ZGlmZiAtLWdpdCBhL0FCT1VULU5MUyBiL0FCT1VULU5MUwppbmRleCA0N2Q1ZTM5Li40ZjUwZmI1IDEwMDY0NAotLS0gYS9BQk9VVC1OTFMKKysrIGIvQUJPVVQtTkxTCkBAIC0xLDEwICsxLDExIEBACi1Ob3RlcyBvbiB0aGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0Ci0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisxIE5vdGVzIG9uIHRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCi0gICBGcmVlIHNvZnR3YXJlIGlzIGdvaW5nIGludGVybmF0aW9uYWwhICBUaGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0Ci1pcyBhIHdheSB0byBnZXQgbWFpbnRhaW5lcnMgb2YgZnJlZSBzb2Z0d2FyZSwgdHJhbnNsYXRvcnMsIGFuZCB1c2VycyBhbGwKLXRvZ2V0aGVyLCBzbyB0aGF0IHdpbGwgZ3JhZHVhbGx5IGJlY29tZSBhYmxlIHRvIHNwZWFrIG1hbnkgbGFuZ3VhZ2VzLgotQSBmZXcgcGFja2FnZXMgYWxyZWFkeSBwcm92aWRlIHRyYW5zbGF0aW9ucyBmb3IgdGhlaXIgbWVzc2FnZXMuCitGcmVlIHNvZnR3YXJlIGlzIGdvaW5nIGludGVybmF0aW9uYWwhICBUaGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0IGlzCithIHdheSB0byBnZXQgbWFpbnRhaW5lcnMgb2YgZnJlZSBzb2Z0d2FyZSwgdHJhbnNsYXRvcnMsIGFuZCB1c2VycyBhbGwKK3RvZ2V0aGVyLCBzbyB0aGF0IGZyZWUgc29mdHdhcmUgd2lsbCBncmFkdWFsbHkgYmVjb21lIGFibGUgdG8gc3BlYWsgbWFueQorbGFuZ3VhZ2VzLiAgQSBmZXcgcGFja2FnZXMgYWxyZWFkeSBwcm92aWRlIHRyYW5zbGF0aW9ucyBmb3IgdGhlaXIKK21lc3NhZ2VzLgogCiAgICBJZiB5b3UgZm91bmQgdGhpcyBgQUJPVVQtTkxTJyBmaWxlIGluc2lkZSBhIGRpc3RyaWJ1dGlvbiwgeW91IG1heQogYXNzdW1lIHRoYXQgdGhlIGRpc3RyaWJ1dGVkIHBhY2thZ2UgZG9lcyB1c2UgR05VIGBnZXR0ZXh0JyBpbnRlcm5hbGx5LApAQCAtMTUsMTcgKzE2LDE3IEBACiAgICBJbnN0YWxsZXJzIHdpbGwgZmluZCBoZXJlIHNvbWUgdXNlZnVsIGhpbnRzLiAgVGhlc2Ugbm90ZXMgYWxzbwogZXhwbGFpbiBob3cgdXNlcnMgc2hvdWxkIHByb2NlZWQgZm9yIGdldHRpbmcgdGhlIHByb2dyYW1zIHRvIHVzZSB0aGUKIGF2YWlsYWJsZSB0cmFuc2xhdGlvbnMuICBUaGV5IHRlbGwgaG93IHBlb3BsZSB3YW50aW5nIHRvIGNvbnRyaWJ1dGUgYW5kCi13b3JrIGF0IHRyYW5zbGF0aW9ucyBzaG91bGQgY29udGFjdCB0aGUgYXBwcm9wcmlhdGUgdGVhbS4KK3dvcmsgb24gdHJhbnNsYXRpb25zIGNhbiBjb250YWN0IHRoZSBhcHByb3ByaWF0ZSB0ZWFtLgogCiAgICBXaGVuIHJlcG9ydGluZyBidWdzIGluIHRoZSBgaW50bC8nIGRpcmVjdG9yeSBvciBidWdzIHdoaWNoIG1heSBiZQogcmVsYXRlZCB0byBpbnRlcm5hdGlvbmFsaXphdGlvbiwgeW91IHNob3VsZCB0ZWxsIGFib3V0IHRoZSB2ZXJzaW9uIG9mCiBgZ2V0dGV4dCcgd2hpY2ggaXMgdXNlZC4gIFRoZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlCiBgaW50bC9WRVJTSU9OJyBmaWxlLCBpbiBpbnRlcm5hdGlvbmFsaXplZCBwYWNrYWdlcy4KIAotUXVpY2sgY29uZmlndXJhdGlvbiBhZHZpY2UKLT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLjEgUXVpY2sgY29uZmlndXJhdGlvbiBhZHZpY2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0gICBJZiB5b3Ugd2FudCB0byBleHBsb2l0IHRoZSBmdWxsIHBvd2VyIG9mIGludGVybmF0aW9uYWxpemF0aW9uLCB5b3UKK0lmIHlvdSB3YW50IHRvIGV4cGxvaXQgdGhlIGZ1bGwgcG93ZXIgb2YgaW50ZXJuYXRpb25hbGl6YXRpb24sIHlvdQogc2hvdWxkIGNvbmZpZ3VyZSBpdCB1c2luZwogCiAgICAgIC4vY29uZmlndXJlIC0td2l0aC1pbmNsdWRlZC1nZXR0ZXh0CkBAIC00NSwzNyArNDYsMzcgQEAKIHlvdSBoYXZlIGluc3RhbGxlZCBhIHJlY2VudCBjb3B5IG9mIHRoZSBHTlUgZ2V0dGV4dCBwYWNrYWdlIHdpdGggdGhlCiBpbmNsdWRlZCBgbGliaW50bCcuCiAKLUlOU1RBTEwgTWF0dGVycwotPT09PT09PT09PT09PT09CisxLjIgSU5TVEFMTCBNYXR0ZXJzCis9PT09PT09PT09PT09PT09PT09CiAKLSAgIFNvbWUgcGFja2FnZXMgYXJlICJsb2NhbGl6YWJsZSIgd2hlbiBwcm9wZXJseSBpbnN0YWxsZWQ7IHRoZQotcHJvZ3JhbXMgdGhleSBjb250YWluIGNhbiBiZSBtYWRlIHRvIHNwZWFrIHlvdXIgb3duIG5hdGl2ZSBsYW5ndWFnZS4KLU1vc3Qgc3VjaCBwYWNrYWdlcyB1c2UgR05VIGBnZXR0ZXh0Jy4gIE90aGVyIHBhY2thZ2VzIGhhdmUgdGhlaXIgb3duCi13YXlzIHRvIGludGVybmF0aW9uYWxpemF0aW9uLCBwcmVkYXRpbmcgR05VIGBnZXR0ZXh0Jy4KK1NvbWUgcGFja2FnZXMgYXJlICJsb2NhbGl6YWJsZSIgd2hlbiBwcm9wZXJseSBpbnN0YWxsZWQ7IHRoZSBwcm9ncmFtcwordGhleSBjb250YWluIGNhbiBiZSBtYWRlIHRvIHNwZWFrIHlvdXIgb3duIG5hdGl2ZSBsYW5ndWFnZS4gIE1vc3Qgc3VjaAorcGFja2FnZXMgdXNlIEdOVSBgZ2V0dGV4dCcuICBPdGhlciBwYWNrYWdlcyBoYXZlIHRoZWlyIG93biB3YXlzIHRvCitpbnRlcm5hdGlvbmFsaXphdGlvbiwgcHJlZGF0aW5nIEdOVSBgZ2V0dGV4dCcuCiAKICAgIEJ5IGRlZmF1bHQsIHRoaXMgcGFja2FnZSB3aWxsIGJlIGluc3RhbGxlZCB0byBhbGxvdyB0cmFuc2xhdGlvbiBvZgogbWVzc2FnZXMuICBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoZXRoZXIgdGhlIHN5c3RlbSBhbHJlYWR5Ci1wcm92aWRlcyB0aGUgR05VIGBnZXR0ZXh0JyBmdW5jdGlvbnMuICBJZiBub3QsIHRoZSBHTlUgYGdldHRleHQnIG93bgotbGlicmFyeSB3aWxsIGJlIHVzZWQuICBUaGlzIGxpYnJhcnkgaXMgd2hvbGx5IGNvbnRhaW5lZCB3aXRoaW4gdGhpcwotcGFja2FnZSwgdXN1YWxseSBpbiB0aGUgYGludGwvJyBzdWJkaXJlY3RvcnksIHNvIHByaW9yIGluc3RhbGxhdGlvbiBvZgotdGhlIEdOVSBgZ2V0dGV4dCcgcGFja2FnZSBpcyBfbm90XyByZXF1aXJlZC4gIEluc3RhbGxlcnMgbWF5IHVzZQotc3BlY2lhbCBvcHRpb25zIGF0IGNvbmZpZ3VyYXRpb24gdGltZSBmb3IgY2hhbmdpbmcgdGhlIGRlZmF1bHQKLWJlaGF2aW91ci4gIFRoZSBjb21tYW5kczoKK3Byb3ZpZGVzIHRoZSBHTlUgYGdldHRleHQnIGZ1bmN0aW9ucy4gIElmIG5vdCwgdGhlIGluY2x1ZGVkIEdOVQorYGdldHRleHQnIGxpYnJhcnkgd2lsbCBiZSB1c2VkLiAgVGhpcyBsaWJyYXJ5IGlzIHdob2xseSBjb250YWluZWQKK3dpdGhpbiB0aGlzIHBhY2thZ2UsIHVzdWFsbHkgaW4gdGhlIGBpbnRsLycgc3ViZGlyZWN0b3J5LCBzbyBwcmlvcgoraW5zdGFsbGF0aW9uIG9mIHRoZSBHTlUgYGdldHRleHQnIHBhY2thZ2UgaXMgX25vdF8gcmVxdWlyZWQuCitJbnN0YWxsZXJzIG1heSB1c2Ugc3BlY2lhbCBvcHRpb25zIGF0IGNvbmZpZ3VyYXRpb24gdGltZSBmb3IgY2hhbmdpbmcKK3RoZSBkZWZhdWx0IGJlaGF2aW91ci4gIFRoZSBjb21tYW5kczoKIAogICAgICAuL2NvbmZpZ3VyZSAtLXdpdGgtaW5jbHVkZWQtZ2V0dGV4dAogICAgICAuL2NvbmZpZ3VyZSAtLWRpc2FibGUtbmxzCiAKLXdpbGwgcmVzcGVjdGl2ZWx5IGJ5cGFzcyBhbnkgcHJlLWV4aXN0aW5nIGBnZXR0ZXh0JyB0byB1c2UgdGhlCit3aWxsLCByZXNwZWN0aXZlbHksIGJ5cGFzcyBhbnkgcHJlLWV4aXN0aW5nIGBnZXR0ZXh0JyB0byB1c2UgdGhlCiBpbnRlcm5hdGlvbmFsaXppbmcgcm91dGluZXMgcHJvdmlkZWQgd2l0aGluIHRoaXMgcGFja2FnZSwgb3IgZWxzZSwKIF90b3RhbGx5XyBkaXNhYmxlIHRyYW5zbGF0aW9uIG9mIG1lc3NhZ2VzLgogCiAgICBXaGVuIHlvdSBhbHJlYWR5IGhhdmUgR05VIGBnZXR0ZXh0JyBpbnN0YWxsZWQgb24geW91ciBzeXN0ZW0gYW5kIHJ1bgogY29uZmlndXJlIHdpdGhvdXQgYW4gb3B0aW9uIGZvciB5b3VyIG5ldyBwYWNrYWdlLCBgY29uZmlndXJlJyB3aWxsCiBwcm9iYWJseSBkZXRlY3QgdGhlIHByZXZpb3VzbHkgYnVpbHQgYW5kIGluc3RhbGxlZCBgbGliaW50bC5hJyBmaWxlIGFuZAotd2lsbCBkZWNpZGUgdG8gdXNlIHRoaXMuICBUaGlzIG1pZ2h0IGJlIG5vdCB3aGF0IGlzIGRlc2lyYWJsZS4gIFlvdQotc2hvdWxkIHVzZSB0aGUgbW9yZSByZWNlbnQgdmVyc2lvbiBvZiB0aGUgR05VIGBnZXR0ZXh0JyBsaWJyYXJ5LiAgSS5lLgotaWYgdGhlIGZpbGUgYGludGwvVkVSU0lPTicgc2hvd3MgdGhhdCB0aGUgbGlicmFyeSB3aGljaCBjb21lcyB3aXRoIHRoaXMKLXBhY2thZ2UgaXMgbW9yZSByZWNlbnQsIHlvdSBzaG91bGQgdXNlCit3aWxsIGRlY2lkZSB0byB1c2UgdGhpcy4gIFRoaXMgbWlnaHQgbm90IGJlIGRlc2lyYWJsZS4gIFlvdSBzaG91bGQgdXNlCit0aGUgbW9yZSByZWNlbnQgdmVyc2lvbiBvZiB0aGUgR05VIGBnZXR0ZXh0JyBsaWJyYXJ5LiAgSS5lLiBpZiB0aGUgZmlsZQorYGludGwvVkVSU0lPTicgc2hvd3MgdGhhdCB0aGUgbGlicmFyeSB3aGljaCBjb21lcyB3aXRoIHRoaXMgcGFja2FnZSBpcworbW9yZSByZWNlbnQsIHlvdSBzaG91bGQgdXNlCiAKICAgICAgLi9jb25maWd1cmUgLS13aXRoLWluY2x1ZGVkLWdldHRleHQKIApAQCAtODYsNyArODcsNyBAQAogZW11bGF0aW9uIG9mIGBnZXR0ZXh0JyBvbiB0b3Agb2YgYGNhdGdldHMnIGNvdWxkIG5vdCBwcm92aWRlIGFsbCB0aGUKIGV4dGVuc2lvbnMgb2YgdGhlIEdOVSBgZ2V0dGV4dCcgbGlicmFyeS4KIAotICAgSW50ZXJuYXRpb25hbGl6ZWQgcGFja2FnZXMgaGF2ZSB1c3VhbGx5IG1hbnkgYHBvL0xMLnBvJyBmaWxlcywgd2hlcmUKKyAgIEludGVybmF0aW9uYWxpemVkIHBhY2thZ2VzIHVzdWFsbHkgaGF2ZSBtYW55IGBwby9MTC5wbycgZmlsZXMsIHdoZXJlCiBMTCBnaXZlcyBhbiBJU08gNjM5IHR3by1sZXR0ZXIgY29kZSBpZGVudGlmeWluZyB0aGUgbGFuZ3VhZ2UuICBVbmxlc3MKIHRyYW5zbGF0aW9ucyBoYXZlIGJlZW4gZm9yYmlkZGVuIGF0IGBjb25maWd1cmUnIHRpbWUgYnkgdXNpbmcgdGhlCiBgLS1kaXNhYmxlLW5scycgc3dpdGNoLCBhbGwgYXZhaWxhYmxlIHRyYW5zbGF0aW9ucyBhcmUgaW5zdGFsbGVkCkBAIC05NSwxMyArOTYsMTYgQEAKIGBMSU5HVUFTJyBzaG91bGQgdGhlbiBjb250YWluIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgdHdvLWxldHRlcgogY29kZXMsIHN0YXRpbmcgd2hpY2ggbGFuZ3VhZ2VzIGFyZSBhbGxvd2VkLgogCi1Vc2luZyBUaGlzIFBhY2thZ2UKLT09PT09PT09PT09PT09PT09PQorMS4zIFVzaW5nIFRoaXMgUGFja2FnZQorPT09PT09PT09PT09PT09PT09PT09PQogCi0gICBBcyBhIHVzZXIsIGlmIHlvdXIgbGFuZ3VhZ2UgaGFzIGJlZW4gaW5zdGFsbGVkIGZvciB0aGlzIHBhY2thZ2UsIHlvdQorQXMgYSB1c2VyLCBpZiB5b3VyIGxhbmd1YWdlIGhhcyBiZWVuIGluc3RhbGxlZCBmb3IgdGhpcyBwYWNrYWdlLCB5b3UKIG9ubHkgaGF2ZSB0byBzZXQgdGhlIGBMQU5HJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgYXBwcm9wcmlhdGUKLWBMTF9DQycgY29tYmluYXRpb24uICBIZXJlIGBMTCcgaXMgYW4gSVNPIDYzOSB0d28tbGV0dGVyIGxhbmd1YWdlIGNvZGUsCi1hbmQgYENDJyBpcyBhbiBJU08gMzE2NiB0d28tbGV0dGVyIGNvdW50cnkgY29kZS4gIEZvciBleGFtcGxlLCBsZXQncworYExMX0NDJyBjb21iaW5hdGlvbi4gIElmIHlvdSBoYXBwZW4gdG8gaGF2ZSB0aGUgYExDX0FMTCcgb3Igc29tZSBvdGhlcgorYExDX3h4eCcgZW52aXJvbm1lbnQgdmFyaWFibGVzIHNldCwgeW91IHNob3VsZCB1bnNldCB0aGVtIGJlZm9yZQorc2V0dGluZyBgTEFORycsIG90aGVyd2lzZSB0aGUgc2V0dGluZyBvZiBgTEFORycgd2lsbCBub3QgaGF2ZSB0aGUKK2Rlc2lyZWQgZWZmZWN0LiAgSGVyZSBgTEwnIGlzIGFuIElTTyA2MzkgdHdvLWxldHRlciBsYW5ndWFnZSBjb2RlLCBhbmQKK2BDQycgaXMgYW4gSVNPIDMxNjYgdHdvLWxldHRlciBjb3VudHJ5IGNvZGUuICBGb3IgZXhhbXBsZSwgbGV0J3MKIHN1cHBvc2UgdGhhdCB5b3Ugc3BlYWsgR2VybWFuIGFuZCBsaXZlIGluIEdlcm1hbnkuICBBdCB0aGUgc2hlbGwKIHByb21wdCwgbWVyZWx5IGV4ZWN1dGUgYHNldGVudiBMQU5HIGRlX0RFJyAoaW4gYGNzaCcpLAogYGV4cG9ydCBMQU5HOyBMQU5HPWRlX0RFJyAoaW4gYHNoJykgb3IgYGV4cG9ydCBMQU5HPWRlX0RFJyAoaW4gYGJhc2gnKS4KQEAgLTExNyw4ICsxMjEsOCBAQAogbGFuZ3VhZ2UgYW5kIGBDQycgZGVub3RpbmcgdGhlIGNvdW50cnksIGlzIHRoZSBvbmUgdXNlIG9uIHN5c3RlbXMgYmFzZWQKIG9uIEdOVSBsaWJjLiAgT24gb3RoZXIgc3lzdGVtcywgc29tZSB2YXJpYXRpb25zIG9mIHRoaXMgc2NoZW1lIGFyZQogdXNlZCwgc3VjaCBhcyBgTEwnIG9yIGBMTF9DQy5FTkNPRElORycuICBZb3UgY2FuIGdldCB0aGUgbGlzdCBvZgotbG9jYWxlcyBzdXBwb3J0ZWQgYnkgeW91ciBzeXN0ZW0gZm9yIHlvdXIgY291bnRyeSBieSBydW5uaW5nIHRoZSBjb21tYW5kCi1gbG9jYWxlIC1hIHwgZ3JlcCAnXkxMJycuCitsb2NhbGVzIHN1cHBvcnRlZCBieSB5b3VyIHN5c3RlbSBmb3IgeW91ciBsYW5ndWFnZSBieSBydW5uaW5nIHRoZQorY29tbWFuZCBgbG9jYWxlIC1hIHwgZ3JlcCAnXkxMJycuCiAKICAgIE5vdCBhbGwgcHJvZ3JhbXMgaGF2ZSB0cmFuc2xhdGlvbnMgZm9yIGFsbCBsYW5ndWFnZXMuICBCeSBkZWZhdWx0LCBhbgogRW5nbGlzaCBtZXNzYWdlIGlzIHNob3duIGluIHBsYWNlIG9mIGEgbm9uZXhpc3RlbnQgdHJhbnNsYXRpb24uICBJZiB5b3UKQEAgLTEzMSwyMiArMTM1LDI4IEBACiByZWFkIHRyYW5zbGF0aW9ucyBpbiBHZXJtYW4gdGhhbiBFbmdsaXNoIGZvciB3aGVuIFN3ZWRpc2ggaXMgbm90CiBhdmFpbGFibGUsIHNldCBgTEFOR1VBR0UnIHRvIGBzdjpkZScgd2hpbGUgbGVhdmluZyBgTEFORycgdG8gYHN2X1NFJy4KIAorICAgU3BlY2lhbCBhZHZpY2UgZm9yIE5vcndlZ2lhbiB1c2VyczogVGhlIGxhbmd1YWdlIGNvZGUgZm9yIE5vcndlZ2lhbgorYm9rbWEqbCBjaGFuZ2VkIGZyb20gYG5vJyB0byBgbmInIHJlY2VudGx5IChpbiAyMDAzKS4gIER1cmluZyB0aGUKK3RyYW5zaXRpb24gcGVyaW9kLCB3aGlsZSBzb21lIG1lc3NhZ2UgY2F0YWxvZ3MgZm9yIHRoaXMgbGFuZ3VhZ2UgYXJlCitpbnN0YWxsZWQgdW5kZXIgYG5iJyBhbmQgc29tZSBvbGRlciBvbmVzIHVuZGVyIGBubycsIGl0J3MgcmVjb21tZW5kZWQKK2ZvciBOb3J3ZWdpYW4gdXNlcnMgdG8gc2V0IGBMQU5HVUFHRScgdG8gYG5iOm5vJyBzbyB0aGF0IGJvdGggbmV3ZXIgYW5kCitvbGRlciB0cmFuc2xhdGlvbnMgYXJlIHVzZWQuCisKICAgIEluIHRoZSBgTEFOR1VBR0UnIGVudmlyb25tZW50IHZhcmlhYmxlLCBidXQgbm90IGluIHRoZSBgTEFORycKIGVudmlyb25tZW50IHZhcmlhYmxlLCBgTExfQ0MnIGNvbWJpbmF0aW9ucyBjYW4gYmUgYWJicmV2aWF0ZWQgYXMgYExMJwogdG8gZGVub3RlIHRoZSBsYW5ndWFnZSdzIG1haW4gZGlhbGVjdC4gIEZvciBleGFtcGxlLCBgZGUnIGlzIGVxdWl2YWxlbnQKIHRvIGBkZV9ERScgKEdlcm1hbiBhcyBzcG9rZW4gaW4gR2VybWFueSksIGFuZCBgcHQnIHRvIGBwdF9QVCcKIChQb3J0dWd1ZXNlIGFzIHNwb2tlbiBpbiBQb3J0dWdhbCkgaW4gdGhpcyBjb250ZXh0LgogCi1UcmFuc2xhdGluZyBUZWFtcwotPT09PT09PT09PT09PT09PT0KKzEuNCBUcmFuc2xhdGluZyBUZWFtcworPT09PT09PT09PT09PT09PT09PT09CiAKLSAgIEZvciB0aGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0IHRvIGJlIGEgc3VjY2Vzcywgd2UgbmVlZCBpbnRlcmVzdGVkCitGb3IgdGhlIEZyZWUgVHJhbnNsYXRpb24gUHJvamVjdCB0byBiZSBhIHN1Y2Nlc3MsIHdlIG5lZWQgaW50ZXJlc3RlZAogcGVvcGxlIHdobyBsaWtlIHRoZWlyIG93biBsYW5ndWFnZSBhbmQgd3JpdGUgaXQgd2VsbCwgYW5kIHdobyBhcmUgYWxzbwogYWJsZSB0byBzeW5lcmdpemUgd2l0aCBvdGhlciB0cmFuc2xhdG9ycyBzcGVha2luZyB0aGUgc2FtZSBsYW5ndWFnZS4KIEVhY2ggdHJhbnNsYXRpb24gdGVhbSBoYXMgaXRzIG93biBtYWlsaW5nIGxpc3QuICBUaGUgdXAtdG8tZGF0ZSBsaXN0IG9mCiB0ZWFtcyBjYW4gYmUgZm91bmQgYXQgdGhlIEZyZWUgVHJhbnNsYXRpb24gUHJvamVjdCdzIGhvbWVwYWdlLAotYGh0dHA6Ly93d3cuaXJvLnVtb250cmVhbC5jYS9jb250cmliL3BvL0hUTUwvJywgaW4gdGhlICJOYXRpb25hbCB0ZWFtcyIKLWFyZWEuCitgaHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvJywgaW4gdGhlICJUZWFtcyIgYXJlYS4KIAogICAgSWYgeW91J2QgbGlrZSB0byB2b2x1bnRlZXIgdG8gX3dvcmtfIGF0IHRyYW5zbGF0aW5nIG1lc3NhZ2VzLCB5b3UKIHNob3VsZCBiZWNvbWUgYSBtZW1iZXIgb2YgdGhlIHRyYW5zbGF0aW5nIHRlYW0gZm9yIHlvdXIgb3duIGxhbmd1YWdlLgpAQCAtMTYwLDQzMyArMTcwLDExMjUgQEAKIF9hY3RpdmVseV8gaW4gdHJhbnNsYXRpb25zLCBvciBhdCBzb2x2aW5nIHRyYW5zbGF0aW9uYWwgZGlmZmljdWx0aWVzLAogcmF0aGVyIHRoYW4gbWVyZWx5IGx1cmtpbmcgYXJvdW5kLiAgSWYgeW91ciB0ZWFtIGRvZXMgbm90IGV4aXN0IHlldCBhbmQKIHlvdSB3YW50IHRvIHN0YXJ0IG9uZSwgb3IgaWYgeW91IGFyZSB1bnN1cmUgYWJvdXQgd2hhdCB0byBkbyBvciBob3cgdG8KLWdldCBzdGFydGVkLCBwbGVhc2Ugd3JpdGUgdG8gYHRyYW5zbGF0aW9uQGlyby51bW9udHJlYWwuY2EnIHRvIHJlYWNoIHRoZQotY29vcmRpbmF0b3IgZm9yIGFsbCB0cmFuc2xhdG9yIHRlYW1zLgorZ2V0IHN0YXJ0ZWQsIHBsZWFzZSB3cml0ZSB0byBgY29vcmRpbmF0b3JAdHJhbnNsYXRpb25wcm9qZWN0Lm9yZycgdG8KK3JlYWNoIHRoZSBjb29yZGluYXRvciBmb3IgYWxsIHRyYW5zbGF0b3IgdGVhbXMuCiAKICAgIFRoZSBFbmdsaXNoIHRlYW0gaXMgc3BlY2lhbC4gIEl0IHdvcmtzIGF0IGltcHJvdmluZyBhbmQgdW5pZm9ybWl6aW5nCi10aGUgdGVybWlub2xvZ3kgaW4gdXNlLiAgUHJvdmVuIGxpbmd1aXN0aWMgc2tpbGwgYXJlIHByYWlzZWQgbW9yZSB0aGFuCi1wcm9ncmFtbWluZyBza2lsbCwgaGVyZS4KK3RoZSB0ZXJtaW5vbG9neSBpbiB1c2UuICBQcm92ZW4gbGluZ3Vpc3RpYyBza2lsbHMgYXJlIHByYWlzZWQgbW9yZSB0aGFuCitwcm9ncmFtbWluZyBza2lsbHMsIGhlcmUuCiAKLUF2YWlsYWJsZSBQYWNrYWdlcwotPT09PT09PT09PT09PT09PT09CisxLjUgQXZhaWxhYmxlIFBhY2thZ2VzCis9PT09PT09PT09PT09PT09PT09PT09CiAKLSAgIExhbmd1YWdlcyBhcmUgbm90IGVxdWFsbHkgc3VwcG9ydGVkIGluIGFsbCBwYWNrYWdlcy4gIFRoZSBmb2xsb3dpbmcKLW1hdHJpeCBzaG93cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiwgYXMgb2YgTWF5IDIwMDMuCitMYW5ndWFnZXMgYXJlIG5vdCBlcXVhbGx5IHN1cHBvcnRlZCBpbiBhbGwgcGFja2FnZXMuICBUaGUgZm9sbG93aW5nCittYXRyaXggc2hvd3MgdGhlIGN1cnJlbnQgc3RhdGUgb2YgaW50ZXJuYXRpb25hbGl6YXRpb24sIGFzIG9mIE1heSAyMDEwLgogVGhlIG1hdHJpeCBzaG93cywgaW4gcmVnYXJkIG9mIGVhY2ggcGFja2FnZSwgZm9yIHdoaWNoIGxhbmd1YWdlcyBQTwogZmlsZXMgaGF2ZSBiZWVuIHN1Ym1pdHRlZCB0byB0cmFuc2xhdGlvbiBjb29yZGluYXRpb24sIHdpdGggYQogdHJhbnNsYXRpb24gcGVyY2VudGFnZSBvZiBhdCBsZWFzdCA1MCUuCiAKLSAgICAgUmVhZHkgUE8gZmlsZXMgICAgICAgYW0gYXogYmUgYmcgY2EgY3MgZGEgZGUgZWwgZW4gZW5fR0IgZW8gZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICBhMnBzICAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICBbXSBbXSBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGFlZ2lzICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgIHwKLSAgICAgYW51YmlzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBhcC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGJhc2ggICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdIFtdIHwKLSAgICAgYmF0Y2hlbG9yICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBiZmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSB8Ci0gICAgIGJpbnV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIFtdIHwKLSAgICAgYmlzb24gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAotICAgICBibHVlei1waW4gICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICB8Ci0gICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgW10gfAotICAgICBjb3JldXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSB8Ci0gICAgIGNwaW8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKLSAgICAgZGFya3N0YXQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBkaWZmdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSBbXSBbXSBbXSAgICAgICAgICBbXSBbXSB8Ci0gICAgIGUyZnNwcm9ncyAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgIFtdICAgICAgICAgfAotICAgICBlcnJvciAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgW10gICAgICBbXSB8Ci0gICAgIGZldGNobWFpbCAgICAgICAgICB8ICAgICAgICAgICAgIFtdICgpIFtdIFtdIFtdICAgICAgICAgICAgIFtdIHwKLSAgICAgZmlsZXV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAotICAgICBmaW5kdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSBbXSBbXSAgICAgICAgICBbXSBbXSB8Ci0gICAgIGZsZXggICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKLSAgICAgZ2FzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBnYXdrICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSB8Ci0gICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ2NjICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gfAotICAgICBnZXR0ZXh0ICAgICAgICAgICAgfCAgICAgICBbXSAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSB8Ci0gICAgIGdldHRleHQtcnVudGltZSAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKLSAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gfAotICAgICBnaW1wLXByaW50ICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgICAgW10gICAgICBbXSB8Ci0gICAgIGdsaXYgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgICAgW10gICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgfAotICAgICBnbnVjYXNoICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgW10gICAgICAgICB8Ci0gICAgIGdudWNhc2gtZ2xvc3NhcnkgICB8ICAgICAgICAgICAgICAgICAgIFtdICgpICAgICAgICAgICAgICAgIFtdIHwKLSAgICAgZ251cGcgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gKCkgICAgW10gW10gICAgICAgICAgW10gW10gfAotICAgICBncGUtY2FsZW5kYXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS1jb25mICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ3BlLWNvbnRhY3RzICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtZWRpdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS1sb2dpbiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ3BlLW93bmVyaW5mbyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtc2tldGNoYm9vayAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS10aW1lc2hlZXQgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ3BlLXRvZGF5ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtdG9kbyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdwaG90bzIgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKLSAgICAgZ3Byb2YgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gfAotICAgICBncHNkcml2ZSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAoKSAgICAoKSAgICAgICAgICAoKSB8Ci0gICAgIGdyZXAgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgIFtdIHwKLSAgICAgZ3JldGwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBoZWxsbyAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSBbXSBbXSAgICAgICAgICBbXSBbXSB8Ci0gICAgIGlkLXV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgIHwKLSAgICAgaW5kZW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgW10gW10gfAotICAgICBqcGlsb3QgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgICAgICAgICAgICBbXSB8Ci0gICAgIGp3aG9pcyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKLSAgICAga2JkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgW10gfAotICAgICBsZCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSB8Ci0gICAgIGxpYmMgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdIFtdIFtdIFtdICAgICAgICAgICAgIFtdIHwKLSAgICAgbGliZ3Bld2lkZ2V0ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAotICAgICBsaWJpY29udiAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICBbXSBbXSB8Ci0gICAgIGxpZmVsaW5lcyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICgpICAgICAgICAgICAgICAgICAgIHwKLSAgICAgbGlseXBvbmQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgfAotICAgICBsaW5nb3RlYWNoICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGxpbmdvdGVhY2hfbGVzc29ucyB8ICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICgpIHwKLSAgICAgbHlueCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgICAgICAgfAotICAgICBtNCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSBbXSBbXSBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIG1haWx1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKLSAgICAgbWFrZSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAotICAgICBtYW4tZGIgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAoKSBbXSBbXSAgICAgICAgICAgICAgICAoKSB8Ci0gICAgIG15c2VjcmV0ZGlhcnkgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKLSAgICAgbmFubyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gKCkgW10gW10gICAgICAgICAgICAgICAgW10gfAotICAgICBuYW5vXzFfMCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAoKSBbXSBbXSAgICAgICAgICAgICAgICBbXSB8Ci0gICAgIG9wY29kZXMgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIFtdIHwKLSAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgICAgW10gfAotICAgICBwdHggICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICBbXSBbXSB8Ci0gICAgIHB5dGhvbiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICByZWNvZGUgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICBbXSBbXSBbXSAgICAgICAgICBbXSBbXSB8Ci0gICAgIHNjcmVlbSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgc2VkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgW10gW10gfAotICAgICBzaC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSB8Ci0gICAgIHNoYXJ1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdIFtdIFtdIFtdICAgICAgICAgICAgIFtdIHwKLSAgICAgc2tldGNoICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gKCkgICAgICAgICAgICAgICAgW10gfAotICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSB8Ci0gICAgIHNwICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKLSAgICAgdGFyICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gW10gW10gICAgICAgICAgICAgICAgW10gfAotICAgICB0ZXhpbmZvICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgICAgICAgICBbXSAgICB8Ci0gICAgIHRleHR1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKLSAgICAgdGluICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICgpICAgICAgICAgfAotICAgICB1dGlsLWxpbnV4ICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSBbXSBbXSAgICAgICAgICAgICAgICBbXSB8Ci0gICAgIHZvcmJpcy10b29scyAgICAgICB8ICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgIFtdIHwKLSAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgfAotICAgICB3ZGlmZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSB8Ci0gICAgIHdnZXQgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdIFtdIFtdIFtdIFtdICAgICAgICAgICAgIFtdIHwKLSAgICAgeGNoYXQgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgICAgICAgW10gfAotICAgICB4cGFkICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYW0gYXogYmUgYmcgY2EgY3MgZGEgZGUgZWwgZW4gZW5fR0IgZW8gZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIDEgIDQgIDIgMzEgMTcgNTQgNjAgMTQgIDEgICA0ICAgMTIgNTYKLSAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGV0IGZhIGZpIGZyIGdhIGdsIGhlIGhyIGh1IGlkIGl0IGphIGtvCi0gICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgYTJwcyAgICAgICAgICAgICAgIHwgW10gICAgW10gW10gICAgICAgICAgICAgICAgICAgKCkgICAgKCkgfAotICAgICBhZWdpcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGFudWJpcyAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgYXAtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBiYXNoICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICB8Ci0gICAgIGJhdGNoZWxvciAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgfAotICAgICBiaW51dGlscyAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8Ci0gICAgIGJpc29uICAgICAgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgICAgICAgICAgIFtdIFtdICAgICAgIHwKLSAgICAgYmx1ZXotcGluICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgICAgICAgW10gW10gICAgICAgICAgfAotICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgY29yZXV0aWxzICAgICAgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gW10gICAgfAotICAgICBjcGlvICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICBbXSB8Ci0gICAgIGRhcmtzdGF0ICAgICAgICAgICB8ICAgICAgICAgICgpIFtdICAgICAgICAgIFtdIFtdICAgICAgICAgIHwKLSAgICAgZGlmZnV0aWxzICAgICAgICAgIHwgICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgW10gICAgfAotICAgICBlMmZzcHJvZ3MgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGVuc2NyaXB0ICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgZXJyb3IgICAgICAgICAgICAgIHwgICAgICAgW10gW10gW10gICAgICAgICAgW10gICAgICAgICAgICAgfAotICAgICBmZXRjaG1haWwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8Ci0gICAgIGZpbGV1dGlscyAgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgIHwKLSAgICAgZmluZHV0aWxzICAgICAgICAgIHwgW10gICAgW10gW10gW10gW10gICAgW10gW10gW10gW10gW10gW10gfAotICAgICBmbGV4ICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8Ci0gICAgIGdhcyAgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ2F3ayAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgfAotICAgICBnY2FsICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdjYyAgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ2V0dGV4dCAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gW10gfAotICAgICBnZXR0ZXh0LXJ1bnRpbWUgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSB8Ci0gICAgIGdldHRleHQtdG9vbHMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKLSAgICAgZ2ltcC1wcmludCAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgfAotICAgICBnbGl2ICAgICAgICAgICAgICAgfCAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdsdW5hcmNsb2NrICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdICAgICAgIFtdICAgICAgIFtdICAgIHwKLSAgICAgZ251Y2FzaCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgfAotICAgICBnbnVjYXNoLWdsb3NzYXJ5ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8Ci0gICAgIGdudXBnICAgICAgICAgICAgICB8IFtdICAgIFtdIFtdICAgIFtdICAgICAgICAgIFtdIFtdIFtdICAgIHwKLSAgICAgZ3BlLWNhbGVuZGFyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBncGUtY29uZiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS1jb250YWN0cyAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ3BlLWVkaXQgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBncGUtbG9naW4gICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS1vd25lcmluZm8gICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgIFtdIFtdICAgICAgICAgIHwKLSAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtdGltZXNoZWV0ICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAgICB8Ci0gICAgIGdwZS10b2RheSAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ3BlLXRvZG8gICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBncGhvdG8yICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICBbXSAgICB8Ci0gICAgIGdwcm9mICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKLSAgICAgZ3BzZHJpdmUgICAgICAgICAgIHwgICAgICAgICAgKCkgICAgICAgICAgICAgW10gICAgKCkgKCkgICAgfAotICAgICBncmVwICAgICAgICAgICAgICAgfCBbXSAgICBbXSBbXSBbXSBbXSBbXSBbXSBbXSBbXSBbXSBbXSAgICB8Ci0gICAgIGdyZXRsICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgaGVsbG8gICAgICAgICAgICAgIHwgW10gW10gW10gW10gW10gW10gW10gW10gW10gW10gW10gW10gW10gfAotICAgICBpZC11dGlscyAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICAgICAgICB8Ci0gICAgIGluZGVudCAgICAgICAgICAgICB8IFtdICAgIFtdIFtdICAgIFtdICAgICAgIFtdIFtdIFtdIFtdICAgIHwKLSAgICAganBpbG90ICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgKCkgICAgfAotICAgICBqd2hvaXMgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSBbXSAgICAgICB8Ci0gICAgIGtiZCAgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgbGQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBsaWJjICAgICAgICAgICAgICAgfCAgICAgICBbXSBbXSAgICBbXSAgICAgICBbXSAgICAgICBbXSBbXSB8Ci0gICAgIGxpYmdwZXdpZGdldCAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICAgICAgICAgIFtdICAgICAgICAgIHwKLSAgICAgbGliaWNvbnYgICAgICAgICAgIHwgICAgICAgW10gW10gW10gW10gICAgW10gW10gW10gW10gICAgICAgfAotICAgICBsaWZlbGluZXMgICAgICAgICAgfCAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGxpbHlwb25kICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgbGluZ290ZWFjaCAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBsaW5nb3RlYWNoX2xlc3NvbnMgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGx5bnggICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgIHwKLSAgICAgbTQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgW10gICAgICAgICAgW10gICAgW10gICAgfAotICAgICBtYWlsdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIG1ha2UgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgIFtdIFtdIFtdICAgICAgICAgIFtdIFtdIHwKLSAgICAgbWFuLWRiICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgKCkgKCkgICAgfAotICAgICBteXNlY3JldGRpYXJ5ICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8Ci0gICAgIG5hbm8gICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgIFtdICAgICAgICAgIFtdIFtdICAgICAgIHwKLSAgICAgbmFub18xXzAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgW10gICAgICAgICAgW10gW10gICAgICAgfAotICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8Ci0gICAgIHBhcnRlZCAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgIFtdICAgIHwKLSAgICAgcHR4ICAgICAgICAgICAgICAgIHwgW10gICAgW10gW10gW10gW10gICAgICAgW10gW10gICAgICAgICAgfAotICAgICBweXRob24gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHJhZGl1cyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgcmVjb2RlICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgW10gW10gICAgW10gW10gW10gICAgICAgfAotICAgICBzY3JlZW0gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHNlZCAgICAgICAgICAgICAgICB8IFtdICAgICAgIFtdIFtdIFtdICAgICAgIFtdIFtdIFtdIFtdICAgIHwKLSAgICAgc2gtdXRpbHMgICAgICAgICAgIHwgW10gICAgW10gW10gICAgICAgICAgICAgW10gICAgW10gW10gICAgfAotICAgICBzaGFydXRpbHMgICAgICAgICAgfCBbXSAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICBbXSAgICB8Ci0gICAgIHNrZXRjaCAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgc291bmR0cmFja2VyICAgICAgIHwgICAgICAgICAgW10gICAgW10gICAgW10gICAgICAgICAgICAgICAgfAotICAgICBzcCAgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAoKSAgICB8Ci0gICAgIHRhciAgICAgICAgICAgICAgICB8IFtdICAgIFtdIFtdICAgIFtdICAgIFtdIFtdIFtdIFtdIFtdICAgIHwKLSAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgICAgW10gICAgfAotICAgICB0ZXh0dXRpbHMgICAgICAgICAgfCAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICBbXSBbXSB8Ci0gICAgIHRpbiAgICAgICAgICAgICAgICB8IFtdICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgdXRpbC1saW51eCAgICAgICAgIHwgW10gICAgW10gW10gICAgICAgICAgICAgW10gICAgKCkgW10gICAgfAotICAgICB2b3JiaXMtdG9vbHMgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHdhc3Rlc2VkZ2UgICAgICAgICB8ICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgd2RpZmYgICAgICAgICAgICAgIHwgW10gICAgICAgW10gICAgW10gICAgICAgW10gW10gICAgICAgICAgfAotICAgICB3Z2V0ICAgICAgICAgICAgICAgfCBbXSAgICBbXSBbXSAgICBbXSBbXSBbXSBbXSAgICAgICBbXSAgICB8Ci0gICAgIHhjaGF0ICAgICAgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKLSAgICAgeHBhZCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGV0IGZhIGZpIGZyIGdhIGdsIGhlIGhyIGh1IGlkIGl0IGphIGtvCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDIwICAxIDE1IDczIDE0IDI0ICA4IDEwIDMwIDMxIDE5IDMxICA5Ci0gICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICBsZyBsdCBsdiBtcyBuYiBubCBubiBubyBwbCBwdCBwdF9CUiBybwotICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgIGEycHMgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgIFtdICAgICgpICgpICgpICBbXSAgIFtdIHwKLSAgICAgYWVnaXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8Ci0gICAgIGFwLXV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgIHwKLSAgICAgYmFzaCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfAotICAgICBiYXRjaGVsb3IgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGJmZCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgYmludXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBiaXNvbiAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgW10gICBbXSB8Ci0gICAgIGJsdWV6LXBpbiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKLSAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGNvcmV1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIHwKLSAgICAgY3BpbyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgIFtdICAgICAgfAotICAgICBkYXJrc3RhdCAgICAgICAgICAgfCAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgW10gICBbXSB8Ci0gICAgIGRpZmZ1dGlscyAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgIFtdICAgICBbXSAgICAgIHwKLSAgICAgZTJmc3Byb2dzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBlbnNjcmlwdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICB8Ci0gICAgIGVycm9yICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgIHwKLSAgICAgZmV0Y2htYWlsICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICgpICAgICAgfAotICAgICBmaWxldXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICB8Ci0gICAgIGZpbmR1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICBbXSAgIFtdIHwKLSAgICAgZmxleCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfAotICAgICBnYXMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdhd2sgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwKLSAgICAgZ2NhbCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdldHRleHQgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIHwKLSAgICAgZ2V0dGV4dC1ydW50aW1lICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgfAotICAgICBnZXR0ZXh0LXRvb2xzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdpbXAtcHJpbnQgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ2xpdiAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfAotICAgICBnbHVuYXJjbG9jayAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdudWNhc2ggICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ251Y2FzaC1nbG9zc2FyeSAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgICAgfAotICAgICBnbnVwZyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS1jYWxlbmRhciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIHwKLSAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBncGUtY29udGFjdHMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8Ci0gICAgIGdwZS1lZGl0ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIHwKLSAgICAgZ3BlLWxvZ2luICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBncGUtb3duZXJpbmZvICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8Ci0gICAgIGdwZS1za2V0Y2hib29rICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIHwKLSAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBncGUtdG9kYXkgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8Ci0gICAgIGdwZS10b2RvICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIHwKLSAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncHJvZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8Ci0gICAgIGdwc2RyaXZlICAgICAgICAgICB8ICAgICAgICAgICAgICAgICgpICAgICgpICAgICAgICAoKSAgICAgIHwKLSAgICAgZ3JlcCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gIFtdICAgW10gfAotICAgICBncmV0bCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGhlbGxvICAgICAgICAgICAgICB8ICAgICAgIFtdIFtdIFtdIFtdIFtdIFtdIFtdICAgICBbXSAgIFtdIHwKLSAgICAgaWQtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgW10gfAotICAgICBpbmRlbnQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICBbXSB8Ci0gICAgIGpwaWxvdCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICgpICAgICgpICAgICAgICAgICAgICAgIHwKLSAgICAgandob2lzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgW10gfAotICAgICBrYmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGxkICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgbGliYyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gW10gICAgIFtdICAgICAgfAotICAgICBsaWJncGV3aWRnZXQgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8Ci0gICAgIGxpYmljb252ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgIFtdIHwKLSAgICAgbGlmZWxpbmVzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBsaWx5cG9uZCAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGxpbmdvdGVhY2ggICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgbGluZ290ZWFjaF9sZXNzb25zIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBseW54ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICB8Ci0gICAgIG00ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICBbXSAgIFtdIHwKLSAgICAgbWFpbHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBtYWtlICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICB8Ci0gICAgIG1hbi1kYiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwKLSAgICAgbXlzZWNyZXRkaWFyeSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfAotICAgICBuYW5vICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICBbXSB8Ci0gICAgIG5hbm9fMV8wICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgIFtdICAgIFtdICAgICAgICAgICAgIHwKLSAgICAgb3Bjb2RlcyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgW10gfAotICAgICBwYXJ0ZWQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgW10gICAgICB8Ci0gICAgIHB0eCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdICAgIFtdIFtdIFtdICBbXSAgIFtdIHwKLSAgICAgcHl0aG9uICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICByYWRpdXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHJlY29kZSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICBbXSAgIFtdIHwKLSAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBzZWQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICBbXSB8Ci0gICAgIHNoLXV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgc2hhcnV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgfAotICAgICBza2V0Y2ggICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8Ci0gICAgIHNvdW5kdHJhY2tlciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgc3AgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICB0YXIgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgICBbXSBbXSAgICAgW10gICBbXSB8Ci0gICAgIHRleGluZm8gICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKLSAgICAgdGV4dHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICB0aW4gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHV0aWwtbGludXggICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgIHwKLSAgICAgdm9yYmlzLXRvb2xzICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gfAotICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHdkaWZmICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgIFtdICAgICBbXSAgIFtdIHwKLSAgICAgd2dldCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgW10gfAotICAgICB4Y2hhdCAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHhwYWQgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgICAgICAgICAgICAgICAgICAgICBsZyBsdCBsdiBtcyBuYiBubCBubiBubyBwbCBwdCBwdF9CUiBybwotICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgMCAgMiAxMSAgNyAyNiAgMyAgNCAxOCAxNSAgMzQgICAzNAotICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcnUgc2sgc2wgc3Igc3YgdGEgdHIgdWsgdmkgd2EgemhfQ04gemhfVFcKLSAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICBhMnBzICAgICAgICAgICAgICAgfCBbXSAgICBbXSAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICB8IDE2Ci0gICAgIGFlZ2lzICAgICAgICAgICAgICB8ICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDAKLSAgICAgYW51YmlzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgfCAgNQotICAgICBhcC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICB8ICAxCi0gICAgIGJhc2ggICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKLSAgICAgYmF0Y2hlbG9yICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMQotICAgICBiZmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgW10gICAgICAgICB8ICA3Ci0gICAgIGJpbnV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICBbXSAgICAgICAgIHwgIDcKLSAgICAgYmlzb24gICAgICAgICAgICAgIHwgW10gICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMwotICAgICBibHVlei1waW4gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3Ci0gICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDAKLSAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQotICAgICBjb3JldXRpbHMgICAgICAgICAgfCBbXSAgICBbXSAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgW10gICB8IDE0Ci0gICAgIGNwaW8gICAgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgICBbXSAgICAgICAgIHwgMTMKLSAgICAgZGFya3N0YXQgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICgpICAgICgpICAgfCAgOQotICAgICBkaWZmdXRpbHMgICAgICAgICAgfCBbXSAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgW10gICB8IDIxCi0gICAgIGUyZnNwcm9ncyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIHwgIDMKLSAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgW10gICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgfCAxMQotICAgICBlcnJvciAgICAgICAgICAgICAgfCAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgW10gICB8IDE0Ci0gICAgIGZldGNobWFpbCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIHwgIDcKLSAgICAgZmlsZXV0aWxzICAgICAgICAgIHwgW10gICAgW10gICAgW10gICAgW10gICAgICAgICAgIFtdICAgIFtdICAgfCAxNQotICAgICBmaW5kdXRpbHMgICAgICAgICAgfCBbXSBbXSBbXSAgICBbXSAgICBbXSAgICAgICAgICAgW10gICAgICAgICB8IDI3Ci0gICAgIGZsZXggICAgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgIHwgMTAKLSAgICAgZ2FzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgfCAgMwotICAgICBnYXdrICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICAgICB8ICA5Ci0gICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgIHwgIDQKLSAgICAgZ2NjICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgfCAgNAotICAgICBnZXR0ZXh0ICAgICAgICAgICAgfCBbXSBbXSBbXSAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgW10gICB8IDE1Ci0gICAgIGdldHRleHQtcnVudGltZSAgICB8IFtdIFtdIFtdICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICBbXSAgIHwgMTYKLSAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQotICAgICBnaW1wLXByaW50ICAgICAgICAgfCAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwCi0gICAgIGdsaXYgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEKLSAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgW10gICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgfCAxMQotICAgICBnbnVjYXNoICAgICAgICAgICAgfCAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICB8ICA0Ci0gICAgIGdudWNhc2gtZ2xvc3NhcnkgICB8ICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgIHwgIDgKLSAgICAgZ251cGcgICAgICAgICAgICAgIHwgICAgW10gICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgIFtdICAgfCAxNgotICAgICBncGUtY2FsZW5kYXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICB8ICA1Ci0gICAgIGdwZS1jb25mICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKLSAgICAgZ3BlLWNvbnRhY3RzICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgfCAgNAotICAgICBncGUtZWRpdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICB8ICA1Ci0gICAgIGdwZS1sb2dpbiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgIHwgIDUKLSAgICAgZ3BlLW93bmVyaW5mbyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgfCAgNwotICAgICBncGUtc2tldGNoYm9vayAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICB8ICA1Ci0gICAgIGdwZS10aW1lc2hlZXQgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgIHwgIDYKLSAgICAgZ3BlLXRvZGF5ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgfCAgNgotICAgICBncGUtdG9kbyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICB8ICA2Ci0gICAgIGdwaG90bzIgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICBbXSAgICAgICAgIHwgIDkKLSAgICAgZ3Byb2YgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgfCAgNwotICAgICBncHNkcml2ZSAgICAgICAgICAgfCAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCi0gICAgIGdyZXAgICAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgIHwgMjQKLSAgICAgZ3JldGwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgotICAgICBoZWxsbyAgICAgICAgICAgICAgfCBbXSBbXSAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICB8IDMzCi0gICAgIGlkLXV0aWxzICAgICAgICAgICB8IFtdICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgIHwgMTEKLSAgICAgaW5kZW50ICAgICAgICAgICAgIHwgW10gW10gICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgfCAxOQotICAgICBqcGlsb3QgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICBbXSAgICAgW10gICAgW10gICB8IDEwCi0gICAgIGp3aG9pcyAgICAgICAgICAgICB8ICgpICAgICAgICAgICgpICAgIFtdICAgICAgICAgICAgICAgICBbXSAgIHwgMTAKLSAgICAga2JkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgfCAgOAotICAgICBsZCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICAgICB8ICA1Ci0gICAgIGxpYmMgICAgICAgICAgICAgICB8ICAgIFtdICAgICAgIFtdICAgIFtdICAgICAgICAgICBbXSAgICAgICAgIHwgMjAKLSAgICAgbGliZ3Bld2lkZ2V0ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgotICAgICBsaWJpY29udiAgICAgICAgICAgfCBbXSBbXSBbXSAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICB8IDIxCi0gICAgIGxpZmVsaW5lcyAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKLSAgICAgbGlseXBvbmQgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAotICAgICBsaW5nb3RlYWNoICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCi0gICAgIGxpbmdvdGVhY2hfbGVzc29ucyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgIHwgIDAKLSAgICAgbHlueCAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgICAgfCAxNAotICAgICBtNCAgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgW10gICAgICAgICB8IDE1Ci0gICAgIG1haWx1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKLSAgICAgbWFrZSAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgW10gICAgW10gICAgICAgICAgIFtdICAgICAgICAgfCAxNQotICAgICBtYW4tZGIgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2Ci0gICAgIG15c2VjcmV0ZGlhcnkgICAgICB8ICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgIHwgIDgKLSAgICAgbmFubyAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgfCAxNQotICAgICBuYW5vXzFfMCAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8IDE1Ci0gICAgIG9wY29kZXMgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgIHwgIDkKLSAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgfCAxMwotICAgICBwdHggICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICAgICB8IDIyCi0gICAgIHB5dGhvbiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDAKLSAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAotICAgICByZWNvZGUgICAgICAgICAgICAgfCBbXSAgICBbXSAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICAgICB8IDE5Ci0gICAgIHNjcmVlbSAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEKLSAgICAgc2VkICAgICAgICAgICAgICAgIHwgICAgW10gW10gICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgICAgfCAyMAotICAgICBzaC11dGlscyAgICAgICAgICAgfCBbXSAgICBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICB8IDEzCi0gICAgIHNoYXJ1dGlscyAgICAgICAgICB8IFtdICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICBbXSAgIHwgMTYKLSAgICAgc2tldGNoICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQotICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3Ci0gICAgIHNwICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIHwgIDMKLSAgICAgdGFyICAgICAgICAgICAgICAgIHwgICAgW10gW10gICAgW10gICAgW10gICAgICAgICAgIFtdICAgICAgICAgfCAyNAotICAgICB0ZXhpbmZvICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgW10gICAgICAgICB8IDEzCi0gICAgIHRleHR1dGlscyAgICAgICAgICB8IFtdICAgIFtdICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICBbXSAgIHwgMTUKLSAgICAgdGluICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMQotICAgICB1dGlsLWxpbnV4ICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICAgICB8IDE0Ci0gICAgIHZvcmJpcy10b29scyAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKLSAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAotICAgICB3ZGlmZiAgICAgICAgICAgICAgfCBbXSBbXSAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICAgICB8IDE3Ci0gICAgIHdnZXQgICAgICAgICAgICAgICB8IFtdIFtdIFtdICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgICBbXSAgIHwgMjUKLSAgICAgeGNoYXQgICAgICAgICAgICAgIHwgICAgW10gW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMQotICAgICB4cGFkICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxCi0gICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgICA1MCB0ZWFtcyAgICAgICAgICAgcnUgc2sgc2wgc3Igc3YgdGEgdHIgdWsgdmkgd2EgemhfQ04gemhfVFcKLSAgICAgICA5NyBkb21haW5zICAgICAgICAgMzIgMTkgMTYgIDAgNTYgIDAgNDggMTAgIDEgIDEgIDEyICAgIDIzICAgIDkxMworICAgICBSZWFkeSBQTyBmaWxlcyAgICAgICBhZiBhbSBhciBhcyBhc3QgYXogYmUgYmVAbGF0aW4gYmcgYm5fSU4gYnMgY2EgY3JoCisgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICBhMnBzICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgYWVnaXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGFudC1waG9uZSAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGJhc2ggICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBiZmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYmlic2hlbGYgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGJpbnV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBiaXNvbiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYmlzb24tcnVudGltZSAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGJsdWV6LXBpbiAgICAgICAgICB8IFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBib21ib25vLWR2ZCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYnV6enRhcmQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGNmbG93ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY29yZXV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8CisgICAgIGNwaW8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjcHBpICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY3BwbGliICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGNyeXB0c2V0dXAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBkZmFyYyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZGlhbG9nICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGRpY28gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBkaWZmdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZGluayAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGRvb2RsZSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBlMmZzcHJvZ3MgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGV4aWYgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBmZXRjaG1haWwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZmluZHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIGZsZXggICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBmcmVlZGluayAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2FzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdhd2sgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBnY2FsICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ2NjICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdldHRleHQtZXhhbXBsZXMgICB8IFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgfAorICAgICBnZXR0ZXh0LXJ1bnRpbWUgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgICAgW10gICAgIHwKKyAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8CisgICAgIGdpcCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBnamF5ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2xpdiAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIGdsdW5hcmNsb2NrICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBnbnViaWZmICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251Y2FzaCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdudWVkdSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnVsaWIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251bmV0ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdudW5ldC1ndGsgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnV0bHMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ29sZCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1hZXJpYWwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtYmVhbSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWJsdWV0b290aCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1jYWxlbmRhciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtY2xvY2sgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1jb250YWN0cyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtZWRpdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWZpbGVtYW5hZ2VyICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1nbyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtbG9naW4gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLW93bmVyaW5mbyAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1wYWNrYWdlICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtc2tldGNoYm9vayAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLXN1ICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS10YXNrbWFuYWdlciAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtdGltZXNoZWV0ICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLXRvZGF5ICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS10b2RvICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGhvdG8yICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3Byb2YgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIGdwc2RyaXZlICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncmFtYWRvaXIgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3JlcCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdydWIgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBnc2FzbCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3NzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdzdC1wbHVnaW5zLWJhZCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBnc3QtcGx1Z2lucy1iYXNlICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMtZ29vZCAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIGdzdC1wbHVnaW5zLXVnbHkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBnc3RyZWFtZXIgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgIHwKKyAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGd0a2FtICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBndGtvcnBoYW4gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgZ3Rrc3BlbGwgICAgICAgICAgIHwgW10gICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGd1dGVucHJpbnQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBoZWxsbyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgaGVscDJtYW4gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGh5bGFmYXggICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBpZHV0aWxzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgaW5kZW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8CisgICAgIGlzb18xNTkyNCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBpc29fMzE2NiAgICAgICAgICAgfCBbXSAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgW10gIFtdICAgW10gW10gW10gIHwKKyAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGlzb180MjE3ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBpc29fNjM5ICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgICAgW10gIHwKKyAgICAgaXNvXzYzOV8zICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICB8CisgICAgIGp3aG9pcyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBrYmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAga2V5dG91Y2ggICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGtleXRvdWNoLWVkaXRvciAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBrZXl0b3VjaC1rZXlib2EuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAga2xhdmFybyAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxhdHJpbmUgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsZCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgbGVhZnBhZCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8CisgICAgIGxpYmMgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgfAorICAgICBsaWJleGlmICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZXh0cmFjdG9yICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmdudXRscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJncGV3aWRnZXQgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZ3BnLWVycm9yICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmdwaG90bzIgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJncGhvdG8yX3BvcnQgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZ3Nhc2wgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmljb252ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBsaWJpZG4gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGlmZWxpbmVzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpZmVyZWEgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBsaWx5cG9uZCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGlua2RyICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxvcmRzYXdhciAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBscHJuZyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbHlueCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIG00ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBtYWlsZnJvbWQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbWFpbHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIG1ha2UgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBtYW4tZGIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbWFuLWRiLW1hbnBhZ2VzICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIG1pbmljb20gICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBta2lzb2ZzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbXlzZXJ2ZXIgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIG5hbm8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgfAorICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHBpZXMgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBwb3B0ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcHNtaXNjICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHBzcHAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBwd2R1dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIHJlY29kZSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICByb3NlZ2FyZGVuICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcnBtICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHJ1c2ggICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzYXJnICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNjcm9sbGtlZXBlciAgICAgICB8ICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBzZWQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgc2hhcnV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8CisgICAgIHNoaXNoaSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBza2VuY2lsICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc29sZmVnZSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNvbGZlZ2UtbWFudWFsICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc3AgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHN5c3N0YXQgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB0YXIgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHRpbiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdW5pY29kZS10cmFuc2xhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHV0aWwtbGludXgtbmcgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICB2aWNlICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdm1tICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHZvcmJpcy10b29scyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgd2RpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHdnZXQgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICB3eXNsaWotcG8gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgeGNoYXQgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8CisgICAgIHhkZy11c2VyLWRpcnMgICAgICB8IFtdICAgICAgIFtdIFtdICAgICBbXSAgICBbXSAgICBbXSAgW10gICAgICBbXSBbXSAgfAorICAgICB4a2V5Ym9hcmQtY29uZmlnICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gW10gIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFmIGFtIGFyIGFzIGFzdCBheiBiZSBiZUBsYXRpbiBiZyBibl9JTiBicyBjYSBjcmgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgIDAgIDIgIDMgMTkgICAxIDExICAgICAzICAgIDI4ICAgMyAgICAxIDM4ICA1CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY3MgZGEgIGRlICBlbCBlbiBlbl9HQiBlbl9aQSBlbyBlcyBldCBldSBmYSBmaQorICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgIGEycHMgICAgICAgICAgICAgICB8IFtdIFtdICBbXSAgW10gICAgIFtdICAgICAgICAgICAgW10gW10gICAgICAgW10gIHwKKyAgICAgYWVnaXMgICAgICAgICAgICAgIHwgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgfAorICAgICBhbnQtcGhvbmUgICAgICAgICAgfCAgICBbXSAgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGFudWJpcyAgICAgICAgICAgICB8ICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gIHwKKyAgICAgYXNwZWxsICAgICAgICAgICAgIHwgW10gW10gIFtdICAgICAgICAgW10gICAgICAgICAgICBbXSAgICAgICAgICAgICAgfAorICAgICBiYXNoICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgIFtdICB8CisgICAgIGJmZCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gIHwKKyAgICAgYmlic2hlbGYgICAgICAgICAgIHwgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgfAorICAgICBiaW51dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICB8CisgICAgIGJpc29uICAgICAgICAgICAgICB8ICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gIHwKKyAgICAgYmlzb24tcnVudGltZSAgICAgIHwgICAgW10gIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgfAorICAgICBibHVlei1waW4gICAgICAgICAgfCBbXSBbXSAgW10gIFtdICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgIFtdICB8CisgICAgIGJvbWJvbm8tZHZkICAgICAgICB8ICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gIHwKKyAgICAgYnV6enRhcmQgICAgICAgICAgIHwgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjZmxvdyAgICAgICAgICAgICAgfCAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICB8CisgICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgIFtdICBbXSAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIHwKKyAgICAgY29yZXV0aWxzICAgICAgICAgIHwgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgfAorICAgICBjcGlvICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICB8CisgICAgIGNwcGkgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gIHwKKyAgICAgY3BwbGliICAgICAgICAgICAgIHwgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgfAorICAgICBjcnlwdHNldHVwICAgICAgICAgfCAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGRmYXJjICAgICAgICAgICAgICB8ICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gIHwKKyAgICAgZGlhbG9nICAgICAgICAgICAgIHwgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSAgICAgICAgfAorICAgICBkaWNvICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGRpZmZ1dGlscyAgICAgICAgICB8IFtdIFtdICBbXSAgW10gICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgW10gIHwKKyAgICAgZGluayAgICAgICAgICAgICAgIHwgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgfAorICAgICBkb29kbGUgICAgICAgICAgICAgfCAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGUyZnNwcm9ncyAgICAgICAgICB8IFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIHwKKyAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgW10gIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBleGlmICAgICAgICAgICAgICAgfCAoKSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICB8CisgICAgIGZldGNobWFpbCAgICAgICAgICB8IFtdIFtdICAoKSAgW10gICAgIFtdICAgICAgICAgICAgW10gICAgICAgICAgICAgIHwKKyAgICAgZmluZHV0aWxzICAgICAgICAgIHwgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgfAorICAgICBmbGV4ICAgICAgICAgICAgICAgfCAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICB8CisgICAgIGZyZWVkaW5rICAgICAgICAgICB8ICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gIHwKKyAgICAgZ2FzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgfAorICAgICBnYXdrICAgICAgICAgICAgICAgfCAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICB8CisgICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIHwKKyAgICAgZ2NjICAgICAgICAgICAgICAgIHwgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgfAorICAgICBnZXR0ZXh0LWV4YW1wbGVzICAgfCAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgIFtdICB8CisgICAgIGdldHRleHQtcnVudGltZSAgICB8ICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgW10gIHwKKyAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgfAorICAgICBnaXAgICAgICAgICAgICAgICAgfCAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdICB8CisgICAgIGdqYXkgICAgICAgICAgICAgICB8ICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gIHwKKyAgICAgZ2xpdiAgICAgICAgICAgICAgIHwgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgfAorICAgICBnbHVuYXJjbG9jayAgICAgICAgfCAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICB8CisgICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251Y2FzaCAgICAgICAgICAgIHwgW10gICAgICgpICAoKSAgICAgKCkgICAgICAgICAgICAoKSAgICAgICAgICAoKSAgfAorICAgICBnbnVlZHUgICAgICAgICAgICAgfCAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICB8CisgICAgIGdudWxpYiAgICAgICAgICAgICB8ICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gIHwKKyAgICAgZ251bmV0ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnVuZXQtZ3RrICAgICAgICAgfCAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdudXRscyAgICAgICAgICAgICB8IFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ29sZCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgfAorICAgICBncGUtYWVyaWFsICAgICAgICAgfCBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICB8CisgICAgIGdwZS1iZWFtICAgICAgICAgICB8IFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gIHwKKyAgICAgZ3BlLWJsdWV0b290aCAgICAgIHwgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgfAorICAgICBncGUtY2FsZW5kYXIgICAgICAgfCAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICB8CisgICAgIGdwZS1jbG9jayAgICAgICAgICB8IFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gIHwKKyAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgfAorICAgICBncGUtY29udGFjdHMgICAgICAgfCAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICB8CisgICAgIGdwZS1lZGl0ICAgICAgICAgICB8ICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gIHwKKyAgICAgZ3BlLWZpbGVtYW5hZ2VyICAgIHwgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgfAorICAgICBncGUtZ28gICAgICAgICAgICAgfCBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICB8CisgICAgIGdwZS1sb2dpbiAgICAgICAgICB8ICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gIHwKKyAgICAgZ3BlLW93bmVyaW5mbyAgICAgIHwgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgfAorICAgICBncGUtcGFja2FnZSAgICAgICAgfCAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICB8CisgICAgIGdwZS1za2V0Y2hib29rICAgICB8IFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gIHwKKyAgICAgZ3BlLXN1ICAgICAgICAgICAgIHwgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgfAorICAgICBncGUtdGFza21hbmFnZXIgICAgfCBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICB8CisgICAgIGdwZS10aW1lc2hlZXQgICAgICB8IFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gIHwKKyAgICAgZ3BlLXRvZGF5ICAgICAgICAgIHwgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgfAorICAgICBncGUtdG9kbyAgICAgICAgICAgfCAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICB8CisgICAgIGdwaG90bzIgICAgICAgICAgICB8IFtdIFtdICAoKSAgICAgICAgIFtdICAgICAgICAgICAgW10gICAgW10gICAgW10gIHwKKyAgICAgZ3Byb2YgICAgICAgICAgICAgIHwgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgfAorICAgICBncHNkcml2ZSAgICAgICAgICAgfCAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICB8CisgICAgIGdyYW1hZG9pciAgICAgICAgICB8ICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgZ3JlcCAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgfAorICAgICBncnViICAgICAgICAgICAgICAgfCAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICB8CisgICAgIGdzYXNsICAgICAgICAgICAgICB8ICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gIHwKKyAgICAgZ3NzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgfAorICAgICBnc3QtcGx1Z2lucy1iYWQgICAgfCBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdICB8CisgICAgIGdzdC1wbHVnaW5zLWJhc2UgICB8IFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgW10gIHwKKyAgICAgZ3N0LXBsdWdpbnMtZ29vZCAgIHwgW10gW10gIFtdICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICBbXSAgfAorICAgICBnc3QtcGx1Z2lucy11Z2x5ICAgfCBbXSBbXSAgW10gIFtdICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdICB8CisgICAgIGdzdHJlYW1lciAgICAgICAgICB8IFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgW10gIHwKKyAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgICAgW10gICgpICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgfAorICAgICBndGthbSAgICAgICAgICAgICAgfCBbXSBbXSAgKCkgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICB8CisgICAgIGd0a29ycGhhbiAgICAgICAgICB8IFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgZ3Rrc3BlbGwgICAgICAgICAgIHwgW10gW10gIFtdICBbXSAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSAgICBbXSAgfAorICAgICBndXRlbnByaW50ICAgICAgICAgfCAgICBbXSAgW10gICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgIFtdICB8CisgICAgIGhlbGxvICAgICAgICAgICAgICB8ICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgW10gIHwKKyAgICAgaGVscDJtYW4gICAgICAgICAgIHwgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgfAorICAgICBoeWxhZmF4ICAgICAgICAgICAgfCAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICB8CisgICAgIGlkdXRpbHMgICAgICAgICAgICB8ICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gIHwKKyAgICAgaW5kZW50ICAgICAgICAgICAgIHwgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICBbXSBbXSBbXSBbXSAgICBbXSAgfAorICAgICBpc29fMTU5MjQgICAgICAgICAgfCAgICBbXSAgICAgICgpICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgIFtdICB8CisgICAgIGlzb18zMTY2ICAgICAgICAgICB8IFtdIFtdICBbXSAgKCkgICAgICAgICAgICAgICAgW10gW10gW10gKCkgICAgW10gIHwKKyAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBpc29fNDIxNyAgICAgICAgICAgfCBbXSBbXSAgW10gICgpICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgIFtdICB8CisgICAgIGlzb182MzkgICAgICAgICAgICB8IFtdIFtdICBbXSAgKCkgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgW10gIHwKKyAgICAgaXNvXzYzOV8zICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBqd2hvaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICB8CisgICAgIGtiZCAgICAgICAgICAgICAgICB8IFtdIFtdICBbXSAgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIHwKKyAgICAga2V5dG91Y2ggICAgICAgICAgIHwgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgfAorICAgICBrZXl0b3VjaC1lZGl0b3IgICAgfCAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICB8CisgICAgIGtleXRvdWNoLWtleWJvYS4uLiB8ICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gIHwKKyAgICAga2xhdmFybyAgICAgICAgICAgIHwgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBsYXRyaW5lICAgICAgICAgICAgfCAgICBbXSAgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICB8CisgICAgIGxkICAgICAgICAgICAgICAgICB8ICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gIHwKKyAgICAgbGVhZnBhZCAgICAgICAgICAgIHwgW10gW10gIFtdICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICBbXSAgfAorICAgICBsaWJjICAgICAgICAgICAgICAgfCBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICB8CisgICAgIGxpYmV4aWYgICAgICAgICAgICB8ICAgIFtdICBbXSAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZXh0cmFjdG9yICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJnbnV0bHMgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmdwZXdpZGdldCAgICAgICB8ICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gIHwKKyAgICAgbGliZ3BnLWVycm9yICAgICAgIHwgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJncGhvdG8yICAgICAgICAgfCAgICBbXSAgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmdwaG90bzJfcG9ydCAgICB8ICAgIFtdICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgbGliZ3Nhc2wgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgfAorICAgICBsaWJpY29udiAgICAgICAgICAgfCBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgIFtdICB8CisgICAgIGxpYmlkbiAgICAgICAgICAgICB8IFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gIHwKKyAgICAgbGlmZWxpbmVzICAgICAgICAgIHwgICAgW10gICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWZlcmVhICAgICAgICAgICAgfCBbXSAgICAgW10gIFtdICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICB8CisgICAgIGxpbHlwb25kICAgICAgICAgICB8IFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gIHwKKyAgICAgbGlua2RyICAgICAgICAgICAgIHwgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgfAorICAgICBsb3Jkc2F3YXIgICAgICAgICAgfCAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxwcm5nICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbHlueCAgICAgICAgICAgICAgIHwgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgfAorICAgICBtNCAgICAgICAgICAgICAgICAgfCBbXSBbXSAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICB8CisgICAgIG1haWxmcm9tZCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbWFpbHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgfAorICAgICBtYWtlICAgICAgICAgICAgICAgfCAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICB8CisgICAgIG1hbi1kYiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbWFuLWRiLW1hbnBhZ2VzICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBtaW5pY29tICAgICAgICAgICAgfCBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICB8CisgICAgIG1raXNvZnMgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gIHwKKyAgICAgbXlzZXJ2ZXIgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBuYW5vICAgICAgICAgICAgICAgfCAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdICB8CisgICAgIG9wY29kZXMgICAgICAgICAgICB8ICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gIHwKKyAgICAgcGFydGVkICAgICAgICAgICAgIHwgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBwaWVzICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHBvcHQgICAgICAgICAgICAgICB8IFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgW10gIHwKKyAgICAgcHNtaXNjICAgICAgICAgICAgIHwgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgfAorICAgICBwc3BwICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICB8CisgICAgIHB3ZHV0aWxzICAgICAgICAgICB8ICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgfAorICAgICByZWNvZGUgICAgICAgICAgICAgfCBbXSBbXSAgW10gIFtdICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgIFtdICB8CisgICAgIHJvc2VnYXJkZW4gICAgICAgICB8ICgpICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgKCkgIHwKKyAgICAgcnBtICAgICAgICAgICAgICAgIHwgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgfAorICAgICBydXNoICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNhcmcgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzY3JvbGxrZWVwZXIgICAgICAgfCBbXSBbXSAgW10gICAgICAgICBbXSAgICAgICAgICAgIFtdICAgICAgICAgIFtdICB8CisgICAgIHNlZCAgICAgICAgICAgICAgICB8IFtdICAgICBbXSAgW10gICAgICAgICAgICAgICAgW10gW10gW10gICAgICAgW10gIHwKKyAgICAgc2hhcnV0aWxzICAgICAgICAgIHwgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICBbXSAgfAorICAgICBzaGlzaGkgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNrZW5jaWwgICAgICAgICAgICB8ICAgIFtdICAoKSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIHwKKyAgICAgc29sZmVnZSAgICAgICAgICAgIHwgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgfAorICAgICBzb2xmZWdlLW1hbnVhbCAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICB8CisgICAgIHNvdW5kdHJhY2tlciAgICAgICB8ICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIHwKKyAgICAgc3AgICAgICAgICAgICAgICAgIHwgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzeXNzdGF0ICAgICAgICAgICAgfCAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICB8CisgICAgIHRhciAgICAgICAgICAgICAgICB8IFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gIHwKKyAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgfAorICAgICB0aW4gICAgICAgICAgICAgICAgfCAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICB8CisgICAgIHVuaWNvZGUtaGFuLXRyYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdW5pY29kZS10cmFuc2xhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB1dGlsLWxpbnV4LW5nICAgICAgfCBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICB8CisgICAgIHZpY2UgICAgICAgICAgICAgICB8ICAgICgpICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdm1tICAgICAgICAgICAgICAgIHwgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB2b3JiaXMtdG9vbHMgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIHdhc3Rlc2VkZ2UgICAgICAgICB8ICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgd2RpZmYgICAgICAgICAgICAgIHwgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgfAorICAgICB3Z2V0ICAgICAgICAgICAgICAgfCBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICB8CisgICAgIHd5c2xpai1wbyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gIHwKKyAgICAgeGNoYXQgICAgICAgICAgICAgIHwgW10gICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICBbXSAgfAorICAgICB4ZGctdXNlci1kaXJzICAgICAgfCBbXSBbXSAgW10gIFtdICAgICAgICAgICAgICAgIFtdIFtdIFtdIFtdICAgIFtdICB8CisgICAgIHhrZXlib2FyZC1jb25maWcgICB8IFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgW10gIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICBjcyBkYSAgZGUgIGVsIGVuIGVuX0dCIGVuX1pBIGVvIGVzIGV0IGV1IGZhIGZpCisgICAgICAgICAgICAgICAgICAgICAgICAgIDY0IDEwNSAxMTcgMTggIDEgICA4ICAgICAwICAgMjggODkgMTggMTkgIDAgMTA0CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnIgIGdhIGdsIGd1IGhlIGhpIGhyIGh1IGh5IGlkICBpcyBpdCBqYSBrYSBrbgorICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgYTJwcyAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICB8CisgICAgIGFlZ2lzICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBhbnQtcGhvbmUgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgYW51YmlzICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICB8CisgICAgIGFzcGVsbCAgICAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgfAorICAgICBiYXNoICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIFtdICAgICAgIHwKKyAgICAgYmZkICAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIGJpYnNoZWxmICAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgfAorICAgICBiaW51dGlscyAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgYmlzb24gICAgICAgICAgICAgIHwgW10gIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIGJpc29uLXJ1bnRpbWUgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gW10gICAgICAgfAorICAgICBibHVlei1waW4gICAgICAgICAgfCBbXSAgW10gICAgICAgICAgICAgICAgW10gW10gW10gIFtdICAgIFtdICAgICAgIHwKKyAgICAgYm9tYm9uby1kdmQgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGJ1enp0YXJkICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBjZmxvdyAgICAgICAgICAgICAgfCAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgY2xpc3AgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGNvcmV1dGlscyAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgW10gICAgICAgICAgfAorICAgICBjcGlvICAgICAgICAgICAgICAgfCBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgY3BwaSAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGNwcGxpYiAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBjcnlwdHNldHVwICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgIHwKKyAgICAgZGZhcmMgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGRpYWxvZyAgICAgICAgICAgICB8IFtdICBbXSBbXSAgICAgICAgICAgICAgICAgICBbXSAgW10gW10gW10gICAgICAgfAorICAgICBkaWNvICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZGlmZnV0aWxzICAgICAgICAgIHwgW10gIFtdIFtdICAgIFtdICAgICAgIFtdICAgIFtdICAgICBbXSBbXSAgICAgICB8CisgICAgIGRpbmsgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBkb29kbGUgICAgICAgICAgICAgfCAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgZTJmc3Byb2dzICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIGVuc2NyaXB0ICAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBleGlmICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gIFtdIFtdIFtdICAgICAgIHwKKyAgICAgZmV0Y2htYWlsICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICBbXSBbXSAgICAgICB8CisgICAgIGZpbmR1dGlscyAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgW10gICAgICAgICAgfAorICAgICBmbGV4ICAgICAgICAgICAgICAgfCBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZnJlZWRpbmsgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIGdhcyAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBnYXdrICAgICAgICAgICAgICAgfCBbXSAgW10gICAgICAgW10gICAgICAgICAgICAgW10gICAgICgpIFtdICAgICAgIHwKKyAgICAgZ2NhbCAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdjYyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBnZXR0ZXh0LWV4YW1wbGVzICAgfCBbXSAgW10gICAgICAgICAgICAgICAgW10gICAgW10gICAgIFtdIFtdICAgICAgIHwKKyAgICAgZ2V0dGV4dC1ydW50aW1lICAgIHwgW10gIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICBbXSBbXSAgICAgICB8CisgICAgIGdldHRleHQtdG9vbHMgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gW10gICAgICAgfAorICAgICBnaXAgICAgICAgICAgICAgICAgfCBbXSAgW10gW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgIFtdICAgICAgIHwKKyAgICAgZ2pheSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdsaXYgICAgICAgICAgICAgICB8ICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbHVuYXJjbG9jayAgICAgICAgfCAgICAgW10gICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgZ251YmlmZiAgICAgICAgICAgIHwgKCkgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAoKSAgICAgICAgICB8CisgICAgIGdudWNhc2ggICAgICAgICAgICB8ICgpICAgICAgICAgICAoKSAgICAgICAoKSAgICAgICAgICAgKCkgW10gICAgICAgfAorICAgICBnbnVlZHUgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgZ251bGliICAgICAgICAgICAgIHwgW10gIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSBbXSAgICAgICB8CisgICAgIGdudW5ldCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnVuZXQtZ3RrICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251dGxzICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGdvbGQgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBncGUtYWVyaWFsICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICB8CisgICAgIGdwZS1ibHVldG9vdGggICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gW10gICAgICAgfAorICAgICBncGUtY2FsZW5kYXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIHwKKyAgICAgZ3BlLWNsb2NrICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICBbXSAgICAgICB8CisgICAgIGdwZS1jb25mICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgfAorICAgICBncGUtY29udGFjdHMgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIFtdICAgICAgIHwKKyAgICAgZ3BlLWVkaXQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICB8CisgICAgIGdwZS1maWxlbWFuYWdlciAgICB8ICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgW10gICAgICAgfAorICAgICBncGUtZ28gICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgIFtdICAgICAgIHwKKyAgICAgZ3BlLWxvZ2luICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICB8CisgICAgIGdwZS1vd25lcmluZm8gICAgICB8IFtdICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgW10gICAgICAgfAorICAgICBncGUtcGFja2FnZSAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIFtdICAgICAgIHwKKyAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICB8CisgICAgIGdwZS1zdSAgICAgICAgICAgICB8IFtdICAgICBbXSAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgW10gICAgICAgfAorICAgICBncGUtdGFza21hbmFnZXIgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgIFtdICAgICAgIHwKKyAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgW10gIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICB8CisgICAgIGdwZS10b2RheSAgICAgICAgICB8IFtdICBbXSBbXSAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgW10gICAgICAgfAorICAgICBncGUtdG9kbyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIFtdICAgICAgIHwKKyAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICBbXSBbXSAgICAgICB8CisgICAgIGdwcm9mICAgICAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBncHNkcml2ZSAgICAgICAgICAgfCAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgIHwKKyAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgW10gIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIGdyZXAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBncnViICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgIFtdICAgICAgICAgIHwKKyAgICAgZ3Nhc2wgICAgICAgICAgICAgIHwgW10gIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICB8CisgICAgIGdzcyAgICAgICAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgfAorICAgICBnc3QtcGx1Z2lucy1iYWQgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgIFtdICAgICAgICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMtYmFzZSAgIHwgW10gICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICBbXSBbXSAgICAgICB8CisgICAgIGdzdC1wbHVnaW5zLWdvb2QgICB8IFtdICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgW10gW10gICAgICAgfAorICAgICBnc3QtcGx1Z2lucy11Z2x5ICAgfCBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgIFtdIFtdICAgICAgIHwKKyAgICAgZ3N0cmVhbWVyICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICBbXSAgICAgICAgICB8CisgICAgIGd0aWNrICAgICAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgfAorICAgICBndGthbSAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgIFtdIFtdICAgICAgIHwKKyAgICAgZ3Rrb3JwaGFuICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICB8CisgICAgIGd0a3NwZWxsICAgICAgICAgICB8IFtdICBbXSBbXSAgICAgICAgICAgICBbXSBbXSBbXSAgICAgW10gW10gICAgICAgfAorICAgICBndXRlbnByaW50ICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgaGVsbG8gICAgICAgICAgICAgIHwgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIGhlbHAybWFuICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBoeWxhZmF4ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgaWR1dGlscyAgICAgICAgICAgIHwgW10gIFtdICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICBbXSAgICAgICAgICB8CisgICAgIGluZGVudCAgICAgICAgICAgICB8IFtdICBbXSBbXSAgICAgICAgICAgICBbXSAgICBbXSAgICAgW10gW10gICAgICAgfAorICAgICBpc29fMTU5MjQgICAgICAgICAgfCAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgIHwKKyAgICAgaXNvXzMxNjYgICAgICAgICAgIHwgKCkgIFtdIFtdIFtdIFtdIFtdIFtdIFtdICAgIFtdICAgICBbXSBbXSAgICAgICB8CisgICAgIGlzb18zMTY2XzIgICAgICAgICB8ICgpICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgW10gICAgICAgICAgfAorICAgICBpc29fNDIxNyAgICAgICAgICAgfCAoKSAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgIFtdIFtdICAgICAgIHwKKyAgICAgaXNvXzYzOSAgICAgICAgICAgIHwgKCkgIFtdICAgIFtdICAgICAgICAgIFtdICAgIFtdICAgICBbXSBbXSAgICBbXSB8CisgICAgIGlzb182MzlfMyAgICAgICAgICB8ICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAorICAgICBqd2hvaXMgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgIFtdICAgICAgICAgIHwKKyAgICAga2JkICAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIGtleXRvdWNoICAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgW10gICAgICAgICAgfAorICAgICBrZXl0b3VjaC1lZGl0b3IgICAgfCAgICAgW10gICAgICAgICAgICAgICAgW10gICAgW10gICAgIFtdICAgICAgICAgIHwKKyAgICAga2V5dG91Y2gta2V5Ym9hLi4uIHwgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICBbXSAgICAgICAgICB8CisgICAgIGtsYXZhcm8gICAgICAgICAgICB8ICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsYXRyaW5lICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgIHwKKyAgICAgbGQgICAgICAgICAgICAgICAgIHwgW10gIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIGxlYWZwYWQgICAgICAgICAgICB8IFtdICBbXSAgICAgICBbXSAgICAgICBbXSAgICBbXSAgICAgW10gKCkgICAgICAgfAorICAgICBsaWJjICAgICAgICAgICAgICAgfCBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgIFtdICAgICAgIHwKKyAgICAgbGliZXhpZiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmV4dHJhY3RvciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJnbnV0bHMgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgbGliZ3Bld2lkZ2V0ICAgICAgIHwgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICB8CisgICAgIGxpYmdwZy1lcnJvciAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBsaWJncGhvdG8yICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgIHwKKyAgICAgbGliZ3Bob3RvMl9wb3J0ICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICB8CisgICAgIGxpYmdzYXNsICAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgfAorICAgICBsaWJpY29udiAgICAgICAgICAgfCBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdIFtdICAgICAgIHwKKyAgICAgbGliaWRuICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICB8CisgICAgIGxpZmVsaW5lcyAgICAgICAgICB8ICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWZlcmVhICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdIFtdICAgICAgIHwKKyAgICAgbGlseXBvbmQgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpbmtkciAgICAgICAgICAgICB8ICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBsb3Jkc2F3YXIgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbHBybmcgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIGx5bnggICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgW10gW10gICAgICAgfAorICAgICBtNCAgICAgICAgICAgICAgICAgfCBbXSAgW10gW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgIFtdICAgICAgIHwKKyAgICAgbWFpbGZyb21kICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIG1haWx1dGlscyAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBtYWtlICAgICAgICAgICAgICAgfCBbXSAgW10gW10gICAgW10gICAgW10gICAgICAgW10gICAgIFtdIFtdICAgICAgIHwKKyAgICAgbWFuLWRiICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICB8CisgICAgIG1hbi1kYi1tYW5wYWdlcyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBtaW5pY29tICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgIFtdICAgICAgIHwKKyAgICAgbWtpc29mcyAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICB8CisgICAgIG15c2VydmVyICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBuYW5vICAgICAgICAgICAgICAgfCBbXSAgW10gW10gICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgb3Bjb2RlcyAgICAgICAgICAgIHwgW10gIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIHBhcnRlZCAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gW10gICAgICAgfAorICAgICBwaWVzICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcG9wdCAgICAgICAgICAgICAgIHwgW10gIFtdIFtdICAgICAgICAgICAgIFtdICAgIFtdICBbXSBbXSBbXSAgICAgICB8CisgICAgIHBzbWlzYyAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBwc3BwICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcHdkdXRpbHMgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIHJhZGl1cyAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICByZWNvZGUgICAgICAgICAgICAgfCBbXSAgW10gW10gICAgW10gICAgICAgW10gICAgW10gICAgIFtdICAgICAgICAgIHwKKyAgICAgcm9zZWdhcmRlbiAgICAgICAgIHwgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAoKSAoKSAgICAgICB8CisgICAgIHJwbSAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgfAorICAgICBydXNoICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc2FyZyAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNjcmVlbSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgfAorICAgICBzY3JvbGxrZWVwZXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgIFtdICAgICAgICAgIHwKKyAgICAgc2VkICAgICAgICAgICAgICAgIHwgW10gIFtdIFtdICAgICAgICAgICAgIFtdICAgIFtdICAgICBbXSBbXSAgICAgICB8CisgICAgIHNoYXJ1dGlscyAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgW10gW10gICAgICAgfAorICAgICBzaGlzaGkgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc2tlbmNpbCAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNvbGZlZ2UgICAgICAgICAgICB8IFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBzb2xmZWdlLW1hbnVhbCAgICAgfCBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc291bmR0cmFja2VyICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIHNwICAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgfAorICAgICBzeXNzdGF0ICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdIFtdICAgICAgIHwKKyAgICAgdGFyICAgICAgICAgICAgICAgIHwgW10gIFtdICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICBbXSBbXSAgICAgICB8CisgICAgIHRleGluZm8gICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gW10gICAgICAgfAorICAgICB0aW4gICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdW5pY29kZS1oYW4tdHJhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHVuaWNvZGUtdHJhbnNsYS4uLiB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB1dGlsLWxpbnV4LW5nICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgIFtdIFtdICAgICAgIHwKKyAgICAgdmljZSAgICAgICAgICAgICAgIHwgKCkgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAoKSAgICAgICAgICB8CisgICAgIHZtbSAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB2b3JiaXMtdG9vbHMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICB8CisgICAgIHdkaWZmICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB3Z2V0ICAgICAgICAgICAgICAgfCBbXSAgW10gICAgICAgICAgICAgW10gW10gICAgW10gICAgIFtdIFtdICAgICAgIHwKKyAgICAgd3lzbGlqLXBvICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIHhjaGF0ICAgICAgICAgICAgICB8IFtdICAgICAgICBbXSAgICBbXSAgICBbXSAgICBbXSAgICAgW10gW10gICAgW10gfAorICAgICB4ZGctdXNlci1kaXJzICAgICAgfCBbXSAgW10gW10gW10gW10gICAgICAgW10gICAgW10gIFtdIFtdIFtdICAgIFtdIHwKKyAgICAgeGtleWJvYXJkLWNvbmZpZyAgIHwgW10gICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICBbXSAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICBmciAgZ2EgZ2wgZ3UgaGUgaGkgaHIgaHUgaHkgaWQgIGlzIGl0IGphIGthIGtuCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEyMSA1MyAyMCAgNCAgOCAgMiAgNSA1MyAgMiAxMjAgIDUgODMgNjYgIDAgIDQKKworICAgICAgICAgICAgICAgICAgICAgICAgICBrbyBrdSBreSBsZyBsdCBsdiBtayBtbCBtbiBtciBtcyBtdCBuYiBuZHMgbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgYTJwcyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIHwKKyAgICAgYWVnaXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYW50LXBob25lICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYW51YmlzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgIHwKKyAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYmFzaCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYmlic2hlbGYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgIHwKKyAgICAgYmludXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYmlzb24gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIHwKKyAgICAgYmlzb24tcnVudGltZSAgICAgIHwgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgW10gICAgW10gICAgICAgIHwKKyAgICAgYmx1ZXotcGluICAgICAgICAgIHwgICAgW10gW10gICAgW10gW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgIHwKKyAgICAgYm9tYm9uby1kdmQgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYnV6enRhcmQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY2Zsb3cgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY29yZXV0aWxzICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY3BpbyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY3BwaSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY3BwbGliICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY3J5cHRzZXR1cCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZGZhcmMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZGlhbG9nICAgICAgICAgICAgIHwgICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgW10gICAgW10gICAgICAgIHwKKyAgICAgZGljbyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZGlmZnV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgIHwKKyAgICAgZGluayAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZG9vZGxlICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZTJmc3Byb2dzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZXhpZiAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZmV0Y2htYWlsICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZmluZHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZmxleCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZnJlZWRpbmsgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ2FzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2F3ayAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2NhbCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2NjICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2V0dGV4dC1leGFtcGxlcyAgIHwgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgICAgICAgIHwKKyAgICAgZ2V0dGV4dC1ydW50aW1lICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2lwICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgIHwKKyAgICAgZ2pheSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2xpdiAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251YmlmZiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251Y2FzaCAgICAgICAgICAgIHwgKCkgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICgpIHwKKyAgICAgZ251ZWR1ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251bGliICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251bmV0ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251bmV0LWd0ayAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251dGxzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIHwKKyAgICAgZ29sZCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWFlcmlhbCAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWJsdWV0b290aCAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgIHwKKyAgICAgZ3BlLWNhbGVuZGFyICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWNsb2NrICAgICAgICAgIHwgW10gICAgW10gICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgICAgICAgIHwKKyAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWNvbnRhY3RzICAgICAgIHwgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWVkaXQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWZpbGVtYW5hZ2VyICAgIHwgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWdvICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgIHwKKyAgICAgZ3BlLWxvZ2luICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLW93bmVyaW5mbyAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgIHwKKyAgICAgZ3BlLXBhY2thZ2UgICAgICAgIHwgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLXN1ICAgICAgICAgICAgIHwgW10gICAgW10gICAgICAgW10gICAgICAgICAgICAgW10gW10gW10gICAgICAgIHwKKyAgICAgZ3BlLXRhc2ttYW5hZ2VyICAgIHwgW10gW10gW10gICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgICAgICAgIHwKKyAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgIHwKKyAgICAgZ3BlLXRvZGF5ICAgICAgICAgIHwgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgICAgICAgIHwKKyAgICAgZ3BlLXRvZG8gICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3Byb2YgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIHwKKyAgICAgZ3BzZHJpdmUgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3JlcCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3J1YiAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3Nhc2wgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3NzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMtYmFkICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMtYmFzZSAgIHwgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMtZ29vZCAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMtdWdseSAgIHwgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgW10gW10gW10gICAgICAgIHwKKyAgICAgZ3N0cmVhbWVyICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3RrYW0gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ3Rrb3JwaGFuICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3Rrc3BlbGwgICAgICAgICAgIHwgICAgICAgW10gICAgW10gW10gICAgICAgW10gICAgW10gICAgW10gW10gICAgIHwKKyAgICAgZ3V0ZW5wcmludCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgaGVsbG8gICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgIHwKKyAgICAgaGVscDJtYW4gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgaHlsYWZheCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgaWR1dGlscyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgaW5kZW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgaXNvXzE1OTI0ICAgICAgICAgIHwgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgaXNvXzMxNjYgICAgICAgICAgIHwgW10gW10gICAgICAgKCkgW10gW10gW10gICAgW10gICAgICAgW10gICAgICAgIHwKKyAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgaXNvXzQyMTcgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgaXNvXzYzOSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgaXNvXzYzOV8zICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgandob2lzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAga2JkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAga2V5dG91Y2ggICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAga2V5dG91Y2gtZWRpdG9yICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAga2V5dG91Y2gta2V5Ym9hLi4uIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAga2xhdmFybyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgbGF0cmluZSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGVhZnBhZCAgICAgICAgICAgIHwgW10gICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliYyAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZXhpZiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZXh0cmFjdG9yICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZ251dGxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIHwKKyAgICAgbGliZ3Bld2lkZ2V0ICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgIHwKKyAgICAgbGliZ3BnLWVycm9yICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZ3Bob3RvMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZ3Bob3RvMl9wb3J0ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZ3Nhc2wgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliaWNvbnYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliaWRuICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGlmZWxpbmVzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGlmZXJlYSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGlseXBvbmQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGlua2RyICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbG9yZHNhd2FyICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbHBybmcgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbHlueCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbTQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbWFpbGZyb21kICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbWFpbHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbWFrZSAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbWFuLWRiICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbWFuLWRiLW1hbnBhZ2VzICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbWluaWNvbSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgbWtpc29mcyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbXlzZXJ2ZXIgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbmFubyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgIHwKKyAgICAgb3Bjb2RlcyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcGllcyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcG9wdCAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgcHNtaXNjICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcHNwcCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcHdkdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcmVjb2RlICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcm9zZWdhcmRlbiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcnBtICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcnVzaCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc2FyZyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc2Nyb2xsa2VlcGVyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdIHwKKyAgICAgc2VkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc2hhcnV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc2hpc2hpICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc2tlbmNpbCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc29sZmVnZSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgc29sZmVnZS1tYW51YWwgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc291bmR0cmFja2VyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc3AgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc3lzc3RhdCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdGFyICAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgdGluICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdW5pY29kZS1oYW4tdHJhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdW5pY29kZS10cmFuc2xhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdXRpbC1saW51eC1uZyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdmljZSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdm1tICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdm9yYmlzLXRvb2xzICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgd2RpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgd2dldCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgd3lzbGlqLXBvICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgeGNoYXQgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgeGRnLXVzZXItZGlycyAgICAgIHwgW10gW10gICAgICAgW10gW10gW10gICAgICAgW10gICAgICAgW10gW10gICAgIHwKKyAgICAgeGtleWJvYXJkLWNvbmZpZyAgIHwgW10gICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAga28ga3Uga3kgbGcgbHQgbHYgbWsgbWwgbW4gbXIgbXMgbXQgbmIgbmRzIG5lCisgICAgICAgICAgICAgICAgICAgICAgICAgIDIwICA1IDEwICAxIDEyIDQ4ICA0ICAyICAyICA0IDI0IDEwIDE5ICAzICAgMQorCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5sICBubiBvciBwYSBwbCAgcHMgcHQgcHRfQlIgcm8gcnUgcncgc2sgc2wgc3Egc3IKKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgIGEycHMgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgW10gIFtdICAgW10gW10gICAgICAgW10gICAgW10gfAorICAgICBhZWdpcyAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgYW50LXBob25lICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICBbXSAgICAgICAgICAgICAgICAgICB8CisgICAgIGFudWJpcyAgICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBhc3BlbGwgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgIFtdIFtdICAgICAgIHwKKyAgICAgYmFzaCAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGJmZCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBiaWJzaGVsZiAgICAgICAgICAgfCBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYmludXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICB8CisgICAgIGJpc29uICAgICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBiaXNvbi1ydW50aW1lICAgICAgfCBbXSAgICAgICAgICAgW10gICAgIFtdICBbXSAgIFtdIFtdICAgICAgIFtdICAgICAgIHwKKyAgICAgYmx1ZXotcGluICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgW10gICBbXSBbXSAgICBbXSBbXSAgICBbXSB8CisgICAgIGJvbWJvbm8tZHZkICAgICAgICB8ICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgfAorICAgICBidXp6dGFyZCAgICAgICAgICAgfCBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY2Zsb3cgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGNsaXNwICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBjb3JldXRpbHMgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgIFtdICBbXSAgICAgIFtdICAgICAgIFtdICAgICAgIHwKKyAgICAgY3BpbyAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGNwcGkgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjcHBsaWIgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY3J5cHRzZXR1cCAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGRmYXJjICAgICAgICAgICAgICB8ICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBkaWFsb2cgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZGljbyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGRpZmZ1dGlscyAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgIFtdICAgW10gW10gICAgICAgICAgICAgW10gfAorICAgICBkaW5rICAgICAgICAgICAgICAgfCAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZG9vZGxlICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisgICAgIGUyZnNwcm9ncyAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBlbnNjcmlwdCAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgIFtdIFtdICAgICAgIFtdICAgICAgIHwKKyAgICAgZXhpZiAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAoKSAgICBbXSAgICAgICAgICB8CisgICAgIGZldGNobWFpbCAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgfAorICAgICBmaW5kdXRpbHMgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgIFtdICAgICAgIFtdICAgICAgIHwKKyAgICAgZmxleCAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgW10gICBbXSBbXSAgICAgICAgICAgICAgICB8CisgICAgIGZyZWVkaW5rICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnYXMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2F3ayAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgW10gICBbXSAgICAgICAgICAgICAgICAgICB8CisgICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKyAgICAgZ2V0dGV4dC1leGFtcGxlcyAgIHwgW10gICAgICAgICAgIFtdICAgICBbXSAgICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSB8CisgICAgIGdldHRleHQtcnVudGltZSAgICB8IFtdICBbXSAgICAgICBbXSAgICAgW10gICAgICAgW10gW10gICAgW10gW10gICAgW10gfAorICAgICBnZXR0ZXh0LXRvb2xzICAgICAgfCAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdIFtdICAgIFtdIFtdICAgIFtdIHwKKyAgICAgZ2lwICAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSB8CisgICAgIGdqYXkgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbGl2ICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICBbXSAgIFtdIFtdICAgIFtdICAgICAgICAgIHwKKyAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgW10gICBbXSAgICAgICBbXSAgICAgICBbXSB8CisgICAgIGdudWJpZmYgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnVjYXNoICAgICAgICAgICAgfCBbXSAgICAgICAgICAgKCkgICAgICAgICAoKSAgICAgICgpICAgICAgICAgICAgICAgIHwKKyAgICAgZ251ZWR1ICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdudWxpYiAgICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgfAorICAgICBnbnVuZXQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251bmV0LWd0ayAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdudXRscyAgICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnb2xkICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWFlcmlhbCAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICBbXSAgW10gICBbXSBbXSAgICAgICBbXSAgICBbXSB8CisgICAgIGdwZS1iZWFtICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgW10gIFtdICAgW10gW10gICAgICAgW10gICAgW10gfAorICAgICBncGUtYmx1ZXRvb3RoICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWNhbGVuZGFyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICBbXSAgICBbXSB8CisgICAgIGdwZS1jbG9jayAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgW10gIFtdICAgW10gW10gICAgW10gW10gICAgW10gfAorICAgICBncGUtY29uZiAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgIFtdICBbXSAgIFtdIFtdICAgIFtdIFtdICAgICAgIHwKKyAgICAgZ3BlLWNvbnRhY3RzICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICBbXSBbXSAgICAgICBbXSAgICBbXSB8CisgICAgIGdwZS1lZGl0ICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgfAorICAgICBncGUtZmlsZW1hbmFnZXIgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgIHwKKyAgICAgZ3BlLWdvICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgW10gICBbXSBbXSAgICBbXSBbXSAgICBbXSB8CisgICAgIGdwZS1sb2dpbiAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtb3duZXJpbmZvICAgICAgfCBbXSAgICAgICAgICAgICAgICAgIFtdICBbXSAgIFtdIFtdICAgIFtdIFtdICAgIFtdIHwKKyAgICAgZ3BlLXBhY2thZ2UgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisgICAgIGdwZS1za2V0Y2hib29rICAgICB8IFtdICAgICAgICAgICAgICAgICAgW10gIFtdICAgW10gW10gICAgICAgW10gICAgW10gfAorICAgICBncGUtc3UgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgIFtdICBbXSAgIFtdIFtdICAgIFtdIFtdICAgIFtdIHwKKyAgICAgZ3BlLXRhc2ttYW5hZ2VyICAgIHwgW10gICAgICAgICAgICAgICAgICBbXSAgW10gICBbXSBbXSAgICBbXSBbXSAgICBbXSB8CisgICAgIGdwZS10aW1lc2hlZXQgICAgICB8IFtdICAgICAgICAgICAgICAgICAgW10gIFtdICAgW10gW10gICAgW10gW10gICAgW10gfAorICAgICBncGUtdG9kYXkgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgIFtdICBbXSAgIFtdIFtdICAgIFtdIFtdICAgIFtdIHwKKyAgICAgZ3BlLXRvZG8gICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICBbXSAgICBbXSB8CisgICAgIGdwaG90bzIgICAgICAgICAgICB8IFtdICAgICAgICBbXSBbXSAgICAgICAgIFtdICAgW10gW10gICAgW10gICAgICAgW10gfAorICAgICBncHJvZiAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgIFtdICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BzZHJpdmUgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGdyYW1hZG9pciAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBncmVwICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgIHwKKyAgICAgZ3J1YiAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGdzYXNsICAgICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAorICAgICBnc3MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMtYmFkICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgW10gICAgICBbXSAgICBbXSAgICAgICAgICB8CisgICAgIGdzdC1wbHVnaW5zLWJhc2UgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgW10gICAgW10gICAgICAgICAgfAorICAgICBnc3QtcGx1Z2lucy1nb29kICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICBbXSAgICAgIFtdICAgIFtdICAgICAgICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMtdWdseSAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgW10gICAgICBbXSAgICBbXSBbXSAgICAgICB8CisgICAgIGdzdHJlYW1lciAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgW10gICAgW10gICAgICAgICAgfAorICAgICBndGljayAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgIHwKKyAgICAgZ3RrYW0gICAgICAgICAgICAgIHwgW10gICAgICAgIFtdIFtdICAgICAgICAgW10gICAgICBbXSAgICBbXSAgICAgICAgICB8CisgICAgIGd0a29ycGhhbiAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBndGtzcGVsbCAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgIFtdICBbXSAgIFtdIFtdICAgIFtdIFtdIFtdIFtdIHwKKyAgICAgZ3V0ZW5wcmludCAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGhlbGxvICAgICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgfAorICAgICBoZWxwMm1hbiAgICAgICAgICAgfCAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgaHlsYWZheCAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGlkdXRpbHMgICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgIFtdICAgW10gW10gICAgICAgICAgICAgICAgfAorICAgICBpbmRlbnQgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICBbXSAgIFtdIFtdICAgIFtdICAgICAgIFtdIHwKKyAgICAgaXNvXzE1OTI0ICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICB8CisgICAgIGlzb18zMTY2ICAgICAgICAgICB8IFtdICBbXSBbXSBbXSBbXSAgICAgKCkgIFtdICAgW10gW10gW10gW10gW10gW10gW10gfAorICAgICBpc29fMzE2Nl8yICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIHwKKyAgICAgaXNvXzQyMTcgICAgICAgICAgIHwgW10gIFtdICAgICAgIFtdICAgICBbXSAgICAgICAgICBbXSBbXSAgICBbXSAgICBbXSB8CisgICAgIGlzb182MzkgICAgICAgICAgICB8IFtdICAgICBbXSBbXSBbXSAgICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgW10gfAorICAgICBpc29fNjM5XzMgICAgICAgICAgfCAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgandob2lzICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgW10gICBbXSAgICAgICAgICAgICAgICAgICB8CisgICAgIGtiZCAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorICAgICBrZXl0b3VjaCAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAga2V5dG91Y2gtZWRpdG9yICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGtleXRvdWNoLWtleWJvYS4uLiB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBrbGF2YXJvICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGF0cmluZSAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGxkICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsZWFmcGFkICAgICAgICAgICAgfCBbXSAgW10gICAgICAgW10gICAgIFtdICBbXSAgICAgIFtdICAgIFtdIFtdICAgIFtdIHwKKyAgICAgbGliYyAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICB8CisgICAgIGxpYmV4aWYgICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICgpICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBsaWJleHRyYWN0b3IgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZ251dGxzICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmdwZXdpZGdldCAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgfAorICAgICBsaWJncGctZXJyb3IgICAgICAgfCAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZ3Bob3RvMiAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmdwaG90bzJfcG9ydCAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgfAorICAgICBsaWJnc2FzbCAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgIFtdIHwKKyAgICAgbGliaWNvbnYgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSB8CisgICAgIGxpYmlkbiAgICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWZlbGluZXMgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGlmZXJlYSAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICBbXSAgW10gICBbXSAoKSAgICAoKSAgICBbXSAgICB8CisgICAgIGxpbHlwb25kICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaW5rZHIgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgbG9yZHNhd2FyICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxwcm5nICAgICAgICAgICAgICB8ICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBseW54ICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgbTQgICAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgW10gICBbXSBbXSAgICAgICAgICAgICAgICB8CisgICAgIG1haWxmcm9tZCAgICAgICAgICB8ICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBtYWlsdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbWFrZSAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIG1hbi1kYiAgICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBtYW4tZGItbWFucGFnZXMgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgbWluaWNvbSAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICBbXSBbXSAgICAgICAgICAgICAgICB8CisgICAgIG1raXNvZnMgICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBteXNlcnZlciAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbmFubyAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIG9wY29kZXMgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorICAgICBwYXJ0ZWQgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgIHwKKyAgICAgcGllcyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHBvcHQgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBwc21pc2MgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgcHNwcCAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHB3ZHV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICByYWRpdXMgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgcmVjb2RlICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICBbXSAgW10gICBbXSBbXSAgICBbXSBbXSAgICAgICB8CisgICAgIHJvc2VnYXJkZW4gICAgICAgICB8ICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgfAorICAgICBycG0gICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcnVzaCAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNhcmcgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzY3JlZW0gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc2Nyb2xsa2VlcGVyICAgICAgIHwgW10gIFtdICAgICAgIFtdICAgICAgICAgICAgICBbXSBbXSAgICBbXSAgICBbXSBbXSB8CisgICAgIHNlZCAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgW10gIFtdICAgW10gW10gICAgW10gW10gICAgW10gfAorICAgICBzaGFydXRpbHMgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdIHwKKyAgICAgc2hpc2hpICAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNrZW5jaWwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzb2xmZWdlICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgc29sZmVnZS1tYW51YWwgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNvdW5kdHJhY2tlciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBzcCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc3lzc3RhdCAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIHRhciAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgfAorICAgICB0ZXhpbmZvICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgdGluICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIHVuaWNvZGUtaGFuLXRyYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB1bmljb2RlLXRyYW5zbGEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdXRpbC1saW51eC1uZyAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgW10gICAgICBbXSAgICAgICBbXSAgICAgICB8CisgICAgIHZpY2UgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB2bW0gICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdm9yYmlzLXRvb2xzICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHdhc3Rlc2VkZ2UgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB3ZGlmZiAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgd2dldCAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICBbXSAgW10gICAgICBbXSAgICBbXSBbXSAgICAgICB8CisgICAgIHd5c2xpai1wbyAgICAgICAgICB8IFtdICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB4Y2hhdCAgICAgICAgICAgICAgfCBbXSAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgIFtdICAgIFtdIFtdIFtdIFtdIHwKKyAgICAgeGRnLXVzZXItZGlycyAgICAgIHwgW10gIFtdIFtdIFtdIFtdICBbXSBbXSAgW10gICBbXSBbXSAgICBbXSBbXSBbXSBbXSB8CisgICAgIHhrZXlib2FyZC1jb25maWcgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmwgIG5uIG9yIHBhIHBsICBwcyBwdCBwdF9CUiBybyBydSBydyBzayBzbCBzcSBzcgorICAgICAgICAgICAgICAgICAgICAgICAgICAxMzUgMTAgIDQgIDcgMTA1ICAxIDI5ICA2MSAgIDQ3IDkxICAzIDU1IDQ3ICA4IDM3CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3YgIHN3IHRhIHRlIHRnIHRoIHRyIHVrIHZpICB3YSB6aF9DTiB6aF9ISyB6aF9UVworICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgYTJwcyAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgIFtdIFtdIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICB8IDI3CisgICAgIGFlZ2lzICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAgOQorICAgICBhbnQtcGhvbmUgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgIDkKKyAgICAgYW51YmlzICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICB8IDE1CisgICAgIGFzcGVsbCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgfCAyMAorICAgICBiYXNoICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwgMTEKKyAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8ICA2CisgICAgIGJpYnNoZWxmICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAxNgorICAgICBiaW51dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgIHwgIDgKKyAgICAgYmlzb24gICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8IDEyCisgICAgIGJpc29uLXJ1bnRpbWUgICAgICB8IFtdICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgIFtdICAgICAgICAgIFtdICAgfCAyOQorICAgICBibHVlei1waW4gICAgICAgICAgfCBbXSAgICAgICAgICAgICAgW10gW10gW10gW10gIFtdICBbXSAgICAgICAgICBbXSAgIHwgMzcKKyAgICAgYm9tYm9uby1kdmQgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8ICA0CisgICAgIGJ1enp0YXJkICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAgNworICAgICBjZmxvdyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICBbXSAgICAgICAgICAgICAgIHwgIDkKKyAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwCisgICAgIGNvcmV1dGlscyAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAyMgorICAgICBjcGlvICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gW10gW10gICAgICBbXSAgICAgICAgICBbXSAgIHwgMTMKKyAgICAgY3BwaSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICB8ICA1CisgICAgIGNwcGxpYiAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgIFtdICAgICAgICAgIFtdICAgfCAxMworICAgICBjcnlwdHNldHVwICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwgIDcKKyAgICAgZGZhcmMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8ICA5CisgICAgIGRpYWxvZyAgICAgICAgICAgICB8IFtdICBbXSAgICAgICAgICBbXSAgICAgICBbXSAgW10gIFtdICAgICAgICAgIFtdICAgfCAzMAorICAgICBkaWNvICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKyAgICAgZGlmZnV0aWxzICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdIFtdIFtdICAgICAgW10gICAgICAgICAgW10gICB8IDMwCisgICAgIGRpbmsgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorICAgICBkb29kbGUgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwgIDcKKyAgICAgZTJmc3Byb2dzICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8IDExCisgICAgIGVuc2NyaXB0ICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAxNworICAgICBleGlmICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMTYKKyAgICAgZmV0Y2htYWlsICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDE3CisgICAgIGZpbmR1dGlscyAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAyMAorICAgICBmbGV4ICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICBbXSAgIHwgMTUKKyAgICAgZnJlZWRpbmsgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8IDEwCisgICAgIGdhcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorICAgICBnYXdrICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMTgKKyAgICAgZ2NhbCAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1CisgICAgIGdjYyAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgfCAgNworICAgICBnZXR0ZXh0LWV4YW1wbGVzICAgfCBbXSAgICAgICAgICAgICAgICAgW10gW10gW10gICAgICBbXSAgICBbXSAgICBbXSAgIHwgMzQKKyAgICAgZ2V0dGV4dC1ydW50aW1lICAgIHwgW10gICAgICAgICAgICAgICAgIFtdIFtdIFtdICAgICAgW10gICAgW10gICAgW10gICB8IDMwCisgICAgIGdldHRleHQtdG9vbHMgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgIFtdICAgICAgICAgIFtdICAgfCAyMgorICAgICBnaXAgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICBbXSAgIHwgMjIKKyAgICAgZ2pheSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisgICAgIGdsaXYgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAxNAorICAgICBnbHVuYXJjbG9jayAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gIFtdICBbXSAgICAgICAgICBbXSAgIHwgMTkKKyAgICAgZ251YmlmZiAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8ICA0CisgICAgIGdudWNhc2ggICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAoKSBbXSAoKSAgICAgICAgICAgICAgICAgICgpICAgfCAgOQorICAgICBnbnVlZHUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgIHwgIDcKKyAgICAgZ251bGliICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDE2CisgICAgIGdudW5ldCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAgMQorICAgICBnbnVuZXQtZ3RrICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKyAgICAgZ251dGxzICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDEwCisgICAgIGdvbGQgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorICAgICBncGUtYWVyaWFsICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMTgKKyAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDE5CisgICAgIGdwZS1ibHVldG9vdGggICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAxMworICAgICBncGUtY2FsZW5kYXIgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gIFtdICBbXSAgICAgICAgICAgICAgIHwgMTIKKyAgICAgZ3BlLWNsb2NrICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdICAgIFtdICBbXSAgW10gICAgICAgICAgICAgICB8IDI4CisgICAgIGdwZS1jb25mICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgW10gIFtdICAgICAgICAgICAgICAgfCAyMAorICAgICBncGUtY29udGFjdHMgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMTcKKyAgICAgZ3BlLWVkaXQgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDEyCisgICAgIGdwZS1maWxlbWFuYWdlciAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgW10gIFtdICAgICAgICAgICAgICAgfCAxNgorICAgICBncGUtZ28gICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgW10gIFtdICBbXSAgICAgICAgICAgICAgIHwgMjUKKyAgICAgZ3BlLWxvZ2luICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDExCisgICAgIGdwZS1vd25lcmluZm8gICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgIFtdICAgICAgICAgIFtdICAgfCAyNQorICAgICBncGUtcGFja2FnZSAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMTMKKyAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDIwCisgICAgIGdwZS1zdSAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICBbXSAgW10gIFtdICAgICAgICAgICAgICAgfCAzMAorICAgICBncGUtdGFza21hbmFnZXIgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgW10gIFtdICBbXSAgICAgICAgICAgICAgIHwgMjkKKyAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgW10gICAgICAgICAgW10gICB8IDI1CisgICAgIGdwZS10b2RheSAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICBbXSAgW10gIFtdICAgICAgICAgIFtdICAgfCAzMAorICAgICBncGUtdG9kbyAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gIFtdICBbXSAgICAgICAgICAgICAgIHwgMTcKKyAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgW10gICAgICAgICAgW10gICB8IDI0CisgICAgIGdwcm9mICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAxNQorICAgICBncHNkcml2ZSAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMTEKKyAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDExCisgICAgIGdyZXAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAxMAorICAgICBncnViICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMTQKKyAgICAgZ3Nhc2wgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgW10gICB8IDE0CisgICAgIGdzcyAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAxMQorICAgICBnc3QtcGx1Z2lucy1iYWQgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMjIKKyAgICAgZ3N0LXBsdWdpbnMtYmFzZSAgIHwgW10gICAgICAgICAgICAgICAgIFtdIFtdIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDI0CisgICAgIGdzdC1wbHVnaW5zLWdvb2QgICB8IFtdICAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAyNQorICAgICBnc3QtcGx1Z2lucy11Z2x5ICAgfCBbXSAgICAgICAgICAgICAgICAgW10gW10gW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMjkKKyAgICAgZ3N0cmVhbWVyICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDIyCisgICAgIGd0aWNrICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAxMworICAgICBndGthbSAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMjAKKyAgICAgZ3Rrb3JwaGFuICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDE0CisgICAgIGd0a3NwZWxsICAgICAgICAgICB8IFtdICAgICAgICAgICAgICBbXSBbXSBbXSBbXSAgW10gIFtdICAgIFtdICAgIFtdICAgfCA0NQorICAgICBndXRlbnByaW50ICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAKKyAgICAgaGVsbG8gICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgIFtdIFtdICAgIFtdICAgICAgW10gICAgICAgICAgW10gICB8IDIxCisgICAgIGhlbHAybWFuICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAgNworICAgICBoeWxhZmF4ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKyAgICAgaWR1dGlscyAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDE3CisgICAgIGluZGVudCAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgIFtdICAgICAgICAgIFtdICAgfCAzMAorICAgICBpc29fMTU5MjQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgKCkgICAgW10gKCkgICAgICBbXSAgICAgICAgICBbXSAgIHwgMTYKKyAgICAgaXNvXzMxNjYgICAgICAgICAgIHwgW10gICAgICAgIFtdICAgICgpIFtdIFtdICgpICBbXSAgW10gICAgW10gICAgKCkgICB8IDUzCisgICAgIGlzb18zMTY2XzIgICAgICAgICB8ICAgICAgICAgICAgICAgICAoKSAgICBbXSAoKSAgICAgIFtdICAgICAgICAgICAgICAgfCAgOQorICAgICBpc29fNDIxNyAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgKCkgW10gW10gKCkgICAgICBbXSAgICBbXSAgICAgICAgIHwgMjYKKyAgICAgaXNvXzYzOSAgICAgICAgICAgIHwgW10gICAgIFtdIFtdICAgICgpICAgIFtdICgpICBbXSAgW10gICAgW10gICAgW10gICB8IDM4CisgICAgIGlzb182MzlfMyAgICAgICAgICB8ICAgICAgICBbXSAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgfCAgOAorICAgICBqd2hvaXMgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICBbXSAgICAgICAgICBbXSAgIHwgMTYKKyAgICAga2JkICAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdIFtdIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDE1CisgICAgIGtleXRvdWNoICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAxNgorICAgICBrZXl0b3VjaC1lZGl0b3IgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMTQKKyAgICAga2V5dG91Y2gta2V5Ym9hLi4uIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDE0CisgICAgIGtsYXZhcm8gICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAxMQorICAgICBsYXRyaW5lICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMTAKKyAgICAgbGQgICAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgW10gICB8IDExCisgICAgIGxlYWZwYWQgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgIFtdICAgICAgICAgIFtdICAgfCAzMworICAgICBsaWJjICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICBbXSAgICAgICAgICBbXSAgIHwgMjEKKyAgICAgbGliZXhpZiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgKCkgICAgICAgICAgICAgICB8ICA2CisgICAgIGxpYmV4dHJhY3RvciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAgMQorICAgICBsaWJnbnV0bHMgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgIDkKKyAgICAgbGliZ3Bld2lkZ2V0ICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDE0CisgICAgIGxpYmdwZy1lcnJvciAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAgOQorICAgICBsaWJncGhvdG8yICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgIHwgIDgKKyAgICAgbGliZ3Bob3RvMl9wb3J0ICAgIHwgW10gICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgW10gICB8IDEzCisgICAgIGxpYmdzYXNsICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAxMworICAgICBsaWJpY29udiAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gIFtdICBbXSAgICAgICAgICAgICAgIHwgMjEKKyAgICAgbGliaWRuICAgICAgICAgICAgIHwgKCkgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDExCisgICAgIGxpZmVsaW5lcyAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorICAgICBsaWZlcmVhICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICBbXSAgICAgICAgICAgICAgIHwgMjEKKyAgICAgbGlseXBvbmQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8ICA3CisgICAgIGxpbmtkciAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgIFtdICAgICAgICAgIFtdICAgfCAxNworICAgICBsb3Jkc2F3YXIgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEKKyAgICAgbHBybmcgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisgICAgIGx5bnggICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAxNworICAgICBtNCAgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICBbXSAgIHwgMTkKKyAgICAgbWFpbGZyb21kICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisgICAgIG1haWx1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorICAgICBtYWtlICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMjEKKyAgICAgbWFuLWRiICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICB8ICA4CisgICAgIG1hbi1kYi1tYW5wYWdlcyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorICAgICBtaW5pY29tICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwgMTYKKyAgICAgbWtpc29mcyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICB8ICA5CisgICAgIG15c2VydmVyICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAorICAgICBuYW5vICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICBbXSAgIHwgMjEKKyAgICAgb3Bjb2RlcyAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8IDExCisgICAgIHBhcnRlZCAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgICAgICAgICAgICAgIFtdICAgfCAxNQorICAgICBwaWVzICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKyAgICAgcG9wdCAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgIFtdIFtdICAgIFtdICAgICAgW10gICAgICAgICAgW10gICB8IDI3CisgICAgIHBzbWlzYyAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAxMQorICAgICBwc3BwICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKyAgICAgcHdkdXRpbHMgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8ICA2CisgICAgIHJhZGl1cyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAgOQorICAgICByZWNvZGUgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMjgKKyAgICAgcm9zZWdhcmRlbiAgICAgICAgIHwgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAwCisgICAgIHJwbSAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgfCAxMQorICAgICBydXNoICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKyAgICAgc2FyZyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxCisgICAgIHNjcmVlbSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAgMworICAgICBzY3JvbGxrZWVwZXIgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gW10gW10gICAgICAgICAgICAgICAgICBbXSAgIHwgMjcKKyAgICAgc2VkICAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgW10gICAgICAgICAgW10gICB8IDMwCisgICAgIHNoYXJ1dGlscyAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgIFtdICAgICAgICAgIFtdICAgfCAyMgorICAgICBzaGlzaGkgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKyAgICAgc2tlbmNpbCAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8ICA3CisgICAgIHNvbGZlZ2UgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAxNgorICAgICBzb2xmZWdlLW1hbnVhbCAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDgKKyAgICAgc291bmR0cmFja2VyICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8ICA5CisgICAgIHNwICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworICAgICBzeXNzdGF0ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMTUKKyAgICAgdGFyICAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdIFtdIFtdICAgICAgW10gICAgICAgICAgW10gICB8IDIzCisgICAgIHRleGluZm8gICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAxNgorICAgICB0aW4gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKyAgICAgdW5pY29kZS1oYW4tdHJhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAwCisgICAgIHVuaWNvZGUtdHJhbnNsYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgorICAgICB1dGlsLWxpbnV4LW5nICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gW10gW10gICAgICAgICAgICAgICAgICAgICAgIHwgMjAKKyAgICAgdmljZSAgICAgICAgICAgICAgIHwgKCkgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxCisgICAgIHZtbSAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorICAgICB2b3JiaXMtdG9vbHMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwgIDYKKyAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCisgICAgIHdkaWZmICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAgNworICAgICB3Z2V0ICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICBbXSAgICAgICAgICBbXSAgIHwgMjYKKyAgICAgd3lzbGlqLXBvICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICB8ICA4CisgICAgIHhjaGF0ICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgIFtdICAgICAgICAgIFtdICAgfCAzNgorICAgICB4ZGctdXNlci1kaXJzICAgICAgfCBbXSAgICAgW10gICAgICAgW10gW10gW10gW10gICAgICBbXSAgICBbXSAgICBbXSAgIHwgNjAKKyAgICAgeGtleWJvYXJkLWNvbmZpZyAgIHwgW10gICAgICAgICAgICAgICAgIFtdIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICB8IDI1CisgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgIDg0IHRlYW1zICAgICAgICAgICBzdiAgc3cgdGEgdGUgdGcgdGggdHIgdWsgdmkgIHdhIHpoX0NOIHpoX0hLIHpoX1RXCisgICAgICAxNzggZG9tYWlucyAgICAgICAgIDExOSAgMSAgMyAgMiAgMCAxMCA2NiA1MCAxNTUgMTcgIDk3ICAgICA3ICAgIDQxICAgIDI2MTAKIAogICAgU29tZSBjb3VudGVycyBpbiB0aGUgcHJlY2VkaW5nIG1hdHJpeCBhcmUgaGlnaGVyIHRoYW4gdGhlIG51bWJlciBvZgogdmlzaWJsZSBibG9ja3MgbGV0IHVzIGV4cGVjdC4gIFRoaXMgaXMgYmVjYXVzZSBhIGZldyBleHRyYSBQTyBmaWxlcyBhcmUKQEAgLTU5OSwxNSArMTMwMSwxNSBAQAogbGFnIGJldHdlZW4gdGhlIG1lcmUgZXhpc3RlbmNlIGEgUE8gZmlsZSBhbmQgaXRzIHdpZGUgYXZhaWxhYmlsaXR5IGluIGEKIGRpc3RyaWJ1dGlvbi4KIAotICAgSWYgTWF5IDIwMDMgc2VlbXMgdG8gYmUgb2xkLCB5b3UgbWF5IGZldGNoIGEgbW9yZSByZWNlbnQgY29weSBvZgorICAgSWYgTWF5IDIwMTAgc2VlbXMgdG8gYmUgb2xkLCB5b3UgbWF5IGZldGNoIGEgbW9yZSByZWNlbnQgY29weSBvZgogdGhpcyBgQUJPVVQtTkxTJyBmaWxlIG9uIG1vc3QgR05VIGFyY2hpdmUgc2l0ZXMuICBUaGUgbW9zdCB1cC10by1kYXRlCiBtYXRyaXggd2l0aCBmdWxsIHBlcmNlbnRhZ2UgZGV0YWlscyBjYW4gYmUgZm91bmQgYXQKLWBodHRwOi8vd3d3Lmlyby51bW9udHJlYWwuY2EvY29udHJpYi9wby9IVE1ML21hdHJpeC5odG1sJy4KK2BodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy9leHRyYS9tYXRyaXguaHRtbCcuCiAKLVVzaW5nIGBnZXR0ZXh0JyBpbiBuZXcgcGFja2FnZXMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuNiBVc2luZyBgZ2V0dGV4dCcgaW4gbmV3IHBhY2thZ2VzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0gICBJZiB5b3UgYXJlIHdyaXRpbmcgYSBmcmVlbHkgYXZhaWxhYmxlIHByb2dyYW0gYW5kIHdhbnQgdG8KK0lmIHlvdSBhcmUgd3JpdGluZyBhIGZyZWVseSBhdmFpbGFibGUgcHJvZ3JhbSBhbmQgd2FudCB0bwogaW50ZXJuYXRpb25hbGl6ZSBpdCB5b3UgYXJlIHdlbGNvbWUgdG8gdXNlIEdOVSBgZ2V0dGV4dCcgaW4geW91cgogcGFja2FnZS4gIE9mIGNvdXJzZSB5b3UgaGF2ZSB0byByZXNwZWN0IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwogTGljZW5zZSB3aGljaCBjb3ZlcnMgdGhlIHVzZSBvZiB0aGUgR05VIGBnZXR0ZXh0JyBsaWJyYXJ5LiAgVGhpcyBtZWFucwpAQCAtNjIwLDYgKzEzMjIsNiBAQAogRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0IGlzIGFsc28gYXZhaWxhYmxlIGZvciBwYWNrYWdlcyB3aGljaCBhcmUgbm90CiBkZXZlbG9wZWQgaW5zaWRlIHRoZSBHTlUgcHJvamVjdC4gIFRoZXJlZm9yZSB0aGUgaW5mb3JtYXRpb24gZ2l2ZW4gYWJvdmUKIGFwcGxpZXMgYWxzbyBmb3IgZXZlcnkgb3RoZXIgRnJlZSBTb2Z0d2FyZSBQcm9qZWN0LiAgQ29udGFjdAotYHRyYW5zbGF0aW9uQGlyby51bW9udHJlYWwuY2EnIHRvIG1ha2UgdGhlIGAucG90JyBmaWxlcyBhdmFpbGFibGUgdG8KLXRoZSB0cmFuc2xhdGlvbiB0ZWFtcy4KK2Bjb29yZGluYXRvckB0cmFuc2xhdGlvbnByb2plY3Qub3JnJyB0byBtYWtlIHRoZSBgLnBvdCcgZmlsZXMgYXZhaWxhYmxlCit0byB0aGUgdHJhbnNsYXRpb24gdGVhbXMuCiAKZGlmZiAtLWdpdCBhL0FVVEhPUlMgYi9BVVRIT1JTCmluZGV4IDBhM2NhNmYuLjgwNmIxNDQgMTAwNjQ0Ci0tLSBhL0FVVEhPUlMKKysrIGIvQVVUSE9SUwpAQCAtNSw0ICs1LDM4IEBACiBSaWNoYXJkIFN0YWxsbWFuIG1hZGUgaXQgWWFjYy1jb21wYXRpYmxlLgogCiBXaWxmcmVkIEhhbnNlbiBvZiBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eSBhZGRlZCBtdWx0aWNoYXJhY3Rlcgotc3RyaW5nIGxpdGVyYWxzIGFuZCBvdGhlciBmZWF0dXJlcy4KK3N0cmluZyBsaXRlcmFscyBhbmQgb3RoZXIgZmVhdHVyZXMgKEJpc29uIDEuMjUsIDE5OTUpLgorCitBa2ltIERlbWFpbGxlIHJld3JvdGUgdGhlIHBhcnNlciBpbiBCaXNvbiwgYW5kIGNoYW5nZWQgdGhlIGJhY2sgZW5kIHRvCit1c2UgTTQgKDEuNTAsIDIwMDIpLgorCitQYXVsIEhpbGZpbmdlciBhZGRlZCBHTFIgc3VwcG9ydCAoQmlzb24gMS41MCwgMjAwMikuCisKK0pvZWwgRS4gRGVubnkgY29udHJpYnV0ZWQgY2Fub25pY2FsLUxSIHN1cHBvcnQsIGFuZCBpbnZlbnRlZCBhbmQgYWRkZWQKK0lFTFIgYW5kIExBQyAoTG9va2FoZWFkIENvcnJlY3Rpb24pIHN1cHBvcnQgKEJpc29uIDIuNSwgMjAxMSkuCisKK1Bhb2xvIEJvbnppbmkgY29udHJpYnV0ZWQgSmF2YSBzdXBwb3J0IChCaXNvbiAyLjQsIDIwMDgpLgorCitBbGV4IFJvemVubWFuIGFkZGVkIG5hbWVkIHJlZmVyZW5jZSBzdXBwb3J0IChCaXNvbiAyLjUsIDIwMTEpLgorCitQYXVsIEVnZ2VydCBmaXhlZCBhIG1pbGxpb24gcG9ydGFiaWxpdHkgaXNzdWVzLCBhcmJpdHJhcnkgbGltaXRhdGlvbnMsCithbmQgbmFzdHkgYnVncy4KKworLS0tLS0KKworQ29weXJpZ2h0IChDKSAxOTk4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCmRpZmYgLS1naXQgYS9BbmRyb2lkLm1rIGIvQW5kcm9pZC5tawppbmRleCBmMjMyMTcyLi5kNWU4NzdhIDEwMDY0NAotLS0gYS9BbmRyb2lkLm1rCisrKyBiL0FuZHJvaWQubWsKQEAgLTQsODEgKzQsMTczIEBACiAjIEFuZHJvaWQgQXNzZXQgUGFja2FnaW5nIFRvb2wKICMKIAotaWZlcSAoJChIT1NUX09TKSxsaW51eCkKIAogTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKIAotTE9DQUxfU1JDX0ZJTEVTIDo9IFwKLQlsaWIvYWJpdHNldC5jIFwKLQlsaWIvYXJnbWF0Y2guYyBcCi0JbGliL2Jhc2VuYW1lLmMgXAotCWxpYi9iaXRzZXQuYyBcCi0JbGliL2JpdHNldF9zdGF0cy5jIFwKLQlsaWIvYml0c2V0di1wcmludC5jIFwKLQlsaWIvYml0c2V0di5jIFwKLQlsaWIvZGlybmFtZS5jIFwKLQlsaWIvZHVwLXNhZmVyLmMgXAotCWxpYi9lYml0c2V0LmMgXAotCWxpYi9leGl0ZmFpbC5jIFwKLQlsaWIvZmQtc2FmZXIuYyBcCi0JbGliL2ZvcGVuLXNhZmVyLmMgXAotCWxpYi9nZXQtZXJybm8uYyBcCi0JbGliL2hhcmQtbG9jYWxlLmMgXAotCWxpYi9oYXNoLmMgXAotCWxpYi9sYml0c2V0LmMgXAotCWxpYi9tYnN3aWR0aC5jIFwKLQlsaWIvcGlwZS1zYWZlci5jIFwKLQlsaWIvcXVvdGUuYyBcCi0JbGliL3F1b3RlYXJnLmMgXAotCWxpYi9zdHJpcHNsYXNoLmMgXAotCWxpYi9zdWJwaXBlLmMgXAotCWxpYi90aW1ldmFyLmMgXAotCWxpYi92Yml0c2V0LmMgXAotCWxpYi94YWxsb2MtZGllLmMgXAotCWxpYi94bWFsbG9jLmMgXAotCWxpYi94c3RybmR1cC5jIFwKLQlcCi0Jc3JjL0xSMC5jIFwKLQlzcmMvYXNzb2MuYyBcCi0Jc3JjL2Nsb3N1cmUuYyBcCi0Jc3JjL2NvbXBsYWluLmMgXAotCXNyYy9jb25mbGljdHMuYyBcCi0Jc3JjL2Rlcml2ZXMuYyBcCi0Jc3JjL2ZpbGVzLmMgXAotCXNyYy9nZXRhcmdzLmMgXAotCXNyYy9ncmFtLmMgXAotCXNyYy9sYWxyLmMgXAotCXNyYy9sb2NhdGlvbi5jIFwKLQlzcmMvbWFpbi5jIFwKLQlzcmMvbXVzY2xlX3RhYi5jIFwKLQlzcmMvbnVsbGFibGUuYyBcCi0Jc3JjL291dHB1dC5jIFwKLQlzcmMvcGFyc2UtZ3JhbS5jIFwKLQlzcmMvcHJpbnQuYyBcCi0Jc3JjL3ByaW50X2dyYXBoLmMgXAotCXNyYy9yZWFkZXIuYyBcCi0Jc3JjL3JlZHVjZS5jIFwKLQlzcmMvcmVsYXRpb24uYyBcCi0Jc3JjL3NjYW4tZ3JhbS1jLmMgXAotCXNyYy9zY2FuLXNrZWwtYy5jIFwKLQlzcmMvc3RhdGUuYyBcCi0Jc3JjL3N5bWxpc3QuYyBcCi0Jc3JjL3N5bXRhYi5jIFwKLQlzcmMvdGFibGVzLmMgXAotCXNyYy91bmlxc3RyLmMgXAotCXNyYy92Y2cuYwotCi1MT0NBTF9NT0RVTEUgOj0gYmlzb24KLUxPQ0FMX01PRFVMRV9DTEFTUyA6PSBFWEVDVVRBQkxFUwotTE9DQUxfSVNfSE9TVF9NT0RVTEUgOj0gdHJ1ZQotaW50ZXJtZWRpYXRlcyA6PSAkKGNhbGwgbG9jYWwtaW50ZXJtZWRpYXRlcy1kaXIpCi0KLUxPQ0FMX0NGTEFHUyA6PSAtREhBVkVfQ09ORklHX0ggLURQS0dEQVRBRElSPVwiJChQV0QpLyQoTE9DQUxfUEFUSCkvZGF0YVwiCitMT0NBTF9NT0RVTEUgOj0gbGliYmlzb24KIAogTE9DQUxfQ19JTkNMVURFUyA6PSBcCi0JJChMT0NBTF9QQVRIKS9saWIKKyAgICAkKExPQ0FMX1BBVEgpLyQoQlVJTERfT1MpLWxpYiBcCisgICAgJChMT0NBTF9QQVRIKS9saWIKKworTE9DQUxfU1JDX0ZJTEVTIDo9IFwKKyAgICBsaWIvYWJpdHNldC5jIFwKKyAgICBsaWIvYXJnbWF0Y2guYyBcCisgICAgbGliL2FzbnByaW50Zi5jIFwKKyAgICBsaWIvYmFzZW5hbWUtbGdwbC5jIFwKKyAgICBsaWIvYmFzZW5hbWUuYyBcCisgICAgbGliL2JpbmFyeS1pby5jIFwKKyAgICBsaWIvYml0cm90YXRlLmMgXAorICAgIGxpYi9iaXRzZXQuYyBcCisgICAgbGliL2JpdHNldF9zdGF0cy5jIFwKKyAgICBsaWIvYml0c2V0di1wcmludC5jIFwKKyAgICBsaWIvYml0c2V0di5jIFwKKyAgICBsaWIvYy1jdHlwZS5jIFwKKyAgICBsaWIvYy1zdHJjYXNlY21wLmMgXAorICAgIGxpYi9jLXN0cm5jYXNlY21wLmMgXAorICAgIGxpYi9jbG9leGVjLmMgXAorICAgIGxpYi9jbG9zZS1zdHJlYW0uYyBcCisgICAgbGliL2Nsb3Nlb3V0LmMgXAorICAgIGxpYi9kaXJuYW1lLWxncGwuYyBcCisgICAgbGliL2Rpcm5hbWUuYyBcCisgICAgbGliL2R1cC1zYWZlci1mbGFnLmMgXAorICAgIGxpYi9kdXAtc2FmZXIuYyBcCisgICAgbGliL2ViaXRzZXQuYyBcCisgICAgbGliL2V4aXRmYWlsLmMgXAorICAgIGxpYi9mYXRhbC1zaWduYWwuYyBcCisgICAgbGliL2ZkLWhvb2suYyBcCisgICAgbGliL2ZkLXNhZmVyLWZsYWcuYyBcCisgICAgbGliL2ZkLXNhZmVyLmMgXAorICAgIGxpYi9mb3Blbi1zYWZlci5jIFwKKyAgICBsaWIvZnByaW50Zi5jIFwKKyAgICBsaWIvZnNldGVyci5jIFwKKyAgICBsaWIvZ2V0LWVycm5vLmMgXAorICAgIGxpYi9oYXNoLmMgXAorICAgIGxpYi9pc25hbmQuYyBcCisgICAgbGliL2lzbmFuZi5jIFwKKyAgICBsaWIvaXNuYW5sLmMgXAorICAgIGxpYi9sYml0c2V0LmMgXAorICAgIGxpYi9sb2NhbGNoYXJzZXQuYyBcCisgICAgbGliL21hdGguYyBcCisgICAgbGliL21iY2hhci5jIFwKKyAgICBsaWIvbWJzY2hyLmMgXAorICAgIGxpYi9tYnNyY2hyLmMgXAorICAgIGxpYi9tYnN3aWR0aC5jIFwKKyAgICBsaWIvbWJ1aXRlci5jIFwKKyAgICBsaWIvcGlwZS1zYWZlci5jIFwKKyAgICBsaWIvcGlwZTItc2FmZXIuYyBcCisgICAgbGliL3BpcGUyLmMgXAorICAgIGxpYi9wcmludGYtYXJncy5jIFwKKyAgICBsaWIvcHJpbnRmLWZyZXhwLmMgXAorICAgIGxpYi9wcmludGYtZnJleHBsLmMgXAorICAgIGxpYi9wcmludGYtcGFyc2UuYyBcCisgICAgbGliL3ByaW50Zi5jIFwKKyAgICBsaWIvcHJvZ25hbWUuYyBcCisgICAgbGliL3F1b3RlYXJnLmMgXAorICAgIGxpYi9zaWctaGFuZGxlci5jIFwKKyAgICBsaWIvc25wcmludGYuYyBcCisgICAgbGliL3NwYXduLXBpcGUuYyBcCisgICAgbGliL3NwcmludGYuYyBcCisgICAgbGliL3N0ZGlvLmMgXAorICAgIGxpYi9zdHJlcnJvcl9yLmMgXAorICAgIGxpYi9zdHJpcHNsYXNoLmMgXAorICAgIGxpYi9zdHJubGVuMS5jIFwKKyAgICBsaWIvdGltZXZhci5jIFwKKyAgICBsaWIvdW5pc3RkLmMgXAorICAgIGxpYi92YXNucHJpbnRmLmMgXAorICAgIGxpYi92Yml0c2V0LmMgXAorICAgIGxpYi92ZnByaW50Zi5jIFwKKyAgICBsaWIvdnNucHJpbnRmLmMgXAorICAgIGxpYi92c3ByaW50Zi5jIFwKKyAgICBsaWIvd2FpdC1wcm9jZXNzLmMgXAorICAgIGxpYi93Y3R5cGUtaC5jIFwKKyAgICBsaWIveGFsbG9jLWRpZS5jIFwKKyAgICBsaWIveG1hbGxvYy5jIFwKKyAgICBsaWIveG1lbWR1cDAuYyBcCisgICAgbGliL3hzaXplLmMgXAorICAgIGxpYi94c3RybmR1cC5jIFwKKyAgICBsaWIveXllcnJvci5jIFwKKyAgICBsaWIvZ2x0aHJlYWQvbG9jay5jIFwKKyAgICBsaWIvZ2x0aHJlYWQvdGhyZWFkbGliLmMgXAorICAgIGxpYi91bml3aWR0aC93aWR0aC5jCisKK2lmZXEgKCQoQlVJTERfT1MpLGRhcndpbikKK0xPQ0FMX1NSQ19GSUxFUyArPSBcCisgICAgbGliL2Vycm9yLmMgXAorICAgIGxpYi9mcGVuZGluZy5jIFwKKyAgICBsaWIvZ2V0b3B0LmMgXAorICAgIGxpYi9nZXRvcHQxLmMgXAorICAgIGxpYi9vYnN0YWNrLmMgXAorICAgIGxpYi9vYnN0YWNrX3ByaW50Zi5jIFwKKyAgICBsaWIvb3Blbi5jIFwKKyAgICBsaWIvcGVycm9yLmMgXAorICAgIGxpYi9yYXdtZW1jaHIuYyBcCisgICAgbGliL3N0YXQuYyBcCisgICAgbGliL3N0cmNocm51bC5jIFwKKyAgICBsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuYyBcCisgICAgbGliL3N0cmVycm9yLmMgXAorICAgIGxpYi9zdHJ2ZXJzY21wLmMgXAorICAgIGxpYi93Y3dpZHRoLmMKK2VuZGlmCisKK2lmZXEgKCQoQlVJTERfT1MpLGxpbnV4KQorTE9DQUxfU1JDX0ZJTEVTICs9IFwKKyAgICBsaWIvZmNudGwuYworZW5kaWYKKworaW5jbHVkZSAkKEJVSUxEX0hPU1RfU1RBVElDX0xJQlJBUlkpCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9NT0RVTEUgOj0gYmlzb24KKworTE9DQUxfQ19JTkNMVURFUyA6PSBcCisgICAgJChMT0NBTF9QQVRIKS8kKEJVSUxEX09TKS1saWIgXAorICAgICQoTE9DQUxfUEFUSCkvbGliCisKK0xPQ0FMX0NGTEFHUyA6PSAtRFBLR0RBVEFESVI9XCIkKFBXRCkvJChMT0NBTF9QQVRIKS9kYXRhXCIKKworTE9DQUxfU1RBVElDX0xJQlJBUklFUyA6PSBsaWJiaXNvbgorCitMT0NBTF9TUkNfRklMRVMgOj0gXAorICAgIHNyYy9Bbm5vdGF0aW9uTGlzdC5jIFwKKyAgICBzcmMvSW5hZGVxdWFjeUxpc3QuYyBcCisgICAgc3JjL0xSMC5jIFwKKyAgICBzcmMvU2JpdHNldC5jIFwKKyAgICBzcmMvYXNzb2MuYyBcCisgICAgc3JjL2Nsb3N1cmUuYyBcCisgICAgc3JjL2NvbXBsYWluLmMgXAorICAgIHNyYy9jb25mbGljdHMuYyBcCisgICAgc3JjL2Rlcml2ZXMuYyBcCisgICAgc3JjL2ZpbGVzLmMgXAorICAgIHNyYy9nZXRhcmdzLmMgXAorICAgIHNyYy9ncmFtLmMgXAorICAgIHNyYy9ncmFwaHZpei5jIFwKKyAgICBzcmMvaWVsci5jIFwKKyAgICBzcmMvbGFsci5jIFwKKyAgICBzcmMvbG9jYXRpb24uYyBcCisgICAgc3JjL21haW4uYyBcCisgICAgc3JjL211c2NsZS10YWIuYyBcCisgICAgc3JjL25hbWVkLXJlZi5jIFwKKyAgICBzcmMvbnVsbGFibGUuYyBcCisgICAgc3JjL291dHB1dC5jIFwKKyAgICBzcmMvcGFyc2UtZ3JhbS5jIFwKKyAgICBzcmMvcHJpbnQteG1sLmMgXAorICAgIHNyYy9wcmludC5jIFwKKyAgICBzcmMvcHJpbnRfZ3JhcGguYyBcCisgICAgc3JjL3JlYWRlci5jIFwKKyAgICBzcmMvcmVkdWNlLmMgXAorICAgIHNyYy9yZWxhdGlvbi5jIFwKKyAgICBzcmMvc2Nhbi1jb2RlLWMuYyBcCisgICAgc3JjL3NjYW4tZ3JhbS1jLmMgXAorICAgIHNyYy9zY2FuLXNrZWwtYy5jIFwKKyAgICBzcmMvc3RhdGUuYyBcCisgICAgc3JjL3N5bWxpc3QuYyBcCisgICAgc3JjL3N5bXRhYi5jIFwKKyAgICBzcmMvdGFibGVzLmMgXAorICAgIHNyYy91bmlxc3RyLmMKIAogaW5jbHVkZSAkKEJVSUxEX0hPU1RfRVhFQ1VUQUJMRSkKLQotZW5kaWYKZGlmZiAtLWdpdCBhL0NPUFlJTkcgYi9DT1BZSU5HCmluZGV4IDM5MTIxMDkuLjk0YTllZDAgMTAwNjQ0Ci0tLSBhL0NPUFlJTkcKKysrIGIvQ09QWUlORwpAQCAtMSwyODUgKzEsNjI2IEBACi0JCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQotCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKyAgICAgICAgICAgICAgICAgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLCAyOSBKdW5lIDIwMDcKIAotIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSAgICAgICAgICAgICAgICAgICAgICAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9yZy8+CiAgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCiAgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCiAKLQkJCSAgICBQcmVhbWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWFtYmxlCiAKLSAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgotZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLUxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKLXNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCi1HZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQotRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwotdXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQotdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCisgIFRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBhIGZyZWUsIGNvcHlsZWZ0IGxpY2Vuc2UgZm9yCitzb2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MuCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFuZCBvdGhlciBwcmFjdGljYWwgd29ya3MgYXJlIGRlc2lnbmVkCit0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiAgQnkgY29udHJhc3QsCit0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0bworc2hhcmUgYW5kIGNoYW5nZSBhbGwgdmVyc2lvbnMgb2YgYSBwcm9ncmFtLS10byBtYWtlIHN1cmUgaXQgcmVtYWlucyBmcmVlCitzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFdlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB1c2UgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9zdCBvZiBvdXIgc29mdHdhcmU7IGl0IGFwcGxpZXMgYWxzbyB0bworYW55IG90aGVyIHdvcmsgcmVsZWFzZWQgdGhpcyB3YXkgYnkgaXRzIGF1dGhvcnMuICBZb3UgY2FuIGFwcGx5IGl0IHRvCiB5b3VyIHByb2dyYW1zLCB0b28uCiAKICAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAogcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQogaGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgotdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0Ci1pZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAotaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgordGhlbSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3UKK3dhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3CitmcmVlIHByb2dyYW1zLCBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KIAotICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCi1hbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCi1UaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQotZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gZGVueWluZyB5b3UKK3RoZXNlIHJpZ2h0cyBvciBhc2tpbmcgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiAgVGhlcmVmb3JlLCB5b3UgaGF2ZQorY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmCit5b3UgbW9kaWZ5IGl0OiByZXNwb25zaWJpbGl0aWVzIHRvIHJlc3BlY3QgdGhlIGZyZWVkb20gb2Ygb3RoZXJzLgogCiAgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKLWdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoteW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKLXNvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKLXJpZ2h0cy4KK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IHBhc3Mgb24gdG8gdGhlIHJlY2lwaWVudHMgdGhlIHNhbWUKK2ZyZWVkb21zIHRoYXQgeW91IHJlY2VpdmVkLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlCitvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleQora25vdyB0aGVpciByaWdodHMuCiAKLSAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAotKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKLWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisgIERldmVsb3BlcnMgdGhhdCB1c2UgdGhlIEdOVSBHUEwgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczoKKygxKSBhc3NlcnQgY29weXJpZ2h0IG9uIHRoZSBzb2Z0d2FyZSwgYW5kICgyKSBvZmZlciB5b3UgdGhpcyBMaWNlbnNlCitnaXZpbmcgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IGl0LgogCi0gIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCi10aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQotc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCi13YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwotdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKLWF1dGhvcnMnIHJlcHV0YXRpb25zLgorICBGb3IgdGhlIGRldmVsb3BlcnMnIGFuZCBhdXRob3JzJyBwcm90ZWN0aW9uLCB0aGUgR1BMIGNsZWFybHkgZXhwbGFpbnMKK3RoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIEZvciBib3RoIHVzZXJzJyBhbmQKK2F1dGhvcnMnIHNha2UsIHRoZSBHUEwgcmVxdWlyZXMgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBiZSBtYXJrZWQgYXMKK2NoYW5nZWQsIHNvIHRoYXQgdGhlaXIgcHJvYmxlbXMgd2lsbCBub3QgYmUgYXR0cmlidXRlZCBlcnJvbmVvdXNseSB0bworYXV0aG9ycyBvZiBwcmV2aW91cyB2ZXJzaW9ucy4KIAotICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQotcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQotcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQotcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55Ci1wYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorICBTb21lIGRldmljZXMgYXJlIGRlc2lnbmVkIHRvIGRlbnkgdXNlcnMgYWNjZXNzIHRvIGluc3RhbGwgb3IgcnVuCittb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgc29mdHdhcmUgaW5zaWRlIHRoZW0sIGFsdGhvdWdoIHRoZSBtYW51ZmFjdHVyZXIKK2NhbiBkbyBzby4gIFRoaXMgaXMgZnVuZGFtZW50YWxseSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgYWltIG9mCitwcm90ZWN0aW5nIHVzZXJzJyBmcmVlZG9tIHRvIGNoYW5nZSB0aGUgc29mdHdhcmUuICBUaGUgc3lzdGVtYXRpYworcGF0dGVybiBvZiBzdWNoIGFidXNlIG9jY3VycyBpbiB0aGUgYXJlYSBvZiBwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMgdG8KK3VzZSwgd2hpY2ggaXMgcHJlY2lzZWx5IHdoZXJlIGl0IGlzIG1vc3QgdW5hY2NlcHRhYmxlLiAgVGhlcmVmb3JlLCB3ZQoraGF2ZSBkZXNpZ25lZCB0aGlzIHZlcnNpb24gb2YgdGhlIEdQTCB0byBwcm9oaWJpdCB0aGUgcHJhY3RpY2UgZm9yIHRob3NlCitwcm9kdWN0cy4gIElmIHN1Y2ggcHJvYmxlbXMgYXJpc2Ugc3Vic3RhbnRpYWxseSBpbiBvdGhlciBkb21haW5zLCB3ZQorc3RhbmQgcmVhZHkgdG8gZXh0ZW5kIHRoaXMgcHJvdmlzaW9uIHRvIHRob3NlIGRvbWFpbnMgaW4gZnV0dXJlIHZlcnNpb25zCitvZiB0aGUgR1BMLCBhcyBuZWVkZWQgdG8gcHJvdGVjdCB0aGUgZnJlZWRvbSBvZiB1c2Vycy4KKworICBGaW5hbGx5LCBldmVyeSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZSBwYXRlbnRzLgorU3RhdGVzIHNob3VsZCBub3QgYWxsb3cgcGF0ZW50cyB0byByZXN0cmljdCBkZXZlbG9wbWVudCBhbmQgdXNlIG9mCitzb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaCB0bworYXZvaWQgdGhlIHNwZWNpYWwgZGFuZ2VyIHRoYXQgcGF0ZW50cyBhcHBsaWVkIHRvIGEgZnJlZSBwcm9ncmFtIGNvdWxkCittYWtlIGl0IGVmZmVjdGl2ZWx5IHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB0aGUgR1BMIGFzc3VyZXMgdGhhdAorcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCiAKICAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKIG1vZGlmaWNhdGlvbiBmb2xsb3cuCi0MCi0JCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQotICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCiAKLSAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucwotYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKLXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKLXJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgotbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKLXRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCi1laXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgotbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgotdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisgICAgICAgICAgICAgICAgICAgICAgIFRFUk1TIEFORCBDT05ESVRJT05TCiAKLUFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Ci1jb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCi1ydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCi1pcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQotUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KLVdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorICAwLiBEZWZpbml0aW9ucy4KIAotICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKLXNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQotY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQotY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQotbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OwotYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQotYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKyAgIlRoaXMgTGljZW5zZSIgcmVmZXJzIHRvIHZlcnNpb24gMyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCiAKLVlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoteW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKyAgIkNvcHlyaWdodCIgYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIga2luZHMgb2YKK3dvcmtzLCBzdWNoIGFzIHNlbWljb25kdWN0b3IgbWFza3MuCiAKLSAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgotb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAotZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCi1hYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorICAiVGhlIFByb2dyYW0iIHJlZmVycyB0byBhbnkgY29weXJpZ2h0YWJsZSB3b3JrIGxpY2Vuc2VkIHVuZGVyIHRoaXMKK0xpY2Vuc2UuICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gICJMaWNlbnNlZXMiIGFuZAorInJlY2lwaWVudHMiIG1heSBiZSBpbmRpdmlkdWFscyBvciBvcmdhbml6YXRpb25zLgogCi0gICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCi0gICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKyAgVG8gIm1vZGlmeSIgYSB3b3JrIG1lYW5zIHRvIGNvcHkgZnJvbSBvciBhZGFwdCBhbGwgb3IgcGFydCBvZiB0aGUgd29yaworaW4gYSBmYXNoaW9uIHJlcXVpcmluZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mIGFuCitleGFjdCBjb3B5LiAgVGhlIHJlc3VsdGluZyB3b3JrIGlzIGNhbGxlZCBhICJtb2RpZmllZCB2ZXJzaW9uIiBvZiB0aGUKK2VhcmxpZXIgd29yayBvciBhIHdvcmsgImJhc2VkIG9uIiB0aGUgZWFybGllciB3b3JrLgogCi0gICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCi0gICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55Ci0gICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKLSAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisgIEEgImNvdmVyZWQgd29yayIgbWVhbnMgZWl0aGVyIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0gb3IgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbS4KIAotICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKLSAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCi0gICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgotICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQotICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQotICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKLSAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcwotICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0Ci0gICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgotICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQotDAotVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgotaWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKLWFuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgotdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQotc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91Ci1kaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKLW9uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgotdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKLWVudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKyAgVG8gInByb3BhZ2F0ZSIgYSB3b3JrIG1lYW5zIHRvIGRvIGFueXRoaW5nIHdpdGggaXQgdGhhdCwgd2l0aG91dAorcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvcgoraW5mcmluZ2VtZW50IHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdywgZXhjZXB0IGV4ZWN1dGluZyBpdCBvbiBhCitjb21wdXRlciBvciBtb2RpZnlpbmcgYSBwcml2YXRlIGNvcHkuICBQcm9wYWdhdGlvbiBpbmNsdWRlcyBjb3B5aW5nLAorZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUKK3B1YmxpYywgYW5kIGluIHNvbWUgY291bnRyaWVzIG90aGVyIGFjdGl2aXRpZXMgYXMgd2VsbC4KIAotVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Ci15b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KLWV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgotY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKyAgVG8gImNvbnZleSIgYSB3b3JrIG1lYW5zIGFueSBraW5kIG9mIHByb3BhZ2F0aW9uIHRoYXQgZW5hYmxlcyBvdGhlcgorcGFydGllcyB0byBtYWtlIG9yIHJlY2VpdmUgY29waWVzLiAgTWVyZSBpbnRlcmFjdGlvbiB3aXRoIGEgdXNlciB0aHJvdWdoCithIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgogCi1JbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCi13aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKLWEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCi10aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorICBBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyAiQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyIKK3RvIHRoZSBleHRlbnQgdGhhdCBpdCBpbmNsdWRlcyBhIGNvbnZlbmllbnQgYW5kIHByb21pbmVudGx5IHZpc2libGUKK2ZlYXR1cmUgdGhhdCAoMSkgZGlzcGxheXMgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSwgYW5kICgyKQordGVsbHMgdGhlIHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0aGUKK2V4dGVudCB0aGF0IHdhcnJhbnRpZXMgYXJlIHByb3ZpZGVkKSwgdGhhdCBsaWNlbnNlZXMgbWF5IGNvbnZleSB0aGUKK3dvcmsgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIElmCit0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYQorbWVudSwgYSBwcm9taW5lbnQgaXRlbSBpbiB0aGUgbGlzdCBtZWV0cyB0aGlzIGNyaXRlcmlvbi4KIAotICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKLXVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgotU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAxLiBTb3VyY2UgQ29kZS4KIAotICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKLSAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKLSAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKyAgVGhlICJzb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsKK2ZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gICJPYmplY3QgY29kZSIgbWVhbnMgYW55IG5vbi1zb3VyY2UKK2Zvcm0gb2YgYSB3b3JrLgogCi0gICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKLSAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgotICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKLSAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCi0gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KLSAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisgIEEgIlN0YW5kYXJkIEludGVyZmFjZSIgbWVhbnMgYW4gaW50ZXJmYWNlIHRoYXQgZWl0aGVyIGlzIGFuIG9mZmljaWFsCitzdGFuZGFyZCBkZWZpbmVkIGJ5IGEgcmVjb2duaXplZCBzdGFuZGFyZHMgYm9keSwgb3IsIGluIHRoZSBjYXNlIG9mCitpbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdAoraXMgd2lkZWx5IHVzZWQgYW1vbmcgZGV2ZWxvcGVycyB3b3JraW5nIGluIHRoYXQgbGFuZ3VhZ2UuCiAKLSAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgotICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCi0gICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKLSAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCi0gICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisgIFRoZSAiU3lzdGVtIExpYnJhcmllcyIgb2YgYW4gZXhlY3V0YWJsZSB3b3JrIGluY2x1ZGUgYW55dGhpbmcsIG90aGVyCit0aGFuIHRoZSB3b3JrIGFzIGEgd2hvbGUsIHRoYXQgKGEpIGlzIGluY2x1ZGVkIGluIHRoZSBub3JtYWwgZm9ybSBvZgorcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgorQ29tcG9uZW50LCBhbmQgKGIpIHNlcnZlcyBvbmx5IHRvIGVuYWJsZSB1c2Ugb2YgdGhlIHdvcmsgd2l0aCB0aGF0CitNYWpvciBDb21wb25lbnQsIG9yIHRvIGltcGxlbWVudCBhIFN0YW5kYXJkIEludGVyZmFjZSBmb3Igd2hpY2ggYW4KK2ltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCisiTWFqb3IgQ29tcG9uZW50IiwgaW4gdGhpcyBjb250ZXh0LCBtZWFucyBhIG1ham9yIGVzc2VudGlhbCBjb21wb25lbnQKKyhrZXJuZWwsIHdpbmRvdyBzeXN0ZW0sIGFuZCBzbyBvbikgb2YgdGhlIHNwZWNpZmljIG9wZXJhdGluZyBzeXN0ZW0KKyhpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCitwcm9kdWNlIHRoZSB3b3JrLCBvciBhbiBvYmplY3QgY29kZSBpbnRlcnByZXRlciB1c2VkIHRvIHJ1biBpdC4KIAotVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgotbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKLWNvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Ci1hc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KLWNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKLXNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQotYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKLWZvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCi1vcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAotaXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorICBUaGUgIkNvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsCit0aGUgc291cmNlIGNvZGUgbmVlZGVkIHRvIGdlbmVyYXRlLCBpbnN0YWxsLCBhbmQgKGZvciBhbiBleGVjdXRhYmxlCit3b3JrKSBydW4gdGhlIG9iamVjdCBjb2RlIGFuZCB0byBtb2RpZnkgdGhlIHdvcmssIGluY2x1ZGluZyBzY3JpcHRzIHRvCitjb250cm9sIHRob3NlIGFjdGl2aXRpZXMuICBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKK1N5c3RlbSBMaWJyYXJpZXMsIG9yIGdlbmVyYWwtcHVycG9zZSB0b29scyBvciBnZW5lcmFsbHkgYXZhaWxhYmxlIGZyZWUKK3Byb2dyYW1zIHdoaWNoIGFyZSB1c2VkIHVubW9kaWZpZWQgaW4gcGVyZm9ybWluZyB0aG9zZSBhY3Rpdml0aWVzIGJ1dAord2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiAgRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlCitpbmNsdWRlcyBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcyBhc3NvY2lhdGVkIHdpdGggc291cmNlIGZpbGVzIGZvcgordGhlIHdvcmssIGFuZCB0aGUgc291cmNlIGNvZGUgZm9yIHNoYXJlZCBsaWJyYXJpZXMgYW5kIGR5bmFtaWNhbGx5CitsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwKK3N1Y2ggYXMgYnkgaW50aW1hdGUgZGF0YSBjb21tdW5pY2F0aW9uIG9yIGNvbnRyb2wgZmxvdyBiZXR3ZWVuIHRob3NlCitzdWJwcm9ncmFtcyBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIHdvcmsuCiAKLUlmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKLWFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKLWFjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcwotZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Ci1jb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgotDAotICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLWV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKLW90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwotdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgotSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKLXRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCi1wYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisgIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgdXNlcnMKK2NhbiByZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZworU291cmNlLgogCi0gIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAotc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKLWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQotcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQotbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCi1Qcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAotYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwotdGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisgIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdAorc2FtZSB3b3JrLgogCi0gIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKLVByb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCi1vcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCi10aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgotcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgotWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KKyAgMi4gQmFzaWMgUGVybWlzc2lvbnMuCisKKyAgQWxsIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBhcmUgZ3JhbnRlZCBmb3IgdGhlIHRlcm0gb2YKK2NvcHlyaWdodCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGFyZSBpcnJldm9jYWJsZSBwcm92aWRlZCB0aGUgc3RhdGVkCitjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCitwZXJtaXNzaW9uIHRvIHJ1biB0aGUgdW5tb2RpZmllZCBQcm9ncmFtLiAgVGhlIG91dHB1dCBmcm9tIHJ1bm5pbmcgYQorY292ZXJlZCB3b3JrIGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlIG9ubHkgaWYgdGhlIG91dHB1dCwgZ2l2ZW4gaXRzCitjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgorcmlnaHRzIG9mIGZhaXIgdXNlIG9yIG90aGVyIGVxdWl2YWxlbnQsIGFzIHByb3ZpZGVkIGJ5IGNvcHlyaWdodCBsYXcuCisKKyAgWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdAorY29udmV5LCB3aXRob3V0IGNvbmRpdGlvbnMgc28gbG9uZyBhcyB5b3VyIGxpY2Vuc2Ugb3RoZXJ3aXNlIHJlbWFpbnMKK2luIGZvcmNlLiAgWW91IG1heSBjb252ZXkgY292ZXJlZCB3b3JrcyB0byBvdGhlcnMgZm9yIHRoZSBzb2xlIHB1cnBvc2UKK29mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQord2l0aCBmYWNpbGl0aWVzIGZvciBydW5uaW5nIHRob3NlIHdvcmtzLCBwcm92aWRlZCB0aGF0IHlvdSBjb21wbHkgd2l0aAordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbiBjb252ZXlpbmcgYWxsIG1hdGVyaWFsIGZvciB3aGljaCB5b3UgZG8KK25vdCBjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKK2ZvciB5b3UgbXVzdCBkbyBzbyBleGNsdXNpdmVseSBvbiB5b3VyIGJlaGFsZiwgdW5kZXIgeW91ciBkaXJlY3Rpb24KK2FuZCBjb250cm9sLCBvbiB0ZXJtcyB0aGF0IHByb2hpYml0IHRoZW0gZnJvbSBtYWtpbmcgYW55IGNvcGllcyBvZgoreW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KKworICBDb252ZXlpbmcgdW5kZXIgYW55IG90aGVyIGNpcmN1bXN0YW5jZXMgaXMgcGVybWl0dGVkIHNvbGVseSB1bmRlcgordGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCittYWtlcyBpdCB1bm5lY2Vzc2FyeS4KKworICAzLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdhbCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgorCisgIE5vIGNvdmVyZWQgd29yayBzaGFsbCBiZSBkZWVtZWQgcGFydCBvZiBhbiBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbAorbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9ucyB1bmRlciBhcnRpY2xlCisxMSBvZiB0aGUgV0lQTyBjb3B5cmlnaHQgdHJlYXR5IGFkb3B0ZWQgb24gMjAgRGVjZW1iZXIgMTk5Niwgb3IKK3NpbWlsYXIgbGF3cyBwcm9oaWJpdGluZyBvciByZXN0cmljdGluZyBjaXJjdW12ZW50aW9uIG9mIHN1Y2gKK21lYXN1cmVzLgorCisgIFdoZW4geW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgeW91IHdhaXZlIGFueSBsZWdhbCBwb3dlciB0byBmb3JiaWQKK2NpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2ggY2lyY3VtdmVudGlvbgoraXMgZWZmZWN0ZWQgYnkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0bwordGhlIGNvdmVyZWQgd29yaywgYW5kIHlvdSBkaXNjbGFpbSBhbnkgaW50ZW50aW9uIHRvIGxpbWl0IG9wZXJhdGlvbiBvcgorbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0IHRoZSB3b3JrJ3MKK3VzZXJzLCB5b3VyIG9yIHRoaXJkIHBhcnRpZXMnIGxlZ2FsIHJpZ2h0cyB0byBmb3JiaWQgY2lyY3VtdmVudGlvbiBvZgordGVjaG5vbG9naWNhbCBtZWFzdXJlcy4KKworICA0LiBDb252ZXlpbmcgVmVyYmF0aW0gQ29waWVzLgorCisgIFlvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQorcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQKK2FwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZTsKK2tlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQorbm9uLXBlcm1pc3NpdmUgdGVybXMgYWRkZWQgaW4gYWNjb3JkIHdpdGggc2VjdGlvbiA3IGFwcGx5IHRvIHRoZSBjb2RlOwora2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgb2YgdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbGwKK3JlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCisgIFlvdSBtYXkgY2hhcmdlIGFueSBwcmljZSBvciBubyBwcmljZSBmb3IgZWFjaCBjb3B5IHRoYXQgeW91IGNvbnZleSwKK2FuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCisKKyAgNS4gQ29udmV5aW5nIE1vZGlmaWVkIFNvdXJjZSBWZXJzaW9ucy4KKworICBZb3UgbWF5IGNvbnZleSBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIG9yIHRoZSBtb2RpZmljYXRpb25zIHRvCitwcm9kdWNlIGl0IGZyb20gdGhlIFByb2dyYW0sIGluIHRoZSBmb3JtIG9mIHNvdXJjZSBjb2RlIHVuZGVyIHRoZQordGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgbW9kaWZpZWQKKyAgICBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCisKKyAgICBiKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBpdCBpcworICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgorICAgIDcuICBUaGlzIHJlcXVpcmVtZW50IG1vZGlmaWVzIHRoZSByZXF1aXJlbWVudCBpbiBzZWN0aW9uIDQgdG8KKyAgICAia2VlcCBpbnRhY3QgYWxsIG5vdGljZXMiLgorCisgICAgYykgWW91IG11c3QgbGljZW5zZSB0aGUgZW50aXJlIHdvcmssIGFzIGEgd2hvbGUsIHVuZGVyIHRoaXMKKyAgICBMaWNlbnNlIHRvIGFueW9uZSB3aG8gY29tZXMgaW50byBwb3NzZXNzaW9uIG9mIGEgY29weS4gIFRoaXMKKyAgICBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNhYmxlIHNlY3Rpb24gNworICAgIGFkZGl0aW9uYWwgdGVybXMsIHRvIHRoZSB3aG9sZSBvZiB0aGUgd29yaywgYW5kIGFsbCBpdHMgcGFydHMsCisgICAgcmVnYXJkbGVzcyBvZiBob3cgdGhleSBhcmUgcGFja2FnZWQuICBUaGlzIExpY2Vuc2UgZ2l2ZXMgbm8KKyAgICBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90CisgICAgaW52YWxpZGF0ZSBzdWNoIHBlcm1pc3Npb24gaWYgeW91IGhhdmUgc2VwYXJhdGVseSByZWNlaXZlZCBpdC4KKworICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CisgICAgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlczsgaG93ZXZlciwgaWYgdGhlIFByb2dyYW0gaGFzIGludGVyYWN0aXZlCisgICAgaW50ZXJmYWNlcyB0aGF0IGRvIG5vdCBkaXNwbGF5IEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMsIHlvdXIKKyAgICB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KKworICBBIGNvbXBpbGF0aW9uIG9mIGEgY292ZXJlZCB3b3JrIHdpdGggb3RoZXIgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50Cit3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAorYW5kIHdoaWNoIGFyZSBub3QgY29tYmluZWQgd2l0aCBpdCBzdWNoIGFzIHRvIGZvcm0gYSBsYXJnZXIgcHJvZ3JhbSwKK2luIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4KKyJhZ2dyZWdhdGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAordXNlZCB0byBsaW1pdCB0aGUgYWNjZXNzIG9yIGxlZ2FsIHJpZ2h0cyBvZiB0aGUgY29tcGlsYXRpb24ncyB1c2VycworYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1YWwgd29ya3MgcGVybWl0LiAgSW5jbHVzaW9uIG9mIGEgY292ZXJlZCB3b3JrCitpbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgorcGFydHMgb2YgdGhlIGFnZ3JlZ2F0ZS4KKworICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KKworICBZb3UgbWF5IGNvbnZleSBhIGNvdmVyZWQgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcworb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlCittYWNoaW5lLXJlYWRhYmxlIENvcnJlc3BvbmRpbmcgU291cmNlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsCitpbiBvbmUgb2YgdGhlc2Ugd2F5czoKKworICAgIGEpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKKyAgICAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKworICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKKyAgICAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IGEKKyAgICB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMgYW5kIHZhbGlkIGZvciBhcworICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdAorICAgIG1vZGVsLCB0byBnaXZlIGFueW9uZSB3aG8gcG9zc2Vzc2VzIHRoZSBvYmplY3QgY29kZSBlaXRoZXIgKDEpIGEKKyAgICBjb3B5IG9mIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYWxsIHRoZSBzb2Z0d2FyZSBpbiB0aGUKKyAgICBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbAorICAgIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZSwgZm9yIGEgcHJpY2Ugbm8KKyAgICBtb3JlIHRoYW4geW91ciByZWFzb25hYmxlIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHRoaXMKKyAgICBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgZnJvbSBhIG5ldHdvcmsgc2VydmVyIGF0IG5vIGNoYXJnZS4KKworICAgIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlCisgICAgd3JpdHRlbiBvZmZlciB0byBwcm92aWRlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFRoaXMKKyAgICBhbHRlcm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkgb2NjYXNpb25hbGx5IGFuZCBub25jb21tZXJjaWFsbHksIGFuZAorICAgIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZAorICAgIHdpdGggc3Vic2VjdGlvbiA2Yi4KKworICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkCisgICAgcGxhY2UgKGdyYXRpcyBvciBmb3IgYSBjaGFyZ2UpLCBhbmQgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgaW4gdGhlIHNhbWUgd2F5IHRocm91Z2ggdGhlIHNhbWUgcGxhY2UgYXQgbm8KKyAgICBmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4gIElmIHRoZSBwbGFjZSB0bworICAgIGNvcHkgdGhlIG9iamVjdCBjb2RlIGlzIGEgbmV0d29yayBzZXJ2ZXIsIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZQorICAgIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KQorICAgIHRoYXQgc3VwcG9ydHMgZXF1aXZhbGVudCBjb3B5aW5nIGZhY2lsaXRpZXMsIHByb3ZpZGVkIHlvdSBtYWludGFpbgorICAgIGNsZWFyIGRpcmVjdGlvbnMgbmV4dCB0byB0aGUgb2JqZWN0IGNvZGUgc2F5aW5nIHdoZXJlIHRvIGZpbmQgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlLCB5b3UgcmVtYWluIG9ibGlnYXRlZCB0byBlbnN1cmUgdGhhdCBpdCBpcworICAgIGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyBuZWVkZWQgdG8gc2F0aXNmeSB0aGVzZSByZXF1aXJlbWVudHMuCisKKyAgICBlKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24sIHByb3ZpZGVkCisgICAgeW91IGluZm9ybSBvdGhlciBwZWVycyB3aGVyZSB0aGUgb2JqZWN0IGNvZGUgYW5kIENvcnJlc3BvbmRpbmcKKyAgICBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vCisgICAgY2hhcmdlIHVuZGVyIHN1YnNlY3Rpb24gNmQuCisKKyAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkCitmcm9tIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBhcyBhIFN5c3RlbSBMaWJyYXJ5LCBuZWVkIG5vdCBiZQoraW5jbHVkZWQgaW4gY29udmV5aW5nIHRoZSBvYmplY3QgY29kZSB3b3JrLgorCisgIEEgIlVzZXIgUHJvZHVjdCIgaXMgZWl0aGVyICgxKSBhICJjb25zdW1lciBwcm9kdWN0Iiwgd2hpY2ggbWVhbnMgYW55Cit0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSB3aGljaCBpcyBub3JtYWxseSB1c2VkIGZvciBwZXJzb25hbCwgZmFtaWx5LAorb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbgoraW50byBhIGR3ZWxsaW5nLiAgSW4gZGV0ZXJtaW5pbmcgd2hldGhlciBhIHByb2R1Y3QgaXMgYSBjb25zdW1lciBwcm9kdWN0LAorZG91YnRmdWwgY2FzZXMgc2hhbGwgYmUgcmVzb2x2ZWQgaW4gZmF2b3Igb2YgY292ZXJhZ2UuICBGb3IgYSBwYXJ0aWN1bGFyCitwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCAibm9ybWFsbHkgdXNlZCIgcmVmZXJzIHRvIGEKK3R5cGljYWwgb3IgY29tbW9uIHVzZSBvZiB0aGF0IGNsYXNzIG9mIHByb2R1Y3QsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN0YXR1cworb2YgdGhlIHBhcnRpY3VsYXIgdXNlciBvciBvZiB0aGUgd2F5IGluIHdoaWNoIHRoZSBwYXJ0aWN1bGFyIHVzZXIKK2FjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdAoraXMgYSBjb25zdW1lciBwcm9kdWN0IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgcHJvZHVjdCBoYXMgc3Vic3RhbnRpYWwKK2NvbW1lcmNpYWwsIGluZHVzdHJpYWwgb3Igbm9uLWNvbnN1bWVyIHVzZXMsIHVubGVzcyBzdWNoIHVzZXMgcmVwcmVzZW50Cit0aGUgb25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KKworICAiSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIiBmb3IgYSBVc2VyIFByb2R1Y3QgbWVhbnMgYW55IG1ldGhvZHMsCitwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwKK2FuZCBleGVjdXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGEgY292ZXJlZCB3b3JrIGluIHRoYXQgVXNlciBQcm9kdWN0IGZyb20KK2EgbW9kaWZpZWQgdmVyc2lvbiBvZiBpdHMgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBUaGUgaW5mb3JtYXRpb24gbXVzdAorc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QKK2NvZGUgaXMgaW4gbm8gY2FzZSBwcmV2ZW50ZWQgb3IgaW50ZXJmZXJlZCB3aXRoIHNvbGVseSBiZWNhdXNlCittb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZS4KKworICBJZiB5b3UgY29udmV5IGFuIG9iamVjdCBjb2RlIHdvcmsgdW5kZXIgdGhpcyBzZWN0aW9uIGluLCBvciB3aXRoLCBvcgorc3BlY2lmaWNhbGx5IGZvciB1c2UgaW4sIGEgVXNlciBQcm9kdWN0LCBhbmQgdGhlIGNvbnZleWluZyBvY2N1cnMgYXMKK3BhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZQorVXNlciBQcm9kdWN0IGlzIHRyYW5zZmVycmVkIHRvIHRoZSByZWNpcGllbnQgaW4gcGVycGV0dWl0eSBvciBmb3IgYQorZml4ZWQgdGVybSAocmVnYXJkbGVzcyBvZiBob3cgdGhlIHRyYW5zYWN0aW9uIGlzIGNoYXJhY3Rlcml6ZWQpLCB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCitieSB0aGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uLiAgQnV0IHRoaXMgcmVxdWlyZW1lbnQgZG9lcyBub3QgYXBwbHkKK2lmIG5laXRoZXIgeW91IG5vciBhbnkgdGhpcmQgcGFydHkgcmV0YWlucyB0aGUgYWJpbGl0eSB0byBpbnN0YWxsCittb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCitiZWVuIGluc3RhbGxlZCBpbiBST00pLgorCisgIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKK3JlcXVpcmVtZW50IHRvIGNvbnRpbnVlIHRvIHByb3ZpZGUgc3VwcG9ydCBzZXJ2aWNlLCB3YXJyYW50eSwgb3IgdXBkYXRlcworZm9yIGEgd29yayB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGluc3RhbGxlZCBieSB0aGUgcmVjaXBpZW50LCBvciBmb3IKK3RoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEKK25ldHdvcmsgbWF5IGJlIGRlbmllZCB3aGVuIHRoZSBtb2RpZmljYXRpb24gaXRzZWxmIG1hdGVyaWFsbHkgYW5kCithZHZlcnNlbHkgYWZmZWN0cyB0aGUgb3BlcmF0aW9uIG9mIHRoZSBuZXR3b3JrIG9yIHZpb2xhdGVzIHRoZSBydWxlcyBhbmQKK3Byb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCisKKyAgQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQsIGFuZCBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gcHJvdmlkZWQsCitpbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5Citkb2N1bWVudGVkIChhbmQgd2l0aCBhbiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbgorc291cmNlIGNvZGUgZm9ybSksIGFuZCBtdXN0IHJlcXVpcmUgbm8gc3BlY2lhbCBwYXNzd29yZCBvciBrZXkgZm9yCit1bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy4KKworICA3LiBBZGRpdGlvbmFsIFRlcm1zLgorCisgICJBZGRpdGlvbmFsIHBlcm1pc3Npb25zIiBhcmUgdGVybXMgdGhhdCBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIGJ5IG1ha2luZyBleGNlcHRpb25zIGZyb20gb25lIG9yIG1vcmUgb2YgaXRzIGNvbmRpdGlvbnMuCitBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCitiZSB0cmVhdGVkIGFzIHRob3VnaCB0aGV5IHdlcmUgaW5jbHVkZWQgaW4gdGhpcyBMaWNlbnNlLCB0byB0aGUgZXh0ZW50Cit0aGF0IHRoZXkgYXJlIHZhbGlkIHVuZGVyIGFwcGxpY2FibGUgbGF3LiAgSWYgYWRkaXRpb25hbCBwZXJtaXNzaW9ucworYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQordW5kZXIgdGhvc2UgcGVybWlzc2lvbnMsIGJ1dCB0aGUgZW50aXJlIFByb2dyYW0gcmVtYWlucyBnb3Zlcm5lZCBieQordGhpcyBMaWNlbnNlIHdpdGhvdXQgcmVnYXJkIHRvIHRoZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zLgorCisgIFdoZW4geW91IGNvbnZleSBhIGNvcHkgb2YgYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgYXQgeW91ciBvcHRpb24KK3JlbW92ZSBhbnkgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBmcm9tIHRoYXQgY29weSwgb3IgZnJvbSBhbnkgcGFydCBvZgoraXQuICAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgorcmVtb3ZhbCBpbiBjZXJ0YWluIGNhc2VzIHdoZW4geW91IG1vZGlmeSB0aGUgd29yay4pICBZb3UgbWF5IHBsYWNlCithZGRpdGlvbmFsIHBlcm1pc3Npb25zIG9uIG1hdGVyaWFsLCBhZGRlZCBieSB5b3UgdG8gYSBjb3ZlcmVkIHdvcmssCitmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCisKKyAgTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBmb3IgbWF0ZXJpYWwgeW91CithZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mCit0aGF0IG1hdGVyaWFsKSBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0ZXJtczoKKworICAgIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZQorICAgIHRlcm1zIG9mIHNlY3Rpb25zIDE1IGFuZCAxNiBvZiB0aGlzIExpY2Vuc2U7IG9yCisKKyAgICBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IKKyAgICBhdXRob3IgYXR0cmlidXRpb25zIGluIHRoYXQgbWF0ZXJpYWwgb3IgaW4gdGhlIEFwcHJvcHJpYXRlIExlZ2FsCisgICAgTm90aWNlcyBkaXNwbGF5ZWQgYnkgd29ya3MgY29udGFpbmluZyBpdDsgb3IKKworICAgIGMpIFByb2hpYml0aW5nIG1pc3JlcHJlc2VudGF0aW9uIG9mIHRoZSBvcmlnaW4gb2YgdGhhdCBtYXRlcmlhbCwgb3IKKyAgICByZXF1aXJpbmcgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBvZiBzdWNoIG1hdGVyaWFsIGJlIG1hcmtlZCBpbgorICAgIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKKworICAgIGQpIExpbWl0aW5nIHRoZSB1c2UgZm9yIHB1YmxpY2l0eSBwdXJwb3NlcyBvZiBuYW1lcyBvZiBsaWNlbnNvcnMgb3IKKyAgICBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKKworICAgIGUpIERlY2xpbmluZyB0byBncmFudCByaWdodHMgdW5kZXIgdHJhZGVtYXJrIGxhdyBmb3IgdXNlIG9mIHNvbWUKKyAgICB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKKworICAgIGYpIFJlcXVpcmluZyBpbmRlbW5pZmljYXRpb24gb2YgbGljZW5zb3JzIGFuZCBhdXRob3JzIG9mIHRoYXQKKyAgICBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZgorICAgIGl0KSB3aXRoIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIG9mIGxpYWJpbGl0eSB0byB0aGUgcmVjaXBpZW50LCBmb3IKKyAgICBhbnkgbGlhYmlsaXR5IHRoYXQgdGhlc2UgY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgZGlyZWN0bHkgaW1wb3NlIG9uCisgICAgdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgorCisgIEFsbCBvdGhlciBub24tcGVybWlzc2l2ZSBhZGRpdGlvbmFsIHRlcm1zIGFyZSBjb25zaWRlcmVkICJmdXJ0aGVyCityZXN0cmljdGlvbnMiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMgeW91CityZWNlaXZlZCBpdCwgb3IgYW55IHBhcnQgb2YgaXQsIGNvbnRhaW5zIGEgbm90aWNlIHN0YXRpbmcgdGhhdCBpdCBpcworZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggYSB0ZXJtIHRoYXQgaXMgYSBmdXJ0aGVyCityZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zCithIGZ1cnRoZXIgcmVzdHJpY3Rpb24gYnV0IHBlcm1pdHMgcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nIHVuZGVyIHRoaXMKK0xpY2Vuc2UsIHlvdSBtYXkgYWRkIHRvIGEgY292ZXJlZCB3b3JrIG1hdGVyaWFsIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcworb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMKK25vdCBzdXJ2aXZlIHN1Y2ggcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nLgorCisgIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKK211c3QgcGxhY2UsIGluIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMsIGEgc3RhdGVtZW50IG9mIHRoZQorYWRkaXRpb25hbCB0ZXJtcyB0aGF0IGFwcGx5IHRvIHRob3NlIGZpbGVzLCBvciBhIG5vdGljZSBpbmRpY2F0aW5nCit3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgorCisgIEFkZGl0aW9uYWwgdGVybXMsIHBlcm1pc3NpdmUgb3Igbm9uLXBlcm1pc3NpdmUsIG1heSBiZSBzdGF0ZWQgaW4gdGhlCitmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOwordGhlIGFib3ZlIHJlcXVpcmVtZW50cyBhcHBseSBlaXRoZXIgd2F5LgorCisgIDguIFRlcm1pbmF0aW9uLgorCisgIFlvdSBtYXkgbm90IHByb3BhZ2F0ZSBvciBtb2RpZnkgYSBjb3ZlcmVkIHdvcmsgZXhjZXB0IGFzIGV4cHJlc3NseQorcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvcgorbW9kaWZ5IGl0IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyCit0aGlzIExpY2Vuc2UgKGluY2x1ZGluZyBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhlIHRoaXJkCitwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCisKKyAgSG93ZXZlciwgaWYgeW91IGNlYXNlIGFsbCB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlLCB0aGVuIHlvdXIKK2xpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQorcHJvdmlzaW9uYWxseSwgdW5sZXNzIGFuZCB1bnRpbCB0aGUgY29weXJpZ2h0IGhvbGRlciBleHBsaWNpdGx5IGFuZAorZmluYWxseSB0ZXJtaW5hdGVzIHlvdXIgbGljZW5zZSwgYW5kIChiKSBwZXJtYW5lbnRseSwgaWYgdGhlIGNvcHlyaWdodAoraG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMKK3ByaW9yIHRvIDYwIGRheXMgYWZ0ZXIgdGhlIGNlc3NhdGlvbi4KKworICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKK3JlaW5zdGF0ZWQgcGVybWFuZW50bHkgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIgbm90aWZpZXMgeW91IG9mIHRoZQordmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucywgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaGF2ZQorcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0Citjb3B5cmlnaHQgaG9sZGVyLCBhbmQgeW91IGN1cmUgdGhlIHZpb2xhdGlvbiBwcmlvciB0byAzMCBkYXlzIGFmdGVyCit5b3VyIHJlY2VpcHQgb2YgdGhlIG5vdGljZS4KKworICBUZXJtaW5hdGlvbiBvZiB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIHNlY3Rpb24gZG9lcyBub3QgdGVybWluYXRlIHRoZQorbGljZW5zZXMgb2YgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMgb3IgcmlnaHRzIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CityZWluc3RhdGVkLCB5b3UgZG8gbm90IHF1YWxpZnkgdG8gcmVjZWl2ZSBuZXcgbGljZW5zZXMgZm9yIHRoZSBzYW1lCittYXRlcmlhbCB1bmRlciBzZWN0aW9uIDEwLgorCisgIDkuIEFjY2VwdGFuY2UgTm90IFJlcXVpcmVkIGZvciBIYXZpbmcgQ29waWVzLgorCisgIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgorcnVuIGEgY29weSBvZiB0aGUgUHJvZ3JhbS4gIEFuY2lsbGFyeSBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQgd29yaworb2NjdXJyaW5nIHNvbGVseSBhcyBhIGNvbnNlcXVlbmNlIG9mIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24KK3RvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCitub3RoaW5nIG90aGVyIHRoYW4gdGhpcyBMaWNlbnNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBwcm9wYWdhdGUgb3IKK21vZGlmeSBhbnkgY292ZXJlZCB3b3JrLiAgVGhlc2UgYWN0aW9ucyBpbmZyaW5nZSBjb3B5cmlnaHQgaWYgeW91IGRvCitub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKK2NvdmVyZWQgd29yaywgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28uCisKKyAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgorCisgIEVhY2ggdGltZSB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkKK3JlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZAorcHJvcGFnYXRlIHRoYXQgd29yaywgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuICBZb3UgYXJlIG5vdCByZXNwb25zaWJsZQorZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aCB0aGlzIExpY2Vuc2UuCisKKyAgQW4gImVudGl0eSB0cmFuc2FjdGlvbiIgaXMgYSB0cmFuc2FjdGlvbiB0cmFuc2ZlcnJpbmcgY29udHJvbCBvZiBhbgorb3JnYW5pemF0aW9uLCBvciBzdWJzdGFudGlhbGx5IGFsbCBhc3NldHMgb2Ygb25lLCBvciBzdWJkaXZpZGluZyBhbgorb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKK3dvcmsgcmVzdWx0cyBmcm9tIGFuIGVudGl0eSB0cmFuc2FjdGlvbiwgZWFjaCBwYXJ0eSB0byB0aGF0Cit0cmFuc2FjdGlvbiB3aG8gcmVjZWl2ZXMgYSBjb3B5IG9mIHRoZSB3b3JrIGFsc28gcmVjZWl2ZXMgd2hhdGV2ZXIKK2xpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZAorZ2l2ZSB1bmRlciB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLCBwbHVzIGEgcmlnaHQgdG8gcG9zc2Vzc2lvbiBvZiB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGZyb20gdGhlIHByZWRlY2Vzc29yIGluIGludGVyZXN0LCBpZgordGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgorCisgIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIGV4ZXJjaXNlIG9mIHRoZQorcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKK25vdCBpbXBvc2UgYSBsaWNlbnNlIGZlZSwgcm95YWx0eSwgb3Igb3RoZXIgY2hhcmdlIGZvciBleGVyY2lzZSBvZgorcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgeW91IG1heSBub3QgaW5pdGlhdGUgbGl0aWdhdGlvbgorKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKK2FueSBwYXRlbnQgY2xhaW0gaXMgaW5mcmluZ2VkIGJ5IG1ha2luZywgdXNpbmcsIHNlbGxpbmcsIG9mZmVyaW5nIGZvcgorc2FsZSwgb3IgaW1wb3J0aW5nIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uIG9mIGl0LgorCisgIDExLiBQYXRlbnRzLgorCisgIEEgImNvbnRyaWJ1dG9yIiBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKK0xpY2Vuc2Ugb2YgdGhlIFByb2dyYW0gb3IgYSB3b3JrIG9uIHdoaWNoIHRoZSBQcm9ncmFtIGlzIGJhc2VkLiAgVGhlCit3b3JrIHRodXMgbGljZW5zZWQgaXMgY2FsbGVkIHRoZSBjb250cmlidXRvcidzICJjb250cmlidXRvciB2ZXJzaW9uIi4KKworICBBIGNvbnRyaWJ1dG9yJ3MgImVzc2VudGlhbCBwYXRlbnQgY2xhaW1zIiBhcmUgYWxsIHBhdGVudCBjbGFpbXMKK293bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRyaWJ1dG9yLCB3aGV0aGVyIGFscmVhZHkgYWNxdWlyZWQgb3IKK2hlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZAorYnkgdGhpcyBMaWNlbnNlLCBvZiBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLAorYnV0IGRvIG5vdCBpbmNsdWRlIGNsYWltcyB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBvbmx5IGFzIGEKK2NvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCitwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBpbmNsdWRlcyB0aGUgcmlnaHQgdG8gZ3JhbnQKK3BhdGVudCBzdWJsaWNlbnNlcyBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZgogdGhpcyBMaWNlbnNlLgogCi0gIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKLWluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCi1jb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCisgIEVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KK21ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHJ1biwgbW9kaWZ5IGFuZAorcHJvcGFnYXRlIHRoZSBjb250ZW50cyBvZiBpdHMgY29udHJpYnV0b3IgdmVyc2lvbi4KKworICBJbiB0aGUgZm9sbG93aW5nIHRocmVlIHBhcmFncmFwaHMsIGEgInBhdGVudCBsaWNlbnNlIiBpcyBhbnkgZXhwcmVzcworYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQsIGhvd2V2ZXIgZGVub21pbmF0ZWQsIG5vdCB0byBlbmZvcmNlIGEgcGF0ZW50Cisoc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCitzdWUgZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQpLiAgVG8gImdyYW50IiBzdWNoIGEgcGF0ZW50IGxpY2Vuc2UgdG8gYQorcGFydHkgbWVhbnMgdG8gbWFrZSBzdWNoIGFuIGFncmVlbWVudCBvciBjb21taXRtZW50IG5vdCB0byBlbmZvcmNlIGEKK3BhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KKworICBJZiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCBrbm93aW5nbHkgcmVseWluZyBvbiBhIHBhdGVudCBsaWNlbnNlLAorYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKK3RvIGNvcHksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aHJvdWdoIGEKK3B1YmxpY2x5IGF2YWlsYWJsZSBuZXR3b3JrIHNlcnZlciBvciBvdGhlciByZWFkaWx5IGFjY2Vzc2libGUgbWVhbnMsCit0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCithdmFpbGFibGUsIG9yICgyKSBhcnJhbmdlIHRvIGRlcHJpdmUgeW91cnNlbGYgb2YgdGhlIGJlbmVmaXQgb2YgdGhlCitwYXRlbnQgbGljZW5zZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHdvcmssIG9yICgzKSBhcnJhbmdlLCBpbiBhIG1hbm5lcgorY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudAorbGljZW5zZSB0byBkb3duc3RyZWFtIHJlY2lwaWVudHMuICAiS25vd2luZ2x5IHJlbHlpbmciIG1lYW5zIHlvdSBoYXZlCithY3R1YWwga25vd2xlZGdlIHRoYXQsIGJ1dCBmb3IgdGhlIHBhdGVudCBsaWNlbnNlLCB5b3VyIGNvbnZleWluZyB0aGUKK2NvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsKK2luIGEgY291bnRyeSwgd291bGQgaW5mcmluZ2Ugb25lIG9yIG1vcmUgaWRlbnRpZmlhYmxlIHBhdGVudHMgaW4gdGhhdAorY291bnRyeSB0aGF0IHlvdSBoYXZlIHJlYXNvbiB0byBiZWxpZXZlIGFyZSB2YWxpZC4KKworICBJZiwgcHVyc3VhbnQgdG8gb3IgaW4gY29ubmVjdGlvbiB3aXRoIGEgc2luZ2xlIHRyYW5zYWN0aW9uIG9yCithcnJhbmdlbWVudCwgeW91IGNvbnZleSwgb3IgcHJvcGFnYXRlIGJ5IHByb2N1cmluZyBjb252ZXlhbmNlIG9mLCBhCitjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMKK3JlY2VpdmluZyB0aGUgY292ZXJlZCB3b3JrIGF1dGhvcml6aW5nIHRoZW0gdG8gdXNlLCBwcm9wYWdhdGUsIG1vZGlmeQorb3IgY29udmV5IGEgc3BlY2lmaWMgY29weSBvZiB0aGUgY292ZXJlZCB3b3JrLCB0aGVuIHRoZSBwYXRlbnQgbGljZW5zZQoreW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQKK3dvcmsgYW5kIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIEEgcGF0ZW50IGxpY2Vuc2UgaXMgImRpc2NyaW1pbmF0b3J5IiBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbgordGhlIHNjb3BlIG9mIGl0cyBjb3ZlcmFnZSwgcHJvaGliaXRzIHRoZSBleGVyY2lzZSBvZiwgb3IgaXMKK2NvbmRpdGlvbmVkIG9uIHRoZSBub24tZXhlcmNpc2Ugb2Ygb25lIG9yIG1vcmUgb2YgdGhlIHJpZ2h0cyB0aGF0IGFyZQorc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZAord29yayBpZiB5b3UgYXJlIGEgcGFydHkgdG8gYW4gYXJyYW5nZW1lbnQgd2l0aCBhIHRoaXJkIHBhcnR5IHRoYXQgaXMKK2luIHRoZSBidXNpbmVzcyBvZiBkaXN0cmlidXRpbmcgc29mdHdhcmUsIHVuZGVyIHdoaWNoIHlvdSBtYWtlIHBheW1lbnQKK3RvIHRoZSB0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nCit0aGUgd29yaywgYW5kIHVuZGVyIHdoaWNoIHRoZSB0aGlyZCBwYXJ0eSBncmFudHMsIHRvIGFueSBvZiB0aGUKK3BhcnRpZXMgd2hvIHdvdWxkIHJlY2VpdmUgdGhlIGNvdmVyZWQgd29yayBmcm9tIHlvdSwgYSBkaXNjcmltaW5hdG9yeQorcGF0ZW50IGxpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yaworY29udmV5ZWQgYnkgeW91IChvciBjb3BpZXMgbWFkZSBmcm9tIHRob3NlIGNvcGllcyksIG9yIChiKSBwcmltYXJpbHkKK2ZvciBhbmQgaW4gY29ubmVjdGlvbiB3aXRoIHNwZWNpZmljIHByb2R1Y3RzIG9yIGNvbXBpbGF0aW9ucyB0aGF0Citjb250YWluIHRoZSBjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsCitvciB0aGF0IHBhdGVudCBsaWNlbnNlIHdhcyBncmFudGVkLCBwcmlvciB0byAyOCBNYXJjaCAyMDA3LgorCisgIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBleGNsdWRpbmcgb3IgbGltaXRpbmcKK2FueSBpbXBsaWVkIGxpY2Vuc2Ugb3Igb3RoZXIgZGVmZW5zZXMgdG8gaW5mcmluZ2VtZW50IHRoYXQgbWF5CitvdGhlcndpc2UgYmUgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhcHBsaWNhYmxlIHBhdGVudCBsYXcuCisKKyAgMTIuIE5vIFN1cnJlbmRlciBvZiBPdGhlcnMnIEZyZWVkb20uCisKKyAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgogb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAotZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKLWRpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKLUxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKLW1heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKLWxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKLWFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgotdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bwotcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90IGNvbnZleSBhCitjb3ZlcmVkIHdvcmsgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5Citub3QgY29udmV5IGl0IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiB5b3UgYWdyZWUgdG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UKK3RvIGNvbGxlY3QgYSByb3lhbHR5IGZvciBmdXJ0aGVyIGNvbnZleWluZyBmcm9tIHRob3NlIHRvIHdob20geW91IGNvbnZleQordGhlIFByb2dyYW0sIHRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIHRob3NlIHRlcm1zIGFuZCB0aGlzCitMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uCiAKLUlmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgotYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bwotYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKLWNpcmN1bXN0YW5jZXMuCisgIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgogCi1JdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55Ci1wYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQotc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQotaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCi1pbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKLWdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKLXRocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0Ci1zeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCi10byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKLWltcG9zZSB0aGF0IGNob2ljZS4KKyAgTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCB5b3UgaGF2ZQorcGVybWlzc2lvbiB0byBsaW5rIG9yIGNvbWJpbmUgYW55IGNvdmVyZWQgd29yayB3aXRoIGEgd29yayBsaWNlbnNlZAordW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZQorY29tYmluZWQgd29yaywgYW5kIHRvIGNvbnZleSB0aGUgcmVzdWx0aW5nIHdvcmsuICBUaGUgdGVybXMgb2YgdGhpcworTGljZW5zZSB3aWxsIGNvbnRpbnVlIHRvIGFwcGx5IHRvIHRoZSBwYXJ0IHdoaWNoIGlzIHRoZSBjb3ZlcmVkIHdvcmssCitidXQgdGhlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCitzZWN0aW9uIDEzLCBjb25jZXJuaW5nIGludGVyYWN0aW9uIHRocm91Z2ggYSBuZXR3b3JrIHdpbGwgYXBwbHkgdG8gdGhlCitjb21iaW5hdGlvbiBhcyBzdWNoLgogCi1UaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KLWJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgotDAotICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgotY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCi1vcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCi1tYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKLXRob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKLWNvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwotdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisgIDE0LiBSZXZpc2VkIFZlcnNpb25zIG9mIHRoaXMgTGljZW5zZS4KIAotICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucwotb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCisgIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mCit0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCiBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgogCi1FYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCi1zcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQotbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLVNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKLXRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKLUZvdW5kYXRpb24uCisgIEVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlCitQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgY2VydGFpbiBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoZSBHTlUgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUKK29wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IG51bWJlcmVkCit2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZAorYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KIAotICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCi1wcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCi10byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKLVNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcwotbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKLW9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKLW9mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorICBJZiB0aGUgUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIHByb3h5IGNhbiBkZWNpZGUgd2hpY2ggZnV0dXJlCit2ZXJzaW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgY2FuIGJlIHVzZWQsIHRoYXQgcHJveHkncworcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdQordG8gY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlIFByb2dyYW0uCiAKLQkJCSAgICBOTyBXQVJSQU5UWQorICBMYXRlciBsaWNlbnNlIHZlcnNpb25zIG1heSBnaXZlIHlvdSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudAorcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQorYXV0aG9yIG9yIGNvcHlyaWdodCBob2xkZXIgYXMgYSByZXN1bHQgb2YgeW91ciBjaG9vc2luZyB0byBmb2xsb3cgYQorbGF0ZXIgdmVyc2lvbi4KIAotICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKLUZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgotT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUwotUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKLU9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi1NRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCi1UTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCi1QUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKLVJFUEFJUiBPUiBDT1JSRUNUSU9OLgorICAxNS4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4KIAotICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCi1XSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCi1SRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAotSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCi1PVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECi1UTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKLVlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCi1QUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKLVBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWQorQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVAorSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWQorT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCitUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQorSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GCitBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCiAKLQkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKLQwKLQkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisgIDE2LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4KKworICBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTU9ESUZJRVMgQU5EL09SIENPTlZFWVMKK1RIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWQorR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFCitVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GCitEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRAorUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBQUk9HUkFNUyksCitFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRVMuCisKKyAgMTcuIEludGVycHJldGF0aW9uIG9mIFNlY3Rpb25zIDE1IGFuZCAxNi4KKworICBJZiB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBhbmQgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgcHJvdmlkZWQKK2Fib3ZlIGNhbm5vdCBiZSBnaXZlbiBsb2NhbCBsZWdhbCBlZmZlY3QgYWNjb3JkaW5nIHRvIHRoZWlyIHRlcm1zLAorcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzCithbiBhYnNvbHV0ZSB3YWl2ZXIgb2YgYWxsIGNpdmlsIGxpYWJpbGl0eSBpbiBjb25uZWN0aW9uIHdpdGggdGhlCitQcm9ncmFtLCB1bmxlc3MgYSB3YXJyYW50eSBvciBhc3N1bXB0aW9uIG9mIGxpYWJpbGl0eSBhY2NvbXBhbmllcyBhCitjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuCisKKyAgICAgICAgICAgICAgICAgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisgICAgICAgICAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKIAogICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CiBwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CkBAIC0yODcsMTUgKzYyOCwxNSBAQAogCiAgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CiB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Ci1jb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAorc3RhdGUgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAogdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCiAKICAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CiAKLSAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAogICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLApAQCAtMzA0LDM3ICs2NDUsMzAgQEAKICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0KKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIAogQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCiAKLUlmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKLXdoZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisgIElmIHRoZSBwcm9ncmFtIGRvZXMgdGVybWluYWwgaW50ZXJhY3Rpb24sIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQKK25vdGljZSBsaWtlIHRoaXMgd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKIAotICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgotICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICA8cHJvZ3JhbT4gIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisgICAgVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KICAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CiAgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgogCiBUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKLXBhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKLWJlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQotbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB5b3VyIHByb2dyYW0ncyBjb21tYW5kcworbWlnaHQgYmUgZGlmZmVyZW50OyBmb3IgYSBHVUkgaW50ZXJmYWNlLCB5b3Ugd291bGQgdXNlIGFuICJhYm91dCBib3giLgogCi1Zb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgotc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKLW5lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKyAgWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwKK2lmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZiBuZWNlc3NhcnkuCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzLCBhbmQgaG93IHRvIGFwcGx5IGFuZCBmb2xsb3cgdGhlIEdOVSBHUEwsIHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCi0gIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KLSAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCi0KLSAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5Ci0gIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCi0KLVRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bwotcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKLWNvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQotbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCi1QdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KKyAgVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbQoraW50byBwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91CittYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGgKK3RoZSBsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuICBCdXQgZmlyc3QsIHBsZWFzZSByZWFkCis8aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5LW5vdC1sZ3BsLmh0bWw+LgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IGM0NGYwZTQuLmEzY2VlNjYgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMTYwMzQgKzEsMzk1MSBAQAotMjAwNi0wNi0wNSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisyMDEyLTEyLTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBORVdTOiBWZXJzaW9uIDIuMy4KLQkqIGNvbmZpZ3VyZS5hYyAoQUNfSU5JVCk6IExpa2V3aXNlLgorCXZlcnNpb24gMi43CisJKiBORVdTOiBSZWNvcmQgcmVsZWFzZSBkYXRlLgogCi0yMDA2LTA1LTMwICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKzIwMTItMTItMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkqIGRhdGEvZ2xyLmMgKFlZUkVDT1ZFUklORyk6IERlZmluZSB0byBiZSBhIGZ1bmN0aW9uLWxpa2UgbWFjcm8KLQl3aXRoIG5vIGFyZ3VtZW50cywgbm90IGFzIGFuIG9iamVjdC1saWtlIG1hY3JvLiAgVGhpcyBpcyBmb3IKLQljb21wYXRpYmlsaXR5IHdpdGggZGF0YS95YWNjLmMuICBQcm9ibGVtIHJlcG9ydGVkIGJ5IEpvaG4gUC4gSGFydG1hbm4gaW4KLQk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDA2LTA1L21zZzAwMDU5Lmh0bWw+LgotCSogZG9jL2Jpc29uLnRleGluZm8gKEFjdGlvbiBGZWF0dXJlcywgRXJyb3IgUmVjb3ZlcnksIFRhYmxlIG9mIFN5bWJvbHMpOgotCURvY3VtZW50IHRoaXMuCisJeWFjYy5jOiBzY29wZSByZWR1Y3Rpb24KKwkqIGRhdGEveWFjYy5jICh5eXN5bnRheF9lcnJvcik6IGhlcmUuCiAKLTIwMDYtMDUtMzAgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorMjAxMi0xMi0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL2dldGFyZ3MuYyAodXNhZ2UpOiBCYWNrIG91dCB5ZXN0ZXJkYXkncyBtb2RpZmljYXRpb24gb2YgdGhlCi0JLS1oZWxwIG91dHB1dCBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gd2FpdCBmb3IgdHJhbnNsYXRpb24gYmVmb3JlCi0JcmVsZWFzaW5nIDIuMy4KKwl0ZXN0czogQzkwIGNvbXBsaWFuY2UKKwkqIHRlc3RzL3N5bmNsaW5lcy5hdDogaGVyZS4KIAotMjAwNi0wNS0yOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisyMDEyLTEyLTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoSW50cm9kdWN0aW9uKTogRG9uJ3Qgc2F5ICJHTFIgZ3JhbW1hciIuCi0JUHJvYmxlbSByZXBvcnRlZCBieSBBa2ltIERlbWFpbGxlLgorCWZpeCBDOTAgY29tcGxpYW5jZQorCSogZGF0YS9nbHIuYywgc3JjL2dyYXBodml6LmgsIHNyYy9pZWxyLmMsIHNyYy9zY2FuLWdyYW0ubCwKKwkqIHNyYy9zeXN0ZW0uaCwgdGVzdHMvYWN0aW9ucy5hdCwgdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQ6IERvIG5vdAorCXVzZSAvLyBjb21tZW50cy4KKwlEbyBub3QgaW50cm9kdWNlIHZhcmlhYmxlcyBhZnRlciBzdGF0ZW1lbnRzLgorCVByb3ZpZGUgIm1haW4iIHdpdGggYSByZXR1cm4gdmFsdWUuCiAKLTIwMDYtMDUtMjkgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorMjAxMi0xMi0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL2dldGFyZ3MuYyAodXNhZ2UpOiBNZW50aW9uIEdMUiBub3QganVzdCBMQUxSKDEpIGluIC0taGVscCBvdXRwdXQuCisJZ2xyLmM6IHNjb3BlIHJlZHVjdGlvbgorCSogZGF0YS9nbHIuYyAoeXlyZXBvcnRTeW50YXhFcnJvcik6IFJlZHVjZSB0aGUgc2NvcGUgb2YgeXlzaXplMSAobm93CisJeXlzeikuCiAKLTIwMDYtMDUtMjYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorMjAxMi0xMi0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogZGF0YS95YWNjLmMgKHl5X3JlZHVjZV9wcmludCk6IE9taXQgdHJhaWxpbmcgd2hpdGUgc3BhY2UgaW4KLQlnZW5lcmF0ZWQgc291cmNlIGNvZGUuICBQcm9ibGVtIHJlcG9ydGVkIGJ5IEZyYW5zIEVuZ2xpY2ggaW4KLQk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDA2LTA1L21zZzAwMDQ5Lmh0bWw+LgorCWdudWxpYjogdXBkYXRlCiAKLTIwMDYtMDUtMjIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorMjAxMi0xMi0wOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogTWFrZWZpbGUubWFpbnQgKGd6aXBfcnN5bmNhYmxlLCBHWklQX0VOVik6IENvbXB1dGUgd2l0aGluIHRoZQotCXNoZWxsLCBub3Qgd2l0aGluICdtYWtlJywgc28gdGhhdCAnbWFrZScgYnkgYW4gb3JkaW5hcnkgYnVpbGRlcgotCSh1c2luZyBHTlUgbWFrZSkgZG9lcyBub3Qgd29ycnkgYWJvdXQgY29uZmlndXJpbmcgZ3ppcC4gIFRoaXMgYWxzbwotCXdvcmtzIGFyb3VuZCBhIGJ1ZyByZXBvcnRlZCBpbmRlcGVuZGVudGx5IGJ5IEtlaXRoIFRob21wc29uIGFuZCBieQotCUdlb3JnIFNjaHdhcnosIHdoZXJlYnkgZ3ppcCAxLjIuNCAtLWhlbHAgd291bGQgb3V0cHV0IHVzYWdlIG9uCi0Jc3RkZXJyIHJhdGhlciB0aGFuIHN0ZG91dCwgbWVzc2luZyB1cCB0aGUgYnVpbGQgbG9ncy4KKwluZXdzOiBwcmVwYXJlIGZvciBmb3J0aGNvbWluZyByZWxlYXNlCisJKiBORVdTOiBGaWxsIHBhcmFncmFwaC4KKwlSZW9yZGVyLgorCVVwZGF0ZSBleGFtcGxlcy4KKwlSZW1vdmUgbGluZSBmb3IgMi42LjkwLgogCi0yMDA2LTA1LTIxICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKzIwMTItMTItMDkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkqIGRhdGEveWFjYy5jICh5eXBhcnNlKTogV3JhcCB0aGUgZmluYWwgcmV0dXJuIGZyb20geXlwYXJzZSBpbnNpZGUgWVlJRAotCXRvIG1ha2Ugc3VyZSB0aGF0IFlZSUQgd2lsbCBuZXZlciBiZSB1bnVzZWQuICBUaGlzIGZpeGVzIGEgJ21ha2UKLQltYWludGFpbmVyLWNoZWNrJyBmYWlsdXJlIGNhdXNlZCBieSB0aGUgcmVjZW50IGNoYW5nZXMgdG8gdGhlICdUcml2aWFsCi0JZ3JhbW1hcnMnIHRlc3QgY2FzZSwgd2hpY2ggY2F1c2VkIGcrKyA0LjEuMCB0byBjb21wbGFpbiB0aGF0IFlZSUQgd2FzCi0Jbm90IHVzZWQuCi0JKiBkYXRhL2dsci5jICh5eXBhcnNlKTogV3JhcCB5eXBhcnNlJ3MgcmV0dXJuIGluc2lkZSBZWUlEIGp1c3QgaW4gY2FzZS4KKwlkb2M6IGV4cGxhaW4gaG93IG1pZC1ydWxlIGFjdGlvbnMgYXJlIHRyYW5zbGF0ZWQKKwkqIGRvYy9iaXNvbi50ZXhpIChBY3Rpb25zIGluIE1pZC1SdWxlKTogTWVudGlvbiBhbmQgdXNlIG5hbWVkIHJlZmVyZW5jZXMuCisJU3BsaXQgaW50byB0aHJlZSBzdWJzZWN0aW9ucywgYW1vbmcgd2hpY2guLi4KKwkoTWlkLVJ1bGUgQWN0aW9uIFRyYW5zbGF0aW9uKTogdGhpcyBuZXcgc2VjdGlvbi4KIAotMjAwNi0wNS0yMSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisyMDEyLTEyLTA5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBkYXRhL2dsci5jICh5eXJlc29sdmVMb2NhdGlvbnMpOiBSZW1vdmUgYm9ndXMgWVlBU1NFUlQgdGhhdCB0aGUKLQlzdGF0ZSBiZWZvcmUgYW4gZW1wdHkgUkhTIGlzIGFsd2F5cyByZXNvbHZlZCBoZXJlLiAgT25seSB0aGUgbG9jYXRpb24KLQlvZiB0aGF0IHN0YXRlIGlzIGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQsIGFuZCB0aGF0J3MgZW5vdWdoLiAgVGhpcwotCWZpeGVzIHRoZSByZW1haW5pbmcgYnVnIHJlcG9ydGVkIGJ5IERlcmVrIE0uIEpvbmVzIGluCi0JPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwNi0wNS9tc2cwMDAyNy5odG1sPi4KLQkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0IChVbmluaXRpYWxpemVkIGxvY2F0aW9uIHdoZW4gcmVwb3J0aW5nCi0JYW1iaWd1aXR5KTogVGVzdCB0aGUgYWJvdmUgY2FzZS4KLQlBbHNvLCB0aGUgZW1iZWRkZWQgY29tbWVudHMgaW4gdGhpcyB0ZXN0IGNhc2UgY2xhaW0gaXQgY2hlY2tzIHRoZSBjYXNlCi0Jb2YgYW4gZW1wdHkgUkhTIHRoYXQgaGFzIGluaGVyaXRlZCB0aGUgaW5pdGlhbCBsb2NhdGlvbi4gIEhvd2V2ZXIsIHRoZQotCWNvcnJlc3BvbmRpbmcgTEhTIHdhcyBhbHJlYWR5IHJlc29sdmVkLCBzbyB5eXJlc29sdmVMb2NhdGlvbnMgZGlkbid0Ci0JYWN0dWFsbHkgaGF2ZSByZWFzb24gdG8gbW9kaWZ5IGl0LiAgRml4IHRoaXMgYnkgZm9yY2luZwotCW5vbmRldGVybWluaXN0aWMgb3BlcmF0aW9uIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhcnNlLgorCWVycm9yOiB1c2UgYmV0dGVyIGxvY2F0aW9ucyBmb3IgdW51c2VkIG1pZHJ1bGUgdmFsdWVzCisJT24KIAotMjAwNi0wNS0yMCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisJICAlJQorCSAgZXhwOiB7O30geyQkO30geyAkJCA9ICQxOyB9CiAKLQkqIGRhdGEvYy5tNCAoYjRfeXlfc3ltYm9sX3ByaW50X2dlbmVyYXRlKToKLQkoYjRfeXlfc3ltYm9sX3ByaW50X2dlbmVyYXRlKTogVXNlICdZWVNUWVBFIGNvbnN0JyByYXRoZXIgdGhhbgotCSdjb25zdCBZWVNUWVBFJywgYW5kIHNpbWlsYXJseSBmb3IgWVlMVFlQRS4gIFRoaXMgZml4ZXMgb25lCi0Jb2YgdGhlIGJ1Z3MgcmVwb3J0ZWQgdG9kYXkgYnkgRGVyZWsgTSBKb25lcyBpbgotCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDYtMDUvbXNnMDAwMjcuaHRtbD4uCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoVmFsdWUgVHlwZSk6IERvY3VtZW50IHRoYXQgWVlTVFlQRSBtdXN0IGJlCi0JZGVmaW5lZCB0byBiZSBhIHR5cGUgbmFtZSB3aXRob3V0IHBhcmVucyBvciBicmFja2V0cy4KLQkoTG9jYXRpb24gVHlwZSk6IFNpbWlsYXJseSBmb3IgWVlMVFlQRS4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFRyaXZpYWwgZ3JhbW1hcnMpOiBQdXQgaW4gYSB0ZXN0IGZvciB0aGlzCi0JYnVnIHRoYXQgd2lsbCBiZSBjYXVnaHQgYnkgJ21ha2UgbWFpbnRhaW5lci1jaGVjaycgKHRob3VnaCBub3QsCi0JYWxhcywgYnkgJ21ha2UgY2hlY2snIHVubGVzcyB5b3VyIGNvbXBpbGVyIGlzIHBpY2t5KS4KKwlpbnN0ZWFkIG9mIHJlcG9ydGluZyAod2l0aCAtZmNhcmV0IC1XbWlkcnVsZS12YWx1ZSkKIAotMjAwNi0wNS0xOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisJICBtaWRydWxlLnk6Mi42LTg6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkJCBbLVdtaWRydWxlLXZhbHVlc10KKwkgICBleHA6IHs7fSB7JCQ7fSB7ICQkID0gJDE7IH0KKwkgICAgICAgIF5eXgorCSAgbWlkcnVsZS55OjIuNi0yNzogd2FybmluZzogdW51c2VkIHZhbHVlOiAkMiBbLVdtaWRydWxlLXZhbHVlc10KKwkgICBleHA6IHs7fSB7JCQ7fSB7ICQkID0gJDE7IH0KKwkgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAotCSogTkVXUzogVmVyc2lvbiAyLjIuCi0JKiBjb25maWd1cmUuYWMgKEFDX0lOSVQpOiBMaWtld2lzZS4KKwlyZXBvcnQKIAotMjAwNi0wNS0xNyAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisJICBtaWRydWxlLnk6Mi42LTg6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkJAorCSAgIGV4cDogezt9IHskJDt9IHsgJCQgPSAkMTsgfQorCSAgICAgICAgXl5eCisJICBtaWRydWxlLnk6Mi4xMC0xNDogd2FybmluZzogdW51c2VkIHZhbHVlOiAkMgorCSAgIGV4cDogezt9IHskJDt9IHsgJCQgPSAkMTsgfQorCSAgICAgICAgICAgIF5eXl5eCiAKLQkqIGRhdGEvZ2xyLmMgKHl5cmVwb3J0VHJlZSk6IE1ha2Ugcm9vbSBpbiB5eXN0YXRlcyBmb3IgdGhlIHN0YXRlCi0JcHJlY2VkaW5nIHRoZSBSSFMuICBUaGlzIGZpeGVzIHRoZSBzZWdtZW50YXRpb24gZmF1bHQgcmVwb3J0ZWQgYnkgRGVyZWsKLQlNLiBKb25lcyBpbgotCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvaGVscC1iaXNvbi8yMDA2LTA1L21zZzAwMDM1Lmh0bWw+LgotCSh5eXJlcG9ydFRyZWUsIHl5cGR1bXBzdGFjayk6IFN1YnRyYWN0IDEgZnJvbSB5eXJ1bGUgYmVmb3JlIHByaW50aW5nCi0JdG8gdGhlIHVzZXIuICBSZXBvcnRlZCBmb3IgeXlyZXBvcnRUcmVlIGJ5IERlcmVrIE0uIEpvbmVzIGxhdGVyIGluIHRoZQotCXNhbWUgdGhyZWFkLgotCSogVEhBTktTOiBBZGQgRGVyZWsgTS4gSm9uZXMuCi0JVXBkYXRlIG15IGVtYWlsIGFkZHJlc3MuCi0JRml4IHR5cG8gaW4gU3RldmUgTXVycGh5J3MgbmFtZS4KKwkqIHNyYy9yZWFkZXIuYyAoZ3JhbW1hcl9ydWxlX2NoZWNrKTogV2hlbiB3YXJuaW5nIGFib3V0IHRoZSB2YWx1ZSBvZiBhCisJbWlkcnVsZSBhY3Rpb24sIHVzZSB0aGUgbG9jYXRpb24gb2YgdGhlIG1pZHJ1bGUgYWN0aW9uIGluc3RlYWQgb2YgdGhlCisJbG9jYXRpb24gb2YgdGhlIHJ1bGUuCisJdGhlIGxvY2F0aW9uIG9mIHRoZSBwYXJ0IG9mIHRoZSBydWxlLgorCSogdGVzdHMvYWN0aW9ucy5hdCAoRGVmYXVsdCAlcHJpbnRlciBhbmQgJWRlc3RydWN0b3IgZm9yIG1pZC1ydWxlIHZhbHVlcyk6CisJQWRqdXN0IGV4cGVjdGF0aW9ucworCSogdGVzdHMvaW5wdXQuYXQgKFVudXNlZCB2YWx1ZXMgd2l0aCBkZWZhdWx0ICVkZXN0cnVjdG9yKTogRGl0dG8uCisJKEFUX0NIRUNLX1VOVVNFRF9WQUxVRVMpOiBEaXR0by4KKwlBbmQgdXNlIC1mY2FyZXQuCiAKLTIwMDYtMDUtMTQgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorMjAxMi0xMi0wOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogZGF0YS9nbHIuYyAoeXlyZXBvcnRTeW50YXhFcnJvcik6IEZpeCBvZmYtYnktb25lIGVycm9yIGluCi0JY2hlY2tpbmcgYWdhaW5zdCBZWUxBU1QgdGhhdCBjYXVzZWQgdGhlIHBhcnNlciB0byBtaXNzIGEgcG90ZW50aWFsCi0JYWx0ZXJuYXRpdmUgaW4gaXRzIGRpYWdub3N0aWMuCi0JUHJvYmxlbSByZXBvcnRlZCBieSBNYXJpYSBKb3NlIE1vcm9uIEZlcm5hbmRleiBpbgotCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDYtMDUvbXNnMDAwMjQuaHRtbD4uCi0JKiBkYXRhL2xhbHIxLmNjICh5eXN5bnRheF9lcnJvcl8pOiBMaWtld2lzZS4KLQkqIGRhdGEveWFjYy5jICh5eXN5bnRheF9lcnJvcik6IExpa2V3aXNlLgotCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoX0FUX0RBVEFfREFOQ0VSX1kpOiBVc2Ugc3RhdGljIGFycmF5IGZvcgotCXRva2VucywgaW4gY2FzZSB3ZSBydW4gaW50byBhbiBvbGRlciBDIGNvbXBpbGVyLgotCShfQVRfREFUQV9FWFBFQ1QyX1ksIEFUX0NIRUNLX0VYUEVDVDIpOiBOZXcgbWFjcm9zLgotCVVzZSB0aGVtIHRvIGNoZWNrIGZvciB0aGUgb2ZmLWJ5LW9uZSBlcnJvciBmaXhlZCBhYm92ZS4KKwlkb2M6IHZhcmlvdXMgbWlub3IgaW1wcm92ZW1lbnRzIGFuZCBmaXhlcworCSogZG9jL2ZpZ3MvZXhhbXBsZS5kb3QsIGRvYy9maWdzL2V4YW1wbGUueTogTmV3LgorCSogZG9jL2Jpc29uLnRleGk6IFByZWZlciAidG9rZW4iIHRvIFRPS0VOLgorCVVzZSBAZ3JvdXAgd2hlcmUgYXBwcm9wcmlhdGUuCisJQWRqdXN0IHdpdGggc3R5bGUgY2hhbmdlcyBpbiB0aGUgb3V0cHV0IChTdGF0ZSAwLCBub3Qgc3RhdGUgMCkuCisJRml4IHNvbWUgQHJlZiB0aGF0IHdlcmUgbWlzc2luZyB0aGUgdGhpcmQgYXJndW1lbnQuCisJRml4IHNvbWUgaW5jb3JyZWN0IGxpbmUgbnVtYmVycy4KKwlVc2UgIm5vbnRlcm1pbmFsIiwgbm90ICJub24tdGVybWluYWwiLgorCUZpeCBvdmVyZnVsbCBhbmQgdW5kZXJmdWxsIFRlWCBoYm94ZXMuCisJUHV0IHRoZSBjb21tZW50cyBpbiB0aGUgaW5kZXguCisJUmVtb3ZlIGR1cGxpY2F0ZSBpbmRleCBlbnRyaWVzLgorCUZ1c2UgZ2xvc3NhcnkgZW50cmllcyB3aGVyZSBhcHByb3ByaWF0ZS4KKwkoVW5kZXJzdGFuZGluZyk6IEltcHJvdmUgdGhlIGNvbnRpbnVpdHkgYmV0d2VlbiBzZWN0aW9ucy4KKwlVc2UgZXhhbXBsZS5kb3QgdG8gc2hvdyB0aGUgd2hvbGUgZ3JhcGguCisJKiBkb2MvTWFrZWZpbGUuYW06IEFkanVzdC4KIAotCSogZGF0YS95YWNjLmMgKHl5dG5hbWVycik6IEZpeCB0eXBvOiBsb2NhbCB2YXIgc2hvdWxkIGJlIG9mIHR5cGUKLQlZWVNJWkVfVCwgbm90IHNpemVfdC4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFRyaXZpYWwgZ3JhbW1hcnMpOiBOZXcgdGVzdCwgdG8gY2F0Y2gKLQl0aGUgZXJyb3IgZml4ZWQgYnkgdGhlIGFib3ZlIHBhdGNoLgorMjAxMi0xMi0wOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotMjAwNi0wNS0xNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKwl0ZXN0czogaWdub3JlIG1vcmUgdXNlbGVzcyBjb21waWxlciB3YXJuaW5ncworCSogdGVzdHMvc3luY2xpbmVzLmF0IChBVF9TWU5DTElORVNfQ09NUElMRSk6IElnbm9yZSBjb21wbGFpbnMgYWJvdXQKKwl1c2luZyBjKysgdG8gY29tcGlsZSBDLgogCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoQysrIEJpc29uIEludGVyZmFjZSk6IENsYXJpZnkgdGhlIG5hbWluZwotCXNjaGVtZS4KLQlSZXBvcnRlZCBieSBTdGV2ZSBNdXJwaHkuCisyMDEyLTEyLTA5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0yMDA2LTA1LTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCXRlc3RzOiBiZSByb2J1c3QgdG8gQyBiZWluZyBjb21waWxlZCB3aXRoIGEgQysrMTEgY29tcGlsZXIKKwkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0OiBVc2UgWVlfTlVMTCBpbnN0ZWFkIG9mIE5VTEwuCisJQ29tbWVudCBjaGFuZ2VzLgogCi0JKiBkYXRhL2dsci5jYywgZGF0YS9sYWxyMS5jYzogVXNpbmcgJWRlZmluZXMgaXMgbWFuZGF0b3J5LgotCSogZGF0YS9nbHIuY2M6IGI0X2xvY2F0aW9uX2ZsYWcgaXMgbm93IGI0X2xvY2F0aW9uc19mbGFnLgorMjAxMi0xMi0wOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotMjAwNi0wNS0xNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKwlidWlsZDogYmV3YXJlIG9mIENsYW5nKysgbm90IHN1cHBvcnRpbmcgUE9TSVhMWV9DT1JSRUNUCisJKiBtNC9jLXdvcmtpbmcubTQgKEJJU09OX0xBTkdfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUKTogTmV3LgorCShCSVNPTl9DX0NPTVBJTEVSX1BPU0lYTFlfQ09SUkVDVCk6IFVzZSBpdC4KKwlGb3IgY29uc2lzdGVuY3kgd2l0aCBDKyssIGFsc28gZGVmaW5lIEJJU09OX0NfV09SS1MuCisJKiBtNC9jeHgubTQgKEJJU09OX0NYWF9DT01QSUxFUl9QT1NJWExZX0NPUlJFQ1QpOiBOZXcuCisJKiBjb25maWd1cmUuYWM6IFVzZSBpdC4KKwkqIHRlc3RzL2F0bG9jYWwuaW46IEdldCBpdHMgcmVzdWx0LgorCVByb3BhZ2F0ZSBwcm9wZXJseSBDWFggdmFsdWVzIHdoZW4gdXNlZCB0byBjb21waWxlIEMuCisJV2hlbiBQT1NJWExZX0NPUlJFQ1QsIGFkanVzdCBCSVNPTl9DX1dPUktTIGFuZCBCSVNPTl9DWFhfV09SS1MuCisJKiB0ZXN0cy9sb2NhbC5hdCAoQVRfQ09NUElMRSk6IFVzZSBCSVNPTl9DX1dPUktTLgogCi0JSW1wbGVtZW50IC0tdHJhY2U9bTQuCi0JKiBzcmMvZ2V0YXJncy5jICh0cmFjZV90eXBlcywgdHJhY2VfYXJncyk6IEFjY2VwdCB0cmFjZV9tNC4KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3NrZWxldG9uKTogV2hlbiBzZXQsIHBhc3MgLWRWIHRvIG00LgorMjAxMi0xMi0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCUZhY3RvciB0aGUgaGFuZGxpbmcgb2YgZmxhZ3MgaW4gbTQuCi0JKiBzcmMvb3V0cHV0LmMgKHByZXBhcmUpOiBSZW5hbWUgdGhlIG11c2NsZSBuYW1lcyBkZWJ1ZywgZGVmaW5lcywKLQllcnJvcl92ZXJib3NlIHRvIGRlYnVnX2ZsYWcsIGRlZmluZXNfZmxhZywgZXJyb3JfdmVyYm9zZV9mbGFnLgotCSogZGF0YS9jLm00OiBBZGp1c3QuCi0JKF9iNF9kZWZpbmVfZmxhZ19pZiwgYjRfZGVmaW5lX2ZsYWdfaWYsIGI0X2RlZmluZXNfaWYpOiBOZXcuCi0JVXNlIGI0X2RlZmluZV9mbGFnX2lmIHRvIGRlZmluZSBvdGhlciBiNF9GTEFHX2lmIG1hY3Jvcy4KLQkoYjRfbG9jYXRpb25faWYpOiBBcyBhIGNvbnNlcXVlbmNlLCByZW5hbWUgYXMuLi4KLQkoYjRfbG9jYXRpb25zX2lmKTogdGhpcywgZm9yIGNvbnNpc3RlbmN5LgotCUFkanVzdCBhbGwgdGhlIHNrZWxldG9ucy4KKwltYWludDogcG9zdC1yZWxlYXNlIGFkbWluaXN0cml2aWEKKwkqIE5FV1M6IEFkZCBoZWFkZXIgbGluZSBmb3IgbmV4dCByZWxlYXNlLgorCSogLnByZXYtdmVyc2lvbjogUmVjb3JkIHByZXZpb3VzIHZlcnNpb24uCisJKiBjZmcubWsgKG9sZF9ORVdTX2hhc2gpOiBBdXRvLXVwZGF0ZS4KIAotMjAwNi0wNS0xNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKzIwMTItMTItMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkqIGV0Yy9iZW5jaC5wbTogU2hvcnRlbiBiZW5jaCBuYW1lcy4KKwl2ZXJzaW9uIDIuNi45MAorCSogTkVXUzogUmVjb3JkIHJlbGVhc2UgZGF0ZS4KIAotMjAwNi0wNS0xNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKzIwMTItMTItMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkqIHNyYy9vdXRwdXQuaCwgc3JjL291dHB1dC5jIChlcnJvcl92ZXJib3NlKTogTW92ZSB0by4uLgotCSogc3JjL2dldGFyZ3MuaCwgc3JjL2dldGFyZ3MuYzogaGVyZS4KLQlTb3J0IHRoZSBmbGFncy4KLQlBZGp1c3QgZGVwZW5kZW5jaWVzLgorCWJ1aWxkOiBmaXggc3ludGF4LWNoZWNrIGVycm9yLgorCSogY2ZnLm1rOiBFeGNsdWRlIG5hbWVzLXJlZnMsIGl0IGluY2x1ZGVzIGEgImRvdWJsZSIgaWYgKGVuZCBvZiBmaXJzdAorCWxpbmUsIGZpcnN0IG9mIHNlY29uZCBsaW5lIGJlbG93KS4KIAotMjAwNi0wNS0xMyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisJdGVzdC55OjQzLjEyLTQ0LjU5OiAgc3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiBpZgorCSBpZi1zdG10LWE6IElGIGV4cHJbY29uZF0gVEhFTiBzdG10Lmxpc3RbdGhlbl0gRUxTRSBzdG10Lmxpc3RbZWxzZV0gRkkKKwkgICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKLQkqIGRhdGEvYy5tNCAoYjRfY29weXJpZ2h0KTogUHV0IHRoZSBzcGVjaWFsIGV4Y2VwdGlvbiBmb3IgQmlzb24KLQlza2VsZXRvbnMgaGVyZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byBwdXQgaXQgaW4gZWFjaCBza2VsZXRvbi4gIEFsbAotCXVzZXMgY2hhbmdlZC4gIFN1Z2dlc3RlZCBieSBBa2ltIERlbWFpbGxlLiAgQWxzbywgd3JhcCB0aGUKLQljb3B5cmlnaHQgbm90aWNlLCBpbiBjYXNlIGl0IGlzIGxvbmdlciB0aGFuIDgwIGNvbHVtbnMuICBSZXBsYWNlCi0JY29tbWEgYnkgbmV3bGluZSBhZnRlciB0aXRsZS4KKzIwMTItMTItMDcgIFRoZW9waGlsZSBSYW5xdWV0ICA8cmFucXVldEBscmRlLmVwaXRhLmZyPgogCi0yMDA2LTA1LTExICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogZG9jL2Jpc29uLnRleGluZm8gKENhbGMrKyBTY2FubmVyKTogVGhlIGZsZXggYmVoYXZpb3IgaXMgYW4KLQlpbmNvbXBhdGliaWxpdHksIG5vdCBhIGJ1Zy4gIE1lbnRpb24gdGhhdCBpdCB3YXNuJ3QgZml4ZWQgYXMgb2YKLQlmbGV4IDIuNS4zMy4KLQotMjAwNi0wNS0xMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KLQotCSogZXhhbXBsZXMvZXh0ZXhpOiBFbmZvcmNlIHRoZSBwcmVjZWRlbmNlIG9mIGNvbmNhdGVuYXRpb24gb3ZlcgotCT4+LgotCVJlcG9ydGVkIGJ5IFRvbW15IE5vcmRncmVuLgotCi0yMDA2LTA1LTExICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgotCi0JKiBkYXRhL2xhbHIxLmNjICh5eXRyYW5zbGF0ZV8pOiBSZW5hbWUgdG9rZW4gYXMgdCB0byBhdm9pZCBjbGFzaGVzCi0Jd2l0aCB0aGUgbWVtYmVyICJ0b2tlbiIuCi0JUmVwb3J0ZWQgYnkgTWFydGluIE55bGluLgotCi0yMDA2LTA1LTA4ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogZGF0YS9nbHIuYzogU3dpdGNoIHRvIEJpc29uIDIuMiBzcGVjaWFsLWV4Y2VwdGlvbiBsYW5ndWFnZSBpbgotCXRoZSBjb3B5cmlnaHQgbm90aWNlLiAgVXNlIG1vcmUtcmVndWxhciBmb3JtYXQgZm9yIHRpdGxlcyBhbmQKLQljb3B5cmlnaHQgbm90aWNlcy4KLQkqIGRhdGEvZ2xyLmNjOiBMaWtld2lzZS4KLQkqIGRhdGEvbG9jYXRpb24uY2M6IExpa2V3aXNlLgotCSogZGF0YS95YWNjLmNjOiBMaWtld2lzZS4KLQkqIGRvYy9iaXNvbi50ZXhpbmZvIChDb25kaXRpb25zKTogRG9jdW1lbnQgdGhpcy4KLQkqIE5FV1M6IGxpa2V3aXNlLiAgVXBncmFkZSB2ZXJzaW9uIHRvIDIuMi4KLQotMjAwNi0wNC0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KLQotCSogZGF0YS9nbHIuY2M6IFJlbW92ZSBkZWFkIGNvZGUuCi0KLTIwMDYtMDQtMjUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBib290c3RyYXA6IENvbW1lbnQgb3V0IHRoZSBBTV9DUFBGTEFHUyBsaW5lLCBzaW5jZSB3ZSBkb24ndCB1c2UKLQl0aGF0IHZhcmlhYmxlIGFuZCB0aGUgbGluZSBicmVha3MgdGhlIGJvb3RzdHJhcC4gIFByb2JsZW0gcmVwb3J0ZWQKLQlieSBKdWFuIE0uIEd1ZXJyZXJvLgotCi0yMDA2LTA0LTI0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgotCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoTXVsdGlwbGUgc3RhcnQtc3ltYm9scyk6IE5ldy4KLQotMjAwNi0wNC0yNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KLQotCSogZXRjL1JFQURNRSwgZXRjL2JlbmNoLnBsOiBOZXcuCi0KLTIwMDYtMDQtMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+Ci0KLQkqIHNyYy9zY2FuLWdyYW0ubDogQmUgcm9idXN0IHRvIEJSQUNFRF9DT0RFIGFwcGVhcmluZyBiZWZvcmUgYW55Ci0JcnVsZS4KLQlSZXBvcnRlZCBieSBNaWNrYWVsIExhYmF1LgotCSogdGVzdHMvaW5wdXQuYXQgKFRvcnR1cmluZyB0aGUgU2Nhbm5lcik6IFRlc3QgaXQuCi0KLTIwMDYtMDMtMTYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoRGVjbCBTdW1tYXJ5KTogRG9uJ3QgbWVudGlvbiB5eWxsb2MgdHdpY2UuCi0JUHJvYmxlbSByZXBvcnRlZCBieSBCb2IgUm9zc2kuCi0KLTIwMDYtMDMtMTMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBkb2MvYmlzb24udGV4aW5mbzogUmVtb3ZlIEBzaG9ydHRpdGxlcGFnZSBzdHVmZjsgaXQgd2Fzbid0IHVzZWQKLQlhbmQgZGlkbid0IHJlYWxseSB3b3JrLgotCUZvciB0aGUgaW5kZXgsIHVzZSBAaWZub3RpbmZvLCBub3QgQGlmdGV4LgotCU1pbm9yIGNsZWFudXBzIG9mIHNwYWNpbmcgYW5kIHRlcm1pbm9sb2d5LgotCi0yMDA2LTAzLTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgotCi0JKiB0ZXN0cy9sb2NhbC5hdCAoX0FUX0JJU09OX09QVElPTl9QVVNIREVGUyk6IEZpeCB0aGUgZGVmaW5pdGlvbgotCW9mIEFUX05BTUVfUFJFRklYIHdoZW4gJW5hbWUtcHJlZml4IGlzIG5vdCB1c2VkLgotCi0yMDA2LTAzLTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgotCi0JQXBwbHkgLS1wcmVmaXggdG8gQysrIHNrZWxldG9ucyB0b286IHRoZXkgY2hhbmdlIHRoZSBuYW1lc3BhY2UuCi0JVGhlIHRlc3Qgc3VpdGUgYWxyZWFkeSBleGVyY2l6ZSB0aGVzZSBjYXNlcy4KLQkqIGRhdGEvYysrLm00IChiNF9uYW1lc3BhY2UpOiBOZXcuCi0JKiBkYXRhL2xhbHIxLmNjLCBkYXRhL2dsci5jYywgZGF0YS9sb2NhdGlvbi5jYzogVXNlIGl0IGluc3RlYWQgb2YgYHl5Jy4KLQkqIGRhdGEvbGFscjEuY2MgKHl5dG5hbWVlcnJfKTogTW92ZSBpdHMgZGVmaW5pdGlvbiBpbnRvIHRoZSBuYW1lc3BhY2UuCi0JKiBkYXRhL3lhY2MuYywgZGF0YS9nbHIuYzogUmVtb3ZlIGEgdXNlbGVzcyBgW10nLgotCSogZG9jL2Jpc29uLnRleGluZm86IERvY3VtZW50IGl0LgotCShPcHRpb24gQ3Jvc3MgS2V5KTogVXNlIEBtdWx0aXRhYmxlIGluIGFsbCBmb3JtYXRzLiAgSXQgbG9va3MKLQluaWNlciwgZXZlbiBpbiBUZVggb3V0cHV0cy4KLQkoUnVsZXMpOiBVc2UgdGhlIHNhbWUgY29kZSB3aGF0ZXZlciB0aGUgb3V0cHV0IHR5cGUgaXMuCi0JKiB0ZXN0cy9sb2NhbC5hdCAoX0FUX0JJU09OX09QVElPTl9QVVNIREVGUykKLQkoX0FUX0JJU09OX09QVElPTl9QT1BERUZTKTogU3VwcG9ydCBBVF9OQU1FX1BSRUZJWC4KLQkqIHRlc3RzL2NhbGMuYXQ6IFVzZSBpdCwgaW5zdGVhZCBvZiBoYXJkIGNvZGluZyBgeXknLgotCi0yMDA2LTAzLTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgotCi0JKiBUT0RPOiBSZW1vdmUgZGVhZCBpdGVtcy4KLQotMjAwNi0wMy0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KLQotCSogZG9jL0ZBUTogUmVtb3ZlLCBtZXJnZWQgaW50by4uLgotCSogZG9jL2Jpc29uLnRleGluZm8gKEZBUSk6IHRoaXMuCi0JKiBkb2MvTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGp1c3QuCi0KLTIwMDYtMDMtMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+Ci0KLQkqIGRhdGEvYy5tNCAoYjRfdG9rZW5fZW51bSk6IEFsd2F5cyBkZWZpbmUgdGhlIGVudW0gb2YgdG9rZW5zLAotCWV2ZW4gaWYgZW1wdHkuCi0JKiBkYXRhL2xhbHJsMS5jYywgZGF0YS9nbHIuY2MgKHBhcnNlcjo6dG9rZW5fdHlwZSk6IE5ldy4KLQkqIGRvYy9iaXNvbi50ZXhpbmZvIChDYWxjKysgU2Nhbm5lcik6IFVzZSBpdC4KLQotMjAwNi0wMy0wOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQlGaXggdHdvIG5pdHMgcmVwb3J0ZWQgYnkgdHdsZXZvLCBwbHVzIG9uZSBtb3JlIHRoYXQgSSBkaXNjb3ZlcmVkLgotCi0JKiBzcmMvYXNzb2MuaCAoYXNzb2NfdG9fc3RyaW5nKTogR2l2ZSBhIG5hbWUgdG8gdGhlIGFyZywgYXMKLQl0aGlzIGlzIHRoZSB1c3VhbCBCaXNvbiBzdHlsZS4KLQkqIHNyYy9sb2NhdGlvbi5oIChsb2NhdGlvbl9wcmludCk6IExpa2V3aXNlLgotCi0JKiBzcmMvcmVhZGVyLmggKHRva2VuX25hbWUpOiBMaWtld2lzZS4KLQotMjAwNi0wMy0wOCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQlGaXggc29tZSBuaXRzIHJlcG9ydGVkIGJ5IHR3bGV2by4KLQkqIGRvYy9GQVE6IFJlbW92ZSBhbmNpZW50IFkySyBGQVEsIHJlcGxhY2luZyBpdCB3aXRoICJzZWN1cmUiCi0JYW5kICJQT1NJWCIuICBVc2UgbW9yZS1tb2Rlcm4gc3ludGF4IGZvciBVUkxzLiAgTWVudGlvbiBDKysKLQlhbmQgYXNrIGZvciBKYXZhLiAgRG9uJ3QgaGFyZHdpcmUgT1MgdmVyc2lvbiBudW1iZXJzLiAgQWRkCi0JY29weXJpZ2h0IG5vdGljZS4KLQkqIG00Ly5jdnNpZ25vcmU6IEFkZCB1bmlzdGRfaC5tNCwgZm9yIGxhdGVzdCBnbnVsaWIuCi0JKiBzcmMvY29uZmxpY3RzLmMgKHNvbHZlZF9jb25mbGljdHNfb2JzdGFjayk6IE5vdyBzdGF0aWMuCi0KLTIwMDYtMDMtMDggIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgotCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoSW50cm9kdWN0aW9uKTogTWVudGlvbiBHTFIgYW5kIEMrKyBhcyBvbiB0aGUgd2ViCi0JcGFnZS4gIFNheSAieW91IGNhbiB1c2UgaXQiIG5vdCAieW91IG1heSB1c2UgaXQiIGFzIG9uIHRoZSB3ZWIgcGFnZTsKLQl3ZSdyZSBkZXNjcmliaW5nIGNhcGFiaWxpdGllcyBub3QgZ3JhbnRpbmcgcGVybWlzc2lvbi4KLQotMjAwNi0wMy0wNiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIGRhdGEvZ2xyLmMgKHl5cmVzb2x2ZUxvY2F0aW9ucyk6IFJlbmFtZSBsb2NhbCB2YXJpYWJsZXMgdG8gYXZvaWQKLQlzaGFkb3dpbmcgd2FybmluZ3MuICBVc2UgdXN1YWwgcGF0dGVyIGZvciBpdGVyYXRpbmcgdGhyb3VnaCBSSFMuCi0JKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdAotCShVbmluaXRpYWxpemVkIGxvY2F0aW9uIHdoZW4gcmVwb3J0aW5nIGFtYmlndWl0eSk6Ci0JTW9kaWZ5IHl5bGV4IHNvIHRoYXQgaXQgdXNlcyBpdHMgYXJndW1lbnQsIHJhdGhlciB0aGFuIHRyeWluZwotCXRvIHJlbHkgb24gQVJHU1VTRUQgKHdoaWNoIGRvZXNuJ3Qgd29yayBmb3IgZ2NjIHdpdGggd2FybmluZ3MpLgotCWNvbnN0IGNoYXIgLT4gY2hhciBjb25zdC4KLQotCSogdGVzdHMvTWFrZWZpbGUuYW0gKCQoc3JjZGlyKS9wYWNrYWdlLm00LCBtYWludGFpbmVyLWNoZWNrLXZhbGdyaW5kKToKLQlEb24ndCB1c2UgdGFicyBpbnNpZGUgY29tbWFuZHM7IGl0IG1lc3NlcyB1cCAncHMnLgotCVByb2JsZW0gcmVwb3J0ZWQgYnkgdHdsZXZvLgotCi0yMDA2LTAzLTA2ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KLQotCSogdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQgKFVuaW5pdGlhbGl6ZWQgbG9jYXRpb24gd2hlbiByZXBvcnRpbmcKLQlhbWJpZ3VpdHkpOiBOZXcgdGVzdCBjYXNlLgotCSogZGF0YS9nbHIuYyAoeXlyZXNvbHZlTG9jYXRpb25zKTogTmV3IGZ1bmN0aW9uLCB3aGljaCB1c2VzCi0JWVlMTE9DX0RFRkFVTFQuCi0JKHl5cmVzb2x2ZVZhbHVlKTogSW52b2tlIHl5cmVzb2x2ZUxvY2F0aW9ucyBiZWZvcmUgcmVwb3J0aW5nIGFuCi0JYW1iaWd1aXR5LgotCSogZG9jL2Jpc29uLnRleGluZm8gKERlZmF1bHQgQWN0aW9uIGZvciBMb2NhdGlvbnMpOiBOb3RlCi0JWVlMTE9DX0RFRkFVTFQncyB1c2FnZSBmb3IgYW1iaWd1aXR5IGxvY2F0aW9ucy4KLQkoR0xSIFNlbWFudGljIEFjdGlvbnMpOiBDcm9zcy1yZWZlcmVuY2UgdGhvc2Ugbm90ZXMuCi0KLTIwMDYtMDMtMDQgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgotCi0JKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdCAoTGVha2VkIHNlbWFudGljIHZhbHVlcyB3aGVuIHJlcG9ydGluZwotCWFtYmlndWl0eSk6IFJlbW92ZSB1bm5lY2Vzc2FyeSB1bmlvbiBhbmQgdHlwZSBkZWNsYXJhdGlvbnMuCi0JKExlYWtlZCBsb29rYWhlYWQgYWZ0ZXIgbm9uZGV0ZXJtaW5pc3RpYyBwYXJzZSBzeW50YXggZXJyb3IpOiBOZXcgdGVzdAotCWNhc2UuCi0JKiBkYXRhL2dsci5jICh5eXBhcnNlKTogQ2hlY2sgZm9yIHplcm8gc3RhY2tzIHJlbWFpbmluZyBiZWZvcmUKLQlhdHRlbXB0aW5nIHRvIHNoaWZ0IHRoZSBsb29rYWhlYWQgc28gdGhhdCB5b3UgZG9uJ3QgbG9zZSBpdC4KLQotMjAwNi0wMy0wMiAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+Ci0KLQlBdm9pZCBtZW1vcnkgbGVha3MgYnkgbm90IGludm9raW5nIGxvbmdqbXAgaW4geXlyZXBvcnRBbWJpZ3VpdHkuCi0JKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdCAoTGVha2VkIHNlbWFudGljIHZhbHVlcyB3aGVuIHJlcG9ydGluZwotCWFtYmlndWl0eSk6IE5ldyB0ZXN0IGNhc2UuCi0JKiBkYXRhL2dsci5jICh5eXJlcG9ydEFtYmlndWl0eSk6IEludm9rZSB5eXllcnJvciBkaXJlY3RseSBhbmQgcmV0dXJuCi0JeXlhYm9ydCByYXRoZXIgdGhhbiBpbnZva2luZyB5eUZhaWwsIHdoaWNoIGludm9rZXMgbG9uZ2ptcC4gIFJlbW92ZSB0aGUKLQlub3cgdW5uZWNlc3NhcnkgeXlzdGFja3AgcGFyYW1ldGVyLgotCSh5eXJlc29sdmVWYWx1ZSk6IFJldHVybiB5eXJlcG9ydEFtYmlndWl0eSdzIHJlc3VsdC4gIE5vdyB0aGUgbmVjZXNzYXJ5Ci0JZGVzdHJ1Y3RvcnMgY2FuIGJlIGNhbGxlZC4KLQotCSogdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQ6IERvbid0IGludm9rZSBiaXNvbiB3aXRoIGAtdCcgdW5uZWNlc3NhcmlseQotCWluIGV4aXN0aW5nIHRlc3RjYXNlcy4KLQotMjAwNi0wMy0wMiAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+Ci0KLQlEb24ndCBsZWFrIHNlbWFudGljIHZhbHVlcyBmb3IgcGFyZW50IFJIUyB3aGVuIGEgdXNlciBhY3Rpb24gY3V0cyB0aGUKLQlwYXJzZXIsIGFuZCBjbGVhbiB1cCByZWxhdGVkIGNvZGUgYSBiaXQuCi0JKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdCAoTGVha2VkIG1lcmdlZCBzZW1hbnRpYyB2YWx1ZSBpZiB1c2VyIGFjdGlvbgotCWN1dHMgcGFyc2UpOiBSZW5hbWUgdG8uLi4KLQkoTGVha2VkIHNlbWFudGljIHZhbHVlcyBpZiB1c2VyIGFjdGlvbiBjdXRzIHBhcnNlKTogLi4uIHRoaXMuICBBZGQgY2hlY2sKLQlmb3IgbGVha2VkIHBhcmVudCBSSFMgdmFsdWVzLgotCSogZGF0YS9nbHIuYyAoeXlkZXN0cm95R0xSU3RhdGUpOiBJbiBkZWJ1Z2dpbmcgb3V0cHV0LCBkaXN0aW5ndWlzaAotCWJldHdlZW4gYW4gdW5yZXNvbHZlZCBzdGF0ZSAobm9uLWVtcHR5IGNoYWluIG9mIHNlbWFudGljIG9wdGlvbnMpIGFuZAotCWFuIGluY29tcGxldGUgb25lIChzaWduYWxlZCBieSBhbiBlbXB0eSBjaGFpbikuCi0JKHl5cmVzb2x2ZVN0YXRlcyk6IERvY3VtZW50IHRoZSBpbnRlcmZhY2UuICBNb3ZlIGFsbCBtYW5pcHVsYXRpb24gb2YgYQotCXN1Y2Nlc3NmdWxseSBvciB1bnN1Y2Nlc3NmdWxseSByZXNvbHZlZCB5eUdMUlN0YXRlIHRvLi4uCi0JKHl5cmVzb2x2ZVZhbHVlKTogLi4uIGhlcmUgc28gdGhhdCB5eXJlc29sdmVWYWx1ZSBhbHdheXMgbGVhdmVzIGEKLQl5eUdMUlN0YXRlIHdpdGggY29uc2lzdGVudCBkYXRhIGFuZCB0aHVzIGlzIGVhc2llciB0byB1bmRlcnN0YW5kLgotCVJlbW92ZSB0aGUgeXl2YWxwIGFuZCB5eWxvY3AgcGFyYW1ldGVycyBzaW5jZSB0aGV5IGFyZSBhbHdheXMganVzdAotCXRha2VuIGZyb20gdGhlIHl5cyBwYXJhbWV0ZXIuICBXaGVuIHJlcG9ydGluZyBhIGRpc2NhcmRlZCBtZXJnZWQgdmFsdWUKLQlpbiBkZWJ1Z2dpbmcgb3V0cHV0LCBub3RlIHRoYXQgaXQgaXMgaW5jb21wbGV0ZWx5IG1lcmdlZC4gIERvY3VtZW50IHRoZQotCWludGVyZmFjZS4KLQkoeXlyZXNvbHZlQWN0aW9uKTogSWYgcmVzb2x2aW5nIGFueSBvZiB0aGUgUkhTIHN0YXRlcyBmYWlscywgZGVzdHJveQotCXRoZW0gYWxsIHJhdGhlciB0aGFuIGxlYWtpbmcgdGhlbS4gIFRodXMsIGFzIGxvbmcgYXMgdXNlciBhY3Rpb25zIGFyZQotCXdyaXR0ZW4gdG8gY2xlYW4gdXAgdGhlIFJIUyBjb3JyZWN0bHksIHl5cmVzb2x2ZUFjdGlvbiBhbHdheXMgY2xlYW5zIHVwCi0JdGhlIFJIUyBvZiBhIHNlbWFudGljIG9wdGlvbi4gIERvY3VtZW50IHRoZSBpbnRlcmZhY2UuCi0KLTIwMDYtMDItMjcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBkYXRhL2dsci5jICh5eWV4cGFuZEdMUlN0YWNrKTogQ2F0Y2ggYW4gb2ZmLWJ5LW9uZSBlcnJvciB0aGF0Ci0JbGVkIHRvIGEgc2VnbWVudGF0aW9uIGZhdWx0IGluIEdOVSBQYXNjYWwuICBQcm9ibGVtIHJlcG9ydGVkCi0JYnkgV2FsZGVrIEhlYmlzY2guCi0KLTIwMDYtMDItMjEgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgotCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoTWlkLVJ1bGUgQWN0aW9ucyk6IEV4cGxhaW4gaG93IHRvIGJ1cnkgYQotCW1pZC1ydWxlIGFjdGlvbiBpbnNpZGUgYSBub250ZXJtaW5hbCBzeW1ib2wgaW4gb3JkZXIgdG8gZGVjbGFyZSBhCi0JZGVzdHJ1Y3RvciBmb3IgaXRzIHNlbWFudGljIHZhbHVlLgotCi0yMDA2LTAyLTE2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogZGF0YS95YWNjLmMgWyghIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UpICYmICEKLQlZWVNUQUNLX1VTRV9BTExPQ0EgJiYgISBkZWZpbmVkIFlZU1RBQ0tfQUxMT0MgJiYgZGVmaW5lZAotCV9fY3BsdXNwbHVzICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgIQotCSgoZGVmaW5lZCBZWU1BTExPQyB8fCBkZWZpbmVkIG1hbGxvYykgJiYgKGRlZmluZWQgWVlGUkVFIHx8Ci0JZGVmaW5lZCBmcmVlKSldOiBJbmNsdWRlIDxzdGRsaWIuaD4gcmF0aGVyIHRoYW4gcm9sbGluZyBvdXIgb3duCi0JZGVjbGFyYXRpb25zIG9mIG1hbGxvYyBhbmQgZnJlZSwgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aAotCWluY29tcGF0aWJsZSBkZWNsYXJhdGlvbnMgKHVzaW5nICd0aHJvdycpIEMrKydzIHN0ZGxpYi5oLiAgVGhpcwotCXNob3VsZCBmaXggRGViaWFuIGJ1ZyAzNDAwMTIKLQk8aHR0cDovL2J1Z3MuZGViaWFuLm9yZy9jZ2ktYmluL2J1Z3JlcG9ydC5jZ2k/YnVnPTM0MDAxMj4sCi0JcmVwb3J0ZWQgYnkgR3VpbGxhdW1lIE1lbHF1aW9uZC4KLQotMjAwNi0wMi0xMyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIE5FV1M6IENsYXJpZnkgc3ltYm9scyB2ZXJzdXMgdHlwZXMgaW4gdW51c2VkLXZhbHVlIHdhcm5pbmdzLgotCi0JKiBjb25maWd1cmUuYWMgKEFDX0lOSVQpOiBCdW1wIHZlcnNpb24gbnVtYmVyLgotCi0yMDA2LTAyLTEzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogTkVXUzogVmVyc2lvbiAyLjFhLgotCSogdGVzdHMvaGVhZGVycy5hdCAoQVRfVEVTVF9DUFBfR1VBUkRfSCk6IERlY2xhcmUgeXllcnJvciBhbmQgeXlsZXgsCi0Jc2luY2UgQzk5IHJlcXVpcmVzIHRoaXMuCi0KLTIwMDYtMDItMTEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBtNC9jLXdvcmtpbmcubTQ6IE5ldyBmaWxlLgotCSogY29uZmlndXJlLmFjIChCSVNPTl9URVNUX0ZPUl9XT1JLSU5HX0NfQ09NUElMRVIpOiBVc2UgaXQuCi0KLTIwMDYtMDItMTAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBNYWtlZmlsZS5tYWludDogTWVyZ2UgZnJvbSBjb3JldXRpbHMuCi0KLTIwMDYtMDItMDkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JTW9yZSBwb3J0YWJpbGl0eSBmaXhlcyBmb3IgcHJvYmxlbXMgc3VtbWFyaXplZCBieSBOZWxzb24gSC4gRi4gQmVlYmUuCi0KLQkqIG00L2N4eC5tNCAoQklTT05fVEVTVF9GT1JfV09SS0lOR19DWFhfQ09NUElMRVIpOiBDYXRjaCBhCi0JY29uZmlndXJhdGlvbiBzY3Jld3VwICIuL2NvbmZpZ3VyZSBDQz0vb3B0L1NVTldzcHJvL2Jpbi9jODkKLQlDRkxBR1M9Ii14YXJjaD1nZW5lcmljNjQiIENYWD0vb3B0L1NVTldzcHJvL2Jpbi9DQwotCUxERkxBR1M9Ii14YXJjaD1nZW5lcmljNjQiIHdpdGggU3VuIEMgNS43IG9uIFNvbGFyaXMgMTA7IHRoaXMKLQltZXNzZXMgdXAgYmVjYXVzZSBDKysgY29kZSBpcyBjb21waWxlZCBpbiAzMi1iaXQgbW9kZSBidXQgbGlua2VkCi0JaW4gNjQtYml0IG1vZGUuCi0KLTIwMDYtMDItMDggIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JTW9yZSBwb3J0YWJpbGl0eSBmaXhlcyBmb3IgcHJvYmxlbXMgc3VtbWFyaXplZCBieSBOZWxzb24gSC4gRi4gQmVlYmUuCi0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvIChDYWxjKysgU2Nhbm5lcik6IFdvcmsgYXJvdW5kIGEgYnVnIGluIGZsZXgKLQkyLjUuMzEuICBUaGlzIHJlc2VtYmxlcyB0aGUgMjAwNS0xMC0xMCBwYXRjaCB0byBzcmMvc2Nhbi1za2VsLmwuCi0KLQkqIGV4YW1wbGVzL2NhbGMrKy9NYWtlZmlsZS5hbSAoY2hlY2tfUFJPR1JBTVMpOiBSZW5hbWVkIGZyb20KLQlub2Rpc3RfUFJPR1JBTVMsIHNpbmNlIHdlIGRvbid0IG5lZWQgdG8gYWN0dWFsbHkgY29tcGlsZSB0aGUKLQlleGFtcGxlIGlmIHdlJ3JlIGp1c3QgZG9pbmcgYSBwbGFpbiAnbWFrZScuICBUaGlzIGF2b2lkcyBib3RoZXJpbmcKLQl0aGUgaW5zdGFsbGVyIHVubmVjZXNzYXJpbHkgYWJvdXQgcHJvYmxlbXMgZHVlIHRvIHdlaXJkIEMrKwotCWNvbXBpbGVycy4KLQotMjAwNi0wMi0wNiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQlNb3JlIHBvcnRhYmlsaXR5IGZpeGVzIGZvciBwcm9ibGVtcyBzdW1tYXJpemVkIGJ5IE5lbHNvbiBILiBGLiBCZWViZS4KLQotCSogdGVzdHMvaGVhZGVycy5hdCAoQVRfVEVTVF9DUFBfR1VBUkRfSCk6IFVzZSAjaW5jbHVkZSA8Li4uPiByYXRoZXIKLQl0aGFuICNpbmNsdWRlICIuLi4iLCBhbmQgY29tcGlsZSB3aXRoIC1JJy4nLiAgVGhlIG9sZCBtZXRob2Qgd2FzCi0Jbm90IHBvcnRhYmxlLCBhY2NvcmRpbmcgdG8gUG9zaXggYW5kIHRoZSBDIHN0YW5kYXJkLCBhbmQgaXQgZG9lcwotCW5vdCB3b3JrIHdpdGggU3VuIEMgNS43LCB3aGVyZSBwcmV2aW91cyAjbGluZSBkaXJlY3RpdmVzIGFmZmVjdAotCXRoZSB3b3JraW5nIGRpcmVjdG9yeSB1c2VkIGluIGxhdGVyICNpbmNsdWRlICIuLi4iIGRpcmVjdGl2ZXMuCi0KLTIwMDYtMDItMDYgIEp1YW4gTWFudWVsIEd1ZXJyZXJvICA8anVhbi5ndWVycmVyb0BnbXguZGU+Ci0KLQlWYXJpb3VzIERKR0dQIHNwZWNpZmljIGlzc3VlcyBpbiAvZGpncHAKLQotMjAwNi0wMi0wMiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQlNb3JlIHBvcnRhYmlsaXR5IGZpeGVzIGZvciBwcm9ibGVtcyBzdW1tYXJpemVkIGJ5IE5lbHNvbiBILiBGLiBCZWViZS4KLQotCSogbTQvY3h4Lm00IChCSVNPTl9URVNUX0ZPUl9XT1JLSU5HX0NYWF9DT01QSUxFUik6IENoZWNrIHRoYXQKLQknI2luY2x1ZGUgPG1hcD4nIHdvcmtzIGFuZCB0aGF0IHlvdSBjYW4gYXBwbHkgKysgdG8gaXRlcmF0b3JzLgotCi0yMDA2LTAyLTAxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCVdvcmsgYXJvdW5kIHBvcnRhYmlsaXR5IHByb2JsZW1zIHN1bW1hcml6ZWQgYnkgTmVsc29uIEguIEYuIEJlZWJlIGluCi0JPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwNS0wOS9tc2cwMDAyMS5odG1sPi4KLQotCSogbTQvY3h4Lm00IChCSVNPTl9URVNUX0ZPUl9XT1JLSU5HX0NYWF9DT01QSUxFUik6IENoZWNrCi0JdGhhdCAnI2luY2x1ZGUgPHN0cmluZz4nIHdvcmtzLgotCi0JKiBkYXRhL2xhbHIxLmNjICh5eXRyYW5zbGF0ZV8pOiBObyBsb25nZXIgaW5saW5lLCB0byB3b3JrIGFyb3VuZCBhCi0JcG9ydGluZyBwcm9ibGVtIHRvIGcrKyAzLjQuMyBvbiBEYXJ3aW4gNy45LjAsIHdoZXJlIGcrKyBjb21wbGFpbmVkCi0JIndhcm5pbmc6IHNvcnJ5OiBzZW1hbnRpY3Mgb2YgaW5saW5lIGZ1bmN0aW9uIHN0YXRpYyBkYXRhIGBjb25zdAotCXVuc2lnbmVkIGNoYXIgdHJhbnNsYXRlX3RhYmxlWzI2Ml0nIGFyZSB3cm9uZyAoeW91J2xsIHdpbmQgdXAgd2l0aAotCW11bHRpcGxlIGNvcGllcykiLgotCi0JKiBsaWIvYmJpdHNldC5oIChzdHJ1Y3QgYml0c2V0X3Z0YWJsZSk6IFJlbmFtZSBtZW1iZXJzIG5vdCwgYW5kLAotCW9yLCB4b3IgdG8gbm90XywgYW5kXywgb3JfLCBhbmQgeG9yXywgcmVzcGVjdGl2ZWx5LiAgVGhpcyB3b3JrcwotCWFyb3VuZCBhIGJ1ZyBpbiBHQ0MgMy40LjMgb24gSXJpeCA2LjUsIHdoaWNoIGFwcGFyZW50bHkgaGFzIGEKLQlyYW5kb20gc3lzdGVtIGhlYWRlciBzb21ld2hlcmUgdGhhdCBpbmNsdWRlcyB0aGUgZXF1aXZhbGVudCBvZgotCTxpc282NDYuaD4uCi0KLQkqIHRlc3RzL2hlYWRlcnMuYXQgKEFUX1RFU1RfQ1BQX0dVQVJEX0gpOiBEb24ndCBhc3N1bWUgdGhhdCAiJENDCi0JLUUiIHdvcmtzOyBpdCBhcHBhcmVudGx5IGRvZXNuJ3Qgd29yayB3aXRoIFBhdGhTY2FsZSBFS08gQ29tcGlsZXIKLQlTdWl0ZSBWZXJzaW9uIDIuMC4KLQotMjAwNi0wMS0zMCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+Ci0KLQlEdXJpbmcgZGV0ZXJtaW5pc3RpYyBHTFIgb3BlcmF0aW9uLCB1c2VyIGFjdGlvbnMgc2hvdWxkIGJlIGFibGUgdG8KLQlpbmZsdWVuY2UgdGhlIHBhcnNlIGJ5IGNoYW5naW5nIHl5Y2hhci4gIFRvIG1ha2UgdGhpcyBlYXNpZXIgdG8gZml4IGFuZAotCXRvIG1ha2UgZ2xyLmMgZWFzaWVyIHRvIGV2b2x2ZSBpbiBnZW5lcmFsLCBkb24ndCBtYWludGFpbiB5eXRva2VuIGluCi0JcGFyYWxsZWwgd2l0aCB5eWNoYXI7IGp1c3QgY29tcHV0ZSB5eXRva2VuIHdoZW4gbmVlZGVkLgotCSogdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQgKEluY29ycmVjdCBsb29rYWhlYWQgZHVyaW5nIGRldGVybWluaXN0aWMKLQlHTFIpOiBDaGVjayB0aGF0IHNldHRpbmcgeXljaGFyIGluIGEgdXNlciBhY3Rpb24gaGFzIHRoZSBpbnRlbmRlZAotCWVmZmVjdC4KLQkqIGRhdGEvZ2xyLmMgKHl5R0xSU3RhY2spOiBSZW1vdmUgeXl0b2tlbnAgbWVtYmVyLgotCSh5eWNsZWFyaW4pOiBEb24ndCBzZXQgKnl5dG9rZW5wLgotCSh5eXByb2Nlc3NPbmVTdGFjaywgeXlyZXBvcnRTeW50YXhFcnJvciwgeXlyZWNvdmVyU3ludGF4RXJyb3IpOiBFeGFtaW5lCi0JeXljaGFyIHJhdGhlciB0aGFuICp5eXRva2VucCB0byBkZXRlcm1pbmUgdGhlIGN1cnJlbnQgbG9va2FoZWFkLgotCUNvbXB1dGUgeXl0b2tlbiBsb2NhbGx5IHdoZW4gbmVlZGVkLgotCSh5eXBhcnNlKTogTGlrZXdpc2UuICBSZW1vdmUgdGhlIGxvY2FsIHl5dG9rZW4gdGhhdCB5eXRva2VucCB1c2VkIHRvCi0JcG9pbnQgdG8uCi0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvIChCaXNvbiBPcHRpb25zKTogUmVtb3ZlIHN0cmF5IHNlbnRlbmNlIGZyYWdtZW50Ci0JYWZ0ZXIgYC0tcmVwb3J0JyBkb2N1bWVudGF0aW9uLgotCi0yMDA2LTAxLTMwICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogc3JjL3BhcnNlLWdyYW0ueSAoZ3JhbW1hcl9kZWNsYXJhdGlvbik6IExvY2F0aW9uIG9mIHByaW50ZXIKLQlzeW1ib2wgaXMgQDEsIG5vdCBsaXN0LT5sb2NhdGlvbi4gIEJ1ZyByZXBvcnRlZCBieSB0d2xldm8uCi0JKiB0ZXN0cy9pbnB1dC5hdCAoSW5jb21wYXRpYmxlIEFsaWFzZXMpOiBBZGp1c3QgdG8gYWJvdmUgY2hhbmdlLgotCi0yMDA2LTAxLTI5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogdGVzdHMvaW5wdXQuYXQgKEFUX0NIRUNLX1VOVVNFRF9WQUxVRVMpOiBSZW1vdmUuICBJbnN0ZWFkLCBkbwotCWFsbCB0aGUgdGVzdCBhdCBvbmNlLiAgVGhpcyBtYWtlcyB0aGUgb3V0cHV0IGVhc2llciB0byByZWFkIGluIHRoZQotCW5vcm1hbCBjYXNlLgotCi0JRml4IGEgbG9uZ3N0YW5kaW5nIGJ1ZyB1bmNvdmVyZWQgYnkgYnJvLTAuOWE5L3NyYy9wYXJzZS55LCB3aGljaCBJCi0JZ290IGZyb20gPGh0dHA6Ly9icm8taWRzLm9yZy9kb3dubG9hZC5odG1sPi4gIFRoZSBidWcgaXMgdGhhdAotCXdoZW4gdHdvIGFjdGlvbnMgYXBwZWFyZWQgaW4gc3VjY2Vzc2lvbiwgdGhlIHNlY29uZCBvbmUgd2FzCi0Jc2Nhbm5lZCBiZWZvcmUgdGhlIGZpcnN0IG9uZSB3YXMgYWRkZWQgdG8gdGhlIGdyYW1tYXIgcnVsZQotCWFzIGEgbWlkcnVsZSBhY3Rpb24uICBCaXNvbiB0aGVuIG91dHB1dCB0aGUgaW5jb3JyZWN0IHdhcm5pbmcKLQkicGFyc2UueTo5MDUuMTctOTA2LjM2OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQzIi4KLQkqIHNyYy9wYXJzZS1ncmFtLnkgKEJSQUNFRF9DT0RFLCBhY3Rpb24pOiBUaGVzZSBhcmUgbm8gbG9uZ2VyCi0JYXNzb2NpYXRlZCB3aXRoIGEgdmFsdWUuCi0JKHJocyk6IERvbid0IGludm9rZSBncmFtbWFyX2N1cnJlbnRfcnVsZV9hY3Rpb25fYXBwZW5kLgotCShhY3Rpb24pOiBJbnZva2UgaXQgaGVyZSBpbnN0ZWFkLgotCSogc3JjL3JlYWRlci5jIChncmFtbWFyX21pZHJ1bGVfYWN0aW9uKTogTm93IGV4dGVybi4KLQkoZ3JhbW1hcl9jdXJyZW50X3J1bGVfYWN0aW9uX2FwcGVuZCk6IERvbid0IGludm9rZQotCWdyYW1tYXJfbWlkcnVsZV9hY3Rpb247IHRoYXQgaXMgbm93IHRoZSBzY2FubmVyJ3Mgam9iLgotCSogc3JjL3JlYWRlci5oIChsYXN0X3N0cmluZywgbGFzdF9icmFjZWRfY29kZV9sb2MpOgotCShncmFtbWFyX21pZHJ1bGVfYWN0aW9uKTogTmV3IGRlY2xzLgotCSogc3JjL3NjYW4tZ3JhbS5sIChsYXN0X3N0cmluZyk6IE5vdyBleHRlcm4sIHNpZ2guCi0JKGxhc3RfYnJhY2VkX2NvZGVfbG9jKTogTmV3IGV4dGVybiB2YXJpYWJsZS4KLQkoPElOSVRJQUw+InsiKTogSW52b2tlIGdyYW1tYXJfbWlkcnVsZV9hY3Rpb24gaWYgdGhlIGN1cnJlbnQKLQlydWxlIGFscmVhZHkgaGFzIGFuIGFjdGlvbi4KLQkoPFNDX0JSQUNFRF9DT0RFPiJ9Iik6IFNldCBsYXN0X2JyYWNlZF9jb2RlX2xvYyBiZWZvcmUgcmV0dXJuaW5nLgotCSogdGVzdHMvaW5wdXQuYXQgKEFUX0NIRUNLX1VOVVNFRF9WQUxVRVMpOgotCUFkZCBzb21lIHRlc3RzIHRvIGNoZWNrIHRoYXQgdGhlIGFib3ZlIGNoYW5nZXMgZml4ZWQgdGhlIGJ1Zy4KLQotMjAwNi0wMS0yNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIHNyYy9yZWFkZXIuYyAoc3ltYm9sX3Nob3VsZF9iZV91c2VkKTogUmVuYW1lZCBmcm9tIHN5bWJvbF90eXBlZF9wLgotCUFsbCB1c2VkIGNoYW5nZWQuICBDaGVjayB3aGV0aGVyIHRoZSBzeW1ib2wgaGFzIGEgZGVzdHJ1Y3RvciwKLQlub3Qgd2hldGhlciBpdCBpcyB0eXBlZC4KLQkqIHRlc3RzL2lucHV0LmF0IChBVF9DSEVDS19VTlVTRURfVkFMVUVTKTogQWRkIGEgZGVzdHJ1Y3Rvciwgc28KLQl0aGF0IHRoZSB2YWx1ZXMgYXJlIHN0aWxsIHJlcG9ydGVkIGFzIHVudXNlZC4gIEFsbCBsaW5lIG51bWJlcnMKLQlhZGp1c3RlZC4KLQotMjAwNi0wMS0yMyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQlXb3JrIGFyb3VuZCBhIGJ1ZyBpbiBicm8gMC44LCB3aGljaCB1bmRlcnBhcmVudGhlc2l6ZXMgaXRzCi0JZGVmaW5pdGlvbiBvZiBZWUxMT0NfREVGQVVMVC4KLQkqIGRhdGEvZ2xyLmM6IENoYW5nZSBhbGwgdXNlcyBvZiBZWUxMT0NfREVGQVVMVCB0byBwYXJlbnRoZXNpemUKLQl0aGVpciBhcmd1bWVudHMuCi0JKiBkYXRhL2xhbHIxLmNjOiBMaWtld2lzZS4KLQkqIGRhdGEveWFjYy5jYzogTGlrZXdpc2UuCi0KLTIwMDYtMDEtMjIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JV29yayBhcm91bmQgYSBidWcgaW4gUGlrZSA3LjAsIGFuZCBnaXZlIHRoZSBQaWtlIGZvbGtzIGEKLQliZXR0ZXIgd2F5IHRvIG92ZXJyaWRlIHRoZSB1c3VhbCBpbnQgd2lkdGhzLgotCSogZGF0YS95YWNjLmMgKGI0X2ludF90eXBlKTogVXNlIHl5dHlwZV91aW50OCwgZXRjLiwgc28gdGhhdCB0aGUKLQl1c2VyIGNhbiBvdmVycmlkZSB0aGUgdHlwZXMuCi0JKHNob3J0KTogI3VuZGVmLCB0byB3b3JrIGFyb3VuZCBhIGJ1ZyBpbiBQaWtlIDcuMC4KLQkoeXl0eXBlX3VpbnQ4LCB5eXR5cGVfaW50OCwgeXl0eXBlX3VpbnQxNiwgeXl0eXBlX2ludDE2KTogTmV3IHR5cGVzLgotCSh1bmlvbiB5eWFsbG9jLnl5c3MpOiBVc2UgeXl0eXBlX2ludDE2IHJhdGhlciB0aGFuIHNob3J0LgotCUFsbCB1c2VzIGNoYW5nZWQuCi0JKHl5c2lnbmVkX2NoYXIpOiBSZW1vdmUuCi0JKiBzcmMvcGFyc2UtZ3JhbS55IChZWVRZUEVfVUlOVDgsIFlZVFlQRV9JTlQ4LCBZWVRZUEVfVUlOVDE2KToKLQkoWVlUWVBFX0lOVDE2KTogTmV3IG1hY3JvcywgdG8gdGVzdCB0aGUgbmV3IGZhY2lsaXR5IGluIHlhY2MuYy4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFdlYjJjIEFjdGlvbnMpOiBBZGp1c3QgdG8gYWJvdmUgY2hhbmdlcy4KLQotCSogc3JjL3JlYWRlci5jIChjaGVja19hbmRfY29udmVydF9ncmFtbWFyKTogTmV3IGZ1bmN0aW9uLgotCShyZWFkZXIpOiBDbG9zZSB0aGUgaW5wdXQgZmlsZSBldmVuIGlmIHNvbWV0aGluZyB3ZW50IHdyb25nIGR1cmluZwotCXBhcnNpbmcuICBNaW5vciBmaWxlIGRlc2NyaXB0b3IgbGVhayByZXBvcnRlZCBieSB0d2xldm8uCi0KLQkqIHNyYy9hc3NvYy5jIChhc3NvY190b19zdHJpbmcpOiBVc2UgYSBkZWZhdWx0OiBhYm9ydCAoKTsgY2FzZQotCXRvIHBhY2lmeSBnY2MgLVdzd2l0Y2gtZGVmYXVsdC4KLQkqIHNyYy9zY2FuLWdyYW0ubCAoYWRqdXN0X2xvY2F0aW9uKTogVXNlIGEgZGVmYXVsdDogYnJlYWs7IGNhc2UKLQl0byBwYWNpZnkgZ2NjIC1Xc3dpdGNoLWRlZmF1bHQuCi0JKiBzcmMvc2Nhbi1za2VsLmggKHNrZWxfZ2V0X2xpbmVubywgc2tlbF9nZXRfaW4sIHNrZWxfZ2V0X291dCk6Ci0JKHNrZWxfZ2V0X2xlbmcsIHNrZWxfZ2V0X3RleHQsIHNrZWxfc2V0X2xpbmVubywgc2tlbF9zZXRfaW4pOgotCShza2VsX3NldF9vdXQsIHNrZWxfZ2V0X2RlYnVnLCBza2VsX3NldF9kZWJ1Zywgc2tlbF9sZXhfZGVzdHJveSk6Ci0JTW92ZSB0aGVzZSBkZWNscyB0byBzY2FuLXNrZWwubCwgc2luY2UgdGhleSBkb24ndCBuZWVkIHRvIGJlCi0JdmlzaWJsZSBlbHNld2hlcmUuCi0JKiBzcmMvc2Nhbi1za2VsLmw6IEFjY2VwdCB0aGUgYWJvdmUgZGVjbHMuCi0JKHNrZWxfbGV4KTogTmV3IGRlY2wsIHRvIHBhY2lmeSBHQ0Mgd2hlbiB1bnBhdGNoZWQgZmxleCAyLjUuMzEKLQlpcyB1c2VkLgotCi0yMDA2LTAxLTIxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogTWFrZWZpbGUuY2ZnIChsb2NhbC1jaGVja3MtdG8tc2tpcCk6IEFkZCBjaGFuZ2Vsb2ctY2hlY2ssCi0Jc2luY2Ugd2UgZG9uJ3Qgd2FudCB0byBpbnNpc3Qgb24gYSB2ZXJzaW9uIG51bWJlciBhdCB0aGUgc3RhcnQKLQlvZiB0aGUgY2hhbmdlbG9nIGV2ZXJ5IHRpbWUuCi0JKiBNYWtlZmlsZS5tYWludDogU3luYyBmcm9tIGNvcmV1dGlscyBhIGJpdCBiZXR0ZXIuCi0JKHNjX3RyYWlsaW5nX2JsYW5rKTogUmVuYW1lZCBmcm9tIHNjX3RyYWlsaW5nX3NwYWNlLgotCUFsbCB1c2VzIGNoYW5nZWQuCi0JKHNjX25vX2lmX2hhdmVfY29uZmlnX2gsIHNjX3JlcXVpcmVfY29uZmlnX2gpOgotCShzY19wcm9oaWJpdF9hc3NlcnRfd2l0aG91dF91c2UpOiBOZXcgcnVsZXMuCi0JKHNjX29ic29sZXRlX3N5bWJvbHMpOiBEb24ndCBjYXRjaCBNYWtlZmlsZS5tYWludCBpdHNlbGYuCi0JKHNjX2RkX21heF9zeW1fbGVuZ3RoKTogRml4IGxlYWRpbmcgc3BhY2VzIGluIHJ1bGUuCi0JKHNjX3N5c3RlbV9oX2hlYWRlcnMpOiBQcmVmaXggd2l0aCBALgotCShzY191c2VsZXNzX2NwcF9wYXJlbnMsIG00LWNoZWNrKTogT3V0cHV0IGxpbmUgbnVtYmVycy4KLQkoY2hhbmdlbG9nLWNoZWNrKTogQWxsb3cgdmVyc2lvbiBvbmx5IGluIGhlYWQuCi0JKiBkYXRhL2MubTQ6IFVzZSAiZGVmaW5lZCBGT08iIGluc3RlYWQgb2YgImRlZmluZWQgKEZPTykiLCB0bwotCXNhdGlzZnkgbmV3IE1ha2VmaWxlLm1haW50IHJ1bGUuCi0JKiBkYXRhL2dsci5jOiBMaWtld2lzZS4KLQkqIGRhdGEvZ2xyLmNjOiBMaWtld2lzZS4KLQkqIGRhdGEvbGFscjEuY2M6IExpa2V3aXNlLgotCSogZGF0YS95YWNjLmM6IExpa2V3aXNlLgotCSogbGliL2ViaXRzZXR2LmM6IExpa2V3aXNlLgotCSogbGliL2xiaXRzZXQuYzogTGlrZXdpc2UuCi0JKiBsaWIvc3VicGlwZS5jOiBMaWtld2lzZS4KLQkqIGxpYi90aW1ldmFyLmM6IExpa2V3aXNlLgotCSogc3JjL3N5c3RlbS5oOiBMaWtld2lzZS4KLQkqIGRhdGEveWFjYy5jIChZWVNUWVBFKTogRG9uJ3QgZ2VuZXJhdGUgdHJhaWxpbmcgc3BhY2VzIGluIG91dHB1dC4KLQkqIGRqZ3BwL01ha2VmaWxlLm1haW50OiBBZGQgY29weXJpZ2h0IG5vdGljZS4KLQkqIGRqZ3BwL1JFQURNRS5pbjogTGlrZXdpc2UuCi0JKiBkamdwcC9jb25maWcuYmF0OiBMaWtld2lzZS4KLQkqIGRqZ3BwL2NvbmZpZy5zaXRlOiBMaWtld2lzZS4KLQkqIGRqZ3BwL2NvbmZpZ19oLnNlZDogTGlrZXdpc2UuCi0JKiBkamdwcC9kanVucGFjay5iYXQ6IExpa2V3aXNlLgotCSogZGpncHAvY29uZmlnLnNlZDogRml4IGNvcHlyaWdodCBub3RpY2UgdG8gbWF0Y2ggc3RhbmRhcmQgZm9ybWF0LgotCSogZGpncHAvc3VicGlwZS5oOiBMaWtld2lzZS4KLQkqIGxpYi9iaXRzZXR2LXByaW50LmM6IExpa2V3aXNlLgotCSogbGliL2JpdHNldHYuYzogTGlrZXdpc2UuCi0JKiBsaWIvc3VicGlwZS5oOiBMaWtld2lzZS4KLQkqIGxpYi90aW1ldmFyLmM6IExpa2V3aXNlLgotCSogbGliL3RpbWV2YXIuaDogTGlrZXdpc2UuCi0JKiBkamdwcC9zdWJwaXBlLmM6IFVzZSBzdGFuZGFyZCByZWNpcGUgZm9yIGNvbmZpZy5oLgotCSogbGliL2FiaXRzZXQuYzogTGlrZXdpc2UuCi0JKiBsaWIvYml0c2V0LmM6IExpa2V3aXNlLgotCSogbGliL2JpdHNldF9zdGF0cy5jOiBMaWtld2lzZS4KLQkqIGxpYi9iaXRzZXR2LXByaW50LmM6IExpa2V3aXNlLgotCSogbGliL2JpdHNldHYuYzogTGlrZXdpc2UuCi0JKiBsaWIvZWJpdHNldHYuYzogTGlrZXdpc2UuCi0JKiBsaWIvZ2V0LWVycm5vLmM6IExpa2V3aXNlLgotCSogbGliL2xiaXRzZXQuYzogTGlrZXdpc2UuCi0JKiBsaWIvc3VicGlwZS5jOiBMaWtld2lzZS4KLQkqIGxpYi90aW1ldmFyLmM6IExpa2V3aXNlLgotCSogbGliL3ZiaXRzZXQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0cy9sb2NhbC5hdDogTGlrZXdpc2UuCi0JKiBzcmMvc2Nhbi1ncmFtLmw6IERvbid0IGluY2x1ZGUgdmVyaWZ5LmgsIHNpbmNlIHN5c3RlbS5oIGRvZXMKLQl0aGF0IGZvciB1cy4KLQkqIC54LXNjX3JlcXVpcmVfY29uZmlnX2g6IE5ldyBmaWxlLgotCSogLngtc2NfdW5tYXJrZWRfZGlhZ25vc3RpY3M6IE5ldyBmaWxlLgotCi0yMDA2LTAxLTIwICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCUJlIGEgYml0IG1vcmUgc3lzdGVtYXRpYyBhYm91dCB1c2luZyAnYWJvcnQnLgotCSogbGliL2FiaXRzZXQuYyAoYWJpdHNldF90ZXN0KTogUmVtb3ZlIEFUVFJJQlVURV9VTlVTRUQ7IG5vdCBuZWVkZWQuCi0JKiBsaWIvYml0c2V0LmMgKGJpdHNldF9ieXRlcywgYml0c2V0X2luaXQsIGJpdHNldF9vcDRfY21wKToKLQlQdXQgJ2RlZmF1bHQ6IGFib3J0ICgpOycgYmVmb3JlIHNvbWUgb3RoZXIgY2FzZSwgdG8gc2F0aXNmeSBvbGRlcgotCXBlZGFudGljIGNvbXBpbGVycy4KLQkqIGxpYi9iaXRzZXRfc3RhdHMuYyAoYml0c2V0X3N0YXRzX2luaXQpOiBMaWtld2lzZS4KLQkqIGxpYi9lYml0c2V0LmMgKGViaXRzZXRfZWx0X2ZpbmQsIGViaXRzZXRfb3AzX2NtcCk6IExpa2V3aXNlLgotCSogbGliL2xiaXRzZXQuYyAobGJpdHNldF9lbHRfZmluZCwgbGJpdHNldF9vcDNfY21wKTogTGlrZXdpc2UuCi0JKiBzcmMvY29uZmxpY3RzLmMgKHJlc29sdmVfc3JfY29uZmxpY3QpOiBMaWtld2lzZS4KLQkqIHNyYy92Y2cuYyAoZ2V0X2NvbG9yX3N0ciwgZ2V0X3RleHRtb2RlX3N0ciwgZ2V0X3NoYXBlX3N0cik6Ci0JKGdldF9kZWNpc2lvbl9zdHIsIGdldF9vcmllbnRhdGlvbl9zdHIsIGdldF9ub2RlX2FsaWdubWVudF9zdHIpOgotCShnZXRfYXJyb3dfbW9kZV9zdHIsIGdldF9jcm9zc2luZ190eXBlX3N0ciwgZ2V0X3ZpZXdfc3RyKToKLQkoZ2V0X2xpbmVzdHlsZV9zdHIsIGdldF9hcnJvd3N0eWxlX3N0cik6IExpa2V3aXNlLgotCSogc3JjL2NvbmZsaWN0cy5jIChyZXNvbHZlX3NyX2NvbmZsaWN0KToKLQlVc2UgYSBkZWZhdWx0IGNhc2UgcmF0aGVyIHRoYW4gb25lIGZvciB0aGUgb25lIHJlbWFpbmluZyBlbnVtCi0JdmFsdWUsIHRvIGNhdGNoIGludmFsaWQgZW51bSB2YWx1ZXMgYXMgd2VsbC4KLQkqIHNyYy9sYWxyLmMgKHNldF9nb3RvX21hcCwgbWFwX2dvdG8pOgotCVByZWZlciAiYXNzZXJ0IChGT08pOyIgdG8gImlmICghRk9PKSBhYm9ydCAoKTsiLgotCSogc3JjL251bGxhYmxlLmMgKG51bGxhYmxlX2NvbXB1dGUsIHRva2VuX2RlZmluaXRpb25zX291dHB1dCk6Ci0JTGlrZXdpc2UuCi0JKiBzcmMvcmVhZGVyLmMgKHBhY2tncmFtLCByZWFkZXIpOiBMaWtld2lzZS4KLQkqIHNyYy9zdGF0ZS5jICh0cmFuc2l0aW9uc190bywgc3RhdGVfbmV3LCBzdGF0ZV9yZWR1Y3Rpb25fZmluZCk6Ci0JTGlrZXdpc2UuCi0JKiBzcmMvc3ltdGFiLmMgKHN5bWJvbF91c2VyX3Rva2VuX251bWJlcl9zZXQsIHN5bWJvbF9tYWtlX2FsaWFzKToKLQkoc3ltYm9sX3BhY2spOiBMaWtld2lzZS4KLQkqIHNyYy90YWJsZXMuYyAoY29uZmxpY3Rfcm93LCBwYWNrX3ZlY3Rvcik6IExpa2V3aXNlLgotCSogc3JjL3NjYW4tc2tlbC5sIChRUFVUUyk6IFJlbW92ZSB1bm5lY2Vzc2FyeSBwYXJlbnMuCi0JKEJBU0VfUVBVVFMsICJAb3V0cHV0ICIuKlxuKTogUmVtb3ZlIHVubmVjZXNzYXJ5IGFzc2VydHMuCi0JKiBzcmMvc3lzdGVtLmg6IERvbid0IGluY2x1ZGUgPGFzc2VydC5oPi4KLQkoYXNzZXJ0KTogTmV3IG1hY3JvLgotCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoUHJvbG9ndWUsIFJ1bGVzLCBBY3Rpb25zLCBVbmlvbiBEZWNsLCBBY3Rpb24gRGVjbCk6Ci0JKERlc3RydWN0b3IgRGVjbCwgUGFyc2VyIEZ1bmN0aW9uLCBQdXJlIENhbGxpbmcpOgotCURlc2NyaWJlIHJ1bGVzIGZvciBicmFjZXMgaW5zaWRlIEMgY29kZSBtb3JlIGNhcmVmdWxseS4KLQotMjAwNi0wMS0xOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQlGaXggc29tZSBwb3J0aW5nIGdsaXRjaGVzIGZvdW5kIGJ5IE5lbHNvbiBILiBGLiBCZWViZS4KLQkqIGxpYi9hYml0c2V0LmMgKGFiaXRzZXRfcmVzaXplKTogUmV3cml0ZSB0byBhdm9pZCB3YXJuaW5ncyBmcm9tCi0JY29tcGlsZXJzIHRoYXQgZG9uJ3QgdW5kZXJzdGFuZCB0aGF0IGFib3J0ICgpIGRvZXMgbm90IHJldHVybi4KLQkqIHNyYy9zdGF0ZS5jICh0cmFuc2l0aW9uc190byk6IExpa2V3aXNlLgotCSogbTQvY3h4Lm00IChCSVNPTl9URVNUX0ZPUl9XT1JLSU5HX0NYWF9DT01QSUxFUik6IENoZWNrCi0JdGhhdCAnI2luY2x1ZGUgPGNzdGRsaWI+JyB3b3Jrcy4KLQkqIHNyYy9zeXN0ZW0uaCAoSU5UOF9NSU4sIElOVDE2X01JTiwgSU5UMzJfTUlOLCBJTlQ4X01BWCk6Ci0JKElOVDE2X01BWCwgVUlOVDhfTUFYLCBJTlQzMl9NQVgsIFVJTlQxNl9NQVgsIFVJTlQzMl9NQVgpOgotCSN1bmRlZiBpZiAhIGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyB8fCBfX1NURENfVkVSU0lPTl9fIDwgMTk5OTAxLAotCWZvciB0aGUgYmVuZWZpdCBvZiBzb21lIHByZS1DOTkgY29tcGlsZXJzLgotCi0JKiBib290c3RyYXA6IFVuZG8gY2hhbmdlcyB0byBnbnVsaWIgZmlsZXMgdGhhdCBhdXRvcmVjb25mIG1hZGUuCi0KLQlNaW5vciBmaXh1cHMgdG8gZ2V0ICdtYWtlIG1haW50YWluZXItY2hlY2snIHRvIHdvcmsuCi0JKiBjb25maWd1cmUuYWM6IERvbid0IHVzZSAtV25lc3RlZC1leHRlcm5zLCBhcyBpdCdzIGluY29tcGF0aWJsZQotCXdpdGggdGhlIG5ldyB2ZXJpZnkuaCBpbXBsZW1lbnRhdGlvbi4KLQkqIGRhdGEvYy5tNCAoYjRfeXlfc3ltYm9sX3ByaW50X2dlbmVyYXRlKTogWVlVU0UgKHl5b3V0cHV0KS4KLQkqIGRhdGEvZ2xyLmMgKFlZVVNFKTogRGVwZW5kIG9uIF9fR05VQ19fIGFzIHdlbGwuCi0JKiBkYXRhL3lhY2MuYyAoWVlVU0UpOiBMaWtld2lzZS4KLQkqIGRhdGEvbGFscjEuY2MgKHl5c3ludGF4X2Vycm9yXyk6IFlZVVNFICh5eXN0YXRlKS4KLQkqIGxpYi9zdWJwaXBlLmMgKGVuZF9vZl9vdXRwdXRfc3VicGlwZSk6IFRoZSBhcmdzIGFyZSB1bnVzZWQuCi0JKiBzcmMvcGFyc2UtZ3JhbS55IChkZWNsYXJhdGlvbik6IERvbid0IHBhc3MgYSBzdHJpbmcgY29uc3RhbnQKLQl0byBhIGZ1bmN0aW9uIHRoYXQgZXhwZWN0cyBjaGFyICosIHNpbmNlIEdDQyBtaWdodCBjb21wbGFpbgotCWFib3V0IHRoZSBjb25zdGFudCB2YWx1ZS4KLQkqIHNyYy9yZWFkZXIuYyAoc3ltYm9sX3R5cGVkX3ApOiBBZGQgcGFyZW5zIHRvIHBhY2lmeSBHQ0MuCi0JKiB0ZXN0cy9jeHgtdHlwZS5hdCAoX0FUX1RFU1RfR0xSX0NYWFRZUEVTKTogI3VuZGVmIHl5bGxvYyBhbmQgeXlsdmFsCi0JYmVmb3JlICNkZWZpbmluZyB0aGVtLgotCSogdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQKLQkoSW5jb3JyZWN0bHkgaW5pdGlhbGl6ZWQgbG9jYXRpb24gZm9yIGVtcHR5IHJpZ2h0LWhhbmQgc2lkZSBpbiBHTFIpOgotCUluIHl5ZXJyb3IsIHVzZSB0aGUgbXNnIGFyZy4KLQkoQ29ycnVwdGVkIHNlbWFudGljIG9wdGlvbnMgaWYgdXNlciBhY3Rpb24gY3V0cyBwYXJzZSk6Ci0JKEluY29ycmVjdCBsb29rYWhlYWQgZHVyaW5nIGRldGVybWluaXN0aWMgR0xSKToKLQkoSW5jb3JyZWN0IGxvb2thaGVhZCBkdXJpbmcgbm9uZGV0ZXJtaW5pc3RpYyBHTFIpOgotCURvbid0IG5hbWUgYSBsb2NhbCB2YXIgJ2luZGV4JzsgaXQgc2hhZG93cyBzdHJpbmcuaCdzICdpbmRleCcuCi0KLTIwMDYtMDEtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiB0ZXN0cy9jYWxjLmF0IChfQVRfREFUQV9DQUxDX1kpOiBJbml0aWFsaXplIHRoZSB3aG9sZSBpbml0aWFsCi0JbG9jYXRpb24sIG5vdCBqdXN0IHBhcnRzIG9mIGl0LgotCi0yMDA2LTAxLTE4ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogTkVXUzogRG9jdW1lbnQgdGhlIGZhY3QgdGhhdCBtdWx0aXBsZSAldW5pb25zIGFyZSBub3cgYWxsb3dlZC4KLQkqIGRvYy9iaXNvbi50ZXhpbmZvIChVbmlvbiBEZWNsKTogTGlrZXdpc2UuCi0JKiBUT0RPOiBUaGlzIGZlYXR1cmUgaXMgbm93IGltcGxlbWVudGVkLCBzbyByZW1vdmUgaXQgZnJvbQotCXRoZSB3aXNobGlzdC4KLQotCSogTWFrZWZpbGUubWFpbnQ6IE1lcmdlIHdpdGggY29yZXV0aWxzIE1ha2VmaWxlLm1haW50LgotCShDVlNfTElTVCk6IFVzZSBidWlsZC1hdXggdmVyc2lvbiBpZiBhdmFpbGFibGUuCi0JKFZFUlNJT05fUkVHRVhQKTogTmV3IG1hY3JvLgotCShzeW50YXgtY2hlY2stcnVsZXMpOiBBZGQgc2Nfbm9faWZfaGF2ZV9jb25maWdfaCwKLQlzY19wcm9oaWJpdF9hc3NlcnRfd2l0aG91dF91c2UsIHNjX3JlcXVpcmVfY29uZmlnX2gsCi0Jc2NfdXNlbGVzc19jcHBfcGFyZW5zLgotCShzY19vYnNvbGV0ZV9zeW1ib2xzKTogQ2hlY2sgZm9yIE9fTkRFTEFZLgotCShzY19kZF9tYXhfc3ltX2xlbmd0aCk6IFRyYWNrIGNvcmV1dGlscy4KLQkoc2NfdW5tYXJrZWRfZGlhZ25vc3RpY3MpOiBMb29rIGluIGFsbCBmaWxlcywgbm90IGp1c3QgKi5jLgotCShzY191c2VsZXNzX2NwcF9wYXJlbnMpOiBOZXcgcnVsZS4KLQkobmV3cy1kYXRlLWNoZWNrKTogTG9vayBmb3IgdmVyc2lvbiBvciB0b2RheSdzIGRhdGUuCi0JKGNoYW5nZWxvZy1jaGVjayk6IERvbid0IHJlcXVpcmUgdmVyc2lvbiBudW1iZXIgbmVhciBoZWFkLgotCShjb3B5cmlnaHQtY2hlY2spOiBVc2UgY3VycmVudCB5ZWFyIGluc3RlYWQgb2YgaGFyZHdpcmluZyAyMDA1LgotCShteS1kaXN0Y2hlY2spOiBEZXBlbmQgb24gJChyZWxlYXNlX2FyY2hpdmVfZGlyKS8kKHByZXYtdGd6KS4KLQkoYW5ub3VuY2VtZW50KTogQWRkIC0tZ3BnLWtleS1JRC4KLQotCSogZGpncHAvY29uZmlnLnNlZDogQWRkIGNvcHlyaWdodCBub3RpY2UsIGFuZCByZXBsYWNlICJmaWxlc3lzdGVtIgotCXdpdGggImZpbGUgc3lzdGVtIi4KLQotCUF2b2lkIHVuZGVmaW5lZCBiZWhhdmlvciB0aGF0IGFkZHJlc3NlZCBqdXN0IGJlZm9yZSB0aGUgc3RhcnQgb2YgYW4KLQlhcnJheS4gIFByb2JsZW0gcmVwb3J0ZWQgYnkgdHdsZXZvLgotCSogc3JjL3JlYWRlci5jIChwYWNrZ3JhbSk6IFByZXBlbmQgYSBuZXcgc2VudGluZWwgYmVmb3JlIHJpdGVtLgotCSogc3JjL2xhbHIuYyAoYnVpbGRfcmVsYXRpb25zKTogUmVseSBvbiBuZXcgc2VudGluZWwuCi0JKiBzcmMvZ3JhbS5jIChncmFtX2ZyZWUpOiBBZGp1c3QgdG8gbmV3IHNlbnRpbmVsLgotCi0yMDA2LTAxLTEyICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KLQotCSogZGF0YS9nbHIuYyAoeXlHTFJTdGF0ZVNldCk6IFJlbmFtZSB5eWxvb2thaGVhZFN0YXR1c2VzIHRvCi0JeXlsb29rYWhlYWROZWVkcy4gIEFsbCB1c2VzIHVwZGF0ZWQuCi0JKHl5c3BsaXRTdGFjayk6IFJlbmFtZSBsb2NhbCB5eW5ld0xvb2thaGVhZFN0YXR1c2VzIHRvCi0JeXluZXdMb29rYWhlYWROZWVkcy4KLQkqIGRhdGEvZ2xyLXJlZ3Jlc3Npb24uYXQgKEluY29ycmVjdCBsb29rYWhlYWQgZHVyaW5nIG5vbmRldGVybWluaXN0aWMKLQlHTFIpOiBJbiBjb21tZW50cywgY2hhbmdlIGBsb29rYWhlYWQgc3RhdHVzJyB0byBgbG9va2FoZWFkIG5lZWQnLgotCi0yMDA2LTAxLTExICBQYXVsIEhpbGZpbmdlciAgPGhpbGZpbmdyQHR1bGx5LkNTLkJlcmtlbGV5LkVEVT4KLQotCSogZGF0YS9nbHIuYyAoeXlzcGxpdFN0YWNrKTogQSBsaXR0bGUgc3R5bGlzdGljIHJld3JpdGUuCi0KLTIwMDYtMDEtMTEgIFBhdWwgSGlsZmluZ2VyICA8aGlsZmluZ3JAdHVsbHkuQ1MuQmVya2VsZXkuRURVPgotCi0JKiBkYXRhL2dsci5jICh5eWFkZERlZmVycmVkQWN0aW9uKTogRmxlc2ggb3V0IHRoZSBjb21tZW50LgotCi0yMDA2LTAxLTExICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KLQotCSogZG9jL2Jpc29uLnRleGluZm86IEZpeCBzb21lIHR5cG9zLgotCShHTFIgU2VtYW50aWMgQWN0aW9ucyk6IE5ldyBzdWJzZWN0aW9uIGRpc2N1c3Npbmcgc3BlY2lhbAotCWNvbnNpZGVyYXRpb25zIGJlY2F1c2UgR0xSIHNlbWFudGljIGFjdGlvbnMgbWlnaHQgYmUgZGVmZXJyZWQuCi0JKEFjdGlvbnMpOiBNZW50aW9uIGxvb2stYWhlYWQgdXNhZ2Ugb2YgeXlsdmFsLgotCShBY3Rpb25zIGFuZCBMb2NhdGlvbnMpOiBNZW50aW9uIGxvb2stYWhlYWQgdXNhZ2Ugb2YgeXlsbG9jLgotCShTcGVjaWFsIEZlYXR1cmVzIGZvciBVc2UgaW4gQWN0aW9ucyk6IEFkZCBZWUVPRiBlbnRyeSBhbmQgbWVudGlvbiBpdAotCWluIHRoZSB5eWNoYXIgZW50cnkuCi0JSW4gdGhlIHl5Y2hhciBlbnRyeSwgcmVtb3ZlIG1lbnRpb24gb2YgdGhlIGxvY2FsIHl5Y2hhciBjYXNlIChwdXJlCi0JcGFyc2VyKSBzaW5jZSB0aGlzIGlzIGlycmVsZXZhbnQgaW5mb3JtYXRpb24gd2hlbiB3cml0aW5nIHNlbWFudGljCi0JYWN0aW9ucyBhbmQgc2luY2UgaXQncyBhbHJlYWR5IGRpc2N1c3NlZCBpbiBgQmlzb24gU3ltYm9scycgd2hlcmUKLQl5eWNoYXIgaXMgb3RoZXJ3aXNlIGRlc2NyaWJlZCBhcyBhbiBleHRlcm5hbCB2YXJpYWJsZS4KLQlJbiB0aGUgeXljaGFyIGVudHJ5LCBkb24ndCBjYWxsIGl0IHRoZSBgY3VycmVudCcgbG9vay1haGVhZCBzaW5jZSBpdAotCWlzbid0IHdoZW4gc2VtYW50aWMgYWN0aW9ucyBhcmUgZGVmZXJyZWQuCi0JSW4gdGhlIHl5Y2hhciBhbmQgeXljbGVhcmluIGVudHJpZXMsIGFkZCBub3RlIGFib3V0IGRlZmVycmVkIHNlbWFudGljCi0JYWN0aW9ucy4KLQlBZGQgeXlsbG9jIGFuZCB5eWx2YWwgZW50cmllcyBkaXNjdXNzaW5nIGxvb2stYWhlYWQgdXNhZ2UuCi0JKExvb2stQWhlYWQgVG9rZW5zKTogV2hlbiBkaXNjdXNzaW5nIHl5Y2hhciwgZG9uJ3QgY2FsbCBpdCB0aGUKLQlgY3VycmVudCcgbG9vay1haGVhZCwgYW5kIGRvIG1lbnRpb24geXlsdmFsIGFuZCB5eWxsb2MuCi0JKEVycm9yIFJlY292ZXJ5KTogQ3Jvc3MtcmVmZXJlbmNlIGBBY3Rpb24gRmVhdHVyZXMnIHdoZW4gbWVudGlvbmluZwotCXl5Y2xlYXJpbi4KLQkoQmlzb24gU3ltYm9scyk6IEluIHRoZSB5eWNoYXIgZW50cnksIGRvbid0IGNhbGwgaXQgdGhlIGBjdXJyZW50JwotCWxvb2stYWhlYWQuCi0JSW4gdGhlIHl5bGxvYyBhbmQgeXlsdmFsIGVudHJpZXMsIG1lbnRpb24gbG9vay1haGVhZCB1c2FnZS4KLQotMjAwNi0wMS0wOCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+Ci0KLQkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0OiBVcGRhdGUgY29weXJpZ2h0IHllYXIgdG8gMjAwNi4KLQotMjAwNi0wMS0wNiAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+Ci0KLQkqIGRhdGEvZ2xyLmMgKHl5R0xSU3RhdGVTZXQpOiBBZGQgeXlib29sKiB5eWxvb2thaGVhZFN0YXR1c2VzIG1lbWJlciB0bwotCXVzZSBkdXJpbmcgbm9uZGV0ZXJtaW5pc3RpYyBvcGVyYXRpb24gdG8gdHJhY2sgd2hpY2ggc3RhY2tzIGhhdmUKLQlhY3R1YWxseSBuZWVkZWQgdGhlIGN1cnJlbnQgbG9va2FoZWFkLgotCSh5eWluaXRTdGF0ZVNldCwgeXlmcmVlU3RhdGVTZXQsIHl5cmVtb3ZlRGVsZXRlcywgeXlzcGxpdFN0YWNrKToKLQlBbGxvY2F0ZSwgZGVhbGxvY2F0ZSwgcmVzaXplLCBhbmQgb3RoZXJ3aXNlIHNodWZmbGUgc3BhY2UgZm9yCi0JeXlsb29rYWhlYWRTdGF0dXNlcyBpbiBwYXJhbGxlbCB3aXRoIHl5c3RhdGVzIG1lbWJlciBvZiB5eUdMUlN0YXRlU2V0LgotCSh5eXNwbGl0U3RhY2ssIHl5cHJvY2Vzc09uZVN0YWNrLCB5eXBhcnNlKTogU2V0IGxvb2thaGVhZCBzdGF0dXMKLQlhcHByb3ByaWF0ZWx5IGR1cmluZyBub25kZXRlcm1pbmlzdGljIG9wZXJhdGlvbi4KLQkoeXlTZW1hbnRpY09wdGlvbik6IEFkZCBpbnQgeXlyYXdjaGFyLCBZWVNUWVBFIHl5dmFsLCBhbmQgWVlMVFlQRSB5eWxvYwotCW1lbWJlcnMgdG8gc3RvcmUgdGhlIGN1cnJlbnQgbG9va2FoZWFkIHRvIGJlIHVzZWQgYnkgdGhlIGRlZmVycmVkCi0JdXNlciBhY3Rpb24uCi0JKHl5YWRkRGVmZXJyZWRBY3Rpb24pOiBBZGQgc2l6ZV90IHl5ayBwYXJhbWV0ZXIgc3BlY2lmeWluZyB0aGUgc3RhY2sKLQlmcm9tIHdoaWNoIHRoZSBSSFMgaXMgdGFrZW4uICBTZXQgdGhlIGxvb2thaGVhZCBtZW1iZXJzIG9mIHRoZSBuZXcKLQl5eVNlbWFudGljT3B0aW9uIGFjY29yZGluZyB0byB0aGUgbG9va2FoZWFkIHN0YXR1cyBmb3Igc3RhY2sgeXlrLgotCSh5eWdsclNoaWZ0RGVmZXIsIHl5Z2xyUmVkdWNlKTogUGFzcyB5eWsgcGFyYW1ldGVyIG9uIHRvCi0JeXlhZGREZWZlcnJlZEFjdGlvbi4KLQkoeXlyZXNvbHZlQWN0aW9uKTogU2V0IHl5Y2hhciwgeXlsdmFsLCBhbmQgeXlsbG9jIHRvIHRoZSBsb29rYWhlYWQKLQltZW1iZXJzIG9mIHl5U2VtYW50aWNPcHRpb24gYmVmb3JlIGludm9raW5nIHl5dXNlckFjdGlvbiwgYW5kIHRoZW4gc2V0Ci0JdGhlbSBiYWNrIHRvIHRoZWlyIGN1cnJlbnQgdmFsdWVzIGFmdGVyd2FyZC4KLQkoeXlwYXJzZSk6IFNldCB5eWNoYXIgPSBZWUVNUFRZIHdoZXJlIHl5dG9rZW4gPSBZWUVNUFRZLgotCSh5eXJlcG9ydEFtYmlndWl0eSk6IEFkZCAvKkFSR1NVU0VEKi8gdG8gcGFjaWZ5IGxpbnQuCi0JKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdDogUmVtb3ZlIGAuJyBmcm9tIHRoZSBlbmRzIG9mIHJlY2VudCB0ZXN0IGNhc2UKLQl0aXRsZXMgZm9yIGNvbnNpc3RlbmN5LgotCShMZWFrZWQgbWVyZ2VkIHNlbWFudGljIHZhbHVlIGlmIHVzZXIgYWN0aW9uIGN1dHMgcGFyc2UpOiBJbiBvcmRlciB0bwotCXN1cHByZXNzIGxpbnQgd2FybmluZ3MsIHVzZSBhcmd1bWVudHMgaW4gbWVyZ2UgZnVuY3Rpb24sIGFuZCBhc3NpZ24KLQljaGFyIHZhbHVlIDwgMTI4IGluIG1haW4uCi0JKEluY29ycmVjdCBsb29rYWhlYWQgZHVyaW5nIGRldGVybWluaXN0aWMgR0xSKTogTmV3IHRlc3QgY2FzZS4KLQkoSW5jb3JyZWN0IGxvb2thaGVhZCBkdXJpbmcgbm9uZGV0ZXJtaW5pc3RpYyBHTFIpOiBOZXcgdGVzdCBjYXNlLgotCi0yMDA2LTAxLTA2ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KLQotCSogZGF0YS9jLm00IChiNF95eV9zeW1ib2xfcHJpbnRfZ2VuZXJhdGUpOiBJbiB5eV9zeW1ib2xfcHJpbnQsIGFjY2VwdAotCSF5eXZhbHVlcCBhcyBzaWduYWwgdGhhdCBubyBzZW1hbnRpYyB2YWx1ZSBpcyBhdmFpbGFibGUgdG8gcHJpbnQuCi0JKiBkYXRhL2dsci5jICh5eWRlc3Ryb3lHTFJTdGF0ZSk6IElmIHN0YXRlIGlzIG5vdCByZXNvbHZlZCwgZG9uJ3QgdHJ5Ci0JdG8gcHJpbnQgYSBzZW1hbnRpYyB2YWx1ZS4KLQotMjAwNi0wMS0wNiAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+Ci0KLQkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0OiBGb3IgY29uc2lzdGVuY3kgd2l0aCBteSBuZXdlciB0ZXN0IGNhc2VzLAotCWRvbid0IHRoYW5rIG15c2VsZi4KLQotMjAwNi0wMS0wNSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+Ci0KLQkqIGRhdGEvZ2xyLmMgKHl5cmVzb2x2ZVZhbHVlKTogV2hlbiBtZXJnaW5nIHNlbWFudGljIG9wdGlvbnMsIGlmIGF0Ci0JbGVhc3Qgb25lIHVzZXIgYWN0aW9uIHN1Y2NlZWRzIGJ1dCBhIGxhdGVyIG9uZSBjdXRzIHRoZSBwYXJzZSwgdGhlbgotCWRlc3Ryb3kgdGhlIHNlbWFudGljIHZhbHVlIGJlZm9yZSByZXR1cm5pbmcgcmF0aGVyIHRoYW4gbGVha2luZyBpdC4KLQkoeXlyZXNvbHZlU3RhdGVzKTogSWYgYSB1c2VyIGFjdGlvbiBjdXRzIHRoZSBwYXJzZSBhbmQgdGh1cwotCXl5cmVzb2x2ZVZhbHVlIGZhaWxzLCBpZ25vcmUgdGhlICh1bnNldCkgc2VtYW50aWMgdmFsdWUgcmF0aGVyIHRoYW4KLQljb3JydXB0aW5nIHRoZSB5eUdMUlN0YXRlLCBhbmQgZW1wdHkgdGhlIHNlbWFudGljIG9wdGlvbnMgbGlzdCBzaW5jZQotCXRoZSB1c2VyIGFjdGlvbnMgc2hvdWxkIGhhdmUgY2FsbGVkIGFsbCBuZWNlc3NhcnkgZGVzdHJ1Y3RvcnMuCi0JU2ltcGxpZnkgY29kZSB3aXRoIFlZQ0hLLgotCSogdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQgKENvcnJ1cHRlZCBzZW1hbnRpYyBvcHRpb25zIGlmIHVzZXIgYWN0aW9uCi0JY3V0cyBwYXJzZSk6IE5ldyB0ZXN0IGNhc2UuCi0JKFVuZGVzaXJhYmxlIGRlc3RydWN0b3JzIGlmIHVzZXIgYWN0aW9uIGN1dHMgcGFyc2UpOiBOZXcgdGVzdCBjYXNlLgotCUJlZm9yZSBhcHBseWluZyBhbnkgb2YgdGhpcyBwYXRjaCwgdGhpcyB0ZXN0IGNhc2UgbmV2ZXIgYWN0dWFsbHkgZmFpbGVkCi0JZm9yIG1lLi4uIGJ1dCBvbmx5IGJlY2F1c2UgdGhlIGNvcnJ1cHRlZCBzZW1hbnRpYyBvcHRpb25zIHVzdWFsbHkKLQltYXNrZWQgdGhpcyBidWcuCi0JKExlYWtlZCBtZXJnZWQgc2VtYW50aWMgdmFsdWUgaWYgdXNlciBhY3Rpb24gY3V0cyBwYXJzZSk6IE5ldyB0ZXN0Ci0JY2FzZS4KLQotMjAwNi0wMS0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9yZWFkZXIuYywgc3JjL3N5bWxpc3QuaCwgc3JjL3N5bWxpc3QuYzogcy9taWRfcnVsZS9taWRydWxlLy4KLQotMjAwNi0wMS0wNCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIGRhdGEvYy5tNCAoYjRfY19tb2Rlcm4pOiBOZXcgbWFjcm8sIHdpdGggYSBuZXcgcHJvdmlzaW9uIGZvcgotCV9NU0NfVkVSLiAgUHJvYmxlbSByZXBvcnRlZCBieSBDZW56YXRvIE1hcmNvLgotCShiNF9jX2Z1bmN0aW9uX2RlZik6IFVzZSBpdC4KLQkqIGRhdGEveWFjYy5jIChZWU1PREVSTl9DKTogUmVtb3ZlLiAgQWxsIHVzZXMgcmVwbGFjZWQgYnkKLQliNF9jX21vZGVybi4KLQkoeXlzdHJsZW4sIHl5c3RwY3B5LCB5eXBhcnNlKTogVXNlIGI0X2NfZnVuY3Rpb24uLi4gbWFjcm9zIHJhdGhlcgotCXRoYW4gcm9sbGluZyBvdXIgb3duLgotCi0yMDA2LTAxLTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCUFsc28gd2FybiBhYm91dCBub24tdXNlZCBtaWQtcnVsZSB2YWx1ZXMuCi0JKiBzcmMvc3ltbGlzdC5oLCBzcmMvc3ltbGlzdC5jIChzeW1ib2xfbGlzdCk6IEFkZCBhIG1pZF9ydWxlCi0JbWVtYmVyLgotCShzeW1ib2xfbGlzdF9uZXcpOiBBZGp1c3QuCi0JKiBzcmMvcmVhZGVyLmMgKHN5bWJvbF90eXBlZF9wKTogTmV3LgotCShncmFtbWFyX3J1bGVfY2hlY2spOiBVc2UgaXQuCi0JKGdyYW1tYXJfbWlkcnVsZV9hY3Rpb24pOiBCaW5kIGEgbWlkLXJ1bGUgTEhTIHRvIGl0cyBydWxlLgotCUNoZWNrIGl0cyBydWxlLgotCSogdGVzdHMvaW5wdXQuYXQgKEFUX0NIRUNLX1VOVVNFRF9WQUxVRVMpOiBOZXcuCi0JVXNlIGl0LgotCSogdGVzdHMvYWN0aW9ucy5hdCAoRXhvdGljIERvbGxhcnMpOiBBZGp1c3QuCi0KLTIwMDYtMDEtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvcmVhZGVyLmMgKGdyYW1tYXJfbWlkcnVsZV9hY3Rpb24pOiBJZiAkJCBpcyBzZXQgaW4gYQotCW1pZC1ydWxlLCBtb3ZlIHRoZSBgdXNlZCcgYml0IHRvIGl0cyBsaHMuCi0JKiB0ZXN0cy9pbnB1dC5hdCAoVW51c2VkIHZhbHVlcyk6IE5ldy4KLQkqIHRlc3RzL2FjdGlvbnMuYXQgKEV4b3RpYyBEb2xsYXJzKTogQWRqdXN0OiBleHAgaXMgbm90IHR5cGVkLgotCi0yMDA2LTAxLTAzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogZG9jL2Jpc29uLnRleGluZm8gKEJpc29uIE9wdGlvbnMpOiBTYXkgbW9yZSBhY2N1cmF0ZWx5IHdoYXQKLQktLXlhY2MgZG9lcy4KLQkqIHNyYy9wYXJzZS1ncmFtLnkgKHJ1bGVzX29yX2dyYW1tYXJfZGVjbGFyYXRpb24pOiBEb24ndCBjb21wbGFpbgotCWFib3V0IGRlY2xhcmF0aW9ucyBpbiB0aGUgZ3JhbW1hciB3aGVuIGluIFlhY2MgbW9kZSwgYXMgUE9TSVggZG9lcwotCW5vdCByZXF1aXJlIGEgZGlhZ25vc3RpYyB3aGVuIHRoZSBncmFtbWFyIHVzZXMgZXh0ZW5zaW9ucy4KLQotCSogc3JjL3JlZHVjZS5jIChyZWR1Y2VfZ3JhbW1hcik6IFJlbW92ZSB1bm5lY2Vzc2FyeSBjYXN0IHRvIGJvb2wuCi0KLQlXYXJuIGFib3V0IGR1YmlvdXMgY29uc3RydWN0aW9ucyBsaWtlICIldG9rZW4gVCBUIi4KLQlSZXBvcnRlZCBieSB0d2xldm8uCi0JKiBzcmMvc3ltdGFiLmggKHN0cnVjdCBzeW1ib2wuZGVjbGFyZWQpOiBOZXcgbWVtYmVyLgotCSogc3JjL3N5bXRhYi5jIChzeW1ib2xfbmV3KTogSW5pdGlhbGl6ZSBpdCB0byBmYWxzZS4KLQkoc3ltYm9sX2NsYXNzX3NldCk6IE5ldyBhcmcgREVDTEFSSU5HLCBzcGVjaWZ5aW5nIHdoZXRoZXIKLQl0aGlzIGlzIGEgZGVjbGFyYXRpb24gdGhhdCB3ZSB3YW50IHRvIHdhcm4gYWJvdXQsIGlmIHRoZXJlCi0JaXMgbW9yZSB0aGFuIG9uZSBvZiB0aGVtLiAgQWxsIHVzZXMgY2hhbmdlZC4KLQotCSogZGF0YS9nbHIuYywgZGF0YS9nbHIuY2MsIGRhdGEvbGFscjEuY2MsIGRhdGEveWFjYy5jOgotCUFsbG93IG11bHRpcGxlICV1bmlvbiBkaXJlY3RpdmVzLCB3aG9zZSBjb250ZW50cyBjb25jYXRlbmF0ZS4KLQkqIHNyYy9wYXJzZS1ncmFtLnkgKGdyYW1tYXJfZGVjbGFyYXRpb24pOiBMaWtld2lzZS4KLQlVc2UgbXVzY2xlX2NvZGVfZ3Jvdywgc28gdGhhdCB3ZSBkb24ndCBuZWVkIHN0eXBlX2xpbmUgYW55IG1vcmUuCi0JQWxsIHVzZXMgY2hhbmdlZC4KLQotCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlX2dyb3cpOiBGaXggY29tbWVudC4KLQotCSogQ2hhbmdlTG9nLCBkYXRhL2MubTQsIGRhdGEvZ2xyLmMsIGRhdGEvZ2xyLmNjLCBkYXRhL2xvY2F0aW9uLmNjOgotCSogZGF0YS95YWNjLmMsIHNyYy9nZXRhcmdzLmMsIHNyYy9vdXRwdXQuYywgdGVzdHMvY3h4LXR5cGUuYXQ6Ci0JVXBkYXRlIGNvcHlyaWdodCB5ZWFyIHRvIDIwMDYuCi0KLTIwMDYtMDEtMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JSGF2ZSBnbHIuY2MgcGFzcyAoc29tZSBvZikgdGhlIGNhbGMuYXQgdGVzdHMuCi0JKiBkYXRhL2dsci5jYyAoYjRfcGFyc2VfcGFyYW1fb3JpZyk6IE5ldy4KLQkoYjRfcGFyc2VfcGFyYW0pOiBJbXByb3ZlIGl0cyBkZWZpbml0aW9uLCBhbmQgYm91bmQgaXQgbW9yZQotCWNsZWFybHkgaW4gdGhlIHNrZWxldG9uLgotCShiNF9lcGlsb2d1ZSk6IEFwcGVuZCwgaW5zdGVhZCBvZiBwcmVwZW5kaW5nLCBpbiBvcmRlciB0byBrZWVwCi0JI2xpbmUgY29uc2lzdGVuY3kuCi0JU2ltcGxpZnkgdGhlIGdlbmVyYXRpb24gb2YgYXV4aWxpYXJ5IGZ1bmN0aW9uczogbG9jYXRpb25zIGFuZAotCXB1cml0eSBhcmUgbWFuZGF0ZWQuCi0JKGI0X2dsb2JhbF90b2tlbnNfYW5kX3l5c3R5cGUpOiBIb25vciBpdC4KLQkqIGRhdGEvbG9jYXRpb24uY2MgKGMrKy5tNCk6IERvbid0IGluY2x1ZGUgaXQuCi0JKiB0ZXN0cy9sb2NhbC5hdCAoX0FUX0JJU09OX09QVElPTl9QVVNIREVGUyk6IERlZmluZSBBVF9HTFJfQ0NfSUYKLQlhbmQgQVRfU0tFTF9DQ19JRi4KLQkqIHRlc3RzL2NhbGMuYXQgKEFUX0NIRUNLX0NBTEMpOiBSZWx5IG9uIEFUX1NLRUxfQ0NfSUYgaW5zdGVhZCBvZgotCUFUX0xBTFIxX0NDX0lGLgotCUJlIHN1cmUgdG8gaW5pdGlhbGl6ZSB0aGUgZmlyc3QgcG9zaXRpb24ncyBmaWxlbmFtZS4KLQkoQVRfQ0hFQ0tfQ0FMQ19MQUxSMV9DQyk6IEFkZCAlbG9jYXRpb24gYW5kICVkZWZpbmVzLCB0aGV5IGFyZQotCW1hbmRhdGVkIGFueXdheS4KLQkoQVRfQ0hFQ0tfQ0FMQ19HTFJfQ0MpOiBOZXcuCi0JVXNlIGl0IHRvIGV4ZXJjaXNlIGdsci5jYyBhcyBhIGxhbHIxLmNjIGRyb3AtaW4gcmVwbGFjZW1lbnQuCi0KLTIwMDYtMDEtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9za2VsZXRvbik6IERvbid0IGhhcmQgd2lyZSB0aGUgaW5jbHVzaW9uIG9mCi0JYy5tNC4KLQkqIGRhdGEvYysrLm00LCBkYXRhL2dsci5jLCBkYXRhL3lhY2MuYzogSW5jbHVkZSBjLm00LgotCSogZGF0YS9nbHIuY2M6IERvIG5vdCBpbmNsdWRlIHN0YWNrLmhoLgotCi0yMDA2LTAxLTAyICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KLQotCSogZGF0YS9nbHIuYzogUmVmb3JtYXQgd2hpdGVzcGFjZSB3aXRoIHRhYnMuCi0JKGI0X2xwdXJlX2Zvcm1hbHMpOiBSZW1vdmUgdGhpcyB1bnVzZWQgbTQgbWFjcm8uCi0JKiB0ZXN0cy9jeHgtdHlwZS5hdDogUmVmb3JtYXQgd2hpdGVzcGFjZSB3aXRoIHRhYnMuCi0JKF9BVF9URVNUX0dMUl9DWFhUWVBFUyk6IEluIHVuaW9uIE5vZGUsIHJlbmFtZSBub2RlX2luZm8gdG8gbm9kZUluZm8KLQlzaW5jZSBpdCdzIGEgbWVtYmVyLiAgUmVuYW1lIHR5cGUgdG8gaXNOdGVybSBmb3IgY2xhcml0eS4KLQotMjAwNS0xMi0yOSAgQWtpbSAgPGFraW1Ac3VsYWNvLmxvY2FsPgotCi0JTGV0IGdsci5jYyBjYXRjaCB1cCB3aXRoIHN5bWJvbF92YWx1ZV9wcmludC4KLQkqIGRhdGEvZ2xyLmNjIChiNF95eXN5bXByaW50X2dlbmVyYXRlKTogUmVwbGFjZSBieS4uLgotCShiNF95eV9zeW1ib2xfcHJpbnRfZ2VuZXJhdGUpOiB0aGlzLgotCSh5eV9zeW1ib2xfcHJpbnQsIHl5X3N5bWJvbF92YWx1ZV9wcmludCk6IERlY2xhcmUgdGhlbS4KLQotMjAwNS0xMi0yOCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIHNyYy9sb2NhdGlvbi5oIChib3VuZGFyeSk6IE5vdGUgdGhhdCBhIGxpbmUgb3IgY29sdW1uIGVxdWFsCi0JdG8gSU5UX01BWCBpbmRpY2F0ZXMgYW4gb3ZlcmZsb3cuCi0JKiBzcmMvc2Nhbi1ncmFtLmw6IEluY2x1ZGUgdmVyaWZ5LmguICBEb24ndCBpbmNsdWRlIGdldC1lcnJuby5oLgotCShydWxlX2xlbmd0aF9vdmVyZmxvdywgaW5jcmVtZW50X3J1bGVfbGVuZ3RoLCBhZGRfY29sdW1uX3dpZHRoKToKLQlOZXcgZnVuY3Rpb25zLgotCSg8SU5JVElBTD57aWR9LCA8U0NfRVNDQVBFRF9TVFJJTkc+IlwiIiwgPFNDX0VTQ0FQRURfQ0hBUkFDVEVSPiInIik6Ci0JKDxTQ19CUkFDRURfQ09ERT4ifSIpOgotCVVzZSBpbmNyZW1lbnRfcnVsZV9sZW5ndGggcmF0aGVyIHRoYW4gaW5jcmVtZW50aW5nIGl0IGJ5IGhhbmQuCi0JKGFkanVzdF9sb2NhdGlvbiwgaGFuZGxlX3N5bmNsaW5lKTogRGlhZ25vc2Ugb3ZlcmZsb3cuCi0JKGhhbmRsZV9hY3Rpb25fZG9sbGFyLCBoYW5kbGVfYWN0aW9uX2F0KToKLQlGaXggYnVnIHdpdGggbW9uc3Ryb3NpdGllcyBsaWtlICQtMjE0NzQ4MzY0OC4KLQlSZW1vdmUgbm93LXVubmVjZXNzYXJ5IGNoZWNrcy4KLQkoc2Nhbl9pbnRlZ2VyKTogVmVyaWZ5IGFzc3VtcHRpb25zIGFuZCByZW1vdmUgbm93LXVubmVjZXNzYXJ5IGNoZWNrcy4KLQkoY29udmVydF91Y25fdG9fYnl0ZSk6IFZlcmlmeSBhc3N1bXB0aW9ucy4KLQkoaGFuZGxlX3N5bmNsaW5lKTogTmV3IGFyZyBMT0MuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgotCURvbid0IHN0b3JlIHRocm91Z2ggYSB2YWx1ZSBkZXJpdmVkIGZyb20gY2hhciBjb25zdCAqIHBvaW50ZXIuCi0KLQkqIHNyYy9yZWFkZXIuYyAoZ3JhbW1hcl9ydWxlX2NoZWNrKTogUmV3cml0ZSBzbGlnaHRseSB0byBhdm9pZAotCUdDQyB3YXJuaW5ncy4KLQotMjAwNS0xMi0yNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIHNyYy9yZWFkZXIuYyAoZ3JhbW1hcl9taWRydWxlX2FjdGlvbiwgZ3JhbW1hcl9zeW1ib2xfYXBwZW5kKToKLQlSZW1vdmUgdW5uZWNlc3NhcnkgZm9yd2FyZCBzdGF0aWMgZGVjbHMuCi0KLTIwMDUtMTItMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvcmVhZGVyLmMgKGdyYW1tYXJfY3VycmVudF9ydWxlX2NoZWNrKTogQWxzbyBjaGVjayB0aGF0ICQkCi0JaXMgdXNlZC4KLQlUYWtlIHRoZSBydWxlIHRvIGNoZWNrIGFzIGFyZ3VtZW50LCBoZW5jZSByZW5hbWUgYXMuLi4KLQkoZ3JhbW1hcl9ydWxlX2NoZWNrKTogdGhpcy4KLQkqIHNyYy9yZWFkZXIuaCwgc3JjL3JlYWRlci5jIChncmFtbWFyX3J1bGVfYmVnaW4sIGdyYW1tYXJfcnVsZV9lbmQpOgotCVJlbmFtZSBhcy4uLgotCShncmFtbWFyX3J1bGVfYmVnaW4sIGdyYW1tYXJfcnVsZV9lbmQpOiB0aGVzZSwgZm9yIGNvbnNpc3RlbmN5LgotCShncmFtbWFyX21pZHJ1bGVfYWN0aW9uLCBncmFtbWFyX3N5bWJvbF9hcHBlbmQpOiBOb3cgc3RhdGljLgotCSogdGVzdHMvdG9ydHVyZS5hdCAoaW5wdXQpOiBEb24ndCByZWx5IG9uIHRoZSBkZWZhdWx0IGFjdGlvbgotCWJlaW5nIGFsd2F5cyBwZXJmb3JtZWQuCi0JKiB0ZXN0cy9jYWxjLmF0OiAiU2V0IiAkJCBldmVuIHdoZW4gdGhlIGFjdGlvbiBpcyAiY3V0IiB3aXRoCi0JWVlFUlJPUiBvciBvdGhlci4KLQkqIHRlc3RzL2FjdGlvbnMuYXQgKEV4b3RpYyBEb2xsYXJzKTogSW5zdGVhZCBvZiB1c2luZyB1bnVzZWQKLQl2YWx1ZXMsIGNoZWNrIHRoYXQgdGhlIHdhcm5pbmcgaXMgaXNzdWVkLgotCi0yMDA1LTEyLTIyICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogTkVXUzogSW1wcm92ZSB3b3JkaW5nIGZvciB1bnVzZWQtdmFsdWUgd2FybmluZ3MuCi0KLTIwMDUtMTItMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2xhbHIxLmNjLCBkYXRhL3lhY2MuYywgZGF0YS9nbHIuYywgZGF0YS9jLm00Ci0JKGI0X3l5c3ltcHJpbnRfZ2VuZXJhdGUpOiBSZW5hbWUgYXMuLi4KLQkoYjRfeXlfc3ltYm9sX3ByaW50X2dlbmVyYXRlKTogdGhpcy4KLQlHZW5lcmF0ZSB5eV9zeW1ib2xfcHJpbnQgaW5zdGVhZCBvZiB5eXN5bXByaW50LgotCUdlbmVyYXRlIGFsc28geXlfc3ltYm9sX3ZhbHVlX3ByaW50LCBhbmQgdXNlIGl0LgotCi0yMDA1LTEyLTIyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogTkVXUzogV2FybiBhYm91dCB1bnVzZWQgdmFsdWVzLgotCSogc3JjL3N5bWxpc3QuaCwgc3JjL3N5bWxpc3QuYyAoc3ltYm9sX2xpc3QsIHN5bWJvbF9saXN0X25ldyk6IEFkZAotCWEgYHVzZWQnIG1lbWJlci4KLQkoc3ltYm9sX2xpc3Rfbl9nZXQsIHN5bWJvbF9saXN0X25fdXNlZF9zZXQpOiBOZXcuCi0JKHN5bWJvbF9saXN0X25fdHlwZV9uYW1lX2dldCk6IFVzZSBzeW1ib2xfbGlzdF9uX2dldC4KLQkqIHNyYy9zY2FuLWdyYW0ubCAoaGFuZGxlX2FjdGlvbl9kb2xsYXIpOiBGbGFnIHVzZWQgc3ltYm9scy4KLQkqIHNyYy9yZWFkZXIuYyAoZ3JhbW1hcl9jdXJyZW50X3J1bGVfY2hlY2spOiBDaGVjayB0aGF0IHZhbHVlcyBhcmUKLQl1c2VkLgotCSogc3JjL3N5bXRhYi5jIChzeW1ib2xfcHJpbnQpOiBBY2NlcHQgMC4KLQkqIHRlc3RzL2V4aXN0aW5nLmF0OiBSZW1vdmUgdGhlIHR5cGUgaW5mb3JtYXRpb24uCi0JRW1wdHkgdGhlIGFjdGlvbnMuCi0JUmVtb3ZlIHVzZWxlc3MgYWN0aW9ucyAoYmV3YXJlIG9mIG1pZC1ydWxlIGFjdGlvbnM6IHBlcmwgLTAwMAotCS1waSAtZSAncy9ccypce1x9KD89W1xuXHNdKlt8O10pLy9nJykuCi0JKiB0ZXN0cy9hY3Rpb25zLmF0IChFeG90aWMgRG9sbGFycyk6IFVzZSB1bnVzZWQgdmFsdWVzLgotCSogdGVzdHMvY2FsYy5hdDogTGlrZXdpc2UuCi0JKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdCAoTm8gdXNlcnMgZGVzdHJ1Y3RvcnMgaWYgc3RhY2sgMCBkZWxldGVkKToKLQlMaWtld2lzZS4KLQotCSogc3JjL2dyYW0uYyAocnVsZV91c2VmdWxfcCwgcnVsZV9uZXZlcl9yZWR1Y2VkX3ApOiBVc2UKLQlydWxlX3VzZWZ1bF9wLgotCi0yMDA1LTEyLTIxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCVVuZG8gMjAwNS0xMi0wMSB0ZW50YXRpdmUgbGljZW5zZSB3b3JkaW5nIGNoYW5nZS4gIFRoZSB3b3JkaW5nIGlzCi0Jc3RpbGwgYmVpbmcgcmV2aWV3ZWQgYnkgdGhlIGxhd3llcnMsIGFuZCB3ZSBkb24ndCB3YW50IHRvIHdhaXQgZm9yCi0JdGhlbSBiZWZvcmUgcHVibGlzaGluZyBhIHRlc3QgcmVsZWFzZS4gIEZvciBub3csIHJldmVydCB0byB0aGUKLQlwcmV2aW91cyB3b3JkaW5nLgotCSogTkVXUzogVW5kbyAyMDA1LTEyLTAxIGNoYW5nZS4KLQkqIGRhdGEvZ2xyLmM6IFJldmVydCB0byBwcmV2aW91cyBsaWNlbnNlIHdvcmRpbmcuCi0JKiBkYXRhL2dsci5jYzogTGlrZXdpc2UuCi0JKiBkYXRhL2xhbHIxLmNjOiBMaWtld2lzZS4KLQkqIGRhdGEvbG9jYXRpb24uY2M6IExpa2V3aXNlLgotCSogZGF0YS95YWNjLmM6IExpa2V3aXNlLgotCi0JKiBORVdTOiBSZXdvcmQgJWRlc3RydWN0b3IgdnMgWVlBQk9SVCBldGMuCi0JKiBkYXRhL2dsci5jOiBVc2UgQW1lcmljYW4gc3BhY2luZywgZm9yIGNvbnNpc3RlbmN5LgotCSogZGF0YS9nbHIuY2M6IExpa2V3aXNlLgotCSogZGF0YS9sYWxyMS5jYzogTGlrZXdpc2UuCi0JKiBkYXRhL3lhY2MuYzogTGlrZXdpc2UuCi0JKiBkYXRhL3lhY2MuYzogUmVmb3JtYXQgY29tbWVudHMgc2xpZ2h0bHkuCi0JKiBkb2MvYmlzb24udGV4aW5mbzogUmVwbGFjZSAibm9uLSIgd2l0aCAibm9uIiB3aGVuIHRoYXQgbWFrZXMgc2Vuc2UsCi0JZm9yIGNvbnNpc3RlbmN5LiAgRml4IHNvbWUgc3BlbGxpbmcgZXJyb3JzIGFuZCByZXdvcmQgcmVjZW50bHktaW5jbHVkZWQKLQl0ZXh0IHNsaWdodGx5LgotCSogdGVzdHMvY3h4LXR5cGUuYXQ6IENhc3QgcmVzdWx0cyBvZiBtYWxsb2MsIGZvciBDKysuCi0KLTIwMDUtMTItMjEgIEpvZWwgRS4gRGVubnkgIDxhZGRyZXNzQGhpZGRlbj4KLQotCSogdGVzdHMvY3h4LXR5cGUuYXQ6IENvbnN0cnVjdCBhIHRyZWUsIGNvdW50IHRoZSBwYXJlbnRzIG9mIHNoYXJlZAotCW5vZGVzLCBhbmQgZnJlZSBlYWNoIG5vZGUgb25jZSBhbmQgb25seSBvbmNlLiAgUHJldmlvdXNseSwgdGhlIG1lbW9yeQotCWZvciBzZW1hbnRpYyB2YWx1ZXMgd2FzIGxlYWtlZCBpbnN0ZWFkLgotCi0yMDA1LTEyLTIxICBKb2VsIEUuIERlbm55ICA8YWRkcmVzc0BoaWRkZW4+Ci0KLQkqIGRhdGEvZ2xyLmMgKHN0cnVjdCB5eUdMUlN0YWNrKTogSWYgcHVyZSwgYWRkIHl5dmFsIGFuZCB5eWxvYyBtZW1iZXJzLgotCSh5eWx2YWwsIHl5bGxvYyk6IElmIHB1cmUsICNkZWZpbmUgdG8geXlzdGFja3AtPnl5dmFsIGFuZAotCXl5c3RhY2twLT55eWxvYyBzaW1pbGFyIHRvIHl5Y2hhciBhbmQgeXluZXJycy4KLQkoeXlwYXJzZSk6IElmIHB1cmUsIHJlbW92ZSBsb2NhbCB5eWx2YWwgYW5kIHl5bGxvYy4gQWRkIGxvY2FsCi0JeXlzdGFja3AgdG8gYWNjb21tb2RhdGUgcHVyZSBkZWZpbml0aW9ucyBvZiB5eWx2YWwgYW5kIHl5bGxvYy4KLQkoYjRfbGV4X3BhcmFtLCBiNF9seXllcnJvcl9hcmdzLCBiNF9scHVyZV9hcmdzKTogSWYgcHVyZSwgY2hhbmdlCi0JeXlsdmFscCBhbmQgeXlsbG9jcCB0byAmeXlsdmFsIGFuZCAmeXlsbG9jLgotCShuZXJycywgY2hhciwgbHZhbCwgbGxvYyk6IElmIHB1cmUsIGFkZCAjZGVmaW5lJ3MgZm9yIGI0X3ByZWZpeFtdCi0JbmFtZXNwYWNlLiBQcmV2aW91c2x5LCBuZXJycyBhbmQgY2hhciB3ZXJlIG1pc3NpbmcsIGJ1dCBsdmFsIGFuZCBsbG9jCi0Jd2VyZW4ndCBuZWNlc3NhcnkuCi0JKHl5cHJvY2Vzc09uZVN0YWNrLCB5eXJlcG9ydFN5bnRheEVycm9yLCB5eXJlY292ZXJTeW50YXhFcnJvcik6IFJlbW92ZQotCXl5bHZhbHAgYW5kIHl5bGxvY3AgcGFyYW1ldGVycyBzaW5jZSwgaWYgcHVyZSwgdGhlc2UgYXJlIG5vdyBhbHdheXMKLQlhY2Nlc3NpYmxlIHRocm91Z2ggeXlzdGFja3AuICBJZiBub3QgcHVyZSwgdGhleSBhcmUgc3RpbGwgYWNjZXNzaWJsZQotCWdsb2JhbGx5LgotCSogZGF0YS9nbHIuYywgZGF0YS95YWNjLmMgKFlZTExPQ19ERUZBVUxUKTogQ2hhbmdlIGBpZiAoTiknIHRvCi0JYGlmIChZWUlEIChOKSknIHRvIHBhY2lmeSBsaW50LgotCi0yMDA1LTEyLTIxICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCVlZQUNDRVBULCBZWUVSUk9SLCBhbmQgWVlBQk9SVCwgYXMgdXNlciBhY3Rpb25zLCBzaG91bGQgbm90Ci0JZGVzdHJveSB0aGUgUkhTIHN5bWJvbHMgb2YgYSBydWxlLgotCSogZGF0YS95YWNjLmMgKHl5bGVuKTogSW5pdGlhbGl6ZSB0byAwLgotCUtlZXAgaXRzIHZhbHVlIHRvIHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gcG9zc2libHkgc2hpZnQuCi0JSW4gcGFydGljdWxhciwgYSByZWd1bGFyIHN1Y2Nlc3NmdWwgcGFyc2UgdGhhdCBlbmRzIG9uIFlZRklOQUwgYnkKLQlhIChpbnRlcm5hbCkgWVlBQ0NFUFQgbXVzdCBub3QgaGF2ZSB5eWxlbiAhPSAwLgotCSh5eWVycm9ybGFiLCB5eXJldHVybik6IFBvcCB0aGUgUkhTLgotCVJlb3JkZXIgYSBiaXQgdG8gZW1waGFzaXplIHRoZSBgc2hpZnRpbmcnIGJpdHMgb2YgY29kZS4KLQkoWVlQT1BTVEFDSyk6IE5vdyBhY2NlcHQgYSBudW1iZXIgb2YgaXRlbXMgdG8gcG9wLgotCSogZGF0YS9sYWxyMS5jYzogTGlrZXdpc2UuCi0JKiBkYXRhL2dsci5jOiBGb3JtYXR0aW5nIGNoYW5nZXMuCi0JVXNlIGdvdG8gaW5zdGVhZCBvZiBmYWxsIHRocm91Z2guCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoRGVzdHJ1Y3RvciBEZWNsKTogQ29tcGxldGUuCi0KLTIwMDUtMTItMjAgIEp1YW4gTWFudWVsIEd1ZXJyZXJvICA8anVhbi5ndWVycmVyb0BnbXguZGU+Ci0KLQkqIE1ha2VmaWxlLmFtOiBESkdQUCBzcGVjaWZpYyBmaWxlcyBhZGRlZCB0byBFWFRSQV9ESVNULgotCSogZGpncHAvTWFrZWZpbGUubWFpbnQ6IEZpeCBQQUNLQUdFIHZhcmlhYmxlIGNvbXB1dGF0aW9uLgotCSogZGpncHAvY29uZmlnLmJhdDogUmVwbGFjZSBldmVyeSBvY2N1cmVuY2Ugb2YgdGhlIGZpbGUgbmFtZQotCXNjYW4tZ3JhbS1jLmMgd2l0aCBjLXNjYW4tZ3JhbS5jLiBUaGUgc2FtZSBmb3Igc2Nhbi1za2VsLWMuYyB3aXRoCi0JYy1zY2FuLXNrZWwuYyB0byBjb25mb3JtIHdpdGggdGhlIDguMyBmaWxlIG5hbWUgcmVzdHJpY3Rpb24gb24gTVNET1MuCi0JKiBkamdwcC9jb25maWcuc2VkOiBSZXBsYWNlIGV2ZXJ5IG9jY3VyZW5jZSBvZiB0aGUgZmlsZSBuYW1lCi0Jc2Nhbi1ncmFtLWMuYyB3aXRoIGMtc2Nhbi1ncmFtLmMuIFRoZSBzYW1lIGZvciBzY2FuLXNrZWwtYy5jIHdpdGgKLQljLXNjYW4tc2tlbC5jIHRvIGNvbmZvcm0gd2l0aCB0aGUgOC4zIGZpbGUgbmFtZSByZXN0cmljdGlvbiBvbiBNU0RPUy4KLQkqIGRqZ3BwL2RqdW5wYWNrLmJhdDogREpHUFAgc3BlY2lmaWMgZmlsZS4KLQkqIGRqZ3BwL2ZuY2hhbmdlLmxzdDogREpHUFAgc3BlY2lmaWMgZmlsZS4KLQkqIGRqZ3BwL1JFQURNRS5pbjogQWRkIG5ldyBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gdW5wYWNrIHRoZSBiaXNvbgotCXNvdXJjZSBvbiBNU0RPUyBhbmQgb3RoZXIgc3lzdGVtcyB3aGljaCBoYXZlIDguMyBmaWxlIG5hbWUgcmVzdHJpY3Rpb25zCi0JdXNpbmcgZGp1bnBhY2suYmF0IGFuZCBmbmNoYW5nZS5sc3QuCi0KLTIwMDUtMTItMTIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBib290c3RyYXAgKGJ1aWxkX2N2c19wcmVmaXgpOiBSZW1vdmU7IHVudXNlZC4KLQkoQ1ZTX1BSRUZJWCk6IEFkanVzdCB0byB5ZXN0ZXJkYXkncyBTYXZhbm5haCByZW9yZ2FuaXphdGlvbgotCXdoZW4gZ2V0dGluZyBnbnVsaWIuCi0KLTIwMDUtMTItMTIgICJKb2VsIEUuIERlbm55IiA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KLQotCSogZGF0YS9nbHIuYzogUmVvcmRlciB0eXBlZGVmIGRlY2xhcmF0aW9ucyBmb3Igc3RydWN0cyB0byBtYXRjaCBvcmRlcgotCW9mIHN0cnVjdCBkZWNsYXJhdGlvbnMuCi0JUmVuYW1lIHl5c3RhY2sgZXZlcnl3aGVyZSB0byB5eXN0YWNrcCBleGNlcHQgaW4geXlwYXJzZSB3aGVyZSBpdCdzIG5vdAotCWEgcG9pbnRlci4KLQkoeXlnbHJTaGlmdCk6IENoYW5nZSBwYXJhbWV0ZXIgWVlTVFlQRSB5eXN2YWwgdG8gWVlTVFlQRSogeXl2YWxwIGZvcgotCWNvbnNpc3RlbmN5LgotCSh5eWlzX3RhYmxlX25pbmYpOiBDaGFuZ2UgMCB0byBZWUlEICgwKSB0byBwYWNpZnkgbGludC4KLQkoeXlyZXBvcnRTeW50YXhFcnJvcik6IEFkZCAvKkFSR1NVU0VEKi8gdG8gcGFjaWZ5IGxpbnQuCi0JKHl5cGFyc2UpOiBDaGFuZ2Ugd2hpbGUgKHl5dHJ1ZSkgdG8gd2hpbGUgKCBZWUlEICh5eXRydWUpKSB0byBwYWNpZnkKLQlsaW50LgotCi0yMDA1LTEyLTA5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogdGVzdHMvc2V0cy5hdCAoQWNjZXB0KTogRml4IHR5cG9zIGluIHJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvCi0Jc2VkIG91dCB0aGUgZmluYWwgc3RhdGUgbnVtYmVyLgotCi0JV29yayBhcm91bmQgcG9ydGFiaWxpdHkgcHJvYmxlbSBvbiBTb2xhcmlzIDEwOiBmbGV4LWdlbmVyYXRlZAotCWZpbGVzIGluY2x1ZGUgPHN0ZGlvLmg+IGJlZm9yZSA8Y29uZmlnLmg+LCB3aGljaCBtZXNzZXMgdXAKLQliZWNhdXNlIHRoZSBsYXR0ZXIgZGVmaW5lcyBfX0VYVEVOU0lPTlNfXy4gIEFkZHJlc3MgdGhlIHByb2JsZW0KLQlieSBjcmVhdGluZyB0d28gbmV3IGxpdHRsZSBmaWxlcyB0aGF0IGluY2x1ZGUgPGNvbmZpZy5oPiBmaXJzdCwKLQl0aGVuIGluY2x1ZGUgdGhlIGZsZXgtZ2VuZXJhdGVkIGZpbGVzLiAgUmV3cml0ZSBldmVyeW9uZSBlbHNlCi0JdG8gaW5jbHVkZSA8Y29uZmlnLmg+IGZpcnN0LCBhcyB3ZWxsLgotCSogbGliL3RpbWV2YXIuYzogQWx3YXlzIGluY2x1ZGUgImNvbmZpZy5oIi4KLQkqIHNyYy9NYWtlZmlsZS5hbSAoYmlzb25fU09VUkNFUyk6IFJlcGxhY2Ugc2Nhbi1ncmFtLmwgd2l0aAotCXNjYW4tZ3JhbS1jLmMsIGFuZCBzY2FuLXNrZWwubCB3aXRoIHNjYW4tc2tlbC1jLmMuCi0JKEVYVFJBX2Jpc29uX1NPVVJDRVMpOiBOZXcgbWFjcm8uCi0JKiBzcmMvc2Nhbi1ncmFtLWMuYywgc3JjL3NjYW4tc2tlbC1jLmM6IE5ldyBmaWxlcy4KLQkqIHNyYy9zeXN0ZW0uaDogRG9uJ3QgaW5jbHVkZSBjb25maWcuaC4KLQkqIHNyYy9MUjAuYzogSW5jbHVkZSA8Y29uZmlnLmg+IGZpcnN0LgotCSogc3JjL2Fzc29jLmM6IExpa2V3aXNlLgotCSogc3JjL2Nsb3N1cmUuYzogTGlrZXdpc2UuCi0JKiBzcmMvY29tcGxhaW4uYzogTGlrZXdpc2UuCi0JKiBzcmMvY29uZmxpY3RzLmM6IExpa2V3aXNlLgotCSogc3JjL2Rlcml2ZXMuYzogTGlrZXdpc2UuCi0JKiBzcmMvZmlsZXMuYzogTGlrZXdpc2UuCi0JKiBzcmMvZ2V0YXJncy5jOiBMaWtld2lzZS4KLQkqIHNyYy9ncmFtLmM6IExpa2V3aXNlLgotCSogc3JjL2xhbHIuYzogTGlrZXdpc2UuCi0JKiBzcmMvbG9jYXRpb24uYzogTGlrZXdpc2UuCi0JKiBzcmMvbWFpbi5jOiBMaWtld2lzZS4KLQkqIHNyYy9tdXNjbGVfdGFiLmM6IExpa2V3aXNlLgotCSogc3JjL251bGxhYmxlLmM6IExpa2V3aXNlLgotCSogc3JjL291dHB1dC5jOiBMaWtld2lzZS4KLQkqIHNyYy9wYXJzZS1ncmFtLnk6IExpa2V3aXNlLgotCSogc3JjL3ByaW50LmM6IExpa2V3aXNlLgotCSogc3JjL3ByaW50X2dyYXBoLmM6IExpa2V3aXNlLgotCSogc3JjL3JlYWRlci5jOiBMaWtld2lzZS4KLQkqIHNyYy9yZWR1Y2UuYzogTGlrZXdpc2UuCi0JKiBzcmMvcmVsYXRpb24uYzogTGlrZXdpc2UuCi0JKiBzcmMvc3RhdGUuYzogTGlrZXdpc2UuCi0JKiBzcmMvc3ltbGlzdC5jOiBMaWtld2lzZS4KLQkqIHNyYy9zeW10YWIuYzogTGlrZXdpc2UuCi0JKiBzcmMvdGFibGVzLmM6IExpa2V3aXNlLgotCSogc3JjL3VuaXFzdHIuYzogTGlrZXdpc2UuCi0JKiBzcmMvdmNnLmM6IExpa2V3aXNlLgotCi0JKiBzcmMvcGFyc2UtZ3JhbS55OiBGaXggbWlub3IgcHJvYmxlbXMgdW5jb3ZlcmVkIGJ5IGxpbnQuCi0JKGN1cnJlbnRfbGhzLCBjdXJyZW50X2xoc19sb2NhdGlvbik6IE5vdyBzdGF0aWMuCi0JKGN1cnJlbnRfYXNzb2MpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLgotCi0JQ2xlYW51cHMgc28gdGhhdCBCaXNvbi1nZW5lcmF0ZWQgcGFyc2VycyBoYXZlIGxlc3MgbGludC4KLQkqIGRhdGEvYy5tNCAoYjRfeXlkZXN0cnVjdF9nZW5lcmF0ZSwgYjRfeXlzeW1wcmludF9nZW5lcmF0ZSk6Ci0JUHJlcGVuZCAvKkFSR1NVU0VEKi8sIGZvciBsaW50J3Mgc2FrZS4KLQkqIGRhdGEvZ2xyLmMgKFlZVVNFKTogUHJvcGVybHkgcGFyZW50aGVzaXplLCBhbmQgdXNlIGFuIGFsdGVybmF0ZQotCWRlZmluaXRpb24gaWYgJ2xpbnQnIGlzIGRlZmluZWQuCi0JKFlZSUQpOiBOZXcgbWFjcm8gKG9yIGZ1bmN0aW9uLCBpZiBsaW50KS4KLQlBbGwgdXNlcyBvZiAvKkNPTlNUQ09ORCovMCByZXBsYWNlZCBieSBZWUlEKDApLgotCSogZGF0YS95YWNjLmM6IExpa2V3aXNlLgotCSogZGF0YS9nbHIuYyAoeXl1c2VyQWN0aW9uLCB5eXVzZXJNZXJnZSwgeXlfcmVkdWNlX3ByaW50KToKLQkoeXlyZWNvdmVyU3ludGF4RXJyb3IpOiBQcmVwZW5kIC8qQVJHU1VTRUQqLy4KLQkqIGRhdGEvZ2xyLmNjIChZWUxMT0NfREVGQVVMVCk6IE9taXQgLypDT05TVENPTkQqLyBzaW5jZSB0aGlzIGNvZGUKLQlpcyBDKysgb25seS4KLQkqIGRhdGEvbGFscjEuY2MgKFlZVVNFKTogSnVzdCB1c2UgYSBjYXN0LCBzaW5jZSB0aGlzIGNvZGUgaXMgQysrIG9ubHkuCi0JKiBkYXRhL3lhY2MuYyAoWVlTVEFDS19GUkVFKSBbZGVmaW5lZCBZWVNUQUNLX0FMTE9DXToKLQlVc2UgWVlJRCgwKSByYXRoZXIgdGhhbiAwLCBmb3IgbGludC4KLQkoeXlzdHJsZW4pOiBSZXdyaXRlIHRvIGF2b2lkIGxpbnQgd2FybmluZyBhYm91dCBwdHJkaWZmX3Qgb3ZlcmZsb3cuCi0JKHl5c3ludGF4X2Vycm9yKTogUmV3cml0ZSB0byBhdm9pZCBsaW50IHdhcm5pbmdzIGFib3V0IHBhcmVudGhlc2l6YXRpb24uCi0KLTIwMDUtMTItMDcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdAotCShJbXByb3BlciBoYW5kbGluZyBvZiBlbWJlZGRlZCBhY3Rpb25zIGFuZCBkb2xsYXIoLU4pIGluIEdMUiBwYXJzZXJzKToKLQlDbG9zZSBtZW1vcnkgbGVhayByZXBvcnRlZCBieSB0d2xldm8uCi0KLTIwMDUtMTItMDYgICJKb2VsIEUuIERlbm55IiA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KLQotCSogZGF0YS9nbHIuYyAoeXlwcm9jZXNzT25lU3RhY2ssIHl5cGFyc2UpOiBTeW5jaHJvbml6ZSB0aGUgc2hpZnQgZm9yCi0JYWxsIHN0YWNrcy4KLQkoeXlwYXJzZSk6IEl0ZXJhdGUgYW5vdGhlciBzdGFjayBpbiBvcmRlciB0byBjYWxsIHVzZXIgZGVzdHJ1Y3RvcnMuCi0JKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdCAoTm8gdXNlcnMgZGVzdHJ1Y3RvcnMgaWYgc3RhY2sgMCBkZWxldGVkKToKLQlOZXcgdGVzdCBjYXNlLgotCShEdXBsaWNhdGVkIHVzZXIgZGVzdHJ1Y3RvciBmb3IgbG9va2FoZWFkKTogVGhpcyB0ZXN0IG5vdyBpcyBleHBlY3RlZAotCXRvIHN1Y2NlZWQuCi0KLTIwMDUtMTItMDEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBORVdTOiBEb2N1bWVudCB0aGUgZm9sbG93aW5nIGNoYW5nZS4KLQkqIGRhdGEveWFjYy5jOiBTYXkgInBhcnNlciBza2VsZXRvbiIgcmF0aGVyIHRoYW4gImZpbGUiLCBzaW5jZQotCWl0J3Mgbm8gbG9uZ2VyIGp1c3QgYSBmaWxlLgotCSogZGF0YS9nbHIuYzogR3JhbnQgYSBzcGVjaWFsIGV4Y2VwdGlvbiBmb3IgQyBHTFIgcGFyc2VycywgdGhhdAotCXJlYWRzIGxpa2UgdGhlIGFscmVhZHktZXhpc3RpbmcgZXhjZXB0aW9uIGZvciBDIExBTFIoMSkgcGFyc2Vycy4KLQkqIGRhdGEvZ2xyLmNjOiBMaWtld2lzZS4KLQkqIGRhdGEvbGFscjEuY2M6IExpa2V3aXNlLgotCSogZGF0YS9sb2NhdGlvbi5jYzogTGlrZXdpc2UuCi0JKiBkYXRhL3lhY2MuYzogUmV3b3JkIHRoZSAid3JpdHRlbiBieSIgc3RhdGVtZW50IHRvIGNsYXJpZnkgdGhhdAotCWl0IHdhcyB0aGUgcGFyc2VyIHNrZWxldG9uLCBub3QgdGhlIGVudGlyZSBvdXRwdXQgZmlsZS4KLQkqIGRhdGEvZ2xyLmM6IFdyaXR0ZW4gYnkgUGF1bCBIaWxmaW5nZXIuCi0JKiBkYXRhL2dsci5jYzogV3JpdHRlbiBieSBBa2ltIERlbWFpbGxlLgotCSogZGF0YS9sYWxyMS5jYzogTGlrZXdpc2UuCi0KLTIwMDUtMTEtMTggIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBkYXRhL3lhY2MuYyAoeXlfcmVkdWNlX3ByaW50LCBZWV9SRURVQ0VfUFJJTlQpOgotCUZpeCB0eXBvcyBpbiBwcmV2aW91cyBjaGFuZ2UgdGhhdCBicm9rZSAnbWFrZSBjaGVjaycuCi0JWVlfUkVEVUNFX1BSSU5UIGNhbm5vdCBiZSBhIHBzZXVkby12YXJhcmdzIG1hY3JvOyB0aGF0IGlzbid0Ci0Jc3VwcG9ydGVkIGluIEMuCi0JKiB0ZXN0cy9jYWxjLmF0IChfQVRfQ0hFQ0tfQ0FMQyxfQVRfQ0hFQ0tfQ0FMQ19FUlJPUik6Ci0JRG9uJ3QgY2hlY2sgTlVNLVNUREVSUi1MSU5FUywgc2luY2UgdGhlIG91dHB1dCBmb3JtYXQgaXMgZmx1Y3R1YXRpbmcuCi0JV2UgY2FuIHJldmVydCB0aGlzIG9uY2UgdGhpbmdzIHNldHRsZSBkb3duLgotCi0JKiBzcmMvY29uZmxpY3RzLmMgKGNvbmZsaWN0c19wcmludCk6IERvbid0IHByaW50IGZpbGUgbmFtZSB0d2ljZQotCXdoZW4gJWV4cGVjdCBmYWlscyBiZWNhdXNlIHRoZXJlIHdlcmUgbm8gY29uZmxpY3RzLgotCSogZG9jL2Jpc29uLnRleGluZm8gKEV4cGVjdCBEZWNsKTogVGlnaHRlbiB1cCB3b3JkaW5nIGluIHByZXZpb3VzCi0JY2hhbmdlLgotCSogdGVzdHMvY29uZmxpY3RzLmF0ICglZXhwZWN0IG5vdCBlbm91Z2gsICVleHBlY3QgdG9vIG11Y2gpOgotCSglZXhwZWN0IHdpdGggcmVkdWNlIGNvbmZsaWN0cyk6IEFkanVzdCB0byBuZXcgYmVoYXZpb3IuCi0KLTIwMDUtMTEtMTggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvY29uZmxpY3RzLmMgKGNvbmZsaWN0c19wcmludCk6IFVuc2F0aXNmaWVkICVleHBlY3RhdGlvbiBhcmUKLQllcnJvcnMuCi0JKiBORVdTOiBEb2N1bWVudCB0aGlzLgotCSogZG9jL2Jpc29uLnRleGluZm8gKEV4cGVjdCBEZWNsKTogTGlrZXdpc2UuCi0KLTIwMDUtMTEtMTYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JR2VuZXJhbGl6ZSB0aGUgZGlzcGxheSBvZiBzZW1hbnRpYyB2YWx1ZXMgYW5kIGxvY2F0aW9ucyBpbiB0cmFjZXMuCi0JKiBkYXRhL2dsci5jICh5eV9yZWR1Y2VfcHJpbnQpOiBGaXggaW5kaWNlcyAoYWdhaW4pLgotCSogZGF0YS9jKysubTQgKGI0X3Joc192YWx1ZSwgYjRfcmhzX2xvY2F0aW9uKTogRG9uJ3QgZXhwZWN0Ci0JbGl0ZXJhbCBpbnRlZ2Vycy4KLQkqIGRhdGEvbGFscjEuY2MgKHl5cmVkdWNlX3ByaW50KTogUmVuYW1lIGFzLi4uCi0JKHl5X3JlZHVjZV9wcmludCk6IHRoaXMuCi0JRGlzcGxheSB2YWx1ZXMgYW5kIGxvY2F0aW9ucy4KLQkqIGRhdGEveWFjYy5jICh5eV9yZWR1Y2VfcHJpbnQpOiBMaWtld2lzZS4KLQkoWVlfUkVEVUNFX1BSSU5UKTogQWRqdXN0IHRvIHBhc3MgdGhlIHJlcXVpcmVkIGFyZ3VtZW50cy4KLQkoeXlzeW1wcmludCk6IE1vdmUgaGlnaGVyIHRvIGJlIHZpc2libGUgZnJvbSB5eV9yZWR1Y2VfcHJpbnQpLgotCSh5eXBhcnNlKTogQWRqdXN0LgotCSogdGVzdHMvY2FsYy5hdDogQWRqdXN0IHRoZSBleHBlY3RlZCBsZW5ndGggb2YgdGhlIHRyYWNlcy4KLQotMjAwNS0xMS0xNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvZ2xyLmMgKHl5X3JlZHVjZV9wcmludCk6IFRoZSBsb29wIHdhcyBxdWl0ZSB3cm9uZzogdHlwZSBhcmUKLQlmcm9tIDEgdG8gTiwgd2hpbGUgdmFsdWVzIGFuZCBsb2NhdGlvbiBzdGFydCBhdCAwLgotCShiNF9yaHNfbG9jYXRpb24sIGI0X3Joc192YWx1ZSk6IEFkZCBwYXJlbnMgYXJvdW5kICQxIGFuZCAkMi4KLQotMjAwNS0xMS0xNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvZ2xyLmMgKHl5X3JlZHVjZV9wcmludCk6IEZpeCB0aGUgJCBudW1iZXIuCi0KLTIwMDUtMTEtMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JIlVzZSIgcGFyc2UgcGFyYW1ldGVycy4KLQkqIGRhdGEvYy5tNCAoYjRfcGFyc2VfcGFyYW1fZm9yLCBiNF9wYXJzZV9wYXJhbV91c2UpOiBOZXcuCi0JKiBkYXRhL2dsci5jLCBkYXRhL2dsci5jYzogVXNlIHRoZW0uCi0JKiBkYXRhL2dsci5jIChZWVVTRSk6IEhhdmUgYSBDKysgZGVmaW5pdGlvbiB0aGF0IHN1cHBvcnRzCi0Jbm9uLXBvaW50ZXIgdHlwZXMuCi0KLTIwMDUtMTEtMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2dsci5jICh5eWV4cGFuZEdMUlN0YWNrKTogRGVjbGFyZSBvbmx5IGlmIGRlZmluZWQuCi0KLTIwMDUtMTEtMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2dsci5jYzogTmV3LgotCSogZGF0YS9tNHN1Z2FyL200c3VnYXIubTQgKG00X3ByZXBlbmQpOiBOZXcuCi0KLTIwMDUtMTEtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JTGV0IHBvc2l0aW9uIGFuZCBsb2NhdGlvbiBiZSBQT0RzLgotCSogZGF0YS9sb2NhdGlvbi5jYyAocG9zaXRpb246OmluaXRpYWxpemUsIGxvY2F0aW9uOjppbml0aWFsaXplKTogTmV3LgotCShwb3NpdGlvbjo6cG9zaXRpb24sIGxvY2F0aW9uOjpsb2NhdGlvbik6IERlZmluZSBvbmx5IGlmCi0JYjRfbG9jYXRpb25fY29uc3RydWN0b3JzIGlzIGRlZmluZWQuCi0JKiBkYXRhL2xhbHIxLmNjIChiNF9sb2NhdGlvbl9jb25zdHJ1Y3RvcnMpOiBEZWZpbmUgaXQgZm9yIGJhY2t3YXJkCi0JY29tcGF0aWJpbGl0eS4KLQkqIGRvYy9iaXNvbi50ZXhpbmZvIChJbml0aWFsIEFjdGlvbiBEZWNsKTogVXNlIGluaXRpYWxpemUuCi0KLTIwMDUtMTEtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2xhbHIxLmNjOiBNb3ZlIHRoZSBib2R5IG9mIHRoZSBjdG9yIGFuZCBkdG9yIGludG8gdGhlCi0JcGFyc2VyIGZpbGUgKGluc3RlYWQgb2YgdGhlIGhlYWRlcikuCi0JV3JhcCB0aGUgaW1wbGVtZW50YXRpb25zIGluIGEgIm5hbWVzcGFjZSB5eSIuCi0KLTIwMDUtMTEtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JSGF2ZSBnbHIuYyBpbmNsdWRlIGl0cyBoZWFkZXIgZmlsZSB3aGVuIGNyZWF0ZWQuCi0JKiBkYXRhL2dsci5jIChiNF9zaGFyZWRfZGVjbGFyYXRpb25zKTogTmV3LgotCU91dHB1dCB0aGVtIHZlcmJhdGltIGluIHRoZSBwYXJzZXIgaWYgISVkZWZpbmVzLCBvdGhlcndpc2UKLQlvdXRwdXQgdGhlbiBpbiB0aGUgaGVhZGVyIGZpbGUsIGFuZCBpbmNsdWRlIGl0IGluc3RlYWQuCi0KLTIwMDUtMTEtMTEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2dsci5jOiBDb21tZW50IGNoYW5nZXMuCi0KLTIwMDUtMTEtMTEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JV2hlbiB5eWRlYnVnLCByZXBvcnQgc2VtYW50aWMgYW5kIGxvY2F0aW9uIHZhbHVlcyBmb3IgcmVkdWN0aW9ucy4KLQkqIGRhdGEvZ2xyLmMgKHl5X3JlZHVjZV9wcmludCk6IFJlcG9ydCB0aGUgc2VtYW50aWMgdmFsdWVzIGFuZCB0aGUKLQlsb2NhdGlvbnMuCi0JKFlZX1JFRFVDRV9QUklOVCk6IEFkanVzdC4KLQkoeXlnbHJSZWR1Y2UpOiBVc2UgdGhlbS4KLQkoYjRfcmhzX3ZhbHVlLCBiNF9yaHNfbG9jYXRpb24pOiBSZW1vdmUgbTRfZXZhbCBpbnZvY2F0aW9ucy4KLQkqIGRhdGEvYy5tNCAoYjRfeXlzeW1wcmludF9nZW5lcmF0ZSk6IFNwZWNpZnkgdGhlIGNvbnN0IGFyZ3VtZW50cy4KLQkqIHRlc3RzL2NhbGMuYXQgKF9BVF9DSEVDS19DQUxDX0VSUk9SKTogUmVtb3ZlIHRoZSByZWR1Y3Rpb24KLQl0cmFjZXMuCi0KLTIwMDUtMTEtMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2dsci5jICh5eW5ld0dMUlN0YWNrSXRlbSwgWVlfUkVTRVJWRV9HTFJTVEFDSyk6IE5ldy4KLQkoeXlhZGREZWZlcnJlZEFjdGlvbiwgeXlnbHJTaGlmdCwgeXlnbHJTaGlmdERlZmVyKTogVXNlIHRoZW0uCi0JKHl5ZXhwYW5kR0xSU3RhY2ssIFlZUkVMT0MpOiBEZWZpbmUgb25seSB3aGVuIFlZU1RBQ0tFWFBBTkRBQkxFLgotCi0yMDA1LTExLTA5ICBBbGJlcnQgQ2hpbi1BLVlvdW5nICA8Y2hpbmFAdGhld3JpdHRlbndvcmQuY29tPgotCi0JKiBtNC9jeHgubTQsIGV4YW1wbGVzL01ha2VmaWxlLmFtOiBEb24ndCBidWlsZAotCWV4YW1wbGVzL2NhbGMrKyBpZiBubyBDKysgY29tcGlsZXIgaXMgYXZhaWxhYmxlLiAgKHRyaXZpYWwgY2hhbmdlKQotCi0yMDA1LTExLTA5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3NjYW4tc2tlbC5sOiBVc2UgYSBjb3VwbGUgb2YgYXNzZXJ0cy4KLQotMjAwNS0xMS0wMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlJbiBzb21lICh3ZWlyZCkgY2FzZXMsIHRoZSBmaW5hbCBzdGF0ZSBudW1iZXIgaXMgaW5jb3JyZWN0LgotCVJlcG9ydGVkIGJ5IEFsZXhhbmRyZSBEdXJldC1MdXR6LgotCSogc3JjL0xSMC5jIChzdGF0ZV9saXN0X2FwcGVuZCk6IFJlbW92ZSB0aGUgY29tcHV0YXRpb24gb2YKLQlmaW5hbF9zdGF0ZS4KLQkoc2F2ZV9yZWR1Y3Rpb25zKTogRG8gaXQgaGVyZS4KLQkoZ2V0X3N0YXRlKTogQWxwaGEgY29udmVyc2lvbi4KLQkoZ2VuZXJhdGVfc3RhdGVzKTogVXNlIGEgZm9yIGxvb3AuCi0JKiBzcmMvZ3JhbS5oIChpdGVtX251bWJlcl9pc19ydWxlX251bWJlcikKLQkoaXRlbV9udW1iZXJfaXNfc3ltYm9sX251bWJlcik6IE5ldy4KLQkqIHNyYy9zdGF0ZS5jOiBVc2UgYXNzZXJ0LgotCSogc3JjL3N5c3RlbS5oOiBJbmNsdWRlIGFzc2VydC5oLgotCSogdGVzdHMvc2V0cy5hdCAoQWNjZXB0KTogTmV3LgotCi0yMDA1LTEwLTMwICBQYXVsIEhpbGZpbmdlciAgPGhpbGZpbmdyQHR1bGx5LkNTLkJlcmtlbGV5LkVEVT4KLQotCSogZGF0YS9nbHIuYyAoeXlmaWxsKTogQWRqdXN0IGNvbW1lbnQuCi0JKHl5cmVzb2x2ZUFjdGlvbik6IEluaXRpYWxpemUgZGVmYXVsdCBsb2NhdGlvbiBwcm9wZXJseQotCWZvciBlbXB0eSByaWdodC1oYW5kIHNpZGVzLgotCSh5eWRvQWN0aW9uKTogRGl0dG8uCi0JQWRkIGNvbW1lbnQgZXhwbGFpbmluZyBhcHBhcmVudGx5IGRlYWQgY29kZS4KLQkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0Ci0JKEluY29ycmVjdGx5IGluaXRpYWxpemVkIGxvY2F0aW9uIGZvciBlbXB0eSByaWdodC1oYW5kIHNpZGUgaW4gR0xSKToKLQlOZXcgdGVzdC4KLQotMjAwNS0xMC0zMCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIGJvb3RzdHJhcCAoY2xlYW51cF9nbnVsaWIpOiBOZXcgZnVuY3Rpb24uICBVc2UgaXQgdG8gY2xlYW4gdXAKLQlnbnVsaWIgd2hlbiBpbnRlcnJ1cHRlZC4gIFRoaXMgZml4ZXMgc29tZSByYWNlIGNvbmRpdGlvbnMgYW5kCi0Jd29ya3MgYXJvdW5kIHNvbWUgcG9ydGFiaWxpdHkgcHJvYmxlbXMgKG9uZSBub3RlZCBieSBQYXVsCi0JSGlsZmluZ2VyKS4KLQotMjAwNS0xMC0yMiAgQWtpbSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIE1ha2VmaWxlLmNmZzogQWRqdXN0IHRvIGNvbmZpZyAtPiBidWlsZC1hdXguCi0JUmVwb3J0ZWQgYnkgdHdsZWRvLgotCi0yMDA1LTEwLTIxICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS9jLm00IChiNF95eWRlc3RydWN0X2dlbmVyYXRlLCBiNF95eXN5bXByaW50X2dlbmVyYXRlKTogUGFzcwotCXRoZSAlcGFyc2UtcGFyYW1zLgotCSogZGF0YS9nbHIuYyAoWVlfU1lNQk9MX1BSSU5ULCB5eWRlc3Ryb3lHTFJTdGF0ZSk6IEFkanVzdC4KLQkqIGRhdGEveWFjYy5jIChiNF9QdXJlX2lmKTogUmVuYW1lIGFzLi4uCi0JKGI0X3lhY2NfcHVyZV9pZik6IHRoaXMuCi0JKFlZX1NZTUJPTF9QUklOVCwgeXlwYXJzZSk6IEFkanVzdC4KLQkqIGRvYy9iaXNvbi50ZXhpbmZvOiBGb3JtYXR0aW5nIGNoYW5nZXMuCi0KLTIwMDUtMTAtMjEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JRmluaXNoIHRoZSB0cmFuc2l0aW9uIGNvbmZpZyAtPiBidWlsZC1hdXguCi0JKiBjb25maWd1cmUuYWMsIE1ha2VmaWxlLmFtOiBVc2UgYnVpbGQtYXV4LgotCSogY29uZmlnL3ByZXYtdmVyc2lvbiwgY29uZmlnL2Fubm91bmNlLWdlbiwgY29uZmlnL01ha2VmaWxlLmFtOgotCU1vdmUgdG8uLi4KLQkqIGJ1aWxkLWF1eC9wcmV2LXZlcnNpb24sIGJ1aWxkLWF1eC9hbm5vdW5jZS1nZW4sCi0JKiBidWlsZC1hdXgvTWFrZWZpbGUuYW06IGhlcmUuCi0KLTIwMDUtMTAtMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBleGFtcGxlcy9jYWxjKysvdGVzdDogVXNlIHNldCAteCBvbmx5IHdoZW4gVkVSQk9TRS4KLQotMjAwNS0xMC0xMyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIE5FV1M6IEJpc29uIG5vdyB3YXJucyBpZiBpdCBmaW5kcyBhIHN0cmF5IGAkJyBvciBgQCcgaW4gYW4gYWN0aW9uLgotCSogc3JjL3NjYW4tZ3JhbS5sICg8U0NfQlJBQ0VEX0NPREU+WyRAXSk6IEltcGxlbWVudCB0aGlzLgotCi0yMDA1LTEwLTEzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3NjYW4tc2tlbC5sOiBPdXRwdXQgdGhlIGJhc2UgbmFtZSBwYXJ0cyBvZiB0aGUgcGFyc2VyIGFuZAotCWhlYWRlciBmaWxlIG5hbWVzLgotCSogdGVzdHMvb3V0cHV0LmF0IChBVF9DSEVDS19PVVRQVVQpOiBTdXBwb3J0IHN1YmRpcmVjdG9yaWVzLCBhbmQKLQlhZGRpdGlvbmFsIGNoZWNrcy4KLQlVc2UgdGhpcyB0byBleGVyY2lzZSBDKysgb3V0cHV0cyBpbiBzdWJkaXJzLgotCVJlcG9ydGVkIGJ5IE9sZWcgU21vbHNreS4KLQotMjAwNS0xMC0xMiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIGRhdGEvYy5tNCAoYjRfY19mdW5jdGlvbl9kZWYpOiBMb29rIGF0IF9fQzk5X0ZVTkNfXywgbm90IGF0Ci0JX19TVERDX1ZFUlNJT05fXywgYXMgSUJNIGNjIDcuMCBkb2Vzbid0IGRlZmluZSB0aGUgbGF0dGVyIGVpdGhlci4KLQlQcm9ibGVtIHJlcG9ydGVkIGJ5IEpvaG4gUC4gSGFydG1hbm4uCi0JKiBkYXRhL3lhY2MuYyAoWVlNT0RFUk5fQyk6IExpa2V3aXNlLiAgRG9uJ3QgZGVmaW5lIGlmIHRoZSB1c2VyIGhhcwotCWFscmVhZHkgZGVmaW5lZCBpdC4KLQotMjAwNS0xMC0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9wYXJzZS1ncmFtLnkgKHZlcnNpb25fY2hlY2spOiBFeGl0IDYzIHRvIHBsZWFzZSBtaXNzaW5nCi0JKHN0YW5kcyBmb3IgInZlcnNpb24gbWlzbWF0Y2gpLgotCSogdGVzdHMvaW5wdXQuYXQsIGRvYy9iaXNvbi50ZXhpbmZvOiBBZGp1c3QuCi0KLTIwMDUtMTAtMTAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JV29yayBhcm91bmQgcG9ydGFiaWxpdHkgcHJvYmxlbXMgd2l0aCBWaXN1YWwgQWdlIEMgY29tcGlsZXIKLQkoeGxjIGFuZCB4bENfcikgcmVwb3J0ZWQgYnkgSm9obiBQLiBIYXJ0bWFubi4KLQkqIGRhdGEvbG9jYXRpb24uY2MgKGluaXRpYWxfY29sdW1uLCBpbml0aWFsX2xpbmUpOiBSZW1vdmUuCi0JQWxsIHVzZXMgcmVwbGFjZWQgYnkgMCBhbmQgMS4KLQkqIHNyYy9zY2FuLWdyYW0ubCAoZ3JhbV93cmFwKTogUmVkZWZpbmUgdG8gYXZvaWQgYnVnIGluIGZsZXggMi41LjMxCi0JdGhhdCB4bGMgY29tcGxhaW5zIGFib3V0LgotCSogc3JjL3NjYW4tc2tlbC5sIChza2VsX3dyYXApOiBMaWtld2lzZS4KLQkqIGRhdGEvYy5tNCAoYjRfY19mdW5jdGlvbl9kZWYpOiBMb29rIGF0IF9fU1REQ19WRVJTSU9OX18gYXMgd2VsbAotCWFzIF9fU1REQ19fLgotCSogZGF0YS95YWNjLmMgKFlZTU9ERVJOX0MpOiBOZXcgbWFjcm8sIHdoaWNoIGFsc28gbG9va3MgYXQKLQlfX1NURENfVkVSU0lPTl9fLiAgVXNlIGl0IGV2ZXJ5d2hlcmUgaW5zdGVhZCBvZiBsb29raW5nIGF0Ci0JX19TVERDX18gYW5kIF9fY3BsdXNwbHVzLgotCi0yMDA1LTEwLTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZXhhbXBsZXMvY2FsYysrL3Rlc3Q6IEJlIHF1aWV0IHVubGVzcyBWRVJCT1NFLgotCi0yMDA1LTEwLTA1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogZGF0YS9jLm00ICh5eWRlc3RydWN0LCB5eXN5bXByaW50KToKLQlVc2UgWVlVU0UgaW5zdGVhZCBvZiBjYXN0aW5nIHRvIHZvaWQuCi0JKiBkYXRhL2dsci5jIChZWVVTRSk6IE5ldyBtYWNyby4KLQkoeXl1c2VyTWVyZ2UsIHl5cmVwb3J0QW1iaWd1aXR5LCB5eXJlcG9ydFN5bnRheEVycm9yKToKLQlVc2UgaXQgaW5zdGVhZCBvZiByb2xsaW5nIG91ciBvd24uCi0JKFlZTExPQ19ERUZBVUxULCBZWUNISywgWVlEUFJJTlRGLCBZWV9TWU1CT0xfUFJJTlQsIFlZX1JFRFVDRV9QUklOVCk6Ci0JKFlZQ0hLMSk6Ci0JVXNlIC8qQ09OU1RDT05EKi8gdG8gc3VwcHJlc3MgbGludCB3YXJuaW5ncy4KLQkqIGRhdGEvbGFscjEuY2MgKFlZTExPQ19ERUZBVUxULCBZWV9TWU1CT0xfUFJJTlQsIFlZX1JFRFVDRV9QUklOVCk6Ci0JKFlZX1NUQUNLX1BSSU5UKTogVXNlICdmYWxzZScgbm90ICcwJy4KLQkoWVlVU0UpOiBOZXcgbWFjcm8uCi0JKHl5c3ltcHJpbnRfLCB5eWRlc3RydWN0Xyk6IFVzZSBpdCBpbnN0ZWFkIG9mIHJvbGxpbmcgb3VyIG93bi4KLQkqIGRhdGEveWFjYy5jIChZWVVTRSk6IE5ldyBtYWNyby4KLQkoWVlDT1BZLCBZWVNUQUNLX1JFTE9DQVRFLCBZWUJBQ0tVUCwgWVlMTE9DX0RFRkFVTFQpOgotCShZWURQUklOVEYsIFlZX1NZTUJPTF9QUklOVCwgWVlfU1RBQ0tfUFJJTlQsIFlZX1JFRFVDRV9QUklOVCk6Ci0JKHl5ZXJyb3JsYWIpOiBVc2UgLypDT05TVENPTkQqLyB0byBzdXBwcmVzcyBsaW50IHdhcm5pbmdzLgotCi0KLQkqIGRhdGEvbTRzdWdhci9tNHN1Z2FyLm00IChfbTRfbWFwKTogTmV3IG1hY3JvLgotCShtNF9tYXAsIG00X21hcF9zZXApOiBVc2UgaXQuICBIYW5kbGUgdGhlIGVtcHR5IGxpc3QgY29ycmVjdGx5LgotCi0yMDA1LTEwLTA0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCVVuZG8gdGhlIHBhcnRzIG9mIHRoZSB1bmxvY2tlZC1JL08gY2hhbmdlIHRoYXQgc3Vic3RpdHV0ZWQKLQlwdXRjIG9yIHB1dHMgZm9yIHByaW50Zi4gIFRoaXMgbWlnaHQgaHVydCBwZXJmb3JtYW5jZSBhIGJpdCwKLQlidXQgc29tZSBwZW9wbGUgcHJlZmVyIHRoZSBwcmludGYgc3R5bGUuCi0JKiBkYXRhL2MubTQgKHl5c3ltcHJpbnQpOiBQcmVmZXIgcHJpbnRmIHRvIHB1dHMgYW5kIHB1dGMuCi0JKiBkYXRhL2dsci5jIChZWUZQVVRDLCBZWUZQVVRTLCBZWURQVVRTKTogUmVtb3ZlLgotCUFsbCB1c2VzIHJlcGxhY2VkIGJ5IFlZRlBSSU5URiBhbmQgWVlEUFJJTlRGLgotCSogZGF0YS95YWNjLmM6IExpa2V3aXNlLgotCSogbGliL2JpdHNldC5jIChiaXRzZXRfcHJpbnQpOiBMaWtld2lzZS4KLQkqIGxpYi9iaXRzZXR2LmMgKGJpdHNldHZfZHVtcCwgZGVidWctYml0c2V0dik6IFByZWZlciBwcmludGYgdG8KLQlwdXRjIGFuZCBwdXRzLgotCSogbGliL2xiaXRzZXQuYyAoZGVidWdfbGJpdHNldCk6IExpa2V3aXNlLgotCSogc3JjL2Nsb3N1cmUuYyAocHJpbnRfZmlyc3RzLCBwcmludF9mZGVyaXZlcyk6IExpa2V3aXNlLgotCSogc3JjL2dyYW0uYyAoZ3JhbW1hcl9kdW1wKTogTGlrZXdpc2UuCi0JKiBzcmMvbGFsci5jIChsb29rX2FoZWFkX3Rva2Vuc19wcmludCk6IExpa2V3aXNlLgotCSogc3JjL291dHB1dC5jIChlc2NhcGVkX291dHB1dCk6IExpa2V3aXNlLgotCSh1c2VyX2FjdGlvbnNfb3V0cHV0KTogQnJlYWsgYXBhcnQgdHdvIHByaW50ZnMuCi0JKiBzcmMvcGFyc2UtZ3JhbS55ICglcHJpbnRlcik6IFByZWZlciBwcmludGYgdG8gcHV0YyBhbmQgcHV0cy4KLQkqIHNyYy9yZWR1Y2UuYyAocmVkdWNlX3ByaW50KTogTGlrZXdpc2UuCi0JKiBzcmMvc3RhdGUuYyAoc3RhdGVfcnVsZV9sb29rX2FoZWFkX3Rva2Vuc19wcmludCk6IExpa2V3aXNlLgotCSogc3JjL3N5c3RlbS5oOiBJbmNsdWRlIHVubG9ja2VkLWlvLmggcmF0aGUgdGhhbiBzdGRpby5oLgotCi0JKiBkYXRhL2dsci5jICh5eXVzZXJNZXJnZSwgeXlyZXBvcnRBbWJpZ3VpdHksIHl5cmVwb3J0U3ludGF4RXJyb3IpOgotCVVzZSBhc3NpZ25tZW50cyByYXRoZXIgdGhhbiBjYXN0cy10by12b2lkIHRvIHN1cHByZXNzCi0JdW51c2VkLXZhcmlhYmxlIHdhcm5pbmdzLiAgVGhpcyBwYWNpZmllcyAnbGludCcuCi0JKiBkYXRhL2xhbHIxLmNjICh5eXN5bXByaW50XywgeXlkZXN0cnVjdF8pOiBVc2UgYSBjYWxsIHRvIHN1cHByZXNzCi0JdW51c2VkLXZhcmlhYmxlIHdhcm5pbmdzLgotCi0yMDA1LTEwLTAzICBKdWFuIE1hbnVlbCBHdWVycmVybyAgPGp1YW4uZ3VlcnJlcm9AZ214LmRlPgotCi0JKiBNYWtlZmlsZS5hbTogREpHUFAgc3BlY2lmaWMgZmlsZXMgYWRkZWQgdG8gRVhUUkFfRElTVC4KLQotMjAwNS0xMC0wMiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQlVc2UgdW5sb2NrZWQgSS9PIGZvciBhIG1pbm9yIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IG9uIGhvc3RzIGxpa2UKLQlHTlUvTGludXggYW5kIFNvbGFyaXMgdGhhdCBzdXBwb3J0IHVubG9ja2VkIEkvTy4gIFRoZSBiYXNpYyBpZGVhCi0JaXMgdG8gdXNlIHRoZSBnbmxpYiB1bmxvY2tlZC1pbyBtb2R1bGUsIGFuZCB0byBwcmVmZXIgcHV0YyBhbmQKLQlwdXRzIHRvIHByaW50ZiB3aGVuIGVpdGhlciB3aWxsIHdvcmsgKHNpbmNlIHRoZSBsYXR0ZXIgZG9lc24ndAotCWNvbWUgaW4gYW4gdW5sb2NrZWQgZmxhdm9yKS4KLQkqIGJvb3RzdHJhcCAoZ251bGliX21vZHVsZXMpOiBBZGQgdW5sb2NrZWQtaW8uCi0JKiBkYXRhL2MubTQgKHl5c3ltcHJpbnQpOiBQcmVmZXIgcHV0cyBhbmQgcHV0YyB0byBwcmludGYuCi0JKiBkYXRhL2dsci5jIChZWUZQVVRDLCBZWUZQVVRTLCBZWURQVVRTKTogTmV3IG1hY3Jvcy4KLQlQcmVmZXIgdGhlbSB0byBZWUZQUklOVEYgYW5kIFlZRFBSSU5URiBpZiBlaXRoZXIgd2lsbCBkbywKLQlhbmQgc2ltaWxhcmx5IGZvciBwdXRzIGFuZCBwdXRjIGFuZCBwcmludGYuCi0JKiBkYXRhL3lhY2MuYzogTGlrZXdpc2UuCi0JKiBsaWIvYml0c2V0LmMgKGJpdHNldF9wcmludCk6IExpa2V3aXNlLgotCSogbGliL2JpdHNldC5oIFtVU0VfVU5MT0NLRURfSU9dOiBJbmNsdWRlIHVubG9ja2VkLWlvLmguCi0JKiBsaWIvYml0c2V0di5jIChiaXRzZXR2X2R1bXAsIGRlYnVnLWJpdHNldHYpOiBQcmVmZXIgcHV0YyBhbmQgcHV0cwotCXRvIHByaW50Zi4KLQkqIGxpYi9sYml0c2V0LmMgKGRlYnVnX2xiaXRzZXQpOiBMaWtld2lzZS4KLQkqIHNyYy9jbG9zdXJlLmMgKHByaW50X2ZpcnN0cywgcHJpbnRfZmRlcml2ZXMpOiBMaWtld2lzZS4KLQkqIHNyYy9ncmFtLmMgKGdyYW1tYXJfZHVtcCk6IExpa2V3aXNlLgotCSogc3JjL2xhbHIuYyAobG9va19haGVhZF90b2tlbnNfcHJpbnQpOiBMaWtld2lzZS4KLQkqIHNyYy9vdXRwdXQuYyAoZXNjYXBlZF9vdXRwdXQpOiBMaWtld2lzZS4KLQkodXNlcl9hY3Rpb25zX291dHB1dCk6IENvYWxlc2NlIHR3byBwcmludGZzLgotCSogc3JjL3BhcnNlLWdyYW0ueSAoJXByaW50ZXIpOiBQcmVmZXIgcHV0YyBhbmQgcHV0cyB0byBwcmludGYuCi0JKiBzcmMvcmVkdWNlLmMgKHJlZHVjZV9wcmludCk6IExpa2V3aXNlLgotCSogc3JjL3N0YXRlLmMgKHN0YXRlX3J1bGVfbG9va19haGVhZF90b2tlbnNfcHJpbnQpOiBMaWtld2lzZS4KLQkqIHNyYy9zeXN0ZW0uaDogSW5jbHVkZSB1bmxvY2tlZC1pby5oIHJhdGhlciB0aGFuIHN0ZGlvLmguCi0KLQkqIGRhdGEvbGFscjEuY2M6IERvbid0IHB1dCBhbiB1bm1hdGNoZWQgJyBpbiBhIGRubCBjb21tZW50LCBhcwotCXRoaXMgY29uZnVzZXMgeGdldHRleHQuCi0KLTIwMDUtMTAtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBib290c3RyYXAgKGdudWxpYl9tb2R1bGVzKTogQWRkIHN0cnZlcnNjbXAuCi0JKiBsaWIvLmN2c2lnbm9yZTogQWRkIHN0cnZlcnNjbXAuYywgc3RydmVyc2NtcC5oLgotCSogbTQvLmN2c2lnbm9yZTogQWRkIHN0cnZlcnNjbXAubTQuCi0JKiBzcmMvcGFyc2UtZ3JhbS55ICglcmVxdWlyZSk6IE5ldyB0b2tlbiwgbmV3IHJ1bGUuCi0JKHZlcnNpb25fY2hlY2spOiBOZXcuCi0JKiBzcmMvc2Nhbi1ncmFtLmwgKCVyZXF1aXJlKTogQWRqdXN0LgotCSogdGVzdHMvaW5wdXQuYXQgKEFUX1JFUVVJUkUpOiBOZXcuCi0JVXNlIGl0LgotCSogZG9jL2Jpc29uLnRleGluZm8gKFJlcXVpcmUgRGVjbCk6IE5ldy4KLQkoQ2FsYysrIFBhcnNlcik6IFVzZSAlcmVxdWlyZS4KLQotMjAwNS0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvbG9jYXRpb24uY2M6IE5ldy4KLQotMjAwNS0xMC0wMiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+LAotCSAgICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCU1ha2Ugc3VyZSAtb2Rpci9mb28uY2MgY3JlYXRlcyBkaXIvbG9jYXRpb24uaGggZXRjLgotCSogc3JjL2ZpbGVzLmggKHNwZWNfb3V0ZmlsZSwgcGFyc2VyX2ZpbGVfbmFtZSwgc3BlY19uYW1lX3ByZWZpeCkKLQkoc3BlY19maWxlX3ByZWZpeCwgc3BlY192ZXJib3NlX2ZpbGUsIHNwZWNfZ3JhcGhfZmlsZSkKLQkoc3BlY19kZWZpbmVzX2ZpbGUpOiBOb3cgY29uc3QuCi0JKGRpcl9wcmVmaXgpOiBOZXcuCi0JKHNob3J0X2Jhc2VfbmFtZSk6IFJlbW92ZS4KLQkqIHNyYy9maWxlcy5jOiBBZGp1c3QuCi0JKGRpcm5hbWUuaCk6IEluY2x1ZGUuCi0JKGJhc2VfbmFtZSk6IERvbid0IHByb3RvdHlwZSBpdC4KLQkoZmlucHV0KTogUmVtb3ZlLCBkdXBsaWNhdGVzIGdyYW1faW4uCi0JKGZ1bGxfYmFzZV9uYW1lLCBzaG9ydF9iYXNlX25hbWUpOiBSZXBsYWNlIGJ5Li4uCi0JKGFsbF9idXRfZXh0LCBhbGxfYnV0X3RhYl9leHQpOiB0aGVzZS4KLQkoY29tcHV0ZV9iYXNlX25hbWVzKTogUmVuYW1lIGFzLi4uCi0JKGNvbXB1dGVfZmlsZV9uYW1lX3BhcnRzKTogdGhpcy4KLQlVcGRhdGUgdG8gY29tcHV0ZSB0aGUgbmV3IHZhcmlhYmxlcywgaW5jbHVkaW5nIGRpcl9wcmVmaXguCi0JQWRqdXN0IGRlcGVuZGVuY2llcy4KLQkqIHNyYy9vdXRwdXQuYyAocHJlcGFyZSk6IE91dHB1dCB0aGVtLgotCSogc3JjL3JlYWRlci5jOiBBZGp1c3QgdG8gdXNlIGdyYW1faW4sIG5vdCBmaW5wdXQuCi0JKiBzcmMvc2Nhbi1za2VsLmwgKEBkaXJfcHJlZml4QCk6IE5ldy4KLQotMjAwNS0xMC0wMiAgSnVhbiBNYW51ZWwgR3VlcnJlcm8gIDxqdWFuLmd1ZXJyZXJvQGdteC5kZT4KLQotCSogbGliL3N1YnBpcGUuYzogTmV3IGZ1bmN0aW9uIGVuZF9vZl9vdXRwdXRfc3VicGlwZSgpIGFkZGVkCi0JdG8gYWxsb3cgc3VwcG9ydCBmb3Igbm9uLXBvc2l4IHN5c3RlbXMuIFRoaXMgaXMgYSBuby1vcCBmdW5jdGlvbgotCWZvciBwb3NpeCBzeXN0ZW1zLgotCi0JKiBsaWIvc3VicGlwZS5oOiBOZXcgZnVuY3Rpb24gZW5kX29mX291dHB1dF9zdWJwaXBlKCkgYWRkZWQKLQl0byBhbGxvdyBzdXBwb3J0IGZvciBub24tcG9zaXggc3lzdGVtcy4gVGhpcyBpcyBhIG5vLW9wIGZ1bmN0aW9uCi0JZm9yIHBvc2l4IHN5c3RlbXMuCi0KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3NrZWxldG9uKTogVXNlIGVuZF9vZl9vdXRwdXRfc3VicGlwZSgpIHRvCi0JaGFuZGxlIHRoZSBsYWNrIG9mIHBpcGUvZm9yayBmdW5jdGlvbmFsaXR5IG9uIG5vbi1wb3NpeCBzeXN0ZW1zLgotCi0JKiBkamdwcC9NYWtlZmlsZS5tYWludDogREpHUFAgc3BlY2lmaWMgZmlsZS4KLQotCSogZGpncHAvUkVBRE1FLmluOiBESkdQUCBzcGVjaWZpYyBmaWxlLgotCi0JKiBkamdwcC9jb25maWcuYmF0OiBESkdQUCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUuCi0KLQkqIGRqZ3BwL2NvbmZpZy5zZWQ6IERKR1BQIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZS4KLQotCSogZGpncHAvY29uZmlnLnNpdGU6IERKR1BQIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZS4KLQotCSogZGpncHAvY29uZmlnX2guc2VkOiBESkdQUCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUuCi0KLQkqIGRqZ3BwL3N1YnBpcGUuYzogREpHUFAgc3BlY2lmaWMgcmVwbGFjZW1lbnQgZmlsZSBmb3IgbGliL3N1YnBpcGUuYy4KLQotCSogZGpncHAvc3VicGlwZS5oOiBESkdQUCBzcGVjaWZpYyByZXBsYWNlbWVudCBmaWxlIGZvciBsaWIvc3VicGlwZS5oLgotCi0yMDA1LTEwLTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS9sb2NhdGlvbi5jYzogTmV3LCBleHRyYWN0IGZyb20uLi4KLQkqIGRhdGEvbGFscjEuY2M6IGhlcmUuCi0JKGxvY2F0aW9uLmhoKTogSW5jbHVkZSBpdCBhZnRlciB0aGUgdXNlciBwcm9sb2d1ZSwgaW4gY2FzZSB0aGUKLQlmaWxlbmFtZSB0eXBlIGlzIGRlZmluZWQgYnkgdGhlIHVzZXIuCi0JRm9yd2FyZCBkZWNsYXRpb24gbG9jYXRpb24gYW5kIHBvc2l0aW9uIGJlZm9yZSB0aGUgcHJlLXByb2xvZ3VlLgotCSh5eXJlc3VsdF8pOiBSZW5hbWUgYXMuLi4KLQkoeXlyZXN1bHQpOiB0aGlzLCBpdCdzIGEgbG9jYWwgdmFyaWFibGUsIG5vdCBhbiBhdHRyaWJ1dGUuCi0JKiBkYXRhL01ha2VmaWxlLmFtIChkaXN0X3BrZ2RhdGFfREFUQSk6IEFkanVzdC4KLQotMjAwNS0xMC0wMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGV4YW1wbGVzL2V4dGV4aTogUmVzdG9yZSB0aGUgI2xpbmUgZ2VuZXJhdGlvbi4KLQotMjAwNS0wOS0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+LAotCSAgICBBbGV4YW5kcmUgRHVyZXQtTHV0eiA8YWRsQGdudS5vcmc+Ci0KLQlNb3ZlIHRoZSB0b2tlbiB0eXBlIGFuZCBZWVNUWVBFIGluIHRoZSBwYXJzZXIgY2xhc3MuCi0JKiBkYXRhL2xhbHIxLmNjIChzdGFjay5oaCwgbG9jYXRpb24uaGgpOiBJbmNsdWRlIGVhcmxpZXIuCi0JKHBhcnNlcjo6dG9rZW4pOiBOZXcsIGZyb20gdGhlIG1vdmVkIGZyZWUgZGVmaW5pdGlvbiBvZiB0b2tlbnMuCi0JKHBhcnNlcjo6c2VtYW50aWNfdmFsdWUpOiBOb3cgYSBmdWxsIGRlZmluaXRpb24gaW5zdGVhZCBvZiBhbgotCWluZGlyZWN0aW9uIHRvIFlZU1RZUEUuCi0JKGI0X3Bvc3RfcHJvbG9ndWUpOiBObyBsb25nZXIgaW5jbHVkZWQgaW4gdGhlIGhlYWRlciBmaWxlLCBidXQKLQlpbiB0aGUgaW1wbGVtZW50YXRpb24gZmlsZS4KLQkqIGRvYy9iaXNvbi50ZXhpIChDKyBMYW5ndWFnZSBJbnRlcmZhY2UpOiBVcGRhdGUuCi0JKiBzcmMvcGFyc2UtZ3JhbS55OiBTdXBwb3J0IHVuYXJ5ICVkZWZpbmUuCi0JKiB0ZXN0cy9hY3Rpb25zLmF0OiBEZWZpbmUgZ2xvYmFsX3Rva2Vuc19hbmRfeXlzdHlwZSBmb3IgYmFja3dhcmQKLQljb21wYXRpYmlsaXR5IHVudGlsIHdlIHVwZGF0ZSB0aGUgdGVzdHMuCi0JKiB0ZXN0cy9jYWxjLmF0OiBJZGVtLgotCShmaXJzdF9saW5lLCBmaXJzdF9jb2x1bW4sIGxhc3RfbGluZSwgbGFzdF9jb2x1bW4pOiBEZWZpbmUgZm9yIGxhbHIxLmNjCi0JdG8gc2ltcGxpZnkgdGhlIGNvZGUuCi0KLTIwMDUtMDktMjkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JUG9ydCB0byBTdW5PUyA0LjEuNCwgd2hpY2ggbGFja3Mgc3RydG91bCBhbmQgc3RyZXJyb3IuCi0JQWgsIHRoZSBnb29kIG9sZCBkYXlzISAgUHJvYmxlbSByZXBvcnRlZCBieSBQZXRlciBLbGVpbi4KLQkqIGJvb3RzdHJhcCAoZ251bGliX21vZHVsZXMpOiBBZGQgc3RyZXJyb3IsIHN0cnRvdWwuCi0JKiBsaWIvLmN2c2lnbm9yZTogQWRkIHN0cmVycm9yLmMsIHN0cnRvbC5jLCBzdHJ0b3VsLmMKLQkqIG00Ly5jdnNpZ25vcmU6IEFkZCBzdHJlcnJvci5tNCwgc3RydG9sLm00LCBzdHJ0b3VsLm00LgotCi0yMDA1LTA5LTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS9jLm00IChiNF9lcnJvcl92ZXJib3NlX2lmKTogTmV3LgotCSogZGF0YS9sYWxyMS5jYzogVXNlIGl0LgotCShZWUVSUk9SX1ZFUkJPU0VfSUYpOiBSZW1vdmUuCi0JKHl5bl8sIHl5bGVuXywgeXlzdGF0ZV8sIHl5bmVycnNfLCB5eWVycnN0YXR1c18pOiBSZW1vdmUgYXMKLQlwYXJzZXIgbWVtYmVycywgcmVwbGFjZWQgYnkuLi4KLQkoeXluLCB5eWxlbiwgeXlzdGF0ZSwgeXluZXJzcywgeXllcnJzdGF0dXMpOiB0aGVzZSBwYXJzZXI6OnBhcnNlCi0JbG9jYWwgdmFyaWFibGVzLgotCSh5eXN5bnRheF9lcnJvcl8pOiBUYWtlcyB0aGUgc3RhdGUgbnVtYmVyIGFzIGFyZ3VtZW50LgotCSh5eXJlZHVjZV9wcmludF8pOiBVc2UgdGhlIGFyZ3VtZW50IHl5cnVsZSwgbm90IHRoZSBmb3JtZXIKLQlhdHRyaWJ1dGUgeXluXy4KLQotMjAwNS0wOS0yNiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIGJvb3RzdHJhcCAoZ251bGliX21vZHVsZXMpOiBBZGQgdmVyaWZ5LgotCSogbGliLy5jdnNpZ25vcmU6IEFkZCB2ZXJpZnkuaC4KLQkqIHNyYy9nZXRhcmdzLmM6IFVzZSBBUkdNQVRDSF9WRVJJRlkgcmF0aGVyIHRoYW4gdmVyaWZ5LgotCSogc3JjL3N5c3RlbS5oICh2ZXJpZnkpOiBSZW1vdmUuCi0JSW5jbHVkZSB2ZXJpZnkuaCBpbnN0ZWFkLgotCSogc3JjL3RhYmxlcy5jICh0YWJsZXNfZ2VuZXJhdGUpOiBVc2UgbmV3IEFQSSBmb3IgJ3ZlcmlmeScuCi0KLTIwMDUtMDktMjEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiB0ZXN0cy9sb2NhbC5hdCAoX0FUX0JJU09OX09QVElPTl9QVVNIREVGUyk6IERvIG5vdCB1c2UKLQlsb2NhbCB2YXJpYWJsZXMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCAneXknLgotCSogdGVzdHMvY2FsYy5hdCAoX0FUX0RBVEFfQ0FMQ19ZKTogTGlrZXdpc2UuCi0JVHJpdmlhbCBjaGFuZ2VzIGZyb20gSm9lbCBFLiBEZW5ueS4KLQotCSogYm9vdHN0cmFwIChnbnVsaWJfbW9kdWxlcyk6IFJlbW92ZSBhbGxvY2EuICBCaXNvbiBkb2Vzbid0IG5lZWQKLQlpdCBpdHNlbGYuCi0JKiBzcmMvbWFpbi5jIChtYWluKSBbQ19BTExPQ0FdOiBEb24ndCBmbHVzaCBhbGxvY2EnZWQgbWVtb3J5OyB3ZQotCWRvbid0IHVzZSBhbGxvY2EgYW55IG1vcmUuCi0KLQkqIGRhdGEveWFjYy5jIFtZWVNUQUNLX1VTRV9BTExPQ0EgJiYgIWRlZmluZWQgX19HTlVDX18gJiYgISBkZWZpbmVkCi0JX19CVUlMVElOX1ZBX0FSR19JTkNSICYmICEgZGVmaW5lZCBfQUlYICYmICEgZGVmaW5lZCBfTVNDX1ZFUiAmJgotCWRlZmluZWQgX0FMTE9DQV9IXTogRG9uJ3QgaW5jbHVkZSA8c3RkbGliLmg+OyBub3QgbmVlZGVkIGluIHRoaXMgY2FzZS4KLQkqIHRlc3RzL3RvcnR1cmUuYXQgKEV4cGxvZGluZyB0aGUgU3RhY2sgU2l6ZSB3aXRoIEFsbG9jYSk6IEFkanVzdAotCXRvIG1hdGNoIHlhY2MuYywgdG8gdGVzdCBtb3JlIGhvc3RzLgotCi0yMDA1LTA5LTIwICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogZGF0YS95YWNjLmMgKFlZU0laRV9UKTogUmVpbmRlbnQgdG8gbWFrZSBpdCBjbGVhcmVyLiAgVGhpcwotCWRvZXNuJ3QgYWZmZWN0IGJlaGF2aW9yLgotCShZWVNUQUNLX0FMTE9DKSBbWVlTVEFDS19VU0VfQUxMT0NBXTogSW1wcm92ZSBzdXBwb3J0IGZvcgotCVNvbGFyaXMsIEFJWCwgTVNDLgotCShfU1RETElCX0gpOiBSZW5hbWVkIGZyb20gWVlJTkNMVURFRF9TVERMSUJfSC4gIEFsbCB1c2VzIGNoYW5nZWQuCi0JVGhpcyB3b3JrcyBhIGJpdCBiZXR0ZXIgd2l0aCBnbGliYywgaWYgdXNlciBjb2RlIGhhcyBhbHJlYWR5IGluY2x1ZGVkCi0Jc3RkbGliLmguCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoQmlzb24gUGFyc2VyKTogRG9jdW1lbnQgdGhhdCB1c2VycyBjYW4ndAotCWFyYml0cmFyaWx5IHVzZSBtYWxsb2MgYW5kIGZyZWUgZm9yIG90aGVyIHB1cnBvc2VzLiAgRG9jdW1lbnQKLQl0aGF0IDxhbGxvY2EuaD4gYW5kIDxtYWxsb2MuaD4gbWlnaHQgYmUgaW5jbHVkZWQuCi0JKFRhYmxlIG9mIFN5bWJvbHMpOiBVbmRlciBZWVNUQUNLX1VTRV9BTExPQ0EsIERvbid0IGNsYWltIHRoYXQgdGhlCi0JdXNlciBtdXN0IGRlY2xhcmUgYWxsb2NhLgotCi0JKiBIQUNLSU5HIChyZWxlYXNlKTogRm9yd2FybiB0aGUgVHJhbnNsYXRpb24gUHJvamVjdCBhYm91dAotCXN0YWJsZSByZWxlc2VzLgotCi0yMDA1LTA5LTIwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS9nbHIuYzogVXNlIGI0X3Rva2VuX2VudW1zLCBub3QgYjRfdG9rZW5fZW51bXNfZGVmaW5lcy4KLQotMjAwNS0wOS0xOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIGRhdGEveWFjYy5jIChZWVNJWkVfTUFYSU1VTSk6IE5ldyBtYWNyby4KLQkoWVlTVEFDS19BTExPQ19NQVhJTVVNKTogVXNlIGl0LgotCSh5eXN5bnRheF9lcnJvcik6IE5ldyBmdW5jdGlvbi4KLQkoeXlwYXJzZSkgW1lZRVJST1JfVkVSQk9TRV06IERvbid0IGxlYWsgbWVtb3J5IGluZGVmaW5pdGVseSBpZgotCW11bHRpcGxlIHN5bnRheCBlcnJvcnMgYXJlIHJlcG9ydGVkLCBhbmQgYWxsb2NhIGlzIGJlaW5nIHVzZWQuCi0JSW5zdGVhZCwgcmVhbGxvY2F0ZSBidWZmZXJzIHR3aWNlIGFzIGJpZyBlYWNoIHRpbWUsIHNvIHRoYXQKLQl3ZSB3YXN0ZSBhdCBtb3N0IGhhbGYgdGhlIGFsbG9jYXRlZCBtZW1vcnkuICBTdGFydCB3aXRoIGEgc21hbGwKLQkoMTI4LWJ5dGUpIGJ1ZmZlciB0aGF0IHdpbGwgc3VmZmljZSBpbiBtb3N0IGNhc2VzIGFueXdheS4KLQlVc2UgeXlzeW50YXhfZXJyb3IgdG8gZG8gbW9zdCBvZiB0aGUgd29yay4KLQotCSogZG9jL2Jpc29uLnRleGluZm8gKEVycm9yIFJlcG9ydGluZywgVGFibGUgb2YgU3ltYm9scyk6Ci0JeXluZXJycyBpcyB0aGUgbnVtYmVyIG9mIGVycm9ycyByZXBvcnRlZCwgbm90IHRoZSBudW1iZXIgb2YKLQllcnJvcnMgZW5jb3VudGVyZWQuCi0KLQkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0IChEdXBsaWNhdGVkIHVzZXIgZGVzdHJ1Y3RvciBmb3IgbG9va2FoZWFkKToKLQlNYXJrIGl0IGFzIGV4cGVjdGVkIHRvIGZhaWwuCi0JQ2FzdCByZXN1bHQgb2YgbWFsbG9jOyBwcm9ibGVtIHJlcG9ydGVkIGJ5IHR3bGV2b0B4czRhbGwubmwuCi0JKiB0ZXN0cy9hY3Rpb25zLmF0LCB0ZXN0cy9jYWxjLmF0LCB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdDoKLQlEb24ndCBzdGFydCB1c2VyLWNvZGUgc3ltYm9scyB3aXRoICJ5eSIsIHRvIGF2b2lkIG5hbWUgc3BhY2UgcHJvYmxlbXMuCi0KLTIwMDUtMDktMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JUmVtb3ZlIHRoZSB0cmFpdHMsIGZhaWxlZCBleHBlcmltZW50LgotCUl0IG5ldmVyIHByb3ZlZCB1c2VmdWwsIGFuZCBhbnl3YXkgYmVjYXVzZSBvZiB0aGUgY3VycmVudAotCWRlZmluaXRpb24sIGl0IHdhcyBub3QgcG9zc2libGUgdG8gaGF2ZSBzZXZlcmFsIHNwZWNpYWxpemF0aW9uIG9mCi0JdGhpcyB0cmFpdHMsIG1ha2luZyBpdCB1c2VsZXNzLgotCSogZGF0YS9sYWxyMS5jYyAoeXk6dHJhaXRzKTogUmVtb3ZlLgotCUlubGluZSBpdHMgZGVmaW5pdGlvbnMgaW4gdGhlIHBhcnNlciBjbGFzcy4KLQotMjAwNS0wOS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHRlc3RzL2F0bG9jYWwuaW4gKExJQlMpOiBQYXNzIElOVExMSUJTIHRvIGFkZHJlc3MgZmFpbHVyZXMgb24gYXQKLQlsZWFzdCBNYWMgT1NYIHdpdGggYSAvdXNyL2xvY2FsIGluc3RhbGwgb2YgZ2V0dGV4dC4KLQotMjAwNS0wOS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvbGFscjEuY2MgKHl5cGFyc2UpOiBSZW5hbWUgeXlsb29rYSBhbmQgeXlpbG9va2EgYXMgeXljaGFyCi0JYW5kIHl5dG9rZW4gZm9yIHNpbWlsYXJpdHkgd2l0aCB0aGUgb3RoZXIgc2tlbGV0b25zLgotCi0yMDA1LTA5LTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogTkVXUywgY29uZmlndXJlLmFjOiB1cGRhdGUgdmVyc2lvbiBudW1iZXIgdG8gMi4xYS4KLQotMjAwNS0wOS0xNiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIE5FV1M6IFZlcnNpb24gMi4xLgotCi0JKiBORVdTOiBSZW1vdmUgbm90aWNlIG9mIHl5dG5hbWUgY2hhbmdlLCBzaW5jZSBpdCB3YXMgbmV2ZXIgaW4gYW4KLQlvZmZpY2lhbCByZWxlYXNlLgotCSogZGF0YS9nbHIuYyAoeXlkZXN0cm95R0xSU3RhdGUpOiBSZW5hbWUgbG9jYWwgdmFyIHRvIGF2b2lkIHNoYWRvd2luZwotCWRpYWdub3N0aWMuCi0JKiBzcmMvb3V0cHV0LmMgKHByZXBhcmUpOiBMaWtld2lzZS4KLQkqIGRhdGEvbGFscjEuY2MgKFlZRVJST1JfVkVSQk9TRV9JRik6IE5ldyBtYWNyby4KLQkoeXlzeW50YXhfZXJyb3JfKTogVXNlIGl0IHRvIGF2b2lkIEdDQyB3YXJuaW5nIHdoZW4gWVlFUlJPUl9WRVJCT1NFCi0JaXMgbm90IGRlZmluZWQuICBUaGlzIGlzIGFuIGF3ZnVsIGhhY2ssIGJ1dCBpdCdzIGVub3VnaCBmb3Igbm93LgotCUFsbCBjYWxsZXJzIGNoYW5nZWQuCi0JKiB0ZXN0cy9nbHItcmVncmVzc2lvbi1hdCAobWFrZV92YWx1ZSk6IEFyZ3MgYXJlIGNvbnN0IHBvaW50ZXJzIG5vdywKLQl0byBhdm9pZCBHQ0Mgd2FybmluZy4KLQkoRHVwbGljYXRlZCB1c2VyIGRlc3RydWN0b3IgZm9yIGxvb2thaGVhZCk6IE5ldyB0ZXN0LiAgQ3VycmVudGx5Ci0Jc2tpcHBlZC4gIEl0IGZhaWxzIG9uIG15IGhvc3QgYnV0IEknbSBub3Qgc3VyZSBpdCdsbCBhbHdheXMgZmFpbC4KLQotMjAwNS0wOS0xNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9zeW10YWIuaCAoc3RydWN0IHN5bWJvbCk6IERlY2xhcmUgdGhlIHByaW50ZXIgYW5kIGRlc3RydWN0b3IKLQlhcyBjb25zdCwgdG8gYXZvaWQgYWNjaWRlbnRhbCBjYWxscyB0byBmcmVlLgotCShzeW1ib2xfZGVzdHJ1Y3Rvcl9zZXQsIHN5bWJvbF9wcmludGVyX3NldCk6IEFkanVzdC4KLQkqIHNyYy9zeW10YWIuYzogQWRqdXN0LgotCi0yMDA1LTA5LTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS9jLm00IChiNF90b2tlbl9lbnVtcyk6IE5ldy4KLQkoYjRfdG9rZW5fZGVmaW5lcyk6IFJlbmFtZSBhcy4uLgotCShiNF90b2tlbl9lbnVtc19kZWZpbmVzKTogdGhpcy4KLQkoYjRfdG9rZW5fZGVmaW5lcyk6IE5ldywgb3V0cHV0IG9ubHkgdGhlICNkZWZpbmVzLgotCSogZGF0YS95YWNjLmMsIGRhdGEvZ2xyLmM6IEFkanVzdC4KLQkqIGRhdGEvbGFscjEuY2M6IFVzZSBiNF90b2tlbl9lbnVtcyBpbnN0ZWFkIG9mIGI0X3Rva2VuX2VudW1zX2RlZmluZXMuCi0JKiBkYXRhL2MubTQgKGI0X3l5ZGVzdHJ1Y3RfZ2VuZXJhdGUsIGI0X3l5c3ltcHJpbnRfZ2VuZXJhdGUpOiBEZWZpbmUKLQlhcyBkZWZhdWx0IHZhbHVlcy4KLQotMjAwNS0wOS0xNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvbGFscjEuY2MgKHl5bGV4Xyk6IFJlbW92ZSwgaW5saW5lIGl0cyBjb2RlLgotCSh5eXJlcG9ydF9zeW50YXhfZXJyb3JfKTogUmVtb3ZlLCByZXBsYWNlZCBieS4uLgotCSh5eXN5bnRheF9lcnJvcl8pOiB0aGlzIHdoaWNoIHJldHVybnMgYSBzdHJpbmcgYW5kIGxlYXZlcyB0byB0aGUKLQljYWxsZXIgdGhlIGNhbGwgdG8gdGhlIHVzZXJzJyBlcnJvciBmdW5jdGlvbi4KLQkoeXlsb29rYV8sIHl5aWxvb2thXywgeXlsdmFsLCB5eWxsb2MsIHl5ZXJyb3JfcmFuZ2VfLCB5eXZhbCwgeXlsb2MpOgotCU1vdmUgZnJvbSBtZW1iZXJzIG9mIHRoZSBwYXJzZXIgb2JqZWN0Li4uCi0JKHl5bG9va2EsIHl5aWxvb2thLCB5eWx2YWwsIHl5bGxvYywgeXllcnJvcl9yYW5nZSwgeXl2YWwsIHl5bG9jKToKLQl0byBsb2NhbCB2YXJpYWJsZXMgb2YgdGhlIHBhcnNlIGZ1bmN0aW9uLgotCi0yMDA1LTA5LTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZG9jL2Jpc29uLnRleGluZm8gKENhbGMrKyBQYXJzZXIpOiBEb24ndCBwcm9tb3RlIGRlZmluaW5nIFlZRU9GCi0Jc2luY2UgaXQncyBpbiBCaXNvbidzIG5hbWUgc3BhY2UuCi0KLTIwMDUtMDktMTUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBkYXRhL2dsci5jICh5eXJlc29sdmVWYWx1ZSk6IEFkZCBkZWZhdWx0IGNhc2UgdG8gcGFjaWZ5Ci0JZ2NjIC1Xc3dpdGNoLWRlZmF1bHQuICBQcm9ibGVtIHJlcG9ydGVkIGJ5IHR3bGV2b0B4czRhbGwubmwuCi0KLQkqIE5FV1M6IERvY3VtZW50IHdoZW4geXlwYXJzZSBzdGFydGVkIHRvIHJldHVybiAyLgotCSogZG9jL2Jpc29uLnRleGluZm8gKFBhcnNlciBGdW5jdGlvbik6IERvY3VtZW50IHdoZW4geXlwYXJzZQotCXJldHVybnMgMi4KLQotCSogZGF0YS9sYWxyMS5jYzogUmV2ZXJ0IHBhcnQgb2YgcHJldmlvdXMgY2hhbmdlLCBhcyBpdCdzIGluY29tcGF0aWJsZS4KLQkoYjRfZmlsZW5hbWVfdHlwZSk6IFJlbmFtZWQgYmFjayBmcm9tIGI0X2ZpbGVfbmFtZV90eXBlLiAgQWxsIHVzZXMKLQljaGFuZ2VkLgotCShjbGFzcyBwb3NpdGlvbik6IGZpbGVfbmFtZSAtPiBmaWxlbmFtZSAocmV2ZXJ0aW5nKS4gIEFsbCB1c2VzIGNoYW5nZWQuCi0KLTIwMDUtMDktMTQgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBleGFtcGxlcy9jYWxjKysvTWFrZWZpbGUuYW0gKCQoY2FsY19zb3VyY2VzX2dlbmVyYXRlZCkpOiBEb24ndAotCWRvIGFueXRoaW5nIGlmICRAIGV4aXN0cy4gIFRoaXMgcmV2ZXJ0cyBwYXJ0IG9mIHRoZSAyMDA1LTA3LTA3Ci0JcGF0Y2guCi0KLTIwMDUtMDktMTEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IERvIG5vdCBkaXN0cmlidXRlIFJFRkVSRU5DRVM7IGl0Ci0JY29udGFpbnMgb2Jzb2xldGUgaW5mb3JtYXRpb24gYW5kIGlzbid0IHdvcnRoIGRpc3RyaWJ1dGluZyBhcyBhCi0Jc2VwYXJhdGUgZmlsZSBhbnl3YXkuCi0JKiBkYXRhL2dsci5jIFtkZWZpbmVkIFlZU0VUSk1QXTogRG9uJ3QgaW5jbHVkZSA8c2V0am1wLmg+LgotCShZWUpNUF9CVUYsIFlZU0VUSk1QLCBZWUxPTkdKTVApIFshZGVmaW5lZCBZWVNFVEpNUF06IE5ldyBtYWNyb3MuCi0JQWxsIHVzZXMgb2Ygam1wX2J1Ziwgc2V0am1wLCBsb25nam1wIGNoYW5nZWQgdG8gdXNlIHRoZXNlIGluc3RlYWQuCi0JKHl5cGFyc2UpOiBBYm9ydCBpZiB1c2VyIGNvZGUgdXNlcyBsb25nam1wIHRvIHRocm93IGFuIHVuZXhwZWN0ZWQKLQl2YWx1ZS4KLQotMjAwNS0wOS0wOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIGRhdGEvYy5tNCAoYjRfaWRlbnRpZmljYXRpb24pOiBEZWZpbmUgWVlCSVNPTl9WRVJTSU9OLgotCVN1Z2dlc3RlZCBieSB0d2xldm9AeHM0YWxsLm5sLgotCi0JKiBkYXRhL2dsci5jIChZWUNISzEpOiBEbyBub3QgYXNzdW1lIFlZRSBpcyBpbiByYW5nZS4KLQlUaGlzIGF2b2lkcyBhIGRpYWdub3N0aWMgZnJvbSBnY2MgLVdzd2l0Y2gtZW51bS4KLQlQcm9ibGVtIHJlcG9ydGVkIGJ5IHR3bGV2b0B4czRhbGwubmwuCi0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvOiBEb24ndCB1c2UgImZpbGVuYW1lIiwgYXMgcGVyIEdOVSBjb2RpbmcKLQlzdGFuZGFyZHMuICBVc2UgImZpbGUgbmFtZSIgb3IgImZpbGUiIG9yICJuYW1lIiwgZGVwZW5kaW5nIG9uCi0JdGhlIGNvbnRleHQuCi0JKEludm9jYXRpb24pOiBUaGUgb3V0cHV0IG9mICJiaXNvbiBoYWNrL2Zvby55IiBnb2VzIHRvIGZvby50YWIuYywKLQlub3QgdG8gaGFjay9mb28udGFiLmMuCi0JKENhbGMrKyBUb3AgTGV2ZWwpOiAybmQgYXJnIG9mIG1haW4gaXMgbm90IGNvbnN0LgotCSogZGF0YS9nbHIuYzogYjRfZmlsZW5hbWUgLT4gYjRfZmlsZV9uYW1lLgotCSogZGF0YS9sYWxyMS5jYzogTGlrZXdpc2UuICBBbHNvLCBiNF9maWxlbmFtZV90eXBlIC0+IGI0X2ZpbGVfbmFtZV90eXBlLgotCUFsbCB1c2VzIGNoYW5nZWQuCi0JKGNsYXNzIHBvc2l0aW9uKTogZmlsZW5hbWUgLT4gZmlsZV9uYW1lLiAgQWxsIHVzZXMgY2hhbmdlZC4KLQkqIGRhdGEveWFjYy5jOiBiNF9maWxlbmFtZSAtPiBiNF9maWxlX25hbWUuCi0JKiBsaWIvYml0c2V0Lmg6IGZpbGVuYW1lIC0+IGZpbGVfbmFtZSBpbiBsb2NhbCB2YXJzLgotCSogbGliL2JpdHNldF9zdGF0cy5jOiBMaWtld2lzZS4KLQkqIHNyYy9maWxlcy5jOiBMaWtld2lzZS4KLQkqIHNyYy9zY2FuLXNrZWwubCAoIkBvdXRwdXQgIi4qXG4pOiBMaWtld2lzZS4KLQkqIHNyYy9maWxlcy5jIChmaWxlX25hbWVfc3BsaXQpOiBSZW5hbWVkIGZyb20gZmlsZW5hbWVfc3BsaXQuCi0JKiBzcmMvbXVzY2xlX3RhYi5jIChtdXNjbGVfaW5pdCk6IE91dHB1dCBiNF9maWxlX25hbWUsIG5vdCBiNF9maWxlbmFtZS4KLQotMjAwNS0wOS0wOCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIGxpYi8uY3ZzaWdub3JlOiBBZGQgcGlwZS1zYWZlci5jLCBzdGRpby0tLmgsIHVuaXN0ZC0tLmgsCi0JdG8gYWNjb21tb2RhdGUgbGF0ZXN0IGdudWxpYi4KLQotCSogdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQgKER1cGxpY2F0ZSByZXByZXNlbnRhdGlvbiBvZiBtZXJnZWQgdHJlZXMpOgotCUFkZCBjYXN0cyB0byBwYWNpZnkgZysrLiAgUHJvYmxlbSByZXBvcnRlZCBieSB0d2xldm9AeHM0YWxsLm5sLgotCi0JKiBib290c3RyYXA6IEFkZCBjb21tZW50IGFzIHRvIHdoeSB0aGUgQU1fTEFOR0lORk9fQ09ERVNFVCBoYWNrIGlzCi0JbmVlZGVkLgotCi0yMDA1LTA4LTI2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogZGF0YS9nbHIuYyAoeXlkZXN0cm95R0xSU3RhdGUpOiBSZW5hbWVkIGZyb20geXlkZXN0cm95U3RhY2tJdGVtLgotCUFsbCB1c2VzIGNoYW5nZWQuICBJbnZva2UgdXNlciBkZXN0cnVjdG9yIGFmdGVyIGFuIGVycm9yIGR1cmluZyBhCi0Jc3BsaXQgcGFyc2UgKHRyaXZpYWwgY2hhbmdlIGZyb20gSm9lbCBFLiBEZW5ueSkuCi0KLQkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0Ci0JKFVzZXIgZGVzdHJ1Y3RvciBhZnRlciBhbiBlcnJvciBkdXJpbmcgYSBzcGxpdCBwYXJzZSk6ICBOZXcgdGVzdCBjYXNlLgotCVByb2JsZW0gcmVwb3J0ZWQgYnkgSm9lbCBFLiBEZW5ueSBpbjoKLQlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA1LTA4L21zZzAwMDI5Lmh0bWwKLQotMjAwNS0wOC0yNSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIFJFQURNRS1jdnM6IEdpdmUgVVJMcyBmb3IgcmVjb21tZW5kZWQgdG9vbHMuCi0JTWVudGlvbiBHemlwIHZlcnNpb24gcHJvYmxlbSwgYW5kIGJvb3RzdHJhcHBpbmcgaXNzdWVzLgotCVJlbW92ZSB0cm91Ymxlc2hvb3Rpbmcgc2VjdGlvbiwgYXMgaXQncyBzb21ld2hhdCBvYnNvbGV0ZS4KLQotCSogYm9vdHN0cmFwIChub19jYWNoZSk6IE5ldyB2YXIsIHRvIGFjY29tbW9kYXRlIGRpZmZlcmVudCB3Z2V0Ci0JdmFyaWFudHMuICBVc2UgaXQgaW5zdGVhZCBvZiAnLUMgb2ZmJy4gIFByb2JsZW0gcmVwb3J0ZWQgYnkKLQl0d2xldm9AeHM0YWxsLm5sLgotCi0JKiBkYXRhL2dsci5jICh5eWRlc3Ryb3lTdGFja0l0ZW0pOiBOZXcgZnVuY3Rpb24uCi0JKHl5cmVjb3ZlclN5bnRheEVycm9yLCB5eXJldHVybik6IFVzZSBpdCB0byBpbXByb3ZlIHF1YWxpdHkgb2YKLQlkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICBQcm9ibGVtIHJlcG9ydGVkIGJ5IEpvZWwgRS4gRGVubnkuCi0KLTIwMDUtMDgtMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiB0ZXN0cy9sb2NhbC5hdCAoQVRfQ09NUElMRV9DWFgpOiBQYXNzICRMSU5LUyB0b28uCi0KLTIwMDUtMDgtMjQgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBkYXRhL2dsci5jICh5eXJlY292ZXJTeW50YXhFcnJvciwgeXlyZXR1cm4pOgotCURvbid0IGludm9rZSBkZXN0cnVjdG9yIG9uIHVucmVzb2x2ZWQgZW50cmllcy4KLQkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0Ci0JKFVzZXIgZGVzdHJ1Y3RvciBmb3IgdW5yZXNvbHZlZCBHTFIgc2VtYW50aWMgdmFsdWUpOiBOZXcgdGVzdCBjYXNlLgotCVByb2JsZW0gcmVwb3J0ZWQgYnkgSm9lbCBFLiBEZW5ueSBpbjoKLQlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA1LTA4L21zZzAwMDE2Lmh0bWwKLQotMjAwNS0wOC0yMSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIGxpYi8uY3ZzaWdub3JlOiBSZW1vdmUgcmVhbGxvYy5jLCBzdHJuY2FzZWNtcC5jLCB4c3RyZHVwLmMuCi0JQWRkIHN0cm5sZW4uYy4KLQkqIG00Ly5jdnNpZ25vcmU6IFJlbW92ZSBjb2Rlc2V0Lm00LCBnZXR0ZXh0Lm00LCBsaWItbGQubTQsCi0JbGliLXByZWZpeC5tNCwgcG8ubTQuCi0KLQkqIGRhdGEvZ2xyLmMgKHl5cmV0dXJuKTogVXNlICJDbGVhbnVwOiIgcmF0aGVyIHRoYW4gIkVycm9yOiIKLQlpbiB5eWRlc3RydWN0IGRpYWdub3N0aWMsIHNpbmNlIGl0IG1pZ2h0IG5vdCBiZSBhbiBlcnJvci4KLQlQcm9ibGVtIHJlcG9ydGVkIGJ5IEpvZWwgRGVubnkgbmVhciBlbmQgb2YKLQk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2hlbHAtYmlzb24vMjAwNS0wNy9tc2cwMDA0MC5odG1sPi4KLQkqIGRhdGEvbGFscjEuY2MgKHl5ZXJ0dXJuKTogTGlrZXdpc2UuCi0JKiBkYXRhL3lhY2MuYyAoeXlyZXR1cm4pOiBMaWtld2lzZS4KLQkqIHRlc3RzL2NhbGMuYXQgKF9BVF9DSEVDS19DQUxDX0VSUk9SKTogQWRqdXN0IHRvIHRoZSBhYm92ZSBjaGFuZ2UuCi0KLQkqIHNyYy9maWxlcy5jOiBSZW1vdmUgb2Jzb2xldGUgRklYTUUgY29tbWVudC4KLQotCSogZGF0YS9nbHIuYyAoWVlfU1lNQk9MX1BSSU5UKTogQXBwZW5kIGEgbmV3bGluZSwgZm9yIGNvbnNpc3RlbmN5Ci0Jd2l0aCB0aGUgb3RoZXIgdGVtcGxhdGVzLCBhbmQgdG8gZml4IGJvZ3VzIHJ1bi1vbiBtZXNzYWdlcyBzdWNoCi0JYXMgdGhlIG9uZSByZXBvcnRlZCBhdCB0aGUgZW5kIG9mCi0JPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9oZWxwLWJpc29uLzIwMDUtMDcvbXNnMDAwNDAuaHRtbD4uCi0JQWxsIGNhbGxlcnMgY2hhbmdlZCB0byBhdm9pZCB0aGUgbmV3bGluZS4KLQkoeXlwcm9jZXNzT25lU3RhY2spOiBPdXRwdXQgdHdvIGxpbmVzIHJhdGhlciB0aGFuIG9uZSwgdG8gYWNjb21tb2RhdGUKLQl0aGUgYWJvdmUgY2hhbmdlLiAgVGhpcyBjaGFuZ2VzIHRoZSBkZWJ1ZyBvdXRwdXQgZm9ybWF0IHNsaWdodGx5LgotCi0JKiBkYXRhL2dsci5jICh5eXJlc29sdmVWYWx1ZSk6IEZpeCByZWR1bmRhbnQgcGFyc2UgdHJlZSBwcm9ibGVtCi0JcmVwb3J0ZWQgYnkgSm9lbCBFLiBEZW5ueSBpbgotCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA1LTA4L21zZzAwMDA0Lmh0bWw+Ci0JKHRyaXZpYWwgY2hhbmdlKS4KLQkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0IChEdXBsaWNhdGUgcmVwcmVzZW50YXRpb24gb2YgbWVyZ2VkIHRyZWVzKToKLQlOZXcgdGVzdCwgZnJvbSBKb2VsIEUuIERlbm55IGluOgotCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvaGVscC1iaXNvbi8yMDA1LTA3L21zZzAwMDEzLmh0bWw+LgotCSogVEhBTktTOiBBZGQgSm9lbCBFLiBEZW5ueS4KLQotCSogY29uZmlndXJlLmFjIChBQ19JTklUKTogQnVtcCB0byAyLjBjLgotCi0yMDA1LTA3LTI0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogTkVXUzogVmVyc2lvbiAyLjBiLgotCi0JKiBNYWtlZmlsZS5hbSAoU1VCRElSUyk6IFB1dCBleGFtcGxlcyBiZWZvcmUgdGVzdHMsIHNvIHRoYXQKLQkibWFrZSBjaGVjayIgZG9lc24ndCBmaW5pc2ggd2l0aCAiQWxsIDEgdGVzdHMgcGFzc2VkIi4KLQotCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoVG9rZW4gZGVmaW5pdGlvbnMpOiBEb24ndCByZWx5IG9uCi0JQVRfUEFSU0VSX0NIRUNLIGZvciBkYXRhIHRoYXQgY29udGFpbnMgYmFja3NsYXNoZXMuICBJdCBjdXJyZW50bHkKLQl1c2VzICdlY2hvJywgYW5kICdlY2hvJyBpc24ndCBwb3J0YWJsZSBpZiBpdHMgYXJndW1lbnQgY29udGFpbnMKLQliYWNrc2xhc2hlcy4gIFByb2JsZW0gZm91bmQgb24gT3BlbkJTRCAzLjQuICBBbHNvLCBkbyBub3QgYXNzdW1lCi0JdGhhdCB0aGUgYnl0ZSAnXDB4ZmYnIGlzIG5vdCBwcmludGFibGUgaW4gdGhlIEMgbG9jYWxlOyBpdCBpcywKLQl1bmRlciBPcGVuQlNEIDMuNCAoISkuICBMdWNraWx5LCAnXDB4ODAnIHRocm91Z2ggJ1wweDllJyBhcmUKLQlub3QgcHJpbnRhYmxlLCBzbyB1c2UgJ1wweDgxJyB0byB0ZXN0LgotCi0JKiBkYXRhL2dsci5jIChZWU9QVElPTkFMX0xPQyk6IERlZmluZSBldmVuIGlmIGl0J3Mgbm90IGEgcmVjZW50Ci0JdmVyc2lvbiBvZiBHQ0MsIHNpbmNlIHRoZSBtYWNybyBpcyB1c2VkIHdpdGggbm9uLUdDQyBjb21waWxlcnMuCi0KLQlGaXggY29yZSBkdW1wIHJlcG9ydGVkIGJ5IFBhYmxvIERlIE5hcG9saSBpbgotCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDUtMDcvbXNnMDAwNTMuaHRtbD4uCi0JKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChJbnZhbGlkIGlucHV0cyB3aXRoIHt9KTogTmV3IHRlc3QuCi0JKiBzcmMvcGFyc2UtZ3JhbS55ICh0b2tlbl9uYW1lKTogVHJhbnNsYXRlIHR5cGUgYmVmb3JlIHVzaW5nCi0JaXQgYXMgYW4gaW5kZXguCi0KLQkqIGRhdGEvZ2xyLmMgKEFUVFJJQlVURV9VTlVTRUQpOiBSZW1vdmUsIHNpbmNlIGl0IGluZnJpbmdlcyBvbgotCXRoZSB1c2VyJ3MgbmFtZSBzcGFjZS4gIEFsbCB1c2VzIGNoYW5nZWQgdG8gX19hdHRyaWJ1dGVfXwotCSgoX191bnVzZWRfXykpLgotCSh5eUZhaWwsIHl5TWVtb3J5RXhoYXVzdGVkLCB5eXJlcG9ydEFtYmlndWl0eSk6Ci0JQWRkIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKS4KLQotCSogZXRjL2NsY29tbWl0OiBSZW1vdmUuICBXZSB3ZXJlbid0IHVzaW5nIGl0LCBhbmQgaXQgZmFpbGVkCi0JIm1ha2UgbWFpbnRhaW5lci1kaXN0Y2hlY2siLgotCSogTWFrZWZpbGUubWFpbnQ6IE1lcmdlIGZyb20gY29yZXV0aWxzLgotCShDVlNfTElTVCwgQ1ZTX0xJU1RfRVhDRVBUKTogTmV3IG1hY3Jvcy4KLQkoc3ludGF4LWNoZWNrLXJ1bGVzKTogQ2hhbmdlIGxpc3Qgb2YgcnVsZXMgYXMgZGVzY3JpYmVkIGJlbG93LgotCShzY19jYXN0X29mX2FsbG9jYV9yZXR1cm5fdmFsdWUsIHNjX2RkX21heF9zeW1fbGVuZ3RoKToKLQkoc2NfZmlsZV9zeXN0ZW0sIHNjX29ic29sZXRlX3N5bWJvbHMsIHNjX3Byb2hpYml0X2F0b2lfYXRvZik6Ci0JKHNjX3Byb2hpYml0X2ptX2luX200LCBzY19yb290X3Rlc3RzLCBzY190aWdodF9zY29wZSk6Ci0JKHNjX3RyYWlsaW5nX3NwYWNlKTogTmV3IHJ1bGVzLgotCShzY194YWxsb2NfaF9pbl9zcmMpOiBSZW1vdmUuCi0JKHNjX2Nhc3Rfb2ZfYXJndW1lbnRfdG9fZnJlZSwgc2NfY2FzdF9vZl94X2FsbG9jX3JldHVybl92YWx1ZSk6Ci0JKHNjX3NwYWNlX3RhYiwgc2NfZXJyb3JfZXhpdF9zdWNjZXNzLCBzY19jaGFuZ2Vsb2cpOgotCShzY19zeXN0ZW1faF9oZWFkZXJzLCBzY19zdW5fb3NfbmFtZXMsIHNjX3VubWFya2VkX2RpYWdub3N0aWNzKToKLQkobWFrZWZpbGUtY2hlY2ssIHBvLWNoZWNrLCBhdXRob3JfbWFya19jaGVjayk6Ci0JKG1ha2VmaWxlX3BhdGhfc2VwYXJhdG9yX2NoZWNrLCBjb3B5cmlnaHQtY2hlY2spOgotCVVzZSBncmVwIC1uLCB0byBtYWtlIGl0IGVhc2llciB0byBmaW5kIHZpb2xhdGlvbnMuCi0JVXNlIENWU19MSVNUIGFuZCBDVlNfTElTVF9FWENFUFQuCi0JKGhlYWRlcl9yZWdleHAsIGhfcmUpOiBSZW1vdmUuCi0JKGRkX2MpOiBOZXcgbWFjcm8uCi0JKHNjX2RkX21heF9zeW1fbGVuZ3RoLCAucmUtbGlzdCwgbmV3cy1kYXRlLWNoZWNrKTogTmV3IHJ1bGVzLgotCShteS1kaXN0Y2hlY2spOiBVc2UgbW9yZS1tb2Rlcm4gR0NDIGZsYWdzLgotCShzaWduYXR1cmVzLCAlLmFzYyk6IFJlbW92ZS4KLQkocmVsLWZpbGVzLCBhbm5vdW5jZW1lbnQpOiBSZW1vdmUgc2lnbmF0dXJlcy4KLQlSZXN0b3JlIG9sZCB1cGRhdGluZyBjb2RlLCBldmVuIHRob3VnaCB3ZSBkb24ndCB1c2UgaXQsIHNvCi0JdGhhdCB3ZSdyZSB0aGUgc2FtZSBhcyBjb3JldXRpbHMuCi0JKGFscGhhLCBiZXRhLCBtYWpvcik6IERlcGVuZCBvbiBuZXdzLWRhdGUtY2hlY2suCi0JTWFrZSB0aGUgdXBsb2FkIGNvbW1hbmRzLgotCi0JKiBkYXRhL2MubTQsIGRhdGEvbGFscjEuY2MsIGRhdGEveWFjYy5jOiBOb3JtYWxpemUgd2hpdGUgc3BhY2UuCi0JKiBsaWIvYWJpdHNldC5oLCBsaWIvYmJpdHNldC5oLCBsaWIvYml0c2V0Lmg6IExpa2V3aXNlLgotCSogbGliL2JpdHNldF9zdGF0cy5jLCBsaWIvZWJpdHNldC5oLCBsaWIvbGJpdHNldC5jOiBMaWtld2lzZS4KLQkqIGxpYi9saWJpdHNldC5oLCBsaWIvdGltZXZhci5jLCBsaWIvdmJpdHNldC5oOiBMaWtld2lzZS4KLQkqIHNyYy9NYWtlZmlsZS5hbSwgc3JjL2dyYW0uYywgc3JjL211c2NsZV90YWIuaDogTGlrZXdpc2UuCi0JKiBzcmMvcGFyc2UtZ3JhbS55LCBzcmMvc3lzdGVtLmgsIHNyYy90YWJsZXMuYywgc3JjL3ZjZy5jOiBMaWtld2lzZS4KLQkqIHNyYy92Y2dfZGVmYXVsdHMuaCwgdGVzdHMvY3h4LXR5cGUuYXQsIHRlc3RzL2V4aXN0aW5nLmF0OiBMaWtld2lzZS4KLQkqIHRlc3RzL3NldHMuYXQ6IExpa2V3aXNlLgotCi0JKiBkYXRhL200c3VnYXIvbTRzdWdhci5tNDogU3luYyBmcm9tIEF1dG9jb25mLCBleGNlcHQgdGhhdAotCXdlIGNvbW1lbnQgb3V0IHRoZSBBdXRvY29uZiB2ZXJzaW9uIG51bWJlci4KLQkqIGRvYy9iaXNvbi50ZXhpbmZvIChDYWxjKysgU2Nhbm5lcik6IERvbid0IHVzZSBhdG9pLCBhcwotCWl0J3MgZXJyb3ItcHJvbmUgYW5kICJtYWtlIG1haW50YWluZXItZGlzdGNoZWNrIiByZWplY3RzIGl0LgotCi0JKiBsaWIvc3VicGlwZS5jOiBJbmNsdWRlIDxmY250bC5oPiB3aXRob3V0IGNoZWNraW5nIGZvciBIQVZFX0ZDTlRMX0guCi0JSW5kZW50IGNhbGxzIHRvICJlcnJvciIgdG8gcGFjaWZ5ICJtYWtlIG1haW50YWluZXItZGlzdGNoZWNrIiwKLQl3aGVuIHRoZSBjYWxscyBhcmUgbm90IGludGVuZGVkIHRvIGJlIHRyYW5zbGF0ZWQuCi0JKiBtNC9zdWJwaXBlLm00IChCSVNPTl9QUkVSRVFfU1VCUElQRSk6IERvbid0IGNoZWNrIGZvciBmY250bC5oLgotCi0JKiBzcmMvTWFrZWZpbGUuYW0gKERFRlMpOiBVc2UgKz0sIHRvIHBhY2lmeQotCSJtYWtlIG1haW50YWluZXItZGlzdGNoZWNrIi4KLQkoYmlzb25fU09VUkNFUyk6IEFkZCBzY2FuLXNrZWwuaC4KLQkoc2NfdGlnaHRfc2NvcGUpOiBOZXcgcnVsZSwgZnJvbSBjb3JldXRpbHMuCi0KLQkqIHNyYy9maWxlcy5jIChzcmNfZXh0ZW5zaW9uLCBoZWFkZXJfZXh0ZW5zaW9uKToKLQlOb3cgc3RhdGljLCBub3QgZXh0ZXJuLgotCSogc3JjL2dldGFyZ3MuYyAoc2hvcnRfb3B0aW9ucyk6IExpa2V3aXNlLgotCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlX3RhYmxlKTogTGlrZXdpc2UuCi0JKiBzcmMvcGFyc2UtZ3JhbS55IChjdXJyZW50X2NsYXNzLCBjdXJyZW50X3R5cGUsIGN1cnJlbnRfcHJlYyk6Ci0JTGlrZXdpc2UuCi0JKiBzcmMvcmVhZGVyLmMgKGdyYW1tYXJfZW5kLCBwcmV2aW91c19ydWxlX2VuZCk6IExpa2V3aXNlLgotCSogc3JjL2dldGFyZ3MuaDogUmVkbyBjb21tZW50cyB0byBwYWNpZnkgIm1ha2UgbWFpbnRhaW5lci1kaXN0Y2hlY2siLgotCSogc3JjL21haW4uYyAobWFpbik6IENhc3QgYmluZHRleHRkb21haW4gYW5kIHRleHRkb21haW4gY2FsbHMgdG8KLQl2b2lkLCB0byBhdm9pZCB3YXJuaW5nIHdoZW4gTkxTIGlzIGRpc2FibGVkLgotCSogc3JjL291dHB1dC5jOiBJbmNsdWRlIHNjYW4tc2tlbC5oLgotCShzY2FuX3NrZWwpOiBSZW1vdmUgZGVjbCwgc2luY2Ugc2Nhbi1za2VsLmggZG9lcyB0aGlzLgotCShvdXRwdXRfc2tlbGV0b24pOgotCUluZGVudCBjYWxscyB0byAiZXJyb3IiIHRvIHBhY2lmeSAibWFrZSBtYWludGFpbmVyLWRpc3RjaGVjayIuCi0JKiBzcmMvcHJpbnRfZ3JhcGguYzogRG9uJ3QgaW5jbHVkZSA8b2JzdGFjay5oPiwgYXMgc3lzdGVtLmggZG9lcyB0aGlzLgotCSogc3JjL3JlYWRlci5oIChncmFtX2VuZCwgZ3JhbV9saW5lbm8pOiBOZXcgZGVjbHMgdG8gcGFjaWZ5Ci0JIm1ha2UgbWFpbnRhaW5lci1kaXN0Y2hlY2siLgotCSogc3JjL3NjYW4tc2tlbC5sIChza2VsX2xleCwgc2tlbF9nZXRfbGluZW5vLCBza2VsX2dldF9pbik6Ci0JKHNrZWxfZ2V0X291dCwgc2tlbF9nZXRfbGVuZywgc2tlbF9nZXRfdGV4dCwgc2tlbF9zZXRfbGluZW5vKToKLQkoc2tlbF9zZXRfaW4sIHNrZWxfc2V0X291dCwgc2tlbF9nZXRfZGVidWcsIHNrZWxfc2V0X2RlYnVnKToKLQkoc2tlbF9sZXhfZGVzdHJveSwgc2Nhbl9za2VsKTogTW92ZSB0aGVzZSBkZWNscyB0by4uLgotCSogc3JjL3NjYW4tc2tlbC5oOiBOZXcgZmlsZS4KLQkqIHNyYy91bmlxc3RyLmMgKHVuaXFzdHJfYXNzZXJ0KToKLQlJbmRlbnQgY2FsbHMgdG8gImVycm9yIiB0byBwYWNpZnkgIm1ha2UgbWFpbnRhaW5lci1kaXN0Y2hlY2siLgotCi0JKiB0ZXN0cy9NYWtlZmlsZS5hbSAoJChzcmNkaXIpL3BhY2thZ2UubTQpOiBVc2UgJChWQVIpLAotCW5vdCBAVkFSQC4KLQotCSogdGVzdHMvdG9ydHVyZS5hdDogUmV2YW1wIHRvIGF2b2lkIG1pc3VzZSBvZiBhdG9pIHRoYXQKLQkibWFrZSBtYWludGFpbmVyLWRpc3RjaGVjayIgY29tcGxhaW5lZCBhYm91dC4KLQotCSogZXhhbXBsZXMvZXh0ZXhpIChtZXNzYWdlKTogRG9uJ3QgcHJpbnQgYSBtZXNzYWdlIG1vcmUgdGhhbiBvbmNlLAotCWFuZCBvbWl0IGxpbmUtbnVtYmVyIGRlY29yYXRpb24gdGhhdCBtYWtlcyBFbWFjcyBjb21waWxlIHRoaW5rCi0JdGhhdCBpbmZvcm1hdGl2ZSBtZXNzYWdlcyBhcmUgd29ydGggd29ycnlpbmcgYWJvdXQuCi0KLTIwMDUtMDctMjIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBjb25maWd1cmUuYWM6IFVwZGF0ZSB2ZXJzaW9uIG51bWJlci4KLQotCSogTWFrZWZpbGUuYW0gKFNVQkRJUlMpOiBBZGQgZXhhbXBsZXM7IHNvbWVob3cgdGhpcyBnb3QgcmVtb3ZlZAotCWFjY2lkZW50YWxseS4KLQkqIGV4YW1wbGVzL2NhbGMrKy9jYWxjKystcGFyc2VyLnl5OiBSZW1vdmUgZnJvbSBDVlMsIGFzIGl0J3MKLQlhdXRvZ2VuZXJhdGVkIGJ5IHRoZSBtYWludGFpbmVyLgotCSogZXhhbXBsZXMvY2FsYysrLy5jdnNpZ25vcmU6IEFkZCAqLnl5LgotCi0JKiBsaWIvYml0c2V0LmMgKGJpdHNldF9hbGxvYyk6IERvbid0IGNhc3QgeGNhbGxvYyByZXN1bHQuCi0JKiBsaWIvYml0c2V0X3N0YXRzLmMgKGJpdHNldF9zdGF0c19pbml0KTogTGlrZXdpc2UuCi0JKiBsaWIvYml0c2V0di5jIChiaXRzZXR2X2FsbG9jKTogTGlrZXdpc2UuCi0KLQkqIHBvL1BPVEZJTEVTLmluOiBBZGQgbGliL3hhbGxvYy1kaWUuYzsgcmVtb3ZlIGxpYi94bWFsbG9jLmMuCi0KLQkqIHNyYy9yZWxhdGlvbi5jIChyZWxhdGlvbl90cmFuc3Bvc2UpOiBSZXdyaXRlIHRvIGF2b2lkIGJvZ3VzIGNvbXBsYWludAotCWZyb20gbWFpbnRhaW5lci1kaXN0Y2hlY2sgYWJvdXQgY2FzdGluZyB0aGUgYXJndW1lbnQgb2YgJ2ZyZWUnLgotCi0JKiBORVdTOiBNZW50aW9uIHJlY2VudCB5eXRuYW1lIGNoYW5nZXMuCi0JKiBUSEFOS1M6IEFkZCBBbnRob255IEhlYWRpbmcsIHR3bGV2b0B4czRhbGwubmwuCi0KLQkqIGJvb3RzdHJhcDogRm9yIHRyYW5zbGF0aW9ucyB0aGF0IGhhdmUgbm90IHlldCBiZWVuIHVwZ3JhZGVkIHRvCi0JdGhlIG5ldyBydW50aW1lLXBvIGRvbWFpbiwgcHJpbWUgdGhlIHB1bXAgYnkgZXh0cmFjdGluZyB0aGUKLQlyZWxldmFudCBzdHJpbmdzIGZyb20gdGhlIG9ic29sZXRlIHRyYW5zbGF0aW9ucy4gIFRoaXMgY29kZSBjYW4gYmUKLQlyZW1vdmVkIG9uY2UgdGhlIGJpc29uLXJ1bnRpbWUgZG9tYWluIGhhcyBiZWVuIHRyYW5zbGF0ZWQgYnkgZWFjaAotCXRlYW0uCi0KLQkqIHNyYy9zY2FuLWdyYW0ubCAoPFNDX1BSRV9DT0RFPi4pOiBEb24ndCBkb3VibGUtcXVvdGUgdG9rZW4gbmFtZXMsCi0Jbm93IHRoYXQgdG9rZW4gbmFtZXMgYXJlIGFscmVhZHkgcXVvdGVkLgotCi0JRml4IHByb2JsZW0gcmVwb3J0ZWQgYnkgQW50aG9ueSBIZWFkaW5nLgotCSogZGF0YS9nbHIuYyAoWVlUT0tFTl9UQUJMRSk6IE5ldyBtYWNyby4KLQkoeXl0bmFtZSk6IERlZmluZSBpZiBZWVRPS0VOX1RBQkxFLgotCSogZGF0YS95YWNjLmMgKFlZVE9LRU5fVEFCTEUsIHl5dG5hbWUpOiBMaWtld2lzZS4KLQkqIGRhdGEvbGFscjEuY2MgKFlZVE9LRU5fVEFCTEUsIHl5dG5hbWVfKTogTGlrZXdpc2UuCi0JKFlZRVJST1JfVkVSQk9TRSk6IERlZmluZSB0aGUgc2FtZSB3YXkgdGhlIG90aGVyIHNrZWxldG9ucyBkby4KLQkqIHNyYy9vdXRwdXQuYyAocHJlcGFyZV9zeW1ib2xzKTogT3V0cHV0IHRva2VuX3RhYmxlX2ZsYWcuCi0KLTIwMDUtMDctMjEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBkYXRhL2dsci5jICh5eWluaXRHTFJTdGFjaywgeXlyZXR1cm4pOiBEb24ndCBjYWxsIG1hbGxvYwotCWFnYWluIGlmIHRoZSBmaXJzdCBjYWxsIGZhaWxzLgotCi0JKiBkYXRhL2dsci5jICh5eXRuYW1lcnIpOiBOZXcgZnVuY3Rpb24uCi0JKHl5cmVwb3J0U3ludGF4RXJyb3IpOiBVc2UgaXQgdG8gZGVxdW90ZSBtb3N0IHN0cmluZyBsaXRlcmFscy4KLQkqIGRhdGEvbGFscjEuYyAoeXl0bmFtZV8pOiBSZW5hbWVkIGZyb20geXluYW1lXywgZm9yIGNvbXBhdGliaWxpdHkKLQl3aXRoIG90aGVyIHNrZWxldG9ucy4gIEFsbCB1c2VzIGNoYW5nZWQuCi0JKHl5dG5hbWVlcnJfKTogTmV3IGZ1bmN0aW9uLgotCSh5eXJlcG9ydF9zeW50YXhfZXJyb3IpOiBVc2UgaXQgdG8gZGVxdW90ZSBtb3N0IHN0cmluZyBsaXRlcmFscy4KLQkqIGRhdGEveWFjYy5jICh5eXRuYW1lcnIpOiBOZXcgZnVuY3Rpb24uCi0JKHl5ZXJybGFiKTogVXNlIGl0IHRvIGRlY29kZSBtb3N0IHN0cmluZyBsaXRlcmFscy4KLQkqIGRvYy9iaXNvbi50ZXhpbmZvIChEZWNsIFN1bW1hcnksIENhbGxpbmcgQ29udmVudGlvbik6Ci0JQ2xhcmlmeSBxdW90aW5nIGNvbnZlbnRpb24gb2YgeXl0bmFtZS4KLQkqIHNyYy9vdXRwdXQuYyAocHJlcGFyZV9zeW1ib2xzKTogUXVvdGUgYWxsIG5hbWVzLiAgVGhpcyB1bmRvZXMKLQl0aGUgMjAwNS0wNC0xNyBjaGFuZ2UsIHdoaWNoIGlzIG5vdyBhY2NvbXBsaXNoZWQgKG1vc3RseSkgdmlhCi0JY2hhbmdlcyBpbiB0aGUgcGFyc2VycyBhcyBkZXNjcmliZWQgYWJvdmUuCi0JKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChUb2tlbiBkZWZpbml0aW9ucywgV2ViMmMgQWN0aW9ucyk6Ci0JVW5kbyBtb3N0IDIwMDUtMDQtMTcgY2hhbmdlIGhlcmUsIHRvby4KLQotMjAwNS0wNy0yMCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQlGaXggbW9yZSBwcm9ibGVtcyByZXBvcnRlZCBieSB0d2xldm9AeHM0YWxsLm5sLgotCSogdGVzdHMvY3h4LXR5cGUuYXQ6IERvbid0IHBpcGUgb3V0cHV0IG9mIC4vdHlwZXMgdGhyb3VnaCBzZWQgdG8KLQlyZW1vdmUgdHJhaWxpbmcgc3BhY2VzLiAgVGhpcyBsb3NlcyB0aGUgZXhpdCBzdGF0dXMgb2YgLi90eXBlcywKLQlhbmQgaXNuJ3QgbmVlZGVkIHNpbmNlIC4vdHlwZXMgc2hvdWxkbid0IGJlIGVtaXR0aW5nIHRyYWlsaW5nCi0Jc3BhY2VzLgotCSogZGF0YS9nbHIuYyAoeXlyZXR1cm4pOiBEb24ndCBwb3Agc3RhY2sgaWYgeXlpbml0U3RhdGVTZXQgZmFpbGVkLAotCWFzIHRoZSBzdGFjayBpc24ndCB2YWxpZCBpbiB0aGF0IGNhc2UuCi0KLQkqIHNyYy9zY2FuLWdyYW0ubCAoZ3JhbV9nZXRfbGluZW5vLCBncmFtX2dldF9pbiwgZ3JhbV9nZXRfb3V0KToKLQkoZ3JhbV9nZXRfbGVuZywgZ3JhbV9nZXRfdGV4dCwgZ3JhbV9zZXRfbGluZW5vLCBncmFtX3NldF9pbik6Ci0JKGdyYW1fc2V0X291dCwgZ3JhbV9nZXRfZGVidWcsIGdyYW1fc2V0X2RlYnVnLCBncmFtX2xleF9kZXN0cm95KToKLQlBZGQgZGVjbGFyYXRpb25zIHRvIHBhY2lmeSAiZ2NjIC1XbWlzc2luZy1wcm90b3R5cGVzIiB3aGVuIGZsZXggMi41LjMxCi0JaXMgdXNlZC4KLQkqIHNyYy9zY2FuLXNrZWwubCAoc2tlbF9nZXRfbGluZW5vLCBza2VsX2dldF9pbiwgc2tlbF9nZXRfb3V0KToKLQkoc2tlbF9nZXRfbGVuZywgc2tlbF9nZXRfdGV4dCwgc2tlbF9zZXRfbGluZW5vLCBza2VsX3NldF9pbik6Ci0JKHNrZWxfc2V0X291dCwgc2tlbF9nZXRfZGVidWcsIHNrZWxfc2V0X2RlYnVnLCBza2VsX2xleF9kZXN0cm95KToKLQlMaWtld2lzZS4KLQotCSogdGVzdHMvY3h4LXR5cGUuYXQgKF9BVF9URVNUX0dMUl9DWFhUWVBFUyk6IFdvcmsgZXZlbiB3aXRoCi0Jb3Zlcmx5LXBpY2t5IGNvbXBpbGVycyB0aGF0IHJlamVjdCAnY2hhciAqZm9vID0gImJhciI7Jy4KLQotCSogc3JjL3N5bXRhYi5jIChTWU1CT0xfQVRUUl9QUklOVCwgc3ltYm9sX3ByaW50KTogRGlyZWN0IG91dHB1dAotCXRvIEZJTEUgKiBwYXJhbWV0ZXIsIG5vdCB0byBzdGRlcnIuICBUaGlzIGZpeGVzIGEgdHlwbyBpbnRyb2R1Y2VkCi0JaW4gdGhlIDIwMDUtMDctMTIgY2hhbmdlLgotCi0JKiBsaWIvc3VicGlwZS5jIChjcmVhdGVfc3VicGlwZSk6IFJld3JpdGUgc2xpZ2h0bHkgdG8gYXZvaWQKLQl3YXJuaW5ncyBmcm9tIEdDQyA0LgotCi0JKiBkYXRhL2dsci5jICh5eWV4cGFuZEdMUlN0YWNrLCB5eWFkZERlZmVycmVkQWN0aW9uLCB5eWV4cGFuZEdMUlN0YWNrKToKLQkoeXlnbHJTaGlmdERlZmVyLCB5eXNwbGl0U3RhY2spOgotCVJlbW92ZSB1bnVzZWQgcGFyYW1ldGVycyBiNF9wdXJlX2Zvcm1hbHMuICBBbGwgdXNlcyBjaGFuZ2VkLgotCSh5eWdsclNoaWZ0KTogUmVtb3ZlIHVudXNlZCBwYXJhbWV0ZXJzIGI0X3VzZXJfZm9ybWFscy4KLQlBbGwgdXNlcyBjaGFuZ2VkLgotCSh5eWdsclJlZHVjZSk6IFJlbW92ZWQgdW51c2VkIHBhcmFtZXRlciB5eWxvY3AuICBBbGwgdXNlcyBjaGFuZ2VkLgotCi0yMDA1LTA3LTE4ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCURlc3RydWN0b3IgY2xlYW51cHMgYW5kIHJlZ3VsYXJpemF0aW9uIGFtb25nIHRoZSB0aHJlZSBza2VsZXRvbnMuCi0JKiBORVdTOiBEb2N1bWVudCB0aGUgYmVoYXZpb3IgY2hhbmdlcy4KLQkqIGRhdGEvZ2xyLmMgKHl5cmVjb3ZlclN5bnRheEVycm9yKTogRG9uJ3QgYm90aGVyIHRvIHBvcCB0aGUKLQlzdGFjayBiZWZvcmUgZmFpbGluZywgYXMgdGhlIGNsZWFudXAgY29kZSB3aWxsIGRvIGl0IGZvciB1cyBub3cuCi0JKiBkYXRhL2xhbHIxLmNjICh5eWVycmxhYik6IExpa2V3aXNlLgotCSogZGF0YS9nbHIuYyAoeXlwYXJzZSk6IFBvcCBldmVyeXRoaW5nIG9mZiB0aGUgc3RhY2sgYmVmb3JlCi0JZnJlZWluZyBpdCwgc28gdGhhdCBkZXN0cnVjdG9ycyBnZXQgY2FsbGVkIHByb3Blcmx5LgotCSogZGF0YS9sYWxyMS5jYyAoeXlyZXR1cm4pOiBMaWtld2lzZS4KLQkqIGRhdGEveWFjYy5jICh5eXJldHVybik6IFBvcCBhbmQgZGVzdHJveSB0aGUgc3RhcnQgc3ltYm9sLCB0b28uCi0JVGhpcyBpcyBtb3JlIGNvbnNpc3RlbnQuCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoRGVzdHJ1Y3RvciBEZWNsKTogTWVudGlvbiBtb3JlIHJlYXNvbnMKLQl3aHkgZGVzdHJ1Y3RvcnMgbWlnaHQgYmUgY2FsbGVkLiAgMS44NzUgLT4gMi4xLgotCShEZXN0cnVjdG9yIERlY2wsIERlY2wgU3VtbWFyeSwgVGFibGUgb2YgU3ltYm9scyk6Ci0JU29tZSBFbmdsaXNoLWxhbmd1YWdlIGNsZWFudXBzIGZvciAlZGVzdHJ1Y3Rvci4KLQkqIHRlc3RzL2FjdGlvbnMuYXQgKF9BVF9DSEVDS19QUklOVEVSX0FORF9ERVNUUlVDVE9SKToKLQlBZGQgb3V0cHV0IGxpbmUgZm9yIGRlc3RydWN0b3Igb2Ygc3RhcnQgc3ltYm9sLgotCSogdGVzdHMvY2FsYy5hdCAoQVRfQ0hFQ0tfQ0FMQyk6IEFkZCBvbmUgdG8gbGluZSBjb3VudHMsCi0JYmVjYXVzZSBvZiB0aGF0IHNhbWUgZXh0cmEgb3V0cHV0IGxpbmUuCi0KLQkqIE5FV1M6IERvY3VtZW50IG1pbm9yIHdvcmRpbmcgY2hhbmdlcyBpbiBkaWFnbm9zdGljcyBvZgotCUJpc29uLWdlbmVyYXRlZCBwYXJzZXJzLgotCSogZGF0YS9nbHIuYyAoeXlNZW1vcnlFeGhhdXN0ZWQpOiBSZW5hbWVkIGZyb20geXlTdGFja092ZXJmbG93LgotCVJlbW92ZSB1bnVzZWQgZm9ybWFscy4gIEFsbCB1c2VzIGNoYW5nZWQuCi0JKHl5cmVwb3J0QW1iaWd1aXR5KTogImFtYmlndWl0eSBkZXRlY3RlZCIgLT4gInN5bnRheCBpcyBhbWJpZ3VvdXMiLgotCSh5eXBhcnNlKTogUmVuYW1lIHl5b3ZlcmZsb3dsYWIgdG8geXlleGhhdXN0ZWRsYWIuCi0JKiBkYXRhL3lhY2MuYyAoeXlwYXJzZSk6ICJwYXJzZXIgc3RhY2sgb3ZlcmZsb3ciIC0+ICJtZW1vcnkgZXhoYXVzdGVkIi4KLQlSZW5hbWUgeXlvdmVyZmxvd2FiIHRvIHl5ZXhoYXVzdGVkbGFiLgotCVdoZW4gbWVtb3J5IGV4aGF1c3Rpb24gb2NjdXJzIGR1cmluZyBzeW50YXgtZXJyb3IgcmVwb3J0aW5nLAotCXJlcG9ydCBpdCBzZXBhcmF0ZWx5IHJhdGhlciB0aGFuIGluIGEgc2luZ2xlIGRpYWdub3N0aWM7IHRoaXMKLQllYXNlcyB0cmFuc2xhdGlvbi4KLQkqIGRvYy9iaXNvbi50ZXhpbmZvIChNZW1vcnkgTWFuYWdlbWVudCk6IFJlbmFtZWQgZnJvbSBTdGFjayBPdmVyZmxvdy4KLQkoTWVtb3J5IEV4aGF1c3RlZCk6IFJlbmFtZWQgZnJvbSBQYXJzZXIgU3RhY2sgT3ZlcmZsb3cuCi0JUmV2YW1wIHdvcmRpbmcgc2xpZ2h0bHkgdG8gcHJlZmVyICJtZW1vcnkgZXhoYXVzdGlvbiIuCi0JKiB0ZXN0cy9hY3Rpb25zLmF0OiAicGFyc2VyIHN0YWNrIG92ZXJmbG93IiAtPiAibWVtb3J5IGV4aGF1c3RlZCIuCi0KLQkqIGRhdGEvYy5tNCAoYjRfeXlzeW1wcmludF9nZW5lcmF0ZSk6IFVzZSBZWUZQUklOVEYsIG5vdCBmcHJpbnRmLgotCi0JQWRkIGkxOG4gc3VwcG9ydCB0byB0aGUgR0xSIHNrZWxldG9uLiAgUGFydGlhbGx5IGZpeCB0aGUgQysrCi0Jc2tlbGV0b247IGEgQysrIGV4cGVydCBuZWVkcyB0byBmaW5pc2ggdGhpcy4gIFJlbW92ZSBkZWJ1Z2dpbmcKLQltc2dpZHM7IHRoZXJlJ3MgbGl0dGxlIHBvaW50IHRvIGhhdmluZyB0aGVtIHRyYW5zbGF0ZWQsIHNpbmNlIHRoZXkKLQljYW4gYmUgdW5kZXJzdG9vZCBvbmx5IGJ5IHNvbWVvbmUgd2hvIGNhbiByZWFkIHRoZQotCShFbmdsaXNoLWxhbmd1YWdlKSBzb3VyY2UgY29kZS4KLQotCUdlbmVyYXRlIHJ1bnRpbWUtcG8vYmlzb24tcnVudGltZS5wb3QgYXV0b21hdGljYWxseSwgc28gdGhhdCB3ZQotCWRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgZ2FyYmFnZSBnZXR0aW5nIGluIHRoYXQgZmlsZS4gIFdlJ2xsCi0JbWFrZSBzdXJlIGFmdGVyIHRoZSBuZXh0IG9mZmljaWFsIHJlbGVhc2UgdGhhdCBvbGQgbXNnaWRzIGRvbid0Ci0JZ2V0IGxvc3QuICBTZWUKLQk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwNS0wNy9tc2cwMDExOS5odG1sPi4KLQotCSogcnVudGltZS1wby9NYWtlZmlsZS5pbi5pbiwgcnVudGltZS1wby9iaXNvbi1ydW50aW1lLnBvdDogUmVtb3ZlLgotCU5vdyBhdXRvLWdlbmVyYXRlZC4KLQkqIFBBQ0tBR0lORzogRG9uJ3QgY2xhaW0gdGhhdCBHYXdrLCBHQ0MsIFBlcmwgdXNlIHRoaXMgbWV0aG9kIHlldC4KLQlGaXggdHlwb3MgaW4gZXhwbGFuYXRpb25zIG9mIHRoZSBydW50aW1lIGZpbGUuCi0JKiBib290c3RyYXA6IENoYW5nZSBnZXR0ZXh0IGtleXdvcmQgZnJvbSBZWUkxOE4gdG8gWVlfLgotCVVzZSBzdGFuZGFyZCBNYWtlZmlsZS5pbi5pbiBpbiBydW50aW1lLXBvLCBzaW5jZSB3ZSdsbCBhcnJhbmdlCi0JZm9yIGJhY2t3YXJkLWNvbXBhdGlibGUgYmlzb24tcnVudGltZS5wbyBmaWxlcyBpbiBhIGRpZmZlcmVudCB3YXkuCi0JKiBkYXRhL2dsci5jIChZWV8pOiBOZXcgbWFjcm8sIGZyb20geWFjYy5jLgotCSh5eXVzZXJBY3Rpb24sIHl5cmVwb3J0QW1iaWd1aXR5LCB5eXJlcG9ydFN5bnRheEVycm9yLCB5eXBhcnNlKToKLQlUcmFuc2xhdGUgbWVzc2FnZXMgaW50ZW5kZWQgZm9yIHVzZXJzLgotCSh5eXJlcG9ydFN5bnRheEVycm9yKTogQ2hhbmdlICJ2aXJ0dWFsIG1lbW9yeSIgdG8gIm1lbW9yeSIgdG8gbWF0Y2gKLQl0aGUgd29yZGluZyBpbiB0aGUgb3RoZXIgc2tlbGV0b25zLiAgV2UgZG9uJ3Qga25vdyB0aGF0IHRoZSBtZW1vcnkKLQlpcyB2aXJ0dWFsLgotCSogZGF0YS9sYWxyMS5jYyAoWVlfKTogUmVuYW1lZCBmcm9tIF8uICBBbGwgdXNlcyBjaGFuZ2VkLgotCVVzZSBzYW1lIG1ldGhvZCB0aGF0IHlhY2MuYyB1c2VzLgotCURvbid0IHRyYW5zbGF0ZSBkZWJ1Z2dpbmcgbWVzc2FnZXMuCi0JKHl5Ojp5eXJlcG9ydF9zeW50YXhfZXJyb3IpOiBQdXQgaW4gYSBGSVhNRSBmb3IgdGhlIGkxOG4gc3R1ZmY7Ci0JaXQgZG9lc24ndCB3b3JrICh5ZXQpLCBhbmQgcmVxdWlyZXMgQysrIGV4cGVydGlzZSB0byBmaXguCi0JKiBkYXRhL3lhY2MuYyAoWVlfKTogUmVuYW1lZCBmcm9tIFlZMThOLiAgQWxsIHVzZXMgY2hhbmdlZC4KLQlNb3ZlIGRlZm4gdG8gYSBtb3JlIGxvZ2ljYWwgcGxhY2UsIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBvdGhlcgotCXNrZWxldG9ucy4KLQlEb24ndCB0cmFuc2xhdGUgZGVidWdnaW5nIG1lc3NhZ2VzLgotCURvbid0IGFzc3VtZSBsaW5lIG51bWJlcnMgZml0IGluIHVuc2lnbmVkIGludDsgdXNlIHVuc2lnbmVkIGxvbmcgZm10cy4KLQkqIGRvYy9iaXNvbi50ZXhpbmZvOiBNZW50aW9uIDxsaWJpbnRsLmg+LiAgQ2hhbmdlIGdsaWJjIGNyb3NzIHJlZmVyZW5jZQotCXRvIGdldHRleHQgY3Jvc3MgcmVmZXJlbmNlLiAgQWRkIGluZGV4aW5nIHRlcm1zLiAgTWVudGlvbiBZWUVOQUJMRV9OTFMuCi0JKiBydW50aW1lLXBvL1BPVEZJTEVTLmluOiBBZGQgZGF0YS9nbHIuYywgZGF0YS9sYWxyMS5jYy4KLQotCUZpeCB5eWVycm9yIC8geXlsZXggdGVzdCBnbGl0Y2hlcyBub3RlZCBieSB0d2xldm9AeHM0YWxsLm5sLgotCSogdGVzdHMvY3h4LXR5cGUuYXQgKF9BVF9URVNUX0dMUl9DWFhUWVBFUyk6IEhhdmUgeXllcnJvciByZXR1cm4KLQl2b2lkLCBub3QgaW50LgotCSogdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQgKEJhZGx5IENvbGxhcHNlZCBHTFIgU3RhdGVzKToKLQlMaWtld2lzZS4KLQkoSW1wcm9wZXIgaGFuZGxpbmcgb2YgZW1iZWRkZWQgYWN0aW9ucyBhbmQgZG9sbGFyKC1OKSBpbiBHTFIgcGFyc2Vycyk6Ci0JeXlsZXggc2hvdWxkIHJldHVybiAwIGF0IEVPRiByYXRoZXIgdGhhbiBhYm9ydGluZy4KLQotCUltcHJvdmUgdGVzdHMgZm9yIHN0YWNrIG92ZXJmbG93IGluIEdMUiBwYXJzZXIuCi0JUHJvYmxlbSByZXBvcnRlZCBieSB0d2xldm9AeHM0YWxsLm5sLgotCSogZGF0YS9nbHIuYyAoc3RydWN0IHl5R0xSU3RhY2spOiBSZW1vdmUgeXllcnJmbGFnIG1lbWJlci4KLQlBbGwgdXNlcyByZW1vdmVkLgotCSh5eVN0YWNrT3ZlcmZsb3cpOiBKdXN0IGxvbmdqbXAsIGJ1dCB3aXRoIHZhbHVlIDIgc28gdGhhdCBjYWxsZXIKLQljYW4gaGFuZGxlIHRoZSBwcm9ibGVtLgotCShZWUNISzEpOiBVc2UgZ290byAoYSBsYSB5YWNjLmMpIHJhdGhlciB0aGFuIHNldHRpbmcgYSBmbGFnLgotCSh5eXBhcnNlKTogTmV3IGxvY2FsIHZhcmlhYmxlIHl5cmVzdWx0IHRvIHJlY29yZCB0aGUgcmVzdWx0LgotCVVzZSByZXN1bHQgb2Ygc2V0am1wIHRvIHNldCBpdCwgcmF0aGVyIHRoYW4gc3RvcmluZyBpdGludG8KLQlzdHJ1Y3QuCi0JKHl5RG9uZSk6IFJlbW92ZSBsYWJlbC4KLQkoeXlhY2NlcHRsYWIsIHl5YWJvcnRsYWIsIHl5b3ZlcmZsb3dsYWIsIHl5cmV0dXJuKTogTmV3IGxhYmVscywKLQl0byBtaW1pYyB5YWNjLmMuICBEbyBub3QgZGlzY2FyZCBsb29rYWhlYWQgaWYgaXQncyBFT0YgKHBvc3NpYmxlCi0JaWYgWVlBQk9SVCBpcyB1c2VkKS4KLQkqIHRlc3RzL2FjdGlvbnMuYXQgKF9BVF9DSEVDS19QUklOVEVSX0FORF9ERVNUUlVDVE9SKTogRXhpdCB3aXRoCi0JeXlwYXJzZSBzdGF0dXM7IHB1dCBzdGF0dXMgPiAxIGludG8gZGlhZ25vc3RpYy4KLQlDaGVjayB0aGF0IHN0YXR1cz09MiB3b3Jrcy4KLQkqIHRlc3RzL2NhbGMuYXQsIHRlc3RzL2N4eC10eXBlLmF0LCB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdDoKLQlVc2UgZXhpdCBzdGF0dXMgMyBmb3IgZmFpbHVyZSB0byBvcGVuICh3aGljaCBzaG91bGRuJ3QgaGFwcGVuKS4KLQotMjAwNS0wNy0xNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIHRlc3RzL2NvbmZsaWN0cy5hdCAoJW5vbmFzc29jIGFuZCBlb2YpOiAgRG9uJ3QgZXhpdCB3aXRoIHN0YXR1cwotCTEgb24gc3ludGF4IGVycm9yOyBqdXN0IGxldCB5eXBhcnNlIGRvIGl0cyB0aGluZy4KLQkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0IChCYWRseSBDb2xsYXBzZWQgR0xSIFN0YXRlcyk6IExpa2V3aXNlLgotCSogdGVzdHMvdG9ydHVyZS5hdCAoQVRfREFUQV9TVEFDS19UT1JUVVJFKTogTGlrZXdpc2UuCi0JKEV4cGxvZGluZyB0aGUgU3RhY2sgU2l6ZSB3aXRoIEFsbG9jYSk6Ci0JKEV4cGxvZGluZyB0aGUgU3RhY2sgU2l6ZSB3aXRoIE1hbGxvYyk6Ci0JRXhwZWN0IGV4aXQgc3RhdHVzIDIsIG5vdCAxLCBzaW5jZSB0aGUgcGFyc2VyIGlzIHN1cHBvc2VkIHRvIGJsb3cKLQlpdHMgc3RhY2suICBQcm9ibGVtIHJlcG9ydGVkIGJ5IHR3bGV2b0B4czRhbGwubmwuCi0KLQkqIGRhdGEvZ2xyLmMgKHl5cGFyc2UpOiBEb24ndCBhc3N1bWUgdGhhdCB0aGUgaW5pdGlhbCBjYWxscwotCXRvIFlZTUFMTE9DIHN1Y2NlZWQ7IGluIHRoYXQgY2FzZSwgeXlwYXJzZSBpbmNvcnJlY3RseSByZXR1cm5lZCAwLgotCVByaW50IGEgc3RhY2stb3ZlcmZsb3cgbWVzc2FnZSBhbmQgZmFpbCBpbnN0ZWFkLgotCUluaXRpYWxpemUgdGhlIGxpbmUtbnVtYmVyIGluZm9ybWF0aW9uIGJlZm9yZSBjcmVhdGluZyB0aGUgc3RhY2ssCi0Jc28gdGhhdCB0aGUgc3RhY2stb3ZlcmZsb3cgbWVzc2FnZSBjYW4gcmVwb3J0IGxpbmUgemVybyBzYWZlbHkuCi0KLTIwMDUtMDctMTQgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JRml4IHByb2JsZW1zIHJlcG9ydGVkIGJ5IHR3bGV2b0B4czRhbGwubmwuCi0JKiBkYXRhL2dsci5jIChZWVNUQUNLRVhQQU5EQUJMRSk6IERvbid0IGRlZmluZSBpZiBhbHJlYWR5IGRlZmluZWQuCi0JKHl5dXNlck1lcmdlKTogUHJvdmlkZSBhIGRlZmF1bHQgY2FzZSBpZiBiNF9tZXJnZXJzIGlzIGVtcHR5LgotCSogdGVzdHMvY3h4LXR5cGUuYXQgKF9BVF9URVNUX0dMUl9DWFhUWVBFUyk6IERlZmluZSBZWVNUQUNLRVhQQU5EQUJMRS4KLQkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0Ci0JKEltcHJvcGVyIGhhbmRsaW5nIG9mIGVtYmVkZGVkIGFjdGlvbnMgYW5kIGRvbGxhcigtTikgaW4gR0xSIHBhcnNlcnMpOgotCUFkZCBjYXN0cyB0byBwYWNpZnkgQysrIGNvbXBpbGVycy4KLQkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0IChJbXByb3BlciBtZXJnaW5nIG9mIEdMUiBkZWxheWVkIGFjdGlvbgotCXNldHMpOiBEZWNsYXJlIHl5bGV4IGJlZm9yZSB1c2luZyBpdC4KLQkqIHRlc3RzL01ha2VmaWxlLmFtIChtYWludGFpbmVyLWNoZWNrLWcrKyk6IEZpeCBhIHN0cmF5Ci0JJChHWFgpIHRoYXQgZXNjYXBlZCB0aGUgcmVuYW1pbmcgb2YgR1hYIHRvIENYWC4gIFJlbW92ZSBib2d1cwotCXRlc3QgZm9yIHZhbGdyaW5kOyB2YWxncmluZCBpcyBpbmRlcGVuZGVudCBvZiBnKysuCi0JKG1haW50YWluZXItY2hlY2stcG9zaXgpOiBBZGQgX1BPU0lYMl9WRVJTSU9OPTIwMDExMiwgdG8gY2hlY2sKLQlmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFBPU0lYIDEwMDMuMS0yMDAxIChpZiBydW5uaW5nIGNvcmV1dGlscykuCi0JKiB0ZXN0cy9jeHgtdHlwZS5hdCAoX0FUX1RFU1RfR0xSX0NYWFRZUEVTKTogUG9ydCB0byBzdHJpY3RlciBDKysuCi0JVXNlIGEgZGVzdHJ1Y3Rvciwgc28gdGhhdCB3ZSBjYW4gZXhwYW5kIHRoZSBzdGFjay4gIENoYW5nZQotCVlZU1RZUEUgdG8gY2hhciAqIHNvIHRoYXQgd2UgY2FuIGZyZWUgaXQuICBDYXN0IHJlc3VsdCBvZiBtYWxsb2MuCi0KLTIwMDUtMDctMTMgIFBhdWwgSGlsZmluZ2VyICA8aGlsZmluZ3JAQ1MuQmVya2VsZXkuRURVPgotCi0JKiBkYXRhL2dsci5jICh5eXVzZXJBY3Rpb24pOiBGaXggdW5pbml0aWFsaXplZCB2YXJpYWJsZSB0aGF0IGNhdXNlZAotCWEgdmFsZ3JpbmQgZmFpbHVyZS4gIFByb2JsZW0gcmVwb3J0ZWQgYnkgdHdsZXZvQHhzNGFsbC5ubC4KLQotMjAwNS0wNy0xMyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIFBBQ0tBR0lORzogTmV3IGZpbGUsIHN1Z2dlc3RlZCBieSBCcnVubyBIYWlibGUgYW5kIHRha2VuIGZyb20KLQlzaW1pbGFyIHdvcmRpbmcgaW4gZ2V0dGV4dCdzIFBBQ0tBR0lORyBmaWxlLgotCSogTkVXUzogTWVudGlvbiBQQUNLQUdJTkcuCi0JKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBQQUNLQUdJTkcuCi0KLTIwMDUtMDctMTIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBORVdTOiBEb2N1bWVudCByZWNlbnQgaTE4biBpbXByb3ZlbWVudHMuCi0JKiBib290c3RyYXA6IEdldCBydW50aW1lIHRyYW5zbGF0aW9ucyBpbnRvIHJ1bnRpbWUtcG8uCi0JQ3JlYXRlIHJ1bnRpbWUtcG8gZmlsZXMgYXV0b21hdGljYWxseSwgaWYgcG9zc2libGUuCi0JKiBjb25maWd1cmUuYWM6IEludm9rZSBCSVNPTl9JMThOLCBzbyB0aGF0IHdlIGVhdCBvdXIgb3duIGRvZyBmb29kLgotCSogZGF0YS95YWNjLmM6IFJld3JpdGUgaW5jbHVzaW9uIG9mIDxsaWJpbnRsLmg+IHNvIHRoYXQgRU5BQkxFX05MUwotCWRvZXMgbm90IGluZnJpbmdlIG9uIHRoZSB1c2VyJ3MgbmFtZSBzcGFjZS4KLQkoWVlFTkFCTEVfTkxTKTogUmVuYW1lZCBmcm9tIEVOQUJMRV9CSVNPTl9OTFMuCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoSW50ZXJuYXRpb25hbGl6YXRpb24pOiBSZXZhbXAgdGhlIEVuZ2xpc2gKLQlhbmQgVGV4aW5mbyBzeW50YXggYSBiaXQsIHRvIHRyeSB0byBtYWtlIGl0IGNsZWFyZXIuCi0JKEJpc29uIE9wdGlvbnMsIE9wdGlvbiBDcm9zcyBLZXkpOiBNZW50aW9uIC0tcHJpbnQtbG9jYWxlZGlyLgotCSogbTQvYmlzb24taTE4bi5tNCAoQklTT05fSTE4Tik6IFJlbmFtZSBFTkFCTEVfQklTT05fTkxTIHRvCi0JWVlFTkFCTEVfTkxTLiAgUXVvdGUgYSBiaXQgbW9yZS4KLQkqIHJ1bnRpbWUtcG8vLmN2c2lnbm9yZTogTmV3IGZpbGUuCi0JKiBydW50aW1lLXBvL01ha2VmaWxlLmluLmluIChtb3N0bHljbGVhbik6IFJlbW92ZSAqLm9sZC5wb3QuCi0JKiBydW50aW1lLXBvL1J1bGVzLXF1b3Q6IFJlbW92ZTsgbm93IGNyZWF0ZWQgYnkgYm9vdHN0cmFwLgotCSogcnVudGltZS1wby9xdW90LnNlZDogTGlrZXdpc2UuCi0JKiBydW50aW1lLXBvL2JvbGRxdW90LnNlZDogTGlrZXdpc2UuCi0JKiBydW50aW1lLXBvL2VuQHF1b3QuaGVhZGVyOiBMaWtld2lzZS4KLQkqIHJ1bnRpbWUtcG8vZW5AYm9sZHF1b3QuaGVhZGVyOiBMaWtld2lzZS4KLQkqIHJ1bnRpbWUtcG8vaW5zZXJ0LWhlYWRlci5zaW46IExpa2V3aXNlLgotCSogcnVudGltZS1wby9yZW1vdmUtcG90Y2RhdGUuc2luOiBMaWtld2lzZS4KLQkqIHJ1bnRpbWUtcG8vTWFrZXZhcnM6IExpa2V3aXNlLgotCSogcnVudGltZS1wby9MSU5HVUFTOiBMaWtld2lzZS4KLQkqIHJ1bnRpbWUtcG8vZGUucG86IExpa2V3aXNlOyB3ZSB3aWxsIHJlbHkgb24gdGhlIHRyYW5zbGF0aW9uIHByb2plY3QKLQl0byBtYWludGFpbiB0aGlzLCBzbyAiYm9vdHN0cmFwIiBzaG91bGQgZ2V0IGl0LgotCSogc3JjL2dldGFyZy5jIChQUklOVF9MT0NBTEVESVJfT1BUSU9OKTogTGV0IHRoZSBDIGNvbXBpbGVyIGRldGVybWluZQotCWl0cyB2YWx1ZS4KLQkqIHNyYy9tYWluLmMgKG1haW4pOiBCaW5kIHRoZSBiaXNvbi1ydW50aW1lIGRvbWFpbiwgdG9vLgotCi0yMDA1LTA3LTEyICBCcnVubyBIYWlibGUgIDxicnVub0BjbGlzcC5vcmc+Ci0KLQkqIGRhdGEveWFjYy5jOiBJbmNsdWRlIDxsaWJpbnRsLmg+IHdoZW4gTkxTIGlzIGVuYWJsZWQuCi0JKFlZSTE4Tik6IFJlbmFtZWQgZnJvbSBfLiBVc2UgZGdldHRleHQgd2hlbiBOTFMgaXMgZW5hYmxlZC4KLQkqIHBvL1BPVEZJTEVTLmluOiBSZW1vdmUgYXV0b2dlbmVyYXRlZCBmaWxlIHNyYy9wYXJzZS1ncmFtLmMuCi0JKiBydW50aW1lLXBvOiBOZXcgZGlyZWN0b3J5LgotCSogcnVudGltZS1wby9NYWtlZmlsZS5pbi5pbjogTmV3IGZpbGUsIGNvcGllZCBmcm9tIHBvLywgd2l0aCBtb2RpZmllZAotCSQoRE9NQUlOKS5wb3QtdXBkYXRlIHJ1bGUsIHNvIHRoYXQgb2xkIG1lc3NhZ2VzIGFyZSBuZXZlciBkcm9wcGVkLgotCSogcnVudGltZS1wby9SdWxlcy1xdW90OiBOZXcgZmlsZSwgY29waWVkIGZyb20gcG8vLgotCSogcnVudGltZS1wby9xdW90LnNlZDogTGlrZXdpc2UuCi0JKiBydW50aW1lLXBvL2JvbGRxdW90LnNlZDogTGlrZXdpc2UuCi0JKiBydW50aW1lLXBvL2VuQHF1b3QuaGVhZGVyOiBMaWtld2lzZS4KLQkqIHJ1bnRpbWUtcG8vZW5AYm9sZHF1b3QuaGVhZGVyOiBMaWtld2lzZS4KLQkqIHJ1bnRpbWUtcG8vaW5zZXJ0LWhlYWRlci5zaW46IExpa2V3aXNlLgotCSogcnVudGltZS1wby9yZW1vdmUtcG90Y2RhdGUuc2luOiBMaWtld2lzZS4KLQkqIHJ1bnRpbWUtcG8vTWFrZXZhcnM6IE5ldyBmaWxlLgotCSogcnVudGltZS1wby9QT1RGSUxFUy5pbjogTmV3IGZpbGUuCi0JKiBydW50aW1lLXBvL0xJTkdVQVM6IE5ldyBmaWxlLgotCSogcnVudGltZS1wby9iaXNvbi1ydW50aW1lLnBvdDogTmV3IGZpbGUuCi0JKiBydW50aW1lLXBvL2RlLnBvOiBOZXcgZmlsZS4KLQkqIG00L2Jpc29uLm00OiBOZXcgZmlsZS4KLQkqIE1ha2VmaWxlLmFtIChTVUJESVJTKTogQWRkIHJ1bnRpbWUtcG8uCi0JKGFjbG9jYWxkaXIsIGFjbG9jYWxfREFUQSk6IE5ldyB2YXJpYWJsZXMuCi0JKiBjb25maWd1cmUuYWM6IEFkZCBBQ19DT05GSUdfRklMRVMgb2YgcnVudGltZS1wby9NYWtlZmlsZS5pbi4KLQlEZWZpbmUgYWNsb2NhbGRpci4KLQkqIHNyYy9nZXRhcmdzLmMgKHVzYWdlKTogRG9jdW1lbnQgLS1wcmludC1sb2NhbGVkaXIgb3B0aW9uLgotCShQUklOVF9MT0NBTEVESVJfT1BUSU9OKTogTmV3IGVudW0gaXRlbS4KLQkobG9uZ19vcHRpb25zKTogQWRkIC0tcHJpbnQtbG9jYWxlZGlyIG9wdGlvbi4KLQkoZ2V0YXJncyk6IEhhbmRsZSAtLXByaW50LWxvY2FsZWRpciBvcHRpb24uCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoQmlzb24gUGFyc2VyKTogUmVtb3ZlIHBhcmFncmFwaCBhYm91dCBfKCkuCi0JKEludGVybmF0aW9uYWxpemF0aW9uKTogTmV3IHNlY3Rpb24uCi0KLTIwMDUtMDctMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvc3ltdGFiLmgsIHNyYy9zeW10YWIuYyAoc3ltYm9sX3ByaW50KTogU3dhcCB0aGUgYXJndW1lbnRzLAotCWZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSByZXN0IG9mIHRoZSBjb2RlLgotCSogc3JjL3N5bWxpc3QuaCwgc3JjL3N5bWxpc3QuYyAoc3ltYm9sX2xpc3RfcHJpbnQpOiBEaXR0by4KLQlBZGQgc2VwYXJhdG9ycy4KLQotMjAwNS0wNy0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9wYXJzZS1ncmFtLnk6IFVzZSAlcHJpbnRlciBpbnN0ZWFkIG9mIFlZUFJJTlQuCi0KLTIwMDUtMDctMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvc3ltdGFiLmgsIHNyYy9zeW10YWIuYyAoc3ltYm9sX3ByaW50KTogTmV3LgotCSogc3JjL3N5bWxpc3QuaCwgc3JjL3N5bWxpc3QuYyAoc3ltYm9sX2xpc3RfcHJpbnQpOiBOZXcuCi0JKiBzcmMvc3ltbGlzdC5jIChzeW1ib2xfbGlzdF9uX3R5cGVfbmFtZV9nZXQpOiBSZXBvcnQgdGhlIGN1bHByaXQuCi0KLTIwMDUtMDctMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2dsci5jIChiNF9zeW5jbGluZSk6IEZpeCAoc3dhcCkgdGhlIGRlZmluaXRpb25zIG9mCi0JYjRfYXRfZG9sbGFyIGFuZCBiNF9kb2xsYXJfZG9sbGFyLgotCi0yMDA1LTA3LTExICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogZG9jL2Jpc29uLnRleGluZm8gKE15c3RlcnkgQ29uZmxpY3RzKTogQWRkIHJlZmVyZW5jZSB0byBEZVJlbWVyCi0JYW5kIFBlbm5lbGxvJ3MgcGFwZXIuCi0KLTIwMDUtMDctMDkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBkYXRhL3lhY2MuYyAoeXlwYXJzZSk6IFVuZG8gcHJldmlvdXMgcGF0Y2guICBJbnN0ZWFkLAotCXNldCB5eWxzcFswXSBhbmQgeXl2c3BbMF0gb25seSBpZiB0aGUgaW5pdGlhbCBhY3Rpb24KLQlzZXRzIHl5bGxvYyBhbmQgeXlsdmFsLCByZXNwZWN0aXZlbHkuCi0KLQkqIGRhdGEveWFjYy5jICh5eXBhcnNlKTogSW4gdGhlIGluaXRpYWwgYWN0aW9uLCBzZXQKLQl5eWxzcFswXSBhbmQgeXl2c3BbMF0gcmF0aGVyIHRoYW4geXlsbG9jIGFuZCB5eWx2YWwuCi0JVGhpcyBhdm9pZHMgdGhlIHVzZSBvZiB1bmRlZmluZWQgdmFyaWFibGVzIGlmIHRoZSBpbml0aWFsCi0JYWN0aW9uIGRvZXMgbm90IHNldCB5eWxsb2MgYW5kL29yIHl5bHZhbC4KLQotMjAwNS0wNy0wNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIGV4YW1wbGVzL2NhbGMrKy9jYWxjKystZHJpdmVyLmNjLCBleGFtcGxlcy9jYWxjKysvY2FsYysrLWRyaXZlci5oaDoKLQkqIGV4YW1wbGVzL2NhbGMrKy9jYWxjKystc2Nhbm5lci5sbCwgZXhhbXBsZXMvY2FsYysrL2NhbGMrKy5jYzoKLQlSZW1vdmUgZnJvbSBDVlMuICBUaGVzZSBmaWxlcyBhcmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQuCi0JKiBleGFtcGxlcy9leHRleGk6IENsYXJpZnkgdGhhdCB0aGlzIGZpbGUgaXMgbm93IHBhcnQgb2YgQmlzb24sCi0Jbm90IEdOVSBNNCwgYW5kIHRoYXQgaXQgd29ya3Mgd2l0aCBhbnkgUE9TSVgtY29tcGF0aWJsZSBBd2suCi0JKiBleGFtcGxlcy9jYWxjKysvTWFrZWZpbGUuYW0gKHJ1bl9leHRleGkpOiBSZW1vdmU7IG5vdCB1c2VkLgotCSgkKGNhbGNfZXh0cmFjdGVkKSk6IFJlbmFtZWQgZnJvbSAkKGNhbGNfc291cmNlc19leHRyYWN0ZWQpLAotCXNvIHRoYXQgd2UgYWxzbyBnZXQgY2FsYysrLXBhcnNlci55eS4gIEdlbmVhdGUgaXQuCi0JVXNlICQoQVdLKSwgbm90IGdhd2ssIHNpbmNlIGFueSBjb25mb3JtaW5nIEF3ayB3aWxsIGRvLgotCVB1dCBjb21tZW50IGJlZm9yZSBhY3Rpb24sIHNpbmNlIG9sZGVyICdtYWtlJyBjYW4ndCBoYW5kbGUgY29tbWVudAotCWluIGFjdGlvbi4KLQkkKEJVSUxUX1NPVVJDRVMpOiBMaXN0IGFsbCBidWlsdCBzb3VyY2VzLCBub3QganVzdCBzb21lIG9mIHRoZW0uCi0JJChNQUlOVEFJTkVSQ0xFQU5GSUxFUyk6IFJlbW92ZSAqLnN0YW1wLCBhbmQgYWxsIGJ1aWx0IHNvdXJjZXMuCi0JJCgkKHNyY2RpcikvY2FsYysrLXBhcnNlci5zdGFtcCk6IFdvcmsgZXZlbiBpZiBQT1NJWExZX0NPUlJFQ1QuCi0JJCgkKGNhbGNfc291cmNlc19nZW5lcmF0ZWQpKTogUmVtb3ZlIHVubmVjZXNzYXJ5IHRlc3QgZm9yIGV4aXN0ZW5jZQotCW9mIHRhcmdldC4gIChUaGlzIGhhZCBhIHNoZWxsIHN5bnRheCBlcnJvciBhbnl3YXk7IGEgc3RyYXkgIngiLikKLQkoY2FsY19leHRyYWN0ZWQpOiBMaXN0ICQoc3JjZGlyKS9jYWxjKystcGFyc2VyLnl5LCBub3QKLQljYWxjKystcGFyc2VyLnl5LgotCSogZXhhbXBsZXMvLmN2c2lnbm9yZSwgZXhhbXBsZXMvY2FsYysrLy5jdnNpZ25vcmU6IE5ldyBmaWxlcy4KLQotCSogYm9vdHN0cmFwIChnbnVsaWJfbW9kdWxlcyk6IEFkZCBnZXR0ZXh0LCBub3cgdGhhdCBpdCdzIG5vIGxvbmdlcgotCWltcGxpZWQgYnkgdGhlIG90aGVyIG1vZHVsZXMuCi0KLTIwMDUtMDctMDYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JQmluZCBleGFtcGxlcy9jYWxjKysgdG8gdGhlIHBhY2thZ2UuCi0JKiBleGFtcGxlcy9jYWxjKysvTWFrZWZpbGU6IFJlbW92ZSwgcmVwbGFjZWQgYnkuLi4KLQkqIGV4YW1wbGVzL2NhbGMrKy9NYWtlZmlsZS5hbTogLi4uIHRoaXMgbmV3IGZpbGUuCi0JKiBleGFtcGxlcy9jYWxjKysvdGVzdDogUmVtb3ZlIGlucHV0LgotCSogZXhhbXBsZXMvY2FsYysrL2NvbXBpbGU6IFJlbW92ZS4KLQkqIGV4YW1wbGVzL01ha2VmaWxlLmFtOiBOZXcuCi0JKiBjb25maWd1cmUuYWMsIE1ha2VmaWxlLmFtOiBBZGp1c3QuCi0JKiBkb2MvTWFrZWZpbGUuYW0gKGNsZWFuLWxvY2FsKTogTmV3LCBmb3IgbW9yZSByZWNlbnQgdGV4aTJkdmlzLgotCi0yMDA1LTA3LTA1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogZGF0YS9nbHIuYyAoeXlGYWlsKTogRHJhc3RpY2FsbHkgc2ltcGxpZnk7IHNpbmNlIHRoZSBmb3JtYXQgYXJndW1lbnQKLQluZXZlciBoYWQgYW55ICUgZGlyZWN0aXZlcywgd2UgY2FuIHNpbXBseSBwYXNzIGl0IHRvIHl5ZXJyb3IuCi0JKHl5cGFyc2UpOiBVc2UgInQgYTsgYT1iOyIgcmF0aGVyIHRoYW4gInQgYSA9IGI7IiB3aGVuIGEgd2lsbAotCWJlIG1vZGlmaWVkIGxhdGVyLCBhcyB0aGF0IGlzIHRoZSB1c3VhbCBzdHlsZSBpbiBnbHIuYy4KLQlQcm9ibGVtcyByZXBvcnRlZCBieSBQYXVsIEhpbGZpbmdlci4KLQotCVJld3JpdGUgR0xSIHBhcnNlciB0byBjYXRjaCBtb3JlIGJ1ZmZlciBvdmVycnVuLCBzdG9yYWdlIGV4aGF1c3Rpb24sCi0JYW5kIHNpemUgb3ZlcmZsb3cgZXJyb3JzLgotCSogZGF0YS9nbHIuYzogSW5jbHVkZSA8c3RkaW8uaD4gZXRjLiBhZnRlciB1c2VyIHByb2xvZywgbm90IGJlZm9yZSwKLQlpbiBjYXNlIHRoZSB1c2VyIHByb2xvZyBzZXRzIGZlYXR1cmUtdGVzdCBtYWNyb3MgbGlrZSBfR05VX1NPVVJDRS4KLQkoWVlTSVpFTUFYKTogTmV3IG1hY3JvLgotCSh5eXN0cGNweSk6IE5ldyBmdW5jdGlvbiwgdGFrZW4gZnJvbSB5YWNjLmMuCi0JKHN0cnVjdCB5eUdMUlN0YWNrLnl5c3BhY2VMZWZ0KTogTm93IHNpemVfdCwgbm90IGludC4KLQkoeXlpbml0R0xSU3RhY2ssIHl5ZnJlZUdMUnN0YWNrKTogUmVtb3ZlIHVubmVjZXNzYXJ5IGZvcndhcmQgZGVjbHMsCi0Jc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIG1haW50YWluIHRoZWlyIHNpZ25hdHVyZXMuCi0JKHl5RmFpbCk6IENoZWNrIGZvciBidWZmZXIgb3ZlcmZsb3csIGJ5IHVzaW5nIHZzbnByaW50ZiByYXRoZXIKLQl0aGFuIHZzcHJpbnRmLiAgQWxsb2NhdGUgYSBiaWdnZXIgYnVmZmVyIGlmIHBvc3NpYmxlLgotCVJlcG9ydCBhbiBlcnJvciBpZiBidWZmZXIgYWxsb2NhdGlvbiBmYWlscy4KLQkoeXlTdGFja092ZXJmbG93KTogTmV3IGZ1bmN0aW9uLgotCSh5eWluaXRTdGF0ZVNldCwgeXlpbml0R0xSU3RhY2spOiBSZXR1cm4gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlcgotCXRoZSBpbml0aWFsaXphdGlvbiB3YXMgc3VjY2Vzc2Z1bC4gIEl0IG1pZ2h0IGZhaWwgaWYgc3RvcmFnZSB3YXMKLQlleGhhdXN0ZWQuCi0JKHl5ZXhwYW5kR0xSU3RhY2spOiBBZGQgbW9yZSBjaGVja3MgZm9yIHN0b3JhZ2UgYWxsb2NhdGlvbiBmYWlsdXJlLgotCVVzZSB5eVN0YWNrT3ZlcmZsb3cgdG8gcmVwb3J0IGZhaWx1cmVzLgotCSh5eW1hcmtTdGFja0RlbGV0ZWQsIHl5Z2xyU2hpZnQsIHl5Z2xyU2hpZnREZWZlciwgeXlkb0FjdGlvbik6Ci0JKHl5c3BsaXRTdGFjaywgeXlwcm9jZXNzT25lU3RhY2ssIHl5cGFyc2UsIHl5cHN0YWNrKToKLQlEb24ndCBhc3N1bWUgc3RhY2sgbnVtYmVyIGZpdHMgaW4gaW50LgotCSh5eXNwbGl0U3RhY2spOiBDaGVjayBmb3Igc3RvcmFnZSBhbGxvY2F0aW9uIGZhaWx1cmUuCi0JKHl5c3BsaXRTdGFjaywgeXlwcm9jZXNzT25lU3RhY2spOiBBZGQgcHVyZV9mb3JtYWxzLCBzbyB0aGF0IHdlCi0JY2FuIHByaW50IGRpYWdub3N0aWNzIG9uIHN0b3JhZ2UgYWxsb2NhdGlvbiBmYWlsdXJlLiAgQWxsIGNhbGxlcnMKLQljaGFuZ2VkLgotCSh5eXJlc29sdmVWYWx1ZSk6IFVzZSB5eWJvb2wgZm9yIGJvb2xlYW4uCi0JKHl5cmVwb3J0U3ludGF4RXJyb3IpOiBDaGVjayBmb3Igc2l6ZS1jYWxjdWxhdGlvbiBvdmVyZmxvdy4KLQlUaGlzIGNvZGUgaXMgdGFrZW4gZnJvbSB5YWNjLmMuCi0JKHl5cGFyc2UpOiBDaGVjayBmb3Igc3RvcmFnZSBhbGxvY2F0aW9uIGVycm9ycyB3aGVuIGFsbG9jYXRpbmcKLQl0aGUgaW5pdGlhbCBzdGFjay4KLQotMjAwNS0wNy0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlFeHRyYWN0IGNhbGMrKyBmcm9tIHRoZSBkb2N1bWVudGF0aW9uLgotCSogZG9jL2Jpc29uLnRleGluZm8gKENhbGMrKyk6IEFkZCB0aGUgZXh0cmFjdGlvbiBtYXJrcy4KLQkqIGV4YW1wbGVzL2V4dGV4aTogTmV3LCBmcm9tIHRoZSBhYm9ydGVkIEdOVSBQcm9ncmFtbWluZyAyRS4KLQlTZXBhcmF0ZSB0aGUgZGlmZmVyZW50IHBhcmFncmFwaCBvZiBhIGZpbGUgd2l0aCBlbXB0eSBsaW5lcy4KLQkqIGV4YW1wbGVzL01ha2VmaWxlOiBVc2UgaXQgdG8gZXh0cmFjdCB0aGUgd2hvbGUgY2FsYysrIGV4YW1wbGUuCi0KLTIwMDUtMDYtMjQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoQysrIFBhcnNlciBJbnRlcmZhY2UpOiBVc2UgZGVmY3YgdG8gZGVmaW5lCi0JY2xhc3MgdHlwZWRlZnMuCi0KLTIwMDUtMDYtMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoQysrIExhbmd1YWdlIEludGVyZmFjZSk6IEZpcnN0IHN0YWIuCi0JKEMrKyBQYXJzZXJzKTogUmVtb3ZlLgotCi0yMDA1LTA2LTIyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS9sYWxyMS5jYyAoeXlsZXhfKTogSG9ub3IgJWxleC1wYXJhbS4KLQotMjAwNS0wNi0yMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlTdGFydCBhIHNldCBvZiBzaW1wbGUgZXhhbXBsZXMuCi0JKiBleGFtcGxlcy9jYWxjKysvTWFrZWZpbGUsIGV4YW1wbGVzL2NhbGMrKy9jYWxjKystZHJpdmVyLmNjLAotCSogZXhhbXBsZXMvY2FsYysrL2NhbGMrKy1kcml2ZXIuaGgsCi0JKiBleGFtcGxlcy9jYWxjKysvY2FsYysrLXBhcnNlci55eSwKLQkqIGV4YW1wbGVzL2NhbGMrKy9jYWxjKystc2Nhbm5lci5sbCwgZXhhbXBsZXMvY2FsYysrL2NhbGMrKy5jYywKLQkqIGV4YW1wbGVzL2NhbGMrKy9jb21waWxlLCBleGFtcGxlcy9jYWxjKysvdGVzdDogTmV3LgotCi0yMDA1LTA2LTA5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogZGF0YS95YWNjLmMgKG1hbGxvYywgZnJlZSkgW2RlZmluZWQgX19jcGx1c3BsdXNdOiBXcmFwIGluc2lkZQotCWV4dGVybiAiQyIge30uICBUaGlzIGZpeGVzIGEgcHJvYmxlbSByZXBvcnRlZCBieSBQYXVsIEhpbGZpbmdlciwKLQl3aGljaCBzdGVtcyBmcm9tIHRoZSAyMDA1LTA1LTI3IHBhdGNoLgotCi0yMDA1LTA2LTA2ICBQYXVsIEhpbGZpbmdlciAgPGhpbGZpbmdyQHR1bGx5LkNTLkJlcmtlbGV5LkVEVT4KLQotCSogZGF0YS9nbHIuYzogTW9kaWZ5IHRyZWF0bWVudCBvZiB1bnVzZWQgcGFyYW1ldGVycyB0byBwZXJtaXQgdXNlCi0Jb2YgZysrICh3aGljaCBkb2Vzbid0IGFsbG93IF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSBmb3IgcGFyYW1ldGVycykuCi0KLTIwMDUtMDUtMzAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JRml4IGluZnJpbmdlbWVudCBvbiB1c2VyIG5hbWUgc3BhY2UgcmVwb3J0ZWQgYnkgSmFub3MgWm9sdGFuIFN6YWJvLgotCSogZGF0YS95YWNjLmMgKHl5cGFyc2UpOiBzdHJsZW4gLT4geXlzdHJsZW4uCi0KLTIwMDUtMDUtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2xhbHIxLmNjIChfKTogTmV3LgotCVRyYW5zbGF0ZSB0aGUgdmFyaW91cyBtZXNzYWdlcy4KLQotMjAwNS0wNS0yNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQlGaXggaW5mcmluZ2VtZW50IG9uIHVzZXIgbmFtZSBzcGFjZSByZXBvcnRlZCBieSBCcnVubyBIYWlibGUuCi0JKiBkYXRhL3lhY2MuYyAoWVlTSVpFX1QpOiBEZWZpbmUgZmlyc3QsIHNvIHRoYXQgbGF0ZXIgZGVjbHMgY2FuIHVzZSBpdC4KLQlQcmVmZXIgR0NDJ3MgX19TSVpFX1RZUEVfXyBpZiBhdmFpbGFibGUsIHNvIHRoYXQgd2UgZG9uJ3QgaW5mcmluZ2Ugb24KLQl0aGUgdXNlcidzIG5hbWUgc3BhY2UuCi0JKGFsbG9jYSk6IEluY2x1ZGUgPHN0ZGxpYi5oPiB0byBnZXQgaXQsIGlmIGl0J3Mgbm90IGJ1aWx0IGluLgotCShZWU1BTExPQywgWVlGUkVFKTogRGVmaW5lIG9ubHkgaWYgbmVlZGVkLgotCShtYWxsb2MsIGZyZWUpOiBEZWNsYXJlLCBidXQgb25seSBpZiBuZWVkZWQsIGFzIHRoaXMgaW5mcmluZ2VzIG9uCi0JdGhlIHVzZXIgbmFtZSBzcGFjZS4KLQotMjAwNS0wNS0yNSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQlGaXggQmVPUywgRnJlZUJTRCwgTWFjT1MgcG9ydGluZyBwcm9ibGVtcyByZXBvcnRlZCBieSBCcnVubyBIYWlibGUuCi0JKiBsaWIvYml0c2V0LmMgKGJpdHNldF9wcmludCk6IERvbid0IGFzc3VtZSBzaXplX3QgY2FuIGJlIHByaW50ZWQKLQl3aXRoICVkIGZvcm1hdC4KLQkqIGxpYi9lYml0c2V0LmMgKG1pbiwgbWF4KTogVW5kZWYgYmVmb3JlIGRlZmluaW5nLgotCSogbGliL3ZiaXRzZXQuYyAobWluLCBtYXgpOiBMaWtld2lzZS4KLQkqIGxpYi9zdWJwaXBlLmMgKGNyZWF0ZV9zdWJwaXBlKTogU2F2ZSBsb2NhbCB2YXJpYWJsZXMgaW4gY2FzZQotCXZmb3JrIGNsb2JiZXJzIHRoZW0uCi0KLTIwMDUtMDUtMjQgIEJydW5vIEhhaWJsZSAgPGJydW5vQGNsaXNwLm9yZz4KLQotCSogdGVzdHMvc3luY2xpbmVzLmF0IChBVF9TWU5DTElORVNfQ09NUElMRSk6IEFkZCBzdXBwb3J0IGZvciB0aGUKLQllcnJvciBtZXNzYWdlIHN5bnRheCB1c2VkIGJ5IGdjYy00LjAuCi0KLTIwMDUtMDUtMjMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBSRUFETUU6IE1lbnRpb24gbTQgMS40LjMuICBSZW1vdmUgb2Jzb2xldGUgYWR2aWNlIGFib3V0Ci0JU3VuIEZvcnRlIERldmVsb3BlciA2IHVwZGF0ZSAyLCBWTVMsIGFuZCBNUy1ET1MuCi0KLQkqIGJvb3RzdHJhcDogUmVtb3ZlIHdvcmthcm91bmQgZm9yIHByb2JsZW0gSSBlbmNvdW50ZXJlZCB3aXRoCi0JZ2V0dGV4dCAwLjE0LjE7IGl0IHNlZW1zIHRvIGJlIGZpeGVkIG5vdy4KLQotMjAwNS0wNS0yMiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIE5FV1M6IFZlcnNpb24gMi4wYS4KLQotCSogc3JjL2ZpbGVzLmM6IEluY2x1ZGUgInN0ZGlvLXNhZmVyLmgiOyB0aGlzIGZpeGVzIGEgdHlwbyBpbgotCXRoZSBwcmV2aW91cyBjaGFuZ2UuCi0KLQlWYXJpb3VzIG1haW50YWluZXIgY2xlYW51cHMuCi0JKiAuY3ZzaWdub3JlOiBBZGQgYS5leGUsIGEub3V0LCBiLm91dCwsIGNvbmZbMC05XSosIGNvbmZkZWZzKiwKLQljb25mdGVzdCosIGZvciBiZW5lZml0IG9mIENWUyBjb21tYW5kcyBydW4gYXQgdGhlIHNhbWUgdGltZSBhcwotCSJjb25maWd1cmUiLiAgQWRkIGJ1aWxkLWF1eCwgc2luY2UgImJvb3RzdHJhcCIgbm93IGNyZWF0ZXMgaXQgYW5kCi0JaXRzIHN1YmZpbGVzLgotCSogTWFrZWZpbGUuY2ZnIChtb3ZlX2lmX2NoYW5nZSk6IFJlbW92ZS4KLQkqIE1ha2VmaWxlLm1haW50OiBSZW1vdmUgdGhlIHVwZGF0ZSBzdHVmZjsgd2Ugbm93IHVzZSAiYm9vdHN0cmFwIi4KLQkoZnRwLWdudSwgd3d3LWdudSwgbW92ZV9pZl9jaGFuZ2UsIGxvY2FsX3VwZGF0ZXMsIHVwZGF0ZSk6Ci0JKHBvX3JlcG8sIGRvLXBvLXVwZGF0ZSwgcG8tdXBkYXRlLCB3Z2V0X2ZpbGVzLCBnZXQtdGFyZ2V0cyk6Ci0JKGNvbmZpZy5ndWVzcy11cmxfcHJlZml4LCBjb25maWcuc3ViLXVybF9wcmVmaXgpOgotCShhbnNpMmtuci5jLXVybF9wcmVmaXgsIHRleGluZm8udGV4LXVybF9wcmVmaXgpOgotCShzdGFuZGFyZHMudGV4aS11cmxfcHJlZml4LCBtYWtlLXN0ZHMudGV4aS11cmxfcHJlZml4LCB0YWdldCwgdXJsKToKLQkoJChnZXQtdGFyZ2V0cyksIGN2cy1maWxlcywgYXV0b21ha2VfcmVwbywgd2dldC11cGRhdGUsIGN2cy11cGRhdGUpOgotCVJlbW92ZS4KLQkqIGNvbmZpZ3VyZS5hYyAoQUNfQ09ORklHX0FVWF9ESVIpOiBDaGFuZ2UgZnJvbSBjb25maWcgdG8gYnVpbGQtYXV4OwotCXRoaXMgaXMgbm93IHRoZSByZWNvbW1lbmRlZCBuYW1lLgotCSogY29uZmlnLy5jdnNpZ25vcmU6IFJlbW92ZSBjb25maWcuZ3Vlc3MsIGNvbmZpZy5ycGF0aCwgY29uZmlnLnN1YiwKLQlkZXBjb21wLCBpbnN0YWxsLXNoLCBtZGF0ZS1zaCwgbWlzc2luZywgbWtpbnN0YWxsZGlycywgdGV4aW5mby50ZXgsCi0JeWx3cmFwLiAgVGhlc2UgZmlsZXMgbm93IGdvIGludG8gYnVpbGQtYXV4LgotCSogY29uZmlnL21vdmUtaWYtY2hhbmdlOiBSZW1vdmUuCi0JKiBjb25maWcvcHJldi12ZXJzaW9uLnR4dDogQnVtcCBmcm9tIDEuNzUgdG8gMi4wLgotCi0JKiBib290c3RyYXA6IEFkZCBzdGRpby1zYWZlciwgdW5pc3RkLXNhZmVyIG1vZHVsZXMuCi0JUmVtb3ZlIG00L2dsaWJjMi5tNCAoaW50cm9kdWNlZCBieSBsYXRlc3QgZ251bGliLCBidXQKLQl3ZSBkb24ndCBuZWVkIGl0KS4KLQkqIGxpYi8uY3ZzaWdub3JlOiBBZGQgZHVwLXNhZmVyLmMsIGZkLXNhZmVyLmMsCi0JZm9wZW4tc2FmZXIuYywgc3RkaW8tc2FmZXIuaCwgdW5pc3RkLXNhZmVyLmguCi0JKiBsaWIvc3VicGlwZS5jOiBJbmNsdWRlICJ1bmlzdGQtc2FmZXIuaCIuCi0JKGNyZWF0ZV9zdWJwaXBlKTogTWFrZSBzdXJlIGFsbCB0aGUgbmV3bHktY3JlYXRlZAotCWZpbGUgZGVzY3JpcHRvcnMgYXJlID4gMiwgc28gdGhhdCBkaWFnbm9zdGljcyBkb24ndAotCWdldCBzZW50IGRvd24gdGhlbSAod2hpY2ggbWlnaHQgY2F1c2UgQmlzb24gdG8gaGFuZywgaW4gdGhlb3J5KS4KLQkqIG00Ly5jdnNpZ25vcmU6IEFkZCBzdGRpby1zYWZlci5tNCwgdW5pc3RkLXNhZmVyLm00LgotCSogc3JjL2ZpbGVzLmMgKHhmb3Blbik6IFVzZSBmb3Blbl9zYWZlciwgbm90IGZvcGVuLgotCi0JKiBkYXRhL2xhbHIxLmNjICh5eTo6XWI0X3BhcnNlcl9jbGFzc19uYW1lWzo6cGFyc2UpOiBQb3J0Ci0JeWVzdGVyZGF5J3MgeWFjYy5jIGZpeC4KLQotMjAwNS0wNS0yMSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIGRhdGEvZ2xyLmMsIGRhdGEvbGFscjEuY2M6IFVwZGF0ZSBjb3B5cmlnaHQgZGF0ZS4KLQotCUZpeCBhIGRlc3RydWN0b3IgYnVnIHJlcG9ydGVkIGJ5IFdvbGZnYW5nIFNwcmF1bCBpbgotCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDUtMDUvbXNnMDAwNDIuaHRtbD4uCi0JKiBkYXRhL3lhY2MuYyAoeXlhYm9ydGxhYik6IERvbid0IGNhbGwgZGVzdHJ1Y3RvciwgYW5kCi0JZG9uJ3Qgc2V0IHl5Y2hhciB0byBFTVBUWS4KLQkoeXlvdmVyZmxvd2xhYik6IERvbid0IGNhbGwgZGVzdHJ1Y3Rvci4KLQkoeXlyZXR1cm4pOiBDYWxsIGRlc3RydWN0b3IsIGlmIHl5Y2hhciBpcyBuZWl0aGVyIFlZRU9GIG5vciBZWUVNUFRZLgotCSogdGVzdHMvY2FsYy5hdCAoQVRfQ0hFQ0tfQ0FMQyk6IEV4cGVjdCBvbmUgZmV3ZXIgb3V0cHV0IGxpbmVzLAotCXNpbmNlIHdlIG5vIGxvbmdlciBvdXRwdXQgdGhlIG1lc3NhZ2UgImRpc2NhcmRpbmcgbG9va2FoZWFkIHRva2VuCi0JZW5kIG9mIGlucHV0ICgpIi4KLQotMjAwNS0wNS0yMCAgUGF1bCBIaWxmaW5nZXIgIDxoaWxmaW5nckBDUy5CZXJrZWxleS5FRFU+Ci0KLQkqIGRhdGEvZ2xyLmMgKFlZX1NZTUJPTF9QUklOVCk6IERvbid0IHByaW50IG5ld2xpbmUgYXQgZW5kIHRvCi0JZml4IGEgc21hbGwgZ2xpdGNoIGluIGRlYnVnZ2luZyBvdXRwdXQuCi0JKHl5cHJvY2Vzc09uZVN0YWNrLCB5eXJlY292ZXJTeW50YXhFcnJvciwgeXlwYXJzZSk6IFByaW50IG5ld2xpbmUKLQlhZnRlciBZWV9TWU1CT0xfUFJJTlQgd2hlcmUgbmVlZGVkLgotCi0JKHN0cnVjdCB5eUdMUlN0YXRlKTogQWRkIHNvbWUgY29tbWVudHMuCi0JKHN0cnVjdCB5eVNlbWFudGljT3B0aW9uKTogQWRkIHNvbWUgY29tbWVudHMuCi0JKHVuaW9uIHl5R0xSU3RhY2tJdGVtKTogQWRkIGNvbW1lbnQuCi0KLQkoeXltZXJnZU9wdGlvblNldHMpOiBDb3JyZWN0IHRoaXMgdG8gcHJvcGVybHkgcGVyZm9ybSB0aGUgdW5pb24sCi0JYXZvaWRpbmcgaW5maW5pdGUgcmVwb3J0ZWQgYnkgTWljaGFlbCBSb3NpZW4uCi0JVXBkYXRlIGNvbW1lbnQuCi0KLQkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0OiBBZGQgdGVzdCBmb3IgR0xSIG1lcmdpbmcgZXJyb3IgcmVwb3J0ZWQKLQlieSBNLiBSb3NpZW4uCi0KLTIwMDUtMDUtMTMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBDT1BZSU5HLCBDaGFuZ2VMb2csIEdOVW1ha2VmaWxlLCBIQUNLSU5HLCBNYWtlZmlsZS5hbSwKLQlNYWtlZmlsZS5jZmcsIE1ha2VmaWxlLm1haW50LCBORVdTLCBSRUFETUUsIFJFQURNRS1hbHBoYSwKLQlSRUFETUUtY3ZzLCBUT0RPLCBib290c3RyYXAsIGNvbmZpZ3VyZS5hYywgZGF0YS9NYWtlZmlsZS5hbSwKLQlkYXRhL1JFQURNRSwgZGF0YS9jLm00LCBkYXRhL2dsci5jLCBkYXRhL2xhbHIxLmNjLCBkYXRhL3lhY2MuYywKLQlkYXRhL200c3VnYXIvbTRzdWdhci5tNCwgZG9jL01ha2VmaWxlLmFtLCBkb2MvYmlzb24udGV4aW5mbywKLQlkb2MvZmRsLnRleGksIGRvYy9ncGwudGV4aSwgZG9jL3JlZmNhcmQudGV4LCBsaWIvTWFrZWZpbGUuYW0sCi0JbGliL2FiaXRzZXQuYywgbGliL2FiaXRzZXQuaCwgbGliL2JiaXRzZXQuaCwgbGliL2JpdHNldC5jLAotCWxpYi9iaXRzZXQuaCwgbGliL2JpdHNldF9zdGF0cy5jLCBsaWIvYml0c2V0X3N0YXRzLmgsCi0JbGliL2JpdHNldHYtcHJpbnQuYywgbGliL2JpdHNldHYtcHJpbnQuaCwgbGliL2JpdHNldHYuYywKLQlsaWIvYml0c2V0di5oLCBsaWIvZWJpdHNldC5jLCBsaWIvZWJpdHNldC5oLCBsaWIvZ2V0LWVycm5vLmMsCi0JbGliL2dldC1lcnJuby5oLCBsaWIvbGJpdHNldC5jLCBsaWIvbGJpdHNldC5oLCBsaWIvbGliaWJlcnR5LmgsCi0JbGliL21haW4uYywgbGliL3N1YnBpcGUuYywgbGliL3N1YnBpcGUuaCwgbGliL3RpbWV2YXIuYywKLQlsaWIvdGltZXZhci5kZWYsIGxpYi90aW1ldmFyLmgsIGxpYi92Yml0c2V0LmMsIGxpYi92Yml0c2V0LmgsCi0JbGliL3l5ZXJyb3IuYywgbTQvY3h4Lm00LCBtNC9tNC5tNCwgbTQvc3VicGlwZS5tNCwgbTQvdGltZXZhci5tNCwKLQltNC93YXJuaW5nLm00LCBzcmMvTFIwLmMsIHNyYy9MUjAuaCwgc3JjL01ha2VmaWxlLmFtLCBzcmMvYXNzb2MuYywKLQlzcmMvYXNzb2MuaCwgc3JjL2Nsb3N1cmUuYywgc3JjL2Nsb3N1cmUuaCwgc3JjL2NvbXBsYWluLmMsCi0Jc3JjL2NvbXBsYWluLmgsIHNyYy9jb25mbGljdHMuYywgc3JjL2NvbmZsaWN0cy5oLCBzcmMvZGVyaXZlcy5jLAotCXNyYy9kZXJpdmVzLmgsIHNyYy9maWxlcy5jLCBzcmMvZmlsZXMuaCwgc3JjL2dldGFyZ3MuYywKLQlzcmMvZ2V0YXJncy5oLCBzcmMvZ3JhbS5jLCBzcmMvZ3JhbS5oLCBzcmMvbGFsci5jLCBzcmMvbGFsci5oLAotCXNyYy9sb2NhdGlvbi5jLCBzcmMvbG9jYXRpb24uaCwgc3JjL21haW4uYywgc3JjL211c2NsZV90YWIuYywKLQlzcmMvbXVzY2xlX3RhYi5oLCBzcmMvbnVsbGFibGUuYywgc3JjL251bGxhYmxlLmgsIHNyYy9vdXRwdXQuYywKLQlzcmMvb3V0cHV0LmgsIHNyYy9wYXJzZS1ncmFtLmMsIHNyYy9wYXJzZS1ncmFtLmgsCi0Jc3JjL3BhcnNlLWdyYW0ueSwgc3JjL3ByaW50LmMsIHNyYy9wcmludC5oLCBzcmMvcHJpbnRfZ3JhcGguYywKLQlzcmMvcHJpbnRfZ3JhcGguaCwgc3JjL3JlYWRlci5jLCBzcmMvcmVhZGVyLmgsIHNyYy9yZWR1Y2UuYywKLQlzcmMvcmVkdWNlLmgsIHNyYy9yZWxhdGlvbi5jLCBzcmMvcmVsYXRpb24uaCwgc3JjL3NjYW4tZ3JhbS5sLAotCXNyYy9zY2FuLXNrZWwubCwgc3JjL3N0YXRlLmMsIHNyYy9zdGF0ZS5oLCBzcmMvc3ltbGlzdC5jLAotCXNyYy9zeW1saXN0LmgsIHNyYy9zeW10YWIuYywgc3JjL3N5bXRhYi5oLCBzcmMvc3lzdGVtLmgsCi0Jc3JjL3RhYmxlcy5jLCBzcmMvdGFibGVzLmgsIHNyYy91bmlxc3RyLmMsIHNyYy91bmlxc3RyLmgsCi0Jc3JjL3ZjZy5jLCBzcmMvdmNnLmgsIHNyYy92Y2dfZGVmYXVsdHMuaCwgdGVzdHMvTWFrZWZpbGUuYW0sCi0JdGVzdHMvYWN0aW9ucy5hdCwgdGVzdHMvYysrLmF0LCB0ZXN0cy9jYWxjLmF0LCB0ZXN0cy9jb25mbGljdHMuYXQsCi0JdGVzdHMvY3h4LXR5cGUuYXQsIHRlc3RzL2V4aXN0aW5nLmF0LCB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdCwKLQl0ZXN0cy9oZWFkZXJzLmF0LCB0ZXN0cy9pbnB1dC5hdCwgdGVzdHMvbG9jYWwuYXQsIHRlc3RzL291dHB1dC5hdCwKLQl0ZXN0cy9yZWR1Y2UuYXQsIHRlc3RzL3JlZ3Jlc3Npb24uYXQsIHRlc3RzL3NldHMuYXQsCi0JdGVzdHMvc3luY2xpbmVzLmF0LCB0ZXN0cy90ZXN0c3VpdGUuYXQsIHRlc3RzL3RvcnR1cmUuYXQ6Ci0JVXBkYXRlIEZTRiBwb3N0YWwgbWFpbCBhZGRyZXNzLgotCi0yMDA1LTA1LTExICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogdGVzdHMvbG9jYWwuYXQgKEFUX0NPTVBJTEVfQ1hYKTogVHJlYXQgTERGTEFHUyBsaWtlIEFUX0NPTVBJTEUgZG9lcy4KLQlQcm9ibGVtIHJlcG9ydGVkIGJ5IFJhbGYgTWVuemVsLgotCi0yMDA1LTA1LTAxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogdGVzdHMvYWN0aW9ucy5hdDogVGVzdCB0aGF0IHN0YWNrIG92ZXJmbG93IGludm9rZXMgZGVzdHJ1Y3RvcnMuCi0JRnJvbSBNYXJjdXMgSG9sbGFuZC1Nb3JpdHouCi0JKiBkYXRhL3lhY2MuYyAoeXllcnJsYWIpOiBNb3ZlIHRoZSBjb2RlIHRoYXQgZGVzdHJveXMgdGhlIHN0YWNrCi0JZnJvbSBoZXJlLi4uLgotCSh5eXJldHVybik6IHRvIGhlcmUuICBUaGF0IHdheSwgZGVzdHJ1Y3RvcnMgYXJlIGNhbGxlZCBwcm9wZXJseQotCWV2ZW4gaWYgdGhlIHN0YWNrIG92ZXJmbG93cywgb3IgdGhlIHVzZXIgY2FsbHMgWVlBQ0NFUFQgb3IKLQlZWUFCT1JULiAgU3RhY2stb3ZlcmZsb3cgcHJvYmxlbSByZXBvcnRlZCBieSBNYXJjdXMgSG9sbGFuZC1Nb3JpdHouCi0JKHl5b3ZlcmZsb3dsYWIpOiBEZXN0cm95IHRoZSBsb29rYWhlYWQuCi0KLTIwMDUtMDQtMjQgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBkYXRhL3lhY2MuYyAoWVlTVEFDS19BTExPQ19NQVhJTVVNKTogQWRkIG1vcmUtZGVzY3JpcHRpdmUgY29tbWVudC4KLQotMjAwNS0wNC0xNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIE5FV1M6IEJpc29uLWdlbmVyYXRlZCBDIHBhcnNlcnMgbm8gbG9uZ2VyIHF1b3RlIGxpdGVyYWwgc3RyaW5ncwotCWFzc29jaWF0ZWQgd2l0aCB0b2tlbnMuCi0JKiBzcmMvb3V0cHV0LmMgKHByZXBhcmVfc3ltYm9scyk6IERvbid0IGVzY2FwZSBzdHJpbmdzLAotCXNpbmNlIHVzZXJzIGRvbid0IHdhbnQgdG8gc2VlIEMgZXNjYXBlcy4KLQkqIHRlc3RzL2NhbGMuYXQgKEFUX0NIRUNLX0NBTEMpOiBBZGp1c3QgdG8gbGFjayBvZiBxdW90ZXMKLQlpbiBkaWFnbm9zdGljcy4KLQkqIHRlc3RzL2lucHV0LmF0IChUb3J0dXJpbmcgdGhlIFNjYW5uZXIpOiBMaWtld2lzZS4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFRva2VuIGRlZmluaXRpb25zLCBXZWIyYyBBY3Rpb25zKTogTGlrZXdpc2UuCi0KLTIwMDUtMDQtMTYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiB0ZXN0cy90b3J0dXJlLmF0IChBVF9JTkNSRUFTRV9EQVRBX1NJWkUpOiBTa2lwIHRoZSB0ZXN0IGlmCi0JdGhlIGRhdGEgc2l6ZSBpcyBrbm93biB0byBiZSB0b28gc21hbGwgYW5kIHdlIGNhbid0IGluY3JlYXNlIGl0LgotCVRoaXMgd29ya3MgYXJvdW5kIGFuIEhQLVVYIDExLjAwIGdsaXRjaCByZXBvcnRlZCBieSBBbmRyZXcgQmVuaGFtLgotCi0yMDA1LTA0LTE1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogc3JjL3BhcnNlLWdyYW0ueTogSW5jbHVkZSBxdW90ZWFyZy5oLgotCShzdHJpbmdfYXNfaWQpOiBRdW90ZSAkMSBiZWZvcmUgdXNpbmcgaXQgYXMgYSBrZXksIHNpbmNlIHRoZQotCWxleGVyIG5vIGxvbmdlciBxdW90ZXMgaXQgZm9yIHVzLgotCShzdHJpbmdfY29udGVudCk6IERvbid0IHN0cmlwIHF1b3Rlcywgc2luY2UgbGV4ZXIgbm8gbG9uZ2VyCi0JcXVvdGVzIGl0IGZvciB1cy4KLQkqIHNyYy9zY2FuLWdyYW0ubDogSW5jbHVkZSBxdW90ZWFyZy5oLgotCSgiXCIiKTogT21pdCBxdW90ZS4KLQkoIiciPFNDX0VTQ0FQRURfQ0hBUkFDVEVSPik6IFF1b3RlIHN5bWJvbCBiZWZvcmUgdXNpbmcgaXQgYXMKLQlhIGtleSwgc2luY2UgdGhlIHJlc3Qgb2YgdGhlIGxleGVyIGRvZXNuJ3QgcXVvdGUgaXQuCi0JKiBzcmMvc3ltdGFiLmMgKHN5bWJvbF9nZXQpOiBEb24ndCBxdW90ZSBzeW1ib2w7IGNhbGxlciBkb2VzIGl0IG5vdy4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFRva2VuIGRlZmluaXRpb25zKTogQ2hlY2sgZm9yIGJhY2tzbGFzaGVzCi0JaW4gdG9rZW4gc3RyaW5ncy4KLQotCSogZGF0YS95YWNjLmMgKFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSk6IE5ldyBtYWNyby4KLQkoWVlTSVpFX1QpOiBEZWZpbmUgdG8gdW5zaWduZWQgbG9uZyBpbnQgd2hlbiB1c2luZyBhbiBvbGRlciBjb21waWxlci4KLQkoeXlwYXJzZSk6IFJldmFtcCBjb2RlIHRvIGdlbmVyYXRlIGxvbmcgc3ludGF4IGVycm9yIG1lc3NhZ2UsIHRvCi0JbWFrZSBpdCBlYXNpZXIgdG8gdHJhbnNsYXRlLCBhbmQgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBhcml0aG1ldGljCi0Jb3ZlcmZsb3cuICBDaGFuZ2UgInZpcnR1YWwgbWVtb3J5IiB0byAibWVtb3J5IiBpbiBkaWFnbm9zdGljLCBzaW5jZQotCXdlIGRvbid0IGtub3cgd2hldGhlciB0aGUgbWVtb3J5IGlzIHZpcnR1YWwuCi0KLTIwMDUtMDQtMTMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBORVdTOiBCaXNvbi1nZW5lcmF0ZWQgQyBwYXJzZXJzIG5vdyB1c2UgdGhlIF8gbWFjcm8gdG8KLQl0cmFuc2xhdGUgc3RyaW5ncy4KLQkqIGRhdGEveWFjYy5jIChfKSBbIWRlZmluZWQgX106IE5ldyBtYWNyby4KLQlBbGwgRW5nbGlzaCBzdHJpbmdzIHdyYXBwZWQgaW5zaWRlIHRoaXMgbWFjcm8uCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoQmlzb24gUGFyc2VyKTogRG9jdW1lbnQgXy4KLQkqIHBvL1BPVEZJTEVTLmluOiBJbmNsdWRlIHNyYy9wYXJzZS1ncmFtLmMsIHNpbmNlIGl0IG5vdwotCWluY2x1ZGVzIHRyYW5zbGF0ZWFibGUgc3RyaW5ncyB0aGF0IHBhcnNlLWdyYW0ueSBkb2Vzbid0LgotCi0yMDA1LTA0LTEyICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogc3JjL3N5bXRhYi5jIChzeW1ib2xfbWFrZV9hbGlhcyk6IENhbGwgc3ltYm9sX3R5cGVfc2V0LAotCXJldmVydGluZyB0aGUgMjAwNC0xMC0xMSBjaGFuZ2UgdG8gdGhpcyBmdW5jdGlvbi4KLQkoc3ltYm9sX2NoZWNrX2FsaWFzX2NvbnNpc3RlbmN5KTogRG9uJ3QgY2FsbCBzeW1ib2xfdHlwZV9zZXQKLQlpZiB0aGUgdHlwZSBuYW1lIGlzIGFscmVhZHkgY29ycmVjdC4KLQkqIHRlc3RzL2lucHV0LmF0IChUeXBlZCBzeW1ib2wgYWxpYXNlcyk6IE5ldyB0ZXN0LCBmcm9tIFRpbSBWYW4gSG9sZGVyLgotCi0yMDA1LTAzLTI1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoVG9rZW4gZGVmaW5pdGlvbnMpOiBEb24ndCB1c2UgYSB0b2tlbiBuYW1lZAotCWMsIGFzIHRoYXQgZ2VuZXJhdGVzIGEgIiNkZWZpbmUgYyAuLi4iIHRoYXQgcnVucyBhZm91bCBvZiBidWdneQotCXN0ZGxpYi5oIHRoYXQgdXNlcyB0aGUgaWRlbnRpZmllciBjIGFzIGEgbWVtYmVyIG9mIHN0cnVjdAotCWRyYW5kNDhfZGF0YS4gIFByb2JsZW0gcmVwb3J0ZWQgYnkgSG9yc3QgV2VudGUuCi0KLTIwMDUtMDMtMjEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBib290c3RyYXA6IENoYW5nZSB0cmFuc2xhdGlvbiBVUkwgZnJvbQotCWh0dHA6Ly93d3cyLmlyby51bW9udHJlYWwuY2EvfmdudXRyYS9wby9tYWludC9iaXNvbi8gdG8KLQlodHRwOi8vd3d3Lmlyby51bW9udHJlYWwuY2EvdHJhbnNsYXRpb24vbWFpbnQvYmlzb24vIHRvIGF2b2lkCi0JcmVkaXJlY3Rpb24gZ2xpdGNoZXMuICBQcm9ibGVtIHJlcG9ydGVkIGJ5IHR3bGV2b0B4czRhbGwubmwuCi0KLTIwMDUtMDMtMjAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiB0ZXN0cy9sb2NhbC5hdCAoQVRfQ09NUElMRSwgQVRfQ09NUElMRV9DWFgpOiBEb24ndCBwdXQgb3B0aW9ucwotCWFmdGVyIG9wZXJhbmRzOyBQT1NJWCBzYXlzIHRoaXMgaXNuJ3QgcG9ydGFibGUgZm9yIHRoZSBjOTkgY29tbWFuZC4KLQotMjAwNS0wMy0xOCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0IChnbHItcmVncjJhLnkpOiBUcnkgdG8gZHVtcCBjb3JlCi0JaW1tZWRpYXRlbHkgaWYgYSBkYXRhIG92ZXJydW4gaGFzIG9jY3VycmVkOyB0aGlzIG1heSBoZWxwIHVzIHRyYWNrCi0JZG93biB3aGF0IG1heSBiZSBhIHNwdXJpb3VzIGZhaWx1cmUgb24gTWFjT1MuCi0KLTIwMDUtMDMtMTcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JUmVzcG9uZCB0byBwcm9ibGVtcyByZXBvcnRlZCBieSB0d2xldm9AeHM0YWxsLm5sLgotCi0JKiBib290c3RyYXA6IFVzZSAidHJhcCAtIDAiIHJhdGhlciB0aGFuIHRoZSB1bnBvcnRhYmxlICJ0cmFwIDAiLgotCi0JKiBzcmMvdmNnLmg6IENvbW1lbnQgZml4LgotCSogc3JjL3ZjZ19kZWZhdWx0cy5oOiBQYXJlbnRoZXNpemUgbWFjcm8gYm9kaWVzIHRvIG1ha2UgdGhlbSBzYWZlLgotCShHX0NNQVgpOiBDaGFuZ2UgdG8gLTEgaW5zdGVhZCBvZiBJTlRfTUFYLgotCi0JKiBkYXRhL3lhY2MuYyAoeXlwYXJzZSk6IE9taXQgc3BhY2VzIGJlZm9yZSAjbGluZS4KLQotMjAwNS0wMy0xNSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIHNyYy90YWJsZXMuYyAoc3RhdGVfbnVtYmVyX3RvX3ZlY3Rvcl9udW1iZXIpOiBQdXQgaXQgaW5zaWRlIGFuCi0JIiNpZiAwIiwgc2luY2UgaXQncyBub3QgY3VycmVudGx5IHVzZWQuICBQcm9ibGVtIHJlcG9ydGVkIGJ5Ci0JUm9sYW5kIE1jR3JhdGguCi0KLTIwMDUtMDMtMDYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBzcmMvb3V0cHV0LmMgKGVzY2FwZWRfb3V0cHV0KTogUmVuYW1lZCBmcm9tCi0JZXNjYXBlZF9maWxlX25hbWVfb3V0cHV0LCBzaW5jZSB3ZSBub3cgdXNlIGl0IGZvciBzeW1ib2wgdGFncyBhcwotCXdlbGwuICBBbGwgdXNlcyBjaGFuZ2VkLgotCShzeW1ib2xfZGVzdHJ1Y3RvcnNfb3V0cHV0LCBzeW1ib2xfcHJpbnRlcnNfb3V0cHV0KToKLQlFc2NhcGUgc3ltYm9sIHRhZ3MgdG9vLgotCVByb2JsZW0gcmVwb3J0ZWQgYnkgTWF0eWFzIEZvcnN0bmVyIGluCi0JPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwNS0wMy9tc2cwMDAwOS5odG1sPi4KLQotCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlX2NvZGVfZ3Jvdyk6IERvbid0IHF1b3RlIG51bWJlcnM7IGl0J3MKLQlub3QgbmVlZGVkLgotCSogc3JjL291dHB1dC5jICh1c2VyX2FjdGlvbnNfb3V0cHV0LCB0b2tlbl9kZWZpbml0aW9uc19vdXRwdXQsCi0Jc3ltYm9sX2Rlc3RydWN0b3JzX291dHB1dCwgc3ltYm9sX3ByaW50ZXJzX291dHB1dCk6IExpa2V3aXNlLgotCSogc3JjL3JlYWRlci5jIChwcm9sb2d1ZV9hdWdtZW50KTogTGlrZXdpc2UuCi0JKiBzcmMvc2Nhbi1ncmFtLmwgKGhhbmRsZV9hY3Rpb25fZG9sbGFyLCBoYW5kbGVfYWN0aW9uX2F0KTogTGlrZXdpc2UuCi0KLQkqIHNyYy92Y2cuYyAob3V0cHV0X2VkZ2UpOiBEb24ndCBxdW90ZSBsaW5lc3R5bGUgYXJnLgotCVByb2JsZW0gcmVwb3J0ZWQgYnkgdHdsZXZvQHhzNGFsbC5ubC4KLQotMjAwNS0wMi0yOCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvIChTZW1hbnRpYyBUb2tlbnMpOiBGaXggc2NvcGluZyBwcm9ibGVtIGluCi0JZXhhbXBsZSwgcmVwb3J0ZWQgYnkgRGVyZWsgTSBKb25lcy4gIEFsc28sIG1ha2UgdGhlIGV4YW1wbGUgZXZlbgotCW1vcmUgb3V0cmFnZW91cywgdG8gYmV0dGVyIGlsbHVzdHJhdGUgaG93IGJhZCB0aGUgcHJvYmxlbSBpcy4KLQotMjAwNS0wMi0yNCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvIChNZmNhbGMgU3ltdGFiKTogQ29ycmVjdCB0aGUgcHJvdG90eXBlIGZvcgotCXB1dHN5bS4gIFR5cG8gcmVwb3J0ZWQgYnkgU2ViYXN0aWFuIFBpcGluZy4KLQotMjAwNS0wMi0yMyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvIChMYW5ndWFnZSBhbmQgR3JhbW1hcik6IHNvbWUgLT4gc2FtZQotCShFcGlsb2d1ZSk6IGludCBoZSAtPiBpbiB0aGUKLQlUeXBvcyByZXBvcnRlZCBieSBTZWJhc3RpYW4gUGlwaW5nIHZpYSBKdXN0aW4gUGVuY2UuCi0KLTIwMDUtMDItMDcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdCAoSW1wcm9wZXIgaGFuZGxpbmcgb2YgZW1iZWRkZWQgYWN0aW9ucwotCWFuZCBkb2xsYXIoLU4pIGluIEdMUiBwYXJzZXJzKTogUmVuYW1lZCBmcm9tICJJbXByb3BlciBoYW5kbGluZyBvZgotCWVtYmVkZGVkIGFjdGlvbnMgYW5kICQtTiBpbiBHTFIgcGFyc2VycyIsIHdvcmsgYXJvdW5kIGFuIEF1dG9jb25mIGJ1ZwotCXdpdGggZG9sbGFyIHNpZ25zIGluIHRlc3QgbmFtZXMuCi0JKiB0ZXN0cy9pbnB1dC5hdCAoSW52YWxpZCBkb2xsYXItbik6IFJlbmFtZWQgZnJvbSAiSW52YWxpZCBcJG4iLAotCWZvciBhIHNpbWlsYXIgcmVhc29uLgotCi0yMDA1LTAxLTI4ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogc3JjL3ZjZy5jIChvdXRwdXRfZ3JhcGgpOiBHX1ZJRVcgLT4gbm9ybWFsX3ZpZXcgaW4gY2FzZSBzb21lb25lCi0Jd2FudHMgdG8gcmVkZWZpbmUgR19WSUVXLgotCi0yMDA1LTAxLTI3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogc3JjL3ZjZy5jIChnZXRfdmlld19zdHIpOiBSZW1vdmUgY2FzZSBmb3Igbm9ybWFsX3ZpZXcuCi0JUHJvYmxlbSByZXBvcnRlZCBieSB0d2xldm9AeHM0YWxsLm5sLgotCi0yMDA1LTAxLTI0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogY29uZmlndXJlLmFjIChPMENGTEFHUywgTzBDWFhGTEFHUyk6IEZpeCBxdW90aW5nIGJ1Zy4KLQlQcm9ibGVtIHJlcG9ydGVkIGJ5IHR3bGV2b0B4czRhbGwubmwuCi0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvOiBDaGFuZ2UgQGRpcmNhdGVnb3J5IGZyb20gIkdOVSBwcm9ncmFtbWluZwotCXRvb2xzIiB0byAiU29mdHdhcmUgZGV2ZWxvcG1lbnQiLiAgUmVxdWVzdGVkIGJ5IFJpY2hhcmQgU3RhbGxtYW4KLQl2aWEgS2FybCBCZXJyeS4KLQotMjAwNS0wMS0yMyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIHRlc3RzL2MrKy5hdCAoQVRfQ0hFQ0tfRE9YWUdFTik6IERvbid0IHVzZSBvcHRpb25zIGFmdGVyIG9wZXJhbmRzLgotCVByb2JsZW0gcmVwb3J0ZWQgYnkgdHdsZXZvQHhzNGFsbC5ubC4KLQotMjAwNS0wMS0yMSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIGRhdGEveWFjYy5jIChZWUNPUFksIHl5c3RwY3B5LCB5eXBhcnNlKTogUmVtb3ZlICJyZWdpc3RlciIKLQlrZXl3b3JkOyBpdCdzIG5vdCBuZWVkZWQgd2l0aCBtb2Rlcm4gY29tcGlsZXJzLCBhbmQgaXQgZG9lc24ndAotCWFmZmVjdCBjb3JyZWN0bmVzcyB3aXRoIG9sZGVyIGNvbXBpbGVycy4gIFN1Z2dlc3RlZCBieQotCXR3bGV2b0B4czRhbGwubmwuCi0KLTIwMDUtMDEtMTcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBkYXRhL2dsci5jICh5eXVzZXJBY3Rpb24pOiBBZGQgImRlZmF1bHQ6IGJyZWFrOyIgY2FzZSB0byBwYWNpZnkKLQlnY2MgLVdzd2l0Y2gtZGVmYXVsdC4KLQkqIGRhdGEvbGFscjEuY2MgKHl5OjpdYjRfcGFyc2VyX2NsYXNzX25hbWVbOjpwYXJzZSk6IExpa2V3aXNlLgotCSogZGF0YS95YWNjLmMgKHl5cGFyc2UpOiBMaWtld2lzZS4KLQotMjAwNS0wMS0xMiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIHNyYy9zeXN0ZW0uaCAoT1VUUFVUX0VYVCwgVEFCX0VYVCk6IERlZmluZSBvbmx5IGlmIG5vdCBkZWZpbmVkCi0JYWxyZWFkeS4gIExldCBjb25maWcuaCBkZWZpbmUgYW55IG5vbnN0YW5kYXJkIHZhbHVlcy4KLQotMjAwNS0wMS0xMCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIHRlc3RzL2NhbGMuYXQgKF9BVF9EQVRBX0NBTENfWSk6IFVzZSBhbGFybSAoMTAwKSwgbm90IGFsYXJtICgxMCksCi0JZm9yIHRoZSBiZW5lZml0IG9mIHNsb3dlciBob3N0cy4gIFByb2JsZW0gcmVwb3J0ZWQgYnkKLQlOZWxzb24gSC4gRi4gQmVlYmUuCi0KLTIwMDUtMDEtMDcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBkYXRhL3lhY2MuYyAoeXlwYXJzZSk6IFBhY2lmeSBub24tR0NDIGNvbXBpbGVycyBhYm91dCB5eWVycm9ybGFiCi0JYmVpbmcgZGVmaW5lZCBhbmQgbm90IHVzZWQuCi0JKiBkYXRhL2xhbHIxLmNjICh5eXBhcnNlKTogTGlrZXdpc2UuCi0JVXNlICJpZiAoZmFsc2UpIiByYXRoZXIgdGhhbiAiaWYgKDApIi4KLQotMjAwNS0wMS0wNSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIFRPRE86IE1lbnRpb24gdGhhdCB3ZSBzaG91bGQgYWxsb3cgTlVMIGJ5dGVzIGluIHRva2Vucy4KLQotMjAwNS0wMS0wMiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIHNyYy9zY2FuLXNrZWwubCAoPDxFT0Y+Pik6IERvbid0IGNsb3NlIHN0YW5kYXJkIG91dHB1dC4KLQlQcm9ibGVtIHJlcG9ydGVkIGJ5IEhhbnMgQWJlcmcuCi0KLTIwMDUtMDEtMDEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBzcmMvZ2V0YXJncy5jICh2ZXJzaW9uKTogSGFwcHkgbmV3IHllYXI7IHVwZGF0ZSBvdmVyYWxsCi0JcHJvZ3JhbSBjb3B5cmlnaHQgZGF0ZSBmcm9tIDIwMDQgdG8gMjAwNS4KLQotCSogc3JjL3NjYW4tc2tlbC5sICgiQG91dHB1dCAiLipcbik6IERvbid0IGNsb3NlIHN0YW5kYXJkIG91dHB1dC4KLQlQcm9ibGVtIHJlcG9ydGVkIGJ5IEhhbnMgQWJlcmcuCi0JKiB0ZXN0cy9vdXRwdXQuYXQgKEFUX0NIRUNLX09VVFBVVCk6IE5ldyBhcmcgU0hFTExJTy4KLQkoT3V0cHV0IGZpbGUgbmFtZXMuKTogQWRkIGEgdGVzdCBmb3IgdGhlIGNhc2Ugd2hlbiBzdGFuZGFyZCBvdXRwdXQKLQlpcyBjbG9zZWQuCi0KLTIwMDQtMTItMjYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoQGNvcHlpbmcpOiBVcGRhdGUgRkRMIHZlcnNpb24gbnVtYmVyIHRvIDEuMiwKLQl0byBmaXggYW4gb3ZlcnNpZ2h0IGluIHRoZSBCaXNvbiAyLjAgbWFudWFsLgotCi0yMDA0LTEyLTI1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogTkVXUzogVmVyc2lvbiAyLjAuICBSZWZvcm1hdCB0aGUgZXhpc3RpbmcgbmV3cyBpdGVtcyBzaW5jZQotCTEuODc1LCBzbyB0aGF0IHJlbGF0ZWQgaXRlbXMgYXJlIGdyb3VwZWQgdG9nZXRoZXIuCi0JKiBjb25maWd1cmUuYWMgKEFDX0lOSVQpOiBCdW1wIHZlcnNpb24gdG8gMi4wLgotCSogc3JjL3BhcnNlLWdyYW0uYywgc3JjL3BhcnNlLWdyYW0uaDogUmVnZW5lcmF0ZSB3aXRoIDIuMC4KLQotCSogdGVzdHMvdG9ydHVyZS5hdCAoRXhwbG9kaW5nIHRoZSBTdGFjayBTaXplIHdpdGggQWxsb2NhKTogU2V0Ci0JWVlTVEFDS19VU0VfQUxMT0NBIHRvIDEgaWYgX19HTlVDX18gb3IgYWxsb2NhIGFyZSBkZWZpbmVkOwotCW90aGVyd2lzZSwgd2UncmUgbm90IHRlc3RpbmcgYWxsb2NhLiAgVW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vCi0Jc2ltcGxlIHdheSB0byBjb25zdWx0IEhBVkVfQUxMT0NBIGhlcmUuCi0KLQkqIGRhdGEvbGFscjEuY2MgKHl5ZGVzdHJ1Y3RfKTogUGFjaWZ5IHVudXNlZCB2YXJpYWJsZSB3YXJuaW5nCi0JZm9yIHl5bXNnLCB0b28uCi0KLQkqIHNyYy9MUjAuYyAobmV3X2l0ZW1zZXRzKTogVXNlIG1lbXNldCByYXRoZXIgdGhhbiB6ZXJvaW5nIGJ5Ci0JaGFuZC4gIFRoaXMgYXZvaWRzIGEgd2FybmluZyBhYm91dCBjb21wYXJpbmcgaW50IHRvIHNpemVfdCB3aGVuCi0JR0NDIHdhcm5pbmdzIGFyZSBlbmFibGVkLgotCi0yMDA0LTEyLTIyICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogTkVXUzogQmlzb24tZ2VuZXJhdGVkIHBhcnNlcnMgbm8gbG9uZ2VyIGRlZmF1bHQgdG8gdXNpbmcgdGhlCi0JYWxsb2NhIGZ1bmN0aW9uICh3aGVuIGF2YWlsYWJsZSkgdG8gZXh0ZW5kIHRoZSBwYXJzZXIgc3RhY2ssIGR1ZQotCXRvIHdpZGVzcHJlYWQgcHJvYmxlbXMgaW4gdW5jaGVja2VkIHN0YWNrLW92ZXJmbG93IGRldGVjdGlvbi4KLQkqIGRhdGEvZ2xyLmMgKFlZTUFYREVQVEgpOiBSZW1vdmUgdW5kZWYgd2hlbiB6ZXJvLiAgSXQncyB0aGUgdXNlcidzCi0JcmVzcG9uc2liaWxpdHkgdG8gc2V0IGl0IHRvIGEgcG9zaXRpdmUgdmFsdWUuICBUaGlzIGxldHMgdGhlIHVzZXIKLQlzcGVjaWZ5IGEgdmFsdWUgdGhhdCBpcyBub3QgYSBwcmVwcm9jZXNzb3IgY29uc3RhbnQuCi0JKiBkYXRhL3lhY2MuYyAoWVlNQVhERVBUSCk6IExpa2V3aXNlLgotCShZWVNUQUNLX0FMTE9DKTogRGVmaW5lIG9ubHkgaWYgWVlTVEFDS19VU0VfQUxMT0NBIGlzIG5vbnplcm8uCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoU3RhY2sgT3ZlcmZsb3cpOiBZWU1BWERFUFRIIG5vIGxvbmdlciBuZWVkcwotCXRvIGJlIGEgY29tcGlsZS10aW1lIGNvbnN0YW50LiAgSG93ZXZlciwgZXhwbGFpbiB0aGUgY29uc3RyYWludHMgb24gaXQuCi0JQWxzbywgZXhwbGFpbiB0aGUgY29uc3RyYWludHMgb24gWVlJTklUREVQVEguCi0JKFRhYmxlIG9mIFN5bWJvbHMpOiBFeHBsYWluIHRoYXQgYWxsb2NhIGlzIG5vIGxvbmdlciB0aGUgZGVmYXVsdC4KLQlFeHBsYWluIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkgaWYgdGhleSBkZWZpbmUgWVlTVEFDS19VU0VfQUxMT0NBCi0JdG8gMS4KLQotCSogZG9jL2Jpc29uLnRleGluZm8gKExvY2F0aW9uIERlZmF1bHQgQWN0aW9uKTogTWVudGlvbiB0aGF0IG4gbXVzdAotCWJlIHplcm8gd2hlbiBrIGlzIHplcm8uICBTdWdnZXN0ZWQgYnkgRnJhbmsgSGVja2VuYmFjaC4KLQotMjAwNC0xMi0yMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvbGFscjEuY2MgKHBhcnNlcjo6dG9rZW5fbnVtYmVyX3R5cGUsIHBhcnNlcjo6cmhzX251bWJlcl90eXBlKQotCShwYXJzZXI6OnN0YXRlX3R5cGUsIHBhcnNlcjo6c2VtYW50aWNfdHlwZSwgcGFyc2VyOjpsb2NhdGlvbl90eXBlKToKLQlQcml2YXRlLCBub3QgcHVibGljLgotCShwYXJzZXI6OnBhcnNlKTogUmV0dXJuIGludHMsIG5vdCBib29sLgotCVJldHVybmluZyBhIGJvb2wgaW50cm9kdWNlcyBhIHByb2JsZW06IDAgY29ycmVzcG9uZHMgdG8gZmFsc2UsIGFuZAotCWl0IHNlZW1zIHdlaXJkIHRvIHJldHVybiBmYWxzZSBvbiBzdWNjZXNzLiAgUmV0dXJuaW5nIHRydWUgY2hhbmdlcwotCXRoZSBjb252ZW50aW9ucyBmb3IgeXlwYXJzZS4KLQlBbHRlcm5hdGl2ZWx5IHdlIGNvdWxkIHJldHVybiB2b2lkIGFuZCBzZW5kIGFuIGV4Y2VwdGlvbi4KLQlUaGVyZSBpcyBubyBjbGVhciBjb25zZW5zdXMgKHlldD8pLgotCShzdGF0ZV9zdGFjaywgc2VtYW50aWNfc3RhY2ssIGxvY2F0aW9uX3N0YWNrKTogUmVuYW1lIGFzLi4uCi0JKHN0YXRlX3N0YWNrX3R5cGUsIHNlbWFudGljX3N0YWNrX3R5cGUsIGxvY2F0aW9uX3N0YWNrX3R5cGUpOiB0aGVzZS4KLQlQcml2YXRlLCBub3QgcHVibGljLgotCSogdGVzdHMvYysrLmF0OiBOZXcuCi0JKiB0ZXN0cy90ZXN0c3VpdGUuYXQsIHRlc3RzL01ha2VmaWxlLmFtOiBBZGp1c3QuCi0KLTIwMDQtMTItMjEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2xhbHIxLmNjIChwYXJzZXI6OnBhcnNlKTogUmV0dXJuIGEgYm9vbCBpbnN0ZWFkIG9mIGFuIGludC4KLQotMjAwNC0xMi0yMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlEb24ndCBpbXBvc2Ugc3RkOjpzdHJpbmcgZm9yIGZpbGVuYW1lcy4KLQotCSogZGF0YS9sYWxyMS5jYyAoYjRfZmlsZW5hbWVfdHlwZSk6IE5ldy4KLQkocG9zaXRpb246OmZpbGVuYW1lKTogVXNlIGl0LgotCShwYXJzZXIuaGgpOiBNb3ZlIHRoZSBpbmNsdXNpb24gb2Ygc3RhY2suaGggYW5kIGxvY2F0aW9uLmhoIGJlbG93Ci0JdGhlIHVzZXIgY29kZSwgc28gdGhhdCBuZWVkZWQgaGVhZGVycyBmb3IgdGhlIGZpbGVuYW1lIHR5cGUgY2FuIGJlCi0JaW5jbHVkZWQgZmlyc3QuCi0JRm9yd2FyZCBkZWNsYXJlIHRoZW0gYmVmb3JlIHRoZSB1c2VyIGNvZGUuCi0JKiB0ZXN0cy9NYWtlZmlsZS5hbSAoY2hlY2stbG9jYWwsIGluc3RhbGxjaGVjay1sb2NhbCk6IFBhc3MKLQlURVNUU1VJVEVGTEFHUyB0byB0aGUgVEVTVFNVSVRFLgotCi0yMDA0LTEyLTIwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCVVzZSBtb3JlIFNUTCBsaWtlIG5hbWVzOiBteV9jbGFzcyBpbnN0ZWFkIG9mIE15Q2xhc3MuCi0KLQkqIGRhdGEvbGFscjEuY2MgKExvY2F0aW9uU3RhY2ssIExvY2F0aW9uVHlwZSwgUmhzTnVtYmVyVHlwZSkKLQkoU2VtYW50aWNTdGFjaywgU2VtYW50aWNUeXBlLCBTdGF0ZVN0YWNrLCBTdGF0ZVR5cGUpCi0JKFRva2VuTnVtYmVyVHlwZSwgU3RhY2ssIFNsaWNlLCBUcmFpdHMsIFBhcnNlcjo6bG9jYXRpb24pCi0JKFBhcnNlcjo6dmFsdWUpOiBSZW5hbWUgYXMuLi4KLQkobG9jYXRpb25fc3RhY2ssIGxvY2F0aW9uX3R5cGUsIHJoc19udW1iZXJfdHlwZSwgc2VtYW50aWNfc3RhY2spCi0JKHNlbWFudGljX3R5cGUsIHN0YXRlX3N0YWNrLCBzdGF0ZV90eXBlLCB0b2tlbl9udW1iZXJfdHlwZSwgc3RhY2spCi0JKHNsaWNlLCB0cmFpdHMsIHBhcnNlcjo6eXlsbG9jLCBwYXJzZXI6Onl5bHZhbCk6IHRoZXNlLgotCi0JKiB0ZXN0cy9jYWxjLmF0LCB0ZXN0cy9yZWdyZXNzaW9uLmF0LCB0ZXN0cy9hY3Rpb25zLmF0OiBBZGp1c3QuCi0KLTIwMDQtMTItMTkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBkYXRhL2dsci5jIChZWUxMT0NfREVGQVVMVCk6IFVzZSBHTlUgc3BhY2luZyBjb252ZW50aW9ucy4KLQkqIGRhdGEveWFjYy5jIChZWUxMT0NfREVGQVVMVCk6IExpa2V3aXNlLgotCi0yMDA0LTEyLTE3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCVJlbW92ZSB1c2VzIG9mICdzaG9ydCBpbnQnIGFuZCAndW5zaWduZWQgc2hvcnQgaW50Jy4gIFRoaXMgcmFpc2VzCi0Jc29tZSBhcmJpdHJhcnkgbGltaXRzLiAgSXQgdXNlcyBtb3JlIG1lbW9yeSBidXQgbm93YWRheXMgdGhhdCdzCi0Jbm90IG11Y2ggb2YgYW4gaXNzdWUuCi0KLQlUaGlzIGNoYW5nZSBkb2VzIG5vdCBhZmZlY3QgdGhlIGdlbmVyYXRlZCBwYXJzZXJzOyB0aGF0J3MgYSBkaWZmZXJlbnQKLQl0YXNrLCBhcyBzb21lIHVzZXJzIHdpbGwgd2FudCB0byBjb25zZXJ2ZSBtZW1vcnkgdGhlcmUuCi0KLQlJZGVhbGx5IHdlIHNob3VsZCB1c2Ugc2l6ZV90IHRvIHJlcHJlc2VudCBhbGwgb2JqZWN0IGNvdW50cywgYW5kCi0Jc29tZXRoaW5nIGxpa2UgcHRyZGlmZl90IHRvIHJlcHJlc2VudCBzaWduZWQgZGlmZmVyZW5jZXMgb2Ygb2JqZWN0Ci0JY291bnRzOyBidXQgdGhhdCB3aWxsIHJlcXVpcmUgbW9yZSBjb2RlLWNsZWFudXAgdGhhbiBJIGhhdmUgdGhlCi0JdGltZSB0byBkbyByaWdodCBub3cuCi0KLQkqIHNyYy9MUjAuYyAoYWxsb2NhdGVfaXRlbXNldHMsIG5ld19pdGVtc2V0cywgc2F2ZV9yZWR1Y3Rpb25zKToKLQlVc2Ugc2l6ZV90LCBub3QgaW50IG9yIHNob3J0IGludCwgdG8gY291bnQgb2JqZWN0cy4KLQkqIHNyYy9jbG9zdXJlLmMgKG5yaXRlbXNldCwgY2xvc3VyZSk6IExpa2V3aXNlLgotCSogc3JjL2Nsb3N1cmUuaCAobnJpdGVtc2V0LCBjbG9zdXJlKTogTGlrZXdpc2UuCi0JKiBzcmMvbnVsbGFibGUuYyAobnVsbGFibGVfY29tcHV0ZSk6IExpa2V3aXNlLgotCSogc3JjL3ByaW50LmMgKHByaW50X2NvcmUpOiBMaWtld2lzZS4KLQkqIHNyYy9wcmludF9ncmFwaC5jIChwcmludF9jb3JlKTogTGlrZXdpc2UuCi0JKiBzcmMvc3RhdGUuYyAoc3RhdGVfY29tcGFyZSwgc3RhdGVfaGFzaCk6IExpa2V3aXNlLgotCSogc3JjL3N0YXRlLmggKHN0cnVjdCBzdGF0ZSk6IExpa2V3aXNlLgotCSogc3JjL3RhYmxlcy5jIChkZWZhdWx0X2dvdG8sIGdvdG9fYWN0aW9ucyk6IExpa2V3aXNlLgotCi0JKiBzcmMvZ3JhbS5oIChydWxlX251bWJlciwgcnVsZSk6IFVzZSBpbnQsIG5vdCBzaG9ydCBpbnQuCi0JKiBzcmMvb3V0cHV0LmMgKHByZXBhcmVfcnVsZXMpOiBMaWtld2lzZS4KLQkqIHNyYy9zdGF0ZS5oIChzdGF0ZV9udW1iZXIsIFNUQVRFX05VTUJFUl9NQVhJTVVNLCB0cmFuc2l0aW9ucywKLQllcnJzLCByZWR1Y3Rpb25zKTogTGlrZXdpc2UuCi0JKiBzcmMvc3ltdGFiLmggKHN5bWJvbF9udW1iZXIsIFNZTUJPTF9OVU1CRVJfTUFYSU1VTSwgc3RydWN0IHN5bWJvbCk6Ci0JTGlrZXdpc2UuCi0JKiBzcmMvdGFibGVzLmMgKHZlY3Rvcl9udW1iZXIsIHRhbGx5LCBhY3Rpb25fbnVtYmVyLAotCUFDVElPTl9OVU1CRVJfTUlOSU1VTSk6IExpa2V3aXNlLgotCSogc3JjL291dHB1dC5jIChtdXNjbGVfaW5zZXJ0X3Nob3J0X2ludF90YWJsZSk6IFJlbW92ZS4KLQotMjAwNC0xMi0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvbGFscjEuY2M6IEV4dGVuc2l2ZSBEb3h5Z2VuYXRpb24uCi0JKGVycm9yXyk6IFJlbmFtZSBhcy4uLgotCShlcnJvcik6IHRoaXMsIHNpbmNlIGl0IGlzIHZpc2libGUgdG8gdGhlIHVzZXIuCi0JQWRqdXN0IGNhbGxlcnMuCi0JKFBhcnNlcjo6bWVzc2FnZSk6IE5vdyBhbiBhdXRvbWF0aWMgdmFyaWFibGUgZnJvbS4uLgotCShQYXJzZXI6Onl5cmVwb3J0X3N5bnRheF9lcnJvcl8pOiBoZXJlLgotCSogdGVzdHMvYWN0aW9ucy5hdCwgdGVzdHMvY2FsYy5hdCwgdGVzdHMvcmVncmVzc2lvbi5hdDogQWRqdXN0IHRvCi0JUGFyc2VyOjplcnJvci4KLQkqIHRlc3RzL2lucHV0LmF0OiBFc2NhcGUgJC4KLQotMjAwNC0xMi0xNiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIGRhdGEvZ2xyLmMgKGI0X2xoc192YWx1ZSwgYjRfcmhzX3ZhbHVlLCBiNF9yaHMtbG9jYXRpb24pOgotCVBhcmVudGhlc2l6ZSByaHMgdG8gYXZvaWQgb2JzY3VyZSBwcm9ibGVtcyB3aXRoIG1pc3Rha2VzIGxpa2UKLQkiZm9vJCRiYXIgPSBmb28kMWJhcjsiLiAgUHJvYmxlbSByZXBvcnRlZCBieSB0d2xldm8gYXQgeHM0YWxsLgotCSogZGF0YS9sYWxyMS5jYyAoYjRfbGhzX3ZhbHVlLCBiNF9yaHNfdmFsdWUsIGI0X2xoc19sb2NhdGlvbiwKLQliNF9yaHNfbG9jYXRpb24pOiBMaWtld2lzZS4KLQkqIGRhdGEveWFjYy5jIChiNF9saHNfdmFsdWUsIGI0X3Joc192YWx1ZSwgYjRfbGhzX2xvY2F0aW9uLAotCWI0X3Joc19sb2NhdGlvbik6IExpa2V3aXNlLgotCi0yMDA0LTEyLTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS9sYWxyMS5jYyAoeXlyZXBvcnRfc3ludGF4X2Vycm9yXyk6IENhdGNoIHVwIHdpdGggZ2xyLmMgYW5kCi0JeWFjYy5jOiBiZSBzdXJlIHRvIHN0YXkgd2l0aGluIHl5Y2hlY2tfLgotCSogdGVzdHMvYWN0aW9ucy5hdDogUmUtZW5hYmxlIEMrKyB0ZXN0cy4KLQotMjAwNC0xMi0xNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9wcmludF9ncmFwaC5jIChwcmludF9ncmFwaCk6IFJlbW92ZSBsYXlvdXRhbGdvcml0aG0gdXNlcyBmb3IKLQlyZWFsLgotCi0yMDA0LTEyLTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCVVzZSAjZGVmaW5lIHRvIGhhbmRsZSB0aGUgJW5hbWUtcHJlZml4LgotCi0JKiBkYXRhL2dsci5jLCBkYXRhL3lhY2MuYzogQ29tbWVudCBjaGFuZ2VzLgotCSogZGF0YS9sYWxyMS5jYyAoeXlsZXgpOiBVc2UgI2RlZmluZSB0byBzZWxlY3QgdGhlIG5hbWUgb2YgeXlsZXgsCi0Jc28gdGhhdCBvbmUgY2FuIHJlZmVyIHRvIHl5bGV4IGluIHRoZSBwYXJzZXIgZmlsZSwgYW5kIGhhdmUgaXQKLQlyZW5hbWVkLCBhcyBpcyB0aGUgY2FzZSB3aXRoIG90aGVyIHNrZWxldG9ucy4KLQotMjAwNC0xMi0xNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlNb3ZlIGxhbHIxLmNjIGludGVybmFscyBpbnRvIHl5Ki4KLQotCSogZGF0YS9sYWxyMS5jYyAoc2VtYW50aWNfc3RhY2tfLCBsb2NhdGlvbl9zdGFja18sIHN0YXRlX3N0YWNrXykKLQkoc2VtYW50aWNfc3RhY2tfLCBsb2NhdGlvbl9zdGFja18sIHBhY3RfLCBwYWN0X25pbmZfLCBkZWZhY3RfKQotCShwZ290b18sIGRlZmdvdG9fLCB0YWJsZV8sIHRhYmxlX25pbmZfLCBjaGVja18sIHN0b3NfLCByMV8sIHIyXykKLQkobmFtZV8sIHJoc18sIHByaHNfLCBybGluZV8sIHRva2VuX251bWJlcl8sIGVvZl8sIGxhc3RfLCBubnRzXykKLQkoZW1wdHlfLCBmaW5hbF8sIHRlcnJvcl8sIGVycmNvZGVfLCBudG9rZW5zXykKLQkodXNlcl90b2tlbl9udW1iZXJfbWF4XywgdW5kZWZfdG9rZW5fLCBuXywgbGVuXywgc3RhdGVfLCBuZXJyc18pCi0JKGxvb2thXywgaWxvb2thXywgZXJyb3JfcmFuZ2VfLCBuZXJyc18pOgotCVJlbmFtZSBhcy4uLgotCSh5eXNlbWFudGljX3N0YWNrXywgeXlsb2NhdGlvbl9zdGFja18sIHl5c3RhdGVfc3RhY2tfKQotCSh5eXNlbWFudGljX3N0YWNrXywgeXlsb2NhdGlvbl9zdGFja18sIHl5cGFjdF8sIHl5cGFjdF9uaW5mXykKLQkoeXlkZWZhY3RfLCB5eXBnb3RvXywgeXlkZWZnb3RvXywgeXl0YWJsZV8sIHl5dGFibGVfbmluZl8pCi0JKHl5Y2hlY2tfLCB5eXN0b3NfLCB5eXIxXywgeXlyMl8sIHl5bmFtZV8sIHl5cmhzXywgeXlwcmhzXykKLQkoeXlybGluZV8sIHl5dG9rZW5fbnVtYmVyXywgeXllb2ZfLCB5eWxhc3RfLCB5eW5udHNfLCB5eWVtcHR5XykKLQkoeXlmaW5hbF8sIHl5dGVycm9yXywgeXllcnJjb2RlXywgeXludG9rZW5zXykKLQkoeXl1c2VyX3Rva2VuX251bWJlcl9tYXhfLCB5eXVuZGVmX3Rva2VuXywgeXluXywgeXlsZW5fLCB5eXN0YXRlXykKLQkoeXluZXJyc18sIHl5bG9va2FfLCB5eWlsb29rYV8sIHl5ZXJyb3JfcmFuZ2VfLCB5eW5lcnJzXyk6Ci0JdGhlc2UuCi0KLTIwMDQtMTItMTUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JRml4IHNvbWUgcHJvYmxlbXMgcmVwb3J0ZWQgYnkgdHdsZXZvIGF0IHhzNGFsbC4KLQkqIHNyYy9zeW10YWIuYyAoc3ltYm9sX25ldyk6IFJlcG9ydCBhbiBlcnJvciBpZiB0aGUgaW5wdXQgZ3JhbW1hcgotCWNvbnRhaW5zIHRvbyBtYW55IHN5bWJvbHMuICBUaGlzIGlzIGJldHRlciB0aGFuIGNhbGxpbmcgYWJvcnQoKSBsYXRlci4KLQkqIHNyYy92Y2cuaCAoZW51bSBsYXlvdXRhbGdvcml0aG0pOiBSZW1vdmUuICBBbGwgdXNlcyByZW1vdmVkLgotCShzdHJ1Y3Qgbm9kZSwgc3RydWN0IGdyYXBoKToKLQlSZW5hbWUgbWVtYmVyIGV4cGFuZCB0byBzdHJldGNoLiAgQWxsIHVzZXMgY2hhbmdlZC4KLQkoc3RydWN0IGdyYXBoKTogUmVtb3ZlIG1lbWJlciBsYXlvdXRhbGdvcml0aG0uICBBbGwgdXNlcyByZW1vdmVkLgotCSogc3JjL3ZjZy5jIChnZXRfbGF5b3V0YWxnb3JpdGhtX3N0cik6IFJlbW92ZS4gIEFsbCB1c2VzIHJlbW92ZWQuCi0JKiBzcmMvdmNnX2RlZmF1bHRzLmggKEdfU1RSRVRDSCk6IFJlbmFtZWQgZnJvbSBHX0VYUEFORC4KLQlBbGwgdXNlcyBjaGFuZ2VkLgotCShOX1NUUkVUQ0gpOiBSZW5hbWUgZnJvbSBOX0VYUEFORC4gIEFsbCB1c2VzIGNoYW5nZWQuCi0KLTIwMDQtMTItMTUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2xhbHIxLmNjOiBOb3JtYWxpemUgLyoqIFxicmllZiAuLi4gKi8gdG8gLy8vLgotCUFkZCBtb3JlIERveHlnZW4gY29tbWVudHMuCi0JKHN5bXByaW50Xywgc3RhY2tfcHJpbnRfLCByZWR1Y2VfcHJpbnRfLCBkZXN0cnVjdF8sIHBvcCkKLQkocmVwb3J0X3N5bnRheF9lcnJvcl8sIHRyYW5zbGF0ZV8pOiBSZW5hbWUgYXMuLi4KLQkoeXlzeW1wcmludF8sIHl5c3RhY2tfcHJpbnRfLCB5eXJlZHVjZV9wcmludF8sIHl5ZGVzdHJ1Y3RfKQotCSh5eXBvcF8sIHl5cmVwb3J0X3N5bnRheF9lcnJvcl8sIHl5dHJhbnNsYXRlXyk6IHRoaXMuCi0KLTIwMDQtMTItMTUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2xhbHIxLmNjIChsZXhfKTogUmVuYW1lIGFzLi4uCi0JKHl5bGV4Xyk6IHRoaXMuCi0JTW92ZSB0aGUgdHJhY2UgaGVyZS4KLQlUYWtlIHRoZSAlbmFtZS1wcmVmaXggaW50byBhY2NvdW50LgotCVJlcG9ydGVkIGJ5IEFsZXhhbmRyZSBEdXJldC1MdXR6LgotCi0yMDA0LTEyLTE1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCVNpbXBsaWZ5IHRoZSBDKysgcGFyc2VyIGNvbnN0cnVjdG9yLgotCi0JKiBkYXRhL2xhbHIxLmNjIChkZWJ1Z18pOiBSZW5hbWUgYXMuLi4KLQkoeXlkZWJ1Z18pOiBzbyB0aGF0IHRoZSBwYXJzZXIncyBpbnRlcm5hbHMgYXJlIGFsd2F5cyBpbiB0aGUgeXkqCi0JcHNldWRvIG5hbWVzcGFjZS4KLQlBZGp1c3QgdXNlcy4KLQkoYjRfcGFyc2VfcGFyYW1fZGVjbCk6IFJlbW92ZSB0aGUgbGVhZGluZyBjb21tYSBhcyBpdCBpcyBub3cgb25seQotCWNhbGxlZCBhcyB1bmlxdWUgYXJndW1lbnQgbGlzdC4KLQkoUGFyc2VyOjpQYXJzZXIpOiBSZW1vdmUgdGhlIGNvbnN0cnVjdG9yIGFjY2VwdGluZyBhIGxvY2F0aW9uIGFuZAotCWFuIGluaXRpYWwgZGVidWdnaW5nIGxldmVsLgotCVJlbW92ZSBmcm9tIHRoZSBvdGhlciBjdG9yIHRoZSBhcmd1bWVudCBmb3IgdGhlIGRlYnVnZ2luZyBsZXZlbC4KLQkoZGVidWdfbGV2ZWxfdHlwZSwgZGVidWdfbGV2ZWwsIHNldF9kZWJ1Z19sZXZlbCk6IE5ldy4KLQotCSogdGVzdHMvYWN0aW9ucy5hdCwgdGVzdHMvY2FsYy5hdCwgdGVzdHMvcmVncmVzc2lvbi5hdDogQWRqdXN0Ci0JY29uc3RydWN0b3IgY2FsbHMuCi0KLTIwMDQtMTItMTUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JUmVtb3ZlIGI0X3Jvb3QgcmVsYXRlZCBtYXRlcmlhbDogZmFpbHVyZSBleHBlcmltZW50Ci0JKHdoaWNoIGdvYWwgd2FzIHRvIGFsbG93IHRvIGRlcml2ZSBmcm9tIGEgY2xhc3MpLgotCi0JKiBkYXRhL2xhbHIxLmNjIChiNF9yb290LCBiNF9wYXJhbSwgYjRfY29uc3RydWN0b3IpOiBSZW1vdmUKLQlkZWZpbml0aW9ucyBhbmQgdXNlcy4KLQotMjAwNC0xMi0xNCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIGRhdGEvZ2xyLmMgKHN0cnVjdCB5eUdMUlN0YWNrKTogeXllcnJvcl9yYW5nZSBub3cgaGFzIDMgaXRlbXMsCi0Jbm90IDIsIHNpbmNlIGl0J3Mgbm90IHBvcnRhYmxlIHRvIHN1YnRyYWN0IDEgZnJvbSB0aGUgc3RhcnQgb2YgYW4KLQlhcnJheS4gIFRoZSBuZXcgaXRlbSAwIGlzIG5ldmVyIHNldCBvciB1c2VkLiAgQWxsIHVzZXMgY2hhbmdlZC4KLQotCSh5eXJlY292ZXJTeW50YXhFcnJvcik6IFVzZSBZWUxMT0NfREVGQVVMVCBpbnN0ZWFkIG9mIGFzc3VtaW5nCi0JdGhlIGRlZmF1bHQgZGVmaW5pdGlvbiBvZiBZWUxMT0NfREVGQVVMVC4gIFByb2JsZW0gcmVwb3J0ZWQKLQlieSBGcmFuayBIZWNrZW5iYWNoLgotCi0yMDA0LTEyLTEyICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogZGF0YS9nbHIuYyAoWVlSSFNMT0MpOiBEb24ndCBoYXZlIHR3byBkZWZpbml0aW9ucywgb25lIGZvcgotCXRoZSBub3JtYWwgY2FzZSBhbmQgb25lIGZvciB0aGUgZXJyb3IgY2FzZS4gIEp1c3QgdXNlIHRoZQotCWZpcnN0IG9uZSB1bmlmb3JtbHkuICBQcm9ibGVtIHJlcG9ydGVkIGJ5IEZyYW5rIEhlY2tlbmJhY2guCi0JKFlZTExPQ19ERUZBVUxUKTogVXNlIHRoZSBjb252ZW50aW9ucyBvZiB5YWNjLmMsIHNvIHdlIGNhbgotCXVzZSBleGFjdGx5IHRoZSBzYW1lIG1hY3JvIGluIGJvdGggcGxhY2VzLgotCSh5eWVycm9yX3JhbmdlKTogTm93IG9mIHR5cGUgeXlHTFJTdGFja0l0ZW0sIG5vdCBZWUxUWVBFLAotCXNvIHRoYXQgdGhlIG5vcm1hbC1jYXNlIFlZUkhTTE9DIHdvcmtzIGZvciB0aGUgZXJyb3IgY2FzZSB0b28uCi0JQWxsIHVzZXMgY2hhbmdlZC4KLQkqIGRhdGEveWFjYy5jIChZWVJIU0xPQyk6IE5ldyBtYWNybywgdGFrZW4gZnJvbSBnbHIuYy4KLQkoWVlMTE9DX0RFRkFVTFQpOiBVc2UgdGhlIHNhbWUgbWFjcm8gYXMgZ2xyLmMuCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoTG9jYXRpb24gRGVmYXVsdCBBY3Rpb24pOiBEb24ndCBjbGFpbSB0aGF0Ci0Jd2UgaGF2ZSBhbiBhcnJheSBvZiBsb2NhdGlvbnMuICBVc2UgdGhlIHNhbWUgbWFjcm8gZm9yIGJvdGggZ2xyCi0JYW5kIGxhbHIgcGFyc2Vycy4gIE1lbnRpb24gWVlSSFNMT0MuICBNZW50aW9uIHdoYXQgaGFwcGVucyB3aGVuCi0JdGhlIGluZGV4IGlzIDAuCi0KLTIwMDQtMTItMTAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBIQUNLSU5HOiBVcGRhdGUgZW1haWwgYWRkcmVzc2VzIHRvIHNlbmQgYW5ub3VuY2VtZW50cyB0by4KLQotCSogY29uZmlndXJlLmFjIChBQ19JTklUKTogQnVtcCB2ZXJzaW9uIHRvIDEuODc1Zi4KLQotMjAwNC0xMi0xMCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIE5FV1M6IFZlcnNpb24gMS44NzVlLgotCSogc3JjL3BhcnNlLWdyYW0uYywgc3JjL3BhcnNlLWdyYW0uaDogUmVnZW5lcmF0ZSB3aXRoIDEuODc1ZS4KLQotCSogc3JjL3NjYW4tc2tlbC5sOiBJbmNsdWRlICJjb21wbGFpbi5oIiwgZm9yICJmYXRhbCIuCi0KLQkqIHNyYy9yZWxhdGlvbi5oIChyZWxhdGlvbl9wcmludCwgcmVsYXRpb25fZGlncmFwaCk6Ci0JUmVsYXRpb24gc2l6ZXMgYXJlIG9mIHR5cGUgcmVsYXRpb25fbm9kZSwgbm90IHNpemVfdCAodGhpcyBpcwotCW1lcmVseSBhIGRvYyBmaXgsIHNpbmNlIHRoZSB0d28gdHlwZXMgYXJlIGVxdWl2YWxlbnQpLgotCShyZWxhdGlvbl90cmFuc3Bvc2UpOiBSZWxhdGlvbiBzaXplcyBhcmUgb2YgdHlwZSByZWxhdGlvbl9ub2RlLAotCW5vdCBpbnQuCi0JKiBzcmMvcmVsYXRpb24uYzogTGlrZXdpc2UuCi0JKHRvcCwgaW5maW5pdHkpOiBOb3cgb2YgdHlwZSByZWxhdGlvbl9ub2RlLCBub3QgaW50LgotCSh0cmF2ZXJzZSwgcmVsYXRpb25fdHJhbnNwb3NlKTogVXNlIHJlbGF0aW9uX25vZGUsIG5vdCBpbnQuCi0KLQkqIGRhdGEvZ2xyLmMgKHl5dXNlckFjdGlvbiwgeXlyZWNvdmVyU3ludGF4RXJyb3IpOiBNYXJrIGFyZ3MKLQl3aXRoIEFUVFJJQlVURV9VTlVTRUQgaWYgdGhleSdyZSBub3QgdXNlZCwgdG8gYXZvaWQgR0NDIHdhcm5pbmcuCi0JKHl5cGFyc2UpOiBSZW1vdmUgdW51c2VkIGxvY2FsIGludHJvZHVjZWQgaW4gMjAwNC0xMC0yNSBwYXRjaC4KLQotCSogdGVzdHMvYWN0aW9ucy5hdCAoX0FUX0NIRUNLX1BSSU5URVJfQU5EX0RFU1RSVUNUT1IpOiBOZXcgYXJnCi0Jc3BlY2lmeWluZyB3aGV0aGVyIHRoZSB0ZXN0IHNob3VsZCBiZSBza2lwcGVkLiAgVXNlIGl0IHRwCi0Jc3BlY2lmeSB0aGF0IHRoZSBbJWRlZmluZXMgJXNrZWxldG9uICJsYWxyMS5jYyJdIHRlc3RzIGN1cnJlbnRseQotCWZhaWwgb24gc29tZSBob3N0cywgYW5kIHNob3VsZCBiZSBza2lwcGVkLgotCi0yMDA0LTEyLTA4ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogc3JjL3N5c3RlbS5oIChDQUxMT0MsIE1BTExPQywgUkVBTExPQyk6IFJlbW92ZS4gIEFsbCBjYWxsZXJzCi0JY2hhbmdlZCB0byB1c2UgeGNhbGxvYywgeG5tYWxsb2MsIHhucmVhbGxvYywgcmVzcGVjdGl2ZWx5LAotCXVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIGJlbG93LgotCi0JKiBzcmMvTFIwLmMgKGFsbG9jYXRlX2l0ZW1zZXRzKTogVXNlIHhubWFsbG9jLCBub3QgeGNhbGxvYywKLQl0byBhbGxvY2F0ZSBrZXJuZWxfYmFzZSwga2VybmVsX2l0ZW1zLCBrZXJuZWxfc2l6ZSwgc2luY2UKLQl0aGV5IG5lZWRuJ3QgYmUgaW5pdGlhbGl6ZWQgdG8gMC4KLQkoYWxsb2NhdGVfc3RvcmdhZSk6IExpa2V3aXNlLCBmb3Igc2hpZnRzZXQsIHJlZHNldCwgc2hpZnRfc3ltYm9sLgotCSogc3JjL2Nsb3N1cmUuYyAobmV3X2Nsb3N1cmUpOiBMaWtld2lzZSwgZm9yIGl0ZW1zZXQuCi0JKiBzcmMvZGVyaXZlcy5jIChkZXJpdmVzX2NvbXB1dGUpOiBMaWtld2lzZSwgZm9yIGRlbHRzLCBkZXJpdmVzLCBxLgotCSogc3JjL2xhbHIuYyAoc2V0X2dvdG9fbWFwKTogTGlrZXdpc2UsIGZvciB0ZW1wX21hcC4KLQkoaW5pdGlhbGl6ZV9GKTogTGlrZXdpc2UsIGZvciByZWFkcywgZWRnZSwgcmVhZHNbaV0sIGluY2x1ZGVzW2ldLgotCShidWlsZF9yZWxhdGlvbnMpOiBMaWtld2lzZSBmb3IgZWRnZSwgc3RhdGVzMSwgaW5jbHVkZXMuCi0JKiBzcmMvbnVsbGFibGUuYyAobnVsbGFibGVfY29tcHV0ZSk6IExpa2V3aXNlLCBmb3Igc3F1ZXVlLCByZWx0cy4KLQkqIHNyYy9yZWFkZXIuYyAocGFja2dyYW0pOiBMaWtld2lzZSwgZm9yIHJpdGVtLCBydWxlcy4KLQkqIHNyYy9yZWR1Y2UuYyAobm9udGVybWluYWxzX3JlZHVjZSk6IExpa2V3aXNlIGZvciBub250ZXJtbWFwLgotCSogc3JjL3JlbGF0aW9uLmMgKHJlbGF0aW9uX2RpZ3JhcGgpOiBMaWtld2lzZSBmb3IgVkVSVElDRVMuCi0JKHJlbGF0aW9uX3RyYW5zcG9zZSk6IExpa2V3aXNlIGZvciBuZXdfUiwgZW5kX1IuCi0JKiBzcmMvc3ltdGFiLmMgKHN5bWJvbHNfdG9rZW5fdHJhbnNsYXRpb25zX2luaXQpOiBMaWtld2lzZSBmb3IKLQl0b2tlbl90cmFuc2xhdGlvbnMuCi0JKiBzcmMvdGFibGVzLmMgKHNhdmVfcm93KTogTGlrZXdpc2UgZm9yIGZyb21zLCB0b3MsIGNvbmZsaWN0X3Rvcy4KLQkodG9rZW5fYWN0aW9ucyk6IExpa2V3aXNlIGZvciB5eWRlZmFjdCwgYWN0cm93LCBjb25mbHJvdywKLQljb25mbGljdF9saXN0LgotCShzYXZlX2NvbHVtbik6IExpa2V3aXNlIGZvciBmcm9tc1tzeW1ub10sIHRvc1tzeW1ub10uCi0JKGdvdG9fYWN0aW9ucyk6IExpa2V3aXNlIGZvciBzdGF0ZV9jb3VudC4KLQkocGFja190YWJsZSk6IExpa2V3aXNlIGZvciBiYXNlLCBwb3MsIGNoZWNrLgotCSh0YWJsZXNfZ2VuZXJhdGUpOiBMaWtld2lzZSBmb3Igd2lkdGguCi0KLQkqIHNyYy9MUjAuYyAoc2V0X3N0YXRlcyk6IERvbid0IHJldXNlIGtlcm5lbF9zaXplIGFuZCBrZXJuZWxfYmFzZQotCWZvciBpbml0aWFsIGNvcmUuICBKdXN0IGhhdmUgYSBzZXBhcmF0ZSBjb3JlLCBzbyB3ZSBuZWVkbid0IHdvcnJ5Ci0JYWJvdXQgd2hldGhlciBrZXJuZWxfc2l6ZSBhbmQga2VybmVsX2Jhc2UgYXJlIGluaXRpYWxpemVkLgotCi0JKiBzcmMvTFIwLmMgKHNoaWZ0X3N5bWJvbCwgcmVkc2V0LCBzaGlmdHNldCwga2VybmVsX2Jhc2UsCi0Ja2VybmVsX3NpemUsIGtlcm5lbF9pdGVtcyk6IFJlbW92ZSB1bm5lY2Vzc2FyeSBpbml0aWFsaXphdGlvbi4KLQkqIHNyYy9jb25mbGljdHMuYyAoY29uZmxpY3RzKTogTGlrZXdpc2UuCi0JKiBzcmMvZGVyaXZlcy5jIChkZXJpdmVzKTogTGlrZXdpc2UuCi0JKiBzcmMvbXVzY2xlX3RhYmxjIChtdXNjbGVfaW5zZXJ0KTogTGlrZXdpc2UuCi0JKiBzcmMvcmVsYXRpb24uYyAocmVsYXRpb25fZGlncmFwaCk6IExpa2V3aXNlLgotCSogc3JjL3RhYmxlcy5jIChmcm9tcywgdG9zLCBjb25mbGljdF90b3MsIHRhbGx5LCB3aWR0aCwgYWN0cm93LCBvcmRlciwKLQljb25mbHJvdywgY29uZmxpY3RfdGFibGUsIGNvbmZsaWN0X2xpc3QsIHRhYmxlLCBjaGVjayk6Ci0JTGlrZXdpc2UuCi0KLQkqIHNyYy9jbG9zdXJlLmMgKG5ld19jbG9zdXJlKTogQXJnIGlzIG9mIHR5cGUgdW5zaWduZWQgaW50LCBub3QgaW50LgotCVRoaXMgaXMgYmVjYXVzZSBhbGwgY2FsbGVycyBwYXNzIHVuc2lnbmVkIGludC4KLQkqIHNyYy9jbG9zdXJlLmggKG5ld19jbG9zdXJlKTogTGlrZXdpc2UuCi0KLQkqIHNyYy9sYWxyLmMgKGluaXRpYWxpemVfRik6IEluaXRpYWxpemUgcmVhZHNbaV0gaW4gYWxsIGNhc2VzLgotCShidWlsZF9yZWxhdGlvbnMpOiBJbml0aWFsaXplIGluY2x1ZGVzW2ldIGluIGFsbCBjYXNlcy4KLQkqIHNyYy9yZWFkZXIuYyAocGFja2dyYW0pOiBBbHdheXMgaW5pdGlhbGl6ZSBydWxlc1tydWxlbm9dLnByZWMKLQlhbmQgcnVsZXNbcnVsZW5vXS5wcmVjc3ltLiAgSW5pdGlhbGl6ZSBtZW1iZXJzIGluIG9yZGVyLgotCSogc3JjL3JlbGF0aW9uLmMgKHJlbGF0aW9uX3RyYW5zcG9zZSk6IEFsd2F5cyBpbml0aWFsaXplIG5ld19SW2ldCi0JYW5kIGVuZF9SW2ldLgotCSogc3JjL3RhYmxlLmMgKGNvbmZsaWN0X3Jvdyk6IEluaXRpYWxpemUgMCBhdCBlbmQgb2YgY29uZmxpY3RfbGlzdC4KLQotCSogc3JjL291dHB1dC5jIChwcmVwYXJlX2FjdGlvbnMpOiBQYXNzIDAgaW5zdGVhZCBvZiBjb25mbGljdF9saXN0WzBdOwotCWNvbmZsaWN0X2xpc3RbMF0gd2FzIGFsd2F5cyAwLCBidXQgbm93IGl0IGlzbid0IGluaXRpYWxpemVkLgotCi0JKiBzcmMvdGFibGUuYyAodGFibGVfZ3Jvdyk6IFdoZW4gY29uZmxpY3RfdGFibGUgZ3JldywgdGhlIGdyb3duCi0JYXJlYSB3YXNuJ3QgY2xlYXJlZC4gIEZpeCB0aGlzLgotCi0JKiBsaWIvLmN2c2lnbm9yZTogQWRkIHN0cmR1cC5jLCBzdHJkdXAuaC4KLQkqIG00Ly5jdnNpZ25vcmU6IEFkZCBzdHJkdXAubTQuCi0KLTIwMDQtMTItMDcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBzcmMvbGFsci5oIChHT1RPX05VTUJFUl9NQVhJTVVNKTogTmV3IG1hY3JvLgotCSogc3JjL2xhbHIuYyAoc2V0X2dvdG9fbWFwKTogRG9uJ3QgYWxsb3cgbmdvdG9zIHRvIGVxdWFsCi0JR09UT19OVU1CRVJfTUFYSU1VTSwgc2luY2Ugd2Ugb2NjYXNpb25hbGx5IGNvbXB1dGUKLQluZ290b3MgKyAxIHdpdGhvdXQgY2hlY2tpbmcgZm9yIG92ZXJmbG93LgotCShidWlsZF9yZWxhdGlvbnMpOiBVc2UgRU5EX05PREUsIG5vdCAtMSwgdG8gZGVub3RlIGVuZCBvZiBlZGdlcy4KLQkqIHNyYy9sYWxyLmMgKHNldF9nb3RvX21hcCwgbWFwX2dvdG8sIGluaXRpYWxpemVfRiwgYWRkX2xvb3BiYWNrX2VkZ2UsCi0JYnVpbGRfcmVsYXRpb25zKTogVXNlIGdvdG9fbnVtYmVyLCBub3QgaW50LCBmb3IgZ290byBudW1iZXJzLgotCSogc3JjL3RhYmxlcy5jIChzYXZlX2NvbHVtbiwgZGVmYXVsdF9nb3RvKTogTGlrZXdpc2UuCi0KLTIwMDQtMTEtMjMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2xhbHIxLmNjIChZWVNUWVBFKTogRGVmaW5lIGl0IGFzIGlzIGRvbmUgZm9yIEMsIGluc3RlYWQKLQlvZiAjZGVmaW5pbmcgZnJvbSB5eXN0eXBlLgotCURvbid0IHR5cGVkZWYgeXlzdHlwZSwgQysrIGRvZXMgbm90IG5lZWQgaXQuCi0JVGhpcyBsZXRzIGl0IHBvc3NpYmxlIHRvIGZvcndhcmQgZGVjbGFyZSBpdCBhcyB1bmlvbi4KLQotMjAwNC0xMS0yMyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIGJvb3RzdHJhcCAoZ251bGliX21vZHVsZXMpOiBBZGQgZXh0ZW5zaW9ucy4KLQlQcm9ibGVtIHJlcG9ydGVkIGJ5IEppbSBNZXllcmluZy4KLQotMjAwNC0xMS0yMiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIHNyYy9MUjAuYywgc3JjL2Nsb3N1cmUuYywgc3JjL2Rlcml2ZXMuYywgc3JjL2dyYW0uYywKLQlzcmMvbGFsci5jLCBzcmMvbnVsbGFibGUuYywgc3JjL3JlbGF0aW9uLmMsIHNyYy9zY2FuLXNrZWwubCwKLQlzcmMvc3lzdGVtLmgsIHNyYy90YWJsZXMuYzogWEZSRUUgLT4gZnJlZSwgdG8gYWNjb21tb2RhdGUKLQlyZWNlbnQgY2hhbmdlIHRvIGdudWxpYiB4YWxsb2MuaC4KLQlQcm9ibGVtIHJlcG9ydGVkIGJ5IEppbSBNZXllcmluZy4KLQotMjAwNC0xMS0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvbGFscjEuY2MgKHN5bXByaW50Xyk6IFVzZSBjZGVidWdfIHRvIGF2b2lkIHdhcm5pbmdzLgotCi0yMDA0LTEwLTI4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4sCi0JICAgIEFsZXhhbmRyZSBEdXJldC1MdXR6IDxhZGxAZ251Lm9yZz4KLQotCSogZGF0YS9sYWxyMS5jYyAoUGFyc2VyOjp5eWNkZWJ1Z18pOiBOZXcsIGEgcG9pbnRlciwgdG8gYWxsb3cKLQljaGFuZ2VzLgotCShZWUNERUJVRyk6IEFkanVzdC4KLQlVc2UgaXQgaW5zdGVhZCBvZiBjZGVidWdfLgotCShQYXJzZXI6OmRlYnVnX3N0cmVhbSwgUGFyc2VyOjpzZXRfZGVidWdfc3RyZWFtKTogTmV3LgotCShQYXJzZXI6OnN5bXByaW50Xyk6IERlZmluZSBjZGVidWdfIGZvciB0ZW1wb3JhcnkgYmFja3dhcmQKLQljb21wYXRpYmlsaXR5LgotCSogdGVzdHMvYWN0aW9ucy5hdCAoX0FUX0NIRUNLX1BSSU5URVJfQU5EX0RFU1RSVUNUT1IpOiBVc2UKLQlkZWJ1Z19zdHJlYW0gKCkuCi0KLTIwMDQtMTEtMTcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2xhbHIxLmNjIChQYXJzZXI6cHJpbnRfKTogUmVtb3ZlLCB1c2UgJXByaW50ZXIgaW5zdGVhZC4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKF9BVF9EQVRBX0RBTkNFUl9ZKTogQWRqdXN0LgotCSogdGVzdHMvY2FsYy5hdCAoX0FUX0RBVEFfQ0FMQ19ZKTogRGl0dG8uCi0JKiB0ZXN0cy9hY3Rpb25zLmF0IChfQVRfQ0hFQ0tfUFJJTlRFUl9BTkRfREVTVFJVQ1RPUik6IExpa2V3aXNlLgotCi0yMDA0LTEwLTI3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogZGF0YS9nbHIuYyAoeXlsb2NfZGVmYXVsdCk6IFJlbW92ZTsgbm90IHVzZWQuCi0JUHJvYmxlbSByZXBvcnRlZCBieSBGcmFuayBIZWNrZW5iYWNoLgotCi0yMDA0LTEwLTI1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS9nbHIuYyAoWVlSSFNMT0MpOiBNb3ZlIGl0cyBkZWZpbml0aW9uIG5leHQgdG8gaXRzIHVzZXMuCi0JSW50cm9kdWNlIGFub3RoZXIgZGVmaW5pdGlvbiB0byBhZGRyZXNzIHNpbXBsZSBsb2NhdGlvbiBhcnJheXMuCi0JKHl5R0xSU3RhY2spOiBOZXcgbWVtYmVyOiB5eWVycm9yX3JhbmdlLgotCSh5eXJlY292ZXJTeW50YXhFcnJvciwgeXlwYXJzZSk6IFVwZGF0ZSBpdC4KLQkoeXlyZWNvdmVyU3ludGF4RXJyb3IpOiBVc2UgaXQgd2hlbiBzaGlmdGluZyB0aGUgZXJyb3IgdG9rZW4gdG8KLQloYXZlIGFuIGFjY3VyYXRlIHJhbmdlLCBlcXVpdmFsZW50IHRvIHRoZSBvbmUgY29tcHV0ZWQgYnkgYm90aAotCXlhY2MuYyBhbmQgbGFscjEuY2MuCi0JKiB0ZXN0cy9jeHgtdHlwZS5hdCAoX0FUX1RFU1RfR0xSX0NYWFRZUEVTKTogQ2hhbmdlIGl0cyB5eWxleCBzbwotCXRoYXQgY29sdW1uIG51bWJlcnMgc3RhcnQgYXQgY29sdW1uIDAsIGFzIHBlciBHTlUgQ29kaW5nCi0JU3RhbmRhcmRzLCB0aGUgb3RoZXJzIHRlc3RzLCBhbmQgdGhlIGRvYy4KLQkoX0FUX1JFU09MVkVEX0dMUl9PVVRQVVRfV0lUSF9MT0MsIF9BVF9BTUJJR19HTFJfT1VUUFVUX1dJVEhfTE9DKToKLQlBZGp1c3QgdG8gdGhlIGFib3ZlIGNoYW5nZSAoZmlyc3QgY29sdW1uIGlzIDApLgotCUFuZCBhZGp1c3QgdGhlIGxvY2F0aW9uIG9mIHRoZSAiPGVycm9yPiIsIG5vdyBjb3ZlcmluZyB0aGUgd2hvbGUKLQlsaW5lLgotCi0yMDA0LTEwLTIyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQlhbmQgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQlSZW1vdmUgc29tZSBhcmJpdHJhcnkgbGltaXRzIG9uIGdvdG8gbnVtYmVycyBhbmQgcmVsYXRpb25zLgotCSogc3JjL2xhbHIuYyAoZ290b19tYXAsIG5nb3RvcywgZnJvbV9zdGF0ZSwgdG9fc3RhdGUpOiBPbWl0Ci0JaW5pdGlhbCB2YWx1ZXMsIHNpbmNlIHRoZXkncmUgbmV2ZXIgdXNlZC4KLQkoc2V0X2dvdG9fbWFwKTogbmdvdG9zIGlzIG5vdyB1bnNpZ25lZCwgc28gdGVzdCBmb3Igb3ZlcmZsb3cKLQlieSBzZWVpbmcgd2hldGhlciBpdCB3cmFwcyBhcm91bmQgdG8gemVyby4KLQkqIHNyYy9sYWxyLmggKGdvdG9fbnVtYmVyKTogTm93IHNpemVfdCwgbm90IHNob3J0IGludC4KLQkoR09UT19OVU1CRVJfTUFYSU1VTSk6IFJlbW92ZS4KLQkqIHNyYy9yZWxhdGlvbi5jIChyZWxhdGlvbl9wcmludCwgdHJhdmVyc2UsIHJlbGF0aW9uX3RyYW5zcG9zZSk6Ci0JQ2hlY2sgZm9yIEVORF9OT0RFIHJhdGhlciB0aGFuIGxvb2tpbmcgYXQgc2lnbi4KLQkqIHNyYy9yZWxhdGlvbi5oIChFTkRfTk9ERSk6IE5ldyBtYWNyby4KLQkocmVsYXRpb25fbm9kZSk6IE5vdyBzaXplX3QsIG5vdCBzaG9ydCBpbnQuCi0KLTIwMDQtMTAtMjIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoTGFuZ3VhZ2UgYW5kIEdyYW1tYXIpOiBJbiBleGFtcGxlLCAiaW50IiBpcyBhCi0Ja2V5d29yZCwgbm90IGFuIGlkZW50aWZpZXIuICBQcm9ibGVtIHJlcG9ydGVkIGJ5IEJhcm9uIFNjaHdhcnR6IGluCi0JPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwNC0xMC9tc2cwMDAxNy5odG1sPi4KLQotMjAwNC0xMC0xMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9zeW10YWIuYyAoc3ltYm9sX2NoZWNrX2FsaWFzX2NvbnNpc3RlbmN5KTogQWxzbyBjaGVjawotCXR5cGUgbmFtZXMsIGRlc3RydWN0b3JzLCBhbmQgcHJpbnRlcnMuCi0JUmVwb3J0ZWQgYnkgQWxleGFuZHJlIER1cmV0LUx1dHouCi0JUmVjb2RlIHRoZSBoYW5kbGluZyBvZiBhc3NvY2lhdGl2aXR5IGFuZCBwcmVjZWRlbmNlIGluIHRlcm1zCi0Jb2Ygc3ltYm9sX3ByZWNlZGVuY2Vfc2V0LgotCUFjY2VwdCBubyByZWRlY2xhcmF0aW9uIGF0IGFsbCwgbm90IGV2ZW4gZXF1YWwgdG8gdGhlIHByZXZpb3VzCi0JdmFsdWUuCi0JKHJlZGVjbGFyYXRpb24pOiBOZXcuCi0JVXNlIGl0IHRvIGZhY3RvciByZWRlY2xhcmF0aW9uIGNvbXBsYWludHMuCi0JKHN5bWJvbF9tYWtlX2FsaWFzKTogRG9uJ3Qgc2V0IHRoZSB0eXBlIG9mIHRoZSBhbGlhcywgbGV0Ci0Jc3ltYm9sX2NoZWNrX2FsaWFzX2NvbnNpc3RlbmN5IGRvIGl0IGFzIGZvciBvdGhlciBmZWF0dXJlcy4KLQkqIHNyYy9zeW10YWIuaCAoc3ltYm9sKTogQWRkIG5ldyBtZW1iZXIgcHJlY19sb2NhdGlvbiwgYW5kCi0JdHlwZV9sb2NhdGlvbi4KLQkqIHNyYy9zeW10YWIuYyAoc3ltYm9sX3ByZWNlZGVuY2Vfc2V0LCBzeW1ib2xfdHlwZV9zZXQpOiBTZXQgdGhlbS4KLQkqIHRlc3RzL2lucHV0LmF0IChJbmNvbXBhdGlibGUgQWxpYXNlcyk6IE5ldy4KLQotMjAwNC0xMC0wOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkuY3ZzaWdub3JlIGZpeGVzIHRvIGFjY29tbW9kYXRlIGdudWxpYiBjaGFuZ2VzLAotCWFuZCB0aGUgcHJhY3RpY2Ugb2YgbmFtaW5nIGJ1aWxkIGRpcmVjdG9yaWVzICJfYnVpbGQiLgotCSogLmN2c2lnbm9yZTogQWRkICJfKiIuICBTb3J0LgotCSogbGliLy5jdnNpZ25vcmU6IEFkZCBnZXRvcHRfLmgsIHhhbGxvYy1kaWUuYy4KLQkqIG00Ly5jdnNpZ25vcmU6IEFkZCAiKl9nbC5tNCIuCi0KLTIwMDQtMTAtMDYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvcGFyc2UtZ3JhbS55IChhZGRfcGFyYW0pOiBGaXggdGhlIHRydW5jYXRpb24gb2YgdHJhaWxpbmcKLQlzcGFjZXMuCi0KLTIwMDQtMTAtMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JSW4gQmlzb24gMS44NzUncyB5YWNjLmMsIFlZTExPQ19ERUZBVUxUIHdhcyBjYWxsZWQgcmVnYXJkbGVzcwotCXdoZXRoZXIgdGhlIHJlZHVjaW9uIHdhcyBlbXB0eSBvciBub3QuICBUaGlzIGxlYXZlcyByb29tIHRvCi0JaW1wcm92ZSB0aGUgdXNlIG9mIFlZTExPQ19ERUZBVUxUIGluIHN1Y2ggYSBjYXNlLgotCWxhbHIxLmNjIGlzIHN0aWxsIGV4cGVyaW1lbnRhbCwgc28gY2hhbmdpbmcgdGhpcyBpcyBhY2NlcHRhYmxlLgotCUFuZCBmaW5hbGx5LCB0aGVyZSBhcmUgcHJvYmFibHkgbm90IG1hbnkgdXNlcnMgd2hvIGNoYW5nZWQgdGhlCi0JaGFuZGxpbmcgb2YgbG9jYXRpb25zIGluIEdMUiwgc28gY2hhbmdpbmcgaXMgYWRtaXNzaWJsZSB0b28uCi0KLQkqIGRhdGEvZ2xyLmMsIGRhdGEvbGFscjEuY2MsIGRhdGEveWFjYy5jIChZWUxMT0NfREVGQVVMVCk6IE9uIGFuCi0JZW1wdHkgcmVkdWN0aW9uLCBzZXQgQCQgdG8gYW4gZW1wdHkgbG9jYXRpb24gZW5kaW5nIHRoZSBwcmV2aW91c2x5Ci0Jc3RhY2tlZCBzeW1ib2wuCi0JQWRqdXN0IHVzZXMgdG8gbWFrZSBzdXJlIHRoZSBjb2RlIGlzIHRyaWdnZXJlZCBvbiBlbXB0eQotCXJlZHVjdGlvbnMuCi0JKiB0ZXN0cy9hY3Rpb25zLmF0IChfQVRfQ0hFQ0tfUFJJTlRFUl9BTkRfREVTVFJVQ1RPUik6IEFkanVzdCB0aGUKLQlleHBlY3RlZCBvdXRwdXQ6IGVtcHR5IHJlZHVjdGlvbnMgaGF2ZSBlbXB0eSBsb2NhdGlvbnMuCi0KLTIwMDQtMDktMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2xhbHIxLmNjOiBNb3ZlIHRvd2FyZHMgYSBtb3JlIHN0YW5kYXJkIEMrKyBjb2Rpbmcgc3R5bGUKLQlmb3IgdGVtcGxhdGVzOiBDbGFzcyA8IFQgPiAtPiBDbGFzczxUPi4KLQotMjAwNC0wOS0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvbGFscjEuY2M6IFJlaW5zdGFsbCB0aGUgZm9ybWVyIGN0b3IsIGZvciBzYWtlIG9mCi0JY29tcGF0aWJpbGl0eSwgYnV0IHdhcm4gaXQgd2lsbCBiZSByZW1vdmVkLgotCU1vdmUgdG93YXJkcyBhIG1vcmUgc3RhbmRhcmQgQysrIGNvZGluZyBzdHlsZSAoaS5lLiwgdHlwZSAqdmFyIC0+Ci0JdHlwZSogdmFyKS4KLQotMjAwNC0wOS0yNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIHNyYy9wYXJzZS1ncmFtLnkgKGFkZF9wYXJhbSk6IFJld3JpdGUgdG8gYXZvaWQgc3RyY2hyLAotCXNpbmNlIGl0J3MgbGVzcyBsaWtlbHkgdG8gd29yayBpZiBOVUxzIGFyZSBpbnZvbHZlZCBpbiB0aGUgZnV0dXJlLgotCi0yMDA0LTA5LTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS95YWNjLmMgKFlZX0xPQ0FUSU9OX1BSSU5UKTogRml4IGl0cyBkZWZhdWx0IGRlY2xhcmF0aW9uLgotCi0yMDA0LTA5LTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS9sYWxyMS5jYyAoYjRfcGFyc2VfcGFyYW1fZGVjbF8xKTogTmV3LgotCShiNF9wYXJzZV9wYXJhbV9kZWNsKTogVXNlIGl0IHRvIGhhdmUgZGlmZmVyZW50IG5hbWVzIGJldHdlZW4gYXR0cmlidXRlCi0JYW5kIGFyZ3VtZW50IG5hbWVzLgotCShiNF9jY19jb25zdHJ1Y3Rvcl9jYWxsKTogTGlrZXdpc2UuCi0KLTIwMDQtMDktMjQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvcGFyc2UtZ3JhbS55IChhZGRfcGFyYW0pOiBTdHJpcCB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmcKLQlibGFua3MgZnJvbSBhIGZvcm1hbCBhcmd1bWVudCBkZWNsYXJhdGlvbi4KLQkoWVlfTE9DQVRJT05fUFJJTlQpOiBOZXcuCi0KLTIwMDQtMDktMjQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2MubTQgKGI0X3l5c3ltcHJpbnRfZ2VuZXJhdGUpOiBNb3ZlIHRoZSBZWUlOUFVUIGludm9jYXRpb24KLQlhZnRlciB0aGUgbG9jYXRpb24uCi0KLTIwMDQtMDktMjQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoVGFibGUgb2YgU3ltYm9scyk6IFNvcnQuCi0KLTIwMDQtMDktMjEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL3lhY2MuYywgZGF0YS9nbHIuYyAoYjRfYXRfZG9sbGFyLCBiNF9kb2xsYXJfZG9sbGFyKTogUmVtb3ZlCi0JdGhlIHVzZWxlc3MgcGFyZW50aGVzZXMuCi0JU3VnZ2VzdGVkIGJ5IFBhdWwgRWdnZXJ0LgotCi0yMDA0LTA5LTIwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCUxldCB0aGUgaW5pdGlhbC1hY3Rpb24gYWN0IG9uIHRoZSBsb29rLWFoZWFkLCBhbmQgdXNlIGl0IGZvciB0aGUKLQkiaW5pdGlhbCBwdXNoIiAoY29ycmVzcG9uZGluZyB0byBhbiBoeXBvdGhldGljYWwgYmVnaW5uaW5nLW9mLWZpbGUpLgotCUFuZCBsZXQgbGFscjEuY2MgaG9ub3IgJWluaXRpYWwtYWN0aW9uLgotCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoSW5pdGlhbCBBY3Rpb24gRGVjbCk6IENsYXJpZnksIGFuZCBhZGQgYW4KLQlleGFtcGxlLgotCSogZGF0YS9sYWxyMS5jYyAoUGFyc2VyOjppbml0bG9jYXRpb25fKTogUmVtb3ZlLCBiYWQgZXhwZXJpbWVudC4KLQkoUGFyc2VyOjpQYXJzZXIpOiBSZW1vdmUgdGhlIGN0b3IgdGhhdCB1c2VkIHRvIGluaXRpYWxpemUgaXQuCi0JKFBhcnNlcjo6cGFyc2UpOiBMaWtlIGluIHRoZSBvdGhlciBza2VsZXRvbnMsIGlzc3VlIHRoZSAic3RhcnRpbmcKLQlwYXJzZSIgbWVzc2FnZSBiZWZvcmUgYW55IGFjdGlvbi4KLQlIb25vciAlaW5pdGlhbC1hY3Rpb24uCi0JSW5pdGlhbGl6ZSB0aGUgc3RhY2tzIHdpdGggdGhlIGxvb2thaGVhZC4KLQkqIGRhdGEveWFjYy5jOiBMZXQgJCQgYW5kIEAkIGluICVpbml0aWFsLWFjdGlvbiBkZXNpZ25hdGUgdGhlCi0JbG9vay1haGVhZC4KLQlQdXNoIHRoZW0gaW4gdGhlIHN0YWNrcy4KLQkqIHRlc3RzL2FjdGlvbnMuYXQsIHRlc3RzL2NhbGMuYXQ6IEFkanVzdCB0aGUgQysrIGN0b3IgaW52b2NhdGlvbnMuCi0KLTIwMDQtMDktMjAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoSW5pdGlhbCBBY3Rpb24gRGVjbCk6IE5ldy4KLQotMjAwNC0wOS0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEveWFjYy5jIChZWV9MT0NBVElPTl9QUklOVCk6IFVzZSBZWUxUWVBFX0lTX1RSSVZJQUwgYXMgYQotCWNsZWFyZXIgY3JpdGVyaW9uIHRvIGRlZmluZSBpdC4KLQkocGFyc2UpOiBJbml0aWFsaXplIHRoZSBpbml0aWFsIGxvY2F0aW9uIHdoZW4gWVlMVFlQRV9JU19UUklWSUFMLgotCVdoZW4gcmVkdWNpbmcgb24gYW4gZW1wdHkgUkhTLCB1c2UgdGhlIGxhdGVzdCBzdGFja2VkIGxvY2F0aW9uIGFzCi0JbG9jYXRpb24uCi0JeXlsbG9jIGlzIG5vdCBhbHdheXMgYXZhaWxhYmxlLgotCSogZGF0YS9nbHIuYzogTGlrZXdpc2UuCi0JQWxzbywgaG9ub3IgaW5pdGlhbC1hY3Rpb25zLgotCi0yMDA0LTA5LTIwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS95YWNjLmMgKFlZX0xPQ0FUSU9OX1BSSU5UKTogTmV3LgotCURlZmluZSB3aGVuIHdlIGtub3cgWVlMVFlQRSdzIHN0cnVjdHVyZSwgaS5lLiwgd2hlbiB0aGUgZGVmYXVsdAotCVlZTExPQ19ERUZBVUxUIGlzIHVzZWQuCi0JKiBkYXRhL2MubTQgKGI0X3l5c3ltcHJpbnRfZ2VuZXJhdGUpOiBVc2UgaXQuCi0JKiBkYXRhL2xhbHIxLmNjIChZWUxMT0NfREVGQVVMVCk6IFN0b3AgcmVseWluZyBvbiB0aGUgaW5pdGlhbAotCXZhbHVlIG9mIHRoZSByZXN1bHQuCi0JKGVycm9yX3N0YXJ0Xyk6IFJlcGxhY2Ugd2l0aC4uLgotCShlcnJvcl9yYW5nZV8pOiB0aGlzIGxvY2F0aW9uIGFycmF5LgotCVRoaXMgYWxsb3dzIHRvIHJlcGxhY2UgY29kZSByZWx5aW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBvZgotCWxvY2F0aW9ucyBieSBwb3J0YWJsZSBjb2RlLgotCSogZGF0YS95YWNjLmMgKHl5bGVycnNwKTogUmVwbGFjZSB3aXRoLi4uCi0JKHl5ZXJyb3JfcmFuZ2UpOiB0aGlzLgotCUV2ZXJ5IHRpbWUgYSB0b2tlbiBpcyBwb3BwZWQsIHVwZGF0ZSB5eWVycm9yX3JhbmdlWzBdLCB0byBoYXZlIGFuCi0JYWNjdXJhdGUgbG9jYXRpb24gZm9yIHRoZSBlcnJvciB0b2tlbi4KLQkqIGRhdGEvZ2xyLmMgKFlZX0xPQ0FUSU9OX1BSSU5UKTogTmV3LgotCSh5eXByb2Nlc3NPbmVTdGFjayk6IEZpeCBhbiBpbnZvY2F0aW9uIG9mIFlZX1NZTUJPTF9QUklOVDoKLQlkZWZlcmVuY2UgYSBwb2ludGVyLgotCSogdGVzdHMvYWN0aW9ucy5hdCAoX0FUX0NIRUNLX1BSSU5URVJfQU5EX0RFU1RSVUNUT1IpOiBObyBsb25nZXIKLQlyZXBvcnQgdGhlIGxvY2F0aW9uIGluICVwcmludGVycy4KLQotCSogc3JjL3NjYW4tc2tlbC5sOiBJbnN0ZWFkIG9mIGFib3J0LCByZXBvcnQgZXJyb3IgbWVzc2FnZXMgdG8gZWFzZQotCXVuZGVyc3RhbmRpbmcgc2tlbGV0b24gc2Nhbm5pbmcgZmFpbHVyZXMuCi0KLTIwMDQtMDktMTYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2xhbHIxLmNjIChTdGFjazo6SXRlcmF0b3IsIFN0YWNrOjpDb25zdEl0ZXJhdG9yKTogUmVuYW1lIGFzLi4uCi0JKGl0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcik6IHRoZXNlLCB0byBiZSBtb3JlIGluIHRoZSBDKysgc3Bpcml0LgotCUFsc28sIHJldHVybiByZXZlcnNlIGl0ZXJhdG9ycyBzbyB0aGF0IHdoZW4gZGlzcGxheWluZyB0aGUgc3RhY2sKLQl3ZSBkaXNwbGF5IGl0cyBib3R0b20gZmlyc3QuCi0JKFBhcnNlcjo6c3RhY2tfcHJpbnRfLCBQYXJzZXI6OnJlZHVjZV9wcmludF8pOiBNYXRjaCB0aGUgbWVzc2FnZXMKLQlmcm9tIHlhY2MuYy4KLQlXZSBzaG91bGQgcHJvYmFibHkgdXNlIHZlY3RvciBoZXJlIHRob3VnaC4KLQotMjAwNC0wOS0xNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlIYXZlIG1vcmUgY29tcGxldGUgc2hpZnQgdHJhY2VzLgotCi0JKiBkYXRhL3lhY2MuYywgZGF0YS9sYWxyMS5jLCBkYXRhL2dsci5jOiBVc2UgWVlfU1lNQk9MX1BSSU5UCi0JdG8gcmVwb3J0IFNoaWZ0cyBpbnN0ZWFkIG9mIGFkIGhvYyBZWURQUklOVEYgaW52b2NhdGlvbnMsCi0JaW5jbHVkaW5nIGZvciB0aGUgZXJyb3IgdG9rZW4uCi0JKiBkYXRhL2xhbHIxLmNjIChzeW1wcmludF8pOiBPdXRwdXQgdGhlIGxvY2F0aW9uLgotCSogdGVzdHMvYWN0aW9ucy5hdCAoX0FUX0NIRUNLX1BSSU5URVJfQU5EX0RFU1RSVUNUT1IpOiBJbiBDKyssIGRvbid0Ci0Jb3V0cHV0IHRoZSBsb2NhdGlvbiB3aXRoaW4gdGhlICVwcmludGVyLgotCUFjdGl2YXRlIEdMUiB0ZXN0cywgYXQgbGVhc3QgdG8gbWFrZSBzdXJlIHRoZXkgY29tcGlsZSBwcm9wZXJseS4KLQlUaGV5IHN0aWxsIGRvbid0IHBhc3MgdGhvdWdoLgotCSogdGVzdHMvY2FsYy5hdDogQWRqdXN0IGV4cGVjdCB2ZXJib3NlIG91dHB1dCwgc2luY2Ugbm93ICJFbnRlcmluZwotCXN0YXRlLi4uIiBpcyBvbiBhIGRpZmZlcmVudCBsaW5lIHRoYW4gdGhlICJTaGlmdGluZyIgbWVzc2FnZS4KLQotMjAwNC0wOS0wOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHRlc3RzL2FjdGlvbnMuYXQgKF9BVF9DSEVDS19QUklOVEVSX0FORF9ERVNUUlVDVE9SKTogTW92ZSB0aGUKLQlCaXNvbiBkaXJlY3RpdmUgZnJvbSB0aGUgQmlzb24gZmlsZSB0byB0aGUgaW52b2NhdGlvbiBvZiB0aGlzCi0JbWFjcm8sIHNvIHRoYXQgdGhlc2UgZGlyZWN0aXZlcyBhcmUgcGFzc2VkIHRvCi0JQVRfQklTT05fT1BUSU9OX1BVU0hERUZTIHRvIGdldCBjb3JyZWN0IGhlbHAgbWFjcm9zLgotCVVzZSB0aGVzZSBoZWxwaW5nIG1hY3JvcyAoZS5nLiwgQVRfTE9DLCBBVF9WQUwgYW5kIHNvIGZvcnRoKS4KLQlNb3ZlIHRoZSBBVF9TRVRVUC9BVF9DTEVBTlVQIG91dHNpZGUsIHRvIHJlcG9ydCBhcyB0ZXN0IHRpdGxlCi0JdGhlIGV4dHJhIEJpc29uIGRpcmVjdGl2ZXMgaW5zdGVhZCBvZiB0aGUgd2hvbGUgc2VyaWVzLgotCUNoYW5nZSB0aGUgZ3JhbW1hciBzbyB0aGF0IHRoZXJlIGFyZSByZWNvdmVyYWJsZSBlcnJvcnMsIGFuZAotCXVucmVjb3ZlcmFibGUgZXJyb3JzLiAgTm93IHdlIGNhbiBoYXZlIHRoZSBwYXJzZXIgZ2l2ZSB1cCBiZWZvcmUKLQljb25zdW1pbmcgdGhlIHdob2xlIGlucHV0LiAgQXMgYSByZXN1bHQgd2Ugbm93IGNhbiBvYnNlcnZlIHRoYXQKLQl0aGUgbG9va2FoZWFkIGlzIGZyZWVkIHdoZW4gbmVlZGVkLgotCUNoYW5nZSB0aGUgcGFyc2VyIHNvdXJjZSB0byBwYXJzZSBhcmd2WzFdIGluc3RlYWQgb2YgYSBoYXJkIGNvZGVkCi0Jc3RyaW5nLgotCVNpbXBsaWZ5IHl5bGV4LCBhbmQgZ2l2ZSBhIHZhbHVlIGFuZCBsb2NhdGlvbiB0byBFT0YuCi0JU2ltcGxpZnkgc29tZSBpbnZvY2F0aW9ucyBvZiBBVF9DSEVDS19QUklOVEVSX0FORF9ERVNUUlVDVE9SIHRoYXQKLQlwYXNzZWQgZGlyZWN0aXZlcyBhbHJlYWR5IGNvZGVkIGluIHRoZSBmaWxlLgotCUFkZCBzb21lIHRlc3RzIHRvIGNoZWNrIHRoZSBsb2NhdGlvbiBvZiAiZXJyb3IiLgotCUZvciBzb21lIHRlc3RzLCB0aGUgQysrIHBhcnNlciBpcyBjb3JyZWN0LCBhbmQgbm90IHlhY2MuYy4KLQlGb3Igb3RoZXIgdGVzdHMsIHRoZXkgcHJvdmlkZSBkaWZmZXJlbnQsIGJ1dCB1bnNhdGlzZnlpbmcsIHZhbHVlcywKLQlzbyBrZWVwIHRoZSBDKysgdmFsdWUgc28gdGhhdCBhdCBsZWFzdCBvbmUgcGFyc2VyIGlzICJjb3JyZWN0IgotCWFjY29yZGluZyB0byB0aGUgdGVzdCBzdWl0ZS4KLQkoQWN0aW9ucyBhZnRlciBlcnJvcnMpOiBSZW1vdmUsIHRoaXMgaXMgc3Vic3VtZWQgYnkgdGhlCi0JQVRfQ0hFQ0tfUFJJTlRFUl9BTkRfREVTVFJVQ1RPUiBzZXJpZXMuCi0KLTIwMDQtMDktMDYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2xhbHIxLmNjOiBBZGp1c3QgdGhlIGluZGVudGF0aW9uIG9mIHRoZSBsYWJlbHMuCi0JKFBhcnNlcjo6cG9wKTogTmV3LgotCVVzZSBpdC4KLQotMjAwNC0wOS0wNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEveWFjYy5jYywgZGF0YS9nbHIuY2MgKHl5ZGVzdHJ1Y3QpOiBBY2NlcHQgYW4gYWRkaXRpb25hbAotCWFyZ3VtZW50LCBhbiBpbmZvcm1hdGl2ZSBtZXNzYWdlLgotCUNhbGwgWVlfU1lNQk9MX1BSSU5ULgotCUFkanVzdCBhbGwgY2FsbGVyczogaW50ZWdyYXRlIHRoZSBhc3NvY2lhdGVkIFlZX1NZTUJPTF9QUklOVC4KLQkqIGRhdGEvbGFscjEuY2MgKGRlc3RydWN0Xyk6IExpa2V3aXNlLgotCUluIGFkZGl0aW9uLCBubyBsb25nZXIgZGVwZW5kIG9uIGI0X3l5c3ltcHJpbnRfZ2VuZXJhdGUgYW5kCi0JYjRfeXlkZXN0cnVjdF9nZW5lcmF0ZSB0byBnZW5lcmF0ZSB0aGVzZSBmdW5jdGlvbnMsIGRvIGl0ICJieQotCWhhbmQiLgotCi0yMDA0LTA5LTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS9nbHIuYywgZGF0YS9sYWxyMS5jYywgZGF0YS95YWNjLmM6IFdoZW4gWVlBQk9SVCB3YXMKLQlpbnZva2VkLCB5eWRlc3RydWN0IHRoZSBsb29rYWhlYWQuCi0JKiB0ZXN0cy9jYWxjLmF0IChDYWxjdWxhdG9yICQxKTogVXBkYXRlIHRoZSBleHBlY3RlZCBsZW5ndGhzIG9mCi0JdHJhY2VzOiB0aGVyZSBpcyBhbiBhZGRlZCBsaW5lIGZvciB0aGUgZGlzY2FyZGVkIGxvb2thaGVhZC4KLQkqIGRvYy9iaXNvbi50ZXhpbmZvIChEZXN0cnVjdG9yIERlY2wpOiBTb21lIHJld29yZGluZy4KLQlEZWZpbmUgImRpc2NhcmRlZCIgc3ltYm9scy4KLQotMjAwNC0wOS0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvbGFscjEuY2MgKHRyYW5zbGF0ZV8sIGRlc3RydWN0Xyk6IE5vIHJlYXNvbiB0byBiZSBzdGF0aWMuCi0KLTIwMDQtMDktMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2dsci5jLCB5YWNjLmMgKFlZRFNZTVBSSU5UKTogUmVtb3ZlLCBub3QgdXNlZC4KLQkoWVlEU1lNUFJJTlRGKTogUmVuYW1lIGFzLi4uCi0JKFlZX1NZTUJPTF9QUklOVCk6IHRoaXMuCi0JKiBkYXRhL2xhbHIxLmNjIChZWV9TWU1CT0xfUFJJTlQpOiBOZXcsIG1vZGVsZWQgYWZ0ZXIgdGhlIHByZXZpb3VzCi0JdHdvLgotCVVzZSBpdCBpbnN0ZWFkIG9mIGRpcmVjdCBzeW1wcmludF8gY2FsbHMuCi0JKHl5YmFja3VwKTogVHdlYWsgdGhlICJOb3cgYXQgZW5kIG9mIGlucHV0IiBjYXNlIHRvIG1hdGNoIHlhY2MuYydzCi0Jb25lLgotCi0yMDA0LTA5LTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS9sYWxyMS5jYyAoYjRfeXlzeW1wcmludF9nZW5lcmF0ZSk6IE5ldy4KLQkoc3ltcHJpbnRfKTogTmV3IG1lbWJlciBmdW5jdGlvbiwgZGVmaW5lZCB3aGVuIFlZREVCVUcuCi0JVXNlIGl0IGNvbnNpc3RlbnRseSBpbnN0ZWFkIG9mIHRva2VuL250ZXJtIGRlYnVnZ2luZyBvdXRwdXQgYnkKLQloYW5kLgotCSogdGVzdHMvYWN0aW9ucy5hdCAoX0FUX0NIRUNLX1BSSU5URVJfQU5EX0RFU1RSVUNUT1IpOiBBZGp1c3QKLQklcHJpbnRlciBjYWxscyB0byB1c2UgY2RlYnVnXyB3aGVuIHVzaW5nIGxhbHIxLmNjLgotCi0yMDA0LTA4LTMwICBGbG9yaWFuIEtyb2htICA8ZmxvcmlhbkBlZGFtYWlsLmZpc2hraWxsLmlibS5jb20+Ci0KLQkqIGRhdGEvZ2xyLmM6IEd1YXJkIHRoZSBkZWNsYXJhdGlvbnMgb2YgeXlwc3RhY2sgYW5kIHl5cGR1bXBzdGFjawotCXdpdGggI2lmZGVmIFlZREVCVUcuCi0KLTIwMDQtMDgtMjYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoSW1wbGVtZW50aW5nIExvb3BzKTogUmVuYW1lIGFzLi4uCi0JKEltcGxlbWVudGluZyBHb3Rvcy9Mb29wcyk6IHRoaXMuCi0KLTIwMDQtMDgtMTMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JQWRqdXN0IHRvIGxhdGVzdCBnbnVsaWIuCi0JKiBib290c3RyYXAgKGdudWxpYl9tb2R1bGVzKTogQWRkIHhhbGxvYy1kaWUuCi0JU2V0IExDX0FMTD1DIHNvIHRoYXQgZmlsZSBuYW1lcyBzb3J0IGNvbnNpc3RlbnRseS4KLQlQcmVmZXIgdGhlIGdudWxpYiBjb3BpZXMgb2YgZ2V0dGV4dC5tNCwgZ2xpYmMyMS5tNCwKLQlpbnR0eXBlc19oLm00LCBsaWItbGQubTQsIGxpYi1wcmVmaXgubTQsIHBvLm00LCBzdGRpbnRfaC5tNCwKLQl1aW50bWF4X3QubTQsIHVsb25nbG9uZy5tNC4KLQkoaW50bF9maWxlc190b19yZW1vdmUpOiBBZGQgZ2V0dGV4dC5tNCwgbGliLWxkLm00LCBsaWItcHJlZml4Lm00LAotCXBvLm00IHNpbmNlIHdlIGFyZSBub3cgdXNpbmcgX2dsLm00IGluc3RlYWQuCi0KLTIwMDQtMDgtMTAgIEZsb3JpYW4gS3JvaG0gIDxmbG9yaWFuQGVkYW1haWwuZmlzaGtpbGwuaWJtLmNvbT4KLQotCSogc3JjL3NjYW4tYWN0aW9uLmw6IFJlbW92ZS4gU2Nhbm5pbmcgb2Ygc2VtYW50aWMgYWN0aW9ucyBpcwotCWhhbmRsZWQgaW4gc2Nhbi1ncmFtLmwuCi0KLTIwMDQtMDgtMDcgIEZsb3JpYW4gS3JvaG0gIDxmbG9yaWFuQGVkYW1haWwuZmlzaGtpbGwuaWJtLmNvbT4KLQotCSogc3JjL3NjYW4tZ3JhbS5sIChoYW5kbGVfc3luY2xpbmUpOiBVc2UgdW5pcXN0cl9uZXcgbm90IHhzdHJkdXAuCi0KLQkqIHNyYy9sb2NhdGlvbi5oIChzdHJ1Y3QpOiBUaGUgZmlsZSBtZW1iZXIgaXMgYSB1bmlxc3RyLgotCShlcXVhbF9ib3VuZGFyaWVzKTogVXNlIFVOSVFTVFJfRVEgZm9yIGNvbXBhcmlzb24uCi0KLTIwMDQtMDctMjIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JRml4IGJ1ZyB3aXRoIG5vbi0ldW5pb24gcGFyc2VycyB0aGF0IGhhdmUgcHJpbnRlcnMgb3IgZGVzdHJ1Y3RvcnMsCi0Jd2hpY2ggbGVkIHRvIGEgQmlzb24gY29yZSBkdW1wLiAgUmVwb3J0ZWQgYnkgUGV0ZXIgRmFsZXMgaW4KLQk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDA0LTA3L21zZzAwMDE0Lmh0bWw+LgotCi0JKiBkYXRhL2MubTQgKGI0X3N5bWJvbF9hY3Rpb25zKTogRG9uJ3QgYXNzdW1lICV1bmlvbiB3YXMgdXNlZC4KLQkqIGRhdGEvbGFscjEuY2MgKHl5c3R5cGUpIFtkZWZpbmVkIFlZU1RZUEVdOiBEZWZpbmUgdG8gWVlTVFlQRSwKLQlub3QgdG8gb3VyIG93biB0eXBlLgotCSogc3JjL291dHB1dC5jIChzeW1ib2xfZGVzdHJ1Y3RvcnNfb3V0cHV0LCBzeW1ib2xfcHJpbnRlcnNfb3V0cHV0KToKLQlEb24ndCBhc3N1bWUgJXVuaW9uLgotCSogdGVzdHMvYWN0aW9ucy5hdCAoX0FUX0NIRUNLX1BSSU5URVJfQU5EX0RFU1RSVUNUT1IsCi0JQVRfQ0hFQ0tfUFJJTlRFUl9BTkRfREVTVFJVQ1RPUik6IE5ldyBhcmd1bWVudAotCVVOSU9OLUZMQUcuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgotCShfQVRfQ0hFQ0tfUFJJTlRFUl9BTkRfREVTVFJVQ1RPUik6IERvbid0IGFzc3VtZSAldW5pb24uCi0JVXNlIHR5cGUgY2hhciwgbm90IHVuc2lnbmVkIGludCwgd2hlbiBkZWNsYXJpbmcgYW4gYXJyYXkgb2YgY2hhcjsKLQl0aGlzIGxldHMgdXMgcmVtb3ZlIGEgY2FzdC4KLQkoUHJpbnRlcnMgYW5kIERlc3RydWN0b3JzKTogQWRkIG5vbi0ldW5pb24gdGVzdCBjYXNlcy4KLQotMjAwNC0wNi0yMSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvOiBNaW5vciBlZGl0b3JpYWwgY2hhbmdlcywgbW9zdGx5IHRvIHRoZSBuZXcKLQlHTFIgd3JpdGV1cHMuICBFLmcuLCBhdm9pZCBmcmVuY2hzcGFjaW5nIGFuZCB0aGUgZnV0dXJlIHRlbnNlLAotCWNoYW5nZSAibG9va2FoZWFkIiB0byAibG9vay1haGVhZCIsIGFuZCBjaGFuZ2UgIndydCIgdG8gIndpdGgKLQlyZXNwZWN0IHRvIi4KLQotMjAwNC0wNi0yMSAgUGF1bCBIaWxmaW5nZXIgIDxoaWxmaW5nckBDUy5CZXJrZWxleS5FRFU+Ci0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvIChNZXJnaW5nIEdMUiBQYXJzZXMsIENvbXBpbGVyIFJlcXVpcmVtZW50cyk6Ci0JTmV3IHNlY3Rpb25zLCBzcGxpdCBvZmYgZnJvbSB0aGUgR0xSIFBhcnNlcnMgc2VjdGlvbi4gIFB1dCB0aGUgbmV3Ci0JU2ltcGxlIEdMUiBQYXJzZXIgbmVhciB0aGUgc3RhcnQgb2YgdGhlIEdMUiBzZWN0aW9uLCBmb3IgY2xhcml0eS4KLQlSZXdyaXRlIGNvbm5lY3RpdmUgdGV4dC4KLQotMjAwNC0wNi0yMSAgRnJhbmsgSGVja2VuYmFjaCAgPGZyYW5rQGctbi11LmRlPgotCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoU2ltcGxlIEdMUiBQYXJzZXJzKTogTmV3IHNlY3Rpb24uCi0KLTIwMDQtMDYtMjEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBORVdTLCBUT0RPLCBkb2MvYmlzb24udGV4aW5mbzoKLQlVc2UgImxvb2stYWhlYWQiIGluc3RlYWQgb2YgImxvb2thaGVhZCIsIHRvIGJlIGNvbnNpc3RlbnQuCi0JKiBSRUZFUkVOQ0VTOiBGaXggaW5jb3JyZWN0IHJlZmVyZW5jZSB0byBEZVJlbWVyIGFuZCBQZW5uZWxsbywKLQl3aGlsZSB3ZSdyZSBmaXhpbmcgImxvb2stYWhlYWQiLgotCSogc3JjL2NvbmZsaWN0cy5jIChzaGlmdF9zZXQpOiBSZW5hbWVkIGZyb20gc2hpZnRzZXQuCi0JKGxvb2tfYWhlYWRfc2V0KTogUmVuYW1lZCBmcm9tIGxvb2thaGVhZHNldC4KLQkqIHNyYy9wcmludC5jOiBMaWtld2lzZS4KLQkqIHNyYy9nZXRhcmdzLmMgKHJlcG9ydF9hcmdzKTogQWRkICJsb29rLWFoZWFkIiBhcyB0aGUgbmV3IGNhbm9uaWNhbAotCW5hbWUgZm9yICJsb29rYWhlYWQiLgotCShyZXBvcnRfdHlwZXMsIHVzYWdlKTogTGlrZXdpc2UuCi0JKiBzcmMvZ2V0YXJncy5oIChyZXBvcnRfbG9va19haGVhZF90b2tlbnMpOiBSZW5hbWVkIGZyb20KLQlyZXBvcnRfbG9va2FoZWFkcy4KLQkqIHNyYy9sYWxyLmMgKGNvbXB1dGVfbG9va19haGVhZF90b2tlbnMpOiBSZW5hbWVkIGZyb20KLQljb21wdXRlX2xvb2thaGVhZHMuCi0JKHN0YXRlX2xvb2tfYWhlYWRfdG9rZW5zX2NvdW50KTogUmVuYW1lZCBmcm9tIHN0YXRlX2xvb2thaGVhZHNfY291bnQuCi0JKGxvb2tfYWhlYWRfdG9rZW5zX3ByaW50KTogUmVuYW1lZCBmcm9tIGxvb2thaGVhZHNfcHJpbnQuCi0JKiBzcmMvc3RhdGUuYyAoc3RhdGVfcnVsZV9sb29rX2FoZWFkX3Rva2Vuc19wcmludCk6IFJlbmFtZWQgZnJvbQotCXN0YXRlX3J1bGVfbG9va2FoZWFkc19wcmludC4KLQkqIHNyYy9zdGF0ZS5oOiBMaWtld2lzZS4KLQkocmVkdWN0aW9ucy5sb29rX2FoZWFkX3Rva2Vucyk6IFJlbmFtZWQgZnJvbSBsb29rYWhlYWRzLgotCSogdGVzdHMvdG9ydHVyZS5hdCAoQVRfREFUQV9MT09LX0FIRUFEX1RPS0VOU19HUkFNTUFSKTogUmVuYW1lZCBmcm9tCi0JQVRfREFUQV9MT09LQUhFQURTX0dSQU1NQVIuCi0KLTIwMDQtMDYtMDMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBSRUFETUU6IFVwZGF0ZSBsb2NhdGlvbiBvZiBwYXRjaGVkIE00IGRpc3RyaWJ1dGlvbi4KLQotMjAwNC0wNS0zMCAgQWxiZXJ0IENoaW4tQS1Zb3VuZyAgPGNoaW5hQHRoZXdyaXR0ZW53b3JkLmNvbT4KLQotCURvbid0IGFzc3VtZSB0aGUgQysrIGNvbXBpbGVyIHRha2VzIHRoZSBzYW1lIGFyZ3VtZW50cyBhcyB0aGUgQyBjb21waWxlcgotCSh0cml2aWFsIGNoYW5nZSkuCi0JKiBjb25maWd1cmUuYWMgKE8wQ1hYRkxBR1MpOiBOZXcgdmFyLgotCSogdGVzdHMvYXRsb2NhbC5pbiAoQ1hYRkxBR1MpOiBVc2UgaXQuCi0KLTIwMDQtMDUtMjkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JRml4IHNvbWUgIm1ha2UgY2hlY2siIHByb2JsZW1zIHdpdGggQysrIHJlcG9ydGVkIGJ5Ci0JQWxiZXJ0IENoaW4tQS1Zb3VuZyBmb3IgVHJ1NjQgQysrIGluIHRoaXMgdGhyZWFkOgotCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwNC0wNS9tc2cwMDA0OS5odG1sCi0KLQkqIG00L2N4eC5tNCAoQklTT05fVEVTVF9GT1JfV09SS0lOR19DWFhfQ09NUElMRVIpOiBDaGVjayBmb3Igc3RkOjpjZXJyLgotCSogdGVzdHMvYWN0aW9ucy5hdCAoX0FUX0NIRUNLX1BSSU5URVJfQU5EX0RFU1RSVUNUT1IpOgotCU91dHB1dCB0byBhIC5jYyBmaWxlIGZvciBDKyssIG5vdCB0byBhIC5jIGZpbGUuCi0JKiB0ZXN0cy9jYWxjLmF0IChBVF9DSEVDS19DQUxDKTogTGlrZXdpc2UuCi0JKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChBVF9DSEVDS19EQU5DRVIpOiBMaWtld2lzZS4KLQkqIHRlc3RzL2xvY2FsLmF0IChBVF9DT01QSUxFX0NYWCk6IERlZmF1bHQgdG8gT1VUUFVULmNjLCBub3QgT1VUUFVULmMuCi0KLTIwMDQtMDUtMjggIEFsYmVydCBDaGluLUEtWW91bmcgIDxjaGluYUB0aGV3cml0dGVud29yZC5jb20+Ci0KLQkqIHRlc3RzL2NhbGMuYXQsIHRlc3RzL2FjdGlvbnMuYXQ6IFdvcmthcm91bmQgZm9yIFNHSQotCUMrKyBjb21waWxlci4gICh0cml2aWFsIGNoYW5nZSkKLQotMjAwNC0wNS0yNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQlTcGVudCBhIGZldyBob3VycyBjaGVja2luZyBvdXQgd2hpY2ggcHJlcmVxdWlzaXRlIHZlcnNpb25zIHRoZQotCWN1cnJlbnQgc291cmNlcyBhY3R1YWxseSByZXF1aXJlLiAgSSB3ZW50IGFsbCB0aGUgd2F5IGJhY2sgdG8KLQlHZXR0ZXh0IDAuMTAuNDAsIEF1dG9tYWtlIDEuNCwgYW5kIEF1dG9jb25mIDIuNTcgYW5kIGludmVzdGlnYXRlZAotCWEgc2VlbWluZ2x5IGVuZGxlc3Mgc2V0IG9mIGNvbWJpbmF0aW9ucyBvZiB2ZXJzaW9ucyBtb3JlIHJlY2VudAotCXRoYW4gdGhhdC4gIFRoZSBib3R0b20gbGluZSBpcyB0aGF0IHRoZSBjdXJyZW50IHNvdXJjZXMgcmVxdWlyZQotCWZhaXJseSByZWNlbnQgdmVyc2lvbnMgb2YgdGhlIGJ1aWxkIHRvb2xzLCBhbmQgaXQnbGwgYmUgc29tZSB3b3JrCi0JdG8gY2hhbmdlIHRoaXMuCi0JKiBjb25maWd1cmUuYWMgKEFDX1BSRVJFUSk6IEluY3JlYXNlIGZyb20gMi41OCB0byAyLjU5LgotCShBTV9JTklUX0FVVE9NQUtFKTogSW5jcmVhc2UgZnJvbSAxLjcgdG8gMS44LgotCShBTV9HTlVfR0VUVEVYVF9WRVJTSU9OKTogSW5jcmVhc2UgZnJvbSAwLjExLjUgdG8gMC4xMi4KLQlBZGQgY29tbWVudHMgZXhwbGFpbmluZyB3aHkgdGhvc2UgcGFydGljdWxhciB2ZXJzaW9ucyBhcmUKLQljdXJyZW50bHkgbmVlZGVkLgotCi0JKiBzcmMvcGFyc2UtZ3JhbS55IChsbG9jX2RlZmF1bHQpOiBSZXdyaXRlIHRvIGF2b2lkIGNvbXBpbGVyIGJ1ZwotCWluIFNHSSBNSVBTcHJvIDcuNC4xbS4gIFByb2JsZW0gcmVwb3J0ZWQgYnkgQWxiZXJ0IENoaW4tQS1Zb3VuZyBpbgotCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDQtMDUvbXNnMDAwMzcuaHRtbD4uCi0KLQkqIGNvbmZpZ3VyZS5hYyAoQUNfUFJFUkVRKTogQnVtcCB0byAyLjU4LCBzaW5jZSAyLjU3IGRvZXNuJ3Qgd29yawotCShpdCBmYWlscyB3aXRoIGEgQXV0b2NvbmYtd2l0aG91dC1hY2xvY2FsLW00IGRpYWdub3N0aWMpLgotCi0yMDA0LTA1LTI2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCSogY29uZmlndXJlLmFjIChBTV9HTlVfR0VUVEVYVF9WRVJTSU9OKTogTG93ZXIgaXQgZnJvbSAwLjE0LjEgdG8KLQkwLjExLjUuICBTdWdnZXN0ZWQgYnkgQnJ1bm8gSGFpYmxlLgotCSogYm9vdHN0cmFwOiBSZW1vdmUgZ2V0dGV4dCB2ZXJzaW9uIGNoZWNraW5nLgotCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoRGVjbCBTdW1tYXJ5KTogQWxzbyBtZW50aW9uIHRoYXQgJXVuaW9uCi0JY2FuIGRlcGVuZCBvbiBwcmVyZXF1aXNpdGUgdHlwZXMuICBQcm9ibGVtIHJlcG9ydGVkIGJ5IFRpbQotCVZhbiBIb2xkZXIuCi0KLTIwMDQtMDUtMjUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBSRUFETUU6IE1lbnRpb24gR05VIG00IDEuNCBidWdzIGFuZCBBa2ltJ3MgcGF0Y2hlZCB2ZXJzaW9uLgotCSogUkVBRE1FLWFscGhhOiBEb24ndCB0ZWxsIHBlb3BsZSBub3QgdG8gcGFja2FnZSB0aGlzLgotCi0JKiBib290c3RyYXA6IERvbid0IGFzc3VtZSAkKC4uLikgd29ya3M7IHVzZSBgLi4uYCBpbnN0ZWFkLgotCVByb2JsZW0gcmVwb3J0ZWQgYnkgUGF1bCBIaWxmaW5nZXIuICBBbHNvLCBkaWFnbm9zZSBub24tR05VCi0JZ2V0dGV4dCBiZXR0ZXIuCi0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvIChEZWNsIFN1bW1hcnksIEJpc29uIE9wdGlvbnMpOiBDbGFyaWZ5IHdoYXQncwotCXB1dCBpbnRvIHRoZSAtZCBvdXRwdXQgZmlsZSwgYW5kIG1lbnRpb24gd2hhdCB0byBkbyBpZiBZWVNUWVBFIGlzCi0JZGVmaW5lZCBhcyBhIG1hY3JvLgotCi0yMDA0LTA1LTI0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KLQotCVVuZG8gY2hhbmdlIG1hZGUgZWFybGllciB0b2RheTogaXQgY2F1c2VkIGF1dG9wb2ludCB0byBub3QgYnJpbmcKLQlpbiBBQk9VVC1OTFMuICBPdWNoLiAgSW5zdGVhZCwgc3Vic3RpdHV0ZSBvdXIgb3duIGRpYWdub3N0aWMgZm9yCi0JYXV0b3BvaW50J3MuCi0KLQkqIGJvb3RzdHJhcDogQ2hlY2sgdGhhdCBnZXR0ZXh0IHZlcnNpb24gbWF0Y2hlcyB3aGF0J3MgaW4KLQljb25maWd1cmUuYWMuICBXYXJuIHVzZXJzIHRvIGlnbm9yZSByb2JvdHMudHh0IEVSUk9SIDQwNC4KLQkqIGJvb3RzdHJhcDogVW5kbyB0b2RheSdzIGVhcmxpZXIgY2hhbmdlIChsb2dnZWQgYmVsb3cpLgotCSogY29uZmlndXJlLmFjIChBTV9HTlVfR0VUVEVYVF9WRVJTSU9OKTogTGlrZXdpc2UuCi0KLQlUaGUgZ2V0dGV4dCB2ZXJzaW9uIGNoZWNraW5nIGlzIGNhdXNpbmcgbW9yZSB0cm91YmxlIHRoYW4gaXQncwotCWN1cmluZzsgcmVtb3ZlIGl0LiAgUHJvYmxlbSByZXBvcnRlZCBieSBQYXVsIEhpbGZpbmdlci4KLQotCSogYm9vdHN0cmFwOiBJc3N1ZSBhIHdhcm5pbmcgdGhhdCBvbmUgY2FuIGV4cGVjdCBhIG1lc3NhZ2UKLQknQU1fR05VX0dFVFRFWFQgaXMgdXNlZCwgYnV0IG5vdCBBTV9HTlVfR0VUVEVYVF9WRVJTSU9OJy4KLQkqIGNvbmZpZ3VyZS5hYyAoQU1fR05VX0dFVFRFWFRfVkVSU0lPTik6IFJlbW92ZS4KLQotMjAwNC0wNS0yMyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQlFbnN1cmUgdGhhdCB0aGUgQysrIGNvbXBpbGVyIHVzZWQgZm9yIHRlc3RpbmcgYWN0dWFsbHkgd29ya3Mgb24gYQotCXNpbXBsZSB0ZXN0IHByb2dyYW07IGlmIG5vdCwgc2tpcCB0aGUgQysrLXJlbGF0ZWQgdGVzdHMuICBQcm9ibGVtCi0JcmVwb3J0ZWQgYnkgVmluIFNoZWx0b24gaW46Ci0JaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDA0LTA1L21zZzAwMDI2Lmh0bWwKLQotCSogbTQvY3h4Lm00OiBOZXcgZmlsZS4KLQkqIGNvbmZpZ3VyZS5hYyAoQklTT05fVEVTVF9GT1JfV09SS0lOR19DWFhfQ09NUElMRVIpOiBBZGQuCi0JKiB0ZXN0cy9hdGxvY2FsLmluIChCSVNPTl9DWFhfV09SS1MpOiBBZGQuCi0JKiB0ZXN0cy9sb2NhbC5hdCAoQVRfQ09NUElMRV9DWFgpOiBVc2UgaXQuCi0KLTIwMDQtMDUtMjEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBkYXRhL2dsci5jICh5eWxsb2MpOiBPdXRwdXQgdGhpcyBtYWNybyBldmVuIGlmIGxvY2F0aW9ucyBhcmUgbm90Ci0JYmVpbmcgZ2VuZXJhdGVkLCBhcyB0aGUgR0xSIHBhcnNlciBuZWVkcyBpdCBldmVuIGluIHRoYXQgY2FzZS4KLQlQcm9ibGVtIHJlcG9ydGVkIGJ5IFRyb3kgQS4gSm9obnNvbgotCTxodHRwOi8vYnVncy5kZWJpYW4ub3JnL2NnaS1iaW4vYnVncmVwb3J0LmNnaT9idWc9MTk1OTQ2Pi4KLQotCSogY29uZmlndXJlLmFjIChBQ19JTklUKTogVXBkYXRlIHRvIDEuODc1ZS4KLQotMjAwNC0wNS0yMSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIE5FV1M6IFZlcnNpb24gMS44NzVkLgotCSogY29uZmlndXJlLmFjIChBQ19JTklUKTogTGlrZXdpc2UuCi0JKiBzcmMvcGFyc2UtZ3JhbS5jLCBzcmMvcGFyc2UtZ3JhbS5oOiBSZWdlbmVyYXRlIHdpdGggMS44NzVkLgotCi0JKiBjb25maWd1cmUuYWMgKC0tZW5hYmxlLWdjYy13YXJuaW5ncyk6IERvIG5vdCBlbmFibGUgLVdzaGFkb3csCi0JLVdtaXNzaW5nLXByb3RvdHlwZXMsIG9yIC1Xc3RyaWN0LXByb3RvdHlwZXMgZm9yIEMrKy4gIFRoZSBjdXJyZW50Ci0JbGFscjEuY2MgcnVucyBhZm91bCBvZiB0aGUgZmlyc3QsIGFuZCB0aGUgbGFzdCB0d28gYXJlIG5vIGxvbmdlcgotCXN1cHBvcnRlZCBieSBHQ0MgMy40LjAuCi0JKiBSRUFETUU6IE1lbnRpb24gR05VIG00IDEuNCBvciBsYXRlcjsgbWVudGlvbiBtNCBwYXRjaGVzLgotCSogSEFDS0lORzogVXNlIC4vYm9vdHN0cmFwLCBub3QgIm1ha2UgdXBkYXRlIiB0byBpbXBvcnQgZm9yZWlnbiBmaWxlcy4KLQotMjAwNC0wNS0wNiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci0KLQkqIHNyYy9tdXNjbGVfdGFiLmMgKGhhc2hfbXVzY2xlKTogQWNjZXB0IGFuZCByZXR1cm4gc2l6ZV90LCBub3QKLQl1bnNpZ25lZCBpbnQsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbGF0ZXN0IGdudWxpYiBoYXNoIG1vZHVsZS4KLQkqIHNyYy9zdGF0ZS5jIChzdGF0ZV9oYXNoLCBzdGF0ZV9oYXNoZXIpOiBMaWtld2lzZS4KLQkqIHNyYy9zeW10YWIuYyAoaGFzaF9zeW1ib2wsIGhhc2hfc3ltYm9sX2hhc2hlcik6IExpa2V3aXNlLgotCSogc3JjL3VuaXFzdHIuYyAoaGFzaF91bmlxc3RyKTogTGlrZXdpc2UuCi0KLTIwMDQtMDUtMDMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgotCi0JKiBORVdTOiBVbmVzY2FwZWQgbmV3bGluZXMgYXJlIG5vIGxvbmdlciBhbGxvd2VkIGluIGNoYXIgJiBzdHJpbmdzLgotCi0JKiBzcmMvc2Nhbi1ncmFtLmwgKDxTQ19FU0NBUEVEX1NUUklORyxTQ19FU0NBUEVEX0NIQVJBQ1RFUiwKLQlTQ19DSEFSQUNURVIsU0NfU1RSSU5HPik6IFJlamVjdCB1bmVzY2FwZWQgbmV3bGluZXMgaW4KLQljaGFyYWN0ZXIgYW5kIHN0cmluZyBsaXRlcmFscy4KLQkodW5leHBlY3RlZF9lbmQpOiBOZXcgZnVuY3Rpb24uCi0JKHVuZXhwZWN0ZWRfZW9mKTogVXNlIGl0LgotCSh1bmV4cGVjdGVkX25ld2xpbmUpOiBOZXcgZnVuY3Rpb24uCi0JKDxJTklUSUFMLFNDX0FGVEVSX0lERU5USUZJRVIsU0NfUFJFX0NPREU+KTogQ29hbGVzY2UgZHVwbGljYXRlCi0JYWN0aW9ucy4KLQotCSogTkVXUzogRG9jdW1lbnQgJWV4cGVjdC1yci4KLQotCSogYm9vdHN0cmFwICgtLWdudWxpYi1zcmNkaXI9KiwgLS1jdnMtdXNlcj0qKToKLQlGaXggdHlwbyBieSByZXBsYWNpbmcgJDEgd2l0aCAkb3B0aW9uLgotCVJlbW92ZSBtb3JlICdpbnRsJy1yZWxhdGVkIGZpbGVzLgotCURvbid0IERFRlVOIEFNX0lOVExfU1VCRElSIHR3aWNlLgotCi0JKiBsaWIvLmN2c2lnbm9yZTogQWRkIHN0cm5kdXAuaC4gIFJlbW92ZSBtZW1jaHIuYywgbWVtY21wLmMsCi0JbWVtcmNoci5jLCBzdHJjYXNlY21wLmMsIHN0cmNoci5jLCBzdHJyY2hyLmMsIHN0cnNwbi5jLCBzdHJ0b2wuYywKLQlzdHJ0b3VsLmMuCi0JKiBtNC8uY3ZzaWdub3JlOiBBZGQgZXhpdGZhaWwubTQsIGV4dGVuc2lvbnMubTQsIGdudWxpYi5tNCwKLQloYXJkLWxvY2FsZS5tNCwgbWJzdGF0ZV90Lm00LCBzdHJlcnJvcl9yLm00LCBzdHJuZHVwLm00LAotCXhzdHJuZHVwLm00LiAgUmVtb3ZlIGdsaWJjMjEubTQsIGludGRpdjAubTQsIGludHR5cGVzLXByaS5tNCwKLQlpbnR0eXBlcy5tNCwgaW50dHlwZXNfaC5tNCwgaXNjLXBvc2l4Lm00LCBsY21lc3NhZ2UubTQsCi0Jc3RkaW50X2gubTQsIHVpbnRtYXhfdC5tNCwgdWxvbmdsb25nLm00LgotCSogc3JjLy5jdnNpZ25vcmU6IEFkZCAqLm91dHB1dC4KLQotCSogc3JjL3BhcnNlLWdyYW0ueTogUHV0IGNvcHlyaWdodCBub3RpY2UgaW5zaWRlICV7ICV9IHNvIGl0Ci0JZ2V0cyBjb3BpZWQgdG8gdGhlIG91dHB1dCBmaWxlLgotCi0yMDA0LTA0LTI4ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCUdldCBmaWxlcyBmcm9tIHRoZSBnbnVsaWIgYW5kIHBvIHJlcG9zaXRvcmllcywgaW5zdGVhZCBvZiByZWx5aW5nCi0Jb24gdGhlbSBiZWluZyBpbiBvdXIgQ1ZTLiAgVXBncmFkZSB0byBsYXRlc3QgdmVyc2lvbnMgb2YgZ251bGliCi0JYW5kIEF1dG9tYWtlLgotCi0JKiBNYWtlZmlsZS5hbSAoU1VCRElSUyk6IFJlbW92ZSBtNDsgQXV0b21ha2Ugbm93IGRvZXMgbTQuCi0JKiBib290c3RyYXA6IEJvb3RzdHJhcCBmcm9tIGdudWxpYiBhbmQgcG8gcmVwb3NpdG9yaWVzLgotCU11Y2ggb2YgdGhpcyBjb2RlIHdhcyBzdG9sZW4gZnJvbSBHTlUgZGlmZiBhbmQgR05VIHRhcidzIGJvb3RzdHJhcC4KLQkqIFJFQURNRS1jdnM6IERvY3VtZW50IHRoZXNlIGNoYW5nZXMuICBSZW1vdmUgdmVyc2lvbiBudW1iZXJzIGZyb20KLQltZW50aW9ucyBvZiBidWlsZCB0b29scywgc2luY2UgdGhleSBjaGFuZ2Ugc28gb2Z0ZW4uICBNZW50aW9uIEZsZXguCi0KLQkqIGNvbmZpZ3VyZS5hYyAoQUNfQ09ORklHX01BQ1JPX0RJUik6IEFkZCwgd2l0aCBtNCBhcyBhcmcuCi0JKGdsX1VTRV9TWVNURU1fRVhURU5TSU9OUyk6IEFkZC4KLQkoQUNfR05VX1NPVVJDRSwgQUNfQUlYLCBBQ19NSU5JWCk6Ci0JUmVtb3ZlOyBubyBsb25nZXIgbmVlZGVkLCBhcyBnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlMKLQlkb2VzIHRoaXMgZm9yIHVzLgotCShBQ19JU0NfUE9TSVgpOiBSZW1vdmU7IHdlIG5vIGxvbmdlciBzdXBwb3J0IHRoaXMKLQlhbmNpZW50IE9TLCBhcyBpdCBnZXRzIGluIHRoZSB3YXkgb2YgbGF0ZXN0IEF1dG9jb25mICYgZ251bGliLgotCShBQ19IRUFERVJfU1REQyk6IFJlbW92ZTogd2Ugbm93IGFzc3VtZSBDODkgb3IgYmV0dGVyLgotCShBQ19DSEVDS19IRUFERVJTX09OQ0UpOiBVc2UgaW5zdGVhZCBvZiBBQ19DSEVDS19IRUFERVJTLgotCURvIG5vdCBjaGVjayBmb3IgQzg5IGhlYWRlcnMsIGV4Y2VwdCBmb3IgbG9jYWxlLmggd2hpY2ggaXMgdXNlZAotCWJ5IHRoZSBZYWNjIGxpYnJhcnkgYW5kIG11c3QgcG9ydCB0byBLJlIgaG9zdHMuCi0JKEFDX0NIRUNLX0ZVTkNTX09OQ0UpOiBVc2UgaW5zdGVhZCBvZiBBQ19DSEVDS19GVU5DUy4KLQlEbyBub3QgY2hlY2sgZm9yIEM4OSBmdW5jdGlvbnMsIGV4Y2VwdCBmb3Igc2V0bG9jYWxlIHdoaWNoIGlzCi0JdXNlZCBieSB0aGUgWWFjYyBsaWJyYXJ5LgotCShBQ19DSEVDS19ERUNMUywgQUNfUkVQTEFDRV9GVU5DUyk6IFJlbW92ZTsgbm8gbG9uZ2VyIG5lZWRlZC4KLQkoZ2xfRElSTkFNRSwgZ2xfRVJST1IsIGdsX0ZVTkNfQUxMT0NBLCBnbF9GVU5DX01FTUNIUiwKLQlnbF9GVU5DX01FTVJDSFIsIGdsX0ZVTkNfU1RQQ1BZLCBnbF9GVU5DX1NUUk5MRU4sIGdsX0ZVTkNfU1RSVE9MLAotCWdsX0dFVE9QVCwgZ2xfSEFTSCwgZ2xfTUJTV0lEVEgsIGdsX09CU1RBQ0ssIGdsX1FVT1RFLAotCWdsX1FVT1RFQVJHLCBnbF9YQUxMT0MsIGptX0ZVTkNfR0xJQkNfVU5MT0NLRURfSU8sIGptX0ZVTkNfTUFMTE9DLAotCUFNX0dOVV9HRVRURVhUKTogUmVtb3ZlOyBub3cgZG9uZSBieToKLQkoR05VTElCX0FVVE9DT05GX1NOSVBQRVQpOiBBZGQuICAiYm9vdHN0cmFwIiBidWlsZHMgdGhpcyBmb3IgdXMuCi0JKEFDX0NPTkZJR19GSUxFUyk6IFJlbW92ZSBtNC9NYWtlZmlsZSwgYXMgQXV0b21ha2Ugbm93IGRvZXMgdGhpcwotCWZvciB1cy4KLQotCSogbGliL01ha2VmaWxlLmFtOiBJbmNsdWRlIGdudWxpYi5taywgYnVpbHQgZm9yIHVzIGJ5ICJib290c3RyYXAiLgotCShCVUlMVF9TT1VSQ0VTLCBFWFRSQV9ESVNULCBNT1NUTFlDTEVBTkZJTEVTKToKLQlEZWZpbmUgdG8gZW1wdHksIGFzIGdudWxpYi5tayB3aWxsIGRvIHRoZSByZXN0IGZvciB1cy4KLQkoJChsaWJiaXNvbl9hX09CSkVDVFMpLCBzdGRib29sLmgpOiBSZW1vdmUsIGFzIGdudWxpYi5tayBkb2VzIHRoaXMKLQlmb3IgdXMuCi0JKGxpYmJpc29uX2FfU09VUkNFUyk6IERlZmluZSB0byAkKGxpYl9TT1VSQ0VTKSBub3cuCi0JKGxpYl9TT1VSQ0VTKTogTmV3IHN5bWJvbCwgY29udGFpbmluZyBvbmx5IHRoZSBub24tZ251bGliIGxpYnMuCi0KLQkqIHNyYy9maWxlcy5jOiBJbmNsdWRlIGdudWxpYidzIHhzdHJuZHVwLmguCi0KLQkqIHNyYy9zeXN0ZW0uaCAoTUFMTE9DKTogVXNlIHhubWFsbG9jLCBmb3IgYmV0dGVyIG92ZXJmbG93IGNoZWNraW5nLgotCShSRUFMTE9DKTogVXNlIHhucmVhbGxvYywgZm9yIGxpa2V3aXNlLgotCSh4c3RybmR1cCwgc3RwY3B5KTogUmVtb3ZlIGRlY2xzLCBhcyBnbnVsaWIgZG9lcyB0aGlzIGZvciB1cyBub3cuCi0JKHN0cm5sZW4sIG1lbXJjaHIpOiBSZW1vdmUgZGVjbHM7IGZ1bmN0aW9ucyBubyBsb25nZXIgdXNlZC4KLQlJbmNsdWRlIDxzdHBjcHkuaD4uCi0KLQkqIGNvbmZpZy9kZXBjb21wLCBjb25maWcvaW5zdGFsbC1zaCwgbGliL2FsbG9jYS5jLCBsaWIvYXJnbWF0Y2guYywKLQlsaWIvYXJnbWF0Y2guaCwgbGliL2Jhc2VuYW1lLmMsIGxpYi9kaXJuYW1lLmMsIGxpYi9kaXJuYW1lLmgsCi0JbGliL2Vycm9yLmMsIGxpYi9lcnJvci5oLCBsaWIvZ2V0b3B0LmMsIGxpYi9nZXRvcHQuaCwKLQlsaWIvZ2V0b3B0MS5jLCBsaWIvZ2V0dGV4dC5oLCBsaWIvaGFzaC5jLCBsaWIvaGFzaC5oLAotCWxpYi9tYWxsb2MuYywgbGliL21ic3dpZHRoLmMsIGxpYi9tYnN3aWR0aC5oLCBsaWIvbWVtY2hyLmMsCi0JbGliL21lbWNtcC5jLCBsaWIvbWVtcmNoci5jLCBsaWIvb2JzdGFjay5jLCBsaWIvb2JzdGFjay5oLAotCWxpYi9xdW90ZS5jLCBsaWIvcXVvdGUuaCwgbGliL3F1b3RlYXJnLmMsIGxpYi9xdW90ZWFyZy5oLAotCWxpYi9yZWFsbG9jLmMsIGxpYi9zdGRib29sXy5oLCBsaWIvc3RwY3B5LmMsIGxpYi9zdHJjYXNlY21wLmMsCi0JbGliL3N0cmNoci5jLCBsaWIvc3RybmNhc2VjbXAuYywgbGliL3N0cm5sZW4uYywgbGliL3N0cnJjaHIuYywKLQlsaWIvc3Ryc3BuLmMsIGxpYi9zdHJ0b2wuYywgbGliL3N0cnRvdWwuYywgbGliL3VubG9ja2VkLWlvLmgsCi0JbGliL3hhbGxvYy5oLCBsaWIveG1hbGxvYy5jLCBsaWIveHN0cmR1cC5jLCBsaWIveHN0cm5kdXAuYywKLQltNC9NYWtlZmlsZS5hbSwgbTQvYWxsb2NhLm00LCBtNC9kaXJuYW1lLm00LCBtNC9kb3MubTQsCi0JbTQvZXJyb3IubTQsIG00L2dldG9wdC5tNCwgbTQvaGFzaC5tNCwgbTQvbWFsbG9jLm00LAotCW00L21icnRvd2MubTQsIG00L21ic3dpZHRoLm00LCBtNC9tZW1jaHIubTQsIG00L21lbWNtcC5tNCwKLQltNC9tZW1yY2hyLm00LCBtNC9vYnN0YWNrLm00LCBtNC9vbmNlb25seS5tNCwgbTQvcHJlcmVxLm00LAotCW00L3F1b3RlLm00LCBtNC9xdW90ZWFyZy5tNCwgbTQvcmVhbGxvYy5tNCwgbTQvc3RkYm9vbC5tNCwKLQltNC9zdHBjcHkubTQsIG00L3N0cm5sZW4ubTQsIG00L3N0cnRvbC5tNCwgbTQvc3RydG91bC5tNCwKLQltNC91bmxvY2tlZC1pby5tNCwgbTQveGFsbG9jLm00LCBwby9MSU5HVUFTLCBwby9NYWtlZmlsZS5pbi5pbiwKLQlwby9NYWtldmFycywgcG8vZGEucG8sIHBvL2RlLnBvLCBwby9lcy5wbywgcG8vZXQucG8sIHBvL2ZyLnBvLAotCXBvL2hyLnBvLCBwby9pZC5wbywgcG8vaXQucG8sIHBvL2phLnBvLCBwby9tcy5wbywgcG8vbmwucG8sCi0JcG8vcHRfQlIucG8sIHBvL3JvLnBvLCBwby9ydS5wbywgcG8vc3YucG8sIHBvL3RyLnBvOgotCVJlbW92ZSwgYXMgdGhlc2UgZmlsZXMgYXJlIG5vdyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseQotCWJ5IGJvb3RzdHJhcCBvciBhdXRvbWFrZS4KLQotCSogcG8vQ2hhbmdlTG9nOiBSZW1vdmU6IGFsbCBidXQgb25lIGVudHJ5IHdhcyBhIGR1cGxpY2F0ZQotCW9mIHRoaXMgZmlsZSwgYW5kIEkgbW92ZWQgdGhhdCAyMDAwLTExLTAyIGVudHJ5IGhlcmUuCi0KLQkqIGNvbmZpZy8uY3ZzaWdub3JlOiBBZGQgTWFrZWZpbGUsIGRlcGNvbXAsIGluc3RhbGwtc2guCi0JKiBsaWIvLmN2c2lnbm9yZTogQWRkIGFsbG9jYS5jLCBhbGxvY2EuaCwgYWxsb2NhXy5oLCBhcmdtYXRjaC5jLAotCWFyZ21hdGNoLmgsIGJhc2VuYW1lLmMsIGRpcm5hbWUuYywgZGlybmFtZS5oLCBlcnJvci5jLCBlcnJvci5oLAotCWV4aXQuaCwgZXhpdGZhaWwuYywgZXhpdGZhaWwuaCwgZ2V0b3B0LmMsIGdldG9wdC5oLCBnZXRvcHQxLmMsCi0JZ2V0b3B0X2ludC5oLCBnZXR0ZXh0LmgsIGdudWxpYi5taywgaGFyZC1sb2NhbGUuYywgaGFyZC1sb2NhbGUuaCwKLQloYXNoLmMsIGhhc2guaCwgbWFsbG9jLmMsIG1ic3dpZHRoLmMsIG1ic3dpZHRoLmgsIG1lbWNoci5jLAotCW1lbWNtcC5jLCBtZW1yY2hyLmMsIG9ic3RhY2suYywgb2JzdGFjay5oLCBxdW90ZS5jLCBxdW90ZS5oLAotCXF1b3RlYXJnLmMsIHF1b3RlYXJnLmgsIHJlYWxsb2MuYywgc3RkYm9vbF8uaCwgc3RwY3B5LmMsIHN0cGNweS5oLAotCXN0cmNhc2VjbXAuYywgc3RyY2hyLmMsIHN0cmlwc2xhc2guYywgc3RybmNhc2VjbXAuYywgc3RybmR1cC5jLAotCXN0cm5sZW4uYywgc3RycmNoci5jLCBzdHJzcG4uYywgc3RydG9sLmMsIHN0cnRvdWwuYywKLQl1bmxvY2tlZC1pby5oLCB4YWxsb2MuaCwgeG1hbGxvYy5jLCB4c3RyZHVwLmMsIHhzdHJuZHVwLmMsCi0JeHN0cm5kdXAuaC4KLQkqIG00Ly5jdnNpZ25vcmU6IFJlbW92ZSBNYWtlZmlsZSwgTWFrZWZpbGUuaW4uICBBZGQgYWxsb2NhLm00LAotCWRpcm5hbWUubTQsIGRvcy5tNCwgZXJyb3IubTQsIGdldG9wdC5tNCwgaGFzaC5tNCwgbWJydG93Yy5tNCwKLQltYnN3aWR0aC5tNCwgb2JzdGFjay5tNCwgb25jZW9ubHkubTQsIHF1b3RlLm00LCBxdW90ZWFyZy5tNCwKLQlzdGRib29sLm00LCBzdHBjcHkubTQsIHN0cm5sZW4ubTQsIHVubG9ja2VkLWlvLm00LCB4YWxsb2MubTQuCi0JKiBwby8uY3ZzaWdub3JlOiBBZGQgKi5wbywgTElOR1VBUywgTWFrZWZpbGUuaW4uaW4sIE1ha2V2YXJzLgotCSogc3JjLy5jdnNpZ25vcmU6IFJlbW92ZSAqXy5jLgotCi0KLQkqIE1ha2VmaWxlLm1haW50IChHWklQX0VOVik6IERvbid0IHVzZSAtLXJzeW5jYWJsZSBpZiBnemlwIGRvZXNuJ3QKLQlzdXBwb3J0IGl0LiAgKFRoZSBsYXRlc3Qgc3RhYmxlIGd6aXAgZG9lc24ndC4pCi0KLTIwMDQtMDQtMjcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBkYXRhL2xhbHIxLmNjIChQYXJzZXI6OnN0b3NfKSBbISBZWURFQlVHXTogRGVmaW5lIGV2ZW4gaW4gdGhpcwotCWNhc2UsIGFzIHN0b3NfIGlzIG5vdyB1c2VkIGJ5IGRlc3RydWN0b3JzIGR1ZSB0byB0aGUgMjAwNC0wMi0wOQotCWNoYW5nZS4KLQotCVJlbW92ZSBtb3JlIEsmUiBDIHN1cHBvcnQuCi0JKiBsaWIvbGliaWJlcnR5LnkgKFBBUkFNUyk6IFJlbW92ZS4gIEFsbCB1c2VzIHJlbW92ZWQuCi0JKiBsaWIvc3VicGlwZS5jIChlcnJubyk6IFJlbW92ZSBkZWNsLgotCUluY2x1ZGUgPHN0ZGxpYi5oPiB1bmNvbmRpdGlvbmFsbHkuCi0JKEVYSVRfRkFJTFVSRSk6IFJlbW92ZSBtYWNyby4KLQkqIHNyYy9jb21wbGFpbi5jICh2ZnByaW50Ziwgc3RyZXJyb3IpOiBSZW1vdmUuCi0JKiBzcmMvc3lzdGVtLmg6IEluY2x1ZGUgbGltaXRzLmgsIHN0ZGxpYi5oLCBzdHJpbmcuaCwgbG9jYWxlLmgKLQl1bmNvbmRpdGlvbmFsbHkuCi0JKEVYSVRfRkFJTFVSRSwgRVhJVF9TVUNDRVNTLCBzZXRsb2NhbGUpOiBSZW1vdmUgZGVmbnMuCi0JVXNlIGxhdGVzdCBBdXRvY29uZiByZWNvbW1lbmRhdGlvbnMgZm9yIGluY2x1ZGluZyBpbnR0eXBlcy5oLCBzdGRpbnQuaC4KLQkoc3RyY2hyLCBzdHJzcG4sIG1lbWNocik6IFJlbW92ZSBkZWNscy4KLQkqIHRlc3RzL2NhbGMuYXQgKF9BVF9EQVRBX0NBTENfWSk6IEluY2x1ZGUgc3RkbGliLmgsIHN0cmluZy5oCi0JdW5jb25kaXRpb25hbGx5LiAgRG8gbm90IGRlY2xhcmUgcGVycm9yLgotCSogdGVzdHMvY29uZmxpY3RzLmF0ICglbm9uYXNzb2MgYW5kIGVvZik6IEluY2x1ZGUgc3RkbGliLmgKLQl1bmNvbmRpdGlvbmFsbHkuCi0KLQkqIHNyYy9jb21wbGFpbi5jIChfKTogUmVtb3ZlIHVzZWxlc3MgZGVmbiwgYXMgc3lzdGVtLmggZGVmaW5lcyB0aGlzLgotCi0JKiBsaWIvYml0c2V0LmggKF9fSU5UX1RPX1BUUik6IFJlbW92ZTsgd29ya2Fyb3VuZCBubyBsb25nZXIgbmVlZGVkCi0Jd2l0aCBsYXRlc3Qgb2JzdGFjay5oLgotCSogbGliL2ViaXRzZXQuYyAoZWJpdHNldF9lbHRfYWxsb2MpOiBEb24ndCBib3RoZXIgdG8gY2FzdCBhcmdzCi0JdG8gcHJvY2VkdXJlIHR5cGVzLCBhcyBvYnN0YWNrLmggbm93IGRvZXMgdGhhdCBmb3IgdXMuCi0JKiBsaWIvbGJpdHNldC5jIChsYml0c2V0X2VsdF9hbGxvYyk6IExpa2V3aXNlLgotCi0JKiBsaWIvc3VicGlwZS5oIFtIQVZFX1NZU19UWVBFU19IXTogSW5jbHVkZSA8c3lzL3R5cGVzLmg+LAotCXNvIHRoYXQgdGhpcyBpbmNsdWRlIGZpbGUgY2FuIHN0YW5kIGFsb25lLgotCSogbGliL3N1YnBpcGUuYzogRG8gbm90IGluY2x1ZGUgPHN5cy90eXBlcy5oPiwgYXMgc3VicGlwZS5oCi0JZG9lcyB0aGlzIG5vdy4gIEluY2x1ZGUgc3VicGlwZS5oIGZpcnN0IGFmdGVyIGNvbmZpZy5oLCB0bwotCXRlc3Qgd2hldGhlciBpdCBjYW4gc3RhbmQgYWxvbmUuCi0KLQkqIHRlc3RzL2FjdGlvbnMuYXQgKF9BVF9DSEVDS19QUklOVEVSX0FORF9ERVNUUlVDVE9SKTogRG9uJ3QKLQlkZWNsYXJlIHl5ZXJyb3Igd2hlbiB1c2luZyBsYWxyLmNjLCBhcyBHQ0MgMy40LjAgd2FybnMgYWJvdXQgdGhlCi0JdW51c2VkIGRlY2xhcmF0aW9uLgotCi0JKiB0ZXN0cy9zeW5jbGluZXMuYXQgKCV1bmlvbiBzeW5jaCBsaW5lKTogUHV0IGEgZHVtbXkgbWVtYmVyIGluCi0JdGhlIHVuaW9uLCBiZWNhdXNlIGVtcHR5IHVuaW9ucyBhcmVuJ3QgYWxsb3dlZCBpbiBDLiAgQ2F1Z2h0Ci0JYnkgR0NDIDMuNC4wLgotCi0yMDA0LTA0LTEzICBKaW0gTWV5ZXJpbmcgIDxqaW1AbWV5ZXJpbmcubmV0PgotCi0JKiBzcmMvY29uZmxpY3RzLmMgKGNvbmZsaWN0c19wcmludCk6IENvcnJlY3QgZm9ybWF0IHN0cmluZyB0eXBvOgotCXVzZSBgJSUnIHRvIHByb2R1Y2UgbGl0ZXJhbCBgJScuICAodHJpdmlhbCBjaGFuZ2UpCi0KLTIwMDQtMDMtMzAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBzcmMvZ2V0YXJncy5jICh2ZXJzaW9uKTogVXBkYXRlIGNvcHlyaWdodCB5ZWFyIHRvIDIwMDQuCi0KLQkqIGRhdGEvYy5tNCAoYjRfaW50X3R5cGUpOiBVc2UgJ3Nob3J0IGludCcgcmF0aGVyIHRoYW4KLQknc2hvcnQnLCBhbmQgc2ltaWxhcmx5IGZvciAnbG9uZycsICd1bnNpZ25lZCcsIGV0Yy4KLQkqIGRhdGEvZ2xyLmMgKFlZVFJBTlNMQVRFLCB5eWNvbmZsLCB5eVN5bWJvbCwgeXlJdGVtTnVtLAotCXl5Z2V0TFJBY3Rpb25zLCB5eXByb2Nlc3NPbmVTdGFjaywgeXlyZWNvdmVyU3ludGF4RXJyb3IsCi0JeXlfeXlwc3RhY2ssIHl5ZHVtcHN0YWNrKTogTGlrZXdpc2UuCi0JKiBkYXRhL2xhbHIxLmNjICh1c2VyX3Rva2VuX251bWJlcl9tYXhfLCB1c2VyX3Rva2VuX251bWJlcl9tYXhfLAotCXRyYW5zbGF0ZV8sIHNlcV8sIFtdLCBwb3AsIFNsaWNlLCByYW5nZV8sIG9wZXJhdG9yKywgb3BlcmF0b3IrPSk6Ci0JTGlrZXdpc2UuCi0JKiBkYXRhL3lhY2MuYyAoYjRfaW50X3R5cGUsIHl5c3MsIFlZU1RBQ0tfQllURVMsIHl5c2lnbmVkX2NoYXIsCi0JeXlfc3RhY2tfcHJpbnQsIHl5cGFyc2UpOiBMaWtld2lzZS4KLQkqIGRvYy9iaXNvbi50ZXhpbmZvIChQcm9sb2d1ZSwgTXVsdGlwbGUgVHlwZXMpOiBMaWtld2lzZS4KLQkqIGxpYi9iYml0c2V0LmggKGJpdHNldF93b3JkLCBCSVRTRVRfV09SRF9CSVRTKTogTGlrZXdpc2UuCi0JKiBsaWIvYml0c2V0LmMgKGJpdHNldF9wcmludCk6IExpa2V3aXNlLgotCSogbGliL2JpdHNldF9zdGF0cy5jIChiaXRzdGVfbG9nX2hpc3RvZ3JhbV9wcmludCk6IExpa2V3aXNlLgotCSogbGliL2JpdHNldHYtcHJpbnQuYyAoYml0c2V0dl9tYXRyaXhfZHVtcCk6IExpa2V3aXNlLgotCSogbGliL2JpdHNldHYuYyAoYml0c2V0dl9kdW1wKTogTGlrZXdpc2UuCi0JKiBsaWIvZWJpdHNldC5jIChFQklUU0VUX0VMVF9CSVRTLCBlYml0c2V0X2VsdF9hbGxvYyk6IExpa2V3aXNlLgotCSogbGliL2xiaXRzZXQuYyAoTEJJVFNFVF9FTFRfQklUUywgbGJpdHNldF9lbHRfYWxsb2MsIGRlYnVnX2xiaXRzZXQpOgotCUxpa2V3aXNlLgotCSogc3JjL0xSMC5jIChhbGxvY2F0ZV9pdGVtc2V0cyk6IExpa2V3aXNlLgotCSogc3JjL2dyYW0uaCAocnVsZV9udW1iZXIsIHJ1bGUpOiBMaWtld2lzZS4KLQkqIHNyYy9sYWxyLmggKGdvdG9fbnVtYmVyKTogTGlrZXdpc2UuCi0JKiBzcmMvbnVsbGFibGUuYyAobnVsbGFibGVfY29tcHV0ZSk6IExpa2V3aXNlLgotCSogc3JjL291dHB1dC5jIChwcmVwYXJlX3J1bGVzKTogTGlrZXdpc2UuCi0JKiBzcmMvcmVsYXRpb24uYyAocmVsYXRpb25fcHJpbnQsIHJlbGF0aW9uX2RpZ3JhcGgpOiBMaWtld2lzZS4KLQkqIHNyYy9yZWxhdGlvbi5oIChyZWxhdGlvbl9ub2RlKTogTGlrZXdpc2UuCi0JKiBzcmMvc3RhdGUuaCAoc3RhdGVfbnVtYmVyLCB0cmFuc2l0aW9ucywgZXJycywgcmVkdWN0aW9ucywKLQlzdHJ1Y3Qgc3RhdGUpOiBMaWtld2lzZS4KLQkqIHNyYy9zeW10YWIuaCAoc3ltYm9sX251bWJlciwgc3RydWN0IHN5bWJvbCk6IExpa2V3aXNlLgotCSogc3JjL3RhYmxlcy5jICh2ZWN0b3JfbnVtYmVyLCB0YWxseSwgYWN0aW9uX251bWJlciwKLQlkZWZhdWx0X2dvdG8sIGdvdG9fYWN0aW9ucyk6IExpa2V3aXNlLgotCSogdGVzdHMvZXhpc3RpbmcuYXQgKEdOVSBDaW0gR3JhbW1hcik6IExpa2V3aXNlLgotCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoV2ViMmMgQWN0aW9ucyk6IExpa2V3aXNlLgotCi0JKiBzcmMvb3V0cHV0LmMgKG11c2NsZV9pbnNlcnRfc2hvcnRfaW50X3RhYmxlKTogUmVuYW1lZCBmcm9tCi0JbXVzY2xlX2luc2VydF9zaG9ydF90YWJsZS4gIEFsbCB1c2VzIGNoYW5nZWQuCi0KLTIwMDQtMDMtMjUgIFBhdWwgSGlsZmluZ2VyICA8aGlsZmluZ3JAdHVsbHkuQ1MuQmVya2VsZXkuRURVPgotCi0JKiBzcmMvcGFyc2UtZ3JhbS55OiBEZWZpbmUgUEVSQ0VOVF9FWFBFQ1RfUlIuCi0JKGRlY2xhcmF0aW9uKTogUmVwbGFjZSBleHBlY3RlZF9jb25mbGljdHMgd2l0aCBleHBlY3RlZF9zcl9jb25mbGljdHMuCi0JQWRkICVleHBlY3QtcnIgcnVsZS4KLQotCSogc3JjL3NjYW4tZ3JhbS5sOiBSZWNvZ25pemUgJWV4cGVjdC1yci4KLQotCSogc3JjL2NvbmZsaWN0cy5oIChleHBlY3RlZF9zcl9jb25mbGljdHMpOiBSZW5hbWUgZnJvbQotCWV4cGVjdGVkX2NvbmZsaWN0cy4KLQkoZXhwZWN0ZWRfcnJfY29uZmxpY3RzKTogRGVjbGFyZS4KLQotCSogc3JjL2NvbmZsaWN0cy5jIChleHBlY3RlZF9zcl9jb25mbGljdHMpOiBSZW5hbWUgZnJvbQotCWV4cGVjdGVkX2NvbmZsaWN0cy4KLQkoZXhwZWN0ZWRfcnJfY29uZmxpY3RzKTogRGVmaW5lLgotCShjb25mbGljdHNfcHJpbnQpOiBDaGVjayByL3IgY29uZmxpY3RzIGFnYWluc3QgZXhwZWN0ZWRfcnJfY29uZmxpY3RzCi0JZm9yIEdMUiBwYXJzZXJzLgotCVVzZSBleHBlY3RlZF9zcl9jb25mbGljdHMgaW4gcGxhY2Ugb2YgZXhwZWN0ZWRfY29uZmxpY3RzLgotCVdhcm4gaWYgZXhwZWN0ZWRfcnJfY29uZmxpY3RzIHVzZWQgaW4gbm9uLUdMUiBwYXJzZXIuCi0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvOiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgJWV4cGVjdC1yci4KLQotMjAwNC0wMy0wOCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAZ251Lm9yZz4KLQotCUFkZCBzdXBwb3J0IGZvciBoZXggdG9rZW4gbnVtYmVycy4gIFN1Z2dlc3RlZCBieSBPZGQgQXJpbGQgT2xzZW4gaW4KLQk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwNC0wMy9tc2cwMDAwMC5odG1sPi4KLQotCSogTkVXUzogRG9jdW1lbnQgaGV4YWRlY2ltYWwgdG9rZW5zLCBubyBOVUwgYnl0ZXMsICVkZXN0cnVjdG9yCi0JaW4gbGFscjEuY2MuCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoVG9rZW4gRGVjbCk6IEFkZCBoZXhhZGVjaW1hbCB0b2tlbiBudW1iZXJzLgotCSogc3JjL3NjYW4tZ3JhbS5sIChzY2FuX2ludGVnZXIpOiBOZXcgZnVuY3Rpb24uCi0JKHtpbnR9KTogVXNlIGl0LgotCSgwW3hYXVswLTlhYmNkZWZBQkNERUZdKyk6IE5ldyBwYXR0ZXJuLCB0byBzdXBwb3J0IGhleCBudW1iZXJzLgotCSg8U0NfRVNDQVBFRF9TVFJJTkcsU0NfRVNDQVBFRF9DSEFSQUNURVI+LCBcXHhbMC05YWJjZGVmQUJDREVGXSssCi0JaGFuZGxlX2FjdGlvbl9kb2xsYXIsIGhhbmRsZV9hY3Rpb25fYXQsIGNvbnZlcnRfdWNuX3RvX2J5dGUpOgotCVNheSAibG9uZyBpbnQiLCBub3QgImxvbmciLCBmb3IgdW5pZm9ybWl0eSB3aXRoIEdOVSBzdHlsZS4KLQotMjAwNC0wMi0yNSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIHRlc3RzL2xvY2FsLmF0IChBVF9DT01QSUxFLCBBVF9DT01QSUxFX0NYWCk6IElnbm9yZSBzdGRvdXQgZnJvbQotCWNvbXBpbGVycy4gIFRoaXMgZml4ZXMgYSBwcm9ibGVtIHdpdGggSW50ZWwncyBDKysgY29tcGlsZXIgYmVpbmcKLQljaGF0dHksIHJlcG9ydGVkIGJ5IEd1aWRvIFRyZW50YWxhbmNpYSBpbgotCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDQtMDIvbXNnMDAwMzAuaHRtbD4uCi0KLTIwMDQtMDItMDkgIEFsZXhhbmRyZSBEdXJldC1MdXR6ICA8YWRsQGdudS5vcmc+Ci0KLQlTdXBwb3J0ICVkZXN0cnVjdG9yIGFuZCBtZXJnZSBlcnJvciBsb2NhdGlvbnMgaW4gbGFscjEuY2MuCi0KLQkqIGRhdGEvbGFscjEuY2MgKGI0X2N4eF9kZXN0cnVjdF9kZWYpOiBOZXcgbWFjcm8uCi0JKFBhcnNlcjo6c3Rvc18pOiBEZWZpbmUgdW5jb25kaXRpb25hbGx5LgotCShQYXJzZXI6OmRlc3RydWN0Xyk6IE5ldyBtZXRob2QuICBHZW5lcmF0ZSBpdHMgYm9keSB3aXRoCi0JYjRfeXlkZXN0cnVjdF9nZW5lcmF0ZS4KLQkoUGFyc2VyOjplcnJvcl9zdGFydF8pOiBOZXcgYXR0cmlidXRlLgotCShQYXJzZXI6OnBhcnNlKSA8eXllcnJsYWIsIHl5ZXJybGFiMT46IENhbGwgZGVzdHJ1Y3RfIG9uIGVycm9uZW91cwotCXRva2VuIHdoaWNoIGFyZSBkaXNjYXJkZWQuCi0JKFBhcnNlcjo6cGFyc2UpIDx5eWVycmxhYiwgeXllcnJvcmxhYiwgeXllcnJsYWIxPjogVXBkYXRlCi0JZXJyb3Jfc3RhcnRfIHdoZW4gZXJyb25lb3VzIHRva2VuIGFyZSBkaXNjYXJkZWQuCi0JKFBhcnNlcjo6cGFyc2UpIDx5eWVycmxhYjE+OiBDb21wdXRlIHRoZSBsb2NhdGlvbiBvZiB0aGUgZXJyb3IKLQl0b2tlbiBzbyB0aGF0IGl0IGNvdmVycyBhbGwgdGhlIGRpc2NhcmRlZCB0b2tlbnMuCi0JKiB0ZXN0cy9hY3Rpb25zLmF0IChfQVRfQ0hFQ0tfUFJJTlRFUl9BTkRfREVTVFJVQ1RPUik6IEFkanVzdCBzbwotCWl0IGNhbiBiZSBjYWxsZWQgd2l0aCBgJXNrZWxldG9uICJsYWxyMS5jYyInLCBhbmQgZG8gdGhhdC4KLQotMjAwNC0wMi0wMiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIHNyYy9NYWtlZmlsZS5hbSAoQU1fQ1BQRkxBR1MpOiBOZXcgbWFjcm8uICBJdCBtZW50aW9ucwotCSQodG9wX3NyY2RpcikvbGliIGFuZCAuLi9saWIuICBUaGlzIGZpeGVzIGEgYnVnIHJlcG9ydGVkCi0JYnkgUGF1bCBIaWxmaW5nZXI7IHRoZSBvbGQgSU5DTFVERVMgdmFsdWUgZGlkbid0IG1lbnRpb24gLi4vbGliLgotCVRoZXJlJ3Mgbm8gbmVlZCB0byBtZW50aW9uIHRvcF9idWlsZGRpciBzaW5jZSBBdXRvbWFrZSBkb2VzIHRoYXQKLQlmb3IgdXMuCi0JKElOQ0xVREVTKTogUmVtb3ZlLCBhcyBBdXRvbWFrZSBzYXlzIGl0J3Mgb2Jzb2xlc2NlbnQuCi0JQ29udGVudHMgbWlncmF0ZWQgaW50byBBTV9DUFBGTEFHUyBhcyBkZXNjcmliZWQgYWJvdmUuCi0JKiBsaWIvTWFrZWZpbGUuYW0gKElOQ0xVREVTKTogUmVtb3ZlOyBvYnNvbGVzY2VudC4KLQotMjAwNC0wMS0xNCAgUGF1bCBIaWxmaW5nZXIgIDxoaWxmaW5nckBDUy5CZXJrZWxleS5FRFU+Ci0KLQkqIGRhdGEvZ2xyLmMgKHl5dG9rZW5OYW1lKTogQnVsbGV0LXByb29mIGFnYWluc3QgWVlFTVBUWSB0b2tlbi4KLQkoeXlyZXBvcnRTeW50YXhFcnJvcik6IEhhbmRsZSBjYXNlIHdoZXJlIGxvb2thaGVhZCB0b2tlbiBpcwotCVlZRU1QVFkuCi0KLTIwMDQtMDEtMTMgIFBhdWwgSGlsZmluZ2VyICA8SGlsZmluZ2VyQENTLkJlcmtlbGV5LkVEVT4KLQotCSogZGF0YS9nbHIuYzogUHV0IGNhc3RzIG9uIHVzZXMgb2YgWVlSRUFMTE9DIGFuZCBZWU1BTExPQyBzbyB0aGF0Ci0JcmVzdWx0aW5nIHBhcnNlcnMgYXJlIGNvbXBpbGFibGUgd2l0aCBDKysuCi0KLTIwMDMtMTItMjMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBjb25maWcvZGVwY29tcCwgY29uZmlnL2luc3RhbGwtc2g6IFN5bmMgd2l0aCBBdXRvbWFrZSAxLjguCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9za2VsZXRvbik6IFJlbmFtZSBsb2NhbCB2YXIuCi0JKiB0ZXN0cy9pbnB1dC5hdCAoVG9ydHVyaW5nIHRoZSBTY2FubmVyKTogRG9uJ3QgdXNlIFx4MCBvciBcMCBpbgotCUJpc29uIHRva2VucywgYXMgdGhpcyBydW5zIGFmb3VsIG9mIHRoZSAyMDAzLTEwLTA3IGNoYW5nZSB0aGF0Ci0JZGlzYWxsb3dlZCBOVUwgYnl0ZXMgaW4gY2hhcmFjdGVyIGNvbnN0YW50cyBvciBzdHJpbmcgbGl0ZXJhbHMuCi0KLQkqIHRlc3RzL2xvY2FsLmF0OiBSZXF1aXJlIEF1dG9jb25mIDIuNTkncyBBdXRvdGVzdC4KLQkqIHRlc3RzL3Rlc3RzdWl0ZS5hdDogRG9uJ3QgaW5jbHVkZSBsb2NhbC5hdCwgc2luY2Ugd2Ugbm93IGFzc3VtZQotCUF1dG9jb25mIDIuNTkgb3IgbGF0ZXIuICBBdXRvY29uZiAyLjU5IGhhZCBzb21lIHByb2JsZW1zIHdpdGgKLQlpbmNsdWRpbmcgaXQuCi0JKiB0ZXN0cy9NYWtlZmlsZS5hbSAoJChURVNUU1VJVEUpKTogUmVtb3ZlIHdhcm5pbmcgYWJvdXQgaWdub3JpbmcKLQltdWx0aXBsZSBpbmNsdXNpb24gd2FybmluZ3MuCi0KLTIwMDMtMTItMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoSG93IENhbiBJIFJlc2V0IHRoZSBQYXJzZXIpOiBNb3JlIGFib3V0IHN0YXJ0Ci0JY29uZGl0aW9ucy4KLQlGcm9tIEJydW5vIEhhaWJsZS4KLQotMjAwMy0xMS0xOCAgQWxleGFuZHJlIER1cmV0LUx1dHogIDxhZGxAZ251Lm9yZz4KLQotCSogZG9jL2Jpc29uLnRleGluZm8gKEJpc29uIE9wdGlvbnMpOiBFc2NhcGUgYEAnIGluIGAkQCcuCi0KLTIwMDMtMTAtMDcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiB0ZXN0cy9NYWtlZmlsZS5hbSAoY2xlYW4tbG9jYWwpOiBEb24ndCBydW4gJ3Rlc3RzdWl0ZSAtLWNsZWFuJwotCWlmIHRlc3RzdWl0ZSBkb2Vzbid0IGV4aXN0LgotCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoU3ltYm9scyk6IE5VTCBieXRlcyBhcmUgbm90IGFsbG93ZWQgaW4gc3RyaW5nCi0JbGl0ZXJhbHMsIHVuZm9ydHVuYXRlbHkuCi0JKiBzcmMvc2Nhbi1ncmFtLmwgKDxTQ19FU0NBUEVEX1NUUklORyxTQ19FU0NBUEVEX0NIQVJBQ1RFUj4pOgotCUNvbXBsYWluIGFib3V0IE5VTCBieXRlcyBpbiBjaGFyYWN0ZXIgY29uc3RhbnRzIG9yIHN0cmluZyBsaXRlcmFscy4KLQotMjAwMy0xMC0wNSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIE5FV1M6IERvbid0IGRvY3VtZW50ICVuby1kZWZhdWx0LXByZWMsIGFzIGl0J3Mgc3RpbGwKLQl0b28gZXhwZXJpbWVudGFsLgotCSogZG9jL2Jpc29uLnRleGluZm86IERvY3VtZW50ICVuby1kZWZhdWx0LXByZWMgb25seSBpZgotCXRoZSBkZWZhdWx0cHJlYyBmbGFnIGlzIHNldC4gIE5vcm1hbGx5IGl0J3Mgbm90LgotCi0yMDAzLTEwLTA0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogZGF0YS9nbHIuYyAoYjRfcmhzX3ZhbHVlLCBiNF9yaHNfbG9jYXRpb24pOiBZaWVsZCBhCi0Jbm9uLW1vZGlmaWFibGUgbHZhbHVlLCBpbnN0ZWFkIG9mIGEgbW9kaWZpYWJsZSBvbmUuCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoQWN0aW9ucyk6IERvY3VtZW50IHRoYXQgJCQgY2FuCi0JYmUgYXNzaWduZWQgdG8uICBEbyBub3QgY2xhaW0gdGhhdCAkJCBhbmQgJE4gYXJlCi0JYXJyYXkgZWxlbWVudCByZWZlcmVuY2VzOiB1c2VyIGNvZGUgc2hvdWxkIG5vdCByZWx5IG9uIHRoaXMuCi0KLTIwMDMtMTAtMDEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBzcmMvcGFyc2UtZ3JhbS5oIChQRVJDRU5UX05PX0RFRkFVTFRfUFJFQyk6IE5ldyB0b2tlbi4KLQkoZ3JhbW1hcl9kZWNsYXJhdGlvbik6IFVzZSBpdC4KLQkqIHNyYy9zY2FuLWdyYW0ubDogTmV3IHRva2VuICVuby1kZWZhdWx0LXByZWMuCi0JKiB0ZXN0cy9jb25mbGljdHMuYXQ6IFJldmFtcCB0ZXN0cyB0byB1c2UgJW5vLWRlZmF1bHQtcHJlYy4KLQkqIE5FV1MsIGRvYy9iaXNvbi50ZXhpbmZvOiBEb2N1bWVudCB0aGUgYWJvdmUuCi0KLTIwMDMtMTAtMDEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JVkNHIG5vIGxvbmdlciBzdXBwb3J0cyBsb25nX3N0cmFpZ2h0X3BoYXNlLgotCi0JKiBzcmMvdmNnLmMsIHNyYy92Y2cuaDogUmVtb3ZlIHRoZSBoYW5kbGluZyBvZiBsb25nX3N0cmFpZ2h0X3BoYXNlLgotCSogc3JjL3ByaW50X2dyYXBoLmMgKHByaW50X2dyYXBoKTogQWRqdXN0LgotCi0yMDAzLTA5LTMwICBGcmFuayBIZWNrZW5iYWNoICA8ZnJhbmtAZy1uLXUuZGU+Ci0JYW5kIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoRGVjbCBTdW1tYXJ5LCBDb250ZXh0dWFsIFByZWNlZGVuY2UsCi0JVGFibGUgb2YgU3ltYm9scyk6IERvY3VtZW50ICVkZWZhdWx0LXByZWMuCi0JKiBzcmMvcGFyc2UtZ3JhbS55IChQRVJDRU5UX0RFRkFVTFRfUFJFQyk6IE5ldyB0b2tlbi4KLQkoZ3JhbW1hcl9kZWNsYXJhdGlvbik6IFNldCBkZWZhdWx0X3ByZWMgb24gJWRlZmF1bHQtcHJlYy4KLQkqIHNyYy9zY2FuLWdyYW0ubCAoJWRlZmF1bHQtcHJlYyk6IE5ldyB0b2tlbi4KLQkqIHNyYy9yZWFkZXIuaCAoZGVmYXVsdF9wcmVjKTogTmV3IGZsYWcuCi0JKiBzcmMvcmVhZGVyLmM6IExpa2V3aXNlLgotCShwYWNrZ3JhbSk6IEhhbmRsZSBpdC4KLQkqIHRlc3RzL2NvbmZsaWN0cy5hdCAoJWRlZmF1bHQtcHJlYyB3aXRob3V0ICVwcmVjLAotCSVkZWZhdWx0LXByZWMgd2l0aCAlcHJlYywgJWRlZmF1bHQtcHJlYyAxKTogTmV3IHRlc3RzLgotCi0yMDAzLTA5LTMwICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogdGVzdHMvdGVzdHN1aXRlLmF0OiBJbmNsdWRlIGxvY2FsLmF0LCBub3QgaW5wdXQuYXQsIGZpeGluZwotCWEgdHlwbyBpbiB0aGUgMjAwMy0wOC0yNSBwYXRjaC4KLQotMjAwMy0wOC0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvbGFscjEuY2MgKHl5cGFyc2UpIFtfX0dOVUNfX106ICJVc2UiIHl5ZXJyb3JsYWIgdG8gcGFjaWZ5Ci0JR0NDIHdhcm5pbmdzLgotCi0yMDAzLTA4LTI2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogY29uZmlnL2Fubm91bmNlLWdlbiAocHJpbnRfY2hhbmdlbG9nX2RlbHRhcyk6IE5ldXRyYWxpemUgIjwjIiBhcwotCSI8XCMiIHRvIGF2b2lkIG1hZ2ljIGZyb20gR251cyB3aGVuIHBvc3RpbmcgcGFydHMgb2YgdGhpcyBzY3JpcHQuCi0KLTIwMDMtMDgtMjYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2xhbHIxLmNjIChQYXJzZXI6OnJlcG9ydF9zeW50YXhfZXJyb3JfKTogTmV3LCBleHRyYWN0ZWQgZnJvbQotCShQYXJzZXI6OnBhcnNlKTogaGVyZS4KLQlBZGp1c3Q6IG5lcnJzIGFuZCBlcnJzdGF0dXMgaXMgbm93IHJlcGxhY2VkIGJ5Li4uCi0JKFBhcnNlcjo6bmVycnNfLCBQYXJzZXI6OmVycnN0YXR1c18pOiBOZXcuCi0KLTIwMDMtMDgtMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBjb25maWcvYW5ub3VuY2UtZ2VuLCBNYWtlZmlsZS5jZmc6IE5ldy4KLQkqIE1ha2VmaWxlLmFtOiBBZGp1c3QuCi0JKiBHTlVtYWtlZmlsZSwgTWFrZWZpbGUubWFpbnQ6IFVwZGF0ZSBmcm9tIENWUyBBdXRvY29uZiwgYnV0Ci0Ja2VlcGluZyBsb2NhbCBXR0VUIGFuZCBXR0VURkxBR1MgbW9kaWZpY2F0aW9ucyBmcm9tIFBhdWwgRWdnZXJ0LgotCi0yMDAzLTA4LTI1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCVdoZW4gcmVkdWNpbmcgaW5pdGlhbCBlbXB0eSBydWxlcywgQmlzb24gcGFyc2VyIHJlYWQgYW4gaW5pdGlhbAotCWxvY2F0aW9uIHRoYXQgaXMgbm90IGRlZmluZWQuICBUaGlzIHJlc3VsdHMgaW4gZ2FyYmFnZSwgYW5kIHRoYXQKLQlhZmZlY3RzIEJpc29uJ3Mgb3duIHBhcnNlci4gIFRoZXJlZm9yZSB3ZSBuZWVkIChpKSB0byBleHRlbmQgQmlzb24KLQl0byBzdXBwb3J0IGEgbWVhbnMgdG8gaW5pdGlhbGl6ZSB0aGlzIGxvY2F0aW9uLCBhbmQgKGlpKSB0byB1c2UKLQl0aGlzIENWUyBCaXNvbiB0byBmaXggQ1ZTIEJpc29uJ3MgcGFyc2VyLgotCi0JKiBzcmMvcmVhZGVyLmgsIHJlYWRlci5jIChlcGlsb2d1ZV9hdWdtZW50KTogUmVtb3ZlLCByZXBsYWNlCi0Jd2l0aC4uLgotCSogc3JjL211c2NsZV90YWIuaCwgc3JjL211c2NsZV90YWIuYyAobXVzY2xlX2NvZGVfZ3Jvdyk6IHRoaXMuCi0JKiBzcmMvcGFyc2UtZ3JhbS55OiBBZGp1c3QuCi0JKCVpbml0aWFsLWFjdGlvbik6IE5ldy4KLQkoJWVycm9yLXZlcmJvc2UpOiBTaW5jZSB3ZSByZXF1aXJlIENWUyBCaXNvbiwgdGhlcmUgaXMgbm8gcmVhc29uCi0Jbm90IHRvIHVzZSBpdC4KLQkqIHNyYy9zY2FuLWdyYW0ubDogQWRqdXN0LgotCSogc3JjL01ha2VmaWxlLmFtIChZQUNDKTogTmV3LCB0byBtYWtlIHN1cmUgd2UgdXNlIG91ciBvd24gcGFyc2VyLgotCSogZGF0YS95YWNjLmMgKHl5cGFyc2UpOiBVc2UgYjRfaW5pdGlhbF9hY3Rpb24uCi0KLTIwMDMtMDgtMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkb2MvYmlzb24udGV4aW5mbzogRG9uJ3QgcHJvbW90ZSBzdGRvdXQgZm9yIGVycm9yIG1lc3NhZ2VzLgotCi0yMDAzLTA4LTI1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS9sYWxyMS5jYyAoUGFyc2VyOjpyZWR1Y2VfcHJpbnRfKTogUmVtb3ZlIHVudXNlZCB5eWkuCi0JRnJvbSBBbGV4YW5kcmUgRHVyZXQtTHV0ei4KLQotMjAwMy0wOC0yNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlWZXJzaW9uIDEuODc1Yy4KLQotMjAwMy0wOC0yNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvbGFscjEuY2MgKFBhcnNlcjo6c3RhY2tfcHJpbnRfLCBZWV9TVEFDS19QUklOVCk6IE5ldy4KLQlVc2UgdGhlbS4KLQotMjAwMy0wOC0yNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvbGFscjEuY2MgKFBhcnNlcjo6cmVkdWNlX3ByaW50Xyk6IE5ldy4KLQlVc2UgaXQuCi0KLTIwMDMtMDgtMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JSGF2ZSBsYWxyMS5jYyBjYXRjaCB3aXRoIFBhdWwgRWdnZXJ0J3MgcGF0Y2ggdG8gZml4IHRoZSBpbmZpbml0ZQotCWVycm9yIHJlY292ZXJ5IGxvb3BzLiAgVGhpcyBwYXRjaCBpcyBiYXNlZCBvbgotCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDAzLTA2L21zZzAwMDAwLmh0bWw+LgotCUFsc28sIGF1Z21lbnQgdGhlIHNpbWlsYXJpdHkgYmV0d2VlbiBsYWxyMS5jYyBhbmQgeWFjYy5jLgotCU5vdGU6IHRoZSBsb2NhdGlvbnMgb2YgZXJyb3IgcmVjb3ZlcnkgcnVsZXMgYXJlIG5vdCBjb3JyZWN0IHlldC4KLQotCSogZGF0YS9sYWxyMS5jYzogQ29tbWVudCBjaGFuZ2VzIHRvIGF1Z21lbnQgdGhlIHNpbWlsYXJpdHkgYmV0d2VlbgotCWxhbHIxLmNjIGFuZCB5YWNjLmMuCi0JKFlZRVJST1IpOiBHb3RvIHRvIHl5ZXJyb3JsYWIsIG5vdCB5eWVycmxhYjEuCi0JKHl5ZXJybGFiMSk6IFJlbW92ZSwgYnV0IHdoZXJlIGl0IHVzZWQgdG8gYmUgKG5vdyB0aGUgYm90dG9tIHBhcnQgb2YKLQl5eWVycmxhYiksIHdoZW4gaGl0dGluZyBFT0YsIHBvcCB0aGUgd2hvbGUgc3RhY2sgaGVyZSBpbnN0ZWFkIG9mCi0JbWVyZWx5IGZhbGxpbmcgdGhydSB0aGUgZGVmYXVsdCBlcnJvciBoYW5kbGluZyBtZWNoYW5pc20uCi0JKHl5ZXJyb3JsYWIpOiBOZXcgbGFiZWwsIHdpdGggdGhlIG9sZCBjb250ZW50cyBvZiBZWUVSUk9SLAotCXBsdXMgdGhlIGZvbGxvd2luZyBjaGFuZ2U6IHBvcCB0aGUgc3RhY2sgb2YgcmhzIGNvcnJlc3BvbmRpbmcKLQl0byB0aGUgcHJvZHVjdGlvbiB0aGF0IGludm9rZWQgWVlFUlJPUi4gIFRoYXQgaXMgaG93IFlhY2MKLQliZWhhdmVzIChyZXF1aXJlZCBieSBQT1NJWCkuCi0JKiB0ZXN0cy9jYWxjLmF0IChBVF9DSEVDS19DQUxDX0xBTFIxX0NDKTogTm8gbG9uZ2VyIGV4cGVjdGVkIHRvCi0JZmFpbC4KLQotMjAwMy0wOC0yNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlUdW5lIGxvY2FsLmF0IHNvIHRoYXQgcGVvcGxlIGNhbiAiYXV0b200dGUgLWwgYXV0b3Rlc3QgY2FsYy5hdCAtbwotCWNhbGMiIGZvciBpbnN0YW5jZSwgdG8gZXh0cmFjdCBhIHN1YiB0ZXN0IHN1aXRlLgotCi0JKiB0ZXN0cy90ZXN0c3VpdGUuYXQ6IE1vdmUgdGhlIGluaXRpYWxpemF0aW9uLCBBdXRvdGVzdCB2ZXJzaW9uCi0JcmVxdWlyZW1lbnQsIGFuZCBBVF9URVNURUQgaW52b2NhdGlvbiBpbnRvLi4uCi0JKiB0ZXN0cy9sb2NhbC5hdDogaGVyZS4KLQkqIHRlc3RzL3Rlc3RzdWl0ZS5hdDogSW5jbHVkZSBpdCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIEF1dG9jb25mCi0JMi41Ny4KLQkqIHRlc3RzL01ha2VmaWxlLmFtICgkKFRFU1RTVUlURSkpOiBSZXBvcnQgdGhhdCB0aGUgd2FybmluZyBzaG91bGQKLQliZSBpZ25vcmUuCi0KLTIwMDMtMDgtMDQgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JUmV3b3JrIGNvZGUgc2xpZ2h0bHkgdG8gYXZvaWQgZ2NjIC1XdHJhZGl0aW9uYWwgd2FybmluZ3MuCi0JKiBkYXRhL2dsci5jICh5eXVzZXJNZXJnZSk6IFJldHVybiB2b2lkLCBub3QgWVlTVFlQRS4KLQlUaGUgcmV0dXJuZWQgdmFsdWUgaXMgbm93IHN0b3JlZCBpbiAqWVkwLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KLQkqIHNyYy9vdXRwdXQuYyAobWVyZ2Vfb3V0cHV0KTogQWRqdXN0IHRvIHRoZSBhYm92ZSBjaGFuZ2UuCi0KLTIwMDMtMDctMjYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBkYXRhL2dsci5jIChZWUFTU0VSVCk6IE5ldyBtYWNyby4KLQkoeXlmaWxsaW4sIHl5ZG9BY3Rpb24sIHl5Z2xyUmVkdWNlLCB5eXNwbGl0U3RhY2ssCi0JeXlyZXNvbHZlU3RhdGVzLCB5eXByb2Nlc3NPbmVTdGFjayk6Ci0JVXNlIGBZWUFTU0VSVCAoRk9PKTsnIHJhdGhlciB0aGFuIGBpZiAoISAoRk9PKSkgYWJvcnQgKCk7Jy4KLQlEZXJpdmVkIGZyb20gYSBzdWdnZXN0aW9uIGJ5IEZyYW5rIEhlY2tlbmJhY2guCi0KLTIwMDMtMDctMjUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBkYXRhL2dsci5jICh5eWdsclJlZHVjZSk6IERvbid0IHVzZSBDODkgc3RyaW5nIGNvbmNhdGVuYXRpb24sCi0JZm9yIHBvcnRhYmlsaXR5IHRvIEsmUiBDIChhZnRlciBhbnNpMmtuciwgcHJlc3VtYWJseSkuICBTZWUKLQk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwMy0wNi9tc2cwMDA0MS5odG1sPgotCWJ5IEZyYW5rIEhlY2tlbmJhY2gsIHRob3VnaCBJIGhhdmUgb21pdHRlZCB0aGUgc3RydWN0dXJlLWluaXRpYWxpemF0aW9uCi0JcGFydCBvZiBoaXMgZ2xyLWtuci5kaWZmIHBhdGNoIHNpbmNlIEkgcmVjYWxsIHRoYXQgdGhlIFBvcnRhYmxlCi0JQyBDb21waWxlciBkaWRuJ3QgcmVxdWlyZSB0aGF0IGNoYW5nZS4KLQotCUxldCB0aGUgdXNlciBzcGVjaWZ5IGhvdyB0byBhbGxvY2F0ZSBhbmQgZnJlZSBtZW1vcnkuCi0JRGVyaXZlZCBmcm9tIGEgc3VnZ2VzdGlvbiBieSBGcmFuayBIZWNrZW5iYWNoIGluCi0JPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDMtMDYvbXNnMDAwNDEuaHRtbD4uCi0JKiBkYXRhL2dsci5jIChZWUZSRUUsIFlZTUFMTE9DLCBZWVJFQUxMT0MpOiBOZXcgbWFjcm9zLgotCUFsbCB1c2VzIG9mIGZyZWUsIG1hbGxvYywgcmVhbGxvYyBjaGFuZ2VkIHRvIHVzZSB0aGVzZSBtYWNyb3MsCi0JYW5kIHVubmVjZXNzYXJ5IGNhc3RzIHJlbW92ZWQuCi0JKiBkYXRhL3lhY2MuYyAoWVlGUkVFLCBZWU1BTExPQyk6IExpa2V3aXNlLgotCi0yMDAzLTA3LTA2ICBNYXR0aGlhcyBNYW5uICA8TWF0dGhpYXNNYW5uQGdteC5kZT4KLQotCSogZGF0YS9sYWxyMS5jYyAob3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mLCBjb25zdCBQb3NpdGlvbiYpKToKLQl1c2Ugcy5lbXB0eSgpIHJhdGhlciB0aGFuIHMgPT0gIiIgdG8gdGVzdCBmb3IgZW1wdHkgc3RyaW5nOyBzZWUKLQk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwMy0wNy9tc2cwMDAwMy5odG1sPgotCSh0cml2aWFsIGNoYW5nZSkKLQotMjAwMy0wNi0yNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGNvbmZpZy9kZXBjb21wLCBjb25maWcvaW5zdGFsbC1zaDogVXBkYXRlIGZyb20gbWFzdGVycy4KLQotMjAwMy0wNi0yMCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIGRhdGEvZ2xyLmMgKFlZTExPQ19ERUZBVUxUKTogUGFyZW50aGVzaXplIGFyZ3VtZW50cyBhcyBuZWVkZWQsCi0JYW5kIHJldHVybiBwcm9wZXJseSBwYXJlbnRoZXNpemVkIHJlc3VsdC4KLQkqIGRhdGEvbGFsYXIxLmNjIChZWUxMT0NfREVGQVVMVCk6IExpa2V3aXNlLgotCSogZGF0YS95YWNjLmMgKFlZTExPQ19ERUZBVUxUKTogTGlrZXdpc2UuCi0JUmVtb3ZlIHVubmVjZXNzYXJ5IHBhcmVudGhlc2VzIGZyb20gdXNlcy4KLQkqIGRvYy9iaXNvbi50ZXhpbmZvIChMb2NhdGlvbiBEZWZhdWx0IEFjdGlvbik6IERlc2NyaWJlIHRoZQotCWNvbnZlbnRpb25zIGZvciBwYXJlbnRoZXNlcy4KLQotMjAwMy0wNi0xOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIGRhdGEvZ2xyLmMgKHl5cmVtb3ZlRGVsZXRlcywgeXlfcmVkdWNlX3ByaW50LCB5eWdsclJlZHVjZSwKLQl5eXJlcG9ydFRyZWUpOiBEbyBub3QgYXNzdW1lIHRoYXQgc2l6ZV90IGlzIHRoZSBzYW1lIHdpZHRoIGFzIGludCwKLQl3aGVuIHByaW50aW5nIHNpemVzLiAgUHJpbnQgc2l6ZXMgdXNpbmcgYW4gdW5zaWduZWQgZm9ybWF0LgotCVByb2JsZW0gcmVwb3J0ZWQgYnkgRnJhbmsgSGVja2VuYmFjaCBpbgotCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDAzLTA2L21zZzAwMDM1Lmh0bWw+LgotCi0JUG9ydCB0byBGb3J0ZSBEZXZlbG9wZXIgNyBDIGNvbXBpbGVyLgotCSogZGF0YS9nbHIuYyAoc3RydWN0IFlZTFRZUEUpOiBJZiBsb2NhdGlvbnMgYXJlIG5vdCBiZWluZyB1c2VkLAotCWRlY2xhcmUgYSBzaW5nbGUgZHVtbXkgbWVtYmVyLCBhcyBlbXB0eSBzdHJ1Y3RzIGRvIG5vdCBjb25mb3JtCi0JdG8gdGhlIEMgc3RhbmRhcmQuCi0JKFlZRVJST1IsIFlZQkFDS1VQKTogRG8gbm90IHVzZSAiZG8geyAuLi47IHJldHVybiBmb287IH0gd2hpbGUgKDApIjsKLQl0aGUgRm9ydGUgRGV2ZWxvcGVyIDcgQyBjb21waWxlciBjb21wbGFpbnMgdGhhdCBlbmQtb2YtbG9vcAotCWNvZGUgaXMgbm90IHJlYWNoZWQuCi0KLTIwMDMtMDYtMTcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBsaWIvbGliaWJlcnR5LmggKFBBUkFNUyk6IFNwZWxsIGFyZ3VtZW50IGFzIEFyZ3MsIG5vdCBhcyBYLCB0bwotCWF2b2lkIHdhcm5pbmdzIGZyb20gcGlja3kgY29tcGlsZXJzIGFib3V0IHJlZGVmaW5pdGlvbiBvZiBQQVJBTVMuCi0KLTIwMDMtMDYtMTcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JVmVyc2lvbiAxLjg3NWIuCi0KLQkqIE5FV1M6IERvY3VtZW50IDEuODc1Yi4KLQotCSogbGliL2JiaXRzZXQuaDogRG8gbm90IGluY2x1ZGUgY29uZmlnLmg7IHRoYXQncyB0aGUgaW5jbHVkZXIncyBqb2IuCi0JRG8gbm90IGluY2x1ZGUgPHN5cy90eXBlcy5oPjsgc2hvdWxkbid0IGJlIG5lZWRlZCBvbiBhIEM4OSBob3N0LgotCSogbGliL2JpdHNldC5oIChiaXRzZXRfY29tcGF0aWJsZV9wKTogSW5kZW50IGFzIHBlciBHTlUgc3RhbmRhcmQuCi0JRG9uJ3QgdXNlICdpbmRleCcgaW4gY29tbWVudHMsIGFzIGl0J3MgYSBidWlsdGluIGZuIG9uIHNvbWUgaG9zdHMuCi0JKiBsaWIvYml0c2V0X3N0YXRzLmM6IEluY2x1ZGUgZ2V0dGV4dC5oIHVuY29uZGl0aW9uYWxseSwgYXMKLQlwZXIgcmVjZW50IGdldHRleHQgbWFudWFsJ3Mgc3VnZ2VzdGlvbi4KLQkqIGxpYi9lYml0c2V0LmMgKGViaXRzZXRfcmVzaXplLCBlYml0c2V0X3VudXNlZF9jbGVhcik6Ci0JVXNlIHByb3RvdHlwZXMsIG5vdCBvbGQtc3R5bGUgZGVmaW5pdGlvbnMuCi0JKiBsaWIvbGJpdHNldC5jIChsYml0c2V0X3VudXNlZF9jbGVhcik6IExpa2V3aXNlLgotCSogbGliL3ZiaXRzZXQuYyAodmJpdHNldF9yZXNpemUsIHZiaXRzZXRfb25lcywgdmJpdHNldF96ZXJvLAotCXZiaXRzZXRfZW1wdHlfcCwgdmJpdHNldF9jb3B5MSwgdmJpdHNldF9ub3QsIHZiaXRzZXRfZXF1YWxfcCwKLQl2Yml0c2V0X3N1YnNldF9wLCB2Yml0c2V0X2Rpc2pvaW50X3AsIHZiaXRzZXRfYW5kLCB2Yml0c2V0X2FuZF9jbXAsCi0JdmJpdHNldF9hbmRuLCB2Yml0c2V0X2FuZG5fY21wLCB2Yml0c2V0X29yLCB2Yml0c2V0X29yX2NtcCwKLQl2Yml0c2V0X3hvciwgdmJpdHNldF94b3JfY21wLCB2Yml0c2V0X2FuZF9vciwgdmJpdHNldF9hbmRfb3JfY21wLAotCXZiaXRzZXRfYW5kbl9vciwgdmJpdHNldF9hbmRuX29yX2NtcCwgdmJpdHNldF9vcl9hbmQsCi0JdmJpdHNldF9vcl9hbmRfY21wLCB2Yml0c2V0X2NvcHkpOiBMaWtld2lzZS4KLQotCSogbGliL2xpYmliZXJ0eS5oOiBEbyBub3QgaW5jbHVkZSBjb25maWcuaDsgdGhhdCdzIHRoZSBpbmNsdWRlcidzIGpvYi4KLQlEbyBub3QgaW5jbHVkZSA8c3RkbGliLmg+LgotCShQQVJBTVMpOiBEZWZpbmUgdW5jb25kaXRpb25hbGx5IGZvciBDODkuCi0JKEFUVFJJQlVURV9OT1JFVFVSTik6IFJlbW92ZS4KLQkoQVRUUklCVVRFX1VOVVNFRCk6IERlZmluZSB1bmNvbmRpdGlvbmFsbHkuCi0KLQlVcGdyYWRlIHRvIDIwMDMtMDYtMDggbGliYml0c2V0LCBzdWJtaXR0ZWQgYnkgTWljaGFlbCBIYXllcyBpbjoKLQk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwMy0wNi9tc2cwMDAwNS5odG1sPgotCSogbGliL01ha2VmaWxlLmFtIChiaXRzZXRzX3NvdXJjZXMpOiBBZGQgdmJpdHNldC5jLCB2Yml0c2V0LmguCi0JKiBsaWIvdmJpdHNldC5jLCBsaWIvdmJpdHNldC5oOiBOZXcgZmlsZXMuCi0JKiBsaWIvYWJpdHNldC5jLCBsaWIvYmJpdHNldC5oLCBsaWIvYml0c2V0LmMsIGxpYi9iaXRzZXQuaCwKLQlsaWIvYml0c2V0X3N0YXRzLmMsIGxpYi9lYml0c2V0LmMsIGxpYi9sYml0c2V0LmM6IEltcG9ydAotCWZyb20gbGliYml0c2V0LgotCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoSG93IENhbiBJIFJlc2V0IHRoZSBQYXJzZXIpOiBSZW5hbWVkIGZyb20KLQlgSG93IENhbiBJIFJlc2V0IEBjb2Rle3l5cGFyc2V9Jywgc2luY2UgdGV4aW5mbyBkb2VzIG5vdCBhbGxvdwotCWFyYml0cmFyeSBAIGluIG5vZGUgbmFtZXMuCi0KLQkqIG00L01ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIHRoZSBmb2xsb3dpbmcgZmlsZXMsIHdoaWNoCi0Jc2hvdWxkbid0IGJlIG5lZWRlZCBhY2NvcmRpbmcgdG8gdGhlIGdldHRleHQgMC4xMi4xIGRvY3VtZW50YXRpb24KLQlidXQgd2hpY2ggc2VlbSB0byBiZSBuZWVkZWQgYW55d2F5OiBjb2Rlc2V0Lm00IGdsaWJjMjEubTQKLQlpbnRkaXYwLm00IGludHR5cGVzLXByaS5tNCBpbnR0eXBlcy5tNCBpbnR0eXBlc19oLm00IGlzYy1wb3NpeC5tNAotCWxjbWVzc2FnZS5tNCBubHMubTQgcG8ubTQgc3RkaW50X2gubTQgdWludG1heF90Lm00IHVsb25nbG9uZy5tNC4KLQkqIHBvL01ha2VmaWxlLmluLmluOiBVcGdyYWRlIHRvIGdldHRleHQgMC4xMi4xIHZlcnNpb24uCi0KLQkqIGxpYi8uY3ZzaWdub3JlOiBBZGQgc3RkYm9vbC5oLgotCSogbTQvLmN2c2lnbm9yZTogQWRkIG5scy5tNCwgcG8ubTQuCi0KLQlVcGdyYWRlIHRvIENWUyBnbnVsaWIuCi0JKiBzdGRib29sXy5oOiBGaWxlIHJlbmFtZWQgZnJvbSBzdGRib29sLmguaW4uCi0JKiBjb25maWd1cmUuYWMgKEFNX1NUREJPT0xfSCk6IEludm9rZSB0aGlzIGluc3RlYWQgb2YKLQlBQ19IRUFERVJfU1REQk9PTC4KLQkoQU1fR05VX0dFVFRFWFQpOiBQdXQgYnJhY2tldHMgYXJvdW5kIGFyZ3MsIGFzIGxhdGVzdCBtYW51YWwgc3VnZ2VzdHMuCi0JKEFNX0dOVV9HRVRURVhUX1ZFUlNJT04pOiBVcGRhdGUgdG8gMC4xMi4xLgotCSogbGliL01ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIHN0ZGJvb2xfLmguCi0JKE1PU1RMWUNMRUFORklMRVMpOiBOZXcgdmFyLgotCSgkKGxpYmJpc29uX2FfT0JKRUNUUykpOiBEZXBlbmQgb24gJChTVERCT09MX0gpLgotCShzdGRib29sLmgpOiBOZXcgcnVsZS4KLQkqIGxpYi9kaXJuYW1lLmMsIGxpYi9kaXJuYW1lLmgsIGxpYi9oYXNoLmMsIGxpYi9oYXNoLmgsCi0JbGliL21hbGxvYy5jLCBsaWIvb2JzdGFjay5oLCBsaWIvcXVvdGUuYywgbGliL3JlYWxsb2MuYywKLQlsaWIvc3RyY2FzZWNtcC5jLCBsaWIveGFsbG9jLmgsIG00L2FsbG9jYS5tNCwgbTQvb25jZW9ubHkubTQsCi0JbTQvcXVvdGUubTQ6IFVwZ3JhZGUgdG8gdG9kYXkncyBnbnVsaWIuCi0KLQkqIHRlc3RzL2NhbGMuYXQgKEFUX0NIRUNLX0NBTEMpOiBOZXcgb3B0aW9uIEVYUEVDVEVELVRPLUZBSUwuCi0JKEFUX0NIRUNLX0NBTENfTEFMUjFfQ0MpOiBVc2UgaXQsIHNpbmNlIHRoZSBDKysgTEFMUiBwYXJzZXIgZmFpbHMKLQl0aGUgdGVzdHMgcmlnaHQgbm93LgotCSogdGVzdHMvY3h4LXR5cGUuYXQgKF9BVF9URVNUX0dMUl9DWFhUWVBFUyk6IEVuc3VyZSB5eWxleCBhbmQKLQl5eWVycm9yIGFyZSBkZWNsYXJlZCBiZWZvcmUgdXNlOyBDOTkgcmVxdWlyZXMgdGhpcy4KLQotMjAwMy0wNi0wOSAgUGF1bCBIaWxmaW5nZXIgIDxIaWxmaW5nZXJAQ1MuQmVya2VsZXkuRURVPgotCi0JKiBkYXRhL2dsci5jIChZWUVSUk9SKTogVXBkYXRlIGRlZmluaXRpb24gdG8gcmVzZXQgeXllcnJTdGF0ZSB0byAwCi0JZmlyc3QuCi0JKHl5cmVjb3ZlclN5bnRheEVycm9yKTogQ29ycmVjdCB0aGUgbG9naWMgZm9yIHNldHRpbmcgYW5kIHRlc3RpbmcKLQl5eWVyclN0YXRlLgotCUNvcnJlY3QgY29tbWVudCBvbiBoYW5kbGluZyBFT0YuCi0JQWxsb3cgc3RhdGVzIHdpdGggb25seSBhIGRlZmF1bHQgcmVkdWN0aW9uLCByYXRoZXIgdGhhbiBmYWlsaW5nCi0JKEkgY2FuJ3QgcXVpdGUgcmVjb25zdHJ1Y3Qgd2h5IHRoZXNlIHdlcmUgbm90IGFsbG93ZWQgYmVmb3JlKS4KLQotCUZpeGVzIHRvIGF2b2lkIHByb2JsZW0gdGhhdCAkLU4gcnVsZXMgaW4gR0xSIHBhcnNlcnMgY2FuIGNhdXNlCi0JYnVmZmVyIG92ZXJydW5zLCBjb3JydXB0aW5nIHN0YXRlLgotCi0JKiBzcmMvb3V0cHV0LmMgKHByZXBhcmVfcnVsZXMpOiBPdXRwdXQgbWF4X2xlZnRfc2VtYW50aWNfY29udGV4dAotCWRlZmluaXRpb24uCi0JKiBzcmMvcmVhZGVyLmggKG1heF9sZWZ0X3NlbWFudGljX2NvbnRleHQpOiBOZXcgdmFyaWFibGUgZGVjbGFyYXRpb24uCi0JKiBzcmMvc2Nhbi1ncmFtLmwgKG1heF9sZWZ0X3NlbWFudGljX2NvbnRleHQpOiBEZWZpbmUuCi0JKGhhbmRsZV9hY3Rpb25fZG9sbGFyKTogVXBkYXRlIG1heF9sZWZ0X3NlbWFudGljX2NvbnRleHQuCi0JKiBkYXRhL2dsci5jIChZWU1BWExFRlQpOiBOZXcgZGVmaW5pdGlvbi4KLQkoeXlkb0FjdGlvbik6IEluY3JlYXNlIHNpemUgb2YgeXlyaHNWYWxzIGJ5IFlZTUFYTEVGVC4KLQkoeXlyZXNvbHZlQWN0aW9uKTogRGl0dG8uCi0KLQlGaXhlcyB0byBwcm9ibGVtcyB3aXRoIGxvY2F0aW9uIGhhbmRsaW5nIGluIEdMUiBwYXJzZXJzIHJlcG9ydGVkIGJ5Ci0JRnJhbmsgSGVja2VuYmFjaCAoMjAwMy8wNi8wNSkuCi0KLQkqIGRhdGEvZ2xyLmMgKFlZTFRZUEUpOiBNYWtlIHRyaXZpYWwgaWYgbG9jYXRpb25zIG5vdCB1c2VkLgotCShZWVJIU0xPQyk6IEFkZCBwYXJlbnRoZXNlcywgYW5kIGRlZmluZSBvbmx5IGlmIGxvY2F0aW9ucyB1c2VkLgotCShZWUxMT0NfREVGQVVMVCk6IEFkZCBwYXJlbnRoZXNlcywgYW5kIGdpdmUgdHJpdmlhbCBkZWZpbml0aW9uIGlmCi0JbG9jYXRpb25zIG5vdCB1c2VkLgotCSh5eXVzZXJBY3Rpb24pOiBVc2UgWVlMTE9DX0RFRkFVTFQgdG8gc2V0ICp5eWxvY3AuCi0JKHl5ZG9BY3Rpb24pOiBSZW1vdmUgcmVkdW5kYW50IGluaXRpYWxpemF0aW9uIG9mICp5eXZhbHAgYW5kICp5eWxvY3AuCi0KLQkqIHRlc3RzL2N4eC10eXBlLmF0OiBFeGVyY2lzZSBsb2NhdGlvbiBpbmZvcm1hdGlvbjsgdXBkYXRlIHRlc3RzCi0JdG8gZGlmZmVyZW50aWF0ZSBvdXRwdXQgd2l0aCBhbmQgd2l0aG91dCBsb2NhdGlvbnMuCi0JUmVtb3ZlIGZvcndhcmQgZGVjbGFyYXRpb25zIG9mIHl5bGV4IGFuZCB5eWVycm9yLS0tY2F1c2VkIGVycm9ycwotCWJlY2F1c2UgZGVmYXVsdCBZWUxUWVBFIG5vdCB5ZXQgZGVmaW5lZC4KLQlDaGFuZ2Ugc2VtYW50aWMgYWN0aW9ucyB0byBjb21wdXRlIHN0cmluZ3MsIHJhdGhlciB0aGFuIHByaW50aW5nCi0JdGhlbSBkaXJlY3RseSAodG8gdGVzdCBwcm9wZXIgcGFzc2luZyBvZiBzZW1hbnRpY3MgdmFsdWVzKS4gIENoYW5nZQotCW91dHB1dCB0byBwcmVmaXggbm90YXRpb24gYW5kIHVwZGF0ZSB0ZXN0IGRhdGEgYW5kIGV4cGVjdGVkIHJlc3VsdHMuCi0JKHl5bGV4KTogVHJhY2sgbG9jYXRpb25zLgotCShzdG10TWVyZ2UpOiBSZXR1cm4gdmFsdWUgcmF0aGVyIHRoYW4gcHJpbnRpbmcsIGFuZCBpbmNsdWRlIGFyZ3VtZW50cwotCWluIHZhbHVlLgotCi0yMDAzLTA2LTAzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCUF2b2lkIHdhcm5pbmdzIGdlbmVyYXRlZCBieSBHQ0MgMi45NS40IHdoZW4gQmlzb24gaXMKLQljb25maWd1cmVkIHdpdGggLS1lbmFibGUtZ2NjLXdhcm5pbmdzLgotCSogZGF0YS9sYWxyMS5jYyAoeXk6Ol1iNF9wYXJzZXJfY2xhc3NfbmFtZVs6OnBhcnNlLAotCXl5OjpdYjRfcGFyc2VyX2NsYXNzX25hbWVbOjp0cmFuc2xhdGVfLAotCXl5OjpTdGFjazo6b3BlcmF0b3JbXSAodW5zaWduZWQpLAotCXl5OjpTdGFjazo6b3BlcmF0b3JbXSAodW5zaWduZWQpIGNvbnN0LAotCXl5OjpTbGljZTo6b3BlcmF0b3JbXSAodW5zaWduZWQpLAotCXl5OjpTbGljZTo6b3BlcmF0b3JbXSAodW5zaWduZWQpIGNvbnN0KToKLQlSZW5hbWUgbG9jYWwgdmFycyB0byBhdm9pZCB3YXJuaW5ncy4KLQkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0IChJbXByb3BlciBoYW5kbGluZyBvZiBlbWJlZGRlZCBhY3Rpb25zCi0JYW5kICQtTiBpbiBHTFIgcGFyc2Vycyk6IFJlbW92ZSB1bnVzZWQgbG9jYWwgdmFyaWFibGUgZnJvbSB5eWxleC4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKF9BVF9EQVRBX0RBTkNFUl9ZKTogRGVjbGFyZSB5eWxleCB0byB0YWtlCi0JKHZvaWQpIGFzIGFyZyB3aGVuIG5vdCBwdXJlLCBzaW5jZSB3ZSBub3cgYXNzdW1lIEM4OSB3aGVuIGJ1aWxkaW5nCi0JQmlzb24uICBQYWNpZnkgR0NDIGJ5IHVzaW5nIHBhcmFtZXRlci4KLQotMjAwMy0wNi0wMiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIGRhdGEvbGFscjEuY2MgKHl5OjpQb3NpdGlvbjo6bGluZXMsIHl5OjpQb3NpdGlvbjo6Y29sdW1ucywKLQl5eTo6TG9jYXRpb246OmxpbmVzLCB5eTo6TG9jYXRpb246OmNvbHVtbnMpOiBSZW5hbWUgYXJndW1lbnRzCi0JdG8gYXZvaWQgc2hhZG93aW5nOyB0aGlzIHJlbW92ZXMgYSB3YXJuaW5nIGdlbmVyYXRlZCBieSBHQ0MgMy4zLgotCi0yMDAzLTA2LTAxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCURvbid0IHBhc3MgQy1vbmx5IHdhcm5pbmcgb3B0aW5zIChlLmcuLCAtV21pc3NpbmctZGVjbGFyYXRpb25zKQotCXRvIGcrKywgYXMgR0NDIDMuMyBjb21wbGFpbnMgaWYgeW91IGRvIGl0LgotCSogY29uZmlndXJlLmFjIChXQVJOSU5HX0NYWEZMQUdTKTogTmV3IHN1YnN0LiAgU2V0IGl0IHRvCi0JZXZlcnl0aGluZyB0aGF0IFdBUk5JTkdfQ0ZMQUdTIGhhcywgZXhjZXB0IG9taXQgd2FybmluZ3MKLQlub3Qgc3VpdGFibGUgZm9yIEMrKy4KLQkoQUNfUFJPR19DWFgpOiBVc2UgdGhpcyBpbnN0ZWFkIG9mIEFDX0NIRUNLX1BST0dTKFtDWFhdLCBbZysrXSkuCi0JKiB0ZXN0cy9hdGxvY2FsLmluIChDWFhGTEFHUyk6IE5ldyB2YXIuCi0JKiB0ZXN0cy9sb2NhbC5hdCAoQVRfQ09NUElMRV9DWFgpOiBVc2UgaXQgaW5zdGVhZCBvZiBDRkxBR1MuCi0KLQlGaXggYSBHTFIgcGFyc2VyIGJ1ZyBJIHJlcG9ydGVkIGluIEZlYnJ1YXJ5OyBzZWUKLQk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwMy0wMi9tc2cwMDAwOC5odG1sPi4KLQlUaGUgcHJvYmxlbSB3YXMgdGhhdCBHTFIgcGFyc2VycyBkaWQgbm90IGNvbmZvcm0gdG8gdGhlIEMgc3RhbmRhcmQsCi0JYmVjYXVzZSBhY3Rpb25zIGxpa2UgeyAkMSA9ICQyICsgJDM7IH0gZXhwYW5kZWQgdG8gZXhwcmVzc2lvbnMKLQl0aGF0IGludm9rZWQgWVlGSUxMIGluIHNlcGFyYXRlIHN1YmV4cHJlc3Npb25zLCBhbmQgWVlGSUxMIGFzc2lnbmVkCi0JdG8gYSBsb2NhbCB2YXJpYWJsZS4gIFRoZSBDIHN0YW5kYXJkIHNheXMgdGhhdCBleHByZXNzaW9ucwotCWxpa2UgKHZhciA9IGYgKCkpICsgKHZhciA9IGYgKCkpIGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yLgotCUFub3RoZXIgcHJvYmxlbSB3YXMgdGhhdCBHQ0Mgc29tZXRpbWVzIGlzc3VlcyB3YXJuaW5ncyB0aGF0Ci0JeXlmaWxsIGFuZCBpdHMgcGFyYW1ldGVycyBhcmUgdW51c2VkLgotCi0JKiBkYXRhL2dsci5jICh5eWZpbGxpbik6IFJlbmFtZWQgZnJvbSB0aGUgb2xkIHl5ZmlsbC4gIE1hcmsKLQlhcyBwb3NzaWJseSB1bnVzZWQuCi0JKHl5ZmlsbCk6IE5ldyBmdW5jdGlvbi4KLQkoWVlGSUxMKTogVXNlIGl0LgotCSh5eXVzZXJBY3Rpb24pOiBDaGFuZ2UgdHlwZSBvZiB5eW5vcm1hbCB0byBib29sLCBzbyB0aGF0IGl0IG1hdGNoZXMKLQl0aGUgbmV3IHl5ZmlsbCBzaWduYXR1cmUuICBNYXJrIGl0IGFzIHBvc3NpYmx5IHVudXNlZC4KLQotCi0JRm9sbG93IHVwIG9uIGEgYnVnIEkgcmVwb3J0ZWQgaW4gRmVicnVhcnksIHdoZXJlIGEgQmlzb24tZ2VuZXJhdGVkCi0JcGFyc2VyIGNhbiBsb29wLiAgUHJvdmlkZSBhIHRlc3QgY2FzZSBhbmQgYSBmaXggZm9yIHlhY2MuYy4gIEkKLQlkb24ndCBoYXZlIGEgZml4IGZvciBsYWxyMS5jYyBvciBmb3IgZ2xyLmMsIHVuZm9ydHVuYXRlbHkuCi0JVGhlIG9yaWdpbmFsIGJ1ZyByZXBvcnQgaXMgaW46Ci0JPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDMtMDIvbXNnMDAwNDQuaHRtbD4KLQotCSogZGF0YS95YWNjLmMgKFlZRVJST1IpOiBOb3cganVzdCAnZ290byB5eWVycm9ybGFiJywgc2luY2UgdGhlCi0JbWFjcm8ncyBzaXplIHdhcyBiZWNvbWluZyB1bndpZWxkeS4KLQkoeXllcnJsYWIpOiBEbyBub3QgZGlzY2FyZCBhbiBlbXB0eSBsb29rYWhlYWQgc3ltYm9sLCBhcyB0aGlzCi0JbWlnaHQgZGVzdHJveSBnYXJiYWdlLgotCSh5eWVycm9ybGFiKTogTmV3IGxhYmVsLCB3aXRoIHRoZSBvbGQgY29udGVudHMgb2YgWVlFUlJPUiwKLQlwbHVzIHRoZSBmb2xsb3dpbmcgY2hhbmdlOiBwb3AgdGhlIHN0YWNrIG9mIHJocyBjb3JyZXNwb25kaW5nCi0JdG8gdGhlIHByb2R1Y3Rpb24gdGhhdCBpbnZva2VkIFlZRVJST1IuICBUaGF0IGlzIGhvdyBZYWNjCi0JYmVoYXZlcywgYW5kIFBPU0lYIHJlcXVpcmVzIHRoaXMgYmVoYXZpb3IuCi0JKHl5ZXJybGFiMSk6IFVzZSBZWVBPUFNUQUNLIGluc3RlYWQgb2YgaXRzIGRlZmluaWVucy4KLQkqIHRlc3RzL2NhbGMuYXQgKF9BVF9EQVRBX0NBTENfWSk6IEluY2x1ZGUgdW5pc3RkLmggaWYgYXZhaWxhYmxlLgotCURlZmluZSAnYWxhcm0nIHRvIGRvIG5vdGhpbmcgaWYgdW5pc3RkLmggaXMgbm90IGF2YWlsYWJsZS4KLQlBZGQgYSBuZXcgcnVsZSAiZXhwOiAnLScgZXJyb3I7IiB0byB0ZXN0IHRoZSBhYm92ZSBjaGFuZ2UgdG8KLQlkYXRhL3lhY2MuYy4gIFVzZSAnYWxhcm0nIHRvIGFib3J0IGFueSB0ZXN0IHRha2luZyBsb25nZXIgdGhhbgotCTEwIHNlY29uZHMsIGFzIGl0J3MgcHJvYmFibHkgbG9vcGluZy4KLQkoQVRfQ0hFQ0tfQ0FMQyk6IFRlc3QgcmVjb3ZlcnkgZnJvbSBlcnJvciBpbiBuZXcgZ3JhbW1hciBydWxlLgotCUFsc28sIHRoZSBuZXcgeWFjYy5jIGdlbmVyYXRlcyB0d28gZmV3ZXIgZGlhZ25vc3RpY3MgZm9yIGFuCi0JZXhpc3RpbmcgdGVzdC4KLQotMjAwMy0wNS0yNCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIGRhdGEvZ2xyLmMgKFlZU1RBQ0tFWFBBTkRBQkxFKTogRG8gbm90IGV2YWx1YXRlCi0JWVlTVFlQRV9JU19UUklWSUFMIG9yIFlZU1RZUEVfSVNfVFJJVklBTCB1bmxlc3MgdGhleSBhcmUgZGVmaW5lZC4KLQlUaGlzIGZpeGVzIGEgcHJvYmxlbSByZXBvcnRlZCBieSBKb2huIEJvd21hbiB3aGVuIHRoZSBDb21wYXEvSFAKLQlBbHBoYSBjeHggY29tcGlsZXIgaGFwcHkgKGUuZy4gdXNpbmcgY3h4IC1EX19VU0VfU1REX0lPU1RSRUFNCi0JLWFuc2kgLVdhbGwgLWdhbGwpLgotCSogZGF0YS95YWNjLmMgKHVuaW9uIHl5YWxsb2MpOiBMaWtld2lzZS4KLQkoWVlDT1BZKTogRG8gbm90IGV2YWx1YXRlIF9fR05VQ19fIHVubGVzcyBpdCBpcyBkZWZpbmVkLgotCi0JU3dpdGNoIGZyb20gJ2ludCcgdG8gJ2Jvb2wnIHdoZXJlIHRoYXQgbWFrZXMgc2Vuc2UuCi0KLQkqIGxpYi9hYml0c2V0LmMgKGFiaXRzZXRfdGVzdCwgYWJpdHNldF9lbXB0eV9wLCBhYml0c2V0X2VxdWFsX3AsCi0JYWJpdHNldF9zdWJzZXRfcCwgYWJpdHNldF9kaXNqb2ludF9wLCBhYml0c2V0X2FuZF9jbXAsCi0JYWJpdHNldF9hbmRuX2NtcCwgYWJpdHNldF9vcl9jbXAsIGFiaXRzZXRfeG9yX2NtcCwgYWJpdHNldF9hbmRfb3IsCi0JYWJpdHNldF9hbmRfb3JfY21wLCBhYml0c2V0X2FuZG5fb3JfY21wLCBhYml0c2V0X29yX2FuZF9jbXApOgotCVJldHVybiBvciBhY2NlcHQgYm9vbCwgbm90IGludC4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCi0JKiBsaWIvYmJpdHNldC5oOiAoYml0c2V0X3RvZ2dsZV8sIGJpdHNldF9jb3B5XywgYml0c2V0X2FuZF9vcl9jbXBfLAotCWJpdHNldF9hbmRuX29yX2NtcF8sIGJpdHNldF9vcl9hbmRfY21wXyk6IExpa2V3aXNlLgotCSogbGliL2JpdHNldC5jIChiaXRzZXRfb25seV9zZXRfcCwgYml0c2V0X3ByaW50LCBiaXRzZXRfdG9nZ2xlXywKLQliaXRzZXRfY29weV8sIGJpdHNldF9vcDRfY21wLCBiaXRzZXRfYW5kX29yX2NtcF8sIGJpdHNldF9hbmRuX29yX2NtcF8sCi0JYml0c2V0X29yX2FuZF9jbXBfKTogTGlrZXdpc2UuCi0JKiBsaWIvYml0c2V0LmggKGJpdHNldF90ZXN0LCBiaXRzZXRfb25seV9zZXRfcCk6IExpa2V3aXNlLgotCSogbGliL2JpdHNldF9zdGF0cy5jIChiaXRzZXRfc3RhdHNfcHJpbnQsIGJpdHNldF9zdGF0c190b2dnbGUsCi0JYml0c2V0X3N0YXRzX3Rlc3QsIGJpdHNldF9zdGF0c19lbXB0eV9wLCBiaXRzZXRfc3RhdHNfZGlzam9pbnRfcCwKLQliaXRzZXRfc3RhdHNfZXF1YWxfcCwgYml0c2V0X3N0YXRzX3N1YnNldF9wLCBiaXRzZXRfc3RhdHNfYW5kX2NtcCwKLQliaXRzZXRfc3RhdHNfYW5kbl9jbXAsIGJpdHNldF9zdGF0c19vcl9jbXAsIGJpdHNldF9zdGF0c194b3JfY21wLAotCWJpdHNldF9zdGF0c19hbmRfb3JfY21wLCBiaXRzZXRfc3RhdHNfYW5kbl9vcl9jbXAsCi0JYml0c2V0X3N0YXRzX29yX2FuZF9jbXApOiBMaWtld2lzZS4KLQkqIGxpYi9lYml0c2V0LmMgKGViaXRzZXRfZWx0X3plcm9fcCwgZWJpdHNldF9lcXVhbF9wLCBlYml0c2V0X2NvcHlfY21wLAotCWViaXRzZXRfdGVzdCwgZWJpdHNldF9lbXB0eV9wLCBlYml0c2V0X3N1YnNldF9wLCBlYml0c2V0X2Rpc2pvaW50X3AsCi0JZWJpdHNldF9vcDNfY21wLCBlYml0c2V0X2FuZF9jbXAsIGViaXRzZXRfYW5kbl9jbXAsIGViaXRzZXRfb3JfY21wLAotCWViaXRzZXRfeG9yX2NtcCk6IExpa2V3aXNlLgotCSogbGliL2xiaXRzZXQuYyAobGJpdHNldF9lbHRfemVyb19wLCBsYml0c2V0X2VxdWFsX3AsIGxiaXRzZXRfY29weV9jbXAsCi0JbGJpdHNldF90ZXN0LCBsYml0c2V0X2VtcHR5X3AsIGxiaXRzZXRfc3Vic2V0X3AsIGxiaXRzZXRfZGlzam9pbnRfcCwKLQlsYml0c2V0X29wM19jbXAsIGxiaXRzZXRfYW5kX2NtcCwgbGJpdHNldF9hbmRuX2NtcCwgbGJpdHNldF9vcl9jbXAsCi0JbGJpdHNldF94b3JfY21wKTogTGlrZXdpc2UuCi0JKiBsaWIvYmJpdHNldC5oOiBJbmNsdWRlIDxzdGRib29sLmg+LgotCShzdHJ1Y3QgYml0c2V0X3Z0YWJsZSk6IFRoZSBmb2xsb3dpbmcgbWVtYmVycyBub3cgcmV0dXJuIGJvb2wsIG5vdAotCWludDogdG9nZ2xlLCB0ZXN0LCBlbXB0eV9wLCBkaXNqb2ludF9wLCBlcXVhbF9wLCBzdWJzZXRfcCwKLQlhbmRfY21wLCBhbmRuX2NtcCwgb3JfY21wLCB4b3JfY21wLCBhbmRfb3JfY21wLCBhbmRuX29yX2NtcCwKLQlvcl9hbmRfY21wKS4KLQkqIHNyYy9jb25mbGljdHMuYyAoY291bnRfcnJfY29uZmxpY3RzKTogTGlrZXdpc2UuCi0JKiBsaWIvYml0c2V0X3N0YXRzLmggKGJpdHNldF9zdGF0c19lbmFibGVkKTogTm93IGJvb2wsIG5vdCBpbnQuCi0JQWxsIHVzZXMgY2hhbmdlZC4KLQkqIGxpYi9lYml0c2V0LmMgKGViaXRzZXRfb2JzdGFja19pbml0KTogTGlrZXdpc2UuCi0JKiBsaWIvbGJpdHNldC5jIChsYml0c2V0X29ic3RhY2tfaW5pdCk6IExpa2V3aXNlLgotCSogc3JjL2dldGFyZ3MuYyAoZGVidWdfZmxhZywgZGVmaW5lc19mbGFnLCBsb2NhdGlvbnNfZmxhZywKLQlub19saW5lc19mbGFnLCBub19wYXJzZXJfZmxhZywgdG9rZW5fdGFibGVfZmxhZywgeWFjY19mbGFnLAotCWdyYXBoX2ZsYWcpOiBMaWtld2lzZS4KLQkqIHNyYy9nZXRhcmdzLmggKGRlYnVnX2ZsYWcsIGRlZmluZXNfZmxhZywgbG9jYXRpb25zX2ZsYWcsCi0Jbm9fbGluZXNfZmxhZywgbm9fcGFyc2VyX2ZsYWcsIHRva2VuX3RhYmxlX2ZsYWcsIHlhY2NfZmxhZywKLQlncmFwaF9mbGFnKTogTGlrZXdpc2UuCi0JKiBzcmMvb3V0cHV0LmMgKGVycm9yX3ZlcmJvc2UpOiBMaWtld2lzZS4KLQkqIHNyYy9vdXRwdXQuaCAoZXJyb3JfdmVyYm9zZSk6IExpa2V3aXNlLgotCSogc3JjL3JlYWRlci5jIChzdGFydF9mbGFnLCB0eXBlZCk6IExpa2V3aXNlLgotCSogc3JjL3JlYWRlci5oICh0eXBlZCk6IExpa2V3aXNlLgotCSogc3JjL2dldGFyZ3MuYyAoTE9DQVRJT05TX09QVElPTik6IE5ldyBjb25zdGFudC4KLQkobG9uZ19vcHRpb25zLCBnZXRhcmdzKTogVXNlIGl0LgotCSogc3JjL2xhbHIuYyAoYnVpbGRfcmVsYXRpb25zKTogVXNlIGJvb2wsIG5vdCBpbnQuCi0JKiBzcmMvbnVsbGFibGUuYyAobnVsbGFibGVfY29tcHV0ZSk6IExpa2V3aXNlLgotCSogc3JjL3ByaW50LmMgKHByaW50X3JlZHVjdGlvbnMpOiBMaWtld2lzZS4KLQkqIHNyYy90YWJsZXMuYyAoYWN0aW9uX3JvdywgcGFja192ZWN0b3IpOiBMaWtld2lzZS4KLQkqIHNyYy9tdXNjbGVfdGFiLmggKE1VU0NMRV9JTlNFUlRfQk9PTCk6IE5ldyBtYWNyby4KLQkqIHNyYy9vdXRwdXQuYyAocHJlcGFyZSk6IFVzZSBpdC4KLQkqIHNyYy9vdXRwdXQuYyAodG9rZW5fZGVmaW5pdGlvbnNfb3V0cHV0LAotCXN5bWJvbF9kZXN0cnVjdG9yc19vdXRwdXQsIHN5bWJvbF9kZXN0cnVjdG9yc19vdXRwdXQpOiBVc2Ugc3RyaW5nLAotCW5vdCBib29sZWFuIGludGVnZXIsIHRvIGtlZXAgdHJhY2sgb2Ygd2hldGhlciB0byBvdXRwdXQgc2VwYXJhdG9yLgotCSogc3JjL3ByaW50X2dyYXBoLmMgKHByaW50X2NvcmUpOiBMaWtld2lzZS4KLQkqIHNyYy9zdGF0ZS5jIChzdGF0ZV9ydWxlX2xvb2thaGVhZHNfcHJpbnQpOiBMaWtld2lzZS4KLQotCSogY29uZmlnL2luc3RhbGwtc2g6IFN5bmMgZnJvbSBhdXRvbWFrZSAxLjcuNS4KLQotMjAwMy0wNS0xNCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIHNyYy9wYXJzZS1ncmFtLnkgKHJ1bGVzX29yX2dyYW1tYXJfZGVjbGFyYXRpb24pOiBSZXF1aXJlIGEKLQlzZW1pY29sb24gYWZ0ZXIgYSBncmFtbWFyIGRlY2xhcmF0aW9uLCBpbiB0aGUgaW50ZXJlc3Qgb2YgcG9zc2libGUKLQlmdXR1cmUgY2hhbmdlcyB0byB0aGUgQmlzb24gaW5wdXQgbGFuZ3VhZ2UuCi0JRG8gbm90IGFsbG93IGEgc3RyYXkgc2VtaWNvbG9uIGF0IHRoZSBzdGFydCBvZiB0aGUgZ3JhbW1hci4KLQkocmhzZXMuMSk6IEFsbG93IG9uZSBvciBtb3JlIHNlbWljb2xvbnMgYWZ0ZXIgYW55IHJ1bGUsIGluY2x1ZGluZwotCWp1c3QgYmVmb3JlICJ8IiBhcyByZXF1aXJlZCBieSBQT1NJWC4KLQkqIHRlc3RzL2lucHV0LmF0IChUb3J0dXJpbmcgdGhlIFNjYW5uZXIpOiBBZGQgdGVzdHMgZm9yICI7fCIgaW4gYQotCWdyYW1tYXIuCi0KLTIwMDMtMDUtMTQgIEFsZXhhbmRyZSBEdXJldC1MdXR6ICA8YWRsQGdudS5vcmc+Ci0KLQklcGFyc2UtcGFyYW0gc3VwcG9ydCBmb3IgbGFscjEuY2MuCi0KLQkqIGRhdGEvbGFscjEuY2MgKGI0X3BhcnNlX3BhcmFtX2RlY2wsIGI0X3BhcnNlX3BhcmFtX2NvbnMsCi0JYjRfY2NfY29uc3RydWN0b3JfY2FsbHMsIGI0X2NjX2NvbnN0cnVjdG9yX2NhbGwsCi0JYjRfcGFyc2VfcGFyYW1fdmFycywgYjRfY2NfdmFyX2RlY2xzLCBiNF9jY192YXJfZGVjbCk6IE5ldyBtNAotCWRlZmluaXRpb25zLgotCSh5eTo6YjRfcGFyc2VyX2NsYXNzX25hbWU6OmI0X3BhcnNlcl9jbGFzc19uYW1lKTogVGFrZSBleHRyYQotCXBhcnNlLXBhcmFtIGFyZ3VtZW50cy4KLQkoeXk6OmI0X3BhcnNlcl9jbGFzc19uYW1lKTogRGVjbGFyZSBpbnN0YW5jZSB2YXJpYWJsZXMgdG8KLQlob2xkIHBhcnNlLXBhcmFtIGFyZ3VtZW50cy4KLQkqIHRlc3RzL2NhbGMuYXQ6IHMvdmFsdWUvc2VtYW50aWNfdmFsdWUvIGJlY2F1c2UgdmFsdWUgY2xhc2hlcwotCXdpdGggYSBtZW1iZXIgb2YgeXk6OmI0X3BhcnNlcl9jbGFzc19uYW1lLiAgQWRqdXN0IEMrKyBjb2RlCi0JdG8gaGFuZGxlICVwYXJzZS1wYXJhbS4gIEVuYWJsZSAlcGFyc2UtcGFyYW0gdGVzdCBpbiBDKysuCi0KLTIwMDMtMDUtMTIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoSG93IENhbiBJIFJlc2V0IEBjb2Rle3l5cGFyc2V9KTogUmV3b3JkIHRoZQotCUVuZ2xpc2ggYSBiaXQuICBGaXggZmNsb3NlIHR5cG8uICBDaGFuZ2UgImNvbnN0IGNoYXIiIHRvICJjaGFyCi0JY29uc3QiLCBhbmQgdXNlIEFOU0kgQyByYXRoZXIgdGhhbiBLJlIgZm9yICJtYWluIi4gIFN1Z2dlc3QKLQlZWV9GTFVTSF9CVUZGRVIgb3ZlciB5eXJlc3RhcnQgKGFzIHRoYXQgaXMgd2hhdCBGbGV4IHJlY29tbWVuZHMpCi0JYW5kIHN1Z2dlc3QgeXlfc3dpdGNoX3RvX2J1ZmZlci4KLQotMjAwMy0wNS0wNSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIGxpYi9iaXRzZXQuaCAoX19JTlRfVE9fUFRSKTogRGVmaW5lIHRvIGEgdmFsdWUgdGhhdCBwcmVzdW1lcwotCUM4OS4gIFRoaXMgYXZvaWRzIGEgZGlhZ25vc3RpYyBvbiBjb21waWxlcnMgdGhhdCBkZWZpbmUgX19TVERDX18KLQl0byAwLCBmaXhpbmcgYSBwcm9ibGVtIHdpdGggVHJ1NjQgY2MgcmVwb3J0ZWQgYnkgTWFydGluIE1va3JlanMgaW4KLQk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAzLTA0L21zZzAwMDQxLmh0bWw+LgotCi0yMDAzLTA1LTAzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogbGliL2JpdHNldC5oIChCSVRTRVRfRk9SX0VBQ0gsIEJJVFNFVF9GT1JfRUFDSF9SRVZFUlNFKToKLQlEbyBub3Qgb3ZlcnJ1biBhcnJheSBib3VuZHMuCi0JVGhpcyBzaG91bGQgZml4IGEgYnVnIHJlcG9ydGVkIHRvZGF5IGJ5IE9sYXR1bmppIE9sdXdhYnVrdW5taSBpbgotCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDMtMDUvbXNnMDAwMDQuaHRtbD4uCi0KLTIwMDMtMDQtMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvZ3JhbS5oLCBzcmMvZ3JhbS5jIChwdXJlX3BhcnNlciwgZ2xyX3BhcnNlcik6IE1vdmUgdG8uLi4KLQkqIHNyYy9nZXRhcmdzLmMsIHNyYy9nZXRhcmdzLmg6IGhlcmUsIGFzIGJvb2wsIG5vdCBpbnQuCi0JKG5vbmRldGVybWluaXN0aWNfcGFyc2VyKTogTmV3LgotCSogc3JjL3BhcnNlLWdyYW0ueSwgc3JjL3NjYW4tZ3JhbS5sOiBTdXBwb3J0Ci0JJW5vbmRldGVybWluaXN0aWMtcGFyc2VyLgotCSogc3JjL291dHB1dC5jIChwcmVwYXJlKTogVXNlIG5vbmRldGVybWluaXN0aWNfcGFyc2VyIGluc3RlYWQKLQlvZiBnbHJfcGFyc2VyIHdoZXJlIGFwcHJvcHJpYXRlLgotCSogc3JjL3RhYmxlcy5jIChjb25mbGljdF9yb3csIGFjdGlvbl9yb3csIHNhdmVfcm93KQotCSh0b2tlbl9hY3Rpb25zLCB0b2tlbl9hY3Rpb25zLCBwYWNrX3ZlY3Rvcik6IERpdHRvLgotCi0yMDAzLTA0LTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZG9jL2Jpc29uLnRleGluZm8gKEMrKyBQYXJzZXJzLCBJbXBsZW1lbnRpbmcgTG9vcHMpOiBOZXcuCi0KLTIwMDMtMDQtMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiB0ZXN0cy9jYWxjLmF0OiBBbHNvIHRlc3QgeWFjYy5jIGFuZCBnbHIuYyAoYnV0IG5vdCBsYWxyMS5jYyB5ZXQpCi0Jd2l0aCAlcHVyZS1wYXJzZXIgYW5kICVsb2NhdGlvbnMgdG8gZXhlcmNpc2UgdGhlIHBhdGNoIGZyb20gWWFrb3YKLQlNYXJrb3ZpdGNoIGJlbG93LgotCi0yMDAzLTA0LTI4ICBUaW0gVmFuIEhvbGRlciA8dGltLnZhbi5ob2xkZXJAcGFuZG9yYS5iZT4KLQotCSogZGF0YS95YWNjLmM6IChiNF9sZXhfcGFyYW0pOiBDb3JyZWN0ZWQgZm9yIHRoZSBjYXNlIHdoZXJlCi0JJWxleC1wYXJhbSBpcyBwcm92aWRlZCBhbmQgJXB1cmUtcGFyc2VyIGlzbid0LgotCi0yMDAzLTA0LTI3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCUF2b2lkIGdjYyAtV3VuZGVmIHdhcm5pbmdzIHJlcG9ydGVkIGJ5IEdlcmFsZCBQZmVpZmVyIGluCi0JPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwMy0wNC9tc2cwMDA0NC5odG1sPi4KLQkqIGRhdGEveWFjYy5jIChZWVNUQUNLX0FMTE9DKTogRG9uJ3QgZXZhbHVhdGUgWVlTVEFDS19VU0VfQUxMT0NBCi0JaWYgaXQgaXMgbm90IGRlZmluZWQuCi0JKFlZTUFYREVQVEgpOiBEb24ndCBldmFsdWF0ZSBZWU1BWERFUFRIIGlmIGl0IGlzIG5vdCBkZWZpbmVkLgotCi0yMDAzLTA0LTI2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogZGF0YS9sYWxyMS5jYyAoeXk6OlBhcnNlcjo6cGFjdF9uaW5mXywgeXk6OlBhcnNlcjo6dGFibGVfbmluZl8pOgotCURlY2xhcmUgdG8gYmUgb2YgdHlwZSBzdWl0YWJsZSBmb3IgdGhlIG5pbmYgdmFsdWUgaXRzZWxmLCBub3Qgb2YKLQl0eXBlIHN1aXRhYmxlIGZvciB0aGUgY29ycmVzcG9uZGluZyB0YWJsZSwgc2luY2UgdGhlIGxhdHRlciBtaWdodAotCWJlIHVuc2lnbmVkIGJ1dCB0aGUgbmluZiB2YWx1ZSBtaWdodCBiZSBuZWdhdGl2ZS4gIFRoaXMgZml4ZXMgYQotCWJ1ZyByZXBvcnRlZCBieSBBbGV4YW5kcmUgRHVyZXQtTHV0eiBpbgotCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDMtMDQvbXNnMDAwMTcuaHRtbD4uCi0KLQkqIGNvbmZpZ3VyZS5hYyAoQUNfRlVOQ19FUlJPUl9BVF9MSU5FKTogUmVtb3ZlLCBzaW5jZSBnbF9FUlJPUgotCWludm9rZXMgaXQuICBXZSBzaG91bGRuJ3QgaW52b2tlIGl0IHR3aWNlIGJlY2F1c2UgaXQgd2lsbCBhdHRlbXB0Ci0JdG8gcHV0IGVycm9yLm8gaW4gdGhlIGFyY2hpdmUgdHdpY2UuICBUaGlzIGZpeGVzIGEgZ2xpdGNoIHJlcG9ydGVkCi0JYnkgTWFydGluIE1va3JlanMgaW4KLQk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAzLTA0L21zZzAwMDQxLmh0bWw+LgotCi0yMDAzLTA0LTIxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogbTQvZXJyb3IubTQ6IFVwZGF0ZSBmcm9tIEJydW5vIEhhaWJsZSdzIDIwMDMtMDQtMTQgcGF0Y2gKLQl0byBnbnVsaWIuCi0KLTIwMDMtMDQtMjEgIFlha292IE1hcmtvdml0Y2ggPE1hcmtvdml0Y2hAaXNvLnJ1PgotCi0JKiBkYXRhL2dsci5jICh5eWV4cGFuZEdMUlN0YWNrKSBbIVlZU1RBQ0tFWFBBTkRBQkxFXToKLQlGaXggb2J2aW91cyB0eXBvIHRoYXQgcmVzdWx0cyBpbiB1bmNvbXBpbGFibGUgR0xSIHBhcnNlcnMKLQl3aGVuIGJvdGggJXB1cmUtcGFyc2VyIGFuZCAlbG9jYXRpb25zIGFyZSB1c2VkLiAgKHRyaXZpYWwgY2hhbmdlKQotCi0yMDAzLTA0LTE3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogc3JjL3NjYW4tZ3JhbS5sOiBBZGQgJW9wdGlvbiBub3VucHV0LCBzaW5jZSB3ZSBubyBsb25nZXIgdXNlIHVucHV0LgotCSh1bmV4cGVjdGVkX2VvZik6IFJlbmFtZWQgZnJvbSB1bmV4cGVjdGVkX2VuZF9vZl9maWxlLCBmb3IgYnJldml0eS4KLQlEbyBub3QgaW5zZXJ0IHRoZSBleHBlY3RlZCB0b2tlbiB2aWEgdW5wdXQsIGFzIHRoaXMgcnVucyBhZm91bAotCW9mIGEgUE9TSVgtY29tcGF0aWJpbGl0eSBidWcgaW4gZmxleCAyLjUuMzEuCi0JQWxsIHVzZXMgY2hhbmdlZCB0byBCRUdJTiB0aGUgcGFyZW50IHN0YXRlLAotCXNpbmNlIHdlIG5vIGxvbmdlciBpbnNlcnQgdGhlIGV4cGVjdGVkIHRva2VuIHZpYSB1bnB1dC4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKEludmFsaWQgaW5wdXRzKTogUmVtb3ZlIGNhc2NhZGVkIGRpYWdub3N0aWMKLQl0aGF0IGlzIG5vIGxvbmdlciBlbWl0dGVkIGFmdGVyIHRoZSBhYm92ZSBjaGFuZ2UuCi0KLQkqIHNyYy9jb25mbGljdHMuYyAoc2V0X2NvbmZsaWN0cyk6IFJlc29sdmUgYWxsIGNvbmZsaWN0cywgbm90IGp1c3QKLQl0aGUgZmlyc3Qgb25lLiAgVGhpcyBjaGFuZ2UgaXMgZnJvbSBQYXVsIEhpbGZpbmdlciwgYW5kIGl0IGZpeGVzCi0JcmVncmVzc2lvbiByZXBvcnRlZCBieSBXZXJuZXIgTGVtYmVyZyBpbgotCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDMtMDQvbXNnMDAwMjYuaHRtbD4uCi0KLQkocmVzb2x2ZV9zcl9jb25mbGljdCk6IERvbid0IGludm9rZSBzdGF0ZV9lcnJzX3NldAotCXVubGVzcyBvbmUgb3IgbW9yZSB0b2tlbnMgaGF2ZSBiZWVuIGV4cGxpY2l0bHkgbWFkZSBlcnJvcnMuCi0JT3RoZXJ3aXNlLCB0aGUgYWJvdmUgY2hhbmdlIGNhdXNlcyBCaXNvbiB0byBhYm9ydC4KLQotCSogdGVzdHMvZXhpc3RpbmcuYXQgKEdOVSBwaWMgR3JhbW1hcik6IE5ldyB0ZXN0IGNhc2UsIHRha2VuIGZyb20KLQlMZW1iZXJnJ3MgZW1haWwuCi0KLTIwMDMtMDMtMzEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkb2MvTWFrZWZpbGUuYW0gKEFNX01BS0VJTkZPRkxBR1MpOiBEb24ndCBzcGxpdCB0aGUgaW5mbyBmaWxlLgotCi0yMDAzLTAzLTMxICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL291dHB1dC5jIChwcmVwYXJlX3N5bWJvbHMpOiBBdm9pZCB0cmFpbGluZyBzcGFjZXMgaW4gdGhlCi0Jb3V0cHV0LgotCi0yMDAzLTAzLTMxICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZG9jL2Jpc29uLnRleGluZm8gKFN0cmluZ3MgYXJlIERlc3Ryb3llZCk6IHMvbG9zc2VzL2xvc2VzLy4KLQlGcm9tIFBhdWwgSGlsZmluZ2VyLgotCi0yMDAzLTAzLTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogbTQvZXJyb3IubTQ6IERvIG5vdCBwdXQgdW5kZXIgZHluYW1pYyBjb25kaXRpb25zIHNvbWUgY29kZSB3aGljaAotCWV4cGFuc2lvbiBpcyB1bmRlciBzdGF0aWMgY29udHJvbC4KLQotMjAwMy0wMy0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvIChIb3cgQ2FuIEkgUmVzZXQgQGNvZGV7eXlwYXJzZX0pOiBOZXcuCi0KLTIwMDMtMDMtMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoU3RyaW5ncyBhcmUgRGVzdHJveWVkKTogTmV3LgotCi0yMDAzLTAzLTEzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogLmN2c2lnbm9yZTogQWRkIGNvbmZpZ3VyZS5saW5lbm8uCi0JKiBzcmMvLmN2c2lnbm9yZTogQWRkIHlhY2MuCi0JKiB0ZXN0cy8uY3ZzaWdub3JlOiBBZGQgdGVzdHN1aXRlLmxvZy4KLQkqIGRvYy9mZGwudGV4aTogU3luYyB3aXRoIGxhdGVzdCBGU0YgdmVyc2lvbi4KLQotMjAwMy0wMy0xMiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIHNjYW4tZ3JhbS5sIChZWV9VU0VSX0lOSVQpOiBJbml0aWFsaXplIGNvZGVfc3RhcnQsIHRvby4KLQkoPElOSVRJQUw+PDxFT0Y+PiwgPFNDX1BSRV9DT0RFPjw8RU9GPj4pOiBTZXQgKmxvYyB0byB0aGUgc2Nhbm5lcgotCWN1cnNvciwgaW5zdGVhZCBvZiBsZWF2aW5nIGl0IHVuZGVmaW5lZC4gIFRoaXMgZml4ZXMgYSBidWcKLQlyZXBvcnRlZCBieSBUaW0gVmFuIEhvbGRlciBpbgotCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDMtMDMvbXNnMDAwMjMuaHRtbD4uCi0JKiB0ZXN0cy9pbnB1dC5hdCAoVG9ydHVyaW5nIHRoZSBTY2FubmVyKTogVGVzdCB0aGUgc2Nhbm5lciBvbgotCWFuIGVtcHR5IGlucHV0IGZpbGUsIHdoaWNoIHdhcyBUaW0gVmFuIEhvbGRlcidzIHRlc3QgY2FzZS4KLQotCSogbTQvdGltZXZhci5tNCAoQklTT05fUFJFUkVRX1RJTUVWQVIpOiBXaGVuIGNoZWNraW5nIHdoZXRoZXIKLQk8c3lzL3Jlc291cmNlLmg+IGNhbiBiZSBpbmNsdWRlZCwgaW5jbHVkZSBzeXMvdGltZS5oIGFuZAotCXN5cy90aW1lcy5oIGZpcnN0LCBpZiBhdmFpbGFibGUuICBUaGlzIHdvcmtzIGFyb3VuZCB0aGUgU3VuT1MKLQk0LjEuNCBwb3J0aW5nIGJ1ZyByZXBvcnRlZCBieSBCcnVjZSBCZWNrZXIgaW4KLQk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAzLTAzL21zZzAwMDE4Lmh0bWw+LgotCi0JKiBtNC9zdWJwaXBlLm00IChCSVNPTl9QUkVSRVFfU1VCUElQRSk6IERvbid0Ci0JQUNfQ0hFQ0tfSEVBREVSUyhbc3lzL3dhaXQuaF0pLCBhcyB0aGlzIGludGVyZmVyZXMgd2l0aAotCUFDX0hFQURFUl9TWVNfV0FJVC4KLQotCU1lcmdlIGNoYW5nZXMgZnJvbSBnbnVsaWIuICBUaGlzIHdhcyBwcm9tcHRlZCBiZWNhdXNlIHRoZSBDVlMKLQlzbmFwc2hvdCBkaWRuJ3QgYnVpbGQgb24gU29sYXJpcyA3IGR1ZSB0byBzdHJubGVuIHByb2JsZW1zLgotCi0JVGhlc2UgY2hhbmdlcyBuZWVkIHRvIGJlIG1lcmdlZCBiYWNrIGludG8gZ251bGliOgotCSogbGliL2hhc2guYzogSW5jbHVkZSA8c3RkYm9vbC5oPiB1bmNvbmRpdGlvbmFsbHkuCi0JKiBtNC9vbmNlb25seS5tNCAobTRfcXVvdGUpOiBOZXcgbWFjcm8uCi0JKEFDX0NIRUNLX0hFQURFUlNfT05DRSwgQUNfQ0hFQ0tfRlVOQ1NfT05DRSwgQUNfQ0hFQ0tfREVDTFNfT05DRSk6Ci0JUXVvdGUgQUNfRk9SRUFDSCB2YXJpYWJsZS1leHBhbnNpb25zIHByb3Blcmx5LgotCVRoZSAyMDAzLTAxLTAzIG9ic3RhY2suaCBjaGFuZ2UgYWxzbyBuZWVkcyBtZXJnaW5nLgotCXtlbmQgb2YgY2hhbmdlcyByZXF1aXJpbmcgbWVyZ2luZ30KLQotCSogbGliL3N0ZGJvb2wuaC5pbiwgbTQvYWxsb2NhLm00LCBtNC9kaXJuYW1lLm00LCBtNC9kb3MubTQsCi0JbTQvZ2V0b3B0Lm00LCBtNC9oYXNoLm00LCBtNC9tYWxsb2MubTQsIG00L21lbWNoci5tNCwKLQltNC9tZW1yY2hyLm00LCBtNC9vYnN0YWNrLm00LCBtNC9vbmNlb25seS5tNCwgbTQvcXVvdGUubTQsCi0JbTQvcXVvdGVhcmcubTQsIG00L3JlYWxsb2MubTQsIG00L3N0cGNweS5tNCwgbTQvc3Rybmxlbi5tNCwKLQltNC9zdHJ0b2wubTQsIG00L3N0cnRvdWwubTQsIG00L3VubG9ja2VkLWlvLm00LCBtNC94YWxsb2MubTQ6Ci0JTmV3IGZpbGVzLCBpbXBvcnRlZCBmcm9tIGdudWxpYi4KLQkqIG00L01ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIHRoZSBuZXcgbTQvKi5tNCBmaWxlcyBtZW50aW9uZWQKLQlhYm92ZS4KLQotCSogbGliL21ic3dpZHRoLmMsIG00L2Vycm9yLm00LCBtNC9tYnJ0b3djLm00LCBtNC9tYnN3aWR0aC5tNCwKLQltNC9tZW1jbXAubTQsIG00L3ByZXJlcS5tNCwgbTQvc3RkYm9vbC5tNDogVXBkYXRlIHRvIGN1cnJlbnQKLQlnbnVsaWIgc291cmNlcy4KLQotCSogY29uZmlndXJlLmFjIChnbF9ESVJOQU1FLCBnbF9HRVRPUFQsIGdsX0hBU0gsIGdsX1FVT1RFLCBnbF9YQUxMT0MpOgotCUFkZC4KLQkoZ2xfRVJST1IpOiBOZXcsIHJlcGxhY2luZyBqbV9QUkVSRVFfRVJST1IuCi0JKGdsX0ZVTkNfQUxMT0NBKTogTmV3LCByZXBsYWNpbmcgQUNfRlVOQ19BTExPQ0EuCi0JKGdsX0ZVTkNfU1RQQ1BZKTogTmV3LCByZXBsYWNpbmcgQUNfUkVQTEFDRV9GVU5DUyhzdHBjcHkpLgotCShnbF9GVU5DX1NUUk5MRU4pOiBOZXcsIHJlcGxhY2luZyBBQ19GVU5DX1NUUk5MRU4uCi0JKGdsX01CU1dJRFRIKTogTmV3LCByZXBsYWNpbmcgam1fUFJFUkVRX01CU1dJRFRILgotCShnbF9PQlNUQUNLKTogTmV3LCByZXBsYWNpbmcgQUNfRlVOQ19PQlNUQUNLLgotCShnbF9RVU9URUFSRyk6IE5ldywgcmVwbGFjaW5nIGptX1BSRVJFUV9RVU9URUFSRy4KLQkoam1fRlVOQ19HTElCQ19VTkxPQ0tFRF9JTywgZ2xfRlVOQ19TVFBDUFksIGdsX0ZVTkNfU1RSVE9MKTogTmV3LgotCShqbV9GVU5DX01BTExPQyk6IE5ldywgcmVwbGFjaW5nIEFDX0ZVTkNfTUFMTE9DLgotCShqbV9GVU5DX1JFQUxMT0MpOiBOZXcsIHJlcGxhY2luZyBBQ19GVU5DX1JFQUxMT0MuCi0JKGptX1BSRVJFUV9BUkdNQVRDSCk6IFJlbW92ZS4KLQkoQUNfUkVQTEFDRV9GVU5DUyk6IFJlbW92ZSBtZW1jaHIsIG1lbXJjaHIsIHN0cGNweSwgc3RydG9sLCBzdHJ0b3VsLgotCSogbGliL01ha2VmaWxlLmFtIChsaWJiaXNvbl9hX1NPVVJDRVMpOiBBZGQgYXJnbWF0Y2guYywgYXJnbWF0Y2guaC4KLQotCSogc3JjL3N5c3RlbS5oOiBJbmNsdWRlIDxzdGRib29sLmg+IHVuY29uZGl0aW9uYWxseS4KLQotCSogbGliL2JiaXRzZXQuaDogSW5jbHVkZSA8bGltaXRzLmg+IHVuY29uZGl0aW9uYWxseS4gIFdlIGhhdmUgYmVlbgotCWFzc3VtaW5nIGF0IGxlYXN0IEM4OSBpbiB0aGUgYml0c2V0IGNvZGUgZm9yIHNvbWUgdGltZSBub3cuCi0KLTIwMDMtMDMtMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiByby5wbzogTmV3LgotCi0yMDAzLTAzLTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZG9jL2Jpc29uLnRleGluZm8gKFRhYmxlIG9mIFN5bWJvbHMpOiBSZWFjdGl2YXRlIHRoZQotCWRvY3VtZW50YXRpb24gZm9yICVsZXgtcGFyYW0sIGFuZCAlcGFyc2UtcGFyYW0uCi0KLTIwMDMtMDMtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL3lhY2MuYywgZGF0YS9nbHIuYywgZGF0YS9sYWwxLmNjOiBVc2Ugc2ltaWxhciBjb2RlIHRvCi0JZ2VuZXJhdGUgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4KLQlVc2UgdGhlIG51bWJlciBvZiB0b2tlbnMgYXMgYW4gdXBwZXIgYm91bmQgaW4geXl0bmFtZSwgYXMgaXQKLQljYW5ub3QgYmUgYSBub24gdGVybWluYWwuCi0KLTIwMDMtMDMtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChfQVRfREFUQV9EQU5DRVJfWSk6IEZpeCB0aGUgZXhwZWN0ZWQgZXJyb3IKLQltZXNzYWdlLgotCi0yMDAzLTAzLTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoX0FUX0RBVEFfREFOQ0VSX1ksIEFUX0NIRUNLX0RBTkNFUik6IE5ldy4KLQlVc2UgdGhlbSB0byBleGVyY2lzZSB5eWNoZWNrIG92ZXJydW4uCi0JQmFzZWQgb24gQW5kcmV3IFN1ZmZpZWxkJ3MgZ3JhbW1hci4KLQotMjAwMy0wMy0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlDcmVhdGUgdGVzdHMvbG9jYWwuYXQgZm9yIEJpc29uIGdlbmVyaWMgdGVzdGluZyBtYWNyb3MuCi0KLQkqIHRlc3RzL2NhbGMuYXQgKEFUX0NIRUNLX1BVU0hERUZTLCBBVF9DSEVDS19QT1BERUZTKTogTW92ZSB0by4uLgotCSogdGVzdHMvbG9jYWwuYXQgKEFUX0JJU09OX09QVElPTl9QVVNIREVGUywgQVRfQklTT05fT1BUSU9OX1BPUERFRlMpOgotCVRoaXMgbmV3IGZpbGUuCi0JKiB0ZXN0cy9jYWxjLmF0IChBVF9DSEVDS19DQUxDKTogQWRqdXN0LgotCSogdGVzdHMvdGVzdHN1aXRlLmF0IChBVF9EQVRBX0dSQU1NQVJfUFJPTE9HVUUsIEFUX0RBVEFfR1JBTU1BUikKLQkoQVRfQ09NUElMRSwgQVRfQ09NUElMRV9DWFgsIEFUX1BBUlNFUl9DSEVDSyk6IE1vdmUgdG8uLi4KLQkqIHRlc3RzL2xvY2FsLmF0OiBoZXJlLgotCShBVF9DT01QSUxFX0NYWCk6IFRhZ3MgdGhlIHRlc3RzIHVzaW5nIGl0IGFzIGMrKy4KLQlJZ25vcmUgdGhlIHRlc3QgaWYgQ1hYIGlzIG5vdCBmdW5jdGlvbmFsLgotCi0yMDAzLTAzLTAxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogc3JjL3NjYW4tZ3JhbS5sIChjb2RlX3N0YXJ0KTogSW5pdGlhbGl6ZSBpdCB0byBzY2FubmVyX2N1cnNvciwKLQlub3QgbG9jLT5lbmQsIHNpbmNlIGxvYy0+ZW5kIG1pZ2h0IGNvbnRhaW4gZ2FyYmFnZSBhbmQgdGhpcyBsZWFkcwotCXRvIHVuZGVmaW5lZCBiZWhhdmlvciBvbiBzb21lIHBsYXRmb3Jtcy4KLQkoaWRfbG9jLCB0b2tlbl9zdGFydCk6IFVzZSAoSUZfTElOVGVkKSBpbml0aWFsIHZhbHVlcyB0aGF0IGRvIG5vdAotCWRlcGVuZCBvbiAqbG9jLCBzbyB0aGF0IHRoZSByZWFkZXIgZG9lc24ndCBnaXZlIHRoZSB0aGUgZmFsc2UKLQlpbXByZXNzaW9uIHRoYXQgKmxvYyBpcyBpbml0aWFsaXplZC4KLQkoPElOSVRJQUw+IiUlIik6IERvIG5vdCBib3RoZXIgc2V0dGluZyBjb2RlX3N0YXJ0LCBzaW5jZSBpdHMgdmFsdWUKLQlkb2VzIG5vdCBzdXJ2aXZlIHRoZSByZXR1cm4uCi0KLTIwMDMtMDMtMDEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvc2Nhbi1ncmFtLmwgKGNvZGVfc3RhcnQpOiBBbHdheXMgaW5pdGlhbGl6ZSBpdCB3aGVuIGVudGVyaW5nCi0JaW50byB5eWxleCwgYXMgU0NfRVBJTE9HVUUgaXMgYWN0aXZhdGVkICpiZWZvcmUqIHRoZSBjb3JyZXNwb25kaW5nCi0JeXlsZXggaW52b2NhdGlvbi4gIEFuIGFsdGVybmF0aXZlIHdvdWxkIGJlIG1ha2luZyBpdCBzdGF0aWMsIGJ1dAotCXRoZW4gaXQgc3RhcnRzIHdpdGggdGhlIHNlY29uZCAlJSdzIGJlZ2lubmluZywgaW5zdGVhZCBvZiBpdHMgZW5kLgotCi0yMDAzLTAyLTI4ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogbGliL21ic3dpZHRoLmM6IEluY2x1ZGUgPHdjaGFyLmg+IGJlZm9yZSAibWJzd2lkdGguaCIsIHRvIHdvcmsKLQlhcm91bmQgYSBVbml4V2FyZSA3LjEuMSBwb3J0aW5nIGJ1ZyByZXBvcnRlZCBieSBKb2huIEh1Z2hlcyBpbgotCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDMtMDIvbXNnMDAwMzAuaHRtbD4uCi0KLTIwMDMtMDItMjYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBSRUFETUU6IE1lbnRpb24gY29tcGlsZXIgYnVnIGluIFN1biBGb3J0ZSBEZXZlbG9wZXIgNiB1cGRhdGUgMi4KLQlSZW1vdmUgU2VxdWVudC9QeXJhbWlkIGRpc2N1c3Npb24gKG5vYm9keSB1c2VzIHRoZW0gYW55IG1vcmUpLgotCU1lcmdlIFZNUyBhbmQgTVMtRE9TIGRpc2N1c3Npb247IHRoZXNlIHBvcnRzIG1heSB3ZWxsIGJlIGRlYWQKLQlidXQgbGV0J3Mga2VlcCBtZW50aW9uaW5nIHRoZW0gZm9yIG5vdy4gIFB1dCA8PiBhcm91bmQgZW1haWwKLQlhZGRyZXNzZXMuICBBZGQgY29weXJpZ2h0IG5vdGljZS4KLQotMjAwMy0wMi0yNCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIGRhdGEvZ2xyLmMgKHl5X3JlZHVjZV9wcmludCk6IHl5bGluZW5vIC0+IHl5bG5vLAotCXRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIGZsZXggdXNlIG9mIHl5bGluZW5vLgotCVByb2JsZW0gcmVwb3J0ZWQgYnkgQnJ1Y2UgTGlsbHkgaW4KLQk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAzLTAyL21zZzAwMDE2Lmh0bWw+LgotCSogZGF0YS9sYWxyMS5jYyAoeXk6Ol1iNF9wYXJzZXJfY2xhc3NfbmFtZVs6OnBhcnNlKTogTGlrZXdpc2UuCi0JKiBkYXRhL3lhY2MuYyAoeXlfcmVkdWNlX3ByaW50KTogTGlrZXdpc2UuCi0KLQkqIGNvbmZpZy9kZXBjb21wOiBTeW5jIHdpdGggQXV0b21ha2UgMS43LjMuCi0KLTIwMDMtMDItMjEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2xhbHIxLmNjOiBVc2UgdGVtcG9yYXJ5IHZhcmlhYmxlcyBpbnN0ZWFkIG9mIGNhc3RzIHRvCi0JY2hhbmdlIGludGVnZXIgdHlwZXMuCi0JU3VnZ2VzdGVkIGJ5IFBhdWwgRWdnZXJ0LgotCi0yMDAzLTAyLTIxICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZG9jL2Jpc29uLnRleGluZm86IFVzZSAibG9jYXRpb24iIGNvbnNpc3RlbnRseSB0byByZWZlciB0byBAbiwKLQl0byBhdm9pZCBjb25mdXNpb25zIHdpdGggbGFscjEuY2MncyBub3Rpb24gb2YgUG9zaXRpb24uCi0JU3VnZ2VzdGVkIGJ5IFBhdWwgRWdnZXJ0LgotCi0yMDAzLTAyLTIwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS9sYWxyMS5jYyAocG9zaXRpb24uaGgpOiBNYWtlIHN1cmUgImNvbHVtbnMiIG5ldmVyIHB1c2hlcwotCWJlZm9yZSBpbml0aWFsX2NvbHVtbnMuCi0JKGxvY2F0aW9uLmhoKTogVXNlIGNvbnNpc3RlbnQgdmFyaWFibGUgbmFtZXMgd2hlbiBkZWZpbmluZyB0aGUKLQlvcGVyYXRvcjw8LgotCVVzZSAibGFzdCIgc28gdGhhdCB3ZSBzdWJ0cmFjdCBmcm9tIFBvc2l0aW9ucywgbm90IGZyb20gdW5zaWduZWQuCi0KLTIwMDMtMDItMjAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2xhbHIxLmNjIChwb3NpdGlvbi5oaCk6IE5ldyBzdWJmaWxlLCBpbmNsdWRpbmcgdGhlIGV4dGVuZGVkCi0JYW5kIERveHlnZW4nZWQgZG9jdW1lbnRhdGlvbiBvZiBjbGFzcyBQb3NpdGlvbi4KLQkobG9jYXRpb24uaGgpOiBVc2UgaXQuCi0JRG9jdW1lbnQgYWAgbGEgRG94eWdlbi4KLQlXaXRoIHRoZSBoZWxwIG9mIEJlbm9pdCBQZXJyb3QuCi0KLTIwMDMtMDItMjAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiB0ZXN0cy9jYWxjLmF0IChBVF9DSEVDS19QVVNIREVGUywgQVRfQ0hFQ0tfUE9QREVGUyk6IERlZmluZQotCUFUX1lBQ0NfSUYuCi0JUmVkZWZpbmUgQVRfWVlFUlJPUl9TRUVTX0xPQ19JRiB1c2luZyBpdC4KLQkoX0FUX0RBVEFfQ0FMQ19ZKTogRG9uJ3QgZGVjbGFyZSB5eWVycm9yIHdoZW4gbGFscjEuY2MsIGFzIGl0IGlzCi0Jbm90IGRlZmluZWQuCi0JRG9uJ3QgdXNlIHRoZSBsb2NhdGlvbiBpbiB5eTo6UGFyc2VyOjplcnJvcl8gYW5kCi0JeXk6OlBhcnNlcjo6cHJpbnRfIHdoZW4gbm90ICVsb2NhdGlvbnMuCi0JQWN0aXZhdGUgbW9yZSBsYWxyMS5jYyB0ZXN0cy4KLQotMjAwMy0wMi0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvbGFscjEuY2M6IFdoZW4gZGlzcGxheWluZyBhIGxpbmUgbnVtYmVyLCBiZSBzdXJlIHRvIG1ha2UgaXQKLQlhbiBpbnQuCi0KLTIwMDMtMDItMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2xhbHIxLmNjIChiNF9zdGFja19kZXB0aF9pbml0LCB5eTo6UGFyc2VyOjppbml0ZGVwdGhfKToKLQlSZW1vdmUsIHVzZWxlc3MuCi0JKFlZQUJPUlQsIFlZQUNDRVBULCBZWUVSUk9SKTogTmV3LgotCSogdGVzdHMvY2FsYy5hdDogUmVuYWJsZSB0aGUgbGFscjEuY2MgdGVzdC4KLQotMjAwMy0wMi0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHRlc3RzL2NhbGMuYXQgKEFUX0NIRUNLX0NBTEMpOiBDaGVjayBkaWZmZXJlbnQgc2NlbmFyaW9zIG9mCi0JZXJyb3IgcmVjb3ZlcnksIG1peGluZyB3aXRoL3dpdGhvdXQgcG9wcyBhbmQgZGlzY2FyZGluZyBvZiB0aGUKLQlsb29rYWhlYWQuCi0JRXhlcmNpc2UgWVlFUlJPUi4KLQlEaXNhYmxlIHRoZSBsYWxyMS5jYyB0ZXN0cyBhcyBjdXJyZW50bHkgaXQgZG9lc24ndCBzdXBwb3J0IFlZRVJST1IuCi0KLTIwMDMtMDItMTcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiB0ZXN0cy9hdGxvY2FsLmluIChMREZMQUdTLCBMSUJTKTogTmV3IHZhcnMuCi0JKiB0ZXN0cy90ZXN0c3VpdGUuYXQgKEFUX0NPTVBJTEUpOiBVc2UgdGhlbS4KLQlUaGlzIGZpeGVzIHRoZSB0ZXN0c3VpdGUgcHJvYmxlbSByZXBvcnRlZCBieSBSb2JlcnQgTGVudHogaW4KLQk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAzLTAyL21zZzAwMDExLmh0bWw+LgotCi0yMDAzLTAyLTEyICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogZGF0YS95YWNjLmMgKHl5ZXJybGFiKSBbWVlFUlJPUl9WRVJCT1NFXToKLQlBdm9pZCBzdWJzY3JpcHQgZXJyb3IgaW4geXljaGVjay4gIEJ1ZyByZXBvcnRlZCBieSBBbmRyZXcgU3VmZmllbGQgaW4KLQk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAzLTAyL21zZzAwMDAzLmh0bWw+LgotCSogZGF0YS9nbHIuYyAoeXlyZXBvcnRTeW50YXhFcnJvcikgW1lZRVJST1JfVkVSQk9TRV06IExpa2V3aXNlLgotCUNoZWNrIGZvciBtYWxsb2MgZmFpbHVyZSwgZm9yIGNvbnNpc3RlbmN5IHdpdGggeWFjYy5jLgotCSh5eXRuYW1lX3NpemUpOiBSZW1vdmUsIGZvciBjb25zaXN0ZW5jeSB3aXRoIHlhY2MuYy4KLQotCVRoZSBidWcgc3RpbGwgcmVtYWlucyBpbiBkYXRhL2xhbHIxLmNjLCBhcyBJIGRpZG4ndCBoYXZlIHRpbWUKLQl0byBmaXggaXQgdGhlcmUuCi0KLTIwMDMtMDItMDYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBjb25maWd1cmUuYWMgKEdYWCk6IFJlbmFtZSBhcy4uLgotCShDWFgpOiB0aGlzLCB0byBrZWVwIHRoZSBvcmlnaW5hbCBBdXRvY29uZiBzZW1hbnRpY3MuCi0JUmVxdWlyZSAyLjU3LgotCSogZGF0YS9sYWxyMS5jYzogRml4IGI0X2NvcHlyaWdodCBpbnZvY2F0aW9ucy4KLQlJZiBZWURFQlVHIGlzIG5vdCBkZWZpbmVkLCBkb24ndCBkZXBlbmQgdXBvbiBuYW1lXyBiZWluZyBkZWZpbmVkLgotCShsb2NhdGlvbi5oaCk6IEluY2x1ZGUgc3RyaW5nIGFuZCBpb3N0cmVhbS4KLQkoUG9zaXRpb246OmZpbGVuYW1lKTogTmV3IG1lbWJlci4KLQkoUG9zaXRpb246OlBvc2l0aW9uICgpKTogTmV3LgotCShvcGVyYXRvcjw8IChQb3NpdGlvbikpOiBOZXcuCi0JKG9wZXJhdG9yLSAoUG9zaXRpb24sIGludCkpOiBOZXcuCi0JKExvY2F0aW9uOjpmaXJzdCwgTG9jYXRpb246Omxhc3QpOiBSZW5hbWUgYXMuLi4KLQkoTG9jYXRpb246OmJlZ2luLCBMb2NhdGlvbjo6ZW5kKTogdGhlc2UsIHRvIG1vY2sgdGhlIGNvbnZlbnRpb25hbAotCWl0ZXJhdG9yIG5hbWVzLgotCShvcGVyYXRvcjw8IChMb2NhdGlvbikpOiBOZXcuCi0JKiB0ZXN0cy9hdGxvY2FsLmluIChDWFgpOiBOZXcuCi0JKiB0ZXN0cy90ZXN0c3VpdGUuYXQgKEFUX0NPTVBJTEVfQ1hYKTogTmV3LgotCSogdGVzdHMvY2FsYy5hdCAoX0FUX0RBVEFfQ0FMQ19ZKTogQWRqdXN0IHl5ZXJyb3IgdG8gcmVwb3J0IHRoZQotCWxvY2F0aW9ucyBpbiBhIG1vcmUgc3ludGhldGljIHdheS4KLQkoQVRfQ0hFQ0tfUFVTSERFRlMpOiBBVF9ZWUVSUk9SX1NFRVNfTE9DX0lGIGlzIHBvc2l0aXZlIGlmCi0JbGFscjEuY2MgaXMgdXNlZC4KLQlBZGp1c3QgdGhlIEMgbG9jYXRpb25zIHRvIG1hdGNoIHRob3NlIGZyb20gRW1hY3M6IGZpcnN0IGNvbHVtbiBpcwotCWNvbHVtbiAwLgotCUNoYW5nZSBhbGwgdGhlIGV4cGVjdGVkIHJlc3VsdHMuCi0JQ29uZm9ybSB0byB0aGUgR0NTOiBzaW1wbGlmeSB0aGUgbG9jYXRpb25zIHdoZW4gYXBwbGljYWJsZS4KLQkoTE9DLCBWQUwsIFlZTExPQ19GT1JNQUwsIFlZTExPQ19BUkcsIFVTRV9ZWUxMT0MsIExFWF9GT1JNQUxTKQotCShMRVhfQVJHUywgVVNFX0xFWF9BUkdTLCBMRVhfUFJFX0ZPUk1BTFMsIExFWF9QUkVfQVJHUyk6IFJlcGxhY2UKLQl0aGVzZSBDUFAgbWFjcm9zIHdpdGggdGhlIG00IG1hY3JvcyBuZXcgZGVmaW5lZCBieS4uLgotCShBVF9DSEVDS19QVVNIREVGUyk6IHRoaXMsIGkuZS46Ci0JKEFUX0xBTFIxX0NDX0lGLCBBVF9QVVJFX0xFWF9JRiwgQVRfTE9DLCBBVF9WQUwsIEFUX0xFWF9GT1JNQUxTKQotCShBVF9MRVhfQVJHUywgQVRfVVNFX0xFWF9BUkdTLCBBVF9MRVhfUFJFX0ZPUk1BTFMsIEFUX0xFWF9QUkVfQVJHUykKLQlOZXcgbWFjcm9zLgotCShBVF9DSEVDS19QT1BERUZTKTogVW5kZWZpbmUgdGhlbS4KLQkoQVRfQ0hFQ0tfQ0FMQ19MQUxSMV9DQyk6IE5ldy4KLQlVc2UgaXQgZm9yIHRoZSBmaXJzdCBsYWxyMS5jYyB0ZXN0LgotCi0yMDAzLTAyLTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS9sYWxyMS5jYyAoWVlMTE9DX0RFRkFVTFQpOiBGaXggaXRzIGRlZmluaXRpb246IGJlIGJhc2VkIG9uCi0JTG9jYXRpb24gYXMgaXMgZGVmaW5lZC4KLQotMjAwMy0wMi0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvbGFscjEuY2M6IElmIFlZREVCVUcgaXMgbm90IGRlZmluZWQsIGRvbid0IGRlcGVuZCB1cG9uCi0JbmFtZV8gYmVpbmcgZGVmaW5lZC4KLQotMjAwMy0wMi0wMyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIHNyYy9ncmFtLmggKHN0YXJ0X3N5bWJvbCk6IFJlbW92ZSB1bnVzZWQgZGVjbC4KLQotCVVzZSBtb3JlLWNvbnNpc3RlbnQgbmFtaW5nIGNvbnZlbnRpb25zIGZvciBsb2NhbCB2YXJzLgotCi0JKiBzcmMvZGVyaXZlcy5jIChkZXJpdmVzX2NvbXB1dGUpOiBDaGFuZ2UgdHlwZSBvZiBsb2NhbCB2YXIgZnJvbQotCWludCB0byBydWxlX251bWJlci4KLQkqIHNyYy9ncmFtLmMgKGdyYW1tYXJfcnVsZXNfcGFydGlhbF9wcmludCk6IExpa2V3aXNlLgotCSogc3JjL3ByaW50LmMgKHByaW50X2NvcmUpOiBMaWtld2lzZS4KLQkqIHNyYy9yZWR1Y2UuYyAocmVkdWNlX2dyYW1tYXJfdGFibGVzKTogTGlrZXdpc2UuCi0KLQkqIHNyYy9ncmFtLmMgKGdyYW1tYXJfZHVtcCk6IENoYW5nZSBuYW1lIG9mIGl0ZW1fbnVtYmVyICoKLQlsb2NhbCB2YXIgZnJvbSByIHRvIHJwLgotCSogc3JjL251bGxhYmxlLmMgKG51bGxhYmxlX2NvbXB1dGUpOiBMaWtld2lzZS4KLQotCSogc3JjL2dyYW0uaCAoSVNUT0tFTiwgSVNWQVIpOiBVc2UgaSwgbm90IHMsIGZvciBpbnQgdmFyLgotCi0JKiBzcmMvZ3JhbS5oIChzeW1ib2xfbnVtYmVyX2FzX2l0ZW1fbnVtYmVyKTogVXNlIHN5bSwgbm90IHMsCi0JZm9yIHN5bWJvbCBvciBzeW1ib2xfbnVtYmVyIHZhci4KLQkqIHNyYy9yZWFkZXIuYyAoZ3JhbW1hcl9zdGFydF9zeW1ib2xfc2V0KTogTGlrZXdpc2UuCi0JKiBzcmMvcmVhZGVyLmggKGdyYW1tYXJfc3RhcnRfc3ltYm9sX3NldCwgZ3JhbW1hcl9zeW1ib2xfYXBwZW5kKToKLQlMaWtld2lzZS4KLQkqIHNyYy9zdGF0ZS5jICh0cmFuc2l0aW9uc190byk6IExpa2V3aXNlLgotCSogc3JjL3N0YXRlLmg6IExpa2V3aXNlLgotCSogc3JjL3RhYmxlcy5jIChzeW1ib2xfbnVtYmVyX3RvX3ZlY3Rvcl9udW1iZXIpOiBMaWtld2lzZS4KLQotCSogc3JjL211c2NsZV90YWIuaCAoTVVTQ0xFX09CU1RBQ0tfU0dST1cpOiBVc2UgcCwgbm90IHMsIGZvcgotCWNoYXIgKiB2YXIuCi0KLQkqIHNyYy9wYXJzZS1ncmFtLnkgKGxsb2NfZGVmYXVsdCk6IFVzZSBsb2MsIG5vdCByLCBmb3IgWVlMVFlQRQotCXZhci4KLQotCSogc3JjL3NjYW4tZ3JhbS5sIChub19jcl9yZWFkKTogVXNlIGJ5dGVzX3JlYWQsIG5vdCBzLCBmb3Igc2l6ZQotCXZhci4KLQotCSogc3JjL3N5c3RlbS5oICh4c3RybmR1cCwgc3RyY2hyLCBzdHJzcG4sIHN0cm5sZW4sIG1lbWNociwgbWVtcmNocik6Ci0JVXNlIHN0ciwgbm90IHMsIGZvciBjaGFyICogdmFyLiAgVXNlIGNoLCBub3QgYywgZm9yIGNoYXJhY3RlciB2YXIuCi0JVXNlIHNpemUgZm9yIHNpemUgdmFyLgotCi0JKiBzcmMvdW5pcXN0ci5jICh1bmlxc3RyX25ldywgdW5pcXN0cl9hc3NlcnQpOiBVc2Ugc3RyLCBub3QgcywgZm9yCi0JY2hhciAqIHZhci4KLQkodW5pcXN0cl9wcmludCwgdW5pcXN0X3ByaW50X3Byb2Nlc3Nvcik6IFVzZSB1c3RyLCBub3QgcywgZm9yCi0JdW5pcXN0ciB2YXIuCi0JKiBzcmMvdW5pcXN0ci5oOiBMaWtld2lzZS4KLQotCSogc3JjL3ZjZy5jIChnZXRfY29sb3Jfc3RyLCBnZXRfdGV4dG1vZGVfc3RyLCBnZXRfc2hhcGVfc3RyLAotCWdldF9sYXlvdXRhbGdvcml0aG1fc3RyLCBnZXRfZGVjaXNpb25fc3RyLCBnZXRfb3JpZW50YXRpb25fc3RyLAotCWdldF9ub2RlX2FsaWdubWVudF9zdHIsIGdldF9hcnJvd19tb2RlX3N0ciwgZ2V0X2Nyb3NzaW5nX3R5cGVfc3RyLAotCWdldF92aWV3X3N0ciwgZ2V0X2xpbmVzdHlsZV9zdHIsIGdldF9hcnJvd3N0eWxlX3N0cik6IFJlbmFtZQotCXBhcmFtIHRvIGhhdmUgc2FtZSBuYW1lIGFzIHRoYXQgb2YgZW51bSwgc28gdGhhdCB3ZSBkb24ndCB1c2UKLQkicyIgdG8gc3RhbmQgZm9yIGEgbm9uLXN0YXRlLgotCi0yMDAzLTAyLTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3NjYW4tc2tlbC5sOiBTY2FuIG1vcmUgdGhhbiBvbmUgaW5lcnQgY2hhcmFjdGVyIHBlciB5eWxleAotCWludm9jYXRpb24uCi0KLTIwMDMtMDItMDEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JVmVyc2lvbiAxLjg3NWEuCi0KLQkqIHBvL0xJTkdVQVM6IEFkZCBtcy4KLQotMjAwMy0wMS0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRvYy9NYWtlZmlsZS5hbSAoQ0xFQU5GSUxFUyk6IEFkZCBiaXNvbi5mbnMgZm9yIGRpc3RjaGVjay4KLQotMjAwMy0wMS0yOSAgUGF1bCBIaWxmaW5nZXIgIDxIaWxmaW5nZXJAQ1MuQmVya2VsZXkuRURVPgotCi0JKiB0ZXN0cy9jeHgtdHlwZS5hdDogQ29ycmVjdCBhcHBhcmVudCB0eXBvIGluIEJpc29uIGlucHV0OiAkJCBpbnN0ZWFkCi0Jb2YgJDEuCi0KLQlDaGFuZ2VzIGluIHJlc3BvbnNlIHRvIGVycm9yIHJlcG9ydCBieSBTLiBFa2VuOiBHTFIgbW9kZSBkb2VzIG5vdAotCWhhbmRsZSBuZWdhdGl2ZSAkIGluZGljZXMgb3IgJCBpbmRpY2VzIGluIGVtYmVkZGVkIHJ1bGVzIGNvcnJlY3RseS4KLQlTZWUgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwMy0wMS9tc2cwMDA3Ni5odG1sPi4KLQotCSogZGF0YS9nbHIuYyAoYjRfcmhzX3ZhbHVlKTogQ2hhbmdlIHRvIHVzZSBZWUZJTEwgbWFjcm8uCi0JKGI0X3Joc19sb2NhdGlvbik6IERpdHRvLgotCSh5eWZpbGwpOiBOZXcgZnVuY3Rpb24gdG8gY29weSBmcm9tIHN0YWNrIHRyZWUgaW50byBhcnJheQotCWluY3JlbWVudGFsbHkuCi0JKHl5dXNlckFjdGlvbik6IE1vZGlmeSB0byBhbGxvdyBpbmNyZW1lbnRhbCBtb3ZlIG9mIHNlbWFudGljIHZhbHVlcwotCXRvIHJocyBhcnJheSB3aGVuIGluIEdMUiBtb2RlLgotCURlZmluZSBZWUZJTEwgdG8gdXNlIGluIHVzZXItZGVmaW5lZCBhY3Rpb25zIHRvIGZpbGwgc2VtYW50aWMgYXJyYXkKLQlhcyBuZWVkZWQuCi0JUmVtb3ZlIGR1bW15IHVzZSBvZiB5eXN0YWNrLCBhcyB0aGVyZSBpcyBub3cgYSBndWFyYW50ZWVkIHVzZS4KLQkoeXlkb0FjdGlvbik6IE1vZGlmeSB0byBhbGxvdyBpbmNyZW1lbnRhbCBtb3ZlIG9mIHNlbWFudGljIHZhbHVlcwotCXRvIHJocyBhcnJheSB3aGVuIGluIEdMUiBtb2RlLgotCSh5eXJlc29sdmVBY3Rpb24pOiBEaXR0by4KLQkoeXlnbHJTaGlmdERlZmVyKTogVXBkYXRlIGNvbW1lbnQuCi0JKHl5cmVzb2x2ZVN0YXRlcyk6IFVzZSBYID09IE5VTEwgZm9yIHBvaW50ZXJzLCBub3QgIVguCi0JKHl5Z2xyUmVkdWNlKTogRGl0dG8uCi0JKHl5ZG9BY3Rpb24pOiBEaXR0bwotCi0JKiB0ZXN0cy9nbHItcmVncjEuYXQ6IFJlbmFtZSB0byAuLi4KLQkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0OiBBZGQgbmV3IHJlZ3Jlc3Npb24gdGVzdCBmb3IgdGhlIHByb2JsZW1zCi0JZGVzY3JpYmVkIGFib3ZlIChhZGFwdGVkIGZyb20gUy4gRWtlbikuCi0JVXBkYXRlIGNvcHlyaWdodCBub3RpY2UuCi0JKiB0ZXN0cy90ZXN0c3VpdGUuYXQ6IFJlbmFtZSBnbHItcmVncjEuYXQgdG8gZ2xyLXJlZ3Jlc3Npb24uYXQuCi0JKiB0ZXN0cy9NYWtlZmlsZS5hbTogRGl0dG8uCi0KLTIwMDMtMDEtMjggIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBkYXRhL2xhbHIxLmNjOiBEbyBub3QgdXNlIEBvdXRwdXRfaGVhZGVyX25hbWVAIHVubGVzcwotCWI0X2RlZmluZXNfZmxhZyBpcyBzZXQuICBUaGlzIGZpeGVzIHR3byBidWdzIHJlcG9ydGVkIGJ5Ci0JVGltIFZhbiBIb2xkZXIgaW4KLQk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAzLTAxL21zZzAwMDcxLmh0bWw+Ci0JYW5kIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDMtMDEvbXNnMDAwNzMuaHRtbD4uCi0KLTIwMDMtMDEtMjEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBkYXRhL3lhY2MuYyAoWVlFUlJPUik6IE1vdmUgY29kZSBmcm9tIHl5ZXJybGFiMSB0byBoZXJlLCBzbyB0aGF0Ci0Jd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB5eWVycmxhYjEgYmVpbmcgcmVwb3J0ZWQgYXMgYW4KLQkidW51c2VkIGxhYmVsIiBieSBub24tR0NDIEMgY29tcGlsZXJzLiAgVGhlIGRvd25zaWRlIGlzIHRoYXQgaWYKLQlsb2NhdGlvbnMgYXJlIHVzZWQgdGhlbiBhIGNvdXBsZSBvZiBzdGF0ZW1lbnRzIGFyZSBkdXBsaWNhdGVkIGVhY2gKLQl0aW1lIFlZRVJST1IgaXMgaW52b2tlZCwgYnV0IHRoZSB1cHNpZGUgaXMgdGhhdCB0aGUgd2FybmluZ3MKLQlzaG91bGQgdmFuaXNoLgotCSh5eWVycmxhYjEpOiBNb3ZlIGNvZGUgdG8gWUVSUk9SLgotCSh5eWVycmxhYjIpOiBSZW1vdmUuICBDaGFuZ2UgdXNlcyBiYWNrIHRvIHl5ZXJybGFiMS4KLQlUaGlzIHJldmVydHMgc29tZSBvZiB0aGUgMjAwMi0xMi0yNyBjaGFuZ2UuCi0KLTIwMDMtMDEtMTcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBzcmMvb3V0cHV0LmMgKHN5bWJvbF9wcmludGVyc19vdXRwdXQpOiBGaXggdHlwbyB0aGF0IGxlZAotCXRvIGNvcmUgZHVtcC4gIFByb2JsZW0gcmVwb3J0ZWQgYnkgQW50b25pbyBSdXMgaW4KLQk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAzLTAxL21zZzAwMDU4Lmh0bWw+LgotCi0yMDAzLTAxLTEzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4sCi0JCVF1b2MgUGV5cm90IDxjaG9qaW5AbHJkZS5lcGl0YS5mcj4sCi0JCVJvYmVydCBBbmlza28gPGFuaXNrb19yQGxyZGUuZXBpdGEuZnI+Ci0KLQkqIGRhdGEvbGFscjEuY2MgKHBhcnNlOjp5eWVycmxhYjEpOiBXaGVuIHBvcHBpbmcgdGhlIHN0YWNrLCBzdG9wCi0Jd2hlbiB0aGUgc3RhY2tzIGNvbnRhaW4gb25lIGVsZW1lbnQsIGFzIHRoZSBsb29wIHdvdWxkIG90aGVyd2lzZQotCWZyZWUgdGhlIGxhc3Qgc3RhdGUsIGFuZCB0aGVuIHVzZSB0aGUgdG9wIHN0YXRlICh0aGUgb25lIHdlIGp1c3QKLQlwb3BwZWQpLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBpbml0aWFsIGVsZW1lbnRzIHdpbGwgbm90IGJlIGZyZWVkCi0JZXhwbGljaXRseSwgYXMgaXMgdGhlIGNhc2UgaW4geWFjYy5jOyBpdCBpcyBub3QgYSBwcm9ibGVtLCBhcwotCXRoZXNlIGVsZW1lbnRzIGhhdmUgZmFrZSB2YWx1ZXMuCi0KLTIwMDMtMDEtMTEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBORVdTOiAlZXhwZWN0LXZpb2xhdGlvbnMgYXJlIG5vdyBqdXN0IHdhcm5pbmdzLCByZXZlcnRpbmcKLQl0byBCaXNvbiAxLjMwIGFuZCAxLjc1IGJlaGF2aW9yLiAgVGhpcyBmaXhlcyB0aGUgR0NDIDMuMgotCWJvb3RzdHJhcHBpbmcgcHJvYmxlbSByZXBvcnRlZCBieSBNYXR0aGlhcyBLbG9zZTsgc2VlCi0JPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwMy0wMS9tc2cwMDA1My5odG1sPi4KLQkqIHNyYy9jb25mbGljdHMuYyAoY29uZmxpY3RzX3ByaW50KTogTGlrZXdpc2UuCi0JKiB0ZXN0cy9jb25mbGljdHMuYXQgKCVleHBlY3Qgbm90IGVub3VnaCwgJWV4cGVjdCB0b28gbXVjaCwKLQklZXhwZWN0IHdpdGggcmVkdWNlIGNvbmZsaWN0cyk6IExpa2V3aXNlLgotCSogZG9jL2Jpc29uLnRleGluZm8gKEV4cGVjdCBEZWNsKTogRG9jdW1lbnQgdGhpcy4gIEFsc28gbWVudGlvbgotCXRoYXQgdGhlIHdhcm5pbmcgaXMgZW5hYmxlZCBpZiB0aGUgbnVtYmVyIG9mIGNvbmZsaWN0cyBjaGFuZ2VzCi0JKG5vdCBuZWNlc3NhcmlseSBpbmNyZWFzZXMpLgotCi0JKiBzcmMvZ2V0YXJncy5jICh2ZXJzaW9uKTogVXBkYXRlIGNvcHlyaWdodCB5ZWFyLgotCi0yMDAzLTAxLTA5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL01ha2VmaWxlLmFtLCBsaWIvTWFrZWZpbGUuYW06IFVzZSAkKFZBUikgaW5zdGVhZCBvZiBAVkFSQC4KLQotMjAwMy0wMS0wOCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIE1ha2VmaWxlLm1haW50IChXR0VURkxBR1MpOgotCU5ldyBtYWNybywgY29udGFpbmluZyAiLUMgb2ZmIiB0byBkaXNhYmxlIHByb3h5IGNhY2hlcy4KLQlBbGwgdXNlcyBvZiAkKFdHRVQpIGNoYW5nZWQgdG8gJChXR0VUKSAkKFdHRVRGTEFHUykuCi0JKHJlbC1jaGVjayk6IFVzZSAkKFdHRVQpIGluc3RlYWQgb2Ygd2dldC4KLQotMjAwMy0wMS0wNiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvIChHZW5lcmFsaXplZCBMUiBQYXJzaW5nKTogQWRkIGEgcmVmZXJlbmNlIHRvCi0JdGhlIEdMUiBwYXBlciBvZiBTY290dCwgSm9obnN0b25lIGFuZCBIdXNzYWluLgotCi0yMDAzLTAxLTA0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogY29uZmlndXJlLmFjIChBQ19BUkdfRU5BQkxFKTogQWRkIC0tZGlzYWJsZS15YWNjLgotCShZQUNDX1NDUklQVCwgWUFDQ19MSUJSQVJZKTogTmV3IHZhcnMgdG8gQUNfU1VCU1QuCi0JKiBsaWIvTWFrZWZpbGUuYW0gKGxpYl9MSUJSQVJJRVMpOiBsaWJ5LmEgLT4gQFlBQ0NfTElCUkFSWUAuCi0JKEVYVFJBX0xJQlJBUklFUyk6IE5ldyB2YXIsIGZvciBsaWJ5LmEuCi0JKiBzcmMvTWFrZWZpbGUuYW0gKGJpbl9TQ1JJUFRTKTogeWFjYyAtPiBAWUFDQ19TQ1JJUFRALgotCShFWFRSQV9TQ1JJUFRTKTogTmV3IHZhciwgZm9yIHlhY2MuCi0KLQkqIGRhdGEveWFjYy5jICh5eWVycmxhYjEpOiBPbWl0IGF0dHJpYnV0ZSBpZiBfX2NwbHVzcGx1cyBpcyBkZWZpbmVkLAotCXNpbmNlIEdOVSBDKysgKGFzIG9mIDMuMi4xKSBkb2VzIG5vdCBhbGxvdyBhdHRyaWJ1dGVzIG9uIGxhYmVscy4KLQlQcm9ibGVtIHJlcG9ydGVkIGJ5IE5lbHNvbiBILiBGLiBCZWViZS4KLQotMjAwMy0wMS0wMyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIGxpYi9vYnN0YWNrLmggKF9fSU5UX1RPX1BUUikgW19fU1REQ19fXTogQ2FzdCByZXN1bHQgdG8KLQkodm9pZCAqKSB0byBhdm9pZCBkaWFnbm9zdGljIHdpdGggbmF0aXZlIGM4OSBvbiBTR0kgSVJJWCA2LjUKLQl3aGVuIGNvbXBpbGluZyBCaXNvbiAxLjg3NSdzIGBiaXRzZXQgYnNldCA9IG9ic3RhY2tfYWxsb2MKLQkoYm9ic3RhY2ssIGJ5dGVzKTsnLiAgUHJvYmxlbSByZXBvcnRlZCBieSBOZWxzb24gSC4gRi4gQmVlYmUuCi0KLQkqIHNyYy9zY2FuLXNrZWwubCAoUVBVVFMpOiBPbWl0IHJlZHVuZGFudCBgOycgZnJvbSBtYWNybyBkZWZpbml0aW9uLgotCShbXkBcbl0pOiBSZW5hbWVkIGZyb20gW15AXG5dKyBzbyB0aGF0IHRoZSB0b2tlbiBidWZmZXIgZG9lcyBub3QKLQlncm93IHRvIGEgaHVnZSBzaXplIHdpdGggdHlwaWNhbCBpbnZvY2F0aW9uLgotCi0JKiBsaWIvaGFzaC5jIChfQm9vbCwgYm9vbCwgZmFsc2UsIHRydWUsIF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkKToKLQlVc2UgdGhlIHBhdHRlcm4gcmVjb21tZW5kZWQgYnkgQXV0b2NvbmYgMi41NywgZXhjZXB0IGFsc28gcHJvdGVjdAotCWFnYWluc3QgZG91YmxlLWRlZmluaXRpb24uCi0JKiBzcmMvc3lzdGVtLmg6IExpa2V3aXNlLgotCVBvcnRhYmlsaXR5IGlzc3VlcyByZXBvcnRlZCBieSBOZWxzb24gSC4gRi4gQmVlYmUuCi0KLQkqIGRhdGEvZ2xyLmMgKHl5Ym9vbCk6IFJlbmFtZWQgZnJvbSBib29sLCB0byBhdm9pZCBjb2xsaXNpb25zIGluIEMuCi0JQWxsIHVzZXMgY2hhbmdlZC4gIFByb3ZpZGUgYSBkZWZpbml0aW9uIGluIGJvdGggQyBhbmQgQysrLgotCSh5eXRydWUsIHl5ZmFsc2UpOiBEZWZpbmUgZXZlbiBpZiBkZWZpbmVkIChfX2NwbHVzcGx1cykuCi0KLQkqIGxpYi9iaXRzZXRfc3RhdHMuYyAoYml0c2V0X3N0YXRzX2xpc3QpOiBSZW1vdmUgdW51c2VkIHZhci4KLQlSZXBvcnRlZCBieSBOZWxzb24gSC4gRi4gQmVlYmUuCi0KLQkqIHNyYy9zY2FuLXNrZWwubCAoIkBvbGluZUAiKTogT3V0cHV0IGxpbmVubysxLCBub3QgbGluZW5vLgotCi0yMDAzLTAxLTAyICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogZGF0YS95YWNjLmMgKHl5ZXJybGFiMSk6IEFwcGVuZCBgOycgYWZ0ZXIgYXR0cmlidXRlLCB0bwotCXBhY2lmeSB0aGUgYnVnZ3kgInNtYXJ0IHByZXByb2Nlc3NvciIgaW4gTWFjT1MgMTAuMi4zLgotCUJ1ZyByZXBvcnRlZCBieSBOZWxzb24gSC4gRi4gQmVlYmUuCi0KLTIwMDMtMDEtMDEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBWZXJzaW9uIDEuODc1LgotCi0yMDAyLTEyLTMwICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogc3JjL3NjYW4tZ3JhbS5sICg8SU5JVElBTCxTQ19BRlRFUl9JREVOVElGSUVSLFNDX1BSRV9DT0RFPiIsIik6Ci0JTW92ZWQgaGVyZSBmcm9tLi4uCi0JKDxJTklUSUFMPiIsIik6IEhlcmUuICBUaGlzIGNhdXNlcyBzdHJheSAiLCIgdG8gYmUgdHJlYXRlZAotCW1vcmUgdW5pZm9ybWx5LgotCi0JKiBzcmMvc2Nhbi1ncmFtLmwgKDxTQ19CUkFDRURfQ09ERT4ifSIpOiBPdXRwdXQgIjsiIGJlZm9yZSB0aGUKLQlsYXN0IGJyYWNlIGluIGJyYWNlZCBjb2RlIHdoZW4gbm90IGluIFlhY2MgbW9kZSwgZm9yIGNvbXBhdGliaWxpdHkKLQl3aXRoIEJpc29uIDEuMzUuICBUaGlzIHJlc3VycmVjdHMgdGhlIDIwMDEtMTItMTUgcGF0Y2ggdG8KLQlzcmMvcmVhZGVyLmMuCi0KLQkqIHNyYy9yZWFkZXIuaCAoWVlERUNMKTogVXNlIFlZU1RZUEUsIG5vdCBpdHMgZGVwcmVjYXRlZCBhbGlhcwotCXl5c3R5cGUuICBUaGlzIGZvbGxvd3MgdXAgdGhlIDIwMDItMTItMjQgWVlTVFlQRSBidWcgZml4LgotCi0yMDAyLTEyLTI4ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogc3JjL3N5bXRhYi5jIChzeW1ib2xfbWFrZV9hbGlhcyk6IFNldCB0eXBlIG9mIFNZTVZBTCB0byBiZQotCXRoYXQgb2YgU1lNJ3MgdHlwZS4gIFRoaXMgZml4ZXMgRGViaWFuIGJ1ZyAxNjgwNjksIHJlcG9ydGVkIGJ5Ci0JVGhvbWFzIE9sc3Nvbi4KLQotMjAwMi0xMi0yOCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQlWZXJzaW9uIDEuNzVmLgotCi0JU3dpdGNoIGJhY2sgdG8gdGhlIFlhY2Mgc3R5bGUgb2YgY29uZmxpY3QgcmVwb3J0cywgdW5kb2luZyBzb21lCi0Jb2YgdGhlIDIwMDItMDctMzAgY2hhbmdlLgotCSogZG9jL2Jpc29uLnRleGluZm8gKFVuZGVyc3RhbmRpbmcpOiBVc2UgWWFjYyBzdHlsZSBmb3IKLQljb25mbGljdCByZXBvcnRzLiAgQWxzbywgdXNlIG5ldyB3YXkgb2YgbG9jYXRpbmcgcnVsZXMuCi0JKiBzcmMvY29uZmxpY3RzLmMgKGNvbmZsaWN0X3JlcG9ydCk6Ci0JUmVuYW1lZCBmcm9tIGNvbmZsaWN0X3JlcG9ydF95YWNjLCByZW1vdmluZyB0aGUgb2xkCi0JJ2NvbmZsaWN0X3JlcG9ydCcuICBUcmFuc2xhdGUgdGhlIGVudGlyZSBjb25mbGljdCByZXBvcnQgYXQgb25jZSwKLQlzbyB0aGF0IHdlIGRvbid0IGFzc3VtZSB0aGF0ICIsIiBoYXMgdGhlIHNhbWUgaW50ZXJwcmV0YXRpb24gaW4KLQlhbGwgbGFuZ3VhZ2VzLgotCShjb25mbGljdHNfb3V0cHV0KTogVXNlIFlhY2Mtc3R5bGUgY29uZmxpY3QgcmVwb3J0IGZvciBlYWNoIHN0YXRlLAotCWluc3RlYWQgb2Ygb3VyIG1vcmUtY29tcGxpY2F0ZWQgc3R5bGUuCi0JKGNvbmZsaWN0c19wcmludCk6IFVzZSBZYWNjLXN0eWxlIGNvbmZsaWN0IHJlcG9ydCwgZXhjZXB0IHByaW50Ci0JdGhlIGlucHV0IGZpbGUgbmFtZSB3aGVuIG5vdCBlbXVsYXRpbmcgWWFjYy4KLQkqIHRlc3RzL2NvbmZsaWN0cy5hdCAoVW5yZXNvbHZlZCBTUiBDb25mbGljdHMsIERlZmF1bHRlZAotCUNvbmZsaWN0ZWQgUmVkdWN0aW9uLCAlZXhwZWN0IG5vdCBlbm91Z2gsICVleHBlY3QgdG9vIG11Y2gsCi0JJWV4cGVjdCB3aXRoIHJlZHVjZSBjb25mbGljdHMpOiBTd2l0Y2ggdG8gWWFjYy1zdHlsZSBjb25mbGljdCByZXBvcnRzLgotCSogdGVzdHMvZXhpc3RpbmcuYXQgKEdOVSBDaW0gR3JhbW1hcik6IExpa2V3aXNlLgotCSogdGVzdHMvZ2xyLXJlZ3IxLmF0IChCYWRseSBDb2xsYXBzZWQgR0xSIFN0YXRlcyk6IExpa2V3aXNlLgotCi0JKiBzcmMvY29tcGxhaW4uYyAod2Fybl9hdCwgd2FybiwgY29tcGxhaW5fYXQsIGNvbXBsYWluLCBmYXRhbF9hdCwKLQlmYXRhbCk6IERvbid0IGludm9rZSBmZmx1c2g7IGl0J3Mgbm90IG5lZWRlZCBhbmQgaXQgbWlnaHQgZXZlbiBiZQotCWhhcm1mdWwgZm9yIHN0ZG91dCwgYXMgc3Rkb3V0IG1pZ2h0IG5vdCBiZSBvcGVuLgotCSogc3JjL3JlZHVjZS5jIChyZWR1Y2VfcHJpbnQpOiBMaWtld2lzZS4KLQotMjAwMi0xMi0yNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQlGaXggYSBidWcgd2hlcmUgZXJyb3IgbG9jYXRpb25zIHdlcmUgbm90IGJlaW5nIHJlY29yZGVkIGNvcnJlY3RseS4KLQlUaGlzIHByb2JsZW0gd2FzIG9yaWdpbmFsbHkgcmVwb3J0ZWQgYnkgUGF1bCBIaWxmaW5nZXIgaW4KLQk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAyLTExL21zZzAwMDg2Lmh0bWw+LgotCi0JKiBkYXRhL3lhY2MuYyAoeXlwYXJzZSk6IE5ldyBsb2NhbCB2YXIgeXlsZXJyc3AsIHRvIHJlY29yZCB0aGUKLQl0b3Agb2YgdGhlIGxvY2F0aW9uIHN0YWNrJ3MgZXJyb3IgbG9jYXRpb25zLgotCSh5eWVycmxhYik6IFNldCBpdC4gIFdoZW4gZGlzY2FyZGluZyBhIHRva2VuLCBwdXNoIGl0cyBsb2NhdGlvbgotCW9udG8geXlsZXJyc3Agc28gdGhhdCB3ZSBkb24ndCBsb3NlIHRyYWNrIG9mIHRoZSBlcnJvcidzIGVuZC4KLQkoeXllcnJsYWIxKTogTm93IGlzIG9ubHkgdGhlIHRhcmdldCBvZiBZWUVSUk9SLCBzbyB0aGF0IHdlIGNhbgotCXByb3Blcmx5IHJlY29yZCB0aGUgbG9jYXRpb24gb2YgdGhlIGFjdGlvbiB0aGF0IGZhaWxlZC4gIEZvciBHQ0MKLQkyLjkzIGFuZCBsYXRlciwgaW5zZXJ0IGFuIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkgdG8gYXZvaWQKLQlHQ0Mgd2FybmluZyBhYm91dCB5eWVycmxhYjEgYmVpbmcgdW51c2VkIGlmIFlZRVJST1IgaXMgdW51c2VkLgotCSh5eWVycmxhYjIpOiBOZXcgbGFiZWwsIHdoaWNoIHl5ZXJybGFiIG5vdyBmYWxscyB0aHJvdWdoIHRvLgotCUNvbXB1dGUgdGhlIGVycm9yJ3MgbG9jYXRpb24gYnkgYXBwbHlpbmcgWVlMTE9DX0RFRkFVTFQgdG8KLQl0aGUgbG9jYXRpb25zIG9mIGFsbCB0aGUgc3ltYm9scyB0aGF0IHdlbnQgaW50byB0aGUgZXJyb3IuCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoTG9jYXRpb24gRGVmYXVsdCBBY3Rpb24pOiBNZW50aW9uIHRoYXQKLQlZWUxMT0NfREVGQVVMVCBpcyBhbHNvIGludm9rZWQgZm9yIHN5bnRheCBlcnJvcnMuCi0JKiB0ZXN0cy9hY3Rpb25zLmF0IChfQVRfQ0hFQ0tfUFJJTlRFUl9BTkRfREVTVFJVQ1RPUik6Ci0JRXJyb3IgbG9jYXRpb25zIGluY2x1ZGUgdGhlIGxvY2F0aW9ucyBvZiBhbGwgdGhlIHRva2VucyB0aGF0IHdlcmUKLQlkaXNjYXJkZWQsIG5vdCBqdXN0IHRoZSBsYXN0IHRva2VuLgotCi0yMDAyLTEyLTI2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogc3JjL2ZpbGVzLmM6IEluY2x1ZGUgcXVvdGUuaC4KLQkoY29tcHV0ZV9vdXRwdXRfZmlsZV9uYW1lcyk6IFdhcm4gaWYgd2UgZGV0ZWN0IGNvbmZsaWN0aW5nCi0Jb3V0cHV0cyB0byB0aGUgc2FtZSBmaWxlLiAgVGhpcyBzaG91bGQgY2F0Y2ggdGhlIG1pc3VuZGVyc3RhbmRpbmcKLQlleGVtcGxpZmllZCBieSBEZWJpYW4gQnVnIDE2NTM0OSwgcmVwb3J0ZWQgYnkgQnJ1Y2UgU3RlcGhlbnMuLgotCi0JKiBzcmMvY29uZmxpY3RzLmMgKGNvbmZsaWN0c19wcmludCk6IElmIHRoZSB1c2VyIHNwZWNpZmllcwotCSIlZXhwZWN0IE4iLCByZXBvcnQgYW4gZXJyb3IgaWYgdGhlcmUgYXJlIGFueSByZWR1Y2UvcmVkdWNlCi0JY29uZmxpY3RzLiAgVGhpcyBpcyB3aGF0IHRoZSBtYW51YWwgc2F5cyBzaG91bGQgaGFwcGVuLgotCVRoaXMgZml4ZXMgRGViaWFuIGJ1ZyAxMzA4OTAsIHJlcG9ydGVkIGJ5IEFudGhvbnkgRGVSb2JlcnRpcy4KLQkqIHRlc3RzL2NvbmZsaWN0cy5hdCAoJWV4cGVjdCB3aXRoIHJlZHVjZSBjb25mbGljdHMpOiBOZXcgdGVzdC4KLQotCURvbid0IHVzZSBtNF9pbmNsdWRlIG9uIHJlbGF0aXZlIGZpbGUgbmFtZXMsIGFzIGl0IGRvZXNuJ3Qgd29yayBhcwotCWRlc2lyZWQgaWYgdGhlcmUgaGFwcGVucyB0byBiZSBhIGZpbGUgd2l0aCB0aGF0IG5hbWUgdW5kZXIgIi4iLgotCi0JKiBtNHN1Z2FyL3ZlcnNpb24ubTQ6IFJlbW92ZTsgaXQgd2FzIGluY2x1ZGVkIGJ1dCBpdCB3YXNuJ3QgdXNlZC4KLQkqIGRhdGEvTWFrZWZpbGUuYW0gKGRpc3RfbTRzdWdhcl9EQVRBKTogUmVtb3ZlIG00c3VnYXIvdmVyc2lvbi5tNC4KLQkqIGRhdGEvbTRzdWdhci9tNHN1Z2FyLm00OiBEb24ndCBpbmNsdWRlIG00c3VnYXIvdmVyc2lvbi5tNC4KLQkqIGRhdGEvZ2xyLmMsIGRhdGEvbGFscjEuY2MsIGRhdGEveWFjYy5jOiBEb24ndCBpbmNsdWRlIGMubTQuCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9za2VsZXRvbik6IFVzZSBmdWxsIHBhdGggbmFtZXMgd2hlbgotCXNwZWNpZnlpbmcgYSBmaWxlIHRvIGluY2x1ZGU7IGRvbid0IHJlbHkgb24gaW5jbHVkZSBwYXRoLCBhcwotCWl0J3MgdW5yZWxpYWJsZSB3aGVuIHRoZSB3b3JraW5nIGZpbGUgY29udGFpbnMgYSBmaWxlIHdpdGgKLQl0aGF0IG5hbWUuCi0KLTIwMDItMTItMjUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JUmVtb3ZlIG9ic29sZXRlIHJlZmVyZW5jZXMgdG8gYmlzb24uc2ltcGxlIGFuZCBiaXNvbi5oYWlyeS4KLQlQcm9ibGVtIG1lbnRpb25lZCBieSBBdWJpbiBNYWhlIGluCi0JPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9oZWxwLWJpc29uLzIwMDItMTIvbXNnMDAwMTAuaHRtbD4uCi0JKiBkYXRhL2dsci5jOiBDb21tZW50IGZpeC4KLQkqIGRvYy9iaXNvbi4xOiBSZW1vdmUgcmVmZXJlbmNlcy4gIEFsc28sIG1lbnRpb24gInlhY2MiLgotCi0JKiBzcmMvZ2V0YXJncy5jIChnZXRhcmdzKSBbTVNET1NdOiBEb24ndCBhc3N1bWUgb3B0YXJnICE9IE5VTEwKLQl3aXRoIC1nIG9wdGlvbi4KLQotCSogc3JjL3BhcnNlLWdyYW0ueSAoZGVjbGFyYXRpb24pOiBVc2UgZW51bSAicmVwb3J0X3N0YXRlcyIgcmF0aGVyCi0JdGhhbiBpdHMgbnVtZXJpYyB2YWx1ZSAxLgotCi0JKiBzcmMvc2Nhbi1za2VsLmwgKCJAb3V0cHV0ICIuKlxuKTogQ2xvc2UgYW55IG9sZCB5eW91dCBiZWZvcmUKLQlvcGVuaW5nIGEgbmV3IG9uZS4gIFRoaXMgZml4ZXMgRGViaWFuIGJ1ZyAxNjUzNDksIHJlcG9ydGVkIGJ5Ci0JQnJ1Y2UgU3RlcGhlbnMuCi0KLTIwMDItMTItMjQgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JVmVyc2lvbiAxLjc1ZS4KLQotCSogTWFrZWZpbGUubWFpbnQgKGN2cy11cGRhdGUpOiBEb24ndCBhc3N1bWUgdGhhdCB0aGUgc2hlbGwKLQlzdXBwb3J0cyAkKC4uLiksIGFzIFNvbGFyaXMgc2ggZG9lc24ndC4KLQotCSogc3JjL3BhcnNlLWdyYW0ueSAobGxvY19kZWZhdWx0KTogUmVtb3ZlIHRlc3QgZm9yIGVtcHR5Ci0Jbm9udGVybWluYWxzIGF0IHRoZSBlbmQsIHNpbmNlIGl0IGRpZG4ndCBjaGFuZ2UgdGhlIHJlc3VsdC4KLQotMjAwMi0xMi0yNCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQlJZiB0aGUgdXNlciBkb2VzIG5vdCBkZWZpbmUgWVlTVFlQRSBhcyBhIG1hY3JvLCBCaXNvbiBub3cgZGVjbGFyZXMgaXQKLQl1c2luZyB0eXBlZGVmIGluc3RlYWQgb2YgZGVmaW5pbmcgaXQgYXMgYSBtYWNyby4gIFBPU0lYIHJlcXVpcmVzIHRoaXMuCi0JRm9yIGNvbnNpc3RlbmN5LCBZWUxUWVBFIGlzIGFsc28gZGVjbGFyZWQgaW5zdGVhZCBvZiBkZWZpbmVkLgotCi0JJXVuaW9uIGRpcmVjdGl2ZXMgY2FuIG5vdyBoYXZlIGEgdGFnIGJlZm9yZSB0aGUgYHsnLCBlLmcuLCB0aGUKLQlkaXJlY3RpdmUgYCV1bmlvbiBmb28gey4uLn0nIG5vdyBnZW5lcmF0ZXMgdGhlIEMgY29kZQotCWB0eXBlZGVmIHVuaW9uIGZvbyB7IC4uLiB9IFlZU1RZUEU7JzsgdGhpcyBpcyBmb3IgWWFjYyBjb21wYXRpYmlsaXR5LgotCVRoZSBkZWZhdWx0IHVuaW9uIHRhZyBpcyBgWVlTVFlQRScsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggU29sYXJpcyA5Ci0JWWFjYy4gIEZvciBjb25zaXN0ZW5jeSwgWVlMVFlQRSdzIHN0cnVjdCB0YWcgaXMgbm93IGBZWUxUWVBFJwotCWluc3RlYWQgb2YgYHl5bHR5cGUnLgotCi0JYHl5c3R5cGUnIGFuZCBgeXlsdHlwZScgYXJlIG5vdyBvYnNvbGVzY2VudCBtYWNyb3MgaW5zdGVhZCBvZiBiZWluZwotCXR5cGVkZWZzIG9yIHRhZ3M7IHRoZXkgYXJlIG5vIGxvbmdlciBkb2N1bWVudGVkIGFuZCB3aWxsIGJlCi0Jd2l0aGRyYXduIGluIGEgZnV0dXJlIHJlbGVhc2UuCi0KLQkqIGRhdGEvZ2xyLmMgKGI0X2xvY2F0aW9uX3R5cGUpOiBSZW1vdmUuCi0JKFlZU1RZUEUpOiBSZW5hbWVkIGZyb20geXlzdHlwZS4KLQkoWVlTVFlQRV9JU19ERUNMQVJFRCk6IE5ldyBtYWNybywgdXNlZCB0byBwcmV2ZW50IGRvdWJsZS10eXBlZGVmLgotCShzdHJ1Y3QgWVlMVFlQRSk6IFJlbmFtZWQgZnJvbSBzdHJ1Y3QgeXlsdHlwZS4KLQkoWVlMVFlQRSk6IFJlbmFtZWQgZnJvbSB5eWx0eXBlLgotCSh5eWx0eXBlLCB5eXN0eXBlKTogTmV3IChhbmQgb2Jzb2xlc2NlbnQpIG1hY3JvcywKLQlmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KLQkqIGRhdGEveWFjYy5jOiBMaWtld2lzZS4KLQotCSogZGF0YS95YWNjLmMgKFlZU1RZUEUpOiBEZWNsYXJlIGFzIHVuaW9uIFlZU1RZUEUgaWYgdGhlIHVzZXIKLQlkb2VzIG5vdCBzcGVjaWZ5IGEgdW5pb24gdGFnLiAgVGhpcyBpcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoCi0JU29sYXJpcyA5IHlhY2MuCi0KLQkqIHNyYy9wYXJzZS1ncmFtLnkgKGFkZF9wYXJhbSk6IDJuZCBhcmcgaXMgbm93IGNoYXIgKiBub3QgY2hhcgotCWNvbnN0ICosIHNpbmNlIGl0IGlzIG5vdyBtb2RpZmllZCBieSBzdHJpcHBpbmcgc3Vycm91bmRpbmcgeyB9LgotCShjdXJyZW50X2JyYWNlZF9jb2RlKTogUmVtb3ZlLgotCShQRVJDRU5UX0RFU1RSVUNUT1IsIFBFUkNFTlRfUFJJTlRFUiwgUEVSQ0VOVF9VTklPTiwKLQlQRVJDRU5UX0xFWF9QQVJBTSwgUEVSQ0VOVF9QQVJTRV9QQVJBTSk6IENoYW5nZSBuYW1lcyB0byBpbmNsdWRlCi0JdHJhaWxpbmcgIiB7Li4ufSIuICBOb3cgb2YgdHlwZSA8Y2hhcnM+LgotCShncmFtbWFyX2RlY2xhcmF0aW9uKTogQWRqdXN0IHRvIGJ1bmRsZWQgdG9rZW5zLgotCShjb2RlX2NvbnRlbnQpOiBSZW1vdmU7IHN0cmlwcGluZyBpcyBub3cgZG9uZSBieSBhZGRfcGFyYW0uCi0JKHByaW50X3Rva2VuX3ZhbHVlKTogUHJpbnQgY29udGVudHMgb2YgYnVuZGxlZCB0b2tlbnMuCi0JKHRva2VuX25hbWUpOiBOZXcgZnVuY3Rpb24uCi0KLQkqIHNyYy9yZWFkZXIuaCAoYnJhY2VkX2NvZGUsIGN1cnJlbnRfYnJhY2VkX2NvZGUpOiBSZW1vdmUuCi0JKHRva2VuX25hbWUpOiBOZXcgZGVjbC4KLQotCSogc3JjL3NjYW4tZ3JhbS5sIChoYW5kbGVfZG9sbGFyLCBoYW5kbGVfYXQpOiBOb3cgdGFrZXMgaW50Ci0JdG9rZW5fdHlwZSwgbm90IGJyYWNlZF9jb2RlIGNvZGVfa2luZC4gIEFsbCB1c2VzIGNoYW5nZWQuCi0JKFNDX1BSRV9DT0RFKTogTmV3IHN0YXRlLCBmb3Igc2Nhbm5pbmcgYWZ0ZXIgYSBrZXl3b3JkIHRoYXQKLQloYXMgKG9yIHVzdWFsbHkgaGFzKSBhbiBpbW1lZGlhdGVseS1mb2xsb3dpbmcgYnJhY2VkIGNvZGUuCi0JKHRva2VuX3R5cGUpOiBOZXcgbG9jYWwgdmFyLCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIHRva2VuIHR5cGUKLQl0byByZXR1cm4gd2hlbiBzY2FubmluZyBicmFjZWQgY29kZS4KLQkoPElOSVRJQUw+IiVkZXN0cnVjdG9yIiwgPElOSVRJQUw+IiVsZXgtcGFyYW0iLAotCTxJTklUSUFMPiIlcGFyc2UtcGFyYW0iLCA8SU5JVElBTD4iJXByaW50ZXIiLAotCTxJTklUSUFMPiIldW5pb24iKTogU2V0IHRva2VuIHR5cGUgYW5kIEJFR0lOIFNDX1BSRV9DT0RFCi0JaW5zdGVhZCBvZiByZXR1cm5pbmcgYSB0b2tlbiB0eXBlIGltbWVkaWF0ZWx5LgotCSg8SU5JVElBTD4ieyIpOiBTZXQgdG9rZW4gdHlwZS4KLQkoPFNDX0JSQUNFRF9DT0RFPiJ9Iik6IFVzZSBpdC4KLQkoaGFuZGxlX2FjdGlvbl9kb2xsYXIsIGhhbmRsZV9hY3Rpb25fYXQpOiBOb3cgcmV0dXJucyBib29sCi0JaW5kaWNhdGluZyBzdWNjZXNzLiAgRmFpbCBpZiAhIGN1cnJlbnRfcnVsZTsgdGhpcyBwcmV2ZW50cyBhIGNvcmUgZHVtcC4KLQkoaGFuZGxlX3N5bWJvbF9jb2RlX2RvbGxhciwgaGFuZGxlX3N5bWJvbF9jb2RlX2F0KToKLQlSZW1vdmU7IG1lcmdlIGJvZHkgaW50byBjYWxsZXIuCi0JKGhhbmRsZV9kb2xsYXIsIGhhbmRsZV9hdCk6IENvbXBsYWluIGluIGludmFsaWQgY29udGV4dHMuCi0KLQkqIE5FV1MsIGRvYy9iaXNvbi50ZXhpbmZvOiBEb2N1bWVudCB0aGUgYWJvdmUuCi0JKiBORVdTOiBGaXggeWVhcnMgYW5kIHByb2dyYW0gbmFtZXMgaW4gY29weXJpZ2h0IG5vdGljZS4KLQotMjAwMi0xMi0xNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIE5FV1MsIGRvYy9iaXNvbi50ZXhpbmZvIChQYXJzZXIgRnVuY3Rpb24sIFB1cmUgQ2FsbGluZywgRXJyb3IKLQlSZXBvcnRpbmcsIFRhYmxlIG9mIFN5bWJvbHMpOiBPbWl0IG1lbnRpb25zIG9mICVsZXgtcGFyYW0gYW5kCi0JJXBhcnNlLXBhcmFtIGZyb20gdGhlIGRvY3VtZW50YXRpb24gZm9yIG5vdy4KLQotMjAwMi0xMi0xNSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQlVbmRvIG1vc3Qgb2YgdGhlIDIwMDItMTEtMTIgeXljaGFyIC0+IHl5dG9rZW4gcGF0Y2gsIGFzIGl0IGJyb2tlCi0JR0NDIDMuMi4xICh3aGljaCBkZXBlbmRzIG9uIHl5Y2hhciA9PSBZWUVNUFRZIHdoZW4gdGhlcmUgaXMgbm8KLQlsb29rYWhlYWQgc3ltYm9sLCBhbmQgd2hpY2ggc2V0cyB5eWNoYXIgaW4gcGFyc2VyIGFjdGlvbnMpIGFuZCBpdAotCWRpc2FncmVlZCB3aXRoIHRoZSBCaXNvbiBkb2N1bWVudGF0aW9uLiAgQnVnCi0JcmVwb3J0ZWQgYnkgQW5kcmV3IFdhbHJvbmQuCi0KLQkqIGRhdGEveWFjYy5jIChZWVRSQU5TTEFURSk6IERvbid0IGNoZWNrIGZvciBuZWdhdGl2ZSBhcmd1bWVudCwKLQlhcyB0aGUgY2FsbGVyIG5vdyBkb2VzIHRoYXQuCi0JKHl5Y2xlYXJpbiwgWVlCQUNLVVAsIHl5cGFyc2UpOiBVc2UgeXljaGFyLCBub3QgeXl0b2tlbi4KLQkoWVlFTVBUWSk6IFBhcmVudGhlc2l6ZSByaWdodCBoYW5kIHNpZGUsIHNpbmNlIG90aGVycyB1c2UgaXQuCi0JKHl5cGFyc2UpOiBEb24ndCBhc3N1bWUgdGhhdCBvdXIgZ2VuZXJhdGVkIGNvZGUgaXMgdGhlIG9ubHkgY29kZQotCXRoYXQgc2V0cyB5eWNoYXIuCi0KLTIwMDItMTItMTMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JVmVyc2lvbiAxLjc1ZC4KLQotCVBPU0lYIHJlcXVpcmVzIGEgInlhY2MiIGNvbW1hbmQuCi0JKiBzcmMvTWFrZWZpbGUuYW0gKGJpbl9TQ1JJUFRTKTogTmV3IG1hY3JvLCBmb3IgeWFjYy4KLQkoTU9TVExZQ0xFQU5GSUxFUyk6IEFkZCB5YWNjLgotCSh5YWNjKTogTmV3IHJ1bGUuCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoSW52b2NhdGlvbiwgQmlzb24gT3B0aW9ucyk6IE1lbnRpb24geWFjYwotCWFzIGFuIGFsaWFzIGZvciBiaXNvbiB5LgotCi0JKiBwby9MSU5HVUFTOiBBZGQgZGEuCi0KLQkqIHNyYy9nZXRhcmdzLmMgKF9fR05VX0xJQlJBUllfXykgW2xpbnRdOiBEZWZpbmUgdG8gd29yayBhcm91bmQKLQlwcm9ibGVtIHdpdGggbGF0ZXN0IDxnZXRvcHQuaD4uCi0JKEhBQ0tfRk9SX19fR05VX0xJQlJBUllfX19QUk9UT1RZUEUpOiBOZXcgbWFjcm8uCi0KLQkqIGRvYy9mZGwudGV4aTogVXBncmFkZSB0byAxLjIuCi0JKiBsaWIvYWxsb2NhLmMsIGxpYi9lcnJvci5jLCBsaWIvZ2V0b3B0LmMsIGxpYi9nZXRvcHQuaAotCWxpYi9nZXRvcHQxLmMsIGxpYi9nZXR0ZXh0LmgsIGxpYi9tZW1yY2hyLmMsIGxpYi9vYnN0YWNrLmMsCi0JbGliL29ic3RhY2suaCwgbGliL3N0cm5sZW4uYywgbGliL3VubG9ja2VkLWlvLmg6IFN5bmMgd2l0aAotCWdudWxpYi4KLQkqIGNvbmZpZy9pbnN0YWxsLXNoOiBTeW5jIHdpdGggYXV0b3Rvb2xzLgotCi0JRml4IGEgYmFkIGludGVyYWN0aW9uIHdpdGggZmxleCAyLjUuMjMgcmVwb3J0ZWQgYnkgQnJ1Y2UgTGlsbHkgaW4KLQk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAyLTExL21zZzAwMTE0Lmh0bWw+LgotCSogZGF0YS95YWNjLmMgKFlZTFRZUEUsIHN0cnVjdCB5eWx0eXBlKTogRG8gbm90IGRlZmluZSB1bmxlc3MKLQlsb2NhdGlvbnMgYXJlIHJlcXVlc3RlZC4KLQkodW5pb24geXlhbGxvYyk6IERvIG5vdCBkZXBlbmQgb24gWVlMVFlQRV9JU19UUklWSUFMIHVubGVzcwotCWxvY2F0aW9ucyBhcmUgcmVxdWVzdGVkLgotCi0yMDAyLTEyLTEyICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCVJlbW92ZSB1bnBvcnRhYmxlIGNhc3RzIGFuZCBzdG9yYWdlIGFsbG9jYXRpb24gdHJpY2tzLgotCVdoaWxlIHdlJ3JlIGF0IGl0LCByZW1vdmUgYWxtb3N0IGFsbCBjYXN0cywgc2luY2UgdGhleQotCXVzdWFsbHkgYXJlbid0IG5lZWRlZCBhbmQgYXJlIGEgc2lnbiBvZiB0cm91YmxlLgotCi0JKiBjb25maWd1cmUuYWMgKEFDX0NIRUNLX1RZUEVTKTogQ2hlY2sgZm9yIHVpbnRwdHJfdC4KLQotCSogc3JjL2Rlcml2ZXMuYyAoZGVyaXZlc19jb21wdXRlKTogRG8gbm90IHN1YnRyYWN0IE5UT0tFTlMgZnJvbQotCXRoZSBwb2ludGVyIERTRVQgcmV0dXJuZWQgYnkgbWFsbG9jOyB0aGlzIGlzbid0IHBvcnRhYmxlLgotCUluc3RlYWQsIGFsd2F5cyB1c2UgRFNFVFtpIC0gTlRPS0VOU10gcmF0aGVyIHRoYW4gRFNFVFtpXS4KLQlTaW1pbGFybHkgZm9yIERFUklWRVMuCi0JKiBzcmMvbGFsci5jIChzZXRfZ290b19tYXApOiBMaWtld2lzZSwgZm9yIEdPVE9fTUFQIGFuZCBURU1QX01BUC4KLQkqIHNyYy9udWxsYWJsZS5jIChudWxsYWJsZV9jb21wdXRlKTogTGlrZXdpc2UsIGZvciBSU0VUUyBhbmQgTlVMTEFCTEUuCi0JKiBzcmMvcmVkdWNlLmMgKHJlZHVjZV9ncmFtbWFyX3RhYmxlcyk6IExpa2V3aXNlLCBmb3Igbm9udGVybW1hcAotCi0JKiBzcmMvZGVyaXZlcy5jIChkZXJpdmVzX2NvbXB1dGUpOiBEbyBub3QgYm90aGVyIGludm9raW5nCi0JaW50X29mX3J1bGVfbnVtYmVyLCBzaW5jZSBydWxlIG51bWJlcnMgYXJlIGludGVnZXJzLgotCi0JKiBzcmMvZmlsZXMuYyAoY29uY2F0MiwgdHIsIGNvbXB1dGVfYmFzZV9uYW1lKTogVXNlIHhtYWxsb2MgKE4pCi0JcmF0aGVyIHRoYW4gWE1BTExPQyAoY2hhciwgTikuCi0KLQkqIHNyYy9maWxlcy5jIChmaWxlbmFtZV9zcGxpdCk6IFJld3JpdGUgdG8gYXZvaWQgY2FzdC4KLQotCSogc3JjL2dyYW0uaCAoc3ltYm9sX251bWJlcl9hc19pdGVtX251bWJlciwKLQlpdGVtX251bWJlcl9hc19zeW1ib2xfbnVtYmVyLCBydWxlX251bWJlcl9hc19pdGVtX251bWJlciwKLQlpdGVtX251bWJlcl9hc19ydWxlX251bWJlcik6Ci0JTm93IGlubGluZSBmdW5jdGlvbnMgcmF0aGVyIHRoYW4gbWFjcm9zLCB0byBhdm9pZCBjYXN0cy4KLQkqIHNyYy9zdGF0ZS5oIChzdGF0ZV9udW1iZXJfYXNfaW50KTogTGlrZXdpc2UuCi0JKiBzcmMvdGFibGVzLmMgKHN0YXRlX251bWJlcl90b192ZWN0b3JfbnVtYmVyLAotCXN5bWJvbF9udW1iZXJfdG9fdmVjdG9yX251bWJlcik6IExpa2V3aXNlLgotCi0JKiBzcmMvZ3JhbS5oIChpbnRfb2ZfcnVsZV9udW1iZXIpOiBSZW1vdmU7IG5vIGxvbmdlciB1c2VkLgotCi0JKiBzcmMvbGFsci5jIChhZGRfbG9va2JhY2tfZWRnZSk6IFVzZSBtYWxsb2MgcmF0aGVyIHRoYW4gY2FsbG9jLAotCXNpbmNlIHRoZSByZXN1bHRpbmcgc3RvcmFnZSBpcyBhbHdheXMgc3RvcmVkIGludG8uCi0KLQkqIHNyYy9tYWluLmMgKGFsbG9jYSkgW0NfQUxMT0NBXTogQWRkIGRlY2wgaGVyZSwgdGhlIG9ubHkgcGxhY2UKLQl3aGVyZSBpdCdzIG5lZWRlZC4KLQotCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlX200X291dHB1dCk6Ci0JTm93IGlubGluZS4gIFJldHVybiBib29sLCBub3QgaW50LgotCSogc3JjL3N0YXRlLmMgKHN0YXRlX2NvbXBhcmUpOiBMaWtld2lzZS4KLQkqIHNyYy9zeW10YWIuYyAoc3ltYm9sX2NoZWNrX2RlZmluZWQsCi0Jc3ltYm9sX2NoZWNrX2FsaWFzX2NvbnNpc3RlbmN5LCBzeW1ib2xfcGFjaywgc3ltYm9sX3RyYW5zbGF0aW9uLAotCWhhc2hfY29tcGFyZV9zeW1ib2wsIGhhc2hfc3ltYm9sKToKLQlMaWtld2lzZS4KLQkqIHNyYy91bmlxc3RyLmMgKHVuaXFzdHJfcHJpbnQpOiBMaWtld2lzZS4KLQkqIHNyYy9tdXNjbGVfdGFiLmMgKG11c2NsZV9tNF9vdXRwdXRfcHJvY2Vzc29yKToKLQlOZXcgZnVuY3Rpb24sIHRvIGF2b2lkIGNhc3RzLgotCSogc3JjL3N0YXRlLmMgKHN0YXRlX2NvbXBhcmF0b3IsIHN0YWdlX2hhc2hlcik6IExpa2V3aXNlLgotCSogc3JjL3N5bXRhYi5jIChzeW1ib2xfY2hlY2tfZGVmaW5lZF9wcm9jZXNzb3IsCi0Jc3ltYm9sX2NoZWNrX2FsaWFzX2NvbnNpc3RlbmN5X3Byb2Nlc3Nvciwgc3ltYm9sX3BhY2tfcHJvY2Vzc29yLAotCXN5bWJvbF90cmFuc2xhdGlvbl9wcm9jZXNzb3IsIGhhc2hfc3ltYm9sX2NvbXBhcmF0b3IsCi0JaGFzaF9zeW1ib2xfaGFzaGVyKTogTGlrZXdpc2UuCi0JKiBzcmMvdW5pcXN0ci5jICh1bmlxc3RyX3ByaW50X3Byb2Nlc3Nvcik6IExpa2V3aXNlLgotCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlc19tNF9vdXRwdXQpOgotCVVzZSBuZXcgZnVuY3Rpb25zIGluc3RlYWQgb2YgY2FzdGluZyBvbGQgZnVuY3Rpb25zIHVucG9ydGFibHkuCi0JKiBzcmMvc3RhdGUuYyAoc3RhdGVfaGFzaF9uZXcpOiBMaWtld2lzZS4KLQkqIHNyYy9zeW10YWIuYyAoc3ltYm9sc19uZXcsIHN5bWJvbHNfZG8sIHN5bWJvbHNfY2hlY2tfZGVmaW5lZCwKLQlzeW1ib2xzX3Rva2VuX3RyYW5zbGF0aW9uc19pbml0KToKLQlMaWtld2lzZS4KLQkqIHNyYy91bmlxc3RyLmMgKHVuaXFzdHJzX25ldywgaGFzaF9pbml0aWFsaXplLCB1bmlxc3Ryc19kbyk6IExpa2V3aXNlLgotCi0JKiBzcmMvb3V0cHV0LmMgKEdFTkVSQVRFX01VU0NMRV9JTlNFUlRfVEFCTEUpOiBVc2UgbG9uZyBsb2NhbAotCXZhciBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8gbG9uZywgdG8gYXZvaWQgY2FzdHMuCi0JKHByZXBhcmVfc3RhdGVzKTogVXNlIE1BTExPQyByYXRoZXIgdGhhbiBhbGxvY2EsIHNvIHRoYXQgd2UgZG9uJ3QKLQloYXZlIHRvIHdvcnJ5IGFib3V0IGFsbG9jYS4KLQkqIHNyYy9zdGF0ZS5jIChzdGF0ZV9oYXNoX2xvb2t1cCk6IExpa2V3aXNlLgotCi0JKiBzcmMvc2Nhbi1ncmFtLmwgKDxTQ19FU0NBUEVEX0NIQVJBQ1RFUj4iJyIpOiBVc2UgdW5zaWduZWQgY2hhcgotCWxvY2FsIHZhciBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8gdW5zaWduZWQgY2hhciwgdG8gYXZvaWQgY2FzdHMuCi0KLQkqIHNyYy9zdGF0ZS5jIChUUkFOU0lUSU9OU19BTExPQywgRVJSU19BTExPQywgUkVEVUNUSU9OU19BTExPQywKLQlTVEFURV9BTExPQyk6IFJlbW92ZS4KLQkodHJhbnNpdGlvbnNfbmV3LCBlcnJzX25ldywgcmVkdWN0aW9uc19uZXcsIHN0YXRlX25ldyk6IFVzZSBtYWxsb2MKLQlyYXRoZXIgdGhhbiBjYWxsb2MsIGFuZCB1c2Ugb2Zmc2V0b2YgdG8gYXZvaWQgYWxsb2NhdGluZyBzbGlnaHRseQotCXRvbyBtdWNoIHN0b3JhZ2UuCi0JKHN0YXRlX25ldyk6IEluaXRpYWxpemUgYWxsIG1lbWJlcnMuCi0KLQkqIHNyYy9zdGF0ZS5jIChzdGF0ZV9oYXNoKTogVXNlIHVuc2lnbmVkIGFjY3VtdWxhdG9yLCBub3Qgc2lnbmVkLgotCi0JKiBzcmMvc3ltdGFiLmMgKHN5bWJvbF9mcmVlKTogUmVtb3ZlOyB1bnVzZWQuCi0JKHN5bWJvbF9nZXQpOiBSZW1vdmUgY2FzdCBpbiBsaHMgb2YgYXNzaWdubWVudC4KLQkoc3ltYm9sc19kbyk6IE5vdyBzdGF0aWMuICBBY2NlcHQgZ2VuZXJpYyBhcmd1bWVudHMsIG5vdAotCWhhc2hpbmctcmVsYXRlZCBvbmVzLgotCi0JKiBzcmMvc3ltdGFiLmg6IChOVU1CRVJfVU5ERUZJTkVEKTogUmVtb3ZlIHVubmVjZXNzYXJ5IGNhc3QuCi0JKHN5bWJvbF9wcm9jZXNzb3IpOiBSZW1vdmUuCi0JKHN5bWJvbHNfZG8pOiBSZW1vdmUgZGVjbDsgbm93IHN0YXRpYy4KLQotCSogc3JjL3N5c3RlbS5oIChhbGxvY2EpOiBSZW1vdmU7IGRlY2wgbm8gbG9uZ2VyIG5lZWRlZC4KLQkoPHN0ZGRlZi5oPik6IEluY2x1ZGUsIGZvciBvZmZzZXRvZi4KLQkoPGludHR5cGVzLj4sIDxzdGRpbnQuaD4pOiBJbmNsdWRlIGlmIGF2YWlsYWJsZS4KLQkodWludHB0cl90KTogTmV3IHR5cGUsIGlmIHN5c3RlbSBsYWNrcyBpdC4KLQkoQ0FMTE9DLCBNQUxMT0MsIFJFQUxMT0MpOiBOZXcgbWFjcm9zLgotCUFsbCB1c2VzIG9mIFhDQUxMT0MsIFhNQUxMT0MsIGFuZCBYUkVBTExPQyBjaGFuZ2VkIHRvIHVzZSB0aGVzZQotCW5ldyBtYWNyb3MuCi0KLQkqIHNyYy90YWJsZXMuYyAodGFibGVfc2l6ZSk6IE5vdyBpbnQsIHRvIHBhY2lmeSBHQ0MuCi0JKHRhYmxlX2dyb3csIHRhYmxlX25pbmZfcmVtYXApOiBVc2Ugc2lnbmVkIHRhYmxlIHNpemUuCi0JKHNhdmVfcm93KTogRG9uJ3QgYm90aGVyIGluaXRpYWxpemluZyBsb2NhbHMgd2hlbiBub3QgbmVlZGVkLgotCShkZWZhdWx0X2dvdG8sIGdvdG9fYWN0aW9ucywgcGFja192ZWN0b3IpOiBSZW1vdmUgdW5uZWNlc3NhcnkgY2FzdHMuCi0JKiBzcmMvdW5pcXN0ci5jIChoYXNoX2NvbXBhcmVfdW5pcXN0cik6ICBMaWtld2lzZS4KLQotCSogc3JjL3ZjZy5oOiBDb3JyZWN0IG1pc3NwZWxsaW5ncy4KLQotCSogc3JjL3ZjZ19kZWZhdWx0cy5oIChHX0NNQVgpOiBOb3cgSU5UX01BWC4KLQotCi0JKiBzcmMvZ2V0YXJncy5jIChnZXRhcmdzKTogRG9uJ3QgYXNzdW1lIEVPRiA9PSAtMS4KLQotMjAwMi0xMi0wOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQlDaGFuZ2UgaWRlbnRpZmllciBzcGVsbGluZ3MgdG8gYXZvaWQgY29sbGlzaW9ucyB3aXRoIG5hbWVzCi0JdGhhdCBhcmUgcmVzZXJ2ZWQgYnkgUE9TSVguCi0KLQlEb24ndCB1c2UgbmFtZXMgZW5kaW5nIGluIF90LCBzaW5jZSBQT1NJWCByZXNlcnZlcyB0aGVtLgotCUZvciBjb25zaXN0ZW5jeSwgcmVtb3ZlIF9lIGFuZCBfcyBlbmRpbmdzIC0tIHRoZXkncmUgd2VyZW4ndAotCW5lZWRlZCB0byByZW1vdmUgYW1iaWd1aXR5LiAgQWxsIHVzZXMgY2hhbmdlZC4KLQkqIHNyYy91bmlxc3RyLmggKHVuaXFzdHIpOiBSZW5hbWVkIGZyb20gdW5pcXN0cl90LCB3aGljaCBpbgotCXR1cm4gd2FzIGp1c3QgcmVuYW1lZCBmcm9tIHN0cnVuaXFfdC4KLQkqIHNyYy91bmlxc3RyLmMgKHVuaXFzdHJfcHJvY2Vzc29yKTogUmVuYW1lZCBmcm9tIHN0cnVuaXFfcHJvY2Vzc29yLAotCXdoaWNoIGluIHR1cm4gd2FzIGp1c3QgcmVuYW1lZCBmcm9tIHN0cnVuaXFfcHJvY2Vzc29yX3QuCi0JKGhhc2hfY29tcGFyZV91bmlxc3RyKTogUmVuYW1lZCBmcm9tIGhhc2hfY29tcGFyZV9zdHJ1bmlxLCB3aGljaAotCWluIHR1cm4gd2FzIHJlbmFtZWQgZnJvbSBoYXNoX2NvbXBhcmVfc3RydW5pcV90LgotCSogc3JjL0xSMC5jIChzdHJ1Y3Qgc3RhdGVfbGlzdCk6IFJlbmFtZWQgZnJvbSBzdHJ1Y3Qgc3RhdGVfbGlzdF9zLgotCShzdGF0ZV9saXN0KTogUmVuYW1lZCBmcm9tIHN0YXRlX2xpc3RfdC4KLQkqIHNyYy9hc3NvYy5oIChhc3NvYyk6IFJlbmFtZWQgZnJvbSBhc3NvY190LgotCSogc3JjL2NvbmZsaWN0cy5jIChlbnVtIGNvbmZsaWN0X3Jlc29sdXRpb24pOiBSZW5hbWVkIGZyb20KLQllbnVtIGNvbmZsaWN0X3Jlc29sdXRpb25fZS4KLQkqIHNyYy9kZXJpdmVzLmMgKHN0cnVjdCBydWxlX2xpc3QpOiBSZW5hbWVkIGZyb20gc3RydWN0IHJ1bGVfbGlzdF9zLgotCShydWxlX2xpc3QpOiBSZW5hbWVkIGZyb20gcnVsZV9saXN0X3QuCi0JKiBzcmMvZ2V0YXJncy5oIChlbnVtIHRyYWNlKTogUmVuYW1lZCBmcm9tIGVudW0gdHJhY2VfZS4KLQkoZW51bSByZXBvcnQpOiBSZW5hbWVkIGZyb20gZW51bSByZXBvcnRfZS4KLQkqIHNyYy9ncmFtLmggKGl0ZW1fbnVtYmVyKTogUmVuYW1lZCBmcm9tIGl0ZW1fbnVtYmVyX3QuCi0JKHJ1bGVfbnVtYmVyKTogUmVuYW1lZCBmcm9tIHJ1bGVfbnVtYmVyX3QuCi0JKHN0cnVjdCBydWxlX3MpOiBSZW1vdmUgdGhlICJydWxlX3MiIHBhcnQ7IG5vdCB1c2VkLgotCShydWxlKTogUmVuYW1lZCBmcm9tIHJ1bGVfdC4KLQkocnVsZV9maWx0ZXIpOiBSZW5hbWVkIGZyb20gcnVsZV9maWx0ZXJfdC4KLQkqIHNyYy9sYWxyLmMgKHN0cnVjdCBnb3RvX2xpc3QpOiBSZW5hbWVkIGZyb20gc3RydWN0IGdvdG9fbGlzdF9zLgotCShnb3RvX2xpc3QpOiBSZW5hbWVkIGZyb20gZ290b19saXN0X3QuCi0JKiBzcmMvbGFsci5oIChnb3RvX251bWJlcik6IFJlbmFtZWQgZnJvbSBnb3RvX251bWJlcl90LgotCSogc3JjL2xvY2F0aW9uLmggKGxvY2F0aW9uKTogUmVuYW1lZCBmcm9tIGxvY2F0aW9uX3QuCi0JKiBzcmMvbXVzY2xlX3RhYi5jIChtdXNjbGVfZW50cnkpOiBSZW5hbWVkIGZyb20gbXVzY2xlX2VudHJ5X3QsCi0JYW5kIG1vdmVkIGhlcmUgZnJvbToKLQkqIHNyYy9tdXNjbGVfdGFiLmggKG11c2NsZV9lbnRyeV90KTogaGVyZS4KLQkqIHNyYy9udWxsYWJsZS5jIChzdHJ1Y3QgcnVsZV9saXN0KTogUmVuYW1lZCBmcm9tIHN0cnVjdCBydWxlX2xpc3Rfcy4KLQkocnVsZV9saXN0KTogUmVuYW1lZCBmcm9tIHJ1bGVfbGlzdF90LgotCSogc3JjL3ByaW50X2dyYXBoLmMgKHN0YXRpY19ncmFwaCk6IFJlbmFtZWQgZnJvbSBncmFwaC4KLQkqIHNyYy9yZWFkZXIuaCAoYnJhY2VkX2NvZGUpOiBSZW5hbWVkIGZyb20gYnJhY2VkX2NvZGVfdC4KLQlSZW1vdmUgYnJhY2VfY29kZV9lIHRhZy4KLQkqIHNyYy9yZWxhdGlvbi5oIChyZWxhdGlvbl9ub2RlKTogUmVuYW1lZCBmcm9tIHJlbGF0aW9uX25vZGVfdC4KLQkocmVsYXRpb25fbm9kZXMpOiBSZW5hbWVkIGZyb20gcmVsYXRpb25fbm9kZXNfdC4KLQkocmVsYXRpb24pOiBSZW5hbWVkIGZyb20gcmVsYXRpb25fdC4KLQkqIHNyYy9zdGF0ZS5oIChzdGF0ZV9udW1iZXIpOiBSZW5hbWVkIGZyb20gc3RhdGVfbnVtYmVyX3QuCi0JKHN0cnVjdCBzdGF0ZSk6IFJlbmFtZWQgZnJvbSBzdHJ1Y3Qgc3RhdGVfcy4KLQkoc3RhdGUpOiBSZW5hbWVkIGZyb20gc3RhdGVfdC4KLQkodHJhbnNpdGlvbnMpOiBSZW5hbWVkIGZyb20gdHJhbnNpdGlvbnNfdC4gIFVudXNlZCAoYW5kCi0JbWlzc3BlbGxlZCkgdHJhbnN0aW9uX3MgdGFnIHJlbW92ZWQuCi0JKGVycnMpOiBSZW5hbWVkIGZyb20gZXJyc190LiAgVW51c2VkIGVycnNfcyB0YWcgcmVtb3ZlZC4KLQkocmVkdWN0aW9ucyk6IFJlbmFtZWQgZnJvbSByZWR1Y3Rpb25zX3QuICBVbnVzZWQgdGFnCi0JcmVkdWN0aW9uc19zIHJlbW92ZWQuCi0JKiBzcmMvc3ltbGlzdC5oIChzeW1ib2xfbGlzdCk6IFJlbmFtZWQgZnJvbSBzeW1ib2xfbGlzdF90LgotCShzdHJ1Y3Qgc3ltYm9sX2xpc3QpOiBSZW5hbWVkIGZyb20gc3RydWN0IHN5bWJvbF9saXN0X3MuCi0JKiBzcmMvc3ltdGFiLmggKHN5bWJvbF9udW1iZXIpOiBSZW5hbWVkIGZyb20gc3ltYm9sX251bWJlcl90LgotCShzdHJ1Y3Qgc3ltYm9sKTogUmVuYW1lZCBmcm9tIHN0cnVjdCBzeW1ib2xfcy4KLQkoc3ltYm9sKTogUmVuYW1lZCBmcm9tIHN5bWJvbF90LgotCSogc3JjL3RhYmxlcy5jICh2ZWN0b3JfbnVtYmVyKTogUmVuYW1lZCBmcm9tIHZlY3Rvcl9udW1iZXJfdC4KLQkoYWN0aW9uX251bWJlcik6IFJlbmFtZWQgZnJvbSBhY3Rpb25fdC4KLQkqIHNyYy90YWJsZXMuaCAoYmFzZV9udW1iZXIpOiBSZW5hbWVkIGZyb20gYmFzZV90LgotCSogc3JjL3ZjZy5oIChlbnVtIGNvbG9yKTogUmVuYW1lZCBmcm9tIGVudW0gY29sb3JfZS4KLQkoZW51bSB0ZXh0bW9kZSk6IFJlbmFtZWQgZnJvbSBlbnVtIHRleHRtb2RlX2UuCi0JKGVudW0gc2hhcGUpOiBSZW5hbWVkIGZyb20gZW51bSBzaGFwZV9lLgotCShzdHJ1Y3QgY29sb3JlbnRyeSk6IFJlbmFtZWQgZnJvbSBzdHJ1Y3QgY29sb3JlbnRyeV9zLgotCShzdHJ1Y3QgY2xhc3NuYW1lKTogUmVuYW1lZCBmcm9tIHN0cnVjdCBjbGFzc25hbWVfcy4KLQkoc3RydWN0IGluZm9uYW1lKTogUmVuYW1lZCBmcm9tIHN0cnVjdCBpbmZvbmFtZV9zLgotCShlbnVtIGxheW91dGFsZ29yaXRobSk6IFJlbmFtZWQgZnJvbSBlbnVtIGxheW91dGFsZ29yaXRobV9lLgotCShlbnVtIGRlY2lzaW9uKTogUmVuYW1lZCBmcm9tIGVudW0gZGVjaXNpb25fZS4KLQkoZW51bSBvcmllbnRhdGlvbik6IFJlbmFtZWQgZnJvbSBlbnVtIG9yaWVudGF0aW9uX2UuCi0JKGVudW0gYWxpZ25tZW50KTogUmVuYW1lZCBmcm9tIGVudW0gYWxpZ25tZW50X2UuCi0JKGVudW0gYXJyb3dfbW9kZSk6IFJlbmFtZWQgZnJvbSBlbnVtIGFycm93X21vZGVfZS4KLQkoZW51bSBjcm9zc2luZ190eXBlKTogUmVuYW1lZCBmcm9tIGVudW0gY3Jvc3NpbmdfdHlwZV9lLgotCShlbnVtIHZpZXcpOiBSZW5hbWVkIGZyb20gZW51bSB2aWV3X2UuCi0JKHN0cnVjdCBub2RlKTogUmVuYW1lZCBmcm9tIHN0cnVjdCBub2RlX3MuCi0JKG5vZGUpOiBSZW5hbWVkIGZyb20gbm9kZV90LgotCShlbnVtIGxpbmVzdHlsZSk6IFJlbmFtZWQgZnJvbSBlbnVtIGxpbmVzdHlsZV9lLgotCShlbnVtIGFycm93c3R5bGUpOiBSZW5hbWVkIGZyb20gZW51bSBhcnJvd3N0eWxlX2UuCi0JKHN0cnVjdCBlZGdlKTogUmVuYW1lZCBmcm9tIHN0cnVjdCBlZGdlLgotCShlZGdlKTogUmVuYW1lZCBmcm9tIGVkZ2VfdC4KLQkoc3RydWN0IGdyYXBoKTogUmVuYW1lZCBmcm9tIHN0cnVjdCBncmFwaF9zLgotCShncmFwaCk6IFJlbmFtZWQgZnJvbSBncmFwaF90LgotCSogdGVzdHMvY2FsYy5hdCAoX0FUX0RBVEFfQ0FMQ19ZLCBTaW1wbGUgTEFMUiBDYWxjdWxhdG9yKToKLQlSZW5hbWUgdmFsdWVfdCAtPiB2YWx1ZS4KLQkqIHRlc3RzL2lucHV0LmF0IChUb3J0dXJpbmcgdGhlIFNjYW5uZXIpOiBSZW5hbWUgdmFsdWVfdCAtPiB2YWx1ZSwKLQl2YWx1ZV90X2FzX3l5c3R5cGUgLT4gdmFsdWVfYXNfeXlzdHlwZS4KLQotCURvbid0IGluY2x1ZGUgPGVycm5vLmg+IGluIHRoZSBtYWluc3RyZWFtIGNvZGUsIHNpbmNlIGl0Ci0JcmVzZXJ2ZXMgRVtBLVowLTldKiBhbmQgd2Ugd2FudCB0byB1c2Ugc3ltYm9scyBsaWtlICdFUVVBTFMnLgotCSogbGliL2dldC1lcnJuby5jLCBsaWIvZ2V0LWVycm5vLmg6IE5ldyBmaWxlcy4KLQkqIGxpYi9NYWtlZmlsZS5hbSAobGliYmlzb25fYV9TT1VSQ0VTKTogQWRkIGdldC1lcnJuby5oLAotCWdldC1lcnJuby5jLgotCSogc3JjL2ZpbGVzLmMgKHhmb3BlbiwgeGZjbG9zZSk6IFVzZSBnZXRfZXJybm8gaW5zdGVhZCBvZiBlcnJuby4KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3NrZWxldG9uKTogTGlrZXdpc2UuCi0JKiBzcmMvc2Nhbi1ncmFtLmwgKDxJTklUSUFMPntpbnR9KTogVXNlIHNldF9lcnJubyBhbmQgZ2V0X2Vycm5vCi0JaW5zdGVhZCBvZiBlcnJuby4KLQkoPFNDX0VTQ0FQRURfU1RSSU5HLFNDX0VTQ0FQRURfQ0hBUkFDVEVSPlxceFswLTlhYmNkZWZBQkNERUZdKyk6Ci0JTGlrZXdpc2UuCi0JKGhhbmRsZV9hY3Rpb25fZG9sbGFyLCBoYW5kbGVfYWN0aW9uX2F0KTogTGlrZXdpc2UuCi0JKiBzcmMvc3lzdGVtLmg6IERvIG5vdCBpbmNsdWRlIDxlcnJuby5oPi4KLQkoVEFCX0VYVCk6IFJlbmFtZWQgZnJvbSBFWFRfVEFCLgotCShPVVRQVVRfRVhUKTogUmVuYW1lZCBmcm9tIEVYVF9PVVRQVVQuCi0KLQlBdm9pZCBzdHJbYS16XSosIHNpbmNlIDxzdHJpbmcuaD4gcmVzZXJ2ZXMgdGhhdCBuYW1lIHNwYWNlLgotCUNoYW5nZSBhbGwgaW5zdGFuY2VzIG9mICJzdHJ1bmlxIiBpbiBuYW1lcyB0byAidW5pcXN0ciIsIGFuZAotCWxpa2V3aXNlIGZvciAiU1RSVU5JUSIgYW5kICJVTklRU1RSIi4KLQkqIHNyYy91bmlxc3RyLmM6IFJlbmFtZWQgZnJvbSBzcmMvc3RydW5pcS5jLgotCSogc3JjL3VuaXFzdHIuaDogUmVuYW1lZCBmcm9tIHNyYy9zdHJ1bmlxLmguCi0JKiBzcmMvTWFrZWZpbGUuYW0gKGJpc29uX1NPVVJDRVMpOiBBZGp1c3QgdG8gdGhlc2UgcmVuYW1pbmdzLgotCSogc3JjL2ZpbGVzLmMgKHN0cnN1ZmZpeCk6IFJlbW92ZTsgdW51c2VkLgotCShjb25jYXQyKTogUmVuYW1lZCBmcm9tIHN0cmluZ2FwcGVuZC4gIE5vdyBzdGF0aWMuCi0JKiBzcmMvZmlsZXMuaCAoc3Ryc3VmZml4LCBzdHJpbmdhcHBlbmQpOiBSZW1vdmU7IHVudXNlZC4KLQkqIHNyYy9wYXJzZS1ncmFtLnkgKDxjaGFycz4pOiBSZW5hbWVkIGZyb20gPHN0cmluZz4uCi0JKDx1bmlxc3RyPik6IFJlbmFtZWQgZnJvbSA8c3RydW5pcT4uCi0JKiBzcmMvc2Nhbi1ncmFtLmwgKG9ic3RhY2tfZm9yX3N0cmluZyk6IFJlbmFtZWQgZnJvbSBzdHJpbmdfb2JzdGFjay4KLQkqIHNyYy92Y2cuaCAoc3RydWN0IG5vZGVfcy5leHBhbmQpOiBSZW5hbWVkIGZyb20gc3RydWN0IG5vZGVfcy5zdHJldGNoLgotCShzdHJ1Y3QgZ3JhcGhfcy5leHBhbmQpOiBSZW5hbWVkIGZyb20gc3RydWN0IGdyYXBoX3Muc3RyZXRjaC4KLQkqIHNyYy92Y2dfZGVmYXVsdHMuaCAoR19FWFBBTkQpOiBSZW5hbWVkIGZyb20gR19TVFJFVENILgotCShHX0xPTkdfU1RSQUlHSFRfUEhBU0UpOiBSZW5hbWVkIGZyb20gR19TVFJBSUdIVF9QSEFTRS4KLQkoTl9FWFBBTkQpOiBSZW5hbWVkIGZyb20gTl9TVFJFVENILgotCi0JQXZvaWQgKl9NQVggYW5kICpfTUlOLCBzaW5jZSA8bGltaXRzLmg+IHJlc2VydmVzIHRoYXQgbmFtZSBzcGFjZS4KLQkqIGRhdGEveWFjYy5jIChZWVNUQUNLX0dBUF9NQVhJTVVNKTogUmVuYW1lZCBmcm9tIFlZU1RBQ0tfR0FQX01BWC4KLQkqIHNyYy9ncmFtLmggKElURU1fTlVNQkVSX01BWCwgSVRFTV9OVU1CRVJfTUlOLCBSVUxFX05VTUJFUl9NQVgpOgotCVJlbW92ZTsgdW51c2VkLgotCSogc3JjL2xhbHIuaCAoR09UT19OVU1CRVJfTUFYSU1VTSk6IFJlbmFtZWQgZnJvbSBHT1RPX05VTUJFUl9NQVguCi0JKiBzcmMvc3RhdGUuaCAoU1RBVEVfTlVNQkVSX01BWElNVU0pOiBSZW5hbWVkIGZyb20gU1RBVEVfTlVNQkVSX01BWC4KLQkqIHNyYy9zeW10YWIuaCAoU1lNQk9MX05VTUJFUl9NQVhJTVVNKTogUmVuYW1lZCBmcm9tIFNZTUJPTF9OVU1CRVJfTUFYLgotCSogc3JjL3RhYmxlcy5jIChWRUNUT1JfTlVNQkVSX01BWCwgVkVDVE9SX05VTUJFUl9NSU4pOiBSZW1vdmU7IHVudXNlZC4KLQkoQkFTRV9NQVhJTVVNKTogUmVuYW1lZCBmcm9tIEJBU0VfTUFYLgotCShCQVNFX01JTklNVU0pOiBSZW5hbWVkIGZyb20gQkFTRV9NSU4uCi0JKEFDVElPTl9NQVgpOiBSZW1vdmU7IHVudXNlZC4KLQkoQUNUSU9OX05VTUJFUl9NSU5JTVVNKTogUmVuYW1lZCBmcm9tIEFDVElPTl9NSU4uCi0JVW5uZWNlc3NhcnkgY2FzdHMgcmVtb3ZlZCBmcm9tIGFib3ZlIGRlZmluZXMuCi0KLQotCUZpeCBtaXNzcGVsbGluZyBpbiBuYW1lcy4KLQkqIHNyYy92Y2cuaCAoZW51bV9hbGlnbm1lbnRfZSk6IFJlbmFtZWQgZnJvbSBlbnVtX2FsaWduZW1lbnRfZS4KLQkqIHNyYy92Y2dfZGVmYXVsdHMuaCAoR19OT0RFX0FMSUdOTUVOVCk6IFJlbmFtZWQgZnJvbQotCUdfTk9ERV9BTElHTkVNRU5ULgotCi0KLQkqIGxpYi90aW1ldmFyLmMgKHRpbWV2YXJfcmVwb3J0KTogUmVuYW1lZCBmcm9tIHRpbWVfcmVwb3J0LAotCWZvciBjb25zaXN0ZW5jeSB3aXRoIG90aGVyIG5hbWVzLgotCSogbGliL3RpbWV2YXIuaCAodGltZXZhcl9yZXBvcnQpOiBOZXcgZGVjbC4KLQkqIHNyYy9zeXN0ZW0uaCAodGltZV9yZXBvcnQpOiBSZW1vdmU7IGRlY2wgaXMgbm93IGluIGxpYi90aW1ldmFyLmguCi0KLQotCVNvcnQgaW5jbHVkZS1maWxlIHVzZXMuCi0KLQlSZW9yZGVyIGFsbCBpbmNsdWRlIGZpbGVzIHVuZGVyIHNyYyB0byBiZSBpbiB0aGUgb3JkZXIgInN5c3RlbS5oIi4KLQl0aGVuIHRoZSAuLi9saWIgaW5jbHVkZSBmaWxlcyBpbiBhbmdsZSBicmFja2V0cyAoYWxwaGFiZXRpemVkKSwKLQl0aGVuIHRoZSAuIGluY2x1ZGUgZmlsZXMgaW4gZG91YmxlLXF1b3RlcyAoYWxwaGFiZXRpemVkKS4gIEZpeAotCWRlcGVuZGVuY3kgYnJlYWthZ2VzIGVuY291bnRlcmVkIGluIHRoaXMgcHJvY2VzcywgYXMgZm9sbG93czoKLQkqIHNyYy9jbG9zdXJlLmgsIHNyYy9kZXJpdmVzLmgsIHNyYy9zdGF0ZS5oOiBJbmNsdWRlICJncmFtLmgiLgotCSogc3JjL2NvbXBsYWluLmM6IERvbid0IGluY2x1ZGUgc3RkbGliLmgsIHN0cmluZy5oIF9MSUJDIHN0dWZmLgotCSogc3JjL3N0YXRlLmg6IEluY2x1ZGUgInN5bXRhYi5oIi4KLQotMjAwMi0xMi0wOCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIGRhdGEvZ2xyLmMsIGRhdGEvbGFscjEuY2MsIGRhdGEveWFjYy5jOiBEbyBub3QgdXNlIF9fZmlsZV9fLAotCXNpbmNlIHRoaXMgY2F1c2VzIHByb2JsZW1zIHdoZW4gX19maWxlX18gY29udGFpbnMgY2hhcmFjdGVyCi0Jc2VxdWVuY2VzIGxpa2UgIkAiIHRoYXQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5IGJ5IHNyYy9zY2FuLXNrZWwubC4KLQlJbnN0ZWFkLCBqdXN0IHVzZSB0aGUgZmlsZSdzIGJhc2VuYW1lLiAgVGhpcyBmaXhlcyB0aGUgYnVnCi0JcmVwb3J0ZWQgYnkgTWFydGluIE1va3JlanMgaW4KLQk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAyLTEyL21zZzAwMDA3Lmh0bWw+LgotCi0yMDAyLTEyLTA2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCUFkZCBzdXBwb3J0IGZvciBydWxlcyB0aGF0IGRvIG5vdCBoYXZlIHRyYWlsaW5nIHNlbWljb2xvbnMsIGFzCi0JUE9TSVggcmVxdWlyZXMuICBJbXByb3ZlIHRoZSBxdWFsaXR5IG9mIGxvY2F0aW9ucyBpbiBCaXNvbgotCWRpYWdub3N0aWNzLgotCi0JKiBzcmMvbG9jYXRpb24uYzogSW5jbHVkZSA8cXVvdGVhcmcuaD4uCi0JKGVtcHR5X2xvY2F0aW9uKTogTm93IGNvbnN0LgotCShsb2NhdGlvbl9wcmludCk6IE5ldyBmdW5jdGlvbi4gIEZvbGxvdyB0aGUgcmVjb21tZW5kYXRpb24gb2YgdGhlCi0JR05VIENvZGluZyBTdGFuZGFyZHMgZm9yIGxvY2F0aW9ucyB0aGF0IHNwYW4gZmlsZSBib3VuZGFyaWVzLgotCSogc3JjL2xvY2F0aW9uLmg6IERvIG5vdCBpbmNsdWRlIDxxdW90ZWFyZy5oPjsgbm8gbG9uZ2VyIG5lZWRlZC4KLQkoYm91bmRhcnkpOiBOZXcgdHlwZS4KLQkobG9jYXRpb25fdCk6IFVzZSBpdC4gIFRoaXMgYWxsb3dzIGxvY2F0aW9ucyB0byBzcGFuIGZpbGUgYm91bmRhcmllcy4KLQlBbGwgbWVtYmVyIHVzZXMgY2hhbmdlZDogZmlsZSAtPiBzdGFydC5maWxlIG9yIGVuZC5maWxlIChhcyBuZWVkZWQpLAotCWZpcnN0X2xpbmUgLT4gc3RhcnQubGluZSwgZmlyc3RfY29sdW1uIC0+IHN0YXJ0LmNvbHVtbiwKLQlsYXN0X2xpbmUgLT4gZW5kLmxpbmUsIGxhc3RfY29sdW1uIC0+IGVuZC5jb2x1bW4uCi0JKGVxdWFsX2JvdW5kYXJpZXMpOiBOZXcgZnVuY3Rpb24uCi0JKExPQ0FUSU9OX1JFU0VULCBMT0NBVElPTl9TVEVQKTogUmVtb3ZlLgotCShMT0NBVElPTl9QUklOVCk6IFJlbW92ZS4gIEFsbCBjYWxsZXJzIGNoYW5nZWQgdG8gdXNlIGxvY2F0aW9uX3ByaW50LgotCShlbXB0eV9sb2NhdGlvbik6IE5vdyBjb25zdC4KLQkobG9jYXRpb25fcHJpbnQpOiBOZXcgZGVjbC4KLQkqIHNyYy9wYXJzZS1ncmFtLnkgKGxsb2NfZGVmYXVsdCk6IE5ldyBmdW5jdGlvbiwgd2hpY2ggaGFuZGxlcwotCWVtcHR5IGxvY2F0aW9ucyBtb3JlIGFjY3VyYXRlbHkuCi0JKFlZTExPQ19ERUZBVUxUKTogVXNlIGl0LgotCSgldG9rZW4gQ09MT04pOiBSZW1vdmUuCi0JKCV0b2tlbiBJRF9DT0xPTik6IE5ldyB0b2tlbi4KLQkocnVsZXMpOiBVc2UgaXQuCi0JKGRlY2xhcmF0aW9ucywgcnVsZXMpOiBSZW1vdmUgdHJhaWxpbmcgc2VtaWNvbG9uLgotCShkZWNsYXJhdGlvbiwgcnVsZXNfb3JfZ3JhbW1hcl9kZWNsYXJhdGlvbik6Ci0JQWxsb3cgZW1wdHkgKCI7IikgZGVjbGFyYXRpb24uCi0JKHN5bWJvbF9kZWYpOiBSZW1vdmUgZW1wdHkgYWN0aW9uczsgbm8gbG9uZ2VyIG5lZWRlZC4KLQkocnVsZXNfb3JfZ3JhbW1hcl9kZWNsYXJhdGlvbik6IFJlbW92ZSB0cmFpbGluZyBzZW1pY29sb24uCi0JKHNlbWlfY29sb24ub3B0KTogUmVtb3ZlLgotCSogc3JjL3JlYWRlci5oOiBJbmNsdWRlIGxvY2F0aW9uLmguCi0JKHNjYW5uZXJfY3Vyc29yKTogTmV3IGRlY2wuCi0JKiBzcmMvcmVkdWNlLmMgKG5vbnRlcm1pbmFsc19yZWR1Y2UpOiBVc2Ugd2Fybl9hdCByYXRoZXIgdGhhbgotCXJvbGxpbmcgb3VyIG93bi4KLQkqIHNyYy9zY2FuLWdyYW0ubCAoWVlfVVNFUl9JTklUKTogSW5pdGlhbGl6ZSBzY2FubmVyX2N1cnNvciBpbnN0ZWFkCi0Jb2YgKmxvYy4KLQkoU1RFUCk6IFJlbW92ZS4gIE5vIGxvbmdlciBuZWVkZWQsIG5vdyB0aGF0IGFkanVzdF9sb2NhdGlvbiBkb2VzCi0JdGhlIHdvcmsuICBBbGwgdXNlcyByZW1vdmVkLgotCShzY2FubmVyX2N1cnNvcik6IE5ldyB2YXIuCi0JKGFkanVzdF9sb2NhdGlvbik6IFJlbmFtZWQgZnJvbSBleHRlbmRfbG9jYXRpb24uICBJdCBub3cgc2V0cwotCSpsb2MgYW5kIGFkanVzdHMgdGhlIHNjYW5uZXIgY3Vyc29yLiAgQWxsIHVzZXMgY2hhbmdlZC4KLQlEb24ndCBib3RoZXIgdGVzdGluZyBmb3IgQ1IuCi0JKGhhbmRsZV9zeW5jbGluZSk6IFJlbW92ZSBsb2NhdGlvbiBhcmc7IG5vdyB1cGRhdGVzIHNjYW5uZXIgY3Vyc29yLgotCUFsbCBjYWxsZXJzIGNoYW5nZWQuCi0JKHVuZXhwZWN0ZWRfZW5kX29mX2ZpbGUpOiBOb3cgYWNjZXB0cyBzdGFydCBib3VuZGFyeSBvZiB0b2tlbiBvcgotCWNvbW1lbnQsIG5vdCBsb2NhdGlvbi4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuICBVcGRhdGUgc2Nhbm5lciBjdXJzb3IsCi0Jbm90IHRoZSBsb2NhdGlvbi4KLQkoU0NfQUZURVJfSURFTlRJRklFUik6IE5ldyBzdGF0ZS4KLQkoY29udGV4dF9zdGF0ZSk6IFJlbmFtZWQgZnJvbSBjX2NvbnRleHQuICBBbGwgdXNlcyBjaGFuZ2VkLgotCShpZF9sb2MsIGNvZGVfc3RhcnQsIHRva2VuX3N0YXJ0KTogTmV3IGxvY2FsIHZhcnMuCi0JKDxJTklUSUFMLFNDX0FGVEVSX0lERU5USUZJRVI+KTogTmV3IGluaXRpYWwgY29udGV4dC4gIE1vdmUgYWxsCi0JcHJvY2Vzc2luZyBvZiBZYWNjIHdoaXRlIHNwYWNlIGFuZCBlcXVpdmFsZW50cyBoZXJlLgotCSg8SU5JVElBTD57aWR9KTogU2F2ZSBpZF9sb2MuICBCZWdpbiBzdGF0ZSBTQ19BRlRFUl9JREVOVElGSUVSCi0JaW5zdGVhZCBvZiByZXR1cm5pbmcgSUQgaW1tZWRpYXRlbHksIHNpbmNlIHdlIG5lZWQgdG8gc2VhcmNoIGZvcgotCWEgc3Vic2VxdWVudCBjb2xvbi4KLQkoPElOSVRJQUw+IiciLCAiXCIiKTogU2F2ZSB0b2tlbl9zdGFydC4KLQkoPElOSVRJQUw+IiV7IiwgInsiLCAiJSUiKTogU2F2ZSBjb2RlX3N0YXJ0LgotCSg8U0NfQUZURVJfSURFTlRJRklFUj4pOiBOZXcgc3RhdGUsIGxvb2tpbmcgZm9yIGEgY29sb24uCi0JKDxTQ19ZQUNDX0NPTU1FTlQ+LCA8U0NfQ09NTUVOVD4sIDxTQ19MSU5FX0NPTU1FTlQ+KToKLQlCRUdJTiBjb250ZXh0X3N0YXRlIGF0IGVuZCwgbm90IElOSVRJQUwuCi0JKDxTQ19FU0NBUEVEX1NUUklORz4iXCIiLCA8U0NfRVNDQVBFRF9DSEFSQUNURVI+IiciLAotCTxTQ19CUkFDRURfQ09ERT4ifSIsIDxTQ19QUk9MT0dVRT4iJX0iLCA8U0NfRVBJTE9HVUU+PDxFT0Y+Pik6Ci0JUmV0dXJuIGNvcnJlY3QgdG9rZW4gc3RhcnQuCi0JKDxTQ19CUkFDRURfQ09ERSxTQ19QUk9MT0dVRSxTQ19FUElMT0dVRT4pOiBTYXZlIHN0YXJ0IGJvdW5kYXJ5IHdoZW4KLQl0aGUgc3RhcnQgb2YgYSBjaGFyYWN0ZXIsIHN0cmluZyBvciBtdWx0aWxpbmUgY29tbWVudCBpcyBmb3VuZC4KLQkqIHRlc3RzL2NvbmZsaWN0cy5hdCAoUy9SIGluIGluaXRpYWwsIERlZmF1bHRlZCBDb25mbGljdGVkCi0JUmVkdWN0aW9uKTogQWRqdXN0IHJlcG9ydGVkIGxvY2F0aW9ucyB0byBtYXRjaCB0aGUgbW9yZS1wcmVjaXNlCi0JcmVzdWx0cyBub3cgZXhwZWN0ZWQuCi0JKiB0ZXN0cy9pbnB1dC5hdCAoSW52YWxpZCAkbiwgSW52YWxpZCBAbiwgVHlwZSBDbGFzaGVzKTogTGlrZXdpc2UuCi0JKiB0ZXN0cy9yZWR1Y2UuYXQgKFVzZWxlc3MgUnVsZXMsIFJlZHVjZWQgQXV0b21hdG9uLAotCVVuZGVyaXZhYmxlIFJ1bGVzKTogTGlrZXdpc2UuCi0JKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChJbnZhbGlkIGlucHV0cyk6IE5vIGxvbmdlciBgZXhwZWN0aW5nICI7IgotCW9yICJ8Iicgbm93IHRoYXQgc28gbWFueSBvdGhlciB0b2tlbnMgYXJlIGFsbG93ZWQgYnkgdGhlIG5ldyBncmFtbWFyLgotCi0JKiBzcmMvY29tcGxhaW4uaCAoY3VycmVudF9maWxlKTogUmVtb3ZlIGR1cGxpY2F0ZSBkZWNsOwotCWN1cnJlbnRfZmlsZSBpcyBub3cgb3duZWQgYnkgZmlsZXMuaC4KLQkqIHNyYy9jb21wbGFpbi5jLCBzcmMvc2Nhbi1ncmFtLmw6IEluY2x1ZGUgZmlsZXMuaC4KLQotMjAwMi0xMi0wNiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIGRhdGEvZ2xyLmMgKHl5X3JlZHVjZV9wcmludCk6IERvbid0IGFzc3VtZSB0aGF0IHl5cmxpbmVbeXlydWxlXQotCXByb21vdGVzIHRvIGludDsgaXQgbWlnaHQgYmUgdW5zaWduZWQgaW50LgotCSogZGF0YS95YWNjLmMgKHl5X3JlZHVjZV9wcmludCk6IExpa2V3aXNlLgotCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoVGFibGUgb2YgU3ltYm9scyk6IFlZRVJST1JfVkVSQk9TRSBzaG91bGQKLQliZSAjZGVmaW5lZCBpbiB0aGUgcHJvbG9ndWUsIG5vdCBpbiB0aGUgQmlzb24gZGVjbGFyYXRpb25zLgotCVRoaXMgZml4ZXMgRGViaWFuIEJ1ZyAxMDI4NzgsIHJlcG9ydGVkIGJ5IFNoYXVsIEthcmwuCi0KLTIwMDItMTItMDIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBjb25maWd1cmUuYWMgKEFDX1JFUExBQ0VfRlVOQ1MpOiBBZGQgc3RydG91bC4KLQkqIGxpYi9zdHJ0b3VsLmM6IE5ldyBmaWxlLCBmcm9tIGdudWxpYi4KLQlUaGlzIGZpeGVzIGEgcG9ydGluZyBidWcgcmVwb3J0ZWQgYnkgUGV0ZXIgS2xlaW4gaW4KLQk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAyLTEyL21zZzAwMDAwLmh0bWw+LgotCi0yMDAyLTExLTMwICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogc3JjL3NjYW4tZ3JhbS5sIChub19jcl9yZWFkLCBleHRlbmRfbG9jYXRpb24pOiBNb3ZlIHRvIGVwaWxvZ3VlLAotCWFuZCBwdXQgb25seSBhIGZvcndhcmQgZGVjbGFyYXRpb24gaW4gdGhlIHByb2xvZ3VlLiAgVGhpcyBpcyBmb3IKLQljb25zaXN0ZW5jeSB3aXRoIHRoZSBvdGhlciBzY2FubmVyIGhlbHBlciBmdW5jdGlvbnMuCi0KLQlUeXBlIGNsYXNoZXMgbm93IGdlbmVyYXRlIHdhcm5pbmdzLCBub3QgZXJyb3JzLCBzaW5jZSBpdAotCWFwcGVhcnMgdGhhdCBQT1NJWCBtYXkgYWxsb3cgc29tZSBncmFtbWFycyB3aXRoIHR5cGUgY2xhc2hlcy4KLQkqIHNyYy9yZWFkZXIuYyAoZ3JhbW1hcl9jdXJyZW50X3J1bGVfY2hlY2spOiBXYXJuIGFib3V0Ci0JdHlwZSBjbGFzaGVzIGluc3RlYWQgb2YgY29tcGxhaW5pbmcuCi0JKiB0ZXN0cy9pbnB1dC5hdCAoVHlwZSBDbGFzaGVzKTogRXhwZWN0IHdhcm5pbmdzLCBub3QgY29tcGxhaW50cy4KLQotCUFkZCBZYWNjIGxpYnJhcnksIHNpbmNlIFBPU0lYIHJlcXVpcmVzIGl0LgotCSogZG9jL2Jpc29uLnRleGluZm8gKFlhY2MgTGlicmFyeSk6IE5ldyBub2RlLiAgUmVnZW5lcmF0ZSB0b3AgbWVudS4KLQkqIGxpYi9NYWtlZmlsZS5hbSAobGliX0xJQlJBUklFUywgbGlieV9hX1NPVVJDRVMpOiBOZXcgbWFjcm9zLgotCSogbGliL21haW4uYywgbGliL3l5ZXJyb3IuYzogTmV3IGZpbGVzLgotCi0JZ3JhbV9lcnJvciBjYW4gYmUgc3RhdGljOyBpdCBuZWVkIG5vdCBiZSBleHRlcm4uCi0JKiBzcmMvcmVhZGVyLmggKGdyYW1fZXJyb3IpOiBSZW1vdmUgZGVjbC4KLQkqIHNyYy9wYXJzZS1ncmFtLnkgKGdyYW1fZXJyb3IpOiBOb3cgc3RhdGljLiAgQWRkIHN0YXRpYyBkZWNsLgotCShwcmludF90b2tlbl92YWx1ZSk6IE9taXQgcGFyYW1ldGVyIG5hbWVzIGZyb20gZm9yd2FyZCBkZWNsLAotCWZvciBjb25zaXN0ZW5jeS4KLQotMjAwMi0xMS0yOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvOiBFbXBoYXNpemUgdGhhdCB5eWxleCBhbmQgeXllcnJvciBtdXN0Ci0JYmUgZGVjbGFyZWQgYmVmb3JlIGJlaW5nIHVzZWQuICBFLmcuLCBvbmUgc2hvdWxkIHR5cGljYWxseQotCWRlY2xhcmUgdGhlbSBpbiB0aGUgcHJvbG9ndWUuICBVc2UgR05VIGNvZGluZyBzdHlsZSBpbiBleGFtcGxlcy4KLQlQdXQgImNvbnN0IiBjb25zaXN0ZW50bHkgYWZ0ZXIgdGhlIHR5cGUgaXQgbW9kaWZpZXMuICBNZW50aW9uCi0JdGhhdCBDOTkgc3VwcG9ydHMgImlubGluZSIuICBNZW50aW9uIHRoYXQgeXllcnJvciB0cmFkaXRpb25hbGx5Ci0JcmV0dXJucyAiaW50Ii4KLQotCSVwYXJzZS1wYXJhbSBhbmQgJWxleC1wYXJhbSBub3cgdGFrZSBqdXN0IG9uZSBhcmd1bWVudCwgdGhlCi0JZGVjbGFyYXRpb247IHRoZSBhcmd1bWVudCBuYW1lIGlzIGRlZHVjZWQgZnJvbSB0aGUgZGVjbGFyYXRpb24uCi0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvIChQYXJzZXIgRnVuY3Rpb24sIFB1cmUgQ2FsbGluZywgRXJyb3IKLQlSZXBvcnRpbmcsIFRhYmxlIG9mIFN5bWJvbHMpOiBEb2N1bWVudCB0aGlzLgotCSogc3JjL3BhcnNlLWdyYW0ueSAoYWRkX3BhcmFtKTogTmV3IGZ1bmN0aW9uLgotCShDT01NQSk6IFJlbW92ZS4KLQkoZGVjbGFyYXRpb24pOiBJbXBsZW1lbnQgbmV3IHJ1bGUgZm9yICVwYXJzZS1wYXJhbSBhbmQgJWxleC1wYXJhbS4KLQkqIHNyYy9zY2FuLWdyYW0ubDogIiwiIG5vdyBlbGljaXRzIGEgd2FybmluZywgcmF0aGVyIHRoYW4gYmVpbmcKLQlhIHRva2VuOyB0aGlzIGlzIG1vcmUgY29tcGF0aWJsZSB3aXRoIGJ5YWNjLgotCSogdGVzdHMvY2FsYy5hdCAoU2ltcGxlIExBTFIgQ2FsY3VsYXRvcik6IEFkb3B0IG5ldyBjb252ZW50aW9uLgotCi0yMDAyLTExLTI3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCVJlbmFtZSBpZGVudGlmaWVycyB0byBhdm9pZCByZWFsIGFuZCBwb3RlbnRpYWwgY29sbGlzaW9ucy4KLQotCSogZGF0YS9jLm00IChiNF95eXN5bXByaW50X2dlbmVyYXRlKTogeXlvdXQgLT4geXlvdXRwdXQsCi0JdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggbGV4IG1hY3JvIGRlc2NyaWJlZCBieSBCcnVjZSBMaWxseSBpbgotCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDItMTEvbXNnMDAxMTQuaHRtbD4uCi0JKiB0ZXN0cy9hY3Rpb25zLmF0IChfQVRfQ0hFQ0tfUFJJTlRFUl9BTkRfREVTVFJVQ1RPUik6IExpa2V3aXNlLgotCSogZG9jL2Jpc29uLnRleGluZm8gKFByb2xvZ3VlLCBUcmFjaW5nKTogeXlwcmludCAtPiBwcmludF90b2tlbl92YWx1ZS4KLQkqIHNyYy9wYXJzZS1ncmFtLnkgKHByaW50X3Rva2VuX3ZhbHVlKTogUmVuYW1lZCBmcm9tIHl5cHJpbnQuCi0JQWxsIHVzZXMgY2hhbmdlZC4KLQkoWVlQQVJTRV9QQVJBTSwgWVlMRVhfUEFSQU0sIHl5Y29udHJvbCk6IFJlbW92ZS4gIEFsbCB1c2VzIGNoYW5nZWQuCi0JVGhlIG5hbWUgInl5Y29udHJvbCIgdmlvbGF0ZXMgdGhlIG5hbWUgc3BhY2UgcnVsZXMsIGFuZCB0aGlzIHN0dWZmCi0Jd2Fzbid0IGJlaW5nIHVzZWQgYW55d2F5LgotCShpbnB1dCk6IFJlbW92ZSBhY3Rpb247IHRoaXMgc3R1ZmYgd2Fzbid0IGJlaW5nIHVzZWQuCi0JKGdyYW1fZXJyb3IpOiBSZW5hbWUgbG9jYWwgdmFyaWFibGUgeXlsbG9jIC0+IGxvYy4KLQkqIHNyYy9yZWFkZXIuaCAoc3RydWN0IGdyYW1fY29udHJvbF9zLCBncmFtX2NvbnRyb2xfdCk6IFJlbW92ZS4KLQkoWVlfREVDTCk6IERvbid0IHVzZSAieXkiIGF0IHN0YXJ0IG9mIGxvY2FsIHZhcmlhYmxlcy4KLQlBbGwgdXNlcyBjaGFuZ2VkLCBlLmcuLCB5eWxsb2MgLT4gbG9jLgotCSogc3JjL3NjYW4tZ3JhbS5sIChTVEVQKTogUmVuYW1lZCBmcm9tIFlZX1NURVAuICBBbGwgdXNlcyBjaGFuZ2VkLgotCShTVFJJTkdfR1JPVyk6IFJlbmFtZWQgZnJvbSBZWV9PQlNfR1JPVy4gIEFsbCB1c2VzIGNoYW5nZWQuCi0JKFNUUklOR19GSU5JU0gpOiBSZW5hbWVkIGZyb20gWVlfT0JTX0ZJTklTSC4gIEFsbCB1c2VzIGNoYW5nZWQuCi0JKFNUUklOR19GUkVFKTogUmVuYW1lZCBmcm9tIFlZX09CU19GUkVFLiAgQWxsIHVzZXMgY2hhbmdlZC4KLQotCSogc3JjL3BhcnNlLWdyYW0ueSAoZ3JhbV9lcnJvcik6IGxvYyBpcyBub3cgY29uc3QgKi4KLQkqIHNyYy9yZWFkZXIuaCAoZ3JhbV9lcnJvcik6IExpa2V3aXNlLgotCi0yMDAyLTExLTI0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCVZlcnNpb24gMS43NWMuCi0KLQkqIHRlc3RzL2FjdGlvbnMuYXQgKEFjdGlvbnMgYWZ0ZXIgZXJyb3JzKTogVXNlIGFuIG91dHB1dCBmb3JtYXQKLQltb3JlIHNpbWlsYXIgdG8gdGhhdCBvZiB0aGUgUHJpbnRlcnMgYW5kIERlc3RydWN0b3JzIHRlc3QuCi0JVGVzdCB0aGUgcG9zaXRpb24gb2YgdGhlICc7JyB0b2tlbiB0b28uCi0JKFByaW50ZXJzIGFuZCBEZXN0cnVjdG9ycyk6IExpa2V3aXNlLgotCShQcmludGVycyBhbmQgRGVzdHJ1Y3RvcnM6ICVnbHItcGFyc2VyKTogUmVtb3ZlIGZvciBub3csIHRvIGF2b2lkCi0JdW5uZWNlc3NhcmlseSBhbGFybWluZyBwZW9wbGUgd2hlbiB0aGUgdGVzdCBmYWlscy4KLQotCSogZGF0YS95YWNjLmMgKHl5ZXJybGFiMSk6IE1vdmUgdGhpcyBsYWJlbCBkb3duLCBzbyB0aGF0IHRoZQotCXBhcnNlciBkb2VzIG5vdCBkaXNjYXJkIHRoZSBsb29rYWhlYWQgdG9rZW4gaWYgdGhlIHVzZXIgY29kZQotCWludm9rZXMgWVlFUlJPUi4gIFRoaXMgY2hhbmdlIGlzIHJlcXVpcmVkIGZvciBQT1NJWCBjb25mb3JtYW5jZS4KLQotCSogbGliL2Vycm9yLmM6IFN5bmMgd2l0aCBnbnVsaWIuCi0KLTIwMDItMTEtMjIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBsaWIvcXVvdGVhcmcuYywgbGliL3F1b3RlYXJnLmg6IFN5bmMgd2l0aCBnbnVsaWIuCi0JKiBsaWIvbWJzd2lkdGguYywgbGliL21ic3dpZHRoLmg6IExpa2V3aXNlLgotCSogbGliL3htYWxsb2MuYzogTGlrZXdpc2UuCi0KLTIwMDItMTEtMjAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBsaWIvYXJnbWF0Y2guYywgbGliL2FyZ21hdGNoLmg6IFN5bmMgd2l0aCBnbnVsaWIuCi0KLTIwMDItMTEtMjAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JQXZvaWQgdXNlIG9mIDxhc3NlcnQuaD4sIGFzIHRoZSBHTlUgQ29kaW5nIFN0YW5kYXJkcyBoaW50IHRoYXQgb25lCi0Jc2hvdWxkIHVzZSBgaWYgKCEgeCkgYWJvcnQgKCk7JyByYXRoZXIgdGhhbiBgYXNzZXJ0ICh4KTsnLCBhbmQKLQlhbnl3YXkgaXQncyBvbmUgbGVzcyB0aGluZyB0byB3b3JyeSBhYm91dCBjb25maWd1cmluZy4KLQotCSogZGF0YS9nbHIuYywgbGliL2hhc2guYywgc3JjL3N5c3RlbS5oOiBEbyBub3QgaW5jbHVkZSA8YXNzZXJ0Lmg+LgotCSogdGVzdHMvYWN0aW9ucy5hdCAoX0FUX0NIRUNLX1BSSU5URVJfQU5EX0RFU1RSVUNUT1IpOiBMaWtld2lzZSwKLQlhbmQgcmVwbGFjZSBhbGwgaW5zdGFuY2VzIG9mIGFzc2VydCB3aXRoIGFib3J0LgotCSogdGVzdHMvY2FsYy5hdCAoX0FUX0RBVEFfQ0FMQ19ZKTogTGlrZXdpc2UuCi0JKiB0ZXN0cy9jeHgtdHlwZS5hdCAoX0FUX1RFU1RfR0xSX0NYWFRZUEVTKTogTGlrZXdpc2UuCi0KLQkqIGRhdGEvZ2xyLmMgKHl5ZG9BY3Rpb24sIHl5Z2xyUmVkdWNlLCB5eXNwbGl0U3RhY2ssIHl5cmVzb2x2ZVN0YXRlcywKLQl5eXJlc29sdmVBY3Rpb24sIHl5cHJvY2Vzc09uZVN0YWNrKTogVXNlIGFib3J0IHJhdGhlciB0aGFuIGFzc2VydC4KLQkqIGxpYi9oYXNoLmMgKGhhc2hfbG9va3VwLCBoYXNoX2dldF9maXJzdCwgaGFzaF9nZXRfbmV4dCwKLQloYXNoX2ZpbmRfZW50cnksIGhhc2hfcmVoYXNoLCBoYXNoX2luc2VydCk6IExpa2V3aXNlLgotCSogc3JjL2NvbmZsaWN0cy5jIChyZXNvbHZlX3NyX2NvbmZsaWN0KTogTGlrZXdpc2UuCi0JKiBzcmMvbGFsci5jIChzZXRfZ290b19tYXAsIG1hcF9nb3RvKTogTGlrZXdpc2UuCi0JKiBzcmMvbnVsbGFibGUuYyAobnVsbGFibGVfY29tcHV0ZSk6IExpa2V3aXNlLgotCSogc3JjL291dHB1dC5jIChwcmVwYXJlX3J1bGVzLCB0b2tlbl9kZWZpbml0aW9uc19vdXRwdXQpOiBMaWtld2lzZS4KLQkqIHNyYy9yZWFkZXIuYyAocGFja2dyYW0sIHJlYWRlcik6IExpa2V3aXNlLgotCSogc3JjL3N0YXRlLmMgKHN0YXRlX25ldywgc3RhdGVfZnJlZSwgc3RhdGVfdHJhbnNpdGlvbnNfc2V0LAotCXN0YXRlX3JlZHVjdGlvbl9maW5kKTogTGlrZXdpc2UuCi0JKiBzcmMvc3ltdGFiLmMgKHN5bWJvbF91c2VyX3Rva2VuX251bWJlcl9zZXQsIHN5bWJvbF9tYWtlX2FsaWFzLAotCXN5bWJvbF9wYWNrKTogTGlrZXdpc2UuCi0JKiBzcmMvdGFibGVzLmMgKGNvbmZsaWN0X3JvdywgcGFja192ZWN0b3IpOiBMaWtld2lzZS4KLQkqIHNyYy92Y2cuYyAoZ2V0X2NvbG9yX3N0ciwgZ2V0X3RleHRtb2RlX3N0ciwgZ2V0X3NoYXBlX3N0ciwKLQlnZXRfbGF5b3V0YWxnb3JpdGhtX3N0ciwgZ2V0X2RlY2lzaW9uX3N0ciwgZ2V0X29yaWVudGF0aW9uX3N0ciwKLQlnZXRfbm9kZV9hbGlnbmVtZW50X3N0ciwgZ2V0X2Fycm93X21vZGVfc3RyLCBnZXRfY3Jvc3NpbmdfdHlwZV9zdHIsCi0JZ2V0X3ZpZXdfc3RyLCBnZXRfbGluZXN0eWxlX3N0ciwgZ2V0X2Fycm93c3R5bGVfc3RyKTogTGlrZXdpc2UuCi0KLQkqIGxpYi9hcmdtYXRjaC5oIChBUlJBWV9DQVJESU5BTElUWSk6IERvIG5vdCBib3RoZXIgdG8gI3VuZGVmLgotCShBUkdNQVRDSF9DT05TVFJBSU5UKTogTmV3IG1hY3JvLgotCShBUkdNQVRDSF9BU1NFUlQpOiBVc2UgaXQuCi0KLQkqIHNyYy9zeXN0ZW0uaCAodmVyaWZ5KTogTmV3IG1hY3JvLgotCSogc3JjL2dldGFyZ3MuYyAodHJhY2VfYXJnbWF0Y2gsIHJlcG9ydF9hcmdtYXRjaCk6IFVzZSB2ZXJpZnkKLQlyYXRoZXIgdGhhbiBhc3NlcnQuCi0JKiBzcmMvdGFibGVzLmMgKHRhYmxlc19nZW5lcmF0ZSk6IExpa2V3aXNlLgotCi0JKiBzcmMvc3RydW5pcS5jIChzdHJ1bmlxX2Fzc2VydCk6IE5vdyByZXR1cm5zIHZvaWQsIGFuZCBhYm9ydHMKLQlpZiB0aGUgYXNzZXJ0aW9uIGlzIGZhbHNlLgotCShzdHJ1bmlxX2Fzc2VydF9wKTogUmVtb3ZlLgotCSogc3JjL3N0cnVuaXEuaDogTGlrZXdpc2UuCi0KLTIwMDItMTEtMTggIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBkYXRhL2dsci5jICh5eWdldExSQWN0aW9ucyk6IFJlcGxhY2UgYHl5aW5kZXgnIHdpdGgKLQlgeXl0YWJsZVt5eWluZGV4XScgdG8gZml4IHR5cG8gaW50cm9kdWNlZCBpbiBteSAyMDAyLTExLTA5IHBhdGNoLgotCVRoaXMgZml4ZXMgdGhlIHJlZ3Jlc3Npb24gd2l0aCBTdW4gT05FIFN0dWRpbyA3IGNjIHRoYXQgSSByZXBvcnRlZCBpbgotCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDItMTEvbXNnMDAwNzcuaHRtbD4uCi0KLTIwMDItMTEtMTggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoVHJhY2luZyk6IGB5eXByaW50JyBzaG91bGRuJ3QgcHJlcGVuZCBhCi0Jc3BhY2UuCi0JRnJvbSBUaW0gVmFuIEhvbGRlci4KLQotMjAwMi0xMS0xNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQlQYWNpZnkgU3VuIE9ORSBTdHVkaW8gNyBsaW50LiAgQWxzbywgcmVuYW1lICJQYXJzZUVycm9yIgotCXRvICJTeW50YXhFcnJvciIgZm9yIGNvbnNpc3RlbmN5IHdpdGggbXkgMjAwMi0xMS0xNSBjaGFuZ2UuCi0KLQkqIGRhdGEvZ2xyLmMgKFlZRFBSSU5URiwgWVlEU1lNUFJJTlQsIFlZRFNZTVBSSU5URikgWyFZWURFQlVHXTogRG8KLQlub3QgZGVmaW5lIHRvIHt9LCBzaW5jZSB0aGlzIGJyZWFrcyB0aGUgY29tbW9uIHVzZSBvZiBgWVlEUFJJTlRGCi0JKCguLi4pKTsnIGlmIGEgc2luZ2xlIHN0YXRlbWVudCBpcyBkZXNpcmVkIChlLmcuIGJlZm9yZSBgZWxzZScpLgotCVdvcmsgYXJvdW5kIEdDQyB3YXJuaW5ncyBieSBzdXJyb3VuZGluZyBjb3JyZXNwb25kaW5nIGNhbGxzIHdpdGgKLQl7fSBpZiBuZWVkZWQuCi0JKHl5aGFzUmVzb2x2ZWRWYWx1ZSk6IFJlbW92ZSB1bnVzZWQgZnVuY3Rpb24uCi0JKHl5bWVyZ2VPcHRpb25TZXRzLCB5eXJlc29sdlN0YWNrKTogVXNlIGBjb250aW51ZTsnIGZvciBlbXB0eQotCWxvb3AgYm9keS4KLQkoeXlyZXBvcnRTeW50YXhFcnJvcik6IFJlbmFtZWQgZnJvbSB5eXJlcG9ydFBhcnNlRXJyb3IuCi0JKHl5cmVjb3ZlclN5bnRheEVycm9yKTogUmVuYW1lZCBmcm9tIHl5cmVjb3ZlclBhcnNlRXJyb3IuCi0JQWxsIHVzZXMgY2hhbmdlZC4KLQkqIHRlc3RzL2NhbGMuYXQgKF9BVF9EQVRBX0NBTENfWSk6IE1ha2UgdmFycyBzdGF0aWMgaW5zdGVhZCBvZgotCWV4dGVybiB3aGVuIHBvc3NpYmxlLiAgUmVtb3ZlIHVudXNlZCBpbml0aWFsaXphdGlvbnMuCi0KLTIwMDItMTEtMTYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JQXVnbWVudCB0aGUgc2ltaWxhcml0eSBiZXR3ZWVuIEdMUiBhbmQgTEFMUiB0cmFjZXMuCi0KLQkqIGRhdGEveWFjYy5jICh5eV9zdGFja19wcmludCwgWVlfU1RBQ0tfUFJJTlQsIHl5X3JlZHVjZV9wcmludCkKLQkoWVlfUkVEVUNFX1BSSU5UKTogTmV3LgotCSh5eXBhcnNlKTogVXNlIHRoZW0uCi0JKiBkYXRhL2dsci5jICh5eV9yZWR1Y2VfcHJpbnQpOiBVc2UgWVlGUFJJTlRGLCBubyBuZWVkIGZvcgotCVlZRFBSSU5UIGhlcmUuCi0JKHl5Z2xyUmVkdWNlLCB5eXJlY292ZXJQYXJzZUVycm9yLCB5eXBhcnNlKTogRG9uJ3QgcmVwb3J0IHRoZQotCXN0YXRlIHJlYWNoZWQgYWZ0ZXIgdGhlIHJlZHVjdGlvbi9yZWNvdmVyeSwgc2luY2UuLi4KLQkoeXlwYXJzZSwgeXlwcm9jZXNzT25lU3RhY2spOiBSZXBvcnQgdGhlIHN0YXRlIHdlIGFyZSBlbnRlcmluZyBpbi4KLQotMjAwMi0xMS0xNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9nZXRhcmdzLmgsIHNyYy9nZXRhcmdzLmMgKHRyYWNlX2UsIHRyYWNlX2FyZ3MsIHRyYWNlX3R5cGVzKToKLQlBZGQgc3VwcG9ydCBmb3IgLS10cmFjZT1za2VsZXRvbi4KLQkqIHNyYy9zY2FuLXNrZWwubDogJW9wdGlvbiBkZWJ1Zy4KLQlTY2FuIHN0cmluZ3Mgb2Ygbm9uLUAgb3IgXG4gaW5zdGVhZCBvZiBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyLgotCShzY2FuX3NrZWwpOiBIYW5kbGUgdHJhY2Vfc2tlbGV0b24uCi0JKFFQVVRTKTogTmV3LgotCShAb3V0cHV0X3BhcnNlcl9uYW1lQCwgQG91dHB1dF9oZWFkZXJfbmFtZUApOiBgYFJlc3RvcmUnJyB0aGVpcgotCXN1cHBvcnQgKHVzZWQgdG8gYmUgTTQgbWFjcm9zKS4KLQkqIGRhdGEveWFjYy5jOiBRdW90ZSBsYXJnZXIgY2h1bmtzLCBhIGxhIGdsci5jLgotCSogZGF0YS9sYWxyMS5jYzogTGlrZXdpc2UuCi0JVGhlIGhlYWRlciBndWFyZHMgYXJlIG5vIGxvbmdlciBhdmFpbGFibGUsIHNvIHVzZSBzb21lIG90aGVyCi0Jc3RyaW5nIHRoYW4gYFlZTFNQX05FRURFRCcuCi0KLTIwMDItMTEtMTYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JTWFrZSB0aGUgYGBQcmludGVycyBhbmQgRGVzdHJ1Y3RvcnMnJyB0ZXN0IG1vcmUgdmVyYm9zZSwgdGFraW5nCi0JYHlhY2MuYycncyBiZWhhdmlvciBhcyAocG9zc2libHkgd3JvbmcpIHJlZmVyZW5jZS4KLQotCSogdGVzdHMvYWN0aW9ucy5hdCAoX0FUX0NIRUNLX1BSSU5URVJfQU5EX0RFU1RSVUNUT1IpOiBVc2UgcHJpbnRmCi0JaW5zdGVhZCBvZiBmcHJpbnQgb24gc3Rkb3V0LgotCVNldCBhbmQgcmVwb3J0IHRoZSBsYXN0X2xpbmUgb2YgdGhlIHN5bWJvbHMuCi0JQ29uc2lzdGVudGx5IGRpc3BsYXkgdmFsdWVzIGFuZCBsb2NhdGlvbnMuCi0KLTIwMDItMTEtMTYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBkYXRhL3lhY2MuYzogQXZvaWQgb3Zlci1xdW90aW5nIG9mIF9fbGluZV9fIGFuZCBfX2ZpbGVfXy4KLQotMjAwMi0xMS0xNSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIHRlc3RzL2FjdGlvbnMuYXQgKEFjdGlvbnMgYWZ0ZXIgZXJyb3JzKTogTmV3IHRlc3QgY2FzZS4KLQotCSogZGF0YS9nbHIuYywgZGF0YS9sYWxyMS5jYywgZGF0YS95YWNjLmNjLCBkb2MvYmlzb24udGV4aW5mbywKLQlzcmMvY29uZmxpY3RzLmMsIHNyYy9wYXJzZS1ncmFtLnksIHNyYy90YWJsZXMuYywgc3JjL3RhYmxlcy5oLAotCXRlc3RzL2FjdGlvbi5hdCwgdGVzdHMvY2FsYy5hdCwgdGVzdHMvY29uZmxpY3RzLmF0LAotCXRlc3RzL2N4eC10eXBlLmF0LCB0ZXN0cy9yZWdyZXNzaW9uLmF0OgotCSJwYXJzZSBlcnJvciIgLT4gInN5bnRheCBlcnJvciIgZm9yIFBPU0lYIGNvbXBhdGliaWxpdHkuCi0JInBhcnNpbmcgc3RhY2sgb3ZlcmZsb3cuLi4iIC0+ICJwYXJzZXIgc3RhY2sgb3ZlcmZsb3ciIHNvCi0JdGhhdCBjb2RlIG1hdGNoZXMgQmlzb24gZG9jdW1lbnRhdGlvbi4KLQotMjAwMi0xMS0xNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9wYXJzZS1ncmFtLnkgKGRlY2xhcmF0aW9uKTogSGF2ZSAlcGFyc2UtcGFyYW0gYW5kICVsZXgtcGFyYW0KLQl0YWtlIHR3byBCUkFDRURfQ09ERSwgbm90IHR3byBzdHJpbmdfY29udGVudC4KLQlGcmVlIHRoZSBzY2FubmVyJ3Mgb2JzdGFjayB3aGVuIHdlIGFyZSBkb25lLgotCShjb2RlX2NvbnRlbnQpOiBOZXcuCi0JKiB0ZXN0cy9jYWxjLmF0OiBBZGp1c3QuCi0JKiBkb2MvYmlzb24udGV4aW5mbzogQWRqdXN0LgotCUFsc28sIG1ha2Ugc3VyZSB0byBpbmNsdWRlIHRoZSBgLCcgZm9yIHRoZXNlIGRlY2xhcmF0aW9ucy4KLQotMjAwMi0xMS0xNSAgVGltIFZhbiBIb2xkZXIgIDx0aW0udmFuLmhvbGRlckBwYW5kb3JhLmJlPgotCi0JKiBtNC9wcmVyZXEubTQ6IFJlbW92ZWQgdGhlIGNvbW1lbnRlZCBqbV9QUkVSRVFfSEFTSAotCWRlZmluaXRpb247IGF2b2lkcyBwb3RlbnRpYWwgYXV0b3JlY29uZiBwcm9ibGVtcy4KLQotMjAwMi0xMS0xNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlBbHdheXMgY2hlY2sgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHl5cGFyc2UuCi0KLQkqIHRlc3RzL2NhbGMuYXQgKF9BVF9EQVRBX0NBTENfWSk6IEhhdmUgYG1haW4nIGV4aXQgd2l0aCB0aGUgdmFsdWUKLQlyZXR1cm5lZCBieSB5eXBhcnNlLgotCShfQVRfQ0hFQ0tfQ0FMQ19FUlJPUik6IFRha2UgdGhlIGV4cGVjdGVkIGV4aXQgdmFsdWUgYXMgYXJndW1lbnQuCi0JQWRqdXN0IGNhbGxzLgotCSogdGVzdHMvZ2xyLXJlZ3IxLmF0IChnbHItcmVncjEueSk6IEhhdmUgYG1haW4nIGV4aXQgd2l0aCB0aGUgdmFsdWUKLQlyZXR1cm5lZCBieSB5eXBhcnNlLgotCi0yMDAyLTExLTE0ICBQYXVsIEhpbGZpbmdlciAgPEhpbGZpbmdlckBDUy5CZXJrZWxleS5FRFU+Ci0KLQkqIGRhdGEvZ2xyLmMgKHl5RmFpbCk6IEFsd2F5cyBzZXQgeXllcnJmbGFnLiAgQ29ycmVjdHMgcmVncmVzc2lvbgotCW9uIGlucHV0LmF0IHRlc3QuCi0KLTIwMDItMTEtMTQgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9za2VsZXRvbik6IENhbGwgeGZvcGVuIGluc3RlYWQgb2YKLQlkdXBsaWNhdGluZyB4Zm9wZW4ncyBib2R5LgotCi0JRml4IGJ1Z3MgcmVwb3J0ZWQgYnkgTmVsc29uIEguIEYuIEJlZWJlIGluCi0JPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwMi0xMS9tc2cwMDA3OC5odG1sPi4KLQotCSogdGVzdHMvaGVhZGVycy5hdCAoQVRfVEVTVF9DUFBfR1VBUkRfSCk6IERvbid0IGFzc3VtZSB0aGF0Ci0JIiRDQyAtRSBmb28uaCIgaXMgYWxsb3dlZCwgYXMgdGhpcyBkb2Vzbid0IHdvcmsgd2l0aCB0aGUgUG9ydGxhbmQKLQlHcm91cCBjb21waWxlci4gIEluc3RlYWQsIHVzZSAiJENDIC1FIGJhci5jIi4gIEluY2x1ZGUgdGhlIC5oCi0JZmlsZSB0d2ljZSBpbiB0aGUgZ3JhbW1hciwgYXMgYW4gZXh0cmEgY2hlY2suCi0KLQkqIHRlc3RzL2lucHV0LmF0IChUb3J0dXJpbmcgdGhlIFNjYW5uZXIpOiBTdXJyb3VuZCB0aGUKLQliYWNrc2xhc2gtbmV3bGluZSB0ZXN0cyB3aXRoICIjaWYgMCIsIHRvIG1ha2UgaXQgbGVzcyBsaWtlbHkgdGhhdAotCXdlJ2xsIHJ1biBpbnRvIGNvbXBpbGVyIGJ1Z3MuICBCcmluZyBiYWNrIHNvbGl0YXJ5IFwgaW5zaWRlCi0JY29tbWVudCwgYnV0IGFkZCBhIGNsb3NpbmcgY29tbWVudCB0byB3b3JrIGFyb3VuZCBIUCBDIGJ1Zy4gIERvbid0Ci0JdGVzdCBiYWNrc2xhc2gtbmV3bGluZSBpbiBDIGNoYXJhY3RlciBjb25zdGFudC4KLQotMjAwMi0xMS0xNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHRlc3RzL3N5bmNsaW5lcy5hdCAoQVRfU1lOQ0xJTkVTX0NPTVBJTEUpOiBJZ25vcmUgdGhlIGV4aXQKLQlzdGF0dXMgb2YgdGhlIGNvbXBpbGVyLgotCUNhbGxpbmcgYGV4aXQgMScgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KLQlSZXBvcnRlZCBieSBOZWxzb24gSC4gRi4gQmVlYmUuCi0KLTIwMDItMTEtMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiB0ZXN0cy9hdGxvY2FsLmluIChDUFBGTEFHUyk6IFdlIGhhdmUgY29uZmlnLmguCi0JKiB0ZXN0cy90ZXN0c3VpdGUuYXQgKEFUX0RBVEFfR1JBTU1BUl9QUk9MT0dVRSwgQVRfREFUQV9HUkFNTUFSKToKLQlOZXcuCi0JKiB0ZXN0cy9hY3Rpb25zLmF0LCB0ZXN0cy9jYWxjLmF0LCB0ZXN0cy9jb25mbGljdHMuYXQsCi0JKiB0ZXN0cy9jeHgtdHlwZS5hdCwgdGVzdHMvZ2xyLXJlZ3IxLmF0LCB0ZXN0cy9oZWFkZXJzLmF0LAotCSogdGVzdHMvcmVncmVzc2lvbi5hdCwgdGVzdHMvdG9ydHVyZS5hdDogVXNlIHRoZW0gZm9yIGFsbCB0aGUKLQlncmFtbWFycyB0aGF0IGFyZSB0byBiZSBjb21waWxlZC4KLQkqIHRlc3RzL2N4eC10eXBlLmF0IChfQVRfVEVTVF9HTFJfQ0FMQyk6IFJlbmFtZSBhcy4uLgotCSogdGVzdHMvY3h4LXR5cGUuYXQgKF9BVF9URVNUX0dMUl9DWFhUWVBFUyk6IHRoaXMuCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoR0xSIFBhcnNlcnMpOiBEb2N1bWVudCBgaW5saW5lJy4KLQotMjAwMi0xMS0xNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvOiBWYXJpb3VzIGZvcm1hdHRpbmcgY2hhbmdlcyAoYWxpZ25tZW50cyBpbgotCXNhbXBsZXMsIGFkZGl0aW9uYWwgQGdyb3VwL0BlbmQgZ3JvdXAsIEdDUyBpbiBzYW1wbGVzLgotCVVzZSBAZGVmZm4gaW5zdGVhZCBvZiBzaW1wbGUgQHRhYmxlIHRvIGRlZmluZSB0aGUgZGlyZWN0aXZlcywKLQltYWNyb3MsIHZhcmlhYmxlcyBldGMuCi0KLTIwMDItMTEtMTMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JRml4IHNvbWUgYnVncyByZXBvcnRlZCBieSBBbGJlcnQgQ2hpbi1BLVlvdW5nIGluCi0JPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwMi0xMS9tc2cwMDA2Ni5odG1sPi4KLQotCSogdGVzdHMvaW5wdXQuYXQgKFRvcnR1cmluZyB0aGUgU2Nhbm5lcik6IERvbid0IGludm9rZSAiY2MgYS5jIGIuYwotCS1vIGMiOyB0aGUgSFAgQyBjb21waWxlciBjaGF0dGVycyBkdXJpbmcgY29tcGlsYXRpb24uCi0JSW5zdGVhZCwgaW52b2tlICJjYyAtYyBhLmMgLW8gYS5vOyBjYyAtYyBiLmMgLW8gYi5vOyBjYyBhLm8gYi5vIC1vIGMiLgotCSogdGVzdHMvaGVhZGVycy5hdCAoZXhwb3J0IFlZTFRZUEUpOiBMaWtld2lzZS4KLQotCSogdGVzdHMvaW5wdXQuYXQgKFRvcnR1cmluZyB0aGUgU2Nhbm5lcik6IFJlbW92ZSBsaW5lcyBjb250YWluaW5nCi0Jc29saXRhcnkgYmFja3NsYXNoZXMsIGFzIHRoZXkgdGlja2xlIGEgYnVnIGluIHRoZSBIUCBDIGNvbXBpbGVyLgotCi0JKiB0ZXN0cy9nbHItcmVncjEuYXQgKEJhZGx5IENvbGxhcHNlZCBHTFIgU3RhdGVzKTogQXZvaWQgLy8KLQljb21tZW50cywgc2luY2UgdGhleSdyZSBub3QgcG9ydGFibGUuICBVc2UgR05VIGNvZGluZyBzdHlsZS4KLQotMjAwMi0xMS0xMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEveWFjYy5jOiBMZWF2ZSBiaWdnZXIgY2h1bmtzIG9mIHF1b3RlZCB0ZXh0LgotCShZWURTWU1QUklOVEYpOiBOZXcuCi0JVXNlIGl0IHRvIHJlcG9ydCBzeW1ib2wgYWN0aXZpdGllcy4KLQkqIGRhdGEvZ2xyLmMgKFlZRFNZTVBSSU5URik6IE5ldy4KLQlVc2UgaXQuCi0KLTIwMDItMTEtMTIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JVmVyc2lvbiAxLjc1Yi4KLQotCSogZGF0YS9nbHIuYyAoeXlkb0FjdGlvbik6IFJldHVybiBZWVJFU1VMVFRBRywgbm90IGludC4KLQkoeXlnbHJSZWR1Y2UpOiBSZXR1cm4geXlvaywgbm90IDAuCi0JVGhpcyBzaG91bGQgYXZvaWQgdGhlIGVudW1lcmF0ZWQtdHlwZSB3YXJuaW5ncyByZXBvcnRlZAotCWJ5IE5lbHNvbiBILiBGLiBCZWViZSBpbgotCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDItMTEvbXNnMDAwNTcuaHRtbD4uCi0KLQkqIGxpYi9iYml0c2V0LmggKEJJVFNFVF9JTkxJTkUpOiBSZW1vdmUuCi0JKiBsaWIvYml0c2V0LmggWyEgQklUU0VUX0lOTElORV06IFJlbW92ZS4KLQkoYml0c2V0X3NldCwgYml0c2V0X3Jlc2V0LCBiaXRzZXRfdGVzdCk6IFJlbmFtZSBsb2NhbCB2YXJzCi0JdG8gYXZvaWQgc2hhZG93aW5nIHdhcm5pbmdzIGJ5IEdDQy4KLQotCSogZGF0YS9nbHIuYyAoaW5saW5lKTogUmVtb3ZlICNkZWZpbmUuICBJdCdzIHRoZSB1c2VyJ3MKLQlyZXNwb25zaWJpbGl0eSB0byAjZGVmaW5lIGl0IGF3YXksIGp1c3QgbGlrZSAnY29uc3QnLgotCVRoaXMgZml4ZXMgb25lIG9mIHRoZSBidWdzIHJlcG9ydGVkIGJ5IE5lbHNvbiBILiBGLiBCZWViZSBpbgotCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDItMTEvbXNnMDAwNTguaHRtbD4uCi0KLQkqIE1ha2VmaWxlLm1haW50IChwby1jaGVjayk6IFNjYW4gLmwgYW5kIC55IGZpbGVzIGluc3RlYWQgb2YgdGhlCi0JLmMgYW5kIHRoZSAuaCBmaWxlcyB0aGF0IHRoZXkgZ2VuZXJhdGUuICBUaGlzIGZpeGVzIHRoZSBidWcKLQlyZXBvcnRlZCBieSBUaW0gVmFuIEhvbGRlciBpbjoKLQk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwMi0xMS9tc2cwMDA2Mi5odG1sPgotCUxvb2sgZm9yIE5fIGFzIHdlbGwgYXMgZm9yIF8uICBUcnkgdG8gYXZvaWQgbWF0Y2hpbmcgI2RlZmluZSBmb3IKLQlOXyBhbmQgXy4KLQkqIHBvL1BPVEZJTEVTLmluOiBSZW1vdmUgc3JjL3BhcnNlLWdyYW0uYywgc3JjL3NjYW4tZ3JhbS5jLAotCXNyYy9zeXN0ZW0uaC4gIEFkZCBzcmMvcGFyc2UtZ3JhbS55LCBzcmMvc2Nhbi1ncmFtLmwuCi0JKiBzcmMvc2Nhbi1ncmFtLmw6IFJldmFtcCByZWd1bGFyIGV4cHJlc3Npb25zIHNvIHRoYXQgIiBhbmQgJwotCWRvIG5vdCBjb25mdXNlIHhnZXR0ZXh0LgotCi0JKiBzcmMvc3RydW5pcS5oIChzdHJ1bmlxX25ldyk6IERvIG5vdCBkZWNsYXJlIHRoZSByZXR1cm4gdHlwZQotCXRvIGJlICdjb25zdCc7IHRoaXMgdmlvbGF0ZXMgdGhlIEMgc3RhbmRhcmQuCi0JKiBzcmMvc3RydW5pcS5jIChzdHJ1bmlxX25ldyk6IExpa2V3aXNlLgotCi0yMDAyLTExLTEyICBBbGJlcnQgQ2hpbi1BLVlvdW5nIDxjaGluYUB0aGV3cml0dGVud29yZC5jb20+Ci0KLQkqIHNyYy9NYWtlZmlsZS5hbSAoTERBREQpOiBMaW5rICQoTElCSU5UTCkgbGFzdCB0byBhdm9pZCB0aGUKLQlkdXBsaWNhdGUgZGVmaW5pdGlvbiBvZiBvcHRpbmQgb24gVHJ1NjQgVU5JWCA0LjBEIHdpdGggdGhlIENvbXBhcQotCWxpbmtlci4KLQotMjAwMi0xMS0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIE1ha2VmaWxlLm1haW50OiBTeW5jIHdpdGggQXV0b2NvbmY6Ci0JKGxvY2FsX3VwZGF0ZXMpOiBOZXcuCi0KLTIwMDItMTEtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBwby9QT1RGSUxFUy5pbiAoc3JjL2xhbHIuYywgc3JjL3N0YXRlLmMpOiBSZW1vdmUKLQotMjAwMi0xMS0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHRlc3RzL2FjdGlvbnMuYXQgKF9BVF9DSEVDS19QUklOVEVSX0FORF9ERVNUUlVDVE9SKTogRGlzcGxheSB0aGUKLQlsb2NhdGlvbnMuCi0KLTIwMDItMTEtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2MubTQgKGI0X3l5c3ltcHJpbnRfZ2VuZXJhdGUpOiBQYXNzICp5eXZhbHVlcCB0byBZWVBSSU5ULAotCW5vdCB5eXZhbHVlLgotCi0yMDAyLTExLTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogdGVzdHMvYWN0aW9ucy5hdCAoQVRfQ0hFQ0tfUFJJTlRFUl9BTkRfREVTVFJVQ1RPUik6IE5ldy4KLQlVc2UgaXQgdG8gdGVzdCB0aGUgR0xSIHBhcnNlci4KLQotMjAwMi0xMS0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKGlucHV0LnkpOiBzL1lZRU9GL01ZRU9GLywgYXMgdGhlIHNrZWxldG9uCi0JZGVmaW5lcyBpdC4KLQkqIGRhdGEvZ2xyLmMgKHl5c3Rvcyk6IE5ldy4KLQkoYjRfeXlzeW1wcmludF9nZW5lcmF0ZSwgYjRfeXlkZXN0cnVjdF9nZW5lcmF0ZSk6IEludm9rZS4KLQkoWVlEU1lNUFJJTlQpOiBOZXcuCi0JKHl5dmFsKTogRG9uJ3QgZGVmaW5lIGl0LCBpdCBpcyBoYW5kbGVkIHZpYSBNNC4KLQkoeXlyZWNvdmVyUGFyc2VFcnJvcik6IEZyZWUgdmVyYm9zZWx5IHRoZSBkaXNjYXJkZWQgc3ltYm9scy4KLQkqIGRhdGEveWFjYy5jICh5eXN5bXByaW50KTogUmVtb3ZlLCByYXRoZXIuLi4KLQkoYjRfeXlzeW1wcmludF9nZW5lcmF0ZSk6IGludm9rZS4KLQkqIGRhdGEvYy5tNCAoYjRfeXlzeW1wcmludF9nZW5lcmF0ZSk6IE5ldy4KLQlBY2NlcHQgcG9pbnRlcnMgYXMgYXJndW1lbnRzLCBhcyBvcHBvc2VkIHRvIHRoZSB2ZXJzaW9uIGZyb20KLQl5YWNjLmMuCi0JKGI0X3l5ZGVzdHJ1Y3RfZ2VuZXJhdGUpOiBMaWtld2lzZS4KLQkqIHRlc3RzL2NhdGlvbnMuYXQgKFByaW50ZXJzIGFuZCBEZXN0cnVjdG9ycyk6IFVzZSBCaXNvbiBkaXJlY3RpdmVzCi0JaW5zdGVhZCBvZiBDUFAgbWFjcm9zLgotCURvbid0IHJlbHkgb24gaW50ZXJuYWwgZGV0YWlscy4KLQotMjAwMi0xMS0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvYy5tNCAoYjRfeXlkZXN0cnVjdF9nZW5lcmF0ZSwgYjRfc3ltYm9sX2FjdGlvbnMpOiBOZXcuCi0JKiBkYXRhL3lhY2MuYzogUmVuYW1lIHl5Y2hhcjEgYXMgeXl0b2tlbiwgYXMgaW4gZ2xyLmMuCi0JRG9uJ3Qgd29yayBvbiB5eWNoYXIgKGkuZS4sIGRvIHNldCBpdCB0byBZWUVNUFRZLCBkb24ndCBtYXRjaAotCWl0IGFnYWluc3QgWVlFTVBUWSBhbmQgc28gZm9ydGgpLCB3b3JrIG9uIHl5dG9rZW4gKGkuZS4sIHNldAotCWl0IHRvIFlZRU1QVFkgZXRjLikuCi0JKHl5ZGVzdHJ1Y3QpOiBSZXBsYWNlIHdpdGggYSBiNF95eWRlc3RydWN0X2dlbmVyYXRlIGludm9jYXRpb24uCi0JKGI0X3N5bWJvbF9hY3Rpb25zKTogUmVtb3ZlLgotCSogZGF0YS9nbHIuYyAoWVlUUkFOU0xBVEUpOiBBcyBmb3IgeWFjYy5jLCBpZiBuZWdhdGl2ZSwgaXQgc3RhbmRzCi0JZm9yIDAsIGVuZC1vZi1pbnB1dC4KLQotMjAwMi0xMS0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvIChEZXN0cnVjdG9yIERlY2wpOiBOZXcuCi0KLTIwMDItMTEtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvdGFibGVzLmMgKHRhYmxlc19nZW5lcmF0ZSk6IFVzZSBmcmVlIGZvciBwb2ludGVycyB0aGF0Ci0JY2Fubm90IGJlIE5VTEwsIG5vdCBYRlJFRS4KLQkocGFja192ZWN0b3IpOiBVc2UgYXNzZXJ0LCBub3QgZmF0YWwsIGZvciBib3VuZCB2aW9sYXRpb25zLgotCSogc3JjL3N0YXRlLmMgKHN0YXRlX25ldyk6IExpa2V3aXNlLgotCSogc3JjL3JlYWRlci5jIChyZWFkZXIpOiBMaWtld2lzZS4KLQkqIHNyYy9sYWxyLmMgKHNldF9nb3RvX21hcCk6IExpa2V3aXNlLgotCSogc3JjL2xvY2F0aW9uLmggKExPQ0FUSU9OX1BSSU5UKTogSWYgZmlyc3RfbGluZSBpcyAwLCBqdXN0IGlzc3VlCi0JdGhlIGZpbGUgbmFtZS4KLQotMjAwMi0xMS0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9zY2FuLWdyYW0ubCwgc3JjL3JlYWRlci5oIChzY2FubmVyX2xhc3Rfc3RyaW5nX2ZyZWUpOgotCVJlc3RvcmUuCi0JKiBzcmMvc2Nhbi1ncmFtLmwgKGxhc3Rfc3RyaW5nKTogSXMgZ2xvYmFsIHRvIHRoZSBmaWxlLCBub3QgdG8KLQl5eWxleC4KLQkqIHNyYy9wYXJzZS1ncmFtLnkgKGlucHV0KTogRG9uJ3QgYXBwZW5kIHRoZSBlcGlsb2d1ZSBoZXJlLAotCShlcGlsb2d1ZS5vcHQpOiBkbyBpdCBoZXJlLCBhbmQgZnJlZSB0aGUgc2Nhbm5lcidzIG9ic3RhY2suCi0JKiBzcmMvcmVhZGVyLmMgKGVwaWxvZ3VlX3NldCk6IFJlbmFtZSBhcy4uLgotCShlcGlsb2d1ZV9hdWdtZW50KTogdGhpcy4KLQkqIGRhdGEvYy5tNCAoYjRfZXBpbG9ndWUpOiBEZWZhdWx0cyB0byBlbXB0eS4KLQotMjAwMi0xMS0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9nZXRhcmdzLmMgKGxvbmdfb3B0aW9ucyk6IFJlbW92ZSBkdXBsaWNhdGVzLgotCSogc3JjL3Ztc2dldGFyZ3MuYywgc3JjL2J1aWxkLmNvbSwgc3JjL2Jpc29uLmNsZCwgc3JjL3Ztc2hscC5tYXI6Ci0JUmVtb3ZlLgotCSogZG9jL2Jpc29uLnJuaDogUmVtb3ZlLgotCSogZG9jL2Jpc29uLnRleGluZm8gKFZNUyBJbnZvY2F0aW9uKTogUmVtb3ZlLgotCi0yMDAyLTExLTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3N0cnVuaXEuaCwgc3JjL3N0cnVuaXEuYyAoc3RydW5pcV90KTogSXMgY29uc3QuCi0JKFNUUlVOSVFfRVEsIHN0cnVuaXFfYXNzZXJ0LCBzdHJ1bmlxX2Fzc2VydF9wKTogTmV3LgotCi0JVXNlIHN0cnVuaXEgZm9yIHN5bWJvbHMuCi0KLQkqIHNyYy9zeW10YWIuaCAoc3ltYm9sX3QpOiBUaGUgdGFnIG1lbWJlciBpcyBhIHN0cnVuaXEuCi0JKHN5bWJvbF90eXBlX3NldCk6IEFkanVzdC4KLQkqIHNyYy9zeW10YWIuYyAoc3ltYm9sX25ldyk6IFRha2VzIGEgc3RydW5pcS4KLQkoc3ltYm9sX2ZyZWUpOiBEb24ndCBmcmVlIHRoZSB0YWcgbWVtYmVyLgotCShoYXNoX2NvbXBhcmVfc3ltYm9sX3QsIGhhc2hfc3ltYm9sX3QpOiBSZW5hbWUgYXMuLi4KLQkoaGFzaF9jb21wYXJlX3N5bWJvbCwgaGFzaF9zeW1ib2wpOiB0aGVzZS4KLQlVc2UgdGhlIGZhY3QgdGhhdCB0YWdzIGFzIHN0cnVuaXFzLgotCShzeW1ib2xfZ2V0KTogVXNlIHN0cnVuaXFfbmV3LgotCSogc3JjL3N5bWxpc3QuaCwgc3JjL3N5bWxpc3QuYyAoc3ltYm9sX2xpc3Rfbl90eXBlX25hbWVfZ2V0KToKLQlSZXR1cm5zIGEgc3RybmlxLgotCSogc3JjL3JlYWRlci5oIChtZXJnZXJfbGlzdCwgZ3JhbW1hcl9jdXJyZW50bWVyZ2Vfc2V0KTogVGhlIG5hbWUKLQlhbmQgdHlwZSBtZW1iZXJzIGFyZSBzdHJ1bmlxcy4KLQkqIHNyYy9yZWFkZXIuYyAoZ2V0X21lcmdlX2Z1bmN0aW9uKQotCShncmFtbWFyX2N1cnJlbnRfcnVsZV9tZXJnZV9zZXQpOiBBZGp1c3QuCi0JKFRZUEUsIGN1cnJlbnRfdHlwZSk6IEFyZSBzdHJ1bmlxLgotCi0JVXNlIHN0cnVuaXEgZm9yIGZpbGUgbmFtZXMuCi0KLQkqIHNyYy9maWxlcy5oLCBzcmMvZmlsZXMuYyAoaW5maWxlKTogU3BsaXQgaW50by4uLgotCShncmFtbWFyX2ZpbGUsIGN1cnJlbnRfZmlsZSk6IHRoZXNlLgotCSogc3JjL3NjYW4tZ3JhbS5jIChZWV9VU0VSX0lOSVQsIGhhbmRsZV9zeW5jbGluZSk6IEFkanVzdC4KLQkqIHNyYy9yZWR1Y2UuYyAocmVkdWNlX3ByaW50KTogTGlrZXdpc2UuCi0JKiBzcmMvZ2V0YXJncy5jIChnZXRhcmdzKTogTGlrZXdpc2UuCi0JKiBzcmMvY29tcGxhaW4uaCwgc3JjL2NvbXBsYWluLmM6IExpa2V3aXNlLgotCSogc3JjL21haW4uYyAobWFpbik6IENhbGwgc3RydW5pcXNfbmV3IGVhcmx5IGVub3VnaCB0byB1c2UgaXQgZm9yCi0JZmlsZSBuYW1lcy4KLQlEb24ndCBmcmVlIHRoZSBpbnB1dCBmaWxlIG5hbWUuCi0KLTIwMDItMTEtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvc3ltdGFiLmMgKHN5bWJvbF9mcmVlKTogUmVtb3ZlIGRlYWQgZGVhY3RpdmF0ZWQgY29kZToKLQl0eXBlX25hbWUgYXJlIHByb3Blcmx5IHJlbW92ZWQuCi0JRG9uJ3QgdXNlIFhGUkVFIHRvIGZyZWUgaXRlbXMgdGhhdCBjYW5ub3QgYmUgTlVMTC4KLQkqIHNyYy9zdHJ1bmlxLmgsIHNyYy9zdHJ1bmlxLmM6IE5ldy4KLQkqIHNyYy9tYWluLmMgKG1haW4pOiBJbml0aWFsaXplL2ZyZWUgc3RydW5pcXMuCi0JKiBzcmMvcGFyc2UtZ3JhbS55ICgldW5pb24pOiBBZGQgYXN0cnVuaXEgbWVtYmVyLgotCSh5eXByaW50KTogQWRqdXN0LgotCSogc3JjL3NjYW4tZ3JhbS5sICg8e3RhZ30+KTogUmV0dXJuIGEgc3RydW5pcS4KLQlGcmVlIHRoZSBvYnN0YWNrIGJpdCB0aGF0IHVzZWQgdG8gc3RvcmUgaXQuCi0JKiBzcmMvc3ltdGFiLmggKHN5bWJvbF90KTogVGhlICd0eXBlX25hbWUnIG1lbWJlciBpcyBhIHN0cnVuaXEuCi0KLTIwMDItMTEtMTEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JUmV2YW1wIHRvIGZpeCBtYW55IChidXQgbm90IGFsbCkgb2YgdGhlIEMtIGFuZCBNNC1yZWxhdGVkIHF1b3RpbmcKLQlwcm9ibGVtcy4gIEFtb25nIG90aGVyIHRoaW5ncywgdGhpcyBmaXhlcyB0aGUgQmlzb24gYnVnIHJlcG9ydGVkCi0JYnkgSmFuIEh1Ymlja2Egd2hlbiBwcm9jZXNzaW5nIHRoZSBCYXNoIGdyYW1tYXI7IHNlZToKLQk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwMi0xMS9tc2cwMDAzOS5odG1sPgotCi0JVXNlIG5ldyBAIGVzY2FwZXMgY29uc2lzdGVudGx5LiAgUmVwcmVzZW50IGJyYWNrZXRzIHdpdGggQHsgYW5kIEB9Ci0JcmF0aGVyIHRoYW4gQDw6QCBhbmQgQDo+QCwgc2luY2UgdGhpcyB3b3JrcyBhIGJpdCBiZXR0ZXIgd2l0aCBkdW1iCi0JZWRpdG9ycyBsaWtlIHZpLiAgUmVwcmVzZW50IEAgd2l0aCBAQCwgc2luY2UgQCBpcyBub3cgY29uc2lzdGVudGx5Ci0JYW4gZXNjYXBlLiAgVXNlIEBvbGluZUAgYW5kIEBvZmlsZUAgcmF0aGVyIHRoYW4gX19vbGluZV9fIGFuZAotCV9fb2ZpbGVfXywgdG8gYXZvaWQgdW5leHBlY3RlZCBleHBhbnNpb25zLiAgU2ltaWxhcmx5LCB1c2UgQG91dHB1dAotCXJhdGhlciB0aGFuICNvdXRwdXQuCi0KLQkqIGRhdGEvYy5tNCAoYjRfY29weXJpZ2h0KTogT21pdCBmaWxlIG5hbWUgZnJvbSBjb21tZW50LCBzaW5jZQotCXRoZSBmaWxlIG5hbWUgY291bGQgY29udGFpbiAiKi8iLgotCShiNF9zeW5jbGluZXNfZmxhZyk6IERvbid0IHF1b3RlIHRoZSAybmQgYXJndW1lbnQ7IGl0IHNob3VsZCBhbHJlYWR5Ci0JYmUgcXVvdGVkLiAgQWxsIHVzZXMgY2hhbmdlZC4KLQotCSogZGF0YS9nbHIuYzogVXNlIG5ldyBAIGVzY2FwZXMgY29uc2lzdGVudGx5LgotCShiNF9pbnB1dF9zdWZmaXgsIGI0X291dHB1dF9wYXJzZXJfc3VmZml4LCBiNF9vdXRwdXRfcGFyc2VyX25hbWUsCi0JYjRfb3V0cHV0X2hlYWRlcl9zdWZmaXgsIGI0X291dHB1dF9oZWFkZXJfbmFtZSwgYjRfaGVhZGVyX2d1YXJkKToKLQlSZW1vdmUsIHNpbmNlIHRoZXkgY291bGRuJ3QgaGFuZGxlIGFyYml0cmFyeSBjaGFyYWN0ZXJzIGluIGZpbGUKLQluYW1lcy4KLQkqIGRhdGEvbGFscjEuY2M6IExpa2V3aXNlLgotCSogZGF0YS95YWNjLmM6IExpa2V3aXNlLgotCi0JKiBzcmMvZmlsZXMuYyAob3V0cHV0X2luZml4KTogUmVtb3ZlOyBhbGwgdXNlcyByZW1vdmVkLgotCSogc3JjL2ZpbGVzLmg6IExpa2V3aXNlLgotCi0JKiBkYXRhL2dsci5jOiBSZW1vdmUgdXNlIG9mICIjaWZkZWYgYjRfaGVhZGVyX2d1YXJkIiwgc2luY2UgaXQKLQltaXNoYW5kbGVkIGZ1bm55IGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lcywgYW5kIGFueXdheSBpdCBpc24ndAotCW5lZWRlZCBhbnkgbW9yZS4KLQkqIGRhdGEveWFjYy5jOiBMaWtld2lzZS4KLQkqIGRhdGEvbGFscjEuY2M6IFVzZSBZWVNMUF9ORUVERUQgaW5zdGVhZCBvZiBiNF9oZWFkZXJfZ3VhcmQuCi0KLQkqIGRhdGEvZ2xyLmMgKFlZU1RZUEVfSVNfVFJJVklBTCk6IERlZmluZSB3aGVuIHRoZSAuaCBmaWxlIHdvdWxkLgotCSogZGF0YS95YWNjLmM6IExpa2V3aXNlLgotCi0JKiBzcmMvbXVzY2xlX3RhYi5jOiBJbmNsdWRlIHF1b3RlYXJnLmgsIHNpbmNlIHdlIG5lZWQgdG8gcXVvdGUgQwotCXN0cmluZ3Mgbm93LgotCShtdXNjbGVfaW5pdCk6IFF1b3RlIGZpbGVuYW1lIGFzIGEgQyBzdHJpbmcuCi0JKiBzcmMvbXVzY2xlX3RhYi5oIChNVVNDTEVfR1JPV19TVFJJTkdfUEFJUik6IFJlbW92ZTsgdW51c2VkLgotCShNVVNDTEVfT0JTVEFDS19TR1JPVywgTVVTQ0xFX0lOU0VSVF9DX1NUUklORyk6IE5ldyBtYWNyb3MuCi0JKiBzcmMvb3V0cHV0LmMgKGVzY2FwZWRfZmlsZV9uYW1lX291dHB1dCk6IE5ldyBmdW5jdGlvbi4KLQkocHJlcGFyZV9zeW1ib2xzKTogUXVvdGUgdG9rZW5zIGZvciBNNC4KLQkocHJlcGFyZSk6IERvbid0IGluc2VydCBvdXRwdXRfaW5maXgsIG91dHB1dF9wcmVmaXgsCi0Jb3V0cHV0X3BhcnNlcl9uYW1lLCBvdXRwdXRfaGVhZGVyX25hbWU7IHRoaXMgaXMgbm93IGRvd24gYnkgc2Nhbi1za2VsLgotCUluc2VydCBza2VsZXRvbiBhcyBhIEMgc3RyaW5nLgotCi0JKiBzcmMvb3V0cHV0LmMgKHVzZXJfYWN0aW9uc19vdXRwdXQsIHN5bWJvbF9kZXN0cnVjdG9yc19vdXRwdXQsCi0Jc3ltYm9sX3ByaW50ZXJzX291dHB1dCk6IFF1b3RlIGZpbGVuYW1lcyBmb3IgQyBhbmQgTTQuCi0JKiBzcmMvcmVhZGVyLmMgKHByb2xvZ3VlX2F1Z21lbnQsIGVwaWxvZ3VlX3NldCk6IExpa2V3aXNlLgotCi0JKiBzcmMvc2Nhbi1ncmFtLmwgKDxTQ19DSEFSQUNURVI+KTogRG9uJ3Qgd29ycnkgYWJvdXQgYW55IGJhY2tzbGFzaAotCWVzY2FwZXMgb3RoZXIgdGhhbiBcXCBhbmQgXCc7IHRoaXMgc2ltcGxpZmllcyB0aGUgY29kZS4KLQkoPFNDX1NUUklORz4pOiBMaWtld2lzZSwgZm9yIFxcIGFuZCBcIi4KLQkoPFNDX0NPTU1FTlQsU0NfTElORV9DT01NRU5ULFNDX1NUUklORyxTQ19DSEFSQUNURVIsU0NfQlJBQ0VEX0NPREUsCi0JU0NfUFJPTE9HVUUsU0NfRVBJTE9HVUU+KTogRXNjYXBlICQgYW5kIEAsIHRvby4KLQlVc2UgbmV3IGVzY2FwZXMgQHsgYW5kIEB9IGZvciBbIGFuZCBdLgotCi0JKiBzcmMvc2Nhbi1za2VsLmwgKHl5bGluZW5vLCB5eW91dG5hbWUpOiBSZW1vdmUgc3RhdGljIHZhcnMsIHJlcGxhY2luZwotCXRoZW0gd2l0aCBhdXRvIHZhcnMuCi0JU3dpdGNoIHRvIG5ldyBlc2NhcGUgc2NoZW1lLCB3aGVyZSBAIGlzIHRoZSBlc2NhcGUgY2hhcmFjdGVyIHVuaWZvcm1seS4KLQlBYm9ydCBpZiBhIHN0cmF5IGVzY2FwZSBjaGFyYWN0ZXIgaXMgZm91bmQuICBBdm9pZCB1bmJvdW5kZWQgaW5wdXQKLQlidWZmZXIgd2hlbiBwYXJzaW5nIG5vbi1lc2NhcGVkIHRleHQuCi0KLQkqIHRlc3RzL2lucHV0LmF0IChUb3J0dXJpbmcgdGhlIFNjYW5uZXIpOiBBZGQgdGVzdHMgdGhhdCBAb2xpbmVALAotCV9fb2xpbmVfXywgI291dHB1dCwgJEAsIGFuZCBAeyBkbyBub3QgaGF2ZSB1bmludGVuZGVkIG1lYW5pbmdzLgotCi0yMDAyLTExLTA5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCUZpeCB0aGUgdGVzdCBmYWlsdXJlIGR1ZSB0byBHQ0Mgd2FybmluZ3MgZGVzY3JpYmVkIGluCi0JPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwMi0xMS9tc2cwMDAwMC5odG1sPi4KLQkqIGRhdGEvZ2xyLmMgKHl5aXNfcGFjdF9uaW5mLCB5eWlzX3RhYmxlX25pbmYpOiBOZXcgbWFjcm9zLCB3aGljaAotCWV2YWx1YXRlIHRvIDAgaWYgaXQncyBpbXBvc3NpYmxlIGZvciBOSU5GIHRvIGJlIGluIHRoZSByZXNwZWN0aXZlCi0JdGFibGUuCi0JKHl5Z2V0TFJBY3Rpb25zLCB5eXJlY292ZXJQYXJzZUVycm9yKTogVXNlIHRoZW0uCi0KLQkqIHNyYy9zY2FuLWdyYW0ubCAodW5leHBlY3RlZF9lbmRfb2ZfZmlsZSk6IEZpeCBidWc6IGNvbHVtbnMgd2VyZQotCWNvdW50ZWQgaW4gdGhlIHRva2VuIGluc2VydGVkIGF0IGVuZCBvZiBmaWxlLiAgTm93IHRha2VzCi0JbG9jYXRpb25fdCAqLCBub3QgbG9jYXRpb25fdCwgc28gdGhhdCB0aGUgbG9jYXRpb24gY2FuIGJlCi0JYWRqdXN0ZWQuICBBbGwgdXNlcyBjaGFuZ2VkLgotCi0JKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChJbnZhbGlkIGlucHV0cyk6IEFkanVzdCB3b3JkaW5nIGluCi0JZGlhZ25vc3RpYyB0byBtYXRjaCB0aGUgbmV3IGJlaGF2aW9yLgotCi0JKiB0ZXN0cy90b3J0dXJlLmF0IChBVF9EQVRBX1RSSUFOR1VMQVJfR1JBTU1BUiwKLQlBVF9EQVRBX0hPUklaT05UQUxfR1JBTU1BUiwgQVRfREFUQV9MT09LQUhFQURTX0dSQU1NQVIsCi0JQVRfREFUQV9TVEFDS19UT1JUVVJFKTogUmVwbGFjZSBgYXNzZXJ0ICh4KTsnIHdpdGggYGlmICghICh4KSkKLQlhYm9ydCAoKTsnLiAgVGhpcyByZWR1Y2VzIHRoZSBydW50aW1lIG9mIHRoZSAiTWFueSBsb29rYWhlYWRzIgotCXRlc3QgZnJvbSAyNy42IHRvIDIuNyBtaW51dGVzIG9uIGEgNDQwIE1IeiBVbHRyYXNwYXJjIElJSSBydW5uaW5nCi0JR0NDIDMuMi4KLQotMjAwMi0xMS0wNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIHNyYy9wYXJzZS1ncmFtLnkgKENIQVJBQ1RFUik6IFJlbW92ZSB1bnVzZWQgdG9rZW4uCi0JQWxsIHVzZXMgcmVtb3ZlZC4KLQotCSogc3JjL3NjYW4tZ3JhbS5sOiBSZW1vdmUgc3RhY2sgb3B0aW9uLiAgV2Ugbm8gbG9uZ2VyIHVzZSB0aGUKLQlzdGFjaywgc2luY2UgdGhlIHN0YWNrIHdhcyBuZXZlciBkZWVwZXIgdGhhbiAxOyBpbnN0ZWFkLCB1c2UgdGhlCi0JbmV3IGF1dG8gdmFyIGNfY29udGV4dCB0byByZWNvcmQgdGhlIHN0YWNrZWQgdmFsdWUuCi0KLQlSZW1vdmUgbm91bnB1dCBvcHRpb24uICBBdCBhbiB1bmV4cGVjdGVkIGVuZCBvZiBmaWxlLCB3ZSBub3cgdW5wdXQKLQl0aGUgbWluaW1hbCBpbnB1dCBuZWNlc3NhcnkgdG8gZW5kIGNsZWFubHk7IHRoaXMgc2ltcGxpZmllcyB0aGUKLQljb2RlLgotCi0JQXZvaWQgdW5ib3VuZGVkIHRva2VuIHNpemVzIHdoZXJlIHRoaXMgaXMgZWFzeS4KLQotCSh1bmV4cGVjdGVkX2VuZF9vZl9maWxlKTogTmV3IGZ1bmN0aW9uLgotCVVzZSBpdCB0byBzeXN0ZW1hdGl6ZSB0aGUgZXJyb3IgbWVzc2FnZSBvbiB1bmV4cGVjdGVkIEVPRi4KLQkobGFzdC1zdHJpbmcpOiBOb3cgYXV0bywgbm90IHN0YXRpYy4KLQkoWVlfT0JTX0ZSRUUpOiBSZW1vdmUgdW5uZWNlc3NhcnkgZG8gd2hpbGUgKDApIHdyYXBwZXIuCi0JKHNjYW5uZXJfbGFzdF9zdHJpbmdfZnJlZSk6IFJlbW92ZTsgbm90IHVzZWQuCi0JKHBlcmNlbnRfcGVyY2VudF9jb3VudCk6IE1vdmUgZGVjbCB0byBqdXN0IGJlZm9yZSB1c2UuCi0JKFNDX0VTQ0FQRURfQ0hBUkFDVEVSKTogUmV0dXJuIElEIGF0IHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUsCi0Jbm90IHRoZSAobmV2ZXIgb3RoZXJ3aXNlZC11c2VkKSBDSEFSQUNURVIuCi0KLTIwMDItMTEtMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JTGV0IHl5ZXJyb3IgYWx3YXlzIHJlY2VpdmUgdGhlIG1zZyBhcyBsYXN0IGFyZ3VtZW50LCBzbyB0aGF0Ci0JeXllcnJvciBjYW4gYmUgdmFyaWFkaWMuCi0KLQkqIGRhdGEveWFjYy5jIChiNF95eWVycm9yX2FyZ3MpOiBOZXcuCi0JVXNlIGl0IHdoZW4gY2FsbGluZyB5eWVycm9yLgotCSogZGF0YS9nbHIuYyAoYjRfeXllcnJvcl9hcmdzLCBiNF9seXllcnJvcl9hcmdzKTogTmV3LgotCVVzZSBpdCB3aGVuIGNhbGxpbmcgeXllcnJvci4KLQkqIGRvYy9iaXNvbi50ZXhpbmZvIChFcnJvciBSZXBvcnRpbmcpOiBBZGp1c3QuCi0JKiB0ZXN0cy9jYWxjLmF0IChfQVRfREFUQV9DQUxDX1kpOiBBZGp1c3QuCi0JKiB0ZXN0cy9jeHgtdHlwZS5hdCAoX0FUX1RFU1RfR0xSX0NBTEMpOiBBZGp1c3QuCi0KLTIwMDItMTEtMDYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JI2xpbmUgc2hvdWxkIGhhdmUgcXVvdGVkIHN0cmluZ3MuCi0JSWRlYWxseSwgdGhpcyBzaG91bGQgYmUgZG9uZSBieSBtNF9xdW90ZWFyZy4KLQotCSogc3JjL3NjYW4tc2tlbC5sOiBJbmNsdWRlIHF1b3RlYXJnLmguCi0JUXVvdGUgX19vZmlsZV9fLgotCSogc3JjL291dHB1dC5jIChzeW1ib2xfcHJpbnRlcnNfb3V0cHV0KQotCShzeW1ib2xfZGVzdHJ1Y3RvcnNfb3V0cHV0KTogUXVvdGUgdGhlIGZpbGUgbmFtZS4KLQotMjAwMi0xMS0wNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKEludmFsaWQgaW5wdXRzKTogQWRqdXN0IHRvIHRoZSByZWNlbnQKLQltZXNzYWdlcy4KLQotMjAwMi0xMS0wNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlSZXN0b3JlIC0tbm8tbGluZXMuCi0JUmVwb3J0ZWQgYnkgSmltIEtlbnQuCi0KLQkqIGRhdGEvYy5tNCAoYjRfc3luY2xpbmUpOiBOZXcuCi0JKiBkYXRhL2dsci5jLCBkYXRhL3lhY2MuYywgZGF0YS9sYWxyMS5jYzogVXNlIGl0LgotCSogc3JjL3JlYWRlci5jIChwcm9sb2d1ZV9hdWdtZW50LCBlcGlsb2d1ZV9zZXQpOiBVc2UgYjRfc3luY2xpbmUuCi0JKiBzcmMvb3V0cHV0LmMgKHVzZXJfYWN0aW9uc19vdXRwdXQpOiBMaWtld2lzZS4KLQkocHJlcGFyZSk6IERlZmluZSAnYjRfc3luY2xpbmVzX2ZsYWcnLgotCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlX2luaXQpOiBEb24ndCBkZWZpbmUgYjRfbGluZWYuCi0KLTIwMDItMTEtMDYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvbWFpbi5jIChtYWluKTogRnJlZSBgaW5maWxlJy4KLQkqIHNyYy9zY2FuLWdyYW0ubCAoaGFuZGxlX3N5bmNsaW5lKTogTmV3LgotCVJlY29nbml6ZSBgI2xpbmUnLgotCSogc3JjL291dHB1dC5jICh1c2VyX2FjdGlvbnNfb3V0cHV0LCBzeW1ib2xfZGVzdHJ1Y3RvcnNfb3V0cHV0KQotCShzeW1ib2xfcHJpbnRlcnNfb3V0cHV0KTogVXNlIHRoZSBsb2NhdGlvbidzIGZpbGUgbmFtZSwgbm90Ci0JaW5maWxlLgotCSogc3JjL3JlYWRlci5jIChwcm9sb2d1ZV9hdWdtZW50LCBlcGlsb2d1ZV9zZXQpOiBMaWtld2lzZS4KLQotMjAwMi0xMS0wNSAgUGF1bCBIaWxmaW5nZXIgIDxIaWxmaW5nZXJAQ1MuQmVya2VsZXkuRURVPgotCi0JKiBzcmMvdGFibGVzLmMgKG1hdGNoaW5nX3N0YXRlKTogRG9uJ3QgYWxsb3cgc3RhdGVzIHRvIG1hdGNoIGlmCi0JZWl0aGVyIGhhcyBHTFIgY29uZmxpY3QgZW50cmllcy4KLQotMjAwMi0xMS0wNSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIHNyYy9zY2FuLWdyYW0ubDogVXNlIG1vcmUgYWNjdXJhdGUgZGlhZ25vc3RpY3MsIGUuZy4KLQkiaW50ZWdlciBvdXQgb2YgcmFuZ2UiIHJhdGhlciB0aGFuICJpbnZhbGlkIHZhbHVlIi4KLQkqIHRlc3RzL2lucHV0LmF0IChJbnZhbGlkICRuLCBJbnZhbGlkIEBuKTogQ2hhbmdlIGV4cGVjdGVkIHdvcmRpbmcKLQlhY2NvcmRpbmdseS4KLQotCVNjYW4gPCUgYW5kICU+IGRpZ3JhcGhzIGluIEMgY29kZSBhcyBQT1NJWCAxMDAzLjEtMjAwMSByZXF1aXJlcy4KLQlBbHNvLCByZW1vdmUgb25lIHN0YXRpYyB2YXJpYWJsZSBpbiB0aGUgc2Nhbm5lci4KLQotCSogc3JjL3NjYW4tZ3JhbS5sIChicmFjZXNfbGV2ZWwpOiBOb3cgYXV0bywgbm90IHN0YXRpYy4KLQlJbml0aWFsaXplIHRvIHplcm8gaWYgdGhlIGNvbXBpbGVyIGlzIGJlaW5nIHBpY2t5LgotCShJTklUSUFMKTogQ2xlYXIgYnJhY2VzX2xldmVsIGluc3RlYWQgb2YgaW5jcmVtZW50aW5nIGl0LgotCShTQ19CUkFDRURfQ09ERSk6IFRyZWF0IDwlIGFuZCAlPiBhcyB7IGFuZCB9IHdoZW4gaW5zaWRlIEMgY29kZSwKLQlhcyBQT1NJWCAxMDAzLjEtMjAwMSByZXF1aXJlcy4KLQkqIHNyYy9zeXN0ZW0uaCAoSUZfTElOVCk6IE5ldyBtYWNybywgdGFrZW4gZnJvbSBjb3JldXRpbHMuCi0JKiBjb25maWd1cmUuYWM6IERlZmluZSAibGludCIgaWYgLS1lbmFibGUtZ2NjLXdhcm5pbmdzLgotCi0yMDAyLTExLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3NjYW4tZ3JhbS5sOiBXaGVuIGl0IHN0YXJ0cyB3aXRoIGAlJywgY29tcGxhaW4gYWJvdXQgdGhlCi0Jd2hvbGUgZGlyZWN0aXZlLCBub3QganVzdCB0aGF0IGBpbnZhbGlkIGNoYXJhY3RlcjogJScuCi0KLTIwMDItMTEtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBNYWtlZmlsZS5tYWludDogVXBkYXRlIGZyb20gQXV0b2NvbmYuCi0JKHVwZGF0ZSwgY3ZzLXVwZGF0ZSwgcG8tdXBkYXRlLCBkby1wby11cGRhdGUpOiBOZXcuCi0KLTIwMDItMTEtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiB0ZXN0cy9nbHItcmVncjEuYXQgKEJhZGx5IENvbGxhcHNlZCBHTFIgU3RhdGVzKTogUHJvdG90eXBlIHl5bGV4Ci0JYW5kIHl5ZXJyb3IuCi0JSGF2ZSB5eWVycm9yIGB1c2UnIGl0cyBhcmd1bWVudHMuCi0JKiB0ZXN0cy9jYWxjLmF0IChBVF9DSEVDS19QVVNIREVGUyk6IEFUX1lZRVJST1JfU0VFU19MT0NfSUYKLQlyZXR1cm5zIHRydWUgd2hlbiBsb2NhdGlvbiAmIHlhY2MgJiBwdXJlICYgcGFyc2UtcGFyYW0uCi0JKF9BVF9EQVRBX0NBTENfWSk6IExldCB5eWVycm9yIGBgdXNlJycgaXRzIGFyZ3VtZW50cy4KLQotMjAwMi0xMS0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9sb2NhdGlvbi5oIChMT0NBVElPTl9QUklOVCk6IFVzZSBxdW90ZWFyZyBzbG90IDMgdG8gYXZvaWQKLQljbGFzaGVzLgotCSogc3JjL3NjYW4tZ3JhbS5sOiBVc2UgW1wnXSBpbnN0ZWFkIG9mIFsnXSB0byBwYWNpZnkKLQlmb250LWxvY2stbW9kZS4KLQlVc2UgY29tcGxhaW5fYXQuCi0JVXNlIHF1b3RlLCBub3QgcXVvdGVfbiBzaW5jZSBMT0NBVElPTl9QUklOVCBubyBsb25nZXIgdXNlcyB0aGUKLQlzbG90IDAuCi0KLTIwMDItMTEtMDMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBzcmMvcmVhZGVyLmMgKGdldF9tZXJnZV9mdW5jdGlvbiwgZ3JhbW1hcl9jdXJyZW50X3J1bGVfY2hlY2spOgotCVVzZSBjb25zaXN0ZW50IGRpYWdub3N0aWNzIGZvciByZXBvcnRpbmcgdHlwZSBuYW1lIGNsYXNoZXMuCi0JUXVvdGUgdGhlIHR5cGVzIHdpdGggPD4sIGZvciBjb25zaXN0ZW5jeSB3aXRoIFlhY2MuCi0JKiB0ZXN0cy9pbnB1dC5hdCAoVHlwZSBDbGFzaGVzKTogQWRqdXN0IHRvIGRpYWdub3N0aWMgY2hhbmdlcy4KLQotMjAwMi0xMS0wMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvYy5tNCAoYjRfaWRlbnRpZmljYXRpb24sIGI0X3VzZXJfYXJncywgYjRfcGFyc2VfcGFyYW0pOgotCU5ldy4KLQkqIGRhdGEveWFjYy5tNCAoYjRfcHVyZV9hcmdzLCBiNF9QdXJlX2FyZ3MpOiBOZXcuCi0JKGI0X3BhcnNlX3BhcmFtKTogUmVtb3ZlLgotCVVzZSBiNF9pZGVudGlmaWNhdGlvbi4KLQlQcm9wYWdhdGUgYjRfcHVyZV9hcmdzIHdoZXJlIG5lZWRlZCB0byBwYXNzIHRoZW0gdG8geXllcnJvci4KLQkqIGRhdGEvZ2xyLm00IChiNF9wYXJzZV9wYXJhbSk6IFJlbW92ZS4KLQkoYjRfdXNlcl9mb3JtYWxzLCBiNF9wdXJlX2FyZ3MsIGI0X3B1cmVfZm9ybWFscywgYjRfbHB1cmVfYXJncykKLQkoYjRfbHB1cmVfZm9ybWFscyk6IE5ldy4KLQlVc2UgYjRfaWRlbnRpZmljYXRpb24uCi0JKFlZX1VTRVJfRk9STUFMUywgWVlfVVNFUl9BUkdTKTogUmVtb3ZlLCByZXBsYWNlZCBieQotCWI0X3VzZXJfZm9ybWFscyBhbmQgYjRfdXNlcl9hcmdzLgotCSh5eWV4cGFuZEdMUlN0YWNrLCB5eUZhaWwsIHl5YWRkRGVmZXJyZWRBY3Rpb24sIHl5Z2xyU2hpZnREZWZlcikKLQkoeXlyZXBvcnRBbWJpZ3VpdHkpOiBXaGVuIHVzaW5nIGEgcHVyZSBwYXJzZXIsIGFsc28gbmVlZAotCXRoZSBsb2NhdGlvbiwgYW5kIHRoZSBwYXJzZS1wYXJhbXMuCi0JQWRqdXN0IGNhbGxlcnMuCi0JKHl5dXNlckFjdGlvbiwgeXlnbHJTaGlmdCwgeXlyZXBvcnRQYXJzZUVycm9yLCB5eXJlY292ZXJQYXJzZUVycm9yKToKLQlXaGVuIHVzaW5nIGEgcHVyZSBwYXJzZXIsIGFsc28gbmVlZCB0aGUgcGFyc2UtcGFyYW1zLgotCUFkanVzdCBjYWxsZXJzLgotCSogdGVzdHMvY2FsYy5hdDogVGVzdCBwdXJlICglcHVyZS1wYXJzZXIpIGFuZCBhYnNvbHV0ZWx5IHB1cmUKLQkoJXB1cmUtcGFyc2VyICsgJXBhcnNlLXBhcmFtKSBMQUxSIGFuZCBHTFIgcGFyc2Vycy4KLQkoQVRfQ0hFQ0tfUFVTSERFRlMsIEFUX0NIRUNLX1BPUERFRlMpOiBOZXcsIGRlZmluZSBBVF9QQVJBTV9JRiwKLQlBVF9MT0NBVElPTl9JRiwgQVRfUFVSRV9JRiwgQVRfR0xSX0lGLCBBQVRfUFVSRV9BTkRfTE9DX0lGLAotCUFUX0dMUl9PUl9QQVJBTV9JRiwgQVRfWVlFUlJPUl9BUkdfTE9DX0lGLCBBVF9ZWUVSUk9SX1NFRVNfTE9DX0lGLgotCShfQVRfREFUQV9DQUxDX1kpOiBFcXVpcCBmb3IgcHVyaXR5IG9mIHl5ZXJyb3IuCi0JKF9BVF9DSEVDS19DQUxDX0VSUk9SKTogVXNlIEFUX1lZRVJST1JfU0VFU19MT0NfSUYuCi0JKiB0ZXN0cy9jeHgtdHlwZS5hdCAoX0FUX1RFU1RfR0xSX0NBTEMpOiBFcXVpcCBmb3IgeXllcnJvciBwdXJpdHkuCi0JKiBkb2MvYmlzb24udGV4aW5mbzogVW50YWJpZnkgdGhlIHdob2xlIGZpbGUuCi0JKFBhcnNlciBGdW5jdGlvbik6IERvY3VtZW50ICVwYXJzZS1wYXJhbSwgZGVwcmVjYXRlIFlZUEFSU0VfUEFSQU0uCi0JKFB1cmUgQ2FsbGluZyk6IERvY3VtZW50ICVsZXgtcGFyYW0sIGRlcHJlY2F0ZSBZWUxFWF9QQVJBTS4KLQkoRXJyb3IgUmVwb3J0aW5nKTogQWRqdXN0IHRvIHRoZXNlIG5ldyBkaXJlY3RpdmVzLgotCURvY3VtZW50ICVlcnJvci12ZXJib3NlLCBkZXByZWNhdGUgWVlFUlJPUl9WRVJCT1NFLgotCi0yMDAyLTExLTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogdGVzdHMvY2FsYy5hdDogQ2hhbmdlIGFsbCB0aGUgQVRfQ0hFQ0tfQ0FMQ19MQUxSIGFuZAotCUFUX0NIRUNLX0NBTENfR0xSIGludm9jYXRpb25zIHRvIHVzZSAlIGRpcmVjdGl2ZXMsIGluc3RlYWQgb2YKLQljb21tYW5kIGxpbmUgb3B0aW9ucy4KLQkqIHRlc3RzL2N4eC10eXBlLmF0OiBGb3JtYXR0aW5nIGNoYW5nZXMuCi0KLTIwMDItMTEtMDMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBzcmMvc2Nhbi1ncmFtLmw6IFJldmFtcCB0byBmaXggUE9TSVggaW5jb21wYXRpYmlsaXRpZXMsCi0JdG8gY291bnQgY29sdW1ucyBjb3JyZWN0bHksIGFuZCB0byBjaGVjayBmb3IgaW52YWxpZCBpbnB1dHMuCi0KLQlVc2UgbWJzbndpZHRoIHRvIGNvdW50IGNvbHVtbnMgY29ycmVjdGx5LiAgQWNjb3VudCBmb3IgdGFicywgdG9vLgotCUluY2x1ZGUgbWJzd2lkdGguaC4KLQkoWVlfVVNFUl9BQ1RJT04pOiBJbnZva2UgZXh0ZW5kX2xvY2F0aW9uIHJhdGhlciB0aGFuIExPQ0FUSU9OX0NPTFVNTlMuCi0JKGV4dGVuZF9sb2NhdGlvbik6IE5ldyBmdW5jdGlvbi4KLQkoWVlfTElORVMpOiBSZW1vdmUuCi0KLQlIYW5kbGUgQ1JMRiBpbiBDIGNvZGUgcmF0aGVyIHRoYW4gaW4gTGV4IGNvZGUuCi0JKFlZX0lOUFVUKTogTmV3IG1hY3JvLgotCShub19jcl9yZWFkKTogTmV3IGZ1bmN0aW9uLgotCi0JU2NhbiBVQ05zLCBldmVuIHRob3VnaCB3ZSBkb24ndCBmdWxseSBoYW5kbGUgdGhlbSB5ZXQuCi0JKGNvbnZlcnRfdWNuX3RvX2J5dGUpOiBOZXcgZnVuY3Rpb24uCi0KLQlIYW5kbGUgYmFja3NsYXNoLW5ld2xpbmUgY29ycmVjdGx5IGluIEMgY29kZS4KLQkoU0NfTElORV9DT01NRU5ULCBTQ19ZQUNDX0NPTU1FTlQpOiBOZXcgc3RhdGVzLgotCShlb2xzLCBibGFua3MpOiBSZW1vdmUuICBZWV9VU0VSX0FDVElPTiBub3cgY291bnRzIG5ld2xpbmVzIGV0Yy47Ci0JYWxsIHVzZXMgY2hhbmdlZC4KLQkodGFnLCBzcGxpY2UpOiBOZXcgRVJFcy4gIERvIG5vdCBhbGxvdyBOVUwgb3IgbmV3bGluZSBpbiB0YWdzLgotCVVzZSB7c3BsaWNlfSB3aGVyZXZlciBDIGFsbG93cyBiYWNrc2xhc2gtbmV3bGluZS4KLQlZWV9TVEVQIGFmdGVyIHNwYWNlLCBuZXdsaW5lLCB2ZXJ0aWNhbC10YWIuCi0JKCIvKiIpOiBCRUdJTiBTQ19ZQUNDX0NPTU1FTlQsIG5vdCB5eV9wdXNoX3N0YXRlIChTQ19DT01NRU5UKS4KLQotCShsZXR0ZXIsIGlkKTogRG9uJ3QgYXNzdW1lIEFTQ0lJOyBlLmcuLCBzcGVsbCBvdXQgYS16LgotCi0JKHtpbnR9LCBoYW5kbGVfYWN0aW9uX2RvbGxhciwgaGFuZGxlX2FjdGlvbl9hdCk6IENoZWNrIGZvciBpbnRlZ2VyCi0Jb3ZlcmZsb3cuCi0KLQkoWVlfU1RFUCk6IE9taXQgdHJhaWxpbmcgc2VtaWNvbG9uLCBzbyB0aGF0IGl0J3MgbW9yZSBsaWtlIEMuCi0KLQkoPFNDX0VTQ0FQRURfU1RSSU5HLFNDX0VTQ0FQRURfQ0hBUkFDVEVSPik6IEFsbG93IFwwIGFuZCBcMDAKLQlhcyB3ZWxsIGFzIFwwMDAuICBDaGVjayBmb3IgVUNIQVJfTUFYLCBub3QgMjU1LgotCUFsbG93IFx4IHdpdGggYW4gYXJiaXRyYXJ5IHBvc2l0aXZlIG51bWJlciBvZiBkaWdpdHMsIGFzIGluIEMuCi0JQ2hlY2sgZm9yIG92ZXJmbG93IGhlcmUuCi0JQWxsb3cgXD8gYW5kIFVDTnMsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQy4KLQotCShoYW5kbGVfc3ltYm9sX2NvZGVfZG9sbGFyKTogVXNlIHF1b3RlX24gc2xvdCAxIHRvIGF2b2lkIGNvbGxpc2lvbgotCXdpdGggcXVvdGUgc2xvdCB1c2VkIGJ5IGNvbXBsYWluX2F0LgotCi0JKiB0ZXN0cy9pbnB1dC5hdDogQWRkIHRlc3RzIGZvciBiYWNrc2xhc2gtbmV3bGluZSwgbTQgcXVvdGVzCi0JaW4gc3ltYm9scywgbG9uZyBsaXRlcmFscywgYW5kIGZ1bm55IGVzY2FwZXMgaW4gc3RyaW5ncy4KLQotCSogY29uZmlndXJlLmFjIChqbV9QUkVSRVFfTUJTV0lEVEgpOiBBZGQuCi0JKiBsaWIvTWFrZWZpbGUuYW0gKGxpYmJpc29uX2FfU09VUkNFUyk6IEFkZCBtYnN3aWR0aC5oLCBtYnN3aWR0aC5jLgotCSogbGliL21ic3dpZHRoLmgsIGxpYi9tYnN3aWR0aC5jOiBOZXcgZmlsZXMsIGZyb20gR05VIGdldHRleHQuCi0JKiBtNC9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBtYnN3aWR0aC5tNC4KLQkqIG00L21ic3dpZHRoLm00OiBOZXcgZmlsZSwgZnJvbSBHTlUgY29yZXV0aWxzLgotCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoR3JhbW1hciBPdXRsaW5lKTogRG9jdW1lbnQgLy8gY29tbWVudHMuCi0JKFN5bWJvbHMpOiBEb2N1bWVudCB0aGF0IHRyaWdyYXBocyBoYXZlIG5vIHNwZWNpYWwgbWVhbmluZyBpbiBCaXNvbiwKLQlub3IgaXMgYmFja3NsYXNoLW5ld2xpbmUgYWxsb3dlZC4KLQkoQWN0aW9ucyk6IERvY3VtZW50IHRoYXQgdHJpZ3JhcGhzIGhhdmUgbm8gc3BlY2lhbCBtZWFuaW5nLgotCi0JKiBzcmMvbG9jYXRpb24uaCAoTE9DQVRJT05fQ09MVU1OUywgTE9DQVRJT05fTElORVMpOiBSZW1vdmU7Ci0Jbm8gbG9uZ2VyIHVzZWQuCi0KLTIwMDItMTEtMDIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBzcmMvcmVhZGVyLmM6IERvbid0IGluY2x1ZGUgcXVvdGUuaDsgbm90IG5lZWRlZC4KLQkoZ2V0X21lcmdlX2Z1bmN0aW9uKTogUmV3b3JkIHdhcm5pbmcgdG8gYmUgY29uc2lzdGVudCB3aXRoCi0JdHlwZSBjbGFzaCBkaWFnbm9zdGljIGluIGdyYW1tYXJfY3VycmVudF9ydWxlX2NoZWNrLgotCi0JKiBsaWIvcXVvdGVhcmcuYyAocXVvdGVhcmdfYnVmZmVyX3Jlc3R5bGVkKTogRml4IG9mZi1ieS10d28KLQlidWcgaW4gdHJpZ3JhcGggaGFuZGxpbmcuCi0KLQkqIHNyYy9vdXRwdXQuYyAocHJlcGFyZV9zeW1ib2xzKTogV2hlbiBwcmludGluZyB0b2tlbiBuYW1lcywKLQllc2NhcGUgIlsiIGFzICJAPDpAIiBhbmQgbGlrZXdpc2UgZm9yICJdIi4KLQotCSogc3JjL3N5c3RlbS5oIChlcnJubyk6IFJlbW92ZSBkZWNsYXJhdGlvbiwgYXMgd2UgYXJlIG5vdwotCWFzc3VtaW5nIEM4OSBvciBiZXR0ZXIsIGFuZCBDODkgZ3VhcmFudGVlcyBlcnJuby4KLQotMjAwMi0xMC0zMCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIGxpYi9iaXRzZXRfc3RhdHMuYyAoYml0c2V0X3N0YXRzX3JlYWQsIGJpdHNldF9zdGF0c193cml0ZSk6Ci0JQ2hlY2sgZm9yIGNsb3NlIGZhaWx1cmVzLgotCSogc3JjL2ZpbGVzLmggKHhmY2xvc2UpOiBSZXR1cm4gdm9pZCwgbm90IGludCwgc2luY2UgaXQgYWx3YXlzCi0JcmV0dXJuZWQgemVyby4KLQkqIHNyYy9maWxlcy5jICh4ZmNsb3NlKTogTGlrZXdpc2UuICBSZXBvcnQgSS9PIGVycm9yIGlmIGZlcnJvcgotCWluZGljYXRlcyBvbmUuCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9za2VsZXRvbik6IFVzZSB4ZmNsb3NlIHJhdGhlciB0aGFuIGZjbG9zZQotCWFuZCBmZXJyb3IuICB4ZmNsb3NlIG5vdyBjaGVja3MgZmVycm9yLgotCi0JKiBkYXRhL2dsci5jIChZWUxFRlRNT1NUX1NUQVRFKTogUmVtb3ZlLgotCSh5eXJlcG9ydFRyZWUpOiBVc2UgYSBzdGFjay1iYXNlZCBsZWZ0bW9zdCBzdGF0ZS4gIFRoaXMgYXZvaWRzCi0Jb3VyIGNvbnRpbnVpbmcgYmF0dGxlcyB3aXRoIGJvZ3VzIHdhcm5pbmdzIGFib3V0IGluaXRpYWxpemVycy4KLQotMjAwMi0xMC0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9zeXN0ZW0uaDogRG9uJ3QgdXNlICNpZmRlZi8jaWZuZGVmIG9uIEhBVkVfIHZhbHVlcywgb25seQotCSNpZi4KLQotMjAwMi0xMC0yOSAgUGF1bCBIaWxmaW5nZXIgIDxIaWxmaW5nZXJAQ1MuQmVya2VsZXkuRURVPgotCi0JKiB0ZXN0cy9nbHItcmVncjEuYXQ6IE5ldyB0ZXN0IGZvciByZXBvcnRlZCByZWdyZXNzaW9ucy4KLQkqIHRlc3RzL3Rlc3RzdWl0ZS5hdDogQWRkIGdsci1yZWdyMS5hdCB0ZXN0LgotCSogdGVzdHMvTWFrZWZpbGUuYW06IEFkZCBnbHItcmVncjEuYXQgdGVzdC4KLQotMjAwMi0xMC0yNCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQlWZXJzaW9uIDEuNzVhLgotCi0JKiB0ZXN0cy9jYWxjLmF0IChfQVRfREFUQV9DQUxDX1kpOiBSZW1vdmUgdW51c2VkIHN0cmNhdCBkZWNsYXJhdGlvbi4KLQkqIHRlc3RzL2N4eC10eXBlLmF0IChfQVRfVEVTVF9HTFJfQ0FMQyk6IEluY2x1ZGUgc3RkbGliLmgsIHNpbmNlCi0Jd2UgdXNlIG1hbGxvYy4gIERvbid0IGFzc3VtZSAnQScgdGhyb3VnaCAnWicgYXJlIGNvbnRpZ3VvdXMuCi0JRG9uJ3QgYXNzdW1lIHN0cmR1cCBleGlzdHM7IFBPU0lYIHNheXMgaXRzIGFuIFhTSSBleHRlbnNpb24uCi0JQ2hlY2sgZm9yIGJ1ZmZlciBvdmVyZmxvdyBvbiBpbnB1dC4KLQotMjAwMi0xMC0yNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3NrZWxldG9uKTogRG9uJ3QgZGlzYWJsZSBNNHN1Z2FyIGNvbW1lbnRzCi0JdG9vIHNvb246IGl0IHJlc3VsdHMgaW4gY29tbWVudHMgYmVpbmcgZXhwYW5kZWQuCi0JKiBkYXRhL3lhY2MuYywgZGF0YS9nbHIuYywgZGF0YS9sYWxyMS5jYzogRG8gaXQgcmlnaHQgYmVmb3JlIHRoZQotCWZpcnN0IG91dHB1dC4KLQotMjAwMi0xMC0yNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEveWFjYy5jIChtNF9pbnRfdHlwZSk6IE5ldy4KLQkqIGRhdGEvYy5tNCAobTRfaW50X3R5cGUpOiBEb24ndCB1c2UgeXlzaWduZWRfY2hhciwgYnV0IGBzaWduZWQKLQljaGFyJyBhcyBvbmx5IHlhY2MuYyB3YW50cyBLJlIgcG9ydGFiaWxpdHkuCi0JKiBkYXRhL2dsci5jICh5eXNpZ25lZF9jaGFyKTogUmVtb3ZlLgotCSogZGF0YS9sYWxyMS5jYzogUmVuYW1lIHRoZSB0cmFpbGluZyBiNF9uYW1lIGFzIGI0X3BhcnNlcl9jbGFzc19uYW1lLgotCVJlcG9ydGVkIGJ5IFF1b2MgUGV5cm90LgotCi0yMDAyLTEwLTIzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogc3JjL21haW4uYyAobWFpbik6IFdpdGggLS10cmFjZT10aW1lLCByZXBvcnQgdGltZXMgZXZlbiBpZiBhCi0Jbm9uLWZhdGFsIGVycm9yIG9jY3Vycy4gIEZvcm1lcmx5LCB0aGUgdGltZXMgd2VyZSByZXBvcnRlZCBpbiBzb21lCi0Jc3VjaCBjYXNlcyBidXQgbm90IGluIG90aGVycy4KLQkqIHNyYy9yZWFkZXIuYyAocmVhZGVyKTogSnVzdCByZXR1cm4gaWYgYSBjb21wbGFpbnQgaGFzIGJlZW4gaXNzdWVkLAotCWluc3RlYWQgb2YgZXhpdGluZywgc28gdGhhdCAnbWFpbicgY2FuIHJlcG9ydCB0aW1lcy4KLQotMjAwMi0xMC0yMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9zeXN0ZW0uaDogSW5jbHVkZSBzeXMvdHlwZXMuCi0JUmVwb3J0ZWQgYnkgQmVydCBEZWtudXlkdC4KLQotMjAwMi0xMC0yMyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYyAoQUNfUFJPR19MRVgpOiBVc2UgaW5zdGVhZCBvZiBBTV9QUk9HX0xFWC4KLQlTdWdnZXN0ZWQgYnkgQXJ0IEhhYXMuCi0KLTIwMDItMTAtMjIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBzcmMvY29tcGxhaW4uYyAoZXhpdCkgWyEgKFNURENfSEVBREVSUyB8fCBfTElCQyldOiBSZW1vdmUgZXhpdAotCWRlY2w7IG5vdCBuZWVkZWQgYW55IG1vcmUuCi0JKiBzcmMvbWFpbi5jIChtYWluKTogVXNlIHJldHVybiB0byBleGl0LCB1bmRvaW5nIHllc3RlcmRheSdzIGNoYW5nZS4KLQlUaGUgbGFzdCBPUyB0aGF0IHdlIGNvdWxkIGZpbmQgd2hlcmUgdGhpcyB3b3VsZG4ndCB3b3JrIGlzCi0JU3VuT1MgMy41LCBhbmQgdGhhdCdzIHRvbyBvbGQgdG8gd29ycnkgYWJvdXQgbm93LgotCi0JKiBkYXRhL2dsci5jIChzdHJ1Y3QgeXlsdHlwZSk6IERlZmluZSBtZW1iZXJzIGV2ZW4gd2hlbiBub3QKLQlkb2luZyBsb2NhdGlvbnMuICBUaGlzIGlzIG1vcmUgY29uc2lzdGVudCB3aXRoIHlhY2MuYywgYW5kIGl0Ci0Jd29ya3MgYXJvdW5kIHRoZSBmb2xsb3dpbmcgYnVnIHJlcG9ydHM6Ci0JaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAyLTEwL21zZzAwMTA2Lmh0bWwKLQlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDItMTAvbXNnMDAxMTEuaHRtbAotCi0JKiBkb2MvYmlzb24udGV4aW5mbzogTWlub3Igc3BlbGxpbmcgYW5kIHR5cG9ncmFwaGljYWwgZml4ZXMuICBVc2UKLQlAYWNyb255bSBjb25zaXN0ZW50bHkuICBTdGFuZGFyZGl6ZSBvbiAiWWFjYyIgaW5zdGVhZCBvZiAiWUFDQyIsCi0JIkFsZ29sIiBpbnN0ZWFkIG9mICJBTEdPTCIuICBHaXZlIGEgYml0IG1vcmUgaGlzdG9yeSBhYm91dCBCTkYuCi0KLTIwMDItMTAtMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL1JFQURNRTogTmV3LgotCi0yMDAyLTEwLTIxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCUJlIGNvbnNpc3RlbnQgYWJvdXQgJ2Jvb2wnOyB0aGUgb2xkIGNvZGUgdXNlZCBhbiBlbnVtIGluIG9uZQotCW1vZHVsZSBhbmQgYW4gaW50IGluIGFub3RoZXIsIGFuZCB0aGlzIHZpb2xhdGVzIHRoZSBDIHN0YW5kYXJkLgotCSogbTQvc3RkYm9vbC5tNDogTmV3IGZpbGUsIGZyb20gY29yZXV0aWxzIDQuNS4zLgotCSogY29uZmlndXJlLmFjIChBQ19IRUFERVJfU1REQk9PTCk6IEFkZC4KLQkqIG00L01ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIHN0ZGJvb2wubTQuCi0JKiBzcmMvbXVzY2xlX3RhYi5jIChoYXNoX2NvbXBhcmVfbXVzY2xlcyk6IChhID8gRkFMU0UgOiBUUlVFKSAtPiAoISBhKQotCSogc3JjL3N5bXRhYi5jIChoYXNoX2NvbXBhcmVfc3ltYm9sX3QpOiBMaWtld2lzZS4KLQkqIHNyYy9zeXN0ZW0uaCAoYm9vbCwgZmFsc2UsIHRydWUpOiBVc2UgYSBkZWZpbml0aW9uIGNvbnNpc3RlbnQKLQl3aXRoIC4uL2xpYi9oYXNoLmMuICBBbGwgdXNlcyBjaGFuZ2VkLgotCi0JKiBzcmMvY29tcGxhaW4uYyAod2FybmluZ19pc3N1ZWQpOiBSZW5hbWVkIGZyb20gd2Fybl9tZXNzYWdlX2NvdW50LAotCXNvIHRoYXQgd2UgbmVlZG4ndCB3b3JyeSBhYm91dCBpbnRlZ2VyIG92ZXJmbG93ICghKS4KLQlOb3cgb2YgdHlwZSBib29sLiAgQWxsIHVzZXMgY2hhbmdlZC4KLQkoY29tcGxhaW50X2lzc3VlZCk6IFJlbmFtZWQgZnJvbSBjb21wbGFpbl9tZXNzYWdlX2NvdW50OyBsaWtld2lzZS4KLQotCSogc3JjL21haW4uYyAobWFpbik6IFVzZSBleGl0IHRvIGV4aXQgd2l0aCBmYWlsdXJlLgotCi0JKiBzcmMvY29tcGxhaW4uYyAoZmF0YWxfYXQsIGZhdGFsKTogVXNlIEVYSVRfRkFJTFVSRSBhbmQgRVhJVF9TVUNDRVNTCi0JcmF0aGVyIHRoYW4gMSBhbmQgMC4KLQkqIHNyYy9tYWluLmMgKG1haW4pOiBMaWtld2lzZS4KLQkqIHNyYy9nZXRhcmdzLmMgKGdldGFyZ3MpOiBMaWtld2lzZS4KLQkqIHNyYy9yZWFkZXIuYyAocmVhZGVyKTogTGlrZXdpc2UuCi0KLQkqIHNyYy9nZXRhcmcuYyAoZ2V0YXJncyk6IFJlbW92ZSBkdXBsaWNhdGUgY29kZSBmb3IKLQkiVHJ5IGBiaXNvbiAtLWhlbHAnIi4KLQotCSogc3JjL2ZpbGVzLmMgKHhmb3BlbiwgeGZjbG9zZSk6IFVzZSBFWElUX0ZBSUxVUkUgcmF0aGVyIHRoYW4gMi4KLQlXaGF0IHdhcyB0aGF0ICIyIiBmb3I/Ci0KLQkqIHNyYy9jb21wbGFpbi5oIChmYXRhbCwgZmF0YWxfYXQpOiBBZGQgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSkuCi0JKiBzcmMvZ2V0YXJncy5jICh1c2FnZSk6IExpa2V3aXNlLgotCi0JKiBzcmMvZ2V0YXJncy5jIChnZXRhcmdzKTogV2hlbiB0aGVyZSBhcmUgdG9vIGZldyBvcGVyYW5kcywgcmVwb3J0Ci0JdGhlIGxhc3Qgb25lLiAgV2hlbiB0aGVyZSBhcmUgdG9vIG1hbnksIHJlcG9ydCB0aGUgZmlyc3QgZXh0cmEKLQlvbmUuICBUaGlzIGlzIGhvdyBkaWZmdXRpbHMgZG9lcyBpdC4KLQotMjAwMi0xMC0yMCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQlSZW1vdmUgSyZSIHZlc3RpZ2VzLgotCSogY29uZmlndXJlLmFjIChBQ19DX0NPTlNULCBBTV9DX1BST1RPVFlQRVMpOiBSZW1vdmUuCi0JKiBzcmMvY29tcGxhaW4uYyAoVkFfU1RBUlQpOiBSZW1vdmUuICBBc3N1bWUgcHJvdG90eXBlcy4KLQkodmZwcmludGYpIFshIChIQVZFX1ZQUklOVEYgfHwgZGVmaW5lZCB2ZnByaW50ZildOiBOZXcgbWFjcm8uCi0JKHByaXZhdGVfc3RyZXJyb3IsIHdhcm5fYXQsIHdhcm4sIGNvbXBsYWluX2F0LCBjb21wbGFpbiwgZmF0YWxfYXQsCi0JZmF0YWwpOiBBc3N1bWUgcHJvdG90eXBlcy4KLQkqIHNyYy9jb21wbGFpbi5oOiBBc3N1bWUgcHJvdG90eXBlcy4KLQkqIHNyYy9zeXN0ZW0uaCAoUEFSQU1TKTogUmVtb3ZlLgotCUluY2x1ZGUgPGxpbWl0cy5oPiB1bmNvbmRpdGlvbmFsbHksIHNpbmNlIGl0J3MgZ3VhcmFudGVlZWQgZXZlbgotCWZvciBhIGZyZWVzdGFuZGluZyBDODkgY29tcGlsZXIuCi0JKFNIUlRfTUlOLCBTSFJUX01BWCk6IFJlbW92ZSwgc2luY2UgQzg5IGd1YXJhbnRlZXMgdGhlbS4KLQkqIHNyYy92bXNnZXRhcmdzLmMgKGdldGFyZ3MsIGNsaV9wcmVzZW50LCBjbGlfZ2V0X3ZhbHVlKTogUHJvdG90eXBlLgotCi0yMDAyLTEwLTIwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlX2dyb3cpOiBSZW1vdmUgdHJhaWxpbmcgZGVidWdnaW5nIGNvZGUuCi0JKiBkYXRhL2dsci5jIChZWV9VU0VSX0ZPUk1BTFMsIFlZX1VTRVJfQVJHUyk6IE5ldy4KLQkoeXl1c2VyQWN0aW9uLCB5eWRvQWN0aW9uLCB5eWdsclJlZHVjZSwgeXlyZXNvbHZlVmFsdWUpCi0JKHl5cmVzb2x2ZVN0YXRlcywgeXlyZXNvbHZlQWN0aW9uLCB5eXJlc29sdmVTdGFjaykKLQkoeXlwcm9jZXNzT25lU3RhY2spOiBVc2UgdGhlbS4KLQkoeXlfcmVkdWNlX3ByaW50KTogTmV3LgotCSogdGVzdHMvY2FsYy5hdCAoX0FUX0RBVEFfQ0FMQ19ZKTogRXhlcmNpc2UgJXBhcnNlLXBhcmFtLgotCi0yMDAyLTEwLTIwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS9jLm00IChiNF9jX2Fuc2lfYXJncyk6IFJlY29nbml6ZSBmdW5jdGlvbnMgd2l0aCBubwotCWFyZ3VtZW50cyBhbmQgb3V0cHV0IGB2b2lkJy4KLQkoYjRfY19mdW5jdGlvbik6IFJlbmFtZSBhcy4uLgotCShiNF9jX2Z1bmN0aW9uX2RlZik6IHRoaXMuCi0JKGI0X2NfZnVuY3Rpb25fZGVjbCwgYjRfY19hbnNpX2Z1bmN0aW9uX2RlZikKLQkoYjRfY19hbnNpX2Z1bmN0aW9uX2RlY2wpOiBOZXcuCi0JQ2hhbmdlIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgYXJndW1lbnRzOiBiZWZvcmUgYGludCwgZm9vJywgbm93Ci0JYGludCBmb28sIGZvbycuCi0JKiBkYXRhL3lhY2MuYyAoeXlwYXJzZSk6IFByb3RvdHlwZSBhbmQgZGVmaW5lIHRoYW5rcyB0byB0aGVzZS4KLQlBZGp1c3QgYjRfY19mdW5jdGlvbl9kZWYgdXNlcy4KLQkqIGRhdGEvZ2xyLmMgKHl5cGFyc2UpOiBMaWtld2lzZSwgYnV0IEFOU0kgb25seS4KLQotMjAwMi0xMC0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9vdXRwdXQuYyAocHJlcGFyZSk6IE1vdmUgdGhlIGRlZmluaXRpb24gb2YgYHRva2Vuc19udW1iZXInLAotCWBudGVybXNfbnVtYmVyJywgYHVuZGVmX3Rva2VuX251bWJlcicsIGB1c2VyX3Rva2VuX251bWJlcl9tYXgnCi0JdG8uLi4KLQkocHJlcGFyZV90b2tlbnMpOiBIZXJlLgotCShwcmVwYXJlX3Rva2Vucyk6IFJlbmFtZSBhcy4uLgotCShwcmVwYXJlX3N5bWJvbHMpOiB0aGlzLgotCShwcmVwYXJlKTogTW92ZSB0aGUgZGVmaW5pdGlvbiBvZiBgcnVsZXNfbnVtYmVyJyB0by4uLgotCShwcmVwYXJlX3J1bGVzKTogaGVyZS4KLQkocHJlcGFyZSk6IE1vdmUgdGhlIGRlZmluaXRpb24gb2YgYGxhc3QnLCBgZmluYWxfc3RhdGVfbnVtYmVyJywKLQlgc3RhdGVzX251bWJlcicgdG8uLi4KLQkocHJlcGFyZV9zdGF0ZXMpOiBoZXJlLgotCSogZGF0YS95YWNjLmMsIGRhdGEvbGFscjEuY2MsIGRhdGEvZ2xyLmM6IE5vcm1hbGl6ZSBgPicgaW50byBgPCcuCi0KLTIwMDItMTAtMjAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvdGFibGVzLmgsIHNyYy90YWJsZXMuYywgc3JjL291dHB1dC5jOiBDb21tZW50IGNoYW5nZXMuCi0KLTIwMDItMTAtMjAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL3lhY2MuYywgZGF0YS95YWNjLmMgKGI0X2xvY2F0aW9uX2lmLCBiNF9wdXJlX2lmKTogTW92ZSB0by4uLgotCSogZGF0YS9jLm00OiBoZXJlLgotCi0yMDAyLTEwLTIwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL291dHB1dC5jIChwcmVwYXJlKTogVXNlIE1VU0NMRV9JTlNFUlRfU1RSSU5HLgotCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlX3BhaXJfbGlzdF9ncm93KTogUmVuYW1lIGB2YWwgYXMKLQlgcGFpcicuCi0JKG11c2NsZV9pbml0KTogTW92ZSB0aGUgYGI0X2x0eXBlJywgYGI0X21heGRlcHRoJywgYGI0X2luaXRkZXB0aCcsCi0JYG5hbWUnIHRvLi4uCi0JKiBkYXRhL2dsci5jLCBkYXRhL2xhbHIxLmNjLCBkYXRhL3lhY2MuYyAoYjRfbG9jYXRpb25fdHlwZSkKLQkoYjRfc3RhY2tfZGVwdGhfaW5pdCwgYjRfc3RhY2tfZGVwdGhfbWF4LCBiNF9wYXJzZXJfY2xhc3NfbmFtZSk6Ci0JVGhlc2UuCi0KLTIwMDItMTAtMTkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JRG8gbm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlLCBhcyB0aGF0IGludm9sdmVzIHNlY3VyaXR5IGFuZAotCWNsZWFudXAgaGVhZGFjaGVzLiAgSW5zdGVhZCwgdXNlIGEgcGFpciBvZiBwaXBlcy4KLQlEZXJpdmVkIGZyb20gYSBzdWdnZXN0aW9uIGJ5IEZsb3JpYW4gS3JvaG0uCi0JKiBsaWIvc3VicGlwZS5jLCBsaWIvc3VicGlwZS5oLCBtNC9zdWJwaXBlLm00OiBOZXcgZmlsZXMuCi0JKiBsaWIvbWtzdGVtcC5jLCBsaWIvcmVhZHBpcGUuYywgbGliL3RlbXBuYW1lLmMsIG00L21rc3RlbXAubTQ6IFJlbW92ZS4KLQkqIGNvbmZpZ3VyZS5hYyAoVVRJTFNfRlVOQ19NS1NURU1QLCBqbV9QUkVSRVFfVEVNUE5BTUUpOiBSZW1vdmUuCi0JKEJJU09OX1BSRVJFUV9TVUJQSVBFKTogQWRkLgotCSogbGliL01ha2VmaWxlLmFtIChsaWJiaXNvbl9hX1NPVVJDRVMpOiBSZW1vdmUgcmVhZHBpcGUuYy4KLQlBZGQgc3VicGlwZS5oLCBzdWJwaXBlLmMuCi0JKiBtNC9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IFJlbW92ZSBta3N0ZW1wLm00LiAgQWRkIHN1YnBpcGUubTQuCi0JKiBwby9QT1RGSUxFUy5pbjogQWRkIGxpYi9zdWJwaXBlLmMuCi0JKiBzcmMvb3V0cHV0LmM6IEluY2x1ZGUgInN1YnBpcGUuaCIuCi0JKG00X2ludm9rZSk6IFJlbW92ZSBkZWNsLgotCShzY2FuX3NrZWwpOiBOZXcgZGVjbC4KLQkob3V0cHV0X3NrZWxldG9uKTogVXNlIHBpcGUgcmF0aGVyIHRoYW4gdGVtcG9yYXJ5IGZpbGUgZm9yIG00IGlucHV0LgotCUNoZWNrIHRoYXQgbTRzdWdhci5tNCBpcyByZWFkYWJsZSwgdG8gYXZvaWQgZGVhZGxvY2suCi0JQ2hlY2sgZm9yIHBpcGUgSS9PIGVycm9yLgotCSogc3JjL3NjYW4tc2tlbC5sIChyZWFkcGlwZSk6IFJlbW92ZSBkZWNsLgotCShzY2FuX3NrZWwpOiBOZXcgZnVuY3Rpb24sIHRvIGJlIHVzZWQgaW4gcGxhY2Ugb2YgbTRfaW52b2tlLgotCVJlYWQgZnJvbSBzdHJlYW0gcmF0aGVyIHRoYW4gZmlsZS4KLQotCSogbGliL3RpbWV2YXIuYyAoVElDS1NfVE9fTVNFQywgQ0xPQ0tTX1RPX01TRUMpOiBEbyBub3QgY2FzdCB0bwotCWZsb2F0LCBhcyB0aGlzIGdlbmVyYXRlcyBhIHdhcm5pbmcgb24gU29sYXJpcyA4ICsgR0NDIDMuMiB3aXRoCi0JLS1lbmFibGUtZ2NjLXdhcm5pbmdzLiAgSW5zdGVhZCwgZGl2aWRlIGludG8gMS4wIHJhdGhlciB0aGFuIDE7Ci0JdGhpcyBnZW5lcmF0ZXMgYSBtb3JlLWFjY3VyYXRlIHZhbHVlIGFueXdheS4KLQotCSogbGliL3RpbWV2YXIuYyAodGltZXJ2YXJfYWNjdW11bGF0ZSk6IFJlbmFtZSBsb2NhbHMgdG8KLQlhdm9pZCBjb25mdXNpb24gd2l0aCBzaW1pbGFybHktbmFtZWQgbW9yZS1nbG9iYWwuCi0JKiBzcmMvbXVzY2xlX3RhYi5jIChtdXNjbGVfcGFpcl9saXN0X2dyb3cpOiBMaWtld2lzZS4KLQotCSogc3JjL291dHB1dC5jIChwcmVwYXJlKTogVXNlIHhzdHJkdXAgdG8gY29udmVydCBjaGFyIGNvbnN0ICoKLQl0byBjaGFyICosIHRvIGF2b2lkIEdDQyB3YXJuaW5nLgotCi0yMDAyLTEwLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogdGVzdHMvY2FsYy5hdCAoX0FUX0RBVEFfQ0FMQ19ZKTogRGVmaW5lIFZBTCwgTE9DLCBMRVhfRk9STUFMUywKLQlMRVhfUFJFX0ZPUk1BTFMsIExFWF9BUkdTLCBMRVhfUFJFX0FSR1MsIFVTRV9MRVhfQVJHUy4KLQlVc2UgdGhlbSB0byBoYXZlIGBjYWxjLnknIHJlYWR5IGZvciAlcHVyZS1wYXJzZXIuCi0JKiBkYXRhL3lhY2MuYyAoWVlMRVgpOiBQYXNzIGEgeXlsZXggcmV0dXJuIHR5cGUgdG8KLQliNF9jX2Z1bmN0aW9uX2NhbGwuCi0KLTIwMDItMTAtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JUHJvdG90eXBlIHN1cHBvcnQgb2YgJWxleC1wYXJhbSBhbmQgJXBhcnNlLXBhcmFtLgotCi0JKiBzcmMvcGFyc2UtZ3JhbS55OiBBZGQgdGhlIGRlZmluaXRpb24gb2YgdGhlICVsZXgtcGFyYW0gYW5kCi0JJXBhcnNlLXBhcmFtIHRva2VucywgcGx1cyB0aGVpciBydWxlcy4KLQlEcm9wIHRoZSBgXycgdmVyc2lvbiBvZiAlZ2xyLXBhcnNlci4KLQlBZGQgdGhlICIsIiB0b2tlbi4KLQkqIHNyYy9zY2FuLWdyYW0ubCAoSU5JVElBTCk6IFNjYW4gdGhlbS4KLQkqIHNyYy9tdXNjbGVfdGFiLmM6IENvbW1lbnQgY2hhbmdlcy4KLQkobXVzY2xlX2luc2VydCwgbXVzY2xlX2ZpbmQpOiBSZW5hbWUgYHBhaXInIGFzIGBwcm9iZScuCi0JKiBzcmMvbXVzY2xlX3RhYi5oIChNVVNDTEVfSU5TRVJUX1BSRUZJWCk6IFJlbW92ZSB1bnVzZWQuCi0JKG11c2NsZV9lbnRyeV9zKTogVGhlIGB2YWx1ZScgbWVtYmVyIGlzIG5vIGxvbmdlciBjb25zdC4KLQlBZGp1c3QgYWxsIGRlcGVuZGVuY2llcy4KLQkqIHNyYy9tdXNjbGVfdGFiLmMgKG11c2NsZV9pbml0KTogQWRqdXN0OiB1c2UKLQlNVVNDTEVfSU5TRVJUX1NUUklORy4KLQlJbml0aWFsaXplIHRoZSBvYnN0YWNrIGVhcmxpZXIuCi0JKiBzcmMvbXVzY2xlX3RhYi5oLCBzcmMvbXVzY2xlX3RhYi5jIChtdXNjbGVfZ3JvdykKLQkobXVzY2xlX3BhaXJfbGlzdF9ncm93KTogTmV3LgotCSogZGF0YS9jLm00IChiNF9jX2Z1bmN0aW9uX2NhbGwsIGI0X2NfYXJncyk6IE5ldy4KLQkqIGRhdGEveWFjYy5jIChZWUxFWCk6IFVzZSBiNF9jX2Z1bmN0aW9uX2NhbGwgdG8gaG9ub3IgJWxleC1wYXJhbS4KLQkqIHRlc3RzL2NhbGMuYXQ6IFVzZSAlbG9jYXRpb25zLCBub3QgLS1sb2NhdGlvbnMuCi0JKEFUX0NIRUNLX0NBTENfR0xSKTogVXNlICVnbHItcGFyc2VyLCBub3QgJWdscl9wYXJzZXIuCi0KLTIwMDItMTAtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvZ2V0YXJncy5jICh1c2FnZSk6IFRha2Ugc3RhdHVzIGFzIGFyZ3VtZW50IGFuZCBleGl0Ci0JYWNjb3JkaW5nbHkuCi0JUmVwb3J0IHRoZSB0cmFkaXRpb25hbCBgVHJ5IC4uLiAtLWhlbHAnIG1lc3NhZ2Ugd2hlbiBzdGF0dXMgIT0gMC4KLQkodXNhZ2UsIHZlcnNpb24pOiBEb24ndCB0YWtlIGEgRklMRSAqIGFzIGFyZywgaXQgaXMgcG9pbnRsZXNzLgotCShnZXRhcmdzKTogV2hlbiB0aGVyZSBpcyBhbiBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cywgbWFrZSBpdAotCWFuIGVycm9yLCBhbmQgcmVwb3J0IGl0IEdOVWxpY2FsbHkgdGhhbmtzIHRvIGB1c2FnZSAoKScuCi0KLTIwMDItMTAtMTggIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBkYXRhL2dsci5jICh5eXJlcG9ydFBhcnNlRXJyb3IpOiBEb24ndCBhc3N1bWUgdGhhdCBzcHJpbnRmCi0JeWllbGRzIHRoZSBsZW5ndGggb2YgdGhlIHByaW50ZWQgc3RyaW5nLCBhcyB0aGlzIGlzIG5vdCB0cnVlCi0Jb24gU3VuT1MgNC4xLjQuICBSZXBvcnRlZCBieSBQZXRlciBLbGVpbi4KLQotCSogdGVzdHMvY2FsYy5hdCAoX0FUX0RBVEFfQ0FMQ19ZKTogI3VuZGVmIG1lbWNtcCBhbmQgcmVhbGxvYy4KLQkqIHRlc3RzL2NvbmZsaWN0cy5hdCAoJW5vbmFzc29jIGFuZCBlb2YpOiBMaWtld2lzZS4KLQlGaXhlcyBTdW5PUyA0LjEuNCB0ZXN0IGZhaWx1cmUgcmVwb3J0ZWQgYnkgUGV0ZXIgS2xlaW4uCi0KLTIwMDItMTAtMTcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvZ2V0YXJncy5oICh0cmFjZV9lKTogQWRkIHRyYWNlX3NjYW4sIGFuZCB0cmFjZV9wYXJzZS4KLQkqIHNyYy9nZXRhcmdzLmMgKHRyYWNlX3R5cGVzLCB0cmFjZV9hcmdzKTogQWRqdXN0LgotCSogc3JjL3JlYWRlci5jIChncmFtbWFyX2N1cnJlbnRfcnVsZV9wcmVjX3NldCkKLQkoZ3JhbW1hcl9jdXJyZW50X3J1bGVfZHByZWNfc2V0LCBncmFtbWFyX2N1cnJlbnRfcnVsZV9tZXJnZV9zZXQpOgotCVN0YW5kYXJkaXplIGVycm9yIG1lc3NhZ2VzLgotCUFuZCBzL0BwcmVjLyVwcmVjLyEKLQkocmVhZGVyKTogVXNlIHRyYWNlX2ZsYWcgdG8gZW5hYmxlIHNjYW5uZXIvcGFyc2VyIGRlYnVnZ2luZywKLQlpbnN0ZWFkIG9mIGFuIGFkaG9jIHNjaGVtZS4KLQkqIHNyYy9zY2FuLWdyYW0ubDogUmVtb3ZlIHRyYWlsaW5nIGRlYnVnZ2luZyBjb2RlLgotCi0yMDAyLTEwLTE2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogc3JjL211c2NsZV90YWIuaCAoTVVTQ0xFX1RBQl9IXyk6IFdhcyBtaXNzcGVsbGVkIGFzCi0JTVVTQ0xFX1RBQl9ILgotCi0JKiBORVdTOiBPZmZpY2lhbGx5IGRyb3Agc3VwcG9ydCBmb3IgYnVpbGRpbmcgQmlzb24gd2l0aCBLJlIgQywKLQlzaW5jZSBpdCBkaWRuJ3Qgd29yayBhbnl3YXkgYW5kIGl0J3Mgbm90IHdvcnRoIHdvcnJ5aW5nIGFib3V0LgotCSogTWFrZWZpbGUubWFpbnQgKHdnZXRfZmlsZXMpOiBSZW1vdmUgYW5zaTJrbnIuYy4KLQkoYW5zaTJrbnIuYy11cmxfcHJlZml4KTogUmVtb3ZlLgotCSogbGliLy5jdnNpZ25vcmU6IFJlbW92ZSBhbnNpMmtuciwgYW5zaTJrbnIuKi4KLQkqIGxpYi9NYWtlZmlsZS5hbSAoQVVUT01BS0VfT1BUSU9OUyk6IFJlbW92ZS4KLQkqIHNyYy9NYWtlZmlsZS5hbSAoQVVUT01BS0VfT1BUSU9OUyk6IFJlbW92ZS4KLQotMjAwMi0xMC0xNSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQlTdG9wIHVzaW5nIHRoZSAiZW51bV8iIHRyaWNrIGZvciBLJlItc3R5bGUgZnVuY3Rpb24gZGVmaW5pdGlvbnM7Ci0JaXQgY29uZnVzZWQgbWUsIGFuZCBJIHdhcyB0aGUgYXV0aG9yISAgSW5zdGVhZCwgYXNzdW1lIHRoYXQgcGVvcGxlCi0Jd2hvIHdhbnQgdG8gdXNlIEsmUiBDIGNvbXBpbGVycyAod2hlbiB1c2luZyB0aGVzZSBtb2R1bGVzIGluIEdDQywKLQlwZXJoYXBzPykgd2lsbCBydW4gYW5zaTJrbnIuCi0KLQkqIGxpYi9iYml0c2V0Lmg6IChlbnVtX2JpdHNldF9vcHMsIGVudW1fYml0c2V0X3R5cGUpOiBSZW1vdmUuCi0JQWxsIHVzZXMgb2YgImVudW1fIiBjaGFuZ2VkIHRvICJlbnVtICIuCi0JKiBsaWIvZWJpdHNldC5jIChlbnVtX2ViaXRzZXRfZmluZF9tb2RlKTogTGlrZXdpc2UuCi0JKiBsaWIvbGJpdHNldC5jIChlbnVtX2xiaXRzZXRfZmluZF9tb2RlKTogTGlrZXdpc2UuCi0KLQkqIGxpYi9hYml0c2V0LmMgKGFiaXRzZXRfYW5kLCBhYml0c2V0X2FuZF9jbXAsIGFiaXRzZXRfYW5kX29yLAotCWFiaXRzZXRfYW5kX29yX2NtcCwgYWJpdHNldF9hbmRuLCBhYml0c2V0X2FuZG5fY21wLAotCWFiaXRzZXRfYW5kbl9vciwgYWJpdHNldF9hbmRuX29yX2NtcCwgYWJpdHNldF9ieXRlcywgYWJpdHNldF9jb3B5LAotCWFiaXRzZXRfY29weTEsIGFiaXRzZXRfZGlzam9pbnRfcCwgYWJpdHNldF9lbXB0eV9wLAotCWFiaXRzZXRfZXF1YWxfcCwgYWJpdHNldF9pbml0LCBhYml0c2V0X2xpc3QsIGFiaXRzZXRfbGlzdF9yZXZlcnNlLAotCWFiaXRzZXRfbm90LCBhYml0c2V0X29uZXMsIGFiaXRzZXRfb3IsIGFiaXRzZXRfb3JfYW5kLAotCWFiaXRzZXRfb3JfYW5kX2NtcCwgYWJpdHNldF9vcl9jbXAsIGFiaXRzZXRfcmVzZXQsIGFiaXRzZXRfc2V0LAotCWFiaXRzZXRfc2l6ZSwgYWJpdHNldF9zbWFsbF9saXN0LCBhYml0c2V0X3N1YnNldF9wLCBhYml0c2V0X3Rlc3QsCi0JYWJpdHNldF91bnVzZWRfY2xlYXIsIGFiaXRzZXRfeG9yLCBhYml0c2V0X3hvcl9jbXAsIGFiaXRzZXRfemVybyk6Ci0JVXNlIGZ1bmN0aW9uIHByb3RvdHlwZXM7IHRoaXMgcmVtb3ZlcyB0aGUgbmVlZCBmb3IgZGVjbGFyaW5nCi0Jc3RhdGljIGZ1bmN0aW9ucyBzaW1wbHkgdG8gcHJvdmlkZSB0aGVpciBwcm90b3R5cGVzLgotCSogbGliL2JpdHNldC5jIChiaXRzZXRfYWxsb2MsIGJpdHNldF9hbmRfb3JfLCBiaXRzZXRfYW5kX29yX2NtcF8sCi0JYml0c2V0X2FuZG5fb3JfLCBiaXRzZXRfYW5kbl9vcl9jbXBfLCBiaXRzZXRfYnl0ZXMsIGJpdHNldF9jb3B5XywKLQliaXRzZXRfY291bnRfLCBiaXRzZXRfY3JlYXRlLCBiaXRzZXRfZHVtcCwgYml0c2V0X2ZpcnN0LAotCWJpdHNldF9mcmVlLCBiaXRzZXRfaW5pdCwgYml0c2V0X2xhc3QsIGJpdHNldF9uZXh0LAotCWJpdHNldF9vYnN0YWNrX2FsbG9jLCBiaXRzZXRfb2JzdGFja19mcmVlLCBiaXRzZXRfb25seV9zZXRfcCwKLQliaXRzZXRfb3A0X2NtcCwgYml0c2V0X29yX2FuZF8sIGJpdHNldF9vcl9hbmRfY21wXywgYml0c2V0X3ByZXYsCi0JYml0c2V0X3ByaW50LCBiaXRzZXRfcmVsZWFzZV9tZW1vcnksIGJpdHNldF90b2dnbGVfLAotCWJpdHNldF90eXBlX2Nob29zZSwgYml0c2V0X3R5cGVfZ2V0LCBiaXRzZXRfdHlwZV9uYW1lX2dldCwKLQlkZWJ1Z19iaXRzZXQpOiBMaWtld2lzZS4KLQkqIGxpYi9iaXRzZXQuaCAoYml0c2V0X3NldCwgYml0c2V0X3Jlc2V0LCBiaXRzZXRfdGVzdCk6IExpa2V3aXNlLgotCSogbGliL2JpdHNldF9zdGF0cy5jIChiaXRzZXRfbG9nX2hpc3RvZ3JhbV9wcmludCwKLQliaXRzZXRfcGVyY2VudF9oaXN0b2dyYW1fcHJpbnQsIGJpdHNldF9zdGF0c19hbmQsCi0JYml0c2V0X3N0YXRzX2FuZF9jbXAsIGJpdHNldF9zdGF0c19hbmRfb3IsCi0JYml0c2V0X3N0YXRzX2FuZF9vcl9jbXAsIGJpdHNldF9zdGF0c19hbmRuLCBiaXRzZXRfc3RhdHNfYW5kbl9jbXAsCi0JYml0c2V0X3N0YXRzX2FuZG5fb3IsIGJpdHNldF9zdGF0c19hbmRuX29yX2NtcCwgYml0c2V0X3N0YXRzX2NvcHksCi0JYml0c2V0X3N0YXRzX2NvdW50LCBiaXRzZXRfc3RhdHNfZGlzYWJsZSwgYml0c2V0X3N0YXRzX2Rpc2pvaW50X3AsCi0JYml0c2V0X3N0YXRzX2R1bXAsIGJpdHNldF9zdGF0c19lbXB0eV9wLCBiaXRzZXRfc3RhdHNfZW5hYmxlLAotCWJpdHNldF9zdGF0c19lcXVhbF9wLCBiaXRzZXRfc3RhdHNfZnJlZSwgYml0c2V0X3N0YXRzX2luaXQsCi0JYml0c2V0X3N0YXRzX2xpc3QsIGJpdHNldF9zdGF0c19saXN0X3JldmVyc2UsIGJpdHNldF9zdGF0c19ub3QsCi0JYml0c2V0X3N0YXRzX29uZXMsIGJpdHNldF9zdGF0c19vciwgYml0c2V0X3N0YXRzX29yX2FuZCwKLQliaXRzZXRfc3RhdHNfb3JfYW5kX2NtcCwgYml0c2V0X3N0YXRzX29yX2NtcCwgYml0c2V0X3N0YXRzX3ByaW50LAotCWJpdHNldF9zdGF0c19wcmludF8xLCBiaXRzZXRfc3RhdHNfcmVhZCwgYml0c2V0X3N0YXRzX3Jlc2V0LAotCWJpdHNldF9zdGF0c19zZXQsIGJpdHNldF9zdGF0c19zaXplLCBiaXRzZXRfc3RhdHNfc3Vic2V0X3AsCi0JYml0c2V0X3N0YXRzX3Rlc3QsIGJpdHNldF9zdGF0c190b2dnbGUsIGJpdHNldF9zdGF0c190eXBlX2dldCwKLQliaXRzZXRfc3RhdHNfd3JpdGUsIGJpdHNldF9zdGF0c194b3IsIGJpdHNldF9zdGF0c194b3JfY21wLAotCWJpdHNldF9zdGF0c196ZXJvKTogTGlrZXdpc2UuCi0JKiBsaWIvYml0c2V0di5jIChiaXRzZXR2X2FsbG9jLCBiaXRzZXR2X2NyZWF0ZSwgYml0c2V0dl9mcmVlLAotCWJpdHNldHZfemVybywgYml0c2V0dl9vbmVzLCBiaXRzZXR2X3RyYW5zaXRpdmVfY2xvc3VyZSwKLQliaXRzZXR2X2R1bXAsIGRlYnVnX2JpdHNldHYpOiBMaWtld2lzZS4KLQkqIGxpYi9lYml0c2V0LmMgKGViaXRzZXRfYW5kLCBlYml0c2V0X2FuZF9jbXAsIGViaXRzZXRfYW5kbiwKLQllYml0c2V0X2FuZG5fY21wLCBlYml0c2V0X2J5dGVzLCBlYml0c2V0X2NvcHksIGViaXRzZXRfY29weV8sCi0JZWJpdHNldF9jb3B5X2NtcCwgZWJpdHNldF9kaXNqb2ludF9wLCBlYml0c2V0X2VsdF9hZGQsCi0JZWJpdHNldF9lbHRfYWxsb2MsIGViaXRzZXRfZWx0X2NhbGxvYywgZWJpdHNldF9lbHRfZmluZCwKLQllYml0c2V0X2VsdF9mcmVlLCBlYml0c2V0X2VsdF9sYXN0LCBlYml0c2V0X2VsdF9yZW1vdmUsCi0JZWJpdHNldF9lbHRfemVyb19wLCBlYml0c2V0X2VsdHNfZ3JvdywgZWJpdHNldF9lbXB0eV9wLAotCWViaXRzZXRfZXF1YWxfcCwgZWJpdHNldF9mcmVlLCBlYml0c2V0X2luaXQsIGViaXRzZXRfbGlzdCwKLQllYml0c2V0X2xpc3RfcmV2ZXJzZSwgZWJpdHNldF9ub3QsIGViaXRzZXRfb25lcywgZWJpdHNldF9vcDNfY21wLAotCWViaXRzZXRfb3IsIGViaXRzZXRfb3JfY21wLCBlYml0c2V0X3JlbGVhc2VfbWVtb3J5LCBlYml0c2V0X3Jlc2V0LAotCWViaXRzZXRfc2V0LCBlYml0c2V0X3NpemUsIGViaXRzZXRfc3Vic2V0X3AsIGViaXRzZXRfdGVzdCwKLQllYml0c2V0X3dlZWQsIGViaXRzZXRfeG9yLCBlYml0c2V0X3hvcl9jbXAsIGViaXRzZXRfemVybyk6Ci0JTGlrZXdpc2UuCi0JKiBsaWIvbGJpdHNldC5jIChkZWJ1Z19sYml0c2V0LCBsYml0c2V0X2FuZCwgbGJpdHNldF9hbmRfY21wLAotCWxiaXRzZXRfYW5kbiwgbGJpdHNldF9hbmRuX2NtcCwgbGJpdHNldF9ieXRlcywgbGJpdHNldF9jb3B5LAotCWxiaXRzZXRfY29weV9jbXAsIGxiaXRzZXRfZGlzam9pbnRfcCwgbGJpdHNldF9lbHRfYWxsb2MsCi0JbGJpdHNldF9lbHRfY2FsbG9jLCBsYml0c2V0X2VsdF9maW5kLCBsYml0c2V0X2VsdF9mcmVlLAotCWxiaXRzZXRfZWx0X2xpbmssIGxiaXRzZXRfZWx0X3VubGluaywgbGJpdHNldF9lbHRfemVyb19wLAotCWxiaXRzZXRfZW1wdHlfcCwgbGJpdHNldF9lcXVhbF9wLCBsYml0c2V0X2ZyZWUsIGxiaXRzZXRfaW5pdCwKLQlsYml0c2V0X2xpc3QsIGxiaXRzZXRfbGlzdF9yZXZlcnNlLCBsYml0c2V0X25vdCwgbGJpdHNldF9vbmVzLAotCWxiaXRzZXRfb3AzX2NtcCwgbGJpdHNldF9vciwgbGJpdHNldF9vcl9jbXAsIGxiaXRzZXRfcHJ1bmUsCi0JbGJpdHNldF9yZWxlYXNlX21lbW9yeSwgbGJpdHNldF9yZXNldCwgbGJpdHNldF9zZXQsIGxiaXRzZXRfc2l6ZSwKLQlsYml0c2V0X3N1YnNldF9wLCBsYml0c2V0X3Rlc3QsIGxiaXRzZXRfd2VlZCwgbGJpdHNldF94b3IsCi0JbGJpdHNldF94b3JfY21wLCBsYml0c2V0X3plcm8pOiBMaWtld2lzZS4KLQotMjAwMi0xMC0xNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlWZXJzaW9uIDEuNzUuCi0KLTIwMDItMTAtMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiB0ZXN0cy9NYWtlZmlsZS5hbSAobWFpbnRhaW5lci1jaGVjay1wb3NpeCk6IE5ldy4KLQotMjAwMi0xMC0xNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvZ2xyLmMgW1lZREVCVUddIChZWUxFRlRNT1NUX1NUQVRFKTogSW5pdGlhbGl6ZSB0aGUgeXlsb2MKLQltZW1iZXIuCi0KLTIwMDItMTAtMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvdGFibGVzLmMgKHRhYmxlX25pbmZfcmVtYXApOiBiYXNlIC0+IHRhYi4KLQlSZXBvcnRlZCBieSBNYXR0IFJvc2luZy4KLQotMjAwMi0xMC0xNCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIHRlc3RzL2FjdGlvbi5hdCwgdGVzdHMvY2FsYy5hdCwgdGVzdHMvY29uZmxpY3RzLmF0LAotCXRlc3RzL2N4eC10eXBlLmF0LCB0ZXN0cy9oZWFkZXJzLmF0LCB0ZXN0cy9pbnB1dC5hdCwKLQl0ZXN0cy9yZWdyZXNzaW9uLmF0LCB0ZXN0cy9zeW5jbGluZXMuYXQsIHRlc3RzL3RvcnR1cmUuYXQ6Ci0JU2F5ICJiaXNvbiAtbyBmb28uYyBmb28ueSIsIG5vdCAiYmlzb24gZm9vLnkgLW8gZm9vLmMiLAotCXNvIHRoYXQgdGhlIHRlc3RzIHN0aWxsIHdvcmsgZXZlbiBpZiBQT1NJWExZX0NPUlJFQ1QgaXMgc2V0LgotCSogZG9jL2Jpc29uLnRleGluZm8gKFJwY2FsYyBDb21waWxlLCBJbnZvY2F0aW9uKTogTGlrZXdpc2UuCi0KLQkqIGRhdGEvYy5tNCAoYjRfaW50X3R5cGUpOiBVc2UgeXlzaWduZWRfY2hhciBpbnN0ZWFkIG9mIHNpZ25lZCBjaGFyLAotCWZvciBwb3J0YWJpbGl0eSB0byBLJlIgaG9zdHMuICBGaXggdHlwbzogc2lnbmVkIGNoYXIgaXMgZ3VhcmFudGVlZAotCW9ubHkgdG8gMTI3LCBub3QgdG8gMTI4LgotCSogZGF0YS9nbHIuYyAoeXlzaWduZWRfY2hhcik6IE5ldyB0eXBlLgotCSogZGF0YS95YWNjLmMgKHl5c2lnbmVkX2NoYXIpOiBMaWtld2lzZS4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFdlYjJjIEFjdGlvbnMpOiBzaWduZWQgY2hhciAtPiB5eXNpZ25lZF9jaGFyLgotCi0yMDAyLTEwLTEzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogZGF0YS95YWNjLmMgKHl5cGFyc2UpOiBSZXdyaXRlIHRvIGF2b2lkICJjb21wYXJpc29uIGlzIGFsd2F5cwotCXRydWUgZHVlIHRvIGxpbWl0ZWQgcmFuZ2Ugb2YgZGF0YSB0eXBlIiB3YXJuaW5nIGZyb20gR0NDLgotCi0JKiBkYXRhL2MubTQgKGI0X3Rva2VuX2RlZmluZXMpOiBQcm90ZWN0IGFnYWluc3QgZG91YmxlLWluY2x1c2lvbgotCWJ5IHdyYXBwaW5nIGVudW0geXl0b2tlbnR5cGUncyBkZWZpbml0aW9uIGluc2lkZSAjaWZuZGVmCi0JWVlUT0tFTlRZUEUuICBUaGlzIHVuZG9lcyBhIGJ1ZyBJIGludHJvZHVjZWQgb24gMjAwMi0xMC0xMi4KLQotMjAwMi0xMC0xMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvZ2xyLmMgKHl5Z2xyU2hpZnREZWZlciwgeXlhZGREZWZlcnJlZEFjdGlvbiwgeXlkb0FjdGlvbik6Ci0JVW4geXktIHl5cmhzIHRvIGF2b2lkIHRoZSBuYW1lIGNsYXNoIHdpdGggdGhlIGdsb2JhbCBZWVJIUy4KLQotMjAwMi0xMC0xMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIE1ha2VmaWxlLm1haW50OiBVcGRhdGUgZnJvbSBBdXRvY29uZiAyLjU0LgotCSogbTQvc3RyZXJyb3Jfci5tNCAoQUNfRlVOQ19TVFJFUlJPUl9SKTogUmVtb3ZlLCBzaGlwcGVkIHdpdGggMi41NC4KLQotMjAwMi0xMC0xMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9wcmludC5jIChwcmludF9zdGF0ZSk6IFNlcGFyYXRlIHRoZSBsaXN0IG9mIHNvbHZlZCBjb25mbGljdHMKLQlmcm9tIHRoZSBvdGhlciBpdGVtcy4KLQkqIHRlc3RzL2NvbmZsaWN0cy5hdCAoUmVzb2x2ZWQgU1IgQ29uZmxpY3RzKTogQWRqdXN0LgotCi0yMDAyLTEwLTEzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCUxldCBub25kZXRlcm1pbmlzdGljIHNrZWxldG9ucyBiZSB1c2FibGUgd2l0aCBkZXRlcm1pbmlzdGljCi0JdGFibGVzLgotCi0JV2l0aCB0aGUgcGF0Y2gsIEdBV0sgY29tcGlsZWQgYnkgR0NDIHdpdGhvdXQgLU8yIHBhc3NlcyBpdHMgdGVzdAotCXN1aXRlIHVzaW5nIGEgR0xSIHBhcnNlciBkcml2ZW4gYnkgTEFMUiB0YWJsZXMuICBJdCBmYWlscyB3aXRoIC1PMgotCWJlY2F1c2UgYHN0cnVjdCBzdGF0JyBnaXZlcyB0d28gZGlmZmVyZW50IGFuc3dlcnMgb24gbXkgbWFjaGluZToKLQk4OCAoZGVmaW5pdGlvbiBvZiBhbiBhdXRvIHZhcikgYW5kIGxhdGVyIDk2IChtZW1zZXQgb24gdGhpcyB2YXIpLgotCUhlbmNlIHRoZSBzdGFjayBpcyBiYWRseSBjb3JydW1wdGVkLiAgVGhlIGhlYWRlcnMgaW5jbHVzaW9uIGlzIHRvCi0JYmxhbWU6IGlmIEkgbW92ZSB0aGUgYXdrLmggaW5jbHVzaW9uIGJlZm9yZSBHTFIncyBzeXN0ZW0gaGVhZGVyCi0JaW5jbHVzaW9uLCB0aGUgdHdvIHN0cnVjdCBzdGF0IGhhdmUgdGhlIHNhbWUgc2l6ZS4KLQotCSogc3JjL3RhYmxlcy5jIChwYWNrX3RhYmxlKTogQWx3YXlzIGNyZWF0ZSBjb25mbGljdF90YWJsZS4KLQkodG9rZW5fYWN0aW9ucyk6IEFsd2F5cyBjcmVhdGUgY29uZmxpY3RfbGlzdC4KLQkqIGRhdGEvZ2xyLmMgKFlZRkxBRyk6IFJlbW92ZSwgdW51c2VkLgotCi0yMDAyLTEwLTEzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogY29uZmlndXJlLmFjIChBQ19HTlVfU09VUkNFKTogVXNlIGl0IGluc3RlYWQgb2YgaGFuZCB3cml0dGVuIGNvZGUuCi0JKE8wRkxBR1MpOiBOZXcuCi0JKFZBTEdSSU5ELCBHWFgpOiBOZXcuCi0JKiB0ZXN0cy9hdGxvY2FsLmluIChDRkxBR1MpOiBVc2UgTzBGTEFHUy4KLQkqIHRlc3RzL2Jpc29uLmluOiBSdW4gJFBSRUJJU09OIGEgcHJlLWNvbW1hbmQuCi0JKiB0ZXN0cy9NYWtlZmlsZS5hbSAobWFpbnRhaW5lci1jaGVjaywgbWFpbnRhaW5lci1jaGVjay12YWxncmluZCkKLQkobWFpbnRhaW5lci1jaGVjay1nKyspOiBOZXcuCi0JKiBNYWtlZmlsZS5hbSAobWFpbnRhaW5lci1jaGVjayk6IE5ldy4KLQotMjAwMi0xMC0xMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvZ2xyLmM6IEZvcm1hdHRpbmcgY2hhbmdlcy4KLQlUd2VhayBzb21lIHRyYWNlIG1lc3NhZ2VzIHRvIG1hdGNoIHlhY2MuYydzLgotCi0yMDAyLTEwLTEzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCUdMUiBwYXJzZXJzIHNvbWV0aW1lcyByYWlzZSBwYXJzZSBlcnJvcnMgaW5zdGVhZCBvZiBwZXJmb3JtaW5nIHRoZQotCWRlZmF1bHQgcmVkdWN0aW9uLgotCVJlcG9ydGVkIGJ5IENoYXJsZXMtSGVucnkgZGUgQm95c3Nvbi4KLQotCSogdGVzdHMvY2FsYy5hdCAoX0FUX0NIRUNLX0NBTEMsIF9BVF9DSEVDS19DQUxDX0VSUk9SKTogRG9uJ3QKLQljaGVjayB0aGUgbGVuZ3RoIG9mIHRoZSB0cmFjZXMgd2hlbiAlZ2xyLgotCShfQVRfQ0hFQ0tfQ0FMQ19FUlJPUik6IEFsc28gc2tpcCBgXlN0YWNrJyBsaW5lcywgY29taW5nIGZyb20KLQlHTFIncyB0cmFjZXMuCi0JKEFUX0NIRUNLX0NBTENfTEFMUiwgQVRfQ0hFQ0tfQ0FMQ19HTFIpOiBOZXcuCi0JVGVzdCBHTFIgcGFyc2Vycy4KLQkqIGRhdGEvZ2xyLmMgKFlZTEVGVE1PU1RfU1RBVEUpOiBGaXggaXRzIHZhbHVlLgotCSh5eWx0eXBlKTogUmVtb3ZlIHRoZSB5eSBwcmVmaXggZnJvbSB0aGUgbWVtYmVyIG5hbWVzLgotCSh5eXRhYmxlKTogQ29tcGxldGUgaXRzIGNvbW1lbnQuCi0JKHl5Z2V0TFJBY3Rpb25zKTogTWFwIGVycm9yIGFjdGlvbiBudW1iZXIgZnJvbSBZWVRBQkxFIGZyb20KLQlZWVRBQkxFX05JTkYgdG8gMC4KLQkoeXlpc0Vycm9yQWN0aW9uKTogTm8gbG9uZ2VyIGNvbXBhcmUgWVlBQ1RJT04gdG8gWVlQQUNUX05JTkYKLQkod2hpY2ggd2FzIGEgYnVnOiBpdCBzaG91bGQgaGF2ZSBiZWVuIFlZVEFCRUxfTklORiwgYW5kIHlldCBpdCB3YXMKLQlub3Qgc2F0aXNmeWluZyBhcyB3ZSBjb3VsZCBjb21wYXJlIGFuIFlZQUNUSU9OIGNvbXB1dGVkIGZyb20KLQlZWURFRkFDVCB0byBZWVRBQkxFX05JTkYgYWx0aG91Z2ggdGhleSBhcmUgdW5yZWxhdGVkKTogMCBpcyB0aGUKLQlvbmx5IHZhbHVlIGZvciBlcnJvciBhY3Rpb25zLgotCSh5eXJlcG9ydFBhcnNlRXJyb3IpOiBJbiB2ZXJib3NlIHBhcnNlIGVycm9yIG1lc3NhZ2VzLCBkb24ndCBpc3N1ZQotCWBlcnJvcicgaW4gdGhlIGxpc3Qgb2YgZXhwZWN0ZWQgdG9rZW5zLgotCSogZGF0YS95YWNjLmMgKHl5cGFyc2UpIDx5eWJhY2t1cD46IFJld3JpdGUgdGhlIGRlY29kaW5nIG9mIHRoZQotCW5leHQgYWN0aW9uIHRvIHBlcmZvcm0gdG8gbWF0Y2ggZ2xyLmMncyBkZWNvZGluZy4KLQkoeXl0YWJsZSk6IENvbXBsZXRlIGl0cyBjb21tZW50LgotCi0yMDAyLTEwLTEzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCUZpeCBwcm9ibGVtIHJlcG9ydGVkIGJ5IEhlbnJpayBHcnViYnN0cm9lbSBpbgotCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDItMTAvbXNnMDAwOTguaHRtbD46Ci0JIm5vbnRlcm06IHsgJCQgPSAxMjM7IH0geyAkJCA9ICQxOyB9OyIgd2FzIHdyb25nbHkgcmVqZWN0ZWQsCi0JYmVjYXVzZSB0aGUgQmlzb24gcGFyc2VyIHJlYWRzIHRoZSBzZWNvbmQgYWN0aW9uIGJlZm9yZSByZWR1Y2luZwotCXRoZSBmaXJzdCBvbmUuCi0JKiBzcmMvc2Nhbi1ncmFtLmwgKHJ1bGVfbGVuZ3RoKTogTmV3IHN0YXRpYyB2YXIuCi0JVXNlIGl0IHRvIGtlZXAgdHJhY2sgb2YgdGhlIHJ1bGUgbGVuZ3RoIGluIHRoZSBzY2FubmVyLCBzaW5jZQotCXdlIGNhbid0IGV4cGVjdCB0aGUgcGFyc2VyIHRvIGJlIGluIGxvY2stc3RlcCBzeW5jIHdpdGggdGhlIHNjYW5uZXIuCi0JKGhhbmRsZV9hY3Rpb25fZG9sbGFyLCBoYW5kbGVfYWN0aW9uX2F0KTogVXNlIHRoaXMgdmFyLgotCSogdGVzdHMvYWN0aW9ucy5hdCAoRXhvdGljIERvbGxhcnMpOiBUZXN0IGZvciB0aGUgcHJvYmxlbS4KLQotMjAwMi0xMC0xMiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIGxpYi90aW1ldmFyLmMgWyEgSU5fR0NDICYmIEhBVkVfU1lTX1RJTUVfSF06IEluY2x1ZGUgPHN5cy90aW1lLmg+LgotCSogbTQvdGltZXZhci5tNCAoQklTT05fUFJFUkVRX1RJTUVWQVIpOiBDaGVjayBmb3IgPHN5cy90aW1lLmg+LgotCUluY2x1ZGUgPHN5cy90aW1lLmg+IHdoZW4gY2hlY2tpbmcgZm9yIGNsb2NrX3QgYW5kIHN0cnVjdCB0bXMuCi0JVXNlIHNhbWUgaW5jbHVkZSBvcmRlciBhcyBzb3VyY2UuCi0JVGhpcyBpcyBmb3IgdGhlIFN1bk9TIDQuMS40IHBvcnRpbmcgYnVnIHJlcG9ydGVkIGJ5IFBldGVyIEtsZWluIGluCi0JPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwMi0xMC9tc2cwMDAxNi5odG1sPi4KLQotCSogbGliL3RpbWV2YXIuYzogVXBkYXRlIGNvcHlyaWdodCBkYXRlIGFuZCBjbGFyaWZ5IGNvbW1lbnRzLgotCShnZXRfdGltZSkgW0lOX0dDQ106IEtlZXAgdGhlIEdDQyB2ZXJzaW9uIGZvciByZWZlcmVuY2UuCi0KLQkqIGxpYi90aW1ldmFyLmMsIGxpYi90aW1ldmFyLmgsIGxpYi90aW1ldmFyLmRlZjogSW1wb3J0Ci0JR0NDIHZlcnNpb24gYXMgb2YgdG9kYXksIHRoZW4gbWVyZ2UgQmlzb24ncyBjaGFuZ2VzLgotCUNoYW5nZSAiR0NDIiB0byAiQmlzb24iIGluIGNvcHlyaWdodCBub3RpY2UuICB0aW1ldmFyLmRlZidzCi0JYXV0aG9yIGlzIEFraW0sIHNvIGNoYW5nZSB0aGF0IHRvby4KLQotCSogc3JjL3JlYWRlci5jIChncmFtbWFyX2N1cnJlbnRfcnVsZV9jaGVjayk6Ci0JRG9uJ3Qgd29ycnkgYWJvdXQgdGhlIGRlZmF1bHQgYWN0aW9uIGlmICQkIGlzIHVudHlwZWQuCi0JUHJldmVudHMgYm9ndXMgd2FybmluZ3MgcmVwb3J0ZWQgYnkgSmltIEdpZmZvcmQgaW4KLQk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAyLTEwL21zZzAwMDE1Lmh0bWw+LgotCi0JKiBkYXRhL2MubTQgKGI0X3Rva2VuX2VudW0pOiBEbyBub3QgZGVmaW5lIFlZVE9LRU5UWVBFLgotCSogZGF0YS9nbHIuYywgZGF0YS9sYWxyMS5jYywgZGF0YS95YWNjLmM6Ci0JT3V0cHV0IHRva2VuIGRlZmluaXRpb25zIGJlZm9yZSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4KLQlGaXhlcyBjb21wYXRpYmlsaXR5IHByb2JsZW0gcmVwb3J0ZWQgYnkgSmltIEdpZmZvcmQgZm9yIGtiZCBpbgotCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDItMTAvbXNnMDAwMTQuaHRtbD4uCi0KLTIwMDItMTAtMTEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBkYXRhL3lhY2MuYyAoeXlyZXBvcnRfcGFyc2VfZXJyb3IpOiBSZW1vdmUsIHB1dHRpbmcgaXRzIGJvZHkgaW50by4uLgotCSh5eXBhcnNlKTogaGVyZS4gIFRoaXMgdW5kb2VzIHNvbWUgb2YgdGhlIDIwMDItMDctMjUgY2hhbmdlLgotCUNvbXBhdGliaWxpdHkgcHJvYmxlbSByZXBvcnRlZCBieSBSYWxmIFMuIEVuZ2Vsc2NoYWxsIHdpdGgKLQlPU1NQIGNmZyA8aHR0cDovL3d3dy5vc3NwLm9yZy9wa2cvbGliL2NmZy8+LgotCi0yMDAyLTEwLTExICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogdGVzdHMvcmVncmVzc2lvbi5hdCBDaGFyYWN0ZXJzIEVzY2FwZXMpOiBOZXcuCi0JKiBzcmMvc2Nhbi1ncmFtLmwgKFNDX0VTQ0FQRURfQ0hBUkFDVEVSKTogQWNjZXB0IFwnIGluIHN0cmluZ3MgYW5kCi0JY2hhcmFjdGVycy4KLQlSZXBvcnRlZCBieSBKYW4gTmlldXdlbmh1aXplbi4KLQotMjAwMi0xMC0xMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHBvL2lkLnBvOiBOZXcuCi0KLTIwMDItMTAtMTAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JUG9ydGFiaWxpdHkgZml4ZXMgZm9yIGJpdHNldHM7IHRoaXMgYWxzbyBhdm9pZHMgc2V2ZXJhbCBHQ0MKLQl3YXJuaW5ncy4KLQotCSogbGliL2FiaXRzZXQuYzogSW5jbHVkZSA8c3RkZGVmLmg+LCBmb3Igb2Zmc2V0b2YuCi0JKiBsaWIvbGJpdHNldC5jOiBMaWtld2lzZS4KLQotCSogbGliL2FiaXRzZXQuYyAoYWJpdHNldF9ieXRlcyk6IFJldHVybiBhIHNpemUgdGhhdCBpcyBhbGlnbmVkCi0JcHJvcGVybHkgZm9yIHZlY3RvcnMgb2Ygb2JqZWN0cy4gIERvIG5vdCBhc3N1bWUgdGhhdCBhZGRpbmcgYQotCWhlYWRlciBzaXplIHRvIGEgbXVsdGlwbGUgb2YgYSB3b3JkIHNpemUgeWllbGRzIGEgdmFsdWUgdGhhdCBpcwotCXByb3Blcmx5IGFsaWduZWQgZm9yIHRoZSB3aG9sZSB1bmlvbi4KLQkqIGxpYi9iaXRzZXR2LmMgKGJpdHNldHZfYWxsb2MpOiBMaWtld2lzZS4KLQotCSogbGliL2JpdHNldF9zdGF0cy5jIChiaXRzZXRfc3RhdHNfYnl0ZXMpOiBBZGp1c3QgdG8gbmV3LAotCXVuaXF1ZSBuYW1lcyBmb3Igc3RydWN0dXJlcy4KLQkqIGxpYi9lYml0c2V0LmMgKGViaXRzZXRfYnl0ZXMpOiBMaWtld2lzZS4KLQkqIGxpYi9sYml0c2V0LmMgKGxiaXRzZXRfYnl0ZXMpOiBMaWtld2lzZS4KLQotCSogbGliL2FiaXRzZXQuYyAoYWJpdHNldF9vbmVzLCBhYml0c2V0X3plcm8sIGFiaXRzZXRfZW1wdHlfcCwKLQlhYml0c2V0X2NvcHkxLCBhYml0c2V0X25vdCwgYWJpdHNldF9lcXVhbF9wLCBhYml0c2V0X3N1YnNldF9wLAotCWFiaXRzZXRfZGlzam9pbnRfcCwgYWJpdHNldF9hbmQsIGFiaXRzZXRfYW5kX2NtcCwgYWJpdHNldF9hbmRuLAotCWFiaXRzZXRfYW5kbl9jbXAsIGFiaXRzZXRfb3IsIGFiaXRzZXRfb3JfY21wLCBhYml0c2V0X3hvciwKLQlhYml0c2V0X3hvcl9jbXAsIGFiaXRzZXRfYW5kX29yLCBhYml0c2V0X2FuZF9vcl9jbXAsCi0JYWJpdHNldF9hbmRuX29yLCBhYml0c2V0X2FuZG5fb3JfY21wLCBhYml0c2V0X29yX2FuZCwKLQlhYml0c2V0X29yX2FuZF9jbXAsIGFiaXRzZXRfY29weSk6IFN1cHBseSBwcm90b3R5cGUgZGVjbHMsCi0JdG8gaW1wcm92ZSB0aGUgdHlwZS1jaGVja2luZyB0aGF0IEdDQyBjYW4gZG8uCi0JKiBsaWIvYml0c2V0LmMgKGJpdHNldF9vcDRfY21wKTogTGlrZXdpc2UuCi0JKiBsaWIvYml0c2V0X3N0YXRzLmMgKGJpdHNldF9zdGF0c19jb3VudCwKLQliaXRzZXRfc3RhdHNfZW1wdHlfcCwgYml0c2V0X3N0YXRzX29uZXMsIGJpdHNldF9zdGF0c196ZXJvLAotCWJpdHNldF9zdGF0c19jb3B5LCBiaXRzZXRfc3RhdHNfZGlzam9pbnRfcCwKLQliaXRzZXRfc3RhdHNfZXF1YWxfcCwgYml0c2V0X3N0YXRzX25vdCwgYml0c2V0X3N0YXRzX3N1YnNldF9wLAotCWJpdHNldF9zdGF0c19hbmQsIGJpdHNldF9zdGF0c19hbmRfY21wLCBiaXRzZXRfc3RhdHNfYW5kbiwKLQliaXRzZXRfc3RhdHNfYW5kbl9jbXAsIGJpdHNldF9zdGF0c19vciwgYml0c2V0X3N0YXRzX29yX2NtcCwKLQliaXRzZXRfc3RhdHNfeG9yLCBiaXRzZXRfc3RhdHNfeG9yX2NtcCwgYml0c2V0X3N0YXRzX2FuZF9vciwKLQliaXRzZXRfc3RhdHNfYW5kX29yX2NtcCwgYml0c2V0X3N0YXRzX2FuZG5fb3IsCi0JYml0c2V0X3N0YXRzX2FuZG5fb3JfY21wLCBiaXRzZXRfc3RhdHNfb3JfYW5kLAotCWJpdHNldF9zdGF0c19vcl9hbmRfY21wKTogTGlrZXdpc2UuCi0JKiBsaWIvbGJpdHNldC5jIChsYml0c2V0X2FuZCwgbGJpdHNldF9hbmRfY21wLCBsYml0c2V0X2FuZG4sCi0JbGJpdHNldF9hbmRuX2NtcCwgbGJpdHNldF9vciwgbGJpdHNldF9vcl9jbXAsIGxiaXRzZXRfeG9yLAotCWxiaXRzZXRfeG9yX2NtcCwgbGJpdHNldF9lbXB0eV9wLCBsYml0c2V0X29uZXMsIGxiaXRzZXRfbm90LAotCWxiaXRzZXRfc3Vic2V0X3AsIGxiaXRzZXRfZGlzam9pbnRfcCwgZGVidWdfbGJpdHNldCk6IExpa2V3aXNlLgotCi0JKiBsaWIvYWJpdHNldC5oOiBJbmNsdWRlIGJpdHNldC5oLCBub3QgYmJpdHNldC5oLgotCSogbGliL2ViaXRzZXQuaDogTGlrZXdpc2UuCi0JKiBsaWIvbGJpdHNldC5oOiBMaWtld2lzZS4KLQotCSogbGliL2JiaXRzZXQuaDogKGVudW1fYml0c2V0X29wcywgZW51bV9iaXRzZXRfdHlwZSk6IE5ldyB0eXBlcy4KLQlBbGwgaW5zdGFuY2VzIG9mIHBhcmFtZXRlcnMgb2YgdHlwZSBlbnVtIGJpdHNldF9vcHRzIGFyZSBub3cgb2YKLQl0eXBlIGVudW1fYml0c2V0X29wdHMsIHRvIGNvbmZvcm0gdG8gdGhlIEMgU3RhbmRhcmQsIGFuZCBzaW1pbGFybHkKLQlmb3IgZW51bV9iaXRzZXRfdHlwZS4KLQkqIGxpYi9lYml0c2V0LmMgKGVudW1fZWJpdHNldF9maW5kX21vZGUpOiBMaWtld2lzZS4KLQkqIGxpYi9sYml0c2V0LmMgKGVudW1fbGJpdHNldF9maW5kX21vZGUpOiBMaWtld2lzZS4KLQotCURvIG5vdCB1c2UgInN0cnVjdCBiaXRzZXRfc3RydWN0IiB0byBtZWFuIGRpZmZlcmVudCB0aGluZ3MgaW4KLQlkaWZmZXJlbnQgbW9kdWxlcy4gIE5vdCBvbmx5IGlzIHRoaXMgY29uZnVzaW5nLCBpdCB2aW9sYXRlcwotCXRoZSBDIFN0YW5kYXJkLCB3aGljaCByZXF1aXJlcyB0aGF0IHN0cnVjdHVyZSB0eXBlcyBpbiBkaWZmZXJlbnQKLQltb2R1bGVzIG11c3QgYmUgY29tcGF0aWJsZSBpZiBvbmUgaXMgdG8gYmUgcGFzc2VkIHRvIHRoZSBvdGhlci4KLQkqIGxpYi9iYml0c2V0LmggKGJpdHNldCk6IE5vdyBwb2ludHMgdG8gYSB1bmlvbiwgbm90IHRvIGEgc3RydWN0LgotCUFsbCBpbnN0YW5jZXMgb2YgInN0cnVjdCBiaXRzZXRfc3RydWN0ICoiIHJlcGxhY2VkIHdpdGggImJpdHNldCIuCi0JKiBsaWIvYml0c2V0LmggKHN0cnVjdCBiaXRzZXRfc3RydWN0KTogUmVtb3ZlLCByZXBsYWNpbmcgd2l0aC4uLi4KLQkodW5pb24gYml0c2V0X3VuaW9uLCBzdHJ1Y3QgYWJpdHNldF9zdHJ1Y3QsIHN0cnVjdCBlYml0c2V0X3N0cnVjdCwKLQlzdHJ1Y3QgbGJpdHNldF9zdHJ1Y3QsIHN0cnVjdCBiaXRzZXRfc3RhdHNfc3RydWN0KTogTmV3IHR5cGVzLgotCUFsbCB1c2VzIG9mIHN0cnVjdCBiaXRzZXRfc3RydWN0IGNoYW5nZWQgdG8gdW5pb24gYml0c2V0X3VuaW9uLAotCWV0Yy4KLQkqIGxpYi9hYml0c2V0LmMgKHN0cnVjdCBhYml0c2V0X3N0cnVjdCwgYWJpdHNldCwKLQlzdHJ1Y3QgYml0c2V0X3N0cnVjdCk6IFJlbW92ZS4KLQkqIGxpYi9iaXRzZXRfc3RhdHMuYyAoc3RydWN0IGJpdHNldF9zdGF0c19zdHJ1Y3QsIGJpdHNldF9zdGF0cywKLQlzdHJ1Y3QgYml0c2V0X3N0cnVjdCk6IFJlbW92ZS4KLQkqIGxpYi9lYml0c2V0LmMgKHN0cnVjdCBlYml0c2V0X3N0cnVjdCwgZWJpdHNldCwgc3RydWN0Ci0JYml0c2V0X3N0cnVjdCk6IFJlbW92ZS4KLQkqIGxpYi9sYml0c2V0LmMgKHN0cnVjdCBsYml0c2V0X3N0cnVjdCwgbGJpdHNldCwgYml0c2V0X3N0cnVjdCk6Ci0JTGlrZXdpc2UuCi0KLQlEbyBub3QgY2FsbCBhIGZ1bmN0aW9uIG9mIHR5cGUgVCB1c2luZyBhIGNhbGwgdGhhdCBhc3N1bWVzIHRoZQotCWZ1bmN0aW9uIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgVS4gIFN0YW5kYXJkIEMgcmVxdWlyZXMgdGhhdCBhCi0JZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBhIHR5cGUgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggaXRzCi0JZGVmaW5pdGlvbi4KLQkqIGxpYi9iYml0c2V0LmggKGJpdHNldF9hbmRfb3JfLCBiaXRzZXRfYW5kbl9vcl8sIGJpdHNldF9vcl9hbmRfKToKLQlOZXcgZGVjbHMuCi0JKiBsaWIvYml0c2V0LmMgKGJpdHNldF9hbmRfb3JfLCBiaXRzZXRfYW5kbl9vcl8sIGJpdHNldF9vcl9hbmRfKToKLQlOZXcgZnVuY3Rpb25zLgotCSogbGliL2ViaXRzZXQuYyAoUEZWKTogUmVtb3ZlLgotCSogbGliL2xiaXRzZXQuYyAoUEZWKTogTGlrZXdpc2UuCi0JKiBsaWIvZWJpdHNldC5jIChlYml0c2V0X2FuZCwgZWJpdHNldF9hbmRuLCBlYml0c2V0X29yLAotCWViaXRzZXRfeG9yLCBlYml0c2V0X2NvcHksIGViaXRzZXRfb25lcywgZWJpdHNldF9lbXB0eV9wKTogTmV3Ci0JZGVjbHMuCi0JKGViaXRzZXRfYW5kLCBlYml0c2V0X2FuZG4sIGViaXRzZXRfb3IsIGViaXRzZXRfeG9yKTogTmV3IGZ1bmN0aW9ucy4KLQkoZWJpdHNldF92dGFibGUpOiBVc2UgdGhlbS4KLQkqIGxpYi9sYml0c2V0LmMgKGxiaXRzZXRfYW5kLCBsYml0c2V0X2FuZG4sIGxiaXRzZXRfb3IsCi0JbGJpdHNldF94b3IpOiBOZXcgZnVuY3Rpb25zLgotCShsYml0c2V0X3Z0YWJsZSk6IFVzZSB0aGVtLgotCi0JKiBsaWIvYml0c2V0LmggKGJpdHNldF9uZXh0LCBiaXRzZXRfcHJldiwgYml0c2V0X29ubHlfc2V0X3ApOgotCURlY2xhcmUuCi0KLQkqIGxpYi9iaXRzZXR2LmMgKGJpdHNldHZfYWxsb2MpOiBBZGQgYSBjYXN0IHRvICh2b2lkICopIHRvIGF2b2lkIGEKLQlHQ0Mgd2FybmluZy4KLQkqIGxpYi9sYml0c2V0LmMgKExCSVRTRVRfQ1VSUkVOVDEpOiBMaWtld2lzZS4KLQlVc2Ugb2Zmc2V0b2YsIGZvciBzaW1wbGljaXR5LgotCi0yMDAyLTEwLTA2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogbGliL2JpdHNldC5oIChiaXRzZXRfcmVzZXQpOiBEbyBub3QgYXNzdW1lIHRoYXQgYml0c2V0X3dvcmQgaXMKLQl0aGUgc2FtZSB3aWR0aCBhcyBpbnQuICBUaGlzIHJlYXBwbGllcyBhIGh1bmsgb2YgdGhlIDIwMDItMDgtMTIgcGF0Y2gKLQk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwMi0wOC9tc2cwMDAwNy5odG1sPiwKLQl3aGljaCB3YXMgaW5hZHZlcnRlbnRseSB1bmRvbmUgYnkgdGhlIDIwMDItMDktMzAgcGF0Y2guCi0JKiBsaWIvbGJpdHNldC5jIChkZWJ1Z19sYml0c2V0KTogRG8gbm90IGFzc3VtZSB0aGF0IGJpdHNldF93b3JkIGlzCi0JdGhlIHNhbWUgd2lkdGggYXMgaW50LgotCi0yMDAyLTEwLTA0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCVZlcnNpb24gMS41MC4KLQotCSogY29uZmlndXJlLmFjIChBQ19JTklUKSwgTkVXUzogSW5jcmVtZW50IHZlcnNpb24gbnVtYmVyLgotCi0JKiBkb2MvYmlzb24udGV4aW5mbzogTWlub3Igc3BlbGxpbmcsIGdyYW1tYXIsIGFuZCB3aGl0ZSBzcGFjZQotCWZpeGVzLgotCShTeW1ib2xzKTogTWVudGlvbiB0aGF0IGFueSBuZWdhdGl2ZSB2YWx1ZSByZXR1cm5lZCBmcm9tIHl5bGV4Ci0Jc2lnbmlmaWVzIGVuZC1vZi1pbnB1dC4gIFdhcm4gYWJvdXQgbmVnYXRpdmUgY2hhcnMuICBNZW50aW9uCi0JdGhlIHBvcnRhYmxlIFN0YW5kYXJkIEMgY2hhcmFjdGVyIHNldC4KLQotCVRoZSBHTlUgY29kaW5nIHN0YW5kYXJkIHNheXMgQ0ZMQUdTIGFuZCBZRkxBR1MgYXJlIHJlc2VydmVkCi0JZm9yIHRoZSBpbnN0YWxsZXIgdG8gc2V0LgotCSogbGliL01ha2VmaWxlLmFtIChBTV9DRkxBR1MpOiBSZW5hbWVkIGZyb20gQ0ZMQUdTLgotCSogc3JjL01ha2VmaWxlLmFtIChBTV9DRkxBR1MpOiBMaWtld2lzZS4KLQkoQU1fWUZMQUdTKTogUmVuYW1lZCBmcm9tIFlGTEFHUy4KLQotCUZpeCBzb21lIE1BWCBhbmQgTUlOIHByb2JsZW1zLgotCSogc3JjL2dyYW0uaCAoSVRFTV9OVU1CRVJfTUlOKTogTUlOX01BWCAtPiBJTlRfTUlOLgotCSogc3JjL2xhbHIuaCAoR09UT19OVU1CRVJfTUFYKTogSU5UX01BWCAtPiBTSFJUX01BWC4KLQkqIHNyYy9zeW10YWIuaCAoU1lNQk9MX05VTUJFUl9NQVgpOiBOZXcgbWFjcm8uCi0JKiBzcmMvcmVhZGVyLmMgKHJlYWRlcik6IFVzZSBpdC4KLQotCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoQnJhY2VzIHBhcnNpbmcpOiBVc2UgZ3JlcCwgbm90IGZncmVwLCBhcwotCVBPU0lYIDEwMDMuMS0yMDAxIGhhcyByZW1vdmVkIGZncmVwLgotCi0yMDAyLTEwLTA0ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+Ci0KLQkqIGxpYi9iYml0c2V0LmggKEJJVFNFVF9XSU5ERVhfTUFYKTogUmVkZWZpbmUgc28gdGhhdCBpdCBjYW5ub3QgYmUKLQlpbnRlcnByZXRlZCBhcyBzaWduZWQuCi0JKiBsaWIvZWJpdHNldC5jIChlYml0c2V0X2xpc3QpOiBGaXggYnVnLgotCi0yMDAyLTEwLTAxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCU1vcmUgZml4ZXMgZm9yIDY0LWJpdCBob3N0cyBhbmQgbGFyZ2UgYml0c2V0cy4KLQotCSogbGliL2FiaXRzZXQuYyAoc3RydWN0IGFiaXRzZXRfc3RydWN0Lm5fYml0cywgYWJpdHNldF9zbWFsbF9saXN0LAotCWFiaXRzZXRfc2l6ZSwgYWJpdHNldF9saXN0LCBhYml0c2V0X2xpc3RfcmV2ZXJzZSwgYWJpdHNldF9saXN0KToKLQlVc2UgYml0c2V0X2JpbmRleCwgbm90IGludCBvciB1bnNpZ25lZCBpbnQgb3Igc2l6ZV90LCB0byBjb3VudCBiaXRzLgotCSogbGliL2JiaXRzZXQuaCAoc3RydWN0IGJpdHNldF92dGFibGUuc2l6ZSwgc3RydWN0IGJpdHNldF92dGFibGUuY291bnQsCi0Jc3RydWN0IGJpdHNldF92dGFibGUubGlzdCwgc3RydWN0IGJpdHNldF92dGFibGUubGlzdF9yZXZlcnNlLAotCWJpdHNldF9jb3VudF8sIGJpdHNldF9uZXh0LCBiaXRzZXRfcHJldiwgYml0c2V0X2ZpcnN0LCBiaXRzZXRfbGFzdCwKLQliaXRzZXRfY291bnRfKTogTGlrZXdpc2UuCi0JKiBsaWIvYml0c2V0LmggKGJpdHNldF9pdGVyYXRvci5udW0sIGJpdHNldF9pdGVyYXRvci5pLAotCWJpdHNldF9maXJzdCwgYml0c2V0X2xhc3QpOiBMaWtld2lzZS4KLQkqIGxpYi9iaXRzZXRfc3RhdHMuYyAoYml0c2V0X3N0YXRzX3NpemUsIGJpdHNldF9zdGF0c19saXN0LAotCWJpdHNldF9zdGF0c19saXN0X3JldmVyc2UsIGJpdHNldF9zdGF0c19zaXplLAotCWJpdHNldF9zdGF0c19jb3VudCwgYml0c2V0X3N0YXRzX2xpc3QsIGJpdHNldF9zdGF0X2xpc3RfcmV2ZXJzZSk6Ci0JTGlrZXdpc2UuCi0JKiBsaWIvYml0c2V0di1wcmludC5jIChiaXRzZXR2X21hdHJpeF9kdW1wKTogTGlrZXdpc2UuCi0JKiBsaWIvYml0c2V0di5jIChiaXRzZXR2X2FsbG9jLCBiaXRzZXR2X2NyZWF0ZSwgYml0c2V0dl9mcmVlLAotCWJpdHNldHZfemVybywgYml0c2V0dl9vbmVzLCBiaXRzZXR2X3RyYW5zaXRpdmVfY2xvc3VyZSwKLQliaXRzZXR2X3JlZmxleGl2ZV90cmFuc2l0aXZlX2Nsb3N1cmUpOiBMaWtld2lzZS4KLQkqIGxpYi9iaXRzZXR2LmggKGJpdHNldHZfYWxsb2MsIGJpdHNldHZfY3JlYXRlKTogTGlrZXdpc2UuCi0JKiBsaWIvZWJpdHNldC5jIChlYml0c2V0X3NpemUsIGViaXRzZXRfbGlzdCwgZWJpdHNldF9saXN0X3JldmVyc2UpOgotCUxpa2V3aXNlLgotCSogbGliL2xiaXRzZXQuYyAobGJpdHNldF9zaXplLCBsYml0c2V0X2xpc3QsIGxiaXRzZXRfbGlzdF9tZXJnZSk6Ci0JTGlrZXdpc2UuCi0KLQkqIGxpYi9hYml0c2V0LmMgKGFiaXRzZXRfb25lcywgYWJpdHNldF96ZXJvLCBhYml0c2V0X2J5dGVzKToKLQlVc2Ugc2l6ZV90LCBub3QgdW5zaWduZWQgaW50LCB0byBjb3VudCBieXRlcy4KLQkqIGxpYi9hYml0c2V0LmggKGFiaXRzZXRfYnl0ZXMpOiBMaWtld2lzZS4KLQkqIGxpYi9iaXRzZXQuYyAoYml0c2V0X2J5dGVzLCBiaXRzZXRfYWxsb2MsIGJpdHNldF9vYnN0YWNrX2FsbG9jKToKLQlMaWtld2lzZS4KLQkqIGxpYi9iaXRzZXQuaCAoYml0c2V0X2J5dGVzKTogTGlrZXdpc2UuCi0JKiBsaWIvYml0c2V0X3N0YXRzLmMgKGJpdHNldF9zdGF0c19ieXRlcywgYml0c2V0X3N0YXRzX2luaXQpOiBMaWtld2lzZS4KLQkqIGxpYi9iaXRzZXRfc3RhdHMuaCAoYml0c2V0X3N0YXRzX2J5dGVzKTogTGlrZXdpc2UuCi0JKiBsaWIvYml0c2V0di5jIChiaXRzZXR2X2FsbG9jKTogTGlrZXdpc2UuCi0JKiBsaWIvZWJpdHNldC5jIChlYml0c2V0X2J5dGVzKTogTGlrZXdpc2UuCi0JKiBsaWIvZWJpdHNldC5oIChlYml0c2V0X2J5dGVzKTogTGlrZXdpc2UuCi0JKiBsaWIvbGJpdHNldC5jIChsYml0c2V0X2J5dGVzKTogTGlrZXdpc2UuCi0JKiBsaWIvbGJpdHNldC5oIChsYml0c2V0X2J5dGVzKTogTGlrZXdpc2UuCi0KLQkqIGxpYi9hYml0c2V0LmMgKGFiaXRzZXRfZW1wdHlfcCwgYWJpdHNldF9ub3QsIGFiaXRzZXRfZXF1YWxfcCwKLQlhYml0c2V0X3N1YnNldF9wLCBhYml0c2V0X2Rpc2pvaW50X3AsIGFiaXRzZXRfYW5kLAotCWFiaXRzZXRfYW5kX2NtcCwgYWJpdHNldF9hbmRuLCBhYml0c2V0X2FuZG5fY21wLCBhYml0c2V0X29yLAotCWFiaXRzZXRfb3JfY21wLCBhYml0c2V0X3hvciwgYWJpdHNldF94b3JfY21wLCBhYml0c2V0X2FuZF9vciwKLQlhYml0c2V0X2FuZF9vcl9jbXAsIGFiaXRzZXRfYW5kbl9vciwgYWJpdHNldF9hbmRuX29yX2NtcCwKLQlhYml0c2V0X29yX2FuZCwgYWJpdHNldF9vcl9hbmRfY21wKToKLQlVc2UgYml0c2V0X3dpbmRleCBpbnN0ZWFkIG9mIHVuc2lnbmVkIGludC4KLQkqIGxpYi9iaXRzZXR2LmMgKGJpdHNldHZfZHVtcCwgZGVidWdfYml0c2V0dik6IExpa2V3aXNlLgotCSogbGliL2ViaXRzZXQuYyAoc3RydWN0IGViaXRzZXRfc3RydWN0LnNpemUsIGViaXRzZXRfZWx0c19ncm93LAotCWViaXRzZXRfZWx0X2FkZCwgZWJpdHNldF9lbHRfcmVtb3ZlLCBlYml0c2V0X3dlZWQsCi0JZWJpdHNldF9lbHRfZmluZCwgZWJpdHNldF9saXN0X3JldmVyc2UsIGViaXRzZXRfbGlzdCwgZWJpdHNldF9pbml0KToKLQlMaWtld2lzZS4KLQkqIGxpYi9sYml0c2V0LmMgKGxiaXRzZXRfb25lcywgbGJpdHNldF9ub3QpOiBMaWtld2lzZS4KLQotCSogbGliL2JpdHNldC5jIChiaXRzZXRfcHJpbnQpOgotCVVzZSBwcm9wZXIgcHJpbnRmIGZvcm1hdHMgZm9yIHdpZHRocyBvZiBpbnRlZ2VyIHR5cGVzLgotCSogbGliL2JpdHNldF9zdGF0cy5jIChiaXRzZXRfcGVyY2VudF9oaXN0b2dyYW1fcHJpbnQsCi0JYml0c2V0X2xvZ19oaXN0b2dyYW1fcHJpbnQsIGJpdHNldF9zdGF0c19wcmludF8xKTogTGlrZXdpc2UuCi0JKiBsaWIvYml0c2V0di1wcmludC5jIChiaXRzZXR2X21hdHJpeF9kdW1wKTogTGlrZXdpc2UuCi0JKiBsaWIvYml0c2V0di5jIChiaXRzZXR2X2R1bXAsIGRlYnVnX2JpdHNldHYpOiBMaWtld2lzZS4KLQkqIGxpYi9sYml0c2V0LmMgKGxiaXRzZXRfYnl0ZXMpOiBMaWtld2lzZS4KLQotCSogbGliL2JiaXRzZXQuaCAoQklUU0VUX0JJTkRFWF9NQVgsIEJJVFNFVF9XSU5ERVhfTUFYLAotCUJJVFNFVF9TSVpFX01BWCk6IE5ldyBtYWNyb3MuCi0JKEJJVFNFVF9JTkRFWF9NQVgpOiBSZW1vdmUuICBJdCB3YXNuJ3QgcmlnaHQsIHNpbmNlIGl0IGFzc3VtZWQgdGhhdAotCXNpemVvZiAoYml0c2V0X3dvcmQpID09IHNpemVvZiAoYml0c2V0X3dpbmRleCkuICBBbGwgdXNlcyBjaGFuZ2VkCi0JdG8gQklUU0VUX1dJTkRFWF9NQVguCi0KLQkqIGxpYi9iaXRzZXQuYyAoYml0c2V0X25leHQsIGJpdHNldF9wcmV2LCBiaXRzZXRfZmlyc3QsCi0JYml0c2V0X2xhc3QpOiBSZXR1cm4gQklUU0VUX0JJTkRFWF9NQVggKG5vdCAtMSkgZm9yIG5vIHZhbHVlLAotCXNpbmNlIHdlIG5vdyByZXR1cm4gdGhlIGJpdHNldF9iaW5kZXggdHlwZSAobm90IGludCkuCi0KLQkqIGxpYi9iaXRzZXR2LmMgKGJpdHNldHZfYWxsb2MpOiBDaGVjayBmb3IgYXJpdGhtZXRpYyBvdmVyZmxvdwotCXdoZW4gY29tcHV0aW5nIHNpemVzLgotCSogbGliL2ViaXRzZXQuYyAoZWJpdHNldF9lbHRzX2dyb3cpOiBMaWtld2lzZS4KLQotCSogbGliL2xiaXRzZXQuYyAobGJpdHNldF9lbHRfZmluZCk6IFNpbXBsaWZ5IHdpbmRleCBjYWxjdWxhdGlvbgotCWFuZCBhdm9pZCBjYXN0IHRvIHVuc2lnbmVkLgotCi0yMDAyLTA5LTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogbGliL2FiaXRzZXQuYywgbGliL2JiaXRzZXQuaCwgbGliL2JpdHNldC5jLCBsaWIvYml0c2V0LmgsCi0JKiBsaWIvYml0c2V0X3N0YXRzLmMsIGxpYi9iaXRzZXR2LmMsIGxpYi9lYml0c2V0LmMsIGxpYi9sYml0c2V0LmM6Ci0JVXBkYXRlcyBmcm9tIE1pY2hhZWwgSGF5ZXMuCi0KLTIwMDItMDktMzAgIEFydCBIYWFzICA8YWhhYXNAbmVvc29mdC5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzogVXBkYXRlIEFDX09VVFBVVCBhbmQgQU1fQ09ORklHX0hFQURFUgotCWludm9jYXRpb25zLgotCSogdGVzdHMvY3h4LXR5cGUuYXQgKGRlY2xhcmF0b3IpOiBEb24ndCByZWx5IG9uIE5ERUJVRyBiZWluZyBub3QKKwljcHA6IHNpbXBsaWZ5IHRoZSBGbGV4IHZlcnNpb24gY2hlY2tpbmcgbWFjcm8KKwkqIHNyYy9mbGV4LXNjYW5uZXIsaCAoRkxFWF9WRVJTSU9OKTogQ29uc2lkZXIgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OCiAJZGVmaW5lZC4KIAotMjAwMi0wOS0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTEyLTA3ICBUaGVvcGhpbGUgUmFucXVldCAgPHJhbnF1ZXRAbHJkZS5lcGl0YS5mcj4KIAotCVZlcnNpb24gMS40OWMuCisJbmV3czogaW1wcm92ZSB0aGUgY2FyZXRzIGV4YW1wbGUgYW5kIGZpeCBhIHR5cG8KKwkqIE5FV1M6IEhlcmUuCiAKLTIwMDItMDktMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0xMi0wNyAgVGhlb3BoaWxlIFJhbnF1ZXQgIDxyYW5xdWV0QGxyZGUuZXBpdGEuZnI+CiAKLQkqIGNvbmZpZ3VyZS5hYyAoQU1fSU5JVF9BVVRPTUFLRSk6IFdlIF9uZWVkXyAxLjcuCi0JKEJlY2F1c2Ugb2YgQUNfTElCU09VUkNFKS4KKwljcHA6IGltcHJvdmUgdGhlIEZsZXggdmVyc2lvbiBjaGVja2luZyBtYWNybworCSogc3JjL2ZsZXgtc2Nhbm5lci5oIChGTEVYX1ZFUlNJT04pOiBIZXJlLgogCi0yMDAyLTA5LTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMTItMDcgIFRoZW9waGlsZSBSYW5xdWV0ICA8cmFucXVldEBscmRlLmVwaXRhLmZyPgogCi0JUGxheWluZyB3aXRoIEF1dG9zY2FuLgorCWNhcmV0czogaW1wcm92ZSB0aGUgY29kZQorCSogc3JjL2xvY2F0aW9uLmM6IFJlbW92ZSBkdXBsaWNhdGUgZG9jdW1lbnRhdGlvbnMuCisJKGNhcmV0X2luZm8pOiBTdHlsaXN0aWMgY2hhbmdlLgorCShsb2NhdGlvbl9jYXJldCk6IE1hbnkgcmV3b3Jrcy4KIAotCSogY29uZmlndXJlLmFjOiBSZW1vdmUgdGhlIG9sZCBMSUJPQkogdHdlYWtzLgotCShBQ19SRVBMQUNFX0ZVTkNTKTogQWRkIHN0cnJjaHIgYW5kIHN0cnRvbC4KLQkqIGxpYi9zdHJyY2hyLmM6IE5ldy4KLQkqIGxpYi9zdHJ0b2wuYzogTmV3LCBmcm9tIHRoZSBDb3JldXRpbHMgNC41LjEuCisyMDEyLTEyLTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0yMDAyLTA5LTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwltYWludDogdXBkYXRlIG5ld3MKKwkqIE5FV1M6IFRoZXJlIGlzIG5vIDIuNi42LCByZW1vdmUgaXRzIHN0dWIuCiAKLQlQbGF5aW5nIHdpdGggQXV0b3NjYW4uCisyMDEyLTEyLTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBtNC9wcmVyZXEubTQgKGptX1BSRVJFUV9BUkdNQVRDSCwgam1fRlVOQ19BUkdNQVRDSCk6IE5ldy4KLQkqIGxpYi9NYWtlZmlsZS5hbSAobGliYmlzb25fYV9TT1VSQ0VTKTogTm8gbG9uZ2VyIGluY2x1ZGUKLQlhcmdtYXRjaC5jIGFuZCBhcmdtYXRjaC5oLCBzaW5jZSB0aGV5IGFyZSBBQ19MSUJTT1VSQ0UnZC4KLQkqIGxpYi9zdHJjYXNlY21wLmMsIGxpYi9zdHJuY2FzZWNtcC5jLCBsaWIvbWVtY21wLmM6IE5ldywgZnJvbSB0aGUKLQlDb3JldXRpbHMgNC41LjEuCisJYnVpbGQ6IGtlZXAgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyBhbmQgLVdtaXNzaW5nLXByb3RvdHlwZXMgZm9yIG1vZGVybiBHQ0NzCisJRml4ZXMgYSAtV2Vycm9yIGZhaWx1cmUgb2YgeGFsbG9jLmggdXNlZCBpbiBzcmMuCisJRnJvbSBFcmljIEJsYWtlLgorCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctZ251bGliLzIwMTItMTIvbXNnMDAwMDYuaHRtbAogCi0yMDAyLTA5LTI0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgd2hldGhlciBHQ0MgcHJhZ21hIGRpYWdub3N0aWMgcHVzaC9wb3Agd29ya3MuCisJRW5hYmxlIHRoZXNlIHdhcm5pbmdzIGZvciBiaXNvbiBpZiBpdCBkb2VzLgorCUVuYWJsZSB0aGVzZSB3YXJuaW5ncyBmb3IgdGhlIHRlc3Qgc3VpdGUgYW55d2F5LgogCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoU3RhY2sgT3ZlcmZsb3cpOiB4cmVmIHRvIFJlY3Vyc2lvbi4KLQkoRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMsIFBhcnNlciBTdGFjayBPdmVyZmxvdyk6IE5ldy4KKzIwMTItMTItMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDItMDktMTMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCWJ1aWxkOiBkcm9wIC1XY2FzdC1xdWFsCisJU3VnZ2VzdGVkIGJ5IEppbSBNZXllcmluZy4KKwlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWdudWxpYi8yMDEyLTEyL21zZzAwMDE3Lmh0bWwKKwkqIGNvbmZpZ3VyZS5hYyAod2Fybl9jb21tb24pOiBSZW1vdmUgLVdjYXN0LXF1YWwuCiAKLQlQbGF5aW5nIHdpdGggYXV0b3NjYW4uCisyMDEyLTEyLTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBzcmMvcmVhZGVyLmMgKGdldF9tZXJnZV9mdW5jdGlvbik6IFVzZSB4c3RyZHVwLCBub3Qgc3RyZHVwLgotCSogc3JjL2ZpbGVzLmMgKHNrZWxldG9uX2ZpbmQpOiBSZW1vdmUsIHVudXNlZC4KLQkqIG00L21lbWNtcC5tNDogTmV3LCBmcm9tIHRoZSBDb3JldXRpbHMgNC41LjEuCi0JKiBtNC9wcmVyZXEubTQgKGptX1BSRVJFUV9RVU9URUFSRyk6IFJ1biBqbV9GVU5DX01FTUNNUC4KKwlnbnVsaWI6IHVwZGF0ZQogCi0yMDAyLTA5LTEzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMTItMDYgIFRoZW9waGlsZSBSYW5xdWV0ICA8cmFucXVldEBscmRlLmVwaXRhLmZyPgogCi0JKiBjb25maWd1cmUuYWMgKEFNX0lOSVRfQVVUT01BS0UpOiBSZXF1aXJlIEF1dG9tYWtlIDEuNi4zLgotCSogTWFrZWZpbGUuYW0gKEFVVE9NQUtFX09QVElPTlMpOiBEb24ndC4KKwltaXNjOiBwYWNpZnkgdGhlIFRpbnkgQyBDb21waWxlcgorCSogc3JjL2dyYXBodml6LmMgKGNvbmNsdWRlX3JlZCk6IFJlbW92ZSBhIHVzZWxlc3MgcmV0dXJuLgogCi0yMDAyLTA5LTEzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMTItMDUgIFRoZW9waGlsZSBSYW5xdWV0ICA8cmFucXVldEBscmRlLmVwaXRhLmZyPgogCi0JKiBjb25maWd1cmUuYWM6IFJlcXVpcmUgMi41NC4KLQlzL2ptX0ZVTkNfTUFMTE9DL0FDX0ZVTkNfTUFMTE9DLy4KLQlzL2ptX0ZVTkNfUkVBTExPQy9BQ19GVU5DX1JFQUxMT0MvLgotCSogbTQvYy1icy1hLm00LCBtNC9tYWxsb2MubTQsIG00L21ic3RhdGVfdC5tNCwgbTQvcmVhbGxvYy5tNDoKLQlSZW1vdmUsIHByb3ZpZGVkIGJ5IEF1dG9jb25mIG1hY3Jvcy4KKwljcHA6IG1ha2UgdGhlIGNoZWNrIG9mIEZsZXggdmVyc2lvbiBwb3J0YWJsZQorCVRoaXMgd2FzIHByb2JsZW1hdGljIHdpdGggdGNjIDAuOS4yNQogCi0yMDAyLTA5LTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwkqIHNyYy9mbGV4LXNjYW5uZXIuaCAoRkxFWF9WRVJTSU9OX0dUKTogUmV3cml0ZSBhbmQgcmVuYW1lIGFzLi4uCisJKEZMRVhfVkVSU0lPTik6IFRoaXMuCiAKLQkqIG00L3ByZXJlcS5tNDogVXBkYXRlLCBmcm9tIENvcmV1dGlscyA0LjUuMS4KKzIwMTItMTItMDUgIFRoZW9waGlsZSBSYW5xdWV0ICA8cmFucXVldEBscmRlLmVwaXRhLmZyPgogCi0yMDAyLTA5LTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwltaXNjOiByZXF1aXJlIGdldGxpbmUKKwkqIGJvb3RzdHJhcC5jb25mOiBIZXJlLCB1c2VkIGJ5IHNyYy9sb2NhdGlvbi5jLgorCSogc3JjL2dldGFyZ3MuYyAobG9uZ19vcHRpb25zKTogUmVuYW1lIC0tZmxhZ3MgdG8gLS1mZWF0dXJlLgogCi0JKiBtNC9wcmVyZXEubTQ6IFVwZGF0ZSwgZnJvbSBGaWxldXRpbHMgNC4xLjUuCi0JKiBjb25maWd1cmUuYWMgKGptX1BSRVJFUV9URU1QTkFNRSk6IEludm9rZSBpdC4KLQlSZXBvcnRlZCBieSBNYXJ0aW4gTW9rcmVqcy4KKzIwMTItMTItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDItMDktMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCWMrKzogc3VwcG9ydCB3aWRlIHN0cmluZ3MgZm9yIGZpbGUgbmFtZXMKKwlSZXBvcnRlZCBieSBNYXJrIEJveWFsbC4KKwlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvaGVscC1iaXNvbi8yMDExLTA4L21zZzAwMDAyLmh0bWwKIAotCSogc3JjL3BhcnNlLWdyYW0ueTogQXNzb2NpYXRlIGEgaHVtYW4gcmVhZGFibGUgc3RyaW5nIHRvIGVhY2gKLQl0b2tlbiB0eXBlLgotCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoSW52YWxpZCBpbnB1dHMpOiBBZGp1c3QuCisJKiBkYXRhL2xvY2F0aW9uLmNjIChvcGVyYXRvcjw8KTogQmUgdGVtcGxhdGVkIG9uIHRoZSB0eXBlIG9mCisJb3V0cHV0IHN0cmVhbS4KKwkqIHRlc3RzL2hlYWRlcnMuYXQgKFNldmVyYWwgcGFyc2Vycyk6IEFkanVzdC4KIAotMjAwMi0wOS0xMCAgR2FyeSBWLiBWYXVnaGFuICA8Z2FyeUBnbnUub3JnPgorMjAxMi0xMi0wNSAgVGhlb3BoaWxlIFJhbnF1ZXQgIDxyYW5xdWV0QGxyZGUuZXBpdGEuZnI+CiAKLQkqIHRlc3RzL01ha2VmaWxlLmFtICgkKHNyY2RpcikvcGFja2FnZS5tNCk6IEJpc29uIG5vdyBzaGlwcwotCXdpdGggYW4gQXV0b2NvbmYtMi41eCBzdHlsZSBjb25maWd1cmUuYWMuCisJZG9jOiBkb2N1bWVudCBjYXJldHMKKwkqIE5FV1M6IEFubm91bmNlIGl0LgorCSogZG9jL2Jpc29uLnRleGkgKEJpc29uIE9wdGlvbnMpOiAgSGVyZS4KIAotMjAwMi0wOS0wNiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisyMDEyLTEyLTA1ICBUaGVvcGhpbGUgUmFucXVldCAgPHJhbnF1ZXRAbHJkZS5lcGl0YS5mcj4KIAotCSogZG9jL2Jpc29uLnRleGluZm8gKENvbmRpdGlvbnMpOiBNYWtlIGV4cGxpY2l0IHRoYXQgdGhlIEdQTAotCWV4Y2VwdGlvbiBhcHBsaWVzIG9ubHkgdG8geWFjYy5jLiAgVGhpcyBpcyBhIG1vZGlmaWNhdGlvbiBvZiBhCi0JcGF0Y2ggb3JpZ2luYWxseSBzdWdnZXN0ZWQgYnkgQWtpbSBEZW1haWxsZS4KKwl0ZXN0czogZW5oYW5jZSBleGlzdGluZyB0ZXN0cyB3aXRoIGNhcmV0cworCSogdGVzdHMvYWN0aW9ucy5hdDogVW5zZXQgdmFsdWUuCisJKiB0ZXN0cy9jb25mbGljdHMuYXQ6IFJ1bGUgdXNlbGVzcyBkdWUgdG8gY29uZmxpY3RzLgorCSogdGVzdHMvaW5wdXQuYXQ6IE1pc3NpbmcgdGVybWluYXRvciwgdW5leHBlY3RlZCBlbmQgb2YgZmlsZSwgY29tbWFuZCBsaW5lCisJcmVkZWZpbml0aW9uIG9mIHZhcmlhYmxlLgorCSogdGVzdHMvbmFtZWQtcmVmcy5hdDogTWFueSBlcnJvcnMuCisJKiB0ZXN0cy9yZWR1Y2UuYXQ6IFVzZWxlc3Mgbm9udGVybWluYWxzIGFuZCBydWxlcy4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQ6IExhcmdlIHRva2VuLgogCi0yMDAyLTA5LTA2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMTItMDUgIFRoZW9waGlsZSBSYW5xdWV0ICA8cmFucXVldEBscmRlLmVwaXRhLmZyPgogCi0JKiBkYXRhL2MubTQgKGI0X2NvcHlyaWdodCk6IE1vdmUgdGhlIEdQTCBleGNlcHRpb24gY29tbWVudCBmcm9tCi0JaGVyZSB0by4uLgotCSogZGF0YS95YWNjLmM6IGhlcmUuCisJZXJyb3JzOiBzaG93IGNhcmV0cworCSogc3JjL2xvY2F0aW9ucy5jIChjYXJldF9pbmZvKTogTmV3LCBwZXJzaXN0YW50IGluZm9ybWF0aW9uIHVzZWZ1bAorCWZvci4uLgorCShsb2NhdGlvbl9jYXJldCk6IE5ldywgcHJpbnQgYSBjYXJldC4KKwkoY2xlYW51cF9jYXJldCk6IFJlbGVhc2UgY2FyZXRfaW5mbyBjbGVhbmx5LCBjYWxsIGl0Li4uCisJKiBzcmMvbWFpbi5jIChtYWluKTogSGVyZS4KKwkqIHNyYy9jb21wbGFpbi5jIChlcnJvcl9tZXNzYWdlKTogQ2FsbCBsb2NhdGlvbl9jYXJldCBoZXJlLgogCi0JKiBkYXRhL2xhbHIxLmNjIChzdHJ1Y3QgeXlsdHlwZSk6IERvbid0IGRlZmluZSBpdCwgc2luY2Ugd2UgdXNlCi0JTG9jYXRpb25UeXBlLgotCShiNF9sdHlwZSk6IERlZmF1bHQgdG8geXk6OkxvY2F0aW9uIGZyb20gbG9jYXRpb24uaGguCisyMDEyLTEyLTA1ICBUaGVvcGhpbGUgUmFucXVldCAgPHJhbnF1ZXRAbHJkZS5lcGl0YS5mcj4KIAotMjAwMi0wOS0wNCAgSmltIE1leWVyaW5nICA8amltQG1leWVyaW5nLm5ldD4KKwlnZXRhcmdzOiBhZGQgc3VwcG9ydCBmb3IgLS1mZWF0dXJlLy1mCisJSW50cm9kdWNlIC1mZGlhZ25vc3RpY3Mtc2hvdy1jYXJldAogCi0JKiBkYXRhL3lhY2MuYzogR3VhcmQgdGhlIGRlY2xhcmF0aW9uIG9mIHl5dG9rbnVtIGFsc28gd2l0aAotCWAjaWZkZWYgWVlQUklOVCcsIHNvIGl0IGlzIGRlY2xhcmVkIG9ubHkgd2hlbiB1c2VkLgorCSogc3JjL2dldGFyZ3MuYyAoZmVhdHVyZV9mbGFnKTogTmV3IGdsb2JhbC4KKwkqIHNyYy9nZXRhcmdzLmggKGZlYXR1cmUpOiBOZXcgZW51bS4KIAotMjAwMi0wOS0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTEyLTA0ICBUaGVvcGhpbGUgUmFucXVldCAgPHJhbnF1ZXRAbHJkZS5lcGl0YS5mcj4KIAotCSogY29uZmlndXJlLmluOiBSZW5hbWUgYXMuLi4KLQkqIGNvbmZpZ3VyZS5hYzogdGhpcy4KLQlCdW1wIHRvIDEuNDljLgorCWdldGFyZ3M6IGRvbid0IGxhYmVsIC0tbGFuZ3VhZ2UvLWwgYXMgZXhwZXJpbWVudGFsCisJKiBORVdTOiBBbm5vdW5jZSBpdC4KKwkqIGRvYy9iaXNvbi50ZXhpLCBzcmMvZ2V0YXJncy5jICh1c2FnZSk6IEhlcmUuCiAKLTIwMDItMDktMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0xMi0wMyAgVGhlb3BoaWxlIFJhbnF1ZXQgIDxyYW5xdWV0QGxyZGUuZXBpdGEuZnI+CiAKLQkqIHNyYy9hc3NvYy5jLCBzcmMvY2xvc3VyZS5jLCBzcmMvZ3JhbS5jLCBzcmMvaW5qZWN0aW9ucy5jLAotCSogc3JjL2xhbHIuYywgc3JjL0xSMC5jLCBzcmMvcmVsYXRpb24uYywgc3JjL3RhYmxlcy5jOiBEb24ndAotCXRyYW5zbGF0ZSBtYWludGFpbmVyIG9ubHkgbWVzc2FnZXMuCisJZ2V0YXJnczogZml4IHRoZSBsb2NhdGlvbnMgb2YgY29tbWFuZC1saW5lIGlucHV0CisJKiBzcmMvZ2V0YXJncy5jIChjb21tYW5kX2xpbmVfbG9jYXRpb24pOiBIZXJlLgorCSogdGVzdHMvaW5wdXQuYXQ6IEFkanVzdC4KIAotMjAwMi0wOC0xMiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisyMDEyLTEyLTAzICBUaGVvcGhpbGUgUmFucXVldCAgPHJhbnF1ZXRAbHJkZS5lcGl0YS5mcj4KIAotCVZlcnNpb24gMS40OWIuCisJZXJyb3JzOiBpbmRlbnQgbWlzc2luZyBhY3Rpb24gY29kZSBzZW1pY29sb24gd2FybmluZworCUFsc28sIHJlbW92ZSBhIGR1cGxpY2F0ZSAjZGVmaW5lLgogCi0JKiBNYWtlZmlsZS5hbSAoU1VCRElSUyk6IFJlbW92ZSBpbnRsLgotCShESVNUQ0xFQU5GSUxFUyk6IFJlbW92ZS4KLQkqIE5FV1M6IE1lbnRpb24gdGhhdCBHTlUgTTQgaXMgbm93IHJlcXVpcmVkLiAgQ2xhcmlmeSB3aGF0IGlzCi0JbWVhbnQgYnkgImxhcmdlciBncmFtbWFycyIuICBNZW50aW9uIHRoZSBwdF9CUiB0cmFuc2xhdGlvbi4KLQkqIGNvbmZpZ3VyZS5pbiAoQUNfQ0hFQ0tfREVDTFMpOiBBZGQgZ2V0ZW52LCBnZXRvcHQuCi0JKEFNX0dOVV9HRVRURVhUX1ZFUlNJT04pOiBOZXcgbWFjcm8sIHJlcGxhY2luZyBHRVRURVhUX1ZFUlNJT04gdmFyLgotCUJ1bXAgdmVyc2lvbiBmcm9tIDAuMTEuMiB0byAwLjExLjUuCi0JKEJJU09OX1BSRVJFUV9TVEFHRSk6IFJlbW92ZS4KLQkoQU1fR05VX0dFVFRFWFQpOiBVc2UgZXh0ZXJuYWwgZ2V0dGV4dC4KLQkoQUNfT1VUUFVUKTogUmVtb3ZlIGludGwvTWFrZWZpbGUuCisJKiBzcmMvc2Nhbi1jb2RlLmwgKFNDX1JVTEVfQUNUSU9OKTogSGVyZS4KKwkqIHRlc3RzL2FjdGlvbnMuYXQ6IEFkanVzdC4KIAotCSogY29uZmlnL2RlcGNvbXAsIGNvbmZpZy9pbnN0YWxsLXNoOiBTeW5jIHdpdGggQXV0b21ha2UgMS42LjMuCisyMDEyLTEyLTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBkYXRhL2dsci5jOiBJbmNsdWRlIHN0cmluZy5oLCBmb3Igc3RybGVuLgotCSh5eXJlcG9ydFBhcnNlRXJyb3IpOiBVc2Ugc2l6ZV90IGZvciB5eXNpemUuCi0JKHl5X3l5cHN0YWNrKTogTm8gbG9uZ2VyIG5lc3RlZCBpbnNpZGUgeXlwc3RhdGVzLCBhcyBuZXN0ZWQKLQlmdW5jdGlvbnMgYXJlIG5vdCBwb3J0YWJsZS4gIERvIG5vdCBhc3N1bWUgc2l6ZV90IGlzIHRoZQotCXNhbWUgd2lkdGggYXMgaW50LgotCSh5eXBzdGF0ZXMpOiBEbyBub3QgYXNzdW1lIHRoYXQgcHRyZGlmZl90IGlzIHRoZSBzYW1lIHdpZHRoCi0JYXMgaW50LCBhbmQgc2ltaWxhcmx5IGZvciB5eXBvc24gYW5kIFlZSU5ERVguCisJcGFyc2VyOiBhY2NlcHQgI2xpbmUgTlVNCisJKiBzcmMvc2Nhbi1ncmFtLmwgKHNjYW5uZXIpOiBBY2NlcHQgJyNsaW5lIE5VTScuCisJKGhhbmRsZV9zeW5jbGluZSk6IEFkanVzdCB0byB0aGUgcG9zc2libGUgbWlzc2luZyBmaWxlIG5hbWUuCiAKLQkqIGRhdGEveWFjYy5jOiBGaXggY29tbWVudCBhYm91dCBgJCQgPSAkMSc6IGl0IGNhbiBjb3B5IGdhcmJhZ2UuCisyMDEyLTEyLTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBsaWIvTWFrZWZpbGUuYW0gKElOQ0xVREVTKTogRG8gbm90IGluY2x1ZGUgZnJvbSB0aGUgaW50bAotCWRpcmVjdG9yeSwgd2hpY2ggaGFzIGJlZW4gcmVtb3ZlZC4KLQkqIHNyYy9NYWtlZmlsZS5hbSAoSU5DTFVERVMpOiBMaWtld2lzZS4KKwltNDogdXNlIGEgc2FmZXIgcGF0dGVybiB0byBlbmFibGUvZGlzYWJsZSBvdXRwdXQKKwlXb3JrIG9uIHNvbWUgb3RoZXIgYXJlYXMgb2YgQmlzb24gcmV2ZWFsZWQgdGhhdCBzb21lIG1hY3JvcyBleHBhbmRlZAorCXRvIGJlIGV4cGFuZGVkIG9ubHkgb25jZSB3ZXJlIGFjdHVhbGx5IGV4cGFuZGVkIHNldmVyYWwgdGltZXMuICBUaGlzCisJd2FzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IGNoYW5nZWNvbSB3YXMgbm90IHByb3Blcmx5IHJlc3RvcmVkIGVhY2gKKwl0aW1lLCBhbmQgbWFjcm8gbmFtZXMgYXBwZWFyaW5nIGluIGNvbW1lbnRzIHdlcmUgdGhlbiBleHBhbmRlZC4KIAotCSogbGliL01ha2VmaWxlLmFtIChsaWJiaXNvbl9hX1NPVVJDRVMpOiBBZGQgdW5sb2NrZWQtaW8uaC4KLQkoYml0c2V0c19zb3VyY2VzLCBhZGRpdGlvbmFsX2JpdHNldHNfc291cmNlcywgdGltZXZhcnNfc291cmNlcyk6Ci0JTmV3IHZhcnMuCisJSW50cm9kdWNlIGJlZ2luL2VuZCBtYWNyb3Mgd2hpY2ggYXJlIGVhc2llciB0byBtYXRjaCB0aGF0CisJY2hhbmdlY29tKCkvY2hhbmdlY29tKCMpLgogCi0JKiBsaWIvTWFrZWZpbGUuYW0gKGxpYmJpc29uX2FfU09VUkNFUyk6IEF2b2lkICs9LCBhIEdOVSBtYWtlIGV4dGVuc2lvbi4KLQkqIHRlc3RzL01ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogTGlrZXdpc2UuCi0KLQkqIGxpYi9hYml0c2V0LmMgKGFiaXRzZXRfcmV2ZXJzZV9saXN0LCBlYml0c2V0X3JldmVyc2VfbGlzdCk6Ci0JRG8gbm90IGFzc3VtZSB0aGF0IGJpdHNldF93aW5kZXggaXMgdGhlIHNhbWUgd2lkdGggYXMgdW5zaWduZWQuCi0KLQkqIGxpYi9hYml0c2V0LmMgKGFiaXRzZXRfdW51c2VkX2NsZWFyKTogRG8gbm90IGFzc3VtZSB0aGF0Ci0JYml0c2V0X3dvcmQgaXMgdGhlIHNhbWUgd2lkdGggYXMgaW50LgotCSogbGliL2JiaXRzZXQuaCAoQklUU0VUX0lOREVYX01BWCwgQklUU0VUX01TQik6IExpa2V3aXNlLgotCSogbGliL2JpdHNldC5oIChiaXRzZXRfc2V0LCBiaXRzZXRfcmVzZXQpOiBMaWtld2lzZS4KLQkqIGxpYi9iaXRzZXRfc3RhdHMuYyAoYml0c2V0X3N0YXRzX3NldCwgYml0c2V0X3N0YXRzX3Jlc2V0KTogTGlrZXdpc2UuCi0JKiBsaWIvZWJpdHNldC5jIChlYml0c2V0X3NldCwgZWJpdHNldF9yZXNldCk6IExpa2V3aXNlLgotCSogbGliL2xiaXRzZXQuYyAobGJpdHNldF9zZXQsIGxiaXRzZXRfcmVzZXQpOiBMaWtld2lzZS4KLQotCSogbGliL2FiaXRzZXQuYyAoYWJpdHNldF9vcDEpOiBVc2UgLTEsIG5vdCB+MCwgYXMgbWVtc2V0IGFyZyAoZm9yCi0JcG9ydGFiaWxpdHkgdG8gb25lJ3MgY29tcGxlbWVudCBob3N0cyEpLgotCSogbGliL2ViaXRzZXQuYyAoZWJpdHNldF9vcDEpOiBMaWtld2lzZS4KLQkqIGxpYi9sYml0c2V0LmMgKGxiaXRzZXRfb3AxKTogTGlrZXdpc2UuCi0KLQkqIGxpYi9hcmdtYXRjaC5jLCBsaWIvcXVvdGVhcmcuYywgcXVvdGVhcmcuaDogU3luYyB3aXRoIEdOVSB0YXIuCi0JKiBsaWIvYXJnbWF0Y2guaCwgbGliL2Jhc2VuYW1lLmMsIGxpYi9kaXJuYW1lLmMsIGxpYi9kaXJuYW1lLmgsCi0JbGliL2hhc2guYywgbGliL2hhc2guaCwgbGliL3N0cm5sZW4uYywgbGliL3htYWxsb2MuYzoKLQlTeW5jIHdpdGggZmlsZXV0aWxzLgotCSogbGliL2Vycm9yLmMsIGxpYi9nZXRvcHQuYywgbGliL2dldG9wdC5oLCBsaWIvZ2V0b3B0MS5jLAotCWxpYi9nZXR0ZXh0Lmg6IFN5bmMgd2l0aCBkaWZmdXRpbHMuCi0KLQkqIGxpYi9tZW1yY2hyLmMsIGxpYi9ta3N0ZW1wLmMsIGxpYi9zdHJjaHIuYywgbGliL3N0cm5sZW4uYywKLQlsaWIvc3Ryc3BuLmMsIGxpYi90ZW1wbmFtZS5jOiBVc2UgR1BMLCBub3QgTEdQTC4KLQotCSogbGliL29ic3RhY2suYywgbGliL29ic3RhY2suaDogU3luYyB3aXRoIGZpbGV1dGlscywgZXhjZXB0IHVzZQotCVBST1RPVFlQRVMgdG8gY2hlY2sgZm9yIHByb3RvdHlwZXMsIGFuZCAiZGVmaW5lZCBfX1NURENfXyIgdG8KLQljaGVjayBmb3Igdm9pZCAqLgotCi0JKiBsaWIvYmJpdHNldC5oIChCSVRTRVRfV09SRF9CSVRTKTogTm93IG9mIHR5cGUgdW5zaWduZWQsIG5vdAotCXNpemVfdDsgdGhlIG9sZCB2ZXJzaW9uIHRyaWVkIHRvIGRvIHRoaXMgYnV0IGNhc3RlZCBpbXByb3Blcmx5LgotCShiaXRzZXRfYmluZGV4LCBiaXRzZXRfd2luZGV4KTogTm93IHNpemVfdCwgbm90IHVuc2lnbmVkIGxvbmcuCi0JKGJpdHNldF90ZXN0KTogTm93IHJldHVybnMgaW50LCBub3QgdW5zaWduZWQgbG9uZy4KLQotCSogbGliL2JpdHNldF9zdGF0cy5jOiBJbmNsdWRlICJnZXR0ZXh0LmgiLgotCShfKTogTmV3IG1hY3JvLgotCShiaXRzZXRfc3RhdHNfc2V0LCBiaXRzZXRfc3RhdHNfcmVzZXQsIGJpdHNldF9zdGF0c190ZXN0KTogRG9uJ3QKLQluYW1lIGxvY2FscyAiaW5kZXgiLCBhcyBpdCBnZW5lcmF0ZXMgdW5uZWNlc3Nhcnkgd2FybmluZ3Mgb24gc29tZQotCWhvc3RzIHRoYXQgaGF2ZSBhbiAiaW5kZXgiIGZ1bmN0aW9uLgotCi0JKiBsaWIvYml0c2V0X3N0YXRzLmMgKGJpdHNldF9zdGF0c19wcmludF8xLCBiaXRzZXRfc3RhdHNfcHJpbnQsCi0JYml0c2V0X3N0YXRzX3JlYWQsIGJpdHNldF9zdGF0c193cml0ZSk6IFdyYXAgc3RyaW5ncyBpbiBfKCkgaWYKLQl0aGV5IG5lZWQgdHJhbnNsYXRpb24uCi0JKiBzcmMvTFIwLmMgKHN0YXRlX2xpc3RfYXBwZW5kLCBuZXdfaXRlbXNldHMsIGdldF9zdGF0ZSwKLQlhcHBlbmRfc3RhdGVzLCBnZW5lcmF0ZV9zdGF0ZXMpOiBMaWtld2lzZS4KLQkqIHNyYy9hc3NvYy5jIChhc3NvY190b19zdHJpbmcpOiBMaWtld2lzZS4KLQkqIHNyYy9jbG9zdXJlLmMgKHByaW50X2Nsb3N1cmUsIHNldF9maXJzdHMsIGNsb3N1cmUpOiBMaWtld2lzZS4KLQkqIHNyYy9ncmFtLmMgKGdyYW1tYXJfZHVtcCk6IExpa2V3aXNlLgotCSogc3JjL2luamVjdGlvbnMuYyAoaW5qZWN0aW9uc19jb21wdXRlKTogTGlrZXdpc2UuCi0JKiBzcmMvbGFsci5jIChsb29rYWhlYWRzX3ByaW50KTogTGlrZXdpc2UuCi0JKiBzcmMvcmVsYXRpb24uYyAocmVsYXRpb25fdHJhbnNwb3NlKTogTGlrZXdpc2UuCi0JKiBzcmMvc2Nhbi1ncmFtLmw6IExpa2V3aXNlLgotCSogc3JjL3RhYmxlcy5jICh0YWJsZV9ncm93LCBwYWNrX3ZlY3Rvcik6IExpa2V3aXNlLgotCi0JKiBtNC9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IFJlbW92ZSBjb2Rlc2V0Lm00LAotCWdsaWJjMjEubTQsIGlzYy1wb3NpeC5tNCBsY21lc3NhZ2UubTQsIHN0YWdlLm00LgotCSogbTQvbWFsbG9jLm00LCBtNC9yZWFsbG9jLm00OiBTeW5jIHdpdGggZGlmZnV0aWxzLgotCSogbTQvbWJzdGF0ZV90Lm00OiBTeW5jIHdpdGggZmlsZXV0aWxzLgotCSogbTQvcHJlcmVxLm00IChqbV9QUkVSRVFfUVVPVEVBUkcpOiBBQ19NQlNUQVRFX1QgLT4gQUNfVFlQRV9NQlNUQVRFX1QuCi0KLQkqIHBvL0xJTkdVQVM6IEFkZCBwdF9CUi4KLQkqIHBvL1BPVEZJTEVTLmluOiBBZGQgc3JjL2Fzc29jLmMsIHNyYy9jbG9zdXJlLmMsIHNyYy9ncmFtLmMsCi0Jc3JjL21haW4uYywgc3JjL3JlbGF0aW9uLmMsIHNyYy9zdGF0ZS5jLCBsaWIvYml0c2V0X3N0YXRzLmMsCi0JbGliL3RpbWV2YXIuYy4KLQlVc2Ugc3JjL3BhcnNlLWdyYW0ueSBpbnN0ZWFkIG9mIHNyYy9wYXJzZS1ncmFtLmMsIGFzIHRoZSBnZXR0ZXh0Ci0JbWFudWFsIHJlY29tbWVuZHMuCi0JU2ltaWxhcmx5LCB1c2Ugc3JjL3NjYW4tZ3JhbS5sIGluc3RlYWQgb2Ygc3JjL3NjYW4tZ3JhbS5jLgotCi0JKiBzcmMvY29tcGxhaW4uYyAoc3RyZXJyb3Jfcik6IFJlbW92ZSBkZWNsOyBub3QgbmVlZGVkLgotCShzdHJlcnJvcik6IFVzZSBzYW1lIHBhdHRlcm4gYXMgLi4vbGliL2Vycm9yLmMuCi0KLQkqIHNyYy9maWxlcy5jLCBzcmMvZmlsZXMuaCAoY29tcHV0ZV9oZWFkZXJfbWFjcm8pOiBSZW1vdmU7IHVudXNlZC4KLQotCSogc3JjL2dyYW0uYyAoZ3JhbW1hcl9kdW1wKTogRG8gbm90IGFzc3VtZSBwdHJkaWZmX3QgZml0cyBpbiBpbnQuCi0KLQkqIHNyYy9tYWluLmMgKG1haW4pOiBDYXN0IHJlc3VsdCBvZiBiaW5kdGV4dGRvbWFpbiBhbmQgdGV4dGRvbWFpbgotCXRvIHZvaWQsIHRvIGF2b2lkIGEgR0NDIHdhcm5pbmcgd2hlbiAtLWRpc2FibGUtbmxzIGlzIGluIGVmZmVjdC4KLQotCSogc3JjL3NjYW4tZ3JhbS5sOiBVc2Ugc3RyaW5ncyByYXRoZXIgdGhhbiBlc2NhcGVzIHdoZW4gcG9zc2libGUsCi0JdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiB3YXJuaW5ncyBmcm9tIHhnZXR0ZXh0LgotCShoYW5kbGVfYWN0aW9uX2RvbGxhciwgaGFuZGxlX2FjdGlvbl9hdCk6IERvbid0IHVzZSBpc2RpZ2l0LAotCWFzIGl0IG1pc2hhbmRsZXMgbmVnYXRpdmUgY2hhcnMgYW5kIGl0IG1heSBub3Qgd29yayBhcyBleHBlY3RlZAotCW91dHNpZGUgdGhlIEMgbG9jYWxlLgotCi0JKiBzcmMvc3ltdGFiLmMgKHN5bWJvbF9nZXQpOiBEb24ndCBjYXN0IExIUyBvZiBhbiBhc3NpZ25tZW50OwotCXRoaXMgaXMgYSBHQ0MgZXh0ZW5zaW9uIGFuZCBpcyBub3QgcG9ydGFibGUgdG8gb3RoZXIgY29tcGlsZXJzLgotCi0JKiBzcmMvc3lzdGVtLmggKGFsbG9jYSk6IFVzZSBzYW1lIHBhdHRlcm4gYXMgLi4vbGliL2Vycm9yLmMuCi0JRG8gbm90IGluY2x1ZGUgPGN0eXBlLmg+OyBubyBsb25nZXIgbmVlZGVkLgotCURvIG5vdCBpbmNsdWRlIDxtYWxsb2MuaD47IG5vIGxvbmdlciBuZWVkZWQgKGFuZCBnZW5lcmF0ZXMKLQl3YXJuaW5ncyBvbiBPcGVuQlNEIDMuMCkuCi0KLQkqIHRlc3RzL2N4eC10eXBlLmF0ICh5eWxleCk6IERvIG5vdCBwYXNzIHNpZ25lZCBjaGFyIHRvIGlzdXBwZXI7Ci0JaXQncyBub3QgcG9ydGFibGUuCi0KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQ6IERvIG5vdCB1c2UgJ2NjIC1jIGlucHV0LmMgLW8gaW5wdXQnOwotCVN1biBDIHJlamVjdHMgdGhpcy4gIEluc3RlYWQsIHVzZSAnY2MgLWMgaW5wdXQuYyAtbyBpbnB1dC5vJy4KLQotCSogdGVzdHMvc3luY2xpbmVzLmF0IChBQ19TWU5DTElORVNfQ09NUElMRSk6IEFjY2VwdCBhbnkgbm9uemVybwotCWV4aXQgc3RhdHVzIGFzIGZhaWx1cmUsIG5vdCBqdXN0IGV4aXQgc3RhdHVzIDEuICBTdW4gQyBleGl0cwotCXdpdGggc3RhdHVzIDIgc29tZXRpbWVzLgotCi0JKiB0ZXN0cy90b3J0dXJlLmF0IChBVF9JTkNSRUFTRV9EQVRBX1NJWkUpOiBOZXcgbWFjcm8uCi0JVXNlIGl0IGZvciB0aGUgdHdvIGxhcmdlIHRlc3RzLgotCi0yMDAyLTA4LTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2NvbmZsaWN0cy5jIChjb25mbGljdHNfb3V0cHV0KTogRG9uJ3Qgb3V0cHV0IHJ1bGVzIG5ldmVyCi0JcmVkdWNlZCBoZXJlLCBzaW5jZSBhbnl3YXkgdGhhdCBjb21wdXRhdGlvbiBkb2Vzbid0IHdvcmsuCi0JKiBzcmMvZ3JhbS5oLCBzcmMvZ3JhbS5oIChydWxlX2ZpbHRlcl90LCBydWxlX3VzZWZ1bF9wKQotCShydWxlX3VzZWxlc3NfcCwgcnVsZV9uZXZlcl9yZWR1Y2VkX3ApOiBOZXcuCi0JKGdyYW1tYXJfcnVsZXNfcGFydGlhbF9wcmludCk6IFVzZSBhIGZpbHRlciBpbnN0ZWFkIG9mIGEgcmFuZ2UuCi0JRGlzcGxheSB0aGUgdGl0bGUgb25seSBpZiBuZWVkZWQuCi0JKGdyYW1tYXJfcnVsZXNfcHJpbnQpOiBBZGp1c3QuCi0JKGdyYW1tYXJfcnVsZXNfbmV2ZXJfcmVkdWNlZF9yZXBvcnQpOiBOZXcuCi0JKiBzcmMvdGFibGVzLmMgKGFjdGlvbl9yb3cpOiBNb3ZlIHRoZSBjb21wdXRhdGlvbiBvZiBydWxlcyBuZXZlcgotCXJlZHVjZWQgdG8uLi4KLQkodG9rZW5fYWN0aW9ucyk6IGhlcmUuCi0JKiBzcmMvbWFpbi5jIChtYWluKTogTWFrZSB0aGUgcGFyc2VyIGJlZm9yZSBtYWtpbmcgdGhlIHJlcG9ydCwgc28KLQl0aGF0IHJ1bGVzIG5ldmVyIHJlZHVjZWQgYXJlIGNvbXB1dGVkLgotCUNhbGwgZ3JhbW1hcl9ydWxlc19uZXZlcl9yZWR1Y2VkX3JlcG9ydC4KLQkqIHNyYy9wcmludC5jIChwcmludF9yZXN1bHRzKTogUmVwb3J0IHJ1bGVzIG5ldmVyIHJlZHVjZWQuCi0JKiB0ZXN0cy9jb25mbGljdHMuYXQsIHRlc3RzL3JlZHVjZS5hdDogQWRqdXN0LgotCi0yMDAyLTA4LTAxICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCUluc3RlYWQgb2YgYXR0YWNoaW5nIGxvb2thaGVhZHMgYW5kIGR1cGxpY2F0aW5nIHRoZSBydWxlcyBiZWluZwotCXJlZHVjZWQgYnkgYSBzdGF0ZSwgYXR0YWNoIHRoZSBsb29rYWhlYWRzIHRvIHRoZSByZWR1Y3Rpb25zLgotCi0JKiBzcmMvc3RhdGUuaCAoc3RhdGVfdCk6IFJlbW92ZSB0aGUgYGxvb2thaGVhZHMnLAotCWBsb29rYWhlYWRzX3J1bGUnIG1lbWJlci4KLQkocmVkdWN0aW9uc190KTogQWRkIGEgYGxvb2thaGVhZHMnIG1lbWJlci4KLQlVc2UgYSByZWd1bGFyIGFycmF5IGZvciB0aGUgYHJ1bGVzJy4KLQkqIHNyYy9zdGF0ZS5jIChyZWR1Y3Rpb25zX25ldyk6IEluaXRpYWxpemUgdGhlIGxvb2thaGVhZHMgbWVtYmVyCi0JdG8gMC4KLQkoc3RhdGVfcnVsZV9sb29rYWhlYWRzX3ByaW50KTogQWRqdXN0LgotCSogc3JjL3N0YXRlLmgsIHNyYy9zdGF0ZS5jIChzdGF0ZV9yZWR1Y3Rpb25zX2ZpbmQpOiBOZXcuCi0JKiBzcmMvY29uZmxpY3RzLmMgKHJlc29sdmVfc3JfY29uZmxpY3QsIHNldF9jb25mbGljdHMpCi0JKGNvdW50X3JyX2NvbmZsaWN0cyk6IEFkanVzdC4KLQkqIHNyYy9sYWxyLmMgKExBcnVsZSk6IFJlbW92ZS4KLQkoYWRkX2xvb2tiYWNrX2VkZ2UpOiBBZGp1c3QuCi0JKHN0YXRlX2xvb2thaGVhZHNfY291bnQpOiBOZXcuCi0JKHN0YXRlc19sb29rYWhlYWRzX2luaXRpYWxpemUpOiBNZXJnZSBpbnRvLi4uCi0JKGluaXRpYWxpemVfTEEpOiB0aGlzLgotCShsYWxyX2ZyZWUpOiBBZGp1c3QuCi0JKiBzcmMvbWFpbi5jIChtYWluKTogRG9uJ3QgZnJlZSBudWxsYWJsZSBhbmQgZGVyaXZlcyB0b28gZWFybHk6IGl0Ci0JaXMgdXNlZCBieSAtLXZlcmJvc2UuCi0JKiBzcmMvcHJpbnQuYywgc3JjL3ByaW50X2dyYXBoLmMsIHNyYy90YWJsZXMuYzogQWRqdXN0LgotCi0yMDAyLTA4LTAxICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2Rlcml2ZXMuaCwgc3JjL2Rlcml2ZXMuYyAoZGVyaXZlcyk6IEEgYHJ1bGVfdCoqKicgaW5zdGVhZCBvZgotCWBydWxlX251bWJlcl90KionLgotCShzZXRfZGVyaXZlcywgZnJlZV9kZXJpdmVzKTogUmVuYW1lIGFzLi4uCi0JKGRlcml2ZXNfY29tcHV0ZSwgZGVyaXZlc19mcmVlKTogdGhpcy4KLQlBZGp1c3QgYWxsIGRlcGVuZGVuY2llcy4KLQkqIHNyYy9udWxsYWJsZS5jIChzZXRfbnVsbGFibGUsIGZyZWVfbnVsbGFibGUpOiBSZW5hbWUgYXMuLi4KLQkobnVsbGFibGVfY29tcHV0ZSwgbnVsbGFibGVfZnJlZSk6IHRoZXNlLgotCShydWxlX2xpc3RfdCk6IFN0b3JlIHJ1bGVfdCAqLCBub3QgcnVsZV9udW1iZXJfdC4KLQkqIHNyYy9zdGF0ZS5jIChzdGF0ZV9ydWxlX2xvb2thaGVhZHNfcHJpbnQpOiBEaXJlY3RseSBjb21wYXJlIHJ1bGUKLQlwb2ludGVycywgaW5zdGVhZCBvZiB0aGVpciBudW1iZXJzLgotCSogc3JjL21haW4uYyAobWFpbik6IENhbGwgbnVsbGFibGVfZnJlZSwgYW5kIGRlcml2ZXNfZnJlZSBlYXJsaWVyLAotCWFzIHRoZXkgd2VyZSBsbyBsb25nZXIgdXNlZC4KLQotMjAwMi0wOC0wMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGxpYi90aW1ldmFyLmMgKGdldF90aW1lKTogSW5jbHVkZSBjaGlsZHJlbiB0aW1lLgotCSogc3JjL2xhbHIuaCAoTEEsIExBcnVsZSk6IERvbid0IGV4cG9ydCB0aGVtOiB1c2VkIHdpdGggdGhlCi0Jc3RhdGVfdC4KLQkqIHNyYy9sYWxyLmMgKExBLCBMQXJ1bGUpOiBTdGF0aWMuCi0JKiBzcmMvbGFsci5oLCBzcmMvbGFsci5jIChsYWxyX2ZyZWUpOiBOZXcuCi0JKiBzcmMvbWFpbi5jIChtYWluKTogQ2FsbCBpdC4KLQkqIHNyYy90YWJsZXMuYyAocGFja192ZWN0b3IpOiBDaGVjayB3aGV0aGVyIGxvYyBpcyA+PSB0byB0aGUKLQl0YWJsZV9zaXplLCBub3QgPi4KLQkocGFja190YWJsZXMpOiBEb24ndCBmcmVlIGZyb21zLCB0b3MsIGNvbmZsaWN0X3RvcywgYW5kIHBvcy4uLgotCSh0YWJsZXNfZ2VuZXJhdGUpOiBkbyBpdCwgc2luY2UgdGhhdCdzIGFsc28gaXQgd2hpY2ggYWxsb2NhdGVzCi0JdGhlbS4KLQlEb24ndCBmcmVlIExBIGFuZCBMQXJ1bGUsIG1haW4gZG9lcy4KLQotMjAwMi0wNy0zMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlTZXBhcmF0ZSBwYXJzZXIgdGFibGVzIGNvbXB1dGF0aW9uIGFuZCBvdXRwdXQuCi0KLQkqIHNyYy9vdXRwdXQuYyAobnZlY3RvcnMsIGJhc2VfdCwgYmFzZSwgYmFzZV9uaW5mLCBjb25mbGljdF90YWJsZSkKLQkoY29uZmxpY3RfbGlzdCwgY29uZmxpY3RfbGlzdF9jbnQsIHRhYmxlLCBjaGVjaywgdGFibGVfbmluZikKLQkoeXlkZWZnb3RvLCB5eWRlZmFjdCwgaGlnaCk6IE1vdmUgdG8uLi4KLQkqIHNyYy90YWJsZXMuaCwgc3JjL3RhYmxlcy5jOiBoZXJlLgotCSogc3JjL291dHB1dC5jICh2ZWN0b3JfbnVtYmVyX3QsIFZFQ1RPUl9OVU1CRVJfTUFYKQotCShWRUNUT1JfTlVNQkVSX01JTiwgc3RhdGVfbnVtYmVyX3RvX3ZlY3Rvcl9udW1iZXIpCi0JKHN5bWJvbF9udW1iZXJfdG9fdmVjdG9yX251bWJlciwgbnZlY3RvcnMsIEJBU0VfTUFYLCBCQVNFX01JTikKLQkoZnJvbXMsIHRvcywgY29uZmxpY3RfdG9zLCB0YWxseSwgd2lkdGgsIGFjdGlvbl90LCBBQ1RJT05fTUFYKQotCShBQ1RJT05fTUlOLCBhY3Ryb3csIG9yZGVyLCBuZW50cmllcywgcG9zLCBjb25mbHJvdykKLQkoY29uZmxpY3RfbGlzdF9mcmVlLCB0YWJsZV9zaXplLCBsb3d6ZXJvLCB0YWJsZV9ncm93LCBjb25mbGljdF9yb3cpCi0JKGFjdGlvbl9yb3csIHNhdmVfcm93LCB0b2tlbl9hY3Rpb25zLCBzYXZlX2NvbHVtbiwgZGVmYXVsdF9nb3RvKQotCShnb3RvX2FjdGlvbnMsIHNvcnRfYWN0aW9ucywgbWF0Y2hpbmdfc3RhdGUsIHBhY2tfdmVjdG9yKQotCSh0YWJsZV9uaW5mX3JlbWFwLCBwYWNrX3RhYmxlLCBwcmVwYXJlX2FjdGlvbnMpOiBNb3ZlIHRvLi4uCi0JKiBzcmMvdGFibGVzLmM6IGhlcmUuCi0JKiBzcmMvdGFibGVzLmgsIHNyYy90YWJsZXMuYyh0YWJsZXNfZ2VuZXJhdGUsIHRhYmxlc19mcmVlKTogTmV3LgotCSogc3JjL291dHB1dC5jICh0b2tlbl9hY3Rpb25zLCBvdXRwdXRfYmFzZSwgb3V0cHV0X2NvbmZsaWN0cykKLQkob3V0cHV0X2NoZWNrKTogTWVyZ2UgaW50by4uLgotCShwcmVwYXJlX2FjdGlvbnMpOiB0aGlzLgotCShhY3Rpb25zX291dHB1dCk6IFJlbmFtZSBhcy4uLgotCSh1c2VyX2FjdGlvbnNfb3V0cHV0KTogdGhpcy4KLQkqIHNyYy9tYWluLmMgKG1haW4pOiBDYWxsIHRhYmxlc19nZW5lcmF0ZSBhbmQgdGFibGVzX2ZyZWUuCi0KLTIwMDItMDctMzEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JU3RlYWwgR0NDJ3MgLS10aW1lLXJlcG9ydCBzdXBwb3J0LgotCi0JKiBsaWIvdGltZXZhci5jLCBsaWIvdGltZXZhci5oLCBsaWIvdGltZXZhci5kZWY6IE5ldywKLQlzdG9sZW4vYWRqdXN0ZWQgZnJvbSBHQ0MuCi0JKiBtNC9zdGFnZS5tNDogUmVtb3ZlIHRpbWUgcmVsYXRlZCBjaGVja3MuCi0JKiBtNC90aW1ldmFyLm00OiBOZXcuCi0JKiBjb25maWd1cmUuaW46IEFkanVzdC4KLQkqIHNyYy9zeXN0ZW0uaDogQWRqdXN0IHRvIHVzaW5nIHRpbWV2YXIuaC4KLQkqIHNyYy9nZXRhcmdzLmgsIHNyYy9nZXRhcmdzLmM6IFN1cHBvcnQgdHJhY2VfdGltZSBmb3IKLQktLXRyYWNlPXRpbWUuCi0JKiBzcmMvbWFpbi5jIChzdGFnZSk6IFJlbW92ZS4KLQkobWFpbik6IFJlcGxhY2UgYHN0YWdlJyBpbnZvY2F0aW9ucyB3aXRoIHRpbWV2YXIgY2FsbHMuCi0JKiBzcmMvb3V0cHV0LmM6IEluc2VydCBwZXJ0aW5lbnQgdGltZXZhciBjYWxscy4KLQotMjAwMi0wNy0zMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlMZXQgLS10cmFjZSBoYXZlIGFyZ3VtZW50cy4KLQotCSogc3JjL2dldGFyZ3MuaCAoZW51bSB0cmFjZV9lKTogTmV3LgotCSogc3JjL2dldGFyZ3MuYyAodHJhY2VfYXJncywgdHJhY2VfdHlwZXMsIHRyYWNlX2FyZ21hdGNoKTogTmV3LgotCShsb25nX29wdGlvbnMsIHNob3J0X29wdGlvbnMpOiAtLXRyYWNlLy1UIHRha2VzIGFuIG9wdGlvbmFsCi0JYXJndW1lbnQuCi0JQ2hhbmdlIGFsbCB0aGUgdXNlcyBvZiB0cmFjZV9mbGFnIHRvIHJlZmxlY3QgdGhlIG5ldyBmbGFncy4KLQkqIHRlc3RzL3NldHMuYXQgKEZpcnN0cywgTnVsbGFibGUsIEJyb2tlbiBDbG9zdXJlKTogVXNlIC0tdHJhY2U9c2V0cy4KLQotCVN0cmVuZ3RoZW4gYHN0YWdlJyBwb3J0YWJpbGl0eS4KLQotCSogbTQvc3RhZ2UubTQgKEJJU09OX1BSRVJFUV9TVEFHRSk6IE5ldy4KLQkqIGNvbmZpZ3VyZS5pbjogVXNlIGl0LgotCURvbid0IGNoZWNrIGZvciBtYWxsb2MuaCBhbmQgc3lzL3RpbWVzLmguCi0JKiBzcmMvc3lzdGVtLmg6IEluY2x1ZGUgdGhlbSB3aGVuIGFwcHJvcHJpYXRlLgotCSogc3JjL21haW4uYyAoc3RhZ2UpOiBDb21waWxlIG9ubHkgd2hlbiBtYWxsaW5mbywgc3RydWN0IG1hbGxpbmZvLAotCXRpbWVzIGFuZCBzdHJ1Y3QgdG1zIGFyZSBhdmFpbGFibGUuCi0KLTIwMDItMDctMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JSW4gdmVyYm9zZSBwYXJzZSBlcnJvciBtZXNzYWdlLCBkb24ndCByZXBvcnQgYGVycm9yJyBhcyBhbgotCWV4cGVjdGVkIHRva2VuLgotCSogdGVzdHMvYWN0aW9ucy5hdCAoUHJpbnRlcnMgYW5kIERlc3RydWN0b3JzKTogQWRqdXN0LgotCSogdGVzdHMvY2FsYy5hdCAoQ2FsY3VsYXRvciAkMSk6IEFkanVzdC4KLQkqIGRhdGEveWFjYy5jLCBkYXRhL2dsci5jLCBkYXRhL2xhbHIxLmM6IFdoZW4gbWFraW5nIHRoZSB2ZXJib3NlCi0JZXJyb3IgbWVzc2FnZSwgZG8gbm90IHJlcG9ydCB0aGUgcGFyc2VyIGFjY2VwdHMgdGhlIGVycm9yIHRva2VuIGluCi0JdGhhdCBzdGF0ZS4KLQotMjAwMi0wNy0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlOb3JtYWxpemUgY29uZmxpY3QgcmVsYXRlZCBtZXNzYWdlcy4KLQotCSogc3JjL2NvbXBsYWluLmgsIHNyYy9jb21wbGFpbi5jICh3YXJuLCBjb21wbGFpbik6IE5ldy4KLQkqIHNyYy9jb25mbGljdHMuYyAoY29uZmxpY3RzX3ByaW50KTogVXNlIHRoZW0uCi0JKGNvbmZsaWN0X3JlcG9ydF95YWNjKTogTmV3LCBleHRyYWN0ZWQgZnJvbS4uLgotCShjb25mbGljdHNfcHJpbnQpOiBoZXJlLgotCSogdGVzdHMvY29uZmxpY3RzLmF0LCB0ZXN0cy9leGlzdGluZy5hdDogQWRqdXN0LgotCi0yMDAyLTA3LTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCVJlcG9ydCBydWxlcyB3aGljaCBhcmUgbmV2ZXIgcmVkdWNlZCBieSB0aGUgcGFyc2VyOiB0aG9zZSBoaWRkZW4KLQlieSBjb25mbGljdHMuCi0KLQkqIHNyYy9MUjAuYyAoc2F2ZV9yZWR1Y3Rpb25zKTogRG9uJ3QgbWFrZSB0aGUgZmluYWwgc3RhdGUgdG9vCi0JZGlmZmVyZW50OiBzYXZlIGl0cyByZWR1Y3Rpb24gKGFjY2VwdCkgaW5zdGVhZCBvZiBoYXZpbmcgYSBzdGF0ZQotCXdpdGhvdXQgYW55IGFjdGlvbiAobm8gc2hpZnQgb3IgZ290bywgbm8gcmVkdWNlKS4KLQlOb3RlOiB0aGUgZmluYWwgc3RhdGUgaXMgbm93IGEgYGByZWd1bGFyJycgc3RhdGUsIGkuZS4sIHRoZQotCXBhcnNlcnMgbm93IGNvbnRhaW4gYHJlZHVjZSAwJyBhcyBkZWZhdWx0IHJlZHVjdGlvbi4KLQlOZXZlcnRoZWxlc3MsIHNpbmNlIHRoZXkgZGVjaWRlIHRvIGBhY2NlcHQnIHdoZW4geXlzdGF0ZSA9Ci0JZmluYWxfc3RhdGUsIHRoZXkgc3RpbGwgd2lsbCBub3QgcmVkdWNlIHJ1bGUgMC4KLQkqIHNyYy9wcmludC5jIChwcmludF9hY3Rpb25zLCBwcmludF9yZWR1Y3Rpb24pOiBBZGp1c3QuCi0JKiBzcmMvb3V0cHV0LmMgKGFjdGlvbl9yb3cpOiBUcmFjayByZWR1Y2VkIHJ1bGVzLgotCSh0b2tlbl9hY3Rpb25zKTogUmVwb3J0IHJ1bGVzIG5ldmVyIHJlZHVjZWQuCi0JKiB0ZXN0cy9jb25mbGljdHMuYXQsIHRlc3RzL3JlZ3Jlc3Npb24uYXQ6IEFkanVzdC4KLQotMjAwMi0wNy0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlgc3RhZ2UnIHdhcyBhY2NpZGVudGx5IGluY2x1ZGVkIGluIGEgcHJldmlvdXMgcGF0Y2guCi0JSW5pdGlhdGUgaXRzIGF1dG9jb25maXNjYXRpb24uCi0KLQkqIGNvbmZpZ3VyZS5pbjogTG9vayBmb3IgbWFsbG9jLmggYW5kIHN5cy90aW1lcy5oLgotCSogc3JjL21haW4uYyAoc3RhZ2UpOiBBZGp1c3QuCi0JUmVwb3J0IG9ubHkgd2hlbiB0cmFjZV9mbGFnLgotCi0yMDAyLTA3LTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3N0YXRlLmgsIHNyYy9zdGF0ZS5jICh0cmFuc2l0aW9uc190KTogSG9sZHMgc3RhdGVfdConcywgbm90Ci0Jc3RhdGVfbnVtYmVyX3QuCi0JKGVycnNfdCk6IHN5bWJvbF90Kiwgbm90IHN5bWJvbF9udW1iZXJfdC4KLQkocmVkdWN0aW9uc190KTogcnVsZV90Kiwgbm90IHJ1bGVfbnVtYmVyX3QuCi0JKEZPUl9FQUNIX1NISUZUKTogTmV3LgotCSogc3JjL0xSMC5jLCBzcmMvY29uZmxpY3RzLmMsIHNyYy9sYWxyLmMsIHNyYy9vdXRwdXQuYwotCSogc3JjL3ByaW50LmMsIHNyYy9wcmludF9ncmFwaC5jOiBBZGp1c3QuCi0KLTIwMDItMDctMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JVXNlICRhY2NlcHQgYW5kICRlbmQsIGFzIEJZYWNjIGFuZCBCVFlhY2MgZG8sIGluc3RlYWQgb2YgJGF4aW9tIGFuZCAkLgotCi0JKiBzcmMvc3ltdGFiLmgsIHNyYy9zeW10YWIuYyAoZW9mdG9rZW4sIGF4aW9tKTogUmVuYW1lIGFzLi4uCi0JKGVuZHRva2VuLCBhY2NlcHQpOiB0aGVzZS4KLQkqIHNyYy9yZWFkZXIuYyAocmVhZGVyKTogU2V0IGVuZHRva2VuJ3MgZGVmYXVsdCB0YWcgdG8gIiRlbmQiLgotCVNldCB1bmRlZnRva2VuJ3MgdGFnIHRvICIkdW5kZWZpbmVkIiBpbnN0ZWFkIG9mICIkdW5kZWZpbmVkLiIuCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoVGFibGUgb2YgU3ltYm9scyk6IE1lbnRpb24gJGFjY2VwdCBhbmQgJGVuZC4KLQlBZGp1c3QuCi0KLTIwMDItMDctMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvcmVkdWNlLmMgKHJlZHVjZV9ncmFtbWFyKTogV2hlbiB0aGUgbGFuZ3VhZ2UgaXMgZW1wdHksCi0JY29tcGxhaW4gYWJvdXQgdGhlIHN0YXJ0IHN5bWJvbCwgbm90IHRoZSBheGlvbS4KLQlVc2UgaXRzIGxvY2F0aW9uLgotCSogdGVzdHMvcmVkdWNlLmF0IChFbXB0eSBMYW5ndWFnZSk6IE5ldy4KLQotMjAwMi0wNy0yNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9yZWFkZXIuaCwgc3JjL3JlYWRlci5jIChncmFtX2Vycm9yKTogLi4uIGNhbid0IGdldAotCXl5Y29udHJvbCB3aXRob3V0IG1ha2luZyB0b28gc3Ryb25nIGFzc3VtcHRpb25zIG9uIHRoZSBwYXJzZXIKLQlpdHNlbGYuCi0JKiBzcmMvb3V0cHV0LmMgKHByZXBhcmVfdG9rZW5zKTogVXNlIHRoZSByZWFsIDB0aCB2YWx1ZSBvZgotCXRva2VuX3RyYW5zbGF0aW9ucyBpbnN0ZWFkIG9mIGAwJy4KLQkqIHNyYy9wYXJzZS1ncmFtLnkgKHl5ZXJyb3IpOiBEb24ndCByZWx5IG9uIHl5Y29udHJvbCBiZWluZwotCXZpc2libGUgaGVyZS4KLQkqIGRhdGEveWFjYy5jICh5eXJlcG9ydF9wYXJzZV9lcnJvcik6IFJlbmFtZSB5eWxvY2F0aW9uIGFzIHl5bGxvYwotCWZvciB0aGUgdGltZSBiZWluZzogJWxvY2F0aW9ucyBvdWdodCB0byBwcm92aWRlIGl0IHRvIHl5ZXJyb3IuCi0KLTIwMDItMDctMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvb3V0cHV0LmMgKHByZXBhcmVfdG9rZW5zKTogR28gdXAgdG8gbnRva2Vucywgbm90IG50b2tlbnMgKyAxLgotCSogZG9jL2Jpc29uLnRleGluZm8gKERlY2wgU3VtbWFyeSk6IHMvJGlsbGVnYWwvJHVuZGVmaW5lZC4vLgotCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoV2ViMmMgQWN0aW9ucyk6IEFkanVzdC4KLQotMjAwMi0wNy0yNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlTdG9wIHN0b3JpbmcgcnVsZXMgZnJvbSAxIHRvIG5ydWxlcyArIDEuCi0KLQkqIHNyYy9MUjAuYywgc3JjL2Nsb3N1cmUuYywgc3JjL2Rlcml2ZXMuYywgc3JjL2dyYW0uYywgc3JjL2xhbHIuYwotCSogc3JjL251bGxhYmxlLmMsIHNyYy9vdXRwdXQuYywgc3JjL3ByaW50LmMsIHNyYy9yZWFkZXIuYwotCSogc3JjL3JlZHVjZS5jOiBBbGxvY2F0ZSBhbmQgZnJlZSBmcm9tICZydWxlc1swXSwgbm90ICZydWxlc1sxXS4KLQlJdGVyYXRlIGZyb20gMCB0byBucnVsZXMuCi0JVXNlIHJ1bGVfbnVtYmVyX2FzX2l0ZW1fbnVtYmVyIGFuZCBpdGVtX251bWJlcl9hc19ydWxlX251bWJlci4KLQlBZGp1c3QgdG8gYGRlcml2ZScgbm93IGNvbnRhaW5pbmcgcG9zc2libHkgMC4KLQkqIHNyYy9ncmFtLmggKHJ1bGVfbnVtYmVyX2FzX2l0ZW1fbnVtYmVyLCBpdGVtX251bWJlcl9hc19ydWxlX251bWJlcik6Ci0JSGFuZGxlIHRoZSBgLSAxJyBwYXJ0IGluIHJ1bGUgbnVtYmVycyBmcm9tL3RvIGl0ZW0gbnVtYmVycy4KLQkqIHNyYy9jb25mbGljdHMuYyAobG9nX3Jlc29sdXRpb24pOiBGaXggdGhlIG1lc3NhZ2Ugd2hpY2ggcmV2ZXJzZWQKLQlzaGlmdCBhbmQgcmVkdWNlLgotCSogc3JjL291dHB1dC5jIChhY3Rpb25fcm93KTogSW5pdGlhbGl6ZSBkZWZhdWx0X3J1bGUgdG8gLTEuCi0JKHRva2VuX2FjdGlvbnMpOiBBZGp1c3QuCi0JKiB0ZXN0cy9zZXRzLmF0IChOdWxsYWJsZSwgRmlyc3RzKTogRml4IHRoZSBwcmV2aW91c2x5IGJvZ3VzCi0JZXhwZWN0ZWQgb3V0cHV0LgotCSogdGVzdHMvY29uZmxpY3RzLmF0IChSZXNvbHZlZCBTUiBDb25mbGljdHMpOiBMaWtld2lzZS4KLQotMjAwMi0wNy0yNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvYy5tNCAoYjRfY19mdW5jdGlvbiwgYjRfY19hbnNpX2FyZ3MsIGI0X2NfYW5zaV9hcmcpCi0JKGI0X2Nfa25yX2FyZ19uYW1lcywgYjRfY19rbnJfYXJnX25hbWUsIGI0X2Nfa25yX2FyZ19kZWNscykKLQkoYjRfY19rbnJfYXJnX2RlY2wpOiBOZXcuCi0JKiBkYXRhL3lhY2MuYzogVXNlIGl0IHRvIGRlZmluZSB5eXN5bXByaW50LCB5eWRlc3RydWN0LCBhbmQKLQl5eXJlcG9ydF9wYXJzZV9lcnJvci4KLQotMjAwMi0wNy0yNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEveWFjYy5jICh5eXJlcG9ydF9wYXJzZV9lcnJvcik6IE5ldywgZXh0cmFjdGVkIGZyb20uLi4KLQkoeXlwYXJzZSk6IGhlcmUuCi0JKHl5ZGVzdHJ1Y3QsIHl5c3ltcHJpbnQpOiBNb3ZlIGFib3ZlIHl5cGFyc2UuCi0JQmUgSyZSIGNvbXBsaWFudC4KLQotMjAwMi0wNy0yNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvYy5tNCAoYjRfaW50c19pbiwgYjRfaW50X3R5cGUsIGI0X2ludF90eXBlX2Zvcik6IE5ldywKLQlyZXBsYWNlLi4uCi0JKGI0X3NpbnRfdHlwZSwgYjRfdWludF90eXBlKTogdGhlc2UuCi0JKiBkYXRhL3lhY2MuYywgZGF0YS9nbHIuYywgZGF0YS9sYWxyMS5jYzogVXNlIGI0X2ludF90eXBlX2Zvci4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFdlYjJjIEFjdGlvbnMpOiBBZGp1c3QuCi0KLTIwMDItMDctMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvZ3JhbS5oIChUSUVNX05VTUJFUl9NQVgpOiBOZXcuCi0JKGl0ZW1fbnVtYmVyX29mX3J1bGVfbnVtYmVyLCBydWxlX251bWJlcl9vZl9pdGVtX251bWJlcik6IFJlbmFtZQotCWFzLi4uCi0JKHJ1bGVfbnVtYmVyX2FzX2l0ZW1fbnVtYmVyLCBpdGVtX251bWJlcl9hc19ydWxlX251bWJlcik6IHRoZXNlLgotCUFkanVzdCBkZXBlbmRlbmNpZXMuCi0JKiBzcmMvb3V0cHV0LmMgKHZlY3Rvcl9udW1iZXJfdCwgVkVDVE9SX05VTUJFUl9NQVgpCi0JKFZFQ1RPUl9OVU1CRVJfTUlOLCBzdGF0ZV9udW1iZXJfdG9fdmVjdG9yX251bWJlcikKLQkoc3ltYm9sX251bWJlcl90b192ZWN0b3JfbnVtYmVyKTogTmV3LgotCShvcmRlcik6IE9mIHZlY3Rvcl9udW1iZXJfdCogdHlwZS4KLQkoYmFzZV90LCBCQVNFX01BWCwgQkFTRV9NSU4pOiBOZXcuCi0JKGZyb21zLCB0b3MsIHdpZHRoLCBwb3MsIGNoZWNrKTogT2YgYmFzZV90IHR5cGUuCi0JKGFjdGlvbl9udW1iZXJfdCwgQUNUSU9OX01JTiwgQUNUSU9OX01BWCk6IE5ldy4KLQkoYWN0cm93KTogT2YgYWN0aW9uX251bWJlcl90IHR5cGUuCi0JKGNvbmZscm93KTogT2YgdW5zaWduZWQgaW50IHR5cGUuCi0JKHRhYmxlX25pbmYsIGJhc2VfbmluZik6IE5ldy4KLQkoR0VORVJBVEVfTVVTQ0xFX0lOU0VSVF9UQUJMRSk6IEFsc28gb3V0cHV0IHRoZSBgKl9taW4nIHZhbHVlLgotCShtdXNjbGVfaW5zZXJ0X2ludF90YWJsZSwgbXVzY2xlX2luc2VydF9iYXNlX3RhYmxlKQotCShtdXNjbGVfaW5zZXJ0X3J1bGVfbnVtYmVyX3RhYmxlKTogTmV3LgotCShwcmVwYXJlX3Rva2Vucyk6IE91dHB1dCBgdG9rbnVtJyBhcyBpbnRfdGFibGUuCi0JKGFjdGlvbl9yb3cpOiBSZXR1cm5zIGEgcnVsZV9udW1iZXJfdC4KLQlVc2UgQUNUSU9OX01JTiwgbm90IFNIUlRfTUlOLgotCSh0b2tlbl9hY3Rpb25zKTogeXlkZWZhY3QgaXMgcnVsZV9udW1iZXJfdCouCi0JKHRhYmxlX25pbmZfcmVtYXApOiBOZXcuCi0JKHBhY2tfdGFibGUpOiBVc2UgaXQgZm9yIGBiYXNlJyBhbmQgYHRhYmxlJy4KLQkqIGRhdGEveWFjYy5jLCBkYXRhL2dsci5jLCBkYXRhL2xhbHIxLmNjIChZWUZMQUcpOiBSZW1vdmUsCi0JcmVwbGFjZWQgd2l0aC4uLgotCShZWVBBQ1RfTklORiwgWVlUQUJMRV9OSU5GKTogdGhlc2UuCi0JKHl5cGFjdCwgeXl0YWJsZSk6IENvbXB1dGUgdGhlaXIgdHlwZXMgaW5zdGVhZCBvZiBoYXJkLWNvZGVkCi0JYHNob3J0Jy4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFdlYjJjIEFjdGlvbnMpOiBBZGp1c3QuCi0KLTIwMDItMDctMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvc2Nhbi1ncmFtLmwgKGlkKTogQ2FuIHN0YXJ0IHdpdGggYW4gdW5kZXJzY29yZS4KLQotMjAwMi0wNy0xNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9hc3NvYy5jLCBzcmMvYXNzc29jLmggKGFzc29jX3QsIGFzc29jX3RvX3N0cmluZyk6IE5ldy4KLQlBZGp1c3QgYWxsIGZvcm1lciBgYXNzb2NpYXRpdml0eScgZGVwZW5kZW5jaWVzLgotCSogc3JjL3N5bXRhYi5jIChzeW1ib2xfbmV3KTogRGVmYXVsdCBhc3NvY2lhdGl2aXR5IGlzIGB1bmRlZicsIG5vdAotCWByaWdodCcuCi0JKHN5bWJvbF9jaGVja19hbGlhc19jb25zaXN0ZW5jZSk6IEFkanVzdC4KLQotMjAwMi0wNy0wOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvOiBQcm9wZXJseSBzZXQgdGhlIGBgaGVhZGVyJycgcGFydC4KLQlVc2UgQGRpcmNhdGVnb3J5IGBgR05VIHByb2dyYW1taW5nIHRvb2xzJycgYXMgcGVyIFRleGluZm8ncwotCWRvY3VtZW50YXRpb24uCi0JVXNlIEBjb3B5aW5nLgotCi0yMDAyLTA3LTA5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogbGliL3F1b3RlYXJnLmg6IFByb3RlY3QgYWdhaW5zdCBtdWx0aXBsZSBpbmNsdXNpb25zLgotCSogc3JjL2xvY2F0aW9uLmggKGxvY2F0aW9uX3QpOiBBZGQgYSBgZmlsZScgbWVtYmVyLgotCShMT0NBVElPTl9SRVNFVCwgTE9DQVRJT05fUFJJTlQpOiBBZGp1c3QuCi0JKiBzcmMvY29tcGxhaW4uYyAod2Fybl9hdCwgY29tcGxhaW5fYXQsIGZhdGFsX2F0KTogRHJvcAotCWBlcnJvcl9vbmVfcGVyX2xpbmUnIHN1cHBvcnQuCi0KLTIwMDItMDctMDkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvY29tcGxhaW4uaCwgc3JjL2NvbXBsYWluLmMgKHdhcm4sIGNvbXBsYWluKTogUmVtb3ZlLCB1bnVzZWQuCi0JKiBzcmMvcmVhZGVyLmMgKGxpbmVubyk6IFJlbW92ZS4KLQlBZGp1c3QgYWxsIGRlcGVuZGVuY2llcy4KLQkoZ2V0X21lcmdlX2Z1bmN0aW9uKTogVGFrZSBhIGxvY2F0aW9uIGFuZCB1c2UgY29tcGxhaW5fYXQuCi0JKiBzcmMvc3ltdGFiLmgsIHNyYy9zeW10YWIuYyAoc3ltYm9sX21ha2VfYWxpYXMpOiBMaWtld2lzZS4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKEludmFsaWQgaW5wdXRzLCBNaXhpbmcgJXRva2VuIHN0eWxlcyk6Ci0JQWRqdXN0LgotCi0yMDAyLTA3LTA5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3BhcnNlLWdyYW0ueSAocnVsZXNfb3JfZ3JhbW1hcl9kZWNsYXJhdGlvbik6IEFkZCBhbiBlcnJvcgotCXJlY292ZXJ5IHJ1bGUsIGFuZCBmb3JiaWQgZXh0ZW5zaW9ucyB3aGVuIC0teWFjYy4KLQkoZ3JhbV9lcnJvcik6IFVzZSBjb21wbGFpbl9hdC4KLQkqIHNyYy9yZWFkZXIuYyAocmVhZGVyKTogRXhpdCBpZiB0aGVyZSB3ZXJlIHBhcnNlIGVycm9ycy4KLQotMjAwMi0wNy0wOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHRlc3RzL3N5bmNsaW5lcy5hdCAoQVRfU1lOQ0xJTkVTX0NPTVBJTEUpOiBOZXcuCi0JKEFUX1RFU1RfU1lOQ0xJTkUpOiBBZGp1c3QgdG8gdW51c3VhbCBHQ0Mgb3V0cHV0cy4KLQlSZXBvcnRlZCBieSBSIEJsYWtlIDxibGFrZXJzQG1hYy5jb20+LgotCi0yMDAyLTA3LTA5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS95YWNjLmM6IE91dHB1dCB0aGUgY29weXJpZ2h0IG5vdGl2ZSBpbiB0aGUgaGVhZGVyLgotCi0yMDAyLTA3LTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL291dHB1dC5jIChmcm9tcywgdG9zKTogQXJlIHN0YXRlX251bWJlcl90LgotCShzYXZlX2NvbHVtbik6IHNwLCBzcDEsIGFuZCBzcDIgYXJlIHN0YXRlX251bWJlcl90LgotCShwcmVwYXJlKTogUmVuYW1lIGBmaW5hbCcgYXMgYGZpbmFsX3N0YXRlX251bWJlcicsIGBubnRzJyBhcwotCWBudGVybXNfbnVtYmVyJywgYG5ydWxlcycgYXMgYHJ1bGVzX251bWJlcicsIGBuc3RhdGVzJyBhcwotCWBzdGF0ZXNfbnVtYmVyJywgYW5kIGBudG9rZW5zJyBhcyBgdG9rZW5zX251bWJlcicuICBSZW1vdmUgYG5zeW0nLAotCXVudXNlZC4KLQkqIGRhdGEveWFjYy5jLCBkYXRhL2dsci5jLCBkYXRhL2xhbHIxLmNjOiBBZGp1c3QuCi0JKiBkYXRhL2xhbHIxLmNjIChuc3ltXyk6IFJlbW92ZSwgdW51c2VkLgotCi0yMDAyLTA3LTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2xhbHIuaCwgc3JjL2xhbHIuYyAoZ290b19udW1iZXJfdCk6IE5ldy4KLQkqIHNyYy9sYWxyLmMgKGdvdG9fbGlzdF90KTogTmV3LgotCVByb3BhZ2F0ZSB0aGVtLgotCSogc3JjL251bGxhYmxlLmMgKHJ1bGVfbGlzdF90KTogTmV3LgotCVByb3BhZ2F0ZS4KLQkqIHNyYy90eXBlcy5oOiBSZW1vdmUuCi0KLTIwMDItMDctMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvY2xvc3VyZS5jIChwcmludF9mZGVyaXZlcyk6IFVzZSBydWxlX3Joc19wcmludC4KLQkqIHNyYy9kZXJpdmVzLmMgKHByaW50X2Rlcml2ZXMpOiBVc2UgcnVsZV9yaHNfcHJpbnQuCi0JKHJ1bGVfbGlzdF90KTogTmV3LCByZXBsYWNlcyBgc2hvcnRzJy4KLQkoc2V0X2Rlcml2ZXMpOiBBZGQgY29tbWVudHMuCi0JKiB0ZXN0cy9zZXRzLmF0IChOdWxsYWJsZSwgRmlyc3RzKTogQWRqdXN0LgotCi0yMDAyLTA3LTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL291dHB1dC5jIChwcmVwYXJlX2FjdGlvbnMpOiBGcmVlIGB0YWxseScgYW5kIGB3aWR0aCcuCi0JKHByZXBhcmVfYWN0aW9ucyk6IEFsbG9jYXRlIGFuZCBmcmVlIGBvcmRlcicuCi0JKiBzcmMvc3ltdGFiLmMgKHN5bWJvbHNfZnJlZSk6IEZyZWUgYHN5bWJvbHMnLgotCSogc3JjL3NjYW4tZ3JhbS5sIChzY2FubmVyX2ZyZWUpOiBDbGVhciBGbGV4J3Mgc2Nhbm5lcnMgbWVtb3J5LgotCSogc3JjL291dHB1dC5jIChtNF9pbnZva2UpOiBNb3ZlIHRvLi4uCi0JKiBzcmMvc2Nhbi1za2VsLmw6IGhlcmUuCi0JKDw8RU9GPj4pOiBDbG9zZSB5eW91dCwgYW5kIGZyZWUgaXRzIG5hbWUuCi0KLTIwMDItMDctMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JRml4IHNvbWUgbWVtb3J5IGxlYWtzLCBhbmQgZml4IGEgYnVnOiBzdGF0ZSAwIHdhcyBleGFtaW5lZCB0d2ljZS4KLQotCSogc3JjL0xSMC5jIChuZXdfc3RhdGUpOiBNZXJnZSBpbnRvLi4uCi0JKHN0YXRlX2xpc3RfYXBwZW5kKTogdGhpcy4KLQkobmV3X3N0YXRlcyk6IE1lcmdlIGludG8uLi4KLQkoZ2VuZXJhdGVfc3RhdGVzKTogaGVyZS4KLQkoc2V0X3N0YXRlcyk6IERvbid0IGVuc3VyZSBhIHByb3BlciBgZXJycycgc3RhdGUgbWVtYmVyIGhlcmUsIGRvIGl0Li4uCi0JKiBzcmMvY29uZmxpY3RzLmMgKGNvbmZsaWN0c19zb2x2ZSk6IGhlcmUuCi0JKiBzcmMvc3RhdGUuaCwgc3JjL3N0YXRlLmM6IENvbW1lbnQgY2hhbmdlcy4KLQkoc3RhdGVfdCk6IFJlbmFtZSBtZW1iZXIgYHNoaWZ0cycgYXMgYHRyYW5zaXRpb25zJy4KLQlBZGp1c3QgYWxsIGRlcGVuZGVuY2llcy4KLQkoZXJyc19uZXcpOiBGb3IgY29uc2lzdGVuY3ksIGFsc28gdGFrZSB0aGUgdmFsdWVzIGFzIGFyZ3VtZW50LgotCShlcnJzX2R1cCk6IFJlbW92ZS4KLQkoc3RhdGVfZXJyc19zZXQpOiBOZXcuCi0JKHN0YXRlX3JlZHVjdGlvbnNfc2V0LCBzdGF0ZV90cmFuc2l0aW9uc19zZXQpOiBBc3NlcnQgdGhhdCBubwotCXByZXZpb3VzIHZhbHVlIHdhcyBhc3NpZ25lZC4KLQkoc3RhdGVfZnJlZSk6IE5ldy4KLQkoc3RhdGVzX2ZyZWUpOiBVc2UgaXQuCi0JKiBzcmMvY29uZmxpY3RzLmMgKHJlc29sdmVfc3JfY29uZmxpY3QpOiBEb24ndCB1c2UgYW4gYGVycnNfdCcgYXMKLQl0ZW1wb3Jhcnkgc3RvcmFnZTogdXNlIGBlcnJzJyBhbmQgYG5lcnJzJyBhcyBlbHNld2hlcmUuCi0JKHNldF9jb25mbGljdHMpOiBBbGxvY2F0ZSBhbmQgZnJlZSB0aGlzIGBlcnJzJy4KLQotMjAwMi0wNy0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGxpYi9saWJpYmVydHkuaDogTmV3LgotCSogbGliOiBVcGRhdGUgdGhlIGJpdHNldCBpbXBsZW1lbnRhdGlvbiBmcm9tIHVwc3RyZWFtLgotCSogc3JjL2Nsb3N1cmUuYywgc3JjL2xhbHIuYywgc3JjL291dHB1dC5jLCBzcmMvcHJpbnRfZ3JhcGguYywKLQkqIHNyYy9zdGF0ZS5jOiBVc2UgQklUU0VUX0ZPUl9FQUNILCBub3QgQklUU0VUX0VYRUNVVEUuCi0JKiBzcmMvbWFpbi5jOiBBZGp1c3QgYml0c2V0IHN0YXRzIGNhbGxzLgotCi0yMDAyLTA3LTAxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogc3JjL3NjYW4tZ3JhbS5sICg8U0NfRVNDQVBFRF9DSEFSQUNURVI+KTogQ29udmVydCB0byB1bnNpZ25lZAotCWNoYXIsIHNvIHRoYXQgbmVnYXRpdmUgY2hhcnMgZG9uJ3QgY29sbGlkZSB3aXRoICQuCi0KLTIwMDItMDYtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JSGF2ZSB0aGUgR0xSIHRlc3RzIGJlIGB3YXJuaW5nJyBjaGVja2VkLCBhbmQgZml4IHRoZSB3YXJuaW5ncy4KLQotCSogZGF0YS9nbHIuYyAoWVlGUFJJTlRGKTogQWx3YXlzIGRlZmluZSBpdCwgbm90IG9ubHkgd2hlbiBZWURFQlVHCi0JKHl5dXNlckFjdGlvbiwgeXlyZXBvcnRBbWJpZ3VpdHkpOiBgVXNlJyBhbGwgdGhlIGFyZ3VtZW50cy4KLQkoeXlyZW1vdmVEZWxldGVzKTogYHl5aScgYW5kIGB5eWonIGFyZSBzaXplX3QuCi0JVXNlIFlZRlBSSU5URiB3aGVuIHVuZGVyIGlmIChZWURFQlVHKSB0byBhdm9pZCBlbXB0eSBgaWYnIGJvZGllcy4KLQkoeXlhZGREZWZlcnJlZEFjdGlvbik6IHN0YXRpYy4KLQkoeXlnbHJSZWR1Y2UpOiB5eWksIHl5aywgYW1kIHl5cG9zbiBhcmUgc2l6ZV90LgotCSh5eXJlcG9ydFBhcnNlRXJyb3IpOiB5eXByZWZpeCBpcyBjb25zdC4KLQl5eXRva2VucCBpcyB1c2VkIG9ubHkgd2hlbiB2ZXJib3NlLgotCSh5eV9fR05VQ19fKTogUmVwbGFjZSB3aXRoIF9fR05VQ19fLgotCSh5eXBkdW1wc3RhY2spOiB5eWkgaXMgc2l6ZV90LgotCSh5eXByZWZlcmVuY2UpOiBVbi15eSBsb2NhbCB2YXJpYWJsZXMgYW5kIGFyZ3VtZW50cywgdG8gYXZvaWQKLQljbGFzaGVzIHdpdGggYHl5cjEnLiAgQW55d2F5LCB3ZSBhcmUgbm90IGluIHRoZSB1c2VyIG5hbWUgc3BhY2UuCi0JKHl5dG5hbWVfc2l6ZSk6IGJlIGFuIGludCwgYXMgaXMgY29tcGFyZWQgd2l0aCBpbnRzLgotCSogdGVzdHMvdGVzdHN1aXRlLmF0IChBVF9DT01QSUxFLCBBVF9QQVJTRVJfQ0hFQ0spOiBOZXcuCisJKiBkYXRhL2Jpc29uLm00IChiNF9vdXRwdXRfYmVnaW4sIGI0X291dHB1dF9lbmQpOiBOZXcuCisJKiBkYXRhL2dsci5jLCBkYXRhL2dsci5jYywgZGF0YS9sYWxyMS5jYywgZGF0YS9sYWxyMS5qYXZhLAorCSogZGF0YS9sb2NhdGlvbi5jYywgZGF0YS9zdGFjay5oaCwgZGF0YS95YWNjLmM6CiAJVXNlIHRoZW0uCi0JKiB0ZXN0cy9jeHgtZ3JhbS5hdDogVXNlIHF1b3RhdGlvbiB0byBwcm90ZWN0ICQxLgotCVVzZSBBVF9DT01QSUxFIHRvIGVuYWJsZSB3YXJuaW5ncyBodW50cy4KLQlQcm90b3R5cGUgeXlsZXggYW5kIHl5ZXJyb3IuCi0JYFVzZScgYXJnYy4KLQlJbmNsdWRlIGBzdHJpbmcuaCcsIG5vdCBgc3RyaW5ncy5oJy4KLQlQcm9kdWNlIGFuZCBwcm90b3R5cGUgc3RtdE1lcmdlIG9ubHkgd2hlbiB1c2VkLgotCXl5bGV4IHRha2VzIGEgbG9jYXRpb24uCiAKLTIwMDItMDYtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0xMi0wMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCVdlIHNwZW5kIGEgbG90IG9mIHRpbWUgaW4gcXVvdGVhcmcsIGluIHBhcnRpY3VsYXIgd2hlbiAtLXZlcmJvc2UuCisJdGVzdHM6IGJld2FyZSBvZiBnbnVsaWIncyBuZWVkIGZvciBjb25maWcuaAorCSogdGVzdHMvc2tlbGV0b25zLmF0LCB0ZXN0cy90b3J0dXJlLmF0OiBCZSBzdXJlIHRvIGluY2x1ZGUgY29uZmlnLmgKKwl3aGVyZSBhcHByb3ByaWF0ZS4KIAotCSogc3JjL3N5bXRhYi5jIChzeW1ib2xfZ2V0KTogU3RvcmUgYSBxdW90ZWQgdmVyc2lvbiBvZiB0aGUga2V5LgotCShzeW1ib2xfdGFnX2dldCwgc3ltYm9sX3RhZ19nZXRfbiwgc3ltYm9sX3RhZ19wcmludCk6IFJlbW92ZS4KLQlBZGp1c3QgYWxsIGNhbGxlcnMuCisyMDEyLTExLTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0yMDAyLTA2LTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwlnbnVsaWI6IHVwZGF0ZQorCSogbGliL3l5ZXJyb3IuYzogSW5jbHVkZSBjb25maWcuaCBzaW5jZSB0aGUgZm9sbG93aW5nIHN0ZGlvLmggbWlnaHQgYmUKKwlmcm9tIGdudWxpYi4KIAotCSogc3JjL3N0YXRlLmggKHJlZHVjdGlvbnNfdCk6IFJlbmFtZSBtZW1iZXIgYG5yZWRzJyBhcyBudW0uCi0JKGVycnNfdCk6IFJlbmFtZSBtZW1iZXJzIGBuZXJycycgYW5kIGBlcnJzJyBhcyBgbnVtJyBhbmQgYHN5bWJvbHMnLgotCSogc3JjL3N0YXRlLmMgKEVSUlNfQUxMT0MsIFJFRFVDVElPTlNfQUxMT0MpOiBVc2UgdGhlIGNvcnJlY3QgdHlwZXMuCisyMDEyLTExLTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0yMDAyLTA2LTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwl5YWNjLmMsIGdsci5jOiBjaGVjayBhbmQgZml4IHRoZSBkaXNwbGF5IG9mIGxvY2F0aW9ucworCUluIHNvbWUgY2FzZSwgbmVnYXRpdmUgY29sdW1uIG51bWJlciBjb3VsZCBiZSBkaXNwbGF5ZWQuCisJTWFrZSBZWV9MT0NBVElPTl9QUklOVCBzaW1pbGFyIHRvIGJpc29uJ3Mgb3duIGltcGxlbWVudGF0aW9uIG9mCisJbG9jYXRpb25zLiAgU2luY2UgdGhlIG1hY3JvIGlzIGdldHRpbmcgZmF0LCBtYWtlIGl0IGEgc3RhdGljCisJZnVuY3Rpb24uCisJUmVwb3J0ZWQgYnkgSm9uYXRoYW4gRmFicml6aW8uCiAKLQkqIHNyYy9zdGF0ZS5oLCBzcmMvc3RhdGUuYyAoc2hpZnRfdCwgU0hJRlRfU1lNQk9MLCBTSElGVF9JU19TSElGVCkKLQkoU0hJRlRfSVNfR09UTywgU0hJRlRfSVNfRVJST1IsIFNISUZUX0RJU0FCTEUsIFNISUZUX0lTX0RJU0FCTEVEKQotCShzaGlmdHNfdG8pOiBSZW5hbWUgYXMuLi4KLQkodHJhbnNpdGlvbl90LCBUUkFOU0lUSU9OX1NZTUJPTCwgVFJBTlNJVElPTl9JU19UUkFOU0lUSU9OKQotCShUUkFOU0lUSU9OX0lTX0dPVE8sIFRSQU5TSVRJT05fSVNfRVJST1IsIFRSQU5TSVRJT05fRElTQUJMRSkKLQkoVFJBTlNJVElPTl9JU19ESVNBQkxFRCwgdHJhbnNpdGlvbnNfdG8pOiB0aGVzZS4KKwkqIGRhdGEvYy5tNCAoeXlfbG9jYXRpb25fcHJpbnRfZGVmaW5lKTogSW1wcm92ZSB0aGUgaW1wbGVtZW50YXRpb24sCisJYW5kIGdlbmVyYXRlIHRoZSB5eV9sb2NhdGlvbl9wcmludF8gZnVuY3Rpb24uCisJQWRqdXN0IFlZX0xPQ0FUSU9OX1BSSU5ULgorCSogdGVzdHMvYWN0aW9ucy5hdCAoTG9jYXRpb24gUHJpbnQpOiBOZXcgdGVzdHMuCiAKLTIwMDItMDYtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0xMS0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL3ByaW50LmMgKHByaW50X3NoaWZ0cywgcHJpbnRfZ290b3MpOiBNZXJnZSBpbnRvLi4uCi0JKHByaW50X3RyYW5zaXRpb25zKTogdGhpcy4KLQkocHJpbnRfdHJhbnNpdGlvbnMsIHByaW50X2VycnMsIHByaW50X3JlZHVjdGlvbnMpOiBBbGlnbiB0aGUKLQlsb29rYWhlYWRzIGNvbHVtbnMuCi0JKHByaW50X2NvcmUsIHByaW50X3RyYW5zaXRpb25zLCBwcmludF9lcnJzLCBwcmludF9zdGF0ZSwKLQlwcmludF9ncmFtbWFyKTogT3V0cHV0IGVtcHR5IGxpbmVzIHNlcGFyYXRvciBiZWZvcmUsIG5vdCBhZnRlci4KLQkoc3RhdGVfZGVmYXVsdF9ydWxlX2NvbXB1dGUpOiBSZW5hbWUgYXMuLi4KLQkoc3RhdGVfZGVmYXVsdF9ydWxlKTogdGhpcy4KLQkqIHRlc3RzL2NvbmZsaWN0cy5hdCAoRGVmYXVsdGVkIENvbmZsaWN0ZWQgUmVkdWN0aW9uKSwKLQkoVW5yZXNvbHZlZCBTUiBDb25mbGljdHMsIFJlc29sdmVkIFNSIENvbmZsaWN0cyk6IEFkanVzdC4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFJ1bGUgTGluZSBOdW1iZXJzLCBXZWIyYyBSZXBvcnQpOiBBZGp1c3QuCisJZm9ybWF0dGluZyBjaGFuZ2VzCisJKiBkYXRhL2MubTQ6IEZpeCBjb21tZW50cywgcHV0IG1hY3JvcyBpbiBhIG1vcmUgbmF0dXJhbCBvcmRlci4KKwlTcGFjZSBjaGFuZ2VzIChmcm9tIE0teCB3aGl0ZXNwYWNlLWNsZWFudXApLgorCSogc3JjL2xvY2F0aW9uLmM6IEZpeCBzcGFjZXMuCisJKiB0ZXN0cy9hY3Rpb25zLmF0OiBTcGFjZSBjaGFuZ2VzLgogCi0yMDAyLTA2LTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMTEtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQlEaXNwbGF5IGl0ZW1zIGFzIHdlIGRpc3BsYXkgcnVsZXMuCisJZ2xyLmM6IHJlbW92ZSBzdHJheSBtYWNybworCSogZGF0YS9nbHIuYyAoWVlPUFRJT05BTF9MT0MpOiBSZW1vdmUsIHVudXNlZCBzaW5jZSBjb21taXQKKwk3NjlhOGVmOWJjYjVlMTRkMGJlOWQwODY5ZjVkY2EyMGFiMDkzOTMwLgogCi0JKiBzcmMvZ3JhbS5oLCBzcmMvZ3JhbS5jIChydWxlX2xoc19wcmludCk6IE5ldy4KLQkqIHNyYy9ncmFtLmMgKGdyYW1tYXJfcnVsZXNfcGFydGlhbF9wcmludCk6IFVzZSBpdC4KLQkqIHNyYy9wcmludC5jIChwcmludF9jb3JlKTogTGlrZXdpc2UuCi0JKiB0ZXN0cy9jb25mbGljdHMuYXQgKERlZmF1bHRlZCBDb25mbGljdGVkIFJlZHVjdGlvbiksCi0JKFVucmVzb2x2ZWQgU1IgQ29uZmxpY3RzKTogQWRqdXN0LgotCShVbnJlc29sdmVkIFNSIENvbmZsaWN0cyk6IEFkanVzdCBhbmQgcmVuYW1lIGFzLi4uCi0JKFJlc29sdmVkIFNSIENvbmZsaWN0cyk6IHRoaXMsIGFzIHdhcyBtZWFudC4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFdlYjJjIFJlcG9ydCk6IEFkanVzdC4KKzIwMTItMTEtMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDItMDYtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCWRvYzogbWlub3IgZml4ZXMKKwkqIGRvYy9iaXNvbi50ZXhpOiBVc2Ugc3RkZXJyIGZvciBlcnJvciBtZXNzYWdlcy4KKwlNZXRhLXZhcmlhYmxlcyBhcmUgdXN1YWxseSBzcGVsbGVkIGluIGxvd2VyIGNhc2UuCisJVXNlIEBjb2RlIGZvciBmdW5jdGlvbiBuYW1lcy4KIAotCSogc3JjL3ByaW50LmMgKHN0YXRlX2RlZmF1bHRfcnVsZV9jb21wdXRlKTogTmV3LCBleHRyYWN0ZWQgZnJvbS4uLgotCShwcmludF9yZWR1Y3Rpb25zKTogaGVyZS4KLQlQZXNzaW1pemUsIGJ1dCBjbGFyaWZ5IHRoZSBjb2RlLgotCSogdGVzdHMvY29uZmxpY3RzLmF0IChEZWZhdWx0ZWQgQ29uZmxpY3RlZCBSZWR1Y3Rpb24pOiBOZXcuCisyMDEyLTExLTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0yMDAyLTA2LTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwlkb2M6IGltcHJvdmUgdGhlIGluZGV4CisJKiBkb2MvYmlzb24udGV4aTogRml4IHVzZXMgb2YgImRlZmZuIiBzbyB0aGF0IHRoZSBhcmd1bWVudHMgb2YgdGhlCisJZGlyZWN0aXZlcyBkbyBub3Qgc2hvdyBpbiB0aGUgaW5kZXguCisJUmVtb3ZlIGEgZHVwbGljYXRlIGVudHJ5IGZvciBhcGkucHVyZS4KIAotCSogc3JjL291dHB1dC5jIChhY3Rpb25fcm93KTogTGV0IGRlZmF1bHRfcnVsZSBiZSBhbHdheXMgYSBydWxlCi0JbnVtYmVyLgorMjAxMi0xMS0yOSAgVGhlb3BoaWxlIFJhbnF1ZXQgIDxyYW5xdWV0QGxyZGUuZXBpdGEuZnI+CiAKLTIwMDItMDYtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCWRvYzogaW50cm9kdWNlIGFwaS5wdXJlIGZ1bGwsIHJlYXJyYW5nZSBzb21lIGV4YW1wbGVzCisJKiBORVdTOiBBZGQgZW50cnkuCisJKiBkb2MvYmlzb24udGV4aSAoJWRlZmluZSBTdW1tYXJ5KTogU2hvdyB0aGUgb2xkIFlhY2MgYmVoYXZpb3VyLgorCShQYXJzZXIgRnVuY3Rpb24pOiBNb3ZlIHBhcnNlLXBhcmFtIGV4YW1wbGVzIGhlcmUuCisJKFB1cmUgQ2FsbGluZyk6IFJlbW92ZSBwYXJzZS1wYXJhbSBleGFtcGxlcy4KKwkoRXJyb3IgUmVwb3J0aW5nKTogRG9uJ3Qgc2hvdyB0aGUgb2xkIGJlaGF2aW9yLCBzdGljayB0byAnZnVsbCcuCiAKLQkqIHNyYy9jbG9zdXJlLmMgKHByaW50X2ZpcnN0cywgcHJpbnRfZmRlcml2ZXMsIGNsb3N1cmUpOgotCVVzZSBCSVRTRVRfRVhFQ1VURS4KLQkqIHNyYy9sYWxyLmMgKGxvb2thaGVhZHNfcHJpbnQpOiBMaWtld2lzZS4KLQkqIHNyYy9zdGF0ZS5jIChzdGF0ZV9ydWxlX2xvb2thaGVhZHNfcHJpbnQpOiBMaWtld2lzZS4KLQkqIHNyYy9wcmludF9ncmFwaC5jIChwcmludF9jb3JlKTogTGlrZXdpc2UuCi0JKiBzcmMvcHJpbnQuYyAocHJpbnRfcmVkdWN0aW9ucyk6IExpa2V3aXNlLgotCSogc3JjL291dHB1dC5jIChhY3Rpb25fcm93KTogTGlrZXdpc2UuCi0JVXNlIFNISUZUX0lTX0RJU0FCTEVELCBTSElGVF9JU19TSElGVCBhbmQgU0hJRlRfU1lNQk9MLgorMjAxMi0xMS0yOSAgVGhlb3BoaWxlIFJhbnF1ZXQgIDxyYW5xdWV0QGxyZGUuZXBpdGEuZnI+CiAKLTIwMDItMDYtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCXlhY2MuYzogc3VwcG9ydCAiJWRlZmluZSBhcGkucHVyZSBmdWxsIgorCVRoaXMgbWFrZXMgdGhlIGludGVyZmFjZSBmb3IgeXllcnJvcigpIHB1cmUgd2l0aG91dCB0aGUgbmVlZCBmb3IgYSBzcHVyaW91cworCXBhcnNlX3BhcmFtLgogCi0JKiBzcmMvcHJpbnRfZ3JhcGguYzogVXNlIHJlcG9ydF9mbGFnLgorCSogZGF0YS95YWNjLmMgKGI0X3B1cmVfaWYsIGI0X3B1cmVfZmxhZyk6IE5ldyBkZWZpbml0aW9uLCBhY2NlcHQgdGhyZWUgc3RhdGVzLgorCShiNF95YWNjX3B1cmVfaWYpOiBSZW5hbWUgYXMuLi4KKwkoYjRfeXllcnJvcl9hcmdfbG9jX2lmKTogVGhpcywgYW5kIHVzZSBiNF9wdXJlX2ZsYWcuCisJKiB0ZXN0cy9hY3Rpb25zLmF0ICglZGVmaW5lIGFwaS5wdXJlKTogTW9kZXJuaXplLgorCSogdGVzdC9jYWxjLmF0IChTaW1wbGUgTEFMUiBDYWxjdWxhdG9yKTogTW9kZXJuaXplLgorCSogdGVzdHMvbG9jYWwuYXQgKEFUX1lZRVJST1JfQVJHX0xPQ19JRik6IEFkanVzdC4KIAotMjAwMi0wNi0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTExLTI2ICBUaGVvcGhpbGUgUmFucXVldCAgPHJhbnF1ZXRAbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL2xhbHIuYyAodHJhdmVyc2UsIGRpZ3JhcGgsIG1hdHJpeF9wcmludCwgdHJhbnNwb3NlKTogTW92ZQotCXRvLi4uCi0JKiBzcmMvcmVsYXRpb24uaCwgc3JjL3JlbGF0aW9uLmMgKHRyYXZlcnNlLCByZWxhdGlvbl9kaWdyYXBoKQotCShyZWxhdGlvbl9wcmludCwgcmVsYXRpb25fdHJhbnNwb3NlKTogTmV3LgorCWxvY2FsLmF0OiBpbXByb3ZlbWVudHMKKwkqIHRlc3RzL2xvY2FsLmF0IChBVF9ZWUVSUk9SX0ZPUk1BTFMpOiBNYWtlIGxsb2NwIGNvbnN0LgorCShBVF9QVVJFX0FORF9MT0NfSUYsIEFUX0dMUl9PUl9QQVJBTV9JRik6IFJlbW92ZSwgZXhwYW5kLi4uCisJKEFUX1lZRVJST1JfQVJHX0xPQ19JRik6IEhlcmUsIGFuZCB1c2UgbTRfam9pbiBmb3IgcmVhZGFiaWxpdHkuCiAKLTIwMDItMDYtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0xMS0yNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL3N0YXRlLmgsIHNyYy9zdGF0ZS5jIChzaGlmdHNfdG8pOiBOZXcuCi0JKiBzcmMvbGFsci5jIChidWlsZF9yZWxhdGlvbnMpOiBVc2UgaXQuCisJTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL2JyYW5jaC0yLjYnIGludG8gbWFpbnQKKwkqIG9yaWdpbi9icmFuY2gtMi42OgorCSAgeWFjYy5jOiBhbHdheXMgaW5pdGlhbGl6ZSB5eWxsb2MKKwkgIGRvYzogb25lIG9mIHRoZSBmaXhlcyBmb3IgYW4gYW1iaWd1b3VzIGdyYW1tYXIgd2FzIGFtYmlndW91cyB0b28KKwkgIGRvYzogZml4IHRoZSBkYW5nbGluZyBlbHNlIHdpdGggcHJlY2VkZW5jZSBkaXJlY3RpdmVzCisJICBkb2M6IHByZWZlciAidG9rZW4iIHRvIFRPS0VOCisJICBkb2M6IGZvcm1hdHRpbmcgY2hhbmdlcwogCi0yMDAyLTA2LTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMTEtMjMgIFRoZW9waGlsZSBSYW5xdWV0ICA8cmFucXVldEBscmRlLmVwaXRhLmZyPgogCi0JKiBzcmMvZ3JhbS5oIChydWxlX251bWJlcl90LCBSVUxFX05VTUJFUl9NQVgsIGludF9vZl9ydWxlX251bWJlcikKLQkoaXRlbV9udW1iZXJfb2ZfcnVsZV9udW1iZXIsIHJ1bGVfbnVtYmVyX29mX2l0ZW1fbnVtYmVyKTogTmV3LgotCSogc3JjL0xSMC5jLCBzcmMvY2xvc3VyZS5jLCBzcmMvZGVyaXZlcy5jLCBzcmMvZGVyaXZlcy5oLAotCSogc3JjL2dyYW0uYywgc3JjL2xhbHIuYywgc3JjL251bGxhYmxlLmMsIHNyYy9vdXRwdXQuYywgc3JjL3ByaW50LmMsCi0JKiBzcmMvcHJpbnRfZ3JhcGguYywgc3JjL3JlYWRlci5jLCBzcmMvcmVkdWNlLmMsIHNyYy9yZWR1Y2UuaDoKLQlQcm9wYWdhdGUgdGhlaXIgdXNlLgotCU11Y2ggcmVtYWlucyB0byBiZSBkb25lLCBpbiBwYXJ0aWN1bGFyIHdydCBgc2hvcnRzJyBmcm9tIHR5cGVzLmguCisJeWFjYy5jOiBhbHdheXMgaW5pdGlhbGl6ZSB5eWxsb2MKKwlUaGUgaW5pdGlhbCBsb2NhdGlvbiBtaWdodCBiZSB1c2VkIGlmIHRoZSBwYXJzZXIgc3RhcnRzIGJ5IGFuIGVtcHR5CisJcmVkdWN0aW9uLCBzbyByZWFsbHkgZW5zdXJlIHByb3BlciBpbml0aWFsaXphdGlvbiBvZiB0aGUgaW5pdGlhbAorCWxvY2F0aW9uLiAgVGhlIHByZXZpb3VzIGFwcHJvYWNoIGZhaWxzIGZvciBQb3N0Z3JlU1FMLCB3aGljaCB1c2VzCisJUmVwb3J0ZWQgYnkgUGV0ZXIgRWlzZW50cmF1dC4KKwlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMTItMTEvbXNnMDAwMjMuaHRtbAorCVdpdGggaGVscCBmcm9tIFRow6lvcGhpbGUgUmFucXVldC4KIAotMjAwMi0wNi0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJKiBkYXRhL3lhY2MuYyAoYjRfZGVjbGFyZV9zY2FubmVyX2NvbW11bmljYXRpb25fdmFyaWFibGVzKTogQmUgc3VyZQorCXRvIGluaXRpYWxpemUgeXlsbG9jLCBldmVuIHdoZW4gaXRzIHN0cnVjdHVyZSBpcyB1bmtub3duLgorCSh5eXBhcnNlKTogU2ltcGxpZnkgdGhlIGNhbGwgdG8gYjRfZG9sbGFyX3B1c2hkZWYuCisJKiB0ZXN0cy9hY3Rpb25zLmF0IChJbml0aWFsIGxvY2F0aW9uKTogQ2hlY2sgb2Ygc2ltaWxhciBwYXR0ZXJuCisJYXMgaW4gdGhlIGNhc2Ugb2YgUG9zdGdyZVNRTC4KIAotCSogc3JjL3N5bXRhYi5jIChzeW1ib2xfbmV3KTogSW5pdGlhbGl6ZSB0aGUgYHByaW50ZXInIG1lbWJlci4KKzIwMTItMTEtMjMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDItMDYtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCXNjYW5uZXI6IGlzc3VlIGEgc2luZ2xlIGVycm9yIGZvciBncm91cHMgb2YgaW52YWxpZCBjaGFyYWN0ZXJzCisJKiBzcmMvc2Nhbi1ncmFtLmw6IFNjYW4gZ3JvdXBzIG9mIGludmFsaWQgY2hhcmFjdGVycyB0b2dldGhlci4KKwkqIHRlc3RzL2lucHV0LmF0LCB0ZXN0cy9uYW1lZC1yZWZzLmF0OiBBZGp1c3QuCiAKLQkqIHNyYy9MUjAuYyAoc2F2ZV9yZWR1Y3Rpb25zKTogUmVtb3ZlLCByZXBsYWNlZCBieS4uLgotCSogc3JjL3N0YXRlLmgsIHNyYy9zdGF0ZS5jIChzdGF0ZV9yZWR1Y3Rpb25zX3NldCk6IE5ldy4KLQkocmVkdWN0aW9ucywgZXJycyk6IFJlbmFtZSBhcy4uLgotCShyZWR1Y3Rpb25zX3QsIGVycnNfdCk6IHRoZXNlLgotCUFkanVzdCBhbGwgZGVwZW5kZW5jaWVzLgorMjAxMi0xMS0yMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotMjAwMi0wNi0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJdGVzdHM6IGZvcm1hdHRpbmcgY2hhbmdlcworCSogdGVzdHMvbmFtZWQtcmVmcy5hdDogSGVyZS4KIAotCSogc3JjL0xSMC5jIChzdGF0ZV9saXN0X3QsIHN0YXRlX2xpc3RfYXBwZW5kKTogTmV3LgotCShmaXJzdF9zdGF0ZSwgbGFzdF9zdGF0ZSk6IE5vdyBzeW1ib2xfbGlzdF90LgotCSh0aGlzX3N0YXRlKTogUmVtb3ZlLgotCShuZXdfaXRlbXNldHMsIGFwcGVuZF9zdGF0ZXMsIHNhdmVfcmVkdWN0aW9ucyk6IFRha2UgYSBzdGF0ZV90IGFzCi0JYXJndW1lbnQuCi0JKHNldF9zdGF0ZXMsIGdlbmVyYXRlX3N0YXRlcyk6IEFkanVzdC4KLQkoc2F2ZV9zaGlmdHMpOiBSZW1vdmUsIHJlcGxhY2VkIGJ5Li4uCi0JKiBzcmMvc3RhdGUuaCwgc3JjL3N0YXRlLmMgKHN0YXRlX3NoaWZ0c19zZXQpOiBOZXcuCi0JKHNoaWZ0cyk6IFJlbmFtZSBhcy4uLgotCShzaGlmdHNfdCk6IHRoaXMuCi0JQWRqdXN0IGFsbCBkZXBlbmRlbmNpZXMuCi0JKiBzcmMvc3RhdGUuaCAoc3RhdGVfdCk6IFJlbW92ZSB0aGUgYG5leHQnIG1lbWJlci4KKzIwMTItMTEtMjMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDItMDYtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCWRvYzogb25lIG9mIHRoZSBmaXhlcyBmb3IgYW4gYW1iaWd1b3VzIGdyYW1tYXIgd2FzIGFtYmlndW91cyB0b28KKwlSZXBvcnRlZCBieSDQkNGB0LrQsNGAINCh0LDRhNC40L0uCisJaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDEyLTExL21zZzAwMDI0Lmh0bWwKIAotCSogc3JjL3ZjZy5jIChxdW90ZSk6IFVzZSBzbG90IDIsIHNpbmNlIHdlIG9mdGVuIHBhc3Mgc3ltYm9sIHRhZwotCWVzY2FwZWQgaW4gc2xvdCAwLgorCSogZG9jL2Jpc29uLnRleGkgKFJlZHVjZS9SZWR1Y2UpOiBGaXggdGhlIHJlc3VsdGluZyBhbWJpZ3VpdHkgdXNpbmcKKwlwcmVjZWRlbmNlL2Fzc29jaWF0aXZpdHkgZGlyZWN0aXZlcy4KIAotMjAwMi0wNi0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTExLTIyICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JVXNlIGhhc2guaCBmb3IgdGhlIHN0YXRlIGhhc2ggdGFibGUuCisJZG9jOiBmaXggdGhlIGRhbmdsaW5nIGVsc2Ugd2l0aCBwcmVjZWRlbmNlIGRpcmVjdGl2ZXMKKwkqIGRvYy9iaXNvbi50ZXhpIChOb24gT3BlcmF0b3JzKTogTmV3IG5vZGUuCisJKFNoaWZ0L1JlZHVjZSk6IFBvaW50IHRvIGl0LgorCURvbid0IHByb21vdGUgIiVleHBlY3QgbiIgdG9vIG11Y2guCiAKLQkqIHNyYy9MUjAuYyAoU1RBVEVfSEFTSF9TSVpFLCBzdGF0ZV9oYXNoKTogUmVtb3ZlLgotCShhbGxvY2F0ZV9zdG9yYWdlKTogVXNlIHN0YXRlX2hhc2hfbmV3LgotCShmcmVlX3N0b3JhZ2UpOiBVc2Ugc3RhdGVfaGFzaF9mcmVlLgotCShuZXdfc3RhdGUsIGdldF9zdGF0ZSk6IEFkanVzdC4KLQkqIHNyYy9sYWxyLmgsIHNyYy9sYWxyLmMgKHN0YXRlcyk6IE1vdmUgdG8uLi4KLQkqIHNyYy9zdGF0ZXMuaCAoc3RhdGVfdCk6IFJlbW92ZSB0aGUgYGxpbmsnIG1lbWJlciwgbm8gbG9uZ2VyCi0JdXNlZC4KLQkqIHNyYy9zdGF0ZXMuaCwgc3JjL3N0YXRlcy5jOiBoZXJlLgotCShzdGF0ZV9oYXNoX25ldywgc3RhdGVfaGFzaF9mcmVlLCBzdGF0ZV9oYXNoX2xvb2t1cCkKLQkoc3RhdGVfaGFzaF9pbnNlcnQsIHN0YXRlc19mcmVlKTogTmV3LgotCSogc3JjL3N0YXRlcy5jIChzdGF0ZV90YWJsZSwgc3RhdGVfY29tcGFyZSwgc3RhdGVfaGFzaCk6IE5ldy4KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X2FjdGlvbnMpOiBEbyBub3QgZnJlZSBzdGF0ZXMgbm93LCBzaW5jZSB3ZQotCXN0aWxsIG5lZWQgdG8ga25vdyB0aGUgZmluYWxfc3RhdGUgbnVtYmVyIGluIGBwcmVwYXJlJywgY2FsbGVkCi0JYWZ0ZXJ3YXJkcy4gIERvIGl0Li4uCi0JKiBzcmMvbWFpbi5jIChtYWluKTogaGVyZTogY2FsbCBzdGF0ZXNfZnJlZSBhZnRlciBgb3V0cHV0Jy4KKzIwMTItMTEtMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDItMDYtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCWRvYzogcHJlZmVyICJ0b2tlbiIgdG8gVE9LRU4KKwlUaGlzIGlzIG1vcmUgcmVhZGFibGUgaW4gc2hvcnQgZXhhbXBsZXMuCiAKLQkqIHNyYy9zdGF0ZS5oLCBzcmMvc3RhdGUuYyAoc3RhdGVfbmV3KTogTmV3LCBleHRyYWN0ZWQgZnJvbS4uLgotCSogc3JjL0xSMC5jIChuZXdfc3RhdGUpOiBoZXJlLgotCSogc3JjL3N0YXRlLmggKFNUQVRFX0FMTE9DKTogTW92ZSB0by4uLgotCSogc3JjL3N0YXRlLmM6IGhlcmUuCi0JKiBzcmMvTFIwLmgsIHNyYy9MUjAuYyAobnN0YXRlcywgZmluYWxfc3RhdGUpOiBNb3ZlIHRvLi4uCi0JKiBzcmMvc3RhdGUuaCwgc3JjL3N0YXRlLmM6IGhlcmUuCisJKiBkb2MvYmlzb24udGV4aSAoU2hpZnQvUmVkdWNlKTogaGVyZS4KKwlNYWtlICJ3aW4iIGFuZCAibG9zZSIgYWN0aW9uIG1vcmUgYWxpa2UuCiAKLTIwMDItMDYtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0xMS0yMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL3JlYWRlci5jIChnZW5zeW0pOiBSZW5hbWUgYXMuLi4KLQkqIHNyYy9zeW10YWIuaCwgc3JjL3N5bXRhYi5jIChkdW1teV9zeW1ib2xfZ2V0KTogdGhpcy4KLQkoZ2V0c3ltKTogUmVuYW1lIGFzLi4uCi0JKHN5bWJvbF9nZXQpOiB0aGlzLgorCWRvYzogZm9ybWF0dGluZyBjaGFuZ2VzCisJKiBkb2MvYmlzb24udGV4aTogVXNlIEBncm91cC4KIAotMjAwMi0wNi0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTExLTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBzcmMvc3RhdGUuaCAoc3RhdGVfbnVtYmVyX3QsIFNUQVRFX05VTUJFUl9NQVgpOiBOZXcuCi0JKiBzcmMvTFIwLmMsIHNyYy9MUjAuaCwgc3JjL2NvbmZsaWN0cy5jLCBzcmMvbGFsci5jLCBzcmMvbGFsci5oLAotCSogc3JjL291dHB1dC5jLCBzcmMvcHJpbnQuYywgc3JjL3ByaW50X2dyYXBoLmM6IFByb3BhZ2F0ZS4KLQkqIHNyYy9MUjAuaCwgc3JjL0xSMC5oIChmaW5hbF9zdGF0ZSk6IElzIGEgc3RhdGVfdCouCisJc2Nhbm5lcjogdXNlIGV4cGxpY2l0ICJpZ25vcmUiIHN0YXRlbWVudHMKKwkqIHNyYy9zY2FuLWdyYW0ubDogaGVyZS4KIAotMjAwMi0wNi0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTExLTEyICBUaGVvcGhpbGUgUmFucXVldCAgPHJhbnF1ZXRAbHJkZS5lcGl0YS5mcj4KIAotCU1ha2UgdGhlIHRlc3Qgc3VpdGUgcGFzcyB3aXRoIHdhcm5pbmdzIGNoZWNrZWQuCisJdGVzdHM6IGNsb3NlIGZpbGVzIGluIGdsci1yZWdyZXNzaW9uCisJKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdDogSGVyZS4KIAotCSogdGVzdHMvYWN0aW9ucy5hdCAoUHJpbnRlcnMgYW5kIERlc3RydWN0b3JzKTogSW1wcm92ZS4KLQlBdm9pZCB1bnNpZ25lZCB2cy4gc2lnbmVkIGlzc3Vlcy4KLQkqIHRlc3RzL2NhbGMuYXQ6IERvbid0IGV4ZXJjaXNlIHRoZSBzY2FubmVyIGhlcmUsIGRvIGl0Li4uCi0JKiB0ZXN0cy9pbnB1dC5hdCAoVG9ydHVyaW5nIHRoZSBTY2FubmVyKTogaGVyZS4KKzIwMTItMTEtMTIgIFRoZW9waGlsZSBSYW5xdWV0ICA8cmFucXVldEBscmRlLmVwaXRhLmZyPgogCi0yMDAyLTA2LTI4ICBQYXVsIEhpbGZpbmdlciAgPEhpbGZpbmdlckBDUy5CZXJrZWxleS5FRFU+CisJeG1sOiBtYXRjaCBET1Qgb3V0cHV0IGFuZCB4bWwyZG90LnhzbCBwcm9jZXNzaW5nCisJTWFrZSB0aGUgRE9UIHByb2R1Y2VkIGJ5IFhTTFQgcHJvY2Vzc2luZyBlcXVpdmFsZW50IHRvIHRoZSBvbmUgbWFkZSB3aXRoIHRoZQorCS0tZ3JhcGggb3B0aW9uLgogCi0JKiBkYXRhL2dsci5jOiBDb3JyZWN0IHR5cG8gaW4gRW1hY3MtbW9kZSBkaXJlY3RpdmUuICBTbGlnaHRseQotCXJlb3JnYW5pemUgZmlyc3QgbGluZXMgcGFyYWxsZWwgdG8geWFjYy5jLgorCSogZGF0YS94c2x0L3htbDJkb3QueHNsOiBTdHlsaXN0aWMgY2hhbmdlcywgYW5kIGFkZCBzdXBwb3J0IGZvciByZWR1Y3Rpb25zLgorCSogZG9jL2Jpc29uLnRleGkgKFhtbCk6IFVwZGF0ZS4KKwkqIHNyYy9ncmFwaHZpei5jIChjb25jbHVkZV9yZWQpOiBNaW5vciBzdHlsaXN0aWMgY2hhbmdlcyB0byBET1QgaW50ZXJuYWxzLgorCShvdXRwdXRfcmVkKTogU3dhcCBlbmFibGVkIGFuZCBkaXNhYmxlZCByZWR1Y3Rpb25zIG91dHB1dCwgZm9yIGNvaGVyZW5jZQorCXdpdGggWFNMVCBvdXRwdXQuCisJKiBzcmMvcHJpbnRfZ3JhcGguYyAocHJpbnRfY29yZSk6IE1pbm9yIHN0eWxpc3RpYyBjaGFuZ2UgdG8gU3RhdGVzJyBvdXRwdXQuCisJKHByaW50X2FjdGlvbnMpOiBTd2FwIG9yZGVyIG9mIG91dHB1dCBmb3IgcmVkdWN0aW9ucyBhbmQgdHJhbnNpdGlvbnMuCisJKiB0ZXN0cy9sb2NhbC5hdCAoQVRfQklTT05fQ0hFQ0tfWE1MKTogSWdub3JlIGRpZmZlcmVuY2VzIGluIG9yZGVyLgorCSogdGVzdHMvb3V0cHV0LmF0OiBBZGp1c3QgdG8gY2hhbmdlcyBpbiBET1QgaW50ZXJuYWxzLgogCi0yMDAyLTA2LTI4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMTEtMTIgIFRoZW9waGlsZSBSYW5xdWV0ICA8cmFucXVldEBscmRlLmVwaXRhLmZyPgogCi0JKiBkYXRhL2MubTQgKGI0X2NvcHlyaWdodCwgYjRfc2ludF90eXBlLCBiNF91aW50X3R5cGUsIGI0X3Rva2VuX2RlZmluZSkKLQkoYjRfdG9rZW5fZW51bSwgYjRfdG9rZW5fZGVmaW5lcyk6IE5ldywgZmFjdG9yZWQgZnJvbS4uLgotCSogZGF0YS9sYWxyMS5jYywgZGF0YS95YWNjLmMsIGdsci5jOiBoZXJlLgorCXhtbDogZmFjdG9yIHhzbHQgc3BhY2UgdGVtcGxhdGUKKwkqIGRhdGEveHNsdC9iaXNvbi54c2wgKHNwYWNlKTogTmV3LCBpbXBvcnQgZnJvbS4uLgorCSogZGF0YS94c2x0L3htbDJ0ZXh0LnhzbDogSGVyZS4KIAotMjAwMi0wNi0yOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTExLTEyICBUaGVvcGhpbGUgUmFucXVldCAgPHJhbnF1ZXRAbHJkZS5lcGl0YS5mcj4KIAotCSogZGF0YS95YWNjLmMgKHl5ZGVzdHJ1Y3QsIHl5c3ltcHJpbnQpOiBQYWNpZnkgR0NDIHdhcm5pbmdzIGZvcgotCXVudXNlZCB2YXJpYWJsZXMuCi0JKiBzcmMvb3V0cHV0LmMgKG1lcmdlcl9vdXRwdXQpOiBzdGF0aWMuCisJZ3JhcGg6IGZpeCBhIG1lbW9yeSBsZWFrCisJKiBzcmMvZ3JhcGh2aXouYyAob3V0cHV0X3JlZCk6IEhlcmUuCiAKLTIwMDItMDYtMjggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0xMS0xMiAgVGhlb3BoaWxlIFJhbnF1ZXQgIDxyYW5xdWV0QGxyZGUuZXBpdGEuZnI+CiAKLQkqIHNyYy9yZWFkZXIuaDogcy9ncmFtbWVyX2N1cnJlbnRfcnVsZV9tZXJnZV9zZXQvZ3JhbW1hcl8uLi4vLgotCSogc3JjL2NvbmZsaWN0cy5jIChjb25mbGljdHNfdG90YWxfY291bnQpOiBgaScgaXMgdW5zaWduZWQsIHRvCi0JcGFjaWZ5IEdDQy4KLQkqIHNyYy9vdXRwdXQuYyAoc2F2ZV9yb3cpOiBJbml0aWFsaXplIGFsbCB0aGUgdmFyaWFibGVzIHRvIHBhY2lmeSBHQ0MuCisJeG1sOiBkb2N1bWVudGF0aW9uCisJVGhlIFhNTCBvdXRwdXQgY29tYmluZWQgd2l0aCB0aGUgWFNMIFRyYW5zZm9ybWF0aW9ucyBwcm92aWRlZCBpbiBkYXRhLyBhcmUKKwlpbmNyZWRpYmx5IHVzZWZ1bCwgdGhleSBzaG91bGQgYmUgZG9jdW1lbnRlZC4KIAotMjAwMi0wNi0yNyAgUGF1bCBIaWxmaW5nZXIgIDxIaWxmaW5nZXJAQ1MuQmVya2VsZXkuRURVPgorCSogZG9jL2Jpc29uLnRleGkgKFhtbCk6IE5ldyBub2RlLgogCi0JQWNjdW11bGF0ZWQgY2hhbmdlbG9nIGZvciBuZXcgR0xSIHBhcnNpbmcgZmVhdHVyZXMuCisyMDEyLTExLTEyICBUaGVvcGhpbGUgUmFucXVldCAgPHJhbnF1ZXRAbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL2NvbmZsaWN0cy5jIChjb3VudF90b3RhbF9jb25mbGljdHMpOiBDaGFuZ2UgbmFtZSB0bwotCWNvbmZsaWN0c190b3RhbF9jb3VudC4KLQkqIHNyYy9jb25mbGljdHMuaDogRGl0dG8uCi0JKiBzcmMvb3V0cHV0LmMgKHRva2VuX2FjdGlvbnMpOiBVc2UgdGhlIG5ldyBuYW1lLgotCShvdXRwdXRfY29uZmxpY3RzKTogQ2hhbmdlIGNvbmZscCA9PiBjb25mbGljdF9saXN0X2hlYWRzLCBhbmQKLQljb25mbCA9PiBjb25mbGljdF9saXN0IGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkuCi0JKiBkYXRhL2dsci5jOiBVc2UgdGhlIG5ldyBuYW1lcy4KLQkqIE5FV1M6IEFkZCBzZWxmIHRvIEdMUiBhbm5vdW5jZW1lbnQuCisJb3V0cHV0OiBjYXBpdGFsaXplIFN0YXRlCisJKiBzcmMvcHJpbnQuYyAocHJpbnRfc3RhdGUpOiBIZXJlLgorCSogdGVzdHMvY29uZmxpY3RzLmF0LCB0ZXN0cy9leGlzdGluZy5hdCwgdGVzdHMvbG9jYWwuYXQsIHRlc3RzL3JlZHVjZS5hdCwKKwl0ZXN0cy9yZWdyZXNzaW9uLmF0LCB0ZXN0cy9zZXRzLmF0OiBBZGp1c3QuCiAKLQkqIHNyYy9yZWFkZXIuYyAoZnJlZV9tZXJnZXJfZnVuY3Rpb25zKTogQ2xlYW51cDogWEZSRUUtPmZyZWUuCisyMDEyLTExLTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoR0xSIFBhcnNlcnMpOiBNYWtlIGNvcnJlY3Rpb25zIHN1Z2dlc3RlZCBieQotCUFraW0gRGVtYWlsbGUuCisJbWFpbnQ6IGFkZHJlc3Mgc3ludGF4LWNoZWNrIGVycm9ycy4KKwkqIGNmZy5tazogSWdub3JlIHRoZSAiZXJyb3IiIGNhbGwgaW4gdGVzdHMvYysrLmF0LCBpdCBpcyBub3QgdG8gYmUKKwl0cmFuc2xhdGVkLgorCSogZG9jL2Jpc29uLnRleGk6IEZpeCBpbmNvcnJlY3QgQHB4cmVmIHVzZS4KKwkqIHBvL1BPVEZJTEVTLmluOiBBZGQgbWlzc2luZyBmaWxlLgorCSogc3JjL3ByaW50X2dyYXBoLmM6IFJlbW92ZSB1c2VsZXNzIGluY2x1ZGUuCiAKLQkqIGRhdGEvYmlzb24uZ2xyOiBDaGFuZ2UgbmFtZSB0byBnbHIuYwotCSogZGF0YS9nbHIuYzogUmVuYW1lZCBmcm9tIGJpc29uLmdsci4KLQkqIGRhdGEvTWFrZWZpbGUuYW06IEFkZCBnbHIuYworMjAxMi0xMS0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL2dldGFyZ3MuYzoKKwl0ZXN0czogdXNlIHZhbGdyaW5kIHdoZXJlIGFwcHJvcHJpYXRlCisJUmVwb3J0ZWQgYnkgVGjDqW9waGlsZSBSYW5xdWV0LgogCi0JKiBzcmMvc3ltbGlzdC5oOiAgQWRkIGRwcmVjIGFuZCBtZXJnZXIgZmllbGRzIHRvIHN5bWJvbF9saXN0X3MuCi0JKiBzcmMvc3ltbGlzdC5jIChzeW1ib2xfbGlzdF9uZXcpOiBJbml0aWFsaXplIGRwcmVjIGFuZCBtZXJnZXIgZmllbGRzLgorCSogY2ZnLm1rIChzY19hdF9wYXJzZXJfY2hlY2spOiBOZXcuCisJKiB0ZXN0cy9jKysuYXQ6IEZpeCB1c2Ugb2YgQVRfQ0hFQ0sgdnMuIEFUX1BBUlNFUl9DSEVDSy4KIAotCU9yaWdpbmFsbHkgMjAwMi0wNi0xNiAgUGF1bCBIaWxmaW5nZXIgIDxIaWxmaW5nZXJAQ1MuQmVya2VsZXkuRURVPgorMjAxMi0xMS0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogZGF0YS9iaXNvbi5nbHI6IEJlIHN1cmUgdG8gcmVzdG9yZSB0aGUKLQljdXJyZW50ICNsaW5lIHdoZW4gcmV0dXJuaW5nIHRvIHRoZSBza2VsZXRvbiBjb250ZW50cyBhZnRlciBoYXZpbmcKLQlleHBvc2VkIHRoZSBpbnB1dCBmaWxlJ3MgI2xpbmUuCisJTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL2JyYW5jaC0yLjYnIGludG8gbWFpbnQKKwkqIG9yaWdpbi9icmFuY2gtMi42OgorCSAgdGVzdHM6IHVzZSB2YWxncmluZCB3aGVyZSBhcHByb3ByaWF0ZQorCSAgdGVzdHM6IGRvbid0IGV4cGVjdCAkRUdSRVAgdG8gc3VwcG9ydCAtdwogCi0JT3JpZ2luYWxseSAyMDAyLTA2LTEzICBQYXVsIEhpbGZpbmdlciAgPEhpbGZpbmdlckBDUy5CZXJrZWxleS5FRFU+CisyMDEyLTExLTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBkYXRhL2Jpc29uLmdscjogQnJpbmcgdXAgdG8gZGF0ZSB3aXRoIGNoYW5nZXMgdG8gYmlzb24uc2ltcGxlLgorCXRlc3RzOiB1c2UgdmFsZ3JpbmQgd2hlcmUgYXBwcm9wcmlhdGUKKwlSZXBvcnRlZCBieSBUaMOpb3BoaWxlIFJhbnF1ZXQuCiAKLQlPcmlnaW5hbGx5IDIwMDItMDYtMDMgIFBhdWwgSGlsZmluZ2VyICA8SGlsZmluZ2VyQENTLkJlcmtlbGV5LkVEVT4KKwkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0OiBSZXdyaXRlIHNvbWUgdGVzdCBjYXNlcyBzbyB0aGF0IEFUX1BBUlNFUl9DSEVDSywKKwl3aGljaCBydW5zIHZhbGdyaW5kLCBpcyBleHBvc2VkIHdpdGggdGhlIHBhcnNlciwgbm90IHdpdGggImVjaG8iLgorCSogdGVzdHMvbG9jYWwuYXQsIHRlc3RzL3JlZ3Jlc3Npb24uYXQsIHRlc3RzL2hlYWRlcnMuYXQ6CisJVXNlIEFUX1BBUlNFUl9DSEVDSyBmb3IgZ2VuZXJhdGVkIHBhcnNlcnMuCiAKLQkqIGRhdGEvYmlzb24uZ2xyOiBDb3JyZWN0IGRlZmluaXRpb25zIHRoYXQgdXNlIGI0X3ByZWZpeC4KLQlWYXJpb3VzIHJlZm9ybWF0dGluZy4KLQkoR0xSU3RhY2spOiBNYWtlIHl5Y2hhciAoaW4gWVlQVVJFIGNhc2UpIGFuZCB5eXRva2VucCBhcyBwYXJ0IG9mIHN0YWNrLgotCSh5eXJlcG9ydFBhcnNlRXJyb3IsIHl5cmVjb3ZlclBhcnNlRXJyb3IsIHl5cHJvY2Vzc09uZVN0YWNrKTogcmVtb3ZlCi0JeXl0b2tlbnAgYXJndW1lbnQ7IG5vdyBwYXJ0IG9mIHN0YWNrLgotCSh5eWNoYXIpOiBEZWZpbmUgdG8gYmVoYXZlIGFzIGRvY3VtZW50ZWQuCi0JKHl5Y2xlYXJpbik6IERpdHRvLgorMjAxMi0xMS0wOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCU9yaWdpbmFsbHkgMjAwMi0wNS0xNCAgUGF1bCBIaWxmaW5nZXIgIDxIaWxmaW5nZXJAQ1MuQmVya2VsZXkuRURVPgorCXRlc3RzOiBkb24ndCBleHBlY3QgJEVHUkVQIHRvIHN1cHBvcnQgLXcKKwlEb2VzIG5vdCB3b3JrIG9uIFNvbGFyaXMgMTAuICBSZXBvcnRlZCBieSBEZW5uaXMgQ2xhcmtlLgorCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAxMi0xMS9tc2cwMDAwOS5odG1sCisJKiB0ZXN0cy9oZWFkZXJzLmF0IChTZXZlcmFsIHBhcnNlcnMpOiBVc2UgUGVybCBpbnN0ZWFkLgorCVdoaWxlIGF0IGl0LCBydW4gaXQgb25seSBvbmNlLCBvbiBhbGwgdGhlIGdlbmVyYXRlZCBoZWFkZXJzLgorCUFkanVzdCB0byBZWV9OVUxMIGJlIGRlZmluZWQgaW4gcG9zaXRpb24uaGguCiAKLQkqIHNyYy9yZWFkZXIuaDogQWRkIGRlY2xhcmF0aW9uIGZvciBmcmVlX21lcmdlcl9mdW5jdGlvbnMuCisyMDEyLTExLTA4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBzcmMvcmVhZGVyLmMgKG1lcmdlX2Z1bmN0aW9ucyk6IE5ldyB2YXJpYWJsZS4KLQkoZ2V0X21lcmdlX2Z1bmN0aW9uKTogTmV3IGZ1bmN0aW9uLgotCShmcmVlX21lcmdlcl9mdW5jdGlvbnMpOiBOZXcgZnVuY3Rpb24uCi0JKHJlYWRncmFtKTogQ2hlY2sgZm9yICVwcmVjIHRoYXQgaXMgbm90IGZvbGxvd2VkIGJ5IGEgc3ltYm9sLgotCUhhbmRsZSAlZHByZWMgYW5kICVtZXJnZSBkZWNsYXJhdGlvbnMuCi0JKHBhY2tncmFtKTogSW5pdGlhbGl6ZSBkcHJlYyBhbmQgbWVyZ2VyIGZpZWxkcyBpbiBydWxlcyBhcnJheS4KKwl0ZXN0czogbW9yZSBwb3NzaWJsZSBlcnJvciBjb21waWxlciBtZXNzYWdlcyBmb3IgIiNlcnJvciIKKwkqIHRlc3RzL3N5bmNsaW5lcy5hdCAoQVRfU1lOQ0xJTkVTX0NPTVBJTEUpOiBBZGp1c3QgZm9yIENsYW5nLgorCVZlcmlmaWVkIHdpdGggR0NDIDQuMCwgNC4yIHRvIDQuOCwgYW5kIENsYW5nIDIuOSwgMy4yOiBub25lIHNraXAuCiAKLQkqIHNyYy9vdXRwdXQuYyAoY29uZmxpY3RfdG9zLCBjb25mbHJvdywgY29uZmxpY3RfdGFibGUsIGNvbmZsaWN0X2xpc3QsCi0JY29uZmxpY3RfbGlzdF9jbnQsIGNvbmZsaWN0X2xpc3RfZnJlZSk6IE5ldyB2YXJpYWJsZXMuCi0JKHRhYmxlX2dyb3cpOiBBbHNvIGdyb3cgY29uZmxpY3RfdGFibGUuCi0JKHByZXBhcmVfcnVsZXMpOiBPdXRwdXQgZHByZWMgYW5kIG1lcmdlciB0YWJsZXMuCi0JKGNvbmZsaWN0X3Jvdyk6IE5ldyBmdW5jdGlvbi4KLQkoYWN0aW9uX3Jvdyk6IE91dHB1dCBjb25mbGljdCBsaXN0cyBmb3IgR0xSIHBhcnNlci4gIERvbid0IHVzZQotCWRlZmF1bHQgcmVkdWN0aW9uIGluIGNvbmZsaWN0ZWQgc3RhdGVzIGZvciBHTFIgcGFyc2VyIHNvIHRoYXQgdGhlcmUKLQlhcmUgc3BhY2VzIGZvciB0aGUgY29uZmxpY3QgbGlzdHMuCi0JKHNhdmVfcm93KTogQWxzbyBzYXZlIGNvbmZsaWN0IGluZm9ybWF0aW9uLgotCSh0b2tlbl9hY3Rpb25zKTogQWxsb2NhdGUgY29uZmxpY3QgbGlzdC4KLQkobWVyZ2VyX291dHB1dCk6IE5ldyBmdW5jdGlvbi4KLQkocGFja192ZWN0b3IpOiBQYWNrIGNvbmZsaWN0IHRhYmxlLCB0b28uCi0JKG91dHB1dF9jb25mbGljdHMpOiBOZXcgZnVuY3Rpb24gdG8gb3V0cHV0IHl5Y29uZmxwIGFuZCB5eWNvbmZsLgotCShvdXRwdXRfY2hlY2spOiBBbGxvY2F0ZSBjb25mbGljdF90b3MuCi0JKG91dHB1dF9hY3Rpb25zKTogT3V0cHV0IGNvbmZsaWN0IHRhYmxlcywgYWxzby4KLQkob3V0cHV0X3NrZWxldG9uKTogT3V0cHV0IGI0X21lcmdlcnMgZGVmaW5pdGlvbi4KLQkocHJlcGFyZSk6IE91dHB1dCBiNF9tYXhfcmhzX2xlbmd0aCBkZWZpbml0aW9uLgotCVVzZSAnYmlzb24uZ2xyJyBhcyBkZWZhdWx0IHNrZWxldG9uIGZvciBHTFIgcGFyc2Vycy4KLQotCSogc3JjL2dyYW0uYyAoZ2xyX3BhcnNlcik6IE5ldyBmbGFnLgotCShncmFtbWFyX2ZyZWUpOiBDYWxsIGZyZWVfbWVyZ2VyX2Z1bmN0aW9ucy4KLQotCSogc3JjL2NvbmZsaWN0cy5jIChjb3VudF9ycl9jb25mbGljdHMpOiBBdWdtZW50IHRvIG9wdGlvbmFsbHkgY291bnQKLQlhbGwgcGFpcnMgb2YgY29uZmxpY3RpbmcgcmVkdWN0aW9ucywgcmF0aGVyIHRoYW4ganVzdCBhbGwgdG9rZW5zCi0JY2F1c2luZyBjb25mbGljdHMuICBOZWVkZWQgdG8gc2l6ZSBjb25mbGljdCB0YWJsZXMuCi0JKGNvbmZsaWN0c19vdXRwdXQpOiBNb2RpZnkgY2FsbCB0byBjb3VudF9ycl9jb25mbGljdHMgZm9yIG5ldwotCWludGVyZmFjZS4KLQkoY29uZmxpY3RzX3ByaW50KTogRGl0dG8uCi0JKGNvdW50X3RvdGFsX2NvbmZsaWN0cyk6IE5ldyBmdW5jdGlvbi4KLQotCSogc3JjL3JlYWRlci5oIChtZXJnZXJfbGlzdCk6IE5ldyB0eXBlLgotCShtZXJnZV9mdW5jdGlvbnMpOiBOZXcgdmFyaWFibGUuCi0KLQkqIHNyYy9sZXguaCAodG9rX2RwcmVjLCB0b2tfbWVyZ2UpOiBOZXcgdG9rZW4gdHlwZXMuCi0KLQkqIHNyYy9ncmFtLmggKHJ1bGVfcyk6IEFkZCBkcHJlYyBhbmQgbWVyZ2VyIGZpZWxkcy4KLQkoZ2xyX3BhcnNlcik6IE5ldyBmbGFnLgotCi0JKiBzcmMvY29uZmxpY3RzLmggKGNvdW50X3RvdGFsX2NvbmZsaWN0cyk6IE5ldyBmdW5jdGlvbi4KLQotCSogc3JjL29wdGlvbnMuYyAob3B0aW9uX3RhYmxlKTogQWRkICVkcHJlYywgJW1lcmdlLCBhbmQgJWdsci1wYXJzZXIuCi0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvIChHZW5lcmFsaXplZCBMUiBQYXJzaW5nKTogTmV3IHNlY3Rpb24uCi0JKEdMUiBQYXJzZXJzKTogTmV3IHNlY3Rpb24uCi0JKExhbmd1YWdlIGFuZCBHcmFtbWFyKTogTWVudGlvbiBHTFIgcGFyc2luZy4KLQkoVGFibGUgb2YgU3ltYm9scyk6IEFkZCAlZHByZWMsICVnbHItcGFyc2VyLCAlbWVyZ2UsIEdMUgotCUNvcnJlY3QgdHlwbyAoInRnZSIgLT4gInRoZSIpLgotCi0JKiBkYXRhL2Jpc29uLmdscjogTmV3IHNrZWxldG9uIGZvciBHTFIgcGFyc2luZy4KLQotCSogdGVzdHMvY3h4LWdyYW0uYXQ6IE5ldyB0ZXN0cyBmb3IgR0xSIHBhcnNpbmcuCi0KLQkqIHRlc3RzL3Rlc3RzdWl0ZS5hdDogSW5jbHVkZSBjeHgtZ3JhbS5hdC4KLQotCSogdGVzdHMvTWFrZWZpbGUuYW06IEFkZCBjeHgtZ3JhbS5hdC4KLQotCSogc3JjL3BhcnNlLWdyYW0ueToKLQotCSogc3JjL3NjYW4tZ3JhbS5sOiBBZGQgJWRwcmVjLCAlZ2xyLXBhcnNlciwgJW1lcmdlLgotCi0JKiBzcmMvcGFyc2UtZ3JhbS55OiBHcmFtbWFyIGZvciAlZHByZWMsICVtZXJnZSwgJWdsci1wYXJzZXIuCi0KLTIwMDItMDYtMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvb3B0aW9ucy5oLCBzcmMvb3B0aW9ucy5jOiBSZW1vdmUuCi0JKiBzcmMvZ2V0YXJncy5jIChzaG9ydF9vcHRpb25zLCBsb25nX29wdGlvbnMpOiBOZXcuCi0KLTIwMDItMDYtMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2Jpc29uLnNpbXBsZSwgZGF0YS9iaXNvbi5jKys6IFJlbmFtZSBhcy4uLgotCSogZGF0YS95YWNjLmMsIGRhdGEvbGFscjEuY2M6IHRoZXNlLgotCSogZG9jL2Jpc29uLnRleGluZm8gKEVudmlyb25tZW50IFZhcmlhYmxlcyk6IFJlbW92ZS4KLQotMjAwMi0wNi0yNSAgUmFqYSBSIEhhcmluYXRoICA8aGFyaW5hdGhAY3MudW1uLmVkdT4KLQotCSogc3JjL2dldGFyZ3MuYyAocmVwb3J0X2FyZ21hdGNoKTogSW5pdGlhbGl6ZSBzdHJ0b2soKS4KLQotMjAwMi0wNi0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvYmlzb24uc2ltcGxlIChiNF9zeW1ib2xfYWN0aW9ucyk6IE5ldywgcmVwbGFjZXMuLi4KLQkoYjRfc3ltYm9sX2Rlc3RydWN0b3IsIGI0X3N5bWJvbF9wcmludGVyKTogdGhlc2UuCi0JKHl5c3ltcHJpbnQpOiBCZSBzdXJlIHRvIGNhbGwgWVlQUklOVCBvbmx5IGZvciB0b2tlbnMsIGFuZCB1c2luZwotCXVzZXIgdG9rZW4gbnVtYmVycy4KLQotMjAwMi0wNi0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvYmlzb24uc2ltcGxlICh5eWRlc3RydWN0b3IpOiBSZW5hbWUgYXMuLi4KLQkoeXlkZXN0cnVjdCk6IHRoaXMuCi0KLTIwMDItMDYtMjAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvc3ltdGFiLmgsIHNyYy9zeW10YWIuYyAoc3ltYm9sX3R5cGVfc2V0KQotCShzeW1ib2xfZGVzdHJ1Y3Rvcl9zZXQsIHN5bWJvbF9wcmVjZWRlbmNlX3NldCk6IFRoZSBsb2NhdGlvbiBpcwotCXRoZSBsYXN0IGFyZ3VtZW50LgotCUFkanVzdCBhbGwgY2FsbGVycy4KLQotMjAwMi0wNi0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9wYXJzZS1ncmFtLnkgKFlZUFJJTlQsIHl5cHJpbnQpOiBEb24ndCBtZXNzIHdpdGggdGhlIHBhcnNlcgotCWludGVybmFscy4KLQkqIHNyYy9yZWFkZXIuaCwgc3JjL3JlYWRlci5jIChncmFtbWFyX2N1cnJlbnRfcnVsZV9wcmVjX3NldCk6Ci0JVGFrZXMgYSBsb2NhdGlvbi4KLQkqIHNyYy9zeW10YWIuaCwgc3JjL3N5bXRhYi5jIChzeW1ib2xfY2xhc3Nfc2V0KQotCShzeW1ib2xfdXNlcl90b2tlbl9udW1iZXJfc2V0KTogTGlrZXdpc2UuCi0JQWRqdXN0IGFsbCBjYWxsZXJzLgotCVByb21vdGUgY29tcGxhaW5fYXQuCi0JKiB0ZXN0cy9pbnB1dC5hdCAoVHlwZSBDbGFzaGVzKTogQWRqdXN0LgotCi0yMDAyLTA2LTIwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS9iaXNvbi5zaW1wbGUgKFlZTEVYKTogRml4IHRoZSBkZWNsYXJhdGlvbiB3aGVuCi0JJXB1cmUtcGFyc2VyLgotCi0yMDAyLTA2LTIwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS9iaXNvbi5zaW1wbGUgKHl5c3ltcHJpbnQpOiBEb24ndCBwcmludCB0aGUgdG9rZW4gbnVtYmVyLAotCWp1c3QgaXRzIG5hbWUuCi0JKiB0ZXN0cy9hY3Rpb25zLmF0IChEZXN0cnVjdG9ycyk6IFJlbmFtZSBhcy4uLgotCShQcmludGVycyBhbmQgRGVzdHJ1Y3RvcnMpOiB0aGlzLgotCUFsc28gZXhlcmNpc2UgJXByaW50ZXIuCi0KLTIwMDItMDYtMjAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2Jpc29uLnNpbXBsZSAoWVlEU1lNUFJJTlQpOiBOZXcuCi0JVXNlIGl0IHRvIHJlbW92ZSBtYW55IG9mIHRoZSAjaWYgWVlERUJVRy9pZiAoeXlkZWJ1ZykuCi0KLTIwMDItMDYtMjAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvc3ltdGFiLmgsIHNyYy9zeW10YWIuYyAoc3ltYm9sX3QpOiBwcmludGVyIGFuZAotCXByaW50ZXJfbG9jYXRpb24gYXJlIG5ldyBtZW1iZXJzLgotCShzeW1ib2xfcHJpbnRlcl9zZXQpOiBOZXcuCi0JKiBzcmMvcGFyc2UtZ3JhbS55IChQRVJDRU5UX1BSSU5URVIpOiBOZXcgdG9rZW4uCi0JSGFuZGxlIGl0cyBhc3NvY2lhdGVkIHJ1bGUuCi0JKiBzcmMvc2Nhbi1ncmFtLmw6IEFkanVzdC4KLQkoaGFuZGxlX2Rlc3RydWN0b3JfYXQsIGhhbmRsZV9kZXN0cnVjdG9yX2RvbGxhcik6IFJlbmFtZSBhcy4uLgotCShoYW5kbGVfc3ltYm9sX2NvZGVfYXQsIGhhbmRsZV9zeW1ib2xfY29kZV9kb2xsYXIpOiB0aGVzZS4KLQkqIHNyYy9vdXRwdXQuYyAoc3ltYm9sX3ByaW50ZXJzX291dHB1dCk6IE5ldy4KLQkob3V0cHV0X3NrZWxldG9uKTogQ2FsbCBpdC4KLQkqIGRhdGEvYmlzb24uc2ltcGxlICh5eXN5bXByaW50KTogTmV3LiAgQ2Fubm90IGJlIG5hbWVkIHl5cHJpbnQKLQlzaW5jZSB0aGVyZSBhcmUgYWxyZWFkeSBtYW55IGdyYW1tYXIgZmlsZXMgd2l0aCBhIHVzZXIgYHl5cHJpbnQnLgotCVJlcGxhY2UgdGhlIGNhbGxzIHRvIFlZUFJJTlQgdG8gY2FsbHMgdG8geXlzeW1wcmludC4KLQkqIHRlc3RzL2NhbGMuYXQ6IEFkanVzdC4KLQkqIHRlc3RzL3RvcnR1cmUuYXQgKEFUX0RBVEFfU1RBQ0tfVE9SVFVSRSk6IFJlbW92ZSBZWVBSSU5UOiBpdCB3YXMKLQl0YWtpbmcgYWR2YW50YWdlIG9mIHBhcnNlciB2ZXJ5IGludGVybmFsIGRldGFpbHMgKHN0YWNrIHNpemUhKS4KLQotMjAwMi0wNi0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9zY2FuLWdyYW0ubDogQ29tcGxldGUgdGhlIHNjYW5uZXIgd2l0aCB0aGUgbWlzc2luZyBwYXR0ZXJucwotCXRvIHBhY2lmeSBGbGV4LgotCVVzZSBgcXVvdGUnIGFuZCBgc3ltYm9sX3RhZ19nZXQnIHdoZXJlIGFwcHJvcHJpYXRlLgotCi0yMDAyLTA2LTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogdGVzdHMvYWN0aW9ucy5hdCAoRGVzdHJ1Y3RvcnMpOiBBdWdtZW50IHRvIHRlc3QgbG9jYXRpb25zLgotCSogZGF0YS9iaXNvbi5zaW1wbGUgKHl5ZGVzdHJ1Y3Rvcik6IFBhc3MgaXQgdGhlIGN1cnJlbnQgbG9jYXRpb24KLQlpZiBsb2NhdGlvbnMgYXJlIGVuYWJsZWQuCi0JUHJvdG90eXBlIG9ubHkgd2hlbiBfX1NURENfXyBvciBDKysuCi0JQ2hhbmdlIHRoZSBhcmd1bWVudCBuYW1lcyB0byBtb3ZlIGludG8gdGhlIHl5IG5hbWUgc3BhY2U6IHRoZXJlIGlzCi0JdXNlciBjb2RlIGhlcmUuCi0KLTIwMDItMDYtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2Jpc29uLnNpbXBsZSAoYjRfcHVyZV9pZik6IE5ldy4KLQlVc2UgaXQgaW5zdGVhZCBvZiAjaWZkZWYgWVlQVVJFLgotCi0yMDAyLTA2LTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS9iaXNvbi5zaW1wbGUgKGI0X2xvY2F0aW9uX2lmKTogTmV3LgotCVVzZSBpdCBpbnN0ZWFkIG9mICNpZmRlZiBZWUxTUF9ORUVERUQuCi0KLTIwMDItMDYtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JUHJlcGFyZSBAJCBpbiAlZGVzdHJ1Y3RvciwgYnV0IGN1cnJlbnRseSBkb24ndCBiaW5kIGl0IGluIHRoZQotCXNrZWxldG9uLCBhcyAlbG9jYXRpb24gdXNlIGlzIG5vdCBjbGVhbmVkIHVwIHlldC4KLQotCSogc3JjL3NjYW4tZ3JhbS5sIChoYW5kbGVfZG9sbGFyLCBoYW5kbGVfZGVzdHJ1Y3Rvcl9hdCkKLQkoaGFuZGxlX2FjdGlvbl9hdCk6IE5ldy4KLQkoaGFuZGxlX2F0LCBoYW5kbGVfYWN0aW9uX2RvbGxhciwgaGFuZGxlX2Rlc3RydWN0b3JfZG9sbGFyKTogVGFrZQotCWEgYnJhY2VkX2NvZGVfdCBhbmQgYSBsb2NhdGlvbiBhcyBhZGRpdGlvbmFsIGFyZ3VtZW50cy4KLQkoaGFuZGxlX2Rlc3RydWN0b3JfZG9sbGFyKTogSW5zdGVhZCBvZiByZXF1aXJpbmcgYGI0X2V2YWwnLCBqdXN0Ci0JdW5xdW90ZSBvbmUgd2hlbiBvdXRwdXR0aW5nIGBiNF9kb2xsYXJfZG9sbGFyJy4KLQlBZGp1c3QgY2FsbGVycy4KLQkqIGRhdGEvYmlzb24uc2ltcGxlIChiNF9ldmFsKTogUmVtb3ZlLgotCShiNF9zeW1ib2xfZGVzdHJ1Y3Rvcik6IEFkanVzdC4KLQkqIHRlc3RzL2lucHV0LmF0IChJbnZhbGlkIEBuKTogQWRqdXN0LgotCi0yMDAyLTA2LTE5ICBaYWNrIFdlaW5iZXJnICA8emFja0Bjb2Rlc291cmNlcnkuY29tPgotCi0JKiBkb2MvYmlzb24udGV4aW5mbzogRG9jdW1lbnQgYWJpbGl0eSB0byBoYXZlIG11bHRpcGxlCi0JcHJvbG9ndWUgc2VjdGlvbnMuCi0KLTIwMDItMDYtMTggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvZmlsZXMuYyAoY29tcHV0ZV9iYXNlX25hbWVzKTogV2hlbiBjb21wdXRpbmcgdGhlIG91dHB1dCBmaWxlCi0JbmFtZXMgZnJvbSB0aGUgaW5wdXQgZmlsZSBuYW1lLCBzdHJpcCB0aGUgZGlyZWN0b3J5IHBhcnQuCi0KLTIwMDItMDYtMTggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2Jpc29uLnNpbXBsZS5uZXc6IENvbW1lbnQgY2hhbmdlcy4KLQlSZXBvcnRlZCBieSBBbmRyZWFzIFNjaHdhYi4KLQotMjAwMi0wNi0xOCAgTWF0dCBLcmFhaSAgPGtyYWFpQGFsdW1uaS5jbXUuZWR1PgotCi0JKiBkYXRhL2Jpc29uLnNpbXBsZSAoeXlvdmVyZmxvd2xhYik6ICNpZm5kZWYgeXlvdmVyZmxvdywgc28gdGhhdAotCXRoZXJlIGFyZSBubyBgbGFiZWwgYHl5b3ZlcmZsb3dsYWInIGRlZmluZWQgYnV0IG5vdCB1c2VkJyB3YXJuaW5ncwotCXdoZW4geXlvdmVyZmxvdyBpcyBkZWZpbmVkLgotCi0yMDAyLTA2LTE4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMTEtMDggIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkqIHNyYy9zeW10YWIuaCwgc3JjL3N5bXRhYi5jIChzeW1ib2xfdCk6IGRlc3RydWN0b3JfbG9jYXRpb24gaXMgYQotCW5ldyBtZW1iZXIuCi0JKHN5bWJvbF9kZXN0cnVjdG9yX3NldCk6IEFkanVzdC4KLQkqIHNyYy9vdXRwdXQuYyAoc3ltYm9sX2Rlc3RydWN0b3JzX291dHB1dCk6IE91dHB1dCB0aGUgZGVzdHJ1Y3RvcgotCWxvY2F0aW9ucy4KLQlPdXRwdXQgdGhlIHN5bWJvbCBuYW1lLgotCSogZGF0YS9iaXNvbi5zaW1wbGUgKGI0X3N5bWJvbF9kZXN0cnVjdG9yKTogQWRqdXN0LgorCXJlZ2VuCiAKLTIwMDItMDYtMTggIENyaXMgQmFpbGlmZiAgPGMuYmFpbGlmZkBhd2F5d2ViLmNvbT4KLQlhbmQgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTExLTA4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBkYXRhL2Jpc29uLnNpbXBsZS5uZXcgKHl5ZXJybGFiMSk6IEJlIHN1cmUgdG8gcG9wIGFuZCBkZXN0cm95Ci0Jd2hhdCdzIGxlZnQgb24gdGhlIHN0YWNrIHdoZW4gdGhlIGVycm9yIHJlY292ZXJ5IGhpdHMgRU9GLgotCSogdGVzdHMvYWN0aW9ucy5hdCAoRGVzdHJ1Y3RvcnMpOiBDb21wbGV0ZSB0byBleGVyY2lzZSB0aGlzIGNhc2UuCisJTWVyZ2UgYnJhbmNoICdicmFuY2gtMi42JyBpbnRvIG1haW50CisJKiBvcmlnaW4vYnJhbmNoLTIuNjoKKwkgIG1haW50OiBwb3N0LXJlbGVhc2UgYWRtaW5pc3RyaXZpYQorCSAgdmVyc2lvbiAyLjYuNQorCSAgcmVnZW4KKwkgIHRlc3RzOiBzeW50YXgtY2hlY2sKKwkgIHRlc3RzOiBiZXdhcmUgb2YgY29tcGlsZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgUE9TSVhMWV9DT1JSRUNUCisJICBnbnVsaWI6IHVwZGF0ZQogCi0yMDAyLTA2LTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMTEtMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkqIGRhdGEvbTRzdWdhci9tNHN1Z2FyLm00IChtNF9tYXApOiBSZWNvZ25pemUgd2hlbiB0aGUgbGlzdCBvZgotCWFyZ3VtZW50cyBpcyByZWFsbHkgZW1wdHksIG5vdCBvbmx5IGVxdWFsIHRvIGBbXScuCi0JKiBzcmMvc3ltdGFiLmgsIHNyYy9zeW10YWIuYyAoc3ltYm9sX3QpOiBgZGVzdHJ1Y3RvcicgaXMgYSBuZXcKLQltZW1iZXIuCi0JKHN5bWJvbF9kZXN0cnVjdG9yX3NldCk6IE5ldy4KLQkqIHNyYy9vdXRwdXQuYyAoc3ltYm9sX2Rlc3RydWN0b3JzX291dHB1dCk6IE5ldy4KLQkqIHNyYy9yZWFkZXIuaCAoYnJhY2VfY29kZV90LCBjdXJyZW50X2JyYWNlZF9jb2RlKTogTmV3LgotCSogc3JjL3NjYW4tZ3JhbS5sIChCUkFDRURfQ09ERSk6IFVzZSBpdCB0byBicmFuY2ggb24uLi4KLQkoaGFuZGxlX2RvbGxhcik6IFJlbmFtZSBhcy4uLgotCShoYW5kbGVfYWN0aW9uX2RvbGxhcik6IHRoaXMuCi0JKGhhbmRsZV9kZXN0cnVjdG9yX2RvbGxhcik6IE5ldy4KLQkqIHNyYy9wYXJzZS1ncmFtLnkgKFBFUkNFTlRfREVTVFJVQ1RPUik6IE5ldy4KLQkoZ3JhbW1hcl9kZWNsYXJhdGlvbik6IFVzZSBpdC4KLQkqIGRhdGEvYmlzb24uc2ltcGxlICh5eXN0b3MpOiBJcyBhbHdheXMgZGVmaW5lZC4KLQkoeXlkZXN0cnVjdG9yKTogTmV3LgotCSogdGVzdHMvYWN0aW9ucy5hdCAoRGVzdHJ1Y3RvcnMpOiBOZXcuCi0JKiB0ZXN0cy9jYWxjLmF0IChfQVRfQ0hFQ0tfQ0FMQ19FUlJPUik6IERvbid0IHJlbHkgb24gZWdyZXAuCisJbWFpbnQ6IHBvc3QtcmVsZWFzZSBhZG1pbmlzdHJpdmlhCisJKiBORVdTOiBBZGQgaGVhZGVyIGxpbmUgZm9yIG5leHQgcmVsZWFzZS4KKwkqIC5wcmV2LXZlcnNpb246IFJlY29yZCBwcmV2aW91cyB2ZXJzaW9uLgorCSogY2ZnLm1rIChvbGRfTkVXU19oYXNoKTogQXV0by11cGRhdGUuCiAKLTIwMDItMDYtMTcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0xMS0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL3N5bWxpc3QuaCwgc3JjL3N5bWxpc3QuYyAoc3ltYm9sX2xpc3RfbGVuZ3RoKTogTmV3LgotCSogc3JjL3NjYW4tZ3JhbS5sIChoYW5kbGVfZG9sbGFyLCBoYW5kbGVfYXQpOiBDb21wdXRlIHRoZQotCXJ1bGVfbGVuZ3RoIG9ubHkgd2hlbiBuZWVkZWQuCi0JKiBzcmMvb3V0cHV0LmMgKGFjdGlvbnNfb3V0cHV0LCB0b2tlbl9kZWZpbml0aW9uc19vdXRwdXQpOiBPdXRwdXQKLQl0aGUgZnVsbCBNNCBibG9jay4KLQkqIHNyYy9zeW10YWIuYzogRG9uJ3QgYWNjZXNzIGRpcmVjdGx5IHRvIHRoZSBzeW1ib2wgdGFnLCB1c2UKLQlzeW1ib2xfdGFnX2dldC4KLQkqIHNyYy9wYXJzZS1ncmFtLnk6IFVzZSBzeW1ib2xfbGlzdF9mcmVlLgorCXZlcnNpb24gMi42LjUKKwkqIE5FV1M6IFJlY29yZCByZWxlYXNlIGRhdGUuCiAKLTIwMDItMDYtMTcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0xMS0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL3JlYWRlci5oLCBzcmMvcmVhZGVyLmMgKHN5bWJvbF9saXN0LCBzeW1ib2xfbGlzdF9uZXcpCi0JKHN5bWJvbF9saXN0X3ByZXBlbmQsIGdldF90eXBlX25hbWUpOiBNb3ZlIHRvLi4uCi0JKiBzcmMvc3ltbGlzdC5oLCBzcmMvc3ltbGlzdC5jIChzeW1ib2xfbGlzdF90LCBzeW1ib2xfbGlzdF9uZXcpCi0JKHN5bWJvbF9saXN0X3ByZXBlbmQsIHN5bWJvbF9saXN0X25fdHlwZV9uYW1lX2dldCk6IGhlcmUuCi0JQWRqdXN0IGFsbCBjYWxsZXJzLgotCShzeW1ib2xfbGlzdF9mcmVlKTogTmV3LgotCSogc3JjL3NjYW4tZ3JhbS5sIChoYW5kbGVfZG9sbGFyKTogVGFrZXMgYSBsb2NhdGlvbi4KLQkqIHRlc3RzL2lucHV0LmF0IChJbnZhbGlkICRuKTogQWRqdXN0LgorCXJlZ2VuCiAKLTIwMDItMDYtMTcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0xMS0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL3JlYWRlci5oLCBzcmMvcmVhZGVyLmMgKHN5bWJvbF9saXN0X25ldyk6IEV4cG9ydCBpdC4KLQkoc3ltYm9sX2xpc3RfcHJlcGVuZCk6IE5ldy4KLQkqIHNyYy9wYXJzZS1ncmFtLnkgKCV1bmlvbik6IGBsaXN0JyBpcyBhIG5ldyBtZW1iZXIuCi0JKHN5bWJvbHMuMSk6IE5ldywgcmVwbGFjZXMuLi4KLQkodGVybXNfdG9fcHJlYy4xLCBudGVybXNfdG9fdHlwZS4xKTogdGhlc2UuCi0JKiBzcmMvc3ltdGFiLmgsIHNyYy9zeW10YWIuYyAoc3ltYm9sX3R5cGVfc2V0LCBzeW1ib2xfcHJlY2VkZW5jZV9zZXQpCi0JVGFrZSBhIGxvY2F0aW9uIGFzIGFkZGl0aW9uYWwgYXJndW1lbnQuCi0JQWRqdXN0IGFsbCBjYWxsZXJzLgorCXRlc3RzOiBzeW50YXgtY2hlY2sKKwkqIHRlc3RzL2FjdGlvbnMuYXQ6IEZpeCB0eXBvLgogCi0yMDAyLTA2LTE1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMTEtMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkqIHNyYy9wYXJzZS1ncmFtLnk6IE1vdmUgJXRva2VuIGluIHRoZSBkZWNsYXJhdGlvbiBzZWN0aW9uIHNvIHRoYXQKLQl3ZSBkb24ndCBkZXBlbmQgdXBvbiBDVlMgQmlzb24uCisJdGVzdHM6IGJld2FyZSBvZiBjb21waWxlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCBQT1NJWExZX0NPUlJFQ1QKKwlSdW5uaW5nICJtYWludGFpbmVyLXJlbGVhc2UtY2hlY2siIG9uIE9TIFggd2l0aCBDbGFuZyAyLjkgZmFpbHMsCisJYmVjYXVzZSAiY2xhbmctbXAtMi45IC1vIHRlc3QgLWcgdGVzdC5jIiBsYXVuY2hlcyAiL3Vzci9iaW4vZHN5bXV0aWwKKwl0ZXN0IC1vIHRlc3QuZFNZTSIgd2hpY2ggZmFpbHMgd2l0aCAiZXJyb3I6IHVuYWJsZSB0byBvcGVuIGV4ZWN1dGFibGUKKwknLW8nIi4KIAotMjAwMi0wNi0xNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJKiBtNC9jLXdvcmtpbmcubTQgKEJJU09OX0NIRUNLX1dJVEhfUE9TSVhMWV9DT1JSRUNUKQorCShCSVNPTl9DX0NPTVBJTEVSX1BPU0lYTFlfQ09SUkVDVCk6IE5ldy4KKwkqIGNvbmZpZ3VyZS5hYzogVXNlIHRoZSBsYXR0ZXIuCisJKiB0ZXN0cy9hdGxvY2FsLmluIChQT1NJWExZX0NPUlJFQ1RfSVNfRVhQT1JURUQpOiBOZXcuCisJKiB0ZXN0cy9sb2NhbC5hdCAoQVRfQklTT05fQ0hFQ0tfV0FSTklOR1NfKTogVXNlIGl0IGluc3RlYWQgb2YgY29tcHV0aW5nIGl0cworCXZhbHVlIGVhY2ggdGltZS4KKwkoQVRfUVVFTExfVkFMR1JJTkQpOiBTa2lwIHRlc3RzIHRoYXQgY2Fubm90IHdvcmsgYmVjYXVzZSBvZiBjb21waWxlcnMKKwl0aGF0IGRvIG5vdCBzdXBwb3J0IFBPU0lYTFlfQ09SUkVDVC4KIAotCSogc3JjL3N0YXRlLmgsIHNyYy9zdGF0ZS5jIChzdGF0ZV9ydWxlX2xvb2thaGVhZHNfcHJpbnQpOiBOZXcuCi0JKiBzcmMvcHJpbnQuYyAocHJpbnRfY29yZSk6IFVzZSBpdC4KKzIwMTItMTEtMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDItMDYtMTUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCWdudWxpYjogdXBkYXRlCiAKLQkqIHNyYy9jb25mbGljdHMuYyAobG9nX3Jlc29sdXRpb24pOiBBY2NlcHQgdGhlIHJ1bGUgaW52b2x2ZWQgaW4KLQl0aGUgc3IgY29uZmxpY3RzIGluc3RlYWQgb2YgdGhlIGxvb2thaGVhZCBudW1iZXIgdGhhdCBwb2ludHMgdG8KLQl0aGF0IHJ1bGUuCi0JKGZsdXNoX3JlZHVjZSk6IEFjY2VwdCB0aGUgY3VycmVudCBsb29rYWhlYWQgdmVjdG9yIGFzIGFyZ3VtZW50LAotCWluc3RlYWQgb2YgdGhlIGluZGV4IGluIExBLgotCShyZXNvbHZlX3NyX2NvbmZsaWN0KTogQWNjZXB0IHRoZSBjdXJyZW50IG51bWJlciBvZiBsb29rYWhlYWQKLQliaXRzZXQgdG8gY29uc2lkZXIgZm9yIHRoZSBTVEFURSwgaW5zdGVhZCBvZiB0aGUgaW5kZXggaW4gTEEuCi0JKHNldF9jb25mbGljdHMpOiBBZGp1c3QuCi0JKiBzcmMvbGFsci5jLCBzcmMvbGFsci5oLCBzcmMvc3RhdGUuaDogQ29tbWVudCBjaGFuZ2VzLgorMjAxMi0xMS0wNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotMjAwMi0wNi0xNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJTWVyZ2UgYnJhbmNoICdicmFuY2gtMi42JyBpbnRvIG1haW50CisJKiBvcmlnaW4vYnJhbmNoLTIuNjogKDI0IGNvbW1pdHMpCisJICB0ZXN0czogY2FsYzogbW9kZXJuaXplIHRoZSB1c2Ugb2YgbG9jYXRpb25zCisJICB0ZXN0czogcmVtb3ZlIHVzZWxlc3MgbG9jYXRpb24gaW5pdGlhbGl6YXRpb25zCisJICBsYWxyMS5jYzogYWx3YXlzIGluaXRpYWxpemUgeXlsdmFsLgorCSAgdGVzdHM6IGNoZWNrIHRoYXQgQyBhbmQgQysrIG9iamVjdHMgY2FuIGJlIGxpbmtlZCB0b2dldGhlci4KKwkgIHlhY2MuYzogYWxzbyBkaXNhYmxlIC1XdW5pbml0aWFsaXplZC4KKwkgIGdsci5jYywgeWFjYy5jOiBpbml0aWFsaXplIHl5bGxvYyBwcm9wZXJseQorCSAgeWFjYy5jLCBnbHIuYzogYSBiZXR0ZXIgWVlfTE9DQVRJT05fUFJJTlQKKwkgIHlhY2MuYzogc2ltcGxpZnkgaW5pdGlhbGl6YXRpb24KKwkgIGRvYzogZm9ybWF0dGluZyBjaGFuZ2VzCisJICBjKys6IGZpeCBwb3NpdGlvbiBvcGVyYXRvciBzaWduYXR1cmVzCisJICB0ZXN0czogcmVtb3ZlIHVzZWxlc3MgbG9jYXRpb24gaW5pdGlhbGl6YXRpb24uCisJICB0ZXN0czogZml4IGxvY2F0aW9ucyBpbiBDCisJICB0ZXN0czogaGFuZGxlICVwYXJzZS1wYXJhbSBpbiB0aGUgZ2VuZXJhdGVkIHl5ZXJyb3IKKwkgIHRlc3RzOiBzaW1wbGlmaWNhdGlvbnMKKwkgIGdyYW1tYXJzOiBmaXggZGlzcGxheSBvZiBudWwgY2hhcmFjdGVyIGluIGVycm9yIG1lc3NhZ2UKKwkgIHRlc3RzOiBzb3J0CisJICB0ZXN0czogY29zbWV0aWMgY2hhbmdlcworCSAgY29tbWVudCBjaGFuZ2VzCisJICBhdXRvY29uZjogdXBkYXRlCisJICBnbnVsaWI6IHVwZGF0ZQorCSAgLi4uCiAKLQkqIHNyYy9zdGF0ZS5oIChzdGF0ZV90KTogUmVwbGFjZSB0aGUgYGxvb2thaGVhZHNwJyBtZW1iZXIsIGEKLQlzaG9ydCwgd2l0aCBgbG9va2FoZWFkcycgKGJpdHNldHYpLCBgbG9va2FoZWFkc19ydWxlJyAocnVsZV90KiopLgotCUFkanVzdCBhbGwgZGVwZW5kZW5jaWVzLgotCSogc3JjL2xhbHIuYyAoaW5pdGlhbGl6ZV9sb29rYWhlYWRzKTogU3BsaXQgaW50by4uLgotCShzdGF0ZXNfbG9va2FoZWFkc19jb3VudCwgc3RhdGVzX2xvb2thaGVhZHNfaW5pdGlhbGl6ZSk6IHRoZXNlLgotCShsYWxyKTogQWRqdXN0LgorMjAxMi0xMS0wNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotMjAwMi0wNi0xNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJdGVzdHM6IGNhbGM6IG1vZGVybml6ZSB0aGUgdXNlIG9mIGxvY2F0aW9ucworCSogdGVzdHMvY2FsYy5hdDogRG9uJ3QgaW5pdGlhbGl6ZSB0aGUgbG9jYXRpb24sIGxldCB0aGUgcGFyc2VyCisJZG8gaXQuCisJVXNlIGEgJHByaW50ZXIuCisJQ2hhbmdlIHNvbWUgdGVzdGluZyBpbnB1dCB0byBiZSBlYXNpZXIgdG8gZGlzdGluZ3Vpc2ggKGluc3RlYWQgb2YgYWx3YXlzCisJIjAgMCIgZm9yIGluc3RhbmNlKS4KIAotCSogc3JjL2dyYW0uaCwgc3JjL2dyYW0uYyAoZ3JhbW1hcl9ydWxlc19wYXJ0aWFsX3ByaW50KTogTmV3LCBldmVkCi0Jb3V0IG9mLi4uCi0JKGdyYW1tYXJfcnVsZXNfcHJpbnQpOiBoZXJlLgotCSogc3JjL3JlZHVjZS5jIChyZWR1Y2Vfb3V0cHV0KTogVXNlIGl0LgotCSogdGVzdHMvcmVkdWNlLmF0IChVc2VsZXNzIFJ1bGVzLCBSZWR1Y2VkIEF1dG9tYXRvbikKLQkoVW5kZXJpdmFibGUgUnVsZXMpOiBBZGp1c3QuCisyMDEyLTExLTA2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0yMDAyLTA2LTE1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwl0ZXN0czogcmVtb3ZlIHVzZWxlc3MgbG9jYXRpb24gaW5pdGlhbGl6YXRpb25zCisJKiB0ZXN0cy9hY3Rpb25zLmF0LCB0ZXN0cy9jYWxjLmF0OiBoZXJlLgogCi0JQ29weSBCWWFjYydzIG5pY2Ugd2F5IHRvIHJlcG9ydCB0aGUgZ3JhbW1hci4KKzIwMTItMTEtMDYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkqIHNyYy9ncmFtLmgsIHNyYy9ncmFtLmMgKGdyYW1tYXJfcmhzX3ByaW50LCBncmFtbWFyX3J1bGVzX3ByaW50KToKLQlOZXcuCi0JRG9uJ3QgcHJpbnQgdGhlIHJ1bGVzJyBsb2NhdGlvbiwgaXQgaXMgY29uZnVzaW5nIGFuZCB1c2VsZXNzLgotCShydWxlX3ByaW50KTogVXNlIGdyYW1tYXJfcmhzX3ByaW50LgotCSogc3JjL3ByaW50LmMgKHByaW50X2dyYW1tYXIpOiBVc2UgZ3JhbW1hcl9ydWxlc19wcmludC4KKwlsYWxyMS5jYzogYWx3YXlzIGluaXRpYWxpemUgeXlsdmFsLgorCSogZGF0YS9sYWxyMS5jYzogaGVyZS4KIAotMjAwMi0wNi0xNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTExLTA2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JQ29tcGxldGUgYW5kIHJhdGlvbmFsaXplIGB1c2VsZXNzIHRoaW5nJyB3YXJuaW5ncy4KKwl0ZXN0czogY2hlY2sgdGhhdCBDIGFuZCBDKysgb2JqZWN0cyBjYW4gYmUgbGlua2VkIHRvZ2V0aGVyLgorCSogdGVzdHMvbG9jYWwuYXQgKEFUX1NLSVBfSUZfQ0FOTk9UX0xJTktfQ19BTkRfQ1hYKTogTmV3LgorCSogdGVzdHMvaGVhZGVycy5hdCAoU2V2ZXJhbCBwYXJzZXJzKTogVXNlIGl0LgogCi0JKiBzcmMvc3ltdGFiLmgsIHNyYy9zeW10YWIuYyAoc3ltYm9sX3RhZ19nZXQsIHN5bWJvbF90YWdfZ2V0X24pCi0JKHN5bWJvbF90YWdfcHJpbnQpOiBOZXcuCi0JVXNlIHRoZW0gZXZlcnl3aGVyZSBpbiBwbGFjZSBvZiBhY2Nlc3NpbmcgZGlyZWN0bHkgdGhlIHRhZyBtZW1iZXIuCi0JKiBzcmMvZ3JhbS5oLCBzcmMvZ3JhbS5jIChydWxlX3ByaW50KTogTmV3LgotCVVzZSBpdCB3aGVyZSBhIHJ1bGUgdXNlZCB0byBiZSBwcmludGVkIGBieSBoYW5kJy4KLQkqIHNyYy9yZWR1Y2UuYyAobm9udGVybWluYWxzX3JlZHVjZSk6IFJlcG9ydCB0aGUgdXNlIG5vbnRlcm1pbmFscy4KLQkocmVkdWNlX2dyYW1tYXJfdGFibGVzKTogUmVwb3J0IHRoZSB1c2VsZXNzIHJ1bGVzLgotCShyZWR1Y2VfcHJpbnQpOiBVc2VsZXNzIHRoaW5ncyBhcmUgYSB3YXJuaW5nLCBub3QgYW4gZXJyb3IuCi0JUmVwb3J0IGl0IGFzIHN1Y2guCi0JKiB0ZXN0cy9yZWR1Y2UuYXQgKFVzZWxlc3MgTm9udGVybWluYWxzLCBVc2VsZXNzIFJ1bGVzKToKLQkoUmVkdWNlZCBBdXRvbWF0b24sIFVuZGVyaXZhYmxlIFJ1bGVzKTogQWRqdXN0LgotCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoV2ViMmMgUmVwb3J0LCBXZWIyYyBSZXBvcnQpOiBBZGp1c3QuCi0JKiB0ZXN0cy9jb25mbGljdHMuYXQgKFVucmVzb2x2ZWQgU1IgQ29uZmxpY3RzKQotCShTb2x2ZWQgU1IgQ29uZmxpY3RzKTogQWRqdXN0LgorMjAxMi0xMS0wNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotMjAwMi0wNi0xNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJeWFjYy5jOiBhbHNvIGRpc2FibGUgLVd1bmluaXRpYWxpemVkLgorCSogZGF0YS95YWNjLmMgKFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOKTogRm9yIHNvbWUgdmVyc2lvbnMKKwlvZiBHQ0MsIC1XbWF5YmUtdW5pbml0aWFsaXplZCBhbG9uZSBkb2VzIG5vdCBzdWZmaWNlLgogCi0JTGV0IHN5bWJvbHMgaGF2ZSBhIGxvY2F0aW9uLgorMjAxMi0xMS0wNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL3N5bXRhYi5oLCBzcmMvc3ltdGFiLmMgKHN5bWJvbF90KTogTG9jYXRpb24gaXMgYSBuZXcgbWVtYmVyLgotCShnZXRzeW0pOiBBZGp1c3QuCi0JQWRqdXN0IGFsbCBjYWxsZXJzLgotCSogc3JjL2NvbXBsYWluLmgsIHNyYy9jb21wbGFpbi5jIChjb21wbGFpbl9hdCwgZmF0YWxfYXQsIHdhcm5fYXQpOgotCVVzZSBsb2NhdGlvbl90LCBub3QgaW50LgotCSogc3JjL3N5bXRhYi5jIChzeW1ib2xfY2hlY2tfZGVmaW5lZCk6IFRha2UgYWR2YW50YWdlIG9mIHRoZQorCWdsci5jYywgeWFjYy5jOiBpbml0aWFsaXplIHl5bGxvYyBwcm9wZXJseQorCVRoZXJlIGFyZSBzZXZlcmFsIGlzc3VlcyB0byBhZGRyZXNzIGhlcmUuICBPbmUgaXMgdGhhdCB5eWxsb2Mgc2hvdWxkCisJYmUgaW5pdGlhbGl6ZWQgd2hlbiBwb3NzaWJsZS4gIEFub3RoZXIgaXMgdGhhdCB0aGUgcHVzaCBwYXJzZXIgbmVlZHMKKwl0byB1cGRhdGUgeXlwdXNoZWRfbG9jIHdoZW4gdGhlIHVzZXIgbW9kaWZpZWQgaXQuICBBbmQgaWYgdGhlIHBhcnNlcgorCXN0YXJ0cyBieSBhIHJlZHVjdGlvbiBvZiBhbiBlbXB0eSwgaXQgdXNlcyB0aGUgZmlyc3QgbG9jYXRpb24gb24gdGhlCisJc3RhY2ssIHdoaWNoLCB0aGVyZWZvcmUsIG11c3QgYWxzbyBiZSBpbml0aWFsaXplZCB0byB0aGlzIGluaXRpYWwKIAlsb2NhdGlvbi4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKEludmFsaWQgaW5wdXRzKTogQWRqdXN0LgogCi0yMDAyLTA2LTE1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3BhcnNlLWdyYW0ueSAoWVlMTE9DX0RFRkFVTFQsIGN1cnJlbnRfbGhzX2xvY2F0aW9uKTogTmV3LgotCShpbnB1dCk6IERvbid0IHRyeSB0byBpbml0aWFsaXplIHl5bGxvYyBoZXJlLCBkbyBpdCBpbiB0aGUKLQlzY2FubmVyLgotCSogc3JjL3NjYW4tZ3JhbS5sIChZWV9VU0VSX0lOSVQpOiBJbml0aWFsaXplIHl5bGxvYy4KLQkqIHNyYy9ncmFtLmggKHJ1bGVfdCk6IENoYW5nZSBsaW5lIGFuZCBhY3Rpb25fbGluZSBpbnRvIGxvY2F0aW9uCi0JYW5kIGFjdGlvbl9sb2NhdGlvbiwgb2YgbG9jYXRpb25fdCB0eXBlLgotCUFkanVzdCBhbGwgZGVwZW5kZW5jaWVzLgotCSogc3JjL2xvY2F0aW9uLmgsIHNyYy9sb2NhdGlvbi5jIChlbXB0eV9sb2NhdGlvbik6IE5ldy4KLQkqIHNyYy9yZWFkZXIuaCwgc3JjL3JlYWRlci5jIChncmFtbWFyX3N0YXJ0X3N5bWJvbF9zZXQpCi0JKGdyYW1tYXJfc3ltYm9sX2FwcGVuZCwgZ3JhbW1hcl9ydWxlX2JlZ2luLCBncmFtbWFyX3J1bGVfZW5kKQotCShncmFtbWFyX2N1cnJlbnRfcnVsZV9zeW1ib2xfYXBwZW5kKQotCShncmFtbWFyX2N1cnJlbnRfcnVsZV9hY3Rpb25fYXBwZW5kKTogRXhwZWN0IGEgbG9jYXRpb24gYXMgYXJndW1lbnQuCi0JKiBzcmMvcmVhZGVyLmMgKGdyYW1tYXJfbWlkcnVsZV9hY3Rpb24pOiBBZGp1c3QgdG8gYXR0YWNoIGFuCi0JYWN0aW9uJ3MgbG9jYXRpb24gYXMgZHVtbXkgc3ltYm9sIGxvY2F0aW9uLgotCSogc3JjL3N5bXRhYi5oLCBzcmMvc3ltdGFiLmMgKHN0YXJ0c3ltYm9sX2xvY2F0aW9uKTogTmV3LgotCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoV2ViMmMgUmVwb3J0LCBSdWxlIExpbmUgTnVtYmVycyk6IEFkanVzdAotCXRoZSBsaW5lIG51bWJlcnMuCi0KLTIwMDItMDYtMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JR3JhbW1hciBkZWNsYXJhdGlvbnMgbWF5IGJlIGZvdW5kIGluIHRoZSBncmFtbWFyIHNlY3Rpb24uCi0KLQkqIHNyYy9wYXJzZS1ncmFtLnkgKHJ1bGVzX29yX2dyYW1tYXJfZGVjbGFyYXRpb24pOiBOZXcuCi0JKGRlY2xhcmF0aW9ucyk6IEVhY2ggZGVjbGFyYXRpb24gbWF5IGVuZCB3aXRoIGEgc2VtaWNvbG9uLCBub3QKLQlqdXN0Li4uCi0JKGdyYW1tYXJfZGVjbGFyYXRpb24pOiBgIiV1bmlvbiInLgotCShncmFtbWFyKTogQnJhbmNoIHRvIHJ1bGVzX29yX2dyYW1tYXJfZGVjbGFyYXRpb24uCi0KLTIwMDItMDYtMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvbWFpbi5jIChtYWluKTogSW52b2tlIHNjYW5uZXJfZnJlZS4KLQotMjAwMi0wNi0xNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9vdXRwdXQuYyAobTRfaW52b2tlKTogRXh0cmFjdGVkIGZyb20uLi4KLQkob3V0cHV0X3NrZWxldG9uKTogaGVyZS4KLQlGcmVlIHRlbXBmaWxlLgotCi0yMDAyLTA2LTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3BhcnNlLWdyYW0ueSAoZGlyZWN0aXZlcywgZGlyZWN0aXZlLCBncmFtKQotCShncmFtbWFyX2RpcmVjdGl2ZXMsIHByZWNlZGVuY2VfZGlyZWN0aXZlcywgcHJlY2VkZW5jZV9kaXJlY3RpdmUpOgotCVJlbmFtZSBhcy4uLgotCShkZWNsYXJhdGlvbnMsIGRlY2xhcmF0aW9uLCBncmFtbWFyLCBncmFtbWFyX2RlY2xhcmF0aW9uKQotCShwcmVjZWRlbmNlX2RlY2xhcmF0aW9uLCBwcmVjZWRlbmNlX2RlY2xhcmF0b3IpOiB0aGVzZS4KLQkoc3ltYm9sX2RlY2xhcmF0aW9uKTogTmV3LgotCi0yMDAyLTA2LTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2ZpbGVzLmMgKGFjdGlvbl9vYnN0YWNrKTogUmVtb3ZlLCB1bnVzZWQuCi0JKG91dHB1dF9vYnN0YWNrKTogUmVtb3ZlIGl0LCBhbmQgYWxsIGl0cyBkZXBlbmRlbmNpZXMsIGFzIGl0IGlzIG5vCi0JbG9uZ2VyIG5lZWRlZC4KLQkqIHNyYy9yZWFkZXIuYyAoZXBpbG9ndWVfc2V0KTogQnVpbGQgdGhlIGVwaWxvZ3VlIGluIHRoZQotCW11c2NsZV9vYnN0YWNrLgotCSogc3JjL291dHB1dC5oLCBzcmMvb3V0cHV0LmMgKG11c2NsZV9vYnN0YWNrKTogTW92ZSB0by4uLgotCSogc3JjL211c2NsZV90YWIuaCwgc3JjL211c2NsZV90YWIuaDogaGVyZS4KLQkobXVzY2xlX2luaXQpOiBJbml0aWFsaXplIG11c2NsZV9vYnN0YWNrLgotCShtdXNjbGVfZnJlZSk6IE5ldy4KLQkqIHNyYy9tYWluLmMgKG1haW4pOiBDYWxsIGl0LgotCi0yMDAyLTA2LTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2xvY2F0aW9uLmg6IE5ldywgZXh0cmFjdGVkIGZyb20uLi4KLQkqIHNyYy9yZWFkZXIuaDogaGVyZS4KLQkqIHNyYy9NYWtlZmlsZS5hbSAobm9pbnN0X0hFQURFUlMpOiBNZXJnZSBpbnRvCi0JKGJpc29uX1NPVVJDRVMpOiB0aGlzLgotCUFkZCBsb2NhdGlvbi5oLgotCSogc3JjL3BhcnNlLWdyYW0ueTogVXNlIGxvY2F0aW9uX3QgaW5zdGVhZCBvZiBCaXNvbidzLgotCSogc3JjL3JlYWRlci5oLCBzcmMvcmVhZGVyLmMgKHByb2xvZ3VlX2F1Z21lbnQsIGVwaWxvZ3VlX3NldCk6Ci0JVXNlIGxvY2F0aW9uX3QgaW5zdGVhZCBvZiBpbnRzLgotCi0yMDAyLTA2LTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS9iaXNvbi5zaW1wbGUsIGRhdGEvYmlzb24uYysrOiBCZSBzdXJlIHRvIHJlc3RvcmUgdGhlCi0JY3VycmVudCAjbGluZSB3aGVuIHJldHVybmluZyB0byB0aGUgc2tlbGV0b24gY29udGVudHMgYWZ0ZXIgaGF2aW5nCi0JZXhwb3NlZCB0aGUgaW5wdXQgZmlsZSdzICNsaW5lLgotCi0yMDAyLTA2LTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3NjYW4tZ3JhbS5sIChTQ19CUkFDRURfQ09ERSk6IERvbid0IHVzZSBgPC4qPicsIGl0IGlzIHRvbwotCWVhZ2VyLgotCSogdGVzdHMvYWN0aW9ucy5hdCAoRXhvdGljIERvbGxhcnMpOiBOZXcuCi0KLTIwMDItMDYtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvc2Nhbi1ncmFtLmwgKFNDX1BST0xPR1VFKTogRG9uJ3QgZWF0IGNoYXJhY3RlcnMgYW1vbmdzdAotCVsnIi9dIHRvbyBlYWdlcmx5LgotCSogdGVzdHMvaW5wdXQuYXQgKFRvcnR1cmluZyB0aGUgU2Nhbm5lcik6IE5ldy4KLQotMjAwMi0wNi0xMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9zY2FuLWdyYW0ubCAoWVlfT0JTX0lOSVQpOiBSZW1vdmUsIHJlcGxhY2Ugd2l0aC4uLgotCVtTQ19DT01NRU5ULFNDX1NUUklORyxTQ19DSEFSQUNURVIsU0NfQlJBQ0VEX0NPREUsU0NfUFJPTE9HVUVdCi0JW1NDX0VQSUxPR1VFXTogT3V0cHV0IHRoZSBxdWFkcmlncmFwaHMgb25seSB3aGVuIG5vdCBpbiBhIGNvbW1lbnQuCi0JKiBzcmMvcmVhZGVyLmgsIHNyYy9zY2FuLWdyYW0ubCAoc2Nhbm5lcl9pbml0aWFsaXplKTogdGhpcy4KLQkqIHNyYy9yZWFkZXIuYyAocmVhZGVyKTogVXNlIGl0LgotCi0yMDAyLTA2LTExICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3NjYW4tZ3JhbS5sIChZWV9PQlNfRklOSVNIKTogRG9uJ3Qgc2V0IHl5bHZhbC4KLQlBZGp1c3QgYWxsIGNhbGxlcnMuCi0JKHNjYW5uZXJfbGFzdF9zdHJpbmdfZnJlZSk6IE5ldy4KLQotMjAwMi0wNi0xMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9zY2FuLWdyYW0ubCAoWVlfSU5JVCwgWVlfR1JPVywgWVlfRklOSVNIKTogUmVuYW1lIGFzLi4uCi0JKFlZX09CU19JTklULCBZWV9PQlNfR1JPVywgWVlfT0JTX0ZJTklTSCk6IHRoZXNlLgotCShsYXN0X3N0cmluZywgWVlfT0JTX0ZSRUUpOiBOZXcuCi0JVXNlIHRoZW0gd2hlbiByZXR1cm5pbmcgYW4gSUQuCi0KLTIwMDItMDYtMTEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JSGF2ZSBCaXNvbiBncmFtbWFycyBwYXJzZWQgYnkgYSBCaXNvbiBncmFtbWFyLgotCi0JKiBzcmMvcmVhZGVyLmMsIHNyYy9yZWFkZXIuaCAocHJvbG9ndWVfYXVnbWVudCk6IE5ldy4KLQkqIHNyYy9yZWFkZXIuYyAoY29weV9kZWZpbml0aW9uKTogUmVtb3ZlLgotCi0JKiBzcmMvcmVhZGVyLmgsIHNyYy9yZWFkZXIuYyAoZ3JhbV9zdGFydF9zeW1ib2xfc2V0LCBwcm9sb2d1ZV9hdWdtZW50KQotCShncmFtbWFyX3N5bWJvbF9hcHBlbmQsIGdyYW1tYXJfcnVsZV9iZWdpbiwgZ3JhbW1hcl9taWRydWxlX2FjdGlvbikKLQkoZ3JhbW1hcl9jdXJyZW50X3J1bGVfcHJlY19zZXQsIGdyYW1tYXJfY3VycmVudF9ydWxlX2NoZWNrKQotCShncmFtbWFyX2N1cnJlbnRfcnVsZV9zeW1ib2xfYXBwZW5kKQotCShncmFtbWFyX2N1cnJlbnRfcnVsZV9hY3Rpb25fYXBwZW5kKTogRXhwb3J0LgotCSogc3JjL3BhcnNlLWdyYW0ueSAoc3ltYm9sX2xpc3RfbmV3LCBzeW1ib2xfbGlzdF9zeW1ib2xfYXBwZW5kXwotCShzeW1ib2xfbGlzdF9hY3Rpb25fYXBwZW5kKTogUmVtb3ZlLgotCUhvb2sgdGhlIHJvdXRpbmVzIGZyb20gcmVhZGVyLgotCSogc3JjL3NjYW4tZ3JhbS5sOiBJbiBJTklUSUFMLCBjaGFyYWN0ZXJzIGFuZCBzdHJpbmdzIGFyZSB0b2tlbnMuCi0JKiBzcmMvc3lzdGVtLmggKEFUVFJJQlVURV9OT1JFVFVSTiwgQVRUUklCVVRFX1VOVVNFRCk6IE5vdy4KLQotCSogc3JjL3JlYWRlci5jIChyZWFkX2RlY2xhcmF0aW9ucyk6IFJlbW92ZSwgdW51c2VkLgotCi0JKiBzcmMvcGFyc2UtZ3JhbS55OiBIYW5kbGUgdGhlIGVwaWxvZ3VlLgotCSogc3JjL3JlYWRlci5oLCBzcmMvcmVhZGVyLmMgKGdyYW1fc3RhcnRfc3ltYm9sX3NldCk6IFJlbmFtZSBhcy4uLgotCShncmFtbWFyX3N0YXJ0X3N5bWJvbF9zZXQpOiB0aGlzLgotCSogc3JjL3NjYW4tZ3JhbS5sOiBCZSBzdXJlIHRvIGBgdXNlJycgeXljb250cm9sIHRvIGtlZXAgR0NDIHF1aWV0LgotCSogc3JjL3JlYWRlci5jIChyZWFkZ3JhbSk6IFJlbW92ZSwgdW51c2VkLgotCShyZWFkZXIpOiBBZGp1c3QgdG8gaW5zZXJ0IGVvZnRva2VuIGFuZCBheGlvbSB3aGVyZSBhcHByb3ByaWF0ZS4KLQotCSogc3JjL3JlYWRlci5jIChjb3B5X2RvbGxhcik6IFJlcGxhY2Ugd2l0aC4uLgotCSogc3JjL3NjYW4tZ3JhbS5oIChoYW5kbGVfZG9sbGFyKTogdGhpcy4KLQkqIHNyYy9wYXJzZS1ncmFtLnk6IFJlbW92ZSBgJXRob25nJy4KLQotCSogc3JjL3JlYWRlci5jIChjb3B5X2F0KTogUmVwbGFjZSB3aXRoLi4uCi0JKiBzcmMvc2Nhbi1ncmFtLmggKGhhbmRsZV9hdCk6IHRoaXMuCi0KLQkqIHNyYy9jb21wbGFpbi5oLCBzcmMvY29tcGxhaW4uYyAod2Fybl9hdCwgY29tcGxhaW5fYXQsIGZhdGFsX2F0KToKLQlOZXcuCi0KLQkqIHNyYy9zY2FuLWdyYW0ubCAoWVlfTElORVMpOiBLZWVwIGxpbmVubyBzeW5jaHJvbml6ZWQgZm9yIHRoZQotCXRpbWUgYmVpbmcuCi0KLQkqIHNyYy9yZWFkZXIuaCwgc3JjL3JlYWRlci5jIChncmFtbWFyX3J1bGVfZW5kKTogTmV3LgotCi0JKiBzcmMvcGFyc2UueSAoY3VycmVudF90eXBlLCBjdXJyZW50X2NsYXNzKTogTmV3LgotCUltcGxlbWVudCBgJW50ZXJtJywgYCV0b2tlbicgc3VwcG9ydC4KLQlNZXJnZSBgJXRlcm0nIGludG8gYCV0b2tlbicuCi0JKHN0cmluZ19hc19pZCk6IE5ldy4KLQkqIHNyYy9zeW10YWIuaCwgc3JjL3N5bXRhYi5jIChzeW1ib2xfbWFrZV9hbGlhcyk6IERvbid0IHBhc3MgdGhlCi0JdHlwZSBuYW1lLgotCi0JKiBzcmMvcGFyc2UtZ3JhbS55OiBCZSBzdXJlIHRvIGhhbmRsZSBwcm9wZXJseSB0aGUgYmVnaW5uaW5nIG9mCi0JcnVsZXMuCi0KLQkqIHNyYy9wYXJzZS1ncmFtLnk6IEhhbmRsZSAldHlwZS4KLQkqIHNyYy9yZWFkZXIuYyAoZ3JhbW1hcl9ydWxlX2VuZCk6IENhbGwgZ3JhbW1hcl9jdXJyZW50X3J1bGVfY2hlY2suCi0KLQkqIHNyYy9wYXJzZS1ncmFtLnk6IE1vcmUgZGlyZWN0aXZlcyBzdXBwb3J0LgotCSogc3JjL29wdGlvbnMuYzogTm8gbG9uZ2VyIGhhbmRsZSBzb3VyY2UgZGlyZWN0aXZlcy4KLQotCSogc3JjL3BhcnNlLWdyYW0ueTogRml4ICVvdXRwdXQuCi0KLQkqIHNyYy9wYXJzZS1ncmFtLnk6IEhhbmRsZSAldW5pb24uCi0JVXNlIHRoZSBwcm9sb2d1ZSBsb2NhdGlvbnMuCi0JKiBzcmMvcmVhZGVyLmMgKHBhcnNlX3VuaW9uX2RlY2wpOiBSZW1vdmUuCi0KLQkqIHNyYy9yZWFkZXIuaCwgc3JjL3JlYWRlci5jIChlcGlsb2d1ZV9zZXQpOiBOZXcuCi0JKiBzcmMvcGFyc2UtZ3JhbS55OiBVc2UgaXQuCi0KLQkqIGRhdGEvYmlzb24uc2ltcGxlLCBkYXRhL2Jpc29uLmMrKzogYjRfc3R5cGUgaXMgbm93IGVpdGhlciBub3QKLQlkZWZpbmVkLCB0aGVuIGRlZmF1bHQgdG8gaW50LCBvciB0byB0aGUgY29udGVudHMgb2YgJXVuaW9uLAotCXdpdGhvdXQgYHVuaW9uJyBpdHNlbGYuCi0JQWRqdXN0LgotCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlX2luaXQpOiBEb24ndCBwcmVkZWZpbmUgYHN0eXBlJy4KLQotCSogc3JjL291dHB1dC5jIChhY3Rpb25zX291dHB1dCk6IERvbid0IG91dHB1dCBicmFjZXMsIGFzIHRoZXkgYXJlCi0JYWxyZWFkeSBoYW5kbGVkIGJ5IHRoZSBzY2FubmVyLgotCi0JKiBzcmMvc2Nhbi1ncmFtLmwgKFNDX0NIQVJBQ1RFUik6IFNldCB0aGUgdXNlcl90b2tlbl9udW1iZXIgb2YKLQljaGFyYWN0ZXJzIHRvIHRoZW1zZWx2ZXMuCi0KLQkqIHRlc3RzL3JlZHVjZS5hdCAoUmVkdWNlZCBBdXRvbWF0b24pOiBFbmQgdGhlIGdyYW1tYXJzIHdpdGggJSUgc28KLQl0aGF0IHRoZSBlcGlsb2d1ZSBoYXMgYSBwcm9wZXIgI2xpbmUuCi0KLQkqIHNyYy9wYXJzZS1ncmFtLnk6IEhhbmRsZSBwcmVjZWRlbmNlL2Fzc29jaWF0aXZpdHkuCi0KLQkqIHNyYy9zeW10YWIuYyAoc3ltYm9sX3ByZWNlZGVuY2Vfc2V0KTogUmVxdWlyZXMgdGhlIHN5bWJvbCB0byBiZQotCWEgdGVybWluYWwuCi0JKiBzcmMvc2Nhbi1ncmFtLmwgKFNDX0JSQUNFRF9DT0RFKTogQ2F0Y2ggc3RyaW5ncyBhbmQgY2hhcmFjdGVycy4KLQkqIHRlc3RzL2NhbGMuYXQ6IERvIG5vdCB1c2UgYCV0b2tlbiAiZm9vIicgYXMgaXQgbWFrZXMgbm90IHNlbnNlCi0JYXQgYWxsIHRvIGRlZmluZSB0ZXJtaW5hbHMgdGhhdCBjYW5ub3QgYmUgZW1pdHRlZC4KLQotCSogc3JjL3NjYW4tZ3JhbS5sOiBFc2NhcGUgTTQgY2hhcmFjdGVycy4KLQotCSogc3JjL3NjYW4tZ3JhbS5sOiBXb3JraW5nIHByb3Blcmx5IHdpdGggZXNjYXBlcyBpbiB1c2VyCi0Jc3RyaW5ncy9jaGFyYWN0ZXJzLgotCi0JKiB0ZXN0cy90b3J0dXJlLmF0IChBVF9EQVRBX1RSSUFOR1VMQVJfR1JBTU1BUikKLQkoQVRfREFUQV9IT1JJWk9OVEFMX0dSQU1NQVIpOiBSZXNwZWN0IHRoZSBgJXRva2VuIElEIE5VTSBTVFJJTkcnCi0JZ3JhbW1hci4KLQlVc2UgbW9yZSBtb2Rlc3Qgc2l6ZXMsIGFzIGZvciB0aGUgdGltZSBiZWluZyB0aGUgcGFyc2VyIGRvZXMgbm90Ci0JcmVsZWFzZSBtZW1vcnksIGFuZCB0aGVyZWZvcmUgdGhlIHByb2Nlc3Mgc3dhbGxvd3MgYSBodWdlIGFtb3VudAotCW9mIG1lbW9yeS4KLQotCSogdGVzdHMvdG9ydHVyZS5hdCAoQVRfREFUQV9MT09LQUhFQURTX0dSQU1NQVIpOiBBZGp1c3QgdG8gdGhlCi0Jc3RyaWN0ZXIgJXRva2VuIGdyYW1tYXIuCi0KLQkqIHNyYy9zeW10YWIuaCAoYXNzb2NpYXRpdml0eSk6IEFkZCBgdW5kZWZfYXNzb2MnLgotCShzeW1ib2xfcHJlY2VkZW5jZV9zZXQpOiBEbyBub3RoaW5nIHdoZW4gcGFzc2VkIGFuIHVuZGVmX2Fzc29jLgotCSogc3JjL3N5bXRhYi5jIChzeW1ib2xfY2hlY2tfYWxpYXNfY29uc2lzdGVuY2UpOiBBZGp1c3QuCi0KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKEludmFsaWQgJWRpcmVjdGl2ZSk6IFJlbW92ZSwgYXMgaXQgaXMgbm93Ci0JbWVhbmluZ2xlc3MuCi0JKEludmFsaWQgaW5wdXRzKTogQWRqdXN0IHRvIHRoZSBuZXcgZXJyb3IgbWVzc2FnZXMuCi0JKFRva2VuIGRlZmluaXRpb25zKTogVGhlIG5ldyBncmFtbWFyIGRvZXNuJ3QgYWxsb3cgdG9vIG1hbnkKLQllY2NlbnRyaWNpdGllcy4KLQotCSogc3JjL2xleC5oLCBzcmMvbGV4LmM6IFJlbW92ZS4KLQkqIHNyYy9yZWFkZXIuYyAobGFzdHByZWMsIHNraXBfdG9fY2hhciwgcmVhZF9zaWduZWRfaW50ZWdlcikKLQkoY29weV9jaGFyYWN0ZXIsIGNvcHlfc3RyaW5nMiwgY29weV9zdHJpbmcsIGNvcHlfaWRlbnRpZmllcikKLQkoY29weV9jb21tZW50LCBwYXJzZV90b2tlbl9kZWNsLCBwYXJzZV90eXBlX2RlY2wsIHBhcnNlX2Fzc29jX2RlY2wpCi0JKHBhcnNlX211c2NsZV9kZWNsLCBwYXJzZV9kcXVvdGVkX3BhcmFtLCBwYXJzZV9za2VsX2RlY2wpCi0JKHBhcnNlX2FjdGlvbik6IFJlbW92ZS4KLQkqIHBvL1BPVEZJTEVTLmluOiBBZGp1c3QuCi0KLTIwMDItMDYtMTEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvcmVhZGVyLmMgKHBhcnNlX2FjdGlvbik6IERvbid0IHN0b3JlIGRpcmVjdGx5IGludG8gdGhlCi0JcnVsZSdzIGFjdGlvbiBtZW1iZXI6IHJldHVybiB0aGUgYWN0aW9uIGFzIGEgc3RyaW5nLgotCURvbid0IHJlcXVpcmUgYHJ1bGVfbGVuZ3RoJyBhcyBhbiBhcmd1bWVudDogY29tcHV0ZSBpdC4KLQkoZ3JhbW1hcl9jdXJyZW50X3J1bGVfc3ltYm9sX2FwcGVuZCkKLQkoZ3JhbW1hcl9jdXJyZW50X3J1bGVfYWN0aW9uX2FwcGVuZCk6IE5ldywgZXZlZCBvdXQgZnJvbQotCShyZWFkZ3JhbSk6IGhlcmUuCi0JUmVtb3ZlIGBhY3Rpb25fZmxhZycsIGBydWxlbGVuZ3RoJywgdW51c2VkIG5vdy4KLQotMjAwMi0wNi0xMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9yZWFkZXIuYyAoZ3JhbW1hcl9jdXJyZW50X3J1bGVfcHJlY19zZXQpLgotCShncmFtbWFyX2N1cnJlbnRfcnVsZV9jaGVjayk6IE5ldywgZXZlZCBvdXQgZnJvbS4uLgotCShyZWFkZ3JhbSk6IGhlcmUuCi0JUmVtb3ZlIGB4YWN0aW9uJywgYGZpcnN0X3Jocyc6IHVzZWxlc3MuCi0JKiB0ZXN0cy9pbnB1dC5hdCAoVHlwZSBjbGFzaGVzKTogTmV3LgotCSogdGVzdHMvZXhpc3RpbmcuYXQgKEdOVSBDaW0gR3JhbW1hcik6IEFkanVzdC4KLQotMjAwMi0wNi0xMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9yZWFkZXIuYyAoZ3JhbW1hcl9taWRydWxlX2FjdGlvbik6IE5ldywgRXZlZCBvdXQgZnJvbQotCShyZWFkZ3JhbSk6IGhlcmUuCi0KLTIwMDItMDYtMTEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvcmVhZGVyLmMgKGdyYW1tYXJfcnVsZV9iZWdpbiwgcHJldmlvdXNfcnVsZSwgY3VycmVudF9ydWxlKToKLQlOZXcuCi0JKHJlYWRncmFtKTogVXNlIHRoZW0gYXMgcmVwbGFjZW1lbnQgb2YgaW5saW5lZCBjb2RlLCBjcnVsZSBhbmQKLQljcnVsZTEuCi0KLTIwMDItMDYtMTEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvcmVhZGVyLmMgKGdyYW1tYXJfZW5kLCBncmFtbWFyX3N5bWJvbF9hcHBlbmQpOiBOZXcuCi0JKHJlYWRncmFtKTogVXNlIHRoZW0uCi0JTWFrZSB0aGUgdXNlIG9mIGBwJyBhcyBsb2NhbCBhcyBwb3NzaWJsZS4KLQotMjAwMi0wNi0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlHQ0oncyBwYXJzZXIgcmVxdWlyZXMgdGhlIHRva2VucyB0byBiZSBkZWZpbmVkIGJlZm9yZSB0aGUgcHJvbG9ndWUuCi0KLQkqIGRhdGEvYmlzb24uc2ltcGxlOiBPdXRwdXQgdGhlIHRva2VuIGRlZmluaXRpb24gYmVmb3JlIHRoZSB1c2VyJ3MKLQlwcm9sb2d1ZS4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKEJyYWNlcyBwYXJzaW5nLCBEdXBsaWNhdGUgc3RyaW5nKQotCShNaXhpbmcgJXRva2VuIHN0eWxlcyk6IENoZWNrIHRoZSBvdXRwdXQgZnJvbSBiaXNvbi4KLQkoRWFybHkgdG9rZW4gZGVmaW5pdGlvbnMpOiBOZXcuCi0KLTIwMDItMDYtMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvc3ltdGFiLmMgKHN5bWJvbF91c2VyX3Rva2VuX251bWJlcl9zZXQpOiBEb24ndCBjb21wbGFpbiB3aGVuCi0JYXNzaWduaW5nIHR3aWNlIHRoZSBzYW1lIHVzZXIgbnVtYmVyIHRvIGEgdG9rZW4sIHNvIHRoYXQgd2UgY2FuCi0JdXNlIGl0IGluLi4uCi0JKiBzcmMvbGV4LmMgKGxleCk6IGhlcmUuCi0JQWxzbyB1c2UgYHN5bWJvbF9jbGFzc19zZXQnIGluc3RlYWQgb2YgaGFuZCB3cml0dGVuIGNvZGUuCi0JKiBzcmMvcmVhZGVyLmMgKHBhcnNlX2Fzc29jX2RlY2wpOiBMaWtld2lzZS4KLQotMjAwMi0wNi0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9zeW10YWIuYywgc3JjL3N5bXRhYi5jIChzeW1ib2xfY2xhc3Nfc2V0KQotCShzeW1ib2xfdXNlcl90b2tlbl9udW1iZXJfc2V0KTogTmV3LgotCSogc3JjL3JlYWRlci5jIChwYXJzZV90b2tlbl9kZWNsKTogVXNlIHRoZW0uCi0JVXNlIGEgc3dpdGNoIGluc3RlYWQgb2YgaWZzLgotCVVzZSBhIHNpbmdsZSBhcmd1bWVudC4KLQotMjAwMi0wNi0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlSZW1vdmUgYCV0aG9uZycgc3VwcG9ydCBhcyBpdCBpcyB1bmRvY3VtZW50ZWQsIHVudXNlZCwgZHVwbGljYXRlcwotCWAldG9rZW4ncyBqb2IsIGFuZCBjcmVhdGVzIHVzZWxlc3MgZS1tYWlsIHRyYWZmaWMgd2l0aCBwZW9wbGUgd2hvCi0Jd2FudCB0byBrbm93IHdoYXQgaXQgaXMsIHdoeSBpdCBpcyB1bmRvY3VtZW50ZWQsIHVudXNlZCwgYW5kCi0JZHVwbGljYXRlcyBgJXRva2VuJ3Mgam9iLgotCi0JKiBzcmMvcmVhZGVyLmMgKHBhcnNlX3Rob25nX2RlY2wpOiBSZW1vdmUuCi0JKiBzcmMvb3B0aW9ucy5jIChvcHRpb25fdGFibGUpOiBSZW1vdmUgInRob25nIi4KLQkqIHNyYy9sZXguaCAodG9rX3Rob25nKTogUmVtb3ZlLgotCi0yMDAyLTA2LTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3N5bXRhYi5jLCBzcmMvc3ltdGFiLmMgKHN5bWJvbF90eXBlX3NldCkKLQkoc3ltYm9sX3ByZWNlZGVuY2Vfc2V0KTogTmV3LgotCSogc3JjL3JlYWRlci5jIChwYXJzZV90eXBlX2RlY2wsIHBhcnNlX2Fzc29jX2RlY2wpOiBVc2UgdGhlbS4KLQkodmFsdWVfY29tcG9uZW50c191c2VkKTogUmVtb3ZlLCB1bnVzZWQuCi0KLTIwMDItMDYtMDkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JTW92ZSBzeW1ib2xzIGhhbmRsaW5nIGNvZGUgb3V0IG9mIHRoZSByZWFkZXIuCi0KLQkqIHNyYy9yZWFkZXIuaCwgc3JjL3JlYWRlci5jIChlcnJ0b2tlbiwgdW5kZWZ0b2tlbiwgZW9mdG9rZW4pCi0JKGF4aW9tKTogTW92ZSB0by4uLgotCSogc3JjL3N5bXRhYi5oLCBzcmMvc3ltdGFiLmM6IGhlcmUuCi0KLQkqIHNyYy9ncmFtLmMgKHN0YXJ0X3N5bWJvbCk6IFJlbW92ZTogdXNlIHN0YXJ0c3ltYm9sLT5udW1iZXIuCi0JKiBzcmMvcmVhZGVyLmMgKHN0YXJ0dmFsKTogUmVuYW1lIGFzLi4uCi0JKiBzcmMvc3ltdGFiLmgsIHNyYy9zeW10YWIuYyAoc3RhcnRzeW1ib2wpOiB0aGlzLgotCSogc3JjL3JlYWRlci5jOiBBZGp1c3QuCi0KLQkqIHNyYy9yZWFkZXIuYyAoc3ltYm9sX2NoZWNrX2RlZmluZWQsIHN5bWJvbF9tYWtlX2FsaWFzKQotCShzeW1ib2xfY2hlY2tfYWxpYXNfY29uc2lzdGVuY2UsIHN5bWJvbF9wYWNrLCBzeW1ib2xfdHJhbnNsYXRpb24pCi0JKHRva2VuX3RyYW5zbGF0aW9uc19pbml0KQotCU1vdmUgdG8uLi4KLQkqIHNyYy9zeW10YWIuYzogaGVyZS4KLQkqIHNyYy9yZWFkZXIuYyAocGFja3N5bWJvbHMpOiBNb3ZlIHRvLi4uCi0JKiBzcmMvc3ltdGFiLmgsIHNyYy9zeW10YWIuYyAoc3ltYm9sc19wYWNrKTogaGVyZS4KLQkqIHNyYy9zeW10YWIuaCwgc3JjL3N5bXRhYi5jIChzeW1ib2xfbWFrZV9hbGlhcyk6IFRha2VzIFNZTVZBTCBhcwotCWFyZ3VtZW50LgotCi0yMDAyLTA2LTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlX2luc2VydCwgbXVzY2xlX2ZpbmQpOiBEZWNsYXJhdGlvbnMsCi0JdGhlbiBzdGF0ZW1lbnRzLgotCi0yMDAyLTA2LTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlX2ZpbmQsIG11c2NsZV9pbnNlcnQpOiBEb24ndCBpbml0aWFsaXplCi0Jc3RydWN0cyB3aXRoIG5vbiBsaXRlcmFscy4KLQkqIHNyYy9zY2FuLXNrZWwubDogbmV2ZXItaW50ZXJhY3RpdmUuCi0JKiBzcmMvY29uZmxpY3RzLmMgKGVudW0gY29uZmxpY3RfcmVzb2x1dGlvbl9lKTogTm8gdHJhaWxpbmcKLQljb21tYS4KLQkqIHNyYy9nZXRhcmdzLmMgKHVzYWdlKTogU3BsaXQgbG9uZyBsaXRlcmFsIHN0cmluZ3MuCi0JUmVwb3J0ZWQgYnkgSGFucyBBYmVyZy4KLQotMjAwMi0wNS0yOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvYmlzb24uYysrOiBVc2UgQysrIG9zdHJlYW1zLgotCShjZGVidWdfKTogTmV3IG1lbWJlci4KLQotMjAwMi0wNS0yOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3NrZWxldG9uKTogQmUgc3VyZSB0byBhbGxvY2F0ZSBlbm91Z2ggcm9vbQotCWZvciBgLycgX2FuZF8gZm9yIGBcMCcgaW4gZnVsbF9za2VsZXRvbi4KLQotMjAwMi0wNS0yOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvYmlzb24uYysrOiBDYXRjaCB1cCB3aXRoIGJpc29uLnNpbXBsZToKLQkyMDAyLTA1LTI0ICBQYXVsIEhpbGZpbmdlciAgPEhpbGZpbmdlckBDUy5CZXJrZWxleS5FRFU+Ci0JYW5kIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPjogYGVycm9yJyBoYW5kaW5nLgotCTIwMDItMDUtMjYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPjogc3Rvc18sIHRva2VuX251bWJlcl8sCi0JYW5kIHBvcHBpbmcgdHJhY2VzLgotCi0yMDAyLTA1LTI3ICBQYXVsIEhpbGZpbmdlciAgPEhpbGZpbmdlckBDUy5CZXJrZWxleS5FRFU+Ci0KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3NrZWxldG9uKTogUHV0IGFuIGV4cGxpY2l0IHBhdGggaW4gZnJvbnQgb2YKLQl0aGUgc2tlbGV0b24gZmlsZSBuYW1lLCByYXRoZXIgdGhhbiByZWx5aW5nIG9uIHRoZSAtSSBkaXJlY3RvcnksCi0JdG8gcGFydGlhbGx5IGFsbGV2aWF0ZSBlZmZlY3RzIG9mIGhhdmluZyBhIHNrZWxldG9uIGZpbGUgbHlpbmcgYXJvdW5kCi0JaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgotCi0yMDAyLTA1LTI3ICBQYXVsIEhpbGZpbmdlciAgPEhpbGZpbmdlckBDUy5CZXJrZWxleS5FRFU+Ci0KLQkqIHNyYy9jb25mbGljdHMuYyAobG9nX3Jlc29sdXRpb24pOiBDb3JyZWN0IHR5cG86Ci0Jb2JzdGFja19wcmludGYgc2hvdWxkIGJlIG9ic3RhY2tfZmdyb3cxLgotCi0yMDAyLTA1LTI2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3N0YXRlLmggKHN0YXRlX3QpOiBgc29sdmVkX2NvbmZsaWN0cycgaXMgYSBuZXcgbWVtYmVyLgotCSogc3JjL0xSMC5jIChuZXdfc3RhdGUpOiBTZXQgaXQgdG8gMC4KLQkqIHNyYy9jb25mbGljdHMuaCwgc3JjL2NvbmZsaWN0cy5jIChwcmludF9jb25mbGljdHMpCi0JKGZyZWVfY29uZmxpY3RzLCBzb2x2ZV9jb25mbGljdHMpOiBSZW5hbWUgYXMuLi4KLQkoY29uZmxpY3RzX3ByaW50LCBjb25mbGljdHNfZnJlZSwgY29uZmxpY3RzX3NvbHZlKTogdGhlc2UuCi0JQWRqdXN0IGNhbGxlcnMuCi0JKiBzcmMvY29uZmxpY3RzLmMgKGVudW0gY29uZmxpY3RfcmVzb2x1dGlvbl9lKQotCShzb2x2ZWRfY29uZmxpY3RzX29ic3RhY2spOiBOZXcsIHVzZWQgYnkuLi4KLQkobG9nX3Jlc29sdXRpb24pOiB0aGlzLgotCUFkanVzdCB0byBhdHRhY2ggdGhlIGNvbmZsaWN0IHJlc29sdXRpb24gdG8gZWFjaCBzdGF0ZS4KLQlDb21wbGV0ZSB0aGUgZGVzY3JpcHRpb24gd2l0aCB0aGUgcHJlY2VkZW5jZS9hc3NvY2lhdGl2aXR5Ci0JaW5mb3JtYXRpb24uCi0JKHJlc29sdmVfc3JfY29uZmxpY3QpOiBBZGp1c3QuCi0JKiBzcmMvcHJpbnQuYyAocHJpbnRfc3RhdGUpOiBPdXRwdXQgaXRzIHNvbHZlZF9jb25mbGljdHMuCi0JKiB0ZXN0cy9jb25mbGljdHMuYXQgKFVucmVzb2x2ZWQgU1IgQ29uZmxpY3RzKQotCShTb2x2ZWQgU1IgQ29uZmxpY3RzKTogRXhlcmNpc2UgLS1yZXBvcnQ9YWxsLgotCi0yMDAyLTA1LTI2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL0xSMC5jLCBzcmMvZGVyaXZlcy5jLCBzcmMvZ3JhbS5jLCBzcmMvZ3JhbS5oLCBzcmMvbGFsci5jLAotCSogc3JjL251bGxhYmxlLmMsIHNyYy9vdXRwdXQuYywgc3JjL3ByaW50LmMsIHNyYy9wcmludF9ncmFwaC5jLAotCSogc3JjL3JlYWRlci5jLCBzcmMvcmVkdWNlLmMsIHNyYy9zdGF0ZS5oLCBzcmMvc3ltdGFiLmgKLQkodG9rZW5fbnVtYmVyX3QsIGl0ZW1fbnVtYmVyX2FzX3Rva2VuX251bWJlcikKLQkodG9rZW5fbnVtYmVyX2FzX2l0ZW1fbnVtYmVyLCBtdXNjbGVfaW5zZXJ0X3Rva2VuX251bWJlcl90YWJsZSk6Ci0JUmVuYW1lIGFzLi4uCi0JKHN5bWJvbF9udW1iZXJfdCwgaXRlbV9udW1iZXJfYXNfc3ltYm9sX251bWJlcikKLQkoc3ltYm9sX251bWJlcl9hc19pdGVtX251bWJlciwgbXVzY2xlX2luc2VydF9zeW1ib2xfbnVtYmVyX3RhYmxlKToKLQl0aGVzZSwgc2luY2UgaXQgaXMgbW9yZSBhcHByb3ByaWF0ZS4KLQotMjAwMi0wNS0yNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHRlc3RzL2NhbGMuYXQgKEFUX0NIRUNLX0NBTEMpOiBBZGp1c3Q6IHRoZXJlIGFyZSBub3cgYWRkaXRpb25hbAotCWBFcnJvcjonIGxpbmVzLgotCSogZGF0YS9iaXNvbi5zaW1wbGUgKHl5c3RvcykgW1lZREVCVUddOiBOZXcuCi0JKHl5cGFyc2UpIFtZWURFQlVHXTogRGlzcGxheSB0aGUgc3ltYm9scyB3aGljaCBhcmUgcG9wcGVkIGR1cmluZwotCWVycm9yIHJlY292ZXJ5LgotCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoV2ViMmMgQWN0aW9ucyk6IEFkanVzdDogeXlzdG9zIGlzIG91dHB1dCBub3cuCi0KLTIwMDItMDUtMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoRGVidWdnaW5nKTogU3BsaXQgaW50by4uLgotCShUcmFjaW5nKTogdGhpcyBuZXcgc2VjdGlvbiwgaXRzIGZvcm1lciBjb250ZW50cywgYW5kLi4uCi0JKFVuZGVyc3RhbmRpbmcpOiB0aGlzIG5ldyBzZWN0aW9uLgotCSogc3JjL2dldGFyZ3MuaCwgc3JjL2dldGFyZ3MuYyAodmVyYm9zZV9mbGFnKTogUmVtb3ZlLCByZXBsYWNlZAotCWJ5Li4uCi0JKHJlcG9ydF9mbGFnKTogdGhpcy4KLQlBZGp1c3QgYWxsIGRlcGVuZGVuY2llcy4KLQkocmVwb3J0X2FyZ3MsIHJlcG9ydF90eXBlcywgcmVwb3J0X2FyZ21hdGNoKTogTmV3LgotCSh1c2FnZSwgZ2V0YXJncyk6IFJlcG9ydC9zdXBwb3J0IC1yLCAtLXJlcG9ydC4KLQkqIHNyYy9vcHRpb25zLmgKLQkoc3RydWN0IG9wdGlvbl90YWJsZV9zdHJ1Y3QpOiBSZW5hbWUgYXMuLiwKLQkoc3RydWN0IG9wdGlvbl90YWJsZV9zKTogdGhpcy4KLQlSZW5hbWUgdGhlIGBzZXRfZmxhZycgbWVtYmVyIHRvIGBmbGFnJyB0byBtYXRjaCB3aXRoIGdldG9wdF9sb25nJ3MKLQlzdHJ1Y3QuCi0JKiBzcmMvb3B0aW9ucy5jIChvcHRpb25fdGFibGUpOiBTcGxpdCB2ZXJib3NlIGludG8gYW4gZW50cnkgZm9yCi0JJXZlcmJvc2UsIGFuZCBhbm90aGVyIGZvciAtLXZlcmJvc2UuCi0JU3VwcG9ydCAtLXJlcG9ydC8tciwgc28gcmVtb3ZlIC1yIGZyb20gdGhlIG9ic29sZXRlIC0tcmF3LgotCSogc3JjL3ByaW50LmM6IEF0dGFjaCBmdWxsIGl0ZW0gc2V0cyBhbmQgbG9va2FoZWFkcyByZXBvcnRzIHRvCi0JcmVwb3J0X2ZsYWcgaW5zdGVhZCBvZiB0cmFjZV9mbGFnLgotCSogbGliL2FyZ21hdGNoLmgsIGxpYi9hcmdtYXRjaC5jOiBOZXcsIGZyb20gRmlsZXV0aWxzIDQuMS4KLQotMjAwMi0wNS0yNCAgUGF1bCBIaWxmaW5nZXIgIDxIaWxmaW5nZXJAQ1MuQmVya2VsZXkuRURVPgotCWFuZCBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogZGF0YS9iaXNvbi5zaW1wbGUgKHl5cGFyc2UpOiBDb3JyZWN0IGVycm9yIGhhbmRsaW5nIHRvIGNvbmZvcm0gdG8KLQlQT1NJWCBhbmQgeWFjYy4gIFNwZWNpZmljYWxseSwgYWZ0ZXIgc3ludGF4IGVycm9yIGlzIGRpc2NvdmVyZWQsCi0JZG8gbm90IHJlZHVjZSBmdXJ0aGVyIGJlZm9yZSBzaGlmdGluZyB0aGUgZXJyb3IgdG9rZW4uCi0JQ2xlYW4gdXAgdGhlIGNvZGUgYSBiaXQgYnkgcmVtb3ZpbmcgdGhlIGxhYmVscyB5eWVycmRlZmF1bHQsCi0JeXllcnJoYW5kbGUsIHl5ZXJycG9wLgotCSogTkVXUzogRG9jdW1lbnQgdGhlIGFib3ZlLgotCi0yMDAyLTA1LTIwICBQYXVsIEhpbGZpbmdlciAgPEhpbGZpbmdlckBDUy5CZXJrZWxleS5FRFU+Ci0KLQkqIGRhdGEvYmlzb24uc2ltcGxlICh5eXIxKTogRG9uJ3QgdXNlIHl5X3Rva2VuX251bWJlcl90eXBlIGFzIGVsZW1lbnQKLQl0eXBlOyBpdCBpc24ndCBhbHdheXMgYmlnIGVub3VnaCwgc2luY2UgaXQgZG9lc24ndCBuZWNlc3NhcmlseQotCWluY2x1ZGUgbm9uLXRlcm1pbmFscy4KLQkoeXl0cmFuc2xhdGUpOiBFeHBhbmQgZGVmaW5pdGlvbiBvZiB5eV90b2tlbl9udW1iZXJfdHlwZSwgc28gdGhhdAotCXRoZSBsYXR0ZXIgY2FuIGJlIHJlbW92ZWQuCi0JKHl5X3Rva2VuX251bWJlcl90eXBlKTogUmVtb3ZlLCBvbmx5IG9uZSB1c2UuCi0JKiBkYXRhL2Jpc29uLmMrKyAocjFfKTogUGFyYWxsZWwgY2hhbmdlIHRvIHl5cjEgaW4gYmlzb24uc2ltcGxlLS0tCi0JZG9uJ3QgdXNlIFRva2VuTnVtYmVyVHlwZSBhcyBlbGVtZW50IHR5cGUuCi0KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQ6IE1vZGlmeSBleHBlY3RlZCBvdXRwdXQgdG8gYWdyZWUgd2l0aCBjaGFuZ2UKLQl0byB5eXIxIGFuZCB5eXRyYW5zbGF0ZS4KLQotMjAwMi0wNS0xMyAgRmxvcmlhbiBLcm9obSAgPGZsb3JpYW5AZWRhbWFpbC5maXNoa2lsbC5pYm0uY29tPgotCi0JKiBzcmMvcmVhZGVyLmMgKHBhcnNlX2FjdGlvbik6IFVzZSBjb3B5X2NoYXJhY3RlciBpbnN0ZWFkIG9mCi0Jb2JzdGFja18xZ3Jvdy4KLQotMjAwMi0wNS0xMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFRva2VuIGRlZmluaXRpb25zKTogUHJvdG90eXBlIHl5bGV4IGFuZAotCXl5ZXJyb3IuCi0KLTIwMDItMDUtMTIgIFBhdWwgSGlsZmluZ2VyICA8SGlsZmluZ2VyQENTLkJlcmtlbGV5LkVEVT4KLQotCSogc3JjL3NjYW4tc2tlbC5sOiBDb3JyZWN0IG9mZi1ieS1vbmUgZXJyb3IgaW4gaGFuZGxpbmcgb2YgX19vbGluZV9fLgotCSogZGF0YS9iaXNvbi5zaW1wbGUgKGI0X3NpbnRfdHlwZSwgYjRfdWludF90eXBlKTogQ29ycmVjdCB0byByZWZsZWN0Ci0JMzItYml0IGFyaXRobWV0aWMuCi0JKiBkYXRhL2Jpc29uLmMrKyAoYjRfc2ludF90eXBlLCBiNF91aW50X3R5cGUpOiBEaXR0by4KLQotMjAwMi0wNS0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHRlc3RzL3N5bmNsaW5lcy5hdDogQmUgc3VyZSB0byBwcm90b3R5cGUgeXlsZXggYW5kIHl5ZXJyb3IgdG8KLQlhdm9pZCBHQ0Mgd2FybmluZ3MuCi0KLTIwMDItMDUtMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JS2lsbCBHQ0Mgd2FybmluZ3MuCi0KLQkqIHNyYy9yZWR1Y2UuYyAobm9udGVybWluYWxzX3JlZHVjZSk6IERvbid0IGxvb3Agb3ZlciBSSVRFTTogbG9vcAotCW92ZXIgdGhlIFJIUyBvZiBlYWNoIHJ1bGUuCi0JKiBzcmMvZ3JhbS5oLCBzcmMvZ3JhbS5jIChucml0ZW1zKTogSXMgYHVuc2lnbmVkIGludCcsIG5vdCBpbnQuCi0JKiBzcmMvc3RhdGUuaCAoc3RhdGVfdCk6IE1lbWJlciBgbml0ZW1zJyBpcyB1bnNpZ25lZCBzaG9ydC4KLQkqIHNyYy9MUjAuYyAoZ2V0X3N0YXRlKTogQWRqdXN0LgotCSogc3JjL3JlYWRlci5jIChwYWNrZ3JhbSk6IExpa2V3aXNlLgotCSogc3JjL291dHB1dC5jIChHRU5FUkFURV9NVVNDTEVfSU5TRVJUX1RBQkxFKTogYG1heCcgaXMgb2YgdHlwZQotCWBUeXBlJy4KLQkobXVzY2xlX2luc2VydF9pbnRfdGFibGUpOiBSZW1vdmUsIHVudXNlZC4KLQkocHJlcGFyZV9ydWxlcyk6IFJlbW92ZSBgbWF4Jy4KLQotMjAwMi0wNS0wNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9jbG9zdXJlLmMgKHByaW50X2ZpcnN0cyk6IERpc3BsYXkgb2YgdGhlIHN5bWJvbCB0YWdzLgotCShiaXRtYXRyaXhfcHJpbnQpOiBNb3ZlIHRvLi4uCi0JKiBsaWIvYml0c2V0di1wcmludC5oLCBsaWIvYml0c2V0di1wcmludC5jIChiaXRzZXR2X21hdHJpeF9kdW1wKToKLQloZXJlLgotCSogdGVzdHMvc2V0cy5hdCAoTnVsbGFibGUsIEJyb2tlbiBDbG9zdXJlLCBGaXJzdHMpOiBBZGp1c3QuCi0KLTIwMDItMDUtMDYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvbXVzY2xlX3RhYi5jIChtdXNjbGVfbTRfb3V0cHV0KTogTXVzdCByZXR1cm4gVFJVRSBmb3IKLQloYXNoX2RvX2Zvcl9lYWNoLgotCi0yMDAyLTA1LTA2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL0xSMC5jIChuZXdfc3RhdGUsIGdldF9zdGF0ZSk6IEluc3RlYWQgb2YgdXNpbmcgdGhlIGdsb2JhbAotCWBrZXJuZWxfc2l6ZScgYW5kIGBrZXJuZWxfYmFzZScsIGhhdmUgdHdvIG5ldyBhcmd1bWVudHM6Ci0JYGNvcmVfc2l6ZScgYW5kIGBjb3JlJy4KLQlBZGp1c3QgY2FsbGVycy4KLQotMjAwMi0wNS0wNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9yZWFkZXIuYyAocGFja2dyYW0pOiBObyBsb25nZXIgZW5kIGByaXRlbScgd2l0aCBhIDAKLQlzZW50aW5lbDogaXQgaXMgbm90IHVzZWQuCi0KLTIwMDItMDUtMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JTmV3IGV4cGVyaW1lbnRhbCBmZWF0dXJlOiBkaXNwbGF5IHRoZSBsb29rYWhlYWRzIGluIHRoZSByZXBvcnQgYW5kCi0JZ3JhcGguCi0KLQkqIHNyYy9wcmludCAocHJpbnRfY29yZSk6IFdoZW4gLS10cmFjZS1mbGFnLCBkaXNwbGF5IHRoZSBydWxlcwotCWxvb2thaGVhZHMuCi0JKiBzcmMvcHJpbnRfZ3JhcGguYyAocHJpbnRfY29yZSk6IExpa2V3aXNlLgotCVN3YXAgdGhlIGFyZ3VtZW50cy4KLQlBZGp1c3QgY2FsbGVyLgotCi0yMDAyLTA1LTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogdGVzdHMvdG9ydHVyZS5hdCAoTWFueSBsb29rYWhlYWRzKTogTmV3IHRlc3QuCi0KLTIwMDItMDUtMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvb3V0cHV0LmMgKEdFTkVSQVRFX09VVFBVVF9UQUJMRSk6IFJlcGxhY2Ugd2l0aC4uLgotCShHRU5FUkFURV9NVVNDTEVfSU5TRVJUX1RBQkxFKTogdGhpcy4KLQkob3V0cHV0X2ludF90YWJsZSwgb3V0cHV0X3Vuc2lnbmVkX2ludF90YWJsZSwgb3V0cHV0X3Nob3J0X3RhYmxlKQotCShvdXRwdXRfdG9rZW5fbnVtYmVyX3RhYmxlLCBvdXRwdXRfaXRlbV9udW1iZXJfdGFibGUpOiBSZXBsYWNlIHdpdGguLi4KLQkobXVzY2xlX2luc2VydF9pbnRfdGFibGUsIG11c2NsZV9pbnNlcnRfdW5zaWduZWRfaW50X3RhYmxlKQotCShtdXNjbGVfaW5zZXJ0X3Nob3J0X3RhYmxlLCBtdXNjbGVfaW5zZXJ0X3Rva2VuX251bWJlcl90YWJsZSkKLQkobXVzY2xlX2luc2VydF9pdGVtX251bWJlcl90YWJsZSk6IHRoZXNlLgotCUFkanVzdCBhbGwgY2FsbGVycy4KLQkocHJlcGFyZV90b2tlbnMpOiBEb24ndCBmcmVlIGB0cmFuc2xhdGlvbnMnLCBzaW5jZS4uLgotCSogc3JjL3JlYWRlci5oLCBzcmMvcmVhZGVyLmMgKGdyYW1tYXJfZnJlZSk6IGRvIGl0LgotCU1vdmUgdG8uLi4KLQkqIHNyYy9ncmFtLmgsIHNyYy9ncmFtLmMgKGdyYW1tYXJfZnJlZSk6IGhlcmUuCi0JKiBkYXRhL2Jpc29uLnNpbXBsZSwgZGF0YS9iaXNvbi5jKys6IGI0X3Rva2VuX251bWJlcl9tYXggaXMgbm93Ci0JYjRfdHJhbnNsYXRlX21heC4KLQotMjAwMi0wNS0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3Vuc2lnbmVkX2ludF90YWJsZSk6IE5ldy4KLQkocHJlcGFyZV9ydWxlcyk6IGBpJyBpcyB1bnNpZ25lZC4KLQlgcHJocycsIGBybGluZScsIGByMicgYXJlIHVuc2lnbmVkIGludC4KLQlSZW5hbWUgbXVzY2xlIGByaHNfbnVtYmVyX21heCcgYXMgYHJoc19tYXgnLgotCU91dHB1dCBtdXNjbGVzIGBwcmhzX21heCcsIGBybGluZV9tYXgnLCBhbmQgYHIyX21heCcuCi0JRnJlZSBybGluZSBhbmQgcjEuCi0JKiBkYXRhL2Jpc29uLnNpbXBsZSwgZGF0YS9iaXNvbi5jKys6IEFkanVzdCB0byB1c2UgdGhlc2UgbXVzY2xlcwotCXRvIGNvbXB1dGUgdHlwZXMgaW5zdGVhZCBvZiBjb25zdGFudCB0eXBlcy4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFdlYjJjIEFjdGlvbnMpOiBBZGp1c3QuCi0KLTIwMDItMDUtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvc3ltdGFiLmggKFNBTElBUywgU1VOREVGKTogUmVuYW1lIGFzLi4uCi0JKFVTRVJfTlVNQkVSX0FMSUFTLCBVU0VSX05VTUJFUl9VTkRFRklORUQpOiB0aGVzZS4KLQlBZGp1c3QgZGVwZW5kZW5jaWVzLgotCSogc3JjL291dHB1dC5jICh0b2tlbl9kZWZpbml0aW9uc19vdXRwdXQpOiBCZSBzdXJlIG5vdCB0byBvdXRwdXQgYQotCWAjZGVmaW5lICdhJycgd2hlbiBmZWQgd2l0aCBgJXRva2VuICdhJyAiYSInLgotCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoVG9rZW4gZGVmaW5pdGlvbnMpOiBOZXcuCi0KLTIwMDItMDUtMDMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBkYXRhL2Jpc29uLnNpbXBsZSAoYjRfdG9rZW5fZGVmaW5lcyk6IEFsc28gZGVmaW5lIFlZVE9LRU5UWVBFCi0JZm9yIEsmUiBDLgotCi0yMDAyLTA1LTAzICBnZXR0ZXh0aXplICA8YnVnLWdudS1nZXR0ZXh0QGdudS5vcmc+Ci0KLQkqIE1ha2VmaWxlLmFtIChTVUJESVJTKTogUmVtb3ZlIGludGwuCi0JKEVYVFJBX0RJU1QpOiBBZGQgY29uZmlnL2NvbmZpZy5ycGF0aC4KLQotMjAwMi0wNS0wMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvYmlzb24uc2ltcGxlIChtNF9pZik6IERvbid0IG91dHB1dCBlbXB0eSBlbnVtcy4KLQlBbmQgYWN0dWFsbHksIG91dHB1dCB2YWxpZCBlbnVtIGRlZmluaXRpb25zIDooLgotCi0yMDAyLTA1LTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogY29uZmlndXJlLmJhdDogUmVtb3ZlLCBjb21wbGV0ZWx5IG9ic29sZXRlLgotCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGp1c3QuCi0JRG9uJ3QgZGlzdHJpYnV0ZSBjb25maWcucnBhdGguLi4KLQkqIGNvbmZpZy9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IERvIGl0LgotCi0yMDAyLTA1LTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogY29uZmlndXJlLmluIChHRVRURVhUX1ZFUlNJT04pOiBOZXcuCi0JU3VnZ2VzdGVkIGJ5IEJydW5vIEhhaWJsZSBmb3IgdGhlIGZvcnRoY29taW5nIEdldHRleHQgMC4xMC4zLgotCi0yMDAyLTA1LTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS9iaXNvbi5zaW1wbGUgKGI0X3Rva2VuX2VudW0pOiBOZXcuCi0JKGI0X3Rva2VuX2RlZmluZXMpOiBVc2UgaXQgdG8gb3V0cHV0IHRva2VucyBib3RoIGFzICNkZWZpbmUgYW5kCi0JZW51bXMuCi0JU3VnZ2VzdGVkIGJ5IFBhdWwgRWdnZXJ0LgotCSogc3JjL291dHB1dC5jICh0b2tlbl9kZWZpbml0aW9uc19vdXRwdXQpOiBEb24ndCBvdXRwdXQgc3B1cmlvdXMKLQl3aGl0ZSBzcGFjZXMuCi0KLTIwMDItMDUtMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL200c3VnYXIvbTRzdWdhci5tNDogVXBkYXRlIGZyb20gQ1ZTIEF1dG9jb25mLgotCi0yMDAyLTA1LTAyICBSb2JlcnQgQW5pc2tvICA8cm9iZXJ0QGxyZGUuZXBpdGEuZnI+Ci0KLQkqIGRhdGEvYmlzb24uYysrOiBBZGFwdCBleHBhbnNpb24gb2YgJHMgYW5kIEBzIHRvIHRoZSBDKysgcGFyc2VyLgotCVVwZGF0ZSB0aGUgc3RhY2sgY2xhc3MsIGdpdmUgYSB0cnkgdG8gZGVxdWUgYXMgdGhlIGRlZmF1bHQgY29udGFpbmVyLgotCi0yMDAyLTA1LTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS9iaXNvbi5zaW1wbGUgKHl5cGFyc2UpOiBEbyBub3QgaW1wbGVtZW50IEAkID0gQDEuCi0JKFlZTExPQ19ERUZBVUxUKTogQWRqdXN0IHRvIGRvIGl0LgotCSogZG9jL2Jpc29uLnRleGluZm8gKExvY2F0aW9uIERlZmF1bHQgQWN0aW9uKTogRml4LgotCi0yMDAyLTA1LTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3JlYWRlci5jIChwYXJzZV9icmFjZXMpOiBNZXJnZSBpbnRvLi4uCi0JKHBhcnNlX2FjdGlvbik6IHRoaXMuCi0KLTIwMDItMDUtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBjb25maWd1cmUuaW4gKEFMTF9MSU5HVUFTKTogUmVtb3ZlLgotCSogcG8vTElOR1VBUywgaHIucG86IE5ldy4KLQotMjAwMi0wNS0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlSZW1vdmUgdGhlIHNvIGNhbGxlZCBoYWlyeSAoc2VtYW50aWMpIHBhcnNlcnMuCi0KLQkqIHNyYy9zeXN0ZW0uaCAoRVhUX0dVQVJEX0MsIEVYVF9TVFlQRV9IKTogUmVtb3ZlLgotCSogc3JjL2dyYW0uaCwgc3JjL2dyYW0uYyAoc2VtYW50aWNfcGFyc2VyKTogUmVtb3ZlLgotCShydWxlX3QpOiBSZW1vdmUgdGhlIGd1YXJkIGFuZCBndWFyZF9saW5lIG1lbWJlcnMuCi0JKiBzcmMvbGV4LmggKHRva2VuX3QpOiByZW1vdmUgdG9rX2d1YXJkLgotCSogc3JjL29wdGlvbnMuYyAob3B0aW9uX3RhYmxlKTogUmVtb3ZlICVndWFyZCBhbmQgJXNlbWFudGljX3BhcnNlcgotCXN1cHBvcnQuCi0JKiBzcmMvb3V0cHV0LmMsIHNyYy9vdXRwdXQuaCAoZ3VhcmRzX291dHB1dCk6IFJlbW92ZS4KLQkocHJlcGFyZSk6IEFkanVzdC4KLQkodG9rZW5fZGVmaW5pdGlvbnNfb3V0cHV0KTogRG9uJ3Qgb3V0cHV0IHRoZSBgVCcKLQl0b2tlbnMgKD8/PykuCi0JKG91dHB1dF9za2VsZXRvbik6IERvbid0IG91dHB1dCB0aGUgZ3VhcmRzLgotCSogc3JjL2ZpbGVzLmMsIHNyYy9maWxlcy5jIChhdHRyc2ZpbGUpOiBSZW1vdmUuCi0JKiBzcmMvcmVhZGVyLmMgKHN5bWJvbF9saXN0KTogUmVtb3ZlIHRoZSBndWFyZCBhbmQgZ3VhcmRfbGluZQotCW1lbWJlcnMuCi0JQWRqdXN0IGRlcGVuZGVuY2llcy4KLQkocGFyc2VfZ3VhcmQpOiBSZW1vdmUuCi0JKiBkYXRhL2Jpc29uLmhhaXJ5OiBSZW1vdmUuCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoRW52aXJvbm1lbnQgVmFyaWFibGVzKTogUmVtb3ZlIG9jY3VycmVuY2VzIG9mCi0JQklTT05fSEFJUlkuCi0KLTIwMDItMDUtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvcmVhZGVyLmMgKGNvcHlfYXQsIGNvcHlfZG9sbGFybSBwYXJzZV9icmFjZXMsIHBhcnNlX2FjdGlvbikKLQkocGFyc2VfZ3VhcmQpOiBSZW5hbWUgdGhlIGZvcm1hbCBhcmd1bWVudCBgc3RhY2tfb2Zmc2V0JyBhcwotCWBydWxlX2xlbmd0aCcsIHdoaWNoIGlzIG1vcmUgcmVhZGFibGUuCi0JQWRqdXN0IGNhbGxlcnMuCi0JKGNvcHlfYXQsIGNvcHlfZG9sbGFyKTogSW5zdGVhZCBvZiBvdXRwdXR0aW5nIHRoZSBoYXJkIGNvZGVkCi0JdmFsdWVzIG9mICQkLCAkbiBhbmQgc28gZm9ydGgsIG91dHB1dCBpbnZvY2F0aW9uIHRvIGI0X2xoc192YWx1ZSwKLQliNF9saHNfbG9jYXRpb24sIGI0X3Joc192YWx1ZSwgYW5kIGI0X3Joc19sb2NhdGlvbi4KLQlOb3RlOiB0aGlzIHBhdGNoIHBhcnRpYWxseSBkcm9wcyBgc2VtYW50aWMtcGFyc2VyJyBzdXBwb3J0OiBpdAotCWFsd2F5cyBkb2VzIGBydWxlX2xlbmd0aCAtIG4nLCB3aGVyZSBzZW1hbnRpYyBwYXJzZXJzIG91Z2h0IHRvCi0JYWx3YXlzIHVzZSBgLW4nLgotCSogZGF0YS9iaXNvbi5zaW1wbGUsIGRhdGEvYmlzb24uYysrIChiNF9saHNfdmFsdWUpCi0JKGI0X2xoc19sb2NhdGlvbiwgYjRfcmhzX3ZhbHVlLCBhbmQgYjRfcmhzX2xvY2F0aW9uOiBOZXcuCi0KLTIwMDItMDUtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBjb25maWd1cmUuaW4gKEFDX0lOSVQpOiBCdW1wIHRvIDEuNDliLgotCShBTV9JTklUX0FVVE9NQUtFKTogU2hvcnQgaW52b2NhdGlvbi4KLQotMjAwMi0wNS0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlWZXJzaW9uIDEuNDlhLgotCi0yMDAyLTA1LTAxICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3NrZWxldG9uLmg6IFJlbW92ZS4KLQotMjAwMi0wNS0wMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9za2VsZXRvbi5oOiBGaXggdGhlICNlbmRpZi4KLQlSZXBvcnRlZCBieSBNYWdudXMgRnJvbXJlaWRlLgotCi0yMDAyLTA0LTI2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogZGF0YS9iaXNvbi5zaW1wbGUgKFlZU1RZUEVfSVNfVFJJVklBTCwgWVlMVFlQRV9JU19UUklWSUFMKToKLQlEZWZpbmUgaWYgd2UgZGVmaW5lIFlZU1RZUEUgYW5kIFlZTFRZUEUsIHJlc3BlY3RpdmVseS4KLQkoWVlDT1BZKTogRml4IFtdIHF1b3RpbmcgcHJvYmxlbSBpbiB0aGUgbm9uLUdDQyBjYXNlLgotCi0yMDAyLTA0LTI1ICBSb2JlcnQgQW5pc2tvICA8cm9iZXJ0QGxyZGUuZXBpdGEuZnI+Ci0KLQkqIHNyYy9zY2FuLXNrZWwubDogUG9zdHByb2Nlc3MgcXVhZHJpZ3JhcGhzLgotCi0JKiBzcmMvcmVhZGVyLmMgKGNvcHlfY2hhcmFjdGVyKTogTmV3IGZ1bmN0aW9uLCB1c2VkIHRvIG91dHB1dAotCXNpbmdsZSBjaGFyYWN0ZXJzIHdoaWxlIHJlcGxhY2luZyBgWycgYW5kIGBdJyB3aXRoIHF1YWRyaWdyYXBocywgdG8KLQlhdm9pZCB0cm91YmxlcyB3aXRoIE00IHF1b3Rlcy4KLQkoY29weV9jb21tZW50KTogT3V0cHV0IGNoYXJhY3RlcnMgd2l0aCBjb3B5X2NoYXJhY3Rlci4KLQkocmVhZF9hZGRpdGlvbm5hbF9jb2RlKTogTGlrZXdpc2UuCi0JKGNvcHlfc3RyaW5nMik6IExpa2V3aXNlLgotCShjb3B5X2RlZmluaXRpb24pOiBMaWtld2lzZS4KLQotCSogdGVzdHMvY2FsYy5hdDogRXhlcmNpc2UgTTQgcXVvdGluZy4KLQotMjAwMi0wNC0yNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHRlc3RzL3NldHMuYXQgKEFUX0VYVFJBQ1RfU0VUUyk6IFNlZCBwb3J0YWJpbGl0eSBpc3N1ZTogbm8gc3BhY2UKLQliZXR3ZWVuIGAhJyBhbmQgdGhlIGNvbW1hbmQuCi0JUmVwb3J0ZWQgYnkgUGF1bCBFZ2dlcnQuCi0KLTIwMDItMDQtMjQgIFJvYmVydCBBbmlza28gIDxyb2JlcnRAbHJkZS5lcGl0YS5mcj4KLQotCSogdGVzdHMvY2FsYy5hdDogRXhlcmNpc2UgcHJvbG9ndWUgc3BsaXR0aW5nLgotCi0JKiBkYXRhL2Jpc29uLnNpbXBsZSwgZGF0YS9iaXNvbi5jKys6IFVzZSBgYjRfcHJlX3Byb2xvZ3VlJyBhbmQKLQlgYjRfcG9zdF9wcm9sb2d1ZScgaW5zdGVhZCBvZiBgYjRfcHJvbG9ndWUnLgotCi0JKiBzcmMvb3V0cHV0LmMgKHByZXBhcmUpOiBBZGQgdGhlIGBwcmVfcHJvbG9ndWUnIGFuZCBgcG9zdF9wcm9sb2d1ZScKLQltdXNjbGVzLgotCShvdXRwdXQpOiBGcmVlIHByZV9wcm9sb2d1ZV9vYnN0YWNrIGFuZCBwb3N0X3Byb2xvZ3VlX29ic3RhY2suCi0JKiBzcmMvZmlsZXMuaCwgc3JjL2ZpbGVzLmMgKGF0dHJzX29ic3RhY2spOiBSZW1vdmUuCi0JKHByZV9wcm9sb2d1ZV9vYnN0YWNrLCBwb3N0X3Byb2xvZ3VlX29ic3RhY2spOiBOZXcuCi0JKiBzcmMvcmVhZGVyLmMgKGNvcHlfZGVmaW5pdGlvbik6IEFkZCBhIHBhcmFtZXRlciB0byBzcGVjaWZ5IHRoZQotCW9ic3RhY2sgdG8gZmlsbCwgaW5zdGVhZCBvZiB1c2luZyBhdHRyc19vYnN0YWNrIHVuY29uZGl0aW9uYWxseS4KLQkocmVhZF9kZWNsYXJhdGlvbnMpOiBQYXNzIHByZV9wcm9sb2d1ZV9vYnN0YWNrIHRvIGNvcHlfZGVmaW5pdGlvbiBpZgotCWAldW5pb24nIGhhcyBub3QgeWV0IGJlZW4gc2VlbiwgcGFzcyBwb3N0X3Byb2xvZ3VlX29ic3RhY2sgb3RoZXJ3aXNlLgotCi0yMDAyLTA0LTIzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogZGF0YS9iaXNvbi5zaW1wbGU6IFJlbW92ZSB1bm5lY2Vzc2FyeSBjb21tZW50YXJ5IGFuZCB3aGl0ZQotCXNwYWNlIGRpZmZlcmVuY2VzIGZyb20gMV8yOS1icmFuY2guCi0JRGVwZW5kIG9uIFlZRVJST1JfVkVSQk9TRSwgbm90IGRlZmluZWQgKFlZRVJST1JfVkVSQk9TRSkuCi0KLQkodW5pb24geXlhbGxvYywgWVlTVEFDS19HQVBfTUFYLCBZWVNUQUNLX0JZVEVTLCBZWUNPUFksCi0JWVlTVEFDS19SRUxPQ0FURSk6IERvIG5vdCBkZWZpbmUgaWYgeXlvdmVyZmxvdyBpcyBkZWZpbmVkLCBvcgotCWlmIHRoaXMgaXMgYSBDKysgcGFyc2VyIGFuZCBZWVNUWVBFIG9yIFlZTFRZUEUgaGFzIG5vbnRyaXZpYWwKLQljb25zdHJ1Y3RvcnMgb3IgZGVzdHJ1Y3RvcnMuCi0KLQkoeXlwYXJzZSkgWyEgZGVmaW5lZCBZWVNUQUNLX1JFTE9DQVRFXTogRG8gbm90IHJlbG9jYXRlIHRoZSBzdGFjay4KLQotMjAwMi0wNC0yMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHRlc3RzL3NldHMuYXQgKEFUX0VYVFJBQ1RfU0VUUyk6IERvbid0IHVzZSA4IGNoYXIgbG9uZyBzZWQgbGFiZWxzLgotCSogdGVzdHMvc3luY2xpbmVzLmF0IChBVF9URVNUX1NZTkNMSU5FKTogQmUgcm9idXN0IHRvIEdDQydzCi0JbG9jYXRpb24gd2l0aCBjb2x1bW5zLgotCSogdGVzdHMvY29uZmxpY3RzLmF0ICglbm9uYXNzb2MgYW5kIGVvZik6IERvbid0IHVzZSBgZXJyb3IuaCcuCi0JQWxsIHJlcG9ydGVkIGJ5IFBhdWwgRWdnZXJ0LgotCi0yMDAyLTA0LTIyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3JlZHVjZS5jIChkdW1wX2dyYW1tYXIpOiBNb3ZlIHRvLi4uCi0JKiBzcmMvZ3JhbS5oLCBzcmMvZ3JhbS5jIChncmFtbWFyX2R1bXApOiBoZXJlLgotCUJlIHN1cmUgdG8gc2VwYXJhdGUgbG9uZyBpdGVtIG51bWJlcnMuCi0JRG9uJ3QgcmVhZCB0aGUgbWVtYmVycyBvZiBhIHJ1bGUncyBwcmVjIGlmIGl0cyBuaWwuCi0KLTIwMDItMDQtMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvb3V0cHV0LmMgKHRhYmxlX3NpemUsIHRhYmxlX2dyb3cpOiBOZXcuCi0JKE1BWFRBQkxFKTogUmVtb3ZlLCByZXBsYWNlIHVzZXMgd2l0aCB0YWJsZV9zaXplLgotCShwYWNrX3ZlY3Rvcik6IEluc3RlYWQgb2YgZHlpbmcgd2hlbiB0aGUgdGFibGUgaXMgdG9vIGJpZywgZ3JvdyBpdC4KLQotMjAwMi0wNC0yMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRhdGEvYmlzb24uc2ltcGxlICh5eXIxKTogSXRzIHR5cGUgaXMgdGhhdCBvZiBhIHRva2VuIG51bWJlci4KLQkqIGRhdGEvYmlzb24uYysrIChyMV8pOiBMaWtld2lzZS4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFdlYjJjIEFjdGlvbnMpOiBBZGp1c3QuCi0KLTIwMDItMDQtMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvcmVhZGVyLmMgKHRva2VuX3RyYW5zbGF0aW9uc19pbml0KTogMjU2IGlzIG5vdyB0aGUgZGVmYXVsdAotCXZhbHVlIGZvciB0aGUgZXJyb3IgdG9rZW4sIGkuZS4sIGl0IHdpbGwgYmUgYXNzaWduZWQgYW5vdGhlcgotCW51bWJlciBpZiB0aGUgdXNlciBhc3NpZ25lZCAyNTYgdG8gb25lIG9mIGhlciB0b2tlbnMuCi0JKHJlYWRlcik6IERvbid0IGZvcmNlIDI1NiB0byBlcnJvci4KLQkqIGRvYy9iaXNvbi50ZXhpbmZvIChTeW1ib2xzKTogQWRqdXN0LgotCSogdGVzdHMvdG9ydHVyZS5hdCAoQVRfREFUQV9IT1JJWk9OVEFMX0dSQU1NQVIpCi0JKEFUX0RBVEFfVFJJQU5HVUxBUl9HUkFNTUFSKTogTnVtYmVyIHRoZSB0b2tlbnMgYXMgMSwgMiwgMwotCWV0Yy4gaW5zdGVhZCBvZiAxMCwgMjAsIDMwICh3aGljaCB3YXMgdXNlZCB0byBganVtcCcgb3ZlciBlcnJvcgotCSgyNTYpIGFuZCB1bmRlZmluZWQgKDIpKS4KLQotMjAwMi0wNC0yMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlQcm9wYWdhdGUgbW9yZSB0b2tlbl9udW1iZXJfdC4KLQotCSogc3JjL2dyYW0uaCAodG9rZW5fbnVtYmVyX2FzX2l0ZW1fbnVtYmVyKQotCShpdGVtX251bWJlcl9hc190b2tlbl9udW1iZXIpOiBOZXcuCi0JKiBzcmMvb3V0cHV0LmMgKEdFTkVSQVRFX09VVFBVVF9UQUJMRSk6IE5ldy4KLQlVc2UgaXQgdG8gY3JlYXRlIG91dHB1dF9pdGVtX251bWJlcl90YWJsZSBhbmQKLQlvdXRwdXRfdG9rZW5fbnVtYmVyX3RhYmxlLgotCSogc3JjL0xSMC5jLCBzcmMvZGVyaXZlcy5jLCBzcmMvZ3JhbS5jLCBzcmMvZ3JhbS5oLCBzcmMvbGFsci5jLAotCSogc3JjL2xleC5jLCBzcmMvbnVsbGFibGUuYywgc3JjL291dHB1dC5jLCBzcmMvcHJpbnQuYywKLQkqIHNyYy9wcmludF9ncmFwaC5jLCBzcmMvcmVhZGVyLmMsIHNyYy9yZWR1Y2UuYywgc3JjL3N0YXRlLmgsCi0JKiBzcmMvc3ltdGFiLmMsIHNyYy9zeW10YWIuaDogVXNlIHRva2VuX251bWJlcl90IGluc3RlYWQgb2Ygc2hvcnRzLgotCi0yMDAyLTA0LTIyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL291dHB1dC5oLCBzcmMvb3V0cHV0LmMgKGdldF9saW5lc19udW1iZXIpOiBSZW1vdmUuCi0KLTIwMDItMDQtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoQWN0aW9ucyk6IE1ha2UgY2xlYXIgdGhhdCBgfCcgaXMgbm90IHRoZSBzYW1lCi0JYXMgTGV4L0ZsZXgnLgotCShEZWJ1Z2dpbmcpOiBNb3JlIGRldGFpbHMgYWJvdXQgZW5hYmxpbmcgdGhlIGRlYnVnZ2luZyBmZWF0dXJlcy4KLQkoVGFibGUgb2YgU3ltYm9scyk6IERlc2NyaWJlICQkLCAkbiwgQCQsIGFuZCBAbi4KLQlTdWdnZXN0ZWQgYnkgVGltIEpvc2xpbmcuCi0KLTIwMDItMDQtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkb2MvYmlzb24udGV4aW5mbzogUmVtb3ZlIHRoZSB1c2VzIG9mIHRoZSBvYnNvbGV0ZSBAcmVmaWxsLgotCi0yMDAyLTA0LTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3N5c3RlbS5oOiBSZWx5IG9uIEhBVkVfTElNSVRTX0guCi0JU3VnZ2VzdGVkIGJ5IFBhdWwgRWdnZXJ0LgotCi0yMDAyLTA0LTA5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogdGVzdHMvY2FsYy5hdCAoX0FUX0NIRUNLX0NBTENfRVJST1IpOiBSZWNlaXZlIGFzIGFyZ3VtZW50IHRoZQotCWZ1bGwgc3RkZXJyLCBhbmQgc3RyaXAgaXQgYWNjb3JkaW5nIHRvIHRoZSBiaXNvbiBvcHRpb25zLCBpbnN0ZWFkCi0Jb2YgY29tcG9zaW5nIHRoZSBlcnJvciBtZXNzYWdlIGZyb20gZGlmZmVyZW50IGJpdHMuCi0JVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gY2hlY2sgZm9yIHNldmVyYWwgZXJyb3IgbWVzc2FnZXMuCi0JQWRqdXN0IGFsbCB0aGUgaW52b2NhdGlvbnMuCi0JQWRkIGFuIGludm9jYXRpb24gZXhlcmNpc2luZyB0aGUgZXJyb3IgdG9rZW4uCi0JQWRkIGFuIGludm9jYXRpb24gZGVtb25zdHJhdGluZyBhIHN0dXBpZCBlcnJvciBtZXNzYWdlLgotCShfQVRfREFUQV9DQUxDX1kpOiBGb2xsb3cgdGhlIEdDUzogaW5pdGlhbCBjb2x1bW4gaXMgMSwgbm90IDAuCi0JQWRqdXN0IHRoZSB0ZXN0cy4KLQlFcnJvciBtZXNzYWdlIGFyZSBmb3Igc3RkZXJyLCBub3Qgc3Rkb3V0LgotCi0yMDAyLTA0LTA5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2dyYW0uaCwgc3JjL2dyYW0uYyAoZXJyb3JfdG9rZW5fbnVtYmVyKTogUmVtb3ZlLCB1c2UKLQllcnJ0b2tlbi0+bnVtYmVyLgotCSogc3JjL3JlYWRlci5jIChyZWFkZXIpOiBEb24ndCBzcGVjaWZ5IHRoZSB1c2VyIHRva2VuIG51bWJlciAoMikKLQlmb3IgJHVuZGVmaW5lZCwgYXMgaXQgdXNlbGVzc2x5IHByZXZlbnRzIHVzaW5nIGl0LgotCSogc3JjL2dyYW0uaCAodG9rZW5fbnVtYmVyX3QpOiBNb3ZlIHRvLi4uCi0JKiBzcmMvc3ltdGFiLmg6IGhlcmUuCi0JKHN0YXRlX3QubnVtYmVyKTogSXMgYSB0b2tlbl9udW1iZXJfdC4KLQkqIHNyYy9wcmludC5jLCBzcmMvcmVhZGVyLmM6IFVzZSB1bmRlZnRva2VuLT5udW1iZXIgaW5zdGVhZCBvZgotCWhhcmQgY29kZWQgMi4KLQkoRXZlbiB0aG91Z2ggdGhpcyAyIGlzIG5vdCB0aGUgc2FtZSBhcyBhYm92ZTogdGhlIG51bWJlciBvZiB0aGUKLQl1bmRlZnRva2VuIHJlbWFpbnMgYmVpbmcgMiwgaXQgaXMgaXRzIHVzZXIgdG9rZW4gbnVtYmVyIHdoaWNoCi0JbWlnaHQgbm90IGJlIDIpLgotCSogc3JjL291dHB1dC5jIChwcmVwYXJlX3Rva2Vucyk6IFJlbmFtZSB0aGUgYG1heHRvaycgbXVzY2xlIHdpdGgKLQlgdXNlcl90b2tlbl9udW1iZXJfbWF4Jy4KLQlPdXRwdXQgYHVuZGVmX3Rva2VuX251bWJlcicuCi0JKiBkYXRhL2Jpc29uLnNpbXBsZSwgZGF0YS9iaXNvbi5jKys6IFVzZSB0aGVtLgotCUJlIHN1cmUgdG8gbWFwIGludmFsaWQgeXlsZXggcmV0dXJuIHZhbHVlcyB0bwotCWB1bmRlZl90b2tlbl9udW1iZXInLiAgVGhpcyBzYXZlcyB1cyBmcm9tIGdyYXR1aXRvdXMgU0VHVi4KLQotCSogdGVzdHMvY29uZmxpY3RzLmF0IChTb2x2ZWQgU1IgQ29uZmxpY3RzKQotCShVbnJlc29sdmVkIFNSIENvbmZsaWN0cyk6IEFkanVzdC4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFdlYjJjIEFjdGlvbnMpOiBBZGp1c3QuCi0KLTIwMDItMDQtMDggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkYXRhL2Jpc29uLmMrKzogcy9iNF9pdGVtX251bWJlcl9tYXgvYjRfcmhzX251bWJlcl9tYXgvLgotCUFkZGluZyAjbGluZS4KLQlSZW1vdmUgdGhlIGR1cGxpY2F0ZSBgdHlwZWRlZnMnLgotCShSaHNOdW1iZXJUeXBlKTogRml4IHRoZSBkZWNsYXJhdGlvbiBhbmQgdmFyaW91cyBvdGhlciB0eXBvcy4KLQlVc2UgX19vZmlsZV9fLgotCSogZGF0YS9iaXNvbi5zaW1wbGU6IFVzZSBfX29maWxlX18uCi0JKiBzcmMvc2Nhbi1za2VsLmw6IEhhbmRsZSBfX29maWxlX18uCi0KLTIwMDItMDQtMDggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvZ3JhbS5oIChpdGVtX251bWJlcl90KTogTmV3LCB0aGUgdHlwZSBvZiBpdGVtIG51bWJlcnMgaW4KLQlSSVRFTS4gIE5vdGUgdGhhdCBpdCBtdXN0IGJlIGFibGUgdG8gY29kZSBzeW1ib2wgbnVtYmVycyBhcwotCXBvc2l0aXZlIG51bWJlciwgYW5kIHRoZSBuZWdhdGlvbiBvZiBydWxlIG51bWJlcnMgYXMgbmVnYXRpdmUKLQludW1iZXJzLgotCUFkanVzdCBhbGwgZGVwZW5kZW5jaWVzIChwcmV0dHkgbWFueSkuCi0JKiBzcmMvcmVkdWNlLmMgKHJ1bGUpOiBSZW1vdmUgdGhpcyBgc2hvcnQgKicgcG9pbnRlcjogdXNlCi0JaXRlbV9udW1iZXJfdC4KLQkqIHNyYy9zeXN0ZW0uaCAoTUlOU0hPUlQsIE1BWFNIT1JUKTogUmVtb3ZlLgotCUluY2x1ZGUgYGxpbWl0cy5oJy4KLQlBZGp1c3QgZGVwZW5kZW5jaWVzIHRvIHVzaW5nIFNIUlRfTUFYIGFuZCBTSFJUX01JTi4KLQkoc2hvcnRjcHkpOiBSZW1vdmUuCi0JKE1BWFRBQkxFKTogTW92ZSB0by4uLgotCSogc3JjL291dHB1dC5jIChNQVhUQUJMRSk6IGhlcmUuCi0JKHByZXBhcmVfcnVsZXMpOiBVc2Ugb3V0cHV0X2ludF90YWJsZSB0byBvdXRwdXQgcmhzLgotCSogZGF0YS9iaXNvbi5zaW1wbGUsIGRhdGEvYmlzb24uYysrOiBBZGp1c3QuCi0JKiB0ZXN0cy90b3J0dXJlLmF0IChCaWcgdHJpYW5nbGUpOiBNb3ZlIHRoZSBsaW1pdCBmcm9tIDI1NCB0bwotCTUwMC4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFdlYjJjIEFjdGlvbnMpOiBBanVzdC4KLQotCVRyeWluZyB3aXRoIGJpZ2dlciBncmFtbWFycyBzaG93cyB2YXJpb3VzIHBoZW5vbWVuYTogYXQgMzAwMCAoMjhNYgotCW9mIGdyYW1tYXIgZmlsZSkgYmlzb24gaXMga2lsbGVkIGJ5IG15IHN5c3RlbSwgYXQgMjAwMCAoMTJNYikgYmlzb24KLQlwYXNzZXMsIGJ1dCBwcm9kdWNlcyBuZWdhdGl2ZSAjbGluZSBudW1iZXIsIG9uY2UgZml4ZWQsIEdDQyBpcwotCWtpbGxlZCB3aGlsZSBjb21waWxpbmcgMTRNYiwgYXQgMTUwMCAoNi43IE1iIG9mIGdyYW1tYXIsIDguMk1iIG9mCi0JQyksIGl0IHBhc3Nlcy4KLQkqIHNyYy9zdGF0ZS5oIChzdGF0ZV9oKTogQ29kZSBpbnB1dCBsaW5lcyBvbiBpbnRzLCBub3Qgc2hvcnRzLgotCi0yMDAyLTA0LTA4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3JlZHVjZS5jIChyZWR1Y2VfZ3JhbW1hcik6IEZpcnN0IHJlZHVjZSB0aGUgbm9udGVybWluYWxzLAotCWFuZCB0aGVuIHRoZSBncmFtbWFyLgotCi0yMDAyLTA0LTA4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3N5c3RlbS5oOiBObyBsb25nZXIgdXNpbmcgc3RybmR1cC4KLQotMjAwMi0wNC0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9tdXNjbGVfdGFiLmggKE1VU0NMRV9JTlNFUlRfTE9OR19JTlQpOiBOZXcuCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF90YWJsZV9kYXRhKTogUmV0dXJuIHRoZSBsb25nZXN0IG51bWJlci4KLQkocHJlcGFyZV90b2tlbnMpOiBPdXRwdXQgYHRva2VuX251bWJlcl9tYXgnKS4KLQkqIGRhdGEvYmlzb24uc2ltcGxlLCBkYXRhL2Jpc29uLmMrKyAoYjRfc2ludF90eXBlLCBiNF91aW50X3R5cGUpOgotCU5ldy4KLQlVc2UgdGhlbSB0byBkZWZpbmUgeXlfdG9rZW5fbnVtYmVyX3R5cGUvVG9rZW5OdW1iZXJUeXBlLgotCVVzZSB0aGlzIHR5cGUgZm9yIHl5dHJhbnNsYXRlLgotCSogdGVzdHMvdG9ydHVyZS5hdCAoQmlnIHRyaWFuZ2xlKTogUHVzaCB0aGUgbGltaXQgZnJvbSAxMjQgdG8KLQkyNTMuCi0JKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChXZWIyYyBBY3Rpb25zKTogQWRqdXN0LgotCi0yMDAyLTA0LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogdGVzdHMvdG9ydHVyZS5hdCAoQmlnIHRyaWFuZ2xlKTogTmV3LgotCShHTlUgQVdLIEdyYW1tYXIsIEdOVSBDaW0gR3JhbW1hcik6IE1vdmUgdG8uLi4KLQkqIHRlc3RzL2V4aXN0aW5nLmF0OiBoZXJlLgotCi0yMDAyLTA0LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2dyYW0uaCwgc3JjL2dyYW0uYyAobml0ZW1zKTogUmVtb3ZlLCBpdCBpcyBhbiBhbGlhcyBvZgotCW5yaXRlbXMuCi0JQWRqdXN0IGRlcGVuZGVuY2llcy4KLQotMjAwMi0wNC0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9yZWFkZXIuYzogTm9ybWFsaXplIGluY3JlbWVudHMgdG8gcHJlZml4IGZvcm0uCi0KLTIwMDItMDQtMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvcmVhZGVyLmMsIHN5bXRhYi5jOiBSZW1vdmUgZGVidWdnaW5nIGNvZGUuCi0KLTIwMDItMDQtMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JUmVuYW1lIGFsbCB0aGUgYGJ1Y2tldCdzIGFzIGBzeW1ib2xfdCcuCi0KLQkqIHNyYy9ncmFtLmMsIHNyYy9ncmFtLmgsIHNyYy9sZXguYywgc3JjL2xleC5oLCBzcmMvb3V0cHV0LmMsCi0JKiBzcmMvcmVhZGVyLmMsIHNyYy9yZWFkZXIuaCwgc3JjL3JlZHVjZS5jLCBzcmMvc3RhdGUuaCwKLQkqIHNyYy9zeW10YWIuYywgc3JjL3N5bXRhYi5oIChidWNrZXQpOiBSZW5hbWUgYXMuLi4KLQkoc3ltYm9sX3QpOiB0aGlzLgotCShzeW1ib2xfbGlzdF9uZXcsIGJ1Y2tldF9jaGVja19kZWZpbmVkLCBidWNrZXRfbWFrZV9hbGlhcykKLQkoYnVja2V0X2NoZWNrX2FsaWFzX2NvbnNpc3RlbmNlLCBidWNrZXRfcGFjaywgYnVja2V0X3RyYW5zbGF0aW9uKQotCShidWNrZXRfbmV3LCBidWNrZXRfZnJlZSwgaGFzaF9jb21wYXJlX2J1Y2tldCwgaGFzaF9idWNrZXQpCi0JKGJ1Y2tldHNfbmV3LCBidWNrZXRzX2ZyZWUsIGJ1Y2tldHNfZG8pOiBSZW5hbWUgYXMuLi4KLQkoc3ltYm9sX2xpc3RfbmV3LCBzeW1ib2xfY2hlY2tfZGVmaW5lZCwgc3ltYm9sX21ha2VfYWxpYXMpCi0JKHN5bWJvbF9jaGVja19hbGlhc19jb25zaXN0ZW5jZSwgc3ltYm9sX3BhY2ssIHN5bWJvbF90cmFuc2xhdGlvbikKLQkoc3ltYm9sX25ldywgc3ltYm9sX2ZyZWUsIGhhc2hfY29tcGFyZV9zeW1ib2xfdCwgaGFzaF9zeW1ib2xfdCkKLQkoc3ltYm9sc19uZXcsIHN5bWJvbHNfZnJlZSwgc3ltYm9sc19kbyk6IHRoZXNlLgotCi0yMDAyLTA0LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCVVzZSBsaWIvaGFzaCBmb3IgdGhlIHN5bWJvbCB0YWJsZS4KLQotCSogc3JjL2dyYW0uYyAobnRva2Vucyk6IEluaXRpYWxpemUgdG8gMSwgdG8gcmVzZXJ2ZSBhIHNsb3QgZm9yCi0JRU9GLgotCSogc3JjL2xleC5jIChsZXgpOiBTZXQgdGhlIGBudW1iZXInIG1lbWJlciBvZiBuZXcgdGVybWluYWxzLgotCSogc3JjL3JlYWRlci5jIChidWNrZXRfY2hlY2tfZGVmaW5lZCwgYnVja2V0X21ha2VfYWxpYXMpCi0JKGJ1Y2tldF9jaGVja19hbGlhc19jb25zaXN0ZW5jZSwgYnVja2V0X3RyYW5zbGF0aW9uKTogTmV3LgotCShyZWFkZXIsIGdyYW1tYXJfZnJlZSwgcmVhZGdyYW0sIHRva2VuX3RyYW5zbGF0aW9uc19pbml0KQotCShwYWNrc3ltYm9scyk6IEFkanVzdC4KLQkocmVhZGVyKTogTnVtYmVyIHRoZSBwcmVkZWZpbmVkIHRva2Vucy4KLQkqIHNyYy9yZWR1Y2UuYyAoaW5hY2Nlc3NhYmxlX3N5bWJvbHMpOiBKdXN0IHVzZSBoYXJkIGNvZGVkIG51bWJlcnMKLQlmb3IgcHJlZGVmaW5lZCB0b2tlbnMuCi0JKiBzcmMvc3ltdGFiLmggKGJ1Y2tldCk6IFJlbW92ZSBhbGwgdGhlIGhhc2ggdGFibGUgcmVsYXRlZAotCW1lbWJlcnMuCi0JKiBzcmMvc3ltdGFiLmMgKHN5bXRhYik6IFJlcGxhY2UgYnkuLi4KLQkoYnVja2V0X3RhYmxlKTogdGhpcy4KLQkoYnVja2V0X25ldywgYnVja2V0X2ZyZWUsIGhhc2hfY29tcGFyZV9idWNrZXQsIGhhc2hfYnVja2V0KQotCShidWNrZXRzX25ldywgYnVja2V0c19kbyk6IE5ldy4KLQotMjAwMi0wNC0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9ncmFtLmMgKG5pdGVtcywgbnJ1bGVzLCBuc3ltcywgbnRva2VucywgbnZhcnMsIG5yaXRlbXMpCi0JKHN0YXJ0X3N5bWJvbCwgbWF4X3VzZXJfdG9rZW5fbnVtYmVyLCBzZW1hbnRpY19wYXJzZXIpCi0JKGVycm9yX3Rva2VuX251bWJlcik6IEluaXRpYWxpemUuCi0JKiBzcmMvcmVhZGVyLmMgKGdyYW1tYXIsIHN0YXJ0X2ZsYWcsIHN0YXJ0dmFsLCB0eXBlZCwgbGFzdHByZWMpOgotCUluaXRpYWxpemUuCi0JKHJlYWRlcik6IERvbid0LgotCShlcnJ0b2tlbiwgZW9mdG9rZW4sIHVuZGVmdG9rZW4sIGF4aW9tKTogRXh0ZXJuLgotCi0yMDAyLTA0LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2dyYW0uaCAocnVsZV9zKTogcHJlYyBhbmQgcHJlY3N5bSBhcmUgbm93IHBvaW50ZXJzCi0JdG8gdGhlIGJ1Y2tldCBnaXZpbmcgdGhlIHByaW9yaXR5L2Fzc29jaWF0aXZpdHkuCi0JTWVtYmVyIGBhc3NvY2lhdGl2aXR5JyByZW1vdmVkOiB1c2VsZXNzLgotCSogc3JjL3JlZHVjZS5jLCBzcmMvY29uZmxpY3RzLmM6IEFkanVzdC4KLQotMjAwMi0wNC0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9sYWxyLmMsIHNyYy9MUjAuYywgc3JjL2Nsb3N1cmUuYywgc3JjL2dyYW0uYywgc3JjL3JlZHVjZS5jOgotCVByb3Blcmx5IGVzY2FwZSB0aGUgc3ltYm9scycgVEFHIHdoZW4gb3V0cHV0dGluZyB0aGVtLgotCi0yMDAyLTA0LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2xhbHIuaCAoTEEpOiBJcyBhIGJpdHNldHYsIG5vdCBiaXRzZXQqLgotCi0yMDAyLTA0LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2xhbHIuaCwgc3JjL2xhbHIuYyAoTEFydWxlbm8pOiBSZXBsYWNlIHdpdGguLi4KLQkoTEFydWxlKTogdGhpcywgd2hpY2ggaXMgYW4gYXJyYXkgdG8gcnVsZV90Ki4KLQkqIHNyYy9wcmludC5jLCBzcmMvY29uZmxpY3RzLmM6IEFkanVzdC4KLQotMjAwMi0wNC0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9ncmFtLmggKHJ1bGVfdCk6IFJlbmFtZSBgbnVtYmVyJyBhcyBgdXNlcl9udW1iZXInLgotCWBudW1iZXInIGlzIGEgbmV3IG1lbWJlci4KLQlBZGp1c3QgZGVwZW5kZW5jaWVzLgotCSogc3JjL3JlZHVjZS5jIChyZWR1Y2VfZ3JhbW1hcl90YWJsZXMpOiBSZW51bWJlciBydWxlX3QubnVtYmVyLgotCi0yMDAyLTA0LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCUFzIGEgcmVzdWx0IG9mIHRoZSBwcmV2aW91cyBwYXRjaCwgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZAotCXRvIHJlb3JkZXIgcml0ZW0gaXRzZWxmLgotCi0JKiBzcmMvcmVkdWNlLmMgKHJlZHVjZV9ncmFtbWFyX3RhYmxlcyk6IERvbid0IHNvcnQgUklURU0uCi0KLTIwMDItMDQtMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JQmUgc3VyZSBuZXZlciB0byB3YWxrIHRocm91Z2ggUklURU1TLCBidXQgdXNlIG9ubHkgZGF0YSByZWxhdGVkIHRvCi0JdGhlIHJ1bGVzIHRoZW1zZWx2ZXMuIFJJVEVNUyBzaG91bGQgYmUgYmFuaXNoZWQuCi0KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3Rva2VuX3RyYW5zbGF0aW9ucyk6IFJlbmFtZSBhcy4uLgotCShwcmVwYXJlX3Rva2Vucyk6IHRoaXMuCi0JSW4gYWRkaXRpb24gdG8gYHRyYW5zbGF0ZScsIHByZXBhcmUgdGhlIG11c2NsZXMgYHRuYW1lJyBhbmQKLQlgdG9rbnVtJywgd2hpY2ggd2VyZSBoYW5kbGVkIGJ5Li4uCi0JKG91dHB1dF9ydWxlX2RhdGEpOiB0aGlzLgotCVJlbW92ZSwgYW5kIG1vdmUgdGhlIHJlbWFpbmRlciBvZiBpdHMgb3V0cHV0cyBpbnRvLi4uCi0JKHByZXBhcmVfcnVsZXMpOiB0aGlzIG5ldyByb3V0aW5lcywgd2hpY2ggYWxzbyBtZXJnZXMgY29udGVudCBmcm9tCi0JKG91dHB1dF9ncmFtKTogdGhpcy4KLQkocHJlcGFyZV9ydWxlcyk6IEJlIHN1cmUgbmV2ZXIgdG8gd2FsayB0aHJvdWdoIFJJVEVNUy4KLQkob3V0cHV0X3N0b3MpOiBSZW5hbWUgYXMuLi4KLQkocHJlcGFyZV9zdG9zKTogdGhpcy4KLQkob3V0cHV0KTogQWx3YXlzIGludm9rZSBwcmVwYXJlX3N0YXRlcywgYWZ0ZXIgYWxsLCBqdXN0IGRvbid0IHVzZSBpdAotCWluIHRoZSBvdXRwdXQgaWYgeW91IGRvbid0IG5lZWQgaXQuCi0KLTIwMDItMDQtMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvTFIwLmMgKG5ld19zdGF0ZSk6IERpc3BsYXkgYG5zdGF0ZXMnIGFzIHRoZSBuYW1lIG9mIHRoZQotCW5ld2x5IGNyZWF0ZWQgc3RhdGUuCi0JQWRqdXN0IHRvIGluaXRpYWxpemUgZmlyc3Rfc3RhdGUgYW5kIGxhc3Rfc3RhdGUgaWYgbmVlZGVkLgotCUJlIHN1cmUgdG8gZGlzdGluZ3Vpc2ggdGhlIGluaXRpYWwgZnJvbSB0aGUgZmluYWwgc3RhdGUuCi0JKG5ld19zdGF0ZXMpOiBDcmVhdGUgdGhlIGl0ZW1zZXQgb2YgdGhlIGluaXRpYWwgc3RhdGUsIGFuZCB1c2UKLQluZXdfc3RhdGUuCi0JKiBzcmMvY2xvc3VyZS5jIChjbG9zdXJlKTogTm93IHRoYXQgdGhlIGluaXRpYWwgc3RhdGUgaGFzIGl0cwotCWl0ZW1zIHByb3Blcmx5IHNldCwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBzcGVjaWFsIGNhc2Ugd2hlbgotCWNyZWF0aW5nIGBydWxlc2V0Jy4KLQotCUFzIGEgcmVzdWx0LCBub3cgdGhlIHJ1bGUgMCwgcmVkdWNpbmcgdG8gJGF4aW9tLCBpcyB2aXNpYmxlIGluIHRoZQotCW91dHB1dHMuICBBZGp1c3QgdGhlIHRlc3Qgc3VpdGUuCi0KLQkqIHRlc3RzL2NvbmZsaWN0cy5hdCAoU29sdmVkIFNSIENvbmZsaWN0cykKLQkoVW5yZXNvbHZlZCBTUiBDb25mbGljdHMpOiBBZGp1c3QuCi0JKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChXZWIyYyBSZXBvcnQsIFJ1bGUgTGluZSBOdW1iZXJzKTogSWRlbS4KLQkqIHRlc3RzL2NvbmZsaWN0cy5hdCAoUy9SIGluIGluaXRpYWwpOiBOZXcuCi0KLTIwMDItMDQtMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvTFIwLmMgKGFsbG9jYXRlX2l0ZW1zZXRzKTogRG9uJ3QgbG9vcCBvdmVyIHJpdGVtOiBsb29wIG92ZXIKLQl0aGUgUkhTIG9mIHRoZSBydWxlcy4KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X2dyYW0pOiBMaWtld2lzZS4KLQotMjAwMi0wNC0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9ncmFtLmggKHJ1bGVfdCk6IGBsaHMnIGlzIG5vdyBhIHBvaW50ZXIgdG8gdGhlIHN5bWJvbCdzCi0JYnVja2V0LgotCUFkanVzdCBhbGwgZGVwZW5kZW5jaWVzLgotCSogc3JjL3JlZHVjZS5jIChub250ZXJtaW5hbHNfcmVkdWNlKTogRG9uJ3QgZm9yZ2V0IHRvIHJlbnVtYmVyIHRoZQotCWBudW1iZXInIG9mIHRoZSBidWNrZXRzIHRvby4KLQkqIHNyYy9ncmFtLmg6IEluY2x1ZGUgYHN5bXRhYi5oJy4KLQkoYXNzb2NpYXRpdml0eSk6IE1vdmUgdG8uLi4KLQkqIHNyYy9zeW10YWIuaDogaGVyZS4KLQlObyBsb25nZXIgaW5jbHVkZSBgZ3JhbS5oJy4KLQotMjAwMi0wNC0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9ncmFtLmgsIHNyYy9ncmFtLmMgKHJ1bGVzX3Joc19sZW5ndGgpOiBOZXcuCi0JKHJpdGVtX2xvbmdlc3RfcmhzKTogVXNlIGl0LgotCSogc3JjL2dyYW0uaCAocnVsZV90KTogYG51bWJlcicgaXMgYSBuZXcgbWVtYmVyLgotCSogc3JjL3JlYWRlci5jIChwYWNrZ3JhbSk6IFNldCBpdC4KLQkqIHNyYy9yZWR1Y2UuYyAocmVkdWNlX2dyYW1tYXJfdGFibGVzKTogTW92ZSB0aGUgdXNlbGVzcyBydWxlcyBhdAotCXRoZSBlbmQgb2YgYHJ1bGVzJywgYW5kIGNvdW50IHRoZW0gb3V0IG9mIGBucnVsZXMnLgotCShyZWR1Y2Vfb3V0cHV0LCBkdW1wX2dyYW1tYXIpOiBBZGp1c3QuCi0JKiBzcmMvcHJpbnQuYyAocHJpbnRfZ3JhbW1hcik6IEl0IGlzIG5vIGxvbmdlciBuZWVkZWQgdG8gY2hlY2sgZm9yCi0JdGhlIHVzZWZ1bG5lc3Mgb2YgYSBydWxlLCBhcyB1c2VsZXNzIHJ1bGVzIGFyZSBiZXlvbmQgYG5ydWxlcyArIDEnLgotCSogdGVzdHMvcmVkdWNlLmF0IChSZWR1Y2VkIEF1dG9tYXRvbik6IE5ldyB0ZXN0LgotCi0yMDAyLTA0LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3JlZHVjZS5jIChpbmFjY2Vzc2FibGVfc3ltYm9scyk6IEZpeCBhIGJ1Z2xldDogYmVjYXVzZSBvZiBhCi0JbGFja2luZyBgKyAxJyB0byBucnVsZXMsIEJpc29uIHJlcG9ydGVkIGFzIHVzZWxlc3MgYSB0b2tlbiBpZiBpdAotCXdhcyB1c2VkIHNvbGVseSB0byBzZXQgdGhlIHByZWNlZGVuY2Ugb2YgdGhlIGxhc3QgcnVsZS4uLgotCi0yMDAyLTA0LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS9iaXNvbi5jKyssIGRhdGEvYmlzb24uc2ltcGxlOiBEb24ndCBvdXRwdXQgdGhlIGN1cnJlbnQgZmlsZQotCW5hbWUgaW4gI2xpbmUsIHRvIGF2b2lkIHVzZWxlc3MgZGlmZnMgYmV0d2VlbiB0d28gaWRlbnRpY2FsCi0Jb3V0cHV0cyB1bmRlciBkaWZmZXJlbnQgbmFtZXMuCi0KLTIwMDItMDQtMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvY2xvc3VyZS5jLCBzcmMvcHJpbnQuYywgc3JjL3JlYWRlci5jLCBzcmMvcmVkdWNlLmM6Ci0JTm9ybWFsaXplIGxvb3BzIHRvIHVzaW5nIGA8IG5ydWxlcyArIDEnLCBub3QgYDw9IG5ydWxlcycuCi0KLTIwMDItMDQtMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBUT0RPOiBVcGRhdGUuCi0KLTIwMDItMDQtMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvb3V0cHV0LmMsIHNyYy9yZWFkZXIuYywgc3JjL3N5bXRhYi5jLCBzcmMvc3ltdGFiLmg6IFJlbmFtZQotCWJ1Y2tldC52YWx1ZSBhcyBidWNrZXQubnVtYmVyLgotCi0yMDAyLTA0LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2Nsb3N1cmUuYywgc3JjL2Rlcml2ZXMuYywgc3JjL2dyYW0uaCwgc3JjL2xhbHIuYywKLQkqIHNyYy9udWxsYWJsZS5jLCBzcmMvb3V0cHV0LmMsIHNyYy9wcmludC5jLCBzcmMvcHJpbnRfZ3JhcGguYywKLQkqIHNyYy9yZWFkZXIuYywgc3JjL3JlZHVjZS5jOiBMZXQgcnVsZV90LnJocyBwb2ludCBkaXJlY3RseSB0byB0aGUKLQlSSFMsIGluc3RlYWQgb2YgYmVpbmcgYW4gaW5kZXggaW4gUklURU1TLgotCi0yMDAyLTA0LTA0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogZG9jL2Jpc29uLnRleGluZm86IFVwZGF0ZSBjb3B5cmlnaHQgZGF0ZS4KLQkoUnBjYWxjIExleGVyLCBTeW1ib2xzLCBUb2tlbiBEZWNsKTogRG9uJ3QgYXNzdW1lIEFTQ0lJLgotCShTeW1ib2xzKTogV2FybiBhYm91dCBydW5uaW5nIEJpc29uIGluIG9uZSBjaGFyYWN0ZXIgc2V0LAotCWJ1dCBjb21waWxpbmcgYW5kL29yIHJ1bm5pbmcgaW4gYW4gaW5jb21wYXRpYmxlIG9uZS4KLQlXYXJuIGFib3V0IGNoYXJhY3RlciBjb2RlIDI1NiwgdG9vLgotCi0yMDAyLTA0LTAzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogc3JjL2Jpc29uLmRhdGEgKFlZU1RBQ0tfQUxMT0MpOiBEZXBlbmQgb24gd2hldGhlcgotCVlZRVJST1JfVkVSQk9TRSBpcyBub256ZXJvLCBub3Qgd2hldGhlciBpdCBpcyBkZWZpbmVkLgotCi0JTWVyZ2UgY2hhbmdlcyBmcm9tIGJpc29uLTFfMjktYnJhbmNoLgotCi0yMDAyLTAzLTIwICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCU1lcmdlIGZpeGVzIGZyb20gRGViaWFuIGJpc29uXzEuMzQtMS5kaWZmLgotCi0JKiBjb25maWd1cmUuaW4gKEFDX1BSRVJFUSk6IDIuNTMuCi0KLTIwMDItMDMtMjAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvY29uZmxpY3RzLmMgKGxvZ19yZXNvbHV0aW9uKTogQXJndW1lbnQgYHJlc29sdXRpb24nIGlzIGNvbnN0LgotCi0yMDAyLTAzLTE5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogc3JjL2Jpc29uLnNpbXBsZSAoWVlDT1BZKTogTmV3IG1hY3JvLgotCShZWVNUQUNLX1JFTE9DQVRFKTogVXNlIGl0LgotCVJlbW92ZSBUeXBlIGFyZzsgbm8gbG9uZ2VyIG5lZWRlZC4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCi0JKHl5bWVtY3B5KTogUmVtb3ZlOyBubyBsb25nZXIgbmVlZGVkLgotCi0JKiBNYWtlZmlsZS5hbSAoQVVUT01BS0VfT1BUSU9OUyk6IDEuNi4KLQkqIGRvYy9NYWtlZmlsZS5hbSAoQVVUT01BS0VfT1BUSU9OUyk6IFJlbW92ZS4KLQotMjAwMi0wMy0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlUZXN0IGFuZCBmaXggdGhlICNsaW5lIG91dHB1dHMuCi0KLQkqIHRlc3RzL2F0bG9jYWwuYXQgKEdDQyk6IE5ldy4KLQkqIHRlc3RzL3N5bmNsaW5lcy5hdCAoQVRfVEVTVF9TWU5DTElORSk6IE5ldyBtYWNyby4KLQkoUHJvbG9ndWUgc3luY2ggbGluZSwgJXVuaW9uIHN5bmNoIGxpbmUsIFBvc3Rwcm9sb2d1ZSBzeW5jaCBsaW5lKQotCShBY3Rpb24gc3luY2ggbGluZSwgRXBpbG9ndWUgc3luY2ggbGluZSk6IE5ldyB0ZXN0cy4KLQkqIHNyYy9yZWFkZXIuYyAocGFyc2VfdW5pb25fZGVjbCk6IERlZmluZSB0aGUgbXVzY2xlIHN0eXBlX2xpbmUuCi0JKiBkYXRhL2Jpc29uLnNpbXBsZSwgZGF0YS9iaXNvbi5jKys6IFVzZSBpdC4KLQotMjAwMi0wMy0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKCVub25hc3NvYyBhbmQgZW9mLCBVbnJlc29sdmVkIFNSIENvbmZsaWN0cykKLQkoU29sdmVkIFNSIENvbmZsaWN0cywgJWV4cGVjdCBub3QgZW5vdWdoLCAlZXhwZWN0IHJpZ2h0KQotCSglZXhwZWN0IHRvbyBtdWNoKTogTW92ZSB0by4uLgotCSogdGVzdHMvY29uZmxpY3RzLmF0OiB0aGlzIG5ldyBmaWxlLgotCi0yMDAyLTAzLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS9tNHN1Z2FyL200c3VnYXIubTQ6IFVwZGF0ZSBmcm9tIENWUyBBdXRvY29uZi4KLQkqIGRhdGEvYmlzb24uc2ltcGxlLCBkYXRhL2Jpc29uLmMrKzogSGFuZGxlIHRoZSBgI2RlZmluZScgcGFydCwgc28KLQl0aGF0IHdlIGNhbiBtb3ZlIHRvIGVudW1zIGZvciBpbnN0YW5jZS4KLQkqIHNyYy9vdXRwdXQuYyAodG9rZW5fZGVmaW5pdGlvbnNfb3V0cHV0KTogT3V0cHV0IGEgbGlzdCBvZgotCWB0b2tlbi1uYW1lLCB0b2tlbi1udW1iZXInIGluc3RlYWQgb2YgdGhlICNkZWZpbmUuCi0JKG91dHB1dF9za2VsZXRvbik6IE5hbWUgdGhpcyBsaXN0IGBiNF90b2tlbnMnLCBub3QgYGI0X3Rva2VuZGVmcycuCi0KLTIwMDItMDMtMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JVXNlIEdldHRleHQgMC4xMS4xLgotCi0yMDAyLTAzLTA5ICBSb2JlcnQgQW5pc2tvICA8cm9iZXJ0QGxyZGUuZXBpdGEuZnI+Ci0KLQkqIGRhdGEvYmlzb24uYysrOiBNYWtlIHRoZSB1c2VyIGFibGUgdG8gYWRkIG1lbWJlcnMgdG8gdGhlIGdlbmVyYXRlZAotCXBhcnNlciBieSBzdWJjbGFzc2luZy4KLQotMjAwMi0wMy0wNSAgUm9iZXJ0IEFuaXNrbyAgPHJvYmVydEBscmRlLmVwaXRhLmZyPgotCi0JKiBzcmMvcmVhZGVyLmMgKHJlYWRfYWRkaXRpb25uYWxfY29kZSk6IGBjJyBzaG91bGQgYmUgYW4gaW50ZWdlciwgbm90Ci0JYSBjaGFyYWN0ZXIuCi0JUmVwb3J0ZWQgYnkgTmljb2xhcyBUaXNzZXJhbmQgYW5kIE5pY29sYXMgQnVycnVzLgotCi0yMDAyLTAzLTA0ICBSb2JlcnQgQW5pc2tvICA8cm9iZXJ0QGxyZGUuZXBpdGEuZnI+Ci0KLQkqIHNyYy9yZWFkZXIuYzogV2FybiBhYm91dCBsYWNraW5nIHNlbWktY29sb25zLCBkbyBub3QgY29tcGxhaW4uCi0KLTIwMDItMDMtMDQgIFJvYmVydCBBbmlza28gIDxyb2JlcnRAbHJkZS5lcGl0YS5mcj4KLQotCSogZGF0YS9iaXNvbi5jKys6IFJlbW92ZSBhIGRlYnVnIGxpbmUuCi0KLTIwMDItMDMtMDQgIFJvYmVydCBBbmlza28gIDxyb2JlcnRAbHJkZS5lcGl0YS5mcj4KLQotCSogZGF0YS9iaXNvbi5jKys6IFVubWVyZ2UgdmFsdWUgYXMgeXlsdmFsIGFuZCB2YWx1ZSBhcyB5eXZhbC4gIFVubWVyZ2UKLQlsb2NhdGlvbiBhcyB5eWxsb2MgYW5kIGxvY2F0aW9uIGFzIHl5bG9jLiAgVXNlIFlZTExPQ19ERUZBVUxULCBhbmQKLQlwcm92aWRlIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KLQotMjAwMi0wMy0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHRlc3RzL2lucHV0LmF0IChJbnZhbGlkICRuLCBJbnZhbGlkIEBuKTogQWRkIHRoZSBlbmRpbmcgYDsnLgotCSogdGVzdHMvb3V0cHV0LmF0IChBVF9DSEVDS19PVVRQVVQpOiBMaWtld2lzZS4KLQkqIHRlc3RzL2hlYWRlcnMuYXQgKEFUX1RFU1RfQ1BQX0dVQVJEX0gpOiBEaXR0by4KLQkqIHRlc3RzL3NlbWFudGljLmF0IChQYXJzaW5nIEd1YXJkcyk6IFNpbWlsYXJseS4KLQkqIHNyYy9yZWFkZXIuYXQgKHJlYWRncmFtKTogQ29tcGxhaW4gaWYgdGhlIGxhc3QgcnVsZSBpcyBub3QgZW5kZWQKLQl3aXRoIGEgc2VtaS1jb2xvbi4KLQotMjAwMi0wMy0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy93YXJzaGFsbC5oLCBzcmMvd2Fyc2hhbGwuYyAoYml0bWF0cml4X3ByaW50KTogTW92ZSB0by4uLgotCSogc3JjL2Nsb3N1cmUuYzogaGVyZS4KLQkoc2V0X2ZpcnN0cyk6IFVzZSBiaXRzZXR2X3JlZmxleGl2ZV90cmFuc2l0aXZlX2Nsb3N1cmUgaW5zdGVhZCBvZgotCVJUQy4KLQkqIHNyYy93YXJzaGFsbC5oLCBzcmMvd2Fyc2hhbGwuYzogUmVtb3ZlLgotCSogdGVzdHMvc2V0cy5hdCAoQnJva2VuIENsb3N1cmUpOiBBZGp1c3QuCi0KLTIwMDItMDMtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9za2VsZXRvbik6IHRlbXBkaXIgaXMgY29uc3QuCi0JYnl0ZXNfcmVhZCBpcyB1bnVzZWQuCi0KLTIwMDItMDMtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBsaWIvYmJpdHNldC5oLCBsaWIvYml0c2V0LmMsIGxpYi9iaXRzZXQuaCwgbGliL2JpdHNldHYuYywKLQkqIGxpYi9iaXRzZXR2LmgsIGxpYi9lYml0c2V0LmMsIGxpYi9sYml0c2V0LmMsIGxpYi9zYml0c2V0LmM6Ci0JVXBkYXRlLgotCUZyb20gTWljaGFlbCBIYXllcy4KLQotMjAwMi0wMy0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9jbG9zdXJlLmMgKGNsb3N1cmUpOiBgcicgaXMgdW51c2VkLgotCi0yMDAyLTAzLTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogdGVzdHMvc2V0cy5hdCAoQnJva2VuIENsb3N1cmUpOiBBZGQgdGhlIGVuZGluZyBgOycuCi0JKiBzcmMvcmVhZGVyLmF0IChyZWFkZ3JhbSk6IENvbXBsYWluIGlmIGEgcnVsZSBpcyBub3QgZW5kZWQgd2l0aCBhCi0Jc2VtaS1jb2xvbi4KLQotMjAwMi0wMy0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9jb25mbGljdHMuYyAoc2V0X2NvbmZsaWN0cyk6IFVzZSBiaXRzZXRfZGlzam9pbnRfcC4KLQkoY291bnRfc3JfY29uZmxpY3RzKTogVXNlIGJpdHNldF9jb3VudC4KLQkqIHNyYy9yZWR1Y2UuYyAoaW5hY2Nlc3NhYmxlX3N5bWJvbHMpOiBEaXR0by4KLQkoYml0c19zaXplKTogUmVtb3ZlLgotCSogc3JjL3dhcnNoYWxsLmgsIHNyYy93YXJzaGFsbC5jOiBDb252ZXJ0IHRvIGJpdHNldHYuCi0KLTIwMDItMDMtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvY2xvc3VyZS5jLCBzcmMvY29uZmxpY3RzLmMsIHNyYy9sYWxyLmMsIHNyYy9wcmludC5jLAotCSogc3JjL3JlZHVjZS5jOiBSZW1vdmUgdGhlIGBiaXRzZXRfemVybydzIGZvbGxvd2luZyB0aGUKLQlgYml0c2V0X2NyZWF0ZSdzLCBhcyBub3cgaXQgaXMgcGVyZm9ybWVkIGJ5IHRoZSBsYXR0ZXIuCi0KLTIwMDItMDMtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBsaWIvYml0c2V0LmMsIGxpYi9iaXRzZXQuaCwgbGliL2JpdHNldHYuYywgbGliL2JpdHNldHYuaCwKLQkqIGxpYi9lYml0c2V0LmMsIGxpYi9lYml0c2V0LmgsIGxpYi9sYml0c2V0LmMsIGxpYi9sYml0c2V0LmgsCi0JKiBsaWIvc2JpdHNldC5jLCBsaWIvc2JpdHNldC5oLCBsaWIvYmJpdHNldC5oOiBVcGRhdGUgZnJvbSB0aGUKLQlsYXRlc3Qgc291cmNlcyBmcm9tIE1pY2hhZWwuCi0KLTIwMDItMDMtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dCk6IERvbid0IGZyZWUgdGhlIGdyYW1tYXIuCi0JKiBzcmMvcmVhZGVyLmMgKGdyYW1tYXJfZnJlZSk6IE5ldy4KLQkqIHNyYy9tYWluLmMgKG1haW4pOiBDYWxsIGl0IGFuZCBkb24ndCBmcmVlIHN5bXRhYiBoZXJlLgotCi0yMDAyLTAzLTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2xleC5jIChwYXJzZV9wZXJjZW50X3Rva2VuKTogQmUgc3VyZSB0byAwLWVuZCB0b2tlbl9idWZmZXIKLQliZWZvcmUgcmV0dXJuaW5nLgotCVJlcG9ydGVkIGJ5IEJlbm9pdCBQZXJyb3QuCi0KLTIwMDItMDMtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JVXNlIGJpdHNldCBvcGVyYXRpb25zIHdoZW4gcG9zc2libGUsIG5vdCBsb29wcyBvdmVyIGJpdHMuCi0KLQkqIHNyYy9jb25mbGljdHMuYyAoc2V0X2NvbmZsaWN0cywgY291bnRfc3JfY29uZmxpY3RzKTogVXNlCi0JYml0c2V0X29yLgotCSogc3JjL3ByaW50LmMgKHByaW50X3JlZHVjdGlvbnMpOiBVc2UgYml0c2V0X2FuZCwgYml0c2V0X2FuZG4uCi0JKiBzcmMvcmVkdWNlLmMgKHVzZWxlc3Nfbm9udGVybWluYWxzKTogRm9ybWF0dGluZyBjaGFuZ2VzLgotCSogc3JjL3dhcnNoYWxsLmMgKFRDKTogVXNlIGJpdHNldF9vci4KLQotMjAwMi0wMy0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9sYWxyLmgsIHNyYy9sYWxyLmMgKHRva2Vuc2V0c2l6ZSk6IFJlbW92ZSwgdW51c2VkLgotCSogc3JjL3N5c3RlbS5oIChCSVRTX1BFUl9XT1JELCBXT1JEU0laRSwgU0VUQklULCBSRVNFVEJJVCwgQklUSVNTRVQpOgotCURpdHRvLgotCi0yMDAyLTAzLTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2xhbHIuYyAoRik6IE5vdyBhIGJpdHNldCouCi0JQWRqdXN0IGFsbCBkZXBlbmRlbmNpZXMuCi0KLTIwMDItMDMtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvY29uZmxpY3RzLmMgKHNoaWZ0c2V0LCBsb29rYWhlYWRzZXQpOiBOb3cgYml0c2V0LgotCUFkanVzdCBhbGwgZGVwZW5kZW5jaWVzLgotCi0yMDAyLTAzLTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL0wwLmMsIHNyYy9MUjAuaCAobnN0YXRlcyk6IEJlIHNpemVfdC4KLQlBZGp1c3QgY29tcGFyaXNvbnMgKHNpZ25lZCB2cyB1bnNpZ25lZCkuCi0JKiBzcmMvY29uZmxpY3MuYywgc3JjL2xhbHIuYywgc3JjL2xhbHIuaCwgc3JjL291dHB1dC5jIChMQSk6IE5vdyBhCi0JYml0c2V0Ki4KLQlBZGp1c3QgYWxsIGRlcGVuZGVuY2llcy4KLQotMjAwMi0wMy0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9jbG9zdXJlLmMgKGZpcnN0cyk6IE5vdywgYWxzbyBhIGJpdHNldC4KLQlBZGp1c3QgYWxsIGRlcGVuZGVuY2llcy4KLQkodmFyc2V0c2l6ZSk6IFJlbW92ZSwgbm93IHVudXNlZC4KLQkqIHNyYy93YXJzaGFsbC5oLCBzcmMvd2Fyc2hhbGwuYzogTm93IHdvcmsgb24gYXJyYXlzIG9mIGJpdHNldHMuCi0KLTIwMDItMDMtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvcHJpbnQuYzogQ29udmVydCB0byB1c2UgYml0c2V0LmgsIG5vdCBoYW5kIGNvZGVkIGl0ZXJhdGlvbnMKLQlvdmVyIGludHMuCi0KLTIwMDItMDMtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvcmVkdWNlLmM6IENvbnZlcnQgdG8gdXNlIGJpdHNldC5oLCBub3QgaGFuZCBjb2RlZCBCU2V0LgotCi0yMDAyLTAzLTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2Nsb3N1cmUuYyAocnVsZXNldCk6IEJlIGEgYml0c2V0LgotCShydWxlc2V0c2l6ZSk6IFJlbW92ZS4KLQotMjAwMi0wMy0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGxpYi9iaXRzZXQtaW50LmgsIGxpYi9iaXRzZXQuYywgbGliL2JpdHNldC5oLCBsaWIvYml0c2V0di5jLAotCSogbGliL2JpdHNldHYuaCwgbGliL2ViaXRzZXQuYywgbGliL2ViaXRzZXQuaCwgbGliL2xiaXRzZXQuYywKLQkqIGxpYi9sYml0c2V0LmgsIGxpYi9zYml0c2V0LmMsIGxpYi9zYml0c2V0Lmg6IE5ldy4KLQkqIHNyYy9jbG9zdXJlLmMgKGZkZXJpdmVzKTogQmUgYW4gYXJyYXkgb2YgYml0c2V0cy4KLQotMjAwMi0wMi0yOCAgUm9iZXJ0IEFuaXNrbyAgPHJvYmVydEBscmRlLmVwaXRhLmZyPgotCi0JKiBkYXRhL2Jpc29uLmMrKzogTWVyZ2UgdGhlIHR3byBnZW5lcmF0ZWQgaGVhZGVycy4gIEluc2VydCBhIGNvcHlyaWdodAotCW5vdGljZSBpbiBlYWNoIG91dHB1dCBmaWxlLgotCi0yMDAyLTAyLTI4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS9iaXNvbi5jKys6IENvcHkgdGhlIHByb2xvZ3VlIG9mIGJpc29uLnNpbXBsZSB0byBmZXRjaAotCXVzZWZ1bCBNNCBkZWZpbml0aW9ucywgc3VjaCBhcyBiNF9oZWFkZXJfZ3VhcmQuCi0KLTIwMDItMDItMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvZ2V0YXJncy5jICh2ZXJzaW9uKTogR2l2ZSB0aGUgbmFtZSBvZiB0aGUgYXV0aG9ycywgYW5kIHVzZSBhCi0JdHJhbnNsYXRvciBmcmllbmRseSBzY2hlbWUgZm9yIHRoZSBiZ3IKLQljb3B5cmlnaHQgbm90aWNlLgotCi0yMDAyLTAyLTI1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL291dHB1dC5jIChoZWFkZXJfb3V0cHV0KTogUmVtb3ZlLCBub3cgaGFuZGxlZCBjb21wbGV0ZWx5IHZpYQotCU00LgotCi0yMDAyLTAyLTI1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogbTQvbTQubTQ6IE5ldywgZnJvbSBDVlMgQXV0b2NvbmYuCi0JKiBjb25maWd1cmUuaW46IEludm9rZSBpdC4KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3NrZWxldG9uKTogVXNlIGl0cyByZXN1bHQgaW5zdGVhZCBvZiB0aGUKLQloYXJkIGNvZGVkIG5hbWUuCi0KLTIwMDItMDItMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBsaWIvdGVtcG5hbWUuYywgbGliL21rc3RlbXAuYywgbTQvbWtzdGVtcC5tNDogTmV3LCBzdG9sZW4gZnJvbQotCUZpbGV1dGlscyA0LjEuNS4KLQkqIGNvbmZpZ3VyZS5pbjogSW52b2tlIFVUSUxTX0ZVTkNfTUtTVEVNUC4KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3NrZWxldG9uKTogVXNlIG1rc3RlbXAgdG8gY3JlYXRlIGEgcmVhbAotCXRlbXBvcmFyeSBmaWxlLgotCU1vdmUgdGhlIGZpbGxpbmcgb2YgYHNrZWxldG9uJyBhbmQgaXRzIG11c2NsZSB0by4uLgotCShwcmVwYXJlKTogaGVyZS4KLQkob3V0cHV0KTogTW92ZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgcHJvbG9ndWUgbXVzY2xlIHRvLi4uCi0JKHByZXBhcmUpOiBoZXJlLgotCSogc3JjL3N5c3RlbS5oIChERUZBVUxUX1RNUERJUik6IE5ldy4KLQotMjAwMi0wMi0xNCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQlSZW1vdmUgdGhlIHN1cHBvcnQgZm9yIEMrKyBuYW1lc3BhY2UgY2xlYW5saW5lc3M7IGl0IHdhcwotCWNhdXNpbmcgbW9yZSBwcm9ibGVtcyB0aGFuIGl0IHdhcyBjdXJpbmcsIHNpbmNlIGl0IGRpZG4ndCB3b3JrCi0JcHJvcGVybHkgb24gc29tZSBub25zdGFuZGFyZCBDKysgY29tcGlsZXJzLiAgVGhpcyBjYW4gd2FpdAotCWZvciBhIHByb3BlciBDKysgcGFyc2VyLgotCi0JKiBORVdTOiBEb2N1bWVudCB0aGlzLgotCSogZG9jL2Jpc29uLnRleGluZm8gKEJpc29uIFBhcnNlciwgRGVidWdnaW5nKTogUmVtb3ZlIHNwZWNpYWwgbWVudGlvbgotCW9mIEMrKywgYXMgaXQncyB0cmVhdGVkIGxpa2UgQyBub3cuCi0JKiBzcmMvYmlzb24uc2ltcGxlIChZWVNURCk6IFJlbW92ZS4KLQkoWVlTSVpFX1QsIFlZRlBSSU5URiwgWVlQQVJTRV9QQVJBTV9BUkcsIFlZUEFSU0VfUEFSQU1fREVDTCk6Ci0JVHJlYXQgQysrIGp1c3QgbGlrZSBTdGFuZGFyZCBDIGluc3RlYWQgb2YgdHJ5aW5nIHRvIHN1cHBvcnQKLQluYW1lc3BhY2UgY2xlYW5saW5lc3MuCi0KLTIwMDItMDItMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChlbHNlKTogQWRqdXN0IHRvIEFuZHJlYXMnIGNoYW5nZS4KLQotMjAwMi0wMi0xNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGxpYi9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IFNoaXAgc3Rybmxlbi5jLgotCi0yMDAyLTAyLTEzICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgotCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9ydWxlX2RhdGEpOiBEb24ndCBvdXRwdXQgTlVMTCwgaXQgbWlnaHQKLQlub3QgYmUgZGVmaW5lZCB5ZXQuCi0KLTIwMDItMDItMTEgIFJvYmVydCBBbmlza28gIDxyb2JlcnRAbHJkZS5lcGl0YS5mcj4KLQotCSogZGF0YS9iaXNvbi5jKysgKFlZREVCVUcsIFlZRVJST1JfVkVSQk9TRSk6IEFmdGVyIHRoZSBwcm9sb2d1ZS4KLQkoQ29weXJpZ2h0IG5vdGljZSk6IFVwZGF0ZS4KLQotMjAwMi0wMi0xMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKCVub25hc3NvYyBhbmQgZW9mKTogRG9uJ3QgaW5jbHVkZQotCW5vbnBvcnRhYmxlIGhlYWRlcnMuCi0KLTIwMDItMDItMDggIFJvYmVydCBBbmlza28gIDxyb2JlcnRAbHJkZS5lcGl0YS5mcj4KLQotCSogZGF0YS9iaXNvbi5jKys6IENvcnJlY3QgZXJyb3IgcmVjb3ZlcnkuICBNYWtlIHRoZSB1c2VyIGFibGUgdG8KLQlpbml0aWFsaXplIHRoZSBzdGFydGluZyBsb2NhdGlvbi4KLQotMjAwMi0wMi0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHRlc3RzL2lucHV0LmF0OiBOZXcuCi0KLTIwMDItMDItMDcgIFJvYmVydCBBbmlza28gIDxyb2JlcnRAbHJkZS5lcGl0YS5mcj4KLQotCSogZGF0YS9iaXNvbi5jKys6IFJlcGxhY2Ugc29tZSBkaXJlY3QgbTQgZXhwYW5zaW9ucyBieSBjb25zdGFudHMuICBCZQotCW1vcmUgY29uc2lzdGVudCB3aGVuIG5hbWluZyBtZXRob2RzIGFuZCB2YXJpYWJsZXMuICBQdXQgcHJlcHJvY2Vzc29yCi0JZGlyZWN0aXZlcyBhcm91bmQgdGFibGVzIG9ubHkgbmVlZGVkIGZvciBkZWJ1Z2dpbmcuCi0KLTIwMDItMDItMDcgIFJvYmVydCBBbmlza28gIDxyb2JlcnRAbHJkZS5lcGl0YS5mcj4KLQotCSogZGF0YS9iaXNvbi5jKysgKHl5OjpiNF9uYW1lOjpwcmludF8pOiBOZXcgbWV0aG9kLCByZXBsYWNlcyB5eXByaW50IGluCi0JQysrIHBhcnNlcnMuCi0JKHl5OjpiNF9uYW1lOjpwYXJzZSk6IFVzZSBwcmludF8uCi0KLTIwMDItMDItMDcgIFJvYmVydCBBbmlza28gIDxyb2JlcnRAbHJkZS5lcGl0YS5mcj4KLQotCSogZGF0YS9iaXNvbi5jKysgKHl5OjpiNF9uYW1lOjpwYXJzZSk6IEVycm9yIHJlY292ZXJ5IGlzIGJhY2suCi0KLTIwMDItMDItMDcgIFJvYmVydCBBbmlza28gIDxyb2JlcnRAbHJkZS5lcGl0YS5mcj4KLQotCSogZGF0YS9iaXNvbi5jKysgKHl5OjpiNF9uYW1lOjplcnJvcl8pOiBOZXcgbWV0aG9kLCByZXBsYWNlcyB5eWVycm9yIGluCi0JQysrIHBhcnNlcnMuCi0JKHl5OjpiNF9uYW1lOjpwYXJzZSk6IEJ1aWxkIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMsIGFuZCB1c2UgZXJyb3JfLgotCi0yMDAyLTAyLTA2ICBSb2JlcnQgQW5pc2tvICA8cm9iZXJ0QGxyZGUuZXBpdGEuZnI+Ci0KLQkqIGRhdGEvYmlzb24uYysrOiBGaXggbTQgcXVvdGluZyBpbiBjb21tZW50cy4KLQotMjAwMi0wMi0wNiAgUm9iZXJ0IEFuaXNrbyAgPHJvYmVydEBscmRlLmVwaXRhLmZyPgotCi0JKiBkYXRhL2Jpc29uLmMrKzogQWRqdXN0IHRoZSBwYXJzZXIgY29kZS4gIEZpeCBzb21lIG11c2NsZXMgdGhhdCB3ZXJlCi0Jbm90IGV4cGFuZGVkIGJ5IG00LgotCi0yMDAyLTAyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogZGF0YS9iaXNvbi5jKys6IEFkanVzdCB0byB0aGUgTTQgYmFjayBlbmQuCi0JTW9yZSBpcyBjZXJ0YWlubHkgbmVlZGVkLgotCi0yMDAyLTAyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCUdpdmUgYSB0cnkgdG8gTTQgYXMgYSBiYWNrIGVuZC4KLQotCSogbGliL3JlYWRwaXBlLmM6IE5ldywgZnJvbSB3ZGlmZi4KLQkqIHNyYy9NYWtlZmlsZS5hbSAoREVGUyk6IERlZmluZSBQS0dEQVRBRElSLCBub3QgQklTT05fU0lNUExFIGFuZAotCUJJU09OX0hBSVJZLgotCSogc3JjL3N5c3RlbS5oIChCSVNPTl9IQUlSWSwgQklTT05fU0lNUExFKTogUmVtb3ZlIHRoZSBET1MgYW5kIFZNUwotCXNwZWNpZmljIHZhbHVlcy4gIE5vdyBpdCBpcyBtNCB0aGF0IHBlcmZvcm1zIHRoZSBsb29rdXAuCi0JKiBzcmMvcGFyc2Utc2tlbC55OiBSZW1vdmUuCi0JKiBzcmMvbXVzY2xlX3RhYi5jLCBzcmMvbXVzY2xlX3RhYi5oIChtdXNjbGVzX200X291dHB1dCk6IE5ldy4KLQkqIHNyYy9vdXRwdXQuYyAoYWN0aW9uc19vdXRwdXQsIGd1YXJkc19vdXRwdXQpCi0JKHRva2VuX2RlZmluaXRpb25zX291dHB1dCk6IE5vIGxvbmdlciBrZWVwcyB0cmFjayBvZiB0aGUgb3V0cHV0Ci0JbGluZSBudW1iZXIsIGhlbmNlIHJlbW92ZSB0aGUgc2Vjb25kIGFyZ3VtZW50LgotCShndWFyZHNfb3V0cHV0KTogQ2hlY2sgYWdhaW5zdCB0aGUgZ3VhcmQgbWVtYmVyIG9mIGEgcnVsZSwgbm90IHRoZQotCWFjdGlvbiBtZW1iZXIuCi0JQWRqdXN0IGNhbGxlcnMuCi0JKG91dHB1dF9za2VsZXRvbik6IERvbid0IGxvb2sgZm9yIHRoZSBza2VsZXRvbiBsb2NhdGlvbiwgbGV0IG00IGRvCi0JdGhhdC4KLQlDcmVhdGUgYC90bXAvbXVzY2xlcy5tNCcuICBUaGlzIGlzIHRlbXBvcmFyeSwgYSBwcm9wZXIgdGVtcG9yYXJ5Ci0JZmlsZSB3aWxsIGJlIHVzZWQuCi0JSW52b2tlIGBtNCcgb24gbTRzdWdhci5tNCwgbXVzY2xlcy5tNCwgYW5kIHRoZSBza2VsZXRvbi4KLQkocHJlcGFyZSk6IEdpdmVuIHRoYXQgZm9yIHRoZSB0aW1lIGJlaW5nIGNoYW5nZXN5bnRheCBpcyBub3QKLQl1c2FibGUgaW4gTTQsIHJlbmFtZSB0aGUgbXVzY2xlcyB1c2luZyBgLScgdG8gYF8nLgotCURlZmluZSBgZGVmaW5lc19mbGFnJywgYG91dHB1dF9wYXJzZXJfbmFtZScgYW5kIGBvdXRwdXRfaGVhZGVyX25hbWUnLgotCSogc3JjL291dHB1dC5oIChhY3Rpb25zX291dHB1dCwgZ3VhcmRzX291dHB1dCkKLQkodG9rZW5fZGVmaW5pdGlvbnNfb3V0cHV0KTogQWRqdXN0IHByb3RvdHlwZXMuCi0JKiBzcmMvc2Nhbi1za2VsLmw6IEluc3RlYWQgb2Ygc2Nhbm5pbmcgdGhlIHNrZWxldG9ucywgaXQgbm93Ci0JcHJvY2Vzc2VzIHRoZSBvdXRwdXQgb2YgbTQ6IGBfX29saW5lX18nIGFuZCBgI291dHB1dCcuCi0JKiBkYXRhL2Jpc29uLnNpbXBsZTogQWRqdXN0IHRvIGJlIHVzZWQgYnkgTTQoc3VnYXIpLgotCSogdGVzdHMvTWFrZWZpbGUuYW06IFVzZSBjaGVja19TQ1JJUFRTIHRvIG1ha2Ugc3VyZSBgYmlzb24nIGlzIHVwCi0JdG8gZGF0ZS4KLQkqIHRlc3RzL2Jpc29uLmluOiBVc2UgdGhlIHNlY3JldGUgZW52dmFyIGBCSVNPTl9QS0dEQVRBRElSJwotCWluc3RlYWQgb2YgdGhlIGRlYWQgYEJJU09OX1NJTVBMRScgYW5kIGBCSVNPTl9IQUlSWScuCi0JKiBkYXRhL200c3VnYXIvbTRzdWdhci5tNCwgZGF0YS9tNHN1Z2FyL3ZlcnNpb24ubTQ6IE5ldywKLQlzaGFtZWxlc3NseSBzdG9sZW4gZnJvbSBDVlMgQXV0b2NvbmYuCi0KLTIwMDItMDItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBsaWIvaGFzaC5jLCBsaWIvaGFzaC5oOiBSZXBsYWNlIHdpdGggRmlsZXV0aWxzIDQuMSdzIHZlcnNpb24uCi0JKiBjb25maWd1cmUuaW46IENoZWNrIGZvciB0aGUgZGVjbGFyYXRpb25zIG9mIGZyZWUgYW5kIG1hbGxvYy4KLQkqIHNyYy9tdXNjbGVfdGFiLmM6IEFkanVzdC4KLQotMjAwMi0wMi0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9tdXNjbGVfdGFiLmMgKG11c2NsZV9pbml0KTogRG9uJ3QgZGVmYXVsdCB0byBOVUxMIG11c2NsZQotCXdoaWNoIGhhdmUgbm8gdmFsdWVzLgotCi0yMDAyLTAyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2Jpc29uLnNpbXBsZSwgc3JjL2Jpc29uLmhhaXJ5LCBzcmMvYmlzb24uYysrOiBNb3ZlIHRvLi4uCi0JKiBkYXRhLzogaGVyZS4KLQotMjAwMi0wMS0yOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIHNyYy9iaXNvbi5zaW1wbGUgKFlZU0laRV9UKTogRG8gbm90IGRlZmluZSBtZXJlbHkgYmVjYXVzZQotCVlZU1RBQ0tfVVNFX0FMTE9DQSBpcyBub256ZXJvIG9yIGFsbG9jYSBvciBfQUxMT0NBX0ggYXJlIGRlZmluZWQuCi0JT24gc29tZSBwbGF0Zm9ybXMsIDxhbGxvY2EuaD4gZG9lcyBub3QgZGVjbGFyZSBZWVNURCAoc2l6ZV90KS4KLQotMjAwMi0wMS0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlGaXggYCVub25hc3NvYyBhbmQgZW9mJy4KLQotCSogc3JjL3N0YXRlLmMgKGVycnNfZHVwKTogQWFhYWghICBUaGUgZmFpbHVyZSB3YXMgZHVlIHRvIGJ5dGVzCi0Jd2hpY2ggd2VyZSBub3QgcHJvcGVybHkgY29waWVkISAgUmVwbGFjZQotCW1lbWNweSAocmVzLT5lcnJzLCBzcmMtPmVycnMsIHNyYy0+bmVycnMpOwotCXdpdGgKLQltZW1jcHkgKHJlcy0+ZXJycywgc3JjLT5lcnJzLCBzcmMtPm5lcnJzICogc2l6ZW9mIChzcmMtPmVycnNbMF0pKTsKLQkhISEKLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKCVub25hc3NvYyBhbmQgZW9mKTogQWRqdXN0IHRvIG5ld2VzdAotCUF1dG90ZXN0OiBgLicgaXMgbm90IGluIHRoZSBQQVRILgotCi0yMDAyLTAxLTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogdGVzdHMvc2V0cy5hdCAoQVRfRVhUUkFDVF9TRVRTKTogTmV3LgotCShOdWxsYWJsZSk6IFVzZSBpdC4KLQkoRmlyc3RzKTogTmV3LgotCi0yMDAyLTAxLTI2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogdGVzdHMvYWN0aW9ucy5hdCwgdGVzdHMvY2FsYy5hdCwgdGVzdHMvaGVhZGVycy5hdCwKLQkqIHRlc3RzL3RvcnR1cmUuYXQ6IEFkanVzdCB0byB0aGUgbmV3ZXN0IEF1dG90ZXN0IHdoaWNoIG5vIGxvbmdlcgotCWZvcmNlcyBgLicgaW4gdGhlIFBBVEguCi0KLTIwMDItMDEtMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiB0ZXN0cy9yZWdyZXNzaW9uLmF0ICglbm9uYXNzb2MgYW5kIGVvZik6IE5ldy4KLQlTdWdnZXN0ZWQgYnkgUm9iZXJ0IEFuaXNrby4KLQotMjAwMi0wMS0yNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlCaXNvbiBkdW1wcyBjb3JlIHdoZW4gdHJ5aW5nIHRvIGNvbXBsYWluIGFib3V0IGJyb2tlbiBpbnB1dCBmaWxlcy4KLQlSZXBvcnRlZCBieSBDcmlzIHZhbiBQZWx0LgotCi0JKiBzcmMvbGV4LmMgKHBhcnNlX3BlcmNlbnRfdG9rZW4pOiBCZSBzdXJlIHRvIHNldCB0b2tlbl9idWZmZXIuCi0JKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChJbnZhbGlkIGlucHV0OiAxLCBJbnZhbGlkIGlucHV0OiAyKTogTWVyZ2UKLQlpbnRvLi4uCi0JKEludmFsaWQgaW5wdXRzKTogU3RyZW5ndGhlbjogZXhlcmNpc2UgcGFyc2VfcGVyY2VudF90b2tlbi4KLQotMjAwMi0wMS0yNCAgUm9iZXJ0IEFuaXNrbyAgPHJvYmVydC5hbmlza29AZXBpdGEuZnI+Ci0KLQkqIHNyYy9NYWtlZmlsZS5hbTogQWRkIGJpc29uLmMrKy4KLQkqIHNyYy9iaXNvbi5jKys6IE5ldyBza2VsZXRvbi4KLQotMjAwMi0wMS0yMSAgUGFvbG8gQm9uemluaSA8Ym9uemluaUBnbnUub3JnPgotCi0JKiBwby9pdC5wbzogTmV3LgotCi0yMDAyLTAxLTIxICBLZWVzIFplZWxlbmJlcmcgIDxremxnQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogc3JjL2ZpbGVzLmMgKHNrZWxldG9uX2ZpbmQpIFtNU0RPU106IEZpeCBjcCBkZWZpbml0aW9uLgotCi0yMDAyLTAxLTIwICBNYXJjIEF1dHJldCAgPG1hcmNAZ251Lm9yZz4KLQotCSogc3JjL2ZpbGVzLmMgKGNvbXB1dGVfb3V0cHV0X2ZpbGVfbmFtZXMpOiBGaXgKLQotMjAwMi0wMS0yMCAgTWFyYyBBdXRyZXQgIDxtYXJjQGdudS5vcmc+Ci0KLQkqIHRlc3RzL291dHB1dC5hdDogTmV3IHRlc3QuCi0JKiBzcmMvZmlsZXMuYyAoY29tcHV0ZV9iYXNlX25hbWVzKTogRG9uJ3QgbWFwIGV4dGVuc2lvbnMgd2hlbgotCXRoZSBZQUNDIGZsYWcgaXMgc2V0LCB1c2UgZGVmYXVsdHMuCi0JUmVwb3J0ZWQgYnkgRXZnZW55IFN0YW1idWxjaGlrLgotCi0yMDAyLTAxLTIwICBNYXJjIEF1dHJldCAgPG1hcmNAZ251Lm9yZz4KLQotCSogc3JjL3N5c3RlbS5oOiBOZWVkIHRvIGRlZmluZSBfX2F0dHJpYnV0ZV9fIGF3YXkgZm9yIG5vbi1HQ0MKLQljb21waWxlcnMgYXMgd2VsbCAoaS5lLiwgdGhlIHZlbmRvciBDIGNvbXBpbGVyKS4KLQlTdWdnZXN0ZWQgYnkgQWxiZXJ0IENoaW4tQS1Zb3VuZy4KLQotMjAwMi0wMS0xMSAgVGltIFZhbiBIb2xkZXIgIDx0aW0udmFuLmhvbGRlckBwYW5kb3JhLmJlPgotCi0JKiBsaWIvaGFzaC5oLCBsaWIvaGFzaC5jOiBSZW5hbWVkIF9fUCB0byBQQVJBTVMgYW5kIHVzZWQgdGhlCi0JY2Fub25pY2FsIGRlZmluaXRpb24uCi0JKiBzcmMvc3lzdGVtLmg6IFVzZSB0aGUgY2Fub25pY2FsIGRlZmluaXRpb24gZm9yIFBBUkFNUyAoYXZvaWRzCi0JYSBjb25mbGljdCB3aXRoIHRoZSBtYWNybyBmcm9tIGxpYi9oYXNoLmgpLgotCi0yMDAyLTAxLTExICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogY29uZmlndXJlLmluOiBVc2UgQUNfRlVOQ19TVFJOTEVOLgotCUZpeGVzIHRoZSBmYWlsdXJlcyBvYnNlcnZlZCBvbiBBSVggNC4zIGJ5IEguTWVyaWpuIEJyYW5kLgotCi0yMDAyLTAxLTA5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2ZpbGVzLmMsIHNyYy9maWxlcy5oIChvdXRwdXRfaW5maXgpOiBOZXcuCi0JKHRhYl9leHRlbnNpb24pOiBSZW1vdmUuCi0JKGNvbXB1dGVfYmFzZV9uYW1lcyk6IENvbXB1dGUgdGhlIGZvcm1lciwgZHJvcCB0aGUgbGF0dGVyLgotCSogc3JjL291dHB1dC5jIChwcmVwYXJlKTogSW5zZXJ0IHRoZSBtdXNjbGVzIGBvdXRwdXQtaW5maXgnLCBhbmQKLQlgb3V0cHV0LXN1ZmZpeCcuCi0JKiBzcmMvcGFyc2Utc2tlbC55IChzdHJpbmcsIHN0cmluZy4xKTogTmV3LgotCShzZWN0aW9uLmhlYWRlcik6IFVzZSBpdC4KLQkoc2VjdGlvbi55YWNjKTogUmVtb3ZlLgotCShwcmVmaXgpOiBSZW1vdmUgdG9vLgotCSogc3JjL3NjYW4tc2tlbC5sOiBBZGp1c3QuCi0JKiBzcmMvYmlzb24uc2ltcGxlLCBzcmMvYmlzb24uaGFpcnk6IEFkanVzdC4KLQotMjAwMi0wMS0wOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGNvbmZpZ3VyZS5pbiAoV0VSUk9SX0NGTEFHUyk6IENvbXB1dGUgaXQuCi0JKiBzcmMvTWFrZWZpbGUuYW0gKENGTEFHUyk6IFBhc3MgaXQuCi0JKiB0ZXN0cy9hdGxvY2FsLmluIChDRkxBR1MpOiBJZGVtLgotCSogc3JjL2ZpbGVzLmM6IEZpeCBhIGZldyB3YXJuaW5ncy4KLQkoZ2V0X2V4dGVuc2lvbl9pbmRleCk6IFJlbW92ZSwgdW51c2VkLgotCi0yMDAyLTAxLTA4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2dldGFyZ3MuYyAoQVNfRklMRV9OQU1FKTogTmV3LgotCShnZXRhcmdzKTogVXNlIGl0IHRvIGNvbnZlcnQgRE9TaXNoIGZpbGUgbmFtZXMuCi0JKiBzcmMvZmlsZXMuYyAoYmFzZV9uYW1lKTogUmVuYW1lIGFzIGZ1bGxfYmFzZV9uYW1lIHRvIGF2b2lkCi0JY2xhc2hlcyB3aXRoIGBiYXNlX25hbWUgKCknLgotCShmaWxlbmFtZV9zcGxpdCk6IE5ldy4KLQkoY29tcHV0ZV9iYXNlX25hbWVzKTogTi10aCByZXdyaXRlLCB1c2luZyBmaWxlbmFtZV9zcGxpdC4KLQotMjAwMi0wMS0wOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGxpYi9iYXNlbmFtZS5jLCBsaWIvZGlybmFtZS5oLCBsaWIvZGlybmFtZS5jLCBsaWIvbWVtcmNoci5jOgotCU5ldywgc3RvbGVuIGZyb20gdGhlIEZpbGV1dGlscyA0LjEuCi0JKiBsaWIvTWFrZWZpbGUuYW0gKGxpYmJpc29uX2FfU09VUkNFUyk6IEFkanVzdC4KLQkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiBtZW1yY2hyLCBhbmQgb2YgaXRzCi0JcHJvdG90eXBlLgotCi0yMDAyLTAxLTA3ICBUaW0gVmFuIEhvbGRlciAgPHRpbS52YW4uaG9sZGVyQHBhbmRvcmEuYmU+Ci0KLQkqIGxpYi9oYXNoLmggKF9fUCk6IEFkZGVkIGRlZmluaXRpb24gZm9yIHRoaXMgbWFjcm8uCi0JKiBzcmMvTWFrZWZpbGUuYW06IEFkZCBwYXJzZS1za2VsLmMgYW5kIHNjYW4tc2tlbC5jIHRvCi0JQlVJTFRfU09VUkNFUywgdG8gZW5zdXJlIHRoZXkgYXJlIGdlbmVyYXRlZCBmaXJzdC4KLQkqIHNyYy9wYXJzZS1za2VsLnk6IFVzZSBZWUVSUk9SX1ZFUkJPU0UgaW5zdGVhZCBvZgotCSVlcnJvci12ZXJib3NlIHRvIGFsbG93IGJvb3RzdHJhcHBpbmcgd2l0aCBiaXNvbiAxLjMweC4KLQotMjAwMi0wMS0wNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9yZWFkZXIuYyAocGFyc2VfYnJhY2VzKTogRG9uJ3QgZmV0Y2ggdGhlIG5leHQgY2hhciwgdGhlCi0JY29udmVudGlvbiBpcyB0byBmZXRjaCBvbiBlbnRyeS4KLQkqIHRlc3RzL3RvcnR1cmUuYXQgKEdOVSBDaW0gR3JhbW1hcik6IFJlaW50cm9kdWNlIHRoZWlyIHdlaXJkCi0JJ3N3aXRjaCcgd2l0aG91dCBhIGZvbGxvd2luZyBzZW1pY29sb24uCi0JKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChicmFjZXMgcGFyc2luZyk6IE5ldy4KLQotMjAwMi0wMS0wNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlCaXNvbiBpcyBkZWFkIHdyb25nIGluIGl0cyBSUiBjb25mbGljdCByZXBvcnRzLgotCi0JKiB0ZXN0cy90b3J0dXJlLmF0IChHTlUgQ2ltIEdyYW1tYXIpOiBOZXcuCi0JKiBzcmMvY29uZmxpY3RzLmMgKGNvdW50X3JyX2NvbmZsaWN0cyk6IEZpeC4KLQotMjAwMi0wMS0wNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlDcmVhdGluZyBwYWNrYWdlLm00IGZyb20gY29uZmlndXJlLmFjIGNhdXNlcyB0b28gbWFueSBwcm9ibGVtcy4KLQotCSogdGVzdHMvTWFrZWZpbGUuYW0gKHBhY2thZ2UubTQpOiBDcmVhdGUgaXQgYnkgaGFuZCwKLQlBQ19DT05GSUdfVEVTVERJUiBubyBsb25nZXIgZG9lcyBpbiB0aGUgbW9zdCByZWNlbnQgQ1ZTIEF1dG9jb25mLgotCi0yMDAyLTAxLTA2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL01ha2VmaWxlLmFtIChiaXNvbl9TT1VSQ0VTKTogQWRkIHBhcnNlLXNrZWwuaCBhbmQKLQlza2VsZXRvbi5oLgotCi0yMDAyLTAxLTA0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogZG9jL2Jpc29uLnRleGluZm8gKERlYnVnZ2luZyk6Ci0JUmVtb3ZlIFlZU1RERVJSOyBpdCdzIG5vIGxvbmdlciBkZWZpbmVkIG9yIHVzZWQuCi0JQWxzbywgcy9jc3RkaW8uaC9jc3RkaW8vLgotCi0yMDAyLTAxLTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogdGVzdHMvYmlzb24uaW4sIHRlc3RzL2F0bG9jYWwuaW46IEFkanVzdCB0byBDVlMgQXV0b2NvbmYuCi0KLTIwMDItMDEtMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvcGFyc2Utc2tlbC55IChwcm9jZXNzX3NrZWxldG9uKTogRG9uJ3QgYmluZCB0aGUgcGFyc2VyJ3MKLQl0cmFjaW5nIGNvZGUgdG8gLS10cmFjZSwgd2FpdCBmb3IgYSBiZXR0ZXIgLS10cmFjZSBvcHRpb24sIHdpdGgKLQlhcmdzLgotCi0yMDAyLTAxLTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2Jpc29uLnNpbXBsZSAoWVlTVERFUlIpOiBSZW1vdmUsIHJlcGxhY2UgYHN0ZGVycicuCi0JVGhlIElTTyBDKysgc3RhbmRhcmQgaXMgZXh0cmVtZWx5IGNsZWFyIGFib3V0IGl0OiBzdGRlcnIgaXMKLQljb25zaWRlcmVkIGEgbWFjcm8sIG5vdCBhIHJlZ3VsYXIgc3ltYm9sIChzZWUgdGFibGUgOTQgYEhlYWRlcgotCTxjc3RkaW8+IHN5bm9wc2lzJywgW2xpYi5jLmZpbGVzXSAyNy44LjIgQyBMaWJyYXJ5IGZpbGVzKS4KLQlUaGVyZWZvcmUgc3RkOjogZG9lcyBub3QgYXBwbHkgdG8gaXQuICBJdCBzdGlsbCBkb2VzIHdpdGggZnByaW50Zi4KLQlBbHNvLCBzL2NzdGRpby5oL2NzdGRpby8uCi0KLTIwMDItMDEtMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBsaWIvcXVvdGVhcmcuYzogVXNlIGAjaW5jbHVkZSAiLi4uIicgaW5zdGVhZCBvZiBgI2luY2x1ZGUgPC4uLj4nCi0JZm9yIG5vbiBzeXN0ZW0gaGVhZGVycy4KLQotMjAwMi0wMS0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlFcXVpcCB0aGUgc2tlbGV0b24gY2hhaW4gd2l0aCBsb2NhdGlvbiB0cmFja2luZywgcnVudGltZSB0cmFjZSwKLQlwdXJlIHBhcnNlciBhbmQgc2Nhbm5lci4KLQotCSogc3JjL3BhcnNlLXNrZWwueTogUmVxdWVzdCBhIHB1cmUgcGFyc2VyLCBsb2NhdGlvbnMsIGFuZCBwcmVmaXgKLQlyZW5hbWluZy4KLQkoJXVuaW9uKTogSGF2aW5nIHNldmVyYWwgbWVtYmVycyB3aXRoIHRoZSBzYW1lIHR5cGUgZG9lcyBub3QgaGVscAotCXR5cGUgbWlzbWF0Y2hlcywgc2ltcGxpZnkuCi0JKFlZUFJJTlQsIHl5cHJpbnQpOiBOZXcuCi0JKHl5ZXJyb3IpOiBgYFJlbmFtZScnICh0aGVyZSBpcyBhICNkZWZpbmUgeXllcnJvciBza2VsX2Vycm9yKSBhcy4uLgotCShza2VsX2Vycm9yKTogdGhpcy4KLQlIYW5kbGUgbG9jYXRpb25zLgotCSogc3JjL3NjYW4tc2tlbC5sOiBBZGp1c3QgdG8gdGhlc2UgY2hhbmdlcy4KLQkqIHNyYy9za2VsZXRvbi5oIChMT0NBVElPTl9SRVNFVCwgTE9DQVRJT05fTElORVMsIExPQ0FUSU9OX1NURVApCi0JKExPQ0FUSU9OX1BSSU5ULCBza2VsX2NvbnRyb2xfdCk6IE5ldy4KLQotMjAwMS0xMi0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9wYXJzZS1za2VsLnk6IEdldCByaWQgb2YgdGhlIHNoaWZ0L3JlZHVjZSBjb25mbGljdDoKLQlyZXBsYWNlIGBnYicgd2l0aCBCTEFOS1MuCi0JKiBzcmMvc2Nhbi1za2VsLmw6IEFkanVzdC4KLQotMjAwMS0xMi0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9zeXN0ZW0uaDogV2UgZG9uJ3QgbmVlZCBub3Igd2FudCBiY29weS4KLQlUaHJvdyBhd2F5IE1TLURPUyBjcmFwOiB3ZSBkb24ndCBuZWVkIGdldHBpZC4KLQkqIGNvbmZpZ3VyZS5pbjogV2UgZG9uJ3QgbmVlZCBzdHJuZHVwLiAgSXQgd2FzIGV2ZW4gY2F1c2luZwotCXByb2JsZW1zOiBiZWNhdXNlIEZsZXggaW5jbHVkZXMgdGhlIGhlYWRlcnMgKmJlZm9yZSogdXMsCi0JX0dOVV9TT1VSQ0UgaXMgbm90IGRlZmluZWQgYnkgY29uZmlnLmgsIGFuZCB0aGVyZWZvcmUgc3RybmR1cCB3YXMKLQlub3QgdmlzaWJsZS4KLQkqIGxpYi94c3RybmR1cC5jOiBOZXcuCi0JKiBzcmMvc2Nhbi1za2VsLmw6IFVzZSBpdC4KLQlCZSBzdXJlIHRvIGluaXRpYWxpemUgeXlsdmFsLm11c2NsZSBtZW1iZXIgd2hlbiBzY2FubmluZyBhIE1VU0NMRS4KLQkqIHNyYy9wYXJzZS1za2VsLnk6IFVzZSAlZGlyZWN0aXZlcyBpbnN0ZWFkIG9mICNkZWZpbmVzLgotCi0yMDAxLTEyLTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3NrZWxldG9uLmg6IE5ldy4KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3BhcnNlciwgb3V0cHV0X21hc3Rlcl9wYXJzZXIpOiBSZW1vdmUsIGRlYWQKLQljb2RlLgotCSogc3JjL291dHB1dC5oIChnZXRfbGluZXNfbnVtYmVyLCBhY3Rpb25zX291dHB1dCwgZ3VhcmRzX291dHB1dCkKLQkodG9rZW5fZGVmaW5pdGlvbnNfb3V0cHV0KTogUHJvdG90eXBlIHRoZW0uCi0JKiBzcmMvcGFyc2Utc2tlbC55OiBBZGQgdGhlIGxpY2Vuc2Ugbm90aWNlLgotCUluY2x1ZGUgb3V0cHV0LmggYW5kIHNrZWxldG9uLmguCi0JKHByb2Nlc3Nfc2tlbGV0b24pOiBSZXR1cm5zIHZvaWQsIGFuZCB0YWtlcyBhIHNpbmdsZSBwYXJhbWV0ZXIuCi0JKiBzcmMvc2Nhbi1za2VsLmw6IEFkZCB0aGUgbGljZW5zZSBub3RpY2UuCi0JSW5jbHVkZSBza2VsZXRvbi5oLgotCURvbid0IHVzZSAlb3B0aW9uIHl5bGluZW5vOiBpdCBzZWVtcyB0aGF0IHRoZW4gRmxleCBpbWFnaW5lcwotCVJFSkVDVCBoYXMgYmVlbiB1c2VkLCBhbmQgdGhlcmVmb3JlIGl0IHdvbid0IHJlYWxsb2NhdGUgaXRzCi0JYnVmZmVycyAod2hpY2ggbWFrZXMgbm8gb3RoZXIgc2Vuc2UgdG8gbWUgdGhhbiBhIGJ1ZykuICBJdCByZXN1bHRzCi0JaW4gd2FybmluZ3MgZm9yIGB1bnVzZWQ6IHl5X2ZsZXhfcmVhbGxvYycuCi0KLTIwMDEtMTItMzAgIFJvYmVydCBBbmlza28gIDxyb2JlcnQuYW5pc2tvQGVwaXRhLmZyPgotCi0JKiBzcmMvbXVzY2xlX3RhYi5oIChNVVNDTEVfSU5TRVJUX0lOVCwgTVVTQ0xFX0lOU0VSVF9TVFJJTkcpCi0JKE1VU0NMRV9JTlNFUlRfUFJFRklYKTogLi4udG8gdGhlcmUuCi0JKiBzcmMvb3V0cHV0LmMgKE1VU0NMRV9JTlNFUlRfSU5ULCBNVVNDTEVfSU5TRVJUX1NUUklORykKLQkoTVVTQ0xFX0lOU0VSVF9QUkVGSVgpOiBNb3ZlIGZyb20gaGVyZS4uLgotCi0JKiBzcmMvYmlzb24uaGFpcnk6IEFkZCBhIHNlY3Rpb24gZGlyZWN0aXZlLiAgUHV0IGJyYWNlcyBhcm91bmQgbXVzY2xlCi0JbmFtZXMuICBUaGlzIHBhcnNlciBza2VsZXRvbiBpcyBzdGlsbCBicm9rZW4sIGJ1dCBCaXNvbiBzaG91bGQgbm90Ci0JY2hva2Ugb24gYSBiYWQgbXVzY2xlICdzeW50YXgnLgotCSogc3JjL2Jpc29uLnNpbXBsZTogQWRkIGEgc2VjdGlvbiBkaXJlY3RpdmUuICBQdXQgYnJhY2VzIGFyb3VuZCBtdXNjbGUKLQluYW1lcy4KLQotCSogc3JjL2ZpbGVzLmggKHN0cnN1ZmZpeCwgc3RyaW5nYXBwZW5kKTogQWRkIGRlY2xhcmF0aW9ucy4KLQkodGFiX2V4dGVuc2lvbik6IEFkZCBkZWNsYXJhdGlvbi4KLQkoc2hvcnRfYmFzZV9uYW1lKTogQWRkIGRlY2xhcmF0aW9uLgotCi0JKiBzcmMvZmlsZXMuYyAoc3Ryc3VmZml4LCBzdHJpbmdhcHBlbmQpOiBObyBsb25nZXIgc3RhdGljLiAgVGhlc2UKLQlmdW5jdGlvbnMgYXJlIHVzZWQgaW4gdGhlIHNrZWxldG9uIHBhcnNlci4KLQkodGFiX2V4dGVuc2lvbik6IE5ldy4KLQkoY29tcHV0ZV9iYXNlX25hbWVzKTogVXNlIHRoZSBjb21wdXRhdGlvbnMgZG9uZSBpbiB0aGlzIGZ1bmN0aW9uCi0JdG8gZ3Vlc3MgaWYgdGhlIGdlbmVyYXRlZCBwYXJzZXJzIHNob3VsZCBoYXZlICcudGFiJyBpbiB0aGVpcgotCW5hbWVzLgotCShzaG9ydF9iYXNlX25hbWUpOiBObyBsb25nZXIgc3RhdGljLgotCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9za2VsZXRvbik6IE5ldy4KLQkob3V0cHV0KTogRGlzYWJsZSBjYWxsIHRvIG91dHB1dF9tYXN0ZXJfcGFyc2VyLCBhbmQgZ2l2ZSBhIHRyeSB0bwotCWEgbmV3IHNrZWxldG9uIGhhbmRsaW5nIHN5c3RlbS4KLQkoZ3VhcmRzX291dHB1dCwgYWN0aW9uc19vdXRwdXQpOiBObyBsb25nZXIgc3RhdGljLgotCSh0b2tlbl9kZWZpbml0aW9uc19vdXRwdXQsIGdldF9saW5lc19udW1iZXIpOiBObyBsb25nZXIgc3RhdGljLgotCi0JKiBjb25maWd1cmUuaW46IFVzZSBBTV9QUk9HX0xFWCBhbmQgQUNfUFJPR19ZQUNDLgotCi0JKiBzcmMvTWFrZWZpbGUuYW0gKGJpc29uX1NPVVJDRVMpOiBBZGQgc2Nhbi1za2VsLmwgYW5kCi0JcGFyc2Utc2tlbC55LgotCi0JKiBzcmMvcGFyc2Utc2tlbC55OiBOZXcgZmlsZS4KLQkqIHNyYy9zY2FuLXNrZWwubDogTmV3IGZpbGUuCi0KLTIwMDEtMTItMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JJW5hbWUtcHJlZml4IGlzIGJyb2tlbi4KLQotCSogc3JjL2ZpbGVzLmMgKHNwZWNfbmFtZV9wcmVmaXgpOiBJbml0aWFsaXplIHRvIE5VTEwsIG5vdCB0byAieXkiLgotCUFkanVzdCBhbGwgZGVwZW5kZW5jaWVzLgotCSogdGVzdHMvaGVhZGVycy5hdCAoZXhwb3J0IFlZTFRZUEUpOiBTdHJlbmd0aGVuIHRoaXMgdGVzdDogdXNlCi0JJW5hbWUtcHJlZml4LgotCi0JUmVuYW1pbmcgeXlsdmFsIGJ1dCBub3QgeXlsbG9jIGlzIG5vdCBjb25zaXN0ZW50LiAgTm93IHdlIGRvLgotCi0JKiBzcmMvYmlzb24uc2ltcGxlOiBQcmVmaXggeXlsbG9jIGlmIHVzZWQuCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoRGVjbCBTdW1tYXJ5KTogRG9jdW1lbnQgdGhhdC4KLQotMjAwMS0xMi0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvOiBQcm9tb3RlIGAlbG9uZy1kaXJlY3RpdmUnIG92ZXIKLQlgJWxvbmdfZGlyZWN0aXZlJy4KLQlSZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gZml4ZWQtb3V0cHV0LWZpbGVzLCB5YWNjIGlzIGVub3VnaC4KLQotMjAwMS0xMi0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9iaXNvbi5zaW1wbGU6IERlZmluZSBZWURFQlVHIGFuZCBZWUVSUk9SX1ZFUkJPU0UgKmFmdGVyKiB0aGUKLQl1c2VyIHByb2xvZ3VlLiAgVGhlc2UgYXJlIGRlZmF1bHRzLgotCSogdGVzdHMvYWN0aW9ucy5hdCAoTWlkLXJ1bGUgYWN0aW9ucyk6IE1ha2Ugc3VyZSB0aGUgdXNlciBjYW4KLQlkZWZpbmUgWVlERUJVRyBhbmQgWVlFUlJPUl9WRVJCT1NFLgotCi0yMDAxLTEyLTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL291dHB1dC5jIChoZWFkZXJfb3V0cHV0KTogRG9uJ3QgZm9yZ2V0IHRvIGV4cG9ydCBZWUxUWVBFIGFuZAotCXl5bGxvYy4KLQkqIHRlc3RzL2hlYWRlcnMuYXQgKGV4cG9ydCBZWUxUWVBFKTogTmV3LCBtYWtlIHN1cmUgaXQgZG9lcy4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKCV1bmlvbiBhbmQgLS1kZWZpbmVzLCBJbnZhbGlkIENQUCBoZWFkZXJzKToKLQlNb3ZlIHRvLi4uCi0JKiB0ZXN0cy9oZWFkZXJzLmF0OiBoZXJlLgotCi0yMDAxLTEyLTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2dyYW0uaCAocnVsZV9zKTogTWVtYmVyIGBhc3NvYycgaXMgb2YgdHlwZSBgYXNzb2NpYXRpdml0eScuCi0KLTIwMDEtMTItMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiB0ZXN0cy9hY3Rpb25zLmF0IChNaWQtcnVsZSBhY3Rpb25zKTogT3V0cHV0IG9uIGEgc2luZ2xlIGxpbmUKLQlpbnN0ZWFkIG9mIHNldmVyYWwuCi0KLTIwMDEtMTItMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkb2MvYmlzb24udGV4aW5mbzogRm9ybWF0dGluZyBjaGFuZ2VzLgotCi0yMDAxLTEyLTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCURvbid0IHN0b3JlIHRoZSB0b2tlbiBkZWZzIGluIGEgbXVzY2xlLCBqdXN0IGJlIHJlYWR5IHRvIG91dHB1dCBpdAotCW9uIGNvbW1hbmQuICBOb3cgcG9zc2libGUgdmlhIGBzeW1ib2xzJy4gIEZpeGVzIGEgbWVtb3J5IGxlYWsuCi0KLQkqIHNyYy9vdXRwdXQuYyAodG9rZW5fZGVmaW5pdGlvbnNfb3V0cHV0KTogTmV3LgotCShvdXRwdXRfcGFyc2VyLCBoZWFkZXJfb3V0cHV0KTogVXNlIGl0LgotCSogc3JjL3JlYWRlci5jIChzeW1ib2xzX3NhdmUpOiBSZW1vdmUuCi0KLTIwMDEtMTItMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvYmlzb24uc2ltcGxlOiBEbyBub3QgcHJvdmlkZSBhIGRlZmF1bHQgZm9yIFlZU1RZUEUgYW5kCi0JWVlMVFlQRSBiZWZvcmUgdGhlIHVzZXIncyBwcm9sb2d1ZS4gIE90aGVyd2lzZSBpdCdzIGhhcmRseS4uLiBhCi0JZGVmYXVsdC4KLQotMjAwMS0xMi0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlNaWQtcnVsZSBhY3Rpb25zIGFyZSBzaW1wbHkuLi4gaWdub3JlZCEKLQotCSogc3JjL3JlYWRlci5jIChyZWFkZ3JhbSk6IEJlIHN1cmUgdG8gYXR0YWNoIG1pZC1ydWxlIGFjdGlvbnMgdG8KLQl0aGUgZW1wdHktcnVsZSBhc3NvY2lhdGVkIHRvIHRoZSBkdW1teSBzeW1ib2wsIG5vdCB0byB0aGUgaG9zdAotCXJ1bGUuCi0JKiB0ZXN0cy9hY3Rpb25zLmF0IChNaWQtcnVsZSBhY3Rpb25zKTogTmV3LgotCi0yMDAxLTEyLTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCU1lbW9yeSBsZWFrLgotCi0JKiBzcmMvcmVhZGVyLmMgKHJlYWRlcik6IEZyZWUgZ3JhbW1hci4KLQotMjAwMS0xMi0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlNZW1vcnkgbGVhay4KLQotCSogc3JjL0xSMC5jIChuZXdfaXRlbXNldHMpOiBEb24ndCBhbGxvY2F0ZSBgc2hpZnRfc3ltYm9sJyBoZXJlLAotCXNpbmNlIGl0IGFsbG9jYXRlcyBpdCBmb3IgZWFjaCBzdGF0ZSwgYWx0aG91Z2ggb25seSBvbmUgaXMgbmVlZGVkLgotCShhbGxvY2F0ZV9zdG9yYWdlKTogRG8gaXQgaGVyZS4KLQotMjAwMS0xMi0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9vcHRpb25zLmgsIHNyYy9vcHRpb25zLmMgKGNyZWF0ZV9sb25nX29wdGlvbl90YWJsZSk6IFJlbmFtZQotCWFzLi4uCi0JKGxvbmdfb3B0aW9uX3RhYmxlX25ldyk6IHRoaXMsIHdpdGggYSBjbGVhcmVyIHByb3RvdHlwZS4KLQkocGVyY2VudF90YWJsZSk6IFJlbW92ZSwgdW51c2VkLAotCSogc3JjL2dldGFyZ3MuYyAoZ2V0YXJncyk6IEFkanVzdC4KLQotMjAwMS0xMi0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9MUjAuYywgc3JjL2NvbmZsaWN0cy5jLCBzcmMvbGFsci5jLCBzcmMvbGFsci5oLCBzcmMvb3V0cHV0LmMKLQkqIHNyYy9wcmludC5jLCBzcmMvcHJpbnRfZ3JhcGguYywgc3JjL3N0YXRlLmg6IFJlbmFtZSBzdGF0ZV90YWJsZQotCWFzIHN0YXRlcy4KLQotMjAwMS0xMi0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9sYWxyLmMgKGJ1aWxkX3JlbGF0aW9ucyk6IFJlbmFtZSBgc3RhdGVzJyBhcyBgc3RhdGVzMScuCi0JU29ycnksIEkgZG9uJ3QgdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgaXQgaXMsIG5vIGJldHRlciBuYW1lLi4uCi0KLTIwMDEtMTItMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvY2xvc3VyZS5jLCBzcmMvY29uZmxpY3RzLmMsIHNyYy9kZXJpdmVzLmMsIHNyYy9ncmFtLmMKLQkqIHNyYy9ncmFtLmgsIHNyYy9sYWxyLmMsIHNyYy9udWxsYWJsZS5jLCBzcmMvb3V0cHV0LmMsIHNyYy9wcmludC5jCi0JKiBzcmMvcHJpbnRfZ3JhcGguYywgc3JjL3JlYWRlci5jLCBzcmMvcmVkdWNlLmM6IFJlbmFtZSBydWxlX3RhYmxlCi0JYXMgcnVsZXMuCi0KLTIwMDEtMTItMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvZ3JhbS5jIChycHJlYywgcnByZWNzeW0sIHJhc3NvYyk6IFJlbW92ZSwgdW51c2VkIHNpbmNlIGxvbmcKLQlhZ28uCi0KLTIwMDEtMTItMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvcmVhZGVyLmMsIHNyYy9yZWFkZXIuaCAodXNlcl90b2tudW1zKTogUmVtb3ZlLgotCUFkanVzdCBhbGwgdXNlcnMgdG8gdXNlIHN5bWJvbHNbaV0tPnVzZXJfdG9rZW5fbnVtYmVyLgotCi0yMDAxLTEyLTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2dyYW0uYywgc3JjL2dyYW0uaCAoc3ByZWMsIHNhc3NvYyk6IFJlbW92ZS4KLQlBZGp1c3QgYWxsIHVzZXJzIHRvIHVzZSBzeW1ib2xzW2ldLT5wcmVjIG9yIC0+YXNzb2MuCi0KLTIwMDEtMTItMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvcmVhZGVyLmMsIHNyYy9yZWFkZXIuaCAodGFncyk6IFJlbW92ZS4KLQlBZGp1c3QgYWxsIHVzZXJzIHRvIHVzZSBzeW1ib2xzW2ldLT50YWcuCi0KLTIwMDEtMTItMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvZ3JhbS5oLCBzcmMvZ3JhbS5jIChzeW1ib2xzKTogTmV3LCBzaW1pbGFyIHRvIHN0YXRlX3RhYmxlCi0JYW5kIHJ1bGVfdGFibGUuCi0JKiBzcmMvcmVhZGVyLmMgKHBhY2tzeW1ib2xzKTogRmlsbCB0aGlzIHRhYmxlLgotCURyb3Agc3ByZWMuCi0JKiBzcmMvY29uZmxpY3RzLmMgKHJlc29sdmVfc3JfY29uZmxpY3QpOiBBZGp1c3QuCi0JKiBzcmMvcmVkdWNlLmMgKHJlZHVjZV9ncmFtbWFyKTogQWRqdXN0OiBqdXN0IHNvcnQgc3ltYm9scywgYQotCXNpbmdsZSB0YWJsZS4KLQlVc2Ugc3ltYm9sc1tpXS0+dGFnIGluc3RlYWQgb2YgdGFnc1tpXS4KLQotMjAwMS0xMi0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHRlc3RzL2NhbGMuYXQgKF9BVF9EQVRBX0NBTENfWSk6IEFsc28gdXNlICV1bmlvbi4KLQlJbiBhZGRpdGlvbiwgcHV0IGEgY29tbWVudCBpbiB0aGVyZSwgdG8gcmVwbGFjZS4uLgotCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoJXVuaW9uIGFuZCBDIGNvbW1lbnRzKTogUmVtb3ZlLgotCi0yMDAxLTEyLTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoV2ViMmMgQWN0aW9ucyk6IEJsaW5kbHkgbW92ZSB0aGUgYWN0dWFsCi0Jb3V0cHV0IGFzIGV4cGVjdGVkIG91dHB1dC4gIFRoZSBjb250ZW50cyAqc2VlbSogcmlnaHQgdG8gbWUsIGJ1dCBJCi0JY2FuJ3QgcHJldGVuZCByZWFkaW5nIHBlcmZlY3RseSBwYXJzZXIgdGFibGVzLi4uICBOb25ldGhlbGVzcywgYWxsCi0JdGhlIG90aGVyIHRlc3RzIHBhc3MgY29ycmVjdGx5LCB0aGUgdGFibGUgbG9vayBPSywgZXZlbiB0aG91Z2ggdGhlCi0JcHJlc2VuY2Ugb2YgYCRheGlvbScgaXMgdG8gYmUgbm90ZWQ6IEFGQUlDUyBpdCBpcyB1c2VsZXNzIChidXQKLQloYXJtbGVzcykuCi0KLTIwMDEtMTItMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvcmVhZGVyLmMgKHJlYWRncmFtKTogRG9uJ3QgYWRkIHRoZSBydWxlIDAgaWYgdGhlcmUgd2VyZSBubwotCXJ1bGVzIHJlYWQuICBJbiBvdGhlciB3b3JkcywgYWRkIGl0IF9hZnRlcl8gaGF2aW5nIHBlcmZvcm1lZAotCWdyYW1tYXIgc2FuaXR5IGNoZWNrcy4KLQlGaXhlcyB0aGUgYHRlc3RzL3JlZ3Jlc3Npb24uYXQgKEludmFsaWQgaW5wdXQ6IDEpJyBGYWlsdXJlLgotCi0yMDAxLTEyLTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoV2ViMmMgUmVwb3J0KTogQ2F0Y2ggdXA6IHRoZSBydWxlIDAgaXMgbm93Ci0JdmlzaWJsZSwgYW5kIHNvbWUgc3RhdGVzIGhhdmUgbm93IGEgZGlmZmVyZW50IG51bWJlci4KLQotMjAwMS0xMi0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9yZWFkZXIuYyAocmVhZGdyYW0pOiBCaW5kIHRoZSBpbml0aWFsIHJ1bGUncyBsaW5lbm8gdG8gdGhhdAotCW9mIHRoZSBmaXJzdCBydWxlLgotCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoUnVsZSBMaW5lIE51bWJlcnMsIFVucmVzb2x2ZWQgU1IgQ29uZmxpY3RzKToKLQkoU29sdmVkIFNSIENvbmZsaWN0cyk6IEFkanVzdCBydWxlIDAncyBsaW5lIG51bWJlci4KLQotMjAwMS0xMi0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlGaXggdGhlIGBHQVdLIEdyYW1tYXInIGZhaWx1cmUuCi0KLQkqIHNyYy9MUjAuYyAoZmluYWxfc3RhdGUpOiBJbml0aWFsaXplIHRvIC0xIHNvIHRoYXQgd2UgZG8gY29tcHV0ZQotCXRoZSByZWR1Y3Rpb25zIG9mIHRoZSBmaXJzdCBzdGF0ZSB3aGljaCB3YXMgbWlzdGFrZW5seSBjb25mdXNlZAotCXdpdGggdGhlIGZpbmFsIHN0YXRlIGJlY2F1c2UgcHJlY2lzZWx5IGZpbmFsX3N0YXRlIHdhcyBpbml0aWFsaXplZAotCXRvIDAuCi0JKiB0ZXN0cy9zZXRzLmF0IChOdWxsYWJsZSk6IEFkanVzdDogc3RhdGUgMCBkb2VzIGhhdmUgbG9va2FoZWFkcywKLQlub3cgbm90aWNlZCBieSBCaXNvbi4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFJ1bGUgTGluZSBOdW1iZXJzKTogQWRqdXN0OiBzdGF0ZSAwIGRvZXMKLQloYXZlIGEgcmVkdWN0aW9uIG9uICRkZWZhdWx0LgotCi0yMDAxLTEyLTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2dyYW0uYyAocml0ZW1fcHJpbnQpOiBCZSBzdXJlIHRvIHN1YnRyYWN0IDEgd2hlbiBkaXNwbGF5aW5nCi0JcnVsZSBsaW5lIG51bWJlcnMuCi0JKiBzcmMvY2xvc3VyZS5jIChwcmludF9jbG9zdXJlKTogTGlrZXdpc2UuCi0JKiBzcmMvZGVyaXZlcy5jIChwcmludF9kZXJpdmVzKTogTGlrZXdpc2UuCi0JKiB0ZXN0cy9zZXRzLmF0IChOdWxsYWJsZSk6IEFkanVzdDogdGhlIHJ1bGUgbnVtYmVycyBhcmUgY29ycmVjdAotCW5vdy4KLQotMjAwMS0xMi0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9sYWxyLmMgKGxvb2thaGVhZHNfcHJpbnQpOiBOZXcuCi0JKGxhbHIpOiBDYWxsIGl0IHdoZW4gLS10cmFjZS1mbGFnLgotCSogdGVzdHMvc2V0cy5hdCAoTnVsbGFibGUpOiBBZGp1c3Q6IHdoZW4gdHJhY2luZywgdGhlIGxvb2thaGVhZHMKLQlhcmUgZHVtcGVkLgotCi0yMDAxLTEyLTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2Rlcml2ZXMuYyAocHJpbnRfZGVyaXZlcyk6IEJlIHN1cmUgdG8gdXNlIGA+PSAwJywgbm90IGA+IDAnLAotCXdoZW4gd2Fsa2luZyB0aHJvdWdoIHJpdGVtLCBldmVuIHZpYSBydWxlLT5yaHMuCi0JKiBzcmMvcmVkdWNlLmMgKGR1bXBfZ3JhbW1hciwgdXNlZnVsX3Byb2R1Y3Rpb24sIHJlZHVjZV9vdXRwdXQpCi0JKHVzZWZ1bF9wcm9kdWN0aW9uLCB1c2VsZXNzX25vbnRlcm1pbmFscyk6IExpa2V3aXNlLgotCShyZWR1Y2VfZ3JhbW1hcl90YWJsZXMpOiBMaWtld2lzZSwgcGx1cyB1cGRhdGUgbnJpdGVtcy4KLQkqIHNyYy9udWxsYWJsZS5jIChzZXRfbnVsbGFibGUpOiBMaWtld2lzZS4KLQkqIHNyYy9sYWxyLmMgKGJ1aWxkX3JlbGF0aW9ucyk6IExpa2V3aXNlLgotCSogdGVzdHMvc2V0cy5hdCAoTnVsbGFibGUpOiBBZGp1c3QuCi0JRm9ydHVuYXRlbHksIG5vdywgdGhlICRheGlvbSBpcyBubyBsb25nZXIgbnVsbGFibGUuCi0KLTIwMDEtMTItMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvTFIwLmMgKGdlbmVyYXRlX3N0YXRlcyk6IFVzZSBucml0ZW1zLCBub3Qgbml0ZW1zLCBub3IgdXNpbmcKLQl0aGUgMC1zZW50aW5lbC4KLQkqIHNyYy9ncmFtLmMgKHJpdGVtX2xvbmdlc3RfcmhzKTogTGlrZXdpc2UuCi0JKiBzcmMvcmVkdWNlLmMgKG5vbnRlcm1pbmFsc19yZWR1Y2UpOiBMaWtld2lzZS4KLQkqIHNyYy9wcmludF9ncmFwaC5jIChwcmludF9ncmFwaCk6IExpa2V3aXNlLgotCSogc3JjL291dHB1dC5jIChvdXRwdXRfcnVsZV9kYXRhKTogTGlrZXdpc2UuCi0JKiBzcmMvbnVsbGFibGUuYyAoc2V0X251bGxhYmxlKTogIExpa2V3aXNlLgotCi0yMDAxLTEyLTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL291dHB1dC5jOiBDb21tZW50IGNoYW5nZXMuCi0KLTIwMDEtMTItMjcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBzcmMvYmlzb24uc2ltcGxlIChZWVNUQUNLX0FMTE9DLCBZWVNJWkVfVCk6IFJlbW92ZSBzcGVjaWFsCi0JY2FzZXMgZm9yIG5vbi1HTlUgc3lzdGVtcyBsaWtlIEFJWCwgSFAtVVgsIFNHSSwgU3VuLCBhbmQKLQlTcGFyYywgYXMgdGhleSB3ZXJlIGNhdXNpbmcgbW9yZSBwb3J0aW5nIHByb2JsZW1zIHRoYW4gdGhlCi0JKG1pbm9yKSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCB3YXMgd29ydGguCi0KLQlBbHNvLCBjYXRjaCB1cCB3aXRoIDEuMzEncyBZWVNURC4KLQotMjAwMS0xMi0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X2dyYW0pOiBSZWx5IG9uIG5yaXRlbXMsIG5vdCB0aGUKLQkwLXNlbnRpbmVsLiAgU2VlIGJlbG93LgotCVVzZSAtMSBhcyBzZXBhcmF0b3IsIG5vdCAwLgotCSogc3JjL2Jpc29uLnNpbXBsZSAoeXlwYXJzZSk6IFN1YnRyYWN0IDEgdG8gdGhlIHJ1bGUgbnVtYmVycy4KLQlSZWx5IG9uIC0xIGFzIHNlcGFyYXRvciBpbiB5eXJocywgaW5zdGVhZCBvZiAwLgotCSogdGVzdHMvY2FsYy5hdCAoQVRfQ0hFQ0tfQ0FMQyk6IE5vdywgdGhlIHBhcnNlcnMgbm8gbG9uZ2VyIGlzc3VlCi0JdHdpY2UgYE5vdyBhdCBlbmQgb2YgaW5wdXQnLCB0aGVyZWZvcmUgdGhlcmUgYXJlIHR3byBsaW5lcyBsZXNzIHRvCi0JZXhwZWN0LgotCi0yMDAxLTEyLTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoVW5yZXNvbHZlZCBTUiBDb25mbGljdHMpOgotCShTb2x2ZWQgU1IgQ29uZmxpY3RzLCBSdWxlIExpbmUgTnVtYmVycyk6IEFkanVzdCB0byB0aGUgY2hhbmdlcwotCWJlbG93LgotCi0yMDAxLTEyLTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL0xSMC5jIChuZXdfc3RhdGUpOiBSZWNvZ25pemUgdGhlIGZpbmFsIHN0YXRlIGJ5IHRoZSBmYWN0IGl0Ci0JaXMgcmVhY2hlZCBieSBlb2Z0b2tlbi4KLQkoaW5zZXJ0X3N0YXJ0X3NoaWZ0aW5nX3N0YXRlLCBpbnNlcnRfZW9mX3NoaWZ0aW5nX3N0YXRlKQotCShpbnNlcnRfYWNjZXB0aW5nX3N0YXRlLCBhdWdtZW50X2F1dG9tYXRvbik6IFJlbW92ZSwgc2luY2Ugbm93Ci0JdGhlc2Ugc3RhdGVzIGFyZSBhdXRvbWF0aWNhbGx5IGNvbXB1dGVkIGZyb20gdGhlIGluaXRpYWwgc3RhdGUuCi0JKGdlbmVyYXRlX3N0YXRlcyk6IEFkanVzdC4KLQkqIHNyYy9wcmludC5jOiBXaGVuIHJlcG9ydGluZyBhIHJ1bGUgbnVtYmVyIHRvIHRoZSB1c2VyLCBzdWJzdHJhY3QKLQkxLCBzbyB0aGF0IHRoZSBheGlvbSBydWxlIGlzIHJ1bGUgMCwgYW5kIHRoZSBmaXJzdCB1c2VyIHJ1bGUgaXMgMS4KLQkqIHNyYy9yZWR1Y2UuYzogTGlrZXdpc2UuCi0JKiBzcmMvcHJpbnRfZ3JhcGguYyAocHJpbnRfY29yZSk6IEZvciB0aGUgdGltZSBiZWluZywganVzdCBhcyBmb3IKLQl0aGUgcmVwb3J0LCBkZXBlbmQgdXBvbiAtLXRyYWNlLWZsYWdzIHRvIGR1bXAgdGhlIGZ1bGwgc2V0IG9mCi0JaXRlbXMuCi0JKiBzcmMvcmVhZGVyLmMgKHJlYWRncmFtKTogT25jZSB0aGUgZ3JhbW1hciByZWFkLCBpbnNlcnQgdGhlIHJ1bGUKLQkwOiBgJGF4aW9tOiBTVEFSVC1TWU1CT0wgJCcuCi0JKiB0ZXN0cy9zZXQuYXQ6IEFkanVzdDogcnVsZSAwIGlzIG5vdyBkaXNwbGF5ZWQsIGFuZCBzaW5jZSB0aGUKLQludW1iZXIgb2YgdGhlIHN0YXRlcyBoYXMgY2hhbmdlZCAodGhlIGZpbmFsIHN0YXRlIGlzIG5vIGxvbmdlcgotCW5lY2Vzc2FyaWx5IHRoZSBsYXN0KSwgY2F0Y2ggdXAuCi0KLTIwMDEtMTItMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JVHJ5IHRvIG1ha2UgdGhlIHVzZSBvZiB0aGUgZW9mdG9rZW4gdmFsaWQuICBHaXZlbiB0aGF0IGl0cyB2YWx1ZQotCWlzIDAgd2hpY2ggd2FzIGFsc28gdXNlZCBhcyBhIHNlbnRpbmVsIGluIHJpdGVtLCAoaSkgbWFrZSBzdXJlID49IDAKLQlpcyB1c2VkIGluc3RlYWQgb2YgPiAwIHdoZXJlIGFwcHJvcHJpYXRlLCAoaWkpLCBkZXBlbmQgdXBvbiBucml0ZW1zCi0JaW5zdGVhZCBvZiB0aGUgMC1zZW50aW5lbC4KLQotCSogc3JjL2dyYW0uaCwgc3JjL2dyYW0uYyAobnJpdGVtcyk6IE5ldy4KLQlFeHBlY3RlZCB0byBiZSBkdXBsaWNhdGlvbiBvZiBuaXRlbXMsIGJ1dCBmb3IgdGhlIHRpbWUgYmVpbmcuLi4KLQkqIHNyYy9yZWFkZXIuYyAocGFja2dyYW0pOiBBc3NlcnQgbnJpdGVtcyBhbmQgbml0ZW1zIGFyZSBlcXVhbC4KLQkqIHNyYy9MUjAuYyAoYWxsb2NhdGVfaXRlbXNldHMsIG5ld19pdGVtc2V0cyk6IEFkanVzdC4KLQkqIHNyYy9jbG9zdXJlLmMgKHByaW50X2Nsb3N1cmUsIHByaW50X2ZkZXJpdmVzKTogTGlrZXdpc2UuCi0JKiBzcmMvZ3JhbS5jIChyaXRlbV9wcmludCk6IExpa2V3aXNlLgotCSogc3JjL3ByaW50LmMgKHByaW50X2NvcmUsIHByaW50X2dyYW1tYXIpOiBMaWtld2lzZS4KLQkqIHNyYy9wcmludF9ncmFwaC5jOiBMaWtld2lzZS4KLQotMjAwMS0xMi0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9tYWluLmMgKG1haW4pOiBJZiB0aGVyZSBhcmUgY29tcGxhaW5zIGFmdGVyIGdyYW1tYXIKLQlyZWR1Y3Rpb25zLCB0aGVuIG91dHB1dCB0aGUgcmVwb3J0IGFueXdheSBpZiByZXF1ZXN0ZWQsIHRoZW4gZGllLgotCSogc3JjL3N5bXRhYi5jIChidWNrZXRfbmV3KTogSW5pdGlhbGl6ZSBgdmFsdWUnIHRvIC0xLCBub3QgMC4KLQkqIHNyYy9yZWFkZXIuYyAoZW9mdG9rZW4pOiBOZXcuCi0JKHBhcnNlX3Rva2VuX2RlY2wpOiBJZiB0aGUgdG9rZW4gYmVpbmcgZGVmaW5lZCBoYXMgdmFsdWUgYDAnLCBpdAotCWlzIHRoZSBlb2Z0b2tlbi4KLQkocGFja3N5bWJvbHMpOiBObyBsb25nZXIgaGFjayBgdGFncycgdG8gaW5zZXJ0IGAkJyBieSBoYW5kLgotCUJlIHN1cmUgdG8gcHJlc2VydmUgdGhlIHZhbHVlIG9mIHRoZSBlb2Z0b2tlbi4KLQkocmVhZGVyKTogTWFrZSBzdXJlIGVvZnRva2VuIGlzIGRlZmluZWQuCi0JSW5pdGlhbGl6ZSBuc3ltcyB0byAwOiBub3cgZW9mdG9rZW4gaXMgY3JlYXRlZCBqdXN0IGxpa2UgdGhlIG90aGVycy4KLQkqIHNyYy9wcmludC5jIChwcmludF9ncmFtbWFyKTogRG9uJ3Qgc3BlY2lhbCBjYXNlIHRoZSBlb2YgdG9rZW4uCi0JKiBzcmMvcmVncmVzc2lvbi5hdDogQWRqdXN0OiBgJCcgaGFzIHZhbHVlIDAsIG5vdCAtMSwgd2hpY2ggd2FzIGEKLQlsaWUgYW55d2F5LCBhbGJlaXQgcGxlYXNhbnQuCi0JKiB0ZXN0cy9jYWxjLmF0OiBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIGVvZnRva2VuLgotCUNoYW5nZSB0aGUgZ3JhbW1hciBzbyB0aGF0IGVtcHR5IGlucHV0IGlzIGludmFsaWQuCi0JQWRqdXN0IGV4cGVjdGF0aW9ucy4KLQlXaGVuIHl5dW5nZXRpbmcsIGJlIHN1cmUgdG8gdXNlIGEgdmFsaWQgeXlsbG9jOiB1c2UgbGFzdF95eWxsb2MuCi0KLTIwMDEtMTItMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBjb25maWd1cmUuaW46IENoZWNrIHRoZSBwcm90b3Mgb2Ygc3RyY2hyIGFucyBzdHJzcG4uCi0JUmVwbGFjZSBzdHJjaHIgaWYgbmVlZGVkLgotCSogc3JjL3N5c3RlbS5oOiBQcm92aWRlIHRoZSBwcm90b3Mgb2Ygc3RyY2hyLCBzdHJzcG4gYW5kIG1lbWNociBpZgotCW1pc3NpbmcuCi0JKiBsaWIvc3RyY2hyLmM6IE5ldy4KLQkqIHNyYy9yZWFkZXIuYyAoc3ltYm9sc19zYXZlKTogVXNlIHN0cmNoci4KLQotMjAwMS0xMi0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9wcmludC5jLCBzcmMvcHJpbnRfZ3JhcGguYyAoZXNjYXBlKTogTmV3LgotCVVzZSBpdCB0byBxdW90ZSB0aGUgVEFHUyBvdXRwdXRzLgotCSogc3JjL3ByaW50X2dyYXBoLmMgKHByaW50X3N0YXRlKTogTm93IGVycm9ycyBhcmUgaW4gcmVkLCBhbmQKLQlyZWR1Y3Rpb25zIGluIGdyZWVuLgotCVByZWZlciBoaWdoIHRvIHdpZGU6IG91dHB1dCB0aGUgc3RhdGUgbnVtYmVyIG9uIGEgbGluZSBvZiBpdHMgb3duLgotCi0yMDAxLTEyLTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3N0YXRlLmgsIHNyYy9zdGF0ZS5jIChyZWR1Y3Rpb25zX25ldyk6IE5ldy4KLQkqIHNyYy9MUjAuYyAoc2V0X3N0YXRlX3RhYmxlKTogTGV0IGFsbCB0aGUgc3RhdGVzIGhhdmUgYQotCWByZWR1Y3Rpb25zJywgZXZlbiBpZiByZWR1Y2VkIHRvIDAuCi0JKHNhdmVfcmVkdWN0aW9ucyk6IEFkanVzdC4KLQkqIHNyYy9sYWxyLmMgKGluaXRpYWxpemVfTEEsIGluaXRpYWxpemVfbG9va2FoZWFkcyk6IEFkanVzdC4KLQkqIHNyYy9wcmludC5jIChwcmludF9yZWR1Y3Rpb25zLCBwcmludF9hY3Rpb25zKTogQWRqdXN0LgotCSogc3JjL291dHB1dC5jIChhY3Rpb25fcm93KTogQWRqdXN0LgotCi0yMDAxLTEyLTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3N0YXRlLmgsIHNyYy9zdGF0ZS5jIChlcnJzX25ldywgZXJyc19kdXApOiBOZXcuCi0JKiBzcmMvTFIwLmMgKHNldF9zdGF0ZV90YWJsZSk6IExldCBhbGwgdGhlIHN0YXRlcyBoYXZlIGFuIGVycnMsCi0JZXZlbiBpZiByZWR1Y2VkIHRvIDAuCi0JKiBzcmMvcHJpbnQuYyAocHJpbnRfZXJycywgcHJpbnRfcmVkdWN0aW9ucyk6IEFkanVzdC4KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X2FjdGlvbnMsIGFjdGlvbl9yb3cpOiBBZGp1c3QuCi0JKiBzcmMvY29uZmxpY3RzLmMgKHJlc29sdmVfc3JfY29uZmxpY3QpOiBBZGp1c3QuCi0KLTIwMDEtMTItMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvbGFsci5jIChzZXRfZ290b19tYXAsIGluaXRpYWxpemVfRik6IFVzZSBTSElGVF9TWU1CT0wuCi0KLTIwMDEtMTItMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvY29uZmxpY3RzLmMsIHNyYy9jb25mbGljdHMuaCAocHJpbnRfcmVkdWN0aW9ucyk6IE1vdmUgdG8uLi4KLQkqIHNyYy9wcmludC5jOiBoZXJlLgotCShsb29rYWhlYWRzZXQsIHNoaWZ0c2V0KTogTmV3LCB1c2VkIGFzIGFkZGl0aW9uYWwgc3RvcmFnZSBieQotCXByaW50X3JlZHVjdGlvbnMuCi0JKHByaW50X3Jlc3VsdHMpOiBBZGp1c3QuCi0JKHByaW50X3NoaWZ0cywgcHJpbnRfZ290b3MsIHByaW50X2VycnMpOiBOZXcsIGV4dHJhY3RlZCBmcm9tLi4uCi0JKHByaW50X2FjdGlvbnMpOiBoZXJlLgotCSogc3JjL3ByaW50X2dyYXBoLmMgKHByaW50X2FjdGlvbnMpOiBSZW1vdmUgZGVhZCBjb2RlLgotCi0yMDAxLTEyLTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3JlYWRlci5jIChjb3B5X2RvbGxhciwgY29weV9hdCk6IEJldHRlciBjaGVja2luZyBvZiBgbicgaW4KLQlgJG4nIGFuZCBgQG4nLgotCi0yMDAxLTEyLTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2xhbHIuYyAoYWRkX2xvb2tiYWNrX2VkZ2UpOiBVc2Ugc3RhdGVfdCBpbnN0ZWFkIG9mIGludHMuCi0JKGJ1aWxkX3JlbGF0aW9ucyk6IEFkanVzdC4KLQotMjAwMS0xMi0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9sYWxyLmMgKHNldF9nb3RvX21hcCk6IFJlbW92ZSBhIHdyb25nIGJ1dCBiZW5pZ24gbG9vcAotCWR1cGxpY2F0aW9uLgotCi0yMDAxLTEyLTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3JlYWRlci5jIChwYWNrZ3JhbSk6IENhdGNoIG5pdGVtcyBvdmVyZmxvd3MuCi0KLTIwMDEtMTItMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvZmlsZXMuYywgc3JjL2ZpbGVzLmggKGd1YXJkX29ic3RhY2spOiBSZW1vdmUuCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dCk6IEFkanVzdC4KLQkqIHNyYy9yZWFkZXIuYyAocGFyc2VfYnJhY2VzKTogTmV3LCBmYWN0b3JpbmcuLi4KLQkoY29weV9hY3Rpb24sIGNvcHlfZ3VhcmQpOiB0aGVzZSB0d28gd2hpY2ggYXJlIHJlbmFtZWQgYXMuLi4KLQkocGFyc2VfYWN0aW9uLCBwYXJzZV9ndWFyZCk6IHRoZXNlLgotCUFzIGEgdm9sdW50YXJ5IGNvbnNlcXVlbmNlLCB1c2luZyBicmFjZXMgYXJvdW5kIGd1YXJkcyBpcyBub3cKLQltYW5kYXRvcnkuCi0KLTIwMDEtMTItMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvZ3JhbS5oIChydWxlX3QpOiBgZ3VhcmQnIGFuZCBgZ3VhcmRfbGluZScgYXJlIG5ldyBtZW1iZXJzLgotCSogc3JjL3JlYWRlci5jIChzeW1ib2xfbGlzdCk6IGBndWFyZCcgYW5kIGBndWFyZF9saW5lJyBhcmUgbmV3Ci0JbWVtYmVycy4KLQkoc3ltYm9sX2xpc3RfbmV3KTogQWRqdXN0LgotCShjb3B5X2FjdGlvbik6IGFjdGlvbl9saW5lIGlzIHRoZSBmaXJzdCBsaW5lLCBub3QgdGhlIGxhc3QuCi0JKGNvcHlfZ3VhcmQpOiBKdXN0IGFzIGZvciBhY3Rpb25zLCBzdG9yZSB0aGUgYGFjdGlvbicgb25seSwgbm90Ci0JdGhlIHN3aXRjaC9jYXNlL2JyZWFrIGZsZXNoLgotCURvbid0IHBhcnNlIHRoZSB1c2VyIGFjdGlvbiB0aGF0IG1pZ2h0IGZvbGxvdyB0aGUgZ3VhcmQsIGxldC4uLgotCShyZWFkZ3JhbSk6IGRvIGl0LCBpLmUuLCBub3csIHRoZXJlIGNhbiBiZSBhbiBhY3Rpb24gYWZ0ZXIgYQotCWd1YXJkLgotCUluIG90aGVyIHdvcmRzIHRoZSBndWFyZCBpcyBqdXN0IGV4cGxpY2l0bHkgb3B0aW9uYWwuCi0JKHBhY2tncmFtKTogQWRqdXN0LgotCSogc3JjL291dHB1dC5jIChndWFyZHNfb3V0cHV0KTogTmV3LgotCShvdXRwdXRfcGFyc2VyKTogQ2FsbCBpdCB3aGVuIG5lZWRlZC4KLQkob3V0cHV0KTogQWxzbyBmcmVlIHRoZSBndWFyZCBhbmQgYXR0cnMgb2JzdGFja3MuCi0JKiBzcmMvZmlsZXMuYywgc3JjL2ZpbGVzLmggKG9ic3RhY2tfc2F2ZSk6IFJlbW92ZS4KLQkob3V0cHV0X2ZpbGVzKTogUmVtb3ZlLgotCUFzIGEgcmVzdWx0LCBpZiBvbmUgbmVlZHMgdGhlIGZvcm1lciBgLmFjdCcgZmlsZSwgdXNpbmcgYW4KLQlhcHByb3ByaWF0ZSBza2VsZXRvbiB3aGljaCByZXF1aXJlcyBhY3Rpb25zIGFuZCBndWFyZHMgaXMgbm93Ci0JcmVxdWlyZWQuCi0JKiBzcmMvbWFpbi5jIChtYWluKTogQWRqdXN0LgotCSogdGVzdHMvc2VtYW50aWMuYXQ6IE5ldy4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQ6IFVzZSBgaW5wdXQueScgYXMgaW5wdXQgZmlsZSBuYW1lLgotCUF2b2lkIDgrMyBwcm9ibGVtcyBieSByZXF1aXJpbmcgaW5wdXQuYyB3aGVuIHRoZSB0ZXN0IG5lZWRzIHRoZQotCXBhcnNlci4KLQotMjAwMS0xMi0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9yZWFkZXIuYyAoc3ltYm9sX2xpc3RfbmV3KTogQmUgc3VyZSB0byBpbml0aWFsaXplIGFsbCB0aGUKLQlmaWVsZHMuCi0KLTIwMDEtMTItMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JQWxsIHRoZSBoYWNrcyB1c2luZyBhIGZpbmFsIHBzZXVkbyBzdGF0ZSBhcmUgbm93IHVzZWxlc3MuCi0KLQkqIHNyYy9MUjAuYyAoc2V0X3N0YXRlX3RhYmxlKTogc3RhdGVfdGFibGUgaG9sZHMgZXhhY3RseSBuc3RhdGVzLgotCSogc3JjL2xhbHIuYyAobkxBKTogTmV3LgotCShpbml0aWFsaXplX0xBLCBjb21wdXRlX2xvb2thaGVhZHMsIGluaXRpYWxpemVfbG9va2FoZWFkcyk6IFVzZSBpdAotCWluc3RlYWQgb2YgbG9va2FoZWFkc3AgZnJvbSB0aGUgcHNldWRvIHN0YXRlIChuc3RhdGUgKyAxKS4KLQotMjAwMS0xMi0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9vdXRwdXQuYyAoYWN0aW9uX3JvdywgdG9rZW5fYWN0aW9ucyk6IFVzZSBhIHN0YXRlX3QgaW5zdGVhZAotCW9mIGEgaW50ZWdlciwgYW5kIG5sb29rYWhlYWRzIGluc3RlYWQgb2YgdGhlIGZvbGxvd2luZyBzdGF0ZSdzCi0JbG9va2FoZWFkc3AuCi0KLTIwMDEtMTItMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvY29uZmxpY3RzLmMgKGxvZ19yZXNvbHV0aW9uLCBmbHVzaF9zaGlmdCkKLQkocmVzb2x2ZV9zcl9jb25mbGljdCwgc2V0X2NvbmZsaWN0cywgc29sdmVfY29uZmxpY3RzKQotCShjb3VudF9zcl9jb25mbGljdHMsIGNvdW50X3JyX2NvbmZsaWN0cywgY29uZmxpY3RzX291dHB1dCkKLQkoY29uZmxpY3RzX3ByaW50LCBwcmludF9yZWR1Y3Rpb25zKTogVXNlIGEgc3RhdGVfdCBpbnN0ZWFkIG9mIGFuCi0JaW50ZWdlciB3aGVuIHJlZmVycmluZyB0byBhIHN0YXRlLgotCUFzIG11Y2ggYXMgcG9zc2libGUsIGRlcGVuZCB1cG9uIG5sb29rYWhlYWRzLCBpbnN0ZWFkIG9mIHRoZQotCWBsb29rYWhlYWRzcCcgbWVtYmVyIG9mIHRoZSBmb2xsb3dpbmcgc3RhdGUgKHNpbmNlIGxvb2thaGVhZHMgb2YKLQlzdWNjZXNzaXZlIHN0YXRlcyBhcmUgc3VjY2Vzc2l2ZSwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzdGF0ZSBuICsgMQotCWFuZCBuIHNlcnZlZCBhcyB0aGUgbnVtYmVyIG9mIGxvb2thaGVhZHMgZm9yIHN0YXRlIG4pLgotCSogc3JjL2xhbHIuYyAoYWRkX2xvb2tiYWNrX2VkZ2UpOiBMaWtld2lzZS4KLQkqIHNyYy9wcmludC5jIChwcmludF9jb3JlLCBwcmludF9hY3Rpb25zLCBwcmludF9zdGF0ZSkKLQkocHJpbnRfcmVzdWx0cyk6IExpa2V3aXNlLgotCSogc3JjL3ByaW50X2dyYXBoLmMgKHByaW50X2NvcmUsIHByaW50X2FjdGlvbnMsIHByaW50X3N0YXRlKQotCShwcmludF9ncmFwaCk6IExpa2V3aXNlLgotCSogc3JjL2NvbmZsaWN0cy5oOiBBZGp1c3QuCi0KLTIwMDEtMTItMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvYmlzb24uaGFpcnk6IEZvcm1hdHRpbmcvY29tbWVudCBjaGFuZ2VzLgotCUFOU0lmeS4KLQlSZW1vdmUgYHJlZ2lzdGVyJyBpbmRpY2F0aW9ucy4KLQlBZGQgcGxlbnR5IG9mIGBzdGF0aWMnLgotCi0yMDAxLTEyLTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL291dHB1dC5jIChwcmVwYXJlKTogRHJvcCB0aGUgbXVzY2xlIGBudGJhc2UnIHdoaWNoCi0JZHVwbGljYXRlcyBudG9rZW5zLgotCSogc3JjL2Jpc29uLnNpbXBsZTogRm9ybWF0dGluZy9jb21tZW50IGNoYW5nZXMuCi0JVXNlIFlZTlRPS0VOUyBvbmx5LCB3aGljaCBpcyBkb2N1bWVudGVkLCBidXQgbm90IFlZTlRCQVNFLCB3aGljaAotCWlzIGFuIHVuZG9jdW1lbnRlZCBzeW5vbnltLgotCi0yMDAxLTEyLTIyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL291dHB1dC5jIChvdXRwdXRfdGFibGVfZGF0YSk6IENoYW5nZSB0aGUgcHJvdG90eXBlIHRvIHVzZQotCWBpbnQnIGZvciBhcnJheSByYW5nZXM6IHNvbWUgaW52b2NhdGlvbnMgZG8gcGFzcyBhbiBpbnQsIG5vdCBhCi0Jc2hvcnQuCi0JUmVwb3J0ZWQgYnkgV2F5bmUgR3JlZW4uCi0KLTIwMDEtMTItMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JU29tZSBhY3Rpb25zIG9mIHdlYjJjLnkgYXJlIGltcHJvcGVybHkgdHJpZ2dlcmVkLgotCVJlcG9ydGVkIGJ5IE1pa2UgQ2FzdGxlLgotCi0JKiBzcmMvbGFsci5jICh0cmF2ZXJzZSk6IHMvRiAoaSlba10gPSBGIChqKVtrXS9GIChqKVtrXSA9IEYgKGkpW2tdLy4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFdlYjJjKTogUmVuYW1lIGFzLi4uCi0JKFdlYjJjIFJlcG9ydCk6IHRoaXMuCi0JKFdlYjJjIEFjdGlvbnMpOiBOZXcuCi0KLTIwMDEtMTItMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JUmVkdWN0aW9ucyBpbiB3ZWIyYy55IGFyZSBpbXByb3Blcmx5IHJlcG9ydGVkLgotCVJlcG9ydGVkIGJ5IE1pa2UgQ2FzdGxlLgotCi0JKiBzcmMvY29uZmxpY3RzLmMgKHByaW50X3JlZHVjdGlvbnMpOiBGaXguCi0JKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChXZWIyYyk6IE5ldy4KLQotMjAwMS0xMi0xOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlTb21lIGhvc3QgZmFpbCBvbiBgYXNzZXJ0ICghImZvbyIpJywgd2hpY2ggZXhwYW5kcyB0bwotCSgoISJmb28iKSA/ICh2b2lkKTAgOiBfX2Fzc2VydCgiISJmb28uIiIsIF9fRklMRV9fLCBfX0xJTkVfXykpCi0JUmVwb3J0ZWQgYnkgTmVsc29uIEJlZWJlZS4KLQotCSogc3JjL291dHB1dC5jLCBzcmMvdmNnLmM6IFJlcGxhY2UgYGFzc2VydCAoISJpdCBzdWNjZWVkZWQiKScgd2l0aAotCWAjZGVmaW5lIGl0X3N1Y2NlZWRlZCAwJyBhbmQgYGFzc2VydCAoaXRfc3VjY2VlZGVkKScuCi0KLTIwMDEtMTItMTcgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+Ci0KLQkqIHNyYy9iaXNvbi5zaW1wbGU6IERvbid0IGhhcmQgY29kZSB0aGUgc2tlbGV0b24gbGluZSBhbmQgZmlsZW5hbWUuCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9wYXJzZXIpOiBSZW5hbWUgJ2xpbmUnIGFzICdvdXRwdXRfbGluZScuCi0JTmV3IGxpbmUgY291bnRlciAnc2tlbGV0b25fbGluZScgKHNrZWxldG9uLWxpbmUgbXVzY2xlKS4KLQotMjAwMS0xMi0xNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIE5FV1MsIGRvYy9iaXNvbi50ZXhpbmZvLCBkb2MvYmlzb24uMSwgZG9jL2Jpc29uLnJuaDogRG9jdW1lbnQgdGhhdAotCVlZREVCVUcgbXVzdCBiZSBkZWZpbmVkIHRvIGEgbm9uemVybyB2YWx1ZS4KLQotCSogc3JjL2Jpc29uLnNpbXBsZSAoeXl0bmFtZSk6IERvIG5vdCBhc3N1bWUgdGhhdCB0aGUgdXNlciBkZWZpbmVzCi0JWVlERUJVRyB0byBhIHByb3Blcmx5IHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbi4KLQotMjAwMS0xMi0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9zdGF0ZS5oIChzdGF0ZV90KTogUmVuYW1lIGxvb2thaGVhZHMgYXMgbG9va2FoZWFkc3AuCi0Jbmxvb2thaGVhZHMgaXMgYSBuZXcgbWVtYmVyLgotCUFkanVzdCBhbGwgdXNlcnMuCi0JKiBzcmMvbGFsci5oIChubG9va2FoZWFkcyk6IFJlbW92ZSB0aGlzIG9ycGhhbiBkZWNsYXJhdGlvbi4KLQkqIHNyYy9sYWxyLmMgKGluaXRpYWxpemVfbG9va2FoZWFkcyk6IFNldCBubG9va2FoZWFkcyBmb3IgZWFjaAotCXN0YXRlLgotCi0yMDAxLTEyLTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2ZpbGVzLmgsIHNyYy9maWxlcy5jIChvcGVuX2ZpbGVzLCBjbG9zZV9maWxlcyk6IFJlbW92ZS4KLQkqIHNyYy9tYWluLmMgKG1haW4pOiBEb24ndCBvcGVuL2Nsb3NlIGZpbGVzLCBub3IgaW52b2tlIGxleF9mcmVlLAotCWxldC4uLgotCSogc3JjL3JlYWRlci5jIChyZWFkZXIpOiBEbyBpdC4KLQotMjAwMS0xMi0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9jb25mbGljdHMuYyAocHJpbnRfcmVkdWN0aW9ucyk6IEZvcm1hdHRpbmcgY2hhbmdlcy4KLQotMjAwMS0xMi0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9jb25mbGljdHMuYyAoZmx1c2hfc2hpZnQpOiBBbHNvIGFkanVzdCBsb29rYWhlYWRzZXQuCi0JKGZsdXNoX3JlZHVjZSk6IE5ldy4KLQkocmVzb2x2ZV9zcl9jb25mbGljdCk6IEFkanVzdC4KLQotMjAwMS0xMi0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X29ic3RhY2spOiBCZSBzdGF0aWMgYW5kIHJlbmFtZSBhcy4uLgotCShmb3JtYXRfb2JzdGFjayk6IHRoaXMsIHRvIGF2b2lkIGFueSBjb25mdXNpb24gd2l0aCBmaWxlcy5jJ3MKLQlvdXRwdXRfb2JzdGFjay4KLQkqIHNyYy9yZWFkZXIuaCAobXVzY2xlX29ic3RhY2spOiBNb3ZlIHRvLi4uCi0JKiBzcmMvb3V0cHV0Lmg6IGhlcmUsIHNpbmNlIGl0J3MgZGVmaW5lZCBpbiBvdXRwdXQuYy4KLQotMjAwMS0xMi0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9vdXRwdXQuYyAoYWN0aW9uX3Jvdywgc2F2ZV9jb2x1bW4sIGRlZmF1bHRfZ290bykKLQkoc29ydF9hY3Rpb25zLCBtYXRjaGluZ19zdGF0ZSwgcGFja192ZWN0b3IpOiBCZXR0ZXIgdmFyaWFibGUKLQlsb2NhbGl0eS4KLQotMjAwMS0xMi0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9vdXRwdXQuYzogVmFyaW91cyBmb3JtYXR0aW5nIGNoYW5nZXMuCi0KLTIwMDEtMTItMTcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvZmlsZXMuYyAob3V0cHV0X2ZpbGVzKTogRnJlZSB0aGUgb3V0cHV0X29ic3RhY2suCi0JKiBzcmMvbWFpbi5jIChtYWluKTogQ2FsbCBwcmludCBhbmQgcHJpbnRfZ3JhcGggY29uZGl0aW9uYWxseS4KLQkqIHNyYy9wcmludC5jIChwcmludCk6IFdvcmsgdW5jb25kaXRpb25hbGx5LgotCSogc3JjL3ByaW50X2dyYXBoLmMgKHByaW50X2dyYXBoKTogV29yayB1bmNvbmRpdGlvbmFsbHkuCi0JKiBzcmMvY29uZmxpY3RzLmMgKGxvZ19yZXNvbHV0aW9uKTogT3V0cHV0IG9ubHkgaWYgdmVyYm9zZV9mbGFnLgotCi0yMDAxLTEyLTE2ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgotCi0JKiBzcmMvb3V0cHV0LmMgKGFjdGlvbnNfb3V0cHV0KTogRml4LiBXaGVuIHdlIHVzZSAlbm8tbGluZXMsCi0JdGhlcmUgaXMgb25lIGxlc3MgbGluZSBwZXIgYWN0aW9uLgotCi0yMDAxLTEyLTE2ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgotCi0JKiBzcmMvYmlzb24uc2ltcGxlOiBSZW1vdmUgYSB1c2VsZXNzICNsaW5lIGRpcmVjdGl2ZS4KLQlzLyNsaW5lICUlbGluZSAlJXNrZWxldG9uLyNsaW5lICUlbGluZSAiJSVwYXJzZXItZmlsZS1uYW1lIi8nLgotCSogc3JjL291dHB1dC5jIChnZXRfbGluZXNfbnVtYmVyKTogTmV3LgotCShvdXRwdXRfcGFyc2VyKTogQWRqdXN0LCBub3cgdGFrZXMgY2FyZSBhYm91dCB0aGUgbGluZXMgb2YgYQotCW91dHB1dCBtdXNjbGVzLgotCUZpeCBsaW5lIG51bWJlcmluZy4KLQkoYWN0aW9uc19vdXRwdXQpOiBDb21wdXRlcyB0aGUgbnVtYmVyIG9mIGxpbmVzIHRha2VuIGJ5IGFjdGlvbnMuCi0JKG91dHB1dF9tYXN0ZXJfcGFyc2VyKTogSW5zZXJ0IG5ldyBza2VsZXRvbiB3aGljaCBpcyB0aGUgbmFtZSBvZgotCXRoZSBvdXRwdXQgcGFyc2VyIGZpbGUgbmFtZS4KLQotMjAwMS0xMi0xNSAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KLQotCSogc3JjL2Jpc29uLnNpbXBsZSBbWVlFUlJPUl9WRVJCT1NFXTogUmVzdG9yZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgotCi0yMDAxLTEyLTE1ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgotCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9ncmFtKTogS2VlcCB0cmFjayBvZiB0aGUgaGFpcnkgb25lLgotCi0yMDAxLTEyLTE1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCU1ha2UgYG1ha2UgZGlzdGNoZWNrJyB3b3JrLgotCi0JKiBsaWIvTWFrZWZpbGUuYW0gKElOQ0xVREVTKTogQWRkIHRvcF9zcmNkaXIvaW50bCwgc2luY2UgaGFzaCB1c2VzCi0Jc3lzdGVtLmggd2hpY2ggdXNlcyBsaWJnZXR0ZXh0LmguCi0KLTIwMDEtMTItMTUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvbnVsbGFibGUuYyAoc2V0X251bGxhYmxlKTogVXNlbGVzcyBydWxlcyBtdXN0IGJlIHNraXBwZWQsCi0Jb3RoZXJ3aXNlLCBzaW5jZSB3ZSByYW5nZSBvdmVyIHRoZWlyIHN5bWJvbHMsIHdlIG1pZ2h0IGxvb2sgYXQgYQotCW5vbnRlcm1pbmFsIHdoaWNoIG5vIGxvbmdlciBgYGV4aXN0cycnLCBpLmUuLCBpdCBpcyBub3QgY291bnRlZCBpbgotCWBudmFycycsIGhlbmNlIHdlIG92ZXJmbG93IG91ciBhcnJheXMuCi0KLTIwMDEtMTItMTUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JVGhlIGhlYWRlciBjYW4gYWxzbyBiZSBwcm9kdWNlZCBkaXJlY3RseSwgd2l0aG91dCBhbnkgb2JzdGFjayEKLQlZYWhvbyEKLQotCSogc3JjL2ZpbGVzLmMsIHNyYy9maWxlcy5oIChkZWZpbmVzX29ic3RhY2spOiBSZW1vdmUuCi0JKGNvbXB1dGVfaGVhZGVyX21hY3JvKTogR2xvYmFsLgotCShkZWZpbmVzX29ic3RhY2tfc2F2ZSk6IFJlbW92ZS4KLQkqIHNyYy9yZWFkZXIuYyAocGFyc2VfdW5pb25fZGVjbCk6IE5vIGxvbmdlciBvdXRwdXQgdG8KLQlkZWZpbmVzX29ic3RhY2s6IGl0cyBjb250ZW50IGNhbiBiZSBmb3VuZCBpbiB0aGUgYHN0eXBlJyBtdXNjbGUKLQlhbnl3YXkuCi0JKG91dHB1dF90b2tlbl90cmFuc2xhdGlvbnMpOiBNZXJnZSBpbnRvLi4uCi0JKHN5bWJvbHNfb3V0cHV0KTogdGhpcy4KLQlSZW5hbWUgYXMuLi4KLQkoc3ltYm9sc19zYXZlKTogdGhpcy4KLQkocmVhZGVyKTogQWRqdXN0LgotCSogc3JjL291dHB1dC5jIChoZWFkZXJfb3V0cHV0KTogTmV3LgotCShvdXRwdXQpOiBDYWxsIGl0LgotCi0yMDAxLTEyLTE1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3JlYWRlci5jIChwYXJzZV91bmlvbl9kZWNsKTogSW5zdGVhZCBvZiBoYW5kbGluZyB0d28gb2JzdGFjawotCXNpbXVsdGFuZW91c2x5LCB1c2Ugb25lIHRvIGRlZmluZSB0aGUgYHN0eXBlJyBtdXNjbGUsIGFuZCB1c2UgdGhlCi0JdmFsdWUgb2YgdGhlIGxhdHRlciB0byBmaWxsIGRlZmluZXNfb2JzdGFjay4KLQkoY29weV9jb21tZW50KTogUmVtb3ZlLgotCShjb3B5X2NvbW1lbnQyKTogV29yayBmb3IgYSBzaW5nbGUgb2JzdGFjay4KLQlSZW5hbWUgYXMuLi4KLQkoY29weV9jb21tZW50KTogdGhpcy4KLQotMjAwMS0xMi0xNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9sZXguYywgc3JjL2xleC5oICh4Z2V0Yyk6IE5vIGxvbmdlciBzdGF0aWMuCi0JKiBzcmMvcmVhZGVyLmMgKHBhcnNlX3VuaW9uX2RlY2wpOiBSZXZhbXAuCi0KLTIwMDEtMTItMTUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JU3RpbGwgbWFraW5nIHByb2dyZXNzIGluIHNlcGFyYXRpbmcgQmlzb24gaW50byAoaSkgaW5wdXQsIChpaSkKLQlwcm9jZXNzLCAoaWlpKSBvdXRwdXQ6IG5vdyB3ZSBjYW4gZGlyZWN0bHkgb3V0cHV0IHRoZSBwYXJzZXIgZmlsZQotCXdpdGhvdXQgdXNpbmcgdGFibGVfb2JzdGFjayBhdCBhbGwuCi0KLQkqIHNyYy9maWxlcy5jLCBzcmMvZmlsZXMuaCAodGFibGVfb2JzdGFjayk6IEJ5ZSBieWUuCi0JKHBhcnNlcl9maWxlX25hbWUpOiBOZXcuCi0JKiBzcmMvZmlsZXMuYyAoY29tcHV0ZV9vdXRwdXRfZmlsZV9uYW1lcyk6IENvbXB1dGUgaXQuCi0JKiBzcmMvb3V0cHV0LmMgKGFjdGlvbnNfb3V0cHV0LCBvdXRwdXRfcGFyc2VyKQotCShvdXRwdXRfbWFzdGVyX3BhcnNlcik6IFRvIGEgZmlsZSBpbnN0ZWFkIG9mIGFuIG9ic3RhY2suCi0KLTIwMDEtMTItMTUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JQXR0YWNoIGFjdGlvbnMgdG8gcnVsZXMsIGluc3RlYWQgb2YgcHJlLW91dHB1dHRpbmcgdGhlbSB0bwotCWFjdGlvbnNfb2JzdGFjay4KLQotCSogc3JjL2dyYW0uaCAocnVsZV90KTogYWN0aW9uIGFuZCBhY3Rpb25fbGluZSBhcmUgbmV3IG1lbWJlcnMuCi0JKiBzcmMvcmVhZGVyLmMgKHN5bWJvbF9saXN0KTogTGlrZXdpc2UuCi0JKGNvcHlfYWN0aW9uKTogU2F2ZSB0aGUgYWN0aW9ucyB3aXRoaW4gdGhlIHJ1bGUuCi0JKHBhY2tncmFtKTogU2F2ZSB0aGVtIGluIHJ1bGVfdGFibGUuCi0JKiBzcmMvb3V0cHV0LmMgKGFjdGlvbnNfb3V0cHV0KTogTmV3LgotCShvdXRwdXRfcGFyc2VyKTogVXNlIGl0IG9uIGAlJWFjdGlvbnMnLgotCShvdXRwdXRfcnVsZV9kYXRhKTogRG9uJ3QgZnJlZSBydWxlX3RhYmxlLgotCShvdXRwdXQpOiBEbyBpdC4KLQkocHJlcGFyZSk6IERvbid0IHNhdmUgdGhlIGBhY3Rpb24nIG11c2NsZS4KLQkqIHNyYy9iaXNvbi5zaW1wbGU6IHMvJSVhY3Rpb24vJSVhY3Rpb25zLy4KLQotMjAwMS0xMi0xNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9yZWFkZXIuYyAoY29weV9hY3Rpb24pOiBXaGVuIC0teWFjYywgZG9uJ3QgYXBwZW5kIGEgYDsnCi0JdG8gdGhlIHVzZXIgYWN0aW9uOiBsZXQgaXQgZmFpbCBpZiBsYWNraW5nLgotCVN1Z2dlc3RlZCBieSBBcm5vbGQgUm9iYmlucyBhbmQgVG9tIFRyb21leS4KLQotMjAwMS0xMi0xNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9sZXguYyAobGl0ZXJhbGNoYXIpOiBTaW1wbHkgcmV0dXJuIHRoZSBjaGFyIHlvdSBkZWNvZGVkLCBub24KLQlsb25nZXIgbWVzcyBhcm91bmQgd2l0aCBvYnN0YWNrcyBhbmQgaW50IHBvaW50ZXJzLgotCUFkanVzdCBhbGwgY2FsbGVycy4KLQotMjAwMS0xMi0xNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9sZXguYyAobGl0ZXJhbGNoYXIpOiBEb24ndCBlc2NhcGUgdGhlIHNwZWNpYWwgY2hhcmFjdGVycywKLQlqdXN0IGRlY29kZSB0aGVtLCBhbmQga2VlcCB0aGVtIGFzIGNoYXIgKGJlZm9yZSwgZW9sIHdhcyBvdXRwdXQgYXMKLQl0aGUgMiBjaGFyIHN0cmluZyBgXG4nIGV0Yy4pLgotCSogc3JjL291dHB1dC5jIChvdXRwdXRfcnVsZV9kYXRhKTogVXNlIHF1b3RlYXJnIHRvIG91dHB1dCB0aGUKLQl0b2tlbiBzdHJpbmdzLgotCi0yMDAxLTEyLTEzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogc3JjL2Jpc29uLnNpbXBsZSAoWVlTSVpFX1QsIFlZU1RBQ0tfQUxMT0MsIFlZU1RBQ0tfRlJFRSk6Ci0JRG8gbm90IGluZnJpbmdlIG9uIHRoZSBnbG9iYWwgdXNlciBuYW1lc3BhY2Ugd2hlbiB1c2luZyBDKysuCi0JKFlZRlBSSU5URiwgWVlTVERFUlIpOiBOZXcgbWFjcm9zLCBuZWVkZWQgZm9yIHRoZSBhYm92ZS4KLQlBbGwgdXNlcyBvZiBgZnByaW50ZicgYW5kIGBzdGRlcnInIGNoYW5nZWQuCi0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvOiBEb2N1bWVudCBZWUZQUklOVEYsIFlZU1RERVJSLgotCi0yMDAxLTEyLTEzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCVRoZSBjb21wdXRhdGlvbiBvZiBudWxsYWJsZSBpcyBicm9rZW46IGl0IGRvZXNuJ3QgaGFuZGxlIGVtcHR5Ci0JUkhTJ3MgcHJvcGVybHkuCi0KLQkqIHRlc3RzL3RvcnR1cmUuYXQgKEdOVSBBV0sgR3JhbW1hcik6IE5ldy4KLQkqIHRlc3RzL3NldHMuYXQgKE51bGxhYmxlKTogTmV3LgotCSogc3JjL251bGxhYmxlLmMgKHNldF9udWxsYWJsZSk6IEluc3RlYWQgb2YgYmxpbmRseSBsb29waW5nIG92ZXIKLQlgcml0ZW1zJywgbG9vcCBvdmVyIHRoZSBydWxlcywgYW5kIHRoZW4gb3ZlciB0aGVpciByaHMncy4KLQotCVdvcmsgYXJvdW5kIEF1dG90ZXN0IGJ1Z3MuCi0KLQkqIHNyYy93YXJzaGFsbC5jIChiaXRtYXRyaXhfcHJpbnQpOiBEb24ndCB1c2UgYCstLSsnIGFzIHRhYmxlCi0JZnJhbWUsIGJlY2F1c2UgQXV0b3Rlc3QgdW5kZXJzdGFuZCBsaW5lcyBzdGFydGluZyB3aXRoIGEgYCsnIGFzCi0JdHJhY2VzIGZyb20gdGhlIHNoZWxsLiAgVGhlbiwgdGhleSBhcmUgbm90IHByb2Nlc3NlZCBwcm9wZXJseS4KLQlBZG1pdHRlZGx5IGFuIEF1dG90ZXN0IGJ1ZywgYnV0IHdlIGRvbid0IGhhdmUgdGltZSB0byB3YWl0IGZvcgotCUF1dG90ZXN0IHRvIGNhdGNoIHVwLgotCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoQnJva2VuIENsb3N1cmUpOiBBZGp1c3QgdG8gdGhlIG5ldyB0YWJsZQotCWZyYW1lcy4KLQlNb3ZlIHRvLi4uCi0JKiB0ZXN0cy9zZXRzLmF0OiBoZXJlLgotCi0yMDAxLTEyLTEzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2Nsb3N1cmUuYyAoY2xvc3VyZSk6IFVzZSBucnVsZXMgaW5zdGVhZCBvZiBwbGF5aW5nIHRyaWNrcwotCXdpdGggQklUU19QRVJfV09SRC4KLQotMjAwMS0xMi0xMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9wcmludC5jIChwcmludF9hY3Rpb25zKTogT3V0cHV0IHRoZSBoYW5kbGluZyBvZiBgJCcgYXMgdGhlCi0JdHJhY2VzIGRvOiBzaGlmdGluZyB0aGUgdG9rZW4gRU9GLiAgQmVmb3JlIEVPRiB3YXMgdHJlYXRlZCBhcyBhCi0Jbm9udGVybWluYWwuCi0JKiB0ZXN0cy9yZWdyZXNzaW9uLmF0OiBBZGp1c3Qgc29tZSB0ZXN0cy4KLQkqIHNyYy9wcmludF9ncmFwaC5jIChwcmludF9jb3JlKTogQ29tcGxldGUgdGhlIHNldCBvZiBpdGVtcyB2aWEKLQljbG9zdXJlLiAgVGhlIG5leHQtdG8tZmluYWwgYW5kIGZpbmFsIHN0YXRlcyBhcmUgc3RpbGwgdW5zYXRpc2Z5aW5nLAotCWJ1dCB0aGF0J3MgdG8gYmUgYWRkcmVzc2VkIGVsc2V3aGVyZS4KLQlObyBsb25nZXIgb3V0cHV0IHRoZSBydWxlIG51bWJlcnMsIGJ1dCBkbyBvdXRwdXQgdGhlIHN0YXRlIG51bWJlci4KLQlBIHNpbmdsZSBsb29wIGZvciB0aGUgc2hpZnRzICsgZ290b3MgaXMgZW5vdWdoLCBidXQgcGlja2VkIGEKLQlkaXN0aW5jdCBjb2xvciBmb3IgZWFjaC4KLQkocHJpbnRfZ3JhcGgpOiBJbml0aWFsaXplIGFuZCBmaW5hbGl6ZSBjbG9zdXJlLgotCi0yMDAxLTEyLTEzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3JlYWRlci5jIChyZWFkZ3JhbSk6IFJlbW92ZSBkZWFkIGNvZGUsIGFuIHN0cmlwIHVzZWxlc3MKLQlicmFjZXMuCi0JKGdldF90eXBlKTogUmVtb3ZlLCB1bnVzZWQuCi0KLTIwMDEtMTItMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvY29tcGxhaW4uaCwgc3JjL2NvbXBsYWluLmM6IFJlbW92ZSBlcnJvcl9vbmVfcGVyX2xpbmUsIHJlbHkKLQlvbiB0aGF0IG9mIGxpYi9lcnJvci5jLgotCi0yMDAxLTEyLTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCVNvbWUgaG9zdHMgZG9uJ3QgbGlrZSBgLycgaW4gaW5jbHVkZXMuCi0KLQkqIHNyYy9zeXN0ZW0uaDogSW5jbHVkZSBsaWJnZXR0ZXh0Lmggd2l0aG91dCBxdWFsaWZ5aW5nIHRoZSBwYXRoLgotCSogc3JjL01ha2VmaWxlLmFtIChJTkNMVURFUyk6IEFkZCAkKHRvcF9zcmNkaXIpL2ludGwsIHJlbW92ZQotCSQodG9wX3NyY2RpcikuCi0KLTIwMDEtMTItMTEgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+Ci0KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3BhcnNlcik6IFJlbW92ZSB1c2VsZXNzIG11c2NsZS4KLQotMjAwMS0xMi0xMSAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KLQotCSogc3JjL2Jpc29uLnNpbXBsZTogUmVtb3ZlICNsaW5lIGp1c3QgYmVmb3JlICUlZXBpbG9ndWUuIEl0Ci0JaXMgbm93IGhhbmRsZWQgaW4gLi4uCi0JKiBzcmMvcmVhZGVyLmMgKHJlYWRfYWRkaXRpb25uYWxfY29kZSk6IEFkZCB0aGUgb3V0cHV0IG9mIGEKLQkjbGluZSBmb3IgdGhlIGVwaWxvZ3VlLgotCi0yMDAxLTEyLTEwICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgotCi0JKiBzcmMvcmVhZGVyLmMgKGNvcHlfZGVmaW5pdGlvbik6IFJlLXVzZSBDUFAtb3V0ZWQgY29kZSB3aGljaAotCXJlcGxhY2UgcHJlY2VkZW50IHJlbW92ZS4KLQkqIHNyYy9iaXNvbi5zaW1wbGU6IFJlbW92ZSAjbGluZSBiZWZvcmUgJSVwcm9sb2d1ZSBiZWNhdXNlCi0JJSVpbnB1dC1saW5lIGlzIHdyb25nIGF0IHRoaXMgdGltZS4KLQotMjAwMS0xMi0xMCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KLQotCSogc3JjL3JlYWRlci5jIChzeW1ib2xzX291dHB1dCk6IENsZWFuIHVwLgotCSogc3JjL291dHB1dC5jIChvdXRwdXRfZ3JhbSwgb3V0cHV0KTogQ2xlYW4gdXAuCi0KLTIwMDEtMTItMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvbGFsci5jIChpbml0aWFsaXplX2xvb2thaGVhZHMpOiBOZXcuICBFeHRyYWN0ZWQgZnJvbS4uLgotCSogc3JjL0xSMC5jIChzZXRfc3RhdGVfdGFibGUpOiBoZXJlLgotCSogc3JjL2xhbHIuYyAobGFscik6IENhbGwgaXQuCi0KLTIwMDEtMTItMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvc3RhdGUuaCAoc2hpZnRzKTogUmVtb3ZlIHRoZSBgbnVtYmVyJyBtZW1iZXI6IHNoaWZ0cyBhcmUKLQlhdHRhY2hlZCB0byBzdGF0ZSwgaGVuY2Ugbm8gbG9uZ2VyIG5lZWQgdG8gYmUgbGFiZWxsZWQgd2l0aCBhCi0Jc3RhdGUgbnVtYmVyLgotCi0yMDAxLTEyLTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCU5vdyB0aGF0IHN0YXRlcyBoYXZlIGEgY29tcGxldGUgc2V0IG9mIG1lbWJlcnMsIHRoZSBsaW5rZWQgbGlzdCBvZgotCXNoaWZ0cyBpcyB1c2VsZXNzOiBqdXN0IGZpbGwgZGlyZWN0bHkgdGhlIHN0YXRlJ3Mgc2hpZnRzIG1lbWJlci4KLQotCSogc3JjL3N0YXRlLmggKHNoaWZ0cyk6IFJlbW92ZSB0aGUgYG5leHQnIG1lbWJlci4KLQkqIHNyYy9MUjAuYyAoZmlyc3Rfc3RhdGUsIGxhc3Rfc3RhdGUpOiBSZW1vdmUuCi0JQWRqdXN0IHRoZSBjYWxsZXJzLgotCShhdWdtZW50X2F1dG9tYXRvbik6IERvbid0IGxvb2sgZm9yIHRoZSBzaGlmdHMgdGhhdCBtdXN0IGJlIGFkZGVkCi0JYSBzaGlmdCBvbiBFT0Y6IGl0IGlzIHRob3NlIG9mIHRoZSBzdGF0ZSB3ZSBsb29rZWQgZm9yISAgQnV0IG5vdywKLQlzaW5jZSBzaGlmdHMgYXJlIGF0dGFjaGVkLCBpdCBpcyBubyBsb25nZXIgbmVlZGVkIHRvIGxvb2tpbmcKLQltZXJlbHkgYnkgaXRzIGlkOiBpdHMgbnVtYmVyLgotCi0yMDAxLTEyLTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL0xSMC5jIChhdWdtZW50X2F1dG9tYXRvbik6IEJldHRlciB2YXJpYWJsZSBsb2NhbGl0eS4KLQlSZW1vdmUgYW4gaW1wb3NzaWJsZSBicmFuY2g6IGlmIHRoZXJlIGlzIGEgc3RhdGUgY29ycmVzcG9uZGluZyB0bwotCXRoZSBzdGFydCBzeW1ib2wgYmVpbmcgc2hpZnRlZCwgdGhlbiB0aGVyZSBpcyBzaGlmdCBmb3IgdGhlIHN0YXJ0Ci0Jc3ltYm9sIGZyb20gdGhlIGluaXRpYWwgc3RhdGUuCi0KLTIwMDEtMTItMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvTFIwLmMgKGF1Z21lbnRfYXV0b21hdG9uKTogQ2FsbCBgaW5zZXJ0X2VvZl9zaGlmdGluZ19zdGF0ZScKLQlvbmx5IHdoZW4gYXBwcm9wcmlhdGU6IHdoZW4gaW5zZXJ0X3N0YXJ0X3NoaWZ0aW5nX3N0YXRlJyBpcyBub3QKLQlpbnZva2VkLgotCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoUnVsZSBMaW5lIE51bWJlcnMpOiBBZGp1c3QuCi0KLTIwMDEtMTItMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvTFIwLmMgKGF1Z21lbnRfYXV0b21hdG9uKTogTm93IHRoYXQgYWxsIHN0YXRlcyBoYXZlIHNoaWZ0cywKLQltZXJnZSB0aGUgdHdvIGNhc2VzIGFkZGl0aW9uIHNoaWZ0cyB0byB0aGUgaW5pdGlhbCBzdGF0ZS4KLQotMjAwMS0xMi0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9sYWxyLmMgKHNldF9zdGF0ZV90YWJsZSk6IE1vdmUgdG8uLi4KLQkqIHNyYy9MUjAuYzogaGVyZS4KLQkqIHNyYy9sYWxyLmMgKGxhbHIpOiBEb24ndCBjYWxsIGl0Li4uCi0JKiBzcmMvTFIwLmMgKGdlbmVyYXRlX3N0YXRlcyk6IGRvIGl0LgotCSogc3JjL0xSMC5oIChmaXJzdF9zdGF0ZSk6IFJlbW92ZSwgb25seSB0aGUgdGFibGUgaXMgdXNlZC4KLQotMjAwMS0xMi0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9MUjAuaCAoZmlyc3Rfc2hpZnQsIGZpcnN0X3JlZHVjdGlvbik6IFJlbW92ZS4KLQkqIHNyYy9sYWxyLmM6IERvbid0IHVzZSBmaXJzdF9zaGlmdDogZmluZCBzaGlmdHMgdGhyb3VnaCB0aGUKLQlzdGF0ZXMuCi0KLTIwMDEtMTItMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvTFIwLmM6IEF0dGFjaCBzaGlmdHMgdG8gc3RhdGVzIGFzIHNvb24gYXMgdGhleSBhcmUKLQljb21wdXRlZC4KLQkqIHNyYy9sYWxyLmMgKHNldF9zdGF0ZV90YWJsZSk6IEluc3RlYWQgb2YgYXNzaWduaW5nIHNoaWZ0cyB0bwotCXN0YXRlLCBqdXN0IGFzc2VydCB0aGF0IHRoZSBtYXBwaW5nIHdhcyBwcm9wZXJseSBkb25lLgotCi0yMDAxLTEyLTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL0xSMC5jIChpbnNlcnRfc3RhcnRfc2hpZnQpOiBSZW5hbWUgYXMuLi4KLQkoaW5zZXJ0X3N0YXJ0X3NoaWZ0aW5nX3N0YXRlKTogdGhpcy4KLQkoaW5zZXJ0X2VvZl9zaGlmdGluZ19zdGF0ZSwgaW5zZXJ0X2FjY2VwdGluZ19zdGF0ZSk6IE5ldy4KLQkoYXVnbWVudF9hdXRvbWF0b24pOiBBZGp1c3QuCi0JQmV0dGVyIGxvY2FsaXR5IG9mIHRoZSB2YXJpYWJsZXMuCi0JV2hlbiBsb29raW5nIGlmIHRoZSBzdGFydF9zeW1ib2wgaXMgc2hpZnRlZCBmcm9tIHRoZSBpbml0aWFsCi0Jc3RhdGUsIHVzaW5nIGB3aGlsZSAoLi4uIHN5bWJvbCAhPSBzdGFydF9zeW1ib2wgLi4uKScgc291bmRzCi0JYmV0dGVyIHRoYW4gYHdoaWxlICguLi4gc3ltYm9sIDwgc3RhcnRfc3ltYm9sIC4uLiknOiBJZiBmYWlsCi0JdG8gc2VlIGhvdyB0aGUgb3JkZXIgYmV0d2VlbiBzeW1ib2xzIGNvdWxkIGJlIHJlbGV2YW50IQotCi0yMDAxLTEyLTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2dldGFyZ3MuaDogRG9uJ3QgZGVjbGFyZSBgc3BlY19uYW1lX3ByZWZpeCcgYW5kCi0JYHNwZWNfZmlsZV9wcmVmaXgnLCBkZWNsYXJlZCBieSBzcmMvZmlsZXMuaC4KLQkqIHNyYy9maWxlcy5jLCBzcmMvZmlsZXMuaDogRGVmYXVsdCBmb3Igc3BlY19uYW1lX3ByZWZpeCBpcyAieXkiLgotCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlX2luaXQpOiBEZWZhdWx0IHByZWZpeCB0byBOVUxMLgotCSogc3JjL291dHB1dC5jIChwcmVwYXJlKTogQWRqdXN0LgotCSogc3JjL3JlYWRlci5jIChzeW1ib2xzX291dHB1dCk6IExpa2V3aXNlLgotCSogc3JjL3Ztc2dldGFyZ3MuYzogVmFndWVseSBhZGp1c3QsIGJ1dCB3aG8gY2FyZXM/Ci0KLTIwMDEtMTItMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvbXVzY2xlX3RhYi5jIChtdXNjbGVfaW5pdCk6IE5VTEwgaXMgYSBiZXR0ZXIgZGVmYXVsdCB0aGFuCi0JYCIwIicuCi0KLTIwMDEtMTItMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvcmVhZGVyLmMgKHJlYWRlcik6IENhbGxpbmcgc3ltYm9sc19vdXRwdXQgb25jZSBpcyBlbm91Z2guCi0KLTIwMDEtMTItMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JTm93IHRoYXQgc3RhdGVzIGhhdmUgYSBjb21wbGV0ZSBzZXQgb2YgbWVtYmVycywgdGhlIGxpbmtlZCBsaXN0IG9mCi0JcmVkdWN0aW9ucyBpcyB1c2VsZXNzOiBqdXN0IGZpbGwgZGlyZWN0bHkgdGhlIHN0YXRlJ3MgcmVkdWN0aW9ucwotCW1lbWJlci4KLQotCSogc3JjL3N0YXRlLmggKHN0cnVjdCByZWR1Y3Rpb25zKTogUmVtb3ZlIG1lbWJlciBgbnVtYmVyJyBhbmQKLQlgbmV4dCcuCi0JKiBzcmMvTFIwLmMgKGZpcnN0X3JlZHVjdGlvbiwgbGFzdF9yZWR1Y3Rpb24pOiBSZW1vdmUuCi0JKHNhdmVfcmVkdWN0aW9ucyk6IERvbid0IGxpbmsgdGhlIG5ldyByZWR1Y3Rpb25zLCBzdG9yZSB0aGVtIGluCi0JdGhpc19zdGF0ZS4KLQkqIHNyYy9sYWxyLmMgKHNldF9zdGF0ZV90YWJsZSk6IE5vIG5lZWQgdG8gYXR0YWNoIHJlZHVjdGlvbnMgdG8KLQlzdGF0ZXMsIGl0J3MgYWxyZWFkeSBkb25lLgotCSogc3JjL291dHB1dC5jIChvdXRwdXRfYWN0aW9ucyk6IE5vIGxvbmdlciBmcmVlIHRoZSBzaGlmdHMsIHRoZW4KLQl0aGUgcmVkdWN0aW9ucywgdGhlbiB0aGUgc3RhdGVzOiBmcmVlIGFsbCB0aGUgc3RhdGVzIGFuZCB0aGVpcgotCW1lbWJlcnMuCi0KLTIwMDEtMTItMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvb3B0aW9ucy5jIChPUFROLCBEUlRWLCBCT1RIKTogTmV3LgotCShvcHRpb25fdGFibGUpOiBVc2UgdGhlbS4KLQotCSogc3JjL211c2NsZV90YWIuYzogRG9uJ3QgaW5jbHVkZSB4YWxsb2MuaCBhbmQgc3RyaW5nLmg6IHRoYXQncwotCXRoZSBqb2Igb2Ygc3lzdGVtLmguCi0JKiBzcmMvb3B0aW9ucy5jOiBEb24ndCBpbmNsdWRlIHN0ZGlvLmggYW5kIHhhbGxvYy5oIGZvciB0aGUgc2FtZQotCXJlYXNvbnMuCi0KLTIwMDEtMTItMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dCwgcHJlcGFyZSk6IE1ha2Ugc3VyZSB0aGUgdmFsdWVzIG9mIHRoZQotCW11c2NsZXMgYGFjdGlvbicgYW5kIGBwcm9sb2d1ZScgYXJlIDAtdGVybWluYXRlZC4KLQotMjAwMS0xMi0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlDbGVhbiB1cCBHQ0Mgd2FybmluZ3MuCi0KLQkqIHNyYy9yZWFkZXIuYyAoY29weV9hY3Rpb24pOiBgYnVmJyBpcyBub3QgdXNlZC4KLQkocGFyc2Vfc2tlbF9kZWNsKTogQmUgc3RhdGljLgotCSogc3JjL211c2NsZV90YWIuYyAobWhhc2gxLCBtaGFzaDIsIG11c2NsZV9pbnNlcnQpOiBQcmVzZXJ2ZSBgY29uc3QnLgotCSogc3JjL29wdGlvbnMuaCAoY3JlYXRlX2xvbmdfb3B0aW9uX3RhYmxlKTogSGF2ZSBhIHJlYWwgcHJvdG90eXBlLgotCSogbGliL2hhc2guYywgbGliL2hhc2guaCAoaGFzaF9pbnNlcnQsIGhhc2hfaW5zZXJ0X2F0LCBoYXNoX2RlbGV0ZSkKLQkoaGFzaF9kZWxldGVfYXQpOiBSZXR1cm4gY29uc3Qgdm9pZCAqLgotCUFkanVzdCBjYXN0cyB0byBwcmVzZXJ2ZSB0aGUgY29uc3QuCi0KLTIwMDEtMTItMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBjb25maWd1cmUuaW46IFJlcXVpcmUgMi41MmcuCi0JTTQgaXMgbm90IG5lZWRlZCwgYnV0IEFVVE9NNFRFIGlzLgotCSogbTQvbTQubTQ6IFJlbW92ZS4KLQkqIHRlc3RzL01ha2VmaWxlLmFtOiBBZGp1c3QuCi0KLTIwMDEtMTItMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JT25lIHN0cnVjdHVyZSBmb3Igc3RhdGVzIGlzIGVub3VnaCwgZXZlbiB0aG91Z2ggdGhlb3JldGljYWxseQotCXRoZXJlIGFyZSBMUigwKSBzdGF0ZXMgYW5kIExBTFIoMSkgc3RhdGVzLgotCi0JKiBzcmMvbGFsci5oIChzdGF0ZV90KTogUmVtb3ZlLgotCShzdGF0ZV90YWJsZSk6IEJlIHN0YXRlX3QgKiosIG5vdCBzdGF0ZV90ICouCi0JKiBzcmMvc3RhdGUuaCAoY29yZSwgQ09SRV9BTExPQyk6IFJlbmFtZSBhcy4uLgotCShzdGF0ZV90LCBTVEFURV9BTExPQyk6IHRoaXMuCi0JQWRkIHRoZSBMQUxSKDEpIG1lbWJlcnM6IHNoaWZ0cywgcmVkdWN0aW9ucywgZXJycy4KLQkqIHNyYy9MUjAuYyAoc3RhdGVfdGFibGUpOiBSZW5hbWUgYXMuLi4KLQkoc3RhdGVfaGFzaCk6IHRoaXMsIHRvIGF2b2lkIG5hbWUgY2xhc2hlcyB3aXRoIHRoZSBnbG9iYWwKLQlgc3RhdGVfdGFibGUnLgotCSogc3JjL3ByaW50X2dyYXBoLmMsIHNyYy9MUjAuYywgc3JjL0xSMC5oLCBzcmMvY29uZmxpY3RzLmMKLQkqIHNyYy9sYWxyLmMsIHNyYy9sYWxyLmgsIHNyYy9vdXRwdXQuYywgc3JjL3ByaW50LmM6IEFkanVzdC4KLQotMjAwMS0xMi0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlCaXNvbiBkdW1wcyBjb3JlIG9uIGJhc2gueS4KLQlSZXBvcnRlZCBieSBQYXNjYWwgQmFydC4KLQotCSogc3JjL3dhcnNoYWxsLmMgKGJpdG1hdHJpeF9wcmludCk6IE5ldy4KLQkoVEMpOiBVc2UgaXQuCi0JV2hlbiBwZXJmb3JtaW5nIGEgdHJhbnNpdGl2ZSBjbG9zdXJlIFIoaSwgaikgJiYgUihqLCBrKSA9PiBSKGksIGspLAotCWogbXVzdCBiZSB0aGUgb3V0ZXIgbG9vcC4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKEJyb2tlbiBDbG9zdXJlKTogTmV3LgotCi0yMDAxLTEyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogdGVzdHMvYXRsb2NhbC5pbiAoQ1BQRkxBR1MpOiBEbyBub3QgbGVhdmUgYSBzcGFjZSBiZXR3ZWVuIC1JIGFuZAotCWl0cyBhcmd1bWVudC4KLQlSZXBvcnRlZCBieSBQZXRlciBIYW1vcnNreS4KLQotMjAwMS0xMi0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9jb25mbGljdHMuYyAoZXJyX3RhYmxlKTogUmVtb3ZlLgotCShyZXNvbHZlX3NyX2NvbmZsaWN0KTogQWRqdXN0LgotCSogc3JjL2xhbHIuaCAoc3RhdGVfdC5yZWR1Y3Rpb25fdGFibGUsIHN0YXRlX3Quc2hpZnRfdGFibGUpOgotCVJlbmFtZSBhcy4uLgotCShzdGF0ZV90LnJlZHVjdGlvbnMsIHN0YXRlX3Quc2hpZnRzKTogdGhpcy4KLQotMjAwMS0xMi0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9yZWR1Y2UuYyAocmVkdWNlX2dyYW1tYXJfdGFibGVzKTogTm8gbG9uZ2VyIGRpc2FibGUgdGhlCi0JcmVtb3ZhbCBvZiB1c2VsZXNzIHJ1bGVzIHZpYSBDUFAgYnV0IHZpYSBgaWYgKDApJywgc28gdGhhdCB0aGUKLQljb21waWxlciBzdGlsbCBjaGVjayB0aGUgY29kZSBpcyB2YWxpZC4KLQlGb3IgaW5zdGFuY2UsIGl0IHNob3VsZCBoYXZlIG5vdGljZWQgYHJsaW5lJyBubyBsb25nZXIgZXhpc3RzOiB1c2UKLQl0aGUgYGxpbmUnIG1lbWJlciBvZiBydWxlX3QuCi0JKiBzcmMvZ3JhbS5jIChkdW1teSwgcmxpbmUpOiBSZW1vdmUsIHVudXNlZC4KLQotMjAwMS0xMi0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9vdXRwdXQuYyAocGFja192ZWN0b3IpOiBVc2UgYXNzZXJ0LCBub3QgYmVycm9yLgotCSogc3JjL21haW4uYyAoYmVycm9yKTogUmVtb3ZlLCB1bnVzZWQuCi0KLTIwMDEtMTItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JTmV3IGV4cGVyaW1lbnRhbCBmZWF0dXJlOiBpZiAtLXZlcmJvc2UgLS10cmFjZSBvdXRwdXQgYWxsIHRoZQotCWl0ZW1zIG9mIGEgc3RhdGUsIG5vdCBvbmx5IGl0cyBrZXJuZWwuCi0KLQkqIHNyYy9wcmludC5jIChwcmludF9jb3JlKTogSWYgYHRyYWNlX2ZsYWcnLCB0aGVuIGludm9rZSBjbG9zdXJlCi0JYmVmb3JlIG91dHB1dHRpbmcgdGhlIGl0ZW1zIG9mIHRoZSBzdGF0ZSAocHJpbnRfY29yZSBpcyBubyBsb25nZXIKLQlhIGNvcnJlY3QgbmFtZSB0aGVtKS4KLQkocHJpbnRfcmVzdWx0cyk6IEludm9rZSBuZXdfY2xvc3VyZS9mcmVlX2Nsb3N1cmUgaWYgbmVlZGVkLgotCi0yMDAxLTEyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL0xSMC5jIChuZXdfaXRlbXNldHMpOiBVc2UgbnNoaWZ0cyBvbmx5LCBub3Qgc2hpZnRjb3VudC4KLQkqIHNyYy9jbG9zdXJlLmMsIHNyYy9jbG9zdXJlLmggKGl0ZW1zZXRzaXplKTogUmVuYW1lIGFzLi4uCi0JKG5pdGVtc2V0KTogZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIHJlc3Qgb2YgdGhlIHByb2plY3QuCi0KLTIwMDEtMTItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvY2xvc3VyZS5jIChwcmludF9jbG9zdXJlKTogSW1wcm92ZS4KLQkoY2xvc3VyZSk6IFVzZSBpdCBmb3IgcHJpbnRpbmcgaW5wdXQgYW5kIG91dHB1dC4KLQotMjAwMS0xMi0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9jbG9zdXJlLmMgKEZJUlNUUywgRkRFUklWRVMpOiBBZGp1c3QgdG8gcmVhbGl0eTogdGhleSBhcmUKLQlpbmRleGVkIGJ5IG5vbnRlcm1pbmFscy4KLQotMjAwMS0xMi0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy93YXJzaGFsbC5jIChUQywgUlRDKTogRGUtb2JzZnVjYXRlIChzb3VyY2UgcmVkdWNlZCB0byAyMiUgb2YKLQl3aGF0IGl0IHdhcyEpLgotCSogc3JjL3dhcnNoYWxsLmg6IFJlbW92ZSBhY2NpZGVudGFsIGR1cGxpY2F0aW9uIG9mIHRoZSBjb250ZW50LgotCi0yMDAxLTEyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2Nsb3N1cmUuYyAoc2V0X2ZkZXJpdmVzKTogRGUtb2JmdXNjYXRlLgotCi0yMDAxLTEyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2Nsb3N1cmUuYyAocHJpbnRfZmlyc3RzLCBwcmludF9mZGVyaXZlcyk6IERlLW9iZnVzY2F0ZS4KLQotMjAwMS0xMi0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9jbG9zdXJlLmMgKHNldF9maXJzdHMpOiBEZS1vYmZ1c2NhdGUuCi0KLTIwMDEtMTItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvb3V0cHV0LmMgKGFjdGlvbl9yb3cpOiBEZS1vYmZ1c2NhdGUKLQl1c2luZyB0aGUgZ29vZCBvJyB0ZWNobmlxdWVzOiBhcnJheXMgbm90IHBvaW50ZXJzLCB2YXJpYWJsZQotCWxvY2FsaXR5LCBCSVRJU1NFVCwgUkVTRVRCSVQgZXRjLgotCi0yMDAxLTEyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCVBlc3NpbWl6ZSB0aGUgY29kZSB0byBzaW1wbGlmeSBpdDogZnJvbSBub3cgb24sIGFsbCB0aGUgc3RhdGVzCi0JaGF2ZSBhIHZhbGlkIFNISUZUUywgd2hpY2ggTlNISUZUUyBpcyBwb3NzaWJseSAwLgotCi0JKiBzcmMvTFIwLmMgKHNoaWZ0c19uZXcpOiBCZSBnbG9iYWwgYW5kIG1vdmUgdG8uLgotCSogc3JjL3N0YXRlLmMsIHNyYy9zdGF0ZS5oOiBoZXJlLgotCSogc3JjL2NvbmZsaWN0cywgc3JjL2xhbHIuYywgc3JjL291dHB1dC5jLCBzcmMvcHJpbnQuYywKLQkqIHNyYy9wcmludF9ncmFwaDogQWRqdXN0LgotCi0yMDAxLTEyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3N0YXRlLmggKFNISUZUX0RJU0FCTEUsIFNISUZUX0lTX0RJU0FCTEVEKTogTmV3LgotCSogc3JjL2NvbmZsaWN0cy5jOiBVc2UgaXQuCi0JUmVzdG9yZSBhIGZldyBtaXNzaW5nIGBpZiAoIVNISUZUX0lTX0RJU0FCTEVEKScgd2hpY2ggd2VyZQotCWluY29ycmVjdGx5IGBgc2ltcGxpZmllZCcnLgotCi0yMDAxLTEyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2NvbmZsaWN0cy5jIChmbHVzaF9zaGlmdCwgcmVzb2x2ZV9zcl9jb25mbGljdCk6IERlLW9iZnVzY2F0ZQotCXVzaW5nIHRoZSBnb29kIG8nIHRlY2huaXF1ZXM6IGFycmF5cyBub3QgcG9pbnRlcnMsIHZhcmlhYmxlCi0JbG9jYWxpdHksIEJJVElTU0VULCBSRVNFVEJJVCBldGMuCi0KLTIwMDEtMTItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvc3RhdGUuaCAoU0hJRlRfU1lNQk9MKTogTmV3LgotCSogc3JjL2NvbmZsaWN0cy5jOiBVc2UgaXQgdG8gZGVvYmZ1c2NhdGUuCi0KLTIwMDEtMTItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvY29uZmxpY3RzLmMgKGNvdW50X3NyX2NvbmZsaWN0cywgY291bnRfcnJfY29uZmxpY3RzKQotCShwcmludF9yZWR1Y3Rpb25zKTogRGUtb2JmdXNjYXRlIHVzaW5nIHRoZSBnb29kIG8nIHRlY2huaXF1ZXM6Ci0JYXJyYXlzIG5vdCBwb2ludGVycywgdmFyaWFibGUgbG9jYWxpdHksIEJJVElTU0VULgotCi0yMDAxLTEyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2NvbmZsaWN0cy5jIChwcmludF9yZWR1Y3Rpb25zKTogQXJyYXlzLCBub3QgcG9pbnRlcnMuCi0JVXNlIEJJVElTU0VULgotCi0yMDAxLTEyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2NvbmZsaWN0cy5jIChwcmludF9yZWR1Y3Rpb25zKTogUGVzc2ltaXplLCBidXQgY2xhcmlmeS4KLQotMjAwMS0xMi0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9jb25mbGljdHMuYyAocHJpbnRfcmVkdWN0aW9ucyk6IEltcHJvdmUgdmFyaWFibGUgbG9jYWxpdHkuCi0KLTIwMDEtMTItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvY29uZmxpY3RzLmMgKHByaW50X3JlZHVjdGlvbnMpOiBQZXNzaW1pemUsIGJ1dCBjbGFyaWZ5LgotCi0yMDAxLTEyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2NvbmZsaWN0cy5jIChwcmludF9yZWR1Y3Rpb25zKTogSW1wcm92ZSB2YXJpYWJsZSBsb2NhbGl0eS4KLQotMjAwMS0xMi0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9zdGF0ZS5oIChTSElGVF9JU19FUlJPUiwgU0hJRlRfSVNfR09UTywgU0hJRlRfSVNfU0hJRlQpOiBOZXcuCi0JKiBzcmMvbGFsci5jOiBVc2UgdGhlbS4KLQotMjAwMS0xMi0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9MUjAuYyAoYXVnbWVudF9hdXRvbWF0b24pOiBGb3JtYXR0aW5nIGNoYW5nZXMuCi0JQmV0dGVyIHZhcmlhYmxlIGxvY2FsaXR5LgotCi0yMDAxLTEyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2xhbHIuYyAobWF0cml4X3ByaW50KTogTmV3LgotCSh0cmFuc3Bvc2UpOiBVc2UgaXQuCi0JVXNlIGFycmF5cyBpbnN0ZWFkIG9mIHBvaW50ZXJzLgotCi0yMDAxLTEyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2xhbHIuYyAobWF4cmhzKTogTW92ZSB0by4uLgotCSogc3JjL2dyYW0uYywgc3JjL2dyYW0uaCAocml0ZW1fbG9uZ2VzdF9yaHMpOiBoZXJlLgotCSogc3JjL2xhbHIuYyAoYnVpbGRfcmVsYXRpb25zKTogQWRqdXN0LgotCi0yMDAxLTEyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2xhbHIuYyAodHJhbnNwb3NlKTogRnJlZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCB0byB0aGUKLQlhcmd1bWVudCwgYXMgaXQgaXMgcmVwbGFjZWQgYnkgdGhlIHJlc3VsdHMgYnkgdGhlIHVuaXF1ZSBjYWxsZXIuCi0JKGJ1aWxkX3JlbGF0aW9ucyk6IE1lcmVseSBpbnZva2UgdHJhbnNwb3NlOiBpdCBoYW5kbGVzIHRoZSBtZW1vcnkKLQlkZWFsbG9jYXRpb24uCi0JSW1wcm92ZSB2YXJpYWJsZSBsb2NhbGl0eS4KLQlBdm9pZCB2YXJpYWJsZXMgdXNlZCBhcyBtZXJlIGFiYnJldmlhdGlvbnMuCi0JKGNvbXB1dGVfbG9va2FoZWFkcyk6IFVzZSBhcnJheXMgaW5zdGVhZCBvZiBwb2ludGVycy4KLQotMjAwMS0xMi0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9sYWxyLmMgKGluaXRpYWxpemVfRik6IEltcHJvdmUgdmFyaWFibGUgbG9jYWxpdHkuCi0JQXZvaWQgdmFyaWFibGVzIHVzZWQgYXMgbWVyZSBhYmJyZXZpYXRpb25zLgotCi0yMDAxLTEyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2Rlcml2ZXMuYyAocHJpbnRfZGVyaXZlcyk6IERpc3BsYXkgdGhlIHJ1bGVuby4KLQkqIHNyYy9sYWxyLmMgKGluaXRpYWxpemVfRiwgdHJhbnNwb3NlKTogQmV0dGVyIHZhcmlhYmxlIGxvY2FsaXR5Ci0JdG8gaW1wcm92ZSByZWFkYWJpbGl0eS4KLQlBdm9pZCB2YXJpYWJsZXMgdXNlZCBhcyBtZXJlIGFiYnJldmlhdGlvbnMuCi0KLTIwMDEtMTItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvbGFsci5jICh0cmF2ZXJzZSk6IFVzZSBhcnJheXMgaW5zdGVhZCBvZiBwb2ludGVycy4KLQotMjAwMS0xMi0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9udWxsYWJsZS5jIChzZXRfbnVsbGFibGUpOiBVc2UgYSBmb3IgbG9vcCB0byBkZS1vYmZ1c2NhdGUKLQl0aGUgaGFuZGxpbmcgb2Ygc3F1ZXVlLgotCWBzeW1ib2wgPj0gMCcgaXMgd3Jvbmcgbm93LCB1c2UgYHJ1bGVfdGFibGVbcnVsZW5vXS51c2VmdWwnLgotCi0yMDAxLTEyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCUJlY2F1c2UgdXNlbGVzcyBub250ZXJtaW5hbHMgYXJlIG5vdyBrZXB0IGFsaXZlIChpbnN0ZWFkIG9mIGJlaW5nCi0JYGRlc3Ryb3llZCcpLCB3ZSBub3cgc29tZXRpbWVzIGV4YW1pbmUgdGhlbSwgYW5kIHN0b3JlIGluZm9ybWF0aW9uCi0JcmVsYXRlZCB0byB0aGVtLiAgSGVuY2Ugd2UgbmVlZCB0byBrbm93IHRoZWlyIG51bWJlciwgYW5kIGFkanVzdAotCW1lbW9yeSBhbGxvY2F0aW9ucy4KLQotCSogc3JjL3JlZHVjZS5jLCBzcmMvcmVkdWNlLmggKG51c2VsZXNzX25vbnRlcm1pbmFscyk6IE5vIGxvbmdlcgotCXN0YXRpYy4KLQkqIHNyYy9MUjAuYyAoYWxsb2NhdGVfaXRlbXNldHMpOiBUaGUgbWVtb3J5IGFsbG9jYXRlZCB0bwotCWBzeW1ib2xfY291bnQnIHdhcyB1c2VkIGZvciB0d28gZGlmZmVyZW50IHB1cnBvc2U6IG9uY2UgdG8gY291bnQKLQl0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIGVhY2ggc3ltYm9sLCBhbmQgbGF0ZXIgcmVhc3NpZ25lZCB0bwotCWBzaGlmdF9zeW1ib2wnLCBjb250YWluaW5nIHRoZSBzeW1ib2wgdGhhdCBjYW4gYmUgc2hpZnRlZCBmcm9tIGEKLQlnaXZlbiBzdGF0ZS4KLQlEZW9iZnVzY2F0ZSwgaS5lLiwgYWxsb2NhdGUsIHVzZSBhbmQgZnJlZSBgc3ltYm9sX2NvdW50JyBoZXJlCi0Jb25seSwgYW5kLi4uCi0JKG5ld19pdGVtc2V0cyk6IEFsbG9jYXRlIGBzaGlmdF9zeW1ib2wnIGhlcmUuCi0JKGFsbG9jYXRlX2l0ZW1zZXRzKTogc3ltYm9sX2NvdW50IGluY2x1ZGVzIHVzZWxlc3Mgbm9udGVybWluYWxzLgotCU1ha2Ugcm9vbSBmb3IgdGhlbS4KLQkoZnJlZV9zdG9yYWdlKTogVXNlIGBmcmVlJywgbm90IGBYRlJFRScsIGZvciBwb2ludGVycyB0aGF0IGNhbm5vdAotCWJlIG51bGwuCi0KLTIwMDEtMTItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvbnVsbGFibGUuYyAoc2V0X251bGxhYmxlKTogRGVvYmZ1c2NhdGUgdGhlIGhhbmRsaW5nIG9mCi0Jcml0ZW0uCi0JYHN5bWJvbCA+PSAwJyBpcyB3cm9uZyBub3csIHVzZSBgcnVsZV90YWJsZVtydWxlbm9dLnVzZWZ1bCcuCi0KLTIwMDEtMTItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvZ3JhbS5jLCBzcmMvZ3JhbS5oIChyaXRlbV9wcmludCk6IE5ldy4KLQkqIHNyYy9ncmFtLmMgKGR1bW15KTogUmVtb3ZlLCBub3cgdGhlcmUgaXMgYWN0dWFsIGNvZGUgaW4gZ3JhbS5jLgotCShUaGlzIHVzZWxlc3MgZnVuY3Rpb24gd2FzIGRlZmluZWQgb25seSB0byB3b3JrIGFyb3VuZCBWTVMgbGlua2VycwotCXRoYXQgY2FuJ3QgaGFuZGxlIGNvbXBpbGF0aW9uIHVuaXRzIHdpdGggdmFyaWFibGVzIG9ubHkpLgotCSogc3JjL3JlZHVjZS5jIChkdW1wX2dyYW1tYXIpOiBVc2UgaXQgdG8gdHJhY2UgdGhlIGNvbnN0cnVjdGlvbiBvZgotCXJpdGVtLgotCi0yMDAxLTEyLTA0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogc3JjL2Jpc29uLnNpbXBsZSAodW5pb24geXlhbGxvYyk6IENoYW5nZSBtZW1iZXIgbmFtZXMKLQl0byBiZSB0aGUgc2FtZSBhcyB0aGUgc3RhY2sgbmFtZXMuCi0JKHl5cGFyc2UpOiB5eXB0ciBpcyBub3cgdW5pb24geXlhbGxvYyAqLCBub3QgY2hhciAqLgotCShZWVNUQUNLX1JFTE9DQVRFKTogTGlrZXdpc2UuICBUaGlzIGF2b2lkcyBhIEdDQyB3YXJuaW5nLAotCWFuZCBtYXkgZ2VuZXJhdGUgYmV0dGVyIGNvZGUgb24gc29tZSBtYWNoaW5lcy4KLQkoeXlzdHBjcHkpOiBVc2UgcHJvdG90eXBlIGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIG5vdCBqdXN0Ci0JaWYgX19jcGx1c3BsdXMgaXMgZGVmaW5lZC4KLQotMjAwMS0xMS0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGNvbmZpZ3VyZS5pbiAoV0FSTklOR19DRkxBR1MpOiBBZGQgLVdlcnJvciB3aGVuIHBvc3NpYmxlLgotCShDRkxBR1MpOiBEbyBub3QgaW5jbHVkZSB0aGUgV0FSTklOR19DRkxBR1MgaGVyZSwgc2luY2UgR05VCi0JR2V0dGV4dCBkb2Vzbid0IGNvbXBpbGUgY2xlYW5seSwgYW5kIGRpZXMgd2l0aCAtV2Vycm9yLgotCSogc3JjL01ha2VmaWxlLmFtLCBsaWIvTWFrZWZpbGUuYW0sIHRlc3RzL2F0bG9jYWwuaW4gKENGTEFHUyk6Ci0JSW5jbHVkZSBXQVJOSU5HX0NGTEFHUyBoZXJlLgotCSogbGliL3hzdHJkdXAuYzogSW5jbHVkZSB4YWxsb2MuaCwgc28gdGhhdCB4c3RyZHVwIGJlIGRlY2xhcmVkCi0JYmVmb3JlIGJlaW5nIGRlZmluZWQuCi0KLTIwMDEtMTEtMjcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBsaWIvcXVvdGVhcmcuaCAocXVvdGVhcmdfbiwgcXVvdGVhcmdfbl9zdHlsZSk6Ci0JRmlyc3QgYXJnIGlzIGludCwgbm90IHVuc2lnbmVkLgotCSogbGliL3F1b3RlYXJnLmMgKHF1b3RlYXJnX24sIHF1b3RlYXJnX25fc3R5bGUpOiBMaWtld2lzZS4KLQkoU0laRV9NQVgsIFVJTlRfTUFYKTogTmV3IG1hY3Jvcy4KLQkocXVvdGVhcmdfbl9vcHRpb25zKTogQWJvcnQgaWYgTiBpcyBuZWdhdGl2ZS4KLQlBdm9pZCBvdmVyZmxvdyBjaGVjayBvbiBob3N0cyB3aGVyZSBzaXplX3QgaXMgNjQgYml0cyBhbmQgaW50Ci0JaXMgMzIgYml0cywgYXMgb3ZlcmZsb3cgaXMgaW1wb3NzaWJsZSB0aGVyZS4KLQlGaXggb2ZmLWJ5LW9uZSB0eXBvIHRoYXQgY2F1c2VkIHVubmVjZXNzYXJ5IHJlYWxsb2NhdGlvbi4KLQotMjAwMS0xMS0yOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQlOYW1lIHNwYWNlIGNsZWFudXAgaW4gZ2VuZXJhdGVkIHBhcnNlci4KLQotCSogZG9jL2Jpc29uLnRleGluZm8gKEJpc29uIFBhcnNlcik6IERpc2N1c3Mgc3lzdGVtIGhlYWRlcnMKLQlhbmQgdGhlaXIgZWZmZWN0IG9uIHRoZSB1c2VyIG5hbWUgc3BhY2UuCi0KLQkqIHNyYy9iaXNvbi5zaW1wbGU6Ci0JKFlZU1RBQ0tfQUxMT0MsIFlZU1RBQ0tfRlJFRSwgdW5pb24geXlhbGxvYywgWVlTVEFDS19HQVBfTUFYLAotCVlZU1RBQ0tfQllURVMsIFlZU1RBQ0tfUkVMT0NBVEUpOiBEbyBub3QgZGVmaW5lIHVubGVzcyBuZWNlc3NhcnksCi0JaS5lLiB1bmxlc3MgISBkZWZpbmVkICh5eW92ZXJmbG93KSB8fCBkZWZpbmVkIChZWUVSUk9SX1ZFUkJPU0UpLgotCi0JKFlZU0laRV9UKTogTmV3IG1hY3JvLiAgVXNlIGl0IGluc3RlYWQgb2Ygc2l6ZV90LCB0byBhdm9pZCBpbmZyaW5naW5nCi0Jb24gdXNlciBuYW1lcyB3aGVuIHBvc3NpYmxlLgotCi0JKFlZU1RBQ0tfVVNFX0FMTE9DQSk6IERvIG5vdCBkZWZpbmU7IGp1c3QgdXNlIGFueSBleGlzdGluZyBkZWZuLgotCVNpbXBsaWZ5IHRlc3QgZm9yIHdoYXRoZXIgPGFsbG9jYS5oPiBleGlzdHMuCi0KLQkoPHN0ZGxpYi5oPik6IEluY2x1ZGUgaWYgd2Ugd2lsbCB1c2UgbWFsbG9jLCBhbmQgaWYgc3RhbmRhcmQgQyBvciBDKysuCi0KLQkoPHN0ZGlvLmg+KTogSW5jbHVkZSBpZiBZWURFQlVHLgotCi0JKHl5bWVtY3B5KTogUmVuYW1lZCBmcm9tIF9feXlfbWVtY3B5LiAgRG8gbm90IGRlZmluZSB1bmxlc3MKLQkhIGRlZmluZWQgKHl5b3ZlcmZsb3cpICYmICEgZGVmaW5lZCAoeXltZW1jcHkpLgotCi0JKHl5bWVtY3B5LCB5eXBhcnNlKTogUmVuYW1lIGxvY2FsIHZhcmlhYmxlcyBhcyBuZWVkZWQgc28gdGhhdAotCXRoZXkgYWxsIGJlZ2luIHdpdGggJ3l5Jy4KLQotCSh5eXN0cmxlbiwgeXlzdHBjcHkpOiBOZXcgZnVuY3Rpb25zLgotCi0JKFlZX0RFQ0xfTk9OX0xTUF9WQVJJQUJMRVMpOiBSZW5hbWVkIGZyb20gX1lZX0RFQ0xfVkFSSUFCTEVTLgotCUFsbCB1c2VzIGNoYW5nZWQuCi0KLQkoeXlwYXJzZSk6IHNpemVfdCAtPiBZWVNJWkVfVC4gIFVzZSB5eXN0cmxlbiBhbmQgeXlzdHBjcHkKLQlpbnN0ZWFkIG9mIHJlbHlpbmcgb24gc3RyaW5nLmggZnVuY3Rpb25zLiAgVXNlIFlZU1RBQ0tfQUxMT0MKLQlhbmQgWVlTVEFDS19GUkVFIGluc3RlYWQgb2YgbWFsbG9jIGFuZCBmcmVlLgotCi0yMDAxLTExLTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2Jpc29uLnNpbXBsZSAoWVlTVFlQRSwgWVlMVFlQRSk6IE1vdmUgdGhlaXIgZGVmaW5pdGlvbnMKLQliZWZvcmUgdGhlaXIgZmlyc3QgdXNlcy4KLQkoWVlCSVNPTiwgWVlQVVJFKTogTW92ZSB0byB0aGUgdG9wIG9mIHRoZSBvdXRwdXQuCi0KLTIwMDEtMTEtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiB0ZXN0cy9yZWR1Y2UuYXQgKFVzZWxlc3MgTm9udGVybWluYWxzKTogRml4LgotCi0yMDAxLTExLTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2Jpc29uLnNpbXBsZSAoWVlTVEFDS19GUkVFKTogVXNlIGBkbyB7O30gd2hpbGUgKDApJyBhcyBlbXB0eQotCWlmIGJvZHkgaW5zdGVhZCBvZiBgOycgdG8gcGFjaWZ5IEdDQydzIHdhcm5pbmdzLgotCi0yMDAxLTExLTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCUluc3RlYWQgb2YgbWFwcGluZyB0aGUgTEhTIG9mIHVudXNlZCBydWxlcyB0byAtMSwga2VlcCB0aGUgTEhTCi0JdmFsaWQsIGJ1dCBmbGFnIHRoZSBydWxlcyBhcyBpbnZhbGlkLgotCi0JKiBzcmMvZ3JhbS5oIChydWxlX3QpOiBgdXNlZnVsJyBpcyBhIG5ldyBtZW1iZXIuCi0JKiBzcmMvcHJpbnQuYyAocHJpbnRfZ3JhbW1hcik6IEFkanVzdC4KLQkqIHNyYy9kZXJpdmVzLmMgKHNldF9kZXJpdmVzKTogTGlrZXdpc2UuCi0JKiBzcmMvcmVhZGVyLmMgKHBhY2tncmFtLCByZWR1Y2Vfb3V0cHV0KTogTGlrZXdpc2UuCi0JKiBzcmMvcmVkdWNlLmMgKHJlZHVjZV9ncmFtbWFyX3RhYmxlcyk6IExpa2V3aXNlLgotCSogdGVzdHMvcmVkdWNlLmF0IChVbmRlcml2YWJsZSBSdWxlcywgVXNlbGVzcyBSdWxlcyk6IE5ldy4KLQotMjAwMS0xMS0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9yZWR1Y2UuYyAocmVkdWNlX291dHB1dCk6IEZvcm1hdHRpbmcgY2hhbmdlcy4KLQkqIHNyYy9wcmludC5jIChwcmludF9yZXN1bHRzLCBwcmludF9ncmFtbWFyKTogTGlrZXdpc2UuCi0JKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChSdWxlIExpbmUgTnVtYmVycykKLQkoU29sdmVkIFNSIENvbmZsaWN0cywgVW5yZXNvbHZlZCBTUiBDb25mbGljdHMpOiBBZGp1c3QuCi0KLTIwMDEtMTEtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvcmVkdWNlLmMgKG5vbnRlcm1pbmFsc19yZWR1Y2UpOiBJbnN0ZWFkIG9mIHRocm93aW5nIGF3YXkKLQl1c2VsZXNzIG5vbnRlcm1pbmFscywgbW92ZSB0aGVtIGF0IHRoZSBlbmQgb2YgdGhlIHN5bWJvbCBhcnJheXMuCi0JKHJlZHVjZV9vdXRwdXQpOiBBZGp1c3QuCi0JKiB0ZXN0cy9yZWR1Y2UuYXQgKFVzZWxlc3MgTm9udGVybWluYWxzKTogQWRqdXN0LgotCi0yMDAxLTExLTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3JlZHVjZS5jOiBWYXJpb3VzIGNvbW1lbnQvZm9ybWF0dGluZyBjaGFuZ2VzLgotCShub250ZXJtaW5hbHNfcmVkdWNlKTogTmV3LCBleHRyYWN0ZWQgZnJvbS4uLgotCShyZWR1Y2VfZ3JhbW1hcl90YWJsZXMpOiBoZXJlLgotCShyZWR1Y2VfZ3JhbW1hcik6IENhbGwgbm9udGVybWluYWxzX3JlZHVjZS4KLQotMjAwMS0xMS0yOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIHNyYy9iaXNvbi5zaW1wbGUgKFlZU1RBQ0tfUkVBTExPQyk6IFJlbW92ZS4KLQkoWVlTVEFDS19BTExPQyk6IFJlc3VycmVjdCB0aGlzIG1hY3JvLCB3aXRoIGl0cyBvbGQgbWVhbmluZy4KLQkoWVlTVEFDS19GUkVFLCBZWVNUQUNLX0dBUF9NQVgsIFlZU1RBQ0tfQllURVMsIFlZU1RBQ0tfUkVMT0NBVEUpOgotCU5ldyBtYWNyb3MuCi0JKHVuaW9uIHl5YWxsb2MpOiBOZXcgdHlwZS4KLQkoX195eV9tZW1jcHkpOiBMYXN0IGFyZyBpcyBzaXplX3QsIG5vdCB1bnNpZ25lZCBpbnQsIHRvIHJlbW92ZQotCWFuIGFyYml0cmFyeSByZXN0cmljdGlvbiBvbiBob3N0cyB3aGVyZSBzaXplX3QgaXMgd2lkZXIgdGhhbiBpbnQuCi0KLQkoeXlwYXJzZSk6IERvbid0IGR1bXAgY29yZSBpZiBhbGxvY2Egb3IgbWFsbG9jIGZhaWxzOyBpbnN0ZWFkLCByZXBvcnQKLQlhIHBhcnNlciBzdGFjayBvdmVyZmxvdy4gIEFsbG9jYXRlIGp1c3Qgb25lIGJsb2NrIG9mIG1lbW9yeSBmb3IgYWxsCi0JdGhyZWUgc3RhY2tzLCBpbnN0ZWFkIG9mIGFsbG9jYXRpbmcgdGhyZWUgYmxvY2tzOyB0aGlzIHR5cGljYWxseSBpcwotCWZhc3RlciBhbmQgcmVkdWNlcyBmcmFnbWVudGF0aW9uLgotCi0JRG8gbm90IGxpbWl0IHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHN0YWNrIHRvIGEgdmFsdWUgdGhhdCBmaXRzCi0JaW4gJ2ludCcsIGFzIHRoaXMgaXMgYW4gYXJiaXRyYXJ5IGxpbWl0IG9uIGhvc3RzIHdpdGggNjQtYml0Ci0Jc2l6ZV90IGFuZCAzMi1iaXQgaW50LgotCi0yMDAxLTExLTI5ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgotCi0JKiB0ZXN0cy9jYWxjLmF0IFtBVF9EQVRBX0NBTENfWV06IFVzZSAlZXJyb3ItdmVyYm9zZSBpbnN0ZWFkCi0Jb2YgZGVmaW5pbmcgWVlFUlJPUl9WRVJCT1NFLgotCVtBVF9EQVRBXTogJDQgaXMgbm93IG91dCBvZiBDIGRlY2xhcmF0aW9ucyBpbiB0aGUgcHJvbG9ndWUuCi0KLTIwMDEtMTEtMjggIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+Ci0KLQkqIHNyYy9yZWFkZXIuYyAocGFyc2VfZHF1b3RlZF9wYXJhbSk6IE5ldy4KLQkocGFyc2Vfc2tlbF9kZWNsKTogVXNlIGl0LgotCSogc3JjL2xleC5oOiBBZGQgaXRzIHByb3RvdHlwZS4KLQkqIHNyYy9sZXguYyAobGl0ZXJhbGNoYXIpOiBCZWNvbWUgbm90IHN0YXRpYy4KLQotMjAwMS0xMS0yOCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KLQotCSogc3JjL291dHB1dC5oOiBBbmQgcHV0IGl0cyBleHRlcm4gZGVjbGFyYXRpb24gaGVyZS4KLQkqIHNyYy9vdXRwdXQuYyAoZXJyb3JfdmVyYm9zZSk6IERlZmluZSBoZXJlLgotCShwcmVwYXJlKTogRWNobyBuYW1lIG1vZGlmaWNhdGlvbi4KLQkqIHNyYy9nZXRhcmdzLmg6IENsZWFuIGl0cyBleHRlcm4gZGVjbGFyYXRpb24uCi0JKiBzcmMvZ2V0YXJncy5jIChlcnJvcl92ZXJib3NlX2ZsYWcpOiBSZW1vdmUuCi0JKGdldGFyZ3MpOiBSZW1vdmUgY2FzZSAnZScuCi0JKiBzcmMvb3B0aW9ucy5jIChvcHRpb25fdGFibGUpOiAnZXJyb3ItdmVyYm9zZScgaXMgbm93IHNlZW4gYXMgc2ltcGxlCi0JcGVyY2VudCBvcHRpb24uCi0JSW5jbHVkZSBvdXRwdXQuaC4KLQotCSogc3JjL3JlYWRlci5jIChyZWFkX2RlY2xhcmF0aW9ucyk6IFJlbW92ZSBjYXNlIHRva19pbmNsdWRlLgotCShwYXJzZV9pbmNsdWRlX2RlY2wpOiBSZW1vdmUuCi0JKiBzcmMvbGV4LmggKHRva2VuX3QpOiBSZW1vdmUgdG9rX2luY2x1ZGUuCi0JKiBzcmMvb3B0aW9ucy5jIChvcHRpb25fdGFibGUpOiAnaW5jbHVkZScgaXMgbm93IGEgc2ltcGxlIGNvbW1hbmQgbGluZQotCW9wdGlvbi4KLQotMjAwMS0xMS0yOCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KLQotCSogc3JjL2Jpc29uLnNpbXBsZTogQWRqdXN0IG11c2NsZSBuYW1lcy4KLQkqIHNyYy9tdXNjbGVfdGFiLmMgKG11c2NsZV9pbml0KTogQWxzbyByZW5hbWUgdGhlIG11c2NsZXMuCi0JKiBzcmMvb3V0cHV0LmMgKHByZXBhcmUpOiBzL18vLS8gZm9yIHRoZSBtdXNjbGVzIG5hbWVzLgotCShvdXRwdXRfcGFyc2VyKTogV2hlbiBzY2FubmluZyBmb3IgYSBtdXNjbGUsIGFsbG93ICctJyBpbnN0ZWFkIG9mICdfJy4KLQotMjAwMS0xMS0yOCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KLQotCSogc3JjL2Jpc29uLnNpbXBsZTogRml4IGRlYnVnLgotCVtZWUVSUk9SX1ZFUkJPU0VdOiBSZS1pbnRlZ3JhdGUgYXMgYW4gaW50ZXJuYWwgbWFjcm8uCi0KLTIwMDEtMTEtMjggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvTFIwLmMgKHNoaWZ0c19uZXcpOiBOZXcuCi0JKHNhdmVfc2hpZnRzLCBpbnNlcnRfc3RhcnRfc2hpZnQsIGF1Z21lbnRfYXV0b21hdG9uKTogVXNlIGl0LgotCi0yMDAxLTExLTI4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2Nsb3N1cmUuYyAoY2xvc3VyZSk6IGBiJyBhbmQgYHJ1bGVubycgZGVub3RlIHRoZSBzYW1lIHZhbHVlOgotCWtlZXAgcnVsZW5vIG9ubHkuCi0KLTIwMDEtMTEtMjggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvY2xvc3VyZS5jIChjbG9zdXJlKTogSW5zdGVhZCBvZiBsb29waW5nIG92ZXIgd29yZCBpbiBhcnJheQotCXRoZW4gYml0cyBpbiB3b3JkcywgbG9vcCBvdmVyIGJpdHMgaW4gYXJyYXkuCi0KLTIwMDEtMTEtMjggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvY2xvc3VyZS5jIChjbG9zdXJlKTogTm8gbG9uZ2VyIG9wdGltaXplIHRoZSBzcGVjaWFsIGNhc2UKLQl3aGVyZSBhbGwgdGhlIGJpdHMgb2YgYHJ1bGVzZXRbcl0nIGFyZSBzZXQgdG8gMCwgdG8gbWFrZSB0aGUgY29kZQotCWNsZWFyZXIuCi0KLTIwMDEtMTEtMjggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvY2xvc3VyZS5jIChjbG9zdXJlKTogYHInIGFuZCBgYycgYXJlIG5ldyB2YXJpYWJsZXMsIHVzZWQgdG8KLQlkZS1vYmZ1c2NhdGUgYWNjZXNzZXMgdG8gUlVMRVNFVCBhbmQgQ09SRS4KLQotMjAwMS0xMS0yOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9yZWR1Y2UuYyAocmVkdWNlX3ByaW50KTogVXNlIG5nZXR0ZXh0LgotCShkdW1wX2dyYW1tYXIpOiBJbXByb3ZlIHRoZSB0cmFjZSBhY2N1cmFjeS4KLQotMjAwMS0xMS0yOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9yZWR1Y2UuYyAoZHVtcF9ncmFtbWFyKTogRG9uJ3QgdHJhbnNsYXRlIHRyYWNlIG1lc3NhZ2VzLgotCi0yMDAxLTExLTI4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogdGVzdHMvcmVkdWNlLmF0IChVc2VsZXNzIFRlcm1pbmFscywgVXNlbGVzcyBOb250ZXJtaW5hbHMpOiBOZXcuCi0JKiBzcmMvcmVkdWNlLmMgKHJlZHVjZV9ncmFtbWFyX3RhYmxlcyk6IERvIG5vdCBmcmVlIHVzZWxlc3MgdGFncywKLQlhcyBhbGwgdGFncyBhcmUgZnJlZSdlZCBhZnRlcndhcmRzLgotCUZyb20gRW5yaWNvIFNjaG9sei4KLQotMjAwMS0xMS0yNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0KLQkqIHNyYy9iaXNvbi5zaW1wbGUgKFlZU1RBQ0tfUkVBTExPQyk6IEZpeCB0eXBvIHRoYXQgY2F1c2VkIHVzIHRvCi0JdXNlIGFsbG9jYSB3aGVuIHdlIGRpZG4ndCB3YW50IHRvLCBhbmQgdmljZSB2ZXJzYS4KLQotMjAwMS0xMS0yNyAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KLQotCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlX2luaXQpOiBSZW1vdmUgJ3ZlcmJvc2UnIG11c2NsZQotCWluaXRpYWxpemF0aW9uLgotCSogc3JjL291dHB1dC5jIChwcmVwYXJlKTogUmVtb3ZlIGl0cyB1cGRhdGUuCi0KLTIwMDEtMTEtMjcgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+Ci0KLQkqIHRlc3RzL3RvcnR1cmUuYXQgW0FUX0RBVEFdOiBSZW1vdmUgWVlFUlJPUl9WRVJCT1NFIGRlZmluaXRpb24uCi0JVXNlICVlcnJvci12ZXJib3NlLgotCi0yMDAxLTExLTI3ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgotCi0JKiBzcmMvYmlzb24uc2ltcGxlOiBSZW1vdmUgWVlFUlJPUl9WRVJCT1NFIHVzaW5nLgotCVVzZSAlJWVycm9yX3ZlcmJvc2UuCi0JKHl5cGFyc2UpOiBMaWtld2lzZS4KLQkqIHNyYy9vdXRwdXQuYyAocHJlcGFyZSk6IEdpdmUgaXRzIGZpbmFsIHZhbHVlLgotCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlX2luaXQpOiBJbml0IG5ldyBtdXNjbGUgJ2Vycm9yX3ZlcmJvc2UnLgotCSogc3JjL2dldGFyZ3MuaDogQWRkIGl0cyBleHRlcm4gZGVjbGFyYXRpb24uCi0JKiBzcmMvZ2V0YXJncy5jIChlcnJvcl92ZXJib3NlX2ZsYWcpOiBOZXcgaW50LgotCShnZXRhcmdzKTogVXBkYXRlIHRvIGNhdGNoIG5ldyBjYXNlLgotCSogc3JjL29wdGlvbnMuYyAob3B0aW9uX3RhYmxlKTogJ2Vycm9yLXZlcmJvc2UnIGlzIGEgbmV3IG9wdGlvbi4KLQkoc2hvcnRvcHRzKTogVXBkYXRlLgotCi0yMDAxLTExLTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3N5c3RlbS5oOiBVc2UgaW50bC9saWJnZXR0ZXh0LmguCi0JKiBzcmMvTWFrZWZpbGUuYW0gKElOQ0xVREVTKTogQWRkIC1JICQodG9wX3NyY2RpcikuCi0KLTIwMDEtMTEtMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiB0ZXN0cy90b3J0dXJlLmF0IChFeHBsb2RpbmcgdGhlIFN0YWNrIFNpemUgd2l0aCBNYWxsb2MpOgotCXMvWVlTVEFDS19VU0VfQUxMT0NBX0FMTE9DQS9ZWVNUQUNLX1VTRV9BTExPQ0EvLgotCi0yMDAxLTExLTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2ZpbGVzLmM6IEluY2x1ZGUgZXJyb3IuaC4KLQlSZXBvcnRlZCBieSBIYW5zIEFiZXJnLgotCi0yMDAxLTExLTI2ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgotCi0JKiBzcmMvcmVhZGVyLmMgKHBhcnNlX2luY2x1ZGVfZGVjbCk6IE5ldywgbm90IHlldCBpbXBsZW1lbnRlZC4KLQkocmVhZF9kZWNsYXJhdGlvbnMpOiBBZGQgY2FzZSB0b2tfaW5jbHVkZS4KLQkqIHNyYy9nZXRhcmdzLmggKGluY2x1ZGUpOiBBZGQgaXRzIGV4dGVybiBkZWZpbml0aW9uLgotCSogc3JjL2dldGFyZ3MuYyAoaW5jbHVkZSk6IE5ldyBjb25zdCBjaGFyICouCi0JKGdldGFyZ3MpOiBBZGQgY2FzZSAnLUknLgotCSogc3JjL29wdGlvbnMuYyAob3B0aW9uX3RhYmxlKTogQWRkIGluY2x1ZGUgYXMgY29tbWFuZCBsaW5lIGFuZAotCXBlcmNlbnQgb3B0aW9uLgotCSogc3JjL2xleC5oICh0b2tlbl90KTogQWRkIHRva19pbmNsdWRlLgotCi0yMDAxLTExLTI2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3JlYWRlci5jIChyZWFkZ3JhbSk6IE1ha2Ugc3VyZSBydWxlcyBmb3IgbWlkLXJ1bGUgYWN0aW9ucwotCWhhdmUgYSBsaW5lbm8gZXF1YWwgdG8gdGhhdCBvZiB0aGVpciBob3N0IHJ1bGUuCi0JUmVwb3J0ZWQgYnkgSGFucyBBYmVyZy4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFJ1bGUgTGluZSBOdW1iZXJzKTogTmV3LgotCi0yMDAxLTExLTI2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL0xSMC5jIChhbGxvY2F0ZV9pdGVtc2V0cyk6IGtlcm5lbF9zaXplIGNvbnRhaW5zIGludHMsIG5vdAotCXNpemVfdHMuCi0KLTIwMDEtMTEtMjYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvY29tcGxhaW4uYywgc3JjL2NvbXBsYWluLmggKGVycm9yKTogUmVtb3ZlLCBwcm92aWRlZCBieQotCWxpYi9lcnJvci5bY2hdLgotCi0yMDAxLTExLTI2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3JlYWRlci5jIChyZWFkX2RlY2xhcmF0aW9ucyk6IERvbid0IGFib3J0IG9uIHRva19pbGxlZ2FsLAotCWlzc3VlIGFuIGVycm9yIG1lc3NhZ2UuCi0JKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChJbnZhbGlkICVkaXJlY3RpdmUpOiBOZXcuCi0JUmVwb3J0ZWQgYnkgSGFucyBBYmVyZy4KLQotMjAwMS0xMS0yNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogSW52b2tlIEFDX0ZVTkNfT0JTVEFDSyBhbmQgQUNfRlVOQ19FUlJPUl9BVF9MSU5FLgotCSogbGliL01ha2VmaWxlLmFtIChsaWJiaXNvbl9hX1NPVVJDRVMpOiBBZGp1c3QuCi0KLTIwMDEtMTEtMjYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvY29uZmxpY3RzLmMgKGNvbmZsaWN0c19wcmludCk6IERvbid0IGNvbXBsYWluIGF0IGFsbCB3aGVuCi0JdGhlcmUgYXJlIG5vIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3RzLCBhbmQgYXMgbWFueSBzaGlmdC9yZWR1Y2UKLQljb25mbGljdHMgYXMgZXhwZWN0ZWQuCi0JKiB0ZXN0cy9yZWdyZXNzaW9uLmF0ICglZXhwZWN0IHJpZ2h0KTogQWRqdXN0LgotCi0yMDAxLTExLTIzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogbGliL2FsbG9jYS5jOiBVcGRhdGUsIGZyb20gZmlsZXV0aWxzLgotCi0yMDAxLTExLTIzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogbGliL01ha2VmaWxlLmFtIChsaWJiaXNvbl9hX0xJQkFERCk6IEFkZCBAQUxMT0NBQC4KLQotMjAwMS0xMS0yMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9zeXN0ZW0uaDogSW5jbHVkZSBhbGxvY2EuaC4KLQkqIHNyYy9tYWluLmMgKG1haW4pIFtDX0FMTE9DQV06IENhbGwgYWxsb2NhICgwKS4KLQotMjAwMS0xMS0yMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9wcmludF9ncmFwaC5jIChwcmludF9hY3Rpb25zKTogUmVtb3ZlIGBydWxlJywgdW51c2VkLgotCSogc3JjL0xSMC5jIChrZXJuZWxfc2l6ZSk6IENvbnRhaW4gYGludCcgaW5zdGVhZCBvZiBgc2l6ZV90JyB0bwotCXBhY2lmeSBHQ0MncyBzaWduZWQgPCB1bnNpZ25lZCB3YXJuaW5ncy4KLQkqIHNyYy9jbG9zdXJlLmMgKGl0ZW1zZXRzaXplKTogTGlrZXdpc2UuCi0JKiBzcmMvcmVhZGVyLmMgKHN5bWJvbF9saXN0X25ldyk6IFN0YXRpYy4KLQotMjAwMS0xMS0yMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlBdHRhY2hpbmcgbGluZW5vIHRvIGJ1Y2tldHMgaXMgc3R1cGlkLCBzaW5jZSBvbmx5IG9uZSBjb3B5IG9mIGVhY2gKLQlzeW1ib2wgaXMga2VwdCwgb25seSB0aGUgbGluZSBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBpcyBrZXB0IHRvby4KLQotCSogc3JjL3N5bXRhYi5oLCBzcmMvc3ltdGFiLmMgKGJ1Y2tldCk6IFJlbW92ZSB0aGUgbGluZSBtZW1iZXIuCi0JKiBzcmMvcmVhZGVyLmMgKHJsaW5lX2FsbG9jYXRlZCk6IFJlbW92ZSwgdW51c2VkLgotCShzeW1ib2xfbGlzdCk6IEhhdmUgYSBgbGluZScgbWVtYmVyLgotCShzeW1ib2xfbGlzdF9uZXcpOiBOZXcuCi0JKHJlYWRncmFtKTogVXNlIGl0LgotCSogc3JjL3ByaW50LmMgKHByaW50X2dyYW1tYXIpOiBPdXRwdXQgdGhlIHJ1bGUgbGluZSBudW1iZXJzLgotCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoU29sdmVkIFNSIENvbmZsaWN0cykKLQkoVW5yZXNvbHZlZCBTUiBDb25mbGljdHMpOiBBZGp1c3QuCi0JUmVwb3J0ZWQgYnkgSGFucyBBYmVyZy4KLQotMjAwMS0xMS0yMiAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KLQotCSogc3JjL2Jpc29uLnNpbXBsZSBbWVlFUlJPUl9WRVJCT1NFXTogRm9yY2UgaXRzIHZhbHVlIHRvIGJlIDEgb3IgMC4KLQotMjAwMS0xMS0yMiAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KLQotCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlX2luaXQpOiBSZW1vdmUgaW5pdGlhbGl6YXRpb24gb2YKLQlza2VsZXRvbiBtdXNjbGUuCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9tYXN0ZXJfcGFyc2VyKTogRG8gaXQgaGVyZS4KLQotMjAwMS0xMS0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHBvL3N2LnBvOiBOZXcuCi0JKiBjb25maWd1cmUuaW4gKEFMTF9MSU5HVUFTKTogQWRqdXN0LgotCSogcG8vUE9URklMRS5pbjogUmVtb3ZlIGBudWxsYWJsZS5jJyBhbmQgYGRlcml2ZXMuYycgd2hpY2ggbm8KLQlsb25nZXIgY29udGFpbnMgc3RyaW5ncyB0byB0cmFuc2xhdGUuCi0KLTIwMDEtMTEtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvY29uZmxpY3RzLmMgKGNvbmZsaWN0c19wcmludCk6IEFkZCBhIG1pc3NpbmcgXG4uCi0KLTIwMDEtMTEtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvbnVsbGFibGUuYyAobnVsbGFibGVfcHJpbnQpOiBOZXcuCi0JKHNldF9udWxsYWJsZSk6IENhbGwgaXQgd2hlbiB0cmFjaW5nLgotCUJldHRlciBsb2NhbGl0eSBvZiB2YXJpYWJsZXMuCi0KLTIwMDEtMTEtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvcHJpbnQuYyAocHJpbnRfYWN0aW9ucyk6IEJldHRlciBsb2NhbGl0eSBvZiB2YXJpYWJsZXMuCi0KLTIwMDEtMTEtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvZGVyaXZlcy5jIChwcmludF9kZXJpdmVzKTogRml4IGFuZCBlbnJpY2guCi0JKiBzcmMvY2xvc3VyZS5jIChwcmludF9mZGVyaXZlcyk6IExpa2V3aXNlLgotCi0yMDAxLTExLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2Nsb3N1cmUuYyAoaXRlbXNldGVuZCk6IFJlbW92ZSwgcmVwbGFjZWQgd2l0aC4uLgotCShpdGVtc2V0c2l6ZSk6IG5ldy4KLQotMjAwMS0xMS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9MUjAuYyAoa2VybmVsX2VuZCk6IFJlbW92ZSwgcmVwbGFjZWQgd2l0aC4uLgotCShrZXJuZWxfc2l6ZSk6IG5ldy4KLQotMjAwMS0xMS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9jb25mbGljdHMuYyAoc2V0X2NvbmZsaWN0cyk6IFVzZSBhcnJheXMgaW5zdGVhZCBvZiBwb2ludGVycwotCXRvIGNsYXJpZnkuCi0KLTIwMDEtMTEtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvY2xvc3VyZS5jIChjbG9zdXJlKTogVXNlIGFycmF5cyBpbnN0ZWFkIG9mIHBvaW50ZXJzIHRvIGNsYXJpZnkuCi0KLTIwMDEtMTEtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvY2xvc3VyZS5jLCBzcmMvZGVyaXZlcy5jLCBzcmMvbnVsbGFibGUuYzogQWRqdXN0IHZhcmlvdXMKLQl0cmFjZSBtZXNzYWdlcy4KLQkqIHNyYy9MUjAuYzogTGlrZXdpc2UuCi0JKGFsbG9jYXRlX2l0ZW1zZXRzKTogVXNlIGFycmF5cyBpbnN0ZWFkIG9mIHBvaW50ZXJzIHRvIGNsYXJpZnkuCi0KLTIwMDEtMTEtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvZ2V0YXJncy5jIChzdGF0aXN0aWNzX2ZsYWcpOiBSZXBsYWNlIHdpdGguLi4KLQkodHJhY2VfZmxhZyk6IE5ldy4KLQkobG9uZ29wdHMpOiBBY2NlcHQgLS10cmFjZSBpbnN0ZWFkIG9mIC0tc3RhdGlzdGljcy4KLQkqIHNyYy9nZXRhcmdzLmgsIHNyYy9vcHRpb25zLmM6IEFkanVzdC4KLQkqIHNyYy9MUjAuYywgc3JjL2Nsb3N1cmUuYywgc3JjL2Rlcml2ZXMuYywgc3JjL251bGxhYmxlLmMsCi0JKiBzcmMvcmVkdWNlLmM6IFVzZSB0cmFjZV9mbGFncyBpbnN0ZWFkIG9mIHRoZSBDUFAgY29uZGl0aW9uYWwgVFJBQ0UuCi0KLTIwMDEtMTEtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvTFIwLmMgKG5ld19pdGVtc2V0cywgZ2V0X3N0YXRlKTogVXNlIG1vcmUgYXJyYXlzIGFuZCBmZXdlcgotCXBvaW50ZXJzIHRvIGNsYXJpZnkgdGhlIGNvZGUuCi0JKHNhdmVfcmVkdWN0aW9ucywgc2F2ZV9zaGlmdHMpOiBGYWN0b3IgY29tbW9uIHBhcnRzIG9mIGFsdGVybmF0aXZlcy4KLQotMjAwMS0xMS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9MUjAuYyAobmV3X3N0YXRlLCBnZXRfc3RhdGUpOiBDb21wbGV0ZSBUUkFDRSBjb2RlLgotCSogc3JjL2Nsb3N1cmUuYzogSW5jbHVkZSBgcmVhZGVyLmgnIHRvIGdldCBgdGFncycsIG5lZWRlZCBieSB0aGUKLQl0cmFjZSBjb2RlLgotCVJlbmFtZSB0aGUgY29uZGl0aW9uYWwgREVCVUcgYXMgVFJBQ0UuCi0JT3V0cHV0IGNvbnNpc3RlbnRseSBUUkFDRXMgdG8gc3RkZXJyLCBub3Qgc3Rkb3V0LgotCSogc3JjL2Rlcml2ZXMuYzogTGlrZXdpc2UuCi0JKiBzcmMvcmVkdWNlLmM6IChpbmFjY2Vzc2FibGVfc3ltYm9scyk6IFVzaW5nIGlmIGlzIGJldHRlciBzdHlsZQotCXRoYW4gZ290by4KLQlVc2UgYCNpZiBUUkFDRScgaW5zdGVhZCBvZiBgI2lmIDAnIGZvciB0cmFjaW5nIGNvZGUuCi0KLTIwMDEtMTEtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvc3lzdGVtLmggKExJU1RfRlJFRSwgc2hvcnRjcHkpOiBOZXcuCi0JKiBzcmMvTFIwLmM6IFVzZSB0aGVtLgotCSogc3JjL291dHB1dC5jIChmcmVlX2l0ZW1zZXRzLCBmcmVlX3JlZHVjdGlvbnMsIGZyZWVfc2hpZnRzKToKLQlSZW1vdmUsIHJlcGxhY2VkIGJ5IExJU1RfRlJFRS4KLQotMjAwMS0xMS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9zdGF0ZS5oIChDT1JFX0FMTE9DLCBTSElGVFNfQUxMT0MsIEVSUlNfQUxMT0MpCi0JKFJFRFVDVElPTlNfQUxMT0MpOiAgTmV3LgotCSogc3JjL0xSMC5jLCBzcmMvY29uZmxpY3RzLmM6IFVzZSB0aGVtIHRvIGRlLW9iZnVzY2F0ZSBtZW1vcnkKLQlhbGxvY2F0aW9uLgotCi0yMDAxLTExLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL0xSMC5jIChuZXdfc3RhdGUpOiBDb21wbGV0ZSB0cmFjZSBjb2RlLgotCSogc3JjL251bGxhYmxlLmMgKHNldF9udWxsYWJsZSk6IERvbid0IHRyYW5zbGF0ZSB0cmFjZXMuCi0KLTIwMDEtMTEtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvcHJpbnRfZ3JhcGguYyAocHJpbnRfY29yZSk6IEJldHRlciBsb2NhbGl0eSBvZiB2YXJpYWJsZXMuCi0JKiBzcmMvcHJpbnQuYyAocHJpbnRfY29yZSk6IExpa2V3aXNlLgotCi0yMDAxLTExLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3ZjZy5jOiBZb3UgZG8gdGhlIG91dHB1dCwgc28geW91IGFyZSByZXNwb25zaWJsZSBvZiB0aGUKLQloYW5kbGluZyBvZiBWQ0cgc3ludGF4LCBpbiBwYXJ0aWN1bGFyOiB1c2UgcXVvdGVhcmcuCi0JKiBzcmMvcHJpbnRfZ3JhcGguYzogRG9uJ3QuCi0JKHByaW50X2FjdGlvbnMpOiBEb24ndCBvdXRwdXQgdGhlIGFjdGlvbnMgYXMgcGFydCBvZiB0aGUgbm9kZXMsCi0Jc2luY2UgdGhhdCdzIHRoZSBqb2Igb2YgdGhlIGVkZ2VzLgotCShwcmludF9zdGF0ZSk6IERvbid0IG91dHB1dCBieSBoYW5kOiBmaWxsIHRoZSBub2RlIGRlc2NyaXB0aW9uLAotCWFuZCBhc2sgZm9yIGl0cyBvdXRwdXQuCi0KLTIwMDEtMTEtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvYmlzb24uc2ltcGxlICh5eXBhcnNlKTogV2hlbiB2ZXJib3NlbHkgcmVwb3J0aW5nIGFuIGVycm9yLAotCW5vIGxvbmdlciBwdXQgYWRkaXRpb25hbCBxdW90ZXMgYXJvdW5kIHRva2VuIG5hbWVzLgotCSogdGVzdHMvY2FsYy5hdDogQWRqdXN0LgotCi0yMDAxLTExLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3N5bXRhYi5oLCBzcmMvc3ltdGFiLmM6IGBsaW5lJyBpcyBhIG5ldyBtZW1iZXIgb2YgYGJ1Y2tldCcuCi0JKiBzcmMvcmVhZGVyLmMgKHJlY29yZF9ydWxlX2xpbmVzLCBybGluZSwgcmxpbmVfYWxsb2NhdGVkKTogUmVtb3ZlLgotCSogc3JjL291dHB1dC5jOiBBZGp1c3QuCi0KLTIwMDEtMTEtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvZ3JhbS5oIChycHJlYywgcnByZWNzeW0sIHJhc3NvYyk6IFJlbW92ZSwgbm93IHBhcnQgb2YuLi4KLQkocnVsZV90KTogdGhpcy4KLQkqIHNyYy9jb25mbGljdHMuYywgc3JjL3JlYWRlci5jLCBzcmMvcmVkdWNlLmM6IEFkanVzdC4KLQotMjAwMS0xMS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9ncmFtLmggKHJ1bGVfdCk6IE5ldy4KLQkocnVsZV90YWJsZSk6IE5ldy4KLQkocnJocywgcmxocyk6IFJlbW92ZSwgcGFydCBvZiBzdGF0ZV90LgotCSogc3JjL3ByaW50X2dyYXBoLmMsIHNyYy9jbG9zdXJlLmMsIHNyYy9jb25mbGljdHMuYywgc3JjL2Rlcml2ZXMuYywKLQkqIHNyYy9sYWxyLmMsIHNyYy9udWxsYWJsZS5jLCBzcmMvb3V0cHV0LmMsIHNyYy9wcmludC5jLAotCSogc3JjL3JlYWRlci5jLCBzcmMvcmVkdWNlLmM6IEFkanVzdC4KLQotMjAwMS0xMS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9yZWFkZXIuYyAoc3ltYm9sc19vdXRwdXQpOiBOZXcsIGV4dHJhY3RlZCBmcm9tLi4uCi0JKHBhY2tzeW1ib2xzKTogSGVyZS4KLQkocmVhZGVyKTogQ2FsbCBpdC4KLQotMjAwMS0xMS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9sYWxyLmMgKHNldF9tYXhyaHMsIG1heHJocyk6IFJlbW92ZSwgcmVwbGFjZWQgd2l0aC4uLgotCShtYXhyaHMpOiB0aGlzIG5ldyBmdW5jdGlvbi4KLQotMjAwMS0xMS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9sYWxyLmMgKEYpOiBOZXcgbWFjcm8gdG8gYWNjZXNzIHRoZSB2YXJpYWJsZSBGLgotCUFkanVzdC4KLQotMjAwMS0xMS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9sYWxyLmggKExBKTogTmV3IG1hY3JvIHRvIGFjY2VzcyB0aGUgdmFyaWFibGUgTEEuCi0JKiBzcmMvb3V0cHV0LmMsIHNyYy9sYWxyLmMsIHNyYy9wcmludF9ncmFwaC5jLCBzcmMvY29uZmxpY3RzLmM6Ci0JKiBzcmMvbGFsci5jOiBBZGp1c3QuCi0KLTIwMDEtMTEtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvbGFsci5jIChpbml0aWFsaXplX0xBKTogT25seSBpbml0aWFsaXplIExBLiAgTGV0Li4uCi0JKHNldF9zdGF0ZV90YWJsZSk6IGhhbmRsZSB0aGUgYGxvb2thaGVhZHMnIG1lbWJlcnMuCi0KLTIwMDEtMTEtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvbGFsci5oIChsb29rYWhlYWRzKTogUmVtb3ZlZCBhcnJheSwgd2hvc2UgY29udGVudHMgaXMgbm93Ci0JYSBtZW1iZXIgb2YuLi4KLQkoc3RhdGVfdCk6IHRoaXMgc3RydWN0dXJlLgotCSogc3JjL291dHB1dC5jLCBzcmMvbGFsci5jLCBzcmMvcHJpbnRfZ3JhcGguYywgc3JjL2NvbmZsaWN0cy5jOgotCUFkanVzdC4KLQotMjAwMS0xMS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9sYWxyLmggKGNvbnNpc3RlbnQpOiBSZW1vdmVkIGFycmF5LCB3aG9zZSBjb250ZW50cyBpcyBub3cKLQlhIG1lbWJlciBvZi4uLgotCShzdGF0ZV90KTogdGhpcyBzdHJ1Y3R1cmUuCi0JKiBzcmMvb3V0cHV0LmMsIHNyYy9sYWxyLmMsIHNyYy9wcmludF9ncmFwaC5jLCBzcmMvY29uZmxpY3RzLmM6Ci0JQWRqdXN0LgotCi0yMDAxLTExLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2xhbHIuaCAocmVkdWN0aW9uX3RhYmxlLCBzaGlmdF90YWJsZSk6IFJlbW92ZWQgYXJyYXlzLCB3aG9zZQotCWNvbnRlbnRzIGFyZSBub3cgbWVtYmVycyBvZi4uLgotCShzdGF0ZV90KTogdGhpcyBzdHJ1Y3R1cmUuCi0JKiBzcmMvb3V0cHV0LmMsIHNyYy9sYWxyLmMsIHNyYy9wcmludF9ncmFwaC5jLCBzcmMvY29uZmxpY3RzLmM6Ci0JQWRqdXN0LgotCi0yMDAxLTExLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2xhbHIuaCAoc3RhdGVfdCk6IE5ldy4KLQkoc3RhdGVfdGFibGUpOiBCZSBhIHN0YXRlX3QgKiBpbnN0ZWFkIG9mIGEgY29yZSAqKi4KLQkoYWNjZXNzaW5nX3N5bWJvbCk6IFJlbW92ZSwgcGFydCBvZiBzdGF0ZV90LgotCSogc3JjL2xhbHIuYzogQWRqdXN0LgotCShzZXRfYWNjZXNzaW5nX3N5bWJvbCk6IE1lcmdlIGludG8uLi4KLQkoc2V0X3N0YXRlX3RhYmxlKTogdGhpcy4KLQkqIHNyYy9wcmludF9ncmFwaC5jLCBzcmMvY29uZmxpY3RzLmM6IEFkanVzdC4KLQotMjAwMS0xMS0xNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHRlc3RzL2NhbGMuYXQsIHRlc3RzL291dHB1dC5hdCwgdGVzdHMvcmVncmVzc2lvbi5hdCwKLQkqIHRlc3RzL3Rlc3RzdWl0ZS5hdCwgdGVzdHMvdG9ydHVyZS5hdDogUmVseSBvbiBBdXRvdGVzdCAyLjUyZzoKLQlub3cgdGhlIHRlc3RzIGFyZSBydW4gaW4gcHJpdmF0ZSBkaXJzLCB0aGVyZWZvcmUgQUNfQ0xFQU5VUCBhbmQKLQlmYW1pbHkgY2FuIGJlIHNpbXBsaWZpZWQgdG8gMC1hcnkuCi0JKiB0ZXN0cy9hdGxvY2FsLmluOiBOb3cgdGhhdCB3ZSBydW4gYGVsc2V3aGVyZScgdGhhbiBpbiB0ZXN0cy8sCi0JdXNlIGFicy4gcGF0aCB0byBmaW5kIGNvbmZpZy5oLgotCSogdGVzdHMvY2FsYy5hdCAoQVRfQ0hFQ0tfQ0FMQyk6IERvbid0IHRyeSB0byBjaGVjayB0aGUgY29tcGlsZXIncwotCXN0ZGVyciwgdGhlcmUgY2FuIGJlIHdheSB0b28gbXVjaCByYW5kb20gbm9pc2UuCi0JSW5zdGVhZCBwYXNzIC1XZXJyb3IgdG8gR0NDIGFuZCByZWx5IG9uIHRoZSBleGl0IHN0YXR1cy4KLQlSZXBvcnRlZCBieSBXb2xmcmFtIFdhZ25lci4KLQotMjAwMS0xMS0xNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9iaXNvbi5zaW1wbGUgKHl5cGFyc2UpOiBMZXQgeXlsczEsIHl5c3MxIGFuZCB5eXZzMSBiZQotCWRlZmluZWQgb25seSBpZiB5eW92ZXJmbG93IGlzIGRlZmluZWQsIHRvIGF2b2lkIGB3YXJuaW5nOiB1bnVzZWQKLQl2YXJpYWJsZSBgeXl2czEnJy4KLQlSZXBvcnRlZCBieSBUaGUgVGVzdCBTdWl0ZS4KLQotMjAwMS0xMS0xNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9wcmludC5jOiBJbmNsdWRlIHJlZHVjZS5oLgotCVJlcG9ydGVkIGJ5IEhhbnMgQWJlcmcuCi0KLTIwMDEtMTEtMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvbGV4LmMsIHNyYy9sZXguaCAodG9rZW5fYnVmZmVyLCB1bmxleGVkX3Rva2VuX2J1ZmZlcik6Ci0JUmV2ZXJ0IGEgcHJldmlvdXMgcGF0Y2g6ICB0aGVzZSBhcmUgcmVhbGx5IGNvbnN0LgotCSogc3JjL2NvbmZsaWN0cy5jIChjb25mbGljdF9yZXBvcnQpOiBBZGRpdGlvbmFsIHVzZWxlc3MgcGFpciBvZgotCWJyYWNlcyB0byBwYWNpZnkgR0NDJ3Mgd2FybmluZ3MgZm9yIGBpZiAoKSBpZiAoKSB7fSBlbHNlIHt9Jy4KLQkqIHNyYy9sZXguYyAocGFyc2VfcGVyY2VudF90b2tlbik6IFJlcGxhY2UgZXF1YWxfb2Zmc2V0IHdpdGgKLQlhcmdfb2Zmc2V0LgotCWFyZyBpcyBjb25zdC4KLQlCZSBzdXJlIHRvIHN0cmR1cCBgYXJnJyB3aGVuIHVzZWQsIHNpbmNlIHRoZXJlIGlzIG5vIHJlYXNvbiBmb3IKLQl0b2tlbl9idWZmZXIgbm90IHRvIGNoYW5nZS4KLQotMjAwMS0xMS0xNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9zeXN0ZW0uaCAoRVhJVF9TVUNDRVNTLCBFWElUX0ZBSUxVUkUpOiBFbnN1cmUgYSBwcm9wZXIKKwlUaGlzIGlzIGdldHRpbmcgY29tcGxleCwgZXNwZWNpYWxseSBzaW5jZSBiZWNhdXNlIGluaXRpYWxpemluZyBhCisJZ2xvYmFsIChpbXB1cmUgaW50ZXJmYWNlKSBpcyBkaWZmZXJlbnQgZnJvbSBpbml0aWFsaXppbmcgYSBsb2NhbAorCXZhcmlhYmxlLiAgVG8gc2ltcGxpZnksIHRoZSBsb2NhbCB5eWxsb2MgaXMgbm90IGluaXRpYWxpemVkIGR1cmluZyBpdHMKIAlkZWZpbml0aW9uLgotCSogc3JjL21haW4uYyAobWFpbik6IFVzZSB0aGVtLgotCVN1Z2dlc3RlZCBieSBIYW5zIEFiZXJnLgogCi0yMDAxLTExLTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwkqIGRhdGEvYy5tNCAoYjRfeXlsb2NfZGVmYXVsdF9kZWZpbmUpOiBSZXBsYWNlIGJ5Li4uCisJKGI0X3l5bG9jX2RlZmF1bHQpOiB0aGlzLgorCUFkanVzdCBkZXBlbmRlbmNpZXMuCisJKiBkYXRhL2dsci5jYzogSW5pdGlhbGl6ZSB5eWxsb2MuCisJKiBkYXRhL3lhY2MuYyAoYjRfZGVjbGFyZV9zY2FubmVyX2NvbW11bmljYXRpb25fdmFyaWFibGVzKToKKwlJbml0aWFsaXplIHl5bGxvYyBkdXJpbmcgaXRzIGRlZmluaXRpb24uCisJRG9uJ3QgZGVmaW5lIHl5bG9jX2RlZmF1bHQuCisJKHl5cHVzaF9wYXJzZSk6IFRoZSBsb2NhdGlvbiBmb3JtYWwgaXMgbm90IGNvbnN0LCBhcyB3ZSBtaWdodAorCWluaXRpYWxpemUgaXQuCisJKHl5cGFyc2UpOiBEZWZpbmUgeXlsb2NfZGVmYXVsdC4KKwlVc2UgaXQgYmVmb3JlIHJ1bm5pbmcgdGhlIHVzZXIgaW5pdGlhbCBhY3Rpb24uCisJUG9zc2libHkgdXBkYXRlIHRoZSBmaXJzdCBsb2NhdGlvbiBvbiB0aGUgc3RhY2ssIGFuZCB0aGUgcHVzaGVkCisJbG9jYXRpb24gYWZ0ZXIgdGhlIHVzZXIgaW5pdGlhbCBhY3Rpb24uCisJKiB0ZXN0cy9hY3Rpb25zLmF0IChJbml0aWFsIGxvY2F0aW9ucyk6IENoZWNrIHRoYXQgdGhlIGluaXRpYWwKKwlsb2NhdGlvbiBpcyBjb3JyZWN0LgogCi0JKiBzcmMvc3lzdGVtLmggKG5nZXR0ZXh0KTogTm93IHRoYXQgd2UgdXNlIG5nZXR0ZXh0LCBiZSBzdXJlIHRvCi0JcHJvdmlkZSBhIGRlZmF1bHQgZGVmaW5pdGlvbiB3aGVuIE5MUyBhcmUgbm90IHVzZWQuCisyMDEyLTExLTA2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0yMDAxLTExLTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwl5YWNjLmMsIGdsci5jOiBhIGJldHRlciBZWV9MT0NBVElPTl9QUklOVAorCSogZGF0YS9jLm00IChiNF95eV9sb2NhdGlvbl9wcmludF9kZWZpbmUpOiBOZXcuCisJTm93IGlzc3VlcyAic2hvcnQiIGxvY2F0aW9ucywgZS5nLiwgIjEuMSIgaW5zdGVhZCBvZiAiMS4xLTEuMSIuCisJV2FzIGluaXRpYWxseSBhIGZ1bmN0aW9uLCBidXQgdGhlbiB3ZSBmYWNlICJzdGF0aWMgYnV0IHVudXNlZCIKKwl3YXJuaW5ncy4KKwlTaW1wbGVyIGFzIGEgbWFjcm8uCisJKiB0ZXN0cy9sb2NhbC5hdCwgZGF0YS9nbHIuYywgZGF0YS95YWNjLmM6IFVzZSBpdCBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nLgorCSogdGVzdHMvYWN0aW9ucy5hdDogQWRqdXN0IGV4cGVjdGF0aW9ucy4KIAotCSogZG9jL2Jpc29uLnRleGluZm86IFVzZSBgJCcgYXMgc2hlbGwgcHJvbXB0LCBub3QgYCUnLgotCVVzZSBAa2JkIHRvIGRlbm90ZSB1c2VyIGlucHV0LgotCShMYW5ndWFnZSBhbmQgR3JhbW1hcik6IEFOU0lmeSB0aGUgZXhhbXBsZS4KLQlBZGp1c3QgaXRzIGxheW91dCBmb3IgaW5mby9ub3RpbmZvLgotCShMb2NhdGlvbiBUcmFja2luZyBDYWxjKTogT3V0cHV0IGVycm9yIG1lc3NhZ2VzIHRvIHN0ZGVyci4KLQlPdXRwdXQgbG9jYXRpb25zIGluIGEgbW9yZSBHTlV0aWNhbGx5IGNvcnJlY3Qgd2F5LgotCUZpeCBhIGNvdXBsZSBvZiBFbmdsaXNob3MuCi0JQWRqdXN0IEBncm91cC9AZW5kIGdyb3VwIHBhaXJzLgorMjAxMi0xMS0wNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotMjAwMS0xMS0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJeWFjYy5jOiBzaW1wbGlmeSBpbml0aWFsaXphdGlvbgorCSogZGF0YS95YWNjLmM6IEZ1c2UgdGhlIGluaXRpYWxpemF0aW9ucyBvZiB5eXNzcCwgeXlzcyBhbmQgdGhlIGxpa2UuCisJUmVtb3ZlIGFuIG9ic29sZXRlIGNvbW1lbnQ6IHdlIGRvIGluaXRpYWxpemUgdGhlc2UgaW5pdGlhbCBzdGFjaworCW1lbWJlcnMgKGluIHNvbWUgY2FzZXMpLgogCi0JJWV4cGVjdCB3YXMgbm90IGZ1bmN0aW9uaW5nIGF0IGFsbC4KKzIwMTItMTEtMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkqIHNyYy9jb25mbGljdHMuYyAoZXhwZWN0ZWRfY29uZmxpY3RzKTogU2V0IHRvIC0xLgotCShjb25mbGljdF9yZXBvcnQpOiBVc2UgbmdldHRleHQuCi0JKGNvbmZsaWN0c19wcmludCk6IENoZWNrICVleHBlY3QgYW5kIG1ha2UgaXRzIHZpb2xhdGlvbiBhbiBlcnJvci4KLQkqIGRvYy9iaXNvbi50ZXhpbmZvIChFeHBlY3QgRGVjbCk6IEFkanVzdC4KLQkqIGNvbmZpZ3VyZS5pbiAoQU1fR05VX0dFVFRFWFQpOiBBc2sgZm9yIG5nZXR0ZXh0LgotCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoJWV4cGVjdCBub3QgZW5vdWdoLCAlZXhwZWN0IHJpZ2h0KQotCSglZXhwZWN0IHRvbyBtdWNoKTogTmV3LgorCWRvYzogZm9ybWF0dGluZyBjaGFuZ2VzCisJKiBkb2MvYmlzb24udGV4aTogSW4gYSBwb2ludGVyIHR5cGUuCiAKLTIwMDEtMTEtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0xMS0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoQ29uZmxpY3RzKTogUmVuYW1lIGFzLi4uCi0JKFVucmVzb2x2ZWQgU1IgQ29uZmxpY3RzKTogdGhpcy4KLQkoU29sdmVkIFNSIENvbmZsaWN0cyk6IE5ldy4KKwljKys6IGZpeCBwb3NpdGlvbiBvcGVyYXRvciBzaWduYXR1cmVzCisJKiBkYXRhL2xvY2F0aW9uLmNjIChvcGVyYXRvcis9LCBvcGVyYXRvci09KTogUmVtb3ZlIGNvbnN0IGZyb20gcmV0dXJuCisJdHlwZS4KIAotMjAwMS0xMS0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTExLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBzcmMvcmVkdWNlLmMgKHByaW50X3Jlc3VsdHMpOiBSZW5hbWUgYXMuLi4KLQkocmVkdWNlX291dHB1dCk6IFRoaXMuCi0JT3V0cHV0IHRvIE9VVCwgcGFzc2VkIGFzIGFyZ3VtZW50LCBpbnN0ZWFkIG9mIG91dHB1dF9vYnN0YWNrLgotCShkdW1wX2dyYW1tYXIpOiBMaWtld2lzZS4KLQkocmVkdWNlX2ZyZWUpOiBOZXcuCi0JQWxzbyBmcmVlIFYxLgotCShyZWR1Y2VfZ3JhbW1hcik6IE5vIGxvbmdlciBjYWxsIHJlZHVjZV9vdXRwdXQsIHNpbmNlLi4uCi0JKiBzcmMvcHJpbnQuYyAocHJpbnRfcmVzdWx0cyk6IGRvIGl0LgotCSogc3JjL21haW4uYyAobWFpbik6IENhbGwgcmVkdWNlX2ZyZWU7CisJdGVzdHM6IHJlbW92ZSB1c2VsZXNzIGxvY2F0aW9uIGluaXRpYWxpemF0aW9uLgorCSogdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQ6IGhlcmUuCisJZ2xyLmMgZG9lcyBpbml0aWFsaXplIHl5bGxvYy4KIAotMjAwMS0xMS0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTExLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBzcmMvY29uZmxpY3RzLmMgKHByaW50X3JlZHVjdGlvbnMpOiBBY2NlcHQgT1VUIGFzIGFyZ3VtZW50LgotCU91dHB1dCB0byBpdCwgbm90IHRvIG91dHB1dF9vYnN0YWNrLgotCSogc3JjL3ByaW50LmMgKHByaW50X2FjdGlvbnMpOiBBZGp1c3QuCisJdGVzdHM6IGZpeCBsb2NhdGlvbnMgaW4gQworCSogdGVzdHMvbG9jYWwuYXQgKEFUX1lZRVJST1JfREVGSU5FKTogRG9uJ3QgZGlzcGxheSB0aGUgZW5kIG9mIHRoZSBsb2NhdGlvbgorCWlmIGl0IGlzIG5vdCBhZnRlciBpdHMgYmVnaW5uaW5nLgorCSogdGVzdHMvYWN0aW9ucy5hdCwgdGVzdHMvY3h4LXR5cGUuYXQ6IEFkanVzdCB0aGUgZXhwZWN0ZWQgb3V0cHV0LgogCi0yMDAxLTExLTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMTEtMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkqIHNyYy9jb25mbGljdHMuYyAoY291bnRfc3JfY29uZmxpY3RzLCBjb3VudF9ycl9jb25mbGljdHMpOiBSZXR1cm4KLQl0aGUgcmVzdWx0IGluc3RlYWQgb2YgdXNpbmcuLi4KLQkoc3JjX3RvdGFsLCBycmNfdG90YWwsIHNyY19jb3VudCwgcnJjX2NvdW50KTogUmVtb3ZlLgotCShhbnlfY29uZmxpY3RzKTogUmVtb3ZlLgotCShwcmludF9jb25mbGljdHMpOiBTcGxpdCBpbnRvLi4uCi0JKGNvbmZsaWN0c19wcmludCwgY29uZmxpY3RzX291dHB1dCk6IE5ldy4KLQkqIHNyYy9jb25mbGljdHMuaDogQWRqdXN0LgotCSogc3JjL21haW4uYyAobWFpbik6IEludm9rZSBib3RoIGNvbmZsaWN0c19vdXRwdXQgYW5kIGNvbmZsaWN0c19wcmludC4KLQkqIHNyYy9wcmludC5jIChwcmludF9ncmFtbWFyKTogSXNzdWUgYFxuJyBiZXR3ZWVuIHR3byBydWxlcy4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKENvbmZsaWN0cyk6IE5ldy4KLQlSZXBvcnRlZCBieSBUb20gTGFuZS4KKwl0ZXN0czogaGFuZGxlICVwYXJzZS1wYXJhbSBpbiB0aGUgZ2VuZXJhdGVkIHl5ZXJyb3IKKwkqIHRlc3RzL2xvY2FsLmF0IChBVF9QQVJTRV9QQVJBTVMpOiBOZXcuCisJKEFUX1lZRVJST1JfRk9STUFMUywgQVRfWVlFUlJPUl9ERUZJTkUpOiBVc2UgaXQgdG8gYWRkIHRoZSBwYXJzZS1wYXJhbQorCXRvIHl5ZXJyb3IuCisJKiB0ZXN0cy9jYWxjLmF0LCB0ZXN0cy9yZWdyZXNzaW9uLmF0OiBVc2UgQVRfWVlFUlJPUl9ERUZJTkUgYW5kCisJQVRfWVlFUlJPUl9ERUNMQVJFLCBub3cgdGhhdCB0aGV5IGhhbmRsZSBwcm9wZXJseSB0aGUgcGFyc2UtcGFyYW1zLgorCUJlIHN1cmUgdG8gbGV0IEFUX0JJU09OX09QVElPTl9QVVNIREVGUyBub3cgd2hhdCBwYXJzZS1wYXJhbXMgYXJlIHVzZWQuCiAKLTIwMDEtMTEtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0xMS0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoSW52YWxpZCBpbnB1dCk6IFJlbW92ZSwgZHVwbGljYXRlIHdpdGgKLQlgYEludmFsaWQgaW5wdXQ6IDEnJy4KKwl0ZXN0czogc2ltcGxpZmljYXRpb25zCisJKiB0ZXN0cy9hY3Rpb25zLmF0IChFeG90aWMgRG9sbGFycyk6IEZvcm1hdHRpbmcgY2hhbmdlcy4KKwlVc2UgQVRfRlVMTF9DT01QSUxFLgorCShBVF9DSEVDS19QUklOVEVSX0FORF9ERVNUUlVDVE9SKTogUmVtb3ZlIHVzZWxlc3MgaW5pdGlhbGl6YXRpb24gb2YgQCQuCiAKLTIwMDEtMTEtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0xMS0wMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogdGVzdHMvdG9ydHVyZS5hdCAoQVRfREFUQV9TVEFDS19UT1JUVVJFKQotCShFeHBsb2RpbmcgdGhlIFN0YWNrIFNpemUgd2l0aCBBbGxvY2EpCi0JKEV4cGxvZGluZyB0aGUgU3RhY2sgU2l6ZSB3aXRoIE1hbGxvYyk6IE5ldy4KKwlncmFtbWFyczogZml4IGRpc3BsYXkgb2YgbnVsIGNoYXJhY3RlciBpbiBlcnJvciBtZXNzYWdlCisJUmVwb3J0ZWQgYnkgTWFyYyBNZW5kaW9sYS4KKwlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvaGVscC1iaXNvbi8yMDEyLTEwL21zZzAwMDE3Lmh0bWwKIAotMjAwMS0xMS0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJKiBnbnVsaWI6IFVwZGF0ZSB0byBnZXQgcXVvdGVfbWVtLgorCSogc3JjL3NjYW4tZ3JhbS5sOiBVc2UgaXQuCisJKiB0ZXN0cy9pbnB1dC5hdCAoSW52YWxpZCBpbnB1dHMpOiBBZGRpdGlvbmFsIGNoZWNrcy4KKwkqIHRlc3RzL25hbWVkLXJlZnMuYXQ6IExpa2V3aXNlLgogCi0JKiBzcmMvYmlzb24uc2ltcGxlIChZWVNUQUNLX1JFQUxMT0MpOiBOZXcuCi0JKHl5cGFyc2UpIFsheXlvdmVyZmxvd106IFVzZSBpdCBhbmQgZnJlZSB0aGUgb2xkIHN0YWNrLgotCVJlcG9ydGVkIGJ5IFBlciBBbGxhbnNzb24uCisyMDEyLTExLTAxICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0yMDAxLTExLTEyICBQYXNjYWwgQmFydCAgPHBhc2NhbC5iYXJ0QGVwaXRhLmZyPgorCXRlc3RzOiBzb3J0CisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChJbnZhbGlkIGlucHV0cywgSW52YWxpZCBpbnB1dHMgd2l0aCB7fSk6IE1vdmUgdG8uLi4KKwkqIHRlc3RzL2lucHV0LmF0OiBoZXJlLCBmb3IgY29uc2lzdGVuY3kuCiAKLQkqIHNyYy9iaXNvbi5zaW1wbGU6IERlZmluZSB0eXBlIHl5c3R5cGUgaW5zdGVhZCBvZiBZWVNUWVBFLCBhbmQKLQlkZWZpbmUgQ1BQIG1hY3JvLCB3aGljaCBzdWJzdGl0dXRlIFlZU1RZUEUgYnkgeXlzdHlwZS4KLQkqIHNyYy9yZWFkZXIuYyAocGFyc2VfdW5pb25fZGVjbCk6IE91dHB1dCB5eXN0eXBlL1lZU1RZUEUgYXMgd2UgZG8KLQl3aXRoIHl5bHR5cGUvWVlMVFlQRS4gIFRoaXMgYWxsb3dzIGluY2x1c2lvbiBvZiB0aGUgZ2VuZXJhdGVkCi0JaGVhZGVyIHdpdGhpbiB0aGUgcGFyc2VyIGlmIHRoZSBjb21waWxlciwgc3VjaCBhcyBHR0MsIGFjY2VwdHMKLQltdWx0aXBsZSBlcXVpdmFsZW50ICNkZWZpbmVzLgotCUZyb20gQWtpbS4KKzIwMTItMTEtMDEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDEtMTEtMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCXRlc3RzOiBjb3NtZXRpYyBjaGFuZ2VzCisJKiB0ZXN0cy9hY3Rpb25zLmF0IChBVF9DSEVDS19QUklOVEVSX0FORF9ERVNUUlVDVE9SKTogSW1wcm92ZSB0aGUKKwlkaXNwbGF5ZWQgdGl0bGUuCiAKLQkqIHNyYy9yZWFkZXIuYyAoc3ltYm9sc19vdXRwdXQpOiBOZXcsIGV4dHJhY3RlZCBmcm9tLi4uCi0JKHBhY2tzeW1ib2xzKTogaGVyZS4KLQkocmVhZGVyKTogQWRqdXN0LgorMjAxMi0xMS0wMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotMjAwMS0xMS0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJY29tbWVudCBjaGFuZ2VzCisJKiBkYXRhL2xhbHIxLmNjOiBoZXJlLgogCi0JKiBzcmMvbGV4LmMgKHBhcnNlX3BlcmNlbnRfdG9rZW4pOiBzL3F1b3RlYXJnL3F1b3RlLy4KKzIwMTItMTEtMDEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDEtMTEtMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCWF1dG9jb25mOiB1cGRhdGUKKwlUaGVyZSBhcmUgY29tbWVudCBjaGFuZ2VzIG9ubHkgaW4gdGhlIGZpbGVzIHdlIHVzZS4KIAotCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoQVRfVEVTVF9DUFBfR1VBUkRfSCk6IEFkanVzdCB0aGUgY2xlYW4gdXAKLQlwYXR0ZXJuLgorMjAxMi0xMS0wMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotMjAwMS0xMS0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJZ251bGliOiB1cGRhdGUKIAotCSogc3JjL29wdGlvbnMuaCAoc3RydWN0IG9wdGlvbl90YWJsZV9zdHJ1Y3QpOiBzZXRfZmxhZ3MgaXMgdm9pZCouCi0JKiBzcmMvb3B0aW9ucy5jIChsb25nb3B0cyk6IFN1cHBvcnQgYC0tb3V0cHV0JyBhbmQgYCVvdXRwdXQnLgotCSh1c2FnZSk6IEFkanVzdC4KLQkqIHNyYy9sZXguaCAodG9rX3NldG9wdCk6IFJlbW92ZSwgcmVwbGFjZWQgd2l0aC4uLgotCSh0b2tfaW50b3B0LCB0b2tfc3Ryb3B0KTogdGhlc2UgbmV3IGd1eXMuCi0JKiBzcmMvbGV4LmMgKGdldG9wdC5oKTogTm90IG5lZWRlZC4KLQkodG9rZW5fYnVmZmVyLCB1bmxleGVkX3Rva2VuX2J1ZmZlcik6IE5vdCBjb25zdC4KLQkocGVyY2VudF90YWJsZSk6IFByb21vdGUgYC0nIG92ZXIgYF8nIGluIGRpcmVjdGl2ZSBuYW1lcy4KLQlBY3RpdmUgYCVuYW1lLXByZWZpeCcsIGBmaWxlLXByZWZpeCcsIGFuZCBgb3V0cHV0Jy4KLQkocGFyc2VfcGVyY2VudF90b2tlbik6IEFjY2VwdCBwb3NzaWJsZSBhcmd1bWVudHMgdG8gZGlyZWN0aXZlcy4KLQlQcm9tb3RlIGAtJyBvdmVyIGBfJyBpbiBkaXJlY3RpdmUgbmFtZXMuCisyMDEyLTEwLTI4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0yMDAxLTExLTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwlyZWdlbgogCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoRGVjbCBTdW1tYXJ5KTogU3BsaXQgdGhlIGxpc3QgaW50bwotCWBkaXJlY3RpdmVzIGZvciBncmFtbWFycycgYW5kIGBkaXJlY3RpdmVzIGZvciBiaXNvbicuCi0JU29ydCdlbS4KLQlBZGQgZGVzY3JpcHRpb24gb2YgYCVuYW1lLXByZWZpeCcsIGBmaWxlLXByZWZpeCcsIGFuZCBgb3V0cHV0Jy4KLQlQcm9tb3RlIGAtJyBvdmVyIGBfJyBpbiBkaXJlY3RpdmUgbmFtZXMuCi0JKEJpc29uIE9wdGlvbnMpOiBzLyVsb2NhY3Rpb25zLyVsb2NhdGlvbnMvLiAgTmljZSBGcmV1ZGlhbiBzbGlwLgotCVNpbXBsaWZ5IHRoZSBkZXNjcmlwdGlvbiBvZiBgLS1uYW1lLXByZWZpeCcuCi0JUHJvbW90ZSBgLScgb3ZlciBgXycgaW4gZGlyZWN0aXZlIG5hbWVzLgotCVByb21vdGUgYC0tb3V0cHV0JyBvdmVyIGAtLW91dHB1dC1maWxlJy4KLQlGaXggdGhlIGRlc2NyaXB0aW9uIG9mIGAtLWRlZmluZXMnLgotCSogdGVzdHMvb3V0cHV0LmF0OiBFeGVyY2lzZSAlZmlsZS1wcmVmaXggYW5kICVvdXRwdXQuCisyMDEyLTEwLTI4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0yMDAxLTExLTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwl5YWNjLmM6IGluaXRpYWxpemUgeXlsdmFsIGFuZCB5eWxsb2MuCisJV2hlbiBnZW5lcmF0aW5nIGEgcHVyZSBwdXNoIHBhcnNlciwgdGhlIGluaXRpYWxpemF0aW9uIG9mIHl5bHZhbCBhbmQKKwl5eWxsb2MgbWF5IG5vdCBiZSB2aXNpYmxlIHRvIHRoZSBjb21waWxlci4gIFdpdGggd2FybmluZ3MgZW5hYmxlZCwgR0NDCisJNC4zLjYsIDQuNC43LCA0LjUuNCwgYW5kIDQuNi4zIHJlcG9ydCB1bmluaXRpYWxpemVkIHVzZXMgb2YKKwl5eWx2YWwveXlsbG9jLiAgVXNpbmcgbG9jYWwgcHJhZ21hcyB0byBkaXNhYmxlIHRoZXNlIHdhcm5pbmdzIGlzIG5vdAorCXN1cHBvcnRlZCBiZWZvcmUgNC42LCBhbmQgNC42IGRvZXMgbm90IHN1cHBvcnQgaXQgcHJvcGVybHkuICBTbworCWluaXRpYWxpemUgeXlsdmFsIGFuZCB5eWxsb2MgYXQgdGhlaXIgZGVmaW5pdGlvbi4gIFJlcG9ydGVkIGJ5IFBldGVyCisJU2ltb25zLiAgU2VlCisJaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAxMi0xMC9tc2cwMDEzMy5odG1sCiAKLQkqIGRvYy9yZWZjYXJkLnRleDogVXBkYXRlLgorCSogZGF0YS9jLm00IChiNF95eWxvY19kZWZhdWx0X2RlZmluZSk6IE5ldy4KKwkqIGRhdGEveWFjYy5jOiBVc2UgaXQgd2hlbiBsb2NhdGlvbnMgYXJlIHJlcXVlc3RlZC4KKwkoWVlMVkFMX0lOSVRJQUxJWkUpOiBSZXBsYWNlIGJ5Li4uCisJKFlZX0lOSVRJQUxfVkFMVUUpOiB0aGlzLgorCSh5eXBhcnNlKTogSW5pdGlhbGl6ZSB5eWxsb2MgYW5kIHl5bHZhbC4KKwlUaGVyZWZvcmUsIHJlbW92ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgeXlsbG9jJ3MgZmllbGQuCisJKiBkYXRhL2dsci5jOiBMaWtld2lzZS4KIAotMjAwMS0xMS0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTEwLTI2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBzcmMvc3ltdGFiLmggKFNVTkRFRik6IE5ldy4KLQkqIHNyYy9zeW10YWIuYyAoYnVja2V0X25ldyk6IEluaXQgdXNlcl90b2tlbl9udW1iZXIgdG8gU1VOREVGIHRvCi0Jc3RhbmQgZm9yIGB1bmluaXRpYWxpemVkJywgaW5zdGVhZCBvZiAwLgotCSogc3JjL3JlYWRlci5jIChwYWNrc3ltYm9scywgcGFyc2VfdGhvbmdfZGVjbCk6IEFkanVzdC4KLQkqIHNyYy9sZXguYyAobGV4KTogQWRqdXN0LgorCU1lcmdlIGJyYW5jaCAnYnJhbmNoLTIuNicgaW50byBtYWludAorCSogb3JpZ2luL2JyYW5jaC0yLjY6CisJICByZWdlbgorCSAgeWFjYy5jOiBkbyBub3QgZGVmaW5lIGxvY2F0aW9uIHN1cHBvcnQgd2hlbiBub3QgdXNpbmcgbG9jYXRpb25zCisJICBtYWludDogYmUgY29tcGlsYWJsZSB3aXRoIEdDQyA0LjAKKwkgIHRlc3RzOiBhZGRyZXNzIGEgd2FybmluZyBmcm9tIEdDQyA0LjQKKwkgIHRlc3RzOiBkb24ndCB1c2Ugb3B0aW9ucyB0aGF0IENsYW5nIGRvZXMgbm90IHN1cHBvcnQKKwkgIHRlc3RzOiByZXN0b3JlIHRoZSB0ZXN0cyBvbiAtV2Vycm9yCisJICByZWdlbgorCSAgcGFyc2UtZ3JhbTogdXBkYXRlIHRoZSBCaXNvbiBpbnRlcmZhY2UKKwkgIGZpeCBjb21tZW50CiAKLQkqIHRlc3RzL2NhbGMuYXQgKF9BVF9EQVRBX0NBTENfWSk6IERlY2xhcmUgYSB0b2tlbiBmb3IgRU9GLgotCU51bWJlciBpdCAwLgotCUxldCB5eWxleCByZXR1cm4gaXQgaW5zdGVhZCBvZiBhIHBsYWluIDAuCi0JUmVwb3J0ZWQgYnkgRGljayBTdHJlZWZsYW5kLgorMjAxMi0xMC0yNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotMjAwMS0xMS0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJZG9jOiBtaW5vciBzdHlsZSBjaGFuZ2UKKwkqIGRvYy9maWdzL2V4YW1wbGUtcmVkdWNlLnR4dDogaGVyZS4KIAotCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoTWl4aW5nICV0b2tlbiBzdHlsZXMpOiBOZXcgdGVzdC4KKzIwMTItMTAtMjYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDEtMTEtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCW1haW50OiB1c2UgZ2VuZG9jcydzIG5ldyAtSSBvcHRpb24KKwkqIGdudWxpYjogVXBkYXRlIGdlbmRvY3MuCisJKiBjZmcubWsgKGdlbmRvY3Nfb3B0aW9uc18pOiBOZXcuCiAKLQkqIHNyYy9yZWFkZXIuYyAocGFyc2VfdGhvbmdfZGVjbCk6IEZvcm1hdHRpbmcgY2hhbmdlcy4KLQkodG9rZW5fdHJhbnNsYXRpb25zX2luaXQpOiBOZXcsIGV4dHJhY3RlZCBmcm9tLi4uCi0JKHBhY2tzeW1ib2xzKTogSGVyZS4KLQlBZGp1c3QuCisyMDEyLTEwLTI2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0yMDAxLTExLTAxICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwlyZWdlbgogCi0JKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChBVF9URVNUX0NQUF9HVUFSRF9IKTogTmV3LgotCUNoZWNrIHRoYXQgYDlmb28ueScgcHJvZHVjZXMgY29ycmVjdCBjcHAgZ3VhcmRzLgotCSogc3JjL2ZpbGVzLmMgKGNvbXB1dGVfaGVhZGVyX21hY3JvKTogUHJlcGVuZCBgQklTT05fJyB0byBDUFAKLQlndWFyZHMuCi0JUmVwb3J0ZWQgYnkgV3dwLgorMjAxMi0xMC0yNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotMjAwMS0xMS0wMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJeWFjYy5jOiBkb24ndCB1c2UgX1ByYWdtYSBHQ0MgZGlhZ25vc3RpYyB3aXRoIDQuNgorCVJlcG9ydGVkIGJ5IFBldGVyIFNpbW9ucy4KKwlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMTItMTAvbXNnMDAwMzMuaHRtbAogCi0JKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChJbnZhbGlkIGlucHV0OiAyKTogTmV3LgotCSogc3JjL2xleC5jICh1bmxleGVkX3Rva2VuX2J1ZmZlcik6IE5ldy4KLQkobGV4LCB1bmxleCk6IEFkanVzdDogd2hlbiB1bmxleGluZywgYmUgc3VyZSB0byBzYXZlIHRva2VuX2J1ZmZlcgotCXRvby4KLQlSZXBvcnRlZCBieSBXd3AuCisJKiBkYXRhL3lhY2MuYyAoYjRfZGVjbGFyZV9zY2FubmVyX2NvbW11bmljYXRpb25fdmFyaWFibGVzKTogNC43CisJc2VlbXMgZmluZSB0aG91Z2guCiAKLTIwMDEtMTEtMDEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0xMC0yNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogdGVzdHMvY2FsYy5hdDogQ2F0Y2ggdXAgd2l0aCAxLjMwLgotCSogY29uZmlndXJlLmluOiBCdW1wIHRvIDEuNDlhLgotCUFkanVzdCB0byBuZXdlciBBdXRvdGVzdC4KKwlyZWdlbgogCi0yMDAxLTEwLTE5ICBQYXNjYWwgQmFydCAgPHBhc2NhbC5iYXJ0QGVwaXRhLmZyPgorMjAxMi0xMC0yNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL2NvbmZsaWN0cy5jOiBNb3ZlIGdsb2JhbCB2YXJpYWJsZXMgcnJjX3RvdGFsIGFuZCBzcmNfdG90YWwgLi4uCi0JKHByaW50X2NvbmZsaWN0cyk6IGhlcmUuCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dCk6IEZyZWUgZ2xvYmFsIHZhcmlhYmxlIHVzZXJfdG9rbnVtcy4KLQkqIHNyYy9sZXguYyAodG9rZW5fb2JzdGFjayk6IEJlY29tZSBzdGF0aWMuCisJeWFjYy5jOiBkbyBub3QgZGVmaW5lIGxvY2F0aW9uIHN1cHBvcnQgd2hlbiBub3QgdXNpbmcgbG9jYXRpb25zCisJKiBkYXRhL3lhY2MuYyAoWVlMTE9DX0RFRkFVTFQsIFlZUkhTTE9DKTogRG9uJ3QgZGVmaW5lIHdoZW4gbm90CisJdXNpbmcgbG9jYXRpb25zLgogCi0yMDAxLTEwLTE4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMTAtMjYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkqIHRlc3RzL2F0bG9jYWwuaW4gKEdDQyk6IEFkZC4KLQkqIHRlc3RzL2NhbGMuYXQ6IHMvbTRfbWF0Y2gvbTRfYm1hdGNoLy4KLQlzL200X3BhdHN1YnN0L200X2JwYXRzdWJzdC8uCi0JKEFUX0NIRUNLX0NBTEMpOiBDaGVjayB0aGUgY29tcGlsZXIncyBzdGRlcnIgb25seSBpZiBpdCdzIEdDQy4KLQkqIGNvbmZpZ3VyZS5pbjogQUNfU1VCU1QoR0NDKS4KKwltYWludDogYmUgY29tcGlsYWJsZSB3aXRoIEdDQyA0LjAKKwlUaGUgInNoYWRvd3MgYSBnbG9iYWwgZGVjbGFyYXRpb24iIHdhcm5pbmcgaW4gR0NDIDQuMCB3YXMgYSBiaXQKKwlhbm5veWluZy4gIEl0IGRvZXMgbm90IGxpa2UgdGhhdCBhIHR5cGUgbmFtZSBiZSB1c2VkIGluIGEgcHJvdG90eXBlIG9mCisJYSBmdW5jdGlvbiAobm90IHRoZSBpbXBsZW1lbnRhdGlvbiwganVzdCB0aGUgZGVjbGFyYXRpb24pOgogCi0yMDAxLTEwLTE0ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCSAgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIHNyYy9MUjAuYzozODoKKwkgIHNyYy9yZWFkZXIuaDo1Njogd2FybmluZzogZGVjbGFyYXRpb24gb2YgJ25hbWVkX3JlZicgc2hhZG93cyBhCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbCBkZWNsYXJhdGlvbgorCSAgc3JjL25hbWVkLXJlZi5oOjM1OiB3YXJuaW5nOiBzaGFkb3dlZCBkZWNsYXJhdGlvbiBpcyBoZXJlCiAKLQkqIHNyYy9vcHRpb25zLmMgKGNyZWF0ZV9sb25nX29wdGlvbl90YWJsZSk6IEZpeC4KKwlJdCBkb2VzIG5vdCBsaWtlIGVpdGhlciB3aGVuIGEgZ2xvYmFsIHZhcmlhYmxlIG5hbWUgaXMgdXNlZCBpbiBhCisJcHJvdG90eXBlLiAgRmxleCAyLjUuMzcgZ2VuZXJhdGVzIHRoaXMgcHJvdG90eXBlOgogCi0yMDAxLTEwLTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwkgIHZvaWQgZ3JhbV9zZXRfZGVidWcgKGludCBkZWJ1Z19mbGFnICApOwogCi0JKiBzcmMvYmlzb24uc2ltcGxlOiBCZSBzdXJlIHRvIHNldCBZWVNUQUNLX1VTRV9BTExPQ0EuCisJKiBzcmMvZ2V0YXJncy5oLCBzcmMvZ2V0YXJncy5jIChkZWJ1Z19mbGFnKTogUmVuYW1lIGFzLi4uCisJKGRlYnVnKTogdGhpcy4KKwlBZGp1c3QgZGVwZW5kZW5jaWVzLgorCSogc3JjL3JlYWRlci5oOiBEb24ndCB1c2UgIm5hbWVkX3JlZiIgYXMgYSBmb3JtYWwgYXJndW1lbnQgbmFtZS4KIAotMjAwMS0xMC0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTEwLTI1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBzcmMvcmVhZGVyLmMgKHBhcnNlX3VuaW9uX2RlY2wpOiBQdXNoIHRoZSBjYXJhY3RlcnMgaW4KLQl1bmlvbl9vYnN0YWNrLCBub3QgYXR0cnNfb2JzdGFjay4KKwl0ZXN0czogYWRkcmVzcyBhIHdhcm5pbmcgZnJvbSBHQ0MgNC40CisJMjM2LiB0b3J0dXJlLmF0OjQ2NTogdGVzdGluZyBFeHBsb2RpbmcgdGhlIFN0YWNrIFNpemUgd2l0aCBBbGxvY2EgLi4uCisJLi4vLi4vLi4vdGVzdHMvdG9ydHVyZS5hdDo0NzQ6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueQorCS4uLy4uLy4uL3Rlc3RzL3RvcnR1cmUuYXQ6NDc0OiAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworCXN0ZGVycjoKKwljYzE6IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzCisJaW5wdXQueTogSW4gZnVuY3Rpb24gJ21haW4nOgorCWlucHV0Lnk6NjA6IGVycm9yOiAnc3RhdHVzJyBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkIGluIHRoaXMgZnVuY3Rpb24KIAotMjAwMS0xMC0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJKiB0ZXN0cy90b3J0dXJlLmF0IChBVF9EQVRBX1NUQUNLX1RPUlRVUkUpOiBJbml0aWFsIHN0YXR1cyB0byBhdm9pZAorCXRoZSBwcmV2aW91cyBlcnJvci4KIAotCU1lcmdlIGluIHRoZSBicmFuY2ggMS4yOS4KKzIwMTItMTAtMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkqIHNyYy9yZWFkZXIuYyAocGFja3N5bWJvbHMpOiBVc2UgYSB0ZW1wb3Jhcnkgb2JzdGFjayBmb3IKLQlgJSV0b2tlbmRlZicsIHNpbmNlIG91dHB1dF9zdGFjayBpcyBhbHJlYWR5IHVzZWQgZWxzZXdoZXJlLgorCXRlc3RzOiBkb24ndCB1c2Ugb3B0aW9ucyB0aGF0IENsYW5nIGRvZXMgbm90IHN1cHBvcnQKKwkqIGNvbmZpZ3VyZS5hYyAoV0FSTl9DRkxBR1MsIFdBUk5fQ1hYRkxBR1MpOiBEbyBub3QgaW5jbHVkZSBvcHRpb25zCisJdGhhdCBDbGFuZyBkb2VzIG5vdCBzdXBwb3J0LgogCi0JMjAwMS0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTEwLTI1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JQnVtcCAxLjI5ZC4KKwl0ZXN0czogcmVzdG9yZSB0aGUgdGVzdHMgb24gLVdlcnJvcgorCVdoZW4gcnVuIGFzIC9iaW4vc2gsIEJhc2ggc2V0cyB0aGUgc2hlbGwgdmFyaWFibGUgUE9TSVhMWV9DT1JSRUNUIHRvCisJeS4gIFRoZSB0ZXN0IHN1aXRlIGNoZWNrcyBmb3IgdGhlIGVudnZhciBQT1NJWExZX0NPUlJFQ1QgdG8gdHVybiBvZgorCXNvbWUgdGVzdHMgbm90IHN1cHBvcnRlZCBpbiBQT1NJWCBtb2RlLiAgUmVzdG9yZSB0aGVzZSB0ZXN0cy4KIAotCTIwMDEtMTAtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCVJlcG9ydGVkIGJ5IHRoZSBIeWRyYSBidWlsZCBmYXJtLCBmcm9tIFJvYiBWZXJtYWFzLgogCi0JVmVyc2lvbiAxLjI5Yy4KKwkqIHRlc3RzL2xvY2FsLmF0IChBVF9CSVNPTl9DSEVDS19XQVJOSU5HU18pOiBDaGVjayB0aGUgZW52dmFyCisJUE9TSVhMWV9DT1JSRUNULCBub3QgdGhlIHNoZWxsIHZhcmlhYmxlLgogCi0JMjAwMS0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTEwLTI1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChJbnZhbGlkIENQUCBoZWFkZXJzKTogTmV3LgotCUZyb20gQWxleGFuZGVyIEJlbG9wb2xza3kuCi0JKiBzcmMvZmlsZXMuYyAoY29tcHV0ZV9oZWFkZXJfbWFjcm8pOiBNYXAgbm9uIGFsbnVtIGNoYXJzIHRvIGBfJy4KKwlyZWdlbgogCi0JMjAwMS0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTEwLTI1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChJbnZhbGlkIGlucHV0KTogTmV3LgotCSogc3JjL2xleC5jIChsZXgpOiBCZSBzdXJlIHRvIHNldCBgdG9rZW5fYnVmZmVyJyBpbiBhbnkgY2FzZS4KLQlSZXBvcnRlZCBieSBTaHVyYS4KKwlwYXJzZS1ncmFtOiB1cGRhdGUgdGhlIEJpc29uIGludGVyZmFjZQorCSogc3JjL3BhcnNlLWdyYW0ueSAoJXB1cmUtcGFyc2VyLCAlbmFtZS1wcmVmaXgpOiBSZXBsYWNlIHdpdGguLi4KKwkoJWRlZmluZSBhcGkucHVyZSwgJWRlZmluZSBhcGkucHJlZml4KQorCSogc3JjL2xvY2F0aW9uLmgsIHNyYy9zY2FuLWdyYW0uaDogQWRqdXN0IHRvIGFwaS5wcmVmaXguCiAKLQkyMDAxLTEwLTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMTAtMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkqIHRlc3RzL2NhbGMuYXQ6IE5vdyB0aGF0IC0tZGVidWcgd29ya3MsIHRoZSB0ZXN0cyBtdXN0IGJlIGFkanVzdGVkLgorCWZpeCBjb21tZW50CisJKiBkYXRhL2MubTQgKGI0X1lZREVCVUdfZGVmaW5lKTogaGVyZS4KIAotCTIwMDEtMTAtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0xMC0yMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL291dHB1dC5jIChvdXRwdXRfcGFyc2VyKTogQXNzZXJ0IGBza2VsZXRvbicuCi0JKiBzcmMvZmlsZXMuYyAoc2tlbGV0b25fZmluZCk6IExvb2sgaGFyZGVyIGZvciBza2VsZXRvbnMgb24gRE9TaXNoCi0Jc3lzdGVtcy4KLQlGcm9tIFNodXJhLgorCU1lcmdlIGJyYW5jaCAnYnJhbmNoLTIuNicgaW50byBtYWludAorCSogb3JpZ2luL2JyYW5jaC0yLjY6CisJICBtYWludDogcG9zdC1yZWxlYXNlIGFkbWluaXN0cml2aWEKKwkgIHZlcnNpb24gMi42LjQKKwkgIHJlZ2VuCisJICAyLjYuNDogYm90Y2hlZCAyLjYuMwogCi0JMjAwMS0xMC0wMSAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKzIwMTItMTAtMjMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkqIHNyYy9sZXguaDogRWNobyBtb2RpZmljYXRpb25zLgotCSogc3JjL2xleC5jICh1bmxleCk6IFBhcmFtZXRlciBpcyBub3cgdG9rZW5fdC4KLQlGcm9tIEhhbnMgQWJlcmcuCisJbWFpbnQ6IHBvc3QtcmVsZWFzZSBhZG1pbmlzdHJpdmlhCisJKiBORVdTOiBBZGQgaGVhZGVyIGxpbmUgZm9yIG5leHQgcmVsZWFzZS4KKwkqIC5wcmV2LXZlcnNpb246IFJlY29yZCBwcmV2aW91cyB2ZXJzaW9uLgorCSogY2ZnLm1rIChvbGRfTkVXU19oYXNoKTogQXV0by11cGRhdGUuCiAKLQkyMDAxLTEwLTAxICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorMjAxMi0xMC0yMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL21haW4uYzogSW5jbHVkZSBsZXguaC4KLQlGcm9tIEhhbnMgQWJlcmcuCisJdmVyc2lvbiAyLjYuNAorCSogTkVXUzogUmVjb3JkIHJlbGVhc2UgZGF0ZS4KIAotCTIwMDEtMDktMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0xMC0yMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL2dldGFyZ3MuYyAobG9uZ29wdHMpOiBgLS1kZWJ1ZycgaXMgYC10Jywgbm90IGAtZCcuCisJcmVnZW4KIAotCTIwMDEtMDktMjggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0xMC0yMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogdGVzdHMvdGVzdHN1aXRlLmF0OiBVcGRhdGUgdG8gbmV3ZXIgQXV0b3Rlc3QuCi0JKiB0ZXN0cy9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IGJpc29uIGlzIG5vdCB0byBiZSBzaGlwcGVkLgorCTIuNi40OiBib3RjaGVkIDIuNi4zCisJKiBORVdTOiBoZXJlLgogCi0JMjAwMS0wOS0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTEwLTIyICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JUG9zaXRpb24gaW5kZXBlbmRlbnQgd3JhcHBlci4KKwlNZXJnZSBicmFuY2ggJzIuNi4zJyBpbnRvIG1haW50CisJKiAyLjYuMzogKDIyIGNvbW1pdHMpCisJICBtYWludDogcG9zdC1yZWxlYXNlIGFkbWluaXN0cml2aWEKKwkgIHZlcnNpb24gMi42LjMKKwkgIGdudWxpYjogdXBkYXRlCisJICB0ZXN0czogY2hlY2sgJW5vLWxpbmVzCisJICBORVdTOiB3YXJuaW5ncyB3aXRoIGNsYW5nCisJICB3YXJuaW5nczogYXZvaWQgd2FybmluZ3MgZnJvbSBjbGFuZworCSAgdGVzdHM6IG5vIGxvbmdlciBkaXNhYmxlIC1PIGNvbXBpbGVyIG9wdGlvbnMKKwkgIHlhY2MuYzogaW5pdGlhbGl6ZSB5eWx2YWwgaW4gcHVyZS1wYXJzZXIgbW9kZQorCSAgc2tlbGV0b25zOiBzdHlsZSBjaGFuZ2VzCisJICB0ZXN0czogbWlub3IgaW1wcm92ZW1lbnRzCisJICB0ZXN0czogdXNlICRQRVJMIGluc3RlYWQgb2YgcGVybAorCSAgYnVpbGQ6IGxvb2sgZm9yIFBlcmwgaW4gY29uZmlndXJlLgorCSAgdGVzdHM6IGZpeCBzZWQgcG9ydGFiaWxpdHkgaXNzdWVzCisJICB0ZXN0czogZGlmZiAtdSBpcyBub3QgcG9ydGFibGUKKwkgIG1haW50OiB3b3JkIGNoYW5nZXMKKwkgIGxhbHIxLmNjOiBmaXggdGVzdCBzdWl0ZSBwb3J0YWJpbGl0eQorCSAgbWFpbnQ6IGZpeCBhbiBlcnJvbmVvdXMgaW5jbHVkZQorCSAgdGVzdHM6IGNoZWNrIHRoYXQgaGVhZGVycyBhcmUgc2VsZiBjb250YWluZWQKKwkgIGRvYzogYWRkIG1pc3NpbmcgZG9jdW1lbnRhdGlvbiBmb3IgLS1yZXBvcnQKKwkgIGhlYWRlcnM6IG1vdmUgQ1BQIGd1YXJkcyBpbnRvIFlZXypfSU5DTFVERUQgdG8gYXZvaWQgY29sbGlzaW9ucworCSAgLi4uCiAKLQkqIHRlc3RzL2Jpc29uOiBSZW1vdmUuCi0JKiB0ZXN0cy9iaXNvbi5pbjogTmV3LgotCSogY29uZmlndXJlLmluOiBBZGp1c3QuCisyMDEyLTEwLTIyICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JMjAwMS0wOS0yNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisJbWFpbnQ6IHBvc3QtcmVsZWFzZSBhZG1pbmlzdHJpdmlhCisJKiBORVdTOiBBZGQgaGVhZGVyIGxpbmUgZm9yIG5leHQgcmVsZWFzZS4KKwkqIC5wcmV2LXZlcnNpb246IFJlY29yZCBwcmV2aW91cyB2ZXJzaW9uLgorCSogY2ZnLm1rIChvbGRfTkVXU19oYXNoKTogQXV0by11cGRhdGUuCiAKLQlQb3J0IHF1b3RlYXJnIGZpeGVzIGZyb20gdGFyIDEuMTMuMjQuCisyMDEyLTEwLTIyICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBsaWIvcXVvdGVhcmcuYzogQlNEL09TIDQuMSB3Y2hhci5oIHJlcXVpcmVzIEZJTEUgYW5kIHN0cnVjdAotCXRtIHRvIGJlIGRlY2xhcmVkLgotCShIQVZFX01CU0lOSVQpOiBVbmRlZiBpZiAhSEFWRV9NQlJUT1dDLgotCShtYnNpbml0KTogRGVmaW5lIHRvIDEgaWYgIWRlZmluZWQgbWJzaW5pdCAmJiAhSEFWRV9NQlNJTklULgorCXZlcnNpb24gMi42LjMKKwkqIE5FV1M6IFJlY29yZCByZWxlYXNlIGRhdGUuCiAKLQkqIG00L01ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIG1icnRvd2MubTQuCi0JKiBtNC9tYnJ0b3djLm00OiBOZXcgZmlsZS4KLQkqIG00L3ByZXJlcS5tNCAoam1fUFJFUkVRX1FVT1RFQVJHKTogQ2hlY2sgZm9yIG1ic2luaXQgYW5kIHN0ZGRlZi5oLgotCVVzZSBqbV9GVU5DX01CUlRPV0MgaW5zdGVhZCBvZiBBQ19DSEVDS19GVU5DUyhtYnJ0b3djKS4KKzIwMTItMTAtMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkyMDAxLTA5LTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwlnbnVsaWI6IHVwZGF0ZQogCi0JQnVtcCB0byAxLjI5Yy4KKzIwMTItMTAtMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkyMDAxLTA5LTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwl0ZXN0czogY2hlY2sgJW5vLWxpbmVzCisJKiB0ZXN0cy9zeW5jbGluZXMuYXQ6IGhlcmUuCiAKLQlWZXJzaW9uIDEuMjliLgorMjAxMi0xMC0yMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCTIwMDEtMDktMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCU5FV1M6IHdhcm5pbmdzIHdpdGggY2xhbmcKKwkqIE5FV1M6IGhlcmUuCiAKLQkqIHNyYy9zeXN0ZW0uaDogSW5jbHVkZSBgeGFsbG9jLmgnLgotCVJlbW92ZSBpdCBmcm9tIHRoZSBDIGZpbGVzLgotCSogc3JjL2ZpbGVzLmMgKG91dHB1dF9maWxlcyk6IEZyZWUgdGhlIG9ic3RhY2tzLgotCSogc3JjL2xleC5jIChpbml0X2xleCk6IFJlbmFtZSBhcy4uLgotCShsZXhfaW5pdCk6IHRoaXMuCi0JKGxleF9mcmVlKTogTmV3LgotCSogc3JjL21haW4uYyAobWFpbik6IFVzZSBpdC4KKzIwMTItMTAtMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkyMDAxLTA5LTI0ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCXdhcm5pbmdzOiBhdm9pZCB3YXJuaW5ncyBmcm9tIGNsYW5nCisJRml4IHRoZSBmb2xsb3dpbmcgd2FybmluZwogCi0JKiBzcmMvdmNnLmMgKG9wZW5fZWRnZSwgY2xvc2VfZWRnZSwgb3Blbl9ub2RlLCBjbG9zZV9ub2RlKTogQ2hhbmdlCi0JdG8gb3V0cHV0IGluZm9ybWF0aW9ucyBpbiBmb3V0IChGSUxFKikuCi0JKG9wZW5fZ3JhcGgsIGNsb3NlX2dyYXBoKTogTGlrZXdpc2UuCi0JKG91dHB1dF9ncmFwaCwgb3V0cHV0X2VkZ2UsIG91dHB1dF9ub2RlKTogTGlrZXdpc2UuCi0JKiBzcmMvdmNnLmg6IFVwZGF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzLgotCSogc3JjL3ByaW50X2dyYXBoLmMgKHByaW50X2dyYXBoKTogT3BlbiBvdXRwdXQgZ3JhcGggZmlsZS4KLQkocHJpbnRfYWN0aW9ucyk6IEFkanVzdC4KLQkqIHNyYy9maWxlcy5oOiBSZW1vdmUgZXh0ZXJuIGRlY2xhcmF0aW9uLgotCSogc3JjL2ZpbGVzLmM6IFJlbW92ZSBncmFwaF9vYnN0YWNrIGRlY2xhcmF0aW9uLgotCShvcGVuX2ZpbGVzKTogUmVtb3ZlIGdyYXBoX29ic3RhY2sgaW5pdGlhbGl6YXRpb24uCi0JKG91dHB1dF9maWxlcyk6IFJlbW92ZSBncmFwaF9vYnN0YWNrIHNhdmluZy4KKwkgIHBhcnNlLWdyYW0uYzoyMDc4OjE0OiBlcnJvcjogZXF1YWxpdHkgY29tcGFyaXNvbiB3aXRoIGV4dHJhbmVvdXMgcGFyZW50aGVzZXMKKwkgICAgICAgICAgICAgICAgICAgICAgICBbLVdlcnJvciwtV3BhcmVudGhlc2VzLWVxdWFsaXR5XQorCSAgICBpZiAoKCh5eW4pID09ICgtOTEpKSkKKwkgICAgICAgICB+fn5+fn5efn5+fn5+fgorCSAgcGFyc2UtZ3JhbS5jOjIwNzg6MTQ6IG5vdGU6IHJlbW92ZSBleHRyYW5lb3VzIHBhcmVudGhlc2VzIGFyb3VuZCB0aGUKKwkgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJpc29uIHRvIHNpbGVuY2UgdGhpcyB3YXJuaW5nCisJICAgIGlmICgoKHl5bikgPT0gKC05MSkpKQorCSAgICAgICAgfiAgICAgIF4gICAgICAgfgorCSAgcGFyc2UtZ3JhbS5jOjIwNzg6MTQ6IG5vdGU6IHVzZSAnPScgdG8gdHVybiB0aGlzIGVxdWFsaXR5IGNvbXBhcmlzb24gaW50bworCSAgICAgICAgICAgICAgICAgICAgICAgIGFuIGFzc2lnbm1lbnQKKwkgICAgaWYgKCgoeXluKSA9PSAoLTkxKSkpCisJICAgICAgICAgICAgICAgXn4KKwkgICAgICAgICAgICAgICA9CisJICAxIGVycm9yIGdlbmVyYXRlZC4KIAotCTIwMDEtMDktMjQgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisJYW5kIHRoZSBmb2xsb3dpbmcgb25lOgogCi0JKiBzcmMvZmlsZXMuYyAoY29tcHV0ZV9vdXRwdXRfZmlsZV9uYW1lcyk6IEZpeC4KKwkgIGlucHV0LmNjOjc0MDoxOiBlcnJvcjogZnVuY3Rpb24gZGVjbGFyZWQgJ25vcmV0dXJuJyBzaG91bGQgbm90IHJldHVybgorCSAgICAgICAgICAgICAgICAgICAgICAgICBbLVdlcnJvciwtV2ludmFsaWQtbm9yZXR1cm5dCisJICBzdGF0aWMgdm9pZCB5eU1lbW9yeUV4aGF1c3RlZCAoeXlHTFJTdGFjayogeXlzdGFja3ApCisJICAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKKwkgIHN0YXRpYyB2b2lkCisJICB5eU1lbW9yeUV4aGF1c3RlZCAoeXlHTFJTdGFjayogeXlzdGFja3ApCisJICB7CisJICAgIFlZTE9OR0pNUCAoeXlzdGFja3AtPnl5ZXhjZXB0aW9uX2J1ZmZlciwgMik7CisJICB9CisJICBeCisJICAxIHdhcm5pbmcgYW5kIDEgZXJyb3IgZ2VuZXJhdGVkLgogCi0JMjAwMS0wOS0yNCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4sCi0JCSAgICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwlUaGlzIGlzIEFwcGxlIGNsYW5nIHZlcnNpb24gMy4xICh0YWdzL0FwcGxlL2NsYW5nLTMxOC4wLjYxKS4KIAotCSogc3JjL3JlYWRlci5jIChyZWFkZXIpOiBSZW1vdmUgY2FsbCB0byBmcmVlX3N5bXRhYiAoKS4KLQkqIHNyYy9tYWluLmMgKG1haW4pOiBDYWxsIGl0IGhlcmUuCi0JSW5jbHVkZSBzeW10YWIuaC4KLQkqIHNyYy9jb25mbGljdHMuYyAoaW5pdGlhbGl6ZV9jb25mbGljdHMpOiBSZW5hbWUgYXMuLi4KLQkoc29sdmVfY29uZmxpY3RzKTogdGhpcy4KLQkqIHNyYy9wcmludC5jIChwcmludF9jb3JlLCBwcmludF9hY3Rpb25zLCBwcmludF9zdGF0ZSkKLQkocHJpbnRfZ3JhbW1hcik6IER1bXAgdG8gYSBmaWxlIGluc3RlYWQgYSBgb3V0cHV0X29ic3RhY2snLgotCShwcmludF9yZXN1bHRzKTogRHVtcCBgb3V0cHV0X29ic3RhY2snLCBhbmQgdGhlbiBwcm9jZWVkIHdpdGggdGhlCi0JRklMRSAqLgotCSogc3JjL2ZpbGVzLmMgKGNvbXB1dGVfb3V0cHV0X2ZpbGVfbmFtZXMsIGNsb3NlX2ZpbGVzKTogTmV3LgotCShvdXRwdXRfZmlsZXMpOiBBZGp1c3QuCi0JKiBzcmMvbWFpbi5jIChtYWluKTogQWRqdXN0LgorCSogZGF0YS9jLm00IChiNF90YWJsZV92YWx1ZV9lcXVhbHMpOiBVc2UgKCEhKEEgPT0gQikpIGluc3RlYWQgb2YgKEEgPT0gQikKKwl0byBhdm9pZCB0aGlzIHdhcm5pbmcuCisJQW55IHJlYXNvbmFibGUgY29tcGlsZXIgc2hvdWxkIGdlbmVyYXRlIHRoZSBzYW1lIGNvZGUuCisJKiBzcmMvdW5pcXN0ci5oIChVTklRU1RSX0VRKTogTGlrZXdpc2UuCisJKiBkYXRhL2dsci5jIChMT05HSk1QKTogYWJvcnQgYWZ0ZXIgbG9uZ2ptcCB0byBwYWNpZnkgY2xhbmcuCiAKLQkyMDAxLTA5LTIzICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorMjAxMi0xMC0yMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL2ZpbGVzLmMgKGNvbXB1dGVfaGVhZGVyX21hY3JvKTogQ29tcHV0ZXMgaGVhZGVyIG1hY3JvIG5hbWUKLQlmcm9tIHNwZWNfZGVmaW5lc19maWxlIHdoZW4gZ2l2ZW4uCisJdGVzdHM6IG5vIGxvbmdlciBkaXNhYmxlIC1PIGNvbXBpbGVyIG9wdGlvbnMKKwlUZXN0cyBhcmUgcnVubmluZyB3aXRob3V0IC1PIHNpbmNlCisJZjM3N2Y2OWZlYzI4MDEzYzc5ZGI0ZWZlMTJiYmI5ZDQ4OTg3ZmIyYyBiZWNhdXNlIHNvbWUgd2FybmluZ3MgKGFib3V0CisJeXlsdmFsIG5vdCBiZWluZyBpbml0aWFsaXplZCkgc2hvdyBvbmx5IHdoZW4gR0NDIGlzIGdpdmVuIC1PMi4gIFRoZQorCXByZXZpb3VzIHBhdGNoIGZpeGVzIHRoZSB3YXJuaW5ncy4gUnVuIHRoZSB0ZXN0IHN1aXRlIHdpdGggY29tcGlsZXIKKwlvcHRpb25zIHVubW9kaWZpZWQuCiAKLQkyMDAxLTA5LTIzICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCSogdGVzdHMvYXRsb2NhbC5pbiAoTzBDRkxBR1MsIE8wQ1hYRkxBR1MpOiBSZW1vdmUsIHVzZSBDRkxBR1MgYW5kCisJQ1hYRkxBR1MuCiAKLQkqIHNyYy9maWxlcy5jIChvdXRwdXRfZmlsZXMpOiBBZGQgZGVmYXVsdCBleHRlbnNpb25zLgorMjAxMi0xMC0yMiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CiAKLQkyMDAxLTA5LTIyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwl5YWNjLmM6IGluaXRpYWxpemUgeXlsdmFsIGluIHB1cmUtcGFyc2VyIG1vZGUKKwlTZWUgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAxMi0wOC9tc2cwMDAyNC5odG1sCisJKHNwcmVhZGluZyBvdmVyIFNlcHRlbWJlciBhbmQgT2N0b2JlcikuCiAKLQkqIHNyYy9jb25mbGljdHMuYyAoZmluYWxpemVfY29uZmxpY3RzKTogUmVuYW1lIGFzLi4uCi0JKGZyZWVfY29uZmxpY3RzKTogdGhpcy4KKwkqIGRhdGEveWFjYy5jIChZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTikKKwkoWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5ELCBZWUxWQUxfSU5JVElBTElaRSk6CisJTmV3IG1hY3Jvcy4gIFVzZSB0aGVtIHRvIHN1cHByZXNzIGFuIHVud2FudGVkIEdDQyBkaWFnbm9zdGljLgogCi0JMjAwMS0wOS0yMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTEwLTIyICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBzcmMvZ3JhbS5jIChncmFtX2ZyZWUpOiBSZW5hbWUgYmFjayBhcy4uLgotCShkdW1teSk6IHRoaXMuCi0JKG91dHB1dF90b2tlbl90cmFuc2xhdGlvbnMpOiBGcmVlIGB0b2tlbl90cmFuc2xhdGlvbnMnLgotCSogc3JjL3N5bXRhYi5jIChmcmVlX3N5bXRhYik6IEZyZWUgdGhlIHRhZyBmaWVsZC4KKwlza2VsZXRvbnM6IHN0eWxlIGNoYW5nZXMKKwkqIGRhdGEveWFjYy5jLCBkYXRhL2dsci5jOiBQcmVmZXIgVGl0bGUgY2FzZSBmb3IgKENQUCkgbWFjcm8gYXJndW1lbnRzLgogCi0JMjAwMS0wOS0yMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTEwLTIyICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JUmVtb3ZlIGB0cmFuc2xhdGlvbnMnIGFzIGl0IGlzIGFsd2F5cyBzZXQgdG8gdHJ1ZS4KKwl0ZXN0czogbWlub3IgaW1wcm92ZW1lbnRzCisJKiB0ZXN0cy9jKysuYXQ6IFNwYWNlIGNoYW5nZXMuCisJVXNlIEFUX1lZRVJST1JfREVGSU5FLgorCSogdGVzdHMvbG9jYWwuYXQgKEFUX1lZRVJST1JfREVGSU5FKTogSXNzdWUgZXJyb3JzIG9uIHVua25vd24gbGFuZ3VhZ2VzLgogCi0JKiBzcmMvZ3JhbS5oOiBBZGp1c3QuCi0JKiBzcmMvcmVhZGVyLmMgKHBhY2tzeW1ib2xzLCBwYXJzZV90b2tlbl9kZWNsKTogQWRqdXN0Ci0JKiBzcmMvcHJpbnQuYyAocHJpbnRfZ3JhbW1hcik6IEFkanVzdC4KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3Rva2VuX3RyYW5zbGF0aW9ucyk6IEFkanVzdC4KLQkqIHNyYy9sZXguYyAobGV4KTogQWRqdXN0LgotCSogc3JjL2dyYW0uYzogQmUgc3VyZSB0aGUgc2V0IHBvaW50ZXJzIHRvIE5VTEwuCi0JKGR1bW15KTogUmVuYW1lIGFzLi4uCi0JKGdyYW1fZnJlZSk6IHRoaXMuCisyMDEyLTEwLTIyICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JMjAwMS0wOS0yMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJdGVzdHM6IHVzZSAkUEVSTCBpbnN0ZWFkIG9mIHBlcmwKKwkqIHRlc3RzL2F0bG9jYWwuaW4gKFBFUkwpOiBOZXcuCisJU29ydC4KKwkqIHRlc3RzL2NhbGMuYXQsIHRlc3RzL2lucHV0LmF0LCB0ZXN0cy9sb2NhbC5hdCwgdGVzdHMvcmVncmVzc2lvbi5hdCwKKwkqIHRlc3RzL3NrZWxldG9ucy5hdCwgdGVzdHMvc3luY2xpbmVzLmF0LCB0ZXN0cy90b3J0dXJlLmF0OiBoZXJlLgogCi0JKiBjb25maWd1cmUuaW46IEludm9rZSBBTV9MSUJfRE1BTExPQy4KLQkqIHNyYy9zeXN0ZW0uaDogVXNlIGRtYWxsb2MuCi0JKiBzcmMvTFIwLmM6IEJlIHN1cmUgdG8gaGF2ZSBwb2ludGVycyBpbml0aWFsaXplZCB0byBOVUxMLgotCShhbGxvY2F0ZV9pdGVtc2V0cyk6IEFsbG9jYXRlIGtlcm5lbF9pdGVtcyBvbmx5IGlmIG5lZWRlZC4KKzIwMTItMTAtMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkyMDAxLTA5LTIyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwlidWlsZDogbG9vayBmb3IgUGVybCBpbiBjb25maWd1cmUuCisJQmlzb24gdXNlcyAiL3Vzci9iaW4vcGVybCIgb3IgInBlcmwiIGluIHNldmVyYWwgcGxhY2VzLCBhbmQgaXQgZG9lcworCW5vdCBhcHBlYXIgdG8gYmUgYSBwcm9ibGVtLiAgQnV0LCBhdCBsZWFzdCB0byBtYWtlIGl0IHNpbXBsZXIgdG8KKwljaGFuZ2UgUEVSTCBvbiB0aGUgbWFrZSBjb21tYW5kIGxpbmUsIGNoZWNrIGZvciBwZXJsIGluIGNvbmZpZ3VyZS4KIAotCSogY29uZmlndXJlLmluOiBCdW1wIHRvIDEuMjliLgotCSogdGVzdHMvTWFrZWZpbGUuYW0gKERJU1RDTEVBTkZJTEVTKTogQWRkIHBhY2thZ2UubTQuCi0JKiB0ZXN0cy9jYWxjLmF0IChfQVRfREFUQV9DQUxDX1kpOiAjdW5kZWYgbWFsbG9jIHNvIHRoYXQgd2UgZG9uJ3QKLQluZWVkIHhtYWxsb2MuYyBpbiBjYWxjLnkuCi0JRnJvbSBQYXNjYWwgQmFydC4KKwkqIGNvbmZpZ3VyZS5hYyAoUEVSTCk6IE5ldy4KKwkqIGRvYy9Eb3h5ZmlsZS5pbiwgZG9jL01ha2VmaWxlLmFtLCB0ZXN0cy9iaXNvbi5pbjogVXNlIGl0LgogCi0JMjAwMS0wOS0yMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTEwLTIyICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JVmVyc2lvbiAxLjI5YS4KLQkqIE1ha2VmaWxlLm1haW50LCBjb25maWcvY29uZmlnLmd1ZXNzLCBjb25maWcvY29uZmlnLnN1YiwKLQkqIGNvbmZpZy9taXNzaW5nOiBVcGRhdGUgZnJvbSBtYXN0ZXJzLgotCSogdGVzdHMvTWFrZWZpbGUuYW0gKCQoc3JjZGlyKS8kKFRFU1RTVUlURSkpOiBObyBsb25nZXIgZGVwZW5kCi0JdXBvbiBwYWNrYWdlLm00LgotCSogY29uZmlndXJlLmluIChBTExfTElOR1VBUyk6IEFkZCBgdHInLgorCXRlc3RzOiBmaXggc2VkIHBvcnRhYmlsaXR5IGlzc3VlcworCVJlcG9ydGVkIGJ5IERpZGllciBHb2RlZnJveSwKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDEyLTEwL21zZzAwMDA1Lmh0bWw+LgogCi0JMjAwMS0wOS0yMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJKiB0ZXN0cy9jYWxjLmF0IChBVF9DSEVDS19TUEFDRVMpOiBVc2UgUGVybC4KIAotCSogdGVzdHMvTWFrZWZpbGUuYW0gKHBhY2thZ2UubTQpOiBNb3ZlIHRvLi4uCi0JKCQoc3JjZGlyKS8kKFRFU1RTVUlURSkpOiBoZXJlLgorMjAxMi0xMC0yMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCTIwMDEtMDktMjAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCXRlc3RzOiBkaWZmIC11IGlzIG5vdCBwb3J0YWJsZQorCVJlcG9ydGVkIGJ5IERpZGllciBHb2RlZnJveQorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMTItMTAvbXNnMDAwMDYuaHRtbD4uCiAKLQkqIHNyYy9jb21wbGFpbi5jOiBObyBsb25nZXIgdHJ5IHRvIGJlIHN0YW5kYWxvbmU6IHVzZSBzeXN0ZW0uaC4KLQlEb24ndCBhc3N1bWUgX19TVERDX18gaXMgZGVmaW5lZCB0byAxLiBKdXN0IHRlc3QgaWYgaXQgaXMgZGVmaW5lZC4KLQkqIHNyYy9jb21wbGFpbi5oOiBMaWtld2lzZS4KLQkqIHNyYy9yZWR1Y2UuYyAodXNlbGVzc19ub250ZXJtaW5hbHMsIGluYWNjZXNzYWJsZV9zeW1ib2xzKToKLQlSZW1vdmUgdGhlIHVudXNlZCB2YXJpYWJsZSBgbicuCi0JRnJvbSBBbGJlcnQgQ2hpbi1BLVlvdW5nLgorCSogdGVzdHMvZXhpc3RpbmcuYXQgKEFUX0xBTFIxX0RJRkZfQ0hFQ0spOiBTa2lwIGlmIGRpZmYgLXUgZG9lcyBub3QKKwl3b3JrLgogCi0JMjAwMS0wOS0xOCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKzIwMTItMTAtMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkqIGRvYy9iaXNvbi4xOiBVcGRhdGUuCi0JKiBkb2MvYmlzb24udGV4aW5mbyAoQmlzb24gT3B0aW9ucyk6IFVwZGF0ZSAtLWRlZmluZXMgYW5kIC0tZ3JhcGgKLQlkZXNjcmlwdGlvbnMuCi0JKE9wdGlvbiBDcm9zcyBLZXkpOiBVcGRhdGUuCi0JQWRkIC0tZ3JhcGguCisJbWFpbnQ6IHdvcmQgY2hhbmdlcworCSogUkVBRE1FLWhhY2tpbmcgKFR5cGljYWwgZXJyb3JzKTogSW1wcm92ZSB3b3JkaW5nLgogCi0JMjAwMS0wOS0xOCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKzIwMTItMTAtMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQ6IE5ldyB0ZXN0IChjb21tZW50IGluICV1bmlvbikuCisJbGFscjEuY2M6IGZpeCB0ZXN0IHN1aXRlIHBvcnRhYmlsaXR5CisJUmVwb3J0ZWQgYnkgUm9iIFZlcm1hYXMnIEh5ZHJhIGJ1aWxkIGZhcm0gb24geDg2XzY0LWRhcndpbiAxMC4yLjAgd2l0aAorCUcrKyA0LjYuMy4KIAotCTIwMDEtMDktMTggIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisJKiB0ZXN0cy9oZWFkZXJzLmF0IChTZXZlcmFsIHBhcnNlcnMpOiBJbmNsdWRlIEFUX0RBVEFfU09VUkNFX1BST0xPR1VFCisJaW4gdGhlIGZpbGVzIHRvIGNvbXBpbGUuCisJKiBkYXRhL2xvY2F0aW9uLmNjOiBEbyBub3QgaW5jbHVkZSB0d2ljZSBzdHJpbmcgYW5kIGlvc3RyZWFtIChvbmNlCisJYnkgcG9zaXRpb24uaGgsIGFuZCB0aGVuIGJ5IGxvY2F0aW9uLmhoKS4KKwkqIFJFQURNRS1oYWNraW5nIChUeXBpY2FsIGVycm9ycyk6IFNvbWUgaGludHMgZm9yIG90aGVyIG1haW50YWluZXJzLgogCi0JKiBzcmMvcmVhZGVyLmMgKHBhcnNlX3VuaW9uX2RlY2wpOiBEbyBub3Qgb3V0cHV0ICcvJy4gTGV0IGNvcHlfY29tbWVudAotCWRvIHRoYXQuCi0JUmVwb3J0ZWQgYnkgS2VpdGggQnJvd25lLgorMjAxMi0xMC0yMiAgVGhlb3BoaWxlIFJhbnF1ZXQgIDx0aGVvcGhpbGUucmFucXVldEBnbWFpbC5jb20+CiAKLQkyMDAxLTA5LTE4ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCW1haW50OiBmaXggYW4gZXJyb25lb3VzIGluY2x1ZGUKKwlUaGlzIGZpeGVzIHRlc3QgMTMwIChTZXZlcmFsIHBhcnNlcnMpLgogCi0JKiB0ZXN0cy9vdXRwdXQuYXQ6IEFkZCB0ZXN0cyBmb3IgLS1kZWZpbmVzIGFuZCAtLWdyYXBoLgorCSogZGF0YS9sb2NhdGlvbi5jYzogSW5jbHVkZSA8aW9zdHJlYW0+IHJhdGhlciB0aGFuIDxpb3Nmd2Q+IHNpbmNlCisJd2UgcmVhbGx5IG5lZWQgPDwgb24gc3RyaW5ncyBmb3IgaW5zdGFuY2UuCisJKiBORVdTOiBEb2N1bWVudCB0aGlzLgogCi0JMjAwMS0wOS0xOCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKzIwMTItMTAtMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkqIHRlc3RzL291dHB1dC5hdDogUmVtb3ZlcyB0ZXN0cyBvZiAle2hlYWRlcixzcmN9X2V4dGVuc2lvbiBmZWF0dXJlcy4KKwl0ZXN0czogY2hlY2sgdGhhdCBoZWFkZXJzIGFyZSBzZWxmIGNvbnRhaW5lZAorCVJlcG9ydGVkIGJ5IEFsZXhhbmRyZSBEdXJldC1MdXR6LgogCi0JMjAwMS0wOS0xOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJKiB0ZXN0cy9oZWFkZXJzLmF0IChTZXZlcmFsIHBhcnNlcnMpOiBoZXJlLgogCi0JKiB0ZXN0cy9NYWtlZmlsZS5hbSAocGFja2FnZS5tNCk6IE5ldy4KLQkqIHRlc3RzL2NhbGMuYXQgKF9BVF9DSEVDS19DQUxDKTogSnVzdCBydW4gYGNhbGMgaW5wdXQnLgotCShfQVRfQ0hFQ0tfQ0FMQ19FUlJPUik6IExpa2V3aXNlLgotCUZhY3RvciB0aGUgYCwgJyBwYXJ0IG9mIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMuCisyMDEyLTEwLTIyICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JMjAwMS0wOS0xOCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKwlkb2M6IGFkZCBtaXNzaW5nIGRvY3VtZW50YXRpb24gZm9yIC0tcmVwb3J0CisJKiBkb2MvYmlzb24udGV4aSAoQmlzb24gT3B0aW9ucyk6IERvY3VtZW50IC0tcmVwb3J0J3MgInNvbHZlZCIsICJhbGwiLAorCWFuZCAibm9uZSIuCiAKLQkqIHNyYy9nZXRhcmdzLmMgKGxvbmdvcHRzKTogRGVjbGFyZSAtLWRlZmluZXMgYW5kIC0tZ3JhcGggYXMgb3B0aW9ucwotCXdpdGggb3B0aW9uYWwgYXJndW1lbnRzLgotCSogc3JjL2ZpbGVzLmg6IEFkZCBleHRlcm4gZGVjbGFyYXRpb25zLgotCSogc3JjL2ZpbGVzLmMgKHNwZWNfZ3JhcGhfZmlsZSwgc3BlY19kZWZpbmVzX2ZpbGUpOiBOZXcuCi0JKG91dHB1dF9maWxlcyk6IFVwZGF0ZS4KLQlSZW1vdmUgQ1BQLW91dGVkIGNvZGUuCisyMDEyLTEwLTIyICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JMjAwMS0wOS0xOCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKwloZWFkZXJzOiBtb3ZlIENQUCBndWFyZHMgaW50byBZWV8qX0lOQ0xVREVEIHRvIGF2b2lkIGNvbGxpc2lvbnMKKwlTZWUgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAxMi0wOS9tc2cwMDAxNi5odG1sPi4KIAotCVR1cm4gb2ZmICV7c291cmNlLGhlYWRlcn1fZXh0ZW5zaW9uIGZlYXR1cmUuCisJKiBkYXRhL2MubTQgKGI0X2NwcF9ndWFyZCk6IFByZXBlbmQgWVlfIGFuZCBhcHBlbmQgX0lOQ0xVREVELgorCSogdGVzdHMvaGVhZGVycy5hdDogQWRqdXN0LgorCSogTkVXUywgZG9jL2Jpc29uLnRleGk6IERvY3VtZW50LgogCi0JKiBzcmMvZmlsZXMuYyAoY29tcHV0ZV9leHRzX2Zyb21fZ2YpOiBVcGRhdGUuCi0JKGNvbXB1dGVfZXh0c19mcm9tX3NyYyk6IFVwZGF0ZS4KLQkob3V0cHV0X2ZpbGVzKTogQ1BQLW91dCB1c2VsZXNzIGNvZGUuCi0JKiBzcmMvZmlsZXMuaDogUmVtb3ZlIHtoZWFkZXIsc291cmNlfV9leHRlbnNpb24gZXh0ZXJuIGRlY2xhcmF0aW9ucy4KLQkqIHNyYy9yZWFkZXIuYyAocGFyc2VfZHF1b3RlZF9wYXJhbSk6IENQUC1vdXQuCi0JKHBhcnNlX2hlYWRlcl9leHRlbnNpb25fZGVjbCk6IFJlbW92ZS4KLQkocGFyc2Vfc291cmNlX2V4dGVuc2lvbl9kZWNsKTogUmVtb3ZlLgotCShyZWFkX2RlY2xhcmF0aW9ucyk6IFJlbW92ZSBjYXNlcyB0b2tfe2hkcmV4dCxzcmNleHR9LgotCSogc3JjL2xleC5jIChwZXJjZW50X3RhYmxlKTogUmVtb3ZlIHtoZWFkZXIsc291cmNlfV9leHRlbnNpb24gZW50cmllcy4KLQkqIHNyYy9sZXguaCAodG9rZW5fdCk6IFJlbW92ZSB0b2tfaGRyZXh0IGFuZCB0b2tfc3JjZXh0LgorMjAxMi0xMC0yMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCTIwMDEtMDktMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCW1pbm9yIGNoYW5nZXMuCisJKiBORVdTOiBXb3JkIGNoYW5nZXMuCisJKiBkb2MvYmlzb24udGV4aTogU3BlbGwgY2hlY2suCisJRml4IG1pbm9yIGlzc3Vlcy4KKwkqIHRlc3RzL2hlYWRlcnMuYXQ6IENvbW1lbnQgYW5kIGZvcm1hdHRpbmcgY2hhbmdlcy4KIAotCSogdGVzdHMvb3V0cHV0LmF0IChBVF9DSEVDS19CSVNPTl9GTEFHUywgQVRfQ0hFQ0tfQklTT05fUEVSQ0VOVCk6Ci0JKEFUX0NIRUNLX0JJU09OX1BFUkNFTlRfRkxBR1MpOiBNZXJnZSBpbnRvLi4uCi0JKEFUX0NIRUNLX09VVFBVVCk6IHRoaXMuCi0JTWVyZWx5IGNoZWNrIGxzJyBleGl0IHN0YXR1cywgaXRzIG91dHB1dCBpcyB1c2VsZXNzLgorMjAxMi0xMC0yMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCTIwMDEtMDktMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCWdudWxpYjogdXBkYXRlCiAKLQkqIHRlc3RzL2NhbGMuYXQ6IFVzZSBtNF9tYXRjaC4KLQkoX0FUX0RBVEFfQ0FMQ19ZKTogQ2hlY2sgYHl5aW4gIT0gTlVMTCcsIG5vdCBgc3RkaW4gIT0gTlVMTCcuCisyMDEyLTEwLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JMjAwMS0wOS0xMCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4sCi0JCSAgICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwlnbnVsaWI6IHVwZGF0ZQogCi0JKiBzcmMvdmNnLmggKGdyYXBoX3MpOiBjb2xvciwgdGV4dGNvbG9yLCBib3JkZXJjb2xvciBhcmUgbm93Ci0JZW51bSBjb2xvcl9lLgotCSogc3JjL3ByaW50X2dyYXBoLmMgKHByaW50X2dyYXBoKTogSW5pdGFsaXplIGdyYXBoLmxheW91dGFsZ29yaXRobQotCXRvIGBub3JtYWwnLgotCSogc3JjL3JlYWRlci5jIChwYXJzZV90b2tlbl9kZWNsKTogSW5pdGlhbGl6ZSB0b2tlbiB3aXRoIHRva19lb2YuCi0JKiBzcmMvbGV4Lmg6IEFkanVzdCBwcm90b3R5cGUuCi0JKHRva2VuX3QpOiBBZGQgYHRva191bmRlZicuCi0JKiBzcmMvbGV4LmMgKHN0cnVjdCBwZXJjZW50X3RhYmxlX3N0cnVjdCk6IFJldHZhbCBpcyBub3cgYSB0b2tlbl90LgotCShwYXJzZV9wZXJjZW50X3Rva2VuKTogTm93IHJldHVybnMgdG9rZW5fdC4KLQlBZGQgZGVmYXVsdCBzdGF0ZW1lbnQgaW4gc3dpdGNoLgotCShsZXgpOiBTZXBhcmF0ZSBgYycgYXMgYW4gaW5wdXQgdmFyaWFibGUsIGZyb20gdGhlIHRva2VuX3QgcmVzdWx0Ci0JcGFydC4KLQkodW5sZXhlZCk6IElzIGEgdG9rZW5fdC4KKzIwMTItMTAtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkyMDAxLTA5LTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwl4bWw6IHNsaWdodCBpbXByb3ZlbWVudCBvZiB0aGUgRE9UIG91dHB1dAorCVRoaXMgd2FzIGNvbXBsZXRlbHkgZm9yZ290dGVuLi4uICBOb3RoaW5nIGFib3V0IFhNTCBpcyBhY3R1YWxseQorCWRvY3VtZW50ZWQuLi4KIAotCSogY29uZmlndXJlLmluOiBCdW1wIHRvIDEuMjlhLgorCSogZGF0YS94c2x0L3htbDJkb3QueHNsOiBVc2UgYm94ZXMsIGFuZCBDb3VyaWVyIGZvbnQuCiAKLQkyMDAxLTA5LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMTAtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQlWZXJzaW9uIDEuMjkuCisJbWFpbnQ6IGNoZWNrIGZvciBkb3QgYmVmb3JlIHVzaW5nIGl0CisJKiBjb25maWd1cmUuYWM6IGhlcmUuCisJKiBkb2MvTWFrZWZpbGUuYW06IFVzZSAkKERPVCkuCisJU2hpcCB0aGUgZ2VuZXJhdGVkIGZpbGVzLCB0byBzcGFyZSB0aGUgdXNlciB0aGUgbmVlZCBmb3IgR3JhcGh2aXouCiAKLQkyMDAxLTA4LTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMTAtMTggIFRoZW9waGlsZSBSYW5xdWV0ICA8dGhlb3BoaWxlLnJhbnF1ZXRAZ21haWwuY29tPgogCi0JKiB0ZXN0cy9hdGdlbmVyYWwubTQsIHRlc3RzL2F0Y29uZmlnLmluLCB0ZXN0cy9zdWl0ZS5hdDogUmVtb3ZlLgotCSogbTQvYXRjb25maWcubTQ6IFJlbW92ZS4KLQkqIHRlc3RzL3Rlc3RzdWl0ZS5hdCwgdGVzdHMvYXRsb2NhbC5pbiwgdGVzdHMvb3V0cHV0LmF0LAotCSogdGVzdHMvYmlzb246IE5ldy4KLQkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQsIHRlc3RzL2NhbGMuYXQ6IFVzZSBtNF9kZWZpbmUsIEFUX0JBTk5FUiwKLQltNF9pZiwgbTRfcGF0c3Vic3QsIGFuZCBtNF9yZWdleHAuCi0JKiB0ZXN0cy9jYWxjLmF0IChfQVRfQ0hFQ0tfQ0FMQywgX0FUX0NIRUNLX0NBTENfRVJST1IpOiBVc2UgYW4KLQlgaW5wdXQnIGZpbGUgaW5zdGVhZCBvZiBlY2hvLgorCWdyYXBoczogZG9jdW1lbnRhdGlvbgorCU5vdGUgdGhhdCAnbWFrZSB3ZWItbWFudWFsJyBmYWlscy4KIAotCTIwMDEtMDgtMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCSogTkVXUzogRG9jdW1lbnQgdGhlc2UgY2hhbmdlcy4KKwkqIGRvYy9NYWtlZmlsZS5hbTogQWRqdXN0IHRvIGdlbmVyYXRlIGV4YW1wbGUgZmlsZXMuCisJKiBkb2MvYmlzb24udGV4aTogQWRkIGEgR3JhcGh2aXogc2VjdGlvbiBhZnRlciAiVW5kZXJzdGFuZGluZzo6IiwgdGhlIHNlY3Rpb24KKwlkZXNjcmliaW5nIHRoZSAub3V0cHV0IGZpbGUsIGJlY2F1c2UgdGhlc2UgYXJlIHNpbWlsYXIuCisJKiBkb2MvZmlncy9leGFtcGxlLXJlZHVjZS5kb3QsIGRvYy9maWdzL2V4YW1wbGUtcmVkdWNlLnR4dCwKKwlkb2MvZmlncy9leGFtcGxlLXNoaWZ0LmRvdCwgZG9jL2ZpZ3MvZXhhbXBsZS1zaGlmdC50eHQ6IE5ldywgbWluaW1hbAorCWV4YW1wbGVzIHRvIGlsbHVzdHJhdGUgdGhlIGRvY3VtZW50YXRpb24uCiAKLQlCdW1wIHRvIDEuMjhlLgorMjAxMi0xMC0xOCAgVGhlb3BoaWxlIFJhbnF1ZXQgIDx0aGVvcGhpbGUucmFucXVldEBnbWFpbC5jb20+CiAKLQkyMDAxLTA4LTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwlncmFwaHM6IGFkZCB0ZXN0cywgaW50cm9kdWNpbmcgLWsgZ3JhcGgKKwkqIHRlc3RzL291dHB1dC5hdCAoQVRfVEVTVCk6IE5ldy4KKwlVc2UgaXQgdG8gYWRkIDYgLS1ncmFwaCB0ZXN0cy4KIAotCVZlcnNpb24gMS4yOGQuCisyMDEyLTEwLTE4ICBUaGVvcGhpbGUgUmFucXVldCAgPHRoZW9waGlsZS5yYW5xdWV0QGdtYWlsLmNvbT4KIAotCTIwMDEtMDgtMjkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCWdyYXBoczogY2hhbmdlIHRoZSBvdXRwdXQgZm9ybWF0IG9mIHRoZSBydWxlcworCVVzZSBzb21ldGhpbmcgc2ltaWxhciB0byB0aGUgcmVwb3J0IGZpbGUuCiAKLQkqIHNyYy9iaXNvbi5zaW1wbGUgKHl5cGFyc2UpOiBEb24ndCB0YWtlIHRoZSBhZGRyZXNzIG9mIGFuCi0JaXRlbSBiZWZvcmUgdGhlIHN0YXJ0IG9mIGFuIGFycmF5LCBhcyB0aGF0IGRvZXNuJ3QgY29uZm9ybSB0bwotCXRoZSBDIFN0YW5kYXJkLgorCSogc3JjL3ByaW50X2dyYXBoLmMgKHByaW50X2xocyk6IE5ldywgb2JzdGFjayBlcXVpdmFsZW50IG9mIHJ1bGVfbGhzX3ByaW50LgorCShwcmludF9jb3JlKTogVXNlIGhlcmUuCiAKLQkyMDAxLTA4LTI5ICBSb2JlcnQgQW5pc2tvICA8YW5pc2tvX3JAZXBpdGEuZnI+CisyMDEyLTEwLTE4ICBUaGVvcGhpbGUgUmFucXVldCAgPHRoZW9waGlsZS5yYW5xdWV0QGdtYWlsLmNvbT4KIAotCSogZG9jL2Jpc29uLnRleGluZm8gKExvY2F0aW9uIFRyYWNraW5nIENhbGMpOiBOZXcgbm9kZS4KKwlncmFwaHM6IHN0eWxlIGNoYW5nZXMKKwkqIHNyYy9ncmFwaHZpei5jIChzdGFydF9ncmFwaCk6IFVzZSBjb3VyaWVyIGZvbnQuCisJKGNvbmNsdWRlX3JlZCk6IFVzZSBjb21tYXMgdG8gc2VwYXJhdGUgYXR0cmlidXRlcy4gU2hvdyB0aGUgYWNjZXB0YXRpb24KKwlhcyBhIHNwZWNpYWwgcmVkdWN0aW9uLCB3aXRoIGEgYmx1ZSBjb2xvciBhbmQgYW4gIkFjYyIgbGFiZWwuIFNob3cgdGhlCisJbG9va2FoZWFkIHRva2VucyBiZXR3ZWVuIHNxdWFyZSBicmFja2V0cy4KKwkob3V0cHV0X3JlZCk6IE5vIGxvbmdlciBsYWJlbCBkZWZhdWx0IHJlZHVjdGlvbnMuCisJKiBzcmMvcHJpbnRfZ3JhcGguYyAocHJpbnRfY29yZSk6IFJlZmFjdG9yIHNwYWNpbmcsIGFuZCBwcmludCBhbgorCWFkZGl0aW9uYWwgc3BhY2UgYmV0d2VlbiBhIHJ1bGUncyByaHMgYW5kIGl0cyBsb29rYWhlYWQgdG9rZW5zLiBBbHNvLAorCWNhcGl0YWxpemUgIlN0YXRlIi4KKwkocHJpbnRfYWN0aW9ucyk6IFN0eWxlLCBtb3ZlIGEgZGVjbGFyYXRpb24uCiAKLQkyMDAxLTA4LTI5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKzIwMTItMTAtMTggIFRoZW9waGlsZSBSYW5xdWV0ICA8dGhlb3BoaWxlLnJhbnF1ZXRAZ21haWwuY29tPgogCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dCk6IERvIG5vdCBkZWZpbmUgY29uc3QsIGFzIHRoaXMgbm93Ci0JY2F1c2VzIG1vcmUgcHJvYmxlbXMgdGhhbiBpdCBjdXJlcy4KKwlncmFwaHM6IGFkZHJlc3MgYW4gaXNzdWUgd2l0aCBSL1IgY29uZmxpY3RzCisJQWxsIGRpc2FibGVkIHJlZHVjdGlvbnMgc2hvdWxkIG5vdyBiZSBzaG93biBhcyBzdWNoLgogCi0JMjAwMS0wOC0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJKiBzcmMvZ3JhcGh2aXouYyAob3V0cHV0X3JlZCk6IEhlcmUuCisJKGNvbmNsdWRlX3JlZCk6IE5ldy4KIAotCSogZG9jL2Jpc29uLnRleGluZm86IE1vZGVybml6ZSBgQG5vZGUnIGFuZCBgQHRvcCcgdXNlOiBqdXN0IG5hbWUKLQl0aGUgbm9kZXMuCi0JQmUgc3VyZSB0byB0YWcgdGhlIGBkZXRhaWxtZW51Jy4KKzIwMTItMTAtMTYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkyMDAxLTA4LTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwlqYXZhOiBmaXhlcworCSogZGF0YS9qYXZhLm00OiBSZW1vdmUgc3RyYXkgTTQgY2hhcmFjdGVycy4KIAotCSogTWFrZWZpbGUubWFpbnQgKGRvLXBvLXVwZGF0ZSk6IFdnZXQgcmVmdXNlcyB0byBvdmVyd3JpdGUgZmlsZXM6Ci0JZG93bmxvYWQgaW4gYSB0bXAgZGlyLgorMjAxMi0xMC0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCTIwMDEtMDgtMjggIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisJamF2YTogdXNlIGFwaS5sb2NhdGlvbi50eXBlIGFuZCBhcGkucG9zaXRpb24udHlwZQorCSogZGF0YS9qYXZhLm00OiBoZXJlLgorCSogTkVXUywgZG9jL2Jpc29uLnRleGksIHRlc3RzL2phdmEuYXQ6IEFkanVzdC4KIAotCSogY29uZmlnL2RlcGNvbXA6IE5ldyBmaWxlLgorMjAxMi0xMC0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCTIwMDEtMDgtMjggIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisJdGVzdHM6IGNoZWNrICVuby1saW5lcworCSogdGVzdHMvc3luY2xpbmVzLmF0OiBoZXJlLgogCi0JKiBkb2MvYmlzb24uMSAobWFuZG9jKTogQWRqdXN0LgotCUZyb20gSnVhbiBNYW51ZWwgR3VlcnJlcm8uCisyMDEyLTEwLTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JMjAwMS0wOC0yOCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKwl0ZXN0czogbWlub3Igc2ltcGxpZmljYXRpb24KKwkqIHRlc3RzL2hlYWRlcnMuYXQgKFNldmVyYWwgcGFyc2Vycyk6IFVzZSAqLnkgZXZlbiBmb3IgQysrLgogCi0JKiBzcmMvcHJpbnRfZ3JhcGguYyAocHJpbnRfc3RhdGUpOiBGaXguCisyMDEyLTEwLTExICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JMjAwMS0wOC0yNyAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKwlncmFwaHM6IHN0eWxpc3RpYyBjaGFuZ2VzLgorCSogc3JjL2dyYXBodml6LmMgKG91dHB1dF9yZWQpOiBDb21tZW50IGFuZCBmb3JtYXR0aW5nIGNoYW5nZXMuCiAKLQkqIHNyYy92Y2cuaCAoY2xhc3NuYW1lX3MsIGluZm9uYW1lX3MsIG5vZGVfcyk6IENvbnN0aWZ5IHRoZQotCWNoYXIgKiBtZW1iZXJzLgotCUVjaG8gbW9kaWZpY2F0aW9ucyB0byB0aGUgZnVuY3Rpb25zIHByb3RvdHlwZXMuCi0JKiBzcmMvdmNnLmMgKGFkZF9jbGFzc25hbWUsIGFkZF9pbmZvbmFtZSk6IEFkanVzdCBhcmd1bWVudHMuCisyMDEyLTEwLTExICBUaGVvcGhpbGUgUmFucXVldCAgPHJhbnF1ZXRAbHJkZS5lcGl0YS5mcj4KIAotCTIwMDEtMDgtMjcgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisJZ3JhcGhzOiBtaW5vciBzdHlsZSBjaGFuZ2VzCisJKiBzcmMvZ3JhcGh2aXouYyAob3V0cHV0X3JlZCk6IEZpeCBDOTAgaXNzdWVzLgorCVJlZHVjZSB2YXJpYWJsZSBzY29wZXMuCiAKLQkqIHNyYy92Y2cuYzogSW5jbHVkZSBgeGFsbG9jLmgnLgotCShhZGRfY29sb3JlbnRyeSk6IE5ldy4KLQkoYWRkX2NsYXNzbmFtZSk6IE5ldy4KLQkoYWRkX2luZm9uYW1lKTogTmV3LgotCSogc3JjL3ZjZy5oOiBBZGQgbmV3IHByb3RvdHlwZXMuCisyMDEyLTEwLTExICBUaGVvcGhpbGUgUmFucXVldCAgPHJhbnF1ZXRAbHJkZS5lcGl0YS5mcj4KIAotCTIwMDEtMDgtMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCWdyYXBoczogc2hvdyByZWR1Y3Rpb25zCisJKiBzcmMvZ3JhcGh2aXouYyAob3V0cHV0X3JlZCk6IE5ldywgc2hvdyByZWR1Y3Rpb25zIG9uIHRoZSBncmFwaC4KKwkobm9fcmVkdWNlX2JpdHNldF9pbml0KTogTmV3LCBpbml0aWFsaXplIGEgYml0c2V0LgorCShwcmludF90b2tlbik6IE5ldywgcHJpbnQgYSBsb29rYWhlYWQgdG9rZW4uCisJKGVzY2FwZSk6IE5ldywgcHJpbnQgImZvbyIgYXMgXCJmb29cIiBiZWNhdXNlIERvdCBkb2Vzbid0IGxpa2UgcXVvdGVzIHdpdGhpbgorCWEgbGFiZWwuCiAKLQkqIE1ha2VmaWxlLm1haW50OiBTeW5jLiBhZ2FpbiB3aXRoIENWUyBBdXRvY29uZi4KKwkqIHNyYy9ncmFwaHZpei5oIDogQWRqdXN0LgorCSogc3JjL3ByaW50X2dyYXBoLmMgKHByaW50X2FjdGlvbnMpOiBDYWxsIG91dHB1dF9yZWQgaGVyZS4KIAotCTIwMDEtMDgtMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0xMC0xMSAgVGhlb3BoaWxlIFJhbnF1ZXQgIDx0aGVvcGhpbGUucmFucXVldEBnbWFpbC5jb20+CiAKLQkqIE1ha2VmaWxlLm1haW50OiBGb3JtYXR0aW5nIGNoYW5nZXMuCi0JKHBvLXVwZGF0ZSwgY3ZzLXVwZGF0ZSwgdXBkYXRlKTogTmV3IHRhcmdldHMuCi0JKEFNVEFSKTogUmVtb3ZlLgorCWdyYXBoczogc3R5bGU6IHByZWZpeCBzdGF0ZSBudW1iZXIgd2l0aCAic3RhdGUiCisJKiBzcmMvcHJpbnRfZ3JhcGguYyAocHJpbnRfY29yZSk6IEhlcmUuCiAKLQkyMDAxLTA4LTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMTAtMTEgIFRoZW9waGlsZSBSYW5xdWV0ICA8cmFucXVldEBscmRlLmVwaXRhLmZyPgogCi0JKiBNYWtlZmlsZS5hbSAoQVVUT01BS0VfT1BUSU9OUyk6IDEuNS4KLQkqIE1ha2VmaWxlLm1haW50OiBTeW5jLiB3aXRoIENWUyBBdXRvY29uZi4KKwlncmFwaHM6IHN0eWxlOiB1c2UgbGVmdCBqdXN0aWZpY2F0aW9uIGZvciBzdGF0ZXMKKwlUaGUgbGFiZWwgdGV4dCBvZiBub2RlcyBpcyBjZW50ZXJlZCAiYnkgZGVmYXVsdCIgKGJ5IHRoZSB1c2Ugb2YgJ1xuJyBhcworCWEgbGluZSBmZWVkKS4gVGhpcyBnaXZlcyBiYWQgcmVhZGFiaWxpdHkgdG8gdGhlIGdyYW1tYXIgcnVsZXMgc2hvd24gaW4KKwlzdGF0ZSBub2RlcywgYSBsZWZ0IGp1c3RpZmljYXRpb24gaXMgbXVjaCBuaWNlci4gVGhpcyBpcyBkb25lIGJ5IHVzaW5nICdcbCcKKwlhcyB0aGUgbGluZSBmZWVkLgogCi0JMjAwMS0wOC0yNyAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKwlJbiBvcmRlciB0byBhbGxvdyBcbCBpbiB0aGUgRE9UIGZpbGUsIGNoYW5nZXMgdG8gdGhlIHF1b3Rpbmcgc3lzdGVtIHNlZW0KKwluZWNlc3NhcnkuCiAKLQkqIHNyYy92Y2cuaCAoc3RydWN0IGluZm9uYW1lX3MpOiBOZXcuCi0JKHN0cnVjdCBjb2xvcmVudHJ5X3MpOiBOZXcuCi0JKGdyYXBoX3MpOiBOZXcgZmllbGRzIHt2ZXJ0aWNhbCxob3Jpem9udGFsfV9vcmRlciBpbiBzdHJ1Y3R1cmUuCi0JQWRkIGBpbmZvbmFtZScgZmllbGQuCi0JQWRkIGBjb2xvcmVudHJ5JyBmaWVsZDsKLQkqIHNyYy92Y2dfZGVmYXVsdHMuaCAoR19WRVJUSUNBTF9PUkRFUik6IE5ldy4KLQkoR19IT1JJWk9OVEFMX09SREVSKTogTmV3LgotCShHX0lORk9OQU1FKTogTmV3LgotCShHX0NPTE9SRU5UUlkpOiBOZXcuCi0JKiBzcmMvdmNnLmMgKG91dHB1dF9ncmFwaCk6IEFkZCBvdXRwdXQgb2Yge3ZlcnRpY2FsLGhvcml6b250YWx9X29yZGVyLgotCUFkZCBvdXRwdXQgb2YgYGluZm9uYW1lJy4KLQlBZGQgb3V0cHV0IG9mIGBjb2xvcmVudHJ5Jy4KKwkqIHNyYy9wcmludF9ncmFwaC5jIChwcmludF9jb3JlKTogRXNjYXBlIHRva2VucyBoZXJlLCBpbnN0ZWFkIG9mLi4uCisJKiBzcmMvZ3JhcGh2aXouYyAob3V0cHV0X25vZGUpOiBIZXJlLi4uCisJKGVzY2FwZSk6IFVzaW5nIHRoaXMsIG5ldy4KIAotCTIwMDEtMDgtMjcgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisyMDEyLTEwLTExICBUaGVvcGhpbGUgUmFucXVldCAgPHRoZW9waGlsZS5yYW5xdWV0QGdtYWlsLmNvbT4KIAotCSogc3JjL3JlYWRlci5jIChwYXJzZV9kcXVvdGVkX3BhcmFtKTogUmVuYW1lIHZhcmlhYmxlIGBpbmRleCcgdG8gYGknLgotCVRoaXMgb25lIHNoYWRvd2VkIGEgZ2xvYmFsIHBhcmFtZXRlci4KKwlncmFwaHM6IHN0eWxlOiBwcmVmaXggcnVsZXMgYW5kIGNoYW5nZSBzaGFwZXMKKwkqIHNyYy9ncmFwaHZpei5jIChzdGFydF9ncmFwaCk6IFVzZSBib3ggcmF0aGVyIHRoYW4gZWxsaXBzaXMuCisJKiBzcmMvcHJpbnRfZ3JhcGguYyAocHJpbnRfY29yZSk6IFByZWZpeCBydWxlcyB3aXRoIHRoZWlyIG51bWJlci4KIAotCTIwMDEtMDgtMjQgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisyMDEyLTEwLTExICBUaGVvcGhpbGUgUmFucXVldCAgPHRoZW9waGlsZS5yYW5xdWV0QGdtYWlsLmNvbT4KIAotCSogc3JjL3ByaW50X2dyYXBoLmMgKG5vZGVfb3V0cHV0X3NpemUpOiBEZWNsYXJlZCBQT1NJWCBgc2l6ZV90JyB0eXBlLAotCWluc3RlYWQgb2YgYHVuc2lnbmVkJy4KLQkocHJpbnRfc3RhdGUpOiBEbyBub3QgY2FsbCBvYnN0YWNrX29iamVjdF9zaXplICgpIGluIG9ic3RhY2tfZ3JvdyAoKQotCXRvIGF2b2lkIG1hY3JvIHZhcmlhYmxlcyBzaGFkb3dpbmcuCisJb2JzdGFjazogaW1wb3J0IG9ic3RhY2tfZmluaXNoMCBmcm9tIG1hc3RlcgorCSogc3JjL3N5c3RlbS5oIChvYnN0YWNrX2ZpbmlzaDApOiBOZXcuCiAKLQkyMDAxLTA4LTIzICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorMjAxMi0xMC0wOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL2xleC5jIChwZXJjZW50X3RhYmxlKTogVHlwbzogcy9uYWVtL25hbWUvLgotCUFkZCBncmFwaCBvcHRpb24uCi0JTm9ybWFsaXplIG5ldyBvcHRpb25zIGRlY2xhcmF0aW9ucy4KKwljKys6IGFwaS5sb2NhdGlvbi50eXBlCisJVGhpcyBmZWF0dXJlIHdhcyBpbnRyb2R1Y2VkIGluIDk1YTJkZTU2OTU2NzBhZTBkZjk4Y2IzYzQyMTQxY2FkNTQ5ZjAyMDQKKwkod2hpY2ggaXMgcGFydCBvZiAyLjUpLCBidXQgbm90IGRvY3VtZW50ZWQuICBHaXZlIGl0IGEgcHJvcGVyIG5hbWUsIGFuZAorCW1ha2UgaXQgcHVibGljLgogCi0JMjAwMS0wOC0yMCAgUGFzY2FsIEJhcnQgIDxwYXNjYWwuYmFydEBlcGl0YS5mcj4KKwkqIGRhdGEvYysrLm00LCBkYXRhL2xhbHIxLmNjLCBkYXRhL2dsci5jYywgZGF0YS9qYXZhLm00OiBVc2UKKwlhcGkubG9jYXRpb24udHlwZSBpbnN0ZWFkIG9mIGxvY2F0aW9uX3R5cGUuCisJKiBzcmMvbXVzY2xlLXRhYi5jIChtdXNjbGVfcGVyY2VudF92YXJpYWJsZV91cGRhdGUpOiBNYXAgdGhlIGxhdHRlciB0bworCXRoZSBmb3JtZXIuCisJKiB0ZXN0cy9sb2NhbC5hdDogQWRqdXN0LgorCSogdGVzdHMvY2FsYy5hdDogVXNlIGFwaS5sb2NhdGlvbi50eXBlLgorCUxlYXZlIHRlc3RzL2phdmEuYXQgd2l0aCBsb2NhdGlvbl90eXBlLCBhdCBsZWFzdCBmb3IgdGhlIHRpbWUgYmVpbmcsCisJdG8gY292ZXIgYm90aCBuYW1lcy4KKwkqIGRvYy9iaXNvbi50ZXhpOiBEb2N1bWVudCBhcGkubG9jYXRpb24udHlwZS4KKwkoVXNlciBEZWZpbmVkIExvY2F0aW9uIFR5cGUpOiBOZXcuCisJKiBORVdTOiBVcGRhdGUuCiAKLQkqIHRlc3RzL3N1aXRlLmF0OiBFeGVyY2lzZSAlaGVhZGVyX2V4dGVuc2lvbiBhbmQgJXNvdXJjZV9leHRlbnNpb24uCisyMDEyLTEwLTA5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JMjAwMS0wOC0xNiAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKwltdXNjbGVzOiBhIGZ1bmN0aW9uIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CisJQmFzZWQgb24gY29tbWl0IDE3MWFkOTlkNjQyMTkzNWEyNzg2NTZiZTZkYzcxNjE1OTE4MzVkMDAgZnJvbSBtYXN0ZXIuCiAKLQkqIHNyYy9yZWFkZXIuYyAocGFyc2VfZHF1b3RlZF9wYXJhbSk6IE5ldy4KLQkocGFyc2VfaGVhZGVyX2V4dGVuc2lvbl9kZWNsKTogVXNlIGl0LgotCShwYXJzZV9zb3VyY2VfZXh0ZW5zaW9uX2RlY2wpOiBMaWtld2lzZS4KKwkqIHNyYy9tdXNjbGUtdGFiLmMgKG11c2NsZV9wZXJjZW50X3ZhcmlhYmxlX3VwZGF0ZSk6IE5ldy4KKwkobXVzY2xlX3BlcmNlbnRfZGVmaW5lX2luc2VydCk6IFVzZSBpdC4KKwlEZWZpbmUgdGhlIHZhcmlhYmxlcyB3aXRoIHRoZWlyIGluaXRpYWwgdmFsdWUuCiAKLQkyMDAxLTA4LTE2ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorMjAxMi0xMC0wOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL3ZjZy5jOiBSZW1vdmUgaW5jbHVkZXMgb2YgYGNvbXBsYWluLmgnIGFuZCBgeGFsbG9jLmgnLgotCShnZXRfeHh4eF9zdHIpOiBVc2UgYXNzZXJ0ICgpIGluc3RlYWQgb2YgY29tcGxhaW4gKCkuCi0JUmVtb3ZlIHJldHVybiBpbnZva2F0aW9ucyBpbiBkZWZhdWx0IGNhc2VzLgotCShnZXRfZGVjaXNpb25fc3RyKTogTW9kaWZ5IGRlZmF1bHQgYmVoYXZpb3VyLiBSZW1vdmUgc2Vjb25kIGFyZ3VtZW50LgotCUVjaG8gbW9kaWZpY2F0aW9ucyBvbiBjYWxscy4KLQkob3V0cHV0X2dyYXBoKTogRml4LgorCW1haW50OiBtb3JlIG1hY3JvcworCSogc3JjL291dHB1dC5jIChBUlJBWV9DQVJESU5BTElUWSk6IE1vdmUgdG8uLi4KKwkqIHNyYy9zeXN0ZW0uaDogaGVyZS4KKwkoU1RSRVEsIFNUUk5FUSk6IG5ldy4KIAotCTIwMDEtMDgtMTYgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisyMDEyLTEwLTA4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBzcmMvZ2V0YXJncy5jICh1c2FnZSk6IFVwZGF0ZSB3aXRoIGBgLWcsIC0tZ3JhcGgnJy4KKwlORVdTOiB3YXJuaW5ncyB3aXRoIGNsYW5nCisJKiBORVdTOiBoZXJlLgogCi0JMjAwMS0wOC0xNiAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKzIwMTItMTAtMDggIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkqIGRvYy9iaXNvbi50ZXhpbmZvIChCaXNvbiBPcHRpb25zKTogQWRkIGl0ZW1zIGAtZycsIGAtLWdyYXBoJy4KLQkoT3B0aW9uIENyb3NzIEtleSk6IExpa2V3aXNlLgotCSogZG9jL2Jpc29uLjE6IFVwZGF0ZS4KKwl3YXJuaW5nczogYXZvaWQgd2FybmluZ3MgZnJvbSBjbGFuZworCUZpeCB0aGUgZm9sbG93aW5nIHdhcm5pbmcKIAotMjAwMS0wOS0yNSAgUGFzY2FsIEJhcnQgIDxwYXNjYWwuYmFydEBlcGl0YS5mcj4KKwkgIHBhcnNlLWdyYW0uYzoyMDc4OjE0OiBlcnJvcjogZXF1YWxpdHkgY29tcGFyaXNvbiB3aXRoIGV4dHJhbmVvdXMgcGFyZW50aGVzZXMKKwkgICAgICAgICAgICAgICAgICAgICAgICBbLVdlcnJvciwtV3BhcmVudGhlc2VzLWVxdWFsaXR5XQorCSAgICBpZiAoKCh5eW4pID09ICgtOTEpKSkKKwkgICAgICAgICB+fn5+fn5efn5+fn5+fgorCSAgcGFyc2UtZ3JhbS5jOjIwNzg6MTQ6IG5vdGU6IHJlbW92ZSBleHRyYW5lb3VzIHBhcmVudGhlc2VzIGFyb3VuZCB0aGUKKwkgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJpc29uIHRvIHNpbGVuY2UgdGhpcyB3YXJuaW5nCisJICAgIGlmICgoKHl5bikgPT0gKC05MSkpKQorCSAgICAgICAgfiAgICAgIF4gICAgICAgfgorCSAgcGFyc2UtZ3JhbS5jOjIwNzg6MTQ6IG5vdGU6IHVzZSAnPScgdG8gdHVybiB0aGlzIGVxdWFsaXR5IGNvbXBhcmlzb24gaW50bworCSAgICAgICAgICAgICAgICAgICAgICAgIGFuIGFzc2lnbm1lbnQKKwkgICAgaWYgKCgoeXluKSA9PSAoLTkxKSkpCisJICAgICAgICAgICAgICAgXn4KKwkgICAgICAgICAgICAgICA9CisJICAxIGVycm9yIGdlbmVyYXRlZC4KIAotCSogc3JjL291dHB1dC5jIChvdXRwdXRfbWFzdGVyX3BhcnNlcik6IERvbid0IGZpbmlzaCBhY3Rpb25fb2JzdGFjay4KLQkob3V0cHV0X3BhcnNlcik6IERvbid0IGNhcmUgYWJvdXQgdGhlIG11c2NsZSBhY3Rpb24sIGhlcmUuCi0JKHByZXBhcmUpOiBDb3B5IHRoZSBhY3Rpb25fb2JzdGFjayBpbiB0aGUgYWN0aW9uIG11c2NsZS4KLQkob3V0cHV0KTogRnJlZSBhY3Rpb25fb2JzdGFjay4KKwlhbmQgdGhlIGZvbGxvd2luZyBvbmU6CiAKLTIwMDEtMDktMjMgIFBhc2NhbCBCYXJ0ICA8cGFzY2FsLmJhcnRAZXBpdGEuZnI+Ci0KLQkqIHNyYy9yZWFkZXIuYyAocGFyc2VfdW5pb25fZGVjbCk6IEFkZCBuZXcgb2JzdGFjayB1bmlvbl9vYnN0YWNrLiAgV2hpY2gKLQl3aWxsIGNvbnRhaW4gYCV1bmlvbicgZGVjbGFyYXRpb24uCi0JKHBhcnNlX3VuaW9uX2RlY2wpOiBEZWxldGUgI2xpbmUgZGlyZWN0aXZlIG91dHB1dC4KLQkocGFyc2VfdW5pb25fZGVjbCk6IFN1YnN0aXR1dGUgL2F0dHJzX29ic3RhY2svdW5pb25fb2JzdGFjayBmb3IgYWxsCi0JaW5mb3JtYXRpb25zIGFib3V0ICV1bmlvbi4KLQkocGFyc2VfdW5pb25fZGVjbCk6IENvcHkgdGhlIHVuaW9uX29ic3RhY2sgaW4gdGhlIG11c2NsZSBzdHlwZS4KLQkqIHNyYy9iaXNvbi5zaW1wbGU6IEFkZCBuZXcgI2xpbmUgZGlyZWN0aXZlLgotCUFkZCB0eXBkZWYgJSVzdHlwZSBZWVNUWVBFLgotCi0yMDAxLTA5LTIzICBQYXNjYWwgQmFydCAgPHBhc2NhbC5iYXJ0QGVwaXRhLmZyPgotCi0JKiBzcmMvYmlzb24uc2ltcGxlOiBBZGQgbmV3IGAjbGluZScgZGlyZWN0aXZlLgotCi0yMDAxLTA5LTIyICBQYXNjYWwgQmFydCAgPHBhc2NhbC5iYXJ0QGVwaXRhLmZyPgotCi0JKiBzcmMvYmlzb24uc2ltcGxlOiBOZXcgYCNsaW5lJyBkaXJlY3RpdmUuCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9wYXJzZXIpOiBTdXBwb3J0IG5ldyBkeW5hbWljIG11c2NsZSBpbnB1dF9saW5lLgotCi0yMDAxLTA5LTIyICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgotCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9tYXN0ZXJfcGFyc2VyKTogTmV3LgotCShvdXRwdXRfcGFyc2VyKTogQmUgbW9yZSByZS1lbnRyYW50LgotCi0yMDAxLTA5LTIxICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgotCi0JKiBzcmMvcmVhZGVyLmMgKGNvcHlfZGVmaW5pdGlvbiwgcGFyc2VfdW5pb25fZGVjbCk6IFVwZGF0ZSBhbmQgdXNlCi0JYGxpbmVmJyBtdXNjbGUuCi0JKGNvcHlfYWN0aW9uKTogTGlrZXdpc2UuCi0JVXNlIG9ic3RhY2tfMWdyb3cgKCkuCi0JKiBzcmMvbXVzY2xlX3RhYi5jIChtdXNjbGVfaW5pdCk6IEFkZCBtdXNjbGUgYGxpbmVmJy4KLQotMjAwMS0wOS0yMSAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KLQotCSogc3JjL29wdGlvbnMuYyAob3B0aW9uX3RhYmxlKTogQWRqdXN0LgotCSogc3JjL2xleC5jIChwYXJzZV9wZXJjZW50X3Rva2VuKTogRml4LgotCi0yMDAxLTA5LTIwICBQYXNjYWwgQmFydCAgPHBhc2NhbC5iYXJ0QGVwaXRhLmZyPgotCi0JKiBzcmMvb3B0aW9ucy5jIChzeW10YWIuaCk6IEluY2x1ZGUgaXQsIG5lZWQgYnkgbGV4LmguCi0KLTIwMDEtMDktMjAgIFBhc2NhbCBCYXJ0ICA8cGFzY2FsLmJhcnRAZXBpdGEuZnI+Ci0KLQkqIHNyYy9sZXguYyAocGFyc2VfcGVyY2VudF90b2tlbik6IENoYW5nZSB0eXBlIG9mIHZhcmlhYmxlIGB0eCcsIHdoaWNoCi0JaXMgbm93IGFuIG9wdGlvbl90YWJsZV9zdHJ1Y3QqLgotCShvcHRpb25fc3RyY21wKTogTmV3IGZ1bmN0aW9uIG9wdGlvbl9zdHJjbXAuCi0JKHBhcnNlX3BlcmNlbnRfdG9rZW4pOiBDYWxsIG9wdGlvbl9zdHJjbXAuCi0JKiBzcmMvZ2V0YXJncy5jICh4YWxsb2MuaCwgb3B0aW9ucy5oKTogSW5jbHVkZSBpdC4KLQkoZ2V0YXJncyk6IENhbGwgY3JlYXRlX2xvbmdfb3B0aW9uX3RhYmxlLgotCShnZXRhcmdzKTogRnJlZSBsb25nb3B0cyBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbi4KLQkoc2hvcnRvcHRzKTogTW92ZSBpbiBvcHRpb25zLmMuCi0JKiBzcmMvb3B0aW9ucy5jIChjcmVhdGVfbG9uZ19vcHRpb25fdGFibGUpOiBOZXcgZnVuY3Rpb24uICBDb252ZXJ0Ci0JaW5mb3JtYXRpb24gZnJvbSBvcHRpb25fdGFibGUgdG8gb3B0aW9uIHN0cnVjdHVyZS4KLQkqIHNyYy9yZWFkZXIuYyAob3B0aW9ucy5oKTogSW5jbHVkZSBpdC4KLQotCSogc3JjL01ha2VmaWxlLmFtOiBBZGp1c3QuCi0JKiBzcmMvb3B0aW9ucy5jIChvcHRpb25fdGFibGUpOiBDcmVhdGUgZnJvbSBsb25nb3B0cyBhbmQgcGVyY2VudF90YWJsZS4KLQkqIHNyYy9nZXRhcmdzLmMgKGxvbmdvcHRzKTogRGVsZXRlLgotCSogc3JjL2xleC5jIChzdHJ1Y3QgcGVyY2VudF90YWJsZV9zdHJ1Y3QpOiBEZWxldGUuCi0JKHBlcmNlbnRfdGFibGUpOiBEZWxldGUuCi0JKG9wdGlvbnMuaCk6IEluY2x1ZGUgaXQuCi0JKiBzcmMvb3B0aW9ucy5jOiBDcmVhdGUuCi0JKiBzcmMvb3B0aW9ucy5oOiBDcmVhdGUuCi0JRGVjbGFyZSBlbnVtIG9wdF9hY2Nlc3NfZS4KLQlEZWZpbmUgc3RydWN0IG9wdGlvbl90YWJsZV9zdHJ1Y3QuCi0KLTIwMDEtMDktMjAgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+Ci0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvOiBBZGp1c3QgdGVybWlub2xvZ2llcyBhYm91dCBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUKLQlzZWN0aW9ucyBvZiBCaXNvbi4KLQotMjAwMS0wOS0xOSAgUGFzY2FsIEJhcnQgIDxwYXNjYWwuYmFydEBlcGl0YS5mcj4KLQotCSogc3JjL2Jpc29uLnNpbXBsZTogcy8lJWZpbGVuYW1lLyUlc2tlbGV0b24uCi0JKiBzcmMvbXVzY2xlX3RhYi5jIChnZXRhcmdzLmgpOiBJbmNsdWRlIGl0LgotCShtdXNjbGVfaW5pdCk6IEluc2VydCBuZXcgbXVzY2xlIHNrZWxldG9uLgotCi0yMDAxLTA5LTE4ICBQYXNjYWwgQmFydCAgPHBhc2NhbC5iYXJ0QGVwaXRhLmZyPgotCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9wYXJzZXIpOiBEZWxldGUgdW51c2VkIHZhcmlhYmxlIGFjdGlvbnNfZHVtcGVkLgotCi0yMDAxLTA5LTA3ICBQYXNjYWwgQmFydCAgPHBhc2NhbC5iYXJ0QGVwaXRhLmZyPgotCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dCk6IERlbGV0ZSBjYWxsIHRvIHJlYWRlcl9vdXRwdXRfeXlsc3AuCi0JKiBzcmMvcmVhZGVyLmMgKHJlYWRlcik6IExpa2V3aXNlLgotCSogc3JjL3JlYWRlci5oOiBEZWxldGUgZGVjbGFyYXRpb24gb2YgcmVhZGVyX291dHB1dF95eWxzcC4KLQotMjAwMS0wOS0wMiAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KLQotCSogc3JjL3JlYWRlci5jOiBJbmNsdWRlIG11c2NsZV90YWIuaC4KLQkocGFyc2VfdW5pb25fZGVjbCk6IFVwZGF0ZS4KLQkocGFyc2VfbWFjcm9fZGVjbCk6IFJlbmFtZSBwYXJzZV9tdXNjbGVfZGVjbC4KLQlVcGRhdGUgdG8gdXNlIHJlbmFtZWQgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZS4KLQkocmVhZF9kZWNsYXJhdGlvbnMsIGNvcHlfYWN0aW9uLCByZWFkX2FkZGl0aW9ubmFsX2NvZGUsIDogVXBkYXRlZAotCXdpdGggY29ycmVjdCB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyBuYW1lcy4KLQkocGFja3N5bWJvbHMsIHJlYWRlcik6IExpa2V3aXNlLgotCi0JKiBzcmMvcmVhZGVyLmggKG11c2NsZV9vYnN0YWNrKTogRXh0ZXJuIGRlY2xhcmF0aW9uIHVwZGF0ZS4KLQotCSogc3JjL291dHB1dC5jOiBJbmNsdWRlIG11c2NsZV90YWIuaAotCUluIGFsbCBmdW5jdGlvbnMgdXNpbmcgbWFjcm9faW5zZXJ0LCBjaGFuZ2UgYnkgdXNpbmcgbXVzY2xlX2luc2VydCAoKS4KLQkobWFjcm9fb2JzdGFjayk6IFJlbmFtZSBtdXNjbGVfb2JzdGFjay4KLQlFY2hvIG1vZGlmaWNhdGlvbnMgaW4gdGhlIHdob2xlIGZpbGUuCi0JKE1BQ1JPX0lOU0VSVF9JTlQpOiBSZW5hbWUgTVVTQ0xFX0lOU0VSVF9JTlQuCi0JKE1BQ1JPX0lOU0VSVF9TVFJJTkcpOiBSZW5hbWUgTVVTQ0xFX0lOU0VSVF9TVFJJTkcuCi0JKE1BQ1JPX0lOU0VSVF9QUkVGSVgpOiBSZW5hbWUgTVVTQ0xFX0lOU0VSVF9QUkVGSVguCi0KLQkqIHNyYy9tdXNjbGVfdGFiLmg6IFVwZGF0ZSBkb3VibGUgaW5jbHVzaW9uIG1hY3Jvcy4KLQkobWFjcm9fZW50cnlfcyk6IFJlbmFtZSBtdXNjbGVfZW50cnlfcy4KLQlVcGRhdGUgcHJvdG90eXBlcy4KLQotCSogc3JjL211c2NsZV90YWIuYzogSW5jbHVkZSBtdXNjbGVfdGFiLmguCi0JUmVuYW1lIG1hY3JvX3RhYmJsZSB0byBtdXNjbGVfdGFibGUuCi0JKG1oYXNoMSwgbWhhc2gyLCBtY21wKTogVXNlIG11c2NsZV9lbnRyeS4KLQkobWFjcm9faW5pdCk6IFJlbmFtZSBtdXNjbGVfaW5pdC4gVXBkYXRlLgotCShtYWNyb19pbnNlcnQpOiBSZW5hbWUgbXVzY2xlX2luc2VydC4gVXBkYXRlLgotCShtYWNyb19maW5kKTogUmVuYW1lIG11c2NsZV9maW5kLiBVcGRhdGUuCi0KLQkqIHNyYy9tYWluLmM6IEluY2x1ZGUgbXVzY2xlX3RhYi5oLgotCShtYWluKTogQ2FsbCBtdXNjbGVfaW5pdCAoKS4KLQkqIHNyYy9NYWtlZmlsZS5hbSAoYmlzb25fU09VUkNFUyk6IEVjaG8gbW9kaWZpY2F0aW9ucy4KLQotMjAwMS0wOS0wMiAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KLQotCU5vdyB0aGUgZmlsZXMgbWFjcm9fdGFiLltjaF0gYXJlIG5hbWVkIG11c2NsZV90YWIuW2NoXS4KLQotCSogc3JjL211c2NsZV90YWIuYywgc3JjL211c2NsZV90YWIuaDogQWRkIGZpbGVzLgotCi0yMDAxLTA5LTAyICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgotCi0JKiBzcmMvbWFjcm90YWIuYywgc3JjL21hY3JvdGFiLmg6IFJlbW92ZS4KLQotMjAwMS0wOS0wMSAgUGFzY2FsIEJhcnQgIDxwYXNjYWwuYmFydEBlcGl0YS5mcj4KLQotCSogc3JjL3JlYWRlci5jIChjb3B5X2d1YXJkKTogVXNlIG11c2NsZSB0byBzcGVjaWZ5IHRoZSBgI2xpbmUnCi0JZmlsZW5hbWUuCi0KLTIwMDEtMDktMDEgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+Ci0KLQkqIHRlc3RzL2NhbGMuYXQgKGV4cCk6IE5vdywgWVlFUlJPUl9WRVJCT1NFIG5lZWQgdG8gYmUgc2V0Ci0JdG8gYW4gZXhwbGljaXQgdmFsdWUgdG8gYWN0aXZhdGUgdGhlIGZlYXR1cmUuIFdlIGRvIGl0IGhlcmUuCi0KLTIwMDEtMDgtMzEgIFBhc2NhbCBCYXJ0ICA8cGFzY2FsLmJhcnRAZXBpdGEuZnI+Ci0KLQkqIHNyYy9vdXRwdXQuYyAocHJlcGFyZSk6IERlbGV0ZSB0aGUgYGZpbGVuYW1lJyBtdXNjdWxlIGluc2VydGlvbi4KLQkqIHNyYy9yZWFkZXIuYyAoY29weV9hY3Rpb24pOiBVc2UgYGZpbGVuYW1lJyBtdXNjdWxlIHdpdGggYCNsaW5lJy4KLQkocGFyc2VfdW5pb25fZGVjbCk6IExpa2V3aXNlLgotCSogc3JjL21hY3JvdGFiLmMgKG1hY3JvX2luaXQpOiBJbml0aWFsaXplIGZpbGVuYW1lIGJ5IGluZmlsZS4KLQotMjAwMS0wOC0zMSAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KLQotCSogc3JjL2Jpc29uLnNpbXBsZSAoWVlMU1BfTkVFREVEKTogTmV3IGRlZmluaXRpb24uCi0JKiBzcmMvb3V0cHV0LmMgKHByZXBhcmUpOiBBZGQgbWFjcm8gaW5zZXJ0aW9uIG9mIGBsb2NhdGlvbnNfZmxhZycKLQotMjAwMS0wOC0zMSAgUGFzY2FsIEJhcnQgIDxwYXNjYWwuYmFydEBlcGl0YS5mcj4KLQotCSogc3JjL291dHB1dC5jIChwcmVwYXJlKTogRGVsZXRlIGluc2VydGlvbiBvZiBwcmV2aW91cyBtdXNjbGVzLAotCWFuZCBpbnNlcnQgdGhlIGBwcmVmaXgnIG11c2NsZXMuCi0JKiBzcmMvbWFjcm90YWIuYyAobWFjcm9faW5pdCk6IExpa2V3aXNlLgotCShtYWNyb19pbml0KTogSW5pdGlhbGl6YXRpb24gcHJlZml4IGRpcmVjdGl2ZSBieSBgeXknLgotCSogc3JjL2Jpc29uLnNpbXBsZTogU3Vic3RpdHV0ZSBhbGwgJSV5eWxleCwgJSV5eWNoYXIsICUleXlsdmFsLAotCSUleXlkZWJ1ZywgJSV5eWVycm9yLCAlJXl5bmVycnMgYW5kICUleXlwYXJzZSBieSB5eWxleCwgeXljaGFyLAotCXl5bHZhbCwgeXlkZWJ1ZywgeXllcnJvciwgeXluZXJycyBhbmQgeXlwYXJzZS4KLQlOZXcgZGlyZWN0aXZlIGAjZGVmaW5lJyB0byBzdWJzdGl0dXRlIHl5ZGVidWcsIC4uLiB3aXRoIG9wdGlvbgotCW5hbWVfcHJlZml4LgotCi0yMDAxLTA4LTMxICBQYXNjYWwgQmFydCAgPHBhc2NhbC5iYXJ0QGVwaXRhLmZyPgotCi0JKiBzcmMvbWFpbi5jIChtYWluKTogU3RhbmRhcmRpemUuCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF90YWJsZV9kYXRhLCBvdXRwdXRfcGFyc2VyKTogTGlrZXdpc2UuCi0JKiBzcmMvbWFjcm90YWIuaCwgc3JjL21hY3JvdGFiLmMsIHNyYy9iaXNvbi5zaW1wbGU6IExpa2V3aXNlLgotCi0yMDAxLTA4LTMxICBQYXNjYWwgQmFydCAgPHBhc2NhbC5iYXJ0QGVwaXRhLmZyPiwgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KLQotCSogc3JjL3JlYWRlci5jIChyZWFkX2FkZGl0aW9ubmFsX2NvZGUpOiBSZW5hbWUgJSV1c2VyX2NvZGUgdG8KLQklJWVwaWxvZ3VlLgotCSogc3JjL291dHB1dC5jIChvdXRwdXQpOiBSZW5hbWUgJSVkZWNsYXJhdGlvbnMgdG8gJSVwcm9sb2d1ZS4KLQkqIHNyYy9iaXNvbi5zaW1wbGU6IEVjaG8gbW9kaWZpY2F0aW9ucy4KLQotMjAwMS0wOC0zMSAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KLQotCSogc3JjL3JlYWRlci5jIChyZWFkZ3JhbSk6IENsZWFuVXAuCi0JKG91dHB1dF90b2tlbl9kZWZpbmVzKTogTGlrZXdpc2UuCi0JKHBhY2tzeW1ib2xzKTogTGlrZXdpc2UuCi0JKHJlYWRlcik6IExpa2V3aXNlLgotCSogc3JjL291dHB1dC5jIChvdXRwdXQpOiBDUFAtb3V0IHVzZWxlc3MgY29kZS4KLQotMjAwMS0wOC0zMSAgUGFzY2FsIEJhcnQgIDxwYXNjYWwuYmFydEBlcGl0YS5mcj4KLQotCSogc3JjL3JlYWRlci5jIChyZWFkZXIpOiBEZWxldGUgb2Jzb2xldGUgY2FsbCB0byBmdW5jdGlvbgotCW91dHB1dF90cmFpbGVycyBhbmQgb3V0cHV0X2hlYWRlcnMuCi0JKiBzcmMvb3V0cHV0Lmg6IFJlbW92ZSBvYnNvbGV0ZSBmdW5jdGlvbnMgcHJvdG90eXBlcyBvZiBvdXRwdXRfaGVhZGVycwotCWFuZCBvdXRwdXRfdHJhaWxlcnMuCi0KLTIwMDEtMDgtMzAgIFBhc2NhbCBCYXJ0ICA8cGFzY2FsLmJhcnRAZXBpdGEuZnI+Ci0KLQkqIHNyYy9tYWluLmM6IEluY2x1ZGUgbWFjcm90YWIuaC4KLQkqIHNyYy9tYWNyb3RhYi5oIChtYWNyb19lbnRyeV9zKTogQ29uc3RpZnkgZmllbGRzLgotCUFkanVzdCBmdW5jdGlvbnMgcHJvdG90eXBlcy4KLQkqIHNyYy9tYWNyb3RhYi5jIChtYWNyb19pbnNlcnQpOiBDb25zdGlmeSBrZXkgYW5kIHZhbHVlLgotCShtYWNyb19maW5kKTogQ29uc3RpZnkga2V5LgotCShtYWNyb19pbnNlcnQpOiBJbmNsdWRlICd4YWxsb2MuaCcKLQkobWFjcm9faW5zZXJ0KTogVXNlIFhNQUxMT0MuCi0JKG1hY3JvX2ZpbmQpOiBDb25zdGlmeSByZXR1cm4gdmFsdWUuCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF90YWJsZV9kYXRhKTogUmVuYW1lIHRhYmxlIHRvIHRhYmxlX2RhdGEuCi0JKG91dHB1dF9wYXJzZXIpOiBDb25zdGlmeSBtYWNyb19rZXksIG1hY3JvX3ZhbHVlLgotCi0yMDAxLTA4LTMwICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgotCi0JKiBzcmMvcmVhZGVyLmMgKHBhcnNlX3NrZWxfZGVjbCk6IE5ldy4KLQkocmVhZF9kZWNsYXJhdGlvbnMpOiBBZGQgY2FzZSBgdG9rX3NrZWwnLCBjYWxsIHBhcnNlX3NrZWxfZGVjbCAoKS4KLQkqIHNyYy9sZXguaCAodG9rZW5fdCk6IE5ldyB0b2tlbiBgdG9rX3NrZWwnLgotCSogc3JjL2xleC5jIChwZXJjZW50X3RhYmxlKTogQWRkIHNrZWxldG9uIG9wdGlvbiBlbnRyeS4KLQlTdGFuZGFyZGl6ZS4KLQotMjAwMS0wOC0yOSAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KLQotCSogc3JjL2Jpc29uLnNpbXBsZTogQWRkICUldXNlcl9jb2RlIGRpcmVjdGl2ZSBhdCB0aGUgZW5kLgotCSogc3JjL3JlYWRlci5jIChyZWFkX2FkZGl0aW9ubmFsX2NvZGUpOiBOZXcuCi0JKHJlYWRlcik6IFVzZSBpdC4KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3Byb2dyYW0pOiBSZW1vdmUuCi0JKG91dHB1dCk6IFVwZGF0ZS4KLQotMjAwMS0wOC0yOCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KLQotCSogc3JjL291dHB1dC5jIChvdXRwdXRfYWN0aW9ucyk6IENsZWFuIHVwLgotCShvdXRwdXRfZ3JhbSk6IENQUC1vdXQgdXNlbGVzcyBjb2RlLgotCSogc3JjL3JlYWRlci5jIChyZWFkZXIpOiBDbGVhbiB1cCwgQ1BQLW91dCB1c2VsZXNzIGNvZGUuCi0KLTIwMDEtMDgtMjggIFBhc2NhbCBCYXJ0ICA8cGFzY2FsLmJhcnRAZXBpdGEuZnI+Ci0KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0KTogQ29weSBhdHRyc19vYnN0YWNrIGluIHRoZSAnJSVkZWZpbml0aW9ucycKLQlkaXJlY3RpdmUuCi0JKiBzcmMvYmlzb24uc2ltcGxlOiBBZGQgYCUlZGVmaW5pdGlvbnMnLgotCi0yMDAxLTA4LTI4ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgotCi0JKiBjb25maWcvZGVwY29tcDogTmV3IGZpbGUuCi0KLTIwMDEtMDgtMjcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBzcmMvYmlzb24uc2ltcGxlICh5eXBhcnNlKTogRG9uJ3QgdGFrZSB0aGUgYWRkcmVzcyBvZiBhbgotCWl0ZW0gYmVmb3JlIHRoZSBzdGFydCBvZiBhbiBhcnJheSwgYXMgdGhhdCBkb2Vzbid0IGNvbmZvcm0gdG8KLQl0aGUgQyBTdGFuZGFyZC4KLQotMjAwMS0wOC0yNyAgUm9iZXJ0IEFuaXNrbyAgPHJvYmVydC5hbmlza29AZXBpdGEuZnI+Ci0KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0KTogUmVtb3ZlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgbWFjcm8KLQlvYnN0YWNrLiAgSXQgd2FzIGRvbmUgdG9vIGxhdGUgaGVyZS4KLQotCSogc3JjL3JlYWRlci5jIChwYXJzZV9tYWNyb19kZWNsKTogRml4LiAgVXNlIG9mIHRoZSBtYWNybyBvYnN0YWNrIHdhcwotCWNvbXBsZXRlbHkgd3JvbmcuCi0JKHJlYWRlcik6IEluaXRpYWxpemUgdGhlIG1hY3JvIG9ic3RhY2sgaGVyZSwgc2luY2Ugd2UgbmVlZCBpdCB0byBncm93Ci0JJyVkZWZpbmUnIGRpcmVjdGl2ZXMuCi0KLQkqIHNyYy9yZWFkZXIuaDogRGVjbGFyZSB0aGUgbWFjcm8gb2JzdGFjayBhcyBleHRlcm4uCi0KLTIwMDEtMDgtMjcgIFJvYmVydCBBbmlza28gIDxyb2JlcnQuYW5pc2tvQGVwaXRhLmZyPgotCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9wYXJzZXIpOiBGaXguICBTdG9yZSBzaW5nbGUgJyUnIGNoYXJhY3RlcnMgaW4KLQl0aGUgb3V0cHV0IG9ic3RhY2sgaW5zdGVhZCBvZiB0aHJvd2luZyB0aGVtIGF3YXkuCi0KLTIwMDEtMDgtMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBNYWtlZmlsZS5hbSAoQVVUT01BS0VfT1BUSU9OUyk6IDEuNS4KLQotMjAwMS0wOC0yNSAgUm9iZXJ0IEFuaXNrbyAgPHJvYmVydC5hbmlza29AZXBpdGEuZnI+CisJICBpbnB1dC5jYzo3NDA6MTogZXJyb3I6IGZ1bmN0aW9uIGRlY2xhcmVkICdub3JldHVybicgc2hvdWxkIG5vdCByZXR1cm4KKwkgICAgICAgICAgICAgICAgICAgICAgICAgWy1XZXJyb3IsLVdpbnZhbGlkLW5vcmV0dXJuXQorCSAgc3RhdGljIHZvaWQgeXlNZW1vcnlFeGhhdXN0ZWQgKHl5R0xSU3RhY2sqIHl5c3RhY2twKQorCSAgICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CisJICBzdGF0aWMgdm9pZAorCSAgeXlNZW1vcnlFeGhhdXN0ZWQgKHl5R0xSU3RhY2sqIHl5c3RhY2twKQorCSAgeworCSAgICBZWUxPTkdKTVAgKHl5c3RhY2twLT55eWV4Y2VwdGlvbl9idWZmZXIsIDIpOworCSAgfQorCSAgXgorCSAgMSB3YXJuaW5nIGFuZCAxIGVycm9yIGdlbmVyYXRlZC4KIAotCSogbGliL01ha2VmaWxlLmFtOiBBZGp1c3QuCisJVGhpcyBpcyBBcHBsZSBjbGFuZyB2ZXJzaW9uIDMuMSAodGFncy9BcHBsZS9jbGFuZy0zMTguMC42MSkuCiAKLTIwMDEtMDgtMjUgIFJvYmVydCBBbmlza28gIDxyb2JlcnQuYW5pc2tvQGVwaXRhLmZyPgorCSogZGF0YS9jLm00IChiNF90YWJsZV92YWx1ZV9lcXVhbHMpOiBVc2UgKCEhKEEgPT0gQikpIGluc3RlYWQgb2YgKEEgPT0gQikKKwl0byBhdm9pZCB0aGlzIHdhcm5pbmcuCisJQW55IHJlYXNvbmFibGUgY29tcGlsZXIgc2hvdWxkIGdlbmVyYXRlIHRoZSBzYW1lIGNvZGUuCisJKiBzcmMvdW5pcXN0ci5oIChVTklRU1RSX0VRKTogTGlrZXdpc2UuCisJKiBkYXRhL2dsci5jIChMT05HSk1QKTogYWJvcnQgYWZ0ZXIgbG9uZ2ptcCB0byBwYWNpZnkgY2xhbmcuCiAKLQkqIHNyYy9iaXNvbi5zaW1wbGU6IFVwZGF0ZSBhbmQgYWRkICclJScgZGlyZWN0aXZlcy4KKzIwMTItMTAtMDggIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDEtMDgtMjUgIFJvYmVydCBBbmlza28gIDxyb2JlcnQuYW5pc2tvQGVwaXRhLmZyPgorCXRlc3RzOiBubyBsb25nZXIgZGlzYWJsZSAtTyBjb21waWxlciBvcHRpb25zCisJVGVzdHMgYXJlIHJ1bm5pbmcgd2l0aG91dCAtTyBzaW5jZQorCWYzNzdmNjlmZWMyODAxM2M3OWRiNGVmZTEyYmJiOWQ0ODk4N2ZiMmMgYmVjYXVzZSBzb21lIHdhcm5pbmdzIChhYm91dAorCXl5bHZhbCBub3QgYmVpbmcgaW5pdGlhbGl6ZWQpIHNob3cgb25seSB3aGVuIEdDQyBpcyBnaXZlbiAtTzIuICBUaGUKKwlwcmV2aW91cyBwYXRjaCBmaXhlcyB0aGUgd2FybmluZ3MuIFJ1biB0aGUgdGVzdCBzdWl0ZSB3aXRoIGNvbXBpbGVyCisJb3B0aW9ucyB1bm1vZGlmaWVkLgogCi0JKiBzcmMvcmVhZGVyLmMgKHJlYWRlcik6IFJlbW92ZSBjYWxscyB0byAnb3V0cHV0X2hlYWRlcnMnIGFuZAotCSdvdXRwdXRfdHJhaWxlcnMnLiBSZW1vdmUgc29tZSBDIG91dHB1dC4KLQkocmVhZGdyYW0pOiBEaXNhYmxlIGEgcGllY2Ugb2YgY29kZSB0aGF0IHdhcyB3cml0aW5nIGEgZGVmYXVsdAotCWRlZmluaXRpb24gZm9yICdZWVNUWVBFJy4KLQkocmVhZGVyX291dHB1dF95eWxzcCk6IFJlbW92ZS4KLQkocGFja3N5bWJvbHMpOiBPdXRwdXQgdG9rZW4gZGVmaW50aW9ucyB0byBhIG1hY3JvLgotCShjb3B5X2RlZmluaXRpb24pOiBEaXNhYmxlIEMgb3V0cHV0LgorCSogdGVzdHMvYXRsb2NhbC5pbiAoTzBDRkxBR1MsIE8wQ1hYRkxBR1MpOiBSZW1vdmUsIHVzZSBDRkxBR1MgYW5kCisJQ1hYRkxBR1MuCiAKLQkqIHNyYy9yZWFkZXIuYyAocGFyc2VfbWFjcm9fZGVjbCk6IE5ldyBmdW5jdGlvbiB1c2VkIHRvIHBhcnNlIG1hY3JvCi0JZGVjbGFyYXRpb25zLgotCShjb3B5X3N0cmluZzIpOiBQdXQgdGhlIGJvZHkgb2YgY29weV9zdHJpbmcgaW50byB0aGlzIG5ldyBmdW5jdGlvbi4KLQlBZGQgYSBwYXJhbWV0ZXIgdG8gbGV0IHRoZSBjYWxsZXIgY2hvb3NlIHdoZXRoZXIgaGUgd2FudHMgdG8gY29weSB0aGUKLQlzdHJpbmcgZGVsaW1pdGVycyBvciBub3QuCi0JKGNvcHlfc3RyaW5nKTogQmUgYSBzaW1wbGUgY2FsbCB0byBjb3B5X3N0cmluZzIgd2l0aCB0aGUgbGFzdCBhcmd1bWVudAotCWJvdW5kIHRvIHRydWUuCi0JKHJlYWRfZGVjbGFyYXRpb25zKTogQWRkIGNhc2UgZm9yIG1hY3JvIGRlZmluaXRpb24uCi0JKGNvcHlfaWRlbnRpZmllcik6IE5ldy4KLQkocGFyc2VfbWFjcm9fZGVjbCk6IFJlYWQgbWFjcm8gaWRlbnRpZmllcnMgdXNpbmcgY29weV9pZGVudGlmaWVyCi0JcmF0aGVyIHRoYW4gbGV4LgorMjAxMi0xMC0wOCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CiAKLTIwMDEtMDgtMjUgIFJvYmVydCBBbmlza28gIDxyb2JlcnQuYW5pc2tvQGVwaXRhLmZyPgorCXlhY2MuYzogaW5pdGlhbGl6ZSB5eWx2YWwgaW4gcHVyZS1wYXJzZXIgbW9kZQorCVNlZSBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDEyLTA4L21zZzAwMDI0Lmh0bWwKKwkoc3ByZWFkaW5nIG92ZXIgU2VwdGVtYmVyIGFuZCBPY3RvYmVyKS4KIAotCSogc3JjL291dHB1dC5jIChwcmVwYXJlKTogQWRkIHByZWZpeGVkIG5hbWVzLgotCShvdXRwdXRfcGFyc2VyKTogT3V0cHV0IHNlbWFudGljIGFjdGlvbnMuCi0JKG91dHB1dF9wYXJzZXIpOiBGaXggYnVnIG9uICclJWxpbmUnIGRpcmVjdGl2ZXMuCisJKiBkYXRhL3lhY2MuYyAoWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4pCisJKFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORCwgWVlMVkFMX0lOSVRJQUxJWkUpOgorCU5ldyBtYWNyb3MuICBVc2UgdGhlbSB0byBzdXBwcmVzcyBhbiB1bndhbnRlZCBHQ0MgZGlhZ25vc3RpYy4KIAotCSogc3JjL291dHB1dC5jIChvdXRwdXRfaGVhZGVycyk6IFJlbW92ZS4gVGhlIEMgY29kZSBwcmludGVkIGJ5IHRoaXMKLQlmdW5jdGlvbiBzaG91bGQgbm93IGJlIGluIHRoZSBza2VsZXRvbnMuCi0JKG91dHB1dF90cmFpbGVycyk6IFJlbW92ZS4KLQkob3V0cHV0KTogRGlzYWJsZSBjYWxsIHRvICdyZWFkZXJfb3V0cHV0X3l5bHNwJy4KLQkob3V0cHV0X3J1bGVfZGF0YSk6IERvIG5vdCBvdXRwdXQgdGFibGVzIHRvIHRoZSB0YWJsZSBvYnN0YWNrLgorMjAxMi0xMC0wOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL291dHB1dC5jOiBSZW1vdmUgc29tZSBDIGRlZGljYXRlZCBvdXRwdXQuCi0JSW1wcm92ZSB0aGUgdXNlIG9mIG1hY3JvIGFuZCBvdXRwdXQgb2JzdGFja3MuCi0JKG91dHB1dF9kZWZpbmVzKTogUmVtb3ZlLgorCXNrZWxldG9uczogc3R5bGUgY2hhbmdlcworCSogZGF0YS95YWNjLmMsIGRhdGEvZ2xyLmM6IFByZWZlciBUaXRsZSBjYXNlIGZvciAoQ1BQKSBtYWNybyBhcmd1bWVudHMuCiAKLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3Rva2VuX3RyYW5zbGF0aW9ucyk6IEFzc29jaWF0ZSAndHJhbnNsYXRlJwotCXRhYmxlIHdpdGggYSBtYWNyby4gTm8gb3V0cHV0IHRvIHRoZSB0YWJsZSBvYnN0YWNrLgotCShvdXRwdXRfZ3JhbSk6IFNhbWUgZm9yICdyaHMnIGFuZCAncHJocycuCi0JKG91dHB1dF9zdG9zKTogU2FtZSBmb3IgJ3N0b3MnLgotCShvdXRwdXRfcnVsZV9kYXRhKTogU2FtZSBmb3IgJ3IxJyBhbmQgJ3IyJy4KLQkodG9rZW5fYWN0aW9ucyk6IFNhbWUgZm9yICdkZWZhY3QnLgotCShnb3RvX2FjdGlvbnMpOiBTYW1lIGZvciAnZGVmZ290bycuCi0JKG91dHB1dF9iYXNlKTogU2FtZSBmb3IgJ3BhY3QnIGFuZCAncGdvdG8nLgotCShvdXRwdXRfdGFibGUpOiBTYW1lIGZvciAndGFibGUnLgotCShvdXRwdXRfY2hlY2spOiBTYW1lIGZvciAnY2hlY2snLgorMjAxMi0xMC0wNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL291dHB1dC5jIChvdXRwdXRfdGFibGVfZGF0YSk6IE5ldyBmdW5jdGlvbi4KLQkob3V0cHV0X3Nob3J0X3RhYmxlKTogUmVtb3ZlLgotCShvdXRwdXRfc2hvcnRfb3JfY2hhcl90YWJsZSk6IFJlbW92ZS4KKwlsYWxyMS5jYzogZG9jdW1lbnQgZXhjZXB0aW9uIHNhZmV0eQorCSogTkVXUzogaGVyZS4KKwkqIGRvYy9iaXNvbi50ZXhpIChEZXN0cnVjdG9yIERlY2wsIEMrKyBQYXJzZXIgSW50ZXJmYWNlKTogYW5kIHRoZXJlLgogCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9wYXJzZXIpOiBSZXBsYWNlIG1vc3Qgb2YgdGhlIHNrZWxldG9uIGNvcHkgY29kZQotCXdpdGggc29tZXRoaW5nIG5ldy4gU2tlbGV0b25zIGFyZSBub3cgcHJvY2Vzc2VkIGNoYXJhY3RlciBieSBjaGFyYWN0ZXIKLQlyYXRoZXIgdGhhbiBsaW5lIGJ5IGxpbmUsIGFuZCBCaXNvbiBsb29rcyBmb3IgJyUlJyBtYWNyb3MuIFRoaXMgaXMgdGhlCi0JZmlyc3Qgc3RlcCBpbiBtYWtpbmcgQmlzb24ncyBvdXRwdXQgcHJvY2VzcyAoYSBsb3QpIG1vcmUgZmxleGlibGUuCi0JKG91dHB1dF9wYXJzZXIpOiBVc2UgdGhlIG1hY3JvIHRhYmxlLgorMjAxMi0xMC0wNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotMjAwMS0wOC0yNSAgUm9iZXJ0IEFuaXNrbyAgPHJvYmVydC5hbmlza29AZXBpdGEuZnI+CisJbGFscjEuY2M6IGNoZWNrIGV4Y2VwdGlvbiBzYWZldHkgb2YgZXJyb3IgaGFuZGxpbmcKKwkqIHRlc3RzL2MrKy5hdCAoRXhjZXB0aW9uIHNhZmV0eSk6IERvbid0IHVzZSBzd2FwIGhlcmUsIGl0CisJaXMgdXNlbGVzcy4KKwlDb3ZlciBtb3JlIHRlc3QgY2FzZXM6IHl5ZXJyb3IsIFlZRVJST1IsIFlZQUJPUlQsIGFuZAorCWVycm9yIHJlY292ZXJ5LgorCShPYmplY3QpOiBJbnN0ZWFkIG9mIGp1c3Qga2VlcGluZyBhIGNvdW50ZXIgb2YgaW5zdGFuY2VzLCBrZWVwCisJYSBsaXN0IG9mIHRoZW0uCiAKLQkqIHNyYy9tYWluLmMgKG1haW4pOiBJbml0aWFsaXplIHRoZSBtYWNybyB0YWJsZS4KKzIwMTItMTAtMDYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDEtMDgtMjUgIFJvYmVydCBBbmlza28gIDxyb2JlcnQuYW5pc2tvQGVwaXRhLmZyPgorCWxhbHIxLmNjOiBjaGVjayAoYW5kIGZpeCkgJXByaW50ZXIgZXhjZXB0aW9uIHNhZmV0eQorCSogdGVzdHMvYysrLmF0IChFeGNlcHRpb24gc2FmZXR5KTogTGV0IHRoZSBwYXJzZXIgc3VwcG9ydCB0aGUgLS1kZWJ1ZworCW9wdGlvbi4KKwlPbiAncCcsIHRocm93IGFuIGV4Y2VwdGlvbiBmcm9tIHRoZSAlcHJpbnRlci4KKwkqIGRhdGEvbGFscjEuY2MgKHl5cGFyc2UpOiBEbyBub3QgZGlzcGxheSB0aGUgdmFsdWVzIHdlIGRpc2NhcmQsIGFzIGl0CisJdXNlcyAlcHJpbnRlciwgd2hpY2ggbWlnaHQgaGF2ZSB0aHJvd24gdGhlIGV4Y2VwdGlvbi4KIAotCSogc3JjL2xleC5jIChwZXJjZW50X3RhYmxlKTogQWRkIHRva19kZWZpbmUuCi0JKiBzcmMvbGV4Lmg6IEFkZCB0b2tfZGVmaW5lLgorMjAxMi0xMC0wNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotMjAwMS0wOC0yNSAgUm9iZXJ0IEFuaXNrbyAgPHJvYmVydC5hbmlza29AZXBpdGEuZnI+CisJbGFscjEuY2M6IGNoZWNrIChhbmQgZml4KSAlaW5pdGlhbC1hY3Rpb24gZXhjZXB0aW9uIHNhZmV0eQorCSogZGF0YS9sYWxyMS5jYzogQ2hlY2sgc2l6ZSA+IDEsIHJhdGhlciB0aGFuIHNpemUgIT0gMSwgd2hlbiBjbGVhbmluZworCXRoZSBzdGFjaywgYXMgYXQgdGhlIGJlZ2lubmluZywgc2l6ZSBpcyAwLgorCSogdGVzdHMvYysrLmF0IChFeGNlcHRpb24gc2FmZXR5KTogQ2hlY2sgZXhjZXB0aW9uIHNhZmV0eSBpbgorCSVpbml0aWFsLWFjdGlvbi4KIAotCSogc3JjL21hY3JvdGFiLmM6IE5ldyBmaWxlLgotCSogc3JjL21hY3JvdGFiLmg6IE5ldyBmaWxlLgotCSogc3JjL01ha2VmaWxlLmFtOiBVcGRhdGUuCisyMDEyLTEwLTA2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0yMDAxLTA4LTI1ICBSb2JlcnQgQW5pc2tvICA8cm9iZXJ0LmFuaXNrb0BlcGl0YS5mcj4KKwlsYWxyMS5jYzogZml4IGV4Y2VwdGlvbiBzYWZldHkKKwlsYWxyMS5jYyBkb2VzIG5vdCByZWNsYWltIGl0cyBtZW1vcnkgd2hlbiBlbmRlZCBieSBhbiBleGNlcHRpb24uCiAKLQkqIGxpYi9oYXNoLmM6IE5ldyBmaWxlLgotCSogbGliL2hhc2guaDogTmV3IGZpbGUuCi0JKiBsaWIvTWFrZWZpbGUuYW06IFVwZGF0ZS4KKwlSZXBvcnRlZCBieSBPbGVrc2lpIFRhcmFuOgorCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9oZWxwLWJpc29uLzIwMTItMDkvbXNnMDAwMDAuaHRtbAogCi0yMDAxLTA4LTE1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwkqIGRhdGEvbGFscjEuY2MgKHl5cGFyc2UpOiBQcm90ZWN0IHRoZSB3aG9sZSB5eXBhcnNlIGJ5IGEgdHJ5LWNhdGNoCisJYmxvY2sgdGhhdCBjbGVhbnMgdGhlIHN0YWNrIGFuZCB0aGUgbG9va2FoZWFkLgogCi0JVmVyc2lvbiAxLjI4Yy4KKzIwMTItMTAtMDYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDEtMDgtMTUgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisJbGFscjEuY2M6IGNoZWNrIGV4Y2VwdGlvbiBzYWZldHkuCisJKiB0ZXN0cy9jKysuYXQgKEV4Y2VwdGlvbiBzYWZldHkpOiBOZXcuCiAKLQkqIHNyYy9yZWFkZXIuYyAocmVhZGdyYW0pOiBJbmRlbnQgb3V0cHV0IG1hY3JvIFlZU1RZUEUuCi0JKHBhY2tzeW1ib2xzKTogTGlrZXdpc2UuCi0JKG91dHB1dF90b2tlbl9kZWZpbmVzKTogTGlrZXdpc2UuCi0JKiBzcmMvZmlsZXMuYzogU3RhbmRhcmRpemUuCi0JKGNvbXB1dGVfaGVhZGVyX21hY3JvKTogTmV3LgotCShkZWZpbmVzX29ic3RhY2tfc2F2ZSk6IE5ldy4gVXNlIGNvbXB1dGVfaGVhZGVyX21hY3JvLgotCShvdXRwdXRfZmlsZXMpOiBVcGRhdGUuIFVzZSBkZWZpbmVzX29ic3RhY2tfc2F2ZS4KKzIwMTItMTAtMDYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDEtMDgtMTUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCWxhbHIxLmNjOiBpbmRlbnRhdGlvbiBmaXhlcy4KKwkqIGRhdGEvbGFscjEuY2MgKHl5cGFyc2UpOiBoZXJlLgorCVVudGFiaWZ5IGEgYmxvY2sgb2YgY29kZS4KIAotCSogZG9jL2Jpc29uLnRleGluZm8gKFRhYmxlIG9mIFN5bWJvbHMpOiBEb2N1bWVudAotCVlZU1RBQ0tfVVNFX0FMTE9DQS4KKzIwMTItMTAtMDYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDEtMDgtMTUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCWxhbHIxLmNjOiBkb24ndCBsZWF2ZSBtYWNyb3MgZGVmaW5lIHRvIG5vdGhpbmcKKwkqIGRhdGEvbGFscjEuY2MgKFlZX1NZTUJPTF9QUklOVCwgWVlfUkVEVUNFX1BSSU5ULCBZWV9TVEFDS19QUklOVCk6CisJRGVmaW5lIHRvIHNvbWV0aGluZyBzbyB0aGF0LCBmb3IgaW5zdGFuY2UsICJpZiAoZm9vKSBZWV9TWU1CT0xfUFJJTlQiCisJaXMgdmFsaWQgZXZlbiB3aGVuICFZWURFQlVHLgogCi0JKiBtaXNzaW5nOiBVcGRhdGUgZnJvbSBDVlMgQXV0b21ha2UuCi0JKiBjb25maWcvY29uZmlnLmd1ZXNzLCBjb25maWcvY29uZmlnLnN1YiwgY29uZmlnL3RleGluZm8udGV4OgotCVVwZGF0ZSBmcm9tIGdudS5vcmcuCisyMDEyLTEwLTA2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0yMDAxLTA4LTE1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwl0ZXN0czogbWlub3IgaW1wcm92ZW1lbnRzCisJKiB0ZXN0cy9jKysuYXQ6IFNwYWNlIGNoYW5nZXMuCisJVXNlIEFUX1lZRVJST1JfREVGSU5FLgorCSogdGVzdHMvbG9jYWwuYXQgKEFUX1lZRVJST1JfREVGSU5FKTogSXNzdWUgZXJyb3JzIG9uIHVua25vd24gbGFuZ3VhZ2VzLgogCi0JKiBNYWtlZmlsZS5tYWludDogU3luYyB3aXRoIENWUyBBdXRvY29uZi4KKzIwMTItMTAtMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDEtMDgtMTQgIFBhc2NhbCBCYXJ0ICA8cGFzY2FsLmJhcnRAZXBpdGEuZnI+CisJdGVzdHM6IHVzZSAkUEVSTCBpbnN0ZWFkIG9mIHBlcmwKKwkqIHRlc3RzL2F0bG9jYWwuaW4gKFBFUkwpOiBOZXcuCisJU29ydC4KKwkqIHRlc3RzL2NhbGMuYXQsIHRlc3RzL2lucHV0LmF0LCB0ZXN0cy9sb2NhbC5hdCwgdGVzdHMvcmVncmVzc2lvbi5hdCwKKwkqIHRlc3RzL3NrZWxldG9ucy5hdCwgdGVzdHMvc3luY2xpbmVzLmF0LCB0ZXN0cy90b3J0dXJlLmF0OiBoZXJlLgogCi0JKiBkb2MvYmlzb24udGV4aW5mbzogSW5jbHVkZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UgZnJvbQotCWBmZGwudGV4aScuCi0JKiBkb2MvZmRsLnRleGk6IEFkZCB0byBwYWNrYWdlLgorMjAxMi0xMC0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotMjAwMS0wOC0xNCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKwlidWlsZDogbG9vayBmb3IgUGVybCBpbiBjb25maWd1cmUuCisJQmlzb24gdXNlcyAiL3Vzci9iaW4vcGVybCIgb3IgInBlcmwiIGluIHNldmVyYWwgcGxhY2VzLCBhbmQgaXQgZG9lcworCW5vdCBhcHBlYXIgdG8gYmUgYSBwcm9ibGVtLiAgQnV0LCBhdCBsZWFzdCB0byBtYWtlIGl0IHNpbXBsZXIgdG8KKwljaGFuZ2UgUEVSTCBvbiB0aGUgbWFrZSBjb21tYW5kIGxpbmUsIGNoZWNrIGZvciBwZXJsIGluIGNvbmZpZ3VyZS4KIAotCVR1cm4gb24gJXtzb3VyY2UsaGVhZGVyfV9leHRlbnNpb24gZmVhdHVyZXMuCisJKiBjb25maWd1cmUuYWMgKFBFUkwpOiBOZXcuCisJKiBkb2MvRG94eWZpbGUuaW4sIGRvYy9NYWtlZmlsZS5hbSwgdGVzdHMvYmlzb24uaW46IFVzZSBpdC4KIAotCSogc3JjL2xleC5jIChwZXJjZW50X3RhYmxlKTogVW4tQ1BQIG91dCBoZWFkZXJfZXh0ZW5zaW9uIGFuZAotCXNvdXJjZV9leHRlbnNpb24uCi0JKiBzcmMvZmlsZXMuYyAoY29tcHV0ZV9leHRzX2Zyb21fZ2YpOiBDb21wYXJlIHBvaW50ZXJzIHdpdGggTlVMTC4KLQkoY29tcHV0ZV9leHRzX2Zyb21fc3JjKTogUmVtb3ZlIGNvbmRpdGlvbnMuIEl0IHJlc3RvcmVzIHByaW9yaXRpZXMKLQliZXR3ZWVuIG9wdGlvbnMuCisyMDEyLTEwLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0yMDAxLTA4LTE0ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCXRlc3RzOiBmaXggc2VkIHBvcnRhYmlsaXR5IGlzc3VlcworCVJlcG9ydGVkIGJ5IERpZGllciBHb2RlZnJveSwKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDEyLTEwL21zZzAwMDA1Lmh0bWw+LgogCi0JKiBzcmMvZmlsZXMuYyAoY29tcHV0ZV9iYXNlX25hbWVzKTogQWRkIGV4dGVuc2lvbnMgY29tcHV0aW5nIHdoZW4KLQlgLS1maWxlLXByZWZpeCcgdXNlZC4KLQlTdGFuZGFyZGl6ZSBmdW5jdGlvbiBjYWxscy4KKwkqIHRlc3RzL2NhbGMuYXQgKEFUX0NIRUNLX1NQQUNFUyk6IFVzZSBQZXJsLgogCi0yMDAxLTA4LTEzICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorMjAxMi0xMC0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL2Jpc29uLnNpbXBsZSAoWVlTVEFDS19VU0VfQUxMT0NBKTogQ2hhbmdlZCB0byBhbGxvdyB1c2VycwotCWRlZmluaW5nIGl0IChkZWZpbmVkIGJ1dCBudWxsIGRpc2FibGVzIGFsbG9jYSkuCisJdGVzdHM6IGRpZmYgLXUgaXMgbm90IHBvcnRhYmxlCisJUmVwb3J0ZWQgYnkgRGlkaWVyIEdvZGVmcm95CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAxMi0xMC9tc2cwMDAwNi5odG1sPi4KIAotMjAwMS0wOC0xMyAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKwkqIHRlc3RzL2V4aXN0aW5nLmF0IChBVF9MQUxSMV9ESUZGX0NIRUNLKTogU2tpcCBpZiBkaWZmIC11IGRvZXMgbm90CisJd29yay4KIAotCSogc3JjL2Jpc29uLnNpbXBsZSAoX3l5X21lbWNweSk6IENQUCByZWZvcm1hdC4KKzIwMTItMTAtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDEtMDgtMTMgIFBhc2NhbCBCYXJ0ICA8cGFzY2FsLmJhcnRAZXBpdGEuZnI+CisJbWFpbnQ6IHdvcmQgY2hhbmdlcworCSogUkVBRE1FLWhhY2tpbmcgKFR5cGljYWwgZXJyb3JzKTogSW1wcm92ZSB3b3JkaW5nLgogCi0JKiB0ZXN0cy9hdGNvbmZpZy5pbiAoQ1BQRkxBR1MpOiBGaXguCisyMDEyLTEwLTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0yMDAxLTA4LTEwICBQYXNjYWwgQmFydCAgPHBhc2NhbC5iYXJ0QGVwaXRhLmZyPgorCWxhbHIxLmNjOiBmaXggdGVzdCBzdWl0ZSBwb3J0YWJpbGl0eQorCVJlcG9ydGVkIGJ5IFJvYiBWZXJtYWFzJyBIeWRyYSBidWlsZCBmYXJtIG9uIHg4Nl82NC1kYXJ3aW4gMTAuMi4wIHdpdGgKKwlHKysgNC42LjMuCiAKLQkqIGRvYy9iaXNvbi50ZXhpbmZvOiBJbmNsdWRlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20KLQlgZ3BsLnRleGknLgotCSogZG9jL2dwbC50ZXhpOiBBZGQgdG8gcGFja2FnZS4KKwkqIHRlc3RzL2hlYWRlcnMuYXQgKFNldmVyYWwgcGFyc2Vycyk6IEluY2x1ZGUgQVRfREFUQV9TT1VSQ0VfUFJPTE9HVUUKKwlpbiB0aGUgZmlsZXMgdG8gY29tcGlsZS4KKwkqIGRhdGEvbG9jYXRpb24uY2M6IERvIG5vdCBpbmNsdWRlIHR3aWNlIHN0cmluZyBhbmQgaW9zdHJlYW0gKG9uY2UKKwlieSBwb3NpdGlvbi5oaCwgYW5kIHRoZW4gYnkgbG9jYXRpb24uaGgpLgorCSogUkVBRE1FLWhhY2tpbmcgKFR5cGljYWwgZXJyb3JzKTogU29tZSBoaW50cyBmb3Igb3RoZXIgbWFpbnRhaW5lcnMuCiAKLTIwMDEtMDgtMTAgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisyMDEyLTEwLTAzICBUaGVvcGhpbGUgUmFucXVldCAgPHRoZW9waGlsZS5yYW5xdWV0QGdtYWlsLmNvbT4KIAotCSogc3JjL3ByaW50X2dyYXBoLmg6IEZpeC4KLQkqIHNyYy9yZWFkZXIuYyAocmVhZF9kZWNsYXJhdGlvbnMpOiBVc2UgcGFyc2VfaGVhZGVyX2V4dGVuc2lvbl9kZWNsICgpLgorCW1haW50OiBmaXggYW4gZXJyb25lb3VzIGluY2x1ZGUKKwlUaGlzIGZpeGVzIHRlc3QgMTMwIChTZXZlcmFsIHBhcnNlcnMpLgogCi0yMDAxLTA4LTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwkqIGRhdGEvbG9jYXRpb24uY2M6IEluY2x1ZGUgPGlvc3RyZWFtPiByYXRoZXIgdGhhbiA8aW9zZndkPiBzaW5jZQorCXdlIHJlYWxseSBuZWVkIDw8IG9uIHN0cmluZ3MgZm9yIGluc3RhbmNlLgorCSogTkVXUzogRG9jdW1lbnQgdGhpcy4KIAotCSogc3JjL3N5c3RlbS5oOiBQcm92aWRlIGRlZmF1bHQgZGVjbGFyYXRpb25zIGZvciBzdHBjcHksIHN0cm5kdXAsCi0JYW5kIHN0cm5sZW4uCisyMDEyLTEwLTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0yMDAxLTA4LTEwICBSb2JlcnQgQW5pc2tvICA8YW5pc2tvX3JAZXBpdGEuZnI+CisJdGVzdHM6IGNoZWNrIHRoYXQgaGVhZGVycyBhcmUgc2VsZiBjb250YWluZWQKKwlSZXBvcnRlZCBieSBBbGV4YW5kcmUgRHVyZXQtTHV0ei4KIAotCSogZG9jL2Jpc29uLnRleGluZm8gKExvY2F0aW9ucyk6IFVwZGF0ZSBAJCBzdHVmZi4KKwkqIHRlc3RzL2hlYWRlcnMuYXQgKFNldmVyYWwgcGFyc2Vycyk6IGhlcmUuCiAKLTIwMDEtMDgtMDkgIFJvYmVydCBBbmlza28gIDxhbmlza29fckBlcGl0YS5mcj4KKzIwMTItMTAtMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkqIHNyYy9iaXNvbi5zaW1wbGUgKFlZTExPQ19ERUZBVUxUKTogVXBkYXRlLgotCSh5eXBhcnNlKTogQWRqdXN0LgorCWRvYzogYWRkIG1pc3NpbmcgZG9jdW1lbnRhdGlvbiBmb3IgLS1yZXBvcnQKKwkqIGRvYy9iaXNvbi50ZXhpIChCaXNvbiBPcHRpb25zKTogRG9jdW1lbnQgLS1yZXBvcnQncyAic29sdmVkIiwgImFsbCIsCisJYW5kICJub25lIi4KIAotMjAwMS0wOC0wOCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKzIwMTItMTAtMDEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkqIGRvYy9iaXNvbi50ZXhpbmZvOiBDaGFuZ2UgQHNhbXB7JDxAZG90c3t9Pn0gdG8KLQlAc2FtcHskPEBkb3Rze30+QHZhcntufX0gaW4gU2VjdGlvbiBBY3Rpb25zIGluIE1pZC1SdWxlLgotCVJlcG9ydGVkIGJ5IEZhYnJpY2UgQmF1emFjLgorCWhlYWRlcnM6IG1vdmUgQ1BQIGd1YXJkcyBpbnRvIFlZXypfSU5DTFVERUQgdG8gYXZvaWQgY29sbGlzaW9ucworCVNlZSA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDEyLTA5L21zZzAwMDE2Lmh0bWw+LgogCi0yMDAxLTA4LTA4ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCSogZGF0YS9jLm00IChiNF9jcHBfZ3VhcmQpOiBQcmVwZW5kIFlZXyBhbmQgYXBwZW5kIF9JTkNMVURFRC4KKwkqIHRlc3RzL2hlYWRlcnMuYXQ6IEFkanVzdC4KKwkqIE5FV1MsIGRvYy9iaXNvbi50ZXhpOiBEb2N1bWVudC4KIAotCSogc3JjL3ZjZ19kZWZhdWx0Lmg6IFVzZSBOVUxMIGluc3RlYWQgb2YgMCB0byBpbml0aWFsaXplIHBvaW50ZXJzLgotCSogc3JjL3ZjZy5jIChvdXRwdXRfbm9kZSk6IEZpeC4KLQkqIHNyYy92Y2cuaDogQ2xlYW51cC4KLQkqIHNyYy9wcmludF9ncmFwaC5jOiBBZGQgY29tbWVudHMuCi0JKG5vZGVfb3V0cHV0X3NpemUpOiBOZXcgZ2xvYmFsIHZhcmlhYmxlLiBTaW1wbGlmeSB0aGUgZm9ybWF0dGluZyBvZgotCXRoZSBWQ0cgZ3JhcGggb3V0cHV0LgotCShwcmludF9hY3Rpb25zKTogVW51c2VkIGNvZGUgaXMgbm93IHVzZWQuIEl0IG5vdGlmaWVzIHRoZSBmaW5hbCBzdGF0ZQotCWFuZCBubyBhY3Rpb24gc3RhdGVzIGluIHRoZSBWQ0cgZ3JhcGguIEl0IGFsc28gZ2l2ZSB0aGUgcmVkdWNlIGFjdGlvbnMuCi0JVGhlIGBzaGlmdCBhbmQgZ290bycgZWRnZXMgYXJlIHJlZCBhbmQgdGhlIGBnbyB0byBzdGF0ZScgZWRnZXMgYXJlCi0JYmx1ZS4KLQlHZXQgdGhlIGN1cnJlbnQgbm9kZSBuYW1lIGFuZCBub2RlX29ic3RhY2sgYnkgYXJndW1lbnQuCi0JKG5vZGVfb2JzdGFjayk6IE5ldyB2YXJpYWJsZS4KLQkocHJpbnRfc3RhdGUpOiBNYW5hZ2Ugbm9kZV9vYnN0YWNrLgotCShwcmludF9jb3JlKTogVXNlIG5vZGVfb2JzdGFjayBnaXZlbiBieSBhcmd1bWVudC4KLQlBIG5vZGUgaXMgbm90IG9ubHkgY29tcHV0ZWQgaGVyZSBidXQgaW4gcHJpbnRfYWN0aW9ucyBhbHNvLgotCShwcmludF9ncmFwaCk6IENQUCBvdXQgdXNlbGVzcyBjb2RlIGluc3RlYWQgb2YgY29tbWVudGluZyBpdC4KKzIwMTItMTAtMDEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDEtMDgtMDcgIFBhc2NhbCBCYXJ0ICA8cGFzY2FsLmJhcnRAZXBpdGEuZnI+CisJbWlub3IgY2hhbmdlcy4KKwkqIE5FV1M6IFdvcmQgY2hhbmdlcy4KKwkqIGRvYy9iaXNvbi50ZXhpOiBTcGVsbCBjaGVjay4KKwlGaXggbWlub3IgaXNzdWVzLgorCSogdGVzdHMvaGVhZGVycy5hdDogQ29tbWVudCBhbmQgZm9ybWF0dGluZyBjaGFuZ2VzLgogCi0JKiB0ZXN0cy9hdGNvbmZpZy5pbiAoQ1BQRkxBR1MpOiBGaXguCisyMDEyLTA5LTI4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0yMDAxLTA4LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwlnbnVsaWI6IHVwZGF0ZQogCi0JKiBzcmMvcHJpbnRfZ3JhcGguYyAocXVvdGUpOiBOZXcuCi0JKHByaW50X2NvcmUpOiBVc2UgaXQuCisyMDEyLTA5LTI4ICBUaGVvcGhpbGUgUmFucXVldCAgPHRoZW9waGlsZS5yYW5xdWV0QGdtYWlsLmNvbT4KIAotMjAwMS0wOC0wNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+LCBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCWVycm9yczogaW5kZW50ICJ1c2VyIHRva2VuIG51bWJlciByZWRlY2xhcmF0aW9uIiBjb250ZXh0CisJVGhpcyBpcyB0aGUgY29udGludWF0aW9uIG9mIHRoZSB3b3JrIG9uIHRoZSByZWFkYWJpbGl0eSBvZiBlcnJvcnMKKwljb250ZXh0LgogCi0JKiBzcmMvdmNnLmMgKGNvbXBsYWluLmgpOiBJbmNsdWRlIGl0LgotCVVuZXBpdGFpemUgYHJldHVybicgaW52b2NhdGlvbnMuCi0JW05ERUJVR10gKG1haW4pOiBSZW1vdmUuCi0JKiBzcmMvdmNnLmggKG5vZGVfdCwgZWRnZV90LCBncmFwaF90KTogQ29uc3RpZnkgdGhlIGNoYXIgKiBtZW1iZXJzLgotCSogc3JjL2ZpbGVzLmMgKG9wZW5fZmlsZXMpOiBJbml0aWFsaXplIGdyYXBoX29ic3RhY2suCi0JKiBzcmMvcHJpbnRfZ3JhcGguYyAocHJpbnRfYWN0aW9ucyk6IENQUCBvdXQgdXNlbGVzcyBjb2RlLgotCShwcmludF9jb3JlKTogRG9uJ3Qgb3V0cHV0IHRoZSBsYXN0IGBcbicgaW4gbGFiZWxzLgotCVVzZSBgcXVvdGUnLgotCSogc3JjL2ZpbGVzLmMgKG91dHB1dF9maWxlcyk6IE91dHB1dCB0aGUgVkNHIGZpbGUuCi0JKiBzcmMvbWFpbi5jIChtYWluKTogSW52b2tlIHByaW50X2dyYXBoICgpOworCSogc3JjL3N5bXRhYi5jICh1c2VyX3Rva2VuX251bWJlcl9yZWRlY2xhcmF0aW9uKTogVXNlCisJY29tcGxhaW5fYXRfaW5kZW50IHRvIG91dHB1dCB3aXRoIGluY3JlYXNlZCBpbmRlbnRhdGlvbiBsZXZlbC4KKwkqIHRlc3RzL2lucHV0OmF0OiBBcHBseSB0aGlzIGNoYW5nZS4KIAotMjAwMS0wOC0wNiAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKzIwMTItMDktMjYgIFRoZW9waGlsZSBSYW5xdWV0ICA8cmFucXVldEBscmRlLmVwaXRhLmZyPgogCi0JQXV0b21hdG9uIFZDRyBncmFwaCBvdXRwdXQuCi0JVXNpbmcgb3B0aW9uIGBgLWcnJyBvciBsb25nIG9wdGlvbiBgYC0tZ3JhcGgnJywgeW91IGNhbiBnZW5lcmF0ZQotCWEgZ3JhbV9maWxlbmFtZS52Y2cgZmlsZSBjb250YWluaW5nIGEgVkNHIGRlc2NyaXB0aW9uIG9mIHRoZSBMQUxSICgxKQotCWF1dG9tYXRvbiBvZiB5b3VyIGdyYW1tYXIuCisJd2FybmluZ3M6IGludHJvZHVjZSAtV2RlcHJlY2F0ZWQgaW4gdGhlIHVzYWdlIGluZm8KKwlUaGUgZGVwcmVjYXRlZCB3YXJuaW5nLCBpbnRyb2R1Y2VkIHNvbWUgdGltZSBhZ28sIHdhcyBub3QgZGlzcGxheWVkIGluCisJdGhlIHVzYWdlIG1lc3NhZ2UuIFRoaXMgcGF0Y2ggYWRkcmVzc2VzIHRoZSBpc3N1ZS4KIAotCSogc3JjL21haW4uYzogQ2FsbCB0byBwcmludF9ncmFwaCgpIGZ1bmN0aW9uLgotCSogc3JjL2dldGFyZ3MuaDogVXBkYXRlLgotCSogc3JjL2dldGFyZ3MuYyAob3B0aW9ucyk6IFVwZGF0ZSB0byBjYXRjaCBgLWcnIGFuZCBgLS1ncmFwaCcgb3B0aW9ucy4KLQkoZ3JhcGhfZmxhZyk6IE5ldyBmbGFnLgotCShsb25nb3B0cyk6IFVwZGF0ZS4KLQkoZ2V0YXJncyk6IEFkZCBjYXNlIGBnJy4KLQkqIHNyYy9maWxlcy5jIChncmFwaF9vYnN0YWNrKTogTmV3IG9ic3RhY2sgc3RydWN0LgotCShvcGVuX2ZpbGVzKTogSW5pdGlhbGl6ZSBuZXcgb2JzdGFjay4KLQkob3V0cHV0X2ZpbGVzKTogU2F2ZXMgZ3JhcGhfb2JzdGFjayBpZiByZXF1aXJlZC4KLQkqIHNyYy9maWxlcy5oIChncmFwaF9vYnN0YWNrKTogTmV3IGV4dGVybiBkZWNsYXJhdGlvbi4KLQkqIHNyYy9NYWtlZmlsZS5hbTogQWRkIG5ldyBzb3VyY2UgZmlsZXMuCisJKiBzcmMvZ2V0YXJncy5jICh1c2FnZSk6IEluc2VydCBoZXJlLgogCi0yMDAxLTA4LTA2ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorMjAxMi0wOS0yNiAgVGhlb3BoaWxlIFJhbnF1ZXQgIDxyYW5xdWV0QGxyZGUuZXBpdGEuZnI+CiAKLQkqIHNyYy9wcmludF9ncmFwaC5jLCBzcmMvcHJpbnRfZ3JhcGguaCAoZ3JhcGgpOiBOZXcuCi0JKiBzcmMvdmNnLmg6IE5ldyBmaWxlLgotCSogc3JjL3ZjZy5jOiBOZXcgZmlsZSwgVkNHIGdyYXBoIGhhbmRsaW5nLgorCWVycm9yczogcHJlZml4IHRoZSBvdXRwdXQgd2l0aCAiZXJyb3I6ICIKKwlUaGlzIGltcHJvdmVzIHJlYWRhYmlsaXR5LiBUaGlzIGlzIGFsc28gd2hhdCBnY2MgZG9lcy4KIAotMjAwMS0wOC0wNiAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKwkqIE5FV1M6IERvY3VtZW50IHRoaXMgY2hhbmdlLgorCSogc3JjL2NvbXBsYWluLmMgKGNvbXBsYWluX2F0KTogUHJlZml4IGFsbCBlcnJvcnMgd2l0aCAiZXJyb3I6ICIuCisJKGNvbXBsYWluX2F0X2luZGVudCwgd2Fybl9hdF9pbmRlbnQpOiBEbyBub3QgcHJlZml4IHRoZSBjb250ZXh0CisJaW5mb3JtYXRpb24gb2YgZXJyb3JzLCB3aGljaCBhcmUgYmFzaWNhbGx5IGp1c3QgaW5kZW50ZWQgZXJyb3JzLgorCSogdGVzdHMvY29uZmxpY3RzLmF0LCB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdCwgdGVzdHMvaW5wdXQuYXQsCisJdGVzdHMvbmFtZWQtcmVmcy5hdCwgdGVzdHMvb3V0cHV0LmF0LCB0ZXN0cy9wdXNoLmF0LAorCXRlc3RzL3JlZ3Jlc3Npb24uYXQsIHRlc3RzL3NrZWxldG9ucy5hdDogQXBwbHkgdGhpcyBjaGFuZ2UuCiAKLQlBZGQgb2YgJXNvdXJjZV9leHRlbnNpb24gYW5kICVoZWFkZXJfZXh0ZW5zaW9uIHdoaWNoIHNwZWNpZnkKLQl0aGUgc291cmNlIG9yL2FuZCB0aGUgaGVhZGVyIG91dHB1dCBmaWxlIGV4dGVuc2lvbi4KKzIwMTItMDktMjYgIFRoZW9waGlsZSBSYW5xdWV0ICA8cmFucXVldEBscmRlLmVwaXRhLmZyPgogCi0JKiBzcmMvZmlsZXMuYyAoY29tcHV0ZV9iYXNlX25hbWVzKTogUmVtb3ZlIGluaXRpYWxpc2F0aW9uIG9mCi0Jc3JjX2V4dGVuc2lvbiBhbmQgaGVhZGVyX2V4dGVuc2lvbi4KLQkoY29tcHV0ZV9leHRzX2Zyb21fZ2YpOiBVcGRhdGUuCi0JKGNvbXB1dGVfZXh0c19mcm9tX3NyYyk6IFVwZGF0ZS4KLQkob3V0cHV0X2ZpbGVzKTogVXBkYXRlLgotCSogc3JjL3JlYWRlci5jIChwYXJzZV9oZWFkZXJfZXh0ZW5zaW9uX2RlY2wpOiBOZXcuCi0JKHBhcnNlX3NvdXJjZV9leHRlbnNpb25fZGVjbCk6IE5ldy4KLQkocmVhZF9kZWNsYXJhdGlvbnMpOiBOZXcgY2FzZSBzdGF0ZW1lbnRzIGZvciB0aGUgbmV3IHRva2Vucy4KLQkqIHNyYy9sZXguYyAocGVyY2VudF90YWJsZSk6IEFkZCBlbnRyaWVzIGZvciAlc291cmNlX2V4dGVuc2lvbgotCWFuZCAlaGVhZGVyX2V4dGVuc2lvbi4KLQkqIHNyYy9sZXguaCAodG9rZW5fZSk6IE5ldyB0b2tlbnMgdG9rX2hkcmV4dCBhbmQgdG9rX3NyY2V4dC4KKwllcnJvcnM6IGluZGVudCAiaW52YWxpZCB2YWx1ZSBmb3IgJWRlZmluZSIgY29udGV4dAorCVRoaXMgaXMgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgd29yayBvbiB0aGUgcmVhZGFiaWxpdHkgb2YgZXJyb3JzCisJICAgIGNvbnRleHQuCiAKLTIwMDEtMDgtMDYgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisJRm9yIGV4YW1wbGUsIHdoYXQgdXNlZCB0byBiZToKKwkgIGlucHV0Lnk6MS45LTI5OiBpbnZhbGlkIHZhbHVlIGZvciAlZGVmaW5lIHZhcmlhYmxlICdmb28nIDogJ2JhcicKKwkgIGlucHV0Lnk6MS45LTI5OiBhY2NlcHRlZCB2YWx1ZTogJ21vc3QnCiAKLQkqIGNvbmZpZ3VyZS5pbjogQnVtcCB0byAxLjI4Yy4KLQkqIGRvYy9iaXNvbi50ZXhpbmZvOiBUZXhpbmZvIHRoaW5naWVzLgorCWlzIG5vdzoKKwkgIGlucHV0Lnk6MS45LTI5OiBpbnZhbGlkIHZhbHVlIGZvciAlZGVmaW5lIHZhcmlhYmxlICdmb28nIDogJ2JhcicKKwkgIGlucHV0Lnk6MS45LTI5OiAgICAgYWNjZXB0ZWQgdmFsdWU6ICdtb3N0JwogCi0yMDAxLTA4LTA0ICBQYXNjYWwgQmFydCAgPHBhc2NhbC5iYXJ0QGVwaXRhLmZyPgorCSogc3JjL211c2NsZS10YWIuYyAobXVzY2xlX3BlcmNlbnRfZGVmaW5lX2NoZWNrX3ZhbHVlcyk6IFVzZQorCWNvbXBsYWluX2F0X2luZGVudCB0byBvdXRwdXQgd2l0aCBpbmNyZWFzZWQgaW5kZW50YXRpb24gbGV2ZWwuCisJKiB0ZXN0cy9pbnB1dDphdDogQXBwbHkgdGhpcyBjaGFuZ2UuCiAKLQkqIHRlc3RzL2F0Y29uZmlnLmluIChDUFBGTEFHUyk6IEFkZC4KLQkqIHRlc3RzL2NhbGMuYXQgKEFUX0NIRUNLKTogVXNlIENQUEZMQUdTLgorMjAxMi0wOS0yNiAgVGhlb3BoaWxlIFJhbnF1ZXQgIDxyYW5xdWV0QGxyZGUuZXBpdGEuZnI+CiAKLTIwMDEtMDgtMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCWVycm9yczogaW5kZW50ICIlZGVmaW5lIHZhciIgcmVkZWZpbml0aW9uIGNvbnRleHQKKwlUaGlzIGlzIHRoZSBjb250aW51YXRpb24gb2YgdGhlIHdvcmsgb24gdGhlIHJlYWRhYmlsaXR5IG9mIGVycm9ycworCWNvbnRleHQuCiAKLQlWZXJzaW9uIDEuMjhiLgorCUZvciBleGFtcGxlLCB3aGF0IHVzZWQgdG8gYmU6CisJICBpbnB1dC55OjIuOS0xMTogJWRlZmluZSB2YXJpYWJsZSAndmFyJyByZWRlZmluZWQKKwkgIGlucHV0Lnk6MS45LTExOiBwcmV2aW91cyBkZWZpbml0aW9uCiAKLTIwMDEtMDgtMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCWlzIG5vdzoKKwkgIGlucHV0Lnk6Mi45LTExOiAlZGVmaW5lIHZhcmlhYmxlICd2YXInIHJlZGVmaW5lZAorCSAgaW5wdXQueToxLjktMTE6ICAgICBwcmV2aW91cyBkZWZpbml0aW9uCiAKLQkqIHRlc3RzL01ha2VmaWxlLmFtIChjaGVjay1sb2NhbCk6IFNoaXAgdGVzdHN1aXRlLgotCSogdGVzdHMvY2FsYy5hdCAoX0FUX0RBVEFfQ0FMQ19ZKTogUHJvdG90eXBlIGFsbCB0aGUgZnVuY3Rpb25zLgotCUluY2x1ZGUgYHN0cmluZy5oJy4KKwkqIHNyYy9tdXNjbGUtdGFiLmMgKG11c2NsZV9wZXJjZW50X2RlZmluZV9pbnNlcnQpOiBVc2UKKwljb21wbGFpbl9hdF9pbmRlbnQgdG8gb3V0cHV0IHdpdGggaW5jcmVhc2VkIGluZGVudGF0aW9uIGxldmVsLgorCSogdGVzdHMvaW5wdXQuYXQ6IEFwcGx5IHRoaXMgY2hhbmdlLgogCi0yMDAxLTA4LTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMDktMjYgIFRoZW9waGlsZSBSYW5xdWV0ICA8cmFucXVldEBscmRlLmVwaXRhLmZyPgogCi0JKiBjb25maWd1cmUuaW46IFRyeSB1c2luZyAtV2Zvcm1hdCB3aGVuIGNvbXBpbGluZy4KKwllcnJvcnM6IGluZGVudCAic3ltYm9sIHJlZGVjbGFyYXRpb24iIGNvbnRleHQKKwlUaGlzIGlzIHRoZSBjb250aW51YXRpb24gb2YgdGhlIHdvcmsgb24gdGhlIHJlYWRhYmlsaXR5IG9mIGVycm9ycworCWNvbnRleHQuCiAKLTIwMDEtMDgtMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCUZvciBleGFtcGxlLCB3aGF0IHVzZWQgdG8gYmU6CisJICBpbnB1dC55OjUuMTAtMjQ6ICVwcmludGVyIHJlZGVjbGFyYXRpb24gZm9yIDxmaWVsZDI+CisJICBpbnB1dC55OjMuMTEtMjU6IHByZXZpb3VzIGRlY2xhcmF0aW9uCiAKLQkqIGNvbmZpZ3VyZS5pbjogQnVtcCB0byAxLjI4Yi4KKwlpcyBub3c6CisJICBpbnB1dC55OjUuMTAtMjQ6ICVwcmludGVyIHJlZGVjbGFyYXRpb24gZm9yIDxmaWVsZDI+CisJICBpbnB1dC55OjMuMTEtMjU6ICAgICBwcmV2aW91cyBkZWNsYXJhdGlvbgogCi0yMDAxLTA4LTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwkqIE5FV1M6IERvY3VtZW50IHRoaXMgY2hhbmdlLgorCSogc3JjL3N5bXRhYi5jIChzeW1ib2xfcmVkZWNsYXJhdGlvbiwgc2VtYW50aWNfdHlwZV9yZWRlY2xhcmF0aW9uLAorCXVzZXJfdG9rZW5fbnVtYmVyX3JlZGVjbGFyYXRpb24sIGRlZmF1bHRfdGFnZ2VkX2Rlc3RydWN0b3Jfc2V0LAorCWRlZmF1bHRfdGFnbGVzc19kZXN0cnVjdG9yX3NldCwgZGVmYXVsdF90YWdnZWRfcHJpbnRlcl9zZXQsCisJZGVmYXVsdF90YWdsZXNzX3ByaW50ZXJfc2V0KTogVXNlIGNvbXBsYWluX2F0X2luZGVudCB0bworCW91dHB1dCB3aXRoIGluY3JlYXNlZCBpbmRlbnRhdGlvbiBsZXZlbC4KKwkqIHRlc3RzL2lucHV0LmF0OiBBcHBseSB0aGlzIGNoYW5nZS4KIAotCSogc3JjL2NvbXBsYWluLmM6IEFkanVzdCBzdHJlcnJvcl9yIHBvcnRhYmlsaXR5IGlzc3Vlcy4KKzIwMTItMDktMjYgIFRoZW9waGlsZSBSYW5xdWV0ICA8cmFucXVldEBscmRlLmVwaXRhLmZyPgogCi0yMDAxLTA4LTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwllcnJvcnM6IGluZGVudCAicmVzdWx0IHR5cGUgY2xhc2giIGVycm9yIGNvbnRleHQKKwlUaGlzIHVzZWQgdG8gYmUgdGhlIGZvcm1hdCBvZiB0aGUgZXJyb3IgcmVwb3J0OgogCi0JVmVyc2lvbiAxLjI4YS4KKwkgIGlucHV0Lnk6Ni41LTEwOiByZXN1bHQgdHlwZSBjbGFzaCBvbiBtZXJnZSBmdW5jdGlvbiAnbWVyZ2UnOiBbLi4uXQorCSAgaW5wdXQueToyLjQtOTogcHJldmlvdXMgZGVjbGFyYXRpb24KIAotMjAwMS0wOC0wMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJSW4gb3JkZXIgdG8gZGlzdGluZ3Vpc2ggdGhlIGFjdHVhbCBlcnJvciBmcm9tIHRoZSBjb250ZXh0IHByb3ZpZGVkLCB3ZQorCXJhdGhlciB0aGlzIG5ldyBvdXRwdXQ6CiAKLQkqIHNyYy9nZXRhcmdzLmMsIHNyYy9nZXRhcmcuaCAoc2tlbGV0b24pKTogQ29uc3RpZnkuCi0JKiBzcmMvbGV4LmMgKGxpdGVyYWxjaGFyKTogQXZvaWQgbmFtZSBjbGFzaGVzIG9uIGBidWYnLgotCSogc3JjL2dldGFyZ3MuYzogSW5jbHVkZSBjb21wbGFpbi5oLgotCSogc3JjL2ZpbGVzLmMsIHNyYy9maWxlcy5oIChza2VsZXRvbl9maW5kKTogQXZvaWQgbmFtZSBjbGFzaGVzLgotCSogbGliL3F1b3RlYXJnLmMsIGxpYi9xdW90ZWFyZy5oOiBVcGRhdGUgZnJvbSBmaWxldXRpbHMgNC4xLgorCSAgaW5wdXQueTo2LjUtMTA6IHJlc3VsdCB0eXBlIGNsYXNoIG9uIG1lcmdlIGZ1bmN0aW9uICdtZXJnZSc6IFsuLi5dCisJICBpbnB1dC55OjIuNC05OiAgICAgcHJldmlvdXMgZGVjbGFyYXRpb24KIAotMjAwMS0wOC0wMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJQW5vdGhlciBwYXRjaCB3aWxsIGludHJvZHVjZSBhbiAiZXJyb3I6ICIgcHJlZml4IHRvIGFsbCBub24taW5kZW50ZWQKKwlsaW5lcywgZ2l2aW5nIHlldCBiZXR0ZXIgcmVhZGFiaWxpdHkgdG8gdGhlIHJlcG9ydHMuCiAKLQkqIHNyYy9yZWFkZXIuYyAocmVhZGdyYW0pOiBEaXNwbGF5IGhpZGRlbiBjaGFycyBpbiBlcnJvciBtZXNzYWdlcy4KKwkqIHNyYy9jb21wbGFpbi5oIChTVUJfSU5ERU5UKTogTW92ZSB0byBoZXJlLgorCSogc3JjL3JlYWRlci5jIChyZWNvcmRfbWVyZ2VfZnVuY3Rpb25fdHlwZSk6IFVzZSBjb21wbGFpbl9hdF9pbmRlbnQgdG8KKwlvdXRwdXQgd2l0aCBpbmNyZWFzZWQgaW5kZW50YXRpb24gbGV2ZWwuCisJKiBzcmMvc2Nhbi1jb2RlLmwgKFNVQl9JTkRFTlQpOiBSZW1vdmUgZnJvbSBoZXJlLgorCSogdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQ6IEFwcGx5IHRoaXMgY2hhbmdlLgogCi0yMDAxLTA4LTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMDktMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQlVcGRhdGUgdG8gZ2V0dGV4dCAwLjEwLjM5LgorCXJlZ2VuCiAKLTIwMDEtMDgtMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0wOS0yNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogbGliL3N0cnNwbi5jOiBOZXcuCisJeWFjYzogZml4IGhhbmRsaW5nIG9mIENQUCBndWFyZHMgd2hlbiBubyBoZWFkZXIgaXMgZ2VuZXJhdGVkCisJV2hlbiBubyBoZWFkZXIgd2FzIHRvIGJlIGdlbmVyYXRlZCwgQmlzb24gd291bGQgaXNzdWU6CiAKLTIwMDEtMDgtMDEgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisJICAvKiBJbiBhIGZ1dHVyZSByZWxlYXNlIG9mIEJpc29uLCB0aGlzIHNlY3Rpb24gd2lsbCBiZSByZXBsYWNlZAorCSAgICAgYnkgI2luY2x1ZGUgIiIuICAqLworCSAgI2lmbmRlZiBZWV8KKwkgICMgZGVmaW5lIFlZXwogCi0JKiBkb2MvYmlzb24udGV4aW5mbzogVXBkYXRlLgotCSogZG9jL2Jpc29uLjEgKG1hbmRvYyk6IFVwZGF0ZS4KLQkqIHNyYy9zeXN0ZW0uaCAoRVhUX0dVQVJEX0MsIEVYVF9TVFlQRV9IKTogUmVtb3ZlIC5jIGFuZCAuaC4KLQkqIHNyYy9maWxlcy5jOiBTdXBwb3J0IG91dHB1dCBmaWxlcyBleHRlbnNpb25zIGNvbXB1dGluZy4KLQkoc3JjX2V4dGVuc2lvbik6IE5ldyBzdGF0aWMgdmFyaWFibGUuCi0JKGhlYWRlcl9leHRlbnNpb24pOiBOZXcgc3RhdGljIHZhcmlhYmxlLgotCSh0cik6IE5ldyBmdW5jdGlvbi4KLQkoZ2V0X2V4dGVuc2lvbl9pbmRleCk6IE5ldyBmdW5jdGlvbiwgZ2V0cyB0aGUgaW5kZXggb2YgYW4gZXh0ZW5zaW9uCi0JZmlsZW5hbWUgaW4gYSBzdHJpbmcuCi0JKGNvbXB1dGVfZXh0c19mcm9tX2dmKTogTmV3IGZ1bmN0aW9uLCBjb21wdXRlcyBleHRlbnNpb25zIGZyb20gdGhlCi0JZ3JhbW1hciBmaWxlIGV4dGVuc2lvbi4KLQkoY29tcHV0ZV9leHRzX2Zyb21fc3JjKTogTmV3IGZ1bmN0aW9ucywgY29tcHV0ZXMgZXh0ZW5zaW9ucyBmcm9tIHRoZQotCUMgc291cmNlIGZpbGUgZXh0ZW5zaW9uLCBmaWxlIGdpdmVuIGJ5IGBgLW8nJyBvcHRpb24uCi0JKGNvbXB1dGVfYmFzZV9uYW1lcyk6IFVwZGF0ZS4KLQkob3V0cHV0X2ZpbGVzKTogVXBkYXRlLgorCUl0IG5vdyBwcm9wZXJseSBnZW5lcmF0ZXMgbm90aGluZy4KIAotMjAwMS0wOC0wMSAgUm9iZXJ0IEFuaXNrbyAgPGFuaXNrb19yQGVwaXRhLmZyPgorCSogZGF0YS9jLm00IChiNF9jcHBfZ3VhcmRfb3BlbiwgYjRfY3BwX2d1YXJkX2Nsb3NlKTogSXNzdWUgbm90aGluZyB3aGVuCisJdGhlIGZpbGUgbmFtZSBpcyBlbXB0eS4KKwkqIGRhdGEveWFjYy5jOiBEbyBub3QgZ2VuZXJhdGUgdGhlIGFib3ZlIGNvbW1lbnQgd2hlbiB0aGVyZSBpcyBubyBoZWFkZXIKKwl0byBnZW5lcmF0ZS4KKwkqIE5FV1M6IFVwZGF0ZS4KIAotCSogZG9jL2Jpc29uLnRleGk6IERvY3VtZW50IEAkLgotCShMb2NhdGlvbnMpOiBOZXcgc2VjdGlvbi4KKzIwMTItMDktMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDEtMDctMTggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCWdudWxpYjogdXBkYXRlCiAKLQkqIE1ha2VmaWxlLm1haW50LCBHTlVtYWtlZmlsZTogTmV3LCBmcm9tIEF1dG9jb25mIDIuNTIuCi0JKiBjb25maWcvcHJldi12ZXJzaW9uLnR4dCwgY29uZmlnL21vdmUtaWYtY2hhbmdlOiBOZXcuCi0JKiBNYWtlZmlsZS5hbTogQWRqdXN0LgorMjAxMi0wOS0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotMjAwMS0wNy0wOCAgUGFzY2FsIEJhcnQgIDxwYXNjYWwuYmFydEBlcGl0YS5mcj4KKwltYWludDogcmVtb3ZlIHVzZWxlc3MgZmlsZQorCSogZXh0ZXJuYWxzL2Jvb3RzdHJhcC5jZmc6IFJlbW92ZS4KKwlUaGlzIGZpbGUgd2FzIHVzZWQgYnkgYSBzcGVjaWZpYyBidWlsZCBzeXN0ZW0uCisJSXQgd2FzIGFkZGVkIHRvIHRoZSBtYXN0ZXIgcmVwb3NpdG9yeSBieSBhY2NpZGVudC4KIAotCSogc3JjL2Jpc29uLnNpbXBsZSAoeXlwYXJzZSk6IFN1cHByZXNzIHdhcm5pbmcgYGNvbXBhcmFpc29uCi0JYmV0d2VlbiBzaWduZWQgYW5kIHVuc2lnbmVkJy4KKzIwMTItMDktMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDEtMDctMDUgIFBhc2NhbCBCYXJ0ICA8cGFzY2FsLmJhcnRAZXBpdGEuZnI+CisJdXBkYXRlIGZpbGVzIHRvIGlnbm9yZQorCSogZG9jLy5naXRpZ25vcmU6IERvbid0IGlnbm9yZSBzcGxpdCBpbmZvIGZpbGVzIGFzIHdlIGRvbid0IHNwbGl0IG91cgorCWluZm8gZmlsZS4KKwlTZWUgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAxMi0wOC9tc2cwMDAwNi5odG1sPi4KIAotCSogc3JjL2dldGFyZ3MuaCAocmF3X2ZsYWcpOiBSZW1vdmUuCi0JKiBzcmMvZ2V0YXJncy5jOiBEaWUgb24gYC1yJy9gLS1yYXcnLgotCSogc3JjL2xleC5jIChwYXJzZV9wZXJjZW50X3Rva2VuKTogRGllIG9uIGAlcmF3Jy4KLQkqIHNyYy9yZWFkZXIuYyAob3V0cHV0X3Rva2VuX2RlZmluZXMpOiBTdXBwcmVzcyBjYWxsIHRvIGByYXdfZmxhZycuCi0JKiB0ZXN0cy9jYWxjLmF0OiBTdXBwcmVzcyB0ZXN0IHdpdGggb3B0aW9uIGAtLXJhdycuCisyMDEyLTA5LTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0yMDAxLTA3LTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwlyZW1vdmUgdXNlbGVzcyBpbmNsdWRlCisJKiBzcmMvc3lzdGVtLmg6IERvbid0IGluY2x1ZGUgc3lzL3R5cGVzLmguCisJUmVwb3J0ZWQgYnkgRXJpYyBCbGFrZSwKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDEyLTA5L21zZzAwMDAyLmh0bWw+LgorCShGVU5DVElPTl9QUklOVCk6IFJlbW92ZSwgdW51c2VkLgogCi0JKiBjb25maWcvOiBOZXcuCi0JKiBjb25maWd1cmUuaW46IFJlcXVpcmUgQXV0b2NvbmYgMi41MC4KLQlVcGRhdGUgdG8gZ2V0dGV4dCAwLjEwLjM4LgorMjAxMi0wOS0wMyAgSmltIE1leWVyaW5nICA8bWV5ZXJpbmdAcmVkaGF0LmNvbT4KIAotMjAwMS0wMy0xNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJdXNlIGxvY2FsZS1pbmRlcC4gY19pcyogZnVuY3Rpb25zIGZvciBwYXJzaW5nLCBub3QgaXNzcGFjZSwgaXNwcmludCBldGMKKwkqIHNyYy9wYXJzZS1ncmFtLnk6IEluY2x1ZGUgImMtY3R5cGUuaCIuCisJKGFkZF9wYXJhbSk6IFBhcnNlIHdpdGggY19pc3NwYWNlLCBub3QgaXNzcGFjZS4KKwkqIHNyYy9wYXJzZS1ncmFtLmM6IExpa2V3aXNlLgorCSogc3JjL3NjYW4tZ3JhbS5sOiBJbmNsdWRlIGMtY3R5cGUuaCwgbm90IGN0eXBlLmguCisJKFNDX0VTQ0FQRURfU1RSSU5HLFNDX0VTQ0FQRURfQ0hBUkFDVEVSKTogVXNlIGNfaXNzcGFjZSBhbmQgY19pc3ByaW50LAorCW5vdCBjdHlwZS5oJ3MgbG9jYWxlLWRlcGVuZGVudCBmdW5jdGlvbnMuCiAKLQkqIGRvYy9iaXNvbi50ZXhpbmZvOiBBTlNJZnkgdGhlIGV4YW1wbGVzLgorMjAxMi0wOS0wMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotMjAwMS0wMy0xNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJZ251bGliOiB1cGRhdGUKIAotCSogZ2V0YXJncy5jIChza2VsZXRvbik6IE5ldyB2YXJpYWJsZS4KLQkobG9uZ29wdHMpOiAtLXNrZWxldG9uIGlzIGEgbmV3IG9wdGlvbi4KLQkoc2hvcnRvcHRzLCBnZXRhcmdzKTogLVMgaXMgYSBuZXcgb3B0aW9uLgotCSogZ2V0YXJncy5oOiBEZWNsYXJlIHNrZWxldG9uLgotCSogb3V0cHV0LmMgKG91dHB1dF9wYXJzZXIpOiBVc2UgaXQuCisyMDEyLTA5LTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0yMDAxLTAzLTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwktLWhlbHA6IGluY2x1ZGUgYSBwbGFjZSB0byByZXBvcnQgdHJhbnNsYXRpb24gaXNzdWVzCisJaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDEyLTA4L21zZzAwMDA3Lmh0bWwKKwlzaG93cyB0aGF0IGl0IGlzIHVzZWZ1bCB0byBoZWxwIHVzZXJzIHJlcG9ydCB0cmFuc2xhdGlvbiBpc3N1ZXMuCisJV2hpbGUgYXQgaXQsIGluY2x1ZGUgb3RoZXIgaW5mb3JtYXRpdmUgYml0cyB0aGF0IHRoZSBjb3JldXRpbHMgc2hvd3MuCiAKLQkqIG00L3N0cmVycm9yX3IubTQ6IE5ldy4KLQkqIG00L2Vycm9yLm00OiBSdW4gQUNfRlVOQ19TVFJFUlJPUl9SLgotCSogbGliL2Vycm9yLmgsIGxpYi9lcnJvci5jOiBVcGRhdGUuCisJKiBzcmMvZ2V0YXJncy5jICh1c2FnZSk6IFJlcG9ydCBtb3JlIFVSTHMgd2hlcmUgdGhlIHVzZXIgY2FuCisJcmVmZXIgdG8uCisJTW9zdGx5IGNvcGllZC9wYXN0ZWQgZnJvbSBjb3JldXRpbHMnIGVtaXRfYW5jaWxsYXJ5X2luZm8gZnVuY3Rpb24uCiAKLTIwMDEtMDMtMTYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0wOC0zMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL2dldGFyZ3MuYyAobG9uZ29wdHMpOiBDbGVhbiB1cC4KKwl0ZXN0czogc3R5bGUgY2hhbmdlcworCSogdGVzdHMvdG9ydHVyZS5hdCAoQVRfREFUQV9TVEFDS19UT1JUVVJFKTogTTQgc3R5bGUgY2hhbmdlcyB0bworCWltcHJvdmUgcmVhZGFiaWxpdHkuCisJRml4IGFuIGFzc2VydGlvbiB3aGljaCwgYmVjYXVzZSBvZiBhIDw9IGluc3RlYWQgb2YgPT0sIGRpZCBub3QgY2hlY2sKKwluZXdfc3RhdHVzIGFzIHZpc2libHkgbWVhbnQuCisJKGdldF9hcmdzKTogTmV3LgogCi0yMDAxLTAyLTIxICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMDgtMzEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkqIHNyYy9yZWFkZXIuYyAoZ2Vuc3ltKTogYGdlbnN5bV9jb3VudCcgaXMgeW91ciBvd24uCi0JVXNlIGEgc3RhdGljIGJ1ZiB0byBjcmVhdGUgdGhlIHN5bWJvbCBuYW1lLCBhcyB0b2tlbl9idWZmZXIgaXMgbm8KLQlsb25nZXIgYSBidWZmZXIuCisJdGVzdHM6IGZpeCBwdXNoLXB1bGwgdGVzdAorCSogdGVzdHMvdG9ydHVyZS5hdDogJXB1c2gtcHVsbC1wYXJzZXIgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4KIAotMjAwMS0wMi0wOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTA4LTMxICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBzcmMvY29uZmxpY3RzLmMgKGNvbmZsaWN0X3JlcG9ydCk6IEJlIHN1cmUgbm90IHRvIGFwcGVuZCB0byByZXMKLQliZXR3ZWVuIHR3byBjYWxscywgd2hpY2ggY291bGQgaGFwcGVuIGlmIGJvdGggZmlyc3Qgc3ByaW50ZiB3ZXJlCi0Jc2tpcHBlZCwgYnV0IG5vdCB0aGUgZmlyc3QgY3AgKz0gc3RybGVuLgorCXlhY2MuYzogc3R5bGUgY2hhbmdlcworCSogZGF0YS95YWNjLmM6ICh5eXRva2VuKTogRGVmaW5lIHdpdGggaW5pdGlhbCB2YWx1ZS4KIAotMjAwMS0wMi0wOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTA4LTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBsaWIvbWVtY2hyLmMsIGxpYi9zdHBjcHkuYywgbGliL3N0cm5kdXAuYywgbGliL3N0cm5sZW4uYzoKLQlOZXcsIGZyb20gZmlsZXV0aWxzIDQuMC4zNy4KLQkqIGNvbmZpZ3VyZS5pbjogUmVxdWlyZSBBdXRvY29uZiAyLjQ5Yy4gIEkgdG9vayBzb21lIHRpbWUgYmVmb3JlCi0JbWFraW5nIHRoaXMgZGVjaXNpb24uICBUaGlzIGlzIHRoZSBvbmx5IHdheSBvdXQgZm9yIHBvcnRhYmlsaXR5Ci0JaXNzdWVzIGluIEJpc29uLCBpdCB3b3VsZCBtZWFuIHdheSB0b28gbXVjaCBkdXBsaWNhdGUgZWZmb3J0IHRvCi0JaW1wb3J0IGluIEJpc29uIGZlYXR1cmVzIGltcGxlbWVudGVkIGluIDIuNDljIHNpbmNlIDIuMTMuCi0JQUNfUkVQTEFDRV9GVU5DUyBhbmQgQUNfQ0hFQ0tfREVDTFMgdGhlIGZ1bmN0aW9ucyBhYm92ZS4KKwltYWludDogcG9zdC1yZWxlYXNlIGFkbWluaXN0cml2aWEKKwkqIE5FV1M6IEFkZCBoZWFkZXIgbGluZSBmb3IgbmV4dCByZWxlYXNlLgorCSogLnByZXYtdmVyc2lvbjogUmVjb3JkIHByZXZpb3VzIHZlcnNpb24uCisJKiBjZmcubWsgKG9sZF9ORVdTX2hhc2gpOiBBdXRvLXVwZGF0ZS4KIAotMjAwMS0wMi0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTA4LTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBsaWIvbWFsbG9jLmMsIGxpYi9yZWFsbG9jLmM6IE5ldywgZnJvbSB0aGUgZmlsZXV0aWxzIDQuMC4zNy4KLQkqIGxpYi94YWxsb2MuaCwgbGliL3htYWxsb2MuYzogVXBkYXRlLgorCXZlcnNpb24gMi42LjIKKwkqIE5FV1M6IFJlY29yZCByZWxlYXNlIGRhdGUuCiAKLTIwMDEtMDEtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0wOC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCUdldCByaWQgb2YgdGhlIGFkIGhvYyBoYW5kbGluZyBvZiB0b2tlbl9idWZmZXIgaW4gdGhlIHNjYW5uZXI6IHVzZQotCXRoZSBvYnN0YWNrcy4KKwlORVdTOiB1cGRhdGUuCisJKiBORVdTOiBDYXRjaCB1cCB3aXRoIHRoZSBvdGhlciBjaGFuZ2VzIGZyb20gMi42LjEuCiAKLQkqIHNyYy9sZXguYyAodG9rZW5fb2JzdGFjayk6IE5ldy4KLQkoaW5pdF9sZXgpOiBJbml0aWFsaXplIGl0LiAgTm8gbG9uZ2VyIGNhbGwuLi4KLQkoZ3Jvd190b2tlbl9idWZmZXIpOiB0aGlzLiAgUmVtb3ZlIGl0LgotCUFkanVzdCBhbGwgdGhlIHBsYWNlcyB3aGljaCB1c2VkIGl0IHRvIHVzZSB0aGUgb2JzdGFjay4KKzIwMTItMDgtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDEtMDEtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCXlhY2M6IHJlbW92ZSB0cmFpbGluZyBlbmQgb2YgbGluZSBhdCBlbmQgb2YgZmlsZQorCVRoZXJlIGFyZSBzdGlsbCBzcHVyaW91cyBzcGFjZXMgYXQgdGhlIGVuZCBvZiBzb21lIGxpbmVzLiAgQnV0IHRoaXMgaXMKKwlhZGRyZXNzZWQgaW4gdGhlIG1hc3RlciBicmFuY2gsIGFuZCBJIGFtIHJlbHVjdGFudCB0byB0cnkgdG8gYmFja3BvcnQKKwl0aGlzLgogCi0JKiBzcmMvbGV4Lmg6IFJlbmFtZSBhbGwgdGhlIHRva2VuczoKLQlzL1xiRU5ERklMRVxiL3Rva19lb2YvZzsKLQlzL1xiSURFTlRJRklFUlxiL3Rva19pZGVudGlmaWVyL2c7Ci0JZXRjLgotCUxldCB0aGVtIGJlIGVudW1zLCBub3QgI2RlZmluZSwgdG8gZWFzZSBkZWJ1Z2dpbmcuCi0JQWRqdXN0IGFsbCB0aGUgY29kZS4KKwkqIGRhdGEveWFjYy5jLCBkYXRhL2dsci5jLCBkYXRhL2xhbHIxLmNjLCBkYXRhL2dsci5jYzogaGVyZS4KKwkqIHRlc3RzL2NhbGMuYXQgKEFUX0NIRUNLX1NQQUNFUyk6IE5ldy4KKwlVc2UgaXQuCisJQmUgc3VyZSBub3QgdG8gaW50cm9kdWNlIHRyYWlsaW5nIGVtcHR5IGxpbmVzIGluIHRoZSAqLnkgZmlsZXMuCisJKiBORVdTOiBEb2MgaXQuCisJKiBjZmcubWsgKHN5bnRheC1jaGVjayk6IFJlbW92ZSB0aGUgZXhjZXB0aW9uLgogCi0yMDAxLTAxLTE4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMDgtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkqIHNyYy9sZXguaCAoTUFYVE9LRU4sIG1heHRva2VuLCBncm93X3Rva2VuX2J1ZmZlcik6IFJlbW92ZSwgcHJpdmF0ZS4KLQkqIHNyYy9sZXguYyAobWF4dG9rZW4sIGdyb3dfdG9rZW5fYnVmZmVyKTogU3RhdGljLgorCXRoYW5rczogZml4IGEgY29udHJpYnV0b3IgbmFtZQorCSogVEhBTktTOiBPbiBoaXMgcmVxdWVzdC4KIAotMjAwMS0wMS0xOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTA4LTAxICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JU2luY2Ugd2Ugbm93IHVzZSBvYnN0YWNrcywgbW9yZSAlIGRpcmVjdGl2ZXMgY2FuIGJlIGVuYWJsZWQuCisJZ251bGliOiB1cGRhdGUKIAotCSogc3JjL2xleC5jIChwZXJjZW50X3RhYmxlKTogQWxzbyBhY2NlcHQgYCV5YWNjJywKLQlgJWZpeGVkX291dHB1dF9maWxlcycsIGAlZGVmaW5lcycsIGAlbm9fcGFyc2VyJywgYCV2ZXJib3NlJywgYW5kCi0JYCVkZWJ1ZycuCi0JSGFuZGxlIHRoZSBhY3Rpb25zIGZvciBgJXNlbWFudGljX3BhcnNlcicgYW5kIGAlcHVyZV9wYXJzZXInIGhlcmUsCi0JaW5zdGVhZCBvZiByZXR1cm5pbmcgYSB0b2tlbi4KLQkqIHNyYy9sZXguaCAoU0VNQU5USUNfUEFSU0VSLCBQVVJFX1BBUlNFUik6IFJlbW92ZSwgdW51c2VkLgotCSogc3JjL3JlYWRlci5jIChyZWFkX2RlY2xhcmF0aW9ucyk6IEFkanVzdC4KLQkqIHNyYy9maWxlcy5jIChvcGVuX2ZpbGVzKTogRG9uJ3QgY2FsbCBgY29tcHV0ZV9iYXNlX25hbWVzJywgZG9uJ3QKLQljb21wdXRlIGBhdHRyc2ZpbGUnIHNpbmNlIHRoZXkgZGVwZW5kIHVwb24gZGF0YSB3aGljaCBtaWdodCBiZQotCSppbiogdGhlIGlucHV0IGZpbGUgbm93LgotCShvdXRwdXRfZmlsZXMpOiBEbyBpdCBoZXJlLgotCSogc3JjL291dHB1dC5jIChvdXRwdXRfaGVhZGVycyk6IERvY3VtZW50IHRoZSBmYWN0IHRoYXQgdGhpcyBwYXRjaAotCWludHJvZHVjZXMgYSBndWFyYW50ZWVkIFNFR1YgZm9yIHNlbWFudGljIHBhcnNlcnMuCi0JKiBkb2MvYmlzb24udGV4aW5mbzogRG9jdW1lbnQgdGhlbS4KLQkqIHRlc3RzL3N1aXRlLmF0OiBFeGVyY2lzZSB0aGVzZSAlb3B0aW9ucy4KKzIwMTItMDgtMDEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDAtMTItMjAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCXRlc3RzOiBzeW5jaCBsaW5lIC0+IHN5bmNsaW5lLCBmb3IgY29uc2lzdGVuY3kKKwkqIHRlc3RzL3N5bmNsaW5lcy5hdDogRG8gaXQsIGFzICJzeW5jbGluZSIgaXMgdXNlZCBjb25zaXN0ZW50bHkKKwlldmVyeXdoZXJlIGVsc2UgaW4gQmlzb24uCiAKLQlBbHNvIGhhbmRsZSB0aGUgb3V0cHV0IGZpbGUgKC0tdmVyYm9zZSkgd2l0aCBvYnN0YWNrcy4KKzIwMTItMDgtMDEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkqIGZpbGVzLmMgKGZvdXRwdXQpOiBSZW1vdmUuCi0JKG91dHB1dF9vYnN0YWNrKTogTmV3LgotCUFkanVzdCBhbGwgZGVwZW5kZW5jaWVzLgotCSogc3JjL2NvbmZsaWN0cy5jOiBSZXR1cm4gYSBzdHJpbmcuCi0JKiBzcmMvc3lzdGVtLmggKG9ic3RhY2tfZ3Jvd19zdHJpbmcpOiBSZW5hbWUgYXMuLi4KLQkob2JzdGFja19zZ3Jvdyk6IHRoaXMuICBCZSByZWFkeSB0byB3b3JrIHdpdGggbm9uIGxpdGVyYWxzLgotCShvYnN0YWNrX2Zncm93NCk6IE5ldy4KKwl0ZXN0czogc3luY2xpbmVzOiBzdHlsZSBjaGFuZ2VzCisJKiB0ZXN0cy9zeW5jbGluZXMuYXQgKEFUX1RFU1RfU1lOQ0xJTkUpOiBSZW5hbWUgYXMuLi4KKwkoQVRfVEVTVCk6IHRoaXMuCisJVXNlIHB1c2hkZWYvcG9wZGVmLgorCUZvcm1hdHRpbmcgY2hhbmdlcy4KKwlVc2UgJysnIGluc3RlYWQgb2YgJyonIHdoZXJlIGFwcHJvcHJpYXRlLgogCi0yMDAwLTEyLTIwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMDgtMDEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkqIHNyYy9maWxlcy5jIChvcGVuX2ZpbGVzKTogRml4IHRoZSBjb21wdXRhdGlvbiBvZiBzaG9ydF9iYXNlX25hbWUKLQlpbiB0aGUgY2FzZSBvZiBgLW8gZm9vLnRhYi5jJy4KKwl0ZXN0czogc3luY2xpbmVzOiBmaXggcGVybCBpbnZvY2F0aW9uCisJUmVwb3J0ZWQgYnkgU3VtbXVtIEJvbnVtLgogCi0yMDAwLTEyLTIwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwkqIHRlc3RzL3N5bmNsaW5lcy5hdDogRml4IFBlcmwgaW52b2NhdGlvbjogaXRzIC1mIGlzIG5vdCBsaWtlIHNlZCdzLgogCi0JKiBzcmMvcmVhZGVyLmMgKGNvcHlfc3RyaW5nLCBjb3B5X2NvbW1lbnQsIGNvcHlfY29tbWVudDIsIGNvcHlfYXQpCi0JKGNvcHlfZG9sbGFyKTogTm93IHRoYXQgZXZlcnl0aGluZyB1c2VzIG9ic3RhY2tzLCBnZXQgcmlkIG9mIHRoZQotCUZJTEUgKiBwYXJhbWV0ZXJzLgorMjAxMi0wOC0wMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotMjAwMC0xMi0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJcmVnZW4KIAotCSogc3JjL2ZpbGVzLmMgKG9wZW5fZmlsZXMpOiBBY3R1YWxseSB0aGUgYC5vdXRwdXQnIGZpbGUgaXMgYmFzZWQKLQlvbiB0aGUgc2hvcnRfYmFzZV9uYW1lLCBub3QgYmFzZV9uYW1lLgotCSogdGVzdHMvc3VpdGUuYXQgKENoZWNraW5nIG91dHB1dCBmaWxlIG5hbWVzKTogQWRqdXN0LgorMjAxMi0wOC0wMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotMjAwMC0xMi0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJYysrOiB0cmFpbGluZyBlbmQtb2YtbGluZXMgaW4gJXBhcnNlLXBhcmFtCisJKiBzcmMvcGFyc2UtZ3JhbS55IChhZGRfcGFyYW0pOiBObyBvbmx5IHNraXAgJyAnIGFuZCAnXHQnLCBza2lwIGFsbAorCWxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcy4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKExleCBhbmQgcGFyc2UgcGFyYW1zKTogQ2hlY2sgaXQuCisJKiBORVdTOiBEb2N1bWVudCBpdC4KIAotCSogc3JjL2Jpc29uLnMxOiBSZW1vdmUsIHdlIG5vdyB1c2UgZGlyZWN0bHkuLi4KLQkqIHNyYy9iaXNvbi5zaW1wbGU6IHRoaXMuCi0JKiBzcmMvTWFrZWZpbGUuYW06IFVzZSBwa2dkYXRhIGluc3RlYWQgb2YgZGF0YS4KKzIwMTItMDgtMDEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDAtMTItMjAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCXRlc3RzOiBzaW1wbGlmeQorCSogdGVzdHMvcmVncmVzc2lvbi5hdDogUmVtb3ZlIHVzZWxlc3MgY29tcGlsYXRpb25zOiBBVF9GVUxMX0NPTVBJTEUKKwlpbmNsdWRlcyB0aGUgY29tcGlsYXRpb24gYnkgYmlzb24uCiAKLQkqIHNyYy9maWxlcy5jIChndWFyZF9vYnN0YWNrKTogTmV3LgotCShvcGVuX2ZpbGVzKTogSW5pdGlhbGl6ZSBpdC4KLQkob3V0cHV0X2ZpbGVzKTogRHVtcCBpdC4uLgotCSogc3JjL2ZpbGVzLmg6IEV4cG9ydCBpdC4KLQkqIHNyYy9yZWFkZXIuYyAoY29weV9ndWFyZCk6IFVzZSBpdC4KKzIwMTItMDctMzEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDAtMTItMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCXVzZSBvYnN0YWNrX3ByaW50ZgorCVRoaXMgaXMgbm90IGp1c3QgbmljZXIsIGl0IGlzIGFsc28gbXVjaCBzYWZlciwgc2luY2Ugd2Ugd2VyZQorCXVzaW5nIHNwcmludGYuLi4KIAotCSogc3JjL2ZpbGVzLmMgKG91dGZpbGUsIGRlZnNmaWxlLCBhY3RmaWxlKTogUmVtb3ZlZCBhcyBnbG9iYWwKLQl2YXJzLgotCShvcGVuX2ZpbGVzKTogRG9uJ3QgY29tcHV0ZSB0aGVtLgotCShvdXRwdXRfZmlsZXMpOiBBZGp1c3QuCi0JKGJhc2VfbmFtZSwgc2hvcnRfYmFzZV9uYW1lKTogQmUgZ2xvYmFsLgorCSogYm9vdHN0cmFwLmNvbmY6IFJlcXVpcmUgaXQuCisJKiBzcmMvc3lzdGVtLmggKG9ic3RhY2tfZmdyb3cxLCBvYnN0YWNrX2Zncm93Miwgb2JzdGFja19mZ3JvdzMpCisJKG9ic3RhY2tfZmdyb3c0KTogUmVtb3ZlLgogCUFkanVzdCBkZXBlbmRlbmNpZXMuCiAKLTIwMDAtMTItMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0wNy0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL2ZpbGVzLmMgKHN0cnN1ZmZpeCk6IE5ldy4KLQkoc3RyaW5nYXBwZW5kKTogQmUganVzdCBsaWtlIHN0cmNhdCBidXQgYWxsb2NhdGUuCi0JKGJhc2VfbmFtZXMpOiBFdmUgb3V0IGZyb20gb3Blbl9maWxlcy4KLQlUcnkgdG8gc2ltcGxpZnkgdGhlIHJhdGhlciBoYWlyeSBjb21wdXRhdGlvbiBvZiBiYXNlX25hbWUgYW5kCi0Jc2hvcnRfYmFzZV9uYW1lLgotCShvcGVuX2ZpbGVzKTogVXNlIGl0LgotCSogdGVzdHMvc3VpdGUuYXQgKENoZWNraW5nIG91dHB1dCBmaWxlIG5hbWVzKTogTmV3IHRlc3QuCisJc2Nhbm5lcjogcmVzdG9yZSBhIG1pc3Npbmcgc3RhcnQgY29uZGl0aW9uCisJJCBmbGV4IHNyYy9zY2FuLXNrZWwubAorCXNyYy9zY2FuLXNrZWwubDoxNDU6IG11bHRpcGxlIDw8RU9GPj4gcnVsZXMgZm9yIHN0YXJ0IGNvbmRpdGlvbiBTQ19BVF9ESVJFQ1RJVkVfQVJHUworCXNyYy9zY2FuLXNrZWwubDoxNDU6IG11bHRpcGxlIDw8RU9GPj4gcnVsZXMgZm9yIHN0YXJ0IGNvbmRpdGlvbiBTQ19BVF9ESVJFQ1RJVkVfU0tJUF9XUworCVRoaXMgaXMgd2FybmluZywgYW5kIGl0IHNlZW1zIHRoZXJlIGFyZSBubyBtZWFucyB0byBtYWtlIGl0IGFuIGVycm9yLgogCi0yMDAwLTEyLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwkqIHNyYy9zY2FuLXNrZWwubDogUmVzdG9yZSB0aGUgc3RhcnQtY29uZGl0aW9uIElOSVRJQUwgZm9yIGFuIDw8RU9GPj4KKwljbGF1c2UuCiAKLQkqIHNyYy9zeXN0ZW0uaCAob2JzdGFja19ncm93X2xpdGVyYWxfc3RyaW5nKTogUmVuYW1lIGFzLi4uCi0JKG9ic3RhY2tfZ3Jvd19zdHJpbmcpOiB0aGlzLgotCSogc3JjL291dHB1dC5jIChvdXRwdXRfcGFyc2VyKTogUmVjb2duaXplIGAlJSBhY3Rpb25zJyBpbnN0ZWFkIG9mCi0JYCQnLgotCSogc3JjL2Jpc29uLnMxOiBzLyQvJSUgYWN0aW9ucy8uCi0JKiBzcmMvYmlzb24uaGFpcnk6IExpa2V3aXNlLgorMjAxMi0wNy0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotMjAwMC0xMi0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJZ251bGliOiB1cGRhdGUKIAotCSogc3JjL291dHB1dC5jIChvdXRwdXRfcGFyc2VyKTogQ29tcHV0ZSB0aGUgYCNsaW5lJyBsaW5lcyB3aGVuCi0JdGhlcmUgYXJlLgotCSogc3JjL01ha2VmaWxlLmFtIChiaXNvbi5zaW1wbGUpOiBCZSBhIHNpbXBsZSBjb3B5IG9mIGJpc29uLnMxLgotCVN1Z2dlc3RlZCBieSBIYW5zIEFiZXJnLgorMjAxMi0wNy0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotMjAwMC0xMi0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJbWFpbnQ6IHBvc3QtcmVsZWFzZSBhZG1pbmlzdHJpdmlhCisJKiBORVdTOiBBZGQgaGVhZGVyIGxpbmUgZm9yIG5leHQgcmVsZWFzZS4KKwkqIC5wcmV2LXZlcnNpb246IFJlY29yZCBwcmV2aW91cyB2ZXJzaW9uLgorCSogY2ZnLm1rIChvbGRfTkVXU19oYXNoKTogQXV0by11cGRhdGUuCiAKLQlMZXQgdGhlIGhhbmRsaW5nIG9mIHRoZSBza2VsZXRvbiBmaWxlcyBiZSBsb2NhbCB0byB0aGUgcHJvY2VkdXJlcwotCXRoYXQgdXNlIGl0LgorMjAxMi0wNy0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL2ZpbGVzLmMgKHhmb3BlbiwgeGZjbG9zZSwgc2tlbGV0b25fZmluZCwgZ3VhcmRmaWxlKTogTm8KLQlsb25nZXIgc3RhdGljLgotCShmcGFyc2VyLCBvcGVuX2V4dHJhX2ZpbGVzKTogUmVtb3ZlLgotCShvcGVuX2ZpbGVzLCBvdXRwdXRfZmlsZXMpOiBEb24ndCB0YWtlIGNhcmUgb2YgZnBhcnNlci4KLQkqIHNyYy9maWxlcy5oOiBBZGp1c3QuCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9wYXJzZXIpOiBPcGVuIGFuZCBjbG9zZSB0aGUgZmlsZSB0byB0aGUKLQlza2VsZXRvbi4KLQkqIHNyYy9yZWFkZXIuYyAocmVhZF9kZWNsYXJhdGlvbnMpOiBXaGVuICVzZW1hbnRpY19wYXJzZXIsIG9wZW4KLQlmZ3VhcmQuCisJdmVyc2lvbiAyLjYuMQorCSogTkVXUzogUmVjb3JkIHJlbGVhc2UgZGF0ZS4KIAotMjAwMC0xMi0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTA3LTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBzcmMvZmlsZS5oIChCSVNPTl9TSU1QTEUsIEJJU09OX0hBSVJZKTogTW92ZSBmcm9tIGhlcmUuLi4KLQkqIHNyYy9zeXN0ZW0uaCAoQklTT05fU0lNUExFLCBCSVNPTl9IQUlSWSk6IC4uLiB0byBoZXJlLgorCWdudWxpYjogdXBkYXRlCiAKLTIwMDAtMTItMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0wNy0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL2ZpbGVzLmMgKG9wZW5fZmlsZXMpOiBZaXBlZSEgIFdlIG5vIGxvbmdlciBuZWVkIGFsbCB0aGUgY29kZQotCWxvb2tpbmcgZm9yIGAvdG1wJyBzaW5jZSB3ZSBoYXZlIG5vIHRtcCBmaWxlLgorCW1haW50OiBmaXggc29tZSBzeW50YXgtY2hlY2sgaXNzdWVzCisJKiBjZmcubWs6IE51a2UgdGhlIGZvbGxvd2luZyB3YXJuaW5ncyB3aGljaCBhcmUgY29uZnVzZWQgYnkgb3VyCisJdGV4dCByZXBvcnRzICh0aGF0IHN0YXRlIHRoYXQgdGhlIGVycm9yIHRva2VuIGlzIG51bWJlciAyNTYpLgorCSAgcHJvaGliaXRfbWFnaWNfbnVtYmVyX2V4aXQKKwkgIC4uLy4uL2RvYy9iaXNvbi50ZXhpOjgxNzA6ZXJyb3IgKDI1NikKKwkgIC4uLy4uL3Rlc3RzL2NvbmZsaWN0cy5hdDo1NzA6ZXJyb3IgKDI1NikKKwkgIC4uLy4uL3Rlc3RzL2NvbmZsaWN0cy5hdDo2NzM6ZXJyb3IgKDI1NikKKwkgIC4uLy4uL3Rlc3RzL2NvbmZsaWN0cy5hdDo4MTE6ZXJyb3IgKDI1NikKKwkgIC4uLy4uL3Rlc3RzL2NvbmZsaWN0cy5hdDoxMTU0OmVycm9yICgyNTYpCisJICAuLi8uLi90ZXN0cy9yZWdyZXNzaW9uLmF0OjI4MTplcnJvciAoMjU2KQorCSAgLi4vLi4vdGVzdHMvcmVncmVzc2lvbi5hdDo1ODI6ZXJyb3IgKDI1NikKKwkgIG1haW50Lm1rOiB1c2UgRVhJVF8qIHZhbHVlcyByYXRoZXIgdGhhbiBtYWdpYyBudW1iZXIKIAotMjAwMC0xMi0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTA3LTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBzcmMvc3lzdGVtLmggKEVYVF9UQUIsIEVYVF9PVVRQVVQsIEVYVF9TVFlQRV9ILCBFWFRfR1VBUkRfQyk6Ci0JTmV3IG1hY3Jvcy4KLQkqIHNyYy9maWxlcy5jIChvcGVuX2ZpbGVzKTogTGVzcyBkZXBlbmRlbmN5IG9uIE1TRE9TIGV0Yy4KKwl0ZXN0czogZG8gbm90IGRlcGVuZCBvbiBfX2NwbHVzcGx1cyB0byBkZWNpZGUgZm9yIEMrKyBvciBDIG91dHB1dAorCVNpbmNlIHdlIGRvIHN1cHBvcnQgY29tcGlsaW5nIEMgY29kZSB3aXRoIGEgQysrIGNvbXBpbGVyLgogCi0yMDAwLTEyLTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwkqIHRlc3RzL2FjdGlvbnMuYXQgKFF1YWxpZmllZCAkJCBpbiBhY3Rpb25zKTogVXNlIEFUX1NLRUxfQ0NfSUYuCiAKLQkqIHNyYy9iaXNvbi5zMSAoWVlMTE9DX0RFRkFVTFQpOiBOZXcgbWFjcm8uCi0JUHJvdmlkZSBhIGRlZmF1bHQgZGVmaW5pdGlvbi4KLQlVc2UgaXQgd2hlbiBleGVjdXRpbmcgdGhlIGRlZmF1bHQgQCBhY3Rpb24uCi0JKiBzcmMvcmVhZGVyLmMgKHJlYWRlcl9vdXRwdXRfeXlsc3ApOiBObyBsb25nZXIgaW5jbHVkZQotCWB0aW1lc3RhbXAnIGFuZCBgdGV4dCcgaW4gdGhlIGRlZmF1bHQgWVlMVFlQRS4KKzIwMTItMDctMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDAtMTItMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCXJlZ2VuCiAKLQkqIHNyYy9yZWFkZXIuYyAoY29weV9kZWZpbml0aW9uLCBwYXJzZV91bmlvbl9kZWNsLCBjb3B5X2FjdGlvbikKLQkoY29weV9ndWFyZCk6IFF1b3RlIHRoZSBmaWxlIG5hbWVzLgotCVJlcG9ydGVkIGJ5IExhdXJlbnQgTWFzY2hlcnBhLgorMjAxMi0wNy0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotMjAwMC0xMi0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJc3luY2xpbmVzOiByZW1vdmUgc3B1cmlvdXMgZW1wdHkgbGluZQorCSogZGF0YS9iaXNvbi5tNCAoYjRfc3luY2xpbmUpOiBEbyBub3Qgc3RhcnQgd2l0aCBhbiBlbXB0eSBsaW5lLgogCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9oZWFkZXJzLCBvdXRwdXRfcHJvZ3JhbSwgb3V0cHV0KTogQmUgc3VyZQotCXRvIGVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgd2hlbiBvdXRwdXR0aW5nIGZpbGVuYW1lcy4KLQkoQUNUU1RSX1BST0xPR1VFLCBBQ1RTVFJfRVBJTE9HVUUpOiBSZW1vdmUuCi0JKG91dHB1dF9oZWFkZXJzKTogRG9uJ3QgZGVwZW5kIG9uIHRoZW0sIFVzZSBBQ1RTVFIuCisyMDEyLTA3LTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0yMDAwLTExLTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwlhbHNvIHN1cHBvcnQgJDxmb28+JCBpbiB0aGUgJWluaXRpYWwtYWN0aW9uCisJc2Nhbi1jb2RlLmwgaXMgYWxyZWFkeSBwYXNzaW5nIGFyZ3VtZW50IHRvIGI0X2RvbGxhcl9kb2xsYXIgZm9yIHRoZQorCWluaXRpYWwgYWN0b24sIGJ1dCBpdHMgZGVmaW5pdGlvbiAob2YgYjRfZG9sbGFyX2RvbGxhcikgZG9lcyBub3QgdXNlCisJdGhpcyBhcmd1bWVudC4KIAotCSogbGliL29ic3RhY2suaDogRm9ybWF0dGluZyBjaGFuZ2VzLgotCShvYnN0YWNrX2dyb3csIG9ic3RhY2tfZ3JvdzApOiBEb24ndCBjYXN0IFdIRVJFIGF0IGFsbDogaXQKLQlwcmV2ZW50cyB0eXBlIGNoZWNraW5nLgotCShvYnN0YWNrX3B0cl9ncm93LCBvYnN0YWNrX3B0cl9ncm93X2Zhc3QpOiBXaGVuIGFzc2lnbmluZywgZG9uJ3QKLQljYXN0IHRoZSB2YWx1ZSB0byAodm9pZCAqKTogYXNzaWduaW5nIGEgYGZvbyAqJyB0byBhIGB2b2lkIConCi0JdmFyaWFibGUgaXMgdmFsaWQuCi0JKG9ic3RhY2tfaW50X2dyb3csIG9ic3RhY2tfaW50X2dyb3dfZmFzdCk6IERvbid0IGNhc3QgQUlOVCB0byBpbnQuCi0JKiBzcmMvcmVhZGVyLmMgKHBhcnNlX3VuaW9uX2RlY2wpOiBUeXBvOiB1c2Ugb2JzdGFja18xZ3JvdyB0bwotCWFwcGVuZCBjaGFyYWN0ZXJzLgorCUdlbmVyYWxpemUgdGhpcyBkZWZpbml0aW9uLCBhbmQgdXNlIGl0IGZvciB0aGUgJWluaXRpYWwtYWN0aW9uIHRvby4KIAotMjAwMC0xMS0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJKiBkYXRhL2MubTQgKGI0X2RvbGxhcl9kb2xsYXJfLCBiNF9kb2xsYXJfcHVzaGRlZiwgYjRfZG9sbGFyX3BvcGRlZik6CisJSW5zdGVhZCBvZiBleHBlY3RpbmcgYSBwb2ludGVyLCByZXF1aXJlIGEgdmFsdWUsIGFuZCB1c2UgIi4iLgorCVNpbmNlIHRoZXkgYXJlIG5vdyBnZW5lcmljIGVub3VnaCwgbW92ZSB0by4uLgorCSogZGF0YS9jLWxpa2UubTQ6IHRoaXMgbmV3IGZpbGUuCisJKiBkYXRhL2MubTQsIGRhdGEvamF2YS5tNDogTG9hZCBpdC4KKwkqIGRhdGEvZ2xyLmMsIGRhdGEvbGFscjEuY2MsIGRhdGEvbGFscjEuamF2YSwgZGF0YS95YWNjLmM6IFVzZQorCWI0X2RvbGxhcl9wdXNoZGVmIGZvciB0aGUgJWluaXRpYWwtYWN0aW9uLgorCSogdGVzdHMvYWN0aW9ucy5hdDogQ2hlY2sgdGhhdC4KKwkqIGRhdGEvTWFrZWZpbGUuYW06IEFkanVzdC4KKwkqIE5FV1MsIGRvYy9iaXNvbi50ZXhpOiBEb2N1bWVudC4KIAotCSogdGVzdHMvTWFrZWZpbGUuYW0gKHN1aXRlLm00LCByZWdyZXNzaW9uLm00LCBjYWxjLm00KTogUmVuYW1lCi0JYXMuLi4KLQkoc3VpdGUubTQsIHJlZ3Jlc3Npb24ubTQsIGNhbGMubTQpOiB0aGVzZS4KLQkqIHRlc3RzL2F0Z2VuZXJhbC5tNDogVXBkYXRlIGZyb20gQ1ZTIEF1dG9jb25mLgorMjAxMi0wNy0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotMjAwMC0xMS0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHRlc3RzL3JlZ3Jlc3Npb24ubTQgKCV1bmlvbiBhbmQgLS1kZWZpbmVzKTogTmV3IHRlc3QsCi0JZGVtb25zdHJhdGluZyBhIGN1cnJlbnQgYnVnIGluIHRoZSBvYnN0YWNrIGltcGxlbWVudGF0aW9uLgotCi0yMDAwLTExLTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2Jpc29uLnMxIChfWVlfREVDTF9WQVJJQUJMRVMsIFlZX0RFQ0xfVkFSSUFCTEVTKTogTmV3CisJc2tlbGV0b25zOiBiNF9kb2xsYXJfcHVzaGRlZiBhbmQgcG9wZGVmIHRvIHNpbXBpZnkgY29tcGxleCBkZWZpbml0aW9ucworCU00IGlzIHJlYWxseSBtYWtpbmcgaXQgdXNlbGVzc2x5IGhhcmQgdG8gZGVmaW5lIG1hY3JvcyB0aGF0IGRlZmluZQogCW1hY3Jvcy4KLQlVc2UgdGhlbSB0byBkZWNsYXJlIHRoZSB2YXJpYWJsZXMgd2hpY2ggYXJlIGdsb2JhbCBvciBsb2NhbCB0bwotCWB5eXBhcnNlJy4KKwkqIGRhdGEvYy5tNCAoYjRfZG9sbGFyX3B1c2hkZWYsIGI0X2RvbGxhcl9wb3BkZWYpOiBOZXcuCisJVXNlIGl0LgogCi0yMDAwLTExLTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMDctMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkqIGFjY29uZmlnLmg6IFJlbW92ZSwgbm8gbG9uZ2VyIHVzZWQuCisJcmVnZW4KIAotMjAwMC0xMS0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTA3LTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBzcmM6IHMvQ29weXJpZ2h0IChDKS9Db3B5cmlnaHQvZy4KKwlwcmludGVyL2Rlc3RydWN0b3I6IHRyYW5zbGF0ZSBvbmx5IG9uY2UKKwlDdXJyZW50bHkgIiVwcmludGVyIHsuLi59IGEgYiBjIGQgZSBmIiB0cmFuc2xhdGVzIHRoZSB7Li4ufSBzaXggdGltZXMuCisJTm90IG9ubHkgaXMgdGhpcyBiYWQgZm9yIHRpbWUgYW5kIHNwYWNlLCBpdCBhbHNvIGlzc3VlcyBzaXggdGltZXMgdGhlCisJc2FtZSB3YXJuaW5ncy4KIAotMjAwMC0xMS0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJKiBzcmMvc3ltbGlzdC5oLCBzcmMvc3ltbGlzdC5jIChzeW1ib2xfbGlzdF9kZXN0cnVjdG9yX3NldCkKKwkoc3ltYm9sX2xpc3RfcHJpbnRlcl9zZXQpOiBUYWtlIHRoZSBhY3Rpb24gYXMgY29kZV9wcm9wcyBpbnN0ZWFkIG9mCisJY29uc3QgY2hhciAqLgorCSogc3JjL3BhcnNlLWdyYW0ueTogVHJhbnNsYXRlIHRoZXNlIGFjdGlvbnMgaGVyZS4KKwkqIHNyYy9zY2FuLWNvZGUuaDogQ29tbWVudCBjaGFuZ2UuCisJKiB0ZXN0cy9pbnB1dC5hdDogQ2hlY2sgdGhhdCB3YXJuaW5ncyBhcmUgaXNzdWVkIG9ubHkgb25jZS4KIAotCSogc3JjL3JlYWRlci5jIChyZWFkZXIpOiAjZGVmaW5lIFlZTFNQX05FRURFRCB0byAxIGluc3RlYWQgb2YganVzdAotCWRlZmluaW5nLgotCSogc3JjL2Jpc29uLnMxOiBzLyNpZmRlZiBZWUxTUF9ORUVERUQvI2lmIFlZTFNQX05FRURFRC8uCisyMDEyLTA3LTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0yMDAwLTExLTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwlmYWN0b3IgdGhlIGhhbmRsaW5nIG9mIG00IGVzY2FwaW5nCisJVGhlIGNvbnZlcnNpb24gZnJvbSBAIHRvIEBAIGFuZCBzbyBmb3J0aCBpcyBjb2RlZCBpcyB0b28gbWFueQorCWRpZmZlcmVudCBwbGFjZXMuICBGYWN0b3IsIGEgYml0LgogCi0JKiBzcmMvYmlzb24uczEgKFlZTEVYKTogVXNlICNpZiBpbnN0ZWFkIG9mICNpZmRlZi4KLQlNZXJnZSBpbiBhIHNpbmdsZSBDUFAgaWYvZWxzZS4KKwkqIHNyYy9zY2FuLWNvZGUubDogSW5zdGVhZCBvZiBkdXBsaWNhdGluZyB0aGUgbG9naWMgb2Ygb2JzdGFja19lc2NhcGUsCisJdXNlIGl0LgorCUl0IHN1cmUgaXMgbGVzcyBlZmZpY2llbnQsIGJ1dCB0aGUgY29zdCBpcyBuZWdsaWdpYmxlLgorCVRoaXMgYWxsb3dzIHRvIGZhY3RvciBydWxlcyB0aGF0IGFyZSBhbGlrZS4KKwlBbmQgdG8gZmFjdG9yIHNvbWUgc3RhcnQtY29uZGl0aW9uIGNsYXVzZXMuCisJKiB0ZXN0cy9pbnB1dC5hdCAoU3RyYXkgJCBvciBAKTogTmV3LgorCSogTkVXUzogRG9jdW1lbnQgaXQuCiAKLTIwMDAtMTEtMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0wNy0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL291dHB1dC5jIChvdXRwdXQpOiBSZW1vdmUgdXNlbGVzcyB2YXJpYWJsZXMuCi0JKiBsaWIvb2JzdGFjay5jIChvYnN0YWNrX2dyb3csIG9ic3RhY2tfZ3JvdzApOiBSZW5hbWUgdGhlIHNlY29uZAotCWFyZ3VtZW50IGBkYXRhJyBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgcHJvdG90eXBlcy4KLQlRdWFsaWZ5IGl0IGBjb25zdCcuCi0JKG9ic3RhY2tfY29weSwgb2JzdGFja19jb3B5MCk6IFJlbmFtZSB0aGUgc2Vjb25kIGFyZ3VtZW50IGFzCi0JYGFkZHJlc3MnIGZvciBjb25zaXN0ZW5jeS4gIFF1YWxpZnkgaXQgYGNvbnN0Jy4KLQkqIGxpYi9vYnN0YWNrLmggKG9ic3RhY2tfY29weSwgb2JzdGFja19jb3B5MCwgb2JzdGFja19ncm93KQotCShvYnN0YWNrX2dyb3cwLCBvYnN0YWNrX3B0cl9ncm93LCBvYnN0YWNrX3B0cl9ncm93X2Zhc3QpOiBRdWFsaWZ5Ci0JYGNvbnN0JyB0aGVpciBpbnB1dCBhcmd1bWVudCAoYGRhdGEnIG9yIGBhZGRyZXNzJykuCi0JQWRqdXN0IHRoZSBjb3JyZXNwb25kaW5nIG1hY3JvcyB0byBpbmNsdWRlIGBjb25zdCcgaW4gY2FzdHMuCisJbmV3czogc2NoZWR1bGUgdGhlIHJlbW92YWwgb2YgdGhlICI7IiBoYWNrCisJc2Nhbi1jb2RlLmwgaXMgc2lnbmlmaWNhbnRseSBtb3JlIGNvbXBsZXggYmVjYXVzZSBvZiB0aGlzLgogCi0yMDAwLTExLTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwkqIE5FV1M6IERvYyBpdC4KIAotCSogc3JjL01ha2VmaWxlLmFtIChJTkNMVURFUyk6IHMvUEZJTEUvQklTT05fU0lNUExFLy4KLQlzL1BGSUxFMS9CSVNPTl9IQUlSWS8uCi0JQWRqdXN0IGRlcGVuZGVuY2llcy4KKzIwMTItMDctMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDAtMTEtMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCXN0eWxlIGNoYW5nZXMgaW4gdGhlIHNjYW5uZXJzCisJKiBzcmMvc2Nhbi1jb2RlLmwsIHNyYy9zY2FuLXNrZWwubDogVXNlIGEgbW9yZSB0cmFkaXRpb25hbCBpbmRlbnRhdGlvbgorCXN0eWxlIGZvciBzdGFydC1jb25kaXRpb25zLgorCVByZWZlciAiY29udGludWUiIHRvIGEgY29tbWVudCwgZm9yIGVtcHR5IGFjdGlvbnMuCisJU3RyaXAgdXNlbGVzcyB7fS4KKwlSZW1vdmUgdXNlbGVzcyBzdGFydC1jb25kaXRpb24gY2xhdXNlcy4KIAotCUZvciBzb21lIHJlYXNvbiwgdGhpcyB3YXMgbm90IGFwcGxpZWQuCisyMDEyLTA3LTI2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBzcmMvZmlsZXMuYyBbVk1TXTogTm8gbG9uZ2VyIGluY2x1ZGUgYHNzZGVmLmgnLCBubyBsb25nZXIgZGVmaW5lCi0JYHVubGluayc6IGl0J3Mgbm8gbG9uZ2VyIHVzZWQuCisJcmVnZW4KIAotMjAwMC0xMS0wMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTA3LTI2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBzcmMvZmlsZXMuYyAoc2tlbGV0b25fZmluZCk6IE5ldyBmdW5jdGlvbiwgZXZlZCBvdXQgb2YuLi4KLQkob3Blbl9maWxlcywgb3Blbl9leHRyYV9maWxlcyk6IGhlcmUuCisJc3VwcG9ydCAkPHRhZz4kIGluIHByaW50ZXJzIGFuZCBkZXN0cnVjdG9ycworCSogc3JjL3NjYW4tY29kZS5sIChTQ19TWU1CT0xfQUNUSU9OKTogQWNjZXB0ICQ8dGFnPiQsIG5vdCBqdXN0ICQkLgorCSogZGF0YS9jLm00IChiNF9kb2xsYXJfZG9sbGFyXyk6IE5ldy4KKwkoYjRfc3ltYm9sX2FjdGlvbnMpOiBMZXQgYjRfZG9sbGFyX2RvbGxhciB1c2UgYjRfZG9sbGFyX2RvbGxhcl8uCisJKiBORVdTLCBkb2MvYmlzb24udGV4aTogRG9jdW1lbnQgaXQuCisJKiB0ZXN0cy9hY3Rpb25zLmF0OiBDaGVjayB0aGlzIGZvciBDIGFuZCBDKysuCiAKLTIwMDAtMTEtMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0wNy0yNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCURvbid0IHVzZSBgYXRleGl0Jy4KKwlzY2FuLWNvZGU6IGZhY3RvciB0aGUgaGFuZGxpbmcgb2YgdGhlIHR5cGUgaW4gJDxUWVBFPiQKKwkqIHNyYy9zY2FuLWNvZGUubCAoZmV0Y2hfdHlwZV9uYW1lKTogTmV3LgorCShoYW5kbGVfYWN0aW9uX2RvbGxhcik6IFVzZSBpdC4KKwkoZ3RfcHRyKTogUmVtb3ZlLCB1c2VsZXNzLgogCi0JKiBzcmMvZmlsZXMuYyAob2JzdGFja19zYXZlKTogTmV3IGZ1bmN0aW9uLgotCShkb25lKTogUmVuYW1lIGFzLi4uCi0JKG91dHB1dF9maWxlcyk6IHRoaXMuCi0JVXNlIGBvYnN0YWNrX3NhdmUnLgotCSogc3JjL21haW4uYyAobWFpbik6IERvbid0IHVzZSBgYXRleGl0JyB0byByZWdpc3RlciBgZG9uZScsIHNpbmNlCi0JaXQgbm8gbG9uZ2VyIGhhcyB0byByZW1vdmUgdG1wIGZpbGVzLCBqdXN0IGNhbGwgYG91dHB1dF9maWxlcycKLQl3aGVuIHRoZXJlIGFyZSBubyBlcnJvcnMuCisyMDEyLTA3LTI2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0yMDAwLTExLTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwltdXNjbGVzOiBmaXggYW5vdGhlciBvY2N1cnJlbmNlIG9mIHVuZXNjYXBlZCB0eXBlIG5hbWUKKwkqIHNyYy9vdXRwdXQuYyAocXVvdGVkX291dHB1dCk6IFNwbGl0IGludG8uLi4KKwkocXVvdGVkX291dHB1dCwgc3RyaW5nX291dHB1dCk6IHRoZXNlLgorCVVzZSB0aGUgZm9ybWVyIHdoZW4gb3V0cHV0dGluZyBhIHR5cGVfbmFtZS4KKwkqIHRlc3RzL2lucHV0LmF0OiBDaGVjayB0aGlzIGNhc2UuCisJKiBzcmMvc3ltdGFiLmg6IENvbW1lbnQgY2hhbmdlcy4KIAotCSogc3JjL2ZpbGVzLmMgW1ZNU106IE5vIGxvbmdlciBpbmNsdWRlIGBzc2RlZi5oJywgbm8gbG9uZ2VyIGRlZmluZQotCWB1bmxpbmsnOiBpdCdzIG5vIGxvbmdlciB1c2VkLgotCSogc3JjL2ZpbGVzLmg6IEZvcm1hdHRpbmcgY2hhbmdlcy4KKzIwMTItMDctMjYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDAtMTEtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCWdsci5jYzogZml4IHRoZSBoYW5kbGluZyBvZiB5eWRlYnVnCisJKiBkYXRhL2dsci5jYyAoeXlkZWJ1Z18pOiBSZW1vdmUsIHVudXNlZC4KKwkoc2V0X2RlYnVnX2xldmVsLCBkZWJ1Z19sZXZlbCk6IFdvcmsgb24geXlkZWJ1ZyBpbnN0ZWFkLgorCSogZG9jL2Jpc29uLnRleGksIE5FV1M6IERvY3VtZW50IHRoaXMuCiAKLQlSZW1vdmUgdGhlIGxhc3QgdXNlcyBvZiBta3RlbXAgYW5kIHVubGluay9kZWxldGUuCisyMDEyLTA3LTI2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JKiBzcmMvZmlsZXMuYyAoZmRlZmluZXMsIGZ0YWJsZSk6IFJlbW92ZWQuCi0JKGRlZmluZXNfb3N0YWNrLCB0YWJsZV9vYnN0YWNrKTogTmV3LgotCUFkanVzdCBkZXBlbmRlbmNpZXMgb2YgdGhlIGZvcm1lciBpbnRvIHVzZXMgb2YgdGhlIGxhdHRlci4KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3Nob3J0X29yX2NoYXJfdGFibGUsIG91dHB1dF9zaG9ydF90YWJsZSk6Ci0JQ29udmVydCB0byB1c2luZyBvYnN0YWNrcy4KLQkqIHNyYy9yZWFkZXIuYyAoY29weV9jb21tZW50Mik6IEFjY2VwdCBvbmUgRklMRSAqIGFuZCB0d28KLQlvYnN0YWNrcy4KLQkob3V0cHV0X3Rva2VuX2RlZmluZXMsIHJlYWRlcl9vdXRwdXRfeXlsc3ApOiBVc2Ugb2JzdGFja3MuCi0JKiBzcmMvc3lzdGVtLmggKG9ic3RhY2tfZmdyb3czKTogTmV3LgotCSogcG8vUE9URklMRVMuaW46IEFkanVzdC4KKwlnbnVsaWI6IHVwZGF0ZQogCi0yMDAwLTExLTAxICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMDctMjYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQlDaGFuZ2UgZWFjaCB1c2Ugb2YgYGZhdHRycycgaW50byBhIHVzZSBvZiBgYXR0cnNfb2JzdGFjaycuCisJZm9ybWF0dGluZyBjaGFuZ2VzCisJKiBzcmMvc3ltdGFiLmg6IGhlcmUuCiAKLQkqIHNyYy9yZWFkZXIuYyAoY29weV9hdCk6IFR5cG86IHMveXlsbG9jL3l5bG9jLy4KLQkqIHNyYy9maWxlcy5jIChmYXR0cnMpOiBSZW1vdmUuCi0JKGF0dHJzX29ic3RhY2spOiBOZXcuCi0JQWRqdXN0IGFsbCBkZXBlbmRlbmNpZXMuCi0JKGRvbmUpOiBJZiBTRU1BTlRJQ19QQVJTRVIsIGR1bXAgYXR0cnNfb2JzdGFjayBpbnRvIGF0dHJzZmlsZS4KKzIwMTItMDctMjYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLTIwMDAtMTEtMDEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCXRlc3RzOiBmaXggYW4gYXNzZXJ0aW9uCisJKiB0ZXN0cy9sb2NhbC5hdCAoQVRfWVlMRVhfREVGSU5FKTogQmUgc3VyZSB0byBjaGVjayB0aGUgYXJyYXkKKwlhZ2FpbnN0IGl0cyBsZW5ndGgsIG5vdCBpdHMgc2l6ZSBpbiBieXRlcy4KIAotCUludHJvZHVjZSBvYnN0YWNrcy4KLQlDaGFuZ2UgZWFjaCB1c2Ugb2YgYGZhY3Rpb24nIGludG8gYSB1c2Ugb2YgYGFjdGlvbl9vYnN0YWNrJy4KKzIwMTItMDctMjYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CiAKLQkqIGxpYi9vYnN0YWNrLmgsIGxpYi9vYnN0YWNrLmM6IE5ldyBmaWxlcy4KLQkqIHNyYy9maWxlcy5jIChmYWN0aW9uKTogUmVtb3ZlLgotCShhY3Rpb25fb2JzdGFjayk6IE5ldy4KLQlBZGp1c3QgYWxsIGRlcGVuZGVuY2llcy4KLQotMjAwMC0xMC0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGxpYi9xdW90ZS5oIChQQVJBTVMpOiBOZXcgbWFjcm8uICBVc2UgaXQuCi0KLTIwMDAtMTAtMTYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9zaG9ydF9vcl9jaGFyX3RhYmxlKTogTmV3IGZ1bmN0aW9uLgotCShvdXRwdXRfc2hvcnRfdGFibGUsIG91dHB1dF90b2tlbl90cmFuc2xhdGlvbnMpOiBVc2UgaXQuCi0JKGdvdG9fYWN0aW9ucyk6IFVzZSBvdXRwdXRfc2hvcnRfdGFibGUuCi0KLTIwMDAtMTAtMTYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvc3ltdGFiLmMgKGJ1Y2tldF9uZXcpOiBOZXcgZnVuY3Rpb24uCi0JKGdldHN5bSk6IFVzZSBpdC4KLQotCSogc3JjL291dHB1dC5jIChvdXRwdXRfc2hvcnRfdGFibGUpOiBOZXcgYXJndW1lbnQgdG8gZGlzcGxheSB0aGUKLQljb21tZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFibGUuCi0JQWRqdXN0IGRlcGVuZGVuY2llcy4KLQkob3V0cHV0X2dyYW0pOiBVc2UgaXQuCi0JKG91dHB1dF9ydWxlX2RhdGEpOiBOaWNlciBvdXRwdXQgbGF5b3V0IGZvciBZWVROQU1FLgotCi0yMDAwLTEwLTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2xleC5jIChyZWFkX3R5cGVuYW1lKTogTmV3IGZ1bmN0aW9uLgotCShsZXgpOiBVc2UgaXQuCi0JKiBzcmMvcmVhZGVyLmMgKGNvcHlfZG9sbGFyKTogTGlrZXdpc2UuCi0KLTIwMDAtMTAtMTYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvcmVhZGVyLmMgKGNvcHlfY29tbWVudDIpOiBFeHBlY3QgdGhlIGlucHV0IHN0cmVhbSB0byBiZSBvbgotCXRoZSBgLycgd2hpY2ggaXMgc3VzcGVjdGVkIHRvIG9wZW4gYSBjb21tZW50LCBpbnN0ZWFkIG9mIGJlaW5nCi0JY2FsbGVkIGFmdGVyIGAvLycgb3IgYC8qJyB3YXMgcmVhZC4KLQkoY29weV9jb21tZW50LCBjb3B5X2RlZmluaXRpb24sIHBhcnNlX3VuaW9uX2RlY2wsIGNvcHlfYWN0aW9uKQotCShjb3B5X2d1YXJkKTogQWRqdXN0LgotCi0yMDAwLTEwLTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3JlYWRlci5jIChwYXJzZV9leHBlY3RfZGVjbCk6IFVzZSBgc2tpcF93aGl0ZV9zcGFjZScgYW5kCi0JYHJlYWRfc2lnbmVkX2ludGVnZXInLgotCi0yMDAwLTEwLTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3JlYWRlci5jIChjb3B5X2RvbGxhcik6IE5ldyBmdW5jdGlvbi4KLQkoY29weV9ndWFyZCwgY29weV9hY3Rpb24pOiBVc2UgaXQuCi0KLTIwMDAtMTAtMTYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBsaWIvcXVvdGUuaCwgbGliL3F1b3RlLmMsIGxpYi9xdW90ZWFyZy5oLCBsaWIvcXVvdGVhcmcuYzoKLQkqIG00L3ByZXJlcS5tNCwgbTQvYy1icy1hLm00LCBtNC9tYnN0YXRlLm00OgotCU5ldyBmaWxlcywgZnJvbSBGaWxldXRpbHMgNC4wLjI3LgotCSogc3JjL21haW4uYyAocHJpbnRhYmxlX3ZlcnNpb24pOiBSZW1vdmUuCi0JKiBzcmMvbGV4LmMsIHNyYy9yZWFkZXIuYzogVXNlIGBxdW90ZScuCi0KLTIwMDAtMTAtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBsaWIvZXJyb3IuYywgbGliL2Vycm9yLmg6IE5ldyBmaWxlcywgbmVlZGVkIGJ5IHhtYWxsb2MuYy4KLQotMjAwMC0xMC0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvOiBWYXJpb3VzIHR5cG9zIHNwb3R0ZWQgYnkgTmVpbCBCb290aC4KLQotMjAwMC0xMC0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlXaGVuIGEgbGl0ZXJhbCBzdHJpbmcgaXMgdXNlZCB0byBkZWZpbmUgdHdvIGRpZmZlcmVudCB0b2tlbnMsCi0JYGJpc29uIC12JyBzZWdmYXVsdHMuCi0JUmVwb3J0ZWQgYnkgUGlvdHIgR2Fja2lld2ljeiwgYW5kIGZpeGVkIGJ5IE5laWwgQm9vdGguCi0KLQkqIHRlc3RzL3JlZ3Jlc3Npb24ubTQ6IE5ldyBmaWxlLgotCUluY2x1ZGUgdGhlIGNvcmUgb2YgdGhlIHNhbXBsZSBwcm92aWRlZCBieSBQaW90ciBHYWNraWV3aWN6LgotCSogc3JjL3JlYWRlci5jIChwYXJzZV90b2tlbl9kZWNsKTogRGlhZ25vc2UgYmFkIGNhc2VzLCBhbmQgcHJvY2VlZAotCXByb3Blcmx5LgotCi0yMDAwLTEwLTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3JlYWRlci5jIChwYXJzZV9leHBlY3RfZGVjbCk6IEtlZXAgYGNvdW50JyB3aXRoaW4gdGhlIHNpemUKLQlvZiBgYnVmZmVyJy4KLQlGcm9tIE5laWwgQm9vdGguCi0KLTIwMDAtMTAtMDIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JKiBiaXNvbi5zMSAoeXlwYXJzZSk6IEFzc2lnbiB0aGUgZGVmYXVsdCB2YWx1ZQotCXVuY29uZGl0aW9uYWxseSwgdG8gYXZvaWQgYSBHQ0Mgd2FybmluZyBhbmQgbWFrZSB0aGUgcGFyc2VyIGEKLQl0YWQgc21hbGxlci4KLQotMjAwMC0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9nZXRhcmdzLmMgKGdldGFyZ3MpOiBEb24ndCBkdW1wIGAtLWhlbHAnIG9uIHVucmVjb2duaXplZAotCW9wdGlvbnMuCi0KLTIwMDAtMTAtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvZGVyaXZlcy5jLCBzcmMvcHJpbnQuYywgc3JjL3JlZHVjZS5jOiBUbyBlYXNlIHRoZQotCXRyYW5zbGF0aW9uLCBtb3ZlIHNvbWUgYFxuJyBvdXQgb2YgdGhlIHRyYW5zbGF0ZWQgc3RyaW5ncy4KLQotMjAwMC0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlUaGUgbG9jYXRpb24gdHJhY2tpbmcgbWVjaGFuaXNtIGlzIHByZWNpb3VzIGZvciBwYXJzZSBlcnJvcgotCW1lc3NhZ2VzLiAgTmV2ZXJ0aGVsZXNzLCBpdCBpcyBlbmFibGVkIG9ubHkgd2hlbiBgQG4nIGlzIHVzZWQgaW4KLQl0aGUgZ3JhbW1hciwgd2hpY2ggaXMgYSBkaWZmZXJlbnQgaXNzdWUgKHlvdSBjYW4gdXNlIGl0IGluIGVycm9yCi0JbWVzc2FnZSwgYnV0IG5vdCBpbiB0aGUgZ3JhbW1hciBwZXIgc2UpLiAgVGhlcmVmb3JlLCB0aGVyZSBzaG91bGQKLQliZSBhbm90aGVyIG1lYW5zIHRvIGVuYWJsZSBpdC4KLQotCSogc3JjL2dldGFyZ3MuYyAoZ2V0YXJncyk6IFN1cHBvcnQgYC0tbG9jYXRpb25zJy4KLQkodXNhZ2UpOiBSZXBvcnQgaXQuCi0JKiBzcmMvZ2V0YXJncy5oIChsb2NhdGlvbnNmbGFnKTogRXhwb3J0IGl0LgotCSogc3JjL2xleC5jIChwZXJjZW50X3RhYmxlKTogU3VwcG9ydCBgJWxvY2F0aW9ucycuCi0JKiBzcmMvcmVhZGVyLmMgKHl5bHNwX25lZWRlZCk6IFJlbW92ZSB0aGlzIHZhcmlhYmxlLCBub3cgcmVwbGFjZWQKLQl3aXRoIGBsb2NhdGlvbnNmbGFnJy4KLQkqIGRvYy9iaXNvbi50ZXhpbmZvOiBEb2N1bWVudCBgLS1sb2NhdGlvbnMnIGFuZCBgJWxvY2F0aW9ucycuCi0JU29ydCB0aGUgb3B0aW9ucy4KLQkqIHRlc3RzL2NhbGMubTQ6IFRlc3QgaXQuCi0KLQlGb3IgcmVndWxhcml0eSBvZiB0aGUgbmFtZXMsIHJlcGxhY2UgZWFjaAotCShub2xpbmVmbGFnLCB0b2tudW1mbGFnLCByYXd0b2tlbnVtZmxhZywgbm9wYXJzZXJmbGFnKTogd2l0aC4uLgotCShub19saW5lZmxhZywgdG9rZW5fdGFibGVmbGFnLCByYXdmbGFnLCBub19wYXJzZXJmbGFnKTogdGhpcy4KLQlJbiBhZGRpdGlvbiByZXBsYWNlIGVhY2ggYGZsYWcnIHdpdGggYF9mbGFnJy4KLQotMjAwMC0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlBbHNvIHRlc3QgcGFyc2UgZXJyb3IgbWVzc2FnZXMsIGluY2x1ZGluZyB3aXRoIFlZRVJST1JfVkVSQk9TRS4KLQotCSogdGVzdHMvY2FsYy5tNCAoY2FsYy55KTogQWRkIHN1cHBvcnQgZm9yIGBleHAgPSBleHAnIChub24KLQlhc3NvY2lhdGl2ZSkuCi0JVXNlIGl0IHRvIGNoZWNrIHRoZSBjb21wdXRhdGlvbnMuCi0JVXNlIGl0IHRvIGNoZWNrIGBub25hc3NvYycgaXMgaG9ub3JlZC4KLQkoQVRfREFUQV9DQUxDX1kpOiBFcXVpcCBgY2FsYy55JyB3aXRoIFlZRVJST1JfVkVSQk9TRSB3aGVuIHBhc3NlZAotCWAtLXl5ZXJyb3ItdmVyYm9zZScuCi0JKF9BVF9DSEVDS19DQUxDKTogQWRqdXN0IHRvIHRoaXMgb3B0aW9uLgotCShfQVRfQ0hFQ0tfQ0FMQ19FUlJPUik6IE5ldyBtYWNybyB0byBjaGVjayBwYXJzZSBlcnJvciBtZXNzYWdlcy4KLQotMjAwMC0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlUZXN0IGFsc28gYC0tdmVyYm9zZScsIGAtLWRlZmluZXMnIGFuZCBgLS1uYW1lLXByZWZpeCcuICBUZXN0aW5nCi0JdGhlIGxhdHRlciBkZW1vbnN0cmF0ZXMgYSBmbGF3IGluIHRoZSBoYW5kbGluZyBvZiBub24gZGVidWdnaW5nCi0JcGFyc2VycyBpbnRyb2R1Y2VkIGJ5IG15c2VsZiBvbiAyMDAwLTAzLTE2OiBgI2RlZmluZSB5eWRlYnVnIDAnCi0Jd2FzIHVzZWQgaW4gb3JkZXIgdG8gc2ltcGxpZnk6CisJdGVzdHM6IGFkanVzdCB0byBHQ0MgNC44LCB3aGljaCBkaXNwbGF5cyBjYXJldCBlcnJvcnMKKwlXaXRoIEdDQyA0LjgsIHRoZSB0ZXN0cyBvbiBzeW5jbGluZXMgYXJlIHNraXBwZWQuICBUcmFuc2Zvcm0KIAotCSNpZiBZWURFQlVHCi0JaWYgKHl5ZGVidWcpCi0JewotCS4uLgotCX0KLQkjZW5kaWYKKwkgIGlucHV0Lnk6MToyOiBlcnJvcjogI2Vycm9yICIxIgorCSAgICNlcnJvciAiMSIKKwkgICAgXgogCiAJaW50bwogCi0JaWYgKHl5ZGVidWcpCi0JewotCS4uLgotCX0KKwkgIGlucHV0Lnk6MTogI2Vycm9yICIxIgogCi0JdW5mb3J0dW5hdGVseSB0aGlzIGxlYWRzIHRvIGEgQ1BQIGNvbmZsaWN0IHdoZW4KLQlgLS1uYW1lLXByZWZpeD1mb28nIGlzIHVzZWQgc2luY2UgaXQgcHJvZHVjZXMgYCNkZWZpbmUgeXlkZWJ1ZwotCWZvb2RlYnVnJy4KKwkqIHRlc3RzL3N5bmNsaW5lcy5hdCAoQVRfU1lOQ0xJTkVTX0NPTVBJTEUpOiBEbyBpdCwgdXNpbmcgUGVybCBpbnN0ZWFkIG9mCisJc2VkLgogCi0JKiBzcmMvYmlzb24uczEgWyFZWURFQlVHXTogRG8gbm90IGRlZmluZSB5eWRlYnVnLgotCShZWURQUklOVEYpOiBOZXcgbWFjcm8uCi0JU3ByZWFkIGl0cyB1c2UuCi0JKiB0ZXN0cy9jYWxjLm00IChBVF9DSEVDS19DQUxDKTogRG8gcmVxdWlyZSBhIHRpdGxlLCBidWlsZCBpdCBmcm9tCi0JdGhlIGJpc29uIG9wdGlvbnMuCi0JQWxzbyB0ZXN0IGAtLXZlcmJvc2UnLCBgLS1kZWZpbmVzJyBhbmQgYC0tbmFtZS1wcmVmaXgnLgorMjAxMi0wNy0yNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotMjAwMC0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJYmUgc3VyZSB0byBwcm9wZXJseSBlc2NhcGUgdHlwZSBuYW1lcworCSogc3JjL3NjYW4tY29kZS5sOiBVc2Ugb2JzdGFja19xdW90ZSB3aGVuIHBhc3NpbmcgdHlwZV9uYW1lIHRvIG00LgorCSogdGVzdHMvaW5wdXQuYXQgKENvZGUgaW5qZWN0aW9uKTogTmV3LgorCSogTkVXUzogRG9jdW1lbnQgaXQuCisJVGhhbmtzIHRvIFBhdWwgRWdnZXJ0IGZvciB0aGUgd29yZGluZy4KIAotCUltcHJvdmUgdGhlIHJlYWRhYmlsaXR5IG9mIHRoZSBwcm9kdWNlZCBwYXJzZXJzLgorMjAxMi0wNy0yNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL2Jpc29uLnMxOiBGb3JtYXR0aW5nIGNoYW5nZXMuCi0JSW1wcm92ZSB0aGUgY29tbWVudCByZWxhdGVkIHRvIHRoZSBgJCcgbWFyay4KLQkoeXlkZWZhdWx0KTogRG9uJ3QgZmFsbCB0aHJvdWdoIHRvIGB5eXJlc3VtZSc6IGBnb3RvJyB0aGVyZS4KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3BhcnNlcik6IFdoZW4gdGhlIGAkJyBpcyBtZXQsIHNraXAgdGhlIGVuZAotCW9mIGl0cyBsaW5lLgotCU5ldyB2YXJpYWJsZSwgYG51bWJlcl9vZl9kb2xsYXJfc2lnbnMnLCB0byBjaGVjayB0aGVyZSdzIGV4YWN0bHkKLQlvbmUgYCQnIGluIHRoZSBwYXJzZXIgc2tlbGV0b24uCisJb2JzdGFja19xdW90ZTogZXNjYXBlIGFuZCBxdW90ZSBmb3IgTTQKKwkqIHNyYy9zeXN0ZW0uaCAob2JzdGFja19xdW90ZSk6IE5ldy4KKwkqIHNyYy9tdXNjbGUtdGFiLmM6IFVzZSBpdCBpbnN0ZWFkIG9mIG9ic3RhY2tfZXNjYXBlIHdoZXJlIGFwcGxpY2FibGUuCisJKiBzcmMvc2Nhbi1jb2RlLmw6IFNpbmNlIG9ic3RhY2tfcXVvdGUgc3VwcG9ydHMgTlVMTCwgbGVhdmUgdHlwZV9uYW1lCisJYXMgTlVMTCBpbnN0ZWFkIG9mIGRlZmF1bHRpbmcgdG8gIiIuCiAKLTIwMDAtMTAtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0wNy0yNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogbGliL3hzdHJkdXAuYzogTmV3IGZpbGUsIGZyb20gdGhlIGZpbGV1dGlscy4KLQkqIHNyYy9yZWFkZXIuYyAocGFyc2VfdG9rZW5fZGVjbCwgZ2V0X3R5cGVfbmFtZSwgcGFyc2VfdHlwZV9kZWNsKQotCShwYXJzZV9hc3NvY19kZWNsLCBwYXJzZV90aG9uZ19kZWNsLCBnZXRfdHlwZSk6IFVzZSBgeHN0cmR1cCcKLQlpbnN0ZWFkIG9mIHN0cmxlbiArIHhtYWxsb2MgKyBzdHJjcHkuCi0JKiBzcmMvc3ltdGFiLmMgKGNvcHlzKTogUmVtb3ZlLCB1c2UgeHN0cmR1cCBpbnN0ZWFkLgorCW11c2NsZXM6IHNodWZmbGUgcmVzcG9uc2FiaWxpdGllcworCSogc3JjL211c2NsZS10YWIuYyAobXVzY2xlX2JvdW5kYXJ5X2dyb3cpOiBCZSBpbiBjaGFyZ2Ugb2YgcXVvdGF0aW9uLAorCWluc3RlYWQgb2YgbGVhdmluZyB0aGlzIHRvIHRoZSBjYWxsZXIuCiAKLTIwMDAtMTAtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0wNy0yNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL2dyYW0uaCAoYXNzb2NpYXRpdml0eSk6IE5ldyBlbnVtIHR5cGUgd2hpY2ggcmVwbGFjZXMgdGhlCi0JZm9ybWVyIENQUCBtYWNyb3MgYFJJR0hUX0FTU09DJywgYExFRlRfQVNTT0MnIGFuZCBgTk9OX0FTU09DJyB3aXRoCi0JYHJpZ2h0X2Fzc29jJywgYGxlZnRfYXNzb2MnIGFuZCBgbm9uX2Fzc29jJy4KKwltdXNjbGVzOiBtYWtlIHByaXZhdGUgZnVuY3Rpb25zIHN0YXRpYworCSogc3JjL211c2NsZS10YWIuaCwgc3JjL211c2NsZS10YWIuYyAobXVzY2xlX2JvdW5kYXJ5X2dyb3cpCisJKG11c2NsZV9sb2NhdGlvbl9ncm93KTogTm93IHN0YXRpYy4KKworMjAxMi0wNy0yNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCW11c2NsZXM6IHJlbmFtZSBwcml2YXRlIGZ1bmN0aW9ucy9tYWNyb3MKKwkqIHNyYy9tdXNjbGUtdGFiLmMgKE1VU0NMRV9DT01NT05fREVDT0RFLCBtdXNjbGVfc3RyaW5nX2RlY29kZSkKKwkobXVzY2xlX2xvY2F0aW9uX2RlY29kZSk6IE5vdCByZWxhdGVkIHRvIG11c2NsZXMsIHJlbmFtZSBhcy4uLgorCShDT01NT05fREVDT0RFLCBzdHJpbmdfZGVjb2RlLCBsb2NhdGlvbl9kZWNvZGUpOiB0aGVzZS4KKworMjAxMi0wNy0yNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCW9ic3RhY2tfZXNjYXBlOiBlc2NhcGUgTTQgY2hhcmFjdGVycworCSogc3JjL211c2NsZS10YWIuaCAoTVVTQ0xFX09CU1RBQ0tfU0dST1cpOiBUaGlzIGlzIG5vdCByZWxhdGVkIHRvCisJbXVzY2xlcywgc28gbW92ZSB0bywgYW5kIHJlbmFtZSBhcy4uLgorCSogc3JjL3N5c3RlbS5oIChvYnN0YWNrX2VzY2FwZSk6IHRoaXMuCisJQWRqdXN0IGRlcGVuZGVuY2llcy4KKworMjAxMi0wNy0yNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCXJlbW92ZSBkZWFkIG1hY3JvCisJKiBzcmMvc3lzdGVtLmggKERFRkFVTFRfVE1QRElSKTogUmVtb3ZlLCB1bnVzZWQuCisKKzIwMTItMDctMjYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwltYWludDogc3R5bGUgY2hhbmdlcworCSogc3JjL3NjYW4tY29kZS5sOiBSZW1vdmUgdXNlbGVzcyBicmFjZXMuCisJRm9ybWF0dGluZyBjaGFuZ2VzLgorCVByZWZlciBOVUxMIHRvIDAuCisJKiBzcmMvbXVzY2xlLXRhYi5jLCBzcmMvc3lzdGVtLmg6IEZvcm1hdHRpbmcgY2hhbmdlcy4KKworMjAxMi0wNy0yNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWRvYzogYXZvaWQgcHJvYmxlbXMgd2l0aCBjYXNlIGluc2Vuc2l0aXZlIGZpbGUgc3lzdGVtcworCW1ha2VpbmZvIC0taHRtbCBnZW5lcmF0ZXMgaW5kZXguaHRtbCwgYW5kIHRoZSBub2RlICJJbmRleCIgd2lsbCByZXN1bHQKKwlpbiBJbmRleC5odG1sLiAgT24gY2FzZSBpbnNlbnNpdGl2ZSBmaWxlIHN5c3RlbXMsIHN1Y2ggYXMgb24gTWFjIE9TIFgKKwlieSBkZWZhdWx0LCB0aGlzIHJlc3VsdHMgaW4gYSBzaW5nbGUsIGludmFsaWQsIGZpbGUgKFRleGluZm8gNC4xMykuCisJU2VlIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctdGV4aW5mby8yMDEyLTA3L21zZzAwMDMyLmh0bWwKKworCSogZG9jL2Jpc29uLnRleGkgKEluZGV4KTogUmVuYW1lIGFzLi4uCisJKEluZGV4IG9mIFRlcm1zKTogdGhpcy4KKworMjAxMi0wNy0yNCAgU3RlZmFubyBMYXR0YXJpbmkgIDxzdGVmYW5vLmxhdHRhcmluaUBnbWFpbC5jb20+ICAodGlueSBjaGFuZ2UpCisKKwljb25maWd1cmU6IGZpeCBib3RjaGVkIHF1b3RpbmcKKwkqIGNvbmZpZ3VyZS5hYzogSW4gdGhlIEFDX1NVQlNUIGNhbGwgb24gJ1ZBTEdSSU5EX1BSRUJJU09OJy4gIFdpdGhvdXQKKwl0aGlzIGNoYW5nZSwgd2hlbiBydW5uaW5nIC4vY29uZmlndXJlLCBJIHNlZToKKworCSAgICAuLi4KKwkgICAgY2hlY2tpbmcgZm9yIHZhbGdyaW5kLi4uIHZhbGdyaW5kCisJICAgIC4vY29uZmlndXJlOiBsaW5lIDM1MjIxOiAtcTogY29tbWFuZCBub3QgZm91bmQKKwkgICAgY2hlY2tpbmcgZm9yIEphdmEgY29tcGlsZXIuLi4gZ2NqIC1DIC1mc291cmNlPTEuMyAtZnRhcmdldD0xLjQKKwkgICAgLi4uCisKKzIwMTItMDctMjAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwluZXdzOiBmaXggdHlwby4KKwkqIE5FV1M6IGhlcmUuCisJUmVwb3J0ZWQgYnkgQmVuIFBmYWZmLgorCisyMDEyLTA3LTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJbWFpbnQ6IHVwZGF0ZSBnbnUtd2ViLWRvYy11cGRhdGUuCisJKiBnbnVsaWI6IGhlcmUuCisKKzIwMTItMDctMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwltYWludDogcG9zdC1yZWxlYXNlIGFkbWluaXN0cml2aWEKKwkqIE5FV1M6IEFkZCBoZWFkZXIgbGluZSBmb3IgbmV4dCByZWxlYXNlLgorCSogLnByZXYtdmVyc2lvbjogUmVjb3JkIHByZXZpb3VzIHZlcnNpb24uCisJKiBjZmcubWsgKG9sZF9ORVdTX2hhc2gpOiBBdXRvLXVwZGF0ZS4KKworMjAxMi0wNy0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCXZlcnNpb24gMi42CisJKiBORVdTOiBSZWNvcmQgcmVsZWFzZSBkYXRlLgorCisyMDEyLTA3LTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJbWFpbnQ6IHByZXBhcmUgZm9yIHJlbGVhc2UgMi42CisJKiBORVdTOiBoZXJlLgorCisyMDEyLTA3LTE4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJbWFpbnQ6IHBvc3QtcmVsZWFzZSBhZG1pbmlzdHJpdmlhCisJKiBORVdTOiBBZGQgaGVhZGVyIGxpbmUgZm9yIG5leHQgcmVsZWFzZS4KKwkqIC5wcmV2LXZlcnNpb246IFJlY29yZCBwcmV2aW91cyB2ZXJzaW9uLgorCSogY2ZnLm1rIChvbGRfTkVXU19oYXNoKTogQXV0by11cGRhdGUuCisKKzIwMTItMDctMTggIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwl2ZXJzaW9uIDIuNS45MQorCSogTkVXUzogUmVjb3JkIHJlbGVhc2UgZGF0ZS4KKworMjAxMi0wNy0xOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCW1haW50OiBwcmVwYXJlIE5FV1MuCisKKzIwMTItMDctMTggIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwltYWludDogZml4IHNwYWNlcy4KKwkqIGJ1aWxkLWF1eC9NYWtlZmlsZS5hbTogaGVyZS4KKworMjAxMi0wNy0xOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCXRlc3RzOiBhZGp1c3QgdG8gY2FzZSB3aGVyZSB0aGUgQyBjb21waWxlciBpcyBhY3R1YWxseSBhIEMrKyBjb21waWxlcgorCSogdGVzdHMvYXRsb2NhbC5pbiAoQ0NfSVNfQ1hYKTogTmV3LgorCSogdGVzdHMvaGVhZGVycy5hdCAoU2V2ZXJhbCBwYXJzZXJzKTogVXNlIGl0LgorCisyMDEyLTA3LTE4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJdGVzdHM6IGZpeCBkZXBlbmRlbmNpZXMKKwkqIHRlc3RzL01ha2VmaWxlLmFtOiB3ZSBuZWVkIGF0Y29uZmlnIGFuZCBhdGxvY2FsIHRvIGJlIHVwIHRvIGRhdGUKKwl3aGVuIGNhbGxpbmcgdGVzdHN1aXRlLgorCisyMDEyLTA3LTE4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJZG9jOiBmaXggVGV4aW5mbyBjb21tYW5kCisJKiBkb2MvYmlzb24udGV4aTogSW4gcGFyZW5zLCB1c2UgQHB4cmVmLgorCisyMDEyLTA3LTE4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJbWFpbnQ6IFZhbGdyaW5kIG9uIE9TIFguCisJKiBjb25maWd1cmUuYWMgKFZBTEdSSU5EX1BSRUJJU09OKTogTmV3LgorCSogdGVzdHMvTWFrZWZpbGUuYW0gKG1haW50YWluZXItY2hlY2stdmFsZ3JpbmQpOiBVc2UgaXQuCisJKiBldGMvZGFyd2luMTEuNC4wLnN1cHA6IE5ldy4KKwkqIGNvbmZpZ3VyZS5hYywgZXRjL01ha2VmaWxlLmFtOiBVc2UgaXQuCisJKiBjb25maWd1cmUuYWM6IERpc2FibGUgVmFsZ3JpbmQgb24gTWFjIE9TIFguCisJKiBSRUFETUUtaGFja2luZzogRXhwbGFpbiB3aHkuCisKKzIwMTItMDctMTcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwl0ZXN0czogYmUgc3VyZSB0aGF0IGJhY2t1cHMgYXJlIHNhZmUuCisJKiB0ZXN0cy9sb2NhbC5hdCAoYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzKTogaGVyZS4KKworMjAxMi0wNy0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCW1haW50OiBkZWFkIGNvbW1lbnQuCisJKiBldGMvUkVBRE1FOiBoZXJlLgorCisyMDEyLTA3LTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJdGVzdHM6IHJlZmFjdG9yIGZvciBsZWdpYmlsaXR5LgorCSogdGVzdHMvbG9jYWwuYXQgKEFUX0JJU09OX0NIRUNLX1dBUk5JTkdTLCBBVF9CSVNPTl9DSEVDS19XQVJOSU5HU18pOgorCU5ldy4KKworMjAxMi0wNy0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCXRlc3RzOiByZWZhY3RvciB0aGUgYmlzb24gaW52b2NhdGlvbnMuCisJKiB0ZXN0cy9sb2NhbC5hdCAobTRfbnVsbF9pZiwgQVRfQklTT05fQ0hFQ0tfKTogTmV3LgorCisyMDEyLTA3LTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJbWFpbnQ6IGZpeCBzeW50YXgtY2hlY2sgaWdub3JlIHBhdHRlcm5zLgorCSogY2ZnLm1rOiBoZXJlLgorCisyMDEyLTA3LTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJZ251bGliOiB1cGRhdGUKKworMjAxMi0wNy0xNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWdudWxpYjogdXBkYXRlLgorCSogZ251bGliOiBVcGRhdGUgc28gdGhhdCBnaXRsb2ctdG8tY2hhbmdlbG9nIHN1cHBvcnQgLS1zcmNkaXIuCisJKiBNYWtlZmlsZS5hbTogVXNlIGl0LgorCisyMDEyLTA3LTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJZ251bGliOiB1cGRhdGUKKwkqIGJvb3RzdHJhcCwgYnVpbGQtYXV4Ly5naXRpZ25vcmUsIGdudWxpYiwgbTQvLmdpdGlnbm9yZTogdXBkYXRlLgorCisyMDEyLTA3LTA2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJbWFpbnQ6IHVwZGF0ZSByZWxlYXNlIGluc3RydWN0aW9ucworCSogUkVBRE1FLWhhY2tpbmc6IGhlcmUuCisKKzIwMTItMDctMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwltYWludDogcG9zdC1yZWxlYXNlIGFkbWluaXN0cml2aWEKKwkqIE5FV1M6IEFkZCBoZWFkZXIgbGluZSBmb3IgbmV4dCByZWxlYXNlLgorCSogLnByZXYtdmVyc2lvbjogUmVjb3JkIHByZXZpb3VzIHZlcnNpb24uCisJKiBjZmcubWsgKG9sZF9ORVdTX2hhc2gpOiBBdXRvLXVwZGF0ZS4KKworMjAxMi0wNy0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCXZlcnNpb24gMi41LjkwCisJKiBORVdTOiBSZWNvcmQgcmVsZWFzZSBkYXRlLgorCisyMDEyLTA3LTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJYnVpbGQ6IGZpeCBnZW4tQ2hhbmdlTG9nIGNhbGwuCisJKiBNYWtlZmlsZS5hbTogQmUgc3VyZSB0byBjYXRjaCBlcnJvcnMsIGFuZCBmaXggb3B0aW9uIG5hbWUKKworMjAxMi0wNy0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWdudWxpYjogdXBkYXRlLgorCSogZ251bGliL2J1aWxkLWF1eC9kby1yZWxlYXNlLWNvbW1pdC1hbmQtdGFnOiBGaXguCisKKzIwMTItMDctMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwl0ZXN0czogZml4IFNLSVBfSUYgZm9yIEphdmEuCisJKiB0ZXN0cy9sb2NhbC5hdCAoQVRfSkFWQV9DT01QSUxFKTogaGVyZS4KKworMjAxMi0wNy0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWFwaS5wcmVmaXg6IGluY29tcGF0aWJsZSB3aXRoICVuYW1lLXByZWZpeC4KKwkqIGRhdGEvYmlzb24ubTQ6IE1ha2UgaXQgaW5jb21wYXRpYmxlLgorCSogdGVzdHMvaW5wdXQuYXQ6IENoZWNrIHRoYXQgaXQgaXMuCisKKzIwMTItMDctMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwlhcGkucHJlZml4OiBzdHJlbmd0aGVuIHRoZSB0ZXN0cyBhbmQgZml4IHB1c2gtcGFyc2Vycy4KKwkqIHRlc3RzL2NhbGMuYXQ6IENoZWNrIGFwaS5wcmVmaXggaW4gYWRkaXRpb24gdG8gJW5hbWUtcHJlZml4LgorCSogdGVzdHMvaGVhZGVycy5hdDogQ2hlY2sgcHVzaCBwYXJzZXJzIGFuZCBwdXJlIGludGVyZmFjZS4KKwkqIHRlc3RzL2xvY2FsLmF0OiBVc2UgWVlMVFlQRSByZW5hbWVkLgorCSogZGF0YS95YWNjLmMgKGI0X2RlY2xhcmVfeXlwYXJzZV9wdXNoXyk6IEhhbmRsZSBhcGkucHJlZml4LgorCSogZG9jL2Jpc29uLnRleGk6IFN0eWxlIGNoYW5nZXMuCisKKzIwMTItMDctMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwlza2VsZXRvbnM6IHN0eWxlIGNoYW5nZXMuCisJKiBkYXRhL2Jpc29uLm00OiBEZWZpbmUgZGVmYXVsdCB2YWx1ZXMgYWZ0ZXIgaGF2aW5nIGRlZmluZWQKKwl0aGUgc3VwcG9ydCBtYWNyb3MuCisJS2lsbCBhIGRlYWQgY29tbWVudC4KKworMjAxMi0wNy0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCU5FV1M6IG1pbm9yIGNoYW5nZXMuCisJKiBORVdTOiBzdHlsZSBjaGFuZ2VzLgorCisyMDEyLTA3LTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJYXBpLnByZWZpeDogaW1wcm92ZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgWVlERUJVRy4KKwkqIGRvYy9iaXNvbi50ZXhpOiBFeHBsYWluIGhvdyBhcGkucHJlZml4IGlzIGFwcGxpZWQgdG8gWVlERUJVRy4KKworMjAxMi0wNy0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWdudWxpYjogdXBkYXRlLgorCSogYm9vdHN0cmFwLCBnbnVsaWI6IFVwZGF0ZS4KKwkqIGNmZy5tayAoc3ludGF4LWNoZWNrKTogRG9uJ3QgY2hlY2sgImVycm9yIiB1c2FnZSBpbiBiaXNvbi50ZXhpLgorCisyMDEyLTA3LTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJdGVzdHM6IGhlYWRlcnMuYXQ6IHN0cmVuZ3RoZW4uCisJKiB0ZXN0cy9oZWFkZXJzLmF0IChTZXZlcmFsIGhlYWRlcnMpOiBCZSBzdHJpY3RlciB3aGVuIGNoZWNraW5nCisJdGhlIGV4cG9ydGVkIG1hY3Jvcy4KKworMjAxMi0wNy0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWdsci5jYzogZG8gbm90IG92ZXJyaWRlIEMrKyBkZWZpbml0aW9ucyBieSBDIG1hY3Jvcy4KKwkqIGRhdGEvZ2xyLmM6IGhlcmUuCisJKiBkYXRhL2dsci5jYzogRml4IG92ZXJxdW90YXRpb24uCisJKiB0ZXN0cy9oZWFkZXJzLmF0OiBDb21tZW50IGNoYW5nZXMuCisKKzIwMTItMDctMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwlZWUxMT0NfREVGQVVMVDogZmFjdG9yLCBhbmQgZG9uJ3QgZXhwb3J0IGl0IGluIGhlYWRlcnMuCisJKiBkYXRhL2MrKy5tNCwgZGF0YS9jLm00IChiNF95eWxsb2NfZGVmYXVsdF9kZWZpbmUpOiBOZXcuCisJKiBkYXRhL2dsci5jLCBkYXRhL2dsci5jYywgZGF0YS9sYWxyMS5jYywgZGF0YS95YWNjLmM6IFVzZSBpdC4KKwkqIGRhdGEvZ2xyLmNjOiBEbyBub3QgZGVmaW5lIFlZTExPQ19ERUZBVUxUIGluIHRoZSBoZWFkZXIgZmlsZSwKKwlidXQgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9uZS4KKworMjAxMi0wNy0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWFwaS5wcmVmaXg6IGRvIG5vdCB1c2UgI2RlZmluZSB0byBoYW5kbGUgWVlTVFlQRV9JU19UUklWSUFMIGV0Yy4KKwlUaGUgZm9sbG93aW5nIG1peHR1cmUgaXMgaW5zYW5lOgorCisJICAjZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCBQUkVGSVhfU1RZUEVfSVNfVFJJVklBTAorCSAgI2lmIChkZWZpbmVkIFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpCisKKwlzaW5jZSwgb2YgY291cnNlIFlZU1RZUEVfSVNfVFJJVklBTCBpcyBkZWZpbmVkLiAgSW5zdGVhZCB3ZSBjb3VsZAorCWRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgYXMgUFJFRklYX1NUWVBFX0lTX1RSSVZJQUwgb25seSB3aGVuIHRoZQorCWxhdGVyIGlzIGRlZmluZWQsIGJ1dCBsZXQncyBhdm9pZCBzdGFja2luZyBDUFAgb24gdG9wIG9mIE00OiByYXRoZXIsIHVzZQorCisJICAjaWYgKGRlZmluZWQgUFJFRklYX1NUWVBFX0lTX1RSSVZJQUwgJiYgUFJFRklYX1NUWVBFX0lTX1RSSVZJQUwpCisKKwkqIGRhdGEvZ2xyLmMsIGRhdGEveWFjYy5jOiBVc2UgWVlTVFlQRV9JU19UUklWSUFMLCBZWVNUWVBFX0lTX0RFQ0xBUkVELAorCVlZTFRZUEVfSVNfVFJJVklBTCBhbmQgWVlMVFlQRV9JU19ERUNMQVJFRCB1bmRlciB0aGVpciBhcGkucHJlZml4LXJlbmFtZWQKKwluYW1lLgorCisyMDEyLTA3LTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJdGVzdHM6IHBvcnRhYmlsaXR5IGZpeGVzLgorCVJlcG9ydGVkIGJ5IEh5ZHJhLgorCisJKiB0ZXN0cy9oZWFkZXJzLmF0IChTZXZlcmFsIGhlYWRlcnMpOiBCZSBzdXJlIHRvIGluY2x1ZGUgY29uZmlnLmgKKwlpbiB0aGUgZmlsZXMgdG8gY29tcGlsZS4KKworMjAxMi0wNy0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWMrKzogZmV3ZXIgI2luY2x1ZGVzIGluIHRoZSBoZWFkZXJzLgorCSogZGF0YS9sYWxyMS5jYzogRGVmaW5lIFlZX05VTEwgaW4gdGhlICouY2MgZmlsZSwgaXQgaXMgbm90IG5lZWRlZAorCWluIHRoZSBoZWFkZXIuCisJKiBkYXRhL2xvY2F0aW9uLmNjOiBpb3Nmd2Qgc3VmZmljZXMuCisKKzIwMTItMDctMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwlnbHIuY2M6IGZvcm1hdHRpbmcgY2hhbmdlcy4KKwkqIGRhdGEvZ2xyLmNjOiBoZXJlLgorCisyMDEyLTA3LTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJdGVzdHM6IG1vcmUgbG9ncy4KKwkqIHRlc3RzL2hlYWRlcnMuYXQgKFNldmVyYWwgcGFyc2Vycyk6IEhlcmUuCisKKzIwMTItMDctMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwlhcGkucHJlZml4OiBhbHNvIHJlbmFtZSBZWURFQlVHLgorCVRoZSB0ZXN0c3VpdGUgaW4gbWFzdGVyIGhhcyBzaG93biB3ZWlyZCBlcnJvcnMgZm9yIHRoZSAiTXVsaXRwbGUKKwlQYXJzZXJzIiB0ZXN0czogdGhlIGNhbGxlciBvZiBwNS5wYXJzZSgpIHJlY2VpdmVkIHNvbWUgYXBwYXJlbnRseQorCXJhbmRvbSB2YWx1ZSwgd2hpbGUgdHJhY2luZyBwNS5wYXJzZSgpIHNob3dlZCB0aGF0IHRoZSBmdW5jdGlvbiB3YXMKKwljb25zaXN0ZW50bHkgcmV0dXJuaW5nIDAuCisKKwlJdCBoYXBwZW5zIHdoZW4gbWl4aW5nIHNldmVyYWwgcGFyc2VyIGhlYWRlcnMsIHNvbWUgZ2VuZXJhdGVkIHdpdGhvdXQKKwklZGVidWcsIG90aGVycyB3aXRoLiAgSW4gcGFydGljdWxhciB0aGUgQysrIHBhcnNlciB3YXMgZ2VuZXJhdGVkIHdpdGgKKwklZGVidWcsIGkuZS4sIHdpdGg6CisKKwkgICNpZm5kZWYgWVlERUJVRworCSAgIyBkZWZpbmUgWVlERUJVRyAxCisJICAjZW5kaWYKKworCWFuZCBjb21waWxlZCBzZXBhcmF0ZWRseS4gIFlldCwgaXRzIGhlYWRlciB3YXMgaW5jbHVkZWQgYWZ0ZXIgdGhlIG9uZQorCW9mIGFub3RoZXIgcGFyc2VyLCB0aGlzIHRpbWUgd2l0aG91dCAlZGVidWcsIGkuZS4sIHdpdGgKKworCSAgI2lmbmRlZiBZWURFQlVHCisJICAjIGRlZmluZSBZWURFQlVHIDAKKwkgICNlbmRpZgorCisJaW4gaXRzIGhlYWRlci4gIEFzIGEgcmVzdWx0LCB0aGUgcGFyc2VyIHdhcyBjb21waWxlZCB3aXRoIFlZREVCVUcgc2V0LAorCWJ1dCBpdHMgaGVhZGVyIHdhcyB1c2VkIHdpdGhvdXQuICBTaW5jZSB0aGUgbGF5b3V0IG9mIHRoZSBvYmplY3RzIGFyZQorCXRoZW4gY29tcGxldGVseSBkaWZmZXJlbnQsIGJvb20uCisKKwlUaGVyZWZvcmUsIGRvIG5vdCBjaGFuZ2UgdGhlIHZhbHVlIG9mIFlZREVCVUcuICBSYXRoZXIsIHVzZSBpdCBhcyBhCisJZGVmYXVsdCB2YWx1ZSBmb3IgPEFQSS5QUkVGSVg+REVCVUcuCisKKwkqIGRhdGEvYy5tNCAoYjRfWVlERUJVR19kZWZpbmUpOiBOZXcuCisJKGI0X2RlY2xhcmVfeXlkZWJ1Zyk6IFJlbmFtZSBhcy4uLgorCShiNF95eWRlYnVnX2RlY2xhcmUpOiB0aGlzLCBmb3IgY29uc2lzdGVuY3kuCisJKiBkYXRhL2dsci5jLCBkYXRhL2dsci5jYywgZGF0YS9sYWxyMS5jYywgZGF0YS95YWNjLmM6IFVzZSBpdC4KKwkqIE5FV1M6IERvY3VtZW50IGl0LgorCisyMDEyLTA3LTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJTkVXUzogc3BlbGwgY2hlY2suCisJKiBORVdTOiBoZXJlLgorCisyMDEyLTA2LTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJYXBpLnByZWZpeC4KKwkqIGRhdGEvYy5tNCAoYjRfYXBpX3ByZWZpeCwgYjRfYXBpX1BSRUZJWCk6IE5ldy4KKwkoYjRfcHJlZml4LCBiNF91bmlvbl9uYW1lLCBiNF90b2tlbl9lbnVtcywgYjRfZGVjbGFyZV95eWxzdHlwZSk6IFVzZSB0aGVtLgorCSogZGF0YS9nbHIuYywgZGF0YS95YWNjLmMsIGRhdGEvZ2xyLmNjLCBkYXRhL2xhbHIxLmNjOiBVc2UgdGhlbSB0byBjaGFuZ2UKKwl0aGUgcHJlZml4IG9mIGV4cG9ydGVkIHByZXByb2Nlc3NvciBzeW1ib2xzLgorCSogc3JjL2dldGFyZ3MuYyAodXNhZ2UpOiBEaXR0by4KKwkqIHRlc3RzL2hlYWRlcnMuYXQgKFNldmVyYWwgcGFyc2Vycyk6IE5ldy4KKwkqIHRlc3RzL2xvY2FsLmF0IChBVF9BUElfUFJFRklYKTogTmV3LgorCUFUX1lZU1RZUEUsIEFUX1lZTFRZUEUpOiBBZGp1c3QuCisJKiBkb2MvYmlzb24udGV4aSAoTXVsdGlwbGUgUGFyc2Vycyk6IE1vdmUgZG9jdW1lbnRhdGlvbiBvZiAlbmFtZS1wcmVmaXggdG8uLi4KKwkoVGFibGUgb2YgU3ltYm9scyk6IGhlcmUuCisJKE11bHRpcGxlIFBhcnNlcnMpOiBEb2N1bWVudCBhcGkucHJlZml4LgorCSglZGVmaW5lIFN1bW1hcnkpOiBQb2ludCB0byBpdC4KKwlVc2UgQGNvZGUgZm9yIHZhcmlhYmxlIG5hbWVzLgorCShCaXNvbiBPcHRpb25zKTogLXAvLS1uYW1lLXByZWZpeCBhcmUgb2Jzb2xldGVkLgorCSogTkVXUzogQW5ub3VuY2UgYXBpLnByZWZpeC4KKworMjAxMi0wNi0yOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCXRlc3RzOiB1c2UgdGhlIGdlbmVyYWxpemVkIGRlZmF1bHQgeXlsZXguCisJKiB0ZXN0cy9hY3Rpb25zLmF0LCB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdCwgdGVzdHMvcmVncmVzc2lvbi5hdDogaGVyZS4KKworMjAxMi0wNi0yOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCXRlc3RzOiBBVF9ZWUVSUk9SX0RFRklORTogcHJlcGFyZSBmb3IgbGlzdCBvZiBpbnRzLgorCSogdGVzdHMvbG9jYWwuYXQgKEFUX1lZRVJST1JfREVGSU5FKTogRG9uJ3QgYWRkIHF1b3RlcywgY2hlY2sgdGhlaXIKKwlwcmVzZW5jZSB0byBkZXRlY3QgY2hhci9pbnQgdHlwZXMuCisJKiB0ZXN0cy9hY3Rpb25zLmF0LCB0ZXN0cy9jb25mbGljdHMuYXQsIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0LAorCSogdGVzdHMvcHVzaC5hdCwgdGVzdHMvcmVncmVzc2lvbi5hdDogQWRqdXN0LgorCisyMDEyLTA2LTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJc2tlbGV0b25zOiBubyBsb25nZXIgZGVmaW5lIFlZTFNQX05FRURFRC4KKwkqIGRhdGEvYy5tNCwgZGF0YS9nbHIuY2M6IGhlcmUuCisJKiBORVdTLCBUT0RPOiBBZGp1c3QuCisKKzIwMTItMDYtMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwljKys6IGRvIG5vdCBleHBvcnQgWVlUT0tFTl9UQUJMRSBhbmQgWVlFUlJPUl9WRVJCT1NFLgorCSogc3JjL291dHB1dC5jIChwcmVwYXJlX3N5bWJvbHMpOiBEbyBub3QgZGVmaW5lIGI0X3Rva2VuX3RhYmxlLgorCShwcmVwYXJlKTogRGVmaW5lIGI0X3Rva2VuX3RhYmxlX2ZsYWcuCisJKiBkYXRhL2Jpc29uLm00IChiNF90b2tlbl90YWJsZV9pZik6IE5ldy4KKwlBcm0gaXQgd2hlbiBlcnJvci12ZXJib3NlLgorCSogZGF0YS9nbHIuYywgZGF0YS95YWNjLmMgKFlZVE9LRU5fVEFCTEUpOiBSZW1vdmUuCisJVXNlIG00LgorCSogZGF0YS9sYWxyMS5jYzogTGlrZXdpc2UuCisJKFlZRVJST1JfVkVSQk9TRSk6IFJlbW92ZS4KKwkqIE5FV1MsIGRvYy9iaXNvbi50ZXhpOiBEb2N1bWVudCB0aGlzLgorCisyMDEyLTA2LTI2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJbWFpbnQ6IHVzZSAqLnRleGkuCisJVGhpcyBpcyBtb3JlIGNvbnNpc3RlbnQgd2l0aCB0aGUgb3RoZXIgcGFja2FnZXMsIGFuZCBBdXRvbWFrZS1ORworCXN1cHBvcnRzIG9ubHkgKi50ZXhpLgorCisJKiBkb2MvYmlzb24udGV4aW5mbzogUmVuYW1lIGFzLi4uCisJKiBkb2MvYmlzb24udGV4aTogdGhpcy4KKwkqIGRvYy9NYWtlZmlsZS5hbSwgZXhhbXBsZXMvY2FsYysrL01ha2VmaWxlLmFtOiBBZGp1c3QuCisKKzIwMTItMDYtMjYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwl0ZXN0czogZG8gbm90IG91dHB1dCBtNCBzZXQgdXAuCisJKiB0ZXN0cy9sb2NhbC5hdCAoQVRfQklTT05fT1BUSU9OX1BVU0hERUZTLCBBVF9CSVNPTl9PUFRJT05fUE9QREVGUyk6CisJVXNlIGEgZGl2ZXJzaW9uIHRvIGF2b2lkIG91dHB1dHRpbmcgY29tbWVudHMgZXRjLgorCVJlbW92ZXMgMTdrIGxpbmVzIGZyb20gdGVzdHN1aXRlICgxMCUgb2YgdGhlIG51bWJlciBvZiBsaW5lcykuCisKKzIwMTItMDYtMjYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwl0ZXN0czogdXNlIHRoZSBnZW5lcmljIHl5ZXJyb3IgZnVuY3Rpb24uCisJKiB0ZXN0cy9hY3Rpb25zLmF0IChfQVRfQ0hFQ0tfUFJJTlRFUl9BTkRfREVTVFJVQ1RPUik6IEZhY3Rvci4KKwlVc2UgQVRfWVlFUlJPUl9ERUZJTkUuCisJVGhlcmVmb3JlLCBpbnN0ZWFkIG9mIHVzaW5nIHN0ZG91dCwgdXNlIGFuZCBjaGVjayBzdGRlcnIuCisJKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdCAoVW5pbml0aWFsaXplZCBsb2NhdGlvbiB3aGVuIHJlcG9ydGluZyBhbWJpZ3VpdHkpOgorCVVzZSBBVF9ZWUVSUk9SX0RFRklORS4KKworMjAxMi0wNi0yNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCXRlc3RzOiB1c2UgYXNzZXJ0IGluc3RlYWQgb2YgcGxhaW4gYWJvcnQuCisJKiB0ZXN0cy9hY3Rpb25zLmF0LCB0ZXN0cy9jYWxjLmF0LCB0ZXN0cy9jb25mbGljdHMuYXQsCisJKiB0ZXN0cy9jeHgtdHlwZS5hdCwgdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQsIHRlc3RzL2lucHV0LmF0LAorCSogdGVzdHMvbmFtZWQtcmVmcy5hdCwgdGVzdHMvcmVncmVzc2lvbi5hdCwgdGVzdHMvdG9ydHVyZS5hdCwKKwkqIHRlc3RzL2xvY2FsLmF0OgorCVByZWZlciBhc3NlcnQgdG8gYWJvcnQuCisKKzIwMTItMDYtMjYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwl0ZXN0czogaW1wcm92ZSB0aGUgZ2VuZXJpYyB5eWxleCBpbXBsZW1lbnRhdGlvbi4KKwkqIHRlc3RzL2xvY2FsLmF0IChBVF9ZWVNUWVBFLCBBVF9ZWUxUWVBFKTogTmV3LgorCShBVF9ZWUxFWF9GT1JNQUxTKTogVXNlIHRoZW0uCisJKEFUX1lZTEVYX0RFRklORSk6IEJlIGluZGVwZW5kZW50IG9mIHRoZSBsb2NhdGlvbiBpbXBsZW1lbnRhdGlvbi4KKworMjAxMi0wNi0yNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCXRlc3RzOiBnZW5lcmFsaXplIHRoZSBjb21waWxhdGlvbiBtYWNyb3MuCisJKiB0ZXN0cy9sb2NhbC5hdCAoQVRfQ09NUElMRSwgQVRfQ09NUElMRV9DWFgpOiBJZiBPVVRQVVQgZW5kcyB3aXRoICIubyIsCisJdGhlbiBhcHBlbmQgdGhlICJuYXR1cmFsIiBleHRlbnNpb24gZm9yIHRoZSBpbnB1dCBmaWxlICguYyBvciAuY2MpLgorCUlmIHRoZXJlIGlzIG5vIHNvdXJjZSwgcGFzcyAtYy4KKwkqIHRlc3RzL2hlYWRlcnMuYXQsIHRlc3RzL2lucHV0LmF0LCB0ZXN0cy9yZWdyZXNzaW9uLmF0OiBBZGp1c3QuCisKKzIwMTItMDYtMjYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwl0ZXN0czogZml4IGNvbmZ1c2lvbiBiZXR3ZWVuIGFwaS5wcmVmaXggYW5kIG5hbWUtcHJlZml4LgorCSogdGVzdHMvbG9jYWwuYXQgKEFUX05BTUVfUFJFRklYKTogVGFrZSBhcGkucHJlZml4IGludG8gYWNjb3VudC4KKwkoQVRfQVBJX1BSRUZJWCk6IFJlbmFtZSBhcy4uLgorCShBVF9BUElfcHJlZml4KTogdGhpcy4KKwlEbyBub3QgdGFrZSAlbmFtZS1wcmVmaXggaW50byBhY2NvdW50LgorCUZpeCBtaXN1c2VzLgorCisyMDEyLTA2LTI2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJbWFpbnQ6IGdpdGlnbm9yZXMuCisKKzIwMTItMDYtMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwl5YWNjOiB3b3JrIGFyb3VuZCB0aGUgeWx3cmFwIGxpbWl0YXRpb24uCisJKiBkYXRhL3lhY2MuYyAoYjRfc2hhcmVkX2RlY2xhcmF0aW9ucyk6IEluY2x1ZGUgdGhlIGhlYWRlciBndWFyZHMuCisJRG8gbm90IGluY2x1ZGUgdGhlIGhlYWRlciBpbiB0aGUgKi5jIGZpbGUsIGR1cGxpY2F0ZSBpdC4KKwkqIE5FV1MgKEZ1dHVyZSBDaGFuZ2VzKTogRXh0ZW5kLCBhbmQgYW5ub3VuY2UgdGhlIGZvcnRoY29taW5nIGNoYW5nZQorCWFib3V0IHRoZSB1c2Ugb2YgdGhlIHBhcnNlciBoZWFkZXIuCisKKzIwMTItMDYtMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwl0ZXN0czogbW9yZSB1bmlmb3JtaXR5LgorCSogdGVzdHMvbG9jYWwuYXQgKEFUX0xFWF9GT1JNQUxTLCBBVF9MRVhfQVJHUywgQVRfTEVYX1BSRV9GT1JNQUxTKQorCShBVF9MRVhfUFJFX0FSR1MpOiBSZW5hbWUgYXMuLi4KKwkoQVRfWVlMRVhfRk9STUFMUywgQVRfWVlMRVhfQVJHUywgQVRfWVlMRVhfUFJFX0ZPUk1BTFMpCisJKEFUX1lZTEVYX1BSRV9BUkdTKTogdGhlc2UsIGZvciBjb25zaXN0ZW5jeS4KKwkoQVRfQVBJX1BSRUZJWCk6IFRha2UgJW5hbWUtcHJlZml4IGludG8gYWNjb3VudC4KKwkoQVRfWVlMRVhfUFJPVE9UWVBFKTogTmV3LgorCVVzZSBpdC4KKwkqIHRlc3RzL2FjdGlvbnMuYXQsIHRlc3RzL2NhbGMuYXQsIHRlc3RzL2N4eC10eXBlLmF0OiBBZGp1c3QgdG8KKwl1c2UgdGhlbS4KKworMjAxMi0wNi0yMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCXRlc3RzOiBoYW5kbGUgbG9jYXRpb25zIGluIGEgbW9yZSBnZW5lcmljIHdheS4KKwkqIHRlc3RzL2xvY2FsLmF0IChBVF9ZWUVSUk9SX1BST1RPVFlQRSk6IE5ldy4KKwlVc2UgaXQuCisJKiB0ZXN0cy9jeHgtdHlwZS5hdDogRXh0ZW5zaXZlIHJldmFtcCB0byB1c2UgYSBtb3JlIHRyYWRpdGlvbmFsCisJcXVvdGF0aW9uIHNjaGVtZSwgYW5kIHRvIHVzZSB0aGUgZ2VuZXJpYyB5eWVycm9yIGltcGxlbWVudGF0aW9uLgorCVByZWZlciBBdXRvdGVzdCBtYWNyb3MgdG8gQ1BQIG1hY3Jvcy4KKwkqIHRlc3RzL2phdmEuYXQ6IC4KKworMjAxMi0wNi0yMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCXRlc3RzOiBoYW5kbGUgbG9jYXRpb25zIGluIHRoZSBnZW5lcmljIHl5ZXJyb3IgZnVuY3Rpb25zLgorCSogdGVzdHMvbG9jYWwuYXQgKEFUX1lZRVJST1JfREVDTEFSRV9FWFRFUk4sIEFUX1lZRVJST1JfREVDTEFSRSkKKwkoQVRfWVlFUlJPUl9ERUZJTkUpOiBIYW5kbGUgbG9jYXRpb25zIGZvciBDIGFuZCBDKysuCisJKiB0ZXN0cy9jYWxjLmF0OiBVc2UgaXQgZm9yIEMrKyAoYXMgQyBoYXMgZXh0cmEgYXJndW1lbnRzIHdoaWNoCisJYXJlIG5vdCB5ZXQgaGFuZGxlZCBieSBBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMpLgorCSogdGVzdHMvYWN0aW9ucy5hdDogQWRqdXN0LgorCisyMDEyLTA2LTIyICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJdGVzdHM6IGZpeCBBVF9DSEVDS19DQUxDLgorCSogdGVzdHMvY2FsYy5hdCAoQVRfQ0hFQ0tfQ0FMQyk6IENvbnRyYXJ5IHRvIGl0cyBkb2N1bWVudGF0aW9uLAorCXRoZSB0ZXN0IHdhcyBza2lwcGVkIGlmIGdpdmVuIGEgc2Vjb25kIGFyZ3VtZW50LgorCVVudXNlZCBmZWF0dXJlLCByZW1vdmUgaXQuCisKKzIwMTItMDYtMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwl0ZXN0czogaW1wcm92ZSBpbmZyYXN0cnVjdHVyZQorCSogdGVzdHMvbG9jYWwuYXQgKEFUX0xBTkcpOiBVc2UgYysrIGluc3RlYWQgb2YgY3h4IGZvciBDKysuCisJQWRqdXN0IGRlcGVuZGVuY2llcy4KKwkoQVRfWVlFUlJPUl9ERUNMQVJFX0VYVEVSTiwgQVRfWVlFUlJPUl9ERUNMQVJFKTogSXNzdWUgbm90aGluZworCWZvciBDKysvSmF2YS4KKwkoQVRfWVlFUlJPUl9ERUZJTkUpOiBVc2UgbTRfY2FzZS4KKwkoQVRfSkFWQV9DT01QSUxFKTogVXNlIEFUX1NLSVBfSUYuCisKKzIwMTItMDYtMjEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwl0ZXN0czogZmFjdG9yLgorCSogdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQsIHRlc3RzL291dHB1dC5hdCwgdGVzdHMvcHVzaC5hdCwKKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQsIHRlc3RzL3RvcnR1cmUuYXQsIHRlc3RzL2FjdGlvbnMuYXQ6CisJVXNlIEFUX1lZTEVYXyogYW5kIEFUX1lZRVJST1JfKi4KKworMjAxMi0wNi0yMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCXNrZWxldG9uczogbWlub3Igc3R5bGUgY2hhbmdlcworCSogZGF0YS9nbHIuYywgZGF0YS95YWNjLmM6IGhlcmUuCisKKzIwMTItMDYtMjEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwl0ZXN0czogQVRfTEFORy4KKwkqIHRlc3RzL2xvY2FsLmF0IChBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMsIEFUX0JJU09OX09QVElPTl9QT1BERUZTKToKKwlEZWZpbmUvdW5kZWZpbmUgQVRfTEFOR0UKKwkoQVRfTEFOR19DT01QSUxFKTogTmV3LgorCShBVF9GVUxMX0NPTVBJTEUpOiBVc2UgQVRfTEFORy4KKworMjAxMi0wNi0yMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWMgc2tlbGV0b25zOiBmYWN0b3IgdGhlIGRlY2xhcmF0aW9uIG9mIHl5bGxvYyBhbmQgeXlsdmFsLgorCVRoZXJlIGlzIG9uZSBkaWZmZXJlbmNlOiBub3csIGV2ZW4gd2l0aG91dCAtLWRlZmluZXMsIHdlIGdlbmVyYXRlCisJZXh0ZXJuIGRlY2xhcmF0aW9ucyBmb3IgdGhlc2UgdmFyaWFibGVzLiAgVGhlIGZhY3RvcmluZyBpcyB3b3J0aCBpdC4KKwkqIGRhdGEvYy5tNCAoYjRfZGVjbGFyZV95eWxzdHlwZSk6IERlY2xhcmUgdGhlbS4KKwkqIGRhdGEvZ2xyLmMsIGRhdGEveWFjYy5jOiBBZGp1c3QuCisKKzIwMTItMDYtMjEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwluZXdzOiBjb25kZW1uIFlZUEFSU0VfUEFSQU0gYW5kIFlZTEVYX1BBUkFNLgorCSogTkVXUzogaGVyZS4KKwkoQmlzb24gMS44NzUpOiBBZGQgJXBhcnNlLXBhcmFtIGFuZCAlbGV4LXBhcmFtLgorCSogZG9jL2Jpc29uLnRleGluZm86IFNwZWxsby4KKworMjAxMi0wNi0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCW1haW50OiByZWdlbi4KKwkqIE1ha2VmaWxlLmFtIChyZWdlbik6IE5ldyB0YXJnZXQuCisKKzIwMTItMDYtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwltYWludDogZm9ybWF0dGluZyBjaGFuZ2VzLgorCSogTkVXUzogRml4IGluZGVudGF0aW9uIG9mIGNvZGUgc25pcHBldHMuCisJVW50YWJpZnkuCisKKzIwMTItMDYtMTcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwl0ZXN0czogc3VwcG9ydCBhcGkucHJlZml4LgorCSogdGVzdHMvbG9jYWwuYXQgKEFUX0JJU09OX09QVElPTl9QVVNIREVGUywgQVRfQklTT05fT1BUSU9OX1BPUERFRlMpOgorCURlZmluZSBBVF9BUElfUFJFRklYLgorCShBVF9ZWUVSUk9SX0RFRklORSwgQVRfWVlFUlJPUl9ERUNMQVJFX0VYVEVSTiwgQVRfWVlMRVhfREVDTEFSRV9FWFRFUk4pCisJKEFUX1lZTEVYX0RFRklORSk6IFVzZSBpdC4KKwkqIHRlc3RzL2lucHV0LmF0LCB0ZXN0cy9yZWdyZXNzaW9uLmF0LCB0ZXN0cy90b3J0dXJlLmF0OiBBZGQKKwlBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMvUE9QREVGUy4KKworMjAxMi0wNi0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCXRlc3RzOiBwYWNpZnkgZm9udC1sb2NrLW1vZGUuCisJKiB0ZXN0cy9sb2NhbC5hdDogaGVyZS4KKworMjAxMi0wNi0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCXRlc3RzOiByZW1vdmUgdGVzdCBjb3ZlcmVkIGVsc2V3aGVyZS4KKwkqIHRlc3RzL2hlYWRlcnMuYXQgKCV1bmlvbiBhbmQgLS1kZWZpbmVzKTogUmVtb3ZlLCBwcmV0dHkgdXNlbGVzcyBhbmQKKwlpbnNpZ25pZmljYW50LgorCisyMDEyLTA2LTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJdGVzdHM6IGZhY3RvciB0aGUgZGVjbGFyYXRpb24vZGVmaW5pdGlvbiBvZiB5eWVycm9yIGFuZCB5eWxleC4KKwkqIHRlc3RzL2xvY2FsLmF0IChBVF9ZWUVSUk9SX0RFQ0xBUkUsIEFUX1lZRVJST1JfREVDTEFSRV9FWFRFUk4pCisJKEFUX1lZRVJST1JfREVGSU5FLCBBVF9ZWUxFWF9ERUNMQVJFLCBBVF9ZWUxFWF9ERUNMQVJFX0VYVEVSTikKKwkoQVRfWVlMRVhfREVGSU5FKTogTmV3LgorCU11c3QgYmUgdXNlZCBpbnNpZGUgQVRfQklTT05fT1BUSU9OX1BVU0hERUZTL1BPUERFRlMgcGFpci4KKwkqIHRlc3RzL2FjdGlvbnMuYXQsIHRlc3RzL2NvbmZsaWN0cy5hdCwgdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQsCisJKiB0ZXN0cy9oZWFkZXJzLmF0LCB0ZXN0cy9pbnB1dC5hdCwgdGVzdHMvbmFtZWQtcmVmcy5hdCwKKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQsIHRlc3RzL3NrZWxldG9ucy5hdCwgdGVzdHMvc3luY2xpbmVzLmF0LAorCSogdGVzdHMvdG9ydHVyZS5hdDogVXNlIHRoZW0uCisKKzIwMTItMDYtMTcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwlyZWdlbi4KKworMjAxMi0wNi0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCXRlc3RzOiBwb3J0YWJpbGl0eSBpc3N1ZXMuCisJKiB0ZXN0cy9jYWxjLmF0IChBVF9DQUxDX01BSU4pOiBNaXNzaW5nIGluY2x1ZGUgcmVwb3J0ZWQgYnkgSHlkcmEuCisKKzIwMTItMDYtMTUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwl0ZXN0czogY2FsbCB0aGUgcGFyc2VyIGZyb20gYW5vdGhlciBjb21waWxhdGlvbiB1bml0LgorCUluIG9yZGVyIHRvIGltcHJvdmUgdGhlIHRlc3Rpbmcgb2YgJWRlZmluZXMsIHdoaWNoIGV4cG9ydHMgdGhlCisJaW50ZXJmYWNlIG9mIHRoZSBnZW5lcmF0ZWQgcGFyc2VyLCBjaGFuZ2UgdGhlIGNhbGMuYXQgdGVzdHMgc28gdGhhdAorCXdoZW4gJWRlZmluZXMgaXMgcGFzc2VkLCBtYWluIHdpbGwgYmUgaW4gYW5vdGhlciBjb21waWxhdGlvbiB1bml0LiAgSXQKKwlsb2FkcyB0aGUgZ2VuZXJhdGVkIGhlYWRlci4KKworCSogdGVzdHMvY2FsYy5hdCAoQVRfQ0FMQ19NQUlOKTogTmV3LgorCUluY2x1ZGVzIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBnbG9iYWwgdmFyaWFibGVzLgorCVRoZXJlZm9yZSwgbm93IGRlY2xhcmUgdGhlbSBmcm9tIHRoZSAlcmVxdWlyZXMgc2VjdGlvbiBvZiB0aGUgcGFyc2VyLgorCUFkanVzdCB0byB5eWRlYnVnIGFuZCB5eXBhcnNlIGJlaW5nIHJlbmFtZWQgYnkgJW5hbWUtcHJlZml4LgorCisyMDEyLTA2LTE1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJZ2xyLmMsIHlhY2MuYzogZGVjbGFyZSB5eWRlYnVnIGluIHRoZSBoZWFkZXIuCisJKiBkYXRhL2MubTQgKGI0X2RlY2xhcmVfeXlkZWJ1Zyk6IE5ldy4KKwkqIGRhdGEvZ2xyLmMsIGRhdGEveWFjYy5jIChiNF9zaGFyZWRfZGVjbGFyYXRpb25zKTogVXNlIGl0LgorCVJlbW92ZSB0aGUgY29ycmVzcG9uZGluZyBjb2RlIGZyb20gdGhlIHBhcnNlciBib2R5LgorCSogTkVXUzogRG9jIHRoaXMuCisKKzIwMTItMDYtMTUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwlza2VsZXRvbnM6IHVzZSBoZWFkZXIgZ3VhcmRzLgorCSogZGF0YS9nbHIuYywgZGF0YS9nbHIuY2MsIGRhdGEveWFjYy5jOiBoZXJlLgorCSogTkVXUzogRG9jdW1lbnQgaXQuCisKKzIwMTItMDYtMTUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwl0ZXN0czogaW1wcm92ZSBBVF9GVUxMX0NPTVBJTEUuCisJKiB0ZXN0cy9sb2NhbC5hdDogQWNjZXB0IGEgdGhpcmQgYXJndW1lbnQuCisJU2ltcGxpZnkgcXVvdGF0aW9uIHBhdHRlcm4uCisJQ2FsbHMgZm9yIGJldHRlciByZWZhY3RvcmluZywgYnV0IHdpbGwgc3VmZmljZSBmb3IgYSB3aGlsZS4KKworMjAxMi0wNi0xNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCXRlc3RzOiByZW9yZGVyLgorCSogdGVzdHMvY2FsYy5hdCAocG93ZXIpOiBNb3ZlIGl0cyBkZWZpbml0aW9uLCBhcyBhIHByZXBhcmF0aW9uIGZvcgorCWZvcnRoY29taW5nIGNoYW5nZXMuCisJQW5kIHNwYWNlIGNoYW5nZXMuCisKKzIwMTItMDYtMTUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwl0ZXN0czogc3RyZW5ndGhlbiB0aGUgdGVzdCBvbiBnZW5lcmF0ZWQgaGVhZGVycyBpbmNsdXNpb24KKwkqIHRlc3RzL2hlYWRlcnMuYXQgKEFUX1RFU1RfQ1BQX0dVQVJEX0gpOiBBY2NlcHQgQmlzb24gZGlyZWN0aXZlcy4KKwkoSW52YWxpZCBDUFAgaGVhZGVycyk6IENoZWNrIGdsci4KKworMjAxMi0wNi0xNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCXlhY2MuYzogaW5zdGVhZCBvZiBkdXBsaWNhdGluZyB5LnRhYi5oIGluc2lkZSB5LnRhYy5jLCBpbmNsdWRlIGl0LgorCVRoaXMgaXMgYWxyZWFkeSB3aGF0IGdsci5jIGFuZCBsYWxyMS5jYyBkby4KKworCSogZGF0YS95YWNjLmM6IGhlcmUuCisKKzIwMTItMDYtMTMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwl5YWNjLmM6IGZhY3Rvci4KKwl5YWNjLmMgdXNlZCB0byBpbmNsdWRlIHR3byBhbG1vc3QgaWRlbnRpY2FsIHNlY3Rpb25zOiBvbmUgZm9yIHRoZSAqLmgKKwlmaWxlLCBhbmQgYW5vdGhlciBmb3IgdGhlICouYyBmaWxlLiAgVGhlIG1haW4gZGlmZmVyZW5jZSBpcyB0aGF0IGluCisJdGhlICouYyBmaWxlIHdlIHVzZWQgdGhlIHl5KiBuYW1lcyAoYXMgJW5hbWUtcHJlZml4IGlzIGhhbmRsZWQgYnkKKwkiI2RlZmluZSB5eSogPHByZWZpeD4qIiBiZWZvcmUpLCB3aGlsZSB0aGUgKi5oaCB1c2VkIDxwcmVmaXg+KiBuYW1lcy4KKwlLZWVwIG9ubHkgdGhlIGxhdGVyLiAgSWYgdGhpcyBpcyB0cm91Ymxlc29tZSwgYjRfc2hhcmVkX2RlY2xhcmF0aW9ucworCWNhbiBlYXNpbHkgdGFrZSB0aGUgZGVzaXJlZCBwcmVmaXggYXMgYXJndW1lbnQuCisKKwkqIGRhdGEveWFjYy5jIChiNF9zaGFyZWRfZGVjbGFyYXRpb25zKTogTmV3LgorCVVzZSBpdCB0byBmYWN0b3IgZHVwbGljYXRlZCBkZWNsYXJhdGlvbnMuCisKKzIwMTItMDYtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwlza2VsZXRvbnM6IGZhY3RvciB5YWNjLmMgYW5kIGdsci5jLgorCXlhY2MuYyBhbmQgZ2xyLmMgc2hhcmUgY29tbW9uIGRlY2xhcmF0aW9ucy4gIFRoZWlyIFlZTFRZUEUgYXJlIGV4YWN0bHkKKwllcXVhbCwgYW5kIHRoZWlyIFlZU1RZUEUgYXJlIHN1ZmZpY2llbnRseSBhbGlrZSB0byBiZSBmdXNlZCAoaXRzCisJZGVjbGFyYXRpb24gd2FzIHByb3RlY3RlZCBieSBZWVNUWVBFX0lTX0RFQ0xBUkVEIGluIHlhY2MuYywgYnV0IG5vdCBpbgorCWdsci5jKS4gIEJlc2lkZXMsIHlhY2MuYyBkdXBsaWNhdGVkIHRoZSBkZWZpbml0aW9ucyBvZiBZWUxUWVBFIGFuZAorCVlZU1RZUEUgKCouaC8qLmMpLgorCisJKiBkYXRhL2MubTQgKGI0X2RlY2xhcmVfeXlsc3R5cGUpOiBOZXcuCisJKiBkYXRhL3lhY2MuYywgZGF0YS9nbHIuYzogVXNlIGl0LgorCisyMDEyLTA2LTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJZ2xyLmM6IG1pbm9yIHJlZmFjdG9yaW5nLgorCSogZGF0YS9nbHIuYyAoYjRfc2hhcmVkX2RlY2xhcmF0aW9ucyk6IE1vdmUgZnJvbSB0aGUgZ2VuZXJhdGVkIGZpbGUKKwlzZWN0aW9uLCB0byB0aGUgTTQgcHJvbG9ndWUuCisKKzIwMTItMDYtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwl0ZXN0czogcmVtb3ZlIGFsbCB0aGUgLU9uIGZsYWdzLgorCSogdGVzdHMvYXRsb2NhbC5pbjogSGVyZS4KKwlSZXBvcnRlZCBieSBHaWxsZXMgRXNwaW5hc3NlLgorCisyMDEyLTA2LTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJbWFpbnQ6IGZpeCBzcGVsbG8uCisJKiBSRUFETUUtaGFja2luZzogSGVyZS4KKwkqIFRIQU5LUzogUmVwb3J0ZWQgYnkgR2lsbGVzIEVzcGluYXNzZS4KKworMjAxMi0wNi0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCW1haW50OiBpbXByb3ZlIHJlbGVhc2UgcHJvY2VkdXJlIGluc3RydWN0aW9ucy4KKwkqIGdudWxpYjogVXBkYXRlLCBpbiBwYXJ0aWN1bGFyIChSRUFETUUtcmVsZWFzZSkuCisJKiBib290c3RyYXAuY29uZjogZG9uJ3QgcmVxdWlyZSBnZW5kb2NzLCBwcm92aWRlZCBieSBnbnUtd2ViLWRvYy11cGRhdGUsCisJcHJvdmlkZWQgYnkgcmVhZG1lLXJlbGVhc2UuCisJKiBSRUFETUUtaGFja2luZzogVXBkYXRlIGFjY29yZGluZ2x5LgorCisyMDEyLTA2LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJZ251bGliOiB1cGRhdGUgcmVhZG1lLXJlbGVhc2UuCisJKiBnbnVsaWIgKHJlYWRtZS1yZWxlYXNlKTogTm93IGluY2x1ZGVzIHRoZSBtb2R1bGVzIGl0IHByb21vdGVzLgorCSogYm9vdHN0cmFwLmNvbmY6IFNpbXBsaWZ5IGFjY29yZGluZ2x5LgorCisyMDEyLTA2LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJbWFpbnQ6IGNmZy5tazogbWFudWFsIHRpdGxlLgorCSogY2ZnLm1rIChtYW51ZWxfdGl0bGUpOiBOZXcuCisKKzIwMTItMDYtMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwltYWludDogY2ZnLm1rOiBzaW1wbGlmeQorCSogY2ZnLm1rOiBSZW1vdmUgYml0cyBwcm92aWRlZCBieSBtYWludC5tay4KKworMjAxMi0wNi0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCW1haW50OiBwb3N0LXJlbGVhc2UgYWRtaW5pc3RyaXZpYQorCSogTkVXUzogQWRkIGhlYWRlciBsaW5lIGZvciBuZXh0IHJlbGVhc2UuCisJKiAucHJldi12ZXJzaW9uOiBSZWNvcmQgcHJldmlvdXMgdmVyc2lvbi4KKwkqIGNmZy5tayAob2xkX05FV1NfaGFzaCk6IEF1dG8tdXBkYXRlLgorCisyMDEyLTA2LTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJdmVyc2lvbiAyLjUuMQorCSogTkVXUzogUmVjb3JkIHJlbGVhc2UgZGF0ZS4KKworMjAxMi0wNi0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCU5FV1M6IHByZXBhcmUgZm9yIDIuNS4xLgorCSogTkVXUzogQmUgY29tcGxpYW50IHdpdGggZG8tcmVsZWFzZS1jb21taXQtYW5kLXRhZy4KKworMjAxMi0wNi0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCW1haW50OiB1cGRhdGUgcmVsZWFzZSBwcm9jZWR1cmUKKwkqIGJvb3RzdHJhcC5jb25mOiBSZXF1ZXN0IGRvLXJlbGVhc2UtY29tbWl0LWFuZC10YWcgYW5kIHJlYWRtZS1yZWxlYXNlLgorCSogUkVBRE1FLWhhY2tpbmc6IEFkanVzdC4KKworMjAxMi0wNi0wNSAgSmltIE1leWVyaW5nICA8bWV5ZXJpbmdAcmVkaGF0LmNvbT4KKworCW1haW50OiBmaXggY29tbWVudCB0eXBvcworCVVzaW5nIGh0dHA6Ly9naXRodWIuY29tL2x5ZGEvbWlzc3BlbGwtY2hlY2ssIG1hc3NhZ2UgaXRzCisJb3V0cHV0IGludG8gc2VkIGNvbW1hbmRzIHRvIHBlcmZvcm0gdGhlIHN1Z2dlc3RlZCBjaGFuZ2VzLgorCUluaXRpYWxseSwgSSBmaWx0ZXJlZCBvdXQgdGhlIFRIUlUtPlRocm91Z2ggY2hhbmdlcywgYmVjYXVzZQorCXRoYXQgZmFpbGVkIHRvIHJldGFpbiBjYXBpdGFsaXphdGlvbiBpbiB0aGUgZ3JhbW1hciB0b2tlbi4KKwlJbnN0ZWFkLCBkbyB0aGlzIG1hbnVhbGx5LCBiZWZvcmVoYW5kOgorCisJc2VkIC1pIHMvVEhSVS9USFJPVUdILyB0ZXN0cy9leGlzdGluZy5hdAorCWdpdCBscy1maWxlc3xtaXNzcGVsbGluZ3MgLWYgLXxwZXJsIC1ubCBcCisJICAtZSAnL14oLio/KVxbKFxkKylcXTogKFx3KykgLT4gIiguKj8pIiQvIG9yIG5leHQ7JyBcCisJICAtZSAnKCRmaWxlLCRuLCRsLCRyKT0oJDEsJDIsJDMsJDQpOyAkcT0iJ1wnJyI7ICRyPX5zLyRxLyRxXFwkcSRxL2c7J1wKKwkgIC1lICdwcmludCAic2VkIC1pICRxJHtufXMhJGwhJHIhJHEgJGZpbGUiJ3xiYXNoCisKKzIwMTItMDUtMjMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwltYWludDogcG9zdC1yZWxlYXNlIGFkbWluaXN0cml2aWEKKwkqIE5FV1M6IEFkZCBoZWFkZXIgbGluZSBmb3IgbmV4dCByZWxlYXNlLgorCSogLnByZXYtdmVyc2lvbjogUmVjb3JkIHByZXZpb3VzIHZlcnNpb24uCisJKiBjZmcubWsgKG9sZF9ORVdTX2hhc2gpOiBBdXRvLXVwZGF0ZS4KKworMjAxMi0wNS0yMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCUJpc29uIDIuNS4xX3JjMi4KKwkqIE5FV1M6IFVwZGF0ZS4KKworMjAxMi0wNS0yMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWRvYzogZml4ZXMuCisJKiBkb2MvYmlzb24udGV4aW5mbzogRml4IGVycm9ycyBzcG90dGVkIGJ5IHN5bnRheC1jaGVjay4KKworMjAxMi0wNS0yMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWJ1aWxkOiBmaXggQ2hhbmdlTG9nIGdlbmVyYXRpb24uCisJKiBnbnVsaWI6IFVwZGF0ZSB0byBnZXQgbmV3ZXN0IGdpdGxvZy10by1jaGFuZ2Vsb2cuCisJKiBib290c3RyYXA6IFVwZGF0ZS4KKwkqIE1ha2VmaWxlLmFtIChnZW4tQ2hhbmdlTG9nKTogRml4IGZvciBCaXNvbidzIGdpdCBsb2cgc3R5bGUuCisKKzIwMTItMDUtMjEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwljKys6IGNvbXB1dGUgdGhlIGhlYWRlciBndWFyZHMuCisJVGhpcyBpcyBhIGZyZXF1ZW50IHJlcXVlc3QuICBSZWNlbnRseSBwb2ludGVkIG91dCBieSBXZWkgU29uZywKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2hlbHAtYmlzb24vMjAxMi0wNS9tc2cwMDAwMi5odG1sPi4KKworCSogZGF0YS9jLm00IChiNF90b2NwcCwgYjRfY3BwX2d1YXJkLCBiNF9jcHBfZ3VhcmRfb3BlbikKKwkoYjRfY3BwX2d1YXJkX2Nsb3NlKTogTmV3LgorCSogZGF0YS9sYWxyMS5jYywgZGF0YS9sb2NhdGlvbi5jYywgZGF0YS9zdGFjay5oaDogVXNlIHRoZW0uCisJKiBUT0RPIChIZWFkZXIgR3VhcmRzKTogTW92ZSB0by4uLgorCSogTkVXUzogaGVyZS4KKwlGb3JtYXR0aW5nIGNoYW5nZXMuCisKKzIwMTItMDUtMjEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwlza2VsZXRvbnM6IHJlbW92ZSBzdXBwb3J0IGZvciB1bnVzZWQgZGlyZWN0aXZlLgorCSogc3JjL3NjYW4tc2tlbC5sIChAZGlyX3ByZWZpeEApOiBSZW1vdmUgc3VwcG9ydCwgaGFzIG5ldmVyIGJlZW4KKwl1c2VkLCBub3QgZXZlbiBpbiB0aGUgY29tbWl0IHRoYXQgaW50cm9kdWNlZCBpdCwKKwkyYjgxZTk2OWVhMDRjMWE2NTAyOTI4YmE3ZTg0N2VjOGZmN2RjYjJmLgorCisyMDEyLTA1LTIxICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJbGFscjEuY2M6IGltcHJvdmUgRG94eWdlbiBkb2N1bWVudGF0aW9uLgorCSogZGF0YS9sb2NhdGlvbi5jYzogUXVhbGlmeSBmaWxlIG5hbWVzIHdpdGggZGlyZWN0b3J5IG5hbWUuCisKKzIwMTItMDUtMjEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwlsYWxyMS5jYzogZXh0cmFjdCBzdGFjay5oaC4KKwlTZWUgY29tbWl0IDUxYmFjYWU2YjU4ZmQ1YzZjY2U4NjFmMDA0NDBkYzkxNzM4NDYyNWUuCisJKiBkYXRhL3N0YWNrLmhoOiBOZXcsIGV4dHJhY3RlZCBmcm9tLi4uCisJKiBkYXRhL2xhbHIxLmNjOiBoZXJlLgorCSogZGF0YS9NYWtlZmlsZS5hbTogQWRqdXN0LgorCisyMDEyLTA1LTIxICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJbmV3czogY29udmVydCB0byBkb3VibGUgcXVvdGVzLgorCSogTkVXUzogQ29udmVydCBmcm9tIGBxdW90ZWQnIHRvICJxdW90ZWQiLgorCVJlcG9ydGVkIGJ5IFN0ZWZhbm8gTGF0dGFyaW5pLgorCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMTItMDUvbXNnMDAwMzkuaHRtbAorCisyMDEyLTA1LTIxICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJc3BhY2UgY2hhbmdlcy4KKwkqIHNyYy9mbGV4LXNjYW5uZXIuaDogSW5kZW50IG5lc3RlZCBjcHAgZGlyZWN0aXZlcy4KKworMjAxMi0wNS0yMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWJ1aWxkOiBkbyBub3QgcHJvdG90eXBlIGZsZXgtZ2VuZXJhdGVkIGZ1bmN0aW9ucy4KKwlTb21lIHZlcnNpb25zIG9mIEZsZXgsIHBvc3NpYmx5IG1vZGlmaWVkIGJ5IHRoZSBkaXN0cmlidXRpb24gcGFja2FnZQorCW1haW50YWluZXJzLCBoYXZlIGluY29tcGF0aWJsZSBzaWduYXR1cmVzLiAgU2luY2UgbmV3ZXIgdmVyc2lvbnMgb2YKKwlGbGV4IHByb3RvdHlwZSB0aGVpciBmdW5jdGlvbnMsIGF2b2lkIHRoZSBjb25mbGljdHMgaW4gdGhhdCBjYXNlLgorCVJlcG9ydGVkIGJ5IFN0ZWZhbm8gTGF0dGFyaW5pLgorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMTItMDUvbXNnMDAwMTIuaHRtbD4uCisKKwkqIHNyYy9mbGV4LXNjYW5uZXIuaCAoRkxFWF9WRVJTSU9OX0dUKTogTmV3LgorCVVzZSBpdCB0byBpc3N1ZSBwcm90b3R5cGVzIGZvciBmbGV4LWdlbmVyYXRlZCBmdW5jdGlvbnMgb25seSBmb3IKKwl2ZXJzaW9ucyB1cCB0byAyLjUuMzEsIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgY29tbWVudC4KKwlTZWUgY29tbWl0IGRjOTcwMWU4NDhmMjdhZTY0YjZkZGNmODA5NTgwOTk4NjY3ZDYwZjIuCisJVXNlIGl0IHRvIGRlZmluZSB5eWxleF9kZXN0cm95IHdoZW4gbmVlZGVkLgorCisyMDEyLTA1LTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJYnVpbGQ6IGZpeCBDaGFuZ2VMb2cgZ2VuZXJhdGlvbi4KKwkqIE1ha2VmaWxlLmFtIChnZW4tQ2hhbmdlTG9nKTogRml4IGZvciBWUEFUSCBidWlsZHMuCisKKzIwMTItMDUtMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwlCaXNvbiAyLjUuMV9yYzEuCisJKiBORVdTOiBVcGRhdGUuCisJKiBzcmMvcGFyc2UtZ3JhbS5jLCBzcmMvcGFyc2UtZ3JhbS5oOiBSZWdlbi4KKworMjAxMi0wNS0xMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCXRlc3RzOiBzYXZlL3Jlc3RvcmUgQXV0b3Rlc3Qgc3BlY2lhbCBmaWxlcyB3aGVuIGNoZWNraW5nIFhNTCBzdXBwb3J0LgorCUN1cnJlbnRseSB0aGUgdGVzdCAyNDgsICJwYXJzZS1ncmFtLnk6IExBTFIgPSBJRUxSIiwgZmFpbHMKKwlCSVNPTl9URVNUX1hNTCBpcyBzZXQuCisKKwkqIHRlc3RzL2xvY2FsLmF0IChBVF9CSVNPTl9DSEVDS19YTUwpOiBCZWx0OiBTYXZlL3Jlc3RvcmUgZmlsZXMuCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChwYXJzZS1ncmFtLnk6IExBTFIgPSBJRUxSKTogU3VzcGVuZGVyczogRG9uJ3QKKwlyZWx5IG9uIGV4cG91dC4KKwlFYWNoIG9uZSBvZiB0aGVzZSBjaGFuZ2VzIHN1ZmZpY2VzLgorCisyMDEyLTA1LTExICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJdGVzdHM6IEFUX1NBVkVfU1BFQ0lBTF9GSUxFUyAvIEFUX1JFU1RPUkVfU1BFQ0lBTF9GSUxFUy4KKwlTb21lIG9mIG91ciBtYWNyb3MgcGxheSB3aXRoIGV4cG91dCBhbmQgb3RoZXIgQXV0b3Rlc3Qgc3BlY2lhbCBmaWxlcywKKwl3aGljaCBtYXkgYnJlYWsgdGhlaXIgY2FsbGVycyAoZS5nLiwgY3VycmVudGx5IFRFU1RTVUlURUZMQUdTPScyNDgKKwlCSVNPTl9URVNUX1hNTD0xJyBmYWlscykuCisKKwlUaGVyZSBpcyBhbHJlYWR5IHNvbWUgc3VwcG9ydCBmb3IgdGhpcy4gIEV4cGFuZCBpdCB0byBiZSByZWFkeSB0byB1c2UKKwlpdCBlbHNld2hlcmUuCisKKwkqIHRlc3RzL2xvY2FsLmF0IChBVF9SRVNUT1JFX1NQRUNJQUxfRklMRVMsIEFUX1NBVkVfU1BFQ0lBTF9GSUxFUykKKwkoYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzLCBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMpOiBOZXcuCisJKEFUX0JJU09OX0NIRUNLX05PX1hNTCk6IFVzZSB0aGVtLgorCisyMDEyLTA1LTExICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJdGVzdHM6IGhvbm9yIFRFU1RTVUlURUZMQUdTIGluIGFsbCB0aGUgY2hlY2sgdGFyZ2V0cy4KKwkqIHRlc3RzL01ha2VmaWxlLmFtIChpbnN0YWxsY2hlY2stbG9jYWwpOiBTaW1wbGlmeS4KKwkobWFpbnRhaW5lci1jaGVjay1wb3NpeCwgbWFpbnRhaW5lci1jaGVjay12YWxncmluZCk6IEhvbm9yCisJJChURVNUU1VJVEVGTEFHUykuCisKKzIwMTItMDUtMTEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwlidWlsZDogZG8gbm90IGVuYWJsZSBjKysgd2FybmluZ3Mgb24gMCB3aGVuIG51bGxwdHIgaXMgbm90IHN1cHBvcnRlZC4KKwkqIGNvbmZpZ3VyZS5hYyAoV0FSTl9DWFhGTEFHUyk6IEVuYWJsZSAtV3plcm8tYXMtbnVsbC1wb2ludGVyLWNvbnN0YW50CisJb25seSB3aGVuIG51bGxwdHIgaXMgc3VwcG9ydGVkLi4KKworMjAxMi0wNS0xMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCW1haW50OiB1cGRhdGUgZ251bGliLgorCSogYm9vdHN0cmFwLCBnbnVsaWI6IFVwZGF0ZS4KKworMjAxMi0wNS0wOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWJ1aWxkOiBjb25maWcuaW4uaC4KKwlIaXN0b3JpY2FsbHkgd2UgdXNlZCBjb25maWcuaGluICh3aGVyZSBldmVyeWJvZHkgZWxzZSB1c2VkCisJY29uZmlnLmguaW4pIHRvIHBsZWFzZSBET1MuICBOb3cgdGhhdCB3ZSB1c2UgZ251bGliLCB0aGVyZSBhcmUgYWxyZWFkeQorCXRvbnMgb2YgZmlsZXMgd2l0aCBzZXZlcmFsIGRvdHMsIGVzcGVjaWFsbHkgKi5pbi5oLgorCisJKiBjb25maWd1cmUuYWM6IFJlbmFtZSBjb25maWcuaGluIGFzIGNvbmZpZy5pbi5oLgorCisyMDEyLTA1LTA5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJYnVpbGQ6IG1vdmUgc2lsZW50IHJ1bGVzLgorCSogdGVzdHMvTWFrZWZpbGUuYW06IEluIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSB0ZXN0IHN1aXRlLgorCisyMDEyLTA1LTA5ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCWdsci5jOiByZWR1Y2UgdmFyaWFibGUgc2NvcGVzLgorCSogZGF0YS9nbHIuYzogV2hlcmUgYXBwcm9wcmlhdGUsIGZ1c2UgdmFyaWFibGUgZGVjbGFyYXRpb25zIGZvbGxvd2VkCisJYnkgYXNzaWdubWVudHMgYnkgdmFyaWFibGUgZGVjbGFyYXRpb25zIHdpdGggYSB2YWx1ZS4KKwlXaGVyZSBhcHByb3ByaWF0ZSwgaW50cm9kdWNlIG5ldyBzY29wZXMgdG8gbGltaXQgdmFyaWFibGUgc3BhbnMuCisKKzIwMTItMDUtMDggIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwltYWludDogbWFpbnRhaW5lci1yZWxlYXNlLWNoZWNrLgorCSogdGVzdHMvTWFrZWZpbGUuYW0gKG1haW50YWluZXItcmVsZWFzZS1jaGVjayk6IE5ldy4KKwkqIE1ha2VmaWxlLmFtIChNQUlOVEFJTkVSX0NIRUNLUyk6IE5ldy4KKwlTdXBwb3J0IG1haW50YWluZXItcmVsZWFzZS1jaGVjay4KKwkqIFJFQURNRS1oYWNraW5nOiBEb2N1bWVudCBpdCwgYW5kIHN5bnRheC1jaGVjayB0b28uCisKKzIwMTItMDUtMDggIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwltYWludDogc2h1c2ggYSBzeW50YXgtY2hlY2suCisJKiBjZmcubWs6IGxpYi90aW1ldmFyIGlzIG5vdCBwbGFubmVkIHRvIGJlIGdudWxpYidlZCwgYXMgaXQgY29tZXMKKwlmcm9tIEdDQy4KKworMjAxMi0wNS0wOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCW1haW50OiBwcmVmZXIgImNvbW1pdCBtZXNzYWdlIiB0byAibG9nIGVudHJ5Ii4KKwkqIFJFQURNRS1oYWNraW5nOiBoZXJlLgorCVN1Z2dlc3RlZCBieSBTdGVmYW5vIExhdHRhcmluaS4KKworMjAxMi0wNS0wOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWNvbW1hbmQgbGluZTogZml4IG1pbm9yIGxlYWtzLgorCSogc3JjL2dldGFyZ3MuYyAoZ2V0YXJncyk6IEZyZWUgcG9pbnRlcnMgYmVmb3JlIGFsbG9jYXRpbmcgdGhlbSBuZXcKKwljb250ZW50LgorCisyMDEyLTA1LTA4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJbWFpbnQ6IHdlIG5vIGxvbmdlciBtYWludGFpbiB0aGUgQ2hhbmdlTG9nLgorCSogLmdpdGF0dHJpYnV0ZXM6IE5vIG5lZWQgdG8gbWVyZ2UgaXQuCisJKiBSRUFETUUtaGFja2luZzogVXBkYXRlIHJlbGVhc2UgaW5zdHJ1Y3Rpb25zLgorCisyMDEyLTA1LTA2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJbWFpbnQ6IGZpeCB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgc3luY2xpbmVzIGZvciBiaXNvbidzIHBhcnNlci4KKwkqIHRlc3RzL2Jpc29uLmluOiBJbXBvcnQgZnJvbSBtYXN0ZXIgdGhlIGNoYW5nZXMgdGhhdCBtYWtlCisJdGhpcyBzY3JpcHQgZ2VuZXJhdGUgc3luY2xpbmVzIHRoYXQgYXJlIGluZGVwZW5kYW50IG9mIHRoZQorCWJ1aWxkZGlyL3NyY2RpciB1c2VyJ3Mgc2V0IHVwLgorCisyMDEyLTA1LTA2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJbWFpbnQ6IHJlZ2VuLgorCSogc3JjL3BhcnNlLWdyYW0uYywgc3JjL3BhcnNlLWdyYW0uaDogUmVnZW4uCisKKzIwMTItMDUtMDYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwltYWludDogaW1wb3J0IHRoZSB4bWVtZHVwMCBnbnVsaWIgbW9kdWxlLgorCSogYm9vdHN0cmFwLmNvbmY6IFJlcXVpcmUgdGhpcyBtb2R1bGUuCisJKiBzcmMvcGFyc2UtZ3JhbS55OiBJbmNsdWRlIHhtZW1kdXAwLmguCisKKzIwMTItMDUtMDYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwltYWludDogcmVtb3ZlIGxlZnQtb3ZlciBnbnVsaWIgbW9kdWxlcy4KKwkqIGJvb3RzdHJhcC5jb25mIChnbnVsaWJfbW9kdWxlcyk6IFJlbW92ZSBwaXBlLXBvc2l4LgorCSogbGliLy5naXRpZ25vcmUsIG00Ly5naXRpZ25vcmU6IFJlbW92ZSBmaWxlcyB0aGF0IHdlIG5vIGxvbmdlciB1c2UuCisKKzIwMTItMDUtMDYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwltYWludDogaWdub3JlIGZpbGVzIGltcG9ydGVkIGJ5IGF1dG9wb2ludC4KKwkqIG00Ly5naXRpZ25vcmU6IGhlcmUuCisKKzIwMTItMDUtMDYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwlidWlsZDogQUNfUFJPR19MRVg6IHVzZSBtb3JlIHJlYWRhYmxlIHZhcmlhYmxlIG5hbWVzLgorCSogbTQvZmxleC5tNCAoQUNfUFJPR19MRVgpOiBQcmVmZXIgTEVYX0lTX0ZMRVggdG8gRkxFWC4KKwlQcmVmZXIgdHJ1ZS9mYWxzZSB0byB5ZXMvbm8gZm9yIHN1Y2ggdmFyaWFibGVzLgorCSogY29uZmlndXJlLmFjOiBBZGp1c3QuCisKKzIwMTItMDUtMDYgIEppbSBNZXllcmluZyAgPG1leWVyaW5nQHJlZGhhdC5jb20+CisKKwltYWludDogcmVnZW4gc3JjL3BhcnNlLWdyYW0uW2NoXQorCisyMDEyLTA1LTA2ICBKaW0gTWV5ZXJpbmcgIDxtZXllcmluZ0ByZWRoYXQuY29tPgorCSAgICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJbWFpbnQ6IHNpbXBsaWZ5IHBhcnNlLWdyYW0ueQorCSogc3JjL3BhcnNlLWdyYW0ueSAoYWRkX3BhcmFtKTogVXNlIHhtZW1kdXAwIGluIHBsYWNlIG9mCisJeG1hbGxvYyttZW1jcHksIGFuZCBzdHJzcG4gaW4gcGxhY2Ugb2YgYW4gb3Blbi1jb2RlZCBsb29wLgorCisyMDEyLTA1LTA2ICBKaW0gTWV5ZXJpbmcgIDxtZXllcmluZ0ByZWRoYXQuY29tPgorCisJbWFpbnQ6IHMvc3RybmNweS9tZW1jcHkvLCB3aGVuIGVxdWl2YWxlbnQKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3NrZWxldG9uKTogVXNlIG1lbWNweSwgbm90IHN0cm5jcHksCisJc2luY2UgdGhlIHNvdXJjZSBpcyBrbm93biB0byBmaXQgaW4gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4KKwkqIHNyYy9wYXJzZS1ncmFtLnkgKCVza2VsZXRvbik6IExpa2V3aXNlLgorCisyMDEyLTA1LTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJZ2xyLmM6IHVudGFiaWZ5LgorCSogZGF0YS9nbHIuYzogaGVyZS4KKworMjAxMi0wNS0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWdsci5jYzogdW50YWJpZnkuCisJKiBkYXRhL2dsci5jYzogaGVyZS4KKworMjAxMi0wNS0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWdsci5jYzogZm9ybWF0dGluZyBjaGFuZ2VzLgorCSogZGF0YS9nbHIuY2M6IEZpdCBpbiA4MCBjb2x1bW5zLgorCisyMDEyLTA1LTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJZ2xyLmNjOiByZW1vdmUgdW51c2VkIHNpZ25hdHVyZS4KKwkqIGRhdGEvZ2xyLmNjICh5eWRlc3RydWN0Xyk6IE5vdCB1c2VkLCByZW1vdmUuCisJSXQgaXMgeXlkZXN0cnVjdCB3aGljaCBpcyB1c2VkLgorCisyMDEyLTA1LTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJZ2xyLmNjOiBwcm9wZXJseSBkZWNsYXJlIGxvY2F0aW9ucyBhcmUgY29uc3Qgd2hlcmUgYXBwcm9wcmlhdGUuCisJKiBkYXRhL2dsci5jYyAoeXllcnJvcik6IFRoZSBsb2NhdGlvbiBpcyBjb25zdC4KKworMjAxMi0wNS0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWRvYzogZml4IEB4cmVmLgorCSogZG9jL2Jpc29uLnRleGluZm86IGhlcmUuCisKKzIwMTItMDUtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwl0ZXN0czogaWdub3JlIGNvZGUgY292ZXJhZ2UvcHJvZmlsaW5nIGZhaWx1cmUgbWVzc2FnZXMKKwlUaGUgSHlkcmEgYnVpbGRmYXJtIHByb3ZpZGVzIGNvZGUgY292ZXJhZ2UgYW5hbHlzaXMuICBGb3Igc29tZSByZWFzb24sCisJaW4gc29tZSB0ZXN0IGNhc2VzLCBjb2RlIGNvdmVyYWdlIGRhdGEgc2VlbSB0byBiZSBpbmNvbXBhdGlibGUsIGFuZAorCWdlbmVyYXRlIGVycm9yIG1lc3NhZ2VzIGF0IHBhcnNlciBydW4tdGltZS4gIElnbm9yZSB0aGVzZSBtZXNzYWdlcyBzbworCXRoYXQgKGkpIHRoZXNlIHRlc3RzIGRvIHBhc3MsIChpaSkgY292ZXJhZ2UgcmVzdWx0cyBiZSBwcm92aWRlZCBieQorCUh5ZHJhLgorCisJKiB0ZXN0cy9sb2NhbC5hdCAoQVRfUEFSU0VSX0NIRUNLKTogSWdub3JlIG1lc3NhZ2VzIGZvciBmYWlsZWQgbWVyZ2VzCisJb2YgY29kZSBjb3ZlcmFnZS9wcm9maWxpbmcgcmVzdWx0cy4KKworMjAxMi0wNC0xNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWRvYzogZml4IHNvbWUgaW52YWxpZCBAcmVmLgorCSogZG9jL2Jpc29uLnRleGluZm86IEZpeCBpbmNvcnJlY3QgQHJlZiB1c2VzLgorCisyMDEyLTA0LTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJYnVpbGQ6IGZpeCBwcmV2aW91cyBjb21taXQuCisJKiBib290c3RyYXA6IFVwZGF0ZSBmcm9tIGdudWxpYi4KKworMjAxMi0wNC0xNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWluc3RhbGwtcGRmOiBmaXguCisJKiBnbnVsaWI6IEZpeCBpbnN0YWxsLXBkZiBpbiBwby8gYW5kIHJ1bnRpbWUtcG8vLgorCVJlcG9ydGVkIGJ5IEhhbnMgQWJlcmcuCisJRml4ZWQgYnkgSm9lbCBFLiBEZW5ueS4KKwlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMTEtMDUvbXNnMDAwMDguaHRtbAorCisyMDEyLTA0LTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJTkVXUzogVXBkYXRlLgorCSogTkVXUzogU3BlbGwgY2hlY2suCisJKCVwcmludGVyKTogaXMgbm93IGRvY3VtZW50ZWQuCisKKzIwMTItMDQtMTYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwklcHJpbnRlcjogc3VwcG9ydCBib3RoIHl5byBhbmQgeXlvdXRwdXQuCisJbGFscjEuY2MgdXNlZCB0byBzdXBwb3J0IHl5bywgYnV0IG5vdCB5eW91dHB1dC4gIFN1cHBvcnQgYm90aCwKKwlidXQgZG9jdW1lbnQgb25seSB5eW91dHB1dCAoYXQgbGVhc3QgdW50aWwgdGhlcmUgaXMgc29tZSBjb25zZW5zdXMKKwlvbiB0aGlzKS4KKworCSogZGF0YS9jLm00ICh5eV9zeW1ib2xfdmFsdWVfcHJpbnQpOiBBbHNvIHN1cHBvcnQgeXlvLgorCSogZGF0YS9nbHIuY2MgICh5eV9zeW1ib2xfdmFsdWVfcHJpbnRfKTogU3VwcG9ydCBib3RoIHl5byBhbmQgeXlvdXRwdXQuCisJKiBkYXRhL2xhbHIxLmNjOiBBbHNvIHN1cHBvcnQgeXlvdXRwdXQuCisJKiBkb2MvYmlzb24udGV4aW5mbzogRXhwbGljaXRseSB1c2UgeXlvdXRwdXQgaW4gdGhlIGV4YW1wbGVzLgorCSogZXhhbXBsZXMvbWZjYWxjL21mY2FsYy50ZXN0OiBUZXN0IHRoZSAtcCBvcHRpb24uCisKKzIwMTItMDQtMTYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwlkb2M6IG1mY2FsYzogZGVtb25zdHJhdGUgJXByaW50ZXIuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoUHJpbnRlciBEZWNsKTogTmV3LgorCU51bWJlciBtZmNhbGMueSBzbmlwcGV0cyBzbyB0aGF0IHRoZXkgYXJlIG91dHB1dCBpbgorCXRoZSBwcm9wZXIgb3JkZXIuCisJKFRoZSBtZmNhbGMgTWFpbik6IFVzZSB5eWRlYnVnLgorCShEZWJ1Z2dpbmcpOiBTaW1wbGlmeSB0aGUgdGV4dC4KKwkoRW5hYmxpbmcgVHJhY2VzLCBNZmNhbGMgVHJhY2VzLCBUaGUgWVlQUklOVCBNYWNybyk6IE5ldy4KKwkoVGFibGUgb2YgU3ltYm9scyk6IERvY3VtZW50IFlZUFJJTlQgYW5kIFlZRlBSSU5URi4KKworMjAxMi0wNC0xNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCXRlc3RzOiBzdHlsZSBjaGFuZ2VzLgorCSogdGVzdHMvaW5wdXQuYXQ6IFVzZSAicHJpbnQiIGluICVwcmludGVyIGluc3RlYWQgb2YgImRlc3Ryb3kiLgorCUl0IGlzIHVudXNlZCwgc28gd2UgZG9uJ3QgY2FyZSwgeWV0IGl0IGlzIGxlc3Mgc3VycHJpc2luZy4KKwkqIHRlc3RzL2FjdGlvbnMuYXQ6IENvbW1lbnQgY2hhbmdlcy4KKworMjAxMi0wNC0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWJ1aWxkOiByZXF1aXJlIEZsZXguCisJKiBjb25maWd1cmUuYWM6IFJlcXVpcmUgRmxleC4KKworMjAxMi0wNC0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWJ1aWxkOiBmbGV4Lm00OiBjaGVjayBmb3IgRmxleC4KKwkqIG00L2ZsZXgubTQgKF9BQ19QUk9HX0xFWF9ZWVRFWFRfREVDTCk6IENoZWNrIHRoYXQgJExFWAorCXN1cHBvcnRzIHNvbWUgb2YgdGhlIEZsZXggb3B0aW9ucywgYW5kIGV4Y2x1c2l2ZSBzdGFydCBjb25kaXRpb25zLgorCURlZmluZSBGTEVYIHRvICd5ZXMnLycnLCBhcyBBQ19QUk9HX0NDIGRvZXMgZm9yIEdDQy4KKworMjAxMi0wNC0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWJ1aWxkOiBmbGV4Lm00OiBxdW90ZSBwcm9wZXJseS4KKwkqIG00L2ZsZXgubTQ6IFVzZSBxdW90ZXMgbW9yZSBzeXN0ZW1hdGljYWxseS4KKworMjAxMi0wNC0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWJ1aWxkOiBmbGV4Lm00LgorCSogbTQvZmxleC5tNDogTmV3LgorCUFuIGV4YWN0IGNvcHkgb2Ygd2hhdCBpcyBpbiBBdXRvY29uZiBjdXJyZW50bHkuCisKKzIwMTItMDQtMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwlidWlsZDogYXV0b2NvbmY6IHVwZGF0ZS4KKwkqIHN1Ym1vZHVsZXMvYXV0b2NvbmY6IFVwZGF0ZS4KKwlUaGVyZSBhcmUgbm8gY2hhbmdlcyBpbiBkYXRhL200c3VnYXIvZm9yZWFjaC5tNCwgYW5kIHRoZQorCWNoYW5nZXMgaW4gZGF0YS9tNHN1Z2FyL200c3VnYXIubTQgYXJlIG1pbm9yLgorCisyMDEyLTA0LTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJZ2xyOiBlbGltaW5hdGUgbGFzdCBiaXRzIG9mIHVud2FudGVkIGxvY2F0aW9ucy4KKwkqIGRhdGEvZ2xyLmMgKFlZTFRZUEUpOiBEbyBub3QgZGVmaW5lIHdoZW4gbG9jYXRpb25zIGFyZQorCW5vdCBkZW1hbmRlZC4KIAlBZGp1c3QgYWxsIGRlcGVuZGVuY2llcy4KLQkqIHNyYy9yZWFkZXIuYzogRm9ybWF0dGluZyBjaGFuZ2VzLgotCShMVFlQRVNUUik6IERvbid0IGRlZmluZSBpdCwgdXNlIGl0IGFzIGEgbGl0ZXJhbCBpbgotCWByZWFkZXJfb3V0cHV0X3l5bHNwJy4KLQkqIHNyYy9zeW10YWIuaCAoc3ltYm9sX2NsYXNzKTogTmV3IGVudW0gdHlwZSB3aGljaCByZXBsYWNlcyB0aGUKLQlmb3JtZXIgQ1BQIG1hY3JvcyBgU1VOS05PV04nLCBgU1RPS0VOIGFuZCBgU05URVJNJyB3aXRoCi0JYHN1bmtub3duJywgYHN0b2tlbiBhbmQgYHNudGVybScuCiAKLTIwMDAtMTAtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0wNC0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KIAotCSogc3JjL2dldGFyZ3MuYyAoZml4ZWRfb3V0ZmlsZXMpOiBSZW5hbWUgYXMuLi4KLQkoeWFjY2ZsYWcpOiBmb3IgY29uc2lzdGVuY3kgYW5kIGFjY3VyYWN5LgotCUFkanVzdCBkZXBlbmRlbmNpZXMuCisJTkVXUzogMi42IHdpbGwgZHJvcCBLJlIuCisJKiBORVdTOiBoZXJlLgorCShnbHIuYyk6IEZpeCBhIHNwZWxsby4KIAotMjAwMC0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTA0LTA5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgogCi0JVXNlIHRoZSBtb3JlIHN0YW5kYXJkIGZpbGVzIGB4YWxsb2MuaCcgYW5kIGB4bWFsbG9jLmMnIGluc3RlYWQgb2YKLQlCaXNvbidzIGBhbGxvY2F0ZS5jJyBhbmQgYGFsbG9jLmgnLiAgVGhpcyBwYXRjaCB3YXMgc3VycHJpc2luZ2x5Ci0JZGlmZmljdWx0IGFuZCBpbnRyb2R1Y2VkIGEgbG90IG9mIGNvcmUgZHVtcC4gIEl0IHR1cm5zIG91dCB0aGF0Ci0JQmlzb24gdXNlZCBhbiBpbXBsZW1lbnRhdGlvbiBvZiBgeG1hbGxvYycgYmFzZWQgb24gYGNhbGxvYycsIGFuZAotCWF0IHZhcmlvdXMgcGxhY2VzIGl0IGRvZXMgZGVwZW5kIHVwb24gdGhlIGluaXRpYWxpemF0aW9uIHRvIDAuICBJCi0JaGF2ZSBub3QgdHJpZWQgdG8gaXNvbGF0ZSB0aGUgcGVydGluZW50IHBsYWNlcywgYW5kIGFsbCB0aGUgZm9ybWVyCi0JY2FsbHMgdG8gQmlzb24ncyBgeG1hbGxvYycgYXJlIG5vdyB1c2luZyBgWENBTExPQycuICBTb21lZGF5LAotCXNvbWVvbmUgc2hvdWxkIGFkZHJlc3MgdGhpcyBpc3N1ZS4KKwlUT0RPOiByZW1vdmUgZGVhZCBpdGVtcy4KKwkqIFRPRE8gKERvY3VtZW50YXRpb24sICVwcmludGVyLCBKYXZhKTogUmVtb3ZlLCBhbHJlYWR5IGRvbmUgKG9yIGp1c3QKKwl3YWl0aW5nIGZvciBhcHByb3ZhbCkuCisJKEZvcnRyYW4sIEJUWWFjYyk6IFJlbW92ZSwgdGhlcmUgZG9lcyBub3Qgc2VlbSB0byBiZSBkZW1hbmQuCiAKLQkqIHNyYy9hbGxvY2F0ZS5jLCBzcmMvYWxsb2MuaCwgbTQvYmlzb24tZGVjbC5tNDogUmVtb3ZlLgotCSogbGliL3htYWxsb2MuYywgbGliL3hhbGxvYy5oLCBtNC9tYWxsb2MubTQsIG00L3JlYWxsb2MubTQ6IE5ldworMjAxMi0wNC0wOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCVRPRE86IGltcG9ydCBmcm9tIG1hc3Rlci4KKwkqIFRPRE86IENvcHkgdGhlIGN1cnJlbnQgdmVyc2lvbi4KKworMjAxMi0wNC0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWdudWxpYjogdXBkYXRlLgorCSogYm9vdHN0cmFwLmNvbmYgKGJvb3RzdHJhcF9zeW5jKTogVHJ1ZSBhZ2Fpbi4KKwlJdCB3YXMgZGlzYWJsZWQgd2hpbGUgd2FpdGluZyBmb3IgY2hhbmdlcyB0byBiZSBpbnRlZ3JhdGVkCisJaW4gZ251bGliJ3MgYm9vdHN0cmFwLCB3aGljaCB3YXMgZG9uZSBsb25nIGFnby4KKwkqIGJvb3RzdHJhcCwgZ251bGliOiBVcGRhdGUuCisKKzIwMTItMDQtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwltYWludDogdXBkYXRlIE5FV1MuCisJKiBORVdTOiBGaXggZW50cnkgYWJvdXQgX19hdHRyaWJ1dGVfXy4KKwlSZW9yZGVyIGJ5ICJkZWNyZWFzaW5nIiBvcmRlciBvZiBpbXBvcnRhbmNlLgorCisyMDEyLTA0LTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJZG9jOiBmaXggaW5kZXguCisJaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAxMi0wNC9tc2cwMDAwNi5odG1sCisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvOiBBdm9pZCB1c2luZyBAZGVmKiB2YXJpYW50IHdpdGggbW9yZQorCXRoYW4gdGhlIGRlZmluZWQgZW50aXR5IGFzIG1haW4gZW50aXR5LCBhcyBpdCByZXN1bHRzIGluCisJYW4gaW5jb3JyZWN0IGluZGV4LiAgRm9yIGluc3RhbmNlLCBkb24ndCBkb2N1bWVudAorCXtyZXR1cm4gWVlFUlJPUjt9LCB3aGljaCByZXN1bHRzIGluIGEgc2luZ2xlIGluZGV4IGVudHJ5CisJInJldHVybiBZWUVSUk9SOyIsIGJ1dCByYXRoZXIgYXMgdHlwZWQgZnVuY3Rpb24gd2hvc2UKKwlyZXR1cm4gdHlwZSBpcyAidHlwZSIsIGFuZCB3aG9zZSBhcmd1bWVudCBsaXN0IGlzICI7Ii4KKworMjAxMi0wNC0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWRvYzogZml4IGRvY3VtZW50YXRpb24gb2YgWVlFUlJPUi4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChUYWJsZSBvZiBTeW1ib2xzKTogRml4IHRoZSBkb2N1bWVudGF0aW9uCisJb2YgWVlFUlJPUiBieSBjb3B5aW5nIHRoYXQgZnJvbSAiQWN0aW9uIEZlYXR1cmVzIi4KKworMjAxMi0wNC0wMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWMrKzogbW9yZSBZWV9OVUxMCisJQ2F1Z2h0IGJ5IG1haW50YWluZXItY2hlY2stZysrLgorCSogZGF0YS9nbHIuYywgZGF0YS9sYWxyMS5jYywgZGF0YS95YWNjLmMsIHRlc3RzL2N4eC10eXBlLmF0LAorCSogdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQsIHRlc3RzL3B1c2guYXQ6CisJV2hlbiBzaW1wbGUgdG8gZG8sIGF2b2lkIGV4cGxpY2l0aW5nIHRoZSBudWxsIHB0ci4KKwlPdGhlcndpc2UgdXNlIFlZX05VTEwuCisKKzIwMTItMDQtMDEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwlidW1wIHRvIDIwMTIgaW4gc2tlbGV0b25zLgorCSogZGF0YS9nbHIuYywgZGF0YS9nbHIuY2MsIGRhdGEvbGFscjEuY2MsIGRhdGEvbGFscjEuamF2YSwKKwkqIGRhdGEvbG9jYXRpb24uY2MsIGRhdGEveWFjYy5jOiBCdW1wIGNvcHlyaWdodCB5ZWFyIHJhbmdlcy4KKworMjAxMi0wNC0wMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWJ1aWxkOiByZW1vdmUgYW5jaWVudCBBdXRvY29uZiB0ZXN0cy4KKwlsaWIvc3VicGlwZS5jIHdhcyByZW1vdmVkIGluIDQ3ZmE1NzQ3NjEzMTliMGE0MjI2OTEyMjNjOWI4YTlhNzJmMzZhYTIuCisKKwkqIG00L3N1YnBpcGUubTQ6IFJlbW92ZS4KKwkqIGNvbmZpZ3VyZS5hYyAoQklTT05fUFJFUkVRX1NVQlBJUEUpOiBSZW1vdmUuCisKKzIwMTItMDMtMzEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwlkb2M6IGMrKzogY29tcGxldGUgdGhlIGxvY2F0aW9uIGRvY3VtZW50YXRpb24uCisJKiBkYXRhL2xvY2F0aW9uLmNjIChwb3NpdGlvbjo6aW5pdGlhbGl6ZSwgbG9jYXRpb246OmluaXRpYWxpemUpOgorCUFsc28gYWNjZXB0IGxpbmUgYW5kIGNvbHVtbiwgd2l0aCBkZWZhdWx0IHZhbHVlcy4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChDKysgcG9zaXRpb24sIEMrKyBsb2NhdGlvbik6IE5ldyBub2Rlcy4KKwlEZXNjcmliZSBtb3JlIHRob3JvdWdobHkgdGhlc2UgY2xhc3Nlcy4KKwlGaXggc2V2ZXJhbCBUZXhpbmZvIG1pc3VzZXMuCisKKzIwMTItMDMtMzEgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJYysrOiBsb2NhdGlvbnM6IHByb3ZpZGUgY29udmVuaWVuY2UgY29uc3RydWN0b3JzLgorCSogZGF0YS9sb2NhdGlvbi5jYyAocG9zaXRpb246OnBvc2l0aW9uKTogQWNjZXB0IGZpbGUsIGxpbmUgYW5kCisJY29sdW1uIGFzIGFyZ3VtZW50cyB3aXRoIGRlZmF1bHQgdmFsdWVzLgorCUFsd2F5cyBxdWFsaWZ5IGluaXRpYWwgbGluZSBhbmQgY29sdW1uIGxpdGVyYWxzIGFzIHVuc2lnbmVkLgorCShsb2NhdGlvbjo6bG9jYXRpb24pOiBQcm92aWRlIGNvbnZlbmllbmNlIGNvbnN0cnVjdG9ycy4KKworMjAxMi0wMy0zMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWMrKzogbG9jYXRpb25zOiByZW1vdmUgdXNlbGVzcyAiaW5saW5lIi4KKwkqIGRhdGEvbG9jYXRpb24uY2M6ICJpbmxpbmUiIGlzIGltcGxpY2l0IHdoZW4gZGVmaW5pbmcKKwltZXRob2RzIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uLgorCisyMDEyLTAzLTMxICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJZ2xyOiBkbyBub3QgdXNlIGxvY2F0aW9ucyB3aGVuIHRoZXkgYXJlIG5vdCByZXF1ZXN0ZWQKKwlXaGVuIHRoZSB0ZXN0IHN1aXRlIHJ1bnMgd2l0aCAtTzIgYW5kIHdhcm5pbmdzIGVuYWJsZWQsIEcrKworCWNvbXBsYWlucyBvZiBsb2NhdGlvbnMgYmVpbmcgdXNlZCwgYnV0IG5vdCBpbml0aWFsaXplZC4KKwlUaGUgc2ltcGxlc3QgaXMgdG8gbm90IHVzZSBsb2NhdGlvbnMuCisKKwkqIGRhdGEvZ2xyLmMgKGI0X2xvY3VzZXJfZm9ybWFscywgYjRfbG9jdXNlcl9hcmdzKTogTmV3LgorCVVzZSB0aGVtIHdoZW4gbG9jYXRpb25zIHNob3VsZCBub3QgYmUgdXNlZC4KKwlVc2UgYjRfbG9jYXRpb25zX2lmIHdoZXJlIGFwcHJvcHJpYXRlLgorCSh5eXVzZXJBY3Rpb24pOiBNb2RpZnkgdGhlIG9yZGVyIHRvIHRoZSBhcmd1bWVudHMgdG8gbWFrZQorCWl0IG1vcmUgYWxpa2UgdGhlIG90aGVyIHJvdXRpbmVzLCBhbmQgdG8gbWFrZSB1c2Ugb2YKKwliNF9sb2N1c2VyX2FyZ3Mgc2ltcGxlci4KKworMjAxMi0wMy0zMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWMrKzogdXNlIG51bGxwdHIgZm9yIEMrKzExLgorCUMrKzExIGludHJvZHVjZXMgIm51bGxwdHIiIHdoaWNoIHBsYXlzIHRoZSByb2xlIG9mIEMncyBOVUxMLCBpbgorCXJlcGxhY2VtZW50IG9mICIwIi4gIEZpeCB0aGUgQysrIHNrZWxldG9ucyB0byBhdm9pZCB3YXJuaW5ncyBhYm91dAorCXVzZXMgb2YgIjAiIGluIHBsYWNlIG9mICJudWxscHRyIiwgYW5kIGltcHJvdmUgQyBza2VsZXRvbnMgdG8gYWxzbyB1c2UKKwl0aGlzICJudWxscHRyIiB3aGVuIGNvbXBpbGVkIHdpdGggYSBDKysxMSBjb21waWxlci4KKworCSogY29uZmlndXJlLmFjOiBNb3JlIEMrKyB3YXJuaW5ncy4KKwkqIE5FV1MgKDIuNS4xKTogRG9jdW1lbnQgdGhpcy4KKwkqIGRhdGEvYysrLm00LCBkYXRhL2MubTQgKGI0X251bGxfZGVmaW5lKTogTmV3LgorCShiNF9udWxsKTogVXNlIFlZX05VTEwgaW5zdGVhZCBvZiAwLgorCSogZGF0YS9nbHIuYywgZGF0YS9sYWxyMS5jYywgZGF0YS9sb2NhdGlvbi5jYywgZGF0YS95YWNjLmM6CisJQ2FsbCBiNF9udWxsX2RlZmluZS9iNF9udWxsIHdoZXJlIGFwcHJvcHJpYXRlLgorCVVzZSBZWV9OVUxMIGluc3RlYWQgb2YgTlVMTC4KKwkqIGRhdGEvbG9jYXRpb24uY2MgKGluaXRpYWxpemUpOiBBY2NlcHQgYSBkZWZhdWx0IGFyZ3VtZW50LAorCVlZX05VTEwuCisJKiB0ZXN0cy9hY3Rpb25zLmF0LCB0ZXN0cy9jYWxjLmF0OiBBZGp1c3QuCisKKwkqIGRhdGEvZ2xyLmMsIGxpYi9saWJpYmVydHkuaCwgc3JjL3N5c3RlbS5oIChfX2F0dHJpYnV0ZV9fKToKKwlEbyBub3QgZGlzYWJsZSBpdCB3aGVuIF9fU1RSSUNUX0FOU0lfXyBpcyBkZWZpbmVkLCBhcywgZm9yCisJaW5zdGFuY2UsIGl0IGRpc2FibGVzIHRoZSBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSB3aGljaAorCXByb3RlY3RzIHVzIGZyb20gc29tZSBjb21waWxlciB3YXJuaW5ncy4KKwlUaGlzIHdhcyBhbHJlYWR5IGRvbmUgZWxzZXdoZXJlIGluIEJpc29uLCBpbiAyMDAxLCBzZWUKKwk0YTBkODkzNjk1OTlhMmNlYTAxZjRmYmRmNzkxZjQyNmEwMmNiNWEzLgorCSogdGVzdHMvcmVncmVzc2lvbi5hdDogQWRqdXN0IG91dHB1dC4KKworMjAxMi0wMy0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWJ1aWxkOiBzaW1wbGlmeSBhbmQgaW1wcm92ZSB0aGUgY29tcGlsZXIgd2FybmluZ3MgZm9yIHRlc3RzLgorCSogY29uZmlndXJlLmFjICh3YXJuX2NvbW1vbiwgd2Fybl9jLCB3YXJuX2N4eCk6IE5ldy4KKwlVc2UgdGhlbSB0byBjb21wdXRlIGluZGVwZW5kZW50bHkgdGhlIG9wdGlvbnMgc3VwcG9ydGVkCisJYnkgdGhlIEMgYW5kIEMrKyBjb21waWxlcnMuCisJRG9uJ3QgQUNfU1VCU1QgdGhlIHZhcmlhYmxlcyBwYXNzZWQgdG8gZ2xfV0FSTl9BREQ6IGl0CisJZG9lcyBpdCBmb3IgdXMuCisJKFdBUk5fQ0ZMQUdTX1RFU1QsIFdBUk5fQ1hYRkxBR1NfVEVTVCk6IERvbid0IGFnZ3JlZ2F0ZQorCSRXQVJOX0NGTEFHUyBhbmQgJFdBUk5fQ1hYRkxBR1MgaW4gdGhlbSBub3csIGxlYXZlIGl0CisJdG8gYXRsb2NhbC5pbi4KKwkoTzBDRkxBR1MsIE8wQ1hYRkxBR1MpOiBNb3ZlIHRoZWlyIGRlZmluaXRpb24gdG8uLi4KKwkqIHRlc3RzL2F0bG9jYWwuaW46IGhlcmUuCisJQmUgbW9yZSBzeXN0ZW1hdGljIGJldHdlZW4gQyBhbmQgQysrLgorCVJlb3JkZXIgdG8gZmFjdG9yIGJldHdlZW4gdmFyaWFibGVzLgorCVByb3BhZ2F0ZSBhbGwgb2YgdGhlIHZhcmlhYmxlcyB3aGVuIC0tY29tcGlsZS1jLXdpdGgtY3h4LgorCisyMDEyLTAzLTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJZ251bGliOiB1cGRhdGUuCisKKzIwMTItMDMtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwltYWludDogZm9ybWF0dGluZyBjaGFuZ2VzLgorCSogc3JjL3N5c3RlbS5oOiBJbmRlbnQgQ1BQIGRpcmVjdGl2ZXMgdXNpbmcgY3BwaS4KKworMjAxMi0wMy0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCU5FV1M6IHVwZGF0ZS4KKwkqIE5FV1M6IEphdmEgZml4ZXMsIG1vcmUgYWJvdXQgdGhlIGRvYyBjaGFuZ2VzLCBsaWJ5IGlzc3Vlcy4KKworMjAxMi0wMy0yNyAgVGltIExhbmRzY2hlaWR0ICA8dGltQHRpbS1sYW5kc2NoZWlkdC5kZT4KKworCUphdmE6IEZpeCBzeW50YXggZXJyb3IgaGFuZGxpbmcgd2l0aG91dCBlcnJvciB0b2tlbi4KKwkqIGRhdGEvbGFscjEuamF2YSAoWVlQYXJzZXI6OnBhcnNlKTogSGVyZS4KKwkqIHRlc3RzL2phdmEuYXQ6IEFkZCB0ZXN0IGNhc2UuCisKKzIwMTItMDMtMjQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwl0ZXN0czogYmV3YXJlIG9mIC1wZWRhbnRpYyBvbiBsYXJnZSAjbGluZSBudW1iZXJzLgorCSogdGVzdHMvbG9jYWwuYXQgKEFUX1RFU1RfVEFCTEVTX0FORF9QQVJTRSk6IERvbid0IHBhc3MgLXBlZGFudGljCisJd2hlbiBjb21waWxpbmcgbGFyZ2UgY2Fub25pY2FsLUxSIHBhcnNlcnMuCisJUmVwb3J0ZWQgYnkgVHlzIExlZmVyaW5nLgorCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAxMi0wMy9tc2cwMDAyNS5odG1sCisKKzIwMTItMDMtMjQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwl0ZXN0czogd2hlbiB1c2luZyB0aGUgQysrIGNvbXBpbGVyLCB1c2UgaXRzIGZsYWdzIHRvby4KKwkqIHRlc3RzL2xvY2FsLmF0OiBHbyBmb3IgY29sb3JzLgorCSgtLWNvbXBpbGUtYy13aXRoLWN4eCk6IE5ldyBvcHRpb24uCisJV2UgdXNlZCB0byBwYXNzICJDQz0kQ1hYIiBhcyBjb21tYW5kIGxpbmUgYXJndW1lbnQsCisJYnV0IGl0IHdhcyBub3QgcG9zc2libGUgdG8gYWRqdXN0IENGTEFHUyBhY2NvcmRpbmdseQorCWluIGF0bG9jYWwsIHNpbmNlIGl0IGlzIGxvYWRlZCBiZWZvcmUgYXNzaWdubWVudHMgb24KKwl0aGUgY29tbWFuZCBsaW5lIGFyZSBob25vcmVkIChzbyB0aGF0IHRoZSBjb21tYW5kIGxpbmUKKwl0YWtlcyBwcmVjZWRlbmNlKS4KKwkqIHRlc3RzL2F0bG9jYWwuaW46IEltcGxlbWVudCBpdC4KKwkqIHRlc3RzL2xvY2FsLm1rOiBVc2UgaXQuCisKKzIwMTItMDMtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwlkb2M6IHVwZGF0ZSB0aGUgLS12ZXJib3NlIHJlcG9ydCBmb3JtYXQuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoVW5kZXJzdGFuZGluZyk6IEFkanVzdCB0byBtYXRjaCB0aGUKKwljdXJyZW50IGZvcm1hdC4KKworMjAxMi0wMy0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWRvYzogc3BlbGwgY2hlY2suCisJKiBkb2MvYmlzb24udGV4aW5mbzogaGVyZS4KKworMjAxMi0wMy0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWRvYzogc3RtdCwgbm90IHN0bW50LgorCSogZG9jL2Jpc29uLnRleGluZm86IHMvc3RtbnQvc3RtdC9nLiAgVGhpcyBpcyBhCisJbXVjaCBtb3JlIGNvbW1vbiBhYmJyZXZpYXRpb24gZm9yICJzdGF0ZW1lbnQiLgorCisyMDEyLTAzLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJZG9jOiBzYXZlIHdpZHRoLgorCSogZG9jL2Jpc29uLnRleGluZm8gKExhbmd1YWdlIGFuZCBHcmFtbWFyKTogVXNlIHRoZSBzYW1lCisJbGF5b3V0IGZvciBhbiBleGFtcGxlIGluIGFsbCB0aGUgdmVyc2lvbnMsIGkuZS4sIGtlZXAKKwlhcyBnZW5lcmFsIGNhc2Ugd2hhdCB1c2VkIHRvIGJlIHVzZWQgb25seSBmb3IgSW5mby4KKworMjAxMi0wMy0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCWRvYzogcmVmb3JtYXQgZ3JhbW1hciBzbmlwcGV0cy4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvOiBDb252ZXJ0IHRoZSBncmFtbWFyIGV4YW1wbGVzIHRvCisJdXNlIGEgbmFycm93ZXIgc3R5bGUuICBUaGlzIGhlbHBzIGZpdHRpbmcgaW50byB0aGUKKwlAc21hbGxib29rIGNvbnN0cmFpbnRzLgorCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMTItMDMvbXNnMDAwMTEuaHRtbAorCisyMDEyLTAzLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJZG9jOiB1c2Ugb25seSBAZXhhbXBsZSwgbm90IEBzbWFsbGV4YW1wbGUuCisJKiBkb2MvYmlzb24udGV4aW5mbzogQ29udmVydCBhbGwgQHNtYWxsZXhhbXBsZXMgaW50byBAZXhhbXBsZXMuCisJQWRqdXN0IGxheW91dCB3aGVyZSBuZWVkZWQuCisKKzIwMTItMDMtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwlkb2M6IHN0eWxlIGNoYW5nZXMuCisJKiBkb2MvYmlzb24udGV4aW5mbzogQXZvaWQgbGluZSB3aWR0aCBpc3N1ZXMgd2l0aCBUZVguCisJVXBncmFkZSBhbmNpZW50IG1lc3NhZ2VzLgorCU1vdmUgc29tZSBjb21tZW50cyB0byBiZXR0ZXIgbG9va2luZyBwbGFjZXMuCisJQWRkIG1vcmUgQGdyb3VwLgorCShNZmNhbGMgU3ltYm9sIFRhYmxlKTogUmVkdWNlIHZhcmlhYmxlIHNjb3Blcy4KKwlQcmVmZXIgc2l6ZV90IGZvciBzaXplcy4KKwlQcmVmZXIgZGVjbGFyYXRpb25zIHdpdGggYW4gaW5pdGlhbCB2YWx1ZS4KKwlGaXggYSBAZ3JvdXAgZW52aXJvbm1lbnQuCisKKzIwMTItMDMtMTkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJZG9jOiBtaW5vciBmaXhlcyB0byAiVW5kZXJzdGFuZGluZyIgc2VjdGlvbgorCSogZG9jL2Jpc29uLnRleGluZm8gKFVuZGVyc3RhbmRpbmcpOiBNaW5vciB3b3JkaW5nIGZpeGVzIGFuZAorCWltcHJvdmVtZW50cy4gIEZpeGVzIHByb2JsZW1zIHJlcG9ydGVkIGluCisJPGh0dHBzOi8vc2F2YW5uYWguZ251Lm9yZy9wYXRjaC8/NDMwNj4uCisKKzIwMTItMDMtMTMgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJdGVzdHM6IG1pbm9yIGZpeGVzL3NpbXBsaWZpY2F0aW9ucworCSogdGVzdHMvbG9jYWwuYXQgKEFUX0JJU09OX0NIRUNLX05PX1hNTCk6IFNpbXBsaWZ5IHNlZCBwcm9ncmFtcywKKwlxdW90YXRpb24sIGFuZCBkZWZhdWx0IHZhbHVlIGFzc2lnbm1lbnRzLgorCUVuc3VyZSBhIHByb3BlciB2YWx1ZSB0byB0aGUgbnVtZXJpYyB2YXJpYWJsZXMuCisJUmVwb3J0ZWQgYnkgTGllIFlhbi4KKwlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMTItMDMvbXNnMDAwMDAuaHRtbAorCisyMDEyLTAzLTA5ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCXRlc3RzOiBiZSByb2J1c3QgdG8gcXVvdGUgc3R5bGUuCisJU2VlIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMTItMDEvbXNnMDAxMjAuaHRtbD4uCisKKwkqIHNyYy9tYWluLmMgKG1haW4pOiBEZWZpbmUgdGhlIHF1b3Rpbmcgc3R5bGUgd2UgdXNlLgorCSogdGVzdHMvYXRsb2NhbC5pbjogVXNlIEFTQ0lJIHN0eWxlIHF1b3RlcyBkdXJpbmcgdGhlIHRlc3RzLgorCisyMDEyLTAzLTA5ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCW1haW50OiB1cGRhdGUgZ251bGliLgorCSogZ251bGliOiB1cGRhdGUuCisJKiBzcmMvc2Nhbi1ncmFtLmw6IERvbid0IHVzZSB0aGUgKGZvcm1lciB2ZXJzaW9uIG9mKSBTVFJFUS4KKworMjAxMi0wMy0wNiAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwl0ZXN0czogYmUgcm9idXN0IHRvIFBPU0lYTFlfQ09SUkVDVCBiZWluZyBkZWZpbmVkLgorCSogdGVzdHMvbG9jYWwuYXQgKEFUX0JJU09OX0NIRUNLX05PX1hNTCk6IENoZWNrIGlmCisJUE9TSVhMWV9DT1JSRUNUIGlzIGRlZmluZWQsIG5vdCBpZiBpdCBpcyBkZWZpbmVkIHRvIDEuCisJUmVwb3J0ZWQgYnkgTGllIFlhbi4KKwlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMTItMDMvbXNnMDAwMDAuaHRtbAorCisyMDEyLTAyLTIzICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCWRvYzogZml4IGVudmlyb25tZW50IGlzc3Vlcy4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvOiBEbyBub3QgdXNlIEB2ZXJiYXRpbSwgaW4gcGFydGljdWxhciB3aGVuCisJd2UgdXNlIEBncm91cCBpbnNpZGUuCisJVXNlIEBxdW90YXRpb24gaW5zdGVhZCBvZiBAZGlzcGxheSBmb3IgZnJlcXVlbnRseSBhc2tlZCBxdWVzdGlvbnMsCisJaXQgbG9va3MgbXVjaCBuaWNlci4KKworMjAxMi0wMi0yMyAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlyZWdlbi4KKwkqIHNyYy9wYXJzZS1ncmFtLmgsIHNyYy9wYXJzZS1ncmFtLmM6IHJlZ2VuLgorCisyMDEyLTAyLTIzICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCXRlc3RzOiBmaXggcmVncmVzc2lvbnMuCisJRXhpdCBzdGF0dXMgNjMgaXMgZG9jdW1lbnRlZCBmb3IgdmVyc2lvbi1taXNtYXRjaC4KKwkqIGJvb3RzdHJhcC5jb25mIChnbnVsaWJfbW9kdWxlcyk6IFJlbW92ZSBzeXNleGl0cy4KKwkqIHNyYy9zeXN0ZW0uaCAoRVhfTUlTTUFUQ0gpOiBEZWZpbmUuCisJKiBzcmMvcGFyc2UtZ3JhbS55ICh2ZXJzaW9uX2NoZWNrKTogVXNlIGl0IGluc3RlYWQgb2YgRVhfQ09ORklHLgorCisJTWlzc2luZyBpbmNsdWRlcy4KKwkqIHRlc3RzL2NhbGMuYXQsIHRlc3RzL25hbWVkLXJlZnMuYXQ6IEluY2x1ZGUgYXNzZXJ0LmguCisKKzIwMTItMDItMjEgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJZ2xyOiBmaXggYW1iaWd1aXR5IHJlcG9ydHMuCisJKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdCAoQW1iaWd1aXR5IHJlcG9ydHMpOiBOZXcuCisKKzIwMTItMDItMTkgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJZG9jOiBzdHlsaXN0aWMgaW1wcm92ZW1lbnRzLgorCSogZG9jL2Jpc29uLnRleGluZm86IFByZWZlciAiY29udGludWUiIHRvIGVtcHR5IGxvb3AgYm9kaWVzLgorCUFkZCBzb21lIEBncm91cC9AZW5kIGdyb3VwIHRvIGF2b2lkIHBvb3IgcGFnZSBicmVha3MuCisKKzIwMTItMDItMTkgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJbWFpbnQ6IGFkZHJlc3Mgc2NfcHJvaGliaXRfZG91YmxlZF93b3JkLgorCSogZGF0YS95YWNjLmMsIGRvYy9iaXNvbi50ZXhpbmZvOiBSZXdvcmQgdG8gYXZvaWQgaGF2aW5nIHRvCisJZGlzYWJsZSB0aGF0IGNoZWNrLgorCSogY2ZnLm1rOiBObyBsb25nZXIgc2tpcCB0aGlzIHRlc3QuCisKKzIwMTItMDItMTkgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJbWFpbnQ6IGFkZHJlc3Mgc2NfcHJvaGliaXRfYWx3YXlzLWRlZmluZWRfbWFjcm9zLgorCSogY2ZnLm1rOiBObyBsb25nZXIgc2tpcCBpdCwgZXhjZXB0IHdoZXJlIEVYSVRfU1VDQ0VTUyBpcyB1c2VkCisJYXMgYSB3aXRuZXNzIGZvciBzdGRsaWIuaC4KKwlTa2lwIHRoaXMgdGVzdCB3aGVuIGFwcHJvcHJpYXRlLgorCSogZGF0YS95YWNjLmM6IERyb3AgYSBub3RlIGFib3V0IHdoeSBFWElUX1NVQ0NFU1MgaXMgZGVmaW5lZCBoZXJlLgorCisyMDEyLTAyLTE5ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCW1haW50OiBhZGRyZXNzIHNjX2JpbmR0ZXh0ZG9tYWluLCBzY19wcm9ncmFtX25hbWUgYW5kIHNjX3Byb2hpYml0X0hBVkVfTUJSVE9XQy4KKwkqIGJvb3RzdHJhcC5jb25mIChnbnVsaWJfbW9kdWxlcyk6IFJlcXVpcmUgcHJvZ25hbWUuCisJKiBzcmMvY29tcGxhaW4uYywgc3JjL2dldGFyZ3MuYywgc3JjL2dldGFyZ3MuaCwgc3JjL21haW4uYzogVXNlIGl0LgorCSogY2ZnLm1rIChleGNsdWRlKTogTmV3LgorCVVzZSBpdC4KKwlTa2lwIGxpYi9tYWluLmMgZm9yIGJpbmR0ZXh0ZG9tYWluIGFuZCBzZXRfcHJvZ3JhbV9uYW1lLgorCisyMDEyLTAyLTE5ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCW1haW50OiByZW1vdmUgc3RyYXkgZmlsZS4KKwkqIGNvbmZpZy5oaW46IFJlbW92ZS4KKworMjAxMi0wMi0xOSAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwltYWludDogYWRkcmVzcyBzb21lIHN5bnRheC1pc3N1ZXMgcmVtYWluaW5nIGFmdGVyIGNoZXJyeS1waWNraW5nIGZyb20gbWFzdGVyLgorCSogY2ZnLm1rOiBTa2lwIGJpc29uIGdlbmVyYXRlZCBmaWxlcywgMi41IGlzIGdlbmVyYXRpbmcgdHJhaWxpbmcKKwlibGFua3MuICBUaGlzIGlzIGFscmVhZHkgZml4ZWQgaW4gbWFzdGVyLgorCSogdGVzdHMvY29uZmxpY3RzLmF0LCB0ZXN0cy9qYXZhLmF0OiBGaXggd2hpdGUgc3BhY2UgaXNzdWVzLgorCisyMDEyLTAyLTE5ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCXJlZ2VuLgorCSogc3JjL3BhcnNlLWdyYW0uYywgc3JjL3BhcnNlLWdyYW0uaDogUmVnZW4uCisKKzIwMTItMDItMTkgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJYml0c2V0OiBmaXggYW4gaW5jb3JyZWN0IGVycm9yIG1lc3NhZ2UuCisJKiBsaWIvYml0c2V0X3N0YXRzLmM6IGhlcmUuCisJUmVwb3J0ZWQgYnkgU3RlZmFubyBMYXR0YXJpbmkuCisKKzIwMTItMDItMTkgIEppbSBNZXllcmluZyAgPG1leWVyaW5nQHJlZGhhdC5jb20+CisKKwltYWludDogcmVlbmFibGUgc2NfbTRfcXVvdGVfY2hlY2sKKwkqIGNmZy5tayAobG9jYWwtY2hlY2tzLXRvLXNraXApOiBSZWVuYWJsZSBzY19tNF9xdW90ZV9jaGVjay4KKwkqIG00L2RtYWxsb2MubTQ6IEFkZCBxdW90ZXMuCisKKzIwMTItMDItMTkgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJbWFpbnQ6IHJlbW92ZSB0cmFpbGluZyBlbXB0eSBsaW5lcy4KKwkqIGNmZy5tazogTm8gbG9uZ2VyIHNraXAgc2NfcHJvaGliaXRfZW1wdHlfbGluZXNfYXRfRU9GLCBleGNlcHQKKwlmb3IgcGFyc2UtZ3JhbS5oIChnZW5lcmF0ZWQpLgorCSogZXhhbXBsZXMvbWZjYWxjLy5naXRpZ25vcmUsIGxpYi8uZ2l0aWdub3JlLCBtNC8uZ2l0aWdub3JlLAorCSogcG8vLmdpdGlnbm9yZSwgcnVudGltZS1wby8uZ2l0aWdub3JlOiBSZW1vdmUgdHJhaWxpbmcvbGVhZGluZworCWVtcHR5IGxpbmVzLgorCisyMDEyLTAyLTE5ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCW1haW50OiBhdm9pZCAibWFnaWMgbnVtYmVyIGV4aXQiLgorCSogY2ZnLm1rIChsb2NhbC1jaGVja3MtdG8tc2tpcCk6IE5vIGxvbmdlciBza2lwIGl0LgorCSogYm9vdHN0cmFwLmNvbmYgKGdudWxpYl9tb2R1bGVzKTogQWRkIHN5c2V4aXRzLgorCSogZG9jL2Jpc29uLnRleGluZm8sIGV0Yy9iZW5jaC5wbC5pbiwgc3JjL3BhcnNlLWdyYW0ueSwKKwkqIHNyYy9zeXN0ZW0uaCwgdGVzdHMvY2FsYy5hdCwgdGVzdHMvbmFtZWQtcmVmcy5hdDogVXNlIGFzc2VydAorCXdoZXJlIGFwcHJvcHJpYXRlIGluc3RlYWQgb2YgImlmICguLi4pIGV4aXQiLgorCVVzZSBzeW1ib2xpYyBleGl0IHN0YXR1cyBlbHNld2hlcmUuCisKKzIwMTItMDItMTkgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJbWFpbnQ6IGZpeCBzb21lIHN5bnRheC1jaGVjayBpc3N1ZXMuCisJKiBjZmcubWsgKGxvY2FsLWNoZWNrcy10by1za2lwKTogUmVtb3ZlCisJc2NfcHJvaGliaXRfcXVvdGVhcmdfd2l0aG91dF91c2UsIHNjX3Byb2hpYml0X3N0cmNtcCwKKwlzY191bm1hcmtlZF9kaWFnbm9zdGljcywgc2NfdXNlbGVzc19jcHBfcGFyZW5zLgorCShzY191bm1hcmtlZF9kaWFnbm9zdGljcyk6IFNraXAgREpHUFAuCisJKiBkYXRhL3lhY2MuYywgc3JjL0xSMC5jLCBzcmMvY2xvc3VyZS5jLAorCSogc3JjL2ZsZXgtc2Nhbm5lci5oLCBzcmMvZ3JhbS5jLCBzcmMvbGFsci5jLAorCSogc3JjL3ByaW50LXhtbC5jLCBzcmMvcHJpbnQuYywgc3JjL3ByaW50X2dyYXBoLmMsCisJKiBzcmMvcmVhZGVyLmMsIHNyYy9yZWR1Y2UuYywgc3JjL3RhYmxlcy5jOgorCURvbid0IHVzZSBwYXJlbnMgd2l0aCBjcHAncyBkZWZpbmVkLgorCVJlbW92ZSB1c2VsZXNzIGluY2x1ZGVzLgorCisyMDEyLTAyLTE5ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCW1haW50OiBhZGRyZXNzIGEgY291cGxlIG9mIHN5bnRheC1jaGVjayBlcnJvcnMuCisJKiBjZmcubWsgKGxvY2FsLWNoZWNrcy10by1za2lwKTogUmVtb3ZlIHNjX2Vycm9yX21lc3NhZ2VfcGVyaW9kCisJYW5kIHNjX2Vycm9yX21lc3NhZ2VfdXBwZXJjYXNlLgorCUFkZHJlc3MgdGhlIHVuY292ZXJlZCBpc3N1ZXMuCisJKiBwby9QT1RGSUxFUy5pbjogQWRkIG1pc3NpbmcgZmlsZXMuCisJKiBzcmMvc3ltdGFiLmM6IFJlbW92ZSB1c2VsZXNzIGluY2x1ZGVzLgorCSogbGliL2JpdHNldF9zdGF0cy5jLCBzcmMvZmlsZXMuYywgdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQ6IFVzZQorCWNvbmZvcm1hbnQgZXJyb3IgbWVzc2FnZXMuCisKKzIwMTItMDItMTkgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJbWFpbnQ6IGdudWxpYjogdXBncmFkZS4KKworMjAxMi0wMi0xNSAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwltYWludDogcmVseSBvbiBBdXRvbWFrZSBmb3IgcGFyc2Vycy4KKwkqIE1ha2VmaWxlLmFtIChBTV9ZRkxBR1MpOiBBdXRvbWFrZSBsb29rcyBmb3IgIi1kIiBhbG9uZS4KKwlNb3ZlIG90aGVyIG9wdGlvbnMgaW4gaGVyZS4KKwkoQklTT04pOiBOZXcuCisJKFlBQ0MpOiBVc2UgaXQuCisJKGJpc29uX1NPVVJDRVMpOiBOb3cgdGhhdCBhdXRvbWFrZSBjYW4gc2VlIGAtZCcgaW4gQU1fWUZMQUdTLAorCXdlIGNhbiByZWx5IG9uIGl0IHRvIGNvbXBpbGUgYW5kIHNoaXAgdGhlIHBhcnNlciBoZWFkZXIKIAlmaWxlcy4KLQlBZGp1c3QgZGVwZW5kZW5jaWVzLgotCSogc3JjL3dhcnNoYWxsLmg6IE5ldyBmaWxlLgotCVByb3BhZ2F0ZS4KIAotMjAwMC0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJQmFzZWQgb24gY29tbWl0IDczNzQwNmEzMmMyMDE0NzE2OTliZmEwODQzZDFmNDMyZjNlYzI5YWIgYW5kCisJY29tbWl0IDNkNmNhMzM5MDgzYzI3OGQ5MDdjOWYwMzBmNGJhNmJjNWVjYjA3ZjIuCiAKLQlWYXJpb3VzIGFudGktYGV4dGVybiBpbiAqLmMnIGNoYW5nZXMuCisyMDEyLTAyLTE0ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KIAotCSogc3JjL3N5c3RlbS5oOiBJbmNsdWRlIGBhc3NlcnQuaCcuCisJbWFpbnQ6IG1vcmUgYXV0aG9ycy4KKwkqIEFVVEhPUlM6IGhlcmUuCisJU3VnZ2VzdGVkIGJ5IFR5cyBMZWZlcmluZy4KIAotMjAwMC0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTAyLTE0ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KIAotCSogc3JjL3N0YXRlLmggKG5zdGF0ZXMsIGZpbmFsX3N0YXRlLCBmaXJzdF9zdGF0ZSwgZmlyc3Rfc2hpZnQpCi0JKGZpcnN0X3JlZHVjdGlvbik6IE1vdmUgdGhlaXIgZXhwb3J0YXRpb24gZnJvbSBoZXJlLi4uCi0JKiBzcmMvTFIwLmg6IHRvIGhlcmUuCi0JQWRqdXN0IGRlcGVuZGVuY2llcy4KLQkqIHNyYy9nZXRhcmdzLmMgKHN0YXRpc3RpY3NmbGFnKTogTmV3IHZhcmlhYmxlLgotCUFkZCBzdXBwb3J0IGZvciBgLS1zdGF0aXN0aWNzJy4KLQlBZGp1c3QgZGVwZW5kZW5jaWVzLgorCW1haW50OiBhZGQgbGljZW5zZSBoZWFkZXJzLgorCSogZXhhbXBsZXMvY2FsYysrL3Rlc3QsIGV4YW1wbGVzL3ZhcmlhbnQueXksIEFVVEhPUlMsIFRIQU5LUywKKwkqIHRlc3RzL2F0bG9jYWwuaW4sIHRlc3RzL2Jpc29uLmluOiBBZGQgbGljZW5zZSBoZWFkZXJzLgorCVJlcG9ydGVkIGJ5IFR5cyBMZWZlcmluZy4KIAotCVJlbW92ZSBhIGxvdCBvZiBub3cgdXNlbGVzcyBgZXh0ZXJuJyBzdGF0ZW1lbnRzIGluIG1vc3QgZmlsZXMuCisyMDEyLTAyLTE0ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KIAotMjAwMC0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJbWFpbnQ6IHJlbW92ZSBvYnNvbGV0ZSBmaWxlLgorCSogZXRjL21ha2UtQ2hhbmdlTG9nczogUmVtb3ZlICh1c2VkIGZvciByY3MgdG8gY3ZzIG1pZ3JhdGlvbiEpLgorCVJlcG9ydGVkIGJ5IFR5cyBMZWZlcmluZy4KIAotCSogc3JjL0xSMC5oOiBOZXcgZmlsZS4KLQlQcm9wYWdhdGUgaXRzIHVzZS4KKzIwMTItMDItMDggIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgogCi0yMDAwLTEwLTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwl1c2UgYSBtb3JlIGNvbnNpc3RlbnQgcXVvdGluZyBzdHlsZS4KKwlTZWUgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAxMi0wMS9tc2cwMDEyMC5odG1sPi4KKwlVc2UgcXVvdGVhcmcgYXMgb2Z0ZW4gYXMgcG9zc2libGUgaW5zdGVhZCBvZiBsZWF2aW5nIHRoZSBjaG9pY2Ugb2YKKwl0aGUgcXVvdGVzIHRvIHRoZSB0cmFuc2xhdG9ycy4gIFVzZSBzaG9ydGVyIG1lc3NhZ2VzLiAgRmFjdG9yIHNpbWlsYXIKKwltZXNzYWdlcyB0byBhIHNpbmdsZSBmb3JtYXQsIHRvIG1ha2UgbG9jYWxpemF0aW9uIGVhc2llci4KIAotCSogc3JjL3ByaW50Lmg6IE5ldyBmaWxlLgotCVByb3BhZ2F0ZSBpdHMgdXNlLgotCSogc3JjL3ByaW50LmM6IEZvcm1hdHRpbmcgYW5kIG9yZGVyaW5nIGNoYW5nZXMuCi0JKHZlcmJvc2UsIHRlcnNlKTogUmVwbGFjZSB3aXRoLi4uCi0JKHByaW50X3Jlc3VsdHMpOiB0aGlzIG5ldyBmdW5jdGlvbi4KLQlBZGp1c3QgZGVwZW5kZW5jaWVzLgorCSogc3JjL2ZpbGVzLmMsIHNyYy9nZXRhcmdzLmMsIHNyYy9tdXNjbGUtdGFiLmMsIHNyYy9yZWFkZXIuYworCSogc3JjL3NjYW4tY29kZS5sLCBzcmMvc2Nhbi1ncmFtLmwsIHNyYy9zeW10YWIuYzoKKwlVc2UgcXVvdGUoKSBvciBxdW90ZWFyZ19jb2xvbigpIG9uIHByaW50ZiBhcmd1bWVudHMgaW5zdGVhZCBvZgorCXF1b3RlcyBpbiB0aGUgZm9ybWF0IHN0cmluZy4KKwkqIGRhdGEvYmlzb24ubTQ6IEtlZXAgc3luYyB3aXRoIHRoZSBjaGFuZ2VzIGluIG11c2NsZS10YWIuYy4KIAotMjAwMC0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJKiB0ZXN0cy9za2VsZXRvbnMuYXQsIHRlc3RzL2lucHV0LmF0LCB0ZXN0cy9yZWdyZXNzaW9uLmF0OiBBZGp1c3QKKwlleHBlY3RlZCBtZXNzYWdlcy4KIAotCSogc3JjL2NvbmZsaWN0cy5jIChjb25mbGljdF9yZXBvcnQpOiBOZXcgZnVuY3Rpb24uCi0JKGNvbmZsaWN0X2xvZywgdmVyYm9zZV9jb25mbGljdF9sb2cpOiBSZXBsYWNlIHdpdGguLi4KLQkocHJpbnRfY29uZmxpY3RzKTogdGhpcyBmdW5jdGlvbi4KLQlBZGp1c3QgZGVwZW5kZW5jaWVzLgotCSogc3JjL2NvbmZsaWN0cy5oOiBOZXcgZmlsZS4KLQlQcm9wYWdhdGUgaXRzIGluY2x1c2lvbi4KKzIwMTItMDEtMzEgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgogCi0yMDAwLTEwLTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwltYWludDogcmVtb3ZlIHN0cmF5IGRlYnVnIGNvZGUuCisJKiBzcmMvTWFrZWZpbGUuYW0gKGVjaG8pOiBSZW1vdmUuCiAKLQkqIHNyYy9udWxsYWJsZS5oOiBOZXcgZmlsZS4KLQlQcm9wYWdhdGUgaXRzIGluY2x1c2lvbi4KLQkqIHNyYy9udWxsYWJsZS5jOiBGb3JtYXR0aW5nIGNoYW5nZXMuCisyMDEyLTAxLTMxICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KIAotMjAwMC0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJbWFpbnQ6IHNwYWNlIGNoYW5nZXMuCisJKiBzcmMvTWFrZWZpbGUuYW06IFVzZSAyIGxlYWRpbmcgc3BhY2VzIGZvciB2YXJpYWJsZSBkZWZpbml0aW9uCisJc3ByZWFkaW5nIG92ZXIgc2V2ZXJhbCBsaW5lcy4KIAotCSogc3JjL3JlZHVjZS5oOiBOZXcgZmlsZS4KLQlQcm9wYWdhdGUgaXRzIGluY2x1c2lvbi4KLQkqIHNyYy9yZWR1Y2UuYzogVG9wb2xvZ2ljYWwgc29ydCBhbmQgb3RoZXIgZm9ybWF0dGluZyBjaGFuZ2VzLgotCShib29sLCBUUlVFLCBGQUxTRSk6IE1vdmUgdGhlaXIgZGVmaW5pdGlvbiB0by4uLgotCSogc3JjL3N5c3RlbS5oOiBoZXJlLgorMjAxMi0wMS0zMSAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CiAKLTIwMDAtMTAtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCW1haW50OiBtb3JlIHNpbGVudC1ydWxlcy4KKwkqIGRvYy9sb2NhbC5taywgc3JjL2xvY2FsLm1rLCBleGFtcGxlcy9jYWxjKysvTWFrZWZpbGUuYW06IFVzZQorCSQoQU1fVl9HRU4pIGFuZCAkKEFNX1ZfYXQpIHdoZXJlIGFwcHJvcHJpYXRlLgogCi0JKiBzcmMvZmlsZXMuYzogRm9ybWF0dGluZyBjaGFuZ2VzLgotCSh0cnlvcGVuLCB0cnljbG9zZSwgb3BlbmZpbGVzKTogUmVuYW1lIGFzLi4uCi0JKHhmb3BlbiwgeGZjbG9zZSwgb3Blbl9maWxlcyk6IHRoaXMuCi0JKHN0cmluZ2FwcGVuZCk6IHN0YXRpYy4KLQkqIHNyYy9maWxlcy5oOiBDb21wbGV0ZSB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzLgotCVByb3BhZ2F0ZSBpdHMgdXNlLgorMjAxMi0wMS0zMSAgSmltIE1leWVyaW5nICA8bWV5ZXJpbmdAcmVkaGF0LmNvbT4KIAotMjAwMC0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJZG8gbm90IGlnbm9yZSBlcnJvcnMgbGlrZSBFTk9TUEMsRUlPIHdoZW4gd3JpdGluZyB0byBzdGRvdXQKKwlTdGFuZGFyZCBvdXRwdXQgd2FzIG5ldmVyIGV4cGxpY2l0bHkgY2xvc2VkLCBzbyB3ZSBjb3VsZCBub3QKKwlkZXRlY3QgZmFpbHVyZS4gIFRodXMsIGJpc29uIHdvdWxkIGlnbm9yZSB0aGUgZXJyb3JzIG9mIHdyaXRpbmcKKwl0byBhIGZ1bGwgZmlsZSBzeXN0ZW0gYW5kIGdldHRpbmcgYW4gSS9PIGVycm9yIG9uIHdyaXRlLCBidXQgb25seQorCWZvciBzdGFuZGFyZCBvdXRwdXQsIGUuZy4sIGZvciAtLXByaW50LWxvY2FsZWRpciwgLS1wcmludC1kYXRhZGlyLAorCS0taGVscCBhbmQgc29tZSB2ZXJib3NlIG91dHB1dC4KKwlOb3csICJiaXNvbiAtLXByaW50LWRhdGFkaXIgPiAvZGV2L2Z1bGwiIHJlcG9ydHMgdGhlIHdyaXRlIGZhaWx1cmU6CisJYmlzb246IHdyaXRlIGVycm9yOiBObyBzcGFjZSBsZWZ0IG9uIGRldmljZQorCUJlZm9yZSwgaXQgd291bGQgZXhpdCAwIHdpdGggbm8gZGlhZ25vc3RpYywgaW1wbHlpbmcgc3VjY2Vzcy4KKwlUaGlzIGlzIG5vdCBhbiBpc3N1ZSBmb3IgIi0tb3V0cHV0PS0iIG9yIHRoZSBvdGhlciBGSUxFLWFjY2VwdGluZworCWNvbW1hbmQtbGluZSBvcHRpb25zLCBiZWNhdXNlIHVubGlrZSBtb3N0IG90aGVyIEdOVSBwcm9ncmFtcywKKwlhbiBvdXRwdXQgZmlsZSBhcmd1bWVudCBvZiAiLSIgaXMgdHJlYXRlZCBhcyB0aGUgbGl0ZXJhbCAiLi8tIiwKKwlyYXRoZXIgdGhhbiBzdGFuZGFyZCBvdXRwdXQuCisJKiBib290c3RyYXAuY29uZiAoZ251bGliX21vZHVsZXMpOiBBZGQgY2xvc2VvdXQuCisJKiBzcmMvbWFpbi5jOiBJbmNsdWRlICJjbG9zZW91dC5oIi4KKwlVc2UgYXRleGl0IHRvIGVuc3VyZSB3ZSBjbG9zZSBzdGRvdXQuCisJKiAuZ2l0aWdub3JlOiBJZ25vcmUgbmV3IGZpbGVzIHB1bGxlZCBpbiB2aWEgZ251bGliLXRvb2wuCiAKLQkqIHNyYy9yZWFkZXIuaDogTmV3IGZpbGUuCi0JUHJvcGFnYXRlIGl0cyB1c2UgaW5zdGVhZCBvZiB0ZWRpb3VzIGxpc3Qgb2YgYGV4dGVybicgYW5kCi0JcHJvdG90eXBlcy4KLQkqIHNyYy9yZWFkZXIuYzogRm9ybWF0dGluZyBjaGFuZ2VzLCB0b3BvbG9naWNhbCBzb3J0LAotCXMvcmVnaXN0ZXIvLy4KKzIwMTItMDEtMjYgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgogCi0yMDAwLTEwLTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwl0ZXN0czogZml4IGV4cGVjdGVkIG91dHB1dC4KKwkqIHRlc3RzL2FjdGlvbnMuYXQgKFlZQkFDS1VQKTogaGVyZS4KIAotCSogc3JjL2xleC5oOiBQcm90b3R5cGUgYGxleC5jJyBleHBvcnRlZCBmdW5jdGlvbnMuCi0JKiBzcmMvcmVhZGVyLmM6IEFkanVzdC4KLQkqIHNyYy9sZXguYzogRm9ybWF0dGluZyBjaGFuZ2VzLgotCShzYWZlZ2V0Yyk6IFJlbmFtZSBhcy4uLgotCSh4Z2V0Yyk6IHRoaXMuCisyMDEyLTAxLTI2ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KIAotMjAwMC0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJeWFjYzogZml4IFlZQkFDS1VQLgorCVJlcG9ydGVkIGJ5IERhdmlkIEthc3RydXA6CisJaHR0cHM6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAxMS0xMC9tc2cwMDAwMi5odG1sLgogCi0JKiBzcmMvbGFsci5oOiBOZXcgZmlsZS4KLQlQcm9wYWdhdGUgaXRzIGluY2x1c2lvbiBpbnN0ZWFkIG9mIHByb3RvdHlwZXMgYW5kIGBleHRlcm4nLgotCSogc3JjL2xhbHIuYzogRm9ybWF0dGluZyBjaGFuZ2VzLCB0b3BvbG9naWNhbCBzb3J0aW5nIGV0Yy4KKwkqIGRhdGEveWFjYy5jIChZWUJBQ0tVUCk6IEFjY2VwdCByaHMgc2l6ZS4KKwlSZXN0b3JlIHRoZSBwcm9wZXIgc3RhdGUgdmFsdWUuCisJKiBUT0RPIChZWUJBQ0tVUCk6IE1ha2UgaXQuLi4KKwkqIHRlc3RzL2FjdGlvbnMuYXQ6IGEgbmV3IHRlc3QgY2FzZS4KKwkqIE5FV1MsIFRIQU5LUzogVXBkYXRlLgogCi0yMDAwLTEwLTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMDEtMjYgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgogCi0JKiBzcmMvb3V0cHV0LmMgKHRva2VuX2FjdGlvbnMpOiBJbnRyb2R1Y2UgYSB0ZW1wb3JhcnkgYXJyYXksCi0JWVlERUZBQ1QsIHRoYXQgbWFrZXMgaXQgcG9zc2libGUgZm9yIHRoaXMgZnVuY3Rpb24gdG8gdXNlCi0Jb3V0cHV0X3Nob3J0X3RhYmxlLgorCW1haW50OiB1cGRhdGUgVE9ETy4KKwkqIFRPRE8gKExhYmVsaW5nIHRoZSBzeW1ib2xzKTogUmVtb3ZlLCBpdCdzIGRvbmUgKCJOYW1lIHJlZmVyZW5jZXMiKS4KIAotMjAwMC0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTAxLTI2ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KIAotCWB1c2VyX3Rva251bXMnIGlzIG91dHB1dCBhcyBhIGBzaG9ydFtdJyBpbiBgb3V0cHV0LmMnLCB3aGlsZSBpdCBpcwotCWRlZmluZWQgYXMgYSBgaW50W10nIGluIGByZWFkZXIuYycuICBGb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUKLQlvdGhlciBvdXRwdXQgdGFibGVzLCBgdXNlcl90b2tudW1zJyBpcyBub3cgZGVmaW5lZCBhcyBhIHRhYmxlIG9mCi0Jc2hvcnRzLgorCW1haW50OiB1cGRhdGUgVEhBTktTLgorCSogVEhBTktTOiBVcGRhdGUgVHlzJ3MgYWRkcmVzcywgb24gaGlzIHJlcXVlc3QuCiAKLQkqIHNyYy9yZWFkZXIuYyAodXNlcl90b2tudW1zKTogQmUgYSBzaG9ydCB0YWJsZSBpbnN0ZWFkIG9mIGFuIGludAotCXRhYmxlLgotCUFkanVzdCBkZXBlbmRlbmNpZXMuCisyMDEyLTAxLTI2ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KIAotCUZhY3RvciB0aGUgc2hvcnQgdGFibGUgb3V0cHV0cy4KKwltYWludDogZml4IC0tZ2NjLXdhcm5pbmdzIHN1cHBvcnQuCisJKiBjb25maWd1cmUuYWM6IFVzZSBlbmFibGVfZ2NjX3dhcm5pbmdzIGluc3RlYWQgb2YgZW5hYmxldmFsLAorCXdoaWNoIGlzIHZhbGlkIG9ubHkgd2l0aCBBQ19BUkdfRU5BQkxFLgogCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9zaG9ydF90YWJsZSk6IE5ldyBmdW5jdGlvbi4KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X2dyYW0sIG91dHB1dF9zdG9zLCBvdXRwdXRfcnVsZV9kYXRhKQotCShvdXRwdXRfYmFzZSwgb3V0cHV0X3RhYmxlLCBvdXRwdXRfY2hlY2spOiAgVXNlIGl0LgorMjAxMi0wMS0yNiAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CiAKLTIwMDAtMTAtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCW1haW50OiBzaWxlbnQtcnVsZXMuCisJKiBjb25maWd1cmUuYWM6IEFzayBmb3Igc2lsZW50LXJ1bGVzIHN1cHBvcnQuCisJRW5hYmxlIGl0IGJ5IGRlZmF1bHQuCiAKLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0KTogVG9wb2xvZ2ljYWwgc29ydCBvZiB0aGUgZnVuY3Rpb25zLCBpbgotCW9yZGVyIHRvIGdldCByaWQgb2YgdGhlIGBzdGF0aWMnIHByb3RvdHlwZXMuCi0JTm8gbG9uZ2VyIHVzZSBgcmVnaXN0ZXInLgotCSogc3JjL291dHB1dC5oOiBOZXcgZmlsZS4KLQlQcm9wYWdhdGUgaXRzIGluY2x1c2lvbiBpbiBmaWxlcyBleHBsaWNpdGx5IHByb3RvdHlwaW5nIGZ1bmN0aW9ucwotCWZyb20gb3V0cHV0LmMuCisyMDEyLTAxLTI2ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KIAotMjAwMC0wOS0yMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJbWFpbnQ6IHJlbW92ZSB0cmFpbGluZyBibGFua3MuCisJKiBzcmMvc2Nhbi1jb2RlLmw6IEhlcmUuCiAKLQkqIHNyYy9hdGdlbmVyYWwubTQ6IFVwZGF0ZSBmcm9tIEF1dG9jb25mLgorMjAxMi0wMS0yNSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CiAKLTIwMDAtMDktMjEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCXRlc3RzOiBwb3J0IHRvIFNvbGFyaXMgMTAgJ2RpZmYgLXUnCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChwYXJzZS1ncmFtLnk6IExBTFIgPSBJRUxSKTogUG9ydCB0byBTb2xhcmlzIDEwLAorCXdoZXJlICJkaWZmIC11IFggWCIgb3V0cHV0cyAiTm8gZGlmZmVyZW5jZXMgZW5jb3VudGVyZWQiCisJaW5zdGVhZCBvZiBvdXRwdXR0aW5nIG5vdGhpbmcuICBSZXBvcnRlZCBieSBUb21vaGlybyBTdXp1a2kgaW4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDEyLTAxL21zZzAwMTAxLmh0bWw+LgogCi0JKiBzcmMvY2xvc3VyZS5oOiBOZXcgZmlsZS4KLQkqIHNyYy9jbG9zdXJlLmM6IEZvcm1hdHRpbmcgY2hhbmdlcywgdG9wb2xvZ2ljYWwgc29ydCBvdmVyIHRoZQotCWZ1bmN0aW9ucywgdXNlIG9mIGNsb3N1cmUuaC4KLQkoaW5pdGlhbGl6ZV9jbG9zdXJlLCBmaW5hbGl6ZV9jbG9zdXJlKTogIFJlbmFtZSBhcy4uLgotCShuZXdfY2xvc3VyZSwgZnJlZV9jbG9zdXJlKTogdGhlc2UuICBBZGp1c3QgZGVwZW5kZW5jaWVzLgotCSogc3JjL0xSMC5jOiBGb3JtYXR0aW5nIGNoYW5nZXMsIHRvcG9sb2dpY2FsIHNvcnQsIHVzZSBvZgotCWNsb3R1cmUuaC4KLQkoaW5pdGlhbGl6ZV9zdGF0ZXMpOiBSZW5hbWUgYXMuLi4KLQkobmV3X3N0YXRlcyk6IHRoaXMuCi0JKiBzcmMvTWFrZWZpbGUuYW0gKG5vaW5zdF9IRUFERVJTKTogQWRqdXN0LgorMjAxMi0wMS0yNSAgSmltIE1leWVyaW5nICA8bWV5ZXJpbmdAcmVkaGF0LmNvbT4KIAotMjAwMC0wOS0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJYnVpbGQ6IGF2b2lkIHBvc3NpYmx5LXJlcGxhY2VkIGZwcmludGYgaW4gbGlieS1zb3VyY2UsIHl5ZXJyb3IuYworCSogbGliL3l5ZXJyb3IuYyAoeXllcnJvcik6IFVzZSBmcHV0cyBhbmQgZnB1dGMgcmF0aGVyIHRoYW4gZnByaW50ZgorCXdpdGggYSBtZXJlICIlc1xuIiBmb3JtYXQuICBBbHdheXMgcmV0dXJuIDAgbm93LCBvbiB0aGUgYXNzdW1wdGlvbgorCXRoYXQgdGhlIHJldHVybiB2YWx1ZSB3YXMgbmV2ZXIgdXNlZCBhbnl3YXkuCisJRG9uJ3QgaW5jbHVkZSA8Y29uZmlnLmg+IGFmdGVyIGFsbC4gIFRoaXMgYXZvaWRzIGEgcHJvYmxlbQorCXJlcG9ydGVkIGJ5IFRoaXJ1IFJhbWFrcmlzaG5hbiBpbgorCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9oZWxwLWJpc29uLzIwMTEtMTEvbXNnMDAwMDAuaHRtbAorCSogY2ZnLm1rOiBFeGVtcHQgbGliL3l5ZXJyb3IuYyBmcm9tIHRoZSBzY19yZXF1aXJlX2NvbmZpZ19oX2ZpcnN0IHRlc3QuCisJKiBUSEFOS1M6IFVwZGF0ZS4KIAotCSogc3JjL2FjY29uZmlnLmg6IERvbid0IHByb3RlY3QgY29uZmlnLmggYWdhaW5zdCBtdWx0aXBsZQotCWluY2x1c2lvbi4KLQlEb24ndCBkZWZpbmUgUEFSQU1TLgotCSogc3JjL3N5c3RlbS5oOiBEZWZpbmUgUEFSQU1TLgotCVJlbW92ZSBzb21lIG9mIHRoZSBhZC1ob2MgQ1BQIG1hZ2ljIGZvciBET1MsIFZNUyBldGMuOiB0aGlzIGlzIHRoZQotCXB1cnBvc2Ugb2YgY29uZmlnLmguICBzeXN0ZW0uaCBtdXN0IG5vdCB0cnkgdG8gZml4IHdyb25nCi0JZGVmaW5pdGlvbnMgaW4gY29uZmlnLmguCisyMDEyLTAxLTI0ICBKaW0gTWV5ZXJpbmcgIDxtZXllcmluZ0ByZWRoYXQuY29tPgogCi0yMDAwLTA5LTIwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwltYWludDogZ2VuZXJhdGUgQ2hhbmdlTG9nIGZyb20gZ2l0IGxvZworCSogTWFrZWZpbGUuYW0gKGdlbi1DaGFuZ2VMb2cpOiBOZXcgcnVsZS4KKwkoZGlzdC1ob29rKTogRGVwZW5kIG9uIGl0LgorCShFWFRSQV9ESVNUKTogRGlzdHJpYnV0ZSB0aGUgdHdvIENoYW5nZUxvZy0qIGZpbGVzLgorCSogYm9vdHN0cmFwLmNvbmYgKGdudWxpYl9tb2R1bGVzKTogQWRkIGdpdGxvZy10by1jaGFuZ2Vsb2cuCisJKGJvb3RzdHJhcF9wb3N0X2ltcG9ydF9ob29rKTogRW5zdXJlIHRoYXQgQ2hhbmdlTG9nIGV4aXN0cy4KKwkqIGJ1aWxkLWF1eC9naXQtbG9nLWZpeDogTmV3IGZpbGUuCisJKiBDaGFuZ2VMb2ctMjAxMjogUmVuYW1lZCAuLi4KKwkqIENoYW5nZUxvZzogLi4uIGZyb20gdGhpcy4KKwkqIENoYW5nZUxvZy0xOTk4OiBSZW5hbWVkIC4uLgorCSogT0NoYW5nZUxvZzogLi4uZnJvbSB0aGlzCisJKiAuZ2l0aWdub3JlOiBBZGQgQ2hhbmdlTG9nLgogCi0JKiBzcmMvZGVyaXZlcy5oOiBOZXcgZmlsZS4KLQkqIHNyYy9tYWluLmMsIHNyYy9kZXJpdmVzLmg6IFVzZSBpdC4KLQlGb3JtYXR0aW5nIGNoYW5nZXMuCi0JKiBzcmMvTWFrZWZpbGUuYW0gKG5vaW5zdF9IRUFERVJTKTogQWRqdXN0LgorMjAxMi0wMS0yNCAgSmltIE1leWVyaW5nICA8bWV5ZXJpbmdAcmVkaGF0LmNvbT4KIAotMjAwMC0wOS0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHRlc3RzL2F0Z2VuZXJhbC5tNDogVXBkYXRlIGZyb20gQXV0b2NvbmYuCi0JKiB0ZXN0cy9jYWxjLm00IChfQVRfREFUQV9DQUxDX1ksIEFUX0RBVEFfQ0FMQ19ZLCBfQVRfQ0hFQ0tfQ0FMQykKLQkoQVRfQ0hFQ0tfQ0FMQyk6IE5ldyBtYWNyb3MuCi0JVXNlIHRoZXNlIG1hY3JvcyB0byB0ZXN0IGJpc29uIHdpdGggb3B0aW9ucyBgJywgYC0tcmF3JywKLQlgLS1kZWJ1ZycsIGAtLXlhY2MnLCBgLS15YWNjIC0tZGVidWcnLgotCi0yMDAwLTA5LTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL291dHB1dC5jOiBGb3JtYXR0aW5nIGNoYW5nZXMuCi0JKiBzcmMvbWFjaGluZS5oOiBSZW1vdmUsIGxlYXZpbmcgaXRzIGNvbnRlbnRzIGluLi4uCi0JKiBzcmMvc3lzdGVtLmg6IGhlcmUuCi0JSW5jbHVkZSBzdGRpby5oLgotCUFkanVzdCBhbGwgZGVwZW5kZW5jaWVzIG9uIHN0ZGlvLmggYW5kIG1hY2hpbmUuaC4KLQkqIHNyYy9nZXRhcmdzLmg6IE5ldyBmaWxlLgotCUxldCBhbGwgYGV4dGVybicgZGVjbGFyYXRpb25zIGFib3V0IGdldGFyZ3MuYyBiZSByZXBsYWNlZCB3aXRoCi0JaW5jbHVzaW9uIG9mIGBnZXRhcmdzLmgnLgotCSogc3JjL01ha2VmaWxlLmFtIChub2luc3RfSEVBREVSUyk6IEFkanVzdC4KLQotCSogdGVzdHMvY2FsYy5tNCAoeXlpbik6IEJlIGluaXRpYWxpemVkIGluIG1haW4sIG5vdCBvbiB0aGUgZ2xvYmFsCi0Jc2NvcGUuCi0JKHl5ZXJyb3IpOiBSZXR1cm5zIHZvaWQsIG5vdCBpbnQuCi0JKiBkb2MvYmlzb24udGV4aW5mbzogRm9ybWF0dGluZyBjaGFuZ2VzLgotCi0yMDAwLTA5LTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogdGVzdHMvY2FsYy5tNCAoY2FsYy55KTogRG8gbm90IGFzc2lnbiB0byBzdGRpbiwgYXMgaXQncyBub3QKLQlwb3J0YWJsZS4KLQotMjAwMC0wOS0xOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogQXBwZW5kIFdBUk5JTkdfQ0ZMQUdTIHRvIENGTEFHUy4KLQkqIHNyYy9NYWtlZmlsZS5hbSAoSU5DTFVERVMpOiBEb24ndC4KLQlCZSByZWFkeSB0byBmZXRjaCBoZWFkZXJzIGluIGxpYi8uCi0KLTIwMDAtMDktMTggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBkb2MvYmlzb24udGV4aW5mbzogVXBkYXRlIHRoZSBjb3B5cmlnaHQuCi0JQU5TSWZ5IGFuZCBHTlVpZnkgdGhlIGV4YW1wbGVzLgotCVJlbW92ZSB0aGUgb2xkIG1lbnUuCi0KLTIwMDAtMDktMTggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JRmlyc3Qgc2V0IG9mIHRlc3RzOiB1c2UgdGhlIGBjYWxjJyBleGFtcGxlIGZyb20gdGhlIGRvY3VtZW50YXRpb24uCi0KLQkqIHNyYy9iaXNvbi5zMSAoeXlwYXJzZSk6IENvbmRpdGlvbiB0aGUgY29kZSB1c2luZyBgeXl0bmFtZScgd2hpY2gKLQlpcyBkZWZpbmVkIG9ubHkgd2hlbiBZWURFQlVHIGlzLgotCSogbTQvYXRjb25maWcubTQgKEFUX0NPTkZJRyk6IEFkanVzdCB0byBBdXRvY29uZiAyLjEzLgotCSogc3JjL2ZpbGVzLmMgKHRyeW9wZW4sIHRyeWNsb3NlKTogRm9ybWF0dGluZyBjaGFuZ2VzLgotCU1vdmUgdG8gdGhlIHRvcCBhbmQgYmUgc3RhdGljLgotCSogc3JjL3JlYWRlci5jIChyZWFkX3NpZ25lZF9pbnRlZ2VyKTogTGlrZXdpc2UuCi0JKiB0ZXN0cy9jYWxjLm00OiBOZXcgZmlsZS4KLQkqIE1ha2VmaWxlLmFtLCBzdWl0ZS5tNDogQWRqdXN0LgotCSogbTQvYXRjb25maWcubTQ6IFNldCBCSVNPTl9TSU1QTEUgYW5kIEJJU09OX0hBSVJZLgotCi0yMDAwLTA5LTE4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCUFkZCBzdXBwb3J0IGZvciBhbiBBdXRvdGVzdCB0ZXN0IHN1aXRlIGZvciBCaXNvbi4KLQotCSogbTQvbTQubTQsIG00L2F0Y29uZmlnLm00OiBOZXcgZmlsZXMuCi0JKiBtNC9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkanVzdC4KLQkqIHRlc3RzL3N1aXRlLm00LCB0ZXN0cy9NYWtlZmlsZS5hbSwgdGVzdHMvYXRnZW5lcmFsLm00OiBOZXcKLQlmaWxlcy4KLQkqIHNyYy9nZXRhcmdzLmM6IERpc3BsYXkgYSBtb3JlIHN0YW5kYXJkIC0tdmVyc2lvbiBtZXNzYWdlLgotCSogc3JjL3JlYWRlci5jIChyZWFkZXIpOiBGb3JtYXR0aW5nIGNoYW5nZXMuCi0JTm8gbG9uZ2VyIGRlcGVuZCB1cG9uIFZFUlNJT05fU1RSSU5HLgotCSogY29uZmlndXJlLmluOiBObyBsb25nZXIgdXNlIGBkbmwnLgotCVNldCB1cCB0aGUgdGVzdCBzdWl0ZSBhbmQgdGhlIG5ldyBkaXJlY3RvcnkgYHRlc3RzLy4KLQkoVkVSU0lPTl9TVFJJTkcpOiBSZW1vdmUuCi0KLTIwMDAtMDQtMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvcmVhZGVyLmMgKGNvcHlfY29tbWVudDIpOiBOZXcgZnVuY3Rpb24sIHNhbWUgYXMgZm9ybWVyCi0JYGNvcHlfY29tbWVudCcsIGJ1dCBvdXRwdXRzIGludG8gdHdvIEZJTEUgKi4KLQkoY29weV9jb21tZW50KTogVXNlIGl0LgotCShwYXJzZV91bmlvbl9kZWNsKTogVXNlIGl0LgotCShnZXRfdHlwZSwgcGFyc2Vfc3RhcnRfZGVjbCk6IFVzZSB0aGUgc2FtZSBgaW52YWxpZCcgbWVzc2FnZS4KLQkocGFyc2Vfc3RhcnRfZGVjbCwgcGFyc2VfdW5pb25fZGVjbCk6IFVzZSB0aGUgc2FtZSBgbXVsdGlwbGUnCi0JbWVzc2FnZS4KLQkocGFyc2VfdW5pb25fZGVjbCwgY29weV9ndWFyZCwgY29weV9hY3Rpb24pOiBVc2UgdGhlIHNhbWUKLQlgdW5tYXRjaGVkJyBtZXNzYWdlLgotCSogbTQvTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgYHdhcm5pbmcubTQnLgotCi0yMDAwLTAzLTMxICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2ZpbGVzLmMgKHRyeW9wZW4sIHRyeWNsb3NlKTogTW92ZSB0byB0aGUgdG9wLgotCUJlIHN0YXRpYy4KLQotMjAwMC0wMy0zMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9tYWluLmMgKG1haW4pOiBEb24ndCBjYWxsIGBkb25lJywgZXhpdCBkb2VzIGl0LgotCi0yMDAwLTAzLTMxICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogYWxsb2NhdGUuYzogcy9yZXR1cm4gKGZvbykvcmV0dXJuIGZvby8uCi0JKiBsYWxyLmM6IExpa2V3aXNlLgotCSogTFIwLmM6IExpa2V3aXNlLgotCSogb3V0cHV0LmM6IExpa2V3aXNlLgotCSogcmVhZGVyLmM6IExpa2V3aXNlLgotCSogc3ltdGFiLmM6IExpa2V3aXNlLgotCSogdm1zZ2V0YXJncy5jOiBMaWtld2lzZS4KLQotMjAwMC0wMy0zMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlDbGVhbiB1cCB0aGUgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9ucy4KLQotCSogc3JjL3JlcG9ydC5jOiBOZXcgZmlsZS4KLQkqIHNyYy9yZXBvcnQuaDogTGlrZXdpc2UuCi0JKiBzcmMvTWFrZWZpbGUuYW06IEFkanVzdC4KLQkqIG00L2Vycm9yLm00OiBOZXcgZmlsZS4KLQkqIG00L01ha2VmaWxlLmFtOiBBZGp1c3QuCi0JKiBjb25maWd1cmUuaW4gKGptX1BSRVJFUV9FUlJPUik6IENhbGwgaXQuCi0JKiBzcmMvbWFpbi5jIChpbnRfdG9fc3RyaW5nLCBiYW5uZXIsIGZhdGFsX2Jhbm5lciwgd2Fybl9iYW5uZXIpOgotCVJlbW92ZS4KLQkoZmF0YWwsIGZhdGFscyk6IFJlbW92ZS4gIEFsbCBjYWxsZXJzIHVzZSBjb21wbGFpbi5jOjpmYXRhbC4KLQkod2Fybiwgd2FybmksIHdhcm5zLCB3YXJuc3MsIHdhcm5zcyk6IFJlbW92ZS4gIEFsbCBjYWxsZXJzIHVzZQotCWNvbXBsYWluLmM6OmNvbXBsYWluLgotCSh0b29tYW55KTogUmVtb3ZlLCB1c2UgZmF0YWwgaW5zdGVhZC4KLQkqIHNyYy9maWxlcy5jIChkb25lKTogTm8gYXJndW1lbnQsIHVzZSBjb21wbGFpbl9tZXNzYWdlX2NvdW50LgotCSogc3JjL21haW4uYyAobWFpbik6IFJlZ2lzdGVyIGBkb25lJyB0byBgYXRleGl0Jy4KLQotCSogc3JjL2dldGFyZ3MuYyAodXNhZ2UpOiBNb3JlIGBmcHV0cycsIGxlc3MgYGZwcmludGYnLgotCi0yMDAwLTAzLTI4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogbGliLzogTmV3IGRpcmVjdG9yeS4KLQkqIE1ha2VmaWxlLmFtIChTVUJESVJTKTogQWRqdXN0LgotCSogY29uZmlndXJlLmluOiBBZGp1c3QuCi0JKExJQk9CSlMpOiBBbHRob3VnaCBub3QgdXNlZCB5ZXQsIEFDX1NVQlNUIGl0LCBvdGhlcndpc2UgaXQncwotCXVzZWxlc3MuCi0JKiBzcmMvYWxsb2NhLmM6IE1vdmVkIHRvIGxpYi8uCi0JKiBzcmMvZ2V0b3B0LmM6IExpa2V3aXNlLgotCSogc3JjL2dldG9wdDEuYzogTGlrZXdpc2UuCi0JKiBzcmMvZ2V0b3B0Lmg6IExpa2V3aXNlLgotCSogc3JjL2Fuc2kya25yLmM6IExpa2V3aXNlLgotCSogc3JjL2Fuc2kya25yLjE6IExpa2V3aXNlLgotCSogc3JjL01ha2VmaWxlLmFtOiBBZGp1c3QuCi0JKiBsaWIvTWFrZWZpbGUuYW06IE5ldyBmaWxlLgotCi0yMDAwLTAzLTI4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2dldGFyZ3MuYyAodXNhZ2UpOiBSZWZyZXNoIHRoZSBoZWxwIG1lc3NhZ2UuCi0KLTIwMDAtMDMtMTcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvZ2V0b3B0MS5jOiBVcGRhdGVkIGZyb20gdGV4dHV0aWxzIDIuMGUKLQkqIHNyYy9nZXRvcHQuYzogTGlrZXdpc2UuCi0JKiBzcmMvZ2V0b3B0Lmg6IExpa2V3aXNlLgotCi0yMDAwLTAzLTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL01ha2VmaWxlLmFtIChiaXNvbi5zaW1wbGUpOiBGaXggdGhlIGF3ayBwcm9ncmFtOiBxdW90ZSBvbmx5Ci0JdGhlIGZpbGUgbmFtZSwgbm90IHRoZSB3aG9sZSBgI2xpbmUgTElORSBGSUxFJy4KLQotMjAwMC0wMy0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQlPbiBzeW50YXggZXJyb3JzLCByZXBvcnQgdGhlIHRva2VuIG9uIHdoaWNoIHdlIGNob2tlZC4KLQotCSogc3JjL2Jpc29uLnMxICh5eXBhcnNlKTogSW4gdGhlIGxhYmVsIHl5ZXJybGFiLCB3aGVuCi0JWVlFUlJPUl9WRVJCT1NFLCBhZGQgeXljaGFyIGluIG1zZy4KLQotMjAwMC0wMy0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9yZWFkZXIuYyAoY29weV9hdCk6IE5ldyBmdW5jdGlvbi4KLQkoY29weV9ndWFyZCk6IFVzZSBpdC4KLQkoY29weV9hY3Rpb24pOiBVc2UgaXQuCi0KLTIwMDAtMDMtMTcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JQmUga2luZCB0byB0cmFuc2xhdG9ycywgc2F2ZSBzb21lIHVzZWxlc3MgdHJhbnNsYXRpb25zLgotCi0JKiBzcmMvbWFpbi5jIChiYW5uZXIpOiBOZXcgZnVuY3Rpb24uCi0JKGZhdGFsX2Jhbm5lcik6IFVzZSBpdC4KLQkod2Fybl9iYW5uZXIpOiBVc2UgaXQuCi0KLTIwMDAtMDMtMTcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgotCi0JKiBzcmMvcmVhZGVyLmMgKGNvcHlfZGVmaW5pdGlvbik6IFVzZSBjb3B5X3N0cmluZyBhbmQKLQljb3B5X2NvbW1lbnQuICBSZW1vdmVkIG5vdyB1bnVzZWQgYG1hdGNoJywgYGVuZGVkJywKLQlgY3BsdXNfY29tbWVudCcuCi0JKGNvcHlfY29tbWVudCwgY29weV9zdHJpbmcpOiBNb3ZlZCwgdG8gYmUgdmlzaWJsZSBmcm9tCi0JY29weV9kZWZpbml0aW9uLgotCi0yMDAwLTAzLTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3JlYWRlci5jIChjb3B5X3N0cmluZyk6IERlY2xhcmUgYHN0YXRpYyBpbmxpbmUnLiAgTm8KLQlwcm9ibGVtcyB3aXRoIGlubGluZSwgc2luY2UgaXQgaXMgY2hlY2tlZCBieSBjb25maWd1cmUuCi0JKGNvcHlfY29tbWVudCk6IExpa2V3aXNlLgotCi0yMDAwLTAzLTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL3JlYWRlci5jIChwYWNrc3ltYm9scyk6IEZvcm1hdHRpbmcgY2hhbmdlcy4KLQotMjAwMC0wMy0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9yZWFkZXIuYyAoY29weV9jb21tZW50KTogTmV3IGZ1bmN0aW9uLCBmYWN0b3JlZCBvdXQgZnJvbToKLQkoY29weV9hY3Rpb24pOiBVc2UgaXQuICBSZW1vdmVkIG5vdyB1bnVzZWQgYG1hdGNoJywgYGVuZGVkJywKLQlgY3BsdXNfY29tbWVudCcuCi0JKGNvcHlfZ3VhcmQpOiBMaWtld2lzZS4KLQotMjAwMC0wMy0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+Ci0KLQkqIHNyYy9yZWFkZXIuYyAoY29weV9zdHJpbmcpOiBOZXcgZnVuY3Rpb24sIGZhY3RvcmVkIG91dCBmcm9tOgotCShjb3B5X2FjdGlvbik6IFVzZSBpdC4KLQkoY29weV9ndWFyZCk6IExpa2V3aXNlLgotCi0yMDAwLTAzLTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCUNoYW5nZSB0aGUgaGFuZGxpbmcgb2YgQHMgc28gdGhhdCB0aGV5IGJlaGF2ZSBleGFjdGx5IGxpa2UgJHMuCi0JVGhlcmUgaXMgbm93IGEgcHNldWRvIHZhcmlhYmxlIEAkIChyZWFkYmxlIGFuZCB3cml0YWJsZSksIGxvY2F0aW9uCi0Jb2YgdGhlIGxocyBvZiB0aGUgcnVsZSAoYnkgZGVmYXVsdCByYW5naW5nIGZyb20gdGhlIGxvY2F0aW9uIG9mCi0JdGhlIGZpcnN0IHN5bWJvbCBvZiB0aGUgcmhzLCB0byB0aGUgbG9jYXRpb24gb2YgdGhlIGxhc3Qgc3ltYm9sLAotCW9yLCBpZiB0aGUgcmhzIGlzIGVtcHR5LCBZWUxMT0MpLgotCi0JKiBzcmMvYmlzb24uczEgW1lZTFNQX05FRURFRF0gKHl5bG9jKTogTmV3IHZhcmlhYmxlLCB0d2luIG9mCi0JeXl2YWwuCi0JKHl5cGFyc2UpOiBXaGVuIHByb3ZpZGluZyBhIGRlZmF1bHQgc2VtYW50aWMgYWN0aW9uLCBwcm92aWRlIGEKLQlkZWZhdWx0IGxvY2F0aW9uIGFjdGlvbi4KLQkoYWZ0ZXIgdGhlICQpOiBObyBsb25nZXIgY2hhbmdlIGAqWVlMU1AnLCBqdXN0IHN0YWNrIFlZTE9DIHRoZQotCXNhbWUgd2F5IHlvdSBzdGFjayBZWVZBTC4KLQkqIHNyYy9yZWFkZXIuYyAocmVhZF9kZWNsYXJhdGlvbnMpOiBVc2Ugd2FybnMuCi0JKGNvcHlfZ3VhcmQsIGNhc2UgJ0AnKTogQWxzbyByZWNvZ25pemUgYEAkJywgZXhwYW5kZWQgYXMgYFlZTE9DJy4KLQkoY29weV9hY3Rpb24sIGNhc2UgJ0AnKTogTGlrZXdpc2UuCi0JVXNlIGEgc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSwgdG8gc2F2ZSB1c2VsZXNzIHdvcmsgZnJvbQotCXRyYW5zbGF0b3JzLgotCi0yMDAwLTAzLTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KLQotCSogc3JjL2Jpc29uLnMxOiBGb3JtYXR0aW5nIGFuZCBjb3NtZXRpY3MgY2hhbmdlcy4KKwljaGFuZ2UgbW9yZSBxdW90ZXMgaW4gc291cmNlLCBhbmQgYWRqdXN0IHRlc3RzIHRvIG1hdGNoCisJUnVuIHRoaXMgY29tbWFuZCB0byBjaGFuZ2UgZWFjaCBgJXMnIHRvICclcycgaW4gc291cmNlIGRpcmVjdG9yaWVzOgorCSAgZ2l0IGdyZXAgLWwgJ2AlcydcJyBzcmMgZGpncHAgZGF0YSBcCisJICAgIHx4YXJncyBwZXJsIC1waSAtZSAnJHE9IidcJyciO3MvYCVzJHEvJHElcyRxL2cnCisJKiBkYXRhL2Jpc29uLm00OiBBZmZlY3RlZCBwZXIgdGhlIGFib3ZlLgorCSogZGpncHAvc3VicGlwZS5jOiBMaWtld2lzZS4KKwkqIHNyYy9maWxlcy5jOiBMaWtld2lzZS4KKwkqIHNyYy9nZXRhcmdzLmM6IExpa2V3aXNlLgorCSogc3JjL211c2NsZS10YWIuYzogTGlrZXdpc2UuCiAJKiBzcmMvcmVhZGVyLmM6IExpa2V3aXNlLgotCVVwZGF0ZSB0aGUgQ29weXJpZ2h0IG5vdGljZS4KKwkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0OiBBZGp1c3QgdG8gbWF0Y2guCisJKiB0ZXN0cy9pbnB1dC5hdDogTGlrZXdpc2UuCisJKiB0ZXN0cy9wdXNoLmF0OiBMaWtld2lzZS4KKwkqIHRlc3RzL3NrZWxldG9ucy5hdDogTGlrZXdpc2UuCiAKLTIwMDAtMDMtMTcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0wMS0yMyAgSmltIE1leWVyaW5nICA8bWV5ZXJpbmdAcmVkaGF0LmNvbT4KIAotCSogc3JjL2Jpc29uLnMxICgjbGluZSk6IEFsbCBzZXQgdG8gYCNsaW5lJyBvbmx5LCBzaW5jZSB0aGUKLQlNYWtlZmlsZSBub3cgaGFuZGxlcyB0aGVtLgorCXF1b3RlIGNvbnNpc3RlbnRseSBhbmQgbWFrZSB0ZXN0cyBwYXNzIHdpdGggbmV3IHF1b3RpbmcgZnJvbSBnbnVsaWIKKwlVcGRhdGluZyB0byBnbnVsaWIgcHVsbGVkIGluIG5ldyBxdW90ZSBhbmQgcXVvdGFyZyBtb2R1bGVzLAorCWJ5IHdoaWNoIHF1b3RpbmcgaXMgbm93IGRvbmUgbGlrZSAndGhpcycgcmF0aGVyIHRoYW4gYHRoaXMnLgorCVRoYXQgY2hhbmdlIGluZHVjZXMgbWFueSAibWFrZSBjaGVjayIgdGVzdCBmYWlsdXJlcy4gIFRoaXMgY2hhbmdlCisJYWRhcHRzIGNvZGUgYW5kIHRlc3RzIHNvIHRoYXQgIm1ha2UgY2hlY2siIHBhc3NlcyBvbmNlIGFnYWluLgorCSogc3JjL3NjYW4tY29kZS5sOiBRdW90ZSBsaWtlICd0aGlzJywgbm90IGxpa2UgYHRoaXMnLgorCSogc3JjL3NjYW4tZ3JhbS5sOiBMaWtld2lzZS4KKwkqIHNyYy9zeW10YWIuYzogTGlrZXdpc2UuCisJKiB0ZXN0cy9hY3Rpb25zLmF0OiBBZGp1c3QgdGVzdHMgdG8gbWF0Y2guCisJKiB0ZXN0cy9pbnB1dC5hdDogTGlrZXdpc2UuCisJKiB0ZXN0cy9uYW1lZC1yZWZzLmF0OiBMaWtld2lzZS4KKwkqIHRlc3RzL291dHB1dC5hdDogTGlrZXdpc2UuCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0OiBMaWtld2lzZS4KKwkqIGxpYi8uZ2l0aWdub3JlOiBSZWdlbmVyYXRlLgorCSogbTQvLmdpdGlnbm9yZTogTGlrZXdpc2UuCiAKLTIwMDAtMDMtMTYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorMjAxMi0wMS0yMyAgSmltIE1leWVyaW5nICA8bWV5ZXJpbmdAcmVkaGF0LmNvbT4KIAotCSogc3JjL291dHB1dC5jIChvdXRwdXRfcnVsZV9kYXRhKTogT3V0cHV0IHRoZSBkb2N1bWVudGF0aW9uIG9mCi0Jc29tZSBvZiB0aGUgdGFibGVzLgotCShDb3B5cmlnaHQgbm90aWNlKTogVXBkYXRlLgotCUZvcm1hdHRpbmcgY2hhbmdlcy4KKwlidWlsZDogdXBkYXRlIGdudWxpYiBhbmQgYXV0b2NvbmYgc3VibW9kdWxlcyB0byBsYXRlc3QgKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgNzI4NDE1Zjg4NWU1Y2I4ZTUxOGM4NTc2ZmE2ZTFmNTQxZTM4NDEzMCkKIAotMjAwMC0wMy0xNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTAxLTIzICBKaW0gTWV5ZXJpbmcgIDxtZXllcmluZ0ByZWRoYXQuY29tPgogCi0JKiBzcmMvYmlzb24uczEgWyFZWURFQlVHXTogRGVmaW5lIHl5ZGVidWcgdG8gMC4gIFRoaXMgYWxsb3dzIHRvCi0JcmVtb3ZlIG1vc3QgYCNpZiBZWURFQlVHICE9IDAnLCBzaW5jZSBgaWYgKHl5ZGVidWcpJyBpcyBlbm91Z2guCi0JT25lIGAjaWYgWVlERUJVRycgcmVtYWlucywgc2luY2UgaXQgdXNlcyB2YXJpYWJsZXMgd2hpY2ggYXJlCi0JZGVmaW5lZCBvbmx5IGlmIGBZWURFQlVHICE9IDAnLgorCWJ1aWxkOiBtYW51YWxseSB1cGRhdGUgYm9vdHN0cmFwIGZyb20gZ251bGliLCBhbmQgYWRhcHQKKwlVcGRhdGluZyB0byB0aGUgbGF0ZXN0IGJvb3RzdHJhcCBmcm9tIGdudWxpYiBpbnZvbHZlcyBtb3JlIG9mIGEKKwljaGFuZ2UgdGhhbiB1c3VhbCwgYW5kIHVwZGF0aW5nIHRvIHRoZSBsYXRlc3QgZ251bGliIHdvdWxkIGludm9sdmUKKwlpdHMgb3duIHNldCBvZiBjaGFsbGVuZ2VzIHdpdGggdGhlIHVwY29taW5nIHF1b3RpbmcgY2hhbmdlcywgc28KKwl3ZSB1cGRhdGUgYm9vdHN0cmFwIG1hbnVhbGx5IGFuZCBzZXBhcmF0ZWx5LgorCSogYm9vdHN0cmFwOiBVcGRhdGUgZnJvbSBnbnVsaWIuCisJKiBsaWIvTWFrZWZpbGUuYW06IEluaXRpYWxpemUgbW9yZSB2YXJpYWJsZXMgdG8gZW1wdHksIHNvIHRoYXQgZ251bGliLm1rCisJY2FuIGFwcGVuZCB0byB0aGVtIHdpdGggIis9Ii4KKwkqIGJvb3RzdHJhcC5jb25mIChnbnVsaWJfbWtfaG9vayk6IFJlbW92ZS4gIE5vIGxvbmdlciBob25vcmVkLgorCShnbnVsaWJfdG9vbF9vcHRpb25fZXh0cmFzKTogR2VuZXJhdGUgZ251bGliLm1rLgogCi0yMDAwLTAzLTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMDEtMjMgIEppbSBNZXllcmluZyAgPG1leWVyaW5nQHJlZGhhdC5jb20+CiAKLQkqIHNyYy9iaXNvbi5zMSAoeXlwYXJzZSk6IFJlb3JnYW5pemUgdGhlIGRlZmluaXRpb25zIG9mIHRoZSBzdGFja3MKLQlhbmQgcmVsYXRlZCB2YXJpYWJsZXMgc28gdGhhdCB0aGUgc2ltaWxhcml0aWVzIGFyZSBoaWdobGlnaHRlZC4KKwltYWludDogaW5jbHVkZSA8Y29uZmlnLmg+IGZpcnN0CisJKiBjZmcubWsgKGV4Y2x1ZGVfZmlsZV9uYW1lX3JlZ2V4cC0tc2NfcmVxdWlyZV9jb25maWdfaF9maXJzdCk6CisJRXhlbXB0IGRhdGEvZ2xyLmMgYW5kIGRhdGEveWFjYy5jIGZyb20gdGhlIGluY2x1ZGUtY29uZmlnLmgtZmlyc3QKKwlyZXF1aXJlbWVudC4KIAotMjAwMC0wMy0xNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisyMDEyLTAxLTIzICBKaW0gTWV5ZXJpbmcgIDxtZXllcmluZ0ByZWRoYXQuY29tPgogCi0JKiBzcmMvYmlzb24uczE6IFByb3Blcmx5IGluZGVudCBDUFAgZGlyZWN0aXZlcy4KKwlidWlsZDogaW5jbHVkZSA8Y29uZmlnLmg+IGZyb20gbGliL3l5ZXJyb3IuYworCSogbGliL3l5ZXJyb3IuYzogSW5jbHVkZSA8Y29uZmlnLmg+LgogCi0yMDAwLTAzLTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMDEtMjMgIEppbSBNZXllcmluZyAgPG1leWVyaW5nQHJlZGhhdC5jb20+CiAKLQkqIHNyYy9iaXNvbi5zMTogUHJvcGVybHkgaW5kZW50IHRoZSBgYWxsb2NhJyBDUFAgc2VjdGlvbi4KKwltYWludDogbGlzdCBkamdwcC9zdWJwaXBlLmMgaW4gcG8vUE9URklMRVMuaW4KKwkqIHBvL1BPVEZJTEVTLmluOiBBZGQgZGpncHAvc3VicGlwZS5jLgogCi0yMDAwLTAzLTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKzIwMTItMDEtMjMgIEppbSBNZXllcmluZyAgPG1leWVyaW5nQHJlZGhhdC5jb20+CiAKLQlEbyBub3QgaGFyZCBjb2RlIHZhbHVlcyBvZiBkaXJlY3RvcmllcyBpbiBgY29uZmlndXJlLmluJy4KLQlVcGRhdGUgdGhlIGBjb25maWd1cmUnIHRvb2wgY2hhaW4uCisJbWFpbnQ6IHBsYWNhdGUgdGhlIHNwYWNlLVRBQiBzeW50YXgtY2hlY2sKKwkqIGNmZy5tayAoZXhjbHVkZV9maWxlX25hbWVfcmVnZXhwLS1zY19zcGFjZV90YWIpOiBFeGVtcHQKKwl0ZXN0cy9pbnB1dC5hdCBhbmQgdGVzdHMvYysrLmF0LCBzaW5jZSB0aGV5IGFwcGVhciB0byB1c2UKKwlTUC1UQUIgc2VxdWVuY2VzIGRlbGliZXJhdGVseS4KKwkqIE9DaGFuZ2VMb2c6IFJlbW92ZSBzcGFjZS1iZWZvcmUtVEFCLgogCi0JKiBjb25maWd1cmUuaW4gKFhQRklMRSwgWFBGSUxFMSwgTE9DQUxFRElSKTogUmVtb3ZlLCBoYW5kbGVkIGJ5Ci0Jc3JjL21ha2VmaWxlLmFtLgotCShWRVJTSU9OX1NUUklORyk6IFVzZSB0aGUgdGhpcmQgYXJnIG9mIEFDX0RFRklORV9VTlFVT1RFRC4KLQkoQUNfT1VUUFVUKTogQWRkIG00L01ha2VmaWxlLgotCUJ1bXAgdG8gYmlzb24gMS4yOGEsIDEuMjkgaGFzIG5ldmVyIGJlZW4gcmVsZWFzZWQuCi0JKiBhY2NvbmZpZy5oIChYUEZJTEUsIFhQRklMRTEsIExPQ0FMRURJUik6IFJlbW92ZSwgc2luY2UgdGhleSBhcmUKLQloYW5kbGVkIHZpYSBzcmMvTWFrZWZpbGUuYW0uCi0JKFZFUlNJT05fU1RSSU5HLCBQUk9UT1RZUEVTLCBFTkFCTEVfTkxTLCBIQVZFX0NBVEdFVFMsCi0JSEFWRV9HRVRURVhULCBIQVZFX0xDX01FU1NBR0VTLCBIQVZFX1NUUENQWSk6IFJlbW92ZSwgaGFuZGxlZCBieQotCWF1dG9oZWFkZXIuCi0JKiBNYWtlZmlsZS5hbSAoU1VCRElSUyk6IEFkZCBtNC4KLQkoQUNMT0NBTF9BTV9GTEFHUyk6IE5ldyB2YXJpYWJsZS4KLQkoQVVUT01BS0VfT1BUSU9OUyk6IEFkZCBjaGVjay1uZXdzLgotCSogc3JjL01ha2VmaWxlLmFtIChiaXNvbi5zaW1wbGUpOiBVc2UgYXdrIHRvIHJlcGxhY2UgI2xpbmUgbGluZXMgd2l0aAotCXRoZSBwcm9wZXIgbGluZSBudW1iZXIgYW5kIGZpbGUgbmFtZS4KLQkoREVGUyk6IFByb3BhZ2F0ZSB0aGUgbG9jYXRpb24gb2YgYmlzb24gbGlicmFyeSBmaWxlcyBhbmQgb2YgdGhlCi0JbG9jYWxlIGZpbGVzLgotCShJTkNMVURFUyk6IEFkZGVkIGAtSSAuLicgc28gdGhhdCBvbmUgY2FuIGNvbXBpbGUgd2l0aCBzcmNkaXIgIT0KLQlidWlsZGRpci4KLQkqIGFjaW5jbHVkZS5tNDogUmVtb3ZlLCByZXBsYWNlZCBieSB0aGUgZGlyZWN0b3J5IG00LgotCSogbTQvTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBOZXcgdmFyaWFibGUuCi0JKiBtNC9nZXR0ZXh0Lm00OiBOZXcgZmlsZSwgZnJvbSB0aGUgZmlsZXV0aWxzLgotCSogbTQvbGNtZXNzYWdlLm00OiBMaWtld2lzZQotCSogbTQvcHJvZ3Rlc3QubTQ6IExpa2V3aXNlLgotCSogbTQvYmlzb24tZGVjbC5tNDogTmV3IGZpbGUsIGV4dHJhY3RlZCBmcm9tIGZvcm1lciBhY2luY2x1ZGUubTQuCisyMDEyLTAxLTIzICBKaW0gTWV5ZXJpbmcgIDxtZXllcmluZ0ByZWRoYXQuY29tPgogCi0yMDAwLTAzLTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKwlkb2M6IGNvcnJlY3QgdHlwbzogcy9jYW4gbm90L2Nhbm5vdC8KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChCdWcgUmVwb3J0cyk6IHMvY2FuIG5vdC9jYW5ub3QvCisJQW5kIHJlbW92ZSB0cmFpbGluZyBibGFua3MuCiAKLQkqIHNyYy9jbG9zdXJlLmM6Ci0JRm9ybWF0dGluZyBjaGFuZ2VzIG9mIHZhcmlvdXMgY29tbWVudHMuCi0JUmVzcGVjdCB0aGUgR05VIGNvZGluZyBzdGFuZGFyZHMgYXQgdmFyaW91cyBwbGFjZXMuCi0JRG9uJ3QgdXNlIGBfKCknIHdoZW4gbm8gdHJhbnNsYXRpb24gaXMgbmVlZGVkLgorMjAxMi0wMS0yMiAgSmltIE1leWVyaW5nICA8bWV5ZXJpbmdAcmVkaGF0LmNvbT4KIAotMTk5OS0xMi0xMyAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KLQotCSogc3JjL2ZpbGVzLmM6Ci0JT1MvMiBob25vcnMgVE1QRElSIGVudmlyb25tZW50IHZhcmlhYmxlLgotCi0xOTk5LTEyLTEzICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgotCi0JKiBkb2MvYmlzb24udGV4aW5mbzogVHdlYWtlZCBzcGVsbGluZyBhbmQgZ3JhbW1hci4KLQlVcGRhdGVkIElTQk4uCi0JUmVtb3ZlZCByZWZlcmVuY2UgdG8gcHJpY2Ugb2YgcHJpbnRlZCBjb3B5LgotCU1lbnRpb24gQklTT05fU0lNUExFIGFuZCBCSVNPTl9IQUlSWS4KLQotMTk5OS0xMi0xMyAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KLQotCSogY29uZmlndXJlLmluLCBORVdTOgotCUJpc29uIDEuMjkgcmVsZWFzZWQuCi0KLTE5OTktMTAtMjcgIEplc3NlIFRoaWxvICA8anRoaWxvQGdudS5vcmc+Ci0KLQkqIGRvYy8uY3ZzaWdub3JlLCBkb2MvTWFrZWZpbGUuYW0sIGRvYy9yZWZjYXJkLnRleDoKLQlBZGRlZCByZWZlcmVuY2UgY2FyZC4KLQotMTk5OS0wNy0yNiAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KLQotCSogcG8vcnUucG86IEFkZGVkIFJ1c3NpYW4gdHJhbnNsYXRpb24uCi0KLTE5OTktMDctMjYgIEplc3NlIFRoaWxvICA8anRoaWxvQGdudS5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogQWRkZWQgUnVzc2lhbiB0cmFuc2xhdGlvbi4KLQotMTk5OS0wNy0wNiAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KLQotCSogY29uZmlndXJlLmluLCBORVdTLCBSRUFETUU6Ci0JUmVsZWFzZWQgdmVyc2lvbiAxLjI4LgotCi0xOTk5LTA2LTE0ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgotCi0JKiBzcmMvc3lzdGVtLmg6Ci0JU3F1YXNoZWQgcmVkZWZpbml0aW9uIHdhcm5pbmcgb24gc29tZSBzeXN0ZW1zLgotCi0JKiBzcmMvZ2V0YXJncy5jLCBzcmMvTWFrZWZpbGUuYW0sIHNyYy9yZWFkZXIuYywgc3JjL3ZlcnNpb24uYzoKLQlIYXZlIGNvbmZpZ3VyZSBidWlsZCB2ZXJzaW9uIHN0cmluZyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQU5TSSBzdHJpbmcKLQljb25jYXRlbnRhdGlvbi4KLQotMTk5OS0wNi0xNCAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KLQotCSogcG8vUE9URklMRVMuaW46IEdvdCByaWQgb2YgdmVyc2lvbi5jLgotCi0xOTk5LTA2LTE0ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgotCi0JKiBhY2NvbmZpZy5oLCBjb25maWd1cmUuaW46Ci0JSGF2ZSBjb25maWd1cmUgYnVpbGQgdmVyc2lvbiBzdHJpbmcgaW5zdGVhZCBvZiByZWx5aW5nIG9uIEFOU0kgc3RyaW5nCi0JY29uY2F0ZW50YXRpb24uCi0KLTE5OTktMDYtMDggIEplc3NlIFRoaWxvICA8anRoaWxvQGdudS5vcmc+Ci0KLQkqIGRvYy9iaXNvbi4xOgotCURyb3BwZWQgbWVudGlvbiBvZiBgKycgZm9yIGxvbmctbmFtZWQgb3B0aW9ucy4KLQotMTk5OS0wNS0zMCAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KLQotCSogc3JjL2ZpbGVzLmM6IEFkZGVkIDx1bmlzdGQuaD4gZm9yIHVubGluaygpLgotCi0JKiBzcmMvTWFrZWZpbGUuYW0sIHNyYy9zeXN0ZW0uaDoKLQlJMThuIGZpeGVzLgotCi0xOTk5LTA1LTMwICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgotCi0JKiBSRUFETUU6IEFkZGVkIGEgRkFRIGxpc3QuCi0KLQkqIGNvbmZpZ3VyZS5pbiwgYWNjb25maWcuaDoKLQlJMThuIGZpeGVzLgotCi0xOTk5LTA1LTMwICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgotCi0JKiBkb2MvRkFRLCBkb2MvTWFrZWZpbGUuYW06Ci0JQWRkZWQgYSBGQVEgbGlzdC4KLQotMTk5OS0wNS0xOSAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KLQotCSogc3JjL2FsbG9jLmgsIHNyYy9zeW10YWIuaCwgc3JjL3ZlcnNpb24uYzoKLQlQcm90ZWN0ZWQgaW5jbHVzaW9uIG9mICJjb25maWcuaCIgd2l0aCBIQVZFX0NPTkZJR19ILgotCi0xOTk5LTA0LTE4ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgotCi0JKiBzcmMvLmN2c2lnbm9yZSwgc3JjL01ha2VmaWxlLmFtOgotCVJlb3JnYW5pemVkOiBzb3VyY2VzIGluIGBzcmMnLCBkb2N1bWVudGF0aW9uIGluIGBkb2MnLgotCi0JKiBzcmMvbGV4LmMgKGxpdGVyYWxjaGFyKToKLQlmaXhlZCB0aGUgY29kZSBmb3IgZXNjYXBpbmcgZG91YmxlIHF1b3RlcyAodGhhbmtzCi0JSm9uYXRoYW4gQ3ppc255LikKLQotMTk5OS0wNC0xOCAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KLQotCSogcG8vZGUucG8sIHBvL2VzLnBvLCBwby9mci5wbywgcG8vbmwucG8sIHBvL1BPVEZJTEVTLmluOgotCUFkanVzdGVkIHBhdGhzIHRvIHJlZmxlY3QgZGlyZWN0b3J5IHJlb3JnYW5pemF0aW9uLgotCi0xOTk5LTA0LTE4ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgotCi0JKiBkb2MvLmN2c2lnbm9yZSwgZG9jL01ha2VmaWxlLmFtOgotCVJlb3JnYW5pemVkOiBzb3VyY2VzIGluIGBzcmMnLCBkb2N1bWVudGF0aW9uIGluIGBkb2MnLgotCi0xOTk5LTA0LTE4ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgotCi0JKiBjb25maWd1cmUuaW46Ci0JVXBkYXRlZCBBQ19JTklUIGZpbGUgdG8gcmVmbGVjdCBkaXJlY3RvcnkgcmVvcmdhbml6YXRpb24uCi0KLQkqIGNvbmZpZ3VyZS5pbiwgLmN2c2lnbm9yZSwgTWFrZWZpbGUuYW0sIFBPVEZJTEVTLmluOgotCVJlb3JnYW5pemVkOiBzb3VyY2VzIGluIGBzcmMnLCBkb2N1bWVudGF0aW9uIGluIGBkb2MnLgotCi0xOTk5LTA0LTEzICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgotCi0JKiBzcmMvYWxsb2NhdGUuYzoKLQlEb24ndCBkZWNsYXJlIGNhbGxvYygpIGFuZCByZWFsbG9jKCkgaWYgbm90IG5lY2Vzc2FyeS4KLQotMTk5OS0wNC0xMyAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KLQotCSogY29uZmlndXJlLmluLCBhY2NvbmZpZy5oLCBhY2luY2x1ZGUubTQ6Ci0JRG9uJ3QgZGVjbGFyZSBjYWxsb2MoKSBhbmQgcmVhbGxvYygpIGlmIG5vdCBuZWNlc3NhcnkuCi0KLTE5OTktMDMtMjMgIEplc3NlIFRoaWxvICA8anRoaWxvQGdudS5vcmc+Ci0KLQkqIHBvLy5jdnNpZ25vcmU6IEFkZGVkIGkxOG4gc3VwcG9ydC4KLQotMTk5OS0wMy0yMyAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KLQotCSogYWNjb25maWcuaCwgY29uZmlndXJlLmluLCBNYWtlZmlsZS5hbToKLQlBZGRlZCBpMThuIHN1cHBvcnQuCi0KLTE5OTktMDMtMjIgIEplc3NlIFRoaWxvICA8anRoaWxvQGdudS5vcmc+Ci0KLQkqIHNyYy9iaXNvbi5zMTogRml4ZWQgI2xpbmUgbnVtYmVycy4KLQotMTk5OS0wMy0xNSAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KLQotCSogcG8vZXMucG8sIHBvL2ZyLnBvLCBwby9ubC5wbywgcG8vZGUucG86Ci0JQWRkZWQgUE8gZmlsZXMgZnJvbSBUcmFuc2xhdGlvbiBQcm9qZWN0LgotCi0xOTk5LTAzLTAzICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgotCi0JKiBNYWtlZmlsZS5hbToKLQlBZGRlZCBzdXBwb3J0IGZvciBub24tQU5TSSBjb21waWxlcnMgKGFuc2kya25yKS4KLQotMTk5OS0wMi0xNiAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KLQotCSogY29uZmlndXJlLmluOiBCdW1wZWQgdmVyc2lvbiBudW1iZXIgdG8gMS4yNy4KLQotCSogTWFrZWZpbGUuYW06Ci0JQWRkZWQgYGJpc29uLnNpbXBsZScgdG8gbGlzdCBvZiBmaWxlcyByZW1vdmVkIGJ5IGBtYWtlIGRpc3RjbGVhbicuCi0KLTE5OTktMDItMTIgIEplc3NlIFRoaWxvICA8anRoaWxvQGdudS5vcmc+Ci0KLQkqIHNyYy9maWxlcy5jLCBzcmMvZmlsZXMuaDoKLQlEZWZpbmVkIGxvY2F0aW9ucyBvZiBwYXJzZXIgZmlsZXMgaW4gY29uZmlnLmggaW5zdGVhZCBvZiBNYWtlZmlsZS4KLQotMTk5OS0wMi0xMiAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KLQotCSogYWNjb25maWcuaCwgYWNpbmNsdWRlLm00LCBjb25maWd1cmUuaW4sIE1ha2VmaWxlLmFtOgotCURlZmluZWQgbG9jYXRpb25zIG9mIHBhcnNlciBmaWxlcyBpbiBjb25maWcuaCBpbnN0ZWFkIG9mIE1ha2VmaWxlLgotCi0xOTk5LTAyLTA5ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgotCi0JKiBNYWtlZmlsZS5hbToKLQlSZW1vdmVkIGluYXBwcm9wcmlhdGUgdXNlIG9mICQ8IG1hY3JvLgotCi0xOTk5LTAyLTA1ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgotCi0JKiBwby9NYWtlZmlsZS5pbi5pbiwgcG8vUE9URklMRVMuaW46Ci0JQWRkIGBwbycgZGlyZWN0b3J5IHNrZWxldG9uLgotCi0xOTk5LTAxLTI3ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgotCi0JKiBSRUFETUU6IERvY3VtZW50IGhlbHAtYmlzb24gbGlzdC4KLQotCSogY29uZmlndXJlLmluOiBBZGQgY2hlY2sgZm9yIG1rc3RlbXAoKS4KLQotMTk5OS0wMS0yMCAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KLQotCSogc3JjL2NvbmZsaWN0cy5jLCBzcmMvTFIwLmMsIHNyYy9vdXRwdXQuYywgc3JjL3JlYWRlci5jOgotCUh1c2ggYSBmZXcgY29tcGlsZXIgd2FybmluZ3MuCi0KLQkqIHNyYy9maWxlcy5jOgotCUFkZCB0cnljbG9zZSgpLCB3aGljaCB2ZXJpZmllcyB0aGF0IGZjbG9zZSB3YXMgc3VjY2Vzc2Z1bC4KLQlIdXNoIGEgY291cGxlIG9mIGNvbXBpbGVyIHdhcm5pbmdzLgotCi0xOTk5LTAxLTIwICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgotCi0JKiBNYWtlZmlsZS5hbSwgT0NoYW5nZUxvZzoKLQlDaGFuZ2VMb2cgaXMgbm93IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLiAgSW5jbHVkZSB0aGUgb2xkIHZlcnNpb24gYXMKLQlPQ2hhbmdlTG9nLgotCi0xOTk5LTAxLTE0ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgotCi0JKiBzcmMvZ3JhbS5oLCBzcmMvbGFsci5jLCBzcmMvbGV4LmMsIHNyYy9sZXguaCwgc3JjL21hY2hpbmUuaCwgc3JjL21haW4uYywgc3JjL251bGxhYmxlLmMsIHNyYy9vdXRwdXQuYywgc3JjL3ByaW50LmMsIHNyYy9yZWFkZXIuYywgc3JjL3JlZHVjZS5jLCBzcmMvc3RhdGUuaCwgc3JjL3N5bXRhYi5jLCBzcmMvc3ltdGFiLmgsIHNyYy90eXBlcy5oLCBzcmMvdm1zZ2V0YXJncy5jLCBzcmMvd2Fyc2hhbGwuYywgc3JjL2FsbG9jYXRlLmMsIHNyYy9hbGxvYy5oLCBzcmMvYmlzb24uczEsIHNyYy9jbG9zdXJlLmMsIHNyYy9jb25mbGljdHMuYywgc3JjL2Rlcml2ZXMuYywgc3JjL2ZpbGVzLmMsIHNyYy9maWxlcy5oLCBzcmMvZ2V0YXJncy5jLCBzcmMvZ3JhbS5jLCBzcmMvTFIwLmM6Ci0JVXBkYXRlIEZTRiBhZGRyZXNzLgotCi0xOTk5LTAxLTE0ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgotCi0JKiBkb2MvYmlzb24udGV4aW5mbzogRml4IGZvcm1hdHRpbmcgZ2xpdGNoLgotCi0JKiBkb2MvYmlzb24udGV4aW5mbzogVXBkYXRlIEZTRiBhZGRyZXNzLgotCi0xOTk5LTAxLTE0ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgotCi0JKiBhY2NvbmZpZy5oOiBVcGRhdGUgRlNGIGFkZHJlc3MuCi0KLTE5OTktMDEtMDggIEplc3NlIFRoaWxvICA8anRoaWxvQGdudS5vcmc+Ci0KLQkqIHNyYy9zeXN0ZW0uaDoKLQlEb24ndCBkZWZpbmUgUEFDS0FHRSBoZXJlLCBzaW5jZSBjb25maWcuaCBkZWZpbmVzIGl0LgotCi0xOTk4LTEyLTMwICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgotCi0JKiBzcmMvcmVhZGVyLmM6IFVwZGF0ZSBjb3B5cmlnaHQgZGF0ZS4KLQotCSogc3JjL21haW4uYzoKLQlEaXRjaCBzcHJpbnRmIHRvIHN0YXRpY2FsbHktc2l6ZWQgYnVmZmVycyBpbiBmYXRhbC93YXJuIGZ1bmN0aW9ucyBpbgotCWZhdm9yIG9mIG91dHB1dCBkaXJlY3RseSB0byBzdGRlcnIgKGF2b2lkcyBidWZmZXIgb3ZlcnJ1bnMpLgotCi0JKiBzcmMvcmVhZGVyLmM6IFNvbWUgY2hlY2tzIGZvciBwcmVtYXR1cmUgRU9GLgotCi0JKiBzcmMvYWxsb2NhdGUuYywgc3JjL2FsbG9jLmgsIHNyYy9jbG9zdXJlLmMsIHNyYy9jb25mbGljdHMuYywgc3JjL2Rlcml2ZXMuYywgc3JjL2dldGFyZ3MuYywgc3JjL2dyYW0uYywgc3JjL2xhbHIuYywgc3JjL2xleC5jLCBzcmMvTFIwLmMsIHNyYy9tYWluLmMsIHNyYy9udWxsYWJsZS5jLCBzcmMvb3V0cHV0LmMsIHNyYy9wcmludC5jLCBzcmMvcmVkdWNlLmMsIHNyYy9zeW10YWIuYywgc3JjL3N5bXRhYi5oLCBzcmMvd2Fyc2hhbGwuYzoKLQlVc2UgcHJvdG90eXBlcyBpZiB0aGUgY29tcGlsZXIgdW5kZXJzdGFuZHMgdGhlbS4KLQotCSogc3JjL2ZpbGVzLmM6IEhvbm9yIFRNUERJUiBvbiBVbml4IGhvc3RzLgotCVVzZSBwcm90b3R5cGVzIGlmIHRoZSBjb21waWxlciB1bmRlcnN0YW5kcyB0aGVtLgotCi0JKiBzcmMvcmVhZGVyLmM6Ci0JRml4IGEgY291cGxlIG9mIGJ1ZmZlciBvdmVycnVuIGJ1Z3MuCi0JVXNlIHByb3RvdHlwZXMgaWYgdGhlIGNvbXBpbGVyIHVuZGVyc3RhbmRzIHRoZW0uCi0KLQkqIHNyYy9zeXN0ZW0uaDogSW5jbHVkZSB1bmlzdGQuaCBhbmQgY3R5cGUuaC4KLQlVc2UgI2lmZGVmIGluc3RlYWQgb2YgI2lmIGZvciBOTFMgc3ltYm9scy4KLQotMTk5OC0xMi0zMCAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KLQotCSogZG9jL2Jpc29uLnRleGluZm86Ci0JRGVsZXRlIGNvbW1lbnQgImNvbnNpZGVyIHVzaW5nIEBzZXQgZm9yIGVkaXRpb24gbnVtYmVyLCBldGMuLi4iIHNpbmNlCi0Jd2Ugbm93IGFyZSBkb2luZyBzby4KLQotMTk5OC0xMi0zMCAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KLQotCSogY29uZmlndXJlLmluOgotCVVzZSBwcm90b3R5cGVzIGlmIHRoZSBjb21waWxlciB1bmRlcnN0YW5kcyB0aGVtLgotCi0JKiBORVdTOiBEb2N1bWVudCAxLjI2IGhpZ2hsaWdodHMuCi0KLQkqIE1ha2VmaWxlLmFtOiBSZXF1aXJlIEF1dG9tYWtlIDEuMyBvciBsYXRlci4KLQotCSogYWNjb25maWcuaDoKLQlVc2UgcHJvdG90eXBlcyBpZiB0aGUgY29tcGlsZXIgdW5kZXJzdGFuZHMgdGhlbS4KLQotMTk5OC0xMi0yOSAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KLQotCSogc3JjL3ZlcnNpb24uYzoKLQlVc2UgVkVSU0lPTiBzeW1ib2wgZnJvbSBhdXRvbWFrZSBmb3IgdmVyc2lvbiBudW1iZXIuCi0KLTE5OTgtMTItMjkgIEplc3NlIFRoaWxvICA8anRoaWxvQGdudS5vcmc+Ci0KLQkqIGFjY29uZmlnLmgsIGNvbmZpZ3VyZS5pbiwgdmVyc2lvbi5jaW46Ci0JVXNlIFZFUlNJT04gc3ltYm9sIGZyb20gYXV0b21ha2UgZm9yIHZlcnNpb24gbnVtYmVyLgotCi0xOTk4LTExLTI4ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgotCi0JKiBNYWtlZmlsZS5hbToKLQlEaXN0cmlidXRlIG9yaWdpbmFsIHZlcnNpb24gb2Ygc2ltcGxlIHBhcnNlciAoYmlzb24uczEpLCBub3QgYnVpbHQKLQl2ZXJzaW9uIChiaXNvbi5zaW1wbGUpLgotCi0xOTk4LTExLTI4ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgotCi0JKiBkb2MvYmlzb24udGV4aW5mbzogQWRkIGluZm8gZGlyIGVudHJ5LgotCi0JKiBkb2MvYmlzb24udGV4aW5mbzoKLQlMZXQgYXV0b21ha2UgcHV0IHZlcnNpb24gbnVtYmVyIGludG8gZG9jdW1lbnRhdGlvbi4KLQotMTk5OC0xMS0yNiAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KLQotCSogc3JjL2Jpc29uLmNsZCwgc3JjL2J1aWxkLmNvbSwgc3JjL3Ztc2hscC5tYXI6Ci0JQWRkIG5vbi1SQ1MgZmlsZXMgZnJvbSAvZ2QvZ251L2Jpc29uLgotCi0xOTk4LTExLTI2ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgotCi0JKiBkb2MvYmlzb24uMToKLQlEb2N1bWVudCB0aGUgQklTT05fSEFJUlkgYW5kIEJJU09OX1NJTVBMRSB2YXJpYWJsZXMuCi0KLTE5OTgtMTEtMjUgIEplc3NlIFRoaWxvICA8anRoaWxvQGdudS5vcmc+Ci0KLQkqIHNyYy92ZXJzaW9uLmM6IEJ1aWxkIHZlcnNpb24uYyBhdXRvbWF0aWNhbGx5LgotCi0JKiBzcmMvcmVhZGVyLmM6Ci0JRml4IHRva2VuIG51bWJlcmluZyAodXNlZCB0byBzdGFydCBhdCAyNTgsIG5vdCAyNTcpLgotCi0JKiBzcmMvc3lzdGVtLmg6IEluY2x1ZGUgY29uZmlnLmguCi0KLQkqIHNyYy9nZXRhcmdzLmM6IFVwZGF0ZSBidWcgcmVwb3J0IGFkZHJlc3MuCi0KLQkqIHNyYy9hbGxvY2EuYywgc3JjL2dldG9wdDEuYywgc3JjL2dldG9wdC5jLCBzcmMvZ2V0b3B0Lmg6Ci0JR2V0IGxhdGVzdCBjb3BpZXMgb2YgYWxsb2NhLmMsIGdldG9wdC5jLCBnZXRvcHQuaCwgZ2V0b3B0MS5jIGZyb20gZ251Lm9yZy4KLQotMTk5OC0xMS0yNSAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KLQotCSogTWFrZWZpbGUuYW06Ci0JUmVuYW1lIGJpc29uLnNpbXBsZSB0byBiaXNvbi5zMSAoYmlzb24uc2ltcGxlIGlzIHRoZW4gYnVpbHQgZnJvbSBiaXNvbi5zMSkuCi0KLQkqIGNvbmZpZ3VyZS5pbiwgdmVyc2lvbi5jaW46Ci0JQnVpbGQgdmVyc2lvbi5jIGF1dG9tYXRpY2FsbHkuCi0KLQkqIEFVVEhPUlM6IEFkZCBBVVRIT1JTIGZpbGUuCi0KLQkqIFJFQURNRTogVXBkYXRlIGJ1ZyByZXBvcnQgYWRkcmVzcy4KLQotCSogYmlzb24uc2ltcGxlOgotCVJlbmFtZSBiaXNvbi5zaW1wbGUgdG8gYmlzb24uczEgKGJpc29uLnNpbXBsZSBpcyB0aGVuIGJ1aWx0IGZyb20gYmlzb24uczEpLgotCi0JKiBjb25maWd1cmUuaW4sIE1ha2VmaWxlLmFtLCBNYWtlZmlsZS5pbiwgc3RhbXAtaC5pbjoKLQlBZGQgYXV0b21ha2Ugc3R1ZmYuCi0KLTE5OTgtMTEtMjUgIEplc3NlIFRoaWxvICA8anRoaWxvQGdudS5vcmc+Ci0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvOiBDbGVhbiB1cCBzb21lIGZvcm1hdHRpbmcuCi0KLTE5OTgtMDUtMDUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogZG9jL2Jpc29uLnRleGluZm86Ci0JRXhwbGFpbiBiZXR0ZXIgd2h5IHRvIG1ha2UgYSBwdXJlIHBhcnNlci4KLQotMTk5OC0wMS0wNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBzcmMvZmlsZXMuYyAob3BlbmZpbGVzKToKLQlbX1dJTjMyICYmICFfX0NZR1dJTjMyX19dIFVzZSBURU1QIG9yIFRlbXAgdG8KLQlmaW5kIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSwgaWYgcG9zc2libGUuICBEbyBub3QgdW5saW5rIGZpbGVzIHdoaWxlCi0JdGhleSBhcmUgb3Blbi4KLQotMTk5Ny0wOC0yNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBzcmMvcmVhZGVyLmMgKHN0YWNrX29mZnNldDspOgotCUNoYW5nZSBzb21lIHdhcm5pIHRvIHdhcm5zLgotCi0JKiBzcmMvbGV4LmMgKGxpdGVyYWxjaGFyKTogVXNlIHdhcm5zLCBub3Qgd2FybmkuCi0KLTE5OTctMDYtMjggIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogc3JjL2Jpc29uLnMxOiBBZGQgYSBCaXNvbiB2ZXJzaW9uIGNvbW1lbnQuCi0KLQkqIHNyYy9tYWluLmMgKGZhdGFsLCB3YXJuLCBiZXJyb3IpOgotCVVzZSBwcm9ncmFtX25hbWUuCi0KLTE5OTctMDYtMjggIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogTWFrZWZpbGUuaW4gKGJpc29uX3ZlcnNpb24pOiBOZXcgdmFyaWFibGUuCi0JKGRpc3QpOiBVc2UgdGhhdCB2YXJpYWJsZS4KLQkoYmlzb24uczEpOiBTdWJzdGl0dXRlIHRoZSBCaXNvbiB2ZXJzaW9uIGludG8gYmlzb24uc2ltcGxlLgotCi0JKiBiaXNvbi5zaW1wbGU6IEFkZCBhIEJpc29uIHZlcnNpb24gY29tbWVudC4KLQotMTk5Ny0wNi0xOCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBzcmMvbWFpbi5jIChmYXRhbCwgd2FybiwgYmVycm9yKToKLQlNYWtlIGVycm9yIG1lc3NhZ2VzIHN0YW5kYXJkLgotCSh0b29tYW55KTogSW1wcm92ZSBlcnJvciBtZXNzYWdlIHRleHQuCi0KLQkqIHNyYy9MUjAuYywgc3JjL2Nsb3N1cmUuYywgc3JjL2NvbmZsaWN0cy5jLCBzcmMvZGVyaXZlcy5jLCBzcmMvZmlsZXMuYywgc3JjL2xhbHIuYywgc3JjL2xleC5jLCBzcmMvbnVsbGFibGUuYywgc3JjL291dHB1dC5jLCBzcmMvcHJpbnQuYywgc3JjL3JlYWRlci5jLCBzcmMvcmVkdWNlLmMsIHNyYy9zeW10YWIuYzoKLQluZXcuaCByZW5hbWVkIHRvIGFsbG9jLmguCi0KLTE5OTctMDYtMTggIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogTWFrZWZpbGUuaW46IG5ldy5oIHJlbmFtZWQgdG8gYWxsb2MuaC4KLQotMTk5Ny0wNS0yNCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBzcmMvbGV4LmMgKGxpdGVyYWxjaGFyKToKLQlGaXggdGhlIGNvZGUgZm9yIGVzY2FwaW5nIFwsICIgYW5kICcuCi0KLQkobGV4KTogQXZvaWQgdHJvdWJsZSB3aGVuIHRoZXJlIGFyZSBtYW55IGNoYXJzCi0JdG8gZGlzY2FyZCBpbiBhIGNoYXIgbGl0ZXJhbCB3aXRoIGp1c3Qgc2V2ZXJhbCBjaGFycyBpbiBpdC4KLQotMTk5Ny0wNS0xNyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBzcmMvYmlzb24uczE6Ci0JVXNlIG1hbGxvYywgaWYgdXNpbmcgYWxsb2NhIGlzIHRyb3VibGVzb21lLgotCShZWVNUQUNLX1VTRV9BTExPQ0EpOiBOZXcgZmxhZyBtYWNyby4KLQlEZWZpbmUgaXQgZm9yIHNvbWUgc3lzdGVtcyBhbmQgY29tcGlsZXJzLgotCShZWVNUQUNLX0FMTE9DKTogTmV3IG1hY3JvLgotCSh5eXBhcnNlKTogVXNlIFlZU1RBQ0tfQUxMT0MgdG8gYWxsb2NhdGUgc3RhY2suCi0JSWYgaXQgd2FzIG1hbGxvYydkLCBmcmVlIGl0LgotCi0xOTk3LTA1LTE3ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+Ci0KLQkqIGJpc29uLnNpbXBsZToKLQlVc2UgbWFsbG9jLCBpZiB1c2luZyBhbGxvY2EgaXMgdHJvdWJsZXNvbWUuCi0JKFlZU1RBQ0tfVVNFX0FMTE9DQSk6IE5ldyBmbGFnIG1hY3JvLgotCURlZmluZSBpdCBmb3Igc29tZSBzeXN0ZW1zIGFuZCBjb21waWxlcnMuCi0JKFlZU1RBQ0tfQUxMT0MpOiBOZXcgbWFjcm8uCi0JKHl5cGFyc2UpOiBVc2UgWVlTVEFDS19BTExPQyB0byBhbGxvY2F0ZSBzdGFjay4KLQlJZiBpdCB3YXMgbWFsbG9jJ2QsIGZyZWUgaXQuCi0KLTE5OTctMDQtMjMgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogc3JjL2Jpc29uLnMxOgotCShhbGxvY2EpIFtfX2hwdXhdOiBBbHdheXMgZGVmaW5lIGFzIF9fYnVpbHRpbl9hbGxvY2EuCi0KLTE5OTctMDQtMjMgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogYmlzb24uc2ltcGxlOgotCShhbGxvY2EpIFtfX2hwdXhdOiBBbHdheXMgZGVmaW5lIGFzIF9fYnVpbHRpbl9hbGxvY2EuCi0KLTE5OTctMDQtMjIgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogc3JjL2Jpc29uLnMxOgotCVtfX2hwdXhdOiBJbmNsdWRlIGFsbG9jYS5oIChyaWdodCBmb3IgSFBVWCAxMCkKLQlpbnN0ZWFkIG9mIGRlY2xhcmluZyBhbGxvY2EgKHJpZ2h0IGZvciBIUFVYIDkpLgotCi0JKiBzcmMvYmlzb24uczEgKF9feXlfbWVtY3B5KToKLQlEZWNsYXJlIGFyZyBgY291bnQnIGFzIHVuc2lnbmVkIGludC4KLQkoeXlwYXJzZSk6IENhc3QgdGhpcmQgYXJnIHRvIF9feXlfbWVtY3B5IHRvIHVuc2lnbmVkIGludC4KLQotMTk5Ny0wNC0yMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBiaXNvbi5zaW1wbGU6Ci0JW19faHB1eF06IEluY2x1ZGUgYWxsb2NhLmggKHJpZ2h0IGZvciBIUFVYIDEwKQotCWluc3RlYWQgb2YgZGVjbGFyaW5nIGFsbG9jYSAocmlnaHQgZm9yIEhQVVggOSkuCi0KLQkqIGJpc29uLnNpbXBsZSAoX195eV9tZW1jcHkpOgotCURlY2xhcmUgYXJnIGBjb3VudCcgYXMgdW5zaWduZWQgaW50LgotCSh5eXBhcnNlKTogQ2FzdCB0aGlyZCBhcmcgdG8gX195eV9tZW1jcHkgdG8gdW5zaWduZWQgaW50LgotCi0xOTk3LTAxLTAzICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+Ci0KLQkqIHNyYy9hbGxvY2F0ZS5jOiBbX19TVERDX18gb3IgX01TQ19WRVJdOgotCURlY2xhcmUgY2FsbG9jIGFuZCByZWFsbG9jIHRvIHJldHVybiB2b2lkICouCi0KLTE5OTctMDEtMDIgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogc3JjL3N5c3RlbS5oOgotCVtfTVNDX1ZFUl06IEluY2x1ZGUgc3RkbGliLmggYW5kIHByb2Nlc3MuaC4KLQlbX01TQ19WRVJdIChnZXRwaWQpOiBEZWZpbmUgYXMgbWFjcm8tLXRyYW5zbGF0ZSBpdCB0byBfZ2V0cGlkLgotCi0JKiBzcmMvbWFpbi5jIChtYWluKTogUmV0dXJuIEZBSUxVUkUgYXMgYSB2YWx1ZS4KLQkocHJpbnRhYmxlX3ZlcnNpb24pOiBEZWNsYXJlIGFyZyBhcyBpbnQsIG5vdCBjaGFyLgotCi0xOTk3LTAxLTAyICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+Ci0KLQkqIE1ha2VmaWxlLmluIChkaXN0KToKLQlFeHBsaWNpdGx5IGNoZWNrIGZvciBzeW1saW5rcywgYW5kIGNvcHkgdGhlbS4KLQotMTk5Ni0xMi0xOSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBzcmMvZmlsZXMuYzoKLQlbX01TQ19WRVJdIChYUEZJTEUsIFhQRklMRTEpOiBEZWZpbmUsIGlmIG5vdCBhbHJlYWR5IGRlZmluZWQuCi0KLTE5OTYtMTItMTggIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGdudS5vcmc+Ci0KLQkqIHNyYy9iaXNvbi5zMSAoeXlwYXJzZSk6Ci0JSWYgX19HTlVDX18gYW5kIFlZUEFSU0VfUEFSQU0gYXJlIGJvdGggZGVmaW5lZCwKLQlkZWNsYXJlIHl5cGFyc2UgdG8gaGF2ZSBhIHZvaWQgKiBhcmd1bWVudC4KLQotMTk5Ni0xMi0xOCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAZ251Lm9yZz4KLQotCSogYmlzb24uc2ltcGxlICh5eXBhcnNlKToKLQlJZiBfX0dOVUNfXyBhbmQgWVlQQVJTRV9QQVJBTSBhcmUgYm90aCBkZWZpbmVkLAotCWRlY2xhcmUgeXlwYXJzZSB0byBoYXZlIGEgdm9pZCAqIGFyZ3VtZW50LgotCi0xOTk2LTEyLTE3ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+Ci0KLQkqIHNyYy9yZWR1Y2UuYyAobmJpdHMpOiBBZGQgc29tZSBjYXN0cy4KLQotMTk5Ni0wOC0xMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBzcmMvYmlzb24uczE6IFRlc3QgX01TRE9TIGFzIHdlbGwgYXMgX01TRE9TXy4KLQotMTk5Ni0wOC0xMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBiaXNvbi5zaW1wbGU6IFRlc3QgX01TRE9TIGFzIHdlbGwgYXMgX01TRE9TXy4KLQotMTk5Ni0wNy0zMSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBzcmMvYmlzb24uczE6Ci0JW19fc3VuICYmIF9faTM4Nl06IEluY2x1ZGUgYWxsb2NhLmguCi0KLTE5OTYtMDctMzEgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogYmlzb24uc2ltcGxlOgotCVtfX3N1biAmJiBfX2kzODZdOiBJbmNsdWRlIGFsbG9jYS5oLgotCi0xOTk2LTA3LTMwICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+Ci0KLQkqIHNyYy9iaXNvbi5zMTogQ29tbWVudCBjaGFuZ2UuCi0KLQkqIHNyYy9iaXNvbi5zMTogVGVzdCBfTVNET1NfLCBub3QgTVNET1MuCi0KLTE5OTYtMDctMzAgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogYmlzb24uc2ltcGxlOiBDb21tZW50IGNoYW5nZS4KLQotCSogYmlzb24uc2ltcGxlOiBUZXN0IF9NU0RPU18sIG5vdCBNU0RPUy4KLQotMTk5Ni0wNi0wMSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBzcmMvcmVkdWNlLmMsIHNyYy9yZWFkZXIuYywgc3JjL3ByaW50LmMsIHNyYy9vdXRwdXQuYywgc3JjL251bGxhYmxlLmMsIHNyYy9sZXguYywgc3JjL2xhbHIuYywgc3JjL2dldGFyZ3MuYywgc3JjL2Rlcml2ZXMuYywgc3JjL2NvbmZsaWN0cy5jLCBzcmMvY2xvc3VyZS5jLCBzcmMvYWxsb2NhdGUuYzoKLQlJbnNlcnQgYF8nIG1hY3JvIGFyb3VuZCBtYW55IHN0cmluZyBjb25zdGFudHMuCi0KLQkqIHNyYy9tYWluLmM6Ci0JSW5zZXJ0IGBfJyBtYWNybyBhcm91bmQgbWFueSBzdHJpbmcgY29uc3RhbnRzLgotCi0JKG1haW4pOiBDYWxsIHNldGxvY2FsZSwgYmluZHRleHRkb21haW4gYW5kIHRleHRkb21haW4uCi0KLQkqIHNyYy9zeXN0ZW0uaDogW0hBVkVfTE9DQUxFX0hdOiBJbmNsdWRlIGxvY2FsZS5oLgotCVshIEhBVkVfTE9DQUxFX0hdIChzZXRsb2NhbGUpOiBEZWZpbmUgYXMgbm8tb3AuCi0JW0VOQUJMRV9OTFNdOiBJbmNsdWRlIGxpYmludGwuaC4KLQlbRU5BQkxFX05MU10gKGdldHRleHQpOiBEZWZpbmUuCi0JWyEgRU5BQkxFX05MU10gKGJpbnRleHRkb21haW4sIHRleHRkb21haW4sIF8pOiBDb25zb2xhdGlvbiBkZWZpbml0aW9ucy4KLQkoTl8sIFBBQ0tBR0UsIExPQ0FMRURJUik6IE5ldyBtYWNyb3MuCi0KLTE5OTYtMDYtMDEgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogUE9URklMRVMuaW46IE5ldyBmaWxlLgotCi0JKiBNYWtlZmlsZS5pbiAoYWxsb2NhdGUubyk6Ci0JRGVmaW5lIHRhcmdldCBleHBsaWNpdGx5LgotCi0JKiBNYWtlZmlsZS5pbiAoQ0ZMQUdTKTogU2V0IHRvIEBDRkxBR1NALgotCShMREZMQUdTKTogU2V0IHRvIEBMREZMQUdTQC4KLQkoY29uZmlndXJlKTogUnVuIGF1dG9jb25mIG9ubHkgaWYgcHJlY2VkaW5nIGBjZCcgc3VjY2VlZHMuCi0JKGJpc29uLnMxKTogUmVkaXJlY3Qgb3V0cHV0IHRvIHRlbXBvcmFyeSBmaWxlIHRoZW4gbW92ZSB0aGUKLQl0ZW1wb3JhcnkgdG8gdGhlIHRhcmdldCwgcmF0aGVyIHRoYW4gcmVkaXJlY3RpbmcgZGlyZWN0bHkgdG8gYmlzb24uczEuCi0JKGNsZWFuKTogUmVtb3ZlIGNvbmZpZy5zdGF0dXMgYW5kIGNvbmZpZy5sb2cuCi0JKGRpc3RjbGVhbik6IERvbid0IHJlbW92ZSBjb25maWcuc3RhdHVzIGhlcmUuCi0KLTE5OTYtMDUtMTIgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogc3JjL2Jpc29uLnMxOgotCShfX3l5X21lbWNweSkgW19fY3BsdXNwbHVzXTogUmVvcmRlciBkZWNsYXJhdGlvbnMgb2YgdmFyaWFibGVzIGYgYW5kIHQuCi0KLTE5OTYtMDUtMTIgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogYmlzb24uc2ltcGxlOgotCShfX3l5X21lbWNweSkgW19fY3BsdXNwbHVzXTogUmVvcmRlciBkZWNsYXJhdGlvbnMgb2YgdmFyaWFibGVzIGYgYW5kIHQuCi0KLTE5OTYtMDUtMTEgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogc3JjL2Jpc29uLnMxIChfX3l5X21lbWNweSk6Ci0JUmVhbGx5IHJlb3JkZXIgdGhlIGFyZ3MsIGFzIHdhcyBzdXBwb3NlZGx5IGRvbmUgb24gRmViIDE0IDE5OTUuCi0JKHl5cGFyc2UpOiBDYWxscyBjaGFuZ2VkIGFjY29yZGluZ2x5LgotCi0xOTk2LTA1LTExICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+Ci0KLQkqIE1ha2VmaWxlLmluIChkaXN0KTogRG9uJ3QgdXNlICQoc3JjZGlyKS4KLQotCSogYmlzb24uc2ltcGxlIChfX3l5X21lbWNweSk6Ci0JUmVhbGx5IHJlb3JkZXIgdGhlIGFyZ3MsIGFzIHdhcyBzdXBwb3NlZGx5IGRvbmUgb24gRmViIDE0IDE5OTUuCi0JKHl5cGFyc2UpOiBDYWxscyBjaGFuZ2VkIGFjY29yZGluZ2x5LgotCi0xOTk2LTAxLTI3ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+Ci0KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3J1bGVfZGF0YSk6Ci0JVGVzdCBZWUVSUk9SX1ZFUkJPU0UgaW4gdGhlIGNvbmRpdGlvbmFsCi0JYXJvdW5kIHRoZSBkZWZpbml0aW9uIG9mIHR0eW5hbWUuCi0KLTE5OTUtMTItMjkgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogc3JjL2Jpc29uLnMxOgotCUZpeCBsaW5lIG51bWJlcnMgaW4gI2xpbmUgY29tbWFuZHMuCi0KLTE5OTUtMTItMjkgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogYmlzb24uc2ltcGxlOgotCUZpeCBsaW5lIG51bWJlcnMgaW4gI2xpbmUgY29tbWFuZHMuCi0KLTE5OTUtMTItMjcgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogc3JjL2Jpc29uLnMxIChZWVBBUlNFX1BBUkFNX0RFQ0wpOgotCUluIEMrKywgbWFrZSBpdCBhbHdheXMgbnVsbC4KLQkoWVlQQVJTRV9QQVJBTV9BUkcpOiBOZXcgbWFjcm8uCi0JKHl5cGFyc2UpOiBVc2UgWVlQQVJTRV9QQVJBTV9BUkcuCi0KLTE5OTUtMTItMjcgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogYmlzb24uc2ltcGxlIChZWVBBUlNFX1BBUkFNX0RFQ0wpOgotCUluIEMrKywgbWFrZSBpdCBhbHdheXMgbnVsbC4KLQkoWVlQQVJTRV9QQVJBTV9BUkcpOiBOZXcgbWFjcm8uCi0JKHl5cGFyc2UpOiBVc2UgWVlQQVJTRV9QQVJBTV9BUkcuCi0KLTE5OTUtMTEtMjkgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogZG9jL2Jpc29uLnRleGluZm86Ci0JRGVzY3JpYmUgbGl0ZXJhbCBzdHJpbmcgdG9rZW5zLCAlcmF3LCAlbm9fbGluZXMsICV0b2tlbl90YWJsZS4KLQotMTk5NS0xMS0yOSAgRGFuaWVsIEhhZ2VydHkgIDxoYWdAZ251Lm9yZz4KLQotCSogZG9jL2Jpc29uLnRleGluZm86IEZpeGVkIHVwZGF0ZSBkYXRlCi0KLTE5OTUtMTAtMTYgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogc3JjL3ZlcnNpb24uYzogVmVyc2lvbiAxLjI1LgotCi0xOTk1LTEwLTE2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+Ci0KLQkqIE5FV1M6ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKLQotMTk5NS0xMC0xNiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBkb2MvYmlzb24uMSwgZG9jL2Jpc29uLnJuaDoKLQlBZGQgbmV3IG9wdGlvbnMuCi0KLTE5OTUtMTAtMTUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogc3JjL3Ztc2dldGFyZ3MuYywgc3JjL2dldGFyZ3MuYzoKLQlBZGRlZCAtbiwgLWssIGFuZCAtcmF3IHN3aXRjaGVzLgotCShub3BhcnNlcmZsYWcsIHRva251bWZsYWcsIHJhd3Rva251bWZsYWcpOiBOZXcgdmFyaWFibGVzLgotCi0JKiBzcmMvc3ltdGFiLmggKFNBTElBUyk6Ci0JTmV3ICNkZWZpbmUgZm9yIGFkZGluZyBhbGlhc2VzIHRvICV0b2tlbi4KLQkoc3RydWN0IGJ1Y2tldCk6IEFkZGVkIGBhbGlhcycgZmllbGQuCi0KLQkqIHNyYy9yZWR1Y2UuYyAocmVkdWNlX2dyYW1tYXIpOgotCVJldmlzZSBlcnJvciBtZXNzYWdlLgotCShwcmludF9ub3RpY2VzKTogUmVtb3ZlIGZpbmFsIGAuJyBmcm9tIGVycm9yIG1lc3NhZ2UuCi0KLQkqIHNyYy9yZWFkZXIuYyAocmVhZGVyX291dHB1dF95eWxzcCk6Ci0JTmV3IGZ1bmN0aW9uLgotCShyZWFkZ3JhbSk6IFVzZSBgI2lmIDAnIGFyb3VuZCBjb2RlIHRoYXQgYWNjZXB0ZWQgJWNvbW1hbmQKLQlpbnNpZGUgZ3JhbW1hciBydWxlczogIFRoZSBkb2N1bWVudGF0aW9uIGRvZXNuJ3QgYWxsb3cgaXQsCi0JYW5kIGl0IHdpbGwgZmFpbCBzaW5jZSB0aGUgJWNvbW1hbmQgcHJvY2Vzc29ycyBzY2FuIGZvciB0aGUgbmV4dCAlLgotCShwYXJzZV90b2tlbl9kZWNsKTogIEV4dGVuZGVkIHRoZSAldG9rZW4KLQlkZWNsYXJhdGlvbiB0byBhbGxvdyBhIG11bHRpLWNoYXJhY3RlciBzeW1ib2wgYXMgYW4gYWxpYXMuCi0JKHBhcnNlX3Rob25nX2RlY2wpOiBOZXcgZnVuY3Rpb24uCi0JKHJlYWRfZGVjbGFyYXRpb25zKTogQWRkZWQgJXRob25nIGRlY2xhcmF0aW9ucy4KLQkocmVhZF9kZWNsYXJhdGlvbnMpOiBIYW5kbGUgTk9PUCB0byBkZWFsIHdpdGggYWxsb3dpbmcKLQklIGRlY2xhcmF0aW9ucyBhcyBhbm90aGVyIG1lYW5zIHRvIHNwZWNpZnkgdGhlIGZsYWdzLgotCShyZWFkZ3JhbSk6IEFsbG93ICVwcmVjIHByaW9yIHRvIHNlbWFudGljcyBlbWJlZGRlZCBpbiBhIHJ1bGUuCi0JKHNraXBfdG9fY2hhciwgcmVhZF9kZWNsYXJhdGlvbnMsIGNvcHlfZGVmaW5pdGlvbikKLQkocGFyc2VfdG9rZW5fZGVjbCwgcGFyc2Vfc3RhcnRfZGVjbCwgcGFyc2VfdHlwZV9kZWNsKQotCShwYXJzZV9hc3NvY19kZWNsLCBwYXJzZV91bmlvbl9kZWNsLCBwYXJzZV9leHBlY3RfZGVjbCkKLQkoZ2V0X3R5cGVfbmFtZSwgY29weV9ndWFyZCwgY29weV9hY3Rpb24sIHJlYWRncmFtKQotCShnZXRfdHlwZSwgcGFja3N5bWJvbHMpOiAgUmV2aXNlZCBtb3N0IGVycm9yIG1lc3NhZ2VzLgotCUNoYW5nZWQgYGZhdGFsJyB0byBgd2Fybnh4eCcgdG8gYXZvaWQgYWJvcnRpbmcgZm9yIGVycm9yLgotCVJldmlzZWQgYW5kIHVzZSBtdWx0aXBsZSB3YXJueHh4IGZ1bmN0aW9ucyB0byBhdm9pZCB1c2luZyBWQVJBUkdTMS4KLQkocmVhZF9kZWNsYXJhdGlvbnMpOiBJbXByb3ZlIHRoZSBlcnJvciBtZXNzYWdlIGZvcgotCWFuIGludmFsaWQgY2hhcmFjdGVyLiAgRG8gbm90IGFib3J0LgotCShyZWFkX2RlY2xhcmF0aW9ucywgY29weV9ndWFyZCwgY29weV9hY3Rpb24pOiBVc2UKLQlwcmludGFibGVfdmVyc2lvbiB0byBhdm9pZCB1bnByaW50YWJsZSBjaGFyYWN0ZXJzIGluIHByaW50ZWQgb3V0cHV0LgotCShwYXJzZV9leHBlY3RfZGVjbCk6IEVycm9yIGlmIGFyZ3VtZW50IHRvICVleHBlY3QgZXhjZWVkcyAxMCBkaWdpdHMuCi0JKHBhcnNlX3Rva2VuX2RlY2wsIHBhcnNlX2Fzc29jX2RlY2wsIHBhcnNlX3R5cGVfZGVjbCwgZ2V0X3R5cGUpOgotCUFsbG93IHRoZSB0eXBlIG9mIGEgbm9uLXRlcm1pbmFsIGNhbiBiZSBnaXZlbgotCW1vcmUgdGhhbiBvbmNlLCBhcyBsb25nIGFzIGFsbCBzcGVjaWZpY2F0aW9ucyBnaXZlIHRoZSBzYW1lIHR5cGUuCi0KLQkqIHNyYy9vdXRwdXQuYzoKLQkob3V0cHV0X2hlYWRlcnMsIG91dHB1dF90cmFpbGVycywgb3V0cHV0LCBvdXRwdXRfZ3JhbSkKLQkob3V0cHV0X3J1bGVfZGF0YSk6IEltcGxlbWVudCBub3BhcnNlcmZsYWcgdmFyaWFibGUuCi0JSW1wbGVtZW50IHRva251bWZsYWcgdmFyaWFibGUuCi0JKG91dHB1dCk6IENhbGwgcmVhZGVyX291dHB1dF95eWxzcCB0byBvdXRwdXQgTFRZUEVTVFIuCi0KLQkqIHNyYy9tYWluLmMgKG1haW4pOgotCSBJZiByZWFkZXIgc2VlcyBhbiBlcnJvciwgZG9uJ3QgcHJvY2VzcyB0aGUgZ3JhbW1hci4KLQkoZmF0YWxzKTogVXBkYXRlZCB0byBub3QgdXNlIFZBUkFSR1MxLgotCShwcmludGFibGVfdmVyc2lvbiwgaW50X3RvX3N0cmluZywgd2Fybiwgd2FybmksIHdhcm5zLCB3YXJuc3MpCi0JKHdhcm5zc3MpOiBOZXcgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9ucy4gIEF2b2lkIGFib3J0IGZvciBlcnJvci4KLQotCSogc3JjL2xleC5oOgotCUFkZGVkIFRIT05HIGFuZCBOT09QIGZvciBhbGlhcyBwcm9jZXNzaW5nLgotCUFkZGVkIFNFVE9QVCBmb3IgdGhlIG5ldyBjb2RlIHRoYXQgYWxsb3dzIHNldHRpbmcgb3B0aW9ucyB3aXRoICVmbGFncy4KLQotCSogc3JjL2xleC5jOgotCUluY2x1ZGUgZ2V0b3B0LmguICBBZGQgc29tZSBleHRlcm4gZGVjbHMuCi0JKHNhZmVnZXRjKTogTmV3IGZ1bmN0aW9uIHRvIGRlYWwgd2l0aCBFT0YgZ3JhY2VmdWxseS4KLQkobGl0ZXJhbGNoYXIpOyBuZXcgZnVuY3Rpb24gdG8gZGVhbCB3aXRoIHJlYWRpbmcgXCBlc2NhcGVzLgotCShsZXgpOiBVc2UgbGl0ZXJhbGNoYXIuCi0JKGxleCk6IEltcGxlbWVudGVkICIuLi4iIHRva2Vucy4KLQkobGl0ZXJhbGNoYXIsIGxleCwgcGFyc2VfcGVyY2VudF90b2tlbik6IE1hZGUgdG9rZW5idWZmZXIKLQlhbHdheXMgY29udGFpbiB0aGUgdG9rZW4uICBUaGlzIGluY2x1ZGVzIGdyb3dpbmcgdGhlIHRva2VuCi0JYnVmZmVyIHdoaWxlIHJlYWRpbmcgYW4gaW50ZWdlci4KLQkocGFyc2VfcGVyY2VudF90b2tlbik6IFJlcGxhY2VkIGlmLWVsc2Ugc3RhdGVtZW50IHdpdGggcGVyY2VudF90YWJsZS4KLQkocGFyc2VfcGVyY2VudF90b2tlbik6IEFkZGVkICUgZGVjbGFyYXRpb25zIGFzIGFub3RoZXIKLQl3YXkgdG8gc3BlY2lmeSB0aGUgZmxhZ3MgLW4sIC1sLCBhbmQgLXIuICBBbHNvIGFkZGVkIGhvb2tzIGZvcgotCS1kLCAtaywgLXksIC12LCAtdCwgLXAsIC1iLCAtbywgYnV0IGltcGxlbWVudGF0aW9uIHJlcXVpcmVzCi0JbWFqb3IgY2hhbmdlcyB0byBmaWxlcy5jLgotCShsZXgpIFJldGFpbiBpbiB0aGUgaW5jb21pbmcgc3RyZWFtIGEgY2hhcmFjdGVyIGZvbGxvd2luZwotCWFuIGluY29ycmVjdCAnLycuCi0JKHNraXBfd2hpdGVfc3BhY2UsIGxleCk6ICBSZXZpc2VkIG1vc3QgZXJyb3IgbWVzc2FnZXMKLQlhbmQgY2hhbmdlZCBmYXRhbCB0byB3YXJuIHRvIGF2b2lkIGFib3J0aW5nLgotCShwZXJjZW50X3RhYmxlKTogIEFkZGVkICV0aG9uZyBkZWNsYXJhdGlvbnMuCi0KLQkqIHNyYy9ncmFtLmg6IENvbW1lbnQgY2hhbmdlcy4KLQotCSogc3JjL2ZpbGVzLmMgKG9wZW5maWxlcywgb3Blbl9leHRyYV9maWxlcywgZG9uZSk6Ci0JIEFkZCBmYWN0aW9uIGZsYWcKLQlhbmQgYWN0ZmlsZSBmaWxlLiAgSGFuZGxlIG5vcGFyc2VyZmxhZy4gIEJvdGggZm9yIC1uIHN3aXRjaC4KLQotCSogc3JjL2NvbmZsaWN0cy5jIChyZXNvbHZlX3NyX2NvbmZsaWN0KToKLQlSZW1vdmUgdXNlIG9mIGFsbG9jYS4KLQotMTk5NS0wNi0wMSAgSmltIE1leWVyaW5nICA8bWV5ZXJpbmdAZ251Lm9yZz4KLQotCSogZG9jL2Jpc29uLnRleGluZm86ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKLQotMTk5NS0wNS0wNiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBzcmMvYmlzb24uczE6IENvbW1lbnQgY2hhbmdlLgotCi0xOTk1LTA1LTA2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+Ci0KLQkqIGJpc29uLnNpbXBsZTogQ29tbWVudCBjaGFuZ2UuCi0KLTE5OTUtMDUtMDMgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogc3JjL3ZlcnNpb24uYzogVmVyc2lvbiBub3cgMS4yNC4KLQotCSogc3JjL2Jpc29uLnMxOiBDaGFuZ2UgZGlzdHJpYnV0aW9uIHRlcm1zLgotCi0JKiBzcmMvdmVyc2lvbi5jOiBWZXJzaW9uIG5vdyAxLjIzLgotCi0xOTk1LTA1LTAzICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+Ci0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvOgotCVJld3JpdGUgIkNvbmRpdGlvbnMgZm9yIFVzaW5nIEJpc29uIi4KLQlVcGRhdGUgdmVyc2lvbiB0byAxLjI0LgotCi0xOTk1LTA1LTAzICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+Ci0KLQkqIGJpc29uLnNpbXBsZTogQ2hhbmdlIGRpc3RyaWJ1dGlvbiB0ZXJtcy4KLQotMTk5NS0wMi0yMyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBzcmMvZmlsZXMuYzogVGVzdCBfX1ZNU19QT1NJWCBhcyB3ZWxsIGFzIFZNUy4KLQotMTk5NS0wMi0xNCAgSmltIE1leWVyaW5nICA8bWV5ZXJpbmdAZ251Lm9yZz4KLQotCSogc3JjL2Jpc29uLnMxIChfX3l5X21lbWNweSk6Ci0JUmVuYW1lZCBmcm9tIF9feXlfYmNvcHkgdG8gYXZvaWQKLQljb25mdXNpb24uICBSZXZlcnNlIEZST00gYW5kIFRPIGFyZ3VtZW50cyB0byBiZSBjb25zaXN0ZW50IHdpdGgKLQl0aG9zZSBvZiBtZW1jcHkuCi0KLTE5OTUtMDItMTQgIEppbSBNZXllcmluZyAgPG1leWVyaW5nQGdudS5vcmc+Ci0KLQkqIGJpc29uLnNpbXBsZSAoX195eV9tZW1jcHkpOgotCVJlbmFtZWQgZnJvbSBfX3l5X2Jjb3B5IHRvIGF2b2lkCi0JY29uZnVzaW9uLiAgUmV2ZXJzZSBGUk9NIGFuZCBUTyBhcmd1bWVudHMgdG8gYmUgY29uc2lzdGVudCB3aXRoCi0JdGhvc2Ugb2YgbWVtY3B5LgotCi0xOTk0LTExLTEwICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AZ251Lm9yZz4KLQotCSogTkVXUzogcmVmb3JtYXQKLQotCSogTkVXUzogTmV3IGZpbGUuCi0KLQkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOiBJbmNsdWRlIE5FV1MuCi0KLQkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOgotCUluY2x1ZGUgaW5zdGFsbC1zaCwgbm90IGluc3RhbGwuc2guCi0KLQkqIGNvbmZpZ3VyZS5pbjogVXBkYXRlIHRvIEF1dG9jb25mIHYyIG1hY3JvIG5hbWVzLgotCi0xOTk0LTEwLTA1ICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AZ251Lm9yZz4KLQotCSogTWFrZWZpbGUuaW46IGZpeCB0eXBvCi0KLQkqIE1ha2VmaWxlLmluIChwcmVmaXgsIGV4ZWNfcHJlZml4KToKLQlMZXQgY29uZmlndXJlIHNldCB0aGVtLgotCi0xOTk0LTA5LTI4ICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AZ251Lm9yZz4KLQotCSogTWFrZWZpbGUuaW46IFNldCBkYXRhZGlyIHRvICQocHJlZml4KS9zaGFyZS4KLQotMTk5NC0wOS0xNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBzcmMvYmlzb24uczE6Ci0JVXBkYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIEdQTCB2ZXJzaW9uLgotCi0xOTk0LTA5LTE1ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+Ci0KLQkqIGJpc29uLnNpbXBsZToKLQlVcGRhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgR1BMIHZlcnNpb24uCi0KLTE5OTQtMDctMTIgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogc3JjL3JlZHVjZS5jLCBzcmMvcmVhZGVyLmM6Ci0JZW50ZXJlZCBpbnRvIFJDUwotCi0xOTk0LTA1LTA1ICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AZ251Lm9yZz4KLQotCSogTWFrZWZpbGUuaW46IGVudGVyZWQgaW50byBSQ1MKLQotMTk5NC0wMy0yNiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBzcmMvYmlzb24uczE6IGVudGVyZWQgaW50byBSQ1MKLQotMTk5NC0wMy0yNiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBiaXNvbi5zaW1wbGU6IGVudGVyZWQgaW50byBSQ1MKLQotMTk5NC0wMy0yNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBzcmMvbWFpbi5jOiBlbnRlcmVkIGludG8gUkNTCi0KLTE5OTQtMDMtMjQgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogc3JjL2NvbmZsaWN0cy5jOiBlbnRlcmVkIGludG8gUkNTCi0KLTE5OTQtMDEtMDIgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogTWFrZWZpbGUuaW46ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKLQotMTk5My0xMS0yMSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBzcmMvYmlzb24uczE6ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKLQotMTk5My0xMS0yMSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBkb2MvYmlzb24udGV4aW5mbzogZW50ZXJlZCBpbnRvIFJDUwotCi0JKiBkb2MvYmlzb24udGV4aW5mbzogKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKgotCi0xOTkzLTExLTIxICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+Ci0KLQkqIGJpc29uLnNpbXBsZTogKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKgotCi0xOTkzLTEwLTI1ICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AZ251Lm9yZz4KLQotCSogZG9jL2Jpc29uLnRleGluZm86ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKLQotMTk5My0xMC0xOSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBzcmMvYmlzb24uczE6ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKLQotMTk5My0xMC0xOSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBiaXNvbi5zaW1wbGU6ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKLQotMTk5My0xMC0xNCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBzcmMvYmlzb24uczE6ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKLQotMTk5My0xMC0xNCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBiaXNvbi5zaW1wbGU6ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKLQotMTk5My0wOS0xNCAgRGF2aWQgSi4gTWFjS2VuemllICA8ZGptQGdudS5vcmc+Ci0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvOiAqKiogZW1wdHkgbG9nIG1lc3NhZ2UgKioqCi0KLTE5OTMtMDktMTMgIE5vYWggRnJpZWRtYW4gIDxmcmllZG1hbkBnbnUub3JnPgotCi0JKiBNYWtlZmlsZS5pbjogKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKgotCi0xOTkzLTA5LTEwICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+Ci0KLQkqIHNyYy9jb25mbGljdHMuYzogKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKgotCi0JKiBzcmMvc3lzdGVtLmg6IGVudGVyZWQgaW50byBSQ1MKLQotMTk5My0wOS0xMCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBkb2MvYmlzb24uMTogZW50ZXJlZCBpbnRvIFJDUwotCi0xOTkzLTA5LTA2ICBOb2FoIEZyaWVkbWFuICA8ZnJpZWRtYW5AZ251Lm9yZz4KLQotCSogc3JjL3ZlcnNpb24uYzogZW50ZXJlZCBpbnRvIFJDUwotCi0xOTkzLTA5LTA2ICBOb2FoIEZyaWVkbWFuICA8ZnJpZWRtYW5AZ251Lm9yZz4KLQotCSogTWFrZWZpbGUuaW46ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKLQotMTk5My0wNy0zMCAgRGF2aWQgSi4gTWFjS2VuemllICA8ZGptQGdudS5vcmc+Ci0KLQkqIE1ha2VmaWxlLmluOiAqKiogZW1wdHkgbG9nIG1lc3NhZ2UgKioqCi0KLTE5OTMtMDctMjQgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogc3JjL2Jpc29uLnMxOiAqKiogZW1wdHkgbG9nIG1lc3NhZ2UgKioqCi0KLTE5OTMtMDctMjQgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogYmlzb24uc2ltcGxlOiAqKiogZW1wdHkgbG9nIG1lc3NhZ2UgKioqCi0KLTE5OTMtMDctMDggIERhdmlkIEouIE1hY0tlbnppZSAgPGRqbUBnbnUub3JnPgotCi0JKiBNYWtlZmlsZS5pbjogKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKgotCi0xOTkzLTA3LTA0ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+Ci0KLQkqIHNyYy9iaXNvbi5zMTogKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKgotCi0xOTkzLTA3LTA0ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+Ci0KLQkqIGJpc29uLnNpbXBsZTogKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKgotCi0xOTkzLTA2LTI2ICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AZ251Lm9yZz4KLQotCSogc3JjL2dldGFyZ3MuYzogZW50ZXJlZCBpbnRvIFJDUwotCi0xOTkzLTA2LTI2ICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AZ251Lm9yZz4KLQotCSogZG9jL2Jpc29uLnRleGluZm86ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKLQotCSogZG9jL2Jpc29uLjE6IE5ldyBmaWxlLgotCi0xOTkzLTA2LTI1ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+Ci0KLQkqIHNyYy9nZXRhcmdzLmM6IE5ldyBmaWxlLgotCi0xOTkzLTA2LTE2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+Ci0KLQkqIHNyYy9iaXNvbi5zMTogKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKgotCi0xOTkzLTA2LTE2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+Ci0KLQkqIGJpc29uLnNpbXBsZTogKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKgotCi0xOTkzLTA2LTAzICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+Ci0KLQkqIHNyYy9iaXNvbi5zMTogTmV3IGZpbGUuCi0KLTE5OTMtMDYtMDMgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogZG9jL2Jpc29uLnRleGluZm86ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKLQotMTk5My0wNi0wMyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBiaXNvbi5zaW1wbGU6IE5ldyBmaWxlLgotCi0xOTkzLTA1LTE5ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+Ci0KLQkqIGRvYy9iaXNvbi50ZXhpbmZvOiBOZXcgZmlsZS4KLQotMTk5My0wNS0wNyAgTm9haCBGcmllZG1hbiAgPGZyaWVkbWFuQGdudS5vcmc+Ci0KLQkqIE1ha2VmaWxlLmluOiAqKiogZW1wdHkgbG9nIG1lc3NhZ2UgKioqCi0KLTE5OTMtMDQtMjggIE5vYWggRnJpZWRtYW4gIDxmcmllZG1hbkBnbnUub3JnPgotCi0JKiBzcmMvcmVhZGVyLmM6ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKLQotMTk5My0wNC0yMyAgTm9haCBGcmllZG1hbiAgPGZyaWVkbWFuQGdudS5vcmc+Ci0KLQkqIHNyYy9hbGxvYy5oOiBlbnRlcmVkIGludG8gUkNTCi0KLTE5OTMtMDQtMjAgIERhdmlkIEouIE1hY0tlbnppZSAgPGRqbUBnbnUub3JnPgotCi0JKiBzcmMvdmVyc2lvbi5jOiAqKiogZW1wdHkgbG9nIG1lc3NhZ2UgKioqCi0KLQkqIHNyYy9maWxlcy5jLCBzcmMvYWxsb2NhdGUuYzoKLQllbnRlcmVkIGludG8gUkNTCi0KLQkqIHNyYy9yZWFkZXIuYzogKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKgotCi0JKiBzcmMvbGV4LmM6IGVudGVyZWQgaW50byBSQ1MKLQotCSogc3JjL2NvbmZsaWN0cy5jOiBOZXcgZmlsZS4KLQotCSogc3JjL3N5bXRhYi5jOiBlbnRlcmVkIGludG8gUkNTCi0KLQkqIHNyYy9hbGxvYy5oOiBOZXcgZmlsZS4KLQotCSogc3JjL0xSMC5jOiBlbnRlcmVkIGludG8gUkNTCi0KLTE5OTMtMDQtMTggIE5vYWggRnJpZWRtYW4gIDxmcmllZG1hbkBnbnUub3JnPgotCi0JKiBzcmMvcmVhZGVyLmM6IE5ldyBmaWxlLgotCi0JKiBzcmMvdmVyc2lvbi5jOiAqKiogZW1wdHkgbG9nIG1lc3NhZ2UgKioqCi0KLTE5OTMtMDQtMTggIE5vYWggRnJpZWRtYW4gIDxmcmllZG1hbkBnbnUub3JnPgotCi0JKiBNYWtlZmlsZS5pbjogKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKgotCi0xOTkzLTA0LTE3ICBOb2FoIEZyaWVkbWFuICA8ZnJpZWRtYW5AZ251Lm9yZz4KLQotCSogTWFrZWZpbGUuaW46ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKLQotMTk5My0wNC0xNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBzcmMvbWFpbi5jLCBzcmMvZmlsZXMuYzoKLQlOZXcgZmlsZS4KLQotMTk5My0wNC0xNSAgTm9haCBGcmllZG1hbiAgPGZyaWVkbWFuQGdudS5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5pbjogZW50ZXJlZCBpbnRvIFJDUwotCi0JKiBjb25maWd1cmUuaW46ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKLQotCSogY29uZmlndXJlLmluOiBOZXcgZmlsZS4KLQotMTk5My0wNC0xNCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBNYWtlZmlsZS5pbjogTmV3IGZpbGUuCi0KLTE5OTMtMDQtMTMgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogc3JjL3ZlcnNpb24uYzogTmV3IGZpbGUuCi0KLTE5OTMtMDMtMjUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogc3JjL291dHB1dC5jOiBlbnRlcmVkIGludG8gUkNTCi0KLTE5OTItMDktMjUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogY29uZmlndXJlLmJhdDogZW50ZXJlZCBpbnRvIFJDUwotCi0xOTkyLTA2LTIyICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+Ci0KLQkqIHNyYy92bXNnZXRhcmdzLmM6IGVudGVyZWQgaW50byBSQ1MKLQotMTk5Mi0wNi0yMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBkb2MvYmlzb24ucm5oOiBlbnRlcmVkIGludG8gUkNTCi0KLTE5OTItMDQtMjAgIERhdmlkIEouIE1hY0tlbnppZSAgPGRqbUBnbnUub3JnPgotCi0JKiBSRUFETUU6IGVudGVyZWQgaW50byBSQ1MKLQotMTk5Mi0wMS0yMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBzcmMvbWFjaGluZS5oOiBlbnRlcmVkIGludG8gUkNTCi0KLTE5OTEtMTItMjEgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogc3JjL2xhbHIuYywgc3JjL2Nsb3N1cmUuYzoKLQllbnRlcmVkIGludG8gUkNTCi0KLTE5OTEtMTItMjAgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KLQotCSogc3JjL3N0YXRlLmg6IGVudGVyZWQgaW50byBSQ1MKLQotMTk5MS0xMi0xOCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgotCi0JKiBzcmMvcHJpbnQuYywgc3JjL251bGxhYmxlLmMsIHNyYy9kZXJpdmVzLmM6Ci0JZW50ZXJlZCBpbnRvIFJDUwotCi0xOTkxLTExLTAzICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AZ251Lm9yZz4KLQotCSogc3JjL3dhcnNoYWxsLmMsIHNyYy90eXBlcy5oLCBzcmMvc3ltdGFiLmgsIHNyYy9sZXguaCwgc3JjL2dyYW0uYywgc3JjL2dyYW0uaCwgc3JjL2ZpbGVzLmg6Ci0JZW50ZXJlZCBpbnRvIFJDUwotCi0xOTg4LTA5LTA5ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+Ci0KLQkqIHNyYy9iaXNvbi5oYWlyeTogZW50ZXJlZCBpbnRvIFJDUwotCi0xOTg3LTEyLTE2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+Ci0KLQkqIFJFRkVSRU5DRVM6IGVudGVyZWQgaW50byBSQ1MKLQotCi0JLS0tLS0KLQotCUNvcHlyaWdodCAoQykgMTk4NywgMTk4OCwgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwKLQkxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUKLQlTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLQlDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQKLQltb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMKLQlub3RpY2UgYXJlIHByZXNlcnZlZC4KKwltYWludDogZ2V0IGdwbC0zLjAgZnJvbSBnbnVsaWIKKwkqIGJvb3RzdHJhcC5jb25mIChnbnVsaWJfbW9kdWxlcyk6IEFkZCBncGwtMy4wLgorCSogZG9jL2dwbC0zLjAudGV4aTogUmVtb3ZlIGZyb20gdmVyc2lvbiBjb250cm9sLCBub3cgdGhhdAorCXdlIGdldCBpdCB2aWEgZ251bGliLgorCSogZG9jLy5naXRpZ25vcmU6IElnbm9yZSBpdC4KZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy0xOTk4IGIvQ2hhbmdlTG9nLTE5OTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM0ZTJhMwotLS0gL2Rldi9udWxsCisrKyBiL0NoYW5nZUxvZy0xOTk4CkBAIC0wLDAgKzEsMTUwMCBAQAorMTk5OC0wMS0wNCAgSi5KLiB2YW4gZGVyIEhlaWpkZW4gIDxKLkoudmFuZGVySGVpamRlbkBzdHVkZW50LnV0d2VudGUubmw+CisKKwkqIHNyYy9maWxlcy5jIChvcGVuZmlsZXMpIFtfV0lOMzIgJiYgIV9fQ1lHV0lOMzJfX106IFVzZSBURU1QIG9yCisJVGVtcCB0byBmaW5kIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSwgaWYgcG9zc2libGUuICBEbyBub3QgdW5saW5rCisJZmlsZXMgd2hpbGUgdGhleSBhcmUgb3Blbi4KKworMTk5Ny0wOC0yNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Bwc2lsb2Npbi5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL3JlYWRlci5jIChzdGFja19vZmZzZXQ7KTogQ2hhbmdlIHNvbWUgd2FybmkgdG8gd2FybnMuCisKKwkqIHNyYy9sZXguYyAobGl0ZXJhbGNoYXIpOiBVc2Ugd2FybnMsIG5vdCB3YXJuaS4KKworMTk5Ny0wNi0yOCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Bwc2lsb2Npbi5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL2Jpc29uLnNpbXBsZTogQWRkIGEgQmlzb24gdmVyc2lvbiBjb21tZW50LgorCisJKiBNYWtlZmlsZS5pbiAoYmlzb25fdmVyc2lvbik6IE5ldyB2YXJpYWJsZS4KKwkoZGlzdCk6IFVzZSB0aGF0IHZhcmlhYmxlLgorCShiaXNvbi5zMSk6IFN1YnN0aXR1dGUgdGhlIEJpc29uIHZlcnNpb24gaW50byBiaXNvbi5zaW1wbGUuCisKKwkqIHNyYy9tYWluLmMgKGZhdGFsLCB3YXJuLCBiZXJyb3IpOiBVc2UgcHJvZ3JhbV9uYW1lLgorCisxOTk3LTA2LTE4ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHBzaWxvY2luLmdudS5haS5taXQuZWR1PgorCisJKiBNYWtlZmlsZS5pbjogbmV3LmggcmVuYW1lZCB0byBhbGxvYy5oLgorCSogc3JjLyouYzogc3JjL25ldy5oIHJlbmFtZWQgdG8gc3JjL2FsbG9jLmguCisKKwkqIHNyYy9hbGxvYy5oOiBSZW5hbWVkIGZyb20gc3JjL25ldy5oLgorCisxOTk3LTA2LTE1ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHBzaWxvY2luLmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvbWFpbi5jIChmYXRhbCwgd2FybiwgYmVycm9yKTogTWFrZSBlcnJvciBtZXNzYWdlcyBzdGFuZGFyZC4KKwkodG9vbWFueSk6IEltcHJvdmUgZXJyb3IgbWVzc2FnZSB0ZXh0LgorCisxOTk3LTA1LTI0ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHBzaWxvY2luLmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvbGV4LmMgKGxpdGVyYWxjaGFyKTogRml4IHRoZSBjb2RlIGZvciBlc2NhcGluZyBcLCAiIGFuZCAnLgorCisxOTk3LTA1LTIzICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHBzaWxvY2luLmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvbGV4LmMgKGxleCk6IEF2b2lkIHRyb3VibGUgd2hlbiB0aGVyZSBhcmUgbWFueSBjaGFycworCXRvIGRpc2NhcmQgaW4gYSBjaGFyIGxpdGVyYWwgd2l0aCBqdXN0IHNldmVyYWwgY2hhcnMgaW4gaXQuCisKKzE5OTctMDUtMTcgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAcHNpbG9jaW4uZ251LmFpLm1pdC5lZHU+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGU6IFVzZSBtYWxsb2MsIGlmIHVzaW5nIGFsbG9jYSBpcyB0cm91Ymxlc29tZS4KKwkoWVlTVEFDS19VU0VfQUxMT0NBKTogTmV3IGZsYWcgbWFjcm8uCisJRGVmaW5lIGl0IGZvciBzb21lIHN5c3RlbXMgYW5kIGNvbXBpbGVycy4KKwkoWVlTVEFDS19BTExPQyk6IE5ldyBtYWNyby4KKwkoeXlwYXJzZSk6IFVzZSBZWVNUQUNLX0FMTE9DIHRvIGFsbG9jYXRlIHN0YWNrLgorCUlmIGl0IHdhcyBtYWxsb2MnZCwgZnJlZSBpdC4KKworMTk5Ny0wNS0wMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Bwc2lsb2Npbi5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL2Jpc29uLnNpbXBsZSBbX0FJWF06IERvbid0IGluY2x1ZGUgbWFsbG9jLmguCisKKzE5OTctMDQtMjMgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAcHNpbG9jaW4uZ251LmFpLm1pdC5lZHU+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGUgKGFsbG9jYSkgW19faHB1eF06IEFsd2F5cyBkZWZpbmUgYXMKKwlfX2J1aWx0aW5fYWxsb2NhLgorCisxOTk3LTA0LTIyICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHBzaWxvY2luLmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvYmlzb24uc2ltcGxlIChfX3l5X21lbWNweSk6IERlY2xhcmUgYXJnIGBjb3VudCcgYXMgdW5zaWduZWQKKwlpbnQuCisJKHl5cGFyc2UpOiBDYXN0IHRoaXJkIGFyZyB0byBfX3l5X21lbWNweSB0byB1bnNpZ25lZCBpbnQuCisKKwkqIHNyYy9iaXNvbi5zaW1wbGUgKGFsbG9jYSkgW19faHB1eF06IEluY2x1ZGUgYWxsb2NhLmggKHJpZ2h0IGZvcgorCUhQVVggMTApIGluc3RlYWQgb2YgZGVjbGFyaW5nIGFsbG9jYSAocmlnaHQgZm9yIEhQVVggOSkuCisKKzE5OTctMDEtMDIgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZXRoYW5vbC5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL2FsbG9jYXRlLmMgW19fU1REQ19fIG9yIF9NU0NfVkVSXToKKwlEZWNsYXJlIGNhbGxvYyBhbmQgcmVhbGxvYyB0byByZXR1cm4gdm9pZCAqLgorCisJKiBNYWtlZmlsZS5pbiAoZGlzdCk6IEV4cGxpY2l0bHkgY2hlY2sgZm9yIHN5bWxpbmtzLCBhbmQgY29weSB0aGVtLgorCisxOTk2LTEyLTE3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogc3JjL2Jpc29uLnNpbXBsZSAoeXlwYXJzZSk6IElmIF9fR05VQ19fIGFuZCBZWVBBUlNFX1BBUkFNIGFyZQorCWJvdGggZGVmaW5lZCwgZGVjbGFyZSB5eXBhcnNlIHRvIGhhdmUgYSB2b2lkICogYXJndW1lbnQuCisKKzE5OTYtMTItMTcgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAcHNpbG9jaW4uZ251LmFpLm1pdC5lZHU+CisKKwkqIHNyYy9zeXN0ZW0uaCBbX01TQ19WRVJdOiBJbmNsdWRlIHN0ZGxpYi5oIGFuZCBwcm9jZXNzLmguCisJW19NU0NfVkVSXSAoZ2V0cGlkKTogRGVmaW5lIGFzIG1hY3JvLS10cmFuc2xhdGUgaXQgdG8gX2dldHBpZC4KKworCSogc3JjL3JlZHVjZS5jIChuYml0cyk6IEFkZCBzb21lIGNhc3RzLgorCisJKiBzcmMvbWFpbi5jIChtYWluKTogUmV0dXJuIEZBSUxVUkUgYXMgYSB2YWx1ZS4KKwkocHJpbnRhYmxlX3ZlcnNpb24pOiBEZWNsYXJlIGFyZyBhcyBpbnQsIG5vdCBjaGFyLgorCisJKiBzcmMvZmlsZXMuYyBbX01TQ19WRVJdIChYUEZJTEUsIFhQRklMRTEpOiBEZWZpbmUsIGlmIG5vdCBhbHJlYWR5CisJZGVmaW5lZC4KKworMTk5Ni0xMi0xNiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Bwc2lsb2Npbi5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL21haW4uYyAocHJpbnRhYmxlX3ZlcnNpb24pOiBVc2UgdHlwZSBgaW50JyBmb3IgdGhlIGFyZy4KKworMTk5Ni0wOC0xMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Bwc2lsb2Npbi5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL2Jpc29uLnNpbXBsZTogVGVzdCBfTVNET1MgYXMgd2VsbCBhcyBfTVNET1NfLgorCisxOTk2LTA3LTMxICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHBzaWxvY2luLmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvYmlzb24uc2ltcGxlIFtfX3N1biAmJiBfX2kzODZdOiBJbmNsdWRlIGFsbG9jYS5oLgorCisxOTk2LTA3LTMwICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHBzaWxvY2luLmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvYmlzb24uc2ltcGxlOiBUZXN0IF9NU0RPU18sIG5vdCBNU0RPUy4KKworMTk5Ni0wNi0wMSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Bwc2lsb2Npbi5nbnUuYWkubWl0LmVkdT4KKworCSogQWxsIGZpbGVzOiBJbnNlcnQgYF8nIG1hY3JvIGFyb3VuZCBtYW55IHN0cmluZyBjb25zdGFudHMuCisKKwkqIHNyYy9zeXN0ZW0uaCBbSEFWRV9MT0NBTEVfSF06IEluY2x1ZGUgbG9jYWxlLmguCisJWyEgSEFWRV9MT0NBTEVfSF0gKHNldGxvY2FsZSk6IERlZmluZSBhcyBuby1vcC4KKwlbRU5BQkxFX05MU106IEluY2x1ZGUgbGliaW50bC5oLgorCVtFTkFCTEVfTkxTXSAoZ2V0dGV4dCk6IERlZmluZS4KKwlbISBFTkFCTEVfTkxTXSAoYmludGV4dGRvbWFpbiwgdGV4dGRvbWFpbiwgXyk6IENvbnNvbGF0aW9uIGRlZmluaXRpb25zLgorCShOXywgUEFDS0FHRSwgTE9DQUxFRElSKTogTmV3IG1hY3Jvcy4KKworCSogc3JjL21haW4uYyAobWFpbik6IENhbGwgc2V0bG9jYWxlLCBiaW5kdGV4dGRvbWFpbiBhbmQgdGV4dGRvbWFpbi4KKworCSogUE9URklMRVMuaW46IE5ldyBmaWxlLgorCisJKiBNYWtlZmlsZS5pbiAoYWxsb2NhdGUubyk6IERlZmluZSB0YXJnZXQgZXhwbGljaXRseS4KKworMTk5Ni0wNi0wMSAgSmltIE1leWVyaW5nICA8bWV5ZXJpbmdAbmEtbmV0Lm9ybmwuZ292PgorCisJKiBNYWtlZmlsZS5pbiAoQ0ZMQUdTKTogU2V0IHRvIEBDRkxBR1NALgorCShMREZMQUdTKTogU2V0IHRvIEBMREZMQUdTQC4KKwkoY29uZmlndXJlKTogUnVuIGF1dG9jb25mIG9ubHkgaWYgcHJlY2VkaW5nIGBjZCcgc3VjY2VlZHMuCisJKHNyYy9iaXNvbi5zMSk6IFJlZGlyZWN0IG91dHB1dCB0byB0ZW1wb3JhcnkgZmlsZSB0aGVuIG1vdmUgdGhlCisJdGVtcG9yYXJ5IHRvIHRoZSB0YXJnZXQsIHJhdGhlciB0aGFuIHJlZGlyZWN0aW5nIGRpcmVjdGx5IHRvCisJc3JjL2Jpc29uLnMxLgorCShjbGVhbik6IFJlbW92ZSBjb25maWcuc3RhdHVzIGFuZCBjb25maWcubG9nLgorCShkaXN0Y2xlYW4pOiBEb24ndCByZW1vdmUgY29uZmlnLnN0YXR1cyBoZXJlLgorCisxOTk2LTA1LTEyICBKaW0gTWV5ZXJpbmcgIDxtZXllcmluZ0BuYS1uZXQub3JubC5nb3Y+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGUgKF9feXlfbWVtY3B5KSBbX19jcGx1c3BsdXNdOiBSZW9yZGVyIGRlY2xhcmF0aW9ucworCW9mIHZhcmlhYmxlcyBmIGFuZCB0LgorCisxOTk2LTA1LTExICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGRlbGFzeWQuZ251LmFpLm1pdC5lZHU+CisKKwkqIFZlcnNpb24gMS4yNSByZWxlYXNlZC4KKworCSogTWFrZWZpbGUuaW4gKGRpc3QpOiBEb24ndCB1c2UgJChzcmNkaXIpLgorCisJKiBzcmMvYmlzb24uc2ltcGxlIChfX3l5X21lbWNweSk6IFJlYWxseSByZW9yZGVyIHRoZSBhcmdzLCBhcyB3YXMKKwlzdXBwb3NlZGx5IGRvbmUgb24gRmViIDE0IDE5OTUuCisJKHl5cGFyc2UpOiBDYWxscyBjaGFuZ2VkIGFjY29yZGluZ2x5LgorCisxOTk2LTAxLTI0ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3J1bGVfZGF0YSk6IFRlc3QgWVlFUlJPUl9WRVJCT1NFIGluIHRoZQorCWNvbmRpdGlvbmFsIGFyb3VuZCB0aGUgZGVmaW5pdGlvbiBvZiB0dHluYW1lLgorCisxOTk1LTEyLTI4ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGU6IEZpeCBsaW5lIG51bWJlcnMgaW4gI2xpbmUgY29tbWFuZHMuCisKKzE5OTUtMTItMjQgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL2Jpc29uLnNpbXBsZSAoWVlQQVJTRV9QQVJBTV9ERUNMKTogSW4gQysrLCBtYWtlIGl0IGFsd2F5cworCW51bGwuCisJKFlZUEFSU0VfUEFSQU1fQVJHKTogTmV3IG1hY3JvLgorCSh5eXBhcnNlKTogVXNlIFlZUEFSU0VfUEFSQU1fQVJHLgorCisxOTk1LTEwLTE1ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIHNyYy92ZXJzaW9uLmM6IFZlcnNpb24gbm93IDEuMjUuCisKKwkqIHNyYy9tYWluLmMgKHdhcm4pOiBTZXQgYGZhaWx1cmUnLgorCisxOTk1LTA4LTAxICAgV2lsZnJlZCBKLiBIYW5zZW4gIDx3amgrQGNtdS5lZHU+CisKKwkqIHNyYy9iaXNvbi5jbGQsIHNyYy9nZXRhcmdzLmMsIHNyYy92bXNnZXRhcmdzLmM6IEFkZGVkIC1uLCAtaywKKwlhbmQgLXJhdyBzd2l0Y2hlcy4KKwkobm9wYXJzZXJmbGFnLCB0b2tudW1mbGFnLCByYXd0b2tudW1mbGFnKTogTmV3IHZhcmlhYmxlcy4KKworCSogc3JjL2NvbmZsaWN0cy5jIChyZXNvbHZlX3NyX2NvbmZsaWN0KTogUmVtb3ZlIHVzZSBvZiBhbGxvY2EuCisKKwkqIHNyYy9maWxlcy5jIChvcGVuZmlsZXMsIG9wZW5fZXh0cmFfZmlsZXMsIGRvbmUpOiAgQWRkIGZhY3Rpb24gZmxhZworCWFuZCBhY3RmaWxlIGZpbGUuICBIYW5kbGUgbm9wYXJzZXJmbGFnLiAgQm90aCBmb3IgLW4gc3dpdGNoLgorCisJKiBzcmMvbGV4LmM6IEluY2x1ZGUgZ2V0b3B0LmguICBBZGQgc29tZSBleHRlcm4gZGVjbHMuCisJKHNhZmVnZXRjKTogTmV3IGZ1bmN0aW9uIHRvIGRlYWwgd2l0aCBFT0YgZ3JhY2VmdWxseS4KKwkobGl0ZXJhbGNoYXIpOyBuZXcgZnVuY3Rpb24gdG8gZGVhbCB3aXRoIHJlYWRpbmcgXCBlc2NhcGVzLgorCShsZXgpOiBVc2UgbGl0ZXJhbGNoYXIuCisJKGxleCk6IEltcGxlbWVudGVkICIuLi4iIHRva2Vucy4KKwkobGl0ZXJhbGNoYXIsIGxleCwgcGFyc2VfcGVyY2VudF90b2tlbik6IE1hZGUgdG9rZW5idWZmZXIKKwlhbHdheXMgY29udGFpbiB0aGUgdG9rZW4uICBUaGlzIGluY2x1ZGVzIGdyb3dpbmcgdGhlIHRva2VuCisJYnVmZmVyIHdoaWxlIHJlYWRpbmcgYW4gaW50ZWdlci4KKwkocGFyc2VfcGVyY2VudF90b2tlbik6IFJlcGxhY2VkIGlmLWVsc2Ugc3RhdGVtZW50IHdpdGggcGVyY2VudF90YWJsZS4KKwkocGFyc2VfcGVyY2VudF90b2tlbik6IEFkZGVkICUgZGVjbGFyYXRpb25zIGFzIGFub3RoZXIKKwl3YXkgdG8gc3BlY2lmeSB0aGUgZmxhZ3MgLW4sIC1sLCBhbmQgLXIuICBBbHNvIGFkZGVkIGhvb2tzIGZvcgorCS1kLCAtaywgLXksIC12LCAtdCwgLXAsIC1iLCAtbywgYnV0IGltcGxlbWVudGF0aW9uIHJlcXVpcmVzCisJbWFqb3IgY2hhbmdlcyB0byBzcmMvZmlsZXMuYy4KKwkobGV4KSBSZXRhaW4gaW4gdGhlIGluY29taW5nIHN0cmVhbSBhIGNoYXJhY3RlciBmb2xsb3dpbmcKKwlhbiBpbmNvcnJlY3QgJy8nLgorCShza2lwX3doaXRlX3NwYWNlLCBsZXgpOiAgUmV2aXNlZCBtb3N0IGVycm9yIG1lc3NhZ2VzCisJYW5kIGNoYW5nZWQgZmF0YWwgdG8gd2FybiB0byBhdm9pZCBhYm9ydGluZy4KKwkocGVyY2VudF90YWJsZSk6ICBBZGRlZCAldGhvbmcgZGVjbGFyYXRpb25zLgorCisJKiBzcmMvbGV4Lmg6IEFkZGVkIFRIT05HIGFuZCBOT09QIGZvciBhbGlhcyBwcm9jZXNzaW5nLgorCUFkZGVkIFNFVE9QVCBmb3IgdGhlIG5ldyBjb2RlIHRoYXQgYWxsb3dzIHNldHRpbmcgb3B0aW9ucyB3aXRoICVmbGFncy4KKworCSogc3JjL21haW4uYyAobWFpbik6IElmIHJlYWRlciBzZWVzIGFuIGVycm9yLCBkb24ndCBwcm9jZXNzIHRoZQorCWdyYW1tYXIuCisJKGZhdGFscyk6IFVwZGF0ZWQgdG8gbm90IHVzZSBWQVJBUkdTMS4KKwkocHJpbnRhYmxlX3ZlcnNpb24sIGludF90b19zdHJpbmcsIHdhcm4sIHdhcm5pLCB3YXJucywgd2FybnNzKQorCSh3YXJuc3NzKTogTmV3IGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbnMuICBBdm9pZCBhYm9ydCBmb3IgZXJyb3IuCisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X2hlYWRlcnMsIG91dHB1dF90cmFpbGVycywgb3V0cHV0LCBvdXRwdXRfZ3JhbSkKKwkob3V0cHV0X3J1bGVfZGF0YSk6IEltcGxlbWVudCBub3BhcnNlcmZsYWcgdmFyaWFibGUuCisJSW1wbGVtZW50IHRva251bWZsYWcgdmFyaWFibGUuCisJKG91dHB1dCk6IENhbGwgcmVhZGVyX291dHB1dF95eWxzcCB0byBvdXRwdXQgTFRZUEVTVFIuCisKKwkqIHNyYy9yZWFkZXIuYyAocmVhZGVyX291dHB1dF95eWxzcCk6IE5ldyBmdW5jdGlvbi4KKwkocmVhZGdyYW0pOiBVc2UgYCNpZiAwJyBhcm91bmQgY29kZSB0aGF0IGFjY2VwdGVkICVjb21tYW5kIGluc2lkZQorCWdyYW1tYXIgcnVsZXM6IFRoZSBkb2N1bWVudGF0aW9uIGRvZXNuJ3QgYWxsb3cgaXQsIGFuZCBpdCB3aWxsCisJZmFpbCBzaW5jZSB0aGUgJWNvbW1hbmQgcHJvY2Vzc29ycyBzY2FuIGZvciB0aGUgbmV4dCAlLgorCShwYXJzZV90b2tlbl9kZWNsKTogRXh0ZW5kZWQgdGhlICV0b2tlbiBkZWNsYXJhdGlvbiB0byBhbGxvdyBhCisJbXVsdGktY2hhcmFjdGVyIHN5bWJvbCBhcyBhbiBhbGlhcy4KKwkocGFyc2VfdGhvbmdfZGVjbCk6IE5ldyBmdW5jdGlvbi4KKwkocmVhZF9kZWNsYXJhdGlvbnMpOiBBZGRlZCAldGhvbmcgZGVjbGFyYXRpb25zLgorCShyZWFkX2RlY2xhcmF0aW9ucyk6IEhhbmRsZSBOT09QIHRvIGRlYWwgd2l0aCBhbGxvd2luZyAlCisJZGVjbGFyYXRpb25zIGFzIGFub3RoZXIgbWVhbnMgdG8gc3BlY2lmeSB0aGUgZmxhZ3MuCisJKHJlYWRncmFtKTogQWxsb3cgJXByZWMgcHJpb3IgdG8gc2VtYW50aWNzIGVtYmVkZGVkIGluIGEgcnVsZS4KKwkoc2tpcF90b19jaGFyLCByZWFkX2RlY2xhcmF0aW9ucywgY29weV9kZWZpbml0aW9uKQorCShwYXJzZV90b2tlbl9kZWNsLCBwYXJzZV9zdGFydF9kZWNsLCBwYXJzZV90eXBlX2RlY2wpCisJKHBhcnNlX2Fzc29jX2RlY2wsIHBhcnNlX3VuaW9uX2RlY2wsIHBhcnNlX2V4cGVjdF9kZWNsKQorCShnZXRfdHlwZV9uYW1lLCBjb3B5X2d1YXJkLCBjb3B5X2FjdGlvbiwgcmVhZGdyYW0pCisJKGdldF90eXBlLCBwYWNrc3ltYm9scyk6IFJldmlzZWQgbW9zdCBlcnJvciBtZXNzYWdlcy4gIENoYW5nZWQKKwlgZmF0YWwnIHRvIGB3YXJueHh4JyB0byBhdm9pZCBhYm9ydGluZyBmb3IgZXJyb3IuICBSZXZpc2VkIGFuZCB1c2UKKwltdWx0aXBsZSB3YXJueHh4IGZ1bmN0aW9ucyB0byBhdm9pZCB1c2luZyBWQVJBUkdTMS4KKwkocmVhZF9kZWNsYXJhdGlvbnMpOiBJbXByb3ZlIHRoZSBlcnJvciBtZXNzYWdlIGZvciBhbiBpbnZhbGlkCisJY2hhcmFjdGVyLiAgRG8gbm90IGFib3J0LgorCShyZWFkX2RlY2xhcmF0aW9ucywgY29weV9ndWFyZCwgY29weV9hY3Rpb24pOiBVc2UKKwlwcmludGFibGVfdmVyc2lvbiB0byBhdm9pZCB1bnByaW50YWJsZSBjaGFyYWN0ZXJzIGluIHByaW50ZWQKKwlvdXRwdXQuCisJKHBhcnNlX2V4cGVjdF9kZWNsKTogRXJyb3IgaWYgYXJndW1lbnQgdG8gJWV4cGVjdCBleGNlZWRzIDEwCisJZGlnaXRzLgorCShwYXJzZV90b2tlbl9kZWNsLCBwYXJzZV9hc3NvY19kZWNsLCBwYXJzZV90eXBlX2RlY2wsIGdldF90eXBlKToKKwlBbGxvdyB0aGUgdHlwZSBvZiBhIG5vbi10ZXJtaW5hbCBjYW4gYmUgZ2l2ZW4gbW9yZSB0aGFuIG9uY2UsIGFzCisJbG9uZyBhcyBhbGwgc3BlY2lmaWNhdGlvbnMgZ2l2ZSB0aGUgc2FtZSB0eXBlLgorCisJKiBzcmMvcmVkdWNlLmMgKHJlZHVjZV9ncmFtbWFyKTogUmV2aXNlIGFuIGVycm9yIG1lc3NhZ2UuCisJKHByaW50X25vdGljZXMpOiBSZW1vdmUgZmluYWwgYC4nIGZyb20gZXJyb3IgbWVzc2FnZS4KKworCSogc3JjL3N5bXRhYi5oIChTQUxJQVMpOiBOZXcgI2RlZmluZSBmb3IgYWRkaW5nIGFsaWFzZXMgdG8gJXRva2VuLgorCShzdHJ1Y3QgYnVja2V0KTogQWRkZWQgYGFsaWFzJyBmaWVsZC4KKworMTk5NS0wNS0wMyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvYmlzb24uc2ltcGxlOiBDaGFuZ2UgZGlzdHJpYnV0aW9uIHRlcm1zLgorCisJKiBzcmMvdmVyc2lvbi5jOiBWZXJzaW9uIG5vdyAxLjIzLiAgTm8sIDEuMjQuCisKKzE5OTUtMDItMjMgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL2ZpbGVzLmM6IFRlc3QgX19WTVNfUE9TSVggYXMgd2VsbCBhcyBWTVMuCisKKzE5OTUtMDItMTQgIEppbSBNZXllcmluZyA8bWV5ZXJpbmdAY29tY28uY29tPgorCisJKiBzcmMvYmlzb24uc2ltcGxlIChfX3l5X21lbWNweSk6IFJlbmFtZWQgZnJvbSBfX3l5X2Jjb3B5IHRvIGF2b2lkCisJY29uZnVzaW9uLiAgUmV2ZXJzZSBGUk9NIGFuZCBUTyBhcmd1bWVudHMgdG8gYmUgY29uc2lzdGVudCB3aXRoCisJdGhvc2Ugb2YgbWVtY3B5LgorCisxOTk0LTExLTEwICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AZHVhbGl0eS5nbnUuYWkubWl0LmVkdT4KKworCSogTWFrZWZpbGUuaW4gKERJU1RGSUxFUyk6IEluY2x1ZGUgaW5zdGFsbC1zaCwgbm90IGluc3RhbGwuc2guCisJSW5jbHVkZSBORVdTLgorCisJKiBjb25maWd1cmUuaW46IFVwZGF0ZSB0byBBdXRvY29uZiB2MiBtYWNybyBuYW1lcy4KKworMTk5NC0xMC0wNCAgRGF2aWQgSi4gTWFjS2VuemllICA8ZGptQGR1YWxpdHkuZ251LmFpLm1pdC5lZHU+CisKKwkqIE1ha2VmaWxlLmluIChwcmVmaXgsIGV4ZWNfcHJlZml4KTogTGV0IGNvbmZpZ3VyZSBzZXQgdGhlbS4KKworMTk5NC0wOS0yOCAgRGF2aWQgSi4gTWFjS2VuemllICA8ZGptQGR1YWxpdHkuZ251LmFpLm1pdC5lZHU+CisKKwkqIE1ha2VmaWxlLmluOiBTZXQgZGF0YWRpciB0byAkKHByZWZpeCkvc2hhcmUuCisKKzE5OTQtMDctMTIgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL3JlYWRlci5jIChyZWFkZXIpOiBSZW5hbWUgdW5kZWZpbmVkLXRva2VuIHRva2VuIHRvCisJYCR1bmRlZmluZWQuJy4KKworMTk5NC0wNS0wNSAgRGF2aWQgSi4gTWFjS2VuemllICA8ZGptQG51dHJpbWF0LmdudS5haS5taXQuZWR1PgorCisJKiBNYWtlZmlsZS5pbiAoRElTVEZJTEVTKTogQWRkIGluc3RhbGwuc2guCisJKGluc3RhbGwpOiBSZW1vdmUgY2htb2QgY29tbWFuZHMuCisKKzE5OTQtMDMtMjYgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL2Jpc29uLnNpbXBsZTogRml4ICNsaW5lIGNvbW1hbmRzLgorCisxOTk0LTAzLTI0ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIHNyYy9jb25mbGljdHMuYyAocHJpbnRfcmVkdWN0aW9ucyk6IEluY3JlbWVudCBib3RoIGZwMSBhbmQgZnAyCisJd2hpbGUgcHJpbnRpbmcgcmVkdWN0aW9ucyBpbiBtdWx0aS1ydWxlIGNhc2UuCisKKzE5OTQtMDEtMDIgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogTWFrZWZpbGUuaW4gKExERkxBR1MpOiBNYWtlIGl0IGVtcHR5IGJ5IGRlZmF1bHQuCisJKGJpc29uKTogVXNlIENGTEFHUy4KKworMTk5My0xMS0yMSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvYmlzb24uc2ltcGxlIChZWUxFWCk6IFRha2Ugbm90aWNlIG9mIFlZTEVYX1BBUkFNLgorCisxOTkzLTEwLTE4ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGUgKFlZUEFSU0VfUEFSQU1fREVDTCk6IEFsd2F5cyBkZWZpbmUgdGhpcy4KKworMTk5My0xMC0xNCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvYmlzb24uc2ltcGxlICh5eXBhcnNlKTogU3VwcG9ydCBZWVBBUlNFX1BBUkFNLgorCisxOTkzLTA5LTEzICBOb2FoIEZyaWVkbWFuICA8ZnJpZWRtYW5AbnV0cmltYXQuZ251LmFpLm1pdC5lZHU+CisKKwkqIE1ha2VmaWxlLmluIChjaGVjayk6IE5ldyB0YXJnZXQuCisKKzE5OTMtMDktMTAgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL2NvbmZsaWN0cy5jIChhbGxvY2EpOiAjdW5kZWYgYmVmb3JlIGRlZmluaW5nLgorCisJKiBzcmMvc3lzdGVtLmggKGJjb3B5KTogRG9uJ3QgZGVmaW5lIGlmIGFscmVhZHkgZGVmaW5lZC4KKworMTk5My0wOS0wNiAgTm9haCBGcmllZG1hbiAgPGZyaWVkbWFuQG51dHJpbWF0LmdudS5haS5taXQuZWR1PgorCisJKiBWZXJzaW9uIDEuMjIgcmVsZWFzZWQuCisKKwkqIG1raW5zdGFsbGRpcnM6IE5ldyBmaWxlLgorCisJKiBNYWtlZmlsZS5pbiAoZGlzdCk6IFVzZSAuZ3ogZm9yIGV4dGVuc2lvbiwgbm90IC56LgorCShESVNURklMRVMpOiBOZXcgdmFyaWFibGUuCisJKGRpc3QpOiBVc2UgaXQgaW5zdGVhZCBvZiBleHBsaWNpdCBmaWxlIGxpc3QuCisJVHJ5IHRvIGxpbmsgZWFjaCBmaWxlIHNlcGFyYXRlbHksIHRoZW4gY29weSBmaWxlIGlmIGxuIGZhaWxzLgorCShpbnN0YWxsZGlycyk6IFVzZSBta2luc3RhbGxkaXJzIHNjcmlwdC4KKworMTk5My0wNy0yOSAgRGF2aWQgSi4gTWFjS2VuemllICA8ZGptQHdvb2t1bXouZ251LmFpLm1pdC5lZHU+CisKKwkqIE1ha2VmaWxlLmluIChjb25maWcuc3RhdHVzKTogUnVuIGNvbmZpZy5zdGF0dXMgLS1yZWNoZWNrLCBub3QKKwljb25maWd1cmUsIHRvIGdldCB0aGUgcmlnaHQgYXJncyBwYXNzZWQuCisKKzE5OTMtMDctMjQgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL2Jpc29uLnNpbXBsZSAoeXlwYXJzZSk6IEluaXQgeXljaGFyMSB0byBhdm9pZCB3YXJuaW5nLgorCisxOTkzLTA3LTA0ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGUgKHl5cGFyc2UpOiBEb24ndCBzZXQgeXl2YWwgd2hlbiB5eWxlbiBpcyAwLgorCisxOTkzLTA2LTI2ICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1Ad29va3Vtei5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL2dldGFyZ3MuYyAoZ2V0YXJncyk6IEV4aXQgYWZ0ZXIgcHJpbnRpbmcgdGhlIHZlcnNpb24gbnVtYmVyLgorCUFkZCAtLWhlbHAgYW5kIC1oIG9wdGlvbnMuCisJKHVzYWdlKTogTmV3IGZ1bmN0aW9uLgorCisxOTkzLTA2LTI1ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIHNyYy9nZXRhcmdzLmMgKGxvbmdvcHRzKTogQWxsb3cgYG91dHB1dCcgYXMgYW4gYWx0ZXJuYXRpdmUuCisKKzE5OTMtMDYtMTYgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL2Jpc29uLnNpbXBsZSAoeXlwYXJzZSk6IENvbmRpdGlvbmFsaXplIHRoZSBlbnRpcmUgY2FsbCB0bworCXl5b3ZlcmZsb3csIG5vdCBqdXN0IHR3byBhcmd1bWVudHMgaW4gaXQuCisKKzE5OTMtMDYtMDMgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL2Jpc29uLnNpbXBsZSBbX19ocHV4XSAoYWxsb2NhKTogRG9uJ3Qgc3BlY2lmeSBhcmcgdHlwZXMuCisKKzE5OTMtMDUtMDcgIE5vYWggRnJpZWRtYW4gIDxmcmllZG1hbkBudXRyaW1hdC5nbnUuYWkubWl0LmVkdT4KKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwpOiBEZXBlbmQgb24gYHVuaW5zdGFsbCcgYW5kIGBpbnN0YWxsZGlycycuCisJKGluc3RhbGxkaXJzKTogTmV3IHRhcmdldC4KKworMTk5My0wNC0yOCAgTm9haCBGcmllZG1hbiAgPGZyaWVkbWFuQG51dHJpbWF0LmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvcmVhZGVyLmM6ICBSZW1vdmUgZGVjbGFyYXRpb24gb2YgYXRvaS4KKworMTk5My0wNC0yMyAgTm9haCBGcmllZG1hbiAgPGZyaWVkbWFuQG51dHJpbWF0LmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvbmV3LmggWyFfX1NURENfX10gKEZSRUUpOiBDaGVjayB4ICE9IDAuCisJTWFrZSBleHByIHRvIGNhbGwgYGZyZWUnIGV2YWx1YXRlIHRvIDAuCisKKzE5OTMtMDQtMjAgIERhdmlkIEouIE1hY0tlbnppZSAgPGRqbUBrcm9wb3RraW4uZ251LmFpLm1pdC5lZHU+CisKKwkqIHNyYy9maWxlcy5jIFtNU0RPU106IFVzZSB4bWFsbG9jLCBub3QgbWFsbG9jLgorCSogc3JjL2FsbG9jYXRlLmMgKHhtYWxsb2MpOiBSZW5hbWVkIGZyb20gbWFsbG9jYXRlLiAgUmVtb3ZlIG9sZAorCXdyYXBwZXIuCisJKiBzcmMvY29uZmxpY3RzLmMsIHNyYy9zeW10YWIuYywgc3JjL2ZpbGVzLmMsIHNyYy9MUjAuYywKKwlzcmMvbmV3Lmg6IENoYW5nZSBjYWxsZXJzLgorCSogc3JjL2FsbG9jYXRlLmMgKHhyZWFsbG9jKTogTmV3IGZ1bmN0aW9uLgorCSogc3JjL25ldy5oOiBEZWNsYXJlIGl0LgorCSogc3JjL2xleC5jLCBzcmMvcmVhZGVyLmM6IFVzZSBpdC4KKworMTk5My0wNC0xOCAgTm9haCBGcmllZG1hbiAgPGZyaWVkbWFuQG51dHJpbWF0LmdudS5haS5taXQuZWR1PgorCisJKiBWZXJzaW9uIDEuMjEgcmVsZWFzZWQuCisKKwkqIHNyYy9yZWFkZXIuYyA6IERvbid0IGRlY2xhcmUgYHJlYWxsb2MnLgorCisJKiBNYWtlZmlsZS5pbiAoYmlzb24uczEpOiB1c2UgYHJtIC1mJyBzaW5jZSBpdCdzIHF1aWV0ZXIuCisJKGRpc3QpOiBtYWtlIGd6aXBwZWQgdGFyIGZpbGUuCisKKzE5OTMtMDQtMTYgIE5vYWggRnJpZWRtYW4gIDxmcmllZG1hbkBudXRyaW1hdC5nbnUuYWkubWl0LmVkdT4KKworCSogTWFrZWZpbGUuaW4gKE1ha2VmaWxlLCBjb25maWcuc3RhdHVzLCBjb25maWd1cmUpOiBOZXcgdGFyZ2V0cy4KKworMTk5My0wNC0xNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvbWFpbi5jOiBEb24ndCBkZWNsYXJlIGBhYm9ydCcuCisKKwkqIHNyYy9maWxlcy5jOiBEb24ndCBkZWNsYXJlIGBleGl0Jy4KKworMTk5My0wNC0xNSAgTm9haCBGcmllZG1hbiAgPGZyaWVkbWFuQG51dHJpbWF0LmdudS5haS5taXQuZWR1PgorCisJKiBjb25maWd1cmUuaW46IEFkZCBBQ19DT05TVC4KKworMTk5My0wNC0xNCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBNYWtlZmlsZS5pbiAoYWxsKTogRGVwZW5kIG9uIGJpc29uLnMxLgorCisxOTkzLTA0LTEzICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIFZlcnNpb24gMS4yMCByZWxlYXNlZC4KKworMTk5My0wMy0yNCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0B3b29rdW16LmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9oZWFkZXJzKTogUmVuYW1lIHl5bmVycnMgaWYgLXAuCisKKzE5OTMtMDMtMTggIE5vYWggRnJpZWRtYW4gIDxmcmllZG1hbkBudXRyaW1hdC5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL3N5c3RlbS5oOiBEb24ndCB0cnkgdG8gaW5jbHVkZSBzdGRsaWIuaCB1bmxlc3MgSEFWRV9TVERMSUJfSAorCWlzIGRlZmluZWQuCisKKwkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIHN0ZGxpYi5oLgorCisxOTkzLTAzLTE3ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGUgW19faHB1eCwgbm90IF9fR05VQ19fXTogRGVjbGFyZSBhbGxvY2EuCisJKHl5cGFyc2UpOiBXaGVuIHByaW50aW5nIHRoZSBleHBlY3RlZCB0b2tlbiB0eXBlcyBmb3IgYW4gZXJyb3IsCisJQXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbiB5eWNoZWNrIGFuZCB5eXRuYW1lLgorCisxOTkzLTAzLTEzICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIE1ha2VmaWxlLmluIChmaWxlcy5vLCAuYy5vKTogUHV0IENQUEZMQUdTIGFuZCBDRkxBR1MgbGFzdC4KKworMTk5My0wMy0wMSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvYmlzb24uc2ltcGxlOiBUZXN0IF9fc2dpIGxpa2UgX19zcGFyYy4KKworMTk5My0wMi0xNyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvY29uZmxpY3RzLmMgKHJlc29sdmVfc3JfY29uZmxpY3QpOiBBZGQgZXh0cmEgcGFyZW5zIGluCisJYWxsb2NhIGNhbGwuCisKKwkqIHNyYy9iaXNvbi5zaW1wbGUgW19fR05VQ19fXSAoeXlwYXJzZSk6IERlY2xhcmUgd2l0aCBwcm90b3R5cGUuCisKKzE5OTMtMDEtMTUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL2NvbmZsaWN0cy5jIChwcmludF9yZWR1Y3Rpb24pOiBOZWFyIGVuZCwgaW5jcmVtZW50IGZwMiB3aGVuCisJbWFzayByZWN5Y2xlcy4KKworMTk5My0wMS0xMyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBNYWtlZmlsZS5pbiAoYmlzb24uczEpOiBOZXcgdGFyZ2V0LiAgTW9kaWZpZXMgYmlzb24uc2ltcGxlLgorCShpbnN0YWxsKTogSW5zdGFsbCBiaXNvbi5zMSwgd2l0aG91dCBjaGFuZ2luZyBpdC4KKwkoY2xlYW4pOiBEZWxldGUgYmlzb24uczEuCisKKzE5OTMtMDEtMDQgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL3JlYWRlci5jIChyZWFkZXIpOiBQdXQgQmlzb24gdmVyc2lvbiBpbiBjb21tZW50IGluIG91dHB1dAorCWZpbGUuCisKKzE5OTItMTItMjIgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL2ZpbGVzLmMgKG9wZW5maWxlcyk6IFVzZSAub3V0cHV0LCBub3QgLm91dCwgZm9yIG91dGZpbGUsCisJcmVnYXJkbGVzcyBvZiBzcGVjX25hbWVfcHJlZml4LgorCisxOTkyLTEyLTE1ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X2dyYW0pOiBJbmNsdWRlIHl5cmhzIGluIHRoZSBzYW1lICNpZiBhcworCXl5cHJocy4KKworMTk5Mi0xMi0xNSAgTm9haCBGcmllZG1hbiAgPGZyaWVkbWFuQG51dHJpbWF0LmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dCk6IG91dHB1dCBkaXJlY3RpdmVzIGNoZWNraW5nIGZvcgorCV9fY3BsdXNwbHVzIGFzIHdlbGwgYXMgX19TVERDX18gdG8gZGV0ZXJtaW5lIHdoZW4gdG8gZGVmaW5lCisJImNvbnN0IiBhcyBhbiBlbXB0eSB0b2tlbi4gIChQYXRjaCBmcm9tIFdvbGZnYW5nIEdsdW56CisJPHdvZ2xAc3VuMTFhLnpmZS5zaWVtZW5zLmRlPikKKworMTk5Mi0xMi0wOCAgRGF2aWQgSi4gTWFjS2VuemllICA8ZGptQGtyb3BvdGtpbi5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL3N5c3RlbS5oLCBzcmMvY29uZmxpY3RzLmM6IFJlcGxhY2UgVVNHIHdpdGggSEFWRV9TVFJJTkdfSAorCWFuZCBIQVZFX01FTU9SWV9ILgorCisxOTkyLTExLTIxICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AZ29sZG1hbi5nbnUuYWkubWl0LmVkdT4KKworCSogTWFrZWZpbGUuaW46IFNldCBhbmQgdXNlICQoTUFLRUlORk8pLgorCisxOTkyLTExLTIwICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIHNyYy9maWxlcy5jIChkb25lKSBbTVNET1NdOiBEZWxldGUgdGhlIHRtcGRlZnNmaWxlIHdpdGggdGhlCisJcmVzdC4KKworMTk5Mi0xMC0wOCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBNYWtlZmlsZS5pbiAoZGlzdCk6IFB1dCBjb25maWd1cmUuYmF0IGluIHRoZSBkaXN0cmlidXRpb24uCisKKzE5OTItMTAtMDEgIERhdmlkIEouIE1hY0tlbnppZSAgPGRqbUBnb2xkbWFuLmdudS5haS5taXQuZWR1PgorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6IGNkIHRvICQoc3JjZGlyKSBiZWZvcmUgaW5zdGFsbGluZyBpbmZvCisJZmlsZXMuCisKKzE5OTItMDktMzAgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogTWFrZWZpbGUuaW4gKGZpbGVzLm8pOiBTdXBwbHkgJChERUZTKSwgYW5kICQoQ1BQRkxBR1MpLgorCisxOTkyLTA5LTI1ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIFZlcnNpb24gMS4xOSByZWxlYXNlZC4KKworCSogc3JjL3JlYWRlci5jIChwYXJzZV91bmlvbl9kZWNsKTogRml4IGVuZGluZyBvZiBDKysgY29tbWVudDsKKwlkb24ndCBsb3NlIHRoZSBjaGFyIGFmdGVyIHRoZSBuZXdsaW5lLgorCisJKiBjb25maWd1cmUuYmF0OiBOZXcgZmlsZS4KKworMTk5Mi0wOS0yNCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvY29uZmxpY3RzLmM6IENoZWNrIGZvciB1c2luZyBhbGxvY2EuaCBhcyBnZXRvcHQuYyBkb2VzLgorCisxOTkyLTA5LTA2ICBLYXJsIEJlcnJ5ICA8a2FybEBoYXlsZXk+CisKKwkqIHNyYy9maWxlcy5jIChvcGVuZmlsZXMpOiBvcGVuIGBmZGVmaW5lcycgYWZ0ZXIgd2UgaGF2ZSBhc3NpZ25lZAorCWEgbmFtZSB0byBgdG1wZGVmc2ZpbGUnLCBhbmQgb25seSBpZiBgZGVmaW5lc2ZsYWcnIGlzIHNldC4KKwkoZG9uZSk6IG9ubHkgY3JlYXRlIHRoZSByZWFsIC50YWIuaCBmaWxlIGlmIGBkZWZpbmVzZmxhZycgaXMgc2V0LgorCSogc3JjL3JlYWRlci5jIChwYWNrc3ltYm9scyk6IGRvbid0IGNsb3NlIGBmZGVmaW5lcycgaGVyZS4KKworMTk5Mi0wOS0wNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvZmlsZXMuYyAob3BlbmZpbGVzKTogT3BlbiBmZGVmaW5lcyBhcyB0ZW1wIGZpbGUsIGxpa2UKKwlmdGFibGUuCisJKGRvbmUpOiBDb3B5IHRlbXAgZGVmaW5lcyBmaWxlIHRvIHJlYWwgb25lLCBsaWtlIG1haW4gb3V0cHV0IGZpbGUuCisKKzE5OTItMDgtMjEgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogTWFrZWZpbGUuaW4gKGRpc3QpOiBEb24ndCByZWxlYXNlIG1lcmdlZGlyLmF3aworCShpbnN0YWxsKTogVXNlIHNlZCwgbm90IGF3ay4gIERvbid0IGRlcGVuZCBvbiBtZXJnZWRpci5hd2suCisJKiBtZXJnZWRpci5hd2s6IEZpbGUgZWZmZWN0aXZlbHkgZGVsZXRlZC4KKworMTk5Mi0wNy0yOSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvYmlzb24uc2ltcGxlOiBUZXN0IF9fc3BhcmMgYWxvbmcgd2l0aCBfX3NwYXJjX18uCisKKzE5OTItMDctMTEgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL2xleC5jIChza2lwX3doaXRlX3NwYWNlKTogQ291bnQgXG4ganVzdCBvbmNlIGF0IGVuZCBvZiBjKysKKwljb21tZW50LgorCisxOTkyLTA2LTI2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGU6IENvbW1lbnQgZml4OyAjbGluZSBjb21tYW5kIHVwZGF0ZWQuCisKKzE5OTItMDYtMjQgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwpOiBTcGVjaWZ5IGZ1bGwgbmV3IGZpbGUgbmFtZSBmb3IgdGhlCisJZXhlY3V0YWJsZS4KKworMTk5Mi0wNi0yMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBNYWtlZmlsZS5pbiAoZGlzdCk6IEluY2x1ZGUgYmlzb24ucm5oIGluIGRpc3RyaWJ1dGlvbi4KKworU3VuIEp1biAyMSAyMjo0MjoxMyAxOTkyIEVyaWMgWW91bmdkYWxlIDx5b3VuZ2RhbGVAdjY1NTBjLm5ybC5uYXZ5Lm1pbD4KKworCUNsZWFuIHVwIHJvdWdoIGVkZ2VzIGluIFZNUyBwb3J0IG9mIGJpc29uLCBhZGQgc3VwcG9ydCBmb3IKKwlyZW1haW5pbmcgY29tbWFuZCBsaW5lIG9wdGlvbnMuCisKKwkqIHNyYy9iaXNvbi5jbGQ6IEFkZCAvdmVyc2lvbiwgL3lhY2MsIC9maWxlX3ByZWZpeCwgYW5kCisJL25hbWVfcHJlZml4IHN3aXRjaGVzLgorCisJKiBzcmMvYnVpbGQuY29tOiBHZW5lcmFsIGNsZWFudXA6IGFkZCBsb2dpYyB0byBhdXRvbWF0aWNhbGx5IHNlbnNlCisJd2hpY2ggQyBjb21waWxlciBpcyBwcmVzZW50OyBhZGQgY29kZSB0byBjd2QgdG8gdGhlIGRpcmVjdG9yeSB0aGF0CisJY29udGFpbnMgYmlzb24gc291cmNlczsgZG8gbm90IGRlZmluZSBYUEZJTEUsIFhQRklMRTEKKwkoY29ycmVjdCBkZWZhdWx0cyBhcmUgYXBwbGllZCBpbiBzcmMvZmlsZS5jKS4KKworCSogc3JjL2ZpbGVzLmM6IEFwcGVuZCBfdGFiLCBub3QgLnRhYiB3aGVuIHVzaW5nIC9maWxlX3ByZWZpeCB1bmRlcgorCVZNUy4KKworCSogc3JjL3N5c3RlbS5oOiBJbmNsdWRlIHN0cmluZy5oIGluc3RlYWQgb2Ygc3RyaW5ncy5oIChhIGxhIFVTRykuCisKKwkqIHNyYy92bXNnZXRhcmdzLmM6IEFkZCBzdXBwb3J0IGZvciBhbGwgc3dpdGNoZXMgYWRkZWQgdG8KKwlzcmMvYmlzb24uY2xkLgorCisxOTkyLTA2LTIxICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogQWx3YXlzIHNwZWNpZnkgbmV3IGZpbGUgbmFtZSBmb3IgaW5zdGFsbC4KKwlSZWRpcmVjdCBhd2sgb3V0cHV0IHRvIHRlbXAgZmlsZSBhbmQgaW5zdGFsbCB0aGF0LgorCisxOTkyLTA1LTI3ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGUgKHl5cGFyc2UpOiBNYWtlIHl5YmFja3VwIGFuZCB5eWVycmxhYjEgYWx3YXlzCisJYmUgdXNlZC4KKworMTk5Mi0wNS0yMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBNYWtlZmlsZS5pbiAoZGlzdCk6IERlcGVuZCBvbiBiaXNvbi5pbmZvCisJKGJpc29uLmluZm8pOiBEZWxldGUgc3B1cmlvdXMgPC4KKworMTk5Mi0wNS0xNyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBNYWtlZmlsZS5pbiAoLmMubyk6IE5ldyBydWxlLiAgVXNlICQoREVGUykgZGlyZWN0bHkuCisJKENGTEFHUyk6IFVzZSBqdXN0IC1nIGJ5IGRlZmF1bHQuCisJKENERUJVRyk6IFZhcmlhYmxlIGRlbGV0ZWQuCisKKzE5OTItMDUtMDcgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL3JlYWRlci5jIChjb3B5X2d1YXJkKTogRml4IHR5cG8gc2tpcHBpbmcgY29tbWVudC4KKworMTk5Mi0wNS0wNCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBWZXJzaW9uIDEuMTguCisKKwkqIHNyYy9nZXRhcmdzLmMgKGdldGFyZ3MpOiBDaGFuZ2UgJzAnIHRvIDAgaW4gY2FzZSBmb3IgbG9uZworCW9wdGlvbnMuCisKKzE5OTItMDQtMTkgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL3JlYWRlci5jIChwYWNrc3ltYm9scyk6IEhhbmRsZSAtcCB3aGVuIGRlY2xhcmluZyB5eWx2YWwuCisKKzE5OTItMDQtMTggIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL291dHB1dC5jIChvdXRwdXRfZ3JhbSk6IE91dHB1dCAjZW5kaWYgcHJvcGVybHkgYXQgZW5kIG9mCisJZGVjbC4KKworMTk5Mi0wMy0zMCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBWZXJzaW9uIDEuMTcuCisKKwkqIE1ha2VmaWxlLmluIChjbGVhbik6IERvbid0IGRlbGV0ZSBjb25maWd1cmF0aW9uIGZpbGVzIG9yIFRBR1MuCisJKGRpc3RjbGVhbik6IE5ldyB0YXJnZXQ7IGRvIGRlbGV0ZSB0aG9zZS4KKworMTk5Mi0wMy0yOCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9ncmFtKTogQ29uZGl0aW9uYWxpemUgeXlwcmhzIG9uIFlZREVCVUcuCisKKwkqIHNyYy9MUjAuYyAoYXVnbWVudF9hdXRvbWF0b24pOiBJZiBjb3B5aW5nIHNwLT5zaGlmdHMgdG8gaW5zZXJ0CisJbmV3IHNoaWZ0LCBoYW5kbGUgY2FzZSBvZiBpbnNlcnRpbmcgYXQgZW5kLgorCisxOTkyLTAzLTIxICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIHNyYy9sZXguYyAoc2tpcF93aGl0ZV9zcGFjZSk6IEhhbmRsZSBDKysgY29tbWVudHMuCisJKiBzcmMvcmVhZGVyLmMgKGNvcHlfZGVmaW5pdGlvbiwgcGFyc2VfdW5pb25fZGVjbCwgY29weV9ndWFyZCk6CisJKGNvcHlfYWN0aW9uKTogTGlrZXdpc2UuCisKKzE5OTItMDMtMDggIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL2Jpc29uLnNpbXBsZSAoWVlQT1BTVEFDSyk6IEZpeCB0eXBvLgorCisxOTkyLTAyLTI5ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogSW5zdGFsbCBiaXNvbi5pbmZvKiBmaWxlcyBvbmUgYnkgb25lLgorCisxOTkyLTAyLTI4ICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1Ad29va3Vtei5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL2Jpc29uLjE6IERvY3VtZW50IGxvbmcgb3B0aW9ucyBhcyBzdGFydGluZyB3aXRoIGAtLScsIG5vdAorCWArJy4KKworMTk5Mi0wMi0wMSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvZ2V0YXJncy5jIChnZXRhcmdzKTogQWNjZXB0IHZhbHVlIDAgZnJvbSBnZXRvcHRfbG9uZy4KKworMTk5Mi0wMS0zMCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBNYWtlZmlsZS5pbiAobW9zdGx5Y2xlYW4pOiBSZW5hbWVkIGZyb20gYGNsZWFuJy4KKwkoY2xlYW4pOiBSZW5hbWVkIGZyb20gJ2Rpc3RjbGVhbicuICBEZXAgb24gbW9zdGx5Y2xlYW4sIG5vdAorCXJlYWxjbGVhbi4KKwkocmVhbGNsZWFuKTogRGVwIG9uIGNsZWFuLgorCisxOTkyLTAxLTI3ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGU6IFVzZSBtYWxsb2MsIG5vdCB4bWFsbG9jLCBhbmQgaGFuZGxlIGZhaWx1cmUKKwlleHBsaWNpdGx5LgorCisxOTkyLTAxLTI2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIHNyYy9jb25mbGljdHMuYyAodG90YWxfY29uZmxpY3RzKTogRGVsZXRlIHVudXNlZCBhcmcgdG8gZnByaW50Zi4KKworMTk5Mi0wMS0yMSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBWZXJzaW9uIDEuMTYuCisKKzE5OTItMDEtMDYgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogTWFrZWZpbGUgKGRpc3RjbGVhbik6IERlcGVuZCBvbiBjbGVhbiwgbm90IHJlYWxjbGVhbi4gIERvbid0IHJtCisJVEFHUy4KKwkocmVhbGNsZWFuKTogcm0gVEFHUyBoZXJlLgorCisJKiBzcmMvc3ltdGFiLmMgKGZyZWVfc3ltdGFiKTogRG9uJ3QgZnJlZSB0aGUgdHlwZSBuYW1lcy4KKworMTk5MS0xMi0yOSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvbWFjaGluZS5oOiBNU0RPUyBoYXMgMzItYml0IGludHMgaWYgX19HTzMyX18uCisKKzE5OTEtMTItMjUgIERhdmlkIEouIE1hY0tlbnppZSAgPGRqbUB3b29rdW16LmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvYmlzb24uc2ltcGxlIFtfQUlYXTogSW5kZW50IGAjcHJhZ21hIGFsbG9jYScsIHNvIG9sZCBDCisJY29tcGlsZXJzIGRvbid0IGNob2tlIG9uIGl0LgorCisxOTkxLTEyLTIzICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIHNyYy9nZXRvcHQuYywgc3JjL2dldG9wdDEuYywgc3JjL2dldG9wdC5oOiBMaW5rIHRoZW0gdG8gc3RhbmRhcmQKKwlzb3VyY2UgbG9jYXRpb24uCisJKiBzcmMvYWxsb2NhLmM6IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW4gKGRpc3QpOiBDb3B5IHRob3NlIGZpbGVzIGZyb20gY3VycmVudCBkaXIuCisKKwkqIHNyYy9nZXRhcmdzLmM6IFVwZGF0ZSB1c2FnZSBtZXNzYWdlLgorCisJKiBzcmMvTFIwLmMgKGF1Z21lbnRfYXV0b21hdG9uKTogUHV0IG5ldyBzaGlmdCBpbiBwcm9wZXIgb3JkZXIuCisKKzE5OTEtMTItMjAgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL2NvbmZsaWN0cy5jOiBVc2UgbWVtY3B5IGlmIEFOU0kgQyBsaWJyYXJ5LgorCisJKiBzcmMvY2xvc3VyZS5jIChzZXRfZmRlcml2ZXMpOiBEZWxldGUgcmVkdW5kYW50IGFzc2lnbm1lbnQgdG8KKwl2cm93LgorCisJKiBzcmMvY2xvc3VyZS5jIChwcmludF9maXJzdHMpOiBGaXggYm91bmRzIGFuZCBvZmZzZXQgY2hlY2tpbmcKKwl0YWdzLgorCisJKiBzcmMvY2xvc3VyZS5jICh0YWdzKTogRGVjbGFyZSBqdXN0IG9uY2UgYXQgc3RhcnQgb2YgZmlsZS4KKworCSogc3JjL0xSMC5jIChhbGxvY2F0ZV9pdGVtc2V0cyk6IEVsaW1pbmF0ZSB1bnVzZWQgdmFyIG1heC4KKwkoYXVnbWVudF9hdXRvbWF0b24pOiBUZXN0IHNwIGlzIG5vbi1udWxsLgorCisJKiBzcmMvbGFsci5jIChpbml0aWFsaXplX0xBKTogTWFrZSB0aGUgdmVjdG9ycyBhdCBsZWFzdCAxIGVsZW1lbnQKKwlsb25nLgorCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRncmFtKTogUmVtb3ZlIHNlcGFyYXRlIFlZU1RZUEUgZGVmYXVsdCBmb3IKKwlNU0RPUy4KKworMTk5MS0xMi0xOCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvcHJpbnQuYyAocHJpbnRfZ3JhbW1hcik6IERvbid0IHByaW50IGRpc2FibGVkIHJ1bGVzLgorCisxOTkxLTEyLTE3ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIHNyYy9sZXguYyAobGV4KTogUGFyc2UgaGV4IGVzY2FwZXMgcHJvcGVybHkuCisJSGFuZGxlIFx2IHdoZW4gZmlsbGluZyB0b2tlbl9idWZmZXIuCisKKwkqIHNyYy9sZXguYzogSW5jbHVkZSBuZXcuaC4KKwkodG9rZW5fYnVmZmVyKTogQ2hhbmdlIHRvIGEgcG9pbnRlci4KKwkoaW5pdF9sZXgpOiBBbGxvY2F0ZSBpbml0aWFsIGJ1ZmZlci4KKwkoZ3Jvd190b2tlbl9idWZmZXIpOiBOZXcgZnVuY3Rpb24uCisJKGxleCwgcGFyc2VfcGVyY2VudF90b2tlbik6IFVzZSB0aGF0LgorCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRfZGVjbGFyYXRpb25zKTogQ2FsbCBvcGVuX2V4dHJhX2ZpbGVzIGp1c3QKKwlvbmNlLgorCShwYXJzZV90b2tlbl9kZWNsKTogRG9uJ3QgZnJlZSBwcmV2aW91cyB0eXBlbmFtZSB2YWx1ZS4gIERvbid0CisJaW5jcmVtZW50IG52YXJzIGlmIHN5bWJvbCBpcyBhbHJlYWR5IGEgbm9udGVybWluYWwuCisJKHBhcnNlX3VuaW9uX2RlY2wpOiBDYXRjaCB1bm1hdGNoZWQgY2xvc2UtYnJhY2UuCisJKHBhcnNlX2V4cGVjdF9kZWNsKTogTnVsbC10ZXJtaW5hdGUgYnVmZmVyLgorCShjb3B5X2d1YXJkKTogU2V0IGJyYWNlX2ZsYWcgZm9yIHssIG5vdCBmb3IgfS4KKworCSogc3JjL3JlYWRlci5jOiBGaXggJSUgaW4gY2FsbHMgdG8gZmF0YWwuCisKKwkqIHNyYy9yZWFkZXIuYyAodG9rZW5fYnVmZmVyKTogSnVzdCBvbmUgZXh0ZXJuIGRlY2wsIGF0IHRvcCBsZXZlbC4KKwlEZWNsYXJlIGFzIHBvaW50ZXIuCisKKwkqIHNyYy9zeW10YWIuYyAoZnJlZV9zeW10YWIpOiBGcmVlIHR5cGVfbmFtZSBmaWVsZHMuICBGcmVlIHN5bXRhYgorCWl0c2VsZi4KKworMTk5MS0xMS0yNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvYmlzb24uc2ltcGxlOiBIYW5kbGUgYWxsb2NhIGZvciBBSVguCisKKwkqIE1ha2VmaWxlLmluIChtYW5kaXIpOiBDb21wdXRlIGRlZmF1bHQgdXNpbmcgbWFuZXh0LgorCisxOTkxLTExLTAyICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1Ad29va3Vtei5nbnUuYWkubWl0LmVkdT4KKworCSogVXBkYXRlIGFsbCBmaWxlcyB0byBHUEwgdmVyc2lvbiAyLgorCisxOTkxLTA5LTA2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGUgKF9feXlfYmNvcHkpOiBVc2UgYnVpbHRpbiBpZiBHQ0MgdmVyc2lvbiAyLgorCisxOTkxLTA4LTI2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIHNyYy9yZWFkZXIuYyAocGFyc2VfYXNzb2NfZGVjbCk6IEVycm9yIGlmIHNhbWUgc3ltYm9sIGdldHMgdHdvCisJcHJlY3MuCisKKzE5OTEtMDgtMjYgIERhdmlkIEouIE1hY0tlbnppZSAgPGRqbUBwb2dvLmdudS5haS5taXQuZWR1PgorCisJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlOiBPbmx5IHB1dCAkPCBpbiBNYWtlZmlsZSBpZiB1c2luZyBWUEFUSCwKKwliZWNhdXNlIG9sZGVyIG1ha2VzIGRvbid0IHVuZGVyc3RhbmQgaXQuCisKKzE5OTEtMDgtMjMgIERhdmlkIEouIE1hY0tlbnppZSAgPGRqbUBhcHBsZS1ndW5raWVzPgorCisJKiBzcmMvY29uZmxpY3RzLmMgW19BSVhdOiAjcHJhZ21hIGFsbG9jYS4KKwkqIHNyYy9yZWR1Y2UuYzogRG9uJ3QgZGVmaW5lIFRSVUUgYW5kIEZBTFNFIGlmIGFscmVhZHkgZGVmaW5lZC4KKworMTk5MS0wOC0xMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBNYWtlZmlsZS5pbjogQWRkIGRlcHMgb24gc3lzdGVtLmguCisJKGluc3RhbGwpOiBBZGQgc29tZSBkZXBzLgorCisxOTkxLTA4LTAyICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AYXBwbGUtZ3Vua2llcz4KKworCSogTWFrZWZpbGUuaW4gKGRpc3QpOiBJbmNsdWRlIHRleGluZm8udGV4LgorCisJKiBjb25maWd1cmU6IENyZWF0ZSBjb25maWcuc3RhdHVzLiAgUmVtb3ZlIGl0IGFuZCBNYWtlZmlsZSBpZgorCWludGVycnVwdGVkIHdoaWxlIGNyZWF0aW5nIHRoZW0uCisKKzE5OTEtMDgtMDEgIERhdmlkIEouIE1hY0tlbnppZSAgPGRqbUBhcHBsZS1ndW5raWVzPgorCisJKiBjb25maWd1cmU6IENoZWNrIGZvciArc3JjZGlyIGV0Yy4gYXJnIGFuZCBsb29rIGZvcgorCU1ha2VmaWxlLmluIGluIHRoYXQgZGlyZWN0b3J5LiAgU2V0IFZQQVRIIGlmIHNyY2RpciBpcyBub3QgYC4nLgorCSogTWFrZWZpbGUuaW4gKHByZWZpeCk6IFJlbmFtZWQgZnJvbSBERVNURElSLgorCisxOTkxLTA3LTMxICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIHNyYy9wcmludC5jIChwcmludF9ncmFtbWFyKTogTWFrZSBvdXRwdXQgcHJldHRpZXIuICBCcmVhayBsaW5lcy4KKworMTk5MS0wNy0zMCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvcHJpbnQuYyAocHJpbnRfZ3JhbW1hcik6IE5ldyBmdW5jdGlvbi4KKwkodmVyYm9zZSk6IENhbGwgaXQgaW5zdGVhZCBvZiBwcmludGluZyB0b2tlbiBuYW1lcyBoZXJlLgorCisxOTkxLTA3LTIyICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIHNyYy92bXNnZXRhcmdzLmMgKHNwZWNfbmFtZV9wcmVmaXgsIHNwZWNfZmlsZV9wcmVmaXgpOiBEZWZpbmUKKwl2YXJpYWJsZXMuCisKKzE5OTEtMDctMTAgIERhdmlkIEouIE1hY0tlbnppZSAgPGRqbUB3b29rdW16LmdudS5haS5taXQuZWR1PgorCisJKiBjb25maWd1cmUsIE1ha2VmaWxlLmluOiAkKElOU1RBTExQUk9HKSAtPiAkKElOU1RBTEwpLAorCSQoSU5TVEFMTFRFWFQpIC0+ICQoSU5TVEFMTERBVEEpLgorCisxOTkxLTA3LTA5ICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1Ad29va3Vtei5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL2Jpc29uLnNpbXBsZTogRG9uJ3QgaW5jbHVkZSBtYWxsb2MuaCBpZiBfX1RVUkJPQ19fLgorCisxOTkxLTA3LTA2ICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AZ2VlY2guZ251LmFpLm1pdC5lZHU+CisKKwkqIFJlcGxhY2UgTWFrZWZpbGUgd2l0aCBjb25maWd1cmUgYW5kIE1ha2VmaWxlLmluLiAgVXBkYXRlIFJFQURNRQorCXdpdGggY3VycmVudCBjb21waWxhdGlvbiBpbnN0cnVjdGlvbnMuCisKKzE5OTEtMDctMDEgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogc3JjL3JlYWRlci5jIChyZWFkZXIpOiBNYWtlIHRoZSBvdXRwdXQgZGVmaW5lIFlZQklTT04uCisKKzE5OTEtMDYtMjAgIERhdmlkIEouIE1hY0tlbnppZSAgPGRqbUBnZWVjaC5nbnUuYWkubWl0LmVkdT4KKworCSogTWFrZWZpbGUgKE1BTkRJUiwgTUFORVhUKTogSW5zdGFsbCBtYW4gcGFnZSBpbgorCS91c3IvbG9jYWwvbWFuL21hbjEvYmlzb24uMSBieSBkZWZhdWx0LCBpbnN0ZWFkIG9mCisJL3Vzci9tYW4vbWFubC9iaXNvbi5sLCBmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhlciBHTlUgcHJvZ3JhbXMuCisJKiBNYWtlZmlsZTogUmVuYW1lIEJJTkRJUiBldCBhbC4gdG8gbG93ZXJjYXNlIHRvIGNvbmZvcm0gdG8KKwlHTlUgY29kaW5nIHN0YW5kYXJkcy4KKwkoaW5zdGFsbCk6IE1ha2UgbWFuIHBhZ2Ugbm9uLWV4ZWN1dGFibGUuCisKKzE5OTEtMDUtMzEgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogTWFrZWZpbGUgKGJpc29uLmluZm8pOiBOZXcgdGFyZ2V0LgorCShyZWFsY2xlYW4pOiBOZXcgdGFyZ2V0LgorCisxOTkxLTA1LTAyICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGU6IFVzZSBZWVBSSU5UIHRvIHByaW50IGEgdG9rZW4sIGlmIGl0J3MgZGVmaW5lZC4KKworMTk5MS0wNC0yOSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvbGFsci5jICh0cmFuc3Bvc2UpOiBSZW5hbWUgUiB0byBSX2FyZy4KKwkoaW5pdGlhbGl6ZV9MQSk6IEF2b2lkIHNoYWRvd2luZyB2YXJpYWJsZSBqLgorCisJKiBzcmMvcmVhZGVyLmMgKHBhY2tzeW1ib2xzKTogQXZvaWQgc2hhZG93aW5nIHZhcmlhYmxlIGkuCisKKwkqIHNyYy9maWxlcy5jOiBEZWNsYXJlIGV4aXQgYW5kIHBlcnJvci4KKworCSogc3JjL21hY2hpbmUuaDogRGVmaW5lIE1BWFNIT1JUIGFuZCBNSU5TSE9SVCBmb3IgdGhlIGV0YS0xMC4KKworMTk5MS0wNC0wMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBzcmMvYWxsb2NhdGUuYyAobWFsbG9jYXRlKTogQWx3YXlzIGFsbG9jYXRlIGF0IGxlYXN0IG9uZSBieXRlLgorCisxOTkxLTAzLTE5ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIE1ha2VmaWxlIChkaXN0KTogUHV0IGFsbG9jYS5jIGludG8gZGlzdHJpYnV0aW9uLgorCisxOTkxLTAzLTA2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuYWkubWl0LmVkdT4KKworCSogc3JjL3ByaW50LmMgKHByaW50X2FjdGlvbnMpOiBOaWNlciBvdXRwdXQgZm9yIGZpbmFsIHN0YXRlcy4KKworMTk5MS0wMi0yMSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3J1bGVfZGF0YSk6IEJyZWFrIGxpbmVzIGluIHl5dGxpbmUgYmFzZWQgb24KKwlocG9zLgorCisxOTkxLTAyLTA3ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuYWkubWl0LmVkdT4KKworCSogc3JjL2Jpc29uLnNpbXBsZSAoeXlwYXJzZSk6IE1vdmUgZGVjbCBvZiB5eWxzYSBiZWZvcmUgdXNlLgorCisxOTkxLTAxLTE1ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuYWkubWl0LmVkdT4KKworCSogVmVyc2lvbiAxLjE0LgorCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9ydWxlX2RhdGEpOiBIYW5kbGUgTlVMTCBpbiB0YWdzW2ldLgorCisxOTkxLTAxLTExICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuYWkubWl0LmVkdT4KKworCSogc3JjL2Jpc29uLnNpbXBsZTogT24gTVNET1MsIGluY2x1ZGUgbWFsbG9jLmguCisKKzE5OTAtMTItMjkgIERhdmlkIEouIE1hY0tlbnppZSAgPGRqbUB3b29rdW16LmFpLm1pdC5lZHU+CisKKwkqIHNyYy9maWxlcy5jOiBVc2UgYG1hbGxvY2F0ZScgaW5zdGVhZCBvZiBgeG1hbGxvYycgc28gbm8gZXh0cmEKKwlkZWNsIGlzIG5lZWRlZC4KKworMTk5MC0xMi0xOSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9yZWFkZXIuYyAocmVhZGdyYW0pOiBBbHRlcm5hdGUgWVlTVFlQRSBkZWZuIGZvciBNU0RPUy4KKwkqIHNyYy9maWxlcy5jIFtNU0RPU106IERlY2xhcmUgeG1hbGxvYy4KKworMTk5MC0xMi0xMyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3J1bGVfZGF0YSk6IFB1dCBhbGwgc3ltYm9scyBpbiB5eXRuYW1lLgorCisJKiBzcmMvYmlzb24uc2ltcGxlICh5eXBhcnNlKTogRGVsZXRlIGV4dHJhIGZwcmludGYgYXJnCisJd2hlbiBwcmludGluZyBhIHJlc3VsdCBvZiByZWR1Y3Rpb24uCisKKzE5OTAtMTItMTAgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5haS5taXQuZWR1PgorCisJKiBzcmMvcmVhZGVyLmMgKHBhY2tzeW1ib2xzKTogRG9uJ3QgZGVjbGFyZSB5eWx2YWwgaWYgcHVyZV9wYXJzZXIuCisKKzE5OTAtMTAtMzAgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5haS5taXQuZWR1PgorCisJKiBWZXJzaW9uIDEuMTIuCisKKwkqIHNyYy9MUjAuYyAoYXVnbWVudF9hdXRvbWF0b24pOiBGaXggYnVncyBhZGRpbmcgc3AyIHRvIGNoYWluIG9mCisJc2hpZnRzLgorCisxOTkwLTEwLTIzICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuYWkubWl0LmVkdT4KKworCSogc3JjL2Jpc29uLnNpbXBsZTogRG9uJ3QgZGVmaW5lIGFsbG9jYSBpZiBhbHJlYWR5IGRlZmluZWQuCisKKzE5OTAtMTAtMjEgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5haS5taXQuZWR1PgorCisJKiBzcmMvZ2V0b3B0LmM6IE9uIFZNUywgdXNlIHN0cmluZy5oLgorCisJKiBzcmMvbWFpbi5jIChtYWluKTogUmV0dXJuIHR5cGUgaW50LgorCisxOTkwLTA5LTEwICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuYWkubWl0LmVkdT4KKworCSogc3JjL291dHB1dC5jIChvdXRwdXRfaGVhZGVycyk6IE91dHB1dCBtYWNybyBkZWZzIGZvciAtcC4KKworCSogc3JjL3JlYWRlci5jIChyZWFkZ3JhbSk6IEhhbmRsZSBjb25zZWN1dGl2ZSBhY3Rpb25zLgorCisJKiBzcmMvZ2V0YXJncy5jIChnZXRhcmdzKTogUmVuYW1lIC1hIHRvIC1wLgorCSogc3JjL2ZpbGVzLmMgKG9wZW5maWxlcyk6IENoYW5nZSBuYW1lcyB1c2VkIGZvciAtYi4KKworMTk5MC0wOC0yNyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9yZWR1Y2UuYyAocmVkdWNlX2dyYW1tYXJfdGFibGVzKTogRG9uJ3QgbWFwIHJsaHMgb2YgZGlzYWJsZWQKKwlydWxlLgorCisxOTkwLTA4LTI2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuYWkubWl0LmVkdT4KKworCSogc3JjL2Nsb3N1cmUuYyAocHJpbnRfZmlyc3RzLCBwcmludF9mZGVyaXZlcyk6IFVzZSBCSVRJU1NFVCB0bworCXRlc3QgYml0cy4KKworMTk5MC0wOC0yMyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9jbG9zdXJlLmMgKHByaW50X2ZpcnN0cyk6IHZyb3dzaXplID0+IHZhcnNldHNpemUuCisJKHByaW50X2ZkZXJpdmVzKTogcnJvd3NpemUgPT4gcnVsZXNldHNpemUuCisKKzE5OTAtMDgtMTAgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KKworCSogc3JjL2Jpc29uLnNpbXBsZSAoYWxsb2NhKTogRG9uJ3QgZGVmaW5lIGlmIGFscmVhZHkgZGVmaW5lZC4KKwkoX195eV9iY29weSk6IEFsdGVybmF0ZSBkZWZpbml0aW9uIGZvciBDKysuCisKKzE5OTAtMDctMTEgIERhdmlkIEouIE1hY0tlbnppZSAgPGRqbUBhbGJlcnQuYWkubWl0LmVkdT4KKworCSogc3JjL2dldGFyZ3MuYyAoZ2V0YXJncyk6IE1lbnRpb24gK3lhY2MgaW4gdXNhZ2UgbWVzc2FnZS4KKworMTk5MC0wNy0xMCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgorCisJKiBzcmMvcmVhZGVyLmMgKHBhcnNlX3Rva2VuX2RlY2wsIGNvcHlfYWN0aW9uKTogU2V0CisJdmFsdWVfY29tcG9uZW50c191c2VkIGlmIGFwcHJvcHJpYXRlLgorCShyZWFkZ3JhbSk6IEluaGliaXQgb3V0cHV0IG9mIFlZU1RZUEUgZGVmaW5pdGlvbiBpbiB0aGF0IGNhc2UuCisKKzE5OTAtMDYtMzAgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KKworCSogc3JjL291dHB1dC5jIChvdXRwdXRfcGFyc2VyKTogRGVmaW5lIFlZUFVSRSBpZiBwdXJlLCBhbmQgbm90CisJb3RoZXJ3aXNlLiAgRG9uJ3QgZGVmaW5lIFlZSU1QVVJFLgorCSogc3JjL2Jpc29uLnNpbXBsZTogQWRqdXN0IGNvbmRpdGlvbmFscyBhY2NvcmRpbmdseS4KKwkqIHNyYy9iaXNvbi5zaW1wbGUgKFlZTEVYKTogSWYgbG9jYXRpb25zIG5vdCBpbiB1c2UsIGRvbid0IHBhc3MKKwkmeXlsbG9jLgorCisxOTkwLTA2LTI4ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9nZXRhcmdzLmMgKGxvbmdvcHRzKTogQWRkIGB5YWNjJy4KKworMTk5MC0wNi0yOCAgRGF2aWQgSi4gTWFjS2VuemllICA8ZGptQGFwcGxlLWd1bmtpZXM+CisKKwkqIHNyYy9nZXRhcmdzLmMgKGdldGFyZ3MpOiBBZGQgbG9uZyBvcHRpb25zLgorCSogTWFrZWZpbGU6IExpbmsgd2l0aCBnZXRvcHQxLm8gYW5kIGFkZCBnZXRvcHQxLmMgYW5kIGdldG9wdC5oIHRvCisJZGlzdC4KKworCSogTW92ZSB2ZXJzaW9uIG51bWJlciBhbmQgZGVzY3JpcHRpb24gYmFjayBpbnRvIHZlcnNpb24uYyBmcm9tCisJTWFrZWZpbGUgYW5kIGdldGFyZ3MuYy4KKwkqIE1ha2VmaWxlIChkaXN0KTogRXh0cmFjdCB2ZXJzaW9uIG51bWJlciBmcm9tIHZlcnNpb24uYy4KKworMTk5MC0wNi0yNiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgorCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dCk6IEFsd2F5cyBjYWxsIG91dHB1dF9ncmFtLgorCSogc3JjL2Jpc29uLnNpbXBsZSAoeXlwYXJzZSk6IFByaW50IHJocyBhbmQgbGhzIHN5bWJvbHMgb2YKKwlyZWR1Y3Rpb24gcnVsZS4KKworMTk5MC0wNi0yMSAgRGF2aWQgSi4gTWFjS2VuemllICA8ZGptQGFsYmVydC5haS5taXQuZWR1PgorCisJKiBzcmMvbWFpbi5jOiBOZXcgZ2xvYmFsIHZhciBgcHJvZ3JhbV9uYW1lJyB0byBob2xkIGFyZ3ZbMF0gZm9yCisJZXJyb3IgbWVzc2FnZXMuCisJKiBzcmMvYWxsb2NhdGUuYywgc3JjL2ZpbGVzLmMsIHNyYy9nZXRhcmdzLmMsIHNyYy9yZWFkZXIuYzogVXNlCisJYHByb2dyYW1fbmFtZScgaW4gbWVzc2FnZXMgaW5zdGVhZCBvZiBoYXJkY29kZWQgImJpc29uIi4KKworMTk5MC0wNi0yMCAgRGF2aWQgSi4gTWFjS2VuemllICA8ZGptQGFsYmVydC5haS5taXQuZWR1PgorCisJKiBNYWtlZmlsZTogU3BlY2lmeSBCaXNvbiB2ZXJzaW9uIGhlcmUuICBBZGQgcnVsZSB0byBwYXNzIGl0IHRvCisJdmVyc2lvbi5jLiAgRW5jb2RlIGl0IGluIGRpc3RyaWJ1dGlvbiBkaXJlY3RvcnkgYW5kIHRhciBmaWxlIG5hbWVzLgorCSogc3JjL3ZlcnNpb24uYzogVXNlIHZlcnNpb24gbnVtYmVyIGZyb20gTWFrZWZpbGUuCisJKiBzcmMvZ2V0YXJncy5jIChnZXRhcmdzKTogUHJpbnQgYWRkaXRpb25hbCB0ZXh0IHRoYXQgdXNlZCB0byBiZQorCXBhcnQgb2YgdmVyc2lvbl9zdHJpbmcgaW4gdmVyc2lvbi5jLiAgVXNlIC1WIGluc3RlYWQgb2YgLXZlcnNpb24KKwl0byBwcmludCBCaXNvbiB2ZXJzaW9uIGluZm8uICBQcmludCBhIHVzYWdlIG1lc3NhZ2UgYW5kIGV4aXQgaWYKKwlnaXZlbiBhbiBpbnZhbGlkIG9wdGlvbi4KKworMTk5MC0wNi0xOSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgorCisJKiBzcmMvYmlzb24uc2ltcGxlOiBGaXggYSAjbGluZS4KKworCSogTWFrZWZpbGUgKElOU1RBTEwpOiBOZXcgcGFyYW1ldGVyLgorCShpbnN0YWxsKTogVXNlIHRoYXQuCisJKENGTEFHUyk6IE1vdmUgZGVmaW5pdGlvbiB0byB0b3AuCisKKzE5OTAtMDYtMTcgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KKworCSogc3JjL3JlYWRlci5jIChwYXJzZV90eXBlX2RlY2wpOiBJZ25vcmUgc2VtaWNvbG9uLgorCVJlbW92ZSBleGNlc3MgJSBmcm9tIGVycm9yIG1lc3NhZ2VzLgorCisxOTkwLTA2LTE2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+CisKKwkqIFZlcnNpb24gMS4xMS4KKworCSogTWFrZWZpbGUgKGluc3RhbGwpOiBFbnN1cmUgaW5zdGFsbGVkIGZpbGVzIHJlYWRhYmxlLgorCitUdWUgSnVuIDEyIDEyOjUwOjU2IEVEVCAxOTkwIEpheSBGZW5sYXNvbiA8aGFja0BhaS5taXQuZWR1PgorCisJKiBzcmMvZ2V0YXJncy5jOiBEZWNsYXJlIHNwZWNfZmlsZV9wcmVmaXgKKworCSogc3JjL2xleC5jIChsZXgpOiBcYSBpcyAnXDAwNycgaW5zdGVhZCBvZiAnMDA3JworCisJKiBzcmMvcmVhZGVyLmM6IGluY2x1ZGUgbWFjaGluZS5oCisKKwkqIHNyYy9maWxlcy5oOiBEZWNsYXJlIGV4dGVybiBzcGVjX25hbWVfcHJlZml4LgorCisJVHJpdmlhbCBwYXRjaCBmcm9tIFRob3JzdGVuIE9obCA8dGQxMkBkZGFnc2kzLmJpdG5ldD4KKworMTk5MC0wNS0zMSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgorCisJKiBWZXJzaW9uIDEuMTAuCisKKwkqIHNyYy9iaXNvbi5zaW1wbGUgKFlZQkFDS1VQLCBZWVJFQ09WRVJJTkcpOiBOZXcgbWFjcm9zLgorCShZWUlOSVRERVBUSCk6IFRoaXMgaXMgd2hhdCB1c2VkIHRvIGJlIFlZTUFYREVQVEguCisJKFlZTUFYREVQVEgpOiBUaGlzIGlzIHdoYXQgdXNlZCB0byBiZSBZWU1BWExJTUlULgorCUlmIHRoZSB2YWx1ZSBpcyAwLCB1c2UgdGhlIGRlZmF1bHQgaW5zdGVhZC4KKwkoeXlwYXJzZSk6IFJldHVybiAyIG9uIHN0YWNrIG92ZXJmbG93LgorCisxOTkwLTA1LTMwICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGUgKFlZRVJST1IpOiBKdW1wIHRvIG5ldyBsYWJlbDsgZG9uJ3QgcHJpbnQgZXJyb3IKKwltZXNzYWdlLgorCSh5eXBhcnNlKTogRGVmaW5lIGxhYmVsIHl5ZXJybGFiMS4KKworMTk5MC0wNS0xNiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgorCisJKiBzcmMvZmlsZXMuYyAob3BlbmZpbGVzKTogU3VwcG9ydCAtYi4KKwkqIHNyYy9nZXRhcmdzLmMgKGdldGFyZ3MpOiBMaWtld2lzZS4KKworCSogc3JjL3JlYWRlci5jIChyZWFkZ3JhbSk6IEVycm9yIGlmIHRvbyBtYW55IHN5bWJvbHMuCisKKwkqIHNyYy9sZXguYyAobGV4KTogSGFuZGxlIFxhLiAgTWFrZSBlcnJvciBtc2dzIG1vcmUgcmVsaWFibGUuCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRfZGVjbGFyYXRpb25zKTogTWFrZSBlcnJvciBtc2dzIG1vcmUgcmVsaWFibGUuCisKKzE5OTAtMDUtMTMgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KKworCSogVmVyc2lvbiAxLjA5LgorCisJKiBzcmMvcmVkdWNlLmMgKHJlZHVjZV9ncmFtbWFyX3RhYmxlcyk6IEZpeCBiYWNrd2FyZCB0ZXN0LgorCisxOTkwLTA1LTEyICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+CisKKwkqIE1ha2VmaWxlIChiaXNvbi1kaXN0LiopOiBSZW5hbWUgdGFyZ2V0cyBhbmQgZmlsZXMgdG8gYmlzb24uKi4KKwkoYmlzb24udGFyKTogTWFrZSB0YXIgZmlsZSB0byB1bnBhY2sgaW50byBzdWJkaXJlY3RvcnkgbmFtZWQgYGJpc29uJy4KKworMTk5MC0wNC0zMCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgorCisJKiBzcmMvcmVkdWNlLmMgKHJlZHVjZV9ncmFtbWFyX3RhYmxlcyk6IFNldCBybGhzIHRvIC0xIGZvciB1c2VsZXNzCisJcnVsZXMuCisJKiBzcmMvbnVsbGFibGUuYyAoc2V0X251bGxhYmxlKTogSWdub3JlIHRob3NlIHJ1bGVzLgorCSogc3JjL2Rlcml2ZXMuYyAoc2V0X2Rlcml2ZXMpOiBMaWtld2lzZS4KKworMTk5MC0wNC0yMyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgorCisJKiBzcmMvYmlzb24uc2ltcGxlICh5eXBhcnNlKTogTWVudGlvbiBydWxlIG51bWJlciBhcyB3ZWxsIGFzIGxpbmUKKwludW1iZXIuCisKKzE5OTAtMDMtMjkgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KKworCSogc3JjL2Jpc29uLnNpbXBsZSAoX195eV9iY29weSk6IE5ldyBmdW5jdGlvbi4KKwkoeXlwYXJzZSk6IFVzZSB0aGF0LCBub3QgYmNvcHkuCisKKzE5OTAtMDMtMjggIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KKworCSogc3JjL3ByaW50LmMgKHByaW50X2FjdGlvbnMpOiBEb24ndCBhbHRlciBpIGFuZCBqIHNwdXJpb3VzbHkgd2hlbgorCWVycnA9PTAuCisKKzE5OTAtMDMtMTIgIEppbSBLaW5nZG9uICA8a2luZ2RvbkBwb2dvLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGUgW19fR05VQ19fXTogVXNlIGJ1aWx0aW5fYWxsb2NhLgorCisxOTkwLTAzLTA3ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+CisKKwkqIE1ha2VmaWxlIChpbnN0YWxsKTogVXNlIG1lcmdlZGlyLmF3ayB0byBwcm9jZXNzIGJpc29uLnNpbXBsZQorCWZvciBpbnN0YWxsYXRpb24uCisKKwkqIHNyYy9iaXNvbi5zaW1wbGUgKHl5cGFyc2UpOiBOZXcgZmVhdHVyZSB0byBpbmNsdWRlIHBvc3NpYmxlIHZhbGlkCisJdG9rZW5zIGluIHBhcnNlIGVycm9yIG1lc3NhZ2UuCisKKzE5OTAtMDMtMDMgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ2VlY2g+CisKKwkqIFZlcnNpb24gMS4wOC4KKworMTk5MC0wMi0yNiAgSmltIEtpbmdkb24gIDxraW5nZG9uQHBvZ28uYWkubWl0LmVkdT4KKworCSogc3JjL3ByaW50LmMgKHByaW50X2FjdGlvbnMpCisJKiBzcmMvY29uZmxpY3RzLmMgKHByaW50X3JlZHVjdGlvbnMpOiBDaGFuZ2UgInNoaWZ0ICVkIiB0bworCSJzaGlmdCwgYW5kIGdvIHRvIHN0YXRlICVkIiBhbmQgInJlZHVjZSAlZCIgdG8gInJlZHVjZSB1c2luZyBydWxlICVkIgorCWFuZCAiZ290byAlZCIgdG8gImdvIHRvIHN0YXRlICVkIi4KKwkqIHNyYy9wcmludC5jIChwcmludF9jb3JlKTogQ2hhbmdlICIoJWQpIiB0byAiKHJ1bGUgJWQpIi4KKworMTk5MC0wMi0yMCAgSmF5IEZlbmxhc29uICA8aGFja0B3b29rdW16LmFpLm1pdC5lZHU+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGU6ICBDb21tZW50IG91dCB1bnVzZWQgeXlyZXN1bWU6IGxhYmVsLgorCisxOTkwLTAyLTA5ICBKYXkgRmVubGFzb24gPGhhY2tAd29va3Vtei5haS5taXQuZWR1PgorCisJKiBzcmMvYmlzb24uc2ltcGxlIDogc3Vycm91bmQgYWxsIGRlY2xhcmF0aW9ucyBhbmQgKHJlbWFpbmluZykKKwl1c2VzIG9mIHl5bHMqIGFuZCB5eWxsb2Mgd2l0aCAjaWZkZWYgWVlMU1BfTkVFREVEIFRoaXMgd2lsbAorCXNpZ25pZmljYW50bHkgY3V0IGRvd24gb24gc3RhY2sgdXNhZ2UsIGFuZCBnZXRzIHJpZCBvZgorCXVudXNlZC12YXJpYWJsZSBtc2dzIGZyb20gR0NDLgorCisxOTkwLTAxLTMxICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9maWxlcy5jIChkb25lKSBbVk1TXTogRG9uJ3QgZGVsZXRlIGZpbGVzIHRoYXQgd2VyZW4ndCB1c2VkLgorCVtWTVNdOiBMZXQgdXNlciBvdmVycmlkZSBYUEZJTEUgYW5kIFhQRklMRTEuCisKKzE5OTAtMDEtMDMgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KKworCSogVmVyc2lvbiAxLjA3LgorCisxOTg5LTEyLTE2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9ncmFtLmMgKGR1bW15KTogTmV3IGZ1bmN0aW9uLgorCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRncmFtKTogRGV0ZWN0IGVycm9yIGlmIHR3byBjb25zZWMgYWN0aW9ucy4KKworMTk4OS0xMS0xNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgorCisJKiBzcmMvcmVkdWNlLmMgKHJlZHVjZV9ncmFtbWFyX3RhYmxlcyk6IFVwZGF0ZSBybGluZSBsaWtlIG90aGVyCisJdGFibGVzLgorCisJKiBNYWtlZmlsZSAoaW5zdGFsbCk6IEluc3RhbGwgdGhlIG1hbiBwYWdlLgorCisxOTg5LTExLTExICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3J1bGVfZGF0YSk6IFdyaXRlICNpZiBZWURFQlVHIGFyb3VuZCB5eXJsaW5lLgorCisxOTg5LTEwLTE4ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+CisKKwkqIFZlcnNpb24gMS4wNi4KKworCSogc3JjL3Ztc2dldGFyZ3MuYyAoZ2V0YXJncyk6IERvd25jYXNlIHNwZWNpZmllZCBvdXRwdXQgZmlsZSBuYW1lLgorCisxOTg5LTEwLTEzICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9yZWFkZXIuYyAocmVhZGdyYW0pOiBXYXJuIGlmIHRoZXJlIGlzIG5vIGRlZmF1bHQgdG8gdXNlIGZvcgorCSQkIGFuZCBvbmUgaXMgbmVlZGVkLgorCisxOTg5LTA5LTI5ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+CisKKwkqIFZlcnNpb24gMS4wNS4KKworCSogc3JjL3Ztc2dldGFyZ3MuaCAoZ2V0YXJncyk6IFByb2Nlc3Mgb3V0ZmlsZSBvcHRpb24uCisKKzE5ODktMDktMDggIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KKworCSogVmVyc2lvbiAxLjA0LgorCisJKiBzcmMvcmVhZGVyLmMgKHBhcnNlX3VuaW9uX2RlY2wpOiBDb3VudCBuZXdsaW5lcyBldmVuIGluCisJY29tbWVudHMuCisKKzE5ODktMDktMDYgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KKworCSogc3JjL2ZpbGVzLmMgKG9wZW5maWxlcyk6IHNob3J0X2Jhc2VfbGVuZ3RoIHdhcyBhbHdheXMgPT0KKwliYXNlX2xlbmd0aC4KKworMTk4OS0wOC0yNCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BhcHBsZS1ndW5raWVzLmFpLm1pdC5lZHU+CisKKwkqIFZlcnNpb24gMS4wMy4KKworCSogc3JjL2ZpbGVzLmMgKG9wZW5maWxlcyk6IFdyaXRlIG91dHB1dCBpbnRvIHNhbWUgZGlyIGFzIGlucHV0LCBieQorCWRlZmF1bHQuCisKKzE5ODktMDgtMjMgIEpheSBGZW5sYXNvbiAgPGhhY2tAZ251PgorCisJKiBNYWtlZmlsZTogSW5jbHVkZSBzeXN0ZW0uaCBpbiBiaXNvbi1kaXN0LnRhcgorCisxOTg5LTA4LTE1ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGhvYmJlcy5haS5taXQuZWR1PgorCisJKiB2ZXJzaW9uIDEuMDMuCisKKwkqIHNyYy9yZWFkZXIuYyAocmVhZGVyKTogT3V0cHV0IExUWVBFU1RSIHRvIGZkZWZpbmVzCisJb25seSBhZnRlciByZWFkaW5nIHRoZSBncmFtbWFyLgorCisxOTg5LTA4LTA2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9yZWFkZXIuYyAocmVhZF9kZWNsYXJhdGlvbnMpOiBQdXQgc3BhY2UgYmVmb3JlIGNvbW1lbnQKKwl0byBhdm9pZCBidWcgaW4gR3JlZW4gSGlsbHMgQyBjb21waWxlci4KKworMTk4OS0wNi0xOSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgorCisJKiBzcmMvYWxsb2NhdGUuYyAoeG1hbGxvYyk6IE5ldyBmdW5jdGlvbi4KKworMTk4OS0wNi0xNiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgorCisJKiBzcmMvYnVpbGQuY29tOiBDb21waWxlIGFuZCBsaW5rIHJlZHVjZS5jLgorCisxOTg5LTA2LTA5ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9yZWR1Y2UuYyAocmVkdWNlX2dyYW1tYXJfdGFibGVzKTogQWRqdXN0IHN0YXJ0X3N5bWJvbCB3aGVuCisJI3MgY2hhbmdlLgorCisxOTg5LTA1LTI3ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9yZWFkZXIuYyAoY29weV9kZWZpbml0aW9uLCBjb3B5X2d1YXJkKTogRG9uJ3Qgb2JqZWN0IHRvCisJXC1uZXdsaW5lIGluc2lkZSBzdHJpbmdzLgorCisxOTg5LTA1LTIyICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9maWxlcy5jIChvcGVuZmlsZXMpOiBBbHRlcm5hdGUgZmlsZSBuYW1lcyBmb3IgTVNET1MuCisJKG9wZW5fZXh0cmFfZmlsZXMpOiBMaWtld2lzZS4KKwkoZG9uZSk6IE9uIE1TRE9TLCB1bmxpbmsgdGVtcCBmaWxlcyBoZXJlLCBub3QgaW4gb3BlbmZpbGVzLgorCisJKiBzcmMvbWFjaGluZS5oIChCSVRTX1BFUl9XT1JEKTogMTYgb24gTVNET1MuCisJKE1BWFRBQkxFKTogTm93IGRlZmluZWQgaW4gdGhpcyBmaWxlLgorCisJKiBzcmMvc3lzdGVtLmg6IE5ldyBmaWxlIGluY2x1ZGVzIHN5c3RlbS1kZXBlbmRlbnQgaGVhZGVycy4KKwlBbGwgcmVsZXZhbnQgLmMgZmlsZXMgaW5jbHVkZSBpdC4KKworMTk4OS0wNC0yNyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgorCisJKiBzcmMvdmVyc2lvbi5jOiBWZXJzaW9uIDEuMDEuCisKKzE5ODktMDQtMTggIFJhbmRhbGwgU21pdGggIDxyYW5keUBhcHBsZS1ndW5raWVzLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9jb25mbGljdHMuYyAodG90YWxfY29uZmxpY3RzKTogRml4ZWQgdHlwbyBpbiB5YWNjIHN0eWxlCisJb3V0cHV0OyBtZW50aW9uIGNvbmZsaWN0cyBpZiA+IDAuCisKKzE5ODktMDQtMTUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KKworCSogc3JjL3JlYWRlci5jIChwYWNrc3ltYm9scyk6IFN0YXJ0IG5ldyBzeW1ib2xzIGFmdGVyIDI1Ni4KKworMTk4OS0wNC0xMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgorCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRlcik6IEFsd2F5cyBhc3NpZ24gY29kZSAyNTYgdG8gYGVycm9yJyB0b2tlbi4KKwlBbHdheXMgc2V0IGB0cmFuc2xhdGlvbnMnIHRvIDEgc28gdGhpcyBjb2RlIGdldHMgaGFuZGxlZC4KKwkqIHNyYy9iaXNvbi5zaW1wbGUgKFlZRVJSQ09ERSk6IERlZmluZSBpdC4KKworMTk4OS0wNC0xMSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgorCisJKiBzcmMvY29uZmxpY3RzLmM6IElmIEdOVSBDLCB1c2UgYnVpbHRpbiBhbGxvY2EuCisKKwkqIE1ha2VmaWxlIChpbnN0YWxsKTogRGVsZXRlIHBhcnNlciBmaWxlcyBiZWZvcmUgY29weWluZyB0aGVtLgorCisxOTg5LTAzLTMwICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9nZXRhcmdzLmMgKGdldGFyZ3MpOiBUdXJuIG9mZiBjaGVja2luZyBvZiBuYW1lIEJpc29uIHdhcworCWludm9rZWQgYnkuCisKKwkqIE1ha2VmaWxlIChkaXN0KTogSW5jbHVkZSBDaGFuZ2VMb2cgaW4gZGlzdHJpYi4KKworMTk4OS0wMy0yMyAgSmF5IEZlbmxhc29uICA8aGFja0BhcHBsZS1ndW5raWVzLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9MUjAuYyBzcmMvY2xvc3VyZS5jIHNyYy9jb25mbGljdHMuYyBzcmMvZGVyaXZlcy5jCisJc3JjL2ZpbGVzLmMgc3JjL2dldGFyZ3MuYyBzcmMvbGFsci5jIHNyYy9sZXguYyBzcmMvbWFpbi5jCisJc3JjL251bGxhYmxlLmMgc3JjL291dHB1dC5jIHNyYy9wcmludC5jIHNyYy9yZWFkZXIuYyBzcmMvcmVkdWNlLmMKKwlzcmMvc3ltdGFiLmMgc3JjL3dhcnNoYWxsLmM6IEEgZmlyc3QgcGFzcyBhdCBnZXR0aW5nIGdjYyAtV2FsbCB0bworCXNodXQgdXAuICBNb3N0bHkgZGVjbGFyZWQgZnVuY3Rpb25zIGFzIHZvaWQsIGV0Yy4KKworCSogc3JjL3JlZHVjZS5jIG1vdmVkICdleHRlcm4gaW50IGZpeGVkX291dGZpbGVzOycgaW50byBwcmludF9ub3RpY2VzCisJd2hlcmUgaXQgYmVsb25ncy4KKworMTk4OS0wMy0wMSAgUmFuZGFsbCBTbWl0aCAgPHJhbmR5QGFwcGxlLWd1bmtpZXMuYWkubWl0LmVkdT4KKworCSogc3JjL3R5cGVzLmgsIHNyYy9zeW10YWIuaCwgc3JjL3N0YXRlLmgsIHNyYy9uZXcuaCwKKwlzcmMvbWFjaGluZS5oLCBzcmMvbGV4LmgsIHNyYy9ncmFtLmgsIHNyYy9maWxlcy5oLCBzcmMvY2xvc3VyZS5jLAorCXNyYy92bXNnZXRhcmdzLmMsIHNyYy93YXJzaGFsbC5jLCBzcmMvc3ltdGFiLmMsIHNyYy9yZWR1Y2UuYywKKwlzcmMvcmVhZGVyLmMsIHNyYy9wcmludC5jLCBzcmMvb3V0cHV0LmMsIHNyYy9udWxsYWJsZS5jLAorCXNyYy9tYWluLmMsIHNyYy9sZXguYywgc3JjL2xhbHIuYywgc3JjL2dyYW0uYywgc3JjL2dldGFyZ3MuYywKKwlzcmMvZmlsZXMuYywgc3JjL2Rlcml2ZXMuYywgc3JjL2NvbmZsaWN0cy5jLCBzcmMvYWxsb2NhdGUuYywKKwlzcmMvTFIwLmMsIE1ha2VmaWxlLCBzcmMvYmlzb24uc2ltcGxlOiBDaGFuZ2VkIGNvcHlyaWdodCBub3RpY2VzCisJdG8gYmUgaW4gYWNjb3JkIHdpdGggdGhlIG5ldyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCSogQ09QWUlORzogTWFkZSBhIGxpbmsgdG8gdGhlIG5ldyBjb3B5aW5nIGZpbGUuCisKKzE5ODktMDItMjIgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KKworCSogc3JjL25ldy5oIChGUkVFKTogQWx0ZXJuYXRlIGRlZmluaXRpb24gZm9yIF9fU1REQ19fIGF2b2lkcyBlcnJvcgorCWlmIGBmcmVlJyByZXR1cm5zIHZvaWQuCisKKzE5ODktMDItMjEgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KKworCSogc3JjL3JlYWRlci5jIChyZWFkX2RlY2xhcmF0aW9ucyk6IERvdWJsZSBhIGAlJyBpbiBhIGZvcm1hdCBzdHJpbmcuCisJKGNvcHlfZGVmaW5pdGlvbiwgcGFyc2Vfc3RhcnRfZGVjbCwgcGFyc2VfdG9rZW5fZGVjbCk6IExpa2V3aXNlLgorCShwYXJzZV90eXBlX2RlY2wsIHBhcnNlX3VuaW9uX2RlY2wsIGNvcHlfZ3VhcmQsIHJlYWRncmFtLCBnZXRfdHlwZSkuCisJKGNvcHlfYWN0aW9uKTogY2hhbmdlIGEgYGZhdGFsJyB0byBgZmF0YWxzJy4KKworCSogc3JjL2xhbHIuYyAobWFwX2dvdG8pOiBJbml0aWFsIGhpZ2gtZW5kIG9mIGJpbmFyeSBzZWFyY2ggd2FzIG9mZgorCWJ5IDEuCisKKzE5ODktMDItMTggIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KKworCSogc3JjL2Jpc29uLnNpbXBsZSBbc3BhcmNdOiBJbmNsdWRlIGFsbG9jYS5oLgorCisxOTg5LTAyLTE1ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9yZWFkZXIuYyAocGFja3N5bWJvbHMpOiBXcml0ZSBkZWNsIG9mIHl5bHZhbCBpbnRvIC50YWIuaCBmaWxlLgorCisxOTg5LTAxLTI4ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGU6IEF2b2lkIGNvbW1lbnRzIG9uIGAjbGluZScgbGluZXMuCisKKwkqIHNyYy9yZWFkZXIuYyAoTFRZUEVTVFIpOiBSZWFycmFuZ2UgdG8gYXZvaWQgd2hpdGVzcGFjZSBhZnRlcgorCVwtbmV3bGluZS4KKworMTk4OS0wMS0wOSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgorCisJKiBzcmMvY29uZmxpY3RzLmMgKHRvdGFsX2NvbmZsaWN0cyk6IGlmIC15LCB1c2Ugb3V0cHV0IHN5bnRheAorCVBPU0lYIHdhbnRzLgorCSogc3JjL3JlZHVjZS5jIChwcmludF9ub3RpY2VzKTogbGlrZXdpc2UuCisKKwkqIHNyYy9sZXguYyAobGV4KTogSGFuZGxlIFx2LCBhbmQgXHggaGV4IGVzY2FwZXMuCisKKwkqIHNyYy9yZWFkZXIuYyAocmVhZGVyKTogTWVyZ2Ugb3V0cHV0X2x0eXBlIGludG8gaGVyZS4gIERvbid0CisJb3V0cHV0IFlZTFRZUEUgZGVmaW5pdGlvbiB0byAudGFiLmggZmlsZSB1bmxlc3MgdGhlIEAgY29uc3RydWN0IGlzCisJdXNlZC4KKworCSogc3JjL2Jpc29uLnNpbXBsZTogRGVmaW5lIFlZRVJST1IsIFlZQUJPUlQsIFlZQUNDRVBUIGhlcmUuCisJKiBzcmMvcmVhZGVyLmMgKG91dHB1dF9sdHlwZSk6IERvbid0IG91dHB1dCB0aGVtIGhlcmUuCisKKwkqIHNyYy9iaXNvbi5zaW1wbGU6IFlZREVCVUcgbm93IHNob3VsZCBiZSAwIG9yIDEuCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dCk6IEZvciBZWURFQlVHLCBvdXRwdXQgY29uZGl0aW9uYWwgdG8gZGVmaW5lIGl0CisJb25seSBpZiBub3QgcHJldmlvdXNseSBkZWZpbmVkLgorCisxOTg5LTAxLTAyICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGUgKHl5cGFyc2UpIFtZWVBVUkVdOiBBZGQgbG9jYWwgeXluZXJycy4KKwkoeXlkZWJ1Zyk6IERlY2xhcmUgZ2xvYmFsLCBidXQgZG9uJ3QgaW5pdGlhbGl6ZSwgcmVnYXJkbGVzcyBvZgorCVlZUFVSRS4KKwkoeXlwYXJzZSk6IERvbid0IGRlY2xhcmUgeXlkZWJ1ZyBoZXJlLgorCisxOTg4LTEyLTIyICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9yZWR1Y2UuYyAocHJpbnRfbm90aWNlcyk6IFR5cG8gaW4gbWVzc2FnZS4KKworMTk4OC0xMi0xMSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgorCisJKiBzcmMvb3V0cHV0LmMgKHBhY2tfdGFibGUpOiBGcmVlIG9ubHkgbm9uemVybyB0aGUgZWx0cyBvZiBmcm9tcyAmCisJdG9zLgorCisxOTg4LTEyLTA4ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9ncmFtLmMgKHJwcmVjc3ltKTogTmV3IHZlY3RvciBpbmRpY2F0ZXMgdGhlICVwcmVjIHN5bWJvbCBmb3IKKwlhIHJ1bGUuCisJKiBzcmMvcmVhZGVyLmMgKHBhY2tncmFtKTogQWxsb2NhdGUgaXQgYW5kIGZpbGwgaXQgaW4uCisJKiBzcmMvcmVkdWNlLmMgKGluYWNjZXNzYWJsZV9zeW1ib2xzKTogVXNlIGl0IHRvIHNldCBWMS4KKwkqIHNyYy9yZWR1Y2UuYyAocHJpbnRfcmVzdWx0cyk6IERvbid0IGNvbXBsYWluIGFib3V0IHVzZWxlc3MgdG9rZW4KKwlpZiBpdCdzIGluIFYxLgorCisxOTg4LTEyLTA1ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9tYWNoaW5lLmggKFJFU0VUQklULCBCSVRJU1NFVCk6IE5ldyBtYWNyb3MuCisJKFNFVEJJVCwgV09SRFNJWkUpOiBDaGFuZ2UgdG8gdXNlIEJJVFNfUEVSX1dPUkQuCisKKwkqIHNyYy9yZWR1Y2UuYzogTmV3IGZpbGUsIGJ5IERhdmlkIEJha2luLiAgUmVkdWNlcyB0aGUgZ3JhbW1hci4KKwkqIE1ha2VmaWxlOiBDb21waWxlIGl0LCBsaW5rIGl0LCBwdXQgaXQgaW4gZGlzdC4KKworCSogc3JjL21haW4uYyAobWFpbik6IENhbGwgcmVkdWNlX2dyYW1tYXIgKGluIHJlZHVjZS5jKS4KKworMTk4OC0xMS0xNyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgorCisJKiBzcmMvY29uZmxpY3RzLmM6IERvbid0IGRlY2xhcmUgYWxsb2NhIGlmIGluY2x1ZGluZyBhbGxvY2EuaC4KKworCSogc3JjL2Jpc29uLmNsZDogRGVmaW5lIHF1YWxpZmllcnMgYG5vbGluZXMnLCBgZGVidWcnLgorCSogc3JjL3Ztc2dldGFyZ3MuYyAoZ2V0YXJncyk6IEhhbmRsZSB0aGVtLgorCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9wcm9ncmFtKTogTm90aWNlIGBub2xpbmVzZmxhZycuCisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3BhcnNlcik6IFNpbXBsaWZ5IGxvZ2ljIGZvciAtbCBhbmQgI2xpbmUuCisJQXZvaWQgd3JpdGluZyBFT0YgY2hhciBpbnRvIG91dHB1dC4KKworMTk4OC0xMC0xMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgorCisJKiBJbXBsZW1lbnQgYC1sJyBvcHRpb24uCisJKiBzcmMvZ2V0b3B0LmM6IFNldCBmbGFnIGBub2xpbmVzZmxhZycuCisJKiBzcmMvcmVhZGVyLmMgKGNvcHlfZGVmaW5pdGlvbiwgcGFyc2VfdW5pb25fZGVjbCwgY29weV9ndWFyZCwKKwljb3B5X2FjdGlvbikgT2JleSB0aGF0IGZsYWc7IGRvbid0IGdlbmVyYXRlICNsaW5lLgorCSogc3JjL291dHB1dC5jIChvdXRwdXRfcGFyc2VyKTogRGlzY2FyZCAjbGluZSdzIHdoZW4gY29weWluZyB0aGUKKwlwYXJzZXIuCisKKzE5ODgtMDktMTIgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KKworCSogc3JjL3JlYWRlci5jIChjb3B5X2d1YXJkKTogRml4IGJyYWNlLWNvdW50aW5nIGZvcgorCWJyYWNlLXN1cnJvdW5kZWQgZ3VhcmQuCisKKzE5ODgtMDktMDggIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KKworCSogc3JjL2Jpc29uLnNpbXBsZTogQ29ycmVjdCBudW1iZXIgaW4gI2xpbmUgY29tbWFuZC4KKwkoeXlwYXJzZSk6IENhbGwgWVlBQk9SVCBpbnN0ZWFkIG9mIFlZRVJST1IsIGR1ZSB0byBsYXN0IGNoYW5nZSBpbgorCW91dHB1dF9sdHlwZS4KKworMTk4OC0wOS0wNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgorCisJKiBNYWtlZmlsZTogTmV3IHZhcmlhYmxlIExJQlMuICBBbHRlcm5hdGl2ZXMgZm9yIFVTRy4KKwkqIHNyYy9jb25mbGljdHMuYyBbVVNHXTogRGVmaW5lIGJjb3B5LgorCSogc3JjL3N5bXRhYi5jIFtVU0ddOiBJbmNsdWRlIHN0cmluZy5oIGluc3RlYWQgb2Ygc3RyaW5ncy5oLgorCisJKiBzcmMvY29uZmxpY3RzLmMgW3NwYXJjXTogSW5jbHVkZSBhbGxvY2EuaC4KKworMTk4OC0wOC0wMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgorCisJKiBzcmMvcmVhZGVyLmMgKHBhcnNlX3Rva2VuX2RlY2wpOiBJZ25vcmUgY29tbWFzLgorCisxOTg4LTA2LTI1ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9yZWFkZXIuYyAob3V0cHV0X2x0eXBlKTogTWFrZSBZWUVSUk9SIHlhY2MtY29tcGF0aWJsZSAobGlrZQorCVlZRkFJTCkuCisKKzE5ODgtMDYtMjQgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KKworCSogc3JjL2dldGFyZ3MuYyAoZ2V0YXJncyk6IC10IHNldHMgZGVidWdmbGFnLgorCUVsaW1pbmF0ZSB1cHBlciBjYXNlIGR1cGxpY2F0ZSBvcHRpb25zLgorCSogc3JjL291dHB1dC5jIChvdXRwdXQpOiBJZiBkZWJ1Z2ZsYWcsIG91dHB1dCBgI2RlZmluZSBZWURFQlVHJy4KKworMTk4OC0wNS0yNiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Bmcm9zdGVkLWZsYWtlcy5haS5taXQuZWR1PgorCisJKiBzcmMvYWxsb2NhdGUuYyAobWFsbG9jYXRlKTogTmV3IG5hbWUgZm9yIGBhbGxvY2F0ZScgKHdoaWNoIGxvc2VzCisJaW4gVk1TKS4gIENhbGxzIGNoYW5nZWQgaW4gTFIwLmMsIGNvbmZsaWN0cy5jLCBzeW10YWIuYywgbmV3LmguCisKKwkqIHNyYy9nZXRhcmdzLmMgKGdldGFyZ3MpOiBJZiBhcmd2WzBdIGlzICJ5YWNjIiwgc2V0IGZpeGVkX291dGZpbGVzLgorCisxOTg4LTA1LTE3ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGZyb3N0ZWQtZmxha2VzLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9jb25mbGljdHMuYzogRGVjbGFyZSBhbGxvY2EuCisJKiBzcmMvcmVhZGVyLmM6IERlY2xhcmUgcmVhbGxvYy4KKwkqIHNyYy93YXJzaGFsbC5jIChUQyk6IEZpeCBvbmUgYXJpdGhtZXRpYyBvcCB0aGF0IHdhcyBvbWl0dGVkIGxhc3QKKwl0aW1lLgorCisxOTg4LTA1LTA1ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGZyb3N0ZWQtZmxha2VzLmFpLm1pdC5lZHU+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGU6IENvbmRpdGlvbmFsaXplIG1vc3QgcmVmcyB0byB5eWxzcCBvbgorCVlZTFNQX05FRURFRC4KKwkqIHNyYy9yZWFkZXIuYyAoY29weV9ndWFyZCwgY29weV9hY3Rpb24pOiBOb3RpY2UgaWYgYEAnIGlzIHVzZWQuCisJKHJlYWRlcik6IElmIGl0IHdhcywgb3V0cHV0IGAjZGVmaW5lIFlZTFNQX05FRURFRCcuCisKKzE5ODgtMDQtMTggIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAcmljZS1rcmlzcGllcy5haS5taXQuZWR1PgorCisJKiBzcmMvYmlzb24uc2ltcGxlOiBOZXcgdmFyaWFibGUgeXluZXJyIGNvdW50cyBjYWxscyB0byB5eWVycm9yLgorCisJKiBzcmMvbGV4LmMgKGxleCwgY2FzZSAnPScpOiBVcGRhdGUgbGluZW5vIHdoZW4gc2tpcHBpbmcgYSBuZXdsaW5lLgorCisJKiBzcmMvcmVhZGVyLmMgKHBhcnNlX2V4cGVjdF9kZWNsKTogdW5nZXRjIHRoZSBjaGFyIHRoYXQgZW5kcyB0aGUKKwludW1iZXI7IGRvbid0IHJlYWQgYW55IGZ1cnRoZXIuICBUaGlzIGhhbmRsZXMgbXVsdGktbGluZSBjb21tZW50cworCXJpZ2h0IGFuZCBhdm9pZHMgaW5jb3JyZWN0IGxpbmVuby4KKworCSogc3JjL3JlYWRlci5jOiBEZWxldGUgZHVwbGljYXRlIGRlY2wgb2Ygc3ltdmFsLgorCisJKiBzcmMvd2Fyc2hhbGwuYyAoUlRDLCBUQyk6IENhc3QgcHRycyB0byBjaGFyICosIG5vdCB1bnNpZ25lZCwgZm9yCisJYXJpdGguCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2ctMjAxMiBiL0NoYW5nZUxvZy0yMDEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4OWU3NjAKLS0tIC9kZXYvbnVsbAorKysgYi9DaGFuZ2VMb2ctMjAxMgpAQCAtMCwwICsxLDI0Mjk0IEBACisyMDEyLTAxLTE1ICBKaW0gTWV5ZXJpbmcgIDxtZXllcmluZ0ByZWRoYXQuY29tPgorCisJbWFpbnQ6IGdldCBmZGwudGV4aSBmcm9tIGdudWxpYgorCSogYm9vdHN0cmFwLmNvbmYgKGdudWxpYl9tb2R1bGVzKTogQWRkIGZkbC4KKwkqIGRvYy9mZGwudGV4aTogUmVtb3ZlIGZpbGUuCisJKiBkb2MvLmdpdGlnbm9yZTogQWRkIGl0IGhlcmUuCisKKzIwMTItMDEtMTUgIEppbSBNZXllcmluZyAgPG1leWVyaW5nQHJlZGhhdC5jb20+CisKKwltYWludDogc3BlbGwgImZpbGUgc3lzdGVtIiBhcyB0d28gc2VwYXJhdGUgd29yZHMKKwkqIGRvYy9Eb3h5ZmlsZS5pbjogU3BlbGwgaXQgImZpbGUgc3lzdGVtIiwgdG8gYXZvaWQgYQorCSJtYWtlIHN5bnRheC1jaGVjayIgZmFpbHVyZS4KKworMjAxMi0wMS0xNSAgSmltIE1leWVyaW5nICA8bWV5ZXJpbmdAcmVkaGF0LmNvbT4KKworCW1haW50OiBhdm9pZCAidGhlIHRoZSIKKwkqIGRqZ3BwL1JFQURNRS5pbjogcy90aGUgdGhlL3RoZS8KKwkqIHNyYy9wYXJzZS1ncmFtLmMgKGxsb2NfZGVmYXVsdCk6IExpa2V3aXNlLgorCSogc3JjL3BhcnNlLWdyYW0ueSAobGxvY19kZWZhdWx0KTogTGlrZXdpc2UsIGFuZCByZW1vdmUgYQorCXRyYWlsaW5nIHNwYWNlLgorCisyMDEyLTAxLTEzICBKaW0gTWV5ZXJpbmcgIDxtZXllcmluZ0ByZWRoYXQuY29tPgorCisJYnVpbGQ6IGF2b2lkIHdhcm5pbmcgZnJvbSBjb3Zlcml0eSBhYm91dCBsYml0c2V0X2VsdF9maW5kCisJKiBsaWIvbGJpdHNldC5jIChsYml0c2V0X2VsdF9maW5kKTogUmVtb3ZlIHVubmVjZXNzYXJ5IHRlc3Qgb2YgImVsdCIsCisJYXQgYSBwb2ludCB3aGVyZSB3ZSBrbm93IGl0IGlzIG5vbi1OVUxMLCBkdWUgdG8gcHJpb3IgZGVyZWZlcmVuY2UuCisKKzIwMTItMDEtMTMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwltYWludDogZmFjdG9yIGNvcHlyaWdodCB5ZWFyLgorCSogY29uZmlndXJlLmFjOiBVc2UgJFBBQ0tBR0VfQ09QWVJJR0hUX1lFQVIgaW5zdGVhZCBvZiByZXBlYXRpbmcgaXQuCisKKzIwMTItMDEtMTMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwltYWludDogY2F0Y2ggbWlzc2luZyBnbnVsaWIgbWFjcm9zLgorCSogY29uZmlndXJlLmFjOiBBZGQgbTRfcGF0dGVybl9mb3JiaWQuCisKKzIwMTItMDEtMTEgIFRpbSBMYW5kc2NoZWlkdCAgPHRpbUB0aW0tbGFuZHNjaGVpZHQuZGU+CisKKwlqYXZhOiByZW1vdmUgdXNlZCB2YXJpYWJsZS4KKwkqIGRhdGEvbGFscjEuamF2YSAoeXlyZXN1bHQpOiByZW1vdmUsIHVudXNlZC4KKworMjAxMi0wMS0xMSAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlzY2FubmVyOiBmaXggdHlwby4KKwkqIHNyYy9zY2FuLXNrZWwubCAoQGApOiBzL2VtdHB5L2VtcHR5Ly4KKwlSZXBvcnRlZCBieSBUaW0gTGFuZHNjaGVpZHQuCisKKzIwMTItMDEtMDYgIEppbSBNZXllcmluZyAgPG1leWVyaW5nQHJlZGhhdC5jb20+CisKKwlidWlsZDogYXZvaWQgd2FybmluZ3MgYWJvdXQgc2V0LWJ1dC1ub3QtdXNlZCB2YXJpYWJsZXMKKwkqIGxpYi9iaXRzZXRfc3RhdHMuYyAoYml0c2V0X3N0YXRzX2xpc3QpOiBSZW1vdmUgZGVjbGFyYXRpb24KKwlhbmQgc2V0IG9mIHVudXNlZCBsb2NhbCwgInR5cGUiLgorCSogbGliL2ViaXRzZXQuYyAoZWJpdHNldF9pbml0KTogTGlrZXdpc2UsIGZvciAic2l6ZSIuCisJKiBsaWIvbGJpdHNldC5jIChsYml0c2V0X25vdCk6IExpa2V3aXNlLCBmb3IgImVsdCIuCisKKzIwMTEtMDgtMjEgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCXRlc3RzOiBhZGQgLXBlZGFudGljIGZvciAtLWVuYWJsZS1nY2Mtd2FybmluZ3MuCisJVGhpcyBzaG91bGQgaGVscCB0byBhdm9pZCBzb21lIHBvcnRhYmlsaXR5IHByb2JsZW1zLiAgRm9yIGV4YW1wbGUsCisJaXQgd291bGQgaGF2ZSByZXZlYWxlZCB0aGUgZW1wdHkgdW5pb25zIGZpeGVkIGJ5IHRoZSBsYXN0IHBhdGNoCisJKiBjb25maWd1cmUuYWMgKFdBUk5fQ0ZMQUdTX1RFU1RTLCBXQVJOX0NYWEZMQUdTX1RFU1QpOiBJbXBsZW1lbnQuCisJKiB0ZXN0cy9zeW5jbGluZXMuYXQgKEFUX1RFU1RfU1lOQ0xJTkUpOiBBdm9pZCAtcGVkYW50aWMgd2FybmluZworCWFib3V0IGFuIGVtcHR5IHRyYW5zbGF0aW9uIHVuaXQuCisKKzIwMTEtMDgtMjEgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCXRlc3RzOiBmaXggZW1wdHkgdW5pb25zLgorCUVtcHR5IHVuaW9ucyBhcmUgbm90IGFjY2VwdGVkIGJ5IHRoZSBJU08gQzk5IGdyYW1tYXIgb3IgYnkgYXQKKwlsZWFzdCBzb21lIHZlcnNpb25zIG9mIFN1biBTdHVkaW8uICBSZXBvcnRlZCBieSBXb2xmZ2FuZyBTLiBLZWNoZWwKKwlhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMTEtMDgvbXNnMDAwMDMuaHRtbD4uCisJKiBORVdTICgyLjUuMSk6IERvY3VtZW50IGZpeC4KKwkqIFRIQU5LUyAoV29sZmdhbmcgUy4gS2VjaGVsKTogQWRkLgorCSogdGVzdHMvZXhpc3RpbmcuYXQgKEdOVSBDaW0gR3JhbW1hcikKKwkoR05VIHBpYyAoR3JvZmYgMS4xOC4xKSBHcmFtbWFyLik6IFJlbW92ZSBlbXB0eSAldW5pb24uCisKKzIwMTEtMDctMTAgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCWJ1aWxkOiBhdm9pZCBZQUNDIHR5cG8gaW5oZXJpdGVkIGZyb20gQXV0b2NvbmYuCisJVGhlIHR5cG8gc2hvd3MgdXAgaW4gdGhlIGBjb25maWd1cmUgLS1oZWxwJyBvdXRwdXQuICBSZXBvcnRlZCBieQorCVcuQy5BLiBXaWpuZ2FhcmRzIGFuZCBQYXVsIEVnZ2VydCBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMTEtMDcvbXNnMDAwMDAuaHRtbD4uCisJKiBSRUFETUUtaGFja2luZyAoUmVsZWFzZSBQcm9jZWR1cmUpOiBSZW1pbmQgYWJvdXQgdXBkYXRpbmcKKwltYWludGFpbmVyIHRvb2xzIGJlZm9yZSBhIHJlbGVhc2UuCisJKiBUSEFOS1MgKFcuQy5BLiBXaWpuZ2FhcmRzKTogQWRkLgorCSogY29uZmlndXJlLmFjIChBQ19QUkVSRVEpOiBTZXQgdG8gMi42OCwgd2hpY2ggZml4ZXMgdGhlIFlBQ0MKKwl0eXBvLgorCisyMDExLTA3LTEwICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwlidWlsZDogY3JlYXRlIHh6IGluc3RlYWQgb2YgYnppcDIgdGFyYmFsbHMuCisJU3VnZ2VzdGVkIGJ5IEppbSBNZXllcmluZyBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMTEtMDYvbXNnMDAwMTIuaHRtbD4uCisJKiBSRUFETUUtaGFja2luZyAoUmVsZWFzZSBQcm9jZWR1cmUpOiBVcGRhdGUgZXhhbXBsZS4KKwkqIGNvbmZpZ3VyZS5hYyAoQU1fSU5JVF9BVVRPTUFLRSk6IFJlcGxhY2UgZGlzdC1iemlwMiB3aXRoCisJZGlzdC14ei4KKworMjAxMS0wNS0yOSAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJZG9jOiBjbGVhbiB1cCByZWZlcmVuY2VzIHRvIGBMb2NhdGlvbnMgT3ZlcnZpZXcnLgorCSogZG9jL2Jpc29uLnRleGluZm8gKExvY2F0aW9ucyBPdmVydmlldyk6IFJlbmFtZSBub2RlIHRvLi4uCisJKExvY2F0aW9ucyk6IC4uLiB0aGlzLCB3aGljaCBpcyBpdHMgc2VjdGlvbiBuYW1lLiAgVXBkYXRlIG1lbnVzIHRvCisJbWF0Y2ggdGhhdCBhbmQgbm90IHRvIHVzZSB0aGUgdGl0bGUgYFRyYWNraW5nIExvY2F0aW9ucycsIHdoaWNoIGlzCisJYSBkaWZmZXJlbnQgc2VjdGlvbi4KKworMjAxMS0wNS0yOSAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJZG9jOiBjbGVhbiB1cCByZWZlcmVuY2VzIHRvIGBUcmFja2luZyBMb2NhdGlvbnMnLgorCSogZG9jL2Jpc29uLnRleGluZm8gKExvY2F0aW9ucyk6IFJlbmFtZSBub2RlIHRvLi4uCisJKFRyYWNraW5nIExvY2F0aW9ucyk6IC4uLiB0aGlzLCB3aGljaCBpcyBpdHMgc2VjdGlvbiBuYW1lLCBhbmQKKwl1cGRhdGUgYWxsIGNyb3NzIHJlZmVyZW5jZXMuICBUaGUgdHJvdWJsZSBpcyB0aGF0IHRoZXJlIGlzIGFub3RoZXIKKwlub2RlIGFib3V0IGxvY2F0aW9ucy4gIEl0cyBzZWN0aW9uIG5hbWUgaXMgYExvY2F0aW9ucycsIHdoaWNoIHdhcworCWVhc2lseSBjb25mdXNlZCB3aXRoIHRoZSBub2RlIG5hbWUgb2YgdGhpcyBub2RlLiAgTW9yZW92ZXIsIGl0cworCW5vZGUgbmFtZSBpcyBgTG9jYXRpb25zIE92ZXJ2aWV3Jywgd2hpY2ggd2FzIG1pc3Rha2VubHkgdXNlZCB0bworCWxhYmVsIHNvbWUgY3Jvc3MgcmVmZXJlbmNlcyB0byB0aGlzIG5vZGUuCisKKzIwMTEtMDUtMjkgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCWRvYzogY2xlYW4gdXAgYE5hbWVkIFJlZmVyZW5jZXMnIGEgbGl0dGxlLgorCSogZG9jL2Jpc29uLnRleGluZm8gKE5hbWVkIFJlZmVyZW5jZXMpOiBSZW5hbWUgc2VjdGlvbiB0byBtYXRjaAorCXRoZSBub2RlIG5hbWUsIGFuZCB1cGRhdGUgYWxsIGNyb3NzIHJlZmVyZW5jZXMuICBEb24ndCB1c2UgdGhlCisJYWNyb255bXMgUkhTIGFuZCBMSFMgZ2l2ZW4gdGhhdCB3ZSBkb24ndCBleHBhbmQgdGhlbSBhbnl3aGVyZSBpbgorCXRoZSBtYW51YWwuICBUcnkgdG8gdXNlIEBzYW1wIGFuZCBAY29kZSBwcm9wZXJseS4gIE1lbnRpb24gdGhhdAorCW5hbWVkIHJlZmVyZW5jZXMgYXJlIGV4cGVyaW1lbnRhbCBhcyB3ZSd2ZSBhbHJlYWR5IHN0YXRlZCBpbiBORVdTLgorCShEZXN0cnVjdG9yIERlY2wpOiBFeHBhbmQgdGhlIG9ubHkgcmVtYWluaW5nIHVzZSBvZiBSSFMgb3IgTEhTLgorCisyMDExLTA1LTI5ICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwlkb2M6IG1vdGl2YXRlIG5hbWVkIHJlZmVyZW5jZXMuCisJU3VnZ2VzdGVkIGJ5IEhhbnMgQWJlcmcgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDExLTA1L21zZzAwMDA4Lmh0bWw+LgorCSogZG9jL2Jpc29uLnRleGluZm8gKE5hbWVkIFJlZmVyZW5jZXMpOiBFeHBsYWluIGJyaWVmbHkgaG93CisJdGhleSdyZSBiZXR0ZXIgdGhhbiB0aGUgdHJhZGl0aW9uYWwgcG9zaXRpb25hbCByZWZlcmVuY2VzLgorCisyMDExLTA1LTI5ICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwlkb2M6IGRpc2N1c3MgbmFtZWQgcmVmZXJlbmNlcyBhZnRlciBsb2NhdGlvbnMuCisJUmVwb3J0ZWQgYnkgSGFucyBBYmVyZyBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMTEtMDUvbXNnMDAwMDguaHRtbD4uCisJKiBORVdTICgyLjUuMSk6IERvY3VtZW50LgorCSogZG9jL2Jpc29uLnRleGluZm8gKE5hbWVkIFJlZmVyZW5jZXMpOiBCZWNhdXNlIGl0IGRpc2N1c3NlcworCWxvY2F0aW9ucyBpbiBhZGRpdGlvbiB0byBzZW1hbnRpYyB2YWx1ZXMsIG1vdmUgdGhpcyBzdWJzZWN0aW9uIG91dAorCW9mIHRoZSBzZWN0aW9uIGBEZWZpbmluZyBMYW5ndWFnZSBTZW1hbnRpY3MnLCB3aGVyZSBsb2NhdGlvbnMgaGF2ZQorCW5vdCB5ZXQgYmVlbiBpbnRyb2R1Y2VkLCB0byBiZSBhIG5ldyBzZWN0aW9uIGFmdGVyIHRoZSBmb2xsb3dpbmcKKwlzZWN0aW9uLCBgVHJhY2tpbmcgTG9jYXRpb25zJy4KKworMjAxMS0wNS0yOSAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJUHJlcGFyZSBmb3IgdGhlIHBvc3NpYmlsaXR5IG9mIGEgMi41LjEgcmVsZWFzZS4KKwkqIE5FV1MgKDIuNS4xKTogTmV3IGhlYWRpbmcuCisKKzIwMTEtMDUtMTQgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCVZlcnNpb24gMi41LgorCSogTkVXUyAoMi41KTogU2V0IGRhdGUuCisKKzIwMTEtMDUtMTQgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCURvbid0IHVzZSBJRl9MSU5UIGluIEJpc29uIHNvdXJjZXMuCisJSXQgY3JlYXRlcyB1bm5lY2Vzc2FyeSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBzb3VyY2VzIHRoYXQgQmlzb24KKwltYWludGFpbmVycyBidWlsZCBhbmQgdGVzdCAoZ2l2ZW4gdGhhdCBtYWludGFpbmVycyBub3JtYWxseQorCWNvbmZpZ3VyZSB3aXRoIC0tZW5hYmxlLWdjYy13YXJuaW5ncykgYW5kIHRoZSBzb3VyY2VzIHRoYXQgQmlzb24KKwl1c2VycyBidWlsZC4gIEluc3RlYWQsIHVzZSBQQUNJRllfQ0MsIHdoaWNoIGRvZXNuJ3QuICBUaGlzIGNoYW5nZQorCWZpeGVzIGNvbXBpbGVyIHdhcm5pbmdzIHJlcG9ydGVkIGJ5IFR5cyBMZWZlcmluZyBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDExLTA1L21zZzAwMDA0Lmh0bWw+LgorCSogY29uZmlndXJlLmFjOiBEb24ndCBBQ19ERUZJTkUgbGludCByZWdhcmRsZXNzIG9mIHRoZSBjb25maWd1cmUKKwlvcHRpb25zLiAgVGhpcyBjaGFuZ2UgYWZmZWN0cyBpbXBvcnRlZCBnbnVsaWIgc291cmNlcywgd2hlcmUKKwlJRl9MSU5UIHN0aWxsIGFwcGVhcnMgYW5kIGRlcGVuZHMgb24gbGludC4KKwkqIHNyYy9zY2FuLWdyYW0ubCwgc3JjL3NjYW4tc2tlbC5sOiBSZXBsYWNlIHVzZXMgb2YgSUZfTElOVCB3aXRoCisJUEFDSUZZX0NDLgorCSogc3JjL3N5c3RlbS5oIChJRl9MSU5UKTogUmVtb3ZlIGNwcCBtYWNyby4KKwkoUEFDSUZZX0NDKTogTmV3IGNwcCBtYWNyby4KKworMjAxMS0wNS0wMSAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJRml4IHByZWNlZGVuY2UgZm9yIGVuZCB0b2tlbi4KKwlTaW5jZSBCaXNvbiAyLjNiLCB3aGljaCByZXN0b3JlZCB0aGUgYWJpbGl0eSBvZiBwcmVjZWRlbmNlCisJZGlyZWN0aXZlcyB0byBhc3NpZ24gdXNlciB0b2tlbiBudW1iZXJzLCBkb2luZyBzbyBmb3IgdXNlciB0b2tlbgorCW51bWJlciAwIGhhcyBwcm9kdWNlZCBhbiBhc3NlcnRpb24gZmFpbHVyZS4KKwkqIE5FV1MgKDIuNSk6IERvY3VtZW50IGZpeC4KKwkqIHNyYy9zeW10YWIuYyAoc3ltYm9sX3VzZXJfdG9rZW5fbnVtYmVyX3NldCk6IEluIHRoZSBjYXNlIG9mIHRoZQorCWVuZCB0b2tlbiwgZG9uJ3QgZGVjcmVtZW50IG50b2tlbnMgaWYgaXQgd2FzIG5ldmVyIGluY3JlbWVudGVkLgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoVG9rZW4gbnVtYmVyIGluIHByZWNlZGVuY2UgZGVjbGFyYXRpb24pOgorCUV4dGVuZC4KKworMjAxMS0wNS0wMSAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJUHJlcGFyZSBmb3IgMi41IHJlbGVhc2UuCisJKiBORVdTICgyLjVfcmMxKTogUmVuYW1lIGJhY2sgdG8uLi4KKwkoMi41KTogLi4uIHRoaXMsIGFuZCB1bnNldCBkYXRlLgorCisyMDExLTA1LTAxICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwlWZXJzaW9uIDIuNV9yYzEuCisJKiBORVdTICgyLjUpOiBSZW5hbWUgdG8uLi4KKwkoMi41X3JjMSk6IC4uLiB0aGlzLCBhbmQgc2V0IGRhdGUuCisKKzIwMTEtMDUtMDEgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCVBhY2lmeSAtREdOVUxJQl9QT1NJWENIRUNLLgorCSogYm9vdHN0cmFwLmNvbmYgKGdudWxpYl9tb2R1bGVzKTogQWRkIGFsbCBtb2R1bGVzIHN1Z2dlc3RlZCBieQorCS1ER05VTElCX1BPU0lYQ0hFQ0suCisJKiBzcmMvZmlsZXMuYyAoZmlsZV9uYW1lX3NwbGl0KQorCSogc3JjL2dldGFyZ3MuYyAoZ2V0YXJncykKKwkqIHNyYy9sb2NhdGlvbi5jIChib3VuZGFyeV9zZXRfZnJvbV9zdHJpbmcpCisJKiBzcmMvb3V0cHV0LmMgKHRva2VuX2RlZmluaXRpb25zX291dHB1dCwgb3V0cHV0X3NrZWxldG9uKQorCSogc3JjL3BhcnNlLWdyYW0ueSAocHJvbG9ndWVfZGVjbGFyYXRpb24pCisJKiBzcmMvc2Nhbi1ncmFtLmwgKGhhbmRsZV9zeW5jbGluZSkKKwkqIHNyYy9zeW10YWIuYyAoc3ltYm9sX25ldyk6IFVzZSBtYnNjaHIgYW5kIG1ic3JjaHIgaW5zdGVhZCBvZgorCXN0cmNociBhbmQgc3RycmNoci4gIEluIHRoZSBjYXNlcyBvZiBjb21tYW5kLWxpbmUgb3B0aW9ucywgZmlsZQorCW5hbWVzLCBhbmQgdGh1cyBsb2NhdGlvbnMsIGZ1bmN0aW9uYWxpdHkgbWF5IGJlIGltcHJvdmVkLiAgSW4gdGhlCisJY2FzZSBvZiBzeW1ib2wgbmFtZXMsIHRoZXJlIHNob3VsZCBiZSBubyBmdW5jdGlvbmFsIGRpZmZlcmVuY2UgYXMKKwlhbGwgY2hhcmFjdGVycyBhcmUgQVNDSUksIHNvIHRoZSBpbnRlbmRlZCBiZW5lZml0IGlzIGp1c3Qgd2FybmluZworCXN1cHByZXNzaW9uLgorCisyMDExLTA1LTAxICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwkqIE5FV1MgKDIuNSk6IEZpeCBtaW5vciB0eXBvcy4KKworMjAxMS0wNS0wMSAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJZG9jOiBjbGVhbiB1cCBxdW90YXRpb24gc3R5bGUgaW4gTkVXUy4KKwkqIE5FV1MgKDIuNSk6IEZvciBtdWx0aS1jaGFyYWN0ZXIgdG9rZW5zIGluIGV4YW1wbGUgZ3JhbW1hciBydWxlcywKKwl1c2UgInRva2VuIiBub3QgJ3Rva2VuJy4gIEluIEVuZ2xpc2gsIHVzZSBhIGNvbnNpc3RlbnQgcXVvdGF0aW9uCisJc3R5bGU7IHdlIG1pZ2h0IGFzIHdlbGwgZm9sbG93IHRoZSBwcmVjZWRlbnQgc2VlbiBpbiBpbmZvIHBhZ2VzOgorCWBxdW90ZScgbm90ICJxdW90ZSIuCisKKzIwMTEtMDQtMTYgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCXRlc3RzOiBwYWNpZnkgZ2NjIDQuNi4wJ3MgLVd1bnVzZWQtYnV0LXNldC12YXJpYWJsZS4KKwlSZXBvcnRlZCBieSBKaW0gTWV5ZXJpbmcgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDExLTA0L21zZzAwMDAyLmh0bWw+LgorCSogdGVzdHMvYWN0aW9ucy5hdAorCShEZWZhdWx0ICVwcmludGVyIGFuZCAlZGVzdHJ1Y3RvciBmb3IgbWlkLXJ1bGUgdmFsdWVzKTogRGVmaW5lCisJWVlMTE9DX0RFRkFVTFQgc28gdGhhdCBpdCB1c2VzIGl0cyBSaHMgYXJndW1lbnQuCisKKzIwMTEtMDQtMTYgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCWdsci5jOiBvbWl0IHl5cmVzb2x2ZUxvY2F0aW9ucyB3aGVuIGxvY2F0aW9ucyBhcmUgZGlzYWJsZWQuCisJVGhpcyBwcmV2ZW50cyBnY2MgNC42LjAncyAtV3VudXNlZC1idXQtc2V0LXZhcmlhYmxlIGZyb20gd2FybmluZworCWFib3V0IHl5cmVzb2x2ZUxvY2F0aW9ucydzIGxvY2FsIHl5cmhzbG9jLiAgV2hlbiBsb2NhdGlvbnMgYXJlCisJZW5hYmxlZCwgdGhlcmUncyBubyBzdWNoIHdhcm5pbmcgYmVjYXVzZSBZWUxMT0NfREVGQVVMVCB0aGVuIHVzZXMKKwl5eXJoc2xvYy4gIFJlcG9ydGVkIGJ5IEppbSBNZXllcmluZyBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMTEtMDQvbXNnMDAwMDIuaHRtbD4uCisJKiBkYXRhL2dsci5jICh5eXJlc29sdmVMb2NhdGlvbnMpOiBPbWl0IGRlZmluaXRpb24gd2hlbiBsb2NhdGlvbnMKKwlhcmUgZGlzYWJsZWQuCisJKHl5cmVzb2x2ZVZhbHVlKTogT21pdCB5eXJlc29sdmVMb2NhdGlvbnMgaW52b2NhdGlvbiB3aGVuCisJbG9jYXRpb25zIGFyZSBkaXNhYmxlZC4KKworMjAxMS0wNC0xNiAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJZ251bGliLCBhdXRvY29uZjogdXBkYXRlLgorCSogUkVBRE1FLWhhY2tpbmcgKFVwZGF0aW5nIGEgc3VibW9kdWxlKTogR2l2ZSBhZHZpY2Ugb24gaG93IHRvCisJZGV0ZXJtaW5lIHRoZSB2ZXJzaW9ucyBvZiBnbnVsaWIgYW5kIGF1dG9jb25mIHRvIHdoaWNoIHdlIHNob3VsZAorCXVwZGF0ZS4KKwkoUmVsZWFzZSBQcm9jZWR1cmUpOiBOb3RlIHRoYXQgc3VibW9kdWxlcyBzaG91bGQgYmUgdXBkYXRlZC4KKwkqIGJvb3RzdHJhcC5jb25mIChnbnVsaWJfbW9kdWxlcyk6IFJlbmFtZSBwaXBlIHRvIHNwYXduLXBpcGUgYXMKKwlzdWdnZXN0ZWQgaW4gdXBkYXRlZCBnbnVsaWIgTkVXUy4KKwkqIGdudWxpYjogQ2hvb3NlIGEgc3RhYmxlIHNuYXBzaG90IGFjY29yZGluZyB0byBhZHZpY2UgaW4gQmlzb24ncworCVJFQURNRS1oYWNraW5nLgorCSogcG8vUE9URklMRVMuaW4gKGxpYi9waXBlLmMpOiBSZW5hbWUgdG8uLi4KKwkobGliL3NwYXduLXBpcGUuYyk6IC4uLiB0aGlzLgorCSogc3JjL291dHB1dC5jOiBVcGRhdGUgdG8gaW5jbHVkZSBzcGF3bi1waXBlLmguCisJKiBzdWJtb2R1bGVzL2F1dG9jb25mOiBVcGRhdGUgdG8gbGF0ZXN0IGZvciBpbXByb3ZlbWVudCBpbiBtNC5tNAorCXRoYXQgZXhjbHVkZXMgTTQgd2l0aCBidWdneSBzdHJzdHIuICBUaGUgb25seSBvdGhlciBjaGFuZ2VzIHRvCisJZmlsZXMgdGhhdCB3ZSB1c2UgYXJlIGNvcHlyaWdodCB1cGRhdGVzLgorCisyMDExLTA0LTA5ICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwlGaXggbWlzc2luZyB1cGRhdGVzIHRvIEdQTHYzLgorCVJlcG9ydGVkIGJ5IFR5cyBMZWZlcmluZyBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDExLTA0L21zZzAwMDAwLmh0bWw+LgorCSogc3JjL3ByaW50LXhtbC5jLCBzcmMvcHJpbnQteG1sLmg6IEluIHRoZXNlIGZpbGVzLgorCisyMDExLTAzLTI3ICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwlBZGQgLVdjb25mbGljdHMtc3IgYW5kIC1XY29uZmxpY3RzLXJyLgorCVRodXMsIGNvbmZsaWN0IHJlcG9ydHMgYXJlIG5vdyBhZmZlY3RlZCBieSAtV2Vycm9yIGFuZCAtV25vbmUKKwkodW5sZXNzICVleHBlY3Qgb3IgJWV4cGVjdC1yciBpcyBzcGVjaWZpZWQpLiAgUmVwb3J0ZWQgYnkgR2VvcmdlCisJTmV1bmVyIGF0CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAxMC0wOC9tc2cwMDAwMi5odG1sPi4KKwkqIE5FV1MgKDIuNSk6IERvY3VtZW50LgorCSogZG9jL2Jpc29uLnRleGluZm8gKEJpc29uIE9wdGlvbnMpOiBEb2N1bWVudC4KKwkqIHNyYy9jb21wbGFpbi5jLCBzcmMvY29tcGxhaW4uaCAoc2V0X3dhcm5pbmdfaXNzdWVkKTogRXhwb3J0CisJZnVuY3Rpb24uCisJKiBzcmMvY29uZmxpY3RzLmMgKGNvbmZsaWN0c19wcmludCk6IFN1cHByZXNzIGNvbmZsaWN0IHJlcG9ydAorCWJhc2VkIG9uIC1Xbm8tY29uZmxpY3RzLXNyIGFuZCAtV25vLWNvbmZsaWN0cy1yciwgYW5kIHRyZWF0CisJY29uZmxpY3RzIGFzIGVycm9ycyBpZiAtV2Vycm9yLgorCSogc3JjL2dldGFyZ3MuYyAod2FybmluZ3NfZmxhZyk6IEluaXRpYWxpemUgd2l0aAorCXdhcm5pbmdzX2NvbmZsaWN0c19zciBhbmQgd2FybmluZ3NfY29uZmxpY3RzX3JyIGFzIHdlbGwuCisJKHdhcm5pbmdzX2FyZ3MsIHdhcm5pbmdzX3R5cGVzKTogQWRkIGVudHJpZXMgZm9yCisJd2FybmluZ3NfY29uZmxpY3RzX3NyIGFuZCB3YXJuaW5nc19jb25mbGljdHNfcnIuCisJKHVzYWdlKTogVXBkYXRlLgorCSogc3JjL2dldGFyZ3MuaCAoZW51bSB3YXJuaW5ncyk6IEFkZCBlbnRyaWVzIGZvcgorCXdhcm5pbmdzX2NvbmZsaWN0c19zciBhbmQgd2FybmluZ3NfY29uZmxpY3RzX3JyLgorCSogdGVzdHMvY29uZmxpY3RzLmF0ICgtVyB2ZXJzdXMgJWV4cGVjdCBhbmQgJWV4cGVjdC1ycik6IE5ldyB0ZXN0CisJZ3JvdXAuCisJKiB0ZXN0cy9sb2NhbC5hdCAoQVRfQklTT05fQ0hFQ0tfTk9fWE1MKTogVXBkYXRlIG5vdyB0aGF0IHRoZQorCWNvbmZsaWN0IHJlcG9ydCBjYW4gcHJvZHVjZSBhICJ3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycyIKKwltZXNzYWdlLiAgQWxzbywgY2hlY2sgdGhhdCBzdGRlcnIgaXMgbm93IGZ1bGx5IHNjcnViYmVkIGJ5IC1Xbm9uZQorCXdoZW4gdGhlIGV4aXQgc3RhdHVzIGlzIDAuCisKKzIwMTEtMDMtMjcgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCVBhY2lmeSBtYWludGFpbmVyLWNoZWNrLXBvc2l4LgorCUFkZGluZyBjb21tYW5kLWxpbmUgb3B0aW9ucyBhZnRlciB0aGUgZ3JhbW1hciBmaWxlIG5hbWUgaXMgbm90CisJcGVybWl0dGVkLCBzbyBkaXNhYmxlIGNoZWNrcyB0aGF0IGRvIHRoYXQgd2hlbgorCW1haW50YWluZXItY2hlY2stcG9zaXggaXMgcnVubmluZy4KKwkqIHRlc3RzL2xvY2FsLmF0IChBVF9CSVNPTl9DSEVDS19OT19YTUwpOiBEb24ndCBydW4gdGhlCisJcHJvYmxlbWF0aWMgY2hlY2tzIHdoZW4gUE9TSVhMWV9DT1JSRUNUPTEuICBBbHNvLCBmb3IgcmVhZGFiaWxpdHksCisJcmVtb3ZlIGFuIHVubmVjZXNzYXJ5IG00X2lmLgorCisyMDExLTAzLTI3ICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwlBZGQgLVdvdGhlciBzbyAtV25vbmUgc3VwcHJlc3NlcyBhbGwgd2FybmluZ3MuCisJUmVwb3J0ZWQgYnkgR2VvcmdlIE5ldW5lciBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMTAtMDgvbXNnMDAwMDIuaHRtbD4uCisJKiBORVdTICgyLjUpOiBEb2N1bWVudC4KKwkqIFRIQU5LUyAoR2VvcmdlIE5ldW5lcik6IEFkZC4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChCaXNvbiBPcHRpb25zKTogRG9jdW1lbnQuCisJKiBzcmMvY29tcGxhaW4uYywgc3JjL2NvbXBsYWluLmgKKwkod2Fybl9hdCwgd2Fybl9hdF9pbmRlbnQsIHdhcm4pOiBTdXBwcmVzcyB3YXJuaW5nIGlmIC1Xbm8tb3RoZXIuCisJKG1pZHJ1bGVfdmFsdWVfYXQpOiBOZXcgd2FybmluZyBmdW5jdGlvbiwgc2ltaWxhciB0byB5YWNjX2F0IGluCisJdGhhdCBpdCdzIGNvbnRyb2xsZWQgYnkgaXRzIG93biB3YXJuaW5nIGNhdGVnb3J5LgorCSogc3JjL2dldGFyZ3MuYyAod2FybmluZ3NfZmxhZyk6IEluaXRpYWxpemUgdG8gd2FybmluZ3Nfb3RoZXIuCisJKHdhcm5pbmdzX2FyZ3MsIHdhcm5pbmdzX3R5cGVzKTogQWRkIGVudHJ5IGZvciB3YXJuaW5nc19vdGhlci4KKwkodXNhZ2UpOiBVcGRhdGUuCisJKiBzcmMvZ2V0YXJncy5oIChlbnVtIHdhcm5pbmdzKTogQWRkIGVudHJ5IGZvciB3YXJuaW5nc19vdGhlci4KKwkqIHNyYy9ncmFtLmMgKGdyYW1tYXJfcnVsZXNfdXNlbGVzc19yZXBvcnQpOiBJZiAtV25vLW90aGVyLCB0aGVuCisJZG9uJ3QgcHJpbnQgdXNlbGVzcyBydWxlcy4KKwkqIHNyYy9yZWFkZXIuYyAoc3ltYm9sX3Nob3VsZF9iZV91c2VkKTogUmF0aGVyIHRoYW4gYWRqdXN0aW5nIHRoZQorCXJldHVybiB2YWx1ZSBiYXNlZCBvbiB3aGV0aGVyIG1pZHJ1bGUgdmFsdWUgd2FybmluZ3MgYXJlIGVuYWJsZWQsCisJYWNjZXB0IGEgbmV3IHBhcmFtZXRlciBmb3IgdGVsbGluZyB0aGUgY2FsbGVyIHdoZXRoZXIgdHJ1ZSBpcworCWJlaW5nIHJldHVybmVkIGZvciBhIHBvdGVudGlhbCBtaWRydWxlIHdhcm5pbmcuCisJKGdyYW1tYXJfcnVsZV9jaGVjayk6IFVzZSBtaWRydWxlX3ZhbHVlX2F0IGZvciBtaWRydWxlIHZhbHVlCisJd2FybmluZ3MsIGFuZCBjb250aW51ZSB0byB1c2Ugd2Fybl9hdCBmb3IgYWxsIG90aGVyIHdhcm5pbmdzLiAgTGV0CisJdGhlbSBjaGVjayB3aGV0aGVyIHRoZSB3YXJuaW5ncyBhcmUgZW5hYmxlZC4KKwkqIHRlc3RzL2xvY2FsLmF0IChBVF9CSVNPTl9DSEVDSyk6IFVwZGF0ZSBkb2N1bWVudGF0aW9uLgorCShBVF9CSVNPTl9DSEVDS19OT19YTUwpOiBDaGVjayB0aGF0IC1Xbm9uZSBhbmQgLS13YXJuaW5ncz1ub25lCisJZGlzYWJsZSBhbGwgd2FybmluZ3MgZXhlcmNpc2VkIGluIHRoZSB0ZXN0IHN1aXRlLgorCisyMDExLTAzLTI3ICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwlEb24ndCBsZXQgLVdub25lIGRpc2FibGUgLVdlcnJvci4KKwlEaXNjdXNzZWQgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAxMC0wOC9tc2cwMDAwOS5odG1sPi4KKwkqIE5FV1MgKDIuNSk6IERvY3VtZW50LgorCSogc3JjL2dldGFyZ3MuYyAoZmxhZ3NfYXJnbWF0Y2gpOiBBY2NlcHQgYSBuZXcgYXJndW1lbnQgdGhhdAorCXNwZWNpZmllcyB3aGF0IGZsYWdzICJhbGwiIGFuZCB0aHVzICJub25lIiBhZmZlY3QuCisJKEZMQUdTX0FSR01BVENIKTogVXBkYXRlIGZsYWdzX2FyZ21hdGNoIGludm9jYXRpb24uCisJKiB0ZXN0cy9pbnB1dC5hdCAoLVdlcnJvciBpcyBub3QgYWZmZWN0ZWQgYnkgLVdub25lIGFuZCAtV2FsbCk6CisJTmV3IHRlc3QgZ3JvdXAuCisKKzIwMTEtMDMtMjcgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCSogTkVXUyAoMi41KTogRG9jdW1lbnQgZml4IGZvciAtV25vLUNBVEVHT1JZLgorCisyMDA4LTExLTIxICBEaS1hbiBKYW4gIDxkaWFuakBmcmVlc2hlbGwub3JnPgorCisJSW1wbGVtZW50IG5vLVhYWCBhcmd1bWVudHMgZm9yIC0td2FybmluZ3MsIC0tcmVwb3J0LCAtLXRyYWNlLgorCSogc3JjL2dldGFyZ3MuYyAoZmxhZ3NfYXJnbWF0Y2gpOiBIYW5kbGVzIG5vLVhYWC4KKwlGaXggdHlwbyBpbiBkb3h5Z2VuIGNvbW1lbnQuCisKKzIwMTEtMDMtMjAgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCWRvYzogZml4IGNvbmZ1c2luZyBjaXRhdGlvbiBvZiBMQUMgcHVibGljYXRpb24uCisJU3VnZ2VzdGVkIGJ5IEFraW0gRGVtYWlsbGUuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoTEFDKTogSGVyZS4KKworMjAxMS0wMy0yMCAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJbHIuZGVmYXVsdC1yZWR1Y3Rpb25zOiByZW5hbWUgImZ1bGwiIHZhbHVlIHRvICJtb3N0Ii4KKwlVbmxpa2UgImNvbnNpc3RlbnQiIGFuZCAiYWNjZXB0aW5nIiwgImZ1bGwiIGRvZXNuJ3QgYW5zd2VyIHRoZQorCXF1ZXN0aW9uIG9mICJ3aGljaCBzdGF0ZXMiLgorCSogZG9jL2Jpc29uLnRleGluZm8gKCVkZWZpbmUgU3VtbWFyeSk6IFVwZGF0ZS4KKwkoRGVmYXVsdCBSZWR1Y3Rpb25zKTogVXBkYXRlLgorCSogc3JjL3ByaW50LmMgKHByaW50X3JlZHVjdGlvbnMpOiBVcGRhdGUuCisJKiBzcmMvcmVhZGVyLmMgKHByZXBhcmVfcGVyY2VudF9kZWZpbmVfZnJvbnRfZW5kX3ZhcmlhYmxlcyk6CisJVXBkYXRlLgorCSogc3JjL3RhYmxlcy5jIChhY3Rpb25fcm93KTogVXBkYXRlLgorCSogdGVzdHMvaW5wdXQuYXQgKCVkZWZpbmUgZW51bSB2YXJpYWJsZXMpOiBVcGRhdGUuCisJKiB0ZXN0cy9yZWR1Y2UuYXQgKCVkZWZpbmUgbHIuZGVmYXVsdC1yZWR1Y3Rpb25zKTogVXBkYXRlLgorCisyMDExLTAzLTEzICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwkqIHNyYy9wYXJzZS1ncmFtLmMsIHNyYy9wYXJzZS1ncmFtLmg6IFJlZ2VuZXJhdGUuCisKKzIwMTEtMDMtMDkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwluYW1lZCByZWZlcmVuY2VzOiBmaXggZG91YmxlIGZyZWUuCisJSW4gYHJoc1tuYW1lXTogImEiIHwgImIiJywgZG8gbm90IGZyZWUgIm5hbWUiIHR3aWNlLgorCVJlcG9ydGVkIGJ5IFR5cyBMZWZlcmluZy4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDEwLTA2L21zZzAwMDAyLmh0bWw+CisJKiBzcmMvbmFtZWQtcmVmLmgsIHNyYy9uYW1lZC1yZWYuYyAobmFtZWRfcmVmX2NvcHkpOiBOZXcuCisJKiBzcmMvcGFyc2UtZ3JhbS55IChjdXJyZW50X2xocyk6IFJlbmFtZSBhcy4uLgorCShjdXJyZW50X2xoc19zeW1ib2wpOiB0aGlzLgorCShjdXJyZW50X2xocyk6IE5ldyBmdW5jdGlvbi4gIFVzZSBpdCB0byBmcmVlIHRoZSBjdXJyZW50IGxocworCW5hbWVkIHJlZmVyZW5jZS4KKwkqIHNyYy9yZWFkZXIuYzogQmluZCBsaHMgdG8gYSBjb3B5IG9mIHRoZSBjdXJyZW50IG5hbWVkIHJlZmVyZW5jZS4KKwkqIHNyYy9zeW1saXN0LmM6IFJlbHkgb24gZnJlZSAoMCkgYmVpbmcgdmFsaWQuCisJKiB0ZXN0cy9uYW1lZC1yZWZzLmF0OiBUZXN0IHRoaXMuCisKKzIwMTEtMDMtMDkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwl0ZXN0czogc3R5bGUgY2hhbmdlcy4KKwkqIHRlc3RzL25hbWVkLXJlZnMuYXQgKFJlZHVuZGFudCB3b3JkcyBpbiBMSFMgYnJhY2tldHMpCisJKFVucmVzb2x2ZWQgcmVmZXJlbmNlcyk6IGhlcmUuCisKKzIwMTEtMDMtMDYgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCWphdmE6IGZpeCBwYXJzZXIgdHJhY2luZyBidWcuCisJKiBORVdTICgyLjUpOiBEb2N1bWVudC4KKwkqIGRhdGEvbGFscjEuamF2YSAoWVlQYXJzZXI6OllZU3RhY2s6OnByaW50KTogRG9uJ3Qgc2tpcCB0b3AKKwllbGVtZW50LgorCisyMDExLTAzLTA2ICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwlqYXZhOiBmaW5pc2ggZml4aW5nIHBhcnNlciBzdGFjayBwb3BwaW5nIGJ1Zy4KKwkqIE5FV1MgKDIuNSk6IERvY3VtZW50LgorCSogZGF0YS9sYWxyMS5qYXZhIChZWVBhcnNlcjo6WVlTdGFjazo6cG9wKTogRml4IG9mZi1ieS1vbmUgZXJyb3IKKwlpbiBjbGVhcmluZyB0aGUgbG9jYXRpb24gc3RhY2suICBBbHNvIGZpeCBwb3AgZnVuY3Rpb24gdGhhdAorCWFjY2VwdHMgbm8gYXJndW1lbnRzLgorCisyMDExLTAzLTA2ICBBbmdlbG8gQm9yc290dGkgIDxhbmdlbG8uYm9yc290dGlAZ21haWwuY29tPiAgKHRpbnkgY2hhbmdlKQorCisJamF2YTogZml4IHBhcnNlciBzdGFjayBwb3BwaW5nIGJ1Zy4KKwlSZXBvcnRlZCBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMTEtMDIvbXNnMDAwMDUuaHRtbD4uCisJKiBUSEFOS1MgKEFuZ2VsbyBCb3Jzb3R0aSk6IEFkZC4KKwkqIGRhdGEvbGFscjEuamF2YSAoWVlQYXJzZXI6OllZU3RhY2s6OnBvcCk6IEZpeCBvZmYtYnktb25lIGVycm9yCisJaW4gY2xlYXJpbmcgdGhlIHZhbHVlIHN0YWNrLiAgUHJldmlvdXNseSwgdGhlIHRvcCBlbGVtZW50IG9mIHRoZQorCXN0YWNrIHdhc24ndCBjbGVhcmVkIGFuZCBzbyB0aGUgdmFsdWUgd2FzIG5vdCBnYXJiYWdlIGNvbGxlY3RlZC4KKworMjAxMS0wMy0wNiAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJZG9jOiBjaXRlIHB1YmxpY2F0aW9uIGZvciBMQUMuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoTEFDKTogSGVyZS4KKworMjAxMS0wMy0wNiAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJZG9jOiBjbGVhbiB1cCB0ZXJtaW5vbG9neSBmb3IgbXlzdGVyaW91cyBjb25mbGljdHMuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoTXlzdGVyeSBDb25mbGljdHMpOiBSZW5hbWUgbm9kZSB0by4uLgorCShNeXN0ZXJpb3VzIENvbmZsaWN0cyk6IC4uLiB0aGlzLCB3aGljaCBpcyBhbHJlYWR5IHRoZSBzZWN0aW9uCisJdGl0bGUgYW5kIHRoZSBuYW1lIHVzZWQgaW4gdGhlIGluZGV4LiAgVXBkYXRlIGFsbCBjcm9zcy1yZWZlcmVuY2VzCisJdG8gdGhpcyBub2RlLiAgQWxzbywgZG9uJ3QgaW1wbHkgdGhhdCBSL1IgY29uZmxpY3RzIGFyZSB0aGUgb25seQorCWtpbmQgb2YgbXlzdGVyaW91cyBjb25mbGljdC4KKworMjAxMS0wMy0wNiAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJbHIuZGVmYXVsdC1yZWR1Y3Rpb25zOiByZW5hbWUgImFsbCIgdmFsdWUgdG8gImZ1bGwiLgorCVN0YXRlcyB0aGF0IHNoaWZ0IHRoZSBlcnJvciB0b2tlbiBkbyBub3QgaGF2ZSBkZWZhdWx0IHJlZHVjdGlvbnMsCisJYW5kIEdMUiBkaXNhYmxlcyBzb21lIGRlZmF1bHQgcmVkdWN0aW9ucywgc28gImFsbCIgd2FzIGEgbWlzbm9tZXIuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoJWRlZmluZSBTdW1tYXJ5KTogVXBkYXRlLgorCShEZWZhdWx0IFJlZHVjdGlvbnMpOiBVcGRhdGUuCisJKiBzcmMvcHJpbnQuYyAocHJpbnRfcmVkdWN0aW9ucyk6IFVwZGF0ZS4KKwkqIHNyYy9yZWFkZXIuYyAocHJlcGFyZV9wZXJjZW50X2RlZmluZV9mcm9udF9lbmRfdmFyaWFibGVzKToKKwlVcGRhdGUuCisJKiBzcmMvdGFibGVzLmMgKGFjdGlvbl9yb3cpOiBVcGRhdGUuCisJKiB0ZXN0cy9pbnB1dC5hdCAoJWRlZmluZSBlbnVtIHZhcmlhYmxlcyk6IFVwZGF0ZS4KKwkqIHRlc3RzL3JlZHVjZS5hdCAoJWRlZmluZSBsci5kZWZhdWx0LXJlZHVjdGlvbnMpOiBVcGRhdGUuCisKKzIwMTEtMDMtMDYgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCWRvYzogY3JlYXRlIGEgbmV3IFR1bmluZyBMUiBzZWN0aW9uIGluIHRoZSBtYW51YWwuCisJQW5kIGNsZWFuIHVwIGFsbCBvdGhlciBkb2N1bWVudGF0aW9uIG9mIHRoZSBmZWF0dXJlcyBkZXNjcmliZWQKKwl0aGVyZS4KKwkqIE5FV1MgKDIuNSk6IFR3ZWFrIHdvcmRpbmcgb2YgbHIudHlwZSBhbmQgcGFyc2UubGFjIGVudHJpZXMgYQorCWJpdCwgdXBkYXRlIHRoZSBjcm9zcy1yZWZlcmVuY2VzIHRvIHRoZSBtYW51YWwsIGFuZCBwb2ludCBvdXQgdGhhdAorCUxBQyBoYXMgY2F2ZWF0cy4gIERvbid0IGJlIHNvIGFkYW1hbnQgdGhhdCBJRUxSK0xBQz1jYW5vbmljYWwgTFIuCisJVGhhdCBpcywgYXMgdGhlIHJlZmVyZW5jZWQgc2VjdGlvbiBpbiB0aGUgbWFudWFsIGRvY3VtZW50cywgTEFDCisJZG9lcyBub3QgZml4IGluZmluaXRlIHBhcnNpbmcgbG9vcHMgb24gc3ludGF4IGVycm9ycy4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvOiBDb25zaXN0ZW50bHkgZHJvcCB0aGUgIigxKSIgc3VmZml4IGZyb20gTEFMUiwKKwlJRUxSLCBhbmQgTFIgaW4gQGNpbmRleC4KKwkoJWRlZmluZSBTdW1tYXJ5KTogQ29uZGVuc2UgdGhlIGVudHJpZXMgZm9yIGxyLmRlZmF1bHQtcmVkdWN0aW9ucywKKwlsci5rZWVwLXVucmVhY2hhYmxlLXN0YXRlcywgbHIudHlwZSwgYW5kIHBhcnNlLmxhYyBpbnRvIGJyaWVmCisJc3VtbWFyaWVzLCBhbmQgY3Jvc3MtcmVmZXJlbmNlIHRoZSBhcHByb3ByaWF0ZSBzdWJzZWN0aW9ucyBvZgorCVR1bmluZyBMUi4gIEZvciBwYXJzZS5sYWMsIG1lbnRpb24gdGhhdCBpdCdzIG9ubHkgaW1wbGVtZW50ZWQgZm9yCisJZGV0ZXJtaW5pc3RpYyBwYXJzZXJzIGluIEMuCisJKEVycm9yIFJlcG9ydGluZyk6IFdoZW4gbWVudGlvbmluZyAlZXJyb3ItdmVyYm9zZSwgbWVudGlvbiBMQUMsCisJYW5kIGFkZCBjcm9zcy1yZWZlcmVuY2UgdG8gdGhlIExBQyBzZWN0aW9uLgorCShUdW5pbmcgTFIpOiBOZXcgc2VjdGlvbiB3aXRoIGFuIGV4dGVuZGVkIHZlcnNpb24gb2YgdGhlCisJZG9jdW1lbnRhdGlvbiByZW1vdmVkIGZyb20gJWRlZmluZSBTdW1tYXJ5LiAgQ2hhbmdlIGFsbAorCWNyb3NzLXJlZmVyZW5jZXMgaW4gdGhlIG1hbnVhbCB0byBwb2ludCBoZXJlIGluc3RlYWQgb2YgdGhlcmUuCisJKENhbGMrKyBQYXJzZXIpOiBXaGVuIG1lbnRpb25pbmcgJWVycm9yLXZlcmJvc2UsIG1lbnRpb24gTEFDLCBhbmQKKwlhZGQgY3Jvc3MtcmVmZXJlbmNlIHRvIHRoZSBMQUMgc2VjdGlvbi4KKwkoVGFibGUgb2YgU3ltYm9scyk6IEluICVlcnJvci12ZXJib3NlIGFuZCBZWUVSUk9SX1ZFUkJPU0UgZW50cmllcywKKwlhZGQgY3Jvc3MtcmVmZXJlbmNlcyB0byBFcnJvciBSZXBvcnRpbmcuCisJKEdsb3NzYXJ5KTogQ2FwaXRhbGl6ZSBlbnRyeSB0aXRsZXMgY29uc2lzdGVudGx5LiAgQWRkIGRlZmluaXRpb25zCisJZm9yICJkZWZhdWx0ZWQgc3RhdGUiIGFuZCAidW5yZWFjaGFibGUgc3RhdGUiLiAgRXhwYW5kIElFTFIKKwlhY3JvbnltIGluIElFTFIncyBlbnRyeS4KKworMjAxMS0wMi0yMCAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJZG9jOiBhZGQgYmlibGlvZ3JhcGh5IHRvIG1hbnVhbC4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChNeXN0ZXJ5IENvbmZsaWN0cyk6IENyb3NzLXJlZmVyZW5jZQorCWJpYmxpb2dyYXBoeSBpbnN0ZWFkIG9mIGNpdGluZyBwdWJsaWNhdGlvbnMgZGlyZWN0bHkuCisJKEdlbmVyYWxpemVkIExSIFBhcnNpbmcpOiBMaWtld2lzZS4KKwkoQmlibGlvZ3JhcGh5KTogTmV3IHNlY3Rpb24uICBOb3QgYWxsIGVudHJpZXMgYXJlIGNyb3NzLXJlZmVyZW5jZWQKKwl5ZXQsIGJ1dCB0aGF0IHdpbGwgY29tZSBpbiBmdXR1cmUgcGF0Y2hlcy4KKworMjAxMS0wMi0xOSAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJamF2YTogdGVzdCBhbmQgZG9jdW1lbnQgcHJldmlvdXMgYnVnIGZpeC4KKwkqIE5FV1MgKDIuNSk6IERvY3VtZW50IGl0LgorCSogdGVzdHMvamF2YS5hdCAoX0FUX0RBVEFfSkFWQV9DQUxDX1kpOiBUbyBvbmUgb2YgdGhlIHl5ZXJyb3IKKwlpbnZvY2F0aW9ucywgcGFzcyBhIGxvY2F0aW9uIHRoYXQgc3BhbnMgbXVsdGlwbGUgdG9rZW5zLiAgQ2hhbmdlCisJeXllcnJvciB0byByZXBvcnQgYWxsIG9mIGEgbG9jYXRpb24gcmF0aGVyIHRoYW4ganVzdCB0aGUgYmVnaW4KKwlwb3NpdGlvbi4gIEV4dGVuZCB5eWxleCBhbmQgUG9zaXRpb24gdG8gY291bnQgdG9rZW5zIG9uIGEgbGluZS4KKwlSZW1vdmUgZ2V0SGFzaENvZGUgYXMgaXQncyB1bnVzZWQuICBVcGRhdGUgYWxsIGV4cGVjdGVkIG91dHB1dC4KKworMjAxMS0wMi0xOSAgQmVybmQgS2llZmVyICA8a2llZmVyQGRma2kuZGU+ICAodGlueSBjaGFuZ2UpCisKKwlqYXZhOiBmaXggbG9jYXRpb24gaGFuZGxpbmcgYnVnLgorCVJlcG9ydGVkIGF0CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMTEtMDIvbXNnMDAwMDUuaHRtbD4uCisJKiBkYXRhL2xhbHIxLmphdmEgKFlZUGFyc2VyOjp5eWxsb2MpOiBGb3Igbm9uLWVtcHR5IFJIUywgZml4CisJcmV2ZXJzZWQgYWNjZXNzIHRvIGxvY2F0aW9uIHN0YWNrLgorCSogVEhBTktTIChCZXJuZCBLaWVmZXIpOiBBZGQuCisKKzIwMTAtMDUtMTEgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJZG9jOiBwbGVhc2UgRW1hY3MuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoTG9jYWwgVmFyaWFibGVzKTogTW92ZSB0aGlzIGFmdGVyIHRoZQorCUxvY2FsV29yZHMsIHNpbmNlIHRoZSBsYXR0ZXIgYXJlIGxvb2tlZCBmb3IgaW4gdGhlIHdob2xlIGRvY3VtZW50LAorCXdoaWxlIHRoZSBmb3JtZXIgYXJlIGxvb2tlZCBmb3Igb25seSBhdCBpdHMgZW5kLgorCVJlcXVpcmUgYW1lcmljYW4gc3BlbGwgY2hlY2tpbmcuCisKKzIwMTEtMDItMDYgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCWRvYzogY2xlYW4gdXAgbmV3IHN1YnNlY3Rpb25zIGluIG1hbnVhbC4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvICglZGVmaW5lIFN1bW1hcnkpOiBSZXdvcmQgc28gaXQgcmVhZHMgd2VsbCBhcworCWEgc2VwYXJhdGUgc2VjdGlvbi4gIEZvciBleGFtcGxlLCBhZGQgYW4gaW50cm8sIGFuZCBtb3ZlIG1vc3Qgb2YKKwl0aGUgdGV4dCBvdXRzaWRlIG9mIHRoZSBAZGVmZm4gc28gaXQgaXMgbm90IGluZGVudGVkIHNvIGZhci4KKwkoJWNvZGUgU3VtbWFyeSk6IExpa2V3aXNlLgorCShUYWJsZSBvZiBTeW1ib2xzKTogUmV3b3JkICVjb2RlIGVudHJ5IHRvIG1hdGNoIHRoZSAlY29kZSBlbnRyeSBpbgorCURlY2wgU3VtbWFyeS4KKworMjAxMS0wMi0wNiAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJZG9jOiBmaW5pc2ggc3BsaXR0aW5nIGFwYXJ0IHRoZSBtYW51YWwncyBEZWNsIFN1bW1hcnkgc2VjdGlvbi4KKwlTdWdnZXN0ZWQgYnkgQWtpbSBEZW1haWxsZSBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA5LTA1L21zZzAwMDEzLmh0bWw+LgorCSogZG9jL2Jpc29uLnRleGluZm8gKERlY2wgU3VtbWFyeSk6IEV4dHJhY3QgbW9zdCBvZiB0aGUgJWRlZmluZQorCWVudHJ5IGludG8uLi4KKwkoJWRlZmluZSBTdW1tYXJ5KTogLi4uIHRoaXMgbmV3IHN1YnNlY3Rpb24sIGFuZCB1cGRhdGUgYWxsCisJY3Jvc3MtcmVmZXJlbmNlcy4gIEZvciByZWFkYWJpbGl0eSBvZiB0aGUgcGF0Y2hlcywgcmV3cml0aW5nIG9mCisJdGhlIHRleHQgc28gaXQgbWFrZXMgc2Vuc2UgYXMgYSBzZXBhcmF0ZSBzdWJzZWN0aW9uIHdpbGwgY29tZSBpbiBhCisJbGF0ZXIgcGF0Y2guICBNb3Jlb3ZlciwgdGhlIG1ham9yaXR5IG9mIHRoZSB0ZXh0IGRlc2NyaWJpbmcgdGhlCisJdmFyaW91cyBuZXcgTFIgZmVhdHVyZXMgc2hvdWxkIGxpa2VseSBtb3ZlIHRvIGFub3RoZXIgbmV3IHNlY3Rpb24KKwlzb21ld2hlcmUuCisKKzIwMTEtMDItMDYgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCWRvYzogYmVnaW4gdG8gc3BsaXQgYXBhcnQgdGhlIG1hbnVhbCdzIERlY2wgU3VtbWFyeSBzZWN0aW9uLgorCURpc2N1c3NlZCBpbiB0aHJlYWQgc3RhcnRpbmcgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwOS0wNS9tc2cwMDAxMy5odG1sPi4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChEZWNsIFN1bW1hcnkpOiBFeHRyYWN0IG1vc3Qgb2YgdGhlICVjb2RlCisJZW50cnkgaW50by4uLgorCSglY29kZSBTdW1tYXJ5KTogLi4uIHRoaXMgbmV3IHN1YnNlY3Rpb24sIGFuZCB1cGRhdGUgYWxsCisJY3Jvc3MtcmVmZXJlbmNlcy4gIEZvciByZWFkYWJpbGl0eSBvZiB0aGUgcGF0Y2hlcywgcmV3cml0aW5nIG9mCisJdGhlIHRleHQgc28gaXQgbWFrZXMgc2Vuc2UgYXMgYSBzZXBhcmF0ZSBzdWJzZWN0aW9uIHdpbGwgY29tZSBpbiBhCisJbGF0ZXIgcGF0Y2guCisKKzIwMTEtMDItMDYgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCWRvYzogY2xlYW4gdXAgbmFtaW5nIG9mIHZhcmlvdXMgQmlzb24gZmlsZXMuCisJVGhlIEJpc29uIG1hbnVhbCdzIG5hbWVzIGZvciB2YXJpb3VzIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBhIEJpc29uCisJcGFyc2VyIGhhcyBkZXZvbHZlZCBpbnRvIGluY29uc2lzdGVuY3kuICBUaGlzIHBhdGNoIG1ha2VzIHRoZQorCW5hbWluZyBjb25zaXN0ZW50IGZvciB0aGUgbW9zdCBpbXBvcnRhbnQgZmlsZXMuICBGaXJzdCwgaXQgY2hvb3NlcworCSJncmFtbWFyIGZpbGUiIG92ZXIgImlucHV0IGZpbGUiLiAgVGhlIGZvcm1lciBhcHBlYXJzIHRvIGJlIG1vcmUKKwl0cmFkaXRpb25hbCBpbiB0aGUgQmlzb24gbWFudWFsLCBhbmQgQmlzb24gaGFzIG90aGVyIGlucHV0CisJZmlsZXMgKHNrZWxldG9ucykuICBTZWNvbmQsIGl0IGNob29zZXMgInBhcnNlciBpbXBsZW1lbnRhdGlvbgorCWZpbGUiIG92ZXIgbmFtZXMgbGlrZSAicGFyc2VyIGZpbGUiLCAicGFyc2VyIHNvdXJjZSBmaWxlIiwgInBhcnNlcgorCXNvdXJjZSBjb2RlIGZpbGUiLCBhbmQgInBhcnNlciBvdXRwdXQgZmlsZSIuICBUaGUgbmV3IG5hbWUgbWFrZXMKKwlpdCBjbGVhcmVyIHdoZXJlIEJpc29uIGdlbmVyYXRlcyB0aGUgbWFpbiBwYXJzZXIgaW1wbGVtZW50YXRpb24sCisJYW5kIGl0IGlzIGVhc2lseSBkaXN0aW5ndWlzaGFibGUgZnJvbSAicGFyc2VyIGhlYWRlciBmaWxlIi4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvOiBJbXBsZW1lbnQgdGhyb3VnaG91dC4KKworMjAxMS0wMi0wNiAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJZG9jOiBnaXZlIGNyZWRpdCB0byBtb3JlIG9mIEJpc29uJ3MgZGV2ZWxvcGVycy4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChJbnRyb2R1Y3Rpb24pOiBEb24ndCBpbXBseSB0aGF0IG9ubHkgUm9iZXJ0CisJQ29yYmV0dCwgUmljaGFyZCBTdGFsbG1hbiwgYW5kIFdpbGZyZWQgSGFuc2VuIGhhdmUgY29udHJpYnV0ZWQgdG8KKwlCaXNvbi4gIEhvd2V2ZXIsIEkgZG9uJ3QgaGF2ZSB0aW1lIHRvIHdyaXRlIGEgZnVsbCBoaXN0b3J5LCBzbworCWp1c3QgcG9pbnQgcmVhZGVycyB0byBUSEFOS1MgYW5kIENoYW5nZUxvZy4KKworMjAxMS0wMi0wNiAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJZG9jOiBkb2N1bWVudCBleHBlcmltZW50YWwgZmVhdHVyZXMgYmV0dGVyLgorCSogZG9jL2Jpc29uLnRleGluZm8gKEludHJvZHVjdGlvbik6IFNheSB0aGF0IElFTFIoMSkgYW5kIGNhbm9uaWNhbAorCUxSKDEpIGFyZSBleHBlcmltZW50YWwuICBNZW50aW9uIEphdmEuICBOb3JtYWxseSBleHBlcmltZW50YWwKKwlmZWF0dXJlcyBwcm9iYWJseSBzaG91bGRuJ3QgYmUgbWVudGlvbmVkIGluIHRoZSBpbnRyb2R1Y3Rpb24uCisJSG93ZXZlciwgaWYgQmlzb24ncyBsaW1pdGF0aW9ucyB0byBMQUxSKDEpLCBDLCBhbmQgQysrIGFyZSBzbworCWltcG9ydGFudCB0aGF0IHRoZXkgc2hvdWxkIGJlIG1lbnRpb25lZCBoZXJlLCB0aGVuIGl0J3MgaW1wb3J0YW50CisJdG8gcG9pbnQgb3V0IHRoYXQgQmlzb24gaXMgYmVnaW5uaW5nIHRvIGVzY2FwZSB0aG9zZSBsaW1pdGF0aW9ucy4KKwlNb3Jlb3ZlciwgdGhlc2UgcGFydGljdWxhciBleHBlcmltZW50YWwgZmVhdHVyZXMgaGF2ZSB2ZXJ5IGxpdHRsZQorCWNoYW5jZSBvZiBiZWluZyByZW1vdmVkLgorCSogc3JjL2dldGFyZ3MuYyAodXNhZ2UpOiBTYXkgdGhhdCBJRUxSKDEpIGFuZCBjYW5vbmljYWwgTFIoMSkgYXJlCisJZXhwZXJpbWVudGFsLgorCisyMDExLTAxLTI5ICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwlEbyBub3QgYWxsb3cgaWRlbnRpZmllcnMgdGhhdCBzdGFydCB3aXRoIGEgZGFzaC4KKwlUaGlzIGNsZWFucyB1cCBvdXIgcHJldmlvdXMgZml4ZXMgZm9yIGEgYnVnIHdoZXJlYnkgQmlzb24KKwlkaXNjYXJkZWQgYC5maWVsZCcgaW4gYCQtMS5maWVsZCcuICBUaGUgcHJldmlvdXMgZml4ZXMgd2VyZSBsZXNzCisJcmVzdHJpY3RpdmUgYWJvdXQgd2hlcmUgYSBkYXNoIGNvdWxkIGFwcGVhciBpbiBhbiBpZGVudGlmaWVyLCBidXQKKwl0aGUgcmVzdHJpY3Rpb25zIHdlcmUgaGFyZCB0byBleHBsYWluLiAgVGhhdCBidWcgd2FzIHJlcG9ydGVkIGFuZAorCXRoaXMgZmluYWwgZml4IHdhcyBvcmlnaW5hbGx5IHN1Z2dlc3RlZCBieSBQYXVsIEhpbGZpbmdlci4gIFRoaXMKKwlhbHNvIGZpeGVzIGEgcmVtYWluaW5nIGJ1ZyByZXBvcnRlZCBieSBQYXVsIEVnZ2VydCB3aGVyZWJ5IEJpc29uCisJcGFyc2VzIGAldG9rZW4gSUQgLTEyMycgYXMgYCV0b2tlbiBJRCAtIDEyMycgYW5kIGhhbmRsZXMgYC0nIGFzIGFuCisJaWRlbnRpZmllci4gIE5vdywgYC0nIGNhbm5vdCBiZSBhbiBpZGVudGlmaWVyLiAgRGlzY3Vzc2VkIGluCisJdGhyZWFkcyBiZWdpbm5pbmcgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDExLTAxL21zZzAwMDAwLmh0bWw+LAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMTEtMDEvbXNnMDAwMDQuaHRtbD4uCisJKiBORVdTICgyLjUpOiBVcGRhdGUgZW50cnkgZGVzY3JpYmluZyB0aGUgZGFzaCBleHRlbnNpb24gdG8KKwlncmFtbWFyIHN5bWJvbCBuYW1lcy4gIEFsc28sIG1vdmUgdGhhdCBlbnRyeSBiZWZvcmUgdGhlIG5hbWVkCisJcmVmZXJlbmNlcyBlbnRyeSBiZWNhdXNlIHRoZSBsYXR0ZXIgbWVudGlvbnMgdGhlIGZvcm1lci4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChTeW1ib2wpOiBVcGRhdGUgZG9jdW1lbnRhdGlvbiBmb3Igc3ltYm9sCisJbmFtZXMuICBBcyBzdWdnZXN0ZWQgYnkgUGF1bCBFZ2dlcnQsIG1lbnRpb24gdGhlIGVmZmVjdCBvZiBwZXJpb2RzCisJYW5kIGRhc2hlcyBvbiBuYW1lZCByZWZlcmVuY2VzLgorCShEZWNsIFN1bW1hcnkpOiBVcGRhdGUgZG9jdW1lbnRhdGlvbiBmb3IgdW5xdW90ZWQgJWRlZmluZSB2YWx1ZXMsCisJd2hpY2gsIGFzIGEgc2lkZSBlZmZlY3QsIGNhbiBubyBsb25nZXIgc3RhcnQgd2l0aCBkYXNoZXMgZWl0aGVyLgorCSogc3JjL3NjYW4tY29kZS5sIChpZCk6IEltcGxlbWVudC4KKwkqIHNyYy9zY2FuLWdyYW0ubCAoaWQpOiBJbXBsZW1lbnQuCisJKiB0ZXN0cy9hY3Rpb25zLmF0IChFeG90aWMgRG9sbGFycyk6IEV4dGVuZCB0ZXN0IGdyb3VwIHRvIGV4ZXJjaXNlCisJYnVnIHJlcG9ydGVkIGJ5IFBhdWwgSGlsZmluZ2VyLgorCSogdGVzdHMvaW5wdXQuYXQgKFN5bWJvbHMpOiBVcGRhdGUgdGVzdCBncm91cCwgYW5kIGV4dGVuZCB0bworCWV4ZXJjaXNlIGJ1ZyByZXBvcnRlZCBieSBQYXVsIEVnZ2VydC4KKwkqIHRlc3RzL25hbWVkLXJlZnMuYXQgKFN0cmF5IHN5bWJvbHMgaW4gYnJhY2tldHMpOiBVcGRhdGUgdGVzdAorCWdyb3VwLgorCSgkIG9yIEAgZm9sbG93ZWQgYnkgLiBvciAtKTogTGlrZXdpc2UuCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChJbnZhbGlkIGlucHV0cyk6IExpa2V3aXNlLgorCisyMDExLTAxLTI0ICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwkqIGRhdGEveWFjYy5jOiBGaXggbGFzdCBhcG9zdHJvcGhlIHdhcm5pbmcgZnJvbSB4Z2V0dGV4dC4KKworMjAxMS0wMS0wOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwlGaXggbWlub3IgcHJvYmxlbXMgZW5jb3VudGVyZWQgYnkgYSBmcmVzaCBib290c3RyYXAuCisJKiBkYXRhL2dsci5jLCBkYXRhL3lhY2MuYzogRG8gbm90IHVzZSBhcG9zdHJvcGhlcyBpbiAnIycgY29tbWVudHMsCisJYXMgdGhleSBjb25mdXNlIHhnZXR0ZXh0LCB3aGljaCB0cmllcyB0byBwYXJzZSB0aGVtIGFzIEMgY2hhcmFjdGVyCisJY29uc3RhbnRzIGluIGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4KKwkqIGRhdGEveWFjYy5jICh5eV9sYWMpOiBEb24ndCB1c2UgcHJpbnRmICVkIGZvcm1hdCBvbiAqeXllc3AsIGFzCisJdGhhdCBleHByZXNzaW9uIG1pZ2h0IG5vdCBwcm9tb3RlIHRvIGludCBvbiBzb21lIHBsYXRmb3Jtcy4KKwkqIHNyYy9wYXJzZS1ncmFtLmMsIHNyYy9wYXJzZS1ncmFtLmg6IFJlZ2VuZXJhdGUuCisKKzIwMTEtMDEtMDkgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCUltcHJvdmUgZXJyb3IgbWVzc2FnZXMgZm9yIGAkJyBvciBgQCcgZm9sbG93ZWQgYnkgYC4nIG9yIGAtJy4KKwlQcmV2aW91c2x5LCBmb3IgdGhpcyBzcGVjaWFsIGNhc2Ugb2YgYW4gaW52YWxpZCByZWZlcmVuY2UsIHRoZQorCXVzdWFsICJzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IiB3YXMgcHJpbnRlZC4gIEhvd2V2ZXIsCisJYmVjYXVzZSB0aGUgc3ltYm9sIG5hbWUgd2FzIHBhcnNlZCBhcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGF0CisJbWVzc2FnZSB3YXMgZm9sbG93ZWQgaW1tZWRpYXRlbHkgYnkgYSBuZXdsaW5lIGluc3RlYWQgb2YgYSBzeW1ib2wKKwluYW1lLiAgSW4gcmVhbGl0eSwgdGhpcyBpcyBhIHN5bnRheCBlcnJvciwgc28gdGhlIHJlZmVyZW5jZSBpcworCWludmFsaWQgcmVnYXJkbGVzcyBvZiB0aGUgc3ltYm9scyBhY3R1YWxseSBhcHBlYXJpbmcgaW4gdGhlCisJcHJvZHVjdGlvbi4gIERpc2N1c3NlZCBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDExLTAxL21zZzAwMDEyLmh0bWw+LgorCSogc3JjL3NjYW4tY29kZS5sIChwYXJzZV9yZWYpOiBSZXBvcnQgdGhlIGFib3ZlIGNhc2UgYXMgYSBzeW50YXgKKwllcnJvci4gIE90aGVyIHRoYW4gdGhhdCwgY29udGludWUgdG8gaGFuZGxlIHRoaXMgY2FzZSBsaWtlIGFueQorCW90aGVyIGludmFsaWQgcmVmZXJlbmNlIHRoYXQgQmlzb24gbWFuYWdlcyB0byBwYXJzZSBiZWNhdXNlCisJInBvc3NpYmx5IG1lYW50IiBtZXNzYWdlcyBjYW4gc3RpbGwgYmUgaGVscGZ1bCB0byB0aGUgdXNlci4KKwkqIHRlc3RzL25hbWVkLXJlZnMuYXQgKCQgb3IgQCBmb2xsb3dlZCBieSAuIG9yIC0pOiBOZXcgdGVzdCBncm91cC4KKworMjAxMS0wMS0wOCAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJZG9jOiBkb24ndCB1c2UgQGFjcm9ueW0uCisJTGF0ZWx5LCBtYW55IEdOVSBwYWNrYWdlcyBhcmUgZHJvcHBpbmcgaXQuICBTZWUKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAxMS0wMS9tc2cwMDAwMy5odG1sPi4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvOiBSZW1vdmUgYWxsIHVzZXMuCisKKzIwMTEtMDEtMDUgIEFsZXggUm96ZW5tYW4gIDxyb3plbm1hbkBnbWFpbC5jb20+CisKKwlEbyBub3QgYWxsb3cgaWRlbnRpZmllcnMgdGhhdCBzdGFydCB3aXRoIGEgbmVnYXRpdmUgbnVtYmVyLgorCVJlcG9ydGVkIGJ5IFBhdWwgSGlsZmluZ2VyIGFzIGEgc2lkZSBlZmZlY3Qgb2YgbmFtZWQgcmVmZXJlbmNlcworCXN1cHBvcnQgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDExLTAxL21zZzAwMDAwLmh0bWw+LgorCVN1Z2dlc3RlZCBieSBQYXVsIEVnZ2VydC4KKwkqIHNyYy9zY2FuLWNvZGUubCAoe2xldHRlcn0sIHtpZH0pOiBBZGp1c3QgbGV4aWNhbCBkZWZpbml0aW9ucy4KKwkqIHNyYy9zY2FuLWdyYW0ubCAoe2xldHRlcn0sIHtpZH0pOiBMaWtld2lzZS4KKworMjAxMS0wMS0wMyAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJKiBDaGFuZ2VMb2cgKDIwMTEtMDEtMDIpOiBpbXByb3ZlIGRlc2NyaXB0aW9uLgorCisyMDExLTAxLTAzICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwltYWludDogZG9uJ3QgdXBkYXRlIGNvcHlyaWdodCB5ZWFycyBpbiBib290c3RyYXAuCisJKiAueC11cGRhdGUtY29weXJpZ2h0OiBBZGQgZW50cnkgZm9yIGJvb3RzdHJhcC4KKwkqIGJvb3RzdHJhcDogUmVtb3ZlIDIwMTEgZnJvbSBjb3B5cmlnaHQgeWVhcnMuICBUaGUgYm9vdHN0cmFwCisJdmVyc2lvbiB3ZSdyZSBjdXJyZW50bHkgdXNpbmcgY29tZXMgZnJvbSBhbiBvbGRlciB2ZXJzaW9uIG9mCisJZ251bGliLgorCSogYm9vdHN0cmFwLmNvbmYgKGJvb3RzdHJhcF9zeW5jKTogQWRkIGNvbW1lbnRzIGV4cGxhaW5pbmcgdGhpcworCWlzc3VlLgorCisyMDExLTAxLTAyICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwltYWludDogcnVuICJtYWtlIHVwZGF0ZS1jb3B5cmlnaHQiLgorCisyMDExLTAxLTAyICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwltYWludDogcHJlcGFyZSB0byB1c2UgeWVhciByYW5nZXMgaW4gY29weXJpZ2h0IG5vdGljZXMuCisJKiBSRUFETUUgKENvcHlyaWdodCBzdGF0ZW1lbnRzKTogTmV3IHNlY3Rpb24gZXhwbGFpbmluZyB0aGUgcmFuZ2UKKwlub3RhdGlvbi4gIFRoZSBHTlUgbWFpbnRhaW5lcnMgZG9jdW1lbnQgcmVxdWlyZXMgdGhpcyBleHBsYW5hdGlvbjoKKwk8aHR0cDovL3d3dy5nbnUub3JnL3ByZXAvbWFpbnRhaW4vbWFpbnRhaW4uaHRtbCNDb3B5cmlnaHQtTm90aWNlcz4uCisJSSBjb3BpZWQgb3VyIGV4cGxhbmF0aW9uIGZyb20gY29yZXV0aWxzLgorCSogYnVpbGQtYXV4L3VwZGF0ZS1iNC1jb3B5cmlnaHQ6IFJldmVydCAyMDEwLTA2LTE3IGNoYW5nZXMgdGhhdAorCWRpc2FibGVkIEJpc29uJ3MgYXV0b21hdGVkIHVzZSBvZiByYW5nZXMuCisJKiBjZmcubWsgKHVwZGF0ZS1jb3B5cmlnaHQtZW52KTogTGlrZXdpc2UuCisKKzIwMTEtMDEtMDIgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCUNvcnJlY3QgbXkgZW1haWwgYWRkcmVzcy4KKwkqIENoYW5nZUxvZzogSW4gYWxsIHJlY2VudCBlbnRyaWVzLgorCSogVEhBTktTIChKb2VsIEUuIERlbm55KTogSGVyZS4KKworMjAxMC0xMi0xOSAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJZG9jOiBjbGVhbnVwLgorCSogTkVXUyAoMi41KTogVHJ5IHRvIHNvcnQgZW50cmllcyBhY2NvcmRpbmcgdG8gaG93IGludGVyZXN0aW5nCisJdXNlcnMgbWlnaHQgZmluZCB0aGVtLgorCisyMDEwLTEyLTE5ICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwlkb2M6IGNsZWFudXAuCisJKiBORVdTICgyLjUpOiBNYWtlIHNvbWUgbWlub3IgaW1wcm92ZW1lbnRzIHRvIHdvcmRpbmcsIGFuZCBmb3JtYXQKKwllbnRyaWVzIG1vcmUgY29uc2lzdGVudGx5LgorCSogZG9jL2Jpc29uLnRleGluZm8gKExhbmd1YWdlIGFuZCBHcmFtbWFyKTogUG9pbnQgb3V0IHRoYXQgSUVMUgorCWFuZCBjYW5vbmljYWwgTFIgYXJlIGV4cGVyaW1lbnRhbCBmZWF0dXJlcy4KKwkoRGVjbCBTdW1tYXJ5KTogSW4gbGlzdCBvZiAlZGVmaW5lIHZhcmlhYmxlcywgbWFrZSB3b3JkaW5nIG1vcmUKKwljb25zaXN0ZW50LiAgSW1wcm92ZSBkaXNjdXNzaW9uIG9mIHVzaW5nIExBTFIgZm9yIEdMUi4KKworMjAxMC0xMi0xOSAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJcGFyc2UubGFjOiBkb2N1bWVudC4KKwkqIE5FV1MgKDIuNSk6IEFkZCBlbnRyeSBmb3IgTEFDLCBhbmQgbWVudGlvbiBMQUMgaW4gZW50cnkgZm9yCisJb3RoZXIgY29ycmVjdGlvbnMgdG8gdmVyYm9zZSBzeW50YXggZXJyb3IgbWVzc2FnZXMuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoRGVjbCBTdW1tYXJ5KTogUmV3cml0ZSBlbnRyaWVzIGZvcgorCWxyLmRlZmF1bHQtcmVkdWN0aW9ucyBhbmQgbHIudHlwZSB0byBiZSBjbGVhcmVyLCB0byBtZW50aW9uCisJJW5vbmFzc29jJ3MgZWZmZWN0IG9uIGNhbm9uaWNhbCBMUiwgYW5kIHRvIG1lbnRpb24gTEFDLiAgQWRkIGVudHJ5CisJZm9yIHBhcnNlLmxhYy4KKwkoR2xvc3NhcnkpOiBBZGQgZW50cnkgZm9yIExBQy4KKworMjAxMC0xMi0xMSAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJcGFyc2UubGFjOiBpbXBsZW1lbnQgZXhwbG9yYXRvcnkgc3RhY2sgcmVhbGxvY2F0aW9ucy4KKwkqIGRhdGEveWFjYy5jOiBSZW5hbWUgJWRlZmluZSB2YXJpYWJsZSBwYXJzZS5sYWMuZXMtY2FwYWNpdHkgdG8KKwlwYXJzZS5sYWMuZXMtY2FwYWNpdHktaW5pdGlhbC4gIEFjY2VwdCBwYXJzZS5sYWMubWVtb3J5LXRyYWNlCisJd2l0aCB2YWx1ZXMgb2YgImZhaWx1cmVzIiAoZGVmYXVsdCkgb3IgImZ1bGwiLgorCShiNF9kZWNsYXJlX3BhcnNlcl9zdGF0ZV92YXJpYWJsZXMpOiBBZGQgeXllc2EsIHl5ZXMsIGFuZAorCXl5ZXNfY2FwYWNpdHkgdmFyaWFibGVzLgorCShZWVNUQUNLX1VTRV9BTExPQ0EpOiBJZ25vcmUgaXQgaWYgTEFDIHJlcXVlc3RlZC4KKwkoWVlTVEFDS19BTExPQywgWVlTVEFDS19GUkVFLCBZWVNUQUNLX0FMTE9DX01BWElNVU0pOiBEZWZpbmUgaWYKKwlMQUMgcmVxdWVzdGVkLgorCShZWUNPUFlfTkVFREVEKTogTmV3IGNwcCBtYWNyby4KKwkoWVlDT1BZKTogRGVmaW5lIGlmIExBQyByZXF1ZXN0ZWQuCisJKHl5X2xhY19zdGFja19yZWFsbG9jKTogTmV3IGZ1bmN0aW9uIGltcGxlbWVudGluZyBzdGFjaworCXJlYWxsb2NhdGlvbnMuICBVc2UgWVlNQVhERVBUSCBmb3IgbWF4aW11bSBzdGFjayBzaXplIGdpdmVuIHRoYXQKKwl0aGUgc3RhY2sgc2hvdWxkIG5ldmVyIG5lZWQgdG8gZ3JvdyBsYXJnZXIgdGhhbiB0aGUgbWFpbiBzdGF0ZQorCXN0YWNrIG5lZWRzIHRvIGdyb3cgd2l0aG91dCBMQUMuCisJKFlZX0xBQ19FU1RBQkxJU0gpOiBVcGRhdGUgeXlfbGFjIGludm9jYXRpb24uCisJKHl5X2xhYyk6IEFkZCBhcmd1bWVudHMgZm9yIGV4cGxvcmF0b3J5IHN0YWNrIG1lbW9yeSBkYXRhCisJcmVjb3JkZWQgaW4gdGhlIG1haW4gcGFyc2VyLiAgSW52b2tlIHl5X2xhY19zdGFja19yZWFsbG9jIHdoZW4KKwlyZWFsbG9jYXRpb24gaXMgbmVjZXNzYXJ5LgorCSh5eXN5bnRheF9lcnJvcik6IEFkZCB0aGUgc2FtZSBuZXcgYXJndW1lbnRzIGFuZCBwYXNzIHRoZW0gdG8KKwl5eV9sYWMuCisJKHl5cHN0YXRlX2RlbGV0ZSk6IEZyZWUgeXllcyBpZiBuZWNlc3NhcnkuCisJKHl5ZXNhLCB5eWVzLCB5eWVzX2NhcGFjaXR5KTogI2RlZmluZSB0aGVzZSB0byB5eXBzdGF0ZSBtZW1iZXJzCisJaW4gdGhlIGNhc2Ugb2YgcHVzaCBwYXJzaW5nLgorCSh5eXBhcnNlLCB5eXB1c2hfcGFyc2UpOiBJbml0aWFsaXplIHl5ZXMgYW5kIHl5ZXNfY2FwYWNpdHkuCisJVXBkYXRlIHl5c3ludGF4X2Vycm9yIGludm9jYXRpb25zLiAgQXQgeXlyZXR1cm4sIGZyZWUgeXllcyBpZgorCW5lY2Vzc2FyeS4KKwkqIHNyYy9wYXJzZS1ncmFtLnk6ICVkZWZpbmUgcGFyc2UubGFjIGZ1bGwuCisJKiB0ZXN0cy9pbnB1dC5hdCAoTEFDOiBlcnJvcnMgZm9yICVkZWZpbmUpOiBFeHRlbmQgZm9yCisJcGFyc2UubGFjLW1lbW9yeS10cmFjZS4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKExBQzogRXhwbG9yYXRvcnkgc3RhY2spOiBFeHRlbmQgdG8gY2hlY2sKKwl0aGF0IHN0YWNrIHJlYWxsb2NzIGhhcHBlbiB3aGVuIGV4cGVjdGVkLgorCShMQUM6IE1lbW9yeSBleGhhdXN0aW9uKTogVXBkYXRlIHRvIHVzZSBZWU1BWERFUFRIIGFuZAorCXBhcnNlLmxhYy5lcy1jYXBhY2l0eS1pbml0aWFsLgorCisyMDEwLTEyLTExICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwlwYXJzZS5sYWM6IGltcGxlbWVudCBhcyAlZGVmaW5lIHZhcmlhYmxlLgorCUxBQyA9IGxvb2thaGVhZCBjb3JyZWN0aW9uLiAgU2VlIGRpc2N1c3Npb24gYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwOS0wOS9tc2cwMDAzNC5odG1sPi4KKwlIb3dldmVyLCBvbmUgcG9pbnQgdGhlcmUgbXVzdCBiZSBjb3JyZWN0ZWQ6IGJlY2F1c2Ugb2YgJW5vbmFzc29jLAorCUxBQyBpcyAqbm90KiBhbHdheXMgcmVkdW5kYW50IGZvciBsci50eXBlPWNhbm9uaWNhbC1sci4KKwkqIGRhdGEveWFjYy5jOiBBY2NlcHQgdmFsdWVzIG9mICJub25lIiAoZGVmYXVsdCkgb3IgImZ1bGwiIGZvcgorCXBhcnNlLmxhYy4gIEFjY2VwdCAlZGVmaW5lIHBhcnNlLmxhYy5lcy1jYXBhY2l0eSB0byBzcGVjaWZ5CisJY2FwYWNpdHkgb2YgTEFDJ3MgdGVtcG9yYXJ5IGV4cGxvcmF0b3J5IHN0YWNrLiAgSXQgZGVmYXVsdHMgdG8gMjAKKwlhbmQsIGZvciBub3csIHdpbGwgbm90IGdyb3cgZHluYW1pY2FsbHkuCisJKGI0X2xhY19mbGFnLCBiNF9sYWNfaWYpOiBOZXcgbTQgbWFjcm9zLiAgRXZhbHVhdGUgYXMgdHJ1ZSBmb3IKKwlwYXJzZS5sYWMhPW5vbmUuCisJKFlZQkFDS1VQKTogSW52b2tlIFlZX0xBQ19ESVNDQVJELgorCShZWV9MQUNfRVNUQUJMSVNILCBZWV9MQUNfRElTQ0FSRCk6IE5ldyBjcHAgbWFjcm9zIHRoYXQgaW52b2tlCisJeXlfbGFjIGFuZCB0cmFjayB3aGVuIGl0IG5lZWRzIHRvIGJlIGludm9rZWQKKwkoeXlfbGFjKTogTmV3IGZ1bmN0aW9uIHRoYXQsIGdpdmVuIHRoZSBjdXJyZW50IHN0YWNrLCBkZXRlcm1pbmVzCisJd2hldGhlciBhIHRva2VuIGNhbiBldmVudHVhbGx5IGJlIHNoaWZ0ZWQuICBSZXR1cm4gc3RhdHVzIG1pbWljcworCXl5cGFyc2UgcmV0dXJuIHN0YXR1cy4KKwkoeXlzeW50YXhfZXJyb3IpOiBDaGFuZ2UgeXlzdGF0ZSBhcmd1bWVudCB0byB5eXNzcCBzbyBzdGFjayB0b3AKKwljYW4gYmUgcGFzc2VkIHRvIHl5X2xhYy4gIElmIExBQyBpcyByZXF1ZXN0ZWQsIGJ1aWxkIGV4cGVjdGVkCisJdG9rZW4gbGlzdCBieSBpbnZva2luZyB5eV9sYWMgZm9yIGV2ZXJ5IHRva2VuIGluc3RlYWQgb2YganVzdAorCWNoZWNraW5nIHRoZSBjdXJyZW50IHN0YXRlIGZvciBsb29rYWhlYWRzLiAgUmV0dXJuIDIgaWYgeXlfbGFjCisJZXhoYXVzdHMgbWVtb3J5LgorCSh5eXBhcnNlLCB5eXB1c2hfcGFyc2UpOiBVc2UgbG9jYWwgdmFyaWFibGUgeXlfbGFjX2VzdGFibGlzaGVkIGFuZAorCWNwcCBtYWNyb3MgWVlfTEFDX0VTVEFCTElTSCBhbmQgWVlfTEFDX0RJU0NBUkQgdG8gaW1wbGVtZW50IExBQy4KKwlVcGRhdGUgeXlzeW50YXhfZXJyb3IgaW52b2NhdGlvbi4gIEFkZCB5eWV4aGF1c3RlZGxhYiBjb2RlIGlmIExBQworCWlzIHJlcXVlc3RlZC4KKwkqIHRlc3RzL2NvbmZsaWN0cy5hdCAoJW5vbmFzc29jIGFuZCBlb2YpOiBFeHRlbmQgdG8gY2hlY2sgdGhlCisJZWZmZWN0IG9mIGVhY2ggb2YgLURsci50eXBlPWNhbm9uaWNhbC1sciBhbmQgLURwYXJzZS5sYWM9ZnVsbC4KKwkoJWVycm9yLXZlcmJvc2UgYW5kIGNvbnNpc3RlbnQgZXJyb3JzKTogTGlrZXdpc2UuCisJKExBQzogJW5vbmFzc29jIHJlcXVpcmVzIHNwbGl0dGluZyBjYW5vbmljYWwgTFIgc3RhdGVzKTogTmV3IHRlc3QKKwlncm91cCBkZW1vbnN0cmF0aW5nIGhvdyBMQUMgY2FuIGZpeCBjYW5vbmljYWwgTFIuCisJKiB0ZXN0cy9pbnB1dC5hdCAoTEFDOiBFcnJvcnMgZm9yICVkZWZpbmUpOiBOZXcgdGVzdCBncm91cC4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKExBQzogRXhwbG9yYXRvcnkgc3RhY2spOiBOZXcgdGVzdCBncm91cC4KKwkoTEFDOiBNZW1vcnkgZXhoYXVzdGlvbik6IE5ldyB0ZXN0IGdyb3VwLgorCisyMDEwLTExLTIxICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwlidWlsZDogdXNlIGdudWxpYidzIG5ldyBib290c3RyYXBfc3luYyBvcHRpb24uCisJTm93LCB3aGVuZXZlciB3ZSB1cGRhdGUgYmlzb24ncyBjb3B5IG9mIGdudWxpYiwgYm9vdHN0cmFwIHdpbGwKKwl1cGRhdGUgaXRzZWxmIHRoZSBuZXh0IHRpbWUgaXQncyBydW4uCisJKiBib290c3RyYXA6IENvcHkgZnJvbSBsYXRlc3QgZ251bGliIGZvciBib290c3RyYXBfc3luYyBzdXBwb3J0LgorCSogYm9vdHN0cmFwLmNvbmYgKGJvb3RzdHJhcF9zeW5jKTogU2V0IHRvIHRydWUuCisJKiBnbnVsaWI6IFVwZGF0ZSB0byBsYXRlc3Qgc28gYm9vdHN0cmFwIGlzIGluIHN5bmMgbm93LgorCisyMDEwLTExLTA3ICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwl5eXN5bnRheF9lcnJvcjogYWRqdXN0IHByaW9yIGZpeGVzIGZvciBicmFuY2gtMi41J3MgbGFscjEuY2MuCisJT24gbWFzdGVyLCB0aGVyZSBpcyBubyB5eWNoYXIgaW4gbGFscjEuY2MsIGJ1dCB0aGVyZSBpcyBvbgorCWJyYW5jaC0yLjUsIGFuZCB0aGUgcHJpb3IgY2hlcnJ5LXBpY2sgb2YgIkZpeCBoYW5kbGluZyBvZiB5eWNoYXIKKwltYW5pcHVsYXRpb24gaW4gdXNlciBzZW1hbnRpYyBhY3Rpb25zIiB3YXNuJ3QgYWRqdXN0ZWQgZm9yIHRoYXQKKwlkaWZmZXJlbmNlLgorCSogZGF0YS9sYWxyMS5jYyAoeXk6OnBhcnNlcjo6cGFyc2UpOiBUcmFuc2xhdGUgeXljaGFyIGJlZm9yZQorCWV2ZXJ5IHVzZSBvZiB5eXRva2VuLCBhbmQgYWRkIGNvbW1lbnRzIGV4cGxhaW5pbmcgdGhpcyBhcHByb2FjaC4KKwkqIHRlc3RzL2NvbmZsaWN0cy5hdCAoJWVycm9yLXZlcmJvc2UgYW5kIGNvbnNpc3RlbnQgZXJyb3JzKToKKwlFeHRlbmQgdG8gdGVzdCB5eWNoYXIgbWFuaXB1bGF0aW9uIHdpdGggbGFscjEuY2MuCisKKzIwMTAtMTEtMDcgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCXl5c3ludGF4X2Vycm9yOiBmaXggZm9yIGNvbnNpc3RlbnQgZXJyb3Igd2l0aCBsb29rYWhlYWQuCisJKiBORVdTICgyLjUpOiBEb2N1bWVudC4KKwkqIGRhdGEveWFjYy5jICh5eXN5bnRheF9lcnJvcik6IEluIGEgdmVyYm9zZSBzeW50YXggZXJyb3IKKwltZXNzYWdlIHdoaWxlIGluIGEgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24gKHdoaWNoCisJbXVzdCBiZSBhbiBlcnJvciBhY3Rpb24gZ2l2ZW4gdGhhdCB5eXN5bnRheF9lcnJvciBpcyBiZWluZworCWludm9rZWQpLCBjb250aW51ZSB0byBkcm9wIHRoZSBleHBlY3RlZCB0b2tlbiBsaXN0LCBidXQgZG9uJ3QKKwlkcm9wIHRoZSB1bmV4cGVjdGVkIHRva2VuIHVubGVzcyB0aGVyZSBhY3R1YWxseSBpcyBubyBsb29rYWhlYWQuCisJTW9yZW92ZXIsIGhhbmRsZSB0aGF0IGludGVybmFsbHkgaW5zdGVhZCBvZiByZXR1cm5pbmcgMSB0byB0ZWxsCisJdGhlIGNhbGxlciB0byBkbyBpdC4gIFdpdGggdGhhdCBtZWFuaW5nIG9mIDEgZ29uZSwgcmVudW1iZXIKKwlyZXR1cm4gY29kZXMgbW9yZSB1c2VmdWxseS4KKwkoeXlwYXJzZSwgeXlwdXNoX3BhcnNlKTogVXBkYXRlIHl5c3ludGF4X2Vycm9yIHVzYWdlLiAgTW9zdAorCWltcG9ydGFudGx5LCBzZXQgeXl0b2tlbiB0byBZWUVNUFRZIHdoZW4gdGhlcmUncyBubyBsb29rYWhlYWQuCisJKiBkYXRhL2dsci5jICh5eXJlcG9ydFN5bnRheEVycm9yKTogQXMgaW4geWFjYy5jLCBkb24ndCBkcm9wIHRoZQorCXVuZXhwZWN0ZWQgdG9rZW4gdW5sZXNzIHRoZXJlIGFjdHVhbGx5IGlzIG5vIGxvb2thaGVhZC4KKwkqIGRhdGEvbGFscjEuY2MgKHl5OjpwYXJzZXI6OnBhcnNlKTogSWYgdGhlcmUncyBubyBsb29rYWhlYWQsCisJc2V0IHl5dG9rZW4gdG8geXllbXB0eV8gYmVmb3JlIGludm9raW5nIHl5c3ludGF4X2Vycm9yXy4KKwkoeXk6OnBhcnNlcjo6eXlzeW50YXhfZXJyb3JfKTogQWdhaW4sIGRvbid0IGRyb3AgdGhlIHVuZXhwZWN0ZWQKKwl0b2tlbiB1bmxlc3MgdGhlcmUgYWN0dWFsbHkgaXMgbm8gbG9va2FoZWFkLgorCSogZGF0YS9sYWxyMS5qYXZhIChZWVBhcnNlcjo6cGFyc2UpOiBJZiB0aGVyZSdzIG5vIGxvb2thaGVhZCwKKwlzZXQgeXl0b2tlbiB0byB5eWVtcHR5XyBiZWZvcmUgaW52b2tpbmcgeXlzeW50YXhfZXJyb3IuCisJKFlZUGFyc2VyOjp5eXN5bnRheF9lcnJvcik6IEFnYWluLCBkb24ndCBkcm9wIHRoZSB1bmV4cGVjdGVkCisJdG9rZW4gdW5sZXNzIHRoZXJlIGFjdHVhbGx5IGlzIG5vIGxvb2thaGVhZC4KKwkqIHRlc3RzL2NvbmZsaWN0cy5hdCAoJWVycm9yLXZlcmJvc2UgYW5kIGNvbnNpc3RlbnQKKwllcnJvcnMpOiBFeHRlbmQgdGVzdCBncm91cCB0byBmdXJ0aGVyIHJldmVhbCBob3cgdGhlIHByZXZpb3VzCisJdXNlIG9mIHRoZSBzaW1wbGUgInN5bnRheCBlcnJvciIgbWVzc2FnZSB3YXMgdG9vIGdlbmVyYWwuICBUZXN0CisJeWFjYy5jLCBnbHIuYywgbGFscjEuY2MsIGFuZCBsYWxyMS5qYXZhLiAgTm8gbG9uZ2VyIGFuIGV4cGVjdGVkCisJZmFpbHVyZS4KKwkqIHRlc3RzL2phdmEuYXQgKEFUX0pBVkFfQ09NUElMRSwgQVRfSkFWQV9QQVJTRVJfQ0hFQ0spOiBNb3ZlCisJdG8uLi4KKwkqIHRlc3RzL2xvY2FsLmF0OiAuLi4gaGVyZS4KKwkoX0FUX0JJU09OX09QVElPTl9QVVNIREVGUyk6IFB1c2ggQVRfU0tFTF9KQVZBX0lGIGRlZmluaXRpb24uCisJKEFUX0JJU09OX09QVElPTl9QT1BERUZTKTogUG9wIGl0LgorCShBVF9GVUxMX0NPTVBJTEUpOiBFeHRlbmQgdG8gaGFuZGxlIEphdmEuCisKKzIwMTAtMTEtMDcgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCXl5c3ludGF4X2Vycm9yOiBtb3JlIHByZXBhcmF0aW9uIGZvciByZWFkYWJpbGl0eSBvZiBuZXh0IHBhdGNoLgorCVRoZXJlIGFyZSBubyBiZWhhdmlvcmFsIGNoYW5nZXMgaGVyZS4KKwkqIGRhdGEvZ2xyLmMgKHl5cmVwb3J0U3ludGF4RXJyb3IpOiBSZW9yZ2FuaXplLgorCSogZGF0YS9sYWxyMS5jYyAoeXk6OnBhcnNlcjo6eXlzeW50YXhfZXJyb3JfKTogUmVvcmdhbml6ZS4KKwkqIHRlc3RzL2NvbmZsaWN0cy5hdCAoJWVycm9yLXZlcmJvc2UgYW5kIGNvbnNpc3RlbnQgZXJyb3JzKToKKwlSZW9yZ2FuaXplLgorCisyMDEwLTExLTA3ICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwl5eXN5bnRheF9lcnJvcjogcHJlcGFyZSBmb3IgcmVhZGFiaWxpdHkgb2YgbmV4dCBwYXRjaGVzLgorCVRoZXNlIGFyZSBwdXJlbHkgd2hpdGVzcGFjZSBjaGFuZ2VzIHRoYXQgcmVzdWx0IGluIHVnbHkgY29kZQorCWJ1dCB0aGF0IG1ha2UgdGhlIG5leHQgY291cGxlIG9mIHBhdGNoZXMgbXVjaCBlYXNpZXIgdG8gcmVhZC4KKwkqIGRhdGEvZ2xyLmMgKHl5cmVwb3J0U3ludGF4RXJyb3IpOiBSZWluZGVudC4KKwkqIGRhdGEvbGFscjEuY2MgKHl5OjpwYXJzZXI6Onl5c3ludGF4X2Vycm9yXyk6IFJlaW5kZW50LgorCSogZGF0YS9sYWxyMS5qYXZhIChZWVBhcnNlcjo6eXlzeW50YXhfZXJyb3IpOiBSZWluZGVudC4KKwkqIGRhdGEveWFjYy5jICh5eXN5bnRheF9lcnJvcik6IFJlaW5kZW50LgorCisyMDEwLTEwLTMxICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwl5eXN5bnRheF9lcnJvcjogaW1wcm92ZSBpbnZvY2F0aW9uIHJlYWRhYmlsaXR5LgorCSogZGF0YS95YWNjLmMgKHl5cGFyc2UsIHl5cHVzaF9wYXJzZSk6IEZvciB5eXN5bnRheF9lcnJvcgorCWludm9jYXRpb24sIGdldCByaWQgb2YgdGhlIHdoaWxlIGxvb3AsIHdoaWNoIGlzIG1pc2xlYWRpbmcKKwliZWNhdXNlIHRoZXJlIGFyZSByZWFsbHkgYXQgbW9zdCB0d28gaXRlcmF0aW9ucy4KKworMjAxMC0xMC0zMSAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJKiBDaGFuZ2VMb2c6IENvcnJlY3Qgc29tZSBlcnJvcnMgaW4gcHJldmlvdXMgZW50cmllcy4KKworMjAxMC0xMC0xNyAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJbWFpbnQ6IHJlLWFuY2hvciBhbGwgLmdpdGlnbm9yZSBlbnRyaWVzLgorCSogYm9vdHN0cmFwOiBDb3B5IGZyb20gZ251bGliJ3MgbGF0ZXN0IGZvciB0aGUgZml4IHRvCisJYXV0b21hdGljYWxseSBhbmNob3IgZW50cmllcyBpdCBjb25zdHJ1Y3RzLgorCSogZ251bGliOiBVcGRhdGUgdG8gbGF0ZXN0IGp1c3Qgc28gaXQgaGFzIHRoZSBzYW1lIGJvb3RzdHJhcC4KKwkqIC5naXRpZ25vcmUsIGJ1aWxkLWF1eC8uZ2l0aWdub3JlLCBkb2MvLmdpdGlnbm9yZToKKwkqIGxpYi8uZ2l0aWdub3JlLCBtNC8uZ2l0aWdub3JlLCBwby8uZ2l0aWdub3JlOgorCSogcnVudGltZS1wby8uZ2l0aWdub3JlOiBSZS1hbmNob3IgYWxsIGVudHJpZXMuCisKKzIwMTAtMTAtMDggIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJRml4IHBvcnRhYmlsaXR5IHByb2JsZW0gb24gT3BlbkJTRCA0LjcuCisKKwlKaW0gTWV5ZXJpbmcgcmVwb3J0ZWQgdGhpcyBpbgorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMTAtMTAvbXNnMDAwMDcuaHRtbD4uCisJKiBkYXRhL3lhY2MuYzogVXNlIEVYSVRfU1VDQ0VTUyBhcyBhIHdpdG5lc3MgZm9yIHN0ZGxpYi5oLAorCW5vdCBfU1RETElCX0guICBFWElUX1NVQ0NFU1MgaGFzIGJlZW4gZGVmaW5lZCBieSB0aGUgc3RhbmRhcmQKKwlmb3IgcXVpdGUgc29tZSB0aW1lLgorCSogc3JjL3BhcnNlLWdyYW0uYywgc3JjL3BhcnNlLWdyYW0uaDogUmVnZW5lcmF0ZS4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQ6IFRhbXBlciB3aXRoIHRoZSByZW5hbWVkIHdpdG5lc3MuCisKKwlBZGp1c3QgdG8gcmVjZW50IGNoYW5nZXMgdG8gZ251bGliIGJvb3RzdHJhcC4KKworCSogLmN2c2lnbm9yZSwgYnVpbGQtYXV4Ly5jdnNpZ25vcmUsIGRvYy8uY3ZzaWdub3JlLCBldGMvLmN2c2lnbm9yZToKKwkqIGV4YW1wbGVzL2NhbGMrKy8uY3ZzaWdub3JlLCBsaWIvLmN2c2lnbm9yZSwgbTQvLmN2c2lnbm9yZToKKwkqIHBvLy5jdnNpZ25vcmUsIHJ1bnRpbWUtcG8vLmN2c2lnbm9yZSwgc3JjLy5jdnNpZ25vcmU6CisJKiB0ZXN0cy8uY3ZzaWdub3JlOiBSZW1vdmU7IEkgZG9uJ3QgdXNlIENWUyB0byBtYWludGFpbiBCaXNvbgorCWFueW1vcmUgYW5kIGRvbid0IGtub3cgb2YgYW55Ym9keSBlbHNlIHdobyBkb2VzLiAgSWYgc29tZW9uZSBuZWVkcworCXRoZXNlIGZpbGVzLCB0aGV5IGNhbiByZXN1cnJlY3QgdGhlbS4KKwkqIC5naXRpZ25vcmUsIGJ1aWxkLWF1eC8uZ2l0aWdub3JlLCBkb2MvLmdpdGlnbm9yZSwgbGliLy5naXRpZ25vcmU6CisJKiBtNC8uZ2l0aWdub3JlLCBwby8uZ2l0aWdub3JlLCBydW50aW1lLXBvLy5naXRpZ25vcmU6CisJT21pdCBsZWFkaW5nICcvJywgc2luY2UgYm9vdHN0cmFwIG9taXRzIGl0LgorCUFkanVzdCBmaWxlIG5hbWVzIHRvIG1hdGNoIGN1cnJlbnQgY29udGVudHMgYmV0dGVyLgorCSogYm9vdHN0cmFwOiBTeW5jIGZyb20gZ251bGliOiB0aGlzIGNvbnRhaW5zIHRoZSBuZXcgZ251bGliX21rX2hvb2sKKwlpbnN0YWxsZWQganVzdCBmb3IgdXMuCisJKiBib290c3RyYXAuY29uZiAoZXhjbHVkZWRfZmlsZXMpOiBEb24ndCBleGNsdWRlIGNvZGVzZXQubTQsCisJZ2xpYmMyMS5tNCwgaW50dHlwZXNfaC5tNCwgc2l6ZV9tYXgubTQsIHhzaXplLm00LCBhcyB0aGV5IGFyZSBub3cKKwluZWVkZWQgc29tZWhvdy4gIERvbid0IGhhdmUgdGltZSB0byBsb29rIGludG8gd2h5LgorCShnbnVsaWJfbW9kdWxlcyk6IENoYW5nZSBtYWxsb2MgdG8gbWFsbG9jLWdudS4gIERvIHdlIHJlYWxseSBhc3N1bWUKKwl0aGUgR05VIG1hbGxvYyBiZWhhdmlvciwgd2hlcmUgbWFsbG9jICgwKSAhPSBOVUxMIHVubGVzcyB3ZSdyZQorCW91dCBvZiBzdG9yYWdlPyAgSWYgbm90LCB3ZSBjYW4gb21pdCBtYWxsb2MtZ251OyBidXQgZm9yIG5vdyBJIGxlZnQKKwlpdCBpbiB0byBiZSBzYWZlLgorCSh2Y19pZ25vcmUpOiBSZW1vdmUuCisJKiBSRUFETUUtaGFja2luZzogUmVuYW1lZCBmcm9tIEhBQ0tJTkcsIHNpbmNlIGdudWxpYiBib290c3RyYXAgbm93CisJdXNlcyB0aGF0IGNvbnZlbnRpb24uCisKKzIwMTAtMDgtMDUgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCVZlcnNpb24gMi40LjMuCisJKiBORVdTICgyLjQuMyk6IFNldCBkYXRlLgorCisyMDEwLTA4LTA0ICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwltYWludDogYWRkIGdldHRleHQgdmVyc2lvbiB0byByZWxlYXNlIGFubm91bmNlbWVudHMuCisJU3VnZ2VzdGVkIGJ5IFBhdWwgSGlsZmluZ2VyIGF0CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMTAtMDcvbXNnMDAwMTkuaHRtbD4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAxMC0wOC9tc2cwMDAwMi5odG1sPi4KKwkqIGNmZy5tayAoYm9vdHN0cmFwLXRvb2xzKTogQWRkIGdldHRleHQuCisKKzIwMTAtMDgtMDQgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCWRvYzogZml4IC1XIGFuZCAlZXhwZWN0IGRvY3VtZW50YXRpb24gc29tZS4KKwkqIE5FV1MgKDIuNC4zKTogTWVudGlvbiB0aGF0IHRoZXJlIGFyZSBkb2N1bWVudGF0aW9uIGZpeGVzLgorCSogZG9jL2Jpc29uLnRleGluZm8gKEV4cGVjdCBEZWNsKTogTWFrZSBpdCBjbGVhciB0aGF0ICVleHBlY3QKKwl0dXJucyBjb25mbGljdHMgaW50byBlcnJvcnMgbm90IHdhcm5pbmdzLgorCShTaGlmdC9SZWR1Y2UpOiBMaWtld2lzZS4KKwkoQmlzb24gT3B0aW9ucyk6IERvbid0IG1lbnRpb24gLVdzeW50YXguICBJdCBkb2Vzbid0IGV4aXN0LgorCisyMDEwLTA4LTAxICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwktV2Vycm9yOiBmaXggZm9yIHJ1bGVzIHVzZWxlc3MgaW4gcGFyc2VyIGFmdGVyIGNvbmZsaWN0cy4KKwkqIE5FV1MgKDIuNC4zKTogRG9jdW1lbnQgZml4LgorCSogc3JjL2NvbXBsYWluLmMgKGVycm9yX21lc3NhZ2UpOiBFeHRlbmQgdG8gaGFuZGxlIGluY29tcGxldGUKKwllcnJvciBtZXNzYWdlcyBzbyB3YXJuIGFuZCB3YXJuX2F0IGNhbiBiZSB1c2VkIGluIG1vcmUgY2FzZXMuCisJKiBzcmMvZ3JhbS5jIChncmFtbWFyX3J1bGVzX3VzZWxlc3NfcmVwb3J0KTogVXNlIHdhcm5fYXQgc28gdGhhdAorCS1XZXJyb3IgaXMgYWx3YXlzIG9iZXllZC4KKwkqIHNyYy9yZWR1Y2UuYyAocmVkdWNlX3ByaW50KTogVXNlIHdhcm4gc28gdGhhdCB0aGUgIndhcm5pbmdzCisJYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMiIG1lc3NhZ2UgaXMgcHJpbnRlZCBjb25zaXN0ZW50bHkgYmVmb3JlCisJdGhlIGZpcnN0IHdhcm5pbmcgbWVzc2FnZS4gIFRoaXMgbWFrZXMgdGVzdGluZyBlYXNpZXIuCisJKiB0ZXN0cy9sb2NhbC5hdCAoQVRfQklTT05fV0VSUk9SX01TRyk6IE5ldyBtYWNyby4KKwkoQVRfQklTT05fQ0hFQ0tfTk9fWE1MKTogRXh0ZW5kIHRvIGNoZWNrIC1XZXJyb3IgYW5kCisJLS13YXJuaW5ncz1lcnJvciB3aGVuIHdhcm5pbmdzIGFwcGVhciBpbiBiaXNvbidzIHN0ZGVyci4KKworMjAxMC0wNy0yOSAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJbWFpbnQ6IGVuYWJsZSBnbml0cyBvbmx5IGF0IHN0YWJsZSByZWxlYXNlcy4KKwkqIGNvbmZpZ3VyZS5hYyAoQU1fSU5JVF9BVVRPTUFLRSk6IFVuZGVyc2NvcmUgb3IgZGFzaCBpbiBhCisJdmVyc2lvbiBzdHJpbmcgc2hvdWxkIGRpc2FibGUgZ25pdHMuICBFeHBsYWluIGluIGNvbW1lbnRzLgorCisyMDEwLTA3LTI4ICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwlpMThuOiB1cGRhdGUuCisJKiBwby9QT1RGSUxFUy5pbjogQWRkIHNyYy9ncmFwaHZpei5jLgorCisyMDEwLTA3LTI4ICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwlpMThuOiBmaXggZm9yIGdudWxpYi4KKwkqIHBvL1BPVEZJTEVTLmluOiBBZGQgcmVtYWluaW5nIGdudWxpYiBmaWxlcyB0aGF0IGhhdmUKKwl0cmFuc2xhdGFibGUgc3RyaW5ncy4KKworMjAxMC0wNy0yNSAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJbWFpbnQ6IHVzZSBhbm5vdW5jZS1nZW4ncyBuZXcgLS1tYWlsLWhlYWRlcnMuCisJKiBIQUNLSU5HIChBbm5vdW5jZSk6IFVwZGF0ZSBpbnN0cnVjdGlvbnMuCisJKiBjZmcubWsgKGFubm91bmNlbWVudF9DY18pOiBEZWZpbmUuCisJKiBjb25maWd1cmUuYWMgKEFNX0dOVV9HRVRURVhUX1ZFUlNJT04pOiBVcGRhdGUgdG8gMC4xOCBhcworCXJlcXVpcmVkIGJ5IGxhdGVzdCBnbnVsaWIuCisJKiBnbnVsaWI6IFVwZGF0ZSB0byBsYXRlc3QuCisKKzIwMTAtMDctMjQgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCXRlc3RzOiBoYW5kbGUgVmFsZ3JpbmQgdGhhdCBjb21wbGFpbnMgYWJvdXQgPiYtLgorCSogdGVzdHMvb3V0cHV0LmF0IChBVF9DSEVDS19PVVRQVVQpOiBFeHRlbmQgdG8gYWNjZXB0IHByZS10ZXN0cy4KKwkoT3V0cHV0IGZpbGVzOiAtZHYgPiYtKTogU2tpcCB0ZXN0IGdyb3VwIGlmIHJ1bm5pbmcKKwltYWludGFpbmVyLWNoZWNrLXZhbGdyaW5kLgorCisyMDEwLTA2LTE3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCVVwZGF0ZSBmcm9tIEdGREwgR0ZETCAxLjIgdG8gMS4zLgorCSogZG9jL2Jpc29uLnRleGluZm86IFVwZGF0ZSBHRkRMIHZlcnNpb24gbnVtYmVyLgorCSogZG9jL2ZkbC50ZXhpOiBVcGRhdGUgdG8gdmVyc2lvbiAxLjMsIHRha2VuIGZyb206CisJaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2ZkbC50ZXhpCisKKzIwMTAtMDYtMTcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJRG8gbm90IHVzZSBkYXRlIHJhbmdlcyBpbiBjb3B5cmlnaHQgbm90aWNlcy4KKwlTZWUgaHR0cDovL3d3dy5nbnUub3JnL3ByZXAvbWFpbnRhaW4vbWFpbnRhaW4uaHRtbCNDb3B5cmlnaHQtTm90aWNlcworCisJKiBIQUNLSU5HLCBNYWtlZmlsZS5hbSwgTkVXUywgUEFDS0FHSU5HLCBSRUFETUUsIFJFQURNRS1hbHBoYToKKwkqIFRPRE8sIGJvb3RzdHJhcCwgYm9vdHN0cmFwLmNvbmY6CisJKiBidWlsZC1hdXgvdXBkYXRlLWI0LWNvcHlyaWdodCwgY2ZnLm1rLCBjb25maWd1cmUuYWM6CisJKiBkYXRhL1JFQURNRSwgZGF0YS9iaXNvbi5tNCwgZGF0YS9jKystc2tlbC5tNCwgZGF0YS9jKysubTQ6CisJKiBkYXRhL2Mtc2tlbC5tNCwgZGF0YS9jLm00LCBkYXRhL2dsci5jLCBkYXRhL2dsci5jYzoKKwkqIGRhdGEvamF2YS1za2VsLm00LCBkYXRhL2phdmEubTQsIGRhdGEvbGFscjEuY2M6CisJKiBkYXRhL2xhbHIxLmphdmEsIGRhdGEvbG9jYXRpb24uY2M6CisJKiBkYXRhL3hzbHQvYmlzb24ueHNsOgorCSogZGF0YS94c2x0L3htbDJkb3QueHNsLCBkYXRhL3hzbHQveG1sMnRleHQueHNsOgorCSogZGF0YS94c2x0L3htbDJ4aHRtbC54c2wsIGRhdGEveWFjYy5jLCBkamdwcC9NYWtlZmlsZS5tYWludDoKKwkqIGRqZ3BwL1JFQURNRS5pbiwgZGpncHAvY29uZmlnLmJhdCwgZGpncHAvY29uZmlnLnNlZDoKKwkqIGRqZ3BwL2NvbmZpZy5zaXRlLCBkamdwcC9jb25maWdfaC5zZWQsIGRqZ3BwL2RqdW5wYWNrLmJhdDoKKwkqIGRqZ3BwL3N1YnBpcGUuYywgZGpncHAvc3VicGlwZS5oOgorCSogZGpncHAvdGVzdHN1aXRlLnNlZCwgZG9jL2Jpc29uLnRleGluZm86CisJKiBkb2MvcmVmY2FyZC50ZXgsIGV0Yy9SRUFETUUsIGV0Yy9iZW5jaC5wbC5pbjoKKwkqIGV4YW1wbGVzL2NhbGMrKy9NYWtlZmlsZS5hbSwgZXhhbXBsZXMvZXh0ZXhpOgorCSogbGliL2FiaXRzZXQuYywgbGliL2FiaXRzZXQuaDoKKwkqIGxpYi9iYml0c2V0LmgsIGxpYi9iaXRzZXQuYywgbGliL2JpdHNldC5oOgorCSogbGliL2JpdHNldF9zdGF0cy5jLCBsaWIvYml0c2V0X3N0YXRzLmgsIGxpYi9iaXRzZXR2LXByaW50LmM6CisJKiBsaWIvYml0c2V0di1wcmludC5oLCBsaWIvYml0c2V0di5jLCBsaWIvYml0c2V0di5oOgorCSogbGliL2ViaXRzZXQuYywgbGliL2ViaXRzZXQuaCwgbGliL2dldC1lcnJuby5jOgorCSogbGliL2dldC1lcnJuby5oLCBsaWIvbGJpdHNldC5jLCBsaWIvbGJpdHNldC5oOgorCSogbGliL2xpYmliZXJ0eS5oLCBsaWIvbWFpbi5jLCBsaWIvdGltZXZhci5jOgorCSogbGliL3RpbWV2YXIuZGVmLCBsaWIvdGltZXZhci5oLCBsaWIvdmJpdHNldC5jOgorCSogbGliL3ZiaXRzZXQuaCwgbGliL3l5ZXJyb3IuYywgbTQvYmlzb24taTE4bi5tNDoKKwkqIG00L2Mtd29ya2luZy5tNCwgbTQvY3h4Lm00LCBtNC9zdWJwaXBlLm00LCBtNC90aW1ldmFyLm00OgorCSogc3JjL0Fubm90YXRpb25MaXN0LmMsIHNyYy9Bbm5vdGF0aW9uTGlzdC5oOgorCSogc3JjL0luYWRlcXVhY3lMaXN0LmMsIHNyYy9JbmFkZXF1YWN5TGlzdC5oLCBzcmMvTFIwLmM6CisJKiBzcmMvTFIwLmgsIHNyYy9TYml0c2V0LmMsIHNyYy9TYml0c2V0LmgsIHNyYy9hc3NvYy5jOgorCSogc3JjL2Fzc29jLmgsIHNyYy9jbG9zdXJlLmMsIHNyYy9jbG9zdXJlLmgsIHNyYy9jb21wbGFpbi5jOgorCSogc3JjL2NvbXBsYWluLmgsIHNyYy9jb25mbGljdHMuYywgc3JjL2NvbmZsaWN0cy5oOgorCSogc3JjL2Rlcml2ZXMuYywgc3JjL2Rlcml2ZXMuaCwgc3JjL2ZpbGVzLmMsIHNyYy9maWxlcy5oOgorCSogc3JjL2ZsZXgtc2Nhbm5lci5oLCBzcmMvZ2V0YXJncy5jLCBzcmMvZ2V0YXJncy5oOgorCSogc3JjL2dyYW0uYywgc3JjL2dyYW0uaCwgc3JjL2dyYXBodml6LmMsIHNyYy9pZWxyLmM6CisJKiBzcmMvaWVsci5oLCBzcmMvbGFsci5jLCBzcmMvbGFsci5oOgorCSogc3JjL2xvY2F0aW9uLmMsIHNyYy9sb2NhdGlvbi5oLCBzcmMvbWFpbi5jOgorCSogc3JjL211c2NsZS10YWIuYywgc3JjL211c2NsZS10YWIuaCwgc3JjL25hbWVkLXJlZi5jOgorCSogc3JjL25hbWVkLXJlZi5oLCBzcmMvbnVsbGFibGUuYywgc3JjL251bGxhYmxlLmg6CisJKiBzcmMvb3V0cHV0LmMsIHNyYy9vdXRwdXQuaCwgc3JjL3BhcnNlLWdyYW0ueToKKwkqIHNyYy9wcmludC14bWwuYywgc3JjL3ByaW50LXhtbC5oLCBzcmMvcHJpbnQuYywgc3JjL3ByaW50Lmg6CisJKiBzcmMvcHJpbnRfZ3JhcGguYywgc3JjL3ByaW50X2dyYXBoLmgsIHNyYy9yZWFkZXIuYzoKKwkqIHNyYy9yZWFkZXIuaCwgc3JjL3JlZHVjZS5jLCBzcmMvcmVkdWNlLmgsIHNyYy9yZWxhdGlvbi5jOgorCSogc3JjL3JlbGF0aW9uLmgsIHNyYy9zY2FuLWNvZGUuaCwgc3JjL3NjYW4tY29kZS5sOgorCSogc3JjL3NjYW4tZ3JhbS5oLCBzcmMvc2Nhbi1ncmFtLmwsIHNyYy9zY2FuLXNrZWwuaDoKKwkqIHNyYy9zY2FuLXNrZWwubCwgc3JjL3N0YXRlLmMsIHNyYy9zdGF0ZS5oLCBzcmMvc3ltbGlzdC5jOgorCSogc3JjL3N5bWxpc3QuaCwgc3JjL3N5bXRhYi5jLCBzcmMvc3ltdGFiLmgsIHNyYy9zeXN0ZW0uaDoKKwkqIHNyYy90YWJsZXMuYywgc3JjL3RhYmxlcy5oLCBzcmMvdW5pcXN0ci5jLCBzcmMvdW5pcXN0ci5oOgorCSogdGVzdHMvYWN0aW9ucy5hdCwgdGVzdHMvYXRsb2NhbC5pbiwgdGVzdHMvYysrLmF0OgorCSogdGVzdHMvY2FsYy5hdCwgdGVzdHMvY29uZmxpY3RzLmF0LCB0ZXN0cy9jeHgtdHlwZS5hdDoKKwkqIHRlc3RzL2V4aXN0aW5nLmF0LCB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdDoKKwkqIHRlc3RzL2hlYWRlcnMuYXQsIHRlc3RzL2lucHV0LmF0LCB0ZXN0cy9qYXZhLmF0OgorCSogdGVzdHMvbG9jYWwuYXQsIHRlc3RzL25hbWVkLXJlZnMuYXQ6CisJKiB0ZXN0cy9vdXRwdXQuYXQsIHRlc3RzL3B1c2guYXQsIHRlc3RzL3JlZHVjZS5hdDoKKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQsIHRlc3RzL3NldHMuYXQsIHRlc3RzL3NrZWxldG9ucy5hdDoKKwkqIHRlc3RzL3N5bmNsaW5lcy5hdCwgdGVzdHMvdGVzdHN1aXRlLmF0LCB0ZXN0cy90b3J0dXJlLmF0OgorCSogZGF0YS9NYWtlZmlsZS5hbSwgZGF0YS9sb2NhdGlvbi5jYywgZG9jL01ha2VmaWxlLmFtLCBzcmMvTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9NYWtlZmlsZS5hbSwgbGliL01ha2VmaWxlLmFtLCBleGFtcGxlcy9NYWtlZmlsZS5hbToKKwkqIGV0Yy9NYWtlZmlsZS5hbToKKwlEb24ndCB1c2UgZGF0ZSByYW5nZXMgaW4gY29weXJpZ2h0IG5vdGljZXMuCisKKzIwMTAtMDUtMTEgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJbGFscmwxLmNjOiBnaXZlIGEgY2hhbmNlIHRvIHVzZXIgZGVmaW5lZCBZWUxMT0NfREVGQVVMVC4KKwkqIGRhdGEvbGFscjEuY2MgKFlZTExPQ19ERUZBVUxUKTogTW92ZSBpdHMgZGVmaW5pdGlvbiBmcm9tIHRoZQorCWhlYWRlciBmaWxlIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBmaWxlLCBhZnRlciB0aGUgdXNlciAlY29kZQorCXNlY3Rpb25zLgorCSogTkVXUyAoMi41KTogRG9jdW1lbnQgdGhpcy4KKworMjAxMC0wNS0wNyAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwljKys6IHVzZSBZWVJIU0xPQy4KKwkqIGRhdGEvbGFscjEuY2MgKFlZUkhTTE9DKTogTmV3LgorCShZWUxMT0NfREVGQVVMVCk6IFVzZSBpdC4KKwkqIGRhdGEvZ2xyLmNjOiBJZiBsb2NhdGlvbl90eXBlIHdhcyB1c2VyIGRlZmluZWQsIGRvIG5vdCBpbmNsdWRlCisJbG9jYXRpb24uaGgsIGFuZCBkbyBub3QgcHJvZHVjZSBsb2NhdGlvbi5oaCBhbmQgcG9zaXRpb24uaGguCisJKiB0ZXN0cy9jYWxjLmF0IChZWUxMT0NfREVGQVVMVCk6IFVzZSBZWVJIU0xPQy4KKwlDaGVjayB0aGF0IGdsci5jYyBzdXBwb3J0cyB1c2VyIGRlZmluZWQgbG9jYXRpb25fdHlwZS4KKwkqIE5FV1M6IERvY3VtZW50IHRoaXMuCisKKzIwMTAtMDUtMTAgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJZG9jOiBmaXggbGFscjEuY2MgZG9jdW1lbnRhdGlvbi4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChDKysgU2Nhbm5lciBJbnRlcmZhY2UpOiBGaXggeXlsZXggc2lnbmF0dXJlLgorCShDKysgQmlzb24gSW50ZXJmYWNlKTogRml4IGxhbHIxLmNjIHNrZWxldG9uIG5hbWUuCisJKEMrKyBQYXJzZXIgSW50ZXJmYWNlKTogRml4IHNlbWFudGljX3R5cGUgYW5kIGxvY2F0aW9uX3R5cGUgbmFtZXMuCisJRG9jdW1lbnQgeXk6OnBhcnNlcjo6dG9rZW4uCisJUmVwb3J0ZWQgYnkgSmVycnkgUXVpbm4uCisKKzIwMTAtMDUtMDQgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJbGFscjEuY2M6IGRvbid0IGdlbmVyYXRlIGxvY2F0aW9uLmhoIHdoZW4gbG9jYXRpb25fdHlwZSBpcyBkZWZpbmVkCisJKiBkYXRhL2Jpc29uLm00IChiNF9wZXJjZW50X2RlZmluZV91c2UpOiBOZXcuCisJKGI0X3BlcmNlbnRfZGVmaW5lX2dldCk6IFVzZSBpdC4KKwlBY2NlcHQgYSBkZWZhdWx0IHZhbHVlLgorCSogZGF0YS9jKysubTQ6IERvIG5vdCBwcm92aWRlIGEgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlICVkZWZpbmUKKwl2YXJpYWJsZSBsb2NhdGlvbl90eXBlLCByYXRoZXIsIHVzZSBiNF9wZXJjZW50X2RlZmluZV9nZXQgd2l0aCBhCisJZGVmYXVsdCBhcmd1bWVudCB3aGVyZSBpdHMgdmFsdWUgaXMgbmVlZGVkLgorCSogZGF0YS9sYWxyMS5jYzogRG8gbm90IGxvYWQgbG9jYXRpb24uY2MgKHdoaWNoIG91dHB1dHMgYm90aAorCWxvY2F0aW9uLmhoIGFuZCBwb3NpdGlvbi5oaCkgaWYgdGhlIHVzZXIgZGVmaW5lZCBsb2NhdGlvbl90eXBlLgorCURvIG5vdCBpbmNsdWRlIGxvY2F0aW9uLmhoIGVpdGhlci4KKwkqIGRhdGEvZ2xyLmNjOiBMaWtld2lzZS4KKworMjAxMC0wNS0wNCAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlsYWxyMS5jYzogbG9jYXRpb25fdHlwZTogbWFrZSBzdXJlIHdlIGRvbid0IGRlcGVuZCBvbiBsb2MuKGJlZ2lufGVuZCkuCisJKiB0ZXN0cy9jYWxjLmF0IChTcGFuKTogSW5zdGVhZCBvZiBiZWdpbi9lbmQsIGFzIGluIHRoZSBidWlsdC1pbgorCWxvY2F0aW9uIGNsYXNzLCB1c2UgZmlyc3QgYW5kIGxhc3QuCisJRGVmaW5lIFlZTExPQ19ERUZBVUxUIHRvIGFkanVzdCB0byB0aGVzZSBjaGFuZ2VzLgorCSogdGVzdHMvbG9jYWwuYXQgKF9BVF9CSVNPTl9PUFRJT05fUFVTSERFRlMpOiBBZGp1c3QgdG8gdGhlCisJbG9jYXRpb25fdHlwZSBjaGFuZ2VzLgorCisyMDEwLTA1LTA0ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCXRlc3RzOiBlbmhhbmNlIEFUX1NZTkNMSU5FU19DT01QSUxFLgorCSogdGVzdHMvc3luY2xpbmVzLmF0IChBVF9URVNUX1NZTkNMSU5FKTogTW92ZSBHQ0MgNC41IHByb3RlY3Rpb24KKwlpbnRvLi4uCisJKEFUX1NZTkNMSU5FU19DT01QSUxFKTogaGVyZS4KKwlBZGQgbW9yZSBkaXN0Y2MgcGF0dGVybnMuCisKKzIwMTAtMDUtMDEgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCXRlc3RzOiBmaXggbWFpbnRhaW5lci14bWwtY2hlY2suCisJKiBkYXRhL3hzbHQveG1sMmRvdC54c2wgKHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYmlzb24teG1sLXJlcG9ydCIpOgorCVVwZGF0ZSBvdXRwdXQgdG8gaW5jbHVkZSBjb21tZW50cyBub3cgcHJvZHVjZWQgYnkgLS1ncmFwaC4KKwkoeHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRvbWF0b24iKTogQXMgZm9yIC0tZ3JhcGgsIG5hbWUgdGhlCisJZGlncmFwaCBhZnRlciB0aGUgZ3JhbW1hciBmaWxlLgorCSogc3JjL3ByaW50LXhtbC5jIChlc2NhcGVfYnVmcyk6IEVubGFyZ2UgYXJyYXkuCisJKHByaW50X3htbCk6IEFkZCBidWctcmVwb3J0IGFuZCB1cmwgYXR0cmlidXRlcyB0bworCWJpc29uLXhtbC1yZXBvcnQgZWxlbWVudC4KKworMjAxMC0wNS0wMSAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJSW4gRE9UIG91dHB1dCwgY29udmVydCBmcm9tICIvKiIgY29tbWVudHMgdG8gIi8vIiBjb21tZW50cy4KKwlUaGlzIGhhbmRsZXMgdGhlIHBvc3NpYmlsaXR5IHRoYXQgYSAiKi8iIG1pZ2h0IGFwcGVhciBpbgorCXZhcmlhYmxlIHBvcnRpb25zIG9mIHRob3NlIGNvbW1lbnRzIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZS4KKwkqIHNyYy9ncmFwaHZpei5jIChzdGFydF9ncmFwaCk6IEltcGxlbWVudC4KKworMjAxMC0wNC0zMCAgSm9lbCBFLiBEZW5ueSAgPGpvZWxkZW5ueUBqb2VsZGVubnkub3JnPgorCisJRG9jdW1lbnQgdGhhdCB1bmRlZmluZWQgJXByZWMgaWRlbnRpZmllciB3YXJuaW5ncyB3aWxsIHJlbWFpbi4KKwkqIE5FV1MgKDIuNC4zKTogSGVyZS4KKwkoMi40LjIpOiBIZXJlLgorCisyMDEwLTA0LTMwICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwlSZXZlcnQgMjAwOS0xMi0zMCBjaGFuZ2UgZm9yIHVuZGVmaW5lZCAlcHJlYyB0b2tlbiBjb21wbGFpbnRzLgorCVRoYXQgaXMsIGtlZXAgdGhlbSBhcyB3YXJuaW5ncyBiZWNhdXNlIHRoYXQgc2hvdWxkIGJlIHN1ZmZpY2llbnQKKwl0byBzYXRpc2Z5IFBPU0lYIHdpdGhvdXQgY3JlYXRpbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpc3N1ZXMuCisJU3VnZ2VzdGVkIGJ5IFJpY2hhcmQgU3RhbGxtYW4gYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAxMC0wMy9tc2cwMDAzMy5odG1sPi4KKwkqIE5FV1MgKDIuNSk6IFJlbW92ZSBtZW50aW9uIG9mIGNvbXBsYWludC4KKwkqIHNyYy9yZWFkZXIuYyAoZ3JhbW1hcl9ydWxlX2NoZWNrKTogQ29udmVydCBjb21wbGFpbnQgYmFjayB0bworCXdhcm5pbmcuCisJKiB0ZXN0cy9pbnB1dC5hdCAoJXByZWMncyB0b2tlbiBtdXN0IGJlIGRlZmluZWQpOiBVcGRhdGUuCisKKzIwMTAtMDQtMjUgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCWJ1aWxkOiBkb24ndCByZXF1aXJlIHNyYy9iaXNvbiBkdXJpbmcgYm9vdHN0cmFwLgorCVN1Z2dlc3RlZCBieSBFcmljIEJsYWtlIGF0CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAxMC0wMy9tc2cwMDAwMy5odG1sPi4KKwkqIGJvb3RzdHJhcC5jb25mIChib290c3RyYXBfZXBpbG9ndWUpOiBOZXcgZnVuY3Rpb24gdG8gbWFrZSBzdXJlCisJc3JjL3BhcnNlLWdyYW0uW2NoXSBhcmUgc3RhbXBlZCBsYXRlciB0aGFuIHNyYy9wYXJzZS1ncmFtLnkuCisKKzIwMTAtMDQtMjUgIEpvZWwgRS4gRGVubnkgIDxqb2VsZGVubnlAam9lbGRlbm55Lm9yZz4KKworCWkxOG46IGZpeCB1bnRyYW5zbGF0YWJsZSBzdHJpbmcuCisJUmVwb3J0ZWQgYnkgR29yYW4gVWRkZWJvcmcgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDEwLTAzL21zZzAwMDAwLmh0bWw+LgorCSogc3JjL211c2NsZS10YWIuYyAobXVzY2xlX3BlcmNlbnRfZGVmaW5lX2luc2VydCk6IEhlcmUuCisKKzIwMTAtMDQtMTMgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJdGVzdHM6IGNhbGM6IG1pbm9yIHJlZmFjdG9yaW5nLgorCSogdGVzdHMvY2FsYy5hdCAoX0FUX0RBVEFfQ0FMQ19ZKTogU2ltcGxpZnkgeXlsZXguCisKKzIwMTAtMDQtMTMgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJdGVzdHM6IGNhbGM6IHNpbXBsaWZ5IGxvY2F0aW9uIG1hbmFnZW1lbnQuCisJKiB0ZXN0cy9sb2NhbC5hdCAoQVRfTE9DX1BVU0hERUYsIEFUX0xPQ19QT1BERUYpOiBOZXcuCisJKF9BVF9CSVNPTl9PUFRJT05fUFVTSERFRlMsIEFUX0JJU09OX09QVElPTl9QT1BERUZTKTogVXNlIHRoZW0gdG8KKwlkZWZpbmUgdGhlIGFwcHJvcHJpYXRlIEFUX0xPQyBhY2Nlc3NvcnMuCisJKiB0ZXN0cy9jYWxjLmF0OiBVc2UgQVRfTE9DIGFjY2Vzc29ycy4KKworMjAxMC0wNC0xMyAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwl0ZXN0IGxvY2F0aW9uX3R5cGUuCisJKiB0ZXN0cy9sb2NhbC5hdCAoX0FUX0JJU09OX09QVElPTl9QVVNIREVGUyk6CisJRGVmaW5lIEFUX0xPQ0FUSU9OX1RZUEVfSUYuCisJKF9BVF9CSVNPTl9PUFRJT05fUE9QREVGUyk6IFVuZGVmaW5lIEFUX0xPQ0FUSU9OX1RZUEVfSUYuCisJKiB0ZXN0cy9jYWxjLmF0IChfQVRfREFUQV9DQUxDX1kpOiBXaGVuICVkZWZpbmUgbG9jYXRpb25fdHlwZSBpcworCXVzZWQsIHByb3ZpZGUgYSB1c2VyIGxvY2F0aW9uIHR5cGUgYW5kIHVzZSBpdC4KKwkoU2ltcGxlIExBTFIxIEMrKyBDYWxjdWxhdG9yKTogQWRkIGEgdGVzdCBjYXNlIGZvciBsb2NhdGlvbl90eXBlLgorCisyMDEwLTA0LTEzICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCXRlc3RzOiBjaGVjayBmY2xvc2UncyByZXR1cm4gdmFsdWUuCisJKiB0ZXN0cy9jYWxjLmF0IChfQVRfREFUQV9DQUxDX1kpOiBDaGVjayBmY2xvc2UncyByZXR1cm4gc3RhdHVzLgorCisyMDEwLTA0LTEzICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCXRlc3RzOiBkb24ndCBkZXBlbmQgb24gdGhlIGFjdHVhbCBsb2NhdGlvbiB0eXBlLgorCSogdGVzdHMvY2FsYy5hdDogVXNlIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgcmF0aGVyIHRoYW4KKwl5eTo6bG9jYXRpb24sIHNpbmNlIHRoZSBmb3JtZXIgaXMgYWx3YXlzIHJpZ2h0LCBhbmQgbWlnaHQgcG9pbnQgdG8KKwlhbm90aGVyIHR5cGUgdGhhbiB0aGUgbGF0dGVyLgorCisyMDEwLTA0LTEzICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCWZvcm1hdHRpbmcgY2hhbmdlcy4KKwkqIHRlc3RzL2NhbGMuYXQ6IEZvcm1hdHRpbmcgY2hhbmdlcy4KKworMjAxMC0wNC0xMyAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlsYWxyMS5jYzogcmVtb3ZlIHVzZWxlc3MgZm9yd2FyZCBkZWNsYXJhdGlvbi4KKwkqIGRhdGEvbGFscjEuY2M6IEluY2x1ZGUgbG9jYXRpb24uaGggYmVmb3JlIHN0YWNrLmhoLgorCVJlbW92ZSB0aGUgdXNlbGVzcyBmb3J3YXJkIGRlY2xhcmF0aW9ucyBvZiBwb3NpdGlvbiBhbmQgbG9jYXRpb24uCisJUmVwb3J0ZWQgYnkgQ2hyaXMgTW9ybGV5LgorCSogZGF0YS9nbHIuY2M6IExpa2V3aXNlLgorCisyMDEwLTA0LTExICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwkqIE5FV1MgKDIuNC4zKTogTWVudGlvbiBmaXggZm9yIFN1biBTdHVkaW8gQysrLgorCisyMDEwLTA0LTEwICBKb2VsIEUuIERlbm55ICA8am9lbGRlbm55QGpvZWxkZW5ueS5vcmc+CisKKwl0ZXN0czogZml4IGZvciBuZXdlciBTdW4gU3R1ZGlvIEMrKy4KKwlSZXBvcnRlZCBieSBEYWdvYmVydCBNaWNoZWxzZW4gYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDEwLTAzL21zZzAwMDIzLmh0bWw+LgorCSogVEhBTktTIChEYWdvYmVydCBNaWNoZWxzZW4pOiBBZGQuCisJKiBjb25maWd1cmUuYWMgKEFDX1BSRVJFUSk6IFNldCB0byAyLjY0IHNvIHdlIGdldCB0aGUgbGF0ZXN0CisJQXV0b2NvbmYgbWFjcm8gZm9yIGhhbmRsaW5nIHRoZSByZXN0cmljdCBrZXl3b3JkLgorCSogZ251bGliOiBVcGRhdGUgdG8gbGF0ZXN0LCB3aGljaCBubyBsb25nZXIgb3ZlcnJpZGVzIHRoYXQgbWFjcm8KKwlmcm9tIEF1dG9jb25mLgorCisyMDEwLTA0LTAzICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCXBvcnRhYmlsaXR5OiBmaXggcG9pbnRlciBhcml0aG1ldGljIHRvIGNvbmZvcm0gdG8gQyBzdGFuZGFyZC4KKwlSZXBvcnRlZCBieSBUeXMgTGVmZXJpbmcgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDEwLTAzL21zZzAwMDM1Lmh0bWw+LgorCVRoaXMgZml4IGlzIGFscmVhZHkgaW1wbGVtZW50ZWQgaW4gZ2xyLmMgYW5kIGRvZXMgbm90IGFwcGx5IHRvCisJbGFscjEuamF2YS4KKwkqIGRhdGEvbGFscjEuY2MgKHl5OjpwYXJzZXI6OnBhcnNlKTogSW5jcmVhc2Ugc2l6ZSBvZgorCXl5ZXJyb3JfcmFuZ2UgYW5kIGFkanVzdCBzdWJzY3JpcHRpbmcgc28geW91IGRvbid0IGhhdmUgdG8KKwlzdWJ0cmFjdCBvbmUgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheS4KKwkqIGRhdGEveWFjYy5jIChiNF9kZWNsYXJlX3BhcnNlcl9zdGF0ZV92YXJpYWJsZXMsCisJeXlwYXJzZSwgeXlwdXNoX3BhcnNlKTogTGlrZXdpc2UuCisKKzIwMTAtMDQtMDUgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJcmVtb3ZlIHVzZWxlc3MgaW5jbHVkZS4KKwkqIHNyYy9ncmFwaHZpei5oOiBEb24ndCBpbmNsdWRlIHN0ZGJvb2wuaC4KKworMjAxMC0wNC0wNSAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlncmFwaDogc2lnbiB0aGUgb3V0cHV0IGZpbGUuCisJKiBzcmMvZ3JhcGh2aXouYyAoc3RhcnRfZ3JhcGgpOiBJc3N1ZSBjb21tZW50cyBhYm91dCBCaXNvbi4KKwlTdWdnZXN0ZWQgYnkgVHlzIExlZmVyaW5nLgorCisyMDEwLTAzLTMxICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCXBvcnRhYmlsaXR5OiBmaXggdGVzdCBzdWl0ZSBmb3IgR0NDIDQuNSdzIG5ldyAjZXJyb3IgbWVzc2FnZS4KKwlSZXBvcnRlZCBieSBUeXMgTGVmZXJpbmcgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDEwLTAzL21zZzAwMDMwLmh0bWw+LgorCSogTkVXUyAoMi40LjMpOiBNZW50aW9uLgorCSogdGVzdHMvc3luY2xpbmVzLmF0IChBVF9URVNUX1NZTkNMSU5FKTogSW1wbGVtZW50LgorCisyMDEwLTAzLTMwICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCWZpeCBjb21tZW50cy4KKwkqIHNyYy9ncmFwaHZpei5oOiBBZGQgbWlzc2luZyBsaWNlbnNlIG5vdGljZS4KKwlEb2N1bWVudC4KKworMjAxMC0wMy0yNSAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwl0ZXN0czogZml4IDI1MDogcGFyc2UuZXJyb3I9dmVyYm9zZSBvdmVyZmxvdy4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKHBhcnNlLmVycm9yPXZlcmJvc2Ugb3ZlcmZsb3cpOiBBdm9pZCB0aGUKKwlkb3VibGUgaW5jbHVzaW9uIG9mIHN0ZGxpYi5oIGFzIGl0IHRyaWdnZXJzIGhhcmQgZXJyb3JzLgorCisyMDEwLTAzLTIzICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCXBvcnRhYmlsaXR5OiBmaXggZm9yIEJTRCBtYWtlLgorCVJlcG9ydGVkIGJ5IEpvaGFuIHZhbiBTZWxzdCBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMTAtMDMvbXNnMDAwMTYuaHRtbD4uCisJKiB0ZXN0cy9NYWtlZmlsZS5hbSAoJChURVNUU1VJVEUpKTogUXVhbGlmeSBwYWNrYWdlLm00IGluCisJdGhpcyBkZXBlbmRlbmN5IGxpc3QgYXMgaW4gcGFja2FnZS5tNCdzIHRhcmdldCBydWxlLgorCisyMDEwLTAzLTIzICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCXBvcnRhYmlsaXR5OiBmaXggc3Bhd25pbmcgb24gYXQgbGVhc3QgRnJlZUJTRCA4IGFuZCBGcmVlQlNEIDkuCisJUmVwb3J0ZWQgYnkgSm9oYW4gdmFuIFNlbHN0IGF0CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAxMC0wMy9tc2cwMDAxNC5odG1sPi4KKwkqIE5FV1MgKDIuNC4zKTogTmV3LgorCSogVEhBTktTIChKb2hhbiB2YW4gU2Vsc3QpOiBBZGQuCisJKiBnbnVsaWI6IFVwZGF0ZSB0byBsYXRlc3QuCisKKzIwMTAtMDMtMjAgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJbWFpbnQ6IHVwZGF0ZSBmb3IgY2hhbmdlcyB0byBnbnVsaWIncyBhbm5vdW5jZS1nZW4uCisJKiBIQUNLSU5HIChBbm5vdW5jZSk6IFJFTEVBU0VfVFlQRT1tYWpvciBtdXN0IG5vdyBiZSB3cml0dGVuCisJUkVMRUFTRV9UWVBFPXN0YWJsZS4KKworMjAxMC0wMy0yMCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlWZXJzaW9uIDIuNC4yLgorCSogTkVXUyAoMi40LjIpOiBTZXQgdmVyc2lvbiBhbmQgZGF0ZS4gIEZvciB0aGUgcmVjZW50IHRlc3Qgc3VpdGUKKwlwb3J0YWJpbGl0eSBmaXhlcywgZG9uJ3QgYmUgc28gb3B0aW1pc3RpYyBhYm91dCB0aGVpciBzdWNjZXNzCisJZ2l2ZW4gdGhlIGxhY2sgb2YgZmVlZGJhY2sgb24gdGhlIGFmZmVjdGVkIHBsYXRmb3Jtcy4KKworMjAxMC0wMi0yMiAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwl0ZXN0czogZml4IG1haW50YWluZXIteG1sLWNoZWNrIGZvciByZWNlbnQgY2hhbmdlcy4KKwkqIHRlc3RzL291dHB1dC5hdCAoQVRfQ0hFQ0tfQ09ORkxJQ1RJTkdfT1VUUFVUKTogVXNlCisJQVRfQklTT05fQ0hFQ0tfTk9fWE1MIHJhdGhlciB0aGFuIEFUX0JJU09OX0NIRUNLIGJlY2F1c2UgYW4KKwlvdXRwdXQgZmlsZSB3aG9zZSBuYW1lIGNvbmZsaWN0cyB3aXRoIGEgcHJldmlvdXMgb3V0cHV0IGZpbGUKKwlpcyBub3cgbmV2ZXIgZ2VuZXJhdGVkLgorCisyMDEwLTAyLTIyICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCXBvcnRhYmlsaXR5OiBmaXggc2V2ZXJhbCBpc3N1ZXMgd2l0aCBNNCBzdWJwcm9jZXNzLgorCisJTTQncyBvdXRwdXQgcGlwZSB3YXMgbm90IGJlaW5nIGRyYWluZWQgdXBvbiBmYXRhbCBlcnJvcnMgZHVyaW5nCisJc2Nhbl9za2VsLiAgQXMgYSByZXN1bHQsIGJyb2tlbi1waXBlIG1lc3NhZ2VzIGZyb20gTTQgd2VyZSBzZWVuCisJb24gYXQgbGVhc3QgQUlYLCBIUC1VWCwgU29sYXJpcywgYW5kIFJIRUw0LCBhbmQgdGhpcyBjYXVzZWQgYQorCWZhaWx1cmUgaW4gdGhlIHRlc3Qgc3VpdGUuICBUaGUgcHJvYmxlbSB3YXMgdGhhdCwgb24gcGxhdGZvcm1zCisJd2hlcmUgdGhlIGRlZmF1bHQgZGlzcG9zaXRpb24gZm9yIFNJR1BJUEUgaXMgaWdub3JlIGluc3RlYWQgb2YKKwl0ZXJtaW5hdGUsIE00IHNvbWV0aW1lcyBzYXcgZndyaXRlIGZhaWwgd2l0aCBlcnJubz1FUElQRSBhbmQKKwl0aGVuIHJlcG9ydGVkIGl0LiAgSG93ZXZlciwgdGhlcmUncyBzb21lIHNvcnQgb2YgcmFjZSBjb25kaXRpb24sCisJYmVjYXVzZSB0aGUgbmV3IHRlc3QgZ3JvdXAgb2NjYXNpb25hbGx5IHN1Y2NlZWRlZC4KKwlSZXBvcnRlZCBieSBBbGJlcnQgQ2hpbiBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMTAtMDIvbXNnMDAwMDQuaHRtbD4uCisKKwlUaGVyZSB3ZXJlIGFsc28gcHJvYmxlbXMgd2l0aCB0aGUgdGVzdCBzdWl0ZSBsaXZlbG9ja2luZyBvbgorCVRydTY0IDUuMWIuICBSZXBvcnRlZCBieSBEaWRpZXIgR29kZWZyb3kgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDA5LTA1L21zZzAwMDA1Lmh0bWw+LgorCVN3aXRjaGluZyB0byBjcmVhdGVfcGlwZV9iaWRpIHN1Z2dlc3RlZCBieSBBa2ltIERlbWFpbGxlLgorCisJVG8gYXR0ZW1wdCB0byBzb2x2ZSBib3RoIG9mIHRoZXNlIHByb2JsZW1zLCBzd2l0Y2ggdG8gZ251bGliJ3MKKwljcmVhdGVfcGlwZV9iaWRpIGFuZCByZWdpc3RlciBNNCBwcm9jZXNzIGFzIGEgc2xhdmUuICBBbG9uZyB0aGUKKwl3YXksIGNsZWFuIHVwIGZpbGUgbmFtZSBjb25mbGljdCBoYW5kbGluZywgd2hpY2ggd2FzIGFmZmVjdGVkIGJ5CisJdGhlIGJyb2tlbi1waXBlIHByb2JsZW0gYmVmb3JlIHRoZSBzd2l0Y2guCisJKiBORVdTICgyLjQuMik6IERvY3VtZW50LgorCSogVEhBTktTIChEaWRpZXIgR29kZWZyb3kpOiBBZGQuCisJKiBib290c3RyYXAuY29uZiAoZ251bGliX21vZHVsZXMpOiBBZGQgcGlwZS4KKwkqIGdudWxpYjogVXBkYXRlIHRvIGxhdGVzdCB0byBtYWtlIHN1cmUgd2UgaGF2ZSBhbGwgdGhlIGxhdGVzdAorCWZpeGVzLgorCSogbGliL01ha2VmaWxlLmFtIChsaWJiaXNvbl9hX1NPVVJDRVMpOiBSZW1vdmUgc3VicGlwZS5oIGFuZAorCXN1YnBpcGUuYy4KKwkqIHBvL1BPVEZJTEVTLmluIChsaWIvc3VicGlwZS5jKTogUmVtb3ZlLgorCSogc3JjL2ZpbGVzLmMgKGNvbXB1dGVfb3V0cHV0X2ZpbGVfbmFtZXMpOiBVcGRhdGUgaW52b2NhdGlvbnMKKwlvZiBvdXRwdXRfZmlsZV9uYW1lX2NoZWNrLgorCShvdXRwdXRfZmlsZV9uYW1lX2NoZWNrKTogSW4gdGhlIGNhc2UgdGhhdCB0aGUgZ3JhbW1hciBmaWxlCisJd291bGQgYmUgb3ZlcndyaXR0ZW4sIHVzZSBjb21wbGFpbiBpbnN0ZWFkIG9mIGZhdGFsLCBidXQgcmVwbGFjZQorCXRoZSBvdXRwdXQgZmlsZSBuYW1lIHdpdGggL2Rldi9udWxsLiAgVXNlIHRoZSAvZGV2L251bGwgc29sdXRpb24KKwlmb3IgdGhlIGNhc2Ugb2YgdHdvIGNvbmZsaWN0aW5nIG91dHB1dCBmaWxlcyBhcyB3ZWxsIGJlY2F1c2UgaXQKKwlzZWVtcyBzYWZlciBpbiBjYXNlIEJpc29uIG9uZSBkYXkgdHJpZXMgdG8gb3BlbiBib3RoIGZpbGVzIGF0CisJdGhlIHNhbWUgdGltZS4KKwkqIHNyYy9maWxlcy5oIChvdXRwdXRfZmlsZV9uYW1lX2NoZWNrKTogVXBkYXRlIHByb3RvdHlwZS4KKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3NrZWxldG9uKTogVXNlIGNyZWF0ZV9waXBlX2JpZGkgYW5kCisJd2FpdF9zdWJwcm9jZXNzLiAgQXNzZXJ0IHRoYXQgc2Nhbl9za2VsIGNvbXBsZXRlbHkgZHJhaW5zIHRoZQorCXBpcGUuCisJKiBzcmMvc2Nhbi1za2VsLmwgKGF0X2RpcmVjdGl2ZV9wZXJmb3JtKTogVXBkYXRlCisJb3V0cHV0X2ZpbGVfbmFtZV9jaGVjayBpbnZvY2F0aW9uLgorCSogdGVzdHMvb3V0cHV0LmF0IChBVF9DSEVDS19DT05GTElDVElOR19PVVRQVVQpOiBDaGVjayB0aGF0IHRoZQorCWdyYW1tYXIgZmlsZSBhY3R1YWxseSBpc24ndCBvdmVyd3JpdHRlbi4KKwkoQ29uZmxpY3Rpbmcgb3V0cHV0IGZpbGVzOiAtbyBmb28ueSk6IFVwZGF0ZSBleHBlY3RlZCBvdXRwdXQuCisJKiB0ZXN0cy9za2VsZXRvbnMuYXQgKEZhdGFsIGVycm9ycyBidXQgTTQgY29udGludWVzIHByb2R1Y2luZworCW91dHB1dCk6IE5ldyB0ZXN0IGdyb3VwLgorCisyMDEwLTAyLTA0ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCVVwZGF0ZSBQT1RGSUxFUy4KKwkqIEhBQ0tJTkcgKFJlbGVhc2UgUHJvY2VkdXJlKTogQWRkIHJlbWluZGVyIGFib3V0IGtlZXBpbmcKKwlQT1RGSUxFUyBmaWxlcyB1cC10by1kYXRlLgorCSogcG8vUE9URklMRVMuaW4gKHNyYy9tdXNjbGUtdGFiLmMsIHNyYy9zY2FuLXNrZWwubCk6IEFkZC4KKworMjAxMC0wMi0wMSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjbGVtc29uLmVkdT4KKworCUNvZGUgY2xlYW51cC4KKwkqIHRlc3RzL2F0bG9jYWwuaW4gKGFic190b3Bfc3JjZGlyKTogUmVtb3ZlIHNoZWxsIHZhcmlhYmxlLAorCXdoaWNoIGlzIGFscmVhZHkgZGVmaW5lZCBpbiBhdGNvbmZpZy4KKworMjAxMC0wMS0yMSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjbGVtc29uLmVkdT4KKworCSogY2ZnLm1rIChnbnVsaWJfZGlyKTogQXNzdW1lIGdudWxpYiBpcyBhIHN1YmRpcmVjdG9yeS4KKworMjAxMC0wMS0yMSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjbGVtc29uLmVkdT4KKworCW1haW50OiBhdXRvbWF0ZSBQQUNLQUdFX0NPUFlSSUdIVF9ZRUFSIHVwZGF0ZSwgYW5kIHVwZGF0ZSBpdC4KKwkqIEhBQ0tJTkcgKFJlbGVhc2UgUHJvY2VkdXJlKTogVXBkYXRlIG5vdGVzIG9uIGNvcHlyaWdodCB5ZWFycy4KKwkqIE1ha2VmaWxlLmFtICh1cGRhdGUtcGFja2FnZS1jb3B5cmlnaHQteWVhcik6IE5ldyB0YXJnZXQgcnVsZS4KKwkqIGJ1aWxkLWF1eC91cGRhdGUtcGFja2FnZS1jb3B5cmlnaHQteWVhcjogTmV3IGZpbGUuCisJKiBjZmcubWsgKHVwZGF0ZS1jb3B5cmlnaHQpOiBBZGQgdXBkYXRlLXBhY2thZ2UtY29weXJpZ2h0LXllYXIKKwlhcyBhIGRlcGVuZGVuY3kuCisKKzIwMTAtMDEtMTkgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2xlbXNvbi5lZHU+CisKKwkqIGJvb3RzdHJhcDogSW1wb3J0IGltcHJvdmVtZW50cyBmcm9tIGxhdGVzdCBnbnVsaWIuCisKKzIwMTAtMDEtMTkgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2xlbXNvbi5lZHU+CisKKwlidWlsZDogcmVxdWlyZSBBdXRvbWFrZSAxLjExLjEgdG8gYXZvaWQgYSBzZWN1cml0eSBmbGF3LgorCSogSEFDS0lORyAoUmVsZWFzZSBQcm9jZWR1cmUpOiBEb24ndCBkb2N1bWVudCBBdXRvbWFrZSBzZWN1cml0eQorCWZsYXcgaGVyZS4KKwkqIGNvbmZpZ3VyZS5hYyAoQU1fSU5JVF9BVVRPTUFLRSk6IFJlcXVpcmUgMS4xMS4xLCBhbmQgZXhwbGFpbgorCXdoeSBoZXJlLgorCisyMDEwLTAxLTE5ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNsZW1zb24uZWR1PgorCisJZ251bGliOiB1cGRhdGUgdG8gbGF0ZXN0LgorCisyMDEwLTAxLTE5ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNsZW1zb24uZWR1PgorCisJQ2hhbmdlTG9nICgyMDA2LTA5LTE1KTogYWRkIE9kZCBBcmlsZCBPbHNlbidzIHJvbGUgZm9yIHB1c2guYy4KKworMjAxMC0wMS0xNSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjbGVtc29uLmVkdT4KKworCVRoYW5rIHRoZSBkZXZlbG9wZXIgb2YgdGhlIGluaXRpYWwgcHVzaCBwYXJzZXIgaW1wbGVtZW50YXRpb24uCisJVGhpcyB1bmZvcnR1bmF0ZSBvdmVyc2lnaHQgaXMgc2V2ZXJhbCB5ZWFycyBvbGQuCisJKiBUSEFOS1MgKE9kZCBBcmlsZCBPbHNlbik6IEFkZC4KKworMjAxMC0wMS0wNCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjbGVtc29uLmVkdT4KKworCUZpeCBzb21lIGNvbW1lbnRzIGNvbmNlcm5pbmcgTFIoMCkgdmVyc3VzIExBTFIoMSkuCisKKwlTdG9wIGVxdWF0aW5nIExSKDApIHdpdGggbm9uZGV0ZXJtaW5pc20gYW5kIExBTFIoMSkgd2l0aAorCWRldGVybWluaXNtLiAgVGhhdCBpcywgaWYgYWxsIHN0YXRlcyBhcmUgY29uc2lzdGVudCwgdGhlbiBMUigwKQorCXRhYmxlcyBhcmUgZGV0ZXJtaW5pc3RpYy4gIE9uIHRoZSBvdGhlciBoYW5kLCBMQUxSKDEpIHRhYmxlcworCW1pZ2h0IGJlIG5vbmRldGVybWluaXN0aWMgYmVmb3JlIGNvbmZsaWN0IHJlc29sdXRpb24sIGFuZCBHTFIKKwlwZXJtaXRzIExBTFIoMSkgdGFibGVzIHRvIHJlbWFpbiBub25kZXRlcm1pbmlzdGljLgorCSogc3JjL0xSMC5jLCBzcmMvTFIwLmg6IEhlcmUuCisJKiBzcmMvbGFsci5jLCBzcmMvbGFsci5oOiBIZXJlLgorCSogc3JjL21haW4uYyAobWFpbik6IEhlcmUuCisJKiBzcmMvc3RhdGUuYywgc3JjL3N0YXRlLmg6IEhlcmUuCisKKwkqIHNyYy9pZWxyLmggKGllbHIpOiBJbiBwcmVjb25kaXRpb25zLCBleHBlY3QgTFIoMCkgbm90IExBTFIoMSkKKwlwYXJzZXIgdGFibGVzLgorCisyMDEwLTAxLTA0ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNsZW1zb24uZWR1PgorCisJbWFpbnQ6IHJ1biAibWFrZSB1cGRhdGUtY29weXJpZ2h0IgorCisyMDA5LTEyLTMwICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNsZW1zb24uZWR1PgorCisJUE9TSVg6IGNvbXBsYWluIGlmICVwcmVjJ3MgdG9rZW4gd2FzIG5vdCBkZWZpbmVkLgorCSogTkVXUyAoMi41KTogRG9jdW1lbnQuCisJKiBzcmMvcmVhZGVyLmMgKGdyYW1tYXJfcnVsZV9jaGVjayk6IENvbnZlcnQgd2FybmluZyB0bworCWNvbXBsYWludC4KKwkqIHRlc3RzL2lucHV0LmF0ICglcHJlYydzIHRva2VuIG11c3QgYmUgZGVmaW5lZCk6IFVwZGF0ZS4KKworMjAwOS0xMi0zMCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjbGVtc29uLmVkdT4KKworCVBPU0lYOiB3YXJuIGlmICVwcmVjJ3MgdG9rZW4gd2FzIG5vdCBkZWZpbmVkLgorCVJlcG9ydGVkIGJ5IEZsb3JpYW4gS3JvaG0gYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDA5LTEyL21zZzAwMDA1Lmh0bWw+LgorCSogTkVXUyAoMi40LjIpOiBEb2N1bWVudC4KKwkqIHNyYy9yZWFkZXIuYyAoZ3JhbW1hcl9ydWxlX2NoZWNrKTogSW1wbGVtZW50LgorCShncmFtbWFyX2N1cnJlbnRfcnVsZV9wcmVjX3NldCk6IEFkZCBjb21tZW50cyBleHBsYWluaW5nIHRoYXQgd2UKKwloZXJlIGFzc3VtZSBhICVwcmVjIGlkZW50aWZpZXIgaXMgYSB0b2tlbiwgYnV0IHdlIHN0aWxsIG1hbmFnZQorCXRvIHN1cHBvcnQgUE9TSVguCisJKiB0ZXN0cy9pbnB1dC5hdCAoJXByZWMncyB0b2tlbiBtdXN0IGJlIGRlZmluZWQpOiBOZXcgdGVzdAorCWdyb3VwLgorCisyMDA5LTEyLTMxICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNsZW1zb24uZWR1PgorCisJKiBIQUNLSU5HIChSZWxlYXNlIFByb2NlZHVyZSk6IFJlY29tbWVuZCBhIHNlY3VyZSBhdXRvbWFrZS4KKworMjAwOC0xMi0xMSAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlQcm9wYWdhdGUgaTE4biBjaGFuZ2VzIGludG8gZ2xyLmMuCisJKiBkYXRhL2dsci5jICh5eXJlcG9ydFN5bnRheEVycm9yKTogVXNlICJzd2l0Y2giIGluc3RlYWQgb2YKKwlidWlsZGluZyB0aGUgZXJyb3IgbWVzc2FnZSBmb3JtYXQgZHluYW1pY2FsbHkuCisJKiBkYXRhL2xhbHIxLmphdmE6IEZvcm1hdHRpbmcgY2hhbmdlcy4KKworMjAwOS0xMi0yMiAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjbGVtc29uLmVkdT4KKworCVBvcnQgc21hbGwgcGFydCBvZiBtYXN0ZXIncyAxMTcwN2IyYiBzbyBmdXR1cmUgcG9ydHMgYXJlIGVhc2llci4KKwkqIGRhdGEvbGFscjEuamF2YSAoWVlQYXJzZXI6Onl5c3ludGF4X2Vycm9yKTogVW50YWJpZnkuCisKKzIwMDgtMTItMTEgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJU2ltcGxpZnkgdGhlIGkxOG4gb2YgdGhlIGVycm9yIG1lc3NhZ2VzLgorCSogZGF0YS9sYWxyMS5jYzogQ29tbWVudCBjaGFuZ2VzLgorCisyMDA4LTExLTExICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCVByZWZlciBNNCB0byBDUFAuCisJKiBkYXRhL2xhbHIxLmNjOiBVc2UgYjRfZXJyb3JfdmVyYm9zZV9pZiBpbnN0ZWFkIG9mICNpZgorCVlZRVJST1JfVkVSQk9TRS4KKworMjAwOC0xMS0xMSAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlTdXBwb3J0IGkxOG4gb2YgdGhlIHBhcnNlIGVycm9yIG1lc3NhZ2VzLgorCSogVE9ETyAobGFscjEuY2MvSTE4bik6IFJlbW92ZS4KKwkqIGRhdGEvbGFscjEuY2MgKHl5c3ludGF4X2Vycm9yXyk6IFN1cHBvcnQgdGhlIHRyYW5zbGF0aW9uIG9mIHRoZQorCWVycm9yIG1lc3NhZ2VzLCBhcyBkb25lIGluIHlhY2MuYy4KKwlTdGF5IHdpdGhpbiB0aGUgeXkqIHBzZXVkbyBuYW1lc3BhY2UuCisKKzIwMDktMTItMjIgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2xlbXNvbi5lZHU+CisKKwlQb3J0IHNtYWxsIHBhcnQgb2YgbWFzdGVyJ3MgODkwMWYzMmUgc28gZnV0dXJlIHBvcnRzIGFyZSBlYXNpZXIuCisJKiBkYXRhL2xhbHIxLmNjICh5eTo6cGFyc2VyOjp5eXN5bnRheF9lcnJvcl8pOiBBbHdheXMgYWRkIHNlY29uZAorCWFyZ3VtZW50LCBidXQgbmFtZSBpdCBpbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBvbmx5IHdoZW4KKwl2ZXJib3NlIGVycm9yIG1lc3NhZ2VzIGFyZSBlbmFibGVkIGFuZCBpdCdsbCB0aHVzIGJlIHVzZWQuCisJKHl5OjpwYXJzZXI6OnBhcnNlKTogVXBkYXRlIHVzZSBvZiB5eXN5bnRheF9lcnJvcl8uCisKKzIwMDktMTItMjkgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2xlbXNvbi5lZHU+CisKKwlwb3J0YWJpbGl0eTogYDwnIGFuZCBgPicgYXJlIG5vdCBhbHdheXMgZGVmaW5lZCBvbiBhZGRyZXNzZXMuCisJU3BlY2lmaWNhbGx5LCBkb24ndCBzb3J0IG9iamVjdHMgYnkgdGhlaXIgbWVtb3J5IGFkZHJlc3NlcyB3aGVuCisJdGhleSdyZSBub3QgYWxsb2NhdGVkIGluIHRoZSBzYW1lIGFycmF5IG9yIG90aGVyIG9iamVjdC4gIFRob3VnaAorCUkgaGF2ZW4ndCBmb3VuZCBhIHRlc3QgY2FzZSB3aGVyZSB0aGF0IGZhaWxzIG9uIG15IHBsYXRmb3JtLCBDCisJc2F5cyB0aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLgorCSogc3JjL0Fubm90YXRpb25MaXN0LmMgKEFubm90YXRpb25MaXN0X19pbnNlcnRJbnRvKTogUmVtb3ZlCisJRklYTUUuICBVc2UgbmV3IGlkIGZpZWxkIG9mIEluYWRlcXVhY3lMaXN0IG5vZGVzIHJhdGhlciB0aGFuCisJdGhlaXIgbWVtb3J5IGFkZHJlc3NlcyB3aGVuIHNvcnRpbmcuCisJKEFubm90YXRpb25MaXN0X19jb21wdXRlX2Zyb21faW5hZGVxdWFjaWVzKTogQWRkCisJaW5hZGVxdWFjeV9saXN0X25vZGVfY291bnQgYXJndW1lbnQgdG8gcGFzcyB0bworCUluYWRlcXVhY3lMaXN0X19uZXdfY29uZmxpY3QuCisJKiBzcmMvQW5ub3RhdGlvbkxpc3QuaAorCShBbm5vdGF0aW9uTGlzdF9fY29tcHV0ZV9mcm9tX2luYWRlcXVhY2llcyk6IFVwZGF0ZSBwcm90b3R5cGUKKwlhbmQgZG9jdW1lbnRhdGlvbiBmb3IgbmV3IGFyZ3VtZW50LgorCSogc3JjL0luYWRlcXVhY3lMaXN0LmMgKEluYWRlcXVhY3lMaXN0X19uZXdfY29uZmxpY3QpOiBBZGQKKwlub2RlX2NvdW50IGFyZ3VtZW50IGFuZCB1c2UgaXQgdG8gYXNzaWduIGEgdW5pcXVlIElELgorCSogc3JjL0luYWRlcXVhY3lMaXN0LmggKEluYWRlcXVhY3lMaXN0Tm9kZUNvdW50KTogTmV3IHR5cGVkZWYuCisJKEluYWRlcXVhY3lMaXN0KTogQWRkIGlkIGZpZWxkLgorCShJbmFkZXF1YWN5TGlzdF9fbmV3X2NvbmZsaWN0KTogVXBkYXRlIHByb3RvdHlwZSBhbmQKKwlkb2N1bWVudGF0aW9uIGZvciBuZXcgYXJndW1lbnQuCisJKiBzcmMvaWVsci5jIChpZWxyX2NvbXB1dGVfYW5ub3RhdGlvbl9saXN0cyk6IFVwZGF0ZQorCUFubm90YXRpb25MaXN0X19jb21wdXRlX2Zyb21faW5hZGVxdWFjaWVzIGludm9jYXRpb24uCisKKzIwMDktMTItMjAgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2xlbXNvbi5lZHU+CisKKwlGaXggaGFuZGxpbmcgb2YgeXljaGFyIG1hbmlwdWxhdGlvbiBpbiB1c2VyIHNlbWFudGljIGFjdGlvbnMuCisJVGhlIHByb2JsZW0gd2FzIHRoYXQgeWFjYy5jIGRpZG4ndCBhbHdheXMgdXBkYXRlIHRoZSB5eWNoYXIKKwl0cmFuc2xhdGlvbiBhZnRlcndhcmRzLiAgSG93ZXZlciwgb3RoZXIgc2tlbGV0b25zIGFwcGVhciB0byBiZQorCWZpbmUuICBnbHIuYyBhcHBlYXJzIHRvIGFscmVhZHkgdHJhbnNsYXRlIHl5Y2hhciBiZWZvcmUgZXZlcnkKKwl1c2UuICBsYWxyMS5jYyBkb2VzIG5vdCBkZWZpbmUgeXljaGFyIGFuZCBkb2VzIG5vdCBkb2N1bWVudCBpdHMKKwlyZXBsYWNlbWVudCwgeXlsYSwgZm9yIHVzZXJzLiAgSXQgZG9lcyBwcm92aWRlIHl5Y2xlYXJpbiwgYnV0CisJdGhhdCBkb2VzIG5vdCBtYW5pcHVsYXRlIHl5bGEgYW5kIHRodXMgcmVxdWlyZXMgbm8gdHJhbnNsYXRpb24KKwl1cGRhdGUuICBJbiBsYWxyMS5qYXZhLCB5eWNoYXIgaXMgb3V0IG9mIHNjb3BlIGR1cmluZyBzZW1hbnRpYworCWFjdGlvbnMuCisJKiBORVdTICgyLjUpOiBEb2N1bWVudC4KKwkqIGRhdGEveWFjYy5jIChZWUJBQ0tVUCk6IERvbid0IGJvdGhlciB0cmFuc2xhdGluZyB5eWNoYXIgaW50bworCXl5dG9rZW4gaGVyZS4KKwkoeXlwYXJzZSwgeXlwdXNoX3BhcnNlKTogSW5zdGVhZCwgdHJhbnNsYXRlIGJlZm9yZSBldmVyeSB1c2Ugb2YKKwl5eXRva2VuLCBhbmQgYWRkIGNvbW1lbnRzIGV4cGxhaW5pbmcgdGhpcyBhcHByb2FjaC4KKwkqIHRlc3RzL2FjdGlvbnMuYXQgKERlc3Ryb3lpbmcgbG9va2FoZWFkIGFzc2lnbmVkIGJ5IHNlbWFudGljCisJYWN0aW9uKTogTmV3IHRlc3QgZ3JvdXAgY2hlY2tpbmcgdGhhdCB0cmFuc2xhdGlvbiBoYXBwZW5zIGJlZm9yZQorCWxvb2thaGVhZCBkZXN0cnVjdG9yIGNhbGxzIGF0IHBhcnNlciByZXR1cm4uICBQcmV2aW91c2x5LAorCWluY29ycmVjdCBkZXN0cnVjdG9ycyB3ZXJlIGNhbGxlZC4KKwkqIHRlc3RzL2NvbmZsaWN0cy5hdCAoJWVycm9yLXZlcmJvc2UgYW5kIGNvbnNpc3RlbnQKKwllcnJvcnMpOiBOZXcgdGVzdCBncm91cCBjaGVja2luZyB0aGF0IHRyYW5zbGF0aW9uIGhhcHBlbnMgYXQKKwlzeW50YXggZXJyb3IgZGV0ZWN0aW9uIGJlZm9yZSB0aGUgYXNzb2NpYXRlZCB2ZXJib3NlIGVycm9yCisJbWVzc2FnZSBhbmQgdGhlIGFzc29jaWF0ZWQgbG9va2FoZWFkIGRlc3RydWN0b3IgY2FsbHMuICBXaGlsZQorCXRoZSBkZXN0cnVjdG9yIGNhbGwgaXMgZml4ZWQgYnkgdGhpcyBwYXRjaCwgdGhlIHZlcmJvc2UgZXJyb3IKKwltZXNzYWdlIGlzIGN1cnJlbnRseSBpbmNvcnJlY3QgZHVlIHRvIGFub3RoZXIgYnVnIChzZWUKKwljb21tZW50cyBpbiB0ZXN0IGdyb3VwKSwgc28gdGhpcyBpcyBhbiBleHBlY3RlZCBmYWlsdXJlIGZvciBub3cuCisKKzIwMDktMTItMjEgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2xlbXNvbi5lZHU+CisKKwlZWUZBSUw6IHdhcm4gYWJvdXQgdXNlcyBhbmQgcmVtb3ZlIGZyb20gbGFscjEuamF2YS4KKwkqIE5FV1MgKDIuNSk6IERvY3VtZW50LgorCSogZGF0YS9sYWxyMS5qYXZhIChZWVBhcnNlcjo6WVlGQUlMKTogUmVuYW1lIHRvIFlZRVJSTEFCLAorCWFuZCBtYWtlIGl0IHByaXZhdGUuICBVcGRhdGUgYWxsIHVzZXMuCisJKiBzcmMvc2Nhbi1jb2RlLmwgKFNDX1JVTEVfQUNUSU9OKTogSW1wbGVtZW50IHdhcm5pbmcuCisKKzIwMDktMTItMjEgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2xlbXNvbi5lZHU+CisKKwlZWUZBSUw6IGRlcHJlY2F0ZS4KKwkqIE5FV1MgKDIuNC4yKTogRG9jdW1lbnQgZGVwcmVjYXRpb24gYW5kIHRoZSBwaGFzZS1vdXQgcGxhbi4KKwkqIGRhdGEvbGFscjEuamF2YSAoWVlQYXJzZXI6OllZRkFJTCk6IEFkZCBjb21tZW50IGFib3V0CisJZGVwcmVjYXRpb24uCisJKiBkYXRhL3lhY2MuYyAoWVlGQUlMKTogTGlrZXdpc2UsIGFuZCBzdXBwcmVzcyB3YXJuaW5ncyBhYm91dAorCVlZRkFJTCBmcm9tIEdDQyBjcHAncyAtV3VudXNlZC1tYWNyb3MuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoSmF2YSBBY3Rpb24gRmVhdHVyZXMpOiBSZW1vdmUgWVlGQUlMCisJZG9jdW1lbnRhdGlvbi4KKwkoTG9jYWxXb3Jkcyk6IFJlbW92ZSBZWUZBSUwuCisKKzIwMDktMTItMTcgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2xlbXNvbi5lZHU+CisKKwlDb2RlIGNsZWFudXAuCisJKiBzcmMvc3ltdGFiLmMsIHNyYy9zeW10YWIuaCAoc3ltYm9sX2NsYXNzX2dldF9zdHJpbmcpOiBSZW1vdmUKKwlmdW5jdGlvbiwgd2hpY2ggaXMgbm8gbG9uZ2VyIHVzZWQuCisKKzIwMDktMTItMTYgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2xlbXNvbi5lZHU+CisKKwlBZGQgZ2NjJ3MgLVd1bmRlZiB0byB0ZXN0IHN1aXRlIGFuZCBmaXggYW5vdGhlciB3YXJuaW5nIGZyb20gaXQuCisJKiBORVdTICgyLjQuMik6IFVwZGF0ZSBkZXNjcmlwdGlvbiBvZiAtV3VuZGVmIGZpeC4KKwkqIGNvbmZpZ3VyZS5hYyAoV0FSTl9DWFhGTEFHU19URVNUKTogTmV3IHN1YnN0aXR1dGlvbi4KKwkoV0FSTl9DRkxBR1NfVEVTVCk6IE5ldyBzdWJzdGl0dXRpb24uCisJKiBkYXRhL2dsci5jOiBBdm9pZCB3YXJuaW5nIGFib3V0IF9fU1RSSUNUX0FOU0lfXy4KKwkqIHRlc3RzL2F0bG9jYWwuaW4gKENGTEFHUyk6IFVzZSBXQVJOX0NGTEFHU19URVNUIGluc3RlYWQgb2YKKwlXQVJOX0NGTEFHUy4KKwkoTk9fV0VSUk9SX0NGTEFHUyk6IExpa2V3aXNlLgorCShDWFhGTEFHUyk6IFVzZSBXQVJOX0NYWEZMQUdTX1RFU1QgaW5zdGVhZCBvZiBXQVJOX0NYWEZMQUdTLgorCisyMDA5LTEyLTE2ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNsZW1zb24uZWR1PgorCisJKiBkYXRhL3lhY2MuYzogUmVmb3JtYXQgbTQgYSBsaXR0bGUuCisKKzIwMDktMTItMTYgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2xlbXNvbi5lZHU+CisKKwlEb2N1bWVudCBnY2MgLVd1bmRlZiBmaXguCisJKiBORVdTICgyLjQuMik6IEhlcmUuCisJKiBUSEFOS1MgKEpvbmF0aGFuIE5pZWRlcik6IEFkZC4KKworMjAwOS0xMi0xNSAgSm9uYXRoYW4gTmllZGVyICA8anJuaWVkZXJAZ21haWwuY29tPiAgKHRpbnkgY2hhbmdlKQorCisJU2ltcGxpZnkgeS50YWIuYyB3aGVuIGxvY2F0aW9uIHRyYWNraW5nIGlzIGRpc2FibGVkLgorCSogZGF0YS95YWNjLmM6IERvIG5vdCBjaGVjayBZWUxUWVBFX0lTX1RSSVZJQUwgaWYgbG9jYXRpb24KKwl0cmFja2luZyBpcyBub3QgZW5hYmxlZC4gIEluc3RlYWQsIHVuY29uZGl0aW9uYWxseSBkZWZpbmUKKwlZWV9MT0NBVElPTl9QUklOVCBhcyBhIG5vLW9wIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorCisyMDA5LTEyLTE1ICBKb25hdGhhbiBOaWVkZXIgIDxqcm5pZWRlckBnbWFpbC5jb20+ICAodGlueSBjaGFuZ2UpCisKKwlBdm9pZCB3YXJuaW5ncyBmcm9tIGdjYyAtV3VuZGVmIHkudGFiLmMuCisJKiBkYXRhL2dsci5jOiBDaGVjayBpZiBZWUVOQUJMRV9OTFMgYW5kIFlZTFRZUEVfSVNfVFJJVklBTCBhcmUKKwlkZWZpbmVkIGJlZm9yZSB1c2luZyB0aGVtLgorCSogZGF0YS9sYWxyMS5jYzogTGlrZXdpc2UuCisJKiBkYXRhL3lhY2MuYzogTGlrZXdpc2UuCisKKzIwMDktMTItMTUgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2xlbXNvbi5lZHU+CisKKwlhdXRvY29uZjogdXBkYXRlIHRvIGxhdGVzdCBmb3IgZml4IG9mIE00IGRldGVjdGlvbi4KKwlSZXBvcnRlZCBieSBFcmljIEJsYWtlLgorCSogc3VibW9kdWxlcy9hdXRvY29uZjogVXBkYXRlLgorCisyMDA5LTEyLTE1ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNsZW1zb24uZWR1PgorCisJcG9ydGFiaWxpdHk6IHVzZSAtREdOVUxJQl9QT1NJWENIRUNLLgorCVJlcG9ydGVkIGJ5IEVyaWMgQmxha2UuICBTZWUgZGlzY3Vzc2lvbnMgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDA5LTA5L21zZzAwMDA4Lmh0bWw+CisJYW5kCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctZ251bGliLzIwMDktMTAvbXNnMDAxMDguaHRtbD4uCisJKiBIQUNLSU5HIChSZWxlYXNlIGNoZWNrcyk6IFN1Z2dlc3QgLURHTlVMSUJfUE9TSVhDSEVDSy4KKwkqIGJvb3RzdHJhcC5jb25mIChnbnVsaWJfbW9kdWxlcyk6IEFkZCBhbGwgdGhlIHByaW50ZiBtb2R1bGVzCisJc3VnZ2VzdGVkIGJ5IC1ER05VTElCX1BPU0lYQ0hFQ0suICBBZGQgcmVhbGxvYy1wb3NpeCBhcworCXN1Z2dlc3RlZCBieSAtREdOVUxJQl9QT1NJWENIRUNLIGZvciBnbnVsaWIncyBvd24gdmFzbnByaW50Zi5jLgorCShleGNsdWRlZF9maWxlcyk6IFJlbW92ZSBtNC9wcmludGYtcG9zaXgubTQuCisJKiB0ZXN0cy9hdGxvY2FsLmluIChMSUJTKTogQXMgZm9yIExEQUREIGluIHNyYy9sb2NhbC5taywgYWRkCisJbGliL2xpYmJpc29uLmEgc28gZ251bGliIGxpYnJhcmllcyBjYW4gYmUgbGlua2VkLgorCisyMDA5LTEyLTE0ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNsZW1zb24uZWR1PgorCisJRW5hYmxlIGFzc2VydGlvbiBvdXRwdXQgYW5kIC0tZGlzYWJsZS1hc3NlcnQgZm9yIGNvbmZpZ3VyZS4KKwkqIGJvb3RzdHJhcC5jb25mIChnbnVsaWJfbW9kdWxlcyk6IEFkZCBhc3NlcnQgbW9kdWxlLgorCSogc3JjL3N5c3RlbS5oIChhdmVyKTogRGVmaW5lIGFzIGFzc2VydCwgYW5kIHN1bW1hcml6ZSB0aGUKKwlkaXNjdXNzaW9uIG9uIHRoaXMgaXNzdWUuCisKKzIwMDktMTItMTQgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2xlbXNvbi5lZHU+CisKKwlFeHBhbmQgR0xSIGFjcm9ueW0gaW4gc3VtbWFyeSBvZiBCaXNvbi4KKwlCYXNlZCBvbiBkaXNjdXNzaW9uIHdpdGggQWtpbSBEZW1haWxsZSBzdGFydGluZyBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA5LTA0L21zZzAwMDg3Lmh0bWw+LgorCSogZG9jL2Jpc29uLnRleGluZm8gKEludHJvZHVjdGlvbik6IEhlcmUuCisJKiBzcmMvZ2V0YXJncy5jICh1c2FnZSk6IEhlcmUuCisKKzIwMDktMTAtMDMgIEFsZXggUm96ZW5tYW4gIDxyb3plbm1hbkBnbWFpbC5jb20+CisKKwlEb2N1bWVudCBuYW1lZCByZWZlcmVuY2VzLgorCSogZG9jL2Jpc29uLnRleGluZm8gKEFjdGlvbnMpOiBBZGQgbmV3IGV4YW1wbGUgYW5kIHhyZWYgdG8KKwlVc2luZyBOYW1lZCBSZWZlcmVuY2VzIG5vZGUuCisJKFVzaW5nIE5hbWVkIFJlZmVyZW5jZXMpOiBOZXcgbm9kZS4KKworMjAwOS0xMC0xNiAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjbGVtc29uLmVkdT4KKworCWNsZWFudXAuCisJKiBzcmMvU2JpdHNldC5jIChTYml0c2V0X19uZXdfb25fb2JzdGFjayk6IFVzZSBTYml0c2V0IGluc3RlYWQKKwlvZiBjaGFyKi4KKwkoU2JpdHNldF9faXNFbXB0eSk6IFVzZSBTYml0c2V0IGluc3RlYWQgb2YgY2hhciouCisJKiBzcmMvU2JpdHNldC5oIChTYml0c2V0KTogTWFrZSBpdCBhIHBvaW50ZXIgdG8gdW5zaWduZWQgY2hhcgorCWluc3RlYWQgb2YgY2hhci4gIFRoaXMgaGVscHMgdG8gYXZvaWQgY2FzdGluZyBlcnJvcnMuCisJKFNiaXRzZXRfX29yKTogVXNlIFNiaXRzZXQgaW5zdGVhZCBvZiBjaGFyKi4KKworMjAwOS0xMC0xNiAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjbGVtc29uLmVkdT4KKworCXBvcnRhYmlsaXR5OiBkb24ndCBhc3N1bWUgOC1iaXQgYnl0ZXMuCisJVGhhdCBpcywgdXNlIENIQVJfQklUIGFuZCBVQ0hBUl9NQVggaW5zdGVhZCBvZiA4IGFuZCAweGZmLgorCSogc3JjL1NiaXRzZXQuaCAoU2JpdHNldF9fbmJ5dGVzKTogSGVyZS4KKwkoU2JpdHNldF9fYnl0ZUFkZHJlc3MpOiBIZXJlLgorCShTYml0c2V0X19iaXRfbWFzayk6IEhlcmUuCisJKFNiaXRzZXRfX2xhc3RfYnl0ZV9tYXNrKTogSGVyZS4KKwkoU2JpdHNldF9fb25lcyk6IEhlcmUuCisJKFNCSVRTRVRfX0ZPUl9FQUNIKTogSGVyZS4KKworMjAwOS0xMC0xMSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjbGVtc29uLmVkdT4KKworCXBvcnRhYmlsaXR5OiB1c2UgdmFfc3RhcnQgYW5kIHZhX2VuZCBpbiB0aGUgc2FtZSBmdW5jdGlvbi4KKwkqIHNyYy9jb21wbGFpbi5jIChlcnJvcl9tZXNzYWdlKTogTW92ZSB2YV9lbmQgZnJvbSBoZXJlLi4uCisJKEVSUk9SX01FU1NBR0UpOiAuLi4gdG8gaGVyZS4KKworMjAwOS0xMC0wOCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjbGVtc29uLmVkdT4KKworCSogZGF0YS9iaXNvbi5tNDogVXBkYXRlIGNvbW1lbnRzIGZvciByZW5hbWUgdG8gbXVzY2xlLXRhYi5oLgorCisyMDA5LTEwLTA4ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNsZW1zb24uZWR1PgorCisJUmVuYW1lIG11c2NsZV90YWIuKiB0byBtdXNjbGUtdGFiLiogZm9yIGNvbnNpc3RlbmN5IHdpdGggbWFzdGVyLgorCSogc3JjL01ha2VmaWxlLmFtIChiaXNvbl9TT1VSQ0VTKTogVXBkYXRlLgorCSogc3JjL2dldGFyZ3MuYywgc3JjL2llbHIuYywgc3JjL2xhbHIuYywgc3JjL21haW4uYywKKwlzcmMvb3V0cHV0LmMsIHNyYy9wYXJzZS1ncmFtLnksIHNyYy9wcmludC5jLCBzcmMvcmVhZGVyLmMsCisJc3JjL3RhYmxlcy5jOiBVcGRhdGUgaW5jbHVkZS4KKwkqIHNyYy9tdXNjbGVfdGFiLmMsIHNyYy9tdXNjbGVfdGFiLmg6IFJlbmFtZSB0by4uLgorCSogc3JjL211c2NsZS10YWIuYywgc3JjL211c2NsZS10YWIuaDogLi4uIHRoZXNlIGFuZCB1cGRhdGUKKwlpbmNsdWRlLgorCisyMDA5LTEwLTA3ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNsZW1zb24uZWR1PgorCisJTWlub3IgY29kZSBjbGVhbnVwLgorCSogc3JjL211c2NsZV90YWIuYyAoTVVTQ0xFX1VTRVJfTkFNRV9DT05WRVJUKTogUmVtb3ZlIG1hY3JvIGFuZAorCXJlcGxhY2UgYWxsIHVzZXMgd2l0aCBVTklRU1RSX0NPTkNBVC4KKwkqIHNyYy91bmlxc3RyLmMgKHVuaXFzdHJfdnNwcmludGYpOiBOZXcgZnVuY3Rpb24uCisJKiBzcmMvdW5pcXN0ci5oICh1bmlxc3RyX3ZzcHJpbnRmKTogQWRkIHByb3RvdHlwZS4KKwkoVU5JUVNUUl9DT05DQVQsIFVOSVFTVFJfR0VOX0ZPUk1BVCwgVU5JUVNUUl9HRU5fRk9STUFUXyk6IE5ldworCW1hY3Jvcy4KKworMjAwOS0xMC0wNCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjbGVtc29uLmVkdT4KKworCU1pbm9yIGNvZGUgY2xlYW51cC4KKwkqIHNyYy9wYXJzZS1ncmFtLnk6IENsZWFuIHVwIHNvcnRpbmcgb2YgZGVjbGFyYXRpb25zLgorCVVzZSB0eXBlcyB0byBzaW1wbGlmeSAlcHJpbnRlciBkZWNsYXJhdGlvbnMgd2hlcmUgcG9zc2libGUuCisJUHJvdmlkZSAlcHJpbnRlciBmb3IgQlJBQ0tFVEVEX0lEIGFuZCBzeW1ib2wucHJlYy4KKwkqIHNyYy9zeW10YWIuYzogV2hpdGVzcGFjZSBjaGFuZ2UuCisKKzIwMDktMTAtMDQgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2xlbXNvbi5lZHU+CisKKwl0ZXN0czogc2tpcCB0ZXN0cyBvZiBmaWxlIG5hbWVzIHRoYXQgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydC4KKwlSZXBvcnRlZCBieSBNaWNoYWVsIFJhc2tpbiBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDktMDkvbXNnMDAwMDEuaHRtbD4uCisJKiBUSEFOS1MgKE1pY2hhZWwgUmFza2luKTogQWRkLgorCSogdGVzdHMvb3V0cHV0LmF0IChBVF9DSEVDS19PVVRQVVRfRklMRV9OQU1FKTogRml4LiAgQ3lnd2luIHVzZWQKKwl0byBmYWlsIGF0IGxlYXN0IGZvciBmaWxlIG5hbWVzIGNvbnRhaW5pbmcgIjoiIG9yICJcIi4KKworMjAwOS0wOS0yMyAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjbGVtc29uLmVkdT4KKworCXl5c3ludGF4X2Vycm9yOiBhdm9pZCBkdXBsaWNhdGUgbG9va2FoZWFkIGNvbGxlY3Rpb24uCisJRXhjZXB0IHdoZW4gbWVtb3J5IHJlYWxsb2NhdGlvbiBpcyByZXF1aXJlZCwgdGhpcyBjaGFuZ2UKKwllbGltaW5hdGVzIHRoZSBuZWVkIHRvIGludm9rZSB5eXN5bnRheF9lcnJvciB0d2ljZSBhbmQgdGh1cyB0bworCXJlcGVhdCB0aGUgY29sbGVjdGlvbiBvZiBsb29rYWhlYWRzLiAgSXQgYWxzbyBwcmVwYXJlcyBmb3IKKwlmdXR1cmUgZXh0ZW5zaW9ucyB0aGF0IHdpbGwgbWFrZSB0aG9zZSByZXBldGl0aW9ucyBtb3JlCisJZXhwZW5zaXZlIGFuZCB0aGF0IHdpbGwgcmVxdWlyZSBhZGRpdGlvbmFsIG1lbW9yeSBtYW5hZ2VtZW50IGluCisJeXlzeW50YXhfZXJyb3IuICBGaW5hbGx5LCBpdCBmaXhlcyBhbiBvYnNjdXJlIGJ1ZyBhbHJlYWR5CisJZXhlcmNpc2VkIGluIHRoZSB0ZXN0IHN1aXRlLgorCSogZGF0YS95YWNjLmMgKHl5c3ludGF4X2Vycm9yKTogQWRkIGFyZ3VtZW50cyBmb3IgbWVzc2FnZQorCWJ1ZmZlciB2YXJpYWJsZXMgc3RvcmVkIGluIHRoZSBwYXJzZXIuICBJbnN0ZWFkIG9mIHNpemUsIHJldHVybgorCXN0YXR1cyBzaW1pbGFyIHRvIHl5cGFyc2Ugc3RhdHVzIGJ1dCBpbmRpY2F0aW5nIHN1Y2Nlc3Mgb2YKKwltZXNzYWdlIGNyZWF0aW9uLiAgT3RoZXIgdGhhbiB0aGUgYWN0dWFsIHJlYWxsb2NhdGlvbiBvZiB0aGUKKwltZXNzYWdlIGJ1ZmZlciwgaW1wb3J0IGFuZCBjbGVhbiB1cCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlCisJZnJvbS4uLgorCSh5eXBhcnNlLCB5eXB1c2hfcGFyc2UpOiAuLi4gaGVyZS4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKCVlcnJvci12ZXJib3NlIG92ZXJmbG93KTogTm8gbG9uZ2VyIGFuCisJZXhwZWN0ZWQgZmFpbHVyZS4KKworMjAwOS0wOS0yMyAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjbGVtc29uLmVkdT4KKworCXl5c3ludGF4X2Vycm9yOiB0ZXN0IG1lbW9yeSBtYW5hZ2VtZW50IG1vcmUuCisJKiB0ZXN0cy9hdGxvY2FsLmluIChOT19XRVJST1JfQ0ZMQUdTKTogTmV3IGNwcCBtYWNyby4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKCVlcnJvci12ZXJib3NlIGFuZCBZWVNUQUNLX1VTRV9BTExPQ0EpOgorCU5ldyB0ZXN0IGdyb3VwLgorCSglZXJyb3ItdmVyYm9zZSBvdmVyZmxvdyk6IE5ldyB0ZXN0IGdyb3VwIHRoYXQgcmV2ZWFscyBhbgorCW9ic2N1cmUgYnVnLiAgRXhwZWN0ZWQgZmFpbCBmb3Igbm93LgorCisyMDA4LTEyLTExICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCVBhc3MgdGhlIHRva2VuIHR5cGUgdG8geXlzeW50YXhfZXJyb3IuCisJKiBkYXRhL3lhY2MuYyAoeXlzeW50YXhfZXJyb3IpOiBUYWtlIHRoZSB0cmFuc2F0ZWQgdG9rZW4gaW5zdGVhZAorCW9mIHRoZSByYXcgbnVtYmVyLgorCUFkanVzdCBjYWxsZXJzLgorCisyMDA4LTEyLTExICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCVNpbXBsaWZ5IHRoZSBpMThuIG9mIHRoZSBlcnJvciBtZXNzYWdlcy4KKwkqIGRhdGEveWFjYy5jICh5eXN5bnRheF9lcnJvcik6IFJld3JpdGUsIHVzaW5nIGEgc3dpdGNoIGluc3RlYWQKKwlvZiBidWlsZGluZyBkeW5hbWljYWxseSB0aGUgZm9ybWF0IHN0cmluZy4KKworMjAwOS0xMC0wMyAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjbGVtc29uLmVkdT4KKworCVJlbW92ZSBkZWFkIGNvZGUuCisJKiBzcmMvc3ltdGFiLmMgKHN5bWJvbF9wYWNrKTogSGVyZSBiZWNhdXNlIGV2ZXJ5IHN5bWJvbCdzIG51bWJlcgorCWlzIGFsd2F5cyBkZWZpbmVkIGJ5IHRoaXMgdGltZS4KKworMjAwOS0xMC0wMyAgQWxleCBSb3plbm1hbiAgPHJvemVubWFuQGdtYWlsLmNvbT4KKworCUFkZCBhZGRpdGlvbmFsIHNwYWNlIGFmdGVyIHBlcmlvZHMgaW4gTkVXUy4KKwkqIE5FV1MgKDIuNSk6IGhlcmUuCisKKzIwMDktMDktMjkgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2xlbXNvbi5lZHU+CisKKwlVc2UgdGhlIGNvcnJlY3QgY29udmVyc2lvbiBzcGVjaWZpZXIgZm9yIHNpemVfdC4KKwlSZXBvcnRlZCBieSBKaW0gTWV5ZXJpbmcuCisJKiBzcmMvU2JpdHNldC5oIChTQklUU0VUX19JTkRFWF9fQ09OVkVSU0lPTl9TUEVDKTogTmV3LCAienUiCisJYmVjYXVzZSBTYml0c2V0X19JbmRleCBpcyBzaXplX3QuCisJKiBzcmMvU2JpdHNldC5jIChTYml0c2V0X19mcHJpbnQpOiBVc2UgaXQgaW5zdGVhZCBvZiAlZC4KKworMjAwOS0wOS0yNyAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjbGVtc29uLmVkdT4KKworCXRlc3RzOiBkb24ndCBhYnVzZSBBVF9CSVNPTl9DSEVDSy4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKHBhcnNlLWdyYW0ueTogTEFMUiA9IElFTFIpOiBNb3ZlCisJYWRkaXRpb25hbCBzaGVsbCBjb21tYW5kcyBvdXRzaWRlIG9mIEFUX0JJU09OX0NIRUNLLgorCisyMDA5LTA5LTI2ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNsZW1zb24uZWR1PgorCisJdGVzdHM6IGNoZWNrIHRoYXQgcGFyc2UtZ3JhbS55J3MgSUVMUiBhbmQgTEFMUiBhcmUgaWRlbnRpY2FsLgorCSogdGVzdHMvYXRsb2NhbC5pbiAoYWJzX3RvcF9zcmNkaXIpOiBOZXcgc2hlbGwgdmFyaWFibGUuCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChwYXJzZS1ncmFtLnk6IExBTFIgPSBJRUxSKTogTmV3IHRlc3QKKwlncm91cC4KKworMjAwOS0wOS0xNiAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlkb2M6IGNvbW1lbnQgY2hhbmdlcy4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvOiBDb21tZW50IGNoYW5nZXMuCisKKzIwMDktMDktMTYgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJZG9jOiBzcGVsbCBjaGVja2luZy4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvOiBoZXJlLgorCisyMDA5LTA5LTE5ICBBbGV4IFJvemVubWFuICA8cm96ZW5tYW5AZ21haWwuY29tPgorCisJS2VlcCBzdWItbWVzc2FnZXMgYWxpZ25lZC4gRml4IHN0cmluZ3MgZm9yIHRyYW5zbGF0aW9uLgorCSogc3JjL2xvY2F0aW9uLmggKGxvY2F0aW9uX3ByaW50KTogQWRkIHJldHVybiB2YWx1ZS4KKwkqIHNyYy9sb2NhdGlvbi5jIChsb2NhdGlvbl9wcmludCk6IFJldHVybiBudW1iZXIgb2YgcHJpbnRlZAorCWNoYXJhY3RlcnMuCisJKiBzcmMvY29tcGxhaW4uaCAoY29tcGxhaW5fYXRfaW5kZW50LCB3YXJuX2F0X2luZGVudCk6IFByb3RvdHlwZQorCW5ldyBmdW5jdGlvbnMuCisJKiBzcmMvY29tcGxhaW4uY3BwIChpbmRlbnRfcHRyKTogTmV3IHN0YXRpYyB2YXJpYWJsZS4KKwkoZXJyb3JfbWVzc2FnZSwgY29tcGxhaW5fYXRfaW5kZW50LCB3YXJuX2F0X2luZGVudCk6IEltcGxlbWVudAorCXRoZSBhbGlnbm1lbnQgbWVjaGFuaXNtLgorCSogc3JjL3NjYW4tY29kZS5sIChwYXJzZV9yZWYsIHNob3dfc3ViX21lc3NhZ2VzKTogRml4IHN0cmluZ3MKKwlmb3IgdHJhbnNsYXRpb25zLiBVc2UgbmV3IGFsaWdubWVudCBtZWNoYW5pc20uCisJKiB0ZXN0cy9uYW1lZC1yZWYuYXQ6IEFkanVzdCB0ZXN0LWNhc2VzLgorCSogTkVXUyAoMi41KTogQWRkIGFuIGFubm91bmNlbWVudCBhYm91dCBuYW1lZCByZWZlcmVuY2VzLgorCisyMDA5LTA5LTEzICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNsZW1zb24uZWR1PgorCisJdGVzdHM6IGNsZWFuIHVwIHB1c2guYXQgdGVzdCBncm91cCB0aXRsZXMuCisJKiB0ZXN0cy9wdXNoLmF0OiBSZW1vdmUgIlB1c2ggUGFyc2luZzogIiBmcm9tIHRlc3QgZ3JvdXAgdGl0bGVzCisJYmVjYXVzZSB0aGVzZSBhcmUgYWxyZWFkeSB1bmRlciB0aGUgYmFubmVyICJQdXNoIFBhcnNpbmcgVGVzdHMiLgorCisyMDA5LTA5LTEyICBBbGV4IFJvemVubWFuICA8cm96ZW5tYW5AZ21haWwuY29tPgorCisJUHJvdmlkZSBhbiBhZGRpdGlvbmFsIHN1Yi1tZXNzYWdlIGZvciBjbGFyaXR5LgorCUFkZCAic3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uIiBlcnJvciBtZXNzYWdlIHdoZW4KKwlhbiAiaW52YWxpZCByZWZlcmVuY2UiIGlzIGRldGVjdGVkIGluIG5hbWVkIHJlZmVyZW5jZXMKKwlyZXNvbHV0aW9uLgorCSogc3JjL3NjYW4tY29kZS5sOiBVcGRhdGUgImludmFsaWQgcmVmZXJlbmNlIiBjYXNlLgorCSogdGVzdHMvbmFtZWQtcmVmLmF0OiBBZGp1c3QgdGVzdC1jYXNlcy4KKworMjAwOS0wOS0xMCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjbGVtc29uLmVkdT4KKworCUNsZWFuIHVwIHlhY2MuYyBhIGxpdHRsZS4KKwkqIGRhdGEveWFjYy5jOiBDbGVhbiB1cCBNNCBmb3IgcmVhZGFiaWxpdHksIGFuZCBtYWtlIG91dHB1dAorCXdoaXRlc3BhY2UgbW9yZSBjb25zaXN0ZW50LiAgRm9yIHRoZSBtYWluIHBhcnNlIGZ1bmN0aW9uCisJY29tbWVudCwgaW5zdGVhZCBvZiBzYXlpbmcgInl5cGFyc2Ugb3IgeXlwdXNoX3BhcnNlIiwgc2F5IGVpdGhlcgorCSJ5eXBhcnNlIiBvciAieXlwdXNoX3BhcnNlIiBkZXBlbmRpbmcgb24gd2hpY2ggaXQgYWN0dWFsbHkgaXMuCisKKzIwMDktMDktMDMgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2xlbXNvbi5lZHU+CisKKwlDb21wbGFpbiBhYm91dCB1bnVzZWQgJWRlZmluZSB2YXJpYWJsZXMgYW5kICVjb2RlIHF1YWxpZmllcnMuCisJKiBORVdTICgyLjUpOiBEb2N1bWVudC4KKwkqIGRhdGEvYmlzb24ubTQgKGI0X2NoZWNrX3VzZXJfbmFtZXMpOiBDb21wbGFpbiBpbnN0ZWFkIG9mIHdhcm4uCisJKiBkb2MvYmlzb24udGV4aW5mbyAoRGVjbCBTdW1tYXJ5KTogRG9jdW1lbnQgY29tcGxhaW50LCBhbmQKKwlpbXByb3ZlICVkZWZpbmUgZG9jdW1lbnRhdGlvbiBhIGxpdHRsZSBvdGhlcndpc2UuCisJKiB0ZXN0cy9pbnB1dC5hdCAoUmVqZWN0IHVudXNlZCAlY29kZSBxdWFsaWZpZXJzKTogVXBkYXRlLgorCSglZGVmaW5lIGVycm9ycyk6IFVwZGF0ZS4KKwkoJWRlZmluZSwgLS1kZWZpbmUsIC0tZm9yY2UtZGVmaW5lKTogVXBkYXRlLgorCSglZGVmaW5lIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpOiBVcGRhdGUuCisJKFVudXNlZCAlZGVmaW5lIGFwaS5wdXJlKTogVXBkYXRlLgorCSogdGVzdHMvcHVzaC5hdCAoUHVzaCBQYXJzaW5nOiBVbnN1cHBvcnRlZCBTa2VsZXRvbnMpOiBVcGRhdGUuCisKKzIwMDktMDktMDMgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2xlbXNvbi5lZHU+CisKKwlVc2UgYXZlciBub3QgYXNzZXJ0LgorCSogc3JjL291dHB1dC5jOiBEb24ndCBpbmNsdWRlIGFzc2VydC5oLgorCShvdXRwdXRfc2tlbGV0b24pOiBVc2UgYXZlciBub3QgYXNzZXJ0LgorCSogc3JjL3N5c3RlbS5oIChhdmVyKTogSW4gZG9jdW1lbnRhdGlvbiBvZiB3aHksIGFkZCBsaW5rcyB0bworCVBhdWwgRWdnZXJ0J3MgZXhwbGFuYXRpb25zIGluIHRoZSBtYWlsaW5nIGxpc3RzLgorCisyMDA5LTA5LTA1ICBBbGV4IFJvemVubWFuICA8cm96ZW5tYW5AZ21haWwuY29tPgorCisJVXNlICJVbnJlc29sdmVkIHJlZmVyZW5jZSIgZXJyb3IgbWVzc2FnZSB3aGVuIG5vIHN5bWJvbHMgd2VyZSBmb3VuZAorCWluIGEgc3ltYm9saWMgcmVmZXJlbmNlIHJlc29sdXRpb24uIFJlbW92ZSAuZXhwciBhbmQgLWV4cHIgZnJvbQorCXRoZSBzaG93biByZWZlcmVuY2Ugd2hlbiB0aGUgcmVmZXJlbmNlIGlzIHVucmVzb2x2ZWQuCisJKiBzcmMvc2Nhbi1jb2RlLmw6IENoYW5nZSB0aGUgZXJyb3IgbWVzc2FnZSwgYWRqdXN0IGxvY2F0aW9uIGNvbHVtbnMsCisJcmVuYW1lIHZhcmlhYmxlICJleGFjdF9tb2RlIiB0byAiZXhwbGljaXRfYnJhY2tldGluZyIuCisJKiB0ZXN0cy9uYW1lZC1yZWYuYXQ6IEFkanVzdCBleGlzdGluZyB0ZXN0cyBhbmQgYWRkIGEgbmV3IG9uZS4KKworMjAwOS0wOS0wMyAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwkqIE5FV1MgKDIuNC4yKTogQWRkICJJbnRlcm5hdGlvbmFsaXphdGlvbiIgaXRlbS4KKworMjAwOS0wOS0wMyAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlib290c3RyYXA6IGZpeC9pbXByb3ZlIGZpbmRfdG9vbC4KKwkqIGJvb3RzdHJhcCAoZmluZF90b29sKTogSW1wcm92ZSBlcnJvciBtZXNzYWdlcy4KKwlGaXggdHlwbyBhYm91dCBmaW5kX3Rvb2xfbmFtZXMuCisKKzIwMDktMDgtMjkgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2xlbXNvbi5lZHU+CisKKwlGaXggZ2NjIDMuNC40IHNoYWRvd2luZyB3YXJuaW5nIHJlcG9ydGVkIGJ5IEVyaWMgQmxha2UuCisJU2VlCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDktMDgvbXNnMDAwOTMuaHRtbD4uCisJKiBzcmMvc2Nhbi1jb2RlLmggKGNvZGVfcHJvcHNfcnVsZV9hY3Rpb25faW5pdCk6IFJlbmFtZQorCW5hbWVkX3JlZiBhcmcgdG8gbmFtZSBzbyBpdCBkb2Vzbid0IHNoYWRvdyBuYW1lZF9yZWYgdHlwZS4gIFRoaXMKKwltYWtlcyBpdCBjb25zaXN0ZW50IHdpdGggdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaW4gc2Nhbi1jb2RlLmwKKwlhbnl3YXkuCisKKzIwMDktMDgtMjggIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2xlbXNvbi5lZHU+CisKKwklZGVmaW5lOiBhY2NlcHQgdW5xdW90ZWQgdmFsdWVzLgorCSogTkVXUyAoMi41KTogR3JvdXAgYWxsICVkZWZpbmUgY2hhbmdlcyB0b2dldGhlciwgYW5kIGRvY3VtZW50CisJdGhpcyBvbmUuICBSZW1vdmUgcXVvdGVzIGluIElFTFIgYW5kIGNhbm9uaWNhbCBMUiBlbnRyeS4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvOiBSZW1vdmUgcXVvdGVzIGluIG1vc3QgZXhhbXBsZXMgdGhyb3VnaG91dC4KKwkoRGVjbCBTdW1tYXJ5KTogVXBkYXRlICVkZWZpbmUgZG9jdW1lbnRhdGlvbi4KKwkoVGFibGUgb2YgU3ltYm9scyk6IExpa2V3aXNlLgorCSogc3JjL2llbHIuYyAoTHJUeXBlKTogVXBkYXRlIGRvY3VtZW50YXRpb24uCisJKiBzcmMvcGFyc2UtZ3JhbS55IChjb250ZW50Lm9wdCk6IEFkZCBwcm9kdWN0aW9uIGZvciBJRC4KKwkqIHRlc3RzL2NhbGMuYXQ6IFJlbW92ZSBxdW90ZXMgaW4gbW9zdCB0ZXN0cy4KKwkqIHRlc3RzL2V4aXN0aW5nLmF0OiBMaWtld2lzZS4KKwkqIHRlc3RzL2lucHV0LmF0OiBMaWtld2lzZS4KKwkqIHRlc3RzL2xvY2FsLmF0OiBMaWtld2lzZS4KKwkqIHRlc3RzL3B1c2guYXQ6IExpa2V3aXNlLgorCSogdGVzdHMvcmVkdWNlLmF0OiBMaWtld2lzZS4KKwkqIHRlc3RzL3RvcnR1cmUuYXQ6IExpa2V3aXNlLgorCisyMDA5LTA4LTI4ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNsZW1zb24uZWR1PgorCisJJWRlZmluZSBsci50eXBlOiBtYWtlIHZhbHVlcyBsb3dlcmNhc2UgSURzLgorCVRoYXQgaXMsICJMQUxSIiA9PiAibGFsciIsICJJRUxSIiA9PiAiaWVsciIsIGFuZAorCSJjYW5vbmljYWwgTFIiID0+ICJjYW5vbmljYWwtbHIiLgorCSogTkVXUyAoMi41KTogVXBkYXRlIGRvY3VtZW50YXRpb24uCisJKiBkb2MvYmlzb24udGV4aW5mbyAoRGVjbCBTdW1tYXJ5KTogTGlrZXdpc2UuCisJKiBzcmMvaWVsci5jIChpZWxyKTogVXNlIG5ldyB2YWx1ZXMuCisJKiBzcmMvaWVsci5oIChpZWxyKTogVXBkYXRlIGRvY3VtZW50YXRpb24uCisJKiBzcmMvcmVhZGVyLmMgKHByZXBhcmVfcGVyY2VudF9kZWZpbmVfZnJvbnRfZW5kX3ZhcmlhYmxlcyk6IFVzZQorCWFuZCB2YWxpZGF0ZSBuZXcgdmFsdWVzLgorCSogdGVzdHMvZXhpc3RpbmcuYXQgKEFUX1RFU1RfRVhJU1RJTkdfR1JBTU1BUik6IFVwZGF0ZSB0ZXN0CisJZ3JhbW1hcnMuCisJKiB0ZXN0cy9yZWR1Y2UuYXQgKEFUX1RFU1RfTFJfVFlQRSk6IExpa2V3aXNlLgorCisyMDA5LTA4LTI3ICBFcmljIEJsYWtlICA8ZWJiOUBieXUubmV0PgorCisJc2Nhbi1ncmFtOiBhdm9pZCBwb3J0YWJpbGl0eSB0cmFwIHdpdGggY3R5cGUgdXNhZ2UuCisJKiBzcmMvc2Nhbi1ncmFtLmwgKDxTQ19FU0NBUEVEX1NUUklORyxTQ19FU0NBUEVEX0NIQVJBQ1RFUj4pOgorCUF2b2lkIGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMDktMDgtMjcgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2xlbXNvbi5lZHU+CisKKwl0ZXN0czogdXNlIHBlcmwgZm9yIHByaW50aW5nIHNwZWNpYWwgc2VxdWVuY2VzIHRvIGZpbGVzLgorCUFuZCBza2lwIHRlc3RzIGlmIHBlcmwgaXMgbm90IGF2YWlsYWJsZS4gIFRoaXMgaXMgYmV0dGVyIHRoYW4KKwlwbGF5aW5nIHRyaWNrcyB3aXRoIHNoZWxsIHBvcnRhYmlsaXR5LiAgU3VnZ2VzdGVkIGJ5IEFraW0KKwlEZW1haWxsZS4KKwkqIHRlc3RzL2lucHV0LmF0IChCYWQgY2hhcmFjdGVyIGxpdGVyYWxzKTogVXNlIGl0IGhlcmUgZm9yCisJb21pdHRpbmcgZmluYWwgbmV3bGluZXMuCisJKEJhZCBlc2NhcGVzIGluIGxpdGVyYWxzKTogVXNlIGl0IGhlcmUgZm9yIHNwZWNpYWwgY2hhcmFjdGVycy4KKworMjAwOS0wOC0yNiAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjbGVtc29uLmVkdT4KKworCXRlc3RzOiBzaG93IGEgdXNlIG9mICVkZWZpbmUgbHIuZGVmYXVsdC1yZWR1Y3Rpb25zICJjb25zaXN0ZW50IgorCSogdGVzdHMvY29uZmxpY3RzLmF0ICglbm9uYXNzb2MgYW5kIGVvZik6IEV4dGVuZCB0byB0ZXN0IHRoYXQgaXQKKwlwcmV2ZW50cyB0aGUgb21pc3Npb24gb2YgZXhwZWN0ZWQgdG9rZW5zIGZvciAlZXJyb3ItdmVyYm9zZS4KKworMjAwOS0wOC0yNiAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwl0ZXN0czogcG9ydGFiaWxpdHkgZml4LgorCSogdGVzdHMvaW5wdXQuYXQgKEJhZCBlc2NhcGVzIGluIGxpdGVyYWxzKTogRG9uJ3QgZXhwZWN0ICJlY2hvCisJJ1wwJyIgdG8gb3V0cHV0IFwgdGhlbiAwLgorCisyMDA5LTA4LTI2ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNsZW1zb24uZWR1PgorCisJQWN0dWFsbHkgaGFuZGxlIHRoZSB5eXRhYmxlIHplcm8gdmFsdWUgY29ycmVjdGx5IHRoaXMgdGltZS4KKwkqIGRhdGEvZ2xyLmMsIGRhdGEvbGFscjEuY2MsIGRhdGEvbGFscjEuamF2YSwgZGF0YS95YWNjLmM6IERvbid0CisJbWVudGlvbiB6ZXJvIHZhbHVlcyBpbiB0aGUgWVlUQUJMRSBjb21tZW50cy4KKwkqIGRhdGEvZ2xyLmMgKHl5dGFibGVfdmFsdWVfaXNfZXJyb3IpOiBEb24ndCBjaGVjayBmb3IgemVybworCXZhbHVlLgorCSogZGF0YS9sYWxyMS5jYyAoeXlfdGFibGVfdmFsdWVfaXNfZXJyb3JfKTogTGlrZXdpc2UuCisJKiBkYXRhL3lhY2MuYyAoeXl0YWJsZV92YWx1ZV9pc19lcnJvcik6IExpa2V3aXNlLgorCSogZGF0YS9sYWxyMS5qYXZhICh5eV90YWJsZV92YWx1ZV9pc19lcnJvcl8pOiBMaWtld2lzZS4KKwkoeXlzeW50YXhfZXJyb3IpOiBGaXggdHlwbyBpbiBjb2RlOiB1c2UgeXl0YWJsZV8gbm90IHl5Y2hlY2tfLgorCSogc3JjL3RhYmxlcy5oOiBJbiBoZWFkZXIgY29tbWVudHMsIGV4cGxhaW4gd2h5IGl0J3MgdXNlbGVzcyB0bworCWNoZWNrIGZvciBhIHplcm8gdmFsdWUgaW4geXl0YWJsZS4KKworMjAwOS0wOC0yNSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjbGVtc29uLmVkdT4KKworCU1vcmUgZml4ZXMgcmVsYXRlZCB0byBsYXN0IHR3byBwYXRjaGVzLgorCSogZGF0YS9jLm00IChiNF90YWJsZV92YWx1ZV9lcXVhbHMpOiBDb21tZW50IHRoYXQgWVlJRCBtdXN0IGJlCisJZGVmaW5lZC4KKwkqIGRhdGEvZ2xyLmMsIGRhdGEvbGFscjEuY2MsIGRhdGEvbGFscjEuamF2YSwgZGF0YS95YWNjLmM6IEZpeAorCXl5dGFibGUgY29tbWVudHM6IHplcm8gaW5kaWNhdGVzIHN5bnRheCBlcnJvciBub3QgZGVmYXVsdAorCWFjdGlvbi4KKwkqIGRhdGEvZ2xyLmMgKHl5aXNfcGFjdF9uaW5mKTogUmVuYW1lIHRvLi4uCisJKHl5cGFjdF92YWx1ZV9pc19kZWZhdWx0KTogLi4uIHRoaXMuCisJKHl5aXNEZWZhdWx0ZWRTdGF0ZSk6IFVwZGF0ZSBmb3IgcmVuYW1lLgorCSh5eWlzX3RhYmxlX25pbmYpOiBSZW5hbWUgdG8uLi4KKwkoeXl0YWJsZV92YWx1ZV9pc19lcnJvcik6IC4uLiB0aGlzLCBhbmQgY2hlY2sgZm9yIHZhbHVlIHplcm8KKwliZXNpZGVzIGp1c3QgWVlUQUJMRV9OSU5GLgorCSh5eWdldExSQWN0aW9ucyk6IENoZWNrIGZvciBkZWZhdWx0IHZhbHVlIGZyb20geXlwYWN0LiAgSXQKKwlhcHBlYXJzIHRoYXQgdGhpcyBjaGVjayBpcyBhbHdheXMgcGVyZm9ybWVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uCisJaXMgaW52b2tlZCwgYW5kIHNvIGFkZGluZyB0aGUgY2hlY2sgaGVyZSBpcyBwcm9iYWJseSByZWR1bmRhbnQuCisJSG93ZXZlciwgdGhlIGNvZGUgbWF5IGV2b2x2ZSBhZnRlciB0aGlzIHN1YnRsZXR5IGlzIGZvcmdvdHRlbi4KKwlBbHNvLCB1cGRhdGUgZm9yIHJlbmFtZSB0byB5eXRhYmxlX3ZhbHVlX2lzX2Vycm9yLiAgQmVjYXVzZSB0aGF0CisJbWFjcm8gbm93IGNoZWNrcyBmb3IgemVybywgYSBkaWZmZXJlbnQgYnV0IGVxdWl2YWxlbnQgYnJhbmNoIG9mCisJdGhlIGlmLXRoZW4tZWxzZSBoZXJlIGlzIGV2YWx1YXRlZC4KKwkoeXlyZXBvcnRTeW50YXhFcnJvcik6IFVwZGF0ZSBmb3IgcmVuYW1lIHRvCisJeXl0YWJsZV92YWx1ZV9pc19lcnJvci4gIFRoZSB6ZXJvIGNvbmRpdGlvbiB3YXMgbWlzaGFuZGxlZAorCWJlZm9yZS4KKwkoeXlyZWNvdmVyU3ludGF4RXJyb3IpOiBVcGRhdGUgZm9yIHJlbmFtZXMuICBObyBiZWhhdmlvcmFsCisJY2hhbmdlcy4KKwkqIGRhdGEvbGFscjEuY2MsIGRhdGEvbGFscjEuamF2YSAoeXlfcGFjdF92YWx1ZV9pc19kZWZhdWx0Xyk6CisJTmV3IGZ1bmN0aW9uLgorCSh5eV90YWJsZV92YWx1ZV9pc19lcnJvcl8pOiBOZXcgZnVuY3Rpb24uCisJKHBhcnNlKTogVXNlIG5ldyBmdW5jdGlvbnMgd2hlcmUgcG9zc2libGUuICBObyBiZWhhdmlvcmFsCisJY2hhbmdlcy4KKwkoeXlzeW50YXhfZXJyb3JfLCB5eXN5bnRheF9lcnJvcik6IFVzZSB5eV90YWJsZV92YWx1ZV9pc19lcnJvcl8uCisJVGhlIHplcm8gY29uZGl0aW9uIHdhcyBtaXNoYW5kbGVkIGJlZm9yZS4KKwkqIGRhdGEveWFjYy5jICh5eWlzX3BhY3RfbmluZik6IFJlbmFtZSB0by4uLgorCSh5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdCk6IC4uLiB0aGlzLgorCSh5eWlzX3RhYmxlX25pbmYpOiBSZW5hbWUgdG8uLi4KKwkoeXl0YWJsZV92YWx1ZV9pc19lcnJvcik6IC4uLiB0aGlzLCBhbmQgY2hlY2sgZm9yIHZhbHVlIHplcm8KKwliZXNpZGVzIGp1c3QgWVlUQUJMRV9OSU5GLgorCSh5eXN5bnRheF9lcnJvcik6IFVwZGF0ZSBmb3IgcmVuYW1lIHRvIHl5dGFibGVfdmFsdWVfaXNfZXJyb3IuCisJVGhlIHplcm8gY29uZGl0aW9uIHdhcyBtaXNoYW5kbGVkIGJlZm9yZS4KKwkoeXlwYXJzZSk6IFVwZGF0ZSBmb3IgcmVuYW1lcy4gIE5vIGJlaGF2aW9yYWwgY2hhbmdlcy4KKwkqIHNyYy90YWJsZXMuaDogSW1wcm92ZSBjb21tZW50cyBhYm91dCB5eXBhY3QsIHl5dGFibGUsIGV0Yy4KKwltb3JlLiAgTW9zdCBpbXBvcnRhbnRseSwgc2F5IHl5dGFibGUgdmFsdWUgb2YgemVybyBtZWFucyBzeW50YXgKKwllcnJvciBub3QgZGVmYXVsdCBhY3Rpb24uCisKKzIwMDktMDgtMjUgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2xlbXNvbi5lZHU+CisKKwlGaXggJWVycm9yLXZlcmJvc2UgZm9yIGNvbmZsaWN0cyByZXNvbHZlZCBieSAlbm9uYXNzb2MuCisJKiBORVdTICgyLjUpOiBEb2N1bWVudC4KKwkqIGRhdGEvZ2xyLmMgKHl5cmVwb3J0U3ludGF4RXJyb3IpOiBGaXggdGhpcyBieSBjaGVja2luZworCXl5aXNfdGFibGVfbmluZi4KKwkqIGRhdGEveWFjYy5jICh5eXN5bnRheF9lcnJvcik6IExpa2V3aXNlLgorCSogZGF0YS9sYWxyMS5jYyAoeXlzeW50YXhfZXJyb3JfKTogRml4IHRoaXMgYnkgY2hlY2tpbmcKKwl5eXRhYmxlX25pbmZfLgorCSogZGF0YS9sYWxyMS5qYXZhICh5eXN5bnRheF9lcnJvcik6IExpa2V3aXNlLgorCSogdGVzdHMvY29uZmxpY3RzLmF0ICglbm9uYXNzb2MgYW5kIGVvZik6IFVwZGF0ZSBleHBlY3RlZCBvdXRwdXQKKwlhbmQgcmVtb3ZlIEZJWE1FLgorCisyMDA5LTA4LTI1ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNsZW1zb24uZWR1PgorCisJU29tZSBjb2RlIGFuZCBkb2N1bWVudGF0aW9uIGltcHJvdmVtZW50cy4KKwkqIGRhdGEvYy5tNCAoYjRfdGFibGVfdmFsdWVfZXF1YWxzKTogTmV3IG1hY3JvIHRvIGNhcHR1cmUKKwlzb21lIHJlcGVhdGVkIGNvZGUuCisJKiBkYXRhL2dsci5jICh5eWlzX3BhY3RfbmluZik6IFVzZSBpdCBoZXJlLgorCSh5eWlzX3RhYmxlX25pbmYpOiBMaWtld2lzZS4KKwkoeXlyZXBvcnRTeW50YXhFcnJvcik6IEltcHJvdmUgaW50ZXJuYWwgY29tbWVudHMuCisJKiBkYXRhL3lhY2MuYyAoeXlpc19wYWN0X25pbmYpOiBOZXcgbWFjcm8gY29waWVkIGZyb20gZ2xyLmMuCisJVXNlIGl0IGV2ZXJ5d2hlcmUgcG9zc2libGUuCisJKHl5aXNfdGFibGVfbmluZik6IExpa2V3aXNlLgorCSh5eXN5bnRheF9lcnJvcik6IEltcHJvdmUgaW50ZXJuYWwgY29tbWVudHMuCisJKiBkYXRhL2xhbHIxLmNjICh5eXN5bnRheF9lcnJvcl8pOiBMaWtld2lzZS4KKwkqIGRhdGEvbGFscjEuamF2YSAoeXlzeW50YXhfZXJyb3IpOiBMaWtld2lzZS4KKwkqIHNyYy90YWJsZXMuaDogSW1wcm92ZSBjb21tZW50cyBhYm91dCB5eXBhY3QsIHl5dGFibGUsIGV0Yy4KKworMjAwOS0wOC0yMSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjbGVtc29uLmVkdT4KKworCVVzZSBsb2NhbGUgd2hlbiBxdW90aW5nLgorCSogc3JjL3NjYW4tZ3JhbS5sIChTQ19FU0NBUEVEX1NUUklORywgU0NfRVNDQVBFRF9DSEFSQUNURVIpOiBVc2UKKwlxdW90ZSByYXRoZXIgdGhhbiBpbXBsZW1lbnRpbmcgcXVvdGluZyBoZXJlLgorCisyMDA5LTA4LTIwICBFcmljIEJsYWtlICA8ZWJiOUBieXUubmV0PgorCisJTWFrZSBwcmV2aW91cyBwYXRjaCBtb3JlIHJvYnVzdC4KKwkqIHNyYy9vdXRwdXQuYyAoQVJSQVlfQ0FSRElOQUxJVFkpOiBOZXcgbWFjcm8sIGNvcGllZCBmcm9tCisJYXJnbWF0Y2guaC4KKwkob3V0cHV0X3NrZWxldG9uKTogVXNlIGl0LgorCVN1Z2dlc3RlZCBieSBBa2ltIERlbWFpbGxlLgorCisJSW1wb3J0IGxhdGVzdCBtNC9tNC5tNC4KKwkqIHN1Ym1vZHVsZXMvYXV0b2NvbmY6IFVwZGF0ZSB0byBhdXRvY29uZiAyLjY0LgorCSogY29uZmlndXJlLmFjIChNNF9HTlVfT1BUSU9OKTogTmV3IGRlZmluZS4KKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3NrZWxldG9uKTogVXNlIGl0IHRvIHJlc29sdmUgRklYTUUuCisJKiBORVdTOiBNZW50aW9uIHRoaXMuCisKKzIwMDktMDgtMTkgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2xlbXNvbi5lZHU+CisKKwlGaXggY29tcGxhaW50cyBhYm91dCBlc2NhcGUgc2VxdWVuY2VzLgorCURpc2N1c3NlZCBzdGFydGluZyBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA5LTA4L21zZzAwMDM2Lmh0bWw+LgorCSogc3JjL3NjYW4tZ3JhbS5sIChTQ19FU0NBUEVEX1NUUklORywgU0NfRVNDQVBFRF9DSEFSQUNURVIpOgorCUZvciBhIFwwIGFuZCBzaW1pbGFyIGVzY2FwZSBzZXF1ZW5jZXMgbWVhbmluZyB0aGUgbnVsbAorCWNoYXJhY3RlciwgcmVwb3J0IGFuIGludmFsaWQgZXNjYXBlIHNlcXVlbmNlIGluc3RlYWQgb2YgYW4KKwlpbnZhbGlkIG51bGwgY2hhcmFjdGVyIGJlY2F1c2UgdGhlIGxhdHRlciBkb2VzIG5vdCBhY3R1YWxseQorCWFwcGVhciBpbiB0aGUgdXNlcidzIGlucHV0LgorCUluIGFsbCBlc2NhcGUgc2VxdWVuY2UgY29tcGxhaW50cywgZG9uJ3QgZXNjYXBlIHRoZSBpbml0aWFsCisJYmFja3NsYXNoLCBhbmQgZG9uJ3QgcXVvdGUgd2hlbiB0aGUgc2VxdWVuY2UgYXBwZWFycyBhdCB0aGUgZW5kCisJb2YgdGhlIGNvbXBsYWludCBsaW5lIHVubGVzcyB0aGVyZSdzIHdoaXRlc3BhY2UgdGhhdCBxdW90ZWFyZworCXdvbid0IGVzY2FwZS4KKwlDb25zaXN0ZW50bHkgc2F5ICJpbnZhbGlkIiBub3QgInVucmVjb2duaXplZCIuCisJQ29uc2lzdGVudGx5IHByZWZlciAiZW1wdHkgY2hhcmFjdGVyIGxpdGVyYWwiIG92ZXIgImV4dHJhCisJY2hhcmFjdGVycyBpbiBjaGFyYWN0ZXIgbGl0ZXJhbCIgd2FybmluZyBmb3IgaW52YWxpZCBlc2NhcGUKKwlzZXF1ZW5jZXM7IHRoYXQgaXMsIGNvbnNpc3RlbnRseSBkaXNjYXJkIHRob3NlIHNlcXVlbmNlcy4KKwkqIHRlc3RzL2lucHV0LmF0IChCYWQgZXNjYXBlcyBpbiBsaXRlcmFscyk6IE5ldy4KKworMjAwOS0wOC0xOSAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlkb2M6IGZpeGVzLgorCSogZG9jL2Jpc29uLnRleGluZm86IEZpeCBtaW5vciBUZXhpbmZvIGVycm9ycy4KKworMjAwOS0wOC0xOSAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlkb2M6ICVpbml0aWFsLWFjdGlvbiB0byBpbml0aWFsaXplIHl5bGxvYy4KKwlSZXBvcnRlZCBieSBCaWxsIEFsbG9tYmVydC4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvOiBTZXQgZmlsbC1jb2x1bW4gdG8gNzYuCisJKExvY2F0aW9uIFR5cGUpOiBEb2N1bWVudCB0aGUgdXNlIG9mICVpbml0aWFsLWFjdGlvbiB0byBpbml0aWFsaXplCisJeXlsbG9jLgorCisyMDA5LTA4LTE4ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNsZW1zb24uZWR1PgorCisJbWFpbnQ6IHVwZGF0ZSBmb3IgZ251bGliJ3MgcmVjZW50IHVwZGF0ZS1jb3B5cmlnaHQgY2hhbmdlcworCSogZ251bGliOiBVcGRhdGUuCisJKiAueC11cGRhdGUtY29weXJpZ2h0IChDT1BZSU5HKTogQWRkIGFzIGl0J3Mgbm8gbG9uZ2VyIGltcGxpZWQKKwl3aGVuIC54LXVwZGF0ZS1jb3B5cmlnaHQgaXMgcHJlc2VudC4KKwkqIGNmZy5tayAodXBkYXRlLWNvcHlyaWdodC1sb2NhbCk6IFJlbW92ZSwgbm93IGlnbm9yZWQuCisJKHVwZGF0ZS1jb3B5cmlnaHQpOiBEZWNsYXJlIHVwZGF0ZS1iNC1jb3B5cmlnaHQgYXMgYSBkZXBlbmRlbmN5LgorCisyMDA5LTA4LTE3ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCWJ1aWxkOiByZXF1aXJlIGdldHRleHQgMC4xNy4KKworCVN1Z2dlc3RlZCBieSBCcnVubyBIYWlibGUuCisJaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDA5LTA4L21zZzAwMDA5Lmh0bWwKKwkqIGNvbmZpZ3VyZS5hYzogcmVxdWlyZSBnZXR0ZXh0IDAuMTcgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aAorCWdudWxpYi4KKworMjAwOS0wOC0xNyAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlidWlsZDogbG93ZXIgZ2V0dGV4dCByZXF1aXJlbWVudHMuCisKKwlCaXNvbiB3YXMgdXNlbGVzc2x5IHJlcXVpcmluZyB0aGUgZm9ybWF0c3RyaW5nIG1hY3JvcyBmcm9tCisJZ2V0dGV4dCwgd2hpY2ggcmVzdWx0ZWQgaW4gbW8gZmlsZXMgbm90IGJlaW5nIGluc3RhbGxlZCBvbiBzeXN0ZW1zCisJdGhhdCBwZXJmZWN0bHkgc3VwcG9ydGVkIEJpc29uIG1vIGZpbGVzLiAgTG93ZXIgdGhlIHJlcXVpcmVtZW50LgorCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwOS0wOC9tc2cwMDAwNi5odG1sCisKKwkqIGNvbmZpZ3VyZS5hYzogUmVxdWlyZSBuZWVkLW5nZXR0ZXh0IGluc3RlYWQgb2YKKwluZWVkLWZvcm1hdHN0cmluZy1tYWNyb3MuCisJUmVwb3J0ZWQgYnkgTWFydGluIEphYm9jcy4KKwlTdWdnZXN0ZWQgYnkgQnJ1bm8gSGFpYmxlLgorCSogSU5TVEFMTDogUmVzdHJ1Y3R1cmUuCisJKEludGVybmF0aW9uYWxpemF0aW9uKTogTmV3LgorCisyMDA5LTA4LTE0ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNsZW1zb24uZWR1PgorCisJbWFpbnQ6IGZpeCB1c2Ugb2YgY29weXJpZ2h0IHllYXIgaW50ZXJ2YWxzLgorCSogZ251bGliOiBVcGRhdGUuCisJKiBib290c3RyYXAuY29uZiAoZ251bGliX21vZHVsZXMpOiBVcGRhdGUgZ2V0b3B0IHRvIGdldG9wdC1nbnUKKwlhcyBub3cgcmVjb21tZW5kZWQgaW4gZ251bGliL05FV1MuCisJKiBidWlsZC1hdXgvdXBkYXRlLWI0LWNvcHlyaWdodDogRml4LgorCSogY2ZnLm1rICh1cGRhdGUtY29weXJpZ2h0LWVudik6IENvbmZpZ3VyZSB1cGRhdGUtY29weXJpZ2h0LgorCisyMDA5LTA4LTEzICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNsZW1zb24uZWR1PgorCisJTWFrZSBpdCBlYXNpZXIgdG8gd3JpdGUgZGV0ZXJtaW5pc3RpYyB0ZXN0cy4KKwlDb250aW51ZXMgQWtpbSdzIHdvcmsgZnJvbSBoaXMgMjAwOS0wNi0xMCBjb21taXRzLgorCSogc3JjL3JlYWRlci5jIChjaGVja19hbmRfY29udmVydF9ncmFtbWFyKTogRG9uJ3QgYWRkIGFueQorCXN5bWJvbHMgYWZ0ZXIgdGhlIGZpcnN0IHN5bWJvbHNfZG8gaW52b2NhdGlvbi4KKwkqIHNyYy9zeW10YWIuYyAoc3ltYm9sc19zb3J0ZWQpOiBOZXcgc3RhdGljIGdsb2JhbC4KKwkodXNlcl90b2tlbl9udW1iZXJfcmVkZWNsYXJhdGlvbik6IFVwZGF0ZSBjb21tZW50cy4KKwkoc3ltYm9sX2Zyb21fdW5pcXN0cik6IElmIGEgbmV3IHN5bWJvbCBpcyBiZWluZyBjcmVhdGVkLCBhc3NlcnQKKwl0aGF0IHN5bWJvbHNfc29ydGVkIGhhc24ndCBiZWVuIGFsbG9jYXRlZCB5ZXQuCisJKHN5bWJvbHNfZnJlZSk6IEZyZWUgc3ltYm9sc19zb3J0ZWQuCisJKHN5bWJvbHNfY21wLCBzeW1ib2xzX2NtcF9xc29ydCk6IE5ldyBmdW5jdGlvbnMuCisJKHN5bWJvbHNfZG8pOiBTb3J0IHN5bWJvbF90YWJsZSBpbnRvIHN5bWJvbHNfc29ydGVkIG9uIGZpcnN0CisJaW52b2NhdGlvbi4KKwkqIHRlc3RzL2lucHV0LmF0IChOdW1iZXJlZCB0b2tlbnMpOiBSZWNvbWJpbmUgdGVzdHMgbm93IHRoYXQgdGhlCisJb3V0cHV0IHNob3VsZCBiZSBkZXRlcm1pbmlzdGljIGFjcm9zcyBtdWx0aXBsZSBudW1iZXJzLgorCisyMDA5LTA4LTEyICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCWRpc3RjaGVjazogZml4LgorCisJKiBleGFtcGxlcy9jYWxjKysvTWFrZWZpbGUuYW06IChFWFRSQV9ESVNUKTogU2hpcCBjYWxjLnN0YW1wLgorCisyMDA5LTA4LTEwICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNsZW1zb24uZWR1PgorCisJKiB0ZXN0cy9NYWtlZmlsZS5hbSAoVEVTVFNVSVRFX0FUKTogQWRkIG5hbWVkLXJlZnMuYXQuCisKKzIwMDktMDgtMTAgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2xlbXNvbi5lZHU+CisKKwlNaXNjZWxsYW5lb3VzIGNvZGUgcmVhZGFiaWxpdHkgaW1wcm92ZW1lbnRzLgorCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRlcik6IE1vdmUgJWRlZmluZSBmcm9udC1lbmQgdmFyaWFibGUKKwlkZWZhdWx0cyBhbmQgY2hlY2tpbmcgaW50by4uLgorCShwcmVwYXJlX3BlcmNlbnRfZGVmaW5lX2Zyb250X2VuZF92YXJpYWJsZXMpOiAuLi4gdGhpcyBuZXcKKwlmdW5jdGlvbi4KKworCSogc3JjL3NjYW4tZ3JhbS5sIChJTklUSUFMKTogRm9yIGNvbnNpc3RlbmN5IHdpdGggc3RyaW5nCisJbGl0ZXJhbHMsIGRvbid0IHN0b3JlIG9wZW4gcXVvdGUgb24gY2hhcmFjdGVyIGxpdGVyYWwuICBJdCdzCisJZGlzY2FyZGVkIGJlZm9yZSByZXR1cm5pbmcgYW55d2F5LgorCShTQ19FU0NBUEVEX0NIQVJBQ1RFUik6IFNpbWlsYXJseSwgZG9uJ3Qgc3RvcmUgY2xvc2UgcXVvdGUuCisJTWFrZSBsZW5ndGggdGVzdCBtb3JlIHJlYWRhYmxlLCBhbmQgbWFrZSB0aGUgY2hhcmFjdGVyIHN0b3JlZAorCWZvciBhbiBlbXB0eSBsaXRlcmFsIG1vcmUgb2J2aW91cyB3aGlsZSBjb25zaXN0ZW50IHdpdGggdGhlCisJcHJldmlvdXMgYmVoYXZpb3IuCisKKwkqIHNyYy9zeW10YWIuYywgc3JjL3N5bXRhYi5oOiBSZW5hbWUgVVNFUl9OVU1CRVJfQUxJQVMgdG8KKwlVU0VSX05VTUJFUl9IQVNfU1RSSU5HX0FMSUFTIHRocm91Z2hvdXQuCisJKiBzcmMvc3ltdGFiLmMgKHN5bWJvbF9tYWtlX2FsaWFzKTogUmVtb3ZlIGNvbW1lbnQgZnJvbSBzeW10YWIuYworCXRoYXQgaXMgcmVwZWF0ZWQgaW4gc3ltdGFiLmguICBJbXByb3ZlIGFyZ3VtZW50IG5hbWVzIHRvIG1ha2UgaXQKKwljbGVhciB3aGljaCBzaWRlIG9mIHRoZSBzeW1ib2wtc3RyaW5nIGFsaWFzIHBhaXIgaXMgd2hpY2guCisJKHN5bWJvbF9jaGVja19hbGlhc19jb25zaXN0ZW5jeSk6IEltcHJvdmUgbG9jYWwgdmFyaWFibGUgbmFtZXMKKwlmb3IgdGhlIHNhbWUgcHVycG9zZS4KKwkqIHNyYy9zeW10YWIuaCAoc3RydWN0IHN5bWJvbCk6IE1ha2UgY29tbWVudHMgYWJvdXQgYWxpYXNlcworCWNsZWFyZXIuCisJKHN5bWJvbF9tYWtlX2FsaWFzKTogSW1wcm92ZSBjb21tZW50cyBhbmQgYXJndW1lbnQgbmFtZS4KKwkqIHNyYy9vdXRwdXQuYyAodG9rZW5fZGVmaW5pdGlvbnNfb3V0cHV0KTogVXBkYXRlIGZvciByZW5hbWUgdG8KKwlVU0VSX05VTUJFUl9IQVNfU1RSSU5HX0FMSUFTIGFuZCBpbXByb3ZlIGNvbW1lbnRzIGFib3V0IGFsaWFzZXMuCisKKzIwMDktMDgtMDggIEFsZXggUm96ZW5tYW4gIDxyb3plbm1hbkBnbWFpbC5jb20+CisKKwlDb252ZXJ0ICJtaXNsZWFkaW5nIHJlZmVyZW5jZSIgbWVzc2FnZXMgdG8gd2FybmluZ3MuCisJKiBzcmMvc2Nhbi1jb2RlLmw6IE5ldyBmdW5jdGlvbiAnc2hvd19zdWJfbWVzc2FnZXMnLCBtb3JlCisJZmFjdG9yaW5nLgorCSogdGVzdHMvbmFtZWQtcmVmLmF0OiBBZGp1c3QgdGVzdHMuCisKKzIwMDktMDgtMDYgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2xlbXNvbi5lZHU+CisKKwltYWludDogcnVuICJtYWtlIHVwZGF0ZS1jb3B5cmlnaHQiCisKKzIwMDktMDgtMDYgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2xlbXNvbi5lZHU+CisKKwltYWludDogbWFrZSB1cGRhdGUtYjQtY29weXJpZ2h0IGVhc2llciB0byB1c2UKKwkqIGJ1aWxkLWF1eC91cGRhdGUtYjQtY29weXJpZ2h0OiBJbiB3YXJuaW5ncywgcmVwb3J0IGxpbmUKKwludW1iZXJzIHJhdGhlciB0aGFuIGNoYXJhY3RlciBwb3NpdGlvbnMuCisJKiBjZmcubWsgKHVwZGF0ZS1jb3B5cmlnaHQtbG9jYWwpOiBTZXQgdG8gdXBkYXRlLWI0LWNvcHlyaWdodCBzbworCXRoYXQgdXBkYXRlLWNvcHlyaWdodCBydW5zIGl0LgorCSogZ251bGliOiBVcGRhdGUuCisKKzIwMDktMDgtMDUgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2xlbXNvbi5lZHU+CisKKwltYWludDogY2xlYW4gdXAgdXBkYXRlLWI0LWNvcHlyaWdodCBjb2RlCisJKiBidWlsZC1hdXgvdXBkYXRlLWI0LWNvcHlyaWdodDogRG8gbm90IGFjY2VwdCAyLWRpZ2l0CisJVVBEQVRFX0NPUFlSSUdIVF9ZRUFSLCB3aGljaCB3YXMgbm90IGhhbmRsZWQgY29ycmVjdGx5LgorCURvbid0IGFjY2VwdCBhIGBbJyBpbiBhIGI0X2NvcHlyaWdodCBhcmd1bWVudC4KKwlGb3JtYXQgY29kZSBtb3JlIGNvbnNpc3RlbnRseS4KKwlEb24ndCBhc3N1bWUgYjQqY29weXJpZ2h0IG5ldmVyIG9jY3Vycy4KKworMjAwOS0wOC0wNCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjbGVtc29uLmVkdT4KKworCW1haW50OiBhdXRvbWF0ZSBiNF9jb3B5cmlnaHQgdXBkYXRlcy4KKwkqIE1ha2VmaWxlLmFtICh1cGRhdGUtYjQtY29weXJpZ2h0KTogTmV3IHRhcmdldCBydWxlLgorCSogYnVpbGQtYXV4L01ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIHVwZGF0ZS1iNC1jb3B5cmlnaHQuCisJKiBidWlsZC1hdXgvdXBkYXRlLWI0LWNvcHlyaWdodDogTmV3LgorCSogZGF0YS95YWNjLmM6IFJlbW92ZSBzdHJheSBjaGFyYWN0ZXJzIGFyb3VuZCBiNF9jb3B5cmlnaHQKKwlpbnZvY2F0aW9ucy4KKworMjAwOS0wOC0wNCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjbGVtc29uLmVkdT4KKworCW1haW50OiBhdXRvbWF0ZSBhbm51YWwgcGFja2FnZS13aWRlIGNvcHlyaWdodC15ZWFyIHVwZGF0ZS4KKwkqIC54LXVwZGF0ZS1jb3B5cmlnaHQ6IE5ldy4KKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogUmVtb3ZlIG1haW50Lm1rLgorCSogYm9vdHN0cmFwLmNvbmYgKGdudWxpYl9tb2R1bGVzKTogQWRkIG1haW50YWluZXItbWFrZWZpbGUgYW5kCisJdXBkYXRlLWNvcHlyaWdodC4gIFJlbW92ZSBnbnVtYWtlZmlsZSwgd2hpY2ggaXMgaW1wbGllZCBieQorCW1haW50YWluZXItbWFrZWZpbGUuCisJKiBjZmcubWsgKGJvb3RzdHJhcC10b29scyk6IENvcHkgZnJvbSBvbGQgbWFpbnQubWsuCisJKiBnbnVsaWI6IFVwZGF0ZS4KKwkqIG1haW50Lm1rOiBSZW1vdmUsIG5vdyBjb3BpZWQgZnJvbSBnbnVsaWIuCisJKiBleGFtcGxlcy9leHRleGk6IEFkZCBtaXNzaW5nICIoQykiIGluIGNvcHlyaWdodCBzdGF0ZW1lbnQgc28KKwl1cGRhdGUtY29weXJpZ2h0IGNhbiByZWNvZ25pemUgaXQuCisJKiBzcmMvTFIwLmg6IExpa2V3aXNlLgorCSogc3JjL3ByaW50Lmg6IExpa2V3aXNlLgorCSogc3JjL3ByaW50X2dyYXBoLmg6IExpa2V3aXNlLgorCSogc3JjL2dyYW0uYzogQWRkIG1pc3NpbmcgY29tbWEgaW4gY29weXJpZ2h0IHN0YXRlbWVudC4KKwkqIHNyYy9ncmFtLmg6IExpa2V3aXNlLgorCisyMDA5LTA4LTA0ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNsZW1zb24uZWR1PgorCisJRml4ICJtYWtlIGRpc3RjaGVjayIuCisJKiBleGFtcGxlcy9jYWxjKysvTWFrZWZpbGUuYW06IFNheSAkKHNyY2RpcikvY2FsYy5zdGFtcCBpbnN0ZWFkCisJb2YganVzdCBjYWxjLnN0YW1wLgorCisyMDA5LTA4LTAxICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNsZW1zb24uZWR1PgorCisJUGFjaWZ5ICJnY2MgLVd1bnVzZWQiIGZvciB0aGUgaW5wdXQgZnVuY3Rpb24gZnJvbSBGbGV4LgorCVJlcG9ydGVkIGJ5IEFsZXggUm96ZW5tYW4uICBUaGlzIHdhcm5pbmcgc2hvd3MgdXAgd2l0aCBnY2MtNC4zLjAKKwlhbmQgbGF0ZXIuCisJKiBzcmMvc2Nhbi1jb2RlLmw6IEFkZCAiJW9wdGlvbiBub2lucHV0Iiwgd2hpY2ggSSBjYW5ub3QgZmluZCBpbgorCXRoZSBGbGV4IG1hbnVhbCwgYnV0IHdoaWNoIEZsZXggaGFzIHN1cHBvcnRlZCBzaW5jZSBhdCBsZWFzdCBhcworCWZhciBiYWNrIGFzIDIuNS40LiAgSG93ZXZlciwgaWYgYW55IG9mIG91ciBkZXZlbG9wZXJzIHN0aWxsIHVzZQorCUZsZXggMi41LjQsIHRoZXknbGwgbmVlZCB0byBzdG9wIGNvbmZpZ3VyaW5nIHdpdGgKKwktLWVuYWJsZS1nY2Mtd2FybmluZ3MgYmVjYXVzZSAiJW9wdGlvbiBub2lucHV0IiBkaWRuJ3Qgd29yaworCWNvcnJlY3RseSB1bnRpbCBGbGV4IDIuNS42LgorCSogc3JjL3NjYW4tZ3JhbS5sOiBMaWtld2lzZS4KKwkqIHNyYy9zY2FuLXNrZWwubDogTGlrZXdpc2UuCisKKzIwMDktMDctMzEgIEFsZXggUm96ZW5tYW4gIDxyb3plbm1hbkBnbWFpbC5jb20+CisKKwlGaXggLS1lbmFibGUtZ2NjLXdhcm5pbmdzIHByb2JsZW1zLgorCSogc3JjL3JlYWRlci5jOiBBZGp1c3QgdmFyaWFibGUgbmFtZXMuCisJKiBzcmMvc2Nhbi1jb2RlLmw6IEZpeCBwcm90b3R5cGVzIGFuZCBhZGp1c3QgbmFtZXMuCisJKiBzcmMvbmFtZWQtcmVmLmM6IFJlbW92ZSByZWR1bmRhbnQgImlmIi4KKworMjAwOS0wNy0yOSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlGaXggYSAtLWVuYWJsZS1nY2Mtd2FybmluZ3MgcHJvYmxlbS4KKwkqIHNyYy9zY2FuLWdyYW0ubCAoU0NfRVNDQVBFRF9DSEFSQUNURVIpOiBBY3R1YWxseSB1c2UgbGVuZ3RoCisJdmFyaWFibGUuCisKKzIwMDktMDctMjQgIEFsZXggUm96ZW5tYW4gIDxyb3plbm1hbkBnbWFpbC5jb20+CisKKwlGaXggc29tZSBtZW1vcnkgbGVha3MuCisJKiBzcmMvbmFtZWQtcmVmLmM6IEFkZCBhIHBvaW50ZXIgY2hlY2sgKG5hbWVkX3JlZl9mcmVlKS4KKwkqIHNyYy9zY2FuLWNvZGUubDogTmV3IGZ1bmN0aW9uICh2YXJpYW50X3RhYmxlX2ZyZWUpLiBDYWxsZWQgaW4KKwljb2RlX3NjYW5uZXJfZnJlZS4KKwkqIHNyYy9zeW1saXN0LmM6IENhbGwgdG8gbmFtZWRfcmVmX2ZyZWUgKHN5bWJvbF9saXN0X2ZyZWUpLgorCisyMDA5LTA3LTI0ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCVdhcm4gYWJvdXQgY2hhcmFjdGVyIGxpdGVyYWxzIG5vdCBvZiBsZW5ndGggb25lLgorCSogTkVXUyAoMi41KTogRG9jdW1lbnQuCisJKiBzcmMvc2Nhbi1ncmFtLmwgKElOSVRJQUwpOiBSZW1vdmUgY29tbWVudCB0aGF0IHdlIGRvbid0IGNoZWNrCisJdGhlIGxlbmd0aC4KKwkoU0NfRVNDQVBFRF9DSEFSQUNURVIpOiBXYXJuIGlmIGxlbmd0aCBpcyB3cm9uZy4KKwkqIHRlc3RzL2lucHV0LmF0IChCYWQgY2hhcmFjdGVyIGxpdGVyYWxzKTogTmV3IHRlc3QgZ3JvdXAuCisKKzIwMDktMDctMjQgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBzcmMvbGFsci5jIChzdGF0ZV9sb29rYWhlYWRfdG9rZW5zX2NvdW50KTogQ29ycmVjdCBjb21tZW50LgorCisyMDA5LTA3LTIyICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCVNvbWUgTTQgY2xlYW51cCBpbiB0aGUgdGVzdHN1aXRlLgorCVN1Z2dlc3RlZCBieSBFcmljIEJsYWtlIGF0CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDktMDQvbXNnMDAwODMuaHRtbD4uCisJKiB0ZXN0cy9leGlzdGluZy5hdCAoX0FUX1RFU1RfRVhJU1RJTkdfR1JBTU1BUik6IERvIG5vdAorCWNvbXBsaWNhdGUgdGhlIGNvZGUgYnkgZGlzdGluZ3Vpc2hpbmcgYmV0d2VlbiBhIG1pc3NpbmcgdmFsdWUKKwlhbmQgYW4gZW1wdHkgc3RyaW5nIHZhbHVlIGZvciBhbiBvcHRpb25hbCBhcmd1bWVudC4gIFRoaXMgZml4IGlzCisJYWxsb3dlZCBieSB0aGUgc2ltaWxhciBmaXggaW4gQVRfVEVTVF9UQUJMRVNfQU5EX1BBUlNFIGJlbG93LgorCSogdGVzdHMvbG9jYWwuYXQgKF9BVF9URVNUX1RBQkxFU19BTkRfUEFSU0UpOiBNZXJnZSBpbnRvLi4uCisJKEFUX1RFU1RfVEFCTEVTX0FORF9QQVJTRSk6IC4uLiB0aGlzIG5vdyB0aGF0IHRoZSBzcGVjaWFsCisJYXJndW1lbnRzIGFyZSBub3QgbmVlZGVkIGJlY2F1c2Ugb2YgdGhlIGZvbGxvd2luZyBjaGFuZ2VzLgorCUZpeCBzdGFsZSBjb21tZW50cy4KKwlCaXNvbiBkZXZlbG9wZXJzIHNob3VsZCB1c2UgR05VIE00IGFuZCBzaG91bGQgbm90IHVzZQorCVBPU0lYTFlfQ09SUkVDVCB3aGVuIGJ1aWxkaW5nIHRoZSB0ZXN0IHN1aXRlLCBzbyBkbyBub3QKKwljb21wbGljYXRlIHRoZSBjb2RlIGJ5IGF2b2lkaW5nICQxMCBhbmQgYWJvdmUuCisJRG8gbm90IHF1b3RlIGFuIGVtcHR5IHN0cmluZyB2YWx1ZSBmb3IgYW4gb3B0aW9uYWwgYXJndW1lbnQsIGFuZAorCWRvIG5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIGEgbWlzc2luZyB2YWx1ZSBhbmQgYW4gZW1wdHkgc3RyaW5nCisJdmFsdWUuCisKKzIwMDktMDctMjEgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBtNC9tNC5tNDogTWFrZSBpdCBhIHN5bSBsaW5rIHRvIHN1Ym1vZHVsZXMvYXV0b2NvbmYvbTQvbTQubTQuCisKKzIwMDktMDctMTUgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJUmV2ZXJ0IHVubmVjZXNzYXJ5IGNvbHVtbiByZWFsaWdubWVudCBpbiAtLWhlbHAgb3V0cHV0LgorCVJlcG9ydGVkIGJ5IEFraW0gRGVtYWlsbGUgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwOS0wNi9tc2cwMDAxMC5odG1sPi4KKwkqIHNyYy9nZXRhcmdzLmMgKHVzYWdlKTogSGVyZS4KKworMjAwOS0wNy0wNCAgQWxleCBSb3plbm1hbiAgPHJvemVubWFuQGdtYWlsLmNvbT4KKworCUFscGhhYmV0aWNhbCBvcmRlciBpbiBzcmMvTWFrZWZpbGUuYW0uCisJKiBzcmMvTWFrZWZpbGUuYW06IEFkanVzdC4KKworMjAwOS0wNy0wNCAgQWxleCBSb3plbm1hbiAgPHJvemVubWFuQGdtYWlsLmNvbT4KKworCVN0eWxlIGNoYW5nZXMgYW5kIGZhY3RvcmluZy4KKwkqIHNyYy9uYW1lZC1yZWYuaDogQWRkIGNvbW1lbnRzLgorCSogc3JjL3BhcnNlLWdyYW0ueTogUmVhZGFiaWxpdHkgYW5kIHN0eWxlIGNoYW5nZXMuCisJKiBzcmMvcmVhZGVyLmM6IEZhY3RvcmluZzogYXNzaWduX25hbWVkX3JlZiBmdW5jdGlvbi4KKwkqIHNyYy9zY2FuLWNvZGUubDogRmFjdG9yaW5nIGFuZCBzdHlsZSBjaGFuZ2VzLiBSZW5hbWUKKwlwYXJzZV9uYW1lZF9yZWYgdG8gcGFyc2VfcmVmLiBVc2UgImMtY3R5cGUuaCIgZnJvbSBnbnVsaWIuCisJVXNlICJ1bnNpZ25lZCIgdHlwZSBmb3IgdmFyaWFudCBpbmRleC4gSW1wcm92ZSByZWFkYWJsaXR5LgorCSogc3JjL3NjYW4tZ3JhbS5sOiBDaGFuZ2UgZXJyb3IgbWVzc2FnZXMgYW5kIGFkZCBjb21tZW50cy4KKwkqIHNyYy9zeW1saXN0Lmg6IHN5bWJvbF9saXN0X251bGw6IE5ldyBmdW5jdGlvbiBkZWNsLgorCSogc3JjL3N5bWxpc3QuYzogc3ltYm9sX2xpc3RfbnVsbDogSW1wbGVtZW50IGhlcmUuCisJKiB0ZXN0cy9uYW1lZC1yZWZzLmF0OiBBZGp1c3QgZm9yIG5ldyBlcnJvciBtZXNzYWdlcy4KKworMjAwOS0wNi0yOSAgRXJpYyBCbGFrZSAgPGViYjlAYnl1Lm5ldD4KKworCXNjYW4tY29kZTogYXZvaWQgY29tcGlsZXIgd2FybmluZ3MKKwkqIHNyYy9zY2FuLWNvZGUubCAocGFyc2VfbmFtZWRfcmVmKTogVXNlIGNvcnJlY3Qgc3BlY2lmaWVycy4KKworMjAwOS0wNi0yOSAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlidWlsZDogYXZvaWQgY29uY3VycmVudCBleHRyYWN0aW9uIG9mIGNhbGMrKy4KKwkqIGV4YW1wbGVzL2NhbGMrKy9NYWtlZmlsZS5hbSAoY2FsYy5zdGFtcCk6IE5ldy4KKwlEZXBlbmQgb24gaXQgdG8gY3JlYXRlIHRoZSBzb3VyY2VzIG9mIGNhbGMrKyBzbyB0aGF0IGNvbmN1cnJlbnQKKwlidWlsZHMgZG9uJ3QgbGF1bmNoIHNldmVyYWwgImV4dGV4aSIgaW4gcGFyYWxsZWwuCisJTm90IG9ubHkgdGhpcyBpcyBpbmVmZmljaWVudCwgdGhpcyBhbHNvIGJ1aWxkcyBpbmNvcnJlY3Qgc291cmNlcworCXdpdGggc2V2ZXJhbCBleHRyYWN0aW9ucyBtaXhlZCB0b2dldGhlci4KKworMjAwOS0wNi0yNyAgQWxleCBSb3plbm1hbiAgPHJvemVubWFuQGdtYWlsLmNvbT4KKworCUltcGxlbWVudCBzdXBwb3J0IGZvciBuYW1lZCBzeW1ib2wgcmVmZXJlbmNlcy4KKwkqIHNyYy9wYXJzZS1ncmFtLnk6IEFkZCBuZXcgc3ludGF4IChuYW1lZF9yZWYub3B0KS4KKwkqIHNyYy9yZWFkZXIuYzogU3RvcmUgbmFtZWQgcmVmcyBpbiBzeW1ib2wgbGlzdHMuCisJKiBzcmMvcmVhZGVyLmg6IE5ldyBhcmd1bWVudCBmb3Igc3ltYm9sX2FwcGVuZCBhbmQKKwlhY3Rpb25fYXBwZW5kIGZ1bmN0aW9ucy4KKwkqIHNyYy9zY2FuLWNvZGUuaDogQWRkIG5ldyBmaWVsZCAobmFtZWRfcmVmKSBpbnRvCisJY29kZV9wcm9wcyBkYXRhIHN0cnVjdHVyZS4gS2VlcHMgbmFtZWQgcmVmIG9mIG1pZHJ1bGUKKwlhY3Rpb25zLgorCSogc3JjL3NjYW4tY29kZS5sOiBTdXBwb3J0IGZvciBuYW1lZCByZWZzIGluIHNlbWFudGljCisJYWN0aW9uIGNvZGUuIE5ldyBmdW5jdGlvbiAncGFyc2VfbmFtZWRfcmVmJy4KKwkqIHNyYy9zY2FuLWdyYW0ubDogU3VwcG9ydCBicmFja2V0ZWQgaWQuCisJKiBzcmMvc3ltbGlzdC5jOiBTdG9yZSBuYW1lZCByZWZzIGluIHN5bWJvbCBsaXN0cy4KKwkqIHNyYy9zeW1saXN0Lmg6IE5ldyBmaWVsZCBpbiBzeW1ib2wgbGlzdDogbmFtZWRfcmVmLgorCSogc3JjL25hbWVkLXJlZi5oOiBOZXcgZmlsZSwgYSBzdHJ1Y3QgZm9yIG5hbWVkX3JlZi4KKwkqIHNyYy9uYW1lZC1yZWYuY3A6IE5ldyBmaWxlLCBuYW1lZF9yZWZfbmV3IGZ1bmN0aW9uLgorCSogc3JjL2xvY2FsLm1rOiBBZGQgdHdvIG5ldyBmaWxlcy4KKwkqIHRlc3RzL3Rlc3RzdWl0ZS5hdDogSW5jbHVkZSBuZXcgdGVzdCBncm91cDoKKwkqIHRlc3RzL25hbWVkLXJlZnMuYXQ6IHRoaXMgbmV3IGZpbGUuCisKKzIwMDktMDYtMjUgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJaGFzaDogY2hlY2sgaW5zZXJ0aW9uIGZvciBtZW1vcnkgZXhoYXVzdGlvbi4KKwkqIHNyYy91bmlxc3RyLmMgKHVuaXFzdHJfbmV3KTogTmV3LgorCisyMDA5LTA2LTExICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCXN0eWxlIGNoYW5nZXMuCisJKiBkYXRhL3hzbHQveG1sMmRvdC54c2wsIGRhdGEveHNsdC94bWwyeGh0bWwueHNsOiBTcGFjZSBjaGFuZ2VzLgorCSogc3JjL3ByaW50LXhtbC5jOiBTdHlsZSBjaGFuZ2VzLgorCSogdGVzdHMvY29uZmxpY3RzLmF0OiBDb21tZW50IGNoYW5nZXMuCisKKzIwMDktMDYtMTEgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJeG1sOiBiZXdhcmUgb2YgdXNlciBzdHJpbmdzIHVzZWQgdG8gZ2l2ZSBhICVwcmVjIHRvIHJ1bGVzLgorCSogdGVzdHMvY29uZmxpY3RzLmF0ICglcHJlYyB3aXRoIHVzZXIgc3RyaW5ncyk6IE5ldy4KKwkqIHNyYy9ncmFtLmMgKGdyYW1tYXJfcnVsZXNfcHJpbnRfeG1sKTogRXNjYXBlIHRoZSBwcmVjZWRlbmNlIGZvcgorCVhNTCBvdXRwdXQuCisKKzIwMDktMDYtMTEgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJaGFzaDogY2hlY2sgaW5zZXJ0aW9uIGZvciBtZW1vcnkgZXhoYXVzdGlvbi4KKwkqIHNyYy9tdXNjbGUtdGFiLmMgKG11c2NsZV9pbnNlcnQsIG11c2NsZV9ncm93KQorCSogc3JjL3N0YXRlLmMgKHN0YXRlX2hhc2hfaW5zZXJ0KTogQ2hlY2sgdGhlIHJldHVybiB2YWx1ZSBvZgorCWhhc2hfaW5zZXJ0LgorCisyMDA5LTA2LTEwICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCWRldGVybWluaXN0aWMgdGVzdCBzdWl0ZS4KKwlTb21lIGNvbnNpc3RlbmN5IGNoZWNrcyBvbiBzeW1ib2xzIGFyZSBwZXJmb3JtZWQgYWZ0ZXIgYWxsIHRoZQorCXN5bWJvbHMgd2VyZSByZWFkLCBieSBhbiBpdGVyYXRpb24gb3ZlciB0aGUgc3ltYm9sIHRhYmxlLiAgVGhpcworCXRyYXZlcnNhbCBpcyBub25kZXRlcm1pbmlzdGljLCB3aGljaCBjYW4gYmUgYSBwcm9ibGVtIGZvciB0ZXN0CisJY2FzZXMuCisJQXZvaWQgdGhpcy4KKwlBZGRyZXNzZXMgYW5vdGhlciBmb3JtIG9mIG5vbmRldGVybWluaXNtIHJlcG9ydGVkIGJ5IEpvZWwgRS4gRGVubnkuCisJaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwOS0wNS9tc2cwMDAyMy5odG1sCisKKwkqIHRlc3RzL2lucHV0LmF0IChOdW1iZXJlZCB0b2tlbnMpOiBTcGxpdCB0aGUgaGV4YWRlY2ltYWwvZGVjaW1hbAorCXRlc3QgaW4gdHdvLgorCVVzZSBkaWZmZXJlbnQgZmlsZSBuYW1lcyBmb3IgdGhlIHRocmVlIHRlc3RzIHRvIG1ha2UgdGhlCisJbWFpbnRlbmFuY2UgZWFzaWVyLgorCisyMDA5LTA2LTEwICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCWRldGVybWluaXN0aWMgdXNlci10b2tlbi1udW1iZXIgcmVkZWNsYXJhdGlvbiBlcnJvcnMuCisJQWRkcmVzcyBub25kZXRlcm1pbmlzbSByZXBvcnRlZCBieSBKb2VsIEUuIERlbm55LgorCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDktMDUvbXNnMDAwMjMuaHRtbAorCisJKiBzcmMvdW5pcXN0ci5oOiBDb21tZW50IGNoYW5nZXMuCisJKiBzcmMvbG9jYXRpb24uaCAoYm91bmRhcnlfY21wLCBsb2NhdGlvbl9jbXApOiBOZXcuCisJKiBzcmMvc3ltdGFiLmMgKHVzZXJfdG9rZW5fbnVtYmVyX3JlZGVjbGFyYXRpb24pOiBOZXcuCisJKHN5bWJvbF90cmFuc2xhdGlvbik6IFVzZSBpdC4KKwkqIHRlc3RzL2lucHV0LmF0IChOdW1iZXJlZCB0b2tlbnMpOiBBZGp1c3QgdGhlIGV4cGVjdGVkIG91dHB1dC4KKworMjAwOS0wNS0yNSAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlnbnVsaWI6IHVwZGF0ZS4KKwkqIGdudWxpYjogVXBkYXRlIHRvIGxhdGVzdC4KKwkqIGxpYi8uY3ZzaWdub3JlLCBsaWIvLmdpdGlnbm9yZSwgbTQvLmN2c2lnbm9yZSwKKwkqIG00Ly5naXRpZ25vcmU6IFJlZ2VuLgorCSogc3JjL3N5bXRhYi5jIChzeW1ib2xfZnJvbV91bmlxc3RyLCBzZW1hbnRpY190eXBlX2Zyb21fdW5pcXN0cik6CisJQ2FsbCB4YWxsb2NfZGllIG9uIGhhc2hfaW5zZXJ0IGZhaWx1cmVzLgorCVJlcXVlc3RlZCBieSB0aGUgbmV3IF9fd2Fybl91bnVzZWRfcmVzdWx0X18gYXR0cmlidXRlIG9mCisJaGFzaF9pbnNlcnQuCisKKzIwMDktMDUtMjIgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJQ29udmVydCBtdWx0aXBsZSB2YXJpYWJsZSBkZWZpbml0aW9uIHdhcm5pbmdzIHRvIGNvbXBsYWludHMuCisJKiBORVdTICgyLjUpOiBBZGQgYSBuZXcgZW50cnkgZm9yIHRoYXQgY2hhbmdlLgorCSogZG9jL2Jpc29uLnRleGluZm8gKERlY2wgU3VtbWFyeSk6IFVwZGF0ZSAlZGVmaW5lIGVudHJ5LgorCShCaXNvbiBPcHRpb25zKTogVXBkYXRlIC1ELy0tZGVmaW5lLy1GLy0tZm9yY2UtZGVmaW5lIGVudHJ5LgorCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlX3BlcmNlbnRfZGVmaW5lX2luc2VydCk6IEltcGxlbWVudC4KKwkqIHNyYy9tdXNjbGVfdGFiLmggKG11c2NsZV9wZXJjZW50X2RlZmluZV9pbnNlcnQpOiBVcGRhdGUKKwljb21tZW50cy4KKwkqIHRlc3RzL2lucHV0LmF0IChgJWRlZmluZSBlcnJvcnMnKTogVXBkYXRlLgorCShgJWRlZmluZSwgLS1kZWZpbmUsIC0tZm9yY2UtZGVmaW5lJyk6IFVwZGF0ZS4KKworMjAwOS0wNS0yMiAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwktRi8tLWZvcmNlLWRlZmluZSBhbmQgcmVsYXRpdmUgJWRlZmluZS8tRC8tLWRlZmluZSBwcmlvcml0aWVzLgorCSogTkVXUyAoMi41KTogQWRkIGRvY3VtZW50YXRpb24gdG8gLUQvLS1kZWZpbmUgZW50cnkuCisJKiBidWlsZC1hdXgvY3Jvc3Mtb3B0aW9ucy5wbDogSGFyZC1jb2RlIGFzc29jaWF0aW9uIG9mCisJLS1mb3JjZS1kZWZpbmUgd2l0aCAlZGVmaW5lLgorCSogZG9jL2Jpc29uLnRleGluZm8gKERlY2wgU3VtbWFyeSk6IEluICVkZWZpbmUgZW50cnksCisJY3Jvc3MtcmVmZXJlbmNlIGNvbW1hbmQtbGluZSBvcHRpb25zLgorCShCaXNvbiBPcHRpb25zKTogQWRkIGRvY3VtZW50YXRpb24gdG8gLUQvLS1kZWZpbmUgZW50cnkuCisJKE9wdGlvbiBDcm9zcyBLZXkpOiBXaWRlbiBjb2x1bW4gZm9yIC0tZm9yY2UtZGVmaW5lIHJvdy4KKwkqIHNyYy9nZXRhcmdzLmMgKHVzYWdlKTogRG9jdW1lbnQgLUYvLS1mb3JjZS1kZWZpbmUuICBSZWFsaWduCisJb3B0aW9ucyBpbiBvdXRwdXQuCisJKHNob3J0X29wdGlvbnMsIGxvbmdfb3B0aW9ucywgZ2V0YXJncyk6IFBhcnNlIC1GLy0tZm9yY2UtZGVmaW5lLAorCWFuZCB1cGRhdGUgbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2luc2VydCBpbnZvY2F0aW9uLgorCSogc3JjL211c2NsZV90YWIuaCAobXVzY2xlX3BlcmNlbnRfZGVmaW5lX2hvdyk6IE5ldyBlbnVtIHR5cGUuCisJKG11c2NsZV9wZXJjZW50X2RlZmluZV9pbnNlcnQpOiBBZGQgYXJndW1lbnQgd2l0aCB0aGF0IHR5cGUuCisJKiBzcmMvbXVzY2xlX3RhYi5jIChtdXNjbGVfcGVyY2VudF9kZWZpbmVfaW5zZXJ0KTogSW1wbGVtZW50CisJLUYvLS1mb3JjZS1kZWZpbmUgYmVoYXZpb3IgYW5kIHByaW9yaXRpZXMuCisJKiBzcmMvcGFyc2UtZ3JhbS55IChwcm9sb2d1ZV9kZWNsYXJhdGlvbik6IFVwZGF0ZQorCW11c2NsZV9wZXJjZW50X2RlZmluZV9pbnNlcnQgaW52b2NhdGlvbnMuCisJKiB0ZXN0cy9pbnB1dC5hdCAoYCVkZWZpbmUsIC0tZGVmaW5lJyk6IFJlbmFtZSB0by4uLgorCShgJWRlZmluZSwgLS1kZWZpbmUsIC0tZm9yY2UtZGVmaW5lJyk6IC4uLiB0aGlzIGFuZCBleHRlbmQuCisKKzIwMDktMDUtMjIgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJVXBkYXRlIHNvbWUgY29tbWVudHMgdG8gbWFrZSBzZW5zZSBmb3IgLUQuCisJKiBkYXRhL2Jpc29uLm00IChiNF9jaGVja191c2VyX25hbWVzKTogSW4gaGVhZGVyIGNvbW1lbnRzLCBzYXkKKwkidXNlciBvY2N1cnJlbmNlIiBpbnN0ZWFkIG9mICJncmFtbWFyIG9jY3VycmVuY2UiLgorCSogc3JjL211c2NsZV90YWIuaCAobXVzY2xlX3BlcmNlbnRfZGVmaW5lX2luc2VydCk6IExpa2V3aXNlLgorCShtdXNjbGVfcGVyY2VudF9jb2RlX2dyb3cpOiBMaWtld2lzZSBqdXN0IGZvciBjb25zaXN0ZW5jeS4KKworMjAwOS0wNS0yMiAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIGRhdGEvYysrLm00OiBVcGRhdGUgY29weXJpZ2h0IHllYXIuCisKKzIwMDktMDUtMjAgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBkYXRhL2MrKy5tNCAoYjRfbmFtZXNwYWNlX2Nsb3NlKTogU2ltcGxpZnkgc2xpZ2h0bHkuCisKKzIwMDktMDUtMTkgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJSGFuZGxlIGEgdHJhaWxpbmcgYDonIGluIGEgdXNlci1zdXBwbGllZCBDKysgbmFtZXNwYWNlIGJldHRlci4KKwkqIGRhdGEvYysrLm00IChiNF9uYW1lc3BhY2VfY2xvc2UpOiBEb24ndCBsZXQgaXQgYmUgcHJpbnRlZAorCWFtb25nIHRoZSBjbG9zaW5nIGJyYWNlcyBoZXJlLiAgVGhpcyBmaXggbWlnaHQgbWFrZSB0aGUKKwlnZW5lcmF0ZWQgY29kZSBlYXNpZXIgdG8gZGVidWcsIGJ1dCBvdGhlcndpc2UgaXQgc2hvdWxkIGJlCisJaW5zaWduaWZpY2FudCBiZWNhdXNlIGEgdHJhaWxpbmcgYDonIGlzIGEgQysrIGVycm9yIGFscmVhZHkuCisKKzIwMDktMDUtMTkgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJcmVtb3ZlIHVzZWxlc3MgdmFyaWFibGUuCisJKiBzcmMvZ2V0YXJncy5jIChza2VsZXRvbl9hcmcpOiBSZW1vdmUgbm93IHVzZWxlc3MgdmFyaWFibGUuCisJU2hvdWxkIGhlbHAgdGhlIGNvbXBpbGVyIHNlZSB0aGF0IHRoaXMgcHJpbnRmLWxpa2UgY2FsbCBpcyBzYW5lLgorCisyMDA5LTA1LTExICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCWRvYzogdXNlIEMrKyBoZWFkZXJzLgorCSogZG9jL2Jpc29uLnRleGluZm8gKENhbGMrKyBTY2FubmVyKTogUHJlZmVyIEMrKyBoZWFkZXJzIHRvIEMKKwloZWFkZXJzLgorCisyMDA5LTA1LTA1ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCWZpeCBoZXhhZGVjaW1hbCB0b2tlbiBudW1iZXIgc3VwcG9ydC4KKwkqIHNyYy9zY2FuLWdyYW0ubDogQ2F0Y2ggaW5jb3JyZWN0IGlkcyBhZnRlciBoZXhhZGVjaW1hbCBudW1iZXJzLgorCisyMDA5LTA1LTA1ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCXRlc3RzOiBjaGVjayB0b2tlbiBudW1iZXJzLgorCSogdGVzdHMvaW5wdXQuYXQgKE51bWJlcmVkIHRva2Vucyk6IE5ldy4KKworMjAwOS0wNS0wNCAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwliaXNvbjogY2F0Y2ggYmFkIHN5bWJvbCBuYW1lcy4KKwkqIHNyYy9zY2FuLWdyYW0ubCh7aW50fXtpZH0pOiBSZXBvcnQgYXMgYW4gaW52YWxpZCBpZGVudGlmaWVyLgorCSogdGVzdHMvaW5wdXQuYXQ6IEFkanVzdC4KKworMjAwOS0wNS0wNCAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlzcGFjZSBjaGFuZ2VzLgorCSogc3JjL3NjYW4tZ3JhbS5sOiBVbnRhYmlmeSB0byBiZSByb2J1c3QgdG8gemVhbG91cyBlZGl0b3JzLgorCisyMDA5LTA1LTA0ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCWlkZW50aWZpZXJzOiBkYXNoZXMgYXJlIGxldHRlcnMuCisJRGFzaGVzIGNhbiBub3cgc3RhcnQgaWRlbnRpZmllcnMgKHN5bWJvbHMgYW5kIGRpcmVjdGl2ZXMpLgorCisJKiBzcmMvc2Nhbi1ncmFtLmwgKHtsZXR0ZXJ9KTogQWRkIGRhc2guCisJKHtpZH0pOiBSZW1vdmUgaXQuCisJKiB0ZXN0cy9pbnB1dC5hdCAoU3ltYm9scyk6IEFkanVzdC4KKwlSZW1vdmUgc3RyYXkgY29tbWVudC4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKEludmFsaWQgaW5wdXRzKTogQWRqdXN0IGVycm9yIG1lc3NhZ2UuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoU3ltYm9scyk6IFVwZGF0ZS4KKworMjAwOS0wNS0wMSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlEZWNsYXJlICVjb2RlIHRvIGJlIGEgcGVybWFuZW50IGZlYXR1cmUuCisJKiBORVdTICgyLjQuMik6IEhlcmUuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoUHJvbG9ndWUgQWx0ZXJuYXRpdmVzKTogRG9uJ3Qgc2F5IGl0J3MKKwlleHBlcmltZW50YWwuCisJKERlY2wgU3VtbWFyeSk6IExpa2V3aXNlLgorCisyMDA5LTA0LTMwICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUNvbnZlcnQgdW5kZXJzY29yZXMgdG8gZGFzaGVzIGluIHNvbWUgJWRlZmluZSB2YXJpYWJsZSBuYW1lcy4KKwlGb3Igbm93LCBqdXN0IGFwaS5wdXNoLXB1bGwgYW5kIGxyLmtlZXAtdW5yZWFjaGFibGUtc3RhdGVzLgorCU1haW50YWluIG9sZCBuYW1lcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKwkqIE5FV1MgKDIuNSk6IERvY3VtZW50LgorCSogZGF0YS9jLm00IChiNF9pZGVudGlmaWNhdGlvbik6IFVwZGF0ZSBjb21tZW50LgorCSogZGF0YS95YWNjLmM6IFVwZGF0ZSBhY2Nlc3MuCisJKiBkb2MvYmlzb24udGV4aW5mbzogVXBkYXRlLgorCSogZXRjL2JlbmNoLnBsLmluIChiZW5jaF9ncmFtbWFyKTogVXBkYXRlIHVzZS4KKwkqIHNyYy9maWxlcy5jICh0cik6IE1vdmUgdG8uLi4KKwkqIHNyYy9nZXRhcmdzLmMsIHNyYy9nZXRhcmdzLmggKHRyKTogLi4uIGhlcmUgYmVjYXVzZSBJIGNhbid0CisJdGhpbmsgb2YgYSBiZXR0ZXIgcGxhY2UgdG8gZXhwb3NlIGl0LiAgTXkgbG9naWMgaXMgdGhhdCwgZm9yIGFsbAorCXVzZXMgb2YgdHIgc28gZmFyLCBjb21tYW5kLWxpbmUgYXJndW1lbnRzIGNhbiBiZSBpbnZvbHZlZCwgYW5kCisJZ2V0YXJncy5oIGlzIGFscmVhZHkgaW5jbHVkZWQuCisJKiBzcmMvbWFpbi5jIChtYWluKTogVXBkYXRlIGFjY2Vzcy4KKwkqIHNyYy9tdXNjbGVfdGFiLmMgKG11c2NsZV9wZXJjZW50X2RlZmluZV9pbnNlcnQpOiBDb252ZXJ0IG9sZAorCXZhcmlhYmxlIG5hbWVzIHRvIG5ldyB2YXJpYWJsZSBuYW1lcyBiZWZvcmUgYXNzaWduaW5nIHZhbHVlLgorCSogc3JjL3JlYWRlci5jIChyZWFkZXIpOiBVcGRhdGUgc2V0dGluZyBkZWZhdWx0LgorCSogdGVzdHMvY2FsYy5hdDogVXBkYXRlIHVzZXMuCisJKiB0ZXN0cy9jb25mbGljdHMuYXQgKFVucmVhY2hhYmxlIFN0YXRlcyBBZnRlciBDb25mbGljdAorCVJlc29sdXRpb24pOiBVcGRhdGUgdXNlLgorCSogdGVzdHMvaW5wdXQuYXQgKCVkZWZpbmUgZW51bSB2YXJpYWJsZXMpOiBVcGRhdGUgdXNlLgorCSglZGVmaW5lIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpOiBOZXcgdGVzdCBncm91cC4KKwkqIHRlc3RzL3B1c2guYXQ6IFVwZGF0ZSB1c2VzLgorCSogdGVzdHMvcmVkdWNlLmF0OiBVcGRhdGUgdXNlcy4KKwkqIHRlc3RzL3RvcnR1cmUuYXQ6IFVwZGF0ZSB1c2VzLgorCisyMDA5LTA0LTMwICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCVNldCBhbGwgZnJvbnQtZW5kICVkZWZpbmUgZGVmYXVsdHMgaW4gb25lIHBsYWNlLgorCSogc3JjL21haW4uYyAobWFpbik6IE1vdmUgbHIua2VlcF91bnJlYWNoYWJsZV9zdGF0ZXMgZGVmYXVsdC4uLgorCSogc3JjL3JlYWRlci5jIChyZWFkZXIpOiAuLi4gdG8gaGVyZS4KKworMjAwOS0wNC0yOSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlSZW5hbWUgbHIuZGVmYXVsdF9yZWR1Y3Rpb25zIHRvIGxyLmRlZmF1bHQtcmVkdWN0aW9ucy4KKwkqIE5FV1MgKDIuNSk6IEhlcmUuCisJKiBkb2MvYmlzb24udGV4aW5mbzogSGVyZS4KKwkqIHNyYy9sYWxyLmMgKGluaXRpYWxpemVfTEEpOiBIZXJlLgorCSogc3JjL3ByaW50LmMgKHByaW50X3JlZHVjdGlvbnMpOiBIZXJlLgorCSogc3JjL3JlYWRlci5jIChyZWFkZXIpOiBIZXJlLgorCSogc3JjL3RhYmxlcy5jIChhY3Rpb25fcm93KTogSGVyZS4KKwkqIHRlc3RzL2lucHV0LmF0ICglZGVmaW5lIGVudW0gdmFyaWFibGVzKTogSGVyZS4KKwkqIHRlc3RzL3JlZHVjZS5hdCAoQVRfVEVTVF9MUl9ERUZBVUxUX1JFRFVDVElPTlMpOiBIZXJlLgorCisyMDA5LTA0LTI5ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCVBhY2lmeSAuL2NvbmZpZ3VyZSAtLWVuYWJsZS1nY2Mtd2FybmluZ3MuCisJKiB0ZXN0cy9pbnB1dC5hdCAoU3ltYm9scyk6IFByb3RvdHlwZSB5eWVycm9yIGFuZCB5eWxleC4KKworMjAwOS0wNC0yMSAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwl0ZXN0czogY2hlY2sgdGhlIHVzZSBvZiBkYXNoZXMgYW5kIHBlcmlvZHMgaW4gc3ltYm9scy4KKwkqIHRlc3RzL2lucHV0LmF0IChTeW1ib2wpOiBOZXcgdGVzdCBncm91cC4KKworMjAwOS0wNC0yOSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlEb2N1bWVudCBob3cgYCVkZWZpbmUgInZhciIgInZhbHVlIicgaXMgbm90IE00LWZyaWVuZGx5LgorCSogc3JjL3BhcnNlLWdyYW0ueSAodmFyaWFibGUpOiBJbiBjb21tZW50cyBoZXJlLgorCisyMDA5LTA0LTI5ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUFkZCBjb3B5cmlnaHQgdXBkYXRlcyBtaXNzZWQgZHVyaW5nIHByZXZpb3VzIGNoZXJyeSBwaWNrLgorCSogc3JjL291dHB1dC5jOiBIZXJlLgorCSogc3JjL3BhcnNlLWdyYW0ueTogSGVyZS4KKwkqIHNyYy9zY2FuLWdyYW0ubDogSGVyZS4KKworMjAwOS0wNC0yMCAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwl2YXJpYWJsZXM6IGFjY2VwdCBkYXNoZXMuCisJKiBzcmMvc2Nhbi1ncmFtLmwgKHtpZH0pOiBBbHNvIGFjY2VwdCBkYXNoZXMgYWZ0ZXIgdGhlIGluaXRpYWwKKwlsZXR0ZXIuCisJKHtkaXJlY3RpdmV9KTogVXNlIHtpZH0uCisJKiBzcmMvcGFyc2UtZ3JhbS55OiBDb21tZW50IGFuZCBmb3JtYXR0aW5nIGNoYW5nZXMuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoU3ltYm9scyk6IEFkanVzdCB0aGUgbGV4aWNhbCBkZWZpbml0aW9ucyBvZgorCXN5bWJvbHMuCisJKiBzcmMvY29tcGxhaW4uaCwgc3JjL2NvbXBsYWluLmMgKHlhY2NfYXQpOiBOZXcuCisJKiBzcmMvc3ltdGFiLmMgKHN5bWJvbF9uZXcpOiBVc2UgeWFjY19hdCB0byByZXBvcnQgaW5hcHByb3ByaWF0ZQorCXN5bWJvbCBuYW1lcy4KKwkqIHNyYy9vdXRwdXQuYyAodG9rZW5fZGVmaW5pdGlvbnNfb3V0cHV0KTogRG8gbm90ICNkZWZpbmUgdG9rZW4KKwluYW1lcyB3aXRoIGRhc2hlcy4KKworMjAwOS0wNC0yNCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlDbGVhbiB1cCByZWNlbnQgcGF0Y2hlcyBhIGxpdHRsZS4KKwlSZXBvcnRlZCBieSBBa2ltIERlbWFpbGxlLgorCSogZG9jL2Jpc29uLnRleGluZm8gKFVuZGVyc3RhbmRpbmcpOiBGaXggdHlwb3MuCisJKiBzcmMvcHJpbnQuYyAocHJpbnRfcmVkdWN0aW9ucyk6IERvbid0IHVzZSBuZWdhdGVkIHZhcmlhYmxlLgorCisyMDA5LTA0LTI0ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUxpc3QgYWNjZXB0ZWQgdmFsdWVzIGZvciBhICVkZWZpbmUgZW51bSB2YXJpYWJsZSB3aXRoIGFuIGludmFsaWQgdmFsdWUuCisJU3VnZ2VzdGVkIGJ5IEFraW0gRGVtYWlsbGUgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwOS0wNC9tc2cwMDA4Mi5odG1sPi4KKwkqIGRhdGEvYmlzb24ubTQgKF9iNF9wZXJjZW50X2RlZmluZV9jaGVja192YWx1ZXMpOiBJbXBsZW1lbnQuCisJKiBzcmMvbXVzY2xlX3RhYi5jIChtdXNjbGVfcGVyY2VudF9kZWZpbmVfY2hlY2tfdmFsdWVzKTogSW1wbGVtZW50LgorCSogdGVzdHMvaW5wdXQuYXQgKCVkZWZpbmUgbHIuZGVmYXVsdF9yZWR1Y3Rpb25zIGludmFsaWQgdmFsdWVzKTogTWVyZ2UKKwlpbnRvLi4uCisJKCVkZWZpbmUgZW51bSB2YXJpYWJsZXMpOiAuLi4gaGVyZSwgYW5kIHVwZGF0ZSBvdXRwdXQuCisKKzIwMDktMDQtMjMgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJUmVuYW1lICJkZWZhdWx0IHJ1bGUiIHRvICJkZWZhdWx0IHJlZHVjdGlvbiIuCisJVGhpcyBpbmNsdWRlcyBjaGFuZ2luZyB2YXJpYWJsZSBuYW1lcyBpbiBjb2RlLCBjaGFuZ2luZworCWNvbW1lbnRzLCBhbmQgcmVuYW1pbmcgJWRlZmluZSBsci5kZWZhdWx0X3J1bGVzIHRvICVkZWZpbmUKKwlsci5kZWZhdWx0X3JlZHVjdGlvbnMuCisJKiBORVdTICgyLjUpOiBVcGRhdGUgSUVMUiBkb2N1bWVudGF0aW9uLgorCSogZGF0YS9nbHIuYywgZGF0YS9sYWxyMS5jYywgZGF0YS9sYWxyMS5qYXZhLCBkYXRhL3lhY2MuYzoKKwlBZGp1c3QgWVlERUZBQ1QgYW5kIHl5ZGVmYWN0XyBkb2N1bWVudGF0aW9uLgorCSogZG9jL2Jpc29uLnRleGluZm8gKERlY2wgU3VtbWFyeSk6IEFkanVzdCBsci5kZWZhdWx0X3JlZHVjdGlvbnMKKwlhbmQgbHIudHlwZSBkb2N1bWVudGF0aW9uLiAgTWFrZSBzb21lIG90aGVyIHdvcmRpbmcKKwlpbXByb3ZlbWVudHMuCisJKEdsb3NzYXJ5KTogQWRqdXN0IGNyb3NzLXJlZmVyZW5jZXMgYW5kIERlZmF1bHQgUmVkdWN0aW9uCisJZGVmaW5pdGlvbi4KKwkqIHNyYy9sYWxyLmMgKHN0YXRlX2xvb2thaGVhZF90b2tlbnNfY291bnQpOiBBZGp1c3QgY29kZS4KKwlSZW1vdmUgYSBjb25mdXNpbmcgY29tbWVudCBwb2ludGVkIG91dCBieSBBa2ltIERlbWFpbGxlLgorCShpbml0aWFsaXplX0xBKTogQWRqdXN0IGNvZGUuCisJKiBzcmMvcHJpbnQteG1sLmMgKHByaW50X3JlZHVjdGlvbnMpOiBBZGp1c3QgY29kZS4KKwkqIHNyYy9wcmludC5jIChwcmludF9yZWR1Y3Rpb25zKTogQWRqdXN0IGNvZGUuCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRlcik6IEFkanVzdCBjb2RlLgorCSogc3JjL3RhYmxlcy5jIChhY3Rpb25fcm93KTogQWRqdXN0IGNvZGUuCisJKHRva2VuX2FjdGlvbnMpOiBBZGp1c3QgY29kZS4KKwkqIHNyYy90YWJsZXMuaDogQWRqdXN0IFlZREVGQUNUIGRvY3VtZW50YXRpb24uCisJKiB0ZXN0cy9pbnB1dC5hdCAoJWRlZmluZSBsci5kZWZhdWx0X3J1bGVzIGludmFsaWQgdmFsdWVzKToKKwlSZW5hbWUgdGVzdCBncm91cCB0by4uLgorCSglZGVmaW5lIGxyLmRlZmF1bHRfcmVkdWN0aW9ucyBpbnZhbGlkIHZhbHVlcyk6IC4uLiB0aGlzLCBhbmQKKwl1cGRhdGUgZ3JhbW1hciBmaWxlIGFuZCBleHBlY3RlZCBvdXRwdXQuCisJKiB0ZXN0cy9yZWR1Y2UuYXQgKEFUX1RFU1RfTFJfREVGQVVMVF9SVUxFUyk6IFJlbmFtZSB0by4uLgorCShBVF9URVNUX0xSX0RFRkFVTFRfUkVEVUNUSU9OUyk6IC4uLiB0aGlzLCBhbmQgdXBkYXRlLgorCisyMDA5LTA0LTIxICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCURvY3VtZW50ICVkZWZpbmUgbHIudHlwZSBhbmQgbHIuZGVmYXVsdF9ydWxlcy4KKwkqIE5FV1MgKDIuNSk6IEFkZCBhbiBlbnRyeS4KKwkqIHNyYy9nZXRhcmdzLmMgKHVzYWdlKTogTWVudGlvbiBJRUxSKDEpIGFuZCBjYW5vbmljYWwgTFIoMSkKKwliZXNpZGVzIGp1c3QgTEFMUigxKSBhbmQgR0xSKDEpLgorCSogZG9jL2Jpc29uLnRleGluZm8gKEludHJvZHVjdGlvbik6IExpa2V3aXNlLgorCShMYW5ndWFnZSBhbmQgR3JhbW1hcik6IEJpc29uIGlzIG5vIGxvbmdlciBsaW1pdGVkIHRvIExBTFIoMSkKKwlyZXN0cmljdGlvbnMuCisJKEdMUiBwYXJzaW5nKTogU2F5IGRldGVybWluaXN0aWMgb3IgTFIoMSkgcmF0aGVyIHRoYW4gTEFMUigxKQorCXdoZW4gdHJ5aW5nIHRvIGRpc3Rpbmd1aXNoIGZyb20gR0xSLiAgVGFsayBhYm91dCBMUigxKSBncmFtbWFycworCXJhdGhlciB0aGFuIExBTFIoMSkgZ3JhbW1hcnMuCisJKERlY2wgU3VtbWFyeSk6IEluICVkZWZpbmUgYXBpLnB1c2hfcHVsbCBlbnRyeSwgc2F5IGl0IGFwcGxpZXMKKwl0byBkZXRlcm1pbmlzdGljIHBhcnNlcnMgaW4gQyByYXRoZXIgdGhhbiBMQUxSKDEpIHBhcnNlcnMgaW4gQy4KKwlBZGQgbHIuZGVmYXVsdF9ydWxlcyBlbnRyeS4KKwlBZGQgbHIudHlwZSBlbnRyeS4KKwkoTXlzdGVyeSBDb25mbGljdHMpOiBCaXNvbiBpcyBubyBsb25nZXIgbGltaXRlZCB0byBMQUxSKDEpCisJcmVzdHJpY3Rpb25zLgorCShHZW5lcmFsaXplZCBMUiBQYXJzaW5nKTogU2FtZSBjaGFuZ2VzIGFzIGZvciB0aGUgcHJldmlvdXMgR0xSCisJc2VjdGlvbi4KKwkoTWVtb3J5IE1hbmFnZW1lbnQpOiBTYXkgZGV0ZXJtaW5pc3RpYyByYXRoZXIgdGhhbiBMQUxSKDEpLgorCShVbmRlcnN0YW5kaW5nKTogQ29ycmVjdCBzb21lIGJpc29uIG91dHB1dC4KKwlJbmRleCBkaXNjdXNzaW9uIG9mICJhY2NlcHRpbmcgc3RhdGUiLgorCVNheSBkZXRlcm1pbmlzdGljIHJhdGhlciB0aGFuIExBTFIoMSkuCisJKEJpc29uIE9wdGlvbnMpOiBJbiAtLXlhY2MgZW50cnksIHNheSBkZXRlcm1pbmlzdGljIHJhdGhlciB0aGFuCisJTEFMUigxKS4KKwlJbiAtLXJlcG9ydCwgLS1ncmFwaCwgYW5kIC0teG1sIGVudHJpZXMsIGp1c3QgZG9uJ3QgbWVudGlvbgorCUxBTFIoMSkuCisJKEMrKyBQYXJzZXJzKTogU2F5IGRldGVybWluaXN0aWMgcmF0aGVyIHRoYW4gTEFMUigxKS4KKwkoVGFibGUgb2YgU3ltYm9scyk6IExpa2V3aXNlIGluIFlZU1RBQ0tfVVNFX0FMTE9DQSBlbnRyeS4KKwkoR2xvc3NhcnkpOiBBZGQgQWNjZXB0aW5nIFN0YXRlLCBDb25zaXN0ZW50IFN0YXRlLCBEZWZhdWx0IFJ1bGUsCisJYW5kIElFTFIoMSkgZGVmaW5pdGlvbnMuCisJSW4gR2VuZXJhbGl6ZWQgTFIgKEdMUikgZGVmaW5pdGlvbiwgbWFrZSBzYW1lIGNoYW5nZXMgYXMgaW4KKwlwcmV2aW91cyBHTFIgc2VjdGlvbnMuCisJSW4gTEFMUigxKSBkZWZpbml0aW9uLCBzYXkgQmlzb24gdXNlcyBMQUxSKDEpIGJ5IGRlZmF1bHQgcmF0aGVyCisJdGhhbiBpbXBseWluZyBCaXNvbiBpcyBsaW1pdGVkIHRvIExBTFIoMSkuCisJKExvY2FsV29yZHMpOiBBZGQgSUVMUi4KKworMjAwOS0wNC0yMSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlGaW5pc2ggaW1wbGVtZW50aW5nICVkZWZpbmUgbHIudHlwZS4KKwlJdHMgdmFsdWUgY2FuIGJlICJMQUxSIiwgIklFTFIiLCBvciAiY2Fub25pY2FsIExSIi4KKwkqIGxpYi90aW1ldmFyLmRlZiAoVFZfSUVMUl9QSEFTRTEpOiBOZXcgdmFyLgorCShUVl9JRUxSX1BIQVNFMik6IE5ldyB2YXIuCisJKFRWX0lFTFJfUEhBU0UzKTogTmV3IHZhci4KKwkoVFZfSUVMUl9QSEFTRTQpOiBOZXcgdmFyLgorCSogc3JjL01ha2VmaWxlLmFtIChiaXNvbl9TT1VSQ0VTKTogQWRkIEFubm90YXRpb25MaXN0LmMsCisJQW5ub3RhdGlvbkxpc3QuaCwgSW5hZGVxdWFjeUxpc3QuYywgSW5hZGVxdWFjeUxpc3QuaCwgU2JpdHNldC5jLAorCVNiaXRzZXQuaCwgaWVsci5oLCBhbmQgaWVsci5jLgorCSogc3JjL2dldGFyZ3MuaCwgc3JjL2dldGFyZ3MuYyAoZW51bSB0cmFjZSwgdHJhY2VfYXJncywKKwl0cmFjZV90eXBlcyk6IEFkZCB0cmFjZV9pZWxyLgorCSogc3JjL2xhbHIuaCwgc3JjL2xhbHIuYyAobmdvdG9zKTogRXhwb3J0IGl0LgorCShGKTogUmVuYW1lIHRvLi4uCisJKGdvdG9fZm9sbG93cyk6IC4uLiB0aGlzLCB1cGRhdGUgYWxsIHVzZXMsIGFuZCBleHBvcnQgaXQuCisJKHNldF9nb3RvX21hcCk6IEV4cG9ydCBpdC4KKwkobWFwX2dvdG8pOiBFeHBvcnQgaXQuCisJKGNvbXB1dGVfbG9va2FoZWFkX3Rva2Vucyk6IERvbid0IGZyZWUgZ290b19mb2xsb3dzIHlldC4gIE5vdworCWhhbmRsZWQgaW4gaWVsci4KKwkoaW5pdGlhbGl6ZV9MQSk6IEV4cG9ydCBpdC4gIE1vdmUgbG9va2JhY2sgYWxsb2NhdGlvbiB0by4uLgorCShsYWxyKTogLi4uIGhlcmUgYmVjYXVzZSwgZm9yIGNhbm9uaWNhbCBMUiwgaW5pdGlhbGl6ZV9MQSBtdXN0CisJYmUgaW52b2tlZCBidXQgbG9va2JhY2sgYW5kIG11Y2ggb2YgdGhlIHJlc3Qgb2YgTEFMUiBpc24ndAorCW5lZWRlZC4KKwkqIG1haW4uYyAobWFpbik6IEluc3RlYWQgb2YgbGFsciwgaW52b2tlIGllbHIsIHdoaWNoIGludm9rZXMKKwlsYWxyLgorCSogc3JjL3JlYWRlci5jIChyZWFkZXIpOiBEZWZhdWx0IGxyLnR5cGUgdG8gIkxBTFIiLgorCURlZmF1bHQgbHIuZGVmYXVsdF9ydWxlcyB0byAiYWNjZXB0aW5nIiBpZiBsci50eXBlIGlzICJjYW5vbmljYWwKKwlMUiIuICBMZWF2ZSB0aGUgZGVmYXVsdCBhcyAiYWxsIiBvdGhlcndpc2UuCisJQ2hlY2sgZm9yIGEgdmFsaWQgbHIudHlwZSB2YWx1ZS4KKwkqIHNyYy9zdGF0ZS5oLCBzcmMvc3RhdGUuYyAoc3RydWN0IHN0YXRlX2xpc3QpOiBBZGQgc3RhdGVfbGlzdAorCW1lbWJlci4KKwkoc3RhdGVfbmV3KTogSW5pdGlhbGl6ZSBzdGF0ZV9saXN0IG1lbWJlciB0byBOVUxMLgorCShzdGF0ZV9uZXdfaXNvY29yZSk6IE5ldyBmdW5jdGlvbiwgZXhwb3J0ZWQuCisJKiB0ZXN0cy9leGlzdGluZy5hdCAoQVRfVEVTVF9FWElTVElOR19HUkFNTUFSKTogTmV3IG1hY3JvIHRoYXQKKwlleGVyY2lzZXMgYWxsIHZhbHVlcyBvZiBsci50eXBlLgorCShHTlUgQVdLIEdyYW1tYXIpOiBSZW5hbWUgdGVzdCBncm91cCB0by4uLgorCShHTlUgQVdLIDMuMS4wIEdyYW1tYXIpOiAuLi4gdGhpcywgYW5kIGV4dGVuZCB0byB1c2UKKwlBVF9URVNUX0VYSVNUSU5HX0dSQU1NQVIuCisJKEdOVSBDaW0gR3JhbW1hcik6IEV4dGVuZCB0byB1c2UgQVRfVEVTVF9FWElTVElOR19HUkFNTUFSLgorCShHTlUgcGljIEdyYW1tYXIpOiBSZW5hbWUgdGVzdCBncm91cCB0by4uLgorCShHTlUgcGljIChHcm9mZiAxLjE4LjEpIEdyYW1tYXIpOiAuLi4gdGhpcywgYW5kIGV4dGVuZCB0byB1c2UKKwlBVF9URVNUX0VYSVNUSU5HX0dSQU1NQVIuCisJKiB0ZXN0cy9yZWR1Y2UuYXQgKEFUX1RFU1RfTFJfVFlQRSk6IE5ldyBtYWNybyB0aGF0IGV4ZXJjaXNlcworCWFsbCB2YWx1ZXMgb2YgbHIudHlwZS4KKwkoU2luZ2xlIFN0YXRlIFNwbGl0KTogTmV3IHRlc3QgZ3JvdXBzIHVzaW5nIEFUX1RFU1RfTFJfVFlQRS4KKwkoTGFuZSBTcGxpdCk6IExpa2V3aXNlLgorCShDb21wbGV4IExhbmUgU3BsaXQpOiBMaWtld2lzZS4KKwkoU3BsaXQgRHVyaW5nIEFkZGVkIExvb2thaGVhZCBQcm9wYWdhdGlvbik6IExpa2V3aXNlLgorCisyMDA5LTA0LTIxICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUFkZCBuZXcgZmlsZXMgZm9yIElFTFIgYW5kIGNhbm9uaWNhbCBMUiBpbXBsZW1lbnRhdGlvbi4KKwkqIHNyYy9Bbm5vdGF0aW9uTGlzdC5jOiBOZXcuCisJKiBzcmMvQW5ub3RhdGlvbkxpc3QuaDogTmV3LgorCSogc3JjL0luYWRlcXVhY3lMaXN0LmM6IE5ldy4KKwkqIHNyYy9JbmFkZXF1YWN5TGlzdC5oOiBOZXcuCisJKiBzcmMvU2JpdHNldC5jOiBOZXcuCisJKiBzcmMvU2JpdHNldC5oOiBOZXcuCisJKiBzcmMvaWVsci5jOiBOZXcuCisJKiBzcmMvaWVsci5oOiBOZXcuCisKKzIwMDktMDQtMjAgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJSW1wbGVtZW50ICVkZWZpbmUgbHIuZGVmYXVsdF9ydWxlcy4KKwlJdHMgdmFsdWUgZGVzY3JpYmVzIHRoZSBzdGF0ZXMgdGhhdCBhcmUgcGVybWl0dGVkIHRvIGNvbnRhaW4KKwlkZWZhdWx0IHJ1bGVzOiAiYWxsIiwgImNvbnNpc3RlbnQiLCBvciAiYWNjZXB0aW5nIi4KKwkqIHNyYy9yZWFkZXIuYyAocmVhZGVyKTogRGVmYXVsdCBsci5kZWZhdWx0X3J1bGVzIHRvICJhbGwiLgorCUNoZWNrIGZvciBhIHZhbGlkIGxyLmRlZmF1bHRfcnVsZXMgdmFsdWUuCisJKiBzcmMvbGFsci5jIChzdGF0ZV9sb29rYWhlYWRfdG9rZW5zX2NvdW50KTogSWYgbHIuZGVmYXVsdF9ydWxlcworCWlzICJhY2NlcHRpbmciLCB0aGVuIG9ubHkgbWFyayB0aGUgYWNjZXB0aW5nIHN0YXRlIGFzCisJY29uc2lzdGVudC4KKwkoaW5pdGlhbGl6ZV9MQSk6IFRlbGwgc3RhdGVfbG9va2FoZWFkX3Rva2Vuc19jb3VudCB3aGV0aGVyCisJbHIuZGVmYXVsdF9ydWxlcyBpcyAiYWNjZXB0aW5nIi4KKwkqIHNyYy90YWJsZXMuYyAoYWN0aW9uX3Jvdyk6IElmIGxyLmRlZmF1bHRfcnVsZXMgaXMgbm90ICJhbGwiLAorCXRoZW4gZGlzYWJsZSBkZWZhdWx0IHJ1bGVzIGluIGluY29uc2lzdGVudCBzdGF0ZXMuCisJKiBzcmMvcHJpbnQuYyAocHJpbnRfcmVkdWN0aW9ucyk6IFVzZSB0aGlzIG9wcG9ydHVuaXR5IHRvCisJcGVyZm9ybSBzb21lIGFzc2VydGlvbnMgYWJvdXQgd2hldGhlciBsci5kZWZhdWx0X3J1bGVzIHdhcworCW9iZXllZCBjb3JyZWN0bHkuCisJKiB0ZXN0cy9sb2NhbC5hdCAoQVRfVEVTVF9UQUJMRVNfQU5EX1BBUlNFKTogTmV3IG1hY3JvIHRoYXQKKwloZWxwcyB3aXRoIGNoZWNraW5nIHRoZSBwYXJzZXIgdGFibGVzIGZvciBhIGdyYW1tYXIuCisJKiB0ZXN0cy9pbnB1dC5hdCAoJWRlZmluZSBsci5kZWZhdWx0X3J1bGVzIGludmFsaWQgdmFsdWVzKTogTmV3CisJdGVzdCBncm91cC4KKwkqIHRlc3RzL3JlZHVjZS5hdCAoQVRfVEVTVF9MUl9ERUZBVUxUX1JVTEVTKTogTmV3IG1hY3JvIHVzaW5nCisJQVRfVEVTVF9UQUJMRVNfQU5EX1BBUlNFLgorCShgbm8gJWRlZmluZSBsci5kZWZhdWx0X3J1bGVzJyk6IE5ldyB0ZXN0IGdyb3VwIGdlbmVyYXRlZCBieQorCUFUX1RFU1RfTFJfREVGQVVMVF9SVUxFUy4KKwkoYCVkZWZpbmUgbHIuZGVmYXVsdF9ydWxlcyAiYWxsIicpOiBMaWtld2lzZS4KKwkoYCVkZWZpbmUgbHIuZGVmYXVsdF9ydWxlcyAiY29uc2lzdGVudCInKTogTGlrZXdpc2UuCisJKGAlZGVmaW5lIGxyLmRlZmF1bHRfcnVsZXMgImFjY2VwdGluZyInKTogTGlrZXdpc2UuCisKKzIwMDktMDQtMjAgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJQ29uc2lzdGVudGx5IHJlZmVyIHRvIFlhY2MsIG5vdCBZQUNDLgorCSogc3JjL2dldGFyZ3MuYyAodXNhZ2UsIHdhcm5pbmdzX2FyZ3MpOiBzL1lBQ0MvWWFjYy8uCisKKzIwMDktMDQtMTcgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJUGFjaWZ5IG1ha2UgbWFpbnRhaW5lci1jaGVjay1wb3NpeC4KKwkqIHRlc3RzL2lucHV0LmF0ICglZGVmaW5lLCAtLWRlZmluZSk6IE1vdmUgYmlzb24gY29tbWFuZC1saW5lCisJb3B0aW9ucyBiZWZvcmUgZ3JhbW1hciBmaWxlIG5hbWUuCisKKzIwMDktMDQtMDQgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJRG9jdW1lbnQgc2VtaWNvbG9uIHdhcm5pbmdzLgorCSogTkVXUyAoMi41KTogSGVyZS4KKworMjAwOC0xMi0wOCAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlGaXggcG9ydGFiaWxpdHkgaXNzdWUgaW4gdGhlIHRlc3Qgc3VpdGUuCisJKiB0ZXN0cy9sb2NhbC5hdCAoQVRfTUFUQ0hFU19DSEVDSyk6IE5ldy4KKwlCYXNlZCBvbiBQZXJsIGluc3RlYWQgb2YgU2VkLiAgU2VkIGhhcyB0b28gbWFueSBwb3J0YWJpbGl0eQorCXBpdGZhbGxzLCBub3QgZXZlciBTZWQgaXMgR05VIFNlZC4KKwkqIHRlc3RzL2FjdGlvbnMuYXQgKEZpeCB1c2VyIGFjdGlvbnMgd2l0aG91dCBhIHRyYWlsaW5nIHNlbWljb2xvbik6CisJVXNlIGl0LgorCisyMDA4LTEyLTA3ICBEaS1hbiBKYW4gIDxkaWFuakBmcmVlc2hlbGwub3JnPgorCisJSW1wbGVtZW50IHRoZSBGSVhNRSB0aGF0IGVuZHMgYW4gdXNlciBhY3Rpb24gd2l0aCBhIHNlbWljb2xvbgorCWlmIGl0IHNlZW1zIG5lY2Vzc2FyeS4KKwkqIHNyYy9zY2FuLWNvZGUubCAoZmxleCBydWxlcyBzZWN0aW9uKTogRmxhZyBjcHAgZGlyZWN0aXZlIGZyb20KKwlhbnkgYCMnIHRvIHRoZSBmaXJzdCB1bmVzY2FwZWQgZW5kLW9mLWxpbmUuICBTZW1pY29sb24gaXMgbm90CisJbmVlZGVkIGFmdGVyIGA7JywgYHsnLCAnfScsIG9yIGNwcCBkaXJlY3RpdmVzIGFuZCBpcyBuZWVkZWQgYWZ0ZXIKKwlhbnkgb3RoZXIgdG9rZW4gKHdoaXRlc3BhY2VzIGFuZCBjb21tZW50cyBoYXZlIG5vIGVmZmVjdCkuCisJKiB0ZXN0cy9hY3Rpb25zLmF0IChGaXggdXNlciBhY3Rpb25zIHdpdGhvdXQgYSB0cmFpbGluZyBzZW1pY29sb24pOgorCU5ldyB0ZXN0LgorCSogdGVzdHMvaW5wdXQuYXQgKEFUX0NIRUNLX1VOVVNFRF9WQUxVRVMpOiBBZGQgc2VtaWNvbG9ucyB0bworCXRvIG1ha2UgdXNlciBhY3Rpb25zIGNvbXBsZXRlIHN0YXRlbWVudHMuCisJQWRqdXN0IGNvbHVtbiBudW1iZXJzIGluIGVycm9yIG1lc3NhZ2VzLgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoRml4IHVzZXIgYWN0aW9ucyB3aXRob3V0IGEgdHJhaWxpbmcgc2VtaWNvbG9uKToKKwlSZW1vdmUuICBDb3ZlcmVkIGJ5IG5ldyB0ZXN0LgorCisyMDA5LTA0LTE0ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCWRvYzogbWlub3IgZml4ZXMuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoRGVjbCBTdW1tYXJ5KTogRml4IGVudHJ5IGFib3V0ICVkZWJ1Zy4KKwkoVGFibGUgb2YgU3ltYm9scyk6IFJlbW92ZSBkdXBsaWNhdGUgZW50cnkgZm9yICVkZWJ1Zy4KKworMjAwOS0wNC0xMCAgRXJpYyBCbGFrZSAgPGViYjlAYnl1Lm5ldD4KKworCXN1Ym1vZHVsZXM6IHVwZGF0ZSB0byBsYXRlc3QKKwkqIHN1Ym1vZHVsZXMvYXV0b2NvbmY6IFVzZSBsYXRlc3QgdXBzdHJlYW0gQXV0b2NvbmYuCisKKzIwMDktMDQtMDYgIEVyaWMgQmxha2UgIDxlYmI5QGJ5dS5uZXQ+CisKKwlXb3JrIGFyb3VuZCBhdXRvY29uZiAyLjYzYiBidWcgaW4gdGVzdHN1aXRlLgorCSogdGVzdHMvb3V0cHV0LmF0IChBVF9DSEVDS19PVVRQVVRfRklMRV9OQU1FKTogQXZvaWQgdHJpcHBpbmcKKwlhdXRvY29uZiBidWcgcmVsYXRlZCB0byAjIGluIHRlc3QuCisKKzIwMDktMDQtMDYgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBORVdTICgyLjUpOiBEZXNjcmliZSBuZXcgLUQvLS1kZWZpbmUgZmVhdHVyZS4KKworMjAwOC0xMS0xMCAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwktLXRyYWNlPW11c2NsZXMKKwkqIHNyYy9nZXRhcmdzLmgsIHNyYy9nZXRhcmdzLmMgKHRyYWNlX211c2NsZSk6IE5ldy4KKwkodHJhY2VfdHlwZXMsIHRyYWNlX2FyZ3MpOiBTdXBwb3J0IGl0LgorCSogc3JjL291dHB1dC5jIChvdXRwdXRfc2tlbGV0b24pOiBVc2UgaXQuCisKKzIwMDgtMTEtMTAgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJbXVzY2xlc19vdXRwdXQuCisJKiBzcmMvb3V0cHV0LmMgKG11c2NsZXNfb3V0cHV0KTogTmV3LCBleHRyYWN0ZWQgZnJvbS4uLgorCShvdXRwdXRfc2tlbGV0b24pOiBoZXJlLgorCUFkanVzdC4KKworMjAwOC0xMS0yMSAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlEaXNwbGF5IHRoZSBjaGFuZ2VzIGluIGNyb3NzLW9wdGlvbnMudGV4aS4KKwkqIGJ1aWxkLWF1eC9jcm9zcy1vcHRpb25zLnBsICgkc2VwKTogTmV3LCB0byBzZXBhcmF0ZSBpdGVtcy4KKwkqIGRvYy9NYWtlZmlsZS5hbSAoJChzcmNkaXIpL2Nyb3NzLW9wdGlvbnMudGV4aSk6IFVzZSBkaWZmIHRvIGRpc3BsYXkKKwl0aGUgY2hhbmdlcy4KKworMjAwOC0xMS0yMCAgRGktYW4gSmFuICA8ZGlhbmpAZnJlZXNoZWxsLm9yZz4KKworCUltcHJvdmVzIG9wdGlvbnMgaW4gdGhlIG1hbnVhbC4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvICgtZywgLXgpOiBBZGQgc3BhY2UgYmVmb3JlIGFyZ3VtZW50LgorCShPcHRpb24gQ3Jvc3MgS2V5KTogSW1wbGVtZW50IEZJWE1FOiBsaXN0aW5nIGRpcmVjdGl2ZXMgYWxzby4KKwkqIGJ1aWxkLWF1eC9jcm9zcy1vcHRpb25zLnBsOiAgUmVhZCBmcm9tIDxTVERJTj4gcmF0aGVyIHRoYW4gPD4uCisJKFNob3J0IE9wdGlvbik6IFNwZWNpYWwgY2FzZSAtZC4gIFB1dCBhcmd1bWVudHMgaW5zaWRlIEBvcHRpb24uCisJKEJpc29uIERpcmVjdGl2ZSk6IEFkZCBjb2x1bW4sIGF1dG9tYXRpY2FsbHkgZXh0cmFjdGVkIGZyb20KKwlzcmMvc2Nhbi1ncmFtLmwgKGFjdHVhbCBuYW1lIHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQpCisJd2l0aCBzcGVjaWFsIGNhc2UgZm9yICVkZWZpbmUuCisJKiBkb2MvTWFrZWZpbGUuYW0gKGRvYy9jcm9zcy1vcHRpb25zLnRleGkpOiBQYXNzIHNyYy9zY2FuLWdyYW0ubAorCXRvIGJ1aWxkLWF1eC9jcm9zcy1vcHRpb25zLnBsLgorCSogc3JjL2dldGFyZ3MuYyAodXNhZ2UpOiBEb2N1bWVudCBsaW1pdGF0aW9ucyBvZiBjcm9zcy1vcHRpb25zLnBsLgorCSogc3JjL3NjYW4tZ3JhbS5sOiBMaWtld2lzZS4KKworMjAwOS0wMi0yNSAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlDb3B5cmlnaHQgeWVhcnMuCisJKiBkYXRhL2dsci5jOiBBZGQgMjAwNyBhbmQgMjAwOCBoZXJlLCBjb25zaXN0ZW5seSB3aXRoIHRoZSBjb21tZW50cy4KKworMjAwOC0xMi0wOCAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlJbnN0YWxsIGF1dG9jb25mIGFzIGEgc3VibW9kdWxlIHRvIGdldCBtNHN1Z2FyLgorCSogLmdpdG1vZHVsZXM6IEFkZCBzdWJtb2R1bGVzL2F1dG9jb25mLgorCSogZGF0YS9tNHN1Z2FyL2ZvcmVhY2gubTQsIGRhdGEvbTRzdWdhci9tNHN1Z2FyLm00OiBOb3cgbGlua3MgaW50bworCXN1Ym1vZHVsZXMvYXV0b2NvbmYuCisKKzIwMDgtMTEtMTcgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJU2ltcGxpZnkgbGFzdCBwYXRjaCBzbGlnaHRseS4KKwkqIHNyYy9nZXRhcmdzLmMgKGdldGFyZ3MpOiBIZXJlLgorCisyMDA4LTExLTE3ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUZpeCBsYXN0IHdhcm5pbmcgZnJvbSAtLWVuYWJsZS1nY2Mtd2FybmluZ3MuCisJKiBzcmMvZ2V0YXJncy5jIChnZXRhcmdzKTogRG9uJ3QgYXNzaWduIGNvbnN0IGFkZHJlc3MgdG8gbm9uLWNvbnN0CisJcG9pbnRlci4KKworMjAwOC0xMS0xNyAgRGktYW4gSmFuICA8ZGlhbmpAZnJlZXNoZWxsLm9yZz4KKworCUhhbmRsZSAtLWVuYWJsZS1nY2Mtd2FybmluZ3MuCisJKiBzcmMvZ2V0YXJncy5jIChjb21tYW5kX2xpbmVfbG9jYXRpb24pOiBTZXQgcGFyYW1ldGVycyB0byB2b2lkLgorCisyMDA4LTExLTExICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCUFUX0ZVTExfQ09NUElMRS4KKwkqIHRlc3RzL2FjdGlvbnMuYXQsIHRlc3RzL3JlZ3Jlc3Npb24uYXQ6IFVzZSBpdC4KKworMjAwOC0xMS0wNyAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlQYXNzIGNvbW1hbmQgbGluZSBsb2NhdGlvbiB0byBza2VsZXRvbl9hcmcgYW5kIGxhbmd1YWdlX2FyZ21hdGNoLgorCSogc3JjL2dldGFyZ3MuaCwgc3JjL2dldGFyZ3MuYyAoc2tlbGV0b25fYXJnLCBsYW5ndWFnZV9hcmdtYXRjaCk6CisJVGhlIGxvY2F0aW9uIGFyZ3VtZW50IGlzIG5vdyBtYW5kYXRvcnkuCisJQWRqdXN0IGFsbCBkZXBlbmRlbmNpZXMuCisJKGdldGFyZ3MpOiBVc2UgY29tbWFuZF9saW5lX2xvY2F0aW9uLgorCisyMDA4LTExLTA3ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCS1ELCAtLWRlZmluZS4KKwkqIHNyYy9nZXRhcmdzLmMgKHVzYWdlKTogRG9jdW1lbnQgLUQuCisJRml4IGhlbHAgc3RyaW5nIGZvciAtLWxvY2F0aW9ucy4KKwkoY29tbWFuZF9saW5lX2xvY2F0aW9uKTogTmV3LgorCShzaG9ydF9vcHRpb25zLCBsb25nX29wdGlvbnMsIGdldGFyZ3MpOiBTdXBwb3J0IC1ELCAtLWRlZmluZS4KKwkoZ2V0YXJncyk6IE1vdmUgLWQgc3VwcG9ydCBhdCB0aGUgcmlnaHQgcGxhY2UuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoQmlzb24gT3B0aW9ucyk6IFVwZGF0ZS4KKwkqIHRlc3RzL2lucHV0LmF0ICglZGVmaW5lLCAtLWRlZmluZSk6IE5ldy4KKworMjAwOC0xMS0wNyAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlJbml0aWFsaXplIHRoZSBtdXNjbGUgdGFibGUgYmVmb3JlIHBhcnNpbmcgdGhlIGNvbW1hbmQgbGluZS4KKwkqIHNyYy9nZXRhcmdzLmMgKHF1b3RlYXJnLmgsIG11c2NsZV90YWIuaCk6IEluY2x1ZGUuCisJKGdldGFyZ3MpOiBEZWZpbmUgZmlsZV9uYW1lLgorCSogc3JjL21haW4uYyAobWFpbik6IEluaXRpYWxpemUgbXVzY2xlX3RhYiBiZWZvcmUgY2FsbGluZworCWdldGFyZ3MuCisJKiBzcmMvbXVzY2xlX3RhYi5jIChtdXNjbGVfaW5pdCk6IE5vIGxvbmdlciBkZWZpbmUgZmlsZV9uYW1lLCBhcworCWl0cyB2YWx1ZSBpcyBub3QgYXZhaWxhYmxlIHlldC4KKworMjAwOC0xMS0wOSAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlSZXF1aXJlIHRoZSBnZW5lcmF0aW9uIG9mIHBhcnNlLWdyYW0ub3V0cHV0LgorCSogc3JjL01ha2VmaWxlLmFtIChZQUNDKTogUGFzcyAtLXJlcG9ydD1hbGwuCisKKzIwMDktMDQtMDYgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBORVdTICgyLjUpOiBOZXcgc3R1Yi4KKworMjAwOS0wNC0wNiAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlGaXggb3B0aW9ucyBkb2N1bWVudGF0aW9uLgorCSogYnVpbGQtYXV4L2Nyb3NzLW9wdGlvbnMucGw6IEFzIGluIC0taGVscCBvdXRwdXQsIHdyaXRlIG9wdGlvbmFsCisJYXJndW1lbnRzIGFzIFs9QVJHXSBub3QgPVtBUkddLgorCSogZG9jL2Jpc29uLnRleGluZm8gKEJpc29uIE9wdGlvbnMpOiBBZGQgLVcvLS13YXJuaW5ncyBhcmd1bWVudC4KKworMjAwOC0xMS0wNyAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlGaXggLS1oZWxwLgorCSogc3JjL2dldGFyZ3MuYyAodXNhZ2UpOiBGaXggaGVscCBzdHJpbmcgZm9yIC1XLgorCisyMDA4LTExLTA3ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCUhhbmRsZSBtb3JlIGdlbmVyYWwgdHlwZXMgb2Ygb3B0aW9uIGFyZ3VtZW50cy4KKwkqIGJ1aWxkLWF1eC9jcm9zcy1vcHRpb25zLnBsOiBUaGUgYXJndW1lbnQgZW5kcyBhdCB0aGUgZmlyc3QKKwlzcGFjZSwgbm90IHRoZSBmaXJzdCBub24tc3ltYm9sIGNoYXJhY3Rlci4KKwlVc2UgQHZhciBmb3IgZWFjaCB3b3JkIGFwcGVhcmluZyB0aGUgYXJndW1lbnQgZGVzY3JpcHRpb24uCisKKzIwMDktMDQtMDQgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJUmVtb3ZlIHNwdXJpb3VzIGluaXRpYWwgZW1wdHkgbGluZXMuCisJKiBkYXRhL2xvY2F0aW9uLmNjOiBFbmQgdGhlIEBvdXRwdXQgbGluZXMgd2l0aCBhbiBALgorCisyMDA4LTExLTA0ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCVJlbW92ZSBzcHVyaW91cyBpbml0aWFsIGVtcHR5IGxpbmVzLgorCSogZGF0YS9nbHIuYywgZGF0YS9nbHIuY2MsIGRhdGEvbGFscjEuY2MsIGRhdGEvbGFscjEuamF2YSwKKwkqIGRhdGEveWFjYy5jOiBFbmQgdGhlIEBvdXRwdXQgbGluZXMgd2l0aCBhbiBALgorCisyMDA5LTA0LTA0ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCVJlcGxhY2UgQklTT05fUFJPR19HTlVfTTQgd2l0aCBBdXRvY29uZidzIEFDX1BST0dfR05VX000LgorCUlmIHRoZSBmaXJzdCBtNCBpbiAkUEFUSCBpcyB3cm9uZywgaXQga2VlcHMgbG9va2luZy4gIE1vcmVvdmVyLCBpdHMKKwlyZXF1aXJlbWVudHMgZm9yIGEgY29ycmVjdCBtNCBhcmUgc3RyaWN0ZXIuCisJKiBtNC9tNC5tNDogUmVwbGFjZSB3aXRoIEF1dG9jb25mIDIuNjMncyBtNC9tNC5tNC4KKwkqIGNvbmZpZ3VyZS5hYzogVXBkYXRlIHRvIHVzZSBBQ19QUk9HX0dOVV9NNC4KKwlSZXBvcnRlZCBieSBFcmljIEJsYWtlLgorCisyMDA5LTA0LTAzICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUhlbHAgd2l0aCB1cGRhdGluZyB3ZWIgbWFudWFsLgorCSogSEFDS0lORzogSW5jb3Jwb3JhdGUgaW5zdHJ1Y3Rpb25zIGZyb20gZ251bGliL2RvYy9SRUFETUUuCisJKiBib290c3RyYXAuY29uZiAoZ251bGliX21vZHVsZXMpOiBBZGQgZ2VuZG9jcy4KKworMjAwOS0wNC0wMyAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlGaXggc3RyYW5nZSAlZGVmaW5lIGxvY2F0aW9ucyBmb3IgZGVmYXVsdCB2YWx1ZXMuCisJUmVwb3J0ZWQgYnkgQWtpbSBEZW1haWxsZSBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDctMTIvbXNnMDAwMDEuaHRtbD4KKwlhbmQgZGlzY3Vzc2VkIGFnYWluIHN0YXJ0aW5nIGF0CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDgtMTEvbXNnMDAxMDIuaHRtbD4uCisJKiBkYXRhL2Jpc29uLm00IChiNF9wZXJjZW50X2RlZmluZV9kZWZhdWx0KTogTGVhdmUgc3luY2xpbmUgYmxhbmsKKwliZWNhdXNlIGxvY2F0aW9uIGluZm9ybWF0aW9uIGlzIGJvZ3VzLgorCVVzZSBhbmdsZSBicmFja2V0cyB0byBkZWxpbWl0IGZha2UgZmlsZSBuYW1lIGJlY2F1c2Ugc3F1YXJlIGJyYWNrZXRzCisJbG9vayBsaWtlIHVuZGVyZXhwYW5kZWQgbTQuICBDaG9vc2UgYSBiZXR0ZXIgZmFrZSBmaWxlIG5hbWUuCisJVXNlIG5lZ2F0aXZlIGxpbmUgbnVtYmVycy4KKwkqIHNyYy9tdXNjbGVfdGFiLmMgKG11c2NsZV9wZXJjZW50X2RlZmluZV9kZWZhdWx0KTogTGlrZXdpc2UuCisJKiBzcmMvbG9jYXRpb24uYyAobG9jYXRpb25fcHJpbnQpOiBJZiBsaW5lIGZvciBhIGJvdW5kYXJ5IGlzIG5lZ2F0aXZlLAorCW9ubHkgcHJpbnQgdGhhdCBib3VuZGFyeSdzIGZpbGUgbmFtZS4KKwkqIHNyYy9sb2NhdGlvbi5oOiBEb2N1bWVudCB0aGF0LgorCSogdGVzdHMvc2tlbGV0b25zLmF0ICglZGVmaW5lIEJvb2xlYW4gdmFyaWFibGVzOiBpbnZhbGlkIHNrZWxldG9uCisJZGVmYXVsdHMpOiBVcGRhdGUgb3V0cHV0LgorCisyMDA4LTExLTA3ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCUxvY2F0aW9ucyB3aXRob3V0IGNvbHVtbnMgZm9yIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCisJKiBzcmMvbG9jYXRpb24uYyAobG9jYXRpb25fcHJpbnQpOiBEb24ndCBkaXNwbGF5IG5lZ2F0aXZlIGNvbHVtbnMuCisJKiBzcmMvbG9jYXRpb24uaDogRG9jdW1lbnQgdGhpcy4KKworMjAwOS0wMi0wMyAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlBZGQgcmVtaW5kZXIgYWJvdXQgdXBsb2FkaW5nIHB1YmxpYyBrZXkgdG8ga2V5cy5nbnVwZy5uZXQuCisJKiBIQUNLSU5HIChSZWxlYXNlIFByb2NlZHVyZSk6IEhlcmUuCisKKzIwMDktMDMtMzEgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJYm9vdHN0cmFwOiAtLWhlbHAgdG8gc3Rkb3V0LgorCSogYm9vdHN0cmFwICh1c2FnZSk6IERvbid0IHNlbmQgLS1oZWxwIHRvIHN0ZGVyci4KKwlVc2UgYSBoZXJlIGRvYyBpbnN0ZWFkIG9mIGEgbG9uZyBzdHJpbmcuCisKKzIwMDktMDMtMzEgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJYm9vdHN0cmFwOiBSRUFETUUtaGFja2luZyBubyBsb25nZXIgZXhpc3RzCisJKiBib290c3RyYXAgKGNoZWNrb3V0X29ubHlfZmlsZSk6IFNldCB0byBIQUNLSU5HLgorCisyMDA5LTAzLTI2ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCWRvYzogbWVyZ2UgSEFDS0lORyBhbmQgUkVBRE1FLWhhY2tpbmcuCisJVHdvIGZpbGVzIGlzIGNvbmZ1c2luZy4KKwlSZXBvcnRlZCBieSBBbGV4YW5kcmUgRHVyZXQtTHV0ei4KKworCSogUkVBRE1FLWhhY2tpbmc6IE1lcmdlIGludG8uLi4KKwkqIEhBQ0tJTkcgKFdvcmtpbmcgZnJvbSB0aGUgcmVwb3NpdG9yeSk6IGhlcmUuCisKKzIwMDktMDMtMjYgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJZG9jOiB1cGRhdGUgUkVBRE1FLWhhY2tpbmcuCisJKiBSRUFETUUtaGFja2luZzogV2Ugbm93IHVzZSBnaXQgYW5kIGdpdCBzdWJtb2R1bGVzLgorCVJlcG9ydGVkIGJ5IFJhbGYgV2lsZGVuaHVlcyBhbmQgQWxleGFuZHJlIER1cmV0LUx1dHouCisKKzIwMDktMDMtMjYgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJbGFscjEuY2M6IGF2b2lkIEdDQyA0LjMgd2FybmluZ3MuCisJR0NDIDQuMyBub3cgd2FybnMgYWJvdXQgImEgfHwgYiAmJiBjIiBhbmQgYXNrcyBmb3IgZXhwbGljaXQKKwlwYXJlbnRoZXNlcy4KKwlSZXBvcnRlZCBieSBBbGV4YW5kcmUgRHVyZXQtTHV0ei4KKwkqIGRhdGEvbG9jYXRpb24uY2M6IFVwZGF0ZSBjb3B5cmlnaHQgeWVhcnMuCisJKFBvc2l0aW9uOjpvcGVyYXRvcj09KTogVXNlIHBhcmVucyB0byBtYWtlIHByZWNlZGVuY2UgZXhwbGljaXQuCisJQ29tcGFyZSBsaW5lcyBhbmQgY29sdW1ucyBmaXJzdCwgYXMgdGhleSBhcmUgbW9yZSBsaWtlbHkgdG8gYmUKKwlkaWZmZXJlbnQsIGFuZCB0aGV5IGFyZSBmYXN0ZXIgdG8gY29tcGFyZS4KKworMjAwOS0wMy0yNiAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlnbnVsaWI6IHVwZGF0ZS4KKwkqIGdudWxpYjogVXBkYXRlIHRvIGxhdGVzdC4KKwkqIGxpYi9NYWtlZmlsZS5hbSAoQU1fQ1BQRkxBR1MpOiBJdCBpcyBub3cgZGVmaW5lZCBieSBnbnVsaWIsIHNvCisJdXNlICs9LgorCisyMDA5LTAxLTA4ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCUZpeCBncmVwIHBvcnRhYmlsaXR5IGlzc3Vlcy4KKwlHcmVwIG9uIFNvbGFyaXMgZG9lcyBub3Qgc3VwcG9ydCAtcS4KKwlSZXBvcnRlZCBieSBTdW1tdW0gQm9udW0uCisKKwkqIE5FV1M6IEFkZCBhIHN0dWIgZm9yIDIuNC4yLgorCSogVEhBTktTOiBBZGQgU3VtbXVtIEJvbnVtLgorCSogdGVzdHMvYXRsb2NhbC5pbiAoRUdSRVApOiBOZXcuCisJKENDLCBDWFgsIFhTTFRQUk9DKTogTWFrZSBpdCBwb3NzaWJsZSB0byBvdmVycmlkZSB0aGVtIHZpYQorCWVudnZhcnMuCisJKiB0ZXN0cy9qYXZhLmF0OiBVc2UgJEVHUkVQIGluc3RlYWQgb2YgZWdyZXAuCisJVXNlIEFUX0NIRUNLJ3MgaWdub3JlIGluc3RlYWQgb2YgZ3JlcCdzIC1xLgorCisyMDA4LTEyLTExICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCVZlcnNpb24gMi40LjEuCisJKiBORVdTOiBTZXQgdmVyc2lvbiBhbmQgZGF0ZS4KKwkqIGxpYi9NYWtlZmlsZS5hbTogVXBkYXRlIGNvcHlyaWdodCB5ZWFyLgorCSogdGVzdHMvYXRsb2NhbC5pbjogVXBkYXRlIGNvcHlyaWdodCB5ZWFyLgorCisyMDA4LTEyLTExICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCVNlbWljb2xvbiBmZWF0dXJlIHJlbW92YWwgaXMgbm90IGFib3V0IGZ1dHVyZSBsYW5ndWFnZSBzdXBwb3J0LgorCSogTkVXUzogVGhlIHNlbWljb2xvbiBmZWF0dXJlIGlzIG5vIGxvbmdlciBhY3RpdmUgZm9yIG5ld2VyIGxhbmd1YWdlcywKKwlzbyBkb24ndCBjbGFpbSB0aGF0IGl0IGNhdXNlcyB0cm91YmxlIGZvciB0aGVtLgorCisyMDA4LTEyLTExICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogZ251bGliOiBVcGRhdGUgc3VibW9kdWxlIHRvIEhFQUQuCisKKzIwMDgtMTItMDkgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJVXBkYXRlIGRhdGEvUkVBRE1FLgorCSogZGF0YS9SRUFETUU6IERvY3VtZW50IGdsci5jYywgbGFscjEuamF2YSwgbTRzdWdhciBhbmQgeHNsdC4KKworMjAwOC0xMi0wNSAgRXJpYyBCbGFrZSAgPGViYjlAYnl1Lm5ldD4KKworCUJ1aWxkIHRlc3RzdWl0ZSB3aXRoIG5ld2VyIGF1dG9jb25mLgorCSogdGVzdHMvb3V0cHV0LmF0IChtNF9leHBhbmQpOiBEb24ndCBvdmVycmlkZSBpbiBuZXdlciBhdXRvY29uZiwKKwl3aGVyZSB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VkLgorCSogdGVzdHMvY3h4LXR5cGUuYXQgKF9BVF9SRVNPTFZFRF9HTFJfT1VUUFVUKQorCShfQVRfUkVTT0xWRURfR0xSX09VVFBVVF9XSVRIX0xPQywgX0FUX0FNQklHX0dMUl9PVVRQVVQpCisJKF9BVF9BTUJJR19HTFJfT1VUUFVUX1dJVEhfTE9DLCBfQVRfR0xSX1NUREVSUikKKwkoX0FUX1ZFUkJPU0VfR0xSX1NUREVSUik6IEV4cGFuZCB0byBkb3VibGUtcXVvdGVkIHN0cmluZ3MsCisJc2luY2Ugc29tZSBvZiB0aGVtIGNvbnRhaW4gdW5iYWxhbmNlZCAnKScuCisKKzIwMDgtMTEtMTkgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBORVdTOiBDbGFyaWZ5IGEgbGl0dGxlLgorCisyMDA4LTExLTE5ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogTkVXUzogVXBkYXRlIGZvciByZWNlbnQgY2hhbmdlcy4KKworMjAwOC0xMS0xOCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlGaXggdW5leHBhbmRlZCBtYWNyb3MgaW4gR0xSIGRlZmluZXMgZmlsZS4KKwlSZXBvcnRlZCBieSBDc2FiYSBSYWR1bHkgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDA4LTExL21zZzAwMDQ4Lmh0bWw+LgorCSogVEhBTktTIChDc2FiYSBSYWR1bHkpOiBBZGQuCisJKiBkYXRhL2dsci5jOiBGaXggb3ZlcnF1b3Rpbmcgb24gYjRfcHJlZml4IGZvciB5eWx2YWwgYW5kIHl5bGxvYy4KKwkqIHRlc3RzL2NhbGMuYXQgKF9BVF9EQVRBX0NBTENfWSk6IElmICVkZWZpbmVzIGlzIHNwZWNpZmllZCwgZ2VuZXJhdGUKKwlsZXhlciBpbiBhIHNlcGFyYXRlIG1vZHVsZSB0aGF0IGluY2x1ZGVzIHRoZSBkZWZpbmVzIGZpbGUuCisJKEFUX0NIRUNLX0NBTEMpOiBVc2UgQVRfRlVMTF9DT01QSUxFIGFuZCByZXF1ZXN0IGNvbXBpbGF0aW9uIG9mIGxleGVyCisJc291cmNlLgorCSogdGVzdHMvbG9jYWwuYXQgKF9BVF9CSVNPTl9PUFRJT05fUFVTSERFRlMpOiBQdXNoIEFUX0RFRklORVNfSUYuCisJQWRqdXN0IEFUX0xPQyBhbmQgQVRfVkFMIHRvIHVzZSBBVF9OQU1FX1BSRUZJWC4KKwkoQVRfQklTT05fT1BUSU9OX1BPUERFRlMpOiBQb3AgQVRfREVGSU5FU19JRi4KKwkoQVRfREFUQV9TT1VSQ0VfUFJPTE9HVUUpOiBOZXcuCisJKEFUX0RBVEFfR1JBTU1BUl9QUk9MT0dVRSk6IFVzZSBBVF9EQVRBX1NPVVJDRV9QUk9MT0dVRS4KKwkoQVRfREFUQV9TT1VSQ0UpOiBOZXcuCisJKEFUX0ZVTExfQ09NUElMRSk6IE5ldywgY29waWVkIGZyb20gbWFzdGVyIGJyYW5jaCBhbmQgZXh0ZW5kZWQgdG8KKwlzdXBwb3J0IGFuIGFkZGl0aW9uYWwgc291cmNlIGZpbGUuCisKKzIwMDgtMTEtMTcgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJRG9uJ3QgbGV0IG1haW50YWluZXItKi1jaGVjayB0YXJnZXRzIGZvcmNlIGEgdmVyc2lvbiB1cGRhdGUuCisJKiBjZmcubWsgKF9pcy1kaXN0LXRhcmdldCk6IEltcGxlbWVudC4gIG1haW50YWluZXItY2hlY2sqIHdhcyBhbHJlYWR5CisJaGFuZGxlZC4KKworMjAwOC0xMS0xNyAgRGktYW4gSmFuICA8ZGlhbmpAZnJlZXNoZWxsLm9yZz4KKworCSogZG9jL2Jpc29uLnRleGluZm86IFN5bmNocm9uaXplIGBgRGV0YWlsIE5vZGUgTGlzdGluZycnLgorCUFsaWduIG1lbnVzLiAgQWRqdXN0IHdvcmQgd3JhcHBpbmcuICBVc2Ugbm9kZSBuYW1lcyBmb3IgbWVudSBuYW1lcy4KKwkoRXhhbXBsZXMpOiBEb24ndCBhYmJyZXZpYXRlIG5vZGUgbmFtZXMuCisJKExvY2FsV29yZHMpOiBSZW1vdmUgYWJicmV2aWF0aW9ucy4KKwkoQ29weWluZyk6IE1ha2UgZGVzY3JpcHRpb24gYSBzZW50ZW5jZS4KKwkoSmF2YSBBY3Rpb24gRmVhdHVyZXMpOiBSZW1vdmUgcGVyaW9kIHRvIG1hdGNoIHRoZSByZXN0IG9mIG1lbnUuCisKKzIwMDgtMTEtMTEgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisKKwkqIGJvb3RzdHJhcC5jb25mOiBSZXBsYWNlIG00L3dhcm5pbmcubTQgd2l0aCB3YXJuaW5ncyBtb2R1bGUuCisJKiBjb25maWd1cmUuYWM6IEFkanVzdCB1c2FnZS4KKwkqIGxpYi9NYWtlZmlsZS5hbTogUmVwbGFjZSAkKFdBUk5JTkdfQ0ZMQUdTKSB3aXRoICQoV0FSTl9DRkxBR1MpLgorCSogc3JjL01ha2VmaWxlLmFtOiBSZXBsYWNlICQoV0FSTklOR19DRkxBR1MpIHdpdGggJChXQVJOX0NGTEFHUykuCisJKiB0ZXN0cy9hdGxvY2FsLmluOiBSZXBsYWNlICQoV0FSTklOR18qRkxBR1MpIHdpdGggJChXQVJOXypGTEFHUykuCisKKzIwMDgtMTEtMDcgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJRG9uJ3QgYWRkIGEgc2VtaWNvbG9uIHRvIGFjdGlvbnMgZm9yICVza2VsZXRvbiBvciAlbGFuZ3VhZ2UuCisJSXQgYnJlYWtzIEphdmEgdGVzdCBjYXNlcyBhcyByZXBvcnRlZCBieSBBa2ltIERlbWFpbGxlLgorCSogc3JjL3NjYW4tY29kZS5sOiBJbXBsZW1lbnQuCisKKzIwMDgtMTEtMDcgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJQ2xlYW4gdXAgJXNrZWxldG9uIGFuZCAlbGFuZ3VhZ2UgcHJpb3JpdHkgaW1wbGVtZW50YXRpb24uCisJKiBzcmMvZ2V0YXJncy5jIChza2VsZXRvbl9wcmlvKTogVXNlIGRlZmF1bHRfcHJpbyByYXRoZXIgdGhhbiAyLCBhbmQKKwlyZW1vdmUgc3RhdGljIHF1YWxpZmllciBiZWNhdXNlIG90aGVycyB3aWxsIHNvb24gbmVlZCB0byBzZWUgaXQuCisJKGxhbmd1YWdlX3ByaW8pOiBMaWtld2lzZS4KKwkoZ2V0YXJncyk6IFVzZSBjb21tYW5kX2xpbmVfcHJpbyByYXRoZXIgdGhhbiAwLgorCSogc3JjL2dldGFyZ3MuaCAoY29tbWFuZF9saW5lX3ByaW8sIGdyYW1tYXJfcHJpbywgZGVmYXVsdF9wcmlvKTogTmV3CisJZW51bSBmaWVsZHMuCisJKHNrZWxldG9uX3ByaW8pOiBFeHRlcm4gaXQuCisJKGxhbmd1YWdlX3ByaW8pOiBFeHRlcm4gaXQuCisJKiBzcmMvcGFyc2UtZ3JhbS55OiBVc2UgZ3JhbW1hcl9wcmlvIHJhdGhlciB0aGFuIDEuCisKKzIwMDgtMTEtMDQgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJKiBORVdTOiBNZW50aW9uIHRoZSB0cmFpbGluZyBzZW1pY29sb24gaW4gYWN0aW9uLgorCisyMDA4LTExLTA0ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCVJlZm9ybWF0IE5FV1MuCisJKiBORVdTOiBVc2UgbW9yZSBvdXRsaW5lLW1vZGUgbWFya3VwLgorCVN1Z2dlc3RlZCBieSBKaW0gTWV5ZXJpbmcuCisKKzIwMDgtMTEtMDQgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJRml4IHVzZXIgYWN0aW9ucyB3aXRob3V0IGEgdHJhaWxpbmcgc2VtaWNvbG9uLgorCVJlcG9ydGVkIGJ5IFNlcmdlaSBTdGVzaGVua28gYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDA4LTExL21zZzAwMDAxLmh0bWw+LgorCSogVEhBTktTIChTZXJnZWkgU3Rlc2hlbmtvKTogQWRkLgorCSogc3JjL3NjYW4tY29kZS5sIChTQ19SVUxFX0FDVElPTik6IEZpeCBpdC4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKEZpeCB1c2VyIGFjdGlvbnMgd2l0aG91dCBhIHRyYWlsaW5nIHNlbWljb2xvbik6CisJTmV3IHRlc3QgY2FzZS4KKworMjAwOC0xMS0wMiAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlJbml0aWF0ZSBmdXJ0aGVyIGRldmVsb3BtZW50LgorCSogTkVXUzogQ3JlYXRlIGFuIGVtcHR5IHNlY3Rpb24gZm9yIG5ldyBlbnRyaWVzLgorCSogZ251bGliOiBVcGRhdGUgc3VibW9kdWxlIHRvIEhFQUQuCisKKzIwMDgtMTEtMDIgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBORVdTOiBWZXJzaW9uIDIuNC4KKworMjAwOC0xMS0wMiAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlQcmVwYXJlIGZvciBuZXh0IHJlbGVhc2UuCisJKiBORVdTOiBCcmllZmx5IG1lbnRpb24gY2hhbmdlcyBzaW5jZSAyLjNiLgorCSogUkVBRE1FOiBTYXkgR05VIG00IDEuNC42LCB3aGljaCB3ZSd2ZSBiZWVuIHJlcXVpcmluZyBpbiByZWxlYXNlCisJYW5ub3VuY2VtZW50cyBhbHJlYWR5LCBub3QgMS40LjMsIHdoaWNoIGJyZWFrcyB0aGUgYnVpbGQuCisKKzIwMDgtMTEtMDIgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJU2F5ICVsYW5ndWFnZSBpcyBleHBlcmltZW50YWwuCisJV2UncmUgdGhpbmtpbmcgb2YgZXh0ZW5kaW5nIGl0J3MgZWZmZWN0IG9uIG91dHB1dCBmaWxlIG5hbWluZy4gIFNlZSB0aGUKKwl0aHJlYWQgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwOC0xMC9tc2cwMDAwMy5odG1sPi4KKwkqIE5FV1M6IFNheSBpdCdzIGV4cGVyaW1lbnRhbC4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChEZWNsIFN1bW1hcnkpOiBTYXkgaXQncyBleHBlcmltZW50YWwsIGFuZCBzbyBkb24ndAorCXJlY29tbWVuZCBpdCBvdmVyICVza2VsZXRvbiBmb3Igbm93LgorCShCaXNvbiBPcHRpb25zKTogTGlrZXdpc2UuCisJKEMrKyBCaXNvbiBJbnRlcmZhY2UpOiBVc2UgJXNrZWxldG9uIG5vdCAlbGFuZ3VhZ2UuCisJKENhbGMrKyBQYXJzZXIpOiBVc2UgJXNrZWxldG9uIG5vdCAlbGFuZ3VhZ2UuCisJKiBzcmMvZ2V0YXJncy5jICh1c2FnZSk6IFNheSBpdCdzIGV4cGVyaW1lbnRhbC4KKworMjAwOC0xMS0wMSAgRGktYW4gSmFuICA8ZGlhbmpAZnJlZXNoZWxsLm9yZz4KKwkgICAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KKworCVN1cHBvcnQgYWxsIEphdmEgcGFyc2VyIGNsYXNzIG1vZGlmaWVycy4KKwkqIGRhdGEvamF2YS5tNCAoYjRfcGVyY2VudF9kZWZpbmVfZ2V0Myk6IE5ldy4KKwkoYjRfZmluYWxfaWYsIGI0X3N0cmljdGZwX2lmKTogTmV3LgorCSogZGF0YS9sYWxyMS5qYXZhIChmaW5hbCwgc3RyaWN0ZnAsIGV4dGVuZHMsIGltcGxlbWVudHMpOiBTdXBwb3J0LgorCSogZG9jL2Jpc29uLnRleGluZm8gKGZpbmFsLCBzdHJpY3RmcCwgZXh0ZW5kcywgaW1wbGVtZW50cyk6IEFkZAorCWRvY3VtZW50YXRpb24uCisJKiB0ZXN0cy9qYXZhLmF0IChBVF9DSEVDS19KQVZBX01JTklNQUwpOiBOZXcuCisJKEFUX0NIRUNLX0pBVkFfTUlOSU1BTF9XX0xFWEVSKTogTmV3LgorCShBVF9DSEVDS19KQVZBX0dSRVApOiBOZXcuCisJKEphdmEgcGFyc2VyIGNsYXNzIG1vZGlmaWVycyk6IE5ldyB0ZXN0LgorCShKYXZhIHBhcnNlciBjbGFzcyBleHRlbmRzIGFuZCBpbXBsZW1lbnRzKTogTmV3IHRlc3QuCisKKwlNb2RlbCBleGNlcHRpb24gcHJvcGFnYXRpb24gYmV0dGVyIHdpdGggdGhyb3dzIGFuZCBsZXhfdGhyb3dzLgorCSogZGF0YS9qYXZhLm00IChiNF9saXN0Mik6IE5ldy4KKwkodGhyb3dzKTogQ2hhbmdlIGRlZmF1bHQuCisJKiBkYXRhL2xhbHIxLmphdmEgKHl5YWN0aW9uKTogQWRkIHRocm93cy4KKwkocGFyc2UpOiBBZGQgbGV4X3Rocm93cyBpbiBhZGRpdGlvbiB0byB0aHJvd3MuCisJKiBkb2MvYmlzb24udGV4aW5mbyAodGhyb3dzLCBsZXhfdGhyb3dzKTogQWRkIGRvY3VtZW50YXRpb24uCisJKiB0ZXN0cy9qYXZhLmF0IChKYXZhIHRocm93cyBzcGVjaWZpY2F0aW9ucyk6IE5ldyB0ZXN0LgorCisJSW1wcm92ZSBkb2N1bWVudGF0aW9uIGZvciBKYXZhIHBhcnNlcnMuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoSmF2YSBQYXJzZXJzKTogQWRkIHN1YnNlY3Rpb25zLgorCURvbid0IHF1b3RlIGZpcnN0IGFyZ3VtZW50IG9mICVkZWZpbmUuCisJKEphdmEgQmlzb24gSW50ZXJmYWNlKTogRG9jdW1lbnQgb3V0cHV0IGZpbGVzLiAgTW92ZSBkb2N1bWVudGF0aW9uCisJb2YgcGFyc2VyIGNsYXNzIGFuZCBtZXJnZSBpbnRvIEphdmEgUGFyc2VyIEludGVyZmFjZS4gIERvY3VtZW50CisJZmVhdHVyZXMgdGhhdCBlcnJvciBvdXQuICBEb2N1bWVudCBkaXJlY3RpdmVzIHdpdGggbm8gZWZmZWN0LgorCU1vdmUgbm90ZSBhYm91dCBKYXZhZG9jIGhpZ2hlci4KKwkoSmF2YSBTZW1hbnRpYyBWYWx1ZXMpOiBFeHBsaWNpdGx5IG1lbnRpb24gc3R5cGUuCisJRG9jdW1lbnQgdGhhdCBnZW5lcmljIHR5cGVzIGNhbm5vdCBiZSB1c2VkLgorCShKYXZhIExvY2F0aW9uIFZhbHVlcyk6IFVzZSBAZGVmdHlwZWl2YXIuICBEb2N1bWVudCBjb25zdHJ1Y3RvcnMuCisJQ29ycmVjdCByZXR1cm4gdmFsdWUgZm9yIHRvU3RyaW5nLgorCShKYXZhIFBhcnNlciBJbnRlcmZhY2UpOiBMaXN0IHVuZG9jdW1lbnRlZCBjb25zdGFudHMvZmllbGRzLgorCU1vdmUgZG9jdW1lbnRhdGlvbiBvZiBmaWVsZHMgYWRkZWQgYnkgJXBhcnNlLXBhcmFtIGNsb3NlciB0byBsaXN0CisJb2YgbWVtYmVycy4gIERvY3VtZW50IHRoYXQgdG9rZW4gbmFtZXMgYXJlIGFkZGVkIGFzIGZpZWxkcy4KKwlEb2N1bWVudCBjb25zdHJ1Y3RvcnMgYWNjdXJhdGVseS4gIFJlbW92ZSBlcnJvciBtZXRob2QuCisJKEphdmEgU2Nhbm5lciBJbnRlcmZhY2UpOiBNb3ZlIG5vdGUgb24gJXB1cmUtcGFyc2VyIHRvIEphdmEgQmlzb24KKwlJbnRlcmZhY2UuICBEZXNjcmliZSAlY29kZSBsZXhlciBhbmQgeXlsZXggYWNjdXRhdGVseS4KKwlSZW1vdmUgZG9jdW1lbnRhdGlvbiB0aGF0IGRvZXMgbm90IG1hdGNoIHRoZSBjb2RlLgorCShKYXZhIEFjdGlvbiBGZWF0dXJlcyk6IE5ldy4KKwkoSmF2YSBEaWZmZXJlbmNlcyk6IEFkZCByZWZlcmVuY2UuICBBZGQgaXRlbSBvbiBzZW1hbnRpYyB2YWx1ZXMuCisJQWRkIG5vdGUgYWJvdXQgQHsgLi4uIEB9LiAgQ2xhcmlmeSAlJSBlcGlsb2d1ZSBwbGFjZW1lbnQuCisJKEphdmEgRGVjbGFyYXRpb25zIFN1bW1hcnkpOiBOZXcuCisKKwlGaXggSmF2YSBza2VsZXRvbi4KKwkqIGRhdGEvamF2YS5tNCAoYjRfcHJlZml4KTogQ29ycmVjdCBxdW90aW5nIGZvciBtNF9kZWZpbmVfZGVmYXVsdC4KKwkoYjRfcmVtb3ZlX2NvbW1hKTogUXVvdGUgdGVzdCBhcmd1bWVudC4KKwkoYjRfaWRlbnRpZmljYXRpb24pOiBSZW1vdmUgImJpc29uIiBmaWVsZC4KKwkqIHRlc3RzL2phdmEuYXQgKEphdmEgcGFyc2VyIGNsYXNzIGFuZCBwYWNrYWdlIG5hbWVzKTogTmV3IHRlc3QuCisJKEphdmEgJXBhcnNlLXBhcmFtIGFuZCAlbGV4LXBhcmFtKTogTmV3IHRlc3QuCisJKEphdmEgc3R5cGUsIHBvc2l0aW9uX2NsYXNzIGFuZCBsb2NhdGlvbl9jbGFzcyk6IE5ldyB0ZXN0LgorCisyMDA4LTEwLTMxICBEaS1hbiBKYW4gIDxkaWFuakBmcmVlc2hlbGwub3JnPgorCisJKiBkYXRhL2xhbHIxLmphdmU6IFVwZGF0ZSBjb3B5cmlnaHQgeWVhcnMuCisJKFlZUGFyc2VyKTogQ29ycmVjdCBuYW1lIG9mICJnZW5lcmF0ZWQgZnJvbSIgZmlsZSBpbiBKYXZhZG9jOgorCXVzZSBiNF9maWxlX25hbWUgaW5zdGVhZCBvZiBAb2ZpbGVALgorCShMb2NhdGlvbiBjb25zdHJ1Y3Rvcik6IENvcnJlY3QgSmF2YWRvYyBwYXJhbWV0ZXIgbmFtZS4KKwkoeXlsbG9jKTogQWRkIG1pc3Npbmcgb3BlbmluZyBtNCBxdW90ZSBhZnRlciBiNF9sb2NhdGlvbl9pZi4KKwlUaGlzIHJlbW92ZXMgYSBzdHJheSBbIGluIHRoZSBKYXZhZG9jIG9mIExleGVyLmdldFN0YXJ0UG9zLgorCShMZXhlci55eWVycm9yKTogRml4IGluY29ycmVjdCBtNCBhbmQgSmF2YWRvYy4KKwkoWVlQYXJzZXIgY29uc3RydWN0b3IpOiBDb3JyZWN0IEphdmFkb2MgcGFyYW1ldGVyIG5hbWUuCisKKzIwMDgtMTAtMzAgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJQWx3YXlzIHB1dCBhdXhpbGlhcnkgY29kZSBmaWxlcyBpbiB0aGUgc2FtZSBkaXIgYXMgb3RoZXIgb3V0cHV0IGZpbGVzLgorCSogc3JjL2ZpbGVzLmMgKGNvbXB1dGVfZmlsZV9uYW1lX3BhcnRzKTogV2hlbiB0aGUgdXNlciBzcGVjaWZpZXMKKwktLW91dHB1dCBidXQgbm90IC0tZmlsZS1wcmVmaXgsIGV4dHJhY3QgdGhlIGRpcmVjdG9yeSBwcmVmaXggZnJvbSB0aGUKKwlmaWxlIHByZWZpeCBub3QgZnJvbSB0aGUgZ3JhbW1hciBmaWxlIG5hbWUuICBUaGlzIGFmZmVjdHMgdGhlIGxvY2F0aW9uCisJb2YgZmlsZXMgbGlrZSBsb2NhdGlvbi5oaCBnZW5lcmF0ZWQgYnkgdGhlIEMrKyBza2VsZXRvbi4gIFRoZSBpbmNsdWRlcworCWluIHRoZSBvdGhlciBvdXRwdXQgZmlsZXMgcmVxdWlyZSB0aGlzIGZpeC4KKwkqIHRlc3RzL291dHB1dC5hdCAoQVRfQ0hFQ0tfT1VUUFVUKTogQXV0b21hdGljYWxseSBjcmVhdGUgZGlyZWN0b3JpZXMKKwlmb3IgZXhwZWN0ZWQgb3V0cHV0IGZpbGVzLgorCShPdXRwdXQgZmlsZXMpOiBBZGQgYSB0ZXN0IGZvciB0aGUgYWJvdmUuCisKKzIwMDgtMTAtMjkgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBnbnVsaWI6IFVwZGF0ZSBzdWJtb2R1bGUgdG8gSEVBRC4KKworMjAwOC0xMC0yOCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlVcGRhdGUgY29weXJpZ2h0IHllYXIuCisJKiBzcmMvZmlsZXMuYzogSGVyZS4KKworMjAwOC0xMC0yOCAgRGktYW4gSmFuICA8ZGlhbmpAZnJlZXNoZWxsLm9yZz4gICh0aW55IGNoYW5nZSkKKworCURvbid0IG92ZXJ3cml0ZSB0aGUgaW5wdXQgZmlsZS4KKwkqIHNyYy9maWxlcy5jIChvdXRwdXRfZmlsZV9uYW1lX2NoZWNrKTogRmF0YWwgZXJyb3IgaWYgdXNpbmcgaW5wdXQgZmlsZQorCWZvciBvdXRwdXQuCisJKiB0ZXN0cy9vdXRwdXQuYXQ6IChBVF9DSEVDS19DT05GTElDVElOR19PVVRQVVQpOiBBZGQgcmV0dXJuIHN0YXR1cworCWFyZ3VtZW50LgorCShDb25mbGljdGluZyBvdXRwdXQgZmlsZXMpOiBBZGQgdGVzdC4KKworMjAwOC0xMC0yOCAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlTcGFjZSBjaGFuZ2VzLgorCSogZGF0YS9sYWxyMS5jYzogRm9ybWF0dGluZyBjaGFuZ2VzLgorCisyMDA4LTEwLTI4ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCURvbid0IGRlZmluZSBkZWJ1Z2dpbmcgZnVuY3Rpb25zIHdoZW4gIVlZREVCVUcuCisJKiBkYXRhL2xhbHIxLmNjIChkZWJ1Z19zdHJlYW0sIHNldF9kZWJ1Z19zdHJlYW0pCisJKGRlYnVnX2xldmVsX3R5cGUsIGRlYnVnX2xldmVsLCBzZXRfZGVidWdfbGV2ZWwpOiBEb24ndAorCWRlY2xhcmUgdGhlbSB3aGVuIFlZREVCVUcgaXMgbm90IGRlZmluZWQuCisJVGhlIGltcGxlbWVudGF0aW9uIGFyZSBhbHJlYWR5IFlZREVCVUctYXdhcmUuCisKKzIwMDgtMTAtMjggIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJUHJlZmVyICJjb250aW51ZSIgZm9yIGVtcHR5IGxvb3AgYm9kaWVzLgorCSogZXRjL2JlbmNoLnBsLmluOiBVc2UgImNvbnRpbnVlIiBpbnN0ZWFkIG9mIHt9LgorCisyMDA4LTEwLTI4ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCVNwYWNlIGFuZCBjb21tZW50cyBjaGFuZ2VzLgorCSogZGF0YS9jKysubTQsIGRhdGEvZ2xyLmMsIGRhdGEvbGFscjEuY2M6IENvcHlyaWdodCB5ZWFyIGNoYW5nZXMuCisJKiBkYXRhL2MubTQsIGRhdGEvbGFscjEuY2M6IFNwYWNlIGNoYW5nZXMuCisKKzIwMDgtMTAtMjggIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJTWFrZSBnbnVsaWIgYSBzdWJtb2R1bGUuCisJKiBnbnVsaWI6IE5ldy4KKwkqIC5naXRtb2R1bGVzIChnbnVsaWIpOiBOZXcuCisKKzIwMDgtMTAtMTggIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJRml4IHl5ZXJyb3JfcmFuZ2UgZm9yIHVzZXItZGVmaW5lZCBsb2NhdGlvbiB0eXBlIGluIEMrKy4gIFJlcG9ydGVkIGJ5CisJR2VvcmcgU2F1dGhvZmYgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDA4LTA4L21zZzAwMDA4Lmh0bWw+LgorCSogZGF0YS9sYWxyMS5jYyAocGFyc2UpOiBDaGFuZ2UgdHlwZSBvZiB5eWVycm9yX3JhbmdlIHRvIGxvY2F0aW9uX3R5cGUuCisJKiBUSEFOS1MgKEdlb3JnIFNhdXRob2ZmKTogQWRkLgorCisyMDA4LTEwLTE4ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCVVwZGF0ZSBzZXZlcmFsIGFkbWluaXN0cmF0aXZlIGZpbGVzIG1haW5seSB0byBmYWNpbGl0YXRlIHJlbGVhc2luZy4KKwkqIEhBQ0tJTkcgKEFkbWluaXN0cml2aWEpOiBNYWtlIHRoZSBnaXQtbWVyZ2UtY2hhbmdlbG9nIG5vdGVzIG1vcmUKKwloZWxwZnVsLgorCShUZXN0IHN1aXRlKTogRG9uJ3Qgc2F5IGxhbHIxLmNjIGlzIG5vdCBleGVyY2lzZWQgaW4gdGhlIHRlc3Qgc3VpdGUuCisJKFJlbGVhc2UgUHJvY2VkdXJlKTogVXBkYXRlIGZvciBnaXQgYW5kIGFkZCBudW1lcm91cyBkZXRhaWxzIHRoYXQgd2VyZQorCXByZXZpb3VzbHkgbWlzc2luZy4KKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogUmVtb3ZlIE1ha2VmaWxlLmNmZyBhbmQgTWFrZWZpbGUubWFpbnQuCisJKiBtYWludC5tayAoYW5ub3VuY2VtZW50KTogRG9uJ3QgbGlzdCBiaXNvbiBhcyBhIGJvb3RzdHJhcCB0b29sIHNvCisJdGhhdCBhbm5vdW5jZW1lbnRzIGRvbid0IGNsYWltIHdlIGJvb3RzdHJhcHBlZCB3aXRoIHdoYXRldmVyIGJpc29uCisJaGFwcGVuZWQgdG8gYmUgaW4gUEFUSC4gIEFkZCBmbGV4IGFzIGEgYm9vdHN0cmFwIHRvb2wuCisJKiBNYWtlZmlsZS5tYWludDogUmVtb3ZlLCBwcmV2aW91c2x5IHJlcGxhY2VkIGJ5IG1haW50Lm1rLgorCSogTWFrZWZpbGUuY2ZnOiBSZW1vdmUsIGFuZCBtaWdyYXRlIHNldHRpbmdzIHRvLi4uCisJKiBjZmcubWs6IC4uLiBoZXJlIGZvciB0aGUgc2FrZSBvZiBgbWFrZSBhbm5vdW5jZW1lbnQnLgorCSogYm9vdHN0cmFwLmNvbmYgKGdudWxpYl9tb2R1bGVzKTogQWRkIGFubm91bmNlLWdlbi4KKwkqIFJFQURNRTogU2F5IEdOVSBCaXNvbiBpbnN0ZWFkIG9mIGp1c3QgQmlzb24uICBTdWdnZXN0ZWQgYnkgS2FybAorCUJlcnJ5LgorCisyMDA4LTEwLTA4ICBEaS1hbiBKYW4gIDxkaWFuakBmcmVlc2hlbGwub3JnPiAgKHRpbnkgY2hhbmdlKQorCisJU21hbGwgYnV0IGltcG9ydGFudCBidWdmaXhlcyBmb3IgdGhlIEphdmEgc2tlbGV0b24uCisJKiBkYXRhL2xhbHIxLmphdmEgKHl5ZXJyb3IpOiBDaGFuZ2UgTG9jYXRpb24gdG8gYjRfbG9jYXRpb25fdHlwZS4KKwkoeXlfc3ltYm9sX3ByaW50KTogQ2FsbCB0b1N0cmluZyBvbiB5eXZhbHVlcC4KKworMjAwOC0wOC0yOSAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlDbGFyaWZ5IFVQREFURUQgdXNlLgorCSogZG9jL2Jpc29uLnRleGluZm86IEl0IHJlZmVycyB0byB0aGUgbGFzdCBlZGl0aW9uIG9mIHRoaXMgZmlsZSwKKwlub3QgdG8gdGhlIHJlbGVhc2UgZGF0ZSBvZiBCaXNvbi4KKwlSZXBvcnRlZCBieSBKb2VsIEUuIERlbm55LgorCisyMDA4LTA4LTI5ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCSogUkVBRE1FOiBVcGRhdGUgRkFRIHBvaW50ZXIuCisJUmVwb3J0ZWQgYnkgSm9lbCBFLiBEZW5ueS4KKworMjAwOC0wOC0yNyAgRXJpYyBCbGFrZSAgPGViYjlAYnl1Lm5ldD4KKworCVJlc3luYyBtNHN1Z2FyIGZyb20gYXV0b2NvbmYuCisJKiBkYXRhL200c3VnYXIvbTRzdWdhci5tNCAobTRfZGVmbiwgbTRfcG9wZGVmLCBtNF91bmRlZmluZSkKKwkobTRfaW5pdCk6IEFkanVzdCB0byBsYXRlc3QgbTQuZ2l0IGNoYW5nZXMuCisJKG00X21hcGFsbF9zZXAsIF9tNF9saXN0X2NtcCwgbTRfdmVyc2lvbl9jb21wYXJlKTogUmVkdWNlIHNpZGUKKwllZmZlY3RzLgorCSogZGF0YS9tNHN1Z2FyL2ZvcmVhY2gubTQgKF9tNF9zaGlmdG4pOiBGaXggb2ZmLWJ5LW9uZSBidWcuCisJKF9tNF9saXN0X2NtcCk6IFJlZHVjZSBzaWRlIGVmZmVjdHMuCisKKzIwMDgtMDgtMjcgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJQ2hlY2sgeXllcnJvayBpbiBjYWxjLmF0LgorCSogdGVzdHMvY2FsYy5hdCAoY2FsYy55KTogVXNlIHl5ZXJyb2sgb24gIiggZXJyb3IgKSIuCisJKEFUX0NIRUNLX0NBTEMpOiBBZGQgYSBjaGVjayB0aGF0IGVuc3VyZXMgdGhhdCB5eWVycm9rIHdvcmtzIGFzCisJZXhwZWN0ZWQuCisKKzIwMDgtMDgtMjcgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJU3VwcG9ydCB5eWVycm9rIGluIGxhbHIxLmNjLgorCVlZQkFDS1VQIGlzIHN0aWxsIHRvIGltcG9ydCBiYWNrIGludG8gbGFscjEuY2MuCisJKiBkYXRhL2xhbHIxLmNjICh5eWVycm9yaywgeXljbGVhcmluLCBZWVJFQ09WRVJJTkcpOiBEZWZpbmUuCisKKzIwMDgtMDgtMjYgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJRm9yIG1haW50YWluZXItY2hlY2sqLCBkb24ndCByZWNvbXBpbGUgZm9yIGEgJChWRVJTSU9OKSB1cGRhdGUuCisJKiBjZmcubWs6IE5ldyBmaWxlLgorCShfaXMtZGlzdC10YXJnZXQpOiBPdmVycmlkZSB0aGUgb25lIGluIEdOVW1ha2VmaWxlLgorCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgY2ZnLm1rLgorCisyMDA4LTA4LTI2ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCVVwZGF0ZSBmb3IgcmVjZW50IGNoYW5nZSB0byBnbnVsaWIuCisJKiBzcmMvcGFyc2UtZ3JhbS55OiBEb24ndCBpbmNsdWRlIHN0cnZlcnNjbXAuaC4gIEl0IGNvbWVzIGZyb20KKwlzdHJpbmcuaCBub3cuCisKKzIwMDgtMDgtMTUgIEVyaWMgQmxha2UgIDxlYmI5QGJ5dS5uZXQ+CisKKwlSZW1haW5pbmcgbTRzdWdhciBtZXJnZSBmcm9tIGF1dG9jb25mLgorCSogZGF0YS9tNHN1Z2FyL200c3VnYXIubTQ6IENvcHkgZW50aXJlIGZpbGUgZnJvbSBhdXRvY29uZi4KKwkqIGRhdGEvbTRzdWdhci9mb3JlYWNoLm00OiBOZXcgZmlsZSwgY29waWVkIGZyb20gYXV0b2NvbmYuCisJKiBkYXRhL01ha2VmaWxlLmFtIChkaXN0X200c3VnYXJfREFUQSk6IERpc3RyaWJ1dGUgaXQuCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9za2VsZXRvbik6IFRlbGwgbTQgaG93IHRvIGZpbmQgaXQuCisKKwlQYXJ0aWFsIG00c3VnYXIgbWVyZ2UgZnJvbSBhdXRvY29uZjogbTRfbWFwLgorCSogZGF0YS9tNHN1Z2FyL200c3VnYXIubTQgKG00X2ZzdCk6IERlbGV0ZS4KKwkobTRfbWFwLCBtNF9tYXBfc2VwLCBfbTRfbWFwKTogUmV3cml0ZSBtb3JlIGVmZmljaWVudGx5LgorCShtNF9hcHBseSwgX200X2FwcGx5LCBtNF9tYXBhbGwsIG00X21hcGFsbF9zZXApOiBOZXcgbWFjcm9zLgorCSogZGF0YS9qYXZhLm00IChiNF90b2tlbl9lbnVtcyk6IFVzZSBtb3JlIGVmZmljaWVudCBzaG9ydC1jaXJjdWl0CisJZm9yIGVtcHR5IGxpc3QuCisJKiBkYXRhL2MubTQgKGI0X3Rva2VuX2RlZmluZXMsIGI0X3Rva2VuX2VudW1zLCBiNF9jX2Fuc2lfZm9ybWFscyk6CisJTGlrZXdpc2UuCisJKGI0X3BhcnNlX3BhcmFtX2Zvcik6IEF2b2lkIG00X2ZzdCwgbm93IHRoYXQgYXV0b2NvbmYgbm8gbG9uZ2VyCisJZGVjbGFyZXMgaXQuCisKKzIwMDgtMDgtMDcgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJS2VlcCAudmVyc2lvbiBhbmQgUEFDS0FHRV9WRVJTSU9OIGluIHN5bmMuCisJKiBNYWtlZmlsZS5hbSAoJCh0b3Bfc3JjZGlyKS8udmVyc2lvbik6IERlY2xhcmUgY29uZmlndXJlIGFzIGEKKwlkZXBlbmRlbmN5LCBhbmQgYWRkIGNvbW1lbnRzIGp1c3RpZnlpbmcgdGhpcyBpbiBtb3JlIGRldGFpbC4gIERpc2N1c3NlZAorCXN0YXJ0aW5nIGF0CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDgtMDcvbXNnMDAwMjIuaHRtbD4uCisKKzIwMDgtMDgtMDYgIEVyaWMgQmxha2UgIDxlYmI5QGJ5dS5uZXQ+CisKKwlQYXJ0aWFsIG00c3VnYXIgbWVyZ2UgZnJvbSBhdXRvY29uZjogbTRfc2hpZnRuLgorCSogZGF0YS9tNHN1Z2FyL200c3VnYXIubTQgKG00X3NoaWZ0bik6IEZhc3RlciBpbXBsZW1lbnRhdGlvbi4KKwkobTRfc2hpZnQyLCBtNF9zaGlmdDMpOiBOZXcgbWFjcm9zLgorCShtNF9jYXNlLCBtNF9ibWF0Y2gsIG00X2JwYXRzdWJzdHMsIG00X2pvaW4pOiBBZGp1c3QgY2xpZW50cy4KKwkqIGRhdGEvYy5tNCAoYjRfY19mdW5jdGlvbl9kZWYsIGI0X2NfYW5zaV9mdW5jdGlvbl9kZWYpCisJKGI0X2NfYW5zaV9mdW5jdGlvbl9kZWNsLCBiNF9jX2Z1bmN0aW9uX2NhbGwpOiBMaWtld2lzZS4KKwkqIGRhdGEvamF2YS5tNCAoYjRfcmVtb3ZlX2NvbW1hKTogTGlrZXdpc2UuCisKKwlQYXJ0aWFsIG00c3VnYXIgbWVyZ2UgZnJvbSBhdXRvY29uZjogbTRfd3JhcCB2cy4gbTQgMS42LgorCSogZGF0YS9tNHN1Z2FyL200c3VnYXIubTQgKG00X3VucXVvdGUsIG00X3dyYXBfbGlmbyk6IE5ldyBtYWNyb3MuCisJKG00X3dyYXApOiBHdWFyYW50ZWUgRklGTyBvcmRlciwgaW4gc3BpdGUgb2YgbTQgMS42LgorCShtNF9pbml0KTogQ29uc29saWRhdGUgd3JhcHBlZCB0ZXh0IGludG8gc2luZ2xlIG00X3dyYXAuCisJKiBkYXRhL2Jpc29uLm00IChiNF9jaGVja191c2VyX25hbWVzX3dyYXApOiBTdGljayB3aXRoIExJRk8gb3JkZXIKKwlpbiB3cmFwcGVkIHRleHQuCisKKzIwMDgtMDgtMDUgIEVyaWMgQmxha2UgIDxlYmI5QGJ5dS5uZXQ+CisKKwlQYXJ0aWFsIG00c3VnYXIgbWVyZ2UgZnJvbSBhdXRvY29uZjogYnVpbHRpbnMsIHZlcnNpb24ubTQuCisJKiBkYXRhL200c3VnYXIvbTRzdWdhci5tNCAoY2hhbmdld29yZCk6IE51a2UuCisJKG00X3ByZXBlbmQpOiBSZW1vdmUsIGFzIGl0IGlzIHVudXNlZCBhbmQgaW5oZXJlbnRseSBxdWFkcmF0aWMsCisJd2hlcmVhcyBtNF9hcHBlbmQgaXMgbGluZWFyIGluIG5ld2VyIG00LgorCShtNF9ta3N0ZW1wKTogTmV3IGJ1aWx0aW4uCisJKG00X3N5bWJvbHMpOiBNYWtlIHJlbmFtZSBjb25kaXRpb25hbC4KKwkobTRfdmVyc2lvbl9wcmVyZXEpOiBFbnN1cmUgZmF0YWwgZXJyb3IgaWYgdXNlZCBpbiBiaXNvbiwgd2hpY2gKKwlpbnRlbnRpb25hbGx5IGxhY2tzIHZlcnNpb24ubTQuCisKKwlGaXggY29tbWVudHMgaW4gbTRzdWdhci4KKwkqIGRhdGEvbTRzdWdhci9tNHN1Z2FyLm00OiBDb21tZW50IGNoYW5nZXMsIGJvcnJvd2VkIGZyb20gYXV0b2NvbmYuCisKKzIwMDgtMDgtMDIgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJVXBkYXRlIGZvciByZWNlbnQgLmdpdGlnbm9yZSBmaXggaW4gR251bGliLgorCSogYm9vdHN0cmFwOiBCYWNrIG91dCAyMDA4LTA3LTE4IGhhY2sgbm93IHRoYXQgZ251bGliLXRvb2wgY3JlYXRlcworCWFuY2hvcmVkIC5naXRpZ25vcmUgZW50cmllcy4KKworMjAwOC0wOC0wMiAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlTZXQgZ251IG9yIGduaXRzIHN0cmljdG5lc3MuCisJKiBjb25maWd1cmUuYWMgKEFNX0lOSVRfQVVUT01BS0UpOiBTZXQgZ251IHN0cmljdG5lc3MgZHVyaW5nCisJZGV2ZWxvcG1lbnQgYW5kIGduaXRzIHN0cmljdG5lc3MgZm9yIHJlbGVhc2VzLiAgQmFzZWQgb24gRXJpYyBCbGFrZSdzCisJc3VnZ2VzdGlvbiBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDgtMDcvbXNnMDAwMTkuaHRtbD4uCisKKzIwMDgtMDctMzEgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisKKwkqIE5FV1M6IENsYXJpZnkgZG9jdW1lbnRhdGlvbiBvZiAlbGFuZ3VhZ2UuCisKKzIwMDgtMDctMzEgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisKKwlTdXBwb3J0IHVzYWdlIG9mIGdpdC1tZXJnZS1jaGFuZ2Vsb2cuCisJKiAuZ2l0YXR0cmlidXRlczogTmV3LgorCSogSEFDS0lORzogRG9jdW1lbnQgdXNhZ2Ugb2YgZ2l0LW1lcmdlLWNoYW5nZWxvZy4KKwkqIGJvb3RzdHJhcDogSW5zdGFsbCBnaXQtbWVyZ2UtY2hhbmdlbG9nIGVudHJpZXMgaW4gLmdpdC9jb25maWcKKwlpZiBhcHByb3ByaWF0ZS4KKworMjAwOC0wNy0yNyAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlSZW1vdmUgcmVtYWluaW5nIGRlcGVuZGVuY2Ugb24gQ1ZTIElkIGtleXdvcmQuCisJKiBDaGFuZ2VMb2c6IEZvciB0aGUgc2FrZSBvZiBwZW9wbGUgc3RpbGwgdXNpbmcgQ1ZTLCBkb24ndCB1c2UgZG9sbGFycworCXdoZW4gbWVudGlvbmluZyBJZC4KKwkqIGRhdGEveHNsdC9iaXNvbi54c2w6IFJlbW92ZSBJZCBmcm9tIGhlYWRlciBjb21tZW50cywgd2hlcmUgaXQgd2FzCisJdW51c3VhbCBhbnl3YXkuCisJKiBkYXRhL3hzbHQveG1sMmRvdC54c2w6IExpa2V3aXNlLgorCSogZGF0YS94c2x0L3htbDJ0ZXh0LnhzbDogTGlrZXdpc2UuCisJKiBkYXRhL3hzbHQveG1sMnhodG1sLnhzbDogTGlrZXdpc2UuCisJKiBkb2MvRG94eWZpbGUuaW4gKFBST0pFQ1RfTlVNQkVSKTogRG9uJ3QgdXNlIElELgorCSogZG9jL01ha2VmaWxlLmFtIChuZXV0cmFsaXplKTogUmVtb3ZlLCBubyBsb25nZXIgbmVlZGVkLgorCSgueC4xKTogRG9uJ3QgdXNlIG5ldXRyYWxpemUuCisJKGVkaXQpOiBEb24ndCBzdWJzdGl0dXRlIGZvciBJRC4KKwkoRG94eWZpbGUpOiBEb24ndCBkZWZpbmUgSWQsIGFuZCB0aHVzIGRvbid0IGRlcGVuZCBvbiBDaGFuZ2VMb2cuCisKKzIwMDgtMDctMjcgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJRml4IGRlcGVuZGVuY2Ugb24gY29tcHV0ZWQgY29uZmlndXJlIHZhcmlhYmxlcy4KKwkqIGRvYy9NYWtlZmlsZS5hbSAoY29tbW9uX2RlcCk6IERlcGVuZCBvbiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSBub3QKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYyBzbyB0aGF0IGNoYW5nZXMgdG8gY29tcHV0ZWQgdmFyaWFibGVzLCBzdWNoCisJYXMgUEFDS0FHRV9WRVJTSU9OLCBhcmUgc2Vlbi4KKwkqIHRlc3RzL01ha2VmaWxlLmFtICgkKHNyY2RpcikvcGFja2FnZS5tNCk6IExpa2V3aXNlLgorCisyMDA4LTA3LTIwICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCVVwZGF0ZSBjb3B5cmlnaHQgZGF0ZXMgZm9yIHJlY2VudCBjaGFuZ2VzLgorCSogTWFrZWZpbGUuYW06IEhlcmUuCisJKiBzcmMvTWFrZWZpbGUuYW06IEhlcmUuCisJKiBzcmMvcmVkdWNlLmM6IEhlcmUuCisJKiB0ZXN0cy9yZWR1Y2UuYXQ6IEhlcmUuCisKKzIwMDgtMDctMTggIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJVXNlIGdpdC12ZXJzaW9uLWdlbiBmb3IgdmVyc2lvbiBuYW1lcyBiZXR3ZWVuIHJlbGVhc2VzLgorCSogLmN2c2lnbm9yZSAoLnRhcmJhbGwtdmVyc2lvbiwgR05VbWFrZWZpbGUsICp+KTogQWRkLgorCSogLmdpdGlnbm9yZSAoLy50YXJiYWxsLXZlcnNpb24sIC9HTlVtYWtlZmlsZSwgLyp+KTogQWRkLgorCSogLnByZXYtdmVyc2lvbjogTmV3LgorCSogLnZlcnNpb24uaW46IFJlbW92ZS4KKwkqIENoYW5nZUxvZzogUmVtb3ZlIHRoZSBJZCBwcmV2aW91c2x5IHVzZWQgZm9yIGNhcHR1cmluZyB0aGUgQ1ZTCisJcmV2aXNpb24uCisJKiBHTlVtYWtlZmlsZTogUmVtb3ZlLCBub3cgY29waWVkIGZyb20gR251bGliLgorCSogTWFrZWZpbGUuYW06IEFkZCBjb2RlIHN1Z2dlc3RlZCBieSBjb21tZW50cyBpbgorCWJ1aWxkLWF1eC9naXQtdmVyc2lvbi1nZW4uCisJKEVYVFJBX0RJU1QpOiBSZW1vdmUgR05VbWFrZWZpbGUsIGhhbmRsZWQgYnkgR251bGliLiAgQWRkIG1haW50Lm1rLAorCS5wcmV2LXZlcnNpb24sIGFuZCAudmVyc2lvbi4KKwkqIE5FV1MgKDIuM2IrKTogUmVuYW1lIHRvLi4uCisJKD8uPyk6IC4uLiB0aGlzIGJlY2F1c2Ugd2UncmUgZHJvcHBpbmcgdGhlICIrIiB2ZXJzaW9uIG5hbWluZyBzY2hlbWUsCisJYnV0LCBpbiBnZW5lcmFsLCB3ZSBzdGlsbCBjYW4ndCBiZSBzdXJlIG9mIG91ciBuZXh0IHJlbGVhc2UgbmFtZS4KKwkqIGJvb3RzdHJhcDogQWRkIGEgcXVpY2sgaGFjayB0byByZW1vdmUgZnJvbSAuZ2l0aWdub3JlIHRoZQorCUdOVW1ha2VmaWxlIGVudHJ5IHRoYXQgZ251bGliIGFkZHMuICBXZSBhbHJlYWR5IGhhdmUgYSAvR05VbWFrZWZpbGUKKwllbnRyeS4gIFRoaXMgc2hvdWxkIHJlYWxseSBiZSBmaXhlZCBpbiBnbnVsaWIgaW5zdGVhZC4KKwkqIGJvb3RzdHJhcC5jb25mIChnbnVsaWJfbW9kdWxlcyk6IEFkZCBnbnVtYWtlZmlsZS4KKwkqIGNvbmZpZ3VyZS5hYyAoQUNfSU5JVCk6IFNldCB2ZXJzaW9uIG5hbWUgYnkgaW52b2tpbmcKKwlidWlsZC1hdXgvZ2l0LXZlcnNpb24tZ2VuLgorCShBQ19DT05GSUdfRklMRVMpOiBSZW1vdmUgLnZlcnNpb24sIG5vdyBnZW5lcmF0ZWQgYnkKKwlidWlsZC1hdXgvZ2l0LXZlcnNpb24tZ2VuLgorCSogbWFpbnQubWs6IE5ldywgY29waWVkIGZyb20gY29yZXV0aWxzLgorCSogZG9jLy5jdnNpZ25vcmUgKGJpc29uLjEpOiBBZGQuCisJKiBkb2MvLmdpdGlnbm9yZSAoL2Jpc29uLjEpOiBBZGQuCisJKiBkb2MvYmlzb24uMTogUmVtb3ZlLCBnZW5lcmF0ZWQuCisJKiBzcmMvLmN2c2lnbm9yZSAocmV2aXNpb24uYyk6IFJlbW92ZS4KKwkqIHNyYy8uZ2l0aWdub3JlICgvcmV2aXNpb24uYyk6IFJlbW92ZS4KKwkqIHNyYy9NYWtlZmlsZS5hbSAoYmlzb25fU09VUkNFUyk6IFJlbW92ZSByZXZpc2lvbi5jIGFuZCByZXZpc2lvbi5oLgorCShCVUlMVF9TT1VSQ0VTKTogUmVtb3ZlIHJldmlzaW9uLmMuCisJKHJldmlzaW9uLmMpOiBSZW1vdmUuCisJKiBzcmMvZ2V0YXJncy5jICh2ZXJzaW9uKTogRG9uJ3QgcHJpbnQgcmV2aXNpb24gYWZ0ZXIgdGhlIFZFUlNJT04uCisJKiBzcmMvcmV2aXNpb24uaDogUmVtb3ZlLgorCisyMDA4LTA3LTE2ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUZpeCB1bnRyYW5zbGF0YWJsZSBjb21wb3NpdGlvbiBvZiBzZW50ZW5jZXMuICBSZXBvcnRlZCBieSBHb3JhbgorCVVkZGVib3JnIGF0CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwOC0wNi9tc2cwMDAwMC5odG1sPi4KKwkqIFRIQU5LUyAoR29yYW4gVWRkZWJvcmcpOiBBZGQuCisJKiBzcmMvcmVkdWNlLmMgKHJlZHVjZV9wcmludCk6IFJlcG9ydCB0aGUgbnVtYmVyIG9mIG5vbnRlcm1pbmFscyBhbmQKKwlydWxlcyB1c2VsZXNzIGluIHRoZSBncmFtbWFyIGluIHNlcGFyYXRlIHNlbnRlbmNlcy4KKwkqIHRlc3RzL3JlZHVjZS5hdCAoVXNlbGVzcyBSdWxlcyk6IFVwZGF0ZSBvdXRwdXQuCisJKFJlZHVjZWQgQXV0b21hdG9uKTogTGlrZXdpc2UuCisJKFVuZGVyaXZhYmxlIFJ1bGVzKTogTGlrZXdpc2UuCisJKEVtcHR5IExhbmd1YWdlKTogTGlrZXdpc2UuCisKKzIwMDgtMDctMTUgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJRml4IHNvbWUgLmdpdGlnbm9yZSBhbmQgLmN2c2lnbm9yZSBwcm9ibGVtcy4KKwkqIGJvb3RzdHJhcCAoaW5zZXJ0X3NvcnRlZF9pZl9hYnNlbnQpOiBSZXBsYWNlIGFsbCB1c2VzIHdpdGguLi4KKwkoaW5zZXJ0X3ZjX2lnbm9yZSk6IC4uLiB0aGlzIG5ldyBmdW5jdGlvbiwgd2hpY2ggcHJlcGVuZHMgYC8nIHRvIGFsbAorCS5naXRpZ25vcmUgZW50cmllcyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIGluc2VydF9zb3J0ZWRfaWZfYWJzZW50LgorCSogYm9vdHN0cmFwLmNvbmYgKHZjX2lnbm9yZSk6IFNldCB0byAnLmN2c2lnbm9yZSAuZ2l0aWdub3JlJyBzbyB0aGF0CisJLmN2c2lnbm9yZSBmaWxlcyBhcmUgbWFpbnRhaW5lZCBldmVuIHRob3VnaCBCaXNvbiBkZXZlbG9wZXJzIHJ1bgorCWJvb3RzdHJhcCB3aGlsZSB1c2luZyBHaXQuCisJKiAuY3ZzaWdub3JlICgqLnBhdGNoICoubG9nIGxvZyBwYXRjaGVzIGFwcGxpZWQpOiBSZW1vdmUsIGFwcGFyZW50bHkKKwl1bm5lZWRlZCBieSBCaXNvbi4KKwkoZ251bGliKTogQWRkLgorCSogLmdpdGlnbm9yZSAoLyoucGF0Y2ggKi5sb2cgbG9nIHBhdGNoZXMgYXBwbGllZCk6IFJlbW92ZSwgYnJva2VuIGFuZAorCXVubmVlZGVkLiAgUmVwb3J0ZWQgYnkgRXJpYyBCbGFrZS4KKwkqIGxpYi8uZ2l0aWdub3JlICgvKn4pOiBBZGQuCisJKiBwby8uY3ZzaWdub3JlLCBydW50aW1lLXBvLy5jdnNpZ25vcmU6IFN5bmMgd2l0aCAuZ2l0aWdub3JlLgorCSogZXhhbXBsZXMvY2FsYysrLy5naXRpZ25vcmUgKC9jYWxjKysuZXhlKTogQWRkLiAgUmVwb3J0ZWQgYnkgRXJpYworCUJsYWtlLgorCSogc3JjLy5naXRpZ25vcmUgKC9iaXNvbi5leGUpOiBBZGQuICBSZXBvcnRlZCBieSBFcmljIEJsYWtlLgorCisyMDA4LTA3LTE1ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUltcHJvdmUgZm9yd2FyZC1jb21wYXRpYmlsaXR5IHdpdGggR05VIE00LiAgUmVwb3J0ZWQgYnkgRXJpYyBCbGFrZSBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDgtMDcvbXNnMDAwMDAuaHRtbD4uCisJKiBib290c3RyYXAuY29uZiAoZ251bGliX21vZHVsZXMpOiBBZGQgdW5zZXRlbnYuCisJKiBsaWIvLmdpdGlnbm9yZSwgbGliLy5jdnNpZ25vcmUgKC91bnNldGVudi5jKTogQWRkLgorCSogbTQvLmdpdGlnbm9yZSwgbTQvLmN2c2lnbm9yZSAoL2Vudmlyb24ubTQpOiBBZGQuCisJKC9zZXRlbnYubTQpOiBBZGQuCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9za2VsZXRvbik6IEZvciB0aGUgbTQgaW52b2NhdGlvbiwgcGFzcyAtZFYgYXMKKwl0aGUgZmlyc3QgYXJndW1lbnQgYmVjYXVzZSBpdCBtYXkgYmVjb21lIHBvc2l0aW9uLWRlcGVuZGVudCwgYW5kIHVuc2V0CisJUE9TSVhMWV9DT1JSRUNUIHNvIEJpc29uJ3Mgc2tlbGV0b25zIGhhdmUgYWNjZXNzIHRvIEdOVSBNNCBleHRlbnNpb25zLgorCUFkZCBjb21tZW50cyBleHBsYWluaW5nIHRoZXNlIGlzc3VlcyBpbiBtb3JlIGRldGFpbC4KKworMjAwOC0wNy0xNCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlBZGQgLmdpdGlnbm9yZSBldmVyeXdoZXJlIGJhc2VkIG9uIC5jdnNpZ25vcmUuCisJKiAuZ2l0aWdub3JlOiBOZXcuCisJKiBidWlsZC1hdXgvLmdpdGlnbm9yZTogTmV3LgorCSogZGF0YS8uZ2l0aWdub3JlOiBOZXcuCisJKiBkb2MvLmdpdGlnbm9yZTogTmV3LgorCSogZXRjLy5naXRpZ25vcmU6IE5ldy4KKwkqIGV4YW1wbGVzLy5naXRpZ25vcmU6IE5ldy4KKwkqIGV4YW1wbGVzL2NhbGMrKy8uZ2l0aWdub3JlOiBOZXcuCisJKiBsaWIvLmdpdGlnbm9yZTogTmV3LgorCSogbTQvLmdpdGlnbm9yZTogTmV3LgorCSogcG8vLmdpdGlnbm9yZTogTmV3LgorCSogcnVudGltZS1wby8uZ2l0aWdub3JlOiBOZXcuCisJKiBzcmMvLmdpdGlnbm9yZTogTmV3LgorCSogdGVzdHMvLmdpdGlnbm9yZTogTmV3LgorCisyMDA4LTA1LTI3ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogTkVXUyAoMi4zYispOiBOZXcgc2VjdGlvbiwgZW1wdHkgZm9yIG5vdy4KKwkqIGNvbmZpZ3VyZS5hYyAoQUNfSU5JVCk6IDIuM2IgLT4gMi4zYisuCisKKzIwMDgtMDUtMjcgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBORVdTICgyLjNiKTogVXBkYXRlIHJlbGVhc2UgZGF0ZSBzaW5jZSB0aGVyZSBoYXMgYmVlbiBhIGRlbGF5IGluCisJZ2V0dGluZyB0aGUgYW5ub3VuY2VtZW50cyBhbmQgdGFyYmFsbHMgb3V0LgorCisyMDA4LTA1LTIzICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogTkVXUzogVmVyc2lvbiAyLjNiLgorCSogY29uZmlndXJlLmFjIChBQ19JTklUKTogTGlrZXdpc2UuCisJKFBBQ0tBR0VfQ09QWVJJR0hUX1lFQVIpOiBVcGRhdGUgdG8gMjAwOC4KKworMjAwOC0wNS0yMyAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIEhBQ0tJTkc6IERvbid0IHNheSBkb24ndCBtZW50aW9uIEhBQ0tJTkcgaW4gdGhlIENoYW5nZUxvZy4gIFdlJ3ZlCisJYmVlbiBkb2luZyBpdCBmb3IgeWVhcnMuCisJKFRlc3Qgc3VpdGUpOiBNZW50aW9uIG1haW50YWluZXItcHVzaC1jaGVjayBhbmQgbWFpbnRhaW5lci14bWwtY2hlY2suCisJKFJlbGVhc2UgUHJvY2VkdXJlKTogQWRkIEZJWE1FIGFib3V0IG1ha2UgYWxwaGEgYmVpbmcgdW5tYWludGFpbmVkLgorCisyMDA4LTA1LTEzICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogZGF0YS95YWNjLmM6IFJlZm9ybWF0IG00IGEgbGl0dGxlIGZvciByZWFkYWJpbGl0eS4KKwkqIHNyYy9sYWxyLmMgKGJ1aWxkX3JlbGF0aW9ucyk6IENvcnJlY3QgY29tbWVudC4KKworMjAwOC0wNS0xMiAgSnVhbiBNYW51ZWwgR3VlcnJlcm8gIDxqdWFuLmd1ZXJyZXJvQGdteC5kZT4KKworCURKR1BQIHNwZWNpZmljIGlzc3VlLgorCSogZGpncHAvY29uZmlnLnNlZDogRml4ZXMgcmVxdWlyZWQgdG8gcnVuIGNvbmZpZ3VyZSBzY3JpcHRzIGdlbmVyYXRlZAorCWJ5IGF1dG9jb25mIDIuNjIuCisKKzIwMDgtMDUtMDcgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBIQUNLSU5HIChSZWxlYXNlIFByb2NlZHVyZSk6IHRyYW5zbGF0aW9uQGlyby51bW9udHJlYWwuY2EgaXMgbm93CisJY29vcmRpbmF0b3JAdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy4KKworMjAwOC0wNS0wNiAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIFRIQU5LUzogQWRkIEVyaWMgQmxha2UuCisKKzIwMDgtMDQtMjMgIEVyaWMgQmxha2UgIDxlYmI5QGJ5dS5uZXQ+CisKKwlSZXZlcnQgcHJpb3IgcGF0Y2gsIGJ5IHdvcmtpbmcgYXJvdW5kIGF1dG9jb25mIHJlZ3Jlc3Npb24uCisJKiB0ZXN0cy9vdXRwdXQuYXQgKG00X2V4cGFuZCk6IEFkZCB3b3JrYXJvdW5kIGZvciBhdXRvY29uZiAyLjYyLgorCSgiT3V0cHV0IGZpbGUgbmFtZTogKCIpOiBVbmNvbW1lbnQgdGVzdC4KKwkoIk91dHB1dCBmaWxlIG5hbWU6ICkiKTogTGlrZXdpc2UuCisJQmFzZWQgb24gYW4gaWRlYSBmcm9tIE5vYWggTWlzY2guCisKKzIwMDgtMDQtMjEgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJV29yay1hcm91bmQgYW4gQXV0b2NvbmYgMi42MiBBVF9TRVRVUCBidWcgdGhhdCB3YXMgbm90IHByZXNlbnQgaW4KKwkyLjYxLiAgUmVwb3J0ZWQgYnkgSnVhbiBNYW51ZWwgR3VlcnJlcm8gYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDA4LTA0L21zZzAwMDExLmh0bWw+LgorCSogdGVzdHMvb3V0cHV0LmF0ICgiT3V0cHV0IGZpbGUgbmFtZTogKCIpOiBDb21tZW50IG91dCB0ZXN0IGNhc2UgZm9yCisJbm93LgorCSgiT3V0cHV0IGZpbGUgbmFtZTogKSIpOiBMaWtld2lzZS4KKworMjAwOC0wNC0yMSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIEdOVW1ha2VmaWxlOiBVcGRhdGUgZ2l0LXZlcnNpb24tZ2VuIGludm9jYXRpb24gc28gbWFrZSBkaXN0CisJc3VjY2VlZHMuCisKKzIwMDgtMDQtMjEgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJVXBkYXRlIHRvIHRoZSBjdXJyZW50IGdudWxpYiBDVlMgcmVwb3NpdG9yeSwgYW5kIGZpeCB0cmlncmFwaCBoYW5kbGluZworCWluIEJpc29uLgorCSogYm9vdHN0cmFwOiBVcGRhdGUgZ251bGliIENWUyByZXBvc2l0b3J5IFVSTC4KKwkoc3ltbGlua190b19kaXIpOiBFbmNhcHN1bGF0ZSB0aGUgY29kZSB0aGF0IGd1YXJhbnRlZXMgdGhlIGRlc3RpbmF0aW9uCisJZGlyZWN0b3J5IGV4aXN0cyBpbnRvLi4uCisJKGNoZWNrX2RzdF9kaXIpOiAuLi4gdGhpcyBuZXcgZnVuY3Rpb24sIGFuZC4uLgorCShjcF9tYXJrX2FzX2dlbmVyYXRlZCk6IC4uLiByZXVzZSBpdCBoZXJlIHNvIHRoYXQgYm9vdHN0cmFwIGRvZXNuJ3QKKwlmYWlsIHdoZW4gY29weWluZyBmaWxlcyBpbnRvIGxpYi91bml3aWR0aC8uCisJKiBzcmMvb3V0cHV0LmMgKHByZXBhcmVfc3ltYm9scyk6IFdoZW4gd3JpdGluZyB5eXRuYW1lIG11c2NsZXMsIHdoZXJlCisJc3ltYm9sIG5hbWVzIHdpbGwgYmUgZW5jb2RlZCBpbiBDLXN0cmluZyBsaXRlcmFscywgdGVsbCBxdW90ZWFyZyB0bworCWVzY2FwZSB0cmlncmFwaHMuICBUaGlzIHVzZWQgdG8gYmUgdGhlIGRlZmF1bHQgaW4gZ251bGliLgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoVG9rZW4gZGVmaW5pdGlvbnMpOiBCZWNhdXNlIG9mIHRoZSBjaGFuZ2UgaW4KKwlnbnVsaWIncyBxdW90ZWFyZyBiZWhhdmlvciwgc3RyaW5nX2FzX2lkIGluIHBhcnNlLWdyYW0ueSBubyBsb25nZXIKKwllc2NhcGVzIHRyaWdyYXBocyBpbiBzeW1ib2wgbmFtZXMuICBUaHVzLCB5eXRuYW1lIG5vIGxvbmdlciBoYXMKKwl0cmlncmFwaHMgdW5uZWNlc3NhcmlseSBkb3VibHkgZXNjYXBlZC4gIFVwZGF0ZSB0ZXN0IGNhc2Ugb3V0cHV0LgorCUV4dGVuZCB0ZXN0IGNhc2UgdG8gYmUgc3VyZSBCaXNvbidzIG93biBlcnJvciBtZXNzYWdlcyB3aWxsIG5vIGxvbmdlcgorCWhhdmUgdHJpZ3JhcGhzIGluIHN5bWJvbCBuYW1lcyB1bm5lY2Vzc2FyaWx5IGVzY2FwZWQgb25jZS4KKworMjAwOC0wNC0yMCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlGaXggbWFrZSBkaXN0IGluZmluaXRlIGxvb3AgcmVwb3J0ZWQgYnkgSnVhbiBNYW51ZWwgR3VlcnJlcm8gYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDA4LTAxL21zZzAwMDA5Lmh0bWw+LgorCSogLmN2c2lnbm9yZTogQWRkIC52ZXJzaW9uLgorCSogLnZlcnNpb24uaW46IE5ldy4KKwkqIGJvb3RzdHJhcC5jb25mIChnbnVsaWJfbW9kdWxlcyk6IEFkZCBnaXQtdmVyc2lvbi1nZW4uCisJKiBjb25maWd1cmUuYWMgKEFDX0NPTkZJR19GSUxFUyk6IEFkZCAudmVyc2lvbi4KKwkqIGJ1aWxkLWF1eC8uY3ZzaWdub3JlOiBBZGQgZ2l0LXZlcnNpb24tZ2VuLgorCisyMDA4LTAzLTA4ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogTkVXUyAoMi4zYSspOiBNZW50aW9uIHRoYXQgLWcgbm93IHRha2VzIGFuIGFyZ3VtZW50LgorCSogZG9jL2Jpc29uLnRleGluZm8gKEJpc29uIE9wdGlvbnMpOiBSZXdvcmQgLVcgZW50cnkgYSBsaXR0bGUgZm9yCisJY29uc2lzdGVuY3kuICBVcGRhdGUgdGhlIC1nIGFuZCAteCBlbnRyaWVzIG5vdyB0aGF0IHRoZXkgdGFrZQorCWFyZ3VtZW50cy4gIFVzZSBicmFja2V0cyB0byBpbmRpY2F0ZSBvcHRpb25hbCBhcmd1bWVudHMuCisJKiBzcmMvZ2V0YXJncy5jICh1c2FnZSk6IEV4cGxhaW4gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFyZ3VtZW50cyBvZgorCWxvbmcgYW5kIHNob3J0IG9wdGlvbnMgbW9yZSBjb21wbGV0ZWx5LiAgRG9jdW1lbnQgLS1kZWZpbmVzIGFuZCAtZAorCXNlcGFyYXRlbHkgc2luY2UgdGhlIGZvcm1lciB0YWtlcyBhbiBhcmd1bWVudCBidXQsIGZvciBQT1NJWCBZYWNjLCB0aGUKKwlsYXR0ZXIgZG9lcyBub3QuCisJKHNob3J0X29wdGlvbnMpOiBMZXQgLVcgdGFrZSBhbiBvcHRpb25hbCBhcmd1bWVudCBsaWtlIC0td2FybmluZ3MuCisJKGdldGFyZ3MpOiBTb3J0IGNhc2VzLgorCisyMDA4LTAyLTI4ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCSogZG9jL2Jpc29uLnRleGluZm86IEZpeCBhIGZldyB0eXBvcy4KKworMjAwOC0wMi0yOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChCaXNvbiBPcHRpb25zKTogRG9jdW1lbnQgLVcuCisJQmFzZWQgb24gSm9lbCBFLiBEZW5ueSdzIE5FV1MgZW50cnksIGFuZCBBdXRvbWFrZSdzIGRvY3VtZW50YXRpb24uCisKKzIwMDgtMDItMjggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvZ2V0YXJncy5jIChzaG9ydF9vcHRpb25zKTogU3BsaXQgYW5kIHNvcnQgZm9yIHJlYWRhYmlsaXR5LgorCS1nIGFuZCAteCB0YWtlIG9wdGlvbmFsIGFyZ3VtZW50cywganVzdCBsaWtlIHRoZWlyIGxvbmcgb3B0aW9ucy4KKwkqIGJ1aWxkLWF1eC9jcm9zcy1vcHRpb25zLnBsOiBVc2UgL3ggdG8gbWFrZSB0aGUgcmVnZXhwIGVhc2llciB0bworCXVuZGVyc3RhbmQuCisJRml4IHRoZSBoYW5kbGluZyBvZiAkb3B0IHdoaWNoIHJlc3VsdGVkIGluIGFsbCB0aGUgYXJndW1lbnQgdG8gYmUKKwljb25zaWRlcmVkIGFzIG9wdGlvbmFsLgorCisyMDA4LTAyLTIyICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogTkVXUyAoMi4zYSspOiBEb24ndCBzYXkgJWxhbmd1YWdlIGlzIGV4cGVyaW1lbnRhbC4gIE1lbnRpb24gSmF2YSBhbmQKKwlzYXkgaXRzIGludGVyZmFjZSBpcyBleHBlcmltZW50YWwuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoRGVjbCBTdW1tYXJ5KTogSW4gdGhlICVsYW5ndWFnZSBlbnRyeSwgbWVudGlvbgorCUphdmEuCisJKEJpc29uIE9wdGlvbnMpOiBJbiB0aGUgLUwgYW5kIC0tbGFuZ3VhZ2UgZW50cnksIG1lbnRpb24gSmF2YS4KKwkoSmF2YSBCaXNvbiBJbnRlcmZhY2UpOiBTYXkgdGhlIGludGVyZmFjZSBpcyBleHBlcmltZW50YWwuCisJKiBzcmMvZ2V0YXJncy5jICh1c2FnZSk6IE1lbnRpb24gLUwgYW5kIC0tbGFuZ3VhZ2UuCisKKwkqIE5FV1MgKDIuM2ErKTogU2F5IHRoZSBwdXNoIHBhcnNpbmcgaW50ZXJmYWNlIGlzIGV4cGVyaW1lbnRhbC4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChQdXNoIERlY2wpOiBMaWtld2lzZS4KKwkoRGVjbCBTdW1tYXJ5KTogTGlrZXdpc2UgaW4gdGhlICIlZGVmaW5lIGFwaS5wdXNoX3B1bGwiIGVudHJ5LgorCShQdXNoIFBhcnNlciBGdW5jdGlvbik6IExpa2V3aXNlLgorCShQdWxsIFBhcnNlciBGdW5jdGlvbik6IExpa2V3aXNlLgorCShQYXJzZXIgQ3JlYXRlIEZ1bmN0aW9uKTogTGlrZXdpc2UuCisJKFBhcnNlciBEZWxldGUgRnVuY3Rpb24pOiBMaWtld2lzZS4KKwkoVGFibGUgb2YgU3ltYm9scyk6IExpa2V3aXNlIGluIHRoZSB5eXBzdGF0ZV9kZWxldGUsIHl5cHN0YXRlX25ldywKKwl5eXB1bGxfcGFyc2UsIGFuZCB5eXB1c2hfcGFyc2UgZW50cmllcy4KKworCSogTkVXUyAoMi4zYSspOiBNZW50aW9uIFhNTCBzdXBwb3J0LCBhbmQgc2F5IHRoZSBzY2hlbWEgaXMKKwlleHBlcmltZW50YWwuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoQmlzb24gT3B0aW9ucyk6IE1lbnRpb24gLXggYW5kIC0teG1sLgorCSogc3JjL2dldGFyZ3MuYyAodXNhZ2UpOiBTYXkgdGhlIFhNTCBzY2hlbWEgaXMgZXhwZXJpbWVudGFsLgorCisJKiBORVdTICgyLjNhKyk6IFNheSBvcHRpb24gaW5zdGVhZCBvZiBmbGFnLgorCisyMDA4LTAyLTIxICBXb2pjaWVjaCBQb2xhayAgPHBvbGFrQGdudS5vcmc+CisKKwkqIGRhdGEveHNsdC94bWwyeGh0bWwueHNsICh4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iKTogQ2hhbmdlIGZvb3RlcgorCXRleHQuCisKKzIwMDgtMDItMjAgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJRml4IGltcHVyZSBwdXNoIHBhcnNlciBjb21waWxlIGVycm9yIHJlcG9ydGVkIGJ5IEJvYiBSb3NzaSBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvaGVscC1iaXNvbi8yMDA4LTAyL21zZzAwMDIzLmh0bWw+LgorCSogZGF0YS95YWNjLmM6IENsZWFuIHVwIHdoaXRlc3BhY2UgaW4gdGhlIG91dHB1dCBhIGxpdHRsZS4KKwkoeXlwc3RhdGVfYWxsb2NhdGVkKTogRGVmaW5lIGZvciBpbXB1cmUgcHVzaCBwYXJzZXJzIHJlZ2FyZGxlc3Mgb2YKKwl3aGV0aGVyIHRoZSBwdWxsIGludGVyZmFjZSBpcyBhbHNvIHJlcXVlc3RlZC4KKwkqIHRlc3RzL3B1c2guYXQgKFB1c2ggUGFyc2luZzogTXVsdGlwbGUgaW1wdXJlIGluc3RhbmNlcyk6IEV4dGVuZCB0bworCWNoZWNrIGltcHVyZSBwdXNoIHBhcnNlcnMgd2l0aG91dCB0aGUgcHVsbCBpbnRlcmZhY2UuCisKKwkqIGRhdGEveWFjYy5jICh5eXBzdGF0ZV9uZXcpOiBEb24ndCB0cnkgdG8gaW52b2tlIHl5ZXJyb3Igc2luY2UKKwl5eWVycm9yIHRha2VzIGFyZ3VtZW50cyBzcGVjaWZpZWQgYnkgJXBhcnNlLXBhcmFtIHdoaWxlIHl5cHN0YXRlX25ldworCWRvZXMgbm90LgorCSogZG9jL2Jpc29uLnRleGluZm8gKFBhcnNlciBDcmVhdGUgRnVuY3Rpb24pOiBEb2N1bWVudCB0aGF0CisJeXlwc3RhdGVfbmV3IHJldHVybnMgMCBmb3IgbXVsdGlwbGUgaW1wdXJlIHBhcnNlciBpbnN0YW5jZXMuCisJKiB0ZXN0cy9wdXNoLmF0IChQdXNoIFBhcnNpbmc6IE11bHRpcGxlIGltcHVyZSBpbnN0YW5jZXMpOiBVcGRhdGUKKwlleHBlY3RlZCBzdGRlcnIgb3V0cHV0LgorCisyMDA4LTAyLTE5ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogcnVudGltZS1wby9QT1RGSUxFUy5pbiAocHVzaC5jKTogUmVtb3ZlLgorCisyMDA4LTAyLTE3ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogZGF0YS9NYWtlZmlsZS5hbSAoZGlzdF9wa2dkYXRhX0RBVEEpOiBSZW1vdmUgcHVzaC5jLgorCSogZGF0YS9wdXNoLmM6IFJlbmFtZSB0by4uLgorCSogZGF0YS95YWNjLmM6IC4uLiB0aGlzLCBvdmVyd3JpdGluZyBpdC4KKwkqIGV0Yy9iZW5jaC5wbC5pbiAoYmVuY2hfZ3JhbW1hcik6IGAlcHVyZS1wYXJzZXInLT4gYCVkZWZpbmUgYXBpLnB1cmUnLgorCWAlcHVzaC1wdWxsLXBhcnNlcicgLT4gYCVkZWZpbmUgYXBpLnB1c2hfcHVsbCAiYm90aCInLgorCVJlbW92ZSBvbGQgeWFjYy5jIHRlc3RzLCBhbmQgdXBkYXRlIHB1c2guYyB0ZXN0cyB0byB5YWNjLmMuCisKKzIwMDgtMDItMTcgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBkYXRhL2Jpc29uLm00IChiNF9wZXJjZW50X2NvZGVfZ2V0KTogT3V0cHV0ICVjb2RlIGJsb2NrIGNvbW1lbnRzIGxpa2UKKwlgIiVjb2RlIHRvcCIgYmxvY2tzJyBpbnN0ZWFkIG9mIGAlY29kZSAidG9wIiBibG9ja3MnLgorCSogZGF0YS9wdXNoLmM6IEltcG9ydCB5YWNjLmMgY2hhbmdlcyBmcm9tIDIwMDgtMDEtMDkgYW5kIDIwMDctMDgtMDMuCisJQ2xlYW4gdXAgd2hpdGVzcGFjZSBpbiB0aGUgb3V0cHV0IGEgbGl0dGxlLgorCisyMDA4LTAyLTE2ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUZpeCBkb2N1bWVudGF0aW9uIHByb2JsZW1zIHJlcG9ydGVkIGJ5IFRpbSBKb3NsaW5nIGF0CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwOC0wMS9tc2cwMDAxMy5odG1sPi4KKwkqIE5FV1MgKDIuM2ErKTogTWVudGlvbiByZW1vdmFsIG9mIC0tbm8tcGFyc2VyLCAtbiwgYW5kICVuby1wYXJzZXIuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoVG9rZW4gRGVjbCk6IFRva2VuIG51bWJlcnMgYXJlICpub25uZWdhdGl2ZSoKKwlpbnRlZ2Vycy4gIEV4cGxhaW4gdGhlIGVmZmVjdCBvZiBsaXRlcmFsIHN0cmluZyBhbGlhc2VzIG9uIGVycm9yCisJbWVzc2FnZXMuICBDb3B5IHRva2VuIDAgZG9jdW1lbnRhdGlvbiBmcm9tIHRoZSBDKysgc2tlbGV0b24KKwlkb2N1bWVudGF0aW9uLgorCisyMDA4LTAyLTE2ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUFjY2VwdCBhIHRva2VuIG51bWJlciBpbiBhICVsZWZ0LCAlcmlnaHQsIG9yICVub25hc3NvYyBmb3IgUE9TSVgKKwljb25mb3JtYW5jZS4gIFJlcG9ydGVkIGJ5IFRpbSBKb3NsaW5nIGF0CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwOC0wMS9tc2cwMDAxMC5odG1sPi4KKwkqIE5FV1MgKDIuM2ErKTogTWVudGlvbi4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChQcmVjZWRlbmNlIERlY2wpOiBEZXNjcmliZSBob3cgbGl0ZXJhbCBzdHJpbmdzCisJYW5kIGNvZGUgbnVtYmVycyBhcmUgdHJlYXRlZCBieSBwcmVjZWRlbmNlIGRlY2xhcmF0aW9ucy4KKwkqIHNyYy9wYXJzZS1ncmFtLnkgKHByZWNlZGVuY2VfZGVjbGFyYXRpb24pOiBVc2Ugc3ltYm9scy5wcmVjIGluc3RlYWQKKwlvZiBzeW1ib2xzLjEuCisJKHN5bWJvbHMucHJlYyk6IE5ldywganVzdCBsaWtlIHN5bWJvbHMuMSBidXQgdXNlcyBzeW1ib2wucHJlYyBpbnN0ZWFkCisJb2Ygc3ltYm9sLgorCShzeW1ib2wucHJlYyk6IE5ldywganVzdCBsaWtlIHN5bWJvbCBidXQgYWxsb3dzIElOVC4KKwkqIHNyYy9zeW10YWIuYyAoc3ltYm9sX3VzZXJfdG9rZW5fbnVtYmVyX3NldCk6IFJlbW92ZSBhbiBhdmVyIHRoYXQgbm8KKwlsb25nZXIgaG9sZHMuCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChUb2tlbiBudW1iZXIgaW4gcHJlY2VkZW5jZSBkZWNsYXJhdGlvbik6IE5ldworCXRlc3QgY2FzZS4KKworMjAwOC0wMi0wNiAgSnVhbiBNYW51ZWwgR3VlcnJlcm8gIDxqdWFuLmd1ZXJyZXJvQGdteC5kZT4KKworCURKR1BQIHNwZWNpZmljIGlzc3Vlcy4KKwkqIGRqZ3BwL2NvbmZpZy5iYXQ6IEFkZCBmaWxlbmFtZXMgdGhhdCBhcmUgbm90IDguMyBjbGVhbiBhbmQgdGhhdCBtdXN0CisJYmUgY2hhbmdlZC4gIENvcHlyaWdodCB0aW1lc3RhbXAgYWRqdXN0ZWQuCisJKiBkamdwcC9jb25maWcuc2VkOiBBZGQgZmlsZW5hbWVzIHRoYXQgYXJlIG5vdCA4LjMgY2xlYW4gYW5kIHRoYXQgbXVzdAorCWJlIGNoYW5nZWQuICBDb3B5cmlnaHQgdGltZXN0YW1wIGFkanVzdGVkLgorCSogZGpncHAvY29uZmlnLnNpdGU6IENvcHlyaWdodCB0aW1lc3RhbXAgYWRqdXN0ZWQuCisJKiBkamdwcC9jb25maWdfaC5zZWQ6IENvcHlyaWdodCB0aW1lc3RhbXAgYWRqdXN0ZWQuCisJKiBkamdwcC9kanVucGFjay5iYXQ6IENvcHlyaWdodCB0aW1lc3RhbXAgYWRqdXN0ZWQuCisJKiBkamdwcC9mbmNobmFnZS5sc3Q6IEFkZCBmaWxlbmFtZXMgdGhhdCBhcmUgbm90IDguMyBjbGVhbiB0byB0aGUKKwlmaWxlbmFtZSB0cmFuc2xhdGlvbiBsaXN0LgorCSogZGpncHAvc3VicGlwZS5jIChpbml0X3N1YnBpcGUpOiBDaGVjayB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzCisJVE1QRElSLCBUTVAgYW5kIFRFTVAsIGluIHRoYXQgb3JkZXIsIHRvIGRldGVybWluYXRlIHdoZXJlIHRoZSB0ZW1wCisJZmlsZXMgc2hhbGwgYmUgY3JlYXRlZC4gIEJlZm9yZSB0cnlpbmcgdG8gdXNlIHRoZSB0ZW1wIGRpciB3aGVyZSB0aGUKKwllbnZpcm9ubWVudCB2YXJpYWJsZSBwb2ludHMgdG8gY2hlY2sgdGhhdCB0aGUgZGlyIHJlYWxseSBleGlzdHMuIElmCisJbm90IGRlZmF1bHQgdG8gdGhlIGN3ZCBhcyB0ZW1wIGRpci4gIENvcHlyaWdodCB0aW1lc3RhbXAgYWRqdXN0ZWQuCisJKiBkamdwcC9zdWJwaXBlLmg6IENvcHlyaWdodCB0aW1lc3RhbXAgYWRqdXN0ZWQuCisJKiBkamdwcC90ZXN0c3VpdGUuc2VkOiBDb3B5cmlnaHQgdGltZXN0YW1wIGFkanVzdGVkLgorCisyMDA4LTAxLTMwICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogZG9jL2Jpc29uLnRleGluZm86IFVwZGF0ZSBCYWNrLUNvdmVyIHRleHQgdG8gcmVmbGVjdCBuZXcgR05VIHdvcmRpbmcuCisKKzIwMDgtMDEtMDkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBkYXRhL3lhY2MuYyAoeXlwYXJzZSk6IENvcnJlY3QgdGhlIGNvbW1lbnQgd2hlbiBsb2NhdGlvbnMgYXJlbid0IHVzZWQuCisJUHJvYmxlbSByZXBvcnRlZCBieSBDbGF1ZGlvIFNhYXZlZHJhIGluCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwOC0wMS9tc2cwMDAwMy5odG1sPi4KKworMjAwOC0wMS0wNSAgV29qY2llY2ggUG9sYWsgIDxwb2xha0BnbnUub3JnPgorCisJKiBkYXRhL3hzbHQveG1sMnhodG1sLnhzbCAoeHNsOnRlbXBsYXRlIG1hdGNoPSIvIik6IFByZWNlZGUgYW4gWEhUTUwKKwlkb2N1bWVudCdzIHRpdGxlIHdpdGggdGhlIGlucHV0IGdyYW1tYXIgZmlsZSBuYW1lLgorCisyMDA3LTEyLTIyICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUF1dG9tYXRlIHJlZ3Jlc3Npb24gdGVzdGluZyBvZiB0aGUgWE1ML1hTTFQgaW1wbGVtZW50YXRpb24uICBEaXNjdXNzZWQKKwlzdGFydGluZyBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA3LTExL21zZzAwMDIxLmh0bWw+LgorCSogY29uZmlndXJlLmFjIChYU0xUUFJPQyk6IE5ldyBzdWJzdGl0dXRpb24uCisJKiBNYWtlZmlsZS5hbSAobWFpbnRhaW5lci14bWwtY2hlY2spOiBOZXcgcGhvbnkgdGFyZ2V0IGludm9raW5nLi4uCisJKiB0ZXN0cy9NYWtlZmlsZS5hbSAobWFpbnRhaW5lci14bWwtY2hlY2spOiAuLi4gdGhpcyBuZXcgcGhvbnkgdGFyZ2V0CisJaW52b2tpbmcgbWFrZSBtYWludGFpbmVyLWNoZWNrIHdpdGggQklTT05fVEVTVF9YTUw9MS4KKwkqIHRlc3RzL2F0bG9jYWwuaW4gKFhTTFRQUk9DKTogTmV3LgorCSogdGVzdHMvbG9jYWwuYXQgKEFUX0JJU09OX0NIRUNLKTogTmV3IG1hY3JvIHRvICgxKSBpbnN0cnVjdCBWYWxncmluZAorCW5vdCB0byByZXBvcnQgcmVhY2hhYmxlIG1lbW9yeSB3aGVuIEJpc29uIGlzIGV4cGVjdGVkIHRvIGhhdmUgYQorCW5vbi16ZXJvIGV4aXQgc3RhdHVzIGFuZCAoMikgdG8gY29tcGFyZSBYTUwvWFNMVCBvdXRwdXQgd2l0aCAtLWdyYXBoCisJYW5kIC0tcmVwb3J0PWFsbCBvdXRwdXQgZm9yIGV2ZXJ5IHdvcmtpbmcgZ3JhbW1hciB3aGVuCisJQklTT05fVEVTVF9YTUw9MS4KKwkoQVRfQklTT05fQ0hFQ0tfTk9fWE1MKTogTGlrZXdpc2UsIGJ1dCBza2lwIFhNTCBjaGVja3MuCisJKEFUX0JJU09OX0NIRUNLX1hNTCk6IE5ldy4KKwkoQVRfUVVFTExfVkFMR1JJTkQpOiBOZXcuCisJKiB0ZXN0cy90ZXN0c3VpdGUuYXQgKE9SSUdJTkFMX0FUX0NIRUNLKTogUmVtb3ZlIHRoaXMgYW5kLi4uCisJKEFUX0NIRUNLKTogLi4uIGRvbid0IHJlZGVmaW5lIHRoaXMgc2luY2UgdGhpcyB3YXMgdGhlIG9sZCB3YXkgdG8KKwlxdWVsbCBWYWxncmluZC4KKwkqIHRlc3RzL2FjdGlvbnMuYXQ6IFJld3JpdGUgYWxsIEFUX0NIRUNLIGludm9jYXRpb25zIGZvciBiaXNvbiBhcworCUFUX0JJU09OX0NIRUNLIGludm9jYXRpb25zLgorCSogdGVzdHMvYysrLmF0OiBMaWtld2lzZS4KKwkqIHRlc3RzL2NhbGMuYXQ6IExpa2V3aXNlLgorCSogdGVzdHMvY29uZmxpY3RzLmF0OiBMaWtld2lzZS4KKwkqIHRlc3RzL2N4eC10eXBlLmF0OiBMaWtld2lzZS4KKwkqIHRlc3RzL2V4aXN0aW5nLmF0OiBMaWtld2lzZS4KKwkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0OiBMaWtld2lzZS4KKwkqIHRlc3RzL2hlYWRlcnMuYXQ6IExpa2V3aXNlLgorCSogdGVzdHMvaW5wdXQuYXQ6IExpa2V3aXNlLgorCSogdGVzdHMvamF2YS5hdDogTGlrZXdpc2UuCisJKiB0ZXN0cy9vdXRwdXQuYXQ6IExpa2V3aXNlLgorCSogdGVzdHMvcHVzaC5hdDogTGlrZXdpc2UuCisJKiB0ZXN0cy9yZWR1Y2UuYXQ6IExpa2V3aXNlLgorCSogdGVzdHMvcmVncmVzc2lvbi5hdDogTGlrZXdpc2UuCisJKiB0ZXN0cy9zZXRzLmF0OiBMaWtld2lzZS4KKwkqIHRlc3RzL3NrZWxldG9ucy5hdDogTGlrZXdpc2UuCisJKiB0ZXN0cy9zeW5jbGluZXMuYXQ6IExpa2V3aXNlLgorCSogdGVzdHMvdG9ydHVyZS5hdDogTGlrZXdpc2UuCisJKEJpZyB0cmlhbmdsZSk6IFVzZSBBVF9CSVNPTl9DSEVDS19OT19YTUwgaW5zdGVhZCBzaW5jZSB0aGlzIGdyYW1tYXIKKwl0ZW5kcyB0byBoYW5nIHhzbHRwcm9jLgorCShCaWcgaG9yaXpvbnRhbCk6IExpa2V3aXNlLgorCisyMDA3LTEyLTA4ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUluIFhNTCBvdXRwdXQsIHJlbW92ZSByZWR1bmRhbnQgY2xhc3MgYXR0cmlidXRlIG9uIHN5bWJvbCBlbGVtZW50LgorCSogZGF0YS94c2x0L2Jpc29uLnhzbCAoeHNsOmtleSBuYW1lPSJiaXNvbjpzeW1ib2xCeU5hbWUiKTogTmV3LgorCSogZGF0YS94c2x0L3htbDJ4aHRtbC54c2wgKHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3ltYm9sIik6IFVzZSBpdCB0bworCWxvb2sgdXAgYSBzeW1ib2wgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQncyBhIG5vbnRlcm1pbmFsIG9yIHRlcm1pbmFsLgorCSogc3JjL2dyYW0uYyAocnVsZV9yaHNfcHJpbnRfeG1sKTogUmVtb3ZlIGNsYXNzIGF0dHJpYnV0ZS4KKwkqIHNyYy9zdGF0ZS5jIChzdGF0ZV9ydWxlX2xvb2thaGVhZF90b2tlbnNfcHJpbnRfeG1sKTogTGlrZXdpc2UuCisKKwlBZGQgcHJlYy9hc3NvYyBpbmZvcm1hdGlvbiB0byBYTUwgb3V0cHV0LgorCSogc3JjL2dyYW0uYyAoZ3JhbW1hcl9ydWxlc19wcmludF94bWwpOiBGb3IgZWFjaCBydWxlIHRoYXQgaGFzIGEKKwklcHJlYywgYWRkIGEgcGVyY2VudF9wcmVjIGF0dHJpYnV0ZS4KKwkqIHNyYy9wcmludC14bWwuYyAocHJpbnRfZ3JhbW1hcik6IEZvciBlYWNoIHRlcm1pbmFsIHRoYXQgaGFzIGEKKwlwcmVjZWRlbmNlIG9yIGFzc29jaWF0aXZpdHksIGFkZCBhIHByZWMgb3IgYXNzb2MgYXR0cmlidXRlLgorCSh4bWxfaW5kZW50KTogTmV3LgorCSh4bWxfcHV0cyk6IFVzZSB4bWxfaW5kZW50LgorCSh4bWxfcHJpbnRmKTogVXNlIHhtbF9pbmRlbnQuCisJKiBzcmMvcHJpbnQteG1sLmggKHhtbF9pbmRlbnQpOiBQcm90b3R5cGUuCisKKwkqIHRlc3RzL2V4aXN0aW5nLmF0IChHTlUgcGljIEdyYW1tYXIpOiBGaXggYSBydWxlIG1pc2NvcGllZCBmcm9tCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwMy0wNC9tc2cwMDAyNi5odG1sPi4KKworMjAwNy0xMi0wOCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIGRhdGEveHNsdC9iaXNvbi54c2wgKGJpc29uOnJ1bGVOdW1iZXIpOiBSZW5hbWUgdG8uLi4KKwkoYmlzb246cnVsZUJ5TnVtYmVyKTogLi4uIHRoaXMgZm9yIGNsYXJpdHkuCisJKiBkYXRhL3hzbHQveG1sMmRvdC54c2wgKHhzbDp0ZW1wbGF0ZSBtYXRjaD0iaXRlbSIpOiBVcGRhdGUuCisJKiBkYXRhL3hzbHQveG1sMnRleHQueHNsICh4c2w6dGVtcGxhdGUgbWF0Y2g9Iml0ZW0iKTogVXBkYXRlLgorCSh4c2w6dGVtcGxhdGUgbWF0Y2g9InJlZHVjdGlvbiIpOiBVcGRhdGUuCisJKHhzbDp0ZW1wbGF0ZSBtYXRjaD0iaXRlbSIpOiBVcGRhdGUuCisJKHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmVkdWN0aW9uIik6IFVwZGF0ZS4KKworCUluIHRoZSBYTUwgb3V0cHV0LCBkb24ndCBwcmludCB0aGUgbGlzdCBvZiBydWxlcyB3aGVyZSBzeW1ib2xzIGFwcGVhci4KKwlDb21wdXRlIGl0IGluIFhTTFQgaW5zdGVhZC4gIERpc2N1c3NlZCBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA3LTA5L21zZzAwMDI0Lmh0bWw+LgorCSogZGF0YS94c2x0L2Jpc29uLnhzbCAoYmlzb246cnVsZUJ5TGhzKTogTmV3LgorCShiaXNvbjpydWxlQnlSaHMpOiBOZXcuCisJKiBkYXRhL3hzbHQveG1sMnRleHQueHNsICh4c2w6dGVtcGxhdGUgbWF0Y2g9InRlcm1pbmFsIik6IFVzZQorCWJpc29uOnJ1bGVCeVJocy4KKwkoeHNsOnRlbXBsYXRlIG1hdGNoPSJ0ZXJtaW5hbC9ydWxlIik6IFJlbW92ZS4KKwkoeHNsOnRlbXBsYXRlIG1hdGNoPSJub250ZXJtaW5hbCIpOiBVc2UgYmlzb246cnVsZUJ5TGhzIGFuZAorCWJpc29uOnJ1bGVCeVJocy4KKwkoeHNsOnRlbXBsYXRlIG1hdGNoPSJub250ZXJtaW5hbC9sZWZ0L3J1bGV8bm9udGVybWluYWwvcmlnaHQvcnVsZSIpOgorCVJlbW92ZS4KKwkqIGRhdGEveHNsdC94bWwyeGh0bWwueHNsICh4c2w6dGVtcGxhdGUgbWF0Y2g9InRlcm1pbmFsIik6IFVzZQorCWJpc29uOnJ1bGVCeVJocyBhbmQgbW9kZT0ibnVtYmVyLWxpbmsiIGZvciBydWxlIHRlbXBsYXRlLgorCSh4c2w6dGVtcGxhdGUgbWF0Y2g9InRlcm1pbmFsL3J1bGUiKTogUmVtb3ZlLgorCSh4c2w6dGVtcGxhdGUgbWF0Y2g9Im5vbnRlcm1pbmFsIik6IFVzZSBiaXNvbjpydWxlQnlMaHMgYW5kCisJYmlzb246cnVsZUJ5UmhzIGFuZCBtb2RlPSJudW1iZXItbGluayIgZm9yIHJ1bGUgdGVtcGxhdGUuCisJKHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibm9udGVybWluYWwvbGVmdC9ydWxlfG5vbnRlcm1pbmFsL3JpZ2h0L3J1bGUiKToKKwlSZXdyaXRlIGFzLi4uCisJKHhzbDp0ZW1wbGF0ZSBtYXRjaD0icnVsZSIgbW9kZT0ibnVtYmVyLWxpbmsiKTogLi4uIHRoaXMuCisJKiBzcmMvcHJpbnQteG1sLmMgKHByaW50X2dyYW1tYXIpOiBEb24ndCBwcmludCB0aGUgbGlzdCBvZiBydWxlcy4KKworMjAwNy0xMi0wMSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlEb24ndCBsZXQgLS1yZXBvcnQgYWZmZWN0IFhNTCBvdXRwdXQ7IGFsd2F5cyBwcmludCBhbGwgaW5mb3JtYXRpb24uCisJRGlzY3Vzc2VkIGF0CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDctMDkvbXNnMDAwMjAuaHRtbD4uCisJKiBzcmMvY29uZmxpY3RzLmMgKGxvZ19yZXNvbHV0aW9uKTogSW1wbGVtZW50LgorCSogc3JjL3ByaW50LXhtbC5jIChwcmludF9jb3JlKTogSW1wbGVtZW50LgorCShwcmludF9zdGF0ZSk6IEltcGxlbWVudC4KKwkocHJpbnRfeG1sKTogSW1wbGVtZW50LgorCisJKiBORVdTICgyLjNhKyk6IEZpeCBxdW90ZXMuCisJKiBzcmMvcGFyc2UtZ3JhbS55IChwcm9sb2d1ZV9kZWNsYXJhdGlvbik6IEZvciBjb25zaXN0ZW5jeSB3aXRoIC12LAorCWRvbid0IGxldCAldmVyYm9zZSBjbGVhciB0aGUgbGlzdCBzcGVjaWZpZWQgYnkgLS1yZXBvcnQuCisKKzIwMDctMTEtMjYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL01ha2VmaWxlLmFtIChkaXN0X3BrZ2RhdGFfREFUQSk6IFNoaXAgYW5kIGluc3RhbGwgYmlzb24ueHNsLgorCisyMDA3LTExLTI0ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUluIHRoZSBYTUwgb3V0cHV0LCBsaXN0IHVzZWxlc3MgYW5kIHVudXNlZCBzeW1ib2xzIGFuZCBydWxlcyB3aXRoIHRoZQorCXVzZWZ1bCBvbmVzIGFuZCBhZGQgYSAidXNlZnVsbmVzcyIgYXR0cmlidXRlLiAgRGlzY3Vzc2VkIHN0YXJ0aW5nIGF0CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDctMDkvbXNnMDAwMTcuaHRtbD4uCisJKiBzcmMvZ3JhbS5jIChncmFtbWFyX3J1bGVzX3BhcnRpYWxfcHJpbnRfeG1sKTogUmVtb3ZlLgorCShncmFtbWFyX3J1bGVzX3ByaW50X3htbCk6IFByaW50IGFsbCBydWxlcyBpbnN0ZWFkIG9mIGp1c3QgdGhvc2UKKwl1c2VmdWwgaW4gdGhlIGdyYW1tYXIsIGFuZCBhZGQgYSAidXNlZnVsbmVzcyIgYXR0cmlidXRlLgorCSogc3JjL2dyYW0uaCAoZ3JhbW1hcl9ydWxlc19wYXJ0aWFsX3ByaW50X3htbCk6IFJlbW92ZSBwcm90b3R5cGUuCisJKiBzcmMvcHJpbnQteG1sLmMgKHByaW50X3J1bGVzX3VzZWxlc3NfaW5fcGFyc2VyKTogUmVtb3ZlLgorCShwcmludF9ncmFtbWFyKTogUHJpbnQgYWxsIG5vbnRlcm1pbmFscyBpbnN0ZWFkIG9mIGp1c3QgdXNlZnVsIG9uZXMsCisJYW5kIGFkZCBhICJ1c2VmdWxuZXNzIiBhdHRyaWJ1dGUgdG8gbm9udGVybWluYWxzIGFuZCB0ZXJtaW5hbHMuCisJKHByaW50X3htbCk6IERvbid0IHByaW50IGEgc2VwYXJhdGUgInJlZHVjdGlvbnMiIG9yCisJInJ1bGVzLXVzZWxlc3MtaW4tcGFyc2VyIiBlbGVtZW50LgorCSogc3JjL3JlZHVjZS5jIChyZWR1Y2Vfb3V0cHV0KTogVXNlIHJlZHVjZV90b2tlbl91bnVzZWRfaW5fZ3JhbW1hci4KKwkocmVkdWNlX3htbCk6IFJlbW92ZS4KKwkocmVkdWNlX3Rva2VuX3VudXNlZF9pbl9ncmFtbWFyKTogTmV3LgorCShyZWR1Y2Vfbm9udGVybWluYWxfdXNlbGVzc19pbl9ncmFtbWFyKTogTmV3LgorCSogc3JjL3JlZHVjZS5oIChyZWR1Y2VfeG1sKTogUmVtb3ZlIHByb3RvdHlwZS4KKwkocmVkdWNlX3Rva2VuX3VudXNlZF9pbl9ncmFtbWFyKTogQWRkIHByb3RvdHlwZS4KKwkocmVkdWNlX25vbnRlcm1pbmFsX3VzZWxlc3NfaW5fZ3JhbW1hcik6IEFkZCBwcm90b3R5cGUuCisJKiBkYXRhL3hzbHQveG1sMnRleHQueHNsOiBVcGRhdGUgZm9yIFhNTCBjaGFuZ2VzLgorCSogZGF0YS94c2x0L3htbDJ4aHRtbC54c2w6IFVwZGF0ZSBmb3IgWE1MIGNoYW5nZXMuCisJKiB0ZXN0cy9yZWR1Y2UuYXQgKFVzZWxlc3MgVGVybWluYWxzKTogVXBkYXRlIG91dHB1dC4KKwkoVXNlbGVzcyBSdWxlcyk6IFVwZGF0ZSBvdXRwdXQuCisJKFJlZHVjZWQgQXV0b21hdG9uKTogVXBkYXRlIG91dHB1dC4KKworCVNheSAiVGVybWluYWxzIHVudXNlZCBpbiBncmFtbWFyIiBpbnN0ZWFkIG9mICJVbnVzZWQgdGVybWluYWxzIi4KKwkqIE5FV1MgKDIuM2ErKTogVXBkYXRlLgorCSogZG9jL2Jpc29uLnRleGluZm8gKFVuZGVyc3RhbmRpbmcpOiBVcGRhdGUgZXhhbXBsZSBvdXRwdXQuCisJKiBzcmMvcmVkdWNlLmMgKHJlZHVjZV9vdXRwdXQpOiBJbXBsZW1lbnQuCisJKiBkYXRhL3hzbHQveG1sMnRleHQueHNsOiBJbXBsZW1lbnQuCisJKiBkYXRhL3hzbHQveG1sMnhodG1sLnhzbDogSW1wbGVtZW50LgorCisyMDA3LTExLTE4ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUFjY2VwdCAtLXJlcG9ydC1maWxlPUZJTEUgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYC5vdXRwdXQnIGZpbGVuYW1lLgorCSogTkVXUyAoMi4zYSspOiBNZW50aW9uLgorCSogZG9jL2Jpc29uLnRleGluZm8gKEJpc29uIE9wdGlvbnMpOiBBZGQgYW4gZW50cnkuCisJKiBzcmMvZmlsZXMuYyAoY29tcHV0ZV9vdXRwdXRfZmlsZV9uYW1lcyk6IERvbid0IG92ZXJyaWRlCisJc3BlY192ZXJib3NlX2ZpbGUgaWYgYWxyZWFkeSBzZXQuCisJKiBzcmMvZ2V0YXJncy5jICh1c2FnZSk6IERvY3VtZW50IC0tcmVwb3J0LWZpbGUuCisJKFJFUE9SVF9GSUxFX09QVElPTik6IE5ldyBhbm9ueW1vdXMgZW51bSBtZW1iZXIuCisJKGxvbmdfb3B0aW9ucyk6IEFkZCBlbnRyeSBmb3IgaXQuCisJKGdldGFyZ3MpOiBBZGQgY2FzZSBmb3IgaXQgc2V0dGluZyBzcGVjX3ZlcmJvc2VfZmlsZS4KKworCSogYnVpbGQtYXV4L2Nyb3NzLW9wdGlvbnMucGw6IERvbid0IHJlY29yZCBhIHNob3J0IG9wdGlvbiBqdXN0IGJlY2F1c2UKKwl0aGVyZSdzIGFuIGFyZy4KKwkqIGRvYy8uY3ZzaWdub3JlOiBBZGQgeWFjYy4xLgorCisyMDA3LTExLTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZG9jL3lhY2MuMS5pbjogTmV3LgorCSogY29uZmlndXJlLmFjLCBkb2MvTWFrZWZpbGUuYW06IEFkanVzdC4KKwkqIGNvbmZpZ3VyZS5hYyAoUEFDS0FHRV9DT1BZUklHSFRfWUVBUik6IE5ldyBzdWJzdGl0dXRpb24sIGFuZCBuZXcKKwljb25maWcuaCBzeW1ib2wuCisJVXNlIEFDX1NVQlNUIGZvciBhc3NpZ25tZW50cyB0b28uCisJKiBzcmMvZ2V0YXJncy5jICh2ZXJzaW9uKTogVXNlIFBBQ0tBR0VfQ09QWVJJR0hUX1lFQVIuCisKKzIwMDctMTEtMTAgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBzcmMvZ3JhbS5jOiBSZW1vdmUgY29tbWVudHMgdGhhdCBkdXBsaWNhdGUgY29tbWVudHMgaW4gZ3JhbS5oLgorCisJV2hlbiByZXBvcnRpbmcgdXNlbGVzcyBydWxlcyBhbmQgbm9udGVybWluYWxzLCBzYXkgInVzZWxlc3MgaW4gZ3JhbW1hciIKKwlpbnN0ZWFkIG9mICJ1c2VsZXNzIiwgYW5kIHNheSAidXNlbGVzcyBpbiBwYXJzZXIiIGluc3RlYWQgb2YgIm5ldmVyCisJcmVkdWNlZCIuICBEaXNjdXNzZWQgc3RhcnRpbmcgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwNy0xMC9tc2cwMDAzMy5odG1sPi4KKwkqIE5FV1MgKDIuM2ErKTogTWVudGlvbiB0aGlzIGNoYW5nZS4KKwkqIGRhdGEveHNsdC94bWwydGV4dC54c2w6IFVwZGF0ZSBvdXRwdXQgdGV4dCBhbmQgZXhwZWN0ZWQgaW5wdXQgWE1MCisJZWxlbWVudCBuYW1lcyB0byBtYXRjaCBjaGFuZ2VzIGJlbG93LgorCSogZGF0YS94c2x0L3htbDJ4aHRtbC54c2w6IExpa2V3aXNlLgorCSh4c2w6dGVtcGxhdGUgbWF0Y2g9ImJpc29uLXhtbC1yZXBvcnQiKTogQWRkIG1pc3NpbmcgZW50cnkgaW4gVGFibGUgb2YKKwlDb250ZW50czogIlJ1bGVzIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHMiLgorCSogZG9jL2Jpc29uLnRleGluZm8gKERlY2wgU3VtbWFyeSk6IFJld29yZCBhIGxpdHRsZS4KKwkoVW5kZXJzdGFuZGluZyk6IFVwZGF0ZSBleGFtcGxlIG91dHB1dCBmb3IgY2hhbmdlcyBiZWxvdy4KKwkqIHNyYy9ncmFtLmM6IChydWxlX3VzZWZ1bF9wKTogUmVuYW1lIHRvLi4uCisJKHJ1bGVfdXNlZnVsX2luX2dyYW1tYXJfcCk6IC4uLiB0aGlzLgorCShydWxlX3VzZWxlc3NfcCk6IFJlbmFtZSB0by4uLgorCShydWxlX3VzZWxlc3NfaW5fZ3JhbW1hcl9wKTogLi4uIHRoaXMuCisJKHJ1bGVfbmV2ZXJfcmVkdWNlZF9wKTogUmVuYW1lIHRvLi4uCisJKHJ1bGVfdXNlbGVzc19pbl9wYXJzZXJfcCk6IC4uLiB0aGlzLgorCShncmFtbWFyX3J1bGVzX3ByaW50KTogVXBkYXRlIGZvciByZW5hbWVzLgorCShncmFtbWFyX3J1bGVzX3ByaW50X3htbCk6IFVwZGF0ZSBmb3IgcmVuYW1lcy4KKwkoZ3JhbW1hcl9ydWxlc19uZXZlcl9yZWR1Y2VkX3JlcG9ydCk6IFJlbmFtZSB0by4uLgorCShncmFtbWFyX3J1bGVzX3VzZWxlc3NfcmVwb3J0KTogLi4uIHRoaXMgc2luY2UgaXQgaXMgdXNlZCBmb3IgZWl0aGVyCisJa2luZCBvZiB1c2VsZXNzIHJ1bGUuCisJKiBzcmMvZ3JhbS5oOiBSZXdvcmQgY29tbWVudHMgYW5kIHVwZGF0ZSBmdW5jdGlvbiBuYW1lcyBpbiBwcm90b3R5cGVzLgorCSogc3JjL21haW4uYyAobWFpbik6IFNheSAicnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzIi4KKwkqIHNyYy9wcmludC14bWwuYyAocHJpbnRfcnVsZXNfbmV2ZXJfcmVkdWNlZCk6IFJlbmFtZSB0by4uLgorCShwcmludF9ydWxlc191c2VsZXNzX2luX3BhcnNlcik6IC4uLiB0aGlzLCBhbmQgcmVuYW1lIG91dHB1dCBYTUwKKwllbGVtZW50ICJydWxlcy1uZXZlci1yZWR1Y2VkIiB0byAicnVsZXMtdXNlbGVzcy1pbi1wYXJzZXIiLgorCShwcmludF94bWwpOiBVcGRhdGUgZm9yIHJlbmFtZS4KKwkqIHNyYy9wcmludC5jIChwcmludF9yZXN1bHRzKTogU2F5ICJSdWxlcyB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8KKwljb25mbGljdHMiLgorCSogc3JjL3JlZHVjZS5jIChyZWR1Y2VfZ3JhbW1hcl90YWJsZXMpOiBTYXkgInJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyIi4KKwkobm9udGVybWluYWxzX3JlZHVjZSk6IFNheSAibm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyIi4KKwkocmVkdWNlX291dHB1dCk6IFNheSAiTm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIuCisJU2F5ICJSdWxlcyB1c2VsZXNzIGluIGdyYW1tYXIiLgorCShyZWR1Y2VfeG1sKTogUmVuYW1lIG91dHB1dCBYTUwgZWxlbWVudCAidXNlbGVzcyIgdG8KKwkidXNlbGVzcy1pbi1ncmFtbWFyIi4KKwkocmVkdWNlX3ByaW50KTogRG9uJ3QgcmVwb3J0IHRoZSBjb3VudCBvZiBncmFtbWF0aWNhbGx5IHVzZWxlc3MgcnVsZXMKKwlhcyAicnVsZXMgbmV2ZXIgcmVkdWNlZCIganVzdCBiZWNhdXNlICV5YWNjIGlzIHNwZWNpZmllZC4KKwlJbiB0aGUgY29ycmVjdCByZXBvcnQgb2YgdGhpcyBjb3VudCwgc2F5IG5vbnRlcm1pbmFsKHMpIGFuZCBydWxlKHMpCisJInVzZWxlc3MgaW4gZ3JhbW1hciIuCisJKiB0ZXN0cy9jb25mbGljdHMuYXQgKFMvUiBpbiBpbml0aWFsKTogVXBkYXRlIGV4cGVjdGVkIG91dHB1dC4KKwkoRGVmYXVsdGVkIENvbmZsaWN0ZWQgUmVkdWN0aW9uKTogTGlrZXdpc2UuCisJKFVucmVhY2hhYmxlIFN0YXRlcyBBZnRlciBDb25mbGljdCBSZXNvbHV0aW9uKTogTGlrZXdpc2UuCisJKiB0ZXN0cy9leGlzdGluZy5hdCAoR05VIHBpYyBHcmFtbWFyKTogTGlrZXdpc2UuCisJKiB0ZXN0cy9yZWR1Y2UuYXQgKFVzZWxlc3MgTm9udGVybWluYWxzKTogTGlrZXdpc2UuCisJKFVzZWxlc3MgUnVsZXMpOiBMaWtld2lzZS4KKwkoUmVkdWNlZCBBdXRvbWF0b24pOiBMaWtld2lzZS4KKwkoVW5kZXJpdmFibGUgUnVsZXMpOiBMaWtld2lzZS4KKwkoRW1wdHkgTGFuZ3VhZ2UpOiBMaWtld2lzZS4KKworMjAwNy0xMS0wOSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIGRhdGEvYmlzb24ubTQgKGI0X2NhdCk6IFB1dCBhIG5ld2xpbmUgYWZ0ZXIgdGhlIGVuZCBkZWxpbWl0ZXIgb2YgdGhlCisJaGVyZSBkb2N1bWVudCBhbmQgYmVmb3JlIHRoZSBFT0Ygc28gdGhhdCBCU0QncyBpbXBsZW1lbnRhdGlvbiBvZiBCb3VybmUKKwlzaGVsbCBkb2Vzbid0IHBhcnNlIHRoZSBkZWxpbWl0ZXIgYXMgcGFydCBvZiB0aGUgaGVyZSBkb2N1bWVudC4KKwkqIGRvYy8uY3ZzaWdub3JlOiBBZGQgY3Jvc3Mtb3B0aW9ucy50ZXhpLgorCSogc3JjL2dldGFyZ3MuYyAodXNhZ2UpOiBBZGQgYSBibGFuayBsaW5lIGFmdGVyIHRoZSB3YXJuaW5nIGNhdGVnb3JpZXMuCisKKzIwMDctMTEtMDggIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisKKwkqIGRhdGEvbGFscjEuamF2YSAoTGV4ZXIpOiBSZW1vdmUgdXNhZ2Ugb2YgYjRfcHVyZV9pZi4KKworMjAwNy0xMS0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlSZW1vdmUgSWQ6IGZyb20gYmlzb24uMS4KKwkqIGRvYy9NYWtlZmlsZS5hbSAocmVtb3ZlX3RpbWVfc3RhbXApOiBJbmNsdWRlIHRoZSBzZWQgaW52b2NhdGlvbi4KKwkocGVybCAtMDc3NyAtcGkgLWUgJ3MvXC5QUFxuSWQpOiBOZXcuCisJKC54LjEpOiBVc2UgaXQgdG8gaWdub3JlIHRoZSB2ZXJzaW9uIGNvbnRyb2wgcmV2aXNpb24uCisKKzIwMDctMTEtMDUgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJKiBidWlsZC1hdXgvTWFrZWZpbGUuYW06IFNoaXAgY3Jvc3Mtb3B0aW9ucy5wbC4KKwkqIGRvYy9NYWtlZmlsZS5hbTogQWx3YXlzIHJlZmVyIHRvIGNyb3NzLW9wdGlvbnMudGV4aSB3aXRoCisJJChzcmNkaXIpLgorCShNQUlOVEFJTkVSQ0xFQU5GSUxFUyk6IEFkZCBpdC4KKworMjAwNy0xMS0wNCAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlHZW5lcmF0ZSB0aGUgbG9uZy9zaG9ydCBvcHRpb24gY3Jvc3MtdGFibGUuCisJKiBidWlsZC1hdXgvY3Jvc3Mtb3B0aW9ucy5wbDogTmV3LgorCSogZG9jL01ha2VmaWxlLmFtIChjcm9zcy1vcHRpb25zLnRleGkpOiBOZXcuCisJKiBkb2MvYmlzb24udGV4aW5mbzogVXNlIGl0LgorCisyMDA3LTExLTA0ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAZ29zdGFpLmNvbT4KKworCUdlbmVyYXRlIGJpc29uLjEgdXNpbmcgaGVscDJtYW4uCisJKiBkb2MvY29tbW9uLngsIGRvYy9iaXNvbi54OiBOZXcuCisJKiBkb2MvTWFrZWZpbGUuYW0gKGJpc29uLjEsIC54LjEpOiBOZXcuCisJVGhlIGNvZGUgaXMgdGFrZW4gZnJvbSBhdXRvY29uZi0yLjYxL21hbi9NYWtlZmlsZS5hbS4KKwkqIGNvbmZpZ3VyZS5hYzogTG9vayBmb3IgaGVscDJtYW4uCisKKzIwMDctMTEtMDQgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBnb3N0YWkuY29tPgorCisJQ29tcGxldGUgLS1oZWxwLgorCSogc3JjL2dldGFyZ3MuYyAodXNhZ2UpOiBEb2N1bWVudCAtVywgbWFrZSBpdCBjbGVhciB0aGF0IC1kLAorCS1nIGFuZCAteCBoYXZlIG9wdGlvbmFsIGFyZ3VtZW50cy4KKworMjAwNy0xMS0wNCAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGdvc3RhaS5jb20+CisKKwlGaW5kIHNoYTFzdW0gd2hlbiBuYW1lZCBnc2hhMXN1bS4KKwkqIGJvb3RzdHJhcCAoZmluZF90b29sKTogTmV3LgorCSgkU0hBMVNVTSk6IE5ldy4KKworMjAwNy0xMC0yOCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlEZXByZWNhdGUgJXB1cmUtcGFyc2VyIGFuZCBhZGQgYCVkZWZpbmUgYXBpLnB1cmUnLiAgRGlzY3Vzc2VkIHN0YXJ0aW5nCisJYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwNy0wOS9tc2cwMDAwNi5odG1sPi4KKwkqIE5FV1MgKDIuM2ErKTogTWVudGlvbi4KKwkqIGRhdGEvYmlzb24ubTQgKGI0X3B1cmVfaWYpOiBEb24ndCBkZWZpbmUgaXQgaGVyZS4KKwkqIGRhdGEvYy5tNCAoYjRfaWRlbnRpZmljYXRpb24pOiBEZXBlbmQgb24gaW5kaXZpZHVhbCBza2VsZXRvbnMgdG8KKwlkZWZpbmUgYjRfcHVyZV9mbGFnLCBiNF9wdXNoX2ZsYWcsIG9yIGI0X3B1bGxfZmxhZyBpZiB0aGV5IHVzZSB0aGUKKwl2YWx1ZXMgb2YgdGhlICVkZWZpbmUgdmFyaWFibGVzIGFwaS5wdXJlIG9yIGFwaS5wdXNoX3B1bGwuICBEZWZpbmUKKwlZWVBVUkUsIFlZUFVTSCwgYW5kIFlZUFVMTCBhY2NvcmRpbmdseS4KKwkqIGRhdGEvZ2xyLmM6IERlZmluZSBiNF9wdXJlX2lmIGJhc2VkIG9uIGAlZGVmaW5lIGFwaS5wdXJlJyB1bmxlc3MKKwlnbHIuY2MgaGFzIGFscmVhZHkgZGVmaW5lZCBiNF9wdXJlX2ZsYWcuCisJKiBkYXRhL3B1c2guYzogRGVmaW5lIGI0X3B1cmVfaWYgYmFzZWQgb24gYCVkZWZpbmUgYXBpLnB1cmUnLgorCVJlbW92ZSBZWVBVU0ggYW5kIFlZUFVMTCBzaW5jZSB0aGV5J3JlIGJhY2sgaW4gYjRfaWRlbnRpZmljYXRpb24gYWdhaW4uCisJKiBkYXRhL3lhY2MuYzogRGVmaW5lIGI0X3B1cmVfaWYgYmFzZWQgb24gYCVkZWZpbmUgYXBpLnB1cmUnLgorCSogZG9jL2Jpc29uLnRleGluZm8gKFB1cmUgRGVjbCk6IFVwZGF0ZS4KKwkoUHVzaCBEZWNsKTogVXBkYXRlLgorCShEZWNsIFN1bW1hcnkpOiBBZGQgYXBpLnB1cmUgdG8gJWRlZmluZSBlbnRyeS4KKwlJbiAlcHVyZS1wYXJzZXIgZW50cnksIHNheSBpdCdzIGRlcHJlY2F0ZWQgYW5kIHJlZmVyZW5jZSAlZGVmaW5lLgorCShQdXJlIENhbGxpbmcpOiBVcGRhdGUuCisJKEVycm9yIFJlcG9ydGluZyk6IFVwZGF0ZS4KKwkoQysrIFNjYW5uZXIgSW50ZXJmYWNlKTogVXBkYXRlLgorCShIb3cgQ2FuIEkgUmVzZXQgdGhlIFBhcnNlcik6IFVwZGF0ZS4KKwkoVGFibGUgb2YgU3ltYm9scyk6IEluICVwdXJlLXBhcnNlciBlbnRyeSwgc2F5IGl0J3MgZGVwcmVjYXRlZCBhbmQKKwlyZWZlcmVuY2UgJWRlZmluZS4KKwkqIHNyYy9nZXRhcmdzLmMgKHB1cmVfcGFyc2VyKTogUmVtb3ZlIGdsb2JhbCB2YXJpYWJsZS4KKwkqIHNyYy9nZXRhcmdzLmggKHB1cmVfcGFyc2VyKTogUmVtb3ZlIGV4dGVybi4KKwkqIHNyYy9vdXRwdXQuYyAocHJlcGFyZSk6IERvbid0IGRlZmluZSBwdXJlX2ZsYWcgbXVzY2xlLgorCSogc3JjL3BhcnNlLWdyYW0ueSAocHJvbG9ndWVfZGVjbGFyYXRpb24pOiBJbXBsZW1lbnQgJXB1cmUtcGFyc2VyIGFzIGEKKwl3cmFwcGVyIGFyb3VuZCBgJWRlZmluZSBhcGkucHVyZScuCisJKiB0ZXN0cy9jYWxjLmF0IChTaW1wbGUgTEFMUiBDYWxjdWxhdG9yKTogVXBkYXRlLgorCShTaW1wbGUgR0xSIENhbGN1bGF0b3IpOiBVcGRhdGUuCisJKiB0ZXN0cy9jeHgtdHlwZS5hdCAoR0xSOiBSZXNvbHZlIGFtYmlndWl0eSwgcHVyZSwgbm8gbG9jYXRpb25zKToKKwlVcGRhdGUuCisJKEdMUjogUmVzb2x2ZSBhbWJpZ3VpdHksIHB1cmUsIGxvY2F0aW9ucyk6IFVwZGF0ZS4KKwkoR0xSOiBNZXJnZSBjb25mbGljdGluZyBwYXJzZXMsIHB1cmUsIG5vIGxvY2F0aW9ucyk6IFVwZGF0ZS4KKwkoR0xSOiBNZXJnZSBjb25mbGljdGluZyBwYXJzZXMsIHB1cmUsIGxvY2F0aW9ucyk6IFVwZGF0ZS4KKwkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0IChVbmluaXRpYWxpemVkIGxvY2F0aW9uIHdoZW4gcmVwb3J0aW5nCisJYW1iaWd1aXR5KTogVXBkYXRlCisJKiB0ZXN0cy9pbnB1dC5hdCAoVW51c2VkICVkZWZpbmUgYXBpLnB1cmUpOiBOZXcgdGVzdCBjYXNlLgorCSogdGVzdHMvbG9jYWwuYXQgKF9BVF9CSVNPTl9PUFRJT05fUFVTSERFRlMpOiBVcGRhdGUgZGVmaW5pdGlvbiBmb3IKKwlBVF9QVVJFX0lGIGFuZCBBVF9QVVJFX0FORF9MT0NfSUYuCisJKiB0ZXN0cy9wdXNoLmF0IChQdXNoIFBhcnNpbmc6IE1lbW9yeSBMZWFrIGZvciBFYXJseSBEZWxldGlvbik6IFVwZGF0ZS4KKworMjAwNy0xMC0yOCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwklZGVmaW5lIHB1c2hfcHVsbCAtPiAlZGVmaW5lIGFwaS5wdXNoX3B1bGwuICBEaXNjdXNzZWQgc3RhcnRpbmcgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwNy0wOS9tc2cwMDAwNS5odG1sPi4KKwkqIGRhdGEvcHVzaC5jOiBFeHBlY3QgdGhlIG5ldyBuYW1lLgorCSogZGF0YS95YWNjLmM6IExpa2V3aXNlLgorCSogZG9jL2Jpc29uLnRleGluZm8gKFB1c2ggRGVjbCk6IFVwZGF0ZS4KKwkoRGVjbCBTdW1tYXJ5KTogVXBkYXRlICVkZWZpbmUgZW50cnkuCisJKFB1c2ggUGFyc2VyIEZ1bmN0aW9uKTogVXBkYXRlLgorCShQdWxsIFBhcnNlciBGdW5jdGlvbik6IFVwZGF0ZS4KKwkoUGFyc2VyIENyZWF0ZSBGdW5jdGlvbik6IFVwZGF0ZS4KKwkoUGFyc2VyIERlbGV0ZSBGdW5jdGlvbik6IFVwZGF0ZS4KKwkqIHRlc3RzL2NhbGMuYXQgKFNpbXBsZSBMQUxSIENhbGN1bGF0b3IpOiBVcGRhdGUuCisJKiB0ZXN0cy9pbnB1dC5hdCAoJWRlZmluZSBlbnVtIHZhcmlhYmxlcyk6IFVwZGF0ZS4KKwkqIHRlc3RzL3B1c2guYXQgKFB1c2ggUGFyc2luZzogTWVtb3J5IExlYWsgZm9yIEVhcmx5IERlbGV0aW9uKTogVXBkYXRlLgorCShQdXNoIFBhcnNpbmc6IE11bHRpcGxlIGltcHVyZSBpbnN0YW5jZXMpOiBVcGRhdGUuCisJKFB1c2ggUGFyc2luZzogVW5zdXBwb3J0ZWQgU2tlbGV0b25zKTogVXBkYXRlLgorCSogdGVzdHMvdG9ydHVyZS5hdCAoRXhwbG9kaW5nIHRoZSBTdGFjayBTaXplIHdpdGggQWxsb2NhKTogVXBkYXRlLgorCShFeHBsb2RpbmcgdGhlIFN0YWNrIFNpemUgd2l0aCBNYWxsb2MpOiBVcGRhdGUuCisKKwkqIE5FV1MgKDIuM2ErKTogQWRkIGFuIGVudHJ5IGZvciB0aGUgcHVzaCBwYXJzZXIsIGFuZCBjbGVhbiB1cCB0aGUKKwlvdGhlciBlbnRyaWVzIHNvbWUuCisKKzIwMDctMTAtMjcgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJRm9yIHRoZSBYTUwgb3V0cHV0J3MgdGVybWluYWwgZWxlbWVudCwgcmVuYW1lIEBudW1iZXIgdG8gQHRva2VuLW51bWJlciwKKwlhbmQgYWRkIEBzeW1ib2wtbnVtYmVyLiAgSW4gdGhlIG5vbnRlcm1pbmFsIGVsZW1lbnQsIHJlbmFtZSBAbnVtYmVyIHRvCisJQHN5bWJvbC1udW1iZXIuICBEaXNjdXNzZWQgc3RhcnRpbmcgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwNy0xMC9tc2cwMDA0MC5odG1sPi4KKwkqIGRhdGEveHNsdC94bWwydGV4dC54c2wgKHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGVybWluYWwiKTogVXBkYXRlIGZvcgorCXJlbmFtZXMuCisJKHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibm9udGVybWluYWwiKTogTGlrZXdpc2UuCisJKiBkYXRhL3hzbHQveG1sMnhodG1sLnhzbCAoeHNsOnRlbXBsYXRlIG1hdGNoPSJ0ZXJtaW5hbCIpOiBMaWtld2lzZS4KKwkoeHNsOnRlbXBsYXRlIG1hdGNoPSJub250ZXJtaW5hbCIpOiBMaWtld2lzZS4KKwkqIHNyYy9wcmludC14bWwuYyAocHJpbnRfZ3JhbW1hcik6IEltcGxlbWVudC4KKworMjAwNy0xMC0yMSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIGRhdGEveHNsdC94bWwyZG90LnhzbCAoeHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRvbWF0b24vc3RhdGUiKTogQWZ0ZXIKKwkyMDA3LTEwLTExIGNoYW5nZSwgdGhlIGNoaWxkIGVsZW1lbnRzIGhlcmUgYXJlIGl0ZW1zIG5vdCBydWxlcy4KKwkoeHNsOnRlbXBsYXRlIG1hdGNoPSJpdGVtIik6IE5ldy4KKwkoeHNsOnRlbXBsYXRlIG1hdGNoPSJydWxlIik6IFVwZGF0ZSBmb3IgbmV3IHJlZHVjZWQgaXRlbXNldC4KKwkoeHNsOnRlbXBsYXRlIG1hdGNoPSJwb2ludCIpOiBSZW1vdmUuCisJKHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZW1wdHkiKTogRm9yIGNvbnNpc3RlbmN5IHdpdGggLS1ncmFwaCwgZG9uJ3QKKwlvdXRwdXQgIi8qIGVtcHR5ICovIi4KKwkqIGRhdGEveHNsdC94bWwydGV4dC54c2wgKHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGVybWluYWwiKTogV2hlbiBpbnZva2luZworCWxpbmUtd3JhcCwgZG9uJ3QgcGFzcyBhIG5lZ2F0aXZlIHZhbHVlIGFzIGZpcnN0LWxpbmUtbGVuZ3RoIHNpbmNlIHRoaXMKKwl3b24ndCB3b3JrIHdpdGggdGhlIGZvbGxvd2luZyBjaGFuZ2VzLgorCSh4c2w6dGVtcGxhdGUgbmFtZT0ibGluZS13cmFwIik6IFNpbXBsaWZ5IHNsaWdodGx5LgorCSh4c2w6dGVtcGxhdGUgbmFtZT0id3Mtc2VhcmNoIik6IEVsaW1pbmF0ZSByZWN1cnNpb24uCisJKiBzcmMvcHJpbnRfZ3JhcGguYyAocHJpbnRfY29yZSk6IERvbid0IHByaW50IGEgcmVkdWN0aW9uJ3MgbG9va2FoZWFkCisJc2V0IG5leHQgdG8gYW4gaXRlbSB3aG9zZSBkb3QgaXMgbm90IGF0IHRoZSBlbmQgb2YgdGhlIFJIUyBldmVuIGlmIGl0CisJaGFwcGVucyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNhbWUgcnVsZS4KKworMjAwNy0xMC0xOSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlBZGQgJWRlZmluZSBsci5rZWVwX3VucmVhY2hhYmxlX3N0YXRlcy4KKwkqIE5FV1MgKDIuM2ErKTogTWVudGlvbiBpdCBpbiB0aGUgZW50cnkgZm9yIHVucmVhY2hhYmxlIHN0YXRlIHJlbW92YWwuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoRGVjbCBTdW1tYXJ5KTogTWVudGlvbiBpdCBpbiB0aGUgJWRlZmluZSBlbnRyeS4KKwkqIHNyYy9tYWluLmMgKG1haW4pOiBJbXBsZW1lbnQgaXQuCisJKiB0ZXN0cy9jb25mbGljdHMuYXQgKFVucmVhY2hhYmxlIFN0YXRlcyBBZnRlciBDb25mbGljdCBSZXNvbHV0aW9uKToKKwlFeHRlbmQgdG8gdGVzdCBpdCwgYW5kIGZpeCBhIHR5cG8uCisKKzIwMDctMTAtMTkgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBORVdTICgyLjNhKyk6IEFkZCBlbnRyeSBmb3IgcmVjZW50IC5vdXRwdXQgZmlsZSBsb29rYWhlYWQgc2V0IGZpeC4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChVbmRlcnN0YW5kaW5nKTogUmVtb3ZlIGEgYm9ndXMgbG9va2FoZWFkIHNldCBpbgorCXRoZSBleGFtcGxlIC5vdXRwdXQgdGV4dC4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKEV4dHJhIGxvb2thaGVhZCBzZXRzIGluIHJlcG9ydCk6IEltcHJvdmUgd29yZGluZworCW9mIGNvbW1lbnRzLgorCisyMDA3LTEwLTE3ICBXb2pjaWVjaCBQb2xhayAgPHBvbGFrQGdudS5vcmc+CisKKwkqIHNyYy9wcmludC14bWwuYyAocHJpbnRfZ3JhbW1hcik6IFJlbmFtZWQKKwk8dGVybWluYWw+IGFuZCA8bm9udGVybWluYWw+IGF0dHJpYnV0ZXM6CisJInR5cGUiIHRvICJudW1iZXIiIGFuZCAic3ltYm9sIiB0byAibmFtZSIuCisJKiBkYXRhL3hzbHQveG1sMnRleHQueHNsICh4c2w6dGVtcGxhdGUgbWF0Y2g9InRlcm1pbmFsIik6CisJVXNlIG5ldyBhdHRyaWJ1dGUgbmFtZXMuCisJKHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibm9udGVybWluYWwiKTogTGlrZXdpc2UuCisJKiBkYXRhL3hzbHQveG1sMnhodG1sLnhzbDogTGlrZXdpc2UuCisKKzIwMDctMTAtMTcgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBkb2MvYmlzb24udGV4aW5mbyAoQmlzb24gT3B0aW9ucyk6IEFkZCBlbnRyeSBmb3IgLS1wcmludC1kYXRhZGlyLgorCShPcHRpb24gQ3Jvc3MgS2V5KTogTGlrZXdpc2UuCisKKwkqIHNyYy9wcmludC14bWwuYyAocHJpbnRfY29yZSk6IERvbid0IHByaW50IGEgcmVkdWN0aW9uJ3MgbG9va2FoZWFkIHNldAorCW5leHQgdG8gYW4gaXRlbSB3aG9zZSBkb3QgaXMgbm90IGF0IHRoZSBlbmQgb2YgdGhlIFJIUyBldmVuIGlmIGl0CisJaGFwcGVucyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNhbWUgcnVsZS4KKwkqIHNyYy9wcmludC5jIChwcmludF9jb3JlKTogTGlrZXdpc2UuCisJKiB0ZXN0cy9jb25mbGljdHMuYXQgKFVucmVzb2x2ZWQgU1IgQ29uZmxpY3RzKTogVXBkYXRlIG91dHB1dC4KKwkoUmVzb2x2ZWQgU1IgQ29uZmxpY3RzKTogVXBkYXRlIG91dHB1dC4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKEV4dHJhIGxvb2thaGVhZCBzZXRzIGluIHJlcG9ydCk6IE5ldyB0ZXN0IGNhc2UuCisKKzIwMDctMTAtMTEgIFdvamNpZWNoIFBvbGFrICA8cG9sYWtAZ251Lm9yZz4KKworCSogc3JjL3ByaW50LXhtbC5jIChwcmludF9jb3JlKTogUmVtb3ZlIGl0ZW0gc2V0CisJcmVkdW5kYW5jeS4KKwkqIGRhdGEveHNsdC9iaXNvbi54c2wgKGJpc29uOnJ1bGVOdW1iZXIpOiBOZXcga2V5LgorCUltcHJvdmUgcHJvY2Vzc2luZyB0aW1lLiBTdWdnZXN0ZWQgYnkgSm9lbCBFLiBEZW5ueS4KKwkqIGRhdGEveHNsdC94bWwyZG90LnhzbCAoeHNsOnRlbXBsYXRlIG5hbWU9ImVzY2FwZSIpOgorCVdyaXRlIHhzbDpwYXJhbSAicmVxdWlyZWQiIGF0dHJpYnV0ZSBhcyBjb21tZW50LgorCSogZGF0YS94c2x0L3htbDJ0ZXh0LnhzbCAoeHNsOnRlbXBsYXRlIG1hdGNoPSJpdGVtIik6IE5ldy4KKwkoeHNsOnRlbXBsYXRlIG1hdGNoPSJydWxlIik6IFN1cHBvcnQgbmV3IHJlZHVjZWQgaXRlbXNldC4KKwkoeHNsOnRlbXBsYXRlIG1hdGNoPSJwb2ludCIpOiBSZW1vdmUuCisJKiBkYXRhL3hzbHQveG1sMnhodG1sLnhzbDogTGlrZXdpc2UuCisKKzIwMDctMTAtMDkgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBzcmMvZ2V0YXJncy5jICh2ZXJzaW9uKTogVXBkYXRlIGNvcHlyaWdodCB5ZWFyLgorCisyMDA3LTEwLTA5ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCU1ha2UgeG1sMmRvdC54c2wgYW5kIC0tZ3JhcGggcHJvZHVjZSB0aGUgc2FtZSBvdXRwdXQuCisJKiBkYXRhL3hzbHQveG1sMmRvdC54c2wgKHhzbDp0ZW1wbGF0ZSBtYXRjaD0icnVsZSIpOiBVc2UgYSBgJiMxMDsnCisJaW5zdGVhZCBvZiBhIGBcbicuICBUaGF0IGlzLCBkb24ndCBhZGQgZXNjYXBlcyB5ZXQgb3IgdGhleSdsbCBiZSBkb3VibHkKKwllc2NhcGVkIGxhdGVyLgorCSh4c2w6dGVtcGxhdGUgbmFtZT0ib3V0cHV0LW5vZGUiKTogVXNlIHRoZSBuZXcgZXNjYXBlIHRlbXBsYXRlIGluc3RlYWQKKwlvZiB0aGUgc3RyaW5nLXJlcGxhY2UgdGVtcGxhdGUgZGlyZWN0bHkuCisJKHhzbDp0ZW1wbGF0ZSBuYW1lPSJvdXRwdXQtZWRnZSIpOiBMaWtld2lzZS4KKwkoeHNsOnRlbXBsYXRlIG5hbWU9ImVzY2FwZSIpOiBOZXcsIGVzY2FwZXMgYmFja3NsYXNoZXMgYW5kIG5ld2xpbmVzIGluCisJYWRkaXRpb24gdG8gcXVvdGF0aW9uIG1hcmtzLgorCSogc3JjL2dyYXBodml6LmMgKHN0YXJ0X2dyYXBoLCBvdXRwdXRfbm9kZSwgb3V0cHV0X2VkZ2UpOiBBZGQKKwl3aGl0ZXNwYWNlIHRvIG91dHB1dCBmb3IgbGVnaWJpbGl0eS4KKworCU1ha2UgeG1sMnRleHQueHNsIGFuZCAtLXJlcG9ydCBwcm9kdWNlIHRoZSBzYW1lIG91dHB1dCwgYW5kIHJlbW92ZSB0aGUKKwlYTUwgImNvbmZsaWN0cyIgZWxlbWVudCBzaW5jZSBhIGNvbmZsaWN0IHN1bW1hcnkgaXMgZWFzaWx5IGV4dHJhY3RlZAorCWZyb20gdGhlIGF1dG9tYXRvbi4KKwkqIGRhdGEveHNsdC9iaXNvbi54c2w6IE5ldy4KKwkoeHNsOnRlbXBsYXRlIG1hdGNoPSJzdGF0ZSIgbW9kZT0iYmlzb246Y291bnQtY29uZmxpY3RzKTogTmV3LgorCSogZGF0YS94c2x0L3htbDJ0ZXh0LnhzbDogSW1wb3J0IGJpc29uLnhzbC4KKwkoeHNsOnRlbXBsYXRlIG1hdGNoPSJiaXNvbi14bWwtcmVwb3J0Iik6IEluc3RlYWQgb2Ygc3R5bGluZyB0aGUKKwkiY29uZmxpY3RzIiBlbGVtZW50LCBzdHlsZSB0aGUgImF1dG9tYXRvbiIgZWxlbWVudCB3aXRoIG1vZGUKKwkiY29uZmxpY3RzIi4gIFVubGlrZSB0aGUgZm9ybWVyLCB0aGUgbGF0dGVyIGxpc3RzIFMvUiBhbmQgUi9SCisJY29uZmxpY3RzIGZvciBhIHN0YXRlIG9uIHRoZSBzYW1lIGxpbmUuCisJKHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29uZmxpY3RzIik6IFJlbW92ZS4KKwkoeHNsOnRlbXBsYXRlIG1hdGNoPSJjb25mbGljdCIpOiBSZW1vdmUuCisJKHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGVybWluYWwiKTogTGluZS13cmFwIHRoZSBsaXN0IG9mIHJ1bGVzIGluIHdoaWNoCisJdGhlIHRlcm1pbmFsIGlzIHVzZWQuCisJKHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibm9udGVybWluYWwiKTogTGlrZXdpc2UgZm9yIG5vbnRlcm1pbmFscy4KKwkoeHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRvbWF0b24iIG1vZGU9ImNvbmZsaWN0cyIpOiBOZXcuCisJKHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3RhdGUiIG1vZGU9ImNvbmZsaWN0cyIpOiBOZXcuCisJKHhzbDp0ZW1wbGF0ZSBuYW1lPSJsaW5lLXdyYXAiKTogTmV3LgorCSh4c2w6dGVtcGxhdGUgbmFtZT0id3Mtc2VhcmNoIik6IE5ldy4KKwkqIGRhdGEveHNsdC94bWwyeGh0bWwueHNsOiBJbXBvcnQgYmlzb24ueHNsLgorCSh4c2w6dGVtcGxhdGUgbWF0Y2g9ImJpc29uLXhtbC1yZXBvcnQiKTogSW5zdGVhZCBvZiBzdHlsaW5nIHRoZQorCSJjb25mbGljdHMiIGVsZW1lbnQsIHN0eWxlIHRoZSAiYXV0b21hdG9uIiBlbGVtZW50IHdpdGggbW9kZQorCSJjb25mbGljdHMuIgorCSh4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvbmZsaWN0cyIpOiBSZW1vdmUuCisJKHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29uZmxpY3QiKTogUmVtb3ZlLgorCSh4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dG9tYXRvbiIgbW9kZT0iY29uZmxpY3RzIik6IE5ldy4KKwkoeHNsOnRlbXBsYXRlIG1hdGNoPSJzdGF0ZSIgbW9kZT0iY29uZmxpY3RzKTogTmV3LgorCSogc3JjL2NvbmZsaWN0cy5jIChjb25mbGljdHNfb3V0cHV0X3htbCk6IFJlbW92ZS4KKwkqIHNyYy9jb25mbGljdHMuaCAoY29uZmxpY3RzX291dHB1dF94bWwpOiBSZW1vdmUgcHJvdG90eXBlLgorCSogc3JjL3ByaW50LXhtbC5jIChwcmludF94bWwpOiBEb24ndCBpbnZva2UgY29uZmxpY3RzX291dHB1dF94bWwuCisJKiBzcmMvcHJpbnQuYyAocHJpbnRfZ3JhbW1hcik6IENvbnNpc3RlbnRseSB3cmFwIGF0IHRoZSA2NnRoIGNvbHVtbiBzbworCXRoZSBjb3JyZXNwb25kaW5nIFhTTFQgaXMgZWFzaWVyLiAgQWxzbywgbmV2ZXIgd3JhcCBiZXR3ZWVuIGEgd29yZCBhbmQKKwl0aGUgY29tbWEgdGhhdCBmb2xsb3dzIGl0LgorCisyMDA3LTEwLTA4ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUltcHJvdmUgQysrIG5hbWVzcGFjZSBzdXBwb3J0LiAgRGlzY3Vzc2VkIHN0YXJ0aW5nIGF0CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9oZWxwLWJpc29uLzIwMDctMDkvbXNnMDAwMTYuaHRtbD4uCisJKiBkYXRhL2MrKy5tNDogKGI0X25hbWVzcGFjZV9yZWYsIGI0X25hbWVzcGFjZV9vcGVuLAorCWI0X25hbWVzcGFjZV9jbG9zZSk6IE5ldyBtYWNyb3MgdGhhdCBpbnRlcnByZXQgdGhlICVkZWZpbmUgdmFyaWFibGUKKwkibmFtZXNwYWNlIiBzbyBpdHMgdmFsdWUgY2FuIGNvbnRhaW4gIjo6IiB0byBpbmRpY2F0ZSBuZXN0ZWQKKwluYW1lc3BhY2VzLgorCSogZGF0YS9nbHIuY2MgKGI0X25hbWVzcGFjZSk6IERvbid0IGRlZmluZSwgYW5kIHJlcGxhY2UgYWxsIHVzZXMgd2l0aAorCXRoZSBhYm92ZSBtYWNyb3MuCisJKiBkYXRhL2xhbHIxLmNjIChiNF9uYW1lc3BhY2UpOiBMaWtld2lzZS4KKwkqIGRhdGEvbG9jYXRpb24uY2MgKGI0X25hbWVzcGFjZSk6IExpa2V3aXNlLgorCSogZG9jL2Jpc29uLnRleGluZm8gKERlY2wgU3VtbWFyeSk6IE1vdmUgYCVkZWZpbmUgcHVzaF9wdWxsJyBlbnRyeQorCWluc2lkZSBhIG5ldyB0YWJsZSBpbiB0aGUgZ2VuZXJhbCAlZGVmaW5lIGVudHJ5LiAgRG9jdW1lbnQgYCVkZWZpbmUKKwluYW1lc3BhY2UnIHRoZXJlIGFzIHdlbGwuICBQb2ludCB0aGUgJW5hbWUtcHJlZml4IGVudHJ5IHRvIGl0IHNpbmNlIGl0CisJZXhwbGFpbnMgaXQgbW9yZSBjb21wbGV0ZWx5IGluIHRoZSBjYXNlIG9mIEMrKy4KKwkoQysrIEJpc29uIEludGVyZmFjZSk6IE1lbnRpb24gYCVkZWZpbmUgbmFtZXNwYWNlJyBpbnN0ZWFkIG9mCisJJW5hbWUtcHJlZml4LgorCShUYWJsZSBvZiBTeW1ib2xzKTogUmVtb3ZlIHRoZSBgJWRlZmluZSBwdXNoX3B1bGwnIGVudHJ5LiAgVGhlICVkZWZpbmUKKwllbnRyeSBzdWZmaWNlcy4KKwkqIHRlc3RzL2MrKy5hdCAoUmVsYXRpdmUgbmFtZXNwYWNlIHJlZmVyZW5jZXMpOiBOZXcgdGVzdCBjYXNlLgorCShBYnNvbHV0ZSBuYW1lc3BhY2UgcmVmZXJlbmNlcyk6IE5ldyB0ZXN0IGNhc2UuCisJKFN5bnRhY3RpY2FsbHkgaW52YWxpZCBuYW1lc3BhY2UgcmVmZXJlbmNlcyk6IE5ldyB0ZXN0IGNhc2UuCisJKiB0ZXN0cy9pbnB1dC5hdCAoQysrIG5hbWVzcGFjZSByZWZlcmVuY2UgZXJyb3JzKTogTmV3IHRlc3QgY2FzZS4KKworMjAwNy0xMC0wOCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlBZGQgc3luY2xpbmUgc3VwcG9ydCBhbmQgbG9jYXRpb24gYWNjZXNzb3IgdG8gaW50ZXJuYWwgJWRlZmluZQorCWludGVyZmFjZXMuCisJKiBkYXRhL2Jpc29uLm00IChiNF9wZXJjZW50X2RlZmluZV9nZXRfbG9jKTogTmV3LgorCShiNF9wZXJjZW50X2RlZmluZV9nZXRfc3luY2xpbmUpOiBOZXcuCisJKGI0X3BlcmNlbnRfZGVmaW5lX2ZsYWdfaWYpOiBVc2UgYjRfcGVyY2VudF9kZWZpbmVfZ2V0X2xvYy4KKwkoYjRfcGVyY2VudF9kZWZpbmVfZGVmYXVsdCk6IFJlY29yZCBkZWZpbmluZyBsb2NhdGlvbiBhcyBsaW5lIDEgcmF0aGVyCisJdGhhbiAwIGZvciB0aGUgc2FrZSBvZiBzeW5jaHJvbml6aW5nICNsaW5lJ3MsIGFuZCBkZWZpbmUKKwliNF9wZXJjZW50X2RlZmluZV9zeW5jbGluZShWQVJJQUJMRSkuCisJKGI0X3BlcmNlbnRfZGVmaW5lX2NoZWNrX3ZhbHVlcyk6IFVzZSBiNF9wZXJjZW50X2RlZmluZV9nZXRfbG9jLgorCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlX3N5bmNsaW5lX2dyb3cpOiBOZXcuCisJKG11c2NsZV9jb2RlX2dyb3cpOiBVc2UgbXVzY2xlX3N5bmNsaW5lX2dyb3cuCisJKG11c2NsZV9wZXJjZW50X2RlZmluZV9pbnNlcnQpOiBVc2UgbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2dldF9sb2MsIGFuZAorCWRlZmluZSBiNF9wZXJjZW50X2RlZmluZV9zeW5jbGluZShWQVJJQUJMRSkuCisJKG11c2NsZV9wZXJjZW50X2RlZmluZV9nZXRfbG9jKTogTmV3LgorCShtdXNjbGVfcGVyY2VudF9kZWZpbmVfZ2V0X3N5bmNsaW5lKTogTmV3LgorCShtdXNjbGVfcGVyY2VudF9kZWZpbmVfZmxhZ19pZik6IFVzZSBtdXNjbGVfcGVyY2VudF9kZWZpbmVfZ2V0X2xvYywgYW5kCisJcmVtb3ZlIHNvbWUgdW51c2VkIHZhcmlhYmxlcy4KKwkobXVzY2xlX3BlcmNlbnRfZGVmaW5lX2RlZmF1bHQpOiBSZWNvcmQgZGVmaW5pbmcgbG9jYXRpb24gYXMgbGluZSAxCisJcmF0aGVyIHRoYW4gMCBmb3IgdGhlIHNha2Ugb2Ygc3luY2hyb25pemluZyAjbGluZSdzLCBhbmQgZGVmaW5lCisJYjRfcGVyY2VudF9kZWZpbmVfc3luY2xpbmUoVkFSSUFCTEUpLgorCShtdXNjbGVfcGVyY2VudF9kZWZpbmVfY2hlY2tfdmFsdWVzKTogVXNlCisJbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2dldF9sb2MuCisJKiBzcmMvbXVzY2xlX3RhYi5oIChtdXNjbGVfcGVyY2VudF9kZWZpbmVfZ2V0X2xvYyk6IFByb3RvdHlwZS4KKwkobXVzY2xlX3BlcmNlbnRfZGVmaW5lX2dldF9zeW5jbGluZSk6IFByb3RvdHlwZS4KKwkqIHRlc3RzL3NrZWxldG9ucy5hdCAoJWRlZmluZSBCb29sZWFuIHZhcmlhYmxlczogaW52YWxpZCBza2VsZXRvbgorCWRlZmF1bHRzKTogVXBkYXRlIG91dHB1dCBmb3IgbG9jYXRpb24gY2hhbmdlLgorCShDb21wbGFpbmluZyBkdXJpbmcgbWFjcm8gYXJndW1lbnQgZXhwYW5zaW9uKTogRXh0ZW5kIHRvIHRlc3QKKwliNF9wZXJjZW50X2RlZmluZV9nZXRfbG9jIGFuZCBiNF9wZXJjZW50X2RlZmluZV9nZXRfc3luY2xpbmUgZXJyb3JzLgorCisyMDA3LTEwLTA3ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUZpeCBzb21lIGVycm9yLXJlcG9ydGluZyBtYWNybyBidWdzLgorCSogZGF0YS9iaXNvbi5tNCAoYjRfY2F0KTogTmV3LgorCShiNF9lcnJvciwgYjRfZXJyb3JfYXQpOiBVc2UgYjRfY2F0IHRvIHNlbmQgZXJyb3IgZGlyZWN0aXZlcyBkaXJlY3RseQorCXRvIHN0ZG91dCBzbyB0aGV5IGRvbid0IGJlY29tZSBhcmd1bWVudHMgdG8gb3RoZXIgbWFjcm9zLiAgVXBkYXRlCisJY29tbWVudHMgYW5kIGFkZCBleGFtcGxlcy4KKwkoYjRfd2FybiwgYjRfd2Fybl9hdCwgYjRfY29tcGxhaW4sIGI0X2NvbXBsYWluX2F0KTogVXBkYXRlIGNvbW1lbnRzIGFuZAorCWFkZCBleGFtcGxlcy4KKwkoYjRfZmF0YWwsIGI0X2ZhdGFsX2F0KTogTGlrZXdpc2UsIGFuZCBpbnZva2UgbTRfZXhpdCgxKSBpbW1lZGlhdGVseQorCWFmdGVyIHByaW50aW5nIHRoZSBlcnJvciBkaXJlY3RpdmUgc28gdGhhdCBNNCBkb2Vzbid0IHJlcG9ydCBzdWJzZXF1ZW50CisJcHJvYmxlbXMgdGhhdCBhcmUgaW5kdWNlZCBieSB0aGlzIHByb2JsZW0uCisJKiBzcmMvc2Nhbi1za2VsLmw6IFJlY29nbml6ZSBAYCBkaWdyYXBoIG91dHNpZGUgb2YgZGlyZWN0aXZlIGFyZ3VtZW50cworCWluc3RlYWQgb2YganVzdCBpbiB0aGVtLiAgUmVjb2duaXplIEBcbiBpbiBib3RoIHBsYWNlcy4gIEJvdGggZXhwYW5kIHRvCisJdGhlIGVtcHR5IHN0cmluZy4gIE5lZWRlZCBieSBiNF9jYXQuCisJKiB0ZXN0cy9za2VsZXRvbnMuYXQgKENvbXBsYWluaW5nIGR1cmluZyBtYWNybyBhcmd1bWVudCBleHBhbnNpb24pOgorCU5ldyB0ZXN0IGNhc2UuCisJKEZhdGFsIGVycm9ycyBtYWtlIE00IGV4aXQgaW1tZWRpYXRlbHkpOiBOZXcgdGVzdCBjYXNlLgorCisyMDA3LTEwLTA0ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUltcGxlbWVudCAtLXByaW50LWRhdGFkaXIuCisJKiBzcmMvZ2V0YXJncy5jICh1c2FnZSk6IE1lbnRpb24uCisJKFBSSU5UX0RBVEFESVJfT1BUSU9OKTogTmV3IGFub255bW91cyBlbnVtIG1lbWJlci4KKwkobG9uZ19vcHRpb25zKTogQWRkIGVudHJ5IGZvciBpdC4KKwkoZ2V0YXJncyk6IEFkZCBjYXNlIGZvciBpdCBjYWxsaW5nIGNvbXB1dGVfcGtnZGF0YWRpci4KKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3NrZWxldG9uKTogRW5jYXBzdWxhdGUgZGF0YSBkaXJlY3RvcnkKKwljb21wdXRhdGlvbiBmcm9tIGhlcmUuLi4KKwkocHJlcGFyZSk6IC4uLiBhbmQgZnJvbSBoZXJlLi4uCisJKGNvbXB1dGVfcGtnZGF0YWRpcik6IC4uLiBpbnRvIHRoaXMgbmV3IGZ1bmN0aW9uLgorCSogc3JjL291dHB1dC5oIChjb21wdXRlX3BrZ2RhdGFkaXIpOiBQcm90b3R5cGUuCisKKzIwMDctMDktMjkgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBzcmMvcHJpbnQteG1sLmMgKGVzY2FwZV9idWZzKTogTmV3IHN0YXRpYyBnbG9iYWwgdmFyaWFibGUKKwlyZXBsYWNpbmcuLi4KKwkoeG1sX2VzY2FwZV9uKTogLi4uIHRoZSBzdGF0aWMgbG9jYWwgdmFyaWFibGUgYnVmIGhlcmUuCisJKHByaW50X3htbCk6IEZyZWUgbWVtb3J5IGZvciBlc2NhcGVfYnVmcy4KKwkqIHNyYy9yZWR1Y2UuYyAocmVkdWNlX3htbCk6IFhNTC1lc2NhcGUgdGVybWluYWwgc3ltYm9sIHRhZ3MuCisKKzIwMDctMDktMjUgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJUmVwbGFjZSBgJXB1c2gtcGFyc2VyJyBhbmQgYCVwdXNoLXB1bGwtcGFyc2VyJyB3aXRoCisJYCVkZWZpbmUgcHVzaF9wdWxsICJwdXNoIicgYW5kIGAlZGVmaW5lIHB1c2hfcHVsbCAiYm90aCInLgorCWAlZGVmaW5lIHB1c2hfcHVsbCAicHVsbCInIGlzIHRoZSBkZWZhdWx0LgorCSogZG9jL2Jpc29uLnRleGluZm8gKFB1c2ggRGVjbCwgUHVzaCBQYXJzZXIgRnVuY3Rpb24sCisJUHVsbCBQYXJzZXIgRnVuY3Rpb24sIFBhcnNlciBDcmVhdGUgRnVuY3Rpb24sIFBhcnNlciBEZWxldGUgRnVuY3Rpb24pOgorCVVwZGF0ZSBkZWNsYXJhdGlvbnMuCisJKERlY2wgU3VtbWFyeSwgVGFibGUgb2YgU3ltYm9scyk6IFJlcGxhY2UgJXB1c2gtcGFyc2VyIGFuZAorCSVwdXNoLXB1bGwtcGFyc2VyIGVudHJpZXMgd2l0aCBhICVkZWZpbmUgcHVzaF9wdWxsIGVudHJ5LgorCSogZGF0YS9iaXNvbi5tNCAoYjRfcGVyY2VudF9kZWZpbmVfY2hlY2tfdmFsdWVzKTogTmV3IG1hY3JvLgorCShiNF9wdWxsX2lmLCBiNF9wdXNoX2lmLCBiNF91c2VfcHVzaF9mb3JfcHVsbF9pZik6IE1vdmUgdGhlc2UKKwlkZWZpbml0aW9ucy4uLgorCSogZGF0YS9jLm00IChiNF9pZGVudGlmaWNhdGlvbik6IC4uLiBhbmQgdGhlIFlZUFVTSCBhbmQgWVlQVUxMIGNwcAorCWRlZmluaXRpb25zLi4uCisJKiBkYXRhL3B1c2guYzogLi4uIHRvIGhlcmUgYW5kIGNvbXB1dGUgdGhlbSBmcm9tIHRoZSB2YWx1ZSBvZiB0aGUKKwklZGVmaW5lIHZhcmlhYmxlIHB1c2hfcHVsbC4KKwkqIGRhdGEvYy1za2VsLm00OiBJbnN0ZWFkIG9mIGNob29zaW5nIHRoZSBwdXNoLmMgc2tlbGV0b24gZm9yIHB1c2gKKwlwYXJzaW5nIHJlcXVlc3RzIGhlcmUuLi4KKwkqIGRhdGEveWFjYy5jOiAuLi4gaGFjayB0aGlzIHRvIHN3aXRjaCB0byBwdXNoLmMgYW55IHRpbWUKKwliNF91c2VfcHVzaF9wdWxsX2ZsYWcgb3IgdGhlICVkZWZpbmUgdmFyaWFibGUgcHVzaF9wdWxsIGlzIHNldC4gIFRoaXMKKwl3aWxsIGdvIGF3YXkgd2hlbiB3ZSBtdiBwdXNoLmMgeWFjYy5jLgorCSogZGF0YS9jKystc2tlbC5tNCwgZGF0YS9nbHIuYywgZGF0YS9qYXZhLXNrZWwubTQ6IERvbid0IHJlcG9ydCB0aGF0CisJcHVzaCBwYXJzaW5nIGlzIG5vdCBzdXBwb3J0ZWQgc2luY2UgdW51c2VkICVkZWZpbmUgdmFyaWFibGVzIGFyZQorCXJlcG9ydGVkIGFueXdheS4KKwkqIHNyYy9nZXRhcmdzLmMsIHNyYy9nZXRhcmdzLmggKHB1bGxfcGFyc2VyLCBwdXNoX3BhcnNlcik6IFJlbW92ZS4KKwkqIHNyYy9tdXNjbGVfdGFiLmggKG11c2NsZV9wZXJjZW50X2RlZmluZV9jaGVja192YWx1ZXMpOiBVcGRhdGUKKwljb21tZW50cyBmb3IgY29uc2lzdGVuY3kgd2l0aCBiNF9wZXJjZW50X2RlZmluZV9jaGVja192YWx1ZXMuCisJKiBzcmMvb3V0cHV0LmMgKHByZXBhcmUpOiBEb24ndCBpbnNlcnQgYjRfcHVsbF9mbGFnIGFuZCBiNF9wdXNoX2ZsYWcKKwltdXNjbGVzLgorCSogc3JjL3BhcnNlLWdyYW0ueSAoUEVSQ0VOVF9QVVNIX1BBUlNFUiwgUEVSQ0VOVF9QVVNIX1BVTExfUEFSU0VSKToKKwlSZW1vdmUuCisJKHByb2xvZ3VlX2RlY2xhcmF0aW9uKTogUmVtb3ZlICVwdXNoLXBhcnNlciBhbmQgJXB1c2gtcHVsbC1wYXJzZXIKKwlydWxlcy4KKwkqIHNyYy9zY2FuLWdyYW0ubCAoJXB1c2gtcGFyc2VyLCAlcHVzaC1wdWxsLXBhcnNlcik6IFJlbW92ZSBydWxlcy4KKwkqIHRlc3RzL2NhbGMuYXQ6IFVwZGF0ZSBkZWNsYXJhdGlvbnMuCisJKiB0ZXN0cy9pbnB1dC5hdCAoJWRlZmluZSBlbnVtIHZhcmlhYmxlcyk6IE5ldyB0ZXN0IGNhc2UuCisJKiB0ZXN0cy9wdXNoLmF0IChQdXNoIFBhcnNpbmc6IE1lbW9yeSBMZWFrIGZvciBFYXJseSBEZWxldGlvbik6IFVwZGF0ZQorCWRlY2xhcmF0aW9uLgorCShQdXNoIFBhcnNpbmc6IE11bHRpcGxlIGltcHVyZSBpbnN0YW5jZXMpOiBVcGRhdGUgZGVjbGFyYXRpb24uCisJKFB1c2ggUGFyc2luZzogVW5zdXBwb3J0ZWQgU2tlbGV0b25zKTogTmV3IHRlc3QgY2FzZS4KKwkqIHRlc3RzL3RvcnR1cmUuYXQgKEV4cGxvZGluZyB0aGUgU3RhY2sgU2l6ZSB3aXRoIEFsbG9jYSk6IFVwZGF0ZQorCWRlY2xhcmF0aW9uLgorCShFeHBsb2RpbmcgdGhlIFN0YWNrIFNpemUgd2l0aCBNYWxsb2MpOiBVcGRhdGUgZGVjbGFyYXRpb24uCisKKzIwMDctMDktMjQgIFdvamNpZWNoIFBvbGFrICA8cG9sYWtAZ251Lm9yZz4KKworCUFkZCBYU0xUIHRyYW5zZm9ybWF0aW9ucy4KKworCSogZGF0YS94c2x0L3htbDJkb3QueHNsOiBUcmFuc2Zvcm0gWE1MIGludG8gRE9ULgorCSogZGF0YS94c2x0L3htbDJ0ZXh0LnhzbDogVHJhbnNmb3JtIFhNTCBpbnRvIHBsYWluIHRleHQuCisJKiBkYXRhL3hzbHQveG1sMnhodG1sLnhzbDogVHJhbnNmb3JtIFhNTCBpbnRvIFhIVE1MLgorCSogZGF0YS9NYWtlZmlsZS5hbSAoeHNsdGRpcik6IE5ldyB2YXJpYWJsZS4KKwkoZGlzdF94c2x0X0RBVEEpOiBBZGQgeHNsdC8qLnhzbCBmaWxlcy4KKworMjAwNy0wOS0yMyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIHNyYy9jb25mbGljdHMuYyAobG9nX3Jlc29sdXRpb24pOiBGaXggaW5kZW50aW5nIGJ1Z3MgSSBpbnRyb2R1Y2VkLgorCVByb2JsZW0gcmVwb3J0ZWQgYnkgV29qY2llY2ggUG9sYWsuCisJKiBzcmMvcHJpbnQteG1sLmMgKHhtbF9wdXRzKTogV29yayBldmVuIGlmIExFVkVMIGV4Y2VlZHMgSU5UX01BWC8yLgorCSh4bWxfcHJpbnRmKTogVW5kbyBjaGFuZ2UgSSBtYWRlIG9uIDIxIFNlcHRlbWJlcjsgdGhhdCBpcywKKwlpbmRlbnQgMiBzcGFjZXMsIG5vdCAxLgorCisyMDA3LTA5LTIzICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCVBhY2lmeSAuL2NvbmZpZ3VyZSAtLWVuYWJsZS1nY2Mtd2FybmluZ3MuCisJKiBzcmMvcHJpbnQteG1sLmMsIHNyYy9wcmludC14bWwuaCAoeG1sX3B1dHMpOiBNYWtlIHRoaXJkIGFyZ3VtZW50CisJYGNoYXIgY29uc3QgKicgaW5zdGVhZCBvZiBgY2hhciAqJy4KKwkqIHNyYy9zdGF0ZS5jIChzdGF0ZV9ydWxlX2xvb2thaGVhZF90b2tlbnNfcHJpbnRfeG1sKTogUmVtb3ZlIHVudXNlZAorCWxvY2FsIHZhcmlhYmxlIGBzZXAnLgorCisyMDA3LTA5LTIxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogc3JjL2dyYW0uYyAocnVsZV9yaHNfcHJpbnRfeG1sKTogTm93IHN0YXRpYywgc2luY2UgaXQgaXNuJ3QgdXNlZAorCWVsc2V3aGVyZS4KKwkqIHNyYy9wcmludC14bWwuYzogUHJlZmVyICJjb25zdCIgYWZ0ZXIgdHlwZXM7IHRoYXQncyBtb3JlIGNvbnNpc3RlbnQuCisJKHhtbF9wcmludGYpOiBJbmRlbnQganVzdCAxIHNwYWNlIGZvciBsZXZlbC4KKwkoZV9jaGFyLCB4bGF0ZV9jaGFyKTogUmVtb3ZlLgorCSh4bWxfZXNjYXBlX3N0cmluZyk6IFJld3JpdGUgdG8gYXZvaWQgdW5kZWZpbmVkIGJlaGF2aW9yICh1c2VkCisJc3RvcmFnZSB0aGF0IHdhcyBmcmVlZCBmcm9tIHRoZSBzdGFjaykuCisJKHhtbF9lc2NhcGVfbik6IERvbid0IGJvdGhlciBjaGVja2luZyBmb3Igc3Vic2NyaXB0IGVycm9yLgorCisyMDA3LTA5LTIxICBXb2pjaWVjaCBQb2xhayAgPHBvbGFrQGdudS5vcmc+CisKKwlBZGQgQmlzb24gWE1MIEF1dG9tYXRvbiBSZXBvcnQuCisKKwlBZGQgc3VwcG9ydCBmb3IgYW4gLXggb3B0aW9uIHRvIGdlbmVyYXRlIGFuIFhNTCByZXBvcnQuCisJSXQgaXMgbm90IGRvY3VtZW50ZWQgeWV0LgorCSogc3JjL3ByaW50LXhtbC5jOiBOZXcgZmlsZS4KKwkqIHNyYy9wcmludC14bWwuaDogTGlrZXdpc2UuCisJKiBsaWIvdGltZXZhci5kZWYgKFRWX1hNTCk6IE5ldyB2YXIuCisJKiBzcmMvTWFrZWZpbGUuYW0gKGJpc29uX1NPVVJDRVMpOiBBZGQgcHJpbnQteG1sLmMsIHByaW50LXhtbC5oLgorCSogc3JjL2NvbmZsaWN0cy5jOiBJbmNsdWRlIHByaW50LXhtbC5oLgorCShzb2x2ZWRfY29uZmxpY3RzX3htbF9vYnN0YWNrKTogTmV3IHZhci4KKwkobG9nX3Jlc29sdXRpb24sIGNvbmZsaWN0c19zb2x2ZSwgY29uZmxpY3RzX2ZyZWUpOgorCUFkZCBzdXBwb3J0IGZvciBYTUwgcmVwb3J0LgorCShjb25mbGljdHNfb3V0cHV0X3ZhbCk6IE5ldyBmdW5jdGlvbi4KKwkqIHNyYy9jb25mbGljdHMuaCAoY29uZmxpY3RzX291dHB1dF92YWwpOiBOZXcgZGVjbC4KKwkqIHNyYy9maWxlcy5jIChzcGVjX3htbF9maWxlKTogTmV3IHZhci4KKwkoY29tcHV0ZV9vdXRwdXRfZmlsZV9uYW1lcywgb3V0cHV0X2ZpbGVfbmFtZXNfZnJlZSk6IEFkZCBYTUwgc3VwcG9ydC4KKwkqIHNyYy9maWxlcy5oIChzcGVjX3htbF9maWxlKTogTmV3IGRlY2wuCisJKiBzcmMvZ2V0YXJncy5jICh4bWxfZmxhZyk6IE5ldyB2YXIuCisJKHVzYWdlLCBzaG9ydF9vcHRpb25zLCBsb25nX29wdGlvbnMsIGdldGFyZ3MpOiBBZGQgWE1MIHN1cHBvcnQuCisJKiBzcmMvZ2V0YXJncy5oICh4bWxfZmxhZyk6IE5ldyBkZWNsLgorCSogc3JjL2dyYW0uYzogSW5jbHVkZSBwcmludC14bWwuaC4KKwkocnVsZV9saHNfcHJpbnRfeG1sLCBydWxlX3Joc19wcmludF94bWwpOgorCShncmFtbWFyX3J1bGVzX3BhcnRpYWxfcHJpbnRfeG1sLCBncmFtbWFyX3J1bGVzX3ByaW50X3htbCk6CisJTmV3IGZ1bmN0aW9ucy4KKwkqIHNyYy9ncmFtLmg6IERlY2xhcmUgZXh0ZXJuYWwgb25lcy4KKwkqIHNyYy9tYWluLmM6IEluY2x1ZGUgcHJpbnQteG1sLmguCisJKG1haW4pOiBBZGQgWE1MIHN1cHBvcnQuCisJKiBzcmMvcmVkdWNlLmM6IEluY2x1ZGUgcHJpbnQteG1sLmguCisJKHJlZHVjZV94bWwpOiBOZXcgZnVuY3Rpb24uCisJKiBzcmMvcmVkdWNlLmg6IERlY2xhcmUgaXQuCisJKiBzcmMvc3RhdGUuYzogSW5jbHVkZSBwcmludC14bWwuaC4KKwkoc3RhdGVfbmV3KTogQWRkIFhNTCBzdXBwb3J0LgorCShzdGF0ZV9ydWxlX2xvb2thaGVhZF90b2tlbnNfcHJpbnRfeG1sKTogTmV3IGZ1bmN0aW9uLgorCSogc3JjL3N0YXRlLmg6IERlY2xhcmUgaXQuCisJKHN0cnVjdCBzdGF0ZSk6IE5ldyBtZW1iZXIgc29sdmVkX2NvbmZsaWN0c194bWwuCisJKiBzcmMvc3ltdGFiLmMgKHN5bWJvbF9jbGFzc19nZXRfc3RyaW5nKTogTmV3IGZ1bmN0aW9uLgorCSogc3JjL3N5bXRhYi5oOiBEZWNsYXJlIGl0LgorCisyMDA3LTA5LTIxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogR05VbWFrZWZpbGU6IFN3aXRjaCB0byBjb3JldXRpbHMncyB2ZXJzaW9uLgorCSogYm9vdHN0cmFwOiBMaWtld2lzZS4KKwkqIE1ha2VmaWxlLmNmZzogQWRqdXN0IHRvIG5ldyBHTlVtYWtlZmlsZS4KKwkqIFJFQURNRS1oYWNraW5nOiBMaWtld2lzZS4KKworCUltcG9ydCBmcm9tIGdudWxpYjoKKworCTIwMDYtMDgtMTggIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCQkgICAgQnJ1bm8gSGFpYmxlICA8YnJ1bm9AY2xpc3Aub3JnPgorCisJKiBtNC9iaXNvbi1pMThuLm00IChCSVNPTl9JMThOKTogQWxzbyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgeWFjYyBleGlzdHMKKwlhbmQgaXMgYSBzY3JpcHQgdGhhdCBpbnZva2VzIGJpc29uLiBUaWdodGVuIHRoZSBjb2RlLiBBZGQgY29tbWVudHMuCisKKzIwMDctMDgtMjggIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJU3BlbGwgImJvb2xlYW4iIGFzICJCb29sZWFuIi4gIFJlcG9ydGVkIGJ5IEFraW0gRGVtYWlsbGUuCisJKiBkYXRhL2Jpc29uLm00IChiNF9wZXJjZW50X2RlZmluZV9mbGFnX2lmKTogRml4IGNvbXBsYWludC4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChEZWNsIFN1bW1hcnkpOiBGaXguCisJKiBzcmMvbXVzY2xlX3RhYi5jIChtdXNjbGVfcGVyY2VudF9kZWZpbmVfZmxhZ19pZik6IEZpeCBjb21wbGFpbnQuCisJKiB0ZXN0cy9pbnB1dC5hdCAoQm9vbGVhbiAlZGVmaW5lIHZhcmlhYmxlcyk6IFVwZGF0ZSBvdXRwdXQuCisJKiB0ZXN0cy9za2VsZXRvbnMuYXQgKCVkZWZpbmUgYm9vbGVhbiB2YXJpYWJsZXM6IGludmFsaWQgc2tlbGV0b24KKwlkZWZhdWx0cyk6IFJlbmFtZSB0by4uLgorCSglZGVmaW5lIEJvb2xlYW4gdmFyaWFibGVzOiBpbnZhbGlkIHNrZWxldG9uIGRlZmF1bHRzKTogLi4uIHRoaXMgYW5kCisJdXBkYXRlIG91dHB1dC4KKworMjAwNy0wOC0xNyAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlJbiBpbXB1cmUgcHVzaCBtb2RlLCBkb24ndCBhbGxvdyBtb3JlIHRoYW4gb25lIHl5cHN0YXRlIHRvIGJlIGFsbG9jYXRlZAorCXNpbmNlIG11bHRpcGxlIGltcHVyZSBwYXJzZXJzIHdvdWxkIGNvcnJ1cHQgeXluZXJycy4KKwkqIGRhdGEvcHVzaC5jICh5eXBzdGF0ZV9hbGxvY2F0ZWQpOiBOZXcgc3RhdGljIGdsb2JhbCB2YXJpYWJsZQorCWluaXRpYWxpemVkIHRvIDAuCisJKHl5cHVsbF9wYXJzZSk6IElmIHl5cHN0YXRlX25ldyByZXR1cm5zIDAsIGRvbid0IHJlcG9ydCBpdCBhcyBtZW1vcnkKKwlleGhhdXN0aW9uIGlmIHl5cHN0YXRlX2FsbG9jYXRlZCBpcyAxLCBidXQgc3RpbGwgcmV0dXJuIDIuCisJKHl5cHN0YXRlX25ldyk6IEludm9rZSB5eWVycm9yIGFuZCByZXR1cm4gMCBpZiB5eXBzdGF0ZV9hbGxvY2F0ZWQgaXMKKwlhbHJlYWR5IDEuICBPdGhlcndpc2UsIHNldCBpdCB0byAxLgorCSh5eXBzdGF0ZV9kZWxldGUpOiBTZXQgaXQgdG8gMC4KKwkqIHRlc3RzL3B1c2guYXQgKFB1c2ggUGFyc2luZzogTXVsdGlwbGUgaW1wdXJlIGluc3RhbmNlcyk6IE5ldyB0ZXN0CisJY2FzZS4KKworMjAwNy0wOC0xNyAgQm9iIFJvc3NpICA8Ym9iQGJyYXNrby5uZXQ+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChQdXNoIERlY2wpOiBEb2N1bWVudCB0aGUgcHVzaCBwYXJzZXIuCisJKFRhYmxlIG9mIFN5bWJvbHMpOiBEaXR0by4KKwkoUHVyZSBEZWNsKTogRGl0dG8uCisJKERlY2wgU3VtbWFyeSk6IERpdHRvLgorCShNdWx0aXBsZSBQYXJzZXJzLCBQdXNoIFBhcnNlciBGdW5jdGlvbiwgUHVsbCBQYXJzZXIgRnVuY3Rpb24sCisJUGFyc2VyIENyZWF0ZSBGdW5jdGlvbiwgUGFyc2VyIERlbGV0ZSBGdW5jdGlvbik6CisJQWRkIG5ldyBwdXNoIHBhcnNlciBzeW1ib2xzLgorCShUYWJsZSBvZiBTeW1ib2xzKTogRG9jdW1lbnQgcHVzaC1wYXJzZXIsIHB1c2gtcHVsbC1wYXJzZXIsCisJeXlwdXNoX3BhcnNlLCB5eXB1bGxfcGFyc2UsIHl5cHN0YXRlX25ldyBhbmQgeXlwc3RhdGVfZGVsZXRlLgorCisyMDA3LTA4LTE1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCVVwZGF0ZSB0byBHUEx2My4KKwkqIGRvYy9ncGwtMy4wLnRleGk6IE5ldyBmaWxlLgorCSogZG9jL2dwbC50ZXhpOiBSZW1vdmUuCisJKiBDT1BZSU5HLCBHTlVtYWtlZmlsZSwgSEFDS0lORywgTWFrZWZpbGUuYW0sIE1ha2VmaWxlLmNmZzoKKwkqIE1ha2VmaWxlLm1haW50LCBORVdTLCBQQUNLQUdJTkcsIFJFQURNRSwgUkVBRE1FLWFscGhhOgorCSogUkVBRE1FLWhhY2tpbmcsIFRPRE8sIGJvb3RzdHJhcCwgYm9vdHN0cmFwLmNvbmY6CisJKiBjb25maWd1cmUuYWMsIGRhdGEvTWFrZWZpbGUuYW0sIGRhdGEvUkVBRE1FLCBkYXRhL2Jpc29uLm00OgorCSogZGF0YS9jKystc2tlbC5tNCwgZGF0YS9jKysubTQsIGRhdGEvYy1za2VsLm00LCBkYXRhL2MubTQ6CisJKiBkYXRhL2dsci5jLCBkYXRhL2dsci5jYywgZGF0YS9qYXZhLXNrZWwubTQsIGRhdGEvamF2YS5tNDoKKwkqIGRhdGEvbGFscjEuY2MsIGRhdGEvbGFscjEuamF2YSwgZGF0YS9sb2NhdGlvbi5jYzoKKwkqIGRhdGEvcHVzaC5jLCBkYXRhL3lhY2MuYywgZGF0YS9tNHN1Z2FyL200c3VnYXIubTQ6CisJKiBkamdwcC9NYWtlZmlsZS5tYWludCwgZGpncHAvUkVBRE1FLmluLCBkamdwcC9jb25maWcuYmF0OgorCSogZGpncHAvY29uZmlnLnNlZCwgZGpncHAvY29uZmlnLnNpdGUsIGRqZ3BwL2NvbmZpZ19oLnNlZDoKKwkqIGRqZ3BwL2RqdW5wYWNrLmJhdCwgZGpncHAvc3VicGlwZS5jLCBkamdwcC9zdWJwaXBlLmg6CisJKiBkamdwcC90ZXN0c3VpdGUuc2VkLCBkb2MvTWFrZWZpbGUuYW0sIGRvYy9iaXNvbi50ZXhpbmZvOgorCSogZG9jL2ZkbC50ZXhpLCBkb2MvcmVmY2FyZC50ZXgsIGV0Yy9NYWtlZmlsZS5hbSwgZXRjL1JFQURNRToKKwkqIGV0Yy9iZW5jaC5wbC5pbiwgZXhhbXBsZXMvTWFrZWZpbGUuYW0sIGV4YW1wbGVzL2V4dGV4aToKKwkqIGV4YW1wbGVzL2NhbGMrKy9NYWtlZmlsZS5hbSwgbGliL01ha2VmaWxlLmFtLCBsaWIvYWJpdHNldC5jOgorCSogbGliL2FiaXRzZXQuaCwgbGliL2JiaXRzZXQuaCwgbGliL2JpdHNldC5jLCBsaWIvYml0c2V0Lmg6CisJKiBsaWIvYml0c2V0X3N0YXRzLmMsIGxpYi9iaXRzZXRfc3RhdHMuaCwgbGliL2JpdHNldHYtcHJpbnQuYzoKKwkqIGxpYi9iaXRzZXR2LXByaW50LmgsIGxpYi9iaXRzZXR2LmMsIGxpYi9iaXRzZXR2Lmg6CisJKiBsaWIvZWJpdHNldC5jLCBsaWIvZWJpdHNldC5oLCBsaWIvZ2V0LWVycm5vLmM6CisJKiBsaWIvZ2V0LWVycm5vLmgsIGxpYi9sYml0c2V0LmMsIGxpYi9sYml0c2V0Lmg6CisJKiBsaWIvbGliaWJlcnR5LmgsIGxpYi9tYWluLmMsIGxpYi9zdWJwaXBlLmMsIGxpYi9zdWJwaXBlLmg6CisJKiBsaWIvdGltZXZhci5jLCBsaWIvdGltZXZhci5kZWYsIGxpYi90aW1ldmFyLmg6CisJKiBsaWIvdmJpdHNldC5jLCBsaWIvdmJpdHNldC5oLCBsaWIveXllcnJvci5jOgorCSogbTQvYy13b3JraW5nLm00LCBtNC9jeHgubTQsIG00L200Lm00LCBtNC9zdWJwaXBlLm00OgorCSogbTQvdGltZXZhci5tNCwgc3JjL0xSMC5jLCBzcmMvTFIwLmgsIHNyYy9NYWtlZmlsZS5hbToKKwkqIHNyYy9hc3NvYy5jLCBzcmMvYXNzb2MuaCwgc3JjL2Nsb3N1cmUuYywgc3JjL2Nsb3N1cmUuaDoKKwkqIHNyYy9jb21wbGFpbi5jLCBzcmMvY29tcGxhaW4uaCwgc3JjL2NvbmZsaWN0cy5jOgorCSogc3JjL2NvbmZsaWN0cy5oLCBzcmMvZGVyaXZlcy5jLCBzcmMvZGVyaXZlcy5oLCBzcmMvZmlsZXMuYzoKKwkqIHNyYy9maWxlcy5oLCBzcmMvZmxleC1zY2FubmVyLmgsIHNyYy9nZXRhcmdzLmM6CisJKiBzcmMvZ2V0YXJncy5oLCBzcmMvZ3JhbS5jLCBzcmMvZ3JhbS5oLCBzcmMvZ3JhcGh2aXouYzoKKwkqIHNyYy9sYWxyLmMsIHNyYy9sYWxyLmgsIHNyYy9sb2NhdGlvbi5jLCBzcmMvbG9jYXRpb24uaDoKKwkqIHNyYy9tYWluLmMsIHNyYy9tdXNjbGVfdGFiLmMsIHNyYy9tdXNjbGVfdGFiLmg6CisJKiBzcmMvbnVsbGFibGUuYywgc3JjL251bGxhYmxlLmgsIHNyYy9vdXRwdXQuYywgc3JjL291dHB1dC5oOgorCSogc3JjL3BhcnNlLWdyYW0uYywgc3JjL3BhcnNlLWdyYW0uaCwgc3JjL3BhcnNlLWdyYW0ueToKKwkqIHNyYy9wcmludC5jLCBzcmMvcHJpbnQuaCwgc3JjL3ByaW50X2dyYXBoLmM6CisJKiBzcmMvcHJpbnRfZ3JhcGguaCwgc3JjL3JlYWRlci5jLCBzcmMvcmVhZGVyLmgsIHNyYy9yZWR1Y2UuYzoKKwkqIHNyYy9yZWR1Y2UuaCwgc3JjL3JlbGF0aW9uLmMsIHNyYy9yZWxhdGlvbi5oOgorCSogc3JjL3JldmlzaW9uLmgsIHNyYy9zY2FuLWNvZGUuaCwgc3JjL3NjYW4tY29kZS5sOgorCSogc3JjL3NjYW4tZ3JhbS5oLCBzcmMvc2Nhbi1ncmFtLmwsIHNyYy9zY2FuLXNrZWwuaDoKKwkqIHNyYy9zY2FuLXNrZWwubCwgc3JjL3N0YXRlLmMsIHNyYy9zdGF0ZS5oLCBzcmMvc3ltbGlzdC5jOgorCSogc3JjL3N5bWxpc3QuaCwgc3JjL3N5bXRhYi5jLCBzcmMvc3ltdGFiLmgsIHNyYy9zeXN0ZW0uaDoKKwkqIHNyYy90YWJsZXMuYywgc3JjL3RhYmxlcy5oLCBzcmMvdW5pcXN0ci5jLCBzcmMvdW5pcXN0ci5oOgorCSogdGVzdHMvTWFrZWZpbGUuYW0sIHRlc3RzL2FjdGlvbnMuYXQsIHRlc3RzL2MrKy5hdDoKKwkqIHRlc3RzL2NhbGMuYXQsIHRlc3RzL2NvbmZsaWN0cy5hdCwgdGVzdHMvY3h4LXR5cGUuYXQ6CisJKiB0ZXN0cy9leGlzdGluZy5hdCwgdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQ6CisJKiB0ZXN0cy9oZWFkZXJzLmF0LCB0ZXN0cy9pbnB1dC5hdCwgdGVzdHMvamF2YS5hdDoKKwkqIHRlc3RzL2xvY2FsLmF0LCB0ZXN0cy9vdXRwdXQuYXQsIHRlc3RzL3B1c2guYXQ6CisJKiB0ZXN0cy9yZWR1Y2UuYXQsIHRlc3RzL3JlZ3Jlc3Npb24uYXQsIHRlc3RzL3NldHMuYXQ6CisJKiB0ZXN0cy9za2VsZXRvbnMuYXQsIHRlc3RzL3N5bmNsaW5lcy5hdCwgdGVzdHMvdGVzdHN1aXRlLmF0OgorCSogdGVzdHMvdG9ydHVyZS5hdDoKKwlVcGRhdGUgdG8gR1BMdjMuCisKKzIwMDctMDgtMTEgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJR2V0IHJpZCBvZiBicm9rZW4gJW5vLXBhcnNlciwgLW4sIGFuZCAtLW5vLXBhcnNlciBpbXBsZW1lbnRhdGlvbiBhbmQKKwlkb2N1bWVudGF0aW9uLgorCSogVE9ETzogRG9uJ3QgbWVudGlvbiB0aGVtLgorCSogZG9jL2Jpc29uLjE6IExpa2V3aXNlLgorCSogZG9jL2Jpc29uLnRleGluZm8gKERlY2wgU3VtbWFyeSk6IExpa2V3aXNlLgorCShCaXNvbiBPcHRpb25zKTogTGlrZXdpc2UuCisJKE9wdGlvbiBDcm9zcyBLZXkpOiBMaWtld2lzZS4KKwkqIHNyYy9nZXRhcmdzLmMgKG5vX3BhcnNlcl9mbGFnKTogUmVtb3ZlIGdsb2JhbCB2YXJpYWJsZS4KKwkodXNhZ2UpOiBEb24ndCBwcmludCBkZXNjcmlwdGlvbiBvZiAtbiBhbmQgLS1uby1wYXJzZXIuCisJKGxvbmdfb3B0aW9ucyk6IFJlbW92ZSAtLW5vLXBhcnNlciBlbnRyeSBoZXJlLgorCShnZXRhcmdzKTogUmVtb3ZlIC1uIGNhc2UgaW4gdGhlIHN3aXRjaCBoZXJlLgorCSogc3JjL2dldGFyZ3MuaCAobm9fcGFyc2VyX2ZsYWcpOiBSZW1vdmUgZXh0ZXJuLgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoV2ViMmMgQWN0aW9ucyk6IFJlbW92ZSBjb21tZW50IHRoYXQgbWVudGlvbnMKKwktLW5vLXBhcnNlci4KKworMjAwNy0wOC0xMSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIHRlc3RzL3B1c2guYXQgKFB1c2ggUGFyc2luZzogTWVtb3J5IExlYWsgZm9yIEVhcmx5IERlbGV0aW9uKTogRG8gbm90CisJbmFtZSB1c2VyIHZhcmlhYmxlcyBzdGFydGluZyB3aXRoIGB5eScuICBKdXN0IHBhc3MgTlVMTCBpbnN0ZWFkIG9mIGEKKwlkdW1teSBsb2NhbCAmeXlsdmFsIHRvIHl5cHVzaF9wYXJzZS4KKwkqIHRlc3RzL3RvcnR1cmUuYXQgKEFUX0RBVEFfU1RBQ0tfVE9SVFVSRSk6IERvIG5vdCBuYW1lIHVzZXIgdmFyaWFibGVzCisJc3RhcnRpbmcgd2l0aCBgeXknLgorCisyMDA3LTA4LTAzICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogZGF0YS95YWNjLmMgKHl5ZXhoYXVzdGVkbGFiKTogRGVmaW5lIGl0IHdoZW4gWVlFUlJPUl9WRVJCT1NFIGlzCisJdHJ1ZSBzaW5jZSBpdCdzIHRoZW4gYWx3YXlzIHVzZWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHl5b3ZlcmZsb3cgaXMKKwlkZWZpbmVkLiAgUmVwb3J0ZWQgYnkgQ2hyaXN0aWFuIEJ1cmdlciBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDctMDcvbXNnMDAwMzEuaHRtbD4uCisJKiBUSEFOS1M6IEFkZCBDaHJpc3RpYW4gQnVyZ2VyLgorCisJKiBDaGFuZ2VMb2c6IEZvciBjaGFuZ2VzIGluIGRvYy9iaXNvbi50ZXhpbmZvLCBjb25zaXN0ZW50bHkgcmVmZXJlbmNlCisJbm9kZSBuYW1lczogc2F5ICJEZWNsIFN1bW1hcnkiIG5vdCAiQmlzb24gRGVjbGFyYXRpb24gU3VtbWFyeSIuCisKKzIwMDctMDctMjggIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBzcmMvbXVzY2xlX3RhYi5jIChtdXNjbGVfcGVyY2VudF9kZWZpbmVfZmxhZ19pZik6IEluIG9yZGVyIHRvCisJZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiBoYXMgYWxyZWFkeSBjb21wbGFpbmVkIGFib3V0IGFuIGludmFsaWQKKwl2YWx1ZSBmb3IgYSAlZGVmaW5lIGJvb2xlYW4gdmFyaWFibGUsIGRvbid0IGNoZWNrIHdoZXRoZXIgQmlzb24gaGFzCisJZXZlciBleGFtaW5lZCB0aGUgdmFsdWUuICBBcyB3cml0dGVuLCB0aGUgY2hlY2sgd2FzIGEgdGF1dG9sb2d5LgorCUluc3RlYWQsIHJlY29yZCBhbmQgY2hlY2sgZm9yIHRoaXMgY29tcGxhaW50IHVzaW5nIGEgc2VwYXJhdGUgbXVzY2xlLgorCisyMDA3LTA3LTI3ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUZpeCBwdXNoIHBhcnNpbmcgbWVtb3J5IGxlYWsgcmVwb3J0ZWQgYnkgQnJhbmRvbiBMdWNpYSBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDctMDcvbXNnMDAwMzIuaHRtbD4uCisJKiBUSEFOS1M6IEFkZCBCcmFuZG9uIEx1Y2lhLgorCSogZGF0YS9wdXNoLmMgKHl5cHN0YXRlX2RlbGV0ZSk6IEZyZWUgdGhlIHN0YWNrIGlmIGl0IHdhcyByZWFsbG9jYXRlZAorCWJ1dCB0aGUgcGFyc2UgbmV2ZXIgY29tcGxldGVkIGFuZCB0aHVzIGZyZWVkIGl0LgorCSogdGVzdHMvTWFrZWZpbGUuYW0gKFRFU1RTVUlURV9BVCk6IEFkZCBwdXNoLmF0LgorCSogdGVzdHMvdGVzdHN1aXRlLmF0OiBJbmNsdWRlIHB1c2guYXQuCisJKiB0ZXN0L3B1c2guYXQ6IE5ldy4KKwkoUHVzaCBQYXJzaW5nOiBNZW1vcnkgTGVhayBmb3IgRWFybHkgRGVsZXRpb24pOiBOZXcgdGVzdCBjYXNlLgorCisyMDA3LTA3LTE3ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUltcHJvdmUgaGFuZGxpbmcgb2YgbXVsdGlwbGUgUy9SIGNvbmZsaWN0cyBpbiB0aGUgc2FtZSBzdGF0ZSBhbmQgb2YgUy9SCisJY29uZmxpY3RzIGludm9sdmluZyBtdWx0aXBsZSByZWR1Y3Rpb25zLgorCSogc3JjL2NvbmZsaWN0cy5jIChyZXNvbHZlX3NyX2NvbmZsaWN0KTogRG9uJ3QgYXNzaWduIHRoZSBlcnJvciBhY3Rpb24KKwlzZXQgZm9yIGEgc3RhdGUgaGVyZSBvciBCaXNvbiB3aWxsIGFib3J0IGlmIGl0IGlzIHJlYXNzaWduZWQgb24gYQorCWxhdGVyIGNvbmZsaWN0ZWQgcmVkdWN0aW9uIGluIHRoZSBzYW1lIHN0YXRlLgorCVNpbWlsYXJseSwgZG9uJ3QgZmluYWxpemUgYW5kIGFzc2lnbiB0aGUgc29sdmVkIGNvbmZsaWN0cyByZXBvcnQgaGVyZQorCW9yIGl0IHdpbGwgYmUgbG9zdCBpZiBpdCBpcyByZWFzc2lnbmVkIG9uIGEgbGF0ZXIgY29uZmxpY3RlZCByZWR1Y3Rpb24KKwlpbiB0aGUgc2FtZSBzdGF0ZS4KKwkoc2V0X2NvbmZsaWN0cyk6IEluc3RlYWQsIGFzc2lnbiB0aGVtIGJvdGggaGVyZSBhZnRlciBhbGwgUy9SIGNvbmZsaWN0cworCWluIHRoZSBzdGF0ZSBoYXZlIGJlZW4gZnVsbHkgZXhhbWluZWQuCisJKiBzcmMvcHJpbnQuYyAoc2hpZnRfc2V0KTogUmVuYW1lIHRvLi4uCisJKG5vX3JlZHVjZV9zZXQpOiAuLi4gdGhpcy4KKwkocHJpbnRfcmVkdWN0aW9ucyk6IFVwZGF0ZSBmb3IgcmVuYW1lLCBhbmQgYWRkICVub25hc3NvYyBlcnJvciBhY3Rpb24KKwl0b2tlbnMgdG8gbm9fcmVkdWNlX3NldCBzbyB0aGF0LCB3aGVuIHByaW50aW5nIHRoZSBmaXJzdCByZW1haW5pbmcKKwlyZWR1Y3Rpb24gb24gYW4gZXJyb3IgYWN0aW9uIHRva2VuLCB0aGUgcmVkdWN0aW9uIGlzIGVuY2xvc2VkIGluCisJYnJhY2tldHMuCisJKHByaW50X3Jlc3VsdHMpOiBVcGRhdGUgZm9yIHJlbmFtZS4KKwkqIHRlc3RzL2NvbmZsaWN0cy5hdCAoU29sdmVkIGNvbmZsaWN0cyByZXBvcnQgZm9yIG11bHRpcGxlIHJlZHVjdGlvbnMKKwlpbiBhIHN0YXRlKTogTmV3IHRlc3QgY2FzZS4KKwkoJW5vbmFzc29jIGVycm9yIGFjdGlvbnMgZm9yIG11bHRpcGxlIHJlZHVjdGlvbnMgaW4gYSBzdGF0ZSk6IE5ldyB0ZXN0CisJY2FzZS4KKworCSogc3JjL21haW4uYyAobWFpbik6IERvbid0IGRlcGVuZCBvbiBDOTkgZmVhdHVyZXMuCisKKzIwMDctMDctMTYgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBidWlsZC1hdXgvLmN2c2lnbm9yZTogQWRkIGNvbXBpbGUuCisJKiBsaWIvLmN2c2lnbm9yZTogQWRkIGNoYXJzZXQuYWxpYXMsIHJlZi1hZGQuc2VkLCByZWYtZGVsLnNlZCwgYW5kCisJdW5pd2lkdGguCisKKzIwMDctMDctMTAgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBib290c3RyYXAgKHNsdXJwKTogQ3JlYXRlIHRhcmdldCBkaXJlY3RvcmllcyB0aGF0IGRvbid0IGV4aXN0LgorCVNwZWNpZmljYWxseSwgd2UgbmVlZCBsaWIvdW5pd2lkdGgvIGJlY2F1c2Ugb2YgcmVjZW50IEdudWxpYiBjaGFuZ2VzLgorCisyMDA3LTA3LTA5ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogTFIwLmMgKG5ld19pdGVtc2V0cyk6IEZpeCB3b3JkaW5nIGluIGNvbW1lbnRzOiBzYXkgaXRlbSBpbmRleCByYXRoZXIKKwl0aGFuIGl0ZW0gbnVtYmVyLgorCSogY2xvc3VyZS5jIChjbG9zdXJlKTogTGlrZXdpc2UuCisJKiBzdGF0ZS5oIChyZWR1Y3Rpb25zKTogQ29tbWVudCBzb3J0aW5nIG9mIHJ1bGVzLgorCShzdGF0ZSk6IENvbW1lbnQgc29ydGluZyBvZiBpdGVtcy4KKworMjAwNy0wNy0wMiAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlGaXggQysrIHRlc3QgY2FzZXMgYWZ0ZXIgcmVjZW50IEdudWxpYiBjaGFuZ2VzLiAgRGlzY3Vzc2VkIHN0YXJ0aW5nIGF0CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwNy0wNy9tc2cwMDAwMC5odG1sPi4KKwkqIGV4YW1wbGVzL2NhbGMrKy9NYWtlZmlsZS5hbSAoREVGQVVMVF9JTkNMVURFUyk6IE92ZXJyaWRlIEF1dG9tYWtlJ3MKKwlkZWZpbml0aW9uIGluIG9yZGVyIHRvIGF2b2lkIEdudWxpYiBoZWFkZXJzIHNpbmNlIHdlIGRvbid0IHVzZSBjb25maWcuaAorCWhlcmUuCisJKiB0ZXN0cy9vdXRwdXQuYXQgKEFUX0NIRUNLX09VVFBVVF9GSUxFX05BTUUpOiBVc2UgQVRfREFUQV9HUkFNTUFSCisJcmF0aGVyIHRoYW4gQVRfREFUQSBzbyB0aGF0IGNvbmZpZy5oIGlzIGluY2x1ZGVkLgorCisyMDA3LTA3LTAxICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogZGF0YS9nbHIuYyAoeXlfeXlwc3RhY2ssIHl5cHN0YXRlcywgeXlwZHVtcHN0YWNrKTogVXNlIFlZRlBSSU5URgorCWluc3RlYWQgb2YgZnByaW50Zi4gIEd1YXJkIHRoZXNlIGZ1bmN0aW9ucyB3aXRoICNpZiBZWURFQlVHIGluc3RlYWQgb2YKKwkjaWZkZWYgWVlERUJVRyBmb3IgY29uc2lzdGVuY3kgd2l0aCBhbGwgb3RoZXIgdXNlcyBvZiBZWURFQlVHIGluIEJpc29uCisJYW5kIHNvIHRoYXQgWVlGUFJJTlRGIGlzIGd1YXJhbnRlZWQgdG8gYmUgZGVmaW5lZCBoZXJlLgorCisyMDA3LTA1LTI5ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlX3BlcmNlbnRfZGVmaW5lX2ludmFsaWRfdmFsdWUpOiBSZXBsYWNlCisJd2l0aC4uLgorCShtdXNjbGVfcGVyY2VudF9kZWZpbmVfY2hlY2tfdmFsdWVzKTogLi4uIHRoaXMgbW9yZSBoZWxwZnVsIGZ1bmN0aW9uLgorCUFnYWluLCBpdCdzIG5vdCB1c2VkIHlldCwgYnV0IGl0IHdpbGwgYmUuCisJKiBzcmMvbXVzY2xlX3RhYi5oOiBMaWtld2lzZS4KKworCUltcHJvdmUgc29tZSBjb21tZW50cyBpbiBwYXJzZXIgdGFibGUgY29uc3RydWN0aW9uLgorCSogc3JjL0xSMC5jIChuZXdfaXRlbXNldHMpOiBFeHBsYWluIHNvcnRpbmcgb2YgaXRlbXNldCBhbmQga2VybmVsX2Jhc2UuCisJKGdlbmVyYXRlX3N0YXRlcyk6IERvbid0IG1lbnRpb24gcnVsZXNldCwgd2hpY2ggaXMgaW50ZXJuYWwgdG8gY2xvc3VyZS4KKwkqIHNyYy9jbG9zdXJlLmMgKGNsb3N1cmUpOiBFeHBsYWluIHNvcnRpbmcgb2YgY29yZSBhbmQgaXRlbXNldCwgd2hpY2gKKwlpcyByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbiB0byBiZWhhdmUgY29ycmVjdGx5LgorCSogc3JjL2Nsb3N1cmUuaCAoY2xvc3VyZSk6IE1lbnRpb24gc29ydGluZy4KKworMjAwNy0wNS0yOCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIHNyYy9sYWxyLmMgKHN0YXRlX2xvb2thaGVhZF90b2tlbnNfY291bnQpOiBGb3IgY29kZSByZWFkYWJpbGl0eSwKKwltb3ZlIHRoZSBjaGVjayBmb3IgZGlzYWJsZWQgdHJhbnNpdGlvbnMgdG8gYW4gYXZlciBzaW5jZSBjb25mbGljdAorCXJlc29sdXRpb24gaGFzbid0IGhhcHBlbmVkIHlldC4KKworCSogc3JjL2xhbHIuYyAoc3RhdGVfbG9va2FoZWFkX3Rva2Vuc19jb3VudCk6IFJlbW92ZSB0aGUgY2hlY2sgdGhhdAorCWxhYmVscyBhIHN0YXRlIGFzIGluY29uc2lzdGVudCBqdXN0IGJlY2F1c2UgaXQgaGFzIGVycm9yIHRyYW5zaXRpb25zLgorCVRoZSBvcmlnaW5hbCBmb3JtIG9mIHRoaXMgY2hlY2sgYXBwZWFyZWQgaW4gcmV2aXNpb24gMS4xIG9mIGxhbHIuYywKKwl3aGljaCB3YXMgY29tbWl0dGVkIG9uIDE5OTEtMTItMjEuICBOb3cgKGF0IGxlYXN0KSwgY2hhbmdpbmcgdGhlCisJY29uc2lzdGVuY3kgbGFiZWwgb24gc3VjaCBhIHN0YXRlIGFwcGVhcnMgdG8gaGF2ZSBubyB1c2VmdWwgZWZmZWN0IGluCisJYW55IG9mIHRoZSBwbGFjZXMgaXQgaXMgZXhhbWluZWQsIHdoaWNoIEkgZW51bWVyYXRlIGJlbG93LiAgVGhlIGtleQorCXBvaW50IHRvIHVuZGVyc3RhbmRpbmcgZWFjaCBpdGVtIGluIHRoaXMgZW51bWVyYXRpb24gaXMgdGhhdCBhIHN0YXRlCisJd2l0aCBhbiBlcnJvciB0cmFuc2l0aW9uIGlzIGxhYmVsbGVkIGNvbnNpc3RlbnQgaW4gdGhlIGZpcnN0IHBsYWNlIG9ubHkKKwlpZiBpdCBoYXMgbm8gcnVsZXMsIHNvIHRoZSBjaGVjayBjYW5ub3QgbWF0dGVyIGZvciBzdGF0ZXMgdGhhdCBoYXZlCisJcnVsZXMuICAoMSkgTGFiZWxsaW5nIGEgc3RhdGUgYXMgaW5jb25zaXN0ZW50IHdpbGwgY2F1c2Ugc2V0X2NvbmZsaWN0cworCXRvIHRyeSB0byBpZGVudGlmeSBpdHMgY29uZmxpY3RzLCBhbmQgYSBzdGF0ZSBtdXN0IGhhdmUgKnJ1bGVzKiB0byBoYXZlCisJY29uZmxpY3RzLiAgKDIpIExhYmVsbGluZyBhIHN0YXRlIGFzIGluY29uc2lzdGVudCB3aWxsIGFmZmVjdCBob3cKKwlhY3Rpb25fcm93IHNldHMgdGhlIGRlZmF1bHQgKnJ1bGUqIGZvciB0aGUgc3RhdGUuICAoMykgTGFiZWxsaW5nIGEKKwlzdGF0ZSBhcyBpbmNvbnNpc3RlbnQgd2lsbCBjYXVzZSBidWlsZF9yZWxhdGlvbnMgdG8gYWRkIGxvb2tiYWNrIGVkZ2VzCisJdG8gKnJ1bGVzKiBpbiB0aGF0IHN0YXRlLgorCSogc3JjL3N0YXRlLmggKHN0cnVjdCBzdGF0ZSk6IFdvcmQgdGhlIGNvbW1lbnQgZm9yIG1lbWJlciBjb25zaXN0ZW50CisJbW9yZSBjYXJlZnVsbHkuCisKKzIwMDctMDUtMjcgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJRG9uJ3QgZGVwZW5kIG9uIEM5OSBmZWF0dXJlcy4KKwkqIHNyYy9jb25mbGljdHMuYyAoY29uZmxpY3RzX3VwZGF0ZV9zdGF0ZV9udW1iZXJzKTogRml4IGZvci1sb29wLgorCSogc3JjL2xhbHIuYyAobGFscl91cGRhdGVfc3RhdGVfbnVtYmVycyk6IEZpeCBmb3ItbG9vcC4KKwkqIHNyYy9yZWFkZXIuYyAoY2hlY2tfYW5kX2NvbnZlcnRfZ3JhbW1hcik6IEZpeCBmb3ItbG9vcC4KKwkqIHNyYy9zdGF0ZS5jIChzdGF0ZV9tYXJrX3JlYWNoYWJsZV9zdGF0ZXMpOiBGaXggZm9yLWxvb3AuCisJKHN0YXRlX3JlbW92ZV91bnJlYWNoYWJsZV9zdGF0ZXMpOiBGaXggZm9yLWxvb3AuCisKKwlEb24ndCB3aWRlbiBzdHJ1Y3Qgc3RhdGUgd2l0aCBtZW1iZXIgcmVhY2hhYmxlIGp1c3QgdG8gdGVtcG9yYXJpbHkKKwlyZWNvcmQgcmVhY2hhYmlsaXR5LiAgSW5zdGVhZCwgdXNlIGEgbG9jYWwgYml0c2V0LgorCSogc3JjL3N0YXRlLmggKHN0cnVjdCBzdGF0ZSk6IFJlbW92ZSBtZW1iZXIuCisJKiBzcmMvc3RhdGUuYyAoc3RhdGVfbmV3KTogRG9uJ3QgaW5pdGlhbGl6ZSBpdC4KKwkoc3RhdGVfbWFya19yZWFjaGFibGVfc3RhdGVzKTogUmVuYW1lIHRvLi4uCisJKHN0YXRlX3JlY29yZF9yZWFjaGFibGVfc3RhdGVzKTogLi4uIHRoaXMsIGFuZCB1c2UgYml0c2V0LgorCShzdGF0ZV9yZW1vdmVfdW5yZWFjaGFibGVfc3RhdGVzKTogVXNlIGJpdHNldC4KKworMjAwNy0wNS0yNiAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIHNyYy9NYWtlZmlsZS5hbSAoeWFjYyk6IFF1b3RlIHRhcmdldCBhY3Rpb24gY29tbWFuZHMgcHJvcGVybHkgc28KKwl0aGF0IHRoZSB5YWNjIHNjcmlwdCBpc24ndCBjb3JydXB0LiAgUmVwb3J0ZWQgYnkgSGFucyBBYmVyZyBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDctMDUvbXNnMDAwMDMuaHRtbD4uCisKKwkqIGRhdGEvZ2xyLmMgKHl5bHZhbCk6IEFzIGluIHlhY2MuYywgZG9uJ3QgZXh0ZXJuIGluIHRoZSBoZWFkZXIgZm9yCisJdGhlIGNhc2Ugb2YgcHVyZSBwYXJzZXJzLiAgUmVwb3J0ZWQgYnkgRnJhbnMgRW5nbGljaCBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvaGVscC1iaXNvbi8yMDA3LTA1L21zZzAwMDE4Lmh0bWw+LgorCSogVEhBTktTOiBBZGQgRnJhbnMgRW5nbGljaC4KKworCSogTkVXUyAoMi4zYSspOiBJbiB0aGUgJWNvZGUgZW50cnksIHJlZmVyZW5jZSBzZWN0aW9uIGBCaXNvbgorCURlY2xhcmF0aW9uIFN1bW1hcnknIGZyb20gdGhlIG1hbnVhbCBub3cgc2luY2UgdGhlICVjb2RlIHN1bW1hcnkgaGFzCisJbW92ZWQgdGhlcmUuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoUHJvbG9ndWUgQWx0ZXJuYXRpdmVzKTogTWVudGlvbiB0aGF0IGRpcmVjdGl2ZXMKKwlpbiB0aGUgcnVsZXMgc2VjdGlvbiBtdXN0IGJlIHRlcm1pbmF0ZWQgYnkgc2VtaWNvbG9ucy4KKworMjAwNy0wNS0yMCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlFeHRlbmQgdGhlIGZyb250LWVuZCBBUEkgZm9yICVkZWZpbmUgdmFyaWFibGVzIHRvIG1vcmUgY29tcGxldGVseQorCW1pcnJvciB0aGUgYmFjay1lbmQuICBUaGlzIHdpbGwgYmUgdXNlZnVsIGluIHRoZSBmdXR1cmUuCisJKiBkYXRhL2Jpc29uLm00IChiNF9wZXJjZW50X2RlZmluZV9nZXQsIGI0X3BlcmNlbnRfZGVmaW5lX2lmZGVmKToKKwlVcGRhdGUgY29tbWVudHMgdG8gbWVudGlvbiB0aGUgbmV3IGZyb250LWVuZCBjb3VudGVycGFydHMgb2YgdGhlc2UKKwltYWNyb3MuCisJKiBzcmMvbXVzY2xlX3RhYi5jIChNVVNDTEVfQ09NTU9OX0RFQ09ERSk6IE5ldyBtYWNybyB3aXRoIGNvbW1vbiBjb2RlCisJZm9yIG11c2NsZV9zdHJpbmdfZGVjb2RlIGFuZCBtdXNjbGVfbG9jYXRpb25fZGVjb2RlLgorCShtdXNjbGVfc3RyaW5nX2RlY29kZSk6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCisJKG11c2NsZV9sb2NhdGlvbl9kZWNvZGUpOiBVc2UgTVVTQ0xFX0NPTU1PTl9ERUNPREUuCisJKG11c2NsZV9wZXJjZW50X2RlZmluZV9nZXQsIG11c2NsZV9wZXJjZW50X2RlZmluZV9pZmRlZik6IE5ldworCWZ1bmN0aW9ucy4KKwkobXVzY2xlX3BlcmNlbnRfZGVmaW5lX2ZsYWdfaWYpOiBVc2UgbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2lmZGVmIGFuZAorCW11c2NsZV9wZXJjZW50X2RlZmluZV9nZXQgdG8gbWltaWMgdGhlIGI0X3BlcmNlbnRfZGVmaW5lX2ZsYWdfaWYKKwlpbXBsZW1lbnRhdGlvbiBtb3JlIGNsb3NlbHkuCisJKG11c2NsZV9wZXJjZW50X2RlZmluZV9pbnZhbGlkX3ZhbHVlKTogTmV3IGZ1bmN0aW9uLgorCSogc3JjL211c2NsZV90YWIuaCAobXVzY2xlX3BlcmNlbnRfZGVmaW5lX2dldCwKKwltdXNjbGVfcGVyY2VudF9kZWZpbmVfaWZkZWYsIG11c2NsZV9wZXJjZW50X2RlZmluZV9pbnZhbGlkX3ZhbHVlKToKKwlQcm90b3R5cGUuCisKKzIwMDctMDUtMDcgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBORVdTICgyLjNhKyk6IE1lbnRpb24geWVzdGVyZGF5J3Mgc3RhdGUtcmVtb3ZhbCBjaGFuZ2UuCisJKDIuM2EpOiBSZW1vdmUgdGhlICVsYW5ndWFnZSBlbnRyeSwgd2hpY2ggd2FzIGFkZGVkIGFmdGVyIDIuM2EuCisJKiBzcmMvTFIwLmMsIHNyYy9jbG9zdXJlLmMsIHNyYy9jbG9zdXJlLmgsIHNyYy9jb25mbGljdHMuYywKKwlzcmMvY29uZmxpY3RzLmgsIHNyYy9sYWxyLmMsIHNyYy9sYWxyLmgsIHNyYy9wcmludC5jLAorCXNyYy9wcmludF9ncmFwaC5jLCBzcmMvc3RhdGUuYywgc3JjL3N0YXRlLmgsIHRlc3RzL2NvbmZsaWN0cy5hdCwKKwl0ZXN0cy9leGlzdGluZy5hdDogVXBkYXRlIGNvcHlyaWdodCBkYXRlLgorCisyMDA3LTA1LTA2ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUlmIGNvbmZsaWN0IHJlc29sdXRpb24gbWFrZXMgc3RhdGVzIHVucmVhY2hhYmxlLCByZW1vdmUgdGhvc2Ugc3RhdGVzLAorCXJlcG9ydCBydWxlcyB0aGF0IGFyZSB0aGVuIHVudXNlZCwgYW5kIGRvbid0IHJlcG9ydCBjb25mbGljdHMgaW4gdGhvc2UKKwlzdGF0ZXMuCisJKiBzcmMvY29uZmxpY3RzLmMsIHNyYy9jb25mbGljdHMuaCAoY29uZmxpY3RzX3VwZGF0ZV9zdGF0ZV9udW1iZXJzKToKKwlOZXcgZ2xvYmFsIGZ1bmN0aW9uLgorCSogc3JjL2xhbHIuYywgc3JjL2xhbHIuaCAobGFscl91cGRhdGVfc3RhdGVfbnVtYmVycyk6IE5ldyBnbG9iYWwKKwlmdW5jdGlvbi4KKwkqIHNyYy9tYWluLmMgKG1haW4pOiBBZnRlciBjb25mbGljdCByZXNvbHV0aW9uLCByZW1vdmUgdGhlIHVucmVhY2hhYmxlCisJc3RhdGVzIGFuZCB1cGRhdGUgYWxsIGRhdGEgc3RydWN0dXJlcyB0aGF0IHJlZmVyZW5jZSBzdGF0ZXMgYnkgbnVtYmVyLgorCSogc3JjL3N0YXRlLmMgKHN0YXRlX25ldyk6IEluaXRpYWxpemUgZWFjaCBzdGF0ZSdzIHJlYWNoYWJsZSBtZW1iZXIgdG8KKwlmYWxzZS4KKwkoc3RhdGVfbWFya19yZWFjaGFibGVfc3RhdGVzKTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KKwkoc3RhdGVfcmVtb3ZlX3VucmVhY2hhYmxlX3N0YXRlcyk6IE5ldyBnbG9iYWwgZnVuY3Rpb24uCisJKiBzcmMvc3RhdGUuaCAoc3RydWN0IHN0YXRlKTogQWRkIG1lbWJlciBib29sIHJlYWNoYWJsZS4KKwkoc3RhdGVfcmVtb3ZlX3VucmVhY2hhYmxlX3N0YXRlcyk6IFByb3RvdHlwZS4KKwkqIHRlc3RzL2NvbmZsaWN0cy5hdCAoVW5yZWFjaGFibGUgU3RhdGVzIEFmdGVyIENvbmZsaWN0IFJlc29sdXRpb24pOgorCU5ldyB0ZXN0IGNhc2UuCisJKiB0ZXN0cy9leGlzdGluZy5hdCAoR05VIHBpYyBHcmFtbWFyKTogVXBkYXRlIHRlc3QgY2FzZSBvdXRwdXQgbm93IHRoYXQKKwlhbiB1bnVzZWQgcnVsZSBpcyBkaXNjb3ZlcmVkLgorCisyMDA3LTA1LTA2ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCU1pbm9yIGNvZGUgY2xlYW51cCBpbiBwYXJzZXIgdGFibGUgY29uc3RydWN0aW9uLgorCSogc3JjL0xSMC5jIChuZXdfaXRlbXNldHMpOiBVc2UgaXRlbV9udW1iZXJfaXNfc3ltYm9sX251bWJlci4KKwkobmV3X2l0ZW1zZXRzLCBzYXZlX3JlZHVjdGlvbnMpOiBVcGRhdGUgZm9yIHJlbmFtZSB0byBuaXRlbXNldC4KKwkqIHNyYy9jbG9zdXJlLmMgKG5yaXRlbXNldCk6IFJlbmFtZSB0by4uLgorCShuaXRlbXNldCk6IC4uLiB0aGlzIHNpbmNlIHRoZSAiciIgYXBwZWFycyB0byBtZWFuaW5nbGVzcyBhbmQgaXNuJ3QKKwl1c2VkIGluIHRoZSBjb21tZW50cy4KKwkoY2xvc3VyZSk6IFVwZGF0ZSBmb3IgcmVuYW1lLgorCSogc3JjL2Nsb3N1cmUuaCAobnJpdGVtc2V0KTogVXBkYXRlIGV4dGVybiB0by4uLgorCShuaXRlbXNldCk6IC4uLiB0aGlzLgorCSogc3JjL2xhbHIuYyAoTEEpOiBGaXggYSB0eXBvIGluIGNvbW1lbnRzLgorCSogc3JjL3ByaW50LmMgKHByaW50X2NvcmUpOiBVcGRhdGUgZm9yIHJlbmFtZSB0byBuaXRlbXNldC4KKwkqIHNyYy9wcmludF9ncmFwaC5jIChwcmludF9ncmFwaCk6IExpa2V3aXNlLgorCSogc3JjL3N0YXRlLmg6IEZpeCBzb21lIHR5cG9zIGluIGhlYWRlciBjb21tZW50cy4KKworMjAwNy0wNC0wNCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIFRIQU5LUzogVXNlIEFTQ0lJIGZvciBTZWJhc3RpZW4gRnJpY2tlcidzIG5hbWUuICBCaXNvbiBzb3VyY2UKKwlzdGlsbCBzdGlja3MgdG8gQVNDSUkuICBTb3JyeSEKKworCSogUkVBRE1FLWhhY2tpbmc6IE5ldyBmaWxlLCB0YWtlbiBtb3N0bHkgZnJvbSBjb3JldXRpbHMsIHdpdGggY2hhbmdlcworCWZvciBCaXNvbi4gIENvbnRhaW5zIG11Y2ggb2YgdGhlIGNvbnRlbnRzIG9mOgorCSogUkVBRE1FLWN2czogUmVtb3ZlLgorCSogYm9vdHN0cmFwOiBTeW5jIGZyb20gZ251bGliLgorCSogYnVpbGQtYXV4Ly5jdnNpZ25vcmU6IFJlbW92ZSAqLnQsIG1raW5zdGFsbGRpcnMuCisJKiBsaWIvLmN2c2lnbm9yZTogQWRkIHdjaGFyLmgsIHdjdHlwZS5oLiAgUmVtb3ZlIGV4aXQuaC4KKworMjAwNy0wMy0xMCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChEZXN0cnVjdG9yIERlY2wpOiBGaXggdHlwbyByZXBvcnRlZCBieSBTZWJhc3RpYW4KKwlTZXR6ZXIuCisJKEphdmEgRGlmZmVyZW5jZXMpOiBGaXggc29tZSB0eXBvcy4KKwkqIFRIQU5LUzogQWRkIFNlYmFzdGlhbiBTZXR6ZXIuCisKKzIwMDctMDMtMDcgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisKKwkqIGRhdGEvamF2YS5tNCAoYjRfc2luZ2xlX2NsYXNzX2lmKTogUmVtb3ZlLgorCShiNF9hYnN0cmFjdF9pZik6IExvb2sgYXQgIiVkZWZpbmUgYWJzdHJhY3QiLgorCShiNF9sZXhlcl9pZik6IE5ldy4KKwkoYjRfdW5pb25fbmFtZSk6IFJlbmFtZS4uLgorCShiNF95eXN0eXBlKTogLi4uIHRvIHRoaXMuICBNYXAgdG8gIiVkZWZpbmUgc3R5cGUiLgorCShiNF9yaHNfdmFsdWUsIGI0X3BhcnNlX3BhcmFtX2RlY2wsIGI0X2xleF9wYXJhbV9kZWNsLAorCWI0X21heWJlX3Rocm93cyk6IEZpeCBxdW90aW5nLgorCShiNF9sZXhfcGFyYW1fY2FsbCk6IE1vdmUgYmVsb3cgdG8ga2VlcCBiNF8qX3BhcmFtX2RlY2wgY2xvc2UuCisJKiBkYXRhL2xhbHIxLmphdmEgKExleGVyIGludGVyZmFjZSk6IEFsd2F5cyBkZWZpbmUuCisJKExleGVyIGludGVyZmFjZSB3aXRoaW4gcGFyc2VyIGNsYXNzKTogUmVtb3ZlLgorCShZWUxleGVyIGNsYXNzKTogTmV3LCB1c2VkIHdoZW4gIiVjb2RlIGxleGVyIiBpcyBwcmVzZW50LgorCShjb25zdHJ1Y3Rvcik6IFdoZW4gIiVjb2RlIGxleGVyIiBpcyB1c2VkLCBwYXNzICVsZXgtcGFyYW0KKwl0byB0aGUgbGV4ZXIgY29uc3RydWN0b3IuCisJKHl5bGV4LCB5eXBhcnNlKTogUmVtb3ZlICVsZXgtcGFyYW0gZnJvbSBtZXRob2QgaW52b2NhdGlvbnMKKwkoWVlTdGFjaywgeXlhY3Rpb24sIHl5cGFyc2UpOiBSZW5hbWUgYjRfdW5pb25fbmFtZSB0byBiNF95eXN0eXBlLgorCisJKiBkb2MvYmlzb24udGV4aW5mbyAoSmF2YSBCaXNvbiBJbnRlcmZhY2UpOiBNZW50aW9uICIlZGVmaW5lCisJYWJzdHJhY3QiLiAgUmVuYW1lICIlZGVmaW5lIHVuaW9uX25hbWUiIHRvICIlZGVmaW5lIHN0eXBlIi4KKwlSZW5hbWUgbWV0aG9kIG5hbWVzIGFjY29yZGluZyB0byBwcmV2aW91cyBwYXRjaC4KKwkoSmF2YSBTY2FubmVyIEludGVyZmFjZSk6IERlc2NyaWJlICIlY29kZSBsZXhlciIgaW5zdGVhZCBvZgorCSIlcHVyZS1wYXJzZXIiIGFuZCAiJWRlZmluZSBzaW5nbGVfY2xhc3MiLgorCShKYXZhIERpZmZlcmVuY2VzKTogTWVudGlvbiAiJWNvZGUgbGV4ZXIiLgorCisJKiB0ZXN0cy9qYXZhLmF0IChfQVRfREFUQV9KQVZBX0NBTENfWSk6IFJlbW92ZSBmaW5hbCBhcmd1bWVudC4KKwlJbmNsdWRlIHNjYW5uZXIgaGVyZSwgdXNpbmcgbWFjcm9zIGZyb20gdGVzdHMvbG9jYWwuYXQuCisJKEFUX0RBVEFfQ0FMQ19ZKTogUmVtb3ZlIGZpbmFsIGFyZ3VtZW50LgorCShfQVRfQ0hFQ0tfSkFWQV9DQUxDKTogTGlrZXdpc2UuCisJKEFUX0NIRUNLX0pBVkFfQ0FMQyk6IExpa2V3aXNlLiAgVGVzdCBhbGwgZm91ciBjb21iaW5hdGlvbnMKKwlvZiAlbG9jYXRpb25zIGFuZCAlZXJyb3ItdmVyYm9zZS4KKwkobWFpbik6IFRlc3Qgd2l0aCBhbmQgd2l0aG91dCAlbGV4LXBhcmFtLgorCSogdGVzdHMvbG9jYWwuYXQgKF9BVF9CSVNPTl9PUFRJT05fUFVTSERFRlMpOiBQdXNoIEFUX0xFWFBBUkFNX0lGLgorCShBVF9CSVNPTl9PUFRJT05fUE9QREVGUyk6IFBvcCBpdC4KKworMjAwNy0wMy0wNyAgSnVhbiBNYW51ZWwgR3VlcnJlcm8gIDxqdWFuLmd1ZXJyZXJvQGdteC5kZT4KKworCURKR1BQIHNwZWZpYyBpc3N1ZS4gIEluaGliaXQgdGhlIHVzZSBvZiBkaXNhbGxvd2VkIGNoYXJhY3RlcnMgZm9yCisJZmlsZSBuYW1lIGdlbmVydGlvbiBvbiBXaW45OCwgV2luWFAsIGV0Yy4gIFRoZXNlIGFyZSB8PD4iOj8qXAorCWFuZCBjb25jZXJuIHRlc3RzdWl0ZSBjYXNlIDQ2LgorCSogTWFrZWZpbGUuYW06IGRqZ3BwL3Rlc3RzdWl0ZS5zZWQgYWRkZWQgdG8gRVhUUkFfRElTVAorCSogZGpncHAvdGVzdHN1aXRlLnNlZDogSW5oaWJpdCB0aGUgdXNlIG9mIGRpc2FsbG93ZWQgY2hhcmFjdGVycy4KKwkqIGRqZ3BwL2NvbmZpZy5iYXQ6IEluaGliaXQgdGhlIHVzZSBvZiBkaXNhbGxvd2VkIGNoYXJhY3RlcnMuCisKKzIwMDctMDMtMDIgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJTWlzY2VsbGFuZW91cyAlZGVmaW5lIGFuZCAlY29kZSBjbGVhbnVwLgorCSogZGF0YS9iaXNvbi5tNCAoYjRfcGVyY2VudF9kZWZpbmVfZmxhZ19pZik6IENvcnJlY3QgY29tbWVudHMgb24gaG93CisJdmFsdWVzIGFyZSBpbnRlcnByZXRlZC4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChEZWNsIFN1bW1hcnkpOiBDbGVhbiB1cCBhbmQgZXh0ZW5kICVkZWZpbmUKKwlkb2N1bWVudGF0aW9uIGEgbGl0dGxlIG1vcmUuCisJKiBzcmMvbXVzY2xlX3RhYi5jIChNVVNDTEVfVVNFUl9OQU1FX0NPTlZFUlQsCisJbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2luc2VydCwgbXVzY2xlX3BlcmNlbnRfY29kZV9ncm93KTogTmV3CisJZnVuY3Rpb25zL21hY3Jvcy4KKwkqIHNyYy9tdXNjbGVfdGFiLmggKG11c2NsZV9wZXJjZW50X2RlZmluZV9pbnNlcnQsCisJbXVzY2xlX3BlcmNlbnRfY29kZV9ncm93KTogUHJvdG90eXBlLgorCSogc3JjL3BhcnNlLWdyYW0ueSAocHJvbG9ndWVfZGVjbGFyYXRpb24pOiBVc2UKKwltdXNjbGVfcGVyY2VudF9kZWZpbmVfaW5zZXJ0IGFuZCBtdXNjbGVfcGVyY2VudF9jb2RlX2dyb3cgd2hlbiBwYXJzaW5nCisJJWRlZmluZSBhbmQgJWNvZGUgZGlyZWN0aXZlcy4KKworCU1ha2UgaXQgZWFzeSB0byBzaGFyZSAlZGVmaW5lIGJvb2xlYW4gdmFyaWFibGVzIGJldHdlZW4gdGhlIGZyb250LWVuZAorCWFuZCBiYWNrLWVuZC4gIFRob3VnaCBub3QgdXNlZCB5ZXQsIHRoaXMgd2lsbCBiZSB1c2VmdWwgaW4gdGhlIGZ1dHVyZS4KKwkqIGRhdGEvYmlzb24ubTQgKGI0X2NoZWNrX3VzZXJfbmFtZXMpOiBSZXdyaXRlIGNvbW1lbnRzIHRvIHRhbGsgYWJvdXQKKwlCaXNvbiB1c2VzIG9mIG5hbWVzIHJhdGhlciB0aGFuIGp1c3Qgc2tlbGV0b24gdXNlcyBvZiBuYW1lcy4KKwkoYjRfcGVyY2VudF9kZWZpbmVfZ2V0LCBiNF9wZXJjZW50X2RlZmluZV9pZmRlZik6IFJlbmFtZQorCWI0X3BlcmNlbnRfZGVmaW5lX3NrZWxldG9uX3ZhcmlhYmxlcyhWQVJJQUJMRSkgdG8KKwliNF9wZXJjZW50X2RlZmluZV9iaXNvbl92YXJpYWJsZXMoVkFSSUFCTEUpLgorCShiNF9wZXJjZW50X2NvZGVfZ2V0LCBiNF9wZXJjZW50X2NvZGVfaWZkZWYpOiBSZW5hbWUKKwliNF9wZXJjZW50X2NvZGVfc2tlbGV0b25fcXVhbGlmaWVycyhRVUFMSUZJRVIpIHRvCisJYjRfcGVyY2VudF9jb2RlX2Jpc29uX3F1YWxpZmllcnMoUVVBTElGSUVSKS4KKwkoYjRfY2hlY2tfdXNlcl9uYW1lc193cmFwKTogVXBkYXRlIGZvciByZW5hbWVzLgorCSogc3JjL211c2NsZV90YWIuYywgc3JjL211c2NsZV90YWIuaCAobXVzY2xlX3BlcmNlbnRfZGVmaW5lX2ZsYWdfaWYsCisJbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2RlZmF1bHQpOiBOZXcgZnVuY3Rpb25zIG1pbWlja2luZworCWI0X3BlcmNlbnRfZGVmaW5lX2ZsYWdfaWYgYW5kIGI0X3BlcmNlbnRfZGVmaW5lX2RlZmF1bHQuCisKKwlGb3IgJWRlZmluZSB2YXJpYWJsZXMsIHJlcG9ydCBsb2NhdGlvbnMgZm9yIGludmFsaWQgdmFsdWVzIGFuZAorCXJlZGVmaW5pdGlvbnMuCisJKiBkYXRhL2Jpc29uLm00IChiNF9wZXJjZW50X2RlZmluZV9mbGFnX2lmKTogUmVhZAorCWI0X3BlcmNlbnRfZGVmaW5lX2xvYyhWQVJJQUJMRSkgdG8gcmVwb3J0IHRoZSBsb2NhdGlvbiBvZiBhbiBpbnZhbGlkCisJdmFsdWUgZm9yIFZBUklBQkxFLgorCShiNF9wZXJjZW50X2RlZmluZV9kZWZhdWx0KTogU2F2ZSBhIHNwZWNpYWwgbG9jYXRpb24gaW4KKwliNF9wZXJjZW50X2RlZmluZV9sb2MoVkFSSUFCTEUpIGluIGNhc2UgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIFZBUklBQkxFCisJbXVzdCBsYXRlciBiZSByZXBvcnRlZCBhcyBpbnZhbGlkLgorCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlX2xvY2F0aW9uX2dyb3csIG11c2NsZV9sb2NhdGlvbl9kZWNvZGUpOiBOZXcKKwlmdW5jdGlvbnMuCisJKG11c2NsZV9wZXJjZW50X2RlZmluZV9pbnNlcnQpOiBSZWNvcmQgdGhlIGxvY2F0aW9uIG9mIFZBUklBQkxFIGluCisJbXVzY2xlIHBlcmNlbnRfZGVmaW5lX2xvYyhWQVJJQUJMRSksIGFuZCB1c2UgaXQgdG8gcmVwb3J0IHRoZSBwcmV2aW91cworCWxvY2F0aW9uIGZvciBhIHJlZGVmaW5pdGlvbi4KKwkobXVzY2xlX3BlcmNlbnRfZGVmaW5lX2ZsYWdfaWYpOiBVcGRhdGUgbGlrZSBiNF9wZXJjZW50X2RlZmluZV9mbGFnX2lmLgorCShtdXNjbGVfcGVyY2VudF9kZWZpbmVfZGVmYXVsdCk6IFVwZGF0ZSBsaWtlIGI0X3BlcmNlbnRfZGVmaW5lX2RlZmF1bHQuCisJKG11c2NsZV9ncm93X3VzZXJfbmFtZV9saXN0KTogUmVuYW1lIHRvLi4uCisJKG11c2NsZV91c2VyX25hbWVfbGlzdF9ncm93KTogLi4uIHRoaXMgZm9yIGNvbnNpc3RlbmN5IGFuZCB1c2UKKwltdXNjbGVfbG9jYXRpb25fZ3Jvdy4KKwkqIHNyYy9tdXNjbGVfdGFiLmggKG11c2NsZV9sb2NhdGlvbl9ncm93KTogUHJvdG90eXBlLgorCSogdGVzdHMvaW5wdXQuYXQgKCVkZWZpbmUgZXJyb3JzKTogVXBkYXRlIGV4cGVjdGVkIG91dHB1dC4KKwkqIHRlc3RzL3NrZWxldG9ucy5hdCAoJWRlZmluZSBib29sZWFuIHZhcmlhYmxlczogaW52YWxpZCBza2VsZXRvbgorCWRlZmF1bHRzKTogTmV3IHRlc3QgY2FzZS4KKworMjAwNy0wMi0yOCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIHNyYy9wcmludC5jIChsb29rYWhlYWRfc2V0LCBzdGF0ZV9kZWZhdWx0X3J1bGUpOiBSZW1vdmUuCisJKHByaW50X3JlZHVjdGlvbnMpOiBSZXBsYWNlIHN0YXRlX2RlZmF1bHRfcnVsZSBpbnZvY2F0aW9uIHdpdGgKKwllcXVpdmFsZW50IHVzZSBvZiB5eWRlZmFjdCwgd2hpY2ggd2FzIGNvbXB1dGVkIGluIHRva2VuX2FjdGlvbnMgaW4KKwl0YWJsZXMuYy4KKwkocHJpbnRfcmVzdWx0cyk6IERvbid0IGFsbG9jYXRlIGxvb2thaGVhZF9zZXQuCisKKzIwMDctMDItMjcgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisKKwkqIGRhdGEvbGFscjEuamF2YTogUHJlZml4IGFsbCBwcml2YXRlIG1lbWJlcnMgd2l0aCB5eS4KKworMjAwNy0wMi0yNCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlVc2UgWVlGUFJJTlRGIGluc3RlYWQgb2YgZnByaW50ZiB3aGVyZSBhcHByb3ByaWF0ZS4gIFJlcG9ydGVkIGJ5CisJU2ViYXN0aWVuIEZyaWNrZXIgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDA3LTAyL21zZzAwMDM1Lmh0bWw+LgorCSogVEhBTktTOiBBZGQgU2ViYXN0aWVuIEZyaWNrZXIuCisJKiBkYXRhL2dsci5jLCBkYXRhL3B1c2guYywgZGF0YS95YWNjLmMgKHl5X3JlZHVjZV9wcmludCk6IEltcGxlbWVudC4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChUcmFjaW5nKTogTWFrZSBpdCBjbGVhcmVyIHRoYXQgWVlGUFJJTlRGIG11c3QKKwlhY2NlcHQgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLgorCisyMDA3LTAyLTE5ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogYm9vdHN0cmFwOiBSZW1vdmUgb2NjdXJyZW5jZXMgb2YgLiNib290bXAgZnJvbSBsaWIvTWFrZWZpbGUuCisKKzIwMDctMDItMTMgIEp1YW4gTWFudWVsIEd1ZXJyZXJvICA8anVhbi5ndWVycmVyb0BnbXguZGU+CisKKwkqIGRqZ3BwL2NvbmZpZy5iYXQ6IEFkanVzdG1lbnRzIGNvbmNlcm5pbmcgdGhlIHVzZSBvZiBhdXRvY29uZiAyLjYxLgorCSogZGpncHAvY29uZmlnLnNlZDogQWRqdXN0bWVudHMgY29uY2VybmluZyB0aGUgdXNlIG9mIGF1dG9jb25mIDIuNjEuCisJKiBkamdwcC9jb25maWcuc2l0ZTogQWRqdXN0bWVudHMgY29uY2VybmluZyB0aGUgdXNlIG9mIGF1dG9jb25mIDIuNjEuCisKKzIwMDctMDItMTEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJVW5kbyBteSAyMDA3LTAyLTA3IGNoYW5nZSwgc3dpdGNoaW5nIGJhY2sgdG8gdGhlIGMtc3RyY2FzZSBtb2R1bGUKKwlpbnRyb2R1Y2VkIGluIHRoZSAyMDA3LTAyLTAzIGNoYW5nZS4gIEJydW5vIEhhaWJsZSByZXBvcnRlZCB0aGF0CisJdGhlIDIwMDctMDItMDcgY2hhbmdlIHdvdWxkIGJlIGRhbmdlcm91cyBpbiBUdXJraXNoIGlmIHdlIGFkZCBhCisJbGFuZ3VhZ2Ugd2hvc2UgbmFtZSBjb250YWlucyAiaSIsIHNpbmNlICJpIiBpcyBub3QgbG93ZXJjYXNlICJJIgorCWluIFR1cmtpc2guCisJKiBib290c3RyYXAuY29uZiAoZ251bGliX21vZHVsZXMpOiBBZGQgYy1zdHJjYXNlLiAgUmVtb3ZlIHN0cmNhc2UuCisJKiBsaWIvLmN2c2lnbm9yZTogQWRkIGMtY3R5cGUuYywgYy1jdHlwZS5oLCBjLXN0cmNhc2UuaCwKKwljLXN0cmNhc2Vjb21wLmMsIGMtc3RybmNhc2VjbXAuYy4gIFJlbW92ZSBzdHJjYXNlY21wLmMsIHN0cm5jYXNlY21wLmMuCisJKiBtNC8uY3ZzaWdub3JlOiBSZW1vdmUgc3RyY2FzZS5tNC4KKwkqIHNyYy9nZXRhcmdzLmM6IFJldmVydCAyMDA3LTAyLTA3IGNoYW5nZSwgYXMgZm9sbG93cy4KKwlJbmNsdWRlIGMtc3RyY2FzZS5oLgorCShsYW5ndWFnZV9hcmdtYXRjaCk6IFVzZSBjX3N0cmNhc2VjbXAgcmF0aGVyIHRoYW4gc3RyY2FzZWNtcC4KKworMjAwNy0wMi0xMSAgQnJ1bm8gSGFpYmxlICA8YnJ1bm9AY2xpc3Aub3JnPgorCisJRW5hYmxlIHRoZSBKYXZhIHJlbGF0ZWQgdGVzdHN1aXRlIHRlc3RzIHdoZW4gdGhlIG9ubHkgSmF2YSBjb21waWxlcgorCWZvdW5kIGlzIGEgZ2NqIDwgNC4zLiAgRGlzY3Vzc2VkIGF0CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwNy0wMi9tc2cwMDAxNi5odG1sPi4KKwkqIGNvbmZpZ3VyZS5hYyAoZ3RfSkFWQUNPTVApOiBEb24ndCBzcGVjaWZ5IGEgdGFyZ2V0X3ZlcnNpb24uCisKKzIwMDctMDItMTEgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBkYXRhL01ha2VmaWxlLmFtOiBVcGRhdGUgY29weXJpZ2h0IGRhdGUuCisJKiBkYXRhL3B1c2guYyAoeXlwdWxsX3BhcnNlKTogUmVwb3J0IG1lbW9yeSBleGhhdXN0aW9uIGFuZCByZXR1cm4gMiBpZgorCXl5cHN0YXRlX25ldyByZXR1cm5zIE5VTEwuCisJKHl5cHN0YXRlX25ldyk6IFJldHVybiBOVUxMIGlmIG1hbGxvYyBkb2VzLgorCSogc3JjL3JlYWRlci5jIChwYWNrZ3JhbSk6IE1vdmUgdHJhbnNsYXRpb24gb2YgcnVsZSBhY3Rpb25zIGZyb20gdGhlCisJYmVnaW5uaW5nIG9mIHBhY2tncmFtIHRvLi4uCisJKGNoZWNrX2FuZF9jb252ZXJ0X2dyYW1tYXIpOiAuLi4gaGVyZSByaWdodCBiZWZvcmUgcGFja2dyYW0gaXMgaW52b2tlZAorCXNvIGl0J3MgZWFzaWVyIHRvIHdyaXRlIG1vcmUgY29tcGxldGUgY29tbWVudHMsIGFuZCByZW1vdmUgcmVkdW5kYW50CisJY29kZS4KKworMjAwNy0wMi0xMCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlBcyBpbiBzZW1hbnRpYyBhY3Rpb25zLCBtYWtlIEAkIGluICVpbml0aWFsLWFjdGlvbiwgJWRlc3RydWN0b3IsIGFuZAorCSVwcmludGVyIGltcGx5ICVsb2NhdGlvbnMuCisJKiBzcmMvc2Nhbi1jb2RlLmwgKFNDX1NZTUJPTF9BQ1RJT04pOiBTZXQgbG9jYXRpb25zX2ZsYWcgPSB0cnVlIHdoZW4KKwlzY2FubmluZyBAJC4KKwkqIHRlc3RzL2FjdGlvbnMuYXQgKEFUX0NIRUNLX0FDVElPTl9MT0NBVElPTlMpOiBOZXcgbWFjcm8gc3VwcG9ydGluZy4uLgorCShAJCBpbiAlaW5pdGlhbC1hY3Rpb24gaW1wbGllcyAlbG9jYXRpb25zLAorCUAkIGluICVkZXN0cnVjdG9yIGltcGxpZXMgJWxvY2F0aW9ucywKKwlAJCBpbiAlcHJpbnRlciBpbXBsaWVzICVsb2NhdGlvbnMpOiAuLi4gdGhlc2UgbmV3IHRlc3QgY2FzZXMuCisKKzIwMDctMDItMDcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJVW5kbyBtb3N0IG9mIHRoZSAyMDA3LTAyLTAzIGNoYW5nZSwgc3dpdGNoaW5nIHRvIHRoZSBzdHJjYXNlIG1vZHVsZQorCW5vdyB0aGF0IGdudWxpYiBzdHJjYXNlIGhhcyBiZWVuIGZpeGVkLgorCSogYm9vdHN0cmFwLmNvbmYgKGdudWxpYl9tb2R1bGVzKTogUmVtb3ZlIGMtc3RyY2FzZS4gIEFkZCBzdHJjYXNlLgorCSogbGliLy5jdnNpZ25vcmU6IFJlbW92ZSBjLWN0eXBlLmMsIGMtY3R5cGUuaCwgYy1zdHJjYXNlLmgsCisJYy1zdHJjYXNlY29tcC5jLCBjLXN0cm5jYXNlY21wLmMuICBBZGQgc3RyY2FzZWNtcC5jLCBzdHJuY2FzZWNtcC5jCisJKiBtNC8uY3ZzaWdub3JlOiBBZGQgc3RyY2FzZS5tNC4KKwkqIHNyYy9nZXRhcmdzLmM6IFJldmVydCAyMDA3LTAyLTAzIGNoYW5nZSwgYXMgZm9sbG93cy4KKwlEb24ndCBpbmNsdWRlIGMtc3RyY2FzZS5oLgorCShsYW5ndWFnZV9hcmdtYXRjaCk6IFVzZSBzdHJjYXNlY21wIHJhdGhlciB0aGFuIGNfc3RyY2FzZWNtcC4KKwlzdHJjYXNlY21wIGhhcyAidW5zcGVjaWZpZWQgYmVoYXZpb3IiIG91dHNpZGUgdGhlIFBPU0lYIGxvY2FsZSwKKwlidXQgaXQgd29ya3MgZmluZSBpbiBwcmFjdGljZSBpZiBhdCBsZWFzdCBvbmUgYXJndW1lbnQgaXMgQVNDSUksCisJYXMgaXMgdGhlIGNhc2UgaW4gQmlzb24uCisKKzIwMDctMDItMDcgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisKKwkqIHRlc3RzL2phdmEuYXQ6IFNraXAgdGVzdHMgaWYgb25seSBvbmUgb2YgamF2YWMvamF2YSBpcyBwcmVzZW50LgorCVJlcG9ydGVkIGJ5IEpvZWwgRS4gRGVubnkuCisJKiB0ZXN0cy9hdGxvY2FsLmluOiBBZGp1c3QgY29weXJpZ2h0IHllYXJzLgorCisyMDA3LTAyLTA1ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorCisJKiBkYXRhL2xhbHIxLmphdmEgKFN0YWNrKTogV29yayBhcm91bmQgb2xkIHZlcmlmaWVycyB0aGF0IGRpc2FsbG93CisJYWNjZXNzIHRvIHRoZSBwcml2YXRlIGZpZWxkcyBvZiBhbiBpbm5lciBjbGFzcywgZnJvbSB0aGUgb3V0ZXIgY2xhc3MuCisJV2UgY2FuIG1ha2UgU3RhY2sncyBmaWVsZHMgcHVibGljIGJlY2F1c2UgdXNlciBjb2RlIGRvZXNuJ3QgaGF2ZSBhY2Nlc3MKKwl0byB0aGUgaW5zdGFuY2Ugb2YgU3RhY2sgdXNlZCBieSBwYXJzZSgpLiAgUmVwb3J0ZWQgYnkgUGF1bCBFZ2dlcnQuCisKKzIwMDctMDItMDMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiAuY3ZzaWdub3JlOiBBZGQgamF2YWNvbXAuc2gsIGphdmFleGVjLnNoLiAgSXMgdGhpcyByZWFsbHkKKwl0aGUgcmlnaHQgc3BvdCBmb3IgdGhlc2UgZmlsZXM/CisJKiBib290c3RyYXAuY29uZiAoZ251bGliX21vZHVsZXMpOiBBZGQgYy1zdHJjYXNlLgorCSogbGliLy5jdnNpZ25vcmU6IEFkZCBjLWN0eXBlLmMgYy1jdHlwZS5oLCBjLXN0cmNhc2Vjb21wLmMsCisJYy1zdHJuY2FzZWNtcC5jLgorCSogc3JjL2dldGFyZ3MuYzogSW5jbHVkZSBjLXN0cmNhc2UuaC4KKwkobGFuZ3VhZ2VfYXJnbWF0Y2gpOiBVc2UgY19zdHJjYXNlY21wIHJhdGhlciB0aGFuIHN0cmNhc2VjbXAsCisJdG8gYXZvaWQgdW5zcGVjaWZpZWQgYmVoYXZpb3IuCisKKzIwMDctMDItMDEgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBkb2MvYmlzb24udGV4aW5mbyAoRGVjbCBTdW1tYXJ5KTogQ29ycmVjdCB0eXBvLgorCisyMDA3LTAxLTMwICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorCisJKiBkYXRhL2Jpc29uLm00IChiNF9wZXJjZW50X2RlZmluZV9mbGFnX2lmKTogRG9uJ3QgdHJlYXQgMCBhcyBmYWxzZS4KKwlDb21wbGFpbiBpZiB0aGUgdmFsdWUgZG9lcyBub3QgbWF0Y2ggZW1wdHksICJ0cnVlIiBvciAiZmFsc2UiLgorCSogZGF0YS9jKysubTQ6IEFkanVzdCBkZWZhdWx0IGRlZmluaXRpb25zIG9mICVkZWZpbmUgdmFyaWFibGVzLgorCSogZGF0YS9qYXZhLm00OiBBZGp1c3QgZGVmYXVsdCBkZWZpbml0aW9ucyBvZiAlZGVmaW5lIHZhcmlhYmxlcy4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChEZWNsIFN1bW1hcnkpOiBBZGp1c3QgdGhlICVkZWZpbmUgZW50cnkgYWNjb3JkaW5nCisJdG8gYWJvdmUgYmVoYXZpb3IuCisJKiB0ZXN0cy9pbnB1dC5hdCAoQm9vbGVhbiAlZGVmaW5lIHZhcmlhYmxlcyk6IFRlc3QgbmV3IGJlaGF2aW9yLgorCisyMDA3LTAxLTI5ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorCisJKiBORVdTOiBNZW50aW9uIGphdmEuCisJKiBUT0RPOiBSZW1vdmUgdGhpbmdzIHRoYXQgYXJlIGRvbmUuCisJKiBib290c3RyYXAuY29uZjogQWRkIGphdmFjb21wLXNjcmlwdCBhbmQgamF2YWV4ZWMtc2NyaXB0LgorCSogY29uZmlndXJlLmFjOiBJbnZva2UgZ3RfSkFWQUNPTVAgYW5kIGd0X0pBVkFFWEVDLgorCisJKiBkYXRhL01ha2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVzLgorCSogZGF0YS9qYXZhLXNrZWwubTQ6IE5ldy4KKwkqIGRhdGEvamF2YS5tNDogTmV3LgorCSogZGF0YS9sYWxyMS5qYXZhOiBOZXcuCisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvOiBQdXQgIkEgQ29tcGxldGUgQysrIEV4YW1wbGUiIHVuZGVyCisJQysrIFBhcnNlcnMuICBBZGQgSmF2YSBQYXJzZXJzLiAgUHV0IEMrKyBQYXJzZXJzIGFuZCBKYXZhIFBhcnNlcnMKKwl1bmRlciBPdGhlciBMYW5ndWFnZXMuCisKKwkqIHNyYy9nZXRhcmdzLmMgKHZhbGlkX2xhbmd1YWdlcyk6IEFkZCBKYXZhLgorCSogc3JjL2dldGFyZ3MuaCAoc3RydWN0IGJpc29uX2xhbmd1YWdlKTogVXBkYXRlIHNpemUgb2Ygc3RyaW5nIGZpZWxkcy4KKworCSogdGVzdHMvTWFrZWZpbGUuYW06IEFkZCBqYXZhLmF0LgorCSogdGVzdHMvYXRsb2NhbC5pbjogQWRkIENPTkZfSkFWQSBhbmQgQ09ORl9KQVZBQy4KKwkqIHRlc3RzL2phdmEuYXQ6IE5ldy4KKwkqIHRlc3RzL3Rlc3RzdWl0ZS5hdDogSW5jbHVkZSBpdC4KKworMjAwNy0wMS0yOCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlDbGVhbiB1cC4KKwkqIHNyYy9zY2FuLXNrZWwubCAoYXRfZGlyZWN0aXZlX3BlcmZvcm0pOiBBZGQgYXRfZGlyZWN0aXZlX2FyZ2MgYW5kCisJYXRfZGlyZWN0aXZlX2FyZ3YgYXJndW1lbnRzIHNvIHRoZXNlIG5vIGxvbmdlciBoYXZlIHRvIGJlIGdsb2JhbAorCXZhcmlhYmxlcy4gIEFsc28sIHVwZGF0ZSB0aGUgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBmb2xsb3dpbmcgY2hhbmdlcy4KKwkoZmFpbF9mb3JfYXRfZGlyZWN0aXZlX3Rvb19tYW55X2FyZ3MsCisJZmFpbF9mb3JfYXRfZGlyZWN0aXZlX3Rvb19mZXdfYXJncyk6IEFkZCBhdF9kaXJlY3RpdmVfbmFtZSBhcmd1bWVudC4KKwkoYXRfZGlyZWN0aXZlX25hbWUpOiBSZW1vdmUgYXMgYXRfZGlyZWN0aXZlX2FyZ3ZbMF0gd2lsbCBiZSB1c2VkIGZvcgorCXRoaXMgbm93LgorCShBVF9ESVJFQ1RJVkVfQVJHQ19NQVgpOiBJbmNyZW1lbnQgdG8gbWFrZSBzcGFjZSBpbiBhdF9kaXJlY3RpdmVfYXJndgorCWZvciB0aGUgZGlyZWN0aXZlIG5hbWUuCisJKGF0X2RpcmVjdGl2ZV9hcmdjLCBhdF9kaXJlY3RpdmVfYXJndik6IE1ha2UgdGhlc2UgbG9jYWwgd2l0aGluCisJc2tlbF9sZXggaW5zdGVhZCBvZiBnbG9iYWwuCisJKElOSVRJQUwpOiBVcGRhdGUgZGlyZWN0aXZlIHN0YXJ0IGFjdGlvbiBmb3IgYWJvdmUgY2hhbmdlcy4KKwkoU0NfQVRfRElSRUNUSVZFX0FSRyk6IFJlbmFtZSB0by4uLgorCShTQ19BVF9ESVJFQ1RJVkVfQVJHUyk6IC4uLiB0aGlzLCBhbmQgdXBkYXRlIGZvciBhYm92ZSBjaGFuZ2VzLgorCShTQ19BVF9ESVJFQ1RJVkVfU0tJUF9XUyk6IFVwZGF0ZS4KKwkoc2Nhbl9za2VsKTogTW92ZSB5eWxleF9kZXN0cm95IHRvLi4uCisJKHNrZWxfc2Nhbm5lcl9mcmVlKTogLi4uIGhlcmUuCisJKiB0ZXN0cy9za2VsZXRvbnMuYXQgKGluc3RhbGxlZCBza2VsZXRvbiBmaWxlIG5hbWUpOiBSZW5hbWUgdG8uLi4KKwkoaW5zdGFsbGVkIHNrZWxldG9uIGZpbGUgbmFtZXMpOiAuLi4gdGhpcy4KKworMjAwNy0wMS0yNyAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIENoYW5nZUxvZzogRm9yIGNoYW5nZXMgaW4gZG9jL2Jpc29uLnRleGluZm8sIGNvbnNpc3RlbnRseSByZWZlcmVuY2UKKwlub2RlIG5hbWVzOiBzYXkgIlRhYmxlIG9mIFN5bWJvbHMiIG5vdCAiQmlzb24gU3ltYm9scyIsIGFuZCBzYXkgIkRlY2wKKwlTdW1tYXJ5IiBub3QgIkRpcmVjdGl2ZXMiLgorCSogZG9jL2Jpc29uLnRleGluZm8gKERlY2wgU3VtbWFyeSwgQ2FsYysrIFBhcnNlcik6IENyb3NzLXJlZmVyZW5jZSB0aGUKKwklY29kZSBlbnRyeSBpbiAiRGVjbCBTdW1tYXJ5IiByYXRoZXIgdGhhbiB0aGUgb25lIGluICJUYWJsZSBvZiBTeW1ib2xzIgorCXNpbmNlIHRoZSBmb3JtZXIgaXMgbm93IHRoZSBtb3JlIGNvbXBsZXRlIG9uZS4KKwkoUHJvbG9ndWUgQWx0ZXJuYXRpdmVzKTogTGlrZXdpc2UgYW5kIGRvIHRoZSBzYW1lIGZvciAlZGVmaW5lcy4KKwkoVGFibGUgb2YgU3ltYm9scyk6IEFkZCBzdW1tYXJ5IG9mICVjb2RlLCBhZGQgc3VtbWFyeSBvZiAlZGVmaW5lLCBhbmQKKwltb3ZlIGZ1bGwgJWNvZGUgZG9jdW1lbnRhdGlvbiB0by4uLgorCShEZWNsIFN1bW1hcnkpOiAuLi4gaGVyZSBmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhlciBlbnRyaWVzIGluIHRoZXNlCisJc2VjdGlvbnMuCisJTW92ZSAlZGVmaW5lIGVudHJ5IGluIG9yZGVyIHRvIGtlZXAgdGhpcyBsaXN0IGFscGhhYmV0aXplZC4KKwlSZXdvcmQgJWRlZmluZSBlbnRyeSBhIGxpdHRsZSB0byBwdXQgbGVzcyBlbXBoYXNpcyBvbiB0aGUgc2tlbGV0b24KKwljb25jZXB0LCB3aGljaCBtb3N0IHVzZXJzIHNob3VsZG4ndCBoYXZlIHRvIHRoaW5rIGFib3V0LgorCisyMDA3LTAxLTI2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCUFkanVzdCB0byByZWNlbnQgZ251bGliIGNoYW5nZXMuCisJKiBsaWIvLmN2c2lnbm9yZTogUmVtb3ZlIHN0cGNweS5oLCBzdHJuZHVwLmgsIHN0cm5sZW4uaC4KKwlBZGQgc3RyaW5nLmgsIHN0cmluZ18uaCwgdW5pc3RkXy5oLCB3Y2hhcl8uaC4KKwkqIG00Ly5jdnNpZ25vcmU6IEFkZCBnbnVsaWItY29tbW9uLm00LCBzdHJpbmdfaC5tNCwgd2NoYXIubTQuCisJKiBzcmMvc3lzdGVtLmg6IERvbid0IGluY2x1ZGUgPHN0cGNweS5oPjsgdGhpcyBpcyBub3cgZG9uZSBieQorCTxzdHJpbmcuaD4uCisKKzIwMDctMDEtMjMgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisKKwlTaW1wbGlmeSBpbXBsZW1lbnRhdGlvbiBvZiB1bnF1YWxpZmllZCAlY29kZSwgaW1wbGVtZW50IG1hY3JvcyBmb3IKKwl1bmlmb3JtIHRyZWF0bWVudCBvZiBib29sZWFuICVkZWZpbmUgZmxhZ3MuICBEb2N1bWVudCAlZGVmaW5lLgorCSogZGF0YS9iaXNvbi5tNCAoYjRfcGVyY2VudF9kZWZpbmVfaWZkZWYsIGI0X3BlcmNlbnRfZGVmaW5lX2ZsYWdfaWYsCisJYjRfcGVyY2VudF9jb2RlX2lmZGVmKTogTmV3LgorCShiNF9wZXJjZW50X2NvZGVfZ2V0KTogTWFwIHVucXVhbGlmaWVkICVjb2RlIHRvIGI0X3BlcmNlbnRfY29kZSgpLgorCSogZGF0YS9jKysubTQ6IERlZmluZSBkZWZhdWx0IHZhbHVlIGZvciBnbG9iYWxfdG9rZW5zX2FuZF95eXN0eXBlLgorCSogZGF0YS9nbHIuY2M6IExpa2V3aXNlLgorCSogZGF0YS9sb2NhdGlvbi5jYzogVXNlIGI0X3BlcmNlbnRfZGVmaW5lX2ZsYWdfaWYuCisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChEZWNsIFN1bW1hcnkpOiBEb2N1bWVudCAlZGVmaW5lLgorCisJKiBzcmMvcGFyc2UtZ3JhbS55IChVbnF1YWxpZmllZCAlY29kZSk6IENoYW5nZSBtdXNjbGUgbmFtZSB0bworCWI0X3BlcmNlbnRfY29kZSgpLgorCShjb250ZW50Lm9wdCk6IERlZmF1bHQgdG8gZW1wdHkuCisKKzIwMDctMDEtMTcgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJSW1wbGVtZW50IHN1cHBvcnQgZm9yIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBza2VsZXRvbiBmaWxlIG5hbWVzLgorCURpc2N1c3NlZCBzdGFydGluZyBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA2LTEyL21zZzAwMDcxLmh0bWw+LgorCSogZG9jL2Jpc29uLnRleGluZm8gKERlY2wgU3VtbWFyeSk6IERvY3VtZW50IGluICVza2VsZXRvbiBlbnRyeS4KKwkoQmlzb24gT3B0aW9ucyk6IERvY3VtZW50IGluIC0tc2tlbGV0b24gZW50cnkuCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9za2VsZXRvbik6IFVzZSBzdHJuY3B5IHJhdGhlciB0aGFuIHN0cmNweSBzaW5jZQorCWZ1bGxfc2tlbGV0b24gY2FuJ3QgbmVjZXNzYXJpbHkgaG9sZCBhbGwgb2YgcGtnZGF0YWRpci4KKwlJZiB0aGUgc3BlY2lmaWVkIHNrZWxldG9uIGZpbGUgbmFtZSBjb250YWlucyBhIGAvJywgZG9uJ3QgcHJlcGVuZAorCXBrZ2RhdGFkaXIuCisJKiBzcmMvcGFyc2UtZ3JhbS55IChwcm9sb2d1ZV9kZWNsYXJhdGlvbik6IElmIHRoZSBzcGVjaWZpZWQgc2tlbGV0b24KKwlmaWxlIG5hbWUgY29udGFpbnMgYSBgLycsIHByZXBlbmQgdGhlIGdyYW1tYXIgZmlsZSBkaXJlY3RvcnkuCisJKiB0ZXN0cy9NYWtlZmlsZS5hbSAoVEVTVFNVSVRFX0FUKTogQWRkIHNrZWxldG9ucy5hdC4KKwkqIHNrZWxldG9ucy5hdDogTmV3IGZpbGUuCisJKHJlbGF0aXZlIHNrZWxldG9uIGZpbGUgbmFtZXMpOiBOZXcgdGVzdCBjYXNlLgorCShpbnN0YWxsZWQgc2tlbGV0b24gZmlsZSBuYW1lcyk6IE5ldyB0ZXN0IGNhc2UuCisJKiB0ZXN0cy90ZXN0c3VpdGUuYXQ6IEluY2x1ZGUgc2tlbGV0b25zLmF0LgorCisJKiBib290c3RyYXA6IFVwZGF0ZSBjb3B5cmlnaHQgdG8gMjAwNy4KKworMjAwNy0wMS0xNyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KKworCSogYm9vdHN0cmFwOiBSZW1vdmUgb2NjdXJyZW5jZXMgb2YgLiNib290bXAgZnJvbSB0aGUgZmlsZXMuCisKKzIwMDctMDEtMTcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkb2MvYmlzb24udGV4aW5mbyAoQ2FsYysrIFBhcnNlcik6IERvbid0IHRyeSB0byBhbGlhcworCW5vbnRlcm1pbmFscy4KKwlVc2UgcGVyLXR5cGUgJXByaW50ZXIuCisKKzIwMDctMDEtMTcgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBORVdTLCBkYXRhL2MrKy1za2VsLm00LCBkYXRhL2MrKy5tNCwgZGF0YS9jLXNrZWwubTQsIGRhdGEvYy5tNCwKKwlkYXRhL2dsci5jLCBkYXRhL2dsci5jYywgZGF0YS9sYWxyMS5jYywgZGF0YS9sb2NhdGlvbi5jYywKKwlkamdwcC9jb25maWcuc2l0ZSwgc3JjL2ZpbGVzLmMsIHNyYy9maWxlcy5oLCBzcmMvbWFpbi5jLAorCXNyYy9tdXNjbGVfdGFiLmMsIHNyYy9tdXNjbGVfdGFiLmgsIHNyYy9wYXJzZS1ncmFtLnksIHNyYy9yZWFkZXIuaCwKKwlzcmMvc2Nhbi1za2VsLmgsIHNyYy9zY2FuLXNrZWwubCwgdGVzdHMvYWN0aW9ucy5hdCwgdGVzdHMvY2FsYy5hdCwKKwl0ZXN0cy9nbHItcmVncmVzc2lvbi5hdCwgdGVzdHMvaW5wdXQuYXQsIHRlc3RzL2xvY2FsLmF0LAorCXRlc3RzL291dHB1dC5hdCwgdGVzdHMvdG9ydHVyZS5hdDogVXBkYXRlIGNvcHlyaWdodCB0byAyMDA3LgorCisyMDA3LTAxLTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZG9jL2Jpc29uLnRleGluZm8gKENhbGMrKyBQYXJzaW5nIERyaXZlcik6IExldCAicGFyc2UiIHJldHVybiBhbgorCWVycm9yIGNvZGUuCisJKENhbGMrKyBTY2FubmVyKTogRXhpdCB3aXRoIGZhaWx1cmUgaWYgd2UgY2FuJ3Qgb3BlbiB0aGUgaW5wdXQKKwlmaWxlLgorCUFjY2VwdCAiLSIgc3RhbmRpbmcgZm9yIHN0ZGluLgorCShDYWxjKysgVG9wIExldmVsKTogUHJpbnQgdGhlIHJlc3VsdCBvbmx5IGlmIHRoZSBwYXJzaW5nIHdhcworCXN1Y2Nlc3NmdWwuCisKKzIwMDctMDEtMTYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2xhbHIxLmNjICh5eV9yZWR1Y2VfcHJpbnRfKTogQWRkIGEgbWlzc2luZyBlbmQtb2YtbGluZS4KKworMjAwNy0wMS0xNSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KKwlhbmQgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlDbGVhbiB1cCAlZGVmaW5lIGFuZCAlY29kZSBpbXBsZW1lbnRhdGlvbiBpbiBNNCBzb21lLiAgTW9zdAorCWltcG9ydGFudGx5LCByZW5hbWUgYWxsIHJlbGF0ZWQgbWFjcm9zIHRvIGJlIGluIHRoZSBiNF9wZXJjZW50X2RlZmluZQorCWFuZCBiNF9wZXJjZW50X2NvZGUgbmFtZXNwYWNlcy4gIEFsc28sIGNvbXBsZXRlIHN1cHBvcnQgZm9yIGAuJyBpbgorCSVkZWZpbmUgdmFyaWFibGUgbmFtZXMgYW5kICVjb2RlIHF1YWxpZmllcnMuCisJKiBkYXRhL2Jpc29uLm00IChiNF9jaGVja191c2VyX25hbWVzKTogQ2hlY2sgZm9yIHNwZWNpYWwKKwkiU0tFTEVUT04tTkFNRVNQQUNFKG5hbWUpIiBtYWNyb3MgaW5zdGVhZCBvZiB1c2luZyB0d28gbmVzdGVkCisJbTRfZm9yZWFjaCBsb29wcy4KKwkoYjRfZ2V0X3BlcmNlbnRfZGVmaW5lLCBiNF9nZXRfcGVyY2VudF9jb2RlKTogUmVuYW1lIHRvLi4uCisJKGI0X3BlcmNlbnRfZGVmaW5lX2dldCwgYjRfcGVyY2VudF9jb2RlX2dldCk6IC4uLiB0aGVzZS4KKwlFeHRlbmQgZG9jdW1lbnRhdGlvbiB3aXRoIGV4YW1wbGVzLgorCUZvciBTS0VMRVRPTi1OQU1FU1BBQ0UgKGFzIGRvY3VtZW50ZWQgZm9yIGI0X2NoZWNrX3VzZXJfbmFtZXMpLCB1c2UKKwliNF9wZXJjZW50X2RlZmluZV9za2VsZXRvbl92YXJpYWJsZXMgYW5kCisJYjRfcGVyY2VudF9jb2RlX3NrZWxldG9uX3F1YWxpZmllcnMuCisJRXhwZWN0IGFueSB2YWx1ZSBmb3IgdGhlICVkZWZpbmUgdmFyaWFibGUgYGZvbycgdG8gYmUgc3RvcmVkIGluIHRoZQorCW1hY3JvIG5hbWVkIGBiNF9wZXJjZW50X2RlZmluZShmb28pJzsgZXhwZWN0IGFueSAlY29kZSBibG9ja3MgZm9yIHRoZQorCXF1YWxpZmllciBgZm9vJyB0byBiZSBzdG9yZWQgaW4gYSBtYWNybyBuYW1lZCBgYjRfcGVyY2VudF9jb2RlKGZvbyknOworCWV4cGVjdCBhbnkgdW5xdWFsaWZpZWQgJWNvZGUgYmxvY2tzIHRvIGJlIHN0b3JlZCBpbiBhIG1hY3JvIG5hbWVkCisJYGI0X3BlcmNlbnRfY29kZV91bnF1YWxpZmllZCcuCisJVXNlIG00X2luZGlyIHNvIHRoYXQgJWRlZmluZSB2YXJpYWJsZSBuYW1lcyBhbmQgJWNvZGUgcXVhbGlmaWVycyBjYW4KKwljb250YWluIGAuJywgd2hpY2ggaXMgYWxsb3dlZCBieSB0aGUgZ3JhbW1hciBwYXJzZXIuCisJKGI0X3BlcmNlbnRfZGVmaW5lX2RlZmF1bHQpOiBOZXcgbWFjcm8gdG8gc2V0IGEgZGVmYXVsdCB2YWx1ZSBmb3IgYQorCSVkZWZpbmUgdmFyaWFibGUuCisJKG00X3dyYXApOiBVcGRhdGUgd3JhcHBlZCBjb2RlLCBhbmQgZml4IHNvbWUgdW5kZXJxdW90aW5nLgorCShiNF9jaGVja191c2VyX25hbWVzX3dyYXApOiBVcGRhdGUgYW5kIGRlZmluZSBvdXRzaWRlIHRoZSBtNF93cmFwLgorCUV4cGVjdCBncmFtbWFyIHVzZXMgb2YgJWRlZmluZSB2YXJpYWJsZXMgYW5kICVjb2RlIHF1YWxpZmllcnMgdG8gYmUKKwlkZWZpbmVkIGluIGI0X3BlcmNlbnRfZGVmaW5lX3VzZXJfdmFyaWFibGVzIGFuZAorCWI0X3BlcmNlbnRfY29kZV91c2VyX3F1YWxpZmllcnMuCisJKiBkYXRhL2MrKy5tNDogVXNlIGI0X3BlcmNlbnRfZGVmaW5lX2RlZmF1bHQgcmF0aGVyIHRoYW4KKwltNF9kZWZpbmVfZGVmYXVsdC4gIEZpeCBzb21lIHVuZGVycXVvdGluZy4gIFNrZWxldG9uIHVzYWdlIG9mICVkZWZpbmUKKwl2YXJpYWJsZSBkZWZpbmVfbG9jYXRpb25fY29tcGFyaXNvbiBub3cgaW1wbGllcyBza2VsZXRvbiB1c2FnZSBvZgorCSVkZWZpbmUgdmFyaWFibGUgZmlsZW5hbWVfdHlwZS4KKwkqIGRhdGEvZ2xyLmMsIGRhdGEvZ2xyLmNjLCBkYXRhL2xhbHIxLmNjLCBkYXRhL2xvY2F0aW9uLmNjLAorCWRhdGEvcHVzaC5jLCBkYXRhL3lhY2MuYzogVXBkYXRlIG1hY3JvIG5hbWVzLgorCSogc3JjL3BhcnNlLWdyYW0ueSAocHJvbG9ndWVfZGVjbGFyYXRpb24sIGdyYW1tYXJfZGVjbGFyYXRpb24pOiBVcGRhdGUKKwltdXNjbGUgbmFtZXMuCisKKzIwMDctMDEtMTQgIEp1YW4gTWFudWVsIEd1ZXJyZXJvICA8anVhbi5ndWVycmVyb0BnbXguZGU+CisKKwlESkdQUCBzcGVjaWZpYyBpc3N1ZXMuCisKKwkqIGRqZ3BwL2NvbmZpZy5zaXRlOiBTZXQgYWNfY3ZfcGF0aF9ta2RpciB0byBhIHNhbmUgREpHUFAgc3BlY2lmaWMKKwlkZWZhdWx0LiAgU2V0IGdsX2N2X2Fic29sdXRlX3djdHlwZV9oIHRvIGEgc2FuZSBESkdQUCBzcGVjaWZpYyBkZWZhdWx0LgorCisyMDA3LTAxLTA5ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQ6IFVzZSBBVF9QQVJTRVJfQ0hFQ0sgcmF0aGVyIHRoYW4gQVRfQ0hFQ0sgdG8KKwlydW4gcGFyc2VycyBpbiBhbGwgdGVzdHMgc28gdGhhdCBWYWxncmluZCBpcyBpbnZva2VkIGR1cmluZworCW1haW50YWluZXItY2hlY2stdmFsZ3JpbmQuCisJKER1cGxpY2F0ZSByZXByZXNlbnRhdGlvbiBvZiBtZXJnZWQgdHJlZXMpOiBGcmVlIGFsbCBzZW1hbnRpYyB2YWx1ZXMuCisJKER1cGxpY2F0ZWQgdXNlciBkZXN0cnVjdG9yIGZvciBsb29rYWhlYWQpOiBMaWtld2lzZS4KKworMjAwNy0wMS0wOSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIHRlc3RzL2xvY2FsLmF0IChBVF9QQVJTRVJfQ0hFQ0spOiBBZGQgYSBQUkUgYXJndW1lbnQgdG8gc3BlY2lmeSBhCisJY29tbWFuZC1saW5lIHByZWZpeC4KKwkqIHRlc3RzL3RvcnR1cmUuYXQgKEV4cGxvZGluZyB0aGUgU3RhY2sgU2l6ZSB3aXRoIEFsbG9jYSk6IFN0ZGVyciBpcworCWlnbm9yZWQsIHNvIHVzZSB0aGF0IFBSRSB0byBzZXQgLS1sb2ctZmQ9MSBpbiBWQUxHUklORF9PUFRTIHNvIHdlIGRvbid0CisJbWlzcyBWYWxncmluZCBtZXNzYWdlcy4KKwkoRXhwbG9kaW5nIHRoZSBTdGFjayBTaXplIHdpdGggTWFsbG9jKTogTGlrZXdpc2UuCisKKzIwMDctMDEtMDkgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJSWdub3JlIFlZU1RBQ0tfVVNFX0FMTE9DQSBmb3IgcHVzaCBwYXJzZXJzIHNpbmNlIHRoZSBzdGFja3MgY2FuJ3QgYmUKKwlsb2NhbHMuICBSZXBvcnRlZCBieSBKdWFuIE1hbnVlbCBHdWVycmVybyBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDctMDEvbXNnMDAwMDAuaHRtbD4uCisJKiBkYXRhL3B1c2guYzogRW5jbG9zZSB0aGUgI2lmZGVmIFlZU1RBQ0tfVVNFX0FMTE9DQSBpbiBiNF9wdXNoX2lmLgorCUZpeCBzb21lIGluZGVudGF0aW9uIGFsc28uCisJKiB0ZXN0cy90b3J0dXJlLmF0IChFeHBsb2RpbmcgdGhlIFN0YWNrIFNpemUgd2l0aCBBbGxvY2EpOiBBZGQgY29tbWVudAorCWV4cGxhaW5pbmcgdGhpcyBpc3N1ZS4KKworMjAwNy0wMS0wOSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KKwlhbmQgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlTaW1wbGlmeSB1bmlvbiBhbmQgcHJvbG9ndWUgaGFuZGxpbmcsIGFuZCBlc2NhcGUgdW5pb24gYW5kIGxleC9wYXJzZQorCXBhcmFtcyB3aXRoIGRpZ3JhcGhzLgorCSogZGF0YS9iaXNvbi5tNCAoYjRfcHJlX3Byb2xvZ3VlLCBiNF9wb3N0X3Byb2xvZ3VlKTogU2V0IHRoZWlyIGRlZmF1bHQKKwl2YWx1ZXMgdG8gdGhlIGVtcHR5IHN0cmluZyBzaW5jZSB0aGVzZSBhcmUgbm8gbG9uZ2VyIGd1YXJhbnRlZWQKKwlpbml0aWFsaXplZCBieSB0aGUgZnJvbnQtZW5kLgorCSogZGF0YS9nbHIuYywgZGF0YS9nbHIuY2MsIGRhdGEvbGFscjEuY2MsIGRhdGEvcHVzaC5jLCBkYXRhL3lhY2MuYzogQWRkCisJYnJhY2VzIGFyb3VuZCBiNF91c2VyX3N0eXBlIHNpbmNlIHRoaXMgaXMgbm8gbG9uZ2VyIGRvbmUgYnkgdGhlCisJZnJvbnQtZW5kLgorCSogc3JjL2ZpbGVzLmMsIHNyYy9maWxlcy5oIChwcmVfcHJvbG9ndWVfb2JzdGFjaywKKwlwb3N0X3Byb2xvZ3VlX29ic3RhY2spOiBSZW1vdmUuCisJKiBzcmMvbXVzY2xlX3RhYi5jIChtdXNjbGVfcGFpcl9saXN0X2dyb3cpOiBEb24ndCBkdXBsaWNhdGUgaGVhZGVyCisJY29tbWVudHMgaGVyZS4gIFVzZSBNVVNDTEVfT0JTVEFDS19TR1JPVyBzbyB0aGF0IHZhbHVlcyBhcmUgZXNjYXBlZAorCXdpdGggZGlncmFwaHMuICBUaGlzIGZpeGVzIGxleCBwYXJhbXMgYW5kIHBhcnNlIHBhcmFtcy4KKwkqIHNyYy9tdXNjbGVfdGFiLmggKG11c2NsZV9wYWlyX2xpc3RfZ3Jvdyk6IFVwZGF0ZSBjb21tZW50cy4KKwkqIHNyYy9vdXRwdXQuYyAocHJlcGFyZSk6IFJlbW92ZSBtdXNjbGUgaW5zZXJ0aW9uIG9mIHRoZSBwcm9sb2d1ZXMuCisJKG91dHB1dCk6IFJlbW92ZSBmcmVlaW5nIG9mIHByZV9wcm9sb2d1ZV9vYnN0YWNrIGFuZAorCXBvc3RfcHJvbG9ndWVfb2JzdGFjay4KKwkqIHNyYy9wYXJzZS1ncmFtLnkgKHByb2xvZ3VlX2RlY2xhcmF0aW9uKTogVXNlIG11c2NsZV9jb2RlX2dyb3cgcmF0aGVyCisJdGhhbiBwcm9sb2d1ZV9hdWdtZW50IGZvciBwcm9sb2d1ZSBwYXJzaW5nIHNvIHlvdSBkb24ndCBuZWVkIHByb2xvZ3VlCisJb2JzdGFja3MuCisJKGdyYW1tYXJfZGVjbGFyYXRpb24pOiBGb3IgJXVuaW9uIFJIUywgdXNlIGBicmFjZWxlc3MnIGluc3RlYWQgb2YKKwkiey4uLn0iIHNvIHRoYXQgYnJhY2VzIGFyZSBhbHJlYWR5IHN0cmlwcGVkIGFuZCBjb2RlIGlzIGVzY2FwZWQgd2l0aAorCWRpZ3JhcGhzLgorCSogc3JjL3JlYWRlci5jIChwcm9sb2d1ZV9hdWdtZW50KTogUmVtb3ZlLgorCShyZWFkZXIpOiBSZW1vdmUgaW5pdGlhbGl6YXRpb24gb2YgcHJlX3Byb2xvZ3VlX29ic3RhY2sgYW5kCisJcG9zdF9wcm9sb2d1ZV9vYnN0YWNrLgorCSogc3JjL3JlYWRlci5oIChwcm9sb2d1ZV9hdWdtZW50KTogUmVtb3ZlLgorCisJKiBkYXRhL2MubTQ6IFJlbW92ZSBzdHJheSBwYXJlbnRoZXNpcy4KKworMjAwNy0wMS0wOCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlSZW1vdmUgcXVvdGVzIGZyb20gdmFyaWFibGVzIG5hbWVzIGluICVkZWZpbmUgZGlyZWN0aXZlcyBhbmQgZnJvbQorCXF1YWxpZmllcnMgaW4gJWNvZGUgZGlyZWN0aXZlcywgYW5kIHJlc3RyaWN0IHRoZSBjaGFyYWN0ZXJzIHRoYXQgYXJlCisJYWxsb3dlZCBpbiB0aGVtIHRvIE00LWZyaWVuZGx5IG9uZXMuICBGb3IgJWRlZmluZSwgY29udGludWUgdG8gc3VwcG9ydAorCXRoZSBxdW90ZWQgZm9ybSBhcyBhIGRlcHJlY2F0ZWQgZmVhdHVyZS4gIERpc2N1c3NlZCBzdGFydGluZyBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA3LTAxL21zZzAwMDIzLmh0bWw+LgorCSogTkVXUyAoMi4zYSspOiBBZGQgZW50cnkgZm9yIHRoZSBjaGFuZ2UgdG8gJWRlZmluZS4gIFVwZGF0ZSBlbnRyeSBmb3IKKwklY29kZS4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChQcm9sb2d1ZSBBbHRlcm5hdGl2ZXMpOiBVcGRhdGUuCisJKERlY2wgU3VtbWFyeSk6IEluICVkZWZpbmVzIGVudHJ5LCB1cGRhdGUgbWVudGlvbiBvZiBgJWNvZGUgcmVxdWlyZXMnCisJYW5kIGAlY29kZSBwcm92aWRlcycuCisJKEMrKyBMb2NhdGlvbiBWYWx1ZXMpOiBVcGRhdGUgJWRlZmluZSB1c2VzLgorCShDYWxjKysgUGFyc2VyIEludGVyZmFjZSk6IExpa2V3aXNlLgorCShDYWxjKysgUGFyc2VyKTogTGlrZXdpc2UsIGFuZCB1cGRhdGUgYCVjb2RlIHJlcXVpcmVzJyB1c2VzLgorCShUYWJsZSBvZiBTeW1ib2xzKTogVXBkYXRlICVjb2RlIGRvY3VtZW50YXRpb24uCisJKiBzcmMvcGFyc2UtZ3JhbS55IChwcm9sb2d1ZV9kZWNsYXJhdGlvbik6IEZvciAlZGVmaW5lIHZhcmlhYmxlcywgdXNlCisJYHZhcmlhYmxlJyBpbnN0ZWFkIG9mIGBTVFJJTkcnLgorCShncmFtbWFyX2RlY2xhcmF0aW9uKTogRm9yICVjb2RlIHF1YWxpZmllcnMsIHVzZSBgSUQnIGluc3RlYWQgb2YKKwlgU1RSSU5HJy4KKwkodmFyaWFibGUpOiBOZXcgbm9udGVybWluYWwgdGhhdCB0YWtlcyBhbiBgSUQnIG9yIGEgYFNUUklORycuCisJKiB0ZXN0cy9hY3Rpb25zLmF0IChfQVRfQ0hFQ0tfUFJJTlRFUl9BTkRfREVTVFJVQ1RPUik6IFVwZGF0ZSAlY29kZQorCWFuZCAlZGVmaW5lIHVzZXMuCisJKiB0ZXN0cy9jYWxjLmF0IChfQVRfREFUQV9DQUxDX1kpOiBVcGRhdGUgJWRlZmluZSB1c2UuCisJKiB0ZXN0cy9pbnB1dC5hdCAoUmVqZWN0IHVudXNlZCAlY29kZSBxdWFsaWZpZXJzKTogVXBkYXRlICVjb2RlIHVzZXMuCisJKCVkZWZpbmUgZXJyb3JzKTogVXBkYXRlICVkZWZpbmUgdXNlcy4KKworMjAwNy0wMS0wOCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIHNyYy9wYXJzZS1ncmFtLnkgKHByb2xvZ3VlX2RlY2xhcmF0aW9uKTogVXNlIE1VU0NMRV9JTlNFUlRfU1RSSU5HCisJaW5zdGVhZCBvZiBtdXNjbGVfaW5zZXJ0IGZvciAlZGVmaW5lIHZhbHVlcyBzbyB0aGF0IE00LXNwZWNpYWwKKwljaGFyYWN0ZXJzIGFyZSByZXBsYWNlZCB3aXRoIGRpZ3JhcGhzLgorCSogdGVzdHMvaW5wdXQuYXQgKCVkZWZpbmUgZXJyb3JzKTogRXh0ZW5kIHRvIGNoZWNrIHdlaXJkIHZhbHVlcy4KKworMjAwNy0wMS0wOCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlJbnN0ZWFkIG9mIGhhdmluZyBza2VsZXRvbnMgZGVjbGFyZSBhbGwgdmFsaWQgJWRlZmluZSB2YXJpYWJsZXMgYW5kCisJJWNvZGUgcXVhbGlmaWVycywgcHJvdmlkZSBtYWNyb3MgdGhhdCByZXRyaWV2ZSB0aGUgYXNzb2NpYXRlZCB2YWx1ZXMKKwlhbmQgYnVpbGQgdGhlc2UgbGlzdHMgYXV0b21hdGljYWxseS4gIFRodXMgQmlzb24gd2lsbCBub3cgd2FybiB3aGVuIGEKKwl2YXJpYWJsZSBvciBxdWFsaWZpZXIgaXMgbm90IHVzZWQgYnkgdGhlIHNrZWxldG9uIGluIHRoZSBjdXJyZW50CisJaW52b2NhdGlvbiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgbWlnaHQgc29tZXRpbWVzIGJlIHVzZWQgYnkgdGhhdAorCXNrZWxldG9uIGluIG90aGVyIGludm9jYXRpb25zLiAgQWxzbywgbW92ZSBhbGwgJWRlZmluZSB2YWx1ZSBtYWNyb3MgdG8KKwl0aGUgYjRfcGVyY2VudF9kZWZpbmVfIG5hbWVzcGFjZSwgYW5kIHJlbW92ZSB0aGUgJWRlZmluZSAiTkFNRSIge0NPREV9CisJZm9ybSwgd2hpY2ggaXMgcmVwbGFjZWQgYnkgJWNvZGUuCisJKiBkYXRhL2Jpc29uLm00IChiNF9jaGVja19mb3JfdW5yZWNvZ25pemVkX25hbWVzKTogUmVuYW1lIHRvLi4uCisJKGI0X2NoZWNrX3VzZXJfbmFtZXMpOiAuLi4gdGhpcywgYW5kIGNoYW5nZSB0aGUgc2VyaWVzIG9mIHZhbGlkIG5hbWUKKwlhcmd1bWVudHMgdG8gYSBzaW5nbGUgbGlzdCBhcmd1bWVudCBmb3IgbmFtZXMgdXNlZCBpbiB0aGUgc2tlbGV0b24KKwlzaW1pbGFyIHRvIHRoZSBleGlzdGluZyBsaXN0IGFyZ3VtZW50IGZvciBuYW1lcyB1c2VkIGluIHRoZSBncmFtbWFyLgorCVdhcm4gaW5zdGVhZCBvZiBjb21wbGFpbmluZy4KKwkoYjRfZ2V0X3BlcmNlbnRfZGVmaW5lLCBiNF9nZXRfcGVyY2VudF9jb2RlKTogTmV3IHRvIHJldHJpZXZlICVkZWZpbmUKKwl2YWx1ZXMgYW5kICVjb2RlIGNvZGUsIHRvIGZvcm1hdCAlY29kZSBjb2RlIHByb3Blcmx5LCBhbmQgdG8gYnVpbGQKKwlsaXN0cyBvZiBhbGwgJWRlZmluZSB2YXJpYWJsZXMgYW5kICVjb2RlIHF1YWxpZmllcnMgdXNlZCBpbiB0aGUKKwlza2VsZXRvbjogYjRfc2tlbGV0b25fcGVyY2VudF9kZWZpbmVfdmFyaWFibGVzIGFuZAorCWI0X3NrZWxldG9uX3BlcmNlbnRfY29kZV9xdWFsaWZpZXJzLgorCShiNF9jaGVja19wZXJjZW50X2RlZmluZV92YXJpYWJsZXMsIGI0X2NoZWNrX3BlcmNlbnRfY29kZV9xdWFsaWZpZXJzKToKKwlSZW1vdmUsIGFuZC4uLgorCShtNF93cmFwKTogLi4uIG00X3dyYXAgYjRfY2hlY2tfdXNlcl9uYW1lcyBpbnZvY2F0aW9ucyBpbnN0ZWFkIHNvIHRoYXQKKwl0aGUgc2tlbGV0b24gbmFtZXMgbGlzdHMgY2FuIGZpbmlzaCBidWlsZGluZyBmaXJzdC4gIEluIHBsYWNlIG9mCisJYjRfdXNlZF9wZXJjZW50X2RlZmluZV92YXJpYWJsZXMgYW5kIGI0X3VzZWRfcGVyY2VudF9jb2RlX3F1YWxpZmllcnMsCisJZXhwZWN0IHRoZSBsaXN0cyBiNF91c2VyX3BlcmNlbnRfZGVmaW5lX3ZhcmlhYmxlcyBhbmQKKwliNF91c2VyX3BlcmNlbnRfY29kZV9xdWFsaWZpZXJzLgorCSogZGF0YS9jKysubTQ6IFdoZXJlIHNldHRpbmcgZGVmYXVsdCB2YWx1ZXMgZm9yIGI0X3BhcnNlcl9jbGFzc19uYW1lLAorCWI0X2xvY2F0aW9uX3R5cGUsIGI0X2ZpbGVuYW1lX3R5cGUsIGI0X25hbWVzcGFjZSwgYW5kCisJYjRfZGVmaW5lX2xvY2F0aW9uX2NvbXBhcmlzb24sIHVwZGF0ZSB0aGVpciBuYW1lcyB0byB0aGUKKwliNF9wZXJjZW50X2RlZmluZV8gbmFtZXNwYWNlLgorCSogZGF0YS9nbHIuYzogRG9uJ3QgdXNlIGI0X2NoZWNrX3BlcmNlbnRfZGVmaW5lX3ZhcmlhYmxlcyBhbmQKKwliNF9jaGVja19wZXJjZW50X2NvZGVfcXVhbGlmaWVycy4gIFVzZSBiNF9nZXRfcGVyY2VudF9jb2RlLgorCSogZGF0YS9nbHIuY2MsIGRhdGEvbGFscjEuY2M6IExpa2V3aXNlLCBhbmQgdXNlIGI0X2dldF9wZXJjZW50X2RlZmluZS4KKwkoYjRfcGFyc2VyX2NsYXNzX25hbWUsIGI0X25hbWVzcGFjZSk6IERlZmluZSB0aGVzZSB1c2luZworCWI0X2dldF9wZXJjZW50X2RlZmluZSBmb3IgcGFyc2VyX2NsYXNzX25hbWUgYW5kIG5hbWVzcGFjZS4KKwkqIGRhdGEvbG9jYXRpb24uY2M6IFVzZSBiNF9nZXRfcGVyY2VudF9kZWZpbmUuCisJKiBkYXRhL3B1c2guYzogRG9uJ3QgdXNlIGI0X2NoZWNrX3BlcmNlbnRfZGVmaW5lX3ZhcmlhYmxlcyBhbmQKKwliNF9jaGVja19wZXJjZW50X2NvZGVfcXVhbGlmaWVycy4gIFVzZSBiNF9nZXRfcGVyY2VudF9jb2RlLgorCSogZGF0YS95YWNjLmM6IExpa2V3aXNlLCBhbmQgZG9uJ3QgY2FsbCBtNF9leGl0IGluCisJYjRfdXNlX3B1c2hfZm9yX3B1bGxfaWYgb3IgbTRfd3JhcCBjb2RlIHdpbGwgbmV2ZXIgZXhlY3V0ZS4KKwkqIHNyYy9tdXNjbGVfdGFiLmMsIHNyYy9tdXNjbGVfdGFiLmggKG11c2NsZV9ncm93X3VzZWRfbmFtZV9saXN0KToKKwlSZW5hbWUgdG8uLi4KKwkobXVzY2xlX2dyb3dfdXNlcl9uYW1lX2xpc3QpOiAuLi4gdGhpcyBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUKKwl0ZXJtaW5vbG9neSB1c2VkIGluIGJpc29uLm00LgorCSogc3JjL3BhcnNlLWdyYW0ueSAocHJvbG9ndWVfZGVjbGFyYXRpb24pOiBQcmVwZW5kICJwZXJjZW50X2RlZmluZV8iIHRvCisJJWRlZmluZSB2YXJpYWJsZSBuYW1lcywgYW5kIHJlbmFtZSBtdXNjbGUgdXNlZF9wZXJjZW50X2RlZmluZV92YXJpYWJsZXMKKwl0byB1c2VyX3BlcmNlbnRfZGVmaW5lX3ZhcmlhYmxlcy4KKwkoZ3JhbW1hcl9kZWNsYXJhdGlvbik6IFJlbmFtZSBtdXNjbGUgdXNlZF9wZXJjZW50X2NvZGVfcXVhbGlmaWVycyB0bworCXVzZXJfcGVyY2VudF9jb2RlX3F1YWxpZmllcnMuCisJKGNvbnRlbnQpOiBSZW1vdmUuCisJKGNvbnRlbnQub3B0KTogUmVwbGFjZSBjb250ZW50IFJIUyB3aXRoIFNUUklORyBSSFMgc28gJWRlZmluZSAiTkFNRSIKKwl7Q09ERX0gZm9ybSBpcyBubyBsb25nZXIgYWNjZXB0ZWQuCisJKiB0ZXN0cy9pbnB1dC5hdCAoUmVqZWN0IGJhZCAlY29kZSBxdWFsaWZpZXJzKTogUmVuYW1lIHRvLi4uCisJKFJlamVjdCB1bnVzZWQgJWNvZGUgcXVhbGlmaWVycyk6IC4uLiB0aGlzLCBhbmQgdXBkYXRlIHRlc3Qgb3V0cHV0LgorCSglZGVmaW5lIGVycm9yKTogVXBkYXRlIHRlc3Qgb3V0cHV0LgorCisyMDA3LTAxLTA3ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUNoZWNrIGZvciB1bnJlY29nbml6ZWQgJWRlZmluZSB2YXJpYWJsZXMgc2ltaWxhciB0byBjaGVja2luZyBmb3IKKwl1bnJlY29nbml6ZWQgJWNvZGUgcXVhbGlmaWVycy4gIENoZWNrIGZvciByZWRlZmluZWQgJWRlZmluZSB2YXJpYWJsZXMuCisJKiBkYXRhL2Jpc29uLm00IChiNF9jaGVja19mb3JfdW5yZWNvZ25pemVkX25hbWVzKTogTmV3IG1hY3JvIHRoYXQKKwlnZW5lcmFsaXplcy4uLgorCShiNF9jaGVja19wZXJjZW50X2NvZGVfcXVhbGlmaWVycyk6IC4uLiB0aGlzLCB3aGljaCBub3cgd3JhcHMgaXQuCisJKGI0X2NoZWNrX3BlcmNlbnRfZGVmaW5lX3ZhcmlhYmxlcyk6IE5ldywgYWxzbyB3cmFwcyBpdC4KKwkqIGRhdGEvZ2xyLmM6IFVubGVzcyBnbHIuY2MgaXMgd3JhcHBpbmcgZ2xyLmMsIGRlY2xhcmUgbm8gdmFsaWQgJWRlZmluZQorCXZhcmlhYmxlcyB1c2luZyBiNF9jaGVja19wZXJjZW50X2RlZmluZV92YXJpYWJsZXMuCisJKiBkYXRhL2dsci5jYywgZGF0YS9sYWxyMS5jYzogRGVjbGFyZSB0aGUgdmFsaWQgJWRlZmluZSB2YXJpYWJsZXMgYXMKKwlhbGwgdGhvc2UgZXhlcmNpc2VkIGluIHRoZSB0ZXN0IHN1aXRlIGFuZCBhbGwgdGhvc2UgbGlzdGVkIGluIHRoZQorCWBEZWZhdWx0IHZhbHVlcycgc2VjdGlvbiBvZiBjKysubTQuICBBcmUgdGhlcmUgb3RoZXJzPworCSogZGF0YS9wdXNoLmMsIGRhdGEveWFjYy5jOiBEZWNsYXJlIG5vIHZhbGlkICVkZWZpbmUgdmFyaWFibGVzLgorCSogc3JjL211c2NsZV90YWIuYywgc3JjL211c2NsZV90YWIuaCAobXVzY2xlX2ZpbmRfY29uc3QpOiBOZXcgZnVuY3Rpb24sCisJc2ltaWxhciB0byBtdXNjbGVfZmluZCwgYnV0IGl0IHdvcmtzIGV2ZW4gd2hlbiB0aGUgbXVzY2xlIHN0b3JlcyBhCisJY29uc3QgdmFsdWUuCisJKG11c2NsZV9ncm93X3VzZWRfbmFtZV9saXN0KTogTmV3IGZ1bmN0aW9uIGZvciBjb25zdHJ1Y3RpbmcgdGhlIHVzZWQKKwluYW1lIGxpc3QgbXVzY2xlcyB0aGF0IGI0X2NoZWNrX2Zvcl91bnJlY29nbml6ZWRfbmFtZXMgcmVxdWlyZXMuCisJKiBzcmMvcGFyc2UtZ3JhbS55IChwcm9sb2d1ZV9kZWNsYXJhdGlvbik6IFdhcm4gaWYgYSB2YXJpYWJsZSBpcworCSVkZWZpbmUnZCBtb3JlIHRoYW4gb25jZS4gIERlZmluZSB0aGUgYjRfdXNlZF9wZXJjZW50X2RlZmluZV92YXJpYWJsZXMKKwltdXNjbGUgd2l0aCBtdXNjbGVfZ3Jvd191c2VkX25hbWVfbGlzdC4KKwkoZ3JhbW1hcl9kZWNsYXJhdGlvbik6IEFiYnJldmlhdGUgJWNvZGUgY29kZSB3aXRoCisJbXVzY2xlX2dyb3dfdXNlZF9uYW1lX2xpc3QuCisJKiB0ZXN0cy9pbnB1dC5hdCAoJWRlZmluZSBlcnJvcnMpOiBOZXcuCisKKzIwMDctMDEtMDYgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJUHJvdmlkZSB3YXJuX2F0LCBjb21wbGFpbl9hdCwgYW5kIGZhdGFsX2F0IGZ1bmN0aW9uIGNhbGxiYWNrcyB0byB0aGUKKwlza2VsZXRvbnMsIGFuZCB1c2UgdGhpcyBmb3IgJWNvZGUgcXVhbGlmaWVyIGNvbXBsYWludHMuCisJKiBkYXRhL2Jpc29uLm00IChiNF9lcnJvcl9hdCk6IE5ldywgaW52b2tlZCBieS4uLgorCShiNF93YXJuX2F0LCBiNF9jb21wbGFpbl9hdCwgYjRfZmF0YWxfYXQpOiAuLi4gdGhlc2UgbmV3IG1hY3JvcyB0byB3cmFwCisJdGhlIHNrZWxldG9uIHNjYW5uZXIncyBuZXcgQHdhcm5fYXQoLi4uQCksIEBjb21wbGFpbl9hdCguLi5AKSwgYW5kCisJQGZhdGFsX2F0KC4uLkApIGRpcmVjdGl2ZXMuCisJKGI0X2NoZWNrX3BlcmNlbnRfY29kZV9xdWFsaWZpZXJzKTogUmV3cml0ZSB0byBleHBlY3QgbG9jYXRpb25zIGZvcgorCXF1YWxpZmllcnMgaW4gYjRfdXNlZF9wZXJjZW50X2NvZGVfcXVhbGlmaWVycyBhbmQgdG8gdXNlCisJYjRfY29tcGxhaW5fYXQuCisJKiBzcmMvbG9jYXRpb24uYywgc3JjL2xvY2F0aW9uLmggKGJvdW5kYXJ5X3NldF9mcm9tX3N0cmluZyk6IE5ldyBnbG9iYWwKKwlmdW5jdGlvbi4KKwkqIHNyYy9tdXNjbGVfdGFiLmMsIHNyYy9tdXNjbGVfdGFiLmggKG11c2NsZV9ib3VuZGFyeV9ncm93KTogTmV3IGdsb2JhbAorCWZ1bmN0aW9uLgorCSogc3JjL3BhcnNlLWdyYW0ueSAoZ3JhbW1hcl9kZWNsYXJhdGlvbik6IEFkZCBsb2NhdGlvbnMgZm9yIHF1YWxpZmllcnMKKwl0byBiNF91c2VkX3BlcmNlbnRfY29kZV9xdWFsaWZpZXJzLgorCSogc3JjL3NjYW4tc2tlbC5sIChmYWlsX2Zvcl9hdF9kaXJlY3RpdmVfdG9vX2Zld19hcmdzKTogTmV3IHN0YXRpYworCWZ1bmN0aW9uLgorCShBVF9ESVJFQ1RJVkVfQVJHQ19NQVgpOiBJbmNyZWFzZSBmb3IgYm91bmRhcnkgYXJndW1lbnRzLgorCShsaW5lbm8pOiBSZW5hbWUgdG8uLi4KKwkob3V0X2xpbmVubyk6IC4uLiB0aGlzIHNvIEkgZG9uJ3QgbWlzdW5kZXJzdGFuZCBpdCBhZ2Fpbi4KKwkoU0NfQVRfRElSRUNUSVZFX1NLSVBfV1MpOiBEb24ndCBpbmNyZW1lbnQgb3V0X2xpbmVubyBmb3IgbmV3bGluZXMKKwloZXJlOyB0aGVzZSBuZXdsaW5lcyBhcmUgaW4gdGhlIGlucHV0IGJ1dCBub3QgdGhlIG91dHB1dCBmaWxlLgorCShTQ19BVF9ESVJFQ1RJVkVfQVJHKTogTGlrZXdpc2UuICBFeHRyYWN0IGRpcmVjdGl2ZSBleGVjdXRpb24gdG8uLi4KKwkoYXRfZGlyZWN0aXZlX3BlcmZvcm0pOiAuLi4gdGhpcyBuZXcgc3RhdGljIGZ1bmN0aW9uLCBhbmQgYWRkIGhhbmRsaW5nCisJb2YgbmV3IEB3YXJuX2F0KC4uLkApLCBAY29tcGxhaW5fYXQoLi4uQCksIGFuZCBAZmF0YWxfYXQoLi4uQCkKKwlkaXJlY3RpdmVzLgorCSogdGVzdHMvaW5wdXQuYXQgKFJlamVjdCBiYWQgJWNvZGUgcXVhbGlmaWVycyk6IFVwZGF0ZSB0ZXN0IG91dHB1dCB3aXRoCisJbG9jYXRpb25zIGFuZCBleHRlbmQuCisKKwkqIHRlc3RzL291dHB1dC5hdCAoT3V0cHV0IGZpbGUgbmFtZTogWywgT3V0cHV0IGZpbGUgbmFtZTogXSk6IFJlbW92ZQorCWJvZ3VzIGNvbW1lbnQgYWJvdXQgdGhlc2UgdGVzdHMgZmFpbGluZy4KKworMjAwNy0wMS0wNiAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlDbGVhbiB1cCBiNF9jaGVja19wZXJjZW50X2NvZGVfcXVhbGlmaWVycyBhIGxpdHRsZS4KKwkqIGRhdGEvYmlzb24ubTQgKGI0X2NoZWNrX3BlcmNlbnRfY29kZV9xdWFsaWZpZXJzKTogRXhwZWN0IHF1YWxpZmllcnMKKwlpbiBiNF91c2VkX3BlcmNlbnRfY29kZV9xdWFsaWZpZXJzIHRvIGJlIGRvdWJsZS1NNC1xdW90ZWQuICBSZXdyaXRlCisJZG9jdW1lbnRhdGlvbiBhbmQgYWRkIGV4YW1wbGVzLgorCSogc3JjL3BhcnNlLWdyYW0ueSAoZ3JhbW1hcl9kZWNsYXJhdGlvbik6IERvdWJsZS1NNC1xdW90ZSB0aG9zZQorCXF1YWxpZmllcnMgaGVyZS4KKworMjAwNy0wMS0wNSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlEb24ndCB1c2UgbTRfZGl2ZXJ0IHNpbmNlIGl0IG1ha2VzIG00X2RpdmVydF9wdXNoIGFuZCBtNF9kaXZlcnRfcG9wCisJdW5yZWxpYWJsZSAtLSBlc3BlY2lhbGx5IHdoZW4gdGhleSdyZSBoaWRkZW4gaW5zaWRlIGFub3RoZXIgbWFjcm8uCisJKiBkYXRhL2Jpc29uLm00LCBkYXRhL2MrKy1za2VsLm00LCBkYXRhL2MrKy5tNCwgZGF0YS9jLXNrZWwubTQsCisJZGF0YS9jLm00OiBSZW1vdmUgbTRfZGl2ZXJ0KC0xKS4KKwkqIGRhdGEvZ2xyLmMsIGRhdGEvZ2xyLmNjLCBkYXRhL2xhbHIxLmNjLCBkYXRhL2xvY2F0aW9uLmNjLAorCWRhdGEvcHVzaC5jLCBkYXRhL3lhY2MuYzogTGlrZXdpc2UsIGFuZCByZXBsYWNlIG00X2RpdmVydCgwKSB3aXRoCisJbTRfZGl2ZXJ0X3B1c2goMCkgYW5kIG00X2RpdmVydF9wb3AoMCkuCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9za2VsZXRvbik6IERvbid0IGFkZCBhbiBtNF9kaXZlcnRfcHVzaCgwKSBhbmQKKwlhbiBtNF93cmFwKFttNF9kaXZlcnRfcG9wKDApXSkgdG8gdGhlIE00LiAgRGl2ZXJzaW9uIC0xLCB3aGljaCBpcworCXB1c2hlZCBhbmQgcG9wcGVkIGJ5IG00c3VnYXIsIHNob3VsZCBiZSBmaXJzdCBvbiB0aGUgc3RhY2suCisKKwlQcm92aWRlIHdhcm4sIGNvbXBsYWluLCBhbmQgZmF0YWwgZnVuY3Rpb24gY2FsbGJhY2tzIHRvIHRoZSBza2VsZXRvbnMuCisJVGhpcyBwcm92aWRlcyBtb3JlIGZsZXhpYmlsaXR5IHRoYW4gbTRfZmF0YWwsIGltcHJvdmVzIHRoZSBlcnJvcgorCW1lc3NhZ2UgZm9ybWF0LCBhbmQgY2FwdHVyZXMgbWVzc2FnZXMgZm9yIHRyYW5zbGF0aW9uLiAgRGlzY3Vzc2VkCisJc3RhcnRpbmcgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwNi0xMi9tc2cwMDA2My5odG1sPi4KKwkqIGRhdGEvYmlzb24ubTQgKGI0X2Vycm9yKTogTmV3LCBpbnZva2VkIGJ5Li4uCisJKGI0X3dhcm4sIGI0X2NvbXBsYWluLCBiNF9mYXRhbCk6IC4uLiB0aGVzZSBuZXcgbWFjcm9zIHRvIHdyYXAgdGhlCisJc2tlbGV0b24gc2Nhbm5lcidzIG5ldyBAd2FybiguLi5AKSwgQGNvbXBsYWluKC4uLkApLCBhbmQgQGZhdGFsKC4uLkApCisJZGlyZWN0aXZlcy4gIEJlY2F1c2UgdGhlc2UgTTQgbWFjcm9zIG1pZ2h0IGJlIGNhbGxlZCB3aGVuIHRoZSBjdXJyZW50CisJZGl2ZXJzaW9uIGlzIC0xIG9yIDAsIG00X2RpdmVydF9wdXNoIGFuZCBtNF9kaXZlcnRfcG9wIGlzIHVzZWQ7IHRodXMKKwl0aGUgcHJldmlvdXMgcmVtb3ZhbCBvZiB1c2VzIG9mIG00X2RpdmVydCwgd2hpY2ggY2F1c2VkIHRyb3VibGUuCisJKGI0X2NoZWNrX3BlcmNlbnRfY29kZV9xdWFsaWZpZXJzKTogVXNlIGI0X2NvbXBsYWluIGluc3RlYWQgb2YKKwltNF9mYXRhbCB0byByZXBvcnQgdW5yZWNvZ25pemVkICVjb2RlIHF1YWxpZmllcnMuCisJKiBkYXRhL2MrKy1za2VsLm00OiBVc2UgYjRfY29tcGxhaW4gaW5zdGVhZCBvZiBtNF9mYXRhbCB0byByZXBvcnQgQysrCisJcHVzaCBwYXJzZXIgcmVxdWVzdHMuCisJKiBkYXRhL2dsci5jOiBVc2UgYjRfY29tcGxhaW4gaW5zdGVhZCBvZiBtNF9mYXRhbCB0byByZXBvcnQKKwlub24tZGV0ZXJtaW5pc3RpYyBwdXNoIHBhcnNlciByZXF1ZXN0cy4KKwlVcGRhdGUgQG91dHB1dCB1c2FnZSB0byBAb3V0cHV0KC4uLkApIGZvcm0uCisJKiBkYXRhL2dsci5jYywgZGF0YS9sYWxyMS5jYzogVXNlIGI0X2ZhdGFsIGluc3RlYWQgb2YgbTRfZmF0YWwgdG8KKwlyZXBvcnQgbWlzc2luZyAlZGVmaW5lcy4gIFVwZGF0ZSBAb3V0cHV0IHVzYWdlIHRvIEBvdXRwdXQoLi4uQCkgZm9ybS4KKwkqIGRhdGEvbG9jYXRpb24uY2MsIGRhdGEvcHVzaC5jLCBkYXRhL3lhY2MuYzogVXBkYXRlIEBvdXRwdXQgdXNhZ2UgdG8KKwlAb3V0cHV0KC4uLkApIGZvcm0uCisJKiBzcmMvbWFpbi5jIChtYWluKTogSW52b2tlIHNrZWxfc2Nhbm5lcl9mcmVlLgorCSogc3JjL3NjYW4tc2tlbC5oIChza2VsX3NjYW5uZXJfZnJlZSk6IFByb3RvdHlwZSBuZXcgZnVuY3Rpb24uCisJKiBzcmMvc2Nhbi1za2VsLmwgKEZMRVhfTk9fT0JTVEFDSyk6IERvbid0IGRlZmluZTsgd2Ugbm93IG5lZWQgdGhlCisJb2JzdGFja19mb3Jfc3RyaW5nIGZyb20gZmxleC1zY2FubmVyLmguCisJKFlZX0RFQ0wpOiBVc2UgdG8gZGVjbGFyZSBza2VsX2xleCBzdGF0aWMuCisJKGRlY29kZV9hdF9kaWdyYXBocyk6IFJlbW92ZTsgbm93IGhhbmRsZWQgaW4gdGhlIG5ldworCVNDX0FUX0RJUkVDVElWRV9BUkcgc3RhcnQgY29uZGl0aW9uLgorCShmYWlsX2Zvcl9hdF9kaXJlY3RpdmVfdG9vX21hbnlfYXJncywgZmFpbF9mb3JfaW52YWxpZF9hdCk6IE5ldyBzdGF0aWMKKwlmdW5jdGlvbnMuCisJKGF0X2RpcmVjdGl2ZV9uYW1lLCBBVF9ESVJFQ1RJVkVfQVJHQ19NQVgsIGF0X2RpcmVjdGl2ZV9hcmdjLAorCWF0X2RpcmVjdGl2ZV9hcmd2KTogTmV3IHN0YXRpYyBnbG9iYWxzLgorCShJTklUSUFMKTogVXNlIGZhaWxfZm9yX2ludmFsaWRfYXQuCisJRG9uJ3QgcGFyc2UgYEBvdXRwdXQgZmlsZV9uYW1lXG4nIG9yIGBAYmFzZW5hbWUoLi4uQCknLiAgSW5zdGVhZCwKKwlyZWNvZ25pemUgdGhlIHN0YXJ0IG9mIGEgZ2VuZXJhbGl6ZWQgYEBkaXJlY3RpdmUoLi4uQCknIGZvcm0gYW5kCisJc3RhcnQuLi4KKwkoU0NfQVRfRElSRUNUSVZFX0FSRyk6IC4uLiB0aGlzIG5ldyBzdGFydCBjb25kaXRpb24gdG8gcGFyc2UgdGhlCisJZGlyZWN0aXZlIGFyZ3MgKHVzaW5nIHRoZSBuZXcgb2JzdGFja19mb3Jfc3RyaW5nKSwgdG8gZGVjb2RlIHRoZQorCWNvbnRhaW5lZCBAIGRpYWdyYXBocywgYW5kIHRvIHBlcmZvcm0gdGhlIGRpcmVjdGl2ZS4gIEl0IHJlY29nbml6ZXMKKwlAYmFzZW5hbWUoLi4uQCksIEB3YXJuKC4uLkApLCBAY29tcGxhaW4oLi4uQCksIEBmYXRhbCguLi5AKSwgYW5kCisJQG91dHB1dCguLi5AKS4KKwkoU0NfQVRfRElSRUNUSVZFX1NLSVBfV1MpOiBOZXcgc3RhcnQgY29uZGl0aW9uIHN0YXJ0ZWQgYnkKKwlTQ19BVF9ESVJFQ1RJVkVfQVJHIHRvIHNraXAgd2hpdGVzcGFjZSBhZnRlciB0aGUgYXJndW1lbnQgZGVsaW1pdGVyLAorCWBALCcuCisJKHNjYW5fc2tlbCk6IEluaXRpYWxpemUgb2JzdGFja19mb3Jfc3RyaW5nIG9uIHRoZSBmaXJzdCBjYWxsLgorCShza2VsX3NjYW5uZXJfZnJlZSk6IE5ldyBmdW5jdGlvbiB0byBmcmVlIG9ic3RhY2tfZm9yX3N0cmluZy4KKwkqIHRlc3RzL2lucHV0LmF0IChSZWplY3QgYmFkICVjb2RlIHF1YWxpZmllcnMpOiBVcGRhdGUgdGVzdCBvdXRwdXQuCisKKzIwMDctMDEtMDQgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJQ29uc29saWRhdGUgdGhlIDQgcHJvbG9ndWUgYWx0ZXJuYXRpdmUgZGlyZWN0aXZlcyAoJWNvZGUsICVyZXF1aXJlcywKKwklcHJvdmlkZXMsIGFuZCAlY29kZS10b3ApIGludG8gYSBzaW5nbGUgJWNvZGUgZGlyZWN0aXZlIHdpdGggYW4KKwlvcHRpb25hbCBxdWFsaWZpZXIgZmllbGQuICBEaXNjdXNzZWQgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwNy0wMS9tc2cwMDAxMi5odG1sPi4KKwkqIE5FV1MgKDIuM2ErKTogUmV3cml0ZSB0aGUgZXhpc3RpbmcgZW50cnkgZm9yIHRoZSBwcm9sb2d1ZQorCWFsdGVybmF0aXZlcy4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChQcm9sb2d1ZSBBbHRlcm5hdGl2ZXMpOiBVcGRhdGUuCisJKERlY2wgU3VtbWFyeSk6IFVwZGF0ZSB0byAlY29kZSAicmVxdWlyZXMiIGFuZCAlY29kZSAicHJvdmlkZXMiLgorCShDYWxjKysgUGFyc2VyKTogVXBkYXRlIHRvICVjb2RlICJyZXF1aXJlcyIuCisJKFRhYmxlIG9mIFN5bWJvbHMpOiBSZW1vdmUgZW50cmllcyBmb3IgJXJlcXVpcmVzLCAlcHJvdmlkZXMsIGFuZAorCSVjb2RlLXRvcC4gIFJld3JpdGUgJWNvZGUgZW50cnksIGFuZCBhZGQgYSAlY29kZSAiUVVBTElGSUVSIiBlbnRyeS4KKwkqIGRhdGEvYmlzb24ubTQgKGI0X3VzZXJfcHJvdmlkZXMsIGI0X3VzZXJfcmVxdWlyZXMpOiBSZW1vdmUgYXMgdGhlc2UKKwlhcmUgcmVwbGFjZWQgYnkgYjRfcGVyY2VudF9jb2RlX3Byb3ZpZGVzIGFuZCBiNF9wZXJjZW50X2NvZGVfcmVxdWlyZXMsCisJd2hpY2ggYXJlIHNrZWxldG9uLXNwZWNpZmljLgorCShiNF9jaGVja19wZXJjZW50X2NvZGVfcXVhbGlmaWVycyk6IE5ldy4gIEEgc2tlbGV0b24gY2FuIHVzZSB0aGlzIHRvCisJZGVjbGFyZSB3aGF0ICVjb2RlIHF1YWxpZmllcnMgaXQgc3VwcG9ydHMgYW5kIHRvIGNvbXBsYWluIGlmIGFueSBvdGhlcgorCXF1YWxpZmllcnMgd2VyZSB1c2VkIGluIHRoZSBncmFtbWFyLgorCSogZGF0YS9nbHIuY2M6IFVwZGF0ZSB0byB1c2UgYjRfdXNlcl9jb2RlKFtiNF9wZXJjZW50X2NvZGVfcmVxdWlyZXNdKQorCWFuZCBiNF91c2VyX2NvZGUoW2I0X3BlcmNlbnRfY29kZV9wcm92aWRlc10pIGluIHBsYWNlIG9mCisJYjRfdXNlcl9yZXF1aXJlcyBhbmQgYjRfdXNlcl9wcm92aWRlcy4KKwkqIGRhdGEvZ2xyLmMsIGRhdGEvbGFscjEuY2MsIGRhdGEvcHVzaC5jLCBkYXRhL3lhY2MuYzogTGlrZXdpc2UuCisJQWRkIGI0X3VzZXJfY29kZShbYjRfcGVyY2VudF9jb2RlX3RvcF0pIGFuZAorCWI0X3VzZXJfY29kZShbYjRfcGVyY2VudF9jb2RlXSkuCisJSW52b2tlIGI0X2NoZWNrX3BlcmNlbnRfY29kZV9xdWFsaWZpZXJzLgorCSogc3JjL3BhcnNlLWdyYW0ueSAoUEVSQ0VOVF9DT0RFX1RPUCwgUEVSQ0VOVF9QUk9WSURFUywKKwlQRVJDRU5UX1JFUVVJUkVTKTogUmVtb3ZlLgorCShncmFtbWFyX2RlY2xhcmF0aW9uKTogUmVtb3ZlIFJIUydzIGZvciAlY29kZS10b3AsICVwcm92aWRlcywgYW5kCisJJXJlcXVpcmVzLiAgUmV3cml0ZSB0aGUgJWNvZGUgUkhTIGFzIHRoZSB1bnF1YWxpZmllZCBmb3JtIGRlZmluaW5nIHRoZQorCW11c2NsZSBiNF9wZXJjZW50X2NvZGUuICBBZGQgYW5vdGhlciBSSFMgZm9yIHRoZSBxdWFsaWZpZWQgJWNvZGUgZm9ybSwKKwl3aGljaCBkZWZpbmVzIG11c2NsZXMgb2YgdGhlIGZvcm0gYjRfcGVyY2VudF9jb2RlX1FVQUxJRklFUiBhbmQgdGhlCisJYjRfdXNlZF9wZXJjZW50X2NvZGVfcXVhbGlmaWVycyBtdXNjbGUuCisJKiBzcmMvc2Nhbi1ncmFtLmwgKFBFUkNFTlRfQ09ERV9UT1AsIFBFUkNFTlRfUFJPVklERVMsCisJUEVSQ0VOVF9SRVFVSVJFUyk6IFJlbW92ZS4KKwkqIHRlc3RzL2FjdGlvbnMuYXQgKF9BVF9DSEVDS19QUklOVEVSX0FORF9ERVNUUlVDVE9SKTogVXBkYXRlIHRvIHVzZQorCSVjb2RlICJyZXF1aXJlcyIgYW5kICVjb2RlICJwcm92aWRlcyIuCisJKiB0ZXN0cy9pbnB1dC5hdCAoUmVqZWN0IGJhZCAlY29kZSBxdWFsaWZpZXJzKTogTmV3LgorCisyMDA3LTAxLTAzICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCVVzZSB0aGUgbmV3IGNvZGVfcHJvcHMgaW50ZXJmYWNlIGZvciBkZXN0cnVjdG9ycyBhbmQgcHJpbnRlcnMuCisJKiBzcmMvc3ltdGFiLmggKHN5bWJvbCwgc2VtYW50aWNfdHlwZSk6IFJlbW92ZSBkZXN0cnVjdG9yX2xvY2F0aW9uIGFuZAorCXByaW50ZXJfbG9jYXRpb24gbWVtYmVycywgYW5kIGNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgZGVzdHJ1Y3RvciBhbmQKKwlwcmludGVyIG1lbWJlcnMgdG8gY29kZV9wcm9wcy4KKwkoc3ltYm9sX2Rlc3RydWN0b3Jfc2V0LCBzeW1ib2xfZGVzdHJ1Y3Rvcl9nZXQsIHN5bWJvbF9wcmludGVyX3NldCwKKwlzeW1ib2xfcHJpbnRlcl9nZXQsIHNlbWFudGljX3R5cGVfZGVzdHJ1Y3Rvcl9zZXQsCisJc2VtYW50aWNfdHlwZV9wcmludGVyX3NldCwgZGVmYXVsdF90YWdnZWRfZGVzdHJ1Y3Rvcl9zZXQsCisJZGVmYXVsdF90YWdsZXNzX2Rlc3RydWN0b3Jfc2V0LCBkZWZhdWx0X3RhZ2dlZF9wcmludGVyX3NldCwKKwlkZWZhdWx0X3RhZ2xlc3NfcHJpbnRlcl9zZXQpOiBVc2UgY29kZV9wcm9wcyBpbiBhcmd1bWVudHMgYW5kIHJldHVybgorCXR5cGVzIGluIHBsYWNlIG9mIGNoYXIgY29uc3QgKiBhbmQgbG9jYXRpb24uCisJKHN5bWJvbF9kZXN0cnVjdG9yX2xvY2F0aW9uX2dldCwgc3ltYm9sX3ByaW50ZXJfbG9jYXRpb25fZ2V0KTogUmVtb3ZlCisJc2luY2UgdGhlIGxvY2F0aW9ucyBhcmUgbm93IGNvbnRhaW5lZCBpbiB0aGUgcmV0dXJuIG9mCisJc3ltYm9sX2Rlc3RydWN0b3JfZ2V0IGFuZCBzeW1ib2xfcHJpbnRlcl9nZXQuCisJKiBzcmMvb3V0cHV0LmMgKHN5bWJvbF9kZXN0cnVjdG9yc19vdXRwdXQsIHN5bWJvbF9wcmludGVyc19vdXRwdXQpOgorCVJlcGxhY2Ugd2l0aC4uLgorCShzeW1ib2xfY29kZV9wcm9wc19vdXRwdXQpOiAuLi4gdGhpcyB0byBlbGltaW5hdGUgZHVwbGljYXRlIGNvZGUuCisJKG91dHB1dF9za2VsZXRvbik6IFVwZGF0ZSB0byB1c2Ugc3ltYm9sX2NvZGVfcHJvcHNfb3V0cHV0LgorCSogc3JjL3JlYWRlci5jIChzeW1ib2xfc2hvdWxkX2JlX3VzZWQpOiBVcGRhdGUgdXNlIG9mCisJc3ltYm9sX2Rlc3RydWN0b3JfZ2V0LgorCSogc3JjL3N5bWxpc3QuYyAoc3ltYm9sX2xpc3RfZGVzdHJ1Y3Rvcl9zZXQsIHN5bWJvbF9saXN0X3ByaW50ZXJfc2V0KToKKwlVcGRhdGUgdXNlcyBvZiB0aGUgdmFyaW91cyBfZGVzdHJ1Y3Rvcl9zZXQgYW5kIF9wcmludGVyX3NldCBmdW5jdGlvbnMuCisJKiBzcmMvc3ltdGFiLmM6IChkZWZhdWx0X3RhZ2dlZF9kZXN0cnVjdG9yX2xvY2F0aW9uLAorCWRlZmF1bHRfdGFnbGVzc19kZXN0cnVjdG9yX2xvY2F0aW9uLCBkZWZhdWx0X3RhZ2dlZF9wcmludGVyX2xvY2F0aW9uLAorCWRlZmF1bHRfdGFnbGVzc19wcmludGVyX2xvY2F0aW9uKTogUmVtb3ZlIHNpbmNlIHdlLi4uCisJKGRlZmF1bHRfdGFnZ2VkX2Rlc3RydWN0b3IsIGRlZmF1bHRfdGFnbGVzc19kZXN0cnVjdG9yLAorCWRlZmF1bHRfdGFnZ2VkX3ByaW50ZXIsIGRlZmF1bHRfdGFnbGVzc19wcmludGVyKTogLi4uIGNoYW5nZSB0aGUgdHlwZQorCW9mIHRoZXNlIHRvIGNvZGVfcHJvcHMuCisJKHN5bWJvbF9uZXcsIHNlbWFudGljX3R5cGVfbmV3LCBzeW1ib2xfZGVzdHJ1Y3Rvcl9zZXQsCisJc2VtYW50aWNfdHlwZV9kZXN0cnVjdG9yX3NldCwgc3ltYm9sX2Rlc3RydWN0b3JfZ2V0LAorCXN5bWJvbF9wcmludGVyX3NldCwgc2VtYW50aWNfdHlwZV9wcmludGVyX3NldCwgc3ltYm9sX3ByaW50ZXJfZ2V0LAorCXN5bWJvbF9jaGVja19hbGlhc19jb25zaXN0ZW5jeSwgZGVmYXVsdF90YWdnZWRfZGVzdHJ1Y3Rvcl9zZXQsCisJZGVmYXVsdF90YWdsZXNzX2Rlc3RydWN0b3Jfc2V0LCBkZWZhdWx0X3RhZ2dlZF9wcmludGVyX3NldCwKKwlkZWZhdWx0X3RhZ2xlc3NfcHJpbnRlcl9zZXQpOiBVcGRhdGUuCisJKHN5bWJvbF9kZXN0cnVjdG9yX2xvY2F0aW9uX2dldCwgc3ltYm9sX3ByaW50ZXJfbG9jYXRpb25fZ2V0KTogUmVtb3ZlLgorCShTWU1CT0xfQ09ERV9QUklOVCk6IE5ldyBzaW1pbGFyIHRvIFNZTUJPTF9BVFRSX1BSSU5UIGJ1dCBmb3IKKwljb2RlX3Byb3BzIG1lbWJlcnMuCisJKHN5bWJvbF9wcmludCk6IFVzZSBTWU1CT0xfQ09ERV9QUklOVC4KKworMjAwNy0wMS0wMyAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlVc2UgdGhlIG5ldyBjb2RlX3Byb3BzIGludGVyZmFjZSBmb3IgcnVsZSBhY3Rpb25zLgorCSogc3JjL3N5bWxpc3QuaCAoc3ltYm9sX2xpc3QpOiBSZXBsYWNlIGFjdGlvbiwgYWN0aW9uX2xvY2F0aW9uLCBhbmQKKwl1c2VkIG1lbWJlcnMgd2l0aCBhIGNvZGVfcHJvcHMgYWN0aW9uX3Byb3BzIG1lbWJlci4KKwkqIHNyYy9yZWFkZXIuYyAoc3ltYm9sX3Nob3VsZF9iZV91c2VkLCBncmFtbWFyX3J1bGVfY2hlY2ssCisJZ3JhbW1hcl9taWRydWxlX2FjdGlvbiwgZ3JhbW1hcl9jdXJyZW50X3J1bGVfbWVyZ2Vfc2V0LAorCWdyYW1tYXJfY3VycmVudF9ydWxlX3N5bWJvbF9hcHBlbmQsIHBhY2tncmFtKTogVXBkYXRlLgorCSogc3JjL3NjYW4tY29kZS5oICh0cmFuc2xhdGVfcnVsZV9hY3Rpb24pOiBSZW1vdmUsIG5vIGxvbmdlciB1c2VkLgorCSogc3JjL3NjYW4tY29kZS5sIChoYW5kbGVfYWN0aW9uX2RvbGxhcik6IFVwZGF0ZS4KKwkodHJhbnNsYXRlX3J1bGVfYWN0aW9uKTogUmVtb3ZlLCBubyBsb25nZXIgdXNlZC4KKwkqIHNyYy9zeW1saXN0LmMgKHN5bWJvbF9saXN0X3N5bV9uZXcsIHN5bWJvbF9saXN0X3N5bXNfcHJpbnQpOiBVcGRhdGUuCisKKzIwMDctMDEtMDIgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJVXNlIHRoZSBuZXcgY29kZV9wcm9wcyBpbnRlcmZhY2UgaW4gcGFyc2UtZ3JhbS55LgorCSogc3JjL3BhcnNlLWdyYW0ueSAocHJvbG9ndWVfZGVjbGFyYXRpb24sIGJyYWNlbGVzcywgZXBpbG9ndWUub3B0KToKKwlVcGRhdGUgYWxsIHVzZXMgb2YgdHJhbnNsYXRlXyogZnVuY3Rpb25zIHRvIHVzZSB0aGUgbmV3IGNvZGVfcHJvcHMKKwlpbnRlcmZhY2UgYW5kIHRvIHVzZSBncmFtX3NjYW5uZXJfbGFzdF9zdHJpbmdfZnJlZSBhbmQKKwljb2RlX3NjYW5uZXJfbGFzdF9zdHJpbmdfZnJlZSB3aGVyZSBwb3NzaWJsZS4KKwkoZ3JhbW1hcl9kZWNsYXJhdGlvbik6IHN5bWJvbF9saXN0X2Rlc3RydWN0b3Jfc2V0IGFuZAorCXN5bWJvbF9saXN0X3ByaW50ZXJfc2V0IG5vdyBwZXJmb3JtIHRoZSB0cmFuc2xhdGlvbiwgc28gZG9uJ3QgZG8gaXQKKwloZXJlLiAgVXNlIGdyYW1fc2Nhbm5lcl9sYXN0X3N0cmluZ19mcmVlIHdoZXJlIHBvc3NpYmxlLgorCSogc3JjL3NjYW4tY29kZS5oLCBzcmMvc2Nhbi1jb2RlLmwgKHRyYW5zbGF0ZV9zeW1ib2xfYWN0aW9uLAorCXRyYW5zbGF0ZV9jb2RlKTogUmVtb3ZlLCBubyBsb25nZXIgdXNlZC4KKwkqIHNyYy9zeW1saXN0LmgsIHNyYy9zeW1saXN0LmMgKHN5bWJvbF9saXN0X2Rlc3RydWN0b3Jfc2V0LAorCXN5bWJvbF9saXN0X3ByaW50ZXJfc2V0KTogUGVyZm9ybSBjb2RlIHRyYW5zbGF0aW9uIGhlcmUgcmF0aGVyIHRoYW4KKwlkZXBlbmRpbmcgb24gdGhlIGNhbGxlciB0byBkbyBzby4KKworCSogc3JjL3N5bWxpc3QuaCAoc3RydWN0IHN5bWJvbF9saXN0KTogQ29ycmVjdCBzb21lIGRvY3VtZW50YXRpb24gdHlwb3MuCisJKiBzcmMvc2Nhbi1ncmFtLmggKGdyYW1fbGFzdF9zdHJpbmcpOiBSZW1vdmUgZGVjbGFyYXRpb24uCisJKiBzcmMvc2Nhbi1ncmFtLmwgKGxhc3Rfc3RyaW5nKTogRGVjbGFyZSBpdCBzdGF0aWMuCisKKzIwMDctMDEtMDIgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJRW5jYXBzdWxhdGUgY29kZSBwcm9wZXJ0aWVzIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSB2YXJpb3VzCisJZGVzdHJ1Y3RvcnMsIHByaW50ZXJzLCBhbmQgYWN0aW9ucyBpbnRvIGEgY29kZV9wcm9wcyBzdHJ1Y3R1cmUgYW5kCisJaW50ZXJmYWNlLiAgVGhpcyBwYXRjaCBtZXJlbHkgaW1wbGVtZW50cyBjb2RlX3Byb3BzIGluIHNjYW4tY29kZS5oIGFuZAorCXNjYW4tY29kZS5sLiAgRnV0dXJlIHBhdGNoZXMgd2lsbCByZXdyaXRlIG90aGVyIG1vZHVsZXMgdG8gdXNlIGl0LgorCURpc2N1c3NlZCBzdGFydGluZyBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA2LTExL21zZzAwMDIwLmh0bWw+LgorCSogc3JjL2xvY2F0aW9uLmggKEVNUFRZX0xPQ0FUSU9OX0lOSVQpOiBEZWZpbmUgc28gdGhhdCBpdCdzIGVhc2llciB0bworCWNvbnNpc3RlbnRseSBpbml0aWFsaXplIGNvbnN0IHN0cnVjdHMgdGhhdCBoYXZlIGFuIGVtcHR5IGxvY2F0aW9uCisJZmllbGQuCisJKiBzcmMvbG9jYXRpb24uYyAoZW1wdHlfbG9jYXRpb24pOiBJbml0aWFsaXplIHdpdGggRU1QVFlfTE9DQVRJT05fSU5JVAorCXRvIGVuc3VyZSBjb25zaXN0ZW5jeS4KKwkqIHNyYy9zY2FuLWNvZGUuaCAoY29kZV9wcm9wcyk6IE5ldyBzdHJ1Y3R1cmUuCisJKGNvZGVfcHJvcHNfbm9uZV9pbml0LCBDT0RFX1BST1BTX05PTkVfSU5JVCwgY29kZV9wcm9wc19ub25lKTogTmV3CisJZnVuY3Rpb24sIG1hY3JvLCBhbmQgY29uc3QgZ2xvYmFsIHZhcmlhYmxlIGZvciBpbml0aWFsaXppbmcgYQorCWNvZGVfcHJvcHMgd2l0aCBubyBjb2RlLgorCShjb2RlX3Byb3BzX3BsYWluX2luaXQsIGNvZGVfcHJvcHNfc3ltYm9sX2FjdGlvbl9pbml0LAorCWNvZGVfcHJvcHNfcnVsZV9hY3Rpb25faW5pdCwgY29kZV9wcm9wc190cmFuc2xhdGVfY29kZSk6IFRoZSByZXN0IG9mCisJdGhlIG5ldyBjb2RlX3Byb3BzIGZ1bmN0aW9uYWwgaW50ZXJmYWNlLiAgQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGUgaW5pdAorCWZ1bmN0aW9ucyBzZXQgdGhlIGNvZGVfcHJvcHMga2luZCBmaWVsZCBzbyB0aGF0CisJY29kZV9wcm9wc190cmFuc2xhdGVfY29kZSB3aWxsIGtub3cgd2hldGhlciB0byBiZWhhdmUgbGlrZQorCXRyYW5zbGF0ZV9zeW1ib2xfYWN0aW9uLCB0cmFuc2xhdGVfcnVsZV9hY3Rpb24sIG9yIHRyYW5zbGF0ZV9jb2RlLgorCVRoZXNlIG9sZCB0cmFuc2xhdGUgZnVuY3Rpb25zIG11c3QgcmVtYWluIHVudGlsIGFsbCBvdGhlciBtb2R1bGVzIGFyZQorCXVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgY29kZV9wcm9wcyBpbnRlcmZhY2UuCisJKGNvZGVfc2Nhbm5lcl9sYXN0X3N0cmluZ19mcmVlKTogTmV3IGZ1bmN0aW9uIHNpbWlsYXIgdG8KKwlncmFtX3NjYW5uZXJfbGFzdF9zdHJpbmdfZnJlZS4KKwkoY29kZV9zY2FubmVyX2ZyZWUpOiBBZGQgZG9jdW1lbnRhdGlvbi4KKwkqIHNyYy9zY2FuLWNvZGUubDogSW1wbGVtZW50IHRoZSBuZXcgaW50ZXJmYWNlLgorCShjb2RlX2xleCk6IE1ha2UgaXQgc3RhdGljLCBhZGQgYSBjb2RlX3Byb3BzKiBhcmd1bWVudCwgYW5kIHJlbW92ZSB0aGUKKwlydWxlIGFyZ3VtZW50LgorCShsYXN0X3N0cmluZyk6IE5ldyBzdGF0aWMgZ2xvYmFsIHNpbWlsYXIgdG8gdGhlIG9uZSBpbiBzY2FuLWdyYW0ubC4KKwkoU0NfUlVMRV9BQ1RJT04pOiBVcGRhdGUgdG8gdXNlIHRoZSBjb2RlX3Byb3BzKiBhcmd1bWVudCB0byBjb2RlX2xleAorCWluc3RlYWQgb2YgcnVsZS4KKwkoU0NfU1lNQk9MX0FDVElPTik6IEZvciAkJCwgc2V0IHRoZSBpc192YWx1ZV91c2VkIG1lbWJlciBvZiB0aGUKKwljb2RlX3Byb3BzIHNpbmNlIEJpc29uIG1heSBvbmUgZGF5IHVzZSB0aGlzIGluZm9ybWF0aW9uIGZvciBkZXN0cnVjdG9ycworCWFuZCBwcmludGVycy4KKwkoPCo+PDxFT0Y+Pik6IFVzZSBTVFJJTkdfRklOSVNIIHNvIHRoYXQgbGFzdF9zdHJpbmcgaXMgc2V0LgorCShoYW5kbGVfYWN0aW9uX2RvbGxhcik6IFVzZSBzeW1ib2xfbGlzdF9uX2dldCBhbmQgc2V0IHVzZWQgZmxhZworCWRpcmVjdGx5IHNpbmNlIHN5bWJvbF9saXN0X25fdXNlZF9zZXQgaXMgcmVtb3ZlZC4KKwkodHJhbnNsYXRlX2FjdGlvbik6IEFkZCBhIGNvZGVfcHJvcHMqIGFyZ3VtZW50IGFuZCByZW1vdmUgdGhlIHJ1bGUsCisJYWN0aW9uLCBhbmQgbG9jYXRpb24gYXJndW1lbnRzLiAgUGFzcyB0aGUgY29kZV9wcm9wcyogb24gdG8gY29kZV9sZXguCisJKHRyYW5zbGF0ZV9ydWxlX2FjdGlvbiwgdHJhbnNsYXRlX3N5bWJvbF9hY3Rpb24sIHRyYW5zbGF0ZV9jb2RlKToKKwlSZXdyaXRlIGFzIHdyYXBwZXJzIGFyb3VuZCB0aGUgbmV3IGNvZGVfcHJvcHMgaW50ZXJmYWNlLgorCSogc3JjL3N5bWxpc3QuaCwgc3JjL3N5bWxpc3QuYyAoc3ltYm9sX2xpc3Rfbl91c2VkX3NldCk6IFJlbW92ZSBzaW5jZQorCWl0IHdvdWxkIGV2ZW50dWFsbHkgbmVlZCB0byBicmVhayB0aGUgZW5jYXBzdWxhdGlvbiBvZiBjb2RlX3Byb3BzLgorCisyMDA3LTAxLTAxICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogZXRjLy5jdnNpZ25vcmU6IE5ldy4KKworMjAwNy0wMS0wMSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlBZGQgbWFpbnRhaW5lci1wdXNoLWNoZWNrIHRvIHJ1biBtYWludGFpbmVyLWNoZWNrIHVzaW5nIHB1c2ggcGFyc2luZyBpbgorCXBsYWNlIG9mIHB1bGwgcGFyc2luZyB3aGVyZSBhdmFpbGFibGUuCisJKiBNYWtlZmlsZS5hbSAobWFpbnRhaW5lci1wdXNoLWNoZWNrKTogTmV3LgorCSogZGF0YS9iaXNvbi5tNCAoYjRfdXNlX3B1c2hfZm9yX3B1bGxfaWYpOiBOZXcuCisJKiBkYXRhL3B1c2guYzogUmVkZWZpbmUgYjRfcHVzaF9pZiBhbmQgYjRfdXNlX3B1c2hfZm9yX3B1bGxfaWYKKwlhcHByb3ByaWF0ZWx5IGJhc2VkIG9uIHRoZWlyIGV4aXN0aW5nIHZhbHVlcy4KKwkoeXlwdXNoX3BhcnNlKTogRG9uJ3QgcHJpbnQgcHVzaC1wYXJzZXItc3BlY2lmaWMgZGlhZ25vc3RpY3MgaWYgcHVzaAorCXBhcnNpbmcgaXMgYmVpbmcgdXNlZCBpbiBwbGFjZSBvZiBwdWxsIHBhcnNpbmcuCisJKiBkYXRhL3lhY2MuYzogSWYgcHVzaCBwYXJzaW5nIHNob3VsZCByZXBsYWNlIHB1bGwgcGFyc2luZywgcmVkaXJlY3QgdG8KKwlwdXNoLmMuCisJKiBzcmMvb3V0cHV0LmMgKHByZXBhcmUpOiBDaGVjayBCSVNPTl9VU0VfUFVTSF9GT1JfUFVMTCBlbnZpcm9ubWVudAorCXZhcmlhYmxlLCBhbmQgaW5zZXJ0IGI0X3VzZV9wdXNoX2Zvcl9wdWxsX2ZsYWcgaW50byBtdXNjbGVzLgorCSogdGVzdHMvTWFrZWZpbGUuYW0gKG1haW50YWluZXItcHVzaC1jaGVjayk6IE5ldy4KKworMjAwNi0xMi0zMSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIGRhdGEvcHVzaC5jICh5eXB1c2hfcGFyc2UpOiBTZXQgeXluZXcgPSAxIGF0IHRoZSBlbmQgb2YgYSBwYXJzZQorCSh3aGV0aGVyIHN1Y2Nlc3NmdWwgb3IgZmFpbGVkKSBzbyB0aGF0IHl5cHVzaF9wYXJzZSBjYW4gYmUgaW52b2tlZAorCWFnYWluIHRvIHN0YXJ0IGEgbmV3IHBhcnNlIHVzaW5nIHRoZSBzYW1lIHl5cHN0YXRlLgorCSogdGVzdHMvdG9ydHVyZS5hdCAoQVRfREFUQV9TVEFDS19UT1JUVVJFKTogRm9yIHB1c2ggbW9kZSwgZXh0ZW5kIHRvCisJY2hlY2sgbXVsdGlwbGUgeXlwdWxsX3BhcnNlIGludm9jYXRpb25zIG9uIHRoZSBzYW1lIHl5cHN0YXRlLiAgRm9yIHB1bGwKKwltb2RlLCBleHRlbmQgdG8gY2hlY2sgbXVsdGlwbGUgeXlwYXJzZSBpbnZvY2F0aW9ucy4KKwkoRXhwbG9kaW5nIHRoZSBTdGFjayBTaXplIHdpdGggQWxsb2NhKTogRXh0ZW5kIHRvIHRyeSB3aXRoCisJJXB1c2gtcHVsbC1wYXJzZXIuCisJKEV4cGxvZGluZyB0aGUgU3RhY2sgU2l6ZSB3aXRoIE1hbGxvYyk6IExpa2V3aXNlLgorCisJKiB0ZXN0cy9jYWxjLmF0IChTaW1wbGUgTEFMUiBDYWxjdWxhdG9yKTogRG9uJ3Qgc3BlY2lmeQorCSVza2VsZXRvbiAicHVzaC5jIiBzaW5jZSAlcHVzaC1wdWxsLXBhcnNlciBpbXBsaWVzIHRoYXQgbm93LgorCSogdGVzdHMvaGVhZGVycy5hdCAoZXhwb3J0IFlZTFRZUEUpOiBEb24ndCBjaGVjayBmb3IgdGhlIHB1c2gKKwlkZWNsYXJhdGlvbnMuICBPdGhlcndpc2UsIHRoaXMgdGVzdCBjYXNlIGNhbid0IGJlIHVzZWQgdG8gc2VlIGlmIHB1c2gKKwltb2RlIGNhbiB0cnVseSBlbXVsYXRlIHB1bGwgbW9kZS4KKwkqIHRlc3RzL2lucHV0LmF0IChUb3J0dXJpbmcgdGhlIFNjYW5uZXIpOiBMaWtld2lzZS4KKwkqIHRlc3RzL2xvY2FsLmF0IChBVF9ZQUNDX09SX1BVU0hfSUYsIEFUX1BVU0hfSUYpOiBSZW1vdmUuCisJKEFUX1lZRVJST1JfU0VFU19MT0NfSUYpOiBSYXRoZXIgdGhhbiBBVF9ZQUNDX09SX1BVU0hfSUYsIHVzZQorCUFUX1lBQ0NfSUYsIHdoaWNoIG5vdyBpbmNsdWRlcyB0aGUgY2FzZSBvZiBwdXNoIG1vZGUgc2luY2UgJXNrZWxldG9uCisJbmVlZCBub3QgYmUgdXNlZCBmb3IgcHVzaCBtb2RlLiAgVGhpcyB3aWxsIGJlIG1vcmUgaW50dWl0aXZlIG9uY2UKKwlwdXNoLmMgaXMgcmVuYW1lZCB0byB5YWNjLmMuCisKKzIwMDYtMTItMzEgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJRm9yIHB1c2ggbW9kZSwgY29udmVydCB5eXBhcnNlIGZyb20gYSBtYWNybyB0byBhIGZ1bmN0aW9uLCBpbnZva2UgeXlsZXgKKwlpbnN0ZWFkIG9mIHBhc3NpbmcgYSB5eWxleHAgYXJndW1lbnQgdG8geXlwdWxsX3BhcnNlLCBhbmQgZG9uJ3QKKwlnZW5lcmF0ZSB5eXB1bGxfcGFyc2Ugb3IgeXlwYXJzZSB1bmxlc3MgJXB1c2gtcHVsbC1wYXJzZXIgaXMgZGVjbGFyZWQuCisJRGlzY3Vzc2VkIHN0YXJ0aW5nIGF0CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDYtMTIvbXNnMDAxNjMuaHRtbD4uCisJKiBkYXRhL2Jpc29uLm00IChiNF9wdWxsX2lmKTogTmV3LgorCSogZGF0YS9jLm00IChiNF9pZGVudGlmaWNhdGlvbik6IERlZmluZSBZWVBVTEwgc2ltaWxhciB0byBZWVBVU0guCisJKiBkYXRhL3B1c2guYzogSW1wcm92ZSBNNCBxdW90aW5nIGEgbGl0dGxlLgorCShiNF9nZW5lcmF0ZV9tYWNyb19hcmdzLCBiNF9wYXJlbnRoZXNpemUpOiBSZW1vdmUuCisJKHl5cGFyc2UpOiBJZiB0aGVyZSdzIGEgYjRfcHJlZml4LCAjZGVmaW5lIHRoaXMgdG8gYjRfcHJlZml4W3BhcnNlXQorCWFueSB0aW1lIGEgcHVsbCBwYXJzZXIgaXMgcmVxdWVzdGVkLgorCURvbid0ICNkZWZpbmUgdGhpcyBhcyBhIHdyYXBwZXIgYXJvdW5kIHl5cHVsbF9wYXJzZS4gIEluc3RlYWQsIHdoZW4KKwlib3RoIHB1c2ggYW5kIHB1bGwgYXJlIHJlcXVlc3RlZCwgbWFrZSBpdCBhIGZ1bmN0aW9uIHRoYXQgZG9lcyB0aGF0CisJc2FtZSB0aGluZy4KKwkoeXlwdWxsX3BhcnNlKTogSWYgdGhlcmUncyBhIGI0X3ByZWZpeCwgI2RlZmluZSB0aGlzIHRvCisJYjRfcHJlZml4W3B1bGxfcGFyc2VdIHdoZW4gYm90aCBwdXNoIGFuZCBwdWxsIGFyZSByZXF1ZXN0ZWQuCisJRG9uJ3QgZGVmaW5lIHRoaXMgYXMgYSBmdW5jdGlvbiB1bmxlc3MgYm90aCBwdXNoIGFuZCBwdWxsIGFyZQorCXJlcXVlc3RlZC4KKwlSZW1vdmUgdGhlIHl5bGV4cCBhcmd1bWVudCBhbmQgaGFyZC1jb2RlIHl5bGV4IGludm9jYXRpb24gaW5zdGVhZC4KKwkqIGV0Yy9iZW5jaC5wbC5pbiAoYmVuY2hfZ3JhbW1hcik6IFVzZSAlcHVzaC1wdWxsLXBhcnNlciBpbnN0ZWFkIG9mCisJJXB1c2gtcGFyc2VyLgorCSogc3JjL2dldGFyZ3MuYyAocHVsbF9wYXJzZXIpOiBOZXcgZ2xvYmFsIGluaXRpYWxpemVkIHRvIHRydWUuCisJKiBnZXRhcmdzLmggKHB1bGxfcGFyc2VyKTogZXh0ZXJuIGl0LgorCSogc3JjL291dHB1dC5jIChwcmVwYXJlKTogSW5zZXJ0IHB1bGxfZmxhZyBtdXNjbGUuCisJKiBzcmMvcGFyc2UtZ3JhbS55IChQRVJDRU5UX1BVU0hfUFVMTF9QQVJTRVIpOiBOZXcgdG9rZW4uCisJKHByb2xvZ3VlX2RlY2xhcmF0aW9uKTogU2V0IGJvdGggcHVzaF9wYXJzZXIgYW5kIHB1bGxfcGFyc2VyID0gdHJ1ZSBmb3IKKwklcHVzaC1wdWxsLXBhcnNlci4gIFNldCBwdXNoX3BhcnNlciA9IHRydWUgYW5kIHB1bGxfcGFyc2VyID0gZmFsc2UgZm9yCisJJXB1c2gtcGFyc2VyLgorCSogc3JjL3NjYW4tZ3JhbS5sOiBEb24ndCBhY2NlcHQgJXB1c2hfcGFyc2VyIGFzIGFuIGFsdGVybmF0aXZlIHRvCisJJXB1c2gtcGFyc2VyIHNpbmNlIHRoZXJlJ3Mgbm8gYmFja3dhcmQtY29tcGF0aWJpbGl0eSBjb25jZXJuIGhlcmUuCisJU2NhbiAlcHVzaC1wdWxsLXBhcnNlci4KKwkqIHRlc3RzL2NhbGMuYXQgKFNpbXBsZSBMQUxSKDEpIENhbGN1bGF0b3IpOiBVc2UgJXB1c2gtcHVsbC1wYXJzZXIKKwlpbnN0ZWFkIG9mICVwdXNoLXBhcnNlci4KKwkqIHRlc3RzL2hlYWRlcnMuYXQgKGV4cG9ydCBZWUxUWVBFKTogTWFrZSB5eWxleCBzdGF0aWMsIGFuZCBkb24ndAorCXByb3RvdHlwZSBpdCBpbiB0aGUgbW9kdWxlIHRoYXQgY2FsbHMgeXlwYXJzZS4KKwkqIHRlc3RzL2lucHV0LmF0IChUb3J0dXJpbmcgdGhlIFNjYW5uZXIpOiBMaWtld2lzZS4KKwkqIHRlc3RzL2xvY2FsLmF0IChBVF9QVVNIX0lGKTogQ2hlY2sgZm9yICVwdXNoLXB1bGwtcGFyc2VyIGFzIHdlbGwuCisKKzIwMDYtMTItMjYgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJVXBkYXRlIGV0Yy9iZW5jaC5wbC4gIE9wdGltaXplIHB1c2ggbW9kZSBhIGxpdHRsZSAodGhlIHl5biBjaGFuZ2UKKwlkZXNlcnZlcyBtb3N0IG9mIHRoZSBjcmVkaXQpLgorCSogTWFrZWZpbGUuYW0gKFNVQkRJUlMpOiBBZGQgZXRjIHN1YmRpcmVjdG9yeS4KKwkqIGNvbmZpZ3VyZS5hYyAoQUNfQ09ORklHX0ZJTEVTKTogQWRkIGV0Yy9iZW5jaC5wbCBhbmQgZXRjL01ha2VmaWxlLgorCSogZGF0YS9wdXNoLmMgKGI0X2RlY2xhcmVfcGFyc2VyX3N0YXRlX3ZhcmlhYmxlcyk6IE1vdmUgeXluLCB5eXJlc3VsdCwKKwl5eXRva2VuLCB5eXZhbCwgYW5kIHl5bG9jIGRlY2xhcmF0aW9ucyB0by4uLgorCSh5eXBhcnNlIG9yIHl5cHVzaF9wYXJzZSk6IC4uLiBoZXJlIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuICBGb3IKKwl5eXB1c2hfcGFyc2UgaW52b2NhdGlvbnMgYWZ0ZXIgdGhlIGZpcnN0LCBiZSBzdXJlIHRvIGFzc2lnbiB5eW4gaXRzIG9sZAorCXZhbHVlIGFnYWluLgorCSh5eXBzdGF0ZV9uZXcpOiBEb24ndCBib3RoZXIgaW5pdGlhbGl6aW5nIHRoZSB5eXJlc3VsdCBmaWVsZCBzaW5jZSB0aGUKKwlpbml0aWFsIHZhbHVlIGlzbid0IHVzZWQuCisJKHl5biwgeXlyZXN1bHQsIHl5dG9rZW4sIHl5dmFsLCB5eWxvYyk6IEZvciBlYWNoIE5BTUUgaW4gdGhpcyBsaXN0LAorCXJlbW92ZSB0aGUgI2RlZmluZSB0aGF0LCBpbiBwdXNoIG1vZGUsIHNldCBpdCB0byB5eXBzLT5OQU1FLgorCSogZXRjL01ha2VmaWxlLmFtOiBOZXcuCisJKiBldGMvYmVuY2gucGw6IFJlbW92ZSBhbmQgYnVpbGQgaXQgaW5zdGVhZCBmcm9tLi4uCisJKiBldGMvYmVuY2gucGwuaW46IC4uLiB0aGlzIG5ldyBmaWxlLiAgVXNlIEBhYnNfdG9wX2J1aWxkZGlyQCB0byBpbnZva2UKKwkidGVzdHMvYmlzb24iIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeSBieSBkZWZhdWx0IHJhdGhlciB0aGFuIGp1c3QKKwlpbnZva2luZyAiYmlzb24iIGZyb20gJFBBVEguCisJKGNhbGNfZ3JhbW1hcik6IFVwZGF0ZSBwdXNoIHBhcnNlciBjb2RlOiBkb24ndCBkZWNsYXJlIHl5bHZhbCBnbG9iYWxseSwKKwlkb24ndCBkZWZpbmUgeXlwYXJzZV93cmFwcGVyLCBhbmQgZG9uJ3QgI2RlZmluZSB5eXBhcnNlLgorCShiZW5jaF9ncmFtbWFyKTogVXBkYXRlIHRvIGNoZWNrIGFsbCB3b3JraW5nIGNvbWJpbmF0aW9ucyBvZiB5YWNjLmMsCisJcHVzaC5jLCBpbXB1cmUsIHB1cmUsIHB1bGwsIGFuZCBwdXNoLgorCisyMDA2LTEyLTI1ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUZvciBwdXNoIG1vZGUsIGFkZCBwdWxsIHdyYXBwZXJzIGFyb3VuZCB5eXB1c2hfcGFyc2UuCisJKiBkYXRhL3B1c2guYzogKGI0X2dlbmVyYXRlX21hY3JvX2FyZ3MsIGI0X3BhcmVudGhlc2l6ZSk6IE5ldyBtYWNyb3MuCisJKHl5cHVsbF9wYXJzZSk6IE5ldyBmdW5jdGlvbiB3cmFwcGluZyB5eXB1c2hfcGFyc2UuCisJKHl5cGFyc2UpOiBOZXcgI2RlZmluZSB3cmFwcGluZyB5eXB1bGxfcGFyc2UuCisJKiB0ZXN0cy9jYWxjLmF0IChfQVRfREFUQV9DQUxDX1kpOiBDYWxsIHl5cGFyc2UgZXZlbiB3aGVuICVwdXNoLXBhcnNlcgorCWlzIGRlY2xhcmVkLgorCSogdGVzdHMvaGVhZGVycy5hdCAoZXhwb3J0IFlZTFRZUEUpOiBNYWtlIHl5bGV4IGdsb2JhbC4gIEZvciBwdXNoIG1vZGUsCisJcHJvdG90eXBlIHl5bGV4IGluIHRoZSBtb2R1bGUgdGhhdCBjYWxscyB5eXBhcnNlLCBhbmQgZG9uJ3QgcHJvdG90eXBlCisJeXlwYXJzZSB0aGVyZS4gIE90aGVyd2lzZSwgdGhlIHl5cGFyc2UgZXhwYW5zaW9uIHdvbid0IGNvbXBpbGUuCisJKiB0ZXN0cy9pbnB1dC5hdCAoVG9ydHVyaW5nIHRoZSBTY2FubmVyKTogTGlrZXdpc2UuCisKKzIwMDYtMTItMjUgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJRW5hYmxlIHB1c2ggcGFyc2VycyB0byBvcGVyYXRlIGluIGltcHVyZSBtb2RlLiAgVGh1cywgJXB1c2gtcGFyc2VyIG5vCisJbG9uZ2VyIGltcGxpZXMgJXB1cmUtcGFyc2VyLiAgVGhlIHBvaW50IG9mIHRoaXMgY2hhbmdlIGlzIHRvIG1vdmUKKwl0b3dhcmRzIGJlaW5nIGFibGUgdG8gdGVzdCB0aGUgcHVzaCBwYXJzZXIgY29kZSBieSBydW5uaW5nIHRoZSBlbnRpcmUKKwl0ZXN0IHN1aXRlIGFzIGlmICVwdXNoLXBhcnNlciBoYWQgYmVlbiBkZWNsYXJlZC4KKwkqIGRhdGEvcHVzaC5jICh5eXB1c2hfcGFyc2UpOiBGb3IgaW1wdXJlIG1vZGUsIHJlbW92ZSB0aGUKKwl5eXB1c2hlZF9jaGFyLCB5eXB1c2hlZF92YWwsIGFuZCB5eXB1c2hlZF9sb2MgYXJndW1lbnRzLgorCUluc3RlYWQsIGRlY2xhcmUgdGhlc2UgYXMgbG9jYWwgdmFyaWFibGVzIGluaXRpYWxpemVkIHRvIHRoZSBnbG9iYWwKKwl5eWNoYXIsIHl5bHZhbCwgYW5kIHl5bGxvYy4KKwlGb3IgdGhlIGZpcnN0IHl5cHVzaF9wYXJzZSBpbnZvY2F0aW9uIG9ubHksIHJlc3RvcmUgdGhlIGluaXRpYWwgdmFsdWVzCisJb2YgdGhlc2UgZ2xvYmFsIHZhcmlhYmxlcyB3aGVuIGl0J3MgdGltZSB0byByZWFkIGEgdG9rZW4gc2luY2UgdGhleQorCWhhdmUgYmVlbiBvdmVyd3JpdHRlbi4KKwkqIHNyYy9wYXJzZS1ncmFtLnkgKHByb2xvZ3VlX2RlY2xhcmF0aW9uKTogRG9uJ3Qgc2V0IHB1cmVfcGFyc2VyIGZvcgorCSVwdXNoLXBhcnNlci4KKwkqIHRlc3RzL2NhbGMuYXQgKFNpbXBsZSBMQUxSKDEpIENhbGN1bGF0b3IpOiBBbHdheXMgZGVjbGFyZQorCSVwdXJlLXBhcnNlciBhbG9uZyB3aXRoICVwdXNoLXBhcnNlciBzaW5jZSB0aGlzIHRlc3QgY2FzZSB3YXMgZGVzaWduZWQKKwlmb3IgcHVyZSBwdXNoIHBhcnNlcnMuCisJKiB0ZXN0cy9sb2NhbC5hdCAoQVRfUFVSRV9PUl9QVVNIX0lGKTogUmVtb3ZlIHVudXNlZC4KKwkoQVRfWUFDQ19PUl9QVVNIX0lGKTogTmV3LgorCShBVF9ZWUVSUk9SX1NFRVNfTE9DX0lGKTogRml4IGVub3VnaCB0aGF0IHRoZSB0ZXN0IHN1aXRlIHBhc3NlcywgYnV0CisJYWRkIGEgbm90ZSB0aGF0IGl0J3Mgc3RpbGwgd3JvbmcgZm9yIHNvbWUgY2FzZXMgKGFzIGl0IGhhcyBiZWVuIGZvciBhCisJd2hpbGUpLgorCShBVF9QVVJFX0xFWF9JRik6IFVzZSBBVF9QVVJFX0lGIGluc3RlYWQgb2YgQVRfUFVSRV9PUl9QVVNIX0lGIHNpbmNlCisJJXB1c2gtcGFyc2VyIG5vIGxvbmdlciBpbXBsaWVzICVwdXJlLXBhcnNlci4KKworMjAwNi0xMi0yMCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlSZW1vdmUgc29tZSB1bm5lY2Vzc2FyeSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBwdWxsIHBhcnNlciBjb2RlIGFuZAorCXRoZSBwdXNoIHBhcnNlciBjb2RlLiAgVGhpcyBwYXRjaCBlbmFibGVzIHl5bmVycnMgaW4gcHVzaCBtb2RlLgorCSogZGF0YS9wdXNoLmM6IFJlZm9ybWF0IE00IGEgbGl0dGxlLgorCShiNF95eWVycm9yX3JhbmdlKTogUmVtb3ZlIGFuZCBjb252ZXJ0IGFsbCB1c2VzIHRvIGp1c3QgeXllcnJvcl9yYW5nZS4KKwkoYjRfZGVjbGFyZV9zY2FubmVyX2NvbW11bmljYXRpb25fdmFyaWFibGVzKTogRG9uJ3Qgb21pdCB5eW5lcnJzIGp1c3QKKwliZWNhdXNlIHB1c2ggbW9kZSBpcyBvbi4gIEluc3RlYWQsIGlmIHB1cmUgbW9kZSBpcyBvbiwgbW92ZSB5eW5lcnJzCisJdG8uLi4KKwkoYjRfZGVjbGFyZV9wYXJzZXJfc3RhdGVfdmFyaWFibGVzKTogLi4uIGhlcmUuCisJKHl5bmVycnMsIHl5ZXJyb3JfcmFuZ2UpOiBGb3IgcHVzaCBtb2RlLCAjZGVmaW5lIGVhY2ggTkFNRSBpbiB0aGlzIGxpc3QKKwl0byB5eXBzLT5OQU1FIHNvIGl0IGNhbiBiZSB1c2VkIGluIHl5cHVzaF9wYXJzZS4KKwkoeXlwdXNoX3BhcnNlKTogRG9uJ3Qgb21pdCB1c2VzIG9mIHl5bmVycnMgaW4gcHVzaCBtb2RlLgorCisyMDA2LTEyLTIwICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUZpeCBidWcgc3VjaCB0aGF0IHRoZSBmaXJzdCBwdXNoZWQgdG9rZW4ncyB2YWx1ZSBhbmQgbG9jYXRpb24gYXJlCisJc29tZXRpbWVzIG92ZXJ3cml0dGVuIChzb21ldGltZXMgYnkgJWluaXRpYWwtYWN0aW9uKSBiZWZvcmUgYmVpbmcgdXNlZC4KKwkqIGRhdGEvcHVzaC5jICh5eXB1c2hfcGFyc2UpOiBSZW5hbWUgYXJndW1lbnRzIHl5bmNoYXIsIHl5bmx2YWwsIGFuZAorCXl5bmxsb2MgdG8geXlwdXNoZWRfY2hhciwgeXlwdXNoZWRfdmFsLCBhbmQgeXlwdXNoZWRfbG9jIGZvciBjbGFyaXR5LgorCUZvciB0aGUgZmlyc3QgeXlwdXNoX3BhcnNlIGludm9jYXRpb24sIGluaXRpYWxpemUgeXljaGFyIHRvIFlZRU1QVFkgdG8KKwltb3JlIGNsb3NlbHkgbWltaWMgdGhlIHB1bGwgcGFyc2VyIGxvZ2ljLgorCURvbid0IGNvcHkgdGhlIHB1c2hlZCB0b2tlbiB0byB5eWNoYXIsIHl5bHZhbCwgYW5kIHl5bGxvYyB1bnRpbCBpdCdzCisJdGltZSB0byByZWFkIGEgdG9rZW4sIHdoaWNoIGlzIGFmdGVyIGFueSBpbml0aWFsaXphdGlvbiBvZiB5eWx2YWwgYW5kCisJeXlsbG9jLgorCShnb3R0b2tlbik6IFJlbmFtZSBsYWJlbCB0by4uLgorCSh5eXJlYWRfcHVzaGVkX3Rva2VuKTogLi4uIGZvciBjbGFyaXR5IGFuZCB0byBhdm9pZCBpbmZyaW5naW5nIG9uIHRoZQorCXVzZXIgbmFtZXNwYWNlLgorCisyMDA2LTEyLTIwICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCVJlYXJyYW5nZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFyc2VyIHN0YXRlIHZhcmlhYmxlcyBzbyB0aGF0IHRoZQorCXNrZWxldG9uIGRvZXNuJ3QgaGF2ZSB0byBoYXZlIGEgY29weSBmb3IgcHVsbCBtb2RlIGFuZCBhbm90aGVyIGZvciBwdXNoCisJbW9kZS4gIFRoaXMgcGF0Y2ggYWxzbyBmaXhlcyBhdCBsZWFzdCBhIGJ1ZyBzdWNoIHRoYXQgeXlsbG9jIHdhcyBub3QKKwlpbml0aWFsaXplZCAod2l0aCBiNF9sb2NhdGlvbl9pbml0aWFsX2xpbmUgYW5kCisJYjRfbG9jYXRpb25faW5pdGlhbF9jb2x1bW4pIHVwb24gY2FsbGluZyB5eXB1c2hfcGFyc2UuICBIb3dldmVyLCB0aGF0CisJaW5pdGlhbGl6YXRpb24gbm93IG92ZXJ3cml0ZXMgdGhlIGZpcnN0IHRva2VuJ3MgbG9jYXRpb247CisJJWluaXRpYWwtYWN0aW9uIGFzc2lnbmluZyBAJCBhbHJlYWR5IGRpZCB0aGUgc2FtZSB0aGluZywgYW5kIGJvdGggYnVncworCXdpbGwgYmUgZml4ZWQgaW4gYSBsYXRlciBwYXRjaC4KKwkqIGRhdGEvcHVzaC5jIChiNF95eXNzYSk6IFJlbW92ZSBhbmQgY29udmVydCBhbGwgdXNlcyB0byBqdXN0IHl5c3NhLgorCShiNF9kZWNsYXJlX3BhcnNlcl9zdGF0ZV92YXJpYWJsZXMpOiBSZW1vdmUgaW5pdGlhbGl6YXRpb24gb2YgeXl0b2tlbiwKKwl5eXNzLCB5eXZzLCB5eWxzLCBhbmQgeXlzdGFja3NpemUuCisJKHl5cHN0YXRlX25ldyk6IFJlbW92ZSBpbml0aWFsaXphdGlvbiBvZiBzb21lIHl5cHN0YXRlIGZpZWxkczogeXlzdGF0ZSwKKwl5eWVycnN0YXR1cywgeXl0b2tlbiwgeXlzcywgeXl2cywgeXlscywgeXlzdGFja3NpemUsIHl5c3NwLCB5eXZzcCwgYW5kCisJeXlsc3AuCisJKHl5c3NhLCB5eXZzYSwgeXlsc2EpOiBGb3IgcHVzaCBtb2RlLCAjZGVmaW5lIGVhY2ggTkFNRSBpbiB0aGlzIGxpc3QgdG8KKwl5eXBzLT5OQU1FIHNvIGl0IGNhbiBiZSB1c2VkIGluIHl5cHVzaF9wYXJzZS4KKwkoeXlwYXJzZSBvciB5eXB1c2hfcGFyc2UpOiBGb3IgeXlwdXNoX3BhcnNlLCBkb24ndCBwcmludCB0aGUKKwkiU3RhcnRpbmcgcGFyc2UiIGRpYWdub3N0aWMgZm9yIGludm9jYXRpb25zIGFmdGVyIHRoZSBmaXJzdC4KKwlBZGQgaW5pdGlhbGl6YXRpb24gb2YgeXl0b2tlbiwgeXlzcywgeXl2cywgeXlscywgYW5kIHl5c3RhY2tzaXplOyBmb3IKKwl5eXB1c2hfcGFyc2UsIG9ubHkgZG8gaXQgZm9yIHRoZSBmaXJzdCBpbnZvY2F0aW9uLgorCUFsbG93IHl5c3RhdGUsIHl5ZXJyc3RhdHVzLCB5eXNzcCwgeXl2c3AsIHl5bHNwLCBhbmQgeXlsbG9jCisJaW5pdGlhbGl6YXRpb24gdG8gb2NjdXIgaW4geXlwdXNoX3BhcnNlIGJ1dCBvbmx5IG9uIHRoZSBmaXJzdAorCWludm9jYXRpb24uCisKKzIwMDYtMTItMTkgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBkYXRhL3B1c2guYzogQWRkIENQUCBndWFyZHMgYXJvdW5kIHB1c2ggcGFyc2VyIGRlY2xhcmF0aW9ucyBpbiBib3RoCisJdGhlIGhlYWRlciBhbmQgdGhlIGNvZGUgZmlsZS4KKwlJbiB0aGUgY29kZSBmaWxlLCBtb3ZlIHRoZSBwdXNoIHBhcnNlciBkZWNsYXJhdGlvbnMgdG8gdGhlIHNhbWUgcGxhY2UKKwl0aGV5IGFwcGVhciBpbiB0aGUgaGVhZGVyIGZpbGUuCisJQ2xlYW4gdXAgdGhlIE00IHNvbWUsIGVzcGVjaWFsbHkgdGhlIGluY29uc2lzdGVudCB1bmRlcnF1b3RpbmcgaW4KKwlzb21lIGI0X2NfZnVuY3Rpb25fZGVmIGFuZCBiNF9jX2Z1bmN0aW9uX2RlY2wgdXNlcy4KKworMjAwNi0xMi0xOSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlFbmNhcHN1bGF0ZSB0aGUgcHVzaCBwYXJzZXIgc3RhdGUgdmFyaWFibGVzIGludG8gYW4gTTQgbWFjcm8gc28gdGhlCisJcHVzaCBza2VsZXRvbiBkb2Vzbid0IGhhdmUgdG8gbGlzdCB0aGVtIGFnYWluIGZvciBwdWxsIG1vZGUncyB5eXBhcnNlLgorCUZvciBwdXNoIG1vZGUsIHJlbW92ZSB5eXB1c2hfcGFyc2UncyBsb2NhbCBlcXVpdmFsZW50cyBvZiB0aGVzZQorCXZhcmlhYmxlcyB0byBlbGltaW5hdGUgdW5uZWNlc3NhcnkgY29weWluZyBiZXR3ZWVuIHRoZSB0d28gc2V0cyBhdAorCXJ1bi10aW1lLiAgVGhpcyBwYXRjaCBhbHNvIGZpeGVzIGF0IGxlYXN0IGEgYnVnIHJlbGF0ZWQgdG8gbXVsdGlwbGUKKwklaW5pdGlhbC1hY3Rpb24gaW52b2NhdGlvbnMgaW4gcHVzaCBtb2RlLgorCSogZGF0YS9wdXNoLmMgKGI0X2RlY2xhcmVfcGFyc2VyX3ZhcmlhYmxlcyk6IFJlbmFtZSB0by4uLgorCShiNF9kZWNsYXJlX3NjYW5uZXJfY29tbXVuaWNhdGlvbl92YXJpYWJsZXMpOiAuLi4gdGhpcyBmb3IgY2xhcml0eSBhbmQKKwl1cGRhdGUgYm90aCB1c2VzLgorCShiNF9kZWNsYXJlX3l5cGFyc2VfdmFyaWFibGVzKTogUmVtb3ZlIGFuZCBtb3ZlIGl0cyBjb250ZW50cyB0byB0aGUgb25lCisJc3BvdCB3aGVyZSBpdCB3YXMgaW52b2tlZC4KKwkoYjRfZGVjbGFyZV9wYXJzZXJfc3RhdGVfdmFyaWFibGVzKTogTmV3IG1hY3JvIGNvbnRhaW5pbmcgdGhlIHBhcnNlcgorCXN0YXRlIHZhcmlhYmxlcyByZXF1aXJlZCBieSBwdXNoIG1vZGUuCisJKHN0cnVjdCB5eXBzdGF0ZSk6IFJlcGxhY2UgYWxsIGZpZWxkcyBidXQgeXluZXcgd2l0aAorCWI0X2RlY2xhcmVfcGFyc2VyX3N0YXRlX3ZhcmlhYmxlcy4KKwkoeXlzdGF0ZSwgeXluLCB5eXJlc3VsdCwgeXllcnJzdGF0dXMsIHl5dG9rZW4sIHl5c3MsIHl5c3NwLCB5eXZzLAorCXl5dnNwLCB5eWxzLCB5eWxzcCwgeXlzdGFja3NpemUsIHl5dmFsLCB5eWxvYyk6IEZvciBwdXNoIG1vZGUsICNkZWZpbmUKKwllYWNoIE5BTUUgaW4gdGhpcyBsaXN0IHRvIHl5cHMtPk5BTUUgc28gaXQgY2FuIGJlIHVzZWQgaW4geXlwdXNoX3BhcnNlLgorCSh5eXBhcnNlIG9yIHl5cHVzaF9wYXJzZSk6IEZvciB5eXBhcnNlIGluIHB1bGwgbW9kZSwgcmVwbGFjZSBsb2NhbAorCXBhcnNlciBzdGF0ZSB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgd2l0aAorCWI0X2RlY2xhcmVfcGFyc2VyX3N0YXRlX3ZhcmlhYmxlcy4KKwlEb24ndCBpbml0aWFsaXplIHBhcnNlciBzdGF0ZSB2YXJpYWJsZXMgd2hlbiBjYWxsaW5nIHl5cHVzaF9wYXJzZSBzaW5jZQorCXl5cHN0YXRlX25ldyBhbHJlYWR5IGRvZXMgdGhhdC4KKwlJbnZva2UgdGhlIHVzZXIncyBpbml0aWFsIGFjdGlvbiBvbmx5IHVwb24gdGhlIGZpcnN0IHl5cHVzaF9wYXJzZQorCWludm9jYXRpb24uCisJUmVtb3ZlIGFsbCBjb2RlIHRoYXQgY29waWVzIGJldHdlZW4gdGhlIGxvY2FsIHBhcnNlciBzdGF0ZSB2YXJpYWJsZXMKKwlhbmQgdGhlIHl5cHN0YXRlLgorCisyMDA2LTEyLTE5ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogZGF0YS9wdXNoLmMgKHVuaW9uIHl5YWxsb2MpOiBSZW5hbWUgeXlzcywgeXl2cywgYW5kIHl5bHMgZmllbGRzIHRvCisJcHJldmVudCBhIG5hbWUgY29sbGlzaW9uIGluIGEgZnV0dXJlIHBhdGNoIHdoZXJlIHRoZXNlIG5hbWVzIHdpbGwKKwlzb21ldGltZXMgYmUgI2RlZmluZSdkLgorCShZWVNUQUNLX1JFTE9DQVRFKTogQWRkIGFuIGFyZ3VtZW50IHRvIHNlbGVjdCBhIHVuaW9uIHl5YWxsb2MgZmllbGQKKwlzaW5jZSBpdCBubyBsb25nZXIgaGFzIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGV4aXN0aW5nIGFyZ3VtZW50LgorCSh5eXBhcnNlIG9yIHl5cHVzaF9wYXJzZSk6IFVwZGF0ZSBhbGwgdXNlcyBvZiBZWVNUQUNLX1JFTE9DQVRFLgorCisyMDA2LTEyLTE5ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorCWFuZCBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogZG9jL2Jpc29uLnRleGluZm8gKERlY2wgU3VtbWFyeSk6IEluIHRoZSAlbGFuZ3VhZ2UgZW50cnksIG1lbnRpb24KKwl0aGF0IHRoZSBhcmd1bWVudCBpcyBjYXNlLWluc2Vuc2l0aXZlLCBhbmQgdGhlcmUncyBubyBgPScgaGVyZS4KKwlGb3IgdGhlICVza2VsZXRvbiBlbnRyeSwgbWVudGlvbiB0aGF0ICVsYW5ndWFnZSBpcyBiZXR0ZXIuCisJKEJpc29uIE9wdGlvbnMpOiBMaWtld2lzZSBmb3IgLS1sYW5ndWFnZSBhbmQgLS1za2VsZXRvbi4gIE1vdmUgdGhlCisJLS1za2VsZXRvbiBlbnRyeSBzbyB0aGF0IHRoZSBgVHVuaW5nIHRoZSBwYXJzZXInIHNlY3Rpb24gaXMgc29ydGVkCisJYWxwaGFiZXRpY2FsbHkgb24gbG9uZyBvcHRpb25zLgorCShDKysgQmlzb24gSW50ZXJmYWNlKTogRG9uJ3QgdXNlIHRoZSB3b3JkIHNrZWxldG9uLiAgRG9uJ3QgZXhwbGFpbiB0aGUKKwklbGFuZ3VhZ2UgZGlyZWN0aXZlIGluIGRldGFpbCBoZXJlOyBjcm9zcy1yZWZlcmVuY2UgdGhlICVsYW5ndWFnZQorCWRvY3VtZW50YXRpb24gaW5zdGVhZC4KKwkoQ2FsYysrIFBhcnNlcik6IFVzZSBgJXJlcXVpcmUgIkB2YWx1ZXtWRVJTSU9OfSInIHJhdGhlciB0aGFuCisJYCVyZXF1aXJlICIyLjNiIicgc28gdGhhdCB0aGUgZXhhbXBsZSBpcyBhbHdheXMgdXAtdG8tZGF0ZS4KKwkoVGFibGUgb2YgU3ltYm9scyk6IEFkZCBlbnRyaWVzIGZvciAlbGFuZ3VhZ2UgYW5kICVza2VsZXRvbi4KKwkqIGV4YW1wbGVzL2V4dGV4aSAobm9ybWFsaXplKTogSW5zdGVhZCBvZiByZXBsYWNpbmcgZXZlcnkgJXJlcXVpcmUKKwlhcmd1bWVudCB3aXRoIHRoZSBjdXJyZW50IEJpc29uIHZlcnNpb24sIGp1c3Qgc3Vic3RpdHV0ZSBmb3IKKwlgQHZhbHVle1ZFUlNJT059Jy4gIFRoaXMgZ3VhcmFudGVlcyB0aGF0IHdlJ3JlIHRlc3Rpbmcgd2hhdCBhY3R1YWxseQorCWFwcGVhcnMgaW4gdGhlIGRvY3VtZW50YXRpb24uCisJKiBleGFtcGxlcy9jYWxjKysvTWFrZWZpbGUuYW0gKCQoY2FsY19leHRyYWN0ZWQpKTogVXNlIGAkKFZFUlNJT04pJworCXJhdGhlciB0aGFuIGBAVkVSU0lPTkAnLgorCisyMDA2LTEyLTE4ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogTkVXUzogUmV3b3JkIHRoZSAlbGFuZ3VhZ2UgbmV3cyBhIGJpdCwgYW5kIHB1dCBpdCBlYXJsaWVyLgorCisJKiBzcmMvZ2V0YXJncy5jIChza2VsZXRvbl9hcmcpOiBMYXN0IGFyZyBpcyBub3cgbG9jYXRpb24gY29uc3QgKi4KKwlSZXdyaXRlIHRvIHNpbXBsaWZ5IHRoZSBsb2dpYy4KKwkobGFuZ3VhZ2VfYXJnbWF0Y2gpOiBMaWtld2lzZS4KKwkocHJvZ3JhbV9uYW1lKTogV2Ugbm93IG93biB0aGlzIHZhci4KKwkqIHNyYy9nZXRhcmdzLmggKHN0cnVjdCBiaXNvbl9sYW5ndWFnZSk6IFVzZSBjaGFyW10gcmF0aGVyIHRoYW4KKwljb25zdCBjaGFyICouCisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChEZWNsIFN1bW1hcnksIEJpc29uIE9wdGlvbnMpOiBEb24ndCBjbGFpbQorCUphdmEgaXMgc3VwcG9ydGVkLgorCSogc3JjL2NvbXBsYWluLmMgKHByb2dyYW1fbmFtZSk6IFJlbW92ZSBkZWNsOyBubyBsb25nZXIgbmVlZGVkLgorCSogc3JjL21haW4uYyAocHJvZ3JhbV9uYW1lKTogUmVtb3ZlOyBub3cgYmVsb25ncyB0byBnZXRhcmdzLgorCisyMDA2LTEyLTE4ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorCisJKiBORVdTOiBEb2N1bWVudCAlbGFuZ3VhZ2UuCisKKwkqIGRhdGEvTWFrZWZpbGUuYW0gKGRpc3RfcGtnZGF0YV9EQVRBKTogQWRkIGMtc2tlbC5tNCwgYysrLXNrZWwubTQuCisKKwkqIGRhdGEvYy1za2VsLm00LCBkYXRhL2MrKy1za2VsLm00OiBOZXcgZmlsZXMuCisJKiBkYXRhL2dsci5jOiBDb21wbGFpbiBvbiBwdXNoIHBhcnNlcnMuCisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChDKysgUGFyc2VyIEludGVyZmFjZSk6IFByZWZlciAlbGFuZ3VhZ2UKKwlvdmVyICVza2VsZXRvbi4KKwkoRGVjbCBTdW1tYXJ5KTogRG9jdW1lbnQgJWxhbmd1YWdlIGFuZCAlc2tlbGV0b24uCisJKENvbW1hbmQgbGluZSk6IERvY3VtZW50IC1MLgorCisJKiBleGFtcGxlcy9leHRleGk6IFJld3JpdGUgJXJlcXVpcmUgZGlyZWN0aXZlLgorCSogZXhhbXBsZXMvY2FsYysrL01ha2VmaWxlLmFtOiBQYXNzIFZFUlNJT04gdG8gZXh0ZXhpLgorCisJKiBzcmMvZmlsZXMuYyAoY29tcHV0ZV9leHRzX2Zyb21fZ2MpOiBMb29rIGluIGxhbmd1YWdlIHN0cnVjdHVyZQorCWZvciAueSBleHRlbnNpb24uCisJKGNvbXB1dGVfZmlsZV9uYW1lX3BhcnRzKTogQ2hlY2sgd2hldGhlciAudGFiIHNob3VsZCBiZSBhZGRlZC4KKwkqIHNyYy9nZXRhcmdzLmMgKHZhbGlkX2xhbmd1YWdlcywgc2tlbGV0b25fcHJpbywgbGFuZ3VhZ2VfcHJpbyk6CisJKGxhbmd1YWdlLCBza2VsZXRvbl9hcmcsIGxhbmd1YWdlX2FyZ21hdGNoKTogTmV3LgorCShsb25nX29wdGlvbnMpOiBBZGQgLS1sYW5ndWFnZS4KKwkoZ2V0YXJncyk6IFVzZSBza2VsZXRvbl9hcmcsIGFkZCAtTC8tLWxhbmd1YWdlLgorCSogc3JjL2dldGFyZ3MuaDogSW5jbHVkZSBsb2NhdGlvbi5oLgorCShzdHJ1Y3QgYmlzb25fbGFuZ3VhZ2UsIGxhbmd1YWdlLCBza2VsZXRvbl9hcmcsIGxhbmd1YWdlX2FyZ21hdGNoKTogTmV3LgorCSogc3JjL291dHB1dC5jIChwcmVwYXJlKTogUGljayBkZWZhdWx0IHNrZWxldG9uIGZyb20gc3RydWN0IGxhbmd1YWdlLgorCURvbid0IGRpc3BhdGNoIEMgc2tlbGV0b25zIGhlcmUuCisJKiBzcmMvcGFyc2UtZ3JhbS55IChQRVJDRU5UX0xBTkdVQUdFKTogTmV3LgorCShwcm9sb2d1ZV9kZWNsYXJhdGlvbik6IEFkZCAiJWxhbmd1YWdlIiBydWxlLCB1c2Ugc2tlbGV0b25fYXJnLgorCSogc3JjL3NjYW4tZ3JhbS5sICgiJWxhbmd1YWdlIik6IE5ldyBydWxlLgorCisJKiB0ZXN0cy9jYWxjLmF0OiBUZXN0ICVza2VsZXRvbiBhbmQgJWxhbmd1YWdlLgorCSogdGVzdHMvbG9jYWwuYXQgKEFUX1NLRUxfQ0NfSUYpOiBMb29rIGZvciAlbGFuZ3VhZ2UuCisJKEFUX0dMUl9JRik6IExvb2sgZm9yICVza2VsZXRvbiAiZ2xyLmNjIi4KKwkoQVRfTEFMUjFfQ0NfSUYsIEFUX0dMUl9DQ19JRik6IFJld3JpdGUuCisJKEFUX1lBQ0NfSUYpOiBSZWplY3QgJWxhbmd1YWdlLgorCisyMDA2LTEyLTE4ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogc3JjL3N5bXRhYi5oIChzdHJ1Y3Qgc2VtYW50aWNfdHlwZSk6IFJlbW92ZSB0aGUgdGFnICdzZW1hbnRpY190eXBlJywKKwlzaW5jZSBpdCB3YXNuJ3QgdXNlZDsgb25seSB0aGUgdHlwZWRlZiBuYW1lICdzZW1hbnRpY190eXBlJyBpcyBuZWVkZWQuCisJQWxzbywgb21pdCB0cmFpbGluZyB3aGl0ZSBzcGFjZS4KKworCSogYm9vdHN0cmFwOiBTeW5jIGZyb20gY29yZXV0aWxzLgorCShnbnVsaWJfZXh0cmFfZmlsZXMpOiBBZGQgYnVpbGQtYXV4L2Fubm91bmNlLmdlbi4KKwkoc2x1cnApOiBBZGp1c3QgLmdpdGlnbm9yZSBmaWxlcyBsaWtlIC5jdnNpZ25vcmUgZmlsZXMuCisJKiBidWlsZC1hdXgvYW5ub3VuY2UtZ2VuOiBSZW1vdmUgZnJvbSBDVlMsIHNpbmNlIGJvb3RzdHJhcAorCW5vdyBjcmVhdGVzIHRoaXMuCisKKzIwMDYtMTItMTYgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJTWFrZSAlcHVzaC1wYXJzZXIgaW1wbHkgJXB1cmUtcGFyc2VyLiAgVGhpcyBmaXhlcyBzZXZlcmFsIGJ1Z3M7IHNlZQorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA2LTEyL21zZzAwMTQ4Lmh0bWw+LgorCSogc3JjL3BhcnNlLWdyYW0ueSAocHJvbG9ndWVfZGVjbGFyYXRpb24pOiBGb3IgJXB1c2gtcGFyc2VyLCBhbHNvIHNldAorCXB1cmVfcGFyc2VyID0gdHJ1ZS4KKwkqIGRhdGEvcHVzaC5jOiBEb24ndCBib3RoZXIgdGVzdGluZyBiNF9wdXNoX2lmIHdoZW4gZGVjaWRpbmcgd2hldGhlcgorCXRvIGV4cGFuZCBiNF9kZWNsYXJlX3BhcnNlcl92YXJpYWJsZXMgZ2xvYmFsbHkuCisJKHl5cHVzaF9wYXJzZSk6IExpa2V3aXNlIGluIGhlcmUuCisKKwkqIGRhdGEvcHVzaC5jICh5eXB1c2hfcGFyc2UpOiBBZGQgYjRfcGFyc2VfcGFyYW0gdG8gYXJndW1lbnRzLgorCSh5eV9yZWR1Y2VfcHJpbnQpOiBSZWZvcm1hdCBNNCBmb3IgcmVhZGFiaWxpdHkuCisKKzIwMDYtMTItMTUgIEJvYiBSb3NzaSAgPGJvYkBicmFza28ubmV0PgorCWFuZCBKb2VsIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogZGF0YS9wdXNoLmMgKHl5cHN0YXRlKTogQWRkIHR5cGVkZWYsIGFuZCB1cGRhdGUgYWxsIHVzZXMgb2YKKwlzdHJ1Y3QgeXlwc3RhdGUgdG8ganVzdCB5eXBzdGF0ZS4KKwkqIHRlc3RzL2NhbGMuYXQgKF9BVF9EQVRBX0NBTENfWSk6IFVwZGF0ZSBoZXJlIGFzIHdlbGwuCisKKzIwMDYtMTItMTQgIEJvYiBSb3NzaSAgPGJvYkBicmFza28ubmV0PgorCisJKiBkYXRhL3B1c2guYyAoeXlwdXNoX3BhcnNlKTogRGVjbGFyZSBwcm90b3R5cGUgcmVnYXJkbGVzcyBvZgorCSVsb2NhdGlvbnMgb3B0aW9uLgorCisyMDA2LTEyLTE0ICBCb2IgUm9zc2kgIDxib2JAYnJhc2tvLm5ldD4KKworCSogZGF0YS9wdXNoLmMgKHl5cGFyc2UpOiBSZW1vdmUgdGhlIHByb3RvdHlwZSBhbmQgdGhlICNkZWZpbmUgd2hlbiBpbgorCXB1c2gtcGFyc2VyIG1vZGUuCisKKzIwMDYtMTItMTMgIEJvYiBSb3NzaSAgPGJvYkBicmFza28ubmV0PgorCisJKiBkYXRhL3B1c2guYyAoeXlwc3RhdGVfaW5pdCk6IFJlbmFtZSB0by4uLgorCSh5eXBzdGF0ZV9uZXcpOiAuLi4gdGhpcyBhbmQgdXNlIGI0X2NfZnVuY3Rpb25fZGVmLgorCSh5eXBzdGF0ZV9kZWxldGUpOiBOZXcuCisJKHl5cHVzaF9wYXJzZSk6IENoYW5nZSBwYXJhbWV0ZXJzIHl5bnZhbCBhbmQgeXlubGxvYyB0byBiZSBjb25zdC4KKwkqIHRlc3RzL2NhbGMuYXQgKF9BVF9EQVRBX0NBTENfWSk6IFVzZSBuZXcgeXlwc3RhdGVfbmV3IGFuZAorCXl5cHN0YXRlX2RlbGV0ZSBmdW5jdGlvbnMuCisKKzIwMDYtMTItMTMgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBjb25maWd1cmUuYWMgKEFDX1BSRVJFUSk6IFJlcXVpcmUgQXV0b2NvbmYgMi42MSBiZWNhdXNlIG9mIG91cgorCXN0cmFuZ2UgdGVzdCBjYXNlIHRpdGxlcy4gIFJlcG9ydGVkIGJ5IEJvYiBSb3NzaS4KKworMjAwNi0xMi0xMyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIFRPRE86IEFkZCBwb2ludGVyIHRvIFN5bHZhaW4gU2NobWl0eidzIHdvcmsgb24gc3RhdGljIGRldGVjdGlvbgorCW9mIHBvdGVudGlhbCBhbWJpZ3VpdGllcyBpbiBHTFIgZ3JhbW1lcnMuCisKKzIwMDYtMTItMTIgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiB0ZXN0cy90ZXN0c3VpdGUuYXQgKEFUX0NIRUNLKTogV2hlbiBjaGVja2luZyBpZiAkMSBzdGFydHMgd2l0aAorCWBiaXNvbiAnLCB1c2UgbTRfaW5kZXggaW5zdGVhZCBvZiBtNF9zdWJzdHIgc2luY2UgY2hvcHBpbmcgdXAgYSBzdHJpbmcKKwljb250YWluaW5nIE00LXNwZWNpYWwgY2hhcmFjdGVycyBjYXVzZXMgcHJvYmxlbXMgaGVyZS4KKworCUZpeCBhIGNvdXBsZSBvZiBidWdzIHJlbGF0ZWQgdG8gc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHVzZXItc3BlY2lmaWVkCisJZmlsZSBuYW1lcywgYW5kIG1ha2UgaXQgZWFzaWVyIGZvciBza2VsZXRvbnMgdG8gY29tcHV0ZSBvdXRwdXQgZmlsZQorCW5hbWVzIHdpdGggdGhlIHNhbWUgZmlsZSBuYW1lIHByZWZpeCBhcyBCaXNvbi1jb21wdXRlZCBvdXRwdXQgZmlsZQorCW5hbWVzLgorCSogZGF0YS9nbHIuY2MsIGRhdGEvcHVzaC5jLCBkYXRhL3lhY2MuYzogSW4gQG91dHB1dCwgdXNlCisJYjRfcGFyc2VyX2ZpbGVfbmFtZSBhbmQgYjRfc3BlY19kZWZpbmVzX2ZpbGUgaW5zdGVhZCBvZgorCUBvdXRwdXRfcGFyc2VyX25hbWVAIGFuZCBAb3V0cHV0X2hlYWRlcl9uYW1lQCwgd2hpY2ggYXJlIG5vdyByZWR1bmRhbnQuCisJKiBkYXRhL2dsci5jLCBkYXRhL2xhbHIxLmNjOiBMaWtld2lzZS4gIEFsc28sIGluIGhlYWRlciAjaW5jbHVkZSdzLCB1c2UKKwliNF9wYXJzZXJfZmlsZV9uYW1lLCBiNF9zcGVjX2RlZmluZXNfZmlsZSwgYW5kIHRoZSBuZXcKKwlAYmFzZW5hbWUoRklMRU5BTUVAKSBpbnN0ZWFkIG9mIEBvdXRwdXRfcGFyc2VyX25hbWVAIGFuZAorCUBvdXRwdXRfaGVhZGVyX25hbWVALCB3aGljaCBpbmFwcHJvcHJpYXRlbHkgZXNjYXBlZCB0aGUgZmlsZSBuYW1lcyBhcworCUMgc3RyaW5nIGxpdGVyYWxzLgorCSogc3JjL2ZpbGVzLmMgKGFsbF9idXRfZXh0KTogUmVtb3ZlIHN0YXRpYyBxdWFsaWZpZXIuCisJKGNvbXB1dGVfb3V0cHV0X2ZpbGVfbmFtZXMpOiBNb3ZlIGBmcmVlIChhbGxfYnV0X2V4dCknIHRvLi4uCisJKG91dHB1dF9maWxlX25hbWVzX2ZyZWUpOiAuLi4gaGVyZSBzaW5jZSBhbGxfYnV0X2V4dCBpcyBuZWVkZWQgbGF0ZXIuCisJKiBzcmMvZmlsZXMuaCAoYWxsX2J1dF9leHQpOiBFeHRlcm4uCisJKiBzcmMvbXVzY2xlX3RhYi5oIChNVVNDTEVfSU5TRVJUX1NUUklOR19SQVcpOiBOZXcgbWFjcm8gdGhhdCBkb2VzCisJZXhhY3RseSB3aGF0IE1VU0NMRV9JTlNFUlRfU1RSSU5HIHVzZWQgdG8gZG8uCisJKE1VU0NMRV9JTlNFUlRfU1RSSU5HKTogVXNlIE1VU0NMRV9PQlNUQUNLX1NHUk9XIHNvIHRoYXQgTTQtc3BlY2lhbAorCWNoYXJhY3RlcnMgYXJlIGVzY2FwZWQgcHJvcGVybHkuCisJKiBzcmMvb3V0cHV0LmMgKHByZXBhcmUpOiBEZWZpbmUgbXVzY2xlIGZpbGVfbmFtZV9hbGxfYnV0X2V4dCBhcworCWFsbF9idXRfZXh0LgorCUZvciBwa2dkYXRhZGlyIG11c2NsZSwgbWFpbnRhaW4gcHJldmlvdXMgZnVuY3Rpb25hbGl0eSBieSB1c2luZworCU1VU0NMRV9JTlNFUlRfU1RSSU5HX1JBVyBpbnN0ZWFkIG9mIE1VU0NMRV9JTlNFUlRfU1RSSU5HLiAgVGhlIHByb2JsZW0KKwlpcyB0aGF0IGI0X3BrZ2RhdGFkaXIgaXMgdXNlZCBpbnNpZGUgbTRfaW5jbHVkZSBpbiB0aGUgc2tlbGV0b25zLCBzbworCWRpZ3JhcGhzIHdvdWxkIG5ldmVyIGJlIGV4cGFuZGVkLiAgSG9wZWZ1bGx5IG5vIG9uZSBoYXMgTTQtc3BlY2lhbAorCWNoYXJhY3RlcnMgaW4gaGlzIEJpc29uIGluc3RhbGxhdGlvbiBwYXRoLgorCSogc3JjL3NjYW4tc2tlbC5sOiBEb24ndCBwYXJzZSBAb3V0cHV0X2hlYWRlcl9uYW1lQCBhbmQKKwlAb3V0cHV0X3BhcnNlcl9uYW1lQCBhbnltb3JlIHNpbmNlIHRoZXkncmUgbm93IHJlZHVuZGFudC4KKwlJbiBAb3V0cHV0LCB1c2UgZGVjb2RlX2F0X2RpZ3JhcGhzLgorCVBhcnNlIGEgbmV3IEBiYXNlbmFtZSBjb21tYW5kIHRoYXQgaW52b2tlcyBsYXN0X2NvbXBvbmVudC4KKwkoZGVjb2RlX2F0X2RpZ3JhcGhzKTogTmV3LgorCShCQVNFX1FQVVRTKTogUmVtb3ZlIHVudXNlZC4KKwkqIHRlc3RzL291dHB1dC5hdCAoQVRfQ0hFQ0tfT1VUUFVUX0ZJTEVfTkFNRSk6IE5ldyBtYWNyby4KKwkoT3V0cHV0IGZpbGUgbmFtZSk6IE5ldyB0ZXN0cy4KKworMjAwNi0xMi0wOSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlXYXJuIGFib3V0IG91dHB1dCBmaWxlcyB0aGF0IGFyZSBnZW5lcmF0ZWQgYnkgdGhlIHNrZWxldG9ucyBhbmQgdGhhdAorCWNvbmZsaWN0IHdpdGggb3RoZXIgb3V0cHV0IGZpbGVzLgorCSogZGF0YS9nbHIuYzogRG9uJ3QgZ2VuZXJhdGUgdGhlIGhlYWRlciBmaWxlIGhlcmUgd2hlbiBnbHIuY2MgZG9lcy4KKwkqIHNyYy9maWxlcy5jIChmaWxlX25hbWVzLCBmaWxlX25hbWVzX2NvdW50KTogTmV3IHN0YXRpYyBnbG9iYWxzLgorCShjb21wdXRlX291dHB1dF9maWxlX25hbWVzKTogSW52b2tlIG91dHB1dF9maWxlX25hbWVfY2hlY2sgZm9yIGZpbGVzCisJbm90IGdlbmVyYXRlZCBieSB0aGUgc2tlbGV0b25zIGFuZCByZW1vdmUgZXhpc3RpbmcgY2hlY2tzLgorCShvdXRwdXRfZmlsZV9uYW1lX2NoZWNrKTogTmV3IGZ1bmN0aW9uIHRoYXQgd2FybnMgYWJvdXQgY29uZmxpY3RpbmcKKwlvdXRwdXQgZmlsZSBuYW1lcy4KKwkob3V0cHV0X2ZpbGVfbmFtZXNfZnJlZSk6IEZyZWUgZmlsZV9uYW1lcy4KKwkqIHNyYy9maWxlcy5oIChvdXRwdXRfZmlsZV9uYW1lX2NoZWNrKTogRGVjbGFyZS4KKwkqIHNyYy9zY2FuLXNrZWwubDogSW52b2tlIG91dHB1dF9maWxlX25hbWVfY2hlY2sgZm9yIGZpbGVzIGdlbmVyYXRlZCBieQorCXRoZSBza2VsZXRvbnMuCisJKiB0ZXN0cy9vdXRwdXQuYXQgKEFUX0NIRUNLX0NPTkZMSUNUSU5HX09VVFBVVCk6IE5ldy4KKwkoQ29uZmxpY3Rpbmcgb3V0cHV0IGZpbGVzKTogTmV3IHRlc3RzLgorCisyMDA2LTEyLTA5ICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorCisJKiBkb2MvYmlzb24udGV4aW5mbzogRml4IGEgY291cGxlIG9mIHR5cG9zLgorCisyMDA2LTEyLTA4ICBCb2IgUm9zc2kgIDxib2JAYnJhc2tvLm5ldD4KKworCSogZGF0YS9wdXNoLmM6ICh5eXB2YXJzaW5pdCwgeXlwdmFycywgc3RydWN0IHl5cHZhcnMsIHl5cHVzaHBhcnNlKToKKwlSZW5hbWUgdG8uLi4KKwkoeXlwc3RhdGVfaW5pdCwgeXlwc3RhdGUsIHN0cnVjdCB5eXBzdGF0ZSwgeXlwdXNoX3BhcnNlKTogLi4uIHRoZXNlIGFuZAorCXVwZGF0ZSBhbGwgdXNlcy4KKwkoYjRfeXlzc2EsIGI0X3l5ZXJyb3JfcmFuZ2UsIHl5cHN0YXRlX2luaXQpOiBSZW5hbWUgcHYgdG8geXlwcy4KKwkoeXlwdXNoX3BhcnNlKTogUmVuYW1lIHl5cHZhcnMgYXJndW1lbnQgdG8geXlwcyBhbmQgcmVtb3ZlIHJlZHVuZGFudAorCWxvY2FsIHB2LgorCSh5eXBzdGF0ZV9pbml0LCB5eXB1c2hfcGFyc2UpOiBEZWNsYXJlIGluIEJpc29uLWdlbmVyYXRlZCBoZWFkZXIgZmlsZS4KKwkqIHRlc3RzL2NhbGMuYXQgKF9BVF9EQVRBX0NBTENfWSk6IFVzZSBuZXdseSBuYW1lZCBmdW5jdGlvbnMuCisKKzIwMDYtMTItMDcgIEJvYiBSb3NzaSAgPGJvYkBicmFza28ubmV0PgorCWFuZCBKb2VsIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogZGF0YS9wdXNoLmMgKHl5cHZhcnNpbml0KTogQ2hhbmdlIHJldHVybiB0eXBlIGZyb20gdm9pZCogdG8gc3RydWN0CisJeXlwdmFycyouIE5vIGxvbmdlciBjYXN0IHRvIHZvaWQqIG9uIHJldHVybi4KKwkoc3RydWN0IHl5cHZhcnMpOiBSZW1vdmUgeXlsZW4gc2luY2UgaXQgbmVlZCBub3QgYmUgcmVtZW1iZXJlZCBiZXR3ZWVuCisJeXlwdXNocGFyc2UgaW52b2NhdGlvbnMuCisJKHl5cHVzaHBhcnNlKTogRG9uJ3QgY29weSBiZXR3ZWVuIHl5bGVuIGFuZCBwdi0+eXlsZW4uCisKKzIwMDYtMTItMDUgIEJvYiBSb3NzaSAgPGJvYkBicmFza28ubmV0PgorCisJKiBkYXRhL3B1c2guYyAoeXljaGFyX3NldCwgeXlsdmFsX3NldCwgeXlsbG9jX3NldCk6IERlbGV0ZS4KKwkoeXlwdXNocGFyc2UpOiBBZGQgeXluY2hhciwgeXlubHZhbCwgeXlubGxvYyBwYXJhbWV0ZXJzLgorCShiNF9kZWNsYXJlX3BhcnNlcl92YXJpYWJsZXMpOiBEbyBub3QgZGVjbGFyZSB5eW5lcnJzIGZvciBwdXNoIG1vZGUuCisJKHN0cnVjdCB5eXB2YXJzKTogUmVtb3ZlIGI0X2RlY2xhcmVfcGFyc2VyX3ZhcmlhYmxlcy4KKwkoeXlwdmFyc2luaXQpOiBSZW1vdmUgaW5pdCBjb2RlIGZvciByZW1vdmVkIHZhcmlhYmxlcy4KKwkoZ2xvYmFsIHNjb3BlKTogRG8gbm90IGRlY2xhcmUgYjRfZGVjbGFyZV9wYXJzZXJfdmFyaWFibGVzIGlmCisJcHVzaCBvciBwdXJlIG1vZGUuCisJKHl5cHVzaHBhcnNlKTogQWRkIGI0X2RlY2xhcmVfcGFyc2VyX3ZhcmlhYmxlcy4KKwlJbml0IG5ldyBsb2NhbCB2YXJpYWJsZXMsIGFuZCByZW1vdmUgaW5pdCBjb2RlIGZvciByZW1vdmVkCisJeXlwdmFycyB2YXJpYWJsZXMuCisJKHl5cGFyc2UpOiBEZWxldGUuCisJKiB0ZXN0cy9jYWxjLmF0IChfQVRfREFUQV9DQUxDX1kpOiBDYWxsIHl5cHVzaHBhcnNlIGZvciBwdXNoIG1vZGUKKwlhbmQgeXlwYXJzZSBmb3Igb3RoZXIgbW9kZXMuCisJKEFUX0NIRUNLX0NBTENfTEFMUik6IEFkZGVkICclc2tlbGV0b24gInB1c2guYyInIGZvciBwdXNoIHRlc3RzLgorCSogdGVzdHMvbG9jYWwuYXQgKEFUX1BVU0hfSUYsIEFUX1BVUkVfT1JfUFVTSF9JRik6IEFkZGVkLgorCShBVF9ZWUVSUk9SX1NFRVNfTE9DX0lGKTogcHVzaC1wYXJzZXIgbWFrZXMgdGhpcyBmYWxzZS4KKwkoQVRfUFVSRV9MRVhfSUYpOiBUcnVlIGlmIHB1cmUgb3IgcHVzaCBwYXJzZXIuCisKKzIwMDYtMTItMDUgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJRG9jdW1lbnQgWWFjYyBwcm9sb2d1ZSBhbHRlcm5hdGl2ZXMgYW5kIGRlZmF1bHQgJWRlc3RydWN0b3IncyBhbmQKKwklcHJpbnRlcidzIGFzIGV4cGVyaW1lbnRhbC4gIERvbid0IG1lbnRpb24gSmF2YSB5ZXQuICBEaXNjdXNzZWQgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwNi0xMi9tc2cwMDAwMi5odG1sPi4KKwkqIE5FV1MgKDIuM2ErKTogU2F5IHRoZXkncmUgZXhwZXJpbWVudGFsLiAgUmVtb3ZlIGFueSBtZW50aW9uIG9mIEphdmEuCisJKDIuM2EpOiBBbm5vdGF0ZSB0aGlzIGVudHJ5IHRvIHNheSB0aGUgb2xkIGZvcm1zIG9mIHRoZXNlIGZlYXR1cmVzIHdlcmUKKwlhbHNvIGV4cGVyaW1lbnRhbC4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChQcm9sb2d1ZSBBbHRlcm5hdGl2ZXMsIEZyZWVpbmcgRGlzY2FyZGVkIFN5bWJvbHMsCisJVGFibGUgb2YgU3ltYm9scyk6IFNheSB0aGV5J3JlIGV4cGVyaW1lbnRhbC4gIENvbW1lbnQgb3V0IGFueSBtZW50aW9uCisJb2YgSmF2YSAod2UnbGwgd2FudCB0aGlzIGJhY2sgZXZlbnR1YWxseSkuCisKKzIwMDYtMTItMDEgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJU3VwcG9ydCBhIGZpbGUgbmFtZSBhcmd1bWVudCB0byAlZGVmaW5lcy4gIERlcHJlY2F0ZSBgPScgaW4KKwklZmlsZS1wcmVmaXgsICVuYW1lLXByZWZpeCwgYW5kICVvdXRwdXQuICBEaXNjdXNzZWQgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2hlbHAtYmlzb24vMjAwNi0wOS9tc2cwMDAwMS5odG1sPi4KKwkqIE5FV1MgKDIuM2ErKTogTWVudGlvbi4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChEZWNsIFN1bW1hcnksIFRhYmxlIG9mIFN5bWJvbHMpOiBBZGQgZW50cnkgZm9yIG5ldworCWZvcm0gb2YgJWRlZmluZXMsIGFuZCByZW1vdmUgYD0nIGZyb20gZW50cmllcyBmb3IgJWZpbGUtcHJlZml4LAorCSVuYW1lLXByZWZpeCwgYW5kICVvdXRwdXQuCisJKiBzcmMvcGFyc2UtZ3JhbS55IChwcm9sb2d1ZV9kZWNsYXJhdGlvbik6IEltcGxlbWVudC4KKwkqIHRlc3RzL2NhbGMuYXQgKFNpbXBsZSBMQUxSIENhbGN1bGF0b3IsIFNpbXBsZSBHTFIgQ2FsY3VsYXRvciwgU2ltcGxlCisJTEFMUjEgQysrIENhbGN1bGF0b3IsIFNpbXBsZSBHTFIgQysrIENhbGN1bGF0b3IpOiBSZW1vdmUgdGhlIGA9JyBmcm9tCisJYWxsIGJ1dCBvbmUgb2NjdXJyZW5jZSBvZiAlbmFtZS1wcmVmaXguCisJKiB0ZXN0cy9oZWFkZXJzLmF0IChleHBvcnQgWVlMVFlQRSk6IFJlbW92ZSB0aGUgYD0nIGZyb20gJW5hbWUtcHJlZml4LgorCSogdGVzdHMvbG9jYWwuYXQgKF9BVF9CSVNPTl9PUFRJT05fUFVTSERFRlMpOiBMaWtld2lzZS4KKwkqIHRlc3RzL291dHB1dC5hdCAoQVRfQ0hFQ0tfT1VUUFVUKTogUmVtb3ZlIHRoZSBgPScgZnJvbSBhbGwgYnV0IG9uZQorCW9jY3VycmVuY2Ugb2YgZWFjaCBvZiAlZmlsZS1wcmVmaXggYW5kICVvdXRwdXQuICBBZGQgY2hlY2sgZm9yICVkZWZpbmVzCisJd2l0aCBhcmd1bWVudC4KKwkqIHRlc3RzL3JlZHVjZS5hdCAoVXNlbGVzcyBUZXJtaW5hbHMsIFVzZWxlc3MgTm9udGVybWluYWxzLAorCVVzZWxlc3MgUnVsZXMsIFJlZHVjZWQgQXV0b21hdG9uLCBVbmRlcml2YWJsZSBSdWxlcywgRW1wdHkgTGFuZ3VhZ2UpOgorCVJlbW92ZSB0aGUgYD0nIGZyb20gJW91dHB1dC4KKworMjAwNi0xMS0yMSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlEb24ndCBlc2NhcGUgJCBpbiB0ZXN0IGNhc2UgdGl0bGVzIHNpbmNlIEF1dG9jb25mIDIuNjEgbm93IGRvZXMgdGhhdAorCWNvcnJlY3RseS4KKwkqIHRlc3RzL2FjdGlvbnMuYXQgKERlZmF1bHQgJXByaW50ZXIgYW5kICVkZXN0cnVjdG9yIGFyZSBub3QgZm9yIGVycm9yCisJb3IgJHVuZGVmaW5lZCk6IEhlcmUuCisJKERlZmF1bHQgJXByaW50ZXIgYW5kICVkZXN0cnVjdG9yIGFyZSBub3QgZm9yICRhY2NlcHQpOiBIZXJlLgorCSogdGVzdHMvaW5wdXQuYXQgKEludmFsaWQgJG4gYW5kIEBuKTogSGVyZS4KKworMjAwNi0xMS0yMCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlSZW5hbWUgPCE+IHRvIDw+LiAgRGlzY3Vzc2VkIHN0YXJ0aW5nIGF0CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDYtMTEvbXNnMDAwMzkuaHRtbD4uCisJKiBORVdTICgyLjNhKyk6IFVwZGF0ZS4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChGcmVlaW5nIERpc2NhcmRlZCBTeW1ib2xzLCBUYWJsZSBvZiBTeW1ib2xzKToKKwlVcGRhdGUuCisJKiBzcmMvcGFyc2UtZ3JhbS55IChUWVBFX1RBR19OT05FLCBnZW5lcmljX3N5bWxpc3RfaXRlbSk6IEltcGxlbWVudC4KKwkqIHNyYy9zY2FuLWdyYW0ubCAoSU5JVElBTCk6IEltcGxlbWVudC4KKwkqIHNyYy9zeW1saXN0LmMgKHN5bWJvbF9saXN0X2RlZmF1bHRfdGFnbGVzc19uZXcpOiBVcGRhdGUgY29tbWVudC4KKwkqIHNyYy9zeW1saXN0LmggKHN5bWJvbF9saXN0LCBzeW1ib2xfbGlzdF9kZWZhdWx0X3RhZ2xlc3NfbmV3KTogVXBkYXRlCisJY29tbWVudC4KKwkqIHRlc3RzL2FjdGlvbnMuYXQgKERlZmF1bHQgdGFnbGVzcyAlcHJpbnRlciBhbmQgJWRlc3RydWN0b3IsCisJRGVmYXVsdCB0YWdnZWQgYW5kIHBlci10eXBlICVwcmludGVyIGFuZCAlZGVzdHJ1Y3RvciwKKwlEZWZhdWx0ICVwcmludGVyIGFuZCAlZGVzdHJ1Y3RvciBhcmUgbm90IGZvciBlcnJvciBvciAkdW5kZWZpbmVkLAorCURlZmF1bHQgJXByaW50ZXIgYW5kICVkZXN0cnVjdG9yIGFyZSBub3QgZm9yICRhY2NlcHQsCisJRGVmYXVsdCAlcHJpbnRlciBhbmQgJWRlc3RydWN0b3IgZm9yIG1pZC1ydWxlIHZhbHVlcyk6IFVwZGF0ZS4KKwkqIHRlc3RzL2lucHV0LmF0IChEZWZhdWx0ICVwcmludGVyIGFuZCAlZGVzdHJ1Y3RvciByZWRlY2xhcmVkLAorCVVudXNlZCB2YWx1ZXMgd2l0aCBkZWZhdWx0ICVkZXN0cnVjdG9yKTogVXBkYXRlLgorCisyMDA2LTExLTE3ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCURvbid0IGxldCAlcHJlYyB0YWtlIGEgbm9udGVybWluYWwuCisJKiBzcmMvcmVhZGVyLmMgKGdyYW1tYXJfY3VycmVudF9ydWxlX3ByZWNfc2V0KTogTWFrZSB0aGUgJXByZWMgc3ltYm9sIGEKKwl0b2tlbi4KKwkqIHRlc3RzL2lucHV0LmF0ICglcHJlYyB0YWtlcyBhIHRva2VuKTogTmV3IHRlc3QgY2hlY2tpbmcgdGhhdCAlcHJlYworCXdvbid0IHRha2UgYSBub250ZXJtaW5hbC4KKworMjAwNi0xMS0xMCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIHRlc3RzL3Rlc3RzdWl0ZS5hdCAoQVRfQ0hFQ0spOiBEb24ndCBtaXNzIGFuIGV4aXQgdmFsdWUgb2YgMCBiZWNhdXNlCisJaXQgd2FzIGRvdWJsZS1xdW90ZWQuCisJKiBzcmMvTWFrZWZpbGUuYW0gKFlBQ0MpOiBVc2UgLS13YXJuaW5ncz1hbGwsZXJyb3Igc28gdGhhdCBCaXNvbidzIG93bgorCWdyYW1tYXIgaXMgbWFpbnRhaW5lZCB3aXRoIEJpc29uJ3MgaGlnaGVzdCBzdGFuZGFyZHMuCisJKiBzcmMvZ2V0YXJncy5jOiBGaXggc29tZSB0eXBvcyBpbiBEb3h5Z2VuIGNvbW1lbnRzLgorCisyMDA2LTExLTEwICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUZpeCBtZW1vcnkgbGVha3MgaW4gc2Nhbm5lcnMgZ2VuZXJhdGVkIGJ5IGF0IGxlYXN0IEZsZXggMi41LjkgYW5kCisJbGF0ZXIuICBSZXBvcnRlZCBieSBQYXVsIEVnZ2VydCBpbgorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA2LTExL21zZzAwMDE0Lmh0bWw+LgorCSogc3JjL2ZsZXgtc2Nhbm5lci5oICh5eWxleF9kZXN0cm95KTogRGVmaW5lIGZvciBGbGV4IGJlZm9yZSAyLjUuOS4KKwkqIHNyYy9zY2FuLWNvZGUubCAodHJhbnNsYXRlX2FjdGlvbik6IERvbid0IGJvdGhlciBpbnZva2luZworCXl5X2RlbGV0ZV9idWZmZXIgKFlZX0NVUlJFTlRfQlVGRkVSKSBiZWZvcmUgY3JlYXRpbmcgdGhlIGZpcnN0IGJ1ZmZlci4KKwkoY29kZV9zY2FubmVyX2ZyZWUpOiBJbnN0ZWFkIG9mIGludm9raW5nCisJeXlfZGVsZXRlX2J1ZmZlciAoWVlfQ1VSUkVOVF9CVUZGRVIpIGRpcmVjdGx5LCBpbnZva2UgeXlsZXhfZGVzdHJveSwKKwl3aGljaCBmcmVlcyBtb3JlLgorCSogc3JjL3NjYW4tZ3JhbS5sIChncmFtX3NjYW5uZXJfZnJlZSk6IExpa2V3aXNlLgorCSogc3JjL3NjYW4tc2tlbC5sIChzY2FuX3NrZWwpOiBMaWtld2lzZS4KKworMjAwNi0xMS0wOSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIHNyYy9maWxlcy5jICh0cik6IENoYW5nZSByZXR1cm4gdHlwZSB0byB2b2lkLgorCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlX2luc2VydCk6IEZyZWUgc3RvcmFnZSBpbiBjYXNlIG11c2NsZV9ncm93CisJaGFzIGJlZW4gY2FsbGVkIHByZXZpb3VzbHkgZm9yIHRoZSBzYW1lIGtleS4KKwkobXVzY2xlX2ZpbmQpOiBSZXR1cm4gc3RvcmFnZSBpbnN0ZWFkIG9mIHZhbHVlIHNvIHRoYXQKKwktLWVuYWJsZS1nY2Mtd2FybmluZ3MgZG9lc24ndCBwcm9kdWNlIHdhcm5pbmdzIHRoYXQgdGhlIHJldHVybiBkaXNjYXJkcworCWNvbnN0LiAgYXZlciB0aGF0IHRoZSB2YWx1ZSBhbmQgc3RvcmFnZSBhcmUgdGhlIHNhbWUgc2luY2Ugc3RvcmFnZQorCWNvdWxkIHBvdGVudGlhbGx5IGJlIE5VTEwgd2hlbiB2YWx1ZSBpcyBub3QuCisJKiB0ZXN0cy90ZXN0c3VpdGUuYXQgKEFUX0NIRUNLKTogVHJlYXQgYW4gdW5zcGVjaWZpZWQgZXhpdCB2YWx1ZSB0aGUKKwlzYW1lIGFzIDAuCisKKzIwMDYtMTEtMDggIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBib290c3RyYXAuY29uZiAoZXhjbHVkZWRfZmlsZXMpOiBFeGNsdWRlIG00L2NvZGVzZXQubTQgKHVuZG9pbmcKKwl0aGUgZWFybGllciBjaGFuZ2UgdG9kYXkpLCBtNC9pbnRsLm00LCBtNC9pbnRsZGlyLm00LiAgVGhpcyBnaXZlcworCXVzIGEgc2xpZ2h0bHkgY2xlYW5lciBkaXN0cmlidXRpb24sIGFuZCBhbHNvIHdvcmtzLgorCSogbTQvLmN2c2lnbm9yZTogQWRkIGlubGluZS5tNCwgd2ludF90Lm00IHRvIGFjY29tbW9kYXRlIHJlY2VudAorCWdudWxpYiBjaGFuZ2VzLgorCisyMDA2LTExLTA4ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKwlhbmQgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwlEb24ndCBsZXQgQmlzb24gbGVhayBtZW1vcnkgZXhjZXB0IHdoZW4gaXQgY29tcGxhaW5zLgorCSogc3JjL2ZpbGVzLmggKHBhcnNlcl9maWxlX25hbWUsIHNwZWNfdmVyYm9zZV9maWxlLCBzcGVjX2dyYXBoX2ZpbGUpOgorCShzcGVjX2RlZmluZXNfZmlsZSwgZGlyX3ByZWZpeCk6IE5vdyBjaGFyICosIG5vdCBjb25zdCBjaGFyICosCisJc2luY2UgdGhleSBhcmUgZnJlZWQuCisJKiBzcmMvZmlsZXMuYzogTGlrZXdpc2UuCisJKGFsbF9idXRfZXh0LCBhbGxfYnV0X3RhYl9leHQsIHNyY19leHRlbnNpb24sIGhlYWRlcl9leHRlbnNpb24pOgorCUxpa2V3aXNlLgorCSh0cik6IE5vdyBvcGVyYXRlcyBpbi1wbGFjZS4gIEFsbCB1c2VzIGNoYW5nZWQuCisJKGNvbXB1dGVfZXh0c19mcm9tX2dmLCBjb21wdXRlX2V4dHNfZnJvbV9zcmMpOiBEb24ndCBsZWFrIHRlbXBvcmFyeQorCXZhbHVlcy4KKwkoY29tcHV0ZV9maWxlX25hbWVfcGFydHMsIGNvbXB1dGVfb3V0cHV0X2ZpbGVfbmFtZXMpOiBEb24ndCBzdG9yZQorCXJlYWQtb25seSBkYXRhIGluIHZhcmlhYmxlcyB0aGF0IHdpbGwgYmUgZnJlZWQuCisJKGNvbXB1dGVfb3V0cHV0X2ZpbGVfbmFtZXMpOiBGcmVlIGFsbF9idXRfZXh0LCBhbGxfYnV0X3RhYl9leHQsCisJc3JjX2V4dGVuc2lvbiwgYW5kIGhlYWRlcl9leHRlbnNpb24uCisJKG91dHB1dF9maWxlX25hbWVzX2ZyZWUpOiBOZXcgcHVibGljIGZ1bmN0aW9uIHRvIGZyZWUKKwlzcGVjX3ZlcmJvc2VfZmlsZSwgc3BlY19ncmFwaF9maWxlLCBzcGVjX2RlZmluZXNfZmlsZSwKKwlwYXJzZXJfZmlsZV9uYW1lLCBhbmQgZGlyX3ByZWZpeC4KKwkqIHNyYy9nZXRhcmdzLmMgKGdldGFyZ3MpOiBEb24ndCBzdG9yZSByZWFkLW9ubHkgZGF0YSBpbiB2YXJpYWJsZXMgdGhhdAorCXdpbGwgYmUgZnJlZWQuCisJKiBzcmMvbWFpbi5jIChtYWluKTogSW52b2tlIG91dHB1dF9maWxlX25hbWVzX2ZyZWUsIGNvZGVfc2Nhbm5lcl9mcmVlCisJKHdoaWNoIHByZXZpb3VzbHkgZXhpc3RlZCBidXQgd2FzIHVudXNlZCksIGFuZCBxdW90ZWFyZ19mcmVlLgorCSogc3JjL211c2NsZV90YWIuaCAobXVzY2xlX2luc2VydCk6IHZhbHVlIGFyZyBpcyBub3cgYSBgY2hhciBjb25zdCAqJy4KKwkqIHNyYy9tdXNjbGVfdGFiLmM6IExpa2V3aXNlLgorCShtdXNjbGVfZW50cnkpOiBNYWtlIHRoZSB2YWx1ZSBjaGFyIGNvbnN0ICosCisJYW5kIGFkZCBhIG5ldyBzdG9yYWdlIG1lbWJlciB0aGF0IGlzIGNoYXIgKiBhbmQgY2FuIGJlIGZyZWVkLgorCShtdXNjbGVfZW50cnlfZnJlZSk6IE5ldyBwcml2YXRlIGZ1bmN0aW9uLgorCShtdXNjbGVfaW5pdCk6IFVzZSBpdCBpbnN0ZWFkIG9mIGZyZWUuCisJKG11c2NsZV9pbnNlcnQsIG11c2NsZV9ncm93KTogVXBkYXRlIGFuZCB1c2UgbmV3IHN0b3JhZ2UgbWVtYmVyLgorCShtdXNjbGVfY29kZV9ncm93KTogRnJlZSB0aGUgc3RyaW5nIHBhc3NlZCB0byBtdXNjbGVfZ3JvdworCXNpbmNlIGl0J3Mgbm90IG5lZWRlZCBhbnltb3JlLgorCSogc3JjL3BhcnNlLWdyYW0ueSAoJXVuaW9uKTogTWFrZSBgY2hhcnMnIG1lbWJlciBhIGBjaGFyIGNvbnN0IConLCBhbmQKKwlhZGQgYSBuZXcgYGNoYXIgKmNvZGUnIG1lbWJlci4KKwkoInsuLi59Iik6IERlY2xhcmUgc2VtYW50aWMgdHlwZSBhcyBjb2RlLgorCSogc3JjL3NjYW4tY29kZS5oICh0cmFuc2xhdGVfcnVsZV9hY3Rpb24pOgorCSh0cmFuc2xhdGVfc3ltYm9sX2FjdGlvbiwgdHJhbnNsYXRlX2NvZGUsIHRyYW5zbGF0ZV9hY3Rpb24pOiBSZXR1cm4KKwlgY2hhciBjb25zdCAqJyByYXRoZXIgdGhhbiBgY2hhciAqJyBzaW5jZSBleHRlcm5hbCBjb2RlIHNob3VsZCBub3QgZnJlZQorCXRoZXNlIHN0cmluZ3MuCisJKiBzcmMvc2Nhbi1jb2RlLmw6IExpa2V3aXNlLgorCSogc3JjL3NjYW4tZ3JhbS5sICg8U0NfQlJBQ0VEX0NPREU+KTogVXNlIHZhbC0+Y29kZSBmb3IgQlJBQ0VEX0NPREUsCisJd2hpY2ggaXMgInsuLi59IiBpbiB0aGUgcGFyc2VyLgorCSogdGVzdHMvTWFrZWZpbGUuYW0gKG1haW50YWluZXItY2hlY2stdmFsZ3JpbmQpOiBTZXQKKwlWQUxHUklORF9PUFRTPSctLWxlYWstY2hlY2s9ZnVsbCAtLXNob3ctcmVhY2hlYWJsZT15ZXMnIGJlZm9yZSBpbnZva2luZworCVZhbGdyaW5kLgorCSogdGVzdHMvY2FsYy5hdCAoX0FUX0RBVEFfQ0FMQ19ZKTogZmNsb3NlIHRoZSBGSUxFKiBzbyBWYWxncmluZCBkb2Vzbid0CisJY29tcGxhaW4uCisJKiB0ZXN0cy90ZXN0c3VpdGUuYXQgKEFUX0NIRUNLKTogUmVkZWZpbmUgc28gdGhhdCBydW5uaW5nIEJpc29uIGFuZAorCWV4cGVjdGluZyBhIG5vbi16ZXJvIGV4aXQgc3RhdHVzIHNldHMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgYW5kCisJLS1zaG93LXJlYWNoYWJsZT1ubyBmb3IgVmFsZ3JpbmQuICBCaXNvbiB1bmFiYXNoZWRseSBsZWFrcyBtZW1vcnkgaW4KKwl0aGlzIGNhc2UsIGFuZCB3ZSBkb24ndCB3YW50IHRvIGhlYXIgYWJvdXQgaXQuCisKKzIwMDYtMTEtMDggIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBib290c3RyYXAgKHJ1bnRpbWUtcG8vTWFrZXZhcnMpOiBEZXJpdmUgZnJvbSBwby9NYWtldmFycworCWluc3RlYWQgb2YgZnJvbSB0aGUgdGVtcGxhdGUsIHRvIHNpbXBsaWZ5IGNvbmZpZ3VyYXRpb24gYSBiaXQuCisJKiBib290c3RyYXAuY29uZiAoZXhjbHVkZWRfZmlsZXMpOiBEb24ndCBleGNsdWRlIG00L2NvZGVzZXQubTQKKwlhbmQgbTQvd2ludF90Lm00LCBhcyB0aGV5IGFyZSBuZWVkZWQgd2l0aCB0aGUgbGF0ZXN0IGdudWxpYi4KKworMjAwNi0xMC0zMSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlEaXNhYmxlIHVuc2V0L3VudXNlZCBtaWQtcnVsZSB2YWx1ZSB3YXJuaW5ncyBieSBkZWZhdWx0LCBhbmQgcmVjb2duaXplCisJLS13YXJuaW5ncz1taWRydWxlLXZhbHVlcyB0byBlbmFibGUgdGhlbS4gIERpc2N1c3NlZCBzdGFydGluZyBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvaGVscC1iaXNvbi8yMDA2LTEwL21zZzAwMDMwLmh0bWw+LgorCSogTkVXUyAoMi4zYSspOiBNZW50aW9uLgorCSogc3JjL2dldGFyZ3MuYywgc3JjL2dldGFyZ3MuaCAod2FybmluZ3NfYXJncywgd2FybmluZ3NfdHlwZXMsIGVudW0KKwl3YXJuaW5ncyk6IEFkZCBlbnRyeSBmb3IgbWlkcnVsZS12YWx1ZXMgc3ViYXJndW1lbnQuCisJKiBzcmMvcmVhZGVyLmMgKHN5bWJvbF9zaG91bGRfYmVfdXNlZCk6IERvbid0IHJldHVybiB0cnVlIGp1c3QgYmVjYXVzZQorCXRoZSB2YWx1ZSBpcyBhIHNldC91c2VkIG1pZC1ydWxlIHZhbHVlIHVubGVzcworCS0td2FybmluZ3M9bWlkcnVsZS12YWx1ZXMgd2FzIHNwZWNpZmllZC4KKwkqIHRlc3RzL2lucHV0LmF0IChVbnVzZWQgdmFsdWVzLCBVbnVzZWQgdmFsdWVzIGJlZm9yZSBzeW1ib2wKKwlkZWNsYXJhdGlvbnMpOiBSdW4gdGVzdHMgd2l0aCBhbmQgd2l0aG91dCAtLXdhcm5pbmdzPW1pZHJ1bGUtdmFsdWVzLgorCisJKiBzcmMvcmVhZGVyLmMgKGNoZWNrX2FuZF9jb252ZXJ0X2dyYW1tYXIpOiBVc2Ugc3ltYm9sX2xpc3RfZnJlZSByYXRoZXIKKwl0aGFuIExJU1RfRlJFRSBkaXJlY3RseS4KKworMjAwNi0xMC0zMSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlGaW5pc2ggaW1wbGVtZW50aW5nIC0td2FybmluZ3M9ZXJyb3IsIHdoaWNoIHNob3VsZCBub3QgYmUgaW1wbGllZCBieQorCS0td2FybmluZ3M9YWxsIChvciBieSBpdHMgc3lub255bXMgLVcgYW5kIC0td2FybmluZ3Mgd2l0aG91dAorCXN1YmFyZ3VtZW50cykuCisJKiBzcmMvY29tcGxhaW4uYyAoc2V0X3dhcm5pbmdfaXNzdWVkKTogTmV3IGZ1bmN0aW9uIHRvIHJlcG9ydCB0aGF0CisJd2FybmluZ3MgYXJlIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzIGFuZCB0byByZWNvcmQgYW4gZXJyb3IgaWYgc28uCisJSW52b2tlLi4uCisJKHdhcm5fYXQsIHdhcm4pOiAuLi4gaGVyZS4KKwkqIHNyYy9nZXRhcmdzLmMgKHdhcm5pbmdzX2FyZ3MsIHdhcm5pbmdzX3R5cGVzKTogUmVvcmRlciBzbyB0aGF0CisJImVycm9yIC0gd2FybmluZ3MgYXJlIGVycm9ycyIgZG9lcyBub3QgYXBwZWFyIGFib3ZlICJhbGwgLSBhbGwgb2YgdGhlCisJYWJvdmUiLgorCShnZXRhcmdzKTogRm9yIC1XIGFuZCAtLXdhcm5pbmdzIHdpdGhvdXQgc3ViYXJndW1lbnRzLCBkb24ndCBsZXQKKwlGTEFHU19BUkdNQVRDSCBzZXQgd2FybmluZ3NfZXJyb3IgaW4gd2FybmluZ3NfZmxhZy4KKwkqIHNyYy9nZXRhcmdzLmggKGVudW0gd2FybmluZ3MpOiBVbnNldCB3YXJuaW5nc19lcnJvciBpbiB3YXJuaW5nc19hbGwuCisKKzIwMDYtMTAtMzEgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBzcmMvZ2V0YXJncy5jIChmbGFnc19hcmdtYXRjaCk6IERvbid0IGNhdXNlIHNlZ21lbnRhdGlvbiBmYXVsdCBmb3IKKwllbXB0eSBzdWJhcmd1bWVudCBsaXN0LiAgRm9yIGV4YW1wbGU6IGBiaXNvbiAgLS13YXJuaW5ncz0gIHBhcnNlci55Jy4KKworMjAwNi0xMC0yMSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIGRhdGEvcHVzaC5jLCBkYXRhL3lhY2MuYzogTWFrZSBzdXJlIHRoZXJlJ3MgYSBuZXdsaW5lIGF0IHRoZSBlbmQgb2YKKwl0aGUgcGFyc2VyIGhlYWRlciBmaWxlIHNvIHRoYXQgZ2NjIGRvZXNuJ3Qgd2Fybi4KKworMjAwNi0xMC0yMSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlTcGxpdCB0aGUgZGVmYXVsdCAlZGVzdHJ1Y3Rvci8lcHJpbnRlciBpbnRvIHR3byBraW5kczogPCo+IGFuZCA8IT4uCisJRGlzY3Vzc2VkIHN0YXJ0aW5nIGF0CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDYtMDkvbXNnMDAwNjAuaHRtbD4uCisJKiBORVdTICgyLjNhKyk6IE1lbnRpb24uCisJKiBkb2MvYmlzb24udGV4aW5mbyAoRnJlZWluZyBEaXNjYXJkZWQgU3ltYm9scyk6IERvY3VtZW50IHRoaXMgYW5kIHRoZQorCXByZXZpb3VzIGNoYW5nZSB0b2RheSByZWxhdGVkIHRvIG1pZC1ydWxlcy4KKwkoVGFibGUgb2YgU3ltYm9scyk6IFJlbW92ZSAlc3ltYm9sLWRlZmF1bHQgYW5kIGFkZCA8Kj4gYW5kIDwhPi4KKwkqIHNyYy9wYXJzZS1ncmFtLnkgKFBFUkNFTlRfU1lNQk9MX0RFRkFVTFQpOiBSZW1vdmUuCisJKFRZUEVfVEFHX0FOWSk6IEFkZCBhcyA8Kj4uCisJKFRZUEVfVEFHX05PTkUpOiBBZGQgYXMgPCE+LgorCShnZW5lcmljX3N5bWxpc3RfaXRlbSk6IFJlbW92ZSBSSFMgZm9yICVzeW1ib2wtZGVmYXVsdCBhbmQgYWRkIFJIUydzCisJZm9yIDwqPiBhbmQgPCE+LgorCSogc3JjL3NjYW4tZ3JhbS5sIChQRVJDRU5UX1NZTUJPTF9ERUZBVUxUKTogUmVtb3ZlLgorCShUWVBFX1RBR19BTlksIFRZUEVfVEFHX05PTkUpOiBBZGQuCisJKiBzcmMvc3ltbGlzdC5jIChzeW1ib2xfbGlzdF9kZWZhdWx0X25ldyk6IFNwbGl0IGludG8gdGFnZ2VkIGFuZAorCXRhZ2xlc3MgdmVyc2lvbnMuCisJKHN5bWJvbF9saXN0X2Rlc3RydWN0b3Jfc2V0LCBzeW1ib2xfbGlzdF9wcmludGVyX3NldCk6IFNwbGl0CisJU1lNTElTVF9ERUZBVUxUIGNhc2UgaW50byBTWU1MSVNUX0RFRkFVTFRfVEFHR0VEIGFuZAorCVNZTUxJU1RfREVGQVVMVF9UQUdMRVNTLgorCSogc3JjL3N5bWxpc3QuaDogVXBkYXRlIHN5bWJvbF9saXN0X2RlZmF1bHQqX25ldyBwcm90b3R5cGVzLgorCShzeW1ib2xfbGlzdC5jb250ZW50X3R5cGUpOiBTcGxpdCBlbnVtIHZhbHVlIFNZTUxJU1RfREVGQVVMVCBpbnRvCisJU1lNTElTVF9ERUZBVUxUX1RBR0dFRCBhbmQgU1lNTElTVF9ERUZBVUxUX1RBR0xFU1MuCisJKiBzcmMvc3ltdGFiLmMgKGRlZmF1bHRfZGVzdHJ1Y3RvciwgZGVmYXVsdF9kZXN0cnVjdG9yX2xvY2F0aW9uLAorCWRlZmF1bHRfcHJpbnRlciwgZGVmYXVsdF9wcmludGVyX2xvY2F0aW9uKTogU3BsaXQgZWFjaCBpbnRvIHRhZ2dlZCBhbmQKKwl0YWdsZXNzIHZlcnNpb25zLgorCShzeW1ib2xfZGVzdHJ1Y3Rvcl9nZXQsIHN5bWJvbF9kZXN0cnVjdG9yX2xvY2F0aW9uX2dldCwKKwlzeW1ib2xfcHJpbnRlcl9nZXQsIHN5bWJvbF9wcmludGVyX2xvY2F0aW9uX2dldCk6IEltcGxlbWVudCB0YWdnZWQKKwlkZWZhdWx0IGFuZCB0YWdsZXNzIGRlZmF1bHQgY2FzZXMuCisJKGRlZmF1bHRfZGVzdHJ1Y3Rvcl9zZXQsIGRlZmF1bHRfcHJpbnRlcl9zZXQpOiBTcGxpdCBlYWNoIGludG8gdGFnZ2VkCisJYW5kIHRhZ2xlc3MgdmVyc2lvbnMuCisJKiBzcmMvc3ltdGFiLmg6IFVwZGF0ZSBwcm90b3R5cGVzLgorCSogdGVzdHMvYWN0aW9ucy5hdCAoRGVmYXVsdCAlcHJpbnRlciBhbmQgJWRlc3RydWN0b3IpOiBSZW5hbWUgdG8uLi4KKwkoRGVmYXVsdCB0YWdsZXNzICVwcmludGVyIGFuZCAlZGVzdHJ1Y3Rvcik6IC4uLiB0aGlzLCBhbmQgZXh0ZW5kLgorCShQZXItdHlwZSAlcHJpbnRlciBhbmQgJWRlc3RydWN0b3IpOiBSZW5hbWUgdG8uLi4KKwkoRGVmYXVsdCB0YWdnZWQgYW5kIHBlci10eXBlICVwcmludGVyIGFuZCAlZGVzdHJ1Y3Rvcik6IC4uLiB0aGlzLCBhbmQKKwlleHRlbmQuCisJKERlZmF1bHQgJXByaW50ZXIgYW5kICVkZXN0cnVjdG9yIGZvciB1c2VyLWRlZmluZWQgZW5kIHRva2VuKTogRXh0ZW5kLgorCShEZWZhdWx0ICVwcmludGVyIGFuZCAlZGVzdHJ1Y3RvciBhcmUgbm90IGZvciBlcnJvciBvciAkdW5kZWZpbmVkKToKKwlVcGRhdGUuCisJKERlZmF1bHQgJXByaW50ZXIgYW5kICVkZXN0cnVjdG9yIGFyZSBub3QgZm9yICRhY2NlcHQpOiBVcGRhdGUuCisJKERlZmF1bHQgJXByaW50ZXIgYW5kICVkZXN0cnVjdG9yIGZvciBtaWQtcnVsZSB2YWx1ZXMpOiBFeHRlbmQuCisJKiB0ZXN0cy9pbnB1dC5hdCAoRGVmYXVsdCAlcHJpbnRlciBhbmQgJWRlc3RydWN0b3IgcmVkZWNsYXJlZCk6IEV4dGVuZC4KKwkoVW51c2VkIHZhbHVlcyB3aXRoIGRlZmF1bHQgJWRlc3RydWN0b3IpOiBFeHRlbmQuCisKKzIwMDYtMTAtMjEgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJRG9uJ3QgYXBwbHkgdGhlIGRlZmF1bHQgJWRlc3RydWN0b3IvJXByaW50ZXIgdG8gYW4gdW5yZWZlcmVuY2VkIG1pZHJ1bGUKKwl2YWx1ZS4gIE1lbnRpb25lZCBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA2LTA5L21zZzAwMTA0Lmh0bWw+LgorCSogc3JjL3N5bXRhYi5jIChkdW1teV9zeW1ib2xfZ2V0KTogTmFtZSBhbGwgZHVtbXkgc3ltYm9scyBpbml0aWFsbHkKKwlsaWtlICRAbiBpbnN0ZWFkIG9mIGp1c3QgQG4gc28gdGhhdCB0aGUgZGVmYXVsdCAlZGVzdHJ1Y3Rvci8lcHJpbnRlcgorCWxvZ2ljIGRvZXNuJ3Qgc2VlIHRoZW0gYXMgdXNlci1kZWZpbmVkIHN5bWJvbHMuCisJKHN5bWJvbF9pc19kdW1teSk6IENoZWNrIGZvciBib3RoIGZvcm1zIG9mIHRoZSBuYW1lLgorCSogc3JjL3JlYWRlci5jIChwYWNrZ3JhbSk6IFJlbW92ZSB0aGUgYCQnIGZyb20gZWFjaCBtaWRydWxlIHN5bWJvbAorCW5hbWUgZm9yIHdoaWNoIHRoZSBtaWRydWxlIHZhbHVlIGlzIHJlZmVyZW5jZWQgaW4gYW55IGFjdGlvbi4KKwkqIHRlc3RzL2FjdGlvbnMuYXQgKERlZmF1bHQgJXByaW50ZXIgYW5kICVkZXN0cnVjdG9yIGZvciBtaWQtcnVsZQorCXZhbHVlcyk6IE5ldyB0ZXN0LgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoUnVsZSBMaW5lIE51bWJlcnMsIFdlYjJjIFJlcG9ydCk6IFVwZGF0ZSBvdXRwdXQKKwlmb3IgY2hhbmdlIHRvIGR1bW15IHN5bWJvbCBuYW1lcy4KKworMjAwNi0xMC0yMCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlXYXJuIGFib3V0IHVuc2V0IG1pZHJ1bGUgJCQgaWYgdGhlIGNvcnJlc3BvbmRpbmcgJG4gaXMgdXNlZC4KKwkqIHNyYy9yZWFkZXIuYyAoc3ltYm9sX3Nob3VsZF9iZV91c2VkKTogQ2hlY2sgbWlkcnVsZSBwYXJlbnQgcnVsZSBmb3IKKwkkbiB1c2FnZS4KKwkocGFja2dyYW0pOiBCZWZvcmUgaW52b2tpbmcgZ3JhbW1hcl9ydWxlX2NoZWNrIG9uIGFueSBydWxlLCBtYWtlIHN1cmUKKwlhbGwgYWN0aW9ucyBoYXZlIGFscmVhZHkgYmVlbiBzY2FubmVkIGluIG9yZGVyIHRvIHNldCBgdXNlZCcgZmxhZ3MuCisJT3RoZXJ3aXNlLCBjaGVja2luZyB0aGF0IGEgbWlkcnVsZSdzICQkIGlzIHNldCB3aWxsIG5vdCBhbHdheXMgd29yaworCXByb3Blcmx5IGJlY2F1c2UgdGhlIG1pZHJ1bGUgY2hlY2sgbXVzdCBmb3J3YXJkLXJlZmVyZW5jZSB0aGUgbWlkcnVsZSdzCisJcGFyZW50IHJ1bGUuCisJKiB0ZXN0cy9pbnB1dC5hdCAoQVRfQ0hFQ0tfVU5VU0VEX1ZBTFVFUyk6IEV4dGVuZCB0byBjaGVjayB0aGUgbmV3CisJd2FybmluZy4KKworMjAwNi0xMC0yMCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlNb3JlIGltcHJvdmVtZW50cyB0byB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgcHJvbG9ndWUgYWx0ZXJuYXRpdmVzOgorCSogTkVXUyAoMi4zYSspOiBNZW50aW9uIHRoZSBuZXcgYFByb2xvZ3VlIEFsdGVybmF0aXZlcycgc2VjdGlvbiBpbiB0aGUKKwlCaXNvbiBtYW51YWwuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoUHJvbG9ndWUgQWx0ZXJuYXRpdmVzKTogQ29ycmVjdCBzb21lIGVycm9ycy4gIEFkZAorCXNvbWUgdGV4dCB0byBjbGFyaWZ5IHRoZSByZWxhdGl2ZSBpbXBvcnRhbmNlIG9mIHRoZSBuZXcgZGlyZWN0aXZlcyBhbmQKKwl0byBzaG93IGhvdyB0aGVzZSBkaXJlY3RpdmVzIG1heSBiZSB2aWV3ZWQgYXMgY29kZSBsYWJlbHMuCisKKzIwMDYtMTAtMTYgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJU2ltaWxhciB0byB0aGUgcmVjZW50bHkgcmVtb3ZlZCAlYmVmb3JlLWhlYWRlciwgYWRkICVjb2RlLXRvcCBhcyB0aGUKKwlhbHRlcm5hdGl2ZSB0byB0aGUgcHJlLXByb2xvZ3VlLiAgTWVudGlvbmVkIGF0CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDYtMTAvbXNnMDAwNjMuaHRtbD4uCisJQWxzbywgbGV0IHRoZSBwcm9sb2d1ZSBhbHRlcm5hdGl2ZXMgYXBwZWFyIGluIHRoZSBncmFtbWFyIHNlY3Rpb24uCisJKiBzcmMvcGFyc2UtZ3JhbS55IChQRVJDRU5UX0NPREVfVE9QKTogTmV3IHRva2VuLgorCShwcm9sb2d1ZV9kZWNsYXJhdGlvbik6IE1vdmUgdGhlIGV4aXN0aW5nIHByb2xvZ3VlIGFsdGVybmF0aXZlcyB0by4uLgorCShncmFtbWFyX2RlY2xhcmF0aW9uKTogLi4uIGhlcmUgYW5kIGFkZCAlY29kZS10b3AuCisJKiBzcmMvc2Nhbi1ncmFtLmwgKFBFUkNFTlRfQ09ERV9UT1ApOiBOZXcgdG9rZW4uCisKKwlDbGVhbiB1cCBhbmQgZXh0ZW5kIGRvY3VtZW50YXRpb24gZm9yIHRoZSBwcm9sb2d1ZSBhbHRlcm5hdGl2ZXMuCisJKiBORVdTICgyLjNhKyk6IERlc2NyaWJlIHByb2xvZ3VlIGFsdGVybmF0aXZlcy4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChQcm9sb2d1ZSk6IE1vdmUgZGlzY3Vzc2lvbiBvZiBwcm9sb2d1ZQorCWFsdGVybmF0aXZlcyB0by4uLgorCShQcm9sb2d1ZSBBbHRlcm5hdGl2ZXMpOiAuLi4gdGhpcyBuZXcgc2VjdGlvbiwgYW5kIGV4dGVuZCBpdCB0byBkaXNjdXNzCisJYWxsIDQgZGlyZWN0aXZlcyBpbiBkZXRhaWwuCisJKFRhYmxlIG9mIFN5bWJvbHMpOiBDbGVhbiB1cCBkaXNjdXNzaW9uIG9mIHByb2xvZ3VlIGFsdGVybmF0aXZlcyBhbmQKKwlhZGQgJWNvZGUtdG9wLgorCisyMDA2LTEwLTE2ICBKdWFuIE1hbnVlbCBHdWVycmVybyAgPGp1YW4uZ3VlcnJlcm9AZ214LmRlPgorCisJREpHUFAgc3BlY2lmaWMgaXNzdWVzLgorCisJKiBkamdwcC9jb25maWcuYmF0OiBjb25maWcuaGluIGhhcyBiZWVuIG1vdmVkIHRvIGxpYi4gQWRqdXN0CisJY29uZmlnLmJhdCBhY2NvcmRpbmdseS4KKwkqIGRqZ3BwL2NvbmZpZy5zZWQ6IEFkanVzdCBjb25maWcuc2VkIGZvciB0aGUgdXNlIG9mIGF1dG9jb25mIDIuNjAuCisJKiBkamdwcC9jb25maWcuc2l0ZTogTGlrZXdpc2UuCisKKzIwMDYtMTAtMTYgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisKKwlSZXBsYWNlICUqLWhlYWRlciB3aXRoICVwcm92aWRlcywgJXJlcXVpcmVzLCAlY29kZS4gIFNlZSBkaXNjdXNzaW9uIGF0CisJaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwNi0xMC9tc2cwMDAwMi5odG1sCisKKwkqIGRhdGEvYmlzb24ubTQgKGI0X3VzZXJfcmVxdWlyZXMsIGI0X3VzZXJfcHJvdmlkZXMpOiBOZXcuCisJKGI0X3VzZXJfc3RhcnRfaGVhZGVyKTogUmVtb3ZlLgorCSogZGF0YS9nbHIuYzogVXNlIG5ldyBtYWNyb3MgaW5zdGVhZCBvZiBiNF8qc3RhcnRfaGVhZGVyCisJYW5kIGI0XyplbmRfaGVhZGVyLgorCSogZGF0YS9nbHIuY2M6IExpa2V3aXNlLgorCSogZGF0YS9sYWxyMS5jYzogTGlrZXdpc2UuCisJKiBkYXRhL3B1c2guYzogTGlrZXdpc2UuCisJKiBkYXRhL3lhY2MuYzogTGlrZXdpc2UuCisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvOiBSZW1vdmUgJWJlZm9yZS1oZWFkZXIsIHJlbmFtZQorCSV7c3RhcnQsZW5kLGFmdGVyfS1oZWFkZXIgdG8gJXJlcXVpcmVzLCAlcHJvdmlkZXMsICVjb2RlLgorCisJKiBzcmMvcGFyc2UtZ3JhbS55OiBMaWtld2lzZSAoYWxzbyByZW5hbWUgdG9rZW4gbmFtZXMgYWNjb3JkaW5nbHkpLgorCSogc3JjL3NjYW4tZ3JhbS5sOiBMaWtld2lzZS4KKwkqIHRlc3RzL2FjdGlvbnMuYXQ6IExpa2V3aXNlLgorCisyMDA2LTEwLTE0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogbGliL01ha2VmaWxlLmFtIChBTV9DRkxBR1MpOiBSZW1vdmUgJChXRVJST1JfQ0ZMQUdTKS4KKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IEpvZWwgRS4gRGVubnkuCisKKzIwMDYtMTAtMTQgIEppbSBNZXllcmluZyAgPGppbUBtZXllcmluZy5uZXQ+CisKKwkoU3luYyBmcm9tIGNvcmV1dGlscy4pCisJV29yayBhbHNvIHdoZW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5ICh3aXRoIGUuZy4gY29yZXV0aWxzIHNvdXJjZXMpCisJaXMgdmVyc2lvbiBjb250cm9sbGVkIHdpdGggZ2l0LCByYXRoZXIgdGhhbiBDVlMuCisJKiBib290c3RyYXAgKENWU19vbmx5X2ZpbGUpOiBUZXN0IGZvciB0aGUgZXhpc3RlbmNlIG9mIFJFQURNRS1jdnMsCisJcmF0aGVyIHRoYW4gQ1ZTLgorCUluIG1lc3NhZ2VzIGFuZCBjb21tZW50cywgc2F5IGUuZy4sICJjaGVja2VkLW91dCBzb3VyY2VzIiwKKwlyYXRoZXIgdGhhbiAiQ1ZTIHNvdXJjZXMiLgorCSh2ZXJzaW9uX2NvbnRyb2xsZWRfZmlsZSk6IE5ldyBmdW5jdGlvbi4gIFdvcmsgZm9yIGdpdCBhcyB3ZWxsIGFzCisJZm9yIENWUy4gIERvbid0IHVzZSBncmVwJ3MgLXEgb3B0aW9uLgorCShzbHVycCk6IENhbGwgaXQgaGVyZSwgaW4gcGxhY2Ugb2YgQ1ZTLXNwZWNpZmljIGNvZGUuCisKKzIwMDYtMTAtMTQgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJRml4IHRlc3RzdWl0ZSBmb3IgLi9jb25maWd1cmUgLS1lbmFibGUtZ2NjLXdhcm5pbmdzOgorCSogY29uZmlndXJlLmFjIChnY2Mtd2FybmluZ3MpOiBNb3ZlIC1XYWxsIGJlZm9yZSAtV25vLXNpZ24tY29tcGFyZS4KKwlPdGhlcndpc2UsIGdjYyA0LjEuMCAoYXQgbGVhc3QpIHdhcm5zIGFib3V0IHNpZ24gY29tcGFyaXNvbnMgaW4KKwlfX0FUX0NIRUNLX1BSSU5URVJfQU5EX0RFU1RSVUNUT1IgaW4gdGVzdHMvYWN0aW9ucy5hdC4KKwkqIHRlc3QvaW5wdXQuYXQgKFRvcnR1cmluZyB0aGUgU2Nhbm5lcik6ICNpbmNsdWRlIDxzdGRsaWIuaD4gZm9yIGFib3J0LgorCSogdGVzdC9yZWdyZXNzaW9uLmF0IChEaWFnbm9zdGljIHRoYXQgZXhwZWN0cyB0d28gYWx0ZXJuYXRpdmVzKToKKwlMaWtld2lzZS4KKworMjAwNi0xMC0xMiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIGJvb3RzdHJhcC5jb25mIChnbnVsaWJfbW9kdWxlcyk6IEFkZCBjb25maWctaC4KKwkqIGRqZ3BwL3N1YnBpcGUuYzogSW5jbHVkZSA8Y29uZmlnLmg+IHVuY29uZGl0aW9uYWxseTsgZG9uJ3QKKwl3b3JyeSBhYm91dCBIQVZFX0NPTkZJR19ILgorCSogbGliL2FiaXRzZXQuYzogTGlrZXdpc2UuCisJKiBsaWIvYml0c2V0LmM6IExpa2V3aXNlLgorCSogbGliL2JpdHNldF9zdGF0cy5jOiBMaWtld2lzZS4KKwkqIGxpYi9iaXRzZXR2LXByaW50LmM6IExpa2V3aXNlLgorCSogbGliL2JpdHNldHYuYzogTGlrZXdpc2UuCisJKiBsaWIvZWJpdHNldC5jOiBMaWtld2lzZS4KKwkqIGxpYi9nZXQtZXJybm8uYzogTGlrZXdpc2UuCisJKiBsaWIvbGJpdHNldC5jOiBMaWtld2lzZS4KKwkqIGxpYi9zdWJwaXBlLmM6IExpa2V3aXNlLgorCSogbGliL3RpbWV2YXIuYzogTGlrZXdpc2UuCisJKiBsaWIvdmJpdHNldC5jOiBMaWtld2lzZS4KKwkqIGxpYi9iaXRzZXQuYzogSW5jbHVkZSAiYml0c2V0LmgiIGZpcnN0LCB0byB0ZXN0IGludGVyZmFjZS4KKwkqIGxpYi9iaXRzZXRfc3RhdHMuYzogSW5jbHVkZSAiYml0c2V0X3N0YXRzLmgiIGZpcnN0LgorCSogbGliL2JpdHNldHYtcHJpbnQuYzogSW5jbHVkZSAiYml0c2V0di1wcmludC5oIiBmaXJzdC4KKwkqIGxpYi9iaXRzZXR2LmM6IEluY2x1ZGUgImJpdHNldHYuaCIgZmlyc3QuCisJKiBsaWIvZ2V0LWVycm5vLmM6IEluY2x1ZGUgImdldC1lcnJuby5oIiBmaXJzdC4KKwkqIG00Ly5jdnNpZ25vcmU6IEFkZCBjb25maWctaC5tNC4KKwkqIHRlc3RzL2FjdGlvbnMuYXQgKERlZmF1bHQgJXByaW50ZXIgYW5kICVkZXN0cnVjdG9yIGZvciAuLi4pOgorCUFkanVzdCBleHBlY3RlZCBsaW5lIG51bWJlcnMgaW4gb3V0cHV0IHRvIHJlZmxlY3QgcmVtb3ZhbCBvZiAjaWYKKwlIQVZFX0NPTkZJR19IIGxpbmVzLgorCSogdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQgKE1pc3NlZCAlbWVyZ2UgdHlwZSB3YXJuaW5ncyB3aGVuIC4uLik6CisJTGlrZXdpc2UuCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChCcmFjZWQgY29kZSBpbiBkZWNsYXJhdGlvbiBpbiBydWxlcyBzZWN0aW9uKToKKwlMaWtld2lzZS4KKwkqIHRlc3RzL2F0bG9jYWwuaW4gKENQUEZMQUdTKTogRG9uJ3QgZGVmaW5lIEhBVkVfQ09ORklHX0guCisJKiB0ZXN0cy9sb2NhbC5hdCAoQVRfREFUQV9HUkFNTUFSX1BST0xPR1VFKToKKwlJbmNsdWRlIDxjb25maWcuaD4gdW5jb25kaXRpb25hbGx5LgorCisJKiBib290c3RyYXA6IFN5bmMgZnJvbSBjb3JldXRpbHMsIGFzIGZvbGxvd3M6CisKKwkyMDA2LTEwLTExICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogYm9vdHN0cmFwIChzeW1saW5rX3RvX2dudWxpYik6IEZpeCBidWc6IHRoZSBkb3RfZG90cyBzaGVsbAorCXZhcmlhYmxlIHdhcyBzb21ldGltZXMgdXNlZCB3aXRob3V0IGJlaW5nIGluaXRpYWxpemVkLiAgVGhpcworCW1lc3NlZCB1cCB0aGUgaW5zdGFsbGF0aW9uIG9mIHRoZSBJTlNUQUxMIGZpbGUgaW4gc29tZSBjYXNlcy4KKworCTIwMDYtMTAtMDkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBib290c3RyYXAgKHVzYWdlLCBtYWluIHByb2dyYW0sIHN5bWxpbmtfdG9fZ251bGliKTogQWRkIG9wdGlvbgorCS0tY29weS4gIEluc3BpcmVkIGJ5IGEgc3VnZ2VzdGlvbiBmcm9tIEJydW5vIEhhaWJsZS4KKworCTIwMDYtMTAtMDMgIEppbSBNZXllcmluZyAgPGppbUBtZXllcmluZy5uZXQ+CisKKwkqIGJvb3RzdHJhcDogVW5kbyBsYXN0IGNoYW5nZSB0byB0aGlzIGZpbGUsIHNpbmNlIG5vdyBnbnVsaWItdG9vbAorCXN0aWNrcyB3aXRoIHRoZSBhdXRvbWFrZSBkZWZhdWx0IGluIGdlbmVyYXRpbmcgZGVwZW5kZW5jaWVzLgorCisyMDA2LTEwLTEyICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogY29uZmlndXJlLmFjOiBVc2UgQUNfUFJPR19DQ19TVERDOyB0aGlzIGlzIG1vcmUgbW9kZXJuIHRoYW4KKwl0aGUgb2xkIEFDX1BST0dfQ0MgLyBBTV9QUk9HX0NDX1NUREMgY29tYmluYXRpb24uCisKKwkqIGRvYy9iaXNvbi4xOiBBZGQgY29weXJpZ2h0IG5vdGljZS4KKworCSogZGF0YS9nbHIuYzogRG9uJ3QgaW5jbHVkZSA8c3RkYXJnLmg+OyBub3QgdXNlZC4KKworCSogTkVXUzogVGhlIC1nIGFuZCAtLWdyYXBoIG9wdGlvbnMgbm93IG91dHB1dCBncmFwaHMgaW4gR3JhcGh2aXoKKwlET1QgZm9ybWF0LCBub3QgVkNHIGZvcm1hdC4KKwkqIGRvYy9iaXNvbi4xOiBMaWtld2lzZS4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChVbmRlcnN0YW5kaW5nLCBCaXNvbiBPcHRpb25zKTogTGlrZXdpc2UuCisJKiBUSEFOS1M6IEFkZCBTYXR5YSBLaXJhbiBQb3B1cmksIHdobyBwcm9wb3NlZCB0aGUgaW5pdGlhbCB2ZXJzaW9uCisJb2YgdGhpcyBjaGFuZ2UgaW4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwNi0wOS9tc2cwMDE1OC5odG1sPi4KKwkqIFRPRE86IFJlbW92ZSBHcmFwaHZpeiBlbnRyeS4KKwkqIHNyYy9NYWtlZmlsZS5hbSAoYmlzb25fU09VUkNFUyk6IEFkZCBncmFwaHZpei5jIGFuZCBncmFwaHZpei5oOworCXJlbW92ZSB2Y2cuYywgdmNnLmgsIHZjZ19kZWZhdWx0cy5oLgorCSogc3JjL3ZjZy5jLCBzcmMvdmNnLmgsIHNyYy92Y2dfZGVmYXVsdHMuaDogUmVtb3ZlLgorCSogc3JjL2dyYXBodml6LmMsIHNyYy9ncmFwaHZpei5oOiBOZXcgZmlsZXMuCisJKiBzcmMvZmlsZXMuYyAoY29tcHV0ZV9vdXRwdXRfZmlsZV9uYW1lcyk6IE91dHB1dCAuZG90LCBub3QgLnZjZy4KKwkqIHNyYy9maWxlcy5oOiBNYWtlIGNvbW1lbnQgbW9yZSBnZW5lcmljLgorCSogc3JjL21haW4uYyAobWFpbik6IExpa2V3aXNlLgorCSogc3JjL3ByaW50X2dyYXBoLmg6IExpa2V3aXNlLgorCSogc3JjL2dldGFyZ3MuYyAodXNhZ2UpOiBNYWtlIHVzYWdlIGRlc2NyaXB0aW9uIG1vcmUgZ2VuZXJpYy4KKwkqIHNyYy9wcmludF9ncmFwaC5jOiBJbmNsdWRlIGdyYXBodml6LmggcmF0aGVyIHRoYW4gdmNnLmguCisJKHN0YXRpY19ncmFwaCwgZmdyYXBoKTogUmVtb3ZlLiAgQWxsIHVzZXMgY2hhbmdlZCB0byBwYXNzCisJYXJndW1lbnRzIGluc3RlYWQgb2Ygc2hhcmluZyBhIHN0YXRpYyB2YXIuCisJKHByaW50X2NvcmUsIHByaW50X2FjdGlvbnMsIHByaW50X3N0YXRlLCBwcmludF9ncmFwaCk6CisJT3V0cHV0IGdyYXBodml6IGZvcm1hdCByYXRoZXIgdGhhbiBWQ0cgZm9ybWF0LgorCSogdGVzdHMvLmN2c2lnbm9yZTogUmVtb3ZlICoudmNnOyBhZGQgKi5kb3QuCisJKiB0ZXN0cy9vdXRwdXQuYXQ6IEV4cGVjdCAqLmRvdCBmaWxlcywgbm90ICoudmNnIGZpbGVzLgorCisJKiBkYXRhL01ha2VmaWxlLmFtIChkaXN0X3BrZ2RhdGFfREFUQSk6IEFkZCBiaXNvbi5tNDsgdGhpcworCWFjY29tbW9kYXRlcyB0aGUgMjAwNi0xMC0wOCBjaGFuZ2UuCisKKzIwMDYtMTAtMTEgIEJvYiBSb3NzaSAgPGJvYkBicmFza28ubmV0PgorCisJKiBkYXRhL3B1c2guYyAoeXlwdXNocGFyc2UsIHl5cHZhcnNpbml0LCB5eXB2YXJzKTogV3JhcCBpbiBiNF9wdXNoX2lmLgorCShiNF95eXNzYSwgYjRfeXllcnJvcl9yYW5nZSk6IE5ldyBtYWNyb3MuCisJKHN0cnVjdCB5eXB2YXJzKTogUmVtb3ZlIHl5c3NhX3B0ciBhbmQgeXllcnJvcl9yYW5nZV9wdHIgZmllbGRzLgorCSh5eXB2YXJzaW5pdCk6IFJlbW92ZSBpbml0IG9mIHJlbW92ZWQgZmllbGRzLgorCSh5eXB1c2hwYXJzZSk6IFJlbW92ZSB1c2Ugb2YgcmVtb3ZlZCBmaWVsZHM7IHVzZSBuZXcgbWFjcm9zIGluc3RlYWQuCisKKzIwMDYtMTAtMTEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBkYXRhL3B1c2guYyAoeXlwdXNocGFyc2UpOiBGaXggbWVtb3J5IGxlYWsgaWYgeXltc2cgaXMgbWFsbG9jZWQKKwlpbiBhIHB1c2ggcGFyc2VyLiAgUmVpbmRlbnQgc2xpZ2h0bHkgdG8gbWF0Y2ggeWFjYy5jIGJldHRlci4KKworMjAwNi0xMC0xMSAgQm9iIFJvc3NpICA8Ym9iQGJyYXNrby5uZXQ+CisKKwkqIGRhdGEvcHVzaC5jIChzdHJ1Y3QgeXlwdmFycyk6IFJlbW92ZSB5eW1zZ2J1ZiwgeXltc2didWZfcHRyLCB5eW1zZywKKwl5eW1zZ19hbGxvYyBmaWVsZHMuCisJKHl5cHZhcnNpbml0LCB5eXB1c2hwYXJzZSk6IFJlbW92ZSBpbml0IG9mIHJlbW92ZWQgZmllbGRzLgorCSh5eXB1c2hwYXJzZSk6IFVzZSB5eW1zZ2J1ZiBpbnN0ZWFkIG9mIHl5bXNnYnVmX3B0ci4KKworMjAwNi0xMC0wOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIFRIQU5LUzogQWRkIFBhb2xvIEJvbnppbmkgYW5kIEJvYiBSb3NzaS4KKworMjAwNi0xMC0wOCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KKworCSogZGF0YS9jLm00IChiNF9jb3B5cmlnaHQsIGI0X2VwaWxvZ3VlLCBiNF9sb2NhdGlvbl9pbml0aWFsX2NvbHVtbiwKKwliNF9sb2NhdGlvbl9pbml0aWFsX2xpbmUsIHA0X3BhcnNlX3BhcmFtLCBiNF9pbnRzX2luLCBiNF9mbGFnX2lmLAorCWI0X2RlZmluZV9mbGFnX2lmIGFuZCB1c2VzLCBiNF9iYXNlbmFtZSwgYjRfc3luY2xpbmUsIGI0X3VzZXJfY29kZSwKKwliNF9kZWZpbmVfdXNlcl9jZGUgYW5kIHVzZXMpOiBSZW1vdmUuCisJKGI0X2NvbW1lbnQsIGI0X3ByZWZpeCwgYjRfc3luY19zdGFydCk6IE5ldy4KKwkqIGRhdGEvYmlzb24ubTQ6IE5ldyBmaWxlLCB3aXRoIG1vc3Qgb2YgdGhlIGNvbnRlbnQgcmVtb3ZlZCBmcm9tIGMubTQuCisJKiBzcmMvbXVzY2xlX3RhYi5oOiBVc2UgImRvIHsuLi59IHdoaWxlKDApIiB0aHJvdWdob3V0LgorCSogc3JjL291dHB1dC5jIChvdXRwdXRfc2tlbGV0b24pOiBQYXNzIGJpc29uLm00LgorCShwcmVwYXJlKTogUGFzcyBnbHJfZmxhZyBhbmQgbm9uZGV0ZXJtaW5pc3RpY19mbGFnLiAgUGFzcyBwcmVmaXgKKwlvbmx5IGlmIHNwZWNpZmllZC4KKworMjAwNi0xMC0wNSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwlGaXggdGVzdCBmYWlsdXJlIHJlcG9ydGVkIGJ5IFRvbSBMYW5lIGluCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwNi0xMC9tc2cwMDAwMC5odG1sPgorCWFuZCB0cnkgdG8gbWFrZSBzdWNoIGZhaWx1cmVzIGVhc2llciB0byBjYXRjaCBpbiB0aGUgZnV0dXJlLgorCSogZGF0YS9nbHIuYyAoWVlUUkFOU0xBVEUpOiBEb24ndCBjaGVjayBmb3Igbm9ucG9zaXRpdmUgYXJnOworCXRoYXQncyBub3cgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5LgorCSh5eXByb2Nlc3NPbmVTdGFjaywgeXlyZWNvdmVyU3ludGF4RXJyb3IsIHl5cGFyc2UpOgorCVNldCB5eWNoYXIgPSBZWUVPRiBpZiBpdCdzIG5lZ2F0aXZlLgorCSogdGVzdHMvYWN0aW9ucy5hdCAoeXlsZXgpOiBBYm9ydCBpZiBhc2tlZCB0byByZWFkIHBhc3QgRU9GLgorCSogdGVzdHMvY29uZmxpY3RzLmF0ICh5eWxleCk6IExpa2V3aXNlLgorCSogdGVzdHMvY3h4LXR5cGUuYXQgKHl5bGV4KTogTGlrZXdpc2UuCisJKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdCAoeXlsZXgpOiBMaWtld2lzZS4KKwkqIHRlc3RzL2lucHV0LmF0ICh5eWxleCk6IExpa2V3aXNlLgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoeXlsZXgpOiBMaWtld2lzZS4KKwkqIHRlc3RzL3RvcnR1cmUuYXQgKHl5bGV4KTogTGlrZXdpc2UuCisKKzIwMDYtMTAtMDEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJRml4IHByb2JsZW1zIHdpdGggdHJhbnNsYXRpbmcgRW5nbGlzaC1sYW5ndWFnZSBkaWFnbm9zdGljcy4KKwkqIGJvb3RzdHJhcDogRml4IGJ1ZyBpbnRyb2R1Y2VkIGluIHJlY2VudCBib290c3RyYXAgY2hhbmdlcywgd2l0aAorCXJlc3BlY3QgdG8gYmlzb24tcnVudGltZSBwb3QgZ2VuZXJhdGlvbi4gIFRoZSBZWV8gc3R1ZmYKKwl3YXNuJ3QgYmVpbmcgY2FwdHVyZWQuCisJKiBib290c3RyYXAuY29uZiAoWEdFVFRFWFRfT1BUSU9OU19SVU5USU1FKTogTmV3IHZhci4KKwkqIHBvL1BPVEZJTEVTLmluOiBBZGQgc3JjL2xvY2F0aW9uLmMsIHNyYy9zY2FuLWNvZGUubC4KKwkqIHJ1bnRpbWUtcG8vUE9URklMRVMuaW46IEFkZCBkYXRhL3B1c2guYy4KKworMjAwNi0wOS0yOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwlNZXJnZSBib290c3RyYXAgY2hhbmdlcyBmcm9tIGNvcmV1dGlscy4KKworCTIwMDYtMDktMjggIEppbSBNZXllcmluZyAgPGppbUBtZXllcmluZy5uZXQ+CisKKwlBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBkZXBlbmRlbmNpZXMgYXJlIGltcG9ydGFudCBldmVuCisJd2hlbiBhbGwgb2YgdGhlIHNvdXJjZXMgaW4gYSBkaXJlY3RvcnkgY29tZSBmcm9tIGdudWxpYi4KKwkqIGJvb3RzdHJhcCAoZ251bGliX3Rvb2wpOiBSZW1vdmUgdGhlICJuby1kZXBlbmRlbmNpZXMiIGF1dG9tYWtlCisJb3B0aW9uIHRoYXQgZ251bGliLXRvb2wgYWRkcyB0byB3aGF0IGJlY29tZXMgb3VyIGxpYi9nbnVsaWIubWsuCisKKwkyMDA2LTA5LTIzICBKaW0gTWV5ZXJpbmcgIDxqaW1AbWV5ZXJpbmcubmV0PgorCisJKiBib290c3RyYXAgKGdudWxpYl90b29sX29wdGlvbnMpOiBBZGQgIi0tbG9jYWwtZGlyIGdsIi4KKworCTIwMDYtMDktMjAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBib290c3RyYXA6IEFkZCBzdXBwb3J0IGZvciAtLWZvcmNlLgorCSh1c2FnZSk6IE5ldyBmdW5jdGlvbi4gIERlc2NyaWJlIHVzYWdlIGxlc3MgdGVyc2VseS4KKwkoQ1ZTX29ubHlfZmlsZSk6IE5ldyB2YXIuCisKKzIwMDYtMDktMjEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBkYXRhL3B1c2guYyAoWVlQVVNIX01PUkUpOiBNYWtlIGl0IGFuIGVudW0gaW5zdGVhZC4KKwkoeXlwdXNocGFyc2UpOiBVc2UgWVlQVVNIX01PUkUgaW5zdGVhZCBvZiB0aGUgbXlzdGVyeSBjb25zdGFudC4KKwlBZGp1c3Qgd2hpdGUgc3BhY2UgYW5kIGNvbW1lbnRzIHRvIG1hdGNoIEdOVSBzdHlsZSBiZXR0ZXIuCisKKzIwMDYtMDktMjAgIEJvYiBSb3NzaSAgPGJvYkBicmFza28ubmV0PgorCisJKiBkYXRhL3B1c2guYyAoeXlyZXN1bHRfZ2V0KTogUmVtb3ZlIGZ1bmN0aW9uLgorCShZWVBVU0hfTU9SRSk6IEFkZCAjZGVmaW5lLgorCSh5eXB1c2hwYXJzZSk6IE1vZGlmeSByZXR1cm4gdmFsdWUuCisKKzIwMDYtMDktMjAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBzdGFtcC1oLmluOiBSZW1vdmU7IG5vIGxvbmdlciBuZWVkZWQuCisJKiAuY3ZzaWdub3JlOiBSZXBsYWNlIGF1dG9tNHRlLmNhY2hlIGFuZCBjb25maWcuY2FjaGUgd2l0aCAqLmNhY2hlLgorCVJlbW92ZSBjb25maWcuaCwgY29uZmlnLmhpbiwgaW50bCAobm8gbG9uZ2VyIGNyZWF0ZWQpLgorCSogbGliLy5jdnNpZ25vcmU6IEFkZCBjb25maWcuaCwgY29uZmlnLmhpbiwgY29uZmlnbWFrZS5oLCBpbnR0eXBlcy5oLAorCXN0YW1wLWgxLgorCisJU3luYyBib290c3RyYXAgZnJvbSBjb3JldXRpbHMsIGFzIGZvbGxvd3M6CisKKwkyMDA2LTA5LTE4ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogYm9vdHN0cmFwIChzeW1saW5rX3RvX2dudWxpYik6IE5ldyBmdW5jdGlvbi4KKwkoY3BfbWFya19hc19nZW5lcmF0ZWQpOiBVc2UgaXQsIHRvIHByZWZlciBzeW1saW5rcy10by1nbnVsaWIKKwl0byBjb3BpZXMtb2YtZ251bGliLgorCShjcF9tYXJrX2FzX2dlbmVyYXRlZCwgc2x1cnAsIGdudWxpYl9maWxlcyk6CisJQXZvaWQgbWFraW5nIGEgY29weSBpZiBpdCdzIHRoZSBzYW1lIGFzIHRoZSBvbGQgdmVyc2lvbi4KKwkoZ251bGliX2ZpbGVzKTogQWRkIHN1cHBvcnQgZm9yIHRoaXMgdmFyaWFibGUgKHVzZWQgYnkgQmlzb24pLgorCisyMDA2LTA5LTIwICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogc3JjL2dldGFyZ3MuYyAodXNhZ2UpOiBSZXdvcmsgdG8gdXNlIGNvbnZlbnRpb25zIHNpbWlsYXIgdG8KKwljb3JldXRpbHMsIHRvIG1ha2UgdHJhbnNsYXRpb24gYSBiaXQgZWFzaWVyIGFuZCB0aGUgY29kZSBhIGJpdAorCXNtYWxsZXIuICBQcm9ibGVtIHJlcG9ydGVkIGJ5IFRpbSBWYW4gSG9sZGVyLgorCisyMDA2LTA5LTE1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCVVzZSBzb21lIG9mIGdudWxpYidzIG5ldyBtb2R1bGVzLCB0YWtlbiBmcm9tIGNvcmV1dGlscy4KKworCSogYm9vdHN0cmFwOiBTeW5jIGZyb20gY29yZXV0aWxzLCBleGNlcHQgYWRkIHN1cHBvcnQgZm9yIGdudWxpYl9maWxlcy4KKwkqIGJvb3RzdHJhcC5jb25mOiBOZXcgZmlsZS4KKwkoZ251bGliX21vZHVsZXMpOiBBZGQgY29uZmlnbWFrZSwgaW50dHlwZXMsIHVuaXN0ZC4KKwkoWEdFVFRFWFRfT1BUSU9OUyk6IEFkZCBjb21wbGFpbiwgY29tcGxhaW5fYXQsCisJZmF0YWwsIGZhdGFsX2F0LCB3YXJuLCB3YXJuX2F0LCB1bmV4cGVjdGVkX2VuZC4KKwkqIGNvbmZpZ3VyZS5hYyAoQUNfQ09ORklHX0hFQURFUlMpOiBjb25maWcuaCBpcyBub3cgaW4gbGliLCBub3QgaGVyZS4KKwkoZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TKTogUmVtb3ZlOyBnbF9FQVJMWSBub3cgZG9lcyB0aGlzLgorCShnbF9FQVJMWSk6IEFkZC4KKwkoQU1fU1REQk9PTF9IKTogUmVtb3ZlOyBnbF9JTklUIG5vdyBkb3dzIHRoaXMuCisJKGdsX0lOSVQpOiBBZGQKKwkoR05VTElCX0FVVE9DT05GX1NOSVBQRVQpOiBSZW1vdmUuCisJKEFNX0dOVV9HRVRURVhUKTogQWRkOyByZXF1aXJlIGZvcm1hdHN0cmluZyBtYWNyb3Mgc2luY2UgdGhhdCdzCisJdGhlIHBpY2tpZXN0LgorCSogbGliLy5jdnNpZ25vcmU6IEFkZCBpbnR0eXBlc18uaC4KKwkqIGxpYi9NYWtlZmlsZS5hbTogSW5jbHVkZSBnbnVsaWIubWsgZmlyc3Qgc28gd2UgY2FuIGFwcGVuZCB0byBpdC4KKwkoQU1fQ0ZMQUdTKTogQWRkIFdFUlJPUl9DRkxBR1MsIHRvIGJlIG1vcmUgbGlrZSBjb3JldXRpbHMuCisJKEJVSUxUX1NPVVJDRVMsIEVYVFJBX0RJU1QsIE1PU1RMWUNMRUFORklMRVMpOiBSZW1vdmUKKwluby1sb25nZXItbmVjZXNzYXJ5IGluaXRpYWxpemF0aW9ucy4KKwkobGliX1NPVVJDRVMpOiBSZW1vdmUsIHJlcGxhY2luZyBieSBsaWJiaXNvbl9hX1NPVVJDRVMuCisJKiBsaWIvc3VicGlwZS5jOiBJbmNsdWRlIDx1bmlzdGQuaD4gdW5jb25kaXRpb25hbGx5LCBub3cgdGhhdCB3ZQorCXVzZSB0aGUgdW5pc3RkIG1vZHVsZS4KKwkqIHNyYy9zeXN0ZW0uaDogTGlrZXdpc2UuCisJKiBtNC8uY3ZzaWdub3JlOiBSZW1vdmUgKl9nbC5tNCwgZ251bGliLm00LCBpbnR0eXBlc19oLm00LCB1aW50bWF4X3QubTQsCisJdWxvbmdsb25nLm00LiAgQWRkIGdldHRleHQubTQsIGdudWxpYi1jYWNoZS5tNCwgZ251bGliLWNvbXAubTQsCisJZ251bGliLXRvb2wubTQsIGludHR5cGVzLWgubTQsIGludHR5cGVzLXByaS5tNCwgaW50dHlwZXMubTQuCisJKiBzcmMvTWFrZWZpbGUuYW0gKERFRlMpOiBSZW1vdmUsIHNpbmNlIGNvbmZpZ21ha2UgZG9lcyB0aGlzIGZvciB1cy4KKwkoQU1fQ1BQRkxBR1MpOiBSZW1vdmUgLUkuLi9saWIsIHNpbmNlIEF1dG9tYWtlIGRvZXMgdGhhdCBmb3IgdXMuCisJKiBzcmMvc3lzdGVtLmg6IEluY2x1ZGUgaW50dHlwZXMuaCB1bmNvbmRpdGlvbmFsbHksIG5vdyB0aGF0IHdlCisJdXNlIHRoZSBpbnR0eXBlcyBtb2R1bGUuICBEb24ndCBib3RoZXIgdG8gaW5jbHVkZSBzdGRpbnQuaCwgc2luY2UKKwlpbnR0eXBlcy5oIG5vdyBkb2VzIHRoYXQgZm9yIHVzLgorCShMT0NBTEVESVIpOiBSZW1vdmUsIG5vdyB0aGF0IHdlIHVzZSB0aGUgY29uZmlnbWFrZSBtb2R1bGUuCisJKiBzcmMvZ2V0YXJncy5jOiBJbmNsdWRlIGNvbmZpZ21ha2UuaC4KKwkqIHNyYy9tYWluLmM6IExpa2V3aXNlLgorCSogc3JjL291dHB1dC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzL2F0bG9jYWwuaW4gKENQUEZMQUdTKTogSW5jbHVkZSBmcm9tICRhYnNfdG9wX2J1aWxkZGlyL2xpYiwKKwlub3QgZnJvbSAkYWJzX3RvcF9idWlsZGRpciwgc2luY2UgY29uZmlnLmggbW92ZWQuCisKKworCVBvcnQgdG8gR0NDIDIuOTUuICBGaXJzdCB0d28gcHJvYmxlbXMgcmVwb3J0ZWQgYnkgTWljaGFlbCBEZXV0c2NobWFubiBpbgorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDYtMDkvbXNnMDAwMTguaHRtbD4uCisKKwkqIHNyYy9wYXJzZS1ncmFtLnkgKHN5bWJvbF9kZWNsYXJhdGlvbik6IERvbid0IHB1dCBzdGF0ZW1lbnRzCisJYmVmb3JlIGRlY2xhcmF0aW9uczsgaXQncyBub3QgcG9ydGFibGUgdG8gQzg5LgorCSogc3JjL3NjYW4tY29kZS5sIChoYW5kbGVfYWN0aW9uX2F0KTogTGlrZXdpc2UuCisKKwkqIHNyYy9zY2FuLWNvZGUubDogQWx3YXlzIGluaXRpYWxpemUgYnJhY2VzX2xldmVsOyB0aGUgb2xkIGNvZGUKKwlsZWZ0IGl0IHVuaW5pdGlhbGl6ZWQgYW5kIHRoZXJlZm9yZSBoYWQgdW5kZWZpbmVkIGJlaGF2aW9yLgorCisJRG9uJ3QgYXR0ZW1wdCB0byByZWRlZmluZSAnYXNzZXJ0Jywgc2luY2UgaXQgcnVucyBhZm91bCBvZgorCXN5c3RlbXMgd2hlcmUgc3RhbmRhcmQgaGVhZGVycyAobWlzdGFrZW5seSkgaW5jbHVkZSA8YXNzZXJ0Lmg+LgorCUluc3RlYWQsIGRlZmluZSBhbmQgdXNlIG91ciBvd24gYWx0ZXJuYXRpdmUsIGNhbGxlZCAnYXZlcicuCisJKiBzcmMvcmVhZGVyLmM6IERvbid0IGluY2x1ZGUgYXNzZXJ0LmgsIHNpbmNlIHdlIG5vIGxvbmdlcgorCXVzZSBhc3NlcnQuCisJKiBzcmMvc2Nhbi1jb2RlLmw6IExpa2V3aXNlLgorCSogc3JjL3N5c3RlbS5oIChhc3NlcnQpOiBSZW1vdmUsIHJlcGxhY2luZyB3aXRoLi4uLgorCShhdmVyKTogTmV3IGZ1bmN0aW9uLCB0YWtpbmcgYSBib29sIGFyZy4gIEFsbCB1c2VzIGNoYW5nZWQuCisJKiBzcmMvdGFibGVzLmMgKHBhY2tfdmVjdG9yKTogRW5zdXJlIHRoYXQgYXZlciBhcmcgaXMgYm9vbCwKKwlub3QgbWVyZWx5IGFuIGludGVnZXIuCisKKzIwMDYtMDktMTUgIEJvYiBSb3NzaSAgPGJvYkBicmFza28ubmV0PgorCisJQWRkIHN1cHBvcnQgZm9yIHB1c2ggcGFyc2luZy4gIEJhc2VkIG9uIHRoZSBvcmlnaW5hbCB3b3JrIG9mCisJT2RkIEFyaWxkIE9sc2VuIDxvYW9AZmlidWxhLm5vPi4KKwkqIGRhdGEvTWFrZWZpbGUuYW0gKGRpc3RfcGtnZGF0YV9EQVRBKTogQWRkIHB1c2guYy4KKwkqIGRhdGEvYy5tNCAoWVlQVVNIKTogTmV3LgorCShiNF9wdXNoX2lmKTogTmV3IG1hY3JvLiAgVXNlIGl0IGluc3RlYWQgb2YgI2lmZGVmIFlZUFVTSC4KKwkqIGRhdGEvcHVzaC5jOiBOZXcgZmlsZS4KKwkqIHNyYy9nZXRhcmdzLmMgKHB1c2hfcGFyc2VyKTogTmV3IHZhci4KKwkqIHNyYy9nZXRhcmdzLmggKHB1c2hfcGFyc2VyKTogTmV3IGRlY2xhcmF0aW9uLgorCSogc3JjL291dHB1dC5jIChwcmVwYXJlKTogQWRkIG1hY3JvIGluc2VydGlvbiBvZiBgcHVzaF9mbGFnJy4KKwkqIHNyYy9wYXJzZS1ncmFtLnkgKFBFUkNFTlRfUFVTSF9QQVJTRVIpOiBOZXcgdG9rZW4uCisJKHByb2xvZ3VlX2RlY2xhcmF0aW9uKTogUGFyc2UgJXB1c2gtcGFyc2VyLgorCSogc3JjL3NjYW4tZ3JhbS5sOiBTY2FuIG5ldyBQRVJDRU5UX1BVU0hfUEFSU0VSIHRva2VuLgorCSogdGVzdHMvY2FsYy5hdCAoX0FUX0NIRUNLX0NBTENfRVJST1IpOiBBZGQgIlJldHVybiIgYW5kICJOb3ciIHRvCisJbGlzdCBvZiByZW1vdmVkIGxpbmVzIGZyb20gdGhlIHRyYWNlcyBvYnNlcnZlZC4KKwkoQVRfQ0hFQ0tfQ0FMQ19MQUxSKTogQWRkZWQgcHVzaCBwYXJzZXIgdGVzdHMuCisKKzIwMDYtMDktMTMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBORVdTOiBWZXJzaW9uIDIuM2EuCisJKiBjb25maWd1cmUuYWMgKEFDX0lOSVQpOiBMaWtld2lzZS4KKworCSogdGVzdHMvYWN0aW9ucy5hdCAoX0FUX0NIRUNLX1BSSU5URVJfQU5EX0RFU1RSVUNUT1IpOiBSZW1vdmUKKwkiI2RlZmluZSBZWVNUWVBFIGludCIgdGhhdCBjYXVzZWQgIm1ha2UgbWFpbnRhaW5lci1jaGVjayIgdG8gZmFpbAorCWR1ZSB0byBoZWFkZXIgb3JkZXJpbmcgZGVwZW5kZW5jaWVzLiAgSSBkb24ndCBrbm93IHdoeSB0aGUgI2RlZmluZQorCXdhcyB0aGVyZS4KKworCUZpeCBnbHIuY2MgYW5kIGxhbHIxLmNjJ3MgdXNlIG9mIFlZREVCVUcgc28gdGhhdCB0aGVyZSdzIHplcm8KKwlydW50aW1lIGNvc3Qgd2hlbiBZWURFQlVHIGlzIG5vdCBkZWZpbmVkLCBhbmQgc28gdGhhdCBzb21lIHRlc3RzCisJdGhhdCB1c2VkIHRvIGZhaWwgbm93IHdvcmsuICBQcm9ibGVtIGFuZCBpbml0aWFsIHN1Z2dlc3Rpb24gYnkKKwlQYW9sbyBCb256aW5pLgorCSogZGF0YS9jKysubTQgKGI0X3BhcnNlX3BhcmFtX2NvbnMpOiBPbWl0IGxlYWRpbmcgJywnLgorCSogZGF0YS9nbHIuY2MgKGI0X3BhcnNlcl9jbGFzc19uYW1lKToKKwlJbml0aWFsaXplIHl5Y2RlYnVnXyBvbmx5IGlmIFlZREVCVUcuICBBbHNvLCBpbml0aWFsaXplIHl5ZGVidWdfLgorCShkZWJ1Z19sZXZlbCwgc2V0X2RlYnVnX2xldmVsKTogQWZmZWN0IHl5ZGVidWdfLCBub3QgOjp5eWRlYnVnLgorCSh5eWRlYnVnXykgW1lZREVCVUddOiBOZXcgbWVtYmVyLgorCSh5eWNkZWJ1Z18pOiBOb3cgZGVmaW5lZCBvbmx5IGlmIFlZREVCVUcuCisJKiBkYXRhL2xhbHIxLmNjICh5eWRlYnVnXywgeXljZGVidWdfKTogTm93IGRlZmluZWQgb25seSBpZiBZWURFQlVHLgorCShZWUNERUJVRykgWyFZWURFQlVHXTogRG9uJ3QgdXNlIHl5ZGVidWdfIGFuZCB5eWNkZWJ1Z18uCisJKGI0X3BhcnNlcl9jbGFzc19uYW1lKTogSW5pdGlhbGl6ZSB5eWRlYnVnXyBhbmQgeXljZGVidWdfIG9ubHkKKwlpZiBZWVlERUJVRy4KKwkoZGVidWdfc3RyZWFtLCBzZXRfZGVidWdfc3RyZWFtLCBkZWJ1Z19sZXZlbCwgc2V0X2RlYnVnX2xldmVsKToKKwlEZWZpbmUgb25seSBpZiBZWURFQlVHLgorCSogdGVzdHMvY2FsYy5hdCAoX0FUX0RBVEFfQ0FMQ19ZKSBbIVlZREVCVUddOiBPbWl0IGNhbGwgdG8KKwlzZXRfZGVidWdfbGV2ZWwuCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChfQVRfREFUQV9EQU5DRVJfWSkgWyFZWURFQlVHXTogTGlrZXdpc2UuCisJKiB0ZXN0cy9jYWxjLmF0IChBVF9DSEVDS19DQUxDX0dMUl9DQyk6IFVuY29tbWVudCBjYWxscyB0bworCUFUX0NIRUNLX0NBTENfR0xSX0NDIHRoYXQgYXJlIHdvcmtpbmcgbm93LgorCisyMDA2LTA5LTEyICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogZGF0YS9nbHIuY2MgKFlZRVJST1JfVkVSQk9TRSwgWVlUT0tFTl9UQUJMRSk6IFJlbW92ZS4KKwlXZSBkb24ndCBuZWVkIHRoZW0gaW4gZ2xyLmNjLCBhbmQgZ2xyLmMgZGVmaW5lcyB0aGVtLgorCURlZmluaW5nIFlZRVJST1JfVkVSQk9TRSB0byAwIGhlcmUgYnJlYWtzIGdsci5jLCBzaW5jZSBnbHIuYworCWFzc3VtZXMgdGhhdCBkZWZpbmluZyBpdCB0byBhbnl0aGluZyBpcyB0aGUgc2FtZSBhcyBkZWZpbmluZworCWl0IHRvIDEuICBQcm9ibGVtIHJlcG9ydGVkIGJ5IFBhb2xvIEJvbnppbmkuCisKKzIwMDYtMDktMTIgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+ICAodGlueSBjaGFuZ2UpCisKKwkqIGRhdGEvYy5tNCAoYjRfbnVsbCwgYjRfY2FzZSk6IERlZmluZS4KKwkqIHNyYy9vdXRwdXQuYyAocHJlcGFyZV9zeW1ib2xzKTogVXNlIGI0X251bGwuCisJKHVzZXJfYWN0aW9uc19vdXRwdXQpOiBVc2UgYjRfY2FzZS4KKworMjAwNi0wOS0xMSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIGRhdGEvZ2xyLmMgKGI0X3NoYXJlZF9kZWNsYXJhdGlvbnMpOiBQdXQgc3RhcnQtaGVhZGVyIGZpcnN0LAorCWJlZm9yZSBhbnkgI2luY2x1ZGVzIHRoYXQgd2UgZ2VuZXJhdGUsIHNvIHRoYXQgZmVhdHVyZS10ZXN0CisJbWFjcm9zIHdvcmsuICBQcm9ibGVtIHJlcG9ydGVkIGJ5IE1pY2hhZWwgRGV1dHNjaG1hbm4gaW4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDA2LTA5L21zZzAwMDA0Lmh0bWw+LgorCSogZGF0YS9sYWxyMS5jYzogTGlrZXdpc2UuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoUHJvbG9ndWUpOiBEb2N1bWVudCB0aGF0IGZlYXR1cmUtdGVzdCBtYWNyb3MKKwlzaG91bGQgYmUgZGVmaW5lZCBiZWZvcmUgYW55IEJpc29uIGRlY2xhcmF0aW9ucy4KKwkqIHRlc3RzL2FjdGlvbnMuYXQgKF9BVF9DSEVDS19QUklOVEVSX0FORF9ERVNUUlVDVE9SKTogUHV0IGRlZm5zCisJdGhhdCBkZXBlbmQgb24gbG9jYXRpb24uaGggYWZ0ZXIsIG5vdCBiZWZvcmUsIEJpc29uIGRlY2xzLCBzaW5jZQorCXdlIG5vdyBpbmNsdWRlIGxvY2F0aW9uLmhoIGFmdGVyIHRoZSBmaXJzdCB1c2VyIHByb2xvZ3VlLgorCisJKiBkb2MvYmlzb24udGV4aW5mbyAoQ2FsYysrIFBhcnNlcik6IEZpeCBtZW1vcnkgbGVhayByZXBvcnRlZCBieQorCVNhbmRlciBCcmFuZGVuYnVyZyBpbgorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDYtMDkvbXNnMDAwMDIuaHRtbD4uCisJQWxzbywgZml4IG1pbm9yIHdoaXRlIHNwYWNlIGFuZCBjb21tZW50IGlzc3Vlcy4KKwkoUHJvbG9ndWUpOiBNZW50aW9uIHRoYXQgaXQncyBiZXR0ZXIgdG8gZGVmaW5lIGZlYXR1cmUtdGVzdCBtYWNyb3MKKwliZWZvcmUgQmlzb24gZGVjbGFyYXRpb25zLiAgUHJvYmxlbSByZXBvcnRlZCBieSBNaWNoYWVsIERldXRzY2htYW5uLgorCisJKiBSRUFETUUtY3ZzOiBGaXggdHlwbzogIiYiIHNob3VsZCBiZSAiJiYiLiAgUHJvYmxlbSByZXBvcnRlZAorCWJ5IEppbSBNZXllcmluZy4KKwkqIG00Ly5jdnNpZ25vcmU6IEFkZCBhcmdtYXRjaC5tNC4gIFJlbW92ZSBvYnN0YWNrLm00LCBzdHJlcnJvcl9yLm00LgorCVRoaXMgYWRqdXN0cyB0byByZWNlbnQgZ251bGliIGNoYW5nZXMuCisKKzIwMDYtMDktMDQgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJRmluaXNoIGltcGxlbWVudGF0aW9uIG9mIHBlci10eXBlICVkZXN0cnVjdG9yLyVwcmludGVyLiAgRGlzY3Vzc2VkCisJc3RhcnRpbmcgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwNi0wMi9tc2cwMDA2NC5odG1sPgorCWFuZAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA2LTA2L21zZzAwMDkxLmh0bWw+LgorCSogTkVXUyAoMi4zKyk6IEFkZCBhIGRlc2NyaXB0aW9uIG9mIHRoaXMgZmVhdHVyZSB0byB0aGUgZGVmYXVsdAorCSVkZXN0cnVjdG9yLyVwcmludGVyIGRlc2NyaXB0aW9uLgorCSogZG9jL2Jpc29uLnRleGluZm8gKEZyZWVpbmcgRGlzY2FyZGVkIFN5bWJvbHMpOiBMaWtld2lzZS4KKwkqIHNyYy9zeW1saXN0LmMgKHN5bWJvbF9saXN0X2Rlc3RydWN0b3Jfc2V0LCBzeW1ib2xfbGlzdF9wcmludGVyX3NldCk6CisJSW52b2tlIHNlbWFudGljX3R5cGVfZGVzdHJ1Y3Rvcl9zZXQgb3Igc2VtYW50aWNfdHlwZV9wcmludGVyX3NldCB3aGVuIGEKKwlsaXN0IG5vZGUgY29udGFpbnMgYSBzZW1hbnRpYyB0eXBlLgorCSogc3JjL3N5bXRhYi5jLCBzcmMvc3ltdGFiLmg6IEV4dGVuZCB3aXRoIGEgdGFibGUgdGhhdCBhc3NvY2lhdGVzCisJc2VtYW50aWMgdHlwZXMgd2l0aCB0aGVpciAlZGVzdHJ1Y3RvcidzIGFuZCAlcHJpbnRlcidzLgorCShzZW1hbnRpY190eXBlX2Zyb21fdW5pcXN0ciwgc2VtYW50aWNfdHlwZV9nZXQsCisJc2VtYW50aWNfdHlwZV9kZXN0cnVjdG9yX3NldCwgc2VtYW50aWNfdHlwZV9wcmludGVyX3NldCk6IE5ldyBmdW5jdGlvbnMKKwljb21wb3NpbmcgdGhlIHB1YmxpYyBpbnRlcmZhY2Ugb2YgdGhhdCB0YWJsZS4KKwkoc3ltYm9sX2Rlc3RydWN0b3JfZ2V0LCBzeW1ib2xfZGVzdHJ1Y3Rvcl9sb2NhdGlvbl9nZXQsCisJc3ltYm9sX3ByaW50ZXJfZ2V0LCBzeW1ib2xfcHJpbnRlcl9sb2NhdGlvbl9nZXQpOiAgSWYgdGhlcmUncyBubworCXBlci1zeW1ib2wgJWRlc3RydWN0b3IvJXByaW50ZXIsIGxvb2sgdXAgdGhlIHBlci10eXBlIGJlZm9yZSB0cnlpbmcKKwl0aGUgZGVmYXVsdC4KKwkqIHRlc3RzL2FjdGlvbnMuYXQgKFBlci10eXBlICVwcmludGVyIGFuZCAlZGVzdHJ1Y3Rvcik6IE5ldyB0ZXN0IGNhc2UuCisJKiB0ZXN0cy9pbnB1dC5hdCAoRGVmYXVsdCAlcHJpbnRlciBhbmQgJWRlc3RydWN0b3IgcmVkZWNsYXJlZCk6CisJRXh0ZW5kIHRvIGNoZWNrIHRoYXQgbXVsdGlwbGUgb2NjdXJyZW5jZXMgb2YgJXN5bWJvbC1kZWZhdWx0IGluIGEKKwlzaW5nbGUgJWRlc3RydWN0b3IvJXByaW50ZXIgZGVjbGFyYXRpb24gaXMgYW4gZXJyb3IuCisJKFBlci10eXBlICVwcmludGVyIGFuZCAlZGVzdHJ1Y3RvciByZWRlY2xhcmVkLCBVbnVzZWQgdmFsdWVzIHdpdGgKKwlwZXItdHlwZSAlZGVzdHJ1Y3Rvcik6IE5ldyB0ZXN0IGNhc2VzLgorCisyMDA2LTA5LTA0ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCVJlcXVpcmUgZGVmYXVsdCAlZGVzdHJ1Y3Rvci8lcHJpbnRlciB0byBiZSBkZWNsYXJlZCB1c2luZworCSVzeW1ib2wtZGVmYXVsdCBpbnN0ZWFkIG9mIGFuIGVtcHR5IHN5bWJvbCBsaXN0LCBhbmQgc3RhcnQgd29ya2luZyBvbgorCW5ldyBwZXItdHlwZSAlZGVzdHJ1Y3Rvci8lcHJpbnRlci4gIERpc2N1c3NlZCBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA2LTA5L21zZzAwMDA3Lmh0bWw+LgorCSogTkVXUyAoMi4zKyk6IEFkZCAlc3ltYm9sLWRlZmF1bHQgdG8gZXhhbXBsZS4KKwkqIGJpc29uLnRleGluZm8gKEZyZWVpbmcgRGlzY2FyZGVkIFN5bWJvbHMpOiBMaWtld2lzZS4KKwkoVGFibGUgb2YgU3ltYm9scyk6IEFkZCBlbnRyeSBmb3IgJXN5bWJvbC1kZWZhdWx0LgorCSogc3JjL3BhcnNlLWdyYW0ueSAoUEVSQ0VOVF9TWU1CT0xfREVGQVVMVCk6IE5ldyB0b2tlbi4KKwkoZ2VuZXJpY19zeW1saXN0LCBnZW5lcmljX3N5bWxpc3RfaXRlbSk6IE5ldyBub250ZXJtaW5hbHMgZm9yIGNyZWF0aW5nCisJYSBsaXN0IGluIHdoaWNoIGVhY2ggaXRlbSBpcyBhIHN5bWJvbCwgc2VtYW50aWMgdHlwZSwgb3IKKwklc3ltYm9sLWRlZmF1bHQuCisJKGdyYW1tYXJfZGVjbGFyYXRpb24pOiBVc2UgZ2VuZXJpY19zeW1saXN0IGluICVkZXN0cnVjdG9yIGFuZCAlcHJpbnRlcgorCWRlY2xhcmF0aW9ucyBpbnN0ZWFkIG9mIHN5bWJvbHMuMSBvciBhbiBlbXB0eSBsaXN0LgorCShzeW1ib2xfZGVjbGFyYXRpb24sIHByZWNlZGVuY2VfZGVjbGFyYXRpb24sIHN5bWJvbHMuMSk6IFVwZGF0ZSBhY3Rpb25zCisJZm9yIGNoYW5nZXMgdG8gc3ltYm9sX2xpc3QuCisJKiBzcmMvcmVhZGVyLmM6IFVwZGF0ZSBmb3IgY2hhbmdlcyB0byBzeW1ib2xfbGlzdC4KKwkqIHNyYy9zY2FuLWNvZGUubDogTGlrZXdpc2UuCisJKiBzcmMvc2Nhbi1ncmFtLmw6IFNjYW4gbmV3IFBFUkNFTlRfU1lNQk9MX0RFRkFVTFQgdG9rZW4uCisJKiBzcmMvc3ltbGlzdC5jLCBzcmMvc3ltbGlzdC5oOiBFeHRlbmQgc3VjaCB0aGF0IGEgbGlzdCBub2RlIG1heQorCXJlcHJlc2VudCBhIHNlbWFudGljIHR5cGUgb3IgYSAlc3ltYm9sLWRlZmF1bHQgaW4gYWRkaXRpb24gdG8ganVzdCBhbgorCW9yZGluYXJ5IHN5bWJvbC4gIEFkZCBzd2l0Y2hlZCBmdW5jdGlvbnMgZm9yIHNldHRpbmcgJWRlc3RydWN0b3IncyBhbmQKKwklcHJpbnRlcidzLgorCSogdGVzdHMvYWN0aW9ucy5hdCwgdGVzdHMvaW5wdXQuYXQ6IEFkZCAlc3ltYm9sLWRlZmF1bHQgdG8gYWxsIGRlZmF1bHQKKwklZGVzdHJ1Y3Rvci8lcHJpbnRlciBkZWNsYXJhdGlvbnMuCisKKzIwMDYtMDgtMjMgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJV2hldGhlciB0aGUgZGVmYXVsdCAlZGVzdHJ1Y3Rvci8lcHJpbnRlciBhcHBsaWVzIHRvIGEgcGFydGljdWxhciBzeW1ib2wKKwlpc24ndCBhIHF1ZXN0aW9uIG9mIHdoZXRoZXIgdGhlIHVzZXIgKmRlY2xhcmVzKiB0aGF0IHN5bWJvbCAoaW4gJXRva2VuLAorCWZvciBleGFtcGxlKS4gIEl0J3MgYSBxdWVzdGlvbiBvZiB3aGV0aGVyIHRoZSB1c2VyIGJ5IGFueSBtZWFucworCSpkZWZpbmVzKiB0aGUgc3ltYm9sIGF0IGFsbCAoYnkgc2ltcGx5IHVzaW5nIGEgY2hhciB0b2tlbiwgZm9yCisJZXhhbXBsZSkuICAkZW5kIGlzIGRlZmluZWQgYnkgQmlzb24gd2hlcmVhcyBhbnkgb3RoZXIgdG9rZW4gd2l0aCB0b2tlbgorCW51bWJlciAwIGlzIGRlZmluZWQgYnkgdGhlIHVzZXIuICBUaGUgZXJyb3IgdG9rZW4gaXMgYWx3YXlzIGRlZmluZWQgYnkKKwlCaXNvbiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHVzZXIgZGVjbGFyZXMgaXQgd2l0aCAldG9rZW4sIGJ1dCB3ZQorCW1heSBvbmUgZGF5IGxldCB0aGUgdXNlciBkZWZpbmUgZXJyb3IgYXMgYSBub250ZXJtaW5hbCBpbnN0ZWFkLgorCSogTkVXUyAoMi4zKyk6IFNheSAidXNlci1kZWZpbmVkIiBpbnN0ZWFkIG9mICJ1c2VyLWRlY2xhcmVkIi4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChGcmVlaW5nIERpc2NhcmRlZCBTeW1ib2xzKTogTGlrZXdpc2UsIGFuZCBkb2N1bWVudAorCXRoZSBtZWFuaW5nIG9mICJ1c2VyLWRlZmluZWQiLgorCSogdGVzdHMvYWN0aW9ucy5hdCAoRGVmYXVsdCAlcHJpbnRlciBhbmQgJWRlc3RydWN0b3IgZm9yIHVzZXItZGVjbGFyZWQKKwllbmQgdG9rZW4pOiBSZW5hbWUgdG8uLi4KKwkoRGVmYXVsdCAlcHJpbnRlciBhbmQgJWRlc3RydWN0b3IgZm9yIHVzZXItZGVmaW5lZCBlbmQgdG9rZW4pOiAuLi4KKwl0aGlzLgorCisJKiBzcmMvc3ltdGFiLmMgKHN5bWJvbF9kZXN0cnVjdG9yX2dldCwgc3ltYm9sX3ByaW50ZXJfZ2V0KTogSW4gdGhlCisJY29tcHV0YXRpb24gb2Ygd2hldGhlciB0byBhcHBseSB0aGUgZGVmYXVsdCwgZG9uJ3QgbWFpbnRhaW4gYSBsaXN0IG9mCisJZXZlcnkgQmlzb24tZGVmaW5lZCBzeW1ib2wuICBJbnN0ZWFkLCBqdXN0IGNoZWNrIGZvciBhIGZpcnN0IGNoYXJhY3RlcgorCW9mICckJywgd2hpY2ggYSB1c2VyIHN5bWJvbCBjYW5ub3QgaGF2ZSwgYW5kIGNoZWNrIGZvciB0aGUgZXJyb3IgdG9rZW4uCisKKzIwMDYtMDgtMjEgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJRG9uJ3QgYXBwbHkgdGhlIGRlZmF1bHQgJWRlc3RydWN0b3Igb3IgJXByaW50ZXIgdG8gdGhlIGVycm9yIHRva2VuLAorCSR1bmRlZmluZWQsIG9yICRhY2NlcHQuICBUaGlzIGNoYW5nZSBmaXRzIHRoZSBnZW5lcmFsIHJ1bGUgdGhhdCB0aGUKKwlkZWZhdWx0ICVkZXN0cnVjdG9yIGFuZCAlcHJpbnRlciBhcmUgb25seSBmb3IgdXNlci1kZWNsYXJlZCBzeW1ib2xzLAorCWFuZCBpdCBzb2x2ZXMgc2V2ZXJhbCBkaWZmaWN1bHRpZXMgdGhhdCBhcmUgZGVzY3JpYmVkIGluIHRoZSBuZXcgdGVzdAorCWNhc2VzIGxpc3RlZCBiZWxvdy4KKwkqIHNyYy9zeW10YWIuYyAoc3ltYm9sX2Rlc3RydWN0b3JfZ2V0LCBzeW1ib2xfcHJpbnRlcl9nZXQpOiBJbXBsZW1lbnQuCisJKiB0ZXN0cy9hY3Rpb25zLmF0IChEZWZhdWx0ICVwcmludGVyIGFuZCAlZGVzdHJ1Y3RvciBhcmUgbm90IGZvciBlcnJvcgorCW9yICR1bmRlZmluZWQsIERlZmF1bHQgJXByaW50ZXIgYW5kICVkZXN0cnVjdG9yIGFyZSBub3QgZm9yICRhY2NlcHQpOgorCU5ldyB0ZXN0IGNhc2VzLgorCisyMDA2LTA4LTE5ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUFsbG93ICVzdGFydCBhZnRlciB0aGUgZmlyc3QgcnVsZS4KKwkqIHNyYy9yZWFkZXIuYyAoZ3JhbW1hcl9jdXJyZW50X3J1bGVfYmVnaW4pOiBEb24ndCBzZXQgdGhlIHN0YXJ0IHN5bWJvbAorCXdoZW4gcGFyc2luZyB0aGUgZmlyc3QgcnVsZS4KKwkoY2hlY2tfYW5kX2NvbnZlcnRfZ3JhbW1hcik6IFNlYXJjaCBmb3IgaXQgaGVyZSBhZnRlciBhbGwgZ3JhbW1hcgorCWRlY2xhcmF0aW9ucyBoYXZlIGJlZW4gcGFyc2VkLiAgU2tpcCBtaWRydWxlcywgd2hpY2ggaGF2ZSBkdW1teSBMSFMKKwlub250ZXJtaW5hbHMuCisJKiBzcmMvc3ltdGFiLmMgKHN5bWJvbF9pc19kdW1teSk6IE5ldyBmdW5jdGlvbi4KKwkqIHNyYy9zeW10YWIuaCAoc3ltYm9sX2lzX2R1bW15KTogRGVjbGFyZSBpdC4KKwkqIHRlc3RzL2lucHV0LmF0ICglc3RhcnQgYWZ0ZXIgZmlyc3QgcnVsZSk6IE5ldyB0ZXN0LgorCisyMDA2LTA4LTE4ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCVJlZG8gc29tZSBvZiB0aGUgcHJldmlvdXMgY29tbWl0OiBhZGQgYmFjayB0aGUgYWJpbGl0eSB0byB1c2UKKwlub24tYWxpYXNlZC91bmRlY2xhcmVkIHN0cmluZyBsaXRlcmFscyBzaW5jZSBpdCBtaWdodCBiZSB1c2VmdWwgdG8KKwl0aG9zZSBkZWNsYXJpbmcgJXRva2VuLXRhYmxlLgorCSogc3JjL3JlYWRlci5jIChjaGVja19hbmRfY29udmVydF9ncmFtbWFyKTogVW5kbyBjaGFuZ2VzIGluIHByZXZpb3VzCisJY29tbWl0OiBkb24ndCB3b3JyeSBhYm91dCBjb21wbGFpbnRzIGZyb20gc3ltYm9sc19wYWNrLgorCSogc3JjL3N5bXRhYi5jIChzeW1ib2xfbmV3LCBzeW1ib2xfY2xhc3Nfc2V0LAorCXN5bWJvbF9jaGVja19hbGlhc19jb25zaXN0ZW5jeSk6IFVuZG8gY2hhbmdlcyBpbiBwcmV2aW91cyBjb21taXQ6IGNvdW50CisJZWFjaCBzdHJpbmcgbGl0ZXJhbCBhcyBhIG5ldyBzeW1ib2wgYW5kIHRva2VuLCBhc3NpZ24gaXQgYSBzeW1ib2wKKwludW1iZXIsIGFuZCBkb24ndCBjb21wbGFpbiBhYm91dCBub24tYWxpYXNlZCBzdHJpbmcgbGl0ZXJhbHMuCisJKHN5bWJvbHNfcGFjayk6IFNpbmNlIHN5bWJvbF9tYWtlX2FsaWFzIHN0aWxsIGRvZXMgbm90IGRlY3JlbWVudCBzeW1ib2wKKwlhbmQgdG9rZW4gY291bnRzIGJ1dCBkb2VzIHN0aWxsIHNldCBhbGlhc2VkIHRva2VucyB0byB0aGUgc2FtZSBudW1iZXIsCisJc3ltYm9sX3BhY2tfcHJvY2Vzc29yIG5vdyBsZWF2ZXMgZW1wdHkgc2xvdHMgaW4gdGhlIHN5bWJvbHMgYXJyYXkuCisJUmVtb3ZlIHRob3NlIHNsb3RzLgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoVW5kZWNsYXJlZCBzdHJpbmcgbGl0ZXJhbCk6IFJlbW92ZSB0ZXN0IGNhc2UKKwlhZGRlZCBpbiBwcmV2aW91cyBjb21taXQgc2luY2Ugbm9uLWFsaWFzZWQgc3RyaW5nIGxpdGVyYWxzIGFyZSBhbGxvd2VkCisJYWdhaW4uCisJKENoYXJhY3RlcnMgRXNjYXBlcywgV2ViMmMgQWN0aW9ucyk6IFVuZG8gY2hhbmdlcyBpbiBwcmV2aW91cyBjb21taXQ6CisJcmVtb3ZlIHVubmVjZXNzYXJ5IHN0cmluZyBsaXRlcmFsIGRlY2xhcmF0aW9ucy4KKwkqIHRlc3RzL3NldHMuYXQgKEZpcnN0cyk6IExpa2V3aXNlLgorCisyMDA2LTA4LTE4ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCURvbid0IGFsbG93IGFuIHVuZGVjbGFyZWQgc3RyaW5nIGxpdGVyYWwsIGJ1dCBhbGxvdyBhIHN0cmluZyBsaXRlcmFsIHRvCisJYmUgdXNlZCBiZWZvcmUgaXRzIGRlY2xhcmF0aW9uLgorCSogc3JjL3JlYWRlci5jIChjaGVja19hbmRfY29udmVydF9ncmFtbWFyKTogRG9uJ3QgaW52b2tlIHBhY2tncmFtIGlmCisJc3ltYm9sc19wYWNrIGNvbXBsYWluZWQuCisJKiBzcmMvc3ltdGFiLmMgKHN5bWJvbF9uZXcpOiBEb24ndCBjb3VudCBhIHN0cmluZyBsaXRlcmFsIGFzIGEgbmV3CisJc3ltYm9sLgorCShzeW1ib2xfY2xhc3Nfc2V0KTogRG9uJ3QgY291bnQgYSBzdHJpbmcgbGl0ZXJhbCBhcyBhIG5ldyB0b2tlbiwgYW5kCisJZG9uJ3QgYXNzaWduIGl0IGEgc3ltYm9sIG51bWJlciBzaW5jZSBzeW1ib2xfbWFrZV9hbGlhcyBkb2VzIHRoYXQuCisJKHN5bWJvbF9tYWtlX2FsaWFzKTogSXQncyBub3QgbmVjZXNzYXJ5IHRvIGRlY3JlbWVudCB0aGUgc3ltYm9sIGFuZAorCXRva2VuIGNvdW50cyBhbnltb3JlLiAgRG9uJ3QgYXNzdW1lIHRoYXQgYW4gYWxpYXMgZGVjbGFyYXRpb24gb2NjdXJzCisJYmVmb3JlIGFueSB1c2VzIG9mIHRoZSBpZGVudGlmaWVyIG9yIHN0cmluZywgYW5kIHRodXMgZG9uJ3QgYXNzZXJ0IHRoYXQKKwlvbmUgb2YgdGhlbSBoYXMgdGhlIGhpZ2hlc3Qgc3ltYm9sIG51bWJlciBzbyBmYXIuCisJKHN5bWJvbF9jaGVja19hbGlhc19jb25zaXN0ZW5jeSk6IENvbXBsYWluIGlmIHRoZXJlJ3MgYSBzdHJpbmcgbGl0ZXJhbAorCXRoYXQgd2Fzbid0IGRlY2xhcmVkIGFzIGFuIGFsaWFzLgorCShzeW1ib2xzX3BhY2spOiBCYWlsIGlmIHN5bWJvbF9jaGVja19hbGlhc19jb25zaXN0ZW5jeSBmYWlsZWQgc2luY2UKKwlzeW1ib2xfcGFjayBhc3NlcnRzIHRoYXQgZXZlcnkgdG9rZW4gaGFzIGJlZW4gYXNzaWduZWQgYSBzeW1ib2wgbnVtYmVyCisJYWx0aG91Z2ggdW5kZWNsYXJlZCBzdHJpbmcgbGl0ZXJhbHMgaGF2ZSBub3QuCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChTdHJpbmcgYWxpYXMgZGVjbGFyZWQgYWZ0ZXIgdXNlLCBVbmRlY2xhcmVkCisJc3RyaW5nIGxpdGVyYWwpOiBOZXcgdGVzdCBjYXNlcy4KKwkoQ2hhcmFjdGVycyBFc2NhcGVzLCBXZWIyYyBBY3Rpb25zKTogRGVjbGFyZSBzdHJpbmcgbGl0ZXJhbHMgYXMKKwlhbGlhc2VzLgorCSogdGVzdHMvc2V0cy5hdCAoRmlyc3RzKTogTGlrZXdpc2UuCisKKzIwMDYtMDgtMTQgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJSW4gdGhlIGdyYW1tYXIgc2Nhbm5lciwgU1RSSU5HX0ZJTklTSCB1bmNsb3NlZCBjb25zdHJ1Y3RzIGFuZCByZXR1cm4KKwl0aGVtIHRvIHRoZSBwYXJzZXIgaW4gb3JkZXIgdG8gaW1wcm92ZSBlcnJvciBtZXNzYWdlcy4KKwkqIHNyYy9zY2FuLWdyYW0ubCAoU0NfRVNDQVBFRF9TVFJJTkcsIFNDX0VTQ0FQRURfQ0hBUkFDVEVSLAorCVNDX0JSQUNFRF9DT0RFLCBTQ19QUk9MT0dVRSk6IEltcGxlbWVudC4KKwkqIHRlc3RzL2lucHV0LmF0IChVbmNsb3NlZCBjb25zdHJ1Y3RzKTogTmV3IHRlc3QgY2FzZS4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKEludmFsaWQgaW5wdXRzKTogVXBkYXRlIG5vdyB0aGF0IHVuY2xvc2VkICV7IGlzCisJc2Vlbi4KKworCSogc3JjL3NjYW4tZ3JhbS5oLCBzcmMvc2Nhbi1ncmFtLmwgKGdyYW1fbGFzdF9icmFjZWRfY29kZV9sb2MpOiBSZW1vdmUKKwl1bnVzZWQgZ2xvYmFsLgorCisyMDA2LTA4LTEzICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUhhbmRsZSBzdHJpbmcgYWxpYXNlcyBmb3IgY2hhcmFjdGVyIHRva2VucyBjb3JyZWN0bHkuCisJKiBzcmMvc3ltdGFiLmMgKHN5bWJvbF91c2VyX3Rva2VuX251bWJlcl9zZXQpOiBJZiB0aGUgdG9rZW4gaGFzIGFuCisJYWxpYXMsIGNoZWNrIGFuZCBzZXQgaXRzIGFsaWFzJ3MgdXNlciB0b2tlbiBudW1iZXIgaW5zdGVhZCBvZiBpdHMgb3duLAorCXdoaWNoIGlzIHNldCB0byBpbmRpY2F0ZSB0aGUgYWxpYXMuICBQcmV2aW91c2x5LCBldmVyeSBvY2N1cnJlbmNlIG9mCisJdGhlIGNoYXJhY3RlciB0b2tlbiBpbiB0aGUgZ3JhbW1hciBvdmVyd3JvdGUgdGhhdCBhbGlhcyBpbmRpY2F0b3Igd2l0aAorCXRoZSBjaGFyYWN0ZXIgY29kZS4KKwkqIHRlc3RzL2lucHV0LmF0IChTdHJpbmcgYWxpYXNlcyBmb3IgY2hhcmFjdGVyIHRva2Vucyk6IE5ldyB0ZXN0LgorCisyMDA2LTA4LTEyICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogc3JjL3BhcnNlLWdyYW0ueTogQWRkIGAlZXhwZWN0IDAnIHNvIHdlIGRvbid0IG92ZXJsb29rIGNvbmZsaWN0cy4KKworMjAwNi0wOC0xMSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIGJvb3RzdHJhcDogUHV0IGluIG5lZWQtbmdldHRleHQgYXJndW1lbnQgdG8gQU1fR05VX0dFVFRFWFQsCisJdG8gcHJldmVudCBmYWlsdXJlcyB3aGVuIGJ1aWxkaW5nIG9uIG9sZGVyIHBsYXRmb3Jtcy4KKwlDaGVjayBmb3IgYXV0b3BvaW50IGZhaWx1cmUuCisJU2V0IFhHRVRURVhUX09QVElPTlMgdG8gdmFsdWVzIHRoYXQgY2hlY2sgZm9yIEMgZm9ybWF0IHN0cmluZ3MsCisJc28gdGhhdCB0cmFuc2xhdG9ycyBhcmUgd2FybmVkIGFib3V0IHRoZW0gKHRoaXMgYWxzbyBoZWxwcworCXByZXZlbnQgY29yZSBkdW1wcykuCisKKwkqIGxpYi9zdWJwaXBlLmMgKGNyZWF0ZV9zdWJwaXBlKTogVXNlIG5ldyBnbnVsaWIgcGlwZV9zYWZlcgorCWZ1bmN0aW9uLCBzaW5jZSBpdCBzaW1wbGlmaWVzIG91ciBjb2RlIGEgYml0LgorCisJKiBjb25maWd1cmUuYWMgKEFDX0FSR19FTkFCTEUpOiBVc2UgLVdleHRyYSAtV25vLXNpZ24tY29tcGFyZQorCXJhdGhlciB0aGFuIC1XLCBzbyB3ZSBkb24ndCBnZXQgYm9ndXMgd2FybmluZ3MgYWJvdXQgc2lnbiBjb21wYXJpc29ucy4KKwlBZGQgLVdwb2ludGVyLWFyaXRoLCBzaW5jZSB0aGF0IHdhcm5pbmcgaXMgdXNlZnVsIChpdCByZXBvcnRzIGNvZGUKKwl0aGF0IGRvZXMgbm90IGNvbmZvcm0gdG8gQzg5IGFuZCB0aGF0IHNvbWUgY29tcGlsZXJzIHJlamVjdCkuCisJKiBkYXRhL2MubTQsIGRhdGEvZ2xyLmMsIGRhdGEvbGFscjEuY2MsIGRhdGEveWFjYy5jOiBVbmRvIGxhdGVzdCBjaGFuZ2UsCisJc2luY2UgaXQncyBubyBsb25nZXIgbmVlZGVkLgorCisyMDA2LTA4LTEwICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUNsZWFuIHVwIHNjYW5uZXJzIGEgYml0LgorCSogc3JjL2ZsZXgtc2Nhbm5lci5oIChGTEVYX05PX09CU1RBQ0spOiBOZXcgbWFjcm8gdGhhdCBibG9ja3Mgb2JzdGFjaworCWRlZmluaXRpb25zIHNvIGdjYyB3b24ndCB3YXJuIHdoZW4gb2JzdGFja19mb3Jfc3RyaW5nIGlzIHVudXNlZC4KKwkqIHNyYy9zY2FuLWNvZGUubDogY29uZmlnLmggYW5kIHN5c3RlbS5oIGFyZSBhbHJlYWR5ICNpbmNsdWRlJ2QgYnkKKwlzY2FuLWNvZGUtYy5jLCBzbyBnZXQgcmlkIG9mIHRoZW0gaGVyZS4KKwkqIHNyYy9zY2FuLWdyYW0ubDogTGlrZXdpc2UuCisJKiBzcmMvc2Nhbi1za2VsLmw6IExpa2V3aXNlLCBhbmQgdXNlIGZsZXgtc2Nhbm5lci5oIHdpdGhvdXQgb2JzdGFjaworCWRlZmluaXRpb25zIHJhdGhlciB0aGFuIGR1cGxpY2F0aW5nIHRoZSByZXN0IG9mIGl0LgorCSogc3JjL3NjYW4tZ3JhbS1jLmMsIHNjYW4tc2tlbC1jLmM6ICNpbmNsdWRlICJzeXN0ZW0uaCIuCisKKzIwMDYtMDgtMDkgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJU3VwcHJlc3Mgc2lnbmVkL3Vuc2lnbmVkIGNvbXBhcmlzb24gd2FybmluZ3MgZm9yIHl5Y2hlY2suCisJKiBkYXRhL2MubTQgKGI0X3NhZmVzdF9pbnRfdHlwZSk6IE5ldyBtYWNyby4KKwkqIGRhdGEvZ2xyLmMsIGRhdGEvbGFscjEuY2M6IFdoZXJldmVyIHlvdSBjb21wYXJlIHl5Y2hlY2tbaV0gYWdhaW5zdAorCWEgc2lnbmVkIGludCB0eXBlLCBjYXN0IGl0IHRvIGI0X3NhZmVzdF9pbnRfdHlwZSBmaXJzdC4KKwkqIGRhdGEveWFjYy5jOiBMaWtld2lzZS4KKwkoYjRfc2FmZXN0X2ludF90eXBlKTogT3ZlcndyaXRlIHRoZSBvbmUgZnJvbSBjLm00IHNpbmNlIGI0X2ludF90eXBlIGlzCisJYWxzbyBvdmVyd3JpdHRlbi4KKworMjAwNi0wOC0wOSAgUmFsZiBXaWxkZW5odWVzIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPiAgKHRpbnkgY2hhbmdlKQorCisJKiBkb2MvYmlzb24udGV4aW5mbzogRml4IHNvbWUgdHlwb3MuCisKKzIwMDYtMDgtMDIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBtNC8uY3ZzaWdub3JlOiBBZGQgaW50dHlwZXNfaC5tNCxsaWItbGQubTQsIGxpYi1wcmVmaXgubTQsCisJcG8ubTQsIHN0ZGludF9oLm00LCB1aW50bWF4X3QubTQsIHVsb25nbG9uZy5tNCwgd2FybmluZy5tNC4KKworCSogYm9vdHN0cmFwIChnbnVsaWJfdG9vbCk6IFN0b3AgdXNpbmcgLS1hc3N1bWUtYXV0b2NvbmY7CisJdGhlIGxhdGVzdCBnbnVsaWIgZG9lcyB0aGlzIGEgZGlmZmVyZW50IHdheS4KKwkoZ2V0X3RyYW5zbGF0aW9ucyk6IFNoYXJ1enphbWFuIEFobWF0IFJhc2xhbiByZXBvcnRlZCB0aGF0IHRoZSBtcworCXRyYW5zbGF0aW9uIHdhcyBwYXRjaGVkLCBzbyBzdG9wIG9taXR0aW5nIGl0LgorCisyMDA2LTA3LTI5ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUVuYWJsZSBkZWNsYXJhdGlvbiBvZiBkZWZhdWx0ICVwcmludGVyLyVkZXN0cnVjdG9yLiAgTWFrZSB0aGUgcGFyc2VyCisJdXNlIHRoZXNlIGZvciBhbGwgdXNlci1kZWNsYXJlZCBncmFtbWFyIHN5bWJvbHMgZm9yIHdoaWNoIHRoZSB1c2VyIGRvZXMKKwlub3QgZGVjbGFyZSBhIHNwZWNpZmljICVwcmludGVyLyVkZXN0cnVjdG9yLiAgVGh1cywgdGhlIHBhcnNlciB1c2VzIGl0CisJZm9yIHRva2VuIDAgaWYgdGhlIHVzZXIgZGVjbGFyZXMgaXQgYnV0IG5vdCBpZiBCaXNvbiBnZW5lcmF0ZXMgaXQgYXMKKwkkZW5kLiAgRGlzY3Vzc2VkIHN0YXJ0aW5nIGF0CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDYtMDIvbXNnMDAwNjQuaHRtbD4sCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDYtMDYvbXNnMDAwOTEuaHRtbD4sCisJYW5kCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDYtMDcvbXNnMDAwMTkuaHRtbD4uCisJKiBORVdTICgyLjMrKTogTWVudGlvbi4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChBY3Rpb25zIGluIE1pZC1SdWxlKTogSXQncyBubyBsb25nZXIgaW1wb3NzaWJsZSB0bworCWRlY2xhcmUgYSAlZGVzdHJ1Y3RvciBmb3IgYSBtaWQtcnVsZSdzIHNlbWFudGljIHZhbHVlLiAgSXQncyBqdXN0CisJaW1wb3NzaWJsZSB0byBkZWNsYXJlIG9uZSBzcGVjaWZpYyB0byBpdC4KKwkoRnJlZWluZyBEaXNjYXJkZWQgU3ltYm9scyk6IE1lbnRpb24gdGhhdCBAJCBjYW4gYmUgdXNlZCBpbiAlZGVzdHJ1Y3RvcgorCWNvZGUuICBEZXNjcmliZSBkZWZhdWx0ICVkZXN0cnVjdG9yIGZvcm0uCisJKiBzcmMvcGFyc2UtZ3JhbS55IChncmFtbWFyX2RlY2xhcmF0aW9uKTogUGFyc2UgZGVmYXVsdAorCSVwcmludGVyLyVkZXN0cnVjdG9yIGRlY2xhcmF0aW9ucy4KKwkqIHNyYy9vdXRwdXQuYyAoc3ltYm9sX2Rlc3RydWN0b3JzX291dHB1dCk6IFVzZSBzeW1ib2xfZGVzdHJ1Y3Rvcl9nZXQKKwlhbmQgc3ltYm9sX2Rlc3RydWN0b3JfbG9jYXRpb25fZ2V0IHJhdGhlciB0aGFuIGFjY2Vzc2luZyB0aGUgZGVzdHJ1Y3RvcgorCWFuZCBkZXN0cnVjdG9yX2xvY2F0aW9uIG1lbWJlcnMgb2Ygc3RydWN0IHN5bWJvbC4KKwkoc3ltYm9sX3ByaW50ZXJzX291dHB1dCk6IExpa2V3aXNlIGJ1dCBmb3IgJXByaW50ZXIncy4KKwkqIHNyYy9yZWFkZXIuYyAoc3ltYm9sX3Nob3VsZF9iZV91c2VkKTogTGlrZXdpc2UgYnV0IGZvciAlZGVzdHJ1Y3RvcidzCisJYWdhaW4uCisJKiBzcmMvc3ltdGFiLmMgKGRlZmF1bHRfZGVzdHJ1Y3RvciwgZGVmYXVsdF9kZXN0cnVjdG9yX2xvY2F0aW9uLAorCWRlZmF1bHRfcHJpbnRlciwgZGVmYXVsdF9wcmludGVyX2xvY2F0aW9uKTogTmV3IHN0YXRpYyBnbG9iYWwKKwl2YXJpYWJsZXMgdG8gcmVjb3JkIHRoZSBkZWZhdWx0ICVkZXN0cnVjdG9yIGFuZCAlcHJpbnRlci4KKwkoc3ltYm9sX2Rlc3RydWN0b3JfZ2V0LCBzeW1ib2xfZGVzdHJ1Y3Rvcl9sb2NhdGlvbl9nZXQsCisJc3ltYm9sX3ByaW50ZXJfZ2V0LCBzeW1ib2xfcHJpbnRlcl9sb2NhdGlvbl9nZXQpOiBOZXcgZnVuY3Rpb25zIHRvCisJY29tcHV0ZSB0aGUgYXBwcm9wcmlhdGUgJWRlc3RydWN0b3IgYW5kICVwcmludGVyIGZvciBhIHN5bWJvbC4KKwkoZGVmYXVsdF9kZXN0cnVjdG9yX3NldCwgZGVmYXVsdF9wcmludGVyX3NldCk6IE5ldyBmdW5jdGlvbnMgdG8gc2V0IHRoZQorCWRlZmF1bHQgJWRlc3RydWN0b3IgYW5kICVwcmludGVyLgorCSogc3JjL3N5bXRhYi5oOiBQcm90b3R5cGUgYWxsIHRob3NlIG5ldyBmdW5jdGlvbnMuCisJKiB0ZXN0cy9hY3Rpb25zLmF0IChEZWZhdWx0ICVwcmludGVyIGFuZCAlZGVzdHJ1Y3Rvcik6IE5ldyB0ZXN0IHRvCisJY2hlY2sgdGhhdCB0aGUgcmlnaHQgJXByaW50ZXIgYW5kICVkZXN0cnVjdG9yIGFyZSBjYWxsZWQsIHRoYXQgdGhleSdyZQorCW5vdCBjYWxsZWQgZm9yICRlbmQsIGFuZCB0aGF0ICQkIGFuZCBAJCB3b3JrIGNvcnJlY3RseS4KKwkoRGVmYXVsdCAlcHJpbnRlciBhbmQgJWRlc3RydWN0b3IgZm9yIHVzZXItZGVjbGFyZWQgZW5kIHRva2VuKTogTmV3CisJdGVzdCB0byBjaGVjayB0aGF0IHRoZSBkZWZhdWx0ICVwcmludGVyIGFuZCAlZGVzdHJ1Y3RvciBhcmUgY2FsbGVkIGZvcgorCWEgdXNlci1kZWNsYXJlZCBlbmQgdG9rZW4uCisJKiB0ZXN0cy9pbnB1dC5hdCAoRGVmYXVsdCAlcHJpbnRlciBhbmQgJWRlc3RydWN0b3IgcmVkZWNsYXJlZCwgVW51c2VkCisJdmFsdWVzIHdpdGggZGVmYXVsdCAlZGVzdHJ1Y3Rvcik6IE5ldyB0ZXN0cyB0byBjaGVjayByZWxhdGVkIGdyYW1tYXIKKwl3YXJuaW5ncyBhbmQgZXJyb3JzLgorCisyMDA2LTA3LTI5ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUNsZWFuIHVwIGhhbmRsaW5nIG9mICVkZXN0cnVjdG9yIGZvciB0aGUgZW5kIHRva2VuICh0b2tlbiAwKS4KKwlEaXNjdXNzZWQgc3RhcnRpbmcgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwNi0wNy9tc2cwMDAxOS5odG1sPgorCWFuZAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvaGVscC1iaXNvbi8yMDA2LTA3L21zZzAwMDEzLmh0bWw+LgorCisJTWFrZSB0aGUgc2tlbGV0b25zIGNvbnNpc3RlbnQgaW4gaG93IHRoZXkgcG9wIHRoZSBlbmQgdG9rZW4gYW5kIGludm9rZQorCWl0cyAlZGVzdHJ1Y3Rvci4KKwkqIGRhdGEvZ2xyLmMgKHl5cmVjb3ZlclN5bnRheEVycm9yLCB5eXBhcnNlKTogRG9uJ3QgcG9wIHRoZSBzdGFydAorCXN0YXRlLCB3aGljaCBoYXMgdG9rZW4gbnVtYmVyIDAsIHNpbmNlIHRoaXMgd291bGQgaW52b2tlIHRoZQorCSVkZXN0cnVjdG9yIGZvciB0aGUgZW5kIHRva2VuLgorCSogZGF0YS9sYWxyMS5jYyAoeXk6OnBhcnNlcjo6cGFyc2UpOiBEb24ndCBjaGVjayBmb3IgdGhlIGZpbmFsIHN0YXRlCisJdW50aWwgYWZ0ZXIgc2hpZnRpbmcgdGhlIGVuZCB0b2tlbiwgb3IgZWxzZSBpdCB3b24ndCBiZSBwb3BwZWQuCisJKiBkYXRhL3lhY2MuYyAoeXlwYXJzZSk6IExpa2V3aXNlLgorCisJKiBkYXRhL2dsci5jICh5eXBhcnNlKTogQ2xlYXIgdGhlIGxvb2thaGVhZCBhZnRlciBzaGlmdGluZyBpdCBldmVuIHdoZW4KKwlpdCdzIHRoZSBlbmQgdG9rZW4uICBVcG9uIHRlcm1pbmF0aW9uLCBkZXN0cm95IGFuIHVuc2hpZnRlZCBsb29rYWhlYWQKKwlldmVuIHdoZW4gaXQncyB0aGUgZW5kIHRva2VuLgorCSogZGF0YS9sYWxyMS5jYyAoeXk6OnBhcnNlcjo6cGFyc2UpOiBMaWtld2lzZS4KKwkqIGRhdGEveWFjYy5jICh5eXBhcnNlKTogTGlrZXdpc2UuCisKKwkqIHNyYy9yZWFkZXIuYyAocGFja2dyYW0pOiBEb24ndCBjaGVjayBydWxlIDAuICBUaGlzIHN1cHByZXNzZXMgdW51c2VkCisJdmFsdWUgd2FybmluZ3MgZm9yIHRoZSBlbmQgdG9rZW4gd2hlbiB0aGUgdXNlciBnaXZlcyB0aGUgZW5kIHRva2VuIGEKKwklZGVzdHJ1Y3Rvci4KKworCSogdGVzdHMvYWN0aW9ucy5hdCAoUHJpbnRlcnMgYW5kIERlc3RydWN0b3JzKTogVGVzdCBhbGwgdGhlIGFib3ZlLgorCisyMDA2LTA3LTI0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCVVwZGF0ZSB0byBsYXRlc3QgZ251bGliIGFuZCBnZXR0ZXh0IHZlcnNpb25zLgorCSogYm9vdHN0cmFwIChnbnVsaWItbW9kdWxlcyk6IFJlbW92ZSBoYXJkLWxvY2FsZSwgc3RkaW8tc2FmZXIuCisJQWRkIGZvcGVuLXNhZmVyLgorCShnbnVsaWJfZmlsZXMpOiBBZGQgbTQvd2FybmluZy5tNC4gIERvbid0IHdvcnJ5IGFib3V0IGZpbGVzCisJb3ZlcndyaXR0ZW4gYnkgYXV0b3BvaW50LgorCVJlcGxhY2UgZ3RfSU5UTF9TVUJESVJfQ09SRSB3aXRoIGFuIGVtcHR5IGJvZHkgaW4gbTQvZ2V0dGV4dF9nbC5tNC4KKwlTdXBwcmVzcyAiaWQiLCAibXMiLCAidHIiIHRyYW5zbGF0aW9ucyBmb3Igbm93LCBzaW5jZSBnZXR0ZXh0IDAuMTUKKwlyZWplY3RzIHRoZW0uCisJRG9uJ3QgdXNlIGF1dG9yZWNvbmY7IGluc3RlYWQsIGludm9rZSBhdXRvcG9pbnQgZXRjLiBieSBoYW5kLAorCXNvIHRoYXQgd2UgY2FuIHJlbW92ZSB0aGUgaW50bCBmaWxlcyBhdCBhIGJldHRlciB0aW1lLgorCShpbnRsX2ZpbGVzX3RvX3JlbW92ZSk6IFJlbW92ZSBhY2xvY2FsLm00LCBzaW5jZSBpdCBnZXRzCisJcmVidWlsdCBhbnl3YXkuICBSZW1vdmUgbTQvaW50dHlwZXNfaC5tNCwgbTQvaW50dHlwZXMubTQsCisJbTQvaXNjLXBvc2l4Lm00LCBtNC9saWItbGQubTQsIG00L2xpYi1wcmVmaXgubTQsIG00L3BvLm00LAorCW00L3N0ZGludF9oLm00LCBtNC91aW50bWF4X3QubTQsIG00L3Vsb25nbG9uZy5tNC4KKwlBZGQgbTQvaW50dHlwZXMtaC5tNCwgbTQvbG9jay5tNCwgbTQvdmlzaWJpbGl0eS5tNC4KKwlSZW1vdmUgZGF0YXJvb3RkaXIgaGFjazsgbm8gbG9uZ2VyIG5lZWRlZC4KKwkqIGNvbmZpZ3VyZS5hYzogVXNlIGdsX1dBUk5JTkdfQ0ZMQUdTIHJhdGhlciB0aGFuIEJJU09OX1dBUk5JTkcuCisJKEFNX0dOVV9HRVRURVhUX1ZFUlNJT04pOiBCdW1wIGZyb20gMC4xMiB0byAwLjE1LgorCSogbGliLy5jdnNpZ25vcmU6IFJlbW92ZSBoYXJkLWxvY2FsZS5jLCBoYXJkLWxvY2FsZS5oLCBzdHJkdXAuYywKKwlzdHJkdXAuaC4KKwkqIG00Ly5jdnNpZ25vcmU6IFJlbW92ZSBoYXJkLWxvY2FsZS5tNCwgc3RyZHVwLm00LgorCSogbTQvd2FybmluZy5tNDogUmVtb3ZlIGZyb20gQ1ZTLCBzaW5jZSB3ZSBub3cgdXNlIGdudWxpYidzIHZlcnNpb24uCisKKzIwMDYtMDctMjAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBib290c3RyYXA6IEFkanVzdCB0byB0b2RheSdzIGNoYW5nZSB0byBnbnVsaWItdG9vbCBieSBpbnZva2luZworCWl0IHdpdGggLS1hc3N1bWUtYXV0b2NvbmY9J2xhdGVzdC1zdGFibGUnLgorCisyMDA2LTA3LTEzICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogc3JjL3BhcnNlLWdyYW0ueSAoZ3JhbW1hcl9kZWNsYXJhdGlvbik6IERvbid0IGNvbmZ1c2UgRG94eWdlbiAoYXQKKwlsZWFzdCAxLjQuNyBhbmQgMS40LjQpIGJ5IHB1dHRpbmcgYSAjbGluZSBiZXR3ZWVuIGB0eXBlZGVmIHVuaW9uCisJWVlTVFlQRScgYW5kIGB7Jy4KKwkqIHNyYy9tdXNjbGVfdGFiLmggKG11c2NsZV9ncm93KTogUmVwbGFjZSB0aGUgaGVhZGVyIGNvbW1lbnRzIHdpdGgKKwl0aG9zZSBmcm9tIG11c2NsZV90YWIuYyBzaW5jZSB0aGUgb2xkIG9uZXMgYXJlIG1pc2xlYWRpbmcuCisKKzIwMDYtMDctMTMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJU3VwcG9ydCAlZGVmaW5lICJLRVkiIHtWQUxVRX0uCisJKiBzcmMvc2Nhbi1jb2RlLmgsIHNyYy9zY2FuLWNvZGUubCAodHJhbnNsYXRlX2FjdGlvbikKKwkodHJhbnNsYXRlX3J1bGVfYWN0aW9uLCB0cmFuc2xhdGVfc3ltYm9sX2FjdGlvbiwgdHJhbnNsYXRlX2NvZGUpOgorCVJldHVybiBjaGFyICosIG5vdCBjb25zdCBjaGFyICouCisJKiBzcmMvcGFyc2UtZ3JhbS55IChkZWNsYXJhdGlvbik6IFJlbmFtZSBhcy4uLgorCShwcm9sb2d1ZV9kZWNsYXJhdGlvbik6IHRoaXMuCisJKHN0cmluZ19jb250ZW50KTogUmVtb3ZlIHRoaXMgbm9udGVybWluYWwsIHVzZSBTVFJJTkcuCisJKGJyYWNlbGVzcywgY29udGVudCwgY29udGVudC5vcHQpOiBOZXcgbm9udGVybWluYWwuCisJVXNlIHRoZW0uCisJKCVkZWZpbmUpOiBOb3cgYWNjZXB0IGNvbnRlbnQub3B0LCBpLmUuLCBhY2NlcHQgYWxzbyBCUkFDRURfQ09ERQorCWFzIHZhbHVlLgorCSogc3JjL3NjYW4tZ3JhbS5sIChnZXRhcmdzLmgpOiBEb24ndCBpbmNsdWRlIGl0LgorCisyMDA2LTA3LTEyICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogZGF0YS9sYWxyMS5jYyAoWVlDREVCVUcpOiBVc2UgJ2lmICh5eWRlYnVnXykgKCp5eWNkZWJ1Z18pJworCXJhdGhlciB0aGFuIGEgZm9yLWxvb3AgdGhhdCBkZWNsYXJlcyBhIGxvY2FsIGJvb2wgdmFyaWFibGUuICBUaGlzCisJc2hvdWxkIHdvcmsgYXJvdW5kIGEgY29tcGF0aWJpbGl0eSBwcm9ibGVtIHdpdGggYSBDcmF5IHgxZSBDKysKKwljb21waWxlciByZXBvcnRlZCBieSBIdW5nIE5ndXllbiBpbgorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvaGVscC1iaXNvbi8yMDA2LTA3L21zZzAwMDIyLmh0bWw+LgorCVRoZSBmb3ItbG9vcCB3YXMgaW50cm9kdWNlZCBpbiB0aGUgMjAwNC0xMS0xNyBjaGFuZ2UgYnV0IEkgZG9uJ3QKKwlrbm93IHdoeSBpdCB3YXMgbmVlZGVkLgorCisyMDA2LTA3LTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9jLm00OiBDb21tZW50IGNoYW5nZXMuCisKKzIwMDYtMDctMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwkqIHNyYy9jb21wbGFpbi5jIChlcnJvcl9tZXNzYWdlLCBFUlJPUl9NRVNTQUdFKTogTmV3LgorCVRvIGZhY3Rvci4uLgorCShmYXRhbF9hdCwgZmF0YWwsIHdhcm5fYXQsIHdhcm4sIGNvbXBsYWluX2F0LCBjb21wbGFpbik6IHRoZXNlLgorCSogc3JjL2NvbXBsYWluLmgsIHNyYy9jb21wbGFpbi5jICh3YXJuaW5nX2lzc3VlZCk6IFJlbW92ZSwgdW51c2VkLgorCisyMDA2LTA3LTA5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogTkVXUzogSW5zdGVhZCBvZiAldW5pb24sIHlvdSBjYW4gZGVmaW5lIGFuZCB1c2UgeW91ciBvd24gdW5pb24gdHlwZQorCVlZU1RZUEUgaWYgeW91ciBncmFtbWFyIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSA8dHlwZT4gdGFnLgorCVlvdXIgWVlTVFlQRSBuZWVkIG5vdCBiZSBhIG1hY3JvOyBpdCBjYW4gYmUgYSB0eXBlZGVmLgorCSogZG9jL2Jpc29uLnRleGluZm8gKFZhbHVlIFR5cGUsIE11bHRpcGxlIFR5cGVzLCBMb2NhdGlvbiBUeXBlKToKKwkoVW5pb24gRGVjbCwgRGVjbCBTdW1tYXJ5KTogRG9jdW1lbnQgdGhpcy4KKwkqIGRhdGEvZ2xyLmMgKFlZU1RZUEUpOiBJbXBsZW1lbnQgdGhpcy4KKwkqIGRhdGEvZ2xyLmNjIChZWVNUWVBFKTogTGlrZXdpc2UuCisJKiBkYXRhL2xhbHIxLmNjIChZWVNUWVBFKTogTGlrZXdpc2UuCisJKiBkYXRhL3lhY2MuYyAoWVlTVFlQRSk6IExpa2V3aXNlLgorCSogc3JjL291dHB1dC5jIChwcmVwYXJlKTogT3V0cHV0IHRhZ19zZWVuX2ZsYWcuCisJKiBzcmMvcGFyc2UtZ3JhbS55IChkZWNsYXJhdGlvbiwgZ3JhbW1hcl9kZWNsYXJhdGlvbik6CisJVXNlICd1bmlvbl9zZWVuJyByYXRoZXIgdGhhbiAndHlwZWQnIHRvIGRldGVybWluZSB3aGV0aGVyCisJJXVuaW9uIGhhcyBiZWVuIHNlZW4sIHNpbmNlIGdyYW1tYXJzIGNhbiBub3cgYmUgdHlwZWQgd2l0aG91dAorCSV1bmlvbi4KKwkoc3ltYm9sX2RlY2xhcmF0aW9uLCB0eXBlLm9wdCwgc3ltYm9sX2RlZik6CisJS2VlcCB0cmFjayBvZiB3aGV0aGVyIGEgdGFnIGhhcyBiZWVuIHNlZW4uCisJKiBzcmMvcmVhZGVyLmMgKHVuaW9uX3NlZW4sIHRhZ19zZWVuKTogTmV3IHZhcnMuCisJKHR5cGVkKTogcmVtb3ZlLgorCSogc3JjL3JlYWRlci5oICh1bmlvbl9zZWVuLCB0YWdfc2VlbiwgdHlwZWQpOiBMaWtld2lzZS4KKwkqIHNyYy9zY2FuLWNvZGUubCAodW50eXBlZF92YXJfc2Vlbik6IE5ldyB2YXJpYWJsZS4KKwkoaGFuZGxlX2FjdGlvbl9kb2xsYXIpOiBBZGp1c3QgdG8gYWJvdmUgY2hhbmdlcy4KKwkoaGFuZGxlX2FjdGlvbl9kb2xsYXIsIGhhbmRsZV9hY3Rpb25fYXQpOgorCUltcHJvdmUgb3ZlcmZsb3cgY2hlY2tpbmcgZm9yIG91dGxhbmRpc2ggbnVtYmVycy4KKwkqIHRlc3RzL2lucHV0LmF0IChBVF9DSEVDS19VTlVTRURfVkFMVUVTKTogUmVkbyB0ZXN0IHRvCisJYXZvaWQgbmV3IGRpYWdub3N0aWNzIGdlbmVyYXRlZCBieSBhYm92ZSBjaGFuZ2VzLgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoWVlTVFlQRSB0eXBlZGVmKTogQWRkIHRlc3QgdG8gY2hlY2sKKwlmb3IgdHlwZSB0YWdzIHdpdGhvdXQgJXVuaW9uLgorCisJKiBzcmMvc3ltbGlzdC5jIChzeW1ib2xfbGlzdF9sZW5ndGgpOiBSZXR1cm4gaW50LCBub3QgdW5zaWduZWQKKwlpbnQsIHNpbmNlIGNhbGxlcnMgZXhwZWN0IGludC4gIFRoaXMgbWF5IG5lZWQgdG8gZ2V0IHJldmlzaXRlZAorCW9uY2Ugd2UgaGF2ZSBwcm9wZXIgaW50ZWdlciBvdmVyZmxvdyBjaGVja2luZy4KKworCSogc3JjL3NjYW4tZ3JhbS5oIChncmFtX3NjYW5uZXJfY3Vyc29yKTogUmVtb3ZlIGRlY2wsIHNpbmNlIHRoaXMKKwlvYmplY3QgaXMgbm93IHN0YXRpYy4KKworCSogc3JjL2dldGFyZ3MuYyAoZmxhZ3NfYXJnbWF0Y2gpOiBSZXR1cm4gdm9pZCwgbm90IGludCwKKwl0byBwYWNpZnkgLi9jb25maWd1cmUgLS1lbmFibGUtZ2NjLXdhcm5pbmdzLgorCisJKiBzcmMvZmxleC1zY2FubmVyLmggKFNUUklOR19GUkVFKTogRG9uJ3QgdXNlIEZMRVhfUFJFRklYIChsYXN0X3N0cmluZykKKwlzaW5jZSBsYXN0X3N0cmluZyBpcyBhbHJlYWR5IGRlZmluZWQgdG8gRkxFWF9QUkVGSVggKGxhc3Rfc3RyaW5nKS4KKworMjAwNi0wNy0wOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCUltcGxlbWVudCAtLXdhcm5pbmdzLy1XLgorCSogc3JjL2dldGFyZ3MuYyAocmVwb3J0X2FyZ21hdGNoLCB0cmFjZV9hcmdtYXRjaCk6IFJlbW92ZSwKKwlyZXBsYWNlZCBieS4uLgorCShmbGFnc19hcmdtYXRjaCwgRkxBR1NfQVJHTUFUQ0gpOiB0aGlzIG5ldyBmdW5jdGlvbiBhbmQgbWFjcm8uCisJQWRqdXN0IGNhbGxlcnMuCisJKiBzcmMvZ2V0YXJncy5oLCBzcmMvZ2V0YXJncy5jICh3YXJuaW5ncywgd2FybmluZ3NfZmxhZ3MpCisJKHdhcm5pbmdzX2FyZ3MsIHdhcm5pbmdzX3R5cGVzKTogTmV3LgorCShnZXRhcmdzLCBzaG9ydF9vcHRpb25zLCBsb25nX29wdGlvbnMpOiBBY2NlcHQgLVcvLS13YXJuaW5ncy4KKwlTb3J0IHRoZSBvcHRpb25zIGJ5IGFscGhhYmV0aWNhbCBvcmRlciwgdXBwZXIgY2FzZSBsZXR0ZXIgcmlnaHQKKwliZWZvcmUgaXRzIGxvd2VyIGNhc2UuCisKKzIwMDYtMDctMDkgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJQ2hhbmdlICVtZXJnZSByZXN1bHQgdHlwZSBjbGFzaCB3YXJuaW5ncyB0byBlcnJvcnMuICBEaXNjdXNzZWQgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwNi0wNy9tc2cwMDAyNi5odG1sPi4KKwkqIHNyYy9yZWFkZXIuYyAocmVjb3JkX21lcmdlX2Z1bmN0aW9uX3R5cGUpOiBVc2UgY29tcGxhaW5fYXQuCisJKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdCAoTWlzc2VkICVtZXJnZSB0eXBlIHdhcm5pbmdzIHdoZW4gTEhTIHR5cGUgaXMKKwlkZWNsYXJlZCBsYXRlcik6IFVwZGF0ZSB0ZXN0IGNhc2UgcmVzdWx0cy4KKworMjAwNi0wNy0wOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCSogc3JjL2dldGFyZ3MuaCwgc3JjL2dldGFyZ3MuYzogU3dhcCAtLXJlcG9ydCBhbmQgLS10cmFjZSBoYW5kbGluZworCXRvIGJlIGluIGFscGhhYmV0aWNhbCBvcmRlci4KKwkodHJhY2VfYXJncyk6IFNwZWxsaW5nIGZpeGVzLgorCisyMDA2LTA3LTA5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogZGF0YS95YWNjLmMgKFlZSUQsIHl5X3N0YWNrX3ByaW50KTogUHJlZml4IGxvY2FsIHZhcnMgd2l0aCAieXkiCisJc28gdGhleSBkb24ndCBjb2xsaWRlIHdpdGggdXNlci1kZWZpbmVkIG1hY3Jvcy4KKwkoeXlfc3RhY2tfcHJpbnQpOiBEb24ndCBhc3N1bWUgdGhhdCB5eXR5cGVfaW50MTYgcHJvbW90ZXMgdG8gaW50OworCXRoaXMgd2FzIG5ldmVyIGd1YXJhbnRlZWQsIGFuZCBub3cgdGhhdCB3ZSdyZSB1c2luZyBnbnVsaWIgc3RkaW50LAorCXdoaWNoIGRlZmluZXMgaW50X2Zhc3QxNl90IHRvIGxvbmcgaW50LCB0aGUgcHJvYmxlbSBpcyBleHBvc2VkLgorCisyMDA2LTA3LTA4ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogZGF0YS9jLm00IChiNF9iYXNlbmFtZSk6IFNpbXBsaWZ5IGEgYml0LCBzaW5jZSB3ZSBkb24ndAorCW5lZWQgdGhlIGZ1bGwgUE9TSVggc2VtYW50aWNzIChhbmQgd2VyZW4ndCBpbXBsZW1lbnRpbmcgdGhlbQorCWFueXdheSkuCisKKwlBZGp1c3QgdG8gQXV0b2NvbmYgMi42MCBhbmQgdG9kYXkncyBnbnVsaWIuCisJKiBib290c3RyYXAgKGdudWxpYl9tb2R1bGVzKTogQWRkIHN0ZGludC4KKwlSZW1vdmUgc3BlY2lhbCBjYXNlIGZvciBtNC9vbmNlb25seV8yXzU3Lm00LCBzaW5jZSBnbnVsaWItdG9vbAorCW5vIGxvbmdlciBjb3BpZXMgaXQuCisJKGludGxfZmlsZXNfdG9fcmVtb3ZlKTogUmVtb3ZlIG00L2xvbmdsb25nLm00IGFuZCBtNC93Y2hhcl90Lm00LAorCXNpbmNlIHN0ZGludCBuZWVkcyB0aGUgZm9ybWVyIGFuZCB3Y3dpZHRoICh3aGljaCBpcyBub3cgcmVxdWlyZWQKKwlieSBtYnN3aWR0aCkgbmVlZHMgdGhlIGxhdHRlci4KKwlBcHBlbmQgJ2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQCcgdG8gcG8vTWFrZWZpbGUuaW4uaW4sIHRvCisJd29yayBhcm91bmQgYSBjb21wYXRpYmlsaXR5IGdsaXRjaCBiZXR3ZWVuIGdldHRleHQgMC4xNC42IGFuZAorCUF1dG9jb25mIDIuNjAuCisJKiBjb25maWd1cmUuYWMgKEFDX1BSRVJFUSk6IFJlcXVpcmUgQXV0b2NvbmYgMi42MC4KKwlEbyBub3QgY2hlY2sgZm9yIHVpbnRwdHJfdCwgc2luY2UgbmV3IHN0ZGludCBtb2R1bGUgZG9lcyB0aGUgcmlnaHQKKwl0aGluZy4KKwkqIGxpYi8uY3ZzaWdub3JlOiBSZW1vdmUgYWxsb2NhLmMsIGFsbG9jYS5oLCBhbGxvY2FfLmguCisJQWRkIHN0ZGludC5oLCBzdGRpbnRfLmgsIHdjd2lkdGguaC4KKwkqIG00Ly5jdnNpZ25vcmU6IFJlbW92ZSBhbGxvY2EubTQsIG9uY2Vvbmx5Lm00LgorCUFkZCBhYnNvbHV0ZS1oZWFkZXIubTQsIGRvdWJsZS1zbGFzaC1yb290Lm00LCBsb25nbG9uZy5tNCwKKwlzdGRpbnQubTQsIHdjaGFyX3QubTQsIHdjd2lkdGgubTQuCisJKiBzcmMvZmlsZXMuYzogSW5jbHVkZSA8ZGlybmFtZS5oPiBhbmQgPHN0ZGlvLXNhZmVyLmg+IGluIHRoZQorCXVzdWFsIG9yZGVyIGZvciAuLi9saWIvKi5oIGZpbGVzLgorCShmaWxlX25hbWVfc3BsaXQpOiBVc2UgbGFzdF9jb21wb25lbnQsIG5vdCBiYXNlX25hbWUsIHRvIGFkanVzdAorCXRvIGdudWxpYiBjaGFuZ2VzLgorCSogc3JjL3BhcnNlLWdyYW0uaDogSW5jbHVkZSA8c3RydmVyc2NtcC5oPiBpbiB0aGUgdXN1YWwgb3JkZXIKKwlmb3IgLi4vbGliLyouaCBmaWxlcy4KKwkoWVlUWVBFX0lOVDE2LCBZWVRZUEVfSU5UOCwgWVlUWVBFX1VJTlQxNiwgWVlUWVBFX1VJTlQ4KToKKwlEZWZpbmUgdW5jb25kaXRpb25hbGx5LCBzaW5jZSB3ZSBub3cgYXNzdW1lIHRoZSBzdGRpbnQgbW9kdWxlLgorCSogc3JjL3NjYW4tc2tlbC5sOiBJbmNsdWRlIDxkaXJuYW1lLmg+LgorCShCQVNFX1FQVVRTKTogVXNlIGxhc3RfY29tcG9uZW50LCBub3QgYmFzZV9uYW1lLgorCSogc3JjL3N5c3RlbS5oOiBJbmNsdWRlIDx1bmxvY2tlZC1pby5oPiBpbiB0aGUgdXN1YWwgb3JkZXIKKwlmb3IgLi4vbGliLyouaCBmaWxlcy4gIEluY2x1ZGUgPHN0ZGludC5oPiB1bmNvbmRpdGlvbmFsbHksCisJc2luY2Ugd2Ugbm93IHVzZSB0aGUgc3RkaW50IG1vZHVsZS4KKwkodWludHB0cl90KTogRGVjbGFyZSBpZiBVSU5UUFRSX01BWCBpcyBub3QgZGVmaW5lZCwgbm90CisJSEFWRV9VSU5UUFRSX1QsIHNpbmNlIHdlIG5vdyB1c2UgdGhlIHN0ZGludCBtb2R1bGUuCisJKGJhc2VfbmFtZSk6IFJlbW92ZSBkZWNsLCBzaW5jZSBmaWxlcyBub3cgaW5jbHVkZSA8ZGlybmFtZS5oPgorCXRvIGdldCB0aGUgZGVjbC4KKworMjAwNi0wNy0wOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCSogZGF0YS9jLm00IChiNF9sb2NhdGlvbl9pbml0aWFsX2NvbHVtbiwgYjRfbG9jYXRpb25faW5pdGlhbF9saW5lKToKKwlOZXcsIGRlZmF1bHQgdG8gMS4KKwkqIGRhdGEveWFjYy5jLCBkYXRhL2dsci5jLCBkYXRhL2xvY2F0aW9uLmNjOiBVc2UgdGhlbS4KKwkqIE5FV1MsIGRvYy9iaXNvbi50ZXhpbmZvOiBUaGUgaW5pdGlhbCBjb2x1bW4gYW5kIGxpbmUgYXJlIDEgYnkKKwlkZWZhdWx0LgorCSogdGVzdHMvY2FsYy5hdDogQWRqdXN0LgorCisyMDA2LTA3LTA4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJKiBkYXRhL2MubTQgKGI0X2Jhc2VuYW1lKTogTmV3LgorCShiNF9zeW5jbGluZSk6IEFsc28gb3V0cHV0IHRoZSBsb2NhdGlvbiBvZiBpdHMgaW52b2NhdGlvbiAoZnJvbQorCXRoZSBza2VsZXRvbikuCisJKGI0X3VzZXJfYWN0aW9uLCBiNF9kZWZpbmVfdXNlcl9hY3Rpb24sIGI0X3VzZXJfYWN0aW9ucykKKwkoYjRfdXNlcl9pbml0aWFsX2FjdGlvbiwgYjRfdXNlcl9wb3N0X3Byb2xvZ3VlLAliNF91c2VyX3N0YXJ0X2hlYWRlcikKKwkoYjRfdXNlcl9zdHlwZSk6IE5ldy4KKwkqIGRhdGEveWFjYy5jLCBkYXRhL2dsci5jLCBkYXRhL2xhbHIxLmNjLCBkYXRhL2dsci5jYzogVXNlIHRoZW0uCisKKzIwMDYtMDctMDcgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJSW4gdGhlIGdyYW1tYXIgZmlsZSwgdGhlIGZpcnN0IGNvbHVtbiBpcyAxIG5vdCAwIG9uIHRoZSBmaXJzdCBsaW5lIGFzCisJb24gZXZlcnkgb3RoZXIgbGluZS4KKwkqIHNyYy9wYXJzZS1ncmFtLnkgKCVpbml0aWFsLWFjdGlvbik6IEluaXRpYWxpemUgQCQgY29ycmVjdGx5LgorCSogdGVzdHMvaW5wdXQuYXQgKFRvcnR1cmluZyB0aGUgU2Nhbm5lcik6IFVwZGF0ZSBvdXRwdXQuCisKKwkqIHNyYy9zY2FuLWdyYW0ubCAoc2Nhbm5lcl9jdXJzb3IpOiBEZWNsYXJlIGl0IHN0YXRpYy4KKworMjAwNi0wNy0wNyAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlJbiB3YXJuaW5ncywgc2F5ICJwcmV2aW91cyBkZWNsYXJhdGlvbiIgcmF0aGVyIHRoYW4gImZpcnN0CisJZGVjbGFyYXRpb24iLgorCSogc3JjL3N5bXRhYi5jIChyZWRlY2xhcmF0aW9uKTogRG8gdGhhdCBoZXJlLgorCSogc3JjL3JlYWRlci5jIChyZWNvcmRfbWVyZ2VfZnVuY3Rpb25fdHlwZSk6IEluIHRoZSBjYXNlIG9mIGEgcmVzdWx0CisJdHlwZSBjbGFzaCwgcmVwb3J0IHRoZSBwcmV2aW91cyBkZWNsYXJhdGlvbiByYXRoZXIgdGhhbiB0aGUgdmVyeSBmaXJzdAorCW9uZSBpbiB0aGUgZ3JhbW1hciBmaWxlLgorCSogdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQgKE1pc3NlZCAlbWVyZ2UgdHlwZSB3YXJuaW5ncyB3aGVuIExIUyB0eXBlIGlzCisJZGVjbGFyZWQgbGF0ZXIpOiBBZGQgYSB0aGlyZCBkZWNsYXJhdGlvbiB0byBjaGVjayB0aGlzIGJlaGF2aW9yLgorCSogdGVzdHMvaW5wdXQuYXQgKEluY29tcGF0aWJsZSBBbGlhc2VzKTogVXBkYXRlIG91dHB1dC4KKworMjAwNi0wNi0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRvYy9Eb3h5ZmlsZS5pbjogTmV3LgorCSogZG9jL01ha2VmaWxlLmFtOiBVc2UgaXQuCisJKiBzcmMvbGFsci5oLCBzcmMvc3ltdGFiLmg6IEluaXRpYWwgZG94eWdlbmF0aW9uLgorCisyMDA2LTA2LTI2ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCURvbid0IG1pc3MgJW1lcmdlIHJlc3VsdCB0eXBlIHdhcm5pbmdzIGp1c3QgYmVjYXVzZSB0aGUgTEhTIHR5cGVzIGFyZQorCWRlY2xhcmVkIGFmdGVyIHRoZSAlbWVyZ2UuICBUaGlzIGNvbnRpbnVlcyB0aGUgZWZmb3J0IG9mIHRoZSBwcmV2aW91cworCXBhdGNoLgorCSogc3JjL3JlYWRlci5jIChnZXRfbWVyZ2VfZnVuY3Rpb24pOiBEb24ndCBzZXQgdGhlIG1lcmdlciB0eXBlIHlldC4KKwkocmVjb3JkX21lcmdlX2Z1bmN0aW9uX3R5cGUpOiBOZXcgZnVuY3Rpb24gZm9yIHNldHRpbmcgdGhlIG1lcmdlciB0eXBlCisJYW5kIGNoZWNraW5nIGZvciBjbGFzaGVzLgorCShncmFtbWFyX2N1cnJlbnRfcnVsZV9tZXJnZV9zZXQpOiBTZXQgdGhlIGxvY2F0aW9uIG9mIHRoZSAlbWVyZ2UgZm9yCisJdGhlIGN1cnJlbnQgcnVsZS4KKwkocGFja2dyYW0pOiBJbnZva2UgcmVjb3JkX21lcmdlX2Z1bmN0aW9uX3R5cGUgZm9yIGVhY2ggcnVsZSBub3cgdGhhdAorCWFsbCBzeW1ib2wgdHlwZSBkZWNsYXJhdGlvbnMgaGF2ZSBiZWVuIHBhcnNlZC4KKwkqIHNyYy9yZWFkZXIuaCAobWVyZ2VyX2xpc3QudHlwZV9kZWNsYXJhdGlvbl9sb2NhdGlvbik6IE5ldyBtZW1iZXIKKwlzdG9yaW5nIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlyc3QgJW1lcmdlIGZyb20gd2hpY2ggdGhlIHR5cGUgZm9yIHRoaXMKKwltZXJnaW5nIGZ1bmN0aW9uIHdhcyBkZXJpdmVkLgorCSogc3JjL3N5bWxpc3QuaCAoc3ltYm9sX2xpc3QubWVyZ2VyX2RlY2xhcmF0aW9uX2xvY2F0aW9uKTogTmV3IG1lbWJlcgorCXN0b3JpbmcgdGhlIGxvY2F0aW9uIG9mIGEgcnVsZSdzICVtZXJnZSwgaWYgYW55LgorCSogdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQgKE1pc3NlZCAlbWVyZ2UgdHlwZSB3YXJuaW5ncyB3aGVuIExIUyB0eXBlIGlzCisJZGVjbGFyZWQgbGF0ZXIpOiBOZXcgdGVzdCB0byBjYXRjaCB0aGUgZXJyb3IgZml4ZWQgYnkgdGhlIGFib3ZlIHBhdGNoLgorCisyMDA2LTA2LTI2ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUdldCBhY3Rpb24gd2FybmluZ3MgKGdyYW1tYXJfcnVsZV9jaGVjaykgcmlnaHQgZXZlbiB3aGVuIHN5bWJvbAorCWRlY2xhcmF0aW9ucyBhcHBlYXIgYWZ0ZXIgdGhlIHJ1bGVzLiAgRGlzY3Vzc2VkIGF0CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDYtMDYvbXNnMDAxMDguaHRtbD4KKwlhbmQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwNi0wNi9tc2cwMDE1MS5odG1sPi4KKwlEb24ndCBtaXN0YWtlIHRoZSB0eXBlIG9mICQkIGluIGEgbWlkcnVsZSB0byBiZSB0aGF0IG9mIGl0cyBwYXJlbnQKKwlydWxlJ3MgJCQuCisJKiBzcmMvcmVhZGVyLmMgKGdyYW1tYXJfY3VycmVudF9ydWxlX2VuZCk6IERvbid0IGludm9rZQorCWdyYW1tYXJfcnVsZV9jaGVjayB5ZXQgc2luY2Ugbm90IGFsbCBzeW1ib2wgZGVjbGFyYXRpb25zIG1heSBoYXZlIGJlZW4KKwlwYXJzZWQgeWV0LgorCShncmFtbWFyX21pZHJ1bGVfYWN0aW9uKTogTGlrZXdpc2UuCisJRG9uJ3QgcmVjb3JkIHdoZXRoZXIgdGhlIG1pZHJ1bGUncyAkJCBoYXMgYmVlbiB1c2VkIHlldCBzaW5jZSBhY3Rpb25zCisJaGF2ZW4ndCBiZWVuIHRyYW5zbGF0ZWQgeWV0LgorCVJlY29yZCB0aGUgbWlkcnVsZSdzIHBhcmVudCBydWxlIGFuZCBpdHMgUkhTIGluZGV4IHdpdGhpbiB0aGUgcGFyZW50CisJcnVsZS4KKwkoZ3JhbW1hcl9jdXJyZW50X3J1bGVfYWN0aW9uX2FwcGVuZCk6IERvbid0IHRyYW5zbGF0ZSB0aGUgYWN0aW9uIHlldAorCXNpbmNlIG5vdCBhbGwgc3ltYm9sIGRlY2xhcmF0aW9ucyBtYXkgaGF2ZSBiZWVuIHBhcnNlZCB5ZXQgYW5kLCB0aHVzLAorCXdhcm5pbmdzIGFib3V0IHR5cGVzIGZvciAkJCwgJG4sIEAkLCBhbmQgQG4gY2FuJ3QgYmUgcmVwb3J0ZWQgeWV0LgorCShwYWNrZ3JhbSk6IFRyYW5zbGF0ZSB0aGUgYWN0aW9uIGFuZCBpbnZva2UgZ3JhbW1hcl9ydWxlX2NoZWNrIG5vdyB0aGF0CisJYWxsIHN5bWJvbCBkZWNsYXJhdGlvbnMgaGF2ZSBiZWVuIHBhcnNlZC4KKwkqIHNyYy9zY2FuLWNvZGUubCAoaGFuZGxlX2FjdGlvbl9kb2xsYXIpOiBOb3cgdGhhdCB0aGlzIGlzIGludm9rZWQKKwlhZnRlciBwYXJzaW5nIHRoZSBlbnRpcmUgZ3JhbW1hciBmaWxlLCB0aGUgc3ltYm9sIGxpc3QgaGVyZSBpbiB0aGUgY2FzZQorCW9mIGEgbWlkcnVsZSBpcyBhY3R1YWxseSB0aGUgbWlkcnVsZSdzIGVtcHR5IFJIUywgc28gcmVmZXJlbmNlIGl0cworCXBhcmVudCBydWxlJ3MgUkhTIHdoZXJlIG5lY2Vzc2FyeS4KKwlPbiB0aGUgb3RoZXIgaGFuZCwgbm93IHRoYXQgeW91IGNhbiBhbHJlYWR5IGtub3cgaXQncyBhIG1pZHJ1bGUsIHlvdQorCWFyZW4ndCBmb3JjZWQgdG8gdGhpbmsgJCQgaGFzIHRoZSBzYW1lIHR5cGUgYXMgaXRzIHBhcmVudCBydWxlJ3MgJCQuCisJKGhhbmRsZV9hY3Rpb25fYXQpOiBJbiB0aGUgY2FzZSBvZiBhIG1pZHJ1bGUsIHJlZmVyZW5jZSB0aGUgcGFyZW50IHJ1bGUKKwl3aGVyZSBuZWNlc3NhcnkuCisJKiBzcmMvc3ltbGlzdC5jIChzeW1ib2xfbGlzdF9uZXcpOiBJbml0aWFsaXplIG5ldyBtaWRydWxlLXJlbGF0ZWQKKwltZW1iZXJzLgorCShzeW1ib2xfbGlzdF9sZW5ndGgpOiBOb3cgdGhhdCB0aGlzIGlzIGludm9rZWQgYWZ0ZXIgYWxsIHJ1bGVzIGhhdmUKKwliZWVuIHBhcnNlZCwgYSBOVUxMIHN5bWJvbCAocmF0aGVyIHRoYW4gYSBOVUxMIHN5bWJvbCBsaXN0IG5vZGUpCisJdGVybWluYXRlcyBhIHJ1bGUuICBzeW1ib2xfbGlzdF9wcmludCBhbHJlYWR5IGRvZXMgdGhpcyBjb3JyZWN0bHkuCisJKiBzcmMvc3ltbGlzdC5oIChzeW1ib2xfbGlzdC5taWRydWxlX3BhcmVudF9ydWxlLAorCXN5bWJvbF9saXN0Lm1pZHJ1bGVfcGFyZW50X3Joc19pbmRleCk6IE5ldyBtZW1iZXJzIHNvIHRoYXQgbWlkcnVsZXMgY2FuCisJcmVtZW1iZXIgdGhlaXIgcmVsYXRpb25zaGlwcyB3aXRoIHRoZWlyIHBhcmVudHMuCisJKiB0ZXN0cy9pbnB1dC5hdCAoVHlwZSBDbGFzaGVzKTogRXh0ZW5kIHRvIGNhdGNoIHRoZSBtaWRydWxlICQkIGVycm9yCisJZml4ZWQgYnkgdGhlIGFib3ZlIHBhdGNoLgorCShfQVRfVU5VU0VEX1ZBTFVFU19ERUNMQVJBVElPTlMsIEFUX0NIRUNLX1VOVVNFRF9WQUxVRVMpOiBOZXcgbTQgbWFjcm9zCisJaW1wbGVtZW50aW5nLi4uCisJKFVudXNlZCB2YWx1ZXMpOiAuLi4gdGhpcyBvbGQgdGVzdCBjYXNlIGFuZC4uLgorCShVbnVzZWQgdmFsdWVzIGJlZm9yZSBzeW1ib2wgZGVjbGFyYXRpb25zKTogLi4uIHRoaXMgbmV3IHRlc3QgY2FzZS4KKwlUaGlzIG9uZSBpcyB0aGUgc2FtZSBhcyBgVW51c2VkIHZhbHVlcycgZXhjZXB0IHRoYXQgYWxsIHN5bWJvbAorCWRlY2xhcmF0aW9ucyBhcHBlYXIgYWZ0ZXIgdGhlIHJ1bGVzIGluIG9yZGVyIHRvIGNhdGNoIHRoZSByZXN0IG9mIHRoZQorCWVycm9ycyBmaXhlZCBieSB0aGUgYWJvdmUgcGF0Y2guCisKKzIwMDYtMDYtMjYgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJTW9yZSBjbGVhbnVwLgorCSogc3JjL3JlYWRlci5jIChjdXJyZW50X3J1bGUpOiBEZWNsYXJlIGl0IHN0YXRpYyBzaW5jZSBpdCdzIG5vIGxvbmdlcgorCXVzZWQgb3V0c2lkZSB0aGlzIGZpbGUuCisJKGdyYW1tYXJfY3VycmVudF9ydWxlX2FjdGlvbl9hcHBlbmQpOiBSZW1vdmUgcmVkdW5kYW50IGFyZ3VtZW50cyBmcm9tCisJdHJhbnNsYXRlX3J1bGVfYWN0aW9uIGludm9jYXRpb24uCisJKiBzcmMvcmVhZGVyLmggKGN1cnJlbnRfcnVsZSk6IFJlbW92ZSB0aGlzIHVudXNlZCBleHRlcm4uCisJKiBzcmMvc2Nhbi1jb2RlLmggKHRyYW5zbGF0ZV9ydWxlX2FjdGlvbik6IFJlbW92ZSByZWR1bmRhbnQgYXJndW1lbnRzLgorCSogc3JjL3NjYW4tY29kZS5sICh0cmFuc2xhdGVfcnVsZV9hY3Rpb24pOiBMaWtld2lzZS4KKworMjAwNi0wNi0yNSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlDbGVhbiB1cCB5ZXN0ZXJkYXkncyBwYXRjaC4KKwkqIHBhcnNlLWdyYW0ueSAocmhzKTogTW92ZSBncmFtbWFyX21pZHJ1bGVfYWN0aW9uIGludm9jYXRpb24gZnJvbSBoZXJlCisJdG8uLi4KKwkqIHNyYy9yZWFkZXIuYyAoZ3JhbW1hcl9jdXJyZW50X3J1bGVfYWN0aW9uX2FwcGVuZCk6IC4uLiBoZXJlIGZvcgorCWNvbnNpc3RlbmN5IHdpdGggZ3JhbW1hcl9jdXJyZW50X3J1bGVfc3ltYm9sX2FwcGVuZC4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKEJyYWNlZCBjb2RlIGluIGRlY2xhcmF0aW9uIGluIHJ1bGVzIHNlY3Rpb24pOgorCU1ha2UgeXllcnJvciBhbmQgeXlsZXggc3RhdGljIGFzIHVzdWFsLgorCisyMDA2LTA2LTI0ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUZpeCBidWcgdGhhdCBtaXN0YWtlcyBicmFjZWQgY29kZSBpbiBhIGRlY2xhcmF0aW9uIGluIHRoZSBydWxlcyBzZWN0aW9uCisJdG8gYmUgYSBydWxlIGFjdGlvbi4gIE1lbnRpb25lZCBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA2LTA2L21zZzAwMTA1Lmh0bWw+LgorCSogc3JjL3NjYW4tZ3JhbS5sOiBNb3ZlIG1pZHJ1bGUgYWN0aW9uIGRldGVjdGlvbiBmcm9tIHRoZSBzdGFydCBvZiB0aGUKKwlzY2FubmluZyBvZiBhbnkgYnJhY2VkIGNvZGUgdG8uLi4KKwkqIHNyYy9wYXJzZS1ncmFtLnkgKHJocyk6IC4uLiB0aGUgcGFyc2luZyBvZiBicmFjZWQgY29kZSBhcyBhIHJ1bGUKKwlhY3Rpb24uICBGb3IgcmVhZGFiaWxpdHksIHVzZSAkMiBhbmQgQDIgcmF0aGVyIHRoYW4gdGhlIGVxdWl2YWxlbnQKKwlnbG9iYWwgdmFyaWFibGVzLgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoQnJhY2VkIGNvZGUgaW4gZGVjbGFyYXRpb24gaW4gcnVsZXMgc2VjdGlvbik6CisJTmV3IHRlc3QgdG8gY2F0Y2ggdGhlIGVycm9yIGZpeGVkIGJ5IHRoZSBhYm92ZSBwYXRjaC4KKworCVdvcmsgb24gY29kZSByZWFkYWJpbGl0eSBzb21lLgorCSogc3JjL3NjYW4tY29kZS5sIChjdXJyZW50X3J1bGUpOiBHZXQgcmlkIG9mIHRoaXMgbWlzbGVhZGluZyBhbmQKKwlyZWR1bmRhbnQgZGVjbGFyYXRpb246IGl0J3MgYWN0dWFsbHkgZXh0ZXJuJ2VkIGluIHJlYWRlci5oLgorCShZWV9ERUNMLCBjb2RlX2xleCwgaGFuZGxlX2FjdGlvbl9kb2xsYXIsIGhhbmRsZV9hY3Rpb25fYXQsCisJdHJhbnNsYXRlX2FjdGlvbik6IEFkZCBhIHJ1bGUgYXJndW1lbnQgYW5kIHVzZSBpdCBpbnN0ZWFkIG9mIHRoZSBnbG9iYWwKKwljdXJyZW50X3J1bGUuCisJKHRyYW5zbGF0ZV9ydWxlX2FjdGlvbik6IFRoaXMgYWxyZWFkeSByZWNlaXZlcyBjdXJyZW50X3J1bGUgdGhyb3VnaCBhbgorCWFyZ3VtZW50LCBzbyBwYXNzIGl0IG9uIHRvIHRyYW5zbGF0ZV9hY3Rpb24gaW5zdGVhZCBvZiBhc3NpZ25pbmcKKwljdXJyZW50X3J1bGUgdG8gY3VycmVudF9ydWxlLgorCSh0cmFuc2xhdGVfc3ltYm9sX2FjdGlvbiwgdHJhbnNsYXRlX2NvZGUpOiBQYXNzIHJ1bGUgPSBOVUxMIHRvCisJdHJhbnNsYXRlX2FjdGlvbi4KKworMjAwNi0wNi0yMyAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlSZW5hbWUgJWJlZm9yZS1kZWZpbml0aW9ucyB0byAlc3RhcnQtaGVhZGVyIGFuZCAlYWZ0ZXItZGVmaW5pdGlvbnMgdG8KKwklZW5kLWhlYWRlci4gIERvbid0IHVzZSB0aGVzZSBkZWNsYXJhdGlvbnMgdG8gc2VwYXJhdGUgcHJlLXByb2xvZ3VlCisJYmxvY2tzIGZyb20gcG9zdC1wcm9sb2d1ZSBibG9ja3MuICBBZGQgbmV3IG9yZGVyLWluZGVwZW5kZW50CisJZGVjbGFyYXRpb25zICViZWZvcmUtaGVhZGVyIGFuZCAlYWZ0ZXItaGVhZGVyIGFzIGFsdGVybmF0aXZlcyB0byB0aGUKKwl0cmFkaXRpb25hbCBZYWNjIHByZS1wcm9sb2d1ZSBhbmQgcG9zdC1wcm9sb2d1ZSBibG9ja3MuICBEaXNjdXNzZWQgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwNi0wNi9tc2cwMDExMC5odG1sPi4KKwkqIE5FV1MgKDIuMyspOiBVcGRhdGUgZm9yIHRoZXNlIGNoYW5nZXMuCisJKiBkYXRhL2dsci5jIChiNF9iZWZvcmVfZGVmaW5pdGlvbnMpOiBVcGRhdGUgdG8uLi4KKwkoYjRfc3RhcnRfaGVhZGVyKTogLi4uIHRoaXMuCisJKGI0X2FmdGVyX2RlZmluaXRpb25zKTogVXBkYXRlIHRvLi4uCisJKGI0X2VuZF9oZWFkZXIpOiAuLi4gdGhpcy4KKwkqIGRhdGEvZ2xyLmNjOiBMaWtld2lzZS4KKwkqIGRhdGEvbGFscjEuY2M6IExpa2V3aXNlLgorCSogZGF0YS95YWNjLmM6IExpa2V3aXNlLgorCSogZG9jL2Jpc29uLnRleGluZm8gKFRoZSBwcm9sb2d1ZSk6IFVwZGF0ZSBuYW1lcywgYW5kIHJlcGxhY2UgcmVtYWluaW5nCisJcHJvbG9ndWUgYmxvY2tzIHdpdGggJSotaGVhZGVyIGRlY2xhcmF0aW9ucy4KKwkoQ2FsYysrIFBhcnNlcik6IExpa2V3aXNlLgorCShEZWNsIFN1bW1hcnkpOiBVcGRhdGUgbmFtZXMuCisJKFRhYmxlIG9mIFN5bWJvbHMpOiBVcGRhdGUgZGVzY3JpcHRpb24uCisJKiBzcmMvcGFyc2UtZ3JhbS55IChQRVJDRU5UX0FGVEVSX0RFRklOSVRJT05TKTogVXBkYXRlIHRvLi4uCisJKFBFUkNFTlRfRU5EX0hFQURFUik6IC4uLiB0aGlzLgorCShQRVJDRU5UX0JFRk9SRV9ERUZJTklUSU9OUyk6IFVwZGF0ZSB0by4uLgorCShQRVJDRU5UX1NUQVJUX0hFQURFUik6IC4uLiB0aGlzLgorCShQRVJDRU5UX0FGVEVSX0hFQURFUiwgUEVSQ0VOVF9CRUZPUkVfSEVBREVSKTogTmV3IHRva2Vucy4KKwkoZGVjbGFyYXRpb24pOiBVcGRhdGUgdG9rZW4gbmFtZXMgYW5kIG00IG1hY3JvIG5hbWVzLgorCVdoZW4gcGFyc2luZyAlZW5kLWhlYWRlciBhbmQgJXN0YXJ0LWhlYWRlciwgaW52b2tlIHRyYW5zbGF0ZV9jb2RlCisJYmVmb3JlIG11c2NsZV9jb2RlX2dyb3csIGFuZCBubyBsb25nZXIgc2V0IGdsb2JhbCBib29sZWFucyB0byByZW1lbWJlcgorCXdoZXRoZXIgdGhlc2UgZGVjbGFyYXRpb25zIGhhdmUgYmVlbiBzZWVuLgorCVBhcnNlIG5ldyAlYWZ0ZXItaGVhZGVyIGFuZCAlYmVmb3JlLWhlYWRlci4KKwkqIHNyYy9yZWFkZXIuYyAoYmVmb3JlX2RlZmluaXRpb25zLCBhZnRlcl9kZWZpbml0aW9ucyk6IFJlbW92ZS4KKwkocHJvbG9ndWVfYXVnbWVudCk6IEFjY2VwdCBhIG5ldyBib29sIGFyZ3VtZW50IHRvIHNwZWNpZnkgd2hldGhlciB0bworCWF1Z21lbnQgdGhlIHByZS1wcm9sb2d1ZSBvciBwb3N0LXByb2xvZ3VlLgorCSogc3JjL3JlYWRlci5oIChiZWZvcmVfZGVmaW5pdGlvbnMsIGFmdGVyX2RlZmluaXRpb25zKTogUmVtb3ZlIHRoZXNlCisJZXh0ZXJuJ3MuCisJKHByb2xvZ3VlX2F1Z21lbnQpOiBBZGQgbmV3IGJvb2wgYXJndW1lbnQuCisJKiBzcmMvc2Nhbi1ncmFtLmwgKFBFUkNFTlRfQUZURVJfREVGSU5JVElPTlMpOiBVcGRhdGUgdG8uLi4KKwkoUEVSQ0VOVF9FTkRfSEVBREVSKTogLi4uIHRoaXMuCisJKFBFUkNFTlRfQkVGT1JFX0RFRklOSVRJT05TKTogVXBkYXRlIHRvLi4uCisJKFBFUkNFTlRfU1RBUlRfSEVBREVSKTogLi4uIHRoaXMuCisJKFBFUkNFTlRfQUZURVJfSEVBREVSLCBQRVJDRU5UX0JFRk9SRV9IRUFERVIpOiBOZXcgdG9rZW5zLgorCSogdGVzdHMvYWN0aW9ucy5hdCAoUHJpbnRlcnMgYW5kIERlc3RydWN0b3JzKTogVXBkYXRlIG5hbWVzLgorCisyMDA2LTA2LTIyICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUFkZCBjb21wYXJpc29uIG9wZXJhdG9ycyBmb3IgQysrIGxvY2F0aW9uIGNsYXNzZXMuICBEaXNjdXNzZWQgYXQKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwNi0wNi9tc2cwMDA5Mi5odG1sPi4KKwkqIGRhdGEvYysrLm00IChiNF9kZWZpbmVfbG9jYXRpb25fY29tcGFyaXNvbik6IE5ldyBib29sZWFuICVkZWZpbmUKKwlkZWNsYXJhdGlvbiBpbmRpY2F0aW5nIHdoZXRoZXIgZmlsZW5hbWVfdHlwZSBoYXMgYW4gb3BlcmF0b3I9PS4gIElmCisJZmlsZW5hbWVfdHlwZSBpcyBgc3RkOjpzdHJpbmcnLCBpdCBkZWZhdWx0cyB0byBgMScsIGAwJyBvdGhlcndpc2UuCisJKiBkYXRhL2xvY2F0aW9uLmNjOiBJZmYgYjRfZGVmaW5lX2xvY2F0aW9uX2NvbXBhcmlzb24gaXMgYDEnLCBhZGQKKwlvcGVyYXRvcj09IGFuZCBvcGVyYXRvciE9IGZvciBjbGFzcyBwb3NpdGlvbiBhbmQgZm9yIGNsYXNzIGxvY2F0aW9uLgorCisJU29tZSBtaW5vciBmaXhlcy4KKwkqIHNyYy9zY2FuLWFjdGlvbi5sOiBSZW1vdmUgdW51c2VkIGZpbGUuCisJKiBzcmMvc3ltdGFiLmMgKHN5bWJvbF9wcmludGVyX3NldCk6IFVzZSBwcmludGVyX2xvY2F0aW9uIG5vdAorCWRlc3RydWN0b3JfbG9jYXRpb24uCisJKiBzcmMvc3ltdGFiLmggKHN0cnVjdCBzeW1ib2wpOiBSZXBsYWNlIGluY29ycmVjdCBzb3VyY2UgY29tbWVudCBmb3IKKwlwcmludGVyIG1lbWJlcnMuCisJKiB0ZXN0cy9pbnB1dC5hdCAoSW5jb21wYXRpYmxlIEFsaWFzZXMpOiBVcGRhdGUgb3V0cHV0IHdpdGggY29ycmVjdAorCXByaW50ZXIgbG9jYXRpb24uCisKKzIwMDYtMDYtMjAgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJRG9uJ3QgcHV0IHRoZSBwcmUtcHJvbG9ndWUgaW4gdGhlIGhlYWRlciBmaWxlLiAgRm9yIHRoZSB5YWNjLmMgY29kZQorCWZpbGUgYW5kIHRoZSBnbHIuYyBoZWFkZXIgYW5kIGNvZGUgZmlsZXMsIG1vdmUgdGhlIHByZS1wcm9sb2d1ZSBiZWZvcmUKKwl0aGUgdG9rZW4gZGVmaW5pdGlvbnMuICBBZGQgbmV3ICViZWZvcmUtZGVmaW5pdGlvbnMgYW5kCisJJWFmdGVyLWRlZmluaXRpb25zIHRvIGRlY2xhcmUgY29kZSB0aGF0IHdpbGwgZ28gaW4gYm90aCB0aGUgaGVhZGVyIGZpbGUKKwlhbmQgY29kZSBmaWxlLiAgRGlzY3Vzc2VkIGF0CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDUtMTIvbXNnMDAwMDAuaHRtbD4sCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDYtMDEvbXNnMDAwMTYuaHRtbD4sCisJYW5kCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDYtMDYvbXNnMDAwNTUuaHRtbD4uCisJKiBORVdTICgyLjMrKTogRGVzY3JpYmUgdGhlc2UgY2hhbmdlcy4KKwkqIGRhdGEvZ2xyLmMgKGI0X3ByZV9wcm9sb2d1ZSk6IE1vdmUgZnJvbSB3aXRoaW4gdG8gYmVmb3JlLi4uCisJKGI0X3NoYXJlZF9kZWNsYXJhdGlvbnMpOiAuLi4gdGhpcy4KKwlBZGQgbmV3IGI0X2JlZm9yZV9kZWZpbml0aW9ucyBiZWZvcmUgYjRfdG9rZW5fZW51bXMuCisJQWRkIG5ldyBiNF9hZnRlcl9kZWZpbml0aW9ucyBhdCB0aGUgZW5kLgorCSogZGF0YS9nbHIuY2MgKGI0X3ByZV9wcm9sb2d1ZSk6IFJlcGxhY2Ugd2l0aC4uLgorCShiNF9iZWZvcmVfZGVmaW5pdGlvbnMpOiAuLi4gdGhpcyBpbiB0aGUgaGVhZGVyIGZpbGUuCisJKGI0X2FmdGVyX2RlZmluaXRpb25zKTogTmV3IG5lYXIgdGhlIGVuZCBvZiB0aGUgaGVhZGVyIGZpbGUuCisJKiBkYXRhL2xhbHIxLmNjIChiNF9wcmVfcHJvbG9ndWUpOiBNb3ZlIGZyb20gdGhlIGhlYWRlciBmaWxlIHRvIHRoZQorCWNvZGUgZmlsZSByaWdodCBiZWZvcmUgaW5jbHVkaW5nIHRoZSBoZWFkZXIgZmlsZS4KKwkoYjRfYmVmb3JlX2RlZmluaXRpb25zKTogTmV3IGluIHRoZSBwcmV2aW91cyBwb3NpdGlvbiBvZgorCWI0X3ByZV9wcm9sb2d1ZSBpbiB0aGUgaGVhZGVyIGZpbGUuCisJKGI0X2FmdGVyX2RlZmluaXRpb25zKTogTmV3IG5lYXIgdGhlIGVuZCBvZiB0aGUgaGVhZGVyIGZpbGUuCisJKiBkYXRhL3lhY2MuYzogQ2xlYW4gdXAgc29tZSBtNCBxdW90aW5nIGVzcGVjaWFsbHkgaW4gdGhlIGhlYWRlciBmaWxlLgorCShiNF90b2tlbl9lbnVtc19kZWZpbmVzKTogSW4gdGhlIGNvZGUgZmlsZSwgbW92ZSB0byByaWdodCBiZWZvcmUKKwlZWVNUWVBFIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBoZWFkZXIgZmlsZS4KKwkoYjRfYmVmb3JlX2RlZmluaXRpb25zKTogTmV3IHJpZ2h0IGJlZm9yZSBiNF90b2tlbl9lbnVtc19kZWZpbmVzIGluCisJYm90aCB0aGUgaGVhZGVyIGFuZCBjb2RlIGZpbGUuCisJKGI0X2FmdGVyX2RlZmluaXRpb25zKTogTmV3IHJpZ2h0IGFmdGVyIFlZTFRZUEUgYW5kIHl5bGxvYyBpbiBib3RoIHRoZQorCWhlYWRlciBhbmQgY29kZSBmaWxlLgorCSogZG9jL2Jpc29uLnRleGluZm8gKFByb2xvZ3VlKTogU2hvdyB1c2Ugb2YgJWJlZm9yZS1kZWZpbml0aW9ucyBpbnN0ZWFkCisJb2YgcHJvbG9ndWVzIGZvciAldW5pb24gZGVwZW5kZW5jaWVzLgorCShEZWNsIFN1bW1hcnkpOiBJbiAlZGVmaW5lcyBkZXNjcmlwdGlvbiwgbWVudGlvbiB0aGUgZWZmZWN0IG9mCisJJWJlZm9yZS1kZWZpbml0aW9ucyBhbmQgJWFmdGVyLWRlZmluaXRpb25zIG9uIHRoZSBoZWFkZXIgZmlsZS4KKwkoQ2FsYysrIFBhcnNlcik6IEZvcndhcmQgZGVjbGFyZSBkcml2ZXIgaW4gYSAlYmVmb3JlLWRlZmluaXRpb25zIHJhdGhlcgorCXRoYW4gaW4gdGhlIHByZS1wcm9sb2d1ZSBzbyB0aGF0IG1ha2UgY2hlY2sgc3VjY2VlZHMuCisJKFRhYmxlIG9mIFN5bWJvbHMpOiBBZGQgZW50cmllcyBmb3IgJWJlZm9yZS1kZWZpbml0aW9ucyBhbmQKKwklYWZ0ZXItZGVmaW5pdGlvbnMuCisJKiBzcmMvcGFyc2UtZ3JhbS55IChQRVJDRU5UX0JFRk9SRV9ERUZJTklUSU9OUyk6IE5ldyB0b2tlbiBmb3IKKwklYmVmb3JlLWRlZmluaXRpb25zLgorCShQRVJDRU5UX0FGVEVSX0RFRklOSVRJT05TKTogTmV3IHRva2VuIGZvciAlYWZ0ZXItZGVmaW5pdGlvbnMuCisJKGRlY2xhcmF0aW9uKTogUGFyc2UgdGhvc2UgZGVjbGFyYXRpb25zIGFuZCBhcHBlbmQgdG8KKwliNF9iZWZvcmVfZGVmaW5pdGlvbnMgYW5kIGI0X2FmdGVyX2RlZmluaXRpb25zLCByZXNwZWN0aXZlbHkuCisJKiBzcmMvcmVhZGVyLmMgKGJlZm9yZV9kZWZpbml0aW9ucywgYWZ0ZXJfZGVmaW5pdGlvbnMpOiBOZXcgYm9vbHMgdG8KKwl0cmFjayB3aGV0aGVyIHRob3NlIGRlY2xhcmF0aW9ucyBoYXZlIGJlZW4gc2Vlbi4KKwkocHJvbG9ndWVfYXVnbWVudCk6IEFkZCB0byB0aGUgcG9zdC1wcm9sb2d1ZSBpZiAldW5pb24sCisJJWJlZm9yZS1kZWZpbml0aW9ucywgb3IgJWFmdGVyLWRlZmluaXRpb25zIGhhcyBiZWVuIHNlZW4uCisJKiBzcmMvcmVhZGVyLmggKGJlZm9yZV9kZWZpbml0aW9ucywgYWZ0ZXJfZGVmaW5pdGlvbnMpOiBOZXcgZXh0ZXJuJ3MuCisJKiBzcmMvc2Nhbi1ncmFtLmw6IFNjYW4gdGhlIG5ldyBkZWNsYXJhdGlvbnMuCisJKiB0ZXN0cy9hY3Rpb25zLmF0IChfQVRfQ0hFQ0tfUFJJTlRFUl9BTkRfREVTVFJVQ1RPUik6IFBsYWNlIHRoZSBzZWNvbmQKKwlwcm9sb2d1ZSBibG9jayBpbiBhICViZWZvcmUtZGVmaW5pdGlvbnMgb3IgYSAlYWZ0ZXItZGVmaW5pdGlvbnMgYmFzZWQKKwlvbiB3aGV0aGVyIHRoZSAldW5pb24gaXMgZGVjbGFyZWQuCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChFYXJseSB0b2tlbiBkZWZpbml0aW9ucyB3aXRoIC0teWFjYywgRWFybHkgdG9rZW4KKwlkZWZpbml0aW9ucyB3aXRob3V0IC0teWFjYyk6IE1vdmUgdGVzdHMgZm9yIHRva2VuIGRlZmluaXRpb25zIGludG8gdGhlCisJcG9zdC1wcm9sb2d1ZSBzaW5jZSB0b2tlbiBuYW1lcyBhcmUgbm8gbG9uZ2VyIGRlZmluZWQgaW4gdGhlCisJcHJlLXByb2xvZ3VlLgorCisyMDA2LTA2LTIwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3N5bXRhYi5oLCBzcmMvc3ltdGFiLmMgKHN5bWJvbF9mcm9tX3VuaXFzdHIpOiBOZXcuCisJKHN5bWJvbF9nZXQpOiBVc2UgaXQuCisJKiBzcmMvcGFyc2UtZ3JhbS55OiBVc2UgaXQuCisKKzIwMDYtMDYtMTkgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBzcmMvc2Nhbi1ncmFtLmw6IFJlbW92ZSB1bnVzZWQgZGVjbGFyYXRpb24gb2YgbGFzdF9zdHJpbmdfMSBzbyB0aGUKKwlidWlsZCBzdWNjZWVkcyB3aGVuIGNvbmZpZ3VyZWQgd2l0aCAtLWVuYWJsZS1nY2Mtd2FybmluZ3MuCisKKzIwMDYtMDYtMTkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBzcmMvcGFyc2UtZ3JhbS55IChjaGFyX25hbWUpOiBOZXcgZnVuY3Rpb24uCisJKENIQVIsIFNUUklORywgc3RyaW5nX2NvbnRlbnQpOiBGb3IgJXByaW50ZXIsIHByb3Blcmx5IGVzY2FwZS4KKwkoSUQpOiBQcmVmZXIgZnB1dHMgdG8gZnByaW50Zi4KKwkoaWQpOiBSZWluZGVudCB0byBiZSBjb25zaXN0ZW50IHdpdGggb3RoZXIgcnVsZXMuCisJUHJvcGVybHkgcXVvdGUgY2hhci4KKworCVRoZSBUcmFuc2xhdGlvbiBQcm9qZWN0IGNoYW5nZWQgaXRzIHdheSBvZiBwdWJsaXNoaW5nIHRyYW5zbGF0aW9ucworCXRvIG1haW50YWluZXJzLiAgSSBoYXZlbid0IHJlY2VpdmVkIGFueSByZXNwb25zZXMgdG8gbXkgcmVxdWVzdAorCWZvciBzdXBwb3J0aW5nIHRoZSBvbGQgd2F5LCBvciBmb3IgZG9jdW1lbnRpbmcgdGhlIG5ldyB3YXkuICBJCisJaGF2ZSBtb2RpZmllZCAnYm9vdHN0cmFwJyB0byB1c2Ugc2NyZWVuIHNjcmFwaW5nCisJKGluIHRoaXMgY2FzZSwgSFRNTCBzY3JhcGluZykuICBUaGlzIGlzIHVucmVsaWFibGUgYW5kIGluZWxlZ2FudCwKKwlidXQgSSBkb24ndCBzZWUgYW55IGJldHRlciB3YXkuICBZdWNrLgorCSogYm9vdHN0cmFwIChUUF9VUkwsIFdHRVRfQ09NTUFORCk6IE5ldyB2YXJzLgorCShnZXRfdHJhbnNsYXRpb25zKTogTmV3IGZ1bmN0aW9uLCB3aGljaCB1c2VzIEhUTUwgc2NyYXBpbmcgdG8KKwlkZWR1Y2UgbG9jYXRpb25zIG9mIGxhdGVzdCB0cmFuc2xhdGlvbnMuCisJVXNlIHRoaXMgZnVuY3Rpb24gdG8gZ3JhYiBib3RoIGJpc29uIGFuZCBiaXNvbi1ydW50aW1lIC5wbyBmaWxlcy4KKwlEb24ndCBib3RoZXIgcHJpbWluZyB0aGUgcHVtcCBmb3IgdGhlIHJ1bnRpbWUtcG8gZG9tYWluIGFueSBtb3JlLAorCWFzIGl0J3Mgbm93IHRyYW5zbGF0ZWQgYmV0dGVyIHRoYW4gYmlzb24gaXMuCisKKzIwMDYtMDYtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvc2Nhbi1ncmFtLmw6IE5vIGxvbmdlciAicGFyc2UiIHRoaW5ncyBhZnRlciBgJXVuaW9uJyB1bnRpbAorCWB7Jy4gIFJhdGhlciwgcmV0dXJuIGEgc2luZ2xlICIldW5pb24iIHRva2VuLgorCU5vIGxvbmdlciBtYWtlIHN5bWJvbHM6IHJldHVybiBzdHJpbmdzLCBhbmQgbGVhdmUgdGhlIGNvbnZlcnNpb24KKwl0byBzeW1ib2xzIHRvIHRoZSBwYXJzZXIuCisJKFNDX1BSRV9DT0RFLCB0b2tlbl90eXBlKTogUmVtb3ZlLgorCSogc3JjL3BhcnNlLWdyYW0ueSAoJXVuaW9uKTogTmV3IGZpZWxkIGBjaGFyYWN0ZXInLgorCVNvcnQgdG9rZW5zLgorCShDSEFSKTogTmV3IHRva2VuLgorCShJRCwgSURfQ09MT04pOiBOb3cgdGhhdCB0aGUgc2Nhbm5lciBubyBsb25nZXIgbWFrZXMgdGhlbQorCWlkZW50aWZpZXJzLCBhZGp1c3QgYWxsIHVzZXMgdG8gaW52b2tlIHN5bWJvbF9nZXQuCisJKGlkX2NvbG9uKTogTmV3LCB3cmFwcyB0aGUgY29udmVyc2lvbiBmcm9tIHN0cmluZyB0byBzeW1ib2wuCisJKCV1bmlvbik6IEFjY2VwdCBhIHBvc3NpYmxlIHVuaW9uX25hbWUuCisJKHN5bWJvbCk6IE5vdyBjYW4gYmUgYSBjaGFyLgorCSogZGF0YS9jLm00IChiNF91bmlvbl9uYW1lKTogTGVhdmUgYSBkZWZhdWx0IHZhbHVlLgorCSogZGF0YS9nbHIuYywgZGF0YS95YWNjLmM6IFVzZSBpdC4KKworMjAwNi0wNi0xMSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlGb3IgYXNzb2NpYXRpbmcgdG9rZW4gbnVtYmVycyB3aXRoIHRva2VuIG5hbWVzIGZvciAieWFjYy5jIiwgZG9uJ3QgdXNlCisJI2RlZmluZSBzdGF0ZW1lbnRzIHVubGVzcyBgLS15YWNjJyBpcyBzcGVjaWZpZWQ7IGFsd2F5cyB1c2UgZW51bQorCXl5dG9rZW50eXBlLiAgTW9zdCBpbXBvcnRhbnQgZGlzY3Vzc2lvbnMgc3RhcnQgYXQ6CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDUtMDkvbXNnMDAwNTMuaHRtbD4sCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDUtMTIvbXNnMDAwNTIuaHRtbD4sCisJYW5kCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDYtMDYvbXNnMDAwNDMuaHRtbD4uCisJKiBORVdTICgyLjMrKTogTWVudGlvbi4KKwkqIGRhdGEvYy5tNCAoYjRfeWFjY19pZik6IE5ldy4KKwkoYjRfdG9rZW5fZW51bXNfZGVmaW5lcyk6IFVzZSBiNF95YWNjX2lmIHRvIGRlY2lkZSB3aGV0aGVyIHRvIGFkZCB0aGUKKwl0b2tlbiAjZGVmaW5lJ3MuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoQmlzb24gT3B0aW9ucyk6IERlc2NyaWJlIHRoZSBlZmZlY3Qgb2YgYC0teWFjYycKKwlvbiB0b2tlbiBuYW1lIGRlZmluaXRpb25zLgorCSogc3JjL2dldGFyZ3MuYyAodXNhZ2UpOiBDYXBpdGFsaXplIGBZYWNjJyBpbiBFbmdsaXNoLgorCSogc3JjL291dHB1dC5jIChwcmVwYXJlKTogRGVmaW5lIGI0X3lhY2NfZmxhZy4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKEVhcmx5IHRva2VuIGRlZmluaXRpb25zKTogVGVzdCB0aGF0IHRva2VucyBuYW1lcworCWFyZSBkZWZpbmVkIGJlZm9yZSB0aGUgcHJlLXByb2xvZ3VlIG5vdCBqdXN0IGJlZm9yZSB0aGUgcG9zdC1wcm9sb2d1ZS4KKwlSZW1vdmUgdGhpcyB0ZXN0IGNhc2UgYW5kIGNvcHkgdG8uLi4KKwkoRWFybHkgdG9rZW4gZGVmaW5pdGlvbnMgd2l0aCAtLXlhY2MpOiAuLi4gdGhpcyB0byB0ZXN0ICNkZWZpbmUncy4KKwkoRWFybHkgdG9rZW4gZGVmaW5pdGlvbnMgd2l0aG91dCAtLXlhY2MpOiAuLi4gYW5kIHRoaXMgdG8gdGVzdCBlbnVtcy4KKworMjAwNi0wNi0xMSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIE5FV1M6IFJld29yZCB0aGUgcG9zdC0yLjMgY2hhbmdlIHRvIG5vdCBiZSBzbyBvcHRpbWlzdGljIGFib3V0CisJcmVtb3ZpbmcgdGhlIG9sZCAibG9vay1haGVhZCIgc3BlbGxpbmcuCisJVXBkYXRlIHByZXZpb3VzIGxvb2stYWhlYWQvbG9va2FoZWFkIGNoYW5nZSByZXBvcnRzLgorCSogUkVGRVJFTkNFUzogbG9vay1haGVhZCAtPiBsb29rYWhlYWQgKHNpbmNlIHRoYXQncworCXdoYXQgaGUgYWN0dWFsbHkgd3JvdGUpLgorCSogZG9jL3JlZmNhcmQudGV4OiBsb29rIGFoZWFkIC0+IGxvb2thaGVhZCwKKwlsb29rLWFoZWFkIC0+IGxvb2thaGVhZAorCisyMDA2LTA2LTA5ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUZvciBjb25zaXN0ZW5jeSwgdXNlIGBsb29rYWhlYWQnIGluc3RlYWQgb2YgYGxvb2stYWhlYWQnIG9yCisJYGxvb2tfYWhlYWQnLiAgRGlzY3Vzc2VkIHN0YXJ0aW5nIGF0CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDYtMDEvbXNnMDAwNDkuaHRtbD4KKwlhbmQgdGhlbiBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA2LTA2L21zZzAwMDE3Lmh0bWw+LgorCSogTkVXUzogRm9yIHRoZSBuZXh0IHJlbGVhc2UsIG5vdGUgdGhlIGNoYW5nZSB0byBgLS1yZXBvcnQnLgorCSogVE9ETywgZG9jL2Jpc29uLjE6IFVwZGF0ZSBFbmdsaXNoLgorCSogZG9jL2Jpc29uLnRleGluZm86IFVwZGF0ZSBFbmdsaXNoLgorCShVbmRlcnN0YW5kaW5nIFlvdXIgUGFyc2VyLCBCaXNvbiBPcHRpb25zKTogRG9jdW1lbnQgYXMKKwlgLS1yZXBvcnQ9bG9va2FoZWFkJyByYXRoZXIgdGhhbiBgLS1yZXBvcnQ9bG9vay1haGVhZCcuCisJKiBzcmMvY29uZmxpY3RzLmM6IFVwZGF0ZSBFbmdsaXNoIGluIGNvbW1lbnRzLgorCShsb29rYWhlYWRfc2V0KTogUmVuYW1lIGZyb20gbG9va19haGVhZF9zZXQuCisJKGZsdXNoX3JlZHVjZSk6IFJlbmFtZSBhcmd1bWVudCBsb29rX2FoZWFkX3Rva2VucyB0byBsb29rYWhlYWRfdG9rZW5zLgorCShyZXNvbHZlX3NyX2NvbmZsaWN0KTogUmVuYW1lIGxvY2FsIGxvb2tfYWhlYWRfdG9rZW5zIHRvCisJbG9va2FoZWFkX3Rva2VucywgYW5kIHVwZGF0ZSBvdGhlciB1c2VzLgorCShmbHVzaF9zaGlmdCwgc2V0X2NvbmZsaWN0cywgY29uZmxpY3RzX3NvbHZlLCBjb3VudF9zcl9jb25mbGljdHMsCisJY291bnRfcnJfY29uZmxpY3RzLCBjb25mbGljdHNfZnJlZSk6IFVwZGF0ZSB1c2VzLgorCSogc3JjL2dldGFyZ3MuYyAocmVwb3J0X2FyZ3MpOiBNb3ZlICJsb29rYWhlYWQiIGJlZm9yZSBhbHRlcm5hdGUKKwlzcGVsbGluZ3MuCisJKHJlcG9ydF90eXBlcyk6IFVwZGF0ZSB1c2VzLgorCSh1c2FnZSk6IEZvciBgLS1yZXBvcnQnIHVzYWdlIGRlc2NyaXB0aW9uLCBzdGF0ZSBgbG9va2FoZWFkJyBzcGVsbGluZworCXJhdGhlciB0aGFuIGBsb29rLWFoZWFkJy4KKwkqIHNyYy9nZXRhcmdzLmggKHJlcG9ydC5yZXBvcnRfbG9va2FoZWFkX3Rva2Vucyk6IFJlbmFtZSBmcm9tCisJcmVwb3J0X2xvb2tfYWhlYWRfdG9rZW5zLgorCSogc3JjL2xhbHIuYzogVXBkYXRlIEVuZ2xpc2ggaW4gY29tbWVudHMuCisJKGNvbXB1dGVfbG9va2FoZWFkX3Rva2Vucyk6IFJlbmFtZSBmcm9tIGNvbXB1dGVfbG9va19haGVhZF90b2tlbnMuCisJKHN0YXRlX2xvb2thaGVhZF90b2tlbnNfY291bnQpOiBSZW5hbWUgZnJvbQorCXN0YXRlX2xvb2tfYWhlYWRfdG9rZW5zX2NvdW50LgorCVJlbmFtZSBsb2NhbCBuX2xvb2tfYWhlYWRfdG9rZW5zIHRvIG5fbG9va2FoZWFkX3Rva2Vucy4KKwkobG9va2FoZWFkX3Rva2Vuc19wcmludCk6IFJlbmFtZSBmcm9tIGxvb2tfYWhlYWRfdG9rZW5zX3ByaW50LgorCVJlbmFtZSBsb2NhbCBuX2xvb2tfYWhlYWRfdG9rZW5zIHRvIG5fbG9va2FoZWFkX3Rva2Vucy4KKwlVcGRhdGUgb3RoZXIgdXNlcy4KKwlVcGRhdGUgRW5nbGlzaCBpbiBvdXRwdXQuCisJKGFkZF9sb29rYmFja19lZGdlLCBpbml0aWFsaXplX0xBLCBsYWxyLCBsYWxyX2ZyZWUpOiBVcGRhdGUgdXNlcy4KKwkqIHNyYy9wcmludC5jOiBVcGRhdGUgRW5nbGlzaCBpbiBjb21tZW50cy4KKwkobG9va2FoZWFkX3NldCk6IFJlbmFtZSBmcm9tIGxvb2tfYWhlYWRfc2V0LgorCShwcmludF9yZWR1Y3Rpb24pOiBSZW5hbWUgYXJndW1lbnQgbG9va2FoZWFkX3Rva2VuIGZyb20KKwlsb29rX2FoZWFkX3Rva2VuLgorCShwcmludF9jb3JlLCBzdGF0ZV9kZWZhdWx0X3J1bGUsIHByaW50X3JlZHVjdGlvbnMsIHByaW50X3Jlc3VsdHMpOgorCVVwZGF0ZSB1c2VzLgorCSogc3JjL3ByaW50X2dyYXBoLmM6IFVwZGF0ZSBFbmdsaXNoIGluIGNvbW1lbnRzLgorCShwcmludF9jb3JlKTogVXBkYXRlIHVzZXMuCisJKiBzcmMvc3RhdGUuYzogVXBkYXRlIEVuZ2xpc2ggaW4gY29tbWVudHMuCisJKHJlZHVjdGlvbnNfbmV3KTogVXBkYXRlIHVzZXMuCisJKHN0YXRlX3J1bGVfbG9va2FoZWFkX3Rva2Vuc19wcmludCk6IFJlbmFtZSBmcm9tCisJc3RhdGVfcnVsZV9sb29rX2FoZWFkX3Rva2Vuc19wcmludCwgYW5kIHVwZGF0ZSBvdGhlciB1c2VzLgorCSogc3JjL3N0YXRlLmg6IFVwZGF0ZSBFbmdsaXNoIGluIGNvbW1lbnRzLgorCShyZWR1Y3Rpb25zLmxvb2thaGVhZF90b2tlbnMpOiBSZW5hbWUgZnJvbSBsb29rX2FoZWFkX3Rva2Vucy4KKwkoc3RhdGVfcnVsZV9sb29rYWhlYWRfdG9rZW5zX3ByaW50KTogUmVuYW1lIGZyb20KKwlzdGF0ZV9ydWxlX2xvb2tfYWhlYWRfdG9rZW5zX3ByaW50LgorCSogc3JjL3RhYmxlcy5jOiBVcGRhdGUgRW5nbGlzaCBpbiBjb21tZW50cy4KKwkoY29uZmxpY3Rfcm93LCBhY3Rpb25fcm93KTogVXBkYXRlIHVzZXMuCisJKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdAorCShJbmNvcnJlY3QgbG9va2FoZWFkIGR1cmluZyBkZXRlcm1pbmlzdGljIEdMUiwKKwlJbmNvcnJlY3QgbG9va2FoZWFkIGR1cmluZyBub25kZXRlcm1pbmlzdGljIEdMUik6IFJlbmFtZQorCXByaW50X2xvb2tfYWhlYWQgdG8gcHJpbnRfbG9va2FoZWFkLgorCSogdGVzdHMvdG9ydHVyZS5hdDogVXBkYXRlIEVuZ2xpc2ggaW4gY29tbWVudHMuCisJKEFUX0RBVEFfTE9PS0FIRUFEX1RPS0VOU19HUkFNTUFSKTogUmVuYW1lIGZyb20KKwlBVF9EQVRBX0xPT0tfQUhFQURfVE9LRU5TX0dSQU1NQVIuCisJKE1hbnkgbG9va2FoZWFkIHRva2Vucyk6IFVwZGF0ZSB1c2VzLgorCSogZGF0YS9nbHIuYzogVXBkYXRlIEVuZ2xpc2ggaW4gY29tbWVudHMuCisJKiBsYWxyMS5jYzogTGlrZXdpc2UuCisJKiB5YWNjLmM6IExpa2V3aXNlLgorCSogc3JjL2NvbmZsaWN0cy5oOiBMaWtld2lzZS4KKwkqIHNyYy9sYWxyLmg6IExpa2V3aXNlLgorCSogc3JjL21haW4uYzogTGlrZXdpc2UuCisJKiBzcmMvb3V0cHV0LmM6IExpa2V3aXNlLgorCSogc3JjL3BhcnNlLWdyYW0uYzogTGlrZXdpc2UuCisJKiBzcmMvdGFibGVzLmg6IExpa2V3aXNlLgorCSogdGVzdHMvY2FsYy5hdDogTGlrZXdpc2UuCisKKzIwMDYtMDYtMDggIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBzcmMvZmxleC1zY2FubmVyLmggKHl5dGV4dCk6IFJlbW92ZSBzdHJheSBgKi8nIGluICNkZWZpbmUuCisKKzIwMDYtMDYtMDcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBUT0RPOiBBZGQgcmVxdWVzdCBmcm9tIE5lbHNvbiBILiBGLiBCZWViZSB0byBiZSBhYmxlIHRvIGluc3RhbGwKKwlCaXNvbiB3aXRob3V0IGluc3RhbGxpbmcgdGhlIHlhY2Mgc2NyaXB0LgorCisyMDA2LTA2LTA3ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogc3JjL2ZsZXgtc2Nhbm5lci5oOiBGb3IgdGhlIHNha2Ugb2YgRmxleCAyLjUuNCwgZG9uJ3QgI2RlZmluZSB5eWxlbmcKKwlhbmQgeXl0ZXh0IGlmIHRoZXkncmUgYWxyZWFkeSAjZGVmaW5lJ2QuCisJKiBzcmMvZmxleC1zY2FubmVyLmgsIHNyYy9sb2NhdGlvbi5oOiBNb3ZlICNpbmNsdWRlICJzeXN0ZW0uaCIgdG8uLi4KKwkqIHNyYy9zY2FuLWNvZGUtYy5jOiAuLi4gaGVyZS4KKwkqIHNyYy9zY2FuLWNvZGUubCwgc3JjL3NjYW4tZ3JhbS5sOiAuLi4gYW5kIGhlcmUuICBBbHNvICNpbmNsdWRlCisJPGNvbmZpZy5oPi4KKworMjAwNi0wNi0wNyAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlHZXQgQmlzb24gdG8gYnVpbGQgYWdhaW4gd2hlbiBjb25maWd1cmVkIHdpdGggLS1lbmFibGUtZ2NjLXdhcm5pbmdzLgorCSogc3JjL2xvY2F0aW9uLmMsIHNyYy9sb2NhdGlvbi5oLCBzcmMvbWFpbi5jLCBzcmMvc2Nhbi1jb2RlLmw6IEFkZCBzb21lCisJbWlzc2luZyAjaW5jbHVkZSdzLgorCSogc3JjL3NjYW4tY29kZS5sIChoYW5kbGVfYWN0aW9uX2RvbGxhciwgaGFuZGxlX2FjdGlvbl9hdCk6IFJlbmFtZQorCWxvYyBhcmd1bWVudCBhcyBpdCBzaGFkb3dzIGEgZ2xvYmFsLgorCSogc3JjL3NjYW4tZ3JhbS5sOiBSZW1vdmUgc3RyYXkgY29tbWEgdGhhdCBwcmV2ZW50cyBib3VuZGFyeV9zZXQKKwlpbnZvY2F0aW9uLgorCisJKiBzcmMvLmN2c2lnbm9yZTogQWRkIHNjYW4tY29kZS5jLgorCisyMDA2LTA2LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3NjYW4tZ3JhbS5sOiBNb3ZlIHRoZSAiYWRkIGEgdHJhaWxpbmcgOyB0byBhY3Rpb25zIiBjb2RlCisJdG8uLi4KKwkqIHNyYy9zY2FuLWNvZGUubDogaGVyZS4KKwkqIHRlc3RzL2lucHV0LmF0IChUb3J0dXJpbmcgdGhlIFNjYW5uZXIpOiBGaXggYW5vdGhlciBsb2NhdGlvbgorCWVycm9yLgorCisyMDA2LTA2LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL01ha2VmaWxlLmFtIChCVUlMVF9TT1VSQ0VTKTogRml4IHRoZSB0cmFpbGluZyBiYWNrc2xhc2guCisKKzIwMDYtMDYtMDYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJRXh0cmFjdCB0aGUgcGFyc2luZyBvZiB1c2VyIGFjdGlvbnMgZnJvbSB0aGUgZ3JhbW1hciBzY2FubmVyLgorCUFzIGEgY29uc2VxdWVuY2UsIHRoZSByZWxhdGlvbiBiZXR3ZWVuIHRoZSBncmFtbWFyIHNjYW5uZXIgYW5kCisJcGFyc2VyIGlzIG11Y2ggc2ltcGxlci4gIFdlIGNhbiBhbHNvIHNwbGl0ICJjb21wb3NpdGUgdG9rZW5zIiBiYWNrCisJaW50byBzaW1wbGUgdG9rZW5zLgorCSogc3JjL2dyYW0uaCAoSVRFTV9OVU1CRVJfTUFYLCBSVUxFX05VTUJFUl9NQVgpOiBOZXcuCisJKiBzcmMvc2Nhbi1ncmFtLmwgKGFkZF9jb2x1bW5fd2lkdGgsIGFkanVzdF9sb2NhdGlvbik6IE1vdmUgdG8gYW5kCisJcmVuYW1lIGFzLi4uCisJKiBzcmMvbG9jYXRpb24uaCwgc3JjL2xvY2F0aW9uLmMgKGFkZF9jb2x1bW5fd2lkdGgpCisJKGxvY2F0aW9uX2NvbXB1dGUpOiB0aGVzZS4KKwlGaXggdGhlIGNvbHVtbiBjb3VudDogdGhlIGluaXRpYWwgY29sdW1uIGlzIDAuCisJKGxvY2F0aW9uX3ByaW50KTogQmUgcm9idXN0IHRvIGVuZGluZyBjb2x1bW4gYmVpbmcgMC4KKwkqIHNyYy9sb2NhdGlvbi5oIChib3VuZGFyeV9zZXQpOiBOZXcuCisJKiBzcmMvbWFpbi5jOiBBZGp1c3QgdG8gc2Nhbm5lcl9mcmVlIGJlaW5nIHJlbmFtZWQgYXMKKwlncmFtX3NjYW5uZXJfZnJlZS4KKwkqIHNyYy9vdXRwdXQuYzogSW5jbHVkZSBzY2FuLWNvZGUuaC4KKwkqIHNyYy9wYXJzZS1ncmFtLnk6IEluY2x1ZGUgc2Nhbi1ncmFtLmggYW5kIHNjYW4tY29kZS5oLgorCVVzZSBib3VuZGFyeV9zZXQuCisJKFBFUkNFTlRfREVTVFJVQ1RPUiwgUEVSQ0VOVF9QUklOVEVSLCBQRVJDRU5UX0lOSVRJQUxfQUNUSU9OKQorCShQRVJDRU5UX0xFWF9QQVJBTSwgUEVSQ0VOVF9QQVJTRV9QQVJBTSk6IFJlbW92ZSB0aGUgey4uLn0gcGFydCwKKwl3aGljaCBpcyBub3csIGFnYWluLCBhIHNlcGFyYXRlIHRva2VuLgorCUFkanVzdCBhbGwgZGVwZW5kZW5jaWVzLgorCVdoZXJldmVyIGFjdGlvbnMgd2l0aCAkIGFuZCBAIGFyZSB1c2VkLCB1c2UgdHJhbnNsYXRlX2NvZGUuCisJKGFjdGlvbik6IFJlbW92ZSB0aGlzIG5vbnRlcm1pbmFsIHdoaWNoIGlzIG5vdyB1c2VsZXNzLgorCSogc3JjL3JlYWRlci5jOiBJbmNsdWRlIGFzc2VydC5oLCBzY2FuLWdyYW0uaCBhbmQgc2Nhbi1jb2RlLmguCisJKGdyYW1tYXJfY3VycmVudF9ydWxlX2FjdGlvbl9hcHBlbmQpOiBVc2UgdHJhbnNsYXRlX2NvZGUuCisJKHBhY2tncmFtKTogQm91bmQgY2hlY2sgcnVsZW5vLCBpdGVtbm8sIGFuZCBydWxlX2xlbmd0aC4KKwkqIHNyYy9yZWFkZXIuaCAoZ3JhbV9pbiwgZ3JhbV9fZmxleF9kZWJ1Zywgc2Nhbm5lcl9jdXJzb3IpCisJKGxhc3Rfc3RyaW5nLCBsYXN0X2JyYWNlZF9jb2RlX2xvYywgbWF4X2xlZnRfc2VtYW50aWNfY29udGV4dCkKKwkoc2Nhbm5lcl9pbml0aWFsaXplLCBzY2FubmVyX2ZyZWUsIHNjYW5uZXJfbGFzdF9zdHJpbmdfZnJlZSkKKwkoZ3JhbV9vdXQsIGdyYW1fbGluZW5vLCBZWV9ERUNMXyk6IE1vdmUgdG8uLi4KKwkqIHNyYy9zY2FuLWdyYW0uaDogdGhpcyBuZXcgZmlsZS4KKwkoWVlfREVDTCk6IFJlbmFtZSBhcy4uLgorCShHUkFNX0RFQ0wpOiB0aGlzLgorCSogc3JjL3NjYW4tY29kZS5oLCBzcmMvc2Nhbi1jb2RlLmwsIHNyYy9zY2FuLWNvZGUtYy5jOiBOZXcuCisJKiBzcmMvc2Nhbi1ncmFtLmwgKGdyYW1fZ2V0X2xpbmVubywgZ3JhbV9nZXRfaW4sIGdyYW1fZ2V0X291dCk6CisJKGdyYW1fZ2V0X2xlbmcsIGdyYW1fZ2V0X3RleHQsIGdyYW1fc2V0X2xpbmVubywgZ3JhbV9zZXRfaW4pOgorCShncmFtX3NldF9vdXQsIGdyYW1fZ2V0X2RlYnVnLCBncmFtX3NldF9kZWJ1ZywgZ3JhbV9sZXhfZGVzdHJveSk6CisJTW92ZSB0aGVzZSBkZWNsYXJhdGlvbnMsIGFuZC4uLgorCShvYnN0YWNrX2Zvcl9zdHJpbmcsIFNUUklOR19HUk9XLCBTVFJJTkdfRklOSVNILCBTVFJJTkdfRlJFRSk6CisJdGhlc2UgdG8uLi4KKwkqIHNyYy9mbGV4LXNjYW5uZXIuaDogdGhpcyBuZXcgZmlsZS4KKwkqIHNyYy9zY2FuLWdyYW0ubCAocnVsZV9sZW5ndGgsIHJ1bGVfbGVuZ3RoX292ZXJmbG93KQorCShpbmNyZW1lbnRfcnVsZV9sZW5ndGgpOiBSZW1vdmUuCisJKGxhc3RfYnJhY2VkX2NvZGVfbG9jKTogUmVuYW1lIGFzLi4uCisJKGdyYW1fbGFzdF9icmFjZWRfY29kZV9sb2MpOiB0aGlzLgorCUFkanVzdCB0byB0aGUgY2hhbmdlcyBvZiB0aGUgcGFyc2VyLgorCU1vdmUgYWxsIHRoZSBoYW5kbGluZyBvZiAkIGFuZCBAIGludG8uLi4KKwkqIHNyYy9zY2FuLWNvZGUubDogaGVyZS4KKwkqIHNyYy9zY2FuLWdyYW0ubCAoaGFuZGxlX2RvbGxhciwgaGFuZGxlX2F0KTogUmVtb3ZlLgorCShoYW5kbGVfYWN0aW9uX2RvbGxhciwgaGFuZGxlX2FjdGlvbl9hdCk6IE1vdmUgdG8uLi4KKwkqIHNyYy9zY2FuLWNvZGUubDogaGVyZS4KKwkqIHNyYy9NYWtlZmlsZS5hbSAoYmlzb25fU09VUkNFUyk6IEFkZCBmbGV4LXNjYW5uZXIuaCwKKwlzY2FuLWNvZGUuaCwgc2Nhbi1jb2RlLWMuYywgc2Nhbi1ncmFtLmguCisJKEVYVFJBX2Jpc29uX1NPVVJDRVMpOiBBZGQgc2Nhbi1jb2RlLmwuCisJKEJVSUxUX1NPVVJDRVMpOiBBZGQgc2Nhbi1jb2RlLmMuCisJKHlhY2MpOiBCZSByb2J1c3QgdG8gd2hpdGUgc3BhY2VzLgorCisJKiB0ZXN0cy9jb25mbGljdHMuYXQsIHRlc3RzL2lucHV0LmF0LCB0ZXN0cy9yZWR1Y2UuYXQsCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0OiBBZGp1c3QgdGhlIGNvbHVtbiBudW1iZXJzLgorCSogdGVzdHMvcmVncmVzc2lvbi5hdDogQWRqdXN0IHRoZSBlcnJvciBtZXNzYWdlLgorCisyMDA2LTA2LTA2ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogc3JjL2dldGFyZ3MuYyAodXNhZ2UpOiBNZW50aW9uIEdMUiBub3QganVzdCBMQUxSKDEpIGluIC0taGVscCBvdXRwdXQuCisJVXNlIEFraW0ncyB3b3JkaW5nIGZyb20KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwNi0wNS9tc2cwMDA1Ni5odG1sPi4KKworMjAwNi0wNi0wNiAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwlCZXR3ZWVuIEJpc29uIHJlbGVhc2VzLCBtYW51YWxseSBhcHBlbmQgYCsnIHRvIHRoZSBwcmV2aW91cyBCaXNvbgorCXJlbGVhc2UgbnVtYmVyLCBhbmQgdXNlIHRoYXQgYXMgYSBzaWduYWwgdG8gYXV0b21hdGljYWxseSBwcmludCB0aGUKKwlDaGFuZ2VMb2cncyBDVlMgSWQga2V5d29yZCBmcm9tIC0tdmVyc2lvbi4gIERpc2N1c3NlZCBzdGFydGluZyBhdAorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA2LTA1L21zZzAwMDI4Lmh0bWw+LgorCSogQ2hhbmdlTG9nOiBBZGQgSWQgaGVhZGVyLgorCSogY29uZmlndXJlLmFjIChBQ19JTklUKTogQXBwZW5kIGArJyB0byBgMi4zJy4KKwkqIHNyYy8uY3ZzaWdub3JlOiBBZGQgcmV2aXNpb24uYy4KKwkqIHNyYy9NYWtlZmlsZS5hbSAoYmlzb25fU09VUkNFUyk6IEFkZCByZXZpc2lvbi5jIGFuZCByZXZpc2lvbi5oLgorCShCVUlMVF9TT1VSQ0VTKTogQWRkIHJldmlzaW9uLmMuCisJKHJldmlzaW9uLmMpOiBOZXcgdGFyZ2V0IHJ1bGUuICBUaGlzIGZpbGUgZGVmaW5lcyBhIG5ldyBnbG9iYWwgdmFyaWFibGUKKwluYW1lZCByZXZpc2lvbi4gIEl0IGluaXRpYWxpemVzIGl0IHdpdGggZWl0aGVyIHRoZSBJZCBmcm9tIENoYW5nZUxvZworCW9yLCBpZiBWRVJTSU9OIGRvZXNuJ3QgY29udGFpbiBgKycsIHdpdGggdGhlIGVtcHR5IHN0cmluZy4KKwkqIHNyYy9nZXRhcmdzLmMgKHZlcnNpb24pOiBQcmludCB0aGUgdmFsdWUgb2YgcmV2aXNpb24uCisJKiBzcmMvcmV2aXNpb24uaDogRXh0ZXJuIHJldmlzaW9uLgorCisyMDA2LTA2LTA1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogTkVXUzogVmVyc2lvbiAyLjMuCisJKiBjb25maWd1cmUuYWMgKEFDX0lOSVQpOiBMaWtld2lzZS4KKworMjAwNi0wNS0zMCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIGRhdGEvZ2xyLmMgKFlZUkVDT1ZFUklORyk6IERlZmluZSB0byBiZSBhIGZ1bmN0aW9uLWxpa2UgbWFjcm8KKwl3aXRoIG5vIGFyZ3VtZW50cywgbm90IGFzIGFuIG9iamVjdC1saWtlIG1hY3JvLiAgVGhpcyBpcyBmb3IKKwljb21wYXRpYmlsaXR5IHdpdGggZGF0YS95YWNjLmMuICBQcm9ibGVtIHJlcG9ydGVkIGJ5IEpvaG4gUC4gSGFydG1hbm4gaW4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDA2LTA1L21zZzAwMDU5Lmh0bWw+LgorCSogZG9jL2Jpc29uLnRleGluZm8gKEFjdGlvbiBGZWF0dXJlcywgRXJyb3IgUmVjb3ZlcnksIFRhYmxlIG9mIFN5bWJvbHMpOgorCURvY3VtZW50IHRoaXMuCisKKzIwMDYtMDUtMzAgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBzcmMvZ2V0YXJncy5jICh1c2FnZSk6IEJhY2sgb3V0IHllc3RlcmRheSdzIG1vZGlmaWNhdGlvbiBvZiB0aGUKKwktLWhlbHAgb3V0cHV0IHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB3YWl0IGZvciB0cmFuc2xhdGlvbiBiZWZvcmUKKwlyZWxlYXNpbmcgMi4zLgorCisyMDA2LTA1LTI5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogZG9jL2Jpc29uLnRleGluZm8gKEludHJvZHVjdGlvbik6IERvbid0IHNheSAiR0xSIGdyYW1tYXIiLgorCVByb2JsZW0gcmVwb3J0ZWQgYnkgQWtpbSBEZW1haWxsZS4KKworMjAwNi0wNS0yOSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIHNyYy9nZXRhcmdzLmMgKHVzYWdlKTogTWVudGlvbiBHTFIgbm90IGp1c3QgTEFMUigxKSBpbiAtLWhlbHAgb3V0cHV0LgorCisyMDA2LTA1LTI2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogZGF0YS95YWNjLmMgKHl5X3JlZHVjZV9wcmludCk6IE9taXQgdHJhaWxpbmcgd2hpdGUgc3BhY2UgaW4KKwlnZW5lcmF0ZWQgc291cmNlIGNvZGUuICBQcm9ibGVtIHJlcG9ydGVkIGJ5IEZyYW5zIEVuZ2xpY2ggaW4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDA2LTA1L21zZzAwMDQ5Lmh0bWw+LgorCisyMDA2LTA1LTIyICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogTWFrZWZpbGUubWFpbnQgKGd6aXBfcnN5bmNhYmxlLCBHWklQX0VOVik6IENvbXB1dGUgd2l0aGluIHRoZQorCXNoZWxsLCBub3Qgd2l0aGluICdtYWtlJywgc28gdGhhdCAnbWFrZScgYnkgYW4gb3JkaW5hcnkgYnVpbGRlcgorCSh1c2luZyBHTlUgbWFrZSkgZG9lcyBub3Qgd29ycnkgYWJvdXQgY29uZmlndXJpbmcgZ3ppcC4gIFRoaXMgYWxzbworCXdvcmtzIGFyb3VuZCBhIGJ1ZyByZXBvcnRlZCBpbmRlcGVuZGVudGx5IGJ5IEtlaXRoIFRob21wc29uIGFuZCBieQorCUdlb3JnIFNjaHdhcnosIHdoZXJlYnkgZ3ppcCAxLjIuNCAtLWhlbHAgd291bGQgb3V0cHV0IHVzYWdlIG9uCisJc3RkZXJyIHJhdGhlciB0aGFuIHN0ZG91dCwgbWVzc2luZyB1cCB0aGUgYnVpbGQgbG9ncy4KKworMjAwNi0wNS0yMSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIGRhdGEveWFjYy5jICh5eXBhcnNlKTogV3JhcCB0aGUgZmluYWwgcmV0dXJuIGZyb20geXlwYXJzZSBpbnNpZGUgWVlJRAorCXRvIG1ha2Ugc3VyZSB0aGF0IFlZSUQgd2lsbCBuZXZlciBiZSB1bnVzZWQuICBUaGlzIGZpeGVzIGEgJ21ha2UKKwltYWludGFpbmVyLWNoZWNrJyBmYWlsdXJlIGNhdXNlZCBieSB0aGUgcmVjZW50IGNoYW5nZXMgdG8gdGhlICdUcml2aWFsCisJZ3JhbW1hcnMnIHRlc3QgY2FzZSwgd2hpY2ggY2F1c2VkIGcrKyA0LjEuMCB0byBjb21wbGFpbiB0aGF0IFlZSUQgd2FzCisJbm90IHVzZWQuCisJKiBkYXRhL2dsci5jICh5eXBhcnNlKTogV3JhcCB5eXBhcnNlJ3MgcmV0dXJuIGluc2lkZSBZWUlEIGp1c3QgaW4gY2FzZS4KKworMjAwNi0wNS0yMSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIGRhdGEvZ2xyLmMgKHl5cmVzb2x2ZUxvY2F0aW9ucyk6IFJlbW92ZSBib2d1cyBZWUFTU0VSVCB0aGF0IHRoZQorCXN0YXRlIGJlZm9yZSBhbiBlbXB0eSBSSFMgaXMgYWx3YXlzIHJlc29sdmVkIGhlcmUuICBPbmx5IHRoZSBsb2NhdGlvbgorCW9mIHRoYXQgc3RhdGUgaXMgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCwgYW5kIHRoYXQncyBlbm91Z2guICBUaGlzCisJZml4ZXMgdGhlIHJlbWFpbmluZyBidWcgcmVwb3J0ZWQgYnkgRGVyZWsgTS4gSm9uZXMgaW4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDA2LTA1L21zZzAwMDI3Lmh0bWw+LgorCSogdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQgKFVuaW5pdGlhbGl6ZWQgbG9jYXRpb24gd2hlbiByZXBvcnRpbmcKKwlhbWJpZ3VpdHkpOiBUZXN0IHRoZSBhYm92ZSBjYXNlLgorCUFsc28sIHRoZSBlbWJlZGRlZCBjb21tZW50cyBpbiB0aGlzIHRlc3QgY2FzZSBjbGFpbSBpdCBjaGVja3MgdGhlIGNhc2UKKwlvZiBhbiBlbXB0eSBSSFMgdGhhdCBoYXMgaW5oZXJpdGVkIHRoZSBpbml0aWFsIGxvY2F0aW9uLiAgSG93ZXZlciwgdGhlCisJY29ycmVzcG9uZGluZyBMSFMgd2FzIGFscmVhZHkgcmVzb2x2ZWQsIHNvIHl5cmVzb2x2ZUxvY2F0aW9ucyBkaWRuJ3QKKwlhY3R1YWxseSBoYXZlIHJlYXNvbiB0byBtb2RpZnkgaXQuICBGaXggdGhpcyBieSBmb3JjaW5nCisJbm9uZGV0ZXJtaW5pc3RpYyBvcGVyYXRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFyc2UuCisKKzIwMDYtMDUtMjAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBkYXRhL2MubTQgKGI0X3l5X3N5bWJvbF9wcmludF9nZW5lcmF0ZSk6CisJKGI0X3l5X3N5bWJvbF9wcmludF9nZW5lcmF0ZSk6IFVzZSAnWVlTVFlQRSBjb25zdCcgcmF0aGVyIHRoYW4KKwknY29uc3QgWVlTVFlQRScsIGFuZCBzaW1pbGFybHkgZm9yIFlZTFRZUEUuICBUaGlzIGZpeGVzIG9uZQorCW9mIHRoZSBidWdzIHJlcG9ydGVkIHRvZGF5IGJ5IERlcmVrIE0gSm9uZXMgaW4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDA2LTA1L21zZzAwMDI3Lmh0bWw+LgorCSogZG9jL2Jpc29uLnRleGluZm8gKFZhbHVlIFR5cGUpOiBEb2N1bWVudCB0aGF0IFlZU1RZUEUgbXVzdCBiZQorCWRlZmluZWQgdG8gYmUgYSB0eXBlIG5hbWUgd2l0aG91dCBwYXJlbnMgb3IgYnJhY2tldHMuCisJKExvY2F0aW9uIFR5cGUpOiBTaW1pbGFybHkgZm9yIFlZTFRZUEUuCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChUcml2aWFsIGdyYW1tYXJzKTogUHV0IGluIGEgdGVzdCBmb3IgdGhpcworCWJ1ZyB0aGF0IHdpbGwgYmUgY2F1Z2h0IGJ5ICdtYWtlIG1haW50YWluZXItY2hlY2snICh0aG91Z2ggbm90LAorCWFsYXMsIGJ5ICdtYWtlIGNoZWNrJyB1bmxlc3MgeW91ciBjb21waWxlciBpcyBwaWNreSkuCisKKzIwMDYtMDUtMTkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBORVdTOiBWZXJzaW9uIDIuMi4KKwkqIGNvbmZpZ3VyZS5hYyAoQUNfSU5JVCk6IExpa2V3aXNlLgorCisyMDA2LTA1LTE3ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogZGF0YS9nbHIuYyAoeXlyZXBvcnRUcmVlKTogTWFrZSByb29tIGluIHl5c3RhdGVzIGZvciB0aGUgc3RhdGUKKwlwcmVjZWRpbmcgdGhlIFJIUy4gIFRoaXMgZml4ZXMgdGhlIHNlZ21lbnRhdGlvbiBmYXVsdCByZXBvcnRlZCBieSBEZXJlaworCU0uIEpvbmVzIGluCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9oZWxwLWJpc29uLzIwMDYtMDUvbXNnMDAwMzUuaHRtbD4uCisJKHl5cmVwb3J0VHJlZSwgeXlwZHVtcHN0YWNrKTogU3VidHJhY3QgMSBmcm9tIHl5cnVsZSBiZWZvcmUgcHJpbnRpbmcKKwl0byB0aGUgdXNlci4gIFJlcG9ydGVkIGZvciB5eXJlcG9ydFRyZWUgYnkgRGVyZWsgTS4gSm9uZXMgbGF0ZXIgaW4gdGhlCisJc2FtZSB0aHJlYWQuCisJKiBUSEFOS1M6IEFkZCBEZXJlayBNLiBKb25lcy4KKwlVcGRhdGUgbXkgZW1haWwgYWRkcmVzcy4KKwlGaXggdHlwbyBpbiBTdGV2ZSBNdXJwaHkncyBuYW1lLgorCisyMDA2LTA1LTE0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogZGF0YS9nbHIuYyAoeXlyZXBvcnRTeW50YXhFcnJvcik6IEZpeCBvZmYtYnktb25lIGVycm9yIGluCisJY2hlY2tpbmcgYWdhaW5zdCBZWUxBU1QgdGhhdCBjYXVzZWQgdGhlIHBhcnNlciB0byBtaXNzIGEgcG90ZW50aWFsCisJYWx0ZXJuYXRpdmUgaW4gaXRzIGRpYWdub3N0aWMuCisJUHJvYmxlbSByZXBvcnRlZCBieSBNYXJpYSBKb3NlIE1vcm9uIEZlcm5hbmRleiBpbgorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDYtMDUvbXNnMDAwMjQuaHRtbD4uCisJKiBkYXRhL2xhbHIxLmNjICh5eXN5bnRheF9lcnJvcl8pOiBMaWtld2lzZS4KKwkqIGRhdGEveWFjYy5jICh5eXN5bnRheF9lcnJvcik6IExpa2V3aXNlLgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoX0FUX0RBVEFfREFOQ0VSX1kpOiBVc2Ugc3RhdGljIGFycmF5IGZvcgorCXRva2VucywgaW4gY2FzZSB3ZSBydW4gaW50byBhbiBvbGRlciBDIGNvbXBpbGVyLgorCShfQVRfREFUQV9FWFBFQ1QyX1ksIEFUX0NIRUNLX0VYUEVDVDIpOiBOZXcgbWFjcm9zLgorCVVzZSB0aGVtIHRvIGNoZWNrIGZvciB0aGUgb2ZmLWJ5LW9uZSBlcnJvciBmaXhlZCBhYm92ZS4KKworCSogZGF0YS95YWNjLmMgKHl5dG5hbWVycik6IEZpeCB0eXBvOiBsb2NhbCB2YXIgc2hvdWxkIGJlIG9mIHR5cGUKKwlZWVNJWkVfVCwgbm90IHNpemVfdC4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFRyaXZpYWwgZ3JhbW1hcnMpOiBOZXcgdGVzdCwgdG8gY2F0Y2gKKwl0aGUgZXJyb3IgZml4ZWQgYnkgdGhlIGFib3ZlIHBhdGNoLgorCisyMDA2LTA1LTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJKiBkb2MvYmlzb24udGV4aW5mbyAoQysrIEJpc29uIEludGVyZmFjZSk6IENsYXJpZnkgdGhlIG5hbWluZworCXNjaGVtZS4KKwlSZXBvcnRlZCBieSBTdGV2ZSBNdXJwaHkuCisKKzIwMDYtMDUtMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwkqIGRhdGEvZ2xyLmNjLCBkYXRhL2xhbHIxLmNjOiBVc2luZyAlZGVmaW5lcyBpcyBtYW5kYXRvcnkuCisJKiBkYXRhL2dsci5jYzogYjRfbG9jYXRpb25fZmxhZyBpcyBub3cgYjRfbG9jYXRpb25zX2ZsYWcuCisKKzIwMDYtMDUtMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwlJbXBsZW1lbnQgLS10cmFjZT1tNC4KKwkqIHNyYy9nZXRhcmdzLmMgKHRyYWNlX3R5cGVzLCB0cmFjZV9hcmdzKTogQWNjZXB0IHRyYWNlX200LgorCSogc3JjL291dHB1dC5jIChvdXRwdXRfc2tlbGV0b24pOiBXaGVuIHNldCwgcGFzcyAtZFYgdG8gbTQuCisKKwlGYWN0b3IgdGhlIGhhbmRsaW5nIG9mIGZsYWdzIGluIG00LgorCSogc3JjL291dHB1dC5jIChwcmVwYXJlKTogUmVuYW1lIHRoZSBtdXNjbGUgbmFtZXMgZGVidWcsIGRlZmluZXMsCisJZXJyb3JfdmVyYm9zZSB0byBkZWJ1Z19mbGFnLCBkZWZpbmVzX2ZsYWcsIGVycm9yX3ZlcmJvc2VfZmxhZy4KKwkqIGRhdGEvYy5tNDogQWRqdXN0LgorCShfYjRfZGVmaW5lX2ZsYWdfaWYsIGI0X2RlZmluZV9mbGFnX2lmLCBiNF9kZWZpbmVzX2lmKTogTmV3LgorCVVzZSBiNF9kZWZpbmVfZmxhZ19pZiB0byBkZWZpbmUgb3RoZXIgYjRfRkxBR19pZiBtYWNyb3MuCisJKGI0X2xvY2F0aW9uX2lmKTogQXMgYSBjb25zZXF1ZW5jZSwgcmVuYW1lIGFzLi4uCisJKGI0X2xvY2F0aW9uc19pZik6IHRoaXMsIGZvciBjb25zaXN0ZW5jeS4KKwlBZGp1c3QgYWxsIHRoZSBza2VsZXRvbnMuCisKKzIwMDYtMDUtMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwkqIGV0Yy9iZW5jaC5wbTogU2hvcnRlbiBiZW5jaCBuYW1lcy4KKworMjAwNi0wNS0xNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCSogc3JjL291dHB1dC5oLCBzcmMvb3V0cHV0LmMgKGVycm9yX3ZlcmJvc2UpOiBNb3ZlIHRvLi4uCisJKiBzcmMvZ2V0YXJncy5oLCBzcmMvZ2V0YXJncy5jOiBoZXJlLgorCVNvcnQgdGhlIGZsYWdzLgorCUFkanVzdCBkZXBlbmRlbmNpZXMuCisKKzIwMDYtMDUtMTMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBkYXRhL2MubTQgKGI0X2NvcHlyaWdodCk6IFB1dCB0aGUgc3BlY2lhbCBleGNlcHRpb24gZm9yIEJpc29uCisJc2tlbGV0b25zIGhlcmUsIHNvIHdlIGRvbid0IGhhdmUgdG8gcHV0IGl0IGluIGVhY2ggc2tlbGV0b24uICBBbGwKKwl1c2VzIGNoYW5nZWQuICBTdWdnZXN0ZWQgYnkgQWtpbSBEZW1haWxsZS4gIEFsc28sIHdyYXAgdGhlCisJY29weXJpZ2h0IG5vdGljZSwgaW4gY2FzZSBpdCBpcyBsb25nZXIgdGhhbiA4MCBjb2x1bW5zLiAgUmVwbGFjZQorCWNvbW1hIGJ5IG5ld2xpbmUgYWZ0ZXIgdGl0bGUuCisKKzIwMDYtMDUtMTEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBkb2MvYmlzb24udGV4aW5mbyAoQ2FsYysrIFNjYW5uZXIpOiBUaGUgZmxleCBiZWhhdmlvciBpcyBhbgorCWluY29tcGF0aWJpbGl0eSwgbm90IGEgYnVnLiAgTWVudGlvbiB0aGF0IGl0IHdhc24ndCBmaXhlZCBhcyBvZgorCWZsZXggMi41LjMzLgorCisyMDA2LTA1LTExICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJKiBleGFtcGxlcy9leHRleGk6IEVuZm9yY2UgdGhlIHByZWNlZGVuY2Ugb2YgY29uY2F0ZW5hdGlvbiBvdmVyCisJPj4uCisJUmVwb3J0ZWQgYnkgVG9tbXkgTm9yZGdyZW4uCisKKzIwMDYtMDUtMTEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwkqIGRhdGEvbGFscjEuY2MgKHl5dHJhbnNsYXRlXyk6IFJlbmFtZSB0b2tlbiBhcyB0IHRvIGF2b2lkIGNsYXNoZXMKKwl3aXRoIHRoZSBtZW1iZXIgInRva2VuIi4KKwlSZXBvcnRlZCBieSBNYXJ0aW4gTnlsaW4uCisKKzIwMDYtMDUtMDggIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBkYXRhL2dsci5jOiBTd2l0Y2ggdG8gQmlzb24gMi4yIHNwZWNpYWwtZXhjZXB0aW9uIGxhbmd1YWdlIGluCisJdGhlIGNvcHlyaWdodCBub3RpY2UuICBVc2UgbW9yZS1yZWd1bGFyIGZvcm1hdCBmb3IgdGl0bGVzIGFuZAorCWNvcHlyaWdodCBub3RpY2VzLgorCSogZGF0YS9nbHIuY2M6IExpa2V3aXNlLgorCSogZGF0YS9sb2NhdGlvbi5jYzogTGlrZXdpc2UuCisJKiBkYXRhL3lhY2MuY2M6IExpa2V3aXNlLgorCSogZG9jL2Jpc29uLnRleGluZm8gKENvbmRpdGlvbnMpOiBEb2N1bWVudCB0aGlzLgorCSogTkVXUzogbGlrZXdpc2UuICBVcGdyYWRlIHZlcnNpb24gdG8gMi4yLgorCisyMDA2LTA0LTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJKiBkYXRhL2dsci5jYzogUmVtb3ZlIGRlYWQgY29kZS4KKworMjAwNi0wNC0yNSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIGJvb3RzdHJhcDogQ29tbWVudCBvdXQgdGhlIEFNX0NQUEZMQUdTIGxpbmUsIHNpbmNlIHdlIGRvbid0IHVzZQorCXRoYXQgdmFyaWFibGUgYW5kIHRoZSBsaW5lIGJyZWFrcyB0aGUgYm9vdHN0cmFwLiAgUHJvYmxlbSByZXBvcnRlZAorCWJ5IEp1YW4gTS4gR3VlcnJlcm8uCisKKzIwMDYtMDQtMjQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChNdWx0aXBsZSBzdGFydC1zeW1ib2xzKTogTmV3LgorCisyMDA2LTA0LTI0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJKiBldGMvUkVBRE1FLCBldGMvYmVuY2gucGw6IE5ldy4KKworMjAwNi0wNC0wMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCSogc3JjL3NjYW4tZ3JhbS5sOiBCZSByb2J1c3QgdG8gQlJBQ0VEX0NPREUgYXBwZWFyaW5nIGJlZm9yZSBhbnkKKwlydWxlLgorCVJlcG9ydGVkIGJ5IE1pY2thZWwgTGFiYXUuCisJKiB0ZXN0cy9pbnB1dC5hdCAoVG9ydHVyaW5nIHRoZSBTY2FubmVyKTogVGVzdCBpdC4KKworMjAwNi0wMy0xNiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChEZWNsIFN1bW1hcnkpOiBEb24ndCBtZW50aW9uIHl5bGxvYyB0d2ljZS4KKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IEJvYiBSb3NzaS4KKworMjAwNi0wMy0xMyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvOiBSZW1vdmUgQHNob3J0dGl0bGVwYWdlIHN0dWZmOyBpdCB3YXNuJ3QgdXNlZAorCWFuZCBkaWRuJ3QgcmVhbGx5IHdvcmsuCisJRm9yIHRoZSBpbmRleCwgdXNlIEBpZm5vdGluZm8sIG5vdCBAaWZ0ZXguCisJTWlub3IgY2xlYW51cHMgb2Ygc3BhY2luZyBhbmQgdGVybWlub2xvZ3kuCisKKzIwMDYtMDMtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwkqIHRlc3RzL2xvY2FsLmF0IChfQVRfQklTT05fT1BUSU9OX1BVU0hERUZTKTogRml4IHRoZSBkZWZpbml0aW9uCisJb2YgQVRfTkFNRV9QUkVGSVggd2hlbiAlbmFtZS1wcmVmaXggaXMgbm90IHVzZWQuCisKKzIwMDYtMDMtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwlBcHBseSAtLXByZWZpeCB0byBDKysgc2tlbGV0b25zIHRvbzogdGhleSBjaGFuZ2UgdGhlIG5hbWVzcGFjZS4KKwlUaGUgdGVzdCBzdWl0ZSBhbHJlYWR5IGV4ZXJjaXplIHRoZXNlIGNhc2VzLgorCSogZGF0YS9jKysubTQgKGI0X25hbWVzcGFjZSk6IE5ldy4KKwkqIGRhdGEvbGFscjEuY2MsIGRhdGEvZ2xyLmNjLCBkYXRhL2xvY2F0aW9uLmNjOiBVc2UgaXQgaW5zdGVhZCBvZiBgeXknLgorCSogZGF0YS9sYWxyMS5jYyAoeXl0bmFtZWVycl8pOiBNb3ZlIGl0cyBkZWZpbml0aW9uIGludG8gdGhlIG5hbWVzcGFjZS4KKwkqIGRhdGEveWFjYy5jLCBkYXRhL2dsci5jOiBSZW1vdmUgYSB1c2VsZXNzIGBbXScuCisJKiBkb2MvYmlzb24udGV4aW5mbzogRG9jdW1lbnQgaXQuCisJKE9wdGlvbiBDcm9zcyBLZXkpOiBVc2UgQG11bHRpdGFibGUgaW4gYWxsIGZvcm1hdHMuICBJdCBsb29rcworCW5pY2VyLCBldmVuIGluIFRlWCBvdXRwdXRzLgorCShSdWxlcyk6IFVzZSB0aGUgc2FtZSBjb2RlIHdoYXRldmVyIHRoZSBvdXRwdXQgdHlwZSBpcy4KKwkqIHRlc3RzL2xvY2FsLmF0IChfQVRfQklTT05fT1BUSU9OX1BVU0hERUZTKQorCShfQVRfQklTT05fT1BUSU9OX1BPUERFRlMpOiBTdXBwb3J0IEFUX05BTUVfUFJFRklYLgorCSogdGVzdHMvY2FsYy5hdDogVXNlIGl0LCBpbnN0ZWFkIG9mIGhhcmQgY29kaW5nIGB5eScuCisKKzIwMDYtMDMtMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGxyZGUuZXBpdGEuZnI+CisKKwkqIFRPRE86IFJlbW92ZSBkZWFkIGl0ZW1zLgorCisyMDA2LTAzLTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBscmRlLmVwaXRhLmZyPgorCisJKiBkb2MvRkFROiBSZW1vdmUsIG1lcmdlZCBpbnRvLi4uCisJKiBkb2MvYmlzb24udGV4aW5mbyAoRkFRKTogdGhpcy4KKwkqIGRvYy9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkanVzdC4KKworMjAwNi0wMy0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AbHJkZS5lcGl0YS5mcj4KKworCSogZGF0YS9jLm00IChiNF90b2tlbl9lbnVtKTogQWx3YXlzIGRlZmluZSB0aGUgZW51bSBvZiB0b2tlbnMsCisJZXZlbiBpZiBlbXB0eS4KKwkqIGRhdGEvbGFscmwxLmNjLCBkYXRhL2dsci5jYyAocGFyc2VyOjp0b2tlbl90eXBlKTogTmV3LgorCSogZG9jL2Jpc29uLnRleGluZm8gKENhbGMrKyBTY2FubmVyKTogVXNlIGl0LgorCisyMDA2LTAzLTA5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCUZpeCB0d28gbml0cyByZXBvcnRlZCBieSB0d2xldm8sIHBsdXMgb25lIG1vcmUgdGhhdCBJIGRpc2NvdmVyZWQuCisKKwkqIHNyYy9hc3NvYy5oIChhc3NvY190b19zdHJpbmcpOiBHaXZlIGEgbmFtZSB0byB0aGUgYXJnLCBhcworCXRoaXMgaXMgdGhlIHVzdWFsIEJpc29uIHN0eWxlLgorCSogc3JjL2xvY2F0aW9uLmggKGxvY2F0aW9uX3ByaW50KTogTGlrZXdpc2UuCisKKwkqIHNyYy9yZWFkZXIuaCAodG9rZW5fbmFtZSk6IExpa2V3aXNlLgorCisyMDA2LTAzLTA4ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCUZpeCBzb21lIG5pdHMgcmVwb3J0ZWQgYnkgdHdsZXZvLgorCSogZG9jL0ZBUTogUmVtb3ZlIGFuY2llbnQgWTJLIEZBUSwgcmVwbGFjaW5nIGl0IHdpdGggInNlY3VyZSIKKwlhbmQgIlBPU0lYIi4gIFVzZSBtb3JlLW1vZGVybiBzeW50YXggZm9yIFVSTHMuICBNZW50aW9uIEMrKworCWFuZCBhc2sgZm9yIEphdmEuICBEb24ndCBoYXJkd2lyZSBPUyB2ZXJzaW9uIG51bWJlcnMuICBBZGQKKwljb3B5cmlnaHQgbm90aWNlLgorCSogbTQvLmN2c2lnbm9yZTogQWRkIHVuaXN0ZF9oLm00LCBmb3IgbGF0ZXN0IGdudWxpYi4KKwkqIHNyYy9jb25mbGljdHMuYyAoc29sdmVkX2NvbmZsaWN0c19vYnN0YWNrKTogTm93IHN0YXRpYy4KKworMjAwNi0wMy0wOCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChJbnRyb2R1Y3Rpb24pOiBNZW50aW9uIEdMUiBhbmQgQysrIGFzIG9uIHRoZSB3ZWIKKwlwYWdlLiAgU2F5ICJ5b3UgY2FuIHVzZSBpdCIgbm90ICJ5b3UgbWF5IHVzZSBpdCIgYXMgb24gdGhlIHdlYiBwYWdlOworCXdlJ3JlIGRlc2NyaWJpbmcgY2FwYWJpbGl0aWVzIG5vdCBncmFudGluZyBwZXJtaXNzaW9uLgorCisyMDA2LTAzLTA2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogZGF0YS9nbHIuYyAoeXlyZXNvbHZlTG9jYXRpb25zKTogUmVuYW1lIGxvY2FsIHZhcmlhYmxlcyB0byBhdm9pZAorCXNoYWRvd2luZyB3YXJuaW5ncy4gIFVzZSB1c3VhbCBwYXR0ZXIgZm9yIGl0ZXJhdGluZyB0aHJvdWdoIFJIUy4KKwkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0CisJKFVuaW5pdGlhbGl6ZWQgbG9jYXRpb24gd2hlbiByZXBvcnRpbmcgYW1iaWd1aXR5KToKKwlNb2RpZnkgeXlsZXggc28gdGhhdCBpdCB1c2VzIGl0cyBhcmd1bWVudCwgcmF0aGVyIHRoYW4gdHJ5aW5nCisJdG8gcmVseSBvbiBBUkdTVVNFRCAod2hpY2ggZG9lc24ndCB3b3JrIGZvciBnY2Mgd2l0aCB3YXJuaW5ncykuCisJY29uc3QgY2hhciAtPiBjaGFyIGNvbnN0LgorCisJKiB0ZXN0cy9NYWtlZmlsZS5hbSAoJChzcmNkaXIpL3BhY2thZ2UubTQsIG1haW50YWluZXItY2hlY2stdmFsZ3JpbmQpOgorCURvbid0IHVzZSB0YWJzIGluc2lkZSBjb21tYW5kczsgaXQgbWVzc2VzIHVwICdwcycuCisJUHJvYmxlbSByZXBvcnRlZCBieSB0d2xldm8uCisKKzIwMDYtMDMtMDYgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdCAoVW5pbml0aWFsaXplZCBsb2NhdGlvbiB3aGVuIHJlcG9ydGluZworCWFtYmlndWl0eSk6IE5ldyB0ZXN0IGNhc2UuCisJKiBkYXRhL2dsci5jICh5eXJlc29sdmVMb2NhdGlvbnMpOiBOZXcgZnVuY3Rpb24sIHdoaWNoIHVzZXMKKwlZWUxMT0NfREVGQVVMVC4KKwkoeXlyZXNvbHZlVmFsdWUpOiBJbnZva2UgeXlyZXNvbHZlTG9jYXRpb25zIGJlZm9yZSByZXBvcnRpbmcgYW4KKwlhbWJpZ3VpdHkuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoRGVmYXVsdCBBY3Rpb24gZm9yIExvY2F0aW9ucyk6IE5vdGUKKwlZWUxMT0NfREVGQVVMVCdzIHVzYWdlIGZvciBhbWJpZ3VpdHkgbG9jYXRpb25zLgorCShHTFIgU2VtYW50aWMgQWN0aW9ucyk6IENyb3NzLXJlZmVyZW5jZSB0aG9zZSBub3Rlcy4KKworMjAwNi0wMy0wNCAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0IChMZWFrZWQgc2VtYW50aWMgdmFsdWVzIHdoZW4gcmVwb3J0aW5nCisJYW1iaWd1aXR5KTogUmVtb3ZlIHVubmVjZXNzYXJ5IHVuaW9uIGFuZCB0eXBlIGRlY2xhcmF0aW9ucy4KKwkoTGVha2VkIGxvb2thaGVhZCBhZnRlciBub25kZXRlcm1pbmlzdGljIHBhcnNlIHN5bnRheCBlcnJvcik6IE5ldyB0ZXN0CisJY2FzZS4KKwkqIGRhdGEvZ2xyLmMgKHl5cGFyc2UpOiBDaGVjayBmb3IgemVybyBzdGFja3MgcmVtYWluaW5nIGJlZm9yZQorCWF0dGVtcHRpbmcgdG8gc2hpZnQgdGhlIGxvb2thaGVhZCBzbyB0aGF0IHlvdSBkb24ndCBsb3NlIGl0LgorCisyMDA2LTAzLTAyICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUF2b2lkIG1lbW9yeSBsZWFrcyBieSBub3QgaW52b2tpbmcgbG9uZ2ptcCBpbiB5eXJlcG9ydEFtYmlndWl0eS4KKwkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0IChMZWFrZWQgc2VtYW50aWMgdmFsdWVzIHdoZW4gcmVwb3J0aW5nCisJYW1iaWd1aXR5KTogTmV3IHRlc3QgY2FzZS4KKwkqIGRhdGEvZ2xyLmMgKHl5cmVwb3J0QW1iaWd1aXR5KTogSW52b2tlIHl5eWVycm9yIGRpcmVjdGx5IGFuZCByZXR1cm4KKwl5eWFib3J0IHJhdGhlciB0aGFuIGludm9raW5nIHl5RmFpbCwgd2hpY2ggaW52b2tlcyBsb25nam1wLiAgUmVtb3ZlIHRoZQorCW5vdyB1bm5lY2Vzc2FyeSB5eXN0YWNrcCBwYXJhbWV0ZXIuCisJKHl5cmVzb2x2ZVZhbHVlKTogUmV0dXJuIHl5cmVwb3J0QW1iaWd1aXR5J3MgcmVzdWx0LiAgTm93IHRoZSBuZWNlc3NhcnkKKwlkZXN0cnVjdG9ycyBjYW4gYmUgY2FsbGVkLgorCisJKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdDogRG9uJ3QgaW52b2tlIGJpc29uIHdpdGggYC10JyB1bm5lY2Vzc2FyaWx5CisJaW4gZXhpc3RpbmcgdGVzdGNhc2VzLgorCisyMDA2LTAzLTAyICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCURvbid0IGxlYWsgc2VtYW50aWMgdmFsdWVzIGZvciBwYXJlbnQgUkhTIHdoZW4gYSB1c2VyIGFjdGlvbiBjdXRzIHRoZQorCXBhcnNlciwgYW5kIGNsZWFuIHVwIHJlbGF0ZWQgY29kZSBhIGJpdC4KKwkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0IChMZWFrZWQgbWVyZ2VkIHNlbWFudGljIHZhbHVlIGlmIHVzZXIgYWN0aW9uCisJY3V0cyBwYXJzZSk6IFJlbmFtZSB0by4uLgorCShMZWFrZWQgc2VtYW50aWMgdmFsdWVzIGlmIHVzZXIgYWN0aW9uIGN1dHMgcGFyc2UpOiAuLi4gdGhpcy4gIEFkZCBjaGVjaworCWZvciBsZWFrZWQgcGFyZW50IFJIUyB2YWx1ZXMuCisJKiBkYXRhL2dsci5jICh5eWRlc3Ryb3lHTFJTdGF0ZSk6IEluIGRlYnVnZ2luZyBvdXRwdXQsIGRpc3Rpbmd1aXNoCisJYmV0d2VlbiBhbiB1bnJlc29sdmVkIHN0YXRlIChub24tZW1wdHkgY2hhaW4gb2Ygc2VtYW50aWMgb3B0aW9ucykgYW5kCisJYW4gaW5jb21wbGV0ZSBvbmUgKHNpZ25hbGVkIGJ5IGFuIGVtcHR5IGNoYWluKS4KKwkoeXlyZXNvbHZlU3RhdGVzKTogRG9jdW1lbnQgdGhlIGludGVyZmFjZS4gIE1vdmUgYWxsIG1hbmlwdWxhdGlvbiBvZiBhCisJc3VjY2Vzc2Z1bGx5IG9yIHVuc3VjY2Vzc2Z1bGx5IHJlc29sdmVkIHl5R0xSU3RhdGUgdG8uLi4KKwkoeXlyZXNvbHZlVmFsdWUpOiAuLi4gaGVyZSBzbyB0aGF0IHl5cmVzb2x2ZVZhbHVlIGFsd2F5cyBsZWF2ZXMgYQorCXl5R0xSU3RhdGUgd2l0aCBjb25zaXN0ZW50IGRhdGEgYW5kIHRodXMgaXMgZWFzaWVyIHRvIHVuZGVyc3RhbmQuCisJUmVtb3ZlIHRoZSB5eXZhbHAgYW5kIHl5bG9jcCBwYXJhbWV0ZXJzIHNpbmNlIHRoZXkgYXJlIGFsd2F5cyBqdXN0CisJdGFrZW4gZnJvbSB0aGUgeXlzIHBhcmFtZXRlci4gIFdoZW4gcmVwb3J0aW5nIGEgZGlzY2FyZGVkIG1lcmdlZCB2YWx1ZQorCWluIGRlYnVnZ2luZyBvdXRwdXQsIG5vdGUgdGhhdCBpdCBpcyBpbmNvbXBsZXRlbHkgbWVyZ2VkLiAgRG9jdW1lbnQgdGhlCisJaW50ZXJmYWNlLgorCSh5eXJlc29sdmVBY3Rpb24pOiBJZiByZXNvbHZpbmcgYW55IG9mIHRoZSBSSFMgc3RhdGVzIGZhaWxzLCBkZXN0cm95CisJdGhlbSBhbGwgcmF0aGVyIHRoYW4gbGVha2luZyB0aGVtLiAgVGh1cywgYXMgbG9uZyBhcyB1c2VyIGFjdGlvbnMgYXJlCisJd3JpdHRlbiB0byBjbGVhbiB1cCB0aGUgUkhTIGNvcnJlY3RseSwgeXlyZXNvbHZlQWN0aW9uIGFsd2F5cyBjbGVhbnMgdXAKKwl0aGUgUkhTIG9mIGEgc2VtYW50aWMgb3B0aW9uLiAgRG9jdW1lbnQgdGhlIGludGVyZmFjZS4KKworMjAwNi0wMi0yNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIGRhdGEvZ2xyLmMgKHl5ZXhwYW5kR0xSU3RhY2spOiBDYXRjaCBhbiBvZmYtYnktb25lIGVycm9yIHRoYXQKKwlsZWQgdG8gYSBzZWdtZW50YXRpb24gZmF1bHQgaW4gR05VIFBhc2NhbC4gIFByb2JsZW0gcmVwb3J0ZWQKKwlieSBXYWxkZWsgSGViaXNjaC4KKworMjAwNi0wMi0yMSAgSm9lbCBFLiBEZW5ueSAgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChNaWQtUnVsZSBBY3Rpb25zKTogRXhwbGFpbiBob3cgdG8gYnVyeSBhCisJbWlkLXJ1bGUgYWN0aW9uIGluc2lkZSBhIG5vbnRlcm1pbmFsIHN5bWJvbCBpbiBvcmRlciB0byBkZWNsYXJlIGEKKwlkZXN0cnVjdG9yIGZvciBpdHMgc2VtYW50aWMgdmFsdWUuCisKKzIwMDYtMDItMTYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBkYXRhL3lhY2MuYyBbKCEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRSkgJiYgIQorCVlZU1RBQ0tfVVNFX0FMTE9DQSAmJiAhIGRlZmluZWQgWVlTVEFDS19BTExPQyAmJiBkZWZpbmVkCisJX19jcGx1c3BsdXMgJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAhCisJKChkZWZpbmVkIFlZTUFMTE9DIHx8IGRlZmluZWQgbWFsbG9jKSAmJiAoZGVmaW5lZCBZWUZSRUUgfHwKKwlkZWZpbmVkIGZyZWUpKV06IEluY2x1ZGUgPHN0ZGxpYi5oPiByYXRoZXIgdGhhbiByb2xsaW5nIG91ciBvd24KKwlkZWNsYXJhdGlvbnMgb2YgbWFsbG9jIGFuZCBmcmVlLCB0byBhdm9pZCBwcm9ibGVtcyB3aXRoCisJaW5jb21wYXRpYmxlIGRlY2xhcmF0aW9ucyAodXNpbmcgJ3Rocm93JykgQysrJ3Mgc3RkbGliLmguICBUaGlzCisJc2hvdWxkIGZpeCBEZWJpYW4gYnVnIDM0MDAxMgorCTxodHRwOi8vYnVncy5kZWJpYW4ub3JnL2NnaS1iaW4vYnVncmVwb3J0LmNnaT9idWc9MzQwMDEyPiwKKwlyZXBvcnRlZCBieSBHdWlsbGF1bWUgTWVscXVpb25kLgorCisyMDA2LTAyLTEzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogTkVXUzogQ2xhcmlmeSBzeW1ib2xzIHZlcnN1cyB0eXBlcyBpbiB1bnVzZWQtdmFsdWUgd2FybmluZ3MuCisKKwkqIGNvbmZpZ3VyZS5hYyAoQUNfSU5JVCk6IEJ1bXAgdmVyc2lvbiBudW1iZXIuCisKKzIwMDYtMDItMTMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBORVdTOiBWZXJzaW9uIDIuMWEuCisJKiB0ZXN0cy9oZWFkZXJzLmF0IChBVF9URVNUX0NQUF9HVUFSRF9IKTogRGVjbGFyZSB5eWVycm9yIGFuZCB5eWxleCwKKwlzaW5jZSBDOTkgcmVxdWlyZXMgdGhpcy4KKworMjAwNi0wMi0xMSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIG00L2Mtd29ya2luZy5tNDogTmV3IGZpbGUuCisJKiBjb25maWd1cmUuYWMgKEJJU09OX1RFU1RfRk9SX1dPUktJTkdfQ19DT01QSUxFUik6IFVzZSBpdC4KKworMjAwNi0wMi0xMCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIE1ha2VmaWxlLm1haW50OiBNZXJnZSBmcm9tIGNvcmV1dGlscy4KKworMjAwNi0wMi0wOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwlNb3JlIHBvcnRhYmlsaXR5IGZpeGVzIGZvciBwcm9ibGVtcyBzdW1tYXJpemVkIGJ5IE5lbHNvbiBILiBGLiBCZWViZS4KKworCSogbTQvY3h4Lm00IChCSVNPTl9URVNUX0ZPUl9XT1JLSU5HX0NYWF9DT01QSUxFUik6IENhdGNoIGEKKwljb25maWd1cmF0aW9uIHNjcmV3dXAgIi4vY29uZmlndXJlIENDPS9vcHQvU1VOV3Nwcm8vYmluL2M4OQorCUNGTEFHUz0iLXhhcmNoPWdlbmVyaWM2NCIgQ1hYPS9vcHQvU1VOV3Nwcm8vYmluL0NDCisJTERGTEFHUz0iLXhhcmNoPWdlbmVyaWM2NCIgd2l0aCBTdW4gQyA1Ljcgb24gU29sYXJpcyAxMDsgdGhpcworCW1lc3NlcyB1cCBiZWNhdXNlIEMrKyBjb2RlIGlzIGNvbXBpbGVkIGluIDMyLWJpdCBtb2RlIGJ1dCBsaW5rZWQKKwlpbiA2NC1iaXQgbW9kZS4KKworMjAwNi0wMi0wOCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwlNb3JlIHBvcnRhYmlsaXR5IGZpeGVzIGZvciBwcm9ibGVtcyBzdW1tYXJpemVkIGJ5IE5lbHNvbiBILiBGLiBCZWViZS4KKworCSogZG9jL2Jpc29uLnRleGluZm8gKENhbGMrKyBTY2FubmVyKTogV29yayBhcm91bmQgYSBidWcgaW4gZmxleAorCTIuNS4zMS4gIFRoaXMgcmVzZW1ibGVzIHRoZSAyMDA1LTEwLTEwIHBhdGNoIHRvIHNyYy9zY2FuLXNrZWwubC4KKworCSogZXhhbXBsZXMvY2FsYysrL01ha2VmaWxlLmFtIChjaGVja19QUk9HUkFNUyk6IFJlbmFtZWQgZnJvbQorCW5vZGlzdF9QUk9HUkFNUywgc2luY2Ugd2UgZG9uJ3QgbmVlZCB0byBhY3R1YWxseSBjb21waWxlIHRoZQorCWV4YW1wbGUgaWYgd2UncmUganVzdCBkb2luZyBhIHBsYWluICdtYWtlJy4gIFRoaXMgYXZvaWRzIGJvdGhlcmluZworCXRoZSBpbnN0YWxsZXIgdW5uZWNlc3NhcmlseSBhYm91dCBwcm9ibGVtcyBkdWUgdG8gd2VpcmQgQysrCisJY29tcGlsZXJzLgorCisyMDA2LTAyLTA2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCU1vcmUgcG9ydGFiaWxpdHkgZml4ZXMgZm9yIHByb2JsZW1zIHN1bW1hcml6ZWQgYnkgTmVsc29uIEguIEYuIEJlZWJlLgorCisJKiB0ZXN0cy9oZWFkZXJzLmF0IChBVF9URVNUX0NQUF9HVUFSRF9IKTogVXNlICNpbmNsdWRlIDwuLi4+IHJhdGhlcgorCXRoYW4gI2luY2x1ZGUgIi4uLiIsIGFuZCBjb21waWxlIHdpdGggLUknLicuICBUaGUgb2xkIG1ldGhvZCB3YXMKKwlub3QgcG9ydGFibGUsIGFjY29yZGluZyB0byBQb3NpeCBhbmQgdGhlIEMgc3RhbmRhcmQsIGFuZCBpdCBkb2VzCisJbm90IHdvcmsgd2l0aCBTdW4gQyA1LjcsIHdoZXJlIHByZXZpb3VzICNsaW5lIGRpcmVjdGl2ZXMgYWZmZWN0CisJdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHVzZWQgaW4gbGF0ZXIgI2luY2x1ZGUgIi4uLiIgZGlyZWN0aXZlcy4KKworMjAwNi0wMi0wNiAgSnVhbiBNYW51ZWwgR3VlcnJlcm8gIDxqdWFuLmd1ZXJyZXJvQGdteC5kZT4KKworCVZhcmlvdXMgREpHR1Agc3BlY2lmaWMgaXNzdWVzIGluIC9kamdwcAorCisyMDA2LTAyLTAyICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCU1vcmUgcG9ydGFiaWxpdHkgZml4ZXMgZm9yIHByb2JsZW1zIHN1bW1hcml6ZWQgYnkgTmVsc29uIEguIEYuIEJlZWJlLgorCisJKiBtNC9jeHgubTQgKEJJU09OX1RFU1RfRk9SX1dPUktJTkdfQ1hYX0NPTVBJTEVSKTogQ2hlY2sgdGhhdAorCScjaW5jbHVkZSA8bWFwPicgd29ya3MgYW5kIHRoYXQgeW91IGNhbiBhcHBseSArKyB0byBpdGVyYXRvcnMuCisKKzIwMDYtMDItMDEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJV29yayBhcm91bmQgcG9ydGFiaWxpdHkgcHJvYmxlbXMgc3VtbWFyaXplZCBieSBOZWxzb24gSC4gRi4gQmVlYmUgaW4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDA1LTA5L21zZzAwMDIxLmh0bWw+LgorCisJKiBtNC9jeHgubTQgKEJJU09OX1RFU1RfRk9SX1dPUktJTkdfQ1hYX0NPTVBJTEVSKTogQ2hlY2sKKwl0aGF0ICcjaW5jbHVkZSA8c3RyaW5nPicgd29ya3MuCisKKwkqIGRhdGEvbGFscjEuY2MgKHl5dHJhbnNsYXRlXyk6IE5vIGxvbmdlciBpbmxpbmUsIHRvIHdvcmsgYXJvdW5kIGEKKwlwb3J0aW5nIHByb2JsZW0gdG8gZysrIDMuNC4zIG9uIERhcndpbiA3LjkuMCwgd2hlcmUgZysrIGNvbXBsYWluZWQKKwkid2FybmluZzogc29ycnk6IHNlbWFudGljcyBvZiBpbmxpbmUgZnVuY3Rpb24gc3RhdGljIGRhdGEgYGNvbnN0CisJdW5zaWduZWQgY2hhciB0cmFuc2xhdGVfdGFibGVbMjYyXScgYXJlIHdyb25nICh5b3UnbGwgd2luZCB1cCB3aXRoCisJbXVsdGlwbGUgY29waWVzKSIuCisKKwkqIGxpYi9iYml0c2V0LmggKHN0cnVjdCBiaXRzZXRfdnRhYmxlKTogUmVuYW1lIG1lbWJlcnMgbm90LCBhbmQsCisJb3IsIHhvciB0byBub3RfLCBhbmRfLCBvcl8sIGFuZCB4b3JfLCByZXNwZWN0aXZlbHkuICBUaGlzIHdvcmtzCisJYXJvdW5kIGEgYnVnIGluIEdDQyAzLjQuMyBvbiBJcml4IDYuNSwgd2hpY2ggYXBwYXJlbnRseSBoYXMgYQorCXJhbmRvbSBzeXN0ZW0gaGVhZGVyIHNvbWV3aGVyZSB0aGF0IGluY2x1ZGVzIHRoZSBlcXVpdmFsZW50IG9mCisJPGlzbzY0Ni5oPi4KKworCSogdGVzdHMvaGVhZGVycy5hdCAoQVRfVEVTVF9DUFBfR1VBUkRfSCk6IERvbid0IGFzc3VtZSB0aGF0ICIkQ0MKKwktRSIgd29ya3M7IGl0IGFwcGFyZW50bHkgZG9lc24ndCB3b3JrIHdpdGggUGF0aFNjYWxlIEVLTyBDb21waWxlcgorCVN1aXRlIFZlcnNpb24gMi4wLgorCisyMDA2LTAxLTMwICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCUR1cmluZyBkZXRlcm1pbmlzdGljIEdMUiBvcGVyYXRpb24sIHVzZXIgYWN0aW9ucyBzaG91bGQgYmUgYWJsZSB0bworCWluZmx1ZW5jZSB0aGUgcGFyc2UgYnkgY2hhbmdpbmcgeXljaGFyLiAgVG8gbWFrZSB0aGlzIGVhc2llciB0byBmaXggYW5kCisJdG8gbWFrZSBnbHIuYyBlYXNpZXIgdG8gZXZvbHZlIGluIGdlbmVyYWwsIGRvbid0IG1haW50YWluIHl5dG9rZW4gaW4KKwlwYXJhbGxlbCB3aXRoIHl5Y2hhcjsganVzdCBjb21wdXRlIHl5dG9rZW4gd2hlbiBuZWVkZWQuCisJKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdCAoSW5jb3JyZWN0IGxvb2thaGVhZCBkdXJpbmcgZGV0ZXJtaW5pc3RpYworCUdMUik6IENoZWNrIHRoYXQgc2V0dGluZyB5eWNoYXIgaW4gYSB1c2VyIGFjdGlvbiBoYXMgdGhlIGludGVuZGVkCisJZWZmZWN0LgorCSogZGF0YS9nbHIuYyAoeXlHTFJTdGFjayk6IFJlbW92ZSB5eXRva2VucCBtZW1iZXIuCisJKHl5Y2xlYXJpbik6IERvbid0IHNldCAqeXl0b2tlbnAuCisJKHl5cHJvY2Vzc09uZVN0YWNrLCB5eXJlcG9ydFN5bnRheEVycm9yLCB5eXJlY292ZXJTeW50YXhFcnJvcik6IEV4YW1pbmUKKwl5eWNoYXIgcmF0aGVyIHRoYW4gKnl5dG9rZW5wIHRvIGRldGVybWluZSB0aGUgY3VycmVudCBsb29rYWhlYWQuCisJQ29tcHV0ZSB5eXRva2VuIGxvY2FsbHkgd2hlbiBuZWVkZWQuCisJKHl5cGFyc2UpOiBMaWtld2lzZS4gIFJlbW92ZSB0aGUgbG9jYWwgeXl0b2tlbiB0aGF0IHl5dG9rZW5wIHVzZWQgdG8KKwlwb2ludCB0by4KKworCSogZG9jL2Jpc29uLnRleGluZm8gKEJpc29uIE9wdGlvbnMpOiBSZW1vdmUgc3RyYXkgc2VudGVuY2UgZnJhZ21lbnQKKwlhZnRlciBgLS1yZXBvcnQnIGRvY3VtZW50YXRpb24uCisKKzIwMDYtMDEtMzAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBzcmMvcGFyc2UtZ3JhbS55IChncmFtbWFyX2RlY2xhcmF0aW9uKTogTG9jYXRpb24gb2YgcHJpbnRlcgorCXN5bWJvbCBpcyBAMSwgbm90IGxpc3QtPmxvY2F0aW9uLiAgQnVnIHJlcG9ydGVkIGJ5IHR3bGV2by4KKwkqIHRlc3RzL2lucHV0LmF0IChJbmNvbXBhdGlibGUgQWxpYXNlcyk6IEFkanVzdCB0byBhYm92ZSBjaGFuZ2UuCisKKzIwMDYtMDEtMjkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiB0ZXN0cy9pbnB1dC5hdCAoQVRfQ0hFQ0tfVU5VU0VEX1ZBTFVFUyk6IFJlbW92ZS4gIEluc3RlYWQsIGRvCisJYWxsIHRoZSB0ZXN0IGF0IG9uY2UuICBUaGlzIG1ha2VzIHRoZSBvdXRwdXQgZWFzaWVyIHRvIHJlYWQgaW4gdGhlCisJbm9ybWFsIGNhc2UuCisKKwlGaXggYSBsb25nc3RhbmRpbmcgYnVnIHVuY292ZXJlZCBieSBicm8tMC45YTkvc3JjL3BhcnNlLnksIHdoaWNoIEkKKwlnb3QgZnJvbSA8aHR0cDovL2Jyby1pZHMub3JnL2Rvd25sb2FkLmh0bWw+LiAgVGhlIGJ1ZyBpcyB0aGF0CisJd2hlbiB0d28gYWN0aW9ucyBhcHBlYXJlZCBpbiBzdWNjZXNzaW9uLCB0aGUgc2Vjb25kIG9uZSB3YXMKKwlzY2FubmVkIGJlZm9yZSB0aGUgZmlyc3Qgb25lIHdhcyBhZGRlZCB0byB0aGUgZ3JhbW1hciBydWxlCisJYXMgYSBtaWRydWxlIGFjdGlvbi4gIEJpc29uIHRoZW4gb3V0cHV0IHRoZSBpbmNvcnJlY3Qgd2FybmluZworCSJwYXJzZS55OjkwNS4xNy05MDYuMzY6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDMiLgorCSogc3JjL3BhcnNlLWdyYW0ueSAoQlJBQ0VEX0NPREUsIGFjdGlvbik6IFRoZXNlIGFyZSBubyBsb25nZXIKKwlhc3NvY2lhdGVkIHdpdGggYSB2YWx1ZS4KKwkocmhzKTogRG9uJ3QgaW52b2tlIGdyYW1tYXJfY3VycmVudF9ydWxlX2FjdGlvbl9hcHBlbmQuCisJKGFjdGlvbik6IEludm9rZSBpdCBoZXJlIGluc3RlYWQuCisJKiBzcmMvcmVhZGVyLmMgKGdyYW1tYXJfbWlkcnVsZV9hY3Rpb24pOiBOb3cgZXh0ZXJuLgorCShncmFtbWFyX2N1cnJlbnRfcnVsZV9hY3Rpb25fYXBwZW5kKTogRG9uJ3QgaW52b2tlCisJZ3JhbW1hcl9taWRydWxlX2FjdGlvbjsgdGhhdCBpcyBub3cgdGhlIHNjYW5uZXIncyBqb2IuCisJKiBzcmMvcmVhZGVyLmggKGxhc3Rfc3RyaW5nLCBsYXN0X2JyYWNlZF9jb2RlX2xvYyk6CisJKGdyYW1tYXJfbWlkcnVsZV9hY3Rpb24pOiBOZXcgZGVjbHMuCisJKiBzcmMvc2Nhbi1ncmFtLmwgKGxhc3Rfc3RyaW5nKTogTm93IGV4dGVybiwgc2lnaC4KKwkobGFzdF9icmFjZWRfY29kZV9sb2MpOiBOZXcgZXh0ZXJuIHZhcmlhYmxlLgorCSg8SU5JVElBTD4ieyIpOiBJbnZva2UgZ3JhbW1hcl9taWRydWxlX2FjdGlvbiBpZiB0aGUgY3VycmVudAorCXJ1bGUgYWxyZWFkeSBoYXMgYW4gYWN0aW9uLgorCSg8U0NfQlJBQ0VEX0NPREU+In0iKTogU2V0IGxhc3RfYnJhY2VkX2NvZGVfbG9jIGJlZm9yZSByZXR1cm5pbmcuCisJKiB0ZXN0cy9pbnB1dC5hdCAoQVRfQ0hFQ0tfVU5VU0VEX1ZBTFVFUyk6CisJQWRkIHNvbWUgdGVzdHMgdG8gY2hlY2sgdGhhdCB0aGUgYWJvdmUgY2hhbmdlcyBmaXhlZCB0aGUgYnVnLgorCisyMDA2LTAxLTI3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogc3JjL3JlYWRlci5jIChzeW1ib2xfc2hvdWxkX2JlX3VzZWQpOiBSZW5hbWVkIGZyb20gc3ltYm9sX3R5cGVkX3AuCisJQWxsIHVzZWQgY2hhbmdlZC4gIENoZWNrIHdoZXRoZXIgdGhlIHN5bWJvbCBoYXMgYSBkZXN0cnVjdG9yLAorCW5vdCB3aGV0aGVyIGl0IGlzIHR5cGVkLgorCSogdGVzdHMvaW5wdXQuYXQgKEFUX0NIRUNLX1VOVVNFRF9WQUxVRVMpOiBBZGQgYSBkZXN0cnVjdG9yLCBzbworCXRoYXQgdGhlIHZhbHVlcyBhcmUgc3RpbGwgcmVwb3J0ZWQgYXMgdW51c2VkLiAgQWxsIGxpbmUgbnVtYmVycworCWFkanVzdGVkLgorCisyMDA2LTAxLTIzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCVdvcmsgYXJvdW5kIGEgYnVnIGluIGJybyAwLjgsIHdoaWNoIHVuZGVycGFyZW50aGVzaXplcyBpdHMKKwlkZWZpbml0aW9uIG9mIFlZTExPQ19ERUZBVUxULgorCSogZGF0YS9nbHIuYzogQ2hhbmdlIGFsbCB1c2VzIG9mIFlZTExPQ19ERUZBVUxUIHRvIHBhcmVudGhlc2l6ZQorCXRoZWlyIGFyZ3VtZW50cy4KKwkqIGRhdGEvbGFscjEuY2M6IExpa2V3aXNlLgorCSogZGF0YS95YWNjLmNjOiBMaWtld2lzZS4KKworMjAwNi0wMS0yMiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwlXb3JrIGFyb3VuZCBhIGJ1ZyBpbiBQaWtlIDcuMCwgYW5kIGdpdmUgdGhlIFBpa2UgZm9sa3MgYQorCWJldHRlciB3YXkgdG8gb3ZlcnJpZGUgdGhlIHVzdWFsIGludCB3aWR0aHMuCisJKiBkYXRhL3lhY2MuYyAoYjRfaW50X3R5cGUpOiBVc2UgeXl0eXBlX3VpbnQ4LCBldGMuLCBzbyB0aGF0IHRoZQorCXVzZXIgY2FuIG92ZXJyaWRlIHRoZSB0eXBlcy4KKwkoc2hvcnQpOiAjdW5kZWYsIHRvIHdvcmsgYXJvdW5kIGEgYnVnIGluIFBpa2UgNy4wLgorCSh5eXR5cGVfdWludDgsIHl5dHlwZV9pbnQ4LCB5eXR5cGVfdWludDE2LCB5eXR5cGVfaW50MTYpOiBOZXcgdHlwZXMuCisJKHVuaW9uIHl5YWxsb2MueXlzcyk6IFVzZSB5eXR5cGVfaW50MTYgcmF0aGVyIHRoYW4gc2hvcnQuCisJQWxsIHVzZXMgY2hhbmdlZC4KKwkoeXlzaWduZWRfY2hhcik6IFJlbW92ZS4KKwkqIHNyYy9wYXJzZS1ncmFtLnkgKFlZVFlQRV9VSU5UOCwgWVlUWVBFX0lOVDgsIFlZVFlQRV9VSU5UMTYpOgorCShZWVRZUEVfSU5UMTYpOiBOZXcgbWFjcm9zLCB0byB0ZXN0IHRoZSBuZXcgZmFjaWxpdHkgaW4geWFjYy5jLgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoV2ViMmMgQWN0aW9ucyk6IEFkanVzdCB0byBhYm92ZSBjaGFuZ2VzLgorCisJKiBzcmMvcmVhZGVyLmMgKGNoZWNrX2FuZF9jb252ZXJ0X2dyYW1tYXIpOiBOZXcgZnVuY3Rpb24uCisJKHJlYWRlcik6IENsb3NlIHRoZSBpbnB1dCBmaWxlIGV2ZW4gaWYgc29tZXRoaW5nIHdlbnQgd3JvbmcgZHVyaW5nCisJcGFyc2luZy4gIE1pbm9yIGZpbGUgZGVzY3JpcHRvciBsZWFrIHJlcG9ydGVkIGJ5IHR3bGV2by4KKworCSogc3JjL2Fzc29jLmMgKGFzc29jX3RvX3N0cmluZyk6IFVzZSBhIGRlZmF1bHQ6IGFib3J0ICgpOyBjYXNlCisJdG8gcGFjaWZ5IGdjYyAtV3N3aXRjaC1kZWZhdWx0LgorCSogc3JjL3NjYW4tZ3JhbS5sIChhZGp1c3RfbG9jYXRpb24pOiBVc2UgYSBkZWZhdWx0OiBicmVhazsgY2FzZQorCXRvIHBhY2lmeSBnY2MgLVdzd2l0Y2gtZGVmYXVsdC4KKwkqIHNyYy9zY2FuLXNrZWwuaCAoc2tlbF9nZXRfbGluZW5vLCBza2VsX2dldF9pbiwgc2tlbF9nZXRfb3V0KToKKwkoc2tlbF9nZXRfbGVuZywgc2tlbF9nZXRfdGV4dCwgc2tlbF9zZXRfbGluZW5vLCBza2VsX3NldF9pbik6CisJKHNrZWxfc2V0X291dCwgc2tlbF9nZXRfZGVidWcsIHNrZWxfc2V0X2RlYnVnLCBza2VsX2xleF9kZXN0cm95KToKKwlNb3ZlIHRoZXNlIGRlY2xzIHRvIHNjYW4tc2tlbC5sLCBzaW5jZSB0aGV5IGRvbid0IG5lZWQgdG8gYmUKKwl2aXNpYmxlIGVsc2V3aGVyZS4KKwkqIHNyYy9zY2FuLXNrZWwubDogQWNjZXB0IHRoZSBhYm92ZSBkZWNscy4KKwkoc2tlbF9sZXgpOiBOZXcgZGVjbCwgdG8gcGFjaWZ5IEdDQyB3aGVuIHVucGF0Y2hlZCBmbGV4IDIuNS4zMQorCWlzIHVzZWQuCisKKzIwMDYtMDEtMjEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBNYWtlZmlsZS5jZmcgKGxvY2FsLWNoZWNrcy10by1za2lwKTogQWRkIGNoYW5nZWxvZy1jaGVjaywKKwlzaW5jZSB3ZSBkb24ndCB3YW50IHRvIGluc2lzdCBvbiBhIHZlcnNpb24gbnVtYmVyIGF0IHRoZSBzdGFydAorCW9mIHRoZSBjaGFuZ2Vsb2cgZXZlcnkgdGltZS4KKwkqIE1ha2VmaWxlLm1haW50OiBTeW5jIGZyb20gY29yZXV0aWxzIGEgYml0IGJldHRlci4KKwkoc2NfdHJhaWxpbmdfYmxhbmspOiBSZW5hbWVkIGZyb20gc2NfdHJhaWxpbmdfc3BhY2UuCisJQWxsIHVzZXMgY2hhbmdlZC4KKwkoc2Nfbm9faWZfaGF2ZV9jb25maWdfaCwgc2NfcmVxdWlyZV9jb25maWdfaCk6CisJKHNjX3Byb2hpYml0X2Fzc2VydF93aXRob3V0X3VzZSk6IE5ldyBydWxlcy4KKwkoc2Nfb2Jzb2xldGVfc3ltYm9scyk6IERvbid0IGNhdGNoIE1ha2VmaWxlLm1haW50IGl0c2VsZi4KKwkoc2NfZGRfbWF4X3N5bV9sZW5ndGgpOiBGaXggbGVhZGluZyBzcGFjZXMgaW4gcnVsZS4KKwkoc2Nfc3lzdGVtX2hfaGVhZGVycyk6IFByZWZpeCB3aXRoIEAuCisJKHNjX3VzZWxlc3NfY3BwX3BhcmVucywgbTQtY2hlY2spOiBPdXRwdXQgbGluZSBudW1iZXJzLgorCShjaGFuZ2Vsb2ctY2hlY2spOiBBbGxvdyB2ZXJzaW9uIG9ubHkgaW4gaGVhZC4KKwkqIGRhdGEvYy5tNDogVXNlICJkZWZpbmVkIEZPTyIgaW5zdGVhZCBvZiAiZGVmaW5lZCAoRk9PKSIsIHRvCisJc2F0aXNmeSBuZXcgTWFrZWZpbGUubWFpbnQgcnVsZS4KKwkqIGRhdGEvZ2xyLmM6IExpa2V3aXNlLgorCSogZGF0YS9nbHIuY2M6IExpa2V3aXNlLgorCSogZGF0YS9sYWxyMS5jYzogTGlrZXdpc2UuCisJKiBkYXRhL3lhY2MuYzogTGlrZXdpc2UuCisJKiBsaWIvZWJpdHNldHYuYzogTGlrZXdpc2UuCisJKiBsaWIvbGJpdHNldC5jOiBMaWtld2lzZS4KKwkqIGxpYi9zdWJwaXBlLmM6IExpa2V3aXNlLgorCSogbGliL3RpbWV2YXIuYzogTGlrZXdpc2UuCisJKiBzcmMvc3lzdGVtLmg6IExpa2V3aXNlLgorCSogZGF0YS95YWNjLmMgKFlZU1RZUEUpOiBEb24ndCBnZW5lcmF0ZSB0cmFpbGluZyBzcGFjZXMgaW4gb3V0cHV0LgorCSogZGpncHAvTWFrZWZpbGUubWFpbnQ6IEFkZCBjb3B5cmlnaHQgbm90aWNlLgorCSogZGpncHAvUkVBRE1FLmluOiBMaWtld2lzZS4KKwkqIGRqZ3BwL2NvbmZpZy5iYXQ6IExpa2V3aXNlLgorCSogZGpncHAvY29uZmlnLnNpdGU6IExpa2V3aXNlLgorCSogZGpncHAvY29uZmlnX2guc2VkOiBMaWtld2lzZS4KKwkqIGRqZ3BwL2RqdW5wYWNrLmJhdDogTGlrZXdpc2UuCisJKiBkamdwcC9jb25maWcuc2VkOiBGaXggY29weXJpZ2h0IG5vdGljZSB0byBtYXRjaCBzdGFuZGFyZCBmb3JtYXQuCisJKiBkamdwcC9zdWJwaXBlLmg6IExpa2V3aXNlLgorCSogbGliL2JpdHNldHYtcHJpbnQuYzogTGlrZXdpc2UuCisJKiBsaWIvYml0c2V0di5jOiBMaWtld2lzZS4KKwkqIGxpYi9zdWJwaXBlLmg6IExpa2V3aXNlLgorCSogbGliL3RpbWV2YXIuYzogTGlrZXdpc2UuCisJKiBsaWIvdGltZXZhci5oOiBMaWtld2lzZS4KKwkqIGRqZ3BwL3N1YnBpcGUuYzogVXNlIHN0YW5kYXJkIHJlY2lwZSBmb3IgY29uZmlnLmguCisJKiBsaWIvYWJpdHNldC5jOiBMaWtld2lzZS4KKwkqIGxpYi9iaXRzZXQuYzogTGlrZXdpc2UuCisJKiBsaWIvYml0c2V0X3N0YXRzLmM6IExpa2V3aXNlLgorCSogbGliL2JpdHNldHYtcHJpbnQuYzogTGlrZXdpc2UuCisJKiBsaWIvYml0c2V0di5jOiBMaWtld2lzZS4KKwkqIGxpYi9lYml0c2V0di5jOiBMaWtld2lzZS4KKwkqIGxpYi9nZXQtZXJybm8uYzogTGlrZXdpc2UuCisJKiBsaWIvbGJpdHNldC5jOiBMaWtld2lzZS4KKwkqIGxpYi9zdWJwaXBlLmM6IExpa2V3aXNlLgorCSogbGliL3RpbWV2YXIuYzogTGlrZXdpc2UuCisJKiBsaWIvdmJpdHNldC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzL2xvY2FsLmF0OiBMaWtld2lzZS4KKwkqIHNyYy9zY2FuLWdyYW0ubDogRG9uJ3QgaW5jbHVkZSB2ZXJpZnkuaCwgc2luY2Ugc3lzdGVtLmggZG9lcworCXRoYXQgZm9yIHVzLgorCSogLngtc2NfcmVxdWlyZV9jb25maWdfaDogTmV3IGZpbGUuCisJKiAueC1zY191bm1hcmtlZF9kaWFnbm9zdGljczogTmV3IGZpbGUuCisKKzIwMDYtMDEtMjAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJQmUgYSBiaXQgbW9yZSBzeXN0ZW1hdGljIGFib3V0IHVzaW5nICdhYm9ydCcuCisJKiBsaWIvYWJpdHNldC5jIChhYml0c2V0X3Rlc3QpOiBSZW1vdmUgQVRUUklCVVRFX1VOVVNFRDsgbm90IG5lZWRlZC4KKwkqIGxpYi9iaXRzZXQuYyAoYml0c2V0X2J5dGVzLCBiaXRzZXRfaW5pdCwgYml0c2V0X29wNF9jbXApOgorCVB1dCAnZGVmYXVsdDogYWJvcnQgKCk7JyBiZWZvcmUgc29tZSBvdGhlciBjYXNlLCB0byBzYXRpc2Z5IG9sZGVyCisJcGVkYW50aWMgY29tcGlsZXJzLgorCSogbGliL2JpdHNldF9zdGF0cy5jIChiaXRzZXRfc3RhdHNfaW5pdCk6IExpa2V3aXNlLgorCSogbGliL2ViaXRzZXQuYyAoZWJpdHNldF9lbHRfZmluZCwgZWJpdHNldF9vcDNfY21wKTogTGlrZXdpc2UuCisJKiBsaWIvbGJpdHNldC5jIChsYml0c2V0X2VsdF9maW5kLCBsYml0c2V0X29wM19jbXApOiBMaWtld2lzZS4KKwkqIHNyYy9jb25mbGljdHMuYyAocmVzb2x2ZV9zcl9jb25mbGljdCk6IExpa2V3aXNlLgorCSogc3JjL3ZjZy5jIChnZXRfY29sb3Jfc3RyLCBnZXRfdGV4dG1vZGVfc3RyLCBnZXRfc2hhcGVfc3RyKToKKwkoZ2V0X2RlY2lzaW9uX3N0ciwgZ2V0X29yaWVudGF0aW9uX3N0ciwgZ2V0X25vZGVfYWxpZ25tZW50X3N0cik6CisJKGdldF9hcnJvd19tb2RlX3N0ciwgZ2V0X2Nyb3NzaW5nX3R5cGVfc3RyLCBnZXRfdmlld19zdHIpOgorCShnZXRfbGluZXN0eWxlX3N0ciwgZ2V0X2Fycm93c3R5bGVfc3RyKTogTGlrZXdpc2UuCisJKiBzcmMvY29uZmxpY3RzLmMgKHJlc29sdmVfc3JfY29uZmxpY3QpOgorCVVzZSBhIGRlZmF1bHQgY2FzZSByYXRoZXIgdGhhbiBvbmUgZm9yIHRoZSBvbmUgcmVtYWluaW5nIGVudW0KKwl2YWx1ZSwgdG8gY2F0Y2ggaW52YWxpZCBlbnVtIHZhbHVlcyBhcyB3ZWxsLgorCSogc3JjL2xhbHIuYyAoc2V0X2dvdG9fbWFwLCBtYXBfZ290byk6CisJUHJlZmVyICJhc3NlcnQgKEZPTyk7IiB0byAiaWYgKCFGT08pIGFib3J0ICgpOyIuCisJKiBzcmMvbnVsbGFibGUuYyAobnVsbGFibGVfY29tcHV0ZSwgdG9rZW5fZGVmaW5pdGlvbnNfb3V0cHV0KToKKwlMaWtld2lzZS4KKwkqIHNyYy9yZWFkZXIuYyAocGFja2dyYW0sIHJlYWRlcik6IExpa2V3aXNlLgorCSogc3JjL3N0YXRlLmMgKHRyYW5zaXRpb25zX3RvLCBzdGF0ZV9uZXcsIHN0YXRlX3JlZHVjdGlvbl9maW5kKToKKwlMaWtld2lzZS4KKwkqIHNyYy9zeW10YWIuYyAoc3ltYm9sX3VzZXJfdG9rZW5fbnVtYmVyX3NldCwgc3ltYm9sX21ha2VfYWxpYXMpOgorCShzeW1ib2xfcGFjayk6IExpa2V3aXNlLgorCSogc3JjL3RhYmxlcy5jIChjb25mbGljdF9yb3csIHBhY2tfdmVjdG9yKTogTGlrZXdpc2UuCisJKiBzcmMvc2Nhbi1za2VsLmwgKFFQVVRTKTogUmVtb3ZlIHVubmVjZXNzYXJ5IHBhcmVucy4KKwkoQkFTRV9RUFVUUywgIkBvdXRwdXQgIi4qXG4pOiBSZW1vdmUgdW5uZWNlc3NhcnkgYXNzZXJ0cy4KKwkqIHNyYy9zeXN0ZW0uaDogRG9uJ3QgaW5jbHVkZSA8YXNzZXJ0Lmg+LgorCShhc3NlcnQpOiBOZXcgbWFjcm8uCisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChQcm9sb2d1ZSwgUnVsZXMsIEFjdGlvbnMsIFVuaW9uIERlY2wsIEFjdGlvbiBEZWNsKToKKwkoRGVzdHJ1Y3RvciBEZWNsLCBQYXJzZXIgRnVuY3Rpb24sIFB1cmUgQ2FsbGluZyk6CisJRGVzY3JpYmUgcnVsZXMgZm9yIGJyYWNlcyBpbnNpZGUgQyBjb2RlIG1vcmUgY2FyZWZ1bGx5LgorCisyMDA2LTAxLTE5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCUZpeCBzb21lIHBvcnRpbmcgZ2xpdGNoZXMgZm91bmQgYnkgTmVsc29uIEguIEYuIEJlZWJlLgorCSogbGliL2FiaXRzZXQuYyAoYWJpdHNldF9yZXNpemUpOiBSZXdyaXRlIHRvIGF2b2lkIHdhcm5pbmdzIGZyb20KKwljb21waWxlcnMgdGhhdCBkb24ndCB1bmRlcnN0YW5kIHRoYXQgYWJvcnQgKCkgZG9lcyBub3QgcmV0dXJuLgorCSogc3JjL3N0YXRlLmMgKHRyYW5zaXRpb25zX3RvKTogTGlrZXdpc2UuCisJKiBtNC9jeHgubTQgKEJJU09OX1RFU1RfRk9SX1dPUktJTkdfQ1hYX0NPTVBJTEVSKTogQ2hlY2sKKwl0aGF0ICcjaW5jbHVkZSA8Y3N0ZGxpYj4nIHdvcmtzLgorCSogc3JjL3N5c3RlbS5oIChJTlQ4X01JTiwgSU5UMTZfTUlOLCBJTlQzMl9NSU4sIElOVDhfTUFYKToKKwkoSU5UMTZfTUFYLCBVSU5UOF9NQVgsIElOVDMyX01BWCwgVUlOVDE2X01BWCwgVUlOVDMyX01BWCk6CisJI3VuZGVmIGlmICEgZGVmaW5lZCBfX1NURENfVkVSU0lPTl9fIHx8IF9fU1REQ19WRVJTSU9OX18gPCAxOTk5MDEsCisJZm9yIHRoZSBiZW5lZml0IG9mIHNvbWUgcHJlLUM5OSBjb21waWxlcnMuCisKKwkqIGJvb3RzdHJhcDogVW5kbyBjaGFuZ2VzIHRvIGdudWxpYiBmaWxlcyB0aGF0IGF1dG9yZWNvbmYgbWFkZS4KKworCU1pbm9yIGZpeHVwcyB0byBnZXQgJ21ha2UgbWFpbnRhaW5lci1jaGVjaycgdG8gd29yay4KKwkqIGNvbmZpZ3VyZS5hYzogRG9uJ3QgdXNlIC1XbmVzdGVkLWV4dGVybnMsIGFzIGl0J3MgaW5jb21wYXRpYmxlCisJd2l0aCB0aGUgbmV3IHZlcmlmeS5oIGltcGxlbWVudGF0aW9uLgorCSogZGF0YS9jLm00IChiNF95eV9zeW1ib2xfcHJpbnRfZ2VuZXJhdGUpOiBZWVVTRSAoeXlvdXRwdXQpLgorCSogZGF0YS9nbHIuYyAoWVlVU0UpOiBEZXBlbmQgb24gX19HTlVDX18gYXMgd2VsbC4KKwkqIGRhdGEveWFjYy5jIChZWVVTRSk6IExpa2V3aXNlLgorCSogZGF0YS9sYWxyMS5jYyAoeXlzeW50YXhfZXJyb3JfKTogWVlVU0UgKHl5c3RhdGUpLgorCSogbGliL3N1YnBpcGUuYyAoZW5kX29mX291dHB1dF9zdWJwaXBlKTogVGhlIGFyZ3MgYXJlIHVudXNlZC4KKwkqIHNyYy9wYXJzZS1ncmFtLnkgKGRlY2xhcmF0aW9uKTogRG9uJ3QgcGFzcyBhIHN0cmluZyBjb25zdGFudAorCXRvIGEgZnVuY3Rpb24gdGhhdCBleHBlY3RzIGNoYXIgKiwgc2luY2UgR0NDIG1pZ2h0IGNvbXBsYWluCisJYWJvdXQgdGhlIGNvbnN0YW50IHZhbHVlLgorCSogc3JjL3JlYWRlci5jIChzeW1ib2xfdHlwZWRfcCk6IEFkZCBwYXJlbnMgdG8gcGFjaWZ5IEdDQy4KKwkqIHRlc3RzL2N4eC10eXBlLmF0IChfQVRfVEVTVF9HTFJfQ1hYVFlQRVMpOiAjdW5kZWYgeXlsbG9jIGFuZCB5eWx2YWwKKwliZWZvcmUgI2RlZmluaW5nIHRoZW0uCisJKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdAorCShJbmNvcnJlY3RseSBpbml0aWFsaXplZCBsb2NhdGlvbiBmb3IgZW1wdHkgcmlnaHQtaGFuZCBzaWRlIGluIEdMUik6CisJSW4geXllcnJvciwgdXNlIHRoZSBtc2cgYXJnLgorCShDb3JydXB0ZWQgc2VtYW50aWMgb3B0aW9ucyBpZiB1c2VyIGFjdGlvbiBjdXRzIHBhcnNlKToKKwkoSW5jb3JyZWN0IGxvb2thaGVhZCBkdXJpbmcgZGV0ZXJtaW5pc3RpYyBHTFIpOgorCShJbmNvcnJlY3QgbG9va2FoZWFkIGR1cmluZyBub25kZXRlcm1pbmlzdGljIEdMUik6CisJRG9uJ3QgbmFtZSBhIGxvY2FsIHZhciAnaW5kZXgnOyBpdCBzaGFkb3dzIHN0cmluZy5oJ3MgJ2luZGV4Jy4KKworMjAwNi0wMS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHRlc3RzL2NhbGMuYXQgKF9BVF9EQVRBX0NBTENfWSk6IEluaXRpYWxpemUgdGhlIHdob2xlIGluaXRpYWwKKwlsb2NhdGlvbiwgbm90IGp1c3QgcGFydHMgb2YgaXQuCisKKzIwMDYtMDEtMTggIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBORVdTOiBEb2N1bWVudCB0aGUgZmFjdCB0aGF0IG11bHRpcGxlICV1bmlvbnMgYXJlIG5vdyBhbGxvd2VkLgorCSogZG9jL2Jpc29uLnRleGluZm8gKFVuaW9uIERlY2wpOiBMaWtld2lzZS4KKwkqIFRPRE86IFRoaXMgZmVhdHVyZSBpcyBub3cgaW1wbGVtZW50ZWQsIHNvIHJlbW92ZSBpdCBmcm9tCisJdGhlIHdpc2hsaXN0LgorCisJKiBNYWtlZmlsZS5tYWludDogTWVyZ2Ugd2l0aCBjb3JldXRpbHMgTWFrZWZpbGUubWFpbnQuCisJKENWU19MSVNUKTogVXNlIGJ1aWxkLWF1eCB2ZXJzaW9uIGlmIGF2YWlsYWJsZS4KKwkoVkVSU0lPTl9SRUdFWFApOiBOZXcgbWFjcm8uCisJKHN5bnRheC1jaGVjay1ydWxlcyk6IEFkZCBzY19ub19pZl9oYXZlX2NvbmZpZ19oLAorCXNjX3Byb2hpYml0X2Fzc2VydF93aXRob3V0X3VzZSwgc2NfcmVxdWlyZV9jb25maWdfaCwKKwlzY191c2VsZXNzX2NwcF9wYXJlbnMuCisJKHNjX29ic29sZXRlX3N5bWJvbHMpOiBDaGVjayBmb3IgT19OREVMQVkuCisJKHNjX2RkX21heF9zeW1fbGVuZ3RoKTogVHJhY2sgY29yZXV0aWxzLgorCShzY191bm1hcmtlZF9kaWFnbm9zdGljcyk6IExvb2sgaW4gYWxsIGZpbGVzLCBub3QganVzdCAqLmMuCisJKHNjX3VzZWxlc3NfY3BwX3BhcmVucyk6IE5ldyBydWxlLgorCShuZXdzLWRhdGUtY2hlY2spOiBMb29rIGZvciB2ZXJzaW9uIG9yIHRvZGF5J3MgZGF0ZS4KKwkoY2hhbmdlbG9nLWNoZWNrKTogRG9uJ3QgcmVxdWlyZSB2ZXJzaW9uIG51bWJlciBuZWFyIGhlYWQuCisJKGNvcHlyaWdodC1jaGVjayk6IFVzZSBjdXJyZW50IHllYXIgaW5zdGVhZCBvZiBoYXJkd2lyaW5nIDIwMDUuCisJKG15LWRpc3RjaGVjayk6IERlcGVuZCBvbiAkKHJlbGVhc2VfYXJjaGl2ZV9kaXIpLyQocHJldi10Z3opLgorCShhbm5vdW5jZW1lbnQpOiBBZGQgLS1ncGcta2V5LUlELgorCisJKiBkamdwcC9jb25maWcuc2VkOiBBZGQgY29weXJpZ2h0IG5vdGljZSwgYW5kIHJlcGxhY2UgImZpbGVzeXN0ZW0iCisJd2l0aCAiZmlsZSBzeXN0ZW0iLgorCisJQXZvaWQgdW5kZWZpbmVkIGJlaGF2aW9yIHRoYXQgYWRkcmVzc2VkIGp1c3QgYmVmb3JlIHRoZSBzdGFydCBvZiBhbgorCWFycmF5LiAgUHJvYmxlbSByZXBvcnRlZCBieSB0d2xldm8uCisJKiBzcmMvcmVhZGVyLmMgKHBhY2tncmFtKTogUHJlcGVuZCBhIG5ldyBzZW50aW5lbCBiZWZvcmUgcml0ZW0uCisJKiBzcmMvbGFsci5jIChidWlsZF9yZWxhdGlvbnMpOiBSZWx5IG9uIG5ldyBzZW50aW5lbC4KKwkqIHNyYy9ncmFtLmMgKGdyYW1fZnJlZSk6IEFkanVzdCB0byBuZXcgc2VudGluZWwuCisKKzIwMDYtMDEtMTIgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBkYXRhL2dsci5jICh5eUdMUlN0YXRlU2V0KTogUmVuYW1lIHl5bG9va2FoZWFkU3RhdHVzZXMgdG8KKwl5eWxvb2thaGVhZE5lZWRzLiAgQWxsIHVzZXMgdXBkYXRlZC4KKwkoeXlzcGxpdFN0YWNrKTogUmVuYW1lIGxvY2FsIHl5bmV3TG9va2FoZWFkU3RhdHVzZXMgdG8KKwl5eW5ld0xvb2thaGVhZE5lZWRzLgorCSogZGF0YS9nbHItcmVncmVzc2lvbi5hdCAoSW5jb3JyZWN0IGxvb2thaGVhZCBkdXJpbmcgbm9uZGV0ZXJtaW5pc3RpYworCUdMUik6IEluIGNvbW1lbnRzLCBjaGFuZ2UgYGxvb2thaGVhZCBzdGF0dXMnIHRvIGBsb29rYWhlYWQgbmVlZCcuCisKKzIwMDYtMDEtMTEgIFBhdWwgSGlsZmluZ2VyICA8aGlsZmluZ3JAdHVsbHkuQ1MuQmVya2VsZXkuRURVPgorCisJKiBkYXRhL2dsci5jICh5eXNwbGl0U3RhY2spOiBBIGxpdHRsZSBzdHlsaXN0aWMgcmV3cml0ZS4KKworMjAwNi0wMS0xMSAgUGF1bCBIaWxmaW5nZXIgIDxoaWxmaW5nckB0dWxseS5DUy5CZXJrZWxleS5FRFU+CisKKwkqIGRhdGEvZ2xyLmMgKHl5YWRkRGVmZXJyZWRBY3Rpb24pOiBGbGVzaCBvdXQgdGhlIGNvbW1lbnQuCisKKzIwMDYtMDEtMTEgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBkb2MvYmlzb24udGV4aW5mbzogRml4IHNvbWUgdHlwb3MuCisJKEdMUiBTZW1hbnRpYyBBY3Rpb25zKTogTmV3IHN1YnNlY3Rpb24gZGlzY3Vzc2luZyBzcGVjaWFsCisJY29uc2lkZXJhdGlvbnMgYmVjYXVzZSBHTFIgc2VtYW50aWMgYWN0aW9ucyBtaWdodCBiZSBkZWZlcnJlZC4KKwkoQWN0aW9ucyk6IE1lbnRpb24gbG9vay1haGVhZCB1c2FnZSBvZiB5eWx2YWwuCisJKEFjdGlvbnMgYW5kIExvY2F0aW9ucyk6IE1lbnRpb24gbG9vay1haGVhZCB1c2FnZSBvZiB5eWxsb2MuCisJKFNwZWNpYWwgRmVhdHVyZXMgZm9yIFVzZSBpbiBBY3Rpb25zKTogQWRkIFlZRU9GIGVudHJ5IGFuZCBtZW50aW9uIGl0CisJaW4gdGhlIHl5Y2hhciBlbnRyeS4KKwlJbiB0aGUgeXljaGFyIGVudHJ5LCByZW1vdmUgbWVudGlvbiBvZiB0aGUgbG9jYWwgeXljaGFyIGNhc2UgKHB1cmUKKwlwYXJzZXIpIHNpbmNlIHRoaXMgaXMgaXJyZWxldmFudCBpbmZvcm1hdGlvbiB3aGVuIHdyaXRpbmcgc2VtYW50aWMKKwlhY3Rpb25zIGFuZCBzaW5jZSBpdCdzIGFscmVhZHkgZGlzY3Vzc2VkIGluIGBUYWJsZSBvZiBTeW1ib2xzJyB3aGVyZQorCXl5Y2hhciBpcyBvdGhlcndpc2UgZGVzY3JpYmVkIGFzIGFuIGV4dGVybmFsIHZhcmlhYmxlLgorCUluIHRoZSB5eWNoYXIgZW50cnksIGRvbid0IGNhbGwgaXQgdGhlIGBjdXJyZW50JyBsb29rLWFoZWFkIHNpbmNlIGl0CisJaXNuJ3Qgd2hlbiBzZW1hbnRpYyBhY3Rpb25zIGFyZSBkZWZlcnJlZC4KKwlJbiB0aGUgeXljaGFyIGFuZCB5eWNsZWFyaW4gZW50cmllcywgYWRkIG5vdGUgYWJvdXQgZGVmZXJyZWQgc2VtYW50aWMKKwlhY3Rpb25zLgorCUFkZCB5eWxsb2MgYW5kIHl5bHZhbCBlbnRyaWVzIGRpc2N1c3NpbmcgbG9vay1haGVhZCB1c2FnZS4KKwkoTG9vay1BaGVhZCBUb2tlbnMpOiBXaGVuIGRpc2N1c3NpbmcgeXljaGFyLCBkb24ndCBjYWxsIGl0IHRoZQorCWBjdXJyZW50JyBsb29rLWFoZWFkLCBhbmQgZG8gbWVudGlvbiB5eWx2YWwgYW5kIHl5bGxvYy4KKwkoRXJyb3IgUmVjb3ZlcnkpOiBDcm9zcy1yZWZlcmVuY2UgYEFjdGlvbiBGZWF0dXJlcycgd2hlbiBtZW50aW9uaW5nCisJeXljbGVhcmluLgorCShUYWJsZSBvZiBTeW1ib2xzKTogSW4gdGhlIHl5Y2hhciBlbnRyeSwgZG9uJ3QgY2FsbCBpdCB0aGUgYGN1cnJlbnQnCisJbG9vay1haGVhZC4KKwlJbiB0aGUgeXlsbG9jIGFuZCB5eWx2YWwgZW50cmllcywgbWVudGlvbiBsb29rLWFoZWFkIHVzYWdlLgorCisyMDA2LTAxLTA4ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQ6IFVwZGF0ZSBjb3B5cmlnaHQgeWVhciB0byAyMDA2LgorCisyMDA2LTAxLTA2ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogZGF0YS9nbHIuYyAoeXlHTFJTdGF0ZVNldCk6IEFkZCB5eWJvb2wqIHl5bG9va2FoZWFkU3RhdHVzZXMgbWVtYmVyIHRvCisJdXNlIGR1cmluZyBub25kZXRlcm1pbmlzdGljIG9wZXJhdGlvbiB0byB0cmFjayB3aGljaCBzdGFja3MgaGF2ZQorCWFjdHVhbGx5IG5lZWRlZCB0aGUgY3VycmVudCBsb29rYWhlYWQuCisJKHl5aW5pdFN0YXRlU2V0LCB5eWZyZWVTdGF0ZVNldCwgeXlyZW1vdmVEZWxldGVzLCB5eXNwbGl0U3RhY2spOgorCUFsbG9jYXRlLCBkZWFsbG9jYXRlLCByZXNpemUsIGFuZCBvdGhlcndpc2Ugc2h1ZmZsZSBzcGFjZSBmb3IKKwl5eWxvb2thaGVhZFN0YXR1c2VzIGluIHBhcmFsbGVsIHdpdGggeXlzdGF0ZXMgbWVtYmVyIG9mIHl5R0xSU3RhdGVTZXQuCisJKHl5c3BsaXRTdGFjaywgeXlwcm9jZXNzT25lU3RhY2ssIHl5cGFyc2UpOiBTZXQgbG9va2FoZWFkIHN0YXR1cworCWFwcHJvcHJpYXRlbHkgZHVyaW5nIG5vbmRldGVybWluaXN0aWMgb3BlcmF0aW9uLgorCSh5eVNlbWFudGljT3B0aW9uKTogQWRkIGludCB5eXJhd2NoYXIsIFlZU1RZUEUgeXl2YWwsIGFuZCBZWUxUWVBFIHl5bG9jCisJbWVtYmVycyB0byBzdG9yZSB0aGUgY3VycmVudCBsb29rYWhlYWQgdG8gYmUgdXNlZCBieSB0aGUgZGVmZXJyZWQKKwl1c2VyIGFjdGlvbi4KKwkoeXlhZGREZWZlcnJlZEFjdGlvbik6IEFkZCBzaXplX3QgeXlrIHBhcmFtZXRlciBzcGVjaWZ5aW5nIHRoZSBzdGFjaworCWZyb20gd2hpY2ggdGhlIFJIUyBpcyB0YWtlbi4gIFNldCB0aGUgbG9va2FoZWFkIG1lbWJlcnMgb2YgdGhlIG5ldworCXl5U2VtYW50aWNPcHRpb24gYWNjb3JkaW5nIHRvIHRoZSBsb29rYWhlYWQgc3RhdHVzIGZvciBzdGFjayB5eWsuCisJKHl5Z2xyU2hpZnREZWZlciwgeXlnbHJSZWR1Y2UpOiBQYXNzIHl5ayBwYXJhbWV0ZXIgb24gdG8KKwl5eWFkZERlZmVycmVkQWN0aW9uLgorCSh5eXJlc29sdmVBY3Rpb24pOiBTZXQgeXljaGFyLCB5eWx2YWwsIGFuZCB5eWxsb2MgdG8gdGhlIGxvb2thaGVhZAorCW1lbWJlcnMgb2YgeXlTZW1hbnRpY09wdGlvbiBiZWZvcmUgaW52b2tpbmcgeXl1c2VyQWN0aW9uLCBhbmQgdGhlbiBzZXQKKwl0aGVtIGJhY2sgdG8gdGhlaXIgY3VycmVudCB2YWx1ZXMgYWZ0ZXJ3YXJkLgorCSh5eXBhcnNlKTogU2V0IHl5Y2hhciA9IFlZRU1QVFkgd2hlcmUgeXl0b2tlbiA9IFlZRU1QVFkuCisJKHl5cmVwb3J0QW1iaWd1aXR5KTogQWRkIC8qQVJHU1VTRUQqLyB0byBwYWNpZnkgbGludC4KKwkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0OiBSZW1vdmUgYC4nIGZyb20gdGhlIGVuZHMgb2YgcmVjZW50IHRlc3QgY2FzZQorCXRpdGxlcyBmb3IgY29uc2lzdGVuY3kuCisJKExlYWtlZCBtZXJnZWQgc2VtYW50aWMgdmFsdWUgaWYgdXNlciBhY3Rpb24gY3V0cyBwYXJzZSk6IEluIG9yZGVyIHRvCisJc3VwcHJlc3MgbGludCB3YXJuaW5ncywgdXNlIGFyZ3VtZW50cyBpbiBtZXJnZSBmdW5jdGlvbiwgYW5kIGFzc2lnbgorCWNoYXIgdmFsdWUgPCAxMjggaW4gbWFpbi4KKwkoSW5jb3JyZWN0IGxvb2thaGVhZCBkdXJpbmcgZGV0ZXJtaW5pc3RpYyBHTFIpOiBOZXcgdGVzdCBjYXNlLgorCShJbmNvcnJlY3QgbG9va2FoZWFkIGR1cmluZyBub25kZXRlcm1pbmlzdGljIEdMUik6IE5ldyB0ZXN0IGNhc2UuCisKKzIwMDYtMDEtMDYgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBkYXRhL2MubTQgKGI0X3l5X3N5bWJvbF9wcmludF9nZW5lcmF0ZSk6IEluIHl5X3N5bWJvbF9wcmludCwgYWNjZXB0CisJIXl5dmFsdWVwIGFzIHNpZ25hbCB0aGF0IG5vIHNlbWFudGljIHZhbHVlIGlzIGF2YWlsYWJsZSB0byBwcmludC4KKwkqIGRhdGEvZ2xyLmMgKHl5ZGVzdHJveUdMUlN0YXRlKTogSWYgc3RhdGUgaXMgbm90IHJlc29sdmVkLCBkb24ndCB0cnkKKwl0byBwcmludCBhIHNlbWFudGljIHZhbHVlLgorCisyMDA2LTAxLTA2ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQ6IEZvciBjb25zaXN0ZW5jeSB3aXRoIG15IG5ld2VyIHRlc3QgY2FzZXMsCisJZG9uJ3QgdGhhbmsgbXlzZWxmLgorCisyMDA2LTAxLTA1ICBKb2VsIEUuIERlbm55ICA8amRlbm55QGNlcy5jbGVtc29uLmVkdT4KKworCSogZGF0YS9nbHIuYyAoeXlyZXNvbHZlVmFsdWUpOiBXaGVuIG1lcmdpbmcgc2VtYW50aWMgb3B0aW9ucywgaWYgYXQKKwlsZWFzdCBvbmUgdXNlciBhY3Rpb24gc3VjY2VlZHMgYnV0IGEgbGF0ZXIgb25lIGN1dHMgdGhlIHBhcnNlLCB0aGVuCisJZGVzdHJveSB0aGUgc2VtYW50aWMgdmFsdWUgYmVmb3JlIHJldHVybmluZyByYXRoZXIgdGhhbiBsZWFraW5nIGl0LgorCSh5eXJlc29sdmVTdGF0ZXMpOiBJZiBhIHVzZXIgYWN0aW9uIGN1dHMgdGhlIHBhcnNlIGFuZCB0aHVzCisJeXlyZXNvbHZlVmFsdWUgZmFpbHMsIGlnbm9yZSB0aGUgKHVuc2V0KSBzZW1hbnRpYyB2YWx1ZSByYXRoZXIgdGhhbgorCWNvcnJ1cHRpbmcgdGhlIHl5R0xSU3RhdGUsIGFuZCBlbXB0eSB0aGUgc2VtYW50aWMgb3B0aW9ucyBsaXN0IHNpbmNlCisJdGhlIHVzZXIgYWN0aW9ucyBzaG91bGQgaGF2ZSBjYWxsZWQgYWxsIG5lY2Vzc2FyeSBkZXN0cnVjdG9ycy4KKwlTaW1wbGlmeSBjb2RlIHdpdGggWVlDSEsuCisJKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdCAoQ29ycnVwdGVkIHNlbWFudGljIG9wdGlvbnMgaWYgdXNlciBhY3Rpb24KKwljdXRzIHBhcnNlKTogTmV3IHRlc3QgY2FzZS4KKwkoVW5kZXNpcmFibGUgZGVzdHJ1Y3RvcnMgaWYgdXNlciBhY3Rpb24gY3V0cyBwYXJzZSk6IE5ldyB0ZXN0IGNhc2UuCisJQmVmb3JlIGFwcGx5aW5nIGFueSBvZiB0aGlzIHBhdGNoLCB0aGlzIHRlc3QgY2FzZSBuZXZlciBhY3R1YWxseSBmYWlsZWQKKwlmb3IgbWUuLi4gYnV0IG9ubHkgYmVjYXVzZSB0aGUgY29ycnVwdGVkIHNlbWFudGljIG9wdGlvbnMgdXN1YWxseQorCW1hc2tlZCB0aGlzIGJ1Zy4KKwkoTGVha2VkIG1lcmdlZCBzZW1hbnRpYyB2YWx1ZSBpZiB1c2VyIGFjdGlvbiBjdXRzIHBhcnNlKTogTmV3IHRlc3QKKwljYXNlLgorCisyMDA2LTAxLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3JlYWRlci5jLCBzcmMvc3ltbGlzdC5oLCBzcmMvc3ltbGlzdC5jOiBzL21pZF9ydWxlL21pZHJ1bGUvLgorCisyMDA2LTAxLTA0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogZGF0YS9jLm00IChiNF9jX21vZGVybik6IE5ldyBtYWNybywgd2l0aCBhIG5ldyBwcm92aXNpb24gZm9yCisJX01TQ19WRVIuICBQcm9ibGVtIHJlcG9ydGVkIGJ5IENlbnphdG8gTWFyY28uCisJKGI0X2NfZnVuY3Rpb25fZGVmKTogVXNlIGl0LgorCSogZGF0YS95YWNjLmMgKFlZTU9ERVJOX0MpOiBSZW1vdmUuICBBbGwgdXNlcyByZXBsYWNlZCBieQorCWI0X2NfbW9kZXJuLgorCSh5eXN0cmxlbiwgeXlzdHBjcHksIHl5cGFyc2UpOiBVc2UgYjRfY19mdW5jdGlvbi4uLiBtYWNyb3MgcmF0aGVyCisJdGhhbiByb2xsaW5nIG91ciBvd24uCisKKzIwMDYtMDEtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJQWxzbyB3YXJuIGFib3V0IG5vbi11c2VkIG1pZC1ydWxlIHZhbHVlcy4KKwkqIHNyYy9zeW1saXN0LmgsIHNyYy9zeW1saXN0LmMgKHN5bWJvbF9saXN0KTogQWRkIGEgbWlkX3J1bGUKKwltZW1iZXIuCisJKHN5bWJvbF9saXN0X25ldyk6IEFkanVzdC4KKwkqIHNyYy9yZWFkZXIuYyAoc3ltYm9sX3R5cGVkX3ApOiBOZXcuCisJKGdyYW1tYXJfcnVsZV9jaGVjayk6IFVzZSBpdC4KKwkoZ3JhbW1hcl9taWRydWxlX2FjdGlvbik6IEJpbmQgYSBtaWQtcnVsZSBMSFMgdG8gaXRzIHJ1bGUuCisJQ2hlY2sgaXRzIHJ1bGUuCisJKiB0ZXN0cy9pbnB1dC5hdCAoQVRfQ0hFQ0tfVU5VU0VEX1ZBTFVFUyk6IE5ldy4KKwlVc2UgaXQuCisJKiB0ZXN0cy9hY3Rpb25zLmF0IChFeG90aWMgRG9sbGFycyk6IEFkanVzdC4KKworMjAwNi0wMS0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9yZWFkZXIuYyAoZ3JhbW1hcl9taWRydWxlX2FjdGlvbik6IElmICQkIGlzIHNldCBpbiBhCisJbWlkLXJ1bGUsIG1vdmUgdGhlIGB1c2VkJyBiaXQgdG8gaXRzIGxocy4KKwkqIHRlc3RzL2lucHV0LmF0IChVbnVzZWQgdmFsdWVzKTogTmV3LgorCSogdGVzdHMvYWN0aW9ucy5hdCAoRXhvdGljIERvbGxhcnMpOiBBZGp1c3Q6IGV4cCBpcyBub3QgdHlwZWQuCisKKzIwMDYtMDEtMDMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBkb2MvYmlzb24udGV4aW5mbyAoQmlzb24gT3B0aW9ucyk6IFNheSBtb3JlIGFjY3VyYXRlbHkgd2hhdAorCS0teWFjYyBkb2VzLgorCSogc3JjL3BhcnNlLWdyYW0ueSAocnVsZXNfb3JfZ3JhbW1hcl9kZWNsYXJhdGlvbik6IERvbid0IGNvbXBsYWluCisJYWJvdXQgZGVjbGFyYXRpb25zIGluIHRoZSBncmFtbWFyIHdoZW4gaW4gWWFjYyBtb2RlLCBhcyBQT1NJWCBkb2VzCisJbm90IHJlcXVpcmUgYSBkaWFnbm9zdGljIHdoZW4gdGhlIGdyYW1tYXIgdXNlcyBleHRlbnNpb25zLgorCisJKiBzcmMvcmVkdWNlLmMgKHJlZHVjZV9ncmFtbWFyKTogUmVtb3ZlIHVubmVjZXNzYXJ5IGNhc3QgdG8gYm9vbC4KKworCVdhcm4gYWJvdXQgZHViaW91cyBjb25zdHJ1Y3Rpb25zIGxpa2UgIiV0b2tlbiBUIFQiLgorCVJlcG9ydGVkIGJ5IHR3bGV2by4KKwkqIHNyYy9zeW10YWIuaCAoc3RydWN0IHN5bWJvbC5kZWNsYXJlZCk6IE5ldyBtZW1iZXIuCisJKiBzcmMvc3ltdGFiLmMgKHN5bWJvbF9uZXcpOiBJbml0aWFsaXplIGl0IHRvIGZhbHNlLgorCShzeW1ib2xfY2xhc3Nfc2V0KTogTmV3IGFyZyBERUNMQVJJTkcsIHNwZWNpZnlpbmcgd2hldGhlcgorCXRoaXMgaXMgYSBkZWNsYXJhdGlvbiB0aGF0IHdlIHdhbnQgdG8gd2FybiBhYm91dCwgaWYgdGhlcmUKKwlpcyBtb3JlIHRoYW4gb25lIG9mIHRoZW0uICBBbGwgdXNlcyBjaGFuZ2VkLgorCisJKiBkYXRhL2dsci5jLCBkYXRhL2dsci5jYywgZGF0YS9sYWxyMS5jYywgZGF0YS95YWNjLmM6CisJQWxsb3cgbXVsdGlwbGUgJXVuaW9uIGRpcmVjdGl2ZXMsIHdob3NlIGNvbnRlbnRzIGNvbmNhdGVuYXRlLgorCSogc3JjL3BhcnNlLWdyYW0ueSAoZ3JhbW1hcl9kZWNsYXJhdGlvbik6IExpa2V3aXNlLgorCVVzZSBtdXNjbGVfY29kZV9ncm93LCBzbyB0aGF0IHdlIGRvbid0IG5lZWQgc3R5cGVfbGluZSBhbnkgbW9yZS4KKwlBbGwgdXNlcyBjaGFuZ2VkLgorCisJKiBzcmMvbXVzY2xlX3RhYi5jIChtdXNjbGVfZ3Jvdyk6IEZpeCBjb21tZW50LgorCisJKiBDaGFuZ2VMb2csIGRhdGEvYy5tNCwgZGF0YS9nbHIuYywgZGF0YS9nbHIuY2MsIGRhdGEvbG9jYXRpb24uY2M6CisJKiBkYXRhL3lhY2MuYywgc3JjL2dldGFyZ3MuYywgc3JjL291dHB1dC5jLCB0ZXN0cy9jeHgtdHlwZS5hdDoKKwlVcGRhdGUgY29weXJpZ2h0IHllYXIgdG8gMjAwNi4KKworMjAwNi0wMS0wMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlIYXZlIGdsci5jYyBwYXNzIChzb21lIG9mKSB0aGUgY2FsYy5hdCB0ZXN0cy4KKwkqIGRhdGEvZ2xyLmNjIChiNF9wYXJzZV9wYXJhbV9vcmlnKTogTmV3LgorCShiNF9wYXJzZV9wYXJhbSk6IEltcHJvdmUgaXRzIGRlZmluaXRpb24sIGFuZCBib3VuZCBpdCBtb3JlCisJY2xlYXJseSBpbiB0aGUgc2tlbGV0b24uCisJKGI0X2VwaWxvZ3VlKTogQXBwZW5kLCBpbnN0ZWFkIG9mIHByZXBlbmRpbmcsIGluIG9yZGVyIHRvIGtlZXAKKwkjbGluZSBjb25zaXN0ZW5jeS4KKwlTaW1wbGlmeSB0aGUgZ2VuZXJhdGlvbiBvZiBhdXhpbGlhcnkgZnVuY3Rpb25zOiBsb2NhdGlvbnMgYW5kCisJcHVyaXR5IGFyZSBtYW5kYXRlZC4KKwkoYjRfZ2xvYmFsX3Rva2Vuc19hbmRfeXlzdHlwZSk6IEhvbm9yIGl0LgorCSogZGF0YS9sb2NhdGlvbi5jYyAoYysrLm00KTogRG9uJ3QgaW5jbHVkZSBpdC4KKwkqIHRlc3RzL2xvY2FsLmF0IChfQVRfQklTT05fT1BUSU9OX1BVU0hERUZTKTogRGVmaW5lIEFUX0dMUl9DQ19JRgorCWFuZCBBVF9TS0VMX0NDX0lGLgorCSogdGVzdHMvY2FsYy5hdCAoQVRfQ0hFQ0tfQ0FMQyk6IFJlbHkgb24gQVRfU0tFTF9DQ19JRiBpbnN0ZWFkIG9mCisJQVRfTEFMUjFfQ0NfSUYuCisJQmUgc3VyZSB0byBpbml0aWFsaXplIHRoZSBmaXJzdCBwb3NpdGlvbidzIGZpbGVuYW1lLgorCShBVF9DSEVDS19DQUxDX0xBTFIxX0NDKTogQWRkICVsb2NhdGlvbiBhbmQgJWRlZmluZXMsIHRoZXkgYXJlCisJbWFuZGF0ZWQgYW55d2F5LgorCShBVF9DSEVDS19DQUxDX0dMUl9DQyk6IE5ldy4KKwlVc2UgaXQgdG8gZXhlcmNpc2UgZ2xyLmNjIGFzIGEgbGFscjEuY2MgZHJvcC1pbiByZXBsYWNlbWVudC4KKworMjAwNi0wMS0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3NrZWxldG9uKTogRG9uJ3QgaGFyZCB3aXJlIHRoZSBpbmNsdXNpb24gb2YKKwljLm00LgorCSogZGF0YS9jKysubTQsIGRhdGEvZ2xyLmMsIGRhdGEveWFjYy5jOiBJbmNsdWRlIGMubTQuCisJKiBkYXRhL2dsci5jYzogRG8gbm90IGluY2x1ZGUgc3RhY2suaGguCisKKzIwMDYtMDEtMDIgIEpvZWwgRS4gRGVubnkgIDxqZGVubnlAY2VzLmNsZW1zb24uZWR1PgorCisJKiBkYXRhL2dsci5jOiBSZWZvcm1hdCB3aGl0ZXNwYWNlIHdpdGggdGFicy4KKwkoYjRfbHB1cmVfZm9ybWFscyk6IFJlbW92ZSB0aGlzIHVudXNlZCBtNCBtYWNyby4KKwkqIHRlc3RzL2N4eC10eXBlLmF0OiBSZWZvcm1hdCB3aGl0ZXNwYWNlIHdpdGggdGFicy4KKwkoX0FUX1RFU1RfR0xSX0NYWFRZUEVTKTogSW4gdW5pb24gTm9kZSwgcmVuYW1lIG5vZGVfaW5mbyB0byBub2RlSW5mbworCXNpbmNlIGl0J3MgYSBtZW1iZXIuICBSZW5hbWUgdHlwZSB0byBpc050ZXJtIGZvciBjbGFyaXR5LgorCisyMDA1LTEyLTI5ICBBa2ltICA8YWtpbUBzdWxhY28ubG9jYWw+CisKKwlMZXQgZ2xyLmNjIGNhdGNoIHVwIHdpdGggc3ltYm9sX3ZhbHVlX3ByaW50LgorCSogZGF0YS9nbHIuY2MgKGI0X3l5c3ltcHJpbnRfZ2VuZXJhdGUpOiBSZXBsYWNlIGJ5Li4uCisJKGI0X3l5X3N5bWJvbF9wcmludF9nZW5lcmF0ZSk6IHRoaXMuCisJKHl5X3N5bWJvbF9wcmludCwgeXlfc3ltYm9sX3ZhbHVlX3ByaW50KTogRGVjbGFyZSB0aGVtLgorCisyMDA1LTEyLTI4ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogc3JjL2xvY2F0aW9uLmggKGJvdW5kYXJ5KTogTm90ZSB0aGF0IGEgbGluZSBvciBjb2x1bW4gZXF1YWwKKwl0byBJTlRfTUFYIGluZGljYXRlcyBhbiBvdmVyZmxvdy4KKwkqIHNyYy9zY2FuLWdyYW0ubDogSW5jbHVkZSB2ZXJpZnkuaC4gIERvbid0IGluY2x1ZGUgZ2V0LWVycm5vLmguCisJKHJ1bGVfbGVuZ3RoX292ZXJmbG93LCBpbmNyZW1lbnRfcnVsZV9sZW5ndGgsIGFkZF9jb2x1bW5fd2lkdGgpOgorCU5ldyBmdW5jdGlvbnMuCisJKDxJTklUSUFMPntpZH0sIDxTQ19FU0NBUEVEX1NUUklORz4iXCIiLCA8U0NfRVNDQVBFRF9DSEFSQUNURVI+IiciKToKKwkoPFNDX0JSQUNFRF9DT0RFPiJ9Iik6CisJVXNlIGluY3JlbWVudF9ydWxlX2xlbmd0aCByYXRoZXIgdGhhbiBpbmNyZW1lbnRpbmcgaXQgYnkgaGFuZC4KKwkoYWRqdXN0X2xvY2F0aW9uLCBoYW5kbGVfc3luY2xpbmUpOiBEaWFnbm9zZSBvdmVyZmxvdy4KKwkoaGFuZGxlX2FjdGlvbl9kb2xsYXIsIGhhbmRsZV9hY3Rpb25fYXQpOgorCUZpeCBidWcgd2l0aCBtb25zdHJvc2l0aWVzIGxpa2UgJC0yMTQ3NDgzNjQ4LgorCVJlbW92ZSBub3ctdW5uZWNlc3NhcnkgY2hlY2tzLgorCShzY2FuX2ludGVnZXIpOiBWZXJpZnkgYXNzdW1wdGlvbnMgYW5kIHJlbW92ZSBub3ctdW5uZWNlc3NhcnkgY2hlY2tzLgorCShjb252ZXJ0X3Vjbl90b19ieXRlKTogVmVyaWZ5IGFzc3VtcHRpb25zLgorCShoYW5kbGVfc3luY2xpbmUpOiBOZXcgYXJnIExPQy4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCisJRG9uJ3Qgc3RvcmUgdGhyb3VnaCBhIHZhbHVlIGRlcml2ZWQgZnJvbSBjaGFyIGNvbnN0ICogcG9pbnRlci4KKworCSogc3JjL3JlYWRlci5jIChncmFtbWFyX3J1bGVfY2hlY2spOiBSZXdyaXRlIHNsaWdodGx5IHRvIGF2b2lkCisJR0NDIHdhcm5pbmdzLgorCisyMDA1LTEyLTI3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogc3JjL3JlYWRlci5jIChncmFtbWFyX21pZHJ1bGVfYWN0aW9uLCBncmFtbWFyX3N5bWJvbF9hcHBlbmQpOgorCVJlbW92ZSB1bm5lY2Vzc2FyeSBmb3J3YXJkIHN0YXRpYyBkZWNscy4KKworMjAwNS0xMi0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9yZWFkZXIuYyAoZ3JhbW1hcl9jdXJyZW50X3J1bGVfY2hlY2spOiBBbHNvIGNoZWNrIHRoYXQgJCQKKwlpcyB1c2VkLgorCVRha2UgdGhlIHJ1bGUgdG8gY2hlY2sgYXMgYXJndW1lbnQsIGhlbmNlIHJlbmFtZSBhcy4uLgorCShncmFtbWFyX3J1bGVfY2hlY2spOiB0aGlzLgorCSogc3JjL3JlYWRlci5oLCBzcmMvcmVhZGVyLmMgKGdyYW1tYXJfcnVsZV9iZWdpbiwgZ3JhbW1hcl9ydWxlX2VuZCk6CisJUmVuYW1lIGFzLi4uCisJKGdyYW1tYXJfcnVsZV9iZWdpbiwgZ3JhbW1hcl9ydWxlX2VuZCk6IHRoZXNlLCBmb3IgY29uc2lzdGVuY3kuCisJKGdyYW1tYXJfbWlkcnVsZV9hY3Rpb24sIGdyYW1tYXJfc3ltYm9sX2FwcGVuZCk6IE5vdyBzdGF0aWMuCisJKiB0ZXN0cy90b3J0dXJlLmF0IChpbnB1dCk6IERvbid0IHJlbHkgb24gdGhlIGRlZmF1bHQgYWN0aW9uCisJYmVpbmcgYWx3YXlzIHBlcmZvcm1lZC4KKwkqIHRlc3RzL2NhbGMuYXQ6ICJTZXQiICQkIGV2ZW4gd2hlbiB0aGUgYWN0aW9uIGlzICJjdXQiIHdpdGgKKwlZWUVSUk9SIG9yIG90aGVyLgorCSogdGVzdHMvYWN0aW9ucy5hdCAoRXhvdGljIERvbGxhcnMpOiBJbnN0ZWFkIG9mIHVzaW5nIHVudXNlZAorCXZhbHVlcywgY2hlY2sgdGhhdCB0aGUgd2FybmluZyBpcyBpc3N1ZWQuCisKKzIwMDUtMTItMjIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBORVdTOiBJbXByb3ZlIHdvcmRpbmcgZm9yIHVudXNlZC12YWx1ZSB3YXJuaW5ncy4KKworMjAwNS0xMi0yMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEvbGFscjEuY2MsIGRhdGEveWFjYy5jLCBkYXRhL2dsci5jLCBkYXRhL2MubTQKKwkoYjRfeXlzeW1wcmludF9nZW5lcmF0ZSk6IFJlbmFtZSBhcy4uLgorCShiNF95eV9zeW1ib2xfcHJpbnRfZ2VuZXJhdGUpOiB0aGlzLgorCUdlbmVyYXRlIHl5X3N5bWJvbF9wcmludCBpbnN0ZWFkIG9mIHl5c3ltcHJpbnQuCisJR2VuZXJhdGUgYWxzbyB5eV9zeW1ib2xfdmFsdWVfcHJpbnQsIGFuZCB1c2UgaXQuCisKKzIwMDUtMTItMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBORVdTOiBXYXJuIGFib3V0IHVudXNlZCB2YWx1ZXMuCisJKiBzcmMvc3ltbGlzdC5oLCBzcmMvc3ltbGlzdC5jIChzeW1ib2xfbGlzdCwgc3ltYm9sX2xpc3RfbmV3KTogQWRkCisJYSBgdXNlZCcgbWVtYmVyLgorCShzeW1ib2xfbGlzdF9uX2dldCwgc3ltYm9sX2xpc3Rfbl91c2VkX3NldCk6IE5ldy4KKwkoc3ltYm9sX2xpc3Rfbl90eXBlX25hbWVfZ2V0KTogVXNlIHN5bWJvbF9saXN0X25fZ2V0LgorCSogc3JjL3NjYW4tZ3JhbS5sIChoYW5kbGVfYWN0aW9uX2RvbGxhcik6IEZsYWcgdXNlZCBzeW1ib2xzLgorCSogc3JjL3JlYWRlci5jIChncmFtbWFyX2N1cnJlbnRfcnVsZV9jaGVjayk6IENoZWNrIHRoYXQgdmFsdWVzIGFyZQorCXVzZWQuCisJKiBzcmMvc3ltdGFiLmMgKHN5bWJvbF9wcmludCk6IEFjY2VwdCAwLgorCSogdGVzdHMvZXhpc3RpbmcuYXQ6IFJlbW92ZSB0aGUgdHlwZSBpbmZvcm1hdGlvbi4KKwlFbXB0eSB0aGUgYWN0aW9ucy4KKwlSZW1vdmUgdXNlbGVzcyBhY3Rpb25zIChiZXdhcmUgb2YgbWlkLXJ1bGUgYWN0aW9uczogcGVybCAtMDAwCisJLXBpIC1lICdzL1xzKlx7XH0oPz1bXG5cc10qW3w7XSkvL2cnKS4KKwkqIHRlc3RzL2FjdGlvbnMuYXQgKEV4b3RpYyBEb2xsYXJzKTogVXNlIHVudXNlZCB2YWx1ZXMuCisJKiB0ZXN0cy9jYWxjLmF0OiBMaWtld2lzZS4KKwkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0IChObyB1c2VycyBkZXN0cnVjdG9ycyBpZiBzdGFjayAwIGRlbGV0ZWQpOgorCUxpa2V3aXNlLgorCisJKiBzcmMvZ3JhbS5jIChydWxlX3VzZWZ1bF9wLCBydWxlX25ldmVyX3JlZHVjZWRfcCk6IFVzZQorCXJ1bGVfdXNlZnVsX3AuCisKKzIwMDUtMTItMjEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJVW5kbyAyMDA1LTEyLTAxIHRlbnRhdGl2ZSBsaWNlbnNlIHdvcmRpbmcgY2hhbmdlLiAgVGhlIHdvcmRpbmcgaXMKKwlzdGlsbCBiZWluZyByZXZpZXdlZCBieSB0aGUgbGF3eWVycywgYW5kIHdlIGRvbid0IHdhbnQgdG8gd2FpdCBmb3IKKwl0aGVtIGJlZm9yZSBwdWJsaXNoaW5nIGEgdGVzdCByZWxlYXNlLiAgRm9yIG5vdywgcmV2ZXJ0IHRvIHRoZQorCXByZXZpb3VzIHdvcmRpbmcuCisJKiBORVdTOiBVbmRvIDIwMDUtMTItMDEgY2hhbmdlLgorCSogZGF0YS9nbHIuYzogUmV2ZXJ0IHRvIHByZXZpb3VzIGxpY2Vuc2Ugd29yZGluZy4KKwkqIGRhdGEvZ2xyLmNjOiBMaWtld2lzZS4KKwkqIGRhdGEvbGFscjEuY2M6IExpa2V3aXNlLgorCSogZGF0YS9sb2NhdGlvbi5jYzogTGlrZXdpc2UuCisJKiBkYXRhL3lhY2MuYzogTGlrZXdpc2UuCisKKwkqIE5FV1M6IFJld29yZCAlZGVzdHJ1Y3RvciB2cyBZWUFCT1JUIGV0Yy4KKwkqIGRhdGEvZ2xyLmM6IFVzZSBBbWVyaWNhbiBzcGFjaW5nLCBmb3IgY29uc2lzdGVuY3kuCisJKiBkYXRhL2dsci5jYzogTGlrZXdpc2UuCisJKiBkYXRhL2xhbHIxLmNjOiBMaWtld2lzZS4KKwkqIGRhdGEveWFjYy5jOiBMaWtld2lzZS4KKwkqIGRhdGEveWFjYy5jOiBSZWZvcm1hdCBjb21tZW50cyBzbGlnaHRseS4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvOiBSZXBsYWNlICJub24tIiB3aXRoICJub24iIHdoZW4gdGhhdCBtYWtlcyBzZW5zZSwKKwlmb3IgY29uc2lzdGVuY3kuICBGaXggc29tZSBzcGVsbGluZyBlcnJvcnMgYW5kIHJld29yZCByZWNlbnRseS1pbmNsdWRlZAorCXRleHQgc2xpZ2h0bHkuCisJKiB0ZXN0cy9jeHgtdHlwZS5hdDogQ2FzdCByZXN1bHRzIG9mIG1hbGxvYywgZm9yIEMrKy4KKworMjAwNS0xMi0yMSAgSm9lbCBFLiBEZW5ueSAgPGFkZHJlc3NAaGlkZGVuPgorCisJKiB0ZXN0cy9jeHgtdHlwZS5hdDogQ29uc3RydWN0IGEgdHJlZSwgY291bnQgdGhlIHBhcmVudHMgb2Ygc2hhcmVkCisJbm9kZXMsIGFuZCBmcmVlIGVhY2ggbm9kZSBvbmNlIGFuZCBvbmx5IG9uY2UuICBQcmV2aW91c2x5LCB0aGUgbWVtb3J5CisJZm9yIHNlbWFudGljIHZhbHVlcyB3YXMgbGVha2VkIGluc3RlYWQuCisKKzIwMDUtMTItMjEgIEpvZWwgRS4gRGVubnkgIDxhZGRyZXNzQGhpZGRlbj4KKworCSogZGF0YS9nbHIuYyAoc3RydWN0IHl5R0xSU3RhY2spOiBJZiBwdXJlLCBhZGQgeXl2YWwgYW5kIHl5bG9jIG1lbWJlcnMuCisJKHl5bHZhbCwgeXlsbG9jKTogSWYgcHVyZSwgI2RlZmluZSB0byB5eXN0YWNrcC0+eXl2YWwgYW5kCisJeXlzdGFja3AtPnl5bG9jIHNpbWlsYXIgdG8geXljaGFyIGFuZCB5eW5lcnJzLgorCSh5eXBhcnNlKTogSWYgcHVyZSwgcmVtb3ZlIGxvY2FsIHl5bHZhbCBhbmQgeXlsbG9jLiBBZGQgbG9jYWwKKwl5eXN0YWNrcCB0byBhY2NvbW1vZGF0ZSBwdXJlIGRlZmluaXRpb25zIG9mIHl5bHZhbCBhbmQgeXlsbG9jLgorCShiNF9sZXhfcGFyYW0sIGI0X2x5eWVycm9yX2FyZ3MsIGI0X2xwdXJlX2FyZ3MpOiBJZiBwdXJlLCBjaGFuZ2UKKwl5eWx2YWxwIGFuZCB5eWxsb2NwIHRvICZ5eWx2YWwgYW5kICZ5eWxsb2MuCisJKG5lcnJzLCBjaGFyLCBsdmFsLCBsbG9jKTogSWYgcHVyZSwgYWRkICNkZWZpbmUncyBmb3IgYjRfcHJlZml4W10KKwluYW1lc3BhY2UuIFByZXZpb3VzbHksIG5lcnJzIGFuZCBjaGFyIHdlcmUgbWlzc2luZywgYnV0IGx2YWwgYW5kIGxsb2MKKwl3ZXJlbid0IG5lY2Vzc2FyeS4KKwkoeXlwcm9jZXNzT25lU3RhY2ssIHl5cmVwb3J0U3ludGF4RXJyb3IsIHl5cmVjb3ZlclN5bnRheEVycm9yKTogUmVtb3ZlCisJeXlsdmFscCBhbmQgeXlsbG9jcCBwYXJhbWV0ZXJzIHNpbmNlLCBpZiBwdXJlLCB0aGVzZSBhcmUgbm93IGFsd2F5cworCWFjY2Vzc2libGUgdGhyb3VnaCB5eXN0YWNrcC4gIElmIG5vdCBwdXJlLCB0aGV5IGFyZSBzdGlsbCBhY2Nlc3NpYmxlCisJZ2xvYmFsbHkuCisJKiBkYXRhL2dsci5jLCBkYXRhL3lhY2MuYyAoWVlMTE9DX0RFRkFVTFQpOiBDaGFuZ2UgYGlmIChOKScgdG8KKwlgaWYgKFlZSUQgKE4pKScgdG8gcGFjaWZ5IGxpbnQuCisKKzIwMDUtMTItMjEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJWVlBQ0NFUFQsIFlZRVJST1IsIGFuZCBZWUFCT1JULCBhcyB1c2VyIGFjdGlvbnMsIHNob3VsZCBub3QKKwlkZXN0cm95IHRoZSBSSFMgc3ltYm9scyBvZiBhIHJ1bGUuCisJKiBkYXRhL3lhY2MuYyAoeXlsZW4pOiBJbml0aWFsaXplIHRvIDAuCisJS2VlcCBpdHMgdmFsdWUgdG8gdGhlIG51bWJlciBvZiBpdGVtcyB0byBwb3NzaWJseSBzaGlmdC4KKwlJbiBwYXJ0aWN1bGFyLCBhIHJlZ3VsYXIgc3VjY2Vzc2Z1bCBwYXJzZSB0aGF0IGVuZHMgb24gWVlGSU5BTCBieQorCWEgKGludGVybmFsKSBZWUFDQ0VQVCBtdXN0IG5vdCBoYXZlIHl5bGVuICE9IDAuCisJKHl5ZXJyb3JsYWIsIHl5cmV0dXJuKTogUG9wIHRoZSBSSFMuCisJUmVvcmRlciBhIGJpdCB0byBlbXBoYXNpemUgdGhlIGBzaGlmdGluZycgYml0cyBvZiBjb2RlLgorCShZWVBPUFNUQUNLKTogTm93IGFjY2VwdCBhIG51bWJlciBvZiBpdGVtcyB0byBwb3AuCisJKiBkYXRhL2xhbHIxLmNjOiBMaWtld2lzZS4KKwkqIGRhdGEvZ2xyLmM6IEZvcm1hdHRpbmcgY2hhbmdlcy4KKwlVc2UgZ290byBpbnN0ZWFkIG9mIGZhbGwgdGhyb3VnaC4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChEZXN0cnVjdG9yIERlY2wpOiBDb21wbGV0ZS4KKworMjAwNS0xMi0yMCAgSnVhbiBNYW51ZWwgR3VlcnJlcm8gIDxqdWFuLmd1ZXJyZXJvQGdteC5kZT4KKworCSogTWFrZWZpbGUuYW06IERKR1BQIHNwZWNpZmljIGZpbGVzIGFkZGVkIHRvIEVYVFJBX0RJU1QuCisJKiBkamdwcC9NYWtlZmlsZS5tYWludDogRml4IFBBQ0tBR0UgdmFyaWFibGUgY29tcHV0YXRpb24uCisJKiBkamdwcC9jb25maWcuYmF0OiBSZXBsYWNlIGV2ZXJ5IG9jY3VycmVuY2Ugb2YgdGhlIGZpbGUgbmFtZQorCXNjYW4tZ3JhbS1jLmMgd2l0aCBjLXNjYW4tZ3JhbS5jLiBUaGUgc2FtZSBmb3Igc2Nhbi1za2VsLWMuYyB3aXRoCisJYy1zY2FuLXNrZWwuYyB0byBjb25mb3JtIHdpdGggdGhlIDguMyBmaWxlIG5hbWUgcmVzdHJpY3Rpb24gb24gTVNET1MuCisJKiBkamdwcC9jb25maWcuc2VkOiBSZXBsYWNlIGV2ZXJ5IG9jY3VycmVuY2Ugb2YgdGhlIGZpbGUgbmFtZQorCXNjYW4tZ3JhbS1jLmMgd2l0aCBjLXNjYW4tZ3JhbS5jLiBUaGUgc2FtZSBmb3Igc2Nhbi1za2VsLWMuYyB3aXRoCisJYy1zY2FuLXNrZWwuYyB0byBjb25mb3JtIHdpdGggdGhlIDguMyBmaWxlIG5hbWUgcmVzdHJpY3Rpb24gb24gTVNET1MuCisJKiBkamdwcC9kanVucGFjay5iYXQ6IERKR1BQIHNwZWNpZmljIGZpbGUuCisJKiBkamdwcC9mbmNoYW5nZS5sc3Q6IERKR1BQIHNwZWNpZmljIGZpbGUuCisJKiBkamdwcC9SRUFETUUuaW46IEFkZCBuZXcgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIHVucGFjayB0aGUgYmlzb24KKwlzb3VyY2Ugb24gTVNET1MgYW5kIG90aGVyIHN5c3RlbXMgd2hpY2ggaGF2ZSA4LjMgZmlsZSBuYW1lIHJlc3RyaWN0aW9ucworCXVzaW5nIGRqdW5wYWNrLmJhdCBhbmQgZm5jaGFuZ2UubHN0LgorCisyMDA1LTEyLTEyICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogYm9vdHN0cmFwIChidWlsZF9jdnNfcHJlZml4KTogUmVtb3ZlOyB1bnVzZWQuCisJKENWU19QUkVGSVgpOiBBZGp1c3QgdG8geWVzdGVyZGF5J3MgU2F2YW5uYWggcmVvcmdhbml6YXRpb24KKwl3aGVuIGdldHRpbmcgZ251bGliLgorCisyMDA1LTEyLTEyICAiSm9lbCBFLiBEZW5ueSIgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIGRhdGEvZ2xyLmM6IFJlb3JkZXIgdHlwZWRlZiBkZWNsYXJhdGlvbnMgZm9yIHN0cnVjdHMgdG8gbWF0Y2ggb3JkZXIKKwlvZiBzdHJ1Y3QgZGVjbGFyYXRpb25zLgorCVJlbmFtZSB5eXN0YWNrIGV2ZXJ5d2hlcmUgdG8geXlzdGFja3AgZXhjZXB0IGluIHl5cGFyc2Ugd2hlcmUgaXQncyBub3QKKwlhIHBvaW50ZXIuCisJKHl5Z2xyU2hpZnQpOiBDaGFuZ2UgcGFyYW1ldGVyIFlZU1RZUEUgeXlzdmFsIHRvIFlZU1RZUEUqIHl5dmFscCBmb3IKKwljb25zaXN0ZW5jeS4KKwkoeXlpc190YWJsZV9uaW5mKTogQ2hhbmdlIDAgdG8gWVlJRCAoMCkgdG8gcGFjaWZ5IGxpbnQuCisJKHl5cmVwb3J0U3ludGF4RXJyb3IpOiBBZGQgLypBUkdTVVNFRCovIHRvIHBhY2lmeSBsaW50LgorCSh5eXBhcnNlKTogQ2hhbmdlIHdoaWxlICh5eXRydWUpIHRvIHdoaWxlICggWVlJRCAoeXl0cnVlKSkgdG8gcGFjaWZ5CisJbGludC4KKworMjAwNS0xMi0wOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIHRlc3RzL3NldHMuYXQgKEFjY2VwdCk6IEZpeCB0eXBvcyBpbiByZWd1bGFyIGV4cHJlc3Npb24gdXNlZCB0bworCXNlZCBvdXQgdGhlIGZpbmFsIHN0YXRlIG51bWJlci4KKworCVdvcmsgYXJvdW5kIHBvcnRhYmlsaXR5IHByb2JsZW0gb24gU29sYXJpcyAxMDogZmxleC1nZW5lcmF0ZWQKKwlmaWxlcyBpbmNsdWRlIDxzdGRpby5oPiBiZWZvcmUgPGNvbmZpZy5oPiwgd2hpY2ggbWVzc2VzIHVwCisJYmVjYXVzZSB0aGUgbGF0dGVyIGRlZmluZXMgX19FWFRFTlNJT05TX18uICBBZGRyZXNzIHRoZSBwcm9ibGVtCisJYnkgY3JlYXRpbmcgdHdvIG5ldyBsaXR0bGUgZmlsZXMgdGhhdCBpbmNsdWRlIDxjb25maWcuaD4gZmlyc3QsCisJdGhlbiBpbmNsdWRlIHRoZSBmbGV4LWdlbmVyYXRlZCBmaWxlcy4gIFJld3JpdGUgZXZlcnlvbmUgZWxzZQorCXRvIGluY2x1ZGUgPGNvbmZpZy5oPiBmaXJzdCwgYXMgd2VsbC4KKwkqIGxpYi90aW1ldmFyLmM6IEFsd2F5cyBpbmNsdWRlICJjb25maWcuaCIuCisJKiBzcmMvTWFrZWZpbGUuYW0gKGJpc29uX1NPVVJDRVMpOiBSZXBsYWNlIHNjYW4tZ3JhbS5sIHdpdGgKKwlzY2FuLWdyYW0tYy5jLCBhbmQgc2Nhbi1za2VsLmwgd2l0aCBzY2FuLXNrZWwtYy5jLgorCShFWFRSQV9iaXNvbl9TT1VSQ0VTKTogTmV3IG1hY3JvLgorCSogc3JjL3NjYW4tZ3JhbS1jLmMsIHNyYy9zY2FuLXNrZWwtYy5jOiBOZXcgZmlsZXMuCisJKiBzcmMvc3lzdGVtLmg6IERvbid0IGluY2x1ZGUgY29uZmlnLmguCisJKiBzcmMvTFIwLmM6IEluY2x1ZGUgPGNvbmZpZy5oPiBmaXJzdC4KKwkqIHNyYy9hc3NvYy5jOiBMaWtld2lzZS4KKwkqIHNyYy9jbG9zdXJlLmM6IExpa2V3aXNlLgorCSogc3JjL2NvbXBsYWluLmM6IExpa2V3aXNlLgorCSogc3JjL2NvbmZsaWN0cy5jOiBMaWtld2lzZS4KKwkqIHNyYy9kZXJpdmVzLmM6IExpa2V3aXNlLgorCSogc3JjL2ZpbGVzLmM6IExpa2V3aXNlLgorCSogc3JjL2dldGFyZ3MuYzogTGlrZXdpc2UuCisJKiBzcmMvZ3JhbS5jOiBMaWtld2lzZS4KKwkqIHNyYy9sYWxyLmM6IExpa2V3aXNlLgorCSogc3JjL2xvY2F0aW9uLmM6IExpa2V3aXNlLgorCSogc3JjL21haW4uYzogTGlrZXdpc2UuCisJKiBzcmMvbXVzY2xlX3RhYi5jOiBMaWtld2lzZS4KKwkqIHNyYy9udWxsYWJsZS5jOiBMaWtld2lzZS4KKwkqIHNyYy9vdXRwdXQuYzogTGlrZXdpc2UuCisJKiBzcmMvcGFyc2UtZ3JhbS55OiBMaWtld2lzZS4KKwkqIHNyYy9wcmludC5jOiBMaWtld2lzZS4KKwkqIHNyYy9wcmludF9ncmFwaC5jOiBMaWtld2lzZS4KKwkqIHNyYy9yZWFkZXIuYzogTGlrZXdpc2UuCisJKiBzcmMvcmVkdWNlLmM6IExpa2V3aXNlLgorCSogc3JjL3JlbGF0aW9uLmM6IExpa2V3aXNlLgorCSogc3JjL3N0YXRlLmM6IExpa2V3aXNlLgorCSogc3JjL3N5bWxpc3QuYzogTGlrZXdpc2UuCisJKiBzcmMvc3ltdGFiLmM6IExpa2V3aXNlLgorCSogc3JjL3RhYmxlcy5jOiBMaWtld2lzZS4KKwkqIHNyYy91bmlxc3RyLmM6IExpa2V3aXNlLgorCSogc3JjL3ZjZy5jOiBMaWtld2lzZS4KKworCSogc3JjL3BhcnNlLWdyYW0ueTogRml4IG1pbm9yIHByb2JsZW1zIHVuY292ZXJlZCBieSBsaW50LgorCShjdXJyZW50X2xocywgY3VycmVudF9saHNfbG9jYXRpb24pOiBOb3cgc3RhdGljLgorCShjdXJyZW50X2Fzc29jKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KKworCUNsZWFudXBzIHNvIHRoYXQgQmlzb24tZ2VuZXJhdGVkIHBhcnNlcnMgaGF2ZSBsZXNzIGxpbnQuCisJKiBkYXRhL2MubTQgKGI0X3l5ZGVzdHJ1Y3RfZ2VuZXJhdGUsIGI0X3l5c3ltcHJpbnRfZ2VuZXJhdGUpOgorCVByZXBlbmQgLypBUkdTVVNFRCovLCBmb3IgbGludCdzIHNha2UuCisJKiBkYXRhL2dsci5jIChZWVVTRSk6IFByb3Blcmx5IHBhcmVudGhlc2l6ZSwgYW5kIHVzZSBhbiBhbHRlcm5hdGUKKwlkZWZpbml0aW9uIGlmICdsaW50JyBpcyBkZWZpbmVkLgorCShZWUlEKTogTmV3IG1hY3JvIChvciBmdW5jdGlvbiwgaWYgbGludCkuCisJQWxsIHVzZXMgb2YgLypDT05TVENPTkQqLzAgcmVwbGFjZWQgYnkgWVlJRCgwKS4KKwkqIGRhdGEveWFjYy5jOiBMaWtld2lzZS4KKwkqIGRhdGEvZ2xyLmMgKHl5dXNlckFjdGlvbiwgeXl1c2VyTWVyZ2UsIHl5X3JlZHVjZV9wcmludCk6CisJKHl5cmVjb3ZlclN5bnRheEVycm9yKTogUHJlcGVuZCAvKkFSR1NVU0VEKi8uCisJKiBkYXRhL2dsci5jYyAoWVlMTE9DX0RFRkFVTFQpOiBPbWl0IC8qQ09OU1RDT05EKi8gc2luY2UgdGhpcyBjb2RlCisJaXMgQysrIG9ubHkuCisJKiBkYXRhL2xhbHIxLmNjIChZWVVTRSk6IEp1c3QgdXNlIGEgY2FzdCwgc2luY2UgdGhpcyBjb2RlIGlzIEMrKyBvbmx5LgorCSogZGF0YS95YWNjLmMgKFlZU1RBQ0tfRlJFRSkgW2RlZmluZWQgWVlTVEFDS19BTExPQ106CisJVXNlIFlZSUQoMCkgcmF0aGVyIHRoYW4gMCwgZm9yIGxpbnQuCisJKHl5c3RybGVuKTogUmV3cml0ZSB0byBhdm9pZCBsaW50IHdhcm5pbmcgYWJvdXQgcHRyZGlmZl90IG92ZXJmbG93LgorCSh5eXN5bnRheF9lcnJvcik6IFJld3JpdGUgdG8gYXZvaWQgbGludCB3YXJuaW5ncyBhYm91dCBwYXJlbnRoZXNpemF0aW9uLgorCisyMDA1LTEyLTA3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQKKwkoSW1wcm9wZXIgaGFuZGxpbmcgb2YgZW1iZWRkZWQgYWN0aW9ucyBhbmQgZG9sbGFyKC1OKSBpbiBHTFIgcGFyc2Vycyk6CisJQ2xvc2UgbWVtb3J5IGxlYWsgcmVwb3J0ZWQgYnkgdHdsZXZvLgorCisyMDA1LTEyLTA2ICAiSm9lbCBFLiBEZW5ueSIgPGpkZW5ueUBjZXMuY2xlbXNvbi5lZHU+CisKKwkqIGRhdGEvZ2xyLmMgKHl5cHJvY2Vzc09uZVN0YWNrLCB5eXBhcnNlKTogU3luY2hyb25pemUgdGhlIHNoaWZ0IGZvcgorCWFsbCBzdGFja3MuCisJKHl5cGFyc2UpOiBJdGVyYXRlIGFub3RoZXIgc3RhY2sgaW4gb3JkZXIgdG8gY2FsbCB1c2VyIGRlc3RydWN0b3JzLgorCSogdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQgKE5vIHVzZXJzIGRlc3RydWN0b3JzIGlmIHN0YWNrIDAgZGVsZXRlZCk6CisJTmV3IHRlc3QgY2FzZS4KKwkoRHVwbGljYXRlZCB1c2VyIGRlc3RydWN0b3IgZm9yIGxvb2thaGVhZCk6IFRoaXMgdGVzdCBub3cgaXMgZXhwZWN0ZWQKKwl0byBzdWNjZWVkLgorCisyMDA1LTEyLTAxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogTkVXUzogRG9jdW1lbnQgdGhlIGZvbGxvd2luZyBjaGFuZ2UuCisJKiBkYXRhL3lhY2MuYzogU2F5ICJwYXJzZXIgc2tlbGV0b24iIHJhdGhlciB0aGFuICJmaWxlIiwgc2luY2UKKwlpdCdzIG5vIGxvbmdlciBqdXN0IGEgZmlsZS4KKwkqIGRhdGEvZ2xyLmM6IEdyYW50IGEgc3BlY2lhbCBleGNlcHRpb24gZm9yIEMgR0xSIHBhcnNlcnMsIHRoYXQKKwlyZWFkcyBsaWtlIHRoZSBhbHJlYWR5LWV4aXN0aW5nIGV4Y2VwdGlvbiBmb3IgQyBMQUxSKDEpIHBhcnNlcnMuCisJKiBkYXRhL2dsci5jYzogTGlrZXdpc2UuCisJKiBkYXRhL2xhbHIxLmNjOiBMaWtld2lzZS4KKwkqIGRhdGEvbG9jYXRpb24uY2M6IExpa2V3aXNlLgorCSogZGF0YS95YWNjLmM6IFJld29yZCB0aGUgIndyaXR0ZW4gYnkiIHN0YXRlbWVudCB0byBjbGFyaWZ5IHRoYXQKKwlpdCB3YXMgdGhlIHBhcnNlciBza2VsZXRvbiwgbm90IHRoZSBlbnRpcmUgb3V0cHV0IGZpbGUuCisJKiBkYXRhL2dsci5jOiBXcml0dGVuIGJ5IFBhdWwgSGlsZmluZ2VyLgorCSogZGF0YS9nbHIuY2M6IFdyaXR0ZW4gYnkgQWtpbSBEZW1haWxsZS4KKwkqIGRhdGEvbGFscjEuY2M6IExpa2V3aXNlLgorCisyMDA1LTExLTE4ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogZGF0YS95YWNjLmMgKHl5X3JlZHVjZV9wcmludCwgWVlfUkVEVUNFX1BSSU5UKToKKwlGaXggdHlwb3MgaW4gcHJldmlvdXMgY2hhbmdlIHRoYXQgYnJva2UgJ21ha2UgY2hlY2snLgorCVlZX1JFRFVDRV9QUklOVCBjYW5ub3QgYmUgYSBwc2V1ZG8tdmFyYXJncyBtYWNybzsgdGhhdCBpc24ndAorCXN1cHBvcnRlZCBpbiBDLgorCSogdGVzdHMvY2FsYy5hdCAoX0FUX0NIRUNLX0NBTEMsX0FUX0NIRUNLX0NBTENfRVJST1IpOgorCURvbid0IGNoZWNrIE5VTS1TVERFUlItTElORVMsIHNpbmNlIHRoZSBvdXRwdXQgZm9ybWF0IGlzIGZsdWN0dWF0aW5nLgorCVdlIGNhbiByZXZlcnQgdGhpcyBvbmNlIHRoaW5ncyBzZXR0bGUgZG93bi4KKworCSogc3JjL2NvbmZsaWN0cy5jIChjb25mbGljdHNfcHJpbnQpOiBEb24ndCBwcmludCBmaWxlIG5hbWUgdHdpY2UKKwl3aGVuICVleHBlY3QgZmFpbHMgYmVjYXVzZSB0aGVyZSB3ZXJlIG5vIGNvbmZsaWN0cy4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChFeHBlY3QgRGVjbCk6IFRpZ2h0ZW4gdXAgd29yZGluZyBpbiBwcmV2aW91cworCWNoYW5nZS4KKwkqIHRlc3RzL2NvbmZsaWN0cy5hdCAoJWV4cGVjdCBub3QgZW5vdWdoLCAlZXhwZWN0IHRvbyBtdWNoKToKKwkoJWV4cGVjdCB3aXRoIHJlZHVjZSBjb25mbGljdHMpOiBBZGp1c3QgdG8gbmV3IGJlaGF2aW9yLgorCisyMDA1LTExLTE4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2NvbmZsaWN0cy5jIChjb25mbGljdHNfcHJpbnQpOiBVbnNhdGlzZmllZCAlZXhwZWN0YXRpb24gYXJlCisJZXJyb3JzLgorCSogTkVXUzogRG9jdW1lbnQgdGhpcy4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChFeHBlY3QgRGVjbCk6IExpa2V3aXNlLgorCisyMDA1LTExLTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCUdlbmVyYWxpemUgdGhlIGRpc3BsYXkgb2Ygc2VtYW50aWMgdmFsdWVzIGFuZCBsb2NhdGlvbnMgaW4gdHJhY2VzLgorCSogZGF0YS9nbHIuYyAoeXlfcmVkdWNlX3ByaW50KTogRml4IGluZGljZXMgKGFnYWluKS4KKwkqIGRhdGEvYysrLm00IChiNF9yaHNfdmFsdWUsIGI0X3Joc19sb2NhdGlvbik6IERvbid0IGV4cGVjdAorCWxpdGVyYWwgaW50ZWdlcnMuCisJKiBkYXRhL2xhbHIxLmNjICh5eXJlZHVjZV9wcmludCk6IFJlbmFtZSBhcy4uLgorCSh5eV9yZWR1Y2VfcHJpbnQpOiB0aGlzLgorCURpc3BsYXkgdmFsdWVzIGFuZCBsb2NhdGlvbnMuCisJKiBkYXRhL3lhY2MuYyAoeXlfcmVkdWNlX3ByaW50KTogTGlrZXdpc2UuCisJKFlZX1JFRFVDRV9QUklOVCk6IEFkanVzdCB0byBwYXNzIHRoZSByZXF1aXJlZCBhcmd1bWVudHMuCisJKHl5c3ltcHJpbnQpOiBNb3ZlIGhpZ2hlciB0byBiZSB2aXNpYmxlIGZyb20geXlfcmVkdWNlX3ByaW50KS4KKwkoeXlwYXJzZSk6IEFkanVzdC4KKwkqIHRlc3RzL2NhbGMuYXQ6IEFkanVzdCB0aGUgZXhwZWN0ZWQgbGVuZ3RoIG9mIHRoZSB0cmFjZXMuCisKKzIwMDUtMTEtMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2dsci5jICh5eV9yZWR1Y2VfcHJpbnQpOiBUaGUgbG9vcCB3YXMgcXVpdGUgd3Jvbmc6IHR5cGUgYXJlCisJZnJvbSAxIHRvIE4sIHdoaWxlIHZhbHVlcyBhbmQgbG9jYXRpb24gc3RhcnQgYXQgMC4KKwkoYjRfcmhzX2xvY2F0aW9uLCBiNF9yaHNfdmFsdWUpOiBBZGQgcGFyZW5zIGFyb3VuZCAkMSBhbmQgJDIuCisKKzIwMDUtMTEtMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2dsci5jICh5eV9yZWR1Y2VfcHJpbnQpOiBGaXggdGhlICQgbnVtYmVyLgorCisyMDA1LTExLTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSJVc2UiIHBhcnNlIHBhcmFtZXRlcnMuCisJKiBkYXRhL2MubTQgKGI0X3BhcnNlX3BhcmFtX2ZvciwgYjRfcGFyc2VfcGFyYW1fdXNlKTogTmV3LgorCSogZGF0YS9nbHIuYywgZGF0YS9nbHIuY2M6IFVzZSB0aGVtLgorCSogZGF0YS9nbHIuYyAoWVlVU0UpOiBIYXZlIGEgQysrIGRlZmluaXRpb24gdGhhdCBzdXBwb3J0cworCW5vbi1wb2ludGVyIHR5cGVzLgorCisyMDA1LTExLTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9nbHIuYyAoeXlleHBhbmRHTFJTdGFjayk6IERlY2xhcmUgb25seSBpZiBkZWZpbmVkLgorCisyMDA1LTExLTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9nbHIuY2M6IE5ldy4KKwkqIGRhdGEvbTRzdWdhci9tNHN1Z2FyLm00IChtNF9wcmVwZW5kKTogTmV3LgorCisyMDA1LTExLTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCUxldCBwb3NpdGlvbiBhbmQgbG9jYXRpb24gYmUgUE9Ecy4KKwkqIGRhdGEvbG9jYXRpb24uY2MgKHBvc2l0aW9uOjppbml0aWFsaXplLCBsb2NhdGlvbjo6aW5pdGlhbGl6ZSk6IE5ldy4KKwkocG9zaXRpb246OnBvc2l0aW9uLCBsb2NhdGlvbjo6bG9jYXRpb24pOiBEZWZpbmUgb25seSBpZgorCWI0X2xvY2F0aW9uX2NvbnN0cnVjdG9ycyBpcyBkZWZpbmVkLgorCSogZGF0YS9sYWxyMS5jYyAoYjRfbG9jYXRpb25fY29uc3RydWN0b3JzKTogRGVmaW5lIGl0IGZvciBiYWNrd2FyZAorCWNvbXBhdGliaWxpdHkuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoSW5pdGlhbCBBY3Rpb24gRGVjbCk6IFVzZSBpbml0aWFsaXplLgorCisyMDA1LTExLTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9sYWxyMS5jYzogTW92ZSB0aGUgYm9keSBvZiB0aGUgY3RvciBhbmQgZHRvciBpbnRvIHRoZQorCXBhcnNlciBmaWxlIChpbnN0ZWFkIG9mIHRoZSBoZWFkZXIpLgorCVdyYXAgdGhlIGltcGxlbWVudGF0aW9ucyBpbiBhICJuYW1lc3BhY2UgeXkiLgorCisyMDA1LTExLTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCUhhdmUgZ2xyLmMgaW5jbHVkZSBpdHMgaGVhZGVyIGZpbGUgd2hlbiBjcmVhdGVkLgorCSogZGF0YS9nbHIuYyAoYjRfc2hhcmVkX2RlY2xhcmF0aW9ucyk6IE5ldy4KKwlPdXRwdXQgdGhlbSB2ZXJiYXRpbSBpbiB0aGUgcGFyc2VyIGlmICElZGVmaW5lcywgb3RoZXJ3aXNlCisJb3V0cHV0IHRoZW4gaW4gdGhlIGhlYWRlciBmaWxlLCBhbmQgaW5jbHVkZSBpdCBpbnN0ZWFkLgorCisyMDA1LTExLTExICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9nbHIuYzogQ29tbWVudCBjaGFuZ2VzLgorCisyMDA1LTExLTExICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCVdoZW4geXlkZWJ1ZywgcmVwb3J0IHNlbWFudGljIGFuZCBsb2NhdGlvbiB2YWx1ZXMgZm9yIHJlZHVjdGlvbnMuCisJKiBkYXRhL2dsci5jICh5eV9yZWR1Y2VfcHJpbnQpOiBSZXBvcnQgdGhlIHNlbWFudGljIHZhbHVlcyBhbmQgdGhlCisJbG9jYXRpb25zLgorCShZWV9SRURVQ0VfUFJJTlQpOiBBZGp1c3QuCisJKHl5Z2xyUmVkdWNlKTogVXNlIHRoZW0uCisJKGI0X3Joc192YWx1ZSwgYjRfcmhzX2xvY2F0aW9uKTogUmVtb3ZlIG00X2V2YWwgaW52b2NhdGlvbnMuCisJKiBkYXRhL2MubTQgKGI0X3l5c3ltcHJpbnRfZ2VuZXJhdGUpOiBTcGVjaWZ5IHRoZSBjb25zdCBhcmd1bWVudHMuCisJKiB0ZXN0cy9jYWxjLmF0IChfQVRfQ0hFQ0tfQ0FMQ19FUlJPUik6IFJlbW92ZSB0aGUgcmVkdWN0aW9uCisJdHJhY2VzLgorCisyMDA1LTExLTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9nbHIuYyAoeXluZXdHTFJTdGFja0l0ZW0sIFlZX1JFU0VSVkVfR0xSU1RBQ0spOiBOZXcuCisJKHl5YWRkRGVmZXJyZWRBY3Rpb24sIHl5Z2xyU2hpZnQsIHl5Z2xyU2hpZnREZWZlcik6IFVzZSB0aGVtLgorCSh5eWV4cGFuZEdMUlN0YWNrLCBZWVJFTE9DKTogRGVmaW5lIG9ubHkgd2hlbiBZWVNUQUNLRVhQQU5EQUJMRS4KKworMjAwNS0xMS0wOSAgQWxiZXJ0IENoaW4tQS1Zb3VuZyAgPGNoaW5hQHRoZXdyaXR0ZW53b3JkLmNvbT4KKworCSogbTQvY3h4Lm00LCBleGFtcGxlcy9NYWtlZmlsZS5hbTogRG9uJ3QgYnVpbGQKKwlleGFtcGxlcy9jYWxjKysgaWYgbm8gQysrIGNvbXBpbGVyIGlzIGF2YWlsYWJsZS4gICh0cml2aWFsIGNoYW5nZSkKKworMjAwNS0xMS0wOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9zY2FuLXNrZWwubDogVXNlIGEgY291cGxlIG9mIGFzc2VydHMuCisKKzIwMDUtMTEtMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJSW4gc29tZSAod2VpcmQpIGNhc2VzLCB0aGUgZmluYWwgc3RhdGUgbnVtYmVyIGlzIGluY29ycmVjdC4KKwlSZXBvcnRlZCBieSBBbGV4YW5kcmUgRHVyZXQtTHV0ei4KKwkqIHNyYy9MUjAuYyAoc3RhdGVfbGlzdF9hcHBlbmQpOiBSZW1vdmUgdGhlIGNvbXB1dGF0aW9uIG9mCisJZmluYWxfc3RhdGUuCisJKHNhdmVfcmVkdWN0aW9ucyk6IERvIGl0IGhlcmUuCisJKGdldF9zdGF0ZSk6IEFscGhhIGNvbnZlcnNpb24uCisJKGdlbmVyYXRlX3N0YXRlcyk6IFVzZSBhIGZvciBsb29wLgorCSogc3JjL2dyYW0uaCAoaXRlbV9udW1iZXJfaXNfcnVsZV9udW1iZXIpCisJKGl0ZW1fbnVtYmVyX2lzX3N5bWJvbF9udW1iZXIpOiBOZXcuCisJKiBzcmMvc3RhdGUuYzogVXNlIGFzc2VydC4KKwkqIHNyYy9zeXN0ZW0uaDogSW5jbHVkZSBhc3NlcnQuaC4KKwkqIHRlc3RzL3NldHMuYXQgKEFjY2VwdCk6IE5ldy4KKworMjAwNS0xMC0zMCAgUGF1bCBIaWxmaW5nZXIgIDxoaWxmaW5nckB0dWxseS5DUy5CZXJrZWxleS5FRFU+CisKKwkqIGRhdGEvZ2xyLmMgKHl5ZmlsbCk6IEFkanVzdCBjb21tZW50LgorCSh5eXJlc29sdmVBY3Rpb24pOiBJbml0aWFsaXplIGRlZmF1bHQgbG9jYXRpb24gcHJvcGVybHkKKwlmb3IgZW1wdHkgcmlnaHQtaGFuZCBzaWRlcy4KKwkoeXlkb0FjdGlvbik6IERpdHRvLgorCUFkZCBjb21tZW50IGV4cGxhaW5pbmcgYXBwYXJlbnRseSBkZWFkIGNvZGUuCisJKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdAorCShJbmNvcnJlY3RseSBpbml0aWFsaXplZCBsb2NhdGlvbiBmb3IgZW1wdHkgcmlnaHQtaGFuZCBzaWRlIGluIEdMUik6CisJTmV3IHRlc3QuCisKKzIwMDUtMTAtMzAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBib290c3RyYXAgKGNsZWFudXBfZ251bGliKTogTmV3IGZ1bmN0aW9uLiAgVXNlIGl0IHRvIGNsZWFuIHVwCisJZ251bGliIHdoZW4gaW50ZXJydXB0ZWQuICBUaGlzIGZpeGVzIHNvbWUgcmFjZSBjb25kaXRpb25zIGFuZAorCXdvcmtzIGFyb3VuZCBzb21lIHBvcnRhYmlsaXR5IHByb2JsZW1zIChvbmUgbm90ZWQgYnkgUGF1bAorCUhpbGZpbmdlcikuCisKKzIwMDUtMTAtMjIgIEFraW0gIDxha2ltQGVwaXRhLmZyPgorCisJKiBNYWtlZmlsZS5jZmc6IEFkanVzdCB0byBjb25maWcgLT4gYnVpbGQtYXV4LgorCVJlcG9ydGVkIGJ5IHR3bGVkby4KKworMjAwNS0xMC0yMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEvYy5tNCAoYjRfeXlkZXN0cnVjdF9nZW5lcmF0ZSwgYjRfeXlzeW1wcmludF9nZW5lcmF0ZSk6IFBhc3MKKwl0aGUgJXBhcnNlLXBhcmFtcy4KKwkqIGRhdGEvZ2xyLmMgKFlZX1NZTUJPTF9QUklOVCwgeXlkZXN0cm95R0xSU3RhdGUpOiBBZGp1c3QuCisJKiBkYXRhL3lhY2MuYyAoYjRfUHVyZV9pZik6IFJlbmFtZSBhcy4uLgorCShiNF95YWNjX3B1cmVfaWYpOiB0aGlzLgorCShZWV9TWU1CT0xfUFJJTlQsIHl5cGFyc2UpOiBBZGp1c3QuCisJKiBkb2MvYmlzb24udGV4aW5mbzogRm9ybWF0dGluZyBjaGFuZ2VzLgorCisyMDA1LTEwLTIxICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCUZpbmlzaCB0aGUgdHJhbnNpdGlvbiBjb25maWcgLT4gYnVpbGQtYXV4LgorCSogY29uZmlndXJlLmFjLCBNYWtlZmlsZS5hbTogVXNlIGJ1aWxkLWF1eC4KKwkqIGNvbmZpZy9wcmV2LXZlcnNpb24sIGNvbmZpZy9hbm5vdW5jZS1nZW4sIGNvbmZpZy9NYWtlZmlsZS5hbToKKwlNb3ZlIHRvLi4uCisJKiBidWlsZC1hdXgvcHJldi12ZXJzaW9uLCBidWlsZC1hdXgvYW5ub3VuY2UtZ2VuLAorCSogYnVpbGQtYXV4L01ha2VmaWxlLmFtOiBoZXJlLgorCisyMDA1LTEwLTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZXhhbXBsZXMvY2FsYysrL3Rlc3Q6IFVzZSBzZXQgLXggb25seSB3aGVuIFZFUkJPU0UuCisKKzIwMDUtMTAtMTMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBORVdTOiBCaXNvbiBub3cgd2FybnMgaWYgaXQgZmluZHMgYSBzdHJheSBgJCcgb3IgYEAnIGluIGFuIGFjdGlvbi4KKwkqIHNyYy9zY2FuLWdyYW0ubCAoPFNDX0JSQUNFRF9DT0RFPlskQF0pOiBJbXBsZW1lbnQgdGhpcy4KKworMjAwNS0xMC0xMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9zY2FuLXNrZWwubDogT3V0cHV0IHRoZSBiYXNlIG5hbWUgcGFydHMgb2YgdGhlIHBhcnNlciBhbmQKKwloZWFkZXIgZmlsZSBuYW1lcy4KKwkqIHRlc3RzL291dHB1dC5hdCAoQVRfQ0hFQ0tfT1VUUFVUKTogU3VwcG9ydCBzdWJkaXJlY3RvcmllcywgYW5kCisJYWRkaXRpb25hbCBjaGVja3MuCisJVXNlIHRoaXMgdG8gZXhlcmNpc2UgQysrIG91dHB1dHMgaW4gc3ViZGlycy4KKwlSZXBvcnRlZCBieSBPbGVnIFNtb2xza3kuCisKKzIwMDUtMTAtMTIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBkYXRhL2MubTQgKGI0X2NfZnVuY3Rpb25fZGVmKTogTG9vayBhdCBfX0M5OV9GVU5DX18sIG5vdCBhdAorCV9fU1REQ19WRVJTSU9OX18sIGFzIElCTSBjYyA3LjAgZG9lc24ndCBkZWZpbmUgdGhlIGxhdHRlciBlaXRoZXIuCisJUHJvYmxlbSByZXBvcnRlZCBieSBKb2huIFAuIEhhcnRtYW5uLgorCSogZGF0YS95YWNjLmMgKFlZTU9ERVJOX0MpOiBMaWtld2lzZS4gIERvbid0IGRlZmluZSBpZiB0aGUgdXNlciBoYXMKKwlhbHJlYWR5IGRlZmluZWQgaXQuCisKKzIwMDUtMTAtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcGFyc2UtZ3JhbS55ICh2ZXJzaW9uX2NoZWNrKTogRXhpdCA2MyB0byBwbGVhc2UgbWlzc2luZworCShzdGFuZHMgZm9yICJ2ZXJzaW9uIG1pc21hdGNoKS4KKwkqIHRlc3RzL2lucHV0LmF0LCBkb2MvYmlzb24udGV4aW5mbzogQWRqdXN0LgorCisyMDA1LTEwLTEwICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCVdvcmsgYXJvdW5kIHBvcnRhYmlsaXR5IHByb2JsZW1zIHdpdGggVmlzdWFsIEFnZSBDIGNvbXBpbGVyCisJKHhsYyBhbmQgeGxDX3IpIHJlcG9ydGVkIGJ5IEpvaG4gUC4gSGFydG1hbm4uCisJKiBkYXRhL2xvY2F0aW9uLmNjIChpbml0aWFsX2NvbHVtbiwgaW5pdGlhbF9saW5lKTogUmVtb3ZlLgorCUFsbCB1c2VzIHJlcGxhY2VkIGJ5IDAgYW5kIDEuCisJKiBzcmMvc2Nhbi1ncmFtLmwgKGdyYW1fd3JhcCk6IFJlZGVmaW5lIHRvIGF2b2lkIGJ1ZyBpbiBmbGV4IDIuNS4zMQorCXRoYXQgeGxjIGNvbXBsYWlucyBhYm91dC4KKwkqIHNyYy9zY2FuLXNrZWwubCAoc2tlbF93cmFwKTogTGlrZXdpc2UuCisJKiBkYXRhL2MubTQgKGI0X2NfZnVuY3Rpb25fZGVmKTogTG9vayBhdCBfX1NURENfVkVSU0lPTl9fIGFzIHdlbGwKKwlhcyBfX1NURENfXy4KKwkqIGRhdGEveWFjYy5jIChZWU1PREVSTl9DKTogTmV3IG1hY3JvLCB3aGljaCBhbHNvIGxvb2tzIGF0CisJX19TVERDX1ZFUlNJT05fXy4gIFVzZSBpdCBldmVyeXdoZXJlIGluc3RlYWQgb2YgbG9va2luZyBhdAorCV9fU1REQ19fIGFuZCBfX2NwbHVzcGx1cy4KKworMjAwNS0xMC0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGV4YW1wbGVzL2NhbGMrKy90ZXN0OiBCZSBxdWlldCB1bmxlc3MgVkVSQk9TRS4KKworMjAwNS0xMC0wNSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIGRhdGEvYy5tNCAoeXlkZXN0cnVjdCwgeXlzeW1wcmludCk6CisJVXNlIFlZVVNFIGluc3RlYWQgb2YgY2FzdGluZyB0byB2b2lkLgorCSogZGF0YS9nbHIuYyAoWVlVU0UpOiBOZXcgbWFjcm8uCisJKHl5dXNlck1lcmdlLCB5eXJlcG9ydEFtYmlndWl0eSwgeXlyZXBvcnRTeW50YXhFcnJvcik6CisJVXNlIGl0IGluc3RlYWQgb2Ygcm9sbGluZyBvdXIgb3duLgorCShZWUxMT0NfREVGQVVMVCwgWVlDSEssIFlZRFBSSU5URiwgWVlfU1lNQk9MX1BSSU5ULCBZWV9SRURVQ0VfUFJJTlQpOgorCShZWUNISzEpOgorCVVzZSAvKkNPTlNUQ09ORCovIHRvIHN1cHByZXNzIGxpbnQgd2FybmluZ3MuCisJKiBkYXRhL2xhbHIxLmNjIChZWUxMT0NfREVGQVVMVCwgWVlfU1lNQk9MX1BSSU5ULCBZWV9SRURVQ0VfUFJJTlQpOgorCShZWV9TVEFDS19QUklOVCk6IFVzZSAnZmFsc2UnIG5vdCAnMCcuCisJKFlZVVNFKTogTmV3IG1hY3JvLgorCSh5eXN5bXByaW50XywgeXlkZXN0cnVjdF8pOiBVc2UgaXQgaW5zdGVhZCBvZiByb2xsaW5nIG91ciBvd24uCisJKiBkYXRhL3lhY2MuYyAoWVlVU0UpOiBOZXcgbWFjcm8uCisJKFlZQ09QWSwgWVlTVEFDS19SRUxPQ0FURSwgWVlCQUNLVVAsIFlZTExPQ19ERUZBVUxUKToKKwkoWVlEUFJJTlRGLCBZWV9TWU1CT0xfUFJJTlQsIFlZX1NUQUNLX1BSSU5ULCBZWV9SRURVQ0VfUFJJTlQpOgorCSh5eWVycm9ybGFiKTogVXNlIC8qQ09OU1RDT05EKi8gdG8gc3VwcHJlc3MgbGludCB3YXJuaW5ncy4KKworCisJKiBkYXRhL200c3VnYXIvbTRzdWdhci5tNCAoX200X21hcCk6IE5ldyBtYWNyby4KKwkobTRfbWFwLCBtNF9tYXBfc2VwKTogVXNlIGl0LiAgSGFuZGxlIHRoZSBlbXB0eSBsaXN0IGNvcnJlY3RseS4KKworMjAwNS0xMC0wNCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwlVbmRvIHRoZSBwYXJ0cyBvZiB0aGUgdW5sb2NrZWQtSS9PIGNoYW5nZSB0aGF0IHN1YnN0aXR1dGVkCisJcHV0YyBvciBwdXRzIGZvciBwcmludGYuICBUaGlzIG1pZ2h0IGh1cnQgcGVyZm9ybWFuY2UgYSBiaXQsCisJYnV0IHNvbWUgcGVvcGxlIHByZWZlciB0aGUgcHJpbnRmIHN0eWxlLgorCSogZGF0YS9jLm00ICh5eXN5bXByaW50KTogUHJlZmVyIHByaW50ZiB0byBwdXRzIGFuZCBwdXRjLgorCSogZGF0YS9nbHIuYyAoWVlGUFVUQywgWVlGUFVUUywgWVlEUFVUUyk6IFJlbW92ZS4KKwlBbGwgdXNlcyByZXBsYWNlZCBieSBZWUZQUklOVEYgYW5kIFlZRFBSSU5URi4KKwkqIGRhdGEveWFjYy5jOiBMaWtld2lzZS4KKwkqIGxpYi9iaXRzZXQuYyAoYml0c2V0X3ByaW50KTogTGlrZXdpc2UuCisJKiBsaWIvYml0c2V0di5jIChiaXRzZXR2X2R1bXAsIGRlYnVnLWJpdHNldHYpOiBQcmVmZXIgcHJpbnRmIHRvCisJcHV0YyBhbmQgcHV0cy4KKwkqIGxpYi9sYml0c2V0LmMgKGRlYnVnX2xiaXRzZXQpOiBMaWtld2lzZS4KKwkqIHNyYy9jbG9zdXJlLmMgKHByaW50X2ZpcnN0cywgcHJpbnRfZmRlcml2ZXMpOiBMaWtld2lzZS4KKwkqIHNyYy9ncmFtLmMgKGdyYW1tYXJfZHVtcCk6IExpa2V3aXNlLgorCSogc3JjL2xhbHIuYyAobG9va19haGVhZF90b2tlbnNfcHJpbnQpOiBMaWtld2lzZS4KKwkqIHNyYy9vdXRwdXQuYyAoZXNjYXBlZF9vdXRwdXQpOiBMaWtld2lzZS4KKwkodXNlcl9hY3Rpb25zX291dHB1dCk6IEJyZWFrIGFwYXJ0IHR3byBwcmludGZzLgorCSogc3JjL3BhcnNlLWdyYW0ueSAoJXByaW50ZXIpOiBQcmVmZXIgcHJpbnRmIHRvIHB1dGMgYW5kIHB1dHMuCisJKiBzcmMvcmVkdWNlLmMgKHJlZHVjZV9wcmludCk6IExpa2V3aXNlLgorCSogc3JjL3N0YXRlLmMgKHN0YXRlX3J1bGVfbG9va19haGVhZF90b2tlbnNfcHJpbnQpOiBMaWtld2lzZS4KKwkqIHNyYy9zeXN0ZW0uaDogSW5jbHVkZSB1bmxvY2tlZC1pby5oIHJhdGhlIHRoYW4gc3RkaW8uaC4KKworCSogZGF0YS9nbHIuYyAoeXl1c2VyTWVyZ2UsIHl5cmVwb3J0QW1iaWd1aXR5LCB5eXJlcG9ydFN5bnRheEVycm9yKToKKwlVc2UgYXNzaWdubWVudHMgcmF0aGVyIHRoYW4gY2FzdHMtdG8tdm9pZCB0byBzdXBwcmVzcworCXVudXNlZC12YXJpYWJsZSB3YXJuaW5ncy4gIFRoaXMgcGFjaWZpZXMgJ2xpbnQnLgorCSogZGF0YS9sYWxyMS5jYyAoeXlzeW1wcmludF8sIHl5ZGVzdHJ1Y3RfKTogVXNlIGEgY2FsbCB0byBzdXBwcmVzcworCXVudXNlZC12YXJpYWJsZSB3YXJuaW5ncy4KKworMjAwNS0xMC0wMyAgSnVhbiBNYW51ZWwgR3VlcnJlcm8gIDxqdWFuLmd1ZXJyZXJvQGdteC5kZT4KKworCSogTWFrZWZpbGUuYW06IERKR1BQIHNwZWNpZmljIGZpbGVzIGFkZGVkIHRvIEVYVFJBX0RJU1QuCisKKzIwMDUtMTAtMDIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJVXNlIHVubG9ja2VkIEkvTyBmb3IgYSBtaW5vciBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBvbiBob3N0cyBsaWtlCisJR05VL0xpbnV4IGFuZCBTb2xhcmlzIHRoYXQgc3VwcG9ydCB1bmxvY2tlZCBJL08uICBUaGUgYmFzaWMgaWRlYQorCWlzIHRvIHVzZSB0aGUgZ25saWIgdW5sb2NrZWQtaW8gbW9kdWxlLCBhbmQgdG8gcHJlZmVyIHB1dGMgYW5kCisJcHV0cyB0byBwcmludGYgd2hlbiBlaXRoZXIgd2lsbCB3b3JrIChzaW5jZSB0aGUgbGF0dGVyIGRvZXNuJ3QKKwljb21lIGluIGFuIHVubG9ja2VkIGZsYXZvcikuCisJKiBib290c3RyYXAgKGdudWxpYl9tb2R1bGVzKTogQWRkIHVubG9ja2VkLWlvLgorCSogZGF0YS9jLm00ICh5eXN5bXByaW50KTogUHJlZmVyIHB1dHMgYW5kIHB1dGMgdG8gcHJpbnRmLgorCSogZGF0YS9nbHIuYyAoWVlGUFVUQywgWVlGUFVUUywgWVlEUFVUUyk6IE5ldyBtYWNyb3MuCisJUHJlZmVyIHRoZW0gdG8gWVlGUFJJTlRGIGFuZCBZWURQUklOVEYgaWYgZWl0aGVyIHdpbGwgZG8sCisJYW5kIHNpbWlsYXJseSBmb3IgcHV0cyBhbmQgcHV0YyBhbmQgcHJpbnRmLgorCSogZGF0YS95YWNjLmM6IExpa2V3aXNlLgorCSogbGliL2JpdHNldC5jIChiaXRzZXRfcHJpbnQpOiBMaWtld2lzZS4KKwkqIGxpYi9iaXRzZXQuaCBbVVNFX1VOTE9DS0VEX0lPXTogSW5jbHVkZSB1bmxvY2tlZC1pby5oLgorCSogbGliL2JpdHNldHYuYyAoYml0c2V0dl9kdW1wLCBkZWJ1Zy1iaXRzZXR2KTogUHJlZmVyIHB1dGMgYW5kIHB1dHMKKwl0byBwcmludGYuCisJKiBsaWIvbGJpdHNldC5jIChkZWJ1Z19sYml0c2V0KTogTGlrZXdpc2UuCisJKiBzcmMvY2xvc3VyZS5jIChwcmludF9maXJzdHMsIHByaW50X2ZkZXJpdmVzKTogTGlrZXdpc2UuCisJKiBzcmMvZ3JhbS5jIChncmFtbWFyX2R1bXApOiBMaWtld2lzZS4KKwkqIHNyYy9sYWxyLmMgKGxvb2tfYWhlYWRfdG9rZW5zX3ByaW50KTogTGlrZXdpc2UuCisJKiBzcmMvb3V0cHV0LmMgKGVzY2FwZWRfb3V0cHV0KTogTGlrZXdpc2UuCisJKHVzZXJfYWN0aW9uc19vdXRwdXQpOiBDb2FsZXNjZSB0d28gcHJpbnRmcy4KKwkqIHNyYy9wYXJzZS1ncmFtLnkgKCVwcmludGVyKTogUHJlZmVyIHB1dGMgYW5kIHB1dHMgdG8gcHJpbnRmLgorCSogc3JjL3JlZHVjZS5jIChyZWR1Y2VfcHJpbnQpOiBMaWtld2lzZS4KKwkqIHNyYy9zdGF0ZS5jIChzdGF0ZV9ydWxlX2xvb2tfYWhlYWRfdG9rZW5zX3ByaW50KTogTGlrZXdpc2UuCisJKiBzcmMvc3lzdGVtLmg6IEluY2x1ZGUgdW5sb2NrZWQtaW8uaCByYXRoZXIgdGhhbiBzdGRpby5oLgorCisJKiBkYXRhL2xhbHIxLmNjOiBEb24ndCBwdXQgYW4gdW5tYXRjaGVkICcgaW4gYSBkbmwgY29tbWVudCwgYXMKKwl0aGlzIGNvbmZ1c2VzIHhnZXR0ZXh0LgorCisyMDA1LTEwLTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogYm9vdHN0cmFwIChnbnVsaWJfbW9kdWxlcyk6IEFkZCBzdHJ2ZXJzY21wLgorCSogbGliLy5jdnNpZ25vcmU6IEFkZCBzdHJ2ZXJzY21wLmMsIHN0cnZlcnNjbXAuaC4KKwkqIG00Ly5jdnNpZ25vcmU6IEFkZCBzdHJ2ZXJzY21wLm00LgorCSogc3JjL3BhcnNlLWdyYW0ueSAoJXJlcXVpcmUpOiBOZXcgdG9rZW4sIG5ldyBydWxlLgorCSh2ZXJzaW9uX2NoZWNrKTogTmV3LgorCSogc3JjL3NjYW4tZ3JhbS5sICglcmVxdWlyZSk6IEFkanVzdC4KKwkqIHRlc3RzL2lucHV0LmF0IChBVF9SRVFVSVJFKTogTmV3LgorCVVzZSBpdC4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChSZXF1aXJlIERlY2wpOiBOZXcuCisJKENhbGMrKyBQYXJzZXIpOiBVc2UgJXJlcXVpcmUuCisKKzIwMDUtMTAtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2xvY2F0aW9uLmNjOiBOZXcuCisKKzIwMDUtMTAtMDIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PiwKKwkgICAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlNYWtlIHN1cmUgLW9kaXIvZm9vLmNjIGNyZWF0ZXMgZGlyL2xvY2F0aW9uLmhoIGV0Yy4KKwkqIHNyYy9maWxlcy5oIChzcGVjX291dGZpbGUsIHBhcnNlcl9maWxlX25hbWUsIHNwZWNfbmFtZV9wcmVmaXgpCisJKHNwZWNfZmlsZV9wcmVmaXgsIHNwZWNfdmVyYm9zZV9maWxlLCBzcGVjX2dyYXBoX2ZpbGUpCisJKHNwZWNfZGVmaW5lc19maWxlKTogTm93IGNvbnN0LgorCShkaXJfcHJlZml4KTogTmV3LgorCShzaG9ydF9iYXNlX25hbWUpOiBSZW1vdmUuCisJKiBzcmMvZmlsZXMuYzogQWRqdXN0LgorCShkaXJuYW1lLmgpOiBJbmNsdWRlLgorCShiYXNlX25hbWUpOiBEb24ndCBwcm90b3R5cGUgaXQuCisJKGZpbnB1dCk6IFJlbW92ZSwgZHVwbGljYXRlcyBncmFtX2luLgorCShmdWxsX2Jhc2VfbmFtZSwgc2hvcnRfYmFzZV9uYW1lKTogUmVwbGFjZSBieS4uLgorCShhbGxfYnV0X2V4dCwgYWxsX2J1dF90YWJfZXh0KTogdGhlc2UuCisJKGNvbXB1dGVfYmFzZV9uYW1lcyk6IFJlbmFtZSBhcy4uLgorCShjb21wdXRlX2ZpbGVfbmFtZV9wYXJ0cyk6IHRoaXMuCisJVXBkYXRlIHRvIGNvbXB1dGUgdGhlIG5ldyB2YXJpYWJsZXMsIGluY2x1ZGluZyBkaXJfcHJlZml4LgorCUFkanVzdCBkZXBlbmRlbmNpZXMuCisJKiBzcmMvb3V0cHV0LmMgKHByZXBhcmUpOiBPdXRwdXQgdGhlbS4KKwkqIHNyYy9yZWFkZXIuYzogQWRqdXN0IHRvIHVzZSBncmFtX2luLCBub3QgZmlucHV0LgorCSogc3JjL3NjYW4tc2tlbC5sIChAZGlyX3ByZWZpeEApOiBOZXcuCisKKzIwMDUtMTAtMDIgIEp1YW4gTWFudWVsIEd1ZXJyZXJvICA8anVhbi5ndWVycmVyb0BnbXguZGU+CisKKwkqIGxpYi9zdWJwaXBlLmM6IE5ldyBmdW5jdGlvbiBlbmRfb2Zfb3V0cHV0X3N1YnBpcGUoKSBhZGRlZAorCXRvIGFsbG93IHN1cHBvcnQgZm9yIG5vbi1wb3NpeCBzeXN0ZW1zLiBUaGlzIGlzIGEgbm8tb3AgZnVuY3Rpb24KKwlmb3IgcG9zaXggc3lzdGVtcy4KKworCSogbGliL3N1YnBpcGUuaDogTmV3IGZ1bmN0aW9uIGVuZF9vZl9vdXRwdXRfc3VicGlwZSgpIGFkZGVkCisJdG8gYWxsb3cgc3VwcG9ydCBmb3Igbm9uLXBvc2l4IHN5c3RlbXMuIFRoaXMgaXMgYSBuby1vcCBmdW5jdGlvbgorCWZvciBwb3NpeCBzeXN0ZW1zLgorCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9za2VsZXRvbik6IFVzZSBlbmRfb2Zfb3V0cHV0X3N1YnBpcGUoKSB0bworCWhhbmRsZSB0aGUgbGFjayBvZiBwaXBlL2ZvcmsgZnVuY3Rpb25hbGl0eSBvbiBub24tcG9zaXggc3lzdGVtcy4KKworCSogZGpncHAvTWFrZWZpbGUubWFpbnQ6IERKR1BQIHNwZWNpZmljIGZpbGUuCisKKwkqIGRqZ3BwL1JFQURNRS5pbjogREpHUFAgc3BlY2lmaWMgZmlsZS4KKworCSogZGpncHAvY29uZmlnLmJhdDogREpHUFAgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlLgorCisJKiBkamdwcC9jb25maWcuc2VkOiBESkdQUCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUuCisKKwkqIGRqZ3BwL2NvbmZpZy5zaXRlOiBESkdQUCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUuCisKKwkqIGRqZ3BwL2NvbmZpZ19oLnNlZDogREpHUFAgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlLgorCisJKiBkamdwcC9zdWJwaXBlLmM6IERKR1BQIHNwZWNpZmljIHJlcGxhY2VtZW50IGZpbGUgZm9yIGxpYi9zdWJwaXBlLmMuCisKKwkqIGRqZ3BwL3N1YnBpcGUuaDogREpHUFAgc3BlY2lmaWMgcmVwbGFjZW1lbnQgZmlsZSBmb3IgbGliL3N1YnBpcGUuaC4KKworMjAwNS0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEvbG9jYXRpb24uY2M6IE5ldywgZXh0cmFjdCBmcm9tLi4uCisJKiBkYXRhL2xhbHIxLmNjOiBoZXJlLgorCShsb2NhdGlvbi5oaCk6IEluY2x1ZGUgaXQgYWZ0ZXIgdGhlIHVzZXIgcHJvbG9ndWUsIGluIGNhc2UgdGhlCisJZmlsZW5hbWUgdHlwZSBpcyBkZWZpbmVkIGJ5IHRoZSB1c2VyLgorCUZvcndhcmQgZGVjbGF0aW9uIGxvY2F0aW9uIGFuZCBwb3NpdGlvbiBiZWZvcmUgdGhlIHByZS1wcm9sb2d1ZS4KKwkoeXlyZXN1bHRfKTogUmVuYW1lIGFzLi4uCisJKHl5cmVzdWx0KTogdGhpcywgaXQncyBhIGxvY2FsIHZhcmlhYmxlLCBub3QgYW4gYXR0cmlidXRlLgorCSogZGF0YS9NYWtlZmlsZS5hbSAoZGlzdF9wa2dkYXRhX0RBVEEpOiBBZGp1c3QuCisKKzIwMDUtMTAtMDEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBleGFtcGxlcy9leHRleGk6IFJlc3RvcmUgdGhlICNsaW5lIGdlbmVyYXRpb24uCisKKzIwMDUtMDktMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPiwKKwkgICAgQWxleGFuZHJlIER1cmV0LUx1dHogPGFkbEBnbnUub3JnPgorCisJTW92ZSB0aGUgdG9rZW4gdHlwZSBhbmQgWVlTVFlQRSBpbiB0aGUgcGFyc2VyIGNsYXNzLgorCSogZGF0YS9sYWxyMS5jYyAoc3RhY2suaGgsIGxvY2F0aW9uLmhoKTogSW5jbHVkZSBlYXJsaWVyLgorCShwYXJzZXI6OnRva2VuKTogTmV3LCBmcm9tIHRoZSBtb3ZlZCBmcmVlIGRlZmluaXRpb24gb2YgdG9rZW5zLgorCShwYXJzZXI6OnNlbWFudGljX3ZhbHVlKTogTm93IGEgZnVsbCBkZWZpbml0aW9uIGluc3RlYWQgb2YgYW4KKwlpbmRpcmVjdGlvbiB0byBZWVNUWVBFLgorCShiNF9wb3N0X3Byb2xvZ3VlKTogTm8gbG9uZ2VyIGluY2x1ZGVkIGluIHRoZSBoZWFkZXIgZmlsZSwgYnV0CisJaW4gdGhlIGltcGxlbWVudGF0aW9uIGZpbGUuCisJKiBkb2MvYmlzb24udGV4aSAoQysgTGFuZ3VhZ2UgSW50ZXJmYWNlKTogVXBkYXRlLgorCSogc3JjL3BhcnNlLWdyYW0ueTogU3VwcG9ydCB1bmFyeSAlZGVmaW5lLgorCSogdGVzdHMvYWN0aW9ucy5hdDogRGVmaW5lIGdsb2JhbF90b2tlbnNfYW5kX3l5c3R5cGUgZm9yIGJhY2t3YXJkCisJY29tcGF0aWJpbGl0eSB1bnRpbCB3ZSB1cGRhdGUgdGhlIHRlc3RzLgorCSogdGVzdHMvY2FsYy5hdDogSWRlbS4KKwkoZmlyc3RfbGluZSwgZmlyc3RfY29sdW1uLCBsYXN0X2xpbmUsIGxhc3RfY29sdW1uKTogRGVmaW5lIGZvciBsYWxyMS5jYworCXRvIHNpbXBsaWZ5IHRoZSBjb2RlLgorCisyMDA1LTA5LTI5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCVBvcnQgdG8gU3VuT1MgNC4xLjQsIHdoaWNoIGxhY2tzIHN0cnRvdWwgYW5kIHN0cmVycm9yLgorCUFoLCB0aGUgZ29vZCBvbGQgZGF5cyEgIFByb2JsZW0gcmVwb3J0ZWQgYnkgUGV0ZXIgS2xlaW4uCisJKiBib290c3RyYXAgKGdudWxpYl9tb2R1bGVzKTogQWRkIHN0cmVycm9yLCBzdHJ0b3VsLgorCSogbGliLy5jdnNpZ25vcmU6IEFkZCBzdHJlcnJvci5jLCBzdHJ0b2wuYywgc3RydG91bC5jCisJKiBtNC8uY3ZzaWdub3JlOiBBZGQgc3RyZXJyb3IubTQsIHN0cnRvbC5tNCwgc3RydG91bC5tNC4KKworMjAwNS0wOS0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEvYy5tNCAoYjRfZXJyb3JfdmVyYm9zZV9pZik6IE5ldy4KKwkqIGRhdGEvbGFscjEuY2M6IFVzZSBpdC4KKwkoWVlFUlJPUl9WRVJCT1NFX0lGKTogUmVtb3ZlLgorCSh5eW5fLCB5eWxlbl8sIHl5c3RhdGVfLCB5eW5lcnJzXywgeXllcnJzdGF0dXNfKTogUmVtb3ZlIGFzCisJcGFyc2VyIG1lbWJlcnMsIHJlcGxhY2VkIGJ5Li4uCisJKHl5biwgeXlsZW4sIHl5c3RhdGUsIHl5bmVyc3MsIHl5ZXJyc3RhdHVzKTogdGhlc2UgcGFyc2VyOjpwYXJzZQorCWxvY2FsIHZhcmlhYmxlcy4KKwkoeXlzeW50YXhfZXJyb3JfKTogVGFrZXMgdGhlIHN0YXRlIG51bWJlciBhcyBhcmd1bWVudC4KKwkoeXlyZWR1Y2VfcHJpbnRfKTogVXNlIHRoZSBhcmd1bWVudCB5eXJ1bGUsIG5vdCB0aGUgZm9ybWVyCisJYXR0cmlidXRlIHl5bl8uCisKKzIwMDUtMDktMjYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBib290c3RyYXAgKGdudWxpYl9tb2R1bGVzKTogQWRkIHZlcmlmeS4KKwkqIGxpYi8uY3ZzaWdub3JlOiBBZGQgdmVyaWZ5LmguCisJKiBzcmMvZ2V0YXJncy5jOiBVc2UgQVJHTUFUQ0hfVkVSSUZZIHJhdGhlciB0aGFuIHZlcmlmeS4KKwkqIHNyYy9zeXN0ZW0uaCAodmVyaWZ5KTogUmVtb3ZlLgorCUluY2x1ZGUgdmVyaWZ5LmggaW5zdGVhZC4KKwkqIHNyYy90YWJsZXMuYyAodGFibGVzX2dlbmVyYXRlKTogVXNlIG5ldyBBUEkgZm9yICd2ZXJpZnknLgorCisyMDA1LTA5LTIxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogdGVzdHMvbG9jYWwuYXQgKF9BVF9CSVNPTl9PUFRJT05fUFVTSERFRlMpOiBEbyBub3QgdXNlCisJbG9jYWwgdmFyaWFibGVzIHdob3NlIG5hbWVzIGJlZ2luIHdpdGggJ3l5Jy4KKwkqIHRlc3RzL2NhbGMuYXQgKF9BVF9EQVRBX0NBTENfWSk6IExpa2V3aXNlLgorCVRyaXZpYWwgY2hhbmdlcyBmcm9tIEpvZWwgRS4gRGVubnkuCisKKwkqIGJvb3RzdHJhcCAoZ251bGliX21vZHVsZXMpOiBSZW1vdmUgYWxsb2NhLiAgQmlzb24gZG9lc24ndCBuZWVkCisJaXQgaXRzZWxmLgorCSogc3JjL21haW4uYyAobWFpbikgW0NfQUxMT0NBXTogRG9uJ3QgZmx1c2ggYWxsb2NhJ2VkIG1lbW9yeTsgd2UKKwlkb24ndCB1c2UgYWxsb2NhIGFueSBtb3JlLgorCisJKiBkYXRhL3lhY2MuYyBbWVlTVEFDS19VU0VfQUxMT0NBICYmICFkZWZpbmVkIF9fR05VQ19fICYmICEgZGVmaW5lZAorCV9fQlVJTFRJTl9WQV9BUkdfSU5DUiAmJiAhIGRlZmluZWQgX0FJWCAmJiAhIGRlZmluZWQgX01TQ19WRVIgJiYKKwlkZWZpbmVkIF9BTExPQ0FfSF06IERvbid0IGluY2x1ZGUgPHN0ZGxpYi5oPjsgbm90IG5lZWRlZCBpbiB0aGlzIGNhc2UuCisJKiB0ZXN0cy90b3J0dXJlLmF0IChFeHBsb2RpbmcgdGhlIFN0YWNrIFNpemUgd2l0aCBBbGxvY2EpOiBBZGp1c3QKKwl0byBtYXRjaCB5YWNjLmMsIHRvIHRlc3QgbW9yZSBob3N0cy4KKworMjAwNS0wOS0yMCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIGRhdGEveWFjYy5jIChZWVNJWkVfVCk6IFJlaW5kZW50IHRvIG1ha2UgaXQgY2xlYXJlci4gIFRoaXMKKwlkb2Vzbid0IGFmZmVjdCBiZWhhdmlvci4KKwkoWVlTVEFDS19BTExPQykgW1lZU1RBQ0tfVVNFX0FMTE9DQV06IEltcHJvdmUgc3VwcG9ydCBmb3IKKwlTb2xhcmlzLCBBSVgsIE1TQy4KKwkoX1NURExJQl9IKTogUmVuYW1lZCBmcm9tIFlZSU5DTFVERURfU1RETElCX0guICBBbGwgdXNlcyBjaGFuZ2VkLgorCVRoaXMgd29ya3MgYSBiaXQgYmV0dGVyIHdpdGggZ2xpYmMsIGlmIHVzZXIgY29kZSBoYXMgYWxyZWFkeSBpbmNsdWRlZAorCXN0ZGxpYi5oLgorCSogZG9jL2Jpc29uLnRleGluZm8gKEJpc29uIFBhcnNlcik6IERvY3VtZW50IHRoYXQgdXNlcnMgY2FuJ3QKKwlhcmJpdHJhcmlseSB1c2UgbWFsbG9jIGFuZCBmcmVlIGZvciBvdGhlciBwdXJwb3Nlcy4gIERvY3VtZW50CisJdGhhdCA8YWxsb2NhLmg+IGFuZCA8bWFsbG9jLmg+IG1pZ2h0IGJlIGluY2x1ZGVkLgorCShUYWJsZSBvZiBTeW1ib2xzKTogVW5kZXIgWVlTVEFDS19VU0VfQUxMT0NBLCBEb24ndCBjbGFpbSB0aGF0IHRoZQorCXVzZXIgbXVzdCBkZWNsYXJlIGFsbG9jYS4KKworCSogSEFDS0lORyAocmVsZWFzZSk6IEZvcndhcm4gdGhlIFRyYW5zbGF0aW9uIFByb2plY3QgYWJvdXQKKwlzdGFibGUgcmVsZXNlcy4KKworMjAwNS0wOS0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEvZ2xyLmM6IFVzZSBiNF90b2tlbl9lbnVtcywgbm90IGI0X3Rva2VuX2VudW1zX2RlZmluZXMuCisKKzIwMDUtMDktMTkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBkYXRhL3lhY2MuYyAoWVlTSVpFX01BWElNVU0pOiBOZXcgbWFjcm8uCisJKFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSk6IFVzZSBpdC4KKwkoeXlzeW50YXhfZXJyb3IpOiBOZXcgZnVuY3Rpb24uCisJKHl5cGFyc2UpIFtZWUVSUk9SX1ZFUkJPU0VdOiBEb24ndCBsZWFrIG1lbW9yeSBpbmRlZmluaXRlbHkgaWYKKwltdWx0aXBsZSBzeW50YXggZXJyb3JzIGFyZSByZXBvcnRlZCwgYW5kIGFsbG9jYSBpcyBiZWluZyB1c2VkLgorCUluc3RlYWQsIHJlYWxsb2NhdGUgYnVmZmVycyB0d2ljZSBhcyBiaWcgZWFjaCB0aW1lLCBzbyB0aGF0CisJd2Ugd2FzdGUgYXQgbW9zdCBoYWxmIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiAgU3RhcnQgd2l0aCBhIHNtYWxsCisJKDEyOC1ieXRlKSBidWZmZXIgdGhhdCB3aWxsIHN1ZmZpY2UgaW4gbW9zdCBjYXNlcyBhbnl3YXkuCisJVXNlIHl5c3ludGF4X2Vycm9yIHRvIGRvIG1vc3Qgb2YgdGhlIHdvcmsuCisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChFcnJvciBSZXBvcnRpbmcsIFRhYmxlIG9mIFN5bWJvbHMpOgorCXl5bmVycnMgaXMgdGhlIG51bWJlciBvZiBlcnJvcnMgcmVwb3J0ZWQsIG5vdCB0aGUgbnVtYmVyIG9mCisJZXJyb3JzIGVuY291bnRlcmVkLgorCisJKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdCAoRHVwbGljYXRlZCB1c2VyIGRlc3RydWN0b3IgZm9yIGxvb2thaGVhZCk6CisJTWFyayBpdCBhcyBleHBlY3RlZCB0byBmYWlsLgorCUNhc3QgcmVzdWx0IG9mIG1hbGxvYzsgcHJvYmxlbSByZXBvcnRlZCBieSB0d2xldm9AeHM0YWxsLm5sLgorCSogdGVzdHMvYWN0aW9ucy5hdCwgdGVzdHMvY2FsYy5hdCwgdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQ6CisJRG9uJ3Qgc3RhcnQgdXNlci1jb2RlIHN5bWJvbHMgd2l0aCAieXkiLCB0byBhdm9pZCBuYW1lIHNwYWNlIHByb2JsZW1zLgorCisyMDA1LTA5LTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCVJlbW92ZSB0aGUgdHJhaXRzLCBmYWlsZWQgZXhwZXJpbWVudC4KKwlJdCBuZXZlciBwcm92ZWQgdXNlZnVsLCBhbmQgYW55d2F5IGJlY2F1c2Ugb2YgdGhlIGN1cnJlbnQKKwlkZWZpbml0aW9uLCBpdCB3YXMgbm90IHBvc3NpYmxlIHRvIGhhdmUgc2V2ZXJhbCBzcGVjaWFsaXphdGlvbiBvZgorCXRoaXMgdHJhaXRzLCBtYWtpbmcgaXQgdXNlbGVzcy4KKwkqIGRhdGEvbGFscjEuY2MgKHl5OnRyYWl0cyk6IFJlbW92ZS4KKwlJbmxpbmUgaXRzIGRlZmluaXRpb25zIGluIHRoZSBwYXJzZXIgY2xhc3MuCisKKzIwMDUtMDktMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiB0ZXN0cy9hdGxvY2FsLmluIChMSUJTKTogUGFzcyBJTlRMTElCUyB0byBhZGRyZXNzIGZhaWx1cmVzIG9uIGF0CisJbGVhc3QgTWFjIE9TWCB3aXRoIGEgL3Vzci9sb2NhbCBpbnN0YWxsIG9mIGdldHRleHQuCisKKzIwMDUtMDktMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2xhbHIxLmNjICh5eXBhcnNlKTogUmVuYW1lIHl5bG9va2EgYW5kIHl5aWxvb2thIGFzIHl5Y2hhcgorCWFuZCB5eXRva2VuIGZvciBzaW1pbGFyaXR5IHdpdGggdGhlIG90aGVyIHNrZWxldG9ucy4KKworMjAwNS0wOS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIE5FV1MsIGNvbmZpZ3VyZS5hYzogdXBkYXRlIHZlcnNpb24gbnVtYmVyIHRvIDIuMWEuCisKKzIwMDUtMDktMTYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBORVdTOiBWZXJzaW9uIDIuMS4KKworCSogTkVXUzogUmVtb3ZlIG5vdGljZSBvZiB5eXRuYW1lIGNoYW5nZSwgc2luY2UgaXQgd2FzIG5ldmVyIGluIGFuCisJb2ZmaWNpYWwgcmVsZWFzZS4KKwkqIGRhdGEvZ2xyLmMgKHl5ZGVzdHJveUdMUlN0YXRlKTogUmVuYW1lIGxvY2FsIHZhciB0byBhdm9pZCBzaGFkb3dpbmcKKwlkaWFnbm9zdGljLgorCSogc3JjL291dHB1dC5jIChwcmVwYXJlKTogTGlrZXdpc2UuCisJKiBkYXRhL2xhbHIxLmNjIChZWUVSUk9SX1ZFUkJPU0VfSUYpOiBOZXcgbWFjcm8uCisJKHl5c3ludGF4X2Vycm9yXyk6IFVzZSBpdCB0byBhdm9pZCBHQ0Mgd2FybmluZyB3aGVuIFlZRVJST1JfVkVSQk9TRQorCWlzIG5vdCBkZWZpbmVkLiAgVGhpcyBpcyBhbiBhd2Z1bCBoYWNrLCBidXQgaXQncyBlbm91Z2ggZm9yIG5vdy4KKwlBbGwgY2FsbGVycyBjaGFuZ2VkLgorCSogdGVzdHMvZ2xyLXJlZ3Jlc3Npb24tYXQgKG1ha2VfdmFsdWUpOiBBcmdzIGFyZSBjb25zdCBwb2ludGVycyBub3csCisJdG8gYXZvaWQgR0NDIHdhcm5pbmcuCisJKER1cGxpY2F0ZWQgdXNlciBkZXN0cnVjdG9yIGZvciBsb29rYWhlYWQpOiBOZXcgdGVzdC4gIEN1cnJlbnRseQorCXNraXBwZWQuICBJdCBmYWlscyBvbiBteSBob3N0IGJ1dCBJJ20gbm90IHN1cmUgaXQnbGwgYWx3YXlzIGZhaWwuCisKKzIwMDUtMDktMTYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvc3ltdGFiLmggKHN0cnVjdCBzeW1ib2wpOiBEZWNsYXJlIHRoZSBwcmludGVyIGFuZCBkZXN0cnVjdG9yCisJYXMgY29uc3QsIHRvIGF2b2lkIGFjY2lkZW50YWwgY2FsbHMgdG8gZnJlZS4KKwkoc3ltYm9sX2Rlc3RydWN0b3Jfc2V0LCBzeW1ib2xfcHJpbnRlcl9zZXQpOiBBZGp1c3QuCisJKiBzcmMvc3ltdGFiLmM6IEFkanVzdC4KKworMjAwNS0wOS0xNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEvYy5tNCAoYjRfdG9rZW5fZW51bXMpOiBOZXcuCisJKGI0X3Rva2VuX2RlZmluZXMpOiBSZW5hbWUgYXMuLi4KKwkoYjRfdG9rZW5fZW51bXNfZGVmaW5lcyk6IHRoaXMuCisJKGI0X3Rva2VuX2RlZmluZXMpOiBOZXcsIG91dHB1dCBvbmx5IHRoZSAjZGVmaW5lcy4KKwkqIGRhdGEveWFjYy5jLCBkYXRhL2dsci5jOiBBZGp1c3QuCisJKiBkYXRhL2xhbHIxLmNjOiBVc2UgYjRfdG9rZW5fZW51bXMgaW5zdGVhZCBvZiBiNF90b2tlbl9lbnVtc19kZWZpbmVzLgorCSogZGF0YS9jLm00IChiNF95eWRlc3RydWN0X2dlbmVyYXRlLCBiNF95eXN5bXByaW50X2dlbmVyYXRlKTogRGVmaW5lCisJYXMgZGVmYXVsdCB2YWx1ZXMuCisKKzIwMDUtMDktMTYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2xhbHIxLmNjICh5eWxleF8pOiBSZW1vdmUsIGlubGluZSBpdHMgY29kZS4KKwkoeXlyZXBvcnRfc3ludGF4X2Vycm9yXyk6IFJlbW92ZSwgcmVwbGFjZWQgYnkuLi4KKwkoeXlzeW50YXhfZXJyb3JfKTogdGhpcyB3aGljaCByZXR1cm5zIGEgc3RyaW5nIGFuZCBsZWF2ZXMgdG8gdGhlCisJY2FsbGVyIHRoZSBjYWxsIHRvIHRoZSB1c2VycycgZXJyb3IgZnVuY3Rpb24uCisJKHl5bG9va2FfLCB5eWlsb29rYV8sIHl5bHZhbCwgeXlsbG9jLCB5eWVycm9yX3JhbmdlXywgeXl2YWwsIHl5bG9jKToKKwlNb3ZlIGZyb20gbWVtYmVycyBvZiB0aGUgcGFyc2VyIG9iamVjdC4uLgorCSh5eWxvb2thLCB5eWlsb29rYSwgeXlsdmFsLCB5eWxsb2MsIHl5ZXJyb3JfcmFuZ2UsIHl5dmFsLCB5eWxvYyk6CisJdG8gbG9jYWwgdmFyaWFibGVzIG9mIHRoZSBwYXJzZSBmdW5jdGlvbi4KKworMjAwNS0wOS0xNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChDYWxjKysgUGFyc2VyKTogRG9uJ3QgcHJvbW90ZSBkZWZpbmluZyBZWUVPRgorCXNpbmNlIGl0J3MgaW4gQmlzb24ncyBuYW1lIHNwYWNlLgorCisyMDA1LTA5LTE1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogZGF0YS9nbHIuYyAoeXlyZXNvbHZlVmFsdWUpOiBBZGQgZGVmYXVsdCBjYXNlIHRvIHBhY2lmeQorCWdjYyAtV3N3aXRjaC1kZWZhdWx0LiAgUHJvYmxlbSByZXBvcnRlZCBieSB0d2xldm9AeHM0YWxsLm5sLgorCisJKiBORVdTOiBEb2N1bWVudCB3aGVuIHl5cGFyc2Ugc3RhcnRlZCB0byByZXR1cm4gMi4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChQYXJzZXIgRnVuY3Rpb24pOiBEb2N1bWVudCB3aGVuIHl5cGFyc2UKKwlyZXR1cm5zIDIuCisKKwkqIGRhdGEvbGFscjEuY2M6IFJldmVydCBwYXJ0IG9mIHByZXZpb3VzIGNoYW5nZSwgYXMgaXQncyBpbmNvbXBhdGlibGUuCisJKGI0X2ZpbGVuYW1lX3R5cGUpOiBSZW5hbWVkIGJhY2sgZnJvbSBiNF9maWxlX25hbWVfdHlwZS4gIEFsbCB1c2VzCisJY2hhbmdlZC4KKwkoY2xhc3MgcG9zaXRpb24pOiBmaWxlX25hbWUgLT4gZmlsZW5hbWUgKHJldmVydGluZykuICBBbGwgdXNlcyBjaGFuZ2VkLgorCisyMDA1LTA5LTE0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogZXhhbXBsZXMvY2FsYysrL01ha2VmaWxlLmFtICgkKGNhbGNfc291cmNlc19nZW5lcmF0ZWQpKTogRG9uJ3QKKwlkbyBhbnl0aGluZyBpZiAkQCBleGlzdHMuICBUaGlzIHJldmVydHMgcGFydCBvZiB0aGUgMjAwNS0wNy0wNworCXBhdGNoLgorCisyMDA1LTA5LTExICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBEbyBub3QgZGlzdHJpYnV0ZSBSRUZFUkVOQ0VTOyBpdAorCWNvbnRhaW5zIG9ic29sZXRlIGluZm9ybWF0aW9uIGFuZCBpc24ndCB3b3J0aCBkaXN0cmlidXRpbmcgYXMgYQorCXNlcGFyYXRlIGZpbGUgYW55d2F5LgorCSogZGF0YS9nbHIuYyBbZGVmaW5lZCBZWVNFVEpNUF06IERvbid0IGluY2x1ZGUgPHNldGptcC5oPi4KKwkoWVlKTVBfQlVGLCBZWVNFVEpNUCwgWVlMT05HSk1QKSBbIWRlZmluZWQgWVlTRVRKTVBdOiBOZXcgbWFjcm9zLgorCUFsbCB1c2VzIG9mIGptcF9idWYsIHNldGptcCwgbG9uZ2ptcCBjaGFuZ2VkIHRvIHVzZSB0aGVzZSBpbnN0ZWFkLgorCSh5eXBhcnNlKTogQWJvcnQgaWYgdXNlciBjb2RlIHVzZXMgbG9uZ2ptcCB0byB0aHJvdyBhbiB1bmV4cGVjdGVkCisJdmFsdWUuCisKKzIwMDUtMDktMDkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBkYXRhL2MubTQgKGI0X2lkZW50aWZpY2F0aW9uKTogRGVmaW5lIFlZQklTT05fVkVSU0lPTi4KKwlTdWdnZXN0ZWQgYnkgdHdsZXZvQHhzNGFsbC5ubC4KKworCSogZGF0YS9nbHIuYyAoWVlDSEsxKTogRG8gbm90IGFzc3VtZSBZWUUgaXMgaW4gcmFuZ2UuCisJVGhpcyBhdm9pZHMgYSBkaWFnbm9zdGljIGZyb20gZ2NjIC1Xc3dpdGNoLWVudW0uCisJUHJvYmxlbSByZXBvcnRlZCBieSB0d2xldm9AeHM0YWxsLm5sLgorCisJKiBkb2MvYmlzb24udGV4aW5mbzogRG9uJ3QgdXNlICJmaWxlbmFtZSIsIGFzIHBlciBHTlUgY29kaW5nCisJc3RhbmRhcmRzLiAgVXNlICJmaWxlIG5hbWUiIG9yICJmaWxlIiBvciAibmFtZSIsIGRlcGVuZGluZyBvbgorCXRoZSBjb250ZXh0LgorCShJbnZvY2F0aW9uKTogVGhlIG91dHB1dCBvZiAiYmlzb24gaGFjay9mb28ueSIgZ29lcyB0byBmb28udGFiLmMsCisJbm90IHRvIGhhY2svZm9vLnRhYi5jLgorCShDYWxjKysgVG9wIExldmVsKTogMm5kIGFyZyBvZiBtYWluIGlzIG5vdCBjb25zdC4KKwkqIGRhdGEvZ2xyLmM6IGI0X2ZpbGVuYW1lIC0+IGI0X2ZpbGVfbmFtZS4KKwkqIGRhdGEvbGFscjEuY2M6IExpa2V3aXNlLiAgQWxzbywgYjRfZmlsZW5hbWVfdHlwZSAtPiBiNF9maWxlX25hbWVfdHlwZS4KKwlBbGwgdXNlcyBjaGFuZ2VkLgorCShjbGFzcyBwb3NpdGlvbik6IGZpbGVuYW1lIC0+IGZpbGVfbmFtZS4gIEFsbCB1c2VzIGNoYW5nZWQuCisJKiBkYXRhL3lhY2MuYzogYjRfZmlsZW5hbWUgLT4gYjRfZmlsZV9uYW1lLgorCSogbGliL2JpdHNldC5oOiBmaWxlbmFtZSAtPiBmaWxlX25hbWUgaW4gbG9jYWwgdmFycy4KKwkqIGxpYi9iaXRzZXRfc3RhdHMuYzogTGlrZXdpc2UuCisJKiBzcmMvZmlsZXMuYzogTGlrZXdpc2UuCisJKiBzcmMvc2Nhbi1za2VsLmwgKCJAb3V0cHV0ICIuKlxuKTogTGlrZXdpc2UuCisJKiBzcmMvZmlsZXMuYyAoZmlsZV9uYW1lX3NwbGl0KTogUmVuYW1lZCBmcm9tIGZpbGVuYW1lX3NwbGl0LgorCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlX2luaXQpOiBPdXRwdXQgYjRfZmlsZV9uYW1lLCBub3QgYjRfZmlsZW5hbWUuCisKKzIwMDUtMDktMDggIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBsaWIvLmN2c2lnbm9yZTogQWRkIHBpcGUtc2FmZXIuYywgc3RkaW8tLS5oLCB1bmlzdGQtLS5oLAorCXRvIGFjY29tbW9kYXRlIGxhdGVzdCBnbnVsaWIuCisKKwkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0IChEdXBsaWNhdGUgcmVwcmVzZW50YXRpb24gb2YgbWVyZ2VkIHRyZWVzKToKKwlBZGQgY2FzdHMgdG8gcGFjaWZ5IGcrKy4gIFByb2JsZW0gcmVwb3J0ZWQgYnkgdHdsZXZvQHhzNGFsbC5ubC4KKworCSogYm9vdHN0cmFwOiBBZGQgY29tbWVudCBhcyB0byB3aHkgdGhlIEFNX0xBTkdJTkZPX0NPREVTRVQgaGFjayBpcworCW5lZWRlZC4KKworMjAwNS0wOC0yNiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIGRhdGEvZ2xyLmMgKHl5ZGVzdHJveUdMUlN0YXRlKTogUmVuYW1lZCBmcm9tIHl5ZGVzdHJveVN0YWNrSXRlbS4KKwlBbGwgdXNlcyBjaGFuZ2VkLiAgSW52b2tlIHVzZXIgZGVzdHJ1Y3RvciBhZnRlciBhbiBlcnJvciBkdXJpbmcgYQorCXNwbGl0IHBhcnNlICh0cml2aWFsIGNoYW5nZSBmcm9tIEpvZWwgRS4gRGVubnkpLgorCisJKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdAorCShVc2VyIGRlc3RydWN0b3IgYWZ0ZXIgYW4gZXJyb3IgZHVyaW5nIGEgc3BsaXQgcGFyc2UpOiAgTmV3IHRlc3QgY2FzZS4KKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IEpvZWwgRS4gRGVubnkgaW46CisJaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwNS0wOC9tc2cwMDAyOS5odG1sCisKKzIwMDUtMDgtMjUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBSRUFETUUtY3ZzOiBHaXZlIFVSTHMgZm9yIHJlY29tbWVuZGVkIHRvb2xzLgorCU1lbnRpb24gR3ppcCB2ZXJzaW9uIHByb2JsZW0sIGFuZCBib290c3RyYXBwaW5nIGlzc3Vlcy4KKwlSZW1vdmUgdHJvdWJsZXNob290aW5nIHNlY3Rpb24sIGFzIGl0J3Mgc29tZXdoYXQgb2Jzb2xldGUuCisKKwkqIGJvb3RzdHJhcCAobm9fY2FjaGUpOiBOZXcgdmFyLCB0byBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgd2dldAorCXZhcmlhbnRzLiAgVXNlIGl0IGluc3RlYWQgb2YgJy1DIG9mZicuICBQcm9ibGVtIHJlcG9ydGVkIGJ5CisJdHdsZXZvQHhzNGFsbC5ubC4KKworCSogZGF0YS9nbHIuYyAoeXlkZXN0cm95U3RhY2tJdGVtKTogTmV3IGZ1bmN0aW9uLgorCSh5eXJlY292ZXJTeW50YXhFcnJvciwgeXlyZXR1cm4pOiBVc2UgaXQgdG8gaW1wcm92ZSBxdWFsaXR5IG9mCisJZGVidWdnaW5nIGluZm9ybWF0aW9uLiAgUHJvYmxlbSByZXBvcnRlZCBieSBKb2VsIEUuIERlbm55LgorCisyMDA1LTA4LTI1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogdGVzdHMvbG9jYWwuYXQgKEFUX0NPTVBJTEVfQ1hYKTogUGFzcyAkTElOS1MgdG9vLgorCisyMDA1LTA4LTI0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogZGF0YS9nbHIuYyAoeXlyZWNvdmVyU3ludGF4RXJyb3IsIHl5cmV0dXJuKToKKwlEb24ndCBpbnZva2UgZGVzdHJ1Y3RvciBvbiB1bnJlc29sdmVkIGVudHJpZXMuCisJKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdAorCShVc2VyIGRlc3RydWN0b3IgZm9yIHVucmVzb2x2ZWQgR0xSIHNlbWFudGljIHZhbHVlKTogTmV3IHRlc3QgY2FzZS4KKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IEpvZWwgRS4gRGVubnkgaW46CisJaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwNS0wOC9tc2cwMDAxNi5odG1sCisKKzIwMDUtMDgtMjEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBsaWIvLmN2c2lnbm9yZTogUmVtb3ZlIHJlYWxsb2MuYywgc3RybmNhc2VjbXAuYywgeHN0cmR1cC5jLgorCUFkZCBzdHJubGVuLmMuCisJKiBtNC8uY3ZzaWdub3JlOiBSZW1vdmUgY29kZXNldC5tNCwgZ2V0dGV4dC5tNCwgbGliLWxkLm00LAorCWxpYi1wcmVmaXgubTQsIHBvLm00LgorCisJKiBkYXRhL2dsci5jICh5eXJldHVybik6IFVzZSAiQ2xlYW51cDoiIHJhdGhlciB0aGFuICJFcnJvcjoiCisJaW4geXlkZXN0cnVjdCBkaWFnbm9zdGljLCBzaW5jZSBpdCBtaWdodCBub3QgYmUgYW4gZXJyb3IuCisJUHJvYmxlbSByZXBvcnRlZCBieSBKb2VsIERlbm55IG5lYXIgZW5kIG9mCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9oZWxwLWJpc29uLzIwMDUtMDcvbXNnMDAwNDAuaHRtbD4uCisJKiBkYXRhL2xhbHIxLmNjICh5eWVydHVybik6IExpa2V3aXNlLgorCSogZGF0YS95YWNjLmMgKHl5cmV0dXJuKTogTGlrZXdpc2UuCisJKiB0ZXN0cy9jYWxjLmF0IChfQVRfQ0hFQ0tfQ0FMQ19FUlJPUik6IEFkanVzdCB0byB0aGUgYWJvdmUgY2hhbmdlLgorCisJKiBzcmMvZmlsZXMuYzogUmVtb3ZlIG9ic29sZXRlIEZJWE1FIGNvbW1lbnQuCisKKwkqIGRhdGEvZ2xyLmMgKFlZX1NZTUJPTF9QUklOVCk6IEFwcGVuZCBhIG5ld2xpbmUsIGZvciBjb25zaXN0ZW5jeQorCXdpdGggdGhlIG90aGVyIHRlbXBsYXRlcywgYW5kIHRvIGZpeCBib2d1cyBydW4tb24gbWVzc2FnZXMgc3VjaAorCWFzIHRoZSBvbmUgcmVwb3J0ZWQgYXQgdGhlIGVuZCBvZgorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvaGVscC1iaXNvbi8yMDA1LTA3L21zZzAwMDQwLmh0bWw+LgorCUFsbCBjYWxsZXJzIGNoYW5nZWQgdG8gYXZvaWQgdGhlIG5ld2xpbmUuCisJKHl5cHJvY2Vzc09uZVN0YWNrKTogT3V0cHV0IHR3byBsaW5lcyByYXRoZXIgdGhhbiBvbmUsIHRvIGFjY29tbW9kYXRlCisJdGhlIGFib3ZlIGNoYW5nZS4gIFRoaXMgY2hhbmdlcyB0aGUgZGVidWcgb3V0cHV0IGZvcm1hdCBzbGlnaHRseS4KKworCSogZGF0YS9nbHIuYyAoeXlyZXNvbHZlVmFsdWUpOiBGaXggcmVkdW5kYW50IHBhcnNlIHRyZWUgcHJvYmxlbQorCXJlcG9ydGVkIGJ5IEpvZWwgRS4gRGVubnkgaW4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwNS0wOC9tc2cwMDAwNC5odG1sPgorCSh0cml2aWFsIGNoYW5nZSkuCisJKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdCAoRHVwbGljYXRlIHJlcHJlc2VudGF0aW9uIG9mIG1lcmdlZCB0cmVlcyk6CisJTmV3IHRlc3QsIGZyb20gSm9lbCBFLiBEZW5ueSBpbjoKKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2hlbHAtYmlzb24vMjAwNS0wNy9tc2cwMDAxMy5odG1sPi4KKwkqIFRIQU5LUzogQWRkIEpvZWwgRS4gRGVubnkuCisKKwkqIGNvbmZpZ3VyZS5hYyAoQUNfSU5JVCk6IEJ1bXAgdG8gMi4wYy4KKworMjAwNS0wNy0yNCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIE5FV1M6IFZlcnNpb24gMi4wYi4KKworCSogTWFrZWZpbGUuYW0gKFNVQkRJUlMpOiBQdXQgZXhhbXBsZXMgYmVmb3JlIHRlc3RzLCBzbyB0aGF0CisJIm1ha2UgY2hlY2siIGRvZXNuJ3QgZmluaXNoIHdpdGggIkFsbCAxIHRlc3RzIHBhc3NlZCIuCisKKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFRva2VuIGRlZmluaXRpb25zKTogRG9uJ3QgcmVseSBvbgorCUFUX1BBUlNFUl9DSEVDSyBmb3IgZGF0YSB0aGF0IGNvbnRhaW5zIGJhY2tzbGFzaGVzLiAgSXQgY3VycmVudGx5CisJdXNlcyAnZWNobycsIGFuZCAnZWNobycgaXNuJ3QgcG9ydGFibGUgaWYgaXRzIGFyZ3VtZW50IGNvbnRhaW5zCisJYmFja3NsYXNoZXMuICBQcm9ibGVtIGZvdW5kIG9uIE9wZW5CU0QgMy40LiAgQWxzbywgZG8gbm90IGFzc3VtZQorCXRoYXQgdGhlIGJ5dGUgJ1wweGZmJyBpcyBub3QgcHJpbnRhYmxlIGluIHRoZSBDIGxvY2FsZTsgaXQgaXMsCisJdW5kZXIgT3BlbkJTRCAzLjQgKCEpLiAgTHVja2lseSwgJ1wweDgwJyB0aHJvdWdoICdcMHg5ZScgYXJlCisJbm90IHByaW50YWJsZSwgc28gdXNlICdcMHg4MScgdG8gdGVzdC4KKworCSogZGF0YS9nbHIuYyAoWVlPUFRJT05BTF9MT0MpOiBEZWZpbmUgZXZlbiBpZiBpdCdzIG5vdCBhIHJlY2VudAorCXZlcnNpb24gb2YgR0NDLCBzaW5jZSB0aGUgbWFjcm8gaXMgdXNlZCB3aXRoIG5vbi1HQ0MgY29tcGlsZXJzLgorCisJRml4IGNvcmUgZHVtcCByZXBvcnRlZCBieSBQYWJsbyBEZSBOYXBvbGkgaW4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDA1LTA3L21zZzAwMDUzLmh0bWw+LgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoSW52YWxpZCBpbnB1dHMgd2l0aCB7fSk6IE5ldyB0ZXN0LgorCSogc3JjL3BhcnNlLWdyYW0ueSAodG9rZW5fbmFtZSk6IFRyYW5zbGF0ZSB0eXBlIGJlZm9yZSB1c2luZworCWl0IGFzIGFuIGluZGV4LgorCisJKiBkYXRhL2dsci5jIChBVFRSSUJVVEVfVU5VU0VEKTogUmVtb3ZlLCBzaW5jZSBpdCBpbmZyaW5nZXMgb24KKwl0aGUgdXNlcidzIG5hbWUgc3BhY2UuICBBbGwgdXNlcyBjaGFuZ2VkIHRvIF9fYXR0cmlidXRlX18KKwkoKF9fdW51c2VkX18pKS4KKwkoeXlGYWlsLCB5eU1lbW9yeUV4aGF1c3RlZCwgeXlyZXBvcnRBbWJpZ3VpdHkpOgorCUFkZCBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSkuCisKKwkqIGV0Yy9jbGNvbW1pdDogUmVtb3ZlLiAgV2Ugd2VyZW4ndCB1c2luZyBpdCwgYW5kIGl0IGZhaWxlZAorCSJtYWtlIG1haW50YWluZXItZGlzdGNoZWNrIi4KKwkqIE1ha2VmaWxlLm1haW50OiBNZXJnZSBmcm9tIGNvcmV1dGlscy4KKwkoQ1ZTX0xJU1QsIENWU19MSVNUX0VYQ0VQVCk6IE5ldyBtYWNyb3MuCisJKHN5bnRheC1jaGVjay1ydWxlcyk6IENoYW5nZSBsaXN0IG9mIHJ1bGVzIGFzIGRlc2NyaWJlZCBiZWxvdy4KKwkoc2NfY2FzdF9vZl9hbGxvY2FfcmV0dXJuX3ZhbHVlLCBzY19kZF9tYXhfc3ltX2xlbmd0aCk6CisJKHNjX2ZpbGVfc3lzdGVtLCBzY19vYnNvbGV0ZV9zeW1ib2xzLCBzY19wcm9oaWJpdF9hdG9pX2F0b2YpOgorCShzY19wcm9oaWJpdF9qbV9pbl9tNCwgc2Nfcm9vdF90ZXN0cywgc2NfdGlnaHRfc2NvcGUpOgorCShzY190cmFpbGluZ19zcGFjZSk6IE5ldyBydWxlcy4KKwkoc2NfeGFsbG9jX2hfaW5fc3JjKTogUmVtb3ZlLgorCShzY19jYXN0X29mX2FyZ3VtZW50X3RvX2ZyZWUsIHNjX2Nhc3Rfb2ZfeF9hbGxvY19yZXR1cm5fdmFsdWUpOgorCShzY19zcGFjZV90YWIsIHNjX2Vycm9yX2V4aXRfc3VjY2Vzcywgc2NfY2hhbmdlbG9nKToKKwkoc2Nfc3lzdGVtX2hfaGVhZGVycywgc2Nfc3VuX29zX25hbWVzLCBzY191bm1hcmtlZF9kaWFnbm9zdGljcyk6CisJKG1ha2VmaWxlLWNoZWNrLCBwby1jaGVjaywgYXV0aG9yX21hcmtfY2hlY2spOgorCShtYWtlZmlsZV9wYXRoX3NlcGFyYXRvcl9jaGVjaywgY29weXJpZ2h0LWNoZWNrKToKKwlVc2UgZ3JlcCAtbiwgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZmluZCB2aW9sYXRpb25zLgorCVVzZSBDVlNfTElTVCBhbmQgQ1ZTX0xJU1RfRVhDRVBULgorCShoZWFkZXJfcmVnZXhwLCBoX3JlKTogUmVtb3ZlLgorCShkZF9jKTogTmV3IG1hY3JvLgorCShzY19kZF9tYXhfc3ltX2xlbmd0aCwgLnJlLWxpc3QsIG5ld3MtZGF0ZS1jaGVjayk6IE5ldyBydWxlcy4KKwkobXktZGlzdGNoZWNrKTogVXNlIG1vcmUtbW9kZXJuIEdDQyBmbGFncy4KKwkoc2lnbmF0dXJlcywgJS5hc2MpOiBSZW1vdmUuCisJKHJlbC1maWxlcywgYW5ub3VuY2VtZW50KTogUmVtb3ZlIHNpZ25hdHVyZXMuCisJUmVzdG9yZSBvbGQgdXBkYXRpbmcgY29kZSwgZXZlbiB0aG91Z2ggd2UgZG9uJ3QgdXNlIGl0LCBzbworCXRoYXQgd2UncmUgdGhlIHNhbWUgYXMgY29yZXV0aWxzLgorCShhbHBoYSwgYmV0YSwgbWFqb3IpOiBEZXBlbmQgb24gbmV3cy1kYXRlLWNoZWNrLgorCU1ha2UgdGhlIHVwbG9hZCBjb21tYW5kcy4KKworCSogZGF0YS9jLm00LCBkYXRhL2xhbHIxLmNjLCBkYXRhL3lhY2MuYzogTm9ybWFsaXplIHdoaXRlIHNwYWNlLgorCSogbGliL2FiaXRzZXQuaCwgbGliL2JiaXRzZXQuaCwgbGliL2JpdHNldC5oOiBMaWtld2lzZS4KKwkqIGxpYi9iaXRzZXRfc3RhdHMuYywgbGliL2ViaXRzZXQuaCwgbGliL2xiaXRzZXQuYzogTGlrZXdpc2UuCisJKiBsaWIvbGliaXRzZXQuaCwgbGliL3RpbWV2YXIuYywgbGliL3ZiaXRzZXQuaDogTGlrZXdpc2UuCisJKiBzcmMvTWFrZWZpbGUuYW0sIHNyYy9ncmFtLmMsIHNyYy9tdXNjbGVfdGFiLmg6IExpa2V3aXNlLgorCSogc3JjL3BhcnNlLWdyYW0ueSwgc3JjL3N5c3RlbS5oLCBzcmMvdGFibGVzLmMsIHNyYy92Y2cuYzogTGlrZXdpc2UuCisJKiBzcmMvdmNnX2RlZmF1bHRzLmgsIHRlc3RzL2N4eC10eXBlLmF0LCB0ZXN0cy9leGlzdGluZy5hdDogTGlrZXdpc2UuCisJKiB0ZXN0cy9zZXRzLmF0OiBMaWtld2lzZS4KKworCSogZGF0YS9tNHN1Z2FyL200c3VnYXIubTQ6IFN5bmMgZnJvbSBBdXRvY29uZiwgZXhjZXB0IHRoYXQKKwl3ZSBjb21tZW50IG91dCB0aGUgQXV0b2NvbmYgdmVyc2lvbiBudW1iZXIuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoQ2FsYysrIFNjYW5uZXIpOiBEb24ndCB1c2UgYXRvaSwgYXMKKwlpdCdzIGVycm9yLXByb25lIGFuZCAibWFrZSBtYWludGFpbmVyLWRpc3RjaGVjayIgcmVqZWN0cyBpdC4KKworCSogbGliL3N1YnBpcGUuYzogSW5jbHVkZSA8ZmNudGwuaD4gd2l0aG91dCBjaGVja2luZyBmb3IgSEFWRV9GQ05UTF9ILgorCUluZGVudCBjYWxscyB0byAiZXJyb3IiIHRvIHBhY2lmeSAibWFrZSBtYWludGFpbmVyLWRpc3RjaGVjayIsCisJd2hlbiB0aGUgY2FsbHMgYXJlIG5vdCBpbnRlbmRlZCB0byBiZSB0cmFuc2xhdGVkLgorCSogbTQvc3VicGlwZS5tNCAoQklTT05fUFJFUkVRX1NVQlBJUEUpOiBEb24ndCBjaGVjayBmb3IgZmNudGwuaC4KKworCSogc3JjL01ha2VmaWxlLmFtIChERUZTKTogVXNlICs9LCB0byBwYWNpZnkKKwkibWFrZSBtYWludGFpbmVyLWRpc3RjaGVjayIuCisJKGJpc29uX1NPVVJDRVMpOiBBZGQgc2Nhbi1za2VsLmguCisJKHNjX3RpZ2h0X3Njb3BlKTogTmV3IHJ1bGUsIGZyb20gY29yZXV0aWxzLgorCisJKiBzcmMvZmlsZXMuYyAoc3JjX2V4dGVuc2lvbiwgaGVhZGVyX2V4dGVuc2lvbik6CisJTm93IHN0YXRpYywgbm90IGV4dGVybi4KKwkqIHNyYy9nZXRhcmdzLmMgKHNob3J0X29wdGlvbnMpOiBMaWtld2lzZS4KKwkqIHNyYy9tdXNjbGVfdGFiLmMgKG11c2NsZV90YWJsZSk6IExpa2V3aXNlLgorCSogc3JjL3BhcnNlLWdyYW0ueSAoY3VycmVudF9jbGFzcywgY3VycmVudF90eXBlLCBjdXJyZW50X3ByZWMpOgorCUxpa2V3aXNlLgorCSogc3JjL3JlYWRlci5jIChncmFtbWFyX2VuZCwgcHJldmlvdXNfcnVsZV9lbmQpOiBMaWtld2lzZS4KKwkqIHNyYy9nZXRhcmdzLmg6IFJlZG8gY29tbWVudHMgdG8gcGFjaWZ5ICJtYWtlIG1haW50YWluZXItZGlzdGNoZWNrIi4KKwkqIHNyYy9tYWluLmMgKG1haW4pOiBDYXN0IGJpbmR0ZXh0ZG9tYWluIGFuZCB0ZXh0ZG9tYWluIGNhbGxzIHRvCisJdm9pZCwgdG8gYXZvaWQgd2FybmluZyB3aGVuIE5MUyBpcyBkaXNhYmxlZC4KKwkqIHNyYy9vdXRwdXQuYzogSW5jbHVkZSBzY2FuLXNrZWwuaC4KKwkoc2Nhbl9za2VsKTogUmVtb3ZlIGRlY2wsIHNpbmNlIHNjYW4tc2tlbC5oIGRvZXMgdGhpcy4KKwkob3V0cHV0X3NrZWxldG9uKToKKwlJbmRlbnQgY2FsbHMgdG8gImVycm9yIiB0byBwYWNpZnkgIm1ha2UgbWFpbnRhaW5lci1kaXN0Y2hlY2siLgorCSogc3JjL3ByaW50X2dyYXBoLmM6IERvbid0IGluY2x1ZGUgPG9ic3RhY2suaD4sIGFzIHN5c3RlbS5oIGRvZXMgdGhpcy4KKwkqIHNyYy9yZWFkZXIuaCAoZ3JhbV9lbmQsIGdyYW1fbGluZW5vKTogTmV3IGRlY2xzIHRvIHBhY2lmeQorCSJtYWtlIG1haW50YWluZXItZGlzdGNoZWNrIi4KKwkqIHNyYy9zY2FuLXNrZWwubCAoc2tlbF9sZXgsIHNrZWxfZ2V0X2xpbmVubywgc2tlbF9nZXRfaW4pOgorCShza2VsX2dldF9vdXQsIHNrZWxfZ2V0X2xlbmcsIHNrZWxfZ2V0X3RleHQsIHNrZWxfc2V0X2xpbmVubyk6CisJKHNrZWxfc2V0X2luLCBza2VsX3NldF9vdXQsIHNrZWxfZ2V0X2RlYnVnLCBza2VsX3NldF9kZWJ1Zyk6CisJKHNrZWxfbGV4X2Rlc3Ryb3ksIHNjYW5fc2tlbCk6IE1vdmUgdGhlc2UgZGVjbHMgdG8uLi4KKwkqIHNyYy9zY2FuLXNrZWwuaDogTmV3IGZpbGUuCisJKiBzcmMvdW5pcXN0ci5jICh1bmlxc3RyX2Fzc2VydCk6CisJSW5kZW50IGNhbGxzIHRvICJlcnJvciIgdG8gcGFjaWZ5ICJtYWtlIG1haW50YWluZXItZGlzdGNoZWNrIi4KKworCSogdGVzdHMvTWFrZWZpbGUuYW0gKCQoc3JjZGlyKS9wYWNrYWdlLm00KTogVXNlICQoVkFSKSwKKwlub3QgQFZBUkAuCisKKwkqIHRlc3RzL3RvcnR1cmUuYXQ6IFJldmFtcCB0byBhdm9pZCBtaXN1c2Ugb2YgYXRvaSB0aGF0CisJIm1ha2UgbWFpbnRhaW5lci1kaXN0Y2hlY2siIGNvbXBsYWluZWQgYWJvdXQuCisKKwkqIGV4YW1wbGVzL2V4dGV4aSAobWVzc2FnZSk6IERvbid0IHByaW50IGEgbWVzc2FnZSBtb3JlIHRoYW4gb25jZSwKKwlhbmQgb21pdCBsaW5lLW51bWJlciBkZWNvcmF0aW9uIHRoYXQgbWFrZXMgRW1hY3MgY29tcGlsZSB0aGluaworCXRoYXQgaW5mb3JtYXRpdmUgbWVzc2FnZXMgYXJlIHdvcnRoIHdvcnJ5aW5nIGFib3V0LgorCisyMDA1LTA3LTIyICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogY29uZmlndXJlLmFjOiBVcGRhdGUgdmVyc2lvbiBudW1iZXIuCisKKwkqIE1ha2VmaWxlLmFtIChTVUJESVJTKTogQWRkIGV4YW1wbGVzOyBzb21laG93IHRoaXMgZ290IHJlbW92ZWQKKwlhY2NpZGVudGFsbHkuCisJKiBleGFtcGxlcy9jYWxjKysvY2FsYysrLXBhcnNlci55eTogUmVtb3ZlIGZyb20gQ1ZTLCBhcyBpdCdzCisJYXV0b2dlbmVyYXRlZCBieSB0aGUgbWFpbnRhaW5lci4KKwkqIGV4YW1wbGVzL2NhbGMrKy8uY3ZzaWdub3JlOiBBZGQgKi55eS4KKworCSogbGliL2JpdHNldC5jIChiaXRzZXRfYWxsb2MpOiBEb24ndCBjYXN0IHhjYWxsb2MgcmVzdWx0LgorCSogbGliL2JpdHNldF9zdGF0cy5jIChiaXRzZXRfc3RhdHNfaW5pdCk6IExpa2V3aXNlLgorCSogbGliL2JpdHNldHYuYyAoYml0c2V0dl9hbGxvYyk6IExpa2V3aXNlLgorCisJKiBwby9QT1RGSUxFUy5pbjogQWRkIGxpYi94YWxsb2MtZGllLmM7IHJlbW92ZSBsaWIveG1hbGxvYy5jLgorCisJKiBzcmMvcmVsYXRpb24uYyAocmVsYXRpb25fdHJhbnNwb3NlKTogUmV3cml0ZSB0byBhdm9pZCBib2d1cyBjb21wbGFpbnQKKwlmcm9tIG1haW50YWluZXItZGlzdGNoZWNrIGFib3V0IGNhc3RpbmcgdGhlIGFyZ3VtZW50IG9mICdmcmVlJy4KKworCSogTkVXUzogTWVudGlvbiByZWNlbnQgeXl0bmFtZSBjaGFuZ2VzLgorCSogVEhBTktTOiBBZGQgQW50aG9ueSBIZWFkaW5nLCB0d2xldm9AeHM0YWxsLm5sLgorCisJKiBib290c3RyYXA6IEZvciB0cmFuc2xhdGlvbnMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiB1cGdyYWRlZCB0bworCXRoZSBuZXcgcnVudGltZS1wbyBkb21haW4sIHByaW1lIHRoZSBwdW1wIGJ5IGV4dHJhY3RpbmcgdGhlCisJcmVsZXZhbnQgc3RyaW5ncyBmcm9tIHRoZSBvYnNvbGV0ZSB0cmFuc2xhdGlvbnMuICBUaGlzIGNvZGUgY2FuIGJlCisJcmVtb3ZlZCBvbmNlIHRoZSBiaXNvbi1ydW50aW1lIGRvbWFpbiBoYXMgYmVlbiB0cmFuc2xhdGVkIGJ5IGVhY2gKKwl0ZWFtLgorCisJKiBzcmMvc2Nhbi1ncmFtLmwgKDxTQ19QUkVfQ09ERT4uKTogRG9uJ3QgZG91YmxlLXF1b3RlIHRva2VuIG5hbWVzLAorCW5vdyB0aGF0IHRva2VuIG5hbWVzIGFyZSBhbHJlYWR5IHF1b3RlZC4KKworCUZpeCBwcm9ibGVtIHJlcG9ydGVkIGJ5IEFudGhvbnkgSGVhZGluZy4KKwkqIGRhdGEvZ2xyLmMgKFlZVE9LRU5fVEFCTEUpOiBOZXcgbWFjcm8uCisJKHl5dG5hbWUpOiBEZWZpbmUgaWYgWVlUT0tFTl9UQUJMRS4KKwkqIGRhdGEveWFjYy5jIChZWVRPS0VOX1RBQkxFLCB5eXRuYW1lKTogTGlrZXdpc2UuCisJKiBkYXRhL2xhbHIxLmNjIChZWVRPS0VOX1RBQkxFLCB5eXRuYW1lXyk6IExpa2V3aXNlLgorCShZWUVSUk9SX1ZFUkJPU0UpOiBEZWZpbmUgdGhlIHNhbWUgd2F5IHRoZSBvdGhlciBza2VsZXRvbnMgZG8uCisJKiBzcmMvb3V0cHV0LmMgKHByZXBhcmVfc3ltYm9scyk6IE91dHB1dCB0b2tlbl90YWJsZV9mbGFnLgorCisyMDA1LTA3LTIxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogZGF0YS9nbHIuYyAoeXlpbml0R0xSU3RhY2ssIHl5cmV0dXJuKTogRG9uJ3QgY2FsbCBtYWxsb2MKKwlhZ2FpbiBpZiB0aGUgZmlyc3QgY2FsbCBmYWlscy4KKworCSogZGF0YS9nbHIuYyAoeXl0bmFtZXJyKTogTmV3IGZ1bmN0aW9uLgorCSh5eXJlcG9ydFN5bnRheEVycm9yKTogVXNlIGl0IHRvIGRlcXVvdGUgbW9zdCBzdHJpbmcgbGl0ZXJhbHMuCisJKiBkYXRhL2xhbHIxLmMgKHl5dG5hbWVfKTogUmVuYW1lZCBmcm9tIHl5bmFtZV8sIGZvciBjb21wYXRpYmlsaXR5CisJd2l0aCBvdGhlciBza2VsZXRvbnMuICBBbGwgdXNlcyBjaGFuZ2VkLgorCSh5eXRuYW1lZXJyXyk6IE5ldyBmdW5jdGlvbi4KKwkoeXlyZXBvcnRfc3ludGF4X2Vycm9yKTogVXNlIGl0IHRvIGRlcXVvdGUgbW9zdCBzdHJpbmcgbGl0ZXJhbHMuCisJKiBkYXRhL3lhY2MuYyAoeXl0bmFtZXJyKTogTmV3IGZ1bmN0aW9uLgorCSh5eWVycmxhYik6IFVzZSBpdCB0byBkZWNvZGUgbW9zdCBzdHJpbmcgbGl0ZXJhbHMuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoRGVjbCBTdW1tYXJ5LCBDYWxsaW5nIENvbnZlbnRpb24pOgorCUNsYXJpZnkgcXVvdGluZyBjb252ZW50aW9uIG9mIHl5dG5hbWUuCisJKiBzcmMvb3V0cHV0LmMgKHByZXBhcmVfc3ltYm9scyk6IFF1b3RlIGFsbCBuYW1lcy4gIFRoaXMgdW5kb2VzCisJdGhlIDIwMDUtMDQtMTcgY2hhbmdlLCB3aGljaCBpcyBub3cgYWNjb21wbGlzaGVkIChtb3N0bHkpIHZpYQorCWNoYW5nZXMgaW4gdGhlIHBhcnNlcnMgYXMgZGVzY3JpYmVkIGFib3ZlLgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoVG9rZW4gZGVmaW5pdGlvbnMsIFdlYjJjIEFjdGlvbnMpOgorCVVuZG8gbW9zdCAyMDA1LTA0LTE3IGNoYW5nZSBoZXJlLCB0b28uCisKKzIwMDUtMDctMjAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJRml4IG1vcmUgcHJvYmxlbXMgcmVwb3J0ZWQgYnkgdHdsZXZvQHhzNGFsbC5ubC4KKwkqIHRlc3RzL2N4eC10eXBlLmF0OiBEb24ndCBwaXBlIG91dHB1dCBvZiAuL3R5cGVzIHRocm91Z2ggc2VkIHRvCisJcmVtb3ZlIHRyYWlsaW5nIHNwYWNlcy4gIFRoaXMgbG9zZXMgdGhlIGV4aXQgc3RhdHVzIG9mIC4vdHlwZXMsCisJYW5kIGlzbid0IG5lZWRlZCBzaW5jZSAuL3R5cGVzIHNob3VsZG4ndCBiZSBlbWl0dGluZyB0cmFpbGluZworCXNwYWNlcy4KKwkqIGRhdGEvZ2xyLmMgKHl5cmV0dXJuKTogRG9uJ3QgcG9wIHN0YWNrIGlmIHl5aW5pdFN0YXRlU2V0IGZhaWxlZCwKKwlhcyB0aGUgc3RhY2sgaXNuJ3QgdmFsaWQgaW4gdGhhdCBjYXNlLgorCisJKiBzcmMvc2Nhbi1ncmFtLmwgKGdyYW1fZ2V0X2xpbmVubywgZ3JhbV9nZXRfaW4sIGdyYW1fZ2V0X291dCk6CisJKGdyYW1fZ2V0X2xlbmcsIGdyYW1fZ2V0X3RleHQsIGdyYW1fc2V0X2xpbmVubywgZ3JhbV9zZXRfaW4pOgorCShncmFtX3NldF9vdXQsIGdyYW1fZ2V0X2RlYnVnLCBncmFtX3NldF9kZWJ1ZywgZ3JhbV9sZXhfZGVzdHJveSk6CisJQWRkIGRlY2xhcmF0aW9ucyB0byBwYWNpZnkgImdjYyAtV21pc3NpbmctcHJvdG90eXBlcyIgd2hlbiBmbGV4IDIuNS4zMQorCWlzIHVzZWQuCisJKiBzcmMvc2Nhbi1za2VsLmwgKHNrZWxfZ2V0X2xpbmVubywgc2tlbF9nZXRfaW4sIHNrZWxfZ2V0X291dCk6CisJKHNrZWxfZ2V0X2xlbmcsIHNrZWxfZ2V0X3RleHQsIHNrZWxfc2V0X2xpbmVubywgc2tlbF9zZXRfaW4pOgorCShza2VsX3NldF9vdXQsIHNrZWxfZ2V0X2RlYnVnLCBza2VsX3NldF9kZWJ1Zywgc2tlbF9sZXhfZGVzdHJveSk6CisJTGlrZXdpc2UuCisKKwkqIHRlc3RzL2N4eC10eXBlLmF0IChfQVRfVEVTVF9HTFJfQ1hYVFlQRVMpOiBXb3JrIGV2ZW4gd2l0aAorCW92ZXJseS1waWNreSBjb21waWxlcnMgdGhhdCByZWplY3QgJ2NoYXIgKmZvbyA9ICJiYXIiOycuCisKKwkqIHNyYy9zeW10YWIuYyAoU1lNQk9MX0FUVFJfUFJJTlQsIHN5bWJvbF9wcmludCk6IERpcmVjdCBvdXRwdXQKKwl0byBGSUxFICogcGFyYW1ldGVyLCBub3QgdG8gc3RkZXJyLiAgVGhpcyBmaXhlcyBhIHR5cG8gaW50cm9kdWNlZAorCWluIHRoZSAyMDA1LTA3LTEyIGNoYW5nZS4KKworCSogbGliL3N1YnBpcGUuYyAoY3JlYXRlX3N1YnBpcGUpOiBSZXdyaXRlIHNsaWdodGx5IHRvIGF2b2lkCisJd2FybmluZ3MgZnJvbSBHQ0MgNC4KKworCSogZGF0YS9nbHIuYyAoeXlleHBhbmRHTFJTdGFjaywgeXlhZGREZWZlcnJlZEFjdGlvbiwgeXlleHBhbmRHTFJTdGFjayk6CisJKHl5Z2xyU2hpZnREZWZlciwgeXlzcGxpdFN0YWNrKToKKwlSZW1vdmUgdW51c2VkIHBhcmFtZXRlcnMgYjRfcHVyZV9mb3JtYWxzLiAgQWxsIHVzZXMgY2hhbmdlZC4KKwkoeXlnbHJTaGlmdCk6IFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVycyBiNF91c2VyX2Zvcm1hbHMuCisJQWxsIHVzZXMgY2hhbmdlZC4KKwkoeXlnbHJSZWR1Y2UpOiBSZW1vdmVkIHVudXNlZCBwYXJhbWV0ZXIgeXlsb2NwLiAgQWxsIHVzZXMgY2hhbmdlZC4KKworMjAwNS0wNy0xOCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwlEZXN0cnVjdG9yIGNsZWFudXBzIGFuZCByZWd1bGFyaXphdGlvbiBhbW9uZyB0aGUgdGhyZWUgc2tlbGV0b25zLgorCSogTkVXUzogRG9jdW1lbnQgdGhlIGJlaGF2aW9yIGNoYW5nZXMuCisJKiBkYXRhL2dsci5jICh5eXJlY292ZXJTeW50YXhFcnJvcik6IERvbid0IGJvdGhlciB0byBwb3AgdGhlCisJc3RhY2sgYmVmb3JlIGZhaWxpbmcsIGFzIHRoZSBjbGVhbnVwIGNvZGUgd2lsbCBkbyBpdCBmb3IgdXMgbm93LgorCSogZGF0YS9sYWxyMS5jYyAoeXllcnJsYWIpOiBMaWtld2lzZS4KKwkqIGRhdGEvZ2xyLmMgKHl5cGFyc2UpOiBQb3AgZXZlcnl0aGluZyBvZmYgdGhlIHN0YWNrIGJlZm9yZQorCWZyZWVpbmcgaXQsIHNvIHRoYXQgZGVzdHJ1Y3RvcnMgZ2V0IGNhbGxlZCBwcm9wZXJseS4KKwkqIGRhdGEvbGFscjEuY2MgKHl5cmV0dXJuKTogTGlrZXdpc2UuCisJKiBkYXRhL3lhY2MuYyAoeXlyZXR1cm4pOiBQb3AgYW5kIGRlc3Ryb3kgdGhlIHN0YXJ0IHN5bWJvbCwgdG9vLgorCVRoaXMgaXMgbW9yZSBjb25zaXN0ZW50LgorCSogZG9jL2Jpc29uLnRleGluZm8gKERlc3RydWN0b3IgRGVjbCk6IE1lbnRpb24gbW9yZSByZWFzb25zCisJd2h5IGRlc3RydWN0b3JzIG1pZ2h0IGJlIGNhbGxlZC4gIDEuODc1IC0+IDIuMS4KKwkoRGVzdHJ1Y3RvciBEZWNsLCBEZWNsIFN1bW1hcnksIFRhYmxlIG9mIFN5bWJvbHMpOgorCVNvbWUgRW5nbGlzaC1sYW5ndWFnZSBjbGVhbnVwcyBmb3IgJWRlc3RydWN0b3IuCisJKiB0ZXN0cy9hY3Rpb25zLmF0IChfQVRfQ0hFQ0tfUFJJTlRFUl9BTkRfREVTVFJVQ1RPUik6CisJQWRkIG91dHB1dCBsaW5lIGZvciBkZXN0cnVjdG9yIG9mIHN0YXJ0IHN5bWJvbC4KKwkqIHRlc3RzL2NhbGMuYXQgKEFUX0NIRUNLX0NBTEMpOiBBZGQgb25lIHRvIGxpbmUgY291bnRzLAorCWJlY2F1c2Ugb2YgdGhhdCBzYW1lIGV4dHJhIG91dHB1dCBsaW5lLgorCisJKiBORVdTOiBEb2N1bWVudCBtaW5vciB3b3JkaW5nIGNoYW5nZXMgaW4gZGlhZ25vc3RpY3Mgb2YKKwlCaXNvbi1nZW5lcmF0ZWQgcGFyc2Vycy4KKwkqIGRhdGEvZ2xyLmMgKHl5TWVtb3J5RXhoYXVzdGVkKTogUmVuYW1lZCBmcm9tIHl5U3RhY2tPdmVyZmxvdy4KKwlSZW1vdmUgdW51c2VkIGZvcm1hbHMuICBBbGwgdXNlcyBjaGFuZ2VkLgorCSh5eXJlcG9ydEFtYmlndWl0eSk6ICJhbWJpZ3VpdHkgZGV0ZWN0ZWQiIC0+ICJzeW50YXggaXMgYW1iaWd1b3VzIi4KKwkoeXlwYXJzZSk6IFJlbmFtZSB5eW92ZXJmbG93bGFiIHRvIHl5ZXhoYXVzdGVkbGFiLgorCSogZGF0YS95YWNjLmMgKHl5cGFyc2UpOiAicGFyc2VyIHN0YWNrIG92ZXJmbG93IiAtPiAibWVtb3J5IGV4aGF1c3RlZCIuCisJUmVuYW1lIHl5b3ZlcmZsb3dhYiB0byB5eWV4aGF1c3RlZGxhYi4KKwlXaGVuIG1lbW9yeSBleGhhdXN0aW9uIG9jY3VycyBkdXJpbmcgc3ludGF4LWVycm9yIHJlcG9ydGluZywKKwlyZXBvcnQgaXQgc2VwYXJhdGVseSByYXRoZXIgdGhhbiBpbiBhIHNpbmdsZSBkaWFnbm9zdGljOyB0aGlzCisJZWFzZXMgdHJhbnNsYXRpb24uCisJKiBkb2MvYmlzb24udGV4aW5mbyAoTWVtb3J5IE1hbmFnZW1lbnQpOiBSZW5hbWVkIGZyb20gU3RhY2sgT3ZlcmZsb3cuCisJKE1lbW9yeSBFeGhhdXN0ZWQpOiBSZW5hbWVkIGZyb20gUGFyc2VyIFN0YWNrIE92ZXJmbG93LgorCVJldmFtcCB3b3JkaW5nIHNsaWdodGx5IHRvIHByZWZlciAibWVtb3J5IGV4aGF1c3Rpb24iLgorCSogdGVzdHMvYWN0aW9ucy5hdDogInBhcnNlciBzdGFjayBvdmVyZmxvdyIgLT4gIm1lbW9yeSBleGhhdXN0ZWQiLgorCisJKiBkYXRhL2MubTQgKGI0X3l5c3ltcHJpbnRfZ2VuZXJhdGUpOiBVc2UgWVlGUFJJTlRGLCBub3QgZnByaW50Zi4KKworCUFkZCBpMThuIHN1cHBvcnQgdG8gdGhlIEdMUiBza2VsZXRvbi4gIFBhcnRpYWxseSBmaXggdGhlIEMrKworCXNrZWxldG9uOyBhIEMrKyBleHBlcnQgbmVlZHMgdG8gZmluaXNoIHRoaXMuICBSZW1vdmUgZGVidWdnaW5nCisJbXNnaWRzOyB0aGVyZSdzIGxpdHRsZSBwb2ludCB0byBoYXZpbmcgdGhlbSB0cmFuc2xhdGVkLCBzaW5jZSB0aGV5CisJY2FuIGJlIHVuZGVyc3Rvb2Qgb25seSBieSBzb21lb25lIHdobyBjYW4gcmVhZCB0aGUKKwkoRW5nbGlzaC1sYW5ndWFnZSkgc291cmNlIGNvZGUuCisKKwlHZW5lcmF0ZSBydW50aW1lLXBvL2Jpc29uLXJ1bnRpbWUucG90IGF1dG9tYXRpY2FsbHksIHNvIHRoYXQgd2UKKwlkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGdhcmJhZ2UgZ2V0dGluZyBpbiB0aGF0IGZpbGUuICBXZSdsbAorCW1ha2Ugc3VyZSBhZnRlciB0aGUgbmV4dCBvZmZpY2lhbCByZWxlYXNlIHRoYXQgb2xkIG1zZ2lkcyBkb24ndAorCWdldCBsb3N0LiAgU2VlCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDUtMDcvbXNnMDAxMTkuaHRtbD4uCisKKwkqIHJ1bnRpbWUtcG8vTWFrZWZpbGUuaW4uaW4sIHJ1bnRpbWUtcG8vYmlzb24tcnVudGltZS5wb3Q6IFJlbW92ZS4KKwlOb3cgYXV0by1nZW5lcmF0ZWQuCisJKiBQQUNLQUdJTkc6IERvbid0IGNsYWltIHRoYXQgR2F3aywgR0NDLCBQZXJsIHVzZSB0aGlzIG1ldGhvZCB5ZXQuCisJRml4IHR5cG9zIGluIGV4cGxhbmF0aW9ucyBvZiB0aGUgcnVudGltZSBmaWxlLgorCSogYm9vdHN0cmFwOiBDaGFuZ2UgZ2V0dGV4dCBrZXl3b3JkIGZyb20gWVlJMThOIHRvIFlZXy4KKwlVc2Ugc3RhbmRhcmQgTWFrZWZpbGUuaW4uaW4gaW4gcnVudGltZS1wbywgc2luY2Ugd2UnbGwgYXJyYW5nZQorCWZvciBiYWNrd2FyZC1jb21wYXRpYmxlIGJpc29uLXJ1bnRpbWUucG8gZmlsZXMgaW4gYSBkaWZmZXJlbnQgd2F5LgorCSogZGF0YS9nbHIuYyAoWVlfKTogTmV3IG1hY3JvLCBmcm9tIHlhY2MuYy4KKwkoeXl1c2VyQWN0aW9uLCB5eXJlcG9ydEFtYmlndWl0eSwgeXlyZXBvcnRTeW50YXhFcnJvciwgeXlwYXJzZSk6CisJVHJhbnNsYXRlIG1lc3NhZ2VzIGludGVuZGVkIGZvciB1c2Vycy4KKwkoeXlyZXBvcnRTeW50YXhFcnJvcik6IENoYW5nZSAidmlydHVhbCBtZW1vcnkiIHRvICJtZW1vcnkiIHRvIG1hdGNoCisJdGhlIHdvcmRpbmcgaW4gdGhlIG90aGVyIHNrZWxldG9ucy4gIFdlIGRvbid0IGtub3cgdGhhdCB0aGUgbWVtb3J5CisJaXMgdmlydHVhbC4KKwkqIGRhdGEvbGFscjEuY2MgKFlZXyk6IFJlbmFtZWQgZnJvbSBfLiAgQWxsIHVzZXMgY2hhbmdlZC4KKwlVc2Ugc2FtZSBtZXRob2QgdGhhdCB5YWNjLmMgdXNlcy4KKwlEb24ndCB0cmFuc2xhdGUgZGVidWdnaW5nIG1lc3NhZ2VzLgorCSh5eTo6eXlyZXBvcnRfc3ludGF4X2Vycm9yKTogUHV0IGluIGEgRklYTUUgZm9yIHRoZSBpMThuIHN0dWZmOworCWl0IGRvZXNuJ3Qgd29yayAoeWV0KSwgYW5kIHJlcXVpcmVzIEMrKyBleHBlcnRpc2UgdG8gZml4LgorCSogZGF0YS95YWNjLmMgKFlZXyk6IFJlbmFtZWQgZnJvbSBZWTE4Ti4gIEFsbCB1c2VzIGNoYW5nZWQuCisJTW92ZSBkZWZuIHRvIGEgbW9yZSBsb2dpY2FsIHBsYWNlLCB0byBiZSBjb25zaXN0ZW50IHdpdGggb3RoZXIKKwlza2VsZXRvbnMuCisJRG9uJ3QgdHJhbnNsYXRlIGRlYnVnZ2luZyBtZXNzYWdlcy4KKwlEb24ndCBhc3N1bWUgbGluZSBudW1iZXJzIGZpdCBpbiB1bnNpZ25lZCBpbnQ7IHVzZSB1bnNpZ25lZCBsb25nIGZtdHMuCisJKiBkb2MvYmlzb24udGV4aW5mbzogTWVudGlvbiA8bGliaW50bC5oPi4gIENoYW5nZSBnbGliYyBjcm9zcyByZWZlcmVuY2UKKwl0byBnZXR0ZXh0IGNyb3NzIHJlZmVyZW5jZS4gIEFkZCBpbmRleGluZyB0ZXJtcy4gIE1lbnRpb24gWVlFTkFCTEVfTkxTLgorCSogcnVudGltZS1wby9QT1RGSUxFUy5pbjogQWRkIGRhdGEvZ2xyLmMsIGRhdGEvbGFscjEuY2MuCisKKwlGaXggeXllcnJvciAvIHl5bGV4IHRlc3QgZ2xpdGNoZXMgbm90ZWQgYnkgdHdsZXZvQHhzNGFsbC5ubC4KKwkqIHRlc3RzL2N4eC10eXBlLmF0IChfQVRfVEVTVF9HTFJfQ1hYVFlQRVMpOiBIYXZlIHl5ZXJyb3IgcmV0dXJuCisJdm9pZCwgbm90IGludC4KKwkqIHRlc3RzL2dsci1yZWdyZXNzaW9uLmF0IChCYWRseSBDb2xsYXBzZWQgR0xSIFN0YXRlcyk6CisJTGlrZXdpc2UuCisJKEltcHJvcGVyIGhhbmRsaW5nIG9mIGVtYmVkZGVkIGFjdGlvbnMgYW5kIGRvbGxhcigtTikgaW4gR0xSIHBhcnNlcnMpOgorCXl5bGV4IHNob3VsZCByZXR1cm4gMCBhdCBFT0YgcmF0aGVyIHRoYW4gYWJvcnRpbmcuCisKKwlJbXByb3ZlIHRlc3RzIGZvciBzdGFjayBvdmVyZmxvdyBpbiBHTFIgcGFyc2VyLgorCVByb2JsZW0gcmVwb3J0ZWQgYnkgdHdsZXZvQHhzNGFsbC5ubC4KKwkqIGRhdGEvZ2xyLmMgKHN0cnVjdCB5eUdMUlN0YWNrKTogUmVtb3ZlIHl5ZXJyZmxhZyBtZW1iZXIuCisJQWxsIHVzZXMgcmVtb3ZlZC4KKwkoeXlTdGFja092ZXJmbG93KTogSnVzdCBsb25nam1wLCBidXQgd2l0aCB2YWx1ZSAyIHNvIHRoYXQgY2FsbGVyCisJY2FuIGhhbmRsZSB0aGUgcHJvYmxlbS4KKwkoWVlDSEsxKTogVXNlIGdvdG8gKGEgbGEgeWFjYy5jKSByYXRoZXIgdGhhbiBzZXR0aW5nIGEgZmxhZy4KKwkoeXlwYXJzZSk6IE5ldyBsb2NhbCB2YXJpYWJsZSB5eXJlc3VsdCB0byByZWNvcmQgdGhlIHJlc3VsdC4KKwlVc2UgcmVzdWx0IG9mIHNldGptcCB0byBzZXQgaXQsIHJhdGhlciB0aGFuIHN0b3JpbmcgaXRpbnRvCisJc3RydWN0LgorCSh5eURvbmUpOiBSZW1vdmUgbGFiZWwuCisJKHl5YWNjZXB0bGFiLCB5eWFib3J0bGFiLCB5eW92ZXJmbG93bGFiLCB5eXJldHVybik6IE5ldyBsYWJlbHMsCisJdG8gbWltaWMgeWFjYy5jLiAgRG8gbm90IGRpc2NhcmQgbG9va2FoZWFkIGlmIGl0J3MgRU9GIChwb3NzaWJsZQorCWlmIFlZQUJPUlQgaXMgdXNlZCkuCisJKiB0ZXN0cy9hY3Rpb25zLmF0IChfQVRfQ0hFQ0tfUFJJTlRFUl9BTkRfREVTVFJVQ1RPUik6IEV4aXQgd2l0aAorCXl5cGFyc2Ugc3RhdHVzOyBwdXQgc3RhdHVzID4gMSBpbnRvIGRpYWdub3N0aWMuCisJQ2hlY2sgdGhhdCBzdGF0dXM9PTIgd29ya3MuCisJKiB0ZXN0cy9jYWxjLmF0LCB0ZXN0cy9jeHgtdHlwZS5hdCwgdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQ6CisJVXNlIGV4aXQgc3RhdHVzIDMgZm9yIGZhaWx1cmUgdG8gb3BlbiAod2hpY2ggc2hvdWxkbid0IGhhcHBlbikuCisKKzIwMDUtMDctMTcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiB0ZXN0cy9jb25mbGljdHMuYXQgKCVub25hc3NvYyBhbmQgZW9mKTogIERvbid0IGV4aXQgd2l0aCBzdGF0dXMKKwkxIG9uIHN5bnRheCBlcnJvcjsganVzdCBsZXQgeXlwYXJzZSBkbyBpdHMgdGhpbmcuCisJKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdCAoQmFkbHkgQ29sbGFwc2VkIEdMUiBTdGF0ZXMpOiBMaWtld2lzZS4KKwkqIHRlc3RzL3RvcnR1cmUuYXQgKEFUX0RBVEFfU1RBQ0tfVE9SVFVSRSk6IExpa2V3aXNlLgorCShFeHBsb2RpbmcgdGhlIFN0YWNrIFNpemUgd2l0aCBBbGxvY2EpOgorCShFeHBsb2RpbmcgdGhlIFN0YWNrIFNpemUgd2l0aCBNYWxsb2MpOgorCUV4cGVjdCBleGl0IHN0YXR1cyAyLCBub3QgMSwgc2luY2UgdGhlIHBhcnNlciBpcyBzdXBwb3NlZCB0byBibG93CisJaXRzIHN0YWNrLiAgUHJvYmxlbSByZXBvcnRlZCBieSB0d2xldm9AeHM0YWxsLm5sLgorCisJKiBkYXRhL2dsci5jICh5eXBhcnNlKTogRG9uJ3QgYXNzdW1lIHRoYXQgdGhlIGluaXRpYWwgY2FsbHMKKwl0byBZWU1BTExPQyBzdWNjZWVkOyBpbiB0aGF0IGNhc2UsIHl5cGFyc2UgaW5jb3JyZWN0bHkgcmV0dXJuZWQgMC4KKwlQcmludCBhIHN0YWNrLW92ZXJmbG93IG1lc3NhZ2UgYW5kIGZhaWwgaW5zdGVhZC4KKwlJbml0aWFsaXplIHRoZSBsaW5lLW51bWJlciBpbmZvcm1hdGlvbiBiZWZvcmUgY3JlYXRpbmcgdGhlIHN0YWNrLAorCXNvIHRoYXQgdGhlIHN0YWNrLW92ZXJmbG93IG1lc3NhZ2UgY2FuIHJlcG9ydCBsaW5lIHplcm8gc2FmZWx5LgorCisyMDA1LTA3LTE0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCUZpeCBwcm9ibGVtcyByZXBvcnRlZCBieSB0d2xldm9AeHM0YWxsLm5sLgorCSogZGF0YS9nbHIuYyAoWVlTVEFDS0VYUEFOREFCTEUpOiBEb24ndCBkZWZpbmUgaWYgYWxyZWFkeSBkZWZpbmVkLgorCSh5eXVzZXJNZXJnZSk6IFByb3ZpZGUgYSBkZWZhdWx0IGNhc2UgaWYgYjRfbWVyZ2VycyBpcyBlbXB0eS4KKwkqIHRlc3RzL2N4eC10eXBlLmF0IChfQVRfVEVTVF9HTFJfQ1hYVFlQRVMpOiBEZWZpbmUgWVlTVEFDS0VYUEFOREFCTEUuCisJKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdAorCShJbXByb3BlciBoYW5kbGluZyBvZiBlbWJlZGRlZCBhY3Rpb25zIGFuZCBkb2xsYXIoLU4pIGluIEdMUiBwYXJzZXJzKToKKwlBZGQgY2FzdHMgdG8gcGFjaWZ5IEMrKyBjb21waWxlcnMuCisJKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdCAoSW1wcm9wZXIgbWVyZ2luZyBvZiBHTFIgZGVsYXllZCBhY3Rpb24KKwlzZXRzKTogRGVjbGFyZSB5eWxleCBiZWZvcmUgdXNpbmcgaXQuCisJKiB0ZXN0cy9NYWtlZmlsZS5hbSAobWFpbnRhaW5lci1jaGVjay1nKyspOiBGaXggYSBzdHJheQorCSQoR1hYKSB0aGF0IGVzY2FwZWQgdGhlIHJlbmFtaW5nIG9mIEdYWCB0byBDWFguICBSZW1vdmUgYm9ndXMKKwl0ZXN0IGZvciB2YWxncmluZDsgdmFsZ3JpbmQgaXMgaW5kZXBlbmRlbnQgb2YgZysrLgorCShtYWludGFpbmVyLWNoZWNrLXBvc2l4KTogQWRkIF9QT1NJWDJfVkVSU0lPTj0yMDAxMTIsIHRvIGNoZWNrCisJZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBQT1NJWCAxMDAzLjEtMjAwMSAoaWYgcnVubmluZyBjb3JldXRpbHMpLgorCSogdGVzdHMvY3h4LXR5cGUuYXQgKF9BVF9URVNUX0dMUl9DWFhUWVBFUyk6IFBvcnQgdG8gc3RyaWN0ZXIgQysrLgorCVVzZSBhIGRlc3RydWN0b3IsIHNvIHRoYXQgd2UgY2FuIGV4cGFuZCB0aGUgc3RhY2suICBDaGFuZ2UKKwlZWVNUWVBFIHRvIGNoYXIgKiBzbyB0aGF0IHdlIGNhbiBmcmVlIGl0LiAgQ2FzdCByZXN1bHQgb2YgbWFsbG9jLgorCisyMDA1LTA3LTEzICBQYXVsIEhpbGZpbmdlciAgPGhpbGZpbmdyQENTLkJlcmtlbGV5LkVEVT4KKworCSogZGF0YS9nbHIuYyAoeXl1c2VyQWN0aW9uKTogRml4IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdGhhdCBjYXVzZWQKKwlhIHZhbGdyaW5kIGZhaWx1cmUuICBQcm9ibGVtIHJlcG9ydGVkIGJ5IHR3bGV2b0B4czRhbGwubmwuCisKKzIwMDUtMDctMTMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBQQUNLQUdJTkc6IE5ldyBmaWxlLCBzdWdnZXN0ZWQgYnkgQnJ1bm8gSGFpYmxlIGFuZCB0YWtlbiBmcm9tCisJc2ltaWxhciB3b3JkaW5nIGluIGdldHRleHQncyBQQUNLQUdJTkcgZmlsZS4KKwkqIE5FV1M6IE1lbnRpb24gUEFDS0FHSU5HLgorCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgUEFDS0FHSU5HLgorCisyMDA1LTA3LTEyICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogTkVXUzogRG9jdW1lbnQgcmVjZW50IGkxOG4gaW1wcm92ZW1lbnRzLgorCSogYm9vdHN0cmFwOiBHZXQgcnVudGltZSB0cmFuc2xhdGlvbnMgaW50byBydW50aW1lLXBvLgorCUNyZWF0ZSBydW50aW1lLXBvIGZpbGVzIGF1dG9tYXRpY2FsbHksIGlmIHBvc3NpYmxlLgorCSogY29uZmlndXJlLmFjOiBJbnZva2UgQklTT05fSTE4Tiwgc28gdGhhdCB3ZSBlYXQgb3VyIG93biBkb2cgZm9vZC4KKwkqIGRhdGEveWFjYy5jOiBSZXdyaXRlIGluY2x1c2lvbiBvZiA8bGliaW50bC5oPiBzbyB0aGF0IEVOQUJMRV9OTFMKKwlkb2VzIG5vdCBpbmZyaW5nZSBvbiB0aGUgdXNlcidzIG5hbWUgc3BhY2UuCisJKFlZRU5BQkxFX05MUyk6IFJlbmFtZWQgZnJvbSBFTkFCTEVfQklTT05fTkxTLgorCSogZG9jL2Jpc29uLnRleGluZm8gKEludGVybmF0aW9uYWxpemF0aW9uKTogUmV2YW1wIHRoZSBFbmdsaXNoCisJYW5kIFRleGluZm8gc3ludGF4IGEgYml0LCB0byB0cnkgdG8gbWFrZSBpdCBjbGVhcmVyLgorCShCaXNvbiBPcHRpb25zLCBPcHRpb24gQ3Jvc3MgS2V5KTogTWVudGlvbiAtLXByaW50LWxvY2FsZWRpci4KKwkqIG00L2Jpc29uLWkxOG4ubTQgKEJJU09OX0kxOE4pOiBSZW5hbWUgRU5BQkxFX0JJU09OX05MUyB0bworCVlZRU5BQkxFX05MUy4gIFF1b3RlIGEgYml0IG1vcmUuCisJKiBydW50aW1lLXBvLy5jdnNpZ25vcmU6IE5ldyBmaWxlLgorCSogcnVudGltZS1wby9NYWtlZmlsZS5pbi5pbiAobW9zdGx5Y2xlYW4pOiBSZW1vdmUgKi5vbGQucG90LgorCSogcnVudGltZS1wby9SdWxlcy1xdW90OiBSZW1vdmU7IG5vdyBjcmVhdGVkIGJ5IGJvb3RzdHJhcC4KKwkqIHJ1bnRpbWUtcG8vcXVvdC5zZWQ6IExpa2V3aXNlLgorCSogcnVudGltZS1wby9ib2xkcXVvdC5zZWQ6IExpa2V3aXNlLgorCSogcnVudGltZS1wby9lbkBxdW90LmhlYWRlcjogTGlrZXdpc2UuCisJKiBydW50aW1lLXBvL2VuQGJvbGRxdW90LmhlYWRlcjogTGlrZXdpc2UuCisJKiBydW50aW1lLXBvL2luc2VydC1oZWFkZXIuc2luOiBMaWtld2lzZS4KKwkqIHJ1bnRpbWUtcG8vcmVtb3ZlLXBvdGNkYXRlLnNpbjogTGlrZXdpc2UuCisJKiBydW50aW1lLXBvL01ha2V2YXJzOiBMaWtld2lzZS4KKwkqIHJ1bnRpbWUtcG8vTElOR1VBUzogTGlrZXdpc2UuCisJKiBydW50aW1lLXBvL2RlLnBvOiBMaWtld2lzZTsgd2Ugd2lsbCByZWx5IG9uIHRoZSB0cmFuc2xhdGlvbiBwcm9qZWN0CisJdG8gbWFpbnRhaW4gdGhpcywgc28gImJvb3RzdHJhcCIgc2hvdWxkIGdldCBpdC4KKwkqIHNyYy9nZXRhcmcuYyAoUFJJTlRfTE9DQUxFRElSX09QVElPTik6IExldCB0aGUgQyBjb21waWxlciBkZXRlcm1pbmUKKwlpdHMgdmFsdWUuCisJKiBzcmMvbWFpbi5jIChtYWluKTogQmluZCB0aGUgYmlzb24tcnVudGltZSBkb21haW4sIHRvby4KKworMjAwNS0wNy0xMiAgQnJ1bm8gSGFpYmxlICA8YnJ1bm9AY2xpc3Aub3JnPgorCisJKiBkYXRhL3lhY2MuYzogSW5jbHVkZSA8bGliaW50bC5oPiB3aGVuIE5MUyBpcyBlbmFibGVkLgorCShZWUkxOE4pOiBSZW5hbWVkIGZyb20gXy4gVXNlIGRnZXR0ZXh0IHdoZW4gTkxTIGlzIGVuYWJsZWQuCisJKiBwby9QT1RGSUxFUy5pbjogUmVtb3ZlIGF1dG9nZW5lcmF0ZWQgZmlsZSBzcmMvcGFyc2UtZ3JhbS5jLgorCSogcnVudGltZS1wbzogTmV3IGRpcmVjdG9yeS4KKwkqIHJ1bnRpbWUtcG8vTWFrZWZpbGUuaW4uaW46IE5ldyBmaWxlLCBjb3BpZWQgZnJvbSBwby8sIHdpdGggbW9kaWZpZWQKKwkkKERPTUFJTikucG90LXVwZGF0ZSBydWxlLCBzbyB0aGF0IG9sZCBtZXNzYWdlcyBhcmUgbmV2ZXIgZHJvcHBlZC4KKwkqIHJ1bnRpbWUtcG8vUnVsZXMtcXVvdDogTmV3IGZpbGUsIGNvcGllZCBmcm9tIHBvLy4KKwkqIHJ1bnRpbWUtcG8vcXVvdC5zZWQ6IExpa2V3aXNlLgorCSogcnVudGltZS1wby9ib2xkcXVvdC5zZWQ6IExpa2V3aXNlLgorCSogcnVudGltZS1wby9lbkBxdW90LmhlYWRlcjogTGlrZXdpc2UuCisJKiBydW50aW1lLXBvL2VuQGJvbGRxdW90LmhlYWRlcjogTGlrZXdpc2UuCisJKiBydW50aW1lLXBvL2luc2VydC1oZWFkZXIuc2luOiBMaWtld2lzZS4KKwkqIHJ1bnRpbWUtcG8vcmVtb3ZlLXBvdGNkYXRlLnNpbjogTGlrZXdpc2UuCisJKiBydW50aW1lLXBvL01ha2V2YXJzOiBOZXcgZmlsZS4KKwkqIHJ1bnRpbWUtcG8vUE9URklMRVMuaW46IE5ldyBmaWxlLgorCSogcnVudGltZS1wby9MSU5HVUFTOiBOZXcgZmlsZS4KKwkqIHJ1bnRpbWUtcG8vYmlzb24tcnVudGltZS5wb3Q6IE5ldyBmaWxlLgorCSogcnVudGltZS1wby9kZS5wbzogTmV3IGZpbGUuCisJKiBtNC9iaXNvbi5tNDogTmV3IGZpbGUuCisJKiBNYWtlZmlsZS5hbSAoU1VCRElSUyk6IEFkZCBydW50aW1lLXBvLgorCShhY2xvY2FsZGlyLCBhY2xvY2FsX0RBVEEpOiBOZXcgdmFyaWFibGVzLgorCSogY29uZmlndXJlLmFjOiBBZGQgQUNfQ09ORklHX0ZJTEVTIG9mIHJ1bnRpbWUtcG8vTWFrZWZpbGUuaW4uCisJRGVmaW5lIGFjbG9jYWxkaXIuCisJKiBzcmMvZ2V0YXJncy5jICh1c2FnZSk6IERvY3VtZW50IC0tcHJpbnQtbG9jYWxlZGlyIG9wdGlvbi4KKwkoUFJJTlRfTE9DQUxFRElSX09QVElPTik6IE5ldyBlbnVtIGl0ZW0uCisJKGxvbmdfb3B0aW9ucyk6IEFkZCAtLXByaW50LWxvY2FsZWRpciBvcHRpb24uCisJKGdldGFyZ3MpOiBIYW5kbGUgLS1wcmludC1sb2NhbGVkaXIgb3B0aW9uLgorCSogZG9jL2Jpc29uLnRleGluZm8gKEJpc29uIFBhcnNlcik6IFJlbW92ZSBwYXJhZ3JhcGggYWJvdXQgXygpLgorCShJbnRlcm5hdGlvbmFsaXphdGlvbik6IE5ldyBzZWN0aW9uLgorCisyMDA1LTA3LTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3N5bXRhYi5oLCBzcmMvc3ltdGFiLmMgKHN5bWJvbF9wcmludCk6IFN3YXAgdGhlIGFyZ3VtZW50cywKKwlmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgcmVzdCBvZiB0aGUgY29kZS4KKwkqIHNyYy9zeW1saXN0LmgsIHNyYy9zeW1saXN0LmMgKHN5bWJvbF9saXN0X3ByaW50KTogRGl0dG8uCisJQWRkIHNlcGFyYXRvcnMuCisKKzIwMDUtMDctMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcGFyc2UtZ3JhbS55OiBVc2UgJXByaW50ZXIgaW5zdGVhZCBvZiBZWVBSSU5ULgorCisyMDA1LTA3LTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3N5bXRhYi5oLCBzcmMvc3ltdGFiLmMgKHN5bWJvbF9wcmludCk6IE5ldy4KKwkqIHNyYy9zeW1saXN0LmgsIHNyYy9zeW1saXN0LmMgKHN5bWJvbF9saXN0X3ByaW50KTogTmV3LgorCSogc3JjL3N5bWxpc3QuYyAoc3ltYm9sX2xpc3Rfbl90eXBlX25hbWVfZ2V0KTogUmVwb3J0IHRoZSBjdWxwcml0LgorCisyMDA1LTA3LTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9nbHIuYyAoYjRfc3luY2xpbmUpOiBGaXggKHN3YXApIHRoZSBkZWZpbml0aW9ucyBvZgorCWI0X2F0X2RvbGxhciBhbmQgYjRfZG9sbGFyX2RvbGxhci4KKworMjAwNS0wNy0xMSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChNeXN0ZXJ5IENvbmZsaWN0cyk6IEFkZCByZWZlcmVuY2UgdG8gRGVSZW1lcgorCWFuZCBQZW5uZWxsbydzIHBhcGVyLgorCisyMDA1LTA3LTA5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogZGF0YS95YWNjLmMgKHl5cGFyc2UpOiBVbmRvIHByZXZpb3VzIHBhdGNoLiAgSW5zdGVhZCwKKwlzZXQgeXlsc3BbMF0gYW5kIHl5dnNwWzBdIG9ubHkgaWYgdGhlIGluaXRpYWwgYWN0aW9uCisJc2V0cyB5eWxsb2MgYW5kIHl5bHZhbCwgcmVzcGVjdGl2ZWx5LgorCisJKiBkYXRhL3lhY2MuYyAoeXlwYXJzZSk6IEluIHRoZSBpbml0aWFsIGFjdGlvbiwgc2V0CisJeXlsc3BbMF0gYW5kIHl5dnNwWzBdIHJhdGhlciB0aGFuIHl5bGxvYyBhbmQgeXlsdmFsLgorCVRoaXMgYXZvaWRzIHRoZSB1c2Ugb2YgdW5kZWZpbmVkIHZhcmlhYmxlcyBpZiB0aGUgaW5pdGlhbAorCWFjdGlvbiBkb2VzIG5vdCBzZXQgeXlsbG9jIGFuZC9vciB5eWx2YWwuCisKKzIwMDUtMDctMDcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBleGFtcGxlcy9jYWxjKysvY2FsYysrLWRyaXZlci5jYywgZXhhbXBsZXMvY2FsYysrL2NhbGMrKy1kcml2ZXIuaGg6CisJKiBleGFtcGxlcy9jYWxjKysvY2FsYysrLXNjYW5uZXIubGwsIGV4YW1wbGVzL2NhbGMrKy9jYWxjKysuY2M6CisJUmVtb3ZlIGZyb20gQ1ZTLiAgVGhlc2UgZmlsZXMgYXJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLgorCSogZXhhbXBsZXMvZXh0ZXhpOiBDbGFyaWZ5IHRoYXQgdGhpcyBmaWxlIGlzIG5vdyBwYXJ0IG9mIEJpc29uLAorCW5vdCBHTlUgTTQsIGFuZCB0aGF0IGl0IHdvcmtzIHdpdGggYW55IFBPU0lYLWNvbXBhdGlibGUgQXdrLgorCSogZXhhbXBsZXMvY2FsYysrL01ha2VmaWxlLmFtIChydW5fZXh0ZXhpKTogUmVtb3ZlOyBub3QgdXNlZC4KKwkoJChjYWxjX2V4dHJhY3RlZCkpOiBSZW5hbWVkIGZyb20gJChjYWxjX3NvdXJjZXNfZXh0cmFjdGVkKSwKKwlzbyB0aGF0IHdlIGFsc28gZ2V0IGNhbGMrKy1wYXJzZXIueXkuICBHZW5lYXRlIGl0LgorCVVzZSAkKEFXSyksIG5vdCBnYXdrLCBzaW5jZSBhbnkgY29uZm9ybWluZyBBd2sgd2lsbCBkby4KKwlQdXQgY29tbWVudCBiZWZvcmUgYWN0aW9uLCBzaW5jZSBvbGRlciAnbWFrZScgY2FuJ3QgaGFuZGxlIGNvbW1lbnQKKwlpbiBhY3Rpb24uCisJJChCVUlMVF9TT1VSQ0VTKTogTGlzdCBhbGwgYnVpbHQgc291cmNlcywgbm90IGp1c3Qgc29tZSBvZiB0aGVtLgorCSQoTUFJTlRBSU5FUkNMRUFORklMRVMpOiBSZW1vdmUgKi5zdGFtcCwgYW5kIGFsbCBidWlsdCBzb3VyY2VzLgorCSQoJChzcmNkaXIpL2NhbGMrKy1wYXJzZXIuc3RhbXApOiBXb3JrIGV2ZW4gaWYgUE9TSVhMWV9DT1JSRUNULgorCSQoJChjYWxjX3NvdXJjZXNfZ2VuZXJhdGVkKSk6IFJlbW92ZSB1bm5lY2Vzc2FyeSB0ZXN0IGZvciBleGlzdGVuY2UKKwlvZiB0YXJnZXQuICAoVGhpcyBoYWQgYSBzaGVsbCBzeW50YXggZXJyb3IgYW55d2F5OyBhIHN0cmF5ICJ4Ii4pCisJKGNhbGNfZXh0cmFjdGVkKTogTGlzdCAkKHNyY2RpcikvY2FsYysrLXBhcnNlci55eSwgbm90CisJY2FsYysrLXBhcnNlci55eS4KKwkqIGV4YW1wbGVzLy5jdnNpZ25vcmUsIGV4YW1wbGVzL2NhbGMrKy8uY3ZzaWdub3JlOiBOZXcgZmlsZXMuCisKKwkqIGJvb3RzdHJhcCAoZ251bGliX21vZHVsZXMpOiBBZGQgZ2V0dGV4dCwgbm93IHRoYXQgaXQncyBubyBsb25nZXIKKwlpbXBsaWVkIGJ5IHRoZSBvdGhlciBtb2R1bGVzLgorCisyMDA1LTA3LTA2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCUJpbmQgZXhhbXBsZXMvY2FsYysrIHRvIHRoZSBwYWNrYWdlLgorCSogZXhhbXBsZXMvY2FsYysrL01ha2VmaWxlOiBSZW1vdmUsIHJlcGxhY2VkIGJ5Li4uCisJKiBleGFtcGxlcy9jYWxjKysvTWFrZWZpbGUuYW06IC4uLiB0aGlzIG5ldyBmaWxlLgorCSogZXhhbXBsZXMvY2FsYysrL3Rlc3Q6IFJlbW92ZSBpbnB1dC4KKwkqIGV4YW1wbGVzL2NhbGMrKy9jb21waWxlOiBSZW1vdmUuCisJKiBleGFtcGxlcy9NYWtlZmlsZS5hbTogTmV3LgorCSogY29uZmlndXJlLmFjLCBNYWtlZmlsZS5hbTogQWRqdXN0LgorCSogZG9jL01ha2VmaWxlLmFtIChjbGVhbi1sb2NhbCk6IE5ldywgZm9yIG1vcmUgcmVjZW50IHRleGkyZHZpcy4KKworMjAwNS0wNy0wNSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIGRhdGEvZ2xyLmMgKHl5RmFpbCk6IERyYXN0aWNhbGx5IHNpbXBsaWZ5OyBzaW5jZSB0aGUgZm9ybWF0IGFyZ3VtZW50CisJbmV2ZXIgaGFkIGFueSAlIGRpcmVjdGl2ZXMsIHdlIGNhbiBzaW1wbHkgcGFzcyBpdCB0byB5eWVycm9yLgorCSh5eXBhcnNlKTogVXNlICJ0IGE7IGE9YjsiIHJhdGhlciB0aGFuICJ0IGEgPSBiOyIgd2hlbiBhIHdpbGwKKwliZSBtb2RpZmllZCBsYXRlciwgYXMgdGhhdCBpcyB0aGUgdXN1YWwgc3R5bGUgaW4gZ2xyLmMuCisJUHJvYmxlbXMgcmVwb3J0ZWQgYnkgUGF1bCBIaWxmaW5nZXIuCisKKwlSZXdyaXRlIEdMUiBwYXJzZXIgdG8gY2F0Y2ggbW9yZSBidWZmZXIgb3ZlcnJ1biwgc3RvcmFnZSBleGhhdXN0aW9uLAorCWFuZCBzaXplIG92ZXJmbG93IGVycm9ycy4KKwkqIGRhdGEvZ2xyLmM6IEluY2x1ZGUgPHN0ZGlvLmg+IGV0Yy4gYWZ0ZXIgdXNlciBwcm9sb2csIG5vdCBiZWZvcmUsCisJaW4gY2FzZSB0aGUgdXNlciBwcm9sb2cgc2V0cyBmZWF0dXJlLXRlc3QgbWFjcm9zIGxpa2UgX0dOVV9TT1VSQ0UuCisJKFlZU0laRU1BWCk6IE5ldyBtYWNyby4KKwkoeXlzdHBjcHkpOiBOZXcgZnVuY3Rpb24sIHRha2VuIGZyb20geWFjYy5jLgorCShzdHJ1Y3QgeXlHTFJTdGFjay55eXNwYWNlTGVmdCk6IE5vdyBzaXplX3QsIG5vdCBpbnQuCisJKHl5aW5pdEdMUlN0YWNrLCB5eWZyZWVHTFJzdGFjayk6IFJlbW92ZSB1bm5lY2Vzc2FyeSBmb3J3YXJkIGRlY2xzLAorCXNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBtYWludGFpbiB0aGVpciBzaWduYXR1cmVzLgorCSh5eUZhaWwpOiBDaGVjayBmb3IgYnVmZmVyIG92ZXJmbG93LCBieSB1c2luZyB2c25wcmludGYgcmF0aGVyCisJdGhhbiB2c3ByaW50Zi4gIEFsbG9jYXRlIGEgYmlnZ2VyIGJ1ZmZlciBpZiBwb3NzaWJsZS4KKwlSZXBvcnQgYW4gZXJyb3IgaWYgYnVmZmVyIGFsbG9jYXRpb24gZmFpbHMuCisJKHl5U3RhY2tPdmVyZmxvdyk6IE5ldyBmdW5jdGlvbi4KKwkoeXlpbml0U3RhdGVTZXQsIHl5aW5pdEdMUlN0YWNrKTogUmV0dXJuIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIKKwl0aGUgaW5pdGlhbGl6YXRpb24gd2FzIHN1Y2Nlc3NmdWwuICBJdCBtaWdodCBmYWlsIGlmIHN0b3JhZ2Ugd2FzCisJZXhoYXVzdGVkLgorCSh5eWV4cGFuZEdMUlN0YWNrKTogQWRkIG1vcmUgY2hlY2tzIGZvciBzdG9yYWdlIGFsbG9jYXRpb24gZmFpbHVyZS4KKwlVc2UgeXlTdGFja092ZXJmbG93IHRvIHJlcG9ydCBmYWlsdXJlcy4KKwkoeXltYXJrU3RhY2tEZWxldGVkLCB5eWdsclNoaWZ0LCB5eWdsclNoaWZ0RGVmZXIsIHl5ZG9BY3Rpb24pOgorCSh5eXNwbGl0U3RhY2ssIHl5cHJvY2Vzc09uZVN0YWNrLCB5eXBhcnNlLCB5eXBzdGFjayk6CisJRG9uJ3QgYXNzdW1lIHN0YWNrIG51bWJlciBmaXRzIGluIGludC4KKwkoeXlzcGxpdFN0YWNrKTogQ2hlY2sgZm9yIHN0b3JhZ2UgYWxsb2NhdGlvbiBmYWlsdXJlLgorCSh5eXNwbGl0U3RhY2ssIHl5cHJvY2Vzc09uZVN0YWNrKTogQWRkIHB1cmVfZm9ybWFscywgc28gdGhhdCB3ZQorCWNhbiBwcmludCBkaWFnbm9zdGljcyBvbiBzdG9yYWdlIGFsbG9jYXRpb24gZmFpbHVyZS4gIEFsbCBjYWxsZXJzCisJY2hhbmdlZC4KKwkoeXlyZXNvbHZlVmFsdWUpOiBVc2UgeXlib29sIGZvciBib29sZWFuLgorCSh5eXJlcG9ydFN5bnRheEVycm9yKTogQ2hlY2sgZm9yIHNpemUtY2FsY3VsYXRpb24gb3ZlcmZsb3cuCisJVGhpcyBjb2RlIGlzIHRha2VuIGZyb20geWFjYy5jLgorCSh5eXBhcnNlKTogQ2hlY2sgZm9yIHN0b3JhZ2UgYWxsb2NhdGlvbiBlcnJvcnMgd2hlbiBhbGxvY2F0aW5nCisJdGhlIGluaXRpYWwgc3RhY2suCisKKzIwMDUtMDctMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJRXh0cmFjdCBjYWxjKysgZnJvbSB0aGUgZG9jdW1lbnRhdGlvbi4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChDYWxjKyspOiBBZGQgdGhlIGV4dHJhY3Rpb24gbWFya3MuCisJKiBleGFtcGxlcy9leHRleGk6IE5ldywgZnJvbSB0aGUgYWJvcnRlZCBHTlUgUHJvZ3JhbW1pbmcgMkUuCisJU2VwYXJhdGUgdGhlIGRpZmZlcmVudCBwYXJhZ3JhcGggb2YgYSBmaWxlIHdpdGggZW1wdHkgbGluZXMuCisJKiBleGFtcGxlcy9NYWtlZmlsZTogVXNlIGl0IHRvIGV4dHJhY3QgdGhlIHdob2xlIGNhbGMrKyBleGFtcGxlLgorCisyMDA1LTA2LTI0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZG9jL2Jpc29uLnRleGluZm8gKEMrKyBQYXJzZXIgSW50ZXJmYWNlKTogVXNlIGRlZmN2IHRvIGRlZmluZQorCWNsYXNzIHR5cGVkZWZzLgorCisyMDA1LTA2LTIyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZG9jL2Jpc29uLnRleGluZm8gKEMrKyBMYW5ndWFnZSBJbnRlcmZhY2UpOiBGaXJzdCBzdGFiLgorCShDKysgUGFyc2Vycyk6IFJlbW92ZS4KKworMjAwNS0wNi0yMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEvbGFscjEuY2MgKHl5bGV4Xyk6IEhvbm9yICVsZXgtcGFyYW0uCisKKzIwMDUtMDYtMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJU3RhcnQgYSBzZXQgb2Ygc2ltcGxlIGV4YW1wbGVzLgorCSogZXhhbXBsZXMvY2FsYysrL01ha2VmaWxlLCBleGFtcGxlcy9jYWxjKysvY2FsYysrLWRyaXZlci5jYywKKwkqIGV4YW1wbGVzL2NhbGMrKy9jYWxjKystZHJpdmVyLmhoLAorCSogZXhhbXBsZXMvY2FsYysrL2NhbGMrKy1wYXJzZXIueXksCisJKiBleGFtcGxlcy9jYWxjKysvY2FsYysrLXNjYW5uZXIubGwsIGV4YW1wbGVzL2NhbGMrKy9jYWxjKysuY2MsCisJKiBleGFtcGxlcy9jYWxjKysvY29tcGlsZSwgZXhhbXBsZXMvY2FsYysrL3Rlc3Q6IE5ldy4KKworMjAwNS0wNi0wOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIGRhdGEveWFjYy5jIChtYWxsb2MsIGZyZWUpIFtkZWZpbmVkIF9fY3BsdXNwbHVzXTogV3JhcCBpbnNpZGUKKwlleHRlcm4gIkMiIHt9LiAgVGhpcyBmaXhlcyBhIHByb2JsZW0gcmVwb3J0ZWQgYnkgUGF1bCBIaWxmaW5nZXIsCisJd2hpY2ggc3RlbXMgZnJvbSB0aGUgMjAwNS0wNS0yNyBwYXRjaC4KKworMjAwNS0wNi0wNiAgUGF1bCBIaWxmaW5nZXIgIDxoaWxmaW5nckB0dWxseS5DUy5CZXJrZWxleS5FRFU+CisKKwkqIGRhdGEvZ2xyLmM6IE1vZGlmeSB0cmVhdG1lbnQgb2YgdW51c2VkIHBhcmFtZXRlcnMgdG8gcGVybWl0IHVzZQorCW9mIGcrKyAod2hpY2ggZG9lc24ndCBhbGxvdyBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkgZm9yIHBhcmFtZXRlcnMpLgorCisyMDA1LTA1LTMwICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCUZpeCBpbmZyaW5nZW1lbnQgb24gdXNlciBuYW1lIHNwYWNlIHJlcG9ydGVkIGJ5IEphbm9zIFpvbHRhbiBTemFiby4KKwkqIGRhdGEveWFjYy5jICh5eXBhcnNlKTogc3RybGVuIC0+IHl5c3RybGVuLgorCisyMDA1LTA1LTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9sYWxyMS5jYyAoXyk6IE5ldy4KKwlUcmFuc2xhdGUgdGhlIHZhcmlvdXMgbWVzc2FnZXMuCisKKzIwMDUtMDUtMjcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJRml4IGluZnJpbmdlbWVudCBvbiB1c2VyIG5hbWUgc3BhY2UgcmVwb3J0ZWQgYnkgQnJ1bm8gSGFpYmxlLgorCSogZGF0YS95YWNjLmMgKFlZU0laRV9UKTogRGVmaW5lIGZpcnN0LCBzbyB0aGF0IGxhdGVyIGRlY2xzIGNhbiB1c2UgaXQuCisJUHJlZmVyIEdDQydzIF9fU0laRV9UWVBFX18gaWYgYXZhaWxhYmxlLCBzbyB0aGF0IHdlIGRvbid0IGluZnJpbmdlIG9uCisJdGhlIHVzZXIncyBuYW1lIHNwYWNlLgorCShhbGxvY2EpOiBJbmNsdWRlIDxzdGRsaWIuaD4gdG8gZ2V0IGl0LCBpZiBpdCdzIG5vdCBidWlsdCBpbi4KKwkoWVlNQUxMT0MsIFlZRlJFRSk6IERlZmluZSBvbmx5IGlmIG5lZWRlZC4KKwkobWFsbG9jLCBmcmVlKTogRGVjbGFyZSwgYnV0IG9ubHkgaWYgbmVlZGVkLCBhcyB0aGlzIGluZnJpbmdlcyBvbgorCXRoZSB1c2VyIG5hbWUgc3BhY2UuCisKKzIwMDUtMDUtMjUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJRml4IEJlT1MsIEZyZWVCU0QsIE1hY09TIHBvcnRpbmcgcHJvYmxlbXMgcmVwb3J0ZWQgYnkgQnJ1bm8gSGFpYmxlLgorCSogbGliL2JpdHNldC5jIChiaXRzZXRfcHJpbnQpOiBEb24ndCBhc3N1bWUgc2l6ZV90IGNhbiBiZSBwcmludGVkCisJd2l0aCAlZCBmb3JtYXQuCisJKiBsaWIvZWJpdHNldC5jIChtaW4sIG1heCk6IFVuZGVmIGJlZm9yZSBkZWZpbmluZy4KKwkqIGxpYi92Yml0c2V0LmMgKG1pbiwgbWF4KTogTGlrZXdpc2UuCisJKiBsaWIvc3VicGlwZS5jIChjcmVhdGVfc3VicGlwZSk6IFNhdmUgbG9jYWwgdmFyaWFibGVzIGluIGNhc2UKKwl2Zm9yayBjbG9iYmVycyB0aGVtLgorCisyMDA1LTA1LTI0ICBCcnVubyBIYWlibGUgIDxicnVub0BjbGlzcC5vcmc+CisKKwkqIHRlc3RzL3N5bmNsaW5lcy5hdCAoQVRfU1lOQ0xJTkVTX0NPTVBJTEUpOiBBZGQgc3VwcG9ydCBmb3IgdGhlCisJZXJyb3IgbWVzc2FnZSBzeW50YXggdXNlZCBieSBnY2MtNC4wLgorCisyMDA1LTA1LTIzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogUkVBRE1FOiBNZW50aW9uIG00IDEuNC4zLiAgUmVtb3ZlIG9ic29sZXRlIGFkdmljZSBhYm91dAorCVN1biBGb3J0ZSBEZXZlbG9wZXIgNiB1cGRhdGUgMiwgVk1TLCBhbmQgTVMtRE9TLgorCisJKiBib290c3RyYXA6IFJlbW92ZSB3b3JrYXJvdW5kIGZvciBwcm9ibGVtIEkgZW5jb3VudGVyZWQgd2l0aAorCWdldHRleHQgMC4xNC4xOyBpdCBzZWVtcyB0byBiZSBmaXhlZCBub3cuCisKKzIwMDUtMDUtMjIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBORVdTOiBWZXJzaW9uIDIuMGEuCisKKwkqIHNyYy9maWxlcy5jOiBJbmNsdWRlICJzdGRpby1zYWZlci5oIjsgdGhpcyBmaXhlcyBhIHR5cG8gaW4KKwl0aGUgcHJldmlvdXMgY2hhbmdlLgorCisJVmFyaW91cyBtYWludGFpbmVyIGNsZWFudXBzLgorCSogLmN2c2lnbm9yZTogQWRkIGEuZXhlLCBhLm91dCwgYi5vdXQsLCBjb25mWzAtOV0qLCBjb25mZGVmcyosCisJY29uZnRlc3QqLCBmb3IgYmVuZWZpdCBvZiBDVlMgY29tbWFuZHMgcnVuIGF0IHRoZSBzYW1lIHRpbWUgYXMKKwkiY29uZmlndXJlIi4gIEFkZCBidWlsZC1hdXgsIHNpbmNlICJib290c3RyYXAiIG5vdyBjcmVhdGVzIGl0IGFuZAorCWl0cyBzdWJmaWxlcy4KKwkqIE1ha2VmaWxlLmNmZyAobW92ZV9pZl9jaGFuZ2UpOiBSZW1vdmUuCisJKiBNYWtlZmlsZS5tYWludDogUmVtb3ZlIHRoZSB1cGRhdGUgc3R1ZmY7IHdlIG5vdyB1c2UgImJvb3RzdHJhcCIuCisJKGZ0cC1nbnUsIHd3dy1nbnUsIG1vdmVfaWZfY2hhbmdlLCBsb2NhbF91cGRhdGVzLCB1cGRhdGUpOgorCShwb19yZXBvLCBkby1wby11cGRhdGUsIHBvLXVwZGF0ZSwgd2dldF9maWxlcywgZ2V0LXRhcmdldHMpOgorCShjb25maWcuZ3Vlc3MtdXJsX3ByZWZpeCwgY29uZmlnLnN1Yi11cmxfcHJlZml4KToKKwkoYW5zaTJrbnIuYy11cmxfcHJlZml4LCB0ZXhpbmZvLnRleC11cmxfcHJlZml4KToKKwkoc3RhbmRhcmRzLnRleGktdXJsX3ByZWZpeCwgbWFrZS1zdGRzLnRleGktdXJsX3ByZWZpeCwgdGFnZXQsIHVybCk6CisJKCQoZ2V0LXRhcmdldHMpLCBjdnMtZmlsZXMsIGF1dG9tYWtlX3JlcG8sIHdnZXQtdXBkYXRlLCBjdnMtdXBkYXRlKToKKwlSZW1vdmUuCisJKiBjb25maWd1cmUuYWMgKEFDX0NPTkZJR19BVVhfRElSKTogQ2hhbmdlIGZyb20gY29uZmlnIHRvIGJ1aWxkLWF1eDsKKwl0aGlzIGlzIG5vdyB0aGUgcmVjb21tZW5kZWQgbmFtZS4KKwkqIGNvbmZpZy8uY3ZzaWdub3JlOiBSZW1vdmUgY29uZmlnLmd1ZXNzLCBjb25maWcucnBhdGgsIGNvbmZpZy5zdWIsCisJZGVwY29tcCwgaW5zdGFsbC1zaCwgbWRhdGUtc2gsIG1pc3NpbmcsIG1raW5zdGFsbGRpcnMsIHRleGluZm8udGV4LAorCXlsd3JhcC4gIFRoZXNlIGZpbGVzIG5vdyBnbyBpbnRvIGJ1aWxkLWF1eC4KKwkqIGNvbmZpZy9tb3ZlLWlmLWNoYW5nZTogUmVtb3ZlLgorCSogY29uZmlnL3ByZXYtdmVyc2lvbi50eHQ6IEJ1bXAgZnJvbSAxLjc1IHRvIDIuMC4KKworCSogYm9vdHN0cmFwOiBBZGQgc3RkaW8tc2FmZXIsIHVuaXN0ZC1zYWZlciBtb2R1bGVzLgorCVJlbW92ZSBtNC9nbGliYzIubTQgKGludHJvZHVjZWQgYnkgbGF0ZXN0IGdudWxpYiwgYnV0CisJd2UgZG9uJ3QgbmVlZCBpdCkuCisJKiBsaWIvLmN2c2lnbm9yZTogQWRkIGR1cC1zYWZlci5jLCBmZC1zYWZlci5jLAorCWZvcGVuLXNhZmVyLmMsIHN0ZGlvLXNhZmVyLmgsIHVuaXN0ZC1zYWZlci5oLgorCSogbGliL3N1YnBpcGUuYzogSW5jbHVkZSAidW5pc3RkLXNhZmVyLmgiLgorCShjcmVhdGVfc3VicGlwZSk6IE1ha2Ugc3VyZSBhbGwgdGhlIG5ld2x5LWNyZWF0ZWQKKwlmaWxlIGRlc2NyaXB0b3JzIGFyZSA+IDIsIHNvIHRoYXQgZGlhZ25vc3RpY3MgZG9uJ3QKKwlnZXQgc2VudCBkb3duIHRoZW0gKHdoaWNoIG1pZ2h0IGNhdXNlIEJpc29uIHRvIGhhbmcsIGluIHRoZW9yeSkuCisJKiBtNC8uY3ZzaWdub3JlOiBBZGQgc3RkaW8tc2FmZXIubTQsIHVuaXN0ZC1zYWZlci5tNC4KKwkqIHNyYy9maWxlcy5jICh4Zm9wZW4pOiBVc2UgZm9wZW5fc2FmZXIsIG5vdCBmb3Blbi4KKworCSogZGF0YS9sYWxyMS5jYyAoeXk6Ol1iNF9wYXJzZXJfY2xhc3NfbmFtZVs6OnBhcnNlKTogUG9ydAorCXllc3RlcmRheSdzIHlhY2MuYyBmaXguCisKKzIwMDUtMDUtMjEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBkYXRhL2dsci5jLCBkYXRhL2xhbHIxLmNjOiBVcGRhdGUgY29weXJpZ2h0IGRhdGUuCisKKwlGaXggYSBkZXN0cnVjdG9yIGJ1ZyByZXBvcnRlZCBieSBXb2xmZ2FuZyBTcHJhdWwgaW4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDA1LTA1L21zZzAwMDQyLmh0bWw+LgorCSogZGF0YS95YWNjLmMgKHl5YWJvcnRsYWIpOiBEb24ndCBjYWxsIGRlc3RydWN0b3IsIGFuZAorCWRvbid0IHNldCB5eWNoYXIgdG8gRU1QVFkuCisJKHl5b3ZlcmZsb3dsYWIpOiBEb24ndCBjYWxsIGRlc3RydWN0b3IuCisJKHl5cmV0dXJuKTogQ2FsbCBkZXN0cnVjdG9yLCBpZiB5eWNoYXIgaXMgbmVpdGhlciBZWUVPRiBub3IgWVlFTVBUWS4KKwkqIHRlc3RzL2NhbGMuYXQgKEFUX0NIRUNLX0NBTEMpOiBFeHBlY3Qgb25lIGZld2VyIG91dHB1dCBsaW5lcywKKwlzaW5jZSB3ZSBubyBsb25nZXIgb3V0cHV0IHRoZSBtZXNzYWdlICJkaXNjYXJkaW5nIGxvb2thaGVhZCB0b2tlbgorCWVuZCBvZiBpbnB1dCAoKSIuCisKKzIwMDUtMDUtMjAgIFBhdWwgSGlsZmluZ2VyICA8aGlsZmluZ3JAQ1MuQmVya2VsZXkuRURVPgorCisJKiBkYXRhL2dsci5jIChZWV9TWU1CT0xfUFJJTlQpOiBEb24ndCBwcmludCBuZXdsaW5lIGF0IGVuZCB0bworCWZpeCBhIHNtYWxsIGdsaXRjaCBpbiBkZWJ1Z2dpbmcgb3V0cHV0LgorCSh5eXByb2Nlc3NPbmVTdGFjaywgeXlyZWNvdmVyU3ludGF4RXJyb3IsIHl5cGFyc2UpOiBQcmludCBuZXdsaW5lCisJYWZ0ZXIgWVlfU1lNQk9MX1BSSU5UIHdoZXJlIG5lZWRlZC4KKworCShzdHJ1Y3QgeXlHTFJTdGF0ZSk6IEFkZCBzb21lIGNvbW1lbnRzLgorCShzdHJ1Y3QgeXlTZW1hbnRpY09wdGlvbik6IEFkZCBzb21lIGNvbW1lbnRzLgorCSh1bmlvbiB5eUdMUlN0YWNrSXRlbSk6IEFkZCBjb21tZW50LgorCisJKHl5bWVyZ2VPcHRpb25TZXRzKTogQ29ycmVjdCB0aGlzIHRvIHByb3Blcmx5IHBlcmZvcm0gdGhlIHVuaW9uLAorCWF2b2lkaW5nIGluZmluaXRlIHJlcG9ydGVkIGJ5IE1pY2hhZWwgUm9zaWVuLgorCVVwZGF0ZSBjb21tZW50LgorCisJKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdDogQWRkIHRlc3QgZm9yIEdMUiBtZXJnaW5nIGVycm9yIHJlcG9ydGVkCisJYnkgTS4gUm9zaWVuLgorCisyMDA1LTA1LTEzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogQ09QWUlORywgQ2hhbmdlTG9nLCBHTlVtYWtlZmlsZSwgSEFDS0lORywgTWFrZWZpbGUuYW0sCisJTWFrZWZpbGUuY2ZnLCBNYWtlZmlsZS5tYWludCwgTkVXUywgUkVBRE1FLCBSRUFETUUtYWxwaGEsCisJUkVBRE1FLWN2cywgVE9ETywgYm9vdHN0cmFwLCBjb25maWd1cmUuYWMsIGRhdGEvTWFrZWZpbGUuYW0sCisJZGF0YS9SRUFETUUsIGRhdGEvYy5tNCwgZGF0YS9nbHIuYywgZGF0YS9sYWxyMS5jYywgZGF0YS95YWNjLmMsCisJZGF0YS9tNHN1Z2FyL200c3VnYXIubTQsIGRvYy9NYWtlZmlsZS5hbSwgZG9jL2Jpc29uLnRleGluZm8sCisJZG9jL2ZkbC50ZXhpLCBkb2MvZ3BsLnRleGksIGRvYy9yZWZjYXJkLnRleCwgbGliL01ha2VmaWxlLmFtLAorCWxpYi9hYml0c2V0LmMsIGxpYi9hYml0c2V0LmgsIGxpYi9iYml0c2V0LmgsIGxpYi9iaXRzZXQuYywKKwlsaWIvYml0c2V0LmgsIGxpYi9iaXRzZXRfc3RhdHMuYywgbGliL2JpdHNldF9zdGF0cy5oLAorCWxpYi9iaXRzZXR2LXByaW50LmMsIGxpYi9iaXRzZXR2LXByaW50LmgsIGxpYi9iaXRzZXR2LmMsCisJbGliL2JpdHNldHYuaCwgbGliL2ViaXRzZXQuYywgbGliL2ViaXRzZXQuaCwgbGliL2dldC1lcnJuby5jLAorCWxpYi9nZXQtZXJybm8uaCwgbGliL2xiaXRzZXQuYywgbGliL2xiaXRzZXQuaCwgbGliL2xpYmliZXJ0eS5oLAorCWxpYi9tYWluLmMsIGxpYi9zdWJwaXBlLmMsIGxpYi9zdWJwaXBlLmgsIGxpYi90aW1ldmFyLmMsCisJbGliL3RpbWV2YXIuZGVmLCBsaWIvdGltZXZhci5oLCBsaWIvdmJpdHNldC5jLCBsaWIvdmJpdHNldC5oLAorCWxpYi95eWVycm9yLmMsIG00L2N4eC5tNCwgbTQvbTQubTQsIG00L3N1YnBpcGUubTQsIG00L3RpbWV2YXIubTQsCisJbTQvd2FybmluZy5tNCwgc3JjL0xSMC5jLCBzcmMvTFIwLmgsIHNyYy9NYWtlZmlsZS5hbSwgc3JjL2Fzc29jLmMsCisJc3JjL2Fzc29jLmgsIHNyYy9jbG9zdXJlLmMsIHNyYy9jbG9zdXJlLmgsIHNyYy9jb21wbGFpbi5jLAorCXNyYy9jb21wbGFpbi5oLCBzcmMvY29uZmxpY3RzLmMsIHNyYy9jb25mbGljdHMuaCwgc3JjL2Rlcml2ZXMuYywKKwlzcmMvZGVyaXZlcy5oLCBzcmMvZmlsZXMuYywgc3JjL2ZpbGVzLmgsIHNyYy9nZXRhcmdzLmMsCisJc3JjL2dldGFyZ3MuaCwgc3JjL2dyYW0uYywgc3JjL2dyYW0uaCwgc3JjL2xhbHIuYywgc3JjL2xhbHIuaCwKKwlzcmMvbG9jYXRpb24uYywgc3JjL2xvY2F0aW9uLmgsIHNyYy9tYWluLmMsIHNyYy9tdXNjbGVfdGFiLmMsCisJc3JjL211c2NsZV90YWIuaCwgc3JjL251bGxhYmxlLmMsIHNyYy9udWxsYWJsZS5oLCBzcmMvb3V0cHV0LmMsCisJc3JjL291dHB1dC5oLCBzcmMvcGFyc2UtZ3JhbS5jLCBzcmMvcGFyc2UtZ3JhbS5oLAorCXNyYy9wYXJzZS1ncmFtLnksIHNyYy9wcmludC5jLCBzcmMvcHJpbnQuaCwgc3JjL3ByaW50X2dyYXBoLmMsCisJc3JjL3ByaW50X2dyYXBoLmgsIHNyYy9yZWFkZXIuYywgc3JjL3JlYWRlci5oLCBzcmMvcmVkdWNlLmMsCisJc3JjL3JlZHVjZS5oLCBzcmMvcmVsYXRpb24uYywgc3JjL3JlbGF0aW9uLmgsIHNyYy9zY2FuLWdyYW0ubCwKKwlzcmMvc2Nhbi1za2VsLmwsIHNyYy9zdGF0ZS5jLCBzcmMvc3RhdGUuaCwgc3JjL3N5bWxpc3QuYywKKwlzcmMvc3ltbGlzdC5oLCBzcmMvc3ltdGFiLmMsIHNyYy9zeW10YWIuaCwgc3JjL3N5c3RlbS5oLAorCXNyYy90YWJsZXMuYywgc3JjL3RhYmxlcy5oLCBzcmMvdW5pcXN0ci5jLCBzcmMvdW5pcXN0ci5oLAorCXNyYy92Y2cuYywgc3JjL3ZjZy5oLCBzcmMvdmNnX2RlZmF1bHRzLmgsIHRlc3RzL01ha2VmaWxlLmFtLAorCXRlc3RzL2FjdGlvbnMuYXQsIHRlc3RzL2MrKy5hdCwgdGVzdHMvY2FsYy5hdCwgdGVzdHMvY29uZmxpY3RzLmF0LAorCXRlc3RzL2N4eC10eXBlLmF0LCB0ZXN0cy9leGlzdGluZy5hdCwgdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQsCisJdGVzdHMvaGVhZGVycy5hdCwgdGVzdHMvaW5wdXQuYXQsIHRlc3RzL2xvY2FsLmF0LCB0ZXN0cy9vdXRwdXQuYXQsCisJdGVzdHMvcmVkdWNlLmF0LCB0ZXN0cy9yZWdyZXNzaW9uLmF0LCB0ZXN0cy9zZXRzLmF0LAorCXRlc3RzL3N5bmNsaW5lcy5hdCwgdGVzdHMvdGVzdHN1aXRlLmF0LCB0ZXN0cy90b3J0dXJlLmF0OgorCVVwZGF0ZSBGU0YgcG9zdGFsIG1haWwgYWRkcmVzcy4KKworMjAwNS0wNS0xMSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIHRlc3RzL2xvY2FsLmF0IChBVF9DT01QSUxFX0NYWCk6IFRyZWF0IExERkxBR1MgbGlrZSBBVF9DT01QSUxFIGRvZXMuCisJUHJvYmxlbSByZXBvcnRlZCBieSBSYWxmIE1lbnplbC4KKworMjAwNS0wNS0wMSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIHRlc3RzL2FjdGlvbnMuYXQ6IFRlc3QgdGhhdCBzdGFjayBvdmVyZmxvdyBpbnZva2VzIGRlc3RydWN0b3JzLgorCUZyb20gTWFyY3VzIEhvbGxhbmQtTW9yaXR6LgorCSogZGF0YS95YWNjLmMgKHl5ZXJybGFiKTogTW92ZSB0aGUgY29kZSB0aGF0IGRlc3Ryb3lzIHRoZSBzdGFjaworCWZyb20gaGVyZS4uLi4KKwkoeXlyZXR1cm4pOiB0byBoZXJlLiAgVGhhdCB3YXksIGRlc3RydWN0b3JzIGFyZSBjYWxsZWQgcHJvcGVybHkKKwlldmVuIGlmIHRoZSBzdGFjayBvdmVyZmxvd3MsIG9yIHRoZSB1c2VyIGNhbGxzIFlZQUNDRVBUIG9yCisJWVlBQk9SVC4gIFN0YWNrLW92ZXJmbG93IHByb2JsZW0gcmVwb3J0ZWQgYnkgTWFyY3VzIEhvbGxhbmQtTW9yaXR6LgorCSh5eW92ZXJmbG93bGFiKTogRGVzdHJveSB0aGUgbG9va2FoZWFkLgorCisyMDA1LTA0LTI0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogZGF0YS95YWNjLmMgKFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSk6IEFkZCBtb3JlLWRlc2NyaXB0aXZlIGNvbW1lbnQuCisKKzIwMDUtMDQtMTcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBORVdTOiBCaXNvbi1nZW5lcmF0ZWQgQyBwYXJzZXJzIG5vIGxvbmdlciBxdW90ZSBsaXRlcmFsIHN0cmluZ3MKKwlhc3NvY2lhdGVkIHdpdGggdG9rZW5zLgorCSogc3JjL291dHB1dC5jIChwcmVwYXJlX3N5bWJvbHMpOiBEb24ndCBlc2NhcGUgc3RyaW5ncywKKwlzaW5jZSB1c2VycyBkb24ndCB3YW50IHRvIHNlZSBDIGVzY2FwZXMuCisJKiB0ZXN0cy9jYWxjLmF0IChBVF9DSEVDS19DQUxDKTogQWRqdXN0IHRvIGxhY2sgb2YgcXVvdGVzCisJaW4gZGlhZ25vc3RpY3MuCisJKiB0ZXN0cy9pbnB1dC5hdCAoVG9ydHVyaW5nIHRoZSBTY2FubmVyKTogTGlrZXdpc2UuCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChUb2tlbiBkZWZpbml0aW9ucywgV2ViMmMgQWN0aW9ucyk6IExpa2V3aXNlLgorCisyMDA1LTA0LTE2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogdGVzdHMvdG9ydHVyZS5hdCAoQVRfSU5DUkVBU0VfREFUQV9TSVpFKTogU2tpcCB0aGUgdGVzdCBpZgorCXRoZSBkYXRhIHNpemUgaXMga25vd24gdG8gYmUgdG9vIHNtYWxsIGFuZCB3ZSBjYW4ndCBpbmNyZWFzZSBpdC4KKwlUaGlzIHdvcmtzIGFyb3VuZCBhbiBIUC1VWCAxMS4wMCBnbGl0Y2ggcmVwb3J0ZWQgYnkgQW5kcmV3IEJlbmhhbS4KKworMjAwNS0wNC0xNSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIHNyYy9wYXJzZS1ncmFtLnk6IEluY2x1ZGUgcXVvdGVhcmcuaC4KKwkoc3RyaW5nX2FzX2lkKTogUXVvdGUgJDEgYmVmb3JlIHVzaW5nIGl0IGFzIGEga2V5LCBzaW5jZSB0aGUKKwlsZXhlciBubyBsb25nZXIgcXVvdGVzIGl0IGZvciB1cy4KKwkoc3RyaW5nX2NvbnRlbnQpOiBEb24ndCBzdHJpcCBxdW90ZXMsIHNpbmNlIGxleGVyIG5vIGxvbmdlcgorCXF1b3RlcyBpdCBmb3IgdXMuCisJKiBzcmMvc2Nhbi1ncmFtLmw6IEluY2x1ZGUgcXVvdGVhcmcuaC4KKwkoIlwiIik6IE9taXQgcXVvdGUuCisJKCInIjxTQ19FU0NBUEVEX0NIQVJBQ1RFUj4pOiBRdW90ZSBzeW1ib2wgYmVmb3JlIHVzaW5nIGl0IGFzCisJYSBrZXksIHNpbmNlIHRoZSByZXN0IG9mIHRoZSBsZXhlciBkb2Vzbid0IHF1b3RlIGl0LgorCSogc3JjL3N5bXRhYi5jIChzeW1ib2xfZ2V0KTogRG9uJ3QgcXVvdGUgc3ltYm9sOyBjYWxsZXIgZG9lcyBpdCBub3cuCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChUb2tlbiBkZWZpbml0aW9ucyk6IENoZWNrIGZvciBiYWNrc2xhc2hlcworCWluIHRva2VuIHN0cmluZ3MuCisKKwkqIGRhdGEveWFjYy5jIChZWVNUQUNLX0FMTE9DX01BWElNVU0pOiBOZXcgbWFjcm8uCisJKFlZU0laRV9UKTogRGVmaW5lIHRvIHVuc2lnbmVkIGxvbmcgaW50IHdoZW4gdXNpbmcgYW4gb2xkZXIgY29tcGlsZXIuCisJKHl5cGFyc2UpOiBSZXZhbXAgY29kZSB0byBnZW5lcmF0ZSBsb25nIHN5bnRheCBlcnJvciBtZXNzYWdlLCB0bworCW1ha2UgaXQgZWFzaWVyIHRvIHRyYW5zbGF0ZSwgYW5kIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggYXJpdGhtZXRpYworCW92ZXJmbG93LiAgQ2hhbmdlICJ2aXJ0dWFsIG1lbW9yeSIgdG8gIm1lbW9yeSIgaW4gZGlhZ25vc3RpYywgc2luY2UKKwl3ZSBkb24ndCBrbm93IHdoZXRoZXIgdGhlIG1lbW9yeSBpcyB2aXJ0dWFsLgorCisyMDA1LTA0LTEzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogTkVXUzogQmlzb24tZ2VuZXJhdGVkIEMgcGFyc2VycyBub3cgdXNlIHRoZSBfIG1hY3JvIHRvCisJdHJhbnNsYXRlIHN0cmluZ3MuCisJKiBkYXRhL3lhY2MuYyAoXykgWyFkZWZpbmVkIF9dOiBOZXcgbWFjcm8uCisJQWxsIEVuZ2xpc2ggc3RyaW5ncyB3cmFwcGVkIGluc2lkZSB0aGlzIG1hY3JvLgorCSogZG9jL2Jpc29uLnRleGluZm8gKEJpc29uIFBhcnNlcik6IERvY3VtZW50IF8uCisJKiBwby9QT1RGSUxFUy5pbjogSW5jbHVkZSBzcmMvcGFyc2UtZ3JhbS5jLCBzaW5jZSBpdCBub3cKKwlpbmNsdWRlcyB0cmFuc2xhdGVhYmxlIHN0cmluZ3MgdGhhdCBwYXJzZS1ncmFtLnkgZG9lc24ndC4KKworMjAwNS0wNC0xMiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIHNyYy9zeW10YWIuYyAoc3ltYm9sX21ha2VfYWxpYXMpOiBDYWxsIHN5bWJvbF90eXBlX3NldCwKKwlyZXZlcnRpbmcgdGhlIDIwMDQtMTAtMTEgY2hhbmdlIHRvIHRoaXMgZnVuY3Rpb24uCisJKHN5bWJvbF9jaGVja19hbGlhc19jb25zaXN0ZW5jeSk6IERvbid0IGNhbGwgc3ltYm9sX3R5cGVfc2V0CisJaWYgdGhlIHR5cGUgbmFtZSBpcyBhbHJlYWR5IGNvcnJlY3QuCisJKiB0ZXN0cy9pbnB1dC5hdCAoVHlwZWQgc3ltYm9sIGFsaWFzZXMpOiBOZXcgdGVzdCwgZnJvbSBUaW0gVmFuIEhvbGRlci4KKworMjAwNS0wMy0yNSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFRva2VuIGRlZmluaXRpb25zKTogRG9uJ3QgdXNlIGEgdG9rZW4gbmFtZWQKKwljLCBhcyB0aGF0IGdlbmVyYXRlcyBhICIjZGVmaW5lIGMgLi4uIiB0aGF0IHJ1bnMgYWZvdWwgb2YgYnVnZ3kKKwlzdGRsaWIuaCB0aGF0IHVzZXMgdGhlIGlkZW50aWZpZXIgYyBhcyBhIG1lbWJlciBvZiBzdHJ1Y3QKKwlkcmFuZDQ4X2RhdGEuICBQcm9ibGVtIHJlcG9ydGVkIGJ5IEhvcnN0IFdlbnRlLgorCisyMDA1LTAzLTIxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogYm9vdHN0cmFwOiBDaGFuZ2UgdHJhbnNsYXRpb24gVVJMIGZyb20KKwlodHRwOi8vd3d3Mi5pcm8udW1vbnRyZWFsLmNhL35nbnV0cmEvcG8vbWFpbnQvYmlzb24vIHRvCisJaHR0cDovL3d3dy5pcm8udW1vbnRyZWFsLmNhL3RyYW5zbGF0aW9uL21haW50L2Jpc29uLyB0byBhdm9pZAorCXJlZGlyZWN0aW9uIGdsaXRjaGVzLiAgUHJvYmxlbSByZXBvcnRlZCBieSB0d2xldm9AeHM0YWxsLm5sLgorCisyMDA1LTAzLTIwICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogdGVzdHMvbG9jYWwuYXQgKEFUX0NPTVBJTEUsIEFUX0NPTVBJTEVfQ1hYKTogRG9uJ3QgcHV0IG9wdGlvbnMKKwlhZnRlciBvcGVyYW5kczsgUE9TSVggc2F5cyB0aGlzIGlzbid0IHBvcnRhYmxlIGZvciB0aGUgYzk5IGNvbW1hbmQuCisKKzIwMDUtMDMtMTggIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdCAoZ2xyLXJlZ3IyYS55KTogVHJ5IHRvIGR1bXAgY29yZQorCWltbWVkaWF0ZWx5IGlmIGEgZGF0YSBvdmVycnVuIGhhcyBvY2N1cnJlZDsgdGhpcyBtYXkgaGVscCB1cyB0cmFjaworCWRvd24gd2hhdCBtYXkgYmUgYSBzcHVyaW91cyBmYWlsdXJlIG9uIE1hY09TLgorCisyMDA1LTAzLTE3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCVJlc3BvbmQgdG8gcHJvYmxlbXMgcmVwb3J0ZWQgYnkgdHdsZXZvQHhzNGFsbC5ubC4KKworCSogYm9vdHN0cmFwOiBVc2UgInRyYXAgLSAwIiByYXRoZXIgdGhhbiB0aGUgdW5wb3J0YWJsZSAidHJhcCAwIi4KKworCSogc3JjL3ZjZy5oOiBDb21tZW50IGZpeC4KKwkqIHNyYy92Y2dfZGVmYXVsdHMuaDogUGFyZW50aGVzaXplIG1hY3JvIGJvZGllcyB0byBtYWtlIHRoZW0gc2FmZS4KKwkoR19DTUFYKTogQ2hhbmdlIHRvIC0xIGluc3RlYWQgb2YgSU5UX01BWC4KKworCSogZGF0YS95YWNjLmMgKHl5cGFyc2UpOiBPbWl0IHNwYWNlcyBiZWZvcmUgI2xpbmUuCisKKzIwMDUtMDMtMTUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBzcmMvdGFibGVzLmMgKHN0YXRlX251bWJlcl90b192ZWN0b3JfbnVtYmVyKTogUHV0IGl0IGluc2lkZSBhbgorCSIjaWYgMCIsIHNpbmNlIGl0J3Mgbm90IGN1cnJlbnRseSB1c2VkLiAgUHJvYmxlbSByZXBvcnRlZCBieQorCVJvbGFuZCBNY0dyYXRoLgorCisyMDA1LTAzLTA2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogc3JjL291dHB1dC5jIChlc2NhcGVkX291dHB1dCk6IFJlbmFtZWQgZnJvbQorCWVzY2FwZWRfZmlsZV9uYW1lX291dHB1dCwgc2luY2Ugd2Ugbm93IHVzZSBpdCBmb3Igc3ltYm9sIHRhZ3MgYXMKKwl3ZWxsLiAgQWxsIHVzZXMgY2hhbmdlZC4KKwkoc3ltYm9sX2Rlc3RydWN0b3JzX291dHB1dCwgc3ltYm9sX3ByaW50ZXJzX291dHB1dCk6CisJRXNjYXBlIHN5bWJvbCB0YWdzIHRvby4KKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IE1hdHlhcyBGb3JzdG5lciBpbgorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDUtMDMvbXNnMDAwMDkuaHRtbD4uCisKKwkqIHNyYy9tdXNjbGVfdGFiLmMgKG11c2NsZV9jb2RlX2dyb3cpOiBEb24ndCBxdW90ZSBudW1iZXJzOyBpdCdzCisJbm90IG5lZWRlZC4KKwkqIHNyYy9vdXRwdXQuYyAodXNlcl9hY3Rpb25zX291dHB1dCwgdG9rZW5fZGVmaW5pdGlvbnNfb3V0cHV0LAorCXN5bWJvbF9kZXN0cnVjdG9yc19vdXRwdXQsIHN5bWJvbF9wcmludGVyc19vdXRwdXQpOiBMaWtld2lzZS4KKwkqIHNyYy9yZWFkZXIuYyAocHJvbG9ndWVfYXVnbWVudCk6IExpa2V3aXNlLgorCSogc3JjL3NjYW4tZ3JhbS5sIChoYW5kbGVfYWN0aW9uX2RvbGxhciwgaGFuZGxlX2FjdGlvbl9hdCk6IExpa2V3aXNlLgorCisJKiBzcmMvdmNnLmMgKG91dHB1dF9lZGdlKTogRG9uJ3QgcXVvdGUgbGluZXN0eWxlIGFyZy4KKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IHR3bGV2b0B4czRhbGwubmwuCisKKzIwMDUtMDItMjggIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBkb2MvYmlzb24udGV4aW5mbyAoU2VtYW50aWMgVG9rZW5zKTogRml4IHNjb3BpbmcgcHJvYmxlbSBpbgorCWV4YW1wbGUsIHJlcG9ydGVkIGJ5IERlcmVrIE0gSm9uZXMuICBBbHNvLCBtYWtlIHRoZSBleGFtcGxlIGV2ZW4KKwltb3JlIG91dHJhZ2VvdXMsIHRvIGJldHRlciBpbGx1c3RyYXRlIGhvdyBiYWQgdGhlIHByb2JsZW0gaXMuCisKKzIwMDUtMDItMjQgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBkb2MvYmlzb24udGV4aW5mbyAoTWZjYWxjIFN5bXRhYik6IENvcnJlY3QgdGhlIHByb3RvdHlwZSBmb3IKKwlwdXRzeW0uICBUeXBvIHJlcG9ydGVkIGJ5IFNlYmFzdGlhbiBQaXBpbmcuCisKKzIwMDUtMDItMjMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBkb2MvYmlzb24udGV4aW5mbyAoTGFuZ3VhZ2UgYW5kIEdyYW1tYXIpOiBzb21lIC0+IHNhbWUKKwkoRXBpbG9ndWUpOiBpbnQgaGUgLT4gaW4gdGhlCisJVHlwb3MgcmVwb3J0ZWQgYnkgU2ViYXN0aWFuIFBpcGluZyB2aWEgSnVzdGluIFBlbmNlLgorCisyMDA1LTAyLTA3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogdGVzdHMvZ2xyLXJlZ3Jlc3Npb24uYXQgKEltcHJvcGVyIGhhbmRsaW5nIG9mIGVtYmVkZGVkIGFjdGlvbnMKKwlhbmQgZG9sbGFyKC1OKSBpbiBHTFIgcGFyc2Vycyk6IFJlbmFtZWQgZnJvbSAiSW1wcm9wZXIgaGFuZGxpbmcgb2YKKwllbWJlZGRlZCBhY3Rpb25zIGFuZCAkLU4gaW4gR0xSIHBhcnNlcnMiLCB3b3JrIGFyb3VuZCBhbiBBdXRvY29uZiBidWcKKwl3aXRoIGRvbGxhciBzaWducyBpbiB0ZXN0IG5hbWVzLgorCSogdGVzdHMvaW5wdXQuYXQgKEludmFsaWQgZG9sbGFyLW4pOiBSZW5hbWVkIGZyb20gIkludmFsaWQgXCRuIiwKKwlmb3IgYSBzaW1pbGFyIHJlYXNvbi4KKworMjAwNS0wMS0yOCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIHNyYy92Y2cuYyAob3V0cHV0X2dyYXBoKTogR19WSUVXIC0+IG5vcm1hbF92aWV3IGluIGNhc2Ugc29tZW9uZQorCXdhbnRzIHRvIHJlZGVmaW5lIEdfVklFVy4KKworMjAwNS0wMS0yNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIHNyYy92Y2cuYyAoZ2V0X3ZpZXdfc3RyKTogUmVtb3ZlIGNhc2UgZm9yIG5vcm1hbF92aWV3LgorCVByb2JsZW0gcmVwb3J0ZWQgYnkgdHdsZXZvQHhzNGFsbC5ubC4KKworMjAwNS0wMS0yNCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIGNvbmZpZ3VyZS5hYyAoTzBDRkxBR1MsIE8wQ1hYRkxBR1MpOiBGaXggcXVvdGluZyBidWcuCisJUHJvYmxlbSByZXBvcnRlZCBieSB0d2xldm9AeHM0YWxsLm5sLgorCisJKiBkb2MvYmlzb24udGV4aW5mbzogQ2hhbmdlIEBkaXJjYXRlZ29yeSBmcm9tICJHTlUgcHJvZ3JhbW1pbmcKKwl0b29scyIgdG8gIlNvZnR3YXJlIGRldmVsb3BtZW50Ii4gIFJlcXVlc3RlZCBieSBSaWNoYXJkIFN0YWxsbWFuCisJdmlhIEthcmwgQmVycnkuCisKKzIwMDUtMDEtMjMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiB0ZXN0cy9jKysuYXQgKEFUX0NIRUNLX0RPWFlHRU4pOiBEb24ndCB1c2Ugb3B0aW9ucyBhZnRlciBvcGVyYW5kcy4KKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IHR3bGV2b0B4czRhbGwubmwuCisKKzIwMDUtMDEtMjEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBkYXRhL3lhY2MuYyAoWVlDT1BZLCB5eXN0cGNweSwgeXlwYXJzZSk6IFJlbW92ZSAicmVnaXN0ZXIiCisJa2V5d29yZDsgaXQncyBub3QgbmVlZGVkIHdpdGggbW9kZXJuIGNvbXBpbGVycywgYW5kIGl0IGRvZXNuJ3QKKwlhZmZlY3QgY29ycmVjdG5lc3Mgd2l0aCBvbGRlciBjb21waWxlcnMuICBTdWdnZXN0ZWQgYnkKKwl0d2xldm9AeHM0YWxsLm5sLgorCisyMDA1LTAxLTE3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogZGF0YS9nbHIuYyAoeXl1c2VyQWN0aW9uKTogQWRkICJkZWZhdWx0OiBicmVhazsiIGNhc2UgdG8gcGFjaWZ5CisJZ2NjIC1Xc3dpdGNoLWRlZmF1bHQuCisJKiBkYXRhL2xhbHIxLmNjICh5eTo6XWI0X3BhcnNlcl9jbGFzc19uYW1lWzo6cGFyc2UpOiBMaWtld2lzZS4KKwkqIGRhdGEveWFjYy5jICh5eXBhcnNlKTogTGlrZXdpc2UuCisKKzIwMDUtMDEtMTIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBzcmMvc3lzdGVtLmggKE9VVFBVVF9FWFQsIFRBQl9FWFQpOiBEZWZpbmUgb25seSBpZiBub3QgZGVmaW5lZAorCWFscmVhZHkuICBMZXQgY29uZmlnLmggZGVmaW5lIGFueSBub25zdGFuZGFyZCB2YWx1ZXMuCisKKzIwMDUtMDEtMTAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiB0ZXN0cy9jYWxjLmF0IChfQVRfREFUQV9DQUxDX1kpOiBVc2UgYWxhcm0gKDEwMCksIG5vdCBhbGFybSAoMTApLAorCWZvciB0aGUgYmVuZWZpdCBvZiBzbG93ZXIgaG9zdHMuICBQcm9ibGVtIHJlcG9ydGVkIGJ5CisJTmVsc29uIEguIEYuIEJlZWJlLgorCisyMDA1LTAxLTA3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogZGF0YS95YWNjLmMgKHl5cGFyc2UpOiBQYWNpZnkgbm9uLUdDQyBjb21waWxlcnMgYWJvdXQgeXllcnJvcmxhYgorCWJlaW5nIGRlZmluZWQgYW5kIG5vdCB1c2VkLgorCSogZGF0YS9sYWxyMS5jYyAoeXlwYXJzZSk6IExpa2V3aXNlLgorCVVzZSAiaWYgKGZhbHNlKSIgcmF0aGVyIHRoYW4gImlmICgwKSIuCisKKzIwMDUtMDEtMDUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBUT0RPOiBNZW50aW9uIHRoYXQgd2Ugc2hvdWxkIGFsbG93IE5VTCBieXRlcyBpbiB0b2tlbnMuCisKKzIwMDUtMDEtMDIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBzcmMvc2Nhbi1za2VsLmwgKDw8RU9GPj4pOiBEb24ndCBjbG9zZSBzdGFuZGFyZCBvdXRwdXQuCisJUHJvYmxlbSByZXBvcnRlZCBieSBIYW5zIEFiZXJnLgorCisyMDA1LTAxLTAxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogc3JjL2dldGFyZ3MuYyAodmVyc2lvbik6IEhhcHB5IG5ldyB5ZWFyOyB1cGRhdGUgb3ZlcmFsbAorCXByb2dyYW0gY29weXJpZ2h0IGRhdGUgZnJvbSAyMDA0IHRvIDIwMDUuCisKKwkqIHNyYy9zY2FuLXNrZWwubCAoIkBvdXRwdXQgIi4qXG4pOiBEb24ndCBjbG9zZSBzdGFuZGFyZCBvdXRwdXQuCisJUHJvYmxlbSByZXBvcnRlZCBieSBIYW5zIEFiZXJnLgorCSogdGVzdHMvb3V0cHV0LmF0IChBVF9DSEVDS19PVVRQVVQpOiBOZXcgYXJnIFNIRUxMSU8uCisJKE91dHB1dCBmaWxlIG5hbWVzLik6IEFkZCBhIHRlc3QgZm9yIHRoZSBjYXNlIHdoZW4gc3RhbmRhcmQgb3V0cHV0CisJaXMgY2xvc2VkLgorCisyMDA0LTEyLTI2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogZG9jL2Jpc29uLnRleGluZm8gKEBjb3B5aW5nKTogVXBkYXRlIEZETCB2ZXJzaW9uIG51bWJlciB0byAxLjIsCisJdG8gZml4IGFuIG92ZXJzaWdodCBpbiB0aGUgQmlzb24gMi4wIG1hbnVhbC4KKworMjAwNC0xMi0yNSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIE5FV1M6IFZlcnNpb24gMi4wLiAgUmVmb3JtYXQgdGhlIGV4aXN0aW5nIG5ld3MgaXRlbXMgc2luY2UKKwkxLjg3NSwgc28gdGhhdCByZWxhdGVkIGl0ZW1zIGFyZSBncm91cGVkIHRvZ2V0aGVyLgorCSogY29uZmlndXJlLmFjIChBQ19JTklUKTogQnVtcCB2ZXJzaW9uIHRvIDIuMC4KKwkqIHNyYy9wYXJzZS1ncmFtLmMsIHNyYy9wYXJzZS1ncmFtLmg6IFJlZ2VuZXJhdGUgd2l0aCAyLjAuCisKKwkqIHRlc3RzL3RvcnR1cmUuYXQgKEV4cGxvZGluZyB0aGUgU3RhY2sgU2l6ZSB3aXRoIEFsbG9jYSk6IFNldAorCVlZU1RBQ0tfVVNFX0FMTE9DQSB0byAxIGlmIF9fR05VQ19fIG9yIGFsbG9jYSBhcmUgZGVmaW5lZDsKKwlvdGhlcndpc2UsIHdlJ3JlIG5vdCB0ZXN0aW5nIGFsbG9jYS4gIFVuZm9ydHVuYXRlbHkgdGhlcmUncyBubworCXNpbXBsZSB3YXkgdG8gY29uc3VsdCBIQVZFX0FMTE9DQSBoZXJlLgorCisJKiBkYXRhL2xhbHIxLmNjICh5eWRlc3RydWN0Xyk6IFBhY2lmeSB1bnVzZWQgdmFyaWFibGUgd2FybmluZworCWZvciB5eW1zZywgdG9vLgorCisJKiBzcmMvTFIwLmMgKG5ld19pdGVtc2V0cyk6IFVzZSBtZW1zZXQgcmF0aGVyIHRoYW4gemVyb2luZyBieQorCWhhbmQuICBUaGlzIGF2b2lkcyBhIHdhcm5pbmcgYWJvdXQgY29tcGFyaW5nIGludCB0byBzaXplX3Qgd2hlbgorCUdDQyB3YXJuaW5ncyBhcmUgZW5hYmxlZC4KKworMjAwNC0xMi0yMiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIE5FV1M6IEJpc29uLWdlbmVyYXRlZCBwYXJzZXJzIG5vIGxvbmdlciBkZWZhdWx0IHRvIHVzaW5nIHRoZQorCWFsbG9jYSBmdW5jdGlvbiAod2hlbiBhdmFpbGFibGUpIHRvIGV4dGVuZCB0aGUgcGFyc2VyIHN0YWNrLCBkdWUKKwl0byB3aWRlc3ByZWFkIHByb2JsZW1zIGluIHVuY2hlY2tlZCBzdGFjay1vdmVyZmxvdyBkZXRlY3Rpb24uCisJKiBkYXRhL2dsci5jIChZWU1BWERFUFRIKTogUmVtb3ZlIHVuZGVmIHdoZW4gemVyby4gIEl0J3MgdGhlIHVzZXIncworCXJlc3BvbnNpYmlsaXR5IHRvIHNldCBpdCB0byBhIHBvc2l0aXZlIHZhbHVlLiAgVGhpcyBsZXRzIHRoZSB1c2VyCisJc3BlY2lmeSBhIHZhbHVlIHRoYXQgaXMgbm90IGEgcHJlcHJvY2Vzc29yIGNvbnN0YW50LgorCSogZGF0YS95YWNjLmMgKFlZTUFYREVQVEgpOiBMaWtld2lzZS4KKwkoWVlTVEFDS19BTExPQyk6IERlZmluZSBvbmx5IGlmIFlZU1RBQ0tfVVNFX0FMTE9DQSBpcyBub256ZXJvLgorCSogZG9jL2Jpc29uLnRleGluZm8gKFN0YWNrIE92ZXJmbG93KTogWVlNQVhERVBUSCBubyBsb25nZXIgbmVlZHMKKwl0byBiZSBhIGNvbXBpbGUtdGltZSBjb25zdGFudC4gIEhvd2V2ZXIsIGV4cGxhaW4gdGhlIGNvbnN0cmFpbnRzIG9uIGl0LgorCUFsc28sIGV4cGxhaW4gdGhlIGNvbnN0cmFpbnRzIG9uIFlZSU5JVERFUFRILgorCShUYWJsZSBvZiBTeW1ib2xzKTogRXhwbGFpbiB0aGF0IGFsbG9jYSBpcyBubyBsb25nZXIgdGhlIGRlZmF1bHQuCisJRXhwbGFpbiB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5IGlmIHRoZXkgZGVmaW5lIFlZU1RBQ0tfVVNFX0FMTE9DQQorCXRvIDEuCisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChMb2NhdGlvbiBEZWZhdWx0IEFjdGlvbik6IE1lbnRpb24gdGhhdCBuIG11c3QKKwliZSB6ZXJvIHdoZW4gayBpcyB6ZXJvLiAgU3VnZ2VzdGVkIGJ5IEZyYW5rIEhlY2tlbmJhY2guCisKKzIwMDQtMTItMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2xhbHIxLmNjIChwYXJzZXI6OnRva2VuX251bWJlcl90eXBlLCBwYXJzZXI6OnJoc19udW1iZXJfdHlwZSkKKwkocGFyc2VyOjpzdGF0ZV90eXBlLCBwYXJzZXI6OnNlbWFudGljX3R5cGUsIHBhcnNlcjo6bG9jYXRpb25fdHlwZSk6CisJUHJpdmF0ZSwgbm90IHB1YmxpYy4KKwkocGFyc2VyOjpwYXJzZSk6IFJldHVybiBpbnRzLCBub3QgYm9vbC4KKwlSZXR1cm5pbmcgYSBib29sIGludHJvZHVjZXMgYSBwcm9ibGVtOiAwIGNvcnJlc3BvbmRzIHRvIGZhbHNlLCBhbmQKKwlpdCBzZWVtcyB3ZWlyZCB0byByZXR1cm4gZmFsc2Ugb24gc3VjY2Vzcy4gIFJldHVybmluZyB0cnVlIGNoYW5nZXMKKwl0aGUgY29udmVudGlvbnMgZm9yIHl5cGFyc2UuCisJQWx0ZXJuYXRpdmVseSB3ZSBjb3VsZCByZXR1cm4gdm9pZCBhbmQgc2VuZCBhbiBleGNlcHRpb24uCisJVGhlcmUgaXMgbm8gY2xlYXIgY29uc2Vuc3VzICh5ZXQ/KS4KKwkoc3RhdGVfc3RhY2ssIHNlbWFudGljX3N0YWNrLCBsb2NhdGlvbl9zdGFjayk6IFJlbmFtZSBhcy4uLgorCShzdGF0ZV9zdGFja190eXBlLCBzZW1hbnRpY19zdGFja190eXBlLCBsb2NhdGlvbl9zdGFja190eXBlKTogdGhlc2UuCisJUHJpdmF0ZSwgbm90IHB1YmxpYy4KKwkqIHRlc3RzL2MrKy5hdDogTmV3LgorCSogdGVzdHMvdGVzdHN1aXRlLmF0LCB0ZXN0cy9NYWtlZmlsZS5hbTogQWRqdXN0LgorCisyMDA0LTEyLTIxICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9sYWxyMS5jYyAocGFyc2VyOjpwYXJzZSk6IFJldHVybiBhIGJvb2wgaW5zdGVhZCBvZiBhbiBpbnQuCisKKzIwMDQtMTItMjEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJRG9uJ3QgaW1wb3NlIHN0ZDo6c3RyaW5nIGZvciBmaWxlbmFtZXMuCisKKwkqIGRhdGEvbGFscjEuY2MgKGI0X2ZpbGVuYW1lX3R5cGUpOiBOZXcuCisJKHBvc2l0aW9uOjpmaWxlbmFtZSk6IFVzZSBpdC4KKwkocGFyc2VyLmhoKTogTW92ZSB0aGUgaW5jbHVzaW9uIG9mIHN0YWNrLmhoIGFuZCBsb2NhdGlvbi5oaCBiZWxvdworCXRoZSB1c2VyIGNvZGUsIHNvIHRoYXQgbmVlZGVkIGhlYWRlcnMgZm9yIHRoZSBmaWxlbmFtZSB0eXBlIGNhbiBiZQorCWluY2x1ZGVkIGZpcnN0LgorCUZvcndhcmQgZGVjbGFyZSB0aGVtIGJlZm9yZSB0aGUgdXNlciBjb2RlLgorCSogdGVzdHMvTWFrZWZpbGUuYW0gKGNoZWNrLWxvY2FsLCBpbnN0YWxsY2hlY2stbG9jYWwpOiBQYXNzCisJVEVTVFNVSVRFRkxBR1MgdG8gdGhlIFRFU1RTVUlURS4KKworMjAwNC0xMi0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlVc2UgbW9yZSBTVEwgbGlrZSBuYW1lczogbXlfY2xhc3MgaW5zdGVhZCBvZiBNeUNsYXNzLgorCisJKiBkYXRhL2xhbHIxLmNjIChMb2NhdGlvblN0YWNrLCBMb2NhdGlvblR5cGUsIFJoc051bWJlclR5cGUpCisJKFNlbWFudGljU3RhY2ssIFNlbWFudGljVHlwZSwgU3RhdGVTdGFjaywgU3RhdGVUeXBlKQorCShUb2tlbk51bWJlclR5cGUsIFN0YWNrLCBTbGljZSwgVHJhaXRzLCBQYXJzZXI6OmxvY2F0aW9uKQorCShQYXJzZXI6OnZhbHVlKTogUmVuYW1lIGFzLi4uCisJKGxvY2F0aW9uX3N0YWNrLCBsb2NhdGlvbl90eXBlLCByaHNfbnVtYmVyX3R5cGUsIHNlbWFudGljX3N0YWNrKQorCShzZW1hbnRpY190eXBlLCBzdGF0ZV9zdGFjaywgc3RhdGVfdHlwZSwgdG9rZW5fbnVtYmVyX3R5cGUsIHN0YWNrKQorCShzbGljZSwgdHJhaXRzLCBwYXJzZXI6Onl5bGxvYywgcGFyc2VyOjp5eWx2YWwpOiB0aGVzZS4KKworCSogdGVzdHMvY2FsYy5hdCwgdGVzdHMvcmVncmVzc2lvbi5hdCwgdGVzdHMvYWN0aW9ucy5hdDogQWRqdXN0LgorCisyMDA0LTEyLTE5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogZGF0YS9nbHIuYyAoWVlMTE9DX0RFRkFVTFQpOiBVc2UgR05VIHNwYWNpbmcgY29udmVudGlvbnMuCisJKiBkYXRhL3lhY2MuYyAoWVlMTE9DX0RFRkFVTFQpOiBMaWtld2lzZS4KKworMjAwNC0xMi0xNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwlSZW1vdmUgdXNlcyBvZiAnc2hvcnQgaW50JyBhbmQgJ3Vuc2lnbmVkIHNob3J0IGludCcuICBUaGlzIHJhaXNlcworCXNvbWUgYXJiaXRyYXJ5IGxpbWl0cy4gIEl0IHVzZXMgbW9yZSBtZW1vcnkgYnV0IG5vd2FkYXlzIHRoYXQncworCW5vdCBtdWNoIG9mIGFuIGlzc3VlLgorCisJVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWZmZWN0IHRoZSBnZW5lcmF0ZWQgcGFyc2VyczsgdGhhdCdzIGEgZGlmZmVyZW50CisJdGFzaywgYXMgc29tZSB1c2VycyB3aWxsIHdhbnQgdG8gY29uc2VydmUgbWVtb3J5IHRoZXJlLgorCisJSWRlYWxseSB3ZSBzaG91bGQgdXNlIHNpemVfdCB0byByZXByZXNlbnQgYWxsIG9iamVjdCBjb3VudHMsIGFuZAorCXNvbWV0aGluZyBsaWtlIHB0cmRpZmZfdCB0byByZXByZXNlbnQgc2lnbmVkIGRpZmZlcmVuY2VzIG9mIG9iamVjdAorCWNvdW50czsgYnV0IHRoYXQgd2lsbCByZXF1aXJlIG1vcmUgY29kZS1jbGVhbnVwIHRoYW4gSSBoYXZlIHRoZQorCXRpbWUgdG8gZG8gcmlnaHQgbm93LgorCisJKiBzcmMvTFIwLmMgKGFsbG9jYXRlX2l0ZW1zZXRzLCBuZXdfaXRlbXNldHMsIHNhdmVfcmVkdWN0aW9ucyk6CisJVXNlIHNpemVfdCwgbm90IGludCBvciBzaG9ydCBpbnQsIHRvIGNvdW50IG9iamVjdHMuCisJKiBzcmMvY2xvc3VyZS5jIChucml0ZW1zZXQsIGNsb3N1cmUpOiBMaWtld2lzZS4KKwkqIHNyYy9jbG9zdXJlLmggKG5yaXRlbXNldCwgY2xvc3VyZSk6IExpa2V3aXNlLgorCSogc3JjL251bGxhYmxlLmMgKG51bGxhYmxlX2NvbXB1dGUpOiBMaWtld2lzZS4KKwkqIHNyYy9wcmludC5jIChwcmludF9jb3JlKTogTGlrZXdpc2UuCisJKiBzcmMvcHJpbnRfZ3JhcGguYyAocHJpbnRfY29yZSk6IExpa2V3aXNlLgorCSogc3JjL3N0YXRlLmMgKHN0YXRlX2NvbXBhcmUsIHN0YXRlX2hhc2gpOiBMaWtld2lzZS4KKwkqIHNyYy9zdGF0ZS5oIChzdHJ1Y3Qgc3RhdGUpOiBMaWtld2lzZS4KKwkqIHNyYy90YWJsZXMuYyAoZGVmYXVsdF9nb3RvLCBnb3RvX2FjdGlvbnMpOiBMaWtld2lzZS4KKworCSogc3JjL2dyYW0uaCAocnVsZV9udW1iZXIsIHJ1bGUpOiBVc2UgaW50LCBub3Qgc2hvcnQgaW50LgorCSogc3JjL291dHB1dC5jIChwcmVwYXJlX3J1bGVzKTogTGlrZXdpc2UuCisJKiBzcmMvc3RhdGUuaCAoc3RhdGVfbnVtYmVyLCBTVEFURV9OVU1CRVJfTUFYSU1VTSwgdHJhbnNpdGlvbnMsCisJZXJycywgcmVkdWN0aW9ucyk6IExpa2V3aXNlLgorCSogc3JjL3N5bXRhYi5oIChzeW1ib2xfbnVtYmVyLCBTWU1CT0xfTlVNQkVSX01BWElNVU0sIHN0cnVjdCBzeW1ib2wpOgorCUxpa2V3aXNlLgorCSogc3JjL3RhYmxlcy5jICh2ZWN0b3JfbnVtYmVyLCB0YWxseSwgYWN0aW9uX251bWJlciwKKwlBQ1RJT05fTlVNQkVSX01JTklNVU0pOiBMaWtld2lzZS4KKwkqIHNyYy9vdXRwdXQuYyAobXVzY2xlX2luc2VydF9zaG9ydF9pbnRfdGFibGUpOiBSZW1vdmUuCisKKzIwMDQtMTItMTcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2xhbHIxLmNjOiBFeHRlbnNpdmUgRG94eWdlbmF0aW9uLgorCShlcnJvcl8pOiBSZW5hbWUgYXMuLi4KKwkoZXJyb3IpOiB0aGlzLCBzaW5jZSBpdCBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyLgorCUFkanVzdCBjYWxsZXJzLgorCShQYXJzZXI6Om1lc3NhZ2UpOiBOb3cgYW4gYXV0b21hdGljIHZhcmlhYmxlIGZyb20uLi4KKwkoUGFyc2VyOjp5eXJlcG9ydF9zeW50YXhfZXJyb3JfKTogaGVyZS4KKwkqIHRlc3RzL2FjdGlvbnMuYXQsIHRlc3RzL2NhbGMuYXQsIHRlc3RzL3JlZ3Jlc3Npb24uYXQ6IEFkanVzdCB0bworCVBhcnNlcjo6ZXJyb3IuCisJKiB0ZXN0cy9pbnB1dC5hdDogRXNjYXBlICQuCisKKzIwMDQtMTItMTYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBkYXRhL2dsci5jIChiNF9saHNfdmFsdWUsIGI0X3Joc192YWx1ZSwgYjRfcmhzLWxvY2F0aW9uKToKKwlQYXJlbnRoZXNpemUgcmhzIHRvIGF2b2lkIG9ic2N1cmUgcHJvYmxlbXMgd2l0aCBtaXN0YWtlcyBsaWtlCisJImZvbyQkYmFyID0gZm9vJDFiYXI7Ii4gIFByb2JsZW0gcmVwb3J0ZWQgYnkgdHdsZXZvIGF0IHhzNGFsbC4KKwkqIGRhdGEvbGFscjEuY2MgKGI0X2xoc192YWx1ZSwgYjRfcmhzX3ZhbHVlLCBiNF9saHNfbG9jYXRpb24sCisJYjRfcmhzX2xvY2F0aW9uKTogTGlrZXdpc2UuCisJKiBkYXRhL3lhY2MuYyAoYjRfbGhzX3ZhbHVlLCBiNF9yaHNfdmFsdWUsIGI0X2xoc19sb2NhdGlvbiwKKwliNF9yaHNfbG9jYXRpb24pOiBMaWtld2lzZS4KKworMjAwNC0xMi0xNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEvbGFscjEuY2MgKHl5cmVwb3J0X3N5bnRheF9lcnJvcl8pOiBDYXRjaCB1cCB3aXRoIGdsci5jIGFuZAorCXlhY2MuYzogYmUgc3VyZSB0byBzdGF5IHdpdGhpbiB5eWNoZWNrXy4KKwkqIHRlc3RzL2FjdGlvbnMuYXQ6IFJlLWVuYWJsZSBDKysgdGVzdHMuCisKKzIwMDQtMTItMTYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcHJpbnRfZ3JhcGguYyAocHJpbnRfZ3JhcGgpOiBSZW1vdmUgbGF5b3V0YWxnb3JpdGhtIHVzZXMgZm9yCisJcmVhbC4KKworMjAwNC0xMi0xNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlVc2UgI2RlZmluZSB0byBoYW5kbGUgdGhlICVuYW1lLXByZWZpeC4KKworCSogZGF0YS9nbHIuYywgZGF0YS95YWNjLmM6IENvbW1lbnQgY2hhbmdlcy4KKwkqIGRhdGEvbGFscjEuY2MgKHl5bGV4KTogVXNlICNkZWZpbmUgdG8gc2VsZWN0IHRoZSBuYW1lIG9mIHl5bGV4LAorCXNvIHRoYXQgb25lIGNhbiByZWZlciB0byB5eWxleCBpbiB0aGUgcGFyc2VyIGZpbGUsIGFuZCBoYXZlIGl0CisJcmVuYW1lZCwgYXMgaXMgdGhlIGNhc2Ugd2l0aCBvdGhlciBza2VsZXRvbnMuCisKKzIwMDQtMTItMTYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJTW92ZSBsYWxyMS5jYyBpbnRlcm5hbHMgaW50byB5eSouCisKKwkqIGRhdGEvbGFscjEuY2MgKHNlbWFudGljX3N0YWNrXywgbG9jYXRpb25fc3RhY2tfLCBzdGF0ZV9zdGFja18pCisJKHNlbWFudGljX3N0YWNrXywgbG9jYXRpb25fc3RhY2tfLCBwYWN0XywgcGFjdF9uaW5mXywgZGVmYWN0XykKKwkocGdvdG9fLCBkZWZnb3RvXywgdGFibGVfLCB0YWJsZV9uaW5mXywgY2hlY2tfLCBzdG9zXywgcjFfLCByMl8pCisJKG5hbWVfLCByaHNfLCBwcmhzXywgcmxpbmVfLCB0b2tlbl9udW1iZXJfLCBlb2ZfLCBsYXN0Xywgbm50c18pCisJKGVtcHR5XywgZmluYWxfLCB0ZXJyb3JfLCBlcnJjb2RlXywgbnRva2Vuc18pCisJKHVzZXJfdG9rZW5fbnVtYmVyX21heF8sIHVuZGVmX3Rva2VuXywgbl8sIGxlbl8sIHN0YXRlXywgbmVycnNfKQorCShsb29rYV8sIGlsb29rYV8sIGVycm9yX3JhbmdlXywgbmVycnNfKToKKwlSZW5hbWUgYXMuLi4KKwkoeXlzZW1hbnRpY19zdGFja18sIHl5bG9jYXRpb25fc3RhY2tfLCB5eXN0YXRlX3N0YWNrXykKKwkoeXlzZW1hbnRpY19zdGFja18sIHl5bG9jYXRpb25fc3RhY2tfLCB5eXBhY3RfLCB5eXBhY3RfbmluZl8pCisJKHl5ZGVmYWN0XywgeXlwZ290b18sIHl5ZGVmZ290b18sIHl5dGFibGVfLCB5eXRhYmxlX25pbmZfKQorCSh5eWNoZWNrXywgeXlzdG9zXywgeXlyMV8sIHl5cjJfLCB5eW5hbWVfLCB5eXJoc18sIHl5cHJoc18pCisJKHl5cmxpbmVfLCB5eXRva2VuX251bWJlcl8sIHl5ZW9mXywgeXlsYXN0XywgeXlubnRzXywgeXllbXB0eV8pCisJKHl5ZmluYWxfLCB5eXRlcnJvcl8sIHl5ZXJyY29kZV8sIHl5bnRva2Vuc18pCisJKHl5dXNlcl90b2tlbl9udW1iZXJfbWF4XywgeXl1bmRlZl90b2tlbl8sIHl5bl8sIHl5bGVuXywgeXlzdGF0ZV8pCisJKHl5bmVycnNfLCB5eWxvb2thXywgeXlpbG9va2FfLCB5eWVycm9yX3JhbmdlXywgeXluZXJyc18pOgorCXRoZXNlLgorCisyMDA0LTEyLTE1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCUZpeCBzb21lIHByb2JsZW1zIHJlcG9ydGVkIGJ5IHR3bGV2byBhdCB4czRhbGwuCisJKiBzcmMvc3ltdGFiLmMgKHN5bWJvbF9uZXcpOiBSZXBvcnQgYW4gZXJyb3IgaWYgdGhlIGlucHV0IGdyYW1tYXIKKwljb250YWlucyB0b28gbWFueSBzeW1ib2xzLiAgVGhpcyBpcyBiZXR0ZXIgdGhhbiBjYWxsaW5nIGFib3J0KCkgbGF0ZXIuCisJKiBzcmMvdmNnLmggKGVudW0gbGF5b3V0YWxnb3JpdGhtKTogUmVtb3ZlLiAgQWxsIHVzZXMgcmVtb3ZlZC4KKwkoc3RydWN0IG5vZGUsIHN0cnVjdCBncmFwaCk6CisJUmVuYW1lIG1lbWJlciBleHBhbmQgdG8gc3RyZXRjaC4gIEFsbCB1c2VzIGNoYW5nZWQuCisJKHN0cnVjdCBncmFwaCk6IFJlbW92ZSBtZW1iZXIgbGF5b3V0YWxnb3JpdGhtLiAgQWxsIHVzZXMgcmVtb3ZlZC4KKwkqIHNyYy92Y2cuYyAoZ2V0X2xheW91dGFsZ29yaXRobV9zdHIpOiBSZW1vdmUuICBBbGwgdXNlcyByZW1vdmVkLgorCSogc3JjL3ZjZ19kZWZhdWx0cy5oIChHX1NUUkVUQ0gpOiBSZW5hbWVkIGZyb20gR19FWFBBTkQuCisJQWxsIHVzZXMgY2hhbmdlZC4KKwkoTl9TVFJFVENIKTogUmVuYW1lIGZyb20gTl9FWFBBTkQuICBBbGwgdXNlcyBjaGFuZ2VkLgorCisyMDA0LTEyLTE1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9sYWxyMS5jYzogTm9ybWFsaXplIC8qKiBcYnJpZWYgLi4uICovIHRvIC8vLy4KKwlBZGQgbW9yZSBEb3h5Z2VuIGNvbW1lbnRzLgorCShzeW1wcmludF8sIHN0YWNrX3ByaW50XywgcmVkdWNlX3ByaW50XywgZGVzdHJ1Y3RfLCBwb3ApCisJKHJlcG9ydF9zeW50YXhfZXJyb3JfLCB0cmFuc2xhdGVfKTogUmVuYW1lIGFzLi4uCisJKHl5c3ltcHJpbnRfLCB5eXN0YWNrX3ByaW50XywgeXlyZWR1Y2VfcHJpbnRfLCB5eWRlc3RydWN0XykKKwkoeXlwb3BfLCB5eXJlcG9ydF9zeW50YXhfZXJyb3JfLCB5eXRyYW5zbGF0ZV8pOiB0aGlzLgorCisyMDA0LTEyLTE1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9sYWxyMS5jYyAobGV4Xyk6IFJlbmFtZSBhcy4uLgorCSh5eWxleF8pOiB0aGlzLgorCU1vdmUgdGhlIHRyYWNlIGhlcmUuCisJVGFrZSB0aGUgJW5hbWUtcHJlZml4IGludG8gYWNjb3VudC4KKwlSZXBvcnRlZCBieSBBbGV4YW5kcmUgRHVyZXQtTHV0ei4KKworMjAwNC0xMi0xNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlTaW1wbGlmeSB0aGUgQysrIHBhcnNlciBjb25zdHJ1Y3Rvci4KKworCSogZGF0YS9sYWxyMS5jYyAoZGVidWdfKTogUmVuYW1lIGFzLi4uCisJKHl5ZGVidWdfKTogc28gdGhhdCB0aGUgcGFyc2VyJ3MgaW50ZXJuYWxzIGFyZSBhbHdheXMgaW4gdGhlIHl5KgorCXBzZXVkbyBuYW1lc3BhY2UuCisJQWRqdXN0IHVzZXMuCisJKGI0X3BhcnNlX3BhcmFtX2RlY2wpOiBSZW1vdmUgdGhlIGxlYWRpbmcgY29tbWEgYXMgaXQgaXMgbm93IG9ubHkKKwljYWxsZWQgYXMgdW5pcXVlIGFyZ3VtZW50IGxpc3QuCisJKFBhcnNlcjo6UGFyc2VyKTogUmVtb3ZlIHRoZSBjb25zdHJ1Y3RvciBhY2NlcHRpbmcgYSBsb2NhdGlvbiBhbmQKKwlhbiBpbml0aWFsIGRlYnVnZ2luZyBsZXZlbC4KKwlSZW1vdmUgZnJvbSB0aGUgb3RoZXIgY3RvciB0aGUgYXJndW1lbnQgZm9yIHRoZSBkZWJ1Z2dpbmcgbGV2ZWwuCisJKGRlYnVnX2xldmVsX3R5cGUsIGRlYnVnX2xldmVsLCBzZXRfZGVidWdfbGV2ZWwpOiBOZXcuCisKKwkqIHRlc3RzL2FjdGlvbnMuYXQsIHRlc3RzL2NhbGMuYXQsIHRlc3RzL3JlZ3Jlc3Npb24uYXQ6IEFkanVzdAorCWNvbnN0cnVjdG9yIGNhbGxzLgorCisyMDA0LTEyLTE1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCVJlbW92ZSBiNF9yb290IHJlbGF0ZWQgbWF0ZXJpYWw6IGZhaWx1cmUgZXhwZXJpbWVudAorCSh3aGljaCBnb2FsIHdhcyB0byBhbGxvdyB0byBkZXJpdmUgZnJvbSBhIGNsYXNzKS4KKworCSogZGF0YS9sYWxyMS5jYyAoYjRfcm9vdCwgYjRfcGFyYW0sIGI0X2NvbnN0cnVjdG9yKTogUmVtb3ZlCisJZGVmaW5pdGlvbnMgYW5kIHVzZXMuCisKKzIwMDQtMTItMTQgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBkYXRhL2dsci5jIChzdHJ1Y3QgeXlHTFJTdGFjayk6IHl5ZXJyb3JfcmFuZ2Ugbm93IGhhcyAzIGl0ZW1zLAorCW5vdCAyLCBzaW5jZSBpdCdzIG5vdCBwb3J0YWJsZSB0byBzdWJ0cmFjdCAxIGZyb20gdGhlIHN0YXJ0IG9mIGFuCisJYXJyYXkuICBUaGUgbmV3IGl0ZW0gMCBpcyBuZXZlciBzZXQgb3IgdXNlZC4gIEFsbCB1c2VzIGNoYW5nZWQuCisKKwkoeXlyZWNvdmVyU3ludGF4RXJyb3IpOiBVc2UgWVlMTE9DX0RFRkFVTFQgaW5zdGVhZCBvZiBhc3N1bWluZworCXRoZSBkZWZhdWx0IGRlZmluaXRpb24gb2YgWVlMTE9DX0RFRkFVTFQuICBQcm9ibGVtIHJlcG9ydGVkCisJYnkgRnJhbmsgSGVja2VuYmFjaC4KKworMjAwNC0xMi0xMiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIGRhdGEvZ2xyLmMgKFlZUkhTTE9DKTogRG9uJ3QgaGF2ZSB0d28gZGVmaW5pdGlvbnMsIG9uZSBmb3IKKwl0aGUgbm9ybWFsIGNhc2UgYW5kIG9uZSBmb3IgdGhlIGVycm9yIGNhc2UuICBKdXN0IHVzZSB0aGUKKwlmaXJzdCBvbmUgdW5pZm9ybWx5LiAgUHJvYmxlbSByZXBvcnRlZCBieSBGcmFuayBIZWNrZW5iYWNoLgorCShZWUxMT0NfREVGQVVMVCk6IFVzZSB0aGUgY29udmVudGlvbnMgb2YgeWFjYy5jLCBzbyB3ZSBjYW4KKwl1c2UgZXhhY3RseSB0aGUgc2FtZSBtYWNybyBpbiBib3RoIHBsYWNlcy4KKwkoeXllcnJvcl9yYW5nZSk6IE5vdyBvZiB0eXBlIHl5R0xSU3RhY2tJdGVtLCBub3QgWVlMVFlQRSwKKwlzbyB0aGF0IHRoZSBub3JtYWwtY2FzZSBZWVJIU0xPQyB3b3JrcyBmb3IgdGhlIGVycm9yIGNhc2UgdG9vLgorCUFsbCB1c2VzIGNoYW5nZWQuCisJKiBkYXRhL3lhY2MuYyAoWVlSSFNMT0MpOiBOZXcgbWFjcm8sIHRha2VuIGZyb20gZ2xyLmMuCisJKFlZTExPQ19ERUZBVUxUKTogVXNlIHRoZSBzYW1lIG1hY3JvIGFzIGdsci5jLgorCSogZG9jL2Jpc29uLnRleGluZm8gKExvY2F0aW9uIERlZmF1bHQgQWN0aW9uKTogRG9uJ3QgY2xhaW0gdGhhdAorCXdlIGhhdmUgYW4gYXJyYXkgb2YgbG9jYXRpb25zLiAgVXNlIHRoZSBzYW1lIG1hY3JvIGZvciBib3RoIGdscgorCWFuZCBsYWxyIHBhcnNlcnMuICBNZW50aW9uIFlZUkhTTE9DLiAgTWVudGlvbiB3aGF0IGhhcHBlbnMgd2hlbgorCXRoZSBpbmRleCBpcyAwLgorCisyMDA0LTEyLTEwICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogSEFDS0lORzogVXBkYXRlIGVtYWlsIGFkZHJlc3NlcyB0byBzZW5kIGFubm91bmNlbWVudHMgdG8uCisKKwkqIGNvbmZpZ3VyZS5hYyAoQUNfSU5JVCk6IEJ1bXAgdmVyc2lvbiB0byAxLjg3NWYuCisKKzIwMDQtMTItMTAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBORVdTOiBWZXJzaW9uIDEuODc1ZS4KKwkqIHNyYy9wYXJzZS1ncmFtLmMsIHNyYy9wYXJzZS1ncmFtLmg6IFJlZ2VuZXJhdGUgd2l0aCAxLjg3NWUuCisKKwkqIHNyYy9zY2FuLXNrZWwubDogSW5jbHVkZSAiY29tcGxhaW4uaCIsIGZvciAiZmF0YWwiLgorCisJKiBzcmMvcmVsYXRpb24uaCAocmVsYXRpb25fcHJpbnQsIHJlbGF0aW9uX2RpZ3JhcGgpOgorCVJlbGF0aW9uIHNpemVzIGFyZSBvZiB0eXBlIHJlbGF0aW9uX25vZGUsIG5vdCBzaXplX3QgKHRoaXMgaXMKKwltZXJlbHkgYSBkb2MgZml4LCBzaW5jZSB0aGUgdHdvIHR5cGVzIGFyZSBlcXVpdmFsZW50KS4KKwkocmVsYXRpb25fdHJhbnNwb3NlKTogUmVsYXRpb24gc2l6ZXMgYXJlIG9mIHR5cGUgcmVsYXRpb25fbm9kZSwKKwlub3QgaW50LgorCSogc3JjL3JlbGF0aW9uLmM6IExpa2V3aXNlLgorCSh0b3AsIGluZmluaXR5KTogTm93IG9mIHR5cGUgcmVsYXRpb25fbm9kZSwgbm90IGludC4KKwkodHJhdmVyc2UsIHJlbGF0aW9uX3RyYW5zcG9zZSk6IFVzZSByZWxhdGlvbl9ub2RlLCBub3QgaW50LgorCisJKiBkYXRhL2dsci5jICh5eXVzZXJBY3Rpb24sIHl5cmVjb3ZlclN5bnRheEVycm9yKTogTWFyayBhcmdzCisJd2l0aCBBVFRSSUJVVEVfVU5VU0VEIGlmIHRoZXkncmUgbm90IHVzZWQsIHRvIGF2b2lkIEdDQyB3YXJuaW5nLgorCSh5eXBhcnNlKTogUmVtb3ZlIHVudXNlZCBsb2NhbCBpbnRyb2R1Y2VkIGluIDIwMDQtMTAtMjUgcGF0Y2guCisKKwkqIHRlc3RzL2FjdGlvbnMuYXQgKF9BVF9DSEVDS19QUklOVEVSX0FORF9ERVNUUlVDVE9SKTogTmV3IGFyZworCXNwZWNpZnlpbmcgd2hldGhlciB0aGUgdGVzdCBzaG91bGQgYmUgc2tpcHBlZC4gIFVzZSBpdCB0cAorCXNwZWNpZnkgdGhhdCB0aGUgWyVkZWZpbmVzICVza2VsZXRvbiAibGFscjEuY2MiXSB0ZXN0cyBjdXJyZW50bHkKKwlmYWlsIG9uIHNvbWUgaG9zdHMsIGFuZCBzaG91bGQgYmUgc2tpcHBlZC4KKworMjAwNC0xMi0wOCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIHNyYy9zeXN0ZW0uaCAoQ0FMTE9DLCBNQUxMT0MsIFJFQUxMT0MpOiBSZW1vdmUuICBBbGwgY2FsbGVycworCWNoYW5nZWQgdG8gdXNlIHhjYWxsb2MsIHhubWFsbG9jLCB4bnJlYWxsb2MsIHJlc3BlY3RpdmVseSwKKwl1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBiZWxvdy4KKworCSogc3JjL0xSMC5jIChhbGxvY2F0ZV9pdGVtc2V0cyk6IFVzZSB4bm1hbGxvYywgbm90IHhjYWxsb2MsCisJdG8gYWxsb2NhdGUga2VybmVsX2Jhc2UsIGtlcm5lbF9pdGVtcywga2VybmVsX3NpemUsIHNpbmNlCisJdGhleSBuZWVkbid0IGJlIGluaXRpYWxpemVkIHRvIDAuCisJKGFsbG9jYXRlX3N0b3JnYWUpOiBMaWtld2lzZSwgZm9yIHNoaWZ0c2V0LCByZWRzZXQsIHNoaWZ0X3N5bWJvbC4KKwkqIHNyYy9jbG9zdXJlLmMgKG5ld19jbG9zdXJlKTogTGlrZXdpc2UsIGZvciBpdGVtc2V0LgorCSogc3JjL2Rlcml2ZXMuYyAoZGVyaXZlc19jb21wdXRlKTogTGlrZXdpc2UsIGZvciBkZWx0cywgZGVyaXZlcywgcS4KKwkqIHNyYy9sYWxyLmMgKHNldF9nb3RvX21hcCk6IExpa2V3aXNlLCBmb3IgdGVtcF9tYXAuCisJKGluaXRpYWxpemVfRik6IExpa2V3aXNlLCBmb3IgcmVhZHMsIGVkZ2UsIHJlYWRzW2ldLCBpbmNsdWRlc1tpXS4KKwkoYnVpbGRfcmVsYXRpb25zKTogTGlrZXdpc2UgZm9yIGVkZ2UsIHN0YXRlczEsIGluY2x1ZGVzLgorCSogc3JjL251bGxhYmxlLmMgKG51bGxhYmxlX2NvbXB1dGUpOiBMaWtld2lzZSwgZm9yIHNxdWV1ZSwgcmVsdHMuCisJKiBzcmMvcmVhZGVyLmMgKHBhY2tncmFtKTogTGlrZXdpc2UsIGZvciByaXRlbSwgcnVsZXMuCisJKiBzcmMvcmVkdWNlLmMgKG5vbnRlcm1pbmFsc19yZWR1Y2UpOiBMaWtld2lzZSBmb3Igbm9udGVybW1hcC4KKwkqIHNyYy9yZWxhdGlvbi5jIChyZWxhdGlvbl9kaWdyYXBoKTogTGlrZXdpc2UgZm9yIFZFUlRJQ0VTLgorCShyZWxhdGlvbl90cmFuc3Bvc2UpOiBMaWtld2lzZSBmb3IgbmV3X1IsIGVuZF9SLgorCSogc3JjL3N5bXRhYi5jIChzeW1ib2xzX3Rva2VuX3RyYW5zbGF0aW9uc19pbml0KTogTGlrZXdpc2UgZm9yCisJdG9rZW5fdHJhbnNsYXRpb25zLgorCSogc3JjL3RhYmxlcy5jIChzYXZlX3Jvdyk6IExpa2V3aXNlIGZvciBmcm9tcywgdG9zLCBjb25mbGljdF90b3MuCisJKHRva2VuX2FjdGlvbnMpOiBMaWtld2lzZSBmb3IgeXlkZWZhY3QsIGFjdHJvdywgY29uZmxyb3csCisJY29uZmxpY3RfbGlzdC4KKwkoc2F2ZV9jb2x1bW4pOiBMaWtld2lzZSBmb3IgZnJvbXNbc3ltbm9dLCB0b3Nbc3ltbm9dLgorCShnb3RvX2FjdGlvbnMpOiBMaWtld2lzZSBmb3Igc3RhdGVfY291bnQuCisJKHBhY2tfdGFibGUpOiBMaWtld2lzZSBmb3IgYmFzZSwgcG9zLCBjaGVjay4KKwkodGFibGVzX2dlbmVyYXRlKTogTGlrZXdpc2UgZm9yIHdpZHRoLgorCisJKiBzcmMvTFIwLmMgKHNldF9zdGF0ZXMpOiBEb24ndCByZXVzZSBrZXJuZWxfc2l6ZSBhbmQga2VybmVsX2Jhc2UKKwlmb3IgaW5pdGlhbCBjb3JlLiAgSnVzdCBoYXZlIGEgc2VwYXJhdGUgY29yZSwgc28gd2UgbmVlZG4ndCB3b3JyeQorCWFib3V0IHdoZXRoZXIga2VybmVsX3NpemUgYW5kIGtlcm5lbF9iYXNlIGFyZSBpbml0aWFsaXplZC4KKworCSogc3JjL0xSMC5jIChzaGlmdF9zeW1ib2wsIHJlZHNldCwgc2hpZnRzZXQsIGtlcm5lbF9iYXNlLAorCWtlcm5lbF9zaXplLCBrZXJuZWxfaXRlbXMpOiBSZW1vdmUgdW5uZWNlc3NhcnkgaW5pdGlhbGl6YXRpb24uCisJKiBzcmMvY29uZmxpY3RzLmMgKGNvbmZsaWN0cyk6IExpa2V3aXNlLgorCSogc3JjL2Rlcml2ZXMuYyAoZGVyaXZlcyk6IExpa2V3aXNlLgorCSogc3JjL211c2NsZV90YWJsYyAobXVzY2xlX2luc2VydCk6IExpa2V3aXNlLgorCSogc3JjL3JlbGF0aW9uLmMgKHJlbGF0aW9uX2RpZ3JhcGgpOiBMaWtld2lzZS4KKwkqIHNyYy90YWJsZXMuYyAoZnJvbXMsIHRvcywgY29uZmxpY3RfdG9zLCB0YWxseSwgd2lkdGgsIGFjdHJvdywgb3JkZXIsCisJY29uZmxyb3csIGNvbmZsaWN0X3RhYmxlLCBjb25mbGljdF9saXN0LCB0YWJsZSwgY2hlY2spOgorCUxpa2V3aXNlLgorCisJKiBzcmMvY2xvc3VyZS5jIChuZXdfY2xvc3VyZSk6IEFyZyBpcyBvZiB0eXBlIHVuc2lnbmVkIGludCwgbm90IGludC4KKwlUaGlzIGlzIGJlY2F1c2UgYWxsIGNhbGxlcnMgcGFzcyB1bnNpZ25lZCBpbnQuCisJKiBzcmMvY2xvc3VyZS5oIChuZXdfY2xvc3VyZSk6IExpa2V3aXNlLgorCisJKiBzcmMvbGFsci5jIChpbml0aWFsaXplX0YpOiBJbml0aWFsaXplIHJlYWRzW2ldIGluIGFsbCBjYXNlcy4KKwkoYnVpbGRfcmVsYXRpb25zKTogSW5pdGlhbGl6ZSBpbmNsdWRlc1tpXSBpbiBhbGwgY2FzZXMuCisJKiBzcmMvcmVhZGVyLmMgKHBhY2tncmFtKTogQWx3YXlzIGluaXRpYWxpemUgcnVsZXNbcnVsZW5vXS5wcmVjCisJYW5kIHJ1bGVzW3J1bGVub10ucHJlY3N5bS4gIEluaXRpYWxpemUgbWVtYmVycyBpbiBvcmRlci4KKwkqIHNyYy9yZWxhdGlvbi5jIChyZWxhdGlvbl90cmFuc3Bvc2UpOiBBbHdheXMgaW5pdGlhbGl6ZSBuZXdfUltpXQorCWFuZCBlbmRfUltpXS4KKwkqIHNyYy90YWJsZS5jIChjb25mbGljdF9yb3cpOiBJbml0aWFsaXplIDAgYXQgZW5kIG9mIGNvbmZsaWN0X2xpc3QuCisKKwkqIHNyYy9vdXRwdXQuYyAocHJlcGFyZV9hY3Rpb25zKTogUGFzcyAwIGluc3RlYWQgb2YgY29uZmxpY3RfbGlzdFswXTsKKwljb25mbGljdF9saXN0WzBdIHdhcyBhbHdheXMgMCwgYnV0IG5vdyBpdCBpc24ndCBpbml0aWFsaXplZC4KKworCSogc3JjL3RhYmxlLmMgKHRhYmxlX2dyb3cpOiBXaGVuIGNvbmZsaWN0X3RhYmxlIGdyZXcsIHRoZSBncm93bgorCWFyZWEgd2Fzbid0IGNsZWFyZWQuICBGaXggdGhpcy4KKworCSogbGliLy5jdnNpZ25vcmU6IEFkZCBzdHJkdXAuYywgc3RyZHVwLmguCisJKiBtNC8uY3ZzaWdub3JlOiBBZGQgc3RyZHVwLm00LgorCisyMDA0LTEyLTA3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogc3JjL2xhbHIuaCAoR09UT19OVU1CRVJfTUFYSU1VTSk6IE5ldyBtYWNyby4KKwkqIHNyYy9sYWxyLmMgKHNldF9nb3RvX21hcCk6IERvbid0IGFsbG93IG5nb3RvcyB0byBlcXVhbAorCUdPVE9fTlVNQkVSX01BWElNVU0sIHNpbmNlIHdlIG9jY2FzaW9uYWxseSBjb21wdXRlCisJbmdvdG9zICsgMSB3aXRob3V0IGNoZWNraW5nIGZvciBvdmVyZmxvdy4KKwkoYnVpbGRfcmVsYXRpb25zKTogVXNlIEVORF9OT0RFLCBub3QgLTEsIHRvIGRlbm90ZSBlbmQgb2YgZWRnZXMuCisJKiBzcmMvbGFsci5jIChzZXRfZ290b19tYXAsIG1hcF9nb3RvLCBpbml0aWFsaXplX0YsIGFkZF9sb29wYmFja19lZGdlLAorCWJ1aWxkX3JlbGF0aW9ucyk6IFVzZSBnb3RvX251bWJlciwgbm90IGludCwgZm9yIGdvdG8gbnVtYmVycy4KKwkqIHNyYy90YWJsZXMuYyAoc2F2ZV9jb2x1bW4sIGRlZmF1bHRfZ290byk6IExpa2V3aXNlLgorCisyMDA0LTExLTIzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9sYWxyMS5jYyAoWVlTVFlQRSk6IERlZmluZSBpdCBhcyBpcyBkb25lIGZvciBDLCBpbnN0ZWFkCisJb2YgI2RlZmluaW5nIGZyb20geXlzdHlwZS4KKwlEb24ndCB0eXBlZGVmIHl5c3R5cGUsIEMrKyBkb2VzIG5vdCBuZWVkIGl0LgorCVRoaXMgbGV0cyBpdCBwb3NzaWJsZSB0byBmb3J3YXJkIGRlY2xhcmUgaXQgYXMgdW5pb24uCisKKzIwMDQtMTEtMjMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBib290c3RyYXAgKGdudWxpYl9tb2R1bGVzKTogQWRkIGV4dGVuc2lvbnMuCisJUHJvYmxlbSByZXBvcnRlZCBieSBKaW0gTWV5ZXJpbmcuCisKKzIwMDQtMTEtMjIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBzcmMvTFIwLmMsIHNyYy9jbG9zdXJlLmMsIHNyYy9kZXJpdmVzLmMsIHNyYy9ncmFtLmMsCisJc3JjL2xhbHIuYywgc3JjL251bGxhYmxlLmMsIHNyYy9yZWxhdGlvbi5jLCBzcmMvc2Nhbi1za2VsLmwsCisJc3JjL3N5c3RlbS5oLCBzcmMvdGFibGVzLmM6IFhGUkVFIC0+IGZyZWUsIHRvIGFjY29tbW9kYXRlCisJcmVjZW50IGNoYW5nZSB0byBnbnVsaWIgeGFsbG9jLmguCisJUHJvYmxlbSByZXBvcnRlZCBieSBKaW0gTWV5ZXJpbmcuCisKKzIwMDQtMTEtMTcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2xhbHIxLmNjIChzeW1wcmludF8pOiBVc2UgY2RlYnVnXyB0byBhdm9pZCB3YXJuaW5ncy4KKworMjAwNC0xMS0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+LAorCSAgICBBbGV4YW5kcmUgRHVyZXQtTHV0eiA8YWRsQGdudS5vcmc+CisKKwkqIGRhdGEvbGFscjEuY2MgKFBhcnNlcjo6eXljZGVidWdfKTogTmV3LCBhIHBvaW50ZXIsIHRvIGFsbG93CisJY2hhbmdlcy4KKwkoWVlDREVCVUcpOiBBZGp1c3QuCisJVXNlIGl0IGluc3RlYWQgb2YgY2RlYnVnXy4KKwkoUGFyc2VyOjpkZWJ1Z19zdHJlYW0sIFBhcnNlcjo6c2V0X2RlYnVnX3N0cmVhbSk6IE5ldy4KKwkoUGFyc2VyOjpzeW1wcmludF8pOiBEZWZpbmUgY2RlYnVnXyBmb3IgdGVtcG9yYXJ5IGJhY2t3YXJkCisJY29tcGF0aWJpbGl0eS4KKwkqIHRlc3RzL2FjdGlvbnMuYXQgKF9BVF9DSEVDS19QUklOVEVSX0FORF9ERVNUUlVDVE9SKTogVXNlCisJZGVidWdfc3RyZWFtICgpLgorCisyMDA0LTExLTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9sYWxyMS5jYyAoUGFyc2VyOnByaW50Xyk6IFJlbW92ZSwgdXNlICVwcmludGVyIGluc3RlYWQuCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChfQVRfREFUQV9EQU5DRVJfWSk6IEFkanVzdC4KKwkqIHRlc3RzL2NhbGMuYXQgKF9BVF9EQVRBX0NBTENfWSk6IERpdHRvLgorCSogdGVzdHMvYWN0aW9ucy5hdCAoX0FUX0NIRUNLX1BSSU5URVJfQU5EX0RFU1RSVUNUT1IpOiBMaWtld2lzZS4KKworMjAwNC0xMC0yNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIGRhdGEvZ2xyLmMgKHl5bG9jX2RlZmF1bHQpOiBSZW1vdmU7IG5vdCB1c2VkLgorCVByb2JsZW0gcmVwb3J0ZWQgYnkgRnJhbmsgSGVja2VuYmFjaC4KKworMjAwNC0xMC0yNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEvZ2xyLmMgKFlZUkhTTE9DKTogTW92ZSBpdHMgZGVmaW5pdGlvbiBuZXh0IHRvIGl0cyB1c2VzLgorCUludHJvZHVjZSBhbm90aGVyIGRlZmluaXRpb24gdG8gYWRkcmVzcyBzaW1wbGUgbG9jYXRpb24gYXJyYXlzLgorCSh5eUdMUlN0YWNrKTogTmV3IG1lbWJlcjogeXllcnJvcl9yYW5nZS4KKwkoeXlyZWNvdmVyU3ludGF4RXJyb3IsIHl5cGFyc2UpOiBVcGRhdGUgaXQuCisJKHl5cmVjb3ZlclN5bnRheEVycm9yKTogVXNlIGl0IHdoZW4gc2hpZnRpbmcgdGhlIGVycm9yIHRva2VuIHRvCisJaGF2ZSBhbiBhY2N1cmF0ZSByYW5nZSwgZXF1aXZhbGVudCB0byB0aGUgb25lIGNvbXB1dGVkIGJ5IGJvdGgKKwl5YWNjLmMgYW5kIGxhbHIxLmNjLgorCSogdGVzdHMvY3h4LXR5cGUuYXQgKF9BVF9URVNUX0dMUl9DWFhUWVBFUyk6IENoYW5nZSBpdHMgeXlsZXggc28KKwl0aGF0IGNvbHVtbiBudW1iZXJzIHN0YXJ0IGF0IGNvbHVtbiAwLCBhcyBwZXIgR05VIENvZGluZworCVN0YW5kYXJkcywgdGhlIG90aGVycyB0ZXN0cywgYW5kIHRoZSBkb2MuCisJKF9BVF9SRVNPTFZFRF9HTFJfT1VUUFVUX1dJVEhfTE9DLCBfQVRfQU1CSUdfR0xSX09VVFBVVF9XSVRIX0xPQyk6CisJQWRqdXN0IHRvIHRoZSBhYm92ZSBjaGFuZ2UgKGZpcnN0IGNvbHVtbiBpcyAwKS4KKwlBbmQgYWRqdXN0IHRoZSBsb2NhdGlvbiBvZiB0aGUgIjxlcnJvcj4iLCBub3cgY292ZXJpbmcgdGhlIHdob2xlCisJbGluZS4KKworMjAwNC0xMC0yMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisJYW5kIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJUmVtb3ZlIHNvbWUgYXJiaXRyYXJ5IGxpbWl0cyBvbiBnb3RvIG51bWJlcnMgYW5kIHJlbGF0aW9ucy4KKwkqIHNyYy9sYWxyLmMgKGdvdG9fbWFwLCBuZ290b3MsIGZyb21fc3RhdGUsIHRvX3N0YXRlKTogT21pdAorCWluaXRpYWwgdmFsdWVzLCBzaW5jZSB0aGV5J3JlIG5ldmVyIHVzZWQuCisJKHNldF9nb3RvX21hcCk6IG5nb3RvcyBpcyBub3cgdW5zaWduZWQsIHNvIHRlc3QgZm9yIG92ZXJmbG93CisJYnkgc2VlaW5nIHdoZXRoZXIgaXQgd3JhcHMgYXJvdW5kIHRvIHplcm8uCisJKiBzcmMvbGFsci5oIChnb3RvX251bWJlcik6IE5vdyBzaXplX3QsIG5vdCBzaG9ydCBpbnQuCisJKEdPVE9fTlVNQkVSX01BWElNVU0pOiBSZW1vdmUuCisJKiBzcmMvcmVsYXRpb24uYyAocmVsYXRpb25fcHJpbnQsIHRyYXZlcnNlLCByZWxhdGlvbl90cmFuc3Bvc2UpOgorCUNoZWNrIGZvciBFTkRfTk9ERSByYXRoZXIgdGhhbiBsb29raW5nIGF0IHNpZ24uCisJKiBzcmMvcmVsYXRpb24uaCAoRU5EX05PREUpOiBOZXcgbWFjcm8uCisJKHJlbGF0aW9uX25vZGUpOiBOb3cgc2l6ZV90LCBub3Qgc2hvcnQgaW50LgorCisyMDA0LTEwLTIyICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogZG9jL2Jpc29uLnRleGluZm8gKExhbmd1YWdlIGFuZCBHcmFtbWFyKTogSW4gZXhhbXBsZSwgImludCIgaXMgYQorCWtleXdvcmQsIG5vdCBhbiBpZGVudGlmaWVyLiAgUHJvYmxlbSByZXBvcnRlZCBieSBCYXJvbiBTY2h3YXJ0eiBpbgorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDQtMTAvbXNnMDAwMTcuaHRtbD4uCisKKzIwMDQtMTAtMTEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvc3ltdGFiLmMgKHN5bWJvbF9jaGVja19hbGlhc19jb25zaXN0ZW5jeSk6IEFsc28gY2hlY2sKKwl0eXBlIG5hbWVzLCBkZXN0cnVjdG9ycywgYW5kIHByaW50ZXJzLgorCVJlcG9ydGVkIGJ5IEFsZXhhbmRyZSBEdXJldC1MdXR6LgorCVJlY29kZSB0aGUgaGFuZGxpbmcgb2YgYXNzb2NpYXRpdml0eSBhbmQgcHJlY2VkZW5jZSBpbiB0ZXJtcworCW9mIHN5bWJvbF9wcmVjZWRlbmNlX3NldC4KKwlBY2NlcHQgbm8gcmVkZWNsYXJhdGlvbiBhdCBhbGwsIG5vdCBldmVuIGVxdWFsIHRvIHRoZSBwcmV2aW91cworCXZhbHVlLgorCShyZWRlY2xhcmF0aW9uKTogTmV3LgorCVVzZSBpdCB0byBmYWN0b3IgcmVkZWNsYXJhdGlvbiBjb21wbGFpbnRzLgorCShzeW1ib2xfbWFrZV9hbGlhcyk6IERvbid0IHNldCB0aGUgdHlwZSBvZiB0aGUgYWxpYXMsIGxldAorCXN5bWJvbF9jaGVja19hbGlhc19jb25zaXN0ZW5jeSBkbyBpdCBhcyBmb3Igb3RoZXIgZmVhdHVyZXMuCisJKiBzcmMvc3ltdGFiLmggKHN5bWJvbCk6IEFkZCBuZXcgbWVtYmVyIHByZWNfbG9jYXRpb24sIGFuZAorCXR5cGVfbG9jYXRpb24uCisJKiBzcmMvc3ltdGFiLmMgKHN5bWJvbF9wcmVjZWRlbmNlX3NldCwgc3ltYm9sX3R5cGVfc2V0KTogU2V0IHRoZW0uCisJKiB0ZXN0cy9pbnB1dC5hdCAoSW5jb21wYXRpYmxlIEFsaWFzZXMpOiBOZXcuCisKKzIwMDQtMTAtMDkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJLmN2c2lnbm9yZSBmaXhlcyB0byBhY2NvbW1vZGF0ZSBnbnVsaWIgY2hhbmdlcywKKwlhbmQgdGhlIHByYWN0aWNlIG9mIG5hbWluZyBidWlsZCBkaXJlY3RvcmllcyAiX2J1aWxkIi4KKwkqIC5jdnNpZ25vcmU6IEFkZCAiXyoiLiAgU29ydC4KKwkqIGxpYi8uY3ZzaWdub3JlOiBBZGQgZ2V0b3B0Xy5oLCB4YWxsb2MtZGllLmMuCisJKiBtNC8uY3ZzaWdub3JlOiBBZGQgIipfZ2wubTQiLgorCisyMDA0LTEwLTA2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3BhcnNlLWdyYW0ueSAoYWRkX3BhcmFtKTogRml4IHRoZSB0cnVuY2F0aW9uIG9mIHRyYWlsaW5nCisJc3BhY2VzLgorCisyMDA0LTEwLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCUluIEJpc29uIDEuODc1J3MgeWFjYy5jLCBZWUxMT0NfREVGQVVMVCB3YXMgY2FsbGVkIHJlZ2FyZGxlc3MKKwl3aGV0aGVyIHRoZSByZWR1Y2lvbiB3YXMgZW1wdHkgb3Igbm90LiAgVGhpcyBsZWF2ZXMgcm9vbSB0bworCWltcHJvdmUgdGhlIHVzZSBvZiBZWUxMT0NfREVGQVVMVCBpbiBzdWNoIGEgY2FzZS4KKwlsYWxyMS5jYyBpcyBzdGlsbCBleHBlcmltZW50YWwsIHNvIGNoYW5naW5nIHRoaXMgaXMgYWNjZXB0YWJsZS4KKwlBbmQgZmluYWxseSwgdGhlcmUgYXJlIHByb2JhYmx5IG5vdCBtYW55IHVzZXJzIHdobyBjaGFuZ2VkIHRoZQorCWhhbmRsaW5nIG9mIGxvY2F0aW9ucyBpbiBHTFIsIHNvIGNoYW5naW5nIGlzIGFkbWlzc2libGUgdG9vLgorCisJKiBkYXRhL2dsci5jLCBkYXRhL2xhbHIxLmNjLCBkYXRhL3lhY2MuYyAoWVlMTE9DX0RFRkFVTFQpOiBPbiBhbgorCWVtcHR5IHJlZHVjdGlvbiwgc2V0IEAkIHRvIGFuIGVtcHR5IGxvY2F0aW9uIGVuZGluZyB0aGUgcHJldmlvdXNseQorCXN0YWNrZWQgc3ltYm9sLgorCUFkanVzdCB1c2VzIHRvIG1ha2Ugc3VyZSB0aGUgY29kZSBpcyB0cmlnZ2VyZWQgb24gZW1wdHkKKwlyZWR1Y3Rpb25zLgorCSogdGVzdHMvYWN0aW9ucy5hdCAoX0FUX0NIRUNLX1BSSU5URVJfQU5EX0RFU1RSVUNUT1IpOiBBZGp1c3QgdGhlCisJZXhwZWN0ZWQgb3V0cHV0OiBlbXB0eSByZWR1Y3Rpb25zIGhhdmUgZW1wdHkgbG9jYXRpb25zLgorCisyMDA0LTA5LTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9sYWxyMS5jYzogTW92ZSB0b3dhcmRzIGEgbW9yZSBzdGFuZGFyZCBDKysgY29kaW5nIHN0eWxlCisJZm9yIHRlbXBsYXRlczogQ2xhc3MgPCBUID4gLT4gQ2xhc3M8VD4uCisKKzIwMDQtMDktMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2xhbHIxLmNjOiBSZWluc3RhbGwgdGhlIGZvcm1lciBjdG9yLCBmb3Igc2FrZSBvZgorCWNvbXBhdGliaWxpdHksIGJ1dCB3YXJuIGl0IHdpbGwgYmUgcmVtb3ZlZC4KKwlNb3ZlIHRvd2FyZHMgYSBtb3JlIHN0YW5kYXJkIEMrKyBjb2Rpbmcgc3R5bGUgKGkuZS4sIHR5cGUgKnZhciAtPgorCXR5cGUqIHZhcikuCisKKzIwMDQtMDktMjcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBzcmMvcGFyc2UtZ3JhbS55IChhZGRfcGFyYW0pOiBSZXdyaXRlIHRvIGF2b2lkIHN0cmNociwKKwlzaW5jZSBpdCdzIGxlc3MgbGlrZWx5IHRvIHdvcmsgaWYgTlVMcyBhcmUgaW52b2x2ZWQgaW4gdGhlIGZ1dHVyZS4KKworMjAwNC0wOS0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEveWFjYy5jIChZWV9MT0NBVElPTl9QUklOVCk6IEZpeCBpdHMgZGVmYXVsdCBkZWNsYXJhdGlvbi4KKworMjAwNC0wOS0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEvbGFscjEuY2MgKGI0X3BhcnNlX3BhcmFtX2RlY2xfMSk6IE5ldy4KKwkoYjRfcGFyc2VfcGFyYW1fZGVjbCk6IFVzZSBpdCB0byBoYXZlIGRpZmZlcmVudCBuYW1lcyBiZXR3ZWVuIGF0dHJpYnV0ZQorCWFuZCBhcmd1bWVudCBuYW1lcy4KKwkoYjRfY2NfY29uc3RydWN0b3JfY2FsbCk6IExpa2V3aXNlLgorCisyMDA0LTA5LTI0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3BhcnNlLWdyYW0ueSAoYWRkX3BhcmFtKTogU3RyaXAgdGhlIGxlYWRpbmcgYW5kIHRyYWlsaW5nCisJYmxhbmtzIGZyb20gYSBmb3JtYWwgYXJndW1lbnQgZGVjbGFyYXRpb24uCisJKFlZX0xPQ0FUSU9OX1BSSU5UKTogTmV3LgorCisyMDA0LTA5LTI0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9jLm00IChiNF95eXN5bXByaW50X2dlbmVyYXRlKTogTW92ZSB0aGUgWVlJTlBVVCBpbnZvY2F0aW9uCisJYWZ0ZXIgdGhlIGxvY2F0aW9uLgorCisyMDA0LTA5LTI0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZG9jL2Jpc29uLnRleGluZm8gKFRhYmxlIG9mIFN5bWJvbHMpOiBTb3J0LgorCisyMDA0LTA5LTIxICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS95YWNjLmMsIGRhdGEvZ2xyLmMgKGI0X2F0X2RvbGxhciwgYjRfZG9sbGFyX2RvbGxhcik6IFJlbW92ZQorCXRoZSB1c2VsZXNzIHBhcmVudGhlc2VzLgorCVN1Z2dlc3RlZCBieSBQYXVsIEVnZ2VydC4KKworMjAwNC0wOS0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlMZXQgdGhlIGluaXRpYWwtYWN0aW9uIGFjdCBvbiB0aGUgbG9vay1haGVhZCwgYW5kIHVzZSBpdCBmb3IgdGhlCisJImluaXRpYWwgcHVzaCIgKGNvcnJlc3BvbmRpbmcgdG8gYW4gaHlwb3RoZXRpY2FsIGJlZ2lubmluZy1vZi1maWxlKS4KKwlBbmQgbGV0IGxhbHIxLmNjIGhvbm9yICVpbml0aWFsLWFjdGlvbi4KKworCSogZG9jL2Jpc29uLnRleGluZm8gKEluaXRpYWwgQWN0aW9uIERlY2wpOiBDbGFyaWZ5LCBhbmQgYWRkIGFuCisJZXhhbXBsZS4KKwkqIGRhdGEvbGFscjEuY2MgKFBhcnNlcjo6aW5pdGxvY2F0aW9uXyk6IFJlbW92ZSwgYmFkIGV4cGVyaW1lbnQuCisJKFBhcnNlcjo6UGFyc2VyKTogUmVtb3ZlIHRoZSBjdG9yIHRoYXQgdXNlZCB0byBpbml0aWFsaXplIGl0LgorCShQYXJzZXI6OnBhcnNlKTogTGlrZSBpbiB0aGUgb3RoZXIgc2tlbGV0b25zLCBpc3N1ZSB0aGUgInN0YXJ0aW5nCisJcGFyc2UiIG1lc3NhZ2UgYmVmb3JlIGFueSBhY3Rpb24uCisJSG9ub3IgJWluaXRpYWwtYWN0aW9uLgorCUluaXRpYWxpemUgdGhlIHN0YWNrcyB3aXRoIHRoZSBsb29rYWhlYWQuCisJKiBkYXRhL3lhY2MuYzogTGV0ICQkIGFuZCBAJCBpbiAlaW5pdGlhbC1hY3Rpb24gZGVzaWduYXRlIHRoZQorCWxvb2stYWhlYWQuCisJUHVzaCB0aGVtIGluIHRoZSBzdGFja3MuCisJKiB0ZXN0cy9hY3Rpb25zLmF0LCB0ZXN0cy9jYWxjLmF0OiBBZGp1c3QgdGhlIEMrKyBjdG9yIGludm9jYXRpb25zLgorCisyMDA0LTA5LTIwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZG9jL2Jpc29uLnRleGluZm8gKEluaXRpYWwgQWN0aW9uIERlY2wpOiBOZXcuCisKKzIwMDQtMDktMjAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL3lhY2MuYyAoWVlfTE9DQVRJT05fUFJJTlQpOiBVc2UgWVlMVFlQRV9JU19UUklWSUFMIGFzIGEKKwljbGVhcmVyIGNyaXRlcmlvbiB0byBkZWZpbmUgaXQuCisJKHBhcnNlKTogSW5pdGlhbGl6ZSB0aGUgaW5pdGlhbCBsb2NhdGlvbiB3aGVuIFlZTFRZUEVfSVNfVFJJVklBTC4KKwlXaGVuIHJlZHVjaW5nIG9uIGFuIGVtcHR5IFJIUywgdXNlIHRoZSBsYXRlc3Qgc3RhY2tlZCBsb2NhdGlvbiBhcworCWxvY2F0aW9uLgorCXl5bGxvYyBpcyBub3QgYWx3YXlzIGF2YWlsYWJsZS4KKwkqIGRhdGEvZ2xyLmM6IExpa2V3aXNlLgorCUFsc28sIGhvbm9yIGluaXRpYWwtYWN0aW9ucy4KKworMjAwNC0wOS0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEveWFjYy5jIChZWV9MT0NBVElPTl9QUklOVCk6IE5ldy4KKwlEZWZpbmUgd2hlbiB3ZSBrbm93IFlZTFRZUEUncyBzdHJ1Y3R1cmUsIGkuZS4sIHdoZW4gdGhlIGRlZmF1bHQKKwlZWUxMT0NfREVGQVVMVCBpcyB1c2VkLgorCSogZGF0YS9jLm00IChiNF95eXN5bXByaW50X2dlbmVyYXRlKTogVXNlIGl0LgorCSogZGF0YS9sYWxyMS5jYyAoWVlMTE9DX0RFRkFVTFQpOiBTdG9wIHJlbHlpbmcgb24gdGhlIGluaXRpYWwKKwl2YWx1ZSBvZiB0aGUgcmVzdWx0LgorCShlcnJvcl9zdGFydF8pOiBSZXBsYWNlIHdpdGguLi4KKwkoZXJyb3JfcmFuZ2VfKTogdGhpcyBsb2NhdGlvbiBhcnJheS4KKwlUaGlzIGFsbG93cyB0byByZXBsYWNlIGNvZGUgcmVseWluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24gb2YKKwlsb2NhdGlvbnMgYnkgcG9ydGFibGUgY29kZS4KKwkqIGRhdGEveWFjYy5jICh5eWxlcnJzcCk6IFJlcGxhY2Ugd2l0aC4uLgorCSh5eWVycm9yX3JhbmdlKTogdGhpcy4KKwlFdmVyeSB0aW1lIGEgdG9rZW4gaXMgcG9wcGVkLCB1cGRhdGUgeXllcnJvcl9yYW5nZVswXSwgdG8gaGF2ZSBhbgorCWFjY3VyYXRlIGxvY2F0aW9uIGZvciB0aGUgZXJyb3IgdG9rZW4uCisJKiBkYXRhL2dsci5jIChZWV9MT0NBVElPTl9QUklOVCk6IE5ldy4KKwkoeXlwcm9jZXNzT25lU3RhY2spOiBGaXggYW4gaW52b2NhdGlvbiBvZiBZWV9TWU1CT0xfUFJJTlQ6CisJZGVmZXJlbmNlIGEgcG9pbnRlci4KKwkqIHRlc3RzL2FjdGlvbnMuYXQgKF9BVF9DSEVDS19QUklOVEVSX0FORF9ERVNUUlVDVE9SKTogTm8gbG9uZ2VyCisJcmVwb3J0IHRoZSBsb2NhdGlvbiBpbiAlcHJpbnRlcnMuCisKKwkqIHNyYy9zY2FuLXNrZWwubDogSW5zdGVhZCBvZiBhYm9ydCwgcmVwb3J0IGVycm9yIG1lc3NhZ2VzIHRvIGVhc2UKKwl1bmRlcnN0YW5kaW5nIHNrZWxldG9uIHNjYW5uaW5nIGZhaWx1cmVzLgorCisyMDA0LTA5LTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9sYWxyMS5jYyAoU3RhY2s6Okl0ZXJhdG9yLCBTdGFjazo6Q29uc3RJdGVyYXRvcik6IFJlbmFtZSBhcy4uLgorCShpdGVyYXRvciwgY29uc3RfaXRlcmF0b3IpOiB0aGVzZSwgdG8gYmUgbW9yZSBpbiB0aGUgQysrIHNwaXJpdC4KKwlBbHNvLCByZXR1cm4gcmV2ZXJzZSBpdGVyYXRvcnMgc28gdGhhdCB3aGVuIGRpc3BsYXlpbmcgdGhlIHN0YWNrCisJd2UgZGlzcGxheSBpdHMgYm90dG9tIGZpcnN0LgorCShQYXJzZXI6OnN0YWNrX3ByaW50XywgUGFyc2VyOjpyZWR1Y2VfcHJpbnRfKTogTWF0Y2ggdGhlIG1lc3NhZ2VzCisJZnJvbSB5YWNjLmMuCisJV2Ugc2hvdWxkIHByb2JhYmx5IHVzZSB2ZWN0b3IgaGVyZSB0aG91Z2guCisKKzIwMDQtMDktMTYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJSGF2ZSBtb3JlIGNvbXBsZXRlIHNoaWZ0IHRyYWNlcy4KKworCSogZGF0YS95YWNjLmMsIGRhdGEvbGFscjEuYywgZGF0YS9nbHIuYzogVXNlIFlZX1NZTUJPTF9QUklOVAorCXRvIHJlcG9ydCBTaGlmdHMgaW5zdGVhZCBvZiBhZCBob2MgWVlEUFJJTlRGIGludm9jYXRpb25zLAorCWluY2x1ZGluZyBmb3IgdGhlIGVycm9yIHRva2VuLgorCSogZGF0YS9sYWxyMS5jYyAoc3ltcHJpbnRfKTogT3V0cHV0IHRoZSBsb2NhdGlvbi4KKwkqIHRlc3RzL2FjdGlvbnMuYXQgKF9BVF9DSEVDS19QUklOVEVSX0FORF9ERVNUUlVDVE9SKTogSW4gQysrLCBkb24ndAorCW91dHB1dCB0aGUgbG9jYXRpb24gd2l0aGluIHRoZSAlcHJpbnRlci4KKwlBY3RpdmF0ZSBHTFIgdGVzdHMsIGF0IGxlYXN0IHRvIG1ha2Ugc3VyZSB0aGV5IGNvbXBpbGUgcHJvcGVybHkuCisJVGhleSBzdGlsbCBkb24ndCBwYXNzIHRob3VnaC4KKwkqIHRlc3RzL2NhbGMuYXQ6IEFkanVzdCBleHBlY3QgdmVyYm9zZSBvdXRwdXQsIHNpbmNlIG5vdyAiRW50ZXJpbmcKKwlzdGF0ZS4uLiIgaXMgb24gYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSAiU2hpZnRpbmciIG1lc3NhZ2UuCisKKzIwMDQtMDktMDggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiB0ZXN0cy9hY3Rpb25zLmF0IChfQVRfQ0hFQ0tfUFJJTlRFUl9BTkRfREVTVFJVQ1RPUik6IE1vdmUgdGhlCisJQmlzb24gZGlyZWN0aXZlIGZyb20gdGhlIEJpc29uIGZpbGUgdG8gdGhlIGludm9jYXRpb24gb2YgdGhpcworCW1hY3JvLCBzbyB0aGF0IHRoZXNlIGRpcmVjdGl2ZXMgYXJlIHBhc3NlZCB0bworCUFUX0JJU09OX09QVElPTl9QVVNIREVGUyB0byBnZXQgY29ycmVjdCBoZWxwIG1hY3Jvcy4KKwlVc2UgdGhlc2UgaGVscGluZyBtYWNyb3MgKGUuZy4sIEFUX0xPQywgQVRfVkFMIGFuZCBzbyBmb3J0aCkuCisJTW92ZSB0aGUgQVRfU0VUVVAvQVRfQ0xFQU5VUCBvdXRzaWRlLCB0byByZXBvcnQgYXMgdGVzdCB0aXRsZQorCXRoZSBleHRyYSBCaXNvbiBkaXJlY3RpdmVzIGluc3RlYWQgb2YgdGhlIHdob2xlIHNlcmllcy4KKwlDaGFuZ2UgdGhlIGdyYW1tYXIgc28gdGhhdCB0aGVyZSBhcmUgcmVjb3ZlcmFibGUgZXJyb3JzLCBhbmQKKwl1bnJlY292ZXJhYmxlIGVycm9ycy4gIE5vdyB3ZSBjYW4gaGF2ZSB0aGUgcGFyc2VyIGdpdmUgdXAgYmVmb3JlCisJY29uc3VtaW5nIHRoZSB3aG9sZSBpbnB1dC4gIEFzIGEgcmVzdWx0IHdlIG5vdyBjYW4gb2JzZXJ2ZSB0aGF0CisJdGhlIGxvb2thaGVhZCBpcyBmcmVlZCB3aGVuIG5lZWRlZC4KKwlDaGFuZ2UgdGhlIHBhcnNlciBzb3VyY2UgdG8gcGFyc2UgYXJndlsxXSBpbnN0ZWFkIG9mIGEgaGFyZCBjb2RlZAorCXN0cmluZy4KKwlTaW1wbGlmeSB5eWxleCwgYW5kIGdpdmUgYSB2YWx1ZSBhbmQgbG9jYXRpb24gdG8gRU9GLgorCVNpbXBsaWZ5IHNvbWUgaW52b2NhdGlvbnMgb2YgQVRfQ0hFQ0tfUFJJTlRFUl9BTkRfREVTVFJVQ1RPUiB0aGF0CisJcGFzc2VkIGRpcmVjdGl2ZXMgYWxyZWFkeSBjb2RlZCBpbiB0aGUgZmlsZS4KKwlBZGQgc29tZSB0ZXN0cyB0byBjaGVjayB0aGUgbG9jYXRpb24gb2YgImVycm9yIi4KKwlGb3Igc29tZSB0ZXN0cywgdGhlIEMrKyBwYXJzZXIgaXMgY29ycmVjdCwgYW5kIG5vdCB5YWNjLmMuCisJRm9yIG90aGVyIHRlc3RzLCB0aGV5IHByb3ZpZGUgZGlmZmVyZW50LCBidXQgdW5zYXRpc2Z5aW5nLCB2YWx1ZXMsCisJc28ga2VlcCB0aGUgQysrIHZhbHVlIHNvIHRoYXQgYXQgbGVhc3Qgb25lIHBhcnNlciBpcyAiY29ycmVjdCIKKwlhY2NvcmRpbmcgdG8gdGhlIHRlc3Qgc3VpdGUuCisJKEFjdGlvbnMgYWZ0ZXIgZXJyb3JzKTogUmVtb3ZlLCB0aGlzIGlzIHN1YnN1bWVkIGJ5IHRoZQorCUFUX0NIRUNLX1BSSU5URVJfQU5EX0RFU1RSVUNUT1Igc2VyaWVzLgorCisyMDA0LTA5LTA2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9sYWxyMS5jYzogQWRqdXN0IHRoZSBpbmRlbnRhdGlvbiBvZiB0aGUgbGFiZWxzLgorCShQYXJzZXI6OnBvcCk6IE5ldy4KKwlVc2UgaXQuCisKKzIwMDQtMDktMDYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL3lhY2MuY2MsIGRhdGEvZ2xyLmNjICh5eWRlc3RydWN0KTogQWNjZXB0IGFuIGFkZGl0aW9uYWwKKwlhcmd1bWVudCwgYW4gaW5mb3JtYXRpdmUgbWVzc2FnZS4KKwlDYWxsIFlZX1NZTUJPTF9QUklOVC4KKwlBZGp1c3QgYWxsIGNhbGxlcnM6IGludGVncmF0ZSB0aGUgYXNzb2NpYXRlZCBZWV9TWU1CT0xfUFJJTlQuCisJKiBkYXRhL2xhbHIxLmNjIChkZXN0cnVjdF8pOiBMaWtld2lzZS4KKwlJbiBhZGRpdGlvbiwgbm8gbG9uZ2VyIGRlcGVuZCBvbiBiNF95eXN5bXByaW50X2dlbmVyYXRlIGFuZAorCWI0X3l5ZGVzdHJ1Y3RfZ2VuZXJhdGUgdG8gZ2VuZXJhdGUgdGhlc2UgZnVuY3Rpb25zLCBkbyBpdCAiYnkKKwloYW5kIi4KKworMjAwNC0wOS0wMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEvZ2xyLmMsIGRhdGEvbGFscjEuY2MsIGRhdGEveWFjYy5jOiBXaGVuIFlZQUJPUlQgd2FzCisJaW52b2tlZCwgeXlkZXN0cnVjdCB0aGUgbG9va2FoZWFkLgorCSogdGVzdHMvY2FsYy5hdCAoQ2FsY3VsYXRvciAkMSk6IFVwZGF0ZSB0aGUgZXhwZWN0ZWQgbGVuZ3RocyBvZgorCXRyYWNlczogdGhlcmUgaXMgYW4gYWRkZWQgbGluZSBmb3IgdGhlIGRpc2NhcmRlZCBsb29rYWhlYWQuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoRGVzdHJ1Y3RvciBEZWNsKTogU29tZSByZXdvcmRpbmcuCisJRGVmaW5lICJkaXNjYXJkZWQiIHN5bWJvbHMuCisKKzIwMDQtMDktMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2xhbHIxLmNjICh0cmFuc2xhdGVfLCBkZXN0cnVjdF8pOiBObyByZWFzb24gdG8gYmUgc3RhdGljLgorCisyMDA0LTA5LTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9nbHIuYywgeWFjYy5jIChZWURTWU1QUklOVCk6IFJlbW92ZSwgbm90IHVzZWQuCisJKFlZRFNZTVBSSU5URik6IFJlbmFtZSBhcy4uLgorCShZWV9TWU1CT0xfUFJJTlQpOiB0aGlzLgorCSogZGF0YS9sYWxyMS5jYyAoWVlfU1lNQk9MX1BSSU5UKTogTmV3LCBtb2RlbGVkIGFmdGVyIHRoZSBwcmV2aW91cworCXR3by4KKwlVc2UgaXQgaW5zdGVhZCBvZiBkaXJlY3Qgc3ltcHJpbnRfIGNhbGxzLgorCSh5eWJhY2t1cCk6IFR3ZWFrIHRoZSAiTm93IGF0IGVuZCBvZiBpbnB1dCIgY2FzZSB0byBtYXRjaCB5YWNjLmMncworCW9uZS4KKworMjAwNC0wOS0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEvbGFscjEuY2MgKGI0X3l5c3ltcHJpbnRfZ2VuZXJhdGUpOiBOZXcuCisJKHN5bXByaW50Xyk6IE5ldyBtZW1iZXIgZnVuY3Rpb24sIGRlZmluZWQgd2hlbiBZWURFQlVHLgorCVVzZSBpdCBjb25zaXN0ZW50bHkgaW5zdGVhZCBvZiB0b2tlbi9udGVybSBkZWJ1Z2dpbmcgb3V0cHV0IGJ5CisJaGFuZC4KKwkqIHRlc3RzL2FjdGlvbnMuYXQgKF9BVF9DSEVDS19QUklOVEVSX0FORF9ERVNUUlVDVE9SKTogQWRqdXN0CisJJXByaW50ZXIgY2FsbHMgdG8gdXNlIGNkZWJ1Z18gd2hlbiB1c2luZyBsYWxyMS5jYy4KKworMjAwNC0wOC0zMCAgRmxvcmlhbiBLcm9obSAgPGZsb3JpYW5AZWRhbWFpbC5maXNoa2lsbC5pYm0uY29tPgorCisJKiBkYXRhL2dsci5jOiBHdWFyZCB0aGUgZGVjbGFyYXRpb25zIG9mIHl5cHN0YWNrIGFuZCB5eXBkdW1wc3RhY2sKKwl3aXRoICNpZmRlZiBZWURFQlVHLgorCisyMDA0LTA4LTI2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZG9jL2Jpc29uLnRleGluZm8gKEltcGxlbWVudGluZyBMb29wcyk6IFJlbmFtZSBhcy4uLgorCShJbXBsZW1lbnRpbmcgR290b3MvTG9vcHMpOiB0aGlzLgorCisyMDA0LTA4LTEzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCUFkanVzdCB0byBsYXRlc3QgZ251bGliLgorCSogYm9vdHN0cmFwIChnbnVsaWJfbW9kdWxlcyk6IEFkZCB4YWxsb2MtZGllLgorCVNldCBMQ19BTEw9QyBzbyB0aGF0IGZpbGUgbmFtZXMgc29ydCBjb25zaXN0ZW50bHkuCisJUHJlZmVyIHRoZSBnbnVsaWIgY29waWVzIG9mIGdldHRleHQubTQsIGdsaWJjMjEubTQsCisJaW50dHlwZXNfaC5tNCwgbGliLWxkLm00LCBsaWItcHJlZml4Lm00LCBwby5tNCwgc3RkaW50X2gubTQsCisJdWludG1heF90Lm00LCB1bG9uZ2xvbmcubTQuCisJKGludGxfZmlsZXNfdG9fcmVtb3ZlKTogQWRkIGdldHRleHQubTQsIGxpYi1sZC5tNCwgbGliLXByZWZpeC5tNCwKKwlwby5tNCBzaW5jZSB3ZSBhcmUgbm93IHVzaW5nIF9nbC5tNCBpbnN0ZWFkLgorCisyMDA0LTA4LTEwICBGbG9yaWFuIEtyb2htICA8ZmxvcmlhbkBlZGFtYWlsLmZpc2hraWxsLmlibS5jb20+CisKKwkqIHNyYy9zY2FuLWFjdGlvbi5sOiBSZW1vdmUuIFNjYW5uaW5nIG9mIHNlbWFudGljIGFjdGlvbnMgaXMKKwloYW5kbGVkIGluIHNjYW4tZ3JhbS5sLgorCisyMDA0LTA4LTA3ICBGbG9yaWFuIEtyb2htICA8ZmxvcmlhbkBlZGFtYWlsLmZpc2hraWxsLmlibS5jb20+CisKKwkqIHNyYy9zY2FuLWdyYW0ubCAoaGFuZGxlX3N5bmNsaW5lKTogVXNlIHVuaXFzdHJfbmV3IG5vdCB4c3RyZHVwLgorCisJKiBzcmMvbG9jYXRpb24uaCAoc3RydWN0KTogVGhlIGZpbGUgbWVtYmVyIGlzIGEgdW5pcXN0ci4KKwkoZXF1YWxfYm91bmRhcmllcyk6IFVzZSBVTklRU1RSX0VRIGZvciBjb21wYXJpc29uLgorCisyMDA0LTA3LTIyICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCUZpeCBidWcgd2l0aCBub24tJXVuaW9uIHBhcnNlcnMgdGhhdCBoYXZlIHByaW50ZXJzIG9yIGRlc3RydWN0b3JzLAorCXdoaWNoIGxlZCB0byBhIEJpc29uIGNvcmUgZHVtcC4gIFJlcG9ydGVkIGJ5IFBldGVyIEZhbGVzIGluCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwNC0wNy9tc2cwMDAxNC5odG1sPi4KKworCSogZGF0YS9jLm00IChiNF9zeW1ib2xfYWN0aW9ucyk6IERvbid0IGFzc3VtZSAldW5pb24gd2FzIHVzZWQuCisJKiBkYXRhL2xhbHIxLmNjICh5eXN0eXBlKSBbZGVmaW5lZCBZWVNUWVBFXTogRGVmaW5lIHRvIFlZU1RZUEUsCisJbm90IHRvIG91ciBvd24gdHlwZS4KKwkqIHNyYy9vdXRwdXQuYyAoc3ltYm9sX2Rlc3RydWN0b3JzX291dHB1dCwgc3ltYm9sX3ByaW50ZXJzX291dHB1dCk6CisJRG9uJ3QgYXNzdW1lICV1bmlvbi4KKwkqIHRlc3RzL2FjdGlvbnMuYXQgKF9BVF9DSEVDS19QUklOVEVSX0FORF9ERVNUUlVDVE9SLAorCUFUX0NIRUNLX1BSSU5URVJfQU5EX0RFU1RSVUNUT1IpOiBOZXcgYXJndW1lbnQKKwlVTklPTi1GTEFHLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KKwkoX0FUX0NIRUNLX1BSSU5URVJfQU5EX0RFU1RSVUNUT1IpOiBEb24ndCBhc3N1bWUgJXVuaW9uLgorCVVzZSB0eXBlIGNoYXIsIG5vdCB1bnNpZ25lZCBpbnQsIHdoZW4gZGVjbGFyaW5nIGFuIGFycmF5IG9mIGNoYXI7CisJdGhpcyBsZXRzIHVzIHJlbW92ZSBhIGNhc3QuCisJKFByaW50ZXJzIGFuZCBEZXN0cnVjdG9ycyk6IEFkZCBub24tJXVuaW9uIHRlc3QgY2FzZXMuCisKKzIwMDQtMDYtMjEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBkb2MvYmlzb24udGV4aW5mbzogTWlub3IgZWRpdG9yaWFsIGNoYW5nZXMsIG1vc3RseSB0byB0aGUgbmV3CisJR0xSIHdyaXRldXBzLiAgRS5nLiwgYXZvaWQgZnJlbmNoc3BhY2luZyBhbmQgdGhlIGZ1dHVyZSB0ZW5zZSwKKwljaGFuZ2UgImxvb2thaGVhZCIgdG8gImxvb2stYWhlYWQiLCBhbmQgY2hhbmdlICJ3cnQiIHRvICJ3aXRoCisJcmVzcGVjdCB0byIuCisKKzIwMDQtMDYtMjEgIFBhdWwgSGlsZmluZ2VyICA8aGlsZmluZ3JAQ1MuQmVya2VsZXkuRURVPgorCisJKiBkb2MvYmlzb24udGV4aW5mbyAoTWVyZ2luZyBHTFIgUGFyc2VzLCBDb21waWxlciBSZXF1aXJlbWVudHMpOgorCU5ldyBzZWN0aW9ucywgc3BsaXQgb2ZmIGZyb20gdGhlIEdMUiBQYXJzZXJzIHNlY3Rpb24uICBQdXQgdGhlIG5ldworCVNpbXBsZSBHTFIgUGFyc2VyIG5lYXIgdGhlIHN0YXJ0IG9mIHRoZSBHTFIgc2VjdGlvbiwgZm9yIGNsYXJpdHkuCisJUmV3cml0ZSBjb25uZWN0aXZlIHRleHQuCisKKzIwMDQtMDYtMjEgIEZyYW5rIEhlY2tlbmJhY2ggIDxmcmFua0BnLW4tdS5kZT4KKworCSogZG9jL2Jpc29uLnRleGluZm8gKFNpbXBsZSBHTFIgUGFyc2Vycyk6IE5ldyBzZWN0aW9uLgorCisyMDA0LTA2LTIxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogTkVXUywgVE9ETywgZG9jL2Jpc29uLnRleGluZm86CisJVXNlICJsb29rLWFoZWFkIiBpbnN0ZWFkIG9mICJsb29rYWhlYWQiLCB0byBiZSBjb25zaXN0ZW50LgorCSogUkVGRVJFTkNFUzogRml4IGluY29ycmVjdCByZWZlcmVuY2UgdG8gRGVSZW1lciBhbmQgUGVubmVsbG8sCisJd2hpbGUgd2UncmUgZml4aW5nICJsb29rLWFoZWFkIi4KKwkqIHNyYy9jb25mbGljdHMuYyAoc2hpZnRfc2V0KTogUmVuYW1lZCBmcm9tIHNoaWZ0c2V0LgorCShsb29rX2FoZWFkX3NldCk6IFJlbmFtZWQgZnJvbSBsb29rYWhlYWRzZXQuCisJKiBzcmMvcHJpbnQuYzogTGlrZXdpc2UuCisJKiBzcmMvZ2V0YXJncy5jIChyZXBvcnRfYXJncyk6IEFkZCAibG9vay1haGVhZCIgYXMgdGhlIG5ldyBjYW5vbmljYWwKKwluYW1lIGZvciAibG9va2FoZWFkIi4KKwkocmVwb3J0X3R5cGVzLCB1c2FnZSk6IExpa2V3aXNlLgorCSogc3JjL2dldGFyZ3MuaCAocmVwb3J0X2xvb2tfYWhlYWRfdG9rZW5zKTogUmVuYW1lZCBmcm9tCisJcmVwb3J0X2xvb2thaGVhZHMuCisJKiBzcmMvbGFsci5jIChjb21wdXRlX2xvb2tfYWhlYWRfdG9rZW5zKTogUmVuYW1lZCBmcm9tCisJY29tcHV0ZV9sb29rYWhlYWRzLgorCShzdGF0ZV9sb29rX2FoZWFkX3Rva2Vuc19jb3VudCk6IFJlbmFtZWQgZnJvbSBzdGF0ZV9sb29rYWhlYWRzX2NvdW50LgorCShsb29rX2FoZWFkX3Rva2Vuc19wcmludCk6IFJlbmFtZWQgZnJvbSBsb29rYWhlYWRzX3ByaW50LgorCSogc3JjL3N0YXRlLmMgKHN0YXRlX3J1bGVfbG9va19haGVhZF90b2tlbnNfcHJpbnQpOiBSZW5hbWVkIGZyb20KKwlzdGF0ZV9ydWxlX2xvb2thaGVhZHNfcHJpbnQuCisJKiBzcmMvc3RhdGUuaDogTGlrZXdpc2UuCisJKHJlZHVjdGlvbnMubG9va19haGVhZF90b2tlbnMpOiBSZW5hbWVkIGZyb20gbG9va2FoZWFkcy4KKwkqIHRlc3RzL3RvcnR1cmUuYXQgKEFUX0RBVEFfTE9PS19BSEVBRF9UT0tFTlNfR1JBTU1BUik6IFJlbmFtZWQgZnJvbQorCUFUX0RBVEFfTE9PS0FIRUFEU19HUkFNTUFSLgorCisyMDA0LTA2LTAzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogUkVBRE1FOiBVcGRhdGUgbG9jYXRpb24gb2YgcGF0Y2hlZCBNNCBkaXN0cmlidXRpb24uCisKKzIwMDQtMDUtMzAgIEFsYmVydCBDaGluLUEtWW91bmcgIDxjaGluYUB0aGV3cml0dGVud29yZC5jb20+CisKKwlEb24ndCBhc3N1bWUgdGhlIEMrKyBjb21waWxlciB0YWtlcyB0aGUgc2FtZSBhcmd1bWVudHMgYXMgdGhlIEMgY29tcGlsZXIKKwkodHJpdmlhbCBjaGFuZ2UpLgorCSogY29uZmlndXJlLmFjIChPMENYWEZMQUdTKTogTmV3IHZhci4KKwkqIHRlc3RzL2F0bG9jYWwuaW4gKENYWEZMQUdTKTogVXNlIGl0LgorCisyMDA0LTA1LTI5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCUZpeCBzb21lICJtYWtlIGNoZWNrIiBwcm9ibGVtcyB3aXRoIEMrKyByZXBvcnRlZCBieQorCUFsYmVydCBDaGluLUEtWW91bmcgZm9yIFRydTY0IEMrKyBpbiB0aGlzIHRocmVhZDoKKwlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDQtMDUvbXNnMDAwNDkuaHRtbAorCisJKiBtNC9jeHgubTQgKEJJU09OX1RFU1RfRk9SX1dPUktJTkdfQ1hYX0NPTVBJTEVSKTogQ2hlY2sgZm9yIHN0ZDo6Y2Vyci4KKwkqIHRlc3RzL2FjdGlvbnMuYXQgKF9BVF9DSEVDS19QUklOVEVSX0FORF9ERVNUUlVDVE9SKToKKwlPdXRwdXQgdG8gYSAuY2MgZmlsZSBmb3IgQysrLCBub3QgdG8gYSAuYyBmaWxlLgorCSogdGVzdHMvY2FsYy5hdCAoQVRfQ0hFQ0tfQ0FMQyk6IExpa2V3aXNlLgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoQVRfQ0hFQ0tfREFOQ0VSKTogTGlrZXdpc2UuCisJKiB0ZXN0cy9sb2NhbC5hdCAoQVRfQ09NUElMRV9DWFgpOiBEZWZhdWx0IHRvIE9VVFBVVC5jYywgbm90IE9VVFBVVC5jLgorCisyMDA0LTA1LTI4ICBBbGJlcnQgQ2hpbi1BLVlvdW5nICA8Y2hpbmFAdGhld3JpdHRlbndvcmQuY29tPgorCisJKiB0ZXN0cy9jYWxjLmF0LCB0ZXN0cy9hY3Rpb25zLmF0OiBXb3JrYXJvdW5kIGZvciBTR0kKKwlDKysgY29tcGlsZXIuICAodHJpdmlhbCBjaGFuZ2UpCisKKzIwMDQtMDUtMjcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJU3BlbnQgYSBmZXcgaG91cnMgY2hlY2tpbmcgb3V0IHdoaWNoIHByZXJlcXVpc2l0ZSB2ZXJzaW9ucyB0aGUKKwljdXJyZW50IHNvdXJjZXMgYWN0dWFsbHkgcmVxdWlyZS4gIEkgd2VudCBhbGwgdGhlIHdheSBiYWNrIHRvCisJR2V0dGV4dCAwLjEwLjQwLCBBdXRvbWFrZSAxLjQsIGFuZCBBdXRvY29uZiAyLjU3IGFuZCBpbnZlc3RpZ2F0ZWQKKwlhIHNlZW1pbmdseSBlbmRsZXNzIHNldCBvZiBjb21iaW5hdGlvbnMgb2YgdmVyc2lvbnMgbW9yZSByZWNlbnQKKwl0aGFuIHRoYXQuICBUaGUgYm90dG9tIGxpbmUgaXMgdGhhdCB0aGUgY3VycmVudCBzb3VyY2VzIHJlcXVpcmUKKwlmYWlybHkgcmVjZW50IHZlcnNpb25zIG9mIHRoZSBidWlsZCB0b29scywgYW5kIGl0J2xsIGJlIHNvbWUgd29yaworCXRvIGNoYW5nZSB0aGlzLgorCSogY29uZmlndXJlLmFjIChBQ19QUkVSRVEpOiBJbmNyZWFzZSBmcm9tIDIuNTggdG8gMi41OS4KKwkoQU1fSU5JVF9BVVRPTUFLRSk6IEluY3JlYXNlIGZyb20gMS43IHRvIDEuOC4KKwkoQU1fR05VX0dFVFRFWFRfVkVSU0lPTik6IEluY3JlYXNlIGZyb20gMC4xMS41IHRvIDAuMTIuCisJQWRkIGNvbW1lbnRzIGV4cGxhaW5pbmcgd2h5IHRob3NlIHBhcnRpY3VsYXIgdmVyc2lvbnMgYXJlCisJY3VycmVudGx5IG5lZWRlZC4KKworCSogc3JjL3BhcnNlLWdyYW0ueSAobGxvY19kZWZhdWx0KTogUmV3cml0ZSB0byBhdm9pZCBjb21waWxlciBidWcKKwlpbiBTR0kgTUlQU3BybyA3LjQuMW0uICBQcm9ibGVtIHJlcG9ydGVkIGJ5IEFsYmVydCBDaGluLUEtWW91bmcgaW4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDA0LTA1L21zZzAwMDM3Lmh0bWw+LgorCisJKiBjb25maWd1cmUuYWMgKEFDX1BSRVJFUSk6IEJ1bXAgdG8gMi41OCwgc2luY2UgMi41NyBkb2Vzbid0IHdvcmsKKwkoaXQgZmFpbHMgd2l0aCBhIEF1dG9jb25mLXdpdGhvdXQtYWNsb2NhbC1tNCBkaWFnbm9zdGljKS4KKworMjAwNC0wNS0yNiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwkqIGNvbmZpZ3VyZS5hYyAoQU1fR05VX0dFVFRFWFRfVkVSU0lPTik6IExvd2VyIGl0IGZyb20gMC4xNC4xIHRvCisJMC4xMS41LiAgU3VnZ2VzdGVkIGJ5IEJydW5vIEhhaWJsZS4KKwkqIGJvb3RzdHJhcDogUmVtb3ZlIGdldHRleHQgdmVyc2lvbiBjaGVja2luZy4KKworCSogZG9jL2Jpc29uLnRleGluZm8gKERlY2wgU3VtbWFyeSk6IEFsc28gbWVudGlvbiB0aGF0ICV1bmlvbgorCWNhbiBkZXBlbmQgb24gcHJlcmVxdWlzaXRlIHR5cGVzLiAgUHJvYmxlbSByZXBvcnRlZCBieSBUaW0KKwlWYW4gSG9sZGVyLgorCisyMDA0LTA1LTI1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogUkVBRE1FOiBNZW50aW9uIEdOVSBtNCAxLjQgYnVncyBhbmQgQWtpbSdzIHBhdGNoZWQgdmVyc2lvbi4KKwkqIFJFQURNRS1hbHBoYTogRG9uJ3QgdGVsbCBwZW9wbGUgbm90IHRvIHBhY2thZ2UgdGhpcy4KKworCSogYm9vdHN0cmFwOiBEb24ndCBhc3N1bWUgJCguLi4pIHdvcmtzOyB1c2UgYC4uLmAgaW5zdGVhZC4KKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IFBhdWwgSGlsZmluZ2VyLiAgQWxzbywgZGlhZ25vc2Ugbm9uLUdOVQorCWdldHRleHQgYmV0dGVyLgorCisJKiBkb2MvYmlzb24udGV4aW5mbyAoRGVjbCBTdW1tYXJ5LCBCaXNvbiBPcHRpb25zKTogQ2xhcmlmeSB3aGF0J3MKKwlwdXQgaW50byB0aGUgLWQgb3V0cHV0IGZpbGUsIGFuZCBtZW50aW9uIHdoYXQgdG8gZG8gaWYgWVlTVFlQRSBpcworCWRlZmluZWQgYXMgYSBtYWNyby4KKworMjAwNC0wNS0yNCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwlVbmRvIGNoYW5nZSBtYWRlIGVhcmxpZXIgdG9kYXk6IGl0IGNhdXNlZCBhdXRvcG9pbnQgdG8gbm90IGJyaW5nCisJaW4gQUJPVVQtTkxTLiAgT3VjaC4gIEluc3RlYWQsIHN1YnN0aXR1dGUgb3VyIG93biBkaWFnbm9zdGljIGZvcgorCWF1dG9wb2ludCdzLgorCisJKiBib290c3RyYXA6IENoZWNrIHRoYXQgZ2V0dGV4dCB2ZXJzaW9uIG1hdGNoZXMgd2hhdCdzIGluCisJY29uZmlndXJlLmFjLiAgV2FybiB1c2VycyB0byBpZ25vcmUgcm9ib3RzLnR4dCBFUlJPUiA0MDQuCisJKiBib290c3RyYXA6IFVuZG8gdG9kYXkncyBlYXJsaWVyIGNoYW5nZSAobG9nZ2VkIGJlbG93KS4KKwkqIGNvbmZpZ3VyZS5hYyAoQU1fR05VX0dFVFRFWFRfVkVSU0lPTik6IExpa2V3aXNlLgorCisJVGhlIGdldHRleHQgdmVyc2lvbiBjaGVja2luZyBpcyBjYXVzaW5nIG1vcmUgdHJvdWJsZSB0aGFuIGl0J3MKKwljdXJpbmc7IHJlbW92ZSBpdC4gIFByb2JsZW0gcmVwb3J0ZWQgYnkgUGF1bCBIaWxmaW5nZXIuCisKKwkqIGJvb3RzdHJhcDogSXNzdWUgYSB3YXJuaW5nIHRoYXQgb25lIGNhbiBleHBlY3QgYSBtZXNzYWdlCisJJ0FNX0dOVV9HRVRURVhUIGlzIHVzZWQsIGJ1dCBub3QgQU1fR05VX0dFVFRFWFRfVkVSU0lPTicuCisJKiBjb25maWd1cmUuYWMgKEFNX0dOVV9HRVRURVhUX1ZFUlNJT04pOiBSZW1vdmUuCisKKzIwMDQtMDUtMjMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJRW5zdXJlIHRoYXQgdGhlIEMrKyBjb21waWxlciB1c2VkIGZvciB0ZXN0aW5nIGFjdHVhbGx5IHdvcmtzIG9uIGEKKwlzaW1wbGUgdGVzdCBwcm9ncmFtOyBpZiBub3QsIHNraXAgdGhlIEMrKy1yZWxhdGVkIHRlc3RzLiAgUHJvYmxlbQorCXJlcG9ydGVkIGJ5IFZpbiBTaGVsdG9uIGluOgorCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwNC0wNS9tc2cwMDAyNi5odG1sCisKKwkqIG00L2N4eC5tNDogTmV3IGZpbGUuCisJKiBjb25maWd1cmUuYWMgKEJJU09OX1RFU1RfRk9SX1dPUktJTkdfQ1hYX0NPTVBJTEVSKTogQWRkLgorCSogdGVzdHMvYXRsb2NhbC5pbiAoQklTT05fQ1hYX1dPUktTKTogQWRkLgorCSogdGVzdHMvbG9jYWwuYXQgKEFUX0NPTVBJTEVfQ1hYKTogVXNlIGl0LgorCisyMDA0LTA1LTIxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogZGF0YS9nbHIuYyAoeXlsbG9jKTogT3V0cHV0IHRoaXMgbWFjcm8gZXZlbiBpZiBsb2NhdGlvbnMgYXJlIG5vdAorCWJlaW5nIGdlbmVyYXRlZCwgYXMgdGhlIEdMUiBwYXJzZXIgbmVlZHMgaXQgZXZlbiBpbiB0aGF0IGNhc2UuCisJUHJvYmxlbSByZXBvcnRlZCBieSBUcm95IEEuIEpvaG5zb24KKwk8aHR0cDovL2J1Z3MuZGViaWFuLm9yZy9jZ2ktYmluL2J1Z3JlcG9ydC5jZ2k/YnVnPTE5NTk0Nj4uCisKKwkqIGNvbmZpZ3VyZS5hYyAoQUNfSU5JVCk6IFVwZGF0ZSB0byAxLjg3NWUuCisKKzIwMDQtMDUtMjEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBORVdTOiBWZXJzaW9uIDEuODc1ZC4KKwkqIGNvbmZpZ3VyZS5hYyAoQUNfSU5JVCk6IExpa2V3aXNlLgorCSogc3JjL3BhcnNlLWdyYW0uYywgc3JjL3BhcnNlLWdyYW0uaDogUmVnZW5lcmF0ZSB3aXRoIDEuODc1ZC4KKworCSogY29uZmlndXJlLmFjICgtLWVuYWJsZS1nY2Mtd2FybmluZ3MpOiBEbyBub3QgZW5hYmxlIC1Xc2hhZG93LAorCS1XbWlzc2luZy1wcm90b3R5cGVzLCBvciAtV3N0cmljdC1wcm90b3R5cGVzIGZvciBDKysuICBUaGUgY3VycmVudAorCWxhbHIxLmNjIHJ1bnMgYWZvdWwgb2YgdGhlIGZpcnN0LCBhbmQgdGhlIGxhc3QgdHdvIGFyZSBubyBsb25nZXIKKwlzdXBwb3J0ZWQgYnkgR0NDIDMuNC4wLgorCSogUkVBRE1FOiBNZW50aW9uIEdOVSBtNCAxLjQgb3IgbGF0ZXI7IG1lbnRpb24gbTQgcGF0Y2hlcy4KKwkqIEhBQ0tJTkc6IFVzZSAuL2Jvb3RzdHJhcCwgbm90ICJtYWtlIHVwZGF0ZSIgdG8gaW1wb3J0IGZvcmVpZ24gZmlsZXMuCisKKzIwMDQtMDUtMDYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJKiBzcmMvbXVzY2xlX3RhYi5jIChoYXNoX211c2NsZSk6IEFjY2VwdCBhbmQgcmV0dXJuIHNpemVfdCwgbm90CisJdW5zaWduZWQgaW50LCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGxhdGVzdCBnbnVsaWIgaGFzaCBtb2R1bGUuCisJKiBzcmMvc3RhdGUuYyAoc3RhdGVfaGFzaCwgc3RhdGVfaGFzaGVyKTogTGlrZXdpc2UuCisJKiBzcmMvc3ltdGFiLmMgKGhhc2hfc3ltYm9sLCBoYXNoX3N5bWJvbF9oYXNoZXIpOiBMaWtld2lzZS4KKwkqIHNyYy91bmlxc3RyLmMgKGhhc2hfdW5pcXN0cik6IExpa2V3aXNlLgorCisyMDA0LTA1LTAzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCSogTkVXUzogVW5lc2NhcGVkIG5ld2xpbmVzIGFyZSBubyBsb25nZXIgYWxsb3dlZCBpbiBjaGFyICYgc3RyaW5ncy4KKworCSogc3JjL3NjYW4tZ3JhbS5sICg8U0NfRVNDQVBFRF9TVFJJTkcsU0NfRVNDQVBFRF9DSEFSQUNURVIsCisJU0NfQ0hBUkFDVEVSLFNDX1NUUklORz4pOiBSZWplY3QgdW5lc2NhcGVkIG5ld2xpbmVzIGluCisJY2hhcmFjdGVyIGFuZCBzdHJpbmcgbGl0ZXJhbHMuCisJKHVuZXhwZWN0ZWRfZW5kKTogTmV3IGZ1bmN0aW9uLgorCSh1bmV4cGVjdGVkX2VvZik6IFVzZSBpdC4KKwkodW5leHBlY3RlZF9uZXdsaW5lKTogTmV3IGZ1bmN0aW9uLgorCSg8SU5JVElBTCxTQ19BRlRFUl9JREVOVElGSUVSLFNDX1BSRV9DT0RFPik6IENvYWxlc2NlIGR1cGxpY2F0ZQorCWFjdGlvbnMuCisKKwkqIE5FV1M6IERvY3VtZW50ICVleHBlY3QtcnIuCisKKwkqIGJvb3RzdHJhcCAoLS1nbnVsaWItc3JjZGlyPSosIC0tY3ZzLXVzZXI9Kik6CisJRml4IHR5cG8gYnkgcmVwbGFjaW5nICQxIHdpdGggJG9wdGlvbi4KKwlSZW1vdmUgbW9yZSAnaW50bCctcmVsYXRlZCBmaWxlcy4KKwlEb24ndCBERUZVTiBBTV9JTlRMX1NVQkRJUiB0d2ljZS4KKworCSogbGliLy5jdnNpZ25vcmU6IEFkZCBzdHJuZHVwLmguICBSZW1vdmUgbWVtY2hyLmMsIG1lbWNtcC5jLAorCW1lbXJjaHIuYywgc3RyY2FzZWNtcC5jLCBzdHJjaHIuYywgc3RycmNoci5jLCBzdHJzcG4uYywgc3RydG9sLmMsCisJc3RydG91bC5jLgorCSogbTQvLmN2c2lnbm9yZTogQWRkIGV4aXRmYWlsLm00LCBleHRlbnNpb25zLm00LCBnbnVsaWIubTQsCisJaGFyZC1sb2NhbGUubTQsIG1ic3RhdGVfdC5tNCwgc3RyZXJyb3Jfci5tNCwgc3RybmR1cC5tNCwKKwl4c3RybmR1cC5tNC4gIFJlbW92ZSBnbGliYzIxLm00LCBpbnRkaXYwLm00LCBpbnR0eXBlcy1wcmkubTQsCisJaW50dHlwZXMubTQsIGludHR5cGVzX2gubTQsIGlzYy1wb3NpeC5tNCwgbGNtZXNzYWdlLm00LAorCXN0ZGludF9oLm00LCB1aW50bWF4X3QubTQsIHVsb25nbG9uZy5tNC4KKwkqIHNyYy8uY3ZzaWdub3JlOiBBZGQgKi5vdXRwdXQuCisKKwkqIHNyYy9wYXJzZS1ncmFtLnk6IFB1dCBjb3B5cmlnaHQgbm90aWNlIGluc2lkZSAleyAlfSBzbyBpdAorCWdldHMgY29waWVkIHRvIHRoZSBvdXRwdXQgZmlsZS4KKworMjAwNC0wNC0yOCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwlHZXQgZmlsZXMgZnJvbSB0aGUgZ251bGliIGFuZCBwbyByZXBvc2l0b3JpZXMsIGluc3RlYWQgb2YgcmVseWluZworCW9uIHRoZW0gYmVpbmcgaW4gb3VyIENWUy4gIFVwZ3JhZGUgdG8gbGF0ZXN0IHZlcnNpb25zIG9mIGdudWxpYgorCWFuZCBBdXRvbWFrZS4KKworCSogTWFrZWZpbGUuYW0gKFNVQkRJUlMpOiBSZW1vdmUgbTQ7IEF1dG9tYWtlIG5vdyBkb2VzIG00LgorCSogYm9vdHN0cmFwOiBCb290c3RyYXAgZnJvbSBnbnVsaWIgYW5kIHBvIHJlcG9zaXRvcmllcy4KKwlNdWNoIG9mIHRoaXMgY29kZSB3YXMgc3RvbGVuIGZyb20gR05VIGRpZmYgYW5kIEdOVSB0YXIncyBib290c3RyYXAuCisJKiBSRUFETUUtY3ZzOiBEb2N1bWVudCB0aGVzZSBjaGFuZ2VzLiAgUmVtb3ZlIHZlcnNpb24gbnVtYmVycyBmcm9tCisJbWVudGlvbnMgb2YgYnVpbGQgdG9vbHMsIHNpbmNlIHRoZXkgY2hhbmdlIHNvIG9mdGVuLiAgTWVudGlvbiBGbGV4LgorCisJKiBjb25maWd1cmUuYWMgKEFDX0NPTkZJR19NQUNST19ESVIpOiBBZGQsIHdpdGggbTQgYXMgYXJnLgorCShnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlMpOiBBZGQuCisJKEFDX0dOVV9TT1VSQ0UsIEFDX0FJWCwgQUNfTUlOSVgpOgorCVJlbW92ZTsgbm8gbG9uZ2VyIG5lZWRlZCwgYXMgZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisJZG9lcyB0aGlzIGZvciB1cy4KKwkoQUNfSVNDX1BPU0lYKTogUmVtb3ZlOyB3ZSBubyBsb25nZXIgc3VwcG9ydCB0aGlzCisJYW5jaWVudCBPUywgYXMgaXQgZ2V0cyBpbiB0aGUgd2F5IG9mIGxhdGVzdCBBdXRvY29uZiAmIGdudWxpYi4KKwkoQUNfSEVBREVSX1NUREMpOiBSZW1vdmU6IHdlIG5vdyBhc3N1bWUgQzg5IG9yIGJldHRlci4KKwkoQUNfQ0hFQ0tfSEVBREVSU19PTkNFKTogVXNlIGluc3RlYWQgb2YgQUNfQ0hFQ0tfSEVBREVSUy4KKwlEbyBub3QgY2hlY2sgZm9yIEM4OSBoZWFkZXJzLCBleGNlcHQgZm9yIGxvY2FsZS5oIHdoaWNoIGlzIHVzZWQKKwlieSB0aGUgWWFjYyBsaWJyYXJ5IGFuZCBtdXN0IHBvcnQgdG8gSyZSIGhvc3RzLgorCShBQ19DSEVDS19GVU5DU19PTkNFKTogVXNlIGluc3RlYWQgb2YgQUNfQ0hFQ0tfRlVOQ1MuCisJRG8gbm90IGNoZWNrIGZvciBDODkgZnVuY3Rpb25zLCBleGNlcHQgZm9yIHNldGxvY2FsZSB3aGljaCBpcworCXVzZWQgYnkgdGhlIFlhY2MgbGlicmFyeS4KKwkoQUNfQ0hFQ0tfREVDTFMsIEFDX1JFUExBQ0VfRlVOQ1MpOiBSZW1vdmU7IG5vIGxvbmdlciBuZWVkZWQuCisJKGdsX0RJUk5BTUUsIGdsX0VSUk9SLCBnbF9GVU5DX0FMTE9DQSwgZ2xfRlVOQ19NRU1DSFIsCisJZ2xfRlVOQ19NRU1SQ0hSLCBnbF9GVU5DX1NUUENQWSwgZ2xfRlVOQ19TVFJOTEVOLCBnbF9GVU5DX1NUUlRPTCwKKwlnbF9HRVRPUFQsIGdsX0hBU0gsIGdsX01CU1dJRFRILCBnbF9PQlNUQUNLLCBnbF9RVU9URSwKKwlnbF9RVU9URUFSRywgZ2xfWEFMTE9DLCBqbV9GVU5DX0dMSUJDX1VOTE9DS0VEX0lPLCBqbV9GVU5DX01BTExPQywKKwlBTV9HTlVfR0VUVEVYVCk6IFJlbW92ZTsgbm93IGRvbmUgYnk6CisJKEdOVUxJQl9BVVRPQ09ORl9TTklQUEVUKTogQWRkLiAgImJvb3RzdHJhcCIgYnVpbGRzIHRoaXMgZm9yIHVzLgorCShBQ19DT05GSUdfRklMRVMpOiBSZW1vdmUgbTQvTWFrZWZpbGUsIGFzIEF1dG9tYWtlIG5vdyBkb2VzIHRoaXMKKwlmb3IgdXMuCisKKwkqIGxpYi9NYWtlZmlsZS5hbTogSW5jbHVkZSBnbnVsaWIubWssIGJ1aWx0IGZvciB1cyBieSAiYm9vdHN0cmFwIi4KKwkoQlVJTFRfU09VUkNFUywgRVhUUkFfRElTVCwgTU9TVExZQ0xFQU5GSUxFUyk6CisJRGVmaW5lIHRvIGVtcHR5LCBhcyBnbnVsaWIubWsgd2lsbCBkbyB0aGUgcmVzdCBmb3IgdXMuCisJKCQobGliYmlzb25fYV9PQkpFQ1RTKSwgc3RkYm9vbC5oKTogUmVtb3ZlLCBhcyBnbnVsaWIubWsgZG9lcyB0aGlzCisJZm9yIHVzLgorCShsaWJiaXNvbl9hX1NPVVJDRVMpOiBEZWZpbmUgdG8gJChsaWJfU09VUkNFUykgbm93LgorCShsaWJfU09VUkNFUyk6IE5ldyBzeW1ib2wsIGNvbnRhaW5pbmcgb25seSB0aGUgbm9uLWdudWxpYiBsaWJzLgorCisJKiBzcmMvZmlsZXMuYzogSW5jbHVkZSBnbnVsaWIncyB4c3RybmR1cC5oLgorCisJKiBzcmMvc3lzdGVtLmggKE1BTExPQyk6IFVzZSB4bm1hbGxvYywgZm9yIGJldHRlciBvdmVyZmxvdyBjaGVja2luZy4KKwkoUkVBTExPQyk6IFVzZSB4bnJlYWxsb2MsIGZvciBsaWtld2lzZS4KKwkoeHN0cm5kdXAsIHN0cGNweSk6IFJlbW92ZSBkZWNscywgYXMgZ251bGliIGRvZXMgdGhpcyBmb3IgdXMgbm93LgorCShzdHJubGVuLCBtZW1yY2hyKTogUmVtb3ZlIGRlY2xzOyBmdW5jdGlvbnMgbm8gbG9uZ2VyIHVzZWQuCisJSW5jbHVkZSA8c3RwY3B5Lmg+LgorCisJKiBjb25maWcvZGVwY29tcCwgY29uZmlnL2luc3RhbGwtc2gsIGxpYi9hbGxvY2EuYywgbGliL2FyZ21hdGNoLmMsCisJbGliL2FyZ21hdGNoLmgsIGxpYi9iYXNlbmFtZS5jLCBsaWIvZGlybmFtZS5jLCBsaWIvZGlybmFtZS5oLAorCWxpYi9lcnJvci5jLCBsaWIvZXJyb3IuaCwgbGliL2dldG9wdC5jLCBsaWIvZ2V0b3B0LmgsCisJbGliL2dldG9wdDEuYywgbGliL2dldHRleHQuaCwgbGliL2hhc2guYywgbGliL2hhc2guaCwKKwlsaWIvbWFsbG9jLmMsIGxpYi9tYnN3aWR0aC5jLCBsaWIvbWJzd2lkdGguaCwgbGliL21lbWNoci5jLAorCWxpYi9tZW1jbXAuYywgbGliL21lbXJjaHIuYywgbGliL29ic3RhY2suYywgbGliL29ic3RhY2suaCwKKwlsaWIvcXVvdGUuYywgbGliL3F1b3RlLmgsIGxpYi9xdW90ZWFyZy5jLCBsaWIvcXVvdGVhcmcuaCwKKwlsaWIvcmVhbGxvYy5jLCBsaWIvc3RkYm9vbF8uaCwgbGliL3N0cGNweS5jLCBsaWIvc3RyY2FzZWNtcC5jLAorCWxpYi9zdHJjaHIuYywgbGliL3N0cm5jYXNlY21wLmMsIGxpYi9zdHJubGVuLmMsIGxpYi9zdHJyY2hyLmMsCisJbGliL3N0cnNwbi5jLCBsaWIvc3RydG9sLmMsIGxpYi9zdHJ0b3VsLmMsIGxpYi91bmxvY2tlZC1pby5oLAorCWxpYi94YWxsb2MuaCwgbGliL3htYWxsb2MuYywgbGliL3hzdHJkdXAuYywgbGliL3hzdHJuZHVwLmMsCisJbTQvTWFrZWZpbGUuYW0sIG00L2FsbG9jYS5tNCwgbTQvZGlybmFtZS5tNCwgbTQvZG9zLm00LAorCW00L2Vycm9yLm00LCBtNC9nZXRvcHQubTQsIG00L2hhc2gubTQsIG00L21hbGxvYy5tNCwKKwltNC9tYnJ0b3djLm00LCBtNC9tYnN3aWR0aC5tNCwgbTQvbWVtY2hyLm00LCBtNC9tZW1jbXAubTQsCisJbTQvbWVtcmNoci5tNCwgbTQvb2JzdGFjay5tNCwgbTQvb25jZW9ubHkubTQsIG00L3ByZXJlcS5tNCwKKwltNC9xdW90ZS5tNCwgbTQvcXVvdGVhcmcubTQsIG00L3JlYWxsb2MubTQsIG00L3N0ZGJvb2wubTQsCisJbTQvc3RwY3B5Lm00LCBtNC9zdHJubGVuLm00LCBtNC9zdHJ0b2wubTQsIG00L3N0cnRvdWwubTQsCisJbTQvdW5sb2NrZWQtaW8ubTQsIG00L3hhbGxvYy5tNCwgcG8vTElOR1VBUywgcG8vTWFrZWZpbGUuaW4uaW4sCisJcG8vTWFrZXZhcnMsIHBvL2RhLnBvLCBwby9kZS5wbywgcG8vZXMucG8sIHBvL2V0LnBvLCBwby9mci5wbywKKwlwby9oci5wbywgcG8vaWQucG8sIHBvL2l0LnBvLCBwby9qYS5wbywgcG8vbXMucG8sIHBvL25sLnBvLAorCXBvL3B0X0JSLnBvLCBwby9yby5wbywgcG8vcnUucG8sIHBvL3N2LnBvLCBwby90ci5wbzoKKwlSZW1vdmUsIGFzIHRoZXNlIGZpbGVzIGFyZSBub3cgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkKKwlieSBib290c3RyYXAgb3IgYXV0b21ha2UuCisKKwkqIHBvL0NoYW5nZUxvZzogUmVtb3ZlOiBhbGwgYnV0IG9uZSBlbnRyeSB3YXMgYSBkdXBsaWNhdGUKKwlvZiB0aGlzIGZpbGUsIGFuZCBJIG1vdmVkIHRoYXQgMjAwMC0xMS0wMiBlbnRyeSBoZXJlLgorCisJKiBjb25maWcvLmN2c2lnbm9yZTogQWRkIE1ha2VmaWxlLCBkZXBjb21wLCBpbnN0YWxsLXNoLgorCSogbGliLy5jdnNpZ25vcmU6IEFkZCBhbGxvY2EuYywgYWxsb2NhLmgsIGFsbG9jYV8uaCwgYXJnbWF0Y2guYywKKwlhcmdtYXRjaC5oLCBiYXNlbmFtZS5jLCBkaXJuYW1lLmMsIGRpcm5hbWUuaCwgZXJyb3IuYywgZXJyb3IuaCwKKwlleGl0LmgsIGV4aXRmYWlsLmMsIGV4aXRmYWlsLmgsIGdldG9wdC5jLCBnZXRvcHQuaCwgZ2V0b3B0MS5jLAorCWdldG9wdF9pbnQuaCwgZ2V0dGV4dC5oLCBnbnVsaWIubWssIGhhcmQtbG9jYWxlLmMsIGhhcmQtbG9jYWxlLmgsCisJaGFzaC5jLCBoYXNoLmgsIG1hbGxvYy5jLCBtYnN3aWR0aC5jLCBtYnN3aWR0aC5oLCBtZW1jaHIuYywKKwltZW1jbXAuYywgbWVtcmNoci5jLCBvYnN0YWNrLmMsIG9ic3RhY2suaCwgcXVvdGUuYywgcXVvdGUuaCwKKwlxdW90ZWFyZy5jLCBxdW90ZWFyZy5oLCByZWFsbG9jLmMsIHN0ZGJvb2xfLmgsIHN0cGNweS5jLCBzdHBjcHkuaCwKKwlzdHJjYXNlY21wLmMsIHN0cmNoci5jLCBzdHJpcHNsYXNoLmMsIHN0cm5jYXNlY21wLmMsIHN0cm5kdXAuYywKKwlzdHJubGVuLmMsIHN0cnJjaHIuYywgc3Ryc3BuLmMsIHN0cnRvbC5jLCBzdHJ0b3VsLmMsCisJdW5sb2NrZWQtaW8uaCwgeGFsbG9jLmgsIHhtYWxsb2MuYywgeHN0cmR1cC5jLCB4c3RybmR1cC5jLAorCXhzdHJuZHVwLmguCisJKiBtNC8uY3ZzaWdub3JlOiBSZW1vdmUgTWFrZWZpbGUsIE1ha2VmaWxlLmluLiAgQWRkIGFsbG9jYS5tNCwKKwlkaXJuYW1lLm00LCBkb3MubTQsIGVycm9yLm00LCBnZXRvcHQubTQsIGhhc2gubTQsIG1icnRvd2MubTQsCisJbWJzd2lkdGgubTQsIG9ic3RhY2subTQsIG9uY2Vvbmx5Lm00LCBxdW90ZS5tNCwgcXVvdGVhcmcubTQsCisJc3RkYm9vbC5tNCwgc3RwY3B5Lm00LCBzdHJubGVuLm00LCB1bmxvY2tlZC1pby5tNCwgeGFsbG9jLm00LgorCSogcG8vLmN2c2lnbm9yZTogQWRkICoucG8sIExJTkdVQVMsIE1ha2VmaWxlLmluLmluLCBNYWtldmFycy4KKwkqIHNyYy8uY3ZzaWdub3JlOiBSZW1vdmUgKl8uYy4KKworCisJKiBNYWtlZmlsZS5tYWludCAoR1pJUF9FTlYpOiBEb24ndCB1c2UgLS1yc3luY2FibGUgaWYgZ3ppcCBkb2Vzbid0CisJc3VwcG9ydCBpdC4gIChUaGUgbGF0ZXN0IHN0YWJsZSBnemlwIGRvZXNuJ3QuKQorCisyMDA0LTA0LTI3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogZGF0YS9sYWxyMS5jYyAoUGFyc2VyOjpzdG9zXykgWyEgWVlERUJVR106IERlZmluZSBldmVuIGluIHRoaXMKKwljYXNlLCBhcyBzdG9zXyBpcyBub3cgdXNlZCBieSBkZXN0cnVjdG9ycyBkdWUgdG8gdGhlIDIwMDQtMDItMDkKKwljaGFuZ2UuCisKKwlSZW1vdmUgbW9yZSBLJlIgQyBzdXBwb3J0LgorCSogbGliL2xpYmliZXJ0eS55IChQQVJBTVMpOiBSZW1vdmUuICBBbGwgdXNlcyByZW1vdmVkLgorCSogbGliL3N1YnBpcGUuYyAoZXJybm8pOiBSZW1vdmUgZGVjbC4KKwlJbmNsdWRlIDxzdGRsaWIuaD4gdW5jb25kaXRpb25hbGx5LgorCShFWElUX0ZBSUxVUkUpOiBSZW1vdmUgbWFjcm8uCisJKiBzcmMvY29tcGxhaW4uYyAodmZwcmludGYsIHN0cmVycm9yKTogUmVtb3ZlLgorCSogc3JjL3N5c3RlbS5oOiBJbmNsdWRlIGxpbWl0cy5oLCBzdGRsaWIuaCwgc3RyaW5nLmgsIGxvY2FsZS5oCisJdW5jb25kaXRpb25hbGx5LgorCShFWElUX0ZBSUxVUkUsIEVYSVRfU1VDQ0VTUywgc2V0bG9jYWxlKTogUmVtb3ZlIGRlZm5zLgorCVVzZSBsYXRlc3QgQXV0b2NvbmYgcmVjb21tZW5kYXRpb25zIGZvciBpbmNsdWRpbmcgaW50dHlwZXMuaCwgc3RkaW50LmguCisJKHN0cmNociwgc3Ryc3BuLCBtZW1jaHIpOiBSZW1vdmUgZGVjbHMuCisJKiB0ZXN0cy9jYWxjLmF0IChfQVRfREFUQV9DQUxDX1kpOiBJbmNsdWRlIHN0ZGxpYi5oLCBzdHJpbmcuaAorCXVuY29uZGl0aW9uYWxseS4gIERvIG5vdCBkZWNsYXJlIHBlcnJvci4KKwkqIHRlc3RzL2NvbmZsaWN0cy5hdCAoJW5vbmFzc29jIGFuZCBlb2YpOiBJbmNsdWRlIHN0ZGxpYi5oCisJdW5jb25kaXRpb25hbGx5LgorCisJKiBzcmMvY29tcGxhaW4uYyAoXyk6IFJlbW92ZSB1c2VsZXNzIGRlZm4sIGFzIHN5c3RlbS5oIGRlZmluZXMgdGhpcy4KKworCSogbGliL2JpdHNldC5oIChfX0lOVF9UT19QVFIpOiBSZW1vdmU7IHdvcmthcm91bmQgbm8gbG9uZ2VyIG5lZWRlZAorCXdpdGggbGF0ZXN0IG9ic3RhY2suaC4KKwkqIGxpYi9lYml0c2V0LmMgKGViaXRzZXRfZWx0X2FsbG9jKTogRG9uJ3QgYm90aGVyIHRvIGNhc3QgYXJncworCXRvIHByb2NlZHVyZSB0eXBlcywgYXMgb2JzdGFjay5oIG5vdyBkb2VzIHRoYXQgZm9yIHVzLgorCSogbGliL2xiaXRzZXQuYyAobGJpdHNldF9lbHRfYWxsb2MpOiBMaWtld2lzZS4KKworCSogbGliL3N1YnBpcGUuaCBbSEFWRV9TWVNfVFlQRVNfSF06IEluY2x1ZGUgPHN5cy90eXBlcy5oPiwKKwlzbyB0aGF0IHRoaXMgaW5jbHVkZSBmaWxlIGNhbiBzdGFuZCBhbG9uZS4KKwkqIGxpYi9zdWJwaXBlLmM6IERvIG5vdCBpbmNsdWRlIDxzeXMvdHlwZXMuaD4sIGFzIHN1YnBpcGUuaAorCWRvZXMgdGhpcyBub3cuICBJbmNsdWRlIHN1YnBpcGUuaCBmaXJzdCBhZnRlciBjb25maWcuaCwgdG8KKwl0ZXN0IHdoZXRoZXIgaXQgY2FuIHN0YW5kIGFsb25lLgorCisJKiB0ZXN0cy9hY3Rpb25zLmF0IChfQVRfQ0hFQ0tfUFJJTlRFUl9BTkRfREVTVFJVQ1RPUik6IERvbid0CisJZGVjbGFyZSB5eWVycm9yIHdoZW4gdXNpbmcgbGFsci5jYywgYXMgR0NDIDMuNC4wIHdhcm5zIGFib3V0IHRoZQorCXVudXNlZCBkZWNsYXJhdGlvbi4KKworCSogdGVzdHMvc3luY2xpbmVzLmF0ICgldW5pb24gc3luY2ggbGluZSk6IFB1dCBhIGR1bW15IG1lbWJlciBpbgorCXRoZSB1bmlvbiwgYmVjYXVzZSBlbXB0eSB1bmlvbnMgYXJlbid0IGFsbG93ZWQgaW4gQy4gIENhdWdodAorCWJ5IEdDQyAzLjQuMC4KKworMjAwNC0wNC0xMyAgSmltIE1leWVyaW5nICA8amltQG1leWVyaW5nLm5ldD4KKworCSogc3JjL2NvbmZsaWN0cy5jIChjb25mbGljdHNfcHJpbnQpOiBDb3JyZWN0IGZvcm1hdCBzdHJpbmcgdHlwbzoKKwl1c2UgYCUlJyB0byBwcm9kdWNlIGxpdGVyYWwgYCUnLiAgKHRyaXZpYWwgY2hhbmdlKQorCisyMDA0LTAzLTMwICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogc3JjL2dldGFyZ3MuYyAodmVyc2lvbik6IFVwZGF0ZSBjb3B5cmlnaHQgeWVhciB0byAyMDA0LgorCisJKiBkYXRhL2MubTQgKGI0X2ludF90eXBlKTogVXNlICdzaG9ydCBpbnQnIHJhdGhlciB0aGFuCisJJ3Nob3J0JywgYW5kIHNpbWlsYXJseSBmb3IgJ2xvbmcnLCAndW5zaWduZWQnLCBldGMuCisJKiBkYXRhL2dsci5jIChZWVRSQU5TTEFURSwgeXljb25mbCwgeXlTeW1ib2wsIHl5SXRlbU51bSwKKwl5eWdldExSQWN0aW9ucywgeXlwcm9jZXNzT25lU3RhY2ssIHl5cmVjb3ZlclN5bnRheEVycm9yLAorCXl5X3l5cHN0YWNrLCB5eWR1bXBzdGFjayk6IExpa2V3aXNlLgorCSogZGF0YS9sYWxyMS5jYyAodXNlcl90b2tlbl9udW1iZXJfbWF4XywgdXNlcl90b2tlbl9udW1iZXJfbWF4XywKKwl0cmFuc2xhdGVfLCBzZXFfLCBbXSwgcG9wLCBTbGljZSwgcmFuZ2VfLCBvcGVyYXRvcissIG9wZXJhdG9yKz0pOgorCUxpa2V3aXNlLgorCSogZGF0YS95YWNjLmMgKGI0X2ludF90eXBlLCB5eXNzLCBZWVNUQUNLX0JZVEVTLCB5eXNpZ25lZF9jaGFyLAorCXl5X3N0YWNrX3ByaW50LCB5eXBhcnNlKTogTGlrZXdpc2UuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoUHJvbG9ndWUsIE11bHRpcGxlIFR5cGVzKTogTGlrZXdpc2UuCisJKiBsaWIvYmJpdHNldC5oIChiaXRzZXRfd29yZCwgQklUU0VUX1dPUkRfQklUUyk6IExpa2V3aXNlLgorCSogbGliL2JpdHNldC5jIChiaXRzZXRfcHJpbnQpOiBMaWtld2lzZS4KKwkqIGxpYi9iaXRzZXRfc3RhdHMuYyAoYml0c3RlX2xvZ19oaXN0b2dyYW1fcHJpbnQpOiBMaWtld2lzZS4KKwkqIGxpYi9iaXRzZXR2LXByaW50LmMgKGJpdHNldHZfbWF0cml4X2R1bXApOiBMaWtld2lzZS4KKwkqIGxpYi9iaXRzZXR2LmMgKGJpdHNldHZfZHVtcCk6IExpa2V3aXNlLgorCSogbGliL2ViaXRzZXQuYyAoRUJJVFNFVF9FTFRfQklUUywgZWJpdHNldF9lbHRfYWxsb2MpOiBMaWtld2lzZS4KKwkqIGxpYi9sYml0c2V0LmMgKExCSVRTRVRfRUxUX0JJVFMsIGxiaXRzZXRfZWx0X2FsbG9jLCBkZWJ1Z19sYml0c2V0KToKKwlMaWtld2lzZS4KKwkqIHNyYy9MUjAuYyAoYWxsb2NhdGVfaXRlbXNldHMpOiBMaWtld2lzZS4KKwkqIHNyYy9ncmFtLmggKHJ1bGVfbnVtYmVyLCBydWxlKTogTGlrZXdpc2UuCisJKiBzcmMvbGFsci5oIChnb3RvX251bWJlcik6IExpa2V3aXNlLgorCSogc3JjL251bGxhYmxlLmMgKG51bGxhYmxlX2NvbXB1dGUpOiBMaWtld2lzZS4KKwkqIHNyYy9vdXRwdXQuYyAocHJlcGFyZV9ydWxlcyk6IExpa2V3aXNlLgorCSogc3JjL3JlbGF0aW9uLmMgKHJlbGF0aW9uX3ByaW50LCByZWxhdGlvbl9kaWdyYXBoKTogTGlrZXdpc2UuCisJKiBzcmMvcmVsYXRpb24uaCAocmVsYXRpb25fbm9kZSk6IExpa2V3aXNlLgorCSogc3JjL3N0YXRlLmggKHN0YXRlX251bWJlciwgdHJhbnNpdGlvbnMsIGVycnMsIHJlZHVjdGlvbnMsCisJc3RydWN0IHN0YXRlKTogTGlrZXdpc2UuCisJKiBzcmMvc3ltdGFiLmggKHN5bWJvbF9udW1iZXIsIHN0cnVjdCBzeW1ib2wpOiBMaWtld2lzZS4KKwkqIHNyYy90YWJsZXMuYyAodmVjdG9yX251bWJlciwgdGFsbHksIGFjdGlvbl9udW1iZXIsCisJZGVmYXVsdF9nb3RvLCBnb3RvX2FjdGlvbnMpOiBMaWtld2lzZS4KKwkqIHRlc3RzL2V4aXN0aW5nLmF0IChHTlUgQ2ltIEdyYW1tYXIpOiBMaWtld2lzZS4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFdlYjJjIEFjdGlvbnMpOiBMaWtld2lzZS4KKworCSogc3JjL291dHB1dC5jIChtdXNjbGVfaW5zZXJ0X3Nob3J0X2ludF90YWJsZSk6IFJlbmFtZWQgZnJvbQorCW11c2NsZV9pbnNlcnRfc2hvcnRfdGFibGUuICBBbGwgdXNlcyBjaGFuZ2VkLgorCisyMDA0LTAzLTI1ICBQYXVsIEhpbGZpbmdlciAgPGhpbGZpbmdyQHR1bGx5LkNTLkJlcmtlbGV5LkVEVT4KKworCSogc3JjL3BhcnNlLWdyYW0ueTogRGVmaW5lIFBFUkNFTlRfRVhQRUNUX1JSLgorCShkZWNsYXJhdGlvbik6IFJlcGxhY2UgZXhwZWN0ZWRfY29uZmxpY3RzIHdpdGggZXhwZWN0ZWRfc3JfY29uZmxpY3RzLgorCUFkZCAlZXhwZWN0LXJyIHJ1bGUuCisKKwkqIHNyYy9zY2FuLWdyYW0ubDogUmVjb2duaXplICVleHBlY3QtcnIuCisKKwkqIHNyYy9jb25mbGljdHMuaCAoZXhwZWN0ZWRfc3JfY29uZmxpY3RzKTogUmVuYW1lIGZyb20KKwlleHBlY3RlZF9jb25mbGljdHMuCisJKGV4cGVjdGVkX3JyX2NvbmZsaWN0cyk6IERlY2xhcmUuCisKKwkqIHNyYy9jb25mbGljdHMuYyAoZXhwZWN0ZWRfc3JfY29uZmxpY3RzKTogUmVuYW1lIGZyb20KKwlleHBlY3RlZF9jb25mbGljdHMuCisJKGV4cGVjdGVkX3JyX2NvbmZsaWN0cyk6IERlZmluZS4KKwkoY29uZmxpY3RzX3ByaW50KTogQ2hlY2sgci9yIGNvbmZsaWN0cyBhZ2FpbnN0IGV4cGVjdGVkX3JyX2NvbmZsaWN0cworCWZvciBHTFIgcGFyc2Vycy4KKwlVc2UgZXhwZWN0ZWRfc3JfY29uZmxpY3RzIGluIHBsYWNlIG9mIGV4cGVjdGVkX2NvbmZsaWN0cy4KKwlXYXJuIGlmIGV4cGVjdGVkX3JyX2NvbmZsaWN0cyB1c2VkIGluIG5vbi1HTFIgcGFyc2VyLgorCisJKiBkb2MvYmlzb24udGV4aW5mbzogQWRkIGRvY3VtZW50YXRpb24gZm9yICVleHBlY3QtcnIuCisKKzIwMDQtMDMtMDggIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGdudS5vcmc+CisKKwlBZGQgc3VwcG9ydCBmb3IgaGV4IHRva2VuIG51bWJlcnMuICBTdWdnZXN0ZWQgYnkgT2RkIEFyaWxkIE9sc2VuIGluCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDQtMDMvbXNnMDAwMDAuaHRtbD4uCisKKwkqIE5FV1M6IERvY3VtZW50IGhleGFkZWNpbWFsIHRva2Vucywgbm8gTlVMIGJ5dGVzLCAlZGVzdHJ1Y3RvcgorCWluIGxhbHIxLmNjLgorCSogZG9jL2Jpc29uLnRleGluZm8gKFRva2VuIERlY2wpOiBBZGQgaGV4YWRlY2ltYWwgdG9rZW4gbnVtYmVycy4KKwkqIHNyYy9zY2FuLWdyYW0ubCAoc2Nhbl9pbnRlZ2VyKTogTmV3IGZ1bmN0aW9uLgorCSh7aW50fSk6IFVzZSBpdC4KKwkoMFt4WF1bMC05YWJjZGVmQUJDREVGXSspOiBOZXcgcGF0dGVybiwgdG8gc3VwcG9ydCBoZXggbnVtYmVycy4KKwkoPFNDX0VTQ0FQRURfU1RSSU5HLFNDX0VTQ0FQRURfQ0hBUkFDVEVSPiwgXFx4WzAtOWFiY2RlZkFCQ0RFRl0rLAorCWhhbmRsZV9hY3Rpb25fZG9sbGFyLCBoYW5kbGVfYWN0aW9uX2F0LCBjb252ZXJ0X3Vjbl90b19ieXRlKToKKwlTYXkgImxvbmcgaW50Iiwgbm90ICJsb25nIiwgZm9yIHVuaWZvcm1pdHkgd2l0aCBHTlUgc3R5bGUuCisKKzIwMDQtMDItMjUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiB0ZXN0cy9sb2NhbC5hdCAoQVRfQ09NUElMRSwgQVRfQ09NUElMRV9DWFgpOiBJZ25vcmUgc3Rkb3V0IGZyb20KKwljb21waWxlcnMuICBUaGlzIGZpeGVzIGEgcHJvYmxlbSB3aXRoIEludGVsJ3MgQysrIGNvbXBpbGVyIGJlaW5nCisJY2hhdHR5LCByZXBvcnRlZCBieSBHdWlkbyBUcmVudGFsYW5jaWEgaW4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDA0LTAyL21zZzAwMDMwLmh0bWw+LgorCisyMDA0LTAyLTA5ICBBbGV4YW5kcmUgRHVyZXQtTHV0eiAgPGFkbEBnbnUub3JnPgorCisJU3VwcG9ydCAlZGVzdHJ1Y3RvciBhbmQgbWVyZ2UgZXJyb3IgbG9jYXRpb25zIGluIGxhbHIxLmNjLgorCisJKiBkYXRhL2xhbHIxLmNjIChiNF9jeHhfZGVzdHJ1Y3RfZGVmKTogTmV3IG1hY3JvLgorCShQYXJzZXI6OnN0b3NfKTogRGVmaW5lIHVuY29uZGl0aW9uYWxseS4KKwkoUGFyc2VyOjpkZXN0cnVjdF8pOiBOZXcgbWV0aG9kLiAgR2VuZXJhdGUgaXRzIGJvZHkgd2l0aAorCWI0X3l5ZGVzdHJ1Y3RfZ2VuZXJhdGUuCisJKFBhcnNlcjo6ZXJyb3Jfc3RhcnRfKTogTmV3IGF0dHJpYnV0ZS4KKwkoUGFyc2VyOjpwYXJzZSkgPHl5ZXJybGFiLCB5eWVycmxhYjE+OiBDYWxsIGRlc3RydWN0XyBvbiBlcnJvbmVvdXMKKwl0b2tlbiB3aGljaCBhcmUgZGlzY2FyZGVkLgorCShQYXJzZXI6OnBhcnNlKSA8eXllcnJsYWIsIHl5ZXJyb3JsYWIsIHl5ZXJybGFiMT46IFVwZGF0ZQorCWVycm9yX3N0YXJ0XyB3aGVuIGVycm9uZW91cyB0b2tlbiBhcmUgZGlzY2FyZGVkLgorCShQYXJzZXI6OnBhcnNlKSA8eXllcnJsYWIxPjogQ29tcHV0ZSB0aGUgbG9jYXRpb24gb2YgdGhlIGVycm9yCisJdG9rZW4gc28gdGhhdCBpdCBjb3ZlcnMgYWxsIHRoZSBkaXNjYXJkZWQgdG9rZW5zLgorCSogdGVzdHMvYWN0aW9ucy5hdCAoX0FUX0NIRUNLX1BSSU5URVJfQU5EX0RFU1RSVUNUT1IpOiBBZGp1c3Qgc28KKwlpdCBjYW4gYmUgY2FsbGVkIHdpdGggYCVza2VsZXRvbiAibGFscjEuY2MiJywgYW5kIGRvIHRoYXQuCisKKzIwMDQtMDItMDIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBzcmMvTWFrZWZpbGUuYW0gKEFNX0NQUEZMQUdTKTogTmV3IG1hY3JvLiAgSXQgbWVudGlvbnMKKwkkKHRvcF9zcmNkaXIpL2xpYiBhbmQgLi4vbGliLiAgVGhpcyBmaXhlcyBhIGJ1ZyByZXBvcnRlZAorCWJ5IFBhdWwgSGlsZmluZ2VyOyB0aGUgb2xkIElOQ0xVREVTIHZhbHVlIGRpZG4ndCBtZW50aW9uIC4uL2xpYi4KKwlUaGVyZSdzIG5vIG5lZWQgdG8gbWVudGlvbiB0b3BfYnVpbGRkaXIgc2luY2UgQXV0b21ha2UgZG9lcyB0aGF0CisJZm9yIHVzLgorCShJTkNMVURFUyk6IFJlbW92ZSwgYXMgQXV0b21ha2Ugc2F5cyBpdCdzIG9ic29sZXNjZW50LgorCUNvbnRlbnRzIG1pZ3JhdGVkIGludG8gQU1fQ1BQRkxBR1MgYXMgZGVzY3JpYmVkIGFib3ZlLgorCSogbGliL01ha2VmaWxlLmFtIChJTkNMVURFUyk6IFJlbW92ZTsgb2Jzb2xlc2NlbnQuCisKKzIwMDQtMDEtMTQgIFBhdWwgSGlsZmluZ2VyICA8aGlsZmluZ3JAQ1MuQmVya2VsZXkuRURVPgorCisJKiBkYXRhL2dsci5jICh5eXRva2VuTmFtZSk6IEJ1bGxldC1wcm9vZiBhZ2FpbnN0IFlZRU1QVFkgdG9rZW4uCisJKHl5cmVwb3J0U3ludGF4RXJyb3IpOiBIYW5kbGUgY2FzZSB3aGVyZSBsb29rYWhlYWQgdG9rZW4gaXMKKwlZWUVNUFRZLgorCisyMDA0LTAxLTEzICBQYXVsIEhpbGZpbmdlciAgPEhpbGZpbmdlckBDUy5CZXJrZWxleS5FRFU+CisKKwkqIGRhdGEvZ2xyLmM6IFB1dCBjYXN0cyBvbiB1c2VzIG9mIFlZUkVBTExPQyBhbmQgWVlNQUxMT0Mgc28gdGhhdAorCXJlc3VsdGluZyBwYXJzZXJzIGFyZSBjb21waWxhYmxlIHdpdGggQysrLgorCisyMDAzLTEyLTIzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogY29uZmlnL2RlcGNvbXAsIGNvbmZpZy9pbnN0YWxsLXNoOiBTeW5jIHdpdGggQXV0b21ha2UgMS44LgorCSogc3JjL291dHB1dC5jIChvdXRwdXRfc2tlbGV0b24pOiBSZW5hbWUgbG9jYWwgdmFyLgorCSogdGVzdHMvaW5wdXQuYXQgKFRvcnR1cmluZyB0aGUgU2Nhbm5lcik6IERvbid0IHVzZSBceDAgb3IgXDAgaW4KKwlCaXNvbiB0b2tlbnMsIGFzIHRoaXMgcnVucyBhZm91bCBvZiB0aGUgMjAwMy0xMC0wNyBjaGFuZ2UgdGhhdAorCWRpc2FsbG93ZWQgTlVMIGJ5dGVzIGluIGNoYXJhY3RlciBjb25zdGFudHMgb3Igc3RyaW5nIGxpdGVyYWxzLgorCisJKiB0ZXN0cy9sb2NhbC5hdDogUmVxdWlyZSBBdXRvY29uZiAyLjU5J3MgQXV0b3Rlc3QuCisJKiB0ZXN0cy90ZXN0c3VpdGUuYXQ6IERvbid0IGluY2x1ZGUgbG9jYWwuYXQsIHNpbmNlIHdlIG5vdyBhc3N1bWUKKwlBdXRvY29uZiAyLjU5IG9yIGxhdGVyLiAgQXV0b2NvbmYgMi41OSBoYWQgc29tZSBwcm9ibGVtcyB3aXRoCisJaW5jbHVkaW5nIGl0LgorCSogdGVzdHMvTWFrZWZpbGUuYW0gKCQoVEVTVFNVSVRFKSk6IFJlbW92ZSB3YXJuaW5nIGFib3V0IGlnbm9yaW5nCisJbXVsdGlwbGUgaW5jbHVzaW9uIHdhcm5pbmdzLgorCisyMDAzLTEyLTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZG9jL2Jpc29uLnRleGluZm8gKEhvdyBDYW4gSSBSZXNldCB0aGUgUGFyc2VyKTogTW9yZSBhYm91dCBzdGFydAorCWNvbmRpdGlvbnMuCisJRnJvbSBCcnVubyBIYWlibGUuCisKKzIwMDMtMTEtMTggIEFsZXhhbmRyZSBEdXJldC1MdXR6ICA8YWRsQGdudS5vcmc+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChCaXNvbiBPcHRpb25zKTogRXNjYXBlIGBAJyBpbiBgJEAnLgorCisyMDAzLTEwLTA3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogdGVzdHMvTWFrZWZpbGUuYW0gKGNsZWFuLWxvY2FsKTogRG9uJ3QgcnVuICd0ZXN0c3VpdGUgLS1jbGVhbicKKwlpZiB0ZXN0c3VpdGUgZG9lc24ndCBleGlzdC4KKworCSogZG9jL2Jpc29uLnRleGluZm8gKFN5bWJvbHMpOiBOVUwgYnl0ZXMgYXJlIG5vdCBhbGxvd2VkIGluIHN0cmluZworCWxpdGVyYWxzLCB1bmZvcnR1bmF0ZWx5LgorCSogc3JjL3NjYW4tZ3JhbS5sICg8U0NfRVNDQVBFRF9TVFJJTkcsU0NfRVNDQVBFRF9DSEFSQUNURVI+KToKKwlDb21wbGFpbiBhYm91dCBOVUwgYnl0ZXMgaW4gY2hhcmFjdGVyIGNvbnN0YW50cyBvciBzdHJpbmcgbGl0ZXJhbHMuCisKKzIwMDMtMTAtMDUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBORVdTOiBEb24ndCBkb2N1bWVudCAlbm8tZGVmYXVsdC1wcmVjLCBhcyBpdCdzIHN0aWxsCisJdG9vIGV4cGVyaW1lbnRhbC4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvOiBEb2N1bWVudCAlbm8tZGVmYXVsdC1wcmVjIG9ubHkgaWYKKwl0aGUgZGVmYXVsdHByZWMgZmxhZyBpcyBzZXQuICBOb3JtYWxseSBpdCdzIG5vdC4KKworMjAwMy0xMC0wNCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGRhdGEvZ2xyLmMgKGI0X3Joc192YWx1ZSwgYjRfcmhzX2xvY2F0aW9uKTogWWllbGQgYQorCW5vbi1tb2RpZmlhYmxlIGx2YWx1ZSwgaW5zdGVhZCBvZiBhIG1vZGlmaWFibGUgb25lLgorCSogZG9jL2Jpc29uLnRleGluZm8gKEFjdGlvbnMpOiBEb2N1bWVudCB0aGF0ICQkIGNhbgorCWJlIGFzc2lnbmVkIHRvLiAgRG8gbm90IGNsYWltIHRoYXQgJCQgYW5kICROIGFyZQorCWFycmF5IGVsZW1lbnQgcmVmZXJlbmNlczogdXNlciBjb2RlIHNob3VsZCBub3QgcmVseSBvbiB0aGlzLgorCisyMDAzLTEwLTAxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogc3JjL3BhcnNlLWdyYW0uaCAoUEVSQ0VOVF9OT19ERUZBVUxUX1BSRUMpOiBOZXcgdG9rZW4uCisJKGdyYW1tYXJfZGVjbGFyYXRpb24pOiBVc2UgaXQuCisJKiBzcmMvc2Nhbi1ncmFtLmw6IE5ldyB0b2tlbiAlbm8tZGVmYXVsdC1wcmVjLgorCSogdGVzdHMvY29uZmxpY3RzLmF0OiBSZXZhbXAgdGVzdHMgdG8gdXNlICVuby1kZWZhdWx0LXByZWMuCisJKiBORVdTLCBkb2MvYmlzb24udGV4aW5mbzogRG9jdW1lbnQgdGhlIGFib3ZlLgorCisyMDAzLTEwLTAxICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCVZDRyBubyBsb25nZXIgc3VwcG9ydHMgbG9uZ19zdHJhaWdodF9waGFzZS4KKworCSogc3JjL3ZjZy5jLCBzcmMvdmNnLmg6IFJlbW92ZSB0aGUgaGFuZGxpbmcgb2YgbG9uZ19zdHJhaWdodF9waGFzZS4KKwkqIHNyYy9wcmludF9ncmFwaC5jIChwcmludF9ncmFwaCk6IEFkanVzdC4KKworMjAwMy0wOS0zMCAgRnJhbmsgSGVja2VuYmFjaCAgPGZyYW5rQGctbi11LmRlPgorCWFuZCBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogZG9jL2Jpc29uLnRleGluZm8gKERlY2wgU3VtbWFyeSwgQ29udGV4dHVhbCBQcmVjZWRlbmNlLAorCVRhYmxlIG9mIFN5bWJvbHMpOiBEb2N1bWVudCAlZGVmYXVsdC1wcmVjLgorCSogc3JjL3BhcnNlLWdyYW0ueSAoUEVSQ0VOVF9ERUZBVUxUX1BSRUMpOiBOZXcgdG9rZW4uCisJKGdyYW1tYXJfZGVjbGFyYXRpb24pOiBTZXQgZGVmYXVsdF9wcmVjIG9uICVkZWZhdWx0LXByZWMuCisJKiBzcmMvc2Nhbi1ncmFtLmwgKCVkZWZhdWx0LXByZWMpOiBOZXcgdG9rZW4uCisJKiBzcmMvcmVhZGVyLmggKGRlZmF1bHRfcHJlYyk6IE5ldyBmbGFnLgorCSogc3JjL3JlYWRlci5jOiBMaWtld2lzZS4KKwkocGFja2dyYW0pOiBIYW5kbGUgaXQuCisJKiB0ZXN0cy9jb25mbGljdHMuYXQgKCVkZWZhdWx0LXByZWMgd2l0aG91dCAlcHJlYywKKwklZGVmYXVsdC1wcmVjIHdpdGggJXByZWMsICVkZWZhdWx0LXByZWMgMSk6IE5ldyB0ZXN0cy4KKworMjAwMy0wOS0zMCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIHRlc3RzL3Rlc3RzdWl0ZS5hdDogSW5jbHVkZSBsb2NhbC5hdCwgbm90IGlucHV0LmF0LCBmaXhpbmcKKwlhIHR5cG8gaW4gdGhlIDIwMDMtMDgtMjUgcGF0Y2guCisKKzIwMDMtMDgtMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2xhbHIxLmNjICh5eXBhcnNlKSBbX19HTlVDX19dOiAiVXNlIiB5eWVycm9ybGFiIHRvIHBhY2lmeQorCUdDQyB3YXJuaW5ncy4KKworMjAwMy0wOC0yNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGNvbmZpZy9hbm5vdW5jZS1nZW4gKHByaW50X2NoYW5nZWxvZ19kZWx0YXMpOiBOZXV0cmFsaXplICI8IyIgYXMKKwkiPFwjIiB0byBhdm9pZCBtYWdpYyBmcm9tIEdudXMgd2hlbiBwb3N0aW5nIHBhcnRzIG9mIHRoaXMgc2NyaXB0LgorCisyMDAzLTA4LTI2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9sYWxyMS5jYyAoUGFyc2VyOjpyZXBvcnRfc3ludGF4X2Vycm9yXyk6IE5ldywgZXh0cmFjdGVkIGZyb20KKwkoUGFyc2VyOjpwYXJzZSk6IGhlcmUuCisJQWRqdXN0OiBuZXJycyBhbmQgZXJyc3RhdHVzIGlzIG5vdyByZXBsYWNlZCBieS4uLgorCShQYXJzZXI6Om5lcnJzXywgUGFyc2VyOjplcnJzdGF0dXNfKTogTmV3LgorCisyMDAzLTA4LTI1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogY29uZmlnL2Fubm91bmNlLWdlbiwgTWFrZWZpbGUuY2ZnOiBOZXcuCisJKiBNYWtlZmlsZS5hbTogQWRqdXN0LgorCSogR05VbWFrZWZpbGUsIE1ha2VmaWxlLm1haW50OiBVcGRhdGUgZnJvbSBDVlMgQXV0b2NvbmYsIGJ1dAorCWtlZXBpbmcgbG9jYWwgV0dFVCBhbmQgV0dFVEZMQUdTIG1vZGlmaWNhdGlvbnMgZnJvbSBQYXVsIEVnZ2VydC4KKworMjAwMy0wOC0yNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlXaGVuIHJlZHVjaW5nIGluaXRpYWwgZW1wdHkgcnVsZXMsIEJpc29uIHBhcnNlciByZWFkIGFuIGluaXRpYWwKKwlsb2NhdGlvbiB0aGF0IGlzIG5vdCBkZWZpbmVkLiAgVGhpcyByZXN1bHRzIGluIGdhcmJhZ2UsIGFuZCB0aGF0CisJYWZmZWN0cyBCaXNvbidzIG93biBwYXJzZXIuICBUaGVyZWZvcmUgd2UgbmVlZCAoaSkgdG8gZXh0ZW5kIEJpc29uCisJdG8gc3VwcG9ydCBhIG1lYW5zIHRvIGluaXRpYWxpemUgdGhpcyBsb2NhdGlvbiwgYW5kIChpaSkgdG8gdXNlCisJdGhpcyBDVlMgQmlzb24gdG8gZml4IENWUyBCaXNvbidzIHBhcnNlci4KKworCSogc3JjL3JlYWRlci5oLCByZWFkZXIuYyAoZXBpbG9ndWVfYXVnbWVudCk6IFJlbW92ZSwgcmVwbGFjZQorCXdpdGguLi4KKwkqIHNyYy9tdXNjbGVfdGFiLmgsIHNyYy9tdXNjbGVfdGFiLmMgKG11c2NsZV9jb2RlX2dyb3cpOiB0aGlzLgorCSogc3JjL3BhcnNlLWdyYW0ueTogQWRqdXN0LgorCSglaW5pdGlhbC1hY3Rpb24pOiBOZXcuCisJKCVlcnJvci12ZXJib3NlKTogU2luY2Ugd2UgcmVxdWlyZSBDVlMgQmlzb24sIHRoZXJlIGlzIG5vIHJlYXNvbgorCW5vdCB0byB1c2UgaXQuCisJKiBzcmMvc2Nhbi1ncmFtLmw6IEFkanVzdC4KKwkqIHNyYy9NYWtlZmlsZS5hbSAoWUFDQyk6IE5ldywgdG8gbWFrZSBzdXJlIHdlIHVzZSBvdXIgb3duIHBhcnNlci4KKwkqIGRhdGEveWFjYy5jICh5eXBhcnNlKTogVXNlIGI0X2luaXRpYWxfYWN0aW9uLgorCisyMDAzLTA4LTI1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZG9jL2Jpc29uLnRleGluZm86IERvbid0IHByb21vdGUgc3Rkb3V0IGZvciBlcnJvciBtZXNzYWdlcy4KKworMjAwMy0wOC0yNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEvbGFscjEuY2MgKFBhcnNlcjo6cmVkdWNlX3ByaW50Xyk6IFJlbW92ZSB1bnVzZWQgeXlpLgorCUZyb20gQWxleGFuZHJlIER1cmV0LUx1dHouCisKKzIwMDMtMDgtMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJVmVyc2lvbiAxLjg3NWMuCisKKzIwMDMtMDgtMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2xhbHIxLmNjIChQYXJzZXI6OnN0YWNrX3ByaW50XywgWVlfU1RBQ0tfUFJJTlQpOiBOZXcuCisJVXNlIHRoZW0uCisKKzIwMDMtMDgtMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2xhbHIxLmNjIChQYXJzZXI6OnJlZHVjZV9wcmludF8pOiBOZXcuCisJVXNlIGl0LgorCisyMDAzLTA4LTI1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCUhhdmUgbGFscjEuY2MgY2F0Y2ggd2l0aCBQYXVsIEVnZ2VydCdzIHBhdGNoIHRvIGZpeCB0aGUgaW5maW5pdGUKKwllcnJvciByZWNvdmVyeSBsb29wcy4gIFRoaXMgcGF0Y2ggaXMgYmFzZWQgb24KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwMy0wNi9tc2cwMDAwMC5odG1sPi4KKwlBbHNvLCBhdWdtZW50IHRoZSBzaW1pbGFyaXR5IGJldHdlZW4gbGFscjEuY2MgYW5kIHlhY2MuYy4KKwlOb3RlOiB0aGUgbG9jYXRpb25zIG9mIGVycm9yIHJlY292ZXJ5IHJ1bGVzIGFyZSBub3QgY29ycmVjdCB5ZXQuCisKKwkqIGRhdGEvbGFscjEuY2M6IENvbW1lbnQgY2hhbmdlcyB0byBhdWdtZW50IHRoZSBzaW1pbGFyaXR5IGJldHdlZW4KKwlsYWxyMS5jYyBhbmQgeWFjYy5jLgorCShZWUVSUk9SKTogR290byB0byB5eWVycm9ybGFiLCBub3QgeXllcnJsYWIxLgorCSh5eWVycmxhYjEpOiBSZW1vdmUsIGJ1dCB3aGVyZSBpdCB1c2VkIHRvIGJlIChub3cgdGhlIGJvdHRvbSBwYXJ0IG9mCisJeXllcnJsYWIpLCB3aGVuIGhpdHRpbmcgRU9GLCBwb3AgdGhlIHdob2xlIHN0YWNrIGhlcmUgaW5zdGVhZCBvZgorCW1lcmVseSBmYWxsaW5nIHRocm91Z2ggdGhlIGRlZmF1bHQgZXJyb3IgaGFuZGxpbmcgbWVjaGFuaXNtLgorCSh5eWVycm9ybGFiKTogTmV3IGxhYmVsLCB3aXRoIHRoZSBvbGQgY29udGVudHMgb2YgWVlFUlJPUiwKKwlwbHVzIHRoZSBmb2xsb3dpbmcgY2hhbmdlOiBwb3AgdGhlIHN0YWNrIG9mIHJocyBjb3JyZXNwb25kaW5nCisJdG8gdGhlIHByb2R1Y3Rpb24gdGhhdCBpbnZva2VkIFlZRVJST1IuICBUaGF0IGlzIGhvdyBZYWNjCisJYmVoYXZlcyAocmVxdWlyZWQgYnkgUE9TSVgpLgorCSogdGVzdHMvY2FsYy5hdCAoQVRfQ0hFQ0tfQ0FMQ19MQUxSMV9DQyk6IE5vIGxvbmdlciBleHBlY3RlZCB0bworCWZhaWwuCisKKzIwMDMtMDgtMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJVHVuZSBsb2NhbC5hdCBzbyB0aGF0IHBlb3BsZSBjYW4gImF1dG9tNHRlIC1sIGF1dG90ZXN0IGNhbGMuYXQgLW8KKwljYWxjIiBmb3IgaW5zdGFuY2UsIHRvIGV4dHJhY3QgYSBzdWIgdGVzdCBzdWl0ZS4KKworCSogdGVzdHMvdGVzdHN1aXRlLmF0OiBNb3ZlIHRoZSBpbml0aWFsaXphdGlvbiwgQXV0b3Rlc3QgdmVyc2lvbgorCXJlcXVpcmVtZW50LCBhbmQgQVRfVEVTVEVEIGludm9jYXRpb24gaW50by4uLgorCSogdGVzdHMvbG9jYWwuYXQ6IGhlcmUuCisJKiB0ZXN0cy90ZXN0c3VpdGUuYXQ6IEluY2x1ZGUgaXQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBBdXRvY29uZgorCTIuNTcuCisJKiB0ZXN0cy9NYWtlZmlsZS5hbSAoJChURVNUU1VJVEUpKTogUmVwb3J0IHRoYXQgdGhlIHdhcm5pbmcgc2hvdWxkCisJYmUgaWdub3JlLgorCisyMDAzLTA4LTA0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCVJld29yayBjb2RlIHNsaWdodGx5IHRvIGF2b2lkIGdjYyAtV3RyYWRpdGlvbmFsIHdhcm5pbmdzLgorCSogZGF0YS9nbHIuYyAoeXl1c2VyTWVyZ2UpOiBSZXR1cm4gdm9pZCwgbm90IFlZU1RZUEUuCisJVGhlIHJldHVybmVkIHZhbHVlIGlzIG5vdyBzdG9yZWQgaW4gKllZMC4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCisJKiBzcmMvb3V0cHV0LmMgKG1lcmdlX291dHB1dCk6IEFkanVzdCB0byB0aGUgYWJvdmUgY2hhbmdlLgorCisyMDAzLTA3LTI2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogZGF0YS9nbHIuYyAoWVlBU1NFUlQpOiBOZXcgbWFjcm8uCisJKHl5ZmlsbGluLCB5eWRvQWN0aW9uLCB5eWdsclJlZHVjZSwgeXlzcGxpdFN0YWNrLAorCXl5cmVzb2x2ZVN0YXRlcywgeXlwcm9jZXNzT25lU3RhY2spOgorCVVzZSBgWVlBU1NFUlQgKEZPTyk7JyByYXRoZXIgdGhhbiBgaWYgKCEgKEZPTykpIGFib3J0ICgpOycuCisJRGVyaXZlZCBmcm9tIGEgc3VnZ2VzdGlvbiBieSBGcmFuayBIZWNrZW5iYWNoLgorCisyMDAzLTA3LTI1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogZGF0YS9nbHIuYyAoeXlnbHJSZWR1Y2UpOiBEb24ndCB1c2UgQzg5IHN0cmluZyBjb25jYXRlbmF0aW9uLAorCWZvciBwb3J0YWJpbGl0eSB0byBLJlIgQyAoYWZ0ZXIgYW5zaTJrbnIsIHByZXN1bWFibHkpLiAgU2VlCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDMtMDYvbXNnMDAwNDEuaHRtbD4KKwlieSBGcmFuayBIZWNrZW5iYWNoLCB0aG91Z2ggSSBoYXZlIG9taXR0ZWQgdGhlIHN0cnVjdHVyZS1pbml0aWFsaXphdGlvbgorCXBhcnQgb2YgaGlzIGdsci1rbnIuZGlmZiBwYXRjaCBzaW5jZSBJIHJlY2FsbCB0aGF0IHRoZSBQb3J0YWJsZQorCUMgQ29tcGlsZXIgZGlkbid0IHJlcXVpcmUgdGhhdCBjaGFuZ2UuCisKKwlMZXQgdGhlIHVzZXIgc3BlY2lmeSBob3cgdG8gYWxsb2NhdGUgYW5kIGZyZWUgbWVtb3J5LgorCURlcml2ZWQgZnJvbSBhIHN1Z2dlc3Rpb24gYnkgRnJhbmsgSGVja2VuYmFjaCBpbgorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDAzLTA2L21zZzAwMDQxLmh0bWw+LgorCSogZGF0YS9nbHIuYyAoWVlGUkVFLCBZWU1BTExPQywgWVlSRUFMTE9DKTogTmV3IG1hY3Jvcy4KKwlBbGwgdXNlcyBvZiBmcmVlLCBtYWxsb2MsIHJlYWxsb2MgY2hhbmdlZCB0byB1c2UgdGhlc2UgbWFjcm9zLAorCWFuZCB1bm5lY2Vzc2FyeSBjYXN0cyByZW1vdmVkLgorCSogZGF0YS95YWNjLmMgKFlZRlJFRSwgWVlNQUxMT0MpOiBMaWtld2lzZS4KKworMjAwMy0wNy0wNiAgTWF0dGhpYXMgTWFubiAgPE1hdHRoaWFzTWFubkBnbXguZGU+CisKKwkqIGRhdGEvbGFscjEuY2MgKG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiwgY29uc3QgUG9zaXRpb24mKSk6CisJdXNlIHMuZW1wdHkoKSByYXRoZXIgdGhhbiBzID09ICIiIHRvIHRlc3QgZm9yIGVtcHR5IHN0cmluZzsgc2VlCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDMtMDcvbXNnMDAwMDMuaHRtbD4KKwkodHJpdmlhbCBjaGFuZ2UpCisKKzIwMDMtMDYtMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBjb25maWcvZGVwY29tcCwgY29uZmlnL2luc3RhbGwtc2g6IFVwZGF0ZSBmcm9tIG1hc3RlcnMuCisKKzIwMDMtMDYtMjAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBkYXRhL2dsci5jIChZWUxMT0NfREVGQVVMVCk6IFBhcmVudGhlc2l6ZSBhcmd1bWVudHMgYXMgbmVlZGVkLAorCWFuZCByZXR1cm4gcHJvcGVybHkgcGFyZW50aGVzaXplZCByZXN1bHQuCisJKiBkYXRhL2xhbGFyMS5jYyAoWVlMTE9DX0RFRkFVTFQpOiBMaWtld2lzZS4KKwkqIGRhdGEveWFjYy5jIChZWUxMT0NfREVGQVVMVCk6IExpa2V3aXNlLgorCVJlbW92ZSB1bm5lY2Vzc2FyeSBwYXJlbnRoZXNlcyBmcm9tIHVzZXMuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoTG9jYXRpb24gRGVmYXVsdCBBY3Rpb24pOiBEZXNjcmliZSB0aGUKKwljb252ZW50aW9ucyBmb3IgcGFyZW50aGVzZXMuCisKKzIwMDMtMDYtMTkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBkYXRhL2dsci5jICh5eXJlbW92ZURlbGV0ZXMsIHl5X3JlZHVjZV9wcmludCwgeXlnbHJSZWR1Y2UsCisJeXlyZXBvcnRUcmVlKTogRG8gbm90IGFzc3VtZSB0aGF0IHNpemVfdCBpcyB0aGUgc2FtZSB3aWR0aCBhcyBpbnQsCisJd2hlbiBwcmludGluZyBzaXplcy4gIFByaW50IHNpemVzIHVzaW5nIGFuIHVuc2lnbmVkIGZvcm1hdC4KKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IEZyYW5rIEhlY2tlbmJhY2ggaW4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwMy0wNi9tc2cwMDAzNS5odG1sPi4KKworCVBvcnQgdG8gRm9ydGUgRGV2ZWxvcGVyIDcgQyBjb21waWxlci4KKwkqIGRhdGEvZ2xyLmMgKHN0cnVjdCBZWUxUWVBFKTogSWYgbG9jYXRpb25zIGFyZSBub3QgYmVpbmcgdXNlZCwKKwlkZWNsYXJlIGEgc2luZ2xlIGR1bW15IG1lbWJlciwgYXMgZW1wdHkgc3RydWN0cyBkbyBub3QgY29uZm9ybQorCXRvIHRoZSBDIHN0YW5kYXJkLgorCShZWUVSUk9SLCBZWUJBQ0tVUCk6IERvIG5vdCB1c2UgImRvIHsgLi4uOyByZXR1cm4gZm9vOyB9IHdoaWxlICgwKSI7CisJdGhlIEZvcnRlIERldmVsb3BlciA3IEMgY29tcGlsZXIgY29tcGxhaW5zIHRoYXQgZW5kLW9mLWxvb3AKKwljb2RlIGlzIG5vdCByZWFjaGVkLgorCisyMDAzLTA2LTE3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogbGliL2xpYmliZXJ0eS5oIChQQVJBTVMpOiBTcGVsbCBhcmd1bWVudCBhcyBBcmdzLCBub3QgYXMgWCwgdG8KKwlhdm9pZCB3YXJuaW5ncyBmcm9tIHBpY2t5IGNvbXBpbGVycyBhYm91dCByZWRlZmluaXRpb24gb2YgUEFSQU1TLgorCisyMDAzLTA2LTE3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCVZlcnNpb24gMS44NzViLgorCisJKiBORVdTOiBEb2N1bWVudCAxLjg3NWIuCisKKwkqIGxpYi9iYml0c2V0Lmg6IERvIG5vdCBpbmNsdWRlIGNvbmZpZy5oOyB0aGF0J3MgdGhlIGluY2x1ZGVyJ3Mgam9iLgorCURvIG5vdCBpbmNsdWRlIDxzeXMvdHlwZXMuaD47IHNob3VsZG4ndCBiZSBuZWVkZWQgb24gYSBDODkgaG9zdC4KKwkqIGxpYi9iaXRzZXQuaCAoYml0c2V0X2NvbXBhdGlibGVfcCk6IEluZGVudCBhcyBwZXIgR05VIHN0YW5kYXJkLgorCURvbid0IHVzZSAnaW5kZXgnIGluIGNvbW1lbnRzLCBhcyBpdCdzIGEgYnVpbHRpbiBmbiBvbiBzb21lIGhvc3RzLgorCSogbGliL2JpdHNldF9zdGF0cy5jOiBJbmNsdWRlIGdldHRleHQuaCB1bmNvbmRpdGlvbmFsbHksIGFzCisJcGVyIHJlY2VudCBnZXR0ZXh0IG1hbnVhbCdzIHN1Z2dlc3Rpb24uCisJKiBsaWIvZWJpdHNldC5jIChlYml0c2V0X3Jlc2l6ZSwgZWJpdHNldF91bnVzZWRfY2xlYXIpOgorCVVzZSBwcm90b3R5cGVzLCBub3Qgb2xkLXN0eWxlIGRlZmluaXRpb25zLgorCSogbGliL2xiaXRzZXQuYyAobGJpdHNldF91bnVzZWRfY2xlYXIpOiBMaWtld2lzZS4KKwkqIGxpYi92Yml0c2V0LmMgKHZiaXRzZXRfcmVzaXplLCB2Yml0c2V0X29uZXMsIHZiaXRzZXRfemVybywKKwl2Yml0c2V0X2VtcHR5X3AsIHZiaXRzZXRfY29weTEsIHZiaXRzZXRfbm90LCB2Yml0c2V0X2VxdWFsX3AsCisJdmJpdHNldF9zdWJzZXRfcCwgdmJpdHNldF9kaXNqb2ludF9wLCB2Yml0c2V0X2FuZCwgdmJpdHNldF9hbmRfY21wLAorCXZiaXRzZXRfYW5kbiwgdmJpdHNldF9hbmRuX2NtcCwgdmJpdHNldF9vciwgdmJpdHNldF9vcl9jbXAsCisJdmJpdHNldF94b3IsIHZiaXRzZXRfeG9yX2NtcCwgdmJpdHNldF9hbmRfb3IsIHZiaXRzZXRfYW5kX29yX2NtcCwKKwl2Yml0c2V0X2FuZG5fb3IsIHZiaXRzZXRfYW5kbl9vcl9jbXAsIHZiaXRzZXRfb3JfYW5kLAorCXZiaXRzZXRfb3JfYW5kX2NtcCwgdmJpdHNldF9jb3B5KTogTGlrZXdpc2UuCisKKwkqIGxpYi9saWJpYmVydHkuaDogRG8gbm90IGluY2x1ZGUgY29uZmlnLmg7IHRoYXQncyB0aGUgaW5jbHVkZXIncyBqb2IuCisJRG8gbm90IGluY2x1ZGUgPHN0ZGxpYi5oPi4KKwkoUEFSQU1TKTogRGVmaW5lIHVuY29uZGl0aW9uYWxseSBmb3IgQzg5LgorCShBVFRSSUJVVEVfTk9SRVRVUk4pOiBSZW1vdmUuCisJKEFUVFJJQlVURV9VTlVTRUQpOiBEZWZpbmUgdW5jb25kaXRpb25hbGx5LgorCisJVXBncmFkZSB0byAyMDAzLTA2LTA4IGxpYmJpdHNldCwgc3VibWl0dGVkIGJ5IE1pY2hhZWwgSGF5ZXMgaW46CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDMtMDYvbXNnMDAwMDUuaHRtbD4KKwkqIGxpYi9NYWtlZmlsZS5hbSAoYml0c2V0c19zb3VyY2VzKTogQWRkIHZiaXRzZXQuYywgdmJpdHNldC5oLgorCSogbGliL3ZiaXRzZXQuYywgbGliL3ZiaXRzZXQuaDogTmV3IGZpbGVzLgorCSogbGliL2FiaXRzZXQuYywgbGliL2JiaXRzZXQuaCwgbGliL2JpdHNldC5jLCBsaWIvYml0c2V0LmgsCisJbGliL2JpdHNldF9zdGF0cy5jLCBsaWIvZWJpdHNldC5jLCBsaWIvbGJpdHNldC5jOiBJbXBvcnQKKwlmcm9tIGxpYmJpdHNldC4KKworCSogZG9jL2Jpc29uLnRleGluZm8gKEhvdyBDYW4gSSBSZXNldCB0aGUgUGFyc2VyKTogUmVuYW1lZCBmcm9tCisJYEhvdyBDYW4gSSBSZXNldCBAY29kZXt5eXBhcnNlfScsIHNpbmNlIHRleGluZm8gZG9lcyBub3QgYWxsb3cKKwlhcmJpdHJhcnkgQCBpbiBub2RlIG5hbWVzLgorCisJKiBtNC9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCB0aGUgZm9sbG93aW5nIGZpbGVzLCB3aGljaAorCXNob3VsZG4ndCBiZSBuZWVkZWQgYWNjb3JkaW5nIHRvIHRoZSBnZXR0ZXh0IDAuMTIuMSBkb2N1bWVudGF0aW9uCisJYnV0IHdoaWNoIHNlZW0gdG8gYmUgbmVlZGVkIGFueXdheTogY29kZXNldC5tNCBnbGliYzIxLm00CisJaW50ZGl2MC5tNCBpbnR0eXBlcy1wcmkubTQgaW50dHlwZXMubTQgaW50dHlwZXNfaC5tNCBpc2MtcG9zaXgubTQKKwlsY21lc3NhZ2UubTQgbmxzLm00IHBvLm00IHN0ZGludF9oLm00IHVpbnRtYXhfdC5tNCB1bG9uZ2xvbmcubTQuCisJKiBwby9NYWtlZmlsZS5pbi5pbjogVXBncmFkZSB0byBnZXR0ZXh0IDAuMTIuMSB2ZXJzaW9uLgorCisJKiBsaWIvLmN2c2lnbm9yZTogQWRkIHN0ZGJvb2wuaC4KKwkqIG00Ly5jdnNpZ25vcmU6IEFkZCBubHMubTQsIHBvLm00LgorCisJVXBncmFkZSB0byBDVlMgZ251bGliLgorCSogc3RkYm9vbF8uaDogRmlsZSByZW5hbWVkIGZyb20gc3RkYm9vbC5oLmluLgorCSogY29uZmlndXJlLmFjIChBTV9TVERCT09MX0gpOiBJbnZva2UgdGhpcyBpbnN0ZWFkIG9mCisJQUNfSEVBREVSX1NUREJPT0wuCisJKEFNX0dOVV9HRVRURVhUKTogUHV0IGJyYWNrZXRzIGFyb3VuZCBhcmdzLCBhcyBsYXRlc3QgbWFudWFsIHN1Z2dlc3RzLgorCShBTV9HTlVfR0VUVEVYVF9WRVJTSU9OKTogVXBkYXRlIHRvIDAuMTIuMS4KKwkqIGxpYi9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBzdGRib29sXy5oLgorCShNT1NUTFlDTEVBTkZJTEVTKTogTmV3IHZhci4KKwkoJChsaWJiaXNvbl9hX09CSkVDVFMpKTogRGVwZW5kIG9uICQoU1REQk9PTF9IKS4KKwkoc3RkYm9vbC5oKTogTmV3IHJ1bGUuCisJKiBsaWIvZGlybmFtZS5jLCBsaWIvZGlybmFtZS5oLCBsaWIvaGFzaC5jLCBsaWIvaGFzaC5oLAorCWxpYi9tYWxsb2MuYywgbGliL29ic3RhY2suaCwgbGliL3F1b3RlLmMsIGxpYi9yZWFsbG9jLmMsCisJbGliL3N0cmNhc2VjbXAuYywgbGliL3hhbGxvYy5oLCBtNC9hbGxvY2EubTQsIG00L29uY2Vvbmx5Lm00LAorCW00L3F1b3RlLm00OiBVcGdyYWRlIHRvIHRvZGF5J3MgZ251bGliLgorCisJKiB0ZXN0cy9jYWxjLmF0IChBVF9DSEVDS19DQUxDKTogTmV3IG9wdGlvbiBFWFBFQ1RFRC1UTy1GQUlMLgorCShBVF9DSEVDS19DQUxDX0xBTFIxX0NDKTogVXNlIGl0LCBzaW5jZSB0aGUgQysrIExBTFIgcGFyc2VyIGZhaWxzCisJdGhlIHRlc3RzIHJpZ2h0IG5vdy4KKwkqIHRlc3RzL2N4eC10eXBlLmF0IChfQVRfVEVTVF9HTFJfQ1hYVFlQRVMpOiBFbnN1cmUgeXlsZXggYW5kCisJeXllcnJvciBhcmUgZGVjbGFyZWQgYmVmb3JlIHVzZTsgQzk5IHJlcXVpcmVzIHRoaXMuCisKKzIwMDMtMDYtMDkgIFBhdWwgSGlsZmluZ2VyICA8SGlsZmluZ2VyQENTLkJlcmtlbGV5LkVEVT4KKworCSogZGF0YS9nbHIuYyAoWVlFUlJPUik6IFVwZGF0ZSBkZWZpbml0aW9uIHRvIHJlc2V0IHl5ZXJyU3RhdGUgdG8gMAorCWZpcnN0LgorCSh5eXJlY292ZXJTeW50YXhFcnJvcik6IENvcnJlY3QgdGhlIGxvZ2ljIGZvciBzZXR0aW5nIGFuZCB0ZXN0aW5nCisJeXllcnJTdGF0ZS4KKwlDb3JyZWN0IGNvbW1lbnQgb24gaGFuZGxpbmcgRU9GLgorCUFsbG93IHN0YXRlcyB3aXRoIG9ubHkgYSBkZWZhdWx0IHJlZHVjdGlvbiwgcmF0aGVyIHRoYW4gZmFpbGluZworCShJIGNhbid0IHF1aXRlIHJlY29uc3RydWN0IHdoeSB0aGVzZSB3ZXJlIG5vdCBhbGxvd2VkIGJlZm9yZSkuCisKKwlGaXhlcyB0byBhdm9pZCBwcm9ibGVtIHRoYXQgJC1OIHJ1bGVzIGluIEdMUiBwYXJzZXJzIGNhbiBjYXVzZQorCWJ1ZmZlciBvdmVycnVucywgY29ycnVwdGluZyBzdGF0ZS4KKworCSogc3JjL291dHB1dC5jIChwcmVwYXJlX3J1bGVzKTogT3V0cHV0IG1heF9sZWZ0X3NlbWFudGljX2NvbnRleHQKKwlkZWZpbml0aW9uLgorCSogc3JjL3JlYWRlci5oIChtYXhfbGVmdF9zZW1hbnRpY19jb250ZXh0KTogTmV3IHZhcmlhYmxlIGRlY2xhcmF0aW9uLgorCSogc3JjL3NjYW4tZ3JhbS5sIChtYXhfbGVmdF9zZW1hbnRpY19jb250ZXh0KTogRGVmaW5lLgorCShoYW5kbGVfYWN0aW9uX2RvbGxhcik6IFVwZGF0ZSBtYXhfbGVmdF9zZW1hbnRpY19jb250ZXh0LgorCSogZGF0YS9nbHIuYyAoWVlNQVhMRUZUKTogTmV3IGRlZmluaXRpb24uCisJKHl5ZG9BY3Rpb24pOiBJbmNyZWFzZSBzaXplIG9mIHl5cmhzVmFscyBieSBZWU1BWExFRlQuCisJKHl5cmVzb2x2ZUFjdGlvbik6IERpdHRvLgorCisJRml4ZXMgdG8gcHJvYmxlbXMgd2l0aCBsb2NhdGlvbiBoYW5kbGluZyBpbiBHTFIgcGFyc2VycyByZXBvcnRlZCBieQorCUZyYW5rIEhlY2tlbmJhY2ggKDIwMDMvMDYvMDUpLgorCisJKiBkYXRhL2dsci5jIChZWUxUWVBFKTogTWFrZSB0cml2aWFsIGlmIGxvY2F0aW9ucyBub3QgdXNlZC4KKwkoWVlSSFNMT0MpOiBBZGQgcGFyZW50aGVzZXMsIGFuZCBkZWZpbmUgb25seSBpZiBsb2NhdGlvbnMgdXNlZC4KKwkoWVlMTE9DX0RFRkFVTFQpOiBBZGQgcGFyZW50aGVzZXMsIGFuZCBnaXZlIHRyaXZpYWwgZGVmaW5pdGlvbiBpZgorCWxvY2F0aW9ucyBub3QgdXNlZC4KKwkoeXl1c2VyQWN0aW9uKTogVXNlIFlZTExPQ19ERUZBVUxUIHRvIHNldCAqeXlsb2NwLgorCSh5eWRvQWN0aW9uKTogUmVtb3ZlIHJlZHVuZGFudCBpbml0aWFsaXphdGlvbiBvZiAqeXl2YWxwIGFuZCAqeXlsb2NwLgorCisJKiB0ZXN0cy9jeHgtdHlwZS5hdDogRXhlcmNpc2UgbG9jYXRpb24gaW5mb3JtYXRpb247IHVwZGF0ZSB0ZXN0cworCXRvIGRpZmZlcmVudGlhdGUgb3V0cHV0IHdpdGggYW5kIHdpdGhvdXQgbG9jYXRpb25zLgorCVJlbW92ZSBmb3J3YXJkIGRlY2xhcmF0aW9ucyBvZiB5eWxleCBhbmQgeXllcnJvci0tLWNhdXNlZCBlcnJvcnMKKwliZWNhdXNlIGRlZmF1bHQgWVlMVFlQRSBub3QgeWV0IGRlZmluZWQuCisJQ2hhbmdlIHNlbWFudGljIGFjdGlvbnMgdG8gY29tcHV0ZSBzdHJpbmdzLCByYXRoZXIgdGhhbiBwcmludGluZworCXRoZW0gZGlyZWN0bHkgKHRvIHRlc3QgcHJvcGVyIHBhc3Npbmcgb2Ygc2VtYW50aWNzIHZhbHVlcykuICBDaGFuZ2UKKwlvdXRwdXQgdG8gcHJlZml4IG5vdGF0aW9uIGFuZCB1cGRhdGUgdGVzdCBkYXRhIGFuZCBleHBlY3RlZCByZXN1bHRzLgorCSh5eWxleCk6IFRyYWNrIGxvY2F0aW9ucy4KKwkoc3RtdE1lcmdlKTogUmV0dXJuIHZhbHVlIHJhdGhlciB0aGFuIHByaW50aW5nLCBhbmQgaW5jbHVkZSBhcmd1bWVudHMKKwlpbiB2YWx1ZS4KKworMjAwMy0wNi0wMyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwlBdm9pZCB3YXJuaW5ncyBnZW5lcmF0ZWQgYnkgR0NDIDIuOTUuNCB3aGVuIEJpc29uIGlzCisJY29uZmlndXJlZCB3aXRoIC0tZW5hYmxlLWdjYy13YXJuaW5ncy4KKwkqIGRhdGEvbGFscjEuY2MgKHl5OjpdYjRfcGFyc2VyX2NsYXNzX25hbWVbOjpwYXJzZSwKKwl5eTo6XWI0X3BhcnNlcl9jbGFzc19uYW1lWzo6dHJhbnNsYXRlXywKKwl5eTo6U3RhY2s6Om9wZXJhdG9yW10gKHVuc2lnbmVkKSwKKwl5eTo6U3RhY2s6Om9wZXJhdG9yW10gKHVuc2lnbmVkKSBjb25zdCwKKwl5eTo6U2xpY2U6Om9wZXJhdG9yW10gKHVuc2lnbmVkKSwKKwl5eTo6U2xpY2U6Om9wZXJhdG9yW10gKHVuc2lnbmVkKSBjb25zdCk6CisJUmVuYW1lIGxvY2FsIHZhcnMgdG8gYXZvaWQgd2FybmluZ3MuCisJKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdCAoSW1wcm9wZXIgaGFuZGxpbmcgb2YgZW1iZWRkZWQgYWN0aW9ucworCWFuZCAkLU4gaW4gR0xSIHBhcnNlcnMpOiBSZW1vdmUgdW51c2VkIGxvY2FsIHZhcmlhYmxlIGZyb20geXlsZXguCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChfQVRfREFUQV9EQU5DRVJfWSk6IERlY2xhcmUgeXlsZXggdG8gdGFrZQorCSh2b2lkKSBhcyBhcmcgd2hlbiBub3QgcHVyZSwgc2luY2Ugd2Ugbm93IGFzc3VtZSBDODkgd2hlbiBidWlsZGluZworCUJpc29uLiAgUGFjaWZ5IEdDQyBieSB1c2luZyBwYXJhbWV0ZXIuCisKKzIwMDMtMDYtMDIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBkYXRhL2xhbHIxLmNjICh5eTo6UG9zaXRpb246OmxpbmVzLCB5eTo6UG9zaXRpb246OmNvbHVtbnMsCisJeXk6OkxvY2F0aW9uOjpsaW5lcywgeXk6OkxvY2F0aW9uOjpjb2x1bW5zKTogUmVuYW1lIGFyZ3VtZW50cworCXRvIGF2b2lkIHNoYWRvd2luZzsgdGhpcyByZW1vdmVzIGEgd2FybmluZyBnZW5lcmF0ZWQgYnkgR0NDIDMuMy4KKworMjAwMy0wNi0wMSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwlEb24ndCBwYXNzIEMtb25seSB3YXJuaW5nIG9wdGlucyAoZS5nLiwgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucykKKwl0byBnKyssIGFzIEdDQyAzLjMgY29tcGxhaW5zIGlmIHlvdSBkbyBpdC4KKwkqIGNvbmZpZ3VyZS5hYyAoV0FSTklOR19DWFhGTEFHUyk6IE5ldyBzdWJzdC4gIFNldCBpdCB0bworCWV2ZXJ5dGhpbmcgdGhhdCBXQVJOSU5HX0NGTEFHUyBoYXMsIGV4Y2VwdCBvbWl0IHdhcm5pbmdzCisJbm90IHN1aXRhYmxlIGZvciBDKysuCisJKEFDX1BST0dfQ1hYKTogVXNlIHRoaXMgaW5zdGVhZCBvZiBBQ19DSEVDS19QUk9HUyhbQ1hYXSwgW2crK10pLgorCSogdGVzdHMvYXRsb2NhbC5pbiAoQ1hYRkxBR1MpOiBOZXcgdmFyLgorCSogdGVzdHMvbG9jYWwuYXQgKEFUX0NPTVBJTEVfQ1hYKTogVXNlIGl0IGluc3RlYWQgb2YgQ0ZMQUdTLgorCisJRml4IGEgR0xSIHBhcnNlciBidWcgSSByZXBvcnRlZCBpbiBGZWJydWFyeTsgc2VlCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDMtMDIvbXNnMDAwMDguaHRtbD4uCisJVGhlIHByb2JsZW0gd2FzIHRoYXQgR0xSIHBhcnNlcnMgZGlkIG5vdCBjb25mb3JtIHRvIHRoZSBDIHN0YW5kYXJkLAorCWJlY2F1c2UgYWN0aW9ucyBsaWtlIHsgJDEgPSAkMiArICQzOyB9IGV4cGFuZGVkIHRvIGV4cHJlc3Npb25zCisJdGhhdCBpbnZva2VkIFlZRklMTCBpbiBzZXBhcmF0ZSBzdWJleHByZXNzaW9ucywgYW5kIFlZRklMTCBhc3NpZ25lZAorCXRvIGEgbG9jYWwgdmFyaWFibGUuICBUaGUgQyBzdGFuZGFyZCBzYXlzIHRoYXQgZXhwcmVzc2lvbnMKKwlsaWtlICh2YXIgPSBmICgpKSArICh2YXIgPSBmICgpKSBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvci4KKwlBbm90aGVyIHByb2JsZW0gd2FzIHRoYXQgR0NDIHNvbWV0aW1lcyBpc3N1ZXMgd2FybmluZ3MgdGhhdAorCXl5ZmlsbCBhbmQgaXRzIHBhcmFtZXRlcnMgYXJlIHVudXNlZC4KKworCSogZGF0YS9nbHIuYyAoeXlmaWxsaW4pOiBSZW5hbWVkIGZyb20gdGhlIG9sZCB5eWZpbGwuICBNYXJrCisJYXMgcG9zc2libHkgdW51c2VkLgorCSh5eWZpbGwpOiBOZXcgZnVuY3Rpb24uCisJKFlZRklMTCk6IFVzZSBpdC4KKwkoeXl1c2VyQWN0aW9uKTogQ2hhbmdlIHR5cGUgb2YgeXlub3JtYWwgdG8gYm9vbCwgc28gdGhhdCBpdCBtYXRjaGVzCisJdGhlIG5ldyB5eWZpbGwgc2lnbmF0dXJlLiAgTWFyayBpdCBhcyBwb3NzaWJseSB1bnVzZWQuCisKKworCUZvbGxvdyB1cCBvbiBhIGJ1ZyBJIHJlcG9ydGVkIGluIEZlYnJ1YXJ5LCB3aGVyZSBhIEJpc29uLWdlbmVyYXRlZAorCXBhcnNlciBjYW4gbG9vcC4gIFByb3ZpZGUgYSB0ZXN0IGNhc2UgYW5kIGEgZml4IGZvciB5YWNjLmMuICBJCisJZG9uJ3QgaGF2ZSBhIGZpeCBmb3IgbGFscjEuY2Mgb3IgZm9yIGdsci5jLCB1bmZvcnR1bmF0ZWx5LgorCVRoZSBvcmlnaW5hbCBidWcgcmVwb3J0IGlzIGluOgorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDAzLTAyL21zZzAwMDQ0Lmh0bWw+CisKKwkqIGRhdGEveWFjYy5jIChZWUVSUk9SKTogTm93IGp1c3QgJ2dvdG8geXllcnJvcmxhYicsIHNpbmNlIHRoZQorCW1hY3JvJ3Mgc2l6ZSB3YXMgYmVjb21pbmcgdW53aWVsZHkuCisJKHl5ZXJybGFiKTogRG8gbm90IGRpc2NhcmQgYW4gZW1wdHkgbG9va2FoZWFkIHN5bWJvbCwgYXMgdGhpcworCW1pZ2h0IGRlc3Ryb3kgZ2FyYmFnZS4KKwkoeXllcnJvcmxhYik6IE5ldyBsYWJlbCwgd2l0aCB0aGUgb2xkIGNvbnRlbnRzIG9mIFlZRVJST1IsCisJcGx1cyB0aGUgZm9sbG93aW5nIGNoYW5nZTogcG9wIHRoZSBzdGFjayBvZiByaHMgY29ycmVzcG9uZGluZworCXRvIHRoZSBwcm9kdWN0aW9uIHRoYXQgaW52b2tlZCBZWUVSUk9SLiAgVGhhdCBpcyBob3cgWWFjYworCWJlaGF2ZXMsIGFuZCBQT1NJWCByZXF1aXJlcyB0aGlzIGJlaGF2aW9yLgorCSh5eWVycmxhYjEpOiBVc2UgWVlQT1BTVEFDSyBpbnN0ZWFkIG9mIGl0cyBkZWZpbmllbnMuCisJKiB0ZXN0cy9jYWxjLmF0IChfQVRfREFUQV9DQUxDX1kpOiBJbmNsdWRlIHVuaXN0ZC5oIGlmIGF2YWlsYWJsZS4KKwlEZWZpbmUgJ2FsYXJtJyB0byBkbyBub3RoaW5nIGlmIHVuaXN0ZC5oIGlzIG5vdCBhdmFpbGFibGUuCisJQWRkIGEgbmV3IHJ1bGUgImV4cDogJy0nIGVycm9yOyIgdG8gdGVzdCB0aGUgYWJvdmUgY2hhbmdlIHRvCisJZGF0YS95YWNjLmMuICBVc2UgJ2FsYXJtJyB0byBhYm9ydCBhbnkgdGVzdCB0YWtpbmcgbG9uZ2VyIHRoYW4KKwkxMCBzZWNvbmRzLCBhcyBpdCdzIHByb2JhYmx5IGxvb3BpbmcuCisJKEFUX0NIRUNLX0NBTEMpOiBUZXN0IHJlY292ZXJ5IGZyb20gZXJyb3IgaW4gbmV3IGdyYW1tYXIgcnVsZS4KKwlBbHNvLCB0aGUgbmV3IHlhY2MuYyBnZW5lcmF0ZXMgdHdvIGZld2VyIGRpYWdub3N0aWNzIGZvciBhbgorCWV4aXN0aW5nIHRlc3QuCisKKzIwMDMtMDUtMjQgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBkYXRhL2dsci5jIChZWVNUQUNLRVhQQU5EQUJMRSk6IERvIG5vdCBldmFsdWF0ZQorCVlZU1RZUEVfSVNfVFJJVklBTCBvciBZWVNUWVBFX0lTX1RSSVZJQUwgdW5sZXNzIHRoZXkgYXJlIGRlZmluZWQuCisJVGhpcyBmaXhlcyBhIHByb2JsZW0gcmVwb3J0ZWQgYnkgSm9obiBCb3dtYW4gd2hlbiB0aGUgQ29tcGFxL0hQCisJQWxwaGEgY3h4IGNvbXBpbGVyIGhhcHB5IChlLmcuIHVzaW5nIGN4eCAtRF9fVVNFX1NURF9JT1NUUkVBTQorCS1hbnNpIC1XYWxsIC1nYWxsKS4KKwkqIGRhdGEveWFjYy5jICh1bmlvbiB5eWFsbG9jKTogTGlrZXdpc2UuCisJKFlZQ09QWSk6IERvIG5vdCBldmFsdWF0ZSBfX0dOVUNfXyB1bmxlc3MgaXQgaXMgZGVmaW5lZC4KKworCVN3aXRjaCBmcm9tICdpbnQnIHRvICdib29sJyB3aGVyZSB0aGF0IG1ha2VzIHNlbnNlLgorCisJKiBsaWIvYWJpdHNldC5jIChhYml0c2V0X3Rlc3QsIGFiaXRzZXRfZW1wdHlfcCwgYWJpdHNldF9lcXVhbF9wLAorCWFiaXRzZXRfc3Vic2V0X3AsIGFiaXRzZXRfZGlzam9pbnRfcCwgYWJpdHNldF9hbmRfY21wLAorCWFiaXRzZXRfYW5kbl9jbXAsIGFiaXRzZXRfb3JfY21wLCBhYml0c2V0X3hvcl9jbXAsIGFiaXRzZXRfYW5kX29yLAorCWFiaXRzZXRfYW5kX29yX2NtcCwgYWJpdHNldF9hbmRuX29yX2NtcCwgYWJpdHNldF9vcl9hbmRfY21wKToKKwlSZXR1cm4gb3IgYWNjZXB0IGJvb2wsIG5vdCBpbnQuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgorCSogbGliL2JiaXRzZXQuaDogKGJpdHNldF90b2dnbGVfLCBiaXRzZXRfY29weV8sIGJpdHNldF9hbmRfb3JfY21wXywKKwliaXRzZXRfYW5kbl9vcl9jbXBfLCBiaXRzZXRfb3JfYW5kX2NtcF8pOiBMaWtld2lzZS4KKwkqIGxpYi9iaXRzZXQuYyAoYml0c2V0X29ubHlfc2V0X3AsIGJpdHNldF9wcmludCwgYml0c2V0X3RvZ2dsZV8sCisJYml0c2V0X2NvcHlfLCBiaXRzZXRfb3A0X2NtcCwgYml0c2V0X2FuZF9vcl9jbXBfLCBiaXRzZXRfYW5kbl9vcl9jbXBfLAorCWJpdHNldF9vcl9hbmRfY21wXyk6IExpa2V3aXNlLgorCSogbGliL2JpdHNldC5oIChiaXRzZXRfdGVzdCwgYml0c2V0X29ubHlfc2V0X3ApOiBMaWtld2lzZS4KKwkqIGxpYi9iaXRzZXRfc3RhdHMuYyAoYml0c2V0X3N0YXRzX3ByaW50LCBiaXRzZXRfc3RhdHNfdG9nZ2xlLAorCWJpdHNldF9zdGF0c190ZXN0LCBiaXRzZXRfc3RhdHNfZW1wdHlfcCwgYml0c2V0X3N0YXRzX2Rpc2pvaW50X3AsCisJYml0c2V0X3N0YXRzX2VxdWFsX3AsIGJpdHNldF9zdGF0c19zdWJzZXRfcCwgYml0c2V0X3N0YXRzX2FuZF9jbXAsCisJYml0c2V0X3N0YXRzX2FuZG5fY21wLCBiaXRzZXRfc3RhdHNfb3JfY21wLCBiaXRzZXRfc3RhdHNfeG9yX2NtcCwKKwliaXRzZXRfc3RhdHNfYW5kX29yX2NtcCwgYml0c2V0X3N0YXRzX2FuZG5fb3JfY21wLAorCWJpdHNldF9zdGF0c19vcl9hbmRfY21wKTogTGlrZXdpc2UuCisJKiBsaWIvZWJpdHNldC5jIChlYml0c2V0X2VsdF96ZXJvX3AsIGViaXRzZXRfZXF1YWxfcCwgZWJpdHNldF9jb3B5X2NtcCwKKwllYml0c2V0X3Rlc3QsIGViaXRzZXRfZW1wdHlfcCwgZWJpdHNldF9zdWJzZXRfcCwgZWJpdHNldF9kaXNqb2ludF9wLAorCWViaXRzZXRfb3AzX2NtcCwgZWJpdHNldF9hbmRfY21wLCBlYml0c2V0X2FuZG5fY21wLCBlYml0c2V0X29yX2NtcCwKKwllYml0c2V0X3hvcl9jbXApOiBMaWtld2lzZS4KKwkqIGxpYi9sYml0c2V0LmMgKGxiaXRzZXRfZWx0X3plcm9fcCwgbGJpdHNldF9lcXVhbF9wLCBsYml0c2V0X2NvcHlfY21wLAorCWxiaXRzZXRfdGVzdCwgbGJpdHNldF9lbXB0eV9wLCBsYml0c2V0X3N1YnNldF9wLCBsYml0c2V0X2Rpc2pvaW50X3AsCisJbGJpdHNldF9vcDNfY21wLCBsYml0c2V0X2FuZF9jbXAsIGxiaXRzZXRfYW5kbl9jbXAsIGxiaXRzZXRfb3JfY21wLAorCWxiaXRzZXRfeG9yX2NtcCk6IExpa2V3aXNlLgorCSogbGliL2JiaXRzZXQuaDogSW5jbHVkZSA8c3RkYm9vbC5oPi4KKwkoc3RydWN0IGJpdHNldF92dGFibGUpOiBUaGUgZm9sbG93aW5nIG1lbWJlcnMgbm93IHJldHVybiBib29sLCBub3QKKwlpbnQ6IHRvZ2dsZSwgdGVzdCwgZW1wdHlfcCwgZGlzam9pbnRfcCwgZXF1YWxfcCwgc3Vic2V0X3AsCisJYW5kX2NtcCwgYW5kbl9jbXAsIG9yX2NtcCwgeG9yX2NtcCwgYW5kX29yX2NtcCwgYW5kbl9vcl9jbXAsCisJb3JfYW5kX2NtcCkuCisJKiBzcmMvY29uZmxpY3RzLmMgKGNvdW50X3JyX2NvbmZsaWN0cyk6IExpa2V3aXNlLgorCSogbGliL2JpdHNldF9zdGF0cy5oIChiaXRzZXRfc3RhdHNfZW5hYmxlZCk6IE5vdyBib29sLCBub3QgaW50LgorCUFsbCB1c2VzIGNoYW5nZWQuCisJKiBsaWIvZWJpdHNldC5jIChlYml0c2V0X29ic3RhY2tfaW5pdCk6IExpa2V3aXNlLgorCSogbGliL2xiaXRzZXQuYyAobGJpdHNldF9vYnN0YWNrX2luaXQpOiBMaWtld2lzZS4KKwkqIHNyYy9nZXRhcmdzLmMgKGRlYnVnX2ZsYWcsIGRlZmluZXNfZmxhZywgbG9jYXRpb25zX2ZsYWcsCisJbm9fbGluZXNfZmxhZywgbm9fcGFyc2VyX2ZsYWcsIHRva2VuX3RhYmxlX2ZsYWcsIHlhY2NfZmxhZywKKwlncmFwaF9mbGFnKTogTGlrZXdpc2UuCisJKiBzcmMvZ2V0YXJncy5oIChkZWJ1Z19mbGFnLCBkZWZpbmVzX2ZsYWcsIGxvY2F0aW9uc19mbGFnLAorCW5vX2xpbmVzX2ZsYWcsIG5vX3BhcnNlcl9mbGFnLCB0b2tlbl90YWJsZV9mbGFnLCB5YWNjX2ZsYWcsCisJZ3JhcGhfZmxhZyk6IExpa2V3aXNlLgorCSogc3JjL291dHB1dC5jIChlcnJvcl92ZXJib3NlKTogTGlrZXdpc2UuCisJKiBzcmMvb3V0cHV0LmggKGVycm9yX3ZlcmJvc2UpOiBMaWtld2lzZS4KKwkqIHNyYy9yZWFkZXIuYyAoc3RhcnRfZmxhZywgdHlwZWQpOiBMaWtld2lzZS4KKwkqIHNyYy9yZWFkZXIuaCAodHlwZWQpOiBMaWtld2lzZS4KKwkqIHNyYy9nZXRhcmdzLmMgKExPQ0FUSU9OU19PUFRJT04pOiBOZXcgY29uc3RhbnQuCisJKGxvbmdfb3B0aW9ucywgZ2V0YXJncyk6IFVzZSBpdC4KKwkqIHNyYy9sYWxyLmMgKGJ1aWxkX3JlbGF0aW9ucyk6IFVzZSBib29sLCBub3QgaW50LgorCSogc3JjL251bGxhYmxlLmMgKG51bGxhYmxlX2NvbXB1dGUpOiBMaWtld2lzZS4KKwkqIHNyYy9wcmludC5jIChwcmludF9yZWR1Y3Rpb25zKTogTGlrZXdpc2UuCisJKiBzcmMvdGFibGVzLmMgKGFjdGlvbl9yb3csIHBhY2tfdmVjdG9yKTogTGlrZXdpc2UuCisJKiBzcmMvbXVzY2xlX3RhYi5oIChNVVNDTEVfSU5TRVJUX0JPT0wpOiBOZXcgbWFjcm8uCisJKiBzcmMvb3V0cHV0LmMgKHByZXBhcmUpOiBVc2UgaXQuCisJKiBzcmMvb3V0cHV0LmMgKHRva2VuX2RlZmluaXRpb25zX291dHB1dCwKKwlzeW1ib2xfZGVzdHJ1Y3RvcnNfb3V0cHV0LCBzeW1ib2xfZGVzdHJ1Y3RvcnNfb3V0cHV0KTogVXNlIHN0cmluZywKKwlub3QgYm9vbGVhbiBpbnRlZ2VyLCB0byBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgdG8gb3V0cHV0IHNlcGFyYXRvci4KKwkqIHNyYy9wcmludF9ncmFwaC5jIChwcmludF9jb3JlKTogTGlrZXdpc2UuCisJKiBzcmMvc3RhdGUuYyAoc3RhdGVfcnVsZV9sb29rYWhlYWRzX3ByaW50KTogTGlrZXdpc2UuCisKKwkqIGNvbmZpZy9pbnN0YWxsLXNoOiBTeW5jIGZyb20gYXV0b21ha2UgMS43LjUuCisKKzIwMDMtMDUtMTQgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBzcmMvcGFyc2UtZ3JhbS55IChydWxlc19vcl9ncmFtbWFyX2RlY2xhcmF0aW9uKTogUmVxdWlyZSBhCisJc2VtaWNvbG9uIGFmdGVyIGEgZ3JhbW1hciBkZWNsYXJhdGlvbiwgaW4gdGhlIGludGVyZXN0IG9mIHBvc3NpYmxlCisJZnV0dXJlIGNoYW5nZXMgdG8gdGhlIEJpc29uIGlucHV0IGxhbmd1YWdlLgorCURvIG5vdCBhbGxvdyBhIHN0cmF5IHNlbWljb2xvbiBhdCB0aGUgc3RhcnQgb2YgdGhlIGdyYW1tYXIuCisJKHJoc2VzLjEpOiBBbGxvdyBvbmUgb3IgbW9yZSBzZW1pY29sb25zIGFmdGVyIGFueSBydWxlLCBpbmNsdWRpbmcKKwlqdXN0IGJlZm9yZSAifCIgYXMgcmVxdWlyZWQgYnkgUE9TSVguCisJKiB0ZXN0cy9pbnB1dC5hdCAoVG9ydHVyaW5nIHRoZSBTY2FubmVyKTogQWRkIHRlc3RzIGZvciAiO3wiIGluIGEKKwlncmFtbWFyLgorCisyMDAzLTA1LTE0ICBBbGV4YW5kcmUgRHVyZXQtTHV0eiAgPGFkbEBnbnUub3JnPgorCisJJXBhcnNlLXBhcmFtIHN1cHBvcnQgZm9yIGxhbHIxLmNjLgorCisJKiBkYXRhL2xhbHIxLmNjIChiNF9wYXJzZV9wYXJhbV9kZWNsLCBiNF9wYXJzZV9wYXJhbV9jb25zLAorCWI0X2NjX2NvbnN0cnVjdG9yX2NhbGxzLCBiNF9jY19jb25zdHJ1Y3Rvcl9jYWxsLAorCWI0X3BhcnNlX3BhcmFtX3ZhcnMsIGI0X2NjX3Zhcl9kZWNscywgYjRfY2NfdmFyX2RlY2wpOiBOZXcgbTQKKwlkZWZpbml0aW9ucy4KKwkoeXk6OmI0X3BhcnNlcl9jbGFzc19uYW1lOjpiNF9wYXJzZXJfY2xhc3NfbmFtZSk6IFRha2UgZXh0cmEKKwlwYXJzZS1wYXJhbSBhcmd1bWVudHMuCisJKHl5OjpiNF9wYXJzZXJfY2xhc3NfbmFtZSk6IERlY2xhcmUgaW5zdGFuY2UgdmFyaWFibGVzIHRvCisJaG9sZCBwYXJzZS1wYXJhbSBhcmd1bWVudHMuCisJKiB0ZXN0cy9jYWxjLmF0OiBzL3ZhbHVlL3NlbWFudGljX3ZhbHVlLyBiZWNhdXNlIHZhbHVlIGNsYXNoZXMKKwl3aXRoIGEgbWVtYmVyIG9mIHl5OjpiNF9wYXJzZXJfY2xhc3NfbmFtZS4gIEFkanVzdCBDKysgY29kZQorCXRvIGhhbmRsZSAlcGFyc2UtcGFyYW0uICBFbmFibGUgJXBhcnNlLXBhcmFtIHRlc3QgaW4gQysrLgorCisyMDAzLTA1LTEyICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogZG9jL2Jpc29uLnRleGluZm8gKEhvdyBDYW4gSSBSZXNldCBAY29kZXt5eXBhcnNlfSk6IFJld29yZCB0aGUKKwlFbmdsaXNoIGEgYml0LiAgRml4IGZjbG9zZSB0eXBvLiAgQ2hhbmdlICJjb25zdCBjaGFyIiB0byAiY2hhcgorCWNvbnN0IiwgYW5kIHVzZSBBTlNJIEMgcmF0aGVyIHRoYW4gSyZSIGZvciAibWFpbiIuICBTdWdnZXN0CisJWVlfRkxVU0hfQlVGRkVSIG92ZXIgeXlyZXN0YXJ0IChhcyB0aGF0IGlzIHdoYXQgRmxleCByZWNvbW1lbmRzKQorCWFuZCBzdWdnZXN0IHl5X3N3aXRjaF90b19idWZmZXIuCisKKzIwMDMtMDUtMDUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBsaWIvYml0c2V0LmggKF9fSU5UX1RPX1BUUik6IERlZmluZSB0byBhIHZhbHVlIHRoYXQgcHJlc3VtZXMKKwlDODkuICBUaGlzIGF2b2lkcyBhIGRpYWdub3N0aWMgb24gY29tcGlsZXJzIHRoYXQgZGVmaW5lIF9fU1REQ19fCisJdG8gMCwgZml4aW5nIGEgcHJvYmxlbSB3aXRoIFRydTY0IGNjIHJlcG9ydGVkIGJ5IE1hcnRpbiBNb2tyZWpzIGluCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwMy0wNC9tc2cwMDA0MS5odG1sPi4KKworMjAwMy0wNS0wMyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGxpYi9iaXRzZXQuaCAoQklUU0VUX0ZPUl9FQUNILCBCSVRTRVRfRk9SX0VBQ0hfUkVWRVJTRSk6CisJRG8gbm90IG92ZXJydW4gYXJyYXkgYm91bmRzLgorCVRoaXMgc2hvdWxkIGZpeCBhIGJ1ZyByZXBvcnRlZCB0b2RheSBieSBPbGF0dW5qaSBPbHV3YWJ1a3VubWkgaW4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAzLTA1L21zZzAwMDA0Lmh0bWw+LgorCisyMDAzLTA0LTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2dyYW0uaCwgc3JjL2dyYW0uYyAocHVyZV9wYXJzZXIsIGdscl9wYXJzZXIpOiBNb3ZlIHRvLi4uCisJKiBzcmMvZ2V0YXJncy5jLCBzcmMvZ2V0YXJncy5oOiBoZXJlLCBhcyBib29sLCBub3QgaW50LgorCShub25kZXRlcm1pbmlzdGljX3BhcnNlcik6IE5ldy4KKwkqIHNyYy9wYXJzZS1ncmFtLnksIHNyYy9zY2FuLWdyYW0ubDogU3VwcG9ydAorCSVub25kZXRlcm1pbmlzdGljLXBhcnNlci4KKwkqIHNyYy9vdXRwdXQuYyAocHJlcGFyZSk6IFVzZSBub25kZXRlcm1pbmlzdGljX3BhcnNlciBpbnN0ZWFkCisJb2YgZ2xyX3BhcnNlciB3aGVyZSBhcHByb3ByaWF0ZS4KKwkqIHNyYy90YWJsZXMuYyAoY29uZmxpY3Rfcm93LCBhY3Rpb25fcm93LCBzYXZlX3JvdykKKwkodG9rZW5fYWN0aW9ucywgdG9rZW5fYWN0aW9ucywgcGFja192ZWN0b3IpOiBEaXR0by4KKworMjAwMy0wNC0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChDKysgUGFyc2VycywgSW1wbGVtZW50aW5nIExvb3BzKTogTmV3LgorCisyMDAzLTA0LTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogdGVzdHMvY2FsYy5hdDogQWxzbyB0ZXN0IHlhY2MuYyBhbmQgZ2xyLmMgKGJ1dCBub3QgbGFscjEuY2MgeWV0KQorCXdpdGggJXB1cmUtcGFyc2VyIGFuZCAlbG9jYXRpb25zIHRvIGV4ZXJjaXNlIHRoZSBwYXRjaCBmcm9tIFlha292CisJTWFya292aXRjaCBiZWxvdy4KKworMjAwMy0wNC0yOCAgVGltIFZhbiBIb2xkZXIgPHRpbS52YW4uaG9sZGVyQHBhbmRvcmEuYmU+CisKKwkqIGRhdGEveWFjYy5jOiAoYjRfbGV4X3BhcmFtKTogQ29ycmVjdGVkIGZvciB0aGUgY2FzZSB3aGVyZQorCSVsZXgtcGFyYW0gaXMgcHJvdmlkZWQgYW5kICVwdXJlLXBhcnNlciBpc24ndC4KKworMjAwMy0wNC0yNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwlBdm9pZCBnY2MgLVd1bmRlZiB3YXJuaW5ncyByZXBvcnRlZCBieSBHZXJhbGQgUGZlaWZlciBpbgorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDMtMDQvbXNnMDAwNDQuaHRtbD4uCisJKiBkYXRhL3lhY2MuYyAoWVlTVEFDS19BTExPQyk6IERvbid0IGV2YWx1YXRlIFlZU1RBQ0tfVVNFX0FMTE9DQQorCWlmIGl0IGlzIG5vdCBkZWZpbmVkLgorCShZWU1BWERFUFRIKTogRG9uJ3QgZXZhbHVhdGUgWVlNQVhERVBUSCBpZiBpdCBpcyBub3QgZGVmaW5lZC4KKworMjAwMy0wNC0yNiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGRhdGEvbGFscjEuY2MgKHl5OjpQYXJzZXI6OnBhY3RfbmluZl8sIHl5OjpQYXJzZXI6OnRhYmxlX25pbmZfKToKKwlEZWNsYXJlIHRvIGJlIG9mIHR5cGUgc3VpdGFibGUgZm9yIHRoZSBuaW5mIHZhbHVlIGl0c2VsZiwgbm90IG9mCisJdHlwZSBzdWl0YWJsZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgdGFibGUsIHNpbmNlIHRoZSBsYXR0ZXIgbWlnaHQKKwliZSB1bnNpZ25lZCBidXQgdGhlIG5pbmYgdmFsdWUgbWlnaHQgYmUgbmVnYXRpdmUuICBUaGlzIGZpeGVzIGEKKwlidWcgcmVwb3J0ZWQgYnkgQWxleGFuZHJlIER1cmV0LUx1dHogaW4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAzLTA0L21zZzAwMDE3Lmh0bWw+LgorCisJKiBjb25maWd1cmUuYWMgKEFDX0ZVTkNfRVJST1JfQVRfTElORSk6IFJlbW92ZSwgc2luY2UgZ2xfRVJST1IKKwlpbnZva2VzIGl0LiAgV2Ugc2hvdWxkbid0IGludm9rZSBpdCB0d2ljZSBiZWNhdXNlIGl0IHdpbGwgYXR0ZW1wdAorCXRvIHB1dCBlcnJvci5vIGluIHRoZSBhcmNoaXZlIHR3aWNlLiAgVGhpcyBmaXhlcyBhIGdsaXRjaCByZXBvcnRlZAorCWJ5IE1hcnRpbiBNb2tyZWpzIGluCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwMy0wNC9tc2cwMDA0MS5odG1sPi4KKworMjAwMy0wNC0yMSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIG00L2Vycm9yLm00OiBVcGRhdGUgZnJvbSBCcnVubyBIYWlibGUncyAyMDAzLTA0LTE0IHBhdGNoCisJdG8gZ251bGliLgorCisyMDAzLTA0LTIxICBZYWtvdiBNYXJrb3ZpdGNoIDxNYXJrb3ZpdGNoQGlzby5ydT4KKworCSogZGF0YS9nbHIuYyAoeXlleHBhbmRHTFJTdGFjaykgWyFZWVNUQUNLRVhQQU5EQUJMRV06CisJRml4IG9idmlvdXMgdHlwbyB0aGF0IHJlc3VsdHMgaW4gdW5jb21waWxhYmxlIEdMUiBwYXJzZXJzCisJd2hlbiBib3RoICVwdXJlLXBhcnNlciBhbmQgJWxvY2F0aW9ucyBhcmUgdXNlZC4gICh0cml2aWFsIGNoYW5nZSkKKworMjAwMy0wNC0xNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIHNyYy9zY2FuLWdyYW0ubDogQWRkICVvcHRpb24gbm91bnB1dCwgc2luY2Ugd2Ugbm8gbG9uZ2VyIHVzZSB1bnB1dC4KKwkodW5leHBlY3RlZF9lb2YpOiBSZW5hbWVkIGZyb20gdW5leHBlY3RlZF9lbmRfb2ZfZmlsZSwgZm9yIGJyZXZpdHkuCisJRG8gbm90IGluc2VydCB0aGUgZXhwZWN0ZWQgdG9rZW4gdmlhIHVucHV0LCBhcyB0aGlzIHJ1bnMgYWZvdWwKKwlvZiBhIFBPU0lYLWNvbXBhdGliaWxpdHkgYnVnIGluIGZsZXggMi41LjMxLgorCUFsbCB1c2VzIGNoYW5nZWQgdG8gQkVHSU4gdGhlIHBhcmVudCBzdGF0ZSwKKwlzaW5jZSB3ZSBubyBsb25nZXIgaW5zZXJ0IHRoZSBleHBlY3RlZCB0b2tlbiB2aWEgdW5wdXQuCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChJbnZhbGlkIGlucHV0cyk6IFJlbW92ZSBjYXNjYWRlZCBkaWFnbm9zdGljCisJdGhhdCBpcyBubyBsb25nZXIgZW1pdHRlZCBhZnRlciB0aGUgYWJvdmUgY2hhbmdlLgorCisJKiBzcmMvY29uZmxpY3RzLmMgKHNldF9jb25mbGljdHMpOiBSZXNvbHZlIGFsbCBjb25mbGljdHMsIG5vdCBqdXN0CisJdGhlIGZpcnN0IG9uZS4gIFRoaXMgY2hhbmdlIGlzIGZyb20gUGF1bCBIaWxmaW5nZXIsIGFuZCBpdCBmaXhlcworCXJlZ3Jlc3Npb24gcmVwb3J0ZWQgYnkgV2VybmVyIExlbWJlcmcgaW4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAzLTA0L21zZzAwMDI2Lmh0bWw+LgorCisJKHJlc29sdmVfc3JfY29uZmxpY3QpOiBEb24ndCBpbnZva2Ugc3RhdGVfZXJyc19zZXQKKwl1bmxlc3Mgb25lIG9yIG1vcmUgdG9rZW5zIGhhdmUgYmVlbiBleHBsaWNpdGx5IG1hZGUgZXJyb3JzLgorCU90aGVyd2lzZSwgdGhlIGFib3ZlIGNoYW5nZSBjYXVzZXMgQmlzb24gdG8gYWJvcnQuCisKKwkqIHRlc3RzL2V4aXN0aW5nLmF0IChHTlUgcGljIEdyYW1tYXIpOiBOZXcgdGVzdCBjYXNlLCB0YWtlbiBmcm9tCisJTGVtYmVyZydzIGVtYWlsLgorCisyMDAzLTAzLTMxICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZG9jL01ha2VmaWxlLmFtIChBTV9NQUtFSU5GT0ZMQUdTKTogRG9uJ3Qgc3BsaXQgdGhlIGluZm8gZmlsZS4KKworMjAwMy0wMy0zMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9vdXRwdXQuYyAocHJlcGFyZV9zeW1ib2xzKTogQXZvaWQgdHJhaWxpbmcgc3BhY2VzIGluIHRoZQorCW91dHB1dC4KKworMjAwMy0wMy0zMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChTdHJpbmdzIGFyZSBEZXN0cm95ZWQpOiBzL2xvc3Nlcy9sb3Nlcy8uCisJRnJvbSBQYXVsIEhpbGZpbmdlci4KKworMjAwMy0wMy0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIG00L2Vycm9yLm00OiBEbyBub3QgcHV0IHVuZGVyIGR5bmFtaWMgY29uZGl0aW9ucyBzb21lIGNvZGUgd2hpY2gKKwlleHBhbnNpb24gaXMgdW5kZXIgc3RhdGljIGNvbnRyb2wuCisKKzIwMDMtMDMtMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkb2MvYmlzb24udGV4aW5mbyAoSG93IENhbiBJIFJlc2V0IEBjb2Rle3l5cGFyc2V9KTogTmV3LgorCisyMDAzLTAzLTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZG9jL2Jpc29uLnRleGluZm8gKFN0cmluZ3MgYXJlIERlc3Ryb3llZCk6IE5ldy4KKworMjAwMy0wMy0xMyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIC5jdnNpZ25vcmU6IEFkZCBjb25maWd1cmUubGluZW5vLgorCSogc3JjLy5jdnNpZ25vcmU6IEFkZCB5YWNjLgorCSogdGVzdHMvLmN2c2lnbm9yZTogQWRkIHRlc3RzdWl0ZS5sb2cuCisJKiBkb2MvZmRsLnRleGk6IFN5bmMgd2l0aCBsYXRlc3QgRlNGIHZlcnNpb24uCisKKzIwMDMtMDMtMTIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBzY2FuLWdyYW0ubCAoWVlfVVNFUl9JTklUKTogSW5pdGlhbGl6ZSBjb2RlX3N0YXJ0LCB0b28uCisJKDxJTklUSUFMPjw8RU9GPj4sIDxTQ19QUkVfQ09ERT48PEVPRj4+KTogU2V0ICpsb2MgdG8gdGhlIHNjYW5uZXIKKwljdXJzb3IsIGluc3RlYWQgb2YgbGVhdmluZyBpdCB1bmRlZmluZWQuICBUaGlzIGZpeGVzIGEgYnVnCisJcmVwb3J0ZWQgYnkgVGltIFZhbiBIb2xkZXIgaW4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAzLTAzL21zZzAwMDIzLmh0bWw+LgorCSogdGVzdHMvaW5wdXQuYXQgKFRvcnR1cmluZyB0aGUgU2Nhbm5lcik6IFRlc3QgdGhlIHNjYW5uZXIgb24KKwlhbiBlbXB0eSBpbnB1dCBmaWxlLCB3aGljaCB3YXMgVGltIFZhbiBIb2xkZXIncyB0ZXN0IGNhc2UuCisKKwkqIG00L3RpbWV2YXIubTQgKEJJU09OX1BSRVJFUV9USU1FVkFSKTogV2hlbiBjaGVja2luZyB3aGV0aGVyCisJPHN5cy9yZXNvdXJjZS5oPiBjYW4gYmUgaW5jbHVkZWQsIGluY2x1ZGUgc3lzL3RpbWUuaCBhbmQKKwlzeXMvdGltZXMuaCBmaXJzdCwgaWYgYXZhaWxhYmxlLiAgVGhpcyB3b3JrcyBhcm91bmQgdGhlIFN1bk9TCisJNC4xLjQgcG9ydGluZyBidWcgcmVwb3J0ZWQgYnkgQnJ1Y2UgQmVja2VyIGluCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwMy0wMy9tc2cwMDAxOC5odG1sPi4KKworCSogbTQvc3VicGlwZS5tNCAoQklTT05fUFJFUkVRX1NVQlBJUEUpOiBEb24ndAorCUFDX0NIRUNLX0hFQURFUlMoW3N5cy93YWl0LmhdKSwgYXMgdGhpcyBpbnRlcmZlcmVzIHdpdGgKKwlBQ19IRUFERVJfU1lTX1dBSVQuCisKKwlNZXJnZSBjaGFuZ2VzIGZyb20gZ251bGliLiAgVGhpcyB3YXMgcHJvbXB0ZWQgYmVjYXVzZSB0aGUgQ1ZTCisJc25hcHNob3QgZGlkbid0IGJ1aWxkIG9uIFNvbGFyaXMgNyBkdWUgdG8gc3RybmxlbiBwcm9ibGVtcy4KKworCVRoZXNlIGNoYW5nZXMgbmVlZCB0byBiZSBtZXJnZWQgYmFjayBpbnRvIGdudWxpYjoKKwkqIGxpYi9oYXNoLmM6IEluY2x1ZGUgPHN0ZGJvb2wuaD4gdW5jb25kaXRpb25hbGx5LgorCSogbTQvb25jZW9ubHkubTQgKG00X3F1b3RlKTogTmV3IG1hY3JvLgorCShBQ19DSEVDS19IRUFERVJTX09OQ0UsIEFDX0NIRUNLX0ZVTkNTX09OQ0UsIEFDX0NIRUNLX0RFQ0xTX09OQ0UpOgorCVF1b3RlIEFDX0ZPUkVBQ0ggdmFyaWFibGUtZXhwYW5zaW9ucyBwcm9wZXJseS4KKwlUaGUgMjAwMy0wMS0wMyBvYnN0YWNrLmggY2hhbmdlIGFsc28gbmVlZHMgbWVyZ2luZy4KKwl7ZW5kIG9mIGNoYW5nZXMgcmVxdWlyaW5nIG1lcmdpbmd9CisKKwkqIGxpYi9zdGRib29sLmguaW4sIG00L2FsbG9jYS5tNCwgbTQvZGlybmFtZS5tNCwgbTQvZG9zLm00LAorCW00L2dldG9wdC5tNCwgbTQvaGFzaC5tNCwgbTQvbWFsbG9jLm00LCBtNC9tZW1jaHIubTQsCisJbTQvbWVtcmNoci5tNCwgbTQvb2JzdGFjay5tNCwgbTQvb25jZW9ubHkubTQsIG00L3F1b3RlLm00LAorCW00L3F1b3RlYXJnLm00LCBtNC9yZWFsbG9jLm00LCBtNC9zdHBjcHkubTQsIG00L3N0cm5sZW4ubTQsCisJbTQvc3RydG9sLm00LCBtNC9zdHJ0b3VsLm00LCBtNC91bmxvY2tlZC1pby5tNCwgbTQveGFsbG9jLm00OgorCU5ldyBmaWxlcywgaW1wb3J0ZWQgZnJvbSBnbnVsaWIuCisJKiBtNC9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCB0aGUgbmV3IG00LyoubTQgZmlsZXMgbWVudGlvbmVkCisJYWJvdmUuCisKKwkqIGxpYi9tYnN3aWR0aC5jLCBtNC9lcnJvci5tNCwgbTQvbWJydG93Yy5tNCwgbTQvbWJzd2lkdGgubTQsCisJbTQvbWVtY21wLm00LCBtNC9wcmVyZXEubTQsIG00L3N0ZGJvb2wubTQ6IFVwZGF0ZSB0byBjdXJyZW50CisJZ251bGliIHNvdXJjZXMuCisKKwkqIGNvbmZpZ3VyZS5hYyAoZ2xfRElSTkFNRSwgZ2xfR0VUT1BULCBnbF9IQVNILCBnbF9RVU9URSwgZ2xfWEFMTE9DKToKKwlBZGQuCisJKGdsX0VSUk9SKTogTmV3LCByZXBsYWNpbmcgam1fUFJFUkVRX0VSUk9SLgorCShnbF9GVU5DX0FMTE9DQSk6IE5ldywgcmVwbGFjaW5nIEFDX0ZVTkNfQUxMT0NBLgorCShnbF9GVU5DX1NUUENQWSk6IE5ldywgcmVwbGFjaW5nIEFDX1JFUExBQ0VfRlVOQ1Moc3RwY3B5KS4KKwkoZ2xfRlVOQ19TVFJOTEVOKTogTmV3LCByZXBsYWNpbmcgQUNfRlVOQ19TVFJOTEVOLgorCShnbF9NQlNXSURUSCk6IE5ldywgcmVwbGFjaW5nIGptX1BSRVJFUV9NQlNXSURUSC4KKwkoZ2xfT0JTVEFDSyk6IE5ldywgcmVwbGFjaW5nIEFDX0ZVTkNfT0JTVEFDSy4KKwkoZ2xfUVVPVEVBUkcpOiBOZXcsIHJlcGxhY2luZyBqbV9QUkVSRVFfUVVPVEVBUkcuCisJKGptX0ZVTkNfR0xJQkNfVU5MT0NLRURfSU8sIGdsX0ZVTkNfU1RQQ1BZLCBnbF9GVU5DX1NUUlRPTCk6IE5ldy4KKwkoam1fRlVOQ19NQUxMT0MpOiBOZXcsIHJlcGxhY2luZyBBQ19GVU5DX01BTExPQy4KKwkoam1fRlVOQ19SRUFMTE9DKTogTmV3LCByZXBsYWNpbmcgQUNfRlVOQ19SRUFMTE9DLgorCShqbV9QUkVSRVFfQVJHTUFUQ0gpOiBSZW1vdmUuCisJKEFDX1JFUExBQ0VfRlVOQ1MpOiBSZW1vdmUgbWVtY2hyLCBtZW1yY2hyLCBzdHBjcHksIHN0cnRvbCwgc3RydG91bC4KKwkqIGxpYi9NYWtlZmlsZS5hbSAobGliYmlzb25fYV9TT1VSQ0VTKTogQWRkIGFyZ21hdGNoLmMsIGFyZ21hdGNoLmguCisKKwkqIHNyYy9zeXN0ZW0uaDogSW5jbHVkZSA8c3RkYm9vbC5oPiB1bmNvbmRpdGlvbmFsbHkuCisKKwkqIGxpYi9iYml0c2V0Lmg6IEluY2x1ZGUgPGxpbWl0cy5oPiB1bmNvbmRpdGlvbmFsbHkuICBXZSBoYXZlIGJlZW4KKwlhc3N1bWluZyBhdCBsZWFzdCBDODkgaW4gdGhlIGJpdHNldCBjb2RlIGZvciBzb21lIHRpbWUgbm93LgorCisyMDAzLTAzLTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogcm8ucG86IE5ldy4KKworMjAwMy0wMy0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChUYWJsZSBvZiBTeW1ib2xzKTogUmVhY3RpdmF0ZSB0aGUKKwlkb2N1bWVudGF0aW9uIGZvciAlbGV4LXBhcmFtLCBhbmQgJXBhcnNlLXBhcmFtLgorCisyMDAzLTAzLTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS95YWNjLmMsIGRhdGEvZ2xyLmMsIGRhdGEvbGFsMS5jYzogVXNlIHNpbWlsYXIgY29kZSB0bworCWdlbmVyYXRlIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMuCisJVXNlIHRoZSBudW1iZXIgb2YgdG9rZW5zIGFzIGFuIHVwcGVyIGJvdW5kIGluIHl5dG5hbWUsIGFzIGl0CisJY2Fubm90IGJlIGEgbm9uIHRlcm1pbmFsLgorCisyMDAzLTAzLTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoX0FUX0RBVEFfREFOQ0VSX1kpOiBGaXggdGhlIGV4cGVjdGVkIGVycm9yCisJbWVzc2FnZS4KKworMjAwMy0wMy0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKF9BVF9EQVRBX0RBTkNFUl9ZLCBBVF9DSEVDS19EQU5DRVIpOiBOZXcuCisJVXNlIHRoZW0gdG8gZXhlcmNpc2UgeXljaGVjayBvdmVycnVuLgorCUJhc2VkIG9uIEFuZHJldyBTdWZmaWVsZCdzIGdyYW1tYXIuCisKKzIwMDMtMDMtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJQ3JlYXRlIHRlc3RzL2xvY2FsLmF0IGZvciBCaXNvbiBnZW5lcmljIHRlc3RpbmcgbWFjcm9zLgorCisJKiB0ZXN0cy9jYWxjLmF0IChBVF9DSEVDS19QVVNIREVGUywgQVRfQ0hFQ0tfUE9QREVGUyk6IE1vdmUgdG8uLi4KKwkqIHRlc3RzL2xvY2FsLmF0IChBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMsIEFUX0JJU09OX09QVElPTl9QT1BERUZTKToKKwlUaGlzIG5ldyBmaWxlLgorCSogdGVzdHMvY2FsYy5hdCAoQVRfQ0hFQ0tfQ0FMQyk6IEFkanVzdC4KKwkqIHRlc3RzL3Rlc3RzdWl0ZS5hdCAoQVRfREFUQV9HUkFNTUFSX1BST0xPR1VFLCBBVF9EQVRBX0dSQU1NQVIpCisJKEFUX0NPTVBJTEUsIEFUX0NPTVBJTEVfQ1hYLCBBVF9QQVJTRVJfQ0hFQ0spOiBNb3ZlIHRvLi4uCisJKiB0ZXN0cy9sb2NhbC5hdDogaGVyZS4KKwkoQVRfQ09NUElMRV9DWFgpOiBUYWdzIHRoZSB0ZXN0cyB1c2luZyBpdCBhcyBjKysuCisJSWdub3JlIHRoZSB0ZXN0IGlmIENYWCBpcyBub3QgZnVuY3Rpb25hbC4KKworMjAwMy0wMy0wMSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIHNyYy9zY2FuLWdyYW0ubCAoY29kZV9zdGFydCk6IEluaXRpYWxpemUgaXQgdG8gc2Nhbm5lcl9jdXJzb3IsCisJbm90IGxvYy0+ZW5kLCBzaW5jZSBsb2MtPmVuZCBtaWdodCBjb250YWluIGdhcmJhZ2UgYW5kIHRoaXMgbGVhZHMKKwl0byB1bmRlZmluZWQgYmVoYXZpb3Igb24gc29tZSBwbGF0Zm9ybXMuCisJKGlkX2xvYywgdG9rZW5fc3RhcnQpOiBVc2UgKElGX0xJTlRlZCkgaW5pdGlhbCB2YWx1ZXMgdGhhdCBkbyBub3QKKwlkZXBlbmQgb24gKmxvYywgc28gdGhhdCB0aGUgcmVhZGVyIGRvZXNuJ3QgZ2l2ZSB0aGUgdGhlIGZhbHNlCisJaW1wcmVzc2lvbiB0aGF0ICpsb2MgaXMgaW5pdGlhbGl6ZWQuCisJKDxJTklUSUFMPiIlJSIpOiBEbyBub3QgYm90aGVyIHNldHRpbmcgY29kZV9zdGFydCwgc2luY2UgaXRzIHZhbHVlCisJZG9lcyBub3Qgc3Vydml2ZSB0aGUgcmV0dXJuLgorCisyMDAzLTAzLTAxICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3NjYW4tZ3JhbS5sIChjb2RlX3N0YXJ0KTogQWx3YXlzIGluaXRpYWxpemUgaXQgd2hlbiBlbnRlcmluZworCWludG8geXlsZXgsIGFzIFNDX0VQSUxPR1VFIGlzIGFjdGl2YXRlZCAqYmVmb3JlKiB0aGUgY29ycmVzcG9uZGluZworCXl5bGV4IGludm9jYXRpb24uICBBbiBhbHRlcm5hdGl2ZSB3b3VsZCBiZSBtYWtpbmcgaXQgc3RhdGljLCBidXQKKwl0aGVuIGl0IHN0YXJ0cyB3aXRoIHRoZSBzZWNvbmQgJSUncyBiZWdpbm5pbmcsIGluc3RlYWQgb2YgaXRzIGVuZC4KKworMjAwMy0wMi0yOCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGxpYi9tYnN3aWR0aC5jOiBJbmNsdWRlIDx3Y2hhci5oPiBiZWZvcmUgIm1ic3dpZHRoLmgiLCB0byB3b3JrCisJYXJvdW5kIGEgVW5peFdhcmUgNy4xLjEgcG9ydGluZyBidWcgcmVwb3J0ZWQgYnkgSm9obiBIdWdoZXMgaW4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAzLTAyL21zZzAwMDMwLmh0bWw+LgorCisyMDAzLTAyLTI2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogUkVBRE1FOiBNZW50aW9uIGNvbXBpbGVyIGJ1ZyBpbiBTdW4gRm9ydGUgRGV2ZWxvcGVyIDYgdXBkYXRlIDIuCisJUmVtb3ZlIFNlcXVlbnQvUHlyYW1pZCBkaXNjdXNzaW9uIChub2JvZHkgdXNlcyB0aGVtIGFueSBtb3JlKS4KKwlNZXJnZSBWTVMgYW5kIE1TLURPUyBkaXNjdXNzaW9uOyB0aGVzZSBwb3J0cyBtYXkgd2VsbCBiZSBkZWFkCisJYnV0IGxldCdzIGtlZXAgbWVudGlvbmluZyB0aGVtIGZvciBub3cuICBQdXQgPD4gYXJvdW5kIGVtYWlsCisJYWRkcmVzc2VzLiAgQWRkIGNvcHlyaWdodCBub3RpY2UuCisKKzIwMDMtMDItMjQgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBkYXRhL2dsci5jICh5eV9yZWR1Y2VfcHJpbnQpOiB5eWxpbmVubyAtPiB5eWxubywKKwl0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBmbGV4IHVzZSBvZiB5eWxpbmVuby4KKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IEJydWNlIExpbGx5IGluCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwMy0wMi9tc2cwMDAxNi5odG1sPi4KKwkqIGRhdGEvbGFscjEuY2MgKHl5OjpdYjRfcGFyc2VyX2NsYXNzX25hbWVbOjpwYXJzZSk6IExpa2V3aXNlLgorCSogZGF0YS95YWNjLmMgKHl5X3JlZHVjZV9wcmludCk6IExpa2V3aXNlLgorCisJKiBjb25maWcvZGVwY29tcDogU3luYyB3aXRoIEF1dG9tYWtlIDEuNy4zLgorCisyMDAzLTAyLTIxICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9sYWxyMS5jYzogVXNlIHRlbXBvcmFyeSB2YXJpYWJsZXMgaW5zdGVhZCBvZiBjYXN0cyB0bworCWNoYW5nZSBpbnRlZ2VyIHR5cGVzLgorCVN1Z2dlc3RlZCBieSBQYXVsIEVnZ2VydC4KKworMjAwMy0wMi0yMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvOiBVc2UgImxvY2F0aW9uIiBjb25zaXN0ZW50bHkgdG8gcmVmZXIgdG8gQG4sCisJdG8gYXZvaWQgY29uZnVzaW9ucyB3aXRoIGxhbHIxLmNjJ3Mgbm90aW9uIG9mIFBvc2l0aW9uLgorCVN1Z2dlc3RlZCBieSBQYXVsIEVnZ2VydC4KKworMjAwMy0wMi0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEvbGFscjEuY2MgKHBvc2l0aW9uLmhoKTogTWFrZSBzdXJlICJjb2x1bW5zIiBuZXZlciBwdXNoZXMKKwliZWZvcmUgaW5pdGlhbF9jb2x1bW5zLgorCShsb2NhdGlvbi5oaCk6IFVzZSBjb25zaXN0ZW50IHZhcmlhYmxlIG5hbWVzIHdoZW4gZGVmaW5pbmcgdGhlCisJb3BlcmF0b3I8PC4KKwlVc2UgImxhc3QiIHNvIHRoYXQgd2Ugc3VidHJhY3QgZnJvbSBQb3NpdGlvbnMsIG5vdCBmcm9tIHVuc2lnbmVkLgorCisyMDAzLTAyLTIwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9sYWxyMS5jYyAocG9zaXRpb24uaGgpOiBOZXcgc3ViZmlsZSwgaW5jbHVkaW5nIHRoZSBleHRlbmRlZAorCWFuZCBEb3h5Z2VuJ2VkIGRvY3VtZW50YXRpb24gb2YgY2xhc3MgUG9zaXRpb24uCisJKGxvY2F0aW9uLmhoKTogVXNlIGl0LgorCURvY3VtZW50IGFgIGxhIERveHlnZW4uCisJV2l0aCB0aGUgaGVscCBvZiBCZW5vaXQgUGVycm90LgorCisyMDAzLTAyLTIwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogdGVzdHMvY2FsYy5hdCAoQVRfQ0hFQ0tfUFVTSERFRlMsIEFUX0NIRUNLX1BPUERFRlMpOiBEZWZpbmUKKwlBVF9ZQUNDX0lGLgorCVJlZGVmaW5lIEFUX1lZRVJST1JfU0VFU19MT0NfSUYgdXNpbmcgaXQuCisJKF9BVF9EQVRBX0NBTENfWSk6IERvbid0IGRlY2xhcmUgeXllcnJvciB3aGVuIGxhbHIxLmNjLCBhcyBpdCBpcworCW5vdCBkZWZpbmVkLgorCURvbid0IHVzZSB0aGUgbG9jYXRpb24gaW4geXk6OlBhcnNlcjo6ZXJyb3JfIGFuZAorCXl5OjpQYXJzZXI6OnByaW50XyB3aGVuIG5vdCAlbG9jYXRpb25zLgorCUFjdGl2YXRlIG1vcmUgbGFscjEuY2MgdGVzdHMuCisKKzIwMDMtMDItMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2xhbHIxLmNjOiBXaGVuIGRpc3BsYXlpbmcgYSBsaW5lIG51bWJlciwgYmUgc3VyZSB0byBtYWtlIGl0CisJYW4gaW50LgorCisyMDAzLTAyLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9sYWxyMS5jYyAoYjRfc3RhY2tfZGVwdGhfaW5pdCwgeXk6OlBhcnNlcjo6aW5pdGRlcHRoXyk6CisJUmVtb3ZlLCB1c2VsZXNzLgorCShZWUFCT1JULCBZWUFDQ0VQVCwgWVlFUlJPUik6IE5ldy4KKwkqIHRlc3RzL2NhbGMuYXQ6IFJlbmFibGUgdGhlIGxhbHIxLmNjIHRlc3QuCisKKzIwMDMtMDItMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiB0ZXN0cy9jYWxjLmF0IChBVF9DSEVDS19DQUxDKTogQ2hlY2sgZGlmZmVyZW50IHNjZW5hcmlvcyBvZgorCWVycm9yIHJlY292ZXJ5LCBtaXhpbmcgd2l0aC93aXRob3V0IHBvcHMgYW5kIGRpc2NhcmRpbmcgb2YgdGhlCisJbG9va2FoZWFkLgorCUV4ZXJjaXNlIFlZRVJST1IuCisJRGlzYWJsZSB0aGUgbGFscjEuY2MgdGVzdHMgYXMgY3VycmVudGx5IGl0IGRvZXNuJ3Qgc3VwcG9ydCBZWUVSUk9SLgorCisyMDAzLTAyLTE3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogdGVzdHMvYXRsb2NhbC5pbiAoTERGTEFHUywgTElCUyk6IE5ldyB2YXJzLgorCSogdGVzdHMvdGVzdHN1aXRlLmF0IChBVF9DT01QSUxFKTogVXNlIHRoZW0uCisJVGhpcyBmaXhlcyB0aGUgdGVzdHN1aXRlIHByb2JsZW0gcmVwb3J0ZWQgYnkgUm9iZXJ0IExlbnR6IGluCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwMy0wMi9tc2cwMDAxMS5odG1sPi4KKworMjAwMy0wMi0xMiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGRhdGEveWFjYy5jICh5eWVycmxhYikgW1lZRVJST1JfVkVSQk9TRV06CisJQXZvaWQgc3Vic2NyaXB0IGVycm9yIGluIHl5Y2hlY2suICBCdWcgcmVwb3J0ZWQgYnkgQW5kcmV3IFN1ZmZpZWxkIGluCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwMy0wMi9tc2cwMDAwMy5odG1sPi4KKwkqIGRhdGEvZ2xyLmMgKHl5cmVwb3J0U3ludGF4RXJyb3IpIFtZWUVSUk9SX1ZFUkJPU0VdOiBMaWtld2lzZS4KKwlDaGVjayBmb3IgbWFsbG9jIGZhaWx1cmUsIGZvciBjb25zaXN0ZW5jeSB3aXRoIHlhY2MuYy4KKwkoeXl0bmFtZV9zaXplKTogUmVtb3ZlLCBmb3IgY29uc2lzdGVuY3kgd2l0aCB5YWNjLmMuCisKKwlUaGUgYnVnIHN0aWxsIHJlbWFpbnMgaW4gZGF0YS9sYWxyMS5jYywgYXMgSSBkaWRuJ3QgaGF2ZSB0aW1lCisJdG8gZml4IGl0IHRoZXJlLgorCisyMDAzLTAyLTA2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogY29uZmlndXJlLmFjIChHWFgpOiBSZW5hbWUgYXMuLi4KKwkoQ1hYKTogdGhpcywgdG8ga2VlcCB0aGUgb3JpZ2luYWwgQXV0b2NvbmYgc2VtYW50aWNzLgorCVJlcXVpcmUgMi41Ny4KKwkqIGRhdGEvbGFscjEuY2M6IEZpeCBiNF9jb3B5cmlnaHQgaW52b2NhdGlvbnMuCisJSWYgWVlERUJVRyBpcyBub3QgZGVmaW5lZCwgZG9uJ3QgZGVwZW5kIHVwb24gbmFtZV8gYmVpbmcgZGVmaW5lZC4KKwkobG9jYXRpb24uaGgpOiBJbmNsdWRlIHN0cmluZyBhbmQgaW9zdHJlYW0uCisJKFBvc2l0aW9uOjpmaWxlbmFtZSk6IE5ldyBtZW1iZXIuCisJKFBvc2l0aW9uOjpQb3NpdGlvbiAoKSk6IE5ldy4KKwkob3BlcmF0b3I8PCAoUG9zaXRpb24pKTogTmV3LgorCShvcGVyYXRvci0gKFBvc2l0aW9uLCBpbnQpKTogTmV3LgorCShMb2NhdGlvbjo6Zmlyc3QsIExvY2F0aW9uOjpsYXN0KTogUmVuYW1lIGFzLi4uCisJKExvY2F0aW9uOjpiZWdpbiwgTG9jYXRpb246OmVuZCk6IHRoZXNlLCB0byBtb2NrIHRoZSBjb252ZW50aW9uYWwKKwlpdGVyYXRvciBuYW1lcy4KKwkob3BlcmF0b3I8PCAoTG9jYXRpb24pKTogTmV3LgorCSogdGVzdHMvYXRsb2NhbC5pbiAoQ1hYKTogTmV3LgorCSogdGVzdHMvdGVzdHN1aXRlLmF0IChBVF9DT01QSUxFX0NYWCk6IE5ldy4KKwkqIHRlc3RzL2NhbGMuYXQgKF9BVF9EQVRBX0NBTENfWSk6IEFkanVzdCB5eWVycm9yIHRvIHJlcG9ydCB0aGUKKwlsb2NhdGlvbnMgaW4gYSBtb3JlIHN5bnRoZXRpYyB3YXkuCisJKEFUX0NIRUNLX1BVU0hERUZTKTogQVRfWVlFUlJPUl9TRUVTX0xPQ19JRiBpcyBwb3NpdGl2ZSBpZgorCWxhbHIxLmNjIGlzIHVzZWQuCisJQWRqdXN0IHRoZSBDIGxvY2F0aW9ucyB0byBtYXRjaCB0aG9zZSBmcm9tIEVtYWNzOiBmaXJzdCBjb2x1bW4gaXMKKwljb2x1bW4gMC4KKwlDaGFuZ2UgYWxsIHRoZSBleHBlY3RlZCByZXN1bHRzLgorCUNvbmZvcm0gdG8gdGhlIEdDUzogc2ltcGxpZnkgdGhlIGxvY2F0aW9ucyB3aGVuIGFwcGxpY2FibGUuCisJKExPQywgVkFMLCBZWUxMT0NfRk9STUFMLCBZWUxMT0NfQVJHLCBVU0VfWVlMTE9DLCBMRVhfRk9STUFMUykKKwkoTEVYX0FSR1MsIFVTRV9MRVhfQVJHUywgTEVYX1BSRV9GT1JNQUxTLCBMRVhfUFJFX0FSR1MpOiBSZXBsYWNlCisJdGhlc2UgQ1BQIG1hY3JvcyB3aXRoIHRoZSBtNCBtYWNyb3MgbmV3IGRlZmluZWQgYnkuLi4KKwkoQVRfQ0hFQ0tfUFVTSERFRlMpOiB0aGlzLCBpLmUuOgorCShBVF9MQUxSMV9DQ19JRiwgQVRfUFVSRV9MRVhfSUYsIEFUX0xPQywgQVRfVkFMLCBBVF9MRVhfRk9STUFMUykKKwkoQVRfTEVYX0FSR1MsIEFUX1VTRV9MRVhfQVJHUywgQVRfTEVYX1BSRV9GT1JNQUxTLCBBVF9MRVhfUFJFX0FSR1MpCisJTmV3IG1hY3Jvcy4KKwkoQVRfQ0hFQ0tfUE9QREVGUyk6IFVuZGVmaW5lIHRoZW0uCisJKEFUX0NIRUNLX0NBTENfTEFMUjFfQ0MpOiBOZXcuCisJVXNlIGl0IGZvciB0aGUgZmlyc3QgbGFscjEuY2MgdGVzdC4KKworMjAwMy0wMi0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEvbGFscjEuY2MgKFlZTExPQ19ERUZBVUxUKTogRml4IGl0cyBkZWZpbml0aW9uOiBiZSBiYXNlZCBvbgorCUxvY2F0aW9uIGFzIGlzIGRlZmluZWQuCisKKzIwMDMtMDItMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2xhbHIxLmNjOiBJZiBZWURFQlVHIGlzIG5vdCBkZWZpbmVkLCBkb24ndCBkZXBlbmQgdXBvbgorCW5hbWVfIGJlaW5nIGRlZmluZWQuCisKKzIwMDMtMDItMDMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBzcmMvZ3JhbS5oIChzdGFydF9zeW1ib2wpOiBSZW1vdmUgdW51c2VkIGRlY2wuCisKKwlVc2UgbW9yZS1jb25zaXN0ZW50IG5hbWluZyBjb252ZW50aW9ucyBmb3IgbG9jYWwgdmFycy4KKworCSogc3JjL2Rlcml2ZXMuYyAoZGVyaXZlc19jb21wdXRlKTogQ2hhbmdlIHR5cGUgb2YgbG9jYWwgdmFyIGZyb20KKwlpbnQgdG8gcnVsZV9udW1iZXIuCisJKiBzcmMvZ3JhbS5jIChncmFtbWFyX3J1bGVzX3BhcnRpYWxfcHJpbnQpOiBMaWtld2lzZS4KKwkqIHNyYy9wcmludC5jIChwcmludF9jb3JlKTogTGlrZXdpc2UuCisJKiBzcmMvcmVkdWNlLmMgKHJlZHVjZV9ncmFtbWFyX3RhYmxlcyk6IExpa2V3aXNlLgorCisJKiBzcmMvZ3JhbS5jIChncmFtbWFyX2R1bXApOiBDaGFuZ2UgbmFtZSBvZiBpdGVtX251bWJlciAqCisJbG9jYWwgdmFyIGZyb20gciB0byBycC4KKwkqIHNyYy9udWxsYWJsZS5jIChudWxsYWJsZV9jb21wdXRlKTogTGlrZXdpc2UuCisKKwkqIHNyYy9ncmFtLmggKElTVE9LRU4sIElTVkFSKTogVXNlIGksIG5vdCBzLCBmb3IgaW50IHZhci4KKworCSogc3JjL2dyYW0uaCAoc3ltYm9sX251bWJlcl9hc19pdGVtX251bWJlcik6IFVzZSBzeW0sIG5vdCBzLAorCWZvciBzeW1ib2wgb3Igc3ltYm9sX251bWJlciB2YXIuCisJKiBzcmMvcmVhZGVyLmMgKGdyYW1tYXJfc3RhcnRfc3ltYm9sX3NldCk6IExpa2V3aXNlLgorCSogc3JjL3JlYWRlci5oIChncmFtbWFyX3N0YXJ0X3N5bWJvbF9zZXQsIGdyYW1tYXJfc3ltYm9sX2FwcGVuZCk6CisJTGlrZXdpc2UuCisJKiBzcmMvc3RhdGUuYyAodHJhbnNpdGlvbnNfdG8pOiBMaWtld2lzZS4KKwkqIHNyYy9zdGF0ZS5oOiBMaWtld2lzZS4KKwkqIHNyYy90YWJsZXMuYyAoc3ltYm9sX251bWJlcl90b192ZWN0b3JfbnVtYmVyKTogTGlrZXdpc2UuCisKKwkqIHNyYy9tdXNjbGVfdGFiLmggKE1VU0NMRV9PQlNUQUNLX1NHUk9XKTogVXNlIHAsIG5vdCBzLCBmb3IKKwljaGFyICogdmFyLgorCisJKiBzcmMvcGFyc2UtZ3JhbS55IChsbG9jX2RlZmF1bHQpOiBVc2UgbG9jLCBub3QgciwgZm9yIFlZTFRZUEUKKwl2YXIuCisKKwkqIHNyYy9zY2FuLWdyYW0ubCAobm9fY3JfcmVhZCk6IFVzZSBieXRlc19yZWFkLCBub3QgcywgZm9yIHNpemUKKwl2YXIuCisKKwkqIHNyYy9zeXN0ZW0uaCAoeHN0cm5kdXAsIHN0cmNociwgc3Ryc3BuLCBzdHJubGVuLCBtZW1jaHIsIG1lbXJjaHIpOgorCVVzZSBzdHIsIG5vdCBzLCBmb3IgY2hhciAqIHZhci4gIFVzZSBjaCwgbm90IGMsIGZvciBjaGFyYWN0ZXIgdmFyLgorCVVzZSBzaXplIGZvciBzaXplIHZhci4KKworCSogc3JjL3VuaXFzdHIuYyAodW5pcXN0cl9uZXcsIHVuaXFzdHJfYXNzZXJ0KTogVXNlIHN0ciwgbm90IHMsIGZvcgorCWNoYXIgKiB2YXIuCisJKHVuaXFzdHJfcHJpbnQsIHVuaXFzdF9wcmludF9wcm9jZXNzb3IpOiBVc2UgdXN0ciwgbm90IHMsIGZvcgorCXVuaXFzdHIgdmFyLgorCSogc3JjL3VuaXFzdHIuaDogTGlrZXdpc2UuCisKKwkqIHNyYy92Y2cuYyAoZ2V0X2NvbG9yX3N0ciwgZ2V0X3RleHRtb2RlX3N0ciwgZ2V0X3NoYXBlX3N0ciwKKwlnZXRfbGF5b3V0YWxnb3JpdGhtX3N0ciwgZ2V0X2RlY2lzaW9uX3N0ciwgZ2V0X29yaWVudGF0aW9uX3N0ciwKKwlnZXRfbm9kZV9hbGlnbm1lbnRfc3RyLCBnZXRfYXJyb3dfbW9kZV9zdHIsIGdldF9jcm9zc2luZ190eXBlX3N0ciwKKwlnZXRfdmlld19zdHIsIGdldF9saW5lc3R5bGVfc3RyLCBnZXRfYXJyb3dzdHlsZV9zdHIpOiBSZW5hbWUKKwlwYXJhbSB0byBoYXZlIHNhbWUgbmFtZSBhcyB0aGF0IG9mIGVudW0sIHNvIHRoYXQgd2UgZG9uJ3QgdXNlCisJInMiIHRvIHN0YW5kIGZvciBhIG5vbi1zdGF0ZS4KKworMjAwMy0wMi0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9zY2FuLXNrZWwubDogU2NhbiBtb3JlIHRoYW4gb25lIGluZXJ0IGNoYXJhY3RlciBwZXIgeXlsZXgKKwlpbnZvY2F0aW9uLgorCisyMDAzLTAyLTAxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCVZlcnNpb24gMS44NzVhLgorCisJKiBwby9MSU5HVUFTOiBBZGQgbXMuCisKKzIwMDMtMDEtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkb2MvTWFrZWZpbGUuYW0gKENMRUFORklMRVMpOiBBZGQgYmlzb24uZm5zIGZvciBkaXN0Y2hlY2suCisKKzIwMDMtMDEtMjkgIFBhdWwgSGlsZmluZ2VyICA8SGlsZmluZ2VyQENTLkJlcmtlbGV5LkVEVT4KKworCSogdGVzdHMvY3h4LXR5cGUuYXQ6IENvcnJlY3QgYXBwYXJlbnQgdHlwbyBpbiBCaXNvbiBpbnB1dDogJCQgaW5zdGVhZAorCW9mICQxLgorCisJQ2hhbmdlcyBpbiByZXNwb25zZSB0byBlcnJvciByZXBvcnQgYnkgUy4gRWtlbjogR0xSIG1vZGUgZG9lcyBub3QKKwloYW5kbGUgbmVnYXRpdmUgJCBpbmRpY2VzIG9yICQgaW5kaWNlcyBpbiBlbWJlZGRlZCBydWxlcyBjb3JyZWN0bHkuCisJU2VlIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDMtMDEvbXNnMDAwNzYuaHRtbD4uCisKKwkqIGRhdGEvZ2xyLmMgKGI0X3Joc192YWx1ZSk6IENoYW5nZSB0byB1c2UgWVlGSUxMIG1hY3JvLgorCShiNF9yaHNfbG9jYXRpb24pOiBEaXR0by4KKwkoeXlmaWxsKTogTmV3IGZ1bmN0aW9uIHRvIGNvcHkgZnJvbSBzdGFjayB0cmVlIGludG8gYXJyYXkKKwlpbmNyZW1lbnRhbGx5LgorCSh5eXVzZXJBY3Rpb24pOiBNb2RpZnkgdG8gYWxsb3cgaW5jcmVtZW50YWwgbW92ZSBvZiBzZW1hbnRpYyB2YWx1ZXMKKwl0byByaHMgYXJyYXkgd2hlbiBpbiBHTFIgbW9kZS4KKwlEZWZpbmUgWVlGSUxMIHRvIHVzZSBpbiB1c2VyLWRlZmluZWQgYWN0aW9ucyB0byBmaWxsIHNlbWFudGljIGFycmF5CisJYXMgbmVlZGVkLgorCVJlbW92ZSBkdW1teSB1c2Ugb2YgeXlzdGFjaywgYXMgdGhlcmUgaXMgbm93IGEgZ3VhcmFudGVlZCB1c2UuCisJKHl5ZG9BY3Rpb24pOiBNb2RpZnkgdG8gYWxsb3cgaW5jcmVtZW50YWwgbW92ZSBvZiBzZW1hbnRpYyB2YWx1ZXMKKwl0byByaHMgYXJyYXkgd2hlbiBpbiBHTFIgbW9kZS4KKwkoeXlyZXNvbHZlQWN0aW9uKTogRGl0dG8uCisJKHl5Z2xyU2hpZnREZWZlcik6IFVwZGF0ZSBjb21tZW50LgorCSh5eXJlc29sdmVTdGF0ZXMpOiBVc2UgWCA9PSBOVUxMIGZvciBwb2ludGVycywgbm90ICFYLgorCSh5eWdsclJlZHVjZSk6IERpdHRvLgorCSh5eWRvQWN0aW9uKTogRGl0dG8KKworCSogdGVzdHMvZ2xyLXJlZ3IxLmF0OiBSZW5hbWUgdG8gLi4uCisJKiB0ZXN0cy9nbHItcmVncmVzc2lvbi5hdDogQWRkIG5ldyByZWdyZXNzaW9uIHRlc3QgZm9yIHRoZSBwcm9ibGVtcworCWRlc2NyaWJlZCBhYm92ZSAoYWRhcHRlZCBmcm9tIFMuIEVrZW4pLgorCVVwZGF0ZSBjb3B5cmlnaHQgbm90aWNlLgorCSogdGVzdHMvdGVzdHN1aXRlLmF0OiBSZW5hbWUgZ2xyLXJlZ3IxLmF0IHRvIGdsci1yZWdyZXNzaW9uLmF0LgorCSogdGVzdHMvTWFrZWZpbGUuYW06IERpdHRvLgorCisyMDAzLTAxLTI4ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogZGF0YS9sYWxyMS5jYzogRG8gbm90IHVzZSBAb3V0cHV0X2hlYWRlcl9uYW1lQCB1bmxlc3MKKwliNF9kZWZpbmVzX2ZsYWcgaXMgc2V0LiAgVGhpcyBmaXhlcyB0d28gYnVncyByZXBvcnRlZCBieQorCVRpbSBWYW4gSG9sZGVyIGluCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwMy0wMS9tc2cwMDA3MS5odG1sPgorCWFuZCA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAzLTAxL21zZzAwMDczLmh0bWw+LgorCisyMDAzLTAxLTIxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogZGF0YS95YWNjLmMgKFlZRVJST1IpOiBNb3ZlIGNvZGUgZnJvbSB5eWVycmxhYjEgdG8gaGVyZSwgc28gdGhhdAorCXdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgeXllcnJsYWIxIGJlaW5nIHJlcG9ydGVkIGFzIGFuCisJInVudXNlZCBsYWJlbCIgYnkgbm9uLUdDQyBDIGNvbXBpbGVycy4gIFRoZSBkb3duc2lkZSBpcyB0aGF0IGlmCisJbG9jYXRpb25zIGFyZSB1c2VkIHRoZW4gYSBjb3VwbGUgb2Ygc3RhdGVtZW50cyBhcmUgZHVwbGljYXRlZCBlYWNoCisJdGltZSBZWUVSUk9SIGlzIGludm9rZWQsIGJ1dCB0aGUgdXBzaWRlIGlzIHRoYXQgdGhlIHdhcm5pbmdzCisJc2hvdWxkIHZhbmlzaC4KKwkoeXllcnJsYWIxKTogTW92ZSBjb2RlIHRvIFlFUlJPUi4KKwkoeXllcnJsYWIyKTogUmVtb3ZlLiAgQ2hhbmdlIHVzZXMgYmFjayB0byB5eWVycmxhYjEuCisJVGhpcyByZXZlcnRzIHNvbWUgb2YgdGhlIDIwMDItMTItMjcgY2hhbmdlLgorCisyMDAzLTAxLTE3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogc3JjL291dHB1dC5jIChzeW1ib2xfcHJpbnRlcnNfb3V0cHV0KTogRml4IHR5cG8gdGhhdCBsZWQKKwl0byBjb3JlIGR1bXAuICBQcm9ibGVtIHJlcG9ydGVkIGJ5IEFudG9uaW8gUnVzIGluCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwMy0wMS9tc2cwMDA1OC5odG1sPi4KKworMjAwMy0wMS0xMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+LAorCQlRdW9jIFBleXJvdCA8Y2hvamluQGxyZGUuZXBpdGEuZnI+LAorCQlSb2JlcnQgQW5pc2tvIDxhbmlza29fckBscmRlLmVwaXRhLmZyPgorCisJKiBkYXRhL2xhbHIxLmNjIChwYXJzZTo6eXllcnJsYWIxKTogV2hlbiBwb3BwaW5nIHRoZSBzdGFjaywgc3RvcAorCXdoZW4gdGhlIHN0YWNrcyBjb250YWluIG9uZSBlbGVtZW50LCBhcyB0aGUgbG9vcCB3b3VsZCBvdGhlcndpc2UKKwlmcmVlIHRoZSBsYXN0IHN0YXRlLCBhbmQgdGhlbiB1c2UgdGhlIHRvcCBzdGF0ZSAodGhlIG9uZSB3ZSBqdXN0CisJcG9wcGVkKS4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgaW5pdGlhbCBlbGVtZW50cyB3aWxsIG5vdCBiZSBmcmVlZAorCWV4cGxpY2l0bHksIGFzIGlzIHRoZSBjYXNlIGluIHlhY2MuYzsgaXQgaXMgbm90IGEgcHJvYmxlbSwgYXMKKwl0aGVzZSBlbGVtZW50cyBoYXZlIGZha2UgdmFsdWVzLgorCisyMDAzLTAxLTExICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogTkVXUzogJWV4cGVjdC12aW9sYXRpb25zIGFyZSBub3cganVzdCB3YXJuaW5ncywgcmV2ZXJ0aW5nCisJdG8gQmlzb24gMS4zMCBhbmQgMS43NSBiZWhhdmlvci4gIFRoaXMgZml4ZXMgdGhlIEdDQyAzLjIKKwlib290c3RyYXBwaW5nIHByb2JsZW0gcmVwb3J0ZWQgYnkgTWF0dGhpYXMgS2xvc2U7IHNlZQorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDMtMDEvbXNnMDAwNTMuaHRtbD4uCisJKiBzcmMvY29uZmxpY3RzLmMgKGNvbmZsaWN0c19wcmludCk6IExpa2V3aXNlLgorCSogdGVzdHMvY29uZmxpY3RzLmF0ICglZXhwZWN0IG5vdCBlbm91Z2gsICVleHBlY3QgdG9vIG11Y2gsCisJJWV4cGVjdCB3aXRoIHJlZHVjZSBjb25mbGljdHMpOiBMaWtld2lzZS4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChFeHBlY3QgRGVjbCk6IERvY3VtZW50IHRoaXMuICBBbHNvIG1lbnRpb24KKwl0aGF0IHRoZSB3YXJuaW5nIGlzIGVuYWJsZWQgaWYgdGhlIG51bWJlciBvZiBjb25mbGljdHMgY2hhbmdlcworCShub3QgbmVjZXNzYXJpbHkgaW5jcmVhc2VzKS4KKworCSogc3JjL2dldGFyZ3MuYyAodmVyc2lvbik6IFVwZGF0ZSBjb3B5cmlnaHQgeWVhci4KKworMjAwMy0wMS0wOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9NYWtlZmlsZS5hbSwgbGliL01ha2VmaWxlLmFtOiBVc2UgJChWQVIpIGluc3RlYWQgb2YgQFZBUkAuCisKKzIwMDMtMDEtMDggIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBNYWtlZmlsZS5tYWludCAoV0dFVEZMQUdTKToKKwlOZXcgbWFjcm8sIGNvbnRhaW5pbmcgIi1DIG9mZiIgdG8gZGlzYWJsZSBwcm94eSBjYWNoZXMuCisJQWxsIHVzZXMgb2YgJChXR0VUKSBjaGFuZ2VkIHRvICQoV0dFVCkgJChXR0VURkxBR1MpLgorCShyZWwtY2hlY2spOiBVc2UgJChXR0VUKSBpbnN0ZWFkIG9mIHdnZXQuCisKKzIwMDMtMDEtMDYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBkb2MvYmlzb24udGV4aW5mbyAoR2VuZXJhbGl6ZWQgTFIgUGFyc2luZyk6IEFkZCBhIHJlZmVyZW5jZSB0bworCXRoZSBHTFIgcGFwZXIgb2YgU2NvdHQsIEpvaG5zdG9uZSBhbmQgSHVzc2Fpbi4KKworMjAwMy0wMS0wNCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYyAoQUNfQVJHX0VOQUJMRSk6IEFkZCAtLWRpc2FibGUteWFjYy4KKwkoWUFDQ19TQ1JJUFQsIFlBQ0NfTElCUkFSWSk6IE5ldyB2YXJzIHRvIEFDX1NVQlNULgorCSogbGliL01ha2VmaWxlLmFtIChsaWJfTElCUkFSSUVTKTogbGlieS5hIC0+IEBZQUNDX0xJQlJBUllALgorCShFWFRSQV9MSUJSQVJJRVMpOiBOZXcgdmFyLCBmb3IgbGlieS5hLgorCSogc3JjL01ha2VmaWxlLmFtIChiaW5fU0NSSVBUUyk6IHlhY2MgLT4gQFlBQ0NfU0NSSVBUQC4KKwkoRVhUUkFfU0NSSVBUUyk6IE5ldyB2YXIsIGZvciB5YWNjLgorCisJKiBkYXRhL3lhY2MuYyAoeXllcnJsYWIxKTogT21pdCBhdHRyaWJ1dGUgaWYgX19jcGx1c3BsdXMgaXMgZGVmaW5lZCwKKwlzaW5jZSBHTlUgQysrIChhcyBvZiAzLjIuMSkgZG9lcyBub3QgYWxsb3cgYXR0cmlidXRlcyBvbiBsYWJlbHMuCisJUHJvYmxlbSByZXBvcnRlZCBieSBOZWxzb24gSC4gRi4gQmVlYmUuCisKKzIwMDMtMDEtMDMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBsaWIvb2JzdGFjay5oIChfX0lOVF9UT19QVFIpIFtfX1NURENfX106IENhc3QgcmVzdWx0IHRvCisJKHZvaWQgKikgdG8gYXZvaWQgZGlhZ25vc3RpYyB3aXRoIG5hdGl2ZSBjODkgb24gU0dJIElSSVggNi41CisJd2hlbiBjb21waWxpbmcgQmlzb24gMS44NzUncyBgYml0c2V0IGJzZXQgPSBvYnN0YWNrX2FsbG9jCisJKGJvYnN0YWNrLCBieXRlcyk7Jy4gIFByb2JsZW0gcmVwb3J0ZWQgYnkgTmVsc29uIEguIEYuIEJlZWJlLgorCisJKiBzcmMvc2Nhbi1za2VsLmwgKFFQVVRTKTogT21pdCByZWR1bmRhbnQgYDsnIGZyb20gbWFjcm8gZGVmaW5pdGlvbi4KKwkoW15AXG5dKTogUmVuYW1lZCBmcm9tIFteQFxuXSsgc28gdGhhdCB0aGUgdG9rZW4gYnVmZmVyIGRvZXMgbm90CisJZ3JvdyB0byBhIGh1Z2Ugc2l6ZSB3aXRoIHR5cGljYWwgaW52b2NhdGlvbi4KKworCSogbGliL2hhc2guYyAoX0Jvb2wsIGJvb2wsIGZhbHNlLCB0cnVlLCBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCk6CisJVXNlIHRoZSBwYXR0ZXJuIHJlY29tbWVuZGVkIGJ5IEF1dG9jb25mIDIuNTcsIGV4Y2VwdCBhbHNvIHByb3RlY3QKKwlhZ2FpbnN0IGRvdWJsZS1kZWZpbml0aW9uLgorCSogc3JjL3N5c3RlbS5oOiBMaWtld2lzZS4KKwlQb3J0YWJpbGl0eSBpc3N1ZXMgcmVwb3J0ZWQgYnkgTmVsc29uIEguIEYuIEJlZWJlLgorCisJKiBkYXRhL2dsci5jICh5eWJvb2wpOiBSZW5hbWVkIGZyb20gYm9vbCwgdG8gYXZvaWQgY29sbGlzaW9ucyBpbiBDLgorCUFsbCB1c2VzIGNoYW5nZWQuICBQcm92aWRlIGEgZGVmaW5pdGlvbiBpbiBib3RoIEMgYW5kIEMrKy4KKwkoeXl0cnVlLCB5eWZhbHNlKTogRGVmaW5lIGV2ZW4gaWYgZGVmaW5lZCAoX19jcGx1c3BsdXMpLgorCisJKiBsaWIvYml0c2V0X3N0YXRzLmMgKGJpdHNldF9zdGF0c19saXN0KTogUmVtb3ZlIHVudXNlZCB2YXIuCisJUmVwb3J0ZWQgYnkgTmVsc29uIEguIEYuIEJlZWJlLgorCisJKiBzcmMvc2Nhbi1za2VsLmwgKCJAb2xpbmVAIik6IE91dHB1dCBsaW5lbm8rMSwgbm90IGxpbmVuby4KKworMjAwMy0wMS0wMiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGRhdGEveWFjYy5jICh5eWVycmxhYjEpOiBBcHBlbmQgYDsnIGFmdGVyIGF0dHJpYnV0ZSwgdG8KKwlwYWNpZnkgdGhlIGJ1Z2d5ICJzbWFydCBwcmVwcm9jZXNzb3IiIGluIE1hY09TIDEwLjIuMy4KKwlCdWcgcmVwb3J0ZWQgYnkgTmVsc29uIEguIEYuIEJlZWJlLgorCisyMDAzLTAxLTAxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogVmVyc2lvbiAxLjg3NS4KKworMjAwMi0xMi0zMCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIHNyYy9zY2FuLWdyYW0ubCAoPElOSVRJQUwsU0NfQUZURVJfSURFTlRJRklFUixTQ19QUkVfQ09ERT4iLCIpOgorCU1vdmVkIGhlcmUgZnJvbS4uLgorCSg8SU5JVElBTD4iLCIpOiBIZXJlLiAgVGhpcyBjYXVzZXMgc3RyYXkgIiwiIHRvIGJlIHRyZWF0ZWQKKwltb3JlIHVuaWZvcm1seS4KKworCSogc3JjL3NjYW4tZ3JhbS5sICg8U0NfQlJBQ0VEX0NPREU+In0iKTogT3V0cHV0ICI7IiBiZWZvcmUgdGhlCisJbGFzdCBicmFjZSBpbiBicmFjZWQgY29kZSB3aGVuIG5vdCBpbiBZYWNjIG1vZGUsIGZvciBjb21wYXRpYmlsaXR5CisJd2l0aCBCaXNvbiAxLjM1LiAgVGhpcyByZXN1cnJlY3RzIHRoZSAyMDAxLTEyLTE1IHBhdGNoIHRvCisJc3JjL3JlYWRlci5jLgorCisJKiBzcmMvcmVhZGVyLmggKFlZREVDTCk6IFVzZSBZWVNUWVBFLCBub3QgaXRzIGRlcHJlY2F0ZWQgYWxpYXMKKwl5eXN0eXBlLiAgVGhpcyBmb2xsb3dzIHVwIHRoZSAyMDAyLTEyLTI0IFlZU1RZUEUgYnVnIGZpeC4KKworMjAwMi0xMi0yOCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIHNyYy9zeW10YWIuYyAoc3ltYm9sX21ha2VfYWxpYXMpOiBTZXQgdHlwZSBvZiBTWU1WQUwgdG8gYmUKKwl0aGF0IG9mIFNZTSdzIHR5cGUuICBUaGlzIGZpeGVzIERlYmlhbiBidWcgMTY4MDY5LCByZXBvcnRlZCBieQorCVRob21hcyBPbHNzb24uCisKKzIwMDItMTItMjggIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJVmVyc2lvbiAxLjc1Zi4KKworCVN3aXRjaCBiYWNrIHRvIHRoZSBZYWNjIHN0eWxlIG9mIGNvbmZsaWN0IHJlcG9ydHMsIHVuZG9pbmcgc29tZQorCW9mIHRoZSAyMDAyLTA3LTMwIGNoYW5nZS4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChVbmRlcnN0YW5kaW5nKTogVXNlIFlhY2Mgc3R5bGUgZm9yCisJY29uZmxpY3QgcmVwb3J0cy4gIEFsc28sIHVzZSBuZXcgd2F5IG9mIGxvY2F0aW5nIHJ1bGVzLgorCSogc3JjL2NvbmZsaWN0cy5jIChjb25mbGljdF9yZXBvcnQpOgorCVJlbmFtZWQgZnJvbSBjb25mbGljdF9yZXBvcnRfeWFjYywgcmVtb3ZpbmcgdGhlIG9sZAorCSdjb25mbGljdF9yZXBvcnQnLiAgVHJhbnNsYXRlIHRoZSBlbnRpcmUgY29uZmxpY3QgcmVwb3J0IGF0IG9uY2UsCisJc28gdGhhdCB3ZSBkb24ndCBhc3N1bWUgdGhhdCAiLCIgaGFzIHRoZSBzYW1lIGludGVycHJldGF0aW9uIGluCisJYWxsIGxhbmd1YWdlcy4KKwkoY29uZmxpY3RzX291dHB1dCk6IFVzZSBZYWNjLXN0eWxlIGNvbmZsaWN0IHJlcG9ydCBmb3IgZWFjaCBzdGF0ZSwKKwlpbnN0ZWFkIG9mIG91ciBtb3JlLWNvbXBsaWNhdGVkIHN0eWxlLgorCShjb25mbGljdHNfcHJpbnQpOiBVc2UgWWFjYy1zdHlsZSBjb25mbGljdCByZXBvcnQsIGV4Y2VwdCBwcmludAorCXRoZSBpbnB1dCBmaWxlIG5hbWUgd2hlbiBub3QgZW11bGF0aW5nIFlhY2MuCisJKiB0ZXN0cy9jb25mbGljdHMuYXQgKFVucmVzb2x2ZWQgU1IgQ29uZmxpY3RzLCBEZWZhdWx0ZWQKKwlDb25mbGljdGVkIFJlZHVjdGlvbiwgJWV4cGVjdCBub3QgZW5vdWdoLCAlZXhwZWN0IHRvbyBtdWNoLAorCSVleHBlY3Qgd2l0aCByZWR1Y2UgY29uZmxpY3RzKTogU3dpdGNoIHRvIFlhY2Mtc3R5bGUgY29uZmxpY3QgcmVwb3J0cy4KKwkqIHRlc3RzL2V4aXN0aW5nLmF0IChHTlUgQ2ltIEdyYW1tYXIpOiBMaWtld2lzZS4KKwkqIHRlc3RzL2dsci1yZWdyMS5hdCAoQmFkbHkgQ29sbGFwc2VkIEdMUiBTdGF0ZXMpOiBMaWtld2lzZS4KKworCSogc3JjL2NvbXBsYWluLmMgKHdhcm5fYXQsIHdhcm4sIGNvbXBsYWluX2F0LCBjb21wbGFpbiwgZmF0YWxfYXQsCisJZmF0YWwpOiBEb24ndCBpbnZva2UgZmZsdXNoOyBpdCdzIG5vdCBuZWVkZWQgYW5kIGl0IG1pZ2h0IGV2ZW4gYmUKKwloYXJtZnVsIGZvciBzdGRvdXQsIGFzIHN0ZG91dCBtaWdodCBub3QgYmUgb3Blbi4KKwkqIHNyYy9yZWR1Y2UuYyAocmVkdWNlX3ByaW50KTogTGlrZXdpc2UuCisKKzIwMDItMTItMjcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJRml4IGEgYnVnIHdoZXJlIGVycm9yIGxvY2F0aW9ucyB3ZXJlIG5vdCBiZWluZyByZWNvcmRlZCBjb3JyZWN0bHkuCisJVGhpcyBwcm9ibGVtIHdhcyBvcmlnaW5hbGx5IHJlcG9ydGVkIGJ5IFBhdWwgSGlsZmluZ2VyIGluCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwMi0xMS9tc2cwMDA4Ni5odG1sPi4KKworCSogZGF0YS95YWNjLmMgKHl5cGFyc2UpOiBOZXcgbG9jYWwgdmFyIHl5bGVycnNwLCB0byByZWNvcmQgdGhlCisJdG9wIG9mIHRoZSBsb2NhdGlvbiBzdGFjaydzIGVycm9yIGxvY2F0aW9ucy4KKwkoeXllcnJsYWIpOiBTZXQgaXQuICBXaGVuIGRpc2NhcmRpbmcgYSB0b2tlbiwgcHVzaCBpdHMgbG9jYXRpb24KKwlvbnRvIHl5bGVycnNwIHNvIHRoYXQgd2UgZG9uJ3QgbG9zZSB0cmFjayBvZiB0aGUgZXJyb3IncyBlbmQuCisJKHl5ZXJybGFiMSk6IE5vdyBpcyBvbmx5IHRoZSB0YXJnZXQgb2YgWVlFUlJPUiwgc28gdGhhdCB3ZSBjYW4KKwlwcm9wZXJseSByZWNvcmQgdGhlIGxvY2F0aW9uIG9mIHRoZSBhY3Rpb24gdGhhdCBmYWlsZWQuICBGb3IgR0NDCisJMi45MyBhbmQgbGF0ZXIsIGluc2VydCBhbiBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpIHRvIGF2b2lkCisJR0NDIHdhcm5pbmcgYWJvdXQgeXllcnJsYWIxIGJlaW5nIHVudXNlZCBpZiBZWUVSUk9SIGlzIHVudXNlZC4KKwkoeXllcnJsYWIyKTogTmV3IGxhYmVsLCB3aGljaCB5eWVycmxhYiBub3cgZmFsbHMgdGhyb3VnaCB0by4KKwlDb21wdXRlIHRoZSBlcnJvcidzIGxvY2F0aW9uIGJ5IGFwcGx5aW5nIFlZTExPQ19ERUZBVUxUIHRvCisJdGhlIGxvY2F0aW9ucyBvZiBhbGwgdGhlIHN5bWJvbHMgdGhhdCB3ZW50IGludG8gdGhlIGVycm9yLgorCSogZG9jL2Jpc29uLnRleGluZm8gKExvY2F0aW9uIERlZmF1bHQgQWN0aW9uKTogTWVudGlvbiB0aGF0CisJWVlMTE9DX0RFRkFVTFQgaXMgYWxzbyBpbnZva2VkIGZvciBzeW50YXggZXJyb3JzLgorCSogdGVzdHMvYWN0aW9ucy5hdCAoX0FUX0NIRUNLX1BSSU5URVJfQU5EX0RFU1RSVUNUT1IpOgorCUVycm9yIGxvY2F0aW9ucyBpbmNsdWRlIHRoZSBsb2NhdGlvbnMgb2YgYWxsIHRoZSB0b2tlbnMgdGhhdCB3ZXJlCisJZGlzY2FyZGVkLCBub3QganVzdCB0aGUgbGFzdCB0b2tlbi4KKworMjAwMi0xMi0yNiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIHNyYy9maWxlcy5jOiBJbmNsdWRlIHF1b3RlLmguCisJKGNvbXB1dGVfb3V0cHV0X2ZpbGVfbmFtZXMpOiBXYXJuIGlmIHdlIGRldGVjdCBjb25mbGljdGluZworCW91dHB1dHMgdG8gdGhlIHNhbWUgZmlsZS4gIFRoaXMgc2hvdWxkIGNhdGNoIHRoZSBtaXN1bmRlcnN0YW5kaW5nCisJZXhlbXBsaWZpZWQgYnkgRGViaWFuIEJ1ZyAxNjUzNDksIHJlcG9ydGVkIGJ5IEJydWNlIFN0ZXBoZW5zLi4KKworCSogc3JjL2NvbmZsaWN0cy5jIChjb25mbGljdHNfcHJpbnQpOiBJZiB0aGUgdXNlciBzcGVjaWZpZXMKKwkiJWV4cGVjdCBOIiwgcmVwb3J0IGFuIGVycm9yIGlmIHRoZXJlIGFyZSBhbnkgcmVkdWNlL3JlZHVjZQorCWNvbmZsaWN0cy4gIFRoaXMgaXMgd2hhdCB0aGUgbWFudWFsIHNheXMgc2hvdWxkIGhhcHBlbi4KKwlUaGlzIGZpeGVzIERlYmlhbiBidWcgMTMwODkwLCByZXBvcnRlZCBieSBBbnRob255IERlUm9iZXJ0aXMuCisJKiB0ZXN0cy9jb25mbGljdHMuYXQgKCVleHBlY3Qgd2l0aCByZWR1Y2UgY29uZmxpY3RzKTogTmV3IHRlc3QuCisKKwlEb24ndCB1c2UgbTRfaW5jbHVkZSBvbiByZWxhdGl2ZSBmaWxlIG5hbWVzLCBhcyBpdCBkb2Vzbid0IHdvcmsgYXMKKwlkZXNpcmVkIGlmIHRoZXJlIGhhcHBlbnMgdG8gYmUgYSBmaWxlIHdpdGggdGhhdCBuYW1lIHVuZGVyICIuIi4KKworCSogbTRzdWdhci92ZXJzaW9uLm00OiBSZW1vdmU7IGl0IHdhcyBpbmNsdWRlZCBidXQgaXQgd2Fzbid0IHVzZWQuCisJKiBkYXRhL01ha2VmaWxlLmFtIChkaXN0X200c3VnYXJfREFUQSk6IFJlbW92ZSBtNHN1Z2FyL3ZlcnNpb24ubTQuCisJKiBkYXRhL200c3VnYXIvbTRzdWdhci5tNDogRG9uJ3QgaW5jbHVkZSBtNHN1Z2FyL3ZlcnNpb24ubTQuCisJKiBkYXRhL2dsci5jLCBkYXRhL2xhbHIxLmNjLCBkYXRhL3lhY2MuYzogRG9uJ3QgaW5jbHVkZSBjLm00LgorCSogc3JjL291dHB1dC5jIChvdXRwdXRfc2tlbGV0b24pOiBVc2UgZnVsbCBwYXRoIG5hbWVzIHdoZW4KKwlzcGVjaWZ5aW5nIGEgZmlsZSB0byBpbmNsdWRlOyBkb24ndCByZWx5IG9uIGluY2x1ZGUgcGF0aCwgYXMKKwlpdCdzIHVucmVsaWFibGUgd2hlbiB0aGUgd29ya2luZyBmaWxlIGNvbnRhaW5zIGEgZmlsZSB3aXRoCisJdGhhdCBuYW1lLgorCisyMDAyLTEyLTI1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCVJlbW92ZSBvYnNvbGV0ZSByZWZlcmVuY2VzIHRvIGJpc29uLnNpbXBsZSBhbmQgYmlzb24uaGFpcnkuCisJUHJvYmxlbSBtZW50aW9uZWQgYnkgQXViaW4gTWFoZSBpbgorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvaGVscC1iaXNvbi8yMDAyLTEyL21zZzAwMDEwLmh0bWw+LgorCSogZGF0YS9nbHIuYzogQ29tbWVudCBmaXguCisJKiBkb2MvYmlzb24uMTogUmVtb3ZlIHJlZmVyZW5jZXMuICBBbHNvLCBtZW50aW9uICJ5YWNjIi4KKworCSogc3JjL2dldGFyZ3MuYyAoZ2V0YXJncykgW01TRE9TXTogRG9uJ3QgYXNzdW1lIG9wdGFyZyAhPSBOVUxMCisJd2l0aCAtZyBvcHRpb24uCisKKwkqIHNyYy9wYXJzZS1ncmFtLnkgKGRlY2xhcmF0aW9uKTogVXNlIGVudW0gInJlcG9ydF9zdGF0ZXMiIHJhdGhlcgorCXRoYW4gaXRzIG51bWVyaWMgdmFsdWUgMS4KKworCSogc3JjL3NjYW4tc2tlbC5sICgiQG91dHB1dCAiLipcbik6IENsb3NlIGFueSBvbGQgeXlvdXQgYmVmb3JlCisJb3BlbmluZyBhIG5ldyBvbmUuICBUaGlzIGZpeGVzIERlYmlhbiBidWcgMTY1MzQ5LCByZXBvcnRlZCBieQorCUJydWNlIFN0ZXBoZW5zLgorCisyMDAyLTEyLTI0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCVZlcnNpb24gMS43NWUuCisKKwkqIE1ha2VmaWxlLm1haW50IChjdnMtdXBkYXRlKTogRG9uJ3QgYXNzdW1lIHRoYXQgdGhlIHNoZWxsCisJc3VwcG9ydHMgJCguLi4pLCBhcyBTb2xhcmlzIHNoIGRvZXNuJ3QuCisKKwkqIHNyYy9wYXJzZS1ncmFtLnkgKGxsb2NfZGVmYXVsdCk6IFJlbW92ZSB0ZXN0IGZvciBlbXB0eQorCW5vbnRlcm1pbmFscyBhdCB0aGUgZW5kLCBzaW5jZSBpdCBkaWRuJ3QgY2hhbmdlIHRoZSByZXN1bHQuCisKKzIwMDItMTItMjQgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJSWYgdGhlIHVzZXIgZG9lcyBub3QgZGVmaW5lIFlZU1RZUEUgYXMgYSBtYWNybywgQmlzb24gbm93IGRlY2xhcmVzIGl0CisJdXNpbmcgdHlwZWRlZiBpbnN0ZWFkIG9mIGRlZmluaW5nIGl0IGFzIGEgbWFjcm8uICBQT1NJWCByZXF1aXJlcyB0aGlzLgorCUZvciBjb25zaXN0ZW5jeSwgWVlMVFlQRSBpcyBhbHNvIGRlY2xhcmVkIGluc3RlYWQgb2YgZGVmaW5lZC4KKworCSV1bmlvbiBkaXJlY3RpdmVzIGNhbiBub3cgaGF2ZSBhIHRhZyBiZWZvcmUgdGhlIGB7JywgZS5nLiwgdGhlCisJZGlyZWN0aXZlIGAldW5pb24gZm9vIHsuLi59JyBub3cgZ2VuZXJhdGVzIHRoZSBDIGNvZGUKKwlgdHlwZWRlZiB1bmlvbiBmb28geyAuLi4gfSBZWVNUWVBFOyc7IHRoaXMgaXMgZm9yIFlhY2MgY29tcGF0aWJpbGl0eS4KKwlUaGUgZGVmYXVsdCB1bmlvbiB0YWcgaXMgYFlZU1RZUEUnLCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFNvbGFyaXMgOQorCVlhY2MuICBGb3IgY29uc2lzdGVuY3ksIFlZTFRZUEUncyBzdHJ1Y3QgdGFnIGlzIG5vdyBgWVlMVFlQRScKKwlpbnN0ZWFkIG9mIGB5eWx0eXBlJy4KKworCWB5eXN0eXBlJyBhbmQgYHl5bHR5cGUnIGFyZSBub3cgb2Jzb2xlc2NlbnQgbWFjcm9zIGluc3RlYWQgb2YgYmVpbmcKKwl0eXBlZGVmcyBvciB0YWdzOyB0aGV5IGFyZSBubyBsb25nZXIgZG9jdW1lbnRlZCBhbmQgd2lsbCBiZQorCXdpdGhkcmF3biBpbiBhIGZ1dHVyZSByZWxlYXNlLgorCisJKiBkYXRhL2dsci5jIChiNF9sb2NhdGlvbl90eXBlKTogUmVtb3ZlLgorCShZWVNUWVBFKTogUmVuYW1lZCBmcm9tIHl5c3R5cGUuCisJKFlZU1RZUEVfSVNfREVDTEFSRUQpOiBOZXcgbWFjcm8sIHVzZWQgdG8gcHJldmVudCBkb3VibGUtdHlwZWRlZi4KKwkoc3RydWN0IFlZTFRZUEUpOiBSZW5hbWVkIGZyb20gc3RydWN0IHl5bHR5cGUuCisJKFlZTFRZUEUpOiBSZW5hbWVkIGZyb20geXlsdHlwZS4KKwkoeXlsdHlwZSwgeXlzdHlwZSk6IE5ldyAoYW5kIG9ic29sZXNjZW50KSBtYWNyb3MsCisJZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisJKiBkYXRhL3lhY2MuYzogTGlrZXdpc2UuCisKKwkqIGRhdGEveWFjYy5jIChZWVNUWVBFKTogRGVjbGFyZSBhcyB1bmlvbiBZWVNUWVBFIGlmIHRoZSB1c2VyCisJZG9lcyBub3Qgc3BlY2lmeSBhIHVuaW9uIHRhZy4gIFRoaXMgaXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aAorCVNvbGFyaXMgOSB5YWNjLgorCisJKiBzcmMvcGFyc2UtZ3JhbS55IChhZGRfcGFyYW0pOiAybmQgYXJnIGlzIG5vdyBjaGFyICogbm90IGNoYXIKKwljb25zdCAqLCBzaW5jZSBpdCBpcyBub3cgbW9kaWZpZWQgYnkgc3RyaXBwaW5nIHN1cnJvdW5kaW5nIHsgfS4KKwkoY3VycmVudF9icmFjZWRfY29kZSk6IFJlbW92ZS4KKwkoUEVSQ0VOVF9ERVNUUlVDVE9SLCBQRVJDRU5UX1BSSU5URVIsIFBFUkNFTlRfVU5JT04sCisJUEVSQ0VOVF9MRVhfUEFSQU0sIFBFUkNFTlRfUEFSU0VfUEFSQU0pOiBDaGFuZ2UgbmFtZXMgdG8gaW5jbHVkZQorCXRyYWlsaW5nICIgey4uLn0iLiAgTm93IG9mIHR5cGUgPGNoYXJzPi4KKwkoZ3JhbW1hcl9kZWNsYXJhdGlvbik6IEFkanVzdCB0byBidW5kbGVkIHRva2Vucy4KKwkoY29kZV9jb250ZW50KTogUmVtb3ZlOyBzdHJpcHBpbmcgaXMgbm93IGRvbmUgYnkgYWRkX3BhcmFtLgorCShwcmludF90b2tlbl92YWx1ZSk6IFByaW50IGNvbnRlbnRzIG9mIGJ1bmRsZWQgdG9rZW5zLgorCSh0b2tlbl9uYW1lKTogTmV3IGZ1bmN0aW9uLgorCisJKiBzcmMvcmVhZGVyLmggKGJyYWNlZF9jb2RlLCBjdXJyZW50X2JyYWNlZF9jb2RlKTogUmVtb3ZlLgorCSh0b2tlbl9uYW1lKTogTmV3IGRlY2wuCisKKwkqIHNyYy9zY2FuLWdyYW0ubCAoaGFuZGxlX2RvbGxhciwgaGFuZGxlX2F0KTogTm93IHRha2VzIGludAorCXRva2VuX3R5cGUsIG5vdCBicmFjZWRfY29kZSBjb2RlX2tpbmQuICBBbGwgdXNlcyBjaGFuZ2VkLgorCShTQ19QUkVfQ09ERSk6IE5ldyBzdGF0ZSwgZm9yIHNjYW5uaW5nIGFmdGVyIGEga2V5d29yZCB0aGF0CisJaGFzIChvciB1c3VhbGx5IGhhcykgYW4gaW1tZWRpYXRlbHktZm9sbG93aW5nIGJyYWNlZCBjb2RlLgorCSh0b2tlbl90eXBlKTogTmV3IGxvY2FsIHZhciwgdG8ga2VlcCB0cmFjayBvZiB3aGljaCB0b2tlbiB0eXBlCisJdG8gcmV0dXJuIHdoZW4gc2Nhbm5pbmcgYnJhY2VkIGNvZGUuCisJKDxJTklUSUFMPiIlZGVzdHJ1Y3RvciIsIDxJTklUSUFMPiIlbGV4LXBhcmFtIiwKKwk8SU5JVElBTD4iJXBhcnNlLXBhcmFtIiwgPElOSVRJQUw+IiVwcmludGVyIiwKKwk8SU5JVElBTD4iJXVuaW9uIik6IFNldCB0b2tlbiB0eXBlIGFuZCBCRUdJTiBTQ19QUkVfQ09ERQorCWluc3RlYWQgb2YgcmV0dXJuaW5nIGEgdG9rZW4gdHlwZSBpbW1lZGlhdGVseS4KKwkoPElOSVRJQUw+InsiKTogU2V0IHRva2VuIHR5cGUuCisJKDxTQ19CUkFDRURfQ09ERT4ifSIpOiBVc2UgaXQuCisJKGhhbmRsZV9hY3Rpb25fZG9sbGFyLCBoYW5kbGVfYWN0aW9uX2F0KTogTm93IHJldHVybnMgYm9vbAorCWluZGljYXRpbmcgc3VjY2Vzcy4gIEZhaWwgaWYgISBjdXJyZW50X3J1bGU7IHRoaXMgcHJldmVudHMgYSBjb3JlIGR1bXAuCisJKGhhbmRsZV9zeW1ib2xfY29kZV9kb2xsYXIsIGhhbmRsZV9zeW1ib2xfY29kZV9hdCk6CisJUmVtb3ZlOyBtZXJnZSBib2R5IGludG8gY2FsbGVyLgorCShoYW5kbGVfZG9sbGFyLCBoYW5kbGVfYXQpOiBDb21wbGFpbiBpbiBpbnZhbGlkIGNvbnRleHRzLgorCisJKiBORVdTLCBkb2MvYmlzb24udGV4aW5mbzogRG9jdW1lbnQgdGhlIGFib3ZlLgorCSogTkVXUzogRml4IHllYXJzIGFuZCBwcm9ncmFtIG5hbWVzIGluIGNvcHlyaWdodCBub3RpY2UuCisKKzIwMDItMTItMTcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBORVdTLCBkb2MvYmlzb24udGV4aW5mbyAoUGFyc2VyIEZ1bmN0aW9uLCBQdXJlIENhbGxpbmcsIEVycm9yCisJUmVwb3J0aW5nLCBUYWJsZSBvZiBTeW1ib2xzKTogT21pdCBtZW50aW9ucyBvZiAlbGV4LXBhcmFtIGFuZAorCSVwYXJzZS1wYXJhbSBmcm9tIHRoZSBkb2N1bWVudGF0aW9uIGZvciBub3cuCisKKzIwMDItMTItMTUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJVW5kbyBtb3N0IG9mIHRoZSAyMDAyLTExLTEyIHl5Y2hhciAtPiB5eXRva2VuIHBhdGNoLCBhcyBpdCBicm9rZQorCUdDQyAzLjIuMSAod2hpY2ggZGVwZW5kcyBvbiB5eWNoYXIgPT0gWVlFTVBUWSB3aGVuIHRoZXJlIGlzIG5vCisJbG9va2FoZWFkIHN5bWJvbCwgYW5kIHdoaWNoIHNldHMgeXljaGFyIGluIHBhcnNlciBhY3Rpb25zKSBhbmQgaXQKKwlkaXNhZ3JlZWQgd2l0aCB0aGUgQmlzb24gZG9jdW1lbnRhdGlvbi4gIEJ1ZworCXJlcG9ydGVkIGJ5IEFuZHJldyBXYWxyb25kLgorCisJKiBkYXRhL3lhY2MuYyAoWVlUUkFOU0xBVEUpOiBEb24ndCBjaGVjayBmb3IgbmVnYXRpdmUgYXJndW1lbnQsCisJYXMgdGhlIGNhbGxlciBub3cgZG9lcyB0aGF0LgorCSh5eWNsZWFyaW4sIFlZQkFDS1VQLCB5eXBhcnNlKTogVXNlIHl5Y2hhciwgbm90IHl5dG9rZW4uCisJKFlZRU1QVFkpOiBQYXJlbnRoZXNpemUgcmlnaHQgaGFuZCBzaWRlLCBzaW5jZSBvdGhlcnMgdXNlIGl0LgorCSh5eXBhcnNlKTogRG9uJ3QgYXNzdW1lIHRoYXQgb3VyIGdlbmVyYXRlZCBjb2RlIGlzIHRoZSBvbmx5IGNvZGUKKwl0aGF0IHNldHMgeXljaGFyLgorCisyMDAyLTEyLTEzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCVZlcnNpb24gMS43NWQuCisKKwlQT1NJWCByZXF1aXJlcyBhICJ5YWNjIiBjb21tYW5kLgorCSogc3JjL01ha2VmaWxlLmFtIChiaW5fU0NSSVBUUyk6IE5ldyBtYWNybywgZm9yIHlhY2MuCisJKE1PU1RMWUNMRUFORklMRVMpOiBBZGQgeWFjYy4KKwkoeWFjYyk6IE5ldyBydWxlLgorCSogZG9jL2Jpc29uLnRleGluZm8gKEludm9jYXRpb24sIEJpc29uIE9wdGlvbnMpOiBNZW50aW9uIHlhY2MKKwlhcyBhbiBhbGlhcyBmb3IgYmlzb24geS4KKworCSogcG8vTElOR1VBUzogQWRkIGRhLgorCisJKiBzcmMvZ2V0YXJncy5jIChfX0dOVV9MSUJSQVJZX18pIFtsaW50XTogRGVmaW5lIHRvIHdvcmsgYXJvdW5kCisJcHJvYmxlbSB3aXRoIGxhdGVzdCA8Z2V0b3B0Lmg+LgorCShIQUNLX0ZPUl9fX0dOVV9MSUJSQVJZX19fUFJPVE9UWVBFKTogTmV3IG1hY3JvLgorCisJKiBkb2MvZmRsLnRleGk6IFVwZ3JhZGUgdG8gMS4yLgorCSogbGliL2FsbG9jYS5jLCBsaWIvZXJyb3IuYywgbGliL2dldG9wdC5jLCBsaWIvZ2V0b3B0LmgKKwlsaWIvZ2V0b3B0MS5jLCBsaWIvZ2V0dGV4dC5oLCBsaWIvbWVtcmNoci5jLCBsaWIvb2JzdGFjay5jLAorCWxpYi9vYnN0YWNrLmgsIGxpYi9zdHJubGVuLmMsIGxpYi91bmxvY2tlZC1pby5oOiBTeW5jIHdpdGgKKwlnbnVsaWIuCisJKiBjb25maWcvaW5zdGFsbC1zaDogU3luYyB3aXRoIGF1dG90b29scy4KKworCUZpeCBhIGJhZCBpbnRlcmFjdGlvbiB3aXRoIGZsZXggMi41LjIzIHJlcG9ydGVkIGJ5IEJydWNlIExpbGx5IGluCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwMi0xMS9tc2cwMDExNC5odG1sPi4KKwkqIGRhdGEveWFjYy5jIChZWUxUWVBFLCBzdHJ1Y3QgeXlsdHlwZSk6IERvIG5vdCBkZWZpbmUgdW5sZXNzCisJbG9jYXRpb25zIGFyZSByZXF1ZXN0ZWQuCisJKHVuaW9uIHl5YWxsb2MpOiBEbyBub3QgZGVwZW5kIG9uIFlZTFRZUEVfSVNfVFJJVklBTCB1bmxlc3MKKwlsb2NhdGlvbnMgYXJlIHJlcXVlc3RlZC4KKworMjAwMi0xMi0xMiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwlSZW1vdmUgdW5wb3J0YWJsZSBjYXN0cyBhbmQgc3RvcmFnZSBhbGxvY2F0aW9uIHRyaWNrcy4KKwlXaGlsZSB3ZSdyZSBhdCBpdCwgcmVtb3ZlIGFsbW9zdCBhbGwgY2FzdHMsIHNpbmNlIHRoZXkKKwl1c3VhbGx5IGFyZW4ndCBuZWVkZWQgYW5kIGFyZSBhIHNpZ24gb2YgdHJvdWJsZS4KKworCSogY29uZmlndXJlLmFjIChBQ19DSEVDS19UWVBFUyk6IENoZWNrIGZvciB1aW50cHRyX3QuCisKKwkqIHNyYy9kZXJpdmVzLmMgKGRlcml2ZXNfY29tcHV0ZSk6IERvIG5vdCBzdWJ0cmFjdCBOVE9LRU5TIGZyb20KKwl0aGUgcG9pbnRlciBEU0VUIHJldHVybmVkIGJ5IG1hbGxvYzsgdGhpcyBpc24ndCBwb3J0YWJsZS4KKwlJbnN0ZWFkLCBhbHdheXMgdXNlIERTRVRbaSAtIE5UT0tFTlNdIHJhdGhlciB0aGFuIERTRVRbaV0uCisJU2ltaWxhcmx5IGZvciBERVJJVkVTLgorCSogc3JjL2xhbHIuYyAoc2V0X2dvdG9fbWFwKTogTGlrZXdpc2UsIGZvciBHT1RPX01BUCBhbmQgVEVNUF9NQVAuCisJKiBzcmMvbnVsbGFibGUuYyAobnVsbGFibGVfY29tcHV0ZSk6IExpa2V3aXNlLCBmb3IgUlNFVFMgYW5kIE5VTExBQkxFLgorCSogc3JjL3JlZHVjZS5jIChyZWR1Y2VfZ3JhbW1hcl90YWJsZXMpOiBMaWtld2lzZSwgZm9yIG5vbnRlcm1tYXAKKworCSogc3JjL2Rlcml2ZXMuYyAoZGVyaXZlc19jb21wdXRlKTogRG8gbm90IGJvdGhlciBpbnZva2luZworCWludF9vZl9ydWxlX251bWJlciwgc2luY2UgcnVsZSBudW1iZXJzIGFyZSBpbnRlZ2Vycy4KKworCSogc3JjL2ZpbGVzLmMgKGNvbmNhdDIsIHRyLCBjb21wdXRlX2Jhc2VfbmFtZSk6IFVzZSB4bWFsbG9jIChOKQorCXJhdGhlciB0aGFuIFhNQUxMT0MgKGNoYXIsIE4pLgorCisJKiBzcmMvZmlsZXMuYyAoZmlsZW5hbWVfc3BsaXQpOiBSZXdyaXRlIHRvIGF2b2lkIGNhc3QuCisKKwkqIHNyYy9ncmFtLmggKHN5bWJvbF9udW1iZXJfYXNfaXRlbV9udW1iZXIsCisJaXRlbV9udW1iZXJfYXNfc3ltYm9sX251bWJlciwgcnVsZV9udW1iZXJfYXNfaXRlbV9udW1iZXIsCisJaXRlbV9udW1iZXJfYXNfcnVsZV9udW1iZXIpOgorCU5vdyBpbmxpbmUgZnVuY3Rpb25zIHJhdGhlciB0aGFuIG1hY3JvcywgdG8gYXZvaWQgY2FzdHMuCisJKiBzcmMvc3RhdGUuaCAoc3RhdGVfbnVtYmVyX2FzX2ludCk6IExpa2V3aXNlLgorCSogc3JjL3RhYmxlcy5jIChzdGF0ZV9udW1iZXJfdG9fdmVjdG9yX251bWJlciwKKwlzeW1ib2xfbnVtYmVyX3RvX3ZlY3Rvcl9udW1iZXIpOiBMaWtld2lzZS4KKworCSogc3JjL2dyYW0uaCAoaW50X29mX3J1bGVfbnVtYmVyKTogUmVtb3ZlOyBubyBsb25nZXIgdXNlZC4KKworCSogc3JjL2xhbHIuYyAoYWRkX2xvb2tiYWNrX2VkZ2UpOiBVc2UgbWFsbG9jIHJhdGhlciB0aGFuIGNhbGxvYywKKwlzaW5jZSB0aGUgcmVzdWx0aW5nIHN0b3JhZ2UgaXMgYWx3YXlzIHN0b3JlZCBpbnRvLgorCisJKiBzcmMvbWFpbi5jIChhbGxvY2EpIFtDX0FMTE9DQV06IEFkZCBkZWNsIGhlcmUsIHRoZSBvbmx5IHBsYWNlCisJd2hlcmUgaXQncyBuZWVkZWQuCisKKwkqIHNyYy9tdXNjbGVfdGFiLmMgKG11c2NsZV9tNF9vdXRwdXQpOgorCU5vdyBpbmxpbmUuICBSZXR1cm4gYm9vbCwgbm90IGludC4KKwkqIHNyYy9zdGF0ZS5jIChzdGF0ZV9jb21wYXJlKTogTGlrZXdpc2UuCisJKiBzcmMvc3ltdGFiLmMgKHN5bWJvbF9jaGVja19kZWZpbmVkLAorCXN5bWJvbF9jaGVja19hbGlhc19jb25zaXN0ZW5jeSwgc3ltYm9sX3BhY2ssIHN5bWJvbF90cmFuc2xhdGlvbiwKKwloYXNoX2NvbXBhcmVfc3ltYm9sLCBoYXNoX3N5bWJvbCk6CisJTGlrZXdpc2UuCisJKiBzcmMvdW5pcXN0ci5jICh1bmlxc3RyX3ByaW50KTogTGlrZXdpc2UuCisJKiBzcmMvbXVzY2xlX3RhYi5jIChtdXNjbGVfbTRfb3V0cHV0X3Byb2Nlc3Nvcik6CisJTmV3IGZ1bmN0aW9uLCB0byBhdm9pZCBjYXN0cy4KKwkqIHNyYy9zdGF0ZS5jIChzdGF0ZV9jb21wYXJhdG9yLCBzdGFnZV9oYXNoZXIpOiBMaWtld2lzZS4KKwkqIHNyYy9zeW10YWIuYyAoc3ltYm9sX2NoZWNrX2RlZmluZWRfcHJvY2Vzc29yLAorCXN5bWJvbF9jaGVja19hbGlhc19jb25zaXN0ZW5jeV9wcm9jZXNzb3IsIHN5bWJvbF9wYWNrX3Byb2Nlc3NvciwKKwlzeW1ib2xfdHJhbnNsYXRpb25fcHJvY2Vzc29yLCBoYXNoX3N5bWJvbF9jb21wYXJhdG9yLAorCWhhc2hfc3ltYm9sX2hhc2hlcik6IExpa2V3aXNlLgorCSogc3JjL3VuaXFzdHIuYyAodW5pcXN0cl9wcmludF9wcm9jZXNzb3IpOiBMaWtld2lzZS4KKwkqIHNyYy9tdXNjbGVfdGFiLmMgKG11c2NsZXNfbTRfb3V0cHV0KToKKwlVc2UgbmV3IGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIGNhc3Rpbmcgb2xkIGZ1bmN0aW9ucyB1bnBvcnRhYmx5LgorCSogc3JjL3N0YXRlLmMgKHN0YXRlX2hhc2hfbmV3KTogTGlrZXdpc2UuCisJKiBzcmMvc3ltdGFiLmMgKHN5bWJvbHNfbmV3LCBzeW1ib2xzX2RvLCBzeW1ib2xzX2NoZWNrX2RlZmluZWQsCisJc3ltYm9sc190b2tlbl90cmFuc2xhdGlvbnNfaW5pdCk6CisJTGlrZXdpc2UuCisJKiBzcmMvdW5pcXN0ci5jICh1bmlxc3Ryc19uZXcsIGhhc2hfaW5pdGlhbGl6ZSwgdW5pcXN0cnNfZG8pOiBMaWtld2lzZS4KKworCSogc3JjL291dHB1dC5jIChHRU5FUkFURV9NVVNDTEVfSU5TRVJUX1RBQkxFKTogVXNlIGxvbmcgbG9jYWwKKwl2YXIgaW5zdGVhZCBvZiBjYXN0aW5nIHRvIGxvbmcsIHRvIGF2b2lkIGNhc3RzLgorCShwcmVwYXJlX3N0YXRlcyk6IFVzZSBNQUxMT0MgcmF0aGVyIHRoYW4gYWxsb2NhLCBzbyB0aGF0IHdlIGRvbid0CisJaGF2ZSB0byB3b3JyeSBhYm91dCBhbGxvY2EuCisJKiBzcmMvc3RhdGUuYyAoc3RhdGVfaGFzaF9sb29rdXApOiBMaWtld2lzZS4KKworCSogc3JjL3NjYW4tZ3JhbS5sICg8U0NfRVNDQVBFRF9DSEFSQUNURVI+IiciKTogVXNlIHVuc2lnbmVkIGNoYXIKKwlsb2NhbCB2YXIgaW5zdGVhZCBvZiBjYXN0aW5nIHRvIHVuc2lnbmVkIGNoYXIsIHRvIGF2b2lkIGNhc3RzLgorCisJKiBzcmMvc3RhdGUuYyAoVFJBTlNJVElPTlNfQUxMT0MsIEVSUlNfQUxMT0MsIFJFRFVDVElPTlNfQUxMT0MsCisJU1RBVEVfQUxMT0MpOiBSZW1vdmUuCisJKHRyYW5zaXRpb25zX25ldywgZXJyc19uZXcsIHJlZHVjdGlvbnNfbmV3LCBzdGF0ZV9uZXcpOiBVc2UgbWFsbG9jCisJcmF0aGVyIHRoYW4gY2FsbG9jLCBhbmQgdXNlIG9mZnNldG9mIHRvIGF2b2lkIGFsbG9jYXRpbmcgc2xpZ2h0bHkKKwl0b28gbXVjaCBzdG9yYWdlLgorCShzdGF0ZV9uZXcpOiBJbml0aWFsaXplIGFsbCBtZW1iZXJzLgorCisJKiBzcmMvc3RhdGUuYyAoc3RhdGVfaGFzaCk6IFVzZSB1bnNpZ25lZCBhY2N1bXVsYXRvciwgbm90IHNpZ25lZC4KKworCSogc3JjL3N5bXRhYi5jIChzeW1ib2xfZnJlZSk6IFJlbW92ZTsgdW51c2VkLgorCShzeW1ib2xfZ2V0KTogUmVtb3ZlIGNhc3QgaW4gbGhzIG9mIGFzc2lnbm1lbnQuCisJKHN5bWJvbHNfZG8pOiBOb3cgc3RhdGljLiAgQWNjZXB0IGdlbmVyaWMgYXJndW1lbnRzLCBub3QKKwloYXNoaW5nLXJlbGF0ZWQgb25lcy4KKworCSogc3JjL3N5bXRhYi5oOiAoTlVNQkVSX1VOREVGSU5FRCk6IFJlbW92ZSB1bm5lY2Vzc2FyeSBjYXN0LgorCShzeW1ib2xfcHJvY2Vzc29yKTogUmVtb3ZlLgorCShzeW1ib2xzX2RvKTogUmVtb3ZlIGRlY2w7IG5vdyBzdGF0aWMuCisKKwkqIHNyYy9zeXN0ZW0uaCAoYWxsb2NhKTogUmVtb3ZlOyBkZWNsIG5vIGxvbmdlciBuZWVkZWQuCisJKDxzdGRkZWYuaD4pOiBJbmNsdWRlLCBmb3Igb2Zmc2V0b2YuCisJKDxpbnR0eXBlcy4+LCA8c3RkaW50Lmg+KTogSW5jbHVkZSBpZiBhdmFpbGFibGUuCisJKHVpbnRwdHJfdCk6IE5ldyB0eXBlLCBpZiBzeXN0ZW0gbGFja3MgaXQuCisJKENBTExPQywgTUFMTE9DLCBSRUFMTE9DKTogTmV3IG1hY3Jvcy4KKwlBbGwgdXNlcyBvZiBYQ0FMTE9DLCBYTUFMTE9DLCBhbmQgWFJFQUxMT0MgY2hhbmdlZCB0byB1c2UgdGhlc2UKKwluZXcgbWFjcm9zLgorCisJKiBzcmMvdGFibGVzLmMgKHRhYmxlX3NpemUpOiBOb3cgaW50LCB0byBwYWNpZnkgR0NDLgorCSh0YWJsZV9ncm93LCB0YWJsZV9uaW5mX3JlbWFwKTogVXNlIHNpZ25lZCB0YWJsZSBzaXplLgorCShzYXZlX3Jvdyk6IERvbid0IGJvdGhlciBpbml0aWFsaXppbmcgbG9jYWxzIHdoZW4gbm90IG5lZWRlZC4KKwkoZGVmYXVsdF9nb3RvLCBnb3RvX2FjdGlvbnMsIHBhY2tfdmVjdG9yKTogUmVtb3ZlIHVubmVjZXNzYXJ5IGNhc3RzLgorCSogc3JjL3VuaXFzdHIuYyAoaGFzaF9jb21wYXJlX3VuaXFzdHIpOiAgTGlrZXdpc2UuCisKKwkqIHNyYy92Y2cuaDogQ29ycmVjdCBtaXNzcGVsbGluZ3MuCisKKwkqIHNyYy92Y2dfZGVmYXVsdHMuaCAoR19DTUFYKTogTm93IElOVF9NQVguCisKKworCSogc3JjL2dldGFyZ3MuYyAoZ2V0YXJncyk6IERvbid0IGFzc3VtZSBFT0YgPT0gLTEuCisKKzIwMDItMTItMDkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJQ2hhbmdlIGlkZW50aWZpZXIgc3BlbGxpbmdzIHRvIGF2b2lkIGNvbGxpc2lvbnMgd2l0aCBuYW1lcworCXRoYXQgYXJlIHJlc2VydmVkIGJ5IFBPU0lYLgorCisJRG9uJ3QgdXNlIG5hbWVzIGVuZGluZyBpbiBfdCwgc2luY2UgUE9TSVggcmVzZXJ2ZXMgdGhlbS4KKwlGb3IgY29uc2lzdGVuY3ksIHJlbW92ZSBfZSBhbmQgX3MgZW5kaW5ncyAtLSB0aGV5J3JlIHdlcmVuJ3QKKwluZWVkZWQgdG8gcmVtb3ZlIGFtYmlndWl0eS4gIEFsbCB1c2VzIGNoYW5nZWQuCisJKiBzcmMvdW5pcXN0ci5oICh1bmlxc3RyKTogUmVuYW1lZCBmcm9tIHVuaXFzdHJfdCwgd2hpY2ggaW4KKwl0dXJuIHdhcyBqdXN0IHJlbmFtZWQgZnJvbSBzdHJ1bmlxX3QuCisJKiBzcmMvdW5pcXN0ci5jICh1bmlxc3RyX3Byb2Nlc3Nvcik6IFJlbmFtZWQgZnJvbSBzdHJ1bmlxX3Byb2Nlc3NvciwKKwl3aGljaCBpbiB0dXJuIHdhcyBqdXN0IHJlbmFtZWQgZnJvbSBzdHJ1bmlxX3Byb2Nlc3Nvcl90LgorCShoYXNoX2NvbXBhcmVfdW5pcXN0cik6IFJlbmFtZWQgZnJvbSBoYXNoX2NvbXBhcmVfc3RydW5pcSwgd2hpY2gKKwlpbiB0dXJuIHdhcyByZW5hbWVkIGZyb20gaGFzaF9jb21wYXJlX3N0cnVuaXFfdC4KKwkqIHNyYy9MUjAuYyAoc3RydWN0IHN0YXRlX2xpc3QpOiBSZW5hbWVkIGZyb20gc3RydWN0IHN0YXRlX2xpc3Rfcy4KKwkoc3RhdGVfbGlzdCk6IFJlbmFtZWQgZnJvbSBzdGF0ZV9saXN0X3QuCisJKiBzcmMvYXNzb2MuaCAoYXNzb2MpOiBSZW5hbWVkIGZyb20gYXNzb2NfdC4KKwkqIHNyYy9jb25mbGljdHMuYyAoZW51bSBjb25mbGljdF9yZXNvbHV0aW9uKTogUmVuYW1lZCBmcm9tCisJZW51bSBjb25mbGljdF9yZXNvbHV0aW9uX2UuCisJKiBzcmMvZGVyaXZlcy5jIChzdHJ1Y3QgcnVsZV9saXN0KTogUmVuYW1lZCBmcm9tIHN0cnVjdCBydWxlX2xpc3Rfcy4KKwkocnVsZV9saXN0KTogUmVuYW1lZCBmcm9tIHJ1bGVfbGlzdF90LgorCSogc3JjL2dldGFyZ3MuaCAoZW51bSB0cmFjZSk6IFJlbmFtZWQgZnJvbSBlbnVtIHRyYWNlX2UuCisJKGVudW0gcmVwb3J0KTogUmVuYW1lZCBmcm9tIGVudW0gcmVwb3J0X2UuCisJKiBzcmMvZ3JhbS5oIChpdGVtX251bWJlcik6IFJlbmFtZWQgZnJvbSBpdGVtX251bWJlcl90LgorCShydWxlX251bWJlcik6IFJlbmFtZWQgZnJvbSBydWxlX251bWJlcl90LgorCShzdHJ1Y3QgcnVsZV9zKTogUmVtb3ZlIHRoZSAicnVsZV9zIiBwYXJ0OyBub3QgdXNlZC4KKwkocnVsZSk6IFJlbmFtZWQgZnJvbSBydWxlX3QuCisJKHJ1bGVfZmlsdGVyKTogUmVuYW1lZCBmcm9tIHJ1bGVfZmlsdGVyX3QuCisJKiBzcmMvbGFsci5jIChzdHJ1Y3QgZ290b19saXN0KTogUmVuYW1lZCBmcm9tIHN0cnVjdCBnb3RvX2xpc3Rfcy4KKwkoZ290b19saXN0KTogUmVuYW1lZCBmcm9tIGdvdG9fbGlzdF90LgorCSogc3JjL2xhbHIuaCAoZ290b19udW1iZXIpOiBSZW5hbWVkIGZyb20gZ290b19udW1iZXJfdC4KKwkqIHNyYy9sb2NhdGlvbi5oIChsb2NhdGlvbik6IFJlbmFtZWQgZnJvbSBsb2NhdGlvbl90LgorCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlX2VudHJ5KTogUmVuYW1lZCBmcm9tIG11c2NsZV9lbnRyeV90LAorCWFuZCBtb3ZlZCBoZXJlIGZyb206CisJKiBzcmMvbXVzY2xlX3RhYi5oIChtdXNjbGVfZW50cnlfdCk6IGhlcmUuCisJKiBzcmMvbnVsbGFibGUuYyAoc3RydWN0IHJ1bGVfbGlzdCk6IFJlbmFtZWQgZnJvbSBzdHJ1Y3QgcnVsZV9saXN0X3MuCisJKHJ1bGVfbGlzdCk6IFJlbmFtZWQgZnJvbSBydWxlX2xpc3RfdC4KKwkqIHNyYy9wcmludF9ncmFwaC5jIChzdGF0aWNfZ3JhcGgpOiBSZW5hbWVkIGZyb20gZ3JhcGguCisJKiBzcmMvcmVhZGVyLmggKGJyYWNlZF9jb2RlKTogUmVuYW1lZCBmcm9tIGJyYWNlZF9jb2RlX3QuCisJUmVtb3ZlIGJyYWNlX2NvZGVfZSB0YWcuCisJKiBzcmMvcmVsYXRpb24uaCAocmVsYXRpb25fbm9kZSk6IFJlbmFtZWQgZnJvbSByZWxhdGlvbl9ub2RlX3QuCisJKHJlbGF0aW9uX25vZGVzKTogUmVuYW1lZCBmcm9tIHJlbGF0aW9uX25vZGVzX3QuCisJKHJlbGF0aW9uKTogUmVuYW1lZCBmcm9tIHJlbGF0aW9uX3QuCisJKiBzcmMvc3RhdGUuaCAoc3RhdGVfbnVtYmVyKTogUmVuYW1lZCBmcm9tIHN0YXRlX251bWJlcl90LgorCShzdHJ1Y3Qgc3RhdGUpOiBSZW5hbWVkIGZyb20gc3RydWN0IHN0YXRlX3MuCisJKHN0YXRlKTogUmVuYW1lZCBmcm9tIHN0YXRlX3QuCisJKHRyYW5zaXRpb25zKTogUmVuYW1lZCBmcm9tIHRyYW5zaXRpb25zX3QuICBVbnVzZWQgKGFuZAorCW1pc3NwZWxsZWQpIHRyYW5zdGlvbl9zIHRhZyByZW1vdmVkLgorCShlcnJzKTogUmVuYW1lZCBmcm9tIGVycnNfdC4gIFVudXNlZCBlcnJzX3MgdGFnIHJlbW92ZWQuCisJKHJlZHVjdGlvbnMpOiBSZW5hbWVkIGZyb20gcmVkdWN0aW9uc190LiAgVW51c2VkIHRhZworCXJlZHVjdGlvbnNfcyByZW1vdmVkLgorCSogc3JjL3N5bWxpc3QuaCAoc3ltYm9sX2xpc3QpOiBSZW5hbWVkIGZyb20gc3ltYm9sX2xpc3RfdC4KKwkoc3RydWN0IHN5bWJvbF9saXN0KTogUmVuYW1lZCBmcm9tIHN0cnVjdCBzeW1ib2xfbGlzdF9zLgorCSogc3JjL3N5bXRhYi5oIChzeW1ib2xfbnVtYmVyKTogUmVuYW1lZCBmcm9tIHN5bWJvbF9udW1iZXJfdC4KKwkoc3RydWN0IHN5bWJvbCk6IFJlbmFtZWQgZnJvbSBzdHJ1Y3Qgc3ltYm9sX3MuCisJKHN5bWJvbCk6IFJlbmFtZWQgZnJvbSBzeW1ib2xfdC4KKwkqIHNyYy90YWJsZXMuYyAodmVjdG9yX251bWJlcik6IFJlbmFtZWQgZnJvbSB2ZWN0b3JfbnVtYmVyX3QuCisJKGFjdGlvbl9udW1iZXIpOiBSZW5hbWVkIGZyb20gYWN0aW9uX3QuCisJKiBzcmMvdGFibGVzLmggKGJhc2VfbnVtYmVyKTogUmVuYW1lZCBmcm9tIGJhc2VfdC4KKwkqIHNyYy92Y2cuaCAoZW51bSBjb2xvcik6IFJlbmFtZWQgZnJvbSBlbnVtIGNvbG9yX2UuCisJKGVudW0gdGV4dG1vZGUpOiBSZW5hbWVkIGZyb20gZW51bSB0ZXh0bW9kZV9lLgorCShlbnVtIHNoYXBlKTogUmVuYW1lZCBmcm9tIGVudW0gc2hhcGVfZS4KKwkoc3RydWN0IGNvbG9yZW50cnkpOiBSZW5hbWVkIGZyb20gc3RydWN0IGNvbG9yZW50cnlfcy4KKwkoc3RydWN0IGNsYXNzbmFtZSk6IFJlbmFtZWQgZnJvbSBzdHJ1Y3QgY2xhc3NuYW1lX3MuCisJKHN0cnVjdCBpbmZvbmFtZSk6IFJlbmFtZWQgZnJvbSBzdHJ1Y3QgaW5mb25hbWVfcy4KKwkoZW51bSBsYXlvdXRhbGdvcml0aG0pOiBSZW5hbWVkIGZyb20gZW51bSBsYXlvdXRhbGdvcml0aG1fZS4KKwkoZW51bSBkZWNpc2lvbik6IFJlbmFtZWQgZnJvbSBlbnVtIGRlY2lzaW9uX2UuCisJKGVudW0gb3JpZW50YXRpb24pOiBSZW5hbWVkIGZyb20gZW51bSBvcmllbnRhdGlvbl9lLgorCShlbnVtIGFsaWdubWVudCk6IFJlbmFtZWQgZnJvbSBlbnVtIGFsaWdubWVudF9lLgorCShlbnVtIGFycm93X21vZGUpOiBSZW5hbWVkIGZyb20gZW51bSBhcnJvd19tb2RlX2UuCisJKGVudW0gY3Jvc3NpbmdfdHlwZSk6IFJlbmFtZWQgZnJvbSBlbnVtIGNyb3NzaW5nX3R5cGVfZS4KKwkoZW51bSB2aWV3KTogUmVuYW1lZCBmcm9tIGVudW0gdmlld19lLgorCShzdHJ1Y3Qgbm9kZSk6IFJlbmFtZWQgZnJvbSBzdHJ1Y3Qgbm9kZV9zLgorCShub2RlKTogUmVuYW1lZCBmcm9tIG5vZGVfdC4KKwkoZW51bSBsaW5lc3R5bGUpOiBSZW5hbWVkIGZyb20gZW51bSBsaW5lc3R5bGVfZS4KKwkoZW51bSBhcnJvd3N0eWxlKTogUmVuYW1lZCBmcm9tIGVudW0gYXJyb3dzdHlsZV9lLgorCShzdHJ1Y3QgZWRnZSk6IFJlbmFtZWQgZnJvbSBzdHJ1Y3QgZWRnZS4KKwkoZWRnZSk6IFJlbmFtZWQgZnJvbSBlZGdlX3QuCisJKHN0cnVjdCBncmFwaCk6IFJlbmFtZWQgZnJvbSBzdHJ1Y3QgZ3JhcGhfcy4KKwkoZ3JhcGgpOiBSZW5hbWVkIGZyb20gZ3JhcGhfdC4KKwkqIHRlc3RzL2NhbGMuYXQgKF9BVF9EQVRBX0NBTENfWSwgU2ltcGxlIExBTFIgQ2FsY3VsYXRvcik6CisJUmVuYW1lIHZhbHVlX3QgLT4gdmFsdWUuCisJKiB0ZXN0cy9pbnB1dC5hdCAoVG9ydHVyaW5nIHRoZSBTY2FubmVyKTogUmVuYW1lIHZhbHVlX3QgLT4gdmFsdWUsCisJdmFsdWVfdF9hc195eXN0eXBlIC0+IHZhbHVlX2FzX3l5c3R5cGUuCisKKwlEb24ndCBpbmNsdWRlIDxlcnJuby5oPiBpbiB0aGUgbWFpbnN0cmVhbSBjb2RlLCBzaW5jZSBpdAorCXJlc2VydmVzIEVbQS1aMC05XSogYW5kIHdlIHdhbnQgdG8gdXNlIHN5bWJvbHMgbGlrZSAnRVFVQUxTJy4KKwkqIGxpYi9nZXQtZXJybm8uYywgbGliL2dldC1lcnJuby5oOiBOZXcgZmlsZXMuCisJKiBsaWIvTWFrZWZpbGUuYW0gKGxpYmJpc29uX2FfU09VUkNFUyk6IEFkZCBnZXQtZXJybm8uaCwKKwlnZXQtZXJybm8uYy4KKwkqIHNyYy9maWxlcy5jICh4Zm9wZW4sIHhmY2xvc2UpOiBVc2UgZ2V0X2Vycm5vIGluc3RlYWQgb2YgZXJybm8uCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9za2VsZXRvbik6IExpa2V3aXNlLgorCSogc3JjL3NjYW4tZ3JhbS5sICg8SU5JVElBTD57aW50fSk6IFVzZSBzZXRfZXJybm8gYW5kIGdldF9lcnJubworCWluc3RlYWQgb2YgZXJybm8uCisJKDxTQ19FU0NBUEVEX1NUUklORyxTQ19FU0NBUEVEX0NIQVJBQ1RFUj5cXHhbMC05YWJjZGVmQUJDREVGXSspOgorCUxpa2V3aXNlLgorCShoYW5kbGVfYWN0aW9uX2RvbGxhciwgaGFuZGxlX2FjdGlvbl9hdCk6IExpa2V3aXNlLgorCSogc3JjL3N5c3RlbS5oOiBEbyBub3QgaW5jbHVkZSA8ZXJybm8uaD4uCisJKFRBQl9FWFQpOiBSZW5hbWVkIGZyb20gRVhUX1RBQi4KKwkoT1VUUFVUX0VYVCk6IFJlbmFtZWQgZnJvbSBFWFRfT1VUUFVULgorCisJQXZvaWQgc3RyW2Etel0qLCBzaW5jZSA8c3RyaW5nLmg+IHJlc2VydmVzIHRoYXQgbmFtZSBzcGFjZS4KKwlDaGFuZ2UgYWxsIGluc3RhbmNlcyBvZiAic3RydW5pcSIgaW4gbmFtZXMgdG8gInVuaXFzdHIiLCBhbmQKKwlsaWtld2lzZSBmb3IgIlNUUlVOSVEiIGFuZCAiVU5JUVNUUiIuCisJKiBzcmMvdW5pcXN0ci5jOiBSZW5hbWVkIGZyb20gc3JjL3N0cnVuaXEuYy4KKwkqIHNyYy91bmlxc3RyLmg6IFJlbmFtZWQgZnJvbSBzcmMvc3RydW5pcS5oLgorCSogc3JjL01ha2VmaWxlLmFtIChiaXNvbl9TT1VSQ0VTKTogQWRqdXN0IHRvIHRoZXNlIHJlbmFtaW5ncy4KKwkqIHNyYy9maWxlcy5jIChzdHJzdWZmaXgpOiBSZW1vdmU7IHVudXNlZC4KKwkoY29uY2F0Mik6IFJlbmFtZWQgZnJvbSBzdHJpbmdhcHBlbmQuICBOb3cgc3RhdGljLgorCSogc3JjL2ZpbGVzLmggKHN0cnN1ZmZpeCwgc3RyaW5nYXBwZW5kKTogUmVtb3ZlOyB1bnVzZWQuCisJKiBzcmMvcGFyc2UtZ3JhbS55ICg8Y2hhcnM+KTogUmVuYW1lZCBmcm9tIDxzdHJpbmc+LgorCSg8dW5pcXN0cj4pOiBSZW5hbWVkIGZyb20gPHN0cnVuaXE+LgorCSogc3JjL3NjYW4tZ3JhbS5sIChvYnN0YWNrX2Zvcl9zdHJpbmcpOiBSZW5hbWVkIGZyb20gc3RyaW5nX29ic3RhY2suCisJKiBzcmMvdmNnLmggKHN0cnVjdCBub2RlX3MuZXhwYW5kKTogUmVuYW1lZCBmcm9tIHN0cnVjdCBub2RlX3Muc3RyZXRjaC4KKwkoc3RydWN0IGdyYXBoX3MuZXhwYW5kKTogUmVuYW1lZCBmcm9tIHN0cnVjdCBncmFwaF9zLnN0cmV0Y2guCisJKiBzcmMvdmNnX2RlZmF1bHRzLmggKEdfRVhQQU5EKTogUmVuYW1lZCBmcm9tIEdfU1RSRVRDSC4KKwkoR19MT05HX1NUUkFJR0hUX1BIQVNFKTogUmVuYW1lZCBmcm9tIEdfU1RSQUlHSFRfUEhBU0UuCisJKE5fRVhQQU5EKTogUmVuYW1lZCBmcm9tIE5fU1RSRVRDSC4KKworCUF2b2lkICpfTUFYIGFuZCAqX01JTiwgc2luY2UgPGxpbWl0cy5oPiByZXNlcnZlcyB0aGF0IG5hbWUgc3BhY2UuCisJKiBkYXRhL3lhY2MuYyAoWVlTVEFDS19HQVBfTUFYSU1VTSk6IFJlbmFtZWQgZnJvbSBZWVNUQUNLX0dBUF9NQVguCisJKiBzcmMvZ3JhbS5oIChJVEVNX05VTUJFUl9NQVgsIElURU1fTlVNQkVSX01JTiwgUlVMRV9OVU1CRVJfTUFYKToKKwlSZW1vdmU7IHVudXNlZC4KKwkqIHNyYy9sYWxyLmggKEdPVE9fTlVNQkVSX01BWElNVU0pOiBSZW5hbWVkIGZyb20gR09UT19OVU1CRVJfTUFYLgorCSogc3JjL3N0YXRlLmggKFNUQVRFX05VTUJFUl9NQVhJTVVNKTogUmVuYW1lZCBmcm9tIFNUQVRFX05VTUJFUl9NQVguCisJKiBzcmMvc3ltdGFiLmggKFNZTUJPTF9OVU1CRVJfTUFYSU1VTSk6IFJlbmFtZWQgZnJvbSBTWU1CT0xfTlVNQkVSX01BWC4KKwkqIHNyYy90YWJsZXMuYyAoVkVDVE9SX05VTUJFUl9NQVgsIFZFQ1RPUl9OVU1CRVJfTUlOKTogUmVtb3ZlOyB1bnVzZWQuCisJKEJBU0VfTUFYSU1VTSk6IFJlbmFtZWQgZnJvbSBCQVNFX01BWC4KKwkoQkFTRV9NSU5JTVVNKTogUmVuYW1lZCBmcm9tIEJBU0VfTUlOLgorCShBQ1RJT05fTUFYKTogUmVtb3ZlOyB1bnVzZWQuCisJKEFDVElPTl9OVU1CRVJfTUlOSU1VTSk6IFJlbmFtZWQgZnJvbSBBQ1RJT05fTUlOLgorCVVubmVjZXNzYXJ5IGNhc3RzIHJlbW92ZWQgZnJvbSBhYm92ZSBkZWZpbmVzLgorCisKKwlGaXggbWlzc3BlbGxpbmcgaW4gbmFtZXMuCisJKiBzcmMvdmNnLmggKGVudW1fYWxpZ25tZW50X2UpOiBSZW5hbWVkIGZyb20gZW51bV9hbGlnbmVtZW50X2UuCisJKiBzcmMvdmNnX2RlZmF1bHRzLmggKEdfTk9ERV9BTElHTk1FTlQpOiBSZW5hbWVkIGZyb20KKwlHX05PREVfQUxJR05FTUVOVC4KKworCisJKiBsaWIvdGltZXZhci5jICh0aW1ldmFyX3JlcG9ydCk6IFJlbmFtZWQgZnJvbSB0aW1lX3JlcG9ydCwKKwlmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhlciBuYW1lcy4KKwkqIGxpYi90aW1ldmFyLmggKHRpbWV2YXJfcmVwb3J0KTogTmV3IGRlY2wuCisJKiBzcmMvc3lzdGVtLmggKHRpbWVfcmVwb3J0KTogUmVtb3ZlOyBkZWNsIGlzIG5vdyBpbiBsaWIvdGltZXZhci5oLgorCisKKwlTb3J0IGluY2x1ZGUtZmlsZSB1c2VzLgorCisJUmVvcmRlciBhbGwgaW5jbHVkZSBmaWxlcyB1bmRlciBzcmMgdG8gYmUgaW4gdGhlIG9yZGVyICJzeXN0ZW0uaCIuCisJdGhlbiB0aGUgLi4vbGliIGluY2x1ZGUgZmlsZXMgaW4gYW5nbGUgYnJhY2tldHMgKGFscGhhYmV0aXplZCksCisJdGhlbiB0aGUgLiBpbmNsdWRlIGZpbGVzIGluIGRvdWJsZS1xdW90ZXMgKGFscGhhYmV0aXplZCkuICBGaXgKKwlkZXBlbmRlbmN5IGJyZWFrYWdlcyBlbmNvdW50ZXJlZCBpbiB0aGlzIHByb2Nlc3MsIGFzIGZvbGxvd3M6CisJKiBzcmMvY2xvc3VyZS5oLCBzcmMvZGVyaXZlcy5oLCBzcmMvc3RhdGUuaDogSW5jbHVkZSAiZ3JhbS5oIi4KKwkqIHNyYy9jb21wbGFpbi5jOiBEb24ndCBpbmNsdWRlIHN0ZGxpYi5oLCBzdHJpbmcuaCBfTElCQyBzdHVmZi4KKwkqIHNyYy9zdGF0ZS5oOiBJbmNsdWRlICJzeW10YWIuaCIuCisKKzIwMDItMTItMDggIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBkYXRhL2dsci5jLCBkYXRhL2xhbHIxLmNjLCBkYXRhL3lhY2MuYzogRG8gbm90IHVzZSBfX2ZpbGVfXywKKwlzaW5jZSB0aGlzIGNhdXNlcyBwcm9ibGVtcyB3aGVuIF9fZmlsZV9fIGNvbnRhaW5zIGNoYXJhY3RlcgorCXNlcXVlbmNlcyBsaWtlICJAIiB0aGF0IGFyZSB0cmVhdGVkIHNwZWNpYWxseSBieSBzcmMvc2Nhbi1za2VsLmwuCisJSW5zdGVhZCwganVzdCB1c2UgdGhlIGZpbGUncyBiYXNlbmFtZS4gIFRoaXMgZml4ZXMgdGhlIGJ1ZworCXJlcG9ydGVkIGJ5IE1hcnRpbiBNb2tyZWpzIGluCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwMi0xMi9tc2cwMDAwNy5odG1sPi4KKworMjAwMi0xMi0wNiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwlBZGQgc3VwcG9ydCBmb3IgcnVsZXMgdGhhdCBkbyBub3QgaGF2ZSB0cmFpbGluZyBzZW1pY29sb25zLCBhcworCVBPU0lYIHJlcXVpcmVzLiAgSW1wcm92ZSB0aGUgcXVhbGl0eSBvZiBsb2NhdGlvbnMgaW4gQmlzb24KKwlkaWFnbm9zdGljcy4KKworCSogc3JjL2xvY2F0aW9uLmM6IEluY2x1ZGUgPHF1b3RlYXJnLmg+LgorCShlbXB0eV9sb2NhdGlvbik6IE5vdyBjb25zdC4KKwkobG9jYXRpb25fcHJpbnQpOiBOZXcgZnVuY3Rpb24uICBGb2xsb3cgdGhlIHJlY29tbWVuZGF0aW9uIG9mIHRoZQorCUdOVSBDb2RpbmcgU3RhbmRhcmRzIGZvciBsb2NhdGlvbnMgdGhhdCBzcGFuIGZpbGUgYm91bmRhcmllcy4KKwkqIHNyYy9sb2NhdGlvbi5oOiBEbyBub3QgaW5jbHVkZSA8cXVvdGVhcmcuaD47IG5vIGxvbmdlciBuZWVkZWQuCisJKGJvdW5kYXJ5KTogTmV3IHR5cGUuCisJKGxvY2F0aW9uX3QpOiBVc2UgaXQuICBUaGlzIGFsbG93cyBsb2NhdGlvbnMgdG8gc3BhbiBmaWxlIGJvdW5kYXJpZXMuCisJQWxsIG1lbWJlciB1c2VzIGNoYW5nZWQ6IGZpbGUgLT4gc3RhcnQuZmlsZSBvciBlbmQuZmlsZSAoYXMgbmVlZGVkKSwKKwlmaXJzdF9saW5lIC0+IHN0YXJ0LmxpbmUsIGZpcnN0X2NvbHVtbiAtPiBzdGFydC5jb2x1bW4sCisJbGFzdF9saW5lIC0+IGVuZC5saW5lLCBsYXN0X2NvbHVtbiAtPiBlbmQuY29sdW1uLgorCShlcXVhbF9ib3VuZGFyaWVzKTogTmV3IGZ1bmN0aW9uLgorCShMT0NBVElPTl9SRVNFVCwgTE9DQVRJT05fU1RFUCk6IFJlbW92ZS4KKwkoTE9DQVRJT05fUFJJTlQpOiBSZW1vdmUuICBBbGwgY2FsbGVycyBjaGFuZ2VkIHRvIHVzZSBsb2NhdGlvbl9wcmludC4KKwkoZW1wdHlfbG9jYXRpb24pOiBOb3cgY29uc3QuCisJKGxvY2F0aW9uX3ByaW50KTogTmV3IGRlY2wuCisJKiBzcmMvcGFyc2UtZ3JhbS55IChsbG9jX2RlZmF1bHQpOiBOZXcgZnVuY3Rpb24sIHdoaWNoIGhhbmRsZXMKKwllbXB0eSBsb2NhdGlvbnMgbW9yZSBhY2N1cmF0ZWx5LgorCShZWUxMT0NfREVGQVVMVCk6IFVzZSBpdC4KKwkoJXRva2VuIENPTE9OKTogUmVtb3ZlLgorCSgldG9rZW4gSURfQ09MT04pOiBOZXcgdG9rZW4uCisJKHJ1bGVzKTogVXNlIGl0LgorCShkZWNsYXJhdGlvbnMsIHJ1bGVzKTogUmVtb3ZlIHRyYWlsaW5nIHNlbWljb2xvbi4KKwkoZGVjbGFyYXRpb24sIHJ1bGVzX29yX2dyYW1tYXJfZGVjbGFyYXRpb24pOgorCUFsbG93IGVtcHR5ICgiOyIpIGRlY2xhcmF0aW9uLgorCShzeW1ib2xfZGVmKTogUmVtb3ZlIGVtcHR5IGFjdGlvbnM7IG5vIGxvbmdlciBuZWVkZWQuCisJKHJ1bGVzX29yX2dyYW1tYXJfZGVjbGFyYXRpb24pOiBSZW1vdmUgdHJhaWxpbmcgc2VtaWNvbG9uLgorCShzZW1pX2NvbG9uLm9wdCk6IFJlbW92ZS4KKwkqIHNyYy9yZWFkZXIuaDogSW5jbHVkZSBsb2NhdGlvbi5oLgorCShzY2FubmVyX2N1cnNvcik6IE5ldyBkZWNsLgorCSogc3JjL3JlZHVjZS5jIChub250ZXJtaW5hbHNfcmVkdWNlKTogVXNlIHdhcm5fYXQgcmF0aGVyIHRoYW4KKwlyb2xsaW5nIG91ciBvd24uCisJKiBzcmMvc2Nhbi1ncmFtLmwgKFlZX1VTRVJfSU5JVCk6IEluaXRpYWxpemUgc2Nhbm5lcl9jdXJzb3IgaW5zdGVhZAorCW9mICpsb2MuCisJKFNURVApOiBSZW1vdmUuICBObyBsb25nZXIgbmVlZGVkLCBub3cgdGhhdCBhZGp1c3RfbG9jYXRpb24gZG9lcworCXRoZSB3b3JrLiAgQWxsIHVzZXMgcmVtb3ZlZC4KKwkoc2Nhbm5lcl9jdXJzb3IpOiBOZXcgdmFyLgorCShhZGp1c3RfbG9jYXRpb24pOiBSZW5hbWVkIGZyb20gZXh0ZW5kX2xvY2F0aW9uLiAgSXQgbm93IHNldHMKKwkqbG9jIGFuZCBhZGp1c3RzIHRoZSBzY2FubmVyIGN1cnNvci4gIEFsbCB1c2VzIGNoYW5nZWQuCisJRG9uJ3QgYm90aGVyIHRlc3RpbmcgZm9yIENSLgorCShoYW5kbGVfc3luY2xpbmUpOiBSZW1vdmUgbG9jYXRpb24gYXJnOyBub3cgdXBkYXRlcyBzY2FubmVyIGN1cnNvci4KKwlBbGwgY2FsbGVycyBjaGFuZ2VkLgorCSh1bmV4cGVjdGVkX2VuZF9vZl9maWxlKTogTm93IGFjY2VwdHMgc3RhcnQgYm91bmRhcnkgb2YgdG9rZW4gb3IKKwljb21tZW50LCBub3QgbG9jYXRpb24uICBBbGwgY2FsbGVycyBjaGFuZ2VkLiAgVXBkYXRlIHNjYW5uZXIgY3Vyc29yLAorCW5vdCB0aGUgbG9jYXRpb24uCisJKFNDX0FGVEVSX0lERU5USUZJRVIpOiBOZXcgc3RhdGUuCisJKGNvbnRleHRfc3RhdGUpOiBSZW5hbWVkIGZyb20gY19jb250ZXh0LiAgQWxsIHVzZXMgY2hhbmdlZC4KKwkoaWRfbG9jLCBjb2RlX3N0YXJ0LCB0b2tlbl9zdGFydCk6IE5ldyBsb2NhbCB2YXJzLgorCSg8SU5JVElBTCxTQ19BRlRFUl9JREVOVElGSUVSPik6IE5ldyBpbml0aWFsIGNvbnRleHQuICBNb3ZlIGFsbAorCXByb2Nlc3Npbmcgb2YgWWFjYyB3aGl0ZSBzcGFjZSBhbmQgZXF1aXZhbGVudHMgaGVyZS4KKwkoPElOSVRJQUw+e2lkfSk6IFNhdmUgaWRfbG9jLiAgQmVnaW4gc3RhdGUgU0NfQUZURVJfSURFTlRJRklFUgorCWluc3RlYWQgb2YgcmV0dXJuaW5nIElEIGltbWVkaWF0ZWx5LCBzaW5jZSB3ZSBuZWVkIHRvIHNlYXJjaCBmb3IKKwlhIHN1YnNlcXVlbnQgY29sb24uCisJKDxJTklUSUFMPiInIiwgIlwiIik6IFNhdmUgdG9rZW5fc3RhcnQuCisJKDxJTklUSUFMPiIleyIsICJ7IiwgIiUlIik6IFNhdmUgY29kZV9zdGFydC4KKwkoPFNDX0FGVEVSX0lERU5USUZJRVI+KTogTmV3IHN0YXRlLCBsb29raW5nIGZvciBhIGNvbG9uLgorCSg8U0NfWUFDQ19DT01NRU5UPiwgPFNDX0NPTU1FTlQ+LCA8U0NfTElORV9DT01NRU5UPik6CisJQkVHSU4gY29udGV4dF9zdGF0ZSBhdCBlbmQsIG5vdCBJTklUSUFMLgorCSg8U0NfRVNDQVBFRF9TVFJJTkc+IlwiIiwgPFNDX0VTQ0FQRURfQ0hBUkFDVEVSPiInIiwKKwk8U0NfQlJBQ0VEX0NPREU+In0iLCA8U0NfUFJPTE9HVUU+IiV9IiwgPFNDX0VQSUxPR1VFPjw8RU9GPj4pOgorCVJldHVybiBjb3JyZWN0IHRva2VuIHN0YXJ0LgorCSg8U0NfQlJBQ0VEX0NPREUsU0NfUFJPTE9HVUUsU0NfRVBJTE9HVUU+KTogU2F2ZSBzdGFydCBib3VuZGFyeSB3aGVuCisJdGhlIHN0YXJ0IG9mIGEgY2hhcmFjdGVyLCBzdHJpbmcgb3IgbXVsdGlsaW5lIGNvbW1lbnQgaXMgZm91bmQuCisJKiB0ZXN0cy9jb25mbGljdHMuYXQgKFMvUiBpbiBpbml0aWFsLCBEZWZhdWx0ZWQgQ29uZmxpY3RlZAorCVJlZHVjdGlvbik6IEFkanVzdCByZXBvcnRlZCBsb2NhdGlvbnMgdG8gbWF0Y2ggdGhlIG1vcmUtcHJlY2lzZQorCXJlc3VsdHMgbm93IGV4cGVjdGVkLgorCSogdGVzdHMvaW5wdXQuYXQgKEludmFsaWQgJG4sIEludmFsaWQgQG4sIFR5cGUgQ2xhc2hlcyk6IExpa2V3aXNlLgorCSogdGVzdHMvcmVkdWNlLmF0IChVc2VsZXNzIFJ1bGVzLCBSZWR1Y2VkIEF1dG9tYXRvbiwKKwlVbmRlcml2YWJsZSBSdWxlcyk6IExpa2V3aXNlLgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoSW52YWxpZCBpbnB1dHMpOiBObyBsb25nZXIgYGV4cGVjdGluZyAiOyIKKwlvciAifCInIG5vdyB0aGF0IHNvIG1hbnkgb3RoZXIgdG9rZW5zIGFyZSBhbGxvd2VkIGJ5IHRoZSBuZXcgZ3JhbW1hci4KKworCSogc3JjL2NvbXBsYWluLmggKGN1cnJlbnRfZmlsZSk6IFJlbW92ZSBkdXBsaWNhdGUgZGVjbDsKKwljdXJyZW50X2ZpbGUgaXMgbm93IG93bmVkIGJ5IGZpbGVzLmguCisJKiBzcmMvY29tcGxhaW4uYywgc3JjL3NjYW4tZ3JhbS5sOiBJbmNsdWRlIGZpbGVzLmguCisKKzIwMDItMTItMDYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBkYXRhL2dsci5jICh5eV9yZWR1Y2VfcHJpbnQpOiBEb24ndCBhc3N1bWUgdGhhdCB5eXJsaW5lW3l5cnVsZV0KKwlwcm9tb3RlcyB0byBpbnQ7IGl0IG1pZ2h0IGJlIHVuc2lnbmVkIGludC4KKwkqIGRhdGEveWFjYy5jICh5eV9yZWR1Y2VfcHJpbnQpOiBMaWtld2lzZS4KKworCSogZG9jL2Jpc29uLnRleGluZm8gKFRhYmxlIG9mIFN5bWJvbHMpOiBZWUVSUk9SX1ZFUkJPU0Ugc2hvdWxkCisJYmUgI2RlZmluZWQgaW4gdGhlIHByb2xvZ3VlLCBub3QgaW4gdGhlIEJpc29uIGRlY2xhcmF0aW9ucy4KKwlUaGlzIGZpeGVzIERlYmlhbiBCdWcgMTAyODc4LCByZXBvcnRlZCBieSBTaGF1bCBLYXJsLgorCisyMDAyLTEyLTAyICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogY29uZmlndXJlLmFjIChBQ19SRVBMQUNFX0ZVTkNTKTogQWRkIHN0cnRvdWwuCisJKiBsaWIvc3RydG91bC5jOiBOZXcgZmlsZSwgZnJvbSBnbnVsaWIuCisJVGhpcyBmaXhlcyBhIHBvcnRpbmcgYnVnIHJlcG9ydGVkIGJ5IFBldGVyIEtsZWluIGluCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwMi0xMi9tc2cwMDAwMC5odG1sPi4KKworMjAwMi0xMS0zMCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIHNyYy9zY2FuLWdyYW0ubCAobm9fY3JfcmVhZCwgZXh0ZW5kX2xvY2F0aW9uKTogTW92ZSB0byBlcGlsb2d1ZSwKKwlhbmQgcHV0IG9ubHkgYSBmb3J3YXJkIGRlY2xhcmF0aW9uIGluIHRoZSBwcm9sb2d1ZS4gIFRoaXMgaXMgZm9yCisJY29uc2lzdGVuY3kgd2l0aCB0aGUgb3RoZXIgc2Nhbm5lciBoZWxwZXIgZnVuY3Rpb25zLgorCisJVHlwZSBjbGFzaGVzIG5vdyBnZW5lcmF0ZSB3YXJuaW5ncywgbm90IGVycm9ycywgc2luY2UgaXQKKwlhcHBlYXJzIHRoYXQgUE9TSVggbWF5IGFsbG93IHNvbWUgZ3JhbW1hcnMgd2l0aCB0eXBlIGNsYXNoZXMuCisJKiBzcmMvcmVhZGVyLmMgKGdyYW1tYXJfY3VycmVudF9ydWxlX2NoZWNrKTogV2FybiBhYm91dAorCXR5cGUgY2xhc2hlcyBpbnN0ZWFkIG9mIGNvbXBsYWluaW5nLgorCSogdGVzdHMvaW5wdXQuYXQgKFR5cGUgQ2xhc2hlcyk6IEV4cGVjdCB3YXJuaW5ncywgbm90IGNvbXBsYWludHMuCisKKwlBZGQgWWFjYyBsaWJyYXJ5LCBzaW5jZSBQT1NJWCByZXF1aXJlcyBpdC4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChZYWNjIExpYnJhcnkpOiBOZXcgbm9kZS4gIFJlZ2VuZXJhdGUgdG9wIG1lbnUuCisJKiBsaWIvTWFrZWZpbGUuYW0gKGxpYl9MSUJSQVJJRVMsIGxpYnlfYV9TT1VSQ0VTKTogTmV3IG1hY3Jvcy4KKwkqIGxpYi9tYWluLmMsIGxpYi95eWVycm9yLmM6IE5ldyBmaWxlcy4KKworCWdyYW1fZXJyb3IgY2FuIGJlIHN0YXRpYzsgaXQgbmVlZCBub3QgYmUgZXh0ZXJuLgorCSogc3JjL3JlYWRlci5oIChncmFtX2Vycm9yKTogUmVtb3ZlIGRlY2wuCisJKiBzcmMvcGFyc2UtZ3JhbS55IChncmFtX2Vycm9yKTogTm93IHN0YXRpYy4gIEFkZCBzdGF0aWMgZGVjbC4KKwkocHJpbnRfdG9rZW5fdmFsdWUpOiBPbWl0IHBhcmFtZXRlciBuYW1lcyBmcm9tIGZvcndhcmQgZGVjbCwKKwlmb3IgY29uc2lzdGVuY3kuCisKKzIwMDItMTEtMjkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBkb2MvYmlzb24udGV4aW5mbzogRW1waGFzaXplIHRoYXQgeXlsZXggYW5kIHl5ZXJyb3IgbXVzdAorCWJlIGRlY2xhcmVkIGJlZm9yZSBiZWluZyB1c2VkLiAgRS5nLiwgb25lIHNob3VsZCB0eXBpY2FsbHkKKwlkZWNsYXJlIHRoZW0gaW4gdGhlIHByb2xvZ3VlLiAgVXNlIEdOVSBjb2Rpbmcgc3R5bGUgaW4gZXhhbXBsZXMuCisJUHV0ICJjb25zdCIgY29uc2lzdGVudGx5IGFmdGVyIHRoZSB0eXBlIGl0IG1vZGlmaWVzLiAgTWVudGlvbgorCXRoYXQgQzk5IHN1cHBvcnRzICJpbmxpbmUiLiAgTWVudGlvbiB0aGF0IHl5ZXJyb3IgdHJhZGl0aW9uYWxseQorCXJldHVybnMgImludCIuCisKKwklcGFyc2UtcGFyYW0gYW5kICVsZXgtcGFyYW0gbm93IHRha2UganVzdCBvbmUgYXJndW1lbnQsIHRoZQorCWRlY2xhcmF0aW9uOyB0aGUgYXJndW1lbnQgbmFtZSBpcyBkZWR1Y2VkIGZyb20gdGhlIGRlY2xhcmF0aW9uLgorCisJKiBkb2MvYmlzb24udGV4aW5mbyAoUGFyc2VyIEZ1bmN0aW9uLCBQdXJlIENhbGxpbmcsIEVycm9yCisJUmVwb3J0aW5nLCBUYWJsZSBvZiBTeW1ib2xzKTogRG9jdW1lbnQgdGhpcy4KKwkqIHNyYy9wYXJzZS1ncmFtLnkgKGFkZF9wYXJhbSk6IE5ldyBmdW5jdGlvbi4KKwkoQ09NTUEpOiBSZW1vdmUuCisJKGRlY2xhcmF0aW9uKTogSW1wbGVtZW50IG5ldyBydWxlIGZvciAlcGFyc2UtcGFyYW0gYW5kICVsZXgtcGFyYW0uCisJKiBzcmMvc2Nhbi1ncmFtLmw6ICIsIiBub3cgZWxpY2l0cyBhIHdhcm5pbmcsIHJhdGhlciB0aGFuIGJlaW5nCisJYSB0b2tlbjsgdGhpcyBpcyBtb3JlIGNvbXBhdGlibGUgd2l0aCBieWFjYy4KKwkqIHRlc3RzL2NhbGMuYXQgKFNpbXBsZSBMQUxSIENhbGN1bGF0b3IpOiBBZG9wdCBuZXcgY29udmVudGlvbi4KKworMjAwMi0xMS0yNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwlSZW5hbWUgaWRlbnRpZmllcnMgdG8gYXZvaWQgcmVhbCBhbmQgcG90ZW50aWFsIGNvbGxpc2lvbnMuCisKKwkqIGRhdGEvYy5tNCAoYjRfeXlzeW1wcmludF9nZW5lcmF0ZSk6IHl5b3V0IC0+IHl5b3V0cHV0LAorCXRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIGxleCBtYWNybyBkZXNjcmliZWQgYnkgQnJ1Y2UgTGlsbHkgaW4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAyLTExL21zZzAwMTE0Lmh0bWw+LgorCSogdGVzdHMvYWN0aW9ucy5hdCAoX0FUX0NIRUNLX1BSSU5URVJfQU5EX0RFU1RSVUNUT1IpOiBMaWtld2lzZS4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChQcm9sb2d1ZSwgVHJhY2luZyk6IHl5cHJpbnQgLT4gcHJpbnRfdG9rZW5fdmFsdWUuCisJKiBzcmMvcGFyc2UtZ3JhbS55IChwcmludF90b2tlbl92YWx1ZSk6IFJlbmFtZWQgZnJvbSB5eXByaW50LgorCUFsbCB1c2VzIGNoYW5nZWQuCisJKFlZUEFSU0VfUEFSQU0sIFlZTEVYX1BBUkFNLCB5eWNvbnRyb2wpOiBSZW1vdmUuICBBbGwgdXNlcyBjaGFuZ2VkLgorCVRoZSBuYW1lICJ5eWNvbnRyb2wiIHZpb2xhdGVzIHRoZSBuYW1lIHNwYWNlIHJ1bGVzLCBhbmQgdGhpcyBzdHVmZgorCXdhc24ndCBiZWluZyB1c2VkIGFueXdheS4KKwkoaW5wdXQpOiBSZW1vdmUgYWN0aW9uOyB0aGlzIHN0dWZmIHdhc24ndCBiZWluZyB1c2VkLgorCShncmFtX2Vycm9yKTogUmVuYW1lIGxvY2FsIHZhcmlhYmxlIHl5bGxvYyAtPiBsb2MuCisJKiBzcmMvcmVhZGVyLmggKHN0cnVjdCBncmFtX2NvbnRyb2xfcywgZ3JhbV9jb250cm9sX3QpOiBSZW1vdmUuCisJKFlZX0RFQ0wpOiBEb24ndCB1c2UgInl5IiBhdCBzdGFydCBvZiBsb2NhbCB2YXJpYWJsZXMuCisJQWxsIHVzZXMgY2hhbmdlZCwgZS5nLiwgeXlsbG9jIC0+IGxvYy4KKwkqIHNyYy9zY2FuLWdyYW0ubCAoU1RFUCk6IFJlbmFtZWQgZnJvbSBZWV9TVEVQLiAgQWxsIHVzZXMgY2hhbmdlZC4KKwkoU1RSSU5HX0dST1cpOiBSZW5hbWVkIGZyb20gWVlfT0JTX0dST1cuICBBbGwgdXNlcyBjaGFuZ2VkLgorCShTVFJJTkdfRklOSVNIKTogUmVuYW1lZCBmcm9tIFlZX09CU19GSU5JU0guICBBbGwgdXNlcyBjaGFuZ2VkLgorCShTVFJJTkdfRlJFRSk6IFJlbmFtZWQgZnJvbSBZWV9PQlNfRlJFRS4gIEFsbCB1c2VzIGNoYW5nZWQuCisKKwkqIHNyYy9wYXJzZS1ncmFtLnkgKGdyYW1fZXJyb3IpOiBsb2MgaXMgbm93IGNvbnN0ICouCisJKiBzcmMvcmVhZGVyLmggKGdyYW1fZXJyb3IpOiBMaWtld2lzZS4KKworMjAwMi0xMS0yNCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwlWZXJzaW9uIDEuNzVjLgorCisJKiB0ZXN0cy9hY3Rpb25zLmF0IChBY3Rpb25zIGFmdGVyIGVycm9ycyk6IFVzZSBhbiBvdXRwdXQgZm9ybWF0CisJbW9yZSBzaW1pbGFyIHRvIHRoYXQgb2YgdGhlIFByaW50ZXJzIGFuZCBEZXN0cnVjdG9ycyB0ZXN0LgorCVRlc3QgdGhlIHBvc2l0aW9uIG9mIHRoZSAnOycgdG9rZW4gdG9vLgorCShQcmludGVycyBhbmQgRGVzdHJ1Y3RvcnMpOiBMaWtld2lzZS4KKwkoUHJpbnRlcnMgYW5kIERlc3RydWN0b3JzOiAlZ2xyLXBhcnNlcik6IFJlbW92ZSBmb3Igbm93LCB0byBhdm9pZAorCXVubmVjZXNzYXJpbHkgYWxhcm1pbmcgcGVvcGxlIHdoZW4gdGhlIHRlc3QgZmFpbHMuCisKKwkqIGRhdGEveWFjYy5jICh5eWVycmxhYjEpOiBNb3ZlIHRoaXMgbGFiZWwgZG93biwgc28gdGhhdCB0aGUKKwlwYXJzZXIgZG9lcyBub3QgZGlzY2FyZCB0aGUgbG9va2FoZWFkIHRva2VuIGlmIHRoZSB1c2VyIGNvZGUKKwlpbnZva2VzIFlZRVJST1IuICBUaGlzIGNoYW5nZSBpcyByZXF1aXJlZCBmb3IgUE9TSVggY29uZm9ybWFuY2UuCisKKwkqIGxpYi9lcnJvci5jOiBTeW5jIHdpdGggZ251bGliLgorCisyMDAyLTExLTIyICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogbGliL3F1b3RlYXJnLmMsIGxpYi9xdW90ZWFyZy5oOiBTeW5jIHdpdGggZ251bGliLgorCSogbGliL21ic3dpZHRoLmMsIGxpYi9tYnN3aWR0aC5oOiBMaWtld2lzZS4KKwkqIGxpYi94bWFsbG9jLmM6IExpa2V3aXNlLgorCisyMDAyLTExLTIwICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogbGliL2FyZ21hdGNoLmMsIGxpYi9hcmdtYXRjaC5oOiBTeW5jIHdpdGggZ251bGliLgorCisyMDAyLTExLTIwICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCUF2b2lkIHVzZSBvZiA8YXNzZXJ0Lmg+LCBhcyB0aGUgR05VIENvZGluZyBTdGFuZGFyZHMgaGludCB0aGF0IG9uZQorCXNob3VsZCB1c2UgYGlmICghIHgpIGFib3J0ICgpOycgcmF0aGVyIHRoYW4gYGFzc2VydCAoeCk7JywgYW5kCisJYW55d2F5IGl0J3Mgb25lIGxlc3MgdGhpbmcgdG8gd29ycnkgYWJvdXQgY29uZmlndXJpbmcuCisKKwkqIGRhdGEvZ2xyLmMsIGxpYi9oYXNoLmMsIHNyYy9zeXN0ZW0uaDogRG8gbm90IGluY2x1ZGUgPGFzc2VydC5oPi4KKwkqIHRlc3RzL2FjdGlvbnMuYXQgKF9BVF9DSEVDS19QUklOVEVSX0FORF9ERVNUUlVDVE9SKTogTGlrZXdpc2UsCisJYW5kIHJlcGxhY2UgYWxsIGluc3RhbmNlcyBvZiBhc3NlcnQgd2l0aCBhYm9ydC4KKwkqIHRlc3RzL2NhbGMuYXQgKF9BVF9EQVRBX0NBTENfWSk6IExpa2V3aXNlLgorCSogdGVzdHMvY3h4LXR5cGUuYXQgKF9BVF9URVNUX0dMUl9DWFhUWVBFUyk6IExpa2V3aXNlLgorCisJKiBkYXRhL2dsci5jICh5eWRvQWN0aW9uLCB5eWdsclJlZHVjZSwgeXlzcGxpdFN0YWNrLCB5eXJlc29sdmVTdGF0ZXMsCisJeXlyZXNvbHZlQWN0aW9uLCB5eXByb2Nlc3NPbmVTdGFjayk6IFVzZSBhYm9ydCByYXRoZXIgdGhhbiBhc3NlcnQuCisJKiBsaWIvaGFzaC5jIChoYXNoX2xvb2t1cCwgaGFzaF9nZXRfZmlyc3QsIGhhc2hfZ2V0X25leHQsCisJaGFzaF9maW5kX2VudHJ5LCBoYXNoX3JlaGFzaCwgaGFzaF9pbnNlcnQpOiBMaWtld2lzZS4KKwkqIHNyYy9jb25mbGljdHMuYyAocmVzb2x2ZV9zcl9jb25mbGljdCk6IExpa2V3aXNlLgorCSogc3JjL2xhbHIuYyAoc2V0X2dvdG9fbWFwLCBtYXBfZ290byk6IExpa2V3aXNlLgorCSogc3JjL251bGxhYmxlLmMgKG51bGxhYmxlX2NvbXB1dGUpOiBMaWtld2lzZS4KKwkqIHNyYy9vdXRwdXQuYyAocHJlcGFyZV9ydWxlcywgdG9rZW5fZGVmaW5pdGlvbnNfb3V0cHV0KTogTGlrZXdpc2UuCisJKiBzcmMvcmVhZGVyLmMgKHBhY2tncmFtLCByZWFkZXIpOiBMaWtld2lzZS4KKwkqIHNyYy9zdGF0ZS5jIChzdGF0ZV9uZXcsIHN0YXRlX2ZyZWUsIHN0YXRlX3RyYW5zaXRpb25zX3NldCwKKwlzdGF0ZV9yZWR1Y3Rpb25fZmluZCk6IExpa2V3aXNlLgorCSogc3JjL3N5bXRhYi5jIChzeW1ib2xfdXNlcl90b2tlbl9udW1iZXJfc2V0LCBzeW1ib2xfbWFrZV9hbGlhcywKKwlzeW1ib2xfcGFjayk6IExpa2V3aXNlLgorCSogc3JjL3RhYmxlcy5jIChjb25mbGljdF9yb3csIHBhY2tfdmVjdG9yKTogTGlrZXdpc2UuCisJKiBzcmMvdmNnLmMgKGdldF9jb2xvcl9zdHIsIGdldF90ZXh0bW9kZV9zdHIsIGdldF9zaGFwZV9zdHIsCisJZ2V0X2xheW91dGFsZ29yaXRobV9zdHIsIGdldF9kZWNpc2lvbl9zdHIsIGdldF9vcmllbnRhdGlvbl9zdHIsCisJZ2V0X25vZGVfYWxpZ25lbWVudF9zdHIsIGdldF9hcnJvd19tb2RlX3N0ciwgZ2V0X2Nyb3NzaW5nX3R5cGVfc3RyLAorCWdldF92aWV3X3N0ciwgZ2V0X2xpbmVzdHlsZV9zdHIsIGdldF9hcnJvd3N0eWxlX3N0cik6IExpa2V3aXNlLgorCisJKiBsaWIvYXJnbWF0Y2guaCAoQVJSQVlfQ0FSRElOQUxJVFkpOiBEbyBub3QgYm90aGVyIHRvICN1bmRlZi4KKwkoQVJHTUFUQ0hfQ09OU1RSQUlOVCk6IE5ldyBtYWNyby4KKwkoQVJHTUFUQ0hfQVNTRVJUKTogVXNlIGl0LgorCisJKiBzcmMvc3lzdGVtLmggKHZlcmlmeSk6IE5ldyBtYWNyby4KKwkqIHNyYy9nZXRhcmdzLmMgKHRyYWNlX2FyZ21hdGNoLCByZXBvcnRfYXJnbWF0Y2gpOiBVc2UgdmVyaWZ5CisJcmF0aGVyIHRoYW4gYXNzZXJ0LgorCSogc3JjL3RhYmxlcy5jICh0YWJsZXNfZ2VuZXJhdGUpOiBMaWtld2lzZS4KKworCSogc3JjL3N0cnVuaXEuYyAoc3RydW5pcV9hc3NlcnQpOiBOb3cgcmV0dXJucyB2b2lkLCBhbmQgYWJvcnRzCisJaWYgdGhlIGFzc2VydGlvbiBpcyBmYWxzZS4KKwkoc3RydW5pcV9hc3NlcnRfcCk6IFJlbW92ZS4KKwkqIHNyYy9zdHJ1bmlxLmg6IExpa2V3aXNlLgorCisyMDAyLTExLTE4ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogZGF0YS9nbHIuYyAoeXlnZXRMUkFjdGlvbnMpOiBSZXBsYWNlIGB5eWluZGV4JyB3aXRoCisJYHl5dGFibGVbeXlpbmRleF0nIHRvIGZpeCB0eXBvIGludHJvZHVjZWQgaW4gbXkgMjAwMi0xMS0wOSBwYXRjaC4KKwlUaGlzIGZpeGVzIHRoZSByZWdyZXNzaW9uIHdpdGggU3VuIE9ORSBTdHVkaW8gNyBjYyB0aGF0IEkgcmVwb3J0ZWQgaW4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAyLTExL21zZzAwMDc3Lmh0bWw+LgorCisyMDAyLTExLTE4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZG9jL2Jpc29uLnRleGluZm8gKFRyYWNpbmcpOiBgeXlwcmludCcgc2hvdWxkbid0IHByZXBlbmQgYQorCXNwYWNlLgorCUZyb20gVGltIFZhbiBIb2xkZXIuCisKKzIwMDItMTEtMTcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJUGFjaWZ5IFN1biBPTkUgU3R1ZGlvIDcgbGludC4gIEFsc28sIHJlbmFtZSAiUGFyc2VFcnJvciIKKwl0byAiU3ludGF4RXJyb3IiIGZvciBjb25zaXN0ZW5jeSB3aXRoIG15IDIwMDItMTEtMTUgY2hhbmdlLgorCisJKiBkYXRhL2dsci5jIChZWURQUklOVEYsIFlZRFNZTVBSSU5ULCBZWURTWU1QUklOVEYpIFshWVlERUJVR106IERvCisJbm90IGRlZmluZSB0byB7fSwgc2luY2UgdGhpcyBicmVha3MgdGhlIGNvbW1vbiB1c2Ugb2YgYFlZRFBSSU5URgorCSgoLi4uKSk7JyBpZiBhIHNpbmdsZSBzdGF0ZW1lbnQgaXMgZGVzaXJlZCAoZS5nLiBiZWZvcmUgYGVsc2UnKS4KKwlXb3JrIGFyb3VuZCBHQ0Mgd2FybmluZ3MgYnkgc3Vycm91bmRpbmcgY29ycmVzcG9uZGluZyBjYWxscyB3aXRoCisJe30gaWYgbmVlZGVkLgorCSh5eWhhc1Jlc29sdmVkVmFsdWUpOiBSZW1vdmUgdW51c2VkIGZ1bmN0aW9uLgorCSh5eW1lcmdlT3B0aW9uU2V0cywgeXlyZXNvbHZTdGFjayk6IFVzZSBgY29udGludWU7JyBmb3IgZW1wdHkKKwlsb29wIGJvZHkuCisJKHl5cmVwb3J0U3ludGF4RXJyb3IpOiBSZW5hbWVkIGZyb20geXlyZXBvcnRQYXJzZUVycm9yLgorCSh5eXJlY292ZXJTeW50YXhFcnJvcik6IFJlbmFtZWQgZnJvbSB5eXJlY292ZXJQYXJzZUVycm9yLgorCUFsbCB1c2VzIGNoYW5nZWQuCisJKiB0ZXN0cy9jYWxjLmF0IChfQVRfREFUQV9DQUxDX1kpOiBNYWtlIHZhcnMgc3RhdGljIGluc3RlYWQgb2YKKwlleHRlcm4gd2hlbiBwb3NzaWJsZS4gIFJlbW92ZSB1bnVzZWQgaW5pdGlhbGl6YXRpb25zLgorCisyMDAyLTExLTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCUF1Z21lbnQgdGhlIHNpbWlsYXJpdHkgYmV0d2VlbiBHTFIgYW5kIExBTFIgdHJhY2VzLgorCisJKiBkYXRhL3lhY2MuYyAoeXlfc3RhY2tfcHJpbnQsIFlZX1NUQUNLX1BSSU5ULCB5eV9yZWR1Y2VfcHJpbnQpCisJKFlZX1JFRFVDRV9QUklOVCk6IE5ldy4KKwkoeXlwYXJzZSk6IFVzZSB0aGVtLgorCSogZGF0YS9nbHIuYyAoeXlfcmVkdWNlX3ByaW50KTogVXNlIFlZRlBSSU5URiwgbm8gbmVlZCBmb3IKKwlZWURQUklOVCBoZXJlLgorCSh5eWdsclJlZHVjZSwgeXlyZWNvdmVyUGFyc2VFcnJvciwgeXlwYXJzZSk6IERvbid0IHJlcG9ydCB0aGUKKwlzdGF0ZSByZWFjaGVkIGFmdGVyIHRoZSByZWR1Y3Rpb24vcmVjb3ZlcnksIHNpbmNlLi4uCisJKHl5cGFyc2UsIHl5cHJvY2Vzc09uZVN0YWNrKTogUmVwb3J0IHRoZSBzdGF0ZSB3ZSBhcmUgZW50ZXJpbmcgaW4uCisKKzIwMDItMTEtMTYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvZ2V0YXJncy5oLCBzcmMvZ2V0YXJncy5jICh0cmFjZV9lLCB0cmFjZV9hcmdzLCB0cmFjZV90eXBlcyk6CisJQWRkIHN1cHBvcnQgZm9yIC0tdHJhY2U9c2tlbGV0b24uCisJKiBzcmMvc2Nhbi1za2VsLmw6ICVvcHRpb24gZGVidWcuCisJU2NhbiBzdHJpbmdzIG9mIG5vbi1AIG9yIFxuIGluc3RlYWQgb2YgY2hhcmFjdGVyIGJ5IGNoYXJhY3Rlci4KKwkoc2Nhbl9za2VsKTogSGFuZGxlIHRyYWNlX3NrZWxldG9uLgorCShRUFVUUyk6IE5ldy4KKwkoQG91dHB1dF9wYXJzZXJfbmFtZUAsIEBvdXRwdXRfaGVhZGVyX25hbWVAKTogYGBSZXN0b3JlJycgdGhlaXIKKwlzdXBwb3J0ICh1c2VkIHRvIGJlIE00IG1hY3JvcykuCisJKiBkYXRhL3lhY2MuYzogUXVvdGUgbGFyZ2VyIGNodW5rcywgYSBsYSBnbHIuYy4KKwkqIGRhdGEvbGFscjEuY2M6IExpa2V3aXNlLgorCVRoZSBoZWFkZXIgZ3VhcmRzIGFyZSBubyBsb25nZXIgYXZhaWxhYmxlLCBzbyB1c2Ugc29tZSBvdGhlcgorCXN0cmluZyB0aGFuIGBZWUxTUF9ORUVERUQnLgorCisyMDAyLTExLTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCU1ha2UgdGhlIGBgUHJpbnRlcnMgYW5kIERlc3RydWN0b3JzJycgdGVzdCBtb3JlIHZlcmJvc2UsIHRha2luZworCWB5YWNjLmMnJ3MgYmVoYXZpb3IgYXMgKHBvc3NpYmx5IHdyb25nKSByZWZlcmVuY2UuCisKKwkqIHRlc3RzL2FjdGlvbnMuYXQgKF9BVF9DSEVDS19QUklOVEVSX0FORF9ERVNUUlVDVE9SKTogVXNlIHByaW50ZgorCWluc3RlYWQgb2YgZnByaW50IG9uIHN0ZG91dC4KKwlTZXQgYW5kIHJlcG9ydCB0aGUgbGFzdF9saW5lIG9mIHRoZSBzeW1ib2xzLgorCUNvbnNpc3RlbnRseSBkaXNwbGF5IHZhbHVlcyBhbmQgbG9jYXRpb25zLgorCisyMDAyLTExLTE2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogZGF0YS95YWNjLmM6IEF2b2lkIG92ZXItcXVvdGluZyBvZiBfX2xpbmVfXyBhbmQgX19maWxlX18uCisKKzIwMDItMTEtMTUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiB0ZXN0cy9hY3Rpb25zLmF0IChBY3Rpb25zIGFmdGVyIGVycm9ycyk6IE5ldyB0ZXN0IGNhc2UuCisKKwkqIGRhdGEvZ2xyLmMsIGRhdGEvbGFscjEuY2MsIGRhdGEveWFjYy5jYywgZG9jL2Jpc29uLnRleGluZm8sCisJc3JjL2NvbmZsaWN0cy5jLCBzcmMvcGFyc2UtZ3JhbS55LCBzcmMvdGFibGVzLmMsIHNyYy90YWJsZXMuaCwKKwl0ZXN0cy9hY3Rpb24uYXQsIHRlc3RzL2NhbGMuYXQsIHRlc3RzL2NvbmZsaWN0cy5hdCwKKwl0ZXN0cy9jeHgtdHlwZS5hdCwgdGVzdHMvcmVncmVzc2lvbi5hdDoKKwkicGFyc2UgZXJyb3IiIC0+ICJzeW50YXggZXJyb3IiIGZvciBQT1NJWCBjb21wYXRpYmlsaXR5LgorCSJwYXJzaW5nIHN0YWNrIG92ZXJmbG93Li4uIiAtPiAicGFyc2VyIHN0YWNrIG92ZXJmbG93IiBzbworCXRoYXQgY29kZSBtYXRjaGVzIEJpc29uIGRvY3VtZW50YXRpb24uCisKKzIwMDItMTEtMTUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcGFyc2UtZ3JhbS55IChkZWNsYXJhdGlvbik6IEhhdmUgJXBhcnNlLXBhcmFtIGFuZCAlbGV4LXBhcmFtCisJdGFrZSB0d28gQlJBQ0VEX0NPREUsIG5vdCB0d28gc3RyaW5nX2NvbnRlbnQuCisJRnJlZSB0aGUgc2Nhbm5lcidzIG9ic3RhY2sgd2hlbiB3ZSBhcmUgZG9uZS4KKwkoY29kZV9jb250ZW50KTogTmV3LgorCSogdGVzdHMvY2FsYy5hdDogQWRqdXN0LgorCSogZG9jL2Jpc29uLnRleGluZm86IEFkanVzdC4KKwlBbHNvLCBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aGUgYCwnIGZvciB0aGVzZSBkZWNsYXJhdGlvbnMuCisKKzIwMDItMTEtMTUgIFRpbSBWYW4gSG9sZGVyICA8dGltLnZhbi5ob2xkZXJAcGFuZG9yYS5iZT4KKworCSogbTQvcHJlcmVxLm00OiBSZW1vdmVkIHRoZSBjb21tZW50ZWQgam1fUFJFUkVRX0hBU0gKKwlkZWZpbml0aW9uOyBhdm9pZHMgcG90ZW50aWFsIGF1dG9yZWNvbmYgcHJvYmxlbXMuCisKKzIwMDItMTEtMTUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJQWx3YXlzIGNoZWNrIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB5eXBhcnNlLgorCisJKiB0ZXN0cy9jYWxjLmF0IChfQVRfREFUQV9DQUxDX1kpOiBIYXZlIGBtYWluJyBleGl0IHdpdGggdGhlIHZhbHVlCisJcmV0dXJuZWQgYnkgeXlwYXJzZS4KKwkoX0FUX0NIRUNLX0NBTENfRVJST1IpOiBUYWtlIHRoZSBleHBlY3RlZCBleGl0IHZhbHVlIGFzIGFyZ3VtZW50LgorCUFkanVzdCBjYWxscy4KKwkqIHRlc3RzL2dsci1yZWdyMS5hdCAoZ2xyLXJlZ3IxLnkpOiBIYXZlIGBtYWluJyBleGl0IHdpdGggdGhlIHZhbHVlCisJcmV0dXJuZWQgYnkgeXlwYXJzZS4KKworMjAwMi0xMS0xNCAgUGF1bCBIaWxmaW5nZXIgIDxIaWxmaW5nZXJAQ1MuQmVya2VsZXkuRURVPgorCisJKiBkYXRhL2dsci5jICh5eUZhaWwpOiBBbHdheXMgc2V0IHl5ZXJyZmxhZy4gIENvcnJlY3RzIHJlZ3Jlc3Npb24KKwlvbiBpbnB1dC5hdCB0ZXN0LgorCisyMDAyLTExLTE0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogc3JjL291dHB1dC5jIChvdXRwdXRfc2tlbGV0b24pOiBDYWxsIHhmb3BlbiBpbnN0ZWFkIG9mCisJZHVwbGljYXRpbmcgeGZvcGVuJ3MgYm9keS4KKworCUZpeCBidWdzIHJlcG9ydGVkIGJ5IE5lbHNvbiBILiBGLiBCZWViZSBpbgorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDItMTEvbXNnMDAwNzguaHRtbD4uCisKKwkqIHRlc3RzL2hlYWRlcnMuYXQgKEFUX1RFU1RfQ1BQX0dVQVJEX0gpOiBEb24ndCBhc3N1bWUgdGhhdAorCSIkQ0MgLUUgZm9vLmgiIGlzIGFsbG93ZWQsIGFzIHRoaXMgZG9lc24ndCB3b3JrIHdpdGggdGhlIFBvcnRsYW5kCisJR3JvdXAgY29tcGlsZXIuICBJbnN0ZWFkLCB1c2UgIiRDQyAtRSBiYXIuYyIuICBJbmNsdWRlIHRoZSAuaAorCWZpbGUgdHdpY2UgaW4gdGhlIGdyYW1tYXIsIGFzIGFuIGV4dHJhIGNoZWNrLgorCisJKiB0ZXN0cy9pbnB1dC5hdCAoVG9ydHVyaW5nIHRoZSBTY2FubmVyKTogU3Vycm91bmQgdGhlCisJYmFja3NsYXNoLW5ld2xpbmUgdGVzdHMgd2l0aCAiI2lmIDAiLCB0byBtYWtlIGl0IGxlc3MgbGlrZWx5IHRoYXQKKwl3ZSdsbCBydW4gaW50byBjb21waWxlciBidWdzLiAgQnJpbmcgYmFjayBzb2xpdGFyeSBcIGluc2lkZQorCWNvbW1lbnQsIGJ1dCBhZGQgYSBjbG9zaW5nIGNvbW1lbnQgdG8gd29yayBhcm91bmQgSFAgQyBidWcuICBEb24ndAorCXRlc3QgYmFja3NsYXNoLW5ld2xpbmUgaW4gQyBjaGFyYWN0ZXIgY29uc3RhbnQuCisKKzIwMDItMTEtMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiB0ZXN0cy9zeW5jbGluZXMuYXQgKEFUX1NZTkNMSU5FU19DT01QSUxFKTogSWdub3JlIHRoZSBleGl0CisJc3RhdHVzIG9mIHRoZSBjb21waWxlci4KKwlDYWxsaW5nIGBleGl0IDEnIGlzIG5vIGxvbmdlciBuZWVkZWQuCisJUmVwb3J0ZWQgYnkgTmVsc29uIEguIEYuIEJlZWJlLgorCisyMDAyLTExLTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogdGVzdHMvYXRsb2NhbC5pbiAoQ1BQRkxBR1MpOiBXZSBoYXZlIGNvbmZpZy5oLgorCSogdGVzdHMvdGVzdHN1aXRlLmF0IChBVF9EQVRBX0dSQU1NQVJfUFJPTE9HVUUsIEFUX0RBVEFfR1JBTU1BUik6CisJTmV3LgorCSogdGVzdHMvYWN0aW9ucy5hdCwgdGVzdHMvY2FsYy5hdCwgdGVzdHMvY29uZmxpY3RzLmF0LAorCSogdGVzdHMvY3h4LXR5cGUuYXQsIHRlc3RzL2dsci1yZWdyMS5hdCwgdGVzdHMvaGVhZGVycy5hdCwKKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQsIHRlc3RzL3RvcnR1cmUuYXQ6IFVzZSB0aGVtIGZvciBhbGwgdGhlCisJZ3JhbW1hcnMgdGhhdCBhcmUgdG8gYmUgY29tcGlsZWQuCisJKiB0ZXN0cy9jeHgtdHlwZS5hdCAoX0FUX1RFU1RfR0xSX0NBTEMpOiBSZW5hbWUgYXMuLi4KKwkqIHRlc3RzL2N4eC10eXBlLmF0IChfQVRfVEVTVF9HTFJfQ1hYVFlQRVMpOiB0aGlzLgorCSogZG9jL2Jpc29uLnRleGluZm8gKEdMUiBQYXJzZXJzKTogRG9jdW1lbnQgYGlubGluZScuCisKKzIwMDItMTEtMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkb2MvYmlzb24udGV4aW5mbzogVmFyaW91cyBmb3JtYXR0aW5nIGNoYW5nZXMgKGFsaWdubWVudHMgaW4KKwlzYW1wbGVzLCBhZGRpdGlvbmFsIEBncm91cC9AZW5kIGdyb3VwLCBHQ1MgaW4gc2FtcGxlcy4KKwlVc2UgQGRlZmZuIGluc3RlYWQgb2Ygc2ltcGxlIEB0YWJsZSB0byBkZWZpbmUgdGhlIGRpcmVjdGl2ZXMsCisJbWFjcm9zLCB2YXJpYWJsZXMgZXRjLgorCisyMDAyLTExLTEzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCUZpeCBzb21lIGJ1Z3MgcmVwb3J0ZWQgYnkgQWxiZXJ0IENoaW4tQS1Zb3VuZyBpbgorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDItMTEvbXNnMDAwNjYuaHRtbD4uCisKKwkqIHRlc3RzL2lucHV0LmF0IChUb3J0dXJpbmcgdGhlIFNjYW5uZXIpOiBEb24ndCBpbnZva2UgImNjIGEuYyBiLmMKKwktbyBjIjsgdGhlIEhQIEMgY29tcGlsZXIgY2hhdHRlcnMgZHVyaW5nIGNvbXBpbGF0aW9uLgorCUluc3RlYWQsIGludm9rZSAiY2MgLWMgYS5jIC1vIGEubzsgY2MgLWMgYi5jIC1vIGIubzsgY2MgYS5vIGIubyAtbyBjIi4KKwkqIHRlc3RzL2hlYWRlcnMuYXQgKGV4cG9ydCBZWUxUWVBFKTogTGlrZXdpc2UuCisKKwkqIHRlc3RzL2lucHV0LmF0IChUb3J0dXJpbmcgdGhlIFNjYW5uZXIpOiBSZW1vdmUgbGluZXMgY29udGFpbmluZworCXNvbGl0YXJ5IGJhY2tzbGFzaGVzLCBhcyB0aGV5IHRpY2tsZSBhIGJ1ZyBpbiB0aGUgSFAgQyBjb21waWxlci4KKworCSogdGVzdHMvZ2xyLXJlZ3IxLmF0IChCYWRseSBDb2xsYXBzZWQgR0xSIFN0YXRlcyk6IEF2b2lkIC8vCisJY29tbWVudHMsIHNpbmNlIHRoZXkncmUgbm90IHBvcnRhYmxlLiAgVXNlIEdOVSBjb2Rpbmcgc3R5bGUuCisKKzIwMDItMTEtMTMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL3lhY2MuYzogTGVhdmUgYmlnZ2VyIGNodW5rcyBvZiBxdW90ZWQgdGV4dC4KKwkoWVlEU1lNUFJJTlRGKTogTmV3LgorCVVzZSBpdCB0byByZXBvcnQgc3ltYm9sIGFjdGl2aXRpZXMuCisJKiBkYXRhL2dsci5jIChZWURTWU1QUklOVEYpOiBOZXcuCisJVXNlIGl0LgorCisyMDAyLTExLTEyICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCVZlcnNpb24gMS43NWIuCisKKwkqIGRhdGEvZ2xyLmMgKHl5ZG9BY3Rpb24pOiBSZXR1cm4gWVlSRVNVTFRUQUcsIG5vdCBpbnQuCisJKHl5Z2xyUmVkdWNlKTogUmV0dXJuIHl5b2ssIG5vdCAwLgorCVRoaXMgc2hvdWxkIGF2b2lkIHRoZSBlbnVtZXJhdGVkLXR5cGUgd2FybmluZ3MgcmVwb3J0ZWQKKwlieSBOZWxzb24gSC4gRi4gQmVlYmUgaW4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAyLTExL21zZzAwMDU3Lmh0bWw+LgorCisJKiBsaWIvYmJpdHNldC5oIChCSVRTRVRfSU5MSU5FKTogUmVtb3ZlLgorCSogbGliL2JpdHNldC5oIFshIEJJVFNFVF9JTkxJTkVdOiBSZW1vdmUuCisJKGJpdHNldF9zZXQsIGJpdHNldF9yZXNldCwgYml0c2V0X3Rlc3QpOiBSZW5hbWUgbG9jYWwgdmFycworCXRvIGF2b2lkIHNoYWRvd2luZyB3YXJuaW5ncyBieSBHQ0MuCisKKwkqIGRhdGEvZ2xyLmMgKGlubGluZSk6IFJlbW92ZSAjZGVmaW5lLiAgSXQncyB0aGUgdXNlcidzCisJcmVzcG9uc2liaWxpdHkgdG8gI2RlZmluZSBpdCBhd2F5LCBqdXN0IGxpa2UgJ2NvbnN0Jy4KKwlUaGlzIGZpeGVzIG9uZSBvZiB0aGUgYnVncyByZXBvcnRlZCBieSBOZWxzb24gSC4gRi4gQmVlYmUgaW4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAyLTExL21zZzAwMDU4Lmh0bWw+LgorCisJKiBNYWtlZmlsZS5tYWludCAocG8tY2hlY2spOiBTY2FuIC5sIGFuZCAueSBmaWxlcyBpbnN0ZWFkIG9mIHRoZQorCS5jIGFuZCB0aGUgLmggZmlsZXMgdGhhdCB0aGV5IGdlbmVyYXRlLiAgVGhpcyBmaXhlcyB0aGUgYnVnCisJcmVwb3J0ZWQgYnkgVGltIFZhbiBIb2xkZXIgaW46CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDItMTEvbXNnMDAwNjIuaHRtbD4KKwlMb29rIGZvciBOXyBhcyB3ZWxsIGFzIGZvciBfLiAgVHJ5IHRvIGF2b2lkIG1hdGNoaW5nICNkZWZpbmUgZm9yCisJTl8gYW5kIF8uCisJKiBwby9QT1RGSUxFUy5pbjogUmVtb3ZlIHNyYy9wYXJzZS1ncmFtLmMsIHNyYy9zY2FuLWdyYW0uYywKKwlzcmMvc3lzdGVtLmguICBBZGQgc3JjL3BhcnNlLWdyYW0ueSwgc3JjL3NjYW4tZ3JhbS5sLgorCSogc3JjL3NjYW4tZ3JhbS5sOiBSZXZhbXAgcmVndWxhciBleHByZXNzaW9ucyBzbyB0aGF0ICIgYW5kICcKKwlkbyBub3QgY29uZnVzZSB4Z2V0dGV4dC4KKworCSogc3JjL3N0cnVuaXEuaCAoc3RydW5pcV9uZXcpOiBEbyBub3QgZGVjbGFyZSB0aGUgcmV0dXJuIHR5cGUKKwl0byBiZSAnY29uc3QnOyB0aGlzIHZpb2xhdGVzIHRoZSBDIHN0YW5kYXJkLgorCSogc3JjL3N0cnVuaXEuYyAoc3RydW5pcV9uZXcpOiBMaWtld2lzZS4KKworMjAwMi0xMS0xMiAgQWxiZXJ0IENoaW4tQS1Zb3VuZyA8Y2hpbmFAdGhld3JpdHRlbndvcmQuY29tPgorCisJKiBzcmMvTWFrZWZpbGUuYW0gKExEQUREKTogTGluayAkKExJQklOVEwpIGxhc3QgdG8gYXZvaWQgdGhlCisJZHVwbGljYXRlIGRlZmluaXRpb24gb2Ygb3B0aW5kIG9uIFRydTY0IFVOSVggNC4wRCB3aXRoIHRoZSBDb21wYXEKKwlsaW5rZXIuCisKKzIwMDItMTEtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBNYWtlZmlsZS5tYWludDogU3luYyB3aXRoIEF1dG9jb25mOgorCShsb2NhbF91cGRhdGVzKTogTmV3LgorCisyMDAyLTExLTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogcG8vUE9URklMRVMuaW4gKHNyYy9sYWxyLmMsIHNyYy9zdGF0ZS5jKTogUmVtb3ZlCisKKzIwMDItMTEtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiB0ZXN0cy9hY3Rpb25zLmF0IChfQVRfQ0hFQ0tfUFJJTlRFUl9BTkRfREVTVFJVQ1RPUik6IERpc3BsYXkgdGhlCisJbG9jYXRpb25zLgorCisyMDAyLTExLTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9jLm00IChiNF95eXN5bXByaW50X2dlbmVyYXRlKTogUGFzcyAqeXl2YWx1ZXAgdG8gWVlQUklOVCwKKwlub3QgeXl2YWx1ZS4KKworMjAwMi0xMS0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHRlc3RzL2FjdGlvbnMuYXQgKEFUX0NIRUNLX1BSSU5URVJfQU5EX0RFU1RSVUNUT1IpOiBOZXcuCisJVXNlIGl0IHRvIHRlc3QgdGhlIEdMUiBwYXJzZXIuCisKKzIwMDItMTEtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChpbnB1dC55KTogcy9ZWUVPRi9NWUVPRi8sIGFzIHRoZSBza2VsZXRvbgorCWRlZmluZXMgaXQuCisJKiBkYXRhL2dsci5jICh5eXN0b3MpOiBOZXcuCisJKGI0X3l5c3ltcHJpbnRfZ2VuZXJhdGUsIGI0X3l5ZGVzdHJ1Y3RfZ2VuZXJhdGUpOiBJbnZva2UuCisJKFlZRFNZTVBSSU5UKTogTmV3LgorCSh5eXZhbCk6IERvbid0IGRlZmluZSBpdCwgaXQgaXMgaGFuZGxlZCB2aWEgTTQuCisJKHl5cmVjb3ZlclBhcnNlRXJyb3IpOiBGcmVlIHZlcmJvc2VseSB0aGUgZGlzY2FyZGVkIHN5bWJvbHMuCisJKiBkYXRhL3lhY2MuYyAoeXlzeW1wcmludCk6IFJlbW92ZSwgcmF0aGVyLi4uCisJKGI0X3l5c3ltcHJpbnRfZ2VuZXJhdGUpOiBpbnZva2UuCisJKiBkYXRhL2MubTQgKGI0X3l5c3ltcHJpbnRfZ2VuZXJhdGUpOiBOZXcuCisJQWNjZXB0IHBvaW50ZXJzIGFzIGFyZ3VtZW50cywgYXMgb3Bwb3NlZCB0byB0aGUgdmVyc2lvbiBmcm9tCisJeWFjYy5jLgorCShiNF95eWRlc3RydWN0X2dlbmVyYXRlKTogTGlrZXdpc2UuCisJKiB0ZXN0cy9jYXRpb25zLmF0IChQcmludGVycyBhbmQgRGVzdHJ1Y3RvcnMpOiBVc2UgQmlzb24gZGlyZWN0aXZlcworCWluc3RlYWQgb2YgQ1BQIG1hY3Jvcy4KKwlEb24ndCByZWx5IG9uIGludGVybmFsIGRldGFpbHMuCisKKzIwMDItMTEtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2MubTQgKGI0X3l5ZGVzdHJ1Y3RfZ2VuZXJhdGUsIGI0X3N5bWJvbF9hY3Rpb25zKTogTmV3LgorCSogZGF0YS95YWNjLmM6IFJlbmFtZSB5eWNoYXIxIGFzIHl5dG9rZW4sIGFzIGluIGdsci5jLgorCURvbid0IHdvcmsgb24geXljaGFyIChpLmUuLCBkbyBzZXQgaXQgdG8gWVlFTVBUWSwgZG9uJ3QgbWF0Y2gKKwlpdCBhZ2FpbnN0IFlZRU1QVFkgYW5kIHNvIGZvcnRoKSwgd29yayBvbiB5eXRva2VuIChpLmUuLCBzZXQKKwlpdCB0byBZWUVNUFRZIGV0Yy4pLgorCSh5eWRlc3RydWN0KTogUmVwbGFjZSB3aXRoIGEgYjRfeXlkZXN0cnVjdF9nZW5lcmF0ZSBpbnZvY2F0aW9uLgorCShiNF9zeW1ib2xfYWN0aW9ucyk6IFJlbW92ZS4KKwkqIGRhdGEvZ2xyLmMgKFlZVFJBTlNMQVRFKTogQXMgZm9yIHlhY2MuYywgaWYgbmVnYXRpdmUsIGl0IHN0YW5kcworCWZvciAwLCBlbmQtb2YtaW5wdXQuCisKKzIwMDItMTEtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkb2MvYmlzb24udGV4aW5mbyAoRGVzdHJ1Y3RvciBEZWNsKTogTmV3LgorCisyMDAyLTExLTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3RhYmxlcy5jICh0YWJsZXNfZ2VuZXJhdGUpOiBVc2UgZnJlZSBmb3IgcG9pbnRlcnMgdGhhdAorCWNhbm5vdCBiZSBOVUxMLCBub3QgWEZSRUUuCisJKHBhY2tfdmVjdG9yKTogVXNlIGFzc2VydCwgbm90IGZhdGFsLCBmb3IgYm91bmQgdmlvbGF0aW9ucy4KKwkqIHNyYy9zdGF0ZS5jIChzdGF0ZV9uZXcpOiBMaWtld2lzZS4KKwkqIHNyYy9yZWFkZXIuYyAocmVhZGVyKTogTGlrZXdpc2UuCisJKiBzcmMvbGFsci5jIChzZXRfZ290b19tYXApOiBMaWtld2lzZS4KKwkqIHNyYy9sb2NhdGlvbi5oIChMT0NBVElPTl9QUklOVCk6IElmIGZpcnN0X2xpbmUgaXMgMCwganVzdCBpc3N1ZQorCXRoZSBmaWxlIG5hbWUuCisKKzIwMDItMTEtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvc2Nhbi1ncmFtLmwsIHNyYy9yZWFkZXIuaCAoc2Nhbm5lcl9sYXN0X3N0cmluZ19mcmVlKToKKwlSZXN0b3JlLgorCSogc3JjL3NjYW4tZ3JhbS5sIChsYXN0X3N0cmluZyk6IElzIGdsb2JhbCB0byB0aGUgZmlsZSwgbm90IHRvCisJeXlsZXguCisJKiBzcmMvcGFyc2UtZ3JhbS55IChpbnB1dCk6IERvbid0IGFwcGVuZCB0aGUgZXBpbG9ndWUgaGVyZSwKKwkoZXBpbG9ndWUub3B0KTogZG8gaXQgaGVyZSwgYW5kIGZyZWUgdGhlIHNjYW5uZXIncyBvYnN0YWNrLgorCSogc3JjL3JlYWRlci5jIChlcGlsb2d1ZV9zZXQpOiBSZW5hbWUgYXMuLi4KKwkoZXBpbG9ndWVfYXVnbWVudCk6IHRoaXMuCisJKiBkYXRhL2MubTQgKGI0X2VwaWxvZ3VlKTogRGVmYXVsdHMgdG8gZW1wdHkuCisKKzIwMDItMTEtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvZ2V0YXJncy5jIChsb25nX29wdGlvbnMpOiBSZW1vdmUgZHVwbGljYXRlcy4KKwkqIHNyYy92bXNnZXRhcmdzLmMsIHNyYy9idWlsZC5jb20sIHNyYy9iaXNvbi5jbGQsIHNyYy92bXNobHAubWFyOgorCVJlbW92ZS4KKwkqIGRvYy9iaXNvbi5ybmg6IFJlbW92ZS4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChWTVMgSW52b2NhdGlvbik6IFJlbW92ZS4KKworMjAwMi0xMS0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9zdHJ1bmlxLmgsIHNyYy9zdHJ1bmlxLmMgKHN0cnVuaXFfdCk6IElzIGNvbnN0LgorCShTVFJVTklRX0VRLCBzdHJ1bmlxX2Fzc2VydCwgc3RydW5pcV9hc3NlcnRfcCk6IE5ldy4KKworCVVzZSBzdHJ1bmlxIGZvciBzeW1ib2xzLgorCisJKiBzcmMvc3ltdGFiLmggKHN5bWJvbF90KTogVGhlIHRhZyBtZW1iZXIgaXMgYSBzdHJ1bmlxLgorCShzeW1ib2xfdHlwZV9zZXQpOiBBZGp1c3QuCisJKiBzcmMvc3ltdGFiLmMgKHN5bWJvbF9uZXcpOiBUYWtlcyBhIHN0cnVuaXEuCisJKHN5bWJvbF9mcmVlKTogRG9uJ3QgZnJlZSB0aGUgdGFnIG1lbWJlci4KKwkoaGFzaF9jb21wYXJlX3N5bWJvbF90LCBoYXNoX3N5bWJvbF90KTogUmVuYW1lIGFzLi4uCisJKGhhc2hfY29tcGFyZV9zeW1ib2wsIGhhc2hfc3ltYm9sKTogdGhlc2UuCisJVXNlIHRoZSBmYWN0IHRoYXQgdGFncyBhcyBzdHJ1bmlxcy4KKwkoc3ltYm9sX2dldCk6IFVzZSBzdHJ1bmlxX25ldy4KKwkqIHNyYy9zeW1saXN0LmgsIHNyYy9zeW1saXN0LmMgKHN5bWJvbF9saXN0X25fdHlwZV9uYW1lX2dldCk6CisJUmV0dXJucyBhIHN0cm5pcS4KKwkqIHNyYy9yZWFkZXIuaCAobWVyZ2VyX2xpc3QsIGdyYW1tYXJfY3VycmVudG1lcmdlX3NldCk6IFRoZSBuYW1lCisJYW5kIHR5cGUgbWVtYmVycyBhcmUgc3RydW5pcXMuCisJKiBzcmMvcmVhZGVyLmMgKGdldF9tZXJnZV9mdW5jdGlvbikKKwkoZ3JhbW1hcl9jdXJyZW50X3J1bGVfbWVyZ2Vfc2V0KTogQWRqdXN0LgorCShUWVBFLCBjdXJyZW50X3R5cGUpOiBBcmUgc3RydW5pcS4KKworCVVzZSBzdHJ1bmlxIGZvciBmaWxlIG5hbWVzLgorCisJKiBzcmMvZmlsZXMuaCwgc3JjL2ZpbGVzLmMgKGluZmlsZSk6IFNwbGl0IGludG8uLi4KKwkoZ3JhbW1hcl9maWxlLCBjdXJyZW50X2ZpbGUpOiB0aGVzZS4KKwkqIHNyYy9zY2FuLWdyYW0uYyAoWVlfVVNFUl9JTklULCBoYW5kbGVfc3luY2xpbmUpOiBBZGp1c3QuCisJKiBzcmMvcmVkdWNlLmMgKHJlZHVjZV9wcmludCk6IExpa2V3aXNlLgorCSogc3JjL2dldGFyZ3MuYyAoZ2V0YXJncyk6IExpa2V3aXNlLgorCSogc3JjL2NvbXBsYWluLmgsIHNyYy9jb21wbGFpbi5jOiBMaWtld2lzZS4KKwkqIHNyYy9tYWluLmMgKG1haW4pOiBDYWxsIHN0cnVuaXFzX25ldyBlYXJseSBlbm91Z2ggdG8gdXNlIGl0IGZvcgorCWZpbGUgbmFtZXMuCisJRG9uJ3QgZnJlZSB0aGUgaW5wdXQgZmlsZSBuYW1lLgorCisyMDAyLTExLTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3N5bXRhYi5jIChzeW1ib2xfZnJlZSk6IFJlbW92ZSBkZWFkIGRlYWN0aXZhdGVkIGNvZGU6CisJdHlwZV9uYW1lIGFyZSBwcm9wZXJseSByZW1vdmVkLgorCURvbid0IHVzZSBYRlJFRSB0byBmcmVlIGl0ZW1zIHRoYXQgY2Fubm90IGJlIE5VTEwuCisJKiBzcmMvc3RydW5pcS5oLCBzcmMvc3RydW5pcS5jOiBOZXcuCisJKiBzcmMvbWFpbi5jIChtYWluKTogSW5pdGlhbGl6ZS9mcmVlIHN0cnVuaXFzLgorCSogc3JjL3BhcnNlLWdyYW0ueSAoJXVuaW9uKTogQWRkIGFzdHJ1bmlxIG1lbWJlci4KKwkoeXlwcmludCk6IEFkanVzdC4KKwkqIHNyYy9zY2FuLWdyYW0ubCAoPHt0YWd9Pik6IFJldHVybiBhIHN0cnVuaXEuCisJRnJlZSB0aGUgb2JzdGFjayBiaXQgdGhhdCB1c2VkIHRvIHN0b3JlIGl0LgorCSogc3JjL3N5bXRhYi5oIChzeW1ib2xfdCk6IFRoZSAndHlwZV9uYW1lJyBtZW1iZXIgaXMgYSBzdHJ1bmlxLgorCisyMDAyLTExLTExICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCVJldmFtcCB0byBmaXggbWFueSAoYnV0IG5vdCBhbGwpIG9mIHRoZSBDLSBhbmQgTTQtcmVsYXRlZCBxdW90aW5nCisJcHJvYmxlbXMuICBBbW9uZyBvdGhlciB0aGluZ3MsIHRoaXMgZml4ZXMgdGhlIEJpc29uIGJ1ZyByZXBvcnRlZAorCWJ5IEphbiBIdWJpY2thIHdoZW4gcHJvY2Vzc2luZyB0aGUgQmFzaCBncmFtbWFyOyBzZWU6CisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDItMTEvbXNnMDAwMzkuaHRtbD4KKworCVVzZSBuZXcgQCBlc2NhcGVzIGNvbnNpc3RlbnRseS4gIFJlcHJlc2VudCBicmFja2V0cyB3aXRoIEB7IGFuZCBAfQorCXJhdGhlciB0aGFuIEA8OkAgYW5kIEA6PkAsIHNpbmNlIHRoaXMgd29ya3MgYSBiaXQgYmV0dGVyIHdpdGggZHVtYgorCWVkaXRvcnMgbGlrZSB2aS4gIFJlcHJlc2VudCBAIHdpdGggQEAsIHNpbmNlIEAgaXMgbm93IGNvbnNpc3RlbnRseQorCWFuIGVzY2FwZS4gIFVzZSBAb2xpbmVAIGFuZCBAb2ZpbGVAIHJhdGhlciB0aGFuIF9fb2xpbmVfXyBhbmQKKwlfX29maWxlX18sIHRvIGF2b2lkIHVuZXhwZWN0ZWQgZXhwYW5zaW9ucy4gIFNpbWlsYXJseSwgdXNlIEBvdXRwdXQKKwlyYXRoZXIgdGhhbiAjb3V0cHV0LgorCisJKiBkYXRhL2MubTQgKGI0X2NvcHlyaWdodCk6IE9taXQgZmlsZSBuYW1lIGZyb20gY29tbWVudCwgc2luY2UKKwl0aGUgZmlsZSBuYW1lIGNvdWxkIGNvbnRhaW4gIiovIi4KKwkoYjRfc3luY2xpbmVzX2ZsYWcpOiBEb24ndCBxdW90ZSB0aGUgMm5kIGFyZ3VtZW50OyBpdCBzaG91bGQgYWxyZWFkeQorCWJlIHF1b3RlZC4gIEFsbCB1c2VzIGNoYW5nZWQuCisKKwkqIGRhdGEvZ2xyLmM6IFVzZSBuZXcgQCBlc2NhcGVzIGNvbnNpc3RlbnRseS4KKwkoYjRfaW5wdXRfc3VmZml4LCBiNF9vdXRwdXRfcGFyc2VyX3N1ZmZpeCwgYjRfb3V0cHV0X3BhcnNlcl9uYW1lLAorCWI0X291dHB1dF9oZWFkZXJfc3VmZml4LCBiNF9vdXRwdXRfaGVhZGVyX25hbWUsIGI0X2hlYWRlcl9ndWFyZCk6CisJUmVtb3ZlLCBzaW5jZSB0aGV5IGNvdWxkbid0IGhhbmRsZSBhcmJpdHJhcnkgY2hhcmFjdGVycyBpbiBmaWxlCisJbmFtZXMuCisJKiBkYXRhL2xhbHIxLmNjOiBMaWtld2lzZS4KKwkqIGRhdGEveWFjYy5jOiBMaWtld2lzZS4KKworCSogc3JjL2ZpbGVzLmMgKG91dHB1dF9pbmZpeCk6IFJlbW92ZTsgYWxsIHVzZXMgcmVtb3ZlZC4KKwkqIHNyYy9maWxlcy5oOiBMaWtld2lzZS4KKworCSogZGF0YS9nbHIuYzogUmVtb3ZlIHVzZSBvZiAiI2lmZGVmIGI0X2hlYWRlcl9ndWFyZCIsIHNpbmNlIGl0CisJbWlzaGFuZGxlZCBmdW5ueSBjaGFyYWN0ZXJzIGluIGZpbGUgbmFtZXMsIGFuZCBhbnl3YXkgaXQgaXNuJ3QKKwluZWVkZWQgYW55IG1vcmUuCisJKiBkYXRhL3lhY2MuYzogTGlrZXdpc2UuCisJKiBkYXRhL2xhbHIxLmNjOiBVc2UgWVlTTFBfTkVFREVEIGluc3RlYWQgb2YgYjRfaGVhZGVyX2d1YXJkLgorCisJKiBkYXRhL2dsci5jIChZWVNUWVBFX0lTX1RSSVZJQUwpOiBEZWZpbmUgd2hlbiB0aGUgLmggZmlsZSB3b3VsZC4KKwkqIGRhdGEveWFjYy5jOiBMaWtld2lzZS4KKworCSogc3JjL211c2NsZV90YWIuYzogSW5jbHVkZSBxdW90ZWFyZy5oLCBzaW5jZSB3ZSBuZWVkIHRvIHF1b3RlIEMKKwlzdHJpbmdzIG5vdy4KKwkobXVzY2xlX2luaXQpOiBRdW90ZSBmaWxlbmFtZSBhcyBhIEMgc3RyaW5nLgorCSogc3JjL211c2NsZV90YWIuaCAoTVVTQ0xFX0dST1dfU1RSSU5HX1BBSVIpOiBSZW1vdmU7IHVudXNlZC4KKwkoTVVTQ0xFX09CU1RBQ0tfU0dST1csIE1VU0NMRV9JTlNFUlRfQ19TVFJJTkcpOiBOZXcgbWFjcm9zLgorCSogc3JjL291dHB1dC5jIChlc2NhcGVkX2ZpbGVfbmFtZV9vdXRwdXQpOiBOZXcgZnVuY3Rpb24uCisJKHByZXBhcmVfc3ltYm9scyk6IFF1b3RlIHRva2VucyBmb3IgTTQuCisJKHByZXBhcmUpOiBEb24ndCBpbnNlcnQgb3V0cHV0X2luZml4LCBvdXRwdXRfcHJlZml4LAorCW91dHB1dF9wYXJzZXJfbmFtZSwgb3V0cHV0X2hlYWRlcl9uYW1lOyB0aGlzIGlzIG5vdyBkb3duIGJ5IHNjYW4tc2tlbC4KKwlJbnNlcnQgc2tlbGV0b24gYXMgYSBDIHN0cmluZy4KKworCSogc3JjL291dHB1dC5jICh1c2VyX2FjdGlvbnNfb3V0cHV0LCBzeW1ib2xfZGVzdHJ1Y3RvcnNfb3V0cHV0LAorCXN5bWJvbF9wcmludGVyc19vdXRwdXQpOiBRdW90ZSBmaWxlbmFtZXMgZm9yIEMgYW5kIE00LgorCSogc3JjL3JlYWRlci5jIChwcm9sb2d1ZV9hdWdtZW50LCBlcGlsb2d1ZV9zZXQpOiBMaWtld2lzZS4KKworCSogc3JjL3NjYW4tZ3JhbS5sICg8U0NfQ0hBUkFDVEVSPik6IERvbid0IHdvcnJ5IGFib3V0IGFueSBiYWNrc2xhc2gKKwllc2NhcGVzIG90aGVyIHRoYW4gXFwgYW5kIFwnOyB0aGlzIHNpbXBsaWZpZXMgdGhlIGNvZGUuCisJKDxTQ19TVFJJTkc+KTogTGlrZXdpc2UsIGZvciBcXCBhbmQgXCIuCisJKDxTQ19DT01NRU5ULFNDX0xJTkVfQ09NTUVOVCxTQ19TVFJJTkcsU0NfQ0hBUkFDVEVSLFNDX0JSQUNFRF9DT0RFLAorCVNDX1BST0xPR1VFLFNDX0VQSUxPR1VFPik6IEVzY2FwZSAkIGFuZCBALCB0b28uCisJVXNlIG5ldyBlc2NhcGVzIEB7IGFuZCBAfSBmb3IgWyBhbmQgXS4KKworCSogc3JjL3NjYW4tc2tlbC5sICh5eWxpbmVubywgeXlvdXRuYW1lKTogUmVtb3ZlIHN0YXRpYyB2YXJzLCByZXBsYWNpbmcKKwl0aGVtIHdpdGggYXV0byB2YXJzLgorCVN3aXRjaCB0byBuZXcgZXNjYXBlIHNjaGVtZSwgd2hlcmUgQCBpcyB0aGUgZXNjYXBlIGNoYXJhY3RlciB1bmlmb3JtbHkuCisJQWJvcnQgaWYgYSBzdHJheSBlc2NhcGUgY2hhcmFjdGVyIGlzIGZvdW5kLiAgQXZvaWQgdW5ib3VuZGVkIGlucHV0CisJYnVmZmVyIHdoZW4gcGFyc2luZyBub24tZXNjYXBlZCB0ZXh0LgorCisJKiB0ZXN0cy9pbnB1dC5hdCAoVG9ydHVyaW5nIHRoZSBTY2FubmVyKTogQWRkIHRlc3RzIHRoYXQgQG9saW5lQCwKKwlfX29saW5lX18sICNvdXRwdXQsICRALCBhbmQgQHsgZG8gbm90IGhhdmUgdW5pbnRlbmRlZCBtZWFuaW5ncy4KKworMjAwMi0xMS0wOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwlGaXggdGhlIHRlc3QgZmFpbHVyZSBkdWUgdG8gR0NDIHdhcm5pbmdzIGRlc2NyaWJlZCBpbgorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDItMTEvbXNnMDAwMDAuaHRtbD4uCisJKiBkYXRhL2dsci5jICh5eWlzX3BhY3RfbmluZiwgeXlpc190YWJsZV9uaW5mKTogTmV3IG1hY3Jvcywgd2hpY2gKKwlldmFsdWF0ZSB0byAwIGlmIGl0J3MgaW1wb3NzaWJsZSBmb3IgTklORiB0byBiZSBpbiB0aGUgcmVzcGVjdGl2ZQorCXRhYmxlLgorCSh5eWdldExSQWN0aW9ucywgeXlyZWNvdmVyUGFyc2VFcnJvcik6IFVzZSB0aGVtLgorCisJKiBzcmMvc2Nhbi1ncmFtLmwgKHVuZXhwZWN0ZWRfZW5kX29mX2ZpbGUpOiBGaXggYnVnOiBjb2x1bW5zIHdlcmUKKwljb3VudGVkIGluIHRoZSB0b2tlbiBpbnNlcnRlZCBhdCBlbmQgb2YgZmlsZS4gIE5vdyB0YWtlcworCWxvY2F0aW9uX3QgKiwgbm90IGxvY2F0aW9uX3QsIHNvIHRoYXQgdGhlIGxvY2F0aW9uIGNhbiBiZQorCWFkanVzdGVkLiAgQWxsIHVzZXMgY2hhbmdlZC4KKworCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoSW52YWxpZCBpbnB1dHMpOiBBZGp1c3Qgd29yZGluZyBpbgorCWRpYWdub3N0aWMgdG8gbWF0Y2ggdGhlIG5ldyBiZWhhdmlvci4KKworCSogdGVzdHMvdG9ydHVyZS5hdCAoQVRfREFUQV9UUklBTkdVTEFSX0dSQU1NQVIsCisJQVRfREFUQV9IT1JJWk9OVEFMX0dSQU1NQVIsIEFUX0RBVEFfTE9PS0FIRUFEU19HUkFNTUFSLAorCUFUX0RBVEFfU1RBQ0tfVE9SVFVSRSk6IFJlcGxhY2UgYGFzc2VydCAoeCk7JyB3aXRoIGBpZiAoISAoeCkpCisJYWJvcnQgKCk7Jy4gIFRoaXMgcmVkdWNlcyB0aGUgcnVudGltZSBvZiB0aGUgIk1hbnkgbG9va2FoZWFkcyIKKwl0ZXN0IGZyb20gMjcuNiB0byAyLjcgbWludXRlcyBvbiBhIDQ0MCBNSHogVWx0cmFzcGFyYyBJSUkgcnVubmluZworCUdDQyAzLjIuCisKKzIwMDItMTEtMDcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBzcmMvcGFyc2UtZ3JhbS55IChDSEFSQUNURVIpOiBSZW1vdmUgdW51c2VkIHRva2VuLgorCUFsbCB1c2VzIHJlbW92ZWQuCisKKwkqIHNyYy9zY2FuLWdyYW0ubDogUmVtb3ZlIHN0YWNrIG9wdGlvbi4gIFdlIG5vIGxvbmdlciB1c2UgdGhlCisJc3RhY2ssIHNpbmNlIHRoZSBzdGFjayB3YXMgbmV2ZXIgZGVlcGVyIHRoYW4gMTsgaW5zdGVhZCwgdXNlIHRoZQorCW5ldyBhdXRvIHZhciBjX2NvbnRleHQgdG8gcmVjb3JkIHRoZSBzdGFja2VkIHZhbHVlLgorCisJUmVtb3ZlIG5vdW5wdXQgb3B0aW9uLiAgQXQgYW4gdW5leHBlY3RlZCBlbmQgb2YgZmlsZSwgd2Ugbm93IHVucHV0CisJdGhlIG1pbmltYWwgaW5wdXQgbmVjZXNzYXJ5IHRvIGVuZCBjbGVhbmx5OyB0aGlzIHNpbXBsaWZpZXMgdGhlCisJY29kZS4KKworCUF2b2lkIHVuYm91bmRlZCB0b2tlbiBzaXplcyB3aGVyZSB0aGlzIGlzIGVhc3kuCisKKwkodW5leHBlY3RlZF9lbmRfb2ZfZmlsZSk6IE5ldyBmdW5jdGlvbi4KKwlVc2UgaXQgdG8gc3lzdGVtYXRpemUgdGhlIGVycm9yIG1lc3NhZ2Ugb24gdW5leHBlY3RlZCBFT0YuCisJKGxhc3Qtc3RyaW5nKTogTm93IGF1dG8sIG5vdCBzdGF0aWMuCisJKFlZX09CU19GUkVFKTogUmVtb3ZlIHVubmVjZXNzYXJ5IGRvIHdoaWxlICgwKSB3cmFwcGVyLgorCShzY2FubmVyX2xhc3Rfc3RyaW5nX2ZyZWUpOiBSZW1vdmU7IG5vdCB1c2VkLgorCShwZXJjZW50X3BlcmNlbnRfY291bnQpOiBNb3ZlIGRlY2wgdG8ganVzdCBiZWZvcmUgdXNlLgorCShTQ19FU0NBUEVEX0NIQVJBQ1RFUik6IFJldHVybiBJRCBhdCB1bmV4cGVjdGVkIGVuZCBvZiBmaWxlLAorCW5vdCB0aGUgKG5ldmVyIG90aGVyd2lzZWQtdXNlZCkgQ0hBUkFDVEVSLgorCisyMDAyLTExLTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCUxldCB5eWVycm9yIGFsd2F5cyByZWNlaXZlIHRoZSBtc2cgYXMgbGFzdCBhcmd1bWVudCwgc28gdGhhdAorCXl5ZXJyb3IgY2FuIGJlIHZhcmlhZGljLgorCisJKiBkYXRhL3lhY2MuYyAoYjRfeXllcnJvcl9hcmdzKTogTmV3LgorCVVzZSBpdCB3aGVuIGNhbGxpbmcgeXllcnJvci4KKwkqIGRhdGEvZ2xyLmMgKGI0X3l5ZXJyb3JfYXJncywgYjRfbHl5ZXJyb3JfYXJncyk6IE5ldy4KKwlVc2UgaXQgd2hlbiBjYWxsaW5nIHl5ZXJyb3IuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoRXJyb3IgUmVwb3J0aW5nKTogQWRqdXN0LgorCSogdGVzdHMvY2FsYy5hdCAoX0FUX0RBVEFfQ0FMQ19ZKTogQWRqdXN0LgorCSogdGVzdHMvY3h4LXR5cGUuYXQgKF9BVF9URVNUX0dMUl9DQUxDKTogQWRqdXN0LgorCisyMDAyLTExLTA2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSNsaW5lIHNob3VsZCBoYXZlIHF1b3RlZCBzdHJpbmdzLgorCUlkZWFsbHksIHRoaXMgc2hvdWxkIGJlIGRvbmUgYnkgbTRfcXVvdGVhcmcuCisKKwkqIHNyYy9zY2FuLXNrZWwubDogSW5jbHVkZSBxdW90ZWFyZy5oLgorCVF1b3RlIF9fb2ZpbGVfXy4KKwkqIHNyYy9vdXRwdXQuYyAoc3ltYm9sX3ByaW50ZXJzX291dHB1dCkKKwkoc3ltYm9sX2Rlc3RydWN0b3JzX291dHB1dCk6IFF1b3RlIHRoZSBmaWxlIG5hbWUuCisKKzIwMDItMTEtMDYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChJbnZhbGlkIGlucHV0cyk6IEFkanVzdCB0byB0aGUgcmVjZW50CisJbWVzc2FnZXMuCisKKzIwMDItMTEtMDYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJUmVzdG9yZSAtLW5vLWxpbmVzLgorCVJlcG9ydGVkIGJ5IEppbSBLZW50LgorCisJKiBkYXRhL2MubTQgKGI0X3N5bmNsaW5lKTogTmV3LgorCSogZGF0YS9nbHIuYywgZGF0YS95YWNjLmMsIGRhdGEvbGFscjEuY2M6IFVzZSBpdC4KKwkqIHNyYy9yZWFkZXIuYyAocHJvbG9ndWVfYXVnbWVudCwgZXBpbG9ndWVfc2V0KTogVXNlIGI0X3N5bmNsaW5lLgorCSogc3JjL291dHB1dC5jICh1c2VyX2FjdGlvbnNfb3V0cHV0KTogTGlrZXdpc2UuCisJKHByZXBhcmUpOiBEZWZpbmUgJ2I0X3N5bmNsaW5lc19mbGFnJy4KKwkqIHNyYy9tdXNjbGVfdGFiLmMgKG11c2NsZV9pbml0KTogRG9uJ3QgZGVmaW5lIGI0X2xpbmVmLgorCisyMDAyLTExLTA2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL21haW4uYyAobWFpbik6IEZyZWUgYGluZmlsZScuCisJKiBzcmMvc2Nhbi1ncmFtLmwgKGhhbmRsZV9zeW5jbGluZSk6IE5ldy4KKwlSZWNvZ25pemUgYCNsaW5lJy4KKwkqIHNyYy9vdXRwdXQuYyAodXNlcl9hY3Rpb25zX291dHB1dCwgc3ltYm9sX2Rlc3RydWN0b3JzX291dHB1dCkKKwkoc3ltYm9sX3ByaW50ZXJzX291dHB1dCk6IFVzZSB0aGUgbG9jYXRpb24ncyBmaWxlIG5hbWUsIG5vdAorCWluZmlsZS4KKwkqIHNyYy9yZWFkZXIuYyAocHJvbG9ndWVfYXVnbWVudCwgZXBpbG9ndWVfc2V0KTogTGlrZXdpc2UuCisKKzIwMDItMTEtMDUgIFBhdWwgSGlsZmluZ2VyICA8SGlsZmluZ2VyQENTLkJlcmtlbGV5LkVEVT4KKworCSogc3JjL3RhYmxlcy5jIChtYXRjaGluZ19zdGF0ZSk6IERvbid0IGFsbG93IHN0YXRlcyB0byBtYXRjaCBpZgorCWVpdGhlciBoYXMgR0xSIGNvbmZsaWN0IGVudHJpZXMuCisKKzIwMDItMTEtMDUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBzcmMvc2Nhbi1ncmFtLmw6IFVzZSBtb3JlIGFjY3VyYXRlIGRpYWdub3N0aWNzLCBlLmcuCisJImludGVnZXIgb3V0IG9mIHJhbmdlIiByYXRoZXIgdGhhbiAiaW52YWxpZCB2YWx1ZSIuCisJKiB0ZXN0cy9pbnB1dC5hdCAoSW52YWxpZCAkbiwgSW52YWxpZCBAbik6IENoYW5nZSBleHBlY3RlZCB3b3JkaW5nCisJYWNjb3JkaW5nbHkuCisKKwlTY2FuIDwlIGFuZCAlPiBkaWdyYXBocyBpbiBDIGNvZGUgYXMgUE9TSVggMTAwMy4xLTIwMDEgcmVxdWlyZXMuCisJQWxzbywgcmVtb3ZlIG9uZSBzdGF0aWMgdmFyaWFibGUgaW4gdGhlIHNjYW5uZXIuCisKKwkqIHNyYy9zY2FuLWdyYW0ubCAoYnJhY2VzX2xldmVsKTogTm93IGF1dG8sIG5vdCBzdGF0aWMuCisJSW5pdGlhbGl6ZSB0byB6ZXJvIGlmIHRoZSBjb21waWxlciBpcyBiZWluZyBwaWNreS4KKwkoSU5JVElBTCk6IENsZWFyIGJyYWNlc19sZXZlbCBpbnN0ZWFkIG9mIGluY3JlbWVudGluZyBpdC4KKwkoU0NfQlJBQ0VEX0NPREUpOiBUcmVhdCA8JSBhbmQgJT4gYXMgeyBhbmQgfSB3aGVuIGluc2lkZSBDIGNvZGUsCisJYXMgUE9TSVggMTAwMy4xLTIwMDEgcmVxdWlyZXMuCisJKiBzcmMvc3lzdGVtLmggKElGX0xJTlQpOiBOZXcgbWFjcm8sIHRha2VuIGZyb20gY29yZXV0aWxzLgorCSogY29uZmlndXJlLmFjOiBEZWZpbmUgImxpbnQiIGlmIC0tZW5hYmxlLWdjYy13YXJuaW5ncy4KKworMjAwMi0xMS0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9zY2FuLWdyYW0ubDogV2hlbiBpdCBzdGFydHMgd2l0aCBgJScsIGNvbXBsYWluIGFib3V0IHRoZQorCXdob2xlIGRpcmVjdGl2ZSwgbm90IGp1c3QgdGhhdCBgaW52YWxpZCBjaGFyYWN0ZXI6ICUnLgorCisyMDAyLTExLTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogTWFrZWZpbGUubWFpbnQ6IFVwZGF0ZSBmcm9tIEF1dG9jb25mLgorCSh1cGRhdGUsIGN2cy11cGRhdGUsIHBvLXVwZGF0ZSwgZG8tcG8tdXBkYXRlKTogTmV3LgorCisyMDAyLTExLTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogdGVzdHMvZ2xyLXJlZ3IxLmF0IChCYWRseSBDb2xsYXBzZWQgR0xSIFN0YXRlcyk6IFByb3RvdHlwZSB5eWxleAorCWFuZCB5eWVycm9yLgorCUhhdmUgeXllcnJvciBgdXNlJyBpdHMgYXJndW1lbnRzLgorCSogdGVzdHMvY2FsYy5hdCAoQVRfQ0hFQ0tfUFVTSERFRlMpOiBBVF9ZWUVSUk9SX1NFRVNfTE9DX0lGCisJcmV0dXJucyB0cnVlIHdoZW4gbG9jYXRpb24gJiB5YWNjICYgcHVyZSAmIHBhcnNlLXBhcmFtLgorCShfQVRfREFUQV9DQUxDX1kpOiBMZXQgeXllcnJvciBgYHVzZScnIGl0cyBhcmd1bWVudHMuCisKKzIwMDItMTEtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvbG9jYXRpb24uaCAoTE9DQVRJT05fUFJJTlQpOiBVc2UgcXVvdGVhcmcgc2xvdCAzIHRvIGF2b2lkCisJY2xhc2hlcy4KKwkqIHNyYy9zY2FuLWdyYW0ubDogVXNlIFtcJ10gaW5zdGVhZCBvZiBbJ10gdG8gcGFjaWZ5CisJZm9udC1sb2NrLW1vZGUuCisJVXNlIGNvbXBsYWluX2F0LgorCVVzZSBxdW90ZSwgbm90IHF1b3RlX24gc2luY2UgTE9DQVRJT05fUFJJTlQgbm8gbG9uZ2VyIHVzZXMgdGhlCisJc2xvdCAwLgorCisyMDAyLTExLTAzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogc3JjL3JlYWRlci5jIChnZXRfbWVyZ2VfZnVuY3Rpb24sIGdyYW1tYXJfY3VycmVudF9ydWxlX2NoZWNrKToKKwlVc2UgY29uc2lzdGVudCBkaWFnbm9zdGljcyBmb3IgcmVwb3J0aW5nIHR5cGUgbmFtZSBjbGFzaGVzLgorCVF1b3RlIHRoZSB0eXBlcyB3aXRoIDw+LCBmb3IgY29uc2lzdGVuY3kgd2l0aCBZYWNjLgorCSogdGVzdHMvaW5wdXQuYXQgKFR5cGUgQ2xhc2hlcyk6IEFkanVzdCB0byBkaWFnbm9zdGljIGNoYW5nZXMuCisKKzIwMDItMTEtMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2MubTQgKGI0X2lkZW50aWZpY2F0aW9uLCBiNF91c2VyX2FyZ3MsIGI0X3BhcnNlX3BhcmFtKToKKwlOZXcuCisJKiBkYXRhL3lhY2MubTQgKGI0X3B1cmVfYXJncywgYjRfUHVyZV9hcmdzKTogTmV3LgorCShiNF9wYXJzZV9wYXJhbSk6IFJlbW92ZS4KKwlVc2UgYjRfaWRlbnRpZmljYXRpb24uCisJUHJvcGFnYXRlIGI0X3B1cmVfYXJncyB3aGVyZSBuZWVkZWQgdG8gcGFzcyB0aGVtIHRvIHl5ZXJyb3IuCisJKiBkYXRhL2dsci5tNCAoYjRfcGFyc2VfcGFyYW0pOiBSZW1vdmUuCisJKGI0X3VzZXJfZm9ybWFscywgYjRfcHVyZV9hcmdzLCBiNF9wdXJlX2Zvcm1hbHMsIGI0X2xwdXJlX2FyZ3MpCisJKGI0X2xwdXJlX2Zvcm1hbHMpOiBOZXcuCisJVXNlIGI0X2lkZW50aWZpY2F0aW9uLgorCShZWV9VU0VSX0ZPUk1BTFMsIFlZX1VTRVJfQVJHUyk6IFJlbW92ZSwgcmVwbGFjZWQgYnkKKwliNF91c2VyX2Zvcm1hbHMgYW5kIGI0X3VzZXJfYXJncy4KKwkoeXlleHBhbmRHTFJTdGFjaywgeXlGYWlsLCB5eWFkZERlZmVycmVkQWN0aW9uLCB5eWdsclNoaWZ0RGVmZXIpCisJKHl5cmVwb3J0QW1iaWd1aXR5KTogV2hlbiB1c2luZyBhIHB1cmUgcGFyc2VyLCBhbHNvIG5lZWQKKwl0aGUgbG9jYXRpb24sIGFuZCB0aGUgcGFyc2UtcGFyYW1zLgorCUFkanVzdCBjYWxsZXJzLgorCSh5eXVzZXJBY3Rpb24sIHl5Z2xyU2hpZnQsIHl5cmVwb3J0UGFyc2VFcnJvciwgeXlyZWNvdmVyUGFyc2VFcnJvcik6CisJV2hlbiB1c2luZyBhIHB1cmUgcGFyc2VyLCBhbHNvIG5lZWQgdGhlIHBhcnNlLXBhcmFtcy4KKwlBZGp1c3QgY2FsbGVycy4KKwkqIHRlc3RzL2NhbGMuYXQ6IFRlc3QgcHVyZSAoJXB1cmUtcGFyc2VyKSBhbmQgYWJzb2x1dGVseSBwdXJlCisJKCVwdXJlLXBhcnNlciArICVwYXJzZS1wYXJhbSkgTEFMUiBhbmQgR0xSIHBhcnNlcnMuCisJKEFUX0NIRUNLX1BVU0hERUZTLCBBVF9DSEVDS19QT1BERUZTKTogTmV3LCBkZWZpbmUgQVRfUEFSQU1fSUYsCisJQVRfTE9DQVRJT05fSUYsIEFUX1BVUkVfSUYsIEFUX0dMUl9JRiwgQUFUX1BVUkVfQU5EX0xPQ19JRiwKKwlBVF9HTFJfT1JfUEFSQU1fSUYsIEFUX1lZRVJST1JfQVJHX0xPQ19JRiwgQVRfWVlFUlJPUl9TRUVTX0xPQ19JRi4KKwkoX0FUX0RBVEFfQ0FMQ19ZKTogRXF1aXAgZm9yIHB1cml0eSBvZiB5eWVycm9yLgorCShfQVRfQ0hFQ0tfQ0FMQ19FUlJPUik6IFVzZSBBVF9ZWUVSUk9SX1NFRVNfTE9DX0lGLgorCSogdGVzdHMvY3h4LXR5cGUuYXQgKF9BVF9URVNUX0dMUl9DQUxDKTogRXF1aXAgZm9yIHl5ZXJyb3IgcHVyaXR5LgorCSogZG9jL2Jpc29uLnRleGluZm86IFVudGFiaWZ5IHRoZSB3aG9sZSBmaWxlLgorCShQYXJzZXIgRnVuY3Rpb24pOiBEb2N1bWVudCAlcGFyc2UtcGFyYW0sIGRlcHJlY2F0ZSBZWVBBUlNFX1BBUkFNLgorCShQdXJlIENhbGxpbmcpOiBEb2N1bWVudCAlbGV4LXBhcmFtLCBkZXByZWNhdGUgWVlMRVhfUEFSQU0uCisJKEVycm9yIFJlcG9ydGluZyk6IEFkanVzdCB0byB0aGVzZSBuZXcgZGlyZWN0aXZlcy4KKwlEb2N1bWVudCAlZXJyb3ItdmVyYm9zZSwgZGVwcmVjYXRlIFlZRVJST1JfVkVSQk9TRS4KKworMjAwMi0xMS0wMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHRlc3RzL2NhbGMuYXQ6IENoYW5nZSBhbGwgdGhlIEFUX0NIRUNLX0NBTENfTEFMUiBhbmQKKwlBVF9DSEVDS19DQUxDX0dMUiBpbnZvY2F0aW9ucyB0byB1c2UgJSBkaXJlY3RpdmVzLCBpbnN0ZWFkIG9mCisJY29tbWFuZCBsaW5lIG9wdGlvbnMuCisJKiB0ZXN0cy9jeHgtdHlwZS5hdDogRm9ybWF0dGluZyBjaGFuZ2VzLgorCisyMDAyLTExLTAzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogc3JjL3NjYW4tZ3JhbS5sOiBSZXZhbXAgdG8gZml4IFBPU0lYIGluY29tcGF0aWJpbGl0aWVzLAorCXRvIGNvdW50IGNvbHVtbnMgY29ycmVjdGx5LCBhbmQgdG8gY2hlY2sgZm9yIGludmFsaWQgaW5wdXRzLgorCisJVXNlIG1ic253aWR0aCB0byBjb3VudCBjb2x1bW5zIGNvcnJlY3RseS4gIEFjY291bnQgZm9yIHRhYnMsIHRvby4KKwlJbmNsdWRlIG1ic3dpZHRoLmguCisJKFlZX1VTRVJfQUNUSU9OKTogSW52b2tlIGV4dGVuZF9sb2NhdGlvbiByYXRoZXIgdGhhbiBMT0NBVElPTl9DT0xVTU5TLgorCShleHRlbmRfbG9jYXRpb24pOiBOZXcgZnVuY3Rpb24uCisJKFlZX0xJTkVTKTogUmVtb3ZlLgorCisJSGFuZGxlIENSTEYgaW4gQyBjb2RlIHJhdGhlciB0aGFuIGluIExleCBjb2RlLgorCShZWV9JTlBVVCk6IE5ldyBtYWNyby4KKwkobm9fY3JfcmVhZCk6IE5ldyBmdW5jdGlvbi4KKworCVNjYW4gVUNOcywgZXZlbiB0aG91Z2ggd2UgZG9uJ3QgZnVsbHkgaGFuZGxlIHRoZW0geWV0LgorCShjb252ZXJ0X3Vjbl90b19ieXRlKTogTmV3IGZ1bmN0aW9uLgorCisJSGFuZGxlIGJhY2tzbGFzaC1uZXdsaW5lIGNvcnJlY3RseSBpbiBDIGNvZGUuCisJKFNDX0xJTkVfQ09NTUVOVCwgU0NfWUFDQ19DT01NRU5UKTogTmV3IHN0YXRlcy4KKwkoZW9scywgYmxhbmtzKTogUmVtb3ZlLiAgWVlfVVNFUl9BQ1RJT04gbm93IGNvdW50cyBuZXdsaW5lcyBldGMuOworCWFsbCB1c2VzIGNoYW5nZWQuCisJKHRhZywgc3BsaWNlKTogTmV3IEVSRXMuICBEbyBub3QgYWxsb3cgTlVMIG9yIG5ld2xpbmUgaW4gdGFncy4KKwlVc2Uge3NwbGljZX0gd2hlcmV2ZXIgQyBhbGxvd3MgYmFja3NsYXNoLW5ld2xpbmUuCisJWVlfU1RFUCBhZnRlciBzcGFjZSwgbmV3bGluZSwgdmVydGljYWwtdGFiLgorCSgiLyoiKTogQkVHSU4gU0NfWUFDQ19DT01NRU5ULCBub3QgeXlfcHVzaF9zdGF0ZSAoU0NfQ09NTUVOVCkuCisKKwkobGV0dGVyLCBpZCk6IERvbid0IGFzc3VtZSBBU0NJSTsgZS5nLiwgc3BlbGwgb3V0IGEtei4KKworCSh7aW50fSwgaGFuZGxlX2FjdGlvbl9kb2xsYXIsIGhhbmRsZV9hY3Rpb25fYXQpOiBDaGVjayBmb3IgaW50ZWdlcgorCW92ZXJmbG93LgorCisJKFlZX1NURVApOiBPbWl0IHRyYWlsaW5nIHNlbWljb2xvbiwgc28gdGhhdCBpdCdzIG1vcmUgbGlrZSBDLgorCisJKDxTQ19FU0NBUEVEX1NUUklORyxTQ19FU0NBUEVEX0NIQVJBQ1RFUj4pOiBBbGxvdyBcMCBhbmQgXDAwCisJYXMgd2VsbCBhcyBcMDAwLiAgQ2hlY2sgZm9yIFVDSEFSX01BWCwgbm90IDI1NS4KKwlBbGxvdyBceCB3aXRoIGFuIGFyYml0cmFyeSBwb3NpdGl2ZSBudW1iZXIgb2YgZGlnaXRzLCBhcyBpbiBDLgorCUNoZWNrIGZvciBvdmVyZmxvdyBoZXJlLgorCUFsbG93IFw/IGFuZCBVQ05zLCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIEMuCisKKwkoaGFuZGxlX3N5bWJvbF9jb2RlX2RvbGxhcik6IFVzZSBxdW90ZV9uIHNsb3QgMSB0byBhdm9pZCBjb2xsaXNpb24KKwl3aXRoIHF1b3RlIHNsb3QgdXNlZCBieSBjb21wbGFpbl9hdC4KKworCSogdGVzdHMvaW5wdXQuYXQ6IEFkZCB0ZXN0cyBmb3IgYmFja3NsYXNoLW5ld2xpbmUsIG00IHF1b3RlcworCWluIHN5bWJvbHMsIGxvbmcgbGl0ZXJhbHMsIGFuZCBmdW5ueSBlc2NhcGVzIGluIHN0cmluZ3MuCisKKwkqIGNvbmZpZ3VyZS5hYyAoam1fUFJFUkVRX01CU1dJRFRIKTogQWRkLgorCSogbGliL01ha2VmaWxlLmFtIChsaWJiaXNvbl9hX1NPVVJDRVMpOiBBZGQgbWJzd2lkdGguaCwgbWJzd2lkdGguYy4KKwkqIGxpYi9tYnN3aWR0aC5oLCBsaWIvbWJzd2lkdGguYzogTmV3IGZpbGVzLCBmcm9tIEdOVSBnZXR0ZXh0LgorCSogbTQvTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgbWJzd2lkdGgubTQuCisJKiBtNC9tYnN3aWR0aC5tNDogTmV3IGZpbGUsIGZyb20gR05VIGNvcmV1dGlscy4KKworCSogZG9jL2Jpc29uLnRleGluZm8gKEdyYW1tYXIgT3V0bGluZSk6IERvY3VtZW50IC8vIGNvbW1lbnRzLgorCShTeW1ib2xzKTogRG9jdW1lbnQgdGhhdCB0cmlncmFwaHMgaGF2ZSBubyBzcGVjaWFsIG1lYW5pbmcgaW4gQmlzb24sCisJbm9yIGlzIGJhY2tzbGFzaC1uZXdsaW5lIGFsbG93ZWQuCisJKEFjdGlvbnMpOiBEb2N1bWVudCB0aGF0IHRyaWdyYXBocyBoYXZlIG5vIHNwZWNpYWwgbWVhbmluZy4KKworCSogc3JjL2xvY2F0aW9uLmggKExPQ0FUSU9OX0NPTFVNTlMsIExPQ0FUSU9OX0xJTkVTKTogUmVtb3ZlOworCW5vIGxvbmdlciB1c2VkLgorCisyMDAyLTExLTAyICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogc3JjL3JlYWRlci5jOiBEb24ndCBpbmNsdWRlIHF1b3RlLmg7IG5vdCBuZWVkZWQuCisJKGdldF9tZXJnZV9mdW5jdGlvbik6IFJld29yZCB3YXJuaW5nIHRvIGJlIGNvbnNpc3RlbnQgd2l0aAorCXR5cGUgY2xhc2ggZGlhZ25vc3RpYyBpbiBncmFtbWFyX2N1cnJlbnRfcnVsZV9jaGVjay4KKworCSogbGliL3F1b3RlYXJnLmMgKHF1b3RlYXJnX2J1ZmZlcl9yZXN0eWxlZCk6IEZpeCBvZmYtYnktdHdvCisJYnVnIGluIHRyaWdyYXBoIGhhbmRsaW5nLgorCisJKiBzcmMvb3V0cHV0LmMgKHByZXBhcmVfc3ltYm9scyk6IFdoZW4gcHJpbnRpbmcgdG9rZW4gbmFtZXMsCisJZXNjYXBlICJbIiBhcyAiQDw6QCIgYW5kIGxpa2V3aXNlIGZvciAiXSIuCisKKwkqIHNyYy9zeXN0ZW0uaCAoZXJybm8pOiBSZW1vdmUgZGVjbGFyYXRpb24sIGFzIHdlIGFyZSBub3cKKwlhc3N1bWluZyBDODkgb3IgYmV0dGVyLCBhbmQgQzg5IGd1YXJhbnRlZXMgZXJybm8uCisKKzIwMDItMTAtMzAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBsaWIvYml0c2V0X3N0YXRzLmMgKGJpdHNldF9zdGF0c19yZWFkLCBiaXRzZXRfc3RhdHNfd3JpdGUpOgorCUNoZWNrIGZvciBjbG9zZSBmYWlsdXJlcy4KKwkqIHNyYy9maWxlcy5oICh4ZmNsb3NlKTogUmV0dXJuIHZvaWQsIG5vdCBpbnQsIHNpbmNlIGl0IGFsd2F5cworCXJldHVybmVkIHplcm8uCisJKiBzcmMvZmlsZXMuYyAoeGZjbG9zZSk6IExpa2V3aXNlLiAgUmVwb3J0IEkvTyBlcnJvciBpZiBmZXJyb3IKKwlpbmRpY2F0ZXMgb25lLgorCSogc3JjL291dHB1dC5jIChvdXRwdXRfc2tlbGV0b24pOiBVc2UgeGZjbG9zZSByYXRoZXIgdGhhbiBmY2xvc2UKKwlhbmQgZmVycm9yLiAgeGZjbG9zZSBub3cgY2hlY2tzIGZlcnJvci4KKworCSogZGF0YS9nbHIuYyAoWVlMRUZUTU9TVF9TVEFURSk6IFJlbW92ZS4KKwkoeXlyZXBvcnRUcmVlKTogVXNlIGEgc3RhY2stYmFzZWQgbGVmdG1vc3Qgc3RhdGUuICBUaGlzIGF2b2lkcworCW91ciBjb250aW51aW5nIGJhdHRsZXMgd2l0aCBib2d1cyB3YXJuaW5ncyBhYm91dCBpbml0aWFsaXplcnMuCisKKzIwMDItMTAtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvc3lzdGVtLmg6IERvbid0IHVzZSAjaWZkZWYvI2lmbmRlZiBvbiBIQVZFXyB2YWx1ZXMsIG9ubHkKKwkjaWYuCisKKzIwMDItMTAtMjkgIFBhdWwgSGlsZmluZ2VyICA8SGlsZmluZ2VyQENTLkJlcmtlbGV5LkVEVT4KKworCSogdGVzdHMvZ2xyLXJlZ3IxLmF0OiBOZXcgdGVzdCBmb3IgcmVwb3J0ZWQgcmVncmVzc2lvbnMuCisJKiB0ZXN0cy90ZXN0c3VpdGUuYXQ6IEFkZCBnbHItcmVncjEuYXQgdGVzdC4KKwkqIHRlc3RzL01ha2VmaWxlLmFtOiBBZGQgZ2xyLXJlZ3IxLmF0IHRlc3QuCisKKzIwMDItMTAtMjQgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJVmVyc2lvbiAxLjc1YS4KKworCSogdGVzdHMvY2FsYy5hdCAoX0FUX0RBVEFfQ0FMQ19ZKTogUmVtb3ZlIHVudXNlZCBzdHJjYXQgZGVjbGFyYXRpb24uCisJKiB0ZXN0cy9jeHgtdHlwZS5hdCAoX0FUX1RFU1RfR0xSX0NBTEMpOiBJbmNsdWRlIHN0ZGxpYi5oLCBzaW5jZQorCXdlIHVzZSBtYWxsb2MuICBEb24ndCBhc3N1bWUgJ0EnIHRocm91Z2ggJ1onIGFyZSBjb250aWd1b3VzLgorCURvbid0IGFzc3VtZSBzdHJkdXAgZXhpc3RzOyBQT1NJWCBzYXlzIGl0cyBhbiBYU0kgZXh0ZW5zaW9uLgorCUNoZWNrIGZvciBidWZmZXIgb3ZlcmZsb3cgb24gaW5wdXQuCisKKzIwMDItMTAtMjQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9za2VsZXRvbik6IERvbid0IGRpc2FibGUgTTRzdWdhciBjb21tZW50cworCXRvbyBzb29uOiBpdCByZXN1bHRzIGluIGNvbW1lbnRzIGJlaW5nIGV4cGFuZGVkLgorCSogZGF0YS95YWNjLmMsIGRhdGEvZ2xyLmMsIGRhdGEvbGFscjEuY2M6IERvIGl0IHJpZ2h0IGJlZm9yZSB0aGUKKwlmaXJzdCBvdXRwdXQuCisKKzIwMDItMTAtMjQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL3lhY2MuYyAobTRfaW50X3R5cGUpOiBOZXcuCisJKiBkYXRhL2MubTQgKG00X2ludF90eXBlKTogRG9uJ3QgdXNlIHl5c2lnbmVkX2NoYXIsIGJ1dCBgc2lnbmVkCisJY2hhcicgYXMgb25seSB5YWNjLmMgd2FudHMgSyZSIHBvcnRhYmlsaXR5LgorCSogZGF0YS9nbHIuYyAoeXlzaWduZWRfY2hhcik6IFJlbW92ZS4KKwkqIGRhdGEvbGFscjEuY2M6IFJlbmFtZSB0aGUgdHJhaWxpbmcgYjRfbmFtZSBhcyBiNF9wYXJzZXJfY2xhc3NfbmFtZS4KKwlSZXBvcnRlZCBieSBRdW9jIFBleXJvdC4KKworMjAwMi0xMC0yMyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIHNyYy9tYWluLmMgKG1haW4pOiBXaXRoIC0tdHJhY2U9dGltZSwgcmVwb3J0IHRpbWVzIGV2ZW4gaWYgYQorCW5vbi1mYXRhbCBlcnJvciBvY2N1cnMuICBGb3JtZXJseSwgdGhlIHRpbWVzIHdlcmUgcmVwb3J0ZWQgaW4gc29tZQorCXN1Y2ggY2FzZXMgYnV0IG5vdCBpbiBvdGhlcnMuCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRlcik6IEp1c3QgcmV0dXJuIGlmIGEgY29tcGxhaW50IGhhcyBiZWVuIGlzc3VlZCwKKwlpbnN0ZWFkIG9mIGV4aXRpbmcsIHNvIHRoYXQgJ21haW4nIGNhbiByZXBvcnQgdGltZXMuCisKKzIwMDItMTAtMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvc3lzdGVtLmg6IEluY2x1ZGUgc3lzL3R5cGVzLgorCVJlcG9ydGVkIGJ5IEJlcnQgRGVrbnV5ZHQuCisKKzIwMDItMTAtMjMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBjb25maWd1cmUuYWMgKEFDX1BST0dfTEVYKTogVXNlIGluc3RlYWQgb2YgQU1fUFJPR19MRVguCisJU3VnZ2VzdGVkIGJ5IEFydCBIYWFzLgorCisyMDAyLTEwLTIyICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogc3JjL2NvbXBsYWluLmMgKGV4aXQpIFshIChTVERDX0hFQURFUlMgfHwgX0xJQkMpXTogUmVtb3ZlIGV4aXQKKwlkZWNsOyBub3QgbmVlZGVkIGFueSBtb3JlLgorCSogc3JjL21haW4uYyAobWFpbik6IFVzZSByZXR1cm4gdG8gZXhpdCwgdW5kb2luZyB5ZXN0ZXJkYXkncyBjaGFuZ2UuCisJVGhlIGxhc3QgT1MgdGhhdCB3ZSBjb3VsZCBmaW5kIHdoZXJlIHRoaXMgd291bGRuJ3Qgd29yayBpcworCVN1bk9TIDMuNSwgYW5kIHRoYXQncyB0b28gb2xkIHRvIHdvcnJ5IGFib3V0IG5vdy4KKworCSogZGF0YS9nbHIuYyAoc3RydWN0IHl5bHR5cGUpOiBEZWZpbmUgbWVtYmVycyBldmVuIHdoZW4gbm90CisJZG9pbmcgbG9jYXRpb25zLiAgVGhpcyBpcyBtb3JlIGNvbnNpc3RlbnQgd2l0aCB5YWNjLmMsIGFuZCBpdAorCXdvcmtzIGFyb3VuZCB0aGUgZm9sbG93aW5nIGJ1ZyByZXBvcnRzOgorCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwMi0xMC9tc2cwMDEwNi5odG1sCisJaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAyLTEwL21zZzAwMTExLmh0bWwKKworCSogZG9jL2Jpc29uLnRleGluZm86IE1pbm9yIHNwZWxsaW5nIGFuZCB0eXBvZ3JhcGhpY2FsIGZpeGVzLiAgVXNlCisJQGFjcm9ueW0gY29uc2lzdGVudGx5LiAgU3RhbmRhcmRpemUgb24gIllhY2MiIGluc3RlYWQgb2YgIllBQ0MiLAorCSJBbGdvbCIgaW5zdGVhZCBvZiAiQUxHT0wiLiAgR2l2ZSBhIGJpdCBtb3JlIGhpc3RvcnkgYWJvdXQgQk5GLgorCisyMDAyLTEwLTIyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9SRUFETUU6IE5ldy4KKworMjAwMi0xMC0yMSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwlCZSBjb25zaXN0ZW50IGFib3V0ICdib29sJzsgdGhlIG9sZCBjb2RlIHVzZWQgYW4gZW51bSBpbiBvbmUKKwltb2R1bGUgYW5kIGFuIGludCBpbiBhbm90aGVyLCBhbmQgdGhpcyB2aW9sYXRlcyB0aGUgQyBzdGFuZGFyZC4KKwkqIG00L3N0ZGJvb2wubTQ6IE5ldyBmaWxlLCBmcm9tIGNvcmV1dGlscyA0LjUuMy4KKwkqIGNvbmZpZ3VyZS5hYyAoQUNfSEVBREVSX1NUREJPT0wpOiBBZGQuCisJKiBtNC9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBzdGRib29sLm00LgorCSogc3JjL211c2NsZV90YWIuYyAoaGFzaF9jb21wYXJlX211c2NsZXMpOiAoYSA/IEZBTFNFIDogVFJVRSkgLT4gKCEgYSkKKwkqIHNyYy9zeW10YWIuYyAoaGFzaF9jb21wYXJlX3N5bWJvbF90KTogTGlrZXdpc2UuCisJKiBzcmMvc3lzdGVtLmggKGJvb2wsIGZhbHNlLCB0cnVlKTogVXNlIGEgZGVmaW5pdGlvbiBjb25zaXN0ZW50CisJd2l0aCAuLi9saWIvaGFzaC5jLiAgQWxsIHVzZXMgY2hhbmdlZC4KKworCSogc3JjL2NvbXBsYWluLmMgKHdhcm5pbmdfaXNzdWVkKTogUmVuYW1lZCBmcm9tIHdhcm5fbWVzc2FnZV9jb3VudCwKKwlzbyB0aGF0IHdlIG5lZWRuJ3Qgd29ycnkgYWJvdXQgaW50ZWdlciBvdmVyZmxvdyAoISkuCisJTm93IG9mIHR5cGUgYm9vbC4gIEFsbCB1c2VzIGNoYW5nZWQuCisJKGNvbXBsYWludF9pc3N1ZWQpOiBSZW5hbWVkIGZyb20gY29tcGxhaW5fbWVzc2FnZV9jb3VudDsgbGlrZXdpc2UuCisKKwkqIHNyYy9tYWluLmMgKG1haW4pOiBVc2UgZXhpdCB0byBleGl0IHdpdGggZmFpbHVyZS4KKworCSogc3JjL2NvbXBsYWluLmMgKGZhdGFsX2F0LCBmYXRhbCk6IFVzZSBFWElUX0ZBSUxVUkUgYW5kIEVYSVRfU1VDQ0VTUworCXJhdGhlciB0aGFuIDEgYW5kIDAuCisJKiBzcmMvbWFpbi5jIChtYWluKTogTGlrZXdpc2UuCisJKiBzcmMvZ2V0YXJncy5jIChnZXRhcmdzKTogTGlrZXdpc2UuCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRlcik6IExpa2V3aXNlLgorCisJKiBzcmMvZ2V0YXJnLmMgKGdldGFyZ3MpOiBSZW1vdmUgZHVwbGljYXRlIGNvZGUgZm9yCisJIlRyeSBgYmlzb24gLS1oZWxwJyIuCisKKwkqIHNyYy9maWxlcy5jICh4Zm9wZW4sIHhmY2xvc2UpOiBVc2UgRVhJVF9GQUlMVVJFIHJhdGhlciB0aGFuIDIuCisJV2hhdCB3YXMgdGhhdCAiMiIgZm9yPworCisJKiBzcmMvY29tcGxhaW4uaCAoZmF0YWwsIGZhdGFsX2F0KTogQWRkIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpLgorCSogc3JjL2dldGFyZ3MuYyAodXNhZ2UpOiBMaWtld2lzZS4KKworCSogc3JjL2dldGFyZ3MuYyAoZ2V0YXJncyk6IFdoZW4gdGhlcmUgYXJlIHRvbyBmZXcgb3BlcmFuZHMsIHJlcG9ydAorCXRoZSBsYXN0IG9uZS4gIFdoZW4gdGhlcmUgYXJlIHRvbyBtYW55LCByZXBvcnQgdGhlIGZpcnN0IGV4dHJhCisJb25lLiAgVGhpcyBpcyBob3cgZGlmZnV0aWxzIGRvZXMgaXQuCisKKzIwMDItMTAtMjAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJUmVtb3ZlIEsmUiB2ZXN0aWdlcy4KKwkqIGNvbmZpZ3VyZS5hYyAoQUNfQ19DT05TVCwgQU1fQ19QUk9UT1RZUEVTKTogUmVtb3ZlLgorCSogc3JjL2NvbXBsYWluLmMgKFZBX1NUQVJUKTogUmVtb3ZlLiAgQXNzdW1lIHByb3RvdHlwZXMuCisJKHZmcHJpbnRmKSBbISAoSEFWRV9WUFJJTlRGIHx8IGRlZmluZWQgdmZwcmludGYpXTogTmV3IG1hY3JvLgorCShwcml2YXRlX3N0cmVycm9yLCB3YXJuX2F0LCB3YXJuLCBjb21wbGFpbl9hdCwgY29tcGxhaW4sIGZhdGFsX2F0LAorCWZhdGFsKTogQXNzdW1lIHByb3RvdHlwZXMuCisJKiBzcmMvY29tcGxhaW4uaDogQXNzdW1lIHByb3RvdHlwZXMuCisJKiBzcmMvc3lzdGVtLmggKFBBUkFNUyk6IFJlbW92ZS4KKwlJbmNsdWRlIDxsaW1pdHMuaD4gdW5jb25kaXRpb25hbGx5LCBzaW5jZSBpdCdzIGd1YXJhbnRlZWVkIGV2ZW4KKwlmb3IgYSBmcmVlc3RhbmRpbmcgQzg5IGNvbXBpbGVyLgorCShTSFJUX01JTiwgU0hSVF9NQVgpOiBSZW1vdmUsIHNpbmNlIEM4OSBndWFyYW50ZWVzIHRoZW0uCisJKiBzcmMvdm1zZ2V0YXJncy5jIChnZXRhcmdzLCBjbGlfcHJlc2VudCwgY2xpX2dldF92YWx1ZSk6IFByb3RvdHlwZS4KKworMjAwMi0xMC0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9tdXNjbGVfdGFiLmMgKG11c2NsZV9ncm93KTogUmVtb3ZlIHRyYWlsaW5nIGRlYnVnZ2luZyBjb2RlLgorCSogZGF0YS9nbHIuYyAoWVlfVVNFUl9GT1JNQUxTLCBZWV9VU0VSX0FSR1MpOiBOZXcuCisJKHl5dXNlckFjdGlvbiwgeXlkb0FjdGlvbiwgeXlnbHJSZWR1Y2UsIHl5cmVzb2x2ZVZhbHVlKQorCSh5eXJlc29sdmVTdGF0ZXMsIHl5cmVzb2x2ZUFjdGlvbiwgeXlyZXNvbHZlU3RhY2spCisJKHl5cHJvY2Vzc09uZVN0YWNrKTogVXNlIHRoZW0uCisJKHl5X3JlZHVjZV9wcmludCk6IE5ldy4KKwkqIHRlc3RzL2NhbGMuYXQgKF9BVF9EQVRBX0NBTENfWSk6IEV4ZXJjaXNlICVwYXJzZS1wYXJhbS4KKworMjAwMi0xMC0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEvYy5tNCAoYjRfY19hbnNpX2FyZ3MpOiBSZWNvZ25pemUgZnVuY3Rpb25zIHdpdGggbm8KKwlhcmd1bWVudHMgYW5kIG91dHB1dCBgdm9pZCcuCisJKGI0X2NfZnVuY3Rpb24pOiBSZW5hbWUgYXMuLi4KKwkoYjRfY19mdW5jdGlvbl9kZWYpOiB0aGlzLgorCShiNF9jX2Z1bmN0aW9uX2RlY2wsIGI0X2NfYW5zaV9mdW5jdGlvbl9kZWYpCisJKGI0X2NfYW5zaV9mdW5jdGlvbl9kZWNsKTogTmV3LgorCUNoYW5nZSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGFyZ3VtZW50czogYmVmb3JlIGBpbnQsIGZvbycsIG5vdworCWBpbnQgZm9vLCBmb28nLgorCSogZGF0YS95YWNjLmMgKHl5cGFyc2UpOiBQcm90b3R5cGUgYW5kIGRlZmluZSB0aGFua3MgdG8gdGhlc2UuCisJQWRqdXN0IGI0X2NfZnVuY3Rpb25fZGVmIHVzZXMuCisJKiBkYXRhL2dsci5jICh5eXBhcnNlKTogTGlrZXdpc2UsIGJ1dCBBTlNJIG9ubHkuCisKKzIwMDItMTAtMjAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvb3V0cHV0LmMgKHByZXBhcmUpOiBNb3ZlIHRoZSBkZWZpbml0aW9uIG9mIGB0b2tlbnNfbnVtYmVyJywKKwlgbnRlcm1zX251bWJlcicsIGB1bmRlZl90b2tlbl9udW1iZXInLCBgdXNlcl90b2tlbl9udW1iZXJfbWF4JworCXRvLi4uCisJKHByZXBhcmVfdG9rZW5zKTogSGVyZS4KKwkocHJlcGFyZV90b2tlbnMpOiBSZW5hbWUgYXMuLi4KKwkocHJlcGFyZV9zeW1ib2xzKTogdGhpcy4KKwkocHJlcGFyZSk6IE1vdmUgdGhlIGRlZmluaXRpb24gb2YgYHJ1bGVzX251bWJlcicgdG8uLi4KKwkocHJlcGFyZV9ydWxlcyk6IGhlcmUuCisJKHByZXBhcmUpOiBNb3ZlIHRoZSBkZWZpbml0aW9uIG9mIGBsYXN0JywgYGZpbmFsX3N0YXRlX251bWJlcicsCisJYHN0YXRlc19udW1iZXInIHRvLi4uCisJKHByZXBhcmVfc3RhdGVzKTogaGVyZS4KKwkqIGRhdGEveWFjYy5jLCBkYXRhL2xhbHIxLmNjLCBkYXRhL2dsci5jOiBOb3JtYWxpemUgYD4nIGludG8gYDwnLgorCisyMDAyLTEwLTIwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3RhYmxlcy5oLCBzcmMvdGFibGVzLmMsIHNyYy9vdXRwdXQuYzogQ29tbWVudCBjaGFuZ2VzLgorCisyMDAyLTEwLTIwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS95YWNjLmMsIGRhdGEveWFjYy5jIChiNF9sb2NhdGlvbl9pZiwgYjRfcHVyZV9pZik6IE1vdmUgdG8uLi4KKwkqIGRhdGEvYy5tNDogaGVyZS4KKworMjAwMi0xMC0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9vdXRwdXQuYyAocHJlcGFyZSk6IFVzZSBNVVNDTEVfSU5TRVJUX1NUUklORy4KKwkqIHNyYy9tdXNjbGVfdGFiLmMgKG11c2NsZV9wYWlyX2xpc3RfZ3Jvdyk6IFJlbmFtZSBgdmFsIGFzCisJYHBhaXInLgorCShtdXNjbGVfaW5pdCk6IE1vdmUgdGhlIGBiNF9sdHlwZScsIGBiNF9tYXhkZXB0aCcsIGBiNF9pbml0ZGVwdGgnLAorCWBuYW1lJyB0by4uLgorCSogZGF0YS9nbHIuYywgZGF0YS9sYWxyMS5jYywgZGF0YS95YWNjLmMgKGI0X2xvY2F0aW9uX3R5cGUpCisJKGI0X3N0YWNrX2RlcHRoX2luaXQsIGI0X3N0YWNrX2RlcHRoX21heCwgYjRfcGFyc2VyX2NsYXNzX25hbWUpOgorCVRoZXNlLgorCisyMDAyLTEwLTE5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCURvIG5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZSwgYXMgdGhhdCBpbnZvbHZlcyBzZWN1cml0eSBhbmQKKwljbGVhbnVwIGhlYWRhY2hlcy4gIEluc3RlYWQsIHVzZSBhIHBhaXIgb2YgcGlwZXMuCisJRGVyaXZlZCBmcm9tIGEgc3VnZ2VzdGlvbiBieSBGbG9yaWFuIEtyb2htLgorCSogbGliL3N1YnBpcGUuYywgbGliL3N1YnBpcGUuaCwgbTQvc3VicGlwZS5tNDogTmV3IGZpbGVzLgorCSogbGliL21rc3RlbXAuYywgbGliL3JlYWRwaXBlLmMsIGxpYi90ZW1wbmFtZS5jLCBtNC9ta3N0ZW1wLm00OiBSZW1vdmUuCisJKiBjb25maWd1cmUuYWMgKFVUSUxTX0ZVTkNfTUtTVEVNUCwgam1fUFJFUkVRX1RFTVBOQU1FKTogUmVtb3ZlLgorCShCSVNPTl9QUkVSRVFfU1VCUElQRSk6IEFkZC4KKwkqIGxpYi9NYWtlZmlsZS5hbSAobGliYmlzb25fYV9TT1VSQ0VTKTogUmVtb3ZlIHJlYWRwaXBlLmMuCisJQWRkIHN1YnBpcGUuaCwgc3VicGlwZS5jLgorCSogbTQvTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBSZW1vdmUgbWtzdGVtcC5tNC4gIEFkZCBzdWJwaXBlLm00LgorCSogcG8vUE9URklMRVMuaW46IEFkZCBsaWIvc3VicGlwZS5jLgorCSogc3JjL291dHB1dC5jOiBJbmNsdWRlICJzdWJwaXBlLmgiLgorCShtNF9pbnZva2UpOiBSZW1vdmUgZGVjbC4KKwkoc2Nhbl9za2VsKTogTmV3IGRlY2wuCisJKG91dHB1dF9za2VsZXRvbik6IFVzZSBwaXBlIHJhdGhlciB0aGFuIHRlbXBvcmFyeSBmaWxlIGZvciBtNCBpbnB1dC4KKwlDaGVjayB0aGF0IG00c3VnYXIubTQgaXMgcmVhZGFibGUsIHRvIGF2b2lkIGRlYWRsb2NrLgorCUNoZWNrIGZvciBwaXBlIEkvTyBlcnJvci4KKwkqIHNyYy9zY2FuLXNrZWwubCAocmVhZHBpcGUpOiBSZW1vdmUgZGVjbC4KKwkoc2Nhbl9za2VsKTogTmV3IGZ1bmN0aW9uLCB0byBiZSB1c2VkIGluIHBsYWNlIG9mIG00X2ludm9rZS4KKwlSZWFkIGZyb20gc3RyZWFtIHJhdGhlciB0aGFuIGZpbGUuCisKKwkqIGxpYi90aW1ldmFyLmMgKFRJQ0tTX1RPX01TRUMsIENMT0NLU19UT19NU0VDKTogRG8gbm90IGNhc3QgdG8KKwlmbG9hdCwgYXMgdGhpcyBnZW5lcmF0ZXMgYSB3YXJuaW5nIG9uIFNvbGFyaXMgOCArIEdDQyAzLjIgd2l0aAorCS0tZW5hYmxlLWdjYy13YXJuaW5ncy4gIEluc3RlYWQsIGRpdmlkZSBpbnRvIDEuMCByYXRoZXIgdGhhbiAxOworCXRoaXMgZ2VuZXJhdGVzIGEgbW9yZS1hY2N1cmF0ZSB2YWx1ZSBhbnl3YXkuCisKKwkqIGxpYi90aW1ldmFyLmMgKHRpbWVydmFyX2FjY3VtdWxhdGUpOiBSZW5hbWUgbG9jYWxzIHRvCisJYXZvaWQgY29uZnVzaW9uIHdpdGggc2ltaWxhcmx5LW5hbWVkIG1vcmUtZ2xvYmFsLgorCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlX3BhaXJfbGlzdF9ncm93KTogTGlrZXdpc2UuCisKKwkqIHNyYy9vdXRwdXQuYyAocHJlcGFyZSk6IFVzZSB4c3RyZHVwIHRvIGNvbnZlcnQgY2hhciBjb25zdCAqCisJdG8gY2hhciAqLCB0byBhdm9pZCBHQ0Mgd2FybmluZy4KKworMjAwMi0xMC0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHRlc3RzL2NhbGMuYXQgKF9BVF9EQVRBX0NBTENfWSk6IERlZmluZSBWQUwsIExPQywgTEVYX0ZPUk1BTFMsCisJTEVYX1BSRV9GT1JNQUxTLCBMRVhfQVJHUywgTEVYX1BSRV9BUkdTLCBVU0VfTEVYX0FSR1MuCisJVXNlIHRoZW0gdG8gaGF2ZSBgY2FsYy55JyByZWFkeSBmb3IgJXB1cmUtcGFyc2VyLgorCSogZGF0YS95YWNjLmMgKFlZTEVYKTogUGFzcyBhIHl5bGV4IHJldHVybiB0eXBlIHRvCisJYjRfY19mdW5jdGlvbl9jYWxsLgorCisyMDAyLTEwLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCVByb3RvdHlwZSBzdXBwb3J0IG9mICVsZXgtcGFyYW0gYW5kICVwYXJzZS1wYXJhbS4KKworCSogc3JjL3BhcnNlLWdyYW0ueTogQWRkIHRoZSBkZWZpbml0aW9uIG9mIHRoZSAlbGV4LXBhcmFtIGFuZAorCSVwYXJzZS1wYXJhbSB0b2tlbnMsIHBsdXMgdGhlaXIgcnVsZXMuCisJRHJvcCB0aGUgYF8nIHZlcnNpb24gb2YgJWdsci1wYXJzZXIuCisJQWRkIHRoZSAiLCIgdG9rZW4uCisJKiBzcmMvc2Nhbi1ncmFtLmwgKElOSVRJQUwpOiBTY2FuIHRoZW0uCisJKiBzcmMvbXVzY2xlX3RhYi5jOiBDb21tZW50IGNoYW5nZXMuCisJKG11c2NsZV9pbnNlcnQsIG11c2NsZV9maW5kKTogUmVuYW1lIGBwYWlyJyBhcyBgcHJvYmUnLgorCSogc3JjL211c2NsZV90YWIuaCAoTVVTQ0xFX0lOU0VSVF9QUkVGSVgpOiBSZW1vdmUgdW51c2VkLgorCShtdXNjbGVfZW50cnlfcyk6IFRoZSBgdmFsdWUnIG1lbWJlciBpcyBubyBsb25nZXIgY29uc3QuCisJQWRqdXN0IGFsbCBkZXBlbmRlbmNpZXMuCisJKiBzcmMvbXVzY2xlX3RhYi5jIChtdXNjbGVfaW5pdCk6IEFkanVzdDogdXNlCisJTVVTQ0xFX0lOU0VSVF9TVFJJTkcuCisJSW5pdGlhbGl6ZSB0aGUgb2JzdGFjayBlYXJsaWVyLgorCSogc3JjL211c2NsZV90YWIuaCwgc3JjL211c2NsZV90YWIuYyAobXVzY2xlX2dyb3cpCisJKG11c2NsZV9wYWlyX2xpc3RfZ3Jvdyk6IE5ldy4KKwkqIGRhdGEvYy5tNCAoYjRfY19mdW5jdGlvbl9jYWxsLCBiNF9jX2FyZ3MpOiBOZXcuCisJKiBkYXRhL3lhY2MuYyAoWVlMRVgpOiBVc2UgYjRfY19mdW5jdGlvbl9jYWxsIHRvIGhvbm9yICVsZXgtcGFyYW0uCisJKiB0ZXN0cy9jYWxjLmF0OiBVc2UgJWxvY2F0aW9ucywgbm90IC0tbG9jYXRpb25zLgorCShBVF9DSEVDS19DQUxDX0dMUik6IFVzZSAlZ2xyLXBhcnNlciwgbm90ICVnbHJfcGFyc2VyLgorCisyMDAyLTEwLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2dldGFyZ3MuYyAodXNhZ2UpOiBUYWtlIHN0YXR1cyBhcyBhcmd1bWVudCBhbmQgZXhpdAorCWFjY29yZGluZ2x5LgorCVJlcG9ydCB0aGUgdHJhZGl0aW9uYWwgYFRyeSAuLi4gLS1oZWxwJyBtZXNzYWdlIHdoZW4gc3RhdHVzICE9IDAuCisJKHVzYWdlLCB2ZXJzaW9uKTogRG9uJ3QgdGFrZSBhIEZJTEUgKiBhcyBhcmcsIGl0IGlzIHBvaW50bGVzcy4KKwkoZ2V0YXJncyk6IFdoZW4gdGhlcmUgaXMgYW4gaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMsIG1ha2UgaXQKKwlhbiBlcnJvciwgYW5kIHJlcG9ydCBpdCBHTlVsaWNhbGx5IHRoYW5rcyB0byBgdXNhZ2UgKCknLgorCisyMDAyLTEwLTE4ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogZGF0YS9nbHIuYyAoeXlyZXBvcnRQYXJzZUVycm9yKTogRG9uJ3QgYXNzdW1lIHRoYXQgc3ByaW50ZgorCXlpZWxkcyB0aGUgbGVuZ3RoIG9mIHRoZSBwcmludGVkIHN0cmluZywgYXMgdGhpcyBpcyBub3QgdHJ1ZQorCW9uIFN1bk9TIDQuMS40LiAgUmVwb3J0ZWQgYnkgUGV0ZXIgS2xlaW4uCisKKwkqIHRlc3RzL2NhbGMuYXQgKF9BVF9EQVRBX0NBTENfWSk6ICN1bmRlZiBtZW1jbXAgYW5kIHJlYWxsb2MuCisJKiB0ZXN0cy9jb25mbGljdHMuYXQgKCVub25hc3NvYyBhbmQgZW9mKTogTGlrZXdpc2UuCisJRml4ZXMgU3VuT1MgNC4xLjQgdGVzdCBmYWlsdXJlIHJlcG9ydGVkIGJ5IFBldGVyIEtsZWluLgorCisyMDAyLTEwLTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2dldGFyZ3MuaCAodHJhY2VfZSk6IEFkZCB0cmFjZV9zY2FuLCBhbmQgdHJhY2VfcGFyc2UuCisJKiBzcmMvZ2V0YXJncy5jICh0cmFjZV90eXBlcywgdHJhY2VfYXJncyk6IEFkanVzdC4KKwkqIHNyYy9yZWFkZXIuYyAoZ3JhbW1hcl9jdXJyZW50X3J1bGVfcHJlY19zZXQpCisJKGdyYW1tYXJfY3VycmVudF9ydWxlX2RwcmVjX3NldCwgZ3JhbW1hcl9jdXJyZW50X3J1bGVfbWVyZ2Vfc2V0KToKKwlTdGFuZGFyZGl6ZSBlcnJvciBtZXNzYWdlcy4KKwlBbmQgcy9AcHJlYy8lcHJlYy8hCisJKHJlYWRlcik6IFVzZSB0cmFjZV9mbGFnIHRvIGVuYWJsZSBzY2FubmVyL3BhcnNlciBkZWJ1Z2dpbmcsCisJaW5zdGVhZCBvZiBhbiBhZGhvYyBzY2hlbWUuCisJKiBzcmMvc2Nhbi1ncmFtLmw6IFJlbW92ZSB0cmFpbGluZyBkZWJ1Z2dpbmcgY29kZS4KKworMjAwMi0xMC0xNiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIHNyYy9tdXNjbGVfdGFiLmggKE1VU0NMRV9UQUJfSF8pOiBXYXMgbWlzc3BlbGxlZCBhcworCU1VU0NMRV9UQUJfSC4KKworCSogTkVXUzogT2ZmaWNpYWxseSBkcm9wIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIEJpc29uIHdpdGggSyZSIEMsCisJc2luY2UgaXQgZGlkbid0IHdvcmsgYW55d2F5IGFuZCBpdCdzIG5vdCB3b3J0aCB3b3JyeWluZyBhYm91dC4KKwkqIE1ha2VmaWxlLm1haW50ICh3Z2V0X2ZpbGVzKTogUmVtb3ZlIGFuc2kya25yLmMuCisJKGFuc2kya25yLmMtdXJsX3ByZWZpeCk6IFJlbW92ZS4KKwkqIGxpYi8uY3ZzaWdub3JlOiBSZW1vdmUgYW5zaTJrbnIsIGFuc2kya25yLiouCisJKiBsaWIvTWFrZWZpbGUuYW0gKEFVVE9NQUtFX09QVElPTlMpOiBSZW1vdmUuCisJKiBzcmMvTWFrZWZpbGUuYW0gKEFVVE9NQUtFX09QVElPTlMpOiBSZW1vdmUuCisKKzIwMDItMTAtMTUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJU3RvcCB1c2luZyB0aGUgImVudW1fIiB0cmljayBmb3IgSyZSLXN0eWxlIGZ1bmN0aW9uIGRlZmluaXRpb25zOworCWl0IGNvbmZ1c2VkIG1lLCBhbmQgSSB3YXMgdGhlIGF1dGhvciEgIEluc3RlYWQsIGFzc3VtZSB0aGF0IHBlb3BsZQorCXdobyB3YW50IHRvIHVzZSBLJlIgQyBjb21waWxlcnMgKHdoZW4gdXNpbmcgdGhlc2UgbW9kdWxlcyBpbiBHQ0MsCisJcGVyaGFwcz8pIHdpbGwgcnVuIGFuc2kya25yLgorCisJKiBsaWIvYmJpdHNldC5oOiAoZW51bV9iaXRzZXRfb3BzLCBlbnVtX2JpdHNldF90eXBlKTogUmVtb3ZlLgorCUFsbCB1c2VzIG9mICJlbnVtXyIgY2hhbmdlZCB0byAiZW51bSAiLgorCSogbGliL2ViaXRzZXQuYyAoZW51bV9lYml0c2V0X2ZpbmRfbW9kZSk6IExpa2V3aXNlLgorCSogbGliL2xiaXRzZXQuYyAoZW51bV9sYml0c2V0X2ZpbmRfbW9kZSk6IExpa2V3aXNlLgorCisJKiBsaWIvYWJpdHNldC5jIChhYml0c2V0X2FuZCwgYWJpdHNldF9hbmRfY21wLCBhYml0c2V0X2FuZF9vciwKKwlhYml0c2V0X2FuZF9vcl9jbXAsIGFiaXRzZXRfYW5kbiwgYWJpdHNldF9hbmRuX2NtcCwKKwlhYml0c2V0X2FuZG5fb3IsIGFiaXRzZXRfYW5kbl9vcl9jbXAsIGFiaXRzZXRfYnl0ZXMsIGFiaXRzZXRfY29weSwKKwlhYml0c2V0X2NvcHkxLCBhYml0c2V0X2Rpc2pvaW50X3AsIGFiaXRzZXRfZW1wdHlfcCwKKwlhYml0c2V0X2VxdWFsX3AsIGFiaXRzZXRfaW5pdCwgYWJpdHNldF9saXN0LCBhYml0c2V0X2xpc3RfcmV2ZXJzZSwKKwlhYml0c2V0X25vdCwgYWJpdHNldF9vbmVzLCBhYml0c2V0X29yLCBhYml0c2V0X29yX2FuZCwKKwlhYml0c2V0X29yX2FuZF9jbXAsIGFiaXRzZXRfb3JfY21wLCBhYml0c2V0X3Jlc2V0LCBhYml0c2V0X3NldCwKKwlhYml0c2V0X3NpemUsIGFiaXRzZXRfc21hbGxfbGlzdCwgYWJpdHNldF9zdWJzZXRfcCwgYWJpdHNldF90ZXN0LAorCWFiaXRzZXRfdW51c2VkX2NsZWFyLCBhYml0c2V0X3hvciwgYWJpdHNldF94b3JfY21wLCBhYml0c2V0X3plcm8pOgorCVVzZSBmdW5jdGlvbiBwcm90b3R5cGVzOyB0aGlzIHJlbW92ZXMgdGhlIG5lZWQgZm9yIGRlY2xhcmluZworCXN0YXRpYyBmdW5jdGlvbnMgc2ltcGx5IHRvIHByb3ZpZGUgdGhlaXIgcHJvdG90eXBlcy4KKwkqIGxpYi9iaXRzZXQuYyAoYml0c2V0X2FsbG9jLCBiaXRzZXRfYW5kX29yXywgYml0c2V0X2FuZF9vcl9jbXBfLAorCWJpdHNldF9hbmRuX29yXywgYml0c2V0X2FuZG5fb3JfY21wXywgYml0c2V0X2J5dGVzLCBiaXRzZXRfY29weV8sCisJYml0c2V0X2NvdW50XywgYml0c2V0X2NyZWF0ZSwgYml0c2V0X2R1bXAsIGJpdHNldF9maXJzdCwKKwliaXRzZXRfZnJlZSwgYml0c2V0X2luaXQsIGJpdHNldF9sYXN0LCBiaXRzZXRfbmV4dCwKKwliaXRzZXRfb2JzdGFja19hbGxvYywgYml0c2V0X29ic3RhY2tfZnJlZSwgYml0c2V0X29ubHlfc2V0X3AsCisJYml0c2V0X29wNF9jbXAsIGJpdHNldF9vcl9hbmRfLCBiaXRzZXRfb3JfYW5kX2NtcF8sIGJpdHNldF9wcmV2LAorCWJpdHNldF9wcmludCwgYml0c2V0X3JlbGVhc2VfbWVtb3J5LCBiaXRzZXRfdG9nZ2xlXywKKwliaXRzZXRfdHlwZV9jaG9vc2UsIGJpdHNldF90eXBlX2dldCwgYml0c2V0X3R5cGVfbmFtZV9nZXQsCisJZGVidWdfYml0c2V0KTogTGlrZXdpc2UuCisJKiBsaWIvYml0c2V0LmggKGJpdHNldF9zZXQsIGJpdHNldF9yZXNldCwgYml0c2V0X3Rlc3QpOiBMaWtld2lzZS4KKwkqIGxpYi9iaXRzZXRfc3RhdHMuYyAoYml0c2V0X2xvZ19oaXN0b2dyYW1fcHJpbnQsCisJYml0c2V0X3BlcmNlbnRfaGlzdG9ncmFtX3ByaW50LCBiaXRzZXRfc3RhdHNfYW5kLAorCWJpdHNldF9zdGF0c19hbmRfY21wLCBiaXRzZXRfc3RhdHNfYW5kX29yLAorCWJpdHNldF9zdGF0c19hbmRfb3JfY21wLCBiaXRzZXRfc3RhdHNfYW5kbiwgYml0c2V0X3N0YXRzX2FuZG5fY21wLAorCWJpdHNldF9zdGF0c19hbmRuX29yLCBiaXRzZXRfc3RhdHNfYW5kbl9vcl9jbXAsIGJpdHNldF9zdGF0c19jb3B5LAorCWJpdHNldF9zdGF0c19jb3VudCwgYml0c2V0X3N0YXRzX2Rpc2FibGUsIGJpdHNldF9zdGF0c19kaXNqb2ludF9wLAorCWJpdHNldF9zdGF0c19kdW1wLCBiaXRzZXRfc3RhdHNfZW1wdHlfcCwgYml0c2V0X3N0YXRzX2VuYWJsZSwKKwliaXRzZXRfc3RhdHNfZXF1YWxfcCwgYml0c2V0X3N0YXRzX2ZyZWUsIGJpdHNldF9zdGF0c19pbml0LAorCWJpdHNldF9zdGF0c19saXN0LCBiaXRzZXRfc3RhdHNfbGlzdF9yZXZlcnNlLCBiaXRzZXRfc3RhdHNfbm90LAorCWJpdHNldF9zdGF0c19vbmVzLCBiaXRzZXRfc3RhdHNfb3IsIGJpdHNldF9zdGF0c19vcl9hbmQsCisJYml0c2V0X3N0YXRzX29yX2FuZF9jbXAsIGJpdHNldF9zdGF0c19vcl9jbXAsIGJpdHNldF9zdGF0c19wcmludCwKKwliaXRzZXRfc3RhdHNfcHJpbnRfMSwgYml0c2V0X3N0YXRzX3JlYWQsIGJpdHNldF9zdGF0c19yZXNldCwKKwliaXRzZXRfc3RhdHNfc2V0LCBiaXRzZXRfc3RhdHNfc2l6ZSwgYml0c2V0X3N0YXRzX3N1YnNldF9wLAorCWJpdHNldF9zdGF0c190ZXN0LCBiaXRzZXRfc3RhdHNfdG9nZ2xlLCBiaXRzZXRfc3RhdHNfdHlwZV9nZXQsCisJYml0c2V0X3N0YXRzX3dyaXRlLCBiaXRzZXRfc3RhdHNfeG9yLCBiaXRzZXRfc3RhdHNfeG9yX2NtcCwKKwliaXRzZXRfc3RhdHNfemVybyk6IExpa2V3aXNlLgorCSogbGliL2JpdHNldHYuYyAoYml0c2V0dl9hbGxvYywgYml0c2V0dl9jcmVhdGUsIGJpdHNldHZfZnJlZSwKKwliaXRzZXR2X3plcm8sIGJpdHNldHZfb25lcywgYml0c2V0dl90cmFuc2l0aXZlX2Nsb3N1cmUsCisJYml0c2V0dl9kdW1wLCBkZWJ1Z19iaXRzZXR2KTogTGlrZXdpc2UuCisJKiBsaWIvZWJpdHNldC5jIChlYml0c2V0X2FuZCwgZWJpdHNldF9hbmRfY21wLCBlYml0c2V0X2FuZG4sCisJZWJpdHNldF9hbmRuX2NtcCwgZWJpdHNldF9ieXRlcywgZWJpdHNldF9jb3B5LCBlYml0c2V0X2NvcHlfLAorCWViaXRzZXRfY29weV9jbXAsIGViaXRzZXRfZGlzam9pbnRfcCwgZWJpdHNldF9lbHRfYWRkLAorCWViaXRzZXRfZWx0X2FsbG9jLCBlYml0c2V0X2VsdF9jYWxsb2MsIGViaXRzZXRfZWx0X2ZpbmQsCisJZWJpdHNldF9lbHRfZnJlZSwgZWJpdHNldF9lbHRfbGFzdCwgZWJpdHNldF9lbHRfcmVtb3ZlLAorCWViaXRzZXRfZWx0X3plcm9fcCwgZWJpdHNldF9lbHRzX2dyb3csIGViaXRzZXRfZW1wdHlfcCwKKwllYml0c2V0X2VxdWFsX3AsIGViaXRzZXRfZnJlZSwgZWJpdHNldF9pbml0LCBlYml0c2V0X2xpc3QsCisJZWJpdHNldF9saXN0X3JldmVyc2UsIGViaXRzZXRfbm90LCBlYml0c2V0X29uZXMsIGViaXRzZXRfb3AzX2NtcCwKKwllYml0c2V0X29yLCBlYml0c2V0X29yX2NtcCwgZWJpdHNldF9yZWxlYXNlX21lbW9yeSwgZWJpdHNldF9yZXNldCwKKwllYml0c2V0X3NldCwgZWJpdHNldF9zaXplLCBlYml0c2V0X3N1YnNldF9wLCBlYml0c2V0X3Rlc3QsCisJZWJpdHNldF93ZWVkLCBlYml0c2V0X3hvciwgZWJpdHNldF94b3JfY21wLCBlYml0c2V0X3plcm8pOgorCUxpa2V3aXNlLgorCSogbGliL2xiaXRzZXQuYyAoZGVidWdfbGJpdHNldCwgbGJpdHNldF9hbmQsIGxiaXRzZXRfYW5kX2NtcCwKKwlsYml0c2V0X2FuZG4sIGxiaXRzZXRfYW5kbl9jbXAsIGxiaXRzZXRfYnl0ZXMsIGxiaXRzZXRfY29weSwKKwlsYml0c2V0X2NvcHlfY21wLCBsYml0c2V0X2Rpc2pvaW50X3AsIGxiaXRzZXRfZWx0X2FsbG9jLAorCWxiaXRzZXRfZWx0X2NhbGxvYywgbGJpdHNldF9lbHRfZmluZCwgbGJpdHNldF9lbHRfZnJlZSwKKwlsYml0c2V0X2VsdF9saW5rLCBsYml0c2V0X2VsdF91bmxpbmssIGxiaXRzZXRfZWx0X3plcm9fcCwKKwlsYml0c2V0X2VtcHR5X3AsIGxiaXRzZXRfZXF1YWxfcCwgbGJpdHNldF9mcmVlLCBsYml0c2V0X2luaXQsCisJbGJpdHNldF9saXN0LCBsYml0c2V0X2xpc3RfcmV2ZXJzZSwgbGJpdHNldF9ub3QsIGxiaXRzZXRfb25lcywKKwlsYml0c2V0X29wM19jbXAsIGxiaXRzZXRfb3IsIGxiaXRzZXRfb3JfY21wLCBsYml0c2V0X3BydW5lLAorCWxiaXRzZXRfcmVsZWFzZV9tZW1vcnksIGxiaXRzZXRfcmVzZXQsIGxiaXRzZXRfc2V0LCBsYml0c2V0X3NpemUsCisJbGJpdHNldF9zdWJzZXRfcCwgbGJpdHNldF90ZXN0LCBsYml0c2V0X3dlZWQsIGxiaXRzZXRfeG9yLAorCWxiaXRzZXRfeG9yX2NtcCwgbGJpdHNldF96ZXJvKTogTGlrZXdpc2UuCisKKzIwMDItMTAtMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJVmVyc2lvbiAxLjc1LgorCisyMDAyLTEwLTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogdGVzdHMvTWFrZWZpbGUuYW0gKG1haW50YWluZXItY2hlY2stcG9zaXgpOiBOZXcuCisKKzIwMDItMTAtMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2dsci5jIFtZWURFQlVHXSAoWVlMRUZUTU9TVF9TVEFURSk6IEluaXRpYWxpemUgdGhlIHl5bG9jCisJbWVtYmVyLgorCisyMDAyLTEwLTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3RhYmxlcy5jICh0YWJsZV9uaW5mX3JlbWFwKTogYmFzZSAtPiB0YWIuCisJUmVwb3J0ZWQgYnkgTWF0dCBSb3NpbmcuCisKKzIwMDItMTAtMTQgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiB0ZXN0cy9hY3Rpb24uYXQsIHRlc3RzL2NhbGMuYXQsIHRlc3RzL2NvbmZsaWN0cy5hdCwKKwl0ZXN0cy9jeHgtdHlwZS5hdCwgdGVzdHMvaGVhZGVycy5hdCwgdGVzdHMvaW5wdXQuYXQsCisJdGVzdHMvcmVncmVzc2lvbi5hdCwgdGVzdHMvc3luY2xpbmVzLmF0LCB0ZXN0cy90b3J0dXJlLmF0OgorCVNheSAiYmlzb24gLW8gZm9vLmMgZm9vLnkiLCBub3QgImJpc29uIGZvby55IC1vIGZvby5jIiwKKwlzbyB0aGF0IHRoZSB0ZXN0cyBzdGlsbCB3b3JrIGV2ZW4gaWYgUE9TSVhMWV9DT1JSRUNUIGlzIHNldC4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChScGNhbGMgQ29tcGlsZSwgSW52b2NhdGlvbik6IExpa2V3aXNlLgorCisJKiBkYXRhL2MubTQgKGI0X2ludF90eXBlKTogVXNlIHl5c2lnbmVkX2NoYXIgaW5zdGVhZCBvZiBzaWduZWQgY2hhciwKKwlmb3IgcG9ydGFiaWxpdHkgdG8gSyZSIGhvc3RzLiAgRml4IHR5cG86IHNpZ25lZCBjaGFyIGlzIGd1YXJhbnRlZWQKKwlvbmx5IHRvIDEyNywgbm90IHRvIDEyOC4KKwkqIGRhdGEvZ2xyLmMgKHl5c2lnbmVkX2NoYXIpOiBOZXcgdHlwZS4KKwkqIGRhdGEveWFjYy5jICh5eXNpZ25lZF9jaGFyKTogTGlrZXdpc2UuCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChXZWIyYyBBY3Rpb25zKTogc2lnbmVkIGNoYXIgLT4geXlzaWduZWRfY2hhci4KKworMjAwMi0xMC0xMyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGRhdGEveWFjYy5jICh5eXBhcnNlKTogUmV3cml0ZSB0byBhdm9pZCAiY29tcGFyaXNvbiBpcyBhbHdheXMKKwl0cnVlIGR1ZSB0byBsaW1pdGVkIHJhbmdlIG9mIGRhdGEgdHlwZSIgd2FybmluZyBmcm9tIEdDQy4KKworCSogZGF0YS9jLm00IChiNF90b2tlbl9kZWZpbmVzKTogUHJvdGVjdCBhZ2FpbnN0IGRvdWJsZS1pbmNsdXNpb24KKwlieSB3cmFwcGluZyBlbnVtIHl5dG9rZW50eXBlJ3MgZGVmaW5pdGlvbiBpbnNpZGUgI2lmbmRlZgorCVlZVE9LRU5UWVBFLiAgVGhpcyB1bmRvZXMgYSBidWcgSSBpbnRyb2R1Y2VkIG9uIDIwMDItMTAtMTIuCisKKzIwMDItMTAtMTMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2dsci5jICh5eWdsclNoaWZ0RGVmZXIsIHl5YWRkRGVmZXJyZWRBY3Rpb24sIHl5ZG9BY3Rpb24pOgorCVVuIHl5LSB5eXJocyB0byBhdm9pZCB0aGUgbmFtZSBjbGFzaCB3aXRoIHRoZSBnbG9iYWwgWVlSSFMuCisKKzIwMDItMTAtMTMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBNYWtlZmlsZS5tYWludDogVXBkYXRlIGZyb20gQXV0b2NvbmYgMi41NC4KKwkqIG00L3N0cmVycm9yX3IubTQgKEFDX0ZVTkNfU1RSRVJST1JfUik6IFJlbW92ZSwgc2hpcHBlZCB3aXRoIDIuNTQuCisKKzIwMDItMTAtMTMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcHJpbnQuYyAocHJpbnRfc3RhdGUpOiBTZXBhcmF0ZSB0aGUgbGlzdCBvZiBzb2x2ZWQgY29uZmxpY3RzCisJZnJvbSB0aGUgb3RoZXIgaXRlbXMuCisJKiB0ZXN0cy9jb25mbGljdHMuYXQgKFJlc29sdmVkIFNSIENvbmZsaWN0cyk6IEFkanVzdC4KKworMjAwMi0xMC0xMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlMZXQgbm9uZGV0ZXJtaW5pc3RpYyBza2VsZXRvbnMgYmUgdXNhYmxlIHdpdGggZGV0ZXJtaW5pc3RpYworCXRhYmxlcy4KKworCVdpdGggdGhlIHBhdGNoLCBHQVdLIGNvbXBpbGVkIGJ5IEdDQyB3aXRob3V0IC1PMiBwYXNzZXMgaXRzIHRlc3QKKwlzdWl0ZSB1c2luZyBhIEdMUiBwYXJzZXIgZHJpdmVuIGJ5IExBTFIgdGFibGVzLiAgSXQgZmFpbHMgd2l0aCAtTzIKKwliZWNhdXNlIGBzdHJ1Y3Qgc3RhdCcgZ2l2ZXMgdHdvIGRpZmZlcmVudCBhbnN3ZXJzIG9uIG15IG1hY2hpbmU6CisJODggKGRlZmluaXRpb24gb2YgYW4gYXV0byB2YXIpIGFuZCBsYXRlciA5NiAobWVtc2V0IG9uIHRoaXMgdmFyKS4KKwlIZW5jZSB0aGUgc3RhY2sgaXMgYmFkbHkgY29ycnVtcHRlZC4gIFRoZSBoZWFkZXJzIGluY2x1c2lvbiBpcyB0bworCWJsYW1lOiBpZiBJIG1vdmUgdGhlIGF3ay5oIGluY2x1c2lvbiBiZWZvcmUgR0xSJ3Mgc3lzdGVtIGhlYWRlcgorCWluY2x1c2lvbiwgdGhlIHR3byBzdHJ1Y3Qgc3RhdCBoYXZlIHRoZSBzYW1lIHNpemUuCisKKwkqIHNyYy90YWJsZXMuYyAocGFja190YWJsZSk6IEFsd2F5cyBjcmVhdGUgY29uZmxpY3RfdGFibGUuCisJKHRva2VuX2FjdGlvbnMpOiBBbHdheXMgY3JlYXRlIGNvbmZsaWN0X2xpc3QuCisJKiBkYXRhL2dsci5jIChZWUZMQUcpOiBSZW1vdmUsIHVudXNlZC4KKworMjAwMi0xMC0xMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGNvbmZpZ3VyZS5hYyAoQUNfR05VX1NPVVJDRSk6IFVzZSBpdCBpbnN0ZWFkIG9mIGhhbmQgd3JpdHRlbiBjb2RlLgorCShPMEZMQUdTKTogTmV3LgorCShWQUxHUklORCwgR1hYKTogTmV3LgorCSogdGVzdHMvYXRsb2NhbC5pbiAoQ0ZMQUdTKTogVXNlIE8wRkxBR1MuCisJKiB0ZXN0cy9iaXNvbi5pbjogUnVuICRQUkVCSVNPTiBhIHByZS1jb21tYW5kLgorCSogdGVzdHMvTWFrZWZpbGUuYW0gKG1haW50YWluZXItY2hlY2ssIG1haW50YWluZXItY2hlY2stdmFsZ3JpbmQpCisJKG1haW50YWluZXItY2hlY2stZysrKTogTmV3LgorCSogTWFrZWZpbGUuYW0gKG1haW50YWluZXItY2hlY2spOiBOZXcuCisKKzIwMDItMTAtMTMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2dsci5jOiBGb3JtYXR0aW5nIGNoYW5nZXMuCisJVHdlYWsgc29tZSB0cmFjZSBtZXNzYWdlcyB0byBtYXRjaCB5YWNjLmMncy4KKworMjAwMi0xMC0xMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlHTFIgcGFyc2VycyBzb21ldGltZXMgcmFpc2UgcGFyc2UgZXJyb3JzIGluc3RlYWQgb2YgcGVyZm9ybWluZyB0aGUKKwlkZWZhdWx0IHJlZHVjdGlvbi4KKwlSZXBvcnRlZCBieSBDaGFybGVzLUhlbnJ5IGRlIEJveXNzb24uCisKKwkqIHRlc3RzL2NhbGMuYXQgKF9BVF9DSEVDS19DQUxDLCBfQVRfQ0hFQ0tfQ0FMQ19FUlJPUik6IERvbid0CisJY2hlY2sgdGhlIGxlbmd0aCBvZiB0aGUgdHJhY2VzIHdoZW4gJWdsci4KKwkoX0FUX0NIRUNLX0NBTENfRVJST1IpOiBBbHNvIHNraXAgYF5TdGFjaycgbGluZXMsIGNvbWluZyBmcm9tCisJR0xSJ3MgdHJhY2VzLgorCShBVF9DSEVDS19DQUxDX0xBTFIsIEFUX0NIRUNLX0NBTENfR0xSKTogTmV3LgorCVRlc3QgR0xSIHBhcnNlcnMuCisJKiBkYXRhL2dsci5jIChZWUxFRlRNT1NUX1NUQVRFKTogRml4IGl0cyB2YWx1ZS4KKwkoeXlsdHlwZSk6IFJlbW92ZSB0aGUgeXkgcHJlZml4IGZyb20gdGhlIG1lbWJlciBuYW1lcy4KKwkoeXl0YWJsZSk6IENvbXBsZXRlIGl0cyBjb21tZW50LgorCSh5eWdldExSQWN0aW9ucyk6IE1hcCBlcnJvciBhY3Rpb24gbnVtYmVyIGZyb20gWVlUQUJMRSBmcm9tCisJWVlUQUJMRV9OSU5GIHRvIDAuCisJKHl5aXNFcnJvckFjdGlvbik6IE5vIGxvbmdlciBjb21wYXJlIFlZQUNUSU9OIHRvIFlZUEFDVF9OSU5GCisJKHdoaWNoIHdhcyBhIGJ1ZzogaXQgc2hvdWxkIGhhdmUgYmVlbiBZWVRBQkVMX05JTkYsIGFuZCB5ZXQgaXQgd2FzCisJbm90IHNhdGlzZnlpbmcgYXMgd2UgY291bGQgY29tcGFyZSBhbiBZWUFDVElPTiBjb21wdXRlZCBmcm9tCisJWVlERUZBQ1QgdG8gWVlUQUJMRV9OSU5GIGFsdGhvdWdoIHRoZXkgYXJlIHVucmVsYXRlZCk6IDAgaXMgdGhlCisJb25seSB2YWx1ZSBmb3IgZXJyb3IgYWN0aW9ucy4KKwkoeXlyZXBvcnRQYXJzZUVycm9yKTogSW4gdmVyYm9zZSBwYXJzZSBlcnJvciBtZXNzYWdlcywgZG9uJ3QgaXNzdWUKKwlgZXJyb3InIGluIHRoZSBsaXN0IG9mIGV4cGVjdGVkIHRva2Vucy4KKwkqIGRhdGEveWFjYy5jICh5eXBhcnNlKSA8eXliYWNrdXA+OiBSZXdyaXRlIHRoZSBkZWNvZGluZyBvZiB0aGUKKwluZXh0IGFjdGlvbiB0byBwZXJmb3JtIHRvIG1hdGNoIGdsci5jJ3MgZGVjb2RpbmcuCisJKHl5dGFibGUpOiBDb21wbGV0ZSBpdHMgY29tbWVudC4KKworMjAwMi0xMC0xMyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwlGaXggcHJvYmxlbSByZXBvcnRlZCBieSBIZW5yaWsgR3J1YmJzdHJvZW0gaW4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAyLTEwL21zZzAwMDk4Lmh0bWw+OgorCSJub250ZXJtOiB7ICQkID0gMTIzOyB9IHsgJCQgPSAkMTsgfTsiIHdhcyB3cm9uZ2x5IHJlamVjdGVkLAorCWJlY2F1c2UgdGhlIEJpc29uIHBhcnNlciByZWFkcyB0aGUgc2Vjb25kIGFjdGlvbiBiZWZvcmUgcmVkdWNpbmcKKwl0aGUgZmlyc3Qgb25lLgorCSogc3JjL3NjYW4tZ3JhbS5sIChydWxlX2xlbmd0aCk6IE5ldyBzdGF0aWMgdmFyLgorCVVzZSBpdCB0byBrZWVwIHRyYWNrIG9mIHRoZSBydWxlIGxlbmd0aCBpbiB0aGUgc2Nhbm5lciwgc2luY2UKKwl3ZSBjYW4ndCBleHBlY3QgdGhlIHBhcnNlciB0byBiZSBpbiBsb2NrLXN0ZXAgc3luYyB3aXRoIHRoZSBzY2FubmVyLgorCShoYW5kbGVfYWN0aW9uX2RvbGxhciwgaGFuZGxlX2FjdGlvbl9hdCk6IFVzZSB0aGlzIHZhci4KKwkqIHRlc3RzL2FjdGlvbnMuYXQgKEV4b3RpYyBEb2xsYXJzKTogVGVzdCBmb3IgdGhlIHByb2JsZW0uCisKKzIwMDItMTAtMTIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBsaWIvdGltZXZhci5jIFshIElOX0dDQyAmJiBIQVZFX1NZU19USU1FX0hdOiBJbmNsdWRlIDxzeXMvdGltZS5oPi4KKwkqIG00L3RpbWV2YXIubTQgKEJJU09OX1BSRVJFUV9USU1FVkFSKTogQ2hlY2sgZm9yIDxzeXMvdGltZS5oPi4KKwlJbmNsdWRlIDxzeXMvdGltZS5oPiB3aGVuIGNoZWNraW5nIGZvciBjbG9ja190IGFuZCBzdHJ1Y3QgdG1zLgorCVVzZSBzYW1lIGluY2x1ZGUgb3JkZXIgYXMgc291cmNlLgorCVRoaXMgaXMgZm9yIHRoZSBTdW5PUyA0LjEuNCBwb3J0aW5nIGJ1ZyByZXBvcnRlZCBieSBQZXRlciBLbGVpbiBpbgorCTxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDItMTAvbXNnMDAwMTYuaHRtbD4uCisKKwkqIGxpYi90aW1ldmFyLmM6IFVwZGF0ZSBjb3B5cmlnaHQgZGF0ZSBhbmQgY2xhcmlmeSBjb21tZW50cy4KKwkoZ2V0X3RpbWUpIFtJTl9HQ0NdOiBLZWVwIHRoZSBHQ0MgdmVyc2lvbiBmb3IgcmVmZXJlbmNlLgorCisJKiBsaWIvdGltZXZhci5jLCBsaWIvdGltZXZhci5oLCBsaWIvdGltZXZhci5kZWY6IEltcG9ydAorCUdDQyB2ZXJzaW9uIGFzIG9mIHRvZGF5LCB0aGVuIG1lcmdlIEJpc29uJ3MgY2hhbmdlcy4KKwlDaGFuZ2UgIkdDQyIgdG8gIkJpc29uIiBpbiBjb3B5cmlnaHQgbm90aWNlLiAgdGltZXZhci5kZWYncworCWF1dGhvciBpcyBBa2ltLCBzbyBjaGFuZ2UgdGhhdCB0b28uCisKKwkqIHNyYy9yZWFkZXIuYyAoZ3JhbW1hcl9jdXJyZW50X3J1bGVfY2hlY2spOgorCURvbid0IHdvcnJ5IGFib3V0IHRoZSBkZWZhdWx0IGFjdGlvbiBpZiAkJCBpcyB1bnR5cGVkLgorCVByZXZlbnRzIGJvZ3VzIHdhcm5pbmdzIHJlcG9ydGVkIGJ5IEppbSBHaWZmb3JkIGluCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmlzb24vMjAwMi0xMC9tc2cwMDAxNS5odG1sPi4KKworCSogZGF0YS9jLm00IChiNF90b2tlbl9lbnVtKTogRG8gbm90IGRlZmluZSBZWVRPS0VOVFlQRS4KKwkqIGRhdGEvZ2xyLmMsIGRhdGEvbGFscjEuY2MsIGRhdGEveWFjYy5jOgorCU91dHB1dCB0b2tlbiBkZWZpbml0aW9ucyBiZWZvcmUgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuCisJRml4ZXMgY29tcGF0aWJpbGl0eSBwcm9ibGVtIHJlcG9ydGVkIGJ5IEppbSBHaWZmb3JkIGZvciBrYmQgaW4KKwk8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDAyLTEwL21zZzAwMDE0Lmh0bWw+LgorCisyMDAyLTEwLTExICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogZGF0YS95YWNjLmMgKHl5cmVwb3J0X3BhcnNlX2Vycm9yKTogUmVtb3ZlLCBwdXR0aW5nIGl0cyBib2R5IGludG8uLi4KKwkoeXlwYXJzZSk6IGhlcmUuICBUaGlzIHVuZG9lcyBzb21lIG9mIHRoZSAyMDAyLTA3LTI1IGNoYW5nZS4KKwlDb21wYXRpYmlsaXR5IHByb2JsZW0gcmVwb3J0ZWQgYnkgUmFsZiBTLiBFbmdlbHNjaGFsbCB3aXRoCisJT1NTUCBjZmcgPGh0dHA6Ly93d3cub3NzcC5vcmcvcGtnL2xpYi9jZmcvPi4KKworMjAwMi0xMC0xMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgQ2hhcmFjdGVycyBFc2NhcGVzKTogTmV3LgorCSogc3JjL3NjYW4tZ3JhbS5sIChTQ19FU0NBUEVEX0NIQVJBQ1RFUik6IEFjY2VwdCBcJyBpbiBzdHJpbmdzIGFuZAorCWNoYXJhY3RlcnMuCisJUmVwb3J0ZWQgYnkgSmFuIE5pZXV3ZW5odWl6ZW4uCisKKzIwMDItMTAtMTEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBwby9pZC5wbzogTmV3LgorCisyMDAyLTEwLTEwICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCVBvcnRhYmlsaXR5IGZpeGVzIGZvciBiaXRzZXRzOyB0aGlzIGFsc28gYXZvaWRzIHNldmVyYWwgR0NDCisJd2FybmluZ3MuCisKKwkqIGxpYi9hYml0c2V0LmM6IEluY2x1ZGUgPHN0ZGRlZi5oPiwgZm9yIG9mZnNldG9mLgorCSogbGliL2xiaXRzZXQuYzogTGlrZXdpc2UuCisKKwkqIGxpYi9hYml0c2V0LmMgKGFiaXRzZXRfYnl0ZXMpOiBSZXR1cm4gYSBzaXplIHRoYXQgaXMgYWxpZ25lZAorCXByb3Blcmx5IGZvciB2ZWN0b3JzIG9mIG9iamVjdHMuICBEbyBub3QgYXNzdW1lIHRoYXQgYWRkaW5nIGEKKwloZWFkZXIgc2l6ZSB0byBhIG11bHRpcGxlIG9mIGEgd29yZCBzaXplIHlpZWxkcyBhIHZhbHVlIHRoYXQgaXMKKwlwcm9wZXJseSBhbGlnbmVkIGZvciB0aGUgd2hvbGUgdW5pb24uCisJKiBsaWIvYml0c2V0di5jIChiaXRzZXR2X2FsbG9jKTogTGlrZXdpc2UuCisKKwkqIGxpYi9iaXRzZXRfc3RhdHMuYyAoYml0c2V0X3N0YXRzX2J5dGVzKTogQWRqdXN0IHRvIG5ldywKKwl1bmlxdWUgbmFtZXMgZm9yIHN0cnVjdHVyZXMuCisJKiBsaWIvZWJpdHNldC5jIChlYml0c2V0X2J5dGVzKTogTGlrZXdpc2UuCisJKiBsaWIvbGJpdHNldC5jIChsYml0c2V0X2J5dGVzKTogTGlrZXdpc2UuCisKKwkqIGxpYi9hYml0c2V0LmMgKGFiaXRzZXRfb25lcywgYWJpdHNldF96ZXJvLCBhYml0c2V0X2VtcHR5X3AsCisJYWJpdHNldF9jb3B5MSwgYWJpdHNldF9ub3QsIGFiaXRzZXRfZXF1YWxfcCwgYWJpdHNldF9zdWJzZXRfcCwKKwlhYml0c2V0X2Rpc2pvaW50X3AsIGFiaXRzZXRfYW5kLCBhYml0c2V0X2FuZF9jbXAsIGFiaXRzZXRfYW5kbiwKKwlhYml0c2V0X2FuZG5fY21wLCBhYml0c2V0X29yLCBhYml0c2V0X29yX2NtcCwgYWJpdHNldF94b3IsCisJYWJpdHNldF94b3JfY21wLCBhYml0c2V0X2FuZF9vciwgYWJpdHNldF9hbmRfb3JfY21wLAorCWFiaXRzZXRfYW5kbl9vciwgYWJpdHNldF9hbmRuX29yX2NtcCwgYWJpdHNldF9vcl9hbmQsCisJYWJpdHNldF9vcl9hbmRfY21wLCBhYml0c2V0X2NvcHkpOiBTdXBwbHkgcHJvdG90eXBlIGRlY2xzLAorCXRvIGltcHJvdmUgdGhlIHR5cGUtY2hlY2tpbmcgdGhhdCBHQ0MgY2FuIGRvLgorCSogbGliL2JpdHNldC5jIChiaXRzZXRfb3A0X2NtcCk6IExpa2V3aXNlLgorCSogbGliL2JpdHNldF9zdGF0cy5jIChiaXRzZXRfc3RhdHNfY291bnQsCisJYml0c2V0X3N0YXRzX2VtcHR5X3AsIGJpdHNldF9zdGF0c19vbmVzLCBiaXRzZXRfc3RhdHNfemVybywKKwliaXRzZXRfc3RhdHNfY29weSwgYml0c2V0X3N0YXRzX2Rpc2pvaW50X3AsCisJYml0c2V0X3N0YXRzX2VxdWFsX3AsIGJpdHNldF9zdGF0c19ub3QsIGJpdHNldF9zdGF0c19zdWJzZXRfcCwKKwliaXRzZXRfc3RhdHNfYW5kLCBiaXRzZXRfc3RhdHNfYW5kX2NtcCwgYml0c2V0X3N0YXRzX2FuZG4sCisJYml0c2V0X3N0YXRzX2FuZG5fY21wLCBiaXRzZXRfc3RhdHNfb3IsIGJpdHNldF9zdGF0c19vcl9jbXAsCisJYml0c2V0X3N0YXRzX3hvciwgYml0c2V0X3N0YXRzX3hvcl9jbXAsIGJpdHNldF9zdGF0c19hbmRfb3IsCisJYml0c2V0X3N0YXRzX2FuZF9vcl9jbXAsIGJpdHNldF9zdGF0c19hbmRuX29yLAorCWJpdHNldF9zdGF0c19hbmRuX29yX2NtcCwgYml0c2V0X3N0YXRzX29yX2FuZCwKKwliaXRzZXRfc3RhdHNfb3JfYW5kX2NtcCk6IExpa2V3aXNlLgorCSogbGliL2xiaXRzZXQuYyAobGJpdHNldF9hbmQsIGxiaXRzZXRfYW5kX2NtcCwgbGJpdHNldF9hbmRuLAorCWxiaXRzZXRfYW5kbl9jbXAsIGxiaXRzZXRfb3IsIGxiaXRzZXRfb3JfY21wLCBsYml0c2V0X3hvciwKKwlsYml0c2V0X3hvcl9jbXAsIGxiaXRzZXRfZW1wdHlfcCwgbGJpdHNldF9vbmVzLCBsYml0c2V0X25vdCwKKwlsYml0c2V0X3N1YnNldF9wLCBsYml0c2V0X2Rpc2pvaW50X3AsIGRlYnVnX2xiaXRzZXQpOiBMaWtld2lzZS4KKworCSogbGliL2FiaXRzZXQuaDogSW5jbHVkZSBiaXRzZXQuaCwgbm90IGJiaXRzZXQuaC4KKwkqIGxpYi9lYml0c2V0Lmg6IExpa2V3aXNlLgorCSogbGliL2xiaXRzZXQuaDogTGlrZXdpc2UuCisKKwkqIGxpYi9iYml0c2V0Lmg6IChlbnVtX2JpdHNldF9vcHMsIGVudW1fYml0c2V0X3R5cGUpOiBOZXcgdHlwZXMuCisJQWxsIGluc3RhbmNlcyBvZiBwYXJhbWV0ZXJzIG9mIHR5cGUgZW51bSBiaXRzZXRfb3B0cyBhcmUgbm93IG9mCisJdHlwZSBlbnVtX2JpdHNldF9vcHRzLCB0byBjb25mb3JtIHRvIHRoZSBDIFN0YW5kYXJkLCBhbmQgc2ltaWxhcmx5CisJZm9yIGVudW1fYml0c2V0X3R5cGUuCisJKiBsaWIvZWJpdHNldC5jIChlbnVtX2ViaXRzZXRfZmluZF9tb2RlKTogTGlrZXdpc2UuCisJKiBsaWIvbGJpdHNldC5jIChlbnVtX2xiaXRzZXRfZmluZF9tb2RlKTogTGlrZXdpc2UuCisKKwlEbyBub3QgdXNlICJzdHJ1Y3QgYml0c2V0X3N0cnVjdCIgdG8gbWVhbiBkaWZmZXJlbnQgdGhpbmdzIGluCisJZGlmZmVyZW50IG1vZHVsZXMuICBOb3Qgb25seSBpcyB0aGlzIGNvbmZ1c2luZywgaXQgdmlvbGF0ZXMKKwl0aGUgQyBTdGFuZGFyZCwgd2hpY2ggcmVxdWlyZXMgdGhhdCBzdHJ1Y3R1cmUgdHlwZXMgaW4gZGlmZmVyZW50CisJbW9kdWxlcyBtdXN0IGJlIGNvbXBhdGlibGUgaWYgb25lIGlzIHRvIGJlIHBhc3NlZCB0byB0aGUgb3RoZXIuCisJKiBsaWIvYmJpdHNldC5oIChiaXRzZXQpOiBOb3cgcG9pbnRzIHRvIGEgdW5pb24sIG5vdCB0byBhIHN0cnVjdC4KKwlBbGwgaW5zdGFuY2VzIG9mICJzdHJ1Y3QgYml0c2V0X3N0cnVjdCAqIiByZXBsYWNlZCB3aXRoICJiaXRzZXQiLgorCSogbGliL2JpdHNldC5oIChzdHJ1Y3QgYml0c2V0X3N0cnVjdCk6IFJlbW92ZSwgcmVwbGFjaW5nIHdpdGguLi4uCisJKHVuaW9uIGJpdHNldF91bmlvbiwgc3RydWN0IGFiaXRzZXRfc3RydWN0LCBzdHJ1Y3QgZWJpdHNldF9zdHJ1Y3QsCisJc3RydWN0IGxiaXRzZXRfc3RydWN0LCBzdHJ1Y3QgYml0c2V0X3N0YXRzX3N0cnVjdCk6IE5ldyB0eXBlcy4KKwlBbGwgdXNlcyBvZiBzdHJ1Y3QgYml0c2V0X3N0cnVjdCBjaGFuZ2VkIHRvIHVuaW9uIGJpdHNldF91bmlvbiwKKwlldGMuCisJKiBsaWIvYWJpdHNldC5jIChzdHJ1Y3QgYWJpdHNldF9zdHJ1Y3QsIGFiaXRzZXQsCisJc3RydWN0IGJpdHNldF9zdHJ1Y3QpOiBSZW1vdmUuCisJKiBsaWIvYml0c2V0X3N0YXRzLmMgKHN0cnVjdCBiaXRzZXRfc3RhdHNfc3RydWN0LCBiaXRzZXRfc3RhdHMsCisJc3RydWN0IGJpdHNldF9zdHJ1Y3QpOiBSZW1vdmUuCisJKiBsaWIvZWJpdHNldC5jIChzdHJ1Y3QgZWJpdHNldF9zdHJ1Y3QsIGViaXRzZXQsIHN0cnVjdAorCWJpdHNldF9zdHJ1Y3QpOiBSZW1vdmUuCisJKiBsaWIvbGJpdHNldC5jIChzdHJ1Y3QgbGJpdHNldF9zdHJ1Y3QsIGxiaXRzZXQsIGJpdHNldF9zdHJ1Y3QpOgorCUxpa2V3aXNlLgorCisJRG8gbm90IGNhbGwgYSBmdW5jdGlvbiBvZiB0eXBlIFQgdXNpbmcgYSBjYWxsIHRoYXQgYXNzdW1lcyB0aGUKKwlmdW5jdGlvbiBpcyBvZiBhIGRpZmZlcmVudCB0eXBlIFUuICBTdGFuZGFyZCBDIHJlcXVpcmVzIHRoYXQgYQorCWZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggYSB0eXBlIHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIGl0cworCWRlZmluaXRpb24uCisJKiBsaWIvYmJpdHNldC5oIChiaXRzZXRfYW5kX29yXywgYml0c2V0X2FuZG5fb3JfLCBiaXRzZXRfb3JfYW5kXyk6CisJTmV3IGRlY2xzLgorCSogbGliL2JpdHNldC5jIChiaXRzZXRfYW5kX29yXywgYml0c2V0X2FuZG5fb3JfLCBiaXRzZXRfb3JfYW5kXyk6CisJTmV3IGZ1bmN0aW9ucy4KKwkqIGxpYi9lYml0c2V0LmMgKFBGVik6IFJlbW92ZS4KKwkqIGxpYi9sYml0c2V0LmMgKFBGVik6IExpa2V3aXNlLgorCSogbGliL2ViaXRzZXQuYyAoZWJpdHNldF9hbmQsIGViaXRzZXRfYW5kbiwgZWJpdHNldF9vciwKKwllYml0c2V0X3hvciwgZWJpdHNldF9jb3B5LCBlYml0c2V0X29uZXMsIGViaXRzZXRfZW1wdHlfcCk6IE5ldworCWRlY2xzLgorCShlYml0c2V0X2FuZCwgZWJpdHNldF9hbmRuLCBlYml0c2V0X29yLCBlYml0c2V0X3hvcik6IE5ldyBmdW5jdGlvbnMuCisJKGViaXRzZXRfdnRhYmxlKTogVXNlIHRoZW0uCisJKiBsaWIvbGJpdHNldC5jIChsYml0c2V0X2FuZCwgbGJpdHNldF9hbmRuLCBsYml0c2V0X29yLAorCWxiaXRzZXRfeG9yKTogTmV3IGZ1bmN0aW9ucy4KKwkobGJpdHNldF92dGFibGUpOiBVc2UgdGhlbS4KKworCSogbGliL2JpdHNldC5oIChiaXRzZXRfbmV4dCwgYml0c2V0X3ByZXYsIGJpdHNldF9vbmx5X3NldF9wKToKKwlEZWNsYXJlLgorCisJKiBsaWIvYml0c2V0di5jIChiaXRzZXR2X2FsbG9jKTogQWRkIGEgY2FzdCB0byAodm9pZCAqKSB0byBhdm9pZCBhCisJR0NDIHdhcm5pbmcuCisJKiBsaWIvbGJpdHNldC5jIChMQklUU0VUX0NVUlJFTlQxKTogTGlrZXdpc2UuCisJVXNlIG9mZnNldG9mLCBmb3Igc2ltcGxpY2l0eS4KKworMjAwMi0xMC0wNiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGxpYi9iaXRzZXQuaCAoYml0c2V0X3Jlc2V0KTogRG8gbm90IGFzc3VtZSB0aGF0IGJpdHNldF93b3JkIGlzCisJdGhlIHNhbWUgd2lkdGggYXMgaW50LiAgVGhpcyByZWFwcGxpZXMgYSBodW5rIG9mIHRoZSAyMDAyLTA4LTEyIHBhdGNoCisJPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDItMDgvbXNnMDAwMDcuaHRtbD4sCisJd2hpY2ggd2FzIGluYWR2ZXJ0ZW50bHkgdW5kb25lIGJ5IHRoZSAyMDAyLTA5LTMwIHBhdGNoLgorCSogbGliL2xiaXRzZXQuYyAoZGVidWdfbGJpdHNldCk6IERvIG5vdCBhc3N1bWUgdGhhdCBiaXRzZXRfd29yZCBpcworCXRoZSBzYW1lIHdpZHRoIGFzIGludC4KKworMjAwMi0xMC0wNCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwlWZXJzaW9uIDEuNTAuCisKKwkqIGNvbmZpZ3VyZS5hYyAoQUNfSU5JVCksIE5FV1M6IEluY3JlbWVudCB2ZXJzaW9uIG51bWJlci4KKworCSogZG9jL2Jpc29uLnRleGluZm86IE1pbm9yIHNwZWxsaW5nLCBncmFtbWFyLCBhbmQgd2hpdGUgc3BhY2UKKwlmaXhlcy4KKwkoU3ltYm9scyk6IE1lbnRpb24gdGhhdCBhbnkgbmVnYXRpdmUgdmFsdWUgcmV0dXJuZWQgZnJvbSB5eWxleAorCXNpZ25pZmllcyBlbmQtb2YtaW5wdXQuICBXYXJuIGFib3V0IG5lZ2F0aXZlIGNoYXJzLiAgTWVudGlvbgorCXRoZSBwb3J0YWJsZSBTdGFuZGFyZCBDIGNoYXJhY3RlciBzZXQuCisKKwlUaGUgR05VIGNvZGluZyBzdGFuZGFyZCBzYXlzIENGTEFHUyBhbmQgWUZMQUdTIGFyZSByZXNlcnZlZAorCWZvciB0aGUgaW5zdGFsbGVyIHRvIHNldC4KKwkqIGxpYi9NYWtlZmlsZS5hbSAoQU1fQ0ZMQUdTKTogUmVuYW1lZCBmcm9tIENGTEFHUy4KKwkqIHNyYy9NYWtlZmlsZS5hbSAoQU1fQ0ZMQUdTKTogTGlrZXdpc2UuCisJKEFNX1lGTEFHUyk6IFJlbmFtZWQgZnJvbSBZRkxBR1MuCisKKwlGaXggc29tZSBNQVggYW5kIE1JTiBwcm9ibGVtcy4KKwkqIHNyYy9ncmFtLmggKElURU1fTlVNQkVSX01JTik6IE1JTl9NQVggLT4gSU5UX01JTi4KKwkqIHNyYy9sYWxyLmggKEdPVE9fTlVNQkVSX01BWCk6IElOVF9NQVggLT4gU0hSVF9NQVguCisJKiBzcmMvc3ltdGFiLmggKFNZTUJPTF9OVU1CRVJfTUFYKTogTmV3IG1hY3JvLgorCSogc3JjL3JlYWRlci5jIChyZWFkZXIpOiBVc2UgaXQuCisKKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKEJyYWNlcyBwYXJzaW5nKTogVXNlIGdyZXAsIG5vdCBmZ3JlcCwgYXMKKwlQT1NJWCAxMDAzLjEtMjAwMSBoYXMgcmVtb3ZlZCBmZ3JlcC4KKworMjAwMi0xMC0wNCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgorCisJKiBsaWIvYmJpdHNldC5oIChCSVRTRVRfV0lOREVYX01BWCk6IFJlZGVmaW5lIHNvIHRoYXQgaXQgY2Fubm90IGJlCisJaW50ZXJwcmV0ZWQgYXMgc2lnbmVkLgorCSogbGliL2ViaXRzZXQuYyAoZWJpdHNldF9saXN0KTogRml4IGJ1Zy4KKworMjAwMi0xMC0wMSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwlNb3JlIGZpeGVzIGZvciA2NC1iaXQgaG9zdHMgYW5kIGxhcmdlIGJpdHNldHMuCisKKwkqIGxpYi9hYml0c2V0LmMgKHN0cnVjdCBhYml0c2V0X3N0cnVjdC5uX2JpdHMsIGFiaXRzZXRfc21hbGxfbGlzdCwKKwlhYml0c2V0X3NpemUsIGFiaXRzZXRfbGlzdCwgYWJpdHNldF9saXN0X3JldmVyc2UsIGFiaXRzZXRfbGlzdCk6CisJVXNlIGJpdHNldF9iaW5kZXgsIG5vdCBpbnQgb3IgdW5zaWduZWQgaW50IG9yIHNpemVfdCwgdG8gY291bnQgYml0cy4KKwkqIGxpYi9iYml0c2V0LmggKHN0cnVjdCBiaXRzZXRfdnRhYmxlLnNpemUsIHN0cnVjdCBiaXRzZXRfdnRhYmxlLmNvdW50LAorCXN0cnVjdCBiaXRzZXRfdnRhYmxlLmxpc3QsIHN0cnVjdCBiaXRzZXRfdnRhYmxlLmxpc3RfcmV2ZXJzZSwKKwliaXRzZXRfY291bnRfLCBiaXRzZXRfbmV4dCwgYml0c2V0X3ByZXYsIGJpdHNldF9maXJzdCwgYml0c2V0X2xhc3QsCisJYml0c2V0X2NvdW50Xyk6IExpa2V3aXNlLgorCSogbGliL2JpdHNldC5oIChiaXRzZXRfaXRlcmF0b3IubnVtLCBiaXRzZXRfaXRlcmF0b3IuaSwKKwliaXRzZXRfZmlyc3QsIGJpdHNldF9sYXN0KTogTGlrZXdpc2UuCisJKiBsaWIvYml0c2V0X3N0YXRzLmMgKGJpdHNldF9zdGF0c19zaXplLCBiaXRzZXRfc3RhdHNfbGlzdCwKKwliaXRzZXRfc3RhdHNfbGlzdF9yZXZlcnNlLCBiaXRzZXRfc3RhdHNfc2l6ZSwKKwliaXRzZXRfc3RhdHNfY291bnQsIGJpdHNldF9zdGF0c19saXN0LCBiaXRzZXRfc3RhdF9saXN0X3JldmVyc2UpOgorCUxpa2V3aXNlLgorCSogbGliL2JpdHNldHYtcHJpbnQuYyAoYml0c2V0dl9tYXRyaXhfZHVtcCk6IExpa2V3aXNlLgorCSogbGliL2JpdHNldHYuYyAoYml0c2V0dl9hbGxvYywgYml0c2V0dl9jcmVhdGUsIGJpdHNldHZfZnJlZSwKKwliaXRzZXR2X3plcm8sIGJpdHNldHZfb25lcywgYml0c2V0dl90cmFuc2l0aXZlX2Nsb3N1cmUsCisJYml0c2V0dl9yZWZsZXhpdmVfdHJhbnNpdGl2ZV9jbG9zdXJlKTogTGlrZXdpc2UuCisJKiBsaWIvYml0c2V0di5oIChiaXRzZXR2X2FsbG9jLCBiaXRzZXR2X2NyZWF0ZSk6IExpa2V3aXNlLgorCSogbGliL2ViaXRzZXQuYyAoZWJpdHNldF9zaXplLCBlYml0c2V0X2xpc3QsIGViaXRzZXRfbGlzdF9yZXZlcnNlKToKKwlMaWtld2lzZS4KKwkqIGxpYi9sYml0c2V0LmMgKGxiaXRzZXRfc2l6ZSwgbGJpdHNldF9saXN0LCBsYml0c2V0X2xpc3RfbWVyZ2UpOgorCUxpa2V3aXNlLgorCisJKiBsaWIvYWJpdHNldC5jIChhYml0c2V0X29uZXMsIGFiaXRzZXRfemVybywgYWJpdHNldF9ieXRlcyk6CisJVXNlIHNpemVfdCwgbm90IHVuc2lnbmVkIGludCwgdG8gY291bnQgYnl0ZXMuCisJKiBsaWIvYWJpdHNldC5oIChhYml0c2V0X2J5dGVzKTogTGlrZXdpc2UuCisJKiBsaWIvYml0c2V0LmMgKGJpdHNldF9ieXRlcywgYml0c2V0X2FsbG9jLCBiaXRzZXRfb2JzdGFja19hbGxvYyk6CisJTGlrZXdpc2UuCisJKiBsaWIvYml0c2V0LmggKGJpdHNldF9ieXRlcyk6IExpa2V3aXNlLgorCSogbGliL2JpdHNldF9zdGF0cy5jIChiaXRzZXRfc3RhdHNfYnl0ZXMsIGJpdHNldF9zdGF0c19pbml0KTogTGlrZXdpc2UuCisJKiBsaWIvYml0c2V0X3N0YXRzLmggKGJpdHNldF9zdGF0c19ieXRlcyk6IExpa2V3aXNlLgorCSogbGliL2JpdHNldHYuYyAoYml0c2V0dl9hbGxvYyk6IExpa2V3aXNlLgorCSogbGliL2ViaXRzZXQuYyAoZWJpdHNldF9ieXRlcyk6IExpa2V3aXNlLgorCSogbGliL2ViaXRzZXQuaCAoZWJpdHNldF9ieXRlcyk6IExpa2V3aXNlLgorCSogbGliL2xiaXRzZXQuYyAobGJpdHNldF9ieXRlcyk6IExpa2V3aXNlLgorCSogbGliL2xiaXRzZXQuaCAobGJpdHNldF9ieXRlcyk6IExpa2V3aXNlLgorCisJKiBsaWIvYWJpdHNldC5jIChhYml0c2V0X2VtcHR5X3AsIGFiaXRzZXRfbm90LCBhYml0c2V0X2VxdWFsX3AsCisJYWJpdHNldF9zdWJzZXRfcCwgYWJpdHNldF9kaXNqb2ludF9wLCBhYml0c2V0X2FuZCwKKwlhYml0c2V0X2FuZF9jbXAsIGFiaXRzZXRfYW5kbiwgYWJpdHNldF9hbmRuX2NtcCwgYWJpdHNldF9vciwKKwlhYml0c2V0X29yX2NtcCwgYWJpdHNldF94b3IsIGFiaXRzZXRfeG9yX2NtcCwgYWJpdHNldF9hbmRfb3IsCisJYWJpdHNldF9hbmRfb3JfY21wLCBhYml0c2V0X2FuZG5fb3IsIGFiaXRzZXRfYW5kbl9vcl9jbXAsCisJYWJpdHNldF9vcl9hbmQsIGFiaXRzZXRfb3JfYW5kX2NtcCk6CisJVXNlIGJpdHNldF93aW5kZXggaW5zdGVhZCBvZiB1bnNpZ25lZCBpbnQuCisJKiBsaWIvYml0c2V0di5jIChiaXRzZXR2X2R1bXAsIGRlYnVnX2JpdHNldHYpOiBMaWtld2lzZS4KKwkqIGxpYi9lYml0c2V0LmMgKHN0cnVjdCBlYml0c2V0X3N0cnVjdC5zaXplLCBlYml0c2V0X2VsdHNfZ3JvdywKKwllYml0c2V0X2VsdF9hZGQsIGViaXRzZXRfZWx0X3JlbW92ZSwgZWJpdHNldF93ZWVkLAorCWViaXRzZXRfZWx0X2ZpbmQsIGViaXRzZXRfbGlzdF9yZXZlcnNlLCBlYml0c2V0X2xpc3QsIGViaXRzZXRfaW5pdCk6CisJTGlrZXdpc2UuCisJKiBsaWIvbGJpdHNldC5jIChsYml0c2V0X29uZXMsIGxiaXRzZXRfbm90KTogTGlrZXdpc2UuCisKKwkqIGxpYi9iaXRzZXQuYyAoYml0c2V0X3ByaW50KToKKwlVc2UgcHJvcGVyIHByaW50ZiBmb3JtYXRzIGZvciB3aWR0aHMgb2YgaW50ZWdlciB0eXBlcy4KKwkqIGxpYi9iaXRzZXRfc3RhdHMuYyAoYml0c2V0X3BlcmNlbnRfaGlzdG9ncmFtX3ByaW50LAorCWJpdHNldF9sb2dfaGlzdG9ncmFtX3ByaW50LCBiaXRzZXRfc3RhdHNfcHJpbnRfMSk6IExpa2V3aXNlLgorCSogbGliL2JpdHNldHYtcHJpbnQuYyAoYml0c2V0dl9tYXRyaXhfZHVtcCk6IExpa2V3aXNlLgorCSogbGliL2JpdHNldHYuYyAoYml0c2V0dl9kdW1wLCBkZWJ1Z19iaXRzZXR2KTogTGlrZXdpc2UuCisJKiBsaWIvbGJpdHNldC5jIChsYml0c2V0X2J5dGVzKTogTGlrZXdpc2UuCisKKwkqIGxpYi9iYml0c2V0LmggKEJJVFNFVF9CSU5ERVhfTUFYLCBCSVRTRVRfV0lOREVYX01BWCwKKwlCSVRTRVRfU0laRV9NQVgpOiBOZXcgbWFjcm9zLgorCShCSVRTRVRfSU5ERVhfTUFYKTogUmVtb3ZlLiAgSXQgd2Fzbid0IHJpZ2h0LCBzaW5jZSBpdCBhc3N1bWVkIHRoYXQKKwlzaXplb2YgKGJpdHNldF93b3JkKSA9PSBzaXplb2YgKGJpdHNldF93aW5kZXgpLiAgQWxsIHVzZXMgY2hhbmdlZAorCXRvIEJJVFNFVF9XSU5ERVhfTUFYLgorCisJKiBsaWIvYml0c2V0LmMgKGJpdHNldF9uZXh0LCBiaXRzZXRfcHJldiwgYml0c2V0X2ZpcnN0LAorCWJpdHNldF9sYXN0KTogUmV0dXJuIEJJVFNFVF9CSU5ERVhfTUFYIChub3QgLTEpIGZvciBubyB2YWx1ZSwKKwlzaW5jZSB3ZSBub3cgcmV0dXJuIHRoZSBiaXRzZXRfYmluZGV4IHR5cGUgKG5vdCBpbnQpLgorCisJKiBsaWIvYml0c2V0di5jIChiaXRzZXR2X2FsbG9jKTogQ2hlY2sgZm9yIGFyaXRobWV0aWMgb3ZlcmZsb3cKKwl3aGVuIGNvbXB1dGluZyBzaXplcy4KKwkqIGxpYi9lYml0c2V0LmMgKGViaXRzZXRfZWx0c19ncm93KTogTGlrZXdpc2UuCisKKwkqIGxpYi9sYml0c2V0LmMgKGxiaXRzZXRfZWx0X2ZpbmQpOiBTaW1wbGlmeSB3aW5kZXggY2FsY3VsYXRpb24KKwlhbmQgYXZvaWQgY2FzdCB0byB1bnNpZ25lZC4KKworMjAwMi0wOS0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGxpYi9hYml0c2V0LmMsIGxpYi9iYml0c2V0LmgsIGxpYi9iaXRzZXQuYywgbGliL2JpdHNldC5oLAorCSogbGliL2JpdHNldF9zdGF0cy5jLCBsaWIvYml0c2V0di5jLCBsaWIvZWJpdHNldC5jLCBsaWIvbGJpdHNldC5jOgorCVVwZGF0ZXMgZnJvbSBNaWNoYWVsIEhheWVzLgorCisyMDAyLTA5LTMwICBBcnQgSGFhcyAgPGFoYWFzQG5lb3NvZnQuY29tPgorCisJKiBjb25maWd1cmUuYWM6IFVwZGF0ZSBBQ19PVVRQVVQgYW5kIEFNX0NPTkZJR19IRUFERVIKKwlpbnZvY2F0aW9ucy4KKwkqIHRlc3RzL2N4eC10eXBlLmF0IChkZWNsYXJhdG9yKTogRG9uJ3QgcmVseSBvbiBOREVCVUcgYmVpbmcgbm90CisJZGVmaW5lZC4KKworMjAwMi0wOS0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlWZXJzaW9uIDEuNDljLgorCisyMDAyLTA5LTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogY29uZmlndXJlLmFjIChBTV9JTklUX0FVVE9NQUtFKTogV2UgX25lZWRfIDEuNy4KKwkoQmVjYXVzZSBvZiBBQ19MSUJTT1VSQ0UpLgorCisyMDAyLTA5LTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCVBsYXlpbmcgd2l0aCBBdXRvc2Nhbi4KKworCSogY29uZmlndXJlLmFjOiBSZW1vdmUgdGhlIG9sZCBMSUJPQkogdHdlYWtzLgorCShBQ19SRVBMQUNFX0ZVTkNTKTogQWRkIHN0cnJjaHIgYW5kIHN0cnRvbC4KKwkqIGxpYi9zdHJyY2hyLmM6IE5ldy4KKwkqIGxpYi9zdHJ0b2wuYzogTmV3LCBmcm9tIHRoZSBDb3JldXRpbHMgNC41LjEuCisKKzIwMDItMDktMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJUGxheWluZyB3aXRoIEF1dG9zY2FuLgorCisJKiBtNC9wcmVyZXEubTQgKGptX1BSRVJFUV9BUkdNQVRDSCwgam1fRlVOQ19BUkdNQVRDSCk6IE5ldy4KKwkqIGxpYi9NYWtlZmlsZS5hbSAobGliYmlzb25fYV9TT1VSQ0VTKTogTm8gbG9uZ2VyIGluY2x1ZGUKKwlhcmdtYXRjaC5jIGFuZCBhcmdtYXRjaC5oLCBzaW5jZSB0aGV5IGFyZSBBQ19MSUJTT1VSQ0UnZC4KKwkqIGxpYi9zdHJjYXNlY21wLmMsIGxpYi9zdHJuY2FzZWNtcC5jLCBsaWIvbWVtY21wLmM6IE5ldywgZnJvbSB0aGUKKwlDb3JldXRpbHMgNC41LjEuCisKKzIwMDItMDktMjQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkb2MvYmlzb24udGV4aW5mbyAoU3RhY2sgT3ZlcmZsb3cpOiB4cmVmIHRvIFJlY3Vyc2lvbi4KKwkoRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMsIFBhcnNlciBTdGFjayBPdmVyZmxvdyk6IE5ldy4KKworMjAwMi0wOS0xMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlQbGF5aW5nIHdpdGggYXV0b3NjYW4uCisKKwkqIHNyYy9yZWFkZXIuYyAoZ2V0X21lcmdlX2Z1bmN0aW9uKTogVXNlIHhzdHJkdXAsIG5vdCBzdHJkdXAuCisJKiBzcmMvZmlsZXMuYyAoc2tlbGV0b25fZmluZCk6IFJlbW92ZSwgdW51c2VkLgorCSogbTQvbWVtY21wLm00OiBOZXcsIGZyb20gdGhlIENvcmV1dGlscyA0LjUuMS4KKwkqIG00L3ByZXJlcS5tNCAoam1fUFJFUkVRX1FVT1RFQVJHKTogUnVuIGptX0ZVTkNfTUVNQ01QLgorCisyMDAyLTA5LTEzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogY29uZmlndXJlLmFjIChBTV9JTklUX0FVVE9NQUtFKTogUmVxdWlyZSBBdXRvbWFrZSAxLjYuMy4KKwkqIE1ha2VmaWxlLmFtIChBVVRPTUFLRV9PUFRJT05TKTogRG9uJ3QuCisKKzIwMDItMDktMTMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBjb25maWd1cmUuYWM6IFJlcXVpcmUgMi41NC4KKwlzL2ptX0ZVTkNfTUFMTE9DL0FDX0ZVTkNfTUFMTE9DLy4KKwlzL2ptX0ZVTkNfUkVBTExPQy9BQ19GVU5DX1JFQUxMT0MvLgorCSogbTQvYy1icy1hLm00LCBtNC9tYWxsb2MubTQsIG00L21ic3RhdGVfdC5tNCwgbTQvcmVhbGxvYy5tNDoKKwlSZW1vdmUsIHByb3ZpZGVkIGJ5IEF1dG9jb25mIG1hY3Jvcy4KKworMjAwMi0wOS0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIG00L3ByZXJlcS5tNDogVXBkYXRlLCBmcm9tIENvcmV1dGlscyA0LjUuMS4KKworMjAwMi0wOS0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIG00L3ByZXJlcS5tNDogVXBkYXRlLCBmcm9tIEZpbGV1dGlscyA0LjEuNS4KKwkqIGNvbmZpZ3VyZS5hYyAoam1fUFJFUkVRX1RFTVBOQU1FKTogSW52b2tlIGl0LgorCVJlcG9ydGVkIGJ5IE1hcnRpbiBNb2tyZWpzLgorCisyMDAyLTA5LTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3BhcnNlLWdyYW0ueTogQXNzb2NpYXRlIGEgaHVtYW4gcmVhZGFibGUgc3RyaW5nIHRvIGVhY2gKKwl0b2tlbiB0eXBlLgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoSW52YWxpZCBpbnB1dHMpOiBBZGp1c3QuCisKKzIwMDItMDktMTAgIEdhcnkgVi4gVmF1Z2hhbiAgPGdhcnlAZ251Lm9yZz4KKworCSogdGVzdHMvTWFrZWZpbGUuYW0gKCQoc3JjZGlyKS9wYWNrYWdlLm00KTogQmlzb24gbm93IHNoaXBzCisJd2l0aCBhbiBBdXRvY29uZi0yLjV4IHN0eWxlIGNvbmZpZ3VyZS5hYy4KKworMjAwMi0wOS0wNiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChDb25kaXRpb25zKTogTWFrZSBleHBsaWNpdCB0aGF0IHRoZSBHUEwKKwlleGNlcHRpb24gYXBwbGllcyBvbmx5IHRvIHlhY2MuYy4gIFRoaXMgaXMgYSBtb2RpZmljYXRpb24gb2YgYQorCXBhdGNoIG9yaWdpbmFsbHkgc3VnZ2VzdGVkIGJ5IEFraW0gRGVtYWlsbGUuCisKKzIwMDItMDktMDYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2MubTQgKGI0X2NvcHlyaWdodCk6IE1vdmUgdGhlIEdQTCBleGNlcHRpb24gY29tbWVudCBmcm9tCisJaGVyZSB0by4uLgorCSogZGF0YS95YWNjLmM6IGhlcmUuCisKKwkqIGRhdGEvbGFscjEuY2MgKHN0cnVjdCB5eWx0eXBlKTogRG9uJ3QgZGVmaW5lIGl0LCBzaW5jZSB3ZSB1c2UKKwlMb2NhdGlvblR5cGUuCisJKGI0X2x0eXBlKTogRGVmYXVsdCB0byB5eTo6TG9jYXRpb24gZnJvbSBsb2NhdGlvbi5oaC4KKworMjAwMi0wOS0wNCAgSmltIE1leWVyaW5nICA8amltQG1leWVyaW5nLm5ldD4KKworCSogZGF0YS95YWNjLmM6IEd1YXJkIHRoZSBkZWNsYXJhdGlvbiBvZiB5eXRva251bSBhbHNvIHdpdGgKKwlgI2lmZGVmIFlZUFJJTlQnLCBzbyBpdCBpcyBkZWNsYXJlZCBvbmx5IHdoZW4gdXNlZC4KKworMjAwMi0wOS0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGNvbmZpZ3VyZS5pbjogUmVuYW1lIGFzLi4uCisJKiBjb25maWd1cmUuYWM6IHRoaXMuCisJQnVtcCB0byAxLjQ5Yy4KKworMjAwMi0wOS0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9hc3NvYy5jLCBzcmMvY2xvc3VyZS5jLCBzcmMvZ3JhbS5jLCBzcmMvaW5qZWN0aW9ucy5jLAorCSogc3JjL2xhbHIuYywgc3JjL0xSMC5jLCBzcmMvcmVsYXRpb24uYywgc3JjL3RhYmxlcy5jOiBEb24ndAorCXRyYW5zbGF0ZSBtYWludGFpbmVyIG9ubHkgbWVzc2FnZXMuCisKKzIwMDItMDgtMTIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJVmVyc2lvbiAxLjQ5Yi4KKworCSogTWFrZWZpbGUuYW0gKFNVQkRJUlMpOiBSZW1vdmUgaW50bC4KKwkoRElTVENMRUFORklMRVMpOiBSZW1vdmUuCisJKiBORVdTOiBNZW50aW9uIHRoYXQgR05VIE00IGlzIG5vdyByZXF1aXJlZC4gIENsYXJpZnkgd2hhdCBpcworCW1lYW50IGJ5ICJsYXJnZXIgZ3JhbW1hcnMiLiAgTWVudGlvbiB0aGUgcHRfQlIgdHJhbnNsYXRpb24uCisJKiBjb25maWd1cmUuaW4gKEFDX0NIRUNLX0RFQ0xTKTogQWRkIGdldGVudiwgZ2V0b3B0LgorCShBTV9HTlVfR0VUVEVYVF9WRVJTSU9OKTogTmV3IG1hY3JvLCByZXBsYWNpbmcgR0VUVEVYVF9WRVJTSU9OIHZhci4KKwlCdW1wIHZlcnNpb24gZnJvbSAwLjExLjIgdG8gMC4xMS41LgorCShCSVNPTl9QUkVSRVFfU1RBR0UpOiBSZW1vdmUuCisJKEFNX0dOVV9HRVRURVhUKTogVXNlIGV4dGVybmFsIGdldHRleHQuCisJKEFDX09VVFBVVCk6IFJlbW92ZSBpbnRsL01ha2VmaWxlLgorCisJKiBjb25maWcvZGVwY29tcCwgY29uZmlnL2luc3RhbGwtc2g6IFN5bmMgd2l0aCBBdXRvbWFrZSAxLjYuMy4KKworCSogZGF0YS9nbHIuYzogSW5jbHVkZSBzdHJpbmcuaCwgZm9yIHN0cmxlbi4KKwkoeXlyZXBvcnRQYXJzZUVycm9yKTogVXNlIHNpemVfdCBmb3IgeXlzaXplLgorCSh5eV95eXBzdGFjayk6IE5vIGxvbmdlciBuZXN0ZWQgaW5zaWRlIHl5cHN0YXRlcywgYXMgbmVzdGVkCisJZnVuY3Rpb25zIGFyZSBub3QgcG9ydGFibGUuICBEbyBub3QgYXNzdW1lIHNpemVfdCBpcyB0aGUKKwlzYW1lIHdpZHRoIGFzIGludC4KKwkoeXlwc3RhdGVzKTogRG8gbm90IGFzc3VtZSB0aGF0IHB0cmRpZmZfdCBpcyB0aGUgc2FtZSB3aWR0aAorCWFzIGludCwgYW5kIHNpbWlsYXJseSBmb3IgeXlwb3NuIGFuZCBZWUlOREVYLgorCisJKiBkYXRhL3lhY2MuYzogRml4IGNvbW1lbnQgYWJvdXQgYCQkID0gJDEnOiBpdCBjYW4gY29weSBnYXJiYWdlLgorCisJKiBsaWIvTWFrZWZpbGUuYW0gKElOQ0xVREVTKTogRG8gbm90IGluY2x1ZGUgZnJvbSB0aGUgaW50bAorCWRpcmVjdG9yeSwgd2hpY2ggaGFzIGJlZW4gcmVtb3ZlZC4KKwkqIHNyYy9NYWtlZmlsZS5hbSAoSU5DTFVERVMpOiBMaWtld2lzZS4KKworCSogbGliL01ha2VmaWxlLmFtIChsaWJiaXNvbl9hX1NPVVJDRVMpOiBBZGQgdW5sb2NrZWQtaW8uaC4KKwkoYml0c2V0c19zb3VyY2VzLCBhZGRpdGlvbmFsX2JpdHNldHNfc291cmNlcywgdGltZXZhcnNfc291cmNlcyk6CisJTmV3IHZhcnMuCisKKwkqIGxpYi9NYWtlZmlsZS5hbSAobGliYmlzb25fYV9TT1VSQ0VTKTogQXZvaWQgKz0sIGEgR05VIG1ha2UgZXh0ZW5zaW9uLgorCSogdGVzdHMvTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBMaWtld2lzZS4KKworCSogbGliL2FiaXRzZXQuYyAoYWJpdHNldF9yZXZlcnNlX2xpc3QsIGViaXRzZXRfcmV2ZXJzZV9saXN0KToKKwlEbyBub3QgYXNzdW1lIHRoYXQgYml0c2V0X3dpbmRleCBpcyB0aGUgc2FtZSB3aWR0aCBhcyB1bnNpZ25lZC4KKworCSogbGliL2FiaXRzZXQuYyAoYWJpdHNldF91bnVzZWRfY2xlYXIpOiBEbyBub3QgYXNzdW1lIHRoYXQKKwliaXRzZXRfd29yZCBpcyB0aGUgc2FtZSB3aWR0aCBhcyBpbnQuCisJKiBsaWIvYmJpdHNldC5oIChCSVRTRVRfSU5ERVhfTUFYLCBCSVRTRVRfTVNCKTogTGlrZXdpc2UuCisJKiBsaWIvYml0c2V0LmggKGJpdHNldF9zZXQsIGJpdHNldF9yZXNldCk6IExpa2V3aXNlLgorCSogbGliL2JpdHNldF9zdGF0cy5jIChiaXRzZXRfc3RhdHNfc2V0LCBiaXRzZXRfc3RhdHNfcmVzZXQpOiBMaWtld2lzZS4KKwkqIGxpYi9lYml0c2V0LmMgKGViaXRzZXRfc2V0LCBlYml0c2V0X3Jlc2V0KTogTGlrZXdpc2UuCisJKiBsaWIvbGJpdHNldC5jIChsYml0c2V0X3NldCwgbGJpdHNldF9yZXNldCk6IExpa2V3aXNlLgorCisJKiBsaWIvYWJpdHNldC5jIChhYml0c2V0X29wMSk6IFVzZSAtMSwgbm90IH4wLCBhcyBtZW1zZXQgYXJnIChmb3IKKwlwb3J0YWJpbGl0eSB0byBvbmUncyBjb21wbGVtZW50IGhvc3RzISkuCisJKiBsaWIvZWJpdHNldC5jIChlYml0c2V0X29wMSk6IExpa2V3aXNlLgorCSogbGliL2xiaXRzZXQuYyAobGJpdHNldF9vcDEpOiBMaWtld2lzZS4KKworCSogbGliL2FyZ21hdGNoLmMsIGxpYi9xdW90ZWFyZy5jLCBxdW90ZWFyZy5oOiBTeW5jIHdpdGggR05VIHRhci4KKwkqIGxpYi9hcmdtYXRjaC5oLCBsaWIvYmFzZW5hbWUuYywgbGliL2Rpcm5hbWUuYywgbGliL2Rpcm5hbWUuaCwKKwlsaWIvaGFzaC5jLCBsaWIvaGFzaC5oLCBsaWIvc3Rybmxlbi5jLCBsaWIveG1hbGxvYy5jOgorCVN5bmMgd2l0aCBmaWxldXRpbHMuCisJKiBsaWIvZXJyb3IuYywgbGliL2dldG9wdC5jLCBsaWIvZ2V0b3B0LmgsIGxpYi9nZXRvcHQxLmMsCisJbGliL2dldHRleHQuaDogU3luYyB3aXRoIGRpZmZ1dGlscy4KKworCSogbGliL21lbXJjaHIuYywgbGliL21rc3RlbXAuYywgbGliL3N0cmNoci5jLCBsaWIvc3Rybmxlbi5jLAorCWxpYi9zdHJzcG4uYywgbGliL3RlbXBuYW1lLmM6IFVzZSBHUEwsIG5vdCBMR1BMLgorCisJKiBsaWIvb2JzdGFjay5jLCBsaWIvb2JzdGFjay5oOiBTeW5jIHdpdGggZmlsZXV0aWxzLCBleGNlcHQgdXNlCisJUFJPVE9UWVBFUyB0byBjaGVjayBmb3IgcHJvdG90eXBlcywgYW5kICJkZWZpbmVkIF9fU1REQ19fIiB0bworCWNoZWNrIGZvciB2b2lkICouCisKKwkqIGxpYi9iYml0c2V0LmggKEJJVFNFVF9XT1JEX0JJVFMpOiBOb3cgb2YgdHlwZSB1bnNpZ25lZCwgbm90CisJc2l6ZV90OyB0aGUgb2xkIHZlcnNpb24gdHJpZWQgdG8gZG8gdGhpcyBidXQgY2FzdGVkIGltcHJvcGVybHkuCisJKGJpdHNldF9iaW5kZXgsIGJpdHNldF93aW5kZXgpOiBOb3cgc2l6ZV90LCBub3QgdW5zaWduZWQgbG9uZy4KKwkoYml0c2V0X3Rlc3QpOiBOb3cgcmV0dXJucyBpbnQsIG5vdCB1bnNpZ25lZCBsb25nLgorCisJKiBsaWIvYml0c2V0X3N0YXRzLmM6IEluY2x1ZGUgImdldHRleHQuaCIuCisJKF8pOiBOZXcgbWFjcm8uCisJKGJpdHNldF9zdGF0c19zZXQsIGJpdHNldF9zdGF0c19yZXNldCwgYml0c2V0X3N0YXRzX3Rlc3QpOiBEb24ndAorCW5hbWUgbG9jYWxzICJpbmRleCIsIGFzIGl0IGdlbmVyYXRlcyB1bm5lY2Vzc2FyeSB3YXJuaW5ncyBvbiBzb21lCisJaG9zdHMgdGhhdCBoYXZlIGFuICJpbmRleCIgZnVuY3Rpb24uCisKKwkqIGxpYi9iaXRzZXRfc3RhdHMuYyAoYml0c2V0X3N0YXRzX3ByaW50XzEsIGJpdHNldF9zdGF0c19wcmludCwKKwliaXRzZXRfc3RhdHNfcmVhZCwgYml0c2V0X3N0YXRzX3dyaXRlKTogV3JhcCBzdHJpbmdzIGluIF8oKSBpZgorCXRoZXkgbmVlZCB0cmFuc2xhdGlvbi4KKwkqIHNyYy9MUjAuYyAoc3RhdGVfbGlzdF9hcHBlbmQsIG5ld19pdGVtc2V0cywgZ2V0X3N0YXRlLAorCWFwcGVuZF9zdGF0ZXMsIGdlbmVyYXRlX3N0YXRlcyk6IExpa2V3aXNlLgorCSogc3JjL2Fzc29jLmMgKGFzc29jX3RvX3N0cmluZyk6IExpa2V3aXNlLgorCSogc3JjL2Nsb3N1cmUuYyAocHJpbnRfY2xvc3VyZSwgc2V0X2ZpcnN0cywgY2xvc3VyZSk6IExpa2V3aXNlLgorCSogc3JjL2dyYW0uYyAoZ3JhbW1hcl9kdW1wKTogTGlrZXdpc2UuCisJKiBzcmMvaW5qZWN0aW9ucy5jIChpbmplY3Rpb25zX2NvbXB1dGUpOiBMaWtld2lzZS4KKwkqIHNyYy9sYWxyLmMgKGxvb2thaGVhZHNfcHJpbnQpOiBMaWtld2lzZS4KKwkqIHNyYy9yZWxhdGlvbi5jIChyZWxhdGlvbl90cmFuc3Bvc2UpOiBMaWtld2lzZS4KKwkqIHNyYy9zY2FuLWdyYW0ubDogTGlrZXdpc2UuCisJKiBzcmMvdGFibGVzLmMgKHRhYmxlX2dyb3csIHBhY2tfdmVjdG9yKTogTGlrZXdpc2UuCisKKwkqIG00L01ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogUmVtb3ZlIGNvZGVzZXQubTQsCisJZ2xpYmMyMS5tNCwgaXNjLXBvc2l4Lm00IGxjbWVzc2FnZS5tNCwgc3RhZ2UubTQuCisJKiBtNC9tYWxsb2MubTQsIG00L3JlYWxsb2MubTQ6IFN5bmMgd2l0aCBkaWZmdXRpbHMuCisJKiBtNC9tYnN0YXRlX3QubTQ6IFN5bmMgd2l0aCBmaWxldXRpbHMuCisJKiBtNC9wcmVyZXEubTQgKGptX1BSRVJFUV9RVU9URUFSRyk6IEFDX01CU1RBVEVfVCAtPiBBQ19UWVBFX01CU1RBVEVfVC4KKworCSogcG8vTElOR1VBUzogQWRkIHB0X0JSLgorCSogcG8vUE9URklMRVMuaW46IEFkZCBzcmMvYXNzb2MuYywgc3JjL2Nsb3N1cmUuYywgc3JjL2dyYW0uYywKKwlzcmMvbWFpbi5jLCBzcmMvcmVsYXRpb24uYywgc3JjL3N0YXRlLmMsIGxpYi9iaXRzZXRfc3RhdHMuYywKKwlsaWIvdGltZXZhci5jLgorCVVzZSBzcmMvcGFyc2UtZ3JhbS55IGluc3RlYWQgb2Ygc3JjL3BhcnNlLWdyYW0uYywgYXMgdGhlIGdldHRleHQKKwltYW51YWwgcmVjb21tZW5kcy4KKwlTaW1pbGFybHksIHVzZSBzcmMvc2Nhbi1ncmFtLmwgaW5zdGVhZCBvZiBzcmMvc2Nhbi1ncmFtLmMuCisKKwkqIHNyYy9jb21wbGFpbi5jIChzdHJlcnJvcl9yKTogUmVtb3ZlIGRlY2w7IG5vdCBuZWVkZWQuCisJKHN0cmVycm9yKTogVXNlIHNhbWUgcGF0dGVybiBhcyAuLi9saWIvZXJyb3IuYy4KKworCSogc3JjL2ZpbGVzLmMsIHNyYy9maWxlcy5oIChjb21wdXRlX2hlYWRlcl9tYWNybyk6IFJlbW92ZTsgdW51c2VkLgorCisJKiBzcmMvZ3JhbS5jIChncmFtbWFyX2R1bXApOiBEbyBub3QgYXNzdW1lIHB0cmRpZmZfdCBmaXRzIGluIGludC4KKworCSogc3JjL21haW4uYyAobWFpbik6IENhc3QgcmVzdWx0IG9mIGJpbmR0ZXh0ZG9tYWluIGFuZCB0ZXh0ZG9tYWluCisJdG8gdm9pZCwgdG8gYXZvaWQgYSBHQ0Mgd2FybmluZyB3aGVuIC0tZGlzYWJsZS1ubHMgaXMgaW4gZWZmZWN0LgorCisJKiBzcmMvc2Nhbi1ncmFtLmw6IFVzZSBzdHJpbmdzIHJhdGhlciB0aGFuIGVzY2FwZXMgd2hlbiBwb3NzaWJsZSwKKwl0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIHdhcm5pbmdzIGZyb20geGdldHRleHQuCisJKGhhbmRsZV9hY3Rpb25fZG9sbGFyLCBoYW5kbGVfYWN0aW9uX2F0KTogRG9uJ3QgdXNlIGlzZGlnaXQsCisJYXMgaXQgbWlzaGFuZGxlcyBuZWdhdGl2ZSBjaGFycyBhbmQgaXQgbWF5IG5vdCB3b3JrIGFzIGV4cGVjdGVkCisJb3V0c2lkZSB0aGUgQyBsb2NhbGUuCisKKwkqIHNyYy9zeW10YWIuYyAoc3ltYm9sX2dldCk6IERvbid0IGNhc3QgTEhTIG9mIGFuIGFzc2lnbm1lbnQ7CisJdGhpcyBpcyBhIEdDQyBleHRlbnNpb24gYW5kIGlzIG5vdCBwb3J0YWJsZSB0byBvdGhlciBjb21waWxlcnMuCisKKwkqIHNyYy9zeXN0ZW0uaCAoYWxsb2NhKTogVXNlIHNhbWUgcGF0dGVybiBhcyAuLi9saWIvZXJyb3IuYy4KKwlEbyBub3QgaW5jbHVkZSA8Y3R5cGUuaD47IG5vIGxvbmdlciBuZWVkZWQuCisJRG8gbm90IGluY2x1ZGUgPG1hbGxvYy5oPjsgbm8gbG9uZ2VyIG5lZWRlZCAoYW5kIGdlbmVyYXRlcworCXdhcm5pbmdzIG9uIE9wZW5CU0QgMy4wKS4KKworCSogdGVzdHMvY3h4LXR5cGUuYXQgKHl5bGV4KTogRG8gbm90IHBhc3Mgc2lnbmVkIGNoYXIgdG8gaXN1cHBlcjsKKwlpdCdzIG5vdCBwb3J0YWJsZS4KKworCSogdGVzdHMvcmVncmVzc2lvbi5hdDogRG8gbm90IHVzZSAnY2MgLWMgaW5wdXQuYyAtbyBpbnB1dCc7CisJU3VuIEMgcmVqZWN0cyB0aGlzLiAgSW5zdGVhZCwgdXNlICdjYyAtYyBpbnB1dC5jIC1vIGlucHV0Lm8nLgorCisJKiB0ZXN0cy9zeW5jbGluZXMuYXQgKEFDX1NZTkNMSU5FU19DT01QSUxFKTogQWNjZXB0IGFueSBub256ZXJvCisJZXhpdCBzdGF0dXMgYXMgZmFpbHVyZSwgbm90IGp1c3QgZXhpdCBzdGF0dXMgMS4gIFN1biBDIGV4aXRzCisJd2l0aCBzdGF0dXMgMiBzb21ldGltZXMuCisKKwkqIHRlc3RzL3RvcnR1cmUuYXQgKEFUX0lOQ1JFQVNFX0RBVEFfU0laRSk6IE5ldyBtYWNyby4KKwlVc2UgaXQgZm9yIHRoZSB0d28gbGFyZ2UgdGVzdHMuCisKKzIwMDItMDgtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvY29uZmxpY3RzLmMgKGNvbmZsaWN0c19vdXRwdXQpOiBEb24ndCBvdXRwdXQgcnVsZXMgbmV2ZXIKKwlyZWR1Y2VkIGhlcmUsIHNpbmNlIGFueXdheSB0aGF0IGNvbXB1dGF0aW9uIGRvZXNuJ3Qgd29yay4KKwkqIHNyYy9ncmFtLmgsIHNyYy9ncmFtLmggKHJ1bGVfZmlsdGVyX3QsIHJ1bGVfdXNlZnVsX3ApCisJKHJ1bGVfdXNlbGVzc19wLCBydWxlX25ldmVyX3JlZHVjZWRfcCk6IE5ldy4KKwkoZ3JhbW1hcl9ydWxlc19wYXJ0aWFsX3ByaW50KTogVXNlIGEgZmlsdGVyIGluc3RlYWQgb2YgYSByYW5nZS4KKwlEaXNwbGF5IHRoZSB0aXRsZSBvbmx5IGlmIG5lZWRlZC4KKwkoZ3JhbW1hcl9ydWxlc19wcmludCk6IEFkanVzdC4KKwkoZ3JhbW1hcl9ydWxlc19uZXZlcl9yZWR1Y2VkX3JlcG9ydCk6IE5ldy4KKwkqIHNyYy90YWJsZXMuYyAoYWN0aW9uX3Jvdyk6IE1vdmUgdGhlIGNvbXB1dGF0aW9uIG9mIHJ1bGVzIG5ldmVyCisJcmVkdWNlZCB0by4uLgorCSh0b2tlbl9hY3Rpb25zKTogaGVyZS4KKwkqIHNyYy9tYWluLmMgKG1haW4pOiBNYWtlIHRoZSBwYXJzZXIgYmVmb3JlIG1ha2luZyB0aGUgcmVwb3J0LCBzbworCXRoYXQgcnVsZXMgbmV2ZXIgcmVkdWNlZCBhcmUgY29tcHV0ZWQuCisJQ2FsbCBncmFtbWFyX3J1bGVzX25ldmVyX3JlZHVjZWRfcmVwb3J0LgorCSogc3JjL3ByaW50LmMgKHByaW50X3Jlc3VsdHMpOiBSZXBvcnQgcnVsZXMgbmV2ZXIgcmVkdWNlZC4KKwkqIHRlc3RzL2NvbmZsaWN0cy5hdCwgdGVzdHMvcmVkdWNlLmF0OiBBZGp1c3QuCisKKzIwMDItMDgtMDEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJSW5zdGVhZCBvZiBhdHRhY2hpbmcgbG9va2FoZWFkcyBhbmQgZHVwbGljYXRpbmcgdGhlIHJ1bGVzIGJlaW5nCisJcmVkdWNlZCBieSBhIHN0YXRlLCBhdHRhY2ggdGhlIGxvb2thaGVhZHMgdG8gdGhlIHJlZHVjdGlvbnMuCisKKwkqIHNyYy9zdGF0ZS5oIChzdGF0ZV90KTogUmVtb3ZlIHRoZSBgbG9va2FoZWFkcycsCisJYGxvb2thaGVhZHNfcnVsZScgbWVtYmVyLgorCShyZWR1Y3Rpb25zX3QpOiBBZGQgYSBgbG9va2FoZWFkcycgbWVtYmVyLgorCVVzZSBhIHJlZ3VsYXIgYXJyYXkgZm9yIHRoZSBgcnVsZXMnLgorCSogc3JjL3N0YXRlLmMgKHJlZHVjdGlvbnNfbmV3KTogSW5pdGlhbGl6ZSB0aGUgbG9va2FoZWFkcyBtZW1iZXIKKwl0byAwLgorCShzdGF0ZV9ydWxlX2xvb2thaGVhZHNfcHJpbnQpOiBBZGp1c3QuCisJKiBzcmMvc3RhdGUuaCwgc3JjL3N0YXRlLmMgKHN0YXRlX3JlZHVjdGlvbnNfZmluZCk6IE5ldy4KKwkqIHNyYy9jb25mbGljdHMuYyAocmVzb2x2ZV9zcl9jb25mbGljdCwgc2V0X2NvbmZsaWN0cykKKwkoY291bnRfcnJfY29uZmxpY3RzKTogQWRqdXN0LgorCSogc3JjL2xhbHIuYyAoTEFydWxlKTogUmVtb3ZlLgorCShhZGRfbG9va2JhY2tfZWRnZSk6IEFkanVzdC4KKwkoc3RhdGVfbG9va2FoZWFkc19jb3VudCk6IE5ldy4KKwkoc3RhdGVzX2xvb2thaGVhZHNfaW5pdGlhbGl6ZSk6IE1lcmdlIGludG8uLi4KKwkoaW5pdGlhbGl6ZV9MQSk6IHRoaXMuCisJKGxhbHJfZnJlZSk6IEFkanVzdC4KKwkqIHNyYy9tYWluLmMgKG1haW4pOiBEb24ndCBmcmVlIG51bGxhYmxlIGFuZCBkZXJpdmVzIHRvbyBlYXJseTogaXQKKwlpcyB1c2VkIGJ5IC0tdmVyYm9zZS4KKwkqIHNyYy9wcmludC5jLCBzcmMvcHJpbnRfZ3JhcGguYywgc3JjL3RhYmxlcy5jOiBBZGp1c3QuCisKKzIwMDItMDgtMDEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvZGVyaXZlcy5oLCBzcmMvZGVyaXZlcy5jIChkZXJpdmVzKTogQSBgcnVsZV90KioqJyBpbnN0ZWFkIG9mCisJYHJ1bGVfbnVtYmVyX3QqKicuCisJKHNldF9kZXJpdmVzLCBmcmVlX2Rlcml2ZXMpOiBSZW5hbWUgYXMuLi4KKwkoZGVyaXZlc19jb21wdXRlLCBkZXJpdmVzX2ZyZWUpOiB0aGlzLgorCUFkanVzdCBhbGwgZGVwZW5kZW5jaWVzLgorCSogc3JjL251bGxhYmxlLmMgKHNldF9udWxsYWJsZSwgZnJlZV9udWxsYWJsZSk6IFJlbmFtZSBhcy4uLgorCShudWxsYWJsZV9jb21wdXRlLCBudWxsYWJsZV9mcmVlKTogdGhlc2UuCisJKHJ1bGVfbGlzdF90KTogU3RvcmUgcnVsZV90ICosIG5vdCBydWxlX251bWJlcl90LgorCSogc3JjL3N0YXRlLmMgKHN0YXRlX3J1bGVfbG9va2FoZWFkc19wcmludCk6IERpcmVjdGx5IGNvbXBhcmUgcnVsZQorCXBvaW50ZXJzLCBpbnN0ZWFkIG9mIHRoZWlyIG51bWJlcnMuCisJKiBzcmMvbWFpbi5jIChtYWluKTogQ2FsbCBudWxsYWJsZV9mcmVlLCBhbmQgZGVyaXZlc19mcmVlIGVhcmxpZXIsCisJYXMgdGhleSB3ZXJlIGxvIGxvbmdlciB1c2VkLgorCisyMDAyLTA4LTAxICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogbGliL3RpbWV2YXIuYyAoZ2V0X3RpbWUpOiBJbmNsdWRlIGNoaWxkcmVuIHRpbWUuCisJKiBzcmMvbGFsci5oIChMQSwgTEFydWxlKTogRG9uJ3QgZXhwb3J0IHRoZW06IHVzZWQgd2l0aCB0aGUKKwlzdGF0ZV90LgorCSogc3JjL2xhbHIuYyAoTEEsIExBcnVsZSk6IFN0YXRpYy4KKwkqIHNyYy9sYWxyLmgsIHNyYy9sYWxyLmMgKGxhbHJfZnJlZSk6IE5ldy4KKwkqIHNyYy9tYWluLmMgKG1haW4pOiBDYWxsIGl0LgorCSogc3JjL3RhYmxlcy5jIChwYWNrX3ZlY3Rvcik6IENoZWNrIHdoZXRoZXIgbG9jIGlzID49IHRvIHRoZQorCXRhYmxlX3NpemUsIG5vdCA+LgorCShwYWNrX3RhYmxlcyk6IERvbid0IGZyZWUgZnJvbXMsIHRvcywgY29uZmxpY3RfdG9zLCBhbmQgcG9zLi4uCisJKHRhYmxlc19nZW5lcmF0ZSk6IGRvIGl0LCBzaW5jZSB0aGF0J3MgYWxzbyBpdCB3aGljaCBhbGxvY2F0ZXMKKwl0aGVtLgorCURvbid0IGZyZWUgTEEgYW5kIExBcnVsZSwgbWFpbiBkb2VzLgorCisyMDAyLTA3LTMxICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCVNlcGFyYXRlIHBhcnNlciB0YWJsZXMgY29tcHV0YXRpb24gYW5kIG91dHB1dC4KKworCSogc3JjL291dHB1dC5jIChudmVjdG9ycywgYmFzZV90LCBiYXNlLCBiYXNlX25pbmYsIGNvbmZsaWN0X3RhYmxlKQorCShjb25mbGljdF9saXN0LCBjb25mbGljdF9saXN0X2NudCwgdGFibGUsIGNoZWNrLCB0YWJsZV9uaW5mKQorCSh5eWRlZmdvdG8sIHl5ZGVmYWN0LCBoaWdoKTogTW92ZSB0by4uLgorCSogc3JjL3RhYmxlcy5oLCBzcmMvdGFibGVzLmM6IGhlcmUuCisJKiBzcmMvb3V0cHV0LmMgKHZlY3Rvcl9udW1iZXJfdCwgVkVDVE9SX05VTUJFUl9NQVgpCisJKFZFQ1RPUl9OVU1CRVJfTUlOLCBzdGF0ZV9udW1iZXJfdG9fdmVjdG9yX251bWJlcikKKwkoc3ltYm9sX251bWJlcl90b192ZWN0b3JfbnVtYmVyLCBudmVjdG9ycywgQkFTRV9NQVgsIEJBU0VfTUlOKQorCShmcm9tcywgdG9zLCBjb25mbGljdF90b3MsIHRhbGx5LCB3aWR0aCwgYWN0aW9uX3QsIEFDVElPTl9NQVgpCisJKEFDVElPTl9NSU4sIGFjdHJvdywgb3JkZXIsIG5lbnRyaWVzLCBwb3MsIGNvbmZscm93KQorCShjb25mbGljdF9saXN0X2ZyZWUsIHRhYmxlX3NpemUsIGxvd3plcm8sIHRhYmxlX2dyb3csIGNvbmZsaWN0X3JvdykKKwkoYWN0aW9uX3Jvdywgc2F2ZV9yb3csIHRva2VuX2FjdGlvbnMsIHNhdmVfY29sdW1uLCBkZWZhdWx0X2dvdG8pCisJKGdvdG9fYWN0aW9ucywgc29ydF9hY3Rpb25zLCBtYXRjaGluZ19zdGF0ZSwgcGFja192ZWN0b3IpCisJKHRhYmxlX25pbmZfcmVtYXAsIHBhY2tfdGFibGUsIHByZXBhcmVfYWN0aW9ucyk6IE1vdmUgdG8uLi4KKwkqIHNyYy90YWJsZXMuYzogaGVyZS4KKwkqIHNyYy90YWJsZXMuaCwgc3JjL3RhYmxlcy5jKHRhYmxlc19nZW5lcmF0ZSwgdGFibGVzX2ZyZWUpOiBOZXcuCisJKiBzcmMvb3V0cHV0LmMgKHRva2VuX2FjdGlvbnMsIG91dHB1dF9iYXNlLCBvdXRwdXRfY29uZmxpY3RzKQorCShvdXRwdXRfY2hlY2spOiBNZXJnZSBpbnRvLi4uCisJKHByZXBhcmVfYWN0aW9ucyk6IHRoaXMuCisJKGFjdGlvbnNfb3V0cHV0KTogUmVuYW1lIGFzLi4uCisJKHVzZXJfYWN0aW9uc19vdXRwdXQpOiB0aGlzLgorCSogc3JjL21haW4uYyAobWFpbik6IENhbGwgdGFibGVzX2dlbmVyYXRlIGFuZCB0YWJsZXNfZnJlZS4KKworMjAwMi0wNy0zMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlTdGVhbCBHQ0MncyAtLXRpbWUtcmVwb3J0IHN1cHBvcnQuCisKKwkqIGxpYi90aW1ldmFyLmMsIGxpYi90aW1ldmFyLmgsIGxpYi90aW1ldmFyLmRlZjogTmV3LAorCXN0b2xlbi9hZGp1c3RlZCBmcm9tIEdDQy4KKwkqIG00L3N0YWdlLm00OiBSZW1vdmUgdGltZSByZWxhdGVkIGNoZWNrcy4KKwkqIG00L3RpbWV2YXIubTQ6IE5ldy4KKwkqIGNvbmZpZ3VyZS5pbjogQWRqdXN0LgorCSogc3JjL3N5c3RlbS5oOiBBZGp1c3QgdG8gdXNpbmcgdGltZXZhci5oLgorCSogc3JjL2dldGFyZ3MuaCwgc3JjL2dldGFyZ3MuYzogU3VwcG9ydCB0cmFjZV90aW1lIGZvcgorCS0tdHJhY2U9dGltZS4KKwkqIHNyYy9tYWluLmMgKHN0YWdlKTogUmVtb3ZlLgorCShtYWluKTogUmVwbGFjZSBgc3RhZ2UnIGludm9jYXRpb25zIHdpdGggdGltZXZhciBjYWxscy4KKwkqIHNyYy9vdXRwdXQuYzogSW5zZXJ0IHBlcnRpbmVudCB0aW1ldmFyIGNhbGxzLgorCisyMDAyLTA3LTMxICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCUxldCAtLXRyYWNlIGhhdmUgYXJndW1lbnRzLgorCisJKiBzcmMvZ2V0YXJncy5oIChlbnVtIHRyYWNlX2UpOiBOZXcuCisJKiBzcmMvZ2V0YXJncy5jICh0cmFjZV9hcmdzLCB0cmFjZV90eXBlcywgdHJhY2VfYXJnbWF0Y2gpOiBOZXcuCisJKGxvbmdfb3B0aW9ucywgc2hvcnRfb3B0aW9ucyk6IC0tdHJhY2UvLVQgdGFrZXMgYW4gb3B0aW9uYWwKKwlhcmd1bWVudC4KKwlDaGFuZ2UgYWxsIHRoZSB1c2VzIG9mIHRyYWNlX2ZsYWcgdG8gcmVmbGVjdCB0aGUgbmV3IGZsYWdzLgorCSogdGVzdHMvc2V0cy5hdCAoRmlyc3RzLCBOdWxsYWJsZSwgQnJva2VuIENsb3N1cmUpOiBVc2UgLS10cmFjZT1zZXRzLgorCisJU3RyZW5ndGhlbiBgc3RhZ2UnIHBvcnRhYmlsaXR5LgorCisJKiBtNC9zdGFnZS5tNCAoQklTT05fUFJFUkVRX1NUQUdFKTogTmV3LgorCSogY29uZmlndXJlLmluOiBVc2UgaXQuCisJRG9uJ3QgY2hlY2sgZm9yIG1hbGxvYy5oIGFuZCBzeXMvdGltZXMuaC4KKwkqIHNyYy9zeXN0ZW0uaDogSW5jbHVkZSB0aGVtIHdoZW4gYXBwcm9wcmlhdGUuCisJKiBzcmMvbWFpbi5jIChzdGFnZSk6IENvbXBpbGUgb25seSB3aGVuIG1hbGxpbmZvLCBzdHJ1Y3QgbWFsbGluZm8sCisJdGltZXMgYW5kIHN0cnVjdCB0bXMgYXJlIGF2YWlsYWJsZS4KKworMjAwMi0wNy0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlJbiB2ZXJib3NlIHBhcnNlIGVycm9yIG1lc3NhZ2UsIGRvbid0IHJlcG9ydCBgZXJyb3InIGFzIGFuCisJZXhwZWN0ZWQgdG9rZW4uCisJKiB0ZXN0cy9hY3Rpb25zLmF0IChQcmludGVycyBhbmQgRGVzdHJ1Y3RvcnMpOiBBZGp1c3QuCisJKiB0ZXN0cy9jYWxjLmF0IChDYWxjdWxhdG9yICQxKTogQWRqdXN0LgorCSogZGF0YS95YWNjLmMsIGRhdGEvZ2xyLmMsIGRhdGEvbGFscjEuYzogV2hlbiBtYWtpbmcgdGhlIHZlcmJvc2UKKwllcnJvciBtZXNzYWdlLCBkbyBub3QgcmVwb3J0IHRoZSBwYXJzZXIgYWNjZXB0cyB0aGUgZXJyb3IgdG9rZW4gaW4KKwl0aGF0IHN0YXRlLgorCisyMDAyLTA3LTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCU5vcm1hbGl6ZSBjb25mbGljdCByZWxhdGVkIG1lc3NhZ2VzLgorCisJKiBzcmMvY29tcGxhaW4uaCwgc3JjL2NvbXBsYWluLmMgKHdhcm4sIGNvbXBsYWluKTogTmV3LgorCSogc3JjL2NvbmZsaWN0cy5jIChjb25mbGljdHNfcHJpbnQpOiBVc2UgdGhlbS4KKwkoY29uZmxpY3RfcmVwb3J0X3lhY2MpOiBOZXcsIGV4dHJhY3RlZCBmcm9tLi4uCisJKGNvbmZsaWN0c19wcmludCk6IGhlcmUuCisJKiB0ZXN0cy9jb25mbGljdHMuYXQsIHRlc3RzL2V4aXN0aW5nLmF0OiBBZGp1c3QuCisKKzIwMDItMDctMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJUmVwb3J0IHJ1bGVzIHdoaWNoIGFyZSBuZXZlciByZWR1Y2VkIGJ5IHRoZSBwYXJzZXI6IHRob3NlIGhpZGRlbgorCWJ5IGNvbmZsaWN0cy4KKworCSogc3JjL0xSMC5jIChzYXZlX3JlZHVjdGlvbnMpOiBEb24ndCBtYWtlIHRoZSBmaW5hbCBzdGF0ZSB0b28KKwlkaWZmZXJlbnQ6IHNhdmUgaXRzIHJlZHVjdGlvbiAoYWNjZXB0KSBpbnN0ZWFkIG9mIGhhdmluZyBhIHN0YXRlCisJd2l0aG91dCBhbnkgYWN0aW9uIChubyBzaGlmdCBvciBnb3RvLCBubyByZWR1Y2UpLgorCU5vdGU6IHRoZSBmaW5hbCBzdGF0ZSBpcyBub3cgYSBgYHJlZ3VsYXInJyBzdGF0ZSwgaS5lLiwgdGhlCisJcGFyc2VycyBub3cgY29udGFpbiBgcmVkdWNlIDAnIGFzIGRlZmF1bHQgcmVkdWN0aW9uLgorCU5ldmVydGhlbGVzcywgc2luY2UgdGhleSBkZWNpZGUgdG8gYGFjY2VwdCcgd2hlbiB5eXN0YXRlID0KKwlmaW5hbF9zdGF0ZSwgdGhleSBzdGlsbCB3aWxsIG5vdCByZWR1Y2UgcnVsZSAwLgorCSogc3JjL3ByaW50LmMgKHByaW50X2FjdGlvbnMsIHByaW50X3JlZHVjdGlvbik6IEFkanVzdC4KKwkqIHNyYy9vdXRwdXQuYyAoYWN0aW9uX3Jvdyk6IFRyYWNrIHJlZHVjZWQgcnVsZXMuCisJKHRva2VuX2FjdGlvbnMpOiBSZXBvcnQgcnVsZXMgbmV2ZXIgcmVkdWNlZC4KKwkqIHRlc3RzL2NvbmZsaWN0cy5hdCwgdGVzdHMvcmVncmVzc2lvbi5hdDogQWRqdXN0LgorCisyMDAyLTA3LTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCWBzdGFnZScgd2FzIGFjY2lkZW50YWxseSBpbmNsdWRlZCBpbiBhIHByZXZpb3VzIHBhdGNoLgorCUluaXRpYXRlIGl0cyBhdXRvY29uZmlzY2F0aW9uLgorCisJKiBjb25maWd1cmUuaW46IExvb2sgZm9yIG1hbGxvYy5oIGFuZCBzeXMvdGltZXMuaC4KKwkqIHNyYy9tYWluLmMgKHN0YWdlKTogQWRqdXN0LgorCVJlcG9ydCBvbmx5IHdoZW4gdHJhY2VfZmxhZy4KKworMjAwMi0wNy0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9zdGF0ZS5oLCBzcmMvc3RhdGUuYyAodHJhbnNpdGlvbnNfdCk6IEhvbGRzIHN0YXRlX3QqJ3MsIG5vdAorCXN0YXRlX251bWJlcl90LgorCShlcnJzX3QpOiBzeW1ib2xfdCosIG5vdCBzeW1ib2xfbnVtYmVyX3QuCisJKHJlZHVjdGlvbnNfdCk6IHJ1bGVfdCosIG5vdCBydWxlX251bWJlcl90LgorCShGT1JfRUFDSF9TSElGVCk6IE5ldy4KKwkqIHNyYy9MUjAuYywgc3JjL2NvbmZsaWN0cy5jLCBzcmMvbGFsci5jLCBzcmMvb3V0cHV0LmMKKwkqIHNyYy9wcmludC5jLCBzcmMvcHJpbnRfZ3JhcGguYzogQWRqdXN0LgorCisyMDAyLTA3LTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCVVzZSAkYWNjZXB0IGFuZCAkZW5kLCBhcyBCWWFjYyBhbmQgQlRZYWNjIGRvLCBpbnN0ZWFkIG9mICRheGlvbSBhbmQgJC4KKworCSogc3JjL3N5bXRhYi5oLCBzcmMvc3ltdGFiLmMgKGVvZnRva2VuLCBheGlvbSk6IFJlbmFtZSBhcy4uLgorCShlbmR0b2tlbiwgYWNjZXB0KTogdGhlc2UuCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRlcik6IFNldCBlbmR0b2tlbidzIGRlZmF1bHQgdGFnIHRvICIkZW5kIi4KKwlTZXQgdW5kZWZ0b2tlbidzIHRhZyB0byAiJHVuZGVmaW5lZCIgaW5zdGVhZCBvZiAiJHVuZGVmaW5lZC4iLgorCSogZG9jL2Jpc29uLnRleGluZm8gKFRhYmxlIG9mIFN5bWJvbHMpOiBNZW50aW9uICRhY2NlcHQgYW5kICRlbmQuCisJQWRqdXN0LgorCisyMDAyLTA3LTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3JlZHVjZS5jIChyZWR1Y2VfZ3JhbW1hcik6IFdoZW4gdGhlIGxhbmd1YWdlIGlzIGVtcHR5LAorCWNvbXBsYWluIGFib3V0IHRoZSBzdGFydCBzeW1ib2wsIG5vdCB0aGUgYXhpb20uCisJVXNlIGl0cyBsb2NhdGlvbi4KKwkqIHRlc3RzL3JlZHVjZS5hdCAoRW1wdHkgTGFuZ3VhZ2UpOiBOZXcuCisKKzIwMDItMDctMjYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmgsIHNyYy9yZWFkZXIuYyAoZ3JhbV9lcnJvcik6IC4uLiBjYW4ndCBnZXQKKwl5eWNvbnRyb2wgd2l0aG91dCBtYWtpbmcgdG9vIHN0cm9uZyBhc3N1bXB0aW9ucyBvbiB0aGUgcGFyc2VyCisJaXRzZWxmLgorCSogc3JjL291dHB1dC5jIChwcmVwYXJlX3Rva2Vucyk6IFVzZSB0aGUgcmVhbCAwdGggdmFsdWUgb2YKKwl0b2tlbl90cmFuc2xhdGlvbnMgaW5zdGVhZCBvZiBgMCcuCisJKiBzcmMvcGFyc2UtZ3JhbS55ICh5eWVycm9yKTogRG9uJ3QgcmVseSBvbiB5eWNvbnRyb2wgYmVpbmcKKwl2aXNpYmxlIGhlcmUuCisJKiBkYXRhL3lhY2MuYyAoeXlyZXBvcnRfcGFyc2VfZXJyb3IpOiBSZW5hbWUgeXlsb2NhdGlvbiBhcyB5eWxsb2MKKwlmb3IgdGhlIHRpbWUgYmVpbmc6ICVsb2NhdGlvbnMgb3VnaHQgdG8gcHJvdmlkZSBpdCB0byB5eWVycm9yLgorCisyMDAyLTA3LTI1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL291dHB1dC5jIChwcmVwYXJlX3Rva2Vucyk6IEdvIHVwIHRvIG50b2tlbnMsIG5vdCBudG9rZW5zICsgMS4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChEZWNsIFN1bW1hcnkpOiBzLyRpbGxlZ2FsLyR1bmRlZmluZWQuLy4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFdlYjJjIEFjdGlvbnMpOiBBZGp1c3QuCisKKzIwMDItMDctMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJU3RvcCBzdG9yaW5nIHJ1bGVzIGZyb20gMSB0byBucnVsZXMgKyAxLgorCisJKiBzcmMvTFIwLmMsIHNyYy9jbG9zdXJlLmMsIHNyYy9kZXJpdmVzLmMsIHNyYy9ncmFtLmMsIHNyYy9sYWxyLmMKKwkqIHNyYy9udWxsYWJsZS5jLCBzcmMvb3V0cHV0LmMsIHNyYy9wcmludC5jLCBzcmMvcmVhZGVyLmMKKwkqIHNyYy9yZWR1Y2UuYzogQWxsb2NhdGUgYW5kIGZyZWUgZnJvbSAmcnVsZXNbMF0sIG5vdCAmcnVsZXNbMV0uCisJSXRlcmF0ZSBmcm9tIDAgdG8gbnJ1bGVzLgorCVVzZSBydWxlX251bWJlcl9hc19pdGVtX251bWJlciBhbmQgaXRlbV9udW1iZXJfYXNfcnVsZV9udW1iZXIuCisJQWRqdXN0IHRvIGBkZXJpdmUnIG5vdyBjb250YWluaW5nIHBvc3NpYmx5IDAuCisJKiBzcmMvZ3JhbS5oIChydWxlX251bWJlcl9hc19pdGVtX251bWJlciwgaXRlbV9udW1iZXJfYXNfcnVsZV9udW1iZXIpOgorCUhhbmRsZSB0aGUgYC0gMScgcGFydCBpbiBydWxlIG51bWJlcnMgZnJvbS90byBpdGVtIG51bWJlcnMuCisJKiBzcmMvY29uZmxpY3RzLmMgKGxvZ19yZXNvbHV0aW9uKTogRml4IHRoZSBtZXNzYWdlIHdoaWNoIHJldmVyc2VkCisJc2hpZnQgYW5kIHJlZHVjZS4KKwkqIHNyYy9vdXRwdXQuYyAoYWN0aW9uX3Jvdyk6IEluaXRpYWxpemUgZGVmYXVsdF9ydWxlIHRvIC0xLgorCSh0b2tlbl9hY3Rpb25zKTogQWRqdXN0LgorCSogdGVzdHMvc2V0cy5hdCAoTnVsbGFibGUsIEZpcnN0cyk6IEZpeCB0aGUgcHJldmlvdXNseSBib2d1cworCWV4cGVjdGVkIG91dHB1dC4KKwkqIHRlc3RzL2NvbmZsaWN0cy5hdCAoUmVzb2x2ZWQgU1IgQ29uZmxpY3RzKTogTGlrZXdpc2UuCisKKzIwMDItMDctMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2MubTQgKGI0X2NfZnVuY3Rpb24sIGI0X2NfYW5zaV9hcmdzLCBiNF9jX2Fuc2lfYXJnKQorCShiNF9jX2tucl9hcmdfbmFtZXMsIGI0X2Nfa25yX2FyZ19uYW1lLCBiNF9jX2tucl9hcmdfZGVjbHMpCisJKGI0X2Nfa25yX2FyZ19kZWNsKTogTmV3LgorCSogZGF0YS95YWNjLmM6IFVzZSBpdCB0byBkZWZpbmUgeXlzeW1wcmludCwgeXlkZXN0cnVjdCwgYW5kCisJeXlyZXBvcnRfcGFyc2VfZXJyb3IuCisKKzIwMDItMDctMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL3lhY2MuYyAoeXlyZXBvcnRfcGFyc2VfZXJyb3IpOiBOZXcsIGV4dHJhY3RlZCBmcm9tLi4uCisJKHl5cGFyc2UpOiBoZXJlLgorCSh5eWRlc3RydWN0LCB5eXN5bXByaW50KTogTW92ZSBhYm92ZSB5eXBhcnNlLgorCUJlIEsmUiBjb21wbGlhbnQuCisKKzIwMDItMDctMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2MubTQgKGI0X2ludHNfaW4sIGI0X2ludF90eXBlLCBiNF9pbnRfdHlwZV9mb3IpOiBOZXcsCisJcmVwbGFjZS4uLgorCShiNF9zaW50X3R5cGUsIGI0X3VpbnRfdHlwZSk6IHRoZXNlLgorCSogZGF0YS95YWNjLmMsIGRhdGEvZ2xyLmMsIGRhdGEvbGFscjEuY2M6IFVzZSBiNF9pbnRfdHlwZV9mb3IuCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChXZWIyYyBBY3Rpb25zKTogQWRqdXN0LgorCisyMDAyLTA3LTI1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2dyYW0uaCAoVElFTV9OVU1CRVJfTUFYKTogTmV3LgorCShpdGVtX251bWJlcl9vZl9ydWxlX251bWJlciwgcnVsZV9udW1iZXJfb2ZfaXRlbV9udW1iZXIpOiBSZW5hbWUKKwlhcy4uLgorCShydWxlX251bWJlcl9hc19pdGVtX251bWJlciwgaXRlbV9udW1iZXJfYXNfcnVsZV9udW1iZXIpOiB0aGVzZS4KKwlBZGp1c3QgZGVwZW5kZW5jaWVzLgorCSogc3JjL291dHB1dC5jICh2ZWN0b3JfbnVtYmVyX3QsIFZFQ1RPUl9OVU1CRVJfTUFYKQorCShWRUNUT1JfTlVNQkVSX01JTiwgc3RhdGVfbnVtYmVyX3RvX3ZlY3Rvcl9udW1iZXIpCisJKHN5bWJvbF9udW1iZXJfdG9fdmVjdG9yX251bWJlcik6IE5ldy4KKwkob3JkZXIpOiBPZiB2ZWN0b3JfbnVtYmVyX3QqIHR5cGUuCisJKGJhc2VfdCwgQkFTRV9NQVgsIEJBU0VfTUlOKTogTmV3LgorCShmcm9tcywgdG9zLCB3aWR0aCwgcG9zLCBjaGVjayk6IE9mIGJhc2VfdCB0eXBlLgorCShhY3Rpb25fbnVtYmVyX3QsIEFDVElPTl9NSU4sIEFDVElPTl9NQVgpOiBOZXcuCisJKGFjdHJvdyk6IE9mIGFjdGlvbl9udW1iZXJfdCB0eXBlLgorCShjb25mbHJvdyk6IE9mIHVuc2lnbmVkIGludCB0eXBlLgorCSh0YWJsZV9uaW5mLCBiYXNlX25pbmYpOiBOZXcuCisJKEdFTkVSQVRFX01VU0NMRV9JTlNFUlRfVEFCTEUpOiBBbHNvIG91dHB1dCB0aGUgYCpfbWluJyB2YWx1ZS4KKwkobXVzY2xlX2luc2VydF9pbnRfdGFibGUsIG11c2NsZV9pbnNlcnRfYmFzZV90YWJsZSkKKwkobXVzY2xlX2luc2VydF9ydWxlX251bWJlcl90YWJsZSk6IE5ldy4KKwkocHJlcGFyZV90b2tlbnMpOiBPdXRwdXQgYHRva251bScgYXMgaW50X3RhYmxlLgorCShhY3Rpb25fcm93KTogUmV0dXJucyBhIHJ1bGVfbnVtYmVyX3QuCisJVXNlIEFDVElPTl9NSU4sIG5vdCBTSFJUX01JTi4KKwkodG9rZW5fYWN0aW9ucyk6IHl5ZGVmYWN0IGlzIHJ1bGVfbnVtYmVyX3QqLgorCSh0YWJsZV9uaW5mX3JlbWFwKTogTmV3LgorCShwYWNrX3RhYmxlKTogVXNlIGl0IGZvciBgYmFzZScgYW5kIGB0YWJsZScuCisJKiBkYXRhL3lhY2MuYywgZGF0YS9nbHIuYywgZGF0YS9sYWxyMS5jYyAoWVlGTEFHKTogUmVtb3ZlLAorCXJlcGxhY2VkIHdpdGguLi4KKwkoWVlQQUNUX05JTkYsIFlZVEFCTEVfTklORik6IHRoZXNlLgorCSh5eXBhY3QsIHl5dGFibGUpOiBDb21wdXRlIHRoZWlyIHR5cGVzIGluc3RlYWQgb2YgaGFyZC1jb2RlZAorCWBzaG9ydCcuCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChXZWIyYyBBY3Rpb25zKTogQWRqdXN0LgorCisyMDAyLTA3LTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3NjYW4tZ3JhbS5sIChpZCk6IENhbiBzdGFydCB3aXRoIGFuIHVuZGVyc2NvcmUuCisKKzIwMDItMDctMTYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvYXNzb2MuYywgc3JjL2Fzc3NvYy5oIChhc3NvY190LCBhc3NvY190b19zdHJpbmcpOiBOZXcuCisJQWRqdXN0IGFsbCBmb3JtZXIgYGFzc29jaWF0aXZpdHknIGRlcGVuZGVuY2llcy4KKwkqIHNyYy9zeW10YWIuYyAoc3ltYm9sX25ldyk6IERlZmF1bHQgYXNzb2NpYXRpdml0eSBpcyBgdW5kZWYnLCBub3QKKwlgcmlnaHQnLgorCShzeW1ib2xfY2hlY2tfYWxpYXNfY29uc2lzdGVuY2UpOiBBZGp1c3QuCisKKzIwMDItMDctMDkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkb2MvYmlzb24udGV4aW5mbzogUHJvcGVybHkgc2V0IHRoZSBgYGhlYWRlcicnIHBhcnQuCisJVXNlIEBkaXJjYXRlZ29yeSBgYEdOVSBwcm9ncmFtbWluZyB0b29scycnIGFzIHBlciBUZXhpbmZvJ3MKKwlkb2N1bWVudGF0aW9uLgorCVVzZSBAY29weWluZy4KKworMjAwMi0wNy0wOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGxpYi9xdW90ZWFyZy5oOiBQcm90ZWN0IGFnYWluc3QgbXVsdGlwbGUgaW5jbHVzaW9ucy4KKwkqIHNyYy9sb2NhdGlvbi5oIChsb2NhdGlvbl90KTogQWRkIGEgYGZpbGUnIG1lbWJlci4KKwkoTE9DQVRJT05fUkVTRVQsIExPQ0FUSU9OX1BSSU5UKTogQWRqdXN0LgorCSogc3JjL2NvbXBsYWluLmMgKHdhcm5fYXQsIGNvbXBsYWluX2F0LCBmYXRhbF9hdCk6IERyb3AKKwlgZXJyb3Jfb25lX3Blcl9saW5lJyBzdXBwb3J0LgorCisyMDAyLTA3LTA5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2NvbXBsYWluLmgsIHNyYy9jb21wbGFpbi5jICh3YXJuLCBjb21wbGFpbik6IFJlbW92ZSwgdW51c2VkLgorCSogc3JjL3JlYWRlci5jIChsaW5lbm8pOiBSZW1vdmUuCisJQWRqdXN0IGFsbCBkZXBlbmRlbmNpZXMuCisJKGdldF9tZXJnZV9mdW5jdGlvbik6IFRha2UgYSBsb2NhdGlvbiBhbmQgdXNlIGNvbXBsYWluX2F0LgorCSogc3JjL3N5bXRhYi5oLCBzcmMvc3ltdGFiLmMgKHN5bWJvbF9tYWtlX2FsaWFzKTogTGlrZXdpc2UuCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChJbnZhbGlkIGlucHV0cywgTWl4aW5nICV0b2tlbiBzdHlsZXMpOgorCUFkanVzdC4KKworMjAwMi0wNy0wOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9wYXJzZS1ncmFtLnkgKHJ1bGVzX29yX2dyYW1tYXJfZGVjbGFyYXRpb24pOiBBZGQgYW4gZXJyb3IKKwlyZWNvdmVyeSBydWxlLCBhbmQgZm9yYmlkIGV4dGVuc2lvbnMgd2hlbiAtLXlhY2MuCisJKGdyYW1fZXJyb3IpOiBVc2UgY29tcGxhaW5fYXQuCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRlcik6IEV4aXQgaWYgdGhlcmUgd2VyZSBwYXJzZSBlcnJvcnMuCisKKzIwMDItMDctMDkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiB0ZXN0cy9zeW5jbGluZXMuYXQgKEFUX1NZTkNMSU5FU19DT01QSUxFKTogTmV3LgorCShBVF9URVNUX1NZTkNMSU5FKTogQWRqdXN0IHRvIHVudXN1YWwgR0NDIG91dHB1dHMuCisJUmVwb3J0ZWQgYnkgUiBCbGFrZSA8Ymxha2Vyc0BtYWMuY29tPi4KKworMjAwMi0wNy0wOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEveWFjYy5jOiBPdXRwdXQgdGhlIGNvcHlyaWdodCBub3RpdmUgaW4gdGhlIGhlYWRlci4KKworMjAwMi0wNy0wMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9vdXRwdXQuYyAoZnJvbXMsIHRvcyk6IEFyZSBzdGF0ZV9udW1iZXJfdC4KKwkoc2F2ZV9jb2x1bW4pOiBzcCwgc3AxLCBhbmQgc3AyIGFyZSBzdGF0ZV9udW1iZXJfdC4KKwkocHJlcGFyZSk6IFJlbmFtZSBgZmluYWwnIGFzIGBmaW5hbF9zdGF0ZV9udW1iZXInLCBgbm50cycgYXMKKwlgbnRlcm1zX251bWJlcicsIGBucnVsZXMnIGFzIGBydWxlc19udW1iZXInLCBgbnN0YXRlcycgYXMKKwlgc3RhdGVzX251bWJlcicsIGFuZCBgbnRva2VucycgYXMgYHRva2Vuc19udW1iZXInLiAgUmVtb3ZlIGBuc3ltJywKKwl1bnVzZWQuCisJKiBkYXRhL3lhY2MuYywgZGF0YS9nbHIuYywgZGF0YS9sYWxyMS5jYzogQWRqdXN0LgorCSogZGF0YS9sYWxyMS5jYyAobnN5bV8pOiBSZW1vdmUsIHVudXNlZC4KKworMjAwMi0wNy0wMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9sYWxyLmgsIHNyYy9sYWxyLmMgKGdvdG9fbnVtYmVyX3QpOiBOZXcuCisJKiBzcmMvbGFsci5jIChnb3RvX2xpc3RfdCk6IE5ldy4KKwlQcm9wYWdhdGUgdGhlbS4KKwkqIHNyYy9udWxsYWJsZS5jIChydWxlX2xpc3RfdCk6IE5ldy4KKwlQcm9wYWdhdGUuCisJKiBzcmMvdHlwZXMuaDogUmVtb3ZlLgorCisyMDAyLTA3LTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2Nsb3N1cmUuYyAocHJpbnRfZmRlcml2ZXMpOiBVc2UgcnVsZV9yaHNfcHJpbnQuCisJKiBzcmMvZGVyaXZlcy5jIChwcmludF9kZXJpdmVzKTogVXNlIHJ1bGVfcmhzX3ByaW50LgorCShydWxlX2xpc3RfdCk6IE5ldywgcmVwbGFjZXMgYHNob3J0cycuCisJKHNldF9kZXJpdmVzKTogQWRkIGNvbW1lbnRzLgorCSogdGVzdHMvc2V0cy5hdCAoTnVsbGFibGUsIEZpcnN0cyk6IEFkanVzdC4KKworMjAwMi0wNy0wMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9vdXRwdXQuYyAocHJlcGFyZV9hY3Rpb25zKTogRnJlZSBgdGFsbHknIGFuZCBgd2lkdGgnLgorCShwcmVwYXJlX2FjdGlvbnMpOiBBbGxvY2F0ZSBhbmQgZnJlZSBgb3JkZXInLgorCSogc3JjL3N5bXRhYi5jIChzeW1ib2xzX2ZyZWUpOiBGcmVlIGBzeW1ib2xzJy4KKwkqIHNyYy9zY2FuLWdyYW0ubCAoc2Nhbm5lcl9mcmVlKTogQ2xlYXIgRmxleCdzIHNjYW5uZXJzIG1lbW9yeS4KKwkqIHNyYy9vdXRwdXQuYyAobTRfaW52b2tlKTogTW92ZSB0by4uLgorCSogc3JjL3NjYW4tc2tlbC5sOiBoZXJlLgorCSg8PEVPRj4+KTogQ2xvc2UgeXlvdXQsIGFuZCBmcmVlIGl0cyBuYW1lLgorCisyMDAyLTA3LTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCUZpeCBzb21lIG1lbW9yeSBsZWFrcywgYW5kIGZpeCBhIGJ1Zzogc3RhdGUgMCB3YXMgZXhhbWluZWQgdHdpY2UuCisKKwkqIHNyYy9MUjAuYyAobmV3X3N0YXRlKTogTWVyZ2UgaW50by4uLgorCShzdGF0ZV9saXN0X2FwcGVuZCk6IHRoaXMuCisJKG5ld19zdGF0ZXMpOiBNZXJnZSBpbnRvLi4uCisJKGdlbmVyYXRlX3N0YXRlcyk6IGhlcmUuCisJKHNldF9zdGF0ZXMpOiBEb24ndCBlbnN1cmUgYSBwcm9wZXIgYGVycnMnIHN0YXRlIG1lbWJlciBoZXJlLCBkbyBpdC4uLgorCSogc3JjL2NvbmZsaWN0cy5jIChjb25mbGljdHNfc29sdmUpOiBoZXJlLgorCSogc3JjL3N0YXRlLmgsIHNyYy9zdGF0ZS5jOiBDb21tZW50IGNoYW5nZXMuCisJKHN0YXRlX3QpOiBSZW5hbWUgbWVtYmVyIGBzaGlmdHMnIGFzIGB0cmFuc2l0aW9ucycuCisJQWRqdXN0IGFsbCBkZXBlbmRlbmNpZXMuCisJKGVycnNfbmV3KTogRm9yIGNvbnNpc3RlbmN5LCBhbHNvIHRha2UgdGhlIHZhbHVlcyBhcyBhcmd1bWVudC4KKwkoZXJyc19kdXApOiBSZW1vdmUuCisJKHN0YXRlX2VycnNfc2V0KTogTmV3LgorCShzdGF0ZV9yZWR1Y3Rpb25zX3NldCwgc3RhdGVfdHJhbnNpdGlvbnNfc2V0KTogQXNzZXJ0IHRoYXQgbm8KKwlwcmV2aW91cyB2YWx1ZSB3YXMgYXNzaWduZWQuCisJKHN0YXRlX2ZyZWUpOiBOZXcuCisJKHN0YXRlc19mcmVlKTogVXNlIGl0LgorCSogc3JjL2NvbmZsaWN0cy5jIChyZXNvbHZlX3NyX2NvbmZsaWN0KTogRG9uJ3QgdXNlIGFuIGBlcnJzX3QnIGFzCisJdGVtcG9yYXJ5IHN0b3JhZ2U6IHVzZSBgZXJycycgYW5kIGBuZXJycycgYXMgZWxzZXdoZXJlLgorCShzZXRfY29uZmxpY3RzKTogQWxsb2NhdGUgYW5kIGZyZWUgdGhpcyBgZXJycycuCisKKzIwMDItMDctMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBsaWIvbGliaWJlcnR5Lmg6IE5ldy4KKwkqIGxpYjogVXBkYXRlIHRoZSBiaXRzZXQgaW1wbGVtZW50YXRpb24gZnJvbSB1cHN0cmVhbS4KKwkqIHNyYy9jbG9zdXJlLmMsIHNyYy9sYWxyLmMsIHNyYy9vdXRwdXQuYywgc3JjL3ByaW50X2dyYXBoLmMsCisJKiBzcmMvc3RhdGUuYzogVXNlIEJJVFNFVF9GT1JfRUFDSCwgbm90IEJJVFNFVF9FWEVDVVRFLgorCSogc3JjL21haW4uYzogQWRqdXN0IGJpdHNldCBzdGF0cyBjYWxscy4KKworMjAwMi0wNy0wMSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIHNyYy9zY2FuLWdyYW0ubCAoPFNDX0VTQ0FQRURfQ0hBUkFDVEVSPik6IENvbnZlcnQgdG8gdW5zaWduZWQKKwljaGFyLCBzbyB0aGF0IG5lZ2F0aXZlIGNoYXJzIGRvbid0IGNvbGxpZGUgd2l0aCAkLgorCisyMDAyLTA2LTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCUhhdmUgdGhlIEdMUiB0ZXN0cyBiZSBgd2FybmluZycgY2hlY2tlZCwgYW5kIGZpeCB0aGUgd2FybmluZ3MuCisKKwkqIGRhdGEvZ2xyLmMgKFlZRlBSSU5URik6IEFsd2F5cyBkZWZpbmUgaXQsIG5vdCBvbmx5IHdoZW4gWVlERUJVRworCSh5eXVzZXJBY3Rpb24sIHl5cmVwb3J0QW1iaWd1aXR5KTogYFVzZScgYWxsIHRoZSBhcmd1bWVudHMuCisJKHl5cmVtb3ZlRGVsZXRlcyk6IGB5eWknIGFuZCBgeXlqJyBhcmUgc2l6ZV90LgorCVVzZSBZWUZQUklOVEYgd2hlbiB1bmRlciBpZiAoWVlERUJVRykgdG8gYXZvaWQgZW1wdHkgYGlmJyBib2RpZXMuCisJKHl5YWRkRGVmZXJyZWRBY3Rpb24pOiBzdGF0aWMuCisJKHl5Z2xyUmVkdWNlKTogeXlpLCB5eWssIGFtZCB5eXBvc24gYXJlIHNpemVfdC4KKwkoeXlyZXBvcnRQYXJzZUVycm9yKTogeXlwcmVmaXggaXMgY29uc3QuCisJeXl0b2tlbnAgaXMgdXNlZCBvbmx5IHdoZW4gdmVyYm9zZS4KKwkoeXlfX0dOVUNfXyk6IFJlcGxhY2Ugd2l0aCBfX0dOVUNfXy4KKwkoeXlwZHVtcHN0YWNrKTogeXlpIGlzIHNpemVfdC4KKwkoeXlwcmVmZXJlbmNlKTogVW4teXkgbG9jYWwgdmFyaWFibGVzIGFuZCBhcmd1bWVudHMsIHRvIGF2b2lkCisJY2xhc2hlcyB3aXRoIGB5eXIxJy4gIEFueXdheSwgd2UgYXJlIG5vdCBpbiB0aGUgdXNlciBuYW1lIHNwYWNlLgorCSh5eXRuYW1lX3NpemUpOiBiZSBhbiBpbnQsIGFzIGlzIGNvbXBhcmVkIHdpdGggaW50cy4KKwkqIHRlc3RzL3Rlc3RzdWl0ZS5hdCAoQVRfQ09NUElMRSwgQVRfUEFSU0VSX0NIRUNLKTogTmV3LgorCVVzZSB0aGVtLgorCSogdGVzdHMvY3h4LWdyYW0uYXQ6IFVzZSBxdW90YXRpb24gdG8gcHJvdGVjdCAkMS4KKwlVc2UgQVRfQ09NUElMRSB0byBlbmFibGUgd2FybmluZ3MgaHVudHMuCisJUHJvdG90eXBlIHl5bGV4IGFuZCB5eWVycm9yLgorCWBVc2UnIGFyZ2MuCisJSW5jbHVkZSBgc3RyaW5nLmgnLCBub3QgYHN0cmluZ3MuaCcuCisJUHJvZHVjZSBhbmQgcHJvdG90eXBlIHN0bXRNZXJnZSBvbmx5IHdoZW4gdXNlZC4KKwl5eWxleCB0YWtlcyBhIGxvY2F0aW9uLgorCisyMDAyLTA2LTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCVdlIHNwZW5kIGEgbG90IG9mIHRpbWUgaW4gcXVvdGVhcmcsIGluIHBhcnRpY3VsYXIgd2hlbiAtLXZlcmJvc2UuCisKKwkqIHNyYy9zeW10YWIuYyAoc3ltYm9sX2dldCk6IFN0b3JlIGEgcXVvdGVkIHZlcnNpb24gb2YgdGhlIGtleS4KKwkoc3ltYm9sX3RhZ19nZXQsIHN5bWJvbF90YWdfZ2V0X24sIHN5bWJvbF90YWdfcHJpbnQpOiBSZW1vdmUuCisJQWRqdXN0IGFsbCBjYWxsZXJzLgorCisyMDAyLTA2LTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3N0YXRlLmggKHJlZHVjdGlvbnNfdCk6IFJlbmFtZSBtZW1iZXIgYG5yZWRzJyBhcyBudW0uCisJKGVycnNfdCk6IFJlbmFtZSBtZW1iZXJzIGBuZXJycycgYW5kIGBlcnJzJyBhcyBgbnVtJyBhbmQgYHN5bWJvbHMnLgorCSogc3JjL3N0YXRlLmMgKEVSUlNfQUxMT0MsIFJFRFVDVElPTlNfQUxMT0MpOiBVc2UgdGhlIGNvcnJlY3QgdHlwZXMuCisKKzIwMDItMDYtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvc3RhdGUuaCwgc3JjL3N0YXRlLmMgKHNoaWZ0X3QsIFNISUZUX1NZTUJPTCwgU0hJRlRfSVNfU0hJRlQpCisJKFNISUZUX0lTX0dPVE8sIFNISUZUX0lTX0VSUk9SLCBTSElGVF9ESVNBQkxFLCBTSElGVF9JU19ESVNBQkxFRCkKKwkoc2hpZnRzX3RvKTogUmVuYW1lIGFzLi4uCisJKHRyYW5zaXRpb25fdCwgVFJBTlNJVElPTl9TWU1CT0wsIFRSQU5TSVRJT05fSVNfVFJBTlNJVElPTikKKwkoVFJBTlNJVElPTl9JU19HT1RPLCBUUkFOU0lUSU9OX0lTX0VSUk9SLCBUUkFOU0lUSU9OX0RJU0FCTEUpCisJKFRSQU5TSVRJT05fSVNfRElTQUJMRUQsIHRyYW5zaXRpb25zX3RvKTogdGhlc2UuCisKKzIwMDItMDYtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcHJpbnQuYyAocHJpbnRfc2hpZnRzLCBwcmludF9nb3Rvcyk6IE1lcmdlIGludG8uLi4KKwkocHJpbnRfdHJhbnNpdGlvbnMpOiB0aGlzLgorCShwcmludF90cmFuc2l0aW9ucywgcHJpbnRfZXJycywgcHJpbnRfcmVkdWN0aW9ucyk6IEFsaWduIHRoZQorCWxvb2thaGVhZHMgY29sdW1ucy4KKwkocHJpbnRfY29yZSwgcHJpbnRfdHJhbnNpdGlvbnMsIHByaW50X2VycnMsIHByaW50X3N0YXRlLAorCXByaW50X2dyYW1tYXIpOiBPdXRwdXQgZW1wdHkgbGluZXMgc2VwYXJhdG9yIGJlZm9yZSwgbm90IGFmdGVyLgorCShzdGF0ZV9kZWZhdWx0X3J1bGVfY29tcHV0ZSk6IFJlbmFtZSBhcy4uLgorCShzdGF0ZV9kZWZhdWx0X3J1bGUpOiB0aGlzLgorCSogdGVzdHMvY29uZmxpY3RzLmF0IChEZWZhdWx0ZWQgQ29uZmxpY3RlZCBSZWR1Y3Rpb24pLAorCShVbnJlc29sdmVkIFNSIENvbmZsaWN0cywgUmVzb2x2ZWQgU1IgQ29uZmxpY3RzKTogQWRqdXN0LgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoUnVsZSBMaW5lIE51bWJlcnMsIFdlYjJjIFJlcG9ydCk6IEFkanVzdC4KKworMjAwMi0wNi0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlEaXNwbGF5IGl0ZW1zIGFzIHdlIGRpc3BsYXkgcnVsZXMuCisKKwkqIHNyYy9ncmFtLmgsIHNyYy9ncmFtLmMgKHJ1bGVfbGhzX3ByaW50KTogTmV3LgorCSogc3JjL2dyYW0uYyAoZ3JhbW1hcl9ydWxlc19wYXJ0aWFsX3ByaW50KTogVXNlIGl0LgorCSogc3JjL3ByaW50LmMgKHByaW50X2NvcmUpOiBMaWtld2lzZS4KKwkqIHRlc3RzL2NvbmZsaWN0cy5hdCAoRGVmYXVsdGVkIENvbmZsaWN0ZWQgUmVkdWN0aW9uKSwKKwkoVW5yZXNvbHZlZCBTUiBDb25mbGljdHMpOiBBZGp1c3QuCisJKFVucmVzb2x2ZWQgU1IgQ29uZmxpY3RzKTogQWRqdXN0IGFuZCByZW5hbWUgYXMuLi4KKwkoUmVzb2x2ZWQgU1IgQ29uZmxpY3RzKTogdGhpcywgYXMgd2FzIG1lYW50LgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoV2ViMmMgUmVwb3J0KTogQWRqdXN0LgorCisyMDAyLTA2LTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3ByaW50LmMgKHN0YXRlX2RlZmF1bHRfcnVsZV9jb21wdXRlKTogTmV3LCBleHRyYWN0ZWQgZnJvbS4uLgorCShwcmludF9yZWR1Y3Rpb25zKTogaGVyZS4KKwlQZXNzaW1pemUsIGJ1dCBjbGFyaWZ5IHRoZSBjb2RlLgorCSogdGVzdHMvY29uZmxpY3RzLmF0IChEZWZhdWx0ZWQgQ29uZmxpY3RlZCBSZWR1Y3Rpb24pOiBOZXcuCisKKzIwMDItMDYtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvb3V0cHV0LmMgKGFjdGlvbl9yb3cpOiBMZXQgZGVmYXVsdF9ydWxlIGJlIGFsd2F5cyBhIHJ1bGUKKwludW1iZXIuCisKKzIwMDItMDYtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvY2xvc3VyZS5jIChwcmludF9maXJzdHMsIHByaW50X2ZkZXJpdmVzLCBjbG9zdXJlKToKKwlVc2UgQklUU0VUX0VYRUNVVEUuCisJKiBzcmMvbGFsci5jIChsb29rYWhlYWRzX3ByaW50KTogTGlrZXdpc2UuCisJKiBzcmMvc3RhdGUuYyAoc3RhdGVfcnVsZV9sb29rYWhlYWRzX3ByaW50KTogTGlrZXdpc2UuCisJKiBzcmMvcHJpbnRfZ3JhcGguYyAocHJpbnRfY29yZSk6IExpa2V3aXNlLgorCSogc3JjL3ByaW50LmMgKHByaW50X3JlZHVjdGlvbnMpOiBMaWtld2lzZS4KKwkqIHNyYy9vdXRwdXQuYyAoYWN0aW9uX3Jvdyk6IExpa2V3aXNlLgorCVVzZSBTSElGVF9JU19ESVNBQkxFRCwgU0hJRlRfSVNfU0hJRlQgYW5kIFNISUZUX1NZTUJPTC4KKworMjAwMi0wNi0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9wcmludF9ncmFwaC5jOiBVc2UgcmVwb3J0X2ZsYWcuCisKKzIwMDItMDYtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvbGFsci5jICh0cmF2ZXJzZSwgZGlncmFwaCwgbWF0cml4X3ByaW50LCB0cmFuc3Bvc2UpOiBNb3ZlCisJdG8uLi4KKwkqIHNyYy9yZWxhdGlvbi5oLCBzcmMvcmVsYXRpb24uYyAodHJhdmVyc2UsIHJlbGF0aW9uX2RpZ3JhcGgpCisJKHJlbGF0aW9uX3ByaW50LCByZWxhdGlvbl90cmFuc3Bvc2UpOiBOZXcuCisKKzIwMDItMDYtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvc3RhdGUuaCwgc3JjL3N0YXRlLmMgKHNoaWZ0c190byk6IE5ldy4KKwkqIHNyYy9sYWxyLmMgKGJ1aWxkX3JlbGF0aW9ucyk6IFVzZSBpdC4KKworMjAwMi0wNi0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9ncmFtLmggKHJ1bGVfbnVtYmVyX3QsIFJVTEVfTlVNQkVSX01BWCwgaW50X29mX3J1bGVfbnVtYmVyKQorCShpdGVtX251bWJlcl9vZl9ydWxlX251bWJlciwgcnVsZV9udW1iZXJfb2ZfaXRlbV9udW1iZXIpOiBOZXcuCisJKiBzcmMvTFIwLmMsIHNyYy9jbG9zdXJlLmMsIHNyYy9kZXJpdmVzLmMsIHNyYy9kZXJpdmVzLmgsCisJKiBzcmMvZ3JhbS5jLCBzcmMvbGFsci5jLCBzcmMvbnVsbGFibGUuYywgc3JjL291dHB1dC5jLCBzcmMvcHJpbnQuYywKKwkqIHNyYy9wcmludF9ncmFwaC5jLCBzcmMvcmVhZGVyLmMsIHNyYy9yZWR1Y2UuYywgc3JjL3JlZHVjZS5oOgorCVByb3BhZ2F0ZSB0aGVpciB1c2UuCisJTXVjaCByZW1haW5zIHRvIGJlIGRvbmUsIGluIHBhcnRpY3VsYXIgd3J0IGBzaG9ydHMnIGZyb20gdHlwZXMuaC4KKworMjAwMi0wNi0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9zeW10YWIuYyAoc3ltYm9sX25ldyk6IEluaXRpYWxpemUgdGhlIGBwcmludGVyJyBtZW1iZXIuCisKKzIwMDItMDYtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvTFIwLmMgKHNhdmVfcmVkdWN0aW9ucyk6IFJlbW92ZSwgcmVwbGFjZWQgYnkuLi4KKwkqIHNyYy9zdGF0ZS5oLCBzcmMvc3RhdGUuYyAoc3RhdGVfcmVkdWN0aW9uc19zZXQpOiBOZXcuCisJKHJlZHVjdGlvbnMsIGVycnMpOiBSZW5hbWUgYXMuLi4KKwkocmVkdWN0aW9uc190LCBlcnJzX3QpOiB0aGVzZS4KKwlBZGp1c3QgYWxsIGRlcGVuZGVuY2llcy4KKworMjAwMi0wNi0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9MUjAuYyAoc3RhdGVfbGlzdF90LCBzdGF0ZV9saXN0X2FwcGVuZCk6IE5ldy4KKwkoZmlyc3Rfc3RhdGUsIGxhc3Rfc3RhdGUpOiBOb3cgc3ltYm9sX2xpc3RfdC4KKwkodGhpc19zdGF0ZSk6IFJlbW92ZS4KKwkobmV3X2l0ZW1zZXRzLCBhcHBlbmRfc3RhdGVzLCBzYXZlX3JlZHVjdGlvbnMpOiBUYWtlIGEgc3RhdGVfdCBhcworCWFyZ3VtZW50LgorCShzZXRfc3RhdGVzLCBnZW5lcmF0ZV9zdGF0ZXMpOiBBZGp1c3QuCisJKHNhdmVfc2hpZnRzKTogUmVtb3ZlLCByZXBsYWNlZCBieS4uLgorCSogc3JjL3N0YXRlLmgsIHNyYy9zdGF0ZS5jIChzdGF0ZV9zaGlmdHNfc2V0KTogTmV3LgorCShzaGlmdHMpOiBSZW5hbWUgYXMuLi4KKwkoc2hpZnRzX3QpOiB0aGlzLgorCUFkanVzdCBhbGwgZGVwZW5kZW5jaWVzLgorCSogc3JjL3N0YXRlLmggKHN0YXRlX3QpOiBSZW1vdmUgdGhlIGBuZXh0JyBtZW1iZXIuCisKKzIwMDItMDYtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvdmNnLmMgKHF1b3RlKTogVXNlIHNsb3QgMiwgc2luY2Ugd2Ugb2Z0ZW4gcGFzcyBzeW1ib2wgdGFnCisJZXNjYXBlZCBpbiBzbG90IDAuCisKKzIwMDItMDYtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJVXNlIGhhc2guaCBmb3IgdGhlIHN0YXRlIGhhc2ggdGFibGUuCisKKwkqIHNyYy9MUjAuYyAoU1RBVEVfSEFTSF9TSVpFLCBzdGF0ZV9oYXNoKTogUmVtb3ZlLgorCShhbGxvY2F0ZV9zdG9yYWdlKTogVXNlIHN0YXRlX2hhc2hfbmV3LgorCShmcmVlX3N0b3JhZ2UpOiBVc2Ugc3RhdGVfaGFzaF9mcmVlLgorCShuZXdfc3RhdGUsIGdldF9zdGF0ZSk6IEFkanVzdC4KKwkqIHNyYy9sYWxyLmgsIHNyYy9sYWxyLmMgKHN0YXRlcyk6IE1vdmUgdG8uLi4KKwkqIHNyYy9zdGF0ZXMuaCAoc3RhdGVfdCk6IFJlbW92ZSB0aGUgYGxpbmsnIG1lbWJlciwgbm8gbG9uZ2VyCisJdXNlZC4KKwkqIHNyYy9zdGF0ZXMuaCwgc3JjL3N0YXRlcy5jOiBoZXJlLgorCShzdGF0ZV9oYXNoX25ldywgc3RhdGVfaGFzaF9mcmVlLCBzdGF0ZV9oYXNoX2xvb2t1cCkKKwkoc3RhdGVfaGFzaF9pbnNlcnQsIHN0YXRlc19mcmVlKTogTmV3LgorCSogc3JjL3N0YXRlcy5jIChzdGF0ZV90YWJsZSwgc3RhdGVfY29tcGFyZSwgc3RhdGVfaGFzaCk6IE5ldy4KKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X2FjdGlvbnMpOiBEbyBub3QgZnJlZSBzdGF0ZXMgbm93LCBzaW5jZSB3ZQorCXN0aWxsIG5lZWQgdG8ga25vdyB0aGUgZmluYWxfc3RhdGUgbnVtYmVyIGluIGBwcmVwYXJlJywgY2FsbGVkCisJYWZ0ZXJ3YXJkcy4gIERvIGl0Li4uCisJKiBzcmMvbWFpbi5jIChtYWluKTogaGVyZTogY2FsbCBzdGF0ZXNfZnJlZSBhZnRlciBgb3V0cHV0Jy4KKworMjAwMi0wNi0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9zdGF0ZS5oLCBzcmMvc3RhdGUuYyAoc3RhdGVfbmV3KTogTmV3LCBleHRyYWN0ZWQgZnJvbS4uLgorCSogc3JjL0xSMC5jIChuZXdfc3RhdGUpOiBoZXJlLgorCSogc3JjL3N0YXRlLmggKFNUQVRFX0FMTE9DKTogTW92ZSB0by4uLgorCSogc3JjL3N0YXRlLmM6IGhlcmUuCisJKiBzcmMvTFIwLmgsIHNyYy9MUjAuYyAobnN0YXRlcywgZmluYWxfc3RhdGUpOiBNb3ZlIHRvLi4uCisJKiBzcmMvc3RhdGUuaCwgc3JjL3N0YXRlLmM6IGhlcmUuCisKKzIwMDItMDYtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKGdlbnN5bSk6IFJlbmFtZSBhcy4uLgorCSogc3JjL3N5bXRhYi5oLCBzcmMvc3ltdGFiLmMgKGR1bW15X3N5bWJvbF9nZXQpOiB0aGlzLgorCShnZXRzeW0pOiBSZW5hbWUgYXMuLi4KKwkoc3ltYm9sX2dldCk6IHRoaXMuCisKKzIwMDItMDYtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvc3RhdGUuaCAoc3RhdGVfbnVtYmVyX3QsIFNUQVRFX05VTUJFUl9NQVgpOiBOZXcuCisJKiBzcmMvTFIwLmMsIHNyYy9MUjAuaCwgc3JjL2NvbmZsaWN0cy5jLCBzcmMvbGFsci5jLCBzcmMvbGFsci5oLAorCSogc3JjL291dHB1dC5jLCBzcmMvcHJpbnQuYywgc3JjL3ByaW50X2dyYXBoLmM6IFByb3BhZ2F0ZS4KKwkqIHNyYy9MUjAuaCwgc3JjL0xSMC5oIChmaW5hbF9zdGF0ZSk6IElzIGEgc3RhdGVfdCouCisKKzIwMDItMDYtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJTWFrZSB0aGUgdGVzdCBzdWl0ZSBwYXNzIHdpdGggd2FybmluZ3MgY2hlY2tlZC4KKworCSogdGVzdHMvYWN0aW9ucy5hdCAoUHJpbnRlcnMgYW5kIERlc3RydWN0b3JzKTogSW1wcm92ZS4KKwlBdm9pZCB1bnNpZ25lZCB2cy4gc2lnbmVkIGlzc3Vlcy4KKwkqIHRlc3RzL2NhbGMuYXQ6IERvbid0IGV4ZXJjaXNlIHRoZSBzY2FubmVyIGhlcmUsIGRvIGl0Li4uCisJKiB0ZXN0cy9pbnB1dC5hdCAoVG9ydHVyaW5nIHRoZSBTY2FubmVyKTogaGVyZS4KKworMjAwMi0wNi0yOCAgUGF1bCBIaWxmaW5nZXIgIDxIaWxmaW5nZXJAQ1MuQmVya2VsZXkuRURVPgorCisJKiBkYXRhL2dsci5jOiBDb3JyZWN0IHR5cG8gaW4gRW1hY3MtbW9kZSBkaXJlY3RpdmUuICBTbGlnaHRseQorCXJlb3JnYW5pemUgZmlyc3QgbGluZXMgcGFyYWxsZWwgdG8geWFjYy5jLgorCisyMDAyLTA2LTI4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9jLm00IChiNF9jb3B5cmlnaHQsIGI0X3NpbnRfdHlwZSwgYjRfdWludF90eXBlLCBiNF90b2tlbl9kZWZpbmUpCisJKGI0X3Rva2VuX2VudW0sIGI0X3Rva2VuX2RlZmluZXMpOiBOZXcsIGZhY3RvcmVkIGZyb20uLi4KKwkqIGRhdGEvbGFscjEuY2MsIGRhdGEveWFjYy5jLCBnbHIuYzogaGVyZS4KKworMjAwMi0wNi0yOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEveWFjYy5jICh5eWRlc3RydWN0LCB5eXN5bXByaW50KTogUGFjaWZ5IEdDQyB3YXJuaW5ncyBmb3IKKwl1bnVzZWQgdmFyaWFibGVzLgorCSogc3JjL291dHB1dC5jIChtZXJnZXJfb3V0cHV0KTogc3RhdGljLgorCisyMDAyLTA2LTI4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3JlYWRlci5oOiBzL2dyYW1tZXJfY3VycmVudF9ydWxlX21lcmdlX3NldC9ncmFtbWFyXy4uLi8uCisJKiBzcmMvY29uZmxpY3RzLmMgKGNvbmZsaWN0c190b3RhbF9jb3VudCk6IGBpJyBpcyB1bnNpZ25lZCwgdG8KKwlwYWNpZnkgR0NDLgorCSogc3JjL291dHB1dC5jIChzYXZlX3Jvdyk6IEluaXRpYWxpemUgYWxsIHRoZSB2YXJpYWJsZXMgdG8gcGFjaWZ5IEdDQy4KKworMjAwMi0wNi0yNyAgUGF1bCBIaWxmaW5nZXIgIDxIaWxmaW5nZXJAQ1MuQmVya2VsZXkuRURVPgorCisJQWNjdW11bGF0ZWQgY2hhbmdlbG9nIGZvciBuZXcgR0xSIHBhcnNpbmcgZmVhdHVyZXMuCisKKwkqIHNyYy9jb25mbGljdHMuYyAoY291bnRfdG90YWxfY29uZmxpY3RzKTogQ2hhbmdlIG5hbWUgdG8KKwljb25mbGljdHNfdG90YWxfY291bnQuCisJKiBzcmMvY29uZmxpY3RzLmg6IERpdHRvLgorCSogc3JjL291dHB1dC5jICh0b2tlbl9hY3Rpb25zKTogVXNlIHRoZSBuZXcgbmFtZS4KKwkob3V0cHV0X2NvbmZsaWN0cyk6IENoYW5nZSBjb25mbHAgPT4gY29uZmxpY3RfbGlzdF9oZWFkcywgYW5kCisJY29uZmwgPT4gY29uZmxpY3RfbGlzdCBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5LgorCSogZGF0YS9nbHIuYzogVXNlIHRoZSBuZXcgbmFtZXMuCisJKiBORVdTOiBBZGQgc2VsZiB0byBHTFIgYW5ub3VuY2VtZW50LgorCisJKiBzcmMvcmVhZGVyLmMgKGZyZWVfbWVyZ2VyX2Z1bmN0aW9ucyk6IENsZWFudXA6IFhGUkVFLT5mcmVlLgorCisJKiBkb2MvYmlzb24udGV4aW5mbyAoR0xSIFBhcnNlcnMpOiBNYWtlIGNvcnJlY3Rpb25zIHN1Z2dlc3RlZCBieQorCUFraW0gRGVtYWlsbGUuCisKKwkqIGRhdGEvYmlzb24uZ2xyOiBDaGFuZ2UgbmFtZSB0byBnbHIuYworCSogZGF0YS9nbHIuYzogUmVuYW1lZCBmcm9tIGJpc29uLmdsci4KKwkqIGRhdGEvTWFrZWZpbGUuYW06IEFkZCBnbHIuYworCisJKiBzcmMvZ2V0YXJncy5jOgorCisJKiBzcmMvc3ltbGlzdC5oOiAgQWRkIGRwcmVjIGFuZCBtZXJnZXIgZmllbGRzIHRvIHN5bWJvbF9saXN0X3MuCisJKiBzcmMvc3ltbGlzdC5jIChzeW1ib2xfbGlzdF9uZXcpOiBJbml0aWFsaXplIGRwcmVjIGFuZCBtZXJnZXIgZmllbGRzLgorCisJT3JpZ2luYWxseSAyMDAyLTA2LTE2ICBQYXVsIEhpbGZpbmdlciAgPEhpbGZpbmdlckBDUy5CZXJrZWxleS5FRFU+CisKKwkqIGRhdGEvYmlzb24uZ2xyOiBCZSBzdXJlIHRvIHJlc3RvcmUgdGhlCisJY3VycmVudCAjbGluZSB3aGVuIHJldHVybmluZyB0byB0aGUgc2tlbGV0b24gY29udGVudHMgYWZ0ZXIgaGF2aW5nCisJZXhwb3NlZCB0aGUgaW5wdXQgZmlsZSdzICNsaW5lLgorCisJT3JpZ2luYWxseSAyMDAyLTA2LTEzICBQYXVsIEhpbGZpbmdlciAgPEhpbGZpbmdlckBDUy5CZXJrZWxleS5FRFU+CisKKwkqIGRhdGEvYmlzb24uZ2xyOiBCcmluZyB1cCB0byBkYXRlIHdpdGggY2hhbmdlcyB0byBiaXNvbi5zaW1wbGUuCisKKwlPcmlnaW5hbGx5IDIwMDItMDYtMDMgIFBhdWwgSGlsZmluZ2VyICA8SGlsZmluZ2VyQENTLkJlcmtlbGV5LkVEVT4KKworCSogZGF0YS9iaXNvbi5nbHI6IENvcnJlY3QgZGVmaW5pdGlvbnMgdGhhdCB1c2UgYjRfcHJlZml4LgorCVZhcmlvdXMgcmVmb3JtYXR0aW5nLgorCShHTFJTdGFjayk6IE1ha2UgeXljaGFyIChpbiBZWVBVUkUgY2FzZSkgYW5kIHl5dG9rZW5wIGFzIHBhcnQgb2Ygc3RhY2suCisJKHl5cmVwb3J0UGFyc2VFcnJvciwgeXlyZWNvdmVyUGFyc2VFcnJvciwgeXlwcm9jZXNzT25lU3RhY2spOiByZW1vdmUKKwl5eXRva2VucCBhcmd1bWVudDsgbm93IHBhcnQgb2Ygc3RhY2suCisJKHl5Y2hhcik6IERlZmluZSB0byBiZWhhdmUgYXMgZG9jdW1lbnRlZC4KKwkoeXljbGVhcmluKTogRGl0dG8uCisKKwlPcmlnaW5hbGx5IDIwMDItMDUtMTQgIFBhdWwgSGlsZmluZ2VyICA8SGlsZmluZ2VyQENTLkJlcmtlbGV5LkVEVT4KKworCSogc3JjL3JlYWRlci5oOiBBZGQgZGVjbGFyYXRpb24gZm9yIGZyZWVfbWVyZ2VyX2Z1bmN0aW9ucy4KKworCSogc3JjL3JlYWRlci5jIChtZXJnZV9mdW5jdGlvbnMpOiBOZXcgdmFyaWFibGUuCisJKGdldF9tZXJnZV9mdW5jdGlvbik6IE5ldyBmdW5jdGlvbi4KKwkoZnJlZV9tZXJnZXJfZnVuY3Rpb25zKTogTmV3IGZ1bmN0aW9uLgorCShyZWFkZ3JhbSk6IENoZWNrIGZvciAlcHJlYyB0aGF0IGlzIG5vdCBmb2xsb3dlZCBieSBhIHN5bWJvbC4KKwlIYW5kbGUgJWRwcmVjIGFuZCAlbWVyZ2UgZGVjbGFyYXRpb25zLgorCShwYWNrZ3JhbSk6IEluaXRpYWxpemUgZHByZWMgYW5kIG1lcmdlciBmaWVsZHMgaW4gcnVsZXMgYXJyYXkuCisKKwkqIHNyYy9vdXRwdXQuYyAoY29uZmxpY3RfdG9zLCBjb25mbHJvdywgY29uZmxpY3RfdGFibGUsIGNvbmZsaWN0X2xpc3QsCisJY29uZmxpY3RfbGlzdF9jbnQsIGNvbmZsaWN0X2xpc3RfZnJlZSk6IE5ldyB2YXJpYWJsZXMuCisJKHRhYmxlX2dyb3cpOiBBbHNvIGdyb3cgY29uZmxpY3RfdGFibGUuCisJKHByZXBhcmVfcnVsZXMpOiBPdXRwdXQgZHByZWMgYW5kIG1lcmdlciB0YWJsZXMuCisJKGNvbmZsaWN0X3Jvdyk6IE5ldyBmdW5jdGlvbi4KKwkoYWN0aW9uX3Jvdyk6IE91dHB1dCBjb25mbGljdCBsaXN0cyBmb3IgR0xSIHBhcnNlci4gIERvbid0IHVzZQorCWRlZmF1bHQgcmVkdWN0aW9uIGluIGNvbmZsaWN0ZWQgc3RhdGVzIGZvciBHTFIgcGFyc2VyIHNvIHRoYXQgdGhlcmUKKwlhcmUgc3BhY2VzIGZvciB0aGUgY29uZmxpY3QgbGlzdHMuCisJKHNhdmVfcm93KTogQWxzbyBzYXZlIGNvbmZsaWN0IGluZm9ybWF0aW9uLgorCSh0b2tlbl9hY3Rpb25zKTogQWxsb2NhdGUgY29uZmxpY3QgbGlzdC4KKwkobWVyZ2VyX291dHB1dCk6IE5ldyBmdW5jdGlvbi4KKwkocGFja192ZWN0b3IpOiBQYWNrIGNvbmZsaWN0IHRhYmxlLCB0b28uCisJKG91dHB1dF9jb25mbGljdHMpOiBOZXcgZnVuY3Rpb24gdG8gb3V0cHV0IHl5Y29uZmxwIGFuZCB5eWNvbmZsLgorCShvdXRwdXRfY2hlY2spOiBBbGxvY2F0ZSBjb25mbGljdF90b3MuCisJKG91dHB1dF9hY3Rpb25zKTogT3V0cHV0IGNvbmZsaWN0IHRhYmxlcywgYWxzby4KKwkob3V0cHV0X3NrZWxldG9uKTogT3V0cHV0IGI0X21lcmdlcnMgZGVmaW5pdGlvbi4KKwkocHJlcGFyZSk6IE91dHB1dCBiNF9tYXhfcmhzX2xlbmd0aCBkZWZpbml0aW9uLgorCVVzZSAnYmlzb24uZ2xyJyBhcyBkZWZhdWx0IHNrZWxldG9uIGZvciBHTFIgcGFyc2Vycy4KKworCSogc3JjL2dyYW0uYyAoZ2xyX3BhcnNlcik6IE5ldyBmbGFnLgorCShncmFtbWFyX2ZyZWUpOiBDYWxsIGZyZWVfbWVyZ2VyX2Z1bmN0aW9ucy4KKworCSogc3JjL2NvbmZsaWN0cy5jIChjb3VudF9ycl9jb25mbGljdHMpOiBBdWdtZW50IHRvIG9wdGlvbmFsbHkgY291bnQKKwlhbGwgcGFpcnMgb2YgY29uZmxpY3RpbmcgcmVkdWN0aW9ucywgcmF0aGVyIHRoYW4ganVzdCBhbGwgdG9rZW5zCisJY2F1c2luZyBjb25mbGljdHMuICBOZWVkZWQgdG8gc2l6ZSBjb25mbGljdCB0YWJsZXMuCisJKGNvbmZsaWN0c19vdXRwdXQpOiBNb2RpZnkgY2FsbCB0byBjb3VudF9ycl9jb25mbGljdHMgZm9yIG5ldworCWludGVyZmFjZS4KKwkoY29uZmxpY3RzX3ByaW50KTogRGl0dG8uCisJKGNvdW50X3RvdGFsX2NvbmZsaWN0cyk6IE5ldyBmdW5jdGlvbi4KKworCSogc3JjL3JlYWRlci5oIChtZXJnZXJfbGlzdCk6IE5ldyB0eXBlLgorCShtZXJnZV9mdW5jdGlvbnMpOiBOZXcgdmFyaWFibGUuCisKKwkqIHNyYy9sZXguaCAodG9rX2RwcmVjLCB0b2tfbWVyZ2UpOiBOZXcgdG9rZW4gdHlwZXMuCisKKwkqIHNyYy9ncmFtLmggKHJ1bGVfcyk6IEFkZCBkcHJlYyBhbmQgbWVyZ2VyIGZpZWxkcy4KKwkoZ2xyX3BhcnNlcik6IE5ldyBmbGFnLgorCisJKiBzcmMvY29uZmxpY3RzLmggKGNvdW50X3RvdGFsX2NvbmZsaWN0cyk6IE5ldyBmdW5jdGlvbi4KKworCSogc3JjL29wdGlvbnMuYyAob3B0aW9uX3RhYmxlKTogQWRkICVkcHJlYywgJW1lcmdlLCBhbmQgJWdsci1wYXJzZXIuCisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChHZW5lcmFsaXplZCBMUiBQYXJzaW5nKTogTmV3IHNlY3Rpb24uCisJKEdMUiBQYXJzZXJzKTogTmV3IHNlY3Rpb24uCisJKExhbmd1YWdlIGFuZCBHcmFtbWFyKTogTWVudGlvbiBHTFIgcGFyc2luZy4KKwkoVGFibGUgb2YgU3ltYm9scyk6IEFkZCAlZHByZWMsICVnbHItcGFyc2VyLCAlbWVyZ2UsIEdMUgorCUNvcnJlY3QgdHlwbyAoInRnZSIgLT4gInRoZSIpLgorCisJKiBkYXRhL2Jpc29uLmdscjogTmV3IHNrZWxldG9uIGZvciBHTFIgcGFyc2luZy4KKworCSogdGVzdHMvY3h4LWdyYW0uYXQ6IE5ldyB0ZXN0cyBmb3IgR0xSIHBhcnNpbmcuCisKKwkqIHRlc3RzL3Rlc3RzdWl0ZS5hdDogSW5jbHVkZSBjeHgtZ3JhbS5hdC4KKworCSogdGVzdHMvTWFrZWZpbGUuYW06IEFkZCBjeHgtZ3JhbS5hdC4KKworCSogc3JjL3BhcnNlLWdyYW0ueToKKworCSogc3JjL3NjYW4tZ3JhbS5sOiBBZGQgJWRwcmVjLCAlZ2xyLXBhcnNlciwgJW1lcmdlLgorCisJKiBzcmMvcGFyc2UtZ3JhbS55OiBHcmFtbWFyIGZvciAlZHByZWMsICVtZXJnZSwgJWdsci1wYXJzZXIuCisKKzIwMDItMDYtMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvb3B0aW9ucy5oLCBzcmMvb3B0aW9ucy5jOiBSZW1vdmUuCisJKiBzcmMvZ2V0YXJncy5jIChzaG9ydF9vcHRpb25zLCBsb25nX29wdGlvbnMpOiBOZXcuCisKKzIwMDItMDYtMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2Jpc29uLnNpbXBsZSwgZGF0YS9iaXNvbi5jKys6IFJlbmFtZSBhcy4uLgorCSogZGF0YS95YWNjLmMsIGRhdGEvbGFscjEuY2M6IHRoZXNlLgorCSogZG9jL2Jpc29uLnRleGluZm8gKEVudmlyb25tZW50IFZhcmlhYmxlcyk6IFJlbW92ZS4KKworMjAwMi0wNi0yNSAgUmFqYSBSIEhhcmluYXRoICA8aGFyaW5hdGhAY3MudW1uLmVkdT4KKworCSogc3JjL2dldGFyZ3MuYyAocmVwb3J0X2FyZ21hdGNoKTogSW5pdGlhbGl6ZSBzdHJ0b2soKS4KKworMjAwMi0wNi0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEvYmlzb24uc2ltcGxlIChiNF9zeW1ib2xfYWN0aW9ucyk6IE5ldywgcmVwbGFjZXMuLi4KKwkoYjRfc3ltYm9sX2Rlc3RydWN0b3IsIGI0X3N5bWJvbF9wcmludGVyKTogdGhlc2UuCisJKHl5c3ltcHJpbnQpOiBCZSBzdXJlIHRvIGNhbGwgWVlQUklOVCBvbmx5IGZvciB0b2tlbnMsIGFuZCB1c2luZworCXVzZXIgdG9rZW4gbnVtYmVycy4KKworMjAwMi0wNi0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEvYmlzb24uc2ltcGxlICh5eWRlc3RydWN0b3IpOiBSZW5hbWUgYXMuLi4KKwkoeXlkZXN0cnVjdCk6IHRoaXMuCisKKzIwMDItMDYtMjAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvc3ltdGFiLmgsIHNyYy9zeW10YWIuYyAoc3ltYm9sX3R5cGVfc2V0KQorCShzeW1ib2xfZGVzdHJ1Y3Rvcl9zZXQsIHN5bWJvbF9wcmVjZWRlbmNlX3NldCk6IFRoZSBsb2NhdGlvbiBpcworCXRoZSBsYXN0IGFyZ3VtZW50LgorCUFkanVzdCBhbGwgY2FsbGVycy4KKworMjAwMi0wNi0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9wYXJzZS1ncmFtLnkgKFlZUFJJTlQsIHl5cHJpbnQpOiBEb24ndCBtZXNzIHdpdGggdGhlIHBhcnNlcgorCWludGVybmFscy4KKwkqIHNyYy9yZWFkZXIuaCwgc3JjL3JlYWRlci5jIChncmFtbWFyX2N1cnJlbnRfcnVsZV9wcmVjX3NldCk6CisJVGFrZXMgYSBsb2NhdGlvbi4KKwkqIHNyYy9zeW10YWIuaCwgc3JjL3N5bXRhYi5jIChzeW1ib2xfY2xhc3Nfc2V0KQorCShzeW1ib2xfdXNlcl90b2tlbl9udW1iZXJfc2V0KTogTGlrZXdpc2UuCisJQWRqdXN0IGFsbCBjYWxsZXJzLgorCVByb21vdGUgY29tcGxhaW5fYXQuCisJKiB0ZXN0cy9pbnB1dC5hdCAoVHlwZSBDbGFzaGVzKTogQWRqdXN0LgorCisyMDAyLTA2LTIwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9iaXNvbi5zaW1wbGUgKFlZTEVYKTogRml4IHRoZSBkZWNsYXJhdGlvbiB3aGVuCisJJXB1cmUtcGFyc2VyLgorCisyMDAyLTA2LTIwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9iaXNvbi5zaW1wbGUgKHl5c3ltcHJpbnQpOiBEb24ndCBwcmludCB0aGUgdG9rZW4gbnVtYmVyLAorCWp1c3QgaXRzIG5hbWUuCisJKiB0ZXN0cy9hY3Rpb25zLmF0IChEZXN0cnVjdG9ycyk6IFJlbmFtZSBhcy4uLgorCShQcmludGVycyBhbmQgRGVzdHJ1Y3RvcnMpOiB0aGlzLgorCUFsc28gZXhlcmNpc2UgJXByaW50ZXIuCisKKzIwMDItMDYtMjAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2Jpc29uLnNpbXBsZSAoWVlEU1lNUFJJTlQpOiBOZXcuCisJVXNlIGl0IHRvIHJlbW92ZSBtYW55IG9mIHRoZSAjaWYgWVlERUJVRy9pZiAoeXlkZWJ1ZykuCisKKzIwMDItMDYtMjAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvc3ltdGFiLmgsIHNyYy9zeW10YWIuYyAoc3ltYm9sX3QpOiBwcmludGVyIGFuZAorCXByaW50ZXJfbG9jYXRpb24gYXJlIG5ldyBtZW1iZXJzLgorCShzeW1ib2xfcHJpbnRlcl9zZXQpOiBOZXcuCisJKiBzcmMvcGFyc2UtZ3JhbS55IChQRVJDRU5UX1BSSU5URVIpOiBOZXcgdG9rZW4uCisJSGFuZGxlIGl0cyBhc3NvY2lhdGVkIHJ1bGUuCisJKiBzcmMvc2Nhbi1ncmFtLmw6IEFkanVzdC4KKwkoaGFuZGxlX2Rlc3RydWN0b3JfYXQsIGhhbmRsZV9kZXN0cnVjdG9yX2RvbGxhcik6IFJlbmFtZSBhcy4uLgorCShoYW5kbGVfc3ltYm9sX2NvZGVfYXQsIGhhbmRsZV9zeW1ib2xfY29kZV9kb2xsYXIpOiB0aGVzZS4KKwkqIHNyYy9vdXRwdXQuYyAoc3ltYm9sX3ByaW50ZXJzX291dHB1dCk6IE5ldy4KKwkob3V0cHV0X3NrZWxldG9uKTogQ2FsbCBpdC4KKwkqIGRhdGEvYmlzb24uc2ltcGxlICh5eXN5bXByaW50KTogTmV3LiAgQ2Fubm90IGJlIG5hbWVkIHl5cHJpbnQKKwlzaW5jZSB0aGVyZSBhcmUgYWxyZWFkeSBtYW55IGdyYW1tYXIgZmlsZXMgd2l0aCBhIHVzZXIgYHl5cHJpbnQnLgorCVJlcGxhY2UgdGhlIGNhbGxzIHRvIFlZUFJJTlQgdG8gY2FsbHMgdG8geXlzeW1wcmludC4KKwkqIHRlc3RzL2NhbGMuYXQ6IEFkanVzdC4KKwkqIHRlc3RzL3RvcnR1cmUuYXQgKEFUX0RBVEFfU1RBQ0tfVE9SVFVSRSk6IFJlbW92ZSBZWVBSSU5UOiBpdCB3YXMKKwl0YWtpbmcgYWR2YW50YWdlIG9mIHBhcnNlciB2ZXJ5IGludGVybmFsIGRldGFpbHMgKHN0YWNrIHNpemUhKS4KKworMjAwMi0wNi0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9zY2FuLWdyYW0ubDogQ29tcGxldGUgdGhlIHNjYW5uZXIgd2l0aCB0aGUgbWlzc2luZyBwYXR0ZXJucworCXRvIHBhY2lmeSBGbGV4LgorCVVzZSBgcXVvdGUnIGFuZCBgc3ltYm9sX3RhZ19nZXQnIHdoZXJlIGFwcHJvcHJpYXRlLgorCisyMDAyLTA2LTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogdGVzdHMvYWN0aW9ucy5hdCAoRGVzdHJ1Y3RvcnMpOiBBdWdtZW50IHRvIHRlc3QgbG9jYXRpb25zLgorCSogZGF0YS9iaXNvbi5zaW1wbGUgKHl5ZGVzdHJ1Y3Rvcik6IFBhc3MgaXQgdGhlIGN1cnJlbnQgbG9jYXRpb24KKwlpZiBsb2NhdGlvbnMgYXJlIGVuYWJsZWQuCisJUHJvdG90eXBlIG9ubHkgd2hlbiBfX1NURENfXyBvciBDKysuCisJQ2hhbmdlIHRoZSBhcmd1bWVudCBuYW1lcyB0byBtb3ZlIGludG8gdGhlIHl5IG5hbWUgc3BhY2U6IHRoZXJlIGlzCisJdXNlciBjb2RlIGhlcmUuCisKKzIwMDItMDYtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2Jpc29uLnNpbXBsZSAoYjRfcHVyZV9pZik6IE5ldy4KKwlVc2UgaXQgaW5zdGVhZCBvZiAjaWZkZWYgWVlQVVJFLgorCisyMDAyLTA2LTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9iaXNvbi5zaW1wbGUgKGI0X2xvY2F0aW9uX2lmKTogTmV3LgorCVVzZSBpdCBpbnN0ZWFkIG9mICNpZmRlZiBZWUxTUF9ORUVERUQuCisKKzIwMDItMDYtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJUHJlcGFyZSBAJCBpbiAlZGVzdHJ1Y3RvciwgYnV0IGN1cnJlbnRseSBkb24ndCBiaW5kIGl0IGluIHRoZQorCXNrZWxldG9uLCBhcyAlbG9jYXRpb24gdXNlIGlzIG5vdCBjbGVhbmVkIHVwIHlldC4KKworCSogc3JjL3NjYW4tZ3JhbS5sIChoYW5kbGVfZG9sbGFyLCBoYW5kbGVfZGVzdHJ1Y3Rvcl9hdCkKKwkoaGFuZGxlX2FjdGlvbl9hdCk6IE5ldy4KKwkoaGFuZGxlX2F0LCBoYW5kbGVfYWN0aW9uX2RvbGxhciwgaGFuZGxlX2Rlc3RydWN0b3JfZG9sbGFyKTogVGFrZQorCWEgYnJhY2VkX2NvZGVfdCBhbmQgYSBsb2NhdGlvbiBhcyBhZGRpdGlvbmFsIGFyZ3VtZW50cy4KKwkoaGFuZGxlX2Rlc3RydWN0b3JfZG9sbGFyKTogSW5zdGVhZCBvZiByZXF1aXJpbmcgYGI0X2V2YWwnLCBqdXN0CisJdW5xdW90ZSBvbmUgd2hlbiBvdXRwdXR0aW5nIGBiNF9kb2xsYXJfZG9sbGFyJy4KKwlBZGp1c3QgY2FsbGVycy4KKwkqIGRhdGEvYmlzb24uc2ltcGxlIChiNF9ldmFsKTogUmVtb3ZlLgorCShiNF9zeW1ib2xfZGVzdHJ1Y3Rvcik6IEFkanVzdC4KKwkqIHRlc3RzL2lucHV0LmF0IChJbnZhbGlkIEBuKTogQWRqdXN0LgorCisyMDAyLTA2LTE5ICBaYWNrIFdlaW5iZXJnICA8emFja0Bjb2Rlc291cmNlcnkuY29tPgorCisJKiBkb2MvYmlzb24udGV4aW5mbzogRG9jdW1lbnQgYWJpbGl0eSB0byBoYXZlIG11bHRpcGxlCisJcHJvbG9ndWUgc2VjdGlvbnMuCisKKzIwMDItMDYtMTggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvZmlsZXMuYyAoY29tcHV0ZV9iYXNlX25hbWVzKTogV2hlbiBjb21wdXRpbmcgdGhlIG91dHB1dCBmaWxlCisJbmFtZXMgZnJvbSB0aGUgaW5wdXQgZmlsZSBuYW1lLCBzdHJpcCB0aGUgZGlyZWN0b3J5IHBhcnQuCisKKzIwMDItMDYtMTggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2Jpc29uLnNpbXBsZS5uZXc6IENvbW1lbnQgY2hhbmdlcy4KKwlSZXBvcnRlZCBieSBBbmRyZWFzIFNjaHdhYi4KKworMjAwMi0wNi0xOCAgTWF0dCBLcmFhaSAgPGtyYWFpQGFsdW1uaS5jbXUuZWR1PgorCisJKiBkYXRhL2Jpc29uLnNpbXBsZSAoeXlvdmVyZmxvd2xhYik6ICNpZm5kZWYgeXlvdmVyZmxvdywgc28gdGhhdAorCXRoZXJlIGFyZSBubyBgbGFiZWwgYHl5b3ZlcmZsb3dsYWInIGRlZmluZWQgYnV0IG5vdCB1c2VkJyB3YXJuaW5ncworCXdoZW4geXlvdmVyZmxvdyBpcyBkZWZpbmVkLgorCisyMDAyLTA2LTE4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3N5bXRhYi5oLCBzcmMvc3ltdGFiLmMgKHN5bWJvbF90KTogZGVzdHJ1Y3Rvcl9sb2NhdGlvbiBpcyBhCisJbmV3IG1lbWJlci4KKwkoc3ltYm9sX2Rlc3RydWN0b3Jfc2V0KTogQWRqdXN0LgorCSogc3JjL291dHB1dC5jIChzeW1ib2xfZGVzdHJ1Y3RvcnNfb3V0cHV0KTogT3V0cHV0IHRoZSBkZXN0cnVjdG9yCisJbG9jYXRpb25zLgorCU91dHB1dCB0aGUgc3ltYm9sIG5hbWUuCisJKiBkYXRhL2Jpc29uLnNpbXBsZSAoYjRfc3ltYm9sX2Rlc3RydWN0b3IpOiBBZGp1c3QuCisKKzIwMDItMDYtMTggIENyaXMgQmFpbGlmZiAgPGMuYmFpbGlmZkBhd2F5d2ViLmNvbT4KKwlhbmQgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEvYmlzb24uc2ltcGxlLm5ldyAoeXllcnJsYWIxKTogQmUgc3VyZSB0byBwb3AgYW5kIGRlc3Ryb3kKKwl3aGF0J3MgbGVmdCBvbiB0aGUgc3RhY2sgd2hlbiB0aGUgZXJyb3IgcmVjb3ZlcnkgaGl0cyBFT0YuCisJKiB0ZXN0cy9hY3Rpb25zLmF0IChEZXN0cnVjdG9ycyk6IENvbXBsZXRlIHRvIGV4ZXJjaXNlIHRoaXMgY2FzZS4KKworMjAwMi0wNi0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEvbTRzdWdhci9tNHN1Z2FyLm00IChtNF9tYXApOiBSZWNvZ25pemUgd2hlbiB0aGUgbGlzdCBvZgorCWFyZ3VtZW50cyBpcyByZWFsbHkgZW1wdHksIG5vdCBvbmx5IGVxdWFsIHRvIGBbXScuCisJKiBzcmMvc3ltdGFiLmgsIHNyYy9zeW10YWIuYyAoc3ltYm9sX3QpOiBgZGVzdHJ1Y3RvcicgaXMgYSBuZXcKKwltZW1iZXIuCisJKHN5bWJvbF9kZXN0cnVjdG9yX3NldCk6IE5ldy4KKwkqIHNyYy9vdXRwdXQuYyAoc3ltYm9sX2Rlc3RydWN0b3JzX291dHB1dCk6IE5ldy4KKwkqIHNyYy9yZWFkZXIuaCAoYnJhY2VfY29kZV90LCBjdXJyZW50X2JyYWNlZF9jb2RlKTogTmV3LgorCSogc3JjL3NjYW4tZ3JhbS5sIChCUkFDRURfQ09ERSk6IFVzZSBpdCB0byBicmFuY2ggb24uLi4KKwkoaGFuZGxlX2RvbGxhcik6IFJlbmFtZSBhcy4uLgorCShoYW5kbGVfYWN0aW9uX2RvbGxhcik6IHRoaXMuCisJKGhhbmRsZV9kZXN0cnVjdG9yX2RvbGxhcik6IE5ldy4KKwkqIHNyYy9wYXJzZS1ncmFtLnkgKFBFUkNFTlRfREVTVFJVQ1RPUik6IE5ldy4KKwkoZ3JhbW1hcl9kZWNsYXJhdGlvbik6IFVzZSBpdC4KKwkqIGRhdGEvYmlzb24uc2ltcGxlICh5eXN0b3MpOiBJcyBhbHdheXMgZGVmaW5lZC4KKwkoeXlkZXN0cnVjdG9yKTogTmV3LgorCSogdGVzdHMvYWN0aW9ucy5hdCAoRGVzdHJ1Y3RvcnMpOiBOZXcuCisJKiB0ZXN0cy9jYWxjLmF0IChfQVRfQ0hFQ0tfQ0FMQ19FUlJPUik6IERvbid0IHJlbHkgb24gZWdyZXAuCisKKzIwMDItMDYtMTcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvc3ltbGlzdC5oLCBzcmMvc3ltbGlzdC5jIChzeW1ib2xfbGlzdF9sZW5ndGgpOiBOZXcuCisJKiBzcmMvc2Nhbi1ncmFtLmwgKGhhbmRsZV9kb2xsYXIsIGhhbmRsZV9hdCk6IENvbXB1dGUgdGhlCisJcnVsZV9sZW5ndGggb25seSB3aGVuIG5lZWRlZC4KKwkqIHNyYy9vdXRwdXQuYyAoYWN0aW9uc19vdXRwdXQsIHRva2VuX2RlZmluaXRpb25zX291dHB1dCk6IE91dHB1dAorCXRoZSBmdWxsIE00IGJsb2NrLgorCSogc3JjL3N5bXRhYi5jOiBEb24ndCBhY2Nlc3MgZGlyZWN0bHkgdG8gdGhlIHN5bWJvbCB0YWcsIHVzZQorCXN5bWJvbF90YWdfZ2V0LgorCSogc3JjL3BhcnNlLWdyYW0ueTogVXNlIHN5bWJvbF9saXN0X2ZyZWUuCisKKzIwMDItMDYtMTcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmgsIHNyYy9yZWFkZXIuYyAoc3ltYm9sX2xpc3QsIHN5bWJvbF9saXN0X25ldykKKwkoc3ltYm9sX2xpc3RfcHJlcGVuZCwgZ2V0X3R5cGVfbmFtZSk6IE1vdmUgdG8uLi4KKwkqIHNyYy9zeW1saXN0LmgsIHNyYy9zeW1saXN0LmMgKHN5bWJvbF9saXN0X3QsIHN5bWJvbF9saXN0X25ldykKKwkoc3ltYm9sX2xpc3RfcHJlcGVuZCwgc3ltYm9sX2xpc3Rfbl90eXBlX25hbWVfZ2V0KTogaGVyZS4KKwlBZGp1c3QgYWxsIGNhbGxlcnMuCisJKHN5bWJvbF9saXN0X2ZyZWUpOiBOZXcuCisJKiBzcmMvc2Nhbi1ncmFtLmwgKGhhbmRsZV9kb2xsYXIpOiBUYWtlcyBhIGxvY2F0aW9uLgorCSogdGVzdHMvaW5wdXQuYXQgKEludmFsaWQgJG4pOiBBZGp1c3QuCisKKzIwMDItMDYtMTcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmgsIHNyYy9yZWFkZXIuYyAoc3ltYm9sX2xpc3RfbmV3KTogRXhwb3J0IGl0LgorCShzeW1ib2xfbGlzdF9wcmVwZW5kKTogTmV3LgorCSogc3JjL3BhcnNlLWdyYW0ueSAoJXVuaW9uKTogYGxpc3QnIGlzIGEgbmV3IG1lbWJlci4KKwkoc3ltYm9scy4xKTogTmV3LCByZXBsYWNlcy4uLgorCSh0ZXJtc190b19wcmVjLjEsIG50ZXJtc190b190eXBlLjEpOiB0aGVzZS4KKwkqIHNyYy9zeW10YWIuaCwgc3JjL3N5bXRhYi5jIChzeW1ib2xfdHlwZV9zZXQsIHN5bWJvbF9wcmVjZWRlbmNlX3NldCkKKwlUYWtlIGEgbG9jYXRpb24gYXMgYWRkaXRpb25hbCBhcmd1bWVudC4KKwlBZGp1c3QgYWxsIGNhbGxlcnMuCisKKzIwMDItMDYtMTUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcGFyc2UtZ3JhbS55OiBNb3ZlICV0b2tlbiBpbiB0aGUgZGVjbGFyYXRpb24gc2VjdGlvbiBzbyB0aGF0CisJd2UgZG9uJ3QgZGVwZW5kIHVwb24gQ1ZTIEJpc29uLgorCisyMDAyLTA2LTE1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3N0YXRlLmgsIHNyYy9zdGF0ZS5jIChzdGF0ZV9ydWxlX2xvb2thaGVhZHNfcHJpbnQpOiBOZXcuCisJKiBzcmMvcHJpbnQuYyAocHJpbnRfY29yZSk6IFVzZSBpdC4KKworMjAwMi0wNi0xNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9jb25mbGljdHMuYyAobG9nX3Jlc29sdXRpb24pOiBBY2NlcHQgdGhlIHJ1bGUgaW52b2x2ZWQgaW4KKwl0aGUgc3IgY29uZmxpY3RzIGluc3RlYWQgb2YgdGhlIGxvb2thaGVhZCBudW1iZXIgdGhhdCBwb2ludHMgdG8KKwl0aGF0IHJ1bGUuCisJKGZsdXNoX3JlZHVjZSk6IEFjY2VwdCB0aGUgY3VycmVudCBsb29rYWhlYWQgdmVjdG9yIGFzIGFyZ3VtZW50LAorCWluc3RlYWQgb2YgdGhlIGluZGV4IGluIExBLgorCShyZXNvbHZlX3NyX2NvbmZsaWN0KTogQWNjZXB0IHRoZSBjdXJyZW50IG51bWJlciBvZiBsb29rYWhlYWQKKwliaXRzZXQgdG8gY29uc2lkZXIgZm9yIHRoZSBTVEFURSwgaW5zdGVhZCBvZiB0aGUgaW5kZXggaW4gTEEuCisJKHNldF9jb25mbGljdHMpOiBBZGp1c3QuCisJKiBzcmMvbGFsci5jLCBzcmMvbGFsci5oLCBzcmMvc3RhdGUuaDogQ29tbWVudCBjaGFuZ2VzLgorCisyMDAyLTA2LTE1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3N0YXRlLmggKHN0YXRlX3QpOiBSZXBsYWNlIHRoZSBgbG9va2FoZWFkc3AnIG1lbWJlciwgYQorCXNob3J0LCB3aXRoIGBsb29rYWhlYWRzJyAoYml0c2V0diksIGBsb29rYWhlYWRzX3J1bGUnIChydWxlX3QqKikuCisJQWRqdXN0IGFsbCBkZXBlbmRlbmNpZXMuCisJKiBzcmMvbGFsci5jIChpbml0aWFsaXplX2xvb2thaGVhZHMpOiBTcGxpdCBpbnRvLi4uCisJKHN0YXRlc19sb29rYWhlYWRzX2NvdW50LCBzdGF0ZXNfbG9va2FoZWFkc19pbml0aWFsaXplKTogdGhlc2UuCisJKGxhbHIpOiBBZGp1c3QuCisKKzIwMDItMDYtMTUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvZ3JhbS5oLCBzcmMvZ3JhbS5jIChncmFtbWFyX3J1bGVzX3BhcnRpYWxfcHJpbnQpOiBOZXcsIGV2ZWQKKwlvdXQgb2YuLi4KKwkoZ3JhbW1hcl9ydWxlc19wcmludCk6IGhlcmUuCisJKiBzcmMvcmVkdWNlLmMgKHJlZHVjZV9vdXRwdXQpOiBVc2UgaXQuCisJKiB0ZXN0cy9yZWR1Y2UuYXQgKFVzZWxlc3MgUnVsZXMsIFJlZHVjZWQgQXV0b21hdG9uKQorCShVbmRlcml2YWJsZSBSdWxlcyk6IEFkanVzdC4KKworMjAwMi0wNi0xNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlDb3B5IEJZYWNjJ3MgbmljZSB3YXkgdG8gcmVwb3J0IHRoZSBncmFtbWFyLgorCisJKiBzcmMvZ3JhbS5oLCBzcmMvZ3JhbS5jIChncmFtbWFyX3Joc19wcmludCwgZ3JhbW1hcl9ydWxlc19wcmludCk6CisJTmV3LgorCURvbid0IHByaW50IHRoZSBydWxlcycgbG9jYXRpb24sIGl0IGlzIGNvbmZ1c2luZyBhbmQgdXNlbGVzcy4KKwkocnVsZV9wcmludCk6IFVzZSBncmFtbWFyX3Joc19wcmludC4KKwkqIHNyYy9wcmludC5jIChwcmludF9ncmFtbWFyKTogVXNlIGdyYW1tYXJfcnVsZXNfcHJpbnQuCisKKzIwMDItMDYtMTUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJQ29tcGxldGUgYW5kIHJhdGlvbmFsaXplIGB1c2VsZXNzIHRoaW5nJyB3YXJuaW5ncy4KKworCSogc3JjL3N5bXRhYi5oLCBzcmMvc3ltdGFiLmMgKHN5bWJvbF90YWdfZ2V0LCBzeW1ib2xfdGFnX2dldF9uKQorCShzeW1ib2xfdGFnX3ByaW50KTogTmV3LgorCVVzZSB0aGVtIGV2ZXJ5d2hlcmUgaW4gcGxhY2Ugb2YgYWNjZXNzaW5nIGRpcmVjdGx5IHRoZSB0YWcgbWVtYmVyLgorCSogc3JjL2dyYW0uaCwgc3JjL2dyYW0uYyAocnVsZV9wcmludCk6IE5ldy4KKwlVc2UgaXQgd2hlcmUgYSBydWxlIHVzZWQgdG8gYmUgcHJpbnRlZCBgYnkgaGFuZCcuCisJKiBzcmMvcmVkdWNlLmMgKG5vbnRlcm1pbmFsc19yZWR1Y2UpOiBSZXBvcnQgdGhlIHVzZSBub250ZXJtaW5hbHMuCisJKHJlZHVjZV9ncmFtbWFyX3RhYmxlcyk6IFJlcG9ydCB0aGUgdXNlbGVzcyBydWxlcy4KKwkocmVkdWNlX3ByaW50KTogVXNlbGVzcyB0aGluZ3MgYXJlIGEgd2FybmluZywgbm90IGFuIGVycm9yLgorCVJlcG9ydCBpdCBhcyBzdWNoLgorCSogdGVzdHMvcmVkdWNlLmF0IChVc2VsZXNzIE5vbnRlcm1pbmFscywgVXNlbGVzcyBSdWxlcyk6CisJKFJlZHVjZWQgQXV0b21hdG9uLCBVbmRlcml2YWJsZSBSdWxlcyk6IEFkanVzdC4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFdlYjJjIFJlcG9ydCwgV2ViMmMgUmVwb3J0KTogQWRqdXN0LgorCSogdGVzdHMvY29uZmxpY3RzLmF0IChVbnJlc29sdmVkIFNSIENvbmZsaWN0cykKKwkoU29sdmVkIFNSIENvbmZsaWN0cyk6IEFkanVzdC4KKworMjAwMi0wNi0xNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlMZXQgc3ltYm9scyBoYXZlIGEgbG9jYXRpb24uCisKKwkqIHNyYy9zeW10YWIuaCwgc3JjL3N5bXRhYi5jIChzeW1ib2xfdCk6IExvY2F0aW9uIGlzIGEgbmV3IG1lbWJlci4KKwkoZ2V0c3ltKTogQWRqdXN0LgorCUFkanVzdCBhbGwgY2FsbGVycy4KKwkqIHNyYy9jb21wbGFpbi5oLCBzcmMvY29tcGxhaW4uYyAoY29tcGxhaW5fYXQsIGZhdGFsX2F0LCB3YXJuX2F0KToKKwlVc2UgbG9jYXRpb25fdCwgbm90IGludC4KKwkqIHNyYy9zeW10YWIuYyAoc3ltYm9sX2NoZWNrX2RlZmluZWQpOiBUYWtlIGFkdmFudGFnZSBvZiB0aGUKKwlsb2NhdGlvbi4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKEludmFsaWQgaW5wdXRzKTogQWRqdXN0LgorCisyMDAyLTA2LTE1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3BhcnNlLWdyYW0ueSAoWVlMTE9DX0RFRkFVTFQsIGN1cnJlbnRfbGhzX2xvY2F0aW9uKTogTmV3LgorCShpbnB1dCk6IERvbid0IHRyeSB0byBpbml0aWFsaXplIHl5bGxvYyBoZXJlLCBkbyBpdCBpbiB0aGUKKwlzY2FubmVyLgorCSogc3JjL3NjYW4tZ3JhbS5sIChZWV9VU0VSX0lOSVQpOiBJbml0aWFsaXplIHl5bGxvYy4KKwkqIHNyYy9ncmFtLmggKHJ1bGVfdCk6IENoYW5nZSBsaW5lIGFuZCBhY3Rpb25fbGluZSBpbnRvIGxvY2F0aW9uCisJYW5kIGFjdGlvbl9sb2NhdGlvbiwgb2YgbG9jYXRpb25fdCB0eXBlLgorCUFkanVzdCBhbGwgZGVwZW5kZW5jaWVzLgorCSogc3JjL2xvY2F0aW9uLmgsIHNyYy9sb2NhdGlvbi5jIChlbXB0eV9sb2NhdGlvbik6IE5ldy4KKwkqIHNyYy9yZWFkZXIuaCwgc3JjL3JlYWRlci5jIChncmFtbWFyX3N0YXJ0X3N5bWJvbF9zZXQpCisJKGdyYW1tYXJfc3ltYm9sX2FwcGVuZCwgZ3JhbW1hcl9ydWxlX2JlZ2luLCBncmFtbWFyX3J1bGVfZW5kKQorCShncmFtbWFyX2N1cnJlbnRfcnVsZV9zeW1ib2xfYXBwZW5kKQorCShncmFtbWFyX2N1cnJlbnRfcnVsZV9hY3Rpb25fYXBwZW5kKTogRXhwZWN0IGEgbG9jYXRpb24gYXMgYXJndW1lbnQuCisJKiBzcmMvcmVhZGVyLmMgKGdyYW1tYXJfbWlkcnVsZV9hY3Rpb24pOiBBZGp1c3QgdG8gYXR0YWNoIGFuCisJYWN0aW9uJ3MgbG9jYXRpb24gYXMgZHVtbXkgc3ltYm9sIGxvY2F0aW9uLgorCSogc3JjL3N5bXRhYi5oLCBzcmMvc3ltdGFiLmMgKHN0YXJ0c3ltYm9sX2xvY2F0aW9uKTogTmV3LgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoV2ViMmMgUmVwb3J0LCBSdWxlIExpbmUgTnVtYmVycyk6IEFkanVzdAorCXRoZSBsaW5lIG51bWJlcnMuCisKKzIwMDItMDYtMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJR3JhbW1hciBkZWNsYXJhdGlvbnMgbWF5IGJlIGZvdW5kIGluIHRoZSBncmFtbWFyIHNlY3Rpb24uCisKKwkqIHNyYy9wYXJzZS1ncmFtLnkgKHJ1bGVzX29yX2dyYW1tYXJfZGVjbGFyYXRpb24pOiBOZXcuCisJKGRlY2xhcmF0aW9ucyk6IEVhY2ggZGVjbGFyYXRpb24gbWF5IGVuZCB3aXRoIGEgc2VtaWNvbG9uLCBub3QKKwlqdXN0Li4uCisJKGdyYW1tYXJfZGVjbGFyYXRpb24pOiBgIiV1bmlvbiInLgorCShncmFtbWFyKTogQnJhbmNoIHRvIHJ1bGVzX29yX2dyYW1tYXJfZGVjbGFyYXRpb24uCisKKzIwMDItMDYtMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvbWFpbi5jIChtYWluKTogSW52b2tlIHNjYW5uZXJfZnJlZS4KKworMjAwMi0wNi0xNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9vdXRwdXQuYyAobTRfaW52b2tlKTogRXh0cmFjdGVkIGZyb20uLi4KKwkob3V0cHV0X3NrZWxldG9uKTogaGVyZS4KKwlGcmVlIHRlbXBmaWxlLgorCisyMDAyLTA2LTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3BhcnNlLWdyYW0ueSAoZGlyZWN0aXZlcywgZGlyZWN0aXZlLCBncmFtKQorCShncmFtbWFyX2RpcmVjdGl2ZXMsIHByZWNlZGVuY2VfZGlyZWN0aXZlcywgcHJlY2VkZW5jZV9kaXJlY3RpdmUpOgorCVJlbmFtZSBhcy4uLgorCShkZWNsYXJhdGlvbnMsIGRlY2xhcmF0aW9uLCBncmFtbWFyLCBncmFtbWFyX2RlY2xhcmF0aW9uKQorCShwcmVjZWRlbmNlX2RlY2xhcmF0aW9uLCBwcmVjZWRlbmNlX2RlY2xhcmF0b3IpOiB0aGVzZS4KKwkoc3ltYm9sX2RlY2xhcmF0aW9uKTogTmV3LgorCisyMDAyLTA2LTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2ZpbGVzLmMgKGFjdGlvbl9vYnN0YWNrKTogUmVtb3ZlLCB1bnVzZWQuCisJKG91dHB1dF9vYnN0YWNrKTogUmVtb3ZlIGl0LCBhbmQgYWxsIGl0cyBkZXBlbmRlbmNpZXMsIGFzIGl0IGlzIG5vCisJbG9uZ2VyIG5lZWRlZC4KKwkqIHNyYy9yZWFkZXIuYyAoZXBpbG9ndWVfc2V0KTogQnVpbGQgdGhlIGVwaWxvZ3VlIGluIHRoZQorCW11c2NsZV9vYnN0YWNrLgorCSogc3JjL291dHB1dC5oLCBzcmMvb3V0cHV0LmMgKG11c2NsZV9vYnN0YWNrKTogTW92ZSB0by4uLgorCSogc3JjL211c2NsZV90YWIuaCwgc3JjL211c2NsZV90YWIuaDogaGVyZS4KKwkobXVzY2xlX2luaXQpOiBJbml0aWFsaXplIG11c2NsZV9vYnN0YWNrLgorCShtdXNjbGVfZnJlZSk6IE5ldy4KKwkqIHNyYy9tYWluLmMgKG1haW4pOiBDYWxsIGl0LgorCisyMDAyLTA2LTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2xvY2F0aW9uLmg6IE5ldywgZXh0cmFjdGVkIGZyb20uLi4KKwkqIHNyYy9yZWFkZXIuaDogaGVyZS4KKwkqIHNyYy9NYWtlZmlsZS5hbSAobm9pbnN0X0hFQURFUlMpOiBNZXJnZSBpbnRvCisJKGJpc29uX1NPVVJDRVMpOiB0aGlzLgorCUFkZCBsb2NhdGlvbi5oLgorCSogc3JjL3BhcnNlLWdyYW0ueTogVXNlIGxvY2F0aW9uX3QgaW5zdGVhZCBvZiBCaXNvbidzLgorCSogc3JjL3JlYWRlci5oLCBzcmMvcmVhZGVyLmMgKHByb2xvZ3VlX2F1Z21lbnQsIGVwaWxvZ3VlX3NldCk6CisJVXNlIGxvY2F0aW9uX3QgaW5zdGVhZCBvZiBpbnRzLgorCisyMDAyLTA2LTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9iaXNvbi5zaW1wbGUsIGRhdGEvYmlzb24uYysrOiBCZSBzdXJlIHRvIHJlc3RvcmUgdGhlCisJY3VycmVudCAjbGluZSB3aGVuIHJldHVybmluZyB0byB0aGUgc2tlbGV0b24gY29udGVudHMgYWZ0ZXIgaGF2aW5nCisJZXhwb3NlZCB0aGUgaW5wdXQgZmlsZSdzICNsaW5lLgorCisyMDAyLTA2LTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3NjYW4tZ3JhbS5sIChTQ19CUkFDRURfQ09ERSk6IERvbid0IHVzZSBgPC4qPicsIGl0IGlzIHRvbworCWVhZ2VyLgorCSogdGVzdHMvYWN0aW9ucy5hdCAoRXhvdGljIERvbGxhcnMpOiBOZXcuCisKKzIwMDItMDYtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvc2Nhbi1ncmFtLmwgKFNDX1BST0xPR1VFKTogRG9uJ3QgZWF0IGNoYXJhY3RlcnMgYW1vbmdzdAorCVsnIi9dIHRvbyBlYWdlcmx5LgorCSogdGVzdHMvaW5wdXQuYXQgKFRvcnR1cmluZyB0aGUgU2Nhbm5lcik6IE5ldy4KKworMjAwMi0wNi0xMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9zY2FuLWdyYW0ubCAoWVlfT0JTX0lOSVQpOiBSZW1vdmUsIHJlcGxhY2Ugd2l0aC4uLgorCVtTQ19DT01NRU5ULFNDX1NUUklORyxTQ19DSEFSQUNURVIsU0NfQlJBQ0VEX0NPREUsU0NfUFJPTE9HVUVdCisJW1NDX0VQSUxPR1VFXTogT3V0cHV0IHRoZSBxdWFkcmlncmFwaHMgb25seSB3aGVuIG5vdCBpbiBhIGNvbW1lbnQuCisJKiBzcmMvcmVhZGVyLmgsIHNyYy9zY2FuLWdyYW0ubCAoc2Nhbm5lcl9pbml0aWFsaXplKTogdGhpcy4KKwkqIHNyYy9yZWFkZXIuYyAocmVhZGVyKTogVXNlIGl0LgorCisyMDAyLTA2LTExICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3NjYW4tZ3JhbS5sIChZWV9PQlNfRklOSVNIKTogRG9uJ3Qgc2V0IHl5bHZhbC4KKwlBZGp1c3QgYWxsIGNhbGxlcnMuCisJKHNjYW5uZXJfbGFzdF9zdHJpbmdfZnJlZSk6IE5ldy4KKworMjAwMi0wNi0xMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9zY2FuLWdyYW0ubCAoWVlfSU5JVCwgWVlfR1JPVywgWVlfRklOSVNIKTogUmVuYW1lIGFzLi4uCisJKFlZX09CU19JTklULCBZWV9PQlNfR1JPVywgWVlfT0JTX0ZJTklTSCk6IHRoZXNlLgorCShsYXN0X3N0cmluZywgWVlfT0JTX0ZSRUUpOiBOZXcuCisJVXNlIHRoZW0gd2hlbiByZXR1cm5pbmcgYW4gSUQuCisKKzIwMDItMDYtMTEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJSGF2ZSBCaXNvbiBncmFtbWFycyBwYXJzZWQgYnkgYSBCaXNvbiBncmFtbWFyLgorCisJKiBzcmMvcmVhZGVyLmMsIHNyYy9yZWFkZXIuaCAocHJvbG9ndWVfYXVnbWVudCk6IE5ldy4KKwkqIHNyYy9yZWFkZXIuYyAoY29weV9kZWZpbml0aW9uKTogUmVtb3ZlLgorCisJKiBzcmMvcmVhZGVyLmgsIHNyYy9yZWFkZXIuYyAoZ3JhbV9zdGFydF9zeW1ib2xfc2V0LCBwcm9sb2d1ZV9hdWdtZW50KQorCShncmFtbWFyX3N5bWJvbF9hcHBlbmQsIGdyYW1tYXJfcnVsZV9iZWdpbiwgZ3JhbW1hcl9taWRydWxlX2FjdGlvbikKKwkoZ3JhbW1hcl9jdXJyZW50X3J1bGVfcHJlY19zZXQsIGdyYW1tYXJfY3VycmVudF9ydWxlX2NoZWNrKQorCShncmFtbWFyX2N1cnJlbnRfcnVsZV9zeW1ib2xfYXBwZW5kKQorCShncmFtbWFyX2N1cnJlbnRfcnVsZV9hY3Rpb25fYXBwZW5kKTogRXhwb3J0LgorCSogc3JjL3BhcnNlLWdyYW0ueSAoc3ltYm9sX2xpc3RfbmV3LCBzeW1ib2xfbGlzdF9zeW1ib2xfYXBwZW5kXworCShzeW1ib2xfbGlzdF9hY3Rpb25fYXBwZW5kKTogUmVtb3ZlLgorCUhvb2sgdGhlIHJvdXRpbmVzIGZyb20gcmVhZGVyLgorCSogc3JjL3NjYW4tZ3JhbS5sOiBJbiBJTklUSUFMLCBjaGFyYWN0ZXJzIGFuZCBzdHJpbmdzIGFyZSB0b2tlbnMuCisJKiBzcmMvc3lzdGVtLmggKEFUVFJJQlVURV9OT1JFVFVSTiwgQVRUUklCVVRFX1VOVVNFRCk6IE5vdy4KKworCSogc3JjL3JlYWRlci5jIChyZWFkX2RlY2xhcmF0aW9ucyk6IFJlbW92ZSwgdW51c2VkLgorCisJKiBzcmMvcGFyc2UtZ3JhbS55OiBIYW5kbGUgdGhlIGVwaWxvZ3VlLgorCSogc3JjL3JlYWRlci5oLCBzcmMvcmVhZGVyLmMgKGdyYW1fc3RhcnRfc3ltYm9sX3NldCk6IFJlbmFtZSBhcy4uLgorCShncmFtbWFyX3N0YXJ0X3N5bWJvbF9zZXQpOiB0aGlzLgorCSogc3JjL3NjYW4tZ3JhbS5sOiBCZSBzdXJlIHRvIGBgdXNlJycgeXljb250cm9sIHRvIGtlZXAgR0NDIHF1aWV0LgorCSogc3JjL3JlYWRlci5jIChyZWFkZ3JhbSk6IFJlbW92ZSwgdW51c2VkLgorCShyZWFkZXIpOiBBZGp1c3QgdG8gaW5zZXJ0IGVvZnRva2VuIGFuZCBheGlvbSB3aGVyZSBhcHByb3ByaWF0ZS4KKworCSogc3JjL3JlYWRlci5jIChjb3B5X2RvbGxhcik6IFJlcGxhY2Ugd2l0aC4uLgorCSogc3JjL3NjYW4tZ3JhbS5oIChoYW5kbGVfZG9sbGFyKTogdGhpcy4KKwkqIHNyYy9wYXJzZS1ncmFtLnk6IFJlbW92ZSBgJXRob25nJy4KKworCSogc3JjL3JlYWRlci5jIChjb3B5X2F0KTogUmVwbGFjZSB3aXRoLi4uCisJKiBzcmMvc2Nhbi1ncmFtLmggKGhhbmRsZV9hdCk6IHRoaXMuCisKKwkqIHNyYy9jb21wbGFpbi5oLCBzcmMvY29tcGxhaW4uYyAod2Fybl9hdCwgY29tcGxhaW5fYXQsIGZhdGFsX2F0KToKKwlOZXcuCisKKwkqIHNyYy9zY2FuLWdyYW0ubCAoWVlfTElORVMpOiBLZWVwIGxpbmVubyBzeW5jaHJvbml6ZWQgZm9yIHRoZQorCXRpbWUgYmVpbmcuCisKKwkqIHNyYy9yZWFkZXIuaCwgc3JjL3JlYWRlci5jIChncmFtbWFyX3J1bGVfZW5kKTogTmV3LgorCisJKiBzcmMvcGFyc2UueSAoY3VycmVudF90eXBlLCBjdXJyZW50X2NsYXNzKTogTmV3LgorCUltcGxlbWVudCBgJW50ZXJtJywgYCV0b2tlbicgc3VwcG9ydC4KKwlNZXJnZSBgJXRlcm0nIGludG8gYCV0b2tlbicuCisJKHN0cmluZ19hc19pZCk6IE5ldy4KKwkqIHNyYy9zeW10YWIuaCwgc3JjL3N5bXRhYi5jIChzeW1ib2xfbWFrZV9hbGlhcyk6IERvbid0IHBhc3MgdGhlCisJdHlwZSBuYW1lLgorCisJKiBzcmMvcGFyc2UtZ3JhbS55OiBCZSBzdXJlIHRvIGhhbmRsZSBwcm9wZXJseSB0aGUgYmVnaW5uaW5nIG9mCisJcnVsZXMuCisKKwkqIHNyYy9wYXJzZS1ncmFtLnk6IEhhbmRsZSAldHlwZS4KKwkqIHNyYy9yZWFkZXIuYyAoZ3JhbW1hcl9ydWxlX2VuZCk6IENhbGwgZ3JhbW1hcl9jdXJyZW50X3J1bGVfY2hlY2suCisKKwkqIHNyYy9wYXJzZS1ncmFtLnk6IE1vcmUgZGlyZWN0aXZlcyBzdXBwb3J0LgorCSogc3JjL29wdGlvbnMuYzogTm8gbG9uZ2VyIGhhbmRsZSBzb3VyY2UgZGlyZWN0aXZlcy4KKworCSogc3JjL3BhcnNlLWdyYW0ueTogRml4ICVvdXRwdXQuCisKKwkqIHNyYy9wYXJzZS1ncmFtLnk6IEhhbmRsZSAldW5pb24uCisJVXNlIHRoZSBwcm9sb2d1ZSBsb2NhdGlvbnMuCisJKiBzcmMvcmVhZGVyLmMgKHBhcnNlX3VuaW9uX2RlY2wpOiBSZW1vdmUuCisKKwkqIHNyYy9yZWFkZXIuaCwgc3JjL3JlYWRlci5jIChlcGlsb2d1ZV9zZXQpOiBOZXcuCisJKiBzcmMvcGFyc2UtZ3JhbS55OiBVc2UgaXQuCisKKwkqIGRhdGEvYmlzb24uc2ltcGxlLCBkYXRhL2Jpc29uLmMrKzogYjRfc3R5cGUgaXMgbm93IGVpdGhlciBub3QKKwlkZWZpbmVkLCB0aGVuIGRlZmF1bHQgdG8gaW50LCBvciB0byB0aGUgY29udGVudHMgb2YgJXVuaW9uLAorCXdpdGhvdXQgYHVuaW9uJyBpdHNlbGYuCisJQWRqdXN0LgorCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlX2luaXQpOiBEb24ndCBwcmVkZWZpbmUgYHN0eXBlJy4KKworCSogc3JjL291dHB1dC5jIChhY3Rpb25zX291dHB1dCk6IERvbid0IG91dHB1dCBicmFjZXMsIGFzIHRoZXkgYXJlCisJYWxyZWFkeSBoYW5kbGVkIGJ5IHRoZSBzY2FubmVyLgorCisJKiBzcmMvc2Nhbi1ncmFtLmwgKFNDX0NIQVJBQ1RFUik6IFNldCB0aGUgdXNlcl90b2tlbl9udW1iZXIgb2YKKwljaGFyYWN0ZXJzIHRvIHRoZW1zZWx2ZXMuCisKKwkqIHRlc3RzL3JlZHVjZS5hdCAoUmVkdWNlZCBBdXRvbWF0b24pOiBFbmQgdGhlIGdyYW1tYXJzIHdpdGggJSUgc28KKwl0aGF0IHRoZSBlcGlsb2d1ZSBoYXMgYSBwcm9wZXIgI2xpbmUuCisKKwkqIHNyYy9wYXJzZS1ncmFtLnk6IEhhbmRsZSBwcmVjZWRlbmNlL2Fzc29jaWF0aXZpdHkuCisKKwkqIHNyYy9zeW10YWIuYyAoc3ltYm9sX3ByZWNlZGVuY2Vfc2V0KTogUmVxdWlyZXMgdGhlIHN5bWJvbCB0byBiZQorCWEgdGVybWluYWwuCisJKiBzcmMvc2Nhbi1ncmFtLmwgKFNDX0JSQUNFRF9DT0RFKTogQ2F0Y2ggc3RyaW5ncyBhbmQgY2hhcmFjdGVycy4KKwkqIHRlc3RzL2NhbGMuYXQ6IERvIG5vdCB1c2UgYCV0b2tlbiAiZm9vIicgYXMgaXQgbWFrZXMgbm90IHNlbnNlCisJYXQgYWxsIHRvIGRlZmluZSB0ZXJtaW5hbHMgdGhhdCBjYW5ub3QgYmUgZW1pdHRlZC4KKworCSogc3JjL3NjYW4tZ3JhbS5sOiBFc2NhcGUgTTQgY2hhcmFjdGVycy4KKworCSogc3JjL3NjYW4tZ3JhbS5sOiBXb3JraW5nIHByb3Blcmx5IHdpdGggZXNjYXBlcyBpbiB1c2VyCisJc3RyaW5ncy9jaGFyYWN0ZXJzLgorCisJKiB0ZXN0cy90b3J0dXJlLmF0IChBVF9EQVRBX1RSSUFOR1VMQVJfR1JBTU1BUikKKwkoQVRfREFUQV9IT1JJWk9OVEFMX0dSQU1NQVIpOiBSZXNwZWN0IHRoZSBgJXRva2VuIElEIE5VTSBTVFJJTkcnCisJZ3JhbW1hci4KKwlVc2UgbW9yZSBtb2Rlc3Qgc2l6ZXMsIGFzIGZvciB0aGUgdGltZSBiZWluZyB0aGUgcGFyc2VyIGRvZXMgbm90CisJcmVsZWFzZSBtZW1vcnksIGFuZCB0aGVyZWZvcmUgdGhlIHByb2Nlc3Mgc3dhbGxvd3MgYSBodWdlIGFtb3VudAorCW9mIG1lbW9yeS4KKworCSogdGVzdHMvdG9ydHVyZS5hdCAoQVRfREFUQV9MT09LQUhFQURTX0dSQU1NQVIpOiBBZGp1c3QgdG8gdGhlCisJc3RyaWN0ZXIgJXRva2VuIGdyYW1tYXIuCisKKwkqIHNyYy9zeW10YWIuaCAoYXNzb2NpYXRpdml0eSk6IEFkZCBgdW5kZWZfYXNzb2MnLgorCShzeW1ib2xfcHJlY2VkZW5jZV9zZXQpOiBEbyBub3RoaW5nIHdoZW4gcGFzc2VkIGFuIHVuZGVmX2Fzc29jLgorCSogc3JjL3N5bXRhYi5jIChzeW1ib2xfY2hlY2tfYWxpYXNfY29uc2lzdGVuY2UpOiBBZGp1c3QuCisKKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKEludmFsaWQgJWRpcmVjdGl2ZSk6IFJlbW92ZSwgYXMgaXQgaXMgbm93CisJbWVhbmluZ2xlc3MuCisJKEludmFsaWQgaW5wdXRzKTogQWRqdXN0IHRvIHRoZSBuZXcgZXJyb3IgbWVzc2FnZXMuCisJKFRva2VuIGRlZmluaXRpb25zKTogVGhlIG5ldyBncmFtbWFyIGRvZXNuJ3QgYWxsb3cgdG9vIG1hbnkKKwllY2NlbnRyaWNpdGllcy4KKworCSogc3JjL2xleC5oLCBzcmMvbGV4LmM6IFJlbW92ZS4KKwkqIHNyYy9yZWFkZXIuYyAobGFzdHByZWMsIHNraXBfdG9fY2hhciwgcmVhZF9zaWduZWRfaW50ZWdlcikKKwkoY29weV9jaGFyYWN0ZXIsIGNvcHlfc3RyaW5nMiwgY29weV9zdHJpbmcsIGNvcHlfaWRlbnRpZmllcikKKwkoY29weV9jb21tZW50LCBwYXJzZV90b2tlbl9kZWNsLCBwYXJzZV90eXBlX2RlY2wsIHBhcnNlX2Fzc29jX2RlY2wpCisJKHBhcnNlX211c2NsZV9kZWNsLCBwYXJzZV9kcXVvdGVkX3BhcmFtLCBwYXJzZV9za2VsX2RlY2wpCisJKHBhcnNlX2FjdGlvbik6IFJlbW92ZS4KKwkqIHBvL1BPVEZJTEVTLmluOiBBZGp1c3QuCisKKzIwMDItMDYtMTEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKHBhcnNlX2FjdGlvbik6IERvbid0IHN0b3JlIGRpcmVjdGx5IGludG8gdGhlCisJcnVsZSdzIGFjdGlvbiBtZW1iZXI6IHJldHVybiB0aGUgYWN0aW9uIGFzIGEgc3RyaW5nLgorCURvbid0IHJlcXVpcmUgYHJ1bGVfbGVuZ3RoJyBhcyBhbiBhcmd1bWVudDogY29tcHV0ZSBpdC4KKwkoZ3JhbW1hcl9jdXJyZW50X3J1bGVfc3ltYm9sX2FwcGVuZCkKKwkoZ3JhbW1hcl9jdXJyZW50X3J1bGVfYWN0aW9uX2FwcGVuZCk6IE5ldywgZXZlZCBvdXQgZnJvbQorCShyZWFkZ3JhbSk6IGhlcmUuCisJUmVtb3ZlIGBhY3Rpb25fZmxhZycsIGBydWxlbGVuZ3RoJywgdW51c2VkIG5vdy4KKworMjAwMi0wNi0xMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9yZWFkZXIuYyAoZ3JhbW1hcl9jdXJyZW50X3J1bGVfcHJlY19zZXQpLgorCShncmFtbWFyX2N1cnJlbnRfcnVsZV9jaGVjayk6IE5ldywgZXZlZCBvdXQgZnJvbS4uLgorCShyZWFkZ3JhbSk6IGhlcmUuCisJUmVtb3ZlIGB4YWN0aW9uJywgYGZpcnN0X3Jocyc6IHVzZWxlc3MuCisJKiB0ZXN0cy9pbnB1dC5hdCAoVHlwZSBjbGFzaGVzKTogTmV3LgorCSogdGVzdHMvZXhpc3RpbmcuYXQgKEdOVSBDaW0gR3JhbW1hcik6IEFkanVzdC4KKworMjAwMi0wNi0xMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9yZWFkZXIuYyAoZ3JhbW1hcl9taWRydWxlX2FjdGlvbik6IE5ldywgRXZlZCBvdXQgZnJvbQorCShyZWFkZ3JhbSk6IGhlcmUuCisKKzIwMDItMDYtMTEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKGdyYW1tYXJfcnVsZV9iZWdpbiwgcHJldmlvdXNfcnVsZSwgY3VycmVudF9ydWxlKToKKwlOZXcuCisJKHJlYWRncmFtKTogVXNlIHRoZW0gYXMgcmVwbGFjZW1lbnQgb2YgaW5saW5lZCBjb2RlLCBjcnVsZSBhbmQKKwljcnVsZTEuCisKKzIwMDItMDYtMTEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKGdyYW1tYXJfZW5kLCBncmFtbWFyX3N5bWJvbF9hcHBlbmQpOiBOZXcuCisJKHJlYWRncmFtKTogVXNlIHRoZW0uCisJTWFrZSB0aGUgdXNlIG9mIGBwJyBhcyBsb2NhbCBhcyBwb3NzaWJsZS4KKworMjAwMi0wNi0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlHQ0oncyBwYXJzZXIgcmVxdWlyZXMgdGhlIHRva2VucyB0byBiZSBkZWZpbmVkIGJlZm9yZSB0aGUgcHJvbG9ndWUuCisKKwkqIGRhdGEvYmlzb24uc2ltcGxlOiBPdXRwdXQgdGhlIHRva2VuIGRlZmluaXRpb24gYmVmb3JlIHRoZSB1c2VyJ3MKKwlwcm9sb2d1ZS4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKEJyYWNlcyBwYXJzaW5nLCBEdXBsaWNhdGUgc3RyaW5nKQorCShNaXhpbmcgJXRva2VuIHN0eWxlcyk6IENoZWNrIHRoZSBvdXRwdXQgZnJvbSBiaXNvbi4KKwkoRWFybHkgdG9rZW4gZGVmaW5pdGlvbnMpOiBOZXcuCisKKzIwMDItMDYtMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvc3ltdGFiLmMgKHN5bWJvbF91c2VyX3Rva2VuX251bWJlcl9zZXQpOiBEb24ndCBjb21wbGFpbiB3aGVuCisJYXNzaWduaW5nIHR3aWNlIHRoZSBzYW1lIHVzZXIgbnVtYmVyIHRvIGEgdG9rZW4sIHNvIHRoYXQgd2UgY2FuCisJdXNlIGl0IGluLi4uCisJKiBzcmMvbGV4LmMgKGxleCk6IGhlcmUuCisJQWxzbyB1c2UgYHN5bWJvbF9jbGFzc19zZXQnIGluc3RlYWQgb2YgaGFuZCB3cml0dGVuIGNvZGUuCisJKiBzcmMvcmVhZGVyLmMgKHBhcnNlX2Fzc29jX2RlY2wpOiBMaWtld2lzZS4KKworMjAwMi0wNi0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9zeW10YWIuYywgc3JjL3N5bXRhYi5jIChzeW1ib2xfY2xhc3Nfc2V0KQorCShzeW1ib2xfdXNlcl90b2tlbl9udW1iZXJfc2V0KTogTmV3LgorCSogc3JjL3JlYWRlci5jIChwYXJzZV90b2tlbl9kZWNsKTogVXNlIHRoZW0uCisJVXNlIGEgc3dpdGNoIGluc3RlYWQgb2YgaWZzLgorCVVzZSBhIHNpbmdsZSBhcmd1bWVudC4KKworMjAwMi0wNi0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlSZW1vdmUgYCV0aG9uZycgc3VwcG9ydCBhcyBpdCBpcyB1bmRvY3VtZW50ZWQsIHVudXNlZCwgZHVwbGljYXRlcworCWAldG9rZW4ncyBqb2IsIGFuZCBjcmVhdGVzIHVzZWxlc3MgZS1tYWlsIHRyYWZmaWMgd2l0aCBwZW9wbGUgd2hvCisJd2FudCB0byBrbm93IHdoYXQgaXQgaXMsIHdoeSBpdCBpcyB1bmRvY3VtZW50ZWQsIHVudXNlZCwgYW5kCisJZHVwbGljYXRlcyBgJXRva2VuJ3Mgam9iLgorCisJKiBzcmMvcmVhZGVyLmMgKHBhcnNlX3Rob25nX2RlY2wpOiBSZW1vdmUuCisJKiBzcmMvb3B0aW9ucy5jIChvcHRpb25fdGFibGUpOiBSZW1vdmUgInRob25nIi4KKwkqIHNyYy9sZXguaCAodG9rX3Rob25nKTogUmVtb3ZlLgorCisyMDAyLTA2LTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3N5bXRhYi5jLCBzcmMvc3ltdGFiLmMgKHN5bWJvbF90eXBlX3NldCkKKwkoc3ltYm9sX3ByZWNlZGVuY2Vfc2V0KTogTmV3LgorCSogc3JjL3JlYWRlci5jIChwYXJzZV90eXBlX2RlY2wsIHBhcnNlX2Fzc29jX2RlY2wpOiBVc2UgdGhlbS4KKwkodmFsdWVfY29tcG9uZW50c191c2VkKTogUmVtb3ZlLCB1bnVzZWQuCisKKzIwMDItMDYtMDkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJTW92ZSBzeW1ib2xzIGhhbmRsaW5nIGNvZGUgb3V0IG9mIHRoZSByZWFkZXIuCisKKwkqIHNyYy9yZWFkZXIuaCwgc3JjL3JlYWRlci5jIChlcnJ0b2tlbiwgdW5kZWZ0b2tlbiwgZW9mdG9rZW4pCisJKGF4aW9tKTogTW92ZSB0by4uLgorCSogc3JjL3N5bXRhYi5oLCBzcmMvc3ltdGFiLmM6IGhlcmUuCisKKwkqIHNyYy9ncmFtLmMgKHN0YXJ0X3N5bWJvbCk6IFJlbW92ZTogdXNlIHN0YXJ0c3ltYm9sLT5udW1iZXIuCisJKiBzcmMvcmVhZGVyLmMgKHN0YXJ0dmFsKTogUmVuYW1lIGFzLi4uCisJKiBzcmMvc3ltdGFiLmgsIHNyYy9zeW10YWIuYyAoc3RhcnRzeW1ib2wpOiB0aGlzLgorCSogc3JjL3JlYWRlci5jOiBBZGp1c3QuCisKKwkqIHNyYy9yZWFkZXIuYyAoc3ltYm9sX2NoZWNrX2RlZmluZWQsIHN5bWJvbF9tYWtlX2FsaWFzKQorCShzeW1ib2xfY2hlY2tfYWxpYXNfY29uc2lzdGVuY2UsIHN5bWJvbF9wYWNrLCBzeW1ib2xfdHJhbnNsYXRpb24pCisJKHRva2VuX3RyYW5zbGF0aW9uc19pbml0KQorCU1vdmUgdG8uLi4KKwkqIHNyYy9zeW10YWIuYzogaGVyZS4KKwkqIHNyYy9yZWFkZXIuYyAocGFja3N5bWJvbHMpOiBNb3ZlIHRvLi4uCisJKiBzcmMvc3ltdGFiLmgsIHNyYy9zeW10YWIuYyAoc3ltYm9sc19wYWNrKTogaGVyZS4KKwkqIHNyYy9zeW10YWIuaCwgc3JjL3N5bXRhYi5jIChzeW1ib2xfbWFrZV9hbGlhcyk6IFRha2VzIFNZTVZBTCBhcworCWFyZ3VtZW50LgorCisyMDAyLTA2LTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlX2luc2VydCwgbXVzY2xlX2ZpbmQpOiBEZWNsYXJhdGlvbnMsCisJdGhlbiBzdGF0ZW1lbnRzLgorCisyMDAyLTA2LTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlX2ZpbmQsIG11c2NsZV9pbnNlcnQpOiBEb24ndCBpbml0aWFsaXplCisJc3RydWN0cyB3aXRoIG5vbiBsaXRlcmFscy4KKwkqIHNyYy9zY2FuLXNrZWwubDogbmV2ZXItaW50ZXJhY3RpdmUuCisJKiBzcmMvY29uZmxpY3RzLmMgKGVudW0gY29uZmxpY3RfcmVzb2x1dGlvbl9lKTogTm8gdHJhaWxpbmcKKwljb21tYS4KKwkqIHNyYy9nZXRhcmdzLmMgKHVzYWdlKTogU3BsaXQgbG9uZyBsaXRlcmFsIHN0cmluZ3MuCisJUmVwb3J0ZWQgYnkgSGFucyBBYmVyZy4KKworMjAwMi0wNS0yOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEvYmlzb24uYysrOiBVc2UgQysrIG9zdHJlYW1zLgorCShjZGVidWdfKTogTmV3IG1lbWJlci4KKworMjAwMi0wNS0yOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3NrZWxldG9uKTogQmUgc3VyZSB0byBhbGxvY2F0ZSBlbm91Z2ggcm9vbQorCWZvciBgLycgX2FuZF8gZm9yIGBcMCcgaW4gZnVsbF9za2VsZXRvbi4KKworMjAwMi0wNS0yOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEvYmlzb24uYysrOiBDYXRjaCB1cCB3aXRoIGJpc29uLnNpbXBsZToKKwkyMDAyLTA1LTI0ICBQYXVsIEhpbGZpbmdlciAgPEhpbGZpbmdlckBDUy5CZXJrZWxleS5FRFU+CisJYW5kIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPjogYGVycm9yJyBoYW5kaW5nLgorCTIwMDItMDUtMjYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPjogc3Rvc18sIHRva2VuX251bWJlcl8sCisJYW5kIHBvcHBpbmcgdHJhY2VzLgorCisyMDAyLTA1LTI3ICBQYXVsIEhpbGZpbmdlciAgPEhpbGZpbmdlckBDUy5CZXJrZWxleS5FRFU+CisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3NrZWxldG9uKTogUHV0IGFuIGV4cGxpY2l0IHBhdGggaW4gZnJvbnQgb2YKKwl0aGUgc2tlbGV0b24gZmlsZSBuYW1lLCByYXRoZXIgdGhhbiByZWx5aW5nIG9uIHRoZSAtSSBkaXJlY3RvcnksCisJdG8gcGFydGlhbGx5IGFsbGV2aWF0ZSBlZmZlY3RzIG9mIGhhdmluZyBhIHNrZWxldG9uIGZpbGUgbHlpbmcgYXJvdW5kCisJaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorCisyMDAyLTA1LTI3ICBQYXVsIEhpbGZpbmdlciAgPEhpbGZpbmdlckBDUy5CZXJrZWxleS5FRFU+CisKKwkqIHNyYy9jb25mbGljdHMuYyAobG9nX3Jlc29sdXRpb24pOiBDb3JyZWN0IHR5cG86CisJb2JzdGFja19wcmludGYgc2hvdWxkIGJlIG9ic3RhY2tfZmdyb3cxLgorCisyMDAyLTA1LTI2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3N0YXRlLmggKHN0YXRlX3QpOiBgc29sdmVkX2NvbmZsaWN0cycgaXMgYSBuZXcgbWVtYmVyLgorCSogc3JjL0xSMC5jIChuZXdfc3RhdGUpOiBTZXQgaXQgdG8gMC4KKwkqIHNyYy9jb25mbGljdHMuaCwgc3JjL2NvbmZsaWN0cy5jIChwcmludF9jb25mbGljdHMpCisJKGZyZWVfY29uZmxpY3RzLCBzb2x2ZV9jb25mbGljdHMpOiBSZW5hbWUgYXMuLi4KKwkoY29uZmxpY3RzX3ByaW50LCBjb25mbGljdHNfZnJlZSwgY29uZmxpY3RzX3NvbHZlKTogdGhlc2UuCisJQWRqdXN0IGNhbGxlcnMuCisJKiBzcmMvY29uZmxpY3RzLmMgKGVudW0gY29uZmxpY3RfcmVzb2x1dGlvbl9lKQorCShzb2x2ZWRfY29uZmxpY3RzX29ic3RhY2spOiBOZXcsIHVzZWQgYnkuLi4KKwkobG9nX3Jlc29sdXRpb24pOiB0aGlzLgorCUFkanVzdCB0byBhdHRhY2ggdGhlIGNvbmZsaWN0IHJlc29sdXRpb24gdG8gZWFjaCBzdGF0ZS4KKwlDb21wbGV0ZSB0aGUgZGVzY3JpcHRpb24gd2l0aCB0aGUgcHJlY2VkZW5jZS9hc3NvY2lhdGl2aXR5CisJaW5mb3JtYXRpb24uCisJKHJlc29sdmVfc3JfY29uZmxpY3QpOiBBZGp1c3QuCisJKiBzcmMvcHJpbnQuYyAocHJpbnRfc3RhdGUpOiBPdXRwdXQgaXRzIHNvbHZlZF9jb25mbGljdHMuCisJKiB0ZXN0cy9jb25mbGljdHMuYXQgKFVucmVzb2x2ZWQgU1IgQ29uZmxpY3RzKQorCShTb2x2ZWQgU1IgQ29uZmxpY3RzKTogRXhlcmNpc2UgLS1yZXBvcnQ9YWxsLgorCisyMDAyLTA1LTI2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL0xSMC5jLCBzcmMvZGVyaXZlcy5jLCBzcmMvZ3JhbS5jLCBzcmMvZ3JhbS5oLCBzcmMvbGFsci5jLAorCSogc3JjL251bGxhYmxlLmMsIHNyYy9vdXRwdXQuYywgc3JjL3ByaW50LmMsIHNyYy9wcmludF9ncmFwaC5jLAorCSogc3JjL3JlYWRlci5jLCBzcmMvcmVkdWNlLmMsIHNyYy9zdGF0ZS5oLCBzcmMvc3ltdGFiLmgKKwkodG9rZW5fbnVtYmVyX3QsIGl0ZW1fbnVtYmVyX2FzX3Rva2VuX251bWJlcikKKwkodG9rZW5fbnVtYmVyX2FzX2l0ZW1fbnVtYmVyLCBtdXNjbGVfaW5zZXJ0X3Rva2VuX251bWJlcl90YWJsZSk6CisJUmVuYW1lIGFzLi4uCisJKHN5bWJvbF9udW1iZXJfdCwgaXRlbV9udW1iZXJfYXNfc3ltYm9sX251bWJlcikKKwkoc3ltYm9sX251bWJlcl9hc19pdGVtX251bWJlciwgbXVzY2xlX2luc2VydF9zeW1ib2xfbnVtYmVyX3RhYmxlKToKKwl0aGVzZSwgc2luY2UgaXQgaXMgbW9yZSBhcHByb3ByaWF0ZS4KKworMjAwMi0wNS0yNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHRlc3RzL2NhbGMuYXQgKEFUX0NIRUNLX0NBTEMpOiBBZGp1c3Q6IHRoZXJlIGFyZSBub3cgYWRkaXRpb25hbAorCWBFcnJvcjonIGxpbmVzLgorCSogZGF0YS9iaXNvbi5zaW1wbGUgKHl5c3RvcykgW1lZREVCVUddOiBOZXcuCisJKHl5cGFyc2UpIFtZWURFQlVHXTogRGlzcGxheSB0aGUgc3ltYm9scyB3aGljaCBhcmUgcG9wcGVkIGR1cmluZworCWVycm9yIHJlY292ZXJ5LgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoV2ViMmMgQWN0aW9ucyk6IEFkanVzdDogeXlzdG9zIGlzIG91dHB1dCBub3cuCisKKzIwMDItMDUtMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkb2MvYmlzb24udGV4aW5mbyAoRGVidWdnaW5nKTogU3BsaXQgaW50by4uLgorCShUcmFjaW5nKTogdGhpcyBuZXcgc2VjdGlvbiwgaXRzIGZvcm1lciBjb250ZW50cywgYW5kLi4uCisJKFVuZGVyc3RhbmRpbmcpOiB0aGlzIG5ldyBzZWN0aW9uLgorCSogc3JjL2dldGFyZ3MuaCwgc3JjL2dldGFyZ3MuYyAodmVyYm9zZV9mbGFnKTogUmVtb3ZlLCByZXBsYWNlZAorCWJ5Li4uCisJKHJlcG9ydF9mbGFnKTogdGhpcy4KKwlBZGp1c3QgYWxsIGRlcGVuZGVuY2llcy4KKwkocmVwb3J0X2FyZ3MsIHJlcG9ydF90eXBlcywgcmVwb3J0X2FyZ21hdGNoKTogTmV3LgorCSh1c2FnZSwgZ2V0YXJncyk6IFJlcG9ydC9zdXBwb3J0IC1yLCAtLXJlcG9ydC4KKwkqIHNyYy9vcHRpb25zLmgKKwkoc3RydWN0IG9wdGlvbl90YWJsZV9zdHJ1Y3QpOiBSZW5hbWUgYXMuLiwKKwkoc3RydWN0IG9wdGlvbl90YWJsZV9zKTogdGhpcy4KKwlSZW5hbWUgdGhlIGBzZXRfZmxhZycgbWVtYmVyIHRvIGBmbGFnJyB0byBtYXRjaCB3aXRoIGdldG9wdF9sb25nJ3MKKwlzdHJ1Y3QuCisJKiBzcmMvb3B0aW9ucy5jIChvcHRpb25fdGFibGUpOiBTcGxpdCB2ZXJib3NlIGludG8gYW4gZW50cnkgZm9yCisJJXZlcmJvc2UsIGFuZCBhbm90aGVyIGZvciAtLXZlcmJvc2UuCisJU3VwcG9ydCAtLXJlcG9ydC8tciwgc28gcmVtb3ZlIC1yIGZyb20gdGhlIG9ic29sZXRlIC0tcmF3LgorCSogc3JjL3ByaW50LmM6IEF0dGFjaCBmdWxsIGl0ZW0gc2V0cyBhbmQgbG9va2FoZWFkcyByZXBvcnRzIHRvCisJcmVwb3J0X2ZsYWcgaW5zdGVhZCBvZiB0cmFjZV9mbGFnLgorCSogbGliL2FyZ21hdGNoLmgsIGxpYi9hcmdtYXRjaC5jOiBOZXcsIGZyb20gRmlsZXV0aWxzIDQuMS4KKworMjAwMi0wNS0yNCAgUGF1bCBIaWxmaW5nZXIgIDxIaWxmaW5nZXJAQ1MuQmVya2VsZXkuRURVPgorCWFuZCBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogZGF0YS9iaXNvbi5zaW1wbGUgKHl5cGFyc2UpOiBDb3JyZWN0IGVycm9yIGhhbmRsaW5nIHRvIGNvbmZvcm0gdG8KKwlQT1NJWCBhbmQgeWFjYy4gIFNwZWNpZmljYWxseSwgYWZ0ZXIgc3ludGF4IGVycm9yIGlzIGRpc2NvdmVyZWQsCisJZG8gbm90IHJlZHVjZSBmdXJ0aGVyIGJlZm9yZSBzaGlmdGluZyB0aGUgZXJyb3IgdG9rZW4uCisJQ2xlYW4gdXAgdGhlIGNvZGUgYSBiaXQgYnkgcmVtb3ZpbmcgdGhlIGxhYmVscyB5eWVycmRlZmF1bHQsCisJeXllcnJoYW5kbGUsIHl5ZXJycG9wLgorCSogTkVXUzogRG9jdW1lbnQgdGhlIGFib3ZlLgorCisyMDAyLTA1LTIwICBQYXVsIEhpbGZpbmdlciAgPEhpbGZpbmdlckBDUy5CZXJrZWxleS5FRFU+CisKKwkqIGRhdGEvYmlzb24uc2ltcGxlICh5eXIxKTogRG9uJ3QgdXNlIHl5X3Rva2VuX251bWJlcl90eXBlIGFzIGVsZW1lbnQKKwl0eXBlOyBpdCBpc24ndCBhbHdheXMgYmlnIGVub3VnaCwgc2luY2UgaXQgZG9lc24ndCBuZWNlc3NhcmlseQorCWluY2x1ZGUgbm9uLXRlcm1pbmFscy4KKwkoeXl0cmFuc2xhdGUpOiBFeHBhbmQgZGVmaW5pdGlvbiBvZiB5eV90b2tlbl9udW1iZXJfdHlwZSwgc28gdGhhdAorCXRoZSBsYXR0ZXIgY2FuIGJlIHJlbW92ZWQuCisJKHl5X3Rva2VuX251bWJlcl90eXBlKTogUmVtb3ZlLCBvbmx5IG9uZSB1c2UuCisJKiBkYXRhL2Jpc29uLmMrKyAocjFfKTogUGFyYWxsZWwgY2hhbmdlIHRvIHl5cjEgaW4gYmlzb24uc2ltcGxlLS0tCisJZG9uJ3QgdXNlIFRva2VuTnVtYmVyVHlwZSBhcyBlbGVtZW50IHR5cGUuCisKKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQ6IE1vZGlmeSBleHBlY3RlZCBvdXRwdXQgdG8gYWdyZWUgd2l0aCBjaGFuZ2UKKwl0byB5eXIxIGFuZCB5eXRyYW5zbGF0ZS4KKworMjAwMi0wNS0xMyAgRmxvcmlhbiBLcm9obSAgPGZsb3JpYW5AZWRhbWFpbC5maXNoa2lsbC5pYm0uY29tPgorCisJKiBzcmMvcmVhZGVyLmMgKHBhcnNlX2FjdGlvbik6IFVzZSBjb3B5X2NoYXJhY3RlciBpbnN0ZWFkIG9mCisJb2JzdGFja18xZ3Jvdy4KKworMjAwMi0wNS0xMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFRva2VuIGRlZmluaXRpb25zKTogUHJvdG90eXBlIHl5bGV4IGFuZAorCXl5ZXJyb3IuCisKKzIwMDItMDUtMTIgIFBhdWwgSGlsZmluZ2VyICA8SGlsZmluZ2VyQENTLkJlcmtlbGV5LkVEVT4KKworCSogc3JjL3NjYW4tc2tlbC5sOiBDb3JyZWN0IG9mZi1ieS1vbmUgZXJyb3IgaW4gaGFuZGxpbmcgb2YgX19vbGluZV9fLgorCSogZGF0YS9iaXNvbi5zaW1wbGUgKGI0X3NpbnRfdHlwZSwgYjRfdWludF90eXBlKTogQ29ycmVjdCB0byByZWZsZWN0CisJMzItYml0IGFyaXRobWV0aWMuCisJKiBkYXRhL2Jpc29uLmMrKyAoYjRfc2ludF90eXBlLCBiNF91aW50X3R5cGUpOiBEaXR0by4KKworMjAwMi0wNS0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHRlc3RzL3N5bmNsaW5lcy5hdDogQmUgc3VyZSB0byBwcm90b3R5cGUgeXlsZXggYW5kIHl5ZXJyb3IgdG8KKwlhdm9pZCBHQ0Mgd2FybmluZ3MuCisKKzIwMDItMDUtMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJS2lsbCBHQ0Mgd2FybmluZ3MuCisKKwkqIHNyYy9yZWR1Y2UuYyAobm9udGVybWluYWxzX3JlZHVjZSk6IERvbid0IGxvb3Agb3ZlciBSSVRFTTogbG9vcAorCW92ZXIgdGhlIFJIUyBvZiBlYWNoIHJ1bGUuCisJKiBzcmMvZ3JhbS5oLCBzcmMvZ3JhbS5jIChucml0ZW1zKTogSXMgYHVuc2lnbmVkIGludCcsIG5vdCBpbnQuCisJKiBzcmMvc3RhdGUuaCAoc3RhdGVfdCk6IE1lbWJlciBgbml0ZW1zJyBpcyB1bnNpZ25lZCBzaG9ydC4KKwkqIHNyYy9MUjAuYyAoZ2V0X3N0YXRlKTogQWRqdXN0LgorCSogc3JjL3JlYWRlci5jIChwYWNrZ3JhbSk6IExpa2V3aXNlLgorCSogc3JjL291dHB1dC5jIChHRU5FUkFURV9NVVNDTEVfSU5TRVJUX1RBQkxFKTogYG1heCcgaXMgb2YgdHlwZQorCWBUeXBlJy4KKwkobXVzY2xlX2luc2VydF9pbnRfdGFibGUpOiBSZW1vdmUsIHVudXNlZC4KKwkocHJlcGFyZV9ydWxlcyk6IFJlbW92ZSBgbWF4Jy4KKworMjAwMi0wNS0wNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9jbG9zdXJlLmMgKHByaW50X2ZpcnN0cyk6IERpc3BsYXkgb2YgdGhlIHN5bWJvbCB0YWdzLgorCShiaXRtYXRyaXhfcHJpbnQpOiBNb3ZlIHRvLi4uCisJKiBsaWIvYml0c2V0di1wcmludC5oLCBsaWIvYml0c2V0di1wcmludC5jIChiaXRzZXR2X21hdHJpeF9kdW1wKToKKwloZXJlLgorCSogdGVzdHMvc2V0cy5hdCAoTnVsbGFibGUsIEJyb2tlbiBDbG9zdXJlLCBGaXJzdHMpOiBBZGp1c3QuCisKKzIwMDItMDUtMDYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvbXVzY2xlX3RhYi5jIChtdXNjbGVfbTRfb3V0cHV0KTogTXVzdCByZXR1cm4gVFJVRSBmb3IKKwloYXNoX2RvX2Zvcl9lYWNoLgorCisyMDAyLTA1LTA2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL0xSMC5jIChuZXdfc3RhdGUsIGdldF9zdGF0ZSk6IEluc3RlYWQgb2YgdXNpbmcgdGhlIGdsb2JhbAorCWBrZXJuZWxfc2l6ZScgYW5kIGBrZXJuZWxfYmFzZScsIGhhdmUgdHdvIG5ldyBhcmd1bWVudHM6CisJYGNvcmVfc2l6ZScgYW5kIGBjb3JlJy4KKwlBZGp1c3QgY2FsbGVycy4KKworMjAwMi0wNS0wNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9yZWFkZXIuYyAocGFja2dyYW0pOiBObyBsb25nZXIgZW5kIGByaXRlbScgd2l0aCBhIDAKKwlzZW50aW5lbDogaXQgaXMgbm90IHVzZWQuCisKKzIwMDItMDUtMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJTmV3IGV4cGVyaW1lbnRhbCBmZWF0dXJlOiBkaXNwbGF5IHRoZSBsb29rYWhlYWRzIGluIHRoZSByZXBvcnQgYW5kCisJZ3JhcGguCisKKwkqIHNyYy9wcmludCAocHJpbnRfY29yZSk6IFdoZW4gLS10cmFjZS1mbGFnLCBkaXNwbGF5IHRoZSBydWxlcworCWxvb2thaGVhZHMuCisJKiBzcmMvcHJpbnRfZ3JhcGguYyAocHJpbnRfY29yZSk6IExpa2V3aXNlLgorCVN3YXAgdGhlIGFyZ3VtZW50cy4KKwlBZGp1c3QgY2FsbGVyLgorCisyMDAyLTA1LTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogdGVzdHMvdG9ydHVyZS5hdCAoTWFueSBsb29rYWhlYWRzKTogTmV3IHRlc3QuCisKKzIwMDItMDUtMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvb3V0cHV0LmMgKEdFTkVSQVRFX09VVFBVVF9UQUJMRSk6IFJlcGxhY2Ugd2l0aC4uLgorCShHRU5FUkFURV9NVVNDTEVfSU5TRVJUX1RBQkxFKTogdGhpcy4KKwkob3V0cHV0X2ludF90YWJsZSwgb3V0cHV0X3Vuc2lnbmVkX2ludF90YWJsZSwgb3V0cHV0X3Nob3J0X3RhYmxlKQorCShvdXRwdXRfdG9rZW5fbnVtYmVyX3RhYmxlLCBvdXRwdXRfaXRlbV9udW1iZXJfdGFibGUpOiBSZXBsYWNlIHdpdGguLi4KKwkobXVzY2xlX2luc2VydF9pbnRfdGFibGUsIG11c2NsZV9pbnNlcnRfdW5zaWduZWRfaW50X3RhYmxlKQorCShtdXNjbGVfaW5zZXJ0X3Nob3J0X3RhYmxlLCBtdXNjbGVfaW5zZXJ0X3Rva2VuX251bWJlcl90YWJsZSkKKwkobXVzY2xlX2luc2VydF9pdGVtX251bWJlcl90YWJsZSk6IHRoZXNlLgorCUFkanVzdCBhbGwgY2FsbGVycy4KKwkocHJlcGFyZV90b2tlbnMpOiBEb24ndCBmcmVlIGB0cmFuc2xhdGlvbnMnLCBzaW5jZS4uLgorCSogc3JjL3JlYWRlci5oLCBzcmMvcmVhZGVyLmMgKGdyYW1tYXJfZnJlZSk6IGRvIGl0LgorCU1vdmUgdG8uLi4KKwkqIHNyYy9ncmFtLmgsIHNyYy9ncmFtLmMgKGdyYW1tYXJfZnJlZSk6IGhlcmUuCisJKiBkYXRhL2Jpc29uLnNpbXBsZSwgZGF0YS9iaXNvbi5jKys6IGI0X3Rva2VuX251bWJlcl9tYXggaXMgbm93CisJYjRfdHJhbnNsYXRlX21heC4KKworMjAwMi0wNS0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3Vuc2lnbmVkX2ludF90YWJsZSk6IE5ldy4KKwkocHJlcGFyZV9ydWxlcyk6IGBpJyBpcyB1bnNpZ25lZC4KKwlgcHJocycsIGBybGluZScsIGByMicgYXJlIHVuc2lnbmVkIGludC4KKwlSZW5hbWUgbXVzY2xlIGByaHNfbnVtYmVyX21heCcgYXMgYHJoc19tYXgnLgorCU91dHB1dCBtdXNjbGVzIGBwcmhzX21heCcsIGBybGluZV9tYXgnLCBhbmQgYHIyX21heCcuCisJRnJlZSBybGluZSBhbmQgcjEuCisJKiBkYXRhL2Jpc29uLnNpbXBsZSwgZGF0YS9iaXNvbi5jKys6IEFkanVzdCB0byB1c2UgdGhlc2UgbXVzY2xlcworCXRvIGNvbXB1dGUgdHlwZXMgaW5zdGVhZCBvZiBjb25zdGFudCB0eXBlcy4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFdlYjJjIEFjdGlvbnMpOiBBZGp1c3QuCisKKzIwMDItMDUtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvc3ltdGFiLmggKFNBTElBUywgU1VOREVGKTogUmVuYW1lIGFzLi4uCisJKFVTRVJfTlVNQkVSX0FMSUFTLCBVU0VSX05VTUJFUl9VTkRFRklORUQpOiB0aGVzZS4KKwlBZGp1c3QgZGVwZW5kZW5jaWVzLgorCSogc3JjL291dHB1dC5jICh0b2tlbl9kZWZpbml0aW9uc19vdXRwdXQpOiBCZSBzdXJlIG5vdCB0byBvdXRwdXQgYQorCWAjZGVmaW5lICdhJycgd2hlbiBmZWQgd2l0aCBgJXRva2VuICdhJyAiYSInLgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoVG9rZW4gZGVmaW5pdGlvbnMpOiBOZXcuCisKKzIwMDItMDUtMDMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBkYXRhL2Jpc29uLnNpbXBsZSAoYjRfdG9rZW5fZGVmaW5lcyk6IEFsc28gZGVmaW5lIFlZVE9LRU5UWVBFCisJZm9yIEsmUiBDLgorCisyMDAyLTA1LTAzICBnZXR0ZXh0aXplICA8YnVnLWdudS1nZXR0ZXh0QGdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmFtIChTVUJESVJTKTogUmVtb3ZlIGludGwuCisJKEVYVFJBX0RJU1QpOiBBZGQgY29uZmlnL2NvbmZpZy5ycGF0aC4KKworMjAwMi0wNS0wMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEvYmlzb24uc2ltcGxlIChtNF9pZik6IERvbid0IG91dHB1dCBlbXB0eSBlbnVtcy4KKwlBbmQgYWN0dWFsbHksIG91dHB1dCB2YWxpZCBlbnVtIGRlZmluaXRpb25zIDooLgorCisyMDAyLTA1LTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogY29uZmlndXJlLmJhdDogUmVtb3ZlLCBjb21wbGV0ZWx5IG9ic29sZXRlLgorCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGp1c3QuCisJRG9uJ3QgZGlzdHJpYnV0ZSBjb25maWcucnBhdGguLi4KKwkqIGNvbmZpZy9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IERvIGl0LgorCisyMDAyLTA1LTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogY29uZmlndXJlLmluIChHRVRURVhUX1ZFUlNJT04pOiBOZXcuCisJU3VnZ2VzdGVkIGJ5IEJydW5vIEhhaWJsZSBmb3IgdGhlIGZvcnRoY29taW5nIEdldHRleHQgMC4xMC4zLgorCisyMDAyLTA1LTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9iaXNvbi5zaW1wbGUgKGI0X3Rva2VuX2VudW0pOiBOZXcuCisJKGI0X3Rva2VuX2RlZmluZXMpOiBVc2UgaXQgdG8gb3V0cHV0IHRva2VucyBib3RoIGFzICNkZWZpbmUgYW5kCisJZW51bXMuCisJU3VnZ2VzdGVkIGJ5IFBhdWwgRWdnZXJ0LgorCSogc3JjL291dHB1dC5jICh0b2tlbl9kZWZpbml0aW9uc19vdXRwdXQpOiBEb24ndCBvdXRwdXQgc3B1cmlvdXMKKwl3aGl0ZSBzcGFjZXMuCisKKzIwMDItMDUtMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL200c3VnYXIvbTRzdWdhci5tNDogVXBkYXRlIGZyb20gQ1ZTIEF1dG9jb25mLgorCisyMDAyLTA1LTAyICBSb2JlcnQgQW5pc2tvICA8cm9iZXJ0QGxyZGUuZXBpdGEuZnI+CisKKwkqIGRhdGEvYmlzb24uYysrOiBBZGFwdCBleHBhbnNpb24gb2YgJHMgYW5kIEBzIHRvIHRoZSBDKysgcGFyc2VyLgorCVVwZGF0ZSB0aGUgc3RhY2sgY2xhc3MsIGdpdmUgYSB0cnkgdG8gZGVxdWUgYXMgdGhlIGRlZmF1bHQgY29udGFpbmVyLgorCisyMDAyLTA1LTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9iaXNvbi5zaW1wbGUgKHl5cGFyc2UpOiBEbyBub3QgaW1wbGVtZW50IEAkID0gQDEuCisJKFlZTExPQ19ERUZBVUxUKTogQWRqdXN0IHRvIGRvIGl0LgorCSogZG9jL2Jpc29uLnRleGluZm8gKExvY2F0aW9uIERlZmF1bHQgQWN0aW9uKTogRml4LgorCisyMDAyLTA1LTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3JlYWRlci5jIChwYXJzZV9icmFjZXMpOiBNZXJnZSBpbnRvLi4uCisJKHBhcnNlX2FjdGlvbik6IHRoaXMuCisKKzIwMDItMDUtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBjb25maWd1cmUuaW4gKEFMTF9MSU5HVUFTKTogUmVtb3ZlLgorCSogcG8vTElOR1VBUywgaHIucG86IE5ldy4KKworMjAwMi0wNS0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlSZW1vdmUgdGhlIHNvIGNhbGxlZCBoYWlyeSAoc2VtYW50aWMpIHBhcnNlcnMuCisKKwkqIHNyYy9zeXN0ZW0uaCAoRVhUX0dVQVJEX0MsIEVYVF9TVFlQRV9IKTogUmVtb3ZlLgorCSogc3JjL2dyYW0uaCwgc3JjL2dyYW0uYyAoc2VtYW50aWNfcGFyc2VyKTogUmVtb3ZlLgorCShydWxlX3QpOiBSZW1vdmUgdGhlIGd1YXJkIGFuZCBndWFyZF9saW5lIG1lbWJlcnMuCisJKiBzcmMvbGV4LmggKHRva2VuX3QpOiByZW1vdmUgdG9rX2d1YXJkLgorCSogc3JjL29wdGlvbnMuYyAob3B0aW9uX3RhYmxlKTogUmVtb3ZlICVndWFyZCBhbmQgJXNlbWFudGljX3BhcnNlcgorCXN1cHBvcnQuCisJKiBzcmMvb3V0cHV0LmMsIHNyYy9vdXRwdXQuaCAoZ3VhcmRzX291dHB1dCk6IFJlbW92ZS4KKwkocHJlcGFyZSk6IEFkanVzdC4KKwkodG9rZW5fZGVmaW5pdGlvbnNfb3V0cHV0KTogRG9uJ3Qgb3V0cHV0IHRoZSBgVCcKKwl0b2tlbnMgKD8/PykuCisJKG91dHB1dF9za2VsZXRvbik6IERvbid0IG91dHB1dCB0aGUgZ3VhcmRzLgorCSogc3JjL2ZpbGVzLmMsIHNyYy9maWxlcy5jIChhdHRyc2ZpbGUpOiBSZW1vdmUuCisJKiBzcmMvcmVhZGVyLmMgKHN5bWJvbF9saXN0KTogUmVtb3ZlIHRoZSBndWFyZCBhbmQgZ3VhcmRfbGluZQorCW1lbWJlcnMuCisJQWRqdXN0IGRlcGVuZGVuY2llcy4KKwkocGFyc2VfZ3VhcmQpOiBSZW1vdmUuCisJKiBkYXRhL2Jpc29uLmhhaXJ5OiBSZW1vdmUuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoRW52aXJvbm1lbnQgVmFyaWFibGVzKTogUmVtb3ZlIG9jY3VycmVuY2VzIG9mCisJQklTT05fSEFJUlkuCisKKzIwMDItMDUtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKGNvcHlfYXQsIGNvcHlfZG9sbGFybSBwYXJzZV9icmFjZXMsIHBhcnNlX2FjdGlvbikKKwkocGFyc2VfZ3VhcmQpOiBSZW5hbWUgdGhlIGZvcm1hbCBhcmd1bWVudCBgc3RhY2tfb2Zmc2V0JyBhcworCWBydWxlX2xlbmd0aCcsIHdoaWNoIGlzIG1vcmUgcmVhZGFibGUuCisJQWRqdXN0IGNhbGxlcnMuCisJKGNvcHlfYXQsIGNvcHlfZG9sbGFyKTogSW5zdGVhZCBvZiBvdXRwdXR0aW5nIHRoZSBoYXJkIGNvZGVkCisJdmFsdWVzIG9mICQkLCAkbiBhbmQgc28gZm9ydGgsIG91dHB1dCBpbnZvY2F0aW9uIHRvIGI0X2xoc192YWx1ZSwKKwliNF9saHNfbG9jYXRpb24sIGI0X3Joc192YWx1ZSwgYW5kIGI0X3Joc19sb2NhdGlvbi4KKwlOb3RlOiB0aGlzIHBhdGNoIHBhcnRpYWxseSBkcm9wcyBgc2VtYW50aWMtcGFyc2VyJyBzdXBwb3J0OiBpdAorCWFsd2F5cyBkb2VzIGBydWxlX2xlbmd0aCAtIG4nLCB3aGVyZSBzZW1hbnRpYyBwYXJzZXJzIG91Z2h0IHRvCisJYWx3YXlzIHVzZSBgLW4nLgorCSogZGF0YS9iaXNvbi5zaW1wbGUsIGRhdGEvYmlzb24uYysrIChiNF9saHNfdmFsdWUpCisJKGI0X2xoc19sb2NhdGlvbiwgYjRfcmhzX3ZhbHVlLCBhbmQgYjRfcmhzX2xvY2F0aW9uOiBOZXcuCisKKzIwMDItMDUtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBjb25maWd1cmUuaW4gKEFDX0lOSVQpOiBCdW1wIHRvIDEuNDliLgorCShBTV9JTklUX0FVVE9NQUtFKTogU2hvcnQgaW52b2NhdGlvbi4KKworMjAwMi0wNS0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlWZXJzaW9uIDEuNDlhLgorCisyMDAyLTA1LTAxICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3NrZWxldG9uLmg6IFJlbW92ZS4KKworMjAwMi0wNS0wMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9za2VsZXRvbi5oOiBGaXggdGhlICNlbmRpZi4KKwlSZXBvcnRlZCBieSBNYWdudXMgRnJvbXJlaWRlLgorCisyMDAyLTA0LTI2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogZGF0YS9iaXNvbi5zaW1wbGUgKFlZU1RZUEVfSVNfVFJJVklBTCwgWVlMVFlQRV9JU19UUklWSUFMKToKKwlEZWZpbmUgaWYgd2UgZGVmaW5lIFlZU1RZUEUgYW5kIFlZTFRZUEUsIHJlc3BlY3RpdmVseS4KKwkoWVlDT1BZKTogRml4IFtdIHF1b3RpbmcgcHJvYmxlbSBpbiB0aGUgbm9uLUdDQyBjYXNlLgorCisyMDAyLTA0LTI1ICBSb2JlcnQgQW5pc2tvICA8cm9iZXJ0QGxyZGUuZXBpdGEuZnI+CisKKwkqIHNyYy9zY2FuLXNrZWwubDogUG9zdHByb2Nlc3MgcXVhZHJpZ3JhcGhzLgorCisJKiBzcmMvcmVhZGVyLmMgKGNvcHlfY2hhcmFjdGVyKTogTmV3IGZ1bmN0aW9uLCB1c2VkIHRvIG91dHB1dAorCXNpbmdsZSBjaGFyYWN0ZXJzIHdoaWxlIHJlcGxhY2luZyBgWycgYW5kIGBdJyB3aXRoIHF1YWRyaWdyYXBocywgdG8KKwlhdm9pZCB0cm91YmxlcyB3aXRoIE00IHF1b3Rlcy4KKwkoY29weV9jb21tZW50KTogT3V0cHV0IGNoYXJhY3RlcnMgd2l0aCBjb3B5X2NoYXJhY3Rlci4KKwkocmVhZF9hZGRpdGlvbm5hbF9jb2RlKTogTGlrZXdpc2UuCisJKGNvcHlfc3RyaW5nMik6IExpa2V3aXNlLgorCShjb3B5X2RlZmluaXRpb24pOiBMaWtld2lzZS4KKworCSogdGVzdHMvY2FsYy5hdDogRXhlcmNpc2UgTTQgcXVvdGluZy4KKworMjAwMi0wNC0yNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHRlc3RzL3NldHMuYXQgKEFUX0VYVFJBQ1RfU0VUUyk6IFNlZCBwb3J0YWJpbGl0eSBpc3N1ZTogbm8gc3BhY2UKKwliZXR3ZWVuIGAhJyBhbmQgdGhlIGNvbW1hbmQuCisJUmVwb3J0ZWQgYnkgUGF1bCBFZ2dlcnQuCisKKzIwMDItMDQtMjQgIFJvYmVydCBBbmlza28gIDxyb2JlcnRAbHJkZS5lcGl0YS5mcj4KKworCSogdGVzdHMvY2FsYy5hdDogRXhlcmNpc2UgcHJvbG9ndWUgc3BsaXR0aW5nLgorCisJKiBkYXRhL2Jpc29uLnNpbXBsZSwgZGF0YS9iaXNvbi5jKys6IFVzZSBgYjRfcHJlX3Byb2xvZ3VlJyBhbmQKKwlgYjRfcG9zdF9wcm9sb2d1ZScgaW5zdGVhZCBvZiBgYjRfcHJvbG9ndWUnLgorCisJKiBzcmMvb3V0cHV0LmMgKHByZXBhcmUpOiBBZGQgdGhlIGBwcmVfcHJvbG9ndWUnIGFuZCBgcG9zdF9wcm9sb2d1ZScKKwltdXNjbGVzLgorCShvdXRwdXQpOiBGcmVlIHByZV9wcm9sb2d1ZV9vYnN0YWNrIGFuZCBwb3N0X3Byb2xvZ3VlX29ic3RhY2suCisJKiBzcmMvZmlsZXMuaCwgc3JjL2ZpbGVzLmMgKGF0dHJzX29ic3RhY2spOiBSZW1vdmUuCisJKHByZV9wcm9sb2d1ZV9vYnN0YWNrLCBwb3N0X3Byb2xvZ3VlX29ic3RhY2spOiBOZXcuCisJKiBzcmMvcmVhZGVyLmMgKGNvcHlfZGVmaW5pdGlvbik6IEFkZCBhIHBhcmFtZXRlciB0byBzcGVjaWZ5IHRoZQorCW9ic3RhY2sgdG8gZmlsbCwgaW5zdGVhZCBvZiB1c2luZyBhdHRyc19vYnN0YWNrIHVuY29uZGl0aW9uYWxseS4KKwkocmVhZF9kZWNsYXJhdGlvbnMpOiBQYXNzIHByZV9wcm9sb2d1ZV9vYnN0YWNrIHRvIGNvcHlfZGVmaW5pdGlvbiBpZgorCWAldW5pb24nIGhhcyBub3QgeWV0IGJlZW4gc2VlbiwgcGFzcyBwb3N0X3Byb2xvZ3VlX29ic3RhY2sgb3RoZXJ3aXNlLgorCisyMDAyLTA0LTIzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogZGF0YS9iaXNvbi5zaW1wbGU6IFJlbW92ZSB1bm5lY2Vzc2FyeSBjb21tZW50YXJ5IGFuZCB3aGl0ZQorCXNwYWNlIGRpZmZlcmVuY2VzIGZyb20gMV8yOS1icmFuY2guCisJRGVwZW5kIG9uIFlZRVJST1JfVkVSQk9TRSwgbm90IGRlZmluZWQgKFlZRVJST1JfVkVSQk9TRSkuCisKKwkodW5pb24geXlhbGxvYywgWVlTVEFDS19HQVBfTUFYLCBZWVNUQUNLX0JZVEVTLCBZWUNPUFksCisJWVlTVEFDS19SRUxPQ0FURSk6IERvIG5vdCBkZWZpbmUgaWYgeXlvdmVyZmxvdyBpcyBkZWZpbmVkLCBvcgorCWlmIHRoaXMgaXMgYSBDKysgcGFyc2VyIGFuZCBZWVNUWVBFIG9yIFlZTFRZUEUgaGFzIG5vbnRyaXZpYWwKKwljb25zdHJ1Y3RvcnMgb3IgZGVzdHJ1Y3RvcnMuCisKKwkoeXlwYXJzZSkgWyEgZGVmaW5lZCBZWVNUQUNLX1JFTE9DQVRFXTogRG8gbm90IHJlbG9jYXRlIHRoZSBzdGFjay4KKworMjAwMi0wNC0yMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHRlc3RzL3NldHMuYXQgKEFUX0VYVFJBQ1RfU0VUUyk6IERvbid0IHVzZSA4IGNoYXIgbG9uZyBzZWQgbGFiZWxzLgorCSogdGVzdHMvc3luY2xpbmVzLmF0IChBVF9URVNUX1NZTkNMSU5FKTogQmUgcm9idXN0IHRvIEdDQydzCisJbG9jYXRpb24gd2l0aCBjb2x1bW5zLgorCSogdGVzdHMvY29uZmxpY3RzLmF0ICglbm9uYXNzb2MgYW5kIGVvZik6IERvbid0IHVzZSBgZXJyb3IuaCcuCisJQWxsIHJlcG9ydGVkIGJ5IFBhdWwgRWdnZXJ0LgorCisyMDAyLTA0LTIyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3JlZHVjZS5jIChkdW1wX2dyYW1tYXIpOiBNb3ZlIHRvLi4uCisJKiBzcmMvZ3JhbS5oLCBzcmMvZ3JhbS5jIChncmFtbWFyX2R1bXApOiBoZXJlLgorCUJlIHN1cmUgdG8gc2VwYXJhdGUgbG9uZyBpdGVtIG51bWJlcnMuCisJRG9uJ3QgcmVhZCB0aGUgbWVtYmVycyBvZiBhIHJ1bGUncyBwcmVjIGlmIGl0cyBuaWwuCisKKzIwMDItMDQtMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvb3V0cHV0LmMgKHRhYmxlX3NpemUsIHRhYmxlX2dyb3cpOiBOZXcuCisJKE1BWFRBQkxFKTogUmVtb3ZlLCByZXBsYWNlIHVzZXMgd2l0aCB0YWJsZV9zaXplLgorCShwYWNrX3ZlY3Rvcik6IEluc3RlYWQgb2YgZHlpbmcgd2hlbiB0aGUgdGFibGUgaXMgdG9vIGJpZywgZ3JvdyBpdC4KKworMjAwMi0wNC0yMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRhdGEvYmlzb24uc2ltcGxlICh5eXIxKTogSXRzIHR5cGUgaXMgdGhhdCBvZiBhIHRva2VuIG51bWJlci4KKwkqIGRhdGEvYmlzb24uYysrIChyMV8pOiBMaWtld2lzZS4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFdlYjJjIEFjdGlvbnMpOiBBZGp1c3QuCisKKzIwMDItMDQtMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKHRva2VuX3RyYW5zbGF0aW9uc19pbml0KTogMjU2IGlzIG5vdyB0aGUgZGVmYXVsdAorCXZhbHVlIGZvciB0aGUgZXJyb3IgdG9rZW4sIGkuZS4sIGl0IHdpbGwgYmUgYXNzaWduZWQgYW5vdGhlcgorCW51bWJlciBpZiB0aGUgdXNlciBhc3NpZ25lZCAyNTYgdG8gb25lIG9mIGhlciB0b2tlbnMuCisJKHJlYWRlcik6IERvbid0IGZvcmNlIDI1NiB0byBlcnJvci4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChTeW1ib2xzKTogQWRqdXN0LgorCSogdGVzdHMvdG9ydHVyZS5hdCAoQVRfREFUQV9IT1JJWk9OVEFMX0dSQU1NQVIpCisJKEFUX0RBVEFfVFJJQU5HVUxBUl9HUkFNTUFSKTogTnVtYmVyIHRoZSB0b2tlbnMgYXMgMSwgMiwgMworCWV0Yy4gaW5zdGVhZCBvZiAxMCwgMjAsIDMwICh3aGljaCB3YXMgdXNlZCB0byBganVtcCcgb3ZlciBlcnJvcgorCSgyNTYpIGFuZCB1bmRlZmluZWQgKDIpKS4KKworMjAwMi0wNC0yMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlQcm9wYWdhdGUgbW9yZSB0b2tlbl9udW1iZXJfdC4KKworCSogc3JjL2dyYW0uaCAodG9rZW5fbnVtYmVyX2FzX2l0ZW1fbnVtYmVyKQorCShpdGVtX251bWJlcl9hc190b2tlbl9udW1iZXIpOiBOZXcuCisJKiBzcmMvb3V0cHV0LmMgKEdFTkVSQVRFX09VVFBVVF9UQUJMRSk6IE5ldy4KKwlVc2UgaXQgdG8gY3JlYXRlIG91dHB1dF9pdGVtX251bWJlcl90YWJsZSBhbmQKKwlvdXRwdXRfdG9rZW5fbnVtYmVyX3RhYmxlLgorCSogc3JjL0xSMC5jLCBzcmMvZGVyaXZlcy5jLCBzcmMvZ3JhbS5jLCBzcmMvZ3JhbS5oLCBzcmMvbGFsci5jLAorCSogc3JjL2xleC5jLCBzcmMvbnVsbGFibGUuYywgc3JjL291dHB1dC5jLCBzcmMvcHJpbnQuYywKKwkqIHNyYy9wcmludF9ncmFwaC5jLCBzcmMvcmVhZGVyLmMsIHNyYy9yZWR1Y2UuYywgc3JjL3N0YXRlLmgsCisJKiBzcmMvc3ltdGFiLmMsIHNyYy9zeW10YWIuaDogVXNlIHRva2VuX251bWJlcl90IGluc3RlYWQgb2Ygc2hvcnRzLgorCisyMDAyLTA0LTIyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL291dHB1dC5oLCBzcmMvb3V0cHV0LmMgKGdldF9saW5lc19udW1iZXIpOiBSZW1vdmUuCisKKzIwMDItMDQtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkb2MvYmlzb24udGV4aW5mbyAoQWN0aW9ucyk6IE1ha2UgY2xlYXIgdGhhdCBgfCcgaXMgbm90IHRoZSBzYW1lCisJYXMgTGV4L0ZsZXgnLgorCShEZWJ1Z2dpbmcpOiBNb3JlIGRldGFpbHMgYWJvdXQgZW5hYmxpbmcgdGhlIGRlYnVnZ2luZyBmZWF0dXJlcy4KKwkoVGFibGUgb2YgU3ltYm9scyk6IERlc2NyaWJlICQkLCAkbiwgQCQsIGFuZCBAbi4KKwlTdWdnZXN0ZWQgYnkgVGltIEpvc2xpbmcuCisKKzIwMDItMDQtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkb2MvYmlzb24udGV4aW5mbzogUmVtb3ZlIHRoZSB1c2VzIG9mIHRoZSBvYnNvbGV0ZSBAcmVmaWxsLgorCisyMDAyLTA0LTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3N5c3RlbS5oOiBSZWx5IG9uIEhBVkVfTElNSVRTX0guCisJU3VnZ2VzdGVkIGJ5IFBhdWwgRWdnZXJ0LgorCisyMDAyLTA0LTA5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogdGVzdHMvY2FsYy5hdCAoX0FUX0NIRUNLX0NBTENfRVJST1IpOiBSZWNlaXZlIGFzIGFyZ3VtZW50IHRoZQorCWZ1bGwgc3RkZXJyLCBhbmQgc3RyaXAgaXQgYWNjb3JkaW5nIHRvIHRoZSBiaXNvbiBvcHRpb25zLCBpbnN0ZWFkCisJb2YgY29tcG9zaW5nIHRoZSBlcnJvciBtZXNzYWdlIGZyb20gZGlmZmVyZW50IGJpdHMuCisJVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gY2hlY2sgZm9yIHNldmVyYWwgZXJyb3IgbWVzc2FnZXMuCisJQWRqdXN0IGFsbCB0aGUgaW52b2NhdGlvbnMuCisJQWRkIGFuIGludm9jYXRpb24gZXhlcmNpc2luZyB0aGUgZXJyb3IgdG9rZW4uCisJQWRkIGFuIGludm9jYXRpb24gZGVtb25zdHJhdGluZyBhIHN0dXBpZCBlcnJvciBtZXNzYWdlLgorCShfQVRfREFUQV9DQUxDX1kpOiBGb2xsb3cgdGhlIEdDUzogaW5pdGlhbCBjb2x1bW4gaXMgMSwgbm90IDAuCisJQWRqdXN0IHRoZSB0ZXN0cy4KKwlFcnJvciBtZXNzYWdlIGFyZSBmb3Igc3RkZXJyLCBub3Qgc3Rkb3V0LgorCisyMDAyLTA0LTA5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2dyYW0uaCwgc3JjL2dyYW0uYyAoZXJyb3JfdG9rZW5fbnVtYmVyKTogUmVtb3ZlLCB1c2UKKwllcnJ0b2tlbi0+bnVtYmVyLgorCSogc3JjL3JlYWRlci5jIChyZWFkZXIpOiBEb24ndCBzcGVjaWZ5IHRoZSB1c2VyIHRva2VuIG51bWJlciAoMikKKwlmb3IgJHVuZGVmaW5lZCwgYXMgaXQgdXNlbGVzc2x5IHByZXZlbnRzIHVzaW5nIGl0LgorCSogc3JjL2dyYW0uaCAodG9rZW5fbnVtYmVyX3QpOiBNb3ZlIHRvLi4uCisJKiBzcmMvc3ltdGFiLmg6IGhlcmUuCisJKHN0YXRlX3QubnVtYmVyKTogSXMgYSB0b2tlbl9udW1iZXJfdC4KKwkqIHNyYy9wcmludC5jLCBzcmMvcmVhZGVyLmM6IFVzZSB1bmRlZnRva2VuLT5udW1iZXIgaW5zdGVhZCBvZgorCWhhcmQgY29kZWQgMi4KKwkoRXZlbiB0aG91Z2ggdGhpcyAyIGlzIG5vdCB0aGUgc2FtZSBhcyBhYm92ZTogdGhlIG51bWJlciBvZiB0aGUKKwl1bmRlZnRva2VuIHJlbWFpbnMgYmVpbmcgMiwgaXQgaXMgaXRzIHVzZXIgdG9rZW4gbnVtYmVyIHdoaWNoCisJbWlnaHQgbm90IGJlIDIpLgorCSogc3JjL291dHB1dC5jIChwcmVwYXJlX3Rva2Vucyk6IFJlbmFtZSB0aGUgYG1heHRvaycgbXVzY2xlIHdpdGgKKwlgdXNlcl90b2tlbl9udW1iZXJfbWF4Jy4KKwlPdXRwdXQgYHVuZGVmX3Rva2VuX251bWJlcicuCisJKiBkYXRhL2Jpc29uLnNpbXBsZSwgZGF0YS9iaXNvbi5jKys6IFVzZSB0aGVtLgorCUJlIHN1cmUgdG8gbWFwIGludmFsaWQgeXlsZXggcmV0dXJuIHZhbHVlcyB0bworCWB1bmRlZl90b2tlbl9udW1iZXInLiAgVGhpcyBzYXZlcyB1cyBmcm9tIGdyYXR1aXRvdXMgU0VHVi4KKworCSogdGVzdHMvY29uZmxpY3RzLmF0IChTb2x2ZWQgU1IgQ29uZmxpY3RzKQorCShVbnJlc29sdmVkIFNSIENvbmZsaWN0cyk6IEFkanVzdC4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFdlYjJjIEFjdGlvbnMpOiBBZGp1c3QuCisKKzIwMDItMDQtMDggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkYXRhL2Jpc29uLmMrKzogcy9iNF9pdGVtX251bWJlcl9tYXgvYjRfcmhzX251bWJlcl9tYXgvLgorCUFkZGluZyAjbGluZS4KKwlSZW1vdmUgdGhlIGR1cGxpY2F0ZSBgdHlwZWRlZnMnLgorCShSaHNOdW1iZXJUeXBlKTogRml4IHRoZSBkZWNsYXJhdGlvbiBhbmQgdmFyaW91cyBvdGhlciB0eXBvcy4KKwlVc2UgX19vZmlsZV9fLgorCSogZGF0YS9iaXNvbi5zaW1wbGU6IFVzZSBfX29maWxlX18uCisJKiBzcmMvc2Nhbi1za2VsLmw6IEhhbmRsZSBfX29maWxlX18uCisKKzIwMDItMDQtMDggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvZ3JhbS5oIChpdGVtX251bWJlcl90KTogTmV3LCB0aGUgdHlwZSBvZiBpdGVtIG51bWJlcnMgaW4KKwlSSVRFTS4gIE5vdGUgdGhhdCBpdCBtdXN0IGJlIGFibGUgdG8gY29kZSBzeW1ib2wgbnVtYmVycyBhcworCXBvc2l0aXZlIG51bWJlciwgYW5kIHRoZSBuZWdhdGlvbiBvZiBydWxlIG51bWJlcnMgYXMgbmVnYXRpdmUKKwludW1iZXJzLgorCUFkanVzdCBhbGwgZGVwZW5kZW5jaWVzIChwcmV0dHkgbWFueSkuCisJKiBzcmMvcmVkdWNlLmMgKHJ1bGUpOiBSZW1vdmUgdGhpcyBgc2hvcnQgKicgcG9pbnRlcjogdXNlCisJaXRlbV9udW1iZXJfdC4KKwkqIHNyYy9zeXN0ZW0uaCAoTUlOU0hPUlQsIE1BWFNIT1JUKTogUmVtb3ZlLgorCUluY2x1ZGUgYGxpbWl0cy5oJy4KKwlBZGp1c3QgZGVwZW5kZW5jaWVzIHRvIHVzaW5nIFNIUlRfTUFYIGFuZCBTSFJUX01JTi4KKwkoc2hvcnRjcHkpOiBSZW1vdmUuCisJKE1BWFRBQkxFKTogTW92ZSB0by4uLgorCSogc3JjL291dHB1dC5jIChNQVhUQUJMRSk6IGhlcmUuCisJKHByZXBhcmVfcnVsZXMpOiBVc2Ugb3V0cHV0X2ludF90YWJsZSB0byBvdXRwdXQgcmhzLgorCSogZGF0YS9iaXNvbi5zaW1wbGUsIGRhdGEvYmlzb24uYysrOiBBZGp1c3QuCisJKiB0ZXN0cy90b3J0dXJlLmF0IChCaWcgdHJpYW5nbGUpOiBNb3ZlIHRoZSBsaW1pdCBmcm9tIDI1NCB0bworCTUwMC4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFdlYjJjIEFjdGlvbnMpOiBBanVzdC4KKworCVRyeWluZyB3aXRoIGJpZ2dlciBncmFtbWFycyBzaG93cyB2YXJpb3VzIHBoZW5vbWVuYTogYXQgMzAwMCAoMjhNYgorCW9mIGdyYW1tYXIgZmlsZSkgYmlzb24gaXMga2lsbGVkIGJ5IG15IHN5c3RlbSwgYXQgMjAwMCAoMTJNYikgYmlzb24KKwlwYXNzZXMsIGJ1dCBwcm9kdWNlcyBuZWdhdGl2ZSAjbGluZSBudW1iZXIsIG9uY2UgZml4ZWQsIEdDQyBpcworCWtpbGxlZCB3aGlsZSBjb21waWxpbmcgMTRNYiwgYXQgMTUwMCAoNi43IE1iIG9mIGdyYW1tYXIsIDguMk1iIG9mCisJQyksIGl0IHBhc3Nlcy4KKwkqIHNyYy9zdGF0ZS5oIChzdGF0ZV9oKTogQ29kZSBpbnB1dCBsaW5lcyBvbiBpbnRzLCBub3Qgc2hvcnRzLgorCisyMDAyLTA0LTA4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3JlZHVjZS5jIChyZWR1Y2VfZ3JhbW1hcik6IEZpcnN0IHJlZHVjZSB0aGUgbm9udGVybWluYWxzLAorCWFuZCB0aGVuIHRoZSBncmFtbWFyLgorCisyMDAyLTA0LTA4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3N5c3RlbS5oOiBObyBsb25nZXIgdXNpbmcgc3RybmR1cC4KKworMjAwMi0wNC0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9tdXNjbGVfdGFiLmggKE1VU0NMRV9JTlNFUlRfTE9OR19JTlQpOiBOZXcuCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF90YWJsZV9kYXRhKTogUmV0dXJuIHRoZSBsb25nZXN0IG51bWJlci4KKwkocHJlcGFyZV90b2tlbnMpOiBPdXRwdXQgYHRva2VuX251bWJlcl9tYXgnKS4KKwkqIGRhdGEvYmlzb24uc2ltcGxlLCBkYXRhL2Jpc29uLmMrKyAoYjRfc2ludF90eXBlLCBiNF91aW50X3R5cGUpOgorCU5ldy4KKwlVc2UgdGhlbSB0byBkZWZpbmUgeXlfdG9rZW5fbnVtYmVyX3R5cGUvVG9rZW5OdW1iZXJUeXBlLgorCVVzZSB0aGlzIHR5cGUgZm9yIHl5dHJhbnNsYXRlLgorCSogdGVzdHMvdG9ydHVyZS5hdCAoQmlnIHRyaWFuZ2xlKTogUHVzaCB0aGUgbGltaXQgZnJvbSAxMjQgdG8KKwkyNTMuCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChXZWIyYyBBY3Rpb25zKTogQWRqdXN0LgorCisyMDAyLTA0LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogdGVzdHMvdG9ydHVyZS5hdCAoQmlnIHRyaWFuZ2xlKTogTmV3LgorCShHTlUgQVdLIEdyYW1tYXIsIEdOVSBDaW0gR3JhbW1hcik6IE1vdmUgdG8uLi4KKwkqIHRlc3RzL2V4aXN0aW5nLmF0OiBoZXJlLgorCisyMDAyLTA0LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2dyYW0uaCwgc3JjL2dyYW0uYyAobml0ZW1zKTogUmVtb3ZlLCBpdCBpcyBhbiBhbGlhcyBvZgorCW5yaXRlbXMuCisJQWRqdXN0IGRlcGVuZGVuY2llcy4KKworMjAwMi0wNC0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9yZWFkZXIuYzogTm9ybWFsaXplIGluY3JlbWVudHMgdG8gcHJlZml4IGZvcm0uCisKKzIwMDItMDQtMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMsIHN5bXRhYi5jOiBSZW1vdmUgZGVidWdnaW5nIGNvZGUuCisKKzIwMDItMDQtMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJUmVuYW1lIGFsbCB0aGUgYGJ1Y2tldCdzIGFzIGBzeW1ib2xfdCcuCisKKwkqIHNyYy9ncmFtLmMsIHNyYy9ncmFtLmgsIHNyYy9sZXguYywgc3JjL2xleC5oLCBzcmMvb3V0cHV0LmMsCisJKiBzcmMvcmVhZGVyLmMsIHNyYy9yZWFkZXIuaCwgc3JjL3JlZHVjZS5jLCBzcmMvc3RhdGUuaCwKKwkqIHNyYy9zeW10YWIuYywgc3JjL3N5bXRhYi5oIChidWNrZXQpOiBSZW5hbWUgYXMuLi4KKwkoc3ltYm9sX3QpOiB0aGlzLgorCShzeW1ib2xfbGlzdF9uZXcsIGJ1Y2tldF9jaGVja19kZWZpbmVkLCBidWNrZXRfbWFrZV9hbGlhcykKKwkoYnVja2V0X2NoZWNrX2FsaWFzX2NvbnNpc3RlbmNlLCBidWNrZXRfcGFjaywgYnVja2V0X3RyYW5zbGF0aW9uKQorCShidWNrZXRfbmV3LCBidWNrZXRfZnJlZSwgaGFzaF9jb21wYXJlX2J1Y2tldCwgaGFzaF9idWNrZXQpCisJKGJ1Y2tldHNfbmV3LCBidWNrZXRzX2ZyZWUsIGJ1Y2tldHNfZG8pOiBSZW5hbWUgYXMuLi4KKwkoc3ltYm9sX2xpc3RfbmV3LCBzeW1ib2xfY2hlY2tfZGVmaW5lZCwgc3ltYm9sX21ha2VfYWxpYXMpCisJKHN5bWJvbF9jaGVja19hbGlhc19jb25zaXN0ZW5jZSwgc3ltYm9sX3BhY2ssIHN5bWJvbF90cmFuc2xhdGlvbikKKwkoc3ltYm9sX25ldywgc3ltYm9sX2ZyZWUsIGhhc2hfY29tcGFyZV9zeW1ib2xfdCwgaGFzaF9zeW1ib2xfdCkKKwkoc3ltYm9sc19uZXcsIHN5bWJvbHNfZnJlZSwgc3ltYm9sc19kbyk6IHRoZXNlLgorCisyMDAyLTA0LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCVVzZSBsaWIvaGFzaCBmb3IgdGhlIHN5bWJvbCB0YWJsZS4KKworCSogc3JjL2dyYW0uYyAobnRva2Vucyk6IEluaXRpYWxpemUgdG8gMSwgdG8gcmVzZXJ2ZSBhIHNsb3QgZm9yCisJRU9GLgorCSogc3JjL2xleC5jIChsZXgpOiBTZXQgdGhlIGBudW1iZXInIG1lbWJlciBvZiBuZXcgdGVybWluYWxzLgorCSogc3JjL3JlYWRlci5jIChidWNrZXRfY2hlY2tfZGVmaW5lZCwgYnVja2V0X21ha2VfYWxpYXMpCisJKGJ1Y2tldF9jaGVja19hbGlhc19jb25zaXN0ZW5jZSwgYnVja2V0X3RyYW5zbGF0aW9uKTogTmV3LgorCShyZWFkZXIsIGdyYW1tYXJfZnJlZSwgcmVhZGdyYW0sIHRva2VuX3RyYW5zbGF0aW9uc19pbml0KQorCShwYWNrc3ltYm9scyk6IEFkanVzdC4KKwkocmVhZGVyKTogTnVtYmVyIHRoZSBwcmVkZWZpbmVkIHRva2Vucy4KKwkqIHNyYy9yZWR1Y2UuYyAoaW5hY2Nlc3NhYmxlX3N5bWJvbHMpOiBKdXN0IHVzZSBoYXJkIGNvZGVkIG51bWJlcnMKKwlmb3IgcHJlZGVmaW5lZCB0b2tlbnMuCisJKiBzcmMvc3ltdGFiLmggKGJ1Y2tldCk6IFJlbW92ZSBhbGwgdGhlIGhhc2ggdGFibGUgcmVsYXRlZAorCW1lbWJlcnMuCisJKiBzcmMvc3ltdGFiLmMgKHN5bXRhYik6IFJlcGxhY2UgYnkuLi4KKwkoYnVja2V0X3RhYmxlKTogdGhpcy4KKwkoYnVja2V0X25ldywgYnVja2V0X2ZyZWUsIGhhc2hfY29tcGFyZV9idWNrZXQsIGhhc2hfYnVja2V0KQorCShidWNrZXRzX25ldywgYnVja2V0c19kbyk6IE5ldy4KKworMjAwMi0wNC0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9ncmFtLmMgKG5pdGVtcywgbnJ1bGVzLCBuc3ltcywgbnRva2VucywgbnZhcnMsIG5yaXRlbXMpCisJKHN0YXJ0X3N5bWJvbCwgbWF4X3VzZXJfdG9rZW5fbnVtYmVyLCBzZW1hbnRpY19wYXJzZXIpCisJKGVycm9yX3Rva2VuX251bWJlcik6IEluaXRpYWxpemUuCisJKiBzcmMvcmVhZGVyLmMgKGdyYW1tYXIsIHN0YXJ0X2ZsYWcsIHN0YXJ0dmFsLCB0eXBlZCwgbGFzdHByZWMpOgorCUluaXRpYWxpemUuCisJKHJlYWRlcik6IERvbid0LgorCShlcnJ0b2tlbiwgZW9mdG9rZW4sIHVuZGVmdG9rZW4sIGF4aW9tKTogRXh0ZXJuLgorCisyMDAyLTA0LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2dyYW0uaCAocnVsZV9zKTogcHJlYyBhbmQgcHJlY3N5bSBhcmUgbm93IHBvaW50ZXJzCisJdG8gdGhlIGJ1Y2tldCBnaXZpbmcgdGhlIHByaW9yaXR5L2Fzc29jaWF0aXZpdHkuCisJTWVtYmVyIGBhc3NvY2lhdGl2aXR5JyByZW1vdmVkOiB1c2VsZXNzLgorCSogc3JjL3JlZHVjZS5jLCBzcmMvY29uZmxpY3RzLmM6IEFkanVzdC4KKworMjAwMi0wNC0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9sYWxyLmMsIHNyYy9MUjAuYywgc3JjL2Nsb3N1cmUuYywgc3JjL2dyYW0uYywgc3JjL3JlZHVjZS5jOgorCVByb3Blcmx5IGVzY2FwZSB0aGUgc3ltYm9scycgVEFHIHdoZW4gb3V0cHV0dGluZyB0aGVtLgorCisyMDAyLTA0LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2xhbHIuaCAoTEEpOiBJcyBhIGJpdHNldHYsIG5vdCBiaXRzZXQqLgorCisyMDAyLTA0LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2xhbHIuaCwgc3JjL2xhbHIuYyAoTEFydWxlbm8pOiBSZXBsYWNlIHdpdGguLi4KKwkoTEFydWxlKTogdGhpcywgd2hpY2ggaXMgYW4gYXJyYXkgdG8gcnVsZV90Ki4KKwkqIHNyYy9wcmludC5jLCBzcmMvY29uZmxpY3RzLmM6IEFkanVzdC4KKworMjAwMi0wNC0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9ncmFtLmggKHJ1bGVfdCk6IFJlbmFtZSBgbnVtYmVyJyBhcyBgdXNlcl9udW1iZXInLgorCWBudW1iZXInIGlzIGEgbmV3IG1lbWJlci4KKwlBZGp1c3QgZGVwZW5kZW5jaWVzLgorCSogc3JjL3JlZHVjZS5jIChyZWR1Y2VfZ3JhbW1hcl90YWJsZXMpOiBSZW51bWJlciBydWxlX3QubnVtYmVyLgorCisyMDAyLTA0LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCUFzIGEgcmVzdWx0IG9mIHRoZSBwcmV2aW91cyBwYXRjaCwgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZAorCXRvIHJlb3JkZXIgcml0ZW0gaXRzZWxmLgorCisJKiBzcmMvcmVkdWNlLmMgKHJlZHVjZV9ncmFtbWFyX3RhYmxlcyk6IERvbid0IHNvcnQgUklURU0uCisKKzIwMDItMDQtMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJQmUgc3VyZSBuZXZlciB0byB3YWxrIHRocm91Z2ggUklURU1TLCBidXQgdXNlIG9ubHkgZGF0YSByZWxhdGVkIHRvCisJdGhlIHJ1bGVzIHRoZW1zZWx2ZXMuIFJJVEVNUyBzaG91bGQgYmUgYmFuaXNoZWQuCisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3Rva2VuX3RyYW5zbGF0aW9ucyk6IFJlbmFtZSBhcy4uLgorCShwcmVwYXJlX3Rva2Vucyk6IHRoaXMuCisJSW4gYWRkaXRpb24gdG8gYHRyYW5zbGF0ZScsIHByZXBhcmUgdGhlIG11c2NsZXMgYHRuYW1lJyBhbmQKKwlgdG9rbnVtJywgd2hpY2ggd2VyZSBoYW5kbGVkIGJ5Li4uCisJKG91dHB1dF9ydWxlX2RhdGEpOiB0aGlzLgorCVJlbW92ZSwgYW5kIG1vdmUgdGhlIHJlbWFpbmRlciBvZiBpdHMgb3V0cHV0cyBpbnRvLi4uCisJKHByZXBhcmVfcnVsZXMpOiB0aGlzIG5ldyByb3V0aW5lcywgd2hpY2ggYWxzbyBtZXJnZXMgY29udGVudCBmcm9tCisJKG91dHB1dF9ncmFtKTogdGhpcy4KKwkocHJlcGFyZV9ydWxlcyk6IEJlIHN1cmUgbmV2ZXIgdG8gd2FsayB0aHJvdWdoIFJJVEVNUy4KKwkob3V0cHV0X3N0b3MpOiBSZW5hbWUgYXMuLi4KKwkocHJlcGFyZV9zdG9zKTogdGhpcy4KKwkob3V0cHV0KTogQWx3YXlzIGludm9rZSBwcmVwYXJlX3N0YXRlcywgYWZ0ZXIgYWxsLCBqdXN0IGRvbid0IHVzZSBpdAorCWluIHRoZSBvdXRwdXQgaWYgeW91IGRvbid0IG5lZWQgaXQuCisKKzIwMDItMDQtMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvTFIwLmMgKG5ld19zdGF0ZSk6IERpc3BsYXkgYG5zdGF0ZXMnIGFzIHRoZSBuYW1lIG9mIHRoZQorCW5ld2x5IGNyZWF0ZWQgc3RhdGUuCisJQWRqdXN0IHRvIGluaXRpYWxpemUgZmlyc3Rfc3RhdGUgYW5kIGxhc3Rfc3RhdGUgaWYgbmVlZGVkLgorCUJlIHN1cmUgdG8gZGlzdGluZ3Vpc2ggdGhlIGluaXRpYWwgZnJvbSB0aGUgZmluYWwgc3RhdGUuCisJKG5ld19zdGF0ZXMpOiBDcmVhdGUgdGhlIGl0ZW1zZXQgb2YgdGhlIGluaXRpYWwgc3RhdGUsIGFuZCB1c2UKKwluZXdfc3RhdGUuCisJKiBzcmMvY2xvc3VyZS5jIChjbG9zdXJlKTogTm93IHRoYXQgdGhlIGluaXRpYWwgc3RhdGUgaGFzIGl0cworCWl0ZW1zIHByb3Blcmx5IHNldCwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBzcGVjaWFsIGNhc2Ugd2hlbgorCWNyZWF0aW5nIGBydWxlc2V0Jy4KKworCUFzIGEgcmVzdWx0LCBub3cgdGhlIHJ1bGUgMCwgcmVkdWNpbmcgdG8gJGF4aW9tLCBpcyB2aXNpYmxlIGluIHRoZQorCW91dHB1dHMuICBBZGp1c3QgdGhlIHRlc3Qgc3VpdGUuCisKKwkqIHRlc3RzL2NvbmZsaWN0cy5hdCAoU29sdmVkIFNSIENvbmZsaWN0cykKKwkoVW5yZXNvbHZlZCBTUiBDb25mbGljdHMpOiBBZGp1c3QuCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChXZWIyYyBSZXBvcnQsIFJ1bGUgTGluZSBOdW1iZXJzKTogSWRlbS4KKwkqIHRlc3RzL2NvbmZsaWN0cy5hdCAoUy9SIGluIGluaXRpYWwpOiBOZXcuCisKKzIwMDItMDQtMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvTFIwLmMgKGFsbG9jYXRlX2l0ZW1zZXRzKTogRG9uJ3QgbG9vcCBvdmVyIHJpdGVtOiBsb29wIG92ZXIKKwl0aGUgUkhTIG9mIHRoZSBydWxlcy4KKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X2dyYW0pOiBMaWtld2lzZS4KKworMjAwMi0wNC0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9ncmFtLmggKHJ1bGVfdCk6IGBsaHMnIGlzIG5vdyBhIHBvaW50ZXIgdG8gdGhlIHN5bWJvbCdzCisJYnVja2V0LgorCUFkanVzdCBhbGwgZGVwZW5kZW5jaWVzLgorCSogc3JjL3JlZHVjZS5jIChub250ZXJtaW5hbHNfcmVkdWNlKTogRG9uJ3QgZm9yZ2V0IHRvIHJlbnVtYmVyIHRoZQorCWBudW1iZXInIG9mIHRoZSBidWNrZXRzIHRvby4KKwkqIHNyYy9ncmFtLmg6IEluY2x1ZGUgYHN5bXRhYi5oJy4KKwkoYXNzb2NpYXRpdml0eSk6IE1vdmUgdG8uLi4KKwkqIHNyYy9zeW10YWIuaDogaGVyZS4KKwlObyBsb25nZXIgaW5jbHVkZSBgZ3JhbS5oJy4KKworMjAwMi0wNC0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9ncmFtLmgsIHNyYy9ncmFtLmMgKHJ1bGVzX3Joc19sZW5ndGgpOiBOZXcuCisJKHJpdGVtX2xvbmdlc3RfcmhzKTogVXNlIGl0LgorCSogc3JjL2dyYW0uaCAocnVsZV90KTogYG51bWJlcicgaXMgYSBuZXcgbWVtYmVyLgorCSogc3JjL3JlYWRlci5jIChwYWNrZ3JhbSk6IFNldCBpdC4KKwkqIHNyYy9yZWR1Y2UuYyAocmVkdWNlX2dyYW1tYXJfdGFibGVzKTogTW92ZSB0aGUgdXNlbGVzcyBydWxlcyBhdAorCXRoZSBlbmQgb2YgYHJ1bGVzJywgYW5kIGNvdW50IHRoZW0gb3V0IG9mIGBucnVsZXMnLgorCShyZWR1Y2Vfb3V0cHV0LCBkdW1wX2dyYW1tYXIpOiBBZGp1c3QuCisJKiBzcmMvcHJpbnQuYyAocHJpbnRfZ3JhbW1hcik6IEl0IGlzIG5vIGxvbmdlciBuZWVkZWQgdG8gY2hlY2sgZm9yCisJdGhlIHVzZWZ1bG5lc3Mgb2YgYSBydWxlLCBhcyB1c2VsZXNzIHJ1bGVzIGFyZSBiZXlvbmQgYG5ydWxlcyArIDEnLgorCSogdGVzdHMvcmVkdWNlLmF0IChSZWR1Y2VkIEF1dG9tYXRvbik6IE5ldyB0ZXN0LgorCisyMDAyLTA0LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3JlZHVjZS5jIChpbmFjY2Vzc2FibGVfc3ltYm9scyk6IEZpeCBhIGJ1Z2xldDogYmVjYXVzZSBvZiBhCisJbGFja2luZyBgKyAxJyB0byBucnVsZXMsIEJpc29uIHJlcG9ydGVkIGFzIHVzZWxlc3MgYSB0b2tlbiBpZiBpdAorCXdhcyB1c2VkIHNvbGVseSB0byBzZXQgdGhlIHByZWNlZGVuY2Ugb2YgdGhlIGxhc3QgcnVsZS4uLgorCisyMDAyLTA0LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9iaXNvbi5jKyssIGRhdGEvYmlzb24uc2ltcGxlOiBEb24ndCBvdXRwdXQgdGhlIGN1cnJlbnQgZmlsZQorCW5hbWUgaW4gI2xpbmUsIHRvIGF2b2lkIHVzZWxlc3MgZGlmZnMgYmV0d2VlbiB0d28gaWRlbnRpY2FsCisJb3V0cHV0cyB1bmRlciBkaWZmZXJlbnQgbmFtZXMuCisKKzIwMDItMDQtMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvY2xvc3VyZS5jLCBzcmMvcHJpbnQuYywgc3JjL3JlYWRlci5jLCBzcmMvcmVkdWNlLmM6CisJTm9ybWFsaXplIGxvb3BzIHRvIHVzaW5nIGA8IG5ydWxlcyArIDEnLCBub3QgYDw9IG5ydWxlcycuCisKKzIwMDItMDQtMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBUT0RPOiBVcGRhdGUuCisKKzIwMDItMDQtMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvb3V0cHV0LmMsIHNyYy9yZWFkZXIuYywgc3JjL3N5bXRhYi5jLCBzcmMvc3ltdGFiLmg6IFJlbmFtZQorCWJ1Y2tldC52YWx1ZSBhcyBidWNrZXQubnVtYmVyLgorCisyMDAyLTA0LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2Nsb3N1cmUuYywgc3JjL2Rlcml2ZXMuYywgc3JjL2dyYW0uaCwgc3JjL2xhbHIuYywKKwkqIHNyYy9udWxsYWJsZS5jLCBzcmMvb3V0cHV0LmMsIHNyYy9wcmludC5jLCBzcmMvcHJpbnRfZ3JhcGguYywKKwkqIHNyYy9yZWFkZXIuYywgc3JjL3JlZHVjZS5jOiBMZXQgcnVsZV90LnJocyBwb2ludCBkaXJlY3RseSB0byB0aGUKKwlSSFMsIGluc3RlYWQgb2YgYmVpbmcgYW4gaW5kZXggaW4gUklURU1TLgorCisyMDAyLTA0LTA0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogZG9jL2Jpc29uLnRleGluZm86IFVwZGF0ZSBjb3B5cmlnaHQgZGF0ZS4KKwkoUnBjYWxjIExleGVyLCBTeW1ib2xzLCBUb2tlbiBEZWNsKTogRG9uJ3QgYXNzdW1lIEFTQ0lJLgorCShTeW1ib2xzKTogV2FybiBhYm91dCBydW5uaW5nIEJpc29uIGluIG9uZSBjaGFyYWN0ZXIgc2V0LAorCWJ1dCBjb21waWxpbmcgYW5kL29yIHJ1bm5pbmcgaW4gYW4gaW5jb21wYXRpYmxlIG9uZS4KKwlXYXJuIGFib3V0IGNoYXJhY3RlciBjb2RlIDI1NiwgdG9vLgorCisyMDAyLTA0LTAzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogc3JjL2Jpc29uLmRhdGEgKFlZU1RBQ0tfQUxMT0MpOiBEZXBlbmQgb24gd2hldGhlcgorCVlZRVJST1JfVkVSQk9TRSBpcyBub256ZXJvLCBub3Qgd2hldGhlciBpdCBpcyBkZWZpbmVkLgorCisJTWVyZ2UgY2hhbmdlcyBmcm9tIGJpc29uLTFfMjktYnJhbmNoLgorCisyMDAyLTAzLTIwICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCU1lcmdlIGZpeGVzIGZyb20gRGViaWFuIGJpc29uXzEuMzQtMS5kaWZmLgorCisJKiBjb25maWd1cmUuaW4gKEFDX1BSRVJFUSk6IDIuNTMuCisKKzIwMDItMDMtMjAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvY29uZmxpY3RzLmMgKGxvZ19yZXNvbHV0aW9uKTogQXJndW1lbnQgYHJlc29sdXRpb24nIGlzIGNvbnN0LgorCisyMDAyLTAzLTE5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogc3JjL2Jpc29uLnNpbXBsZSAoWVlDT1BZKTogTmV3IG1hY3JvLgorCShZWVNUQUNLX1JFTE9DQVRFKTogVXNlIGl0LgorCVJlbW92ZSBUeXBlIGFyZzsgbm8gbG9uZ2VyIG5lZWRlZC4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCisJKHl5bWVtY3B5KTogUmVtb3ZlOyBubyBsb25nZXIgbmVlZGVkLgorCisJKiBNYWtlZmlsZS5hbSAoQVVUT01BS0VfT1BUSU9OUyk6IDEuNi4KKwkqIGRvYy9NYWtlZmlsZS5hbSAoQVVUT01BS0VfT1BUSU9OUyk6IFJlbW92ZS4KKworMjAwMi0wMy0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlUZXN0IGFuZCBmaXggdGhlICNsaW5lIG91dHB1dHMuCisKKwkqIHRlc3RzL2F0bG9jYWwuYXQgKEdDQyk6IE5ldy4KKwkqIHRlc3RzL3N5bmNsaW5lcy5hdCAoQVRfVEVTVF9TWU5DTElORSk6IE5ldyBtYWNyby4KKwkoUHJvbG9ndWUgc3luY2ggbGluZSwgJXVuaW9uIHN5bmNoIGxpbmUsIFBvc3Rwcm9sb2d1ZSBzeW5jaCBsaW5lKQorCShBY3Rpb24gc3luY2ggbGluZSwgRXBpbG9ndWUgc3luY2ggbGluZSk6IE5ldyB0ZXN0cy4KKwkqIHNyYy9yZWFkZXIuYyAocGFyc2VfdW5pb25fZGVjbCk6IERlZmluZSB0aGUgbXVzY2xlIHN0eXBlX2xpbmUuCisJKiBkYXRhL2Jpc29uLnNpbXBsZSwgZGF0YS9iaXNvbi5jKys6IFVzZSBpdC4KKworMjAwMi0wMy0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKCVub25hc3NvYyBhbmQgZW9mLCBVbnJlc29sdmVkIFNSIENvbmZsaWN0cykKKwkoU29sdmVkIFNSIENvbmZsaWN0cywgJWV4cGVjdCBub3QgZW5vdWdoLCAlZXhwZWN0IHJpZ2h0KQorCSglZXhwZWN0IHRvbyBtdWNoKTogTW92ZSB0by4uLgorCSogdGVzdHMvY29uZmxpY3RzLmF0OiB0aGlzIG5ldyBmaWxlLgorCisyMDAyLTAzLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9tNHN1Z2FyL200c3VnYXIubTQ6IFVwZGF0ZSBmcm9tIENWUyBBdXRvY29uZi4KKwkqIGRhdGEvYmlzb24uc2ltcGxlLCBkYXRhL2Jpc29uLmMrKzogSGFuZGxlIHRoZSBgI2RlZmluZScgcGFydCwgc28KKwl0aGF0IHdlIGNhbiBtb3ZlIHRvIGVudW1zIGZvciBpbnN0YW5jZS4KKwkqIHNyYy9vdXRwdXQuYyAodG9rZW5fZGVmaW5pdGlvbnNfb3V0cHV0KTogT3V0cHV0IGEgbGlzdCBvZgorCWB0b2tlbi1uYW1lLCB0b2tlbi1udW1iZXInIGluc3RlYWQgb2YgdGhlICNkZWZpbmUuCisJKG91dHB1dF9za2VsZXRvbik6IE5hbWUgdGhpcyBsaXN0IGBiNF90b2tlbnMnLCBub3QgYGI0X3Rva2VuZGVmcycuCisKKzIwMDItMDMtMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJVXNlIEdldHRleHQgMC4xMS4xLgorCisyMDAyLTAzLTA5ICBSb2JlcnQgQW5pc2tvICA8cm9iZXJ0QGxyZGUuZXBpdGEuZnI+CisKKwkqIGRhdGEvYmlzb24uYysrOiBNYWtlIHRoZSB1c2VyIGFibGUgdG8gYWRkIG1lbWJlcnMgdG8gdGhlIGdlbmVyYXRlZAorCXBhcnNlciBieSBzdWJjbGFzc2luZy4KKworMjAwMi0wMy0wNSAgUm9iZXJ0IEFuaXNrbyAgPHJvYmVydEBscmRlLmVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRfYWRkaXRpb25uYWxfY29kZSk6IGBjJyBzaG91bGQgYmUgYW4gaW50ZWdlciwgbm90CisJYSBjaGFyYWN0ZXIuCisJUmVwb3J0ZWQgYnkgTmljb2xhcyBUaXNzZXJhbmQgYW5kIE5pY29sYXMgQnVycnVzLgorCisyMDAyLTAzLTA0ICBSb2JlcnQgQW5pc2tvICA8cm9iZXJ0QGxyZGUuZXBpdGEuZnI+CisKKwkqIHNyYy9yZWFkZXIuYzogV2FybiBhYm91dCBsYWNraW5nIHNlbWktY29sb25zLCBkbyBub3QgY29tcGxhaW4uCisKKzIwMDItMDMtMDQgIFJvYmVydCBBbmlza28gIDxyb2JlcnRAbHJkZS5lcGl0YS5mcj4KKworCSogZGF0YS9iaXNvbi5jKys6IFJlbW92ZSBhIGRlYnVnIGxpbmUuCisKKzIwMDItMDMtMDQgIFJvYmVydCBBbmlza28gIDxyb2JlcnRAbHJkZS5lcGl0YS5mcj4KKworCSogZGF0YS9iaXNvbi5jKys6IFVubWVyZ2UgdmFsdWUgYXMgeXlsdmFsIGFuZCB2YWx1ZSBhcyB5eXZhbC4gIFVubWVyZ2UKKwlsb2NhdGlvbiBhcyB5eWxsb2MgYW5kIGxvY2F0aW9uIGFzIHl5bG9jLiAgVXNlIFlZTExPQ19ERUZBVUxULCBhbmQKKwlwcm92aWRlIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KKworMjAwMi0wMy0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHRlc3RzL2lucHV0LmF0IChJbnZhbGlkICRuLCBJbnZhbGlkIEBuKTogQWRkIHRoZSBlbmRpbmcgYDsnLgorCSogdGVzdHMvb3V0cHV0LmF0IChBVF9DSEVDS19PVVRQVVQpOiBMaWtld2lzZS4KKwkqIHRlc3RzL2hlYWRlcnMuYXQgKEFUX1RFU1RfQ1BQX0dVQVJEX0gpOiBEaXR0by4KKwkqIHRlc3RzL3NlbWFudGljLmF0IChQYXJzaW5nIEd1YXJkcyk6IFNpbWlsYXJseS4KKwkqIHNyYy9yZWFkZXIuYXQgKHJlYWRncmFtKTogQ29tcGxhaW4gaWYgdGhlIGxhc3QgcnVsZSBpcyBub3QgZW5kZWQKKwl3aXRoIGEgc2VtaS1jb2xvbi4KKworMjAwMi0wMy0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy93YXJzaGFsbC5oLCBzcmMvd2Fyc2hhbGwuYyAoYml0bWF0cml4X3ByaW50KTogTW92ZSB0by4uLgorCSogc3JjL2Nsb3N1cmUuYzogaGVyZS4KKwkoc2V0X2ZpcnN0cyk6IFVzZSBiaXRzZXR2X3JlZmxleGl2ZV90cmFuc2l0aXZlX2Nsb3N1cmUgaW5zdGVhZCBvZgorCVJUQy4KKwkqIHNyYy93YXJzaGFsbC5oLCBzcmMvd2Fyc2hhbGwuYzogUmVtb3ZlLgorCSogdGVzdHMvc2V0cy5hdCAoQnJva2VuIENsb3N1cmUpOiBBZGp1c3QuCisKKzIwMDItMDMtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9za2VsZXRvbik6IHRlbXBkaXIgaXMgY29uc3QuCisJYnl0ZXNfcmVhZCBpcyB1bnVzZWQuCisKKzIwMDItMDMtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBsaWIvYmJpdHNldC5oLCBsaWIvYml0c2V0LmMsIGxpYi9iaXRzZXQuaCwgbGliL2JpdHNldHYuYywKKwkqIGxpYi9iaXRzZXR2LmgsIGxpYi9lYml0c2V0LmMsIGxpYi9sYml0c2V0LmMsIGxpYi9zYml0c2V0LmM6CisJVXBkYXRlLgorCUZyb20gTWljaGFlbCBIYXllcy4KKworMjAwMi0wMy0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9jbG9zdXJlLmMgKGNsb3N1cmUpOiBgcicgaXMgdW51c2VkLgorCisyMDAyLTAzLTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogdGVzdHMvc2V0cy5hdCAoQnJva2VuIENsb3N1cmUpOiBBZGQgdGhlIGVuZGluZyBgOycuCisJKiBzcmMvcmVhZGVyLmF0IChyZWFkZ3JhbSk6IENvbXBsYWluIGlmIGEgcnVsZSBpcyBub3QgZW5kZWQgd2l0aCBhCisJc2VtaS1jb2xvbi4KKworMjAwMi0wMy0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9jb25mbGljdHMuYyAoc2V0X2NvbmZsaWN0cyk6IFVzZSBiaXRzZXRfZGlzam9pbnRfcC4KKwkoY291bnRfc3JfY29uZmxpY3RzKTogVXNlIGJpdHNldF9jb3VudC4KKwkqIHNyYy9yZWR1Y2UuYyAoaW5hY2Nlc3NhYmxlX3N5bWJvbHMpOiBEaXR0by4KKwkoYml0c19zaXplKTogUmVtb3ZlLgorCSogc3JjL3dhcnNoYWxsLmgsIHNyYy93YXJzaGFsbC5jOiBDb252ZXJ0IHRvIGJpdHNldHYuCisKKzIwMDItMDMtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvY2xvc3VyZS5jLCBzcmMvY29uZmxpY3RzLmMsIHNyYy9sYWxyLmMsIHNyYy9wcmludC5jLAorCSogc3JjL3JlZHVjZS5jOiBSZW1vdmUgdGhlIGBiaXRzZXRfemVybydzIGZvbGxvd2luZyB0aGUKKwlgYml0c2V0X2NyZWF0ZSdzLCBhcyBub3cgaXQgaXMgcGVyZm9ybWVkIGJ5IHRoZSBsYXR0ZXIuCisKKzIwMDItMDMtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBsaWIvYml0c2V0LmMsIGxpYi9iaXRzZXQuaCwgbGliL2JpdHNldHYuYywgbGliL2JpdHNldHYuaCwKKwkqIGxpYi9lYml0c2V0LmMsIGxpYi9lYml0c2V0LmgsIGxpYi9sYml0c2V0LmMsIGxpYi9sYml0c2V0LmgsCisJKiBsaWIvc2JpdHNldC5jLCBsaWIvc2JpdHNldC5oLCBsaWIvYmJpdHNldC5oOiBVcGRhdGUgZnJvbSB0aGUKKwlsYXRlc3Qgc291cmNlcyBmcm9tIE1pY2hhZWwuCisKKzIwMDItMDMtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dCk6IERvbid0IGZyZWUgdGhlIGdyYW1tYXIuCisJKiBzcmMvcmVhZGVyLmMgKGdyYW1tYXJfZnJlZSk6IE5ldy4KKwkqIHNyYy9tYWluLmMgKG1haW4pOiBDYWxsIGl0IGFuZCBkb24ndCBmcmVlIHN5bXRhYiBoZXJlLgorCisyMDAyLTAzLTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2xleC5jIChwYXJzZV9wZXJjZW50X3Rva2VuKTogQmUgc3VyZSB0byAwLWVuZCB0b2tlbl9idWZmZXIKKwliZWZvcmUgcmV0dXJuaW5nLgorCVJlcG9ydGVkIGJ5IEJlbm9pdCBQZXJyb3QuCisKKzIwMDItMDMtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJVXNlIGJpdHNldCBvcGVyYXRpb25zIHdoZW4gcG9zc2libGUsIG5vdCBsb29wcyBvdmVyIGJpdHMuCisKKwkqIHNyYy9jb25mbGljdHMuYyAoc2V0X2NvbmZsaWN0cywgY291bnRfc3JfY29uZmxpY3RzKTogVXNlCisJYml0c2V0X29yLgorCSogc3JjL3ByaW50LmMgKHByaW50X3JlZHVjdGlvbnMpOiBVc2UgYml0c2V0X2FuZCwgYml0c2V0X2FuZG4uCisJKiBzcmMvcmVkdWNlLmMgKHVzZWxlc3Nfbm9udGVybWluYWxzKTogRm9ybWF0dGluZyBjaGFuZ2VzLgorCSogc3JjL3dhcnNoYWxsLmMgKFRDKTogVXNlIGJpdHNldF9vci4KKworMjAwMi0wMy0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9sYWxyLmgsIHNyYy9sYWxyLmMgKHRva2Vuc2V0c2l6ZSk6IFJlbW92ZSwgdW51c2VkLgorCSogc3JjL3N5c3RlbS5oIChCSVRTX1BFUl9XT1JELCBXT1JEU0laRSwgU0VUQklULCBSRVNFVEJJVCwgQklUSVNTRVQpOgorCURpdHRvLgorCisyMDAyLTAzLTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2xhbHIuYyAoRik6IE5vdyBhIGJpdHNldCouCisJQWRqdXN0IGFsbCBkZXBlbmRlbmNpZXMuCisKKzIwMDItMDMtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvY29uZmxpY3RzLmMgKHNoaWZ0c2V0LCBsb29rYWhlYWRzZXQpOiBOb3cgYml0c2V0LgorCUFkanVzdCBhbGwgZGVwZW5kZW5jaWVzLgorCisyMDAyLTAzLTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL0wwLmMsIHNyYy9MUjAuaCAobnN0YXRlcyk6IEJlIHNpemVfdC4KKwlBZGp1c3QgY29tcGFyaXNvbnMgKHNpZ25lZCB2cyB1bnNpZ25lZCkuCisJKiBzcmMvY29uZmxpY3MuYywgc3JjL2xhbHIuYywgc3JjL2xhbHIuaCwgc3JjL291dHB1dC5jIChMQSk6IE5vdyBhCisJYml0c2V0Ki4KKwlBZGp1c3QgYWxsIGRlcGVuZGVuY2llcy4KKworMjAwMi0wMy0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9jbG9zdXJlLmMgKGZpcnN0cyk6IE5vdywgYWxzbyBhIGJpdHNldC4KKwlBZGp1c3QgYWxsIGRlcGVuZGVuY2llcy4KKwkodmFyc2V0c2l6ZSk6IFJlbW92ZSwgbm93IHVudXNlZC4KKwkqIHNyYy93YXJzaGFsbC5oLCBzcmMvd2Fyc2hhbGwuYzogTm93IHdvcmsgb24gYXJyYXlzIG9mIGJpdHNldHMuCisKKzIwMDItMDMtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcHJpbnQuYzogQ29udmVydCB0byB1c2UgYml0c2V0LmgsIG5vdCBoYW5kIGNvZGVkIGl0ZXJhdGlvbnMKKwlvdmVyIGludHMuCisKKzIwMDItMDMtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcmVkdWNlLmM6IENvbnZlcnQgdG8gdXNlIGJpdHNldC5oLCBub3QgaGFuZCBjb2RlZCBCU2V0LgorCisyMDAyLTAzLTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2Nsb3N1cmUuYyAocnVsZXNldCk6IEJlIGEgYml0c2V0LgorCShydWxlc2V0c2l6ZSk6IFJlbW92ZS4KKworMjAwMi0wMy0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGxpYi9iaXRzZXQtaW50LmgsIGxpYi9iaXRzZXQuYywgbGliL2JpdHNldC5oLCBsaWIvYml0c2V0di5jLAorCSogbGliL2JpdHNldHYuaCwgbGliL2ViaXRzZXQuYywgbGliL2ViaXRzZXQuaCwgbGliL2xiaXRzZXQuYywKKwkqIGxpYi9sYml0c2V0LmgsIGxpYi9zYml0c2V0LmMsIGxpYi9zYml0c2V0Lmg6IE5ldy4KKwkqIHNyYy9jbG9zdXJlLmMgKGZkZXJpdmVzKTogQmUgYW4gYXJyYXkgb2YgYml0c2V0cy4KKworMjAwMi0wMi0yOCAgUm9iZXJ0IEFuaXNrbyAgPHJvYmVydEBscmRlLmVwaXRhLmZyPgorCisJKiBkYXRhL2Jpc29uLmMrKzogTWVyZ2UgdGhlIHR3byBnZW5lcmF0ZWQgaGVhZGVycy4gIEluc2VydCBhIGNvcHlyaWdodAorCW5vdGljZSBpbiBlYWNoIG91dHB1dCBmaWxlLgorCisyMDAyLTAyLTI4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9iaXNvbi5jKys6IENvcHkgdGhlIHByb2xvZ3VlIG9mIGJpc29uLnNpbXBsZSB0byBmZXRjaAorCXVzZWZ1bCBNNCBkZWZpbml0aW9ucywgc3VjaCBhcyBiNF9oZWFkZXJfZ3VhcmQuCisKKzIwMDItMDItMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvZ2V0YXJncy5jICh2ZXJzaW9uKTogR2l2ZSB0aGUgbmFtZSBvZiB0aGUgYXV0aG9ycywgYW5kIHVzZSBhCisJdHJhbnNsYXRvciBmcmllbmRseSBzY2hlbWUgZm9yIHRoZSBiZ3IKKwljb3B5cmlnaHQgbm90aWNlLgorCisyMDAyLTAyLTI1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL291dHB1dC5jIChoZWFkZXJfb3V0cHV0KTogUmVtb3ZlLCBub3cgaGFuZGxlZCBjb21wbGV0ZWx5IHZpYQorCU00LgorCisyMDAyLTAyLTI1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogbTQvbTQubTQ6IE5ldywgZnJvbSBDVlMgQXV0b2NvbmYuCisJKiBjb25maWd1cmUuaW46IEludm9rZSBpdC4KKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3NrZWxldG9uKTogVXNlIGl0cyByZXN1bHQgaW5zdGVhZCBvZiB0aGUKKwloYXJkIGNvZGVkIG5hbWUuCisKKzIwMDItMDItMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBsaWIvdGVtcG5hbWUuYywgbGliL21rc3RlbXAuYywgbTQvbWtzdGVtcC5tNDogTmV3LCBzdG9sZW4gZnJvbQorCUZpbGV1dGlscyA0LjEuNS4KKwkqIGNvbmZpZ3VyZS5pbjogSW52b2tlIFVUSUxTX0ZVTkNfTUtTVEVNUC4KKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3NrZWxldG9uKTogVXNlIG1rc3RlbXAgdG8gY3JlYXRlIGEgcmVhbAorCXRlbXBvcmFyeSBmaWxlLgorCU1vdmUgdGhlIGZpbGxpbmcgb2YgYHNrZWxldG9uJyBhbmQgaXRzIG11c2NsZSB0by4uLgorCShwcmVwYXJlKTogaGVyZS4KKwkob3V0cHV0KTogTW92ZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgcHJvbG9ndWUgbXVzY2xlIHRvLi4uCisJKHByZXBhcmUpOiBoZXJlLgorCSogc3JjL3N5c3RlbS5oIChERUZBVUxUX1RNUERJUik6IE5ldy4KKworMjAwMi0wMi0xNCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwlSZW1vdmUgdGhlIHN1cHBvcnQgZm9yIEMrKyBuYW1lc3BhY2UgY2xlYW5saW5lc3M7IGl0IHdhcworCWNhdXNpbmcgbW9yZSBwcm9ibGVtcyB0aGFuIGl0IHdhcyBjdXJpbmcsIHNpbmNlIGl0IGRpZG4ndCB3b3JrCisJcHJvcGVybHkgb24gc29tZSBub25zdGFuZGFyZCBDKysgY29tcGlsZXJzLiAgVGhpcyBjYW4gd2FpdAorCWZvciBhIHByb3BlciBDKysgcGFyc2VyLgorCisJKiBORVdTOiBEb2N1bWVudCB0aGlzLgorCSogZG9jL2Jpc29uLnRleGluZm8gKEJpc29uIFBhcnNlciwgRGVidWdnaW5nKTogUmVtb3ZlIHNwZWNpYWwgbWVudGlvbgorCW9mIEMrKywgYXMgaXQncyB0cmVhdGVkIGxpa2UgQyBub3cuCisJKiBzcmMvYmlzb24uc2ltcGxlIChZWVNURCk6IFJlbW92ZS4KKwkoWVlTSVpFX1QsIFlZRlBSSU5URiwgWVlQQVJTRV9QQVJBTV9BUkcsIFlZUEFSU0VfUEFSQU1fREVDTCk6CisJVHJlYXQgQysrIGp1c3QgbGlrZSBTdGFuZGFyZCBDIGluc3RlYWQgb2YgdHJ5aW5nIHRvIHN1cHBvcnQKKwluYW1lc3BhY2UgY2xlYW5saW5lc3MuCisKKzIwMDItMDItMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChlbHNlKTogQWRqdXN0IHRvIEFuZHJlYXMnIGNoYW5nZS4KKworMjAwMi0wMi0xNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGxpYi9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IFNoaXAgc3Rybmxlbi5jLgorCisyMDAyLTAyLTEzICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgorCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9ydWxlX2RhdGEpOiBEb24ndCBvdXRwdXQgTlVMTCwgaXQgbWlnaHQKKwlub3QgYmUgZGVmaW5lZCB5ZXQuCisKKzIwMDItMDItMTEgIFJvYmVydCBBbmlza28gIDxyb2JlcnRAbHJkZS5lcGl0YS5mcj4KKworCSogZGF0YS9iaXNvbi5jKysgKFlZREVCVUcsIFlZRVJST1JfVkVSQk9TRSk6IEFmdGVyIHRoZSBwcm9sb2d1ZS4KKwkoQ29weXJpZ2h0IG5vdGljZSk6IFVwZGF0ZS4KKworMjAwMi0wMi0xMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKCVub25hc3NvYyBhbmQgZW9mKTogRG9uJ3QgaW5jbHVkZQorCW5vbnBvcnRhYmxlIGhlYWRlcnMuCisKKzIwMDItMDItMDggIFJvYmVydCBBbmlza28gIDxyb2JlcnRAbHJkZS5lcGl0YS5mcj4KKworCSogZGF0YS9iaXNvbi5jKys6IENvcnJlY3QgZXJyb3IgcmVjb3ZlcnkuICBNYWtlIHRoZSB1c2VyIGFibGUgdG8KKwlpbml0aWFsaXplIHRoZSBzdGFydGluZyBsb2NhdGlvbi4KKworMjAwMi0wMi0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHRlc3RzL2lucHV0LmF0OiBOZXcuCisKKzIwMDItMDItMDcgIFJvYmVydCBBbmlza28gIDxyb2JlcnRAbHJkZS5lcGl0YS5mcj4KKworCSogZGF0YS9iaXNvbi5jKys6IFJlcGxhY2Ugc29tZSBkaXJlY3QgbTQgZXhwYW5zaW9ucyBieSBjb25zdGFudHMuICBCZQorCW1vcmUgY29uc2lzdGVudCB3aGVuIG5hbWluZyBtZXRob2RzIGFuZCB2YXJpYWJsZXMuICBQdXQgcHJlcHJvY2Vzc29yCisJZGlyZWN0aXZlcyBhcm91bmQgdGFibGVzIG9ubHkgbmVlZGVkIGZvciBkZWJ1Z2dpbmcuCisKKzIwMDItMDItMDcgIFJvYmVydCBBbmlza28gIDxyb2JlcnRAbHJkZS5lcGl0YS5mcj4KKworCSogZGF0YS9iaXNvbi5jKysgKHl5OjpiNF9uYW1lOjpwcmludF8pOiBOZXcgbWV0aG9kLCByZXBsYWNlcyB5eXByaW50IGluCisJQysrIHBhcnNlcnMuCisJKHl5OjpiNF9uYW1lOjpwYXJzZSk6IFVzZSBwcmludF8uCisKKzIwMDItMDItMDcgIFJvYmVydCBBbmlza28gIDxyb2JlcnRAbHJkZS5lcGl0YS5mcj4KKworCSogZGF0YS9iaXNvbi5jKysgKHl5OjpiNF9uYW1lOjpwYXJzZSk6IEVycm9yIHJlY292ZXJ5IGlzIGJhY2suCisKKzIwMDItMDItMDcgIFJvYmVydCBBbmlza28gIDxyb2JlcnRAbHJkZS5lcGl0YS5mcj4KKworCSogZGF0YS9iaXNvbi5jKysgKHl5OjpiNF9uYW1lOjplcnJvcl8pOiBOZXcgbWV0aG9kLCByZXBsYWNlcyB5eWVycm9yIGluCisJQysrIHBhcnNlcnMuCisJKHl5OjpiNF9uYW1lOjpwYXJzZSk6IEJ1aWxkIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMsIGFuZCB1c2UgZXJyb3JfLgorCisyMDAyLTAyLTA2ICBSb2JlcnQgQW5pc2tvICA8cm9iZXJ0QGxyZGUuZXBpdGEuZnI+CisKKwkqIGRhdGEvYmlzb24uYysrOiBGaXggbTQgcXVvdGluZyBpbiBjb21tZW50cy4KKworMjAwMi0wMi0wNiAgUm9iZXJ0IEFuaXNrbyAgPHJvYmVydEBscmRlLmVwaXRhLmZyPgorCisJKiBkYXRhL2Jpc29uLmMrKzogQWRqdXN0IHRoZSBwYXJzZXIgY29kZS4gIEZpeCBzb21lIG11c2NsZXMgdGhhdCB3ZXJlCisJbm90IGV4cGFuZGVkIGJ5IG00LgorCisyMDAyLTAyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZGF0YS9iaXNvbi5jKys6IEFkanVzdCB0byB0aGUgTTQgYmFjayBlbmQuCisJTW9yZSBpcyBjZXJ0YWlubHkgbmVlZGVkLgorCisyMDAyLTAyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCUdpdmUgYSB0cnkgdG8gTTQgYXMgYSBiYWNrIGVuZC4KKworCSogbGliL3JlYWRwaXBlLmM6IE5ldywgZnJvbSB3ZGlmZi4KKwkqIHNyYy9NYWtlZmlsZS5hbSAoREVGUyk6IERlZmluZSBQS0dEQVRBRElSLCBub3QgQklTT05fU0lNUExFIGFuZAorCUJJU09OX0hBSVJZLgorCSogc3JjL3N5c3RlbS5oIChCSVNPTl9IQUlSWSwgQklTT05fU0lNUExFKTogUmVtb3ZlIHRoZSBET1MgYW5kIFZNUworCXNwZWNpZmljIHZhbHVlcy4gIE5vdyBpdCBpcyBtNCB0aGF0IHBlcmZvcm1zIHRoZSBsb29rdXAuCisJKiBzcmMvcGFyc2Utc2tlbC55OiBSZW1vdmUuCisJKiBzcmMvbXVzY2xlX3RhYi5jLCBzcmMvbXVzY2xlX3RhYi5oIChtdXNjbGVzX200X291dHB1dCk6IE5ldy4KKwkqIHNyYy9vdXRwdXQuYyAoYWN0aW9uc19vdXRwdXQsIGd1YXJkc19vdXRwdXQpCisJKHRva2VuX2RlZmluaXRpb25zX291dHB1dCk6IE5vIGxvbmdlciBrZWVwcyB0cmFjayBvZiB0aGUgb3V0cHV0CisJbGluZSBudW1iZXIsIGhlbmNlIHJlbW92ZSB0aGUgc2Vjb25kIGFyZ3VtZW50LgorCShndWFyZHNfb3V0cHV0KTogQ2hlY2sgYWdhaW5zdCB0aGUgZ3VhcmQgbWVtYmVyIG9mIGEgcnVsZSwgbm90IHRoZQorCWFjdGlvbiBtZW1iZXIuCisJQWRqdXN0IGNhbGxlcnMuCisJKG91dHB1dF9za2VsZXRvbik6IERvbid0IGxvb2sgZm9yIHRoZSBza2VsZXRvbiBsb2NhdGlvbiwgbGV0IG00IGRvCisJdGhhdC4KKwlDcmVhdGUgYC90bXAvbXVzY2xlcy5tNCcuICBUaGlzIGlzIHRlbXBvcmFyeSwgYSBwcm9wZXIgdGVtcG9yYXJ5CisJZmlsZSB3aWxsIGJlIHVzZWQuCisJSW52b2tlIGBtNCcgb24gbTRzdWdhci5tNCwgbXVzY2xlcy5tNCwgYW5kIHRoZSBza2VsZXRvbi4KKwkocHJlcGFyZSk6IEdpdmVuIHRoYXQgZm9yIHRoZSB0aW1lIGJlaW5nIGNoYW5nZXN5bnRheCBpcyBub3QKKwl1c2FibGUgaW4gTTQsIHJlbmFtZSB0aGUgbXVzY2xlcyB1c2luZyBgLScgdG8gYF8nLgorCURlZmluZSBgZGVmaW5lc19mbGFnJywgYG91dHB1dF9wYXJzZXJfbmFtZScgYW5kIGBvdXRwdXRfaGVhZGVyX25hbWUnLgorCSogc3JjL291dHB1dC5oIChhY3Rpb25zX291dHB1dCwgZ3VhcmRzX291dHB1dCkKKwkodG9rZW5fZGVmaW5pdGlvbnNfb3V0cHV0KTogQWRqdXN0IHByb3RvdHlwZXMuCisJKiBzcmMvc2Nhbi1za2VsLmw6IEluc3RlYWQgb2Ygc2Nhbm5pbmcgdGhlIHNrZWxldG9ucywgaXQgbm93CisJcHJvY2Vzc2VzIHRoZSBvdXRwdXQgb2YgbTQ6IGBfX29saW5lX18nIGFuZCBgI291dHB1dCcuCisJKiBkYXRhL2Jpc29uLnNpbXBsZTogQWRqdXN0IHRvIGJlIHVzZWQgYnkgTTQoc3VnYXIpLgorCSogdGVzdHMvTWFrZWZpbGUuYW06IFVzZSBjaGVja19TQ1JJUFRTIHRvIG1ha2Ugc3VyZSBgYmlzb24nIGlzIHVwCisJdG8gZGF0ZS4KKwkqIHRlc3RzL2Jpc29uLmluOiBVc2UgdGhlIHNlY3JldGUgZW52dmFyIGBCSVNPTl9QS0dEQVRBRElSJworCWluc3RlYWQgb2YgdGhlIGRlYWQgYEJJU09OX1NJTVBMRScgYW5kIGBCSVNPTl9IQUlSWScuCisJKiBkYXRhL200c3VnYXIvbTRzdWdhci5tNCwgZGF0YS9tNHN1Z2FyL3ZlcnNpb24ubTQ6IE5ldywKKwlzaGFtZWxlc3NseSBzdG9sZW4gZnJvbSBDVlMgQXV0b2NvbmYuCisKKzIwMDItMDItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBsaWIvaGFzaC5jLCBsaWIvaGFzaC5oOiBSZXBsYWNlIHdpdGggRmlsZXV0aWxzIDQuMSdzIHZlcnNpb24uCisJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciB0aGUgZGVjbGFyYXRpb25zIG9mIGZyZWUgYW5kIG1hbGxvYy4KKwkqIHNyYy9tdXNjbGVfdGFiLmM6IEFkanVzdC4KKworMjAwMi0wMi0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9tdXNjbGVfdGFiLmMgKG11c2NsZV9pbml0KTogRG9uJ3QgZGVmYXVsdCB0byBOVUxMIG11c2NsZQorCXdoaWNoIGhhdmUgbm8gdmFsdWVzLgorCisyMDAyLTAyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2Jpc29uLnNpbXBsZSwgc3JjL2Jpc29uLmhhaXJ5LCBzcmMvYmlzb24uYysrOiBNb3ZlIHRvLi4uCisJKiBkYXRhLzogaGVyZS4KKworMjAwMi0wMS0yOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGUgKFlZU0laRV9UKTogRG8gbm90IGRlZmluZSBtZXJlbHkgYmVjYXVzZQorCVlZU1RBQ0tfVVNFX0FMTE9DQSBpcyBub256ZXJvIG9yIGFsbG9jYSBvciBfQUxMT0NBX0ggYXJlIGRlZmluZWQuCisJT24gc29tZSBwbGF0Zm9ybXMsIDxhbGxvY2EuaD4gZG9lcyBub3QgZGVjbGFyZSBZWVNURCAoc2l6ZV90KS4KKworMjAwMi0wMS0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlGaXggYCVub25hc3NvYyBhbmQgZW9mJy4KKworCSogc3JjL3N0YXRlLmMgKGVycnNfZHVwKTogQWFhYWghICBUaGUgZmFpbHVyZSB3YXMgZHVlIHRvIGJ5dGVzCisJd2hpY2ggd2VyZSBub3QgcHJvcGVybHkgY29waWVkISAgUmVwbGFjZQorCW1lbWNweSAocmVzLT5lcnJzLCBzcmMtPmVycnMsIHNyYy0+bmVycnMpOworCXdpdGgKKwltZW1jcHkgKHJlcy0+ZXJycywgc3JjLT5lcnJzLCBzcmMtPm5lcnJzICogc2l6ZW9mIChzcmMtPmVycnNbMF0pKTsKKwkhISEKKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKCVub25hc3NvYyBhbmQgZW9mKTogQWRqdXN0IHRvIG5ld2VzdAorCUF1dG90ZXN0OiBgLicgaXMgbm90IGluIHRoZSBQQVRILgorCisyMDAyLTAxLTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogdGVzdHMvc2V0cy5hdCAoQVRfRVhUUkFDVF9TRVRTKTogTmV3LgorCShOdWxsYWJsZSk6IFVzZSBpdC4KKwkoRmlyc3RzKTogTmV3LgorCisyMDAyLTAxLTI2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogdGVzdHMvYWN0aW9ucy5hdCwgdGVzdHMvY2FsYy5hdCwgdGVzdHMvaGVhZGVycy5hdCwKKwkqIHRlc3RzL3RvcnR1cmUuYXQ6IEFkanVzdCB0byB0aGUgbmV3ZXN0IEF1dG90ZXN0IHdoaWNoIG5vIGxvbmdlcgorCWZvcmNlcyBgLicgaW4gdGhlIFBBVEguCisKKzIwMDItMDEtMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0ICglbm9uYXNzb2MgYW5kIGVvZik6IE5ldy4KKwlTdWdnZXN0ZWQgYnkgUm9iZXJ0IEFuaXNrby4KKworMjAwMi0wMS0yNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlCaXNvbiBkdW1wcyBjb3JlIHdoZW4gdHJ5aW5nIHRvIGNvbXBsYWluIGFib3V0IGJyb2tlbiBpbnB1dCBmaWxlcy4KKwlSZXBvcnRlZCBieSBDcmlzIHZhbiBQZWx0LgorCisJKiBzcmMvbGV4LmMgKHBhcnNlX3BlcmNlbnRfdG9rZW4pOiBCZSBzdXJlIHRvIHNldCB0b2tlbl9idWZmZXIuCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChJbnZhbGlkIGlucHV0OiAxLCBJbnZhbGlkIGlucHV0OiAyKTogTWVyZ2UKKwlpbnRvLi4uCisJKEludmFsaWQgaW5wdXRzKTogU3RyZW5ndGhlbjogZXhlcmNpc2UgcGFyc2VfcGVyY2VudF90b2tlbi4KKworMjAwMi0wMS0yNCAgUm9iZXJ0IEFuaXNrbyAgPHJvYmVydC5hbmlza29AZXBpdGEuZnI+CisKKwkqIHNyYy9NYWtlZmlsZS5hbTogQWRkIGJpc29uLmMrKy4KKwkqIHNyYy9iaXNvbi5jKys6IE5ldyBza2VsZXRvbi4KKworMjAwMi0wMS0yMSAgUGFvbG8gQm9uemluaSA8Ym9uemluaUBnbnUub3JnPgorCisJKiBwby9pdC5wbzogTmV3LgorCisyMDAyLTAxLTIxICBLZWVzIFplZWxlbmJlcmcgIDxremxnQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogc3JjL2ZpbGVzLmMgKHNrZWxldG9uX2ZpbmQpIFtNU0RPU106IEZpeCBjcCBkZWZpbml0aW9uLgorCisyMDAyLTAxLTIwICBNYXJjIEF1dHJldCAgPG1hcmNAZ251Lm9yZz4KKworCSogc3JjL2ZpbGVzLmMgKGNvbXB1dGVfb3V0cHV0X2ZpbGVfbmFtZXMpOiBGaXgKKworMjAwMi0wMS0yMCAgTWFyYyBBdXRyZXQgIDxtYXJjQGdudS5vcmc+CisKKwkqIHRlc3RzL291dHB1dC5hdDogTmV3IHRlc3QuCisJKiBzcmMvZmlsZXMuYyAoY29tcHV0ZV9iYXNlX25hbWVzKTogRG9uJ3QgbWFwIGV4dGVuc2lvbnMgd2hlbgorCXRoZSBZQUNDIGZsYWcgaXMgc2V0LCB1c2UgZGVmYXVsdHMuCisJUmVwb3J0ZWQgYnkgRXZnZW55IFN0YW1idWxjaGlrLgorCisyMDAyLTAxLTIwICBNYXJjIEF1dHJldCAgPG1hcmNAZ251Lm9yZz4KKworCSogc3JjL3N5c3RlbS5oOiBOZWVkIHRvIGRlZmluZSBfX2F0dHJpYnV0ZV9fIGF3YXkgZm9yIG5vbi1HQ0MKKwljb21waWxlcnMgYXMgd2VsbCAoaS5lLiwgdGhlIHZlbmRvciBDIGNvbXBpbGVyKS4KKwlTdWdnZXN0ZWQgYnkgQWxiZXJ0IENoaW4tQS1Zb3VuZy4KKworMjAwMi0wMS0xMSAgVGltIFZhbiBIb2xkZXIgIDx0aW0udmFuLmhvbGRlckBwYW5kb3JhLmJlPgorCisJKiBsaWIvaGFzaC5oLCBsaWIvaGFzaC5jOiBSZW5hbWVkIF9fUCB0byBQQVJBTVMgYW5kIHVzZWQgdGhlCisJY2Fub25pY2FsIGRlZmluaXRpb24uCisJKiBzcmMvc3lzdGVtLmg6IFVzZSB0aGUgY2Fub25pY2FsIGRlZmluaXRpb24gZm9yIFBBUkFNUyAoYXZvaWRzCisJYSBjb25mbGljdCB3aXRoIHRoZSBtYWNybyBmcm9tIGxpYi9oYXNoLmgpLgorCisyMDAyLTAxLTExICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogY29uZmlndXJlLmluOiBVc2UgQUNfRlVOQ19TVFJOTEVOLgorCUZpeGVzIHRoZSBmYWlsdXJlcyBvYnNlcnZlZCBvbiBBSVggNC4zIGJ5IEguTWVyaWpuIEJyYW5kLgorCisyMDAyLTAxLTA5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2ZpbGVzLmMsIHNyYy9maWxlcy5oIChvdXRwdXRfaW5maXgpOiBOZXcuCisJKHRhYl9leHRlbnNpb24pOiBSZW1vdmUuCisJKGNvbXB1dGVfYmFzZV9uYW1lcyk6IENvbXB1dGUgdGhlIGZvcm1lciwgZHJvcCB0aGUgbGF0dGVyLgorCSogc3JjL291dHB1dC5jIChwcmVwYXJlKTogSW5zZXJ0IHRoZSBtdXNjbGVzIGBvdXRwdXQtaW5maXgnLCBhbmQKKwlgb3V0cHV0LXN1ZmZpeCcuCisJKiBzcmMvcGFyc2Utc2tlbC55IChzdHJpbmcsIHN0cmluZy4xKTogTmV3LgorCShzZWN0aW9uLmhlYWRlcik6IFVzZSBpdC4KKwkoc2VjdGlvbi55YWNjKTogUmVtb3ZlLgorCShwcmVmaXgpOiBSZW1vdmUgdG9vLgorCSogc3JjL3NjYW4tc2tlbC5sOiBBZGp1c3QuCisJKiBzcmMvYmlzb24uc2ltcGxlLCBzcmMvYmlzb24uaGFpcnk6IEFkanVzdC4KKworMjAwMi0wMS0wOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGNvbmZpZ3VyZS5pbiAoV0VSUk9SX0NGTEFHUyk6IENvbXB1dGUgaXQuCisJKiBzcmMvTWFrZWZpbGUuYW0gKENGTEFHUyk6IFBhc3MgaXQuCisJKiB0ZXN0cy9hdGxvY2FsLmluIChDRkxBR1MpOiBJZGVtLgorCSogc3JjL2ZpbGVzLmM6IEZpeCBhIGZldyB3YXJuaW5ncy4KKwkoZ2V0X2V4dGVuc2lvbl9pbmRleCk6IFJlbW92ZSwgdW51c2VkLgorCisyMDAyLTAxLTA4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2dldGFyZ3MuYyAoQVNfRklMRV9OQU1FKTogTmV3LgorCShnZXRhcmdzKTogVXNlIGl0IHRvIGNvbnZlcnQgRE9TaXNoIGZpbGUgbmFtZXMuCisJKiBzcmMvZmlsZXMuYyAoYmFzZV9uYW1lKTogUmVuYW1lIGFzIGZ1bGxfYmFzZV9uYW1lIHRvIGF2b2lkCisJY2xhc2hlcyB3aXRoIGBiYXNlX25hbWUgKCknLgorCShmaWxlbmFtZV9zcGxpdCk6IE5ldy4KKwkoY29tcHV0ZV9iYXNlX25hbWVzKTogTi10aCByZXdyaXRlLCB1c2luZyBmaWxlbmFtZV9zcGxpdC4KKworMjAwMi0wMS0wOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGxpYi9iYXNlbmFtZS5jLCBsaWIvZGlybmFtZS5oLCBsaWIvZGlybmFtZS5jLCBsaWIvbWVtcmNoci5jOgorCU5ldywgc3RvbGVuIGZyb20gdGhlIEZpbGV1dGlscyA0LjEuCisJKiBsaWIvTWFrZWZpbGUuYW0gKGxpYmJpc29uX2FfU09VUkNFUyk6IEFkanVzdC4KKwkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiBtZW1yY2hyLCBhbmQgb2YgaXRzCisJcHJvdG90eXBlLgorCisyMDAyLTAxLTA3ICBUaW0gVmFuIEhvbGRlciAgPHRpbS52YW4uaG9sZGVyQHBhbmRvcmEuYmU+CisKKwkqIGxpYi9oYXNoLmggKF9fUCk6IEFkZGVkIGRlZmluaXRpb24gZm9yIHRoaXMgbWFjcm8uCisJKiBzcmMvTWFrZWZpbGUuYW06IEFkZCBwYXJzZS1za2VsLmMgYW5kIHNjYW4tc2tlbC5jIHRvCisJQlVJTFRfU09VUkNFUywgdG8gZW5zdXJlIHRoZXkgYXJlIGdlbmVyYXRlZCBmaXJzdC4KKwkqIHNyYy9wYXJzZS1za2VsLnk6IFVzZSBZWUVSUk9SX1ZFUkJPU0UgaW5zdGVhZCBvZgorCSVlcnJvci12ZXJib3NlIHRvIGFsbG93IGJvb3RzdHJhcHBpbmcgd2l0aCBiaXNvbiAxLjMweC4KKworMjAwMi0wMS0wNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9yZWFkZXIuYyAocGFyc2VfYnJhY2VzKTogRG9uJ3QgZmV0Y2ggdGhlIG5leHQgY2hhciwgdGhlCisJY29udmVudGlvbiBpcyB0byBmZXRjaCBvbiBlbnRyeS4KKwkqIHRlc3RzL3RvcnR1cmUuYXQgKEdOVSBDaW0gR3JhbW1hcik6IFJlaW50cm9kdWNlIHRoZWlyIHdlaXJkCisJJ3N3aXRjaCcgd2l0aG91dCBhIGZvbGxvd2luZyBzZW1pY29sb24uCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChicmFjZXMgcGFyc2luZyk6IE5ldy4KKworMjAwMi0wMS0wNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlCaXNvbiBpcyBkZWFkIHdyb25nIGluIGl0cyBSUiBjb25mbGljdCByZXBvcnRzLgorCisJKiB0ZXN0cy90b3J0dXJlLmF0IChHTlUgQ2ltIEdyYW1tYXIpOiBOZXcuCisJKiBzcmMvY29uZmxpY3RzLmMgKGNvdW50X3JyX2NvbmZsaWN0cyk6IEZpeC4KKworMjAwMi0wMS0wNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlDcmVhdGluZyBwYWNrYWdlLm00IGZyb20gY29uZmlndXJlLmFjIGNhdXNlcyB0b28gbWFueSBwcm9ibGVtcy4KKworCSogdGVzdHMvTWFrZWZpbGUuYW0gKHBhY2thZ2UubTQpOiBDcmVhdGUgaXQgYnkgaGFuZCwKKwlBQ19DT05GSUdfVEVTVERJUiBubyBsb25nZXIgZG9lcyBpbiB0aGUgbW9zdCByZWNlbnQgQ1ZTIEF1dG9jb25mLgorCisyMDAyLTAxLTA2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL01ha2VmaWxlLmFtIChiaXNvbl9TT1VSQ0VTKTogQWRkIHBhcnNlLXNrZWwuaCBhbmQKKwlza2VsZXRvbi5oLgorCisyMDAyLTAxLTA0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogZG9jL2Jpc29uLnRleGluZm8gKERlYnVnZ2luZyk6CisJUmVtb3ZlIFlZU1RERVJSOyBpdCdzIG5vIGxvbmdlciBkZWZpbmVkIG9yIHVzZWQuCisJQWxzbywgcy9jc3RkaW8uaC9jc3RkaW8vLgorCisyMDAyLTAxLTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogdGVzdHMvYmlzb24uaW4sIHRlc3RzL2F0bG9jYWwuaW46IEFkanVzdCB0byBDVlMgQXV0b2NvbmYuCisKKzIwMDItMDEtMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcGFyc2Utc2tlbC55IChwcm9jZXNzX3NrZWxldG9uKTogRG9uJ3QgYmluZCB0aGUgcGFyc2VyJ3MKKwl0cmFjaW5nIGNvZGUgdG8gLS10cmFjZSwgd2FpdCBmb3IgYSBiZXR0ZXIgLS10cmFjZSBvcHRpb24sIHdpdGgKKwlhcmdzLgorCisyMDAyLTAxLTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2Jpc29uLnNpbXBsZSAoWVlTVERFUlIpOiBSZW1vdmUsIHJlcGxhY2UgYHN0ZGVycicuCisJVGhlIElTTyBDKysgc3RhbmRhcmQgaXMgZXh0cmVtZWx5IGNsZWFyIGFib3V0IGl0OiBzdGRlcnIgaXMKKwljb25zaWRlcmVkIGEgbWFjcm8sIG5vdCBhIHJlZ3VsYXIgc3ltYm9sIChzZWUgdGFibGUgOTQgYEhlYWRlcgorCTxjc3RkaW8+IHN5bm9wc2lzJywgW2xpYi5jLmZpbGVzXSAyNy44LjIgQyBMaWJyYXJ5IGZpbGVzKS4KKwlUaGVyZWZvcmUgc3RkOjogZG9lcyBub3QgYXBwbHkgdG8gaXQuICBJdCBzdGlsbCBkb2VzIHdpdGggZnByaW50Zi4KKwlBbHNvLCBzL2NzdGRpby5oL2NzdGRpby8uCisKKzIwMDItMDEtMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBsaWIvcXVvdGVhcmcuYzogVXNlIGAjaW5jbHVkZSAiLi4uIicgaW5zdGVhZCBvZiBgI2luY2x1ZGUgPC4uLj4nCisJZm9yIG5vbiBzeXN0ZW0gaGVhZGVycy4KKworMjAwMi0wMS0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlFcXVpcCB0aGUgc2tlbGV0b24gY2hhaW4gd2l0aCBsb2NhdGlvbiB0cmFja2luZywgcnVudGltZSB0cmFjZSwKKwlwdXJlIHBhcnNlciBhbmQgc2Nhbm5lci4KKworCSogc3JjL3BhcnNlLXNrZWwueTogUmVxdWVzdCBhIHB1cmUgcGFyc2VyLCBsb2NhdGlvbnMsIGFuZCBwcmVmaXgKKwlyZW5hbWluZy4KKwkoJXVuaW9uKTogSGF2aW5nIHNldmVyYWwgbWVtYmVycyB3aXRoIHRoZSBzYW1lIHR5cGUgZG9lcyBub3QgaGVscAorCXR5cGUgbWlzbWF0Y2hlcywgc2ltcGxpZnkuCisJKFlZUFJJTlQsIHl5cHJpbnQpOiBOZXcuCisJKHl5ZXJyb3IpOiBgYFJlbmFtZScnICh0aGVyZSBpcyBhICNkZWZpbmUgeXllcnJvciBza2VsX2Vycm9yKSBhcy4uLgorCShza2VsX2Vycm9yKTogdGhpcy4KKwlIYW5kbGUgbG9jYXRpb25zLgorCSogc3JjL3NjYW4tc2tlbC5sOiBBZGp1c3QgdG8gdGhlc2UgY2hhbmdlcy4KKwkqIHNyYy9za2VsZXRvbi5oIChMT0NBVElPTl9SRVNFVCwgTE9DQVRJT05fTElORVMsIExPQ0FUSU9OX1NURVApCisJKExPQ0FUSU9OX1BSSU5ULCBza2VsX2NvbnRyb2xfdCk6IE5ldy4KKworMjAwMS0xMi0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9wYXJzZS1za2VsLnk6IEdldCByaWQgb2YgdGhlIHNoaWZ0L3JlZHVjZSBjb25mbGljdDoKKwlyZXBsYWNlIGBnYicgd2l0aCBCTEFOS1MuCisJKiBzcmMvc2Nhbi1za2VsLmw6IEFkanVzdC4KKworMjAwMS0xMi0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9zeXN0ZW0uaDogV2UgZG9uJ3QgbmVlZCBub3Igd2FudCBiY29weS4KKwlUaHJvdyBhd2F5IE1TLURPUyBjcmFwOiB3ZSBkb24ndCBuZWVkIGdldHBpZC4KKwkqIGNvbmZpZ3VyZS5pbjogV2UgZG9uJ3QgbmVlZCBzdHJuZHVwLiAgSXQgd2FzIGV2ZW4gY2F1c2luZworCXByb2JsZW1zOiBiZWNhdXNlIEZsZXggaW5jbHVkZXMgdGhlIGhlYWRlcnMgKmJlZm9yZSogdXMsCisJX0dOVV9TT1VSQ0UgaXMgbm90IGRlZmluZWQgYnkgY29uZmlnLmgsIGFuZCB0aGVyZWZvcmUgc3RybmR1cCB3YXMKKwlub3QgdmlzaWJsZS4KKwkqIGxpYi94c3RybmR1cC5jOiBOZXcuCisJKiBzcmMvc2Nhbi1za2VsLmw6IFVzZSBpdC4KKwlCZSBzdXJlIHRvIGluaXRpYWxpemUgeXlsdmFsLm11c2NsZSBtZW1iZXIgd2hlbiBzY2FubmluZyBhIE1VU0NMRS4KKwkqIHNyYy9wYXJzZS1za2VsLnk6IFVzZSAlZGlyZWN0aXZlcyBpbnN0ZWFkIG9mICNkZWZpbmVzLgorCisyMDAxLTEyLTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3NrZWxldG9uLmg6IE5ldy4KKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3BhcnNlciwgb3V0cHV0X21hc3Rlcl9wYXJzZXIpOiBSZW1vdmUsIGRlYWQKKwljb2RlLgorCSogc3JjL291dHB1dC5oIChnZXRfbGluZXNfbnVtYmVyLCBhY3Rpb25zX291dHB1dCwgZ3VhcmRzX291dHB1dCkKKwkodG9rZW5fZGVmaW5pdGlvbnNfb3V0cHV0KTogUHJvdG90eXBlIHRoZW0uCisJKiBzcmMvcGFyc2Utc2tlbC55OiBBZGQgdGhlIGxpY2Vuc2Ugbm90aWNlLgorCUluY2x1ZGUgb3V0cHV0LmggYW5kIHNrZWxldG9uLmguCisJKHByb2Nlc3Nfc2tlbGV0b24pOiBSZXR1cm5zIHZvaWQsIGFuZCB0YWtlcyBhIHNpbmdsZSBwYXJhbWV0ZXIuCisJKiBzcmMvc2Nhbi1za2VsLmw6IEFkZCB0aGUgbGljZW5zZSBub3RpY2UuCisJSW5jbHVkZSBza2VsZXRvbi5oLgorCURvbid0IHVzZSAlb3B0aW9uIHl5bGluZW5vOiBpdCBzZWVtcyB0aGF0IHRoZW4gRmxleCBpbWFnaW5lcworCVJFSkVDVCBoYXMgYmVlbiB1c2VkLCBhbmQgdGhlcmVmb3JlIGl0IHdvbid0IHJlYWxsb2NhdGUgaXRzCisJYnVmZmVycyAod2hpY2ggbWFrZXMgbm8gb3RoZXIgc2Vuc2UgdG8gbWUgdGhhbiBhIGJ1ZykuICBJdCByZXN1bHRzCisJaW4gd2FybmluZ3MgZm9yIGB1bnVzZWQ6IHl5X2ZsZXhfcmVhbGxvYycuCisKKzIwMDEtMTItMzAgIFJvYmVydCBBbmlza28gIDxyb2JlcnQuYW5pc2tvQGVwaXRhLmZyPgorCisJKiBzcmMvbXVzY2xlX3RhYi5oIChNVVNDTEVfSU5TRVJUX0lOVCwgTVVTQ0xFX0lOU0VSVF9TVFJJTkcpCisJKE1VU0NMRV9JTlNFUlRfUFJFRklYKTogLi4udG8gdGhlcmUuCisJKiBzcmMvb3V0cHV0LmMgKE1VU0NMRV9JTlNFUlRfSU5ULCBNVVNDTEVfSU5TRVJUX1NUUklORykKKwkoTVVTQ0xFX0lOU0VSVF9QUkVGSVgpOiBNb3ZlIGZyb20gaGVyZS4uLgorCisJKiBzcmMvYmlzb24uaGFpcnk6IEFkZCBhIHNlY3Rpb24gZGlyZWN0aXZlLiAgUHV0IGJyYWNlcyBhcm91bmQgbXVzY2xlCisJbmFtZXMuICBUaGlzIHBhcnNlciBza2VsZXRvbiBpcyBzdGlsbCBicm9rZW4sIGJ1dCBCaXNvbiBzaG91bGQgbm90CisJY2hva2Ugb24gYSBiYWQgbXVzY2xlICdzeW50YXgnLgorCSogc3JjL2Jpc29uLnNpbXBsZTogQWRkIGEgc2VjdGlvbiBkaXJlY3RpdmUuICBQdXQgYnJhY2VzIGFyb3VuZCBtdXNjbGUKKwluYW1lcy4KKworCSogc3JjL2ZpbGVzLmggKHN0cnN1ZmZpeCwgc3RyaW5nYXBwZW5kKTogQWRkIGRlY2xhcmF0aW9ucy4KKwkodGFiX2V4dGVuc2lvbik6IEFkZCBkZWNsYXJhdGlvbi4KKwkoc2hvcnRfYmFzZV9uYW1lKTogQWRkIGRlY2xhcmF0aW9uLgorCisJKiBzcmMvZmlsZXMuYyAoc3Ryc3VmZml4LCBzdHJpbmdhcHBlbmQpOiBObyBsb25nZXIgc3RhdGljLiAgVGhlc2UKKwlmdW5jdGlvbnMgYXJlIHVzZWQgaW4gdGhlIHNrZWxldG9uIHBhcnNlci4KKwkodGFiX2V4dGVuc2lvbik6IE5ldy4KKwkoY29tcHV0ZV9iYXNlX25hbWVzKTogVXNlIHRoZSBjb21wdXRhdGlvbnMgZG9uZSBpbiB0aGlzIGZ1bmN0aW9uCisJdG8gZ3Vlc3MgaWYgdGhlIGdlbmVyYXRlZCBwYXJzZXJzIHNob3VsZCBoYXZlICcudGFiJyBpbiB0aGVpcgorCW5hbWVzLgorCShzaG9ydF9iYXNlX25hbWUpOiBObyBsb25nZXIgc3RhdGljLgorCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9za2VsZXRvbik6IE5ldy4KKwkob3V0cHV0KTogRGlzYWJsZSBjYWxsIHRvIG91dHB1dF9tYXN0ZXJfcGFyc2VyLCBhbmQgZ2l2ZSBhIHRyeSB0bworCWEgbmV3IHNrZWxldG9uIGhhbmRsaW5nIHN5c3RlbS4KKwkoZ3VhcmRzX291dHB1dCwgYWN0aW9uc19vdXRwdXQpOiBObyBsb25nZXIgc3RhdGljLgorCSh0b2tlbl9kZWZpbml0aW9uc19vdXRwdXQsIGdldF9saW5lc19udW1iZXIpOiBObyBsb25nZXIgc3RhdGljLgorCisJKiBjb25maWd1cmUuaW46IFVzZSBBTV9QUk9HX0xFWCBhbmQgQUNfUFJPR19ZQUNDLgorCisJKiBzcmMvTWFrZWZpbGUuYW0gKGJpc29uX1NPVVJDRVMpOiBBZGQgc2Nhbi1za2VsLmwgYW5kCisJcGFyc2Utc2tlbC55LgorCisJKiBzcmMvcGFyc2Utc2tlbC55OiBOZXcgZmlsZS4KKwkqIHNyYy9zY2FuLXNrZWwubDogTmV3IGZpbGUuCisKKzIwMDEtMTItMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJJW5hbWUtcHJlZml4IGlzIGJyb2tlbi4KKworCSogc3JjL2ZpbGVzLmMgKHNwZWNfbmFtZV9wcmVmaXgpOiBJbml0aWFsaXplIHRvIE5VTEwsIG5vdCB0byAieXkiLgorCUFkanVzdCBhbGwgZGVwZW5kZW5jaWVzLgorCSogdGVzdHMvaGVhZGVycy5hdCAoZXhwb3J0IFlZTFRZUEUpOiBTdHJlbmd0aGVuIHRoaXMgdGVzdDogdXNlCisJJW5hbWUtcHJlZml4LgorCisJUmVuYW1pbmcgeXlsdmFsIGJ1dCBub3QgeXlsbG9jIGlzIG5vdCBjb25zaXN0ZW50LiAgTm93IHdlIGRvLgorCisJKiBzcmMvYmlzb24uc2ltcGxlOiBQcmVmaXggeXlsbG9jIGlmIHVzZWQuCisJKiBkb2MvYmlzb24udGV4aW5mbyAoRGVjbCBTdW1tYXJ5KTogRG9jdW1lbnQgdGhhdC4KKworMjAwMS0xMi0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvOiBQcm9tb3RlIGAlbG9uZy1kaXJlY3RpdmUnIG92ZXIKKwlgJWxvbmdfZGlyZWN0aXZlJy4KKwlSZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gZml4ZWQtb3V0cHV0LWZpbGVzLCB5YWNjIGlzIGVub3VnaC4KKworMjAwMS0xMi0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGU6IERlZmluZSBZWURFQlVHIGFuZCBZWUVSUk9SX1ZFUkJPU0UgKmFmdGVyKiB0aGUKKwl1c2VyIHByb2xvZ3VlLiAgVGhlc2UgYXJlIGRlZmF1bHRzLgorCSogdGVzdHMvYWN0aW9ucy5hdCAoTWlkLXJ1bGUgYWN0aW9ucyk6IE1ha2Ugc3VyZSB0aGUgdXNlciBjYW4KKwlkZWZpbmUgWVlERUJVRyBhbmQgWVlFUlJPUl9WRVJCT1NFLgorCisyMDAxLTEyLTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL291dHB1dC5jIChoZWFkZXJfb3V0cHV0KTogRG9uJ3QgZm9yZ2V0IHRvIGV4cG9ydCBZWUxUWVBFIGFuZAorCXl5bGxvYy4KKwkqIHRlc3RzL2hlYWRlcnMuYXQgKGV4cG9ydCBZWUxUWVBFKTogTmV3LCBtYWtlIHN1cmUgaXQgZG9lcy4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKCV1bmlvbiBhbmQgLS1kZWZpbmVzLCBJbnZhbGlkIENQUCBoZWFkZXJzKToKKwlNb3ZlIHRvLi4uCisJKiB0ZXN0cy9oZWFkZXJzLmF0OiBoZXJlLgorCisyMDAxLTEyLTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2dyYW0uaCAocnVsZV9zKTogTWVtYmVyIGBhc3NvYycgaXMgb2YgdHlwZSBgYXNzb2NpYXRpdml0eScuCisKKzIwMDEtMTItMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiB0ZXN0cy9hY3Rpb25zLmF0IChNaWQtcnVsZSBhY3Rpb25zKTogT3V0cHV0IG9uIGEgc2luZ2xlIGxpbmUKKwlpbnN0ZWFkIG9mIHNldmVyYWwuCisKKzIwMDEtMTItMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkb2MvYmlzb24udGV4aW5mbzogRm9ybWF0dGluZyBjaGFuZ2VzLgorCisyMDAxLTEyLTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCURvbid0IHN0b3JlIHRoZSB0b2tlbiBkZWZzIGluIGEgbXVzY2xlLCBqdXN0IGJlIHJlYWR5IHRvIG91dHB1dCBpdAorCW9uIGNvbW1hbmQuICBOb3cgcG9zc2libGUgdmlhIGBzeW1ib2xzJy4gIEZpeGVzIGEgbWVtb3J5IGxlYWsuCisKKwkqIHNyYy9vdXRwdXQuYyAodG9rZW5fZGVmaW5pdGlvbnNfb3V0cHV0KTogTmV3LgorCShvdXRwdXRfcGFyc2VyLCBoZWFkZXJfb3V0cHV0KTogVXNlIGl0LgorCSogc3JjL3JlYWRlci5jIChzeW1ib2xzX3NhdmUpOiBSZW1vdmUuCisKKzIwMDEtMTItMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvYmlzb24uc2ltcGxlOiBEbyBub3QgcHJvdmlkZSBhIGRlZmF1bHQgZm9yIFlZU1RZUEUgYW5kCisJWVlMVFlQRSBiZWZvcmUgdGhlIHVzZXIncyBwcm9sb2d1ZS4gIE90aGVyd2lzZSBpdCdzIGhhcmRseS4uLiBhCisJZGVmYXVsdC4KKworMjAwMS0xMi0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlNaWQtcnVsZSBhY3Rpb25zIGFyZSBzaW1wbHkuLi4gaWdub3JlZCEKKworCSogc3JjL3JlYWRlci5jIChyZWFkZ3JhbSk6IEJlIHN1cmUgdG8gYXR0YWNoIG1pZC1ydWxlIGFjdGlvbnMgdG8KKwl0aGUgZW1wdHktcnVsZSBhc3NvY2lhdGVkIHRvIHRoZSBkdW1teSBzeW1ib2wsIG5vdCB0byB0aGUgaG9zdAorCXJ1bGUuCisJKiB0ZXN0cy9hY3Rpb25zLmF0IChNaWQtcnVsZSBhY3Rpb25zKTogTmV3LgorCisyMDAxLTEyLTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCU1lbW9yeSBsZWFrLgorCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRlcik6IEZyZWUgZ3JhbW1hci4KKworMjAwMS0xMi0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlNZW1vcnkgbGVhay4KKworCSogc3JjL0xSMC5jIChuZXdfaXRlbXNldHMpOiBEb24ndCBhbGxvY2F0ZSBgc2hpZnRfc3ltYm9sJyBoZXJlLAorCXNpbmNlIGl0IGFsbG9jYXRlcyBpdCBmb3IgZWFjaCBzdGF0ZSwgYWx0aG91Z2ggb25seSBvbmUgaXMgbmVlZGVkLgorCShhbGxvY2F0ZV9zdG9yYWdlKTogRG8gaXQgaGVyZS4KKworMjAwMS0xMi0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9vcHRpb25zLmgsIHNyYy9vcHRpb25zLmMgKGNyZWF0ZV9sb25nX29wdGlvbl90YWJsZSk6IFJlbmFtZQorCWFzLi4uCisJKGxvbmdfb3B0aW9uX3RhYmxlX25ldyk6IHRoaXMsIHdpdGggYSBjbGVhcmVyIHByb3RvdHlwZS4KKwkocGVyY2VudF90YWJsZSk6IFJlbW92ZSwgdW51c2VkLAorCSogc3JjL2dldGFyZ3MuYyAoZ2V0YXJncyk6IEFkanVzdC4KKworMjAwMS0xMi0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9MUjAuYywgc3JjL2NvbmZsaWN0cy5jLCBzcmMvbGFsci5jLCBzcmMvbGFsci5oLCBzcmMvb3V0cHV0LmMKKwkqIHNyYy9wcmludC5jLCBzcmMvcHJpbnRfZ3JhcGguYywgc3JjL3N0YXRlLmg6IFJlbmFtZSBzdGF0ZV90YWJsZQorCWFzIHN0YXRlcy4KKworMjAwMS0xMi0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9sYWxyLmMgKGJ1aWxkX3JlbGF0aW9ucyk6IFJlbmFtZSBgc3RhdGVzJyBhcyBgc3RhdGVzMScuCisJU29ycnksIEkgZG9uJ3QgdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgaXQgaXMsIG5vIGJldHRlciBuYW1lLi4uCisKKzIwMDEtMTItMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvY2xvc3VyZS5jLCBzcmMvY29uZmxpY3RzLmMsIHNyYy9kZXJpdmVzLmMsIHNyYy9ncmFtLmMKKwkqIHNyYy9ncmFtLmgsIHNyYy9sYWxyLmMsIHNyYy9udWxsYWJsZS5jLCBzcmMvb3V0cHV0LmMsIHNyYy9wcmludC5jCisJKiBzcmMvcHJpbnRfZ3JhcGguYywgc3JjL3JlYWRlci5jLCBzcmMvcmVkdWNlLmM6IFJlbmFtZSBydWxlX3RhYmxlCisJYXMgcnVsZXMuCisKKzIwMDEtMTItMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvZ3JhbS5jIChycHJlYywgcnByZWNzeW0sIHJhc3NvYyk6IFJlbW92ZSwgdW51c2VkIHNpbmNlIGxvbmcKKwlhZ28uCisKKzIwMDEtMTItMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMsIHNyYy9yZWFkZXIuaCAodXNlcl90b2tudW1zKTogUmVtb3ZlLgorCUFkanVzdCBhbGwgdXNlcnMgdG8gdXNlIHN5bWJvbHNbaV0tPnVzZXJfdG9rZW5fbnVtYmVyLgorCisyMDAxLTEyLTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2dyYW0uYywgc3JjL2dyYW0uaCAoc3ByZWMsIHNhc3NvYyk6IFJlbW92ZS4KKwlBZGp1c3QgYWxsIHVzZXJzIHRvIHVzZSBzeW1ib2xzW2ldLT5wcmVjIG9yIC0+YXNzb2MuCisKKzIwMDEtMTItMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMsIHNyYy9yZWFkZXIuaCAodGFncyk6IFJlbW92ZS4KKwlBZGp1c3QgYWxsIHVzZXJzIHRvIHVzZSBzeW1ib2xzW2ldLT50YWcuCisKKzIwMDEtMTItMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvZ3JhbS5oLCBzcmMvZ3JhbS5jIChzeW1ib2xzKTogTmV3LCBzaW1pbGFyIHRvIHN0YXRlX3RhYmxlCisJYW5kIHJ1bGVfdGFibGUuCisJKiBzcmMvcmVhZGVyLmMgKHBhY2tzeW1ib2xzKTogRmlsbCB0aGlzIHRhYmxlLgorCURyb3Agc3ByZWMuCisJKiBzcmMvY29uZmxpY3RzLmMgKHJlc29sdmVfc3JfY29uZmxpY3QpOiBBZGp1c3QuCisJKiBzcmMvcmVkdWNlLmMgKHJlZHVjZV9ncmFtbWFyKTogQWRqdXN0OiBqdXN0IHNvcnQgc3ltYm9scywgYQorCXNpbmdsZSB0YWJsZS4KKwlVc2Ugc3ltYm9sc1tpXS0+dGFnIGluc3RlYWQgb2YgdGFnc1tpXS4KKworMjAwMS0xMi0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHRlc3RzL2NhbGMuYXQgKF9BVF9EQVRBX0NBTENfWSk6IEFsc28gdXNlICV1bmlvbi4KKwlJbiBhZGRpdGlvbiwgcHV0IGEgY29tbWVudCBpbiB0aGVyZSwgdG8gcmVwbGFjZS4uLgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoJXVuaW9uIGFuZCBDIGNvbW1lbnRzKTogUmVtb3ZlLgorCisyMDAxLTEyLTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoV2ViMmMgQWN0aW9ucyk6IEJsaW5kbHkgbW92ZSB0aGUgYWN0dWFsCisJb3V0cHV0IGFzIGV4cGVjdGVkIG91dHB1dC4gIFRoZSBjb250ZW50cyAqc2VlbSogcmlnaHQgdG8gbWUsIGJ1dCBJCisJY2FuJ3QgcHJldGVuZCByZWFkaW5nIHBlcmZlY3RseSBwYXJzZXIgdGFibGVzLi4uICBOb25ldGhlbGVzcywgYWxsCisJdGhlIG90aGVyIHRlc3RzIHBhc3MgY29ycmVjdGx5LCB0aGUgdGFibGUgbG9vayBPSywgZXZlbiB0aG91Z2ggdGhlCisJcHJlc2VuY2Ugb2YgYCRheGlvbScgaXMgdG8gYmUgbm90ZWQ6IEFGQUlDUyBpdCBpcyB1c2VsZXNzIChidXQKKwloYXJtbGVzcykuCisKKzIwMDEtMTItMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRncmFtKTogRG9uJ3QgYWRkIHRoZSBydWxlIDAgaWYgdGhlcmUgd2VyZSBubworCXJ1bGVzIHJlYWQuICBJbiBvdGhlciB3b3JkcywgYWRkIGl0IF9hZnRlcl8gaGF2aW5nIHBlcmZvcm1lZAorCWdyYW1tYXIgc2FuaXR5IGNoZWNrcy4KKwlGaXhlcyB0aGUgYHRlc3RzL3JlZ3Jlc3Npb24uYXQgKEludmFsaWQgaW5wdXQ6IDEpJyBGYWlsdXJlLgorCisyMDAxLTEyLTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoV2ViMmMgUmVwb3J0KTogQ2F0Y2ggdXA6IHRoZSBydWxlIDAgaXMgbm93CisJdmlzaWJsZSwgYW5kIHNvbWUgc3RhdGVzIGhhdmUgbm93IGEgZGlmZmVyZW50IG51bWJlci4KKworMjAwMS0xMi0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9yZWFkZXIuYyAocmVhZGdyYW0pOiBCaW5kIHRoZSBpbml0aWFsIHJ1bGUncyBsaW5lbm8gdG8gdGhhdAorCW9mIHRoZSBmaXJzdCBydWxlLgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoUnVsZSBMaW5lIE51bWJlcnMsIFVucmVzb2x2ZWQgU1IgQ29uZmxpY3RzKToKKwkoU29sdmVkIFNSIENvbmZsaWN0cyk6IEFkanVzdCBydWxlIDAncyBsaW5lIG51bWJlci4KKworMjAwMS0xMi0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlGaXggdGhlIGBHQVdLIEdyYW1tYXInIGZhaWx1cmUuCisKKwkqIHNyYy9MUjAuYyAoZmluYWxfc3RhdGUpOiBJbml0aWFsaXplIHRvIC0xIHNvIHRoYXQgd2UgZG8gY29tcHV0ZQorCXRoZSByZWR1Y3Rpb25zIG9mIHRoZSBmaXJzdCBzdGF0ZSB3aGljaCB3YXMgbWlzdGFrZW5seSBjb25mdXNlZAorCXdpdGggdGhlIGZpbmFsIHN0YXRlIGJlY2F1c2UgcHJlY2lzZWx5IGZpbmFsX3N0YXRlIHdhcyBpbml0aWFsaXplZAorCXRvIDAuCisJKiB0ZXN0cy9zZXRzLmF0IChOdWxsYWJsZSk6IEFkanVzdDogc3RhdGUgMCBkb2VzIGhhdmUgbG9va2FoZWFkcywKKwlub3cgbm90aWNlZCBieSBCaXNvbi4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFJ1bGUgTGluZSBOdW1iZXJzKTogQWRqdXN0OiBzdGF0ZSAwIGRvZXMKKwloYXZlIGEgcmVkdWN0aW9uIG9uICRkZWZhdWx0LgorCisyMDAxLTEyLTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2dyYW0uYyAocml0ZW1fcHJpbnQpOiBCZSBzdXJlIHRvIHN1YnRyYWN0IDEgd2hlbiBkaXNwbGF5aW5nCisJcnVsZSBsaW5lIG51bWJlcnMuCisJKiBzcmMvY2xvc3VyZS5jIChwcmludF9jbG9zdXJlKTogTGlrZXdpc2UuCisJKiBzcmMvZGVyaXZlcy5jIChwcmludF9kZXJpdmVzKTogTGlrZXdpc2UuCisJKiB0ZXN0cy9zZXRzLmF0IChOdWxsYWJsZSk6IEFkanVzdDogdGhlIHJ1bGUgbnVtYmVycyBhcmUgY29ycmVjdAorCW5vdy4KKworMjAwMS0xMi0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9sYWxyLmMgKGxvb2thaGVhZHNfcHJpbnQpOiBOZXcuCisJKGxhbHIpOiBDYWxsIGl0IHdoZW4gLS10cmFjZS1mbGFnLgorCSogdGVzdHMvc2V0cy5hdCAoTnVsbGFibGUpOiBBZGp1c3Q6IHdoZW4gdHJhY2luZywgdGhlIGxvb2thaGVhZHMKKwlhcmUgZHVtcGVkLgorCisyMDAxLTEyLTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2Rlcml2ZXMuYyAocHJpbnRfZGVyaXZlcyk6IEJlIHN1cmUgdG8gdXNlIGA+PSAwJywgbm90IGA+IDAnLAorCXdoZW4gd2Fsa2luZyB0aHJvdWdoIHJpdGVtLCBldmVuIHZpYSBydWxlLT5yaHMuCisJKiBzcmMvcmVkdWNlLmMgKGR1bXBfZ3JhbW1hciwgdXNlZnVsX3Byb2R1Y3Rpb24sIHJlZHVjZV9vdXRwdXQpCisJKHVzZWZ1bF9wcm9kdWN0aW9uLCB1c2VsZXNzX25vbnRlcm1pbmFscyk6IExpa2V3aXNlLgorCShyZWR1Y2VfZ3JhbW1hcl90YWJsZXMpOiBMaWtld2lzZSwgcGx1cyB1cGRhdGUgbnJpdGVtcy4KKwkqIHNyYy9udWxsYWJsZS5jIChzZXRfbnVsbGFibGUpOiBMaWtld2lzZS4KKwkqIHNyYy9sYWxyLmMgKGJ1aWxkX3JlbGF0aW9ucyk6IExpa2V3aXNlLgorCSogdGVzdHMvc2V0cy5hdCAoTnVsbGFibGUpOiBBZGp1c3QuCisJRm9ydHVuYXRlbHksIG5vdywgdGhlICRheGlvbSBpcyBubyBsb25nZXIgbnVsbGFibGUuCisKKzIwMDEtMTItMjkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvTFIwLmMgKGdlbmVyYXRlX3N0YXRlcyk6IFVzZSBucml0ZW1zLCBub3Qgbml0ZW1zLCBub3IgdXNpbmcKKwl0aGUgMC1zZW50aW5lbC4KKwkqIHNyYy9ncmFtLmMgKHJpdGVtX2xvbmdlc3RfcmhzKTogTGlrZXdpc2UuCisJKiBzcmMvcmVkdWNlLmMgKG5vbnRlcm1pbmFsc19yZWR1Y2UpOiBMaWtld2lzZS4KKwkqIHNyYy9wcmludF9ncmFwaC5jIChwcmludF9ncmFwaCk6IExpa2V3aXNlLgorCSogc3JjL291dHB1dC5jIChvdXRwdXRfcnVsZV9kYXRhKTogTGlrZXdpc2UuCisJKiBzcmMvbnVsbGFibGUuYyAoc2V0X251bGxhYmxlKTogIExpa2V3aXNlLgorCisyMDAxLTEyLTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL291dHB1dC5jOiBDb21tZW50IGNoYW5nZXMuCisKKzIwMDEtMTItMjcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBzcmMvYmlzb24uc2ltcGxlIChZWVNUQUNLX0FMTE9DLCBZWVNJWkVfVCk6IFJlbW92ZSBzcGVjaWFsCisJY2FzZXMgZm9yIG5vbi1HTlUgc3lzdGVtcyBsaWtlIEFJWCwgSFAtVVgsIFNHSSwgU3VuLCBhbmQKKwlTcGFyYywgYXMgdGhleSB3ZXJlIGNhdXNpbmcgbW9yZSBwb3J0aW5nIHByb2JsZW1zIHRoYW4gdGhlCisJKG1pbm9yKSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCB3YXMgd29ydGguCisKKwlBbHNvLCBjYXRjaCB1cCB3aXRoIDEuMzEncyBZWVNURC4KKworMjAwMS0xMi0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X2dyYW0pOiBSZWx5IG9uIG5yaXRlbXMsIG5vdCB0aGUKKwkwLXNlbnRpbmVsLiAgU2VlIGJlbG93LgorCVVzZSAtMSBhcyBzZXBhcmF0b3IsIG5vdCAwLgorCSogc3JjL2Jpc29uLnNpbXBsZSAoeXlwYXJzZSk6IFN1YnRyYWN0IDEgdG8gdGhlIHJ1bGUgbnVtYmVycy4KKwlSZWx5IG9uIC0xIGFzIHNlcGFyYXRvciBpbiB5eXJocywgaW5zdGVhZCBvZiAwLgorCSogdGVzdHMvY2FsYy5hdCAoQVRfQ0hFQ0tfQ0FMQyk6IE5vdywgdGhlIHBhcnNlcnMgbm8gbG9uZ2VyIGlzc3VlCisJdHdpY2UgYE5vdyBhdCBlbmQgb2YgaW5wdXQnLCB0aGVyZWZvcmUgdGhlcmUgYXJlIHR3byBsaW5lcyBsZXNzIHRvCisJZXhwZWN0LgorCisyMDAxLTEyLTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoVW5yZXNvbHZlZCBTUiBDb25mbGljdHMpOgorCShTb2x2ZWQgU1IgQ29uZmxpY3RzLCBSdWxlIExpbmUgTnVtYmVycyk6IEFkanVzdCB0byB0aGUgY2hhbmdlcworCWJlbG93LgorCisyMDAxLTEyLTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL0xSMC5jIChuZXdfc3RhdGUpOiBSZWNvZ25pemUgdGhlIGZpbmFsIHN0YXRlIGJ5IHRoZSBmYWN0IGl0CisJaXMgcmVhY2hlZCBieSBlb2Z0b2tlbi4KKwkoaW5zZXJ0X3N0YXJ0X3NoaWZ0aW5nX3N0YXRlLCBpbnNlcnRfZW9mX3NoaWZ0aW5nX3N0YXRlKQorCShpbnNlcnRfYWNjZXB0aW5nX3N0YXRlLCBhdWdtZW50X2F1dG9tYXRvbik6IFJlbW92ZSwgc2luY2Ugbm93CisJdGhlc2Ugc3RhdGVzIGFyZSBhdXRvbWF0aWNhbGx5IGNvbXB1dGVkIGZyb20gdGhlIGluaXRpYWwgc3RhdGUuCisJKGdlbmVyYXRlX3N0YXRlcyk6IEFkanVzdC4KKwkqIHNyYy9wcmludC5jOiBXaGVuIHJlcG9ydGluZyBhIHJ1bGUgbnVtYmVyIHRvIHRoZSB1c2VyLCBzdWJ0cmFjdAorCTEsIHNvIHRoYXQgdGhlIGF4aW9tIHJ1bGUgaXMgcnVsZSAwLCBhbmQgdGhlIGZpcnN0IHVzZXIgcnVsZSBpcyAxLgorCSogc3JjL3JlZHVjZS5jOiBMaWtld2lzZS4KKwkqIHNyYy9wcmludF9ncmFwaC5jIChwcmludF9jb3JlKTogRm9yIHRoZSB0aW1lIGJlaW5nLCBqdXN0IGFzIGZvcgorCXRoZSByZXBvcnQsIGRlcGVuZCB1cG9uIC0tdHJhY2UtZmxhZ3MgdG8gZHVtcCB0aGUgZnVsbCBzZXQgb2YKKwlpdGVtcy4KKwkqIHNyYy9yZWFkZXIuYyAocmVhZGdyYW0pOiBPbmNlIHRoZSBncmFtbWFyIHJlYWQsIGluc2VydCB0aGUgcnVsZQorCTA6IGAkYXhpb206IFNUQVJULVNZTUJPTCAkJy4KKwkqIHRlc3RzL3NldC5hdDogQWRqdXN0OiBydWxlIDAgaXMgbm93IGRpc3BsYXllZCwgYW5kIHNpbmNlIHRoZQorCW51bWJlciBvZiB0aGUgc3RhdGVzIGhhcyBjaGFuZ2VkICh0aGUgZmluYWwgc3RhdGUgaXMgbm8gbG9uZ2VyCisJbmVjZXNzYXJpbHkgdGhlIGxhc3QpLCBjYXRjaCB1cC4KKworMjAwMS0xMi0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlUcnkgdG8gbWFrZSB0aGUgdXNlIG9mIHRoZSBlb2Z0b2tlbiB2YWxpZC4gIEdpdmVuIHRoYXQgaXRzIHZhbHVlCisJaXMgMCB3aGljaCB3YXMgYWxzbyB1c2VkIGFzIGEgc2VudGluZWwgaW4gcml0ZW0sIChpKSBtYWtlIHN1cmUgPj0gMAorCWlzIHVzZWQgaW5zdGVhZCBvZiA+IDAgd2hlcmUgYXBwcm9wcmlhdGUsIChpaSksIGRlcGVuZCB1cG9uIG5yaXRlbXMKKwlpbnN0ZWFkIG9mIHRoZSAwLXNlbnRpbmVsLgorCisJKiBzcmMvZ3JhbS5oLCBzcmMvZ3JhbS5jIChucml0ZW1zKTogTmV3LgorCUV4cGVjdGVkIHRvIGJlIGR1cGxpY2F0aW9uIG9mIG5pdGVtcywgYnV0IGZvciB0aGUgdGltZSBiZWluZy4uLgorCSogc3JjL3JlYWRlci5jIChwYWNrZ3JhbSk6IEFzc2VydCBucml0ZW1zIGFuZCBuaXRlbXMgYXJlIGVxdWFsLgorCSogc3JjL0xSMC5jIChhbGxvY2F0ZV9pdGVtc2V0cywgbmV3X2l0ZW1zZXRzKTogQWRqdXN0LgorCSogc3JjL2Nsb3N1cmUuYyAocHJpbnRfY2xvc3VyZSwgcHJpbnRfZmRlcml2ZXMpOiBMaWtld2lzZS4KKwkqIHNyYy9ncmFtLmMgKHJpdGVtX3ByaW50KTogTGlrZXdpc2UuCisJKiBzcmMvcHJpbnQuYyAocHJpbnRfY29yZSwgcHJpbnRfZ3JhbW1hcik6IExpa2V3aXNlLgorCSogc3JjL3ByaW50X2dyYXBoLmM6IExpa2V3aXNlLgorCisyMDAxLTEyLTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL21haW4uYyAobWFpbik6IElmIHRoZXJlIGFyZSBjb21wbGFpbnMgYWZ0ZXIgZ3JhbW1hcgorCXJlZHVjdGlvbnMsIHRoZW4gb3V0cHV0IHRoZSByZXBvcnQgYW55d2F5IGlmIHJlcXVlc3RlZCwgdGhlbiBkaWUuCisJKiBzcmMvc3ltdGFiLmMgKGJ1Y2tldF9uZXcpOiBJbml0aWFsaXplIGB2YWx1ZScgdG8gLTEsIG5vdCAwLgorCSogc3JjL3JlYWRlci5jIChlb2Z0b2tlbik6IE5ldy4KKwkocGFyc2VfdG9rZW5fZGVjbCk6IElmIHRoZSB0b2tlbiBiZWluZyBkZWZpbmVkIGhhcyB2YWx1ZSBgMCcsIGl0CisJaXMgdGhlIGVvZnRva2VuLgorCShwYWNrc3ltYm9scyk6IE5vIGxvbmdlciBoYWNrIGB0YWdzJyB0byBpbnNlcnQgYCQnIGJ5IGhhbmQuCisJQmUgc3VyZSB0byBwcmVzZXJ2ZSB0aGUgdmFsdWUgb2YgdGhlIGVvZnRva2VuLgorCShyZWFkZXIpOiBNYWtlIHN1cmUgZW9mdG9rZW4gaXMgZGVmaW5lZC4KKwlJbml0aWFsaXplIG5zeW1zIHRvIDA6IG5vdyBlb2Z0b2tlbiBpcyBjcmVhdGVkIGp1c3QgbGlrZSB0aGUgb3RoZXJzLgorCSogc3JjL3ByaW50LmMgKHByaW50X2dyYW1tYXIpOiBEb24ndCBzcGVjaWFsIGNhc2UgdGhlIGVvZiB0b2tlbi4KKwkqIHNyYy9yZWdyZXNzaW9uLmF0OiBBZGp1c3Q6IGAkJyBoYXMgdmFsdWUgMCwgbm90IC0xLCB3aGljaCB3YXMgYQorCWxpZSBhbnl3YXksIGFsYmVpdCBwbGVhc2FudC4KKwkqIHRlc3RzL2NhbGMuYXQ6IEV4ZXJjaXNlIGVycm9yIG1lc3NhZ2VzIHdpdGggZW9mdG9rZW4uCisJQ2hhbmdlIHRoZSBncmFtbWFyIHNvIHRoYXQgZW1wdHkgaW5wdXQgaXMgaW52YWxpZC4KKwlBZGp1c3QgZXhwZWN0YXRpb25zLgorCVdoZW4geXl1bmdldGluZywgYmUgc3VyZSB0byB1c2UgYSB2YWxpZCB5eWxsb2M6IHVzZSBsYXN0X3l5bGxvYy4KKworMjAwMS0xMi0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgdGhlIHByb3RvcyBvZiBzdHJjaHIgYW5zIHN0cnNwbi4KKwlSZXBsYWNlIHN0cmNociBpZiBuZWVkZWQuCisJKiBzcmMvc3lzdGVtLmg6IFByb3ZpZGUgdGhlIHByb3RvcyBvZiBzdHJjaHIsIHN0cnNwbiBhbmQgbWVtY2hyIGlmCisJbWlzc2luZy4KKwkqIGxpYi9zdHJjaHIuYzogTmV3LgorCSogc3JjL3JlYWRlci5jIChzeW1ib2xzX3NhdmUpOiBVc2Ugc3RyY2hyLgorCisyMDAxLTEyLTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3ByaW50LmMsIHNyYy9wcmludF9ncmFwaC5jIChlc2NhcGUpOiBOZXcuCisJVXNlIGl0IHRvIHF1b3RlIHRoZSBUQUdTIG91dHB1dHMuCisJKiBzcmMvcHJpbnRfZ3JhcGguYyAocHJpbnRfc3RhdGUpOiBOb3cgZXJyb3JzIGFyZSBpbiByZWQsIGFuZAorCXJlZHVjdGlvbnMgaW4gZ3JlZW4uCisJUHJlZmVyIGhpZ2ggdG8gd2lkZTogb3V0cHV0IHRoZSBzdGF0ZSBudW1iZXIgb24gYSBsaW5lIG9mIGl0cyBvd24uCisKKzIwMDEtMTItMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvc3RhdGUuaCwgc3JjL3N0YXRlLmMgKHJlZHVjdGlvbnNfbmV3KTogTmV3LgorCSogc3JjL0xSMC5jIChzZXRfc3RhdGVfdGFibGUpOiBMZXQgYWxsIHRoZSBzdGF0ZXMgaGF2ZSBhCisJYHJlZHVjdGlvbnMnLCBldmVuIGlmIHJlZHVjZWQgdG8gMC4KKwkoc2F2ZV9yZWR1Y3Rpb25zKTogQWRqdXN0LgorCSogc3JjL2xhbHIuYyAoaW5pdGlhbGl6ZV9MQSwgaW5pdGlhbGl6ZV9sb29rYWhlYWRzKTogQWRqdXN0LgorCSogc3JjL3ByaW50LmMgKHByaW50X3JlZHVjdGlvbnMsIHByaW50X2FjdGlvbnMpOiBBZGp1c3QuCisJKiBzcmMvb3V0cHV0LmMgKGFjdGlvbl9yb3cpOiBBZGp1c3QuCisKKzIwMDEtMTItMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvc3RhdGUuaCwgc3JjL3N0YXRlLmMgKGVycnNfbmV3LCBlcnJzX2R1cCk6IE5ldy4KKwkqIHNyYy9MUjAuYyAoc2V0X3N0YXRlX3RhYmxlKTogTGV0IGFsbCB0aGUgc3RhdGVzIGhhdmUgYW4gZXJycywKKwlldmVuIGlmIHJlZHVjZWQgdG8gMC4KKwkqIHNyYy9wcmludC5jIChwcmludF9lcnJzLCBwcmludF9yZWR1Y3Rpb25zKTogQWRqdXN0LgorCSogc3JjL291dHB1dC5jIChvdXRwdXRfYWN0aW9ucywgYWN0aW9uX3Jvdyk6IEFkanVzdC4KKwkqIHNyYy9jb25mbGljdHMuYyAocmVzb2x2ZV9zcl9jb25mbGljdCk6IEFkanVzdC4KKworMjAwMS0xMi0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9sYWxyLmMgKHNldF9nb3RvX21hcCwgaW5pdGlhbGl6ZV9GKTogVXNlIFNISUZUX1NZTUJPTC4KKworMjAwMS0xMi0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9jb25mbGljdHMuYywgc3JjL2NvbmZsaWN0cy5oIChwcmludF9yZWR1Y3Rpb25zKTogTW92ZSB0by4uLgorCSogc3JjL3ByaW50LmM6IGhlcmUuCisJKGxvb2thaGVhZHNldCwgc2hpZnRzZXQpOiBOZXcsIHVzZWQgYXMgYWRkaXRpb25hbCBzdG9yYWdlIGJ5CisJcHJpbnRfcmVkdWN0aW9ucy4KKwkocHJpbnRfcmVzdWx0cyk6IEFkanVzdC4KKwkocHJpbnRfc2hpZnRzLCBwcmludF9nb3RvcywgcHJpbnRfZXJycyk6IE5ldywgZXh0cmFjdGVkIGZyb20uLi4KKwkocHJpbnRfYWN0aW9ucyk6IGhlcmUuCisJKiBzcmMvcHJpbnRfZ3JhcGguYyAocHJpbnRfYWN0aW9ucyk6IFJlbW92ZSBkZWFkIGNvZGUuCisKKzIwMDEtMTItMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKGNvcHlfZG9sbGFyLCBjb3B5X2F0KTogQmV0dGVyIGNoZWNraW5nIG9mIGBuJyBpbgorCWAkbicgYW5kIGBAbicuCisKKzIwMDEtMTItMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvbGFsci5jIChhZGRfbG9va2JhY2tfZWRnZSk6IFVzZSBzdGF0ZV90IGluc3RlYWQgb2YgaW50cy4KKwkoYnVpbGRfcmVsYXRpb25zKTogQWRqdXN0LgorCisyMDAxLTEyLTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2xhbHIuYyAoc2V0X2dvdG9fbWFwKTogUmVtb3ZlIGEgd3JvbmcgYnV0IGJlbmlnbiBsb29wCisJZHVwbGljYXRpb24uCisKKzIwMDEtMTItMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKHBhY2tncmFtKTogQ2F0Y2ggbml0ZW1zIG92ZXJmbG93cy4KKworMjAwMS0xMi0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9maWxlcy5jLCBzcmMvZmlsZXMuaCAoZ3VhcmRfb2JzdGFjayk6IFJlbW92ZS4KKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0KTogQWRqdXN0LgorCSogc3JjL3JlYWRlci5jIChwYXJzZV9icmFjZXMpOiBOZXcsIGZhY3RvcmluZy4uLgorCShjb3B5X2FjdGlvbiwgY29weV9ndWFyZCk6IHRoZXNlIHR3byB3aGljaCBhcmUgcmVuYW1lZCBhcy4uLgorCShwYXJzZV9hY3Rpb24sIHBhcnNlX2d1YXJkKTogdGhlc2UuCisJQXMgYSB2b2x1bnRhcnkgY29uc2VxdWVuY2UsIHVzaW5nIGJyYWNlcyBhcm91bmQgZ3VhcmRzIGlzIG5vdworCW1hbmRhdG9yeS4KKworMjAwMS0xMi0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9ncmFtLmggKHJ1bGVfdCk6IGBndWFyZCcgYW5kIGBndWFyZF9saW5lJyBhcmUgbmV3IG1lbWJlcnMuCisJKiBzcmMvcmVhZGVyLmMgKHN5bWJvbF9saXN0KTogYGd1YXJkJyBhbmQgYGd1YXJkX2xpbmUnIGFyZSBuZXcKKwltZW1iZXJzLgorCShzeW1ib2xfbGlzdF9uZXcpOiBBZGp1c3QuCisJKGNvcHlfYWN0aW9uKTogYWN0aW9uX2xpbmUgaXMgdGhlIGZpcnN0IGxpbmUsIG5vdCB0aGUgbGFzdC4KKwkoY29weV9ndWFyZCk6IEp1c3QgYXMgZm9yIGFjdGlvbnMsIHN0b3JlIHRoZSBgYWN0aW9uJyBvbmx5LCBub3QKKwl0aGUgc3dpdGNoL2Nhc2UvYnJlYWsgZmxlc2guCisJRG9uJ3QgcGFyc2UgdGhlIHVzZXIgYWN0aW9uIHRoYXQgbWlnaHQgZm9sbG93IHRoZSBndWFyZCwgbGV0Li4uCisJKHJlYWRncmFtKTogZG8gaXQsIGkuZS4sIG5vdywgdGhlcmUgY2FuIGJlIGFuIGFjdGlvbiBhZnRlciBhCisJZ3VhcmQuCisJSW4gb3RoZXIgd29yZHMgdGhlIGd1YXJkIGlzIGp1c3QgZXhwbGljaXRseSBvcHRpb25hbC4KKwkocGFja2dyYW0pOiBBZGp1c3QuCisJKiBzcmMvb3V0cHV0LmMgKGd1YXJkc19vdXRwdXQpOiBOZXcuCisJKG91dHB1dF9wYXJzZXIpOiBDYWxsIGl0IHdoZW4gbmVlZGVkLgorCShvdXRwdXQpOiBBbHNvIGZyZWUgdGhlIGd1YXJkIGFuZCBhdHRycyBvYnN0YWNrcy4KKwkqIHNyYy9maWxlcy5jLCBzcmMvZmlsZXMuaCAob2JzdGFja19zYXZlKTogUmVtb3ZlLgorCShvdXRwdXRfZmlsZXMpOiBSZW1vdmUuCisJQXMgYSByZXN1bHQsIGlmIG9uZSBuZWVkcyB0aGUgZm9ybWVyIGAuYWN0JyBmaWxlLCB1c2luZyBhbgorCWFwcHJvcHJpYXRlIHNrZWxldG9uIHdoaWNoIHJlcXVpcmVzIGFjdGlvbnMgYW5kIGd1YXJkcyBpcyBub3cKKwlyZXF1aXJlZC4KKwkqIHNyYy9tYWluLmMgKG1haW4pOiBBZGp1c3QuCisJKiB0ZXN0cy9zZW1hbnRpYy5hdDogTmV3LgorCSogdGVzdHMvcmVncmVzc2lvbi5hdDogVXNlIGBpbnB1dC55JyBhcyBpbnB1dCBmaWxlIG5hbWUuCisJQXZvaWQgOCszIHByb2JsZW1zIGJ5IHJlcXVpcmluZyBpbnB1dC5jIHdoZW4gdGhlIHRlc3QgbmVlZHMgdGhlCisJcGFyc2VyLgorCisyMDAxLTEyLTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3JlYWRlci5jIChzeW1ib2xfbGlzdF9uZXcpOiBCZSBzdXJlIHRvIGluaXRpYWxpemUgYWxsIHRoZQorCWZpZWxkcy4KKworMjAwMS0xMi0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlBbGwgdGhlIGhhY2tzIHVzaW5nIGEgZmluYWwgcHNldWRvIHN0YXRlIGFyZSBub3cgdXNlbGVzcy4KKworCSogc3JjL0xSMC5jIChzZXRfc3RhdGVfdGFibGUpOiBzdGF0ZV90YWJsZSBob2xkcyBleGFjdGx5IG5zdGF0ZXMuCisJKiBzcmMvbGFsci5jIChuTEEpOiBOZXcuCisJKGluaXRpYWxpemVfTEEsIGNvbXB1dGVfbG9va2FoZWFkcywgaW5pdGlhbGl6ZV9sb29rYWhlYWRzKTogVXNlIGl0CisJaW5zdGVhZCBvZiBsb29rYWhlYWRzcCBmcm9tIHRoZSBwc2V1ZG8gc3RhdGUgKG5zdGF0ZSArIDEpLgorCisyMDAxLTEyLTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL291dHB1dC5jIChhY3Rpb25fcm93LCB0b2tlbl9hY3Rpb25zKTogVXNlIGEgc3RhdGVfdCBpbnN0ZWFkCisJb2YgYSBpbnRlZ2VyLCBhbmQgbmxvb2thaGVhZHMgaW5zdGVhZCBvZiB0aGUgZm9sbG93aW5nIHN0YXRlJ3MKKwlsb29rYWhlYWRzcC4KKworMjAwMS0xMi0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9jb25mbGljdHMuYyAobG9nX3Jlc29sdXRpb24sIGZsdXNoX3NoaWZ0KQorCShyZXNvbHZlX3NyX2NvbmZsaWN0LCBzZXRfY29uZmxpY3RzLCBzb2x2ZV9jb25mbGljdHMpCisJKGNvdW50X3NyX2NvbmZsaWN0cywgY291bnRfcnJfY29uZmxpY3RzLCBjb25mbGljdHNfb3V0cHV0KQorCShjb25mbGljdHNfcHJpbnQsIHByaW50X3JlZHVjdGlvbnMpOiBVc2UgYSBzdGF0ZV90IGluc3RlYWQgb2YgYW4KKwlpbnRlZ2VyIHdoZW4gcmVmZXJyaW5nIHRvIGEgc3RhdGUuCisJQXMgbXVjaCBhcyBwb3NzaWJsZSwgZGVwZW5kIHVwb24gbmxvb2thaGVhZHMsIGluc3RlYWQgb2YgdGhlCisJYGxvb2thaGVhZHNwJyBtZW1iZXIgb2YgdGhlIGZvbGxvd2luZyBzdGF0ZSAoc2luY2UgbG9va2FoZWFkcyBvZgorCXN1Y2Nlc3NpdmUgc3RhdGVzIGFyZSBzdWNjZXNzaXZlLCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHN0YXRlIG4gKyAxCisJYW5kIG4gc2VydmVkIGFzIHRoZSBudW1iZXIgb2YgbG9va2FoZWFkcyBmb3Igc3RhdGUgbikuCisJKiBzcmMvbGFsci5jIChhZGRfbG9va2JhY2tfZWRnZSk6IExpa2V3aXNlLgorCSogc3JjL3ByaW50LmMgKHByaW50X2NvcmUsIHByaW50X2FjdGlvbnMsIHByaW50X3N0YXRlKQorCShwcmludF9yZXN1bHRzKTogTGlrZXdpc2UuCisJKiBzcmMvcHJpbnRfZ3JhcGguYyAocHJpbnRfY29yZSwgcHJpbnRfYWN0aW9ucywgcHJpbnRfc3RhdGUpCisJKHByaW50X2dyYXBoKTogTGlrZXdpc2UuCisJKiBzcmMvY29uZmxpY3RzLmg6IEFkanVzdC4KKworMjAwMS0xMi0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9iaXNvbi5oYWlyeTogRm9ybWF0dGluZy9jb21tZW50IGNoYW5nZXMuCisJQU5TSWZ5LgorCVJlbW92ZSBgcmVnaXN0ZXInIGluZGljYXRpb25zLgorCUFkZCBwbGVudHkgb2YgYHN0YXRpYycuCisKKzIwMDEtMTItMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvb3V0cHV0LmMgKHByZXBhcmUpOiBEcm9wIHRoZSBtdXNjbGUgYG50YmFzZScgd2hpY2gKKwlkdXBsaWNhdGVzIG50b2tlbnMuCisJKiBzcmMvYmlzb24uc2ltcGxlOiBGb3JtYXR0aW5nL2NvbW1lbnQgY2hhbmdlcy4KKwlVc2UgWVlOVE9LRU5TIG9ubHksIHdoaWNoIGlzIGRvY3VtZW50ZWQsIGJ1dCBub3QgWVlOVEJBU0UsIHdoaWNoCisJaXMgYW4gdW5kb2N1bWVudGVkIHN5bm9ueW0uCisKKzIwMDEtMTItMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF90YWJsZV9kYXRhKTogQ2hhbmdlIHRoZSBwcm90b3R5cGUgdG8gdXNlCisJYGludCcgZm9yIGFycmF5IHJhbmdlczogc29tZSBpbnZvY2F0aW9ucyBkbyBwYXNzIGFuIGludCwgbm90IGEKKwlzaG9ydC4KKwlSZXBvcnRlZCBieSBXYXluZSBHcmVlbi4KKworMjAwMS0xMi0yMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlTb21lIGFjdGlvbnMgb2Ygd2ViMmMueSBhcmUgaW1wcm9wZXJseSB0cmlnZ2VyZWQuCisJUmVwb3J0ZWQgYnkgTWlrZSBDYXN0bGUuCisKKwkqIHNyYy9sYWxyLmMgKHRyYXZlcnNlKTogcy9GIChpKVtrXSA9IEYgKGopW2tdL0YgKGopW2tdID0gRiAoaSlba10vLgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoV2ViMmMpOiBSZW5hbWUgYXMuLi4KKwkoV2ViMmMgUmVwb3J0KTogdGhpcy4KKwkoV2ViMmMgQWN0aW9ucyk6IE5ldy4KKworMjAwMS0xMi0yMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlSZWR1Y3Rpb25zIGluIHdlYjJjLnkgYXJlIGltcHJvcGVybHkgcmVwb3J0ZWQuCisJUmVwb3J0ZWQgYnkgTWlrZSBDYXN0bGUuCisKKwkqIHNyYy9jb25mbGljdHMuYyAocHJpbnRfcmVkdWN0aW9ucyk6IEZpeC4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFdlYjJjKTogTmV3LgorCisyMDAxLTEyLTE4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCVNvbWUgaG9zdCBmYWlsIG9uIGBhc3NlcnQgKCEiZm9vIiknLCB3aGljaCBleHBhbmRzIHRvCisJKCghImZvbyIpID8gKHZvaWQpMCA6IF9fYXNzZXJ0KCIhImZvby4iIiwgX19GSUxFX18sIF9fTElORV9fKSkKKwlSZXBvcnRlZCBieSBOZWxzb24gQmVlYmVlLgorCisJKiBzcmMvb3V0cHV0LmMsIHNyYy92Y2cuYzogUmVwbGFjZSBgYXNzZXJ0ICghIml0IHN1Y2NlZWRlZCIpJyB3aXRoCisJYCNkZWZpbmUgaXRfc3VjY2VlZGVkIDAnIGFuZCBgYXNzZXJ0IChpdF9zdWNjZWVkZWQpJy4KKworMjAwMS0xMi0xNyAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKworCSogc3JjL2Jpc29uLnNpbXBsZTogRG9uJ3QgaGFyZCBjb2RlIHRoZSBza2VsZXRvbiBsaW5lIGFuZCBmaWxlbmFtZS4KKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3BhcnNlcik6IFJlbmFtZSAnbGluZScgYXMgJ291dHB1dF9saW5lJy4KKwlOZXcgbGluZSBjb3VudGVyICdza2VsZXRvbl9saW5lJyAoc2tlbGV0b24tbGluZSBtdXNjbGUpLgorCisyMDAxLTEyLTE3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogTkVXUywgZG9jL2Jpc29uLnRleGluZm8sIGRvYy9iaXNvbi4xLCBkb2MvYmlzb24ucm5oOiBEb2N1bWVudCB0aGF0CisJWVlERUJVRyBtdXN0IGJlIGRlZmluZWQgdG8gYSBub256ZXJvIHZhbHVlLgorCisJKiBzcmMvYmlzb24uc2ltcGxlICh5eXRuYW1lKTogRG8gbm90IGFzc3VtZSB0aGF0IHRoZSB1c2VyIGRlZmluZXMKKwlZWURFQlVHIHRvIGEgcHJvcGVybHkgcGFyZW50aGVzaXplZCBleHByZXNzaW9uLgorCisyMDAxLTEyLTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3N0YXRlLmggKHN0YXRlX3QpOiBSZW5hbWUgbG9va2FoZWFkcyBhcyBsb29rYWhlYWRzcC4KKwlubG9va2FoZWFkcyBpcyBhIG5ldyBtZW1iZXIuCisJQWRqdXN0IGFsbCB1c2Vycy4KKwkqIHNyYy9sYWxyLmggKG5sb29rYWhlYWRzKTogUmVtb3ZlIHRoaXMgb3JwaGFuIGRlY2xhcmF0aW9uLgorCSogc3JjL2xhbHIuYyAoaW5pdGlhbGl6ZV9sb29rYWhlYWRzKTogU2V0IG5sb29rYWhlYWRzIGZvciBlYWNoCisJc3RhdGUuCisKKzIwMDEtMTItMTcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvZmlsZXMuaCwgc3JjL2ZpbGVzLmMgKG9wZW5fZmlsZXMsIGNsb3NlX2ZpbGVzKTogUmVtb3ZlLgorCSogc3JjL21haW4uYyAobWFpbik6IERvbid0IG9wZW4vY2xvc2UgZmlsZXMsIG5vciBpbnZva2UgbGV4X2ZyZWUsCisJbGV0Li4uCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRlcik6IERvIGl0LgorCisyMDAxLTEyLTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2NvbmZsaWN0cy5jIChwcmludF9yZWR1Y3Rpb25zKTogRm9ybWF0dGluZyBjaGFuZ2VzLgorCisyMDAxLTEyLTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2NvbmZsaWN0cy5jIChmbHVzaF9zaGlmdCk6IEFsc28gYWRqdXN0IGxvb2thaGVhZHNldC4KKwkoZmx1c2hfcmVkdWNlKTogTmV3LgorCShyZXNvbHZlX3NyX2NvbmZsaWN0KTogQWRqdXN0LgorCisyMDAxLTEyLTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL291dHB1dC5jIChvdXRwdXRfb2JzdGFjayk6IEJlIHN0YXRpYyBhbmQgcmVuYW1lIGFzLi4uCisJKGZvcm1hdF9vYnN0YWNrKTogdGhpcywgdG8gYXZvaWQgYW55IGNvbmZ1c2lvbiB3aXRoIGZpbGVzLmMncworCW91dHB1dF9vYnN0YWNrLgorCSogc3JjL3JlYWRlci5oIChtdXNjbGVfb2JzdGFjayk6IE1vdmUgdG8uLi4KKwkqIHNyYy9vdXRwdXQuaDogaGVyZSwgc2luY2UgaXQncyBkZWZpbmVkIGluIG91dHB1dC5jLgorCisyMDAxLTEyLTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL291dHB1dC5jIChhY3Rpb25fcm93LCBzYXZlX2NvbHVtbiwgZGVmYXVsdF9nb3RvKQorCShzb3J0X2FjdGlvbnMsIG1hdGNoaW5nX3N0YXRlLCBwYWNrX3ZlY3Rvcik6IEJldHRlciB2YXJpYWJsZQorCWxvY2FsaXR5LgorCisyMDAxLTEyLTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL291dHB1dC5jOiBWYXJpb3VzIGZvcm1hdHRpbmcgY2hhbmdlcy4KKworMjAwMS0xMi0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9maWxlcy5jIChvdXRwdXRfZmlsZXMpOiBGcmVlIHRoZSBvdXRwdXRfb2JzdGFjay4KKwkqIHNyYy9tYWluLmMgKG1haW4pOiBDYWxsIHByaW50IGFuZCBwcmludF9ncmFwaCBjb25kaXRpb25hbGx5LgorCSogc3JjL3ByaW50LmMgKHByaW50KTogV29yayB1bmNvbmRpdGlvbmFsbHkuCisJKiBzcmMvcHJpbnRfZ3JhcGguYyAocHJpbnRfZ3JhcGgpOiBXb3JrIHVuY29uZGl0aW9uYWxseS4KKwkqIHNyYy9jb25mbGljdHMuYyAobG9nX3Jlc29sdXRpb24pOiBPdXRwdXQgb25seSBpZiB2ZXJib3NlX2ZsYWcuCisKKzIwMDEtMTItMTYgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisKKwkqIHNyYy9vdXRwdXQuYyAoYWN0aW9uc19vdXRwdXQpOiBGaXguIFdoZW4gd2UgdXNlICVuby1saW5lcywKKwl0aGVyZSBpcyBvbmUgbGVzcyBsaW5lIHBlciBhY3Rpb24uCisKKzIwMDEtMTItMTYgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGU6IFJlbW92ZSBhIHVzZWxlc3MgI2xpbmUgZGlyZWN0aXZlLgorCXMvI2xpbmUgJSVsaW5lICUlc2tlbGV0b24vI2xpbmUgJSVsaW5lICIlJXBhcnNlci1maWxlLW5hbWUiLycuCisJKiBzcmMvb3V0cHV0LmMgKGdldF9saW5lc19udW1iZXIpOiBOZXcuCisJKG91dHB1dF9wYXJzZXIpOiBBZGp1c3QsIG5vdyB0YWtlcyBjYXJlIGFib3V0IHRoZSBsaW5lcyBvZiBhCisJb3V0cHV0IG11c2NsZXMuCisJRml4IGxpbmUgbnVtYmVyaW5nLgorCShhY3Rpb25zX291dHB1dCk6IENvbXB1dGVzIHRoZSBudW1iZXIgb2YgbGluZXMgdGFrZW4gYnkgYWN0aW9ucy4KKwkob3V0cHV0X21hc3Rlcl9wYXJzZXIpOiBJbnNlcnQgbmV3IHNrZWxldG9uIHdoaWNoIGlzIHRoZSBuYW1lIG9mCisJdGhlIG91dHB1dCBwYXJzZXIgZmlsZSBuYW1lLgorCisyMDAxLTEyLTE1ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvYmlzb24uc2ltcGxlIFtZWUVSUk9SX1ZFUkJPU0VdOiBSZXN0b3JlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisKKzIwMDEtMTItMTUgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X2dyYW0pOiBLZWVwIHRyYWNrIG9mIHRoZSBoYWlyeSBvbmUuCisKKzIwMDEtMTItMTUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJTWFrZSBgbWFrZSBkaXN0Y2hlY2snIHdvcmsuCisKKwkqIGxpYi9NYWtlZmlsZS5hbSAoSU5DTFVERVMpOiBBZGQgdG9wX3NyY2Rpci9pbnRsLCBzaW5jZSBoYXNoIHVzZXMKKwlzeXN0ZW0uaCB3aGljaCB1c2VzIGxpYmdldHRleHQuaC4KKworMjAwMS0xMi0xNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9udWxsYWJsZS5jIChzZXRfbnVsbGFibGUpOiBVc2VsZXNzIHJ1bGVzIG11c3QgYmUgc2tpcHBlZCwKKwlvdGhlcndpc2UsIHNpbmNlIHdlIHJhbmdlIG92ZXIgdGhlaXIgc3ltYm9scywgd2UgbWlnaHQgbG9vayBhdCBhCisJbm9udGVybWluYWwgd2hpY2ggbm8gbG9uZ2VyIGBgZXhpc3RzJycsIGkuZS4sIGl0IGlzIG5vdCBjb3VudGVkIGluCisJYG52YXJzJywgaGVuY2Ugd2Ugb3ZlcmZsb3cgb3VyIGFycmF5cy4KKworMjAwMS0xMi0xNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlUaGUgaGVhZGVyIGNhbiBhbHNvIGJlIHByb2R1Y2VkIGRpcmVjdGx5LCB3aXRob3V0IGFueSBvYnN0YWNrIQorCVlhaG9vIQorCisJKiBzcmMvZmlsZXMuYywgc3JjL2ZpbGVzLmggKGRlZmluZXNfb2JzdGFjayk6IFJlbW92ZS4KKwkoY29tcHV0ZV9oZWFkZXJfbWFjcm8pOiBHbG9iYWwuCisJKGRlZmluZXNfb2JzdGFja19zYXZlKTogUmVtb3ZlLgorCSogc3JjL3JlYWRlci5jIChwYXJzZV91bmlvbl9kZWNsKTogTm8gbG9uZ2VyIG91dHB1dCB0bworCWRlZmluZXNfb2JzdGFjazogaXRzIGNvbnRlbnQgY2FuIGJlIGZvdW5kIGluIHRoZSBgc3R5cGUnIG11c2NsZQorCWFueXdheS4KKwkob3V0cHV0X3Rva2VuX3RyYW5zbGF0aW9ucyk6IE1lcmdlIGludG8uLi4KKwkoc3ltYm9sc19vdXRwdXQpOiB0aGlzLgorCVJlbmFtZSBhcy4uLgorCShzeW1ib2xzX3NhdmUpOiB0aGlzLgorCShyZWFkZXIpOiBBZGp1c3QuCisJKiBzcmMvb3V0cHV0LmMgKGhlYWRlcl9vdXRwdXQpOiBOZXcuCisJKG91dHB1dCk6IENhbGwgaXQuCisKKzIwMDEtMTItMTUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKHBhcnNlX3VuaW9uX2RlY2wpOiBJbnN0ZWFkIG9mIGhhbmRsaW5nIHR3byBvYnN0YWNrCisJc2ltdWx0YW5lb3VzbHksIHVzZSBvbmUgdG8gZGVmaW5lIHRoZSBgc3R5cGUnIG11c2NsZSwgYW5kIHVzZSB0aGUKKwl2YWx1ZSBvZiB0aGUgbGF0dGVyIHRvIGZpbGwgZGVmaW5lc19vYnN0YWNrLgorCShjb3B5X2NvbW1lbnQpOiBSZW1vdmUuCisJKGNvcHlfY29tbWVudDIpOiBXb3JrIGZvciBhIHNpbmdsZSBvYnN0YWNrLgorCVJlbmFtZSBhcy4uLgorCShjb3B5X2NvbW1lbnQpOiB0aGlzLgorCisyMDAxLTEyLTE1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2xleC5jLCBzcmMvbGV4LmggKHhnZXRjKTogTm8gbG9uZ2VyIHN0YXRpYy4KKwkqIHNyYy9yZWFkZXIuYyAocGFyc2VfdW5pb25fZGVjbCk6IFJldmFtcC4KKworMjAwMS0xMi0xNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlTdGlsbCBtYWtpbmcgcHJvZ3Jlc3MgaW4gc2VwYXJhdGluZyBCaXNvbiBpbnRvIChpKSBpbnB1dCwgKGlpKQorCXByb2Nlc3MsIChpaWkpIG91dHB1dDogbm93IHdlIGNhbiBkaXJlY3RseSBvdXRwdXQgdGhlIHBhcnNlciBmaWxlCisJd2l0aG91dCB1c2luZyB0YWJsZV9vYnN0YWNrIGF0IGFsbC4KKworCSogc3JjL2ZpbGVzLmMsIHNyYy9maWxlcy5oICh0YWJsZV9vYnN0YWNrKTogQnllIGJ5ZS4KKwkocGFyc2VyX2ZpbGVfbmFtZSk6IE5ldy4KKwkqIHNyYy9maWxlcy5jIChjb21wdXRlX291dHB1dF9maWxlX25hbWVzKTogQ29tcHV0ZSBpdC4KKwkqIHNyYy9vdXRwdXQuYyAoYWN0aW9uc19vdXRwdXQsIG91dHB1dF9wYXJzZXIpCisJKG91dHB1dF9tYXN0ZXJfcGFyc2VyKTogVG8gYSBmaWxlIGluc3RlYWQgb2YgYW4gb2JzdGFjay4KKworMjAwMS0xMi0xNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlBdHRhY2ggYWN0aW9ucyB0byBydWxlcywgaW5zdGVhZCBvZiBwcmUtb3V0cHV0dGluZyB0aGVtIHRvCisJYWN0aW9uc19vYnN0YWNrLgorCisJKiBzcmMvZ3JhbS5oIChydWxlX3QpOiBhY3Rpb24gYW5kIGFjdGlvbl9saW5lIGFyZSBuZXcgbWVtYmVycy4KKwkqIHNyYy9yZWFkZXIuYyAoc3ltYm9sX2xpc3QpOiBMaWtld2lzZS4KKwkoY29weV9hY3Rpb24pOiBTYXZlIHRoZSBhY3Rpb25zIHdpdGhpbiB0aGUgcnVsZS4KKwkocGFja2dyYW0pOiBTYXZlIHRoZW0gaW4gcnVsZV90YWJsZS4KKwkqIHNyYy9vdXRwdXQuYyAoYWN0aW9uc19vdXRwdXQpOiBOZXcuCisJKG91dHB1dF9wYXJzZXIpOiBVc2UgaXQgb24gYCUlYWN0aW9ucycuCisJKG91dHB1dF9ydWxlX2RhdGEpOiBEb24ndCBmcmVlIHJ1bGVfdGFibGUuCisJKG91dHB1dCk6IERvIGl0LgorCShwcmVwYXJlKTogRG9uJ3Qgc2F2ZSB0aGUgYGFjdGlvbicgbXVzY2xlLgorCSogc3JjL2Jpc29uLnNpbXBsZTogcy8lJWFjdGlvbi8lJWFjdGlvbnMvLgorCisyMDAxLTEyLTE1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3JlYWRlci5jIChjb3B5X2FjdGlvbik6IFdoZW4gLS15YWNjLCBkb24ndCBhcHBlbmQgYSBgOycKKwl0byB0aGUgdXNlciBhY3Rpb246IGxldCBpdCBmYWlsIGlmIGxhY2tpbmcuCisJU3VnZ2VzdGVkIGJ5IEFybm9sZCBSb2JiaW5zIGFuZCBUb20gVHJvbWV5LgorCisyMDAxLTEyLTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2xleC5jIChsaXRlcmFsY2hhcik6IFNpbXBseSByZXR1cm4gdGhlIGNoYXIgeW91IGRlY29kZWQsIG5vbgorCWxvbmdlciBtZXNzIGFyb3VuZCB3aXRoIG9ic3RhY2tzIGFuZCBpbnQgcG9pbnRlcnMuCisJQWRqdXN0IGFsbCBjYWxsZXJzLgorCisyMDAxLTEyLTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2xleC5jIChsaXRlcmFsY2hhcik6IERvbid0IGVzY2FwZSB0aGUgc3BlY2lhbCBjaGFyYWN0ZXJzLAorCWp1c3QgZGVjb2RlIHRoZW0sIGFuZCBrZWVwIHRoZW0gYXMgY2hhciAoYmVmb3JlLCBlb2wgd2FzIG91dHB1dCBhcworCXRoZSAyIGNoYXIgc3RyaW5nIGBcbicgZXRjLikuCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9ydWxlX2RhdGEpOiBVc2UgcXVvdGVhcmcgdG8gb3V0cHV0IHRoZQorCXRva2VuIHN0cmluZ3MuCisKKzIwMDEtMTItMTMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBzcmMvYmlzb24uc2ltcGxlIChZWVNJWkVfVCwgWVlTVEFDS19BTExPQywgWVlTVEFDS19GUkVFKToKKwlEbyBub3QgaW5mcmluZ2Ugb24gdGhlIGdsb2JhbCB1c2VyIG5hbWVzcGFjZSB3aGVuIHVzaW5nIEMrKy4KKwkoWVlGUFJJTlRGLCBZWVNUREVSUik6IE5ldyBtYWNyb3MsIG5lZWRlZCBmb3IgdGhlIGFib3ZlLgorCUFsbCB1c2VzIG9mIGBmcHJpbnRmJyBhbmQgYHN0ZGVycicgY2hhbmdlZC4KKworCSogZG9jL2Jpc29uLnRleGluZm86IERvY3VtZW50IFlZRlBSSU5URiwgWVlTVERFUlIuCisKKzIwMDEtMTItMTMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJVGhlIGNvbXB1dGF0aW9uIG9mIG51bGxhYmxlIGlzIGJyb2tlbjogaXQgZG9lc24ndCBoYW5kbGUgZW1wdHkKKwlSSFMncyBwcm9wZXJseS4KKworCSogdGVzdHMvdG9ydHVyZS5hdCAoR05VIEFXSyBHcmFtbWFyKTogTmV3LgorCSogdGVzdHMvc2V0cy5hdCAoTnVsbGFibGUpOiBOZXcuCisJKiBzcmMvbnVsbGFibGUuYyAoc2V0X251bGxhYmxlKTogSW5zdGVhZCBvZiBibGluZGx5IGxvb3Bpbmcgb3ZlcgorCWByaXRlbXMnLCBsb29wIG92ZXIgdGhlIHJ1bGVzLCBhbmQgdGhlbiBvdmVyIHRoZWlyIHJocydzLgorCisJV29yayBhcm91bmQgQXV0b3Rlc3QgYnVncy4KKworCSogc3JjL3dhcnNoYWxsLmMgKGJpdG1hdHJpeF9wcmludCk6IERvbid0IHVzZSBgKy0tKycgYXMgdGFibGUKKwlmcmFtZSwgYmVjYXVzZSBBdXRvdGVzdCB1bmRlcnN0YW5kIGxpbmVzIHN0YXJ0aW5nIHdpdGggYSBgKycgYXMKKwl0cmFjZXMgZnJvbSB0aGUgc2hlbGwuICBUaGVuLCB0aGV5IGFyZSBub3QgcHJvY2Vzc2VkIHByb3Blcmx5LgorCUFkbWl0dGVkbHkgYW4gQXV0b3Rlc3QgYnVnLCBidXQgd2UgZG9uJ3QgaGF2ZSB0aW1lIHRvIHdhaXQgZm9yCisJQXV0b3Rlc3QgdG8gY2F0Y2ggdXAuCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChCcm9rZW4gQ2xvc3VyZSk6IEFkanVzdCB0byB0aGUgbmV3IHRhYmxlCisJZnJhbWVzLgorCU1vdmUgdG8uLi4KKwkqIHRlc3RzL3NldHMuYXQ6IGhlcmUuCisKKzIwMDEtMTItMTMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvY2xvc3VyZS5jIChjbG9zdXJlKTogVXNlIG5ydWxlcyBpbnN0ZWFkIG9mIHBsYXlpbmcgdHJpY2tzCisJd2l0aCBCSVRTX1BFUl9XT1JELgorCisyMDAxLTEyLTEzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3ByaW50LmMgKHByaW50X2FjdGlvbnMpOiBPdXRwdXQgdGhlIGhhbmRsaW5nIG9mIGAkJyBhcyB0aGUKKwl0cmFjZXMgZG86IHNoaWZ0aW5nIHRoZSB0b2tlbiBFT0YuICBCZWZvcmUgRU9GIHdhcyB0cmVhdGVkIGFzIGEKKwlub250ZXJtaW5hbC4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQ6IEFkanVzdCBzb21lIHRlc3RzLgorCSogc3JjL3ByaW50X2dyYXBoLmMgKHByaW50X2NvcmUpOiBDb21wbGV0ZSB0aGUgc2V0IG9mIGl0ZW1zIHZpYQorCWNsb3N1cmUuICBUaGUgbmV4dC10by1maW5hbCBhbmQgZmluYWwgc3RhdGVzIGFyZSBzdGlsbCB1bnNhdGlzZnlpbmcsCisJYnV0IHRoYXQncyB0byBiZSBhZGRyZXNzZWQgZWxzZXdoZXJlLgorCU5vIGxvbmdlciBvdXRwdXQgdGhlIHJ1bGUgbnVtYmVycywgYnV0IGRvIG91dHB1dCB0aGUgc3RhdGUgbnVtYmVyLgorCUEgc2luZ2xlIGxvb3AgZm9yIHRoZSBzaGlmdHMgKyBnb3RvcyBpcyBlbm91Z2gsIGJ1dCBwaWNrZWQgYQorCWRpc3RpbmN0IGNvbG9yIGZvciBlYWNoLgorCShwcmludF9ncmFwaCk6IEluaXRpYWxpemUgYW5kIGZpbmFsaXplIGNsb3N1cmUuCisKKzIwMDEtMTItMTMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRncmFtKTogUmVtb3ZlIGRlYWQgY29kZSwgYW4gc3RyaXAgdXNlbGVzcworCWJyYWNlcy4KKwkoZ2V0X3R5cGUpOiBSZW1vdmUsIHVudXNlZC4KKworMjAwMS0xMi0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9jb21wbGFpbi5oLCBzcmMvY29tcGxhaW4uYzogUmVtb3ZlIGVycm9yX29uZV9wZXJfbGluZSwgcmVseQorCW9uIHRoYXQgb2YgbGliL2Vycm9yLmMuCisKKzIwMDEtMTItMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJU29tZSBob3N0cyBkb24ndCBsaWtlIGAvJyBpbiBpbmNsdWRlcy4KKworCSogc3JjL3N5c3RlbS5oOiBJbmNsdWRlIGxpYmdldHRleHQuaCB3aXRob3V0IHF1YWxpZnlpbmcgdGhlIHBhdGguCisJKiBzcmMvTWFrZWZpbGUuYW0gKElOQ0xVREVTKTogQWRkICQodG9wX3NyY2RpcikvaW50bCwgcmVtb3ZlCisJJCh0b3Bfc3JjZGlyKS4KKworMjAwMS0xMi0xMSAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKworCSogc3JjL291dHB1dC5jIChvdXRwdXRfcGFyc2VyKTogUmVtb3ZlIHVzZWxlc3MgbXVzY2xlLgorCisyMDAxLTEyLTExICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvYmlzb24uc2ltcGxlOiBSZW1vdmUgI2xpbmUganVzdCBiZWZvcmUgJSVlcGlsb2d1ZS4gSXQKKwlpcyBub3cgaGFuZGxlZCBpbiAuLi4KKwkqIHNyYy9yZWFkZXIuYyAocmVhZF9hZGRpdGlvbm5hbF9jb2RlKTogQWRkIHRoZSBvdXRwdXQgb2YgYQorCSNsaW5lIGZvciB0aGUgZXBpbG9ndWUuCisKKzIwMDEtMTItMTAgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisKKwkqIHNyYy9yZWFkZXIuYyAoY29weV9kZWZpbml0aW9uKTogUmUtdXNlIENQUC1vdXRlZCBjb2RlIHdoaWNoCisJcmVwbGFjZSBwcmVjZWRlbnQgcmVtb3ZlLgorCSogc3JjL2Jpc29uLnNpbXBsZTogUmVtb3ZlICNsaW5lIGJlZm9yZSAlJXByb2xvZ3VlIGJlY2F1c2UKKwklJWlucHV0LWxpbmUgaXMgd3JvbmcgYXQgdGhpcyB0aW1lLgorCisyMDAxLTEyLTEwICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKHN5bWJvbHNfb3V0cHV0KTogQ2xlYW4gdXAuCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9ncmFtLCBvdXRwdXQpOiBDbGVhbiB1cC4KKworMjAwMS0xMi0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9sYWxyLmMgKGluaXRpYWxpemVfbG9va2FoZWFkcyk6IE5ldy4gIEV4dHJhY3RlZCBmcm9tLi4uCisJKiBzcmMvTFIwLmMgKHNldF9zdGF0ZV90YWJsZSk6IGhlcmUuCisJKiBzcmMvbGFsci5jIChsYWxyKTogQ2FsbCBpdC4KKworMjAwMS0xMi0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9zdGF0ZS5oIChzaGlmdHMpOiBSZW1vdmUgdGhlIGBudW1iZXInIG1lbWJlcjogc2hpZnRzIGFyZQorCWF0dGFjaGVkIHRvIHN0YXRlLCBoZW5jZSBubyBsb25nZXIgbmVlZCB0byBiZSBsYWJlbGxlZCB3aXRoIGEKKwlzdGF0ZSBudW1iZXIuCisKKzIwMDEtMTItMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJTm93IHRoYXQgc3RhdGVzIGhhdmUgYSBjb21wbGV0ZSBzZXQgb2YgbWVtYmVycywgdGhlIGxpbmtlZCBsaXN0IG9mCisJc2hpZnRzIGlzIHVzZWxlc3M6IGp1c3QgZmlsbCBkaXJlY3RseSB0aGUgc3RhdGUncyBzaGlmdHMgbWVtYmVyLgorCisJKiBzcmMvc3RhdGUuaCAoc2hpZnRzKTogUmVtb3ZlIHRoZSBgbmV4dCcgbWVtYmVyLgorCSogc3JjL0xSMC5jIChmaXJzdF9zdGF0ZSwgbGFzdF9zdGF0ZSk6IFJlbW92ZS4KKwlBZGp1c3QgdGhlIGNhbGxlcnMuCisJKGF1Z21lbnRfYXV0b21hdG9uKTogRG9uJ3QgbG9vayBmb3IgdGhlIHNoaWZ0cyB0aGF0IG11c3QgYmUgYWRkZWQKKwlhIHNoaWZ0IG9uIEVPRjogaXQgaXMgdGhvc2Ugb2YgdGhlIHN0YXRlIHdlIGxvb2tlZCBmb3IhICBCdXQgbm93LAorCXNpbmNlIHNoaWZ0cyBhcmUgYXR0YWNoZWQsIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQgdG8gbG9va2luZworCW1lcmVseSBieSBpdHMgaWQ6IGl0cyBudW1iZXIuCisKKzIwMDEtMTItMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvTFIwLmMgKGF1Z21lbnRfYXV0b21hdG9uKTogQmV0dGVyIHZhcmlhYmxlIGxvY2FsaXR5LgorCVJlbW92ZSBhbiBpbXBvc3NpYmxlIGJyYW5jaDogaWYgdGhlcmUgaXMgYSBzdGF0ZSBjb3JyZXNwb25kaW5nIHRvCisJdGhlIHN0YXJ0IHN5bWJvbCBiZWluZyBzaGlmdGVkLCB0aGVuIHRoZXJlIGlzIHNoaWZ0IGZvciB0aGUgc3RhcnQKKwlzeW1ib2wgZnJvbSB0aGUgaW5pdGlhbCBzdGF0ZS4KKworMjAwMS0xMi0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9MUjAuYyAoYXVnbWVudF9hdXRvbWF0b24pOiBDYWxsIGBpbnNlcnRfZW9mX3NoaWZ0aW5nX3N0YXRlJworCW9ubHkgd2hlbiBhcHByb3ByaWF0ZTogd2hlbiBpbnNlcnRfc3RhcnRfc2hpZnRpbmdfc3RhdGUnIGlzIG5vdAorCWludm9rZWQuCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChSdWxlIExpbmUgTnVtYmVycyk6IEFkanVzdC4KKworMjAwMS0xMi0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9MUjAuYyAoYXVnbWVudF9hdXRvbWF0b24pOiBOb3cgdGhhdCBhbGwgc3RhdGVzIGhhdmUgc2hpZnRzLAorCW1lcmdlIHRoZSB0d28gY2FzZXMgYWRkaXRpb24gc2hpZnRzIHRvIHRoZSBpbml0aWFsIHN0YXRlLgorCisyMDAxLTEyLTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2xhbHIuYyAoc2V0X3N0YXRlX3RhYmxlKTogTW92ZSB0by4uLgorCSogc3JjL0xSMC5jOiBoZXJlLgorCSogc3JjL2xhbHIuYyAobGFscik6IERvbid0IGNhbGwgaXQuLi4KKwkqIHNyYy9MUjAuYyAoZ2VuZXJhdGVfc3RhdGVzKTogZG8gaXQuCisJKiBzcmMvTFIwLmggKGZpcnN0X3N0YXRlKTogUmVtb3ZlLCBvbmx5IHRoZSB0YWJsZSBpcyB1c2VkLgorCisyMDAxLTEyLTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL0xSMC5oIChmaXJzdF9zaGlmdCwgZmlyc3RfcmVkdWN0aW9uKTogUmVtb3ZlLgorCSogc3JjL2xhbHIuYzogRG9uJ3QgdXNlIGZpcnN0X3NoaWZ0OiBmaW5kIHNoaWZ0cyB0aHJvdWdoIHRoZQorCXN0YXRlcy4KKworMjAwMS0xMi0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9MUjAuYzogQXR0YWNoIHNoaWZ0cyB0byBzdGF0ZXMgYXMgc29vbiBhcyB0aGV5IGFyZQorCWNvbXB1dGVkLgorCSogc3JjL2xhbHIuYyAoc2V0X3N0YXRlX3RhYmxlKTogSW5zdGVhZCBvZiBhc3NpZ25pbmcgc2hpZnRzIHRvCisJc3RhdGUsIGp1c3QgYXNzZXJ0IHRoYXQgdGhlIG1hcHBpbmcgd2FzIHByb3Blcmx5IGRvbmUuCisKKzIwMDEtMTItMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvTFIwLmMgKGluc2VydF9zdGFydF9zaGlmdCk6IFJlbmFtZSBhcy4uLgorCShpbnNlcnRfc3RhcnRfc2hpZnRpbmdfc3RhdGUpOiB0aGlzLgorCShpbnNlcnRfZW9mX3NoaWZ0aW5nX3N0YXRlLCBpbnNlcnRfYWNjZXB0aW5nX3N0YXRlKTogTmV3LgorCShhdWdtZW50X2F1dG9tYXRvbik6IEFkanVzdC4KKwlCZXR0ZXIgbG9jYWxpdHkgb2YgdGhlIHZhcmlhYmxlcy4KKwlXaGVuIGxvb2tpbmcgaWYgdGhlIHN0YXJ0X3N5bWJvbCBpcyBzaGlmdGVkIGZyb20gdGhlIGluaXRpYWwKKwlzdGF0ZSwgdXNpbmcgYHdoaWxlICguLi4gc3ltYm9sICE9IHN0YXJ0X3N5bWJvbCAuLi4pJyBzb3VuZHMKKwliZXR0ZXIgdGhhbiBgd2hpbGUgKC4uLiBzeW1ib2wgPCBzdGFydF9zeW1ib2wgLi4uKSc6IElmIGZhaWwKKwl0byBzZWUgaG93IHRoZSBvcmRlciBiZXR3ZWVuIHN5bWJvbHMgY291bGQgYmUgcmVsZXZhbnQhCisKKzIwMDEtMTItMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvZ2V0YXJncy5oOiBEb24ndCBkZWNsYXJlIGBzcGVjX25hbWVfcHJlZml4JyBhbmQKKwlgc3BlY19maWxlX3ByZWZpeCcsIGRlY2xhcmVkIGJ5IHNyYy9maWxlcy5oLgorCSogc3JjL2ZpbGVzLmMsIHNyYy9maWxlcy5oOiBEZWZhdWx0IGZvciBzcGVjX25hbWVfcHJlZml4IGlzICJ5eSIuCisJKiBzcmMvbXVzY2xlX3RhYi5jIChtdXNjbGVfaW5pdCk6IERlZmF1bHQgcHJlZml4IHRvIE5VTEwuCisJKiBzcmMvb3V0cHV0LmMgKHByZXBhcmUpOiBBZGp1c3QuCisJKiBzcmMvcmVhZGVyLmMgKHN5bWJvbHNfb3V0cHV0KTogTGlrZXdpc2UuCisJKiBzcmMvdm1zZ2V0YXJncy5jOiBWYWd1ZWx5IGFkanVzdCwgYnV0IHdobyBjYXJlcz8KKworMjAwMS0xMi0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9tdXNjbGVfdGFiLmMgKG11c2NsZV9pbml0KTogTlVMTCBpcyBhIGJldHRlciBkZWZhdWx0IHRoYW4KKwlgIjAiJy4KKworMjAwMS0xMi0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9yZWFkZXIuYyAocmVhZGVyKTogQ2FsbGluZyBzeW1ib2xzX291dHB1dCBvbmNlIGlzIGVub3VnaC4KKworMjAwMS0xMi0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlOb3cgdGhhdCBzdGF0ZXMgaGF2ZSBhIGNvbXBsZXRlIHNldCBvZiBtZW1iZXJzLCB0aGUgbGlua2VkIGxpc3Qgb2YKKwlyZWR1Y3Rpb25zIGlzIHVzZWxlc3M6IGp1c3QgZmlsbCBkaXJlY3RseSB0aGUgc3RhdGUncyByZWR1Y3Rpb25zCisJbWVtYmVyLgorCisJKiBzcmMvc3RhdGUuaCAoc3RydWN0IHJlZHVjdGlvbnMpOiBSZW1vdmUgbWVtYmVyIGBudW1iZXInIGFuZAorCWBuZXh0Jy4KKwkqIHNyYy9MUjAuYyAoZmlyc3RfcmVkdWN0aW9uLCBsYXN0X3JlZHVjdGlvbik6IFJlbW92ZS4KKwkoc2F2ZV9yZWR1Y3Rpb25zKTogRG9uJ3QgbGluayB0aGUgbmV3IHJlZHVjdGlvbnMsIHN0b3JlIHRoZW0gaW4KKwl0aGlzX3N0YXRlLgorCSogc3JjL2xhbHIuYyAoc2V0X3N0YXRlX3RhYmxlKTogTm8gbmVlZCB0byBhdHRhY2ggcmVkdWN0aW9ucyB0bworCXN0YXRlcywgaXQncyBhbHJlYWR5IGRvbmUuCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9hY3Rpb25zKTogTm8gbG9uZ2VyIGZyZWUgdGhlIHNoaWZ0cywgdGhlbgorCXRoZSByZWR1Y3Rpb25zLCB0aGVuIHRoZSBzdGF0ZXM6IGZyZWUgYWxsIHRoZSBzdGF0ZXMgYW5kIHRoZWlyCisJbWVtYmVycy4KKworMjAwMS0xMi0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9vcHRpb25zLmMgKE9QVE4sIERSVFYsIEJPVEgpOiBOZXcuCisJKG9wdGlvbl90YWJsZSk6IFVzZSB0aGVtLgorCisJKiBzcmMvbXVzY2xlX3RhYi5jOiBEb24ndCBpbmNsdWRlIHhhbGxvYy5oIGFuZCBzdHJpbmcuaDogdGhhdCdzCisJdGhlIGpvYiBvZiBzeXN0ZW0uaC4KKwkqIHNyYy9vcHRpb25zLmM6IERvbid0IGluY2x1ZGUgc3RkaW8uaCBhbmQgeGFsbG9jLmggZm9yIHRoZSBzYW1lCisJcmVhc29ucy4KKworMjAwMS0xMi0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0LCBwcmVwYXJlKTogTWFrZSBzdXJlIHRoZSB2YWx1ZXMgb2YgdGhlCisJbXVzY2xlcyBgYWN0aW9uJyBhbmQgYHByb2xvZ3VlJyBhcmUgMC10ZXJtaW5hdGVkLgorCisyMDAxLTEyLTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCUNsZWFuIHVwIEdDQyB3YXJuaW5ncy4KKworCSogc3JjL3JlYWRlci5jIChjb3B5X2FjdGlvbik6IGBidWYnIGlzIG5vdCB1c2VkLgorCShwYXJzZV9za2VsX2RlY2wpOiBCZSBzdGF0aWMuCisJKiBzcmMvbXVzY2xlX3RhYi5jIChtaGFzaDEsIG1oYXNoMiwgbXVzY2xlX2luc2VydCk6IFByZXNlcnZlIGBjb25zdCcuCisJKiBzcmMvb3B0aW9ucy5oIChjcmVhdGVfbG9uZ19vcHRpb25fdGFibGUpOiBIYXZlIGEgcmVhbCBwcm90b3R5cGUuCisJKiBsaWIvaGFzaC5jLCBsaWIvaGFzaC5oIChoYXNoX2luc2VydCwgaGFzaF9pbnNlcnRfYXQsIGhhc2hfZGVsZXRlKQorCShoYXNoX2RlbGV0ZV9hdCk6IFJldHVybiBjb25zdCB2b2lkICouCisJQWRqdXN0IGNhc3RzIHRvIHByZXNlcnZlIHRoZSBjb25zdC4KKworMjAwMS0xMi0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGNvbmZpZ3VyZS5pbjogUmVxdWlyZSAyLjUyZy4KKwlNNCBpcyBub3QgbmVlZGVkLCBidXQgQVVUT000VEUgaXMuCisJKiBtNC9tNC5tNDogUmVtb3ZlLgorCSogdGVzdHMvTWFrZWZpbGUuYW06IEFkanVzdC4KKworMjAwMS0xMi0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlPbmUgc3RydWN0dXJlIGZvciBzdGF0ZXMgaXMgZW5vdWdoLCBldmVuIHRob3VnaCB0aGVvcmV0aWNhbGx5CisJdGhlcmUgYXJlIExSKDApIHN0YXRlcyBhbmQgTEFMUigxKSBzdGF0ZXMuCisKKwkqIHNyYy9sYWxyLmggKHN0YXRlX3QpOiBSZW1vdmUuCisJKHN0YXRlX3RhYmxlKTogQmUgc3RhdGVfdCAqKiwgbm90IHN0YXRlX3QgKi4KKwkqIHNyYy9zdGF0ZS5oIChjb3JlLCBDT1JFX0FMTE9DKTogUmVuYW1lIGFzLi4uCisJKHN0YXRlX3QsIFNUQVRFX0FMTE9DKTogdGhpcy4KKwlBZGQgdGhlIExBTFIoMSkgbWVtYmVyczogc2hpZnRzLCByZWR1Y3Rpb25zLCBlcnJzLgorCSogc3JjL0xSMC5jIChzdGF0ZV90YWJsZSk6IFJlbmFtZSBhcy4uLgorCShzdGF0ZV9oYXNoKTogdGhpcywgdG8gYXZvaWQgbmFtZSBjbGFzaGVzIHdpdGggdGhlIGdsb2JhbAorCWBzdGF0ZV90YWJsZScuCisJKiBzcmMvcHJpbnRfZ3JhcGguYywgc3JjL0xSMC5jLCBzcmMvTFIwLmgsIHNyYy9jb25mbGljdHMuYworCSogc3JjL2xhbHIuYywgc3JjL2xhbHIuaCwgc3JjL291dHB1dC5jLCBzcmMvcHJpbnQuYzogQWRqdXN0LgorCisyMDAxLTEyLTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCUJpc29uIGR1bXBzIGNvcmUgb24gYmFzaC55LgorCVJlcG9ydGVkIGJ5IFBhc2NhbCBCYXJ0LgorCisJKiBzcmMvd2Fyc2hhbGwuYyAoYml0bWF0cml4X3ByaW50KTogTmV3LgorCShUQyk6IFVzZSBpdC4KKwlXaGVuIHBlcmZvcm1pbmcgYSB0cmFuc2l0aXZlIGNsb3N1cmUgUihpLCBqKSAmJiBSKGosIGspID0+IFIoaSwgayksCisJaiBtdXN0IGJlIHRoZSBvdXRlciBsb29wLgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoQnJva2VuIENsb3N1cmUpOiBOZXcuCisKKzIwMDEtMTItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiB0ZXN0cy9hdGxvY2FsLmluIChDUFBGTEFHUyk6IERvIG5vdCBsZWF2ZSBhIHNwYWNlIGJldHdlZW4gLUkgYW5kCisJaXRzIGFyZ3VtZW50LgorCVJlcG9ydGVkIGJ5IFBldGVyIEhhbW9yc2t5LgorCisyMDAxLTEyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2NvbmZsaWN0cy5jIChlcnJfdGFibGUpOiBSZW1vdmUuCisJKHJlc29sdmVfc3JfY29uZmxpY3QpOiBBZGp1c3QuCisJKiBzcmMvbGFsci5oIChzdGF0ZV90LnJlZHVjdGlvbl90YWJsZSwgc3RhdGVfdC5zaGlmdF90YWJsZSk6CisJUmVuYW1lIGFzLi4uCisJKHN0YXRlX3QucmVkdWN0aW9ucywgc3RhdGVfdC5zaGlmdHMpOiB0aGlzLgorCisyMDAxLTEyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3JlZHVjZS5jIChyZWR1Y2VfZ3JhbW1hcl90YWJsZXMpOiBObyBsb25nZXIgZGlzYWJsZSB0aGUKKwlyZW1vdmFsIG9mIHVzZWxlc3MgcnVsZXMgdmlhIENQUCBidXQgdmlhIGBpZiAoMCknLCBzbyB0aGF0IHRoZQorCWNvbXBpbGVyIHN0aWxsIGNoZWNrIHRoZSBjb2RlIGlzIHZhbGlkLgorCUZvciBpbnN0YW5jZSwgaXQgc2hvdWxkIGhhdmUgbm90aWNlZCBgcmxpbmUnIG5vIGxvbmdlciBleGlzdHM6IHVzZQorCXRoZSBgbGluZScgbWVtYmVyIG9mIHJ1bGVfdC4KKwkqIHNyYy9ncmFtLmMgKGR1bW15LCBybGluZSk6IFJlbW92ZSwgdW51c2VkLgorCisyMDAxLTEyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL291dHB1dC5jIChwYWNrX3ZlY3Rvcik6IFVzZSBhc3NlcnQsIG5vdCBiZXJyb3IuCisJKiBzcmMvbWFpbi5jIChiZXJyb3IpOiBSZW1vdmUsIHVudXNlZC4KKworMjAwMS0xMi0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlOZXcgZXhwZXJpbWVudGFsIGZlYXR1cmU6IGlmIC0tdmVyYm9zZSAtLXRyYWNlIG91dHB1dCBhbGwgdGhlCisJaXRlbXMgb2YgYSBzdGF0ZSwgbm90IG9ubHkgaXRzIGtlcm5lbC4KKworCSogc3JjL3ByaW50LmMgKHByaW50X2NvcmUpOiBJZiBgdHJhY2VfZmxhZycsIHRoZW4gaW52b2tlIGNsb3N1cmUKKwliZWZvcmUgb3V0cHV0dGluZyB0aGUgaXRlbXMgb2YgdGhlIHN0YXRlIChwcmludF9jb3JlIGlzIG5vIGxvbmdlcgorCWEgY29ycmVjdCBuYW1lIHRoZW0pLgorCShwcmludF9yZXN1bHRzKTogSW52b2tlIG5ld19jbG9zdXJlL2ZyZWVfY2xvc3VyZSBpZiBuZWVkZWQuCisKKzIwMDEtMTItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvTFIwLmMgKG5ld19pdGVtc2V0cyk6IFVzZSBuc2hpZnRzIG9ubHksIG5vdCBzaGlmdGNvdW50LgorCSogc3JjL2Nsb3N1cmUuYywgc3JjL2Nsb3N1cmUuaCAoaXRlbXNldHNpemUpOiBSZW5hbWUgYXMuLi4KKwkobml0ZW1zZXQpOiBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgcmVzdCBvZiB0aGUgcHJvamVjdC4KKworMjAwMS0xMi0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9jbG9zdXJlLmMgKHByaW50X2Nsb3N1cmUpOiBJbXByb3ZlLgorCShjbG9zdXJlKTogVXNlIGl0IGZvciBwcmludGluZyBpbnB1dCBhbmQgb3V0cHV0LgorCisyMDAxLTEyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2Nsb3N1cmUuYyAoRklSU1RTLCBGREVSSVZFUyk6IEFkanVzdCB0byByZWFsaXR5OiB0aGV5IGFyZQorCWluZGV4ZWQgYnkgbm9udGVybWluYWxzLgorCisyMDAxLTEyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3dhcnNoYWxsLmMgKFRDLCBSVEMpOiBEZS1vYnNmdWNhdGUgKHNvdXJjZSByZWR1Y2VkIHRvIDIyJSBvZgorCXdoYXQgaXQgd2FzISkuCisJKiBzcmMvd2Fyc2hhbGwuaDogUmVtb3ZlIGFjY2lkZW50YWwgZHVwbGljYXRpb24gb2YgdGhlIGNvbnRlbnQuCisKKzIwMDEtMTItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvY2xvc3VyZS5jIChzZXRfZmRlcml2ZXMpOiBEZS1vYmZ1c2NhdGUuCisKKzIwMDEtMTItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvY2xvc3VyZS5jIChwcmludF9maXJzdHMsIHByaW50X2ZkZXJpdmVzKTogRGUtb2JmdXNjYXRlLgorCisyMDAxLTEyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2Nsb3N1cmUuYyAoc2V0X2ZpcnN0cyk6IERlLW9iZnVzY2F0ZS4KKworMjAwMS0xMi0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9vdXRwdXQuYyAoYWN0aW9uX3Jvdyk6IERlLW9iZnVzY2F0ZQorCXVzaW5nIHRoZSBnb29kIG8nIHRlY2huaXF1ZXM6IGFycmF5cyBub3QgcG9pbnRlcnMsIHZhcmlhYmxlCisJbG9jYWxpdHksIEJJVElTU0VULCBSRVNFVEJJVCBldGMuCisKKzIwMDEtMTItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJUGVzc2ltaXplIHRoZSBjb2RlIHRvIHNpbXBsaWZ5IGl0OiBmcm9tIG5vdyBvbiwgYWxsIHRoZSBzdGF0ZXMKKwloYXZlIGEgdmFsaWQgU0hJRlRTLCB3aGljaCBOU0hJRlRTIGlzIHBvc3NpYmx5IDAuCisKKwkqIHNyYy9MUjAuYyAoc2hpZnRzX25ldyk6IEJlIGdsb2JhbCBhbmQgbW92ZSB0by4uCisJKiBzcmMvc3RhdGUuYywgc3JjL3N0YXRlLmg6IGhlcmUuCisJKiBzcmMvY29uZmxpY3RzLCBzcmMvbGFsci5jLCBzcmMvb3V0cHV0LmMsIHNyYy9wcmludC5jLAorCSogc3JjL3ByaW50X2dyYXBoOiBBZGp1c3QuCisKKzIwMDEtMTItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvc3RhdGUuaCAoU0hJRlRfRElTQUJMRSwgU0hJRlRfSVNfRElTQUJMRUQpOiBOZXcuCisJKiBzcmMvY29uZmxpY3RzLmM6IFVzZSBpdC4KKwlSZXN0b3JlIGEgZmV3IG1pc3NpbmcgYGlmICghU0hJRlRfSVNfRElTQUJMRUQpJyB3aGljaCB3ZXJlCisJaW5jb3JyZWN0bHkgYGBzaW1wbGlmaWVkJycuCisKKzIwMDEtMTItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvY29uZmxpY3RzLmMgKGZsdXNoX3NoaWZ0LCByZXNvbHZlX3NyX2NvbmZsaWN0KTogRGUtb2JmdXNjYXRlCisJdXNpbmcgdGhlIGdvb2QgbycgdGVjaG5pcXVlczogYXJyYXlzIG5vdCBwb2ludGVycywgdmFyaWFibGUKKwlsb2NhbGl0eSwgQklUSVNTRVQsIFJFU0VUQklUIGV0Yy4KKworMjAwMS0xMi0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9zdGF0ZS5oIChTSElGVF9TWU1CT0wpOiBOZXcuCisJKiBzcmMvY29uZmxpY3RzLmM6IFVzZSBpdCB0byBkZW9iZnVzY2F0ZS4KKworMjAwMS0xMi0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9jb25mbGljdHMuYyAoY291bnRfc3JfY29uZmxpY3RzLCBjb3VudF9ycl9jb25mbGljdHMpCisJKHByaW50X3JlZHVjdGlvbnMpOiBEZS1vYmZ1c2NhdGUgdXNpbmcgdGhlIGdvb2QgbycgdGVjaG5pcXVlczoKKwlhcnJheXMgbm90IHBvaW50ZXJzLCB2YXJpYWJsZSBsb2NhbGl0eSwgQklUSVNTRVQuCisKKzIwMDEtMTItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvY29uZmxpY3RzLmMgKHByaW50X3JlZHVjdGlvbnMpOiBBcnJheXMsIG5vdCBwb2ludGVycy4KKwlVc2UgQklUSVNTRVQuCisKKzIwMDEtMTItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvY29uZmxpY3RzLmMgKHByaW50X3JlZHVjdGlvbnMpOiBQZXNzaW1pemUsIGJ1dCBjbGFyaWZ5LgorCisyMDAxLTEyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2NvbmZsaWN0cy5jIChwcmludF9yZWR1Y3Rpb25zKTogSW1wcm92ZSB2YXJpYWJsZSBsb2NhbGl0eS4KKworMjAwMS0xMi0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9jb25mbGljdHMuYyAocHJpbnRfcmVkdWN0aW9ucyk6IFBlc3NpbWl6ZSwgYnV0IGNsYXJpZnkuCisKKzIwMDEtMTItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvY29uZmxpY3RzLmMgKHByaW50X3JlZHVjdGlvbnMpOiBJbXByb3ZlIHZhcmlhYmxlIGxvY2FsaXR5LgorCisyMDAxLTEyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3N0YXRlLmggKFNISUZUX0lTX0VSUk9SLCBTSElGVF9JU19HT1RPLCBTSElGVF9JU19TSElGVCk6IE5ldy4KKwkqIHNyYy9sYWxyLmM6IFVzZSB0aGVtLgorCisyMDAxLTEyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL0xSMC5jIChhdWdtZW50X2F1dG9tYXRvbik6IEZvcm1hdHRpbmcgY2hhbmdlcy4KKwlCZXR0ZXIgdmFyaWFibGUgbG9jYWxpdHkuCisKKzIwMDEtMTItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvbGFsci5jIChtYXRyaXhfcHJpbnQpOiBOZXcuCisJKHRyYW5zcG9zZSk6IFVzZSBpdC4KKwlVc2UgYXJyYXlzIGluc3RlYWQgb2YgcG9pbnRlcnMuCisKKzIwMDEtMTItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvbGFsci5jIChtYXhyaHMpOiBNb3ZlIHRvLi4uCisJKiBzcmMvZ3JhbS5jLCBzcmMvZ3JhbS5oIChyaXRlbV9sb25nZXN0X3Jocyk6IGhlcmUuCisJKiBzcmMvbGFsci5jIChidWlsZF9yZWxhdGlvbnMpOiBBZGp1c3QuCisKKzIwMDEtMTItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvbGFsci5jICh0cmFuc3Bvc2UpOiBGcmVlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHRvIHRoZQorCWFyZ3VtZW50LCBhcyBpdCBpcyByZXBsYWNlZCBieSB0aGUgcmVzdWx0cyBieSB0aGUgdW5pcXVlIGNhbGxlci4KKwkoYnVpbGRfcmVsYXRpb25zKTogTWVyZWx5IGludm9rZSB0cmFuc3Bvc2U6IGl0IGhhbmRsZXMgdGhlIG1lbW9yeQorCWRlYWxsb2NhdGlvbi4KKwlJbXByb3ZlIHZhcmlhYmxlIGxvY2FsaXR5LgorCUF2b2lkIHZhcmlhYmxlcyB1c2VkIGFzIG1lcmUgYWJicmV2aWF0aW9ucy4KKwkoY29tcHV0ZV9sb29rYWhlYWRzKTogVXNlIGFycmF5cyBpbnN0ZWFkIG9mIHBvaW50ZXJzLgorCisyMDAxLTEyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2xhbHIuYyAoaW5pdGlhbGl6ZV9GKTogSW1wcm92ZSB2YXJpYWJsZSBsb2NhbGl0eS4KKwlBdm9pZCB2YXJpYWJsZXMgdXNlZCBhcyBtZXJlIGFiYnJldmlhdGlvbnMuCisKKzIwMDEtMTItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvZGVyaXZlcy5jIChwcmludF9kZXJpdmVzKTogRGlzcGxheSB0aGUgcnVsZW5vLgorCSogc3JjL2xhbHIuYyAoaW5pdGlhbGl6ZV9GLCB0cmFuc3Bvc2UpOiBCZXR0ZXIgdmFyaWFibGUgbG9jYWxpdHkKKwl0byBpbXByb3ZlIHJlYWRhYmlsaXR5LgorCUF2b2lkIHZhcmlhYmxlcyB1c2VkIGFzIG1lcmUgYWJicmV2aWF0aW9ucy4KKworMjAwMS0xMi0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9sYWxyLmMgKHRyYXZlcnNlKTogVXNlIGFycmF5cyBpbnN0ZWFkIG9mIHBvaW50ZXJzLgorCisyMDAxLTEyLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL251bGxhYmxlLmMgKHNldF9udWxsYWJsZSk6IFVzZSBhIGZvciBsb29wIHRvIGRlLW9iZnVzY2F0ZQorCXRoZSBoYW5kbGluZyBvZiBzcXVldWUuCisJYHN5bWJvbCA+PSAwJyBpcyB3cm9uZyBub3csIHVzZSBgcnVsZV90YWJsZVtydWxlbm9dLnVzZWZ1bCcuCisKKzIwMDEtMTItMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJQmVjYXVzZSB1c2VsZXNzIG5vbnRlcm1pbmFscyBhcmUgbm93IGtlcHQgYWxpdmUgKGluc3RlYWQgb2YgYmVpbmcKKwlgZGVzdHJveWVkJyksIHdlIG5vdyBzb21ldGltZXMgZXhhbWluZSB0aGVtLCBhbmQgc3RvcmUgaW5mb3JtYXRpb24KKwlyZWxhdGVkIHRvIHRoZW0uICBIZW5jZSB3ZSBuZWVkIHRvIGtub3cgdGhlaXIgbnVtYmVyLCBhbmQgYWRqdXN0CisJbWVtb3J5IGFsbG9jYXRpb25zLgorCisJKiBzcmMvcmVkdWNlLmMsIHNyYy9yZWR1Y2UuaCAobnVzZWxlc3Nfbm9udGVybWluYWxzKTogTm8gbG9uZ2VyCisJc3RhdGljLgorCSogc3JjL0xSMC5jIChhbGxvY2F0ZV9pdGVtc2V0cyk6IFRoZSBtZW1vcnkgYWxsb2NhdGVkIHRvCisJYHN5bWJvbF9jb3VudCcgd2FzIHVzZWQgZm9yIHR3byBkaWZmZXJlbnQgcHVycG9zZTogb25jZSB0byBjb3VudAorCXRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgZWFjaCBzeW1ib2wsIGFuZCBsYXRlciByZWFzc2lnbmVkIHRvCisJYHNoaWZ0X3N5bWJvbCcsIGNvbnRhaW5pbmcgdGhlIHN5bWJvbCB0aGF0IGNhbiBiZSBzaGlmdGVkIGZyb20gYQorCWdpdmVuIHN0YXRlLgorCURlb2JmdXNjYXRlLCBpLmUuLCBhbGxvY2F0ZSwgdXNlIGFuZCBmcmVlIGBzeW1ib2xfY291bnQnIGhlcmUKKwlvbmx5LCBhbmQuLi4KKwkobmV3X2l0ZW1zZXRzKTogQWxsb2NhdGUgYHNoaWZ0X3N5bWJvbCcgaGVyZS4KKwkoYWxsb2NhdGVfaXRlbXNldHMpOiBzeW1ib2xfY291bnQgaW5jbHVkZXMgdXNlbGVzcyBub250ZXJtaW5hbHMuCisJTWFrZSByb29tIGZvciB0aGVtLgorCShmcmVlX3N0b3JhZ2UpOiBVc2UgYGZyZWUnLCBub3QgYFhGUkVFJywgZm9yIHBvaW50ZXJzIHRoYXQgY2Fubm90CisJYmUgbnVsbC4KKworMjAwMS0xMi0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9udWxsYWJsZS5jIChzZXRfbnVsbGFibGUpOiBEZW9iZnVzY2F0ZSB0aGUgaGFuZGxpbmcgb2YKKwlyaXRlbS4KKwlgc3ltYm9sID49IDAnIGlzIHdyb25nIG5vdywgdXNlIGBydWxlX3RhYmxlW3J1bGVub10udXNlZnVsJy4KKworMjAwMS0xMi0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9ncmFtLmMsIHNyYy9ncmFtLmggKHJpdGVtX3ByaW50KTogTmV3LgorCSogc3JjL2dyYW0uYyAoZHVtbXkpOiBSZW1vdmUsIG5vdyB0aGVyZSBpcyBhY3R1YWwgY29kZSBpbiBncmFtLmMuCisJKFRoaXMgdXNlbGVzcyBmdW5jdGlvbiB3YXMgZGVmaW5lZCBvbmx5IHRvIHdvcmsgYXJvdW5kIFZNUyBsaW5rZXJzCisJdGhhdCBjYW4ndCBoYW5kbGUgY29tcGlsYXRpb24gdW5pdHMgd2l0aCB2YXJpYWJsZXMgb25seSkuCisJKiBzcmMvcmVkdWNlLmMgKGR1bXBfZ3JhbW1hcik6IFVzZSBpdCB0byB0cmFjZSB0aGUgY29uc3RydWN0aW9uIG9mCisJcml0ZW0uCisKKzIwMDEtMTItMDQgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBzcmMvYmlzb24uc2ltcGxlICh1bmlvbiB5eWFsbG9jKTogQ2hhbmdlIG1lbWJlciBuYW1lcworCXRvIGJlIHRoZSBzYW1lIGFzIHRoZSBzdGFjayBuYW1lcy4KKwkoeXlwYXJzZSk6IHl5cHRyIGlzIG5vdyB1bmlvbiB5eWFsbG9jICosIG5vdCBjaGFyICouCisJKFlZU1RBQ0tfUkVMT0NBVEUpOiBMaWtld2lzZS4gIFRoaXMgYXZvaWRzIGEgR0NDIHdhcm5pbmcsCisJYW5kIG1heSBnZW5lcmF0ZSBiZXR0ZXIgY29kZSBvbiBzb21lIG1hY2hpbmVzLgorCSh5eXN0cGNweSk6IFVzZSBwcm90b3R5cGUgaWYgX19TVERDX18gaXMgZGVmaW5lZCwgbm90IGp1c3QKKwlpZiBfX2NwbHVzcGx1cyBpcyBkZWZpbmVkLgorCisyMDAxLTExLTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogY29uZmlndXJlLmluIChXQVJOSU5HX0NGTEFHUyk6IEFkZCAtV2Vycm9yIHdoZW4gcG9zc2libGUuCisJKENGTEFHUyk6IERvIG5vdCBpbmNsdWRlIHRoZSBXQVJOSU5HX0NGTEFHUyBoZXJlLCBzaW5jZSBHTlUKKwlHZXR0ZXh0IGRvZXNuJ3QgY29tcGlsZSBjbGVhbmx5LCBhbmQgZGllcyB3aXRoIC1XZXJyb3IuCisJKiBzcmMvTWFrZWZpbGUuYW0sIGxpYi9NYWtlZmlsZS5hbSwgdGVzdHMvYXRsb2NhbC5pbiAoQ0ZMQUdTKToKKwlJbmNsdWRlIFdBUk5JTkdfQ0ZMQUdTIGhlcmUuCisJKiBsaWIveHN0cmR1cC5jOiBJbmNsdWRlIHhhbGxvYy5oLCBzbyB0aGF0IHhzdHJkdXAgYmUgZGVjbGFyZWQKKwliZWZvcmUgYmVpbmcgZGVmaW5lZC4KKworMjAwMS0xMS0yNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGxpYi9xdW90ZWFyZy5oIChxdW90ZWFyZ19uLCBxdW90ZWFyZ19uX3N0eWxlKToKKwlGaXJzdCBhcmcgaXMgaW50LCBub3QgdW5zaWduZWQuCisJKiBsaWIvcXVvdGVhcmcuYyAocXVvdGVhcmdfbiwgcXVvdGVhcmdfbl9zdHlsZSk6IExpa2V3aXNlLgorCShTSVpFX01BWCwgVUlOVF9NQVgpOiBOZXcgbWFjcm9zLgorCShxdW90ZWFyZ19uX29wdGlvbnMpOiBBYm9ydCBpZiBOIGlzIG5lZ2F0aXZlLgorCUF2b2lkIG92ZXJmbG93IGNoZWNrIG9uIGhvc3RzIHdoZXJlIHNpemVfdCBpcyA2NCBiaXRzIGFuZCBpbnQKKwlpcyAzMiBiaXRzLCBhcyBvdmVyZmxvdyBpcyBpbXBvc3NpYmxlIHRoZXJlLgorCUZpeCBvZmYtYnktb25lIHR5cG8gdGhhdCBjYXVzZWQgdW5uZWNlc3NhcnkgcmVhbGxvY2F0aW9uLgorCisyMDAxLTExLTI5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCU5hbWUgc3BhY2UgY2xlYW51cCBpbiBnZW5lcmF0ZWQgcGFyc2VyLgorCisJKiBkb2MvYmlzb24udGV4aW5mbyAoQmlzb24gUGFyc2VyKTogRGlzY3VzcyBzeXN0ZW0gaGVhZGVycworCWFuZCB0aGVpciBlZmZlY3Qgb24gdGhlIHVzZXIgbmFtZSBzcGFjZS4KKworCSogc3JjL2Jpc29uLnNpbXBsZToKKwkoWVlTVEFDS19BTExPQywgWVlTVEFDS19GUkVFLCB1bmlvbiB5eWFsbG9jLCBZWVNUQUNLX0dBUF9NQVgsCisJWVlTVEFDS19CWVRFUywgWVlTVEFDS19SRUxPQ0FURSk6IERvIG5vdCBkZWZpbmUgdW5sZXNzIG5lY2Vzc2FyeSwKKwlpLmUuIHVubGVzcyAhIGRlZmluZWQgKHl5b3ZlcmZsb3cpIHx8IGRlZmluZWQgKFlZRVJST1JfVkVSQk9TRSkuCisKKwkoWVlTSVpFX1QpOiBOZXcgbWFjcm8uICBVc2UgaXQgaW5zdGVhZCBvZiBzaXplX3QsIHRvIGF2b2lkIGluZnJpbmdpbmcKKwlvbiB1c2VyIG5hbWVzIHdoZW4gcG9zc2libGUuCisKKwkoWVlTVEFDS19VU0VfQUxMT0NBKTogRG8gbm90IGRlZmluZTsganVzdCB1c2UgYW55IGV4aXN0aW5nIGRlZm4uCisJU2ltcGxpZnkgdGVzdCBmb3Igd2hhdGhlciA8YWxsb2NhLmg+IGV4aXN0cy4KKworCSg8c3RkbGliLmg+KTogSW5jbHVkZSBpZiB3ZSB3aWxsIHVzZSBtYWxsb2MsIGFuZCBpZiBzdGFuZGFyZCBDIG9yIEMrKy4KKworCSg8c3RkaW8uaD4pOiBJbmNsdWRlIGlmIFlZREVCVUcuCisKKwkoeXltZW1jcHkpOiBSZW5hbWVkIGZyb20gX195eV9tZW1jcHkuICBEbyBub3QgZGVmaW5lIHVubGVzcworCSEgZGVmaW5lZCAoeXlvdmVyZmxvdykgJiYgISBkZWZpbmVkICh5eW1lbWNweSkuCisKKwkoeXltZW1jcHksIHl5cGFyc2UpOiBSZW5hbWUgbG9jYWwgdmFyaWFibGVzIGFzIG5lZWRlZCBzbyB0aGF0CisJdGhleSBhbGwgYmVnaW4gd2l0aCAneXknLgorCisJKHl5c3RybGVuLCB5eXN0cGNweSk6IE5ldyBmdW5jdGlvbnMuCisKKwkoWVlfREVDTF9OT05fTFNQX1ZBUklBQkxFUyk6IFJlbmFtZWQgZnJvbSBfWVlfREVDTF9WQVJJQUJMRVMuCisJQWxsIHVzZXMgY2hhbmdlZC4KKworCSh5eXBhcnNlKTogc2l6ZV90IC0+IFlZU0laRV9ULiAgVXNlIHl5c3RybGVuIGFuZCB5eXN0cGNweQorCWluc3RlYWQgb2YgcmVseWluZyBvbiBzdHJpbmcuaCBmdW5jdGlvbnMuICBVc2UgWVlTVEFDS19BTExPQworCWFuZCBZWVNUQUNLX0ZSRUUgaW5zdGVhZCBvZiBtYWxsb2MgYW5kIGZyZWUuCisKKzIwMDEtMTEtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvYmlzb24uc2ltcGxlIChZWVNUWVBFLCBZWUxUWVBFKTogTW92ZSB0aGVpciBkZWZpbml0aW9ucworCWJlZm9yZSB0aGVpciBmaXJzdCB1c2VzLgorCShZWUJJU09OLCBZWVBVUkUpOiBNb3ZlIHRvIHRoZSB0b3Agb2YgdGhlIG91dHB1dC4KKworMjAwMS0xMS0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHRlc3RzL3JlZHVjZS5hdCAoVXNlbGVzcyBOb250ZXJtaW5hbHMpOiBGaXguCisKKzIwMDEtMTEtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvYmlzb24uc2ltcGxlIChZWVNUQUNLX0ZSRUUpOiBVc2UgYGRvIHs7fSB3aGlsZSAoMCknIGFzIGVtcHR5CisJaWYgYm9keSBpbnN0ZWFkIG9mIGA7JyB0byBwYWNpZnkgR0NDJ3Mgd2FybmluZ3MuCisKKzIwMDEtMTEtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJSW5zdGVhZCBvZiBtYXBwaW5nIHRoZSBMSFMgb2YgdW51c2VkIHJ1bGVzIHRvIC0xLCBrZWVwIHRoZSBMSFMKKwl2YWxpZCwgYnV0IGZsYWcgdGhlIHJ1bGVzIGFzIGludmFsaWQuCisKKwkqIHNyYy9ncmFtLmggKHJ1bGVfdCk6IGB1c2VmdWwnIGlzIGEgbmV3IG1lbWJlci4KKwkqIHNyYy9wcmludC5jIChwcmludF9ncmFtbWFyKTogQWRqdXN0LgorCSogc3JjL2Rlcml2ZXMuYyAoc2V0X2Rlcml2ZXMpOiBMaWtld2lzZS4KKwkqIHNyYy9yZWFkZXIuYyAocGFja2dyYW0sIHJlZHVjZV9vdXRwdXQpOiBMaWtld2lzZS4KKwkqIHNyYy9yZWR1Y2UuYyAocmVkdWNlX2dyYW1tYXJfdGFibGVzKTogTGlrZXdpc2UuCisJKiB0ZXN0cy9yZWR1Y2UuYXQgKFVuZGVyaXZhYmxlIFJ1bGVzLCBVc2VsZXNzIFJ1bGVzKTogTmV3LgorCisyMDAxLTExLTMwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3JlZHVjZS5jIChyZWR1Y2Vfb3V0cHV0KTogRm9ybWF0dGluZyBjaGFuZ2VzLgorCSogc3JjL3ByaW50LmMgKHByaW50X3Jlc3VsdHMsIHByaW50X2dyYW1tYXIpOiBMaWtld2lzZS4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKFJ1bGUgTGluZSBOdW1iZXJzKQorCShTb2x2ZWQgU1IgQ29uZmxpY3RzLCBVbnJlc29sdmVkIFNSIENvbmZsaWN0cyk6IEFkanVzdC4KKworMjAwMS0xMS0zMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9yZWR1Y2UuYyAobm9udGVybWluYWxzX3JlZHVjZSk6IEluc3RlYWQgb2YgdGhyb3dpbmcgYXdheQorCXVzZWxlc3Mgbm9udGVybWluYWxzLCBtb3ZlIHRoZW0gYXQgdGhlIGVuZCBvZiB0aGUgc3ltYm9sIGFycmF5cy4KKwkocmVkdWNlX291dHB1dCk6IEFkanVzdC4KKwkqIHRlc3RzL3JlZHVjZS5hdCAoVXNlbGVzcyBOb250ZXJtaW5hbHMpOiBBZGp1c3QuCisKKzIwMDEtMTEtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcmVkdWNlLmM6IFZhcmlvdXMgY29tbWVudC9mb3JtYXR0aW5nIGNoYW5nZXMuCisJKG5vbnRlcm1pbmFsc19yZWR1Y2UpOiBOZXcsIGV4dHJhY3RlZCBmcm9tLi4uCisJKHJlZHVjZV9ncmFtbWFyX3RhYmxlcyk6IGhlcmUuCisJKHJlZHVjZV9ncmFtbWFyKTogQ2FsbCBub250ZXJtaW5hbHNfcmVkdWNlLgorCisyMDAxLTExLTI5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogc3JjL2Jpc29uLnNpbXBsZSAoWVlTVEFDS19SRUFMTE9DKTogUmVtb3ZlLgorCShZWVNUQUNLX0FMTE9DKTogUmVzdXJyZWN0IHRoaXMgbWFjcm8sIHdpdGggaXRzIG9sZCBtZWFuaW5nLgorCShZWVNUQUNLX0ZSRUUsIFlZU1RBQ0tfR0FQX01BWCwgWVlTVEFDS19CWVRFUywgWVlTVEFDS19SRUxPQ0FURSk6CisJTmV3IG1hY3Jvcy4KKwkodW5pb24geXlhbGxvYyk6IE5ldyB0eXBlLgorCShfX3l5X21lbWNweSk6IExhc3QgYXJnIGlzIHNpemVfdCwgbm90IHVuc2lnbmVkIGludCwgdG8gcmVtb3ZlCisJYW4gYXJiaXRyYXJ5IHJlc3RyaWN0aW9uIG9uIGhvc3RzIHdoZXJlIHNpemVfdCBpcyB3aWRlciB0aGFuIGludC4KKworCSh5eXBhcnNlKTogRG9uJ3QgZHVtcCBjb3JlIGlmIGFsbG9jYSBvciBtYWxsb2MgZmFpbHM7IGluc3RlYWQsIHJlcG9ydAorCWEgcGFyc2VyIHN0YWNrIG92ZXJmbG93LiAgQWxsb2NhdGUganVzdCBvbmUgYmxvY2sgb2YgbWVtb3J5IGZvciBhbGwKKwl0aHJlZSBzdGFja3MsIGluc3RlYWQgb2YgYWxsb2NhdGluZyB0aHJlZSBibG9ja3M7IHRoaXMgdHlwaWNhbGx5IGlzCisJZmFzdGVyIGFuZCByZWR1Y2VzIGZyYWdtZW50YXRpb24uCisKKwlEbyBub3QgbGltaXQgdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgc3RhY2sgdG8gYSB2YWx1ZSB0aGF0IGZpdHMKKwlpbiAnaW50JywgYXMgdGhpcyBpcyBhbiBhcmJpdHJhcnkgbGltaXQgb24gaG9zdHMgd2l0aCA2NC1iaXQKKwlzaXplX3QgYW5kIDMyLWJpdCBpbnQuCisKKzIwMDEtMTEtMjkgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisKKwkqIHRlc3RzL2NhbGMuYXQgW0FUX0RBVEFfQ0FMQ19ZXTogVXNlICVlcnJvci12ZXJib3NlIGluc3RlYWQKKwlvZiBkZWZpbmluZyBZWUVSUk9SX1ZFUkJPU0UuCisJW0FUX0RBVEFdOiAkNCBpcyBub3cgb3V0IG9mIEMgZGVjbGFyYXRpb25zIGluIHRoZSBwcm9sb2d1ZS4KKworMjAwMS0xMS0yOCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKworCSogc3JjL3JlYWRlci5jIChwYXJzZV9kcXVvdGVkX3BhcmFtKTogTmV3LgorCShwYXJzZV9za2VsX2RlY2wpOiBVc2UgaXQuCisJKiBzcmMvbGV4Lmg6IEFkZCBpdHMgcHJvdG90eXBlLgorCSogc3JjL2xleC5jIChsaXRlcmFsY2hhcik6IEJlY29tZSBub3Qgc3RhdGljLgorCisyMDAxLTExLTI4ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvb3V0cHV0Lmg6IEFuZCBwdXQgaXRzIGV4dGVybiBkZWNsYXJhdGlvbiBoZXJlLgorCSogc3JjL291dHB1dC5jIChlcnJvcl92ZXJib3NlKTogRGVmaW5lIGhlcmUuCisJKHByZXBhcmUpOiBFY2hvIG5hbWUgbW9kaWZpY2F0aW9uLgorCSogc3JjL2dldGFyZ3MuaDogQ2xlYW4gaXRzIGV4dGVybiBkZWNsYXJhdGlvbi4KKwkqIHNyYy9nZXRhcmdzLmMgKGVycm9yX3ZlcmJvc2VfZmxhZyk6IFJlbW92ZS4KKwkoZ2V0YXJncyk6IFJlbW92ZSBjYXNlICdlJy4KKwkqIHNyYy9vcHRpb25zLmMgKG9wdGlvbl90YWJsZSk6ICdlcnJvci12ZXJib3NlJyBpcyBub3cgc2VlbiBhcyBzaW1wbGUKKwlwZXJjZW50IG9wdGlvbi4KKwlJbmNsdWRlIG91dHB1dC5oLgorCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRfZGVjbGFyYXRpb25zKTogUmVtb3ZlIGNhc2UgdG9rX2luY2x1ZGUuCisJKHBhcnNlX2luY2x1ZGVfZGVjbCk6IFJlbW92ZS4KKwkqIHNyYy9sZXguaCAodG9rZW5fdCk6IFJlbW92ZSB0b2tfaW5jbHVkZS4KKwkqIHNyYy9vcHRpb25zLmMgKG9wdGlvbl90YWJsZSk6ICdpbmNsdWRlJyBpcyBub3cgYSBzaW1wbGUgY29tbWFuZCBsaW5lCisJb3B0aW9uLgorCisyMDAxLTExLTI4ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvYmlzb24uc2ltcGxlOiBBZGp1c3QgbXVzY2xlIG5hbWVzLgorCSogc3JjL211c2NsZV90YWIuYyAobXVzY2xlX2luaXQpOiBBbHNvIHJlbmFtZSB0aGUgbXVzY2xlcy4KKwkqIHNyYy9vdXRwdXQuYyAocHJlcGFyZSk6IHMvXy8tLyBmb3IgdGhlIG11c2NsZXMgbmFtZXMuCisJKG91dHB1dF9wYXJzZXIpOiBXaGVuIHNjYW5uaW5nIGZvciBhIG11c2NsZSwgYWxsb3cgJy0nIGluc3RlYWQgb2YgJ18nLgorCisyMDAxLTExLTI4ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvYmlzb24uc2ltcGxlOiBGaXggZGVidWcuCisJW1lZRVJST1JfVkVSQk9TRV06IFJlLWludGVncmF0ZSBhcyBhbiBpbnRlcm5hbCBtYWNyby4KKworMjAwMS0xMS0yOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9MUjAuYyAoc2hpZnRzX25ldyk6IE5ldy4KKwkoc2F2ZV9zaGlmdHMsIGluc2VydF9zdGFydF9zaGlmdCwgYXVnbWVudF9hdXRvbWF0b24pOiBVc2UgaXQuCisKKzIwMDEtMTEtMjggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvY2xvc3VyZS5jIChjbG9zdXJlKTogYGInIGFuZCBgcnVsZW5vJyBkZW5vdGUgdGhlIHNhbWUgdmFsdWU6CisJa2VlcCBydWxlbm8gb25seS4KKworMjAwMS0xMS0yOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9jbG9zdXJlLmMgKGNsb3N1cmUpOiBJbnN0ZWFkIG9mIGxvb3Bpbmcgb3ZlciB3b3JkIGluIGFycmF5CisJdGhlbiBiaXRzIGluIHdvcmRzLCBsb29wIG92ZXIgYml0cyBpbiBhcnJheS4KKworMjAwMS0xMS0yOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9jbG9zdXJlLmMgKGNsb3N1cmUpOiBObyBsb25nZXIgb3B0aW1pemUgdGhlIHNwZWNpYWwgY2FzZQorCXdoZXJlIGFsbCB0aGUgYml0cyBvZiBgcnVsZXNldFtyXScgYXJlIHNldCB0byAwLCB0byBtYWtlIHRoZSBjb2RlCisJY2xlYXJlci4KKworMjAwMS0xMS0yOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9jbG9zdXJlLmMgKGNsb3N1cmUpOiBgcicgYW5kIGBjJyBhcmUgbmV3IHZhcmlhYmxlcywgdXNlZCB0bworCWRlLW9iZnVzY2F0ZSBhY2Nlc3NlcyB0byBSVUxFU0VUIGFuZCBDT1JFLgorCisyMDAxLTExLTI4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3JlZHVjZS5jIChyZWR1Y2VfcHJpbnQpOiBVc2UgbmdldHRleHQuCisJKGR1bXBfZ3JhbW1hcik6IEltcHJvdmUgdGhlIHRyYWNlIGFjY3VyYWN5LgorCisyMDAxLTExLTI4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3JlZHVjZS5jIChkdW1wX2dyYW1tYXIpOiBEb24ndCB0cmFuc2xhdGUgdHJhY2UgbWVzc2FnZXMuCisKKzIwMDEtMTEtMjggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiB0ZXN0cy9yZWR1Y2UuYXQgKFVzZWxlc3MgVGVybWluYWxzLCBVc2VsZXNzIE5vbnRlcm1pbmFscyk6IE5ldy4KKwkqIHNyYy9yZWR1Y2UuYyAocmVkdWNlX2dyYW1tYXJfdGFibGVzKTogRG8gbm90IGZyZWUgdXNlbGVzcyB0YWdzLAorCWFzIGFsbCB0YWdzIGFyZSBmcmVlJ2VkIGFmdGVyd2FyZHMuCisJRnJvbSBFbnJpY28gU2Nob2x6LgorCisyMDAxLTExLTI3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogc3JjL2Jpc29uLnNpbXBsZSAoWVlTVEFDS19SRUFMTE9DKTogRml4IHR5cG8gdGhhdCBjYXVzZWQgdXMgdG8KKwl1c2UgYWxsb2NhIHdoZW4gd2UgZGlkbid0IHdhbnQgdG8sIGFuZCB2aWNlIHZlcnNhLgorCisyMDAxLTExLTI3ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvbXVzY2xlX3RhYi5jIChtdXNjbGVfaW5pdCk6IFJlbW92ZSAndmVyYm9zZScgbXVzY2xlCisJaW5pdGlhbGl6YXRpb24uCisJKiBzcmMvb3V0cHV0LmMgKHByZXBhcmUpOiBSZW1vdmUgaXRzIHVwZGF0ZS4KKworMjAwMS0xMS0yNyAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKworCSogdGVzdHMvdG9ydHVyZS5hdCBbQVRfREFUQV06IFJlbW92ZSBZWUVSUk9SX1ZFUkJPU0UgZGVmaW5pdGlvbi4KKwlVc2UgJWVycm9yLXZlcmJvc2UuCisKKzIwMDEtMTEtMjcgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGU6IFJlbW92ZSBZWUVSUk9SX1ZFUkJPU0UgdXNpbmcuCisJVXNlICUlZXJyb3JfdmVyYm9zZS4KKwkoeXlwYXJzZSk6IExpa2V3aXNlLgorCSogc3JjL291dHB1dC5jIChwcmVwYXJlKTogR2l2ZSBpdHMgZmluYWwgdmFsdWUuCisJKiBzcmMvbXVzY2xlX3RhYi5jIChtdXNjbGVfaW5pdCk6IEluaXQgbmV3IG11c2NsZSAnZXJyb3JfdmVyYm9zZScuCisJKiBzcmMvZ2V0YXJncy5oOiBBZGQgaXRzIGV4dGVybiBkZWNsYXJhdGlvbi4KKwkqIHNyYy9nZXRhcmdzLmMgKGVycm9yX3ZlcmJvc2VfZmxhZyk6IE5ldyBpbnQuCisJKGdldGFyZ3MpOiBVcGRhdGUgdG8gY2F0Y2ggbmV3IGNhc2UuCisJKiBzcmMvb3B0aW9ucy5jIChvcHRpb25fdGFibGUpOiAnZXJyb3ItdmVyYm9zZScgaXMgYSBuZXcgb3B0aW9uLgorCShzaG9ydG9wdHMpOiBVcGRhdGUuCisKKzIwMDEtMTEtMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvc3lzdGVtLmg6IFVzZSBpbnRsL2xpYmdldHRleHQuaC4KKwkqIHNyYy9NYWtlZmlsZS5hbSAoSU5DTFVERVMpOiBBZGQgLUkgJCh0b3Bfc3JjZGlyKS4KKworMjAwMS0xMS0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHRlc3RzL3RvcnR1cmUuYXQgKEV4cGxvZGluZyB0aGUgU3RhY2sgU2l6ZSB3aXRoIE1hbGxvYyk6CisJcy9ZWVNUQUNLX1VTRV9BTExPQ0FfQUxMT0NBL1lZU1RBQ0tfVVNFX0FMTE9DQS8uCisKKzIwMDEtMTEtMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvZmlsZXMuYzogSW5jbHVkZSBlcnJvci5oLgorCVJlcG9ydGVkIGJ5IEhhbnMgQWJlcmcuCisKKzIwMDEtMTEtMjYgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisKKwkqIHNyYy9yZWFkZXIuYyAocGFyc2VfaW5jbHVkZV9kZWNsKTogTmV3LCBub3QgeWV0IGltcGxlbWVudGVkLgorCShyZWFkX2RlY2xhcmF0aW9ucyk6IEFkZCBjYXNlIHRva19pbmNsdWRlLgorCSogc3JjL2dldGFyZ3MuaCAoaW5jbHVkZSk6IEFkZCBpdHMgZXh0ZXJuIGRlZmluaXRpb24uCisJKiBzcmMvZ2V0YXJncy5jIChpbmNsdWRlKTogTmV3IGNvbnN0IGNoYXIgKi4KKwkoZ2V0YXJncyk6IEFkZCBjYXNlICctSScuCisJKiBzcmMvb3B0aW9ucy5jIChvcHRpb25fdGFibGUpOiBBZGQgaW5jbHVkZSBhcyBjb21tYW5kIGxpbmUgYW5kCisJcGVyY2VudCBvcHRpb24uCisJKiBzcmMvbGV4LmggKHRva2VuX3QpOiBBZGQgdG9rX2luY2x1ZGUuCisKKzIwMDEtMTEtMjYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRncmFtKTogTWFrZSBzdXJlIHJ1bGVzIGZvciBtaWQtcnVsZSBhY3Rpb25zCisJaGF2ZSBhIGxpbmVubyBlcXVhbCB0byB0aGF0IG9mIHRoZWlyIGhvc3QgcnVsZS4KKwlSZXBvcnRlZCBieSBIYW5zIEFiZXJnLgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoUnVsZSBMaW5lIE51bWJlcnMpOiBOZXcuCisKKzIwMDEtMTEtMjYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvTFIwLmMgKGFsbG9jYXRlX2l0ZW1zZXRzKToga2VybmVsX3NpemUgY29udGFpbnMgaW50cywgbm90CisJc2l6ZV90cy4KKworMjAwMS0xMS0yNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9jb21wbGFpbi5jLCBzcmMvY29tcGxhaW4uaCAoZXJyb3IpOiBSZW1vdmUsIHByb3ZpZGVkIGJ5CisJbGliL2Vycm9yLltjaF0uCisKKzIwMDEtMTEtMjYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRfZGVjbGFyYXRpb25zKTogRG9uJ3QgYWJvcnQgb24gdG9rX2lsbGVnYWwsCisJaXNzdWUgYW4gZXJyb3IgbWVzc2FnZS4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKEludmFsaWQgJWRpcmVjdGl2ZSk6IE5ldy4KKwlSZXBvcnRlZCBieSBIYW5zIEFiZXJnLgorCisyMDAxLTExLTI2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogY29uZmlndXJlLmluOiBJbnZva2UgQUNfRlVOQ19PQlNUQUNLIGFuZCBBQ19GVU5DX0VSUk9SX0FUX0xJTkUuCisJKiBsaWIvTWFrZWZpbGUuYW0gKGxpYmJpc29uX2FfU09VUkNFUyk6IEFkanVzdC4KKworMjAwMS0xMS0yNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9jb25mbGljdHMuYyAoY29uZmxpY3RzX3ByaW50KTogRG9uJ3QgY29tcGxhaW4gYXQgYWxsIHdoZW4KKwl0aGVyZSBhcmUgbm8gcmVkdWNlL3JlZHVjZSBjb25mbGljdHMsIGFuZCBhcyBtYW55IHNoaWZ0L3JlZHVjZQorCWNvbmZsaWN0cyBhcyBleHBlY3RlZC4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKCVleHBlY3QgcmlnaHQpOiBBZGp1c3QuCisKKzIwMDEtMTEtMjMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBsaWIvYWxsb2NhLmM6IFVwZGF0ZSwgZnJvbSBmaWxldXRpbHMuCisKKzIwMDEtMTEtMjMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBsaWIvTWFrZWZpbGUuYW0gKGxpYmJpc29uX2FfTElCQUREKTogQWRkIEBBTExPQ0FALgorCisyMDAxLTExLTIzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3N5c3RlbS5oOiBJbmNsdWRlIGFsbG9jYS5oLgorCSogc3JjL21haW4uYyAobWFpbikgW0NfQUxMT0NBXTogQ2FsbCBhbGxvY2EgKDApLgorCisyMDAxLTExLTIzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3ByaW50X2dyYXBoLmMgKHByaW50X2FjdGlvbnMpOiBSZW1vdmUgYHJ1bGUnLCB1bnVzZWQuCisJKiBzcmMvTFIwLmMgKGtlcm5lbF9zaXplKTogQ29udGFpbiBgaW50JyBpbnN0ZWFkIG9mIGBzaXplX3QnIHRvCisJcGFjaWZ5IEdDQydzIHNpZ25lZCA8IHVuc2lnbmVkIHdhcm5pbmdzLgorCSogc3JjL2Nsb3N1cmUuYyAoaXRlbXNldHNpemUpOiBMaWtld2lzZS4KKwkqIHNyYy9yZWFkZXIuYyAoc3ltYm9sX2xpc3RfbmV3KTogU3RhdGljLgorCisyMDAxLTExLTIzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCUF0dGFjaGluZyBsaW5lbm8gdG8gYnVja2V0cyBpcyBzdHVwaWQsIHNpbmNlIG9ubHkgb25lIGNvcHkgb2YgZWFjaAorCXN5bWJvbCBpcyBrZXB0LCBvbmx5IHRoZSBsaW5lIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIGlzIGtlcHQgdG9vLgorCisJKiBzcmMvc3ltdGFiLmgsIHNyYy9zeW10YWIuYyAoYnVja2V0KTogUmVtb3ZlIHRoZSBsaW5lIG1lbWJlci4KKwkqIHNyYy9yZWFkZXIuYyAocmxpbmVfYWxsb2NhdGVkKTogUmVtb3ZlLCB1bnVzZWQuCisJKHN5bWJvbF9saXN0KTogSGF2ZSBhIGBsaW5lJyBtZW1iZXIuCisJKHN5bWJvbF9saXN0X25ldyk6IE5ldy4KKwkocmVhZGdyYW0pOiBVc2UgaXQuCisJKiBzcmMvcHJpbnQuYyAocHJpbnRfZ3JhbW1hcik6IE91dHB1dCB0aGUgcnVsZSBsaW5lIG51bWJlcnMuCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChTb2x2ZWQgU1IgQ29uZmxpY3RzKQorCShVbnJlc29sdmVkIFNSIENvbmZsaWN0cyk6IEFkanVzdC4KKwlSZXBvcnRlZCBieSBIYW5zIEFiZXJnLgorCisyMDAxLTExLTIyICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvYmlzb24uc2ltcGxlIFtZWUVSUk9SX1ZFUkJPU0VdOiBGb3JjZSBpdHMgdmFsdWUgdG8gYmUgMSBvciAwLgorCisyMDAxLTExLTIyICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvbXVzY2xlX3RhYi5jIChtdXNjbGVfaW5pdCk6IFJlbW92ZSBpbml0aWFsaXphdGlvbiBvZgorCXNrZWxldG9uIG11c2NsZS4KKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X21hc3Rlcl9wYXJzZXIpOiBEbyBpdCBoZXJlLgorCisyMDAxLTExLTIwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogcG8vc3YucG86IE5ldy4KKwkqIGNvbmZpZ3VyZS5pbiAoQUxMX0xJTkdVQVMpOiBBZGp1c3QuCisJKiBwby9QT1RGSUxFLmluOiBSZW1vdmUgYG51bGxhYmxlLmMnIGFuZCBgZGVyaXZlcy5jJyB3aGljaCBubworCWxvbmdlciBjb250YWlucyBzdHJpbmdzIHRvIHRyYW5zbGF0ZS4KKworMjAwMS0xMS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9jb25mbGljdHMuYyAoY29uZmxpY3RzX3ByaW50KTogQWRkIGEgbWlzc2luZyBcbi4KKworMjAwMS0xMS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9udWxsYWJsZS5jIChudWxsYWJsZV9wcmludCk6IE5ldy4KKwkoc2V0X251bGxhYmxlKTogQ2FsbCBpdCB3aGVuIHRyYWNpbmcuCisJQmV0dGVyIGxvY2FsaXR5IG9mIHZhcmlhYmxlcy4KKworMjAwMS0xMS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9wcmludC5jIChwcmludF9hY3Rpb25zKTogQmV0dGVyIGxvY2FsaXR5IG9mIHZhcmlhYmxlcy4KKworMjAwMS0xMS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9kZXJpdmVzLmMgKHByaW50X2Rlcml2ZXMpOiBGaXggYW5kIGVucmljaC4KKwkqIHNyYy9jbG9zdXJlLmMgKHByaW50X2ZkZXJpdmVzKTogTGlrZXdpc2UuCisKKzIwMDEtMTEtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvY2xvc3VyZS5jIChpdGVtc2V0ZW5kKTogUmVtb3ZlLCByZXBsYWNlZCB3aXRoLi4uCisJKGl0ZW1zZXRzaXplKTogbmV3LgorCisyMDAxLTExLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL0xSMC5jIChrZXJuZWxfZW5kKTogUmVtb3ZlLCByZXBsYWNlZCB3aXRoLi4uCisJKGtlcm5lbF9zaXplKTogbmV3LgorCisyMDAxLTExLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2NvbmZsaWN0cy5jIChzZXRfY29uZmxpY3RzKTogVXNlIGFycmF5cyBpbnN0ZWFkIG9mIHBvaW50ZXJzCisJdG8gY2xhcmlmeS4KKworMjAwMS0xMS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9jbG9zdXJlLmMgKGNsb3N1cmUpOiBVc2UgYXJyYXlzIGluc3RlYWQgb2YgcG9pbnRlcnMgdG8gY2xhcmlmeS4KKworMjAwMS0xMS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9jbG9zdXJlLmMsIHNyYy9kZXJpdmVzLmMsIHNyYy9udWxsYWJsZS5jOiBBZGp1c3QgdmFyaW91cworCXRyYWNlIG1lc3NhZ2VzLgorCSogc3JjL0xSMC5jOiBMaWtld2lzZS4KKwkoYWxsb2NhdGVfaXRlbXNldHMpOiBVc2UgYXJyYXlzIGluc3RlYWQgb2YgcG9pbnRlcnMgdG8gY2xhcmlmeS4KKworMjAwMS0xMS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9nZXRhcmdzLmMgKHN0YXRpc3RpY3NfZmxhZyk6IFJlcGxhY2Ugd2l0aC4uLgorCSh0cmFjZV9mbGFnKTogTmV3LgorCShsb25nb3B0cyk6IEFjY2VwdCAtLXRyYWNlIGluc3RlYWQgb2YgLS1zdGF0aXN0aWNzLgorCSogc3JjL2dldGFyZ3MuaCwgc3JjL29wdGlvbnMuYzogQWRqdXN0LgorCSogc3JjL0xSMC5jLCBzcmMvY2xvc3VyZS5jLCBzcmMvZGVyaXZlcy5jLCBzcmMvbnVsbGFibGUuYywKKwkqIHNyYy9yZWR1Y2UuYzogVXNlIHRyYWNlX2ZsYWdzIGluc3RlYWQgb2YgdGhlIENQUCBjb25kaXRpb25hbCBUUkFDRS4KKworMjAwMS0xMS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9MUjAuYyAobmV3X2l0ZW1zZXRzLCBnZXRfc3RhdGUpOiBVc2UgbW9yZSBhcnJheXMgYW5kIGZld2VyCisJcG9pbnRlcnMgdG8gY2xhcmlmeSB0aGUgY29kZS4KKwkoc2F2ZV9yZWR1Y3Rpb25zLCBzYXZlX3NoaWZ0cyk6IEZhY3RvciBjb21tb24gcGFydHMgb2YgYWx0ZXJuYXRpdmVzLgorCisyMDAxLTExLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL0xSMC5jIChuZXdfc3RhdGUsIGdldF9zdGF0ZSk6IENvbXBsZXRlIFRSQUNFIGNvZGUuCisJKiBzcmMvY2xvc3VyZS5jOiBJbmNsdWRlIGByZWFkZXIuaCcgdG8gZ2V0IGB0YWdzJywgbmVlZGVkIGJ5IHRoZQorCXRyYWNlIGNvZGUuCisJUmVuYW1lIHRoZSBjb25kaXRpb25hbCBERUJVRyBhcyBUUkFDRS4KKwlPdXRwdXQgY29uc2lzdGVudGx5IFRSQUNFcyB0byBzdGRlcnIsIG5vdCBzdGRvdXQuCisJKiBzcmMvZGVyaXZlcy5jOiBMaWtld2lzZS4KKwkqIHNyYy9yZWR1Y2UuYzogKGluYWNjZXNzYWJsZV9zeW1ib2xzKTogVXNpbmcgaWYgaXMgYmV0dGVyIHN0eWxlCisJdGhhbiBnb3RvLgorCVVzZSBgI2lmIFRSQUNFJyBpbnN0ZWFkIG9mIGAjaWYgMCcgZm9yIHRyYWNpbmcgY29kZS4KKworMjAwMS0xMS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9zeXN0ZW0uaCAoTElTVF9GUkVFLCBzaG9ydGNweSk6IE5ldy4KKwkqIHNyYy9MUjAuYzogVXNlIHRoZW0uCisJKiBzcmMvb3V0cHV0LmMgKGZyZWVfaXRlbXNldHMsIGZyZWVfcmVkdWN0aW9ucywgZnJlZV9zaGlmdHMpOgorCVJlbW92ZSwgcmVwbGFjZWQgYnkgTElTVF9GUkVFLgorCisyMDAxLTExLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3N0YXRlLmggKENPUkVfQUxMT0MsIFNISUZUU19BTExPQywgRVJSU19BTExPQykKKwkoUkVEVUNUSU9OU19BTExPQyk6ICBOZXcuCisJKiBzcmMvTFIwLmMsIHNyYy9jb25mbGljdHMuYzogVXNlIHRoZW0gdG8gZGUtb2JmdXNjYXRlIG1lbW9yeQorCWFsbG9jYXRpb24uCisKKzIwMDEtMTEtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvTFIwLmMgKG5ld19zdGF0ZSk6IENvbXBsZXRlIHRyYWNlIGNvZGUuCisJKiBzcmMvbnVsbGFibGUuYyAoc2V0X251bGxhYmxlKTogRG9uJ3QgdHJhbnNsYXRlIHRyYWNlcy4KKworMjAwMS0xMS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9wcmludF9ncmFwaC5jIChwcmludF9jb3JlKTogQmV0dGVyIGxvY2FsaXR5IG9mIHZhcmlhYmxlcy4KKwkqIHNyYy9wcmludC5jIChwcmludF9jb3JlKTogTGlrZXdpc2UuCisKKzIwMDEtMTEtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvdmNnLmM6IFlvdSBkbyB0aGUgb3V0cHV0LCBzbyB5b3UgYXJlIHJlc3BvbnNpYmxlIG9mIHRoZQorCWhhbmRsaW5nIG9mIFZDRyBzeW50YXgsIGluIHBhcnRpY3VsYXI6IHVzZSBxdW90ZWFyZy4KKwkqIHNyYy9wcmludF9ncmFwaC5jOiBEb24ndC4KKwkocHJpbnRfYWN0aW9ucyk6IERvbid0IG91dHB1dCB0aGUgYWN0aW9ucyBhcyBwYXJ0IG9mIHRoZSBub2RlcywKKwlzaW5jZSB0aGF0J3MgdGhlIGpvYiBvZiB0aGUgZWRnZXMuCisJKHByaW50X3N0YXRlKTogRG9uJ3Qgb3V0cHV0IGJ5IGhhbmQ6IGZpbGwgdGhlIG5vZGUgZGVzY3JpcHRpb24sCisJYW5kIGFzayBmb3IgaXRzIG91dHB1dC4KKworMjAwMS0xMS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGUgKHl5cGFyc2UpOiBXaGVuIHZlcmJvc2VseSByZXBvcnRpbmcgYW4gZXJyb3IsCisJbm8gbG9uZ2VyIHB1dCBhZGRpdGlvbmFsIHF1b3RlcyBhcm91bmQgdG9rZW4gbmFtZXMuCisJKiB0ZXN0cy9jYWxjLmF0OiBBZGp1c3QuCisKKzIwMDEtMTEtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvc3ltdGFiLmgsIHNyYy9zeW10YWIuYzogYGxpbmUnIGlzIGEgbmV3IG1lbWJlciBvZiBgYnVja2V0Jy4KKwkqIHNyYy9yZWFkZXIuYyAocmVjb3JkX3J1bGVfbGluZXMsIHJsaW5lLCBybGluZV9hbGxvY2F0ZWQpOiBSZW1vdmUuCisJKiBzcmMvb3V0cHV0LmM6IEFkanVzdC4KKworMjAwMS0xMS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9ncmFtLmggKHJwcmVjLCBycHJlY3N5bSwgcmFzc29jKTogUmVtb3ZlLCBub3cgcGFydCBvZi4uLgorCShydWxlX3QpOiB0aGlzLgorCSogc3JjL2NvbmZsaWN0cy5jLCBzcmMvcmVhZGVyLmMsIHNyYy9yZWR1Y2UuYzogQWRqdXN0LgorCisyMDAxLTExLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2dyYW0uaCAocnVsZV90KTogTmV3LgorCShydWxlX3RhYmxlKTogTmV3LgorCShycmhzLCBybGhzKTogUmVtb3ZlLCBwYXJ0IG9mIHN0YXRlX3QuCisJKiBzcmMvcHJpbnRfZ3JhcGguYywgc3JjL2Nsb3N1cmUuYywgc3JjL2NvbmZsaWN0cy5jLCBzcmMvZGVyaXZlcy5jLAorCSogc3JjL2xhbHIuYywgc3JjL251bGxhYmxlLmMsIHNyYy9vdXRwdXQuYywgc3JjL3ByaW50LmMsCisJKiBzcmMvcmVhZGVyLmMsIHNyYy9yZWR1Y2UuYzogQWRqdXN0LgorCisyMDAxLTExLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3JlYWRlci5jIChzeW1ib2xzX291dHB1dCk6IE5ldywgZXh0cmFjdGVkIGZyb20uLi4KKwkocGFja3N5bWJvbHMpOiBIZXJlLgorCShyZWFkZXIpOiBDYWxsIGl0LgorCisyMDAxLTExLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2xhbHIuYyAoc2V0X21heHJocywgbWF4cmhzKTogUmVtb3ZlLCByZXBsYWNlZCB3aXRoLi4uCisJKG1heHJocyk6IHRoaXMgbmV3IGZ1bmN0aW9uLgorCisyMDAxLTExLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2xhbHIuYyAoRik6IE5ldyBtYWNybyB0byBhY2Nlc3MgdGhlIHZhcmlhYmxlIEYuCisJQWRqdXN0LgorCisyMDAxLTExLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2xhbHIuaCAoTEEpOiBOZXcgbWFjcm8gdG8gYWNjZXNzIHRoZSB2YXJpYWJsZSBMQS4KKwkqIHNyYy9vdXRwdXQuYywgc3JjL2xhbHIuYywgc3JjL3ByaW50X2dyYXBoLmMsIHNyYy9jb25mbGljdHMuYzoKKwkqIHNyYy9sYWxyLmM6IEFkanVzdC4KKworMjAwMS0xMS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9sYWxyLmMgKGluaXRpYWxpemVfTEEpOiBPbmx5IGluaXRpYWxpemUgTEEuICBMZXQuLi4KKwkoc2V0X3N0YXRlX3RhYmxlKTogaGFuZGxlIHRoZSBgbG9va2FoZWFkcycgbWVtYmVycy4KKworMjAwMS0xMS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9sYWxyLmggKGxvb2thaGVhZHMpOiBSZW1vdmVkIGFycmF5LCB3aG9zZSBjb250ZW50cyBpcyBub3cKKwlhIG1lbWJlciBvZi4uLgorCShzdGF0ZV90KTogdGhpcyBzdHJ1Y3R1cmUuCisJKiBzcmMvb3V0cHV0LmMsIHNyYy9sYWxyLmMsIHNyYy9wcmludF9ncmFwaC5jLCBzcmMvY29uZmxpY3RzLmM6CisJQWRqdXN0LgorCisyMDAxLTExLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2xhbHIuaCAoY29uc2lzdGVudCk6IFJlbW92ZWQgYXJyYXksIHdob3NlIGNvbnRlbnRzIGlzIG5vdworCWEgbWVtYmVyIG9mLi4uCisJKHN0YXRlX3QpOiB0aGlzIHN0cnVjdHVyZS4KKwkqIHNyYy9vdXRwdXQuYywgc3JjL2xhbHIuYywgc3JjL3ByaW50X2dyYXBoLmMsIHNyYy9jb25mbGljdHMuYzoKKwlBZGp1c3QuCisKKzIwMDEtMTEtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvbGFsci5oIChyZWR1Y3Rpb25fdGFibGUsIHNoaWZ0X3RhYmxlKTogUmVtb3ZlZCBhcnJheXMsIHdob3NlCisJY29udGVudHMgYXJlIG5vdyBtZW1iZXJzIG9mLi4uCisJKHN0YXRlX3QpOiB0aGlzIHN0cnVjdHVyZS4KKwkqIHNyYy9vdXRwdXQuYywgc3JjL2xhbHIuYywgc3JjL3ByaW50X2dyYXBoLmMsIHNyYy9jb25mbGljdHMuYzoKKwlBZGp1c3QuCisKKzIwMDEtMTEtMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvbGFsci5oIChzdGF0ZV90KTogTmV3LgorCShzdGF0ZV90YWJsZSk6IEJlIGEgc3RhdGVfdCAqIGluc3RlYWQgb2YgYSBjb3JlICoqLgorCShhY2Nlc3Npbmdfc3ltYm9sKTogUmVtb3ZlLCBwYXJ0IG9mIHN0YXRlX3QuCisJKiBzcmMvbGFsci5jOiBBZGp1c3QuCisJKHNldF9hY2Nlc3Npbmdfc3ltYm9sKTogTWVyZ2UgaW50by4uLgorCShzZXRfc3RhdGVfdGFibGUpOiB0aGlzLgorCSogc3JjL3ByaW50X2dyYXBoLmMsIHNyYy9jb25mbGljdHMuYzogQWRqdXN0LgorCisyMDAxLTExLTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogdGVzdHMvY2FsYy5hdCwgdGVzdHMvb3V0cHV0LmF0LCB0ZXN0cy9yZWdyZXNzaW9uLmF0LAorCSogdGVzdHMvdGVzdHN1aXRlLmF0LCB0ZXN0cy90b3J0dXJlLmF0OiBSZWx5IG9uIEF1dG90ZXN0IDIuNTJnOgorCW5vdyB0aGUgdGVzdHMgYXJlIHJ1biBpbiBwcml2YXRlIGRpcnMsIHRoZXJlZm9yZSBBQ19DTEVBTlVQIGFuZAorCWZhbWlseSBjYW4gYmUgc2ltcGxpZmllZCB0byAwLWFyeS4KKwkqIHRlc3RzL2F0bG9jYWwuaW46IE5vdyB0aGF0IHdlIHJ1biBgZWxzZXdoZXJlJyB0aGFuIGluIHRlc3RzLywKKwl1c2UgYWJzLiBwYXRoIHRvIGZpbmQgY29uZmlnLmguCisJKiB0ZXN0cy9jYWxjLmF0IChBVF9DSEVDS19DQUxDKTogRG9uJ3QgdHJ5IHRvIGNoZWNrIHRoZSBjb21waWxlcidzCisJc3RkZXJyLCB0aGVyZSBjYW4gYmUgd2F5IHRvbyBtdWNoIHJhbmRvbSBub2lzZS4KKwlJbnN0ZWFkIHBhc3MgLVdlcnJvciB0byBHQ0MgYW5kIHJlbHkgb24gdGhlIGV4aXQgc3RhdHVzLgorCVJlcG9ydGVkIGJ5IFdvbGZyYW0gV2FnbmVyLgorCisyMDAxLTExLTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2Jpc29uLnNpbXBsZSAoeXlwYXJzZSk6IExldCB5eWxzMSwgeXlzczEgYW5kIHl5dnMxIGJlCisJZGVmaW5lZCBvbmx5IGlmIHl5b3ZlcmZsb3cgaXMgZGVmaW5lZCwgdG8gYXZvaWQgYHdhcm5pbmc6IHVudXNlZAorCXZhcmlhYmxlIGB5eXZzMScnLgorCVJlcG9ydGVkIGJ5IFRoZSBUZXN0IFN1aXRlLgorCisyMDAxLTExLTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3ByaW50LmM6IEluY2x1ZGUgcmVkdWNlLmguCisJUmVwb3J0ZWQgYnkgSGFucyBBYmVyZy4KKworMjAwMS0xMS0xNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9sZXguYywgc3JjL2xleC5oICh0b2tlbl9idWZmZXIsIHVubGV4ZWRfdG9rZW5fYnVmZmVyKToKKwlSZXZlcnQgYSBwcmV2aW91cyBwYXRjaDogIHRoZXNlIGFyZSByZWFsbHkgY29uc3QuCisJKiBzcmMvY29uZmxpY3RzLmMgKGNvbmZsaWN0X3JlcG9ydCk6IEFkZGl0aW9uYWwgdXNlbGVzcyBwYWlyIG9mCisJYnJhY2VzIHRvIHBhY2lmeSBHQ0MncyB3YXJuaW5ncyBmb3IgYGlmICgpIGlmICgpIHt9IGVsc2Uge30nLgorCSogc3JjL2xleC5jIChwYXJzZV9wZXJjZW50X3Rva2VuKTogUmVwbGFjZSBlcXVhbF9vZmZzZXQgd2l0aAorCWFyZ19vZmZzZXQuCisJYXJnIGlzIGNvbnN0LgorCUJlIHN1cmUgdG8gc3RyZHVwIGBhcmcnIHdoZW4gdXNlZCwgc2luY2UgdGhlcmUgaXMgbm8gcmVhc29uIGZvcgorCXRva2VuX2J1ZmZlciBub3QgdG8gY2hhbmdlLgorCisyMDAxLTExLTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3N5c3RlbS5oIChFWElUX1NVQ0NFU1MsIEVYSVRfRkFJTFVSRSk6IEVuc3VyZSBhIHByb3BlcgorCWRlZmluaXRpb24uCisJKiBzcmMvbWFpbi5jIChtYWluKTogVXNlIHRoZW0uCisJU3VnZ2VzdGVkIGJ5IEhhbnMgQWJlcmcuCisKKzIwMDEtMTEtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvc3lzdGVtLmggKG5nZXR0ZXh0KTogTm93IHRoYXQgd2UgdXNlIG5nZXR0ZXh0LCBiZSBzdXJlIHRvCisJcHJvdmlkZSBhIGRlZmF1bHQgZGVmaW5pdGlvbiB3aGVuIE5MUyBhcmUgbm90IHVzZWQuCisKKzIwMDEtMTEtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkb2MvYmlzb24udGV4aW5mbzogVXNlIGAkJyBhcyBzaGVsbCBwcm9tcHQsIG5vdCBgJScuCisJVXNlIEBrYmQgdG8gZGVub3RlIHVzZXIgaW5wdXQuCisJKExhbmd1YWdlIGFuZCBHcmFtbWFyKTogQU5TSWZ5IHRoZSBleGFtcGxlLgorCUFkanVzdCBpdHMgbGF5b3V0IGZvciBpbmZvL25vdGluZm8uCisJKExvY2F0aW9uIFRyYWNraW5nIENhbGMpOiBPdXRwdXQgZXJyb3IgbWVzc2FnZXMgdG8gc3RkZXJyLgorCU91dHB1dCBsb2NhdGlvbnMgaW4gYSBtb3JlIEdOVXRpY2FsbHkgY29ycmVjdCB3YXkuCisJRml4IGEgY291cGxlIG9mIEVuZ2xpc2hvcy4KKwlBZGp1c3QgQGdyb3VwL0BlbmQgZ3JvdXAgcGFpcnMuCisKKzIwMDEtMTEtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJJWV4cGVjdCB3YXMgbm90IGZ1bmN0aW9uaW5nIGF0IGFsbC4KKworCSogc3JjL2NvbmZsaWN0cy5jIChleHBlY3RlZF9jb25mbGljdHMpOiBTZXQgdG8gLTEuCisJKGNvbmZsaWN0X3JlcG9ydCk6IFVzZSBuZ2V0dGV4dC4KKwkoY29uZmxpY3RzX3ByaW50KTogQ2hlY2sgJWV4cGVjdCBhbmQgbWFrZSBpdHMgdmlvbGF0aW9uIGFuIGVycm9yLgorCSogZG9jL2Jpc29uLnRleGluZm8gKEV4cGVjdCBEZWNsKTogQWRqdXN0LgorCSogY29uZmlndXJlLmluIChBTV9HTlVfR0VUVEVYVCk6IEFzayBmb3IgbmdldHRleHQuCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0ICglZXhwZWN0IG5vdCBlbm91Z2gsICVleHBlY3QgcmlnaHQpCisJKCVleHBlY3QgdG9vIG11Y2gpOiBOZXcuCisKKzIwMDEtMTEtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChDb25mbGljdHMpOiBSZW5hbWUgYXMuLi4KKwkoVW5yZXNvbHZlZCBTUiBDb25mbGljdHMpOiB0aGlzLgorCShTb2x2ZWQgU1IgQ29uZmxpY3RzKTogTmV3LgorCisyMDAxLTExLTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3JlZHVjZS5jIChwcmludF9yZXN1bHRzKTogUmVuYW1lIGFzLi4uCisJKHJlZHVjZV9vdXRwdXQpOiBUaGlzLgorCU91dHB1dCB0byBPVVQsIHBhc3NlZCBhcyBhcmd1bWVudCwgaW5zdGVhZCBvZiBvdXRwdXRfb2JzdGFjay4KKwkoZHVtcF9ncmFtbWFyKTogTGlrZXdpc2UuCisJKHJlZHVjZV9mcmVlKTogTmV3LgorCUFsc28gZnJlZSBWMS4KKwkocmVkdWNlX2dyYW1tYXIpOiBObyBsb25nZXIgY2FsbCByZWR1Y2Vfb3V0cHV0LCBzaW5jZS4uLgorCSogc3JjL3ByaW50LmMgKHByaW50X3Jlc3VsdHMpOiBkbyBpdC4KKwkqIHNyYy9tYWluLmMgKG1haW4pOiBDYWxsIHJlZHVjZV9mcmVlOworCisyMDAxLTExLTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2NvbmZsaWN0cy5jIChwcmludF9yZWR1Y3Rpb25zKTogQWNjZXB0IE9VVCBhcyBhcmd1bWVudC4KKwlPdXRwdXQgdG8gaXQsIG5vdCB0byBvdXRwdXRfb2JzdGFjay4KKwkqIHNyYy9wcmludC5jIChwcmludF9hY3Rpb25zKTogQWRqdXN0LgorCisyMDAxLTExLTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2NvbmZsaWN0cy5jIChjb3VudF9zcl9jb25mbGljdHMsIGNvdW50X3JyX2NvbmZsaWN0cyk6IFJldHVybgorCXRoZSByZXN1bHQgaW5zdGVhZCBvZiB1c2luZy4uLgorCShzcmNfdG90YWwsIHJyY190b3RhbCwgc3JjX2NvdW50LCBycmNfY291bnQpOiBSZW1vdmUuCisJKGFueV9jb25mbGljdHMpOiBSZW1vdmUuCisJKHByaW50X2NvbmZsaWN0cyk6IFNwbGl0IGludG8uLi4KKwkoY29uZmxpY3RzX3ByaW50LCBjb25mbGljdHNfb3V0cHV0KTogTmV3LgorCSogc3JjL2NvbmZsaWN0cy5oOiBBZGp1c3QuCisJKiBzcmMvbWFpbi5jIChtYWluKTogSW52b2tlIGJvdGggY29uZmxpY3RzX291dHB1dCBhbmQgY29uZmxpY3RzX3ByaW50LgorCSogc3JjL3ByaW50LmMgKHByaW50X2dyYW1tYXIpOiBJc3N1ZSBgXG4nIGJldHdlZW4gdHdvIHJ1bGVzLgorCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoQ29uZmxpY3RzKTogTmV3LgorCVJlcG9ydGVkIGJ5IFRvbSBMYW5lLgorCisyMDAxLTExLTEyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogdGVzdHMvcmVncmVzc2lvbi5hdCAoSW52YWxpZCBpbnB1dCk6IFJlbW92ZSwgZHVwbGljYXRlIHdpdGgKKwlgYEludmFsaWQgaW5wdXQ6IDEnJy4KKworMjAwMS0xMS0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHRlc3RzL3RvcnR1cmUuYXQgKEFUX0RBVEFfU1RBQ0tfVE9SVFVSRSkKKwkoRXhwbG9kaW5nIHRoZSBTdGFjayBTaXplIHdpdGggQWxsb2NhKQorCShFeHBsb2RpbmcgdGhlIFN0YWNrIFNpemUgd2l0aCBNYWxsb2MpOiBOZXcuCisKKzIwMDEtMTEtMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvYmlzb24uc2ltcGxlIChZWVNUQUNLX1JFQUxMT0MpOiBOZXcuCisJKHl5cGFyc2UpIFsheXlvdmVyZmxvd106IFVzZSBpdCBhbmQgZnJlZSB0aGUgb2xkIHN0YWNrLgorCVJlcG9ydGVkIGJ5IFBlciBBbGxhbnNzb24uCisKKzIwMDEtMTEtMTIgIFBhc2NhbCBCYXJ0ICA8cGFzY2FsLmJhcnRAZXBpdGEuZnI+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGU6IERlZmluZSB0eXBlIHl5c3R5cGUgaW5zdGVhZCBvZiBZWVNUWVBFLCBhbmQKKwlkZWZpbmUgQ1BQIG1hY3JvLCB3aGljaCBzdWJzdGl0dXRlIFlZU1RZUEUgYnkgeXlzdHlwZS4KKwkqIHNyYy9yZWFkZXIuYyAocGFyc2VfdW5pb25fZGVjbCk6IE91dHB1dCB5eXN0eXBlL1lZU1RZUEUgYXMgd2UgZG8KKwl3aXRoIHl5bHR5cGUvWVlMVFlQRS4gIFRoaXMgYWxsb3dzIGluY2x1c2lvbiBvZiB0aGUgZ2VuZXJhdGVkCisJaGVhZGVyIHdpdGhpbiB0aGUgcGFyc2VyIGlmIHRoZSBjb21waWxlciwgc3VjaCBhcyBHR0MsIGFjY2VwdHMKKwltdWx0aXBsZSBlcXVpdmFsZW50ICNkZWZpbmVzLgorCUZyb20gQWtpbS4KKworMjAwMS0xMS0wNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9yZWFkZXIuYyAoc3ltYm9sc19vdXRwdXQpOiBOZXcsIGV4dHJhY3RlZCBmcm9tLi4uCisJKHBhY2tzeW1ib2xzKTogaGVyZS4KKwkocmVhZGVyKTogQWRqdXN0LgorCisyMDAxLTExLTA1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2xleC5jIChwYXJzZV9wZXJjZW50X3Rva2VuKTogcy9xdW90ZWFyZy9xdW90ZS8uCisKKzIwMDEtMTEtMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChBVF9URVNUX0NQUF9HVUFSRF9IKTogQWRqdXN0IHRoZSBjbGVhbiB1cAorCXBhdHRlcm4uCisKKzIwMDEtMTEtMDUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvb3B0aW9ucy5oIChzdHJ1Y3Qgb3B0aW9uX3RhYmxlX3N0cnVjdCk6IHNldF9mbGFncyBpcyB2b2lkKi4KKwkqIHNyYy9vcHRpb25zLmMgKGxvbmdvcHRzKTogU3VwcG9ydCBgLS1vdXRwdXQnIGFuZCBgJW91dHB1dCcuCisJKHVzYWdlKTogQWRqdXN0LgorCSogc3JjL2xleC5oICh0b2tfc2V0b3B0KTogUmVtb3ZlLCByZXBsYWNlZCB3aXRoLi4uCisJKHRva19pbnRvcHQsIHRva19zdHJvcHQpOiB0aGVzZSBuZXcgZ3V5cy4KKwkqIHNyYy9sZXguYyAoZ2V0b3B0LmgpOiBOb3QgbmVlZGVkLgorCSh0b2tlbl9idWZmZXIsIHVubGV4ZWRfdG9rZW5fYnVmZmVyKTogTm90IGNvbnN0LgorCShwZXJjZW50X3RhYmxlKTogUHJvbW90ZSBgLScgb3ZlciBgXycgaW4gZGlyZWN0aXZlIG5hbWVzLgorCUFjdGl2ZSBgJW5hbWUtcHJlZml4JywgYGZpbGUtcHJlZml4JywgYW5kIGBvdXRwdXQnLgorCShwYXJzZV9wZXJjZW50X3Rva2VuKTogQWNjZXB0IHBvc3NpYmxlIGFyZ3VtZW50cyB0byBkaXJlY3RpdmVzLgorCVByb21vdGUgYC0nIG92ZXIgYF8nIGluIGRpcmVjdGl2ZSBuYW1lcy4KKworMjAwMS0xMS0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChEZWNsIFN1bW1hcnkpOiBTcGxpdCB0aGUgbGlzdCBpbnRvCisJYGRpcmVjdGl2ZXMgZm9yIGdyYW1tYXJzJyBhbmQgYGRpcmVjdGl2ZXMgZm9yIGJpc29uJy4KKwlTb3J0J2VtLgorCUFkZCBkZXNjcmlwdGlvbiBvZiBgJW5hbWUtcHJlZml4JywgYGZpbGUtcHJlZml4JywgYW5kIGBvdXRwdXQnLgorCVByb21vdGUgYC0nIG92ZXIgYF8nIGluIGRpcmVjdGl2ZSBuYW1lcy4KKwkoQmlzb24gT3B0aW9ucyk6IHMvJWxvY2FjdGlvbnMvJWxvY2F0aW9ucy8uICBOaWNlIEZyZXVkaWFuIHNsaXAuCisJU2ltcGxpZnkgdGhlIGRlc2NyaXB0aW9uIG9mIGAtLW5hbWUtcHJlZml4Jy4KKwlQcm9tb3RlIGAtJyBvdmVyIGBfJyBpbiBkaXJlY3RpdmUgbmFtZXMuCisJUHJvbW90ZSBgLS1vdXRwdXQnIG92ZXIgYC0tb3V0cHV0LWZpbGUnLgorCUZpeCB0aGUgZGVzY3JpcHRpb24gb2YgYC0tZGVmaW5lcycuCisJKiB0ZXN0cy9vdXRwdXQuYXQ6IEV4ZXJjaXNlICVmaWxlLXByZWZpeCBhbmQgJW91dHB1dC4KKworMjAwMS0xMS0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRvYy9yZWZjYXJkLnRleDogVXBkYXRlLgorCisyMDAxLTExLTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3N5bXRhYi5oIChTVU5ERUYpOiBOZXcuCisJKiBzcmMvc3ltdGFiLmMgKGJ1Y2tldF9uZXcpOiBJbml0IHVzZXJfdG9rZW5fbnVtYmVyIHRvIFNVTkRFRiB0bworCXN0YW5kIGZvciBgdW5pbml0aWFsaXplZCcsIGluc3RlYWQgb2YgMC4KKwkqIHNyYy9yZWFkZXIuYyAocGFja3N5bWJvbHMsIHBhcnNlX3Rob25nX2RlY2wpOiBBZGp1c3QuCisJKiBzcmMvbGV4LmMgKGxleCk6IEFkanVzdC4KKworCSogdGVzdHMvY2FsYy5hdCAoX0FUX0RBVEFfQ0FMQ19ZKTogRGVjbGFyZSBhIHRva2VuIGZvciBFT0YuCisJTnVtYmVyIGl0IDAuCisJTGV0IHl5bGV4IHJldHVybiBpdCBpbnN0ZWFkIG9mIGEgcGxhaW4gMC4KKwlSZXBvcnRlZCBieSBEaWNrIFN0cmVlZmxhbmQuCisKKzIwMDEtMTEtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChNaXhpbmcgJXRva2VuIHN0eWxlcyk6IE5ldyB0ZXN0LgorCisyMDAxLTExLTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3JlYWRlci5jIChwYXJzZV90aG9uZ19kZWNsKTogRm9ybWF0dGluZyBjaGFuZ2VzLgorCSh0b2tlbl90cmFuc2xhdGlvbnNfaW5pdCk6IE5ldywgZXh0cmFjdGVkIGZyb20uLi4KKwkocGFja3N5bWJvbHMpOiBIZXJlLgorCUFkanVzdC4KKworMjAwMS0xMS0wMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQgKEFUX1RFU1RfQ1BQX0dVQVJEX0gpOiBOZXcuCisJQ2hlY2sgdGhhdCBgOWZvby55JyBwcm9kdWNlcyBjb3JyZWN0IGNwcCBndWFyZHMuCisJKiBzcmMvZmlsZXMuYyAoY29tcHV0ZV9oZWFkZXJfbWFjcm8pOiBQcmVwZW5kIGBCSVNPTl8nIHRvIENQUAorCWd1YXJkcy4KKwlSZXBvcnRlZCBieSBXd3AuCisKKzIwMDEtMTEtMDEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChJbnZhbGlkIGlucHV0OiAyKTogTmV3LgorCSogc3JjL2xleC5jICh1bmxleGVkX3Rva2VuX2J1ZmZlcik6IE5ldy4KKwkobGV4LCB1bmxleCk6IEFkanVzdDogd2hlbiB1bmxleGluZywgYmUgc3VyZSB0byBzYXZlIHRva2VuX2J1ZmZlcgorCXRvby4KKwlSZXBvcnRlZCBieSBXd3AuCisKKzIwMDEtMTEtMDEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiB0ZXN0cy9jYWxjLmF0OiBDYXRjaCB1cCB3aXRoIDEuMzAuCisJKiBjb25maWd1cmUuaW46IEJ1bXAgdG8gMS40OWEuCisJQWRqdXN0IHRvIG5ld2VyIEF1dG90ZXN0LgorCisyMDAxLTEwLTE5ICBQYXNjYWwgQmFydCAgPHBhc2NhbC5iYXJ0QGVwaXRhLmZyPgorCisJKiBzcmMvY29uZmxpY3RzLmM6IE1vdmUgZ2xvYmFsIHZhcmlhYmxlcyBycmNfdG90YWwgYW5kIHNyY190b3RhbCAuLi4KKwkocHJpbnRfY29uZmxpY3RzKTogaGVyZS4KKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0KTogRnJlZSBnbG9iYWwgdmFyaWFibGUgdXNlcl90b2tudW1zLgorCSogc3JjL2xleC5jICh0b2tlbl9vYnN0YWNrKTogQmVjb21lIHN0YXRpYy4KKworMjAwMS0xMC0xOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHRlc3RzL2F0bG9jYWwuaW4gKEdDQyk6IEFkZC4KKwkqIHRlc3RzL2NhbGMuYXQ6IHMvbTRfbWF0Y2gvbTRfYm1hdGNoLy4KKwlzL200X3BhdHN1YnN0L200X2JwYXRzdWJzdC8uCisJKEFUX0NIRUNLX0NBTEMpOiBDaGVjayB0aGUgY29tcGlsZXIncyBzdGRlcnIgb25seSBpZiBpdCdzIEdDQy4KKwkqIGNvbmZpZ3VyZS5pbjogQUNfU1VCU1QoR0NDKS4KKworMjAwMS0xMC0xNCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKworCSogc3JjL29wdGlvbnMuYyAoY3JlYXRlX2xvbmdfb3B0aW9uX3RhYmxlKTogRml4LgorCisyMDAxLTEwLTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2Jpc29uLnNpbXBsZTogQmUgc3VyZSB0byBzZXQgWVlTVEFDS19VU0VfQUxMT0NBLgorCisyMDAxLTEwLTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3JlYWRlci5jIChwYXJzZV91bmlvbl9kZWNsKTogUHVzaCB0aGUgY2FyYWN0ZXJzIGluCisJdW5pb25fb2JzdGFjaywgbm90IGF0dHJzX29ic3RhY2suCisKKzIwMDEtMTAtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJTWVyZ2UgaW4gdGhlIGJyYW5jaCAxLjI5LgorCisJKiBzcmMvcmVhZGVyLmMgKHBhY2tzeW1ib2xzKTogVXNlIGEgdGVtcG9yYXJ5IG9ic3RhY2sgZm9yCisJYCUldG9rZW5kZWYnLCBzaW5jZSBvdXRwdXRfc3RhY2sgaXMgYWxyZWFkeSB1c2VkIGVsc2V3aGVyZS4KKworCTIwMDEtMTAtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJQnVtcCAxLjI5ZC4KKworCTIwMDEtMTAtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJVmVyc2lvbiAxLjI5Yy4KKworCTIwMDEtMTAtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChJbnZhbGlkIENQUCBoZWFkZXJzKTogTmV3LgorCUZyb20gQWxleGFuZGVyIEJlbG9wb2xza3kuCisJKiBzcmMvZmlsZXMuYyAoY29tcHV0ZV9oZWFkZXJfbWFjcm8pOiBNYXAgbm9uIGFsbnVtIGNoYXJzIHRvIGBfJy4KKworCTIwMDEtMTAtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiB0ZXN0cy9yZWdyZXNzaW9uLmF0IChJbnZhbGlkIGlucHV0KTogTmV3LgorCSogc3JjL2xleC5jIChsZXgpOiBCZSBzdXJlIHRvIHNldCBgdG9rZW5fYnVmZmVyJyBpbiBhbnkgY2FzZS4KKwlSZXBvcnRlZCBieSBTaHVyYS4KKworCTIwMDEtMTAtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiB0ZXN0cy9jYWxjLmF0OiBOb3cgdGhhdCAtLWRlYnVnIHdvcmtzLCB0aGUgdGVzdHMgbXVzdCBiZSBhZGp1c3RlZC4KKworCTIwMDEtMTAtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9wYXJzZXIpOiBBc3NlcnQgYHNrZWxldG9uJy4KKwkqIHNyYy9maWxlcy5jIChza2VsZXRvbl9maW5kKTogTG9vayBoYXJkZXIgZm9yIHNrZWxldG9ucyBvbiBET1Npc2gKKwlzeXN0ZW1zLgorCUZyb20gU2h1cmEuCisKKwkyMDAxLTEwLTAxICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvbGV4Lmg6IEVjaG8gbW9kaWZpY2F0aW9ucy4KKwkqIHNyYy9sZXguYyAodW5sZXgpOiBQYXJhbWV0ZXIgaXMgbm93IHRva2VuX3QuCisJRnJvbSBIYW5zIEFiZXJnLgorCisJMjAwMS0xMC0wMSAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKworCSogc3JjL21haW4uYzogSW5jbHVkZSBsZXguaC4KKwlGcm9tIEhhbnMgQWJlcmcuCisKKwkyMDAxLTA5LTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2dldGFyZ3MuYyAobG9uZ29wdHMpOiBgLS1kZWJ1ZycgaXMgYC10Jywgbm90IGAtZCcuCisKKwkyMDAxLTA5LTI4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogdGVzdHMvdGVzdHN1aXRlLmF0OiBVcGRhdGUgdG8gbmV3ZXIgQXV0b3Rlc3QuCisJKiB0ZXN0cy9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IGJpc29uIGlzIG5vdCB0byBiZSBzaGlwcGVkLgorCisJMjAwMS0wOS0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlQb3NpdGlvbiBpbmRlcGVuZGVudCB3cmFwcGVyLgorCisJKiB0ZXN0cy9iaXNvbjogUmVtb3ZlLgorCSogdGVzdHMvYmlzb24uaW46IE5ldy4KKwkqIGNvbmZpZ3VyZS5pbjogQWRqdXN0LgorCisJMjAwMS0wOS0yNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwlQb3J0IHF1b3RlYXJnIGZpeGVzIGZyb20gdGFyIDEuMTMuMjQuCisKKwkqIGxpYi9xdW90ZWFyZy5jOiBCU0QvT1MgNC4xIHdjaGFyLmggcmVxdWlyZXMgRklMRSBhbmQgc3RydWN0CisJdG0gdG8gYmUgZGVjbGFyZWQuCisJKEhBVkVfTUJTSU5JVCk6IFVuZGVmIGlmICFIQVZFX01CUlRPV0MuCisJKG1ic2luaXQpOiBEZWZpbmUgdG8gMSBpZiAhZGVmaW5lZCBtYnNpbml0ICYmICFIQVZFX01CU0lOSVQuCisKKwkqIG00L01ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIG1icnRvd2MubTQuCisJKiBtNC9tYnJ0b3djLm00OiBOZXcgZmlsZS4KKwkqIG00L3ByZXJlcS5tNCAoam1fUFJFUkVRX1FVT1RFQVJHKTogQ2hlY2sgZm9yIG1ic2luaXQgYW5kIHN0ZGRlZi5oLgorCVVzZSBqbV9GVU5DX01CUlRPV0MgaW5zdGVhZCBvZiBBQ19DSEVDS19GVU5DUyhtYnJ0b3djKS4KKworCTIwMDEtMDktMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJQnVtcCB0byAxLjI5Yy4KKworCTIwMDEtMDktMjcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJVmVyc2lvbiAxLjI5Yi4KKworCTIwMDEtMDktMjUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvc3lzdGVtLmg6IEluY2x1ZGUgYHhhbGxvYy5oJy4KKwlSZW1vdmUgaXQgZnJvbSB0aGUgQyBmaWxlcy4KKwkqIHNyYy9maWxlcy5jIChvdXRwdXRfZmlsZXMpOiBGcmVlIHRoZSBvYnN0YWNrcy4KKwkqIHNyYy9sZXguYyAoaW5pdF9sZXgpOiBSZW5hbWUgYXMuLi4KKwkobGV4X2luaXQpOiB0aGlzLgorCShsZXhfZnJlZSk6IE5ldy4KKwkqIHNyYy9tYWluLmMgKG1haW4pOiBVc2UgaXQuCisKKwkyMDAxLTA5LTI0ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvdmNnLmMgKG9wZW5fZWRnZSwgY2xvc2VfZWRnZSwgb3Blbl9ub2RlLCBjbG9zZV9ub2RlKTogQ2hhbmdlCisJdG8gb3V0cHV0IGluZm9ybWF0aW9ucyBpbiBmb3V0IChGSUxFKikuCisJKG9wZW5fZ3JhcGgsIGNsb3NlX2dyYXBoKTogTGlrZXdpc2UuCisJKG91dHB1dF9ncmFwaCwgb3V0cHV0X2VkZ2UsIG91dHB1dF9ub2RlKTogTGlrZXdpc2UuCisJKiBzcmMvdmNnLmg6IFVwZGF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzLgorCSogc3JjL3ByaW50X2dyYXBoLmMgKHByaW50X2dyYXBoKTogT3BlbiBvdXRwdXQgZ3JhcGggZmlsZS4KKwkocHJpbnRfYWN0aW9ucyk6IEFkanVzdC4KKwkqIHNyYy9maWxlcy5oOiBSZW1vdmUgZXh0ZXJuIGRlY2xhcmF0aW9uLgorCSogc3JjL2ZpbGVzLmM6IFJlbW92ZSBncmFwaF9vYnN0YWNrIGRlY2xhcmF0aW9uLgorCShvcGVuX2ZpbGVzKTogUmVtb3ZlIGdyYXBoX29ic3RhY2sgaW5pdGlhbGl6YXRpb24uCisJKG91dHB1dF9maWxlcyk6IFJlbW92ZSBncmFwaF9vYnN0YWNrIHNhdmluZy4KKworCTIwMDEtMDktMjQgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisKKwkqIHNyYy9maWxlcy5jIChjb21wdXRlX291dHB1dF9maWxlX25hbWVzKTogRml4LgorCisJMjAwMS0wOS0yNCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4sCisJCSAgICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3JlYWRlci5jIChyZWFkZXIpOiBSZW1vdmUgY2FsbCB0byBmcmVlX3N5bXRhYiAoKS4KKwkqIHNyYy9tYWluLmMgKG1haW4pOiBDYWxsIGl0IGhlcmUuCisJSW5jbHVkZSBzeW10YWIuaC4KKwkqIHNyYy9jb25mbGljdHMuYyAoaW5pdGlhbGl6ZV9jb25mbGljdHMpOiBSZW5hbWUgYXMuLi4KKwkoc29sdmVfY29uZmxpY3RzKTogdGhpcy4KKwkqIHNyYy9wcmludC5jIChwcmludF9jb3JlLCBwcmludF9hY3Rpb25zLCBwcmludF9zdGF0ZSkKKwkocHJpbnRfZ3JhbW1hcik6IER1bXAgdG8gYSBmaWxlIGluc3RlYWQgYSBgb3V0cHV0X29ic3RhY2snLgorCShwcmludF9yZXN1bHRzKTogRHVtcCBgb3V0cHV0X29ic3RhY2snLCBhbmQgdGhlbiBwcm9jZWVkIHdpdGggdGhlCisJRklMRSAqLgorCSogc3JjL2ZpbGVzLmMgKGNvbXB1dGVfb3V0cHV0X2ZpbGVfbmFtZXMsIGNsb3NlX2ZpbGVzKTogTmV3LgorCShvdXRwdXRfZmlsZXMpOiBBZGp1c3QuCisJKiBzcmMvbWFpbi5jIChtYWluKTogQWRqdXN0LgorCisJMjAwMS0wOS0yMyAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKworCSogc3JjL2ZpbGVzLmMgKGNvbXB1dGVfaGVhZGVyX21hY3JvKTogQ29tcHV0ZXMgaGVhZGVyIG1hY3JvIG5hbWUKKwlmcm9tIHNwZWNfZGVmaW5lc19maWxlIHdoZW4gZ2l2ZW4uCisKKwkyMDAxLTA5LTIzICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvZmlsZXMuYyAob3V0cHV0X2ZpbGVzKTogQWRkIGRlZmF1bHQgZXh0ZW5zaW9ucy4KKworCTIwMDEtMDktMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvY29uZmxpY3RzLmMgKGZpbmFsaXplX2NvbmZsaWN0cyk6IFJlbmFtZSBhcy4uLgorCShmcmVlX2NvbmZsaWN0cyk6IHRoaXMuCisKKwkyMDAxLTA5LTIyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2dyYW0uYyAoZ3JhbV9mcmVlKTogUmVuYW1lIGJhY2sgYXMuLi4KKwkoZHVtbXkpOiB0aGlzLgorCShvdXRwdXRfdG9rZW5fdHJhbnNsYXRpb25zKTogRnJlZSBgdG9rZW5fdHJhbnNsYXRpb25zJy4KKwkqIHNyYy9zeW10YWIuYyAoZnJlZV9zeW10YWIpOiBGcmVlIHRoZSB0YWcgZmllbGQuCisKKwkyMDAxLTA5LTIyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCVJlbW92ZSBgdHJhbnNsYXRpb25zJyBhcyBpdCBpcyBhbHdheXMgc2V0IHRvIHRydWUuCisKKwkqIHNyYy9ncmFtLmg6IEFkanVzdC4KKwkqIHNyYy9yZWFkZXIuYyAocGFja3N5bWJvbHMsIHBhcnNlX3Rva2VuX2RlY2wpOiBBZGp1c3QKKwkqIHNyYy9wcmludC5jIChwcmludF9ncmFtbWFyKTogQWRqdXN0LgorCSogc3JjL291dHB1dC5jIChvdXRwdXRfdG9rZW5fdHJhbnNsYXRpb25zKTogQWRqdXN0LgorCSogc3JjL2xleC5jIChsZXgpOiBBZGp1c3QuCisJKiBzcmMvZ3JhbS5jOiBCZSBzdXJlIHRoZSBzZXQgcG9pbnRlcnMgdG8gTlVMTC4KKwkoZHVtbXkpOiBSZW5hbWUgYXMuLi4KKwkoZ3JhbV9mcmVlKTogdGhpcy4KKworCTIwMDEtMDktMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBjb25maWd1cmUuaW46IEludm9rZSBBTV9MSUJfRE1BTExPQy4KKwkqIHNyYy9zeXN0ZW0uaDogVXNlIGRtYWxsb2MuCisJKiBzcmMvTFIwLmM6IEJlIHN1cmUgdG8gaGF2ZSBwb2ludGVycyBpbml0aWFsaXplZCB0byBOVUxMLgorCShhbGxvY2F0ZV9pdGVtc2V0cyk6IEFsbG9jYXRlIGtlcm5lbF9pdGVtcyBvbmx5IGlmIG5lZWRlZC4KKworCTIwMDEtMDktMjIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBjb25maWd1cmUuaW46IEJ1bXAgdG8gMS4yOWIuCisJKiB0ZXN0cy9NYWtlZmlsZS5hbSAoRElTVENMRUFORklMRVMpOiBBZGQgcGFja2FnZS5tNC4KKwkqIHRlc3RzL2NhbGMuYXQgKF9BVF9EQVRBX0NBTENfWSk6ICN1bmRlZiBtYWxsb2Mgc28gdGhhdCB3ZSBkb24ndAorCW5lZWQgeG1hbGxvYy5jIGluIGNhbGMueS4KKwlGcm9tIFBhc2NhbCBCYXJ0LgorCisJMjAwMS0wOS0yMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlWZXJzaW9uIDEuMjlhLgorCSogTWFrZWZpbGUubWFpbnQsIGNvbmZpZy9jb25maWcuZ3Vlc3MsIGNvbmZpZy9jb25maWcuc3ViLAorCSogY29uZmlnL21pc3Npbmc6IFVwZGF0ZSBmcm9tIG1hc3RlcnMuCisJKiB0ZXN0cy9NYWtlZmlsZS5hbSAoJChzcmNkaXIpLyQoVEVTVFNVSVRFKSk6IE5vIGxvbmdlciBkZXBlbmQKKwl1cG9uIHBhY2thZ2UubTQuCisJKiBjb25maWd1cmUuaW4gKEFMTF9MSU5HVUFTKTogQWRkIGB0cicuCisKKwkyMDAxLTA5LTIxICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogdGVzdHMvTWFrZWZpbGUuYW0gKHBhY2thZ2UubTQpOiBNb3ZlIHRvLi4uCisJKCQoc3JjZGlyKS8kKFRFU1RTVUlURSkpOiBoZXJlLgorCisJMjAwMS0wOS0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9jb21wbGFpbi5jOiBObyBsb25nZXIgdHJ5IHRvIGJlIHN0YW5kYWxvbmU6IHVzZSBzeXN0ZW0uaC4KKwlEb24ndCBhc3N1bWUgX19TVERDX18gaXMgZGVmaW5lZCB0byAxLiBKdXN0IHRlc3QgaWYgaXQgaXMgZGVmaW5lZC4KKwkqIHNyYy9jb21wbGFpbi5oOiBMaWtld2lzZS4KKwkqIHNyYy9yZWR1Y2UuYyAodXNlbGVzc19ub250ZXJtaW5hbHMsIGluYWNjZXNzYWJsZV9zeW1ib2xzKToKKwlSZW1vdmUgdGhlIHVudXNlZCB2YXJpYWJsZSBgbicuCisJRnJvbSBBbGJlcnQgQ2hpbi1BLVlvdW5nLgorCisJMjAwMS0wOS0xOCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKworCSogZG9jL2Jpc29uLjE6IFVwZGF0ZS4KKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChCaXNvbiBPcHRpb25zKTogVXBkYXRlIC0tZGVmaW5lcyBhbmQgLS1ncmFwaAorCWRlc2NyaXB0aW9ucy4KKwkoT3B0aW9uIENyb3NzIEtleSk6IFVwZGF0ZS4KKwlBZGQgLS1ncmFwaC4KKworCTIwMDEtMDktMTggIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisKKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQ6IE5ldyB0ZXN0IChjb21tZW50IGluICV1bmlvbikuCisKKwkyMDAxLTA5LTE4ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKHBhcnNlX3VuaW9uX2RlY2wpOiBEbyBub3Qgb3V0cHV0ICcvJy4gTGV0IGNvcHlfY29tbWVudAorCWRvIHRoYXQuCisJUmVwb3J0ZWQgYnkgS2VpdGggQnJvd25lLgorCisJMjAwMS0wOS0xOCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKworCSogdGVzdHMvb3V0cHV0LmF0OiBBZGQgdGVzdHMgZm9yIC0tZGVmaW5lcyBhbmQgLS1ncmFwaC4KKworCTIwMDEtMDktMTggIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisKKwkqIHRlc3RzL291dHB1dC5hdDogUmVtb3ZlcyB0ZXN0cyBvZiAle2hlYWRlcixzcmN9X2V4dGVuc2lvbiBmZWF0dXJlcy4KKworCTIwMDEtMDktMTggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiB0ZXN0cy9NYWtlZmlsZS5hbSAocGFja2FnZS5tNCk6IE5ldy4KKwkqIHRlc3RzL2NhbGMuYXQgKF9BVF9DSEVDS19DQUxDKTogSnVzdCBydW4gYGNhbGMgaW5wdXQnLgorCShfQVRfQ0hFQ0tfQ0FMQ19FUlJPUik6IExpa2V3aXNlLgorCUZhY3RvciB0aGUgYCwgJyBwYXJ0IG9mIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMuCisKKwkyMDAxLTA5LTE4ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvZ2V0YXJncy5jIChsb25nb3B0cyk6IERlY2xhcmUgLS1kZWZpbmVzIGFuZCAtLWdyYXBoIGFzIG9wdGlvbnMKKwl3aXRoIG9wdGlvbmFsIGFyZ3VtZW50cy4KKwkqIHNyYy9maWxlcy5oOiBBZGQgZXh0ZXJuIGRlY2xhcmF0aW9ucy4KKwkqIHNyYy9maWxlcy5jIChzcGVjX2dyYXBoX2ZpbGUsIHNwZWNfZGVmaW5lc19maWxlKTogTmV3LgorCShvdXRwdXRfZmlsZXMpOiBVcGRhdGUuCisJUmVtb3ZlIENQUC1vdXRlZCBjb2RlLgorCisJMjAwMS0wOS0xOCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKworCVR1cm4gb2ZmICV7c291cmNlLGhlYWRlcn1fZXh0ZW5zaW9uIGZlYXR1cmUuCisKKwkqIHNyYy9maWxlcy5jIChjb21wdXRlX2V4dHNfZnJvbV9nZik6IFVwZGF0ZS4KKwkoY29tcHV0ZV9leHRzX2Zyb21fc3JjKTogVXBkYXRlLgorCShvdXRwdXRfZmlsZXMpOiBDUFAtb3V0IHVzZWxlc3MgY29kZS4KKwkqIHNyYy9maWxlcy5oOiBSZW1vdmUge2hlYWRlcixzb3VyY2V9X2V4dGVuc2lvbiBleHRlcm4gZGVjbGFyYXRpb25zLgorCSogc3JjL3JlYWRlci5jIChwYXJzZV9kcXVvdGVkX3BhcmFtKTogQ1BQLW91dC4KKwkocGFyc2VfaGVhZGVyX2V4dGVuc2lvbl9kZWNsKTogUmVtb3ZlLgorCShwYXJzZV9zb3VyY2VfZXh0ZW5zaW9uX2RlY2wpOiBSZW1vdmUuCisJKHJlYWRfZGVjbGFyYXRpb25zKTogUmVtb3ZlIGNhc2VzIHRva197aGRyZXh0LHNyY2V4dH0uCisJKiBzcmMvbGV4LmMgKHBlcmNlbnRfdGFibGUpOiBSZW1vdmUge2hlYWRlcixzb3VyY2V9X2V4dGVuc2lvbiBlbnRyaWVzLgorCSogc3JjL2xleC5oICh0b2tlbl90KTogUmVtb3ZlIHRva19oZHJleHQgYW5kIHRva19zcmNleHQuCisKKwkyMDAxLTA5LTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogdGVzdHMvb3V0cHV0LmF0IChBVF9DSEVDS19CSVNPTl9GTEFHUywgQVRfQ0hFQ0tfQklTT05fUEVSQ0VOVCk6CisJKEFUX0NIRUNLX0JJU09OX1BFUkNFTlRfRkxBR1MpOiBNZXJnZSBpbnRvLi4uCisJKEFUX0NIRUNLX09VVFBVVCk6IHRoaXMuCisJTWVyZWx5IGNoZWNrIGxzJyBleGl0IHN0YXR1cywgaXRzIG91dHB1dCBpcyB1c2VsZXNzLgorCisJMjAwMS0wOS0xMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHRlc3RzL2NhbGMuYXQ6IFVzZSBtNF9tYXRjaC4KKwkoX0FUX0RBVEFfQ0FMQ19ZKTogQ2hlY2sgYHl5aW4gIT0gTlVMTCcsIG5vdCBgc3RkaW4gIT0gTlVMTCcuCisKKwkyMDAxLTA5LTEwICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPiwKKwkJICAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvdmNnLmggKGdyYXBoX3MpOiBjb2xvciwgdGV4dGNvbG9yLCBib3JkZXJjb2xvciBhcmUgbm93CisJZW51bSBjb2xvcl9lLgorCSogc3JjL3ByaW50X2dyYXBoLmMgKHByaW50X2dyYXBoKTogSW5pdGFsaXplIGdyYXBoLmxheW91dGFsZ29yaXRobQorCXRvIGBub3JtYWwnLgorCSogc3JjL3JlYWRlci5jIChwYXJzZV90b2tlbl9kZWNsKTogSW5pdGlhbGl6ZSB0b2tlbiB3aXRoIHRva19lb2YuCisJKiBzcmMvbGV4Lmg6IEFkanVzdCBwcm90b3R5cGUuCisJKHRva2VuX3QpOiBBZGQgYHRva191bmRlZicuCisJKiBzcmMvbGV4LmMgKHN0cnVjdCBwZXJjZW50X3RhYmxlX3N0cnVjdCk6IFJldHZhbCBpcyBub3cgYSB0b2tlbl90LgorCShwYXJzZV9wZXJjZW50X3Rva2VuKTogTm93IHJldHVybnMgdG9rZW5fdC4KKwlBZGQgZGVmYXVsdCBzdGF0ZW1lbnQgaW4gc3dpdGNoLgorCShsZXgpOiBTZXBhcmF0ZSBgYycgYXMgYW4gaW5wdXQgdmFyaWFibGUsIGZyb20gdGhlIHRva2VuX3QgcmVzdWx0CisJcGFydC4KKwkodW5sZXhlZCk6IElzIGEgdG9rZW5fdC4KKworCTIwMDEtMDktMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBjb25maWd1cmUuaW46IEJ1bXAgdG8gMS4yOWEuCisKKwkyMDAxLTA5LTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCVZlcnNpb24gMS4yOS4KKworCTIwMDEtMDgtMzAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiB0ZXN0cy9hdGdlbmVyYWwubTQsIHRlc3RzL2F0Y29uZmlnLmluLCB0ZXN0cy9zdWl0ZS5hdDogUmVtb3ZlLgorCSogbTQvYXRjb25maWcubTQ6IFJlbW92ZS4KKwkqIHRlc3RzL3Rlc3RzdWl0ZS5hdCwgdGVzdHMvYXRsb2NhbC5pbiwgdGVzdHMvb3V0cHV0LmF0LAorCSogdGVzdHMvYmlzb246IE5ldy4KKwkqIHRlc3RzL3JlZ3Jlc3Npb24uYXQsIHRlc3RzL2NhbGMuYXQ6IFVzZSBtNF9kZWZpbmUsIEFUX0JBTk5FUiwKKwltNF9pZiwgbTRfcGF0c3Vic3QsIGFuZCBtNF9yZWdleHAuCisJKiB0ZXN0cy9jYWxjLmF0IChfQVRfQ0hFQ0tfQ0FMQywgX0FUX0NIRUNLX0NBTENfRVJST1IpOiBVc2UgYW4KKwlgaW5wdXQnIGZpbGUgaW5zdGVhZCBvZiBlY2hvLgorCisJMjAwMS0wOC0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlCdW1wIHRvIDEuMjhlLgorCisJMjAwMS0wOC0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlWZXJzaW9uIDEuMjhkLgorCisJMjAwMS0wOC0yOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGUgKHl5cGFyc2UpOiBEb24ndCB0YWtlIHRoZSBhZGRyZXNzIG9mIGFuCisJaXRlbSBiZWZvcmUgdGhlIHN0YXJ0IG9mIGFuIGFycmF5LCBhcyB0aGF0IGRvZXNuJ3QgY29uZm9ybSB0bworCXRoZSBDIFN0YW5kYXJkLgorCisJMjAwMS0wOC0yOSAgUm9iZXJ0IEFuaXNrbyAgPGFuaXNrb19yQGVwaXRhLmZyPgorCisJKiBkb2MvYmlzb24udGV4aW5mbyAoTG9jYXRpb24gVHJhY2tpbmcgQ2FsYyk6IE5ldyBub2RlLgorCisJMjAwMS0wOC0yOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0KTogRG8gbm90IGRlZmluZSBjb25zdCwgYXMgdGhpcyBub3cKKwljYXVzZXMgbW9yZSBwcm9ibGVtcyB0aGFuIGl0IGN1cmVzLgorCisJMjAwMS0wOC0yOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvOiBNb2Rlcm5pemUgYEBub2RlJyBhbmQgYEB0b3AnIHVzZToganVzdCBuYW1lCisJdGhlIG5vZGVzLgorCUJlIHN1cmUgdG8gdGFnIHRoZSBgZGV0YWlsbWVudScuCisKKwkyMDAxLTA4LTI5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogTWFrZWZpbGUubWFpbnQgKGRvLXBvLXVwZGF0ZSk6IFdnZXQgcmVmdXNlcyB0byBvdmVyd3JpdGUgZmlsZXM6CisJZG93bmxvYWQgaW4gYSB0bXAgZGlyLgorCisJMjAwMS0wOC0yOCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKworCSogY29uZmlnL2RlcGNvbXA6IE5ldyBmaWxlLgorCisJMjAwMS0wOC0yOCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKworCSogZG9jL2Jpc29uLjEgKG1hbmRvYyk6IEFkanVzdC4KKwlGcm9tIEp1YW4gTWFudWVsIEd1ZXJyZXJvLgorCisJMjAwMS0wOC0yOCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKworCSogc3JjL3ByaW50X2dyYXBoLmMgKHByaW50X3N0YXRlKTogRml4LgorCisJMjAwMS0wOC0yNyAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKworCSogc3JjL3ZjZy5oIChjbGFzc25hbWVfcywgaW5mb25hbWVfcywgbm9kZV9zKTogQ29uc3RpZnkgdGhlCisJY2hhciAqIG1lbWJlcnMuCisJRWNobyBtb2RpZmljYXRpb25zIHRvIHRoZSBmdW5jdGlvbnMgcHJvdG90eXBlcy4KKwkqIHNyYy92Y2cuYyAoYWRkX2NsYXNzbmFtZSwgYWRkX2luZm9uYW1lKTogQWRqdXN0IGFyZ3VtZW50cy4KKworCTIwMDEtMDgtMjcgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisKKwkqIHNyYy92Y2cuYzogSW5jbHVkZSBgeGFsbG9jLmgnLgorCShhZGRfY29sb3JlbnRyeSk6IE5ldy4KKwkoYWRkX2NsYXNzbmFtZSk6IE5ldy4KKwkoYWRkX2luZm9uYW1lKTogTmV3LgorCSogc3JjL3ZjZy5oOiBBZGQgbmV3IHByb3RvdHlwZXMuCisKKwkyMDAxLTA4LTI3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogTWFrZWZpbGUubWFpbnQ6IFN5bmMuIGFnYWluIHdpdGggQ1ZTIEF1dG9jb25mLgorCisJMjAwMS0wOC0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIE1ha2VmaWxlLm1haW50OiBGb3JtYXR0aW5nIGNoYW5nZXMuCisJKHBvLXVwZGF0ZSwgY3ZzLXVwZGF0ZSwgdXBkYXRlKTogTmV3IHRhcmdldHMuCisJKEFNVEFSKTogUmVtb3ZlLgorCisJMjAwMS0wOC0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIE1ha2VmaWxlLmFtIChBVVRPTUFLRV9PUFRJT05TKTogMS41LgorCSogTWFrZWZpbGUubWFpbnQ6IFN5bmMuIHdpdGggQ1ZTIEF1dG9jb25mLgorCisJMjAwMS0wOC0yNyAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKworCSogc3JjL3ZjZy5oIChzdHJ1Y3QgaW5mb25hbWVfcyk6IE5ldy4KKwkoc3RydWN0IGNvbG9yZW50cnlfcyk6IE5ldy4KKwkoZ3JhcGhfcyk6IE5ldyBmaWVsZHMge3ZlcnRpY2FsLGhvcml6b250YWx9X29yZGVyIGluIHN0cnVjdHVyZS4KKwlBZGQgYGluZm9uYW1lJyBmaWVsZC4KKwlBZGQgYGNvbG9yZW50cnknIGZpZWxkOworCSogc3JjL3ZjZ19kZWZhdWx0cy5oIChHX1ZFUlRJQ0FMX09SREVSKTogTmV3LgorCShHX0hPUklaT05UQUxfT1JERVIpOiBOZXcuCisJKEdfSU5GT05BTUUpOiBOZXcuCisJKEdfQ09MT1JFTlRSWSk6IE5ldy4KKwkqIHNyYy92Y2cuYyAob3V0cHV0X2dyYXBoKTogQWRkIG91dHB1dCBvZiB7dmVydGljYWwsaG9yaXpvbnRhbH1fb3JkZXIuCisJQWRkIG91dHB1dCBvZiBgaW5mb25hbWUnLgorCUFkZCBvdXRwdXQgb2YgYGNvbG9yZW50cnknLgorCisJMjAwMS0wOC0yNyAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKworCSogc3JjL3JlYWRlci5jIChwYXJzZV9kcXVvdGVkX3BhcmFtKTogUmVuYW1lIHZhcmlhYmxlIGBpbmRleCcgdG8gYGknLgorCVRoaXMgb25lIHNoYWRvd2VkIGEgZ2xvYmFsIHBhcmFtZXRlci4KKworCTIwMDEtMDgtMjQgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisKKwkqIHNyYy9wcmludF9ncmFwaC5jIChub2RlX291dHB1dF9zaXplKTogRGVjbGFyZWQgUE9TSVggYHNpemVfdCcgdHlwZSwKKwlpbnN0ZWFkIG9mIGB1bnNpZ25lZCcuCisJKHByaW50X3N0YXRlKTogRG8gbm90IGNhbGwgb2JzdGFja19vYmplY3Rfc2l6ZSAoKSBpbiBvYnN0YWNrX2dyb3cgKCkKKwl0byBhdm9pZCBtYWNybyB2YXJpYWJsZXMgc2hhZG93aW5nLgorCisJMjAwMS0wOC0yMyAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKworCSogc3JjL2xleC5jIChwZXJjZW50X3RhYmxlKTogVHlwbzogcy9uYWVtL25hbWUvLgorCUFkZCBncmFwaCBvcHRpb24uCisJTm9ybWFsaXplIG5ldyBvcHRpb25zIGRlY2xhcmF0aW9ucy4KKworCTIwMDEtMDgtMjAgIFBhc2NhbCBCYXJ0ICA8cGFzY2FsLmJhcnRAZXBpdGEuZnI+CisKKwkqIHRlc3RzL3N1aXRlLmF0OiBFeGVyY2lzZSAlaGVhZGVyX2V4dGVuc2lvbiBhbmQgJXNvdXJjZV9leHRlbnNpb24uCisKKwkyMDAxLTA4LTE2ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKHBhcnNlX2RxdW90ZWRfcGFyYW0pOiBOZXcuCisJKHBhcnNlX2hlYWRlcl9leHRlbnNpb25fZGVjbCk6IFVzZSBpdC4KKwkocGFyc2Vfc291cmNlX2V4dGVuc2lvbl9kZWNsKTogTGlrZXdpc2UuCisKKwkyMDAxLTA4LTE2ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvdmNnLmM6IFJlbW92ZSBpbmNsdWRlcyBvZiBgY29tcGxhaW4uaCcgYW5kIGB4YWxsb2MuaCcuCisJKGdldF94eHh4X3N0cik6IFVzZSBhc3NlcnQgKCkgaW5zdGVhZCBvZiBjb21wbGFpbiAoKS4KKwlSZW1vdmUgcmV0dXJuIGludm9rYXRpb25zIGluIGRlZmF1bHQgY2FzZXMuCisJKGdldF9kZWNpc2lvbl9zdHIpOiBNb2RpZnkgZGVmYXVsdCBiZWhhdmlvdXIuIFJlbW92ZSBzZWNvbmQgYXJndW1lbnQuCisJRWNobyBtb2RpZmljYXRpb25zIG9uIGNhbGxzLgorCShvdXRwdXRfZ3JhcGgpOiBGaXguCisKKwkyMDAxLTA4LTE2ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvZ2V0YXJncy5jICh1c2FnZSk6IFVwZGF0ZSB3aXRoIGBgLWcsIC0tZ3JhcGgnJy4KKworCTIwMDEtMDgtMTYgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvIChCaXNvbiBPcHRpb25zKTogQWRkIGl0ZW1zIGAtZycsIGAtLWdyYXBoJy4KKwkoT3B0aW9uIENyb3NzIEtleSk6IExpa2V3aXNlLgorCSogZG9jL2Jpc29uLjE6IFVwZGF0ZS4KKworMjAwMS0wOS0yNSAgUGFzY2FsIEJhcnQgIDxwYXNjYWwuYmFydEBlcGl0YS5mcj4KKworCSogc3JjL291dHB1dC5jIChvdXRwdXRfbWFzdGVyX3BhcnNlcik6IERvbid0IGZpbmlzaCBhY3Rpb25fb2JzdGFjay4KKwkob3V0cHV0X3BhcnNlcik6IERvbid0IGNhcmUgYWJvdXQgdGhlIG11c2NsZSBhY3Rpb24sIGhlcmUuCisJKHByZXBhcmUpOiBDb3B5IHRoZSBhY3Rpb25fb2JzdGFjayBpbiB0aGUgYWN0aW9uIG11c2NsZS4KKwkob3V0cHV0KTogRnJlZSBhY3Rpb25fb2JzdGFjay4KKworMjAwMS0wOS0yMyAgUGFzY2FsIEJhcnQgIDxwYXNjYWwuYmFydEBlcGl0YS5mcj4KKworCSogc3JjL3JlYWRlci5jIChwYXJzZV91bmlvbl9kZWNsKTogQWRkIG5ldyBvYnN0YWNrIHVuaW9uX29ic3RhY2suICBXaGljaAorCXdpbGwgY29udGFpbiBgJXVuaW9uJyBkZWNsYXJhdGlvbi4KKwkocGFyc2VfdW5pb25fZGVjbCk6IERlbGV0ZSAjbGluZSBkaXJlY3RpdmUgb3V0cHV0LgorCShwYXJzZV91bmlvbl9kZWNsKTogU3Vic3RpdHV0ZSAvYXR0cnNfb2JzdGFjay91bmlvbl9vYnN0YWNrIGZvciBhbGwKKwlpbmZvcm1hdGlvbnMgYWJvdXQgJXVuaW9uLgorCShwYXJzZV91bmlvbl9kZWNsKTogQ29weSB0aGUgdW5pb25fb2JzdGFjayBpbiB0aGUgbXVzY2xlIHN0eXBlLgorCSogc3JjL2Jpc29uLnNpbXBsZTogQWRkIG5ldyAjbGluZSBkaXJlY3RpdmUuCisJQWRkIHR5cGRlZiAlJXN0eXBlIFlZU1RZUEUuCisKKzIwMDEtMDktMjMgIFBhc2NhbCBCYXJ0ICA8cGFzY2FsLmJhcnRAZXBpdGEuZnI+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGU6IEFkZCBuZXcgYCNsaW5lJyBkaXJlY3RpdmUuCisKKzIwMDEtMDktMjIgIFBhc2NhbCBCYXJ0ICA8cGFzY2FsLmJhcnRAZXBpdGEuZnI+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGU6IE5ldyBgI2xpbmUnIGRpcmVjdGl2ZS4KKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3BhcnNlcik6IFN1cHBvcnQgbmV3IGR5bmFtaWMgbXVzY2xlIGlucHV0X2xpbmUuCisKKzIwMDEtMDktMjIgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X21hc3Rlcl9wYXJzZXIpOiBOZXcuCisJKG91dHB1dF9wYXJzZXIpOiBCZSBtb3JlIHJlLWVudHJhbnQuCisKKzIwMDEtMDktMjEgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisKKwkqIHNyYy9yZWFkZXIuYyAoY29weV9kZWZpbml0aW9uLCBwYXJzZV91bmlvbl9kZWNsKTogVXBkYXRlIGFuZCB1c2UKKwlgbGluZWYnIG11c2NsZS4KKwkoY29weV9hY3Rpb24pOiBMaWtld2lzZS4KKwlVc2Ugb2JzdGFja18xZ3JvdyAoKS4KKwkqIHNyYy9tdXNjbGVfdGFiLmMgKG11c2NsZV9pbml0KTogQWRkIG11c2NsZSBgbGluZWYnLgorCisyMDAxLTA5LTIxICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvb3B0aW9ucy5jIChvcHRpb25fdGFibGUpOiBBZGp1c3QuCisJKiBzcmMvbGV4LmMgKHBhcnNlX3BlcmNlbnRfdG9rZW4pOiBGaXguCisKKzIwMDEtMDktMjAgIFBhc2NhbCBCYXJ0ICA8cGFzY2FsLmJhcnRAZXBpdGEuZnI+CisKKwkqIHNyYy9vcHRpb25zLmMgKHN5bXRhYi5oKTogSW5jbHVkZSBpdCwgbmVlZCBieSBsZXguaC4KKworMjAwMS0wOS0yMCAgUGFzY2FsIEJhcnQgIDxwYXNjYWwuYmFydEBlcGl0YS5mcj4KKworCSogc3JjL2xleC5jIChwYXJzZV9wZXJjZW50X3Rva2VuKTogQ2hhbmdlIHR5cGUgb2YgdmFyaWFibGUgYHR4Jywgd2hpY2gKKwlpcyBub3cgYW4gb3B0aW9uX3RhYmxlX3N0cnVjdCouCisJKG9wdGlvbl9zdHJjbXApOiBOZXcgZnVuY3Rpb24gb3B0aW9uX3N0cmNtcC4KKwkocGFyc2VfcGVyY2VudF90b2tlbik6IENhbGwgb3B0aW9uX3N0cmNtcC4KKwkqIHNyYy9nZXRhcmdzLmMgKHhhbGxvYy5oLCBvcHRpb25zLmgpOiBJbmNsdWRlIGl0LgorCShnZXRhcmdzKTogQ2FsbCBjcmVhdGVfbG9uZ19vcHRpb25fdGFibGUuCisJKGdldGFyZ3MpOiBGcmVlIGxvbmdvcHRzIGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLgorCShzaG9ydG9wdHMpOiBNb3ZlIGluIG9wdGlvbnMuYy4KKwkqIHNyYy9vcHRpb25zLmMgKGNyZWF0ZV9sb25nX29wdGlvbl90YWJsZSk6IE5ldyBmdW5jdGlvbi4gIENvbnZlcnQKKwlpbmZvcm1hdGlvbiBmcm9tIG9wdGlvbl90YWJsZSB0byBvcHRpb24gc3RydWN0dXJlLgorCSogc3JjL3JlYWRlci5jIChvcHRpb25zLmgpOiBJbmNsdWRlIGl0LgorCisJKiBzcmMvTWFrZWZpbGUuYW06IEFkanVzdC4KKwkqIHNyYy9vcHRpb25zLmMgKG9wdGlvbl90YWJsZSk6IENyZWF0ZSBmcm9tIGxvbmdvcHRzIGFuZCBwZXJjZW50X3RhYmxlLgorCSogc3JjL2dldGFyZ3MuYyAobG9uZ29wdHMpOiBEZWxldGUuCisJKiBzcmMvbGV4LmMgKHN0cnVjdCBwZXJjZW50X3RhYmxlX3N0cnVjdCk6IERlbGV0ZS4KKwkocGVyY2VudF90YWJsZSk6IERlbGV0ZS4KKwkob3B0aW9ucy5oKTogSW5jbHVkZSBpdC4KKwkqIHNyYy9vcHRpb25zLmM6IENyZWF0ZS4KKwkqIHNyYy9vcHRpb25zLmg6IENyZWF0ZS4KKwlEZWNsYXJlIGVudW0gb3B0X2FjY2Vzc19lLgorCURlZmluZSBzdHJ1Y3Qgb3B0aW9uX3RhYmxlX3N0cnVjdC4KKworMjAwMS0wOS0yMCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKworCSogZG9jL2Jpc29uLnRleGluZm86IEFkanVzdCB0ZXJtaW5vbG9naWVzIGFib3V0IHByb2xvZ3VlIGFuZCBlcGlsb2d1ZQorCXNlY3Rpb25zIG9mIEJpc29uLgorCisyMDAxLTA5LTE5ICBQYXNjYWwgQmFydCAgPHBhc2NhbC5iYXJ0QGVwaXRhLmZyPgorCisJKiBzcmMvYmlzb24uc2ltcGxlOiBzLyUlZmlsZW5hbWUvJSVza2VsZXRvbi4KKwkqIHNyYy9tdXNjbGVfdGFiLmMgKGdldGFyZ3MuaCk6IEluY2x1ZGUgaXQuCisJKG11c2NsZV9pbml0KTogSW5zZXJ0IG5ldyBtdXNjbGUgc2tlbGV0b24uCisKKzIwMDEtMDktMTggIFBhc2NhbCBCYXJ0ICA8cGFzY2FsLmJhcnRAZXBpdGEuZnI+CisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3BhcnNlcik6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGUgYWN0aW9uc19kdW1wZWQuCisKKzIwMDEtMDktMDcgIFBhc2NhbCBCYXJ0ICA8cGFzY2FsLmJhcnRAZXBpdGEuZnI+CisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0KTogRGVsZXRlIGNhbGwgdG8gcmVhZGVyX291dHB1dF95eWxzcC4KKwkqIHNyYy9yZWFkZXIuYyAocmVhZGVyKTogTGlrZXdpc2UuCisJKiBzcmMvcmVhZGVyLmg6IERlbGV0ZSBkZWNsYXJhdGlvbiBvZiByZWFkZXJfb3V0cHV0X3l5bHNwLgorCisyMDAxLTA5LTAyICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmM6IEluY2x1ZGUgbXVzY2xlX3RhYi5oLgorCShwYXJzZV91bmlvbl9kZWNsKTogVXBkYXRlLgorCShwYXJzZV9tYWNyb19kZWNsKTogUmVuYW1lIHBhcnNlX211c2NsZV9kZWNsLgorCVVwZGF0ZSB0byB1c2UgcmVuYW1lZCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlLgorCShyZWFkX2RlY2xhcmF0aW9ucywgY29weV9hY3Rpb24sIHJlYWRfYWRkaXRpb25uYWxfY29kZSwgOiBVcGRhdGVkCisJd2l0aCBjb3JyZWN0IHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zIG5hbWVzLgorCShwYWNrc3ltYm9scywgcmVhZGVyKTogTGlrZXdpc2UuCisKKwkqIHNyYy9yZWFkZXIuaCAobXVzY2xlX29ic3RhY2spOiBFeHRlcm4gZGVjbGFyYXRpb24gdXBkYXRlLgorCisJKiBzcmMvb3V0cHV0LmM6IEluY2x1ZGUgbXVzY2xlX3RhYi5oCisJSW4gYWxsIGZ1bmN0aW9ucyB1c2luZyBtYWNyb19pbnNlcnQsIGNoYW5nZSBieSB1c2luZyBtdXNjbGVfaW5zZXJ0ICgpLgorCShtYWNyb19vYnN0YWNrKTogUmVuYW1lIG11c2NsZV9vYnN0YWNrLgorCUVjaG8gbW9kaWZpY2F0aW9ucyBpbiB0aGUgd2hvbGUgZmlsZS4KKwkoTUFDUk9fSU5TRVJUX0lOVCk6IFJlbmFtZSBNVVNDTEVfSU5TRVJUX0lOVC4KKwkoTUFDUk9fSU5TRVJUX1NUUklORyk6IFJlbmFtZSBNVVNDTEVfSU5TRVJUX1NUUklORy4KKwkoTUFDUk9fSU5TRVJUX1BSRUZJWCk6IFJlbmFtZSBNVVNDTEVfSU5TRVJUX1BSRUZJWC4KKworCSogc3JjL211c2NsZV90YWIuaDogVXBkYXRlIGRvdWJsZSBpbmNsdXNpb24gbWFjcm9zLgorCShtYWNyb19lbnRyeV9zKTogUmVuYW1lIG11c2NsZV9lbnRyeV9zLgorCVVwZGF0ZSBwcm90b3R5cGVzLgorCisJKiBzcmMvbXVzY2xlX3RhYi5jOiBJbmNsdWRlIG11c2NsZV90YWIuaC4KKwlSZW5hbWUgbWFjcm9fdGFiYmxlIHRvIG11c2NsZV90YWJsZS4KKwkobWhhc2gxLCBtaGFzaDIsIG1jbXApOiBVc2UgbXVzY2xlX2VudHJ5LgorCShtYWNyb19pbml0KTogUmVuYW1lIG11c2NsZV9pbml0LiBVcGRhdGUuCisJKG1hY3JvX2luc2VydCk6IFJlbmFtZSBtdXNjbGVfaW5zZXJ0LiBVcGRhdGUuCisJKG1hY3JvX2ZpbmQpOiBSZW5hbWUgbXVzY2xlX2ZpbmQuIFVwZGF0ZS4KKworCSogc3JjL21haW4uYzogSW5jbHVkZSBtdXNjbGVfdGFiLmguCisJKG1haW4pOiBDYWxsIG11c2NsZV9pbml0ICgpLgorCSogc3JjL01ha2VmaWxlLmFtIChiaXNvbl9TT1VSQ0VTKTogRWNobyBtb2RpZmljYXRpb25zLgorCisyMDAxLTA5LTAyICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJTm93IHRoZSBmaWxlcyBtYWNyb190YWIuW2NoXSBhcmUgbmFtZWQgbXVzY2xlX3RhYi5bY2hdLgorCisJKiBzcmMvbXVzY2xlX3RhYi5jLCBzcmMvbXVzY2xlX3RhYi5oOiBBZGQgZmlsZXMuCisKKzIwMDEtMDktMDIgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisKKwkqIHNyYy9tYWNyb3RhYi5jLCBzcmMvbWFjcm90YWIuaDogUmVtb3ZlLgorCisyMDAxLTA5LTAxICBQYXNjYWwgQmFydCAgPHBhc2NhbC5iYXJ0QGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKGNvcHlfZ3VhcmQpOiBVc2UgbXVzY2xlIHRvIHNwZWNpZnkgdGhlIGAjbGluZScKKwlmaWxlbmFtZS4KKworMjAwMS0wOS0wMSAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKworCSogdGVzdHMvY2FsYy5hdCAoZXhwKTogTm93LCBZWUVSUk9SX1ZFUkJPU0UgbmVlZCB0byBiZSBzZXQKKwl0byBhbiBleHBsaWNpdCB2YWx1ZSB0byBhY3RpdmF0ZSB0aGUgZmVhdHVyZS4gV2UgZG8gaXQgaGVyZS4KKworMjAwMS0wOC0zMSAgUGFzY2FsIEJhcnQgIDxwYXNjYWwuYmFydEBlcGl0YS5mcj4KKworCSogc3JjL291dHB1dC5jIChwcmVwYXJlKTogRGVsZXRlIHRoZSBgZmlsZW5hbWUnIG11c2N1bGUgaW5zZXJ0aW9uLgorCSogc3JjL3JlYWRlci5jIChjb3B5X2FjdGlvbik6IFVzZSBgZmlsZW5hbWUnIG11c2N1bGUgd2l0aCBgI2xpbmUnLgorCShwYXJzZV91bmlvbl9kZWNsKTogTGlrZXdpc2UuCisJKiBzcmMvbWFjcm90YWIuYyAobWFjcm9faW5pdCk6IEluaXRpYWxpemUgZmlsZW5hbWUgYnkgaW5maWxlLgorCisyMDAxLTA4LTMxICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvYmlzb24uc2ltcGxlIChZWUxTUF9ORUVERUQpOiBOZXcgZGVmaW5pdGlvbi4KKwkqIHNyYy9vdXRwdXQuYyAocHJlcGFyZSk6IEFkZCBtYWNybyBpbnNlcnRpb24gb2YgYGxvY2F0aW9uc19mbGFnJworCisyMDAxLTA4LTMxICBQYXNjYWwgQmFydCAgPHBhc2NhbC5iYXJ0QGVwaXRhLmZyPgorCisJKiBzcmMvb3V0cHV0LmMgKHByZXBhcmUpOiBEZWxldGUgaW5zZXJ0aW9uIG9mIHByZXZpb3VzIG11c2NsZXMsCisJYW5kIGluc2VydCB0aGUgYHByZWZpeCcgbXVzY2xlcy4KKwkqIHNyYy9tYWNyb3RhYi5jIChtYWNyb19pbml0KTogTGlrZXdpc2UuCisJKG1hY3JvX2luaXQpOiBJbml0aWFsaXphdGlvbiBwcmVmaXggZGlyZWN0aXZlIGJ5IGB5eScuCisJKiBzcmMvYmlzb24uc2ltcGxlOiBTdWJzdGl0dXRlIGFsbCAlJXl5bGV4LCAlJXl5Y2hhciwgJSV5eWx2YWwsCisJJSV5eWRlYnVnLCAlJXl5ZXJyb3IsICUleXluZXJycyBhbmQgJSV5eXBhcnNlIGJ5IHl5bGV4LCB5eWNoYXIsCisJeXlsdmFsLCB5eWRlYnVnLCB5eWVycm9yLCB5eW5lcnJzIGFuZCB5eXBhcnNlLgorCU5ldyBkaXJlY3RpdmUgYCNkZWZpbmUnIHRvIHN1YnN0aXR1dGUgeXlkZWJ1ZywgLi4uIHdpdGggb3B0aW9uCisJbmFtZV9wcmVmaXguCisKKzIwMDEtMDgtMzEgIFBhc2NhbCBCYXJ0ICA8cGFzY2FsLmJhcnRAZXBpdGEuZnI+CisKKwkqIHNyYy9tYWluLmMgKG1haW4pOiBTdGFuZGFyZGl6ZS4KKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3RhYmxlX2RhdGEsIG91dHB1dF9wYXJzZXIpOiBMaWtld2lzZS4KKwkqIHNyYy9tYWNyb3RhYi5oLCBzcmMvbWFjcm90YWIuYywgc3JjL2Jpc29uLnNpbXBsZTogTGlrZXdpc2UuCisKKzIwMDEtMDgtMzEgIFBhc2NhbCBCYXJ0ICA8cGFzY2FsLmJhcnRAZXBpdGEuZnI+LCBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRfYWRkaXRpb25uYWxfY29kZSk6IFJlbmFtZSAlJXVzZXJfY29kZSB0bworCSUlZXBpbG9ndWUuCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dCk6IFJlbmFtZSAlJWRlY2xhcmF0aW9ucyB0byAlJXByb2xvZ3VlLgorCSogc3JjL2Jpc29uLnNpbXBsZTogRWNobyBtb2RpZmljYXRpb25zLgorCisyMDAxLTA4LTMxICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRncmFtKTogQ2xlYW5VcC4KKwkob3V0cHV0X3Rva2VuX2RlZmluZXMpOiBMaWtld2lzZS4KKwkocGFja3N5bWJvbHMpOiBMaWtld2lzZS4KKwkocmVhZGVyKTogTGlrZXdpc2UuCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dCk6IENQUC1vdXQgdXNlbGVzcyBjb2RlLgorCisyMDAxLTA4LTMxICBQYXNjYWwgQmFydCAgPHBhc2NhbC5iYXJ0QGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRlcik6IERlbGV0ZSBvYnNvbGV0ZSBjYWxsIHRvIGZ1bmN0aW9uCisJb3V0cHV0X3RyYWlsZXJzIGFuZCBvdXRwdXRfaGVhZGVycy4KKwkqIHNyYy9vdXRwdXQuaDogUmVtb3ZlIG9ic29sZXRlIGZ1bmN0aW9ucyBwcm90b3R5cGVzIG9mIG91dHB1dF9oZWFkZXJzCisJYW5kIG91dHB1dF90cmFpbGVycy4KKworMjAwMS0wOC0zMCAgUGFzY2FsIEJhcnQgIDxwYXNjYWwuYmFydEBlcGl0YS5mcj4KKworCSogc3JjL21haW4uYzogSW5jbHVkZSBtYWNyb3RhYi5oLgorCSogc3JjL21hY3JvdGFiLmggKG1hY3JvX2VudHJ5X3MpOiBDb25zdGlmeSBmaWVsZHMuCisJQWRqdXN0IGZ1bmN0aW9ucyBwcm90b3R5cGVzLgorCSogc3JjL21hY3JvdGFiLmMgKG1hY3JvX2luc2VydCk6IENvbnN0aWZ5IGtleSBhbmQgdmFsdWUuCisJKG1hY3JvX2ZpbmQpOiBDb25zdGlmeSBrZXkuCisJKG1hY3JvX2luc2VydCk6IEluY2x1ZGUgJ3hhbGxvYy5oJworCShtYWNyb19pbnNlcnQpOiBVc2UgWE1BTExPQy4KKwkobWFjcm9fZmluZCk6IENvbnN0aWZ5IHJldHVybiB2YWx1ZS4KKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3RhYmxlX2RhdGEpOiBSZW5hbWUgdGFibGUgdG8gdGFibGVfZGF0YS4KKwkob3V0cHV0X3BhcnNlcik6IENvbnN0aWZ5IG1hY3JvX2tleSwgbWFjcm9fdmFsdWUuCisKKzIwMDEtMDgtMzAgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisKKwkqIHNyYy9yZWFkZXIuYyAocGFyc2Vfc2tlbF9kZWNsKTogTmV3LgorCShyZWFkX2RlY2xhcmF0aW9ucyk6IEFkZCBjYXNlIGB0b2tfc2tlbCcsIGNhbGwgcGFyc2Vfc2tlbF9kZWNsICgpLgorCSogc3JjL2xleC5oICh0b2tlbl90KTogTmV3IHRva2VuIGB0b2tfc2tlbCcuCisJKiBzcmMvbGV4LmMgKHBlcmNlbnRfdGFibGUpOiBBZGQgc2tlbGV0b24gb3B0aW9uIGVudHJ5LgorCVN0YW5kYXJkaXplLgorCisyMDAxLTA4LTI5ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvYmlzb24uc2ltcGxlOiBBZGQgJSV1c2VyX2NvZGUgZGlyZWN0aXZlIGF0IHRoZSBlbmQuCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRfYWRkaXRpb25uYWxfY29kZSk6IE5ldy4KKwkocmVhZGVyKTogVXNlIGl0LgorCSogc3JjL291dHB1dC5jIChvdXRwdXRfcHJvZ3JhbSk6IFJlbW92ZS4KKwkob3V0cHV0KTogVXBkYXRlLgorCisyMDAxLTA4LTI4ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9hY3Rpb25zKTogQ2xlYW4gdXAuCisJKG91dHB1dF9ncmFtKTogQ1BQLW91dCB1c2VsZXNzIGNvZGUuCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRlcik6IENsZWFuIHVwLCBDUFAtb3V0IHVzZWxlc3MgY29kZS4KKworMjAwMS0wOC0yOCAgUGFzY2FsIEJhcnQgIDxwYXNjYWwuYmFydEBlcGl0YS5mcj4KKworCSogc3JjL291dHB1dC5jIChvdXRwdXQpOiBDb3B5IGF0dHJzX29ic3RhY2sgaW4gdGhlICclJWRlZmluaXRpb25zJworCWRpcmVjdGl2ZS4KKwkqIHNyYy9iaXNvbi5zaW1wbGU6IEFkZCBgJSVkZWZpbml0aW9ucycuCisKKzIwMDEtMDgtMjggIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisKKwkqIGNvbmZpZy9kZXBjb21wOiBOZXcgZmlsZS4KKworMjAwMS0wOC0yNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGUgKHl5cGFyc2UpOiBEb24ndCB0YWtlIHRoZSBhZGRyZXNzIG9mIGFuCisJaXRlbSBiZWZvcmUgdGhlIHN0YXJ0IG9mIGFuIGFycmF5LCBhcyB0aGF0IGRvZXNuJ3QgY29uZm9ybSB0bworCXRoZSBDIFN0YW5kYXJkLgorCisyMDAxLTA4LTI3ICBSb2JlcnQgQW5pc2tvICA8cm9iZXJ0LmFuaXNrb0BlcGl0YS5mcj4KKworCSogc3JjL291dHB1dC5jIChvdXRwdXQpOiBSZW1vdmUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBtYWNybworCW9ic3RhY2suICBJdCB3YXMgZG9uZSB0b28gbGF0ZSBoZXJlLgorCisJKiBzcmMvcmVhZGVyLmMgKHBhcnNlX21hY3JvX2RlY2wpOiBGaXguICBVc2Ugb2YgdGhlIG1hY3JvIG9ic3RhY2sgd2FzCisJY29tcGxldGVseSB3cm9uZy4KKwkocmVhZGVyKTogSW5pdGlhbGl6ZSB0aGUgbWFjcm8gb2JzdGFjayBoZXJlLCBzaW5jZSB3ZSBuZWVkIGl0IHRvIGdyb3cKKwknJWRlZmluZScgZGlyZWN0aXZlcy4KKworCSogc3JjL3JlYWRlci5oOiBEZWNsYXJlIHRoZSBtYWNybyBvYnN0YWNrIGFzIGV4dGVybi4KKworMjAwMS0wOC0yNyAgUm9iZXJ0IEFuaXNrbyAgPHJvYmVydC5hbmlza29AZXBpdGEuZnI+CisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3BhcnNlcik6IEZpeC4gIFN0b3JlIHNpbmdsZSAnJScgY2hhcmFjdGVycyBpbgorCXRoZSBvdXRwdXQgb2JzdGFjayBpbnN0ZWFkIG9mIHRocm93aW5nIHRoZW0gYXdheS4KKworMjAwMS0wOC0yNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIE1ha2VmaWxlLmFtIChBVVRPTUFLRV9PUFRJT05TKTogMS41LgorCisyMDAxLTA4LTI1ICBSb2JlcnQgQW5pc2tvICA8cm9iZXJ0LmFuaXNrb0BlcGl0YS5mcj4KKworCSogbGliL01ha2VmaWxlLmFtOiBBZGp1c3QuCisKKzIwMDEtMDgtMjUgIFJvYmVydCBBbmlza28gIDxyb2JlcnQuYW5pc2tvQGVwaXRhLmZyPgorCisJKiBzcmMvYmlzb24uc2ltcGxlOiBVcGRhdGUgYW5kIGFkZCAnJSUnIGRpcmVjdGl2ZXMuCisKKzIwMDEtMDgtMjUgIFJvYmVydCBBbmlza28gIDxyb2JlcnQuYW5pc2tvQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRlcik6IFJlbW92ZSBjYWxscyB0byAnb3V0cHV0X2hlYWRlcnMnIGFuZAorCSdvdXRwdXRfdHJhaWxlcnMnLiBSZW1vdmUgc29tZSBDIG91dHB1dC4KKwkocmVhZGdyYW0pOiBEaXNhYmxlIGEgcGllY2Ugb2YgY29kZSB0aGF0IHdhcyB3cml0aW5nIGEgZGVmYXVsdAorCWRlZmluaXRpb24gZm9yICdZWVNUWVBFJy4KKwkocmVhZGVyX291dHB1dF95eWxzcCk6IFJlbW92ZS4KKwkocGFja3N5bWJvbHMpOiBPdXRwdXQgdG9rZW4gZGVmaW50aW9ucyB0byBhIG1hY3JvLgorCShjb3B5X2RlZmluaXRpb24pOiBEaXNhYmxlIEMgb3V0cHV0LgorCisJKiBzcmMvcmVhZGVyLmMgKHBhcnNlX21hY3JvX2RlY2wpOiBOZXcgZnVuY3Rpb24gdXNlZCB0byBwYXJzZSBtYWNybworCWRlY2xhcmF0aW9ucy4KKwkoY29weV9zdHJpbmcyKTogUHV0IHRoZSBib2R5IG9mIGNvcHlfc3RyaW5nIGludG8gdGhpcyBuZXcgZnVuY3Rpb24uCisJQWRkIGEgcGFyYW1ldGVyIHRvIGxldCB0aGUgY2FsbGVyIGNob29zZSB3aGV0aGVyIGhlIHdhbnRzIHRvIGNvcHkgdGhlCisJc3RyaW5nIGRlbGltaXRlcnMgb3Igbm90LgorCShjb3B5X3N0cmluZyk6IEJlIGEgc2ltcGxlIGNhbGwgdG8gY29weV9zdHJpbmcyIHdpdGggdGhlIGxhc3QgYXJndW1lbnQKKwlib3VuZCB0byB0cnVlLgorCShyZWFkX2RlY2xhcmF0aW9ucyk6IEFkZCBjYXNlIGZvciBtYWNybyBkZWZpbml0aW9uLgorCShjb3B5X2lkZW50aWZpZXIpOiBOZXcuCisJKHBhcnNlX21hY3JvX2RlY2wpOiBSZWFkIG1hY3JvIGlkZW50aWZpZXJzIHVzaW5nIGNvcHlfaWRlbnRpZmllcgorCXJhdGhlciB0aGFuIGxleC4KKworMjAwMS0wOC0yNSAgUm9iZXJ0IEFuaXNrbyAgPHJvYmVydC5hbmlza29AZXBpdGEuZnI+CisKKwkqIHNyYy9vdXRwdXQuYyAocHJlcGFyZSk6IEFkZCBwcmVmaXhlZCBuYW1lcy4KKwkob3V0cHV0X3BhcnNlcik6IE91dHB1dCBzZW1hbnRpYyBhY3Rpb25zLgorCShvdXRwdXRfcGFyc2VyKTogRml4IGJ1ZyBvbiAnJSVsaW5lJyBkaXJlY3RpdmVzLgorCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9oZWFkZXJzKTogUmVtb3ZlLiBUaGUgQyBjb2RlIHByaW50ZWQgYnkgdGhpcworCWZ1bmN0aW9uIHNob3VsZCBub3cgYmUgaW4gdGhlIHNrZWxldG9ucy4KKwkob3V0cHV0X3RyYWlsZXJzKTogUmVtb3ZlLgorCShvdXRwdXQpOiBEaXNhYmxlIGNhbGwgdG8gJ3JlYWRlcl9vdXRwdXRfeXlsc3AnLgorCShvdXRwdXRfcnVsZV9kYXRhKTogRG8gbm90IG91dHB1dCB0YWJsZXMgdG8gdGhlIHRhYmxlIG9ic3RhY2suCisKKwkqIHNyYy9vdXRwdXQuYzogUmVtb3ZlIHNvbWUgQyBkZWRpY2F0ZWQgb3V0cHV0LgorCUltcHJvdmUgdGhlIHVzZSBvZiBtYWNybyBhbmQgb3V0cHV0IG9ic3RhY2tzLgorCShvdXRwdXRfZGVmaW5lcyk6IFJlbW92ZS4KKworCSogc3JjL291dHB1dC5jIChvdXRwdXRfdG9rZW5fdHJhbnNsYXRpb25zKTogQXNzb2NpYXRlICd0cmFuc2xhdGUnCisJdGFibGUgd2l0aCBhIG1hY3JvLiBObyBvdXRwdXQgdG8gdGhlIHRhYmxlIG9ic3RhY2suCisJKG91dHB1dF9ncmFtKTogU2FtZSBmb3IgJ3JocycgYW5kICdwcmhzJy4KKwkob3V0cHV0X3N0b3MpOiBTYW1lIGZvciAnc3RvcycuCisJKG91dHB1dF9ydWxlX2RhdGEpOiBTYW1lIGZvciAncjEnIGFuZCAncjInLgorCSh0b2tlbl9hY3Rpb25zKTogU2FtZSBmb3IgJ2RlZmFjdCcuCisJKGdvdG9fYWN0aW9ucyk6IFNhbWUgZm9yICdkZWZnb3RvJy4KKwkob3V0cHV0X2Jhc2UpOiBTYW1lIGZvciAncGFjdCcgYW5kICdwZ290bycuCisJKG91dHB1dF90YWJsZSk6IFNhbWUgZm9yICd0YWJsZScuCisJKG91dHB1dF9jaGVjayk6IFNhbWUgZm9yICdjaGVjaycuCisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3RhYmxlX2RhdGEpOiBOZXcgZnVuY3Rpb24uCisJKG91dHB1dF9zaG9ydF90YWJsZSk6IFJlbW92ZS4KKwkob3V0cHV0X3Nob3J0X29yX2NoYXJfdGFibGUpOiBSZW1vdmUuCisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3BhcnNlcik6IFJlcGxhY2UgbW9zdCBvZiB0aGUgc2tlbGV0b24gY29weSBjb2RlCisJd2l0aCBzb21ldGhpbmcgbmV3LiBTa2VsZXRvbnMgYXJlIG5vdyBwcm9jZXNzZWQgY2hhcmFjdGVyIGJ5IGNoYXJhY3RlcgorCXJhdGhlciB0aGFuIGxpbmUgYnkgbGluZSwgYW5kIEJpc29uIGxvb2tzIGZvciAnJSUnIG1hY3Jvcy4gVGhpcyBpcyB0aGUKKwlmaXJzdCBzdGVwIGluIG1ha2luZyBCaXNvbidzIG91dHB1dCBwcm9jZXNzIChhIGxvdCkgbW9yZSBmbGV4aWJsZS4KKwkob3V0cHV0X3BhcnNlcik6IFVzZSB0aGUgbWFjcm8gdGFibGUuCisKKzIwMDEtMDgtMjUgIFJvYmVydCBBbmlza28gIDxyb2JlcnQuYW5pc2tvQGVwaXRhLmZyPgorCisJKiBzcmMvbWFpbi5jIChtYWluKTogSW5pdGlhbGl6ZSB0aGUgbWFjcm8gdGFibGUuCisKKzIwMDEtMDgtMjUgIFJvYmVydCBBbmlza28gIDxyb2JlcnQuYW5pc2tvQGVwaXRhLmZyPgorCisJKiBzcmMvbGV4LmMgKHBlcmNlbnRfdGFibGUpOiBBZGQgdG9rX2RlZmluZS4KKwkqIHNyYy9sZXguaDogQWRkIHRva19kZWZpbmUuCisKKzIwMDEtMDgtMjUgIFJvYmVydCBBbmlza28gIDxyb2JlcnQuYW5pc2tvQGVwaXRhLmZyPgorCisJKiBzcmMvbWFjcm90YWIuYzogTmV3IGZpbGUuCisJKiBzcmMvbWFjcm90YWIuaDogTmV3IGZpbGUuCisJKiBzcmMvTWFrZWZpbGUuYW06IFVwZGF0ZS4KKworMjAwMS0wOC0yNSAgUm9iZXJ0IEFuaXNrbyAgPHJvYmVydC5hbmlza29AZXBpdGEuZnI+CisKKwkqIGxpYi9oYXNoLmM6IE5ldyBmaWxlLgorCSogbGliL2hhc2guaDogTmV3IGZpbGUuCisJKiBsaWIvTWFrZWZpbGUuYW06IFVwZGF0ZS4KKworMjAwMS0wOC0xNSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlWZXJzaW9uIDEuMjhjLgorCisyMDAxLTA4LTE1ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRncmFtKTogSW5kZW50IG91dHB1dCBtYWNybyBZWVNUWVBFLgorCShwYWNrc3ltYm9scyk6IExpa2V3aXNlLgorCShvdXRwdXRfdG9rZW5fZGVmaW5lcyk6IExpa2V3aXNlLgorCSogc3JjL2ZpbGVzLmM6IFN0YW5kYXJkaXplLgorCShjb21wdXRlX2hlYWRlcl9tYWNybyk6IE5ldy4KKwkoZGVmaW5lc19vYnN0YWNrX3NhdmUpOiBOZXcuIFVzZSBjb21wdXRlX2hlYWRlcl9tYWNyby4KKwkob3V0cHV0X2ZpbGVzKTogVXBkYXRlLiBVc2UgZGVmaW5lc19vYnN0YWNrX3NhdmUuCisKKzIwMDEtMDgtMTUgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkb2MvYmlzb24udGV4aW5mbyAoVGFibGUgb2YgU3ltYm9scyk6IERvY3VtZW50CisJWVlTVEFDS19VU0VfQUxMT0NBLgorCisyMDAxLTA4LTE1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogbWlzc2luZzogVXBkYXRlIGZyb20gQ1ZTIEF1dG9tYWtlLgorCSogY29uZmlnL2NvbmZpZy5ndWVzcywgY29uZmlnL2NvbmZpZy5zdWIsIGNvbmZpZy90ZXhpbmZvLnRleDoKKwlVcGRhdGUgZnJvbSBnbnUub3JnLgorCisyMDAxLTA4LTE1ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogTWFrZWZpbGUubWFpbnQ6IFN5bmMgd2l0aCBDVlMgQXV0b2NvbmYuCisKKzIwMDEtMDgtMTQgIFBhc2NhbCBCYXJ0ICA8cGFzY2FsLmJhcnRAZXBpdGEuZnI+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvOiBJbmNsdWRlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSBmcm9tCisJYGZkbC50ZXhpJy4KKwkqIGRvYy9mZGwudGV4aTogQWRkIHRvIHBhY2thZ2UuCisKKzIwMDEtMDgtMTQgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisKKwlUdXJuIG9uICV7c291cmNlLGhlYWRlcn1fZXh0ZW5zaW9uIGZlYXR1cmVzLgorCisJKiBzcmMvbGV4LmMgKHBlcmNlbnRfdGFibGUpOiBVbi1DUFAgb3V0IGhlYWRlcl9leHRlbnNpb24gYW5kCisJc291cmNlX2V4dGVuc2lvbi4KKwkqIHNyYy9maWxlcy5jIChjb21wdXRlX2V4dHNfZnJvbV9nZik6IENvbXBhcmUgcG9pbnRlcnMgd2l0aCBOVUxMLgorCShjb21wdXRlX2V4dHNfZnJvbV9zcmMpOiBSZW1vdmUgY29uZGl0aW9ucy4gSXQgcmVzdG9yZXMgcHJpb3JpdGllcworCWJldHdlZW4gb3B0aW9ucy4KKworMjAwMS0wOC0xNCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKworCSogc3JjL2ZpbGVzLmMgKGNvbXB1dGVfYmFzZV9uYW1lcyk6IEFkZCBleHRlbnNpb25zIGNvbXB1dGluZyB3aGVuCisJYC0tZmlsZS1wcmVmaXgnIHVzZWQuCisJU3RhbmRhcmRpemUgZnVuY3Rpb24gY2FsbHMuCisKKzIwMDEtMDgtMTMgIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGUgKFlZU1RBQ0tfVVNFX0FMTE9DQSk6IENoYW5nZWQgdG8gYWxsb3cgdXNlcnMKKwlkZWZpbmluZyBpdCAoZGVmaW5lZCBidXQgbnVsbCBkaXNhYmxlcyBhbGxvY2EpLgorCisyMDAxLTA4LTEzICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvYmlzb24uc2ltcGxlIChfeXlfbWVtY3B5KTogQ1BQIHJlZm9ybWF0LgorCisyMDAxLTA4LTEzICBQYXNjYWwgQmFydCAgPHBhc2NhbC5iYXJ0QGVwaXRhLmZyPgorCisJKiB0ZXN0cy9hdGNvbmZpZy5pbiAoQ1BQRkxBR1MpOiBGaXguCisKKzIwMDEtMDgtMTAgIFBhc2NhbCBCYXJ0ICA8cGFzY2FsLmJhcnRAZXBpdGEuZnI+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvOiBJbmNsdWRlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20KKwlgZ3BsLnRleGknLgorCSogZG9jL2dwbC50ZXhpOiBBZGQgdG8gcGFja2FnZS4KKworMjAwMS0wOC0xMCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKworCSogc3JjL3ByaW50X2dyYXBoLmg6IEZpeC4KKwkqIHNyYy9yZWFkZXIuYyAocmVhZF9kZWNsYXJhdGlvbnMpOiBVc2UgcGFyc2VfaGVhZGVyX2V4dGVuc2lvbl9kZWNsICgpLgorCisyMDAxLTA4LTEwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3N5c3RlbS5oOiBQcm92aWRlIGRlZmF1bHQgZGVjbGFyYXRpb25zIGZvciBzdHBjcHksIHN0cm5kdXAsCisJYW5kIHN0cm5sZW4uCisKKzIwMDEtMDgtMTAgIFJvYmVydCBBbmlza28gIDxhbmlza29fckBlcGl0YS5mcj4KKworCSogZG9jL2Jpc29uLnRleGluZm8gKExvY2F0aW9ucyk6IFVwZGF0ZSBAJCBzdHVmZi4KKworMjAwMS0wOC0wOSAgUm9iZXJ0IEFuaXNrbyAgPGFuaXNrb19yQGVwaXRhLmZyPgorCisJKiBzcmMvYmlzb24uc2ltcGxlIChZWUxMT0NfREVGQVVMVCk6IFVwZGF0ZS4KKwkoeXlwYXJzZSk6IEFkanVzdC4KKworMjAwMS0wOC0wOCAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKworCSogZG9jL2Jpc29uLnRleGluZm86IENoYW5nZSBAc2FtcHskPEBkb3Rze30+fSB0bworCUBzYW1weyQ8QGRvdHN7fT5AdmFye259fSBpbiBTZWN0aW9uIEFjdGlvbnMgaW4gTWlkLVJ1bGUuCisJUmVwb3J0ZWQgYnkgRmFicmljZSBCYXV6YWMuCisKKzIwMDEtMDgtMDggIE1hcmMgQXV0cmV0ICA8YXV0cmV0X21AZXBpdGEuZnI+CisKKwkqIHNyYy92Y2dfZGVmYXVsdC5oOiBVc2UgTlVMTCBpbnN0ZWFkIG9mIDAgdG8gaW5pdGlhbGl6ZSBwb2ludGVycy4KKwkqIHNyYy92Y2cuYyAob3V0cHV0X25vZGUpOiBGaXguCisJKiBzcmMvdmNnLmg6IENsZWFudXAuCisJKiBzcmMvcHJpbnRfZ3JhcGguYzogQWRkIGNvbW1lbnRzLgorCShub2RlX291dHB1dF9zaXplKTogTmV3IGdsb2JhbCB2YXJpYWJsZS4gU2ltcGxpZnkgdGhlIGZvcm1hdHRpbmcgb2YKKwl0aGUgVkNHIGdyYXBoIG91dHB1dC4KKwkocHJpbnRfYWN0aW9ucyk6IFVudXNlZCBjb2RlIGlzIG5vdyB1c2VkLiBJdCBub3RpZmllcyB0aGUgZmluYWwgc3RhdGUKKwlhbmQgbm8gYWN0aW9uIHN0YXRlcyBpbiB0aGUgVkNHIGdyYXBoLiBJdCBhbHNvIGdpdmUgdGhlIHJlZHVjZSBhY3Rpb25zLgorCVRoZSBgc2hpZnQgYW5kIGdvdG8nIGVkZ2VzIGFyZSByZWQgYW5kIHRoZSBgZ28gdG8gc3RhdGUnIGVkZ2VzIGFyZQorCWJsdWUuCisJR2V0IHRoZSBjdXJyZW50IG5vZGUgbmFtZSBhbmQgbm9kZV9vYnN0YWNrIGJ5IGFyZ3VtZW50LgorCShub2RlX29ic3RhY2spOiBOZXcgdmFyaWFibGUuCisJKHByaW50X3N0YXRlKTogTWFuYWdlIG5vZGVfb2JzdGFjay4KKwkocHJpbnRfY29yZSk6IFVzZSBub2RlX29ic3RhY2sgZ2l2ZW4gYnkgYXJndW1lbnQuCisJQSBub2RlIGlzIG5vdCBvbmx5IGNvbXB1dGVkIGhlcmUgYnV0IGluIHByaW50X2FjdGlvbnMgYWxzby4KKwkocHJpbnRfZ3JhcGgpOiBDUFAgb3V0IHVzZWxlc3MgY29kZSBpbnN0ZWFkIG9mIGNvbW1lbnRpbmcgaXQuCisKKzIwMDEtMDgtMDcgIFBhc2NhbCBCYXJ0ICA8cGFzY2FsLmJhcnRAZXBpdGEuZnI+CisKKwkqIHRlc3RzL2F0Y29uZmlnLmluIChDUFBGTEFHUyk6IEZpeC4KKworMjAwMS0wOC0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9wcmludF9ncmFwaC5jIChxdW90ZSk6IE5ldy4KKwkocHJpbnRfY29yZSk6IFVzZSBpdC4KKworMjAwMS0wOC0wNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+LCBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvdmNnLmMgKGNvbXBsYWluLmgpOiBJbmNsdWRlIGl0LgorCVVuZXBpdGFpemUgYHJldHVybicgaW52b2NhdGlvbnMuCisJW05ERUJVR10gKG1haW4pOiBSZW1vdmUuCisJKiBzcmMvdmNnLmggKG5vZGVfdCwgZWRnZV90LCBncmFwaF90KTogQ29uc3RpZnkgdGhlIGNoYXIgKiBtZW1iZXJzLgorCSogc3JjL2ZpbGVzLmMgKG9wZW5fZmlsZXMpOiBJbml0aWFsaXplIGdyYXBoX29ic3RhY2suCisJKiBzcmMvcHJpbnRfZ3JhcGguYyAocHJpbnRfYWN0aW9ucyk6IENQUCBvdXQgdXNlbGVzcyBjb2RlLgorCShwcmludF9jb3JlKTogRG9uJ3Qgb3V0cHV0IHRoZSBsYXN0IGBcbicgaW4gbGFiZWxzLgorCVVzZSBgcXVvdGUnLgorCSogc3JjL2ZpbGVzLmMgKG91dHB1dF9maWxlcyk6IE91dHB1dCB0aGUgVkNHIGZpbGUuCisJKiBzcmMvbWFpbi5jIChtYWluKTogSW52b2tlIHByaW50X2dyYXBoICgpOworCisyMDAxLTA4LTA2ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJQXV0b21hdG9uIFZDRyBncmFwaCBvdXRwdXQuCisJVXNpbmcgb3B0aW9uIGBgLWcnJyBvciBsb25nIG9wdGlvbiBgYC0tZ3JhcGgnJywgeW91IGNhbiBnZW5lcmF0ZQorCWEgZ3JhbV9maWxlbmFtZS52Y2cgZmlsZSBjb250YWluaW5nIGEgVkNHIGRlc2NyaXB0aW9uIG9mIHRoZSBMQUxSICgxKQorCWF1dG9tYXRvbiBvZiB5b3VyIGdyYW1tYXIuCisKKwkqIHNyYy9tYWluLmM6IENhbGwgdG8gcHJpbnRfZ3JhcGgoKSBmdW5jdGlvbi4KKwkqIHNyYy9nZXRhcmdzLmg6IFVwZGF0ZS4KKwkqIHNyYy9nZXRhcmdzLmMgKG9wdGlvbnMpOiBVcGRhdGUgdG8gY2F0Y2ggYC1nJyBhbmQgYC0tZ3JhcGgnIG9wdGlvbnMuCisJKGdyYXBoX2ZsYWcpOiBOZXcgZmxhZy4KKwkobG9uZ29wdHMpOiBVcGRhdGUuCisJKGdldGFyZ3MpOiBBZGQgY2FzZSBgZycuCisJKiBzcmMvZmlsZXMuYyAoZ3JhcGhfb2JzdGFjayk6IE5ldyBvYnN0YWNrIHN0cnVjdC4KKwkob3Blbl9maWxlcyk6IEluaXRpYWxpemUgbmV3IG9ic3RhY2suCisJKG91dHB1dF9maWxlcyk6IFNhdmVzIGdyYXBoX29ic3RhY2sgaWYgcmVxdWlyZWQuCisJKiBzcmMvZmlsZXMuaCAoZ3JhcGhfb2JzdGFjayk6IE5ldyBleHRlcm4gZGVjbGFyYXRpb24uCisJKiBzcmMvTWFrZWZpbGUuYW06IEFkZCBuZXcgc291cmNlIGZpbGVzLgorCisyMDAxLTA4LTA2ICBNYXJjIEF1dHJldCAgPGF1dHJldF9tQGVwaXRhLmZyPgorCisJKiBzcmMvcHJpbnRfZ3JhcGguYywgc3JjL3ByaW50X2dyYXBoLmggKGdyYXBoKTogTmV3LgorCSogc3JjL3ZjZy5oOiBOZXcgZmlsZS4KKwkqIHNyYy92Y2cuYzogTmV3IGZpbGUsIFZDRyBncmFwaCBoYW5kbGluZy4KKworMjAwMS0wOC0wNiAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKworCUFkZCBvZiAlc291cmNlX2V4dGVuc2lvbiBhbmQgJWhlYWRlcl9leHRlbnNpb24gd2hpY2ggc3BlY2lmeQorCXRoZSBzb3VyY2Ugb3IvYW5kIHRoZSBoZWFkZXIgb3V0cHV0IGZpbGUgZXh0ZW5zaW9uLgorCisJKiBzcmMvZmlsZXMuYyAoY29tcHV0ZV9iYXNlX25hbWVzKTogUmVtb3ZlIGluaXRpYWxpc2F0aW9uIG9mCisJc3JjX2V4dGVuc2lvbiBhbmQgaGVhZGVyX2V4dGVuc2lvbi4KKwkoY29tcHV0ZV9leHRzX2Zyb21fZ2YpOiBVcGRhdGUuCisJKGNvbXB1dGVfZXh0c19mcm9tX3NyYyk6IFVwZGF0ZS4KKwkob3V0cHV0X2ZpbGVzKTogVXBkYXRlLgorCSogc3JjL3JlYWRlci5jIChwYXJzZV9oZWFkZXJfZXh0ZW5zaW9uX2RlY2wpOiBOZXcuCisJKHBhcnNlX3NvdXJjZV9leHRlbnNpb25fZGVjbCk6IE5ldy4KKwkocmVhZF9kZWNsYXJhdGlvbnMpOiBOZXcgY2FzZSBzdGF0ZW1lbnRzIGZvciB0aGUgbmV3IHRva2Vucy4KKwkqIHNyYy9sZXguYyAocGVyY2VudF90YWJsZSk6IEFkZCBlbnRyaWVzIGZvciAlc291cmNlX2V4dGVuc2lvbgorCWFuZCAlaGVhZGVyX2V4dGVuc2lvbi4KKwkqIHNyYy9sZXguaCAodG9rZW5fZSk6IE5ldyB0b2tlbnMgdG9rX2hkcmV4dCBhbmQgdG9rX3NyY2V4dC4KKworMjAwMS0wOC0wNiAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKworCSogY29uZmlndXJlLmluOiBCdW1wIHRvIDEuMjhjLgorCSogZG9jL2Jpc29uLnRleGluZm86IFRleGluZm8gdGhpbmdpZXMuCisKKzIwMDEtMDgtMDQgIFBhc2NhbCBCYXJ0ICA8cGFzY2FsLmJhcnRAZXBpdGEuZnI+CisKKwkqIHRlc3RzL2F0Y29uZmlnLmluIChDUFBGTEFHUyk6IEFkZC4KKwkqIHRlc3RzL2NhbGMuYXQgKEFUX0NIRUNLKTogVXNlIENQUEZMQUdTLgorCisyMDAxLTA4LTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCVZlcnNpb24gMS4yOGIuCisKKzIwMDEtMDgtMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiB0ZXN0cy9NYWtlZmlsZS5hbSAoY2hlY2stbG9jYWwpOiBTaGlwIHRlc3RzdWl0ZS4KKwkqIHRlc3RzL2NhbGMuYXQgKF9BVF9EQVRBX0NBTENfWSk6IFByb3RvdHlwZSBhbGwgdGhlIGZ1bmN0aW9ucy4KKwlJbmNsdWRlIGBzdHJpbmcuaCcuCisKKzIwMDEtMDgtMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBjb25maWd1cmUuaW46IFRyeSB1c2luZyAtV2Zvcm1hdCB3aGVuIGNvbXBpbGluZy4KKworMjAwMS0wOC0wMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGNvbmZpZ3VyZS5pbjogQnVtcCB0byAxLjI4Yi4KKworMjAwMS0wOC0wMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9jb21wbGFpbi5jOiBBZGp1c3Qgc3RyZXJyb3JfciBwb3J0YWJpbGl0eSBpc3N1ZXMuCisKKzIwMDEtMDgtMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJVmVyc2lvbiAxLjI4YS4KKworMjAwMS0wOC0wMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9nZXRhcmdzLmMsIHNyYy9nZXRhcmcuaCAoc2tlbGV0b24pKTogQ29uc3RpZnkuCisJKiBzcmMvbGV4LmMgKGxpdGVyYWxjaGFyKTogQXZvaWQgbmFtZSBjbGFzaGVzIG9uIGBidWYnLgorCSogc3JjL2dldGFyZ3MuYzogSW5jbHVkZSBjb21wbGFpbi5oLgorCSogc3JjL2ZpbGVzLmMsIHNyYy9maWxlcy5oIChza2VsZXRvbl9maW5kKTogQXZvaWQgbmFtZSBjbGFzaGVzLgorCSogbGliL3F1b3RlYXJnLmMsIGxpYi9xdW90ZWFyZy5oOiBVcGRhdGUgZnJvbSBmaWxldXRpbHMgNC4xLgorCisyMDAxLTA4LTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3JlYWRlci5jIChyZWFkZ3JhbSk6IERpc3BsYXkgaGlkZGVuIGNoYXJzIGluIGVycm9yIG1lc3NhZ2VzLgorCisyMDAxLTA4LTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCVVwZGF0ZSB0byBnZXR0ZXh0IDAuMTAuMzkuCisKKzIwMDEtMDgtMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBsaWIvc3Ryc3BuLmM6IE5ldy4KKworMjAwMS0wOC0wMSAgTWFyYyBBdXRyZXQgIDxhdXRyZXRfbUBlcGl0YS5mcj4KKworCSogZG9jL2Jpc29uLnRleGluZm86IFVwZGF0ZS4KKwkqIGRvYy9iaXNvbi4xIChtYW5kb2MpOiBVcGRhdGUuCisJKiBzcmMvc3lzdGVtLmggKEVYVF9HVUFSRF9DLCBFWFRfU1RZUEVfSCk6IFJlbW92ZSAuYyBhbmQgLmguCisJKiBzcmMvZmlsZXMuYzogU3VwcG9ydCBvdXRwdXQgZmlsZXMgZXh0ZW5zaW9ucyBjb21wdXRpbmcuCisJKHNyY19leHRlbnNpb24pOiBOZXcgc3RhdGljIHZhcmlhYmxlLgorCShoZWFkZXJfZXh0ZW5zaW9uKTogTmV3IHN0YXRpYyB2YXJpYWJsZS4KKwkodHIpOiBOZXcgZnVuY3Rpb24uCisJKGdldF9leHRlbnNpb25faW5kZXgpOiBOZXcgZnVuY3Rpb24sIGdldHMgdGhlIGluZGV4IG9mIGFuIGV4dGVuc2lvbgorCWZpbGVuYW1lIGluIGEgc3RyaW5nLgorCShjb21wdXRlX2V4dHNfZnJvbV9nZik6IE5ldyBmdW5jdGlvbiwgY29tcHV0ZXMgZXh0ZW5zaW9ucyBmcm9tIHRoZQorCWdyYW1tYXIgZmlsZSBleHRlbnNpb24uCisJKGNvbXB1dGVfZXh0c19mcm9tX3NyYyk6IE5ldyBmdW5jdGlvbnMsIGNvbXB1dGVzIGV4dGVuc2lvbnMgZnJvbSB0aGUKKwlDIHNvdXJjZSBmaWxlIGV4dGVuc2lvbiwgZmlsZSBnaXZlbiBieSBgYC1vJycgb3B0aW9uLgorCShjb21wdXRlX2Jhc2VfbmFtZXMpOiBVcGRhdGUuCisJKG91dHB1dF9maWxlcyk6IFVwZGF0ZS4KKworMjAwMS0wOC0wMSAgUm9iZXJ0IEFuaXNrbyAgPGFuaXNrb19yQGVwaXRhLmZyPgorCisJKiBkb2MvYmlzb24udGV4aTogRG9jdW1lbnQgQCQuCisJKExvY2F0aW9ucyk6IE5ldyBzZWN0aW9uLgorCisyMDAxLTA3LTE4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogTWFrZWZpbGUubWFpbnQsIEdOVW1ha2VmaWxlOiBOZXcsIGZyb20gQXV0b2NvbmYgMi41Mi4KKwkqIGNvbmZpZy9wcmV2LXZlcnNpb24udHh0LCBjb25maWcvbW92ZS1pZi1jaGFuZ2U6IE5ldy4KKwkqIE1ha2VmaWxlLmFtOiBBZGp1c3QuCisKKzIwMDEtMDctMDggIFBhc2NhbCBCYXJ0ICA8cGFzY2FsLmJhcnRAZXBpdGEuZnI+CisKKwkqIHNyYy9iaXNvbi5zaW1wbGUgKHl5cGFyc2UpOiBTdXBwcmVzcyB3YXJuaW5nIGBjb21wYXJhaXNvbgorCWJldHdlZW4gc2lnbmVkIGFuZCB1bnNpZ25lZCcuCisKKzIwMDEtMDctMDUgIFBhc2NhbCBCYXJ0ICA8cGFzY2FsLmJhcnRAZXBpdGEuZnI+CisKKwkqIHNyYy9nZXRhcmdzLmggKHJhd19mbGFnKTogUmVtb3ZlLgorCSogc3JjL2dldGFyZ3MuYzogRGllIG9uIGAtcicvYC0tcmF3Jy4KKwkqIHNyYy9sZXguYyAocGFyc2VfcGVyY2VudF90b2tlbik6IERpZSBvbiBgJXJhdycuCisJKiBzcmMvcmVhZGVyLmMgKG91dHB1dF90b2tlbl9kZWZpbmVzKTogU3VwcHJlc3MgY2FsbCB0byBgcmF3X2ZsYWcnLgorCSogdGVzdHMvY2FsYy5hdDogU3VwcHJlc3MgdGVzdCB3aXRoIG9wdGlvbiBgLS1yYXcnLgorCisyMDAxLTA3LTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogY29uZmlnLzogTmV3LgorCSogY29uZmlndXJlLmluOiBSZXF1aXJlIEF1dG9jb25mIDIuNTAuCisJVXBkYXRlIHRvIGdldHRleHQgMC4xMC4zOC4KKworMjAwMS0wMy0xNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvOiBBTlNJZnkgdGhlIGV4YW1wbGVzLgorCisyMDAxLTAzLTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZ2V0YXJncy5jIChza2VsZXRvbik6IE5ldyB2YXJpYWJsZS4KKwkobG9uZ29wdHMpOiAtLXNrZWxldG9uIGlzIGEgbmV3IG9wdGlvbi4KKwkoc2hvcnRvcHRzLCBnZXRhcmdzKTogLVMgaXMgYSBuZXcgb3B0aW9uLgorCSogZ2V0YXJncy5oOiBEZWNsYXJlIHNrZWxldG9uLgorCSogb3V0cHV0LmMgKG91dHB1dF9wYXJzZXIpOiBVc2UgaXQuCisKKzIwMDEtMDMtMTYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBtNC9zdHJlcnJvcl9yLm00OiBOZXcuCisJKiBtNC9lcnJvci5tNDogUnVuIEFDX0ZVTkNfU1RSRVJST1JfUi4KKwkqIGxpYi9lcnJvci5oLCBsaWIvZXJyb3IuYzogVXBkYXRlLgorCisyMDAxLTAzLTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2dldGFyZ3MuYyAobG9uZ29wdHMpOiBDbGVhbiB1cC4KKworMjAwMS0wMi0yMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9yZWFkZXIuYyAoZ2Vuc3ltKTogYGdlbnN5bV9jb3VudCcgaXMgeW91ciBvd24uCisJVXNlIGEgc3RhdGljIGJ1ZiB0byBjcmVhdGUgdGhlIHN5bWJvbCBuYW1lLCBhcyB0b2tlbl9idWZmZXIgaXMgbm8KKwlsb25nZXIgYSBidWZmZXIuCisKKzIwMDEtMDItMDggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvY29uZmxpY3RzLmMgKGNvbmZsaWN0X3JlcG9ydCk6IEJlIHN1cmUgbm90IHRvIGFwcGVuZCB0byByZXMKKwliZXR3ZWVuIHR3byBjYWxscywgd2hpY2ggY291bGQgaGFwcGVuIGlmIGJvdGggZmlyc3Qgc3ByaW50ZiB3ZXJlCisJc2tpcHBlZCwgYnV0IG5vdCB0aGUgZmlyc3QgY3AgKz0gc3RybGVuLgorCisyMDAxLTAyLTA4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogbGliL21lbWNoci5jLCBsaWIvc3RwY3B5LmMsIGxpYi9zdHJuZHVwLmMsIGxpYi9zdHJubGVuLmM6CisJTmV3LCBmcm9tIGZpbGV1dGlscyA0LjAuMzcuCisJKiBjb25maWd1cmUuaW46IFJlcXVpcmUgQXV0b2NvbmYgMi40OWMuICBJIHRvb2sgc29tZSB0aW1lIGJlZm9yZQorCW1ha2luZyB0aGlzIGRlY2lzaW9uLiAgVGhpcyBpcyB0aGUgb25seSB3YXkgb3V0IGZvciBwb3J0YWJpbGl0eQorCWlzc3VlcyBpbiBCaXNvbiwgaXQgd291bGQgbWVhbiB3YXkgdG9vIG11Y2ggZHVwbGljYXRlIGVmZm9ydCB0bworCWltcG9ydCBpbiBCaXNvbiBmZWF0dXJlcyBpbXBsZW1lbnRlZCBpbiAyLjQ5YyBzaW5jZSAyLjEzLgorCUFDX1JFUExBQ0VfRlVOQ1MgYW5kIEFDX0NIRUNLX0RFQ0xTIHRoZSBmdW5jdGlvbnMgYWJvdmUuCisKKzIwMDEtMDItMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBsaWIvbWFsbG9jLmMsIGxpYi9yZWFsbG9jLmM6IE5ldywgZnJvbSB0aGUgZmlsZXV0aWxzIDQuMC4zNy4KKwkqIGxpYi94YWxsb2MuaCwgbGliL3htYWxsb2MuYzogVXBkYXRlLgorCisyMDAxLTAxLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCUdldCByaWQgb2YgdGhlIGFkIGhvYyBoYW5kbGluZyBvZiB0b2tlbl9idWZmZXIgaW4gdGhlIHNjYW5uZXI6IHVzZQorCXRoZSBvYnN0YWNrcy4KKworCSogc3JjL2xleC5jICh0b2tlbl9vYnN0YWNrKTogTmV3LgorCShpbml0X2xleCk6IEluaXRpYWxpemUgaXQuICBObyBsb25nZXIgY2FsbC4uLgorCShncm93X3Rva2VuX2J1ZmZlcik6IHRoaXMuICBSZW1vdmUgaXQuCisJQWRqdXN0IGFsbCB0aGUgcGxhY2VzIHdoaWNoIHVzZWQgaXQgdG8gdXNlIHRoZSBvYnN0YWNrLgorCisyMDAxLTAxLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2xleC5oOiBSZW5hbWUgYWxsIHRoZSB0b2tlbnM6CisJcy9cYkVOREZJTEVcYi90b2tfZW9mL2c7CisJcy9cYklERU5USUZJRVJcYi90b2tfaWRlbnRpZmllci9nOworCWV0Yy4KKwlMZXQgdGhlbSBiZSBlbnVtcywgbm90ICNkZWZpbmUsIHRvIGVhc2UgZGVidWdnaW5nLgorCUFkanVzdCBhbGwgdGhlIGNvZGUuCisKKzIwMDEtMDEtMTggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvbGV4LmggKE1BWFRPS0VOLCBtYXh0b2tlbiwgZ3Jvd190b2tlbl9idWZmZXIpOiBSZW1vdmUsIHByaXZhdGUuCisJKiBzcmMvbGV4LmMgKG1heHRva2VuLCBncm93X3Rva2VuX2J1ZmZlcik6IFN0YXRpYy4KKworMjAwMS0wMS0xOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlTaW5jZSB3ZSBub3cgdXNlIG9ic3RhY2tzLCBtb3JlICUgZGlyZWN0aXZlcyBjYW4gYmUgZW5hYmxlZC4KKworCSogc3JjL2xleC5jIChwZXJjZW50X3RhYmxlKTogQWxzbyBhY2NlcHQgYCV5YWNjJywKKwlgJWZpeGVkX291dHB1dF9maWxlcycsIGAlZGVmaW5lcycsIGAlbm9fcGFyc2VyJywgYCV2ZXJib3NlJywgYW5kCisJYCVkZWJ1ZycuCisJSGFuZGxlIHRoZSBhY3Rpb25zIGZvciBgJXNlbWFudGljX3BhcnNlcicgYW5kIGAlcHVyZV9wYXJzZXInIGhlcmUsCisJaW5zdGVhZCBvZiByZXR1cm5pbmcgYSB0b2tlbi4KKwkqIHNyYy9sZXguaCAoU0VNQU5USUNfUEFSU0VSLCBQVVJFX1BBUlNFUik6IFJlbW92ZSwgdW51c2VkLgorCSogc3JjL3JlYWRlci5jIChyZWFkX2RlY2xhcmF0aW9ucyk6IEFkanVzdC4KKwkqIHNyYy9maWxlcy5jIChvcGVuX2ZpbGVzKTogRG9uJ3QgY2FsbCBgY29tcHV0ZV9iYXNlX25hbWVzJywgZG9uJ3QKKwljb21wdXRlIGBhdHRyc2ZpbGUnIHNpbmNlIHRoZXkgZGVwZW5kIHVwb24gZGF0YSB3aGljaCBtaWdodCBiZQorCSppbiogdGhlIGlucHV0IGZpbGUgbm93LgorCShvdXRwdXRfZmlsZXMpOiBEbyBpdCBoZXJlLgorCSogc3JjL291dHB1dC5jIChvdXRwdXRfaGVhZGVycyk6IERvY3VtZW50IHRoZSBmYWN0IHRoYXQgdGhpcyBwYXRjaAorCWludHJvZHVjZXMgYSBndWFyYW50ZWVkIFNFR1YgZm9yIHNlbWFudGljIHBhcnNlcnMuCisJKiBkb2MvYmlzb24udGV4aW5mbzogRG9jdW1lbnQgdGhlbS4KKwkqIHRlc3RzL3N1aXRlLmF0OiBFeGVyY2lzZSB0aGVzZSAlb3B0aW9ucy4KKworMjAwMC0xMi0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlBbHNvIGhhbmRsZSB0aGUgb3V0cHV0IGZpbGUgKC0tdmVyYm9zZSkgd2l0aCBvYnN0YWNrcy4KKworCSogZmlsZXMuYyAoZm91dHB1dCk6IFJlbW92ZS4KKwkob3V0cHV0X29ic3RhY2spOiBOZXcuCisJQWRqdXN0IGFsbCBkZXBlbmRlbmNpZXMuCisJKiBzcmMvY29uZmxpY3RzLmM6IFJldHVybiBhIHN0cmluZy4KKwkqIHNyYy9zeXN0ZW0uaCAob2JzdGFja19ncm93X3N0cmluZyk6IFJlbmFtZSBhcy4uLgorCShvYnN0YWNrX3Nncm93KTogdGhpcy4gIEJlIHJlYWR5IHRvIHdvcmsgd2l0aCBub24gbGl0ZXJhbHMuCisJKG9ic3RhY2tfZmdyb3c0KTogTmV3LgorCisyMDAwLTEyLTIwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2ZpbGVzLmMgKG9wZW5fZmlsZXMpOiBGaXggdGhlIGNvbXB1dGF0aW9uIG9mIHNob3J0X2Jhc2VfbmFtZQorCWluIHRoZSBjYXNlIG9mIGAtbyBmb28udGFiLmMnLgorCisyMDAwLTEyLTIwICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3JlYWRlci5jIChjb3B5X3N0cmluZywgY29weV9jb21tZW50LCBjb3B5X2NvbW1lbnQyLCBjb3B5X2F0KQorCShjb3B5X2RvbGxhcik6IE5vdyB0aGF0IGV2ZXJ5dGhpbmcgdXNlcyBvYnN0YWNrcywgZ2V0IHJpZCBvZiB0aGUKKwlGSUxFICogcGFyYW1ldGVycy4KKworMjAwMC0xMi0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9maWxlcy5jIChvcGVuX2ZpbGVzKTogQWN0dWFsbHkgdGhlIGAub3V0cHV0JyBmaWxlIGlzIGJhc2VkCisJb24gdGhlIHNob3J0X2Jhc2VfbmFtZSwgbm90IGJhc2VfbmFtZS4KKwkqIHRlc3RzL3N1aXRlLmF0IChDaGVja2luZyBvdXRwdXQgZmlsZSBuYW1lcyk6IEFkanVzdC4KKworMjAwMC0xMi0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9iaXNvbi5zMTogUmVtb3ZlLCB3ZSBub3cgdXNlIGRpcmVjdGx5Li4uCisJKiBzcmMvYmlzb24uc2ltcGxlOiB0aGlzLgorCSogc3JjL01ha2VmaWxlLmFtOiBVc2UgcGtnZGF0YSBpbnN0ZWFkIG9mIGRhdGEuCisKKzIwMDAtMTItMjAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvZmlsZXMuYyAoZ3VhcmRfb2JzdGFjayk6IE5ldy4KKwkob3Blbl9maWxlcyk6IEluaXRpYWxpemUgaXQuCisJKG91dHB1dF9maWxlcyk6IER1bXAgaXQuLi4KKwkqIHNyYy9maWxlcy5oOiBFeHBvcnQgaXQuCisJKiBzcmMvcmVhZGVyLmMgKGNvcHlfZ3VhcmQpOiBVc2UgaXQuCisKKzIwMDAtMTItMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvZmlsZXMuYyAob3V0ZmlsZSwgZGVmc2ZpbGUsIGFjdGZpbGUpOiBSZW1vdmVkIGFzIGdsb2JhbAorCXZhcnMuCisJKG9wZW5fZmlsZXMpOiBEb24ndCBjb21wdXRlIHRoZW0uCisJKG91dHB1dF9maWxlcyk6IEFkanVzdC4KKwkoYmFzZV9uYW1lLCBzaG9ydF9iYXNlX25hbWUpOiBCZSBnbG9iYWwuCisJQWRqdXN0IGRlcGVuZGVuY2llcy4KKworMjAwMC0xMi0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9maWxlcy5jIChzdHJzdWZmaXgpOiBOZXcuCisJKHN0cmluZ2FwcGVuZCk6IEJlIGp1c3QgbGlrZSBzdHJjYXQgYnV0IGFsbG9jYXRlLgorCShiYXNlX25hbWVzKTogRXZlIG91dCBmcm9tIG9wZW5fZmlsZXMuCisJVHJ5IHRvIHNpbXBsaWZ5IHRoZSByYXRoZXIgaGFpcnkgY29tcHV0YXRpb24gb2YgYmFzZV9uYW1lIGFuZAorCXNob3J0X2Jhc2VfbmFtZS4KKwkob3Blbl9maWxlcyk6IFVzZSBpdC4KKwkqIHRlc3RzL3N1aXRlLmF0IChDaGVja2luZyBvdXRwdXQgZmlsZSBuYW1lcyk6IE5ldyB0ZXN0LgorCisyMDAwLTEyLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3N5c3RlbS5oIChvYnN0YWNrX2dyb3dfbGl0ZXJhbF9zdHJpbmcpOiBSZW5hbWUgYXMuLi4KKwkob2JzdGFja19ncm93X3N0cmluZyk6IHRoaXMuCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9wYXJzZXIpOiBSZWNvZ25pemUgYCUlIGFjdGlvbnMnIGluc3RlYWQgb2YKKwlgJCcuCisJKiBzcmMvYmlzb24uczE6IHMvJC8lJSBhY3Rpb25zLy4KKwkqIHNyYy9iaXNvbi5oYWlyeTogTGlrZXdpc2UuCisKKzIwMDAtMTItMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9wYXJzZXIpOiBDb21wdXRlIHRoZSBgI2xpbmUnIGxpbmVzIHdoZW4KKwl0aGVyZSBhcmUuCisJKiBzcmMvTWFrZWZpbGUuYW0gKGJpc29uLnNpbXBsZSk6IEJlIGEgc2ltcGxlIGNvcHkgb2YgYmlzb24uczEuCisJU3VnZ2VzdGVkIGJ5IEhhbnMgQWJlcmcuCisKKzIwMDAtMTItMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJTGV0IHRoZSBoYW5kbGluZyBvZiB0aGUgc2tlbGV0b24gZmlsZXMgYmUgbG9jYWwgdG8gdGhlIHByb2NlZHVyZXMKKwl0aGF0IHVzZSBpdC4KKworCSogc3JjL2ZpbGVzLmMgKHhmb3BlbiwgeGZjbG9zZSwgc2tlbGV0b25fZmluZCwgZ3VhcmRmaWxlKTogTm8KKwlsb25nZXIgc3RhdGljLgorCShmcGFyc2VyLCBvcGVuX2V4dHJhX2ZpbGVzKTogUmVtb3ZlLgorCShvcGVuX2ZpbGVzLCBvdXRwdXRfZmlsZXMpOiBEb24ndCB0YWtlIGNhcmUgb2YgZnBhcnNlci4KKwkqIHNyYy9maWxlcy5oOiBBZGp1c3QuCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9wYXJzZXIpOiBPcGVuIGFuZCBjbG9zZSB0aGUgZmlsZSB0byB0aGUKKwlza2VsZXRvbi4KKwkqIHNyYy9yZWFkZXIuYyAocmVhZF9kZWNsYXJhdGlvbnMpOiBXaGVuICVzZW1hbnRpY19wYXJzZXIsIG9wZW4KKwlmZ3VhcmQuCisKKzIwMDAtMTItMTkgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvZmlsZS5oIChCSVNPTl9TSU1QTEUsIEJJU09OX0hBSVJZKTogTW92ZSBmcm9tIGhlcmUuLi4KKwkqIHNyYy9zeXN0ZW0uaCAoQklTT05fU0lNUExFLCBCSVNPTl9IQUlSWSk6IC4uLiB0byBoZXJlLgorCisyMDAwLTEyLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2ZpbGVzLmMgKG9wZW5fZmlsZXMpOiBZaXBlZSEgIFdlIG5vIGxvbmdlciBuZWVkIGFsbCB0aGUgY29kZQorCWxvb2tpbmcgZm9yIGAvdG1wJyBzaW5jZSB3ZSBoYXZlIG5vIHRtcCBmaWxlLgorCisyMDAwLTEyLTE5ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3N5c3RlbS5oIChFWFRfVEFCLCBFWFRfT1VUUFVULCBFWFRfU1RZUEVfSCwgRVhUX0dVQVJEX0MpOgorCU5ldyBtYWNyb3MuCisJKiBzcmMvZmlsZXMuYyAob3Blbl9maWxlcyk6IExlc3MgZGVwZW5kZW5jeSBvbiBNU0RPUyBldGMuCisKKzIwMDAtMTItMTQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvYmlzb24uczEgKFlZTExPQ19ERUZBVUxUKTogTmV3IG1hY3JvLgorCVByb3ZpZGUgYSBkZWZhdWx0IGRlZmluaXRpb24uCisJVXNlIGl0IHdoZW4gZXhlY3V0aW5nIHRoZSBkZWZhdWx0IEAgYWN0aW9uLgorCSogc3JjL3JlYWRlci5jIChyZWFkZXJfb3V0cHV0X3l5bHNwKTogTm8gbG9uZ2VyIGluY2x1ZGUKKwlgdGltZXN0YW1wJyBhbmQgYHRleHQnIGluIHRoZSBkZWZhdWx0IFlZTFRZUEUuCisKKzIwMDAtMTItMTIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKGNvcHlfZGVmaW5pdGlvbiwgcGFyc2VfdW5pb25fZGVjbCwgY29weV9hY3Rpb24pCisJKGNvcHlfZ3VhcmQpOiBRdW90ZSB0aGUgZmlsZSBuYW1lcy4KKwlSZXBvcnRlZCBieSBMYXVyZW50IE1hc2NoZXJwYS4KKworMjAwMC0xMi0xMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X2hlYWRlcnMsIG91dHB1dF9wcm9ncmFtLCBvdXRwdXQpOiBCZSBzdXJlCisJdG8gZXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycyB3aGVuIG91dHB1dHRpbmcgZmlsZW5hbWVzLgorCShBQ1RTVFJfUFJPTE9HVUUsIEFDVFNUUl9FUElMT0dVRSk6IFJlbW92ZS4KKwkob3V0cHV0X2hlYWRlcnMpOiBEb24ndCBkZXBlbmQgb24gdGhlbSwgVXNlIEFDVFNUUi4KKworMjAwMC0xMS0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGxpYi9vYnN0YWNrLmg6IEZvcm1hdHRpbmcgY2hhbmdlcy4KKwkob2JzdGFja19ncm93LCBvYnN0YWNrX2dyb3cwKTogRG9uJ3QgY2FzdCBXSEVSRSBhdCBhbGw6IGl0CisJcHJldmVudHMgdHlwZSBjaGVja2luZy4KKwkob2JzdGFja19wdHJfZ3Jvdywgb2JzdGFja19wdHJfZ3Jvd19mYXN0KTogV2hlbiBhc3NpZ25pbmcsIGRvbid0CisJY2FzdCB0aGUgdmFsdWUgdG8gKHZvaWQgKik6IGFzc2lnbmluZyBhIGBmb28gKicgdG8gYSBgdm9pZCAqJworCXZhcmlhYmxlIGlzIHZhbGlkLgorCShvYnN0YWNrX2ludF9ncm93LCBvYnN0YWNrX2ludF9ncm93X2Zhc3QpOiBEb24ndCBjYXN0IEFJTlQgdG8gaW50LgorCSogc3JjL3JlYWRlci5jIChwYXJzZV91bmlvbl9kZWNsKTogVHlwbzogdXNlIG9ic3RhY2tfMWdyb3cgdG8KKwlhcHBlbmQgY2hhcmFjdGVycy4KKworMjAwMC0xMS0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHRlc3RzL01ha2VmaWxlLmFtIChzdWl0ZS5tNCwgcmVncmVzc2lvbi5tNCwgY2FsYy5tNCk6IFJlbmFtZQorCWFzLi4uCisJKHN1aXRlLm00LCByZWdyZXNzaW9uLm00LCBjYWxjLm00KTogdGhlc2UuCisJKiB0ZXN0cy9hdGdlbmVyYWwubTQ6IFVwZGF0ZSBmcm9tIENWUyBBdXRvY29uZi4KKworMjAwMC0xMS0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHRlc3RzL3JlZ3Jlc3Npb24ubTQgKCV1bmlvbiBhbmQgLS1kZWZpbmVzKTogTmV3IHRlc3QsCisJZGVtb25zdHJhdGluZyBhIGN1cnJlbnQgYnVnIGluIHRoZSBvYnN0YWNrIGltcGxlbWVudGF0aW9uLgorCisyMDAwLTExLTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2Jpc29uLnMxIChfWVlfREVDTF9WQVJJQUJMRVMsIFlZX0RFQ0xfVkFSSUFCTEVTKTogTmV3CisJbWFjcm9zLgorCVVzZSB0aGVtIHRvIGRlY2xhcmUgdGhlIHZhcmlhYmxlcyB3aGljaCBhcmUgZ2xvYmFsIG9yIGxvY2FsIHRvCisJYHl5cGFyc2UnLgorCisyMDAwLTExLTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogYWNjb25maWcuaDogUmVtb3ZlLCBubyBsb25nZXIgdXNlZC4KKworMjAwMC0xMS0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYzogcy9Db3B5cmlnaHQgKEMpL0NvcHlyaWdodC9nLgorCisyMDAwLTExLTA3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3JlYWRlci5jIChyZWFkZXIpOiAjZGVmaW5lIFlZTFNQX05FRURFRCB0byAxIGluc3RlYWQgb2YganVzdAorCWRlZmluaW5nLgorCSogc3JjL2Jpc29uLnMxOiBzLyNpZmRlZiBZWUxTUF9ORUVERUQvI2lmIFlZTFNQX05FRURFRC8uCisKKzIwMDAtMTEtMDcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvYmlzb24uczEgKFlZTEVYKTogVXNlICNpZiBpbnN0ZWFkIG9mICNpZmRlZi4KKwlNZXJnZSBpbiBhIHNpbmdsZSBDUFAgaWYvZWxzZS4KKworMjAwMC0xMS0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0KTogUmVtb3ZlIHVzZWxlc3MgdmFyaWFibGVzLgorCSogbGliL29ic3RhY2suYyAob2JzdGFja19ncm93LCBvYnN0YWNrX2dyb3cwKTogUmVuYW1lIHRoZSBzZWNvbmQKKwlhcmd1bWVudCBgZGF0YScgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIHByb3RvdHlwZXMuCisJUXVhbGlmeSBpdCBgY29uc3QnLgorCShvYnN0YWNrX2NvcHksIG9ic3RhY2tfY29weTApOiBSZW5hbWUgdGhlIHNlY29uZCBhcmd1bWVudCBhcworCWBhZGRyZXNzJyBmb3IgY29uc2lzdGVuY3kuICBRdWFsaWZ5IGl0IGBjb25zdCcuCisJKiBsaWIvb2JzdGFjay5oIChvYnN0YWNrX2NvcHksIG9ic3RhY2tfY29weTAsIG9ic3RhY2tfZ3JvdykKKwkob2JzdGFja19ncm93MCwgb2JzdGFja19wdHJfZ3Jvdywgb2JzdGFja19wdHJfZ3Jvd19mYXN0KTogUXVhbGlmeQorCWBjb25zdCcgdGhlaXIgaW5wdXQgYXJndW1lbnQgKGBkYXRhJyBvciBgYWRkcmVzcycpLgorCUFkanVzdCB0aGUgY29ycmVzcG9uZGluZyBtYWNyb3MgdG8gaW5jbHVkZSBgY29uc3QnIGluIGNhc3RzLgorCisyMDAwLTExLTAzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL01ha2VmaWxlLmFtIChJTkNMVURFUyk6IHMvUEZJTEUvQklTT05fU0lNUExFLy4KKwlzL1BGSUxFMS9CSVNPTl9IQUlSWS8uCisJQWRqdXN0IGRlcGVuZGVuY2llcy4KKworMjAwMC0xMS0wMyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlGb3Igc29tZSByZWFzb24sIHRoaXMgd2FzIG5vdCBhcHBsaWVkLgorCisJKiBzcmMvZmlsZXMuYyBbVk1TXTogTm8gbG9uZ2VyIGluY2x1ZGUgYHNzZGVmLmgnLCBubyBsb25nZXIgZGVmaW5lCisJYHVubGluayc6IGl0J3Mgbm8gbG9uZ2VyIHVzZWQuCisKKzIwMDAtMTEtMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvZmlsZXMuYyAoc2tlbGV0b25fZmluZCk6IE5ldyBmdW5jdGlvbiwgZXZlZCBvdXQgb2YuLi4KKwkob3Blbl9maWxlcywgb3Blbl9leHRyYV9maWxlcyk6IGhlcmUuCisKKzIwMDAtMTEtMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJRG9uJ3QgdXNlIGBhdGV4aXQnLgorCisJKiBzcmMvZmlsZXMuYyAob2JzdGFja19zYXZlKTogTmV3IGZ1bmN0aW9uLgorCShkb25lKTogUmVuYW1lIGFzLi4uCisJKG91dHB1dF9maWxlcyk6IHRoaXMuCisJVXNlIGBvYnN0YWNrX3NhdmUnLgorCSogc3JjL21haW4uYyAobWFpbik6IERvbid0IHVzZSBgYXRleGl0JyB0byByZWdpc3RlciBgZG9uZScsIHNpbmNlCisJaXQgbm8gbG9uZ2VyIGhhcyB0byByZW1vdmUgdG1wIGZpbGVzLCBqdXN0IGNhbGwgYG91dHB1dF9maWxlcycKKwl3aGVuIHRoZXJlIGFyZSBubyBlcnJvcnMuCisKKzIwMDAtMTEtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvZmlsZXMuYyBbVk1TXTogTm8gbG9uZ2VyIGluY2x1ZGUgYHNzZGVmLmgnLCBubyBsb25nZXIgZGVmaW5lCisJYHVubGluayc6IGl0J3Mgbm8gbG9uZ2VyIHVzZWQuCisJKiBzcmMvZmlsZXMuaDogRm9ybWF0dGluZyBjaGFuZ2VzLgorCisyMDAwLTExLTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCVJlbW92ZSB0aGUgbGFzdCB1c2VzIG9mIG1rdGVtcCBhbmQgdW5saW5rL2RlbGV0ZS4KKworCSogc3JjL2ZpbGVzLmMgKGZkZWZpbmVzLCBmdGFibGUpOiBSZW1vdmVkLgorCShkZWZpbmVzX29zdGFjaywgdGFibGVfb2JzdGFjayk6IE5ldy4KKwlBZGp1c3QgZGVwZW5kZW5jaWVzIG9mIHRoZSBmb3JtZXIgaW50byB1c2VzIG9mIHRoZSBsYXR0ZXIuCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9zaG9ydF9vcl9jaGFyX3RhYmxlLCBvdXRwdXRfc2hvcnRfdGFibGUpOgorCUNvbnZlcnQgdG8gdXNpbmcgb2JzdGFja3MuCisJKiBzcmMvcmVhZGVyLmMgKGNvcHlfY29tbWVudDIpOiBBY2NlcHQgb25lIEZJTEUgKiBhbmQgdHdvCisJb2JzdGFja3MuCisJKG91dHB1dF90b2tlbl9kZWZpbmVzLCByZWFkZXJfb3V0cHV0X3l5bHNwKTogVXNlIG9ic3RhY2tzLgorCSogc3JjL3N5c3RlbS5oIChvYnN0YWNrX2Zncm93Myk6IE5ldy4KKwkqIHBvL1BPVEZJTEVTLmluOiBBZGp1c3QuCisKKzIwMDAtMTEtMDEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJQ2hhbmdlIGVhY2ggdXNlIG9mIGBmYXR0cnMnIGludG8gYSB1c2Ugb2YgYGF0dHJzX29ic3RhY2snLgorCisJKiBzcmMvcmVhZGVyLmMgKGNvcHlfYXQpOiBUeXBvOiBzL3l5bGxvYy95eWxvYy8uCisJKiBzcmMvZmlsZXMuYyAoZmF0dHJzKTogUmVtb3ZlLgorCShhdHRyc19vYnN0YWNrKTogTmV3LgorCUFkanVzdCBhbGwgZGVwZW5kZW5jaWVzLgorCShkb25lKTogSWYgU0VNQU5USUNfUEFSU0VSLCBkdW1wIGF0dHJzX29ic3RhY2sgaW50byBhdHRyc2ZpbGUuCisKKzIwMDAtMTEtMDEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJSW50cm9kdWNlIG9ic3RhY2tzLgorCUNoYW5nZSBlYWNoIHVzZSBvZiBgZmFjdGlvbicgaW50byBhIHVzZSBvZiBgYWN0aW9uX29ic3RhY2snLgorCisJKiBsaWIvb2JzdGFjay5oLCBsaWIvb2JzdGFjay5jOiBOZXcgZmlsZXMuCisJKiBzcmMvZmlsZXMuYyAoZmFjdGlvbik6IFJlbW92ZS4KKwkoYWN0aW9uX29ic3RhY2spOiBOZXcuCisJQWRqdXN0IGFsbCBkZXBlbmRlbmNpZXMuCisKKzIwMDAtMTAtMjAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBsaWIvcXVvdGUuaCAoUEFSQU1TKTogTmV3IG1hY3JvLiAgVXNlIGl0LgorCisyMDAwLTEwLTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL291dHB1dC5jIChvdXRwdXRfc2hvcnRfb3JfY2hhcl90YWJsZSk6IE5ldyBmdW5jdGlvbi4KKwkob3V0cHV0X3Nob3J0X3RhYmxlLCBvdXRwdXRfdG9rZW5fdHJhbnNsYXRpb25zKTogVXNlIGl0LgorCShnb3RvX2FjdGlvbnMpOiBVc2Ugb3V0cHV0X3Nob3J0X3RhYmxlLgorCisyMDAwLTEwLTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3N5bXRhYi5jIChidWNrZXRfbmV3KTogTmV3IGZ1bmN0aW9uLgorCShnZXRzeW0pOiBVc2UgaXQuCisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3Nob3J0X3RhYmxlKTogTmV3IGFyZ3VtZW50IHRvIGRpc3BsYXkgdGhlCisJY29tbWVudCBhc3NvY2lhdGVkIHdpdGggdGhlIHRhYmxlLgorCUFkanVzdCBkZXBlbmRlbmNpZXMuCisJKG91dHB1dF9ncmFtKTogVXNlIGl0LgorCShvdXRwdXRfcnVsZV9kYXRhKTogTmljZXIgb3V0cHV0IGxheW91dCBmb3IgWVlUTkFNRS4KKworMjAwMC0xMC0xNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9sZXguYyAocmVhZF90eXBlbmFtZSk6IE5ldyBmdW5jdGlvbi4KKwkobGV4KTogVXNlIGl0LgorCSogc3JjL3JlYWRlci5jIChjb3B5X2RvbGxhcik6IExpa2V3aXNlLgorCisyMDAwLTEwLTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3JlYWRlci5jIChjb3B5X2NvbW1lbnQyKTogRXhwZWN0IHRoZSBpbnB1dCBzdHJlYW0gdG8gYmUgb24KKwl0aGUgYC8nIHdoaWNoIGlzIHN1c3BlY3RlZCB0byBvcGVuIGEgY29tbWVudCwgaW5zdGVhZCBvZiBiZWluZworCWNhbGxlZCBhZnRlciBgLy8nIG9yIGAvKicgd2FzIHJlYWQuCisJKGNvcHlfY29tbWVudCwgY29weV9kZWZpbml0aW9uLCBwYXJzZV91bmlvbl9kZWNsLCBjb3B5X2FjdGlvbikKKwkoY29weV9ndWFyZCk6IEFkanVzdC4KKworMjAwMC0xMC0xNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9yZWFkZXIuYyAocGFyc2VfZXhwZWN0X2RlY2wpOiBVc2UgYHNraXBfd2hpdGVfc3BhY2UnIGFuZAorCWByZWFkX3NpZ25lZF9pbnRlZ2VyJy4KKworMjAwMC0xMC0xNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9yZWFkZXIuYyAoY29weV9kb2xsYXIpOiBOZXcgZnVuY3Rpb24uCisJKGNvcHlfZ3VhcmQsIGNvcHlfYWN0aW9uKTogVXNlIGl0LgorCisyMDAwLTEwLTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogbGliL3F1b3RlLmgsIGxpYi9xdW90ZS5jLCBsaWIvcXVvdGVhcmcuaCwgbGliL3F1b3RlYXJnLmM6CisJKiBtNC9wcmVyZXEubTQsIG00L2MtYnMtYS5tNCwgbTQvbWJzdGF0ZS5tNDoKKwlOZXcgZmlsZXMsIGZyb20gRmlsZXV0aWxzIDQuMC4yNy4KKwkqIHNyYy9tYWluLmMgKHByaW50YWJsZV92ZXJzaW9uKTogUmVtb3ZlLgorCSogc3JjL2xleC5jLCBzcmMvcmVhZGVyLmM6IFVzZSBgcXVvdGUnLgorCisyMDAwLTEwLTA0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogbGliL2Vycm9yLmMsIGxpYi9lcnJvci5oOiBOZXcgZmlsZXMsIG5lZWRlZCBieSB4bWFsbG9jLmMuCisKKzIwMDAtMTAtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBkb2MvYmlzb24udGV4aW5mbzogVmFyaW91cyB0eXBvcyBzcG90dGVkIGJ5IE5laWwgQm9vdGguCisKKzIwMDAtMTAtMDQgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJV2hlbiBhIGxpdGVyYWwgc3RyaW5nIGlzIHVzZWQgdG8gZGVmaW5lIHR3byBkaWZmZXJlbnQgdG9rZW5zLAorCWBiaXNvbiAtdicgc2VnZmF1bHRzLgorCVJlcG9ydGVkIGJ5IFBpb3RyIEdhY2tpZXdpY3osIGFuZCBmaXhlZCBieSBOZWlsIEJvb3RoLgorCisJKiB0ZXN0cy9yZWdyZXNzaW9uLm00OiBOZXcgZmlsZS4KKwlJbmNsdWRlIHRoZSBjb3JlIG9mIHRoZSBzYW1wbGUgcHJvdmlkZWQgYnkgUGlvdHIgR2Fja2lld2ljei4KKwkqIHNyYy9yZWFkZXIuYyAocGFyc2VfdG9rZW5fZGVjbCk6IERpYWdub3NlIGJhZCBjYXNlcywgYW5kIHByb2NlZWQKKwlwcm9wZXJseS4KKworMjAwMC0xMC0wNCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9yZWFkZXIuYyAocGFyc2VfZXhwZWN0X2RlY2wpOiBLZWVwIGBjb3VudCcgd2l0aGluIHRoZSBzaXplCisJb2YgYGJ1ZmZlcicuCisJRnJvbSBOZWlsIEJvb3RoLgorCisyMDAwLTEwLTAyICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogYmlzb24uczEgKHl5cGFyc2UpOiBBc3NpZ24gdGhlIGRlZmF1bHQgdmFsdWUKKwl1bmNvbmRpdGlvbmFsbHksIHRvIGF2b2lkIGEgR0NDIHdhcm5pbmcgYW5kIG1ha2UgdGhlIHBhcnNlciBhCisJdGFkIHNtYWxsZXIuCisKKzIwMDAtMTAtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvZ2V0YXJncy5jIChnZXRhcmdzKTogRG9uJ3QgZHVtcCBgLS1oZWxwJyBvbiB1bnJlY29nbml6ZWQKKwlvcHRpb25zLgorCisyMDAwLTEwLTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2Rlcml2ZXMuYywgc3JjL3ByaW50LmMsIHNyYy9yZWR1Y2UuYzogVG8gZWFzZSB0aGUKKwl0cmFuc2xhdGlvbiwgbW92ZSBzb21lIGBcbicgb3V0IG9mIHRoZSB0cmFuc2xhdGVkIHN0cmluZ3MuCisKKzIwMDAtMTAtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJVGhlIGxvY2F0aW9uIHRyYWNraW5nIG1lY2hhbmlzbSBpcyBwcmVjaW91cyBmb3IgcGFyc2UgZXJyb3IKKwltZXNzYWdlcy4gIE5ldmVydGhlbGVzcywgaXQgaXMgZW5hYmxlZCBvbmx5IHdoZW4gYEBuJyBpcyB1c2VkIGluCisJdGhlIGdyYW1tYXIsIHdoaWNoIGlzIGEgZGlmZmVyZW50IGlzc3VlICh5b3UgY2FuIHVzZSBpdCBpbiBlcnJvcgorCW1lc3NhZ2UsIGJ1dCBub3QgaW4gdGhlIGdyYW1tYXIgcGVyIHNlKS4gIFRoZXJlZm9yZSwgdGhlcmUgc2hvdWxkCisJYmUgYW5vdGhlciBtZWFucyB0byBlbmFibGUgaXQuCisKKwkqIHNyYy9nZXRhcmdzLmMgKGdldGFyZ3MpOiBTdXBwb3J0IGAtLWxvY2F0aW9ucycuCisJKHVzYWdlKTogUmVwb3J0IGl0LgorCSogc3JjL2dldGFyZ3MuaCAobG9jYXRpb25zZmxhZyk6IEV4cG9ydCBpdC4KKwkqIHNyYy9sZXguYyAocGVyY2VudF90YWJsZSk6IFN1cHBvcnQgYCVsb2NhdGlvbnMnLgorCSogc3JjL3JlYWRlci5jICh5eWxzcF9uZWVkZWQpOiBSZW1vdmUgdGhpcyB2YXJpYWJsZSwgbm93IHJlcGxhY2VkCisJd2l0aCBgbG9jYXRpb25zZmxhZycuCisJKiBkb2MvYmlzb24udGV4aW5mbzogRG9jdW1lbnQgYC0tbG9jYXRpb25zJyBhbmQgYCVsb2NhdGlvbnMnLgorCVNvcnQgdGhlIG9wdGlvbnMuCisJKiB0ZXN0cy9jYWxjLm00OiBUZXN0IGl0LgorCisJRm9yIHJlZ3VsYXJpdHkgb2YgdGhlIG5hbWVzLCByZXBsYWNlIGVhY2gKKwkobm9saW5lZmxhZywgdG9rbnVtZmxhZywgcmF3dG9rZW51bWZsYWcsIG5vcGFyc2VyZmxhZyk6IHdpdGguLi4KKwkobm9fbGluZWZsYWcsIHRva2VuX3RhYmxlZmxhZywgcmF3ZmxhZywgbm9fcGFyc2VyZmxhZyk6IHRoaXMuCisJSW4gYWRkaXRpb24gcmVwbGFjZSBlYWNoIGBmbGFnJyB3aXRoIGBfZmxhZycuCisKKzIwMDAtMTAtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJQWxzbyB0ZXN0IHBhcnNlIGVycm9yIG1lc3NhZ2VzLCBpbmNsdWRpbmcgd2l0aCBZWUVSUk9SX1ZFUkJPU0UuCisKKwkqIHRlc3RzL2NhbGMubTQgKGNhbGMueSk6IEFkZCBzdXBwb3J0IGZvciBgZXhwID0gZXhwJyAobm9uCisJYXNzb2NpYXRpdmUpLgorCVVzZSBpdCB0byBjaGVjayB0aGUgY29tcHV0YXRpb25zLgorCVVzZSBpdCB0byBjaGVjayBgbm9uYXNzb2MnIGlzIGhvbm9yZWQuCisJKEFUX0RBVEFfQ0FMQ19ZKTogRXF1aXAgYGNhbGMueScgd2l0aCBZWUVSUk9SX1ZFUkJPU0Ugd2hlbiBwYXNzZWQKKwlgLS15eWVycm9yLXZlcmJvc2UnLgorCShfQVRfQ0hFQ0tfQ0FMQyk6IEFkanVzdCB0byB0aGlzIG9wdGlvbi4KKwkoX0FUX0NIRUNLX0NBTENfRVJST1IpOiBOZXcgbWFjcm8gdG8gY2hlY2sgcGFyc2UgZXJyb3IgbWVzc2FnZXMuCisKKzIwMDAtMTAtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJVGVzdCBhbHNvIGAtLXZlcmJvc2UnLCBgLS1kZWZpbmVzJyBhbmQgYC0tbmFtZS1wcmVmaXgnLiAgVGVzdGluZworCXRoZSBsYXR0ZXIgZGVtb25zdHJhdGVzIGEgZmxhdyBpbiB0aGUgaGFuZGxpbmcgb2Ygbm9uIGRlYnVnZ2luZworCXBhcnNlcnMgaW50cm9kdWNlZCBieSBteXNlbGYgb24gMjAwMC0wMy0xNjogYCNkZWZpbmUgeXlkZWJ1ZyAwJworCXdhcyB1c2VkIGluIG9yZGVyIHRvIHNpbXBsaWZ5OgorCisJI2lmIFlZREVCVUcKKwlpZiAoeXlkZWJ1ZykKKwl7CisJLi4uCisJfQorCSNlbmRpZgorCisJaW50bworCisJaWYgKHl5ZGVidWcpCisJeworCS4uLgorCX0KKworCXVuZm9ydHVuYXRlbHkgdGhpcyBsZWFkcyB0byBhIENQUCBjb25mbGljdCB3aGVuCisJYC0tbmFtZS1wcmVmaXg9Zm9vJyBpcyB1c2VkIHNpbmNlIGl0IHByb2R1Y2VzIGAjZGVmaW5lIHl5ZGVidWcKKwlmb29kZWJ1ZycuCisKKwkqIHNyYy9iaXNvbi5zMSBbIVlZREVCVUddOiBEbyBub3QgZGVmaW5lIHl5ZGVidWcuCisJKFlZRFBSSU5URik6IE5ldyBtYWNyby4KKwlTcHJlYWQgaXRzIHVzZS4KKwkqIHRlc3RzL2NhbGMubTQgKEFUX0NIRUNLX0NBTEMpOiBEbyByZXF1aXJlIGEgdGl0bGUsIGJ1aWxkIGl0IGZyb20KKwl0aGUgYmlzb24gb3B0aW9ucy4KKwlBbHNvIHRlc3QgYC0tdmVyYm9zZScsIGAtLWRlZmluZXMnIGFuZCBgLS1uYW1lLXByZWZpeCcuCisKKzIwMDAtMTAtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJSW1wcm92ZSB0aGUgcmVhZGFiaWxpdHkgb2YgdGhlIHByb2R1Y2VkIHBhcnNlcnMuCisKKwkqIHNyYy9iaXNvbi5zMTogRm9ybWF0dGluZyBjaGFuZ2VzLgorCUltcHJvdmUgdGhlIGNvbW1lbnQgcmVsYXRlZCB0byB0aGUgYCQnIG1hcmsuCisJKHl5ZGVmYXVsdCk6IERvbid0IGZhbGwgdGhyb3VnaCB0byBgeXlyZXN1bWUnOiBgZ290bycgdGhlcmUuCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9wYXJzZXIpOiBXaGVuIHRoZSBgJCcgaXMgbWV0LCBza2lwIHRoZSBlbmQKKwlvZiBpdHMgbGluZS4KKwlOZXcgdmFyaWFibGUsIGBudW1iZXJfb2ZfZG9sbGFyX3NpZ25zJywgdG8gY2hlY2sgdGhlcmUncyBleGFjdGx5CisJb25lIGAkJyBpbiB0aGUgcGFyc2VyIHNrZWxldG9uLgorCisyMDAwLTEwLTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogbGliL3hzdHJkdXAuYzogTmV3IGZpbGUsIGZyb20gdGhlIGZpbGV1dGlscy4KKwkqIHNyYy9yZWFkZXIuYyAocGFyc2VfdG9rZW5fZGVjbCwgZ2V0X3R5cGVfbmFtZSwgcGFyc2VfdHlwZV9kZWNsKQorCShwYXJzZV9hc3NvY19kZWNsLCBwYXJzZV90aG9uZ19kZWNsLCBnZXRfdHlwZSk6IFVzZSBgeHN0cmR1cCcKKwlpbnN0ZWFkIG9mIHN0cmxlbiArIHhtYWxsb2MgKyBzdHJjcHkuCisJKiBzcmMvc3ltdGFiLmMgKGNvcHlzKTogUmVtb3ZlLCB1c2UgeHN0cmR1cCBpbnN0ZWFkLgorCisyMDAwLTEwLTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2dyYW0uaCAoYXNzb2NpYXRpdml0eSk6IE5ldyBlbnVtIHR5cGUgd2hpY2ggcmVwbGFjZXMgdGhlCisJZm9ybWVyIENQUCBtYWNyb3MgYFJJR0hUX0FTU09DJywgYExFRlRfQVNTT0MnIGFuZCBgTk9OX0FTU09DJyB3aXRoCisJYHJpZ2h0X2Fzc29jJywgYGxlZnRfYXNzb2MnIGFuZCBgbm9uX2Fzc29jJy4KKwlBZGp1c3QgYWxsIGRlcGVuZGVuY2llcy4KKwkqIHNyYy9yZWFkZXIuYzogRm9ybWF0dGluZyBjaGFuZ2VzLgorCShMVFlQRVNUUik6IERvbid0IGRlZmluZSBpdCwgdXNlIGl0IGFzIGEgbGl0ZXJhbCBpbgorCWByZWFkZXJfb3V0cHV0X3l5bHNwJy4KKwkqIHNyYy9zeW10YWIuaCAoc3ltYm9sX2NsYXNzKTogTmV3IGVudW0gdHlwZSB3aGljaCByZXBsYWNlcyB0aGUKKwlmb3JtZXIgQ1BQIG1hY3JvcyBgU1VOS05PV04nLCBgU1RPS0VOIGFuZCBgU05URVJNJyB3aXRoCisJYHN1bmtub3duJywgYHN0b2tlbiBhbmQgYHNudGVybScuCisKKzIwMDAtMTAtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvZ2V0YXJncy5jIChmaXhlZF9vdXRmaWxlcyk6IFJlbmFtZSBhcy4uLgorCSh5YWNjZmxhZyk6IGZvciBjb25zaXN0ZW5jeSBhbmQgYWNjdXJhY3kuCisJQWRqdXN0IGRlcGVuZGVuY2llcy4KKworMjAwMC0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlVc2UgdGhlIG1vcmUgc3RhbmRhcmQgZmlsZXMgYHhhbGxvYy5oJyBhbmQgYHhtYWxsb2MuYycgaW5zdGVhZCBvZgorCUJpc29uJ3MgYGFsbG9jYXRlLmMnIGFuZCBgYWxsb2MuaCcuICBUaGlzIHBhdGNoIHdhcyBzdXJwcmlzaW5nbHkKKwlkaWZmaWN1bHQgYW5kIGludHJvZHVjZWQgYSBsb3Qgb2YgY29yZSBkdW1wLiAgSXQgdHVybnMgb3V0IHRoYXQKKwlCaXNvbiB1c2VkIGFuIGltcGxlbWVudGF0aW9uIG9mIGB4bWFsbG9jJyBiYXNlZCBvbiBgY2FsbG9jJywgYW5kCisJYXQgdmFyaW91cyBwbGFjZXMgaXQgZG9lcyBkZXBlbmQgdXBvbiB0aGUgaW5pdGlhbGl6YXRpb24gdG8gMC4gIEkKKwloYXZlIG5vdCB0cmllZCB0byBpc29sYXRlIHRoZSBwZXJ0aW5lbnQgcGxhY2VzLCBhbmQgYWxsIHRoZSBmb3JtZXIKKwljYWxscyB0byBCaXNvbidzIGB4bWFsbG9jJyBhcmUgbm93IHVzaW5nIGBYQ0FMTE9DJy4gIFNvbWVkYXksCisJc29tZW9uZSBzaG91bGQgYWRkcmVzcyB0aGlzIGlzc3VlLgorCisJKiBzcmMvYWxsb2NhdGUuYywgc3JjL2FsbG9jLmgsIG00L2Jpc29uLWRlY2wubTQ6IFJlbW92ZS4KKwkqIGxpYi94bWFsbG9jLmMsIGxpYi94YWxsb2MuaCwgbTQvbWFsbG9jLm00LCBtNC9yZWFsbG9jLm00OiBOZXcKKwlmaWxlcy4KKwlBZGp1c3QgZGVwZW5kZW5jaWVzLgorCSogc3JjL3dhcnNoYWxsLmg6IE5ldyBmaWxlLgorCVByb3BhZ2F0ZS4KKworMjAwMC0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlWYXJpb3VzIGFudGktYGV4dGVybiBpbiAqLmMnIGNoYW5nZXMuCisKKwkqIHNyYy9zeXN0ZW0uaDogSW5jbHVkZSBgYXNzZXJ0LmgnLgorCisyMDAwLTEwLTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3N0YXRlLmggKG5zdGF0ZXMsIGZpbmFsX3N0YXRlLCBmaXJzdF9zdGF0ZSwgZmlyc3Rfc2hpZnQpCisJKGZpcnN0X3JlZHVjdGlvbik6IE1vdmUgdGhlaXIgZXhwb3J0YXRpb24gZnJvbSBoZXJlLi4uCisJKiBzcmMvTFIwLmg6IHRvIGhlcmUuCisJQWRqdXN0IGRlcGVuZGVuY2llcy4KKwkqIHNyYy9nZXRhcmdzLmMgKHN0YXRpc3RpY3NmbGFnKTogTmV3IHZhcmlhYmxlLgorCUFkZCBzdXBwb3J0IGZvciBgLS1zdGF0aXN0aWNzJy4KKwlBZGp1c3QgZGVwZW5kZW5jaWVzLgorCisJUmVtb3ZlIGEgbG90IG9mIG5vdyB1c2VsZXNzIGBleHRlcm4nIHN0YXRlbWVudHMgaW4gbW9zdCBmaWxlcy4KKworMjAwMC0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9MUjAuaDogTmV3IGZpbGUuCisJUHJvcGFnYXRlIGl0cyB1c2UuCisKKzIwMDAtMTAtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcHJpbnQuaDogTmV3IGZpbGUuCisJUHJvcGFnYXRlIGl0cyB1c2UuCisJKiBzcmMvcHJpbnQuYzogRm9ybWF0dGluZyBhbmQgb3JkZXJpbmcgY2hhbmdlcy4KKwkodmVyYm9zZSwgdGVyc2UpOiBSZXBsYWNlIHdpdGguLi4KKwkocHJpbnRfcmVzdWx0cyk6IHRoaXMgbmV3IGZ1bmN0aW9uLgorCUFkanVzdCBkZXBlbmRlbmNpZXMuCisKKzIwMDAtMTAtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvY29uZmxpY3RzLmMgKGNvbmZsaWN0X3JlcG9ydCk6IE5ldyBmdW5jdGlvbi4KKwkoY29uZmxpY3RfbG9nLCB2ZXJib3NlX2NvbmZsaWN0X2xvZyk6IFJlcGxhY2Ugd2l0aC4uLgorCShwcmludF9jb25mbGljdHMpOiB0aGlzIGZ1bmN0aW9uLgorCUFkanVzdCBkZXBlbmRlbmNpZXMuCisJKiBzcmMvY29uZmxpY3RzLmg6IE5ldyBmaWxlLgorCVByb3BhZ2F0ZSBpdHMgaW5jbHVzaW9uLgorCisyMDAwLTEwLTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL251bGxhYmxlLmg6IE5ldyBmaWxlLgorCVByb3BhZ2F0ZSBpdHMgaW5jbHVzaW9uLgorCSogc3JjL251bGxhYmxlLmM6IEZvcm1hdHRpbmcgY2hhbmdlcy4KKworMjAwMC0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9yZWR1Y2UuaDogTmV3IGZpbGUuCisJUHJvcGFnYXRlIGl0cyBpbmNsdXNpb24uCisJKiBzcmMvcmVkdWNlLmM6IFRvcG9sb2dpY2FsIHNvcnQgYW5kIG90aGVyIGZvcm1hdHRpbmcgY2hhbmdlcy4KKwkoYm9vbCwgVFJVRSwgRkFMU0UpOiBNb3ZlIHRoZWlyIGRlZmluaXRpb24gdG8uLi4KKwkqIHNyYy9zeXN0ZW0uaDogaGVyZS4KKworMjAwMC0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9maWxlcy5jOiBGb3JtYXR0aW5nIGNoYW5nZXMuCisJKHRyeW9wZW4sIHRyeWNsb3NlLCBvcGVuZmlsZXMpOiBSZW5hbWUgYXMuLi4KKwkoeGZvcGVuLCB4ZmNsb3NlLCBvcGVuX2ZpbGVzKTogdGhpcy4KKwkoc3RyaW5nYXBwZW5kKTogc3RhdGljLgorCSogc3JjL2ZpbGVzLmg6IENvbXBsZXRlIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMuCisJUHJvcGFnYXRlIGl0cyB1c2UuCisKKzIwMDAtMTAtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmg6IE5ldyBmaWxlLgorCVByb3BhZ2F0ZSBpdHMgdXNlIGluc3RlYWQgb2YgdGVkaW91cyBsaXN0IG9mIGBleHRlcm4nIGFuZAorCXByb3RvdHlwZXMuCisJKiBzcmMvcmVhZGVyLmM6IEZvcm1hdHRpbmcgY2hhbmdlcywgdG9wb2xvZ2ljYWwgc29ydCwKKwlzL3JlZ2lzdGVyLy8uCisKKzIwMDAtMTAtMDIgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvbGV4Lmg6IFByb3RvdHlwZSBgbGV4LmMnIGV4cG9ydGVkIGZ1bmN0aW9ucy4KKwkqIHNyYy9yZWFkZXIuYzogQWRqdXN0LgorCSogc3JjL2xleC5jOiBGb3JtYXR0aW5nIGNoYW5nZXMuCisJKHNhZmVnZXRjKTogUmVuYW1lIGFzLi4uCisJKHhnZXRjKTogdGhpcy4KKworMjAwMC0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9sYWxyLmg6IE5ldyBmaWxlLgorCVByb3BhZ2F0ZSBpdHMgaW5jbHVzaW9uIGluc3RlYWQgb2YgcHJvdG90eXBlcyBhbmQgYGV4dGVybicuCisJKiBzcmMvbGFsci5jOiBGb3JtYXR0aW5nIGNoYW5nZXMsIHRvcG9sb2dpY2FsIHNvcnRpbmcgZXRjLgorCisyMDAwLTEwLTAyICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL291dHB1dC5jICh0b2tlbl9hY3Rpb25zKTogSW50cm9kdWNlIGEgdGVtcG9yYXJ5IGFycmF5LAorCVlZREVGQUNULCB0aGF0IG1ha2VzIGl0IHBvc3NpYmxlIGZvciB0aGlzIGZ1bmN0aW9uIHRvIHVzZQorCW91dHB1dF9zaG9ydF90YWJsZS4KKworMjAwMC0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlgdXNlcl90b2tudW1zJyBpcyBvdXRwdXQgYXMgYSBgc2hvcnRbXScgaW4gYG91dHB1dC5jJywgd2hpbGUgaXQgaXMKKwlkZWZpbmVkIGFzIGEgYGludFtdJyBpbiBgcmVhZGVyLmMnLiAgRm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlCisJb3RoZXIgb3V0cHV0IHRhYmxlcywgYHVzZXJfdG9rbnVtcycgaXMgbm93IGRlZmluZWQgYXMgYSB0YWJsZSBvZgorCXNob3J0cy4KKworCSogc3JjL3JlYWRlci5jICh1c2VyX3Rva251bXMpOiBCZSBhIHNob3J0IHRhYmxlIGluc3RlYWQgb2YgYW4gaW50CisJdGFibGUuCisJQWRqdXN0IGRlcGVuZGVuY2llcy4KKworCUZhY3RvciB0aGUgc2hvcnQgdGFibGUgb3V0cHV0cy4KKworCSogc3JjL291dHB1dC5jIChvdXRwdXRfc2hvcnRfdGFibGUpOiBOZXcgZnVuY3Rpb24uCisJKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9ncmFtLCBvdXRwdXRfc3Rvcywgb3V0cHV0X3J1bGVfZGF0YSkKKwkob3V0cHV0X2Jhc2UsIG91dHB1dF90YWJsZSwgb3V0cHV0X2NoZWNrKTogIFVzZSBpdC4KKworMjAwMC0xMC0wMiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0KTogVG9wb2xvZ2ljYWwgc29ydCBvZiB0aGUgZnVuY3Rpb25zLCBpbgorCW9yZGVyIHRvIGdldCByaWQgb2YgdGhlIGBzdGF0aWMnIHByb3RvdHlwZXMuCisJTm8gbG9uZ2VyIHVzZSBgcmVnaXN0ZXInLgorCSogc3JjL291dHB1dC5oOiBOZXcgZmlsZS4KKwlQcm9wYWdhdGUgaXRzIGluY2x1c2lvbiBpbiBmaWxlcyBleHBsaWNpdGx5IHByb3RvdHlwaW5nIGZ1bmN0aW9ucworCWZyb20gb3V0cHV0LmMuCisKKzIwMDAtMDktMjEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvYXRnZW5lcmFsLm00OiBVcGRhdGUgZnJvbSBBdXRvY29uZi4KKworMjAwMC0wOS0yMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9jbG9zdXJlLmg6IE5ldyBmaWxlLgorCSogc3JjL2Nsb3N1cmUuYzogRm9ybWF0dGluZyBjaGFuZ2VzLCB0b3BvbG9naWNhbCBzb3J0IG92ZXIgdGhlCisJZnVuY3Rpb25zLCB1c2Ugb2YgY2xvc3VyZS5oLgorCShpbml0aWFsaXplX2Nsb3N1cmUsIGZpbmFsaXplX2Nsb3N1cmUpOiAgUmVuYW1lIGFzLi4uCisJKG5ld19jbG9zdXJlLCBmcmVlX2Nsb3N1cmUpOiB0aGVzZS4gIEFkanVzdCBkZXBlbmRlbmNpZXMuCisJKiBzcmMvTFIwLmM6IEZvcm1hdHRpbmcgY2hhbmdlcywgdG9wb2xvZ2ljYWwgc29ydCwgdXNlIG9mCisJY2xvdHVyZS5oLgorCShpbml0aWFsaXplX3N0YXRlcyk6IFJlbmFtZSBhcy4uLgorCShuZXdfc3RhdGVzKTogdGhpcy4KKwkqIHNyYy9NYWtlZmlsZS5hbSAobm9pbnN0X0hFQURFUlMpOiBBZGp1c3QuCisKKzIwMDAtMDktMjAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvYWNjb25maWcuaDogRG9uJ3QgcHJvdGVjdCBjb25maWcuaCBhZ2FpbnN0IG11bHRpcGxlCisJaW5jbHVzaW9uLgorCURvbid0IGRlZmluZSBQQVJBTVMuCisJKiBzcmMvc3lzdGVtLmg6IERlZmluZSBQQVJBTVMuCisJUmVtb3ZlIHNvbWUgb2YgdGhlIGFkLWhvYyBDUFAgbWFnaWMgZm9yIERPUywgVk1TIGV0Yy46IHRoaXMgaXMgdGhlCisJcHVycG9zZSBvZiBjb25maWcuaC4gIHN5c3RlbS5oIG11c3Qgbm90IHRyeSB0byBmaXggd3JvbmcKKwlkZWZpbml0aW9ucyBpbiBjb25maWcuaC4KKworMjAwMC0wOS0yMCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9kZXJpdmVzLmg6IE5ldyBmaWxlLgorCSogc3JjL21haW4uYywgc3JjL2Rlcml2ZXMuaDogVXNlIGl0LgorCUZvcm1hdHRpbmcgY2hhbmdlcy4KKwkqIHNyYy9NYWtlZmlsZS5hbSAobm9pbnN0X0hFQURFUlMpOiBBZGp1c3QuCisKKzIwMDAtMDktMjAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiB0ZXN0cy9hdGdlbmVyYWwubTQ6IFVwZGF0ZSBmcm9tIEF1dG9jb25mLgorCSogdGVzdHMvY2FsYy5tNCAoX0FUX0RBVEFfQ0FMQ19ZLCBBVF9EQVRBX0NBTENfWSwgX0FUX0NIRUNLX0NBTEMpCisJKEFUX0NIRUNLX0NBTEMpOiBOZXcgbWFjcm9zLgorCVVzZSB0aGVzZSBtYWNyb3MgdG8gdGVzdCBiaXNvbiB3aXRoIG9wdGlvbnMgYCcsIGAtLXJhdycsCisJYC0tZGVidWcnLCBgLS15YWNjJywgYC0teWFjYyAtLWRlYnVnJy4KKworMjAwMC0wOS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9vdXRwdXQuYzogRm9ybWF0dGluZyBjaGFuZ2VzLgorCSogc3JjL21hY2hpbmUuaDogUmVtb3ZlLCBsZWF2aW5nIGl0cyBjb250ZW50cyBpbi4uLgorCSogc3JjL3N5c3RlbS5oOiBoZXJlLgorCUluY2x1ZGUgc3RkaW8uaC4KKwlBZGp1c3QgYWxsIGRlcGVuZGVuY2llcyBvbiBzdGRpby5oIGFuZCBtYWNoaW5lLmguCisJKiBzcmMvZ2V0YXJncy5oOiBOZXcgZmlsZS4KKwlMZXQgYWxsIGBleHRlcm4nIGRlY2xhcmF0aW9ucyBhYm91dCBnZXRhcmdzLmMgYmUgcmVwbGFjZWQgd2l0aAorCWluY2x1c2lvbiBvZiBgZ2V0YXJncy5oJy4KKwkqIHNyYy9NYWtlZmlsZS5hbSAobm9pbnN0X0hFQURFUlMpOiBBZGp1c3QuCisKKwkqIHRlc3RzL2NhbGMubTQgKHl5aW4pOiBCZSBpbml0aWFsaXplZCBpbiBtYWluLCBub3Qgb24gdGhlIGdsb2JhbAorCXNjb3BlLgorCSh5eWVycm9yKTogUmV0dXJucyB2b2lkLCBub3QgaW50LgorCSogZG9jL2Jpc29uLnRleGluZm86IEZvcm1hdHRpbmcgY2hhbmdlcy4KKworMjAwMC0wOS0xOSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHRlc3RzL2NhbGMubTQgKGNhbGMueSk6IERvIG5vdCBhc3NpZ24gdG8gc3RkaW4sIGFzIGl0J3Mgbm90CisJcG9ydGFibGUuCisKKzIwMDAtMDktMTggIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBjb25maWd1cmUuaW46IEFwcGVuZCBXQVJOSU5HX0NGTEFHUyB0byBDRkxBR1MuCisJKiBzcmMvTWFrZWZpbGUuYW0gKElOQ0xVREVTKTogRG9uJ3QuCisJQmUgcmVhZHkgdG8gZmV0Y2ggaGVhZGVycyBpbiBsaWIvLgorCisyMDAwLTA5LTE4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogZG9jL2Jpc29uLnRleGluZm86IFVwZGF0ZSB0aGUgY29weXJpZ2h0LgorCUFOU0lmeSBhbmQgR05VaWZ5IHRoZSBleGFtcGxlcy4KKwlSZW1vdmUgdGhlIG9sZCBtZW51LgorCisyMDAwLTA5LTE4ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCUZpcnN0IHNldCBvZiB0ZXN0czogdXNlIHRoZSBgY2FsYycgZXhhbXBsZSBmcm9tIHRoZSBkb2N1bWVudGF0aW9uLgorCisJKiBzcmMvYmlzb24uczEgKHl5cGFyc2UpOiBDb25kaXRpb24gdGhlIGNvZGUgdXNpbmcgYHl5dG5hbWUnIHdoaWNoCisJaXMgZGVmaW5lZCBvbmx5IHdoZW4gWVlERUJVRyBpcy4KKwkqIG00L2F0Y29uZmlnLm00IChBVF9DT05GSUcpOiBBZGp1c3QgdG8gQXV0b2NvbmYgMi4xMy4KKwkqIHNyYy9maWxlcy5jICh0cnlvcGVuLCB0cnljbG9zZSk6IEZvcm1hdHRpbmcgY2hhbmdlcy4KKwlNb3ZlIHRvIHRoZSB0b3AgYW5kIGJlIHN0YXRpYy4KKwkqIHNyYy9yZWFkZXIuYyAocmVhZF9zaWduZWRfaW50ZWdlcik6IExpa2V3aXNlLgorCSogdGVzdHMvY2FsYy5tNDogTmV3IGZpbGUuCisJKiBNYWtlZmlsZS5hbSwgc3VpdGUubTQ6IEFkanVzdC4KKwkqIG00L2F0Y29uZmlnLm00OiBTZXQgQklTT05fU0lNUExFIGFuZCBCSVNPTl9IQUlSWS4KKworMjAwMC0wOS0xOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlBZGQgc3VwcG9ydCBmb3IgYW4gQXV0b3Rlc3QgdGVzdCBzdWl0ZSBmb3IgQmlzb24uCisKKwkqIG00L200Lm00LCBtNC9hdGNvbmZpZy5tNDogTmV3IGZpbGVzLgorCSogbTQvTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGp1c3QuCisJKiB0ZXN0cy9zdWl0ZS5tNCwgdGVzdHMvTWFrZWZpbGUuYW0sIHRlc3RzL2F0Z2VuZXJhbC5tNDogTmV3CisJZmlsZXMuCisJKiBzcmMvZ2V0YXJncy5jOiBEaXNwbGF5IGEgbW9yZSBzdGFuZGFyZCAtLXZlcnNpb24gbWVzc2FnZS4KKwkqIHNyYy9yZWFkZXIuYyAocmVhZGVyKTogRm9ybWF0dGluZyBjaGFuZ2VzLgorCU5vIGxvbmdlciBkZXBlbmQgdXBvbiBWRVJTSU9OX1NUUklORy4KKwkqIGNvbmZpZ3VyZS5pbjogTm8gbG9uZ2VyIHVzZSBgZG5sJy4KKwlTZXQgdXAgdGhlIHRlc3Qgc3VpdGUgYW5kIHRoZSBuZXcgZGlyZWN0b3J5IGB0ZXN0cy8uCisJKFZFUlNJT05fU1RSSU5HKTogUmVtb3ZlLgorCisyMDAwLTA0LTE0ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3JlYWRlci5jIChjb3B5X2NvbW1lbnQyKTogTmV3IGZ1bmN0aW9uLCBzYW1lIGFzIGZvcm1lcgorCWBjb3B5X2NvbW1lbnQnLCBidXQgb3V0cHV0cyBpbnRvIHR3byBGSUxFICouCisJKGNvcHlfY29tbWVudCk6IFVzZSBpdC4KKwkocGFyc2VfdW5pb25fZGVjbCk6IFVzZSBpdC4KKwkoZ2V0X3R5cGUsIHBhcnNlX3N0YXJ0X2RlY2wpOiBVc2UgdGhlIHNhbWUgYGludmFsaWQnIG1lc3NhZ2UuCisJKHBhcnNlX3N0YXJ0X2RlY2wsIHBhcnNlX3VuaW9uX2RlY2wpOiBVc2UgdGhlIHNhbWUgYG11bHRpcGxlJworCW1lc3NhZ2UuCisJKHBhcnNlX3VuaW9uX2RlY2wsIGNvcHlfZ3VhcmQsIGNvcHlfYWN0aW9uKTogVXNlIHRoZSBzYW1lCisJYHVubWF0Y2hlZCcgbWVzc2FnZS4KKwkqIG00L01ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIGB3YXJuaW5nLm00Jy4KKworMjAwMC0wMy0zMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9maWxlcy5jICh0cnlvcGVuLCB0cnljbG9zZSk6IE1vdmUgdG8gdGhlIHRvcC4KKwlCZSBzdGF0aWMuCisKKzIwMDAtMDMtMzEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvbWFpbi5jIChtYWluKTogRG9uJ3QgY2FsbCBgZG9uZScsIGV4aXQgZG9lcyBpdC4KKworMjAwMC0wMy0zMSAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGFsbG9jYXRlLmM6IHMvcmV0dXJuIChmb28pL3JldHVybiBmb28vLgorCSogbGFsci5jOiBMaWtld2lzZS4KKwkqIExSMC5jOiBMaWtld2lzZS4KKwkqIG91dHB1dC5jOiBMaWtld2lzZS4KKwkqIHJlYWRlci5jOiBMaWtld2lzZS4KKwkqIHN5bXRhYi5jOiBMaWtld2lzZS4KKwkqIHZtc2dldGFyZ3MuYzogTGlrZXdpc2UuCisKKzIwMDAtMDMtMzEgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJQ2xlYW4gdXAgdGhlIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbnMuCisKKwkqIHNyYy9yZXBvcnQuYzogTmV3IGZpbGUuCisJKiBzcmMvcmVwb3J0Lmg6IExpa2V3aXNlLgorCSogc3JjL01ha2VmaWxlLmFtOiBBZGp1c3QuCisJKiBtNC9lcnJvci5tNDogTmV3IGZpbGUuCisJKiBtNC9NYWtlZmlsZS5hbTogQWRqdXN0LgorCSogY29uZmlndXJlLmluIChqbV9QUkVSRVFfRVJST1IpOiBDYWxsIGl0LgorCSogc3JjL21haW4uYyAoaW50X3RvX3N0cmluZywgYmFubmVyLCBmYXRhbF9iYW5uZXIsIHdhcm5fYmFubmVyKToKKwlSZW1vdmUuCisJKGZhdGFsLCBmYXRhbHMpOiBSZW1vdmUuICBBbGwgY2FsbGVycyB1c2UgY29tcGxhaW4uYzo6ZmF0YWwuCisJKHdhcm4sIHdhcm5pLCB3YXJucywgd2FybnNzLCB3YXJuc3MpOiBSZW1vdmUuICBBbGwgY2FsbGVycyB1c2UKKwljb21wbGFpbi5jOjpjb21wbGFpbi4KKwkodG9vbWFueSk6IFJlbW92ZSwgdXNlIGZhdGFsIGluc3RlYWQuCisJKiBzcmMvZmlsZXMuYyAoZG9uZSk6IE5vIGFyZ3VtZW50LCB1c2UgY29tcGxhaW5fbWVzc2FnZV9jb3VudC4KKwkqIHNyYy9tYWluLmMgKG1haW4pOiBSZWdpc3RlciBgZG9uZScgdG8gYGF0ZXhpdCcuCisKKwkqIHNyYy9nZXRhcmdzLmMgKHVzYWdlKTogTW9yZSBgZnB1dHMnLCBsZXNzIGBmcHJpbnRmJy4KKworMjAwMC0wMy0yOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIGxpYi86IE5ldyBkaXJlY3RvcnkuCisJKiBNYWtlZmlsZS5hbSAoU1VCRElSUyk6IEFkanVzdC4KKwkqIGNvbmZpZ3VyZS5pbjogQWRqdXN0LgorCShMSUJPQkpTKTogQWx0aG91Z2ggbm90IHVzZWQgeWV0LCBBQ19TVUJTVCBpdCwgb3RoZXJ3aXNlIGl0J3MKKwl1c2VsZXNzLgorCSogc3JjL2FsbG9jYS5jOiBNb3ZlZCB0byBsaWIvLgorCSogc3JjL2dldG9wdC5jOiBMaWtld2lzZS4KKwkqIHNyYy9nZXRvcHQxLmM6IExpa2V3aXNlLgorCSogc3JjL2dldG9wdC5oOiBMaWtld2lzZS4KKwkqIHNyYy9hbnNpMmtuci5jOiBMaWtld2lzZS4KKwkqIHNyYy9hbnNpMmtuci4xOiBMaWtld2lzZS4KKwkqIHNyYy9NYWtlZmlsZS5hbTogQWRqdXN0LgorCSogbGliL01ha2VmaWxlLmFtOiBOZXcgZmlsZS4KKworMjAwMC0wMy0yOCAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9nZXRhcmdzLmMgKHVzYWdlKTogUmVmcmVzaCB0aGUgaGVscCBtZXNzYWdlLgorCisyMDAwLTAzLTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2dldG9wdDEuYzogVXBkYXRlZCBmcm9tIHRleHR1dGlscyAyLjBlCisJKiBzcmMvZ2V0b3B0LmM6IExpa2V3aXNlLgorCSogc3JjL2dldG9wdC5oOiBMaWtld2lzZS4KKworMjAwMC0wMy0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9NYWtlZmlsZS5hbSAoYmlzb24uc2ltcGxlKTogRml4IHRoZSBhd2sgcHJvZ3JhbTogcXVvdGUgb25seQorCXRoZSBmaWxlIG5hbWUsIG5vdCB0aGUgd2hvbGUgYCNsaW5lIExJTkUgRklMRScuCisKKzIwMDAtMDMtMTcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJT24gc3ludGF4IGVycm9ycywgcmVwb3J0IHRoZSB0b2tlbiBvbiB3aGljaCB3ZSBjaG9rZWQuCisKKwkqIHNyYy9iaXNvbi5zMSAoeXlwYXJzZSk6IEluIHRoZSBsYWJlbCB5eWVycmxhYiwgd2hlbgorCVlZRVJST1JfVkVSQk9TRSwgYWRkIHl5Y2hhciBpbiBtc2cuCisKKzIwMDAtMDMtMTcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKGNvcHlfYXQpOiBOZXcgZnVuY3Rpb24uCisJKGNvcHlfZ3VhcmQpOiBVc2UgaXQuCisJKGNvcHlfYWN0aW9uKTogVXNlIGl0LgorCisyMDAwLTAzLTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCUJlIGtpbmQgdG8gdHJhbnNsYXRvcnMsIHNhdmUgc29tZSB1c2VsZXNzIHRyYW5zbGF0aW9ucy4KKworCSogc3JjL21haW4uYyAoYmFubmVyKTogTmV3IGZ1bmN0aW9uLgorCShmYXRhbF9iYW5uZXIpOiBVc2UgaXQuCisJKHdhcm5fYmFubmVyKTogVXNlIGl0LgorCisyMDAwLTAzLTE3ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL3JlYWRlci5jIChjb3B5X2RlZmluaXRpb24pOiBVc2UgY29weV9zdHJpbmcgYW5kCisJY29weV9jb21tZW50LiAgUmVtb3ZlZCBub3cgdW51c2VkIGBtYXRjaCcsIGBlbmRlZCcsCisJYGNwbHVzX2NvbW1lbnQnLgorCShjb3B5X2NvbW1lbnQsIGNvcHlfc3RyaW5nKTogTW92ZWQsIHRvIGJlIHZpc2libGUgZnJvbQorCWNvcHlfZGVmaW5pdGlvbi4KKworMjAwMC0wMy0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9yZWFkZXIuYyAoY29weV9zdHJpbmcpOiBEZWNsYXJlIGBzdGF0aWMgaW5saW5lJy4gIE5vCisJcHJvYmxlbXMgd2l0aCBpbmxpbmUsIHNpbmNlIGl0IGlzIGNoZWNrZWQgYnkgY29uZmlndXJlLgorCShjb3B5X2NvbW1lbnQpOiBMaWtld2lzZS4KKworMjAwMC0wMy0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9yZWFkZXIuYyAocGFja3N5bWJvbHMpOiBGb3JtYXR0aW5nIGNoYW5nZXMuCisKKzIwMDAtMDMtMTcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKGNvcHlfY29tbWVudCk6IE5ldyBmdW5jdGlvbiwgZmFjdG9yZWQgb3V0IGZyb206CisJKGNvcHlfYWN0aW9uKTogVXNlIGl0LiAgUmVtb3ZlZCBub3cgdW51c2VkIGBtYXRjaCcsIGBlbmRlZCcsCisJYGNwbHVzX2NvbW1lbnQnLgorCShjb3B5X2d1YXJkKTogTGlrZXdpc2UuCisKKzIwMDAtMDMtMTcgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvcmVhZGVyLmMgKGNvcHlfc3RyaW5nKTogTmV3IGZ1bmN0aW9uLCBmYWN0b3JlZCBvdXQgZnJvbToKKwkoY29weV9hY3Rpb24pOiBVc2UgaXQuCisJKGNvcHlfZ3VhcmQpOiBMaWtld2lzZS4KKworMjAwMC0wMy0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwlDaGFuZ2UgdGhlIGhhbmRsaW5nIG9mIEBzIHNvIHRoYXQgdGhleSBiZWhhdmUgZXhhY3RseSBsaWtlICRzLgorCVRoZXJlIGlzIG5vdyBhIHBzZXVkbyB2YXJpYWJsZSBAJCAocmVhZGJsZSBhbmQgd3JpdGFibGUpLCBsb2NhdGlvbgorCW9mIHRoZSBsaHMgb2YgdGhlIHJ1bGUgKGJ5IGRlZmF1bHQgcmFuZ2luZyBmcm9tIHRoZSBsb2NhdGlvbiBvZgorCXRoZSBmaXJzdCBzeW1ib2wgb2YgdGhlIHJocywgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBsYXN0IHN5bWJvbCwKKwlvciwgaWYgdGhlIHJocyBpcyBlbXB0eSwgWVlMTE9DKS4KKworCSogc3JjL2Jpc29uLnMxIFtZWUxTUF9ORUVERURdICh5eWxvYyk6IE5ldyB2YXJpYWJsZSwgdHdpbiBvZgorCXl5dmFsLgorCSh5eXBhcnNlKTogV2hlbiBwcm92aWRpbmcgYSBkZWZhdWx0IHNlbWFudGljIGFjdGlvbiwgcHJvdmlkZSBhCisJZGVmYXVsdCBsb2NhdGlvbiBhY3Rpb24uCisJKGFmdGVyIHRoZSAkKTogTm8gbG9uZ2VyIGNoYW5nZSBgKllZTFNQJywganVzdCBzdGFjayBZWUxPQyB0aGUKKwlzYW1lIHdheSB5b3Ugc3RhY2sgWVlWQUwuCisJKiBzcmMvcmVhZGVyLmMgKHJlYWRfZGVjbGFyYXRpb25zKTogVXNlIHdhcm5zLgorCShjb3B5X2d1YXJkLCBjYXNlICdAJyk6IEFsc28gcmVjb2duaXplIGBAJCcsIGV4cGFuZGVkIGFzIGBZWUxPQycuCisJKGNvcHlfYWN0aW9uLCBjYXNlICdAJyk6IExpa2V3aXNlLgorCVVzZSBhIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UsIHRvIHNhdmUgdXNlbGVzcyB3b3JrIGZyb20KKwl0cmFuc2xhdG9ycy4KKworMjAwMC0wMy0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9iaXNvbi5zMTogRm9ybWF0dGluZyBhbmQgY29zbWV0aWNzIGNoYW5nZXMuCisJKiBzcmMvcmVhZGVyLmM6IExpa2V3aXNlLgorCVVwZGF0ZSB0aGUgQ29weXJpZ2h0IG5vdGljZS4KKworMjAwMC0wMy0xNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9iaXNvbi5zMSAoI2xpbmUpOiBBbGwgc2V0IHRvIGAjbGluZScgb25seSwgc2luY2UgdGhlCisJTWFrZWZpbGUgbm93IGhhbmRsZXMgdGhlbS4KKworMjAwMC0wMy0xNiAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3J1bGVfZGF0YSk6IE91dHB1dCB0aGUgZG9jdW1lbnRhdGlvbiBvZgorCXNvbWUgb2YgdGhlIHRhYmxlcy4KKwkoQ29weXJpZ2h0IG5vdGljZSk6IFVwZGF0ZS4KKwlGb3JtYXR0aW5nIGNoYW5nZXMuCisKKzIwMDAtMDMtMTYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvYmlzb24uczEgWyFZWURFQlVHXTogRGVmaW5lIHl5ZGVidWcgdG8gMC4gIFRoaXMgYWxsb3dzIHRvCisJcmVtb3ZlIG1vc3QgYCNpZiBZWURFQlVHICE9IDAnLCBzaW5jZSBgaWYgKHl5ZGVidWcpJyBpcyBlbm91Z2guCisJT25lIGAjaWYgWVlERUJVRycgcmVtYWlucywgc2luY2UgaXQgdXNlcyB2YXJpYWJsZXMgd2hpY2ggYXJlCisJZGVmaW5lZCBvbmx5IGlmIGBZWURFQlVHICE9IDAnLgorCisyMDAwLTAzLTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2Jpc29uLnMxICh5eXBhcnNlKTogUmVvcmdhbml6ZSB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIHN0YWNrcworCWFuZCByZWxhdGVkIHZhcmlhYmxlcyBzbyB0aGF0IHRoZSBzaW1pbGFyaXRpZXMgYXJlIGhpZ2hsaWdodGVkLgorCisyMDAwLTAzLTE2ICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KKworCSogc3JjL2Jpc29uLnMxOiBQcm9wZXJseSBpbmRlbnQgQ1BQIGRpcmVjdGl2ZXMuCisKKzIwMDAtMDMtMTYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvYmlzb24uczE6IFByb3Blcmx5IGluZGVudCB0aGUgYGFsbG9jYScgQ1BQIHNlY3Rpb24uCisKKzIwMDAtMDMtMTYgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJRG8gbm90IGhhcmQgY29kZSB2YWx1ZXMgb2YgZGlyZWN0b3JpZXMgaW4gYGNvbmZpZ3VyZS5pbicuCisJVXBkYXRlIHRoZSBgY29uZmlndXJlJyB0b29sIGNoYWluLgorCisJKiBjb25maWd1cmUuaW4gKFhQRklMRSwgWFBGSUxFMSwgTE9DQUxFRElSKTogUmVtb3ZlLCBoYW5kbGVkIGJ5CisJc3JjL21ha2VmaWxlLmFtLgorCShWRVJTSU9OX1NUUklORyk6IFVzZSB0aGUgdGhpcmQgYXJnIG9mIEFDX0RFRklORV9VTlFVT1RFRC4KKwkoQUNfT1VUUFVUKTogQWRkIG00L01ha2VmaWxlLgorCUJ1bXAgdG8gYmlzb24gMS4yOGEsIDEuMjkgaGFzIG5ldmVyIGJlZW4gcmVsZWFzZWQuCisJKiBhY2NvbmZpZy5oIChYUEZJTEUsIFhQRklMRTEsIExPQ0FMRURJUik6IFJlbW92ZSwgc2luY2UgdGhleSBhcmUKKwloYW5kbGVkIHZpYSBzcmMvTWFrZWZpbGUuYW0uCisJKFZFUlNJT05fU1RSSU5HLCBQUk9UT1RZUEVTLCBFTkFCTEVfTkxTLCBIQVZFX0NBVEdFVFMsCisJSEFWRV9HRVRURVhULCBIQVZFX0xDX01FU1NBR0VTLCBIQVZFX1NUUENQWSk6IFJlbW92ZSwgaGFuZGxlZCBieQorCWF1dG9oZWFkZXIuCisJKiBNYWtlZmlsZS5hbSAoU1VCRElSUyk6IEFkZCBtNC4KKwkoQUNMT0NBTF9BTV9GTEFHUyk6IE5ldyB2YXJpYWJsZS4KKwkoQVVUT01BS0VfT1BUSU9OUyk6IEFkZCBjaGVjay1uZXdzLgorCSogc3JjL01ha2VmaWxlLmFtIChiaXNvbi5zaW1wbGUpOiBVc2UgYXdrIHRvIHJlcGxhY2UgI2xpbmUgbGluZXMgd2l0aAorCXRoZSBwcm9wZXIgbGluZSBudW1iZXIgYW5kIGZpbGUgbmFtZS4KKwkoREVGUyk6IFByb3BhZ2F0ZSB0aGUgbG9jYXRpb24gb2YgYmlzb24gbGlicmFyeSBmaWxlcyBhbmQgb2YgdGhlCisJbG9jYWxlIGZpbGVzLgorCShJTkNMVURFUyk6IEFkZGVkIGAtSSAuLicgc28gdGhhdCBvbmUgY2FuIGNvbXBpbGUgd2l0aCBzcmNkaXIgIT0KKwlidWlsZGRpci4KKwkqIGFjaW5jbHVkZS5tNDogUmVtb3ZlLCByZXBsYWNlZCBieSB0aGUgZGlyZWN0b3J5IG00LgorCSogbTQvTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBOZXcgdmFyaWFibGUuCisJKiBtNC9nZXR0ZXh0Lm00OiBOZXcgZmlsZSwgZnJvbSB0aGUgZmlsZXV0aWxzLgorCSogbTQvbGNtZXNzYWdlLm00OiBMaWtld2lzZQorCSogbTQvcHJvZ3Rlc3QubTQ6IExpa2V3aXNlLgorCSogbTQvYmlzb24tZGVjbC5tNDogTmV3IGZpbGUsIGV4dHJhY3RlZCBmcm9tIGZvcm1lciBhY2luY2x1ZGUubTQuCisKKzIwMDAtMDMtMTAgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgorCisJKiBzcmMvY2xvc3VyZS5jOgorCUZvcm1hdHRpbmcgY2hhbmdlcyBvZiB2YXJpb3VzIGNvbW1lbnRzLgorCVJlc3BlY3QgdGhlIEdOVSBjb2Rpbmcgc3RhbmRhcmRzIGF0IHZhcmlvdXMgcGxhY2VzLgorCURvbid0IHVzZSBgXygpJyB3aGVuIG5vIHRyYW5zbGF0aW9uIGlzIG5lZWRlZC4KKworMTk5OS0xMi0xMyAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KKworCSogc3JjL2ZpbGVzLmM6CisJT1MvMiBob25vcnMgVE1QRElSIGVudmlyb25tZW50IHZhcmlhYmxlLgorCisxOTk5LTEyLTEzICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgorCisJKiBkb2MvYmlzb24udGV4aW5mbzogVHdlYWtlZCBzcGVsbGluZyBhbmQgZ3JhbW1hci4KKwlVcGRhdGVkIElTQk4uCisJUmVtb3ZlZCByZWZlcmVuY2UgdG8gcHJpY2Ugb2YgcHJpbnRlZCBjb3B5LgorCU1lbnRpb24gQklTT05fU0lNUExFIGFuZCBCSVNPTl9IQUlSWS4KKworMTk5OS0xMi0xMyAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KKworCSogY29uZmlndXJlLmluLCBORVdTOgorCUJpc29uIDEuMjkgcmVsZWFzZWQuCisKKzE5OTktMTAtMjcgIEplc3NlIFRoaWxvICA8anRoaWxvQGdudS5vcmc+CisKKwkqIGRvYy8uY3ZzaWdub3JlLCBkb2MvTWFrZWZpbGUuYW0sIGRvYy9yZWZjYXJkLnRleDoKKwlBZGRlZCByZWZlcmVuY2UgY2FyZC4KKworMTk5OS0wNy0yNiAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KKworCSogcG8vcnUucG86IEFkZGVkIFJ1c3NpYW4gdHJhbnNsYXRpb24uCisKKzE5OTktMDctMjYgIEplc3NlIFRoaWxvICA8anRoaWxvQGdudS5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjogQWRkZWQgUnVzc2lhbiB0cmFuc2xhdGlvbi4KKworMTk5OS0wNy0wNiAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KKworCSogY29uZmlndXJlLmluLCBORVdTLCBSRUFETUU6CisJUmVsZWFzZWQgdmVyc2lvbiAxLjI4LgorCisxOTk5LTA2LTE0ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgorCisJKiBzcmMvc3lzdGVtLmg6CisJU3F1YXNoZWQgcmVkZWZpbml0aW9uIHdhcm5pbmcgb24gc29tZSBzeXN0ZW1zLgorCisJKiBzcmMvZ2V0YXJncy5jLCBzcmMvTWFrZWZpbGUuYW0sIHNyYy9yZWFkZXIuYywgc3JjL3ZlcnNpb24uYzoKKwlIYXZlIGNvbmZpZ3VyZSBidWlsZCB2ZXJzaW9uIHN0cmluZyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQU5TSSBzdHJpbmcKKwljb25jYXRlbnRhdGlvbi4KKworMTk5OS0wNi0xNCAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KKworCSogcG8vUE9URklMRVMuaW46IEdvdCByaWQgb2YgdmVyc2lvbi5jLgorCisxOTk5LTA2LTE0ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgorCisJKiBhY2NvbmZpZy5oLCBjb25maWd1cmUuaW46CisJSGF2ZSBjb25maWd1cmUgYnVpbGQgdmVyc2lvbiBzdHJpbmcgaW5zdGVhZCBvZiByZWx5aW5nIG9uIEFOU0kgc3RyaW5nCisJY29uY2F0ZW50YXRpb24uCisKKzE5OTktMDYtMDggIEplc3NlIFRoaWxvICA8anRoaWxvQGdudS5vcmc+CisKKwkqIGRvYy9iaXNvbi4xOgorCURyb3BwZWQgbWVudGlvbiBvZiBgKycgZm9yIGxvbmctbmFtZWQgb3B0aW9ucy4KKworMTk5OS0wNS0zMCAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KKworCSogc3JjL2ZpbGVzLmM6IEFkZGVkIDx1bmlzdGQuaD4gZm9yIHVubGluaygpLgorCisJKiBzcmMvTWFrZWZpbGUuYW0sIHNyYy9zeXN0ZW0uaDoKKwlJMThuIGZpeGVzLgorCisxOTk5LTA1LTMwICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgorCisJKiBSRUFETUU6IEFkZGVkIGEgRkFRIGxpc3QuCisKKwkqIGNvbmZpZ3VyZS5pbiwgYWNjb25maWcuaDoKKwlJMThuIGZpeGVzLgorCisxOTk5LTA1LTMwICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgorCisJKiBkb2MvRkFRLCBkb2MvTWFrZWZpbGUuYW06CisJQWRkZWQgYSBGQVEgbGlzdC4KKworMTk5OS0wNS0xOSAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KKworCSogc3JjL2FsbG9jLmgsIHNyYy9zeW10YWIuaCwgc3JjL3ZlcnNpb24uYzoKKwlQcm90ZWN0ZWQgaW5jbHVzaW9uIG9mICJjb25maWcuaCIgd2l0aCBIQVZFX0NPTkZJR19ILgorCisxOTk5LTA0LTE4ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgorCisJKiBzcmMvLmN2c2lnbm9yZSwgc3JjL01ha2VmaWxlLmFtOgorCVJlb3JnYW5pemVkOiBzb3VyY2VzIGluIGBzcmMnLCBkb2N1bWVudGF0aW9uIGluIGBkb2MnLgorCisJKiBzcmMvbGV4LmMgKGxpdGVyYWxjaGFyKToKKwlmaXhlZCB0aGUgY29kZSBmb3IgZXNjYXBpbmcgZG91YmxlIHF1b3RlcyAodGhhbmtzCisJSm9uYXRoYW4gQ3ppc255LikKKworMTk5OS0wNC0xOCAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KKworCSogcG8vZGUucG8sIHBvL2VzLnBvLCBwby9mci5wbywgcG8vbmwucG8sIHBvL1BPVEZJTEVTLmluOgorCUFkanVzdGVkIHBhdGhzIHRvIHJlZmxlY3QgZGlyZWN0b3J5IHJlb3JnYW5pemF0aW9uLgorCisxOTk5LTA0LTE4ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgorCisJKiBkb2MvLmN2c2lnbm9yZSwgZG9jL01ha2VmaWxlLmFtOgorCVJlb3JnYW5pemVkOiBzb3VyY2VzIGluIGBzcmMnLCBkb2N1bWVudGF0aW9uIGluIGBkb2MnLgorCisxOTk5LTA0LTE4ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgorCisJKiBjb25maWd1cmUuaW46CisJVXBkYXRlZCBBQ19JTklUIGZpbGUgdG8gcmVmbGVjdCBkaXJlY3RvcnkgcmVvcmdhbml6YXRpb24uCisKKwkqIGNvbmZpZ3VyZS5pbiwgLmN2c2lnbm9yZSwgTWFrZWZpbGUuYW0sIFBPVEZJTEVTLmluOgorCVJlb3JnYW5pemVkOiBzb3VyY2VzIGluIGBzcmMnLCBkb2N1bWVudGF0aW9uIGluIGBkb2MnLgorCisxOTk5LTA0LTEzICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgorCisJKiBzcmMvYWxsb2NhdGUuYzoKKwlEb24ndCBkZWNsYXJlIGNhbGxvYygpIGFuZCByZWFsbG9jKCkgaWYgbm90IG5lY2Vzc2FyeS4KKworMTk5OS0wNC0xMyAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KKworCSogY29uZmlndXJlLmluLCBhY2NvbmZpZy5oLCBhY2luY2x1ZGUubTQ6CisJRG9uJ3QgZGVjbGFyZSBjYWxsb2MoKSBhbmQgcmVhbGxvYygpIGlmIG5vdCBuZWNlc3NhcnkuCisKKzE5OTktMDMtMjMgIEplc3NlIFRoaWxvICA8anRoaWxvQGdudS5vcmc+CisKKwkqIHBvLy5jdnNpZ25vcmU6IEFkZGVkIGkxOG4gc3VwcG9ydC4KKworMTk5OS0wMy0yMyAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KKworCSogYWNjb25maWcuaCwgY29uZmlndXJlLmluLCBNYWtlZmlsZS5hbToKKwlBZGRlZCBpMThuIHN1cHBvcnQuCisKKzE5OTktMDMtMjIgIEplc3NlIFRoaWxvICA8anRoaWxvQGdudS5vcmc+CisKKwkqIHNyYy9iaXNvbi5zMTogRml4ZWQgI2xpbmUgbnVtYmVycy4KKworMTk5OS0wMy0xNSAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KKworCSogcG8vZXMucG8sIHBvL2ZyLnBvLCBwby9ubC5wbywgcG8vZGUucG86CisJQWRkZWQgUE8gZmlsZXMgZnJvbSBUcmFuc2xhdGlvbiBQcm9qZWN0LgorCisxOTk5LTAzLTAzICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgorCisJKiBNYWtlZmlsZS5hbToKKwlBZGRlZCBzdXBwb3J0IGZvciBub24tQU5TSSBjb21waWxlcnMgKGFuc2kya25yKS4KKworMTk5OS0wMi0xNiAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KKworCSogY29uZmlndXJlLmluOiBCdW1wZWQgdmVyc2lvbiBudW1iZXIgdG8gMS4yNy4KKworCSogTWFrZWZpbGUuYW06CisJQWRkZWQgYGJpc29uLnNpbXBsZScgdG8gbGlzdCBvZiBmaWxlcyByZW1vdmVkIGJ5IGBtYWtlIGRpc3RjbGVhbicuCisKKzE5OTktMDItMTIgIEplc3NlIFRoaWxvICA8anRoaWxvQGdudS5vcmc+CisKKwkqIHNyYy9maWxlcy5jLCBzcmMvZmlsZXMuaDoKKwlEZWZpbmVkIGxvY2F0aW9ucyBvZiBwYXJzZXIgZmlsZXMgaW4gY29uZmlnLmggaW5zdGVhZCBvZiBNYWtlZmlsZS4KKworMTk5OS0wMi0xMiAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KKworCSogYWNjb25maWcuaCwgYWNpbmNsdWRlLm00LCBjb25maWd1cmUuaW4sIE1ha2VmaWxlLmFtOgorCURlZmluZWQgbG9jYXRpb25zIG9mIHBhcnNlciBmaWxlcyBpbiBjb25maWcuaCBpbnN0ZWFkIG9mIE1ha2VmaWxlLgorCisxOTk5LTAyLTA5ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgorCisJKiBNYWtlZmlsZS5hbToKKwlSZW1vdmVkIGluYXBwcm9wcmlhdGUgdXNlIG9mICQ8IG1hY3JvLgorCisxOTk5LTAyLTA1ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgorCisJKiBwby9NYWtlZmlsZS5pbi5pbiwgcG8vUE9URklMRVMuaW46CisJQWRkIGBwbycgZGlyZWN0b3J5IHNrZWxldG9uLgorCisxOTk5LTAxLTI3ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgorCisJKiBSRUFETUU6IERvY3VtZW50IGhlbHAtYmlzb24gbGlzdC4KKworCSogY29uZmlndXJlLmluOiBBZGQgY2hlY2sgZm9yIG1rc3RlbXAoKS4KKworMTk5OS0wMS0yMCAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KKworCSogc3JjL2NvbmZsaWN0cy5jLCBzcmMvTFIwLmMsIHNyYy9vdXRwdXQuYywgc3JjL3JlYWRlci5jOgorCUh1c2ggYSBmZXcgY29tcGlsZXIgd2FybmluZ3MuCisKKwkqIHNyYy9maWxlcy5jOgorCUFkZCB0cnljbG9zZSgpLCB3aGljaCB2ZXJpZmllcyB0aGF0IGZjbG9zZSB3YXMgc3VjY2Vzc2Z1bC4KKwlIdXNoIGEgY291cGxlIG9mIGNvbXBpbGVyIHdhcm5pbmdzLgorCisxOTk5LTAxLTIwICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgorCisJKiBNYWtlZmlsZS5hbSwgT0NoYW5nZUxvZzoKKwlDaGFuZ2VMb2cgaXMgbm93IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLiAgSW5jbHVkZSB0aGUgb2xkIHZlcnNpb24gYXMKKwlPQ2hhbmdlTG9nLgorCisxOTk5LTAxLTE0ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgorCisJKiBzcmMvZ3JhbS5oLCBzcmMvbGFsci5jLCBzcmMvbGV4LmMsIHNyYy9sZXguaCwgc3JjL21hY2hpbmUuaCwgc3JjL21haW4uYywgc3JjL251bGxhYmxlLmMsIHNyYy9vdXRwdXQuYywgc3JjL3ByaW50LmMsIHNyYy9yZWFkZXIuYywgc3JjL3JlZHVjZS5jLCBzcmMvc3RhdGUuaCwgc3JjL3N5bXRhYi5jLCBzcmMvc3ltdGFiLmgsIHNyYy90eXBlcy5oLCBzcmMvdm1zZ2V0YXJncy5jLCBzcmMvd2Fyc2hhbGwuYywgc3JjL2FsbG9jYXRlLmMsIHNyYy9hbGxvYy5oLCBzcmMvYmlzb24uczEsIHNyYy9jbG9zdXJlLmMsIHNyYy9jb25mbGljdHMuYywgc3JjL2Rlcml2ZXMuYywgc3JjL2ZpbGVzLmMsIHNyYy9maWxlcy5oLCBzcmMvZ2V0YXJncy5jLCBzcmMvZ3JhbS5jLCBzcmMvTFIwLmM6CisJVXBkYXRlIEZTRiBhZGRyZXNzLgorCisxOTk5LTAxLTE0ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgorCisJKiBkb2MvYmlzb24udGV4aW5mbzogRml4IGZvcm1hdHRpbmcgZ2xpdGNoLgorCisJKiBkb2MvYmlzb24udGV4aW5mbzogVXBkYXRlIEZTRiBhZGRyZXNzLgorCisxOTk5LTAxLTE0ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgorCisJKiBhY2NvbmZpZy5oOiBVcGRhdGUgRlNGIGFkZHJlc3MuCisKKzE5OTktMDEtMDggIEplc3NlIFRoaWxvICA8anRoaWxvQGdudS5vcmc+CisKKwkqIHNyYy9zeXN0ZW0uaDoKKwlEb24ndCBkZWZpbmUgUEFDS0FHRSBoZXJlLCBzaW5jZSBjb25maWcuaCBkZWZpbmVzIGl0LgorCisxOTk4LTEyLTMwICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgorCisJKiBzcmMvcmVhZGVyLmM6IFVwZGF0ZSBjb3B5cmlnaHQgZGF0ZS4KKworCSogc3JjL21haW4uYzoKKwlEaXRjaCBzcHJpbnRmIHRvIHN0YXRpY2FsbHktc2l6ZWQgYnVmZmVycyBpbiBmYXRhbC93YXJuIGZ1bmN0aW9ucyBpbgorCWZhdm9yIG9mIG91dHB1dCBkaXJlY3RseSB0byBzdGRlcnIgKGF2b2lkcyBidWZmZXIgb3ZlcnJ1bnMpLgorCisJKiBzcmMvcmVhZGVyLmM6IFNvbWUgY2hlY2tzIGZvciBwcmVtYXR1cmUgRU9GLgorCisJKiBzcmMvYWxsb2NhdGUuYywgc3JjL2FsbG9jLmgsIHNyYy9jbG9zdXJlLmMsIHNyYy9jb25mbGljdHMuYywgc3JjL2Rlcml2ZXMuYywgc3JjL2dldGFyZ3MuYywgc3JjL2dyYW0uYywgc3JjL2xhbHIuYywgc3JjL2xleC5jLCBzcmMvTFIwLmMsIHNyYy9tYWluLmMsIHNyYy9udWxsYWJsZS5jLCBzcmMvb3V0cHV0LmMsIHNyYy9wcmludC5jLCBzcmMvcmVkdWNlLmMsIHNyYy9zeW10YWIuYywgc3JjL3N5bXRhYi5oLCBzcmMvd2Fyc2hhbGwuYzoKKwlVc2UgcHJvdG90eXBlcyBpZiB0aGUgY29tcGlsZXIgdW5kZXJzdGFuZHMgdGhlbS4KKworCSogc3JjL2ZpbGVzLmM6IEhvbm9yIFRNUERJUiBvbiBVbml4IGhvc3RzLgorCVVzZSBwcm90b3R5cGVzIGlmIHRoZSBjb21waWxlciB1bmRlcnN0YW5kcyB0aGVtLgorCisJKiBzcmMvcmVhZGVyLmM6CisJRml4IGEgY291cGxlIG9mIGJ1ZmZlciBvdmVycnVuIGJ1Z3MuCisJVXNlIHByb3RvdHlwZXMgaWYgdGhlIGNvbXBpbGVyIHVuZGVyc3RhbmRzIHRoZW0uCisKKwkqIHNyYy9zeXN0ZW0uaDogSW5jbHVkZSB1bmlzdGQuaCBhbmQgY3R5cGUuaC4KKwlVc2UgI2lmZGVmIGluc3RlYWQgb2YgI2lmIGZvciBOTFMgc3ltYm9scy4KKworMTk5OC0xMi0zMCAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KKworCSogZG9jL2Jpc29uLnRleGluZm86CisJRGVsZXRlIGNvbW1lbnQgImNvbnNpZGVyIHVzaW5nIEBzZXQgZm9yIGVkaXRpb24gbnVtYmVyLCBldGMuLi4iIHNpbmNlCisJd2Ugbm93IGFyZSBkb2luZyBzby4KKworMTk5OC0xMi0zMCAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KKworCSogY29uZmlndXJlLmluOgorCVVzZSBwcm90b3R5cGVzIGlmIHRoZSBjb21waWxlciB1bmRlcnN0YW5kcyB0aGVtLgorCisJKiBORVdTOiBEb2N1bWVudCAxLjI2IGhpZ2hsaWdodHMuCisKKwkqIE1ha2VmaWxlLmFtOiBSZXF1aXJlIEF1dG9tYWtlIDEuMyBvciBsYXRlci4KKworCSogYWNjb25maWcuaDoKKwlVc2UgcHJvdG90eXBlcyBpZiB0aGUgY29tcGlsZXIgdW5kZXJzdGFuZHMgdGhlbS4KKworMTk5OC0xMi0yOSAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KKworCSogc3JjL3ZlcnNpb24uYzoKKwlVc2UgVkVSU0lPTiBzeW1ib2wgZnJvbSBhdXRvbWFrZSBmb3IgdmVyc2lvbiBudW1iZXIuCisKKzE5OTgtMTItMjkgIEplc3NlIFRoaWxvICA8anRoaWxvQGdudS5vcmc+CisKKwkqIGFjY29uZmlnLmgsIGNvbmZpZ3VyZS5pbiwgdmVyc2lvbi5jaW46CisJVXNlIFZFUlNJT04gc3ltYm9sIGZyb20gYXV0b21ha2UgZm9yIHZlcnNpb24gbnVtYmVyLgorCisxOTk4LTExLTI4ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgorCisJKiBNYWtlZmlsZS5hbToKKwlEaXN0cmlidXRlIG9yaWdpbmFsIHZlcnNpb24gb2Ygc2ltcGxlIHBhcnNlciAoYmlzb24uczEpLCBub3QgYnVpbHQKKwl2ZXJzaW9uIChiaXNvbi5zaW1wbGUpLgorCisxOTk4LTExLTI4ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgorCisJKiBkb2MvYmlzb24udGV4aW5mbzogQWRkIGluZm8gZGlyIGVudHJ5LgorCisJKiBkb2MvYmlzb24udGV4aW5mbzoKKwlMZXQgYXV0b21ha2UgcHV0IHZlcnNpb24gbnVtYmVyIGludG8gZG9jdW1lbnRhdGlvbi4KKworMTk5OC0xMS0yNiAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KKworCSogc3JjL2Jpc29uLmNsZCwgc3JjL2J1aWxkLmNvbSwgc3JjL3Ztc2hscC5tYXI6CisJQWRkIG5vbi1SQ1MgZmlsZXMgZnJvbSAvZ2QvZ251L2Jpc29uLgorCisxOTk4LTExLTI2ICBKZXNzZSBUaGlsbyAgPGp0aGlsb0BnbnUub3JnPgorCisJKiBkb2MvYmlzb24uMToKKwlEb2N1bWVudCB0aGUgQklTT05fSEFJUlkgYW5kIEJJU09OX1NJTVBMRSB2YXJpYWJsZXMuCisKKzE5OTgtMTEtMjUgIEplc3NlIFRoaWxvICA8anRoaWxvQGdudS5vcmc+CisKKwkqIHNyYy92ZXJzaW9uLmM6IEJ1aWxkIHZlcnNpb24uYyBhdXRvbWF0aWNhbGx5LgorCisJKiBzcmMvcmVhZGVyLmM6CisJRml4IHRva2VuIG51bWJlcmluZyAodXNlZCB0byBzdGFydCBhdCAyNTgsIG5vdCAyNTcpLgorCisJKiBzcmMvc3lzdGVtLmg6IEluY2x1ZGUgY29uZmlnLmguCisKKwkqIHNyYy9nZXRhcmdzLmM6IFVwZGF0ZSBidWcgcmVwb3J0IGFkZHJlc3MuCisKKwkqIHNyYy9hbGxvY2EuYywgc3JjL2dldG9wdDEuYywgc3JjL2dldG9wdC5jLCBzcmMvZ2V0b3B0Lmg6CisJR2V0IGxhdGVzdCBjb3BpZXMgb2YgYWxsb2NhLmMsIGdldG9wdC5jLCBnZXRvcHQuaCwgZ2V0b3B0MS5jIGZyb20gZ251Lm9yZy4KKworMTk5OC0xMS0yNSAgSmVzc2UgVGhpbG8gIDxqdGhpbG9AZ251Lm9yZz4KKworCSogTWFrZWZpbGUuYW06CisJUmVuYW1lIGJpc29uLnNpbXBsZSB0byBiaXNvbi5zMSAoYmlzb24uc2ltcGxlIGlzIHRoZW4gYnVpbHQgZnJvbSBiaXNvbi5zMSkuCisKKwkqIGNvbmZpZ3VyZS5pbiwgdmVyc2lvbi5jaW46CisJQnVpbGQgdmVyc2lvbi5jIGF1dG9tYXRpY2FsbHkuCisKKwkqIEFVVEhPUlM6IEFkZCBBVVRIT1JTIGZpbGUuCisKKwkqIFJFQURNRTogVXBkYXRlIGJ1ZyByZXBvcnQgYWRkcmVzcy4KKworCSogYmlzb24uc2ltcGxlOgorCVJlbmFtZSBiaXNvbi5zaW1wbGUgdG8gYmlzb24uczEgKGJpc29uLnNpbXBsZSBpcyB0aGVuIGJ1aWx0IGZyb20gYmlzb24uczEpLgorCisJKiBjb25maWd1cmUuaW4sIE1ha2VmaWxlLmFtLCBNYWtlZmlsZS5pbiwgc3RhbXAtaC5pbjoKKwlBZGQgYXV0b21ha2Ugc3R1ZmYuCisKKzE5OTgtMTEtMjUgIEplc3NlIFRoaWxvICA8anRoaWxvQGdudS5vcmc+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvOiBDbGVhbiB1cCBzb21lIGZvcm1hdHRpbmcuCisKKzE5OTgtMDUtMDUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogZG9jL2Jpc29uLnRleGluZm86CisJRXhwbGFpbiBiZXR0ZXIgd2h5IHRvIG1ha2UgYSBwdXJlIHBhcnNlci4KKworMTk5OC0wMS0wNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBzcmMvZmlsZXMuYyAob3BlbmZpbGVzKToKKwlbX1dJTjMyICYmICFfX0NZR1dJTjMyX19dIFVzZSBURU1QIG9yIFRlbXAgdG8KKwlmaW5kIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSwgaWYgcG9zc2libGUuICBEbyBub3QgdW5saW5rIGZpbGVzIHdoaWxlCisJdGhleSBhcmUgb3Blbi4KKworMTk5Ny0wOC0yNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBzcmMvcmVhZGVyLmMgKHN0YWNrX29mZnNldDspOgorCUNoYW5nZSBzb21lIHdhcm5pIHRvIHdhcm5zLgorCisJKiBzcmMvbGV4LmMgKGxpdGVyYWxjaGFyKTogVXNlIHdhcm5zLCBub3Qgd2FybmkuCisKKzE5OTctMDYtMjggIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogc3JjL2Jpc29uLnMxOiBBZGQgYSBCaXNvbiB2ZXJzaW9uIGNvbW1lbnQuCisKKwkqIHNyYy9tYWluLmMgKGZhdGFsLCB3YXJuLCBiZXJyb3IpOgorCVVzZSBwcm9ncmFtX25hbWUuCisKKzE5OTctMDYtMjggIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW4gKGJpc29uX3ZlcnNpb24pOiBOZXcgdmFyaWFibGUuCisJKGRpc3QpOiBVc2UgdGhhdCB2YXJpYWJsZS4KKwkoYmlzb24uczEpOiBTdWJzdGl0dXRlIHRoZSBCaXNvbiB2ZXJzaW9uIGludG8gYmlzb24uc2ltcGxlLgorCisJKiBiaXNvbi5zaW1wbGU6IEFkZCBhIEJpc29uIHZlcnNpb24gY29tbWVudC4KKworMTk5Ny0wNi0xOCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBzcmMvbWFpbi5jIChmYXRhbCwgd2FybiwgYmVycm9yKToKKwlNYWtlIGVycm9yIG1lc3NhZ2VzIHN0YW5kYXJkLgorCSh0b29tYW55KTogSW1wcm92ZSBlcnJvciBtZXNzYWdlIHRleHQuCisKKwkqIHNyYy9MUjAuYywgc3JjL2Nsb3N1cmUuYywgc3JjL2NvbmZsaWN0cy5jLCBzcmMvZGVyaXZlcy5jLCBzcmMvZmlsZXMuYywgc3JjL2xhbHIuYywgc3JjL2xleC5jLCBzcmMvbnVsbGFibGUuYywgc3JjL291dHB1dC5jLCBzcmMvcHJpbnQuYywgc3JjL3JlYWRlci5jLCBzcmMvcmVkdWNlLmMsIHNyYy9zeW10YWIuYzoKKwluZXcuaCByZW5hbWVkIHRvIGFsbG9jLmguCisKKzE5OTctMDYtMTggIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW46IG5ldy5oIHJlbmFtZWQgdG8gYWxsb2MuaC4KKworMTk5Ny0wNS0yNCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBzcmMvbGV4LmMgKGxpdGVyYWxjaGFyKToKKwlGaXggdGhlIGNvZGUgZm9yIGVzY2FwaW5nIFwsICIgYW5kICcuCisKKwkobGV4KTogQXZvaWQgdHJvdWJsZSB3aGVuIHRoZXJlIGFyZSBtYW55IGNoYXJzCisJdG8gZGlzY2FyZCBpbiBhIGNoYXIgbGl0ZXJhbCB3aXRoIGp1c3Qgc2V2ZXJhbCBjaGFycyBpbiBpdC4KKworMTk5Ny0wNS0xNyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBzcmMvYmlzb24uczE6CisJVXNlIG1hbGxvYywgaWYgdXNpbmcgYWxsb2NhIGlzIHRyb3VibGVzb21lLgorCShZWVNUQUNLX1VTRV9BTExPQ0EpOiBOZXcgZmxhZyBtYWNyby4KKwlEZWZpbmUgaXQgZm9yIHNvbWUgc3lzdGVtcyBhbmQgY29tcGlsZXJzLgorCShZWVNUQUNLX0FMTE9DKTogTmV3IG1hY3JvLgorCSh5eXBhcnNlKTogVXNlIFlZU1RBQ0tfQUxMT0MgdG8gYWxsb2NhdGUgc3RhY2suCisJSWYgaXQgd2FzIG1hbGxvYydkLCBmcmVlIGl0LgorCisxOTk3LTA1LTE3ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+CisKKwkqIGJpc29uLnNpbXBsZToKKwlVc2UgbWFsbG9jLCBpZiB1c2luZyBhbGxvY2EgaXMgdHJvdWJsZXNvbWUuCisJKFlZU1RBQ0tfVVNFX0FMTE9DQSk6IE5ldyBmbGFnIG1hY3JvLgorCURlZmluZSBpdCBmb3Igc29tZSBzeXN0ZW1zIGFuZCBjb21waWxlcnMuCisJKFlZU1RBQ0tfQUxMT0MpOiBOZXcgbWFjcm8uCisJKHl5cGFyc2UpOiBVc2UgWVlTVEFDS19BTExPQyB0byBhbGxvY2F0ZSBzdGFjay4KKwlJZiBpdCB3YXMgbWFsbG9jJ2QsIGZyZWUgaXQuCisKKzE5OTctMDQtMjMgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogc3JjL2Jpc29uLnMxOgorCShhbGxvY2EpIFtfX2hwdXhdOiBBbHdheXMgZGVmaW5lIGFzIF9fYnVpbHRpbl9hbGxvY2EuCisKKzE5OTctMDQtMjMgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogYmlzb24uc2ltcGxlOgorCShhbGxvY2EpIFtfX2hwdXhdOiBBbHdheXMgZGVmaW5lIGFzIF9fYnVpbHRpbl9hbGxvY2EuCisKKzE5OTctMDQtMjIgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogc3JjL2Jpc29uLnMxOgorCVtfX2hwdXhdOiBJbmNsdWRlIGFsbG9jYS5oIChyaWdodCBmb3IgSFBVWCAxMCkKKwlpbnN0ZWFkIG9mIGRlY2xhcmluZyBhbGxvY2EgKHJpZ2h0IGZvciBIUFVYIDkpLgorCisJKiBzcmMvYmlzb24uczEgKF9feXlfbWVtY3B5KToKKwlEZWNsYXJlIGFyZyBgY291bnQnIGFzIHVuc2lnbmVkIGludC4KKwkoeXlwYXJzZSk6IENhc3QgdGhpcmQgYXJnIHRvIF9feXlfbWVtY3B5IHRvIHVuc2lnbmVkIGludC4KKworMTk5Ny0wNC0yMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBiaXNvbi5zaW1wbGU6CisJW19faHB1eF06IEluY2x1ZGUgYWxsb2NhLmggKHJpZ2h0IGZvciBIUFVYIDEwKQorCWluc3RlYWQgb2YgZGVjbGFyaW5nIGFsbG9jYSAocmlnaHQgZm9yIEhQVVggOSkuCisKKwkqIGJpc29uLnNpbXBsZSAoX195eV9tZW1jcHkpOgorCURlY2xhcmUgYXJnIGBjb3VudCcgYXMgdW5zaWduZWQgaW50LgorCSh5eXBhcnNlKTogQ2FzdCB0aGlyZCBhcmcgdG8gX195eV9tZW1jcHkgdG8gdW5zaWduZWQgaW50LgorCisxOTk3LTAxLTAzICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+CisKKwkqIHNyYy9hbGxvY2F0ZS5jOiBbX19TVERDX18gb3IgX01TQ19WRVJdOgorCURlY2xhcmUgY2FsbG9jIGFuZCByZWFsbG9jIHRvIHJldHVybiB2b2lkICouCisKKzE5OTctMDEtMDIgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogc3JjL3N5c3RlbS5oOgorCVtfTVNDX1ZFUl06IEluY2x1ZGUgc3RkbGliLmggYW5kIHByb2Nlc3MuaC4KKwlbX01TQ19WRVJdIChnZXRwaWQpOiBEZWZpbmUgYXMgbWFjcm8tLXRyYW5zbGF0ZSBpdCB0byBfZ2V0cGlkLgorCisJKiBzcmMvbWFpbi5jIChtYWluKTogUmV0dXJuIEZBSUxVUkUgYXMgYSB2YWx1ZS4KKwkocHJpbnRhYmxlX3ZlcnNpb24pOiBEZWNsYXJlIGFyZyBhcyBpbnQsIG5vdCBjaGFyLgorCisxOTk3LTAxLTAyICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmluIChkaXN0KToKKwlFeHBsaWNpdGx5IGNoZWNrIGZvciBzeW1saW5rcywgYW5kIGNvcHkgdGhlbS4KKworMTk5Ni0xMi0xOSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBzcmMvZmlsZXMuYzoKKwlbX01TQ19WRVJdIChYUEZJTEUsIFhQRklMRTEpOiBEZWZpbmUsIGlmIG5vdCBhbHJlYWR5IGRlZmluZWQuCisKKzE5OTYtMTItMTggIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGdudS5vcmc+CisKKwkqIHNyYy9iaXNvbi5zMSAoeXlwYXJzZSk6CisJSWYgX19HTlVDX18gYW5kIFlZUEFSU0VfUEFSQU0gYXJlIGJvdGggZGVmaW5lZCwKKwlkZWNsYXJlIHl5cGFyc2UgdG8gaGF2ZSBhIHZvaWQgKiBhcmd1bWVudC4KKworMTk5Ni0xMi0xOCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAZ251Lm9yZz4KKworCSogYmlzb24uc2ltcGxlICh5eXBhcnNlKToKKwlJZiBfX0dOVUNfXyBhbmQgWVlQQVJTRV9QQVJBTSBhcmUgYm90aCBkZWZpbmVkLAorCWRlY2xhcmUgeXlwYXJzZSB0byBoYXZlIGEgdm9pZCAqIGFyZ3VtZW50LgorCisxOTk2LTEyLTE3ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+CisKKwkqIHNyYy9yZWR1Y2UuYyAobmJpdHMpOiBBZGQgc29tZSBjYXN0cy4KKworMTk5Ni0wOC0xMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBzcmMvYmlzb24uczE6IFRlc3QgX01TRE9TIGFzIHdlbGwgYXMgX01TRE9TXy4KKworMTk5Ni0wOC0xMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBiaXNvbi5zaW1wbGU6IFRlc3QgX01TRE9TIGFzIHdlbGwgYXMgX01TRE9TXy4KKworMTk5Ni0wNy0zMSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBzcmMvYmlzb24uczE6CisJW19fc3VuICYmIF9faTM4Nl06IEluY2x1ZGUgYWxsb2NhLmguCisKKzE5OTYtMDctMzEgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogYmlzb24uc2ltcGxlOgorCVtfX3N1biAmJiBfX2kzODZdOiBJbmNsdWRlIGFsbG9jYS5oLgorCisxOTk2LTA3LTMwICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+CisKKwkqIHNyYy9iaXNvbi5zMTogQ29tbWVudCBjaGFuZ2UuCisKKwkqIHNyYy9iaXNvbi5zMTogVGVzdCBfTVNET1NfLCBub3QgTVNET1MuCisKKzE5OTYtMDctMzAgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogYmlzb24uc2ltcGxlOiBDb21tZW50IGNoYW5nZS4KKworCSogYmlzb24uc2ltcGxlOiBUZXN0IF9NU0RPU18sIG5vdCBNU0RPUy4KKworMTk5Ni0wNi0wMSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBzcmMvcmVkdWNlLmMsIHNyYy9yZWFkZXIuYywgc3JjL3ByaW50LmMsIHNyYy9vdXRwdXQuYywgc3JjL251bGxhYmxlLmMsIHNyYy9sZXguYywgc3JjL2xhbHIuYywgc3JjL2dldGFyZ3MuYywgc3JjL2Rlcml2ZXMuYywgc3JjL2NvbmZsaWN0cy5jLCBzcmMvY2xvc3VyZS5jLCBzcmMvYWxsb2NhdGUuYzoKKwlJbnNlcnQgYF8nIG1hY3JvIGFyb3VuZCBtYW55IHN0cmluZyBjb25zdGFudHMuCisKKwkqIHNyYy9tYWluLmM6CisJSW5zZXJ0IGBfJyBtYWNybyBhcm91bmQgbWFueSBzdHJpbmcgY29uc3RhbnRzLgorCisJKG1haW4pOiBDYWxsIHNldGxvY2FsZSwgYmluZHRleHRkb21haW4gYW5kIHRleHRkb21haW4uCisKKwkqIHNyYy9zeXN0ZW0uaDogW0hBVkVfTE9DQUxFX0hdOiBJbmNsdWRlIGxvY2FsZS5oLgorCVshIEhBVkVfTE9DQUxFX0hdIChzZXRsb2NhbGUpOiBEZWZpbmUgYXMgbm8tb3AuCisJW0VOQUJMRV9OTFNdOiBJbmNsdWRlIGxpYmludGwuaC4KKwlbRU5BQkxFX05MU10gKGdldHRleHQpOiBEZWZpbmUuCisJWyEgRU5BQkxFX05MU10gKGJpbnRleHRkb21haW4sIHRleHRkb21haW4sIF8pOiBDb25zb2xhdGlvbiBkZWZpbml0aW9ucy4KKwkoTl8sIFBBQ0tBR0UsIExPQ0FMRURJUik6IE5ldyBtYWNyb3MuCisKKzE5OTYtMDYtMDEgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogUE9URklMRVMuaW46IE5ldyBmaWxlLgorCisJKiBNYWtlZmlsZS5pbiAoYWxsb2NhdGUubyk6CisJRGVmaW5lIHRhcmdldCBleHBsaWNpdGx5LgorCisJKiBNYWtlZmlsZS5pbiAoQ0ZMQUdTKTogU2V0IHRvIEBDRkxBR1NALgorCShMREZMQUdTKTogU2V0IHRvIEBMREZMQUdTQC4KKwkoY29uZmlndXJlKTogUnVuIGF1dG9jb25mIG9ubHkgaWYgcHJlY2VkaW5nIGBjZCcgc3VjY2VlZHMuCisJKGJpc29uLnMxKTogUmVkaXJlY3Qgb3V0cHV0IHRvIHRlbXBvcmFyeSBmaWxlIHRoZW4gbW92ZSB0aGUKKwl0ZW1wb3JhcnkgdG8gdGhlIHRhcmdldCwgcmF0aGVyIHRoYW4gcmVkaXJlY3RpbmcgZGlyZWN0bHkgdG8gYmlzb24uczEuCisJKGNsZWFuKTogUmVtb3ZlIGNvbmZpZy5zdGF0dXMgYW5kIGNvbmZpZy5sb2cuCisJKGRpc3RjbGVhbik6IERvbid0IHJlbW92ZSBjb25maWcuc3RhdHVzIGhlcmUuCisKKzE5OTYtMDUtMTIgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogc3JjL2Jpc29uLnMxOgorCShfX3l5X21lbWNweSkgW19fY3BsdXNwbHVzXTogUmVvcmRlciBkZWNsYXJhdGlvbnMgb2YgdmFyaWFibGVzIGYgYW5kIHQuCisKKzE5OTYtMDUtMTIgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogYmlzb24uc2ltcGxlOgorCShfX3l5X21lbWNweSkgW19fY3BsdXNwbHVzXTogUmVvcmRlciBkZWNsYXJhdGlvbnMgb2YgdmFyaWFibGVzIGYgYW5kIHQuCisKKzE5OTYtMDUtMTEgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogc3JjL2Jpc29uLnMxIChfX3l5X21lbWNweSk6CisJUmVhbGx5IHJlb3JkZXIgdGhlIGFyZ3MsIGFzIHdhcyBzdXBwb3NlZGx5IGRvbmUgb24gRmViIDE0IDE5OTUuCisJKHl5cGFyc2UpOiBDYWxscyBjaGFuZ2VkIGFjY29yZGluZ2x5LgorCisxOTk2LTA1LTExICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmluIChkaXN0KTogRG9uJ3QgdXNlICQoc3JjZGlyKS4KKworCSogYmlzb24uc2ltcGxlIChfX3l5X21lbWNweSk6CisJUmVhbGx5IHJlb3JkZXIgdGhlIGFyZ3MsIGFzIHdhcyBzdXBwb3NlZGx5IGRvbmUgb24gRmViIDE0IDE5OTUuCisJKHl5cGFyc2UpOiBDYWxscyBjaGFuZ2VkIGFjY29yZGluZ2x5LgorCisxOTk2LTAxLTI3ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+CisKKwkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3J1bGVfZGF0YSk6CisJVGVzdCBZWUVSUk9SX1ZFUkJPU0UgaW4gdGhlIGNvbmRpdGlvbmFsCisJYXJvdW5kIHRoZSBkZWZpbml0aW9uIG9mIHR0eW5hbWUuCisKKzE5OTUtMTItMjkgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogc3JjL2Jpc29uLnMxOgorCUZpeCBsaW5lIG51bWJlcnMgaW4gI2xpbmUgY29tbWFuZHMuCisKKzE5OTUtMTItMjkgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogYmlzb24uc2ltcGxlOgorCUZpeCBsaW5lIG51bWJlcnMgaW4gI2xpbmUgY29tbWFuZHMuCisKKzE5OTUtMTItMjcgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogc3JjL2Jpc29uLnMxIChZWVBBUlNFX1BBUkFNX0RFQ0wpOgorCUluIEMrKywgbWFrZSBpdCBhbHdheXMgbnVsbC4KKwkoWVlQQVJTRV9QQVJBTV9BUkcpOiBOZXcgbWFjcm8uCisJKHl5cGFyc2UpOiBVc2UgWVlQQVJTRV9QQVJBTV9BUkcuCisKKzE5OTUtMTItMjcgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogYmlzb24uc2ltcGxlIChZWVBBUlNFX1BBUkFNX0RFQ0wpOgorCUluIEMrKywgbWFrZSBpdCBhbHdheXMgbnVsbC4KKwkoWVlQQVJTRV9QQVJBTV9BUkcpOiBOZXcgbWFjcm8uCisJKHl5cGFyc2UpOiBVc2UgWVlQQVJTRV9QQVJBTV9BUkcuCisKKzE5OTUtMTEtMjkgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogZG9jL2Jpc29uLnRleGluZm86CisJRGVzY3JpYmUgbGl0ZXJhbCBzdHJpbmcgdG9rZW5zLCAlcmF3LCAlbm9fbGluZXMsICV0b2tlbl90YWJsZS4KKworMTk5NS0xMS0yOSAgRGFuaWVsIEhhZ2VydHkgIDxoYWdAZ251Lm9yZz4KKworCSogZG9jL2Jpc29uLnRleGluZm86IEZpeGVkIHVwZGF0ZSBkYXRlCisKKzE5OTUtMTAtMTYgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogc3JjL3ZlcnNpb24uYzogVmVyc2lvbiAxLjI1LgorCisxOTk1LTEwLTE2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+CisKKwkqIE5FV1M6ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKKworMTk5NS0xMC0xNiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBkb2MvYmlzb24uMSwgZG9jL2Jpc29uLnJuaDoKKwlBZGQgbmV3IG9wdGlvbnMuCisKKzE5OTUtMTAtMTUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogc3JjL3Ztc2dldGFyZ3MuYywgc3JjL2dldGFyZ3MuYzoKKwlBZGRlZCAtbiwgLWssIGFuZCAtcmF3IHN3aXRjaGVzLgorCShub3BhcnNlcmZsYWcsIHRva251bWZsYWcsIHJhd3Rva251bWZsYWcpOiBOZXcgdmFyaWFibGVzLgorCisJKiBzcmMvc3ltdGFiLmggKFNBTElBUyk6CisJTmV3ICNkZWZpbmUgZm9yIGFkZGluZyBhbGlhc2VzIHRvICV0b2tlbi4KKwkoc3RydWN0IGJ1Y2tldCk6IEFkZGVkIGBhbGlhcycgZmllbGQuCisKKwkqIHNyYy9yZWR1Y2UuYyAocmVkdWNlX2dyYW1tYXIpOgorCVJldmlzZSBlcnJvciBtZXNzYWdlLgorCShwcmludF9ub3RpY2VzKTogUmVtb3ZlIGZpbmFsIGAuJyBmcm9tIGVycm9yIG1lc3NhZ2UuCisKKwkqIHNyYy9yZWFkZXIuYyAocmVhZGVyX291dHB1dF95eWxzcCk6CisJTmV3IGZ1bmN0aW9uLgorCShyZWFkZ3JhbSk6IFVzZSBgI2lmIDAnIGFyb3VuZCBjb2RlIHRoYXQgYWNjZXB0ZWQgJWNvbW1hbmQKKwlpbnNpZGUgZ3JhbW1hciBydWxlczogIFRoZSBkb2N1bWVudGF0aW9uIGRvZXNuJ3QgYWxsb3cgaXQsCisJYW5kIGl0IHdpbGwgZmFpbCBzaW5jZSB0aGUgJWNvbW1hbmQgcHJvY2Vzc29ycyBzY2FuIGZvciB0aGUgbmV4dCAlLgorCShwYXJzZV90b2tlbl9kZWNsKTogIEV4dGVuZGVkIHRoZSAldG9rZW4KKwlkZWNsYXJhdGlvbiB0byBhbGxvdyBhIG11bHRpLWNoYXJhY3RlciBzeW1ib2wgYXMgYW4gYWxpYXMuCisJKHBhcnNlX3Rob25nX2RlY2wpOiBOZXcgZnVuY3Rpb24uCisJKHJlYWRfZGVjbGFyYXRpb25zKTogQWRkZWQgJXRob25nIGRlY2xhcmF0aW9ucy4KKwkocmVhZF9kZWNsYXJhdGlvbnMpOiBIYW5kbGUgTk9PUCB0byBkZWFsIHdpdGggYWxsb3dpbmcKKwklIGRlY2xhcmF0aW9ucyBhcyBhbm90aGVyIG1lYW5zIHRvIHNwZWNpZnkgdGhlIGZsYWdzLgorCShyZWFkZ3JhbSk6IEFsbG93ICVwcmVjIHByaW9yIHRvIHNlbWFudGljcyBlbWJlZGRlZCBpbiBhIHJ1bGUuCisJKHNraXBfdG9fY2hhciwgcmVhZF9kZWNsYXJhdGlvbnMsIGNvcHlfZGVmaW5pdGlvbikKKwkocGFyc2VfdG9rZW5fZGVjbCwgcGFyc2Vfc3RhcnRfZGVjbCwgcGFyc2VfdHlwZV9kZWNsKQorCShwYXJzZV9hc3NvY19kZWNsLCBwYXJzZV91bmlvbl9kZWNsLCBwYXJzZV9leHBlY3RfZGVjbCkKKwkoZ2V0X3R5cGVfbmFtZSwgY29weV9ndWFyZCwgY29weV9hY3Rpb24sIHJlYWRncmFtKQorCShnZXRfdHlwZSwgcGFja3N5bWJvbHMpOiAgUmV2aXNlZCBtb3N0IGVycm9yIG1lc3NhZ2VzLgorCUNoYW5nZWQgYGZhdGFsJyB0byBgd2Fybnh4eCcgdG8gYXZvaWQgYWJvcnRpbmcgZm9yIGVycm9yLgorCVJldmlzZWQgYW5kIHVzZSBtdWx0aXBsZSB3YXJueHh4IGZ1bmN0aW9ucyB0byBhdm9pZCB1c2luZyBWQVJBUkdTMS4KKwkocmVhZF9kZWNsYXJhdGlvbnMpOiBJbXByb3ZlIHRoZSBlcnJvciBtZXNzYWdlIGZvcgorCWFuIGludmFsaWQgY2hhcmFjdGVyLiAgRG8gbm90IGFib3J0LgorCShyZWFkX2RlY2xhcmF0aW9ucywgY29weV9ndWFyZCwgY29weV9hY3Rpb24pOiBVc2UKKwlwcmludGFibGVfdmVyc2lvbiB0byBhdm9pZCB1bnByaW50YWJsZSBjaGFyYWN0ZXJzIGluIHByaW50ZWQgb3V0cHV0LgorCShwYXJzZV9leHBlY3RfZGVjbCk6IEVycm9yIGlmIGFyZ3VtZW50IHRvICVleHBlY3QgZXhjZWVkcyAxMCBkaWdpdHMuCisJKHBhcnNlX3Rva2VuX2RlY2wsIHBhcnNlX2Fzc29jX2RlY2wsIHBhcnNlX3R5cGVfZGVjbCwgZ2V0X3R5cGUpOgorCUFsbG93IHRoZSB0eXBlIG9mIGEgbm9uLXRlcm1pbmFsIGNhbiBiZSBnaXZlbgorCW1vcmUgdGhhbiBvbmNlLCBhcyBsb25nIGFzIGFsbCBzcGVjaWZpY2F0aW9ucyBnaXZlIHRoZSBzYW1lIHR5cGUuCisKKwkqIHNyYy9vdXRwdXQuYzoKKwkob3V0cHV0X2hlYWRlcnMsIG91dHB1dF90cmFpbGVycywgb3V0cHV0LCBvdXRwdXRfZ3JhbSkKKwkob3V0cHV0X3J1bGVfZGF0YSk6IEltcGxlbWVudCBub3BhcnNlcmZsYWcgdmFyaWFibGUuCisJSW1wbGVtZW50IHRva251bWZsYWcgdmFyaWFibGUuCisJKG91dHB1dCk6IENhbGwgcmVhZGVyX291dHB1dF95eWxzcCB0byBvdXRwdXQgTFRZUEVTVFIuCisKKwkqIHNyYy9tYWluLmMgKG1haW4pOgorCSBJZiByZWFkZXIgc2VlcyBhbiBlcnJvciwgZG9uJ3QgcHJvY2VzcyB0aGUgZ3JhbW1hci4KKwkoZmF0YWxzKTogVXBkYXRlZCB0byBub3QgdXNlIFZBUkFSR1MxLgorCShwcmludGFibGVfdmVyc2lvbiwgaW50X3RvX3N0cmluZywgd2Fybiwgd2FybmksIHdhcm5zLCB3YXJuc3MpCisJKHdhcm5zc3MpOiBOZXcgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9ucy4gIEF2b2lkIGFib3J0IGZvciBlcnJvci4KKworCSogc3JjL2xleC5oOgorCUFkZGVkIFRIT05HIGFuZCBOT09QIGZvciBhbGlhcyBwcm9jZXNzaW5nLgorCUFkZGVkIFNFVE9QVCBmb3IgdGhlIG5ldyBjb2RlIHRoYXQgYWxsb3dzIHNldHRpbmcgb3B0aW9ucyB3aXRoICVmbGFncy4KKworCSogc3JjL2xleC5jOgorCUluY2x1ZGUgZ2V0b3B0LmguICBBZGQgc29tZSBleHRlcm4gZGVjbHMuCisJKHNhZmVnZXRjKTogTmV3IGZ1bmN0aW9uIHRvIGRlYWwgd2l0aCBFT0YgZ3JhY2VmdWxseS4KKwkobGl0ZXJhbGNoYXIpOyBuZXcgZnVuY3Rpb24gdG8gZGVhbCB3aXRoIHJlYWRpbmcgXCBlc2NhcGVzLgorCShsZXgpOiBVc2UgbGl0ZXJhbGNoYXIuCisJKGxleCk6IEltcGxlbWVudGVkICIuLi4iIHRva2Vucy4KKwkobGl0ZXJhbGNoYXIsIGxleCwgcGFyc2VfcGVyY2VudF90b2tlbik6IE1hZGUgdG9rZW5idWZmZXIKKwlhbHdheXMgY29udGFpbiB0aGUgdG9rZW4uICBUaGlzIGluY2x1ZGVzIGdyb3dpbmcgdGhlIHRva2VuCisJYnVmZmVyIHdoaWxlIHJlYWRpbmcgYW4gaW50ZWdlci4KKwkocGFyc2VfcGVyY2VudF90b2tlbik6IFJlcGxhY2VkIGlmLWVsc2Ugc3RhdGVtZW50IHdpdGggcGVyY2VudF90YWJsZS4KKwkocGFyc2VfcGVyY2VudF90b2tlbik6IEFkZGVkICUgZGVjbGFyYXRpb25zIGFzIGFub3RoZXIKKwl3YXkgdG8gc3BlY2lmeSB0aGUgZmxhZ3MgLW4sIC1sLCBhbmQgLXIuICBBbHNvIGFkZGVkIGhvb2tzIGZvcgorCS1kLCAtaywgLXksIC12LCAtdCwgLXAsIC1iLCAtbywgYnV0IGltcGxlbWVudGF0aW9uIHJlcXVpcmVzCisJbWFqb3IgY2hhbmdlcyB0byBmaWxlcy5jLgorCShsZXgpIFJldGFpbiBpbiB0aGUgaW5jb21pbmcgc3RyZWFtIGEgY2hhcmFjdGVyIGZvbGxvd2luZworCWFuIGluY29ycmVjdCAnLycuCisJKHNraXBfd2hpdGVfc3BhY2UsIGxleCk6ICBSZXZpc2VkIG1vc3QgZXJyb3IgbWVzc2FnZXMKKwlhbmQgY2hhbmdlZCBmYXRhbCB0byB3YXJuIHRvIGF2b2lkIGFib3J0aW5nLgorCShwZXJjZW50X3RhYmxlKTogIEFkZGVkICV0aG9uZyBkZWNsYXJhdGlvbnMuCisKKwkqIHNyYy9ncmFtLmg6IENvbW1lbnQgY2hhbmdlcy4KKworCSogc3JjL2ZpbGVzLmMgKG9wZW5maWxlcywgb3Blbl9leHRyYV9maWxlcywgZG9uZSk6CisJIEFkZCBmYWN0aW9uIGZsYWcKKwlhbmQgYWN0ZmlsZSBmaWxlLiAgSGFuZGxlIG5vcGFyc2VyZmxhZy4gIEJvdGggZm9yIC1uIHN3aXRjaC4KKworCSogc3JjL2NvbmZsaWN0cy5jIChyZXNvbHZlX3NyX2NvbmZsaWN0KToKKwlSZW1vdmUgdXNlIG9mIGFsbG9jYS4KKworMTk5NS0wNi0wMSAgSmltIE1leWVyaW5nICA8bWV5ZXJpbmdAZ251Lm9yZz4KKworCSogZG9jL2Jpc29uLnRleGluZm86ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKKworMTk5NS0wNS0wNiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBzcmMvYmlzb24uczE6IENvbW1lbnQgY2hhbmdlLgorCisxOTk1LTA1LTA2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+CisKKwkqIGJpc29uLnNpbXBsZTogQ29tbWVudCBjaGFuZ2UuCisKKzE5OTUtMDUtMDMgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogc3JjL3ZlcnNpb24uYzogVmVyc2lvbiBub3cgMS4yNC4KKworCSogc3JjL2Jpc29uLnMxOiBDaGFuZ2UgZGlzdHJpYnV0aW9uIHRlcm1zLgorCisJKiBzcmMvdmVyc2lvbi5jOiBWZXJzaW9uIG5vdyAxLjIzLgorCisxOTk1LTA1LTAzICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvOgorCVJld3JpdGUgIkNvbmRpdGlvbnMgZm9yIFVzaW5nIEJpc29uIi4KKwlVcGRhdGUgdmVyc2lvbiB0byAxLjI0LgorCisxOTk1LTA1LTAzICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+CisKKwkqIGJpc29uLnNpbXBsZTogQ2hhbmdlIGRpc3RyaWJ1dGlvbiB0ZXJtcy4KKworMTk5NS0wMi0yMyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBzcmMvZmlsZXMuYzogVGVzdCBfX1ZNU19QT1NJWCBhcyB3ZWxsIGFzIFZNUy4KKworMTk5NS0wMi0xNCAgSmltIE1leWVyaW5nICA8bWV5ZXJpbmdAZ251Lm9yZz4KKworCSogc3JjL2Jpc29uLnMxIChfX3l5X21lbWNweSk6CisJUmVuYW1lZCBmcm9tIF9feXlfYmNvcHkgdG8gYXZvaWQKKwljb25mdXNpb24uICBSZXZlcnNlIEZST00gYW5kIFRPIGFyZ3VtZW50cyB0byBiZSBjb25zaXN0ZW50IHdpdGgKKwl0aG9zZSBvZiBtZW1jcHkuCisKKzE5OTUtMDItMTQgIEppbSBNZXllcmluZyAgPG1leWVyaW5nQGdudS5vcmc+CisKKwkqIGJpc29uLnNpbXBsZSAoX195eV9tZW1jcHkpOgorCVJlbmFtZWQgZnJvbSBfX3l5X2Jjb3B5IHRvIGF2b2lkCisJY29uZnVzaW9uLiAgUmV2ZXJzZSBGUk9NIGFuZCBUTyBhcmd1bWVudHMgdG8gYmUgY29uc2lzdGVudCB3aXRoCisJdGhvc2Ugb2YgbWVtY3B5LgorCisxOTk0LTExLTEwICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AZ251Lm9yZz4KKworCSogTkVXUzogcmVmb3JtYXQKKworCSogTkVXUzogTmV3IGZpbGUuCisKKwkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOiBJbmNsdWRlIE5FV1MuCisKKwkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOgorCUluY2x1ZGUgaW5zdGFsbC1zaCwgbm90IGluc3RhbGwuc2guCisKKwkqIGNvbmZpZ3VyZS5pbjogVXBkYXRlIHRvIEF1dG9jb25mIHYyIG1hY3JvIG5hbWVzLgorCisxOTk0LTEwLTA1ICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW46IGZpeCB0eXBvCisKKwkqIE1ha2VmaWxlLmluIChwcmVmaXgsIGV4ZWNfcHJlZml4KToKKwlMZXQgY29uZmlndXJlIHNldCB0aGVtLgorCisxOTk0LTA5LTI4ICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW46IFNldCBkYXRhZGlyIHRvICQocHJlZml4KS9zaGFyZS4KKworMTk5NC0wOS0xNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBzcmMvYmlzb24uczE6CisJVXBkYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIEdQTCB2ZXJzaW9uLgorCisxOTk0LTA5LTE1ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+CisKKwkqIGJpc29uLnNpbXBsZToKKwlVcGRhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgR1BMIHZlcnNpb24uCisKKzE5OTQtMDctMTIgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogc3JjL3JlZHVjZS5jLCBzcmMvcmVhZGVyLmM6CisJZW50ZXJlZCBpbnRvIFJDUworCisxOTk0LTA1LTA1ICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW46IGVudGVyZWQgaW50byBSQ1MKKworMTk5NC0wMy0yNiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBzcmMvYmlzb24uczE6IGVudGVyZWQgaW50byBSQ1MKKworMTk5NC0wMy0yNiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBiaXNvbi5zaW1wbGU6IGVudGVyZWQgaW50byBSQ1MKKworMTk5NC0wMy0yNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBzcmMvbWFpbi5jOiBlbnRlcmVkIGludG8gUkNTCisKKzE5OTQtMDMtMjQgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogc3JjL2NvbmZsaWN0cy5jOiBlbnRlcmVkIGludG8gUkNTCisKKzE5OTQtMDEtMDIgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW46ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKKworMTk5My0xMS0yMSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBzcmMvYmlzb24uczE6ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKKworMTk5My0xMS0yMSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBkb2MvYmlzb24udGV4aW5mbzogZW50ZXJlZCBpbnRvIFJDUworCisJKiBkb2MvYmlzb24udGV4aW5mbzogKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKgorCisxOTkzLTExLTIxICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+CisKKwkqIGJpc29uLnNpbXBsZTogKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKgorCisxOTkzLTEwLTI1ICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AZ251Lm9yZz4KKworCSogZG9jL2Jpc29uLnRleGluZm86ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKKworMTk5My0xMC0xOSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBzcmMvYmlzb24uczE6ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKKworMTk5My0xMC0xOSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBiaXNvbi5zaW1wbGU6ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKKworMTk5My0xMC0xNCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBzcmMvYmlzb24uczE6ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKKworMTk5My0xMC0xNCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBiaXNvbi5zaW1wbGU6ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKKworMTk5My0wOS0xNCAgRGF2aWQgSi4gTWFjS2VuemllICA8ZGptQGdudS5vcmc+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvOiAqKiogZW1wdHkgbG9nIG1lc3NhZ2UgKioqCisKKzE5OTMtMDktMTMgIE5vYWggRnJpZWRtYW4gIDxmcmllZG1hbkBnbnUub3JnPgorCisJKiBNYWtlZmlsZS5pbjogKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKgorCisxOTkzLTA5LTEwICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+CisKKwkqIHNyYy9jb25mbGljdHMuYzogKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKgorCisJKiBzcmMvc3lzdGVtLmg6IGVudGVyZWQgaW50byBSQ1MKKworMTk5My0wOS0xMCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBkb2MvYmlzb24uMTogZW50ZXJlZCBpbnRvIFJDUworCisxOTkzLTA5LTA2ICBOb2FoIEZyaWVkbWFuICA8ZnJpZWRtYW5AZ251Lm9yZz4KKworCSogc3JjL3ZlcnNpb24uYzogZW50ZXJlZCBpbnRvIFJDUworCisxOTkzLTA5LTA2ICBOb2FoIEZyaWVkbWFuICA8ZnJpZWRtYW5AZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW46ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKKworMTk5My0wNy0zMCAgRGF2aWQgSi4gTWFjS2VuemllICA8ZGptQGdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmluOiAqKiogZW1wdHkgbG9nIG1lc3NhZ2UgKioqCisKKzE5OTMtMDctMjQgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogc3JjL2Jpc29uLnMxOiAqKiogZW1wdHkgbG9nIG1lc3NhZ2UgKioqCisKKzE5OTMtMDctMjQgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogYmlzb24uc2ltcGxlOiAqKiogZW1wdHkgbG9nIG1lc3NhZ2UgKioqCisKKzE5OTMtMDctMDggIERhdmlkIEouIE1hY0tlbnppZSAgPGRqbUBnbnUub3JnPgorCisJKiBNYWtlZmlsZS5pbjogKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKgorCisxOTkzLTA3LTA0ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+CisKKwkqIHNyYy9iaXNvbi5zMTogKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKgorCisxOTkzLTA3LTA0ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+CisKKwkqIGJpc29uLnNpbXBsZTogKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKgorCisxOTkzLTA2LTI2ICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AZ251Lm9yZz4KKworCSogc3JjL2dldGFyZ3MuYzogZW50ZXJlZCBpbnRvIFJDUworCisxOTkzLTA2LTI2ICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AZ251Lm9yZz4KKworCSogZG9jL2Jpc29uLnRleGluZm86ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKKworCSogZG9jL2Jpc29uLjE6IE5ldyBmaWxlLgorCisxOTkzLTA2LTI1ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+CisKKwkqIHNyYy9nZXRhcmdzLmM6IE5ldyBmaWxlLgorCisxOTkzLTA2LTE2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+CisKKwkqIHNyYy9iaXNvbi5zMTogKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKgorCisxOTkzLTA2LTE2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+CisKKwkqIGJpc29uLnNpbXBsZTogKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKgorCisxOTkzLTA2LTAzICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+CisKKwkqIHNyYy9iaXNvbi5zMTogTmV3IGZpbGUuCisKKzE5OTMtMDYtMDMgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogZG9jL2Jpc29uLnRleGluZm86ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKKworMTk5My0wNi0wMyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBiaXNvbi5zaW1wbGU6IE5ldyBmaWxlLgorCisxOTkzLTA1LTE5ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+CisKKwkqIGRvYy9iaXNvbi50ZXhpbmZvOiBOZXcgZmlsZS4KKworMTk5My0wNS0wNyAgTm9haCBGcmllZG1hbiAgPGZyaWVkbWFuQGdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmluOiAqKiogZW1wdHkgbG9nIG1lc3NhZ2UgKioqCisKKzE5OTMtMDQtMjggIE5vYWggRnJpZWRtYW4gIDxmcmllZG1hbkBnbnUub3JnPgorCisJKiBzcmMvcmVhZGVyLmM6ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKKworMTk5My0wNC0yMyAgTm9haCBGcmllZG1hbiAgPGZyaWVkbWFuQGdudS5vcmc+CisKKwkqIHNyYy9hbGxvYy5oOiBlbnRlcmVkIGludG8gUkNTCisKKzE5OTMtMDQtMjAgIERhdmlkIEouIE1hY0tlbnppZSAgPGRqbUBnbnUub3JnPgorCisJKiBzcmMvdmVyc2lvbi5jOiAqKiogZW1wdHkgbG9nIG1lc3NhZ2UgKioqCisKKwkqIHNyYy9maWxlcy5jLCBzcmMvYWxsb2NhdGUuYzoKKwllbnRlcmVkIGludG8gUkNTCisKKwkqIHNyYy9yZWFkZXIuYzogKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKgorCisJKiBzcmMvbGV4LmM6IGVudGVyZWQgaW50byBSQ1MKKworCSogc3JjL2NvbmZsaWN0cy5jOiBOZXcgZmlsZS4KKworCSogc3JjL3N5bXRhYi5jOiBlbnRlcmVkIGludG8gUkNTCisKKwkqIHNyYy9hbGxvYy5oOiBOZXcgZmlsZS4KKworCSogc3JjL0xSMC5jOiBlbnRlcmVkIGludG8gUkNTCisKKzE5OTMtMDQtMTggIE5vYWggRnJpZWRtYW4gIDxmcmllZG1hbkBnbnUub3JnPgorCisJKiBzcmMvcmVhZGVyLmM6IE5ldyBmaWxlLgorCisJKiBzcmMvdmVyc2lvbi5jOiAqKiogZW1wdHkgbG9nIG1lc3NhZ2UgKioqCisKKzE5OTMtMDQtMTggIE5vYWggRnJpZWRtYW4gIDxmcmllZG1hbkBnbnUub3JnPgorCisJKiBNYWtlZmlsZS5pbjogKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKgorCisxOTkzLTA0LTE3ICBOb2FoIEZyaWVkbWFuICA8ZnJpZWRtYW5AZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW46ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKKworMTk5My0wNC0xNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBzcmMvbWFpbi5jLCBzcmMvZmlsZXMuYzoKKwlOZXcgZmlsZS4KKworMTk5My0wNC0xNSAgTm9haCBGcmllZG1hbiAgPGZyaWVkbWFuQGdudS5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjogZW50ZXJlZCBpbnRvIFJDUworCisJKiBjb25maWd1cmUuaW46ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKKworCSogY29uZmlndXJlLmluOiBOZXcgZmlsZS4KKworMTk5My0wNC0xNCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBNYWtlZmlsZS5pbjogTmV3IGZpbGUuCisKKzE5OTMtMDQtMTMgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogc3JjL3ZlcnNpb24uYzogTmV3IGZpbGUuCisKKzE5OTMtMDMtMjUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogc3JjL291dHB1dC5jOiBlbnRlcmVkIGludG8gUkNTCisKKzE5OTItMDktMjUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogY29uZmlndXJlLmJhdDogZW50ZXJlZCBpbnRvIFJDUworCisxOTkyLTA2LTIyICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+CisKKwkqIHNyYy92bXNnZXRhcmdzLmM6IGVudGVyZWQgaW50byBSQ1MKKworMTk5Mi0wNi0yMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBkb2MvYmlzb24ucm5oOiBlbnRlcmVkIGludG8gUkNTCisKKzE5OTItMDQtMjAgIERhdmlkIEouIE1hY0tlbnppZSAgPGRqbUBnbnUub3JnPgorCisJKiBSRUFETUU6IGVudGVyZWQgaW50byBSQ1MKKworMTk5Mi0wMS0yMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBzcmMvbWFjaGluZS5oOiBlbnRlcmVkIGludG8gUkNTCisKKzE5OTEtMTItMjEgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogc3JjL2xhbHIuYywgc3JjL2Nsb3N1cmUuYzoKKwllbnRlcmVkIGludG8gUkNTCisKKzE5OTEtMTItMjAgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZ251Lm9yZz4KKworCSogc3JjL3N0YXRlLmg6IGVudGVyZWQgaW50byBSQ1MKKworMTk5MS0xMi0xOCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUub3JnPgorCisJKiBzcmMvcHJpbnQuYywgc3JjL251bGxhYmxlLmMsIHNyYy9kZXJpdmVzLmM6CisJZW50ZXJlZCBpbnRvIFJDUworCisxOTkxLTExLTAzICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AZ251Lm9yZz4KKworCSogc3JjL3dhcnNoYWxsLmMsIHNyYy90eXBlcy5oLCBzcmMvc3ltdGFiLmgsIHNyYy9sZXguaCwgc3JjL2dyYW0uYywgc3JjL2dyYW0uaCwgc3JjL2ZpbGVzLmg6CisJZW50ZXJlZCBpbnRvIFJDUworCisxOTg4LTA5LTA5ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+CisKKwkqIHNyYy9iaXNvbi5oYWlyeTogZW50ZXJlZCBpbnRvIFJDUworCisxOTg3LTEyLTE2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdudS5vcmc+CisKKwkqIFJFRkVSRU5DRVM6IGVudGVyZWQgaW50byBSQ1MKKworCisJLS0tLS0KKworCUNvcHlyaWdodCAoQykgMTk4Ny0xOTg4LCAxOTkxLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorCUluYy4KKworCUNvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dAorCW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcworCW5vdGljZSBhcmUgcHJlc2VydmVkLgpkaWZmIC0tZ2l0IGEvR05VbWFrZWZpbGUgYi9HTlVtYWtlZmlsZQppbmRleCA2NzVhZjgyLi41OGYyZWFkIDEwMDY0NAotLS0gYS9HTlVtYWtlZmlsZQorKysgYi9HTlVtYWtlZmlsZQpAQCAtMSw1OCArMSwxMjcgQEAKLSMgSGF2aW5nIGEgc2VwYXJhdGUgR05VbWFrZWZpbGUgbGV0cyBtZSBgaW5jbHVkZScgdGhlIGR5bmFtaWNhbGx5Ci0jIGdlbmVyYXRlZCBydWxlcyBjcmVhdGVkIHZpYSBNYWtlZmlsZS5tYWludCBhcyB3ZWxsIGFzIE1ha2VmaWxlLm1haW50IGl0c2VsZi4KKyMgSGF2aW5nIGEgc2VwYXJhdGUgR05VbWFrZWZpbGUgbGV0cyBtZSAnaW5jbHVkZScgdGhlIGR5bmFtaWNhbGx5CisjIGdlbmVyYXRlZCBydWxlcyBjcmVhdGVkIHZpYSBjZmcubWsgKHBhY2thZ2UtbG9jYWwgY29uZmlndXJhdGlvbikKKyMgYXMgd2VsbCBhcyBtYWludC5tayAoZ2VuZXJpYyBtYWludGFpbmVyIHJ1bGVzKS4KICMgVGhpcyBtYWtlZmlsZSBpcyB1c2VkIG9ubHkgaWYgeW91IHJ1biBHTlUgTWFrZS4KICMgSXQgaXMgbmVjZXNzYXJ5IGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRhcmdldHMgdXN1YWxseSBvZiBpbnRlcmVzdAogIyBvbmx5IHRvIHRoZSBtYWludGFpbmVyLgogCi0jIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzLCAyMDA2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKICMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKKwogIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgogCi0jIFN5c3RlbXMgd2hlcmUgL2Jpbi9zaCBpcyBub3QgdGhlIGRlZmF1bHQgc2hlbGwgbmVlZCB0aGlzLiAgVGhlICQoc2hlbGwpCi0jIGNvbW1hbmQgYmVsb3cgd29uJ3Qgd29yayB3aXRoIGUuZy4gc3RvY2sgRE9TL1dpbmRvd3Mgc2hlbGxzLgotaWZlcSAoJCh3aWxkY2FyZCAvYmluL3NbaF0pLC9iaW4vc2gpCi1TSEVMTCA9IC9iaW4vc2gKLWVsc2UKLSMgd2lsbCBiZSB1c2VkIG9ubHkgd2l0aCB0aGUgbmV4dCBzaGVsbC10ZXN0IGxpbmUsIHRoZW4gb3ZlcndyaXR0ZW4KLSMgYnkgYSBjb25maWd1cmVkLWluIHZhbHVlCi1TSEVMTCA9IHNoCi1lbmRpZgotCi1oYXZlLU1ha2VmaWxlIDo9ICQoc2hlbGwgdGVzdCAtZiBNYWtlZmlsZSAmJiBlY2hvIHllcykKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAKICMgSWYgdGhlIHVzZXIgcnVucyBHTlUgbWFrZSBidXQgaGFzIG5vdCB5ZXQgcnVuIC4vY29uZmlndXJlLAogIyBnaXZlIHRoZW0gYSBkaWFnbm9zdGljLgotaWZlcSAoJChoYXZlLU1ha2VmaWxlKSx5ZXMpCitfZ2wtTWFrZWZpbGUgOj0gJCh3aWxkY2FyZCBbTV1ha2VmaWxlKQoraWZuZXEgKCQoX2dsLU1ha2VmaWxlKSwpCiAKICMgTWFrZSB0YXIgYXJjaGl2ZSBlYXNpZXIgdG8gcmVwcm9kdWNlLgogZXhwb3J0IFRBUl9PUFRJT05TID0gLS1vd25lcj0wIC0tZ3JvdXA9MCAtLW51bWVyaWMtb3duZXIKIAorIyBBbGxvdyB0aGUgdXNlciB0byBhZGQgdG8gdGhpcyBpbiB0aGUgTWFrZWZpbGUuCitBTExfUkVDVVJTSVZFX1RBUkdFVFMgPQorCiBpbmNsdWRlIE1ha2VmaWxlCi1pbmNsdWRlICQoc3JjZGlyKS9NYWtlZmlsZS5jZmcKLWluY2x1ZGUgJChzcmNkaXIpL01ha2VmaWxlLm1haW50CisKKyMgU29tZSBwcm9qZWN0cyBvdmVycmlkZSBlLmcuLCBfYXV0b3JlY29uZiBoZXJlLgorLWluY2x1ZGUgJChzcmNkaXIpL2NmZy5taworCisjIEFsbG93IGNmZy5tayB0byBvdmVycmlkZSB0aGVzZS4KK19idWlsZC1hdXggPz0gYnVpbGQtYXV4CitfYXV0b3JlY29uZiA/PSBhdXRvcmVjb25mIC12CisKK2luY2x1ZGUgJChzcmNkaXIpL21haW50Lm1rCisKKyMgRW5zdXJlIHRoYXQgJChWRVJTSU9OKSBpcyB1cCB0byBkYXRlIGZvciBkaXN0LXJlbGF0ZWQgdGFyZ2V0cywgYnV0IG5vdAorIyBmb3Igb3RoZXJzOiByZXJ1bm5pbmcgYXV0b3JlY29uZiBhbmQgcmVjb21waWxpbmcgZXZlcnl0aGluZyBpc24ndCBjaGVhcC4KK19oYXZlLWdpdC12ZXJzaW9uLWdlbiA6PSBcCisgICQoc2hlbGwgdGVzdCAtZiAkKHNyY2RpcikvJChfYnVpbGQtYXV4KS9naXQtdmVyc2lvbi1nZW4gJiYgZWNobyB5ZXMpCitpZmVxICgkKF9oYXZlLWdpdC12ZXJzaW9uLWdlbikwLHllcyQoTUFLRUxFVkVMKSkKKyAgX2lzLWRpc3QtdGFyZ2V0ID89ICQoZmlsdGVyLW91dCAlY2xlYW4sIFwKKyAgICAkKGZpbHRlciBtYWludGFpbmVyLSUgZGlzdCUgYWxwaGEgYmV0YSBzdGFibGUsJChNQUtFQ01ER09BTFMpKSkKKyAgX2lzLWluc3RhbGwtdGFyZ2V0ID89ICQoZmlsdGVyLW91dCAlY2hlY2ssICQoZmlsdGVyIGluc3RhbGwlLCQoTUFLRUNNREdPQUxTKSkpCisgIGlmbmVxICgsJChfaXMtZGlzdC10YXJnZXQpJChfaXMtaW5zdGFsbC10YXJnZXQpKQorICAgIF9jdXJyLXZlciA6PSAkKHNoZWxsIGNkICQoc3JjZGlyKQkJCQlcCisgICAgICAgICAgICAgICAgICAgJiYgJChfYnVpbGQtYXV4KS9naXQtdmVyc2lvbi1nZW4JCVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAudGFyYmFsbC12ZXJzaW9uCQkJXAorICAgICAgICAgICAgICAgICAgICAgICAgICQoZ2l0LXZlcnNpb24tZ2VuLXRhZy1zZWQtc2NyaXB0KSkKKyAgICBpZm5lcSAoJChfY3Vyci12ZXIpLCQoVkVSU0lPTikpCisgICAgICBpZmVxICgkKF9jdXJyLXZlciksVU5LTk9XTikKKyAgICAgICAgJChpbmZvIFdBUk5JTkc6IHVuYWJsZSB0byB2ZXJpZnkgaWYgJChWRVJTSU9OKSBpcyB0aGUgY29ycmVjdCB2ZXJzaW9uKQorICAgICAgZWxzZQorICAgICAgICBpZm5lcSAoLCQoX2lzLWluc3RhbGwtdGFyZ2V0KSkKKyAgICAgICAgICAjIEdOVSBDb2RpbmcgU3RhbmRhcmRzIHN0YXRlIHRoYXQgJ21ha2UgaW5zdGFsbCcgc2hvdWxkIG5vdCBjYXVzZQorICAgICAgICAgICMgcmVjb21waWxhdGlvbiBhZnRlciAnbWFrZSBhbGwnLiAgQnV0IGFzIGxvbmcgYXMgY2hhbmdpbmcgdGhlIHZlcnNpb24KKyAgICAgICAgICAjIHN0cmluZyBhbHRlcnMgY29uZmlnLmgsIHRoZSBjb3N0IG9mIGhhdmluZyAnbWFrZSBhbGwnIGFsd2F5cyBoYXZlIGFuCisgICAgICAgICAgIyB1cC10by1kYXRlIHZlcnNpb24gaXMgcHJvaGliaXRpdmUuICBTbywgYXMgYSBjb21wcm9taXNlLCB3ZSBtZXJlbHkKKyAgICAgICAgICAjIHdhcm4gd2hlbiBpbnN0YWxsaW5nIGEgdmVyc2lvbiBzdHJpbmcgdGhhdCBpcyBvdXQgb2YgZGF0ZTsgdGhlIHVzZXIKKyAgICAgICAgICAjIHNob3VsZCBydW4gJ2F1dG9yZWNvbmYnIChvciBzb21ldGhpbmcgbGlrZSAnbWFrZSBkaXN0Y2hlY2snKSB0bworICAgICAgICAgICMgZml4IHRoZSB2ZXJzaW9uLCAnbWFrZSBhbGwnIHRvIHByb3BhZ2F0ZSBpdCwgdGhlbiAnbWFrZSBpbnN0YWxsJy4KKyAgICAgICAgICAkKGluZm8gV0FSTklORzogdmVyc2lvbiBzdHJpbmcgJChWRVJTSU9OKSBpcyBvdXQgb2YgZGF0ZTspCisgICAgICAgICAgJChpbmZvIHJ1biAnJChNQUtFKSBfdmVyc2lvbicgdG8gZml4IGl0KQorICAgICAgICBlbHNlCisgICAgICAgICAgJChpbmZvIElORk86IHJ1bm5pbmcgYXV0b3JlY29uZiBmb3IgbmV3IHZlcnNpb24gc3RyaW5nOiAkKF9jdXJyLXZlcikpCitHTlVtYWtlZmlsZTogX3ZlcnNpb24KKwl0b3VjaCBHTlVtYWtlZmlsZQorICAgICAgICBlbmRpZgorICAgICAgZW5kaWYKKyAgICBlbmRpZgorICBlbmRpZgorZW5kaWYKKworLlBIT05ZOiBfdmVyc2lvbgorX3ZlcnNpb246CisJY2QgJChzcmNkaXIpICYmIHJtIC1yZiBhdXRvbTR0ZS5jYWNoZSAudmVyc2lvbiAmJiAkKF9hdXRvcmVjb25mKQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIE1ha2VmaWxlCiAKIGVsc2UKIAotYWxsOgotCUBlY2hvIFRoZXJlIHNlZW1zIHRvIGJlIG5vIE1ha2VmaWxlIGluIHRoaXMgZGlyZWN0b3J5LgotCUBlY2hvICJZb3UgbXVzdCBydW4gLi9jb25maWd1cmUgYmVmb3JlIHJ1bm5pbmcgXGBtYWtlJy4iCisuREVGQVVMVF9HT0FMIDo9IGFib3J0LWR1ZS10by1uby1tYWtlZmlsZQorc3JjZGlyID0gLgorCisjIFRoZSBwYWNrYWdlIGNhbiBvdmVycmlkZSAuREVGQVVMVF9HT0FMIHRvIHJ1biBhY3Rpb25zIGxpa2UgYXV0b3JlY29uZi4KKy1pbmNsdWRlIC4vY2ZnLm1rCisKKyMgQWxsb3cgY2ZnLm1rIHRvIG92ZXJyaWRlIHRoZXNlLgorX2J1aWxkLWF1eCA/PSBidWlsZC1hdXgKK19hdXRvcmVjb25mID89IGF1dG9yZWNvbmYgLXYKKworaW5jbHVkZSAuL21haW50Lm1rCisKK2lmZXEgKCQoLkRFRkFVTFRfR09BTCksYWJvcnQtZHVlLXRvLW5vLW1ha2VmaWxlKQorJChNQUtFQ01ER09BTFMpOiBhYm9ydC1kdWUtdG8tbm8tbWFrZWZpbGUKK2VuZGlmCisKK2Fib3J0LWR1ZS10by1uby1tYWtlZmlsZToKKwlAZWNobyBUaGVyZSBzZWVtcyB0byBiZSBubyBNYWtlZmlsZSBpbiB0aGlzIGRpcmVjdG9yeS4gICAxPiYyCisJQGVjaG8gIllvdSBtdXN0IHJ1biAuL2NvbmZpZ3VyZSBiZWZvcmUgcnVubmluZyAnbWFrZScuIiAxPiYyCiAJQGV4aXQgMQogCiBlbmRpZgogCiAjIFRlbGwgdmVyc2lvbiAzLjc5IGFuZCB1cCBvZiBHTlUgbWFrZSB0byBub3QgYnVpbGQgZ29hbHMgaW4gdGhpcwotIyBkaXJlY3RvcnkgaW4gcGFyYWxsZWwuICBUaGlzIGlzIG5lY2Vzc2FyeSBpbiBjYXNlIHNvbWVvbmUgdHJpZXMgdG8KLSMgYnVpbGQgbXVsdGlwbGUgdGFyZ2V0cyBvbiBvbmUgY29tbWFuZCBsaW5lLgorIyBkaXJlY3RvcnkgaW4gcGFyYWxsZWwsIGluIGNhc2Ugc29tZW9uZSB0cmllcyB0byBidWlsZCBtdWx0aXBsZQorIyB0YXJnZXRzLCBhbmQgb25lIG9mIHRoZW0gY2FuIGNhdXNlIGEgcmVjdXJzaXZlIHRhcmdldCB0byBiZSBpbnZva2VkLgorCisjIE9ubHkgc2V0IHRoaXMgaWYgQXV0b21ha2UgZG9lc24ndCBwcm92aWRlIGl0LgorQU1fUkVDVVJTSVZFX1RBUkdFVFMgPz0gJChSRUNVUlNJVkVfVEFSR0VUUzotcmVjdXJzaXZlPSkgXAorICAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTOi1yZWN1cnNpdmU9KSBcCisgIGRpc3QgZGlzdGNoZWNrIHRhZ3MgY3RhZ3MKKworQUxMX1JFQ1VSU0lWRV9UQVJHRVRTICs9ICQoQU1fUkVDVVJTSVZFX1RBUkdFVFMpCisKK2lmbmVxICgkKHdvcmQgMiwgJChNQUtFQ01ER09BTFMpKSwgKQoraWZuZXEgKCQoZmlsdGVyICQoQUxMX1JFQ1VSU0lWRV9UQVJHRVRTKSwgJChNQUtFQ01ER09BTFMpKSwgKQogLk5PVFBBUkFMTEVMOgorZW5kaWYKK2VuZGlmCmRpZmYgLS1naXQgYS9JTlNUQUxMIGIvSU5TVEFMTAppbmRleCAyM2U1ZjI1Li42ZTkwZTA3IDEwMDY0NAotLS0gYS9JTlNUQUxMCisrKyBiL0lOU1RBTEwKQEAgLTEsMTYgKzEsMjUgQEAKIEluc3RhbGxhdGlvbiBJbnN0cnVjdGlvbnMKICoqKioqKioqKioqKioqKioqKioqKioqKioKIAotQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDA0LCAyMDA1IEZyZWUKLVNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0NvcHlyaWdodCAoQykgMTk5NC0xOTk2LCAxOTk5LTIwMDIsIDIwMDQtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCiAKLVRoaXMgZmlsZSBpcyBmcmVlIGRvY3VtZW50YXRpb247IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKLXVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KKyAgIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCithcmUgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQKK25vdGljZSBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBvZmZlcmVkIGFzLWlzLAord2l0aG91dCB3YXJyYW50eSBvZiBhbnkga2luZC4KIAogQmFzaWMgSW5zdGFsbGF0aW9uCiA9PT09PT09PT09PT09PT09PT0KIAotVGhlc2UgYXJlIGdlbmVyaWMgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucy4KKyAgIEJyaWVmbHksIHRoZSBzaGVsbCBjb21tYW5kcyBgLi9jb25maWd1cmU7IG1ha2U7IG1ha2UgaW5zdGFsbCcgc2hvdWxkCitjb25maWd1cmUsIGJ1aWxkLCBhbmQgaW5zdGFsbCB0aGlzIHBhY2thZ2UuICBUaGUgZm9sbG93aW5nCittb3JlLWRldGFpbGVkIGluc3RydWN0aW9ucyBhcmUgZ2VuZXJpYzsgc2VlIHRoZSBgUkVBRE1FJyBmaWxlIGZvcgoraW5zdHJ1Y3Rpb25zIHNwZWNpZmljIHRvIHRoaXMgcGFja2FnZS4gIFNvbWUgcGFja2FnZXMgcHJvdmlkZSB0aGlzCitgSU5TVEFMTCcgZmlsZSBidXQgZG8gbm90IGltcGxlbWVudCBhbGwgb2YgdGhlIGZlYXR1cmVzIGRvY3VtZW50ZWQKK2JlbG93LiAgVGhlIGxhY2sgb2YgYW4gb3B0aW9uYWwgZmVhdHVyZSBpbiBhIGdpdmVuIHBhY2thZ2UgaXMgbm90CituZWNlc3NhcmlseSBhIGJ1Zy4gIE1vcmUgcmVjb21tZW5kYXRpb25zIGZvciBHTlUgcGFja2FnZXMgY2FuIGJlIGZvdW5kCitpbiAqbm90ZSBNYWtlZmlsZSBDb252ZW50aW9uczogKHN0YW5kYXJkcylNYWtlZmlsZSBDb252ZW50aW9ucy4KIAogICAgVGhlIGBjb25maWd1cmUnIHNoZWxsIHNjcmlwdCBhdHRlbXB0cyB0byBndWVzcyBjb3JyZWN0IHZhbHVlcyBmb3IKIHZhcmlvdXMgc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgdXNlZCBkdXJpbmcgY29tcGlsYXRpb24uICBJdCB1c2VzCkBAIC0yMyw5ICszMiw5IEBACiAKICAgIEl0IGNhbiBhbHNvIHVzZSBhbiBvcHRpb25hbCBmaWxlICh0eXBpY2FsbHkgY2FsbGVkIGBjb25maWcuY2FjaGUnCiBhbmQgZW5hYmxlZCB3aXRoIGAtLWNhY2hlLWZpbGU9Y29uZmlnLmNhY2hlJyBvciBzaW1wbHkgYC1DJykgdGhhdCBzYXZlcwotdGhlIHJlc3VsdHMgb2YgaXRzIHRlc3RzIHRvIHNwZWVkIHVwIHJlY29uZmlndXJpbmcuICAoQ2FjaGluZyBpcwordGhlIHJlc3VsdHMgb2YgaXRzIHRlc3RzIHRvIHNwZWVkIHVwIHJlY29uZmlndXJpbmcuICBDYWNoaW5nIGlzCiBkaXNhYmxlZCBieSBkZWZhdWx0IHRvIHByZXZlbnQgcHJvYmxlbXMgd2l0aCBhY2NpZGVudGFsIHVzZSBvZiBzdGFsZQotY2FjaGUgZmlsZXMuKQorY2FjaGUgZmlsZXMuCiAKICAgIElmIHlvdSBuZWVkIHRvIGRvIHVudXN1YWwgdGhpbmdzIHRvIGNvbXBpbGUgdGhlIHBhY2thZ2UsIHBsZWFzZSB0cnkKIHRvIGZpZ3VyZSBvdXQgaG93IGBjb25maWd1cmUnIGNvdWxkIGNoZWNrIHdoZXRoZXIgdG8gZG8gdGhlbSwgYW5kIG1haWwKQEAgLTM1LDMwICs0NCwzNyBAQAogbWF5IHJlbW92ZSBvciBlZGl0IGl0LgogCiAgICBUaGUgZmlsZSBgY29uZmlndXJlLmFjJyAob3IgYGNvbmZpZ3VyZS5pbicpIGlzIHVzZWQgdG8gY3JlYXRlCi1gY29uZmlndXJlJyBieSBhIHByb2dyYW0gY2FsbGVkIGBhdXRvY29uZicuICBZb3Ugb25seSBuZWVkCi1gY29uZmlndXJlLmFjJyBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgaXQgb3IgcmVnZW5lcmF0ZSBgY29uZmlndXJlJyB1c2luZwotYSBuZXdlciB2ZXJzaW9uIG9mIGBhdXRvY29uZicuCitgY29uZmlndXJlJyBieSBhIHByb2dyYW0gY2FsbGVkIGBhdXRvY29uZicuICBZb3UgbmVlZCBgY29uZmlndXJlLmFjJyBpZgoreW91IHdhbnQgdG8gY2hhbmdlIGl0IG9yIHJlZ2VuZXJhdGUgYGNvbmZpZ3VyZScgdXNpbmcgYSBuZXdlciB2ZXJzaW9uCitvZiBgYXV0b2NvbmYnLgogCi1UaGUgc2ltcGxlc3Qgd2F5IHRvIGNvbXBpbGUgdGhpcyBwYWNrYWdlIGlzOgorICAgVGhlIHNpbXBsZXN0IHdheSB0byBjb21waWxlIHRoaXMgcGFja2FnZSBpczoKIAogICAxLiBgY2QnIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgcGFja2FnZSdzIHNvdXJjZSBjb2RlIGFuZCB0eXBlCi0gICAgIGAuL2NvbmZpZ3VyZScgdG8gY29uZmlndXJlIHRoZSBwYWNrYWdlIGZvciB5b3VyIHN5c3RlbS4gIElmIHlvdSdyZQotICAgICB1c2luZyBgY3NoJyBvbiBhbiBvbGQgdmVyc2lvbiBvZiBTeXN0ZW0gViwgeW91IG1pZ2h0IG5lZWQgdG8gdHlwZQotICAgICBgc2ggLi9jb25maWd1cmUnIGluc3RlYWQgdG8gcHJldmVudCBgY3NoJyBmcm9tIHRyeWluZyB0byBleGVjdXRlCi0gICAgIGBjb25maWd1cmUnIGl0c2VsZi4KKyAgICAgYC4vY29uZmlndXJlJyB0byBjb25maWd1cmUgdGhlIHBhY2thZ2UgZm9yIHlvdXIgc3lzdGVtLgogCi0gICAgIFJ1bm5pbmcgYGNvbmZpZ3VyZScgdGFrZXMgYXdoaWxlLiAgV2hpbGUgcnVubmluZywgaXQgcHJpbnRzIHNvbWUKLSAgICAgbWVzc2FnZXMgdGVsbGluZyB3aGljaCBmZWF0dXJlcyBpdCBpcyBjaGVja2luZyBmb3IuCisgICAgIFJ1bm5pbmcgYGNvbmZpZ3VyZScgbWlnaHQgdGFrZSBhIHdoaWxlLiAgV2hpbGUgcnVubmluZywgaXQgcHJpbnRzCisgICAgIHNvbWUgbWVzc2FnZXMgdGVsbGluZyB3aGljaCBmZWF0dXJlcyBpdCBpcyBjaGVja2luZyBmb3IuCiAKICAgMi4gVHlwZSBgbWFrZScgdG8gY29tcGlsZSB0aGUgcGFja2FnZS4KIAogICAzLiBPcHRpb25hbGx5LCB0eXBlIGBtYWtlIGNoZWNrJyB0byBydW4gYW55IHNlbGYtdGVzdHMgdGhhdCBjb21lIHdpdGgKLSAgICAgdGhlIHBhY2thZ2UuCisgICAgIHRoZSBwYWNrYWdlLCBnZW5lcmFsbHkgdXNpbmcgdGhlIGp1c3QtYnVpbHQgdW5pbnN0YWxsZWQgYmluYXJpZXMuCiAKICAgNC4gVHlwZSBgbWFrZSBpbnN0YWxsJyB0byBpbnN0YWxsIHRoZSBwcm9ncmFtcyBhbmQgYW55IGRhdGEgZmlsZXMgYW5kCi0gICAgIGRvY3VtZW50YXRpb24uCisgICAgIGRvY3VtZW50YXRpb24uICBXaGVuIGluc3RhbGxpbmcgaW50byBhIHByZWZpeCBvd25lZCBieSByb290LCBpdCBpcworICAgICByZWNvbW1lbmRlZCB0aGF0IHRoZSBwYWNrYWdlIGJlIGNvbmZpZ3VyZWQgYW5kIGJ1aWx0IGFzIGEgcmVndWxhcgorICAgICB1c2VyLCBhbmQgb25seSB0aGUgYG1ha2UgaW5zdGFsbCcgcGhhc2UgZXhlY3V0ZWQgd2l0aCByb290CisgICAgIHByaXZpbGVnZXMuCiAKLSAgNS4gWW91IGNhbiByZW1vdmUgdGhlIHByb2dyYW0gYmluYXJpZXMgYW5kIG9iamVjdCBmaWxlcyBmcm9tIHRoZQorICA1LiBPcHRpb25hbGx5LCB0eXBlIGBtYWtlIGluc3RhbGxjaGVjaycgdG8gcmVwZWF0IGFueSBzZWxmLXRlc3RzLCBidXQKKyAgICAgdGhpcyB0aW1lIHVzaW5nIHRoZSBiaW5hcmllcyBpbiB0aGVpciBmaW5hbCBpbnN0YWxsZWQgbG9jYXRpb24uCisgICAgIFRoaXMgdGFyZ2V0IGRvZXMgbm90IGluc3RhbGwgYW55dGhpbmcuICBSdW5uaW5nIHRoaXMgdGFyZ2V0IGFzIGEKKyAgICAgcmVndWxhciB1c2VyLCBwYXJ0aWN1bGFybHkgaWYgdGhlIHByaW9yIGBtYWtlIGluc3RhbGwnIHJlcXVpcmVkCisgICAgIHJvb3QgcHJpdmlsZWdlcywgdmVyaWZpZXMgdGhhdCB0aGUgaW5zdGFsbGF0aW9uIGNvbXBsZXRlZAorICAgICBjb3JyZWN0bHkuCisKKyAgNi4gWW91IGNhbiByZW1vdmUgdGhlIHByb2dyYW0gYmluYXJpZXMgYW5kIG9iamVjdCBmaWxlcyBmcm9tIHRoZQogICAgICBzb3VyY2UgY29kZSBkaXJlY3RvcnkgYnkgdHlwaW5nIGBtYWtlIGNsZWFuJy4gIFRvIGFsc28gcmVtb3ZlIHRoZQogICAgICBmaWxlcyB0aGF0IGBjb25maWd1cmUnIGNyZWF0ZWQgKHNvIHlvdSBjYW4gY29tcGlsZSB0aGUgcGFja2FnZSBmb3IKICAgICAgYSBkaWZmZXJlbnQga2luZCBvZiBjb21wdXRlciksIHR5cGUgYG1ha2UgZGlzdGNsZWFuJy4gIFRoZXJlIGlzCkBAIC02Nyw0NSArODMsNjkgQEAKICAgICAgYWxsIHNvcnRzIG9mIG90aGVyIHByb2dyYW1zIGluIG9yZGVyIHRvIHJlZ2VuZXJhdGUgZmlsZXMgdGhhdCBjYW1lCiAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KIAorICA3LiBPZnRlbiwgeW91IGNhbiBhbHNvIHR5cGUgYG1ha2UgdW5pbnN0YWxsJyB0byByZW1vdmUgdGhlIGluc3RhbGxlZAorICAgICBmaWxlcyBhZ2Fpbi4gIEluIHByYWN0aWNlLCBub3QgYWxsIHBhY2thZ2VzIGhhdmUgdGVzdGVkIHRoYXQKKyAgICAgdW5pbnN0YWxsYXRpb24gd29ya3MgY29ycmVjdGx5LCBldmVuIHRob3VnaCBpdCBpcyByZXF1aXJlZCBieSB0aGUKKyAgICAgR05VIENvZGluZyBTdGFuZGFyZHMuCisKKyAgOC4gU29tZSBwYWNrYWdlcywgcGFydGljdWxhcmx5IHRob3NlIHRoYXQgdXNlIEF1dG9tYWtlLCBwcm92aWRlIGBtYWtlCisgICAgIGRpc3RjaGVjaycsIHdoaWNoIGNhbiBieSB1c2VkIGJ5IGRldmVsb3BlcnMgdG8gdGVzdCB0aGF0IGFsbCBvdGhlcgorICAgICB0YXJnZXRzIGxpa2UgYG1ha2UgaW5zdGFsbCcgYW5kIGBtYWtlIHVuaW5zdGFsbCcgd29yayBjb3JyZWN0bHkuCisgICAgIFRoaXMgdGFyZ2V0IGlzIGdlbmVyYWxseSBub3QgcnVuIGJ5IGVuZCB1c2Vycy4KKwogQ29tcGlsZXJzIGFuZCBPcHRpb25zCiA9PT09PT09PT09PT09PT09PT09PT0KIAotU29tZSBzeXN0ZW1zIHJlcXVpcmUgdW51c3VhbCBvcHRpb25zIGZvciBjb21waWxhdGlvbiBvciBsaW5raW5nIHRoYXQgdGhlCi1gY29uZmlndXJlJyBzY3JpcHQgZG9lcyBub3Qga25vdyBhYm91dC4gIFJ1biBgLi9jb25maWd1cmUgLS1oZWxwJyBmb3IKLWRldGFpbHMgb24gc29tZSBvZiB0aGUgcGVydGluZW50IGVudmlyb25tZW50IHZhcmlhYmxlcy4KKyAgIFNvbWUgc3lzdGVtcyByZXF1aXJlIHVudXN1YWwgb3B0aW9ucyBmb3IgY29tcGlsYXRpb24gb3IgbGlua2luZyB0aGF0Cit0aGUgYGNvbmZpZ3VyZScgc2NyaXB0IGRvZXMgbm90IGtub3cgYWJvdXQuICBSdW4gYC4vY29uZmlndXJlIC0taGVscCcKK2ZvciBkZXRhaWxzIG9uIHNvbWUgb2YgdGhlIHBlcnRpbmVudCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCiAKICAgIFlvdSBjYW4gZ2l2ZSBgY29uZmlndXJlJyBpbml0aWFsIHZhbHVlcyBmb3IgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCiBieSBzZXR0aW5nIHZhcmlhYmxlcyBpbiB0aGUgY29tbWFuZCBsaW5lIG9yIGluIHRoZSBlbnZpcm9ubWVudC4gIEhlcmUKIGlzIGFuIGV4YW1wbGU6CiAKLSAgICAgLi9jb25maWd1cmUgQ0M9Yzg5IENGTEFHUz0tTzIgTElCUz0tbHBvc2l4CisgICAgIC4vY29uZmlndXJlIENDPWM5OSBDRkxBR1M9LWcgTElCUz0tbHBvc2l4CiAKICAgICpOb3RlIERlZmluaW5nIFZhcmlhYmxlczo6LCBmb3IgbW9yZSBkZXRhaWxzLgogCiBDb21waWxpbmcgRm9yIE11bHRpcGxlIEFyY2hpdGVjdHVyZXMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1Zb3UgY2FuIGNvbXBpbGUgdGhlIHBhY2thZ2UgZm9yIG1vcmUgdGhhbiBvbmUga2luZCBvZiBjb21wdXRlciBhdCB0aGUKKyAgIFlvdSBjYW4gY29tcGlsZSB0aGUgcGFja2FnZSBmb3IgbW9yZSB0aGFuIG9uZSBraW5kIG9mIGNvbXB1dGVyIGF0IHRoZQogc2FtZSB0aW1lLCBieSBwbGFjaW5nIHRoZSBvYmplY3QgZmlsZXMgZm9yIGVhY2ggYXJjaGl0ZWN0dXJlIGluIHRoZWlyCi1vd24gZGlyZWN0b3J5LiAgVG8gZG8gdGhpcywgeW91IG11c3QgdXNlIGEgdmVyc2lvbiBvZiBgbWFrZScgdGhhdAotc3VwcG9ydHMgdGhlIGBWUEFUSCcgdmFyaWFibGUsIHN1Y2ggYXMgR05VIGBtYWtlJy4gIGBjZCcgdG8gdGhlCitvd24gZGlyZWN0b3J5LiAgVG8gZG8gdGhpcywgeW91IGNhbiB1c2UgR05VIGBtYWtlJy4gIGBjZCcgdG8gdGhlCiBkaXJlY3Rvcnkgd2hlcmUgeW91IHdhbnQgdGhlIG9iamVjdCBmaWxlcyBhbmQgZXhlY3V0YWJsZXMgdG8gZ28gYW5kIHJ1bgogdGhlIGBjb25maWd1cmUnIHNjcmlwdC4gIGBjb25maWd1cmUnIGF1dG9tYXRpY2FsbHkgY2hlY2tzIGZvciB0aGUKLXNvdXJjZSBjb2RlIGluIHRoZSBkaXJlY3RvcnkgdGhhdCBgY29uZmlndXJlJyBpcyBpbiBhbmQgaW4gYC4uJy4KK3NvdXJjZSBjb2RlIGluIHRoZSBkaXJlY3RvcnkgdGhhdCBgY29uZmlndXJlJyBpcyBpbiBhbmQgaW4gYC4uJy4gIFRoaXMKK2lzIGtub3duIGFzIGEgIlZQQVRIIiBidWlsZC4KIAotICAgSWYgeW91IGhhdmUgdG8gdXNlIGEgYG1ha2UnIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYFZQQVRIJwotdmFyaWFibGUsIHlvdSBoYXZlIHRvIGNvbXBpbGUgdGhlIHBhY2thZ2UgZm9yIG9uZSBhcmNoaXRlY3R1cmUgYXQgYQotdGltZSBpbiB0aGUgc291cmNlIGNvZGUgZGlyZWN0b3J5LiAgQWZ0ZXIgeW91IGhhdmUgaW5zdGFsbGVkIHRoZQotcGFja2FnZSBmb3Igb25lIGFyY2hpdGVjdHVyZSwgdXNlIGBtYWtlIGRpc3RjbGVhbicgYmVmb3JlIHJlY29uZmlndXJpbmcKLWZvciBhbm90aGVyIGFyY2hpdGVjdHVyZS4KKyAgIFdpdGggYSBub24tR05VIGBtYWtlJywgaXQgaXMgc2FmZXIgdG8gY29tcGlsZSB0aGUgcGFja2FnZSBmb3Igb25lCithcmNoaXRlY3R1cmUgYXQgYSB0aW1lIGluIHRoZSBzb3VyY2UgY29kZSBkaXJlY3RvcnkuICBBZnRlciB5b3UgaGF2ZQoraW5zdGFsbGVkIHRoZSBwYWNrYWdlIGZvciBvbmUgYXJjaGl0ZWN0dXJlLCB1c2UgYG1ha2UgZGlzdGNsZWFuJyBiZWZvcmUKK3JlY29uZmlndXJpbmcgZm9yIGFub3RoZXIgYXJjaGl0ZWN0dXJlLgorCisgICBPbiBNYWNPUyBYIDEwLjUgYW5kIGxhdGVyIHN5c3RlbXMsIHlvdSBjYW4gY3JlYXRlIGxpYnJhcmllcyBhbmQKK2V4ZWN1dGFibGVzIHRoYXQgd29yayBvbiBtdWx0aXBsZSBzeXN0ZW0gdHlwZXMtLWtub3duIGFzICJmYXQiIG9yCisidW5pdmVyc2FsIiBiaW5hcmllcy0tYnkgc3BlY2lmeWluZyBtdWx0aXBsZSBgLWFyY2gnIG9wdGlvbnMgdG8gdGhlCitjb21waWxlciBidXQgb25seSBhIHNpbmdsZSBgLWFyY2gnIG9wdGlvbiB0byB0aGUgcHJlcHJvY2Vzc29yLiAgTGlrZQordGhpczoKKworICAgICAuL2NvbmZpZ3VyZSBDQz0iZ2NjIC1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IC1hcmNoIHBwYyAtYXJjaCBwcGM2NCIgXAorICAgICAgICAgICAgICAgICBDWFg9ImcrKyAtYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCAtYXJjaCBwcGMgLWFyY2ggcHBjNjQiIFwKKyAgICAgICAgICAgICAgICAgQ1BQPSJnY2MgLUUiIENYWENQUD0iZysrIC1FIgorCisgICBUaGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIHByb2R1Y2Ugd29ya2luZyBvdXRwdXQgaW4gYWxsIGNhc2VzLCB5b3UKK21heSBoYXZlIHRvIGJ1aWxkIG9uZSBhcmNoaXRlY3R1cmUgYXQgYSB0aW1lIGFuZCBjb21iaW5lIHRoZSByZXN1bHRzCit1c2luZyB0aGUgYGxpcG8nIHRvb2wgaWYgeW91IGhhdmUgcHJvYmxlbXMuCiAKIEluc3RhbGxhdGlvbiBOYW1lcwogPT09PT09PT09PT09PT09PT09CiAKLUJ5IGRlZmF1bHQsIGBtYWtlIGluc3RhbGwnIGluc3RhbGxzIHRoZSBwYWNrYWdlJ3MgY29tbWFuZHMgdW5kZXIKKyAgIEJ5IGRlZmF1bHQsIGBtYWtlIGluc3RhbGwnIGluc3RhbGxzIHRoZSBwYWNrYWdlJ3MgY29tbWFuZHMgdW5kZXIKIGAvdXNyL2xvY2FsL2JpbicsIGluY2x1ZGUgZmlsZXMgdW5kZXIgYC91c3IvbG9jYWwvaW5jbHVkZScsIGV0Yy4gIFlvdQogY2FuIHNwZWNpZnkgYW4gaW5zdGFsbGF0aW9uIHByZWZpeCBvdGhlciB0aGFuIGAvdXNyL2xvY2FsJyBieSBnaXZpbmcKLWBjb25maWd1cmUnIHRoZSBvcHRpb24gYC0tcHJlZml4PVBSRUZJWCcuCitgY29uZmlndXJlJyB0aGUgb3B0aW9uIGAtLXByZWZpeD1QUkVGSVgnLCB3aGVyZSBQUkVGSVggbXVzdCBiZSBhbgorYWJzb2x1dGUgZmlsZSBuYW1lLgogCiAgICBZb3UgY2FuIHNwZWNpZnkgc2VwYXJhdGUgaW5zdGFsbGF0aW9uIHByZWZpeGVzIGZvcgogYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZpbGVzIGFuZCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMuICBJZiB5b3UKQEAgLTExNiwxNiArMTU2LDQ3IEBACiAgICBJbiBhZGRpdGlvbiwgaWYgeW91IHVzZSBhbiB1bnVzdWFsIGRpcmVjdG9yeSBsYXlvdXQgeW91IGNhbiBnaXZlCiBvcHRpb25zIGxpa2UgYC0tYmluZGlyPURJUicgdG8gc3BlY2lmeSBkaWZmZXJlbnQgdmFsdWVzIGZvciBwYXJ0aWN1bGFyCiBraW5kcyBvZiBmaWxlcy4gIFJ1biBgY29uZmlndXJlIC0taGVscCcgZm9yIGEgbGlzdCBvZiB0aGUgZGlyZWN0b3JpZXMKLXlvdSBjYW4gc2V0IGFuZCB3aGF0IGtpbmRzIG9mIGZpbGVzIGdvIGluIHRoZW0uCit5b3UgY2FuIHNldCBhbmQgd2hhdCBraW5kcyBvZiBmaWxlcyBnbyBpbiB0aGVtLiAgSW4gZ2VuZXJhbCwgdGhlCitkZWZhdWx0IGZvciB0aGVzZSBvcHRpb25zIGlzIGV4cHJlc3NlZCBpbiB0ZXJtcyBvZiBgJHtwcmVmaXh9Jywgc28gdGhhdAorc3BlY2lmeWluZyBqdXN0IGAtLXByZWZpeCcgd2lsbCBhZmZlY3QgYWxsIG9mIHRoZSBvdGhlciBkaXJlY3RvcnkKK3NwZWNpZmljYXRpb25zIHRoYXQgd2VyZSBub3QgZXhwbGljaXRseSBwcm92aWRlZC4KKworICAgVGhlIG1vc3QgcG9ydGFibGUgd2F5IHRvIGFmZmVjdCBpbnN0YWxsYXRpb24gbG9jYXRpb25zIGlzIHRvIHBhc3MgdGhlCitjb3JyZWN0IGxvY2F0aW9ucyB0byBgY29uZmlndXJlJzsgaG93ZXZlciwgbWFueSBwYWNrYWdlcyBwcm92aWRlIG9uZSBvcgorYm90aCBvZiB0aGUgZm9sbG93aW5nIHNob3J0Y3V0cyBvZiBwYXNzaW5nIHZhcmlhYmxlIGFzc2lnbm1lbnRzIHRvIHRoZQorYG1ha2UgaW5zdGFsbCcgY29tbWFuZCBsaW5lIHRvIGNoYW5nZSBpbnN0YWxsYXRpb24gbG9jYXRpb25zIHdpdGhvdXQKK2hhdmluZyB0byByZWNvbmZpZ3VyZSBvciByZWNvbXBpbGUuCisKKyAgIFRoZSBmaXJzdCBtZXRob2QgaW52b2x2ZXMgcHJvdmlkaW5nIGFuIG92ZXJyaWRlIHZhcmlhYmxlIGZvciBlYWNoCithZmZlY3RlZCBkaXJlY3RvcnkuICBGb3IgZXhhbXBsZSwgYG1ha2UgaW5zdGFsbAorcHJlZml4PS9hbHRlcm5hdGUvZGlyZWN0b3J5JyB3aWxsIGNob29zZSBhbiBhbHRlcm5hdGUgbG9jYXRpb24gZm9yIGFsbAorZGlyZWN0b3J5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHRoYXQgd2VyZSBleHByZXNzZWQgaW4gdGVybXMgb2YKK2Ake3ByZWZpeH0nLiAgQW55IGRpcmVjdG9yaWVzIHRoYXQgd2VyZSBzcGVjaWZpZWQgZHVyaW5nIGBjb25maWd1cmUnLAorYnV0IG5vdCBpbiB0ZXJtcyBvZiBgJHtwcmVmaXh9JywgbXVzdCBlYWNoIGJlIG92ZXJyaWRkZW4gYXQgaW5zdGFsbAordGltZSBmb3IgdGhlIGVudGlyZSBpbnN0YWxsYXRpb24gdG8gYmUgcmVsb2NhdGVkLiAgVGhlIGFwcHJvYWNoIG9mCittYWtlZmlsZSB2YXJpYWJsZSBvdmVycmlkZXMgZm9yIGVhY2ggZGlyZWN0b3J5IHZhcmlhYmxlIGlzIHJlcXVpcmVkIGJ5Cit0aGUgR05VIENvZGluZyBTdGFuZGFyZHMsIGFuZCBpZGVhbGx5IGNhdXNlcyBubyByZWNvbXBpbGF0aW9uLgorSG93ZXZlciwgc29tZSBwbGF0Zm9ybXMgaGF2ZSBrbm93biBsaW1pdGF0aW9ucyB3aXRoIHRoZSBzZW1hbnRpY3Mgb2YKK3NoYXJlZCBsaWJyYXJpZXMgdGhhdCBlbmQgdXAgcmVxdWlyaW5nIHJlY29tcGlsYXRpb24gd2hlbiB1c2luZyB0aGlzCittZXRob2QsIHBhcnRpY3VsYXJseSBub3RpY2VhYmxlIGluIHBhY2thZ2VzIHRoYXQgdXNlIEdOVSBMaWJ0b29sLgorCisgICBUaGUgc2Vjb25kIG1ldGhvZCBpbnZvbHZlcyBwcm92aWRpbmcgdGhlIGBERVNURElSJyB2YXJpYWJsZS4gIEZvcgorZXhhbXBsZSwgYG1ha2UgaW5zdGFsbCBERVNURElSPS9hbHRlcm5hdGUvZGlyZWN0b3J5JyB3aWxsIHByZXBlbmQKK2AvYWx0ZXJuYXRlL2RpcmVjdG9yeScgYmVmb3JlIGFsbCBpbnN0YWxsYXRpb24gbmFtZXMuICBUaGUgYXBwcm9hY2ggb2YKK2BERVNURElSJyBvdmVycmlkZXMgaXMgbm90IHJlcXVpcmVkIGJ5IHRoZSBHTlUgQ29kaW5nIFN0YW5kYXJkcywgYW5kCitkb2VzIG5vdCB3b3JrIG9uIHBsYXRmb3JtcyB0aGF0IGhhdmUgZHJpdmUgbGV0dGVycy4gIE9uIHRoZSBvdGhlciBoYW5kLAoraXQgZG9lcyBiZXR0ZXIgYXQgYXZvaWRpbmcgcmVjb21waWxhdGlvbiBpc3N1ZXMsIGFuZCB3b3JrcyB3ZWxsIGV2ZW4KK3doZW4gc29tZSBkaXJlY3Rvcnkgb3B0aW9ucyB3ZXJlIG5vdCBzcGVjaWZpZWQgaW4gdGVybXMgb2YgYCR7cHJlZml4fScKK2F0IGBjb25maWd1cmUnIHRpbWUuCisKK09wdGlvbmFsIEZlYXR1cmVzCis9PT09PT09PT09PT09PT09PQogCiAgICBJZiB0aGUgcGFja2FnZSBzdXBwb3J0cyBpdCwgeW91IGNhbiBjYXVzZSBwcm9ncmFtcyB0byBiZSBpbnN0YWxsZWQKIHdpdGggYW4gZXh0cmEgcHJlZml4IG9yIHN1ZmZpeCBvbiB0aGVpciBuYW1lcyBieSBnaXZpbmcgYGNvbmZpZ3VyZScgdGhlCiBvcHRpb24gYC0tcHJvZ3JhbS1wcmVmaXg9UFJFRklYJyBvciBgLS1wcm9ncmFtLXN1ZmZpeD1TVUZGSVgnLgogCi1PcHRpb25hbCBGZWF0dXJlcwotPT09PT09PT09PT09PT09PT0KLQotU29tZSBwYWNrYWdlcyBwYXkgYXR0ZW50aW9uIHRvIGAtLWVuYWJsZS1GRUFUVVJFJyBvcHRpb25zIHRvCisgICBTb21lIHBhY2thZ2VzIHBheSBhdHRlbnRpb24gdG8gYC0tZW5hYmxlLUZFQVRVUkUnIG9wdGlvbnMgdG8KIGBjb25maWd1cmUnLCB3aGVyZSBGRUFUVVJFIGluZGljYXRlcyBhbiBvcHRpb25hbCBwYXJ0IG9mIHRoZSBwYWNrYWdlLgogVGhleSBtYXkgYWxzbyBwYXkgYXR0ZW50aW9uIHRvIGAtLXdpdGgtUEFDS0FHRScgb3B0aW9ucywgd2hlcmUgUEFDS0FHRQogaXMgc29tZXRoaW5nIGxpa2UgYGdudS1hcycgb3IgYHgnIChmb3IgdGhlIFggV2luZG93IFN5c3RlbSkuICBUaGUKQEAgLTEzNywxNCArMjA4LDU4IEBACiB5b3UgY2FuIHVzZSB0aGUgYGNvbmZpZ3VyZScgb3B0aW9ucyBgLS14LWluY2x1ZGVzPURJUicgYW5kCiBgLS14LWxpYnJhcmllcz1ESVInIHRvIHNwZWNpZnkgdGhlaXIgbG9jYXRpb25zLgogCisgICBTb21lIHBhY2thZ2VzIG9mZmVyIHRoZSBhYmlsaXR5IHRvIGNvbmZpZ3VyZSBob3cgdmVyYm9zZSB0aGUKK2V4ZWN1dGlvbiBvZiBgbWFrZScgd2lsbCBiZS4gIEZvciB0aGVzZSBwYWNrYWdlcywgcnVubmluZyBgLi9jb25maWd1cmUKKy0tZW5hYmxlLXNpbGVudC1ydWxlcycgc2V0cyB0aGUgZGVmYXVsdCB0byBtaW5pbWFsIG91dHB1dCwgd2hpY2ggY2FuIGJlCitvdmVycmlkZGVuIHdpdGggYG1ha2UgVj0xJzsgd2hpbGUgcnVubmluZyBgLi9jb25maWd1cmUKKy0tZGlzYWJsZS1zaWxlbnQtcnVsZXMnIHNldHMgdGhlIGRlZmF1bHQgdG8gdmVyYm9zZSwgd2hpY2ggY2FuIGJlCitvdmVycmlkZGVuIHdpdGggYG1ha2UgVj0wJy4KKworUGFydGljdWxhciBzeXN0ZW1zCis9PT09PT09PT09PT09PT09PT0KKworICAgT24gSFAtVVgsIHRoZSBkZWZhdWx0IEMgY29tcGlsZXIgaXMgbm90IEFOU0kgQyBjb21wYXRpYmxlLiAgSWYgR05VCitDQyBpcyBub3QgaW5zdGFsbGVkLCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGZvbGxvd2luZyBvcHRpb25zIGluCitvcmRlciB0byB1c2UgYW4gQU5TSSBDIGNvbXBpbGVyOgorCisgICAgIC4vY29uZmlndXJlIENDPSJjYyAtQWUgLURfWE9QRU5fU09VUkNFPTUwMCIKKworYW5kIGlmIHRoYXQgZG9lc24ndCB3b3JrLCBpbnN0YWxsIHByZS1idWlsdCBiaW5hcmllcyBvZiBHQ0MgZm9yIEhQLVVYLgorCisgICBIUC1VWCBgbWFrZScgdXBkYXRlcyB0YXJnZXRzIHdoaWNoIGhhdmUgdGhlIHNhbWUgdGltZSBzdGFtcHMgYXMKK3RoZWlyIHByZXJlcXVpc2l0ZXMsIHdoaWNoIG1ha2VzIGl0IGdlbmVyYWxseSB1bnVzYWJsZSB3aGVuIHNoaXBwZWQKK2dlbmVyYXRlZCBmaWxlcyBzdWNoIGFzIGBjb25maWd1cmUnIGFyZSBpbnZvbHZlZC4gIFVzZSBHTlUgYG1ha2UnCitpbnN0ZWFkLgorCisgICBPbiBPU0YvMSBhLmsuYS4gVHJ1NjQsIHNvbWUgdmVyc2lvbnMgb2YgdGhlIGRlZmF1bHQgQyBjb21waWxlciBjYW5ub3QKK3BhcnNlIGl0cyBgPHdjaGFyLmg+JyBoZWFkZXIgZmlsZS4gIFRoZSBvcHRpb24gYC1ub2R0aycgY2FuIGJlIHVzZWQgYXMKK2Egd29ya2Fyb3VuZC4gIElmIEdOVSBDQyBpcyBub3QgaW5zdGFsbGVkLCBpdCBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQKK3RvIHRyeQorCisgICAgIC4vY29uZmlndXJlIENDPSJjYyIKKworYW5kIGlmIHRoYXQgZG9lc24ndCB3b3JrLCB0cnkKKworICAgICAuL2NvbmZpZ3VyZSBDQz0iY2MgLW5vZHRrIgorCisgICBPbiBTb2xhcmlzLCBkb24ndCBwdXQgYC91c3IvdWNiJyBlYXJseSBpbiB5b3VyIGBQQVRIJy4gIFRoaXMKK2RpcmVjdG9yeSBjb250YWlucyBzZXZlcmFsIGR5c2Z1bmN0aW9uYWwgcHJvZ3JhbXM7IHdvcmtpbmcgdmFyaWFudHMgb2YKK3RoZXNlIHByb2dyYW1zIGFyZSBhdmFpbGFibGUgaW4gYC91c3IvYmluJy4gIFNvLCBpZiB5b3UgbmVlZCBgL3Vzci91Y2InCitpbiB5b3VyIGBQQVRIJywgcHV0IGl0IF9hZnRlcl8gYC91c3IvYmluJy4KKworICAgT24gSGFpa3UsIHNvZnR3YXJlIGluc3RhbGxlZCBmb3IgYWxsIHVzZXJzIGdvZXMgaW4gYC9ib290L2NvbW1vbicsCitub3QgYC91c3IvbG9jYWwnLiAgSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKworICAgICAuL2NvbmZpZ3VyZSAtLXByZWZpeD0vYm9vdC9jb21tb24KKwogU3BlY2lmeWluZyB0aGUgU3lzdGVtIFR5cGUKID09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZXJlIG1heSBiZSBzb21lIGZlYXR1cmVzIGBjb25maWd1cmUnIGNhbm5vdCBmaWd1cmUgb3V0IGF1dG9tYXRpY2FsbHksCi1idXQgbmVlZHMgdG8gZGV0ZXJtaW5lIGJ5IHRoZSB0eXBlIG9mIG1hY2hpbmUgdGhlIHBhY2thZ2Ugd2lsbCBydW4gb24uCi1Vc3VhbGx5LCBhc3N1bWluZyB0aGUgcGFja2FnZSBpcyBidWlsdCB0byBiZSBydW4gb24gdGhlIF9zYW1lXwotYXJjaGl0ZWN0dXJlcywgYGNvbmZpZ3VyZScgY2FuIGZpZ3VyZSB0aGF0IG91dCwgYnV0IGlmIGl0IHByaW50cyBhCi1tZXNzYWdlIHNheWluZyBpdCBjYW5ub3QgZ3Vlc3MgdGhlIG1hY2hpbmUgdHlwZSwgZ2l2ZSBpdCB0aGUKKyAgIFRoZXJlIG1heSBiZSBzb21lIGZlYXR1cmVzIGBjb25maWd1cmUnIGNhbm5vdCBmaWd1cmUgb3V0CithdXRvbWF0aWNhbGx5LCBidXQgbmVlZHMgdG8gZGV0ZXJtaW5lIGJ5IHRoZSB0eXBlIG9mIG1hY2hpbmUgdGhlIHBhY2thZ2UKK3dpbGwgcnVuIG9uLiAgVXN1YWxseSwgYXNzdW1pbmcgdGhlIHBhY2thZ2UgaXMgYnVpbHQgdG8gYmUgcnVuIG9uIHRoZQorX3NhbWVfIGFyY2hpdGVjdHVyZXMsIGBjb25maWd1cmUnIGNhbiBmaWd1cmUgdGhhdCBvdXQsIGJ1dCBpZiBpdCBwcmludHMKK2EgbWVzc2FnZSBzYXlpbmcgaXQgY2Fubm90IGd1ZXNzIHRoZSBtYWNoaW5lIHR5cGUsIGdpdmUgaXQgdGhlCiBgLS1idWlsZD1UWVBFJyBvcHRpb24uICBUWVBFIGNhbiBlaXRoZXIgYmUgYSBzaG9ydCBuYW1lIGZvciB0aGUgc3lzdGVtCiB0eXBlLCBzdWNoIGFzIGBzdW40Jywgb3IgYSBjYW5vbmljYWwgbmFtZSB3aGljaCBoYXMgdGhlIGZvcm06CiAKQEAgLTE1Miw3ICsyNjcsOCBAQAogCiB3aGVyZSBTWVNURU0gY2FuIGhhdmUgb25lIG9mIHRoZXNlIGZvcm1zOgogCi0gICAgIE9TIEtFUk5FTC1PUworICAgICBPUworICAgICBLRVJORUwtT1MKIAogICAgU2VlIHRoZSBmaWxlIGBjb25maWcuc3ViJyBmb3IgdGhlIHBvc3NpYmxlIHZhbHVlcyBvZiBlYWNoIGZpZWxkLiAgSWYKIGBjb25maWcuc3ViJyBpc24ndCBpbmNsdWRlZCBpbiB0aGlzIHBhY2thZ2UsIHRoZW4gdGhpcyBwYWNrYWdlIGRvZXNuJ3QKQEAgLTE3MCw5ICsyODYsOSBAQAogU2hhcmluZyBEZWZhdWx0cwogPT09PT09PT09PT09PT09PQogCi1JZiB5b3Ugd2FudCB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGBjb25maWd1cmUnIHNjcmlwdHMgdG8gc2hhcmUsIHlvdQotY2FuIGNyZWF0ZSBhIHNpdGUgc2hlbGwgc2NyaXB0IGNhbGxlZCBgY29uZmlnLnNpdGUnIHRoYXQgZ2l2ZXMgZGVmYXVsdAotdmFsdWVzIGZvciB2YXJpYWJsZXMgbGlrZSBgQ0MnLCBgY2FjaGVfZmlsZScsIGFuZCBgcHJlZml4Jy4KKyAgIElmIHlvdSB3YW50IHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgYGNvbmZpZ3VyZScgc2NyaXB0cyB0byBzaGFyZSwKK3lvdSBjYW4gY3JlYXRlIGEgc2l0ZSBzaGVsbCBzY3JpcHQgY2FsbGVkIGBjb25maWcuc2l0ZScgdGhhdCBnaXZlcworZGVmYXVsdCB2YWx1ZXMgZm9yIHZhcmlhYmxlcyBsaWtlIGBDQycsIGBjYWNoZV9maWxlJywgYW5kIGBwcmVmaXgnLgogYGNvbmZpZ3VyZScgbG9va3MgZm9yIGBQUkVGSVgvc2hhcmUvY29uZmlnLnNpdGUnIGlmIGl0IGV4aXN0cywgdGhlbgogYFBSRUZJWC9ldGMvY29uZmlnLnNpdGUnIGlmIGl0IGV4aXN0cy4gIE9yLCB5b3UgY2FuIHNldCB0aGUKIGBDT05GSUdfU0lURScgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBzaXRlIHNjcmlwdC4KQEAgLTE4MSw3ICsyOTcsNyBAQAogRGVmaW5pbmcgVmFyaWFibGVzCiA9PT09PT09PT09PT09PT09PT0KIAotVmFyaWFibGVzIG5vdCBkZWZpbmVkIGluIGEgc2l0ZSBzaGVsbCBzY3JpcHQgY2FuIGJlIHNldCBpbiB0aGUKKyAgIFZhcmlhYmxlcyBub3QgZGVmaW5lZCBpbiBhIHNpdGUgc2hlbGwgc2NyaXB0IGNhbiBiZSBzZXQgaW4gdGhlCiBlbnZpcm9ubWVudCBwYXNzZWQgdG8gYGNvbmZpZ3VyZScuICBIb3dldmVyLCBzb21lIHBhY2thZ2VzIG1heSBydW4KIGNvbmZpZ3VyZSBhZ2FpbiBkdXJpbmcgdGhlIGJ1aWxkLCBhbmQgdGhlIGN1c3RvbWl6ZWQgdmFsdWVzIG9mIHRoZXNlCiB2YXJpYWJsZXMgbWF5IGJlIGxvc3QuICBJbiBvcmRlciB0byBhdm9pZCB0aGlzIHByb2JsZW0sIHlvdSBzaG91bGQgc2V0CkBAIC0xOTAsMjEgKzMwNiwzMCBAQAogICAgICAuL2NvbmZpZ3VyZSBDQz0vdXNyL2xvY2FsMi9iaW4vZ2NjCiAKIGNhdXNlcyB0aGUgc3BlY2lmaWVkIGBnY2MnIHRvIGJlIHVzZWQgYXMgdGhlIEMgY29tcGlsZXIgKHVubGVzcyBpdCBpcwotb3ZlcnJpZGRlbiBpbiB0aGUgc2l0ZSBzaGVsbCBzY3JpcHQpLiAgSGVyZSBpcyBhIGFub3RoZXIgZXhhbXBsZToKK292ZXJyaWRkZW4gaW4gdGhlIHNpdGUgc2hlbGwgc2NyaXB0KS4KIAotICAgICAvYmluL2Jhc2ggLi9jb25maWd1cmUgQ09ORklHX1NIRUxMPS9iaW4vYmFzaAorVW5mb3J0dW5hdGVseSwgdGhpcyB0ZWNobmlxdWUgZG9lcyBub3Qgd29yayBmb3IgYENPTkZJR19TSEVMTCcgZHVlIHRvCithbiBBdXRvY29uZiBsaW1pdGF0aW9uLiAgVW50aWwgdGhlIGxpbWl0YXRpb24gaXMgbGlmdGVkLCB5b3UgY2FuIHVzZQordGhpcyB3b3JrYXJvdW5kOgogCi1IZXJlIHRoZSBgQ09ORklHX1NIRUxMPS9iaW4vYmFzaCcgb3BlcmFuZCBjYXVzZXMgc3Vic2VxdWVudAotY29uZmlndXJhdGlvbi1yZWxhdGVkIHNjcmlwdHMgdG8gYmUgZXhlY3V0ZWQgYnkgYC9iaW4vYmFzaCcuCisgICAgIENPTkZJR19TSEVMTD0vYmluL2Jhc2ggLi9jb25maWd1cmUgQ09ORklHX1NIRUxMPS9iaW4vYmFzaAogCiBgY29uZmlndXJlJyBJbnZvY2F0aW9uCiA9PT09PT09PT09PT09PT09PT09PT09CiAKLWBjb25maWd1cmUnIHJlY29nbml6ZXMgdGhlIGZvbGxvd2luZyBvcHRpb25zIHRvIGNvbnRyb2wgaG93IGl0IG9wZXJhdGVzLgorICAgYGNvbmZpZ3VyZScgcmVjb2duaXplcyB0aGUgZm9sbG93aW5nIG9wdGlvbnMgdG8gY29udHJvbCBob3cgaXQKK29wZXJhdGVzLgogCiBgLS1oZWxwJwogYC1oJwotICAgICBQcmludCBhIHN1bW1hcnkgb2YgdGhlIG9wdGlvbnMgdG8gYGNvbmZpZ3VyZScsIGFuZCBleGl0LgorICAgICBQcmludCBhIHN1bW1hcnkgb2YgYWxsIG9mIHRoZSBvcHRpb25zIHRvIGBjb25maWd1cmUnLCBhbmQgZXhpdC4KKworYC0taGVscD1zaG9ydCcKK2AtLWhlbHA9cmVjdXJzaXZlJworICAgICBQcmludCBhIHN1bW1hcnkgb2YgdGhlIG9wdGlvbnMgdW5pcXVlIHRvIHRoaXMgcGFja2FnZSdzCisgICAgIGBjb25maWd1cmUnLCBhbmQgZXhpdC4gIFRoZSBgc2hvcnQnIHZhcmlhbnQgbGlzdHMgb3B0aW9ucyB1c2VkCisgICAgIG9ubHkgaW4gdGhlIHRvcCBsZXZlbCwgd2hpbGUgdGhlIGByZWN1cnNpdmUnIHZhcmlhbnQgbGlzdHMgb3B0aW9ucworICAgICBhbHNvIHByZXNlbnQgaW4gYW55IG5lc3RlZCBwYWNrYWdlcy4KIAogYC0tdmVyc2lvbicKIGAtVicKQEAgLTIzMSw2ICszNTYsMTUgQEAKICAgICAgTG9vayBmb3IgdGhlIHBhY2thZ2UncyBzb3VyY2UgY29kZSBpbiBkaXJlY3RvcnkgRElSLiAgVXN1YWxseQogICAgICBgY29uZmlndXJlJyBjYW4gZGV0ZXJtaW5lIHRoYXQgZGlyZWN0b3J5IGF1dG9tYXRpY2FsbHkuCiAKK2AtLXByZWZpeD1ESVInCisgICAgIFVzZSBESVIgYXMgdGhlIGluc3RhbGxhdGlvbiBwcmVmaXguICAqbm90ZSBJbnN0YWxsYXRpb24gTmFtZXM6OgorICAgICBmb3IgbW9yZSBkZXRhaWxzLCBpbmNsdWRpbmcgb3RoZXIgb3B0aW9ucyBhdmFpbGFibGUgZm9yIGZpbmUtdHVuaW5nCisgICAgIHRoZSBpbnN0YWxsYXRpb24gbG9jYXRpb25zLgorCitgLS1uby1jcmVhdGUnCitgLW4nCisgICAgIFJ1biB0aGUgY29uZmlndXJlIGNoZWNrcywgYnV0IHN0b3AgYmVmb3JlIGNyZWF0aW5nIGFueSBvdXRwdXQKKyAgICAgZmlsZXMuCisKIGBjb25maWd1cmUnIGFsc28gYWNjZXB0cyBzb21lIG90aGVyLCBub3Qgd2lkZWx5IHVzZWZ1bCwgb3B0aW9ucy4gIFJ1bgogYGNvbmZpZ3VyZSAtLWhlbHAnIGZvciBtb3JlIGRldGFpbHMuCi0KZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxYjJlZTQuLjAwMDAwMDAKLS0tIGEvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw3MDQgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjYgZnJvbSBNYWtlZmlsZS5hbS4KLSMgTWFrZWZpbGUuICBHZW5lcmF0ZWQgZnJvbSBNYWtlZmlsZS5pbiBieSBjb25maWd1cmUuCi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAotIyAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLQotCi1zcmNkaXIgPSAuCi10b3Bfc3JjZGlyID0gLgotCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9iaXNvbgotcGtnbGliZGlyID0gJChsaWJkaXIpL2Jpc29uCi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9iaXNvbgotdG9wX2J1aWxkZGlyID0gLgotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotSU5TVEFMTCA9IC91c3IvYmluL2luc3RhbGwgLWMKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSB4ODZfNjQtdW5rbm93bi1saW51eC1nbnUKLWhvc3RfdHJpcGxldCA9IHg4Nl82NC11bmtub3duLWxpbnV4LWdudQotc3ViZGlyID0gLgotRElTVF9DT01NT04gPSBSRUFETUUgJChhbV9fY29uZmlndXJlX2RlcHMpICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCi0JJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9jb25maWcuaGluIFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSBBQk9VVC1OTFMgQVVUSE9SUyBDT1BZSU5HIENoYW5nZUxvZyBcCi0JSU5TVEFMTCBORVdTIFRIQU5LUyBUT0RPCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaXNvbi1pMThuLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2Mtd29ya2luZy5tNCAkKHRvcF9zcmNkaXIpL200L2N4eC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9kaXJuYW1lLm00ICQodG9wX3NyY2RpcikvbTQvZG1hbGxvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9kb3MubTQgJCh0b3Bfc3JjZGlyKS9tNC9lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9leGl0ZmFpbC5tNCAkKHRvcF9zcmNkaXIpL200L2V4dGVuc2lvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ2V0b3B0Lm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dF9nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9oYXJkLWxvY2FsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9oYXNoLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaF9nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGRfZ2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4X2dsLm00ICQodG9wX3NyY2RpcikvbTQvbTQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbWJydG93Yy5tNCAkKHRvcF9zcmNkaXIpL200L21ic3RhdGVfdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9tYnN3aWR0aC5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9vYnN0YWNrLm00ICQodG9wX3NyY2RpcikvbTQvb25jZW9ubHkubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG9fZ2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9xdW90ZS5tNCAkKHRvcF9zcmNkaXIpL200L3F1b3RlYXJnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3N0ZGJvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaF9nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdGRpby1zYWZlci5tNCAkKHRvcF9zcmNkaXIpL200L3N0cGNweS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdHJkdXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJlcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdHJuZHVwLm00ICQodG9wX3NyY2RpcikvbTQvc3Rybmxlbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b3VsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3N0cnZlcnNjbXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdWJwaXBlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3RpbWV2YXIubTQgJCh0b3Bfc3JjZGlyKS9tNC91aW50bWF4X3RfZ2wubTQgXAotCSQodG9wX3NyY2RpcikvbTQvdWxvbmdsb25nX2dsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3VuaXN0ZC1zYWZlci5tNCAkKHRvcF9zcmNkaXIpL200L3VuaXN0ZF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3VubG9ja2VkLWlvLm00ICQodG9wX3NyY2RpcikvbTQvd2FybmluZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC94YWxsb2MubTQgJCh0b3Bfc3JjZGlyKS9tNC94c3RybmR1cC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMgPSBjb25maWcuc3RhdHVzIGNvbmZpZy5jYWNoZSBjb25maWcubG9nIFwKLSBjb25maWd1cmUubGluZW5vIGNvbmZpZ3VyZS5zdGF0dXMubGluZW5vCi1ta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvbWtpbnN0YWxsZGlycwotQ09ORklHX0hFQURFUiA9IGNvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotU09VUkNFUyA9Ci1ESVNUX1NPVVJDRVMgPQotUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIFwKLQlodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAotCWluc3RhbGwtcmVjdXJzaXZlIGluc3RhbGxjaGVjay1yZWN1cnNpdmUgaW5zdGFsbGRpcnMtcmVjdXJzaXZlIFwKLQlwZGYtcmVjdXJzaXZlIHBzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAotCXVuaW5zdGFsbC1yZWN1cnNpdmUKLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChhY2xvY2FsZGlyKSIKLWFjbG9jYWxEQVRBX0lOU1RBTEwgPSAkKElOU1RBTExfREFUQSkKLURBVEEgPSAkKGFjbG9jYWxfREFUQSkKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLURJU1RfU1VCRElSUyA9ICQoU1VCRElSUykKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1kaXN0ZGlyID0gJChQQUNLQUdFKS0kKFZFUlNJT04pCi10b3BfZGlzdGRpciA9ICQoZGlzdGRpcikKLWFtX19yZW1vdmVfZGlzdGRpciA9IFwKLSAgeyB0ZXN0ICEgLWQgJChkaXN0ZGlyKSBcCi0gICAgfHwgeyBmaW5kICQoZGlzdGRpcikgLXR5cGUgZCAhIC1wZXJtIC0yMDAgLWV4ZWMgY2htb2QgdSt3IHt9ICc7JyBcCi0gICAgICAgICAmJiBybSAtZnIgJChkaXN0ZGlyKTsgfTsgfQotRElTVF9BUkNISVZFUyA9ICQoZGlzdGRpcikudGFyLmd6ICQoZGlzdGRpcikudGFyLmJ6MgotR1pJUF9FTlYgPSAtLWJlc3QKLWRpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMgPSBmaW5kIC4gLXR5cGUgZiAtcHJpbnQKLWRpc3RjbGVhbmNoZWNrX2xpc3RmaWxlcyA9IGZpbmQgLiAtdHlwZSBmIC1wcmludAotQUNMT0NBTCA9ICR7U0hFTEx9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9taXNzaW5nIC0tcnVuIGFjbG9jYWwtMS45Ci1BTURFUF9GQUxTRSA9ICMKLUFNREVQX1RSVUUgPSAKLUFNVEFSID0gJHtTSEVMTH0gL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC90b29scy9iaXNvbi0yLjMvYnVpbGQtYXV4L21pc3NpbmcgLS1ydW4gdGFyCi1BVVRPQ09ORiA9ICR7U0hFTEx9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9taXNzaW5nIC0tcnVuIGF1dG9jb25mCi1BVVRPSEVBREVSID0gJHtTSEVMTH0gL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC90b29scy9iaXNvbi0yLjMvYnVpbGQtYXV4L21pc3NpbmcgLS1ydW4gYXV0b2hlYWRlcgotQVVUT000VEUgPSAke1NIRUxMfSAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL2Jpc29uLTIuMy9idWlsZC1hdXgvbWlzc2luZyAtLXJ1biBhdXRvbTR0ZQotQVVUT01BS0UgPSAke1NIRUxMfSAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL2Jpc29uLTIuMy9idWlsZC1hdXgvbWlzc2luZyAtLXJ1biBhdXRvbWFrZS0xLjkKLUFXSyA9IGdhd2sKLUJJU09OX0NYWF9XT1JLUyA9IDoKLUJJU09OX0NYWF9XT1JLU19GQUxTRSA9ICMKLUJJU09OX0NYWF9XT1JLU19UUlVFID0gCi1CSVNPTl9MT0NBTEVESVIgPSAvdXNyL3NoYXJlL2xvY2FsZQotQ0MgPSBnY2MKLUNDREVQTU9ERSA9IGRlcG1vZGU9Z2NjMwotQ0ZMQUdTID0gLWcgLU8yCi1DUFAgPSBnY2MgLUUKLUNQUEZMQUdTID0gCi1DWFggPSBnKysKLUNYWERFUE1PREUgPSBkZXBtb2RlPWdjYzMKLUNYWEZMQUdTID0gLWcgLU8yCi1DWUdQQVRIX1cgPSBlY2hvCi1ERUZTID0gLURIQVZFX0NPTkZJR19ICi1ERVBESVIgPSAuZGVwcwotRUNIT19DID0gCi1FQ0hPX04gPSAtbgotRUNIT19UID0gCi1FR1JFUCA9IGdyZXAgLUUKLUVYRUVYVCA9IAotR0NDID0geWVzCi1HRVRPUFRfSCA9IAotR01TR0ZNVCA9IC91c3IvYmluL21zZ2ZtdAotSEFWRV9fQk9PTCA9IDEKLUlOU1RBTExfREFUQSA9ICR7SU5TVEFMTH0gLW0gNjQ0Ci1JTlNUQUxMX1BST0dSQU0gPSAke0lOU1RBTEx9Ci1JTlNUQUxMX1NDUklQVCA9ICR7SU5TVEFMTH0KLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9ICR7U0hFTEx9ICQoaW5zdGFsbF9zaCkgLWMgLXMKLUlOVExMSUJTID0gCi1JTlRMX01BQ09TWF9MSUJTID0gCi1MREZMQUdTID0gCi1MRVggPSBmbGV4Ci1MRVhMSUIgPSAtbGZsCi1MRVhfT1VUUFVUX1JPT1QgPSBsZXgueXkKLUxJQklDT05WID0gLWxpY29udgotTElCSU5UTCA9IAotTElCT0JKUyA9ICBkaXJuYW1lJFUubyBleGl0ZmFpbCRVLm8gaGFyZC1sb2NhbGUkVS5vIGhhc2gkVS5vIHF1b3RlJFUubyBxdW90ZWFyZyRVLm8gZm9wZW4tc2FmZXIkVS5vIGR1cC1zYWZlciRVLm8gZmQtc2FmZXIkVS5vIHBpcGUtc2FmZXIkVS5vIHhtYWxsb2MkVS5vCi1MSUJTID0gCi1MVExJQklDT05WID0gLWxpY29udgotTFRMSUJJTlRMID0gCi1MVExJQk9CSlMgPSAgZGlybmFtZSRVLmxvIGV4aXRmYWlsJFUubG8gaGFyZC1sb2NhbGUkVS5sbyBoYXNoJFUubG8gcXVvdGUkVS5sbyBxdW90ZWFyZyRVLmxvIGZvcGVuLXNhZmVyJFUubG8gZHVwLXNhZmVyJFUubG8gZmQtc2FmZXIkVS5sbyBwaXBlLXNhZmVyJFUubG8geG1hbGxvYyRVLmxvCi1NNCA9IC91c3IvYmluL200Ci1NQUtFSU5GTyA9ICR7U0hFTEx9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9taXNzaW5nIC0tcnVuIG1ha2VpbmZvCi1NS0lOU1RBTExESVJTID0gJCh0b3BfYnVpbGRkaXIpL2J1aWxkLWF1eC9ta2luc3RhbGxkaXJzCi1NU0dGTVQgPSAvdXNyL2Jpbi9tc2dmbXQKLU1TR01FUkdFID0gL3Vzci9iaW4vbXNnbWVyZ2UKLU8wQ0ZMQUdTID0gLWcgCi1PMENYWEZMQUdTID0gLWcgCi1PQkpFWFQgPSBvCi1QQUNLQUdFID0gYmlzb24KLVBBQ0tBR0VfQlVHUkVQT1JUID0gYnVnLWJpc29uQGdudS5vcmcKLVBBQ0tBR0VfTkFNRSA9IEdOVSBCaXNvbgotUEFDS0FHRV9TVFJJTkcgPSBHTlUgQmlzb24gMi4zCi1QQUNLQUdFX1RBUk5BTUUgPSBiaXNvbgotUEFDS0FHRV9WRVJTSU9OID0gMi4zCi1QQVRIX1NFUEFSQVRPUiA9IDoKLVBPU1VCID0gcG8KLVJBTkxJQiA9IHJhbmxpYgotU0VUX01BS0UgPSAKLVNIRUxMID0gL2Jpbi9zaAotU1REQk9PTF9IID0gCi1TVFJJUCA9IAotVU5JU1REX0ggPSAKLVVTRV9OTFMgPSB5ZXMKLVZBTEdSSU5EID0gCi1WRVJTSU9OID0gMi4zCi1XQVJOSU5HX0NGTEFHUyA9IAotV0FSTklOR19DWFhGTEFHUyA9IAotV0VSUk9SX0NGTEFHUyA9IAotWEdFVFRFWFQgPSAvdXNyL2Jpbi94Z2V0dGV4dAotWUFDQyA9IGJpc29uIC15Ci1ZQUNDX0xJQlJBUlkgPSBsaWJ5LmEKLVlBQ0NfU0NSSVBUID0geWFjYwotYWNfY3RfQ0MgPSBnY2MKLWFjX2N0X0NYWCA9IGcrKwotYWNfY3RfUkFOTElCID0gcmFubGliCi1hY19jdF9TVFJJUCA9IAotCi0jIEZpbGVzIGluc3RhbGxlZCBmb3IgdXNlIGJ5IEF1dG9tYWtlLgotYWNsb2NhbGRpciA9ICR7ZGF0YWRpcn0vYWNsb2NhbAotYW1fX2Zhc3RkZXBDQ19GQUxTRSA9ICMKLWFtX19mYXN0ZGVwQ0NfVFJVRSA9IAotYW1fX2Zhc3RkZXBDWFhfRkFMU0UgPSAjCi1hbV9fZmFzdGRlcENYWF9UUlVFID0gCi1hbV9faW5jbHVkZSA9IGluY2x1ZGUKLWFtX19sZWFkaW5nX2RvdCA9IC4KLWFtX19xdW90ZSA9IAotYW1fX3RhciA9ICR7QU1UQVJ9IGNob2YgLSAiJCR0YXJkaXIiCi1hbV9fdW50YXIgPSAke0FNVEFSfSB4ZiAtCi1iaW5kaXIgPSAke2V4ZWNfcHJlZml4fS9iaW4KLWJ1aWxkID0geDg2XzY0LXVua25vd24tbGludXgtZ251Ci1idWlsZF9hbGlhcyA9IAotYnVpbGRfY3B1ID0geDg2XzY0Ci1idWlsZF9vcyA9IGxpbnV4LWdudQotYnVpbGRfdmVuZG9yID0gdW5rbm93bgotZGF0YWRpciA9ICR7cHJlZml4fS9zaGFyZQotZXhlY19wcmVmaXggPSAke3ByZWZpeH0KLWhvc3QgPSB4ODZfNjQtdW5rbm93bi1saW51eC1nbnUKLWhvc3RfYWxpYXMgPSAKLWhvc3RfY3B1ID0geDg2XzY0Ci1ob3N0X29zID0gbGludXgtZ251Ci1ob3N0X3ZlbmRvciA9IHVua25vd24KLWluY2x1ZGVkaXIgPSAke3ByZWZpeH0vaW5jbHVkZQotaW5mb2RpciA9ICR7cHJlZml4fS9pbmZvCi1pbnN0YWxsX3NoID0gL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC90b29scy9iaXNvbi0yLjMvYnVpbGQtYXV4L2luc3RhbGwtc2gKLWxpYmRpciA9ICR7ZXhlY19wcmVmaXh9L2xpYgotbGliZXhlY2RpciA9ICR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMKLWxvY2Fsc3RhdGVkaXIgPSAke3ByZWZpeH0vdmFyCi1tYW5kaXIgPSAke3ByZWZpeH0vbWFuCi1ta2Rpcl9wID0gbWtkaXIgLXAgLS0KLW9sZGluY2x1ZGVkaXIgPSAvdXNyL2luY2x1ZGUKLXByZWZpeCA9IC9ob21lL3BoYW5uYS9zcmMvYmlzb24KLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBzLHgseCwKLXNiaW5kaXIgPSAke2V4ZWNfcHJlZml4fS9zYmluCi1zaGFyZWRzdGF0ZWRpciA9ICR7cHJlZml4fS9jb20KLXN5c2NvbmZkaXIgPSAke3ByZWZpeH0vZXRjCi10YXJnZXRfYWxpYXMgPSAKLUFDTE9DQUxfQU1GTEFHUyA9IC1JIG00Ci1TVUJESVJTID0gYnVpbGQtYXV4IHBvIHJ1bnRpbWUtcG8gbGliIGRhdGEgc3JjIGRvYyBleGFtcGxlcyB0ZXN0cwotYWNsb2NhbF9EQVRBID0gbTQvYmlzb24taTE4bi5tNAotRVhUUkFfRElTVCA9IEdOVW1ha2VmaWxlIE1ha2VmaWxlLmNmZyBNYWtlZmlsZS5tYWludCBcCi0gIE9DaGFuZ2VMb2cgUEFDS0FHSU5HIFwKLSAgZGpncHAvTWFrZWZpbGUubWFpbnQgZGpncHAvUkVBRE1FLmluIGRqZ3BwL2NvbmZpZy5iYXQgXAotICBkamdwcC9jb25maWcuc2VkIGRqZ3BwL2NvbmZpZy5zaXRlIGRqZ3BwL2NvbmZpZ19oLnNlZCBcCi0gIGRqZ3BwL3N1YnBpcGUuYyBkamdwcC9zdWJwaXBlLmggZGpncHAvZGp1bnBhY2suYmF0IFwKLSAgZGpncHAvZm5jaGFuZ2UubHN0Ci0KLWFsbDogY29uZmlnLmgKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbGwtcmVjdXJzaXZlCi0KLS5TVUZGSVhFUzoKLWFtLS1yZWZyZXNoOgotCUA6Ci0kKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgIGVjaG8gJyBjZCAkKHNyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgJzsgXAotCSAgICAgIGNkICQoc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSAgXAotCQkmJiBleGl0IDA7IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251ICBNYWtlZmlsZSc7IFwKLQljZCAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251ICBNYWtlZmlsZQotLlBSRUNJT1VTOiBNYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGVjaG8gJyAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMnOyBcCi0JICAgICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1czs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQkkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgLS1yZWNoZWNrCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJChzcmNkaXIpICYmICQoQVVUT0NPTkYpCi0kKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQoc3JjZGlyKSAmJiAkKEFDTE9DQUwpICQoQUNMT0NBTF9BTUZMQUdTKQotCi1jb25maWcuaDogc3RhbXAtaDEKLQlAaWYgdGVzdCAhIC1mICRAOyB0aGVuIFwKLQkgIHJtIC1mIHN0YW1wLWgxOyBcCi0JICAkKE1BS0UpIHN0YW1wLWgxOyBcCi0JZWxzZSA6OyBmaQotCi1zdGFtcC1oMTogJChzcmNkaXIpL2NvbmZpZy5oaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAcm0gLWYgc3RhbXAtaDEKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzIGNvbmZpZy5oCi0kKHNyY2RpcikvY29uZmlnLmhpbjogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKSAKLQljZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT0hFQURFUikKLQlybSAtZiBzdGFtcC1oMQotCXRvdWNoICRACi0KLWRpc3RjbGVhbi1oZHI6Ci0JLXJtIC1mIGNvbmZpZy5oIHN0YW1wLWgxCi11bmluc3RhbGwtaW5mby1hbToKLWluc3RhbGwtYWNsb2NhbERBVEE6ICQoYWNsb2NhbF9EQVRBKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCXRlc3QgLXogIiQoYWNsb2NhbGRpcikiIHx8ICQobWtkaXJfcCkgIiQoREVTVERJUikkKGFjbG9jYWxkaXIpIgotCUBsaXN0PSckKGFjbG9jYWxfREFUQSknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCi0JICBmPSQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoYWNsb2NhbERBVEFfSU5TVEFMTCkgJyQkZCQkcCcgJyQoREVTVERJUikkKGFjbG9jYWxkaXIpLyQkZiciOyBcCi0JICAkKGFjbG9jYWxEQVRBX0lOU1RBTEwpICIkJGQkJHAiICIkKERFU1RESVIpJChhY2xvY2FsZGlyKS8kJGYiOyBcCi0JZG9uZQotCi11bmluc3RhbGwtYWNsb2NhbERBVEE6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChhY2xvY2FsX0RBVEEpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBmPSQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChhY2xvY2FsZGlyKS8kJGYnIjsgXAotCSAgcm0gLWYgIiQoREVTVERJUikkKGFjbG9jYWxkaXIpLyQkZiI7IFwKLQlkb25lCi0KLSMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCi0jIGludG8gdGhlbSBhbmQgcnVuIGBtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KLSMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgYG1ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKLSMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gYGNvbmZpZy5zdGF0dXMnLCBlZGl0IGBjb25maWcuc3RhdHVzJwotIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gYG1ha2UnKTsKLSMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlIGBtYWtlJyBjb21tYW5kIGxpbmUuCi0kKFJFQ1VSU0lWRV9UQVJHRVRTKToKLQlAZmFpbGNvbT0nZXhpdCAxJzsgXAotCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKLQkgIGNhc2UgJCRmIGluIFwKLQkgICAgKj0qIHwgLS1bIWtdKik7OyBcCi0JICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQlkb3Rfc2Vlbj1ubzsgXAotCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCi0JICAgIGRvdF9zZWVuPXllczsgXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAotCSAgZWxzZSBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCi0JICBmaTsgXAotCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCi0JICB8fCBldmFsICQkZmFpbGNvbTsgXAotCWRvbmU7IFwKLQlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKLQlmaTsgdGVzdCAteiAiJCRmYWlsIgotCi1tb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlIGRpc3RjbGVhbi1yZWN1cnNpdmUgXAotbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmU6Ci0JQGZhaWxjb209J2V4aXQgMSc7IFwKLQlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCi0JICBjYXNlICQkZiBpbiBcCi0JICAgICo9KiB8IC0tWyFrXSopOzsgXAotCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZG90X3NlZW49bm87IFwKLQljYXNlICIkQCIgaW4gXAotCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAotCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAotCWVzYWM7IFwKLQlyZXY9Jyc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gOjsgZWxzZSBcCi0JICAgIHJldj0iJCRzdWJkaXIgJCRyZXYiOyBcCi0JICBmaTsgXAotCWRvbmU7IFwKLQlyZXY9IiQkcmV2IC4iOyBcCi0JdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAotCWZvciBzdWJkaXIgaW4gJCRyZXY7IGRvIFwKLQkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCi0JICBlbHNlIFwKLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKLQkgIGZpOyBcCi0JICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKLQkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCi0JZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCi10YWdzLXJlY3Vyc2l2ZToKLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRhZ3MpOyBcCi0JZG9uZQotY3RhZ3MtcmVjdXJzaXZlOgotCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcCi0JZG9uZQotCi1JRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiBUQUdTCi0KLVRBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSBjb25maWcuaGluICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JdGFncz07IFwKLQloZXJlPWBwd2RgOyBcCi0JaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCi0JICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKLQkgIGVtcHR5X2ZpeD0uOyBcCi0JZWxzZSBcCi0JICBpbmNsdWRlX29wdGlvbj0tLWluY2x1ZGU7IFwKLQkgIGVtcHR5X2ZpeD07IFwKLQlmaTsgXAotCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKLQkgICAgdGVzdCAhIC1mICQkc3ViZGlyL1RBR1MgfHwgXAotCSAgICAgIHRhZ3M9IiQkdGFncyAkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAotCSAgZmk7IFwKLQlkb25lOyBcCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpIGNvbmZpZy5oaW4gJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICQkdGFncyAkJHVuaXF1ZTsgXAotCWZpCi1jdGFnczogQ1RBR1MKLUNUQUdTOiBjdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpIGNvbmZpZy5oaW4gJChUQUdTX0RFUEVOREVOQ0lFUykgXAotCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQl0YWdzPTsgXAotCWhlcmU9YHB3ZGA7IFwKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgY29uZmlnLmhpbiAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHRhZ3MgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmIGNkICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQGNhc2UgYHNlZCAxNXEgJChzcmNkaXIpL05FV1NgIGluIFwKLQkqIiQoVkVSU0lPTikiKikgOiA7OyBcCi0JKikgXAotCSAgZWNobyAiTkVXUyBub3QgdXBkYXRlZDsgbm90IHJlbGVhc2luZyIgMT4mMjsgXAotCSAgZXhpdCAxOzsgXAotCWVzYWMKLQkkKGFtX19yZW1vdmVfZGlzdGRpcikKLQlta2RpciAkKGRpc3RkaXIpCi0JJChta2Rpcl9wKSAkKGRpc3RkaXIpL2RqZ3BwICQoZGlzdGRpcikvbTQgJChkaXN0ZGlyKS9wbyAkKGRpc3RkaXIpL3J1bnRpbWUtcG8gJChkaXN0ZGlyKS90ZXN0cwotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGNhc2UgJCRmaWxlIGluIFwKLQkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLQkgICAgJCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAotCSAgZXNhYzsgXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAotCSAgICBkaXI9Ii8kJGRpciI7IFwKLQkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAotCSAgZWxzZSBcCi0JICAgIGRpcj0nJzsgXAotCSAgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLQlsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKLQkgICAgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAotCSAgICB8fCAkKG1rZGlyX3ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgICBkaXN0ZGlyPWAkKGFtX19jZCkgJChkaXN0ZGlyKSAmJiBwd2RgOyBcCi0JICAgIHRvcF9kaXN0ZGlyPWAkKGFtX19jZCkgJCh0b3BfZGlzdGRpcikgJiYgcHdkYDsgXAotCSAgICAoY2QgJCRzdWJkaXIgJiYgXAotCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKLQkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJHRvcF9kaXN0ZGlyIiBcCi0JICAgICAgICBkaXN0ZGlyPSIkJGRpc3RkaXIvJCRzdWJkaXIiIFwKLQkgICAgICAgIGRpc3RkaXIpIFwKLQkgICAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotCS1maW5kICQoZGlzdGRpcikgLXR5cGUgZCAhIC1wZXJtIC03NzcgLWV4ZWMgY2htb2QgYStyd3gge30gXDsgLW8gXAotCSAgISAtdHlwZSBkICEgLXBlcm0gLTQ0NCAtbGlua3MgMSAtZXhlYyBjaG1vZCBhK3Ige30gXDsgLW8gXAotCSAgISAtdHlwZSBkICEgLXBlcm0gLTQwMCAtZXhlYyBjaG1vZCBhK3Ige30gXDsgLW8gXAotCSAgISAtdHlwZSBkICEgLXBlcm0gLTQ0NCAtZXhlYyAkKFNIRUxMKSAkKGluc3RhbGxfc2gpIC1jIC1tIGErciB7fSB7fSBcOyBcCi0JfHwgY2htb2QgLVIgYStyICQoZGlzdGRpcikKLWRpc3QtZ3ppcDogZGlzdGRpcgotCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWMgPiQoZGlzdGRpcikudGFyLmd6Ci0JJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCi1kaXN0LWJ6aXAyOiBkaXN0ZGlyCi0JdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IGJ6aXAyIC05IC1jID4kKGRpc3RkaXIpLnRhci5iejIKLQkkKGFtX19yZW1vdmVfZGlzdGRpcikKLQotZGlzdC10YXJaOiBkaXN0ZGlyCi0JdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IGNvbXByZXNzIC1jID4kKGRpc3RkaXIpLnRhci5aCi0JJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCi0KLWRpc3Qtc2hhcjogZGlzdGRpcgotCXNoYXIgJChkaXN0ZGlyKSB8IEdaSVA9JChHWklQX0VOVikgZ3ppcCAtYyA+JChkaXN0ZGlyKS5zaGFyLmd6Ci0JJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCi0KLWRpc3QtemlwOiBkaXN0ZGlyCi0JLXJtIC1mICQoZGlzdGRpcikuemlwCi0JemlwIC1ycSAkKGRpc3RkaXIpLnppcCAkKGRpc3RkaXIpCi0JJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCi0KLWRpc3QgZGlzdC1hbGw6IGRpc3RkaXIKLQl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1jID4kKGRpc3RkaXIpLnRhci5negotCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBiemlwMiAtOSAtYyA+JChkaXN0ZGlyKS50YXIuYnoyCi0JJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCi0KLSMgVGhpcyB0YXJnZXQgdW50YXJzIHRoZSBkaXN0IGZpbGUgYW5kIHRyaWVzIGEgVlBBVEggY29uZmlndXJhdGlvbi4gIFRoZW4KLSMgaXQgZ3VhcmFudGVlcyB0aGF0IHRoZSBkaXN0cmlidXRpb24gaXMgc2VsZi1jb250YWluZWQgYnkgbWFraW5nIGFub3RoZXIKLSMgdGFyZmlsZS4KLWRpc3RjaGVjazogZGlzdAotCWNhc2UgJyQoRElTVF9BUkNISVZFUyknIGluIFwKLQkqLnRhci5neiopIFwKLQkgIEdaSVA9JChHWklQX0VOVikgZ3VuemlwIC1jICQoZGlzdGRpcikudGFyLmd6IHwgJChhbV9fdW50YXIpIDs7XAotCSoudGFyLmJ6MiopIFwKLQkgIGJ1bnppcDIgLWMgJChkaXN0ZGlyKS50YXIuYnoyIHwgJChhbV9fdW50YXIpIDs7XAotCSoudGFyLloqKSBcCi0JICB1bmNvbXByZXNzIC1jICQoZGlzdGRpcikudGFyLlogfCAkKGFtX191bnRhcikgOztcCi0JKi5zaGFyLmd6KikgXAotCSAgR1pJUD0kKEdaSVBfRU5WKSBndW56aXAgLWMgJChkaXN0ZGlyKS5zaGFyLmd6IHwgdW5zaGFyIDs7XAotCSouemlwKikgXAotCSAgdW56aXAgJChkaXN0ZGlyKS56aXAgOztcCi0JZXNhYwotCWNobW9kIC1SIGEtdyAkKGRpc3RkaXIpOyBjaG1vZCBhK3cgJChkaXN0ZGlyKQotCW1rZGlyICQoZGlzdGRpcikvX2J1aWxkCi0JbWtkaXIgJChkaXN0ZGlyKS9faW5zdAotCWNobW9kIGEtdyAkKGRpc3RkaXIpCi0JZGNfaW5zdGFsbF9iYXNlPWAkKGFtX19jZCkgJChkaXN0ZGlyKS9faW5zdCAmJiBwd2QgfCBzZWQgLWUgJ3MsXlteOlxcL106W1xcL10sLywnYCBcCi0JICAmJiBkY19kZXN0ZGlyPSIkJHtUTVBESVItL3RtcH0vYW0tZGMtJCQkJC8iIFwKLQkgICYmIGNkICQoZGlzdGRpcikvX2J1aWxkIFwKLQkgICYmIC4uL2NvbmZpZ3VyZSAtLXNyY2Rpcj0uLiAtLXByZWZpeD0iJCRkY19pbnN0YWxsX2Jhc2UiIFwKLQkgICAgJChESVNUQ0hFQ0tfQ09ORklHVVJFX0ZMQUdTKSBcCi0JICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCi0JICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkdmkgXAotCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2sgXAotCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbCBcCi0JICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsY2hlY2sgXAotCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdW5pbnN0YWxsIFwKLQkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3R1bmluc3RhbGxjaGVja19kaXI9IiQkZGNfaW5zdGFsbF9iYXNlIiBcCi0JICAgICAgICBkaXN0dW5pbnN0YWxsY2hlY2sgXAotCSAgJiYgY2htb2QgLVIgYS13ICIkJGRjX2luc3RhbGxfYmFzZSIgXAotCSAgJiYgKHsgXAotCSAgICAgICAoY2QgLi4vLi4gJiYgdW1hc2sgMDc3ICYmIG1rZGlyICIkJGRjX2Rlc3RkaXIiKSBcCi0JICAgICAgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIERFU1RESVI9IiQkZGNfZGVzdGRpciIgaW5zdGFsbCBcCi0JICAgICAgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIERFU1RESVI9IiQkZGNfZGVzdGRpciIgdW5pbnN0YWxsIFwKLQkgICAgICAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgREVTVERJUj0iJCRkY19kZXN0ZGlyIiBcCi0JICAgICAgICAgICAgZGlzdHVuaW5zdGFsbGNoZWNrX2Rpcj0iJCRkY19kZXN0ZGlyIiBkaXN0dW5pbnN0YWxsY2hlY2s7IFwKLQkgICAgICB9IHx8IHsgcm0gLXJmICIkJGRjX2Rlc3RkaXIiOyBleGl0IDE7IH0pIFwKLQkgICYmIHJtIC1yZiAiJCRkY19kZXN0ZGlyIiBcCi0JICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkaXN0IFwKLQkgICYmIHJtIC1yZiAkKERJU1RfQVJDSElWRVMpIFwKLQkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3RjbGVhbmNoZWNrCi0JJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCi0JQChlY2hvICIkKGRpc3RkaXIpIGFyY2hpdmVzIHJlYWR5IGZvciBkaXN0cmlidXRpb246ICI7IFwKLQkgIGxpc3Q9JyQoRElTVF9BUkNISVZFUyknOyBmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRpOyBkb25lKSB8IFwKLQkgIHNlZCAtZSAnMXtoO3MvLi89L2c7cDt4O30nIC1lICckJHtwO3g7fScKLWRpc3R1bmluc3RhbGxjaGVjazoKLQlAY2QgJChkaXN0dW5pbnN0YWxsY2hlY2tfZGlyKSBcCi0JJiYgdGVzdCBgJChkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzKSB8IHdjIC1sYCAtbGUgMSBcCi0JICAgfHwgeyBlY2hvICJFUlJPUjogZmlsZXMgbGVmdCBhZnRlciB1bmluc3RhbGw6IiA7IFwKLQkgICAgICAgIGlmIHRlc3QgLW4gIiQoREVTVERJUikiOyB0aGVuIFwKLQkgICAgICAgICAgZWNobyAiICAoY2hlY2sgREVTVERJUiBzdXBwb3J0KSI7IFwKLQkgICAgICAgIGZpIDsgXAotCSAgICAgICAgJChkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzKSA7IFwKLQkgICAgICAgIGV4aXQgMTsgfSA+JjIKLWRpc3RjbGVhbmNoZWNrOiBkaXN0Y2xlYW4KLQlAaWYgdGVzdCAnJChzcmNkaXIpJyA9IC4gOyB0aGVuIFwKLQkgIGVjaG8gIkVSUk9SOiBkaXN0Y2xlYW5jaGVjayBjYW4gb25seSBydW4gZnJvbSBhIFZQQVRIIGJ1aWxkIiA7IFwKLQkgIGV4aXQgMSA7IFwKLQlmaQotCUB0ZXN0IGAkKGRpc3RjbGVhbmNoZWNrX2xpc3RmaWxlcykgfCB3YyAtbGAgLWVxIDAgXAotCSAgfHwgeyBlY2hvICJFUlJPUjogZmlsZXMgbGVmdCBpbiBidWlsZCBkaXJlY3RvcnkgYWZ0ZXIgZGlzdGNsZWFuOiIgOyBcCi0JICAgICAgICQoZGlzdGNsZWFuY2hlY2tfbGlzdGZpbGVzKSA7IFwKLQkgICAgICAgZXhpdCAxOyB9ID4mMgotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLXJlY3Vyc2l2ZQotYWxsLWFtOiBNYWtlZmlsZSAkKERBVEEpIGNvbmZpZy5oCi1pbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCi1pbnN0YWxsZGlycy1hbToKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChhY2xvY2FsZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKG1rZGlyX3ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLXJlY3Vyc2l2ZQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKLXVuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKLWluc3RhbGwtc3RyaXA6Ci0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCi0JICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tcmVjdXJzaXZlCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLXJlY3Vyc2l2ZQotCS1ybSAtZiAkKGFtX19DT05GSUdfRElTVENMRUFOX0ZJTEVTKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4taGRyIGRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLXJlY3Vyc2l2ZQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtcmVjdXJzaXZlCi0KLWluZm86IGluZm8tcmVjdXJzaXZlCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1hY2xvY2FsREFUQQotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQotCS1ybSAtZiAkKGFtX19DT05GSUdfRElTVENMRUFOX0ZJTEVTKQotCS1ybSAtcmYgJCh0b3Bfc3JjZGlyKS9hdXRvbTR0ZS5jYWNoZQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljCi0KLXBkZjogcGRmLXJlY3Vyc2l2ZQotCi1wZGYtYW06Ci0KLXBzOiBwcy1yZWN1cnNpdmUKLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWFjbG9jYWxEQVRBIHVuaW5zdGFsbC1pbmZvLWFtCi0KLXVuaW5zdGFsbC1pbmZvOiB1bmluc3RhbGwtaW5mby1yZWN1cnNpdmUKLQotLlBIT05ZOiAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGFtLS1yZWZyZXNoIGNoZWNrIFwKLQljaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLXJlY3Vyc2l2ZSBjdGFncyBcCi0JY3RhZ3MtcmVjdXJzaXZlIGRpc3QgZGlzdC1hbGwgZGlzdC1iemlwMiBkaXN0LWd6aXAgZGlzdC1zaGFyIFwKLQlkaXN0LXRhclogZGlzdC16aXAgZGlzdGNoZWNrIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWhkciBkaXN0Y2xlYW4tcmVjdXJzaXZlIGRpc3RjbGVhbi10YWdzIFwKLQlkaXN0Y2xlYW5jaGVjayBkaXN0ZGlyIGRpc3R1bmluc3RhbGxjaGVjayBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hY2xvY2FsREFUQSBpbnN0YWxsLWFtIFwKLQlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gXAotCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1zdHJpcCBcCi0JaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBpbnN0YWxsZGlycy1hbSBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAotCW1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1yZWN1cnNpdmUgXAotCXVuaW5zdGFsbCB1bmluc3RhbGwtYWNsb2NhbERBVEEgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1pbmZvLWFtCi0KLQotLlBIT05ZOiBtYWludGFpbmVyLWNoZWNrCi1tYWludGFpbmVyLWNoZWNrOgotCWNkIHRlc3RzICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICRACi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCmluZGV4IGYyNDdlMjQuLmFlZDE2NmUgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLmFtCisrKyBiL01ha2VmaWxlLmFtCkBAIC0xLDM3ICsxLDgwIEBACiAjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4gLSotTWFrZWZpbGUtKi0KLSMjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotIyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotIyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMjIENvcHlyaWdodCAoQykgMjAwMS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi0jIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0jIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSMjIDAyMTEwLTEzMDEgIFVTQQorIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIAogQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQKIAotU1VCRElSUyA9IGJ1aWxkLWF1eCBwbyBydW50aW1lLXBvIGxpYiBkYXRhIHNyYyBkb2MgZXhhbXBsZXMgdGVzdHMKK1NVQkRJUlMgPSBidWlsZC1hdXggcG8gcnVudGltZS1wbyBsaWIgZGF0YSBzcmMgZG9jIGV4YW1wbGVzIHRlc3RzIGV0YwogCiAjIEZpbGVzIGluc3RhbGxlZCBmb3IgdXNlIGJ5IEF1dG9tYWtlLgogYWNsb2NhbGRpciA9IEBhY2xvY2FsZGlyQAogYWNsb2NhbF9EQVRBID0gbTQvYmlzb24taTE4bi5tNAogCi1FWFRSQV9ESVNUID0gR05VbWFrZWZpbGUgTWFrZWZpbGUuY2ZnIE1ha2VmaWxlLm1haW50IFwKLSAgT0NoYW5nZUxvZyBQQUNLQUdJTkcgXAorRVhUUkFfRElTVCA9IC5wcmV2LXZlcnNpb24gLnZlcnNpb24gXAorICBjZmcubWsgQ2hhbmdlTG9nLTE5OTggQ2hhbmdlTG9nLTIwMTIgUEFDS0FHSU5HIFwKICAgZGpncHAvTWFrZWZpbGUubWFpbnQgZGpncHAvUkVBRE1FLmluIGRqZ3BwL2NvbmZpZy5iYXQgXAogICBkamdwcC9jb25maWcuc2VkIGRqZ3BwL2NvbmZpZy5zaXRlIGRqZ3BwL2NvbmZpZ19oLnNlZCBcCiAgIGRqZ3BwL3N1YnBpcGUuYyBkamdwcC9zdWJwaXBlLmggZGpncHAvZGp1bnBhY2suYmF0IFwKLSAgZGpncHAvZm5jaGFuZ2UubHN0CisgIGRqZ3BwL2ZuY2hhbmdlLmxzdCBkamdwcC90ZXN0c3VpdGUuc2VkCiAKK01BSU5UQUlORVJfQ0hFQ0tTID0JCQkJXAorICBtYWludGFpbmVyLWNoZWNrCQkJCVwKKyAgbWFpbnRhaW5lci1wdXNoLWNoZWNrCQkJCVwKKyAgbWFpbnRhaW5lci14bWwtY2hlY2sJCQkJXAorICBtYWludGFpbmVyLXJlbGVhc2UtY2hlY2sKKy5QSE9OWTogJChNQUlOVEFJTkVSX0NIRUNLUykKKyQoTUFJTlRBSU5FUl9DSEVDS1MpOgorCSQoQU1fVl9HRU4pY2QgdGVzdHMgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJEAKIAotLlBIT05ZOiBtYWludGFpbmVyLWNoZWNrCi1tYWludGFpbmVyLWNoZWNrOgotCWNkIHRlc3RzICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICRACisjIFNlZSBjb21tZW50cyBpbiBidWlsZC1hdXgvZ2l0LXZlcnNpb24tZ2VuLiAgSG93ZXZlciwgd2UgbWFrZSAudmVyc2lvbiBkZXBlbmQKKyMgb24gY29uZmlndXJlIHNvIHRoYXQgLnZlcnNpb24gYW5kIFZFUlNJT04vUEFDS0FHRV9WRVJTSU9OIHN0YXkgaW4gc3luYyBpbiB0aGUKKyMgd29ya2luZyBjb3B5IChmb3IgZXhhbXBsZSwgd2hlbiB5b3UgcnVuIGF1dG9yZWNvbmYgJiYgbWFrZSkuICBBbGxvd2luZyB0aGVzZQorIyB0byBmYWxsIG91dCBvZiBzeW5jIGFwcGVhcnMgdG8gaGF2ZSBsaXR0bGUgcG90ZW50aWFsIHRvIGltcHJvdmUgQmlzb24gYnVpbGQKKyMgZWZmaWNpZW5jeSAoZXZlbiBpZiB3ZSB3ZXJlIHRvIHJlcGxhY2UgVkVSU0lPTi9QQUNLQUdFX1ZFUlNJT04gd2l0aCAudmVyc2lvbgorIyBldmVyeXdoZXJlIHBvc3NpYmxlKS4gIE9uIHRoZSBvdGhlciBoYW5kLCBpdCBjb3VsZCBiZSBoYXJtZnVsLiAgRm9yIGV4YW1wbGUsCisjIGEgZGV2ZWxvcGVyIG1pZ2h0IG5haXZlbHkgcmVmZXJlbmNlIC52ZXJzaW9uIGluIGEgdGVzdCBjYXNlIHdoaWxlIHRoZSBiaXNvbgorIyBleGVjdXRhYmxlIHN0aWxsIGNvbXBpbGVzIHdpdGggVkVSU0lPTiwgYW5kIHNvIHRoZSB0ZXN0IGNhc2UgbWlnaHQgZmFpbCBvcgorIyBwYXNzIGluY29ycmVjdGx5LgorQlVJTFRfU09VUkNFUyA9ICQodG9wX3NyY2RpcikvLnZlcnNpb24KKyQodG9wX3NyY2RpcikvLnZlcnNpb246IGNvbmZpZ3VyZQorCSQoQU1fVl9HRU4pZWNobyAkKFZFUlNJT04pID4gJEAtdCAmJiBtdiAkQC10ICRACitkaXN0LWhvb2s6IGdlbi1DaGFuZ2VMb2cKKwkkKEFNX1ZfR0VOKWVjaG8gJChWRVJTSU9OKSA+ICQoZGlzdGRpcikvLnRhcmJhbGwtdmVyc2lvbgorCisuUEhPTlk6IHVwZGF0ZS1iNC1jb3B5cmlnaHQgdXBkYXRlLXBhY2thZ2UtY29weXJpZ2h0LXllYXIKK3VwZGF0ZS1iNC1jb3B5cmlnaHQ6CisJJChBTV9WX0dFTikgZmluZCBkYXRhIC10eXBlIGYJCVwKKwkgIHwgZ3JlcCAtdiAtRSAnXmRhdGEvYmlzb24ubTQkJCcJXAorCSAgfCB4YXJncyAkKGJ1aWxkX2F1eCkvJEAKKwlAZWNobyAnd2FybmluZzogc3JjL3BhcnNlLWdyYW0uW2hjXSBtYXkgbmVlZCB0byBiZSByZWdlbmVyYXRlZC4nCit1cGRhdGUtcGFja2FnZS1jb3B5cmlnaHQteWVhcjoKKwkkKEFNX1ZfR0VOKSQoYnVpbGRfYXV4KS8kQCBjb25maWd1cmUuYWMKKworZ2VuX3N0YXJ0X2RhdGUgPSAyMDEyLTAxLTE2CisuUEhPTlk6IGdlbi1DaGFuZ2VMb2cKK2dlbi1DaGFuZ2VMb2c6CisJJChBTV9WX0dFTilpZiB0ZXN0IC1kICQoc3JjZGlyKS8uZ2l0OyB0aGVuCVwKKwkgIGNsPSQoZGlzdGRpcikvQ2hhbmdlTG9nICYmCQkJXAorCSAgcm0gLWYgJCRjbC50bXAgJiYJCQkJXAorCSAgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvZ2l0bG9nLXRvLWNoYW5nZWxvZwlcCisJICAgIC0tc3RyaXAtdGFiCQkJCQlcCisJICAgIC0tc3RyaXAtY2hlcnJ5LXBpY2sJCQkJXAorCSAgICAtLW5vLWNsdXN0ZXIJCQkJXAorCSAgICAtLWFtZW5kPSQoc3JjZGlyKS9idWlsZC1hdXgvZ2l0LWxvZy1maXgJXAorCSAgICAtLXNyY2Rpcj0kKHNyY2RpcikJCQkJXAorCSAgICAtLXNpbmNlPSQoZ2VuX3N0YXJ0X2RhdGUpID4gJCRjbC50bXAgJiYJXAorCSAgbXYgLWYgJCRjbC50bXAgJCRjbDsJCQkJXAorCWZpCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5jZmcgYi9NYWtlZmlsZS5jZmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiMTU1MjMuLjAwMDAwMDAKLS0tIGEvTWFrZWZpbGUuY2ZnCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotIyBDdXN0b21pemUgTWFrZWZpbGUubWFpbnQgZm9yIEJpc29uLiAgICAgICAgICAgIC0qLSBtYWtlZmlsZSAtKi0KLSMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSMgYW55IGxhdGVyIHZlcnNpb24uCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0jIDAyMTEwLTEzMDEsIFVTQS4KLQotYnVpbGRfYXV4X2RpciA9ICQoc3JjZGlyKS9idWlsZC1hdXgKLXByZXZfdmVyc2lvbl9maWxlID0gJChidWlsZF9hdXhfZGlyKS9wcmV2LXZlcnNpb24udHh0Ci1hbm5vdW5jZV9nZW4gICA9ICQoYnVpbGRfYXV4X2RpcikvYW5ub3VuY2UtZ2VuCi1yZWxlYXNlX2FyY2hpdmVfZGlyID0gcmVsZWFzZXMKLQotIyBVc2UgYWxwaGEuZ251Lm9yZyBmb3IgYWxwaGEgYW5kIGJldGEgcmVsZWFzZXMuCi0jIFVzZSBmdHAuZ251Lm9yZyBmb3IgbWFqb3IgcmVsZWFzZXMuCi1nbnVfZnRwX2hvc3QtYWxwaGEgPSBhbHBoYQotZ251X2Z0cF9ob3N0LWJldGEgPSBhbHBoYQotZ251X2Z0cF9ob3N0LW1ham9yID0gZnRwCi1nbnVfcmVsX2hvc3QgPSAkKGdudV9mdHBfaG9zdC0kKFJFTEVBU0VfVFlQRSkpCi0KLXVybF9kaXJfbGlzdCA9IFwKLSAgZnRwOi8vJChnbnVfcmVsX2hvc3QpLmdudS5vcmcvZ251L2Jpc29uCi0KLSMgRmlsZXMgdG8gdXBkYXRlIGF1dG9tYXRpY2FsbHkuCi13Z2V0X2ZpbGVzID0gXAotICAkKGJ1aWxkX2F1eF9kaXIpL2NvbmZpZy5ndWVzcyBcCi0gICQoYnVpbGRfYXV4X2RpcikvY29uZmlnLnN1YiBcCi0gICQoYnVpbGRfYXV4X2RpcikvdGV4aW5mby50ZXggXAotCi1jdnNfZmlsZXMgPSBcCi0gICQoYnVpbGRfYXV4X2RpcikvaW5zdGFsbC1zaCBcCi0gICQoYnVpbGRfYXV4X2RpcikvbWRhdGUtc2ggXAotICAkKGJ1aWxkX2F1eF9kaXIpL21pc3NpbmcgXAotICAkKGJ1aWxkX2F1eF9kaXIpL21raW5zdGFsbGRpcnMKLQotIyBUZXN0cyBub3QgdG8gcnVuLgotbG9jYWwtY2hlY2tzLXRvLXNraXAgPSBcCi0gIGNoYW5nZWxvZy1jaGVjawpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgppbmRleCA5YzYyZjAyLi5mMzk5NWVjIDEwMDY0NAotLS0gYS9NYWtlZmlsZS5pbgorKysgYi9NYWtlZmlsZS5pbgpAQCAtMSw4ICsxLDggQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuOS42IGZyb20gTWFrZWZpbGUuYW0uCisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEyLjUgZnJvbSBNYWtlZmlsZS5hbS4KICMgQGNvbmZpZ3VyZV9pbnB1dEAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCi0jIDIwMDMsIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwogIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgpAQCAtMTQsMTUgKzE0LDQxIEBACiAKIEBTRVRfTUFLRUAKIAotc3JjZGlyID0gQHNyY2RpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKIFZQQVRIID0gQHNyY2RpckAKK2FtX19tYWtlX2RyeXJ1biA9IFwKKyAgeyBcCisgICAgYW1fX2RyeT1ubzsgXAorICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAorICAgICAgKlxcW1wgXAldKikgXAorICAgICAgICBlY2hvICdhbS0tZWNobzogOyBAZWNobyAiQU0iICBPSycgfCAkKE1BS0UpIC1mIC0gMj4vZGV2L251bGwgXAorICAgICAgICAgIHwgZ3JlcCAnXkFNIE9LJCQnID4vZGV2L251bGwgfHwgYW1fX2RyeT15ZXM7OyBcCisgICAgICAqKSBcCisgICAgICAgIGZvciBhbV9fZmxnIGluICQkTUFLRUZMQUdTOyBkbyBcCisgICAgICAgICAgY2FzZSAkJGFtX19mbGcgaW4gXAorICAgICAgICAgICAgKj0qfC0tKikgOzsgXAorICAgICAgICAgICAgKm4qKSBhbV9fZHJ5PXllczsgYnJlYWs7OyBcCisgICAgICAgICAgZXNhYzsgXAorICAgICAgICBkb25lOzsgXAorICAgIGVzYWM7IFwKKyAgICB0ZXN0ICQkYW1fX2RyeSA9IHllczsgXAorICB9CiBwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKIHBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotdG9wX2J1aWxkZGlyID0gLgorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAogYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotSU5TVEFMTCA9IEBJTlNUQUxMQAogaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKIGluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKIGluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwpAQCAtMzgsMTY5ICs2NCwxMzIxIEBACiBob3N0X3RyaXBsZXQgPSBAaG9zdEAKIHN1YmRpciA9IC4KIERJU1RfQ09NTU9OID0gUkVBRE1FICQoYW1fX2NvbmZpZ3VyZV9kZXBzKSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAotCSQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHNyY2RpcikvY29uZmlnLmhpbiBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgQUJPVVQtTkxTIEFVVEhPUlMgQ09QWUlORyBDaGFuZ2VMb2cgXAotCUlOU1RBTEwgTkVXUyBUSEFOS1MgVE9ETworCSQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9jb21waWxlIFwKKwkkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9jb25maWcuZ3Vlc3MgXAorCSQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2NvbmZpZy5ycGF0aCBcCisJJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvY29uZmlnLnN1YiBcCisJJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvaW5zdGFsbC1zaCBcCisJJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvamF2YWNvbXAuc2guaW4gXAorCSQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2phdmFleGVjLnNoLmluIFwKKwkkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9taXNzaW5nICQodG9wX3NyY2RpcikvY29uZmlndXJlIFwKKwlBQk9VVC1OTFMgQVVUSE9SUyBDT1BZSU5HIENoYW5nZUxvZyBJTlNUQUxMIE5FV1MgVEhBTktTIFRPRE8KIEFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2Jpc29uLWkxOG4ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYy13b3JraW5nLm00ICQodG9wX3NyY2RpcikvbTQvY3h4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2Rpcm5hbWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9kbWFsbG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2Rvcy5tNCAkKHRvcF9zcmNkaXIpL200L2Vycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2V4aXRmYWlsLm00ICQodG9wX3NyY2RpcikvbTQvZXh0ZW5zaW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nZXRvcHQubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0X2dsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dudWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2hhcmQtbG9jYWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2hhc2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlc19oX2dsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1sZF9nbC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXhfZ2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9tNC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9tYnJ0b3djLm00ICQodG9wX3NyY2RpcikvbTQvbWJzdGF0ZV90Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L21ic3dpZHRoLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L29ic3RhY2subTQgJCh0b3Bfc3JjZGlyKS9tNC9vbmNlb25seS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wb19nbC5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200LzAwZ251bGliLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2FsbG9jYS5tNCAkKHRvcF9zcmNkaXIpL200L2FzbS11bmRlcnNjb3JlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Fzc2VydC5tNCAkKHRvcF9zcmNkaXIpL200L2Jpc29uLWkxOG4ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYy13b3JraW5nLm00ICQodG9wX3NyY2RpcikvbTQvY2FsbG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Nsb3NlLXN0cmVhbS5tNCAkKHRvcF9zcmNkaXIpL200L2Nsb3NlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Nsb3Nlb3V0Lm00ICQodG9wX3NyY2RpcikvbTQvY29kZXNldC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb25maWctaC5tNCAkKHRvcF9zcmNkaXIpL200L2NvbmZpZ21ha2UubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3h4Lm00ICQodG9wX3NyY2RpcikvbTQvZGlybmFtZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9kbWFsbG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2RvdWJsZS1zbGFzaC1yb290Lm00ICQodG9wX3NyY2RpcikvbTQvZHVwMi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9lbnZpcm9uLm00ICQodG9wX3NyY2RpcikvbTQvZXJybm9faC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9lcnJvci5tNCAkKHRvcF9zcmNkaXIpL200L2V4cG9uZW50ZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHBvbmVudGYubTQgJCh0b3Bfc3JjZGlyKS9tNC9leHBvbmVudGwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXh0ZW5zaW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHRlcm4taW5saW5lLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZhdGFsLXNpZ25hbC5tNCAkKHRvcF9zcmNkaXIpL200L2ZjbnRsLW8ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZmNudGwubTQgJCh0b3Bfc3JjZGlyKS9tNC9mY250bF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZsZXgubTQgJCh0b3Bfc3JjZGlyKS9tNC9mbG9hdF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZvcGVuLm00ICQodG9wX3NyY2RpcikvbTQvZnBlbmRpbmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZnBpZWVlLm00ICQodG9wX3NyY2RpcikvbTQvZnByaW50Zi1wb3NpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mcmV4cC5tNCAkKHRvcF9zcmNkaXIpL200L2ZyZXhwbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mc2V0ZXJyLm00ICQodG9wX3NyY2RpcikvbTQvZnN0YXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ2V0ZGVsaW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXRkdGFibGVzaXplLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dldGxpbmUubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXRvcHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCAkKHRvcF9zcmNkaXIpL200L2dsaWJjMjEubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ251bGliLWNvbW1vbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWItY29tcC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2luY2x1ZGVfbmV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvaW50bWF4X3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMtcHJpLm00ICQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2lzbmFuLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2lzbmFuZC5tNCAkKHRvcF9zcmNkaXIpL200L2lzbmFuZi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pc25hbmwubTQgJCh0b3Bfc3JjZGlyKS9tNC9pc3dibGFuay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9qYXZhY29tcC5tNCAkKHRvcF9zcmNkaXIpL200L2phdmFleGVjLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xhcmdlZmlsZS5tNCAkKHRvcF9zcmNkaXIpL200L2xkZXhwLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xkZXhwbC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGlidW5pc3RyaW5nLWJhc2UubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9jYWxjaGFyc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvbG9jYWxlLWZyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvY2FsZS1qYS5tNCAkKHRvcF9zcmNkaXIpL200L2xvY2FsZS16aC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sb2NrLm00ICQodG9wX3NyY2RpcikvbTQvbG9uZ2xvbmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbTQubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYWxsb2MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWF0aF9oLm00ICQodG9wX3NyY2RpcikvbTQvbWJjaGFyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21iaXRlci5tNCAkKHRvcF9zcmNkaXIpL200L21icnRvd2MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWJzaW5pdC5tNCAkKHRvcF9zcmNkaXIpL200L21ic3RhdGVfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYnN3aWR0aC5tNCAkKHRvcF9zcmNkaXIpL200L21lbWNoci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tbWFwLWFub24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9tb2RlX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbXN2Yy1pbnZhbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tc3ZjLW5vdGhyb3cubTQgJCh0b3Bfc3JjZGlyKS9tNC9tdWx0aWFyY2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvbm9jcmFzaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9vYnN0YWNrLXByaW50Zi5tNCAkKHRvcF9zcmNkaXIpL200L29mZl90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L29wZW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wYXRobWF4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BlcnJvci5tNCAkKHRvcF9zcmNkaXIpL200L3BpcGUyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcG9zaXhfc3Bhd24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJpbnRmLWZyZXhwLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ByaW50Zi1mcmV4cGwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJpbnRmLXBvc2l4LXJwbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcmludGYubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCiAJJCh0b3Bfc3JjZGlyKS9tNC9xdW90ZS5tNCAkKHRvcF9zcmNkaXIpL200L3F1b3RlYXJnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3N0ZGJvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaF9nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdGRpby1zYWZlci5tNCAkKHRvcF9zcmNkaXIpL200L3N0cGNweS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9yYWlzZS5tNCAkKHRvcF9zcmNkaXIpL200L3Jhd21lbWNoci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9yZWFsbG9jLm00ICQodG9wX3NyY2RpcikvbTQvc2NoZWRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zZXRlbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9zaWdfYXRvbWljX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc2lnYWN0aW9uLm00ICQodG9wX3NyY2RpcikvbTQvc2lnbmFsX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc2lnbmFsYmxvY2tpbmcubTQgJCh0b3Bfc3JjZGlyKS9tNC9zaWduYml0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NpemVfbWF4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NucHJpbnRmLXBvc2l4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NucHJpbnRmLm00ICQodG9wX3NyY2RpcikvbTQvc3Bhd24tcGlwZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zcGF3bl9oLm00ICQodG9wX3NyY2RpcikvbTQvc3ByaW50Zi1wb3NpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zc2l6ZV90Lm00ICQodG9wX3NyY2RpcikvbTQvc3RhdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRib29sLm00ICQodG9wX3NyY2RpcikvbTQvc3RkZGVmX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RkaW50Lm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50X2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RkaW9faC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGxpYl9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cGNweS5tNCAkKHRvcF9zcmNkaXIpL200L3N0cmNocm51bC5tNCBcCiAJJCh0b3Bfc3JjZGlyKS9tNC9zdHJkdXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJlcnJvci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJlcnJvcl9yLm00ICQodG9wX3NyY2RpcikvbTQvc3RyaW5nX2gubTQgXAogCSQodG9wX3NyY2RpcikvbTQvc3RybmR1cC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cm5sZW4ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RydG9sLm00ICQodG9wX3NyY2RpcikvbTQvc3RydG91bC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdHJ2ZXJzY21wLm00ICQodG9wX3NyY2RpcikvbTQvc3VicGlwZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC90aW1ldmFyLm00ICQodG9wX3NyY2RpcikvbTQvdWludG1heF90X2dsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Vsb25nbG9uZ19nbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b3VsLm00ICQodG9wX3NyY2RpcikvbTQvc3RydmVyc2NtcC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zeXNfc29ja2V0X2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3lzX3N0YXRfaC5tNCAkKHRvcF9zcmNkaXIpL200L3N5c190eXBlc19oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N5c193YWl0X2gubTQgJCh0b3Bfc3JjZGlyKS9tNC90aHJlYWRsaWIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdGltZV9oLm00ICQodG9wX3NyY2RpcikvbTQvdGltZXZhci5tNCBcCiAJJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGQtc2FmZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC91bmxvY2tlZC1pby5tNCAkKHRvcF9zcmNkaXIpL200L3dhcm5pbmcubTQgXAotCSQodG9wX3NyY2RpcikvbTQveGFsbG9jLm00ICQodG9wX3NyY2RpcikvbTQveHN0cm5kdXAubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdW5sb2NrZWQtaW8ubTQgJCh0b3Bfc3JjZGlyKS9tNC92YXNucHJpbnRmLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ZmcHJpbnRmLXBvc2l4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ZzbnByaW50Zi1wb3NpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC92c25wcmludGYubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdnNwcmludGYtcG9zaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2FpdC1wcm9jZXNzLm00ICQodG9wX3NyY2RpcikvbTQvd2FpdHBpZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93YXJuLW9uLXVzZS5tNCAkKHRvcF9zcmNkaXIpL200L3dhcm5pbmdzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3djaGFyX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC93Y2hhcl90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3djdHlwZV9oLm00ICQodG9wX3NyY2RpcikvbTQvd2N3aWR0aC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93aW50X3QubTQgJCh0b3Bfc3JjZGlyKS9tNC94YWxsb2MubTQgXAorCSQodG9wX3NyY2RpcikvbTQveHNpemUubTQgJCh0b3Bfc3JjZGlyKS9tNC94c3RybmR1cC5tNCBcCiAJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKIGFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCiAJJChBQ0xPQ0FMX000KQogYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMgPSBjb25maWcuc3RhdHVzIGNvbmZpZy5jYWNoZSBjb25maWcubG9nIFwKLSBjb25maWd1cmUubGluZW5vIGNvbmZpZ3VyZS5zdGF0dXMubGluZW5vCi1ta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvbWtpbnN0YWxsZGlycwotQ09ORklHX0hFQURFUiA9IGNvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQorIGNvbmZpZ3VyZS5saW5lbm8gY29uZmlnLnN0YXR1cy5saW5lbm8KK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0gamF2YWNvbXAuc2ggamF2YWV4ZWMuc2gKK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitBTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQorYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCithbV9fdl9QXzAgPSBmYWxzZQorYW1fX3ZfUF8xID0gOgorQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKK2FtX192X0dFTl8xID0gCitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK2FtX192X2F0XzEgPSAKIFNPVVJDRVMgPQogRElTVF9TT1VSQ0VTID0KIFJFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBcCiAJaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBpbnN0YWxsLWluZm8tcmVjdXJzaXZlIFwKLQlpbnN0YWxsLXJlY3Vyc2l2ZSBpbnN0YWxsY2hlY2stcmVjdXJzaXZlIGluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBcCi0JcGRmLXJlY3Vyc2l2ZSBwcy1yZWN1cnNpdmUgdW5pbnN0YWxsLWluZm8tcmVjdXJzaXZlIFwKLQl1bmluc3RhbGwtcmVjdXJzaXZlCisJaW5zdGFsbC1kdmktcmVjdXJzaXZlIGluc3RhbGwtZXhlYy1yZWN1cnNpdmUgXAorCWluc3RhbGwtaHRtbC1yZWN1cnNpdmUgaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1wZGYtcmVjdXJzaXZlIGluc3RhbGwtcHMtcmVjdXJzaXZlIGluc3RhbGwtcmVjdXJzaXZlIFwKKwlpbnN0YWxsY2hlY2stcmVjdXJzaXZlIGluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBwZGYtcmVjdXJzaXZlIFwKKwlwcy1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZQorYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCisgIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAorICAgIG58bm98Tk8pIGZhbHNlOzsgXAorICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCisgIGVzYWMKIGFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwogYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKICAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAogICAgICopIGY9JCRwOzsgXAogICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19pbnN0YWxsX21heCA9IDQwCithbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAorICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCithbV9fbm9iYXNlX3N0cmlwID0gXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKK2FtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKKyAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKKyAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAorICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKKyAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKKyAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCithbV9fYmFzZV9saXN0ID0gXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCithbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCisgIHRlc3QgLXogIiQkZmlsZXMiIFwKKyAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKKyAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisgICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCisgIH0KIGFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChhY2xvY2FsZGlyKSIKLWFjbG9jYWxEQVRBX0lOU1RBTEwgPSAkKElOU1RBTExfREFUQSkKIERBVEEgPSAkKGFjbG9jYWxfREFUQSkKK1JFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTID0gbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZQlcCisgIGRpc3RjbGVhbi1yZWN1cnNpdmUgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKK0FNX1JFQ1VSU0lWRV9UQVJHRVRTID0gJChSRUNVUlNJVkVfVEFSR0VUUzotcmVjdXJzaXZlPSkgXAorCSQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFM6LXJlY3Vyc2l2ZT0pIHRhZ3MgVEFHUyBjdGFncyBDVEFHUyBcCisJY3Njb3BlIGRpc3RkaXIgZGlzdCBkaXN0LWFsbCBkaXN0Y2hlY2sKIEVUQUdTID0gZXRhZ3MKIENUQUdTID0gY3RhZ3MKK0NTQ09QRSA9IGNzY29wZQogRElTVF9TVUJESVJTID0gJChTVUJESVJTKQogRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKIGRpc3RkaXIgPSAkKFBBQ0tBR0UpLSQoVkVSU0lPTikKIHRvcF9kaXN0ZGlyID0gJChkaXN0ZGlyKQogYW1fX3JlbW92ZV9kaXN0ZGlyID0gXAotICB7IHRlc3QgISAtZCAkKGRpc3RkaXIpIFwKLSAgICB8fCB7IGZpbmQgJChkaXN0ZGlyKSAtdHlwZSBkICEgLXBlcm0gLTIwMCAtZXhlYyBjaG1vZCB1K3cge30gJzsnIFwKLSAgICAgICAgICYmIHJtIC1mciAkKGRpc3RkaXIpOyB9OyB9Ci1ESVNUX0FSQ0hJVkVTID0gJChkaXN0ZGlyKS50YXIuZ3ogJChkaXN0ZGlyKS50YXIuYnoyCisgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikiOyB0aGVuIFwKKyAgICBmaW5kICIkKGRpc3RkaXIpIiAtdHlwZSBkICEgLXBlcm0gLTIwMCAtZXhlYyBjaG1vZCB1K3cge30gJzsnIFwKKyAgICAgICYmIHJtIC1yZiAiJChkaXN0ZGlyKSIgXAorICAgICAgfHwgeyBzbGVlcCA1ICYmIHJtIC1yZiAiJChkaXN0ZGlyKSI7IH07IFwKKyAgZWxzZSA6OyBmaQorYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIgPSAkKGFtX19yZW1vdmVfZGlzdGRpcikKK2FtX19yZWxhdGl2aXplID0gXAorICBkaXIwPWBwd2RgOyBcCisgIHNlZF9maXJzdD0ncyxeXChbXi9dKlwpLy4qJCQsXDEsJzsgXAorICBzZWRfcmVzdD0ncyxeW14vXSovKiwsJzsgXAorICBzZWRfbGFzdD0ncyxeLiovXChbXi9dKlwpJCQsXDEsJzsgXAorICBzZWRfYnV0bGFzdD0ncywvKlteL10qJCQsLCc7IFwKKyAgd2hpbGUgdGVzdCAtbiAiJCRkaXIxIjsgZG8gXAorICAgIGZpcnN0PWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCisgICAgaWYgdGVzdCAiJCRmaXJzdCIgIT0gIi4iOyB0aGVuIFwKKyAgICAgIGlmIHRlc3QgIiQkZmlyc3QiID0gIi4uIjsgdGhlbiBcCisgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2xhc3QiYC8iJCRkaXIyIjsgXAorICAgICAgICBkaXIwPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9idXRsYXN0ImA7IFwKKyAgICAgIGVsc2UgXAorICAgICAgICBmaXJzdDI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKKyAgICAgICAgaWYgdGVzdCAiJCRmaXJzdDIiID0gIiQkZmlyc3QiOyB0aGVuIFwKKyAgICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKKyAgICAgICAgZWxzZSBcCisgICAgICAgICAgZGlyMj0iLi4vJCRkaXIyIjsgXAorICAgICAgICBmaTsgXAorICAgICAgICBkaXIwPSIkJGRpcjAiLyIkJGZpcnN0IjsgXAorICAgICAgZmk7IFwKKyAgICBmaTsgXAorICAgIGRpcjE9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAorICBkb25lOyBcCisgIHJlbGRpcj0iJCRkaXIyIgorRElTVF9BUkNISVZFUyA9ICQoZGlzdGRpcikudGFyLmd6ICQoZGlzdGRpcikudGFyLnh6CiBHWklQX0VOViA9IC0tYmVzdAorRElTVF9UQVJHRVRTID0gZGlzdC14eiBkaXN0LWd6aXAKIGRpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMgPSBmaW5kIC4gLXR5cGUgZiAtcHJpbnQKK2FtX19kaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzID0gJChkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzKSBcCisgIHwgc2VkICdzfF5cLi98JChwcmVmaXgpL3wnIHwgZ3JlcCAtdiAnJChpbmZvZGlyKS9kaXIkJCcKIGRpc3RjbGVhbmNoZWNrX2xpc3RmaWxlcyA9IGZpbmQgLiAtdHlwZSBmIC1wcmludAorcGtnbGliZXhlY2RpciA9IEBwa2dsaWJleGVjZGlyQAogQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQU1ERVBfRkFMU0UgPSBAQU1ERVBfRkFMU0VACi1BTURFUF9UUlVFID0gQEFNREVQX1RSVUVACitBTExPQ0EgPSBAQUxMT0NBQAorQUxMT0NBX0ggPSBAQUxMT0NBX0hACiBBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVBQTEVfVU5JVkVSU0FMX0JVSUxEID0gQEFQUExFX1VOSVZFUlNBTF9CVUlMREAKK0FSID0gQEFSQAorQVJGTEFHUyA9IEBBUkZMQUdTQAorQVNNX1NZTUJPTF9QUkVGSVggPSBAQVNNX1NZTUJPTF9QUkVGSVhACiBBVVRPQ09ORiA9IEBBVVRPQ09ORkAKIEFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKIEFVVE9NNFRFID0gQEFVVE9NNFRFQAogQVVUT01BS0UgPSBAQVVUT01BS0VACiBBV0sgPSBAQVdLQAogQklTT05fQ1hYX1dPUktTID0gQEJJU09OX0NYWF9XT1JLU0AKLUJJU09OX0NYWF9XT1JLU19GQUxTRSA9IEBCSVNPTl9DWFhfV09SS1NfRkFMU0VACi1CSVNPTl9DWFhfV09SS1NfVFJVRSA9IEBCSVNPTl9DWFhfV09SS1NfVFJVRUAKK0JJU09OX0NfV09SS1MgPSBAQklTT05fQ19XT1JLU0AKIEJJU09OX0xPQ0FMRURJUiA9IEBCSVNPTl9MT0NBTEVESVJACitCSVRTSVpFT0ZfUFRSRElGRl9UID0gQEJJVFNJWkVPRl9QVFJESUZGX1RACitCSVRTSVpFT0ZfU0lHX0FUT01JQ19UID0gQEJJVFNJWkVPRl9TSUdfQVRPTUlDX1RACitCSVRTSVpFT0ZfU0laRV9UID0gQEJJVFNJWkVPRl9TSVpFX1RACitCSVRTSVpFT0ZfV0NIQVJfVCA9IEBCSVRTSVpFT0ZfV0NIQVJfVEAKK0JJVFNJWkVPRl9XSU5UX1QgPSBAQklUU0laRU9GX1dJTlRfVEAKIENDID0gQENDQAogQ0NERVBNT0RFID0gQENDREVQTU9ERUAKIENGTEFHUyA9IEBDRkxBR1NACitDTEFTU1BBVEggPSBAQ0xBU1NQQVRIQAorQ0xBU1NQQVRIX1NFUEFSQVRPUiA9IEBDTEFTU1BBVEhfU0VQQVJBVE9SQAorQ09ORklHX0lOQ0xVREUgPSBAQ09ORklHX0lOQ0xVREVACitDT05GX0pBVkEgPSBAQ09ORl9KQVZBQAorQ09ORl9KQVZBQyA9IEBDT05GX0pBVkFDQAogQ1BQID0gQENQUEAKIENQUEZMQUdTID0gQENQUEZMQUdTQAogQ1hYID0gQENYWEAKIENYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKIENYWEZMQUdTID0gQENYWEZMQUdTQAorQ1hYX0NPTVBJTEVSX1BPU0lYTFlfQ09SUkVDVCA9IEBDWFhfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUQAogQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0NfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUID0gQENfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUQAogREVGUyA9IEBERUZTQAogREVQRElSID0gQERFUERJUkAKK0RPVCA9IEBET1RACiBFQ0hPX0MgPSBARUNIT19DQAogRUNIT19OID0gQEVDSE9fTkAKIEVDSE9fVCA9IEBFQ0hPX1RACiBFR1JFUCA9IEBFR1JFUEAKK0VNVUxUSUhPUF9ISURERU4gPSBARU1VTFRJSE9QX0hJRERFTkAKK0VNVUxUSUhPUF9WQUxVRSA9IEBFTVVMVElIT1BfVkFMVUVACitFTk9MSU5LX0hJRERFTiA9IEBFTk9MSU5LX0hJRERFTkAKK0VOT0xJTktfVkFMVUUgPSBARU5PTElOS19WQUxVRUAKK0VPVkVSRkxPV19ISURERU4gPSBARU9WRVJGTE9XX0hJRERFTkAKK0VPVkVSRkxPV19WQUxVRSA9IEBFT1ZFUkZMT1dfVkFMVUVACitFUlJOT19IID0gQEVSUk5PX0hACiBFWEVFWFQgPSBARVhFRVhUQAorRkxPQVRfSCA9IEBGTE9BVF9IQAogR0NDID0gQEdDQ0AKIEdFVE9QVF9IID0gQEdFVE9QVF9IQAorR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKK0dMSUJDMjEgPSBAR0xJQkMyMUAKIEdNU0dGTVQgPSBAR01TR0ZNVEAKK0dNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAorR05VTElCX0FDT1NGID0gQEdOVUxJQl9BQ09TRkAKK0dOVUxJQl9BQ09TTCA9IEBHTlVMSUJfQUNPU0xACitHTlVMSUJfQVNJTkYgPSBAR05VTElCX0FTSU5GQAorR05VTElCX0FTSU5MID0gQEdOVUxJQl9BU0lOTEAKK0dOVUxJQl9BVEFOMkYgPSBAR05VTElCX0FUQU4yRkAKK0dOVUxJQl9BVEFORiA9IEBHTlVMSUJfQVRBTkZACitHTlVMSUJfQVRBTkwgPSBAR05VTElCX0FUQU5MQAorR05VTElCX0FUT0xMID0gQEdOVUxJQl9BVE9MTEAKK0dOVUxJQl9CVE9XQyA9IEBHTlVMSUJfQlRPV0NACitHTlVMSUJfQ0FMTE9DX1BPU0lYID0gQEdOVUxJQl9DQUxMT0NfUE9TSVhACitHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRSA9IEBHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRUAKK0dOVUxJQl9DQlJUID0gQEdOVUxJQl9DQlJUQAorR05VTElCX0NCUlRGID0gQEdOVUxJQl9DQlJURkAKK0dOVUxJQl9DQlJUTCA9IEBHTlVMSUJfQ0JSVExACitHTlVMSUJfQ0VJTCA9IEBHTlVMSUJfQ0VJTEAKK0dOVUxJQl9DRUlMRiA9IEBHTlVMSUJfQ0VJTEZACitHTlVMSUJfQ0VJTEwgPSBAR05VTElCX0NFSUxMQAorR05VTElCX0NIRElSID0gQEdOVUxJQl9DSERJUkAKK0dOVUxJQl9DSE9XTiA9IEBHTlVMSUJfQ0hPV05ACitHTlVMSUJfQ0xPU0UgPSBAR05VTElCX0NMT1NFQAorR05VTElCX0NPUFlTSUdOID0gQEdOVUxJQl9DT1BZU0lHTkAKK0dOVUxJQl9DT1BZU0lHTkYgPSBAR05VTElCX0NPUFlTSUdORkAKK0dOVUxJQl9DT1BZU0lHTkwgPSBAR05VTElCX0NPUFlTSUdOTEAKK0dOVUxJQl9DT1NGID0gQEdOVUxJQl9DT1NGQAorR05VTElCX0NPU0hGID0gQEdOVUxJQl9DT1NIRkAKK0dOVUxJQl9DT1NMID0gQEdOVUxJQl9DT1NMQAorR05VTElCX0RQUklOVEYgPSBAR05VTElCX0RQUklOVEZACitHTlVMSUJfRFVQID0gQEdOVUxJQl9EVVBACitHTlVMSUJfRFVQMiA9IEBHTlVMSUJfRFVQMkAKK0dOVUxJQl9EVVAzID0gQEdOVUxJQl9EVVAzQAorR05VTElCX0VOVklST04gPSBAR05VTElCX0VOVklST05ACitHTlVMSUJfRVVJREFDQ0VTUyA9IEBHTlVMSUJfRVVJREFDQ0VTU0AKK0dOVUxJQl9FWFAyID0gQEdOVUxJQl9FWFAyQAorR05VTElCX0VYUDJGID0gQEdOVUxJQl9FWFAyRkAKK0dOVUxJQl9FWFAyTCA9IEBHTlVMSUJfRVhQMkxACitHTlVMSUJfRVhQRiA9IEBHTlVMSUJfRVhQRkAKK0dOVUxJQl9FWFBMID0gQEdOVUxJQl9FWFBMQAorR05VTElCX0VYUE0xID0gQEdOVUxJQl9FWFBNMUAKK0dOVUxJQl9FWFBNMUYgPSBAR05VTElCX0VYUE0xRkAKK0dOVUxJQl9FWFBNMUwgPSBAR05VTElCX0VYUE0xTEAKK0dOVUxJQl9GQUJTRiA9IEBHTlVMSUJfRkFCU0ZACitHTlVMSUJfRkFCU0wgPSBAR05VTElCX0ZBQlNMQAorR05VTElCX0ZBQ0NFU1NBVCA9IEBHTlVMSUJfRkFDQ0VTU0FUQAorR05VTElCX0ZDSERJUiA9IEBHTlVMSUJfRkNIRElSQAorR05VTElCX0ZDSE1PREFUID0gQEdOVUxJQl9GQ0hNT0RBVEAKK0dOVUxJQl9GQ0hPV05BVCA9IEBHTlVMSUJfRkNIT1dOQVRACitHTlVMSUJfRkNMT1NFID0gQEdOVUxJQl9GQ0xPU0VACitHTlVMSUJfRkNOVEwgPSBAR05VTElCX0ZDTlRMQAorR05VTElCX0ZEQVRBU1lOQyA9IEBHTlVMSUJfRkRBVEFTWU5DQAorR05VTElCX0ZET1BFTiA9IEBHTlVMSUJfRkRPUEVOQAorR05VTElCX0ZGTFVTSCA9IEBHTlVMSUJfRkZMVVNIQAorR05VTElCX0ZGU0wgPSBAR05VTElCX0ZGU0xACitHTlVMSUJfRkZTTEwgPSBAR05VTElCX0ZGU0xMQAorR05VTElCX0ZHRVRDID0gQEdOVUxJQl9GR0VUQ0AKK0dOVUxJQl9GR0VUUyA9IEBHTlVMSUJfRkdFVFNACitHTlVMSUJfRkxPT1IgPSBAR05VTElCX0ZMT09SQAorR05VTElCX0ZMT09SRiA9IEBHTlVMSUJfRkxPT1JGQAorR05VTElCX0ZMT09STCA9IEBHTlVMSUJfRkxPT1JMQAorR05VTElCX0ZNQSA9IEBHTlVMSUJfRk1BQAorR05VTElCX0ZNQUYgPSBAR05VTElCX0ZNQUZACitHTlVMSUJfRk1BTCA9IEBHTlVMSUJfRk1BTEAKK0dOVUxJQl9GTU9EID0gQEdOVUxJQl9GTU9EQAorR05VTElCX0ZNT0RGID0gQEdOVUxJQl9GTU9ERkAKK0dOVUxJQl9GTU9ETCA9IEBHTlVMSUJfRk1PRExACitHTlVMSUJfRk9QRU4gPSBAR05VTElCX0ZPUEVOQAorR05VTElCX0ZQUklOVEYgPSBAR05VTElCX0ZQUklOVEZACitHTlVMSUJfRlBSSU5URl9QT1NJWCA9IEBHTlVMSUJfRlBSSU5URl9QT1NJWEAKK0dOVUxJQl9GUFVSR0UgPSBAR05VTElCX0ZQVVJHRUAKK0dOVUxJQl9GUFVUQyA9IEBHTlVMSUJfRlBVVENACitHTlVMSUJfRlBVVFMgPSBAR05VTElCX0ZQVVRTQAorR05VTElCX0ZSRUFEID0gQEdOVUxJQl9GUkVBREAKK0dOVUxJQl9GUkVPUEVOID0gQEdOVUxJQl9GUkVPUEVOQAorR05VTElCX0ZSRVhQID0gQEdOVUxJQl9GUkVYUEAKK0dOVUxJQl9GUkVYUEYgPSBAR05VTElCX0ZSRVhQRkAKK0dOVUxJQl9GUkVYUEwgPSBAR05VTElCX0ZSRVhQTEAKK0dOVUxJQl9GU0NBTkYgPSBAR05VTElCX0ZTQ0FORkAKK0dOVUxJQl9GU0VFSyA9IEBHTlVMSUJfRlNFRUtACitHTlVMSUJfRlNFRUtPID0gQEdOVUxJQl9GU0VFS09ACitHTlVMSUJfRlNUQVQgPSBAR05VTElCX0ZTVEFUQAorR05VTElCX0ZTVEFUQVQgPSBAR05VTElCX0ZTVEFUQVRACitHTlVMSUJfRlNZTkMgPSBAR05VTElCX0ZTWU5DQAorR05VTElCX0ZURUxMID0gQEdOVUxJQl9GVEVMTEAKK0dOVUxJQl9GVEVMTE8gPSBAR05VTElCX0ZURUxMT0AKK0dOVUxJQl9GVFJVTkNBVEUgPSBAR05VTElCX0ZUUlVOQ0FURUAKK0dOVUxJQl9GVVRJTUVOUyA9IEBHTlVMSUJfRlVUSU1FTlNACitHTlVMSUJfRldSSVRFID0gQEdOVUxJQl9GV1JJVEVACitHTlVMSUJfR0VUQyA9IEBHTlVMSUJfR0VUQ0AKK0dOVUxJQl9HRVRDSEFSID0gQEdOVUxJQl9HRVRDSEFSQAorR05VTElCX0dFVENXRCA9IEBHTlVMSUJfR0VUQ1dEQAorR05VTElCX0dFVERFTElNID0gQEdOVUxJQl9HRVRERUxJTUAKK0dOVUxJQl9HRVRET01BSU5OQU1FID0gQEdOVUxJQl9HRVRET01BSU5OQU1FQAorR05VTElCX0dFVERUQUJMRVNJWkUgPSBAR05VTElCX0dFVERUQUJMRVNJWkVACitHTlVMSUJfR0VUR1JPVVBTID0gQEdOVUxJQl9HRVRHUk9VUFNACitHTlVMSUJfR0VUSE9TVE5BTUUgPSBAR05VTElCX0dFVEhPU1ROQU1FQAorR05VTElCX0dFVExJTkUgPSBAR05VTElCX0dFVExJTkVACitHTlVMSUJfR0VUTE9BREFWRyA9IEBHTlVMSUJfR0VUTE9BREFWR0AKK0dOVUxJQl9HRVRMT0dJTiA9IEBHTlVMSUJfR0VUTE9HSU5ACitHTlVMSUJfR0VUTE9HSU5fUiA9IEBHTlVMSUJfR0VUTE9HSU5fUkAKK0dOVUxJQl9HRVRQQUdFU0laRSA9IEBHTlVMSUJfR0VUUEFHRVNJWkVACitHTlVMSUJfR0VUU1VCT1BUID0gQEdOVUxJQl9HRVRTVUJPUFRACitHTlVMSUJfR0VUVVNFUlNIRUxMID0gQEdOVUxJQl9HRVRVU0VSU0hFTExACitHTlVMSUJfR0xfVU5JU1REX0hfR0VUT1BUID0gQEdOVUxJQl9HTF9VTklTVERfSF9HRVRPUFRACitHTlVMSUJfR1JBTlRQVCA9IEBHTlVMSUJfR1JBTlRQVEAKK0dOVUxJQl9HUk9VUF9NRU1CRVIgPSBAR05VTElCX0dST1VQX01FTUJFUkAKK0dOVUxJQl9IWVBPVCA9IEBHTlVMSUJfSFlQT1RACitHTlVMSUJfSFlQT1RGID0gQEdOVUxJQl9IWVBPVEZACitHTlVMSUJfSFlQT1RMID0gQEdOVUxJQl9IWVBPVExACitHTlVMSUJfSUxPR0IgPSBAR05VTElCX0lMT0dCQAorR05VTElCX0lMT0dCRiA9IEBHTlVMSUJfSUxPR0JGQAorR05VTElCX0lMT0dCTCA9IEBHTlVMSUJfSUxPR0JMQAorR05VTElCX0lNQVhBQlMgPSBAR05VTElCX0lNQVhBQlNACitHTlVMSUJfSU1BWERJViA9IEBHTlVMSUJfSU1BWERJVkAKK0dOVUxJQl9JU0FUVFkgPSBAR05VTElCX0lTQVRUWUAKK0dOVUxJQl9JU0ZJTklURSA9IEBHTlVMSUJfSVNGSU5JVEVACitHTlVMSUJfSVNJTkYgPSBAR05VTElCX0lTSU5GQAorR05VTElCX0lTTkFOID0gQEdOVUxJQl9JU05BTkAKK0dOVUxJQl9JU05BTkQgPSBAR05VTElCX0lTTkFOREAKK0dOVUxJQl9JU05BTkYgPSBAR05VTElCX0lTTkFORkAKK0dOVUxJQl9JU05BTkwgPSBAR05VTElCX0lTTkFOTEAKK0dOVUxJQl9JU1dCTEFOSyA9IEBHTlVMSUJfSVNXQkxBTktACitHTlVMSUJfSVNXQ1RZUEUgPSBAR05VTElCX0lTV0NUWVBFQAorR05VTElCX0xDSE1PRCA9IEBHTlVMSUJfTENITU9EQAorR05VTElCX0xDSE9XTiA9IEBHTlVMSUJfTENIT1dOQAorR05VTElCX0xERVhQRiA9IEBHTlVMSUJfTERFWFBGQAorR05VTElCX0xERVhQTCA9IEBHTlVMSUJfTERFWFBMQAorR05VTElCX0xJTksgPSBAR05VTElCX0xJTktACitHTlVMSUJfTElOS0FUID0gQEdOVUxJQl9MSU5LQVRACitHTlVMSUJfTE9HID0gQEdOVUxJQl9MT0dACitHTlVMSUJfTE9HMTAgPSBAR05VTElCX0xPRzEwQAorR05VTElCX0xPRzEwRiA9IEBHTlVMSUJfTE9HMTBGQAorR05VTElCX0xPRzEwTCA9IEBHTlVMSUJfTE9HMTBMQAorR05VTElCX0xPRzFQID0gQEdOVUxJQl9MT0cxUEAKK0dOVUxJQl9MT0cxUEYgPSBAR05VTElCX0xPRzFQRkAKK0dOVUxJQl9MT0cxUEwgPSBAR05VTElCX0xPRzFQTEAKK0dOVUxJQl9MT0cyID0gQEdOVUxJQl9MT0cyQAorR05VTElCX0xPRzJGID0gQEdOVUxJQl9MT0cyRkAKK0dOVUxJQl9MT0cyTCA9IEBHTlVMSUJfTE9HMkxACitHTlVMSUJfTE9HQiA9IEBHTlVMSUJfTE9HQkAKK0dOVUxJQl9MT0dCRiA9IEBHTlVMSUJfTE9HQkZACitHTlVMSUJfTE9HQkwgPSBAR05VTElCX0xPR0JMQAorR05VTElCX0xPR0YgPSBAR05VTElCX0xPR0ZACitHTlVMSUJfTE9HTCA9IEBHTlVMSUJfTE9HTEAKK0dOVUxJQl9MU0VFSyA9IEBHTlVMSUJfTFNFRUtACitHTlVMSUJfTFNUQVQgPSBAR05VTElCX0xTVEFUQAorR05VTElCX01BTExPQ19QT1NJWCA9IEBHTlVMSUJfTUFMTE9DX1BPU0lYQAorR05VTElCX01CUkxFTiA9IEBHTlVMSUJfTUJSTEVOQAorR05VTElCX01CUlRPV0MgPSBAR05VTElCX01CUlRPV0NACitHTlVMSUJfTUJTQ0FTRUNNUCA9IEBHTlVMSUJfTUJTQ0FTRUNNUEAKK0dOVUxJQl9NQlNDQVNFU1RSID0gQEdOVUxJQl9NQlNDQVNFU1RSQAorR05VTElCX01CU0NIUiA9IEBHTlVMSUJfTUJTQ0hSQAorR05VTElCX01CU0NTUE4gPSBAR05VTElCX01CU0NTUE5ACitHTlVMSUJfTUJTSU5JVCA9IEBHTlVMSUJfTUJTSU5JVEAKK0dOVUxJQl9NQlNMRU4gPSBAR05VTElCX01CU0xFTkAKK0dOVUxJQl9NQlNOQ0FTRUNNUCA9IEBHTlVMSUJfTUJTTkNBU0VDTVBACitHTlVMSUJfTUJTTkxFTiA9IEBHTlVMSUJfTUJTTkxFTkAKK0dOVUxJQl9NQlNOUlRPV0NTID0gQEdOVUxJQl9NQlNOUlRPV0NTQAorR05VTElCX01CU1BCUksgPSBAR05VTElCX01CU1BCUktACitHTlVMSUJfTUJTUENBU0VDTVAgPSBAR05VTElCX01CU1BDQVNFQ01QQAorR05VTElCX01CU1JDSFIgPSBAR05VTElCX01CU1JDSFJACitHTlVMSUJfTUJTUlRPV0NTID0gQEdOVUxJQl9NQlNSVE9XQ1NACitHTlVMSUJfTUJTU0VQID0gQEdOVUxJQl9NQlNTRVBACitHTlVMSUJfTUJTU1BOID0gQEdOVUxJQl9NQlNTUE5ACitHTlVMSUJfTUJTU1RSID0gQEdOVUxJQl9NQlNTVFJACitHTlVMSUJfTUJTVE9LX1IgPSBAR05VTElCX01CU1RPS19SQAorR05VTElCX01CVE9XQyA9IEBHTlVMSUJfTUJUT1dDQAorR05VTElCX01FTUNIUiA9IEBHTlVMSUJfTUVNQ0hSQAorR05VTElCX01FTU1FTSA9IEBHTlVMSUJfTUVNTUVNQAorR05VTElCX01FTVBDUFkgPSBAR05VTElCX01FTVBDUFlACitHTlVMSUJfTUVNUkNIUiA9IEBHTlVMSUJfTUVNUkNIUkAKK0dOVUxJQl9NS0RJUkFUID0gQEdOVUxJQl9NS0RJUkFUQAorR05VTElCX01LRFRFTVAgPSBAR05VTElCX01LRFRFTVBACitHTlVMSUJfTUtGSUZPID0gQEdOVUxJQl9NS0ZJRk9ACitHTlVMSUJfTUtGSUZPQVQgPSBAR05VTElCX01LRklGT0FUQAorR05VTElCX01LTk9EID0gQEdOVUxJQl9NS05PREAKK0dOVUxJQl9NS05PREFUID0gQEdOVUxJQl9NS05PREFUQAorR05VTElCX01LT1NURU1QID0gQEdOVUxJQl9NS09TVEVNUEAKK0dOVUxJQl9NS09TVEVNUFMgPSBAR05VTElCX01LT1NURU1QU0AKK0dOVUxJQl9NS1NURU1QID0gQEdOVUxJQl9NS1NURU1QQAorR05VTElCX01LU1RFTVBTID0gQEdOVUxJQl9NS1NURU1QU0AKK0dOVUxJQl9NS1RJTUUgPSBAR05VTElCX01LVElNRUAKK0dOVUxJQl9NT0RGID0gQEdOVUxJQl9NT0RGQAorR05VTElCX01PREZGID0gQEdOVUxJQl9NT0RGRkAKK0dOVUxJQl9NT0RGTCA9IEBHTlVMSUJfTU9ERkxACitHTlVMSUJfTkFOT1NMRUVQID0gQEdOVUxJQl9OQU5PU0xFRVBACitHTlVMSUJfTk9OQkxPQ0tJTkcgPSBAR05VTElCX05PTkJMT0NLSU5HQAorR05VTElCX09CU1RBQ0tfUFJJTlRGID0gQEdOVUxJQl9PQlNUQUNLX1BSSU5URkAKK0dOVUxJQl9PQlNUQUNLX1BSSU5URl9QT1NJWCA9IEBHTlVMSUJfT0JTVEFDS19QUklOVEZfUE9TSVhACitHTlVMSUJfT1BFTiA9IEBHTlVMSUJfT1BFTkAKK0dOVUxJQl9PUEVOQVQgPSBAR05VTElCX09QRU5BVEAKK0dOVUxJQl9QQ0xPU0UgPSBAR05VTElCX1BDTE9TRUAKK0dOVUxJQl9QRVJST1IgPSBAR05VTElCX1BFUlJPUkAKK0dOVUxJQl9QSVBFID0gQEdOVUxJQl9QSVBFQAorR05VTElCX1BJUEUyID0gQEdOVUxJQl9QSVBFMkAKK0dOVUxJQl9QT1BFTiA9IEBHTlVMSUJfUE9QRU5ACitHTlVMSUJfUE9TSVhfT1BFTlBUID0gQEdOVUxJQl9QT1NJWF9PUEVOUFRACitHTlVMSUJfUE9TSVhfU1BBV04gPSBAR05VTElCX1BPU0lYX1NQQVdOQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9ERVNUUk9ZID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfREVTVFJPWUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VURkxBR1MgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRGTEFHU0AKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUUEdST1VQID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUUEdST1VQQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBBUkFNID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0NIRURQQVJBTUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0NIRURQT0xJQ1kgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBPTElDWUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0lHREVGQVVMVCA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNJR0RFRkFVTFRACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNJR01BU0sgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdNQVNLQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9JTklUID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfSU5JVEAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VURkxBR1MgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRGTEFHU0AKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUUEdST1VQID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUUEdST1VQQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTQ0hFRFBBUkFNID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQQVJBTUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQT0xJQ1kgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTQ0hFRFBPTElDWUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0lHREVGQVVMVCA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNJR0RFRkFVTFRACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNJR01BU0sgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTSUdNQVNLQAorR05VTElCX1BPU0lYX1NQQVdOUCA9IEBHTlVMSUJfUE9TSVhfU1BBV05QQAorR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRSA9IEBHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERENMT1NFQAorR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BREREVVAyID0gQEdOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMkAKK0dOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURET1BFTiA9IEBHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU5ACitHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0RFU1RST1kgPSBAR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19ERVNUUk9ZQAorR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19JTklUID0gQEdOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfSU5JVEAKK0dOVUxJQl9QT1dGID0gQEdOVUxJQl9QT1dGQAorR05VTElCX1BSRUFEID0gQEdOVUxJQl9QUkVBREAKK0dOVUxJQl9QUklOVEYgPSBAR05VTElCX1BSSU5URkAKK0dOVUxJQl9QUklOVEZfUE9TSVggPSBAR05VTElCX1BSSU5URl9QT1NJWEAKK0dOVUxJQl9QVEhSRUFEX1NJR01BU0sgPSBAR05VTElCX1BUSFJFQURfU0lHTUFTS0AKK0dOVUxJQl9QVFNOQU1FID0gQEdOVUxJQl9QVFNOQU1FQAorR05VTElCX1BUU05BTUVfUiA9IEBHTlVMSUJfUFRTTkFNRV9SQAorR05VTElCX1BVVEMgPSBAR05VTElCX1BVVENACitHTlVMSUJfUFVUQ0hBUiA9IEBHTlVMSUJfUFVUQ0hBUkAKK0dOVUxJQl9QVVRFTlYgPSBAR05VTElCX1BVVEVOVkAKK0dOVUxJQl9QVVRTID0gQEdOVUxJQl9QVVRTQAorR05VTElCX1BXUklURSA9IEBHTlVMSUJfUFdSSVRFQAorR05VTElCX1JBSVNFID0gQEdOVUxJQl9SQUlTRUAKK0dOVUxJQl9SQU5ET00gPSBAR05VTElCX1JBTkRPTUAKK0dOVUxJQl9SQU5ET01fUiA9IEBHTlVMSUJfUkFORE9NX1JACitHTlVMSUJfUkFXTUVNQ0hSID0gQEdOVUxJQl9SQVdNRU1DSFJACitHTlVMSUJfUkVBRCA9IEBHTlVMSUJfUkVBREAKK0dOVUxJQl9SRUFETElOSyA9IEBHTlVMSUJfUkVBRExJTktACitHTlVMSUJfUkVBRExJTktBVCA9IEBHTlVMSUJfUkVBRExJTktBVEAKK0dOVUxJQl9SRUFMTE9DX1BPU0lYID0gQEdOVUxJQl9SRUFMTE9DX1BPU0lYQAorR05VTElCX1JFQUxQQVRIID0gQEdOVUxJQl9SRUFMUEFUSEAKK0dOVUxJQl9SRU1BSU5ERVIgPSBAR05VTElCX1JFTUFJTkRFUkAKK0dOVUxJQl9SRU1BSU5ERVJGID0gQEdOVUxJQl9SRU1BSU5ERVJGQAorR05VTElCX1JFTUFJTkRFUkwgPSBAR05VTElCX1JFTUFJTkRFUkxACitHTlVMSUJfUkVNT1ZFID0gQEdOVUxJQl9SRU1PVkVACitHTlVMSUJfUkVOQU1FID0gQEdOVUxJQl9SRU5BTUVACitHTlVMSUJfUkVOQU1FQVQgPSBAR05VTElCX1JFTkFNRUFUQAorR05VTElCX1JJTlQgPSBAR05VTElCX1JJTlRACitHTlVMSUJfUklOVEYgPSBAR05VTElCX1JJTlRGQAorR05VTElCX1JJTlRMID0gQEdOVUxJQl9SSU5UTEAKK0dOVUxJQl9STURJUiA9IEBHTlVMSUJfUk1ESVJACitHTlVMSUJfUk9VTkQgPSBAR05VTElCX1JPVU5EQAorR05VTElCX1JPVU5ERiA9IEBHTlVMSUJfUk9VTkRGQAorR05VTElCX1JPVU5ETCA9IEBHTlVMSUJfUk9VTkRMQAorR05VTElCX1JQTUFUQ0ggPSBAR05VTElCX1JQTUFUQ0hACitHTlVMSUJfU0NBTkYgPSBAR05VTElCX1NDQU5GQAorR05VTElCX1NFVEVOViA9IEBHTlVMSUJfU0VURU5WQAorR05VTElCX1NFVEhPU1ROQU1FID0gQEdOVUxJQl9TRVRIT1NUTkFNRUAKK0dOVUxJQl9TSUdBQ1RJT04gPSBAR05VTElCX1NJR0FDVElPTkAKK0dOVUxJQl9TSUdOQUxfSF9TSUdQSVBFID0gQEdOVUxJQl9TSUdOQUxfSF9TSUdQSVBFQAorR05VTElCX1NJR05CSVQgPSBAR05VTElCX1NJR05CSVRACitHTlVMSUJfU0lHUFJPQ01BU0sgPSBAR05VTElCX1NJR1BST0NNQVNLQAorR05VTElCX1NJTkYgPSBAR05VTElCX1NJTkZACitHTlVMSUJfU0lOSEYgPSBAR05VTElCX1NJTkhGQAorR05VTElCX1NJTkwgPSBAR05VTElCX1NJTkxACitHTlVMSUJfU0xFRVAgPSBAR05VTElCX1NMRUVQQAorR05VTElCX1NOUFJJTlRGID0gQEdOVUxJQl9TTlBSSU5URkAKK0dOVUxJQl9TUFJJTlRGX1BPU0lYID0gQEdOVUxJQl9TUFJJTlRGX1BPU0lYQAorR05VTElCX1NRUlRGID0gQEdOVUxJQl9TUVJURkAKK0dOVUxJQl9TUVJUTCA9IEBHTlVMSUJfU1FSVExACitHTlVMSUJfU1RBVCA9IEBHTlVMSUJfU1RBVEAKK0dOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HID0gQEdOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HQAorR05VTElCX1NURElPX0hfU0lHUElQRSA9IEBHTlVMSUJfU1RESU9fSF9TSUdQSVBFQAorR05VTElCX1NUUENQWSA9IEBHTlVMSUJfU1RQQ1BZQAorR05VTElCX1NUUE5DUFkgPSBAR05VTElCX1NUUE5DUFlACitHTlVMSUJfU1RSQ0FTRVNUUiA9IEBHTlVMSUJfU1RSQ0FTRVNUUkAKK0dOVUxJQl9TVFJDSFJOVUwgPSBAR05VTElCX1NUUkNIUk5VTEAKK0dOVUxJQl9TVFJEVVAgPSBAR05VTElCX1NUUkRVUEAKK0dOVUxJQl9TVFJFUlJPUiA9IEBHTlVMSUJfU1RSRVJST1JACitHTlVMSUJfU1RSRVJST1JfUiA9IEBHTlVMSUJfU1RSRVJST1JfUkAKK0dOVUxJQl9TVFJOQ0FUID0gQEdOVUxJQl9TVFJOQ0FUQAorR05VTElCX1NUUk5EVVAgPSBAR05VTElCX1NUUk5EVVBACitHTlVMSUJfU1RSTkxFTiA9IEBHTlVMSUJfU1RSTkxFTkAKK0dOVUxJQl9TVFJQQlJLID0gQEdOVUxJQl9TVFJQQlJLQAorR05VTElCX1NUUlBUSU1FID0gQEdOVUxJQl9TVFJQVElNRUAKK0dOVUxJQl9TVFJTRVAgPSBAR05VTElCX1NUUlNFUEAKK0dOVUxJQl9TVFJTSUdOQUwgPSBAR05VTElCX1NUUlNJR05BTEAKK0dOVUxJQl9TVFJTVFIgPSBAR05VTElCX1NUUlNUUkAKK0dOVUxJQl9TVFJUT0QgPSBAR05VTElCX1NUUlRPREAKK0dOVUxJQl9TVFJUT0lNQVggPSBAR05VTElCX1NUUlRPSU1BWEAKK0dOVUxJQl9TVFJUT0tfUiA9IEBHTlVMSUJfU1RSVE9LX1JACitHTlVMSUJfU1RSVE9MTCA9IEBHTlVMSUJfU1RSVE9MTEAKK0dOVUxJQl9TVFJUT1VMTCA9IEBHTlVMSUJfU1RSVE9VTExACitHTlVMSUJfU1RSVE9VTUFYID0gQEdOVUxJQl9TVFJUT1VNQVhACitHTlVMSUJfU1RSVkVSU0NNUCA9IEBHTlVMSUJfU1RSVkVSU0NNUEAKK0dOVUxJQl9TWU1MSU5LID0gQEdOVUxJQl9TWU1MSU5LQAorR05VTElCX1NZTUxJTktBVCA9IEBHTlVMSUJfU1lNTElOS0FUQAorR05VTElCX1NZU1RFTV9QT1NJWCA9IEBHTlVMSUJfU1lTVEVNX1BPU0lYQAorR05VTElCX1RBTkYgPSBAR05VTElCX1RBTkZACitHTlVMSUJfVEFOSEYgPSBAR05VTElCX1RBTkhGQAorR05VTElCX1RBTkwgPSBAR05VTElCX1RBTkxACitHTlVMSUJfVElNRUdNID0gQEdOVUxJQl9USU1FR01ACitHTlVMSUJfVElNRV9SID0gQEdOVUxJQl9USU1FX1JACitHTlVMSUJfVE1QRklMRSA9IEBHTlVMSUJfVE1QRklMRUAKK0dOVUxJQl9UT1dDVFJBTlMgPSBAR05VTElCX1RPV0NUUkFOU0AKK0dOVUxJQl9UUlVOQyA9IEBHTlVMSUJfVFJVTkNACitHTlVMSUJfVFJVTkNGID0gQEdOVUxJQl9UUlVOQ0ZACitHTlVMSUJfVFJVTkNMID0gQEdOVUxJQl9UUlVOQ0xACitHTlVMSUJfVFRZTkFNRV9SID0gQEdOVUxJQl9UVFlOQU1FX1JACitHTlVMSUJfVU5JU1REX0hfTk9OQkxPQ0tJTkcgPSBAR05VTElCX1VOSVNURF9IX05PTkJMT0NLSU5HQAorR05VTElCX1VOSVNURF9IX1NJR1BJUEUgPSBAR05VTElCX1VOSVNURF9IX1NJR1BJUEVACitHTlVMSUJfVU5MSU5LID0gQEdOVUxJQl9VTkxJTktACitHTlVMSUJfVU5MSU5LQVQgPSBAR05VTElCX1VOTElOS0FUQAorR05VTElCX1VOTE9DS1BUID0gQEdOVUxJQl9VTkxPQ0tQVEAKK0dOVUxJQl9VTlNFVEVOViA9IEBHTlVMSUJfVU5TRVRFTlZACitHTlVMSUJfVVNMRUVQID0gQEdOVUxJQl9VU0xFRVBACitHTlVMSUJfVVRJTUVOU0FUID0gQEdOVUxJQl9VVElNRU5TQVRACitHTlVMSUJfVkFTUFJJTlRGID0gQEdOVUxJQl9WQVNQUklOVEZACitHTlVMSUJfVkRQUklOVEYgPSBAR05VTElCX1ZEUFJJTlRGQAorR05VTElCX1ZGUFJJTlRGID0gQEdOVUxJQl9WRlBSSU5URkAKK0dOVUxJQl9WRlBSSU5URl9QT1NJWCA9IEBHTlVMSUJfVkZQUklOVEZfUE9TSVhACitHTlVMSUJfVkZTQ0FORiA9IEBHTlVMSUJfVkZTQ0FORkAKK0dOVUxJQl9WUFJJTlRGID0gQEdOVUxJQl9WUFJJTlRGQAorR05VTElCX1ZQUklOVEZfUE9TSVggPSBAR05VTElCX1ZQUklOVEZfUE9TSVhACitHTlVMSUJfVlNDQU5GID0gQEdOVUxJQl9WU0NBTkZACitHTlVMSUJfVlNOUFJJTlRGID0gQEdOVUxJQl9WU05QUklOVEZACitHTlVMSUJfVlNQUklOVEZfUE9TSVggPSBAR05VTElCX1ZTUFJJTlRGX1BPU0lYQAorR05VTElCX1dBSVRQSUQgPSBAR05VTElCX1dBSVRQSURACitHTlVMSUJfV0NQQ1BZID0gQEdOVUxJQl9XQ1BDUFlACitHTlVMSUJfV0NQTkNQWSA9IEBHTlVMSUJfV0NQTkNQWUAKK0dOVUxJQl9XQ1JUT01CID0gQEdOVUxJQl9XQ1JUT01CQAorR05VTElCX1dDU0NBU0VDTVAgPSBAR05VTElCX1dDU0NBU0VDTVBACitHTlVMSUJfV0NTQ0FUID0gQEdOVUxJQl9XQ1NDQVRACitHTlVMSUJfV0NTQ0hSID0gQEdOVUxJQl9XQ1NDSFJACitHTlVMSUJfV0NTQ01QID0gQEdOVUxJQl9XQ1NDTVBACitHTlVMSUJfV0NTQ09MTCA9IEBHTlVMSUJfV0NTQ09MTEAKK0dOVUxJQl9XQ1NDUFkgPSBAR05VTElCX1dDU0NQWUAKK0dOVUxJQl9XQ1NDU1BOID0gQEdOVUxJQl9XQ1NDU1BOQAorR05VTElCX1dDU0RVUCA9IEBHTlVMSUJfV0NTRFVQQAorR05VTElCX1dDU0xFTiA9IEBHTlVMSUJfV0NTTEVOQAorR05VTElCX1dDU05DQVNFQ01QID0gQEdOVUxJQl9XQ1NOQ0FTRUNNUEAKK0dOVUxJQl9XQ1NOQ0FUID0gQEdOVUxJQl9XQ1NOQ0FUQAorR05VTElCX1dDU05DTVAgPSBAR05VTElCX1dDU05DTVBACitHTlVMSUJfV0NTTkNQWSA9IEBHTlVMSUJfV0NTTkNQWUAKK0dOVUxJQl9XQ1NOTEVOID0gQEdOVUxJQl9XQ1NOTEVOQAorR05VTElCX1dDU05SVE9NQlMgPSBAR05VTElCX1dDU05SVE9NQlNACitHTlVMSUJfV0NTUEJSSyA9IEBHTlVMSUJfV0NTUEJSS0AKK0dOVUxJQl9XQ1NSQ0hSID0gQEdOVUxJQl9XQ1NSQ0hSQAorR05VTElCX1dDU1JUT01CUyA9IEBHTlVMSUJfV0NTUlRPTUJTQAorR05VTElCX1dDU1NQTiA9IEBHTlVMSUJfV0NTU1BOQAorR05VTElCX1dDU1NUUiA9IEBHTlVMSUJfV0NTU1RSQAorR05VTElCX1dDU1RPSyA9IEBHTlVMSUJfV0NTVE9LQAorR05VTElCX1dDU1dJRFRIID0gQEdOVUxJQl9XQ1NXSURUSEAKK0dOVUxJQl9XQ1NYRlJNID0gQEdOVUxJQl9XQ1NYRlJNQAorR05VTElCX1dDVE9CID0gQEdOVUxJQl9XQ1RPQkAKK0dOVUxJQl9XQ1RPTUIgPSBAR05VTElCX1dDVE9NQkAKK0dOVUxJQl9XQ1RSQU5TID0gQEdOVUxJQl9XQ1RSQU5TQAorR05VTElCX1dDVFlQRSA9IEBHTlVMSUJfV0NUWVBFQAorR05VTElCX1dDV0lEVEggPSBAR05VTElCX1dDV0lEVEhACitHTlVMSUJfV01FTUNIUiA9IEBHTlVMSUJfV01FTUNIUkAKK0dOVUxJQl9XTUVNQ01QID0gQEdOVUxJQl9XTUVNQ01QQAorR05VTElCX1dNRU1DUFkgPSBAR05VTElCX1dNRU1DUFlACitHTlVMSUJfV01FTU1PVkUgPSBAR05VTElCX1dNRU1NT1ZFQAorR05VTElCX1dNRU1TRVQgPSBAR05VTElCX1dNRU1TRVRACitHTlVMSUJfV1JJVEUgPSBAR05VTElCX1dSSVRFQAorR05VTElCX19FWElUID0gQEdOVUxJQl9fRVhJVEAKK0dSRVAgPSBAR1JFUEAKK0hBVkVfQUNPU0YgPSBASEFWRV9BQ09TRkAKK0hBVkVfQUNPU0wgPSBASEFWRV9BQ09TTEAKK0hBVkVfQVNJTkYgPSBASEFWRV9BU0lORkAKK0hBVkVfQVNJTkwgPSBASEFWRV9BU0lOTEAKK0hBVkVfQVRBTjJGID0gQEhBVkVfQVRBTjJGQAorSEFWRV9BVEFORiA9IEBIQVZFX0FUQU5GQAorSEFWRV9BVEFOTCA9IEBIQVZFX0FUQU5MQAorSEFWRV9BVE9MTCA9IEBIQVZFX0FUT0xMQAorSEFWRV9CVE9XQyA9IEBIQVZFX0JUT1dDQAorSEFWRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FID0gQEhBVkVfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRUAKK0hBVkVfQ0JSVCA9IEBIQVZFX0NCUlRACitIQVZFX0NCUlRGID0gQEhBVkVfQ0JSVEZACitIQVZFX0NCUlRMID0gQEhBVkVfQ0JSVExACitIQVZFX0NIT1dOID0gQEhBVkVfQ0hPV05ACitIQVZFX0NPUFlTSUdOID0gQEhBVkVfQ09QWVNJR05ACitIQVZFX0NPUFlTSUdOTCA9IEBIQVZFX0NPUFlTSUdOTEAKK0hBVkVfQ09TRiA9IEBIQVZFX0NPU0ZACitIQVZFX0NPU0hGID0gQEhBVkVfQ09TSEZACitIQVZFX0NPU0wgPSBASEFWRV9DT1NMQAorSEFWRV9ERUNMX0FDT1NMID0gQEhBVkVfREVDTF9BQ09TTEAKK0hBVkVfREVDTF9BU0lOTCA9IEBIQVZFX0RFQ0xfQVNJTkxACitIQVZFX0RFQ0xfQVRBTkwgPSBASEFWRV9ERUNMX0FUQU5MQAorSEFWRV9ERUNMX0NCUlRGID0gQEhBVkVfREVDTF9DQlJURkAKK0hBVkVfREVDTF9DQlJUTCA9IEBIQVZFX0RFQ0xfQ0JSVExACitIQVZFX0RFQ0xfQ0VJTEYgPSBASEFWRV9ERUNMX0NFSUxGQAorSEFWRV9ERUNMX0NFSUxMID0gQEhBVkVfREVDTF9DRUlMTEAKK0hBVkVfREVDTF9DT1BZU0lHTkYgPSBASEFWRV9ERUNMX0NPUFlTSUdORkAKK0hBVkVfREVDTF9DT1NMID0gQEhBVkVfREVDTF9DT1NMQAorSEFWRV9ERUNMX0VOVklST04gPSBASEFWRV9ERUNMX0VOVklST05ACitIQVZFX0RFQ0xfRVhQMiA9IEBIQVZFX0RFQ0xfRVhQMkAKK0hBVkVfREVDTF9FWFAyRiA9IEBIQVZFX0RFQ0xfRVhQMkZACitIQVZFX0RFQ0xfRVhQMkwgPSBASEFWRV9ERUNMX0VYUDJMQAorSEFWRV9ERUNMX0VYUEwgPSBASEFWRV9ERUNMX0VYUExACitIQVZFX0RFQ0xfRVhQTTFMID0gQEhBVkVfREVDTF9FWFBNMUxACitIQVZFX0RFQ0xfRkNIRElSID0gQEhBVkVfREVDTF9GQ0hESVJACitIQVZFX0RFQ0xfRkRBVEFTWU5DID0gQEhBVkVfREVDTF9GREFUQVNZTkNACitIQVZFX0RFQ0xfRkxPT1JGID0gQEhBVkVfREVDTF9GTE9PUkZACitIQVZFX0RFQ0xfRkxPT1JMID0gQEhBVkVfREVDTF9GTE9PUkxACitIQVZFX0RFQ0xfRlBVUkdFID0gQEhBVkVfREVDTF9GUFVSR0VACitIQVZFX0RFQ0xfRlJFWFBMID0gQEhBVkVfREVDTF9GUkVYUExACitIQVZFX0RFQ0xfRlNFRUtPID0gQEhBVkVfREVDTF9GU0VFS09ACitIQVZFX0RFQ0xfRlRFTExPID0gQEhBVkVfREVDTF9GVEVMTE9ACitIQVZFX0RFQ0xfR0VUREVMSU0gPSBASEFWRV9ERUNMX0dFVERFTElNQAorSEFWRV9ERUNMX0dFVERPTUFJTk5BTUUgPSBASEFWRV9ERUNMX0dFVERPTUFJTk5BTUVACitIQVZFX0RFQ0xfR0VUTElORSA9IEBIQVZFX0RFQ0xfR0VUTElORUAKK0hBVkVfREVDTF9HRVRMT0FEQVZHID0gQEhBVkVfREVDTF9HRVRMT0FEQVZHQAorSEFWRV9ERUNMX0dFVExPR0lOX1IgPSBASEFWRV9ERUNMX0dFVExPR0lOX1JACitIQVZFX0RFQ0xfR0VUUEFHRVNJWkUgPSBASEFWRV9ERUNMX0dFVFBBR0VTSVpFQAorSEFWRV9ERUNMX0dFVFVTRVJTSEVMTCA9IEBIQVZFX0RFQ0xfR0VUVVNFUlNIRUxMQAorSEFWRV9ERUNMX0lNQVhBQlMgPSBASEFWRV9ERUNMX0lNQVhBQlNACitIQVZFX0RFQ0xfSU1BWERJViA9IEBIQVZFX0RFQ0xfSU1BWERJVkAKK0hBVkVfREVDTF9MREVYUEwgPSBASEFWRV9ERUNMX0xERVhQTEAKK0hBVkVfREVDTF9MT0NBTFRJTUVfUiA9IEBIQVZFX0RFQ0xfTE9DQUxUSU1FX1JACitIQVZFX0RFQ0xfTE9HMTBMID0gQEhBVkVfREVDTF9MT0cxMExACitIQVZFX0RFQ0xfTE9HMiA9IEBIQVZFX0RFQ0xfTE9HMkAKK0hBVkVfREVDTF9MT0cyRiA9IEBIQVZFX0RFQ0xfTE9HMkZACitIQVZFX0RFQ0xfTE9HMkwgPSBASEFWRV9ERUNMX0xPRzJMQAorSEFWRV9ERUNMX0xPR0IgPSBASEFWRV9ERUNMX0xPR0JACitIQVZFX0RFQ0xfTE9HTCA9IEBIQVZFX0RFQ0xfTE9HTEAKK0hBVkVfREVDTF9NRU1NRU0gPSBASEFWRV9ERUNMX01FTU1FTUAKK0hBVkVfREVDTF9NRU1SQ0hSID0gQEhBVkVfREVDTF9NRU1SQ0hSQAorSEFWRV9ERUNMX09CU1RBQ0tfUFJJTlRGID0gQEhBVkVfREVDTF9PQlNUQUNLX1BSSU5URkAKK0hBVkVfREVDTF9SRU1BSU5ERVIgPSBASEFWRV9ERUNMX1JFTUFJTkRFUkAKK0hBVkVfREVDTF9SRU1BSU5ERVJMID0gQEhBVkVfREVDTF9SRU1BSU5ERVJMQAorSEFWRV9ERUNMX1JJTlRGID0gQEhBVkVfREVDTF9SSU5URkAKK0hBVkVfREVDTF9ST1VORCA9IEBIQVZFX0RFQ0xfUk9VTkRACitIQVZFX0RFQ0xfUk9VTkRGID0gQEhBVkVfREVDTF9ST1VOREZACitIQVZFX0RFQ0xfUk9VTkRMID0gQEhBVkVfREVDTF9ST1VORExACitIQVZFX0RFQ0xfU0VURU5WID0gQEhBVkVfREVDTF9TRVRFTlZACitIQVZFX0RFQ0xfU0VUSE9TVE5BTUUgPSBASEFWRV9ERUNMX1NFVEhPU1ROQU1FQAorSEFWRV9ERUNMX1NJTkwgPSBASEFWRV9ERUNMX1NJTkxACitIQVZFX0RFQ0xfU05QUklOVEYgPSBASEFWRV9ERUNMX1NOUFJJTlRGQAorSEFWRV9ERUNMX1NRUlRMID0gQEhBVkVfREVDTF9TUVJUTEAKK0hBVkVfREVDTF9TVFJEVVAgPSBASEFWRV9ERUNMX1NUUkRVUEAKK0hBVkVfREVDTF9TVFJFUlJPUl9SID0gQEhBVkVfREVDTF9TVFJFUlJPUl9SQAorSEFWRV9ERUNMX1NUUk5EVVAgPSBASEFWRV9ERUNMX1NUUk5EVVBACitIQVZFX0RFQ0xfU1RSTkxFTiA9IEBIQVZFX0RFQ0xfU1RSTkxFTkAKK0hBVkVfREVDTF9TVFJTSUdOQUwgPSBASEFWRV9ERUNMX1NUUlNJR05BTEAKK0hBVkVfREVDTF9TVFJUT0lNQVggPSBASEFWRV9ERUNMX1NUUlRPSU1BWEAKK0hBVkVfREVDTF9TVFJUT0tfUiA9IEBIQVZFX0RFQ0xfU1RSVE9LX1JACitIQVZFX0RFQ0xfU1RSVE9VTUFYID0gQEhBVkVfREVDTF9TVFJUT1VNQVhACitIQVZFX0RFQ0xfVEFOTCA9IEBIQVZFX0RFQ0xfVEFOTEAKK0hBVkVfREVDTF9UUlVOQyA9IEBIQVZFX0RFQ0xfVFJVTkNACitIQVZFX0RFQ0xfVFJVTkNGID0gQEhBVkVfREVDTF9UUlVOQ0ZACitIQVZFX0RFQ0xfVFJVTkNMID0gQEhBVkVfREVDTF9UUlVOQ0xACitIQVZFX0RFQ0xfVFRZTkFNRV9SID0gQEhBVkVfREVDTF9UVFlOQU1FX1JACitIQVZFX0RFQ0xfVU5TRVRFTlYgPSBASEFWRV9ERUNMX1VOU0VURU5WQAorSEFWRV9ERUNMX1ZTTlBSSU5URiA9IEBIQVZFX0RFQ0xfVlNOUFJJTlRGQAorSEFWRV9ERUNMX1dDVE9CID0gQEhBVkVfREVDTF9XQ1RPQkAKK0hBVkVfREVDTF9XQ1dJRFRIID0gQEhBVkVfREVDTF9XQ1dJRFRIQAorSEFWRV9EUFJJTlRGID0gQEhBVkVfRFBSSU5URkAKK0hBVkVfRFVQMiA9IEBIQVZFX0RVUDJACitIQVZFX0RVUDMgPSBASEFWRV9EVVAzQAorSEFWRV9FVUlEQUNDRVNTID0gQEhBVkVfRVVJREFDQ0VTU0AKK0hBVkVfRVhQRiA9IEBIQVZFX0VYUEZACitIQVZFX0VYUEwgPSBASEFWRV9FWFBMQAorSEFWRV9FWFBNMSA9IEBIQVZFX0VYUE0xQAorSEFWRV9FWFBNMUYgPSBASEFWRV9FWFBNMUZACitIQVZFX0ZBQlNGID0gQEhBVkVfRkFCU0ZACitIQVZFX0ZBQlNMID0gQEhBVkVfRkFCU0xACitIQVZFX0ZBQ0NFU1NBVCA9IEBIQVZFX0ZBQ0NFU1NBVEAKK0hBVkVfRkNIRElSID0gQEhBVkVfRkNIRElSQAorSEFWRV9GQ0hNT0RBVCA9IEBIQVZFX0ZDSE1PREFUQAorSEFWRV9GQ0hPV05BVCA9IEBIQVZFX0ZDSE9XTkFUQAorSEFWRV9GQ05UTCA9IEBIQVZFX0ZDTlRMQAorSEFWRV9GREFUQVNZTkMgPSBASEFWRV9GREFUQVNZTkNACitIQVZFX0ZFQVRVUkVTX0ggPSBASEFWRV9GRUFUVVJFU19IQAorSEFWRV9GRlNMID0gQEhBVkVfRkZTTEAKK0hBVkVfRkZTTEwgPSBASEFWRV9GRlNMTEAKK0hBVkVfRk1BID0gQEhBVkVfRk1BQAorSEFWRV9GTUFGID0gQEhBVkVfRk1BRkAKK0hBVkVfRk1BTCA9IEBIQVZFX0ZNQUxACitIQVZFX0ZNT0RGID0gQEhBVkVfRk1PREZACitIQVZFX0ZNT0RMID0gQEhBVkVfRk1PRExACitIQVZFX0ZSRVhQRiA9IEBIQVZFX0ZSRVhQRkAKK0hBVkVfRlNFRUtPID0gQEhBVkVfRlNFRUtPQAorSEFWRV9GU1RBVEFUID0gQEhBVkVfRlNUQVRBVEAKK0hBVkVfRlNZTkMgPSBASEFWRV9GU1lOQ0AKK0hBVkVfRlRFTExPID0gQEhBVkVfRlRFTExPQAorSEFWRV9GVFJVTkNBVEUgPSBASEFWRV9GVFJVTkNBVEVACitIQVZFX0ZVVElNRU5TID0gQEhBVkVfRlVUSU1FTlNACitIQVZFX0dDSl9DID0gQEhBVkVfR0NKX0NACitIQVZFX0dDSl9JTl9QQVRIID0gQEhBVkVfR0NKX0lOX1BBVEhACitIQVZFX0dFVERUQUJMRVNJWkUgPSBASEFWRV9HRVREVEFCTEVTSVpFQAorSEFWRV9HRVRHUk9VUFMgPSBASEFWRV9HRVRHUk9VUFNACitIQVZFX0dFVEhPU1ROQU1FID0gQEhBVkVfR0VUSE9TVE5BTUVACitIQVZFX0dFVExPR0lOID0gQEhBVkVfR0VUTE9HSU5ACitIQVZFX0dFVE9QVF9IID0gQEhBVkVfR0VUT1BUX0hACitIQVZFX0dFVFBBR0VTSVpFID0gQEhBVkVfR0VUUEFHRVNJWkVACitIQVZFX0dFVFNVQk9QVCA9IEBIQVZFX0dFVFNVQk9QVEAKK0hBVkVfR0lKID0gQEhBVkVfR0lKQAorSEFWRV9HSUpfSU5fUEFUSCA9IEBIQVZFX0dJSl9JTl9QQVRIQAorSEFWRV9HUkFOVFBUID0gQEhBVkVfR1JBTlRQVEAKK0hBVkVfR1JPVVBfTUVNQkVSID0gQEhBVkVfR1JPVVBfTUVNQkVSQAorSEFWRV9IWVBPVEYgPSBASEFWRV9IWVBPVEZACitIQVZFX0hZUE9UTCA9IEBIQVZFX0hZUE9UTEAKK0hBVkVfSUxPR0IgPSBASEFWRV9JTE9HQkAKK0hBVkVfSUxPR0JGID0gQEhBVkVfSUxPR0JGQAorSEFWRV9JTE9HQkwgPSBASEFWRV9JTE9HQkxACitIQVZFX0lOVFRZUEVTX0ggPSBASEFWRV9JTlRUWVBFU19IQAorSEFWRV9JU05BTkQgPSBASEFWRV9JU05BTkRACitIQVZFX0lTTkFORiA9IEBIQVZFX0lTTkFORkAKK0hBVkVfSVNOQU5MID0gQEhBVkVfSVNOQU5MQAorSEFWRV9JU1dCTEFOSyA9IEBIQVZFX0lTV0JMQU5LQAorSEFWRV9JU1dDTlRSTCA9IEBIQVZFX0lTV0NOVFJMQAorSEFWRV9KQVZBID0gQEhBVkVfSkFWQUAKK0hBVkVfSkFWQUMgPSBASEFWRV9KQVZBQ0AKK0hBVkVfSkFWQUNfRU5WVkFSID0gQEhBVkVfSkFWQUNfRU5WVkFSQAorSEFWRV9KQVZBQ19JTl9QQVRIID0gQEhBVkVfSkFWQUNfSU5fUEFUSEAKK0hBVkVfSkFWQV9FTlZWQVIgPSBASEFWRV9KQVZBX0VOVlZBUkAKK0hBVkVfSkFWQV9JTl9QQVRIID0gQEhBVkVfSkFWQV9JTl9QQVRIQAorSEFWRV9KSUtFUyA9IEBIQVZFX0pJS0VTQAorSEFWRV9KSUtFU19JTl9QQVRIID0gQEhBVkVfSklLRVNfSU5fUEFUSEAKK0hBVkVfSlJFID0gQEhBVkVfSlJFQAorSEFWRV9KUkVfSU5fUEFUSCA9IEBIQVZFX0pSRV9JTl9QQVRIQAorSEFWRV9KVklFVyA9IEBIQVZFX0pWSUVXQAorSEFWRV9KVklFV19JTl9QQVRIID0gQEhBVkVfSlZJRVdfSU5fUEFUSEAKK0hBVkVfTENITU9EID0gQEhBVkVfTENITU9EQAorSEFWRV9MQ0hPV04gPSBASEFWRV9MQ0hPV05ACitIQVZFX0xERVhQRiA9IEBIQVZFX0xERVhQRkAKK0hBVkVfTElOSyA9IEBIQVZFX0xJTktACitIQVZFX0xJTktBVCA9IEBIQVZFX0xJTktBVEAKK0hBVkVfTE9HMTBGID0gQEhBVkVfTE9HMTBGQAorSEFWRV9MT0cxMEwgPSBASEFWRV9MT0cxMExACitIQVZFX0xPRzFQID0gQEhBVkVfTE9HMVBACitIQVZFX0xPRzFQRiA9IEBIQVZFX0xPRzFQRkAKK0hBVkVfTE9HMVBMID0gQEhBVkVfTE9HMVBMQAorSEFWRV9MT0dCRiA9IEBIQVZFX0xPR0JGQAorSEFWRV9MT0dCTCA9IEBIQVZFX0xPR0JMQAorSEFWRV9MT0dGID0gQEhBVkVfTE9HRkAKK0hBVkVfTE9HTCA9IEBIQVZFX0xPR0xACitIQVZFX0xPTkdfTE9OR19JTlQgPSBASEFWRV9MT05HX0xPTkdfSU5UQAorSEFWRV9MU1RBVCA9IEBIQVZFX0xTVEFUQAorSEFWRV9NQlJMRU4gPSBASEFWRV9NQlJMRU5ACitIQVZFX01CUlRPV0MgPSBASEFWRV9NQlJUT1dDQAorSEFWRV9NQlNJTklUID0gQEhBVkVfTUJTSU5JVEAKK0hBVkVfTUJTTEVOID0gQEhBVkVfTUJTTEVOQAorSEFWRV9NQlNOUlRPV0NTID0gQEhBVkVfTUJTTlJUT1dDU0AKK0hBVkVfTUJTUlRPV0NTID0gQEhBVkVfTUJTUlRPV0NTQAorSEFWRV9NRU1DSFIgPSBASEFWRV9NRU1DSFJACitIQVZFX01FTVBDUFkgPSBASEFWRV9NRU1QQ1BZQAorSEFWRV9NS0RJUkFUID0gQEhBVkVfTUtESVJBVEAKK0hBVkVfTUtEVEVNUCA9IEBIQVZFX01LRFRFTVBACitIQVZFX01LRklGTyA9IEBIQVZFX01LRklGT0AKK0hBVkVfTUtGSUZPQVQgPSBASEFWRV9NS0ZJRk9BVEAKK0hBVkVfTUtOT0QgPSBASEFWRV9NS05PREAKK0hBVkVfTUtOT0RBVCA9IEBIQVZFX01LTk9EQVRACitIQVZFX01LT1NURU1QID0gQEhBVkVfTUtPU1RFTVBACitIQVZFX01LT1NURU1QUyA9IEBIQVZFX01LT1NURU1QU0AKK0hBVkVfTUtTVEVNUCA9IEBIQVZFX01LU1RFTVBACitIQVZFX01LU1RFTVBTID0gQEhBVkVfTUtTVEVNUFNACitIQVZFX01PREZGID0gQEhBVkVfTU9ERkZACitIQVZFX01PREZMID0gQEhBVkVfTU9ERkxACitIQVZFX01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUiA9IEBIQVZFX01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUkAKK0hBVkVfTkFOT1NMRUVQID0gQEhBVkVfTkFOT1NMRUVQQAorSEFWRV9PUEVOQVQgPSBASEFWRV9PUEVOQVRACitIQVZFX09TX0ggPSBASEFWRV9PU19IQAorSEFWRV9QQ0xPU0UgPSBASEFWRV9QQ0xPU0VACitIQVZFX1BJUEUgPSBASEFWRV9QSVBFQAorSEFWRV9QSVBFMiA9IEBIQVZFX1BJUEUyQAorSEFWRV9QT1BFTiA9IEBIQVZFX1BPUEVOQAorSEFWRV9QT1NJWF9PUEVOUFQgPSBASEFWRV9QT1NJWF9PUEVOUFRACitIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HID0gQEhBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkdACitIQVZFX1BPU0lYX1NQQVdOID0gQEhBVkVfUE9TSVhfU1BBV05ACitIQVZFX1BPU0lYX1NQQVdOQVRUUl9UID0gQEhBVkVfUE9TSVhfU1BBV05BVFRSX1RACitIQVZFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19UID0gQEhBVkVfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX1RACitIQVZFX1BPV0YgPSBASEFWRV9QT1dGQAorSEFWRV9QUkVBRCA9IEBIQVZFX1BSRUFEQAorSEFWRV9QVEhSRUFEX1NJR01BU0sgPSBASEFWRV9QVEhSRUFEX1NJR01BU0tACitIQVZFX1BUU05BTUUgPSBASEFWRV9QVFNOQU1FQAorSEFWRV9QVFNOQU1FX1IgPSBASEFWRV9QVFNOQU1FX1JACitIQVZFX1BXUklURSA9IEBIQVZFX1BXUklURUAKK0hBVkVfUkFJU0UgPSBASEFWRV9SQUlTRUAKK0hBVkVfUkFORE9NID0gQEhBVkVfUkFORE9NQAorSEFWRV9SQU5ET01fSCA9IEBIQVZFX1JBTkRPTV9IQAorSEFWRV9SQU5ET01fUiA9IEBIQVZFX1JBTkRPTV9SQAorSEFWRV9SQVdNRU1DSFIgPSBASEFWRV9SQVdNRU1DSFJACitIQVZFX1JFQURMSU5LID0gQEhBVkVfUkVBRExJTktACitIQVZFX1JFQURMSU5LQVQgPSBASEFWRV9SRUFETElOS0FUQAorSEFWRV9SRUFMUEFUSCA9IEBIQVZFX1JFQUxQQVRIQAorSEFWRV9SRU1BSU5ERVIgPSBASEFWRV9SRU1BSU5ERVJACitIQVZFX1JFTUFJTkRFUkYgPSBASEFWRV9SRU1BSU5ERVJGQAorSEFWRV9SRU5BTUVBVCA9IEBIQVZFX1JFTkFNRUFUQAorSEFWRV9SSU5UID0gQEhBVkVfUklOVEAKK0hBVkVfUklOVEwgPSBASEFWRV9SSU5UTEAKK0hBVkVfUlBNQVRDSCA9IEBIQVZFX1JQTUFUQ0hACitIQVZFX1NBTUVfTE9OR19ET1VCTEVfQVNfRE9VQkxFID0gQEhBVkVfU0FNRV9MT05HX0RPVUJMRV9BU19ET1VCTEVACitIQVZFX1NDSEVEX0ggPSBASEFWRV9TQ0hFRF9IQAorSEFWRV9TRVRFTlYgPSBASEFWRV9TRVRFTlZACitIQVZFX1NFVEhPU1ROQU1FID0gQEhBVkVfU0VUSE9TVE5BTUVACitIQVZFX1NJR0FDVElPTiA9IEBIQVZFX1NJR0FDVElPTkAKK0hBVkVfU0lHSEFORExFUl9UID0gQEhBVkVfU0lHSEFORExFUl9UQAorSEFWRV9TSUdJTkZPX1QgPSBASEFWRV9TSUdJTkZPX1RACitIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1QgPSBASEFWRV9TSUdORURfU0lHX0FUT01JQ19UQAorSEFWRV9TSUdORURfV0NIQVJfVCA9IEBIQVZFX1NJR05FRF9XQ0hBUl9UQAorSEFWRV9TSUdORURfV0lOVF9UID0gQEhBVkVfU0lHTkVEX1dJTlRfVEAKK0hBVkVfU0lHU0VUX1QgPSBASEFWRV9TSUdTRVRfVEAKK0hBVkVfU0lORiA9IEBIQVZFX1NJTkZACitIQVZFX1NJTkhGID0gQEhBVkVfU0lOSEZACitIQVZFX1NJTkwgPSBASEFWRV9TSU5MQAorSEFWRV9TTEVFUCA9IEBIQVZFX1NMRUVQQAorSEFWRV9TUEFXTl9IID0gQEhBVkVfU1BBV05fSEAKK0hBVkVfU1FSVEYgPSBASEFWRV9TUVJURkAKK0hBVkVfU1FSVEwgPSBASEFWRV9TUVJUTEAKK0hBVkVfU1RESU5UX0ggPSBASEFWRV9TVERJTlRfSEAKK0hBVkVfU1RQQ1BZID0gQEhBVkVfU1RQQ1BZQAorSEFWRV9TVFBOQ1BZID0gQEhBVkVfU1RQTkNQWUAKK0hBVkVfU1RSQ0FTRVNUUiA9IEBIQVZFX1NUUkNBU0VTVFJACitIQVZFX1NUUkNIUk5VTCA9IEBIQVZFX1NUUkNIUk5VTEAKK0hBVkVfU1RSUEJSSyA9IEBIQVZFX1NUUlBCUktACitIQVZFX1NUUlBUSU1FID0gQEhBVkVfU1RSUFRJTUVACitIQVZFX1NUUlNFUCA9IEBIQVZFX1NUUlNFUEAKK0hBVkVfU1RSVE9EID0gQEhBVkVfU1RSVE9EQAorSEFWRV9TVFJUT0xMID0gQEhBVkVfU1RSVE9MTEAKK0hBVkVfU1RSVE9VTEwgPSBASEFWRV9TVFJUT1VMTEAKK0hBVkVfU1RSVUNUX1JBTkRPTV9EQVRBID0gQEhBVkVfU1RSVUNUX1JBTkRPTV9EQVRBQAorSEFWRV9TVFJVQ1RfU0NIRURfUEFSQU0gPSBASEFWRV9TVFJVQ1RfU0NIRURfUEFSQU1ACitIQVZFX1NUUlVDVF9TSUdBQ1RJT05fU0FfU0lHQUNUSU9OID0gQEhBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT05ACitIQVZFX1NUUlZFUlNDTVAgPSBASEFWRV9TVFJWRVJTQ01QQAorSEFWRV9TWU1MSU5LID0gQEhBVkVfU1lNTElOS0AKK0hBVkVfU1lNTElOS0FUID0gQEhBVkVfU1lNTElOS0FUQAorSEFWRV9TWVNfQklUWVBFU19IID0gQEhBVkVfU1lTX0JJVFlQRVNfSEAKK0hBVkVfU1lTX0lOVFRZUEVTX0ggPSBASEFWRV9TWVNfSU5UVFlQRVNfSEAKK0hBVkVfU1lTX0xPQURBVkdfSCA9IEBIQVZFX1NZU19MT0FEQVZHX0hACitIQVZFX1NZU19QQVJBTV9IID0gQEhBVkVfU1lTX1BBUkFNX0hACitIQVZFX1NZU19UWVBFU19IID0gQEhBVkVfU1lTX1RZUEVTX0hACitIQVZFX1RBTkYgPSBASEFWRV9UQU5GQAorSEFWRV9UQU5IRiA9IEBIQVZFX1RBTkhGQAorSEFWRV9UQU5MID0gQEhBVkVfVEFOTEAKK0hBVkVfVElNRUdNID0gQEhBVkVfVElNRUdNQAorSEFWRV9UWVBFX1ZPTEFUSUxFX1NJR19BVE9NSUNfVCA9IEBIQVZFX1RZUEVfVk9MQVRJTEVfU0lHX0FUT01JQ19UQAorSEFWRV9VTklTVERfSCA9IEBIQVZFX1VOSVNURF9IQAorSEFWRV9VTkxJTktBVCA9IEBIQVZFX1VOTElOS0FUQAorSEFWRV9VTkxPQ0tQVCA9IEBIQVZFX1VOTE9DS1BUQAorSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UID0gQEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVEAKK0hBVkVfVVNMRUVQID0gQEhBVkVfVVNMRUVQQAorSEFWRV9VVElNRU5TQVQgPSBASEFWRV9VVElNRU5TQVRACitIQVZFX1ZBU1BSSU5URiA9IEBIQVZFX1ZBU1BSSU5URkAKK0hBVkVfVkRQUklOVEYgPSBASEFWRV9WRFBSSU5URkAKK0hBVkVfV0NIQVJfSCA9IEBIQVZFX1dDSEFSX0hACitIQVZFX1dDSEFSX1QgPSBASEFWRV9XQ0hBUl9UQAorSEFWRV9XQ1BDUFkgPSBASEFWRV9XQ1BDUFlACitIQVZFX1dDUE5DUFkgPSBASEFWRV9XQ1BOQ1BZQAorSEFWRV9XQ1JUT01CID0gQEhBVkVfV0NSVE9NQkAKK0hBVkVfV0NTQ0FTRUNNUCA9IEBIQVZFX1dDU0NBU0VDTVBACitIQVZFX1dDU0NBVCA9IEBIQVZFX1dDU0NBVEAKK0hBVkVfV0NTQ0hSID0gQEhBVkVfV0NTQ0hSQAorSEFWRV9XQ1NDTVAgPSBASEFWRV9XQ1NDTVBACitIQVZFX1dDU0NPTEwgPSBASEFWRV9XQ1NDT0xMQAorSEFWRV9XQ1NDUFkgPSBASEFWRV9XQ1NDUFlACitIQVZFX1dDU0NTUE4gPSBASEFWRV9XQ1NDU1BOQAorSEFWRV9XQ1NEVVAgPSBASEFWRV9XQ1NEVVBACitIQVZFX1dDU0xFTiA9IEBIQVZFX1dDU0xFTkAKK0hBVkVfV0NTTkNBU0VDTVAgPSBASEFWRV9XQ1NOQ0FTRUNNUEAKK0hBVkVfV0NTTkNBVCA9IEBIQVZFX1dDU05DQVRACitIQVZFX1dDU05DTVAgPSBASEFWRV9XQ1NOQ01QQAorSEFWRV9XQ1NOQ1BZID0gQEhBVkVfV0NTTkNQWUAKK0hBVkVfV0NTTkxFTiA9IEBIQVZFX1dDU05MRU5ACitIQVZFX1dDU05SVE9NQlMgPSBASEFWRV9XQ1NOUlRPTUJTQAorSEFWRV9XQ1NQQlJLID0gQEhBVkVfV0NTUEJSS0AKK0hBVkVfV0NTUkNIUiA9IEBIQVZFX1dDU1JDSFJACitIQVZFX1dDU1JUT01CUyA9IEBIQVZFX1dDU1JUT01CU0AKK0hBVkVfV0NTU1BOID0gQEhBVkVfV0NTU1BOQAorSEFWRV9XQ1NTVFIgPSBASEFWRV9XQ1NTVFJACitIQVZFX1dDU1RPSyA9IEBIQVZFX1dDU1RPS0AKK0hBVkVfV0NTV0lEVEggPSBASEFWRV9XQ1NXSURUSEAKK0hBVkVfV0NTWEZSTSA9IEBIQVZFX1dDU1hGUk1ACitIQVZFX1dDVFJBTlNfVCA9IEBIQVZFX1dDVFJBTlNfVEAKK0hBVkVfV0NUWVBFX0ggPSBASEFWRV9XQ1RZUEVfSEAKK0hBVkVfV0NUWVBFX1QgPSBASEFWRV9XQ1RZUEVfVEAKK0hBVkVfV0lOU09DSzJfSCA9IEBIQVZFX1dJTlNPQ0syX0hACitIQVZFX1dJTlRfVCA9IEBIQVZFX1dJTlRfVEAKK0hBVkVfV01FTUNIUiA9IEBIQVZFX1dNRU1DSFJACitIQVZFX1dNRU1DTVAgPSBASEFWRV9XTUVNQ01QQAorSEFWRV9XTUVNQ1BZID0gQEhBVkVfV01FTUNQWUAKK0hBVkVfV01FTU1PVkUgPSBASEFWRV9XTUVNTU9WRUAKK0hBVkVfV01FTVNFVCA9IEBIQVZFX1dNRU1TRVRACiBIQVZFX19CT09MID0gQEhBVkVfX0JPT0xACitIQVZFX19FWElUID0gQEhBVkVfX0VYSVRACitIRUxQMk1BTiA9IEBIRUxQMk1BTkAKK0lOQ0xVREVfTkVYVCA9IEBJTkNMVURFX05FWFRACitJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFID0gQElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVACitJTlNUQUxMID0gQElOU1RBTExACiBJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAogSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKIElOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAogSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVDMyX01BWF9MVF9JTlRNQVhfTUFYID0gQElOVDMyX01BWF9MVF9JTlRNQVhfTUFYQAorSU5UNjRfTUFYX0VRX0xPTkdfTUFYID0gQElOVDY0X01BWF9FUV9MT05HX01BWEAKIElOVExMSUJTID0gQElOVExMSUJTQAogSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSVNOQU5EX0xJQk0gPSBASVNOQU5EX0xJQk1ACitJU05BTkZfTElCTSA9IEBJU05BTkZfTElCTUAKK0lTTkFOTF9MSUJNID0gQElTTkFOTF9MSUJNQAorSVNOQU5fTElCTSA9IEBJU05BTl9MSUJNQAorTERFWFBMX0xJQk0gPSBATERFWFBMX0xJQk1ACitMREVYUF9MSUJNID0gQExERVhQX0xJQk1ACiBMREZMQUdTID0gQExERkxBR1NACiBMRVggPSBATEVYQAogTEVYTElCID0gQExFWExJQkAKK0xFWF9JU19GTEVYID0gQExFWF9JU19GTEVYQAogTEVYX09VVFBVVF9ST09UID0gQExFWF9PVVRQVVRfUk9PVEAKK0xJQkJJU09OX0xJQkRFUFMgPSBATElCQklTT05fTElCREVQU0AKK0xJQkJJU09OX0xUTElCREVQUyA9IEBMSUJCSVNPTl9MVExJQkRFUFNACiBMSUJJQ09OViA9IEBMSUJJQ09OVkAKIExJQklOVEwgPSBATElCSU5UTEAKK0xJQk1VTFRJVEhSRUFEID0gQExJQk1VTFRJVEhSRUFEQAogTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUFRIID0gQExJQlBUSEAKK0xJQlBUSF9QUkVGSVggPSBATElCUFRIX1BSRUZJWEAKIExJQlMgPSBATElCU0AKK0xJQlRIUkVBRCA9IEBMSUJUSFJFQURACitMSUJVTklTVFJJTkdfVU5JVFlQRVNfSCA9IEBMSUJVTklTVFJJTkdfVU5JVFlQRVNfSEAKK0xJQlVOSVNUUklOR19VTklXSURUSF9IID0gQExJQlVOSVNUUklOR19VTklXSURUSF9IQAorTE9DQUxDSEFSU0VUX1RFU1RTX0VOVklST05NRU5UID0gQExPQ0FMQ0hBUlNFVF9URVNUU19FTlZJUk9OTUVOVEAKK0xPQ0FMRV9GUl9VVEY4ID0gQExPQ0FMRV9GUl9VVEY4QAorTE9DQUxFX0pBID0gQExPQ0FMRV9KQUAKK0xPQ0FMRV9aSF9DTiA9IEBMT0NBTEVfWkhfQ05ACiBMVExJQklDT05WID0gQExUTElCSUNPTlZACiBMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJNVUxUSVRIUkVBRCA9IEBMVExJQk1VTFRJVEhSRUFEQAogTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xUTElCUFRIID0gQExUTElCUFRIQAorTFRMSUJUSFJFQUQgPSBATFRMSUJUSFJFQURACiBNNCA9IEBNNEAKK000X0RFQlVHRklMRSA9IEBNNF9ERUJVR0ZJTEVACitNNF9HTlUgPSBATTRfR05VQAogTUFLRUlORk8gPSBATUFLRUlORk9ACi1NS0lOU1RBTExESVJTID0gQE1LSU5TVEFMTERJUlNACitNS0RJUl9QID0gQE1LRElSX1BACiBNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAogTVNHTUVSR0UgPSBATVNHTUVSR0VACi1PMENGTEFHUyA9IEBPMENGTEFHU0AKLU8wQ1hYRkxBR1MgPSBATzBDWFhGTEFHU0AKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0VSUk5PX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRVJSTk9fSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0ZDTlRMX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRkNOVExfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0ZMT0FUX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRkxPQVRfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0dFVE9QVF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX0dFVE9QVF9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfSU5UVFlQRVNfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9JTlRUWVBFU19IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfTUFUSF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX01BVEhfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NDSEVEX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU0NIRURfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NJR05BTF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NJR05BTF9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1BBV05fSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TUEFXTl9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1REREVGX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1REREVGX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERJTlRfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERJTlRfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURElPX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RESU9fSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURExJQl9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURExJQl9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RSSU5HX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RSSU5HX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfU1RBVF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19TVEFUX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfVFlQRVNfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfVFlQRVNfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19XQUlUX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1lTX1dBSVRfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1RJTUVfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9USU1FX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9VTklTVERfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9VTklTVERfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDSEFSX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfV0NIQVJfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDVFlQRV9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDVFlQRV9IQAorTkVYVF9FUlJOT19IID0gQE5FWFRfRVJSTk9fSEAKK05FWFRfRkNOVExfSCA9IEBORVhUX0ZDTlRMX0hACitORVhUX0ZMT0FUX0ggPSBATkVYVF9GTE9BVF9IQAorTkVYVF9HRVRPUFRfSCA9IEBORVhUX0dFVE9QVF9IQAorTkVYVF9JTlRUWVBFU19IID0gQE5FWFRfSU5UVFlQRVNfSEAKK05FWFRfTUFUSF9IID0gQE5FWFRfTUFUSF9IQAorTkVYVF9TQ0hFRF9IID0gQE5FWFRfU0NIRURfSEAKK05FWFRfU0lHTkFMX0ggPSBATkVYVF9TSUdOQUxfSEAKK05FWFRfU1BBV05fSCA9IEBORVhUX1NQQVdOX0hACitORVhUX1NURERFRl9IID0gQE5FWFRfU1REREVGX0hACitORVhUX1NURElOVF9IID0gQE5FWFRfU1RESU5UX0hACitORVhUX1NURElPX0ggPSBATkVYVF9TVERJT19IQAorTkVYVF9TVERMSUJfSCA9IEBORVhUX1NURExJQl9IQAorTkVYVF9TVFJJTkdfSCA9IEBORVhUX1NUUklOR19IQAorTkVYVF9TWVNfU1RBVF9IID0gQE5FWFRfU1lTX1NUQVRfSEAKK05FWFRfU1lTX1RZUEVTX0ggPSBATkVYVF9TWVNfVFlQRVNfSEAKK05FWFRfU1lTX1dBSVRfSCA9IEBORVhUX1NZU19XQUlUX0hACitORVhUX1RJTUVfSCA9IEBORVhUX1RJTUVfSEAKK05FWFRfVU5JU1REX0ggPSBATkVYVF9VTklTVERfSEAKK05FWFRfV0NIQVJfSCA9IEBORVhUX1dDSEFSX0hACitORVhUX1dDVFlQRV9IID0gQE5FWFRfV0NUWVBFX0hACiBPQkpFWFQgPSBAT0JKRVhUQAogUEFDS0FHRSA9IEBQQUNLQUdFQAogUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX0NPUFlSSUdIVF9ZRUFSID0gQFBBQ0tBR0VfQ09QWVJJR0hUX1lFQVJACiBQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAogUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACiBQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACiBQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAogUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMID0gQFBFUkxACiBQT1NVQiA9IEBQT1NVQkAKK1BSQUdNQV9DT0xVTU5TID0gQFBSQUdNQV9DT0xVTU5TQAorUFJBR01BX1NZU1RFTV9IRUFERVIgPSBAUFJBR01BX1NZU1RFTV9IRUFERVJACitQUklQVFJfUFJFRklYID0gQFBSSVBUUl9QUkVGSVhACitQUklfTUFDUk9TX0JST0tFTiA9IEBQUklfTUFDUk9TX0JST0tFTkAKK1BUSFJFQURfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQyA9IEBQVEhSRUFEX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUNACitQVFJESUZGX1RfU1VGRklYID0gQFBUUkRJRkZfVF9TVUZGSVhACiBSQU5MSUIgPSBAUkFOTElCQAorUkVQTEFDRV9CVE9XQyA9IEBSRVBMQUNFX0JUT1dDQAorUkVQTEFDRV9DQUxMT0MgPSBAUkVQTEFDRV9DQUxMT0NACitSRVBMQUNFX0NBTk9OSUNBTElaRV9GSUxFX05BTUUgPSBAUkVQTEFDRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FQAorUkVQTEFDRV9DQlJURiA9IEBSRVBMQUNFX0NCUlRGQAorUkVQTEFDRV9DQlJUTCA9IEBSRVBMQUNFX0NCUlRMQAorUkVQTEFDRV9DRUlMID0gQFJFUExBQ0VfQ0VJTEAKK1JFUExBQ0VfQ0VJTEYgPSBAUkVQTEFDRV9DRUlMRkAKK1JFUExBQ0VfQ0VJTEwgPSBAUkVQTEFDRV9DRUlMTEAKK1JFUExBQ0VfQ0hPV04gPSBAUkVQTEFDRV9DSE9XTkAKK1JFUExBQ0VfQ0xPU0UgPSBAUkVQTEFDRV9DTE9TRUAKK1JFUExBQ0VfRFBSSU5URiA9IEBSRVBMQUNFX0RQUklOVEZACitSRVBMQUNFX0RVUCA9IEBSRVBMQUNFX0RVUEAKK1JFUExBQ0VfRFVQMiA9IEBSRVBMQUNFX0RVUDJACitSRVBMQUNFX0VYUDIgPSBAUkVQTEFDRV9FWFAyQAorUkVQTEFDRV9FWFAyTCA9IEBSRVBMQUNFX0VYUDJMQAorUkVQTEFDRV9FWFBNMSA9IEBSRVBMQUNFX0VYUE0xQAorUkVQTEFDRV9FWFBNMUYgPSBAUkVQTEFDRV9FWFBNMUZACitSRVBMQUNFX0ZBQlNMID0gQFJFUExBQ0VfRkFCU0xACitSRVBMQUNFX0ZDSE9XTkFUID0gQFJFUExBQ0VfRkNIT1dOQVRACitSRVBMQUNFX0ZDTE9TRSA9IEBSRVBMQUNFX0ZDTE9TRUAKK1JFUExBQ0VfRkNOVEwgPSBAUkVQTEFDRV9GQ05UTEAKK1JFUExBQ0VfRkRPUEVOID0gQFJFUExBQ0VfRkRPUEVOQAorUkVQTEFDRV9GRkxVU0ggPSBAUkVQTEFDRV9GRkxVU0hACitSRVBMQUNFX0ZMT09SID0gQFJFUExBQ0VfRkxPT1JACitSRVBMQUNFX0ZMT09SRiA9IEBSRVBMQUNFX0ZMT09SRkAKK1JFUExBQ0VfRkxPT1JMID0gQFJFUExBQ0VfRkxPT1JMQAorUkVQTEFDRV9GTUEgPSBAUkVQTEFDRV9GTUFACitSRVBMQUNFX0ZNQUYgPSBAUkVQTEFDRV9GTUFGQAorUkVQTEFDRV9GTUFMID0gQFJFUExBQ0VfRk1BTEAKK1JFUExBQ0VfRk1PRCA9IEBSRVBMQUNFX0ZNT0RACitSRVBMQUNFX0ZNT0RGID0gQFJFUExBQ0VfRk1PREZACitSRVBMQUNFX0ZNT0RMID0gQFJFUExBQ0VfRk1PRExACitSRVBMQUNFX0ZPUEVOID0gQFJFUExBQ0VfRk9QRU5ACitSRVBMQUNFX0ZQUklOVEYgPSBAUkVQTEFDRV9GUFJJTlRGQAorUkVQTEFDRV9GUFVSR0UgPSBAUkVQTEFDRV9GUFVSR0VACitSRVBMQUNFX0ZSRU9QRU4gPSBAUkVQTEFDRV9GUkVPUEVOQAorUkVQTEFDRV9GUkVYUCA9IEBSRVBMQUNFX0ZSRVhQQAorUkVQTEFDRV9GUkVYUEYgPSBAUkVQTEFDRV9GUkVYUEZACitSRVBMQUNFX0ZSRVhQTCA9IEBSRVBMQUNFX0ZSRVhQTEAKK1JFUExBQ0VfRlNFRUsgPSBAUkVQTEFDRV9GU0VFS0AKK1JFUExBQ0VfRlNFRUtPID0gQFJFUExBQ0VfRlNFRUtPQAorUkVQTEFDRV9GU1RBVCA9IEBSRVBMQUNFX0ZTVEFUQAorUkVQTEFDRV9GU1RBVEFUID0gQFJFUExBQ0VfRlNUQVRBVEAKK1JFUExBQ0VfRlRFTEwgPSBAUkVQTEFDRV9GVEVMTEAKK1JFUExBQ0VfRlRFTExPID0gQFJFUExBQ0VfRlRFTExPQAorUkVQTEFDRV9GVFJVTkNBVEUgPSBAUkVQTEFDRV9GVFJVTkNBVEVACitSRVBMQUNFX0ZVVElNRU5TID0gQFJFUExBQ0VfRlVUSU1FTlNACitSRVBMQUNFX0dFVENXRCA9IEBSRVBMQUNFX0dFVENXREAKK1JFUExBQ0VfR0VUREVMSU0gPSBAUkVQTEFDRV9HRVRERUxJTUAKK1JFUExBQ0VfR0VURE9NQUlOTkFNRSA9IEBSRVBMQUNFX0dFVERPTUFJTk5BTUVACitSRVBMQUNFX0dFVEdST1VQUyA9IEBSRVBMQUNFX0dFVEdST1VQU0AKK1JFUExBQ0VfR0VUTElORSA9IEBSRVBMQUNFX0dFVExJTkVACitSRVBMQUNFX0dFVExPR0lOX1IgPSBAUkVQTEFDRV9HRVRMT0dJTl9SQAorUkVQTEFDRV9HRVRQQUdFU0laRSA9IEBSRVBMQUNFX0dFVFBBR0VTSVpFQAorUkVQTEFDRV9IVUdFX1ZBTCA9IEBSRVBMQUNFX0hVR0VfVkFMQAorUkVQTEFDRV9IWVBPVCA9IEBSRVBMQUNFX0hZUE9UQAorUkVQTEFDRV9IWVBPVEYgPSBAUkVQTEFDRV9IWVBPVEZACitSRVBMQUNFX0hZUE9UTCA9IEBSRVBMQUNFX0hZUE9UTEAKK1JFUExBQ0VfSUxPR0IgPSBAUkVQTEFDRV9JTE9HQkAKK1JFUExBQ0VfSUxPR0JGID0gQFJFUExBQ0VfSUxPR0JGQAorUkVQTEFDRV9JU0FUVFkgPSBAUkVQTEFDRV9JU0FUVFlACitSRVBMQUNFX0lTRklOSVRFID0gQFJFUExBQ0VfSVNGSU5JVEVACitSRVBMQUNFX0lTSU5GID0gQFJFUExBQ0VfSVNJTkZACitSRVBMQUNFX0lTTkFOID0gQFJFUExBQ0VfSVNOQU5ACitSRVBMQUNFX0lTV0JMQU5LID0gQFJFUExBQ0VfSVNXQkxBTktACitSRVBMQUNFX0lTV0NOVFJMID0gQFJFUExBQ0VfSVNXQ05UUkxACitSRVBMQUNFX0lUT0xEID0gQFJFUExBQ0VfSVRPTERACitSRVBMQUNFX0xDSE9XTiA9IEBSRVBMQUNFX0xDSE9XTkAKK1JFUExBQ0VfTERFWFBMID0gQFJFUExBQ0VfTERFWFBMQAorUkVQTEFDRV9MSU5LID0gQFJFUExBQ0VfTElOS0AKK1JFUExBQ0VfTElOS0FUID0gQFJFUExBQ0VfTElOS0FUQAorUkVQTEFDRV9MT0NBTFRJTUVfUiA9IEBSRVBMQUNFX0xPQ0FMVElNRV9SQAorUkVQTEFDRV9MT0cgPSBAUkVQTEFDRV9MT0dACitSRVBMQUNFX0xPRzEwID0gQFJFUExBQ0VfTE9HMTBACitSRVBMQUNFX0xPRzEwRiA9IEBSRVBMQUNFX0xPRzEwRkAKK1JFUExBQ0VfTE9HMTBMID0gQFJFUExBQ0VfTE9HMTBMQAorUkVQTEFDRV9MT0cxUCA9IEBSRVBMQUNFX0xPRzFQQAorUkVQTEFDRV9MT0cxUEYgPSBAUkVQTEFDRV9MT0cxUEZACitSRVBMQUNFX0xPRzFQTCA9IEBSRVBMQUNFX0xPRzFQTEAKK1JFUExBQ0VfTE9HMiA9IEBSRVBMQUNFX0xPRzJACitSRVBMQUNFX0xPRzJGID0gQFJFUExBQ0VfTE9HMkZACitSRVBMQUNFX0xPRzJMID0gQFJFUExBQ0VfTE9HMkxACitSRVBMQUNFX0xPR0IgPSBAUkVQTEFDRV9MT0dCQAorUkVQTEFDRV9MT0dCRiA9IEBSRVBMQUNFX0xPR0JGQAorUkVQTEFDRV9MT0dCTCA9IEBSRVBMQUNFX0xPR0JMQAorUkVQTEFDRV9MT0dGID0gQFJFUExBQ0VfTE9HRkAKK1JFUExBQ0VfTE9HTCA9IEBSRVBMQUNFX0xPR0xACitSRVBMQUNFX0xTRUVLID0gQFJFUExBQ0VfTFNFRUtACitSRVBMQUNFX0xTVEFUID0gQFJFUExBQ0VfTFNUQVRACitSRVBMQUNFX01BTExPQyA9IEBSRVBMQUNFX01BTExPQ0AKK1JFUExBQ0VfTUJSTEVOID0gQFJFUExBQ0VfTUJSTEVOQAorUkVQTEFDRV9NQlJUT1dDID0gQFJFUExBQ0VfTUJSVE9XQ0AKK1JFUExBQ0VfTUJTSU5JVCA9IEBSRVBMQUNFX01CU0lOSVRACitSRVBMQUNFX01CU05SVE9XQ1MgPSBAUkVQTEFDRV9NQlNOUlRPV0NTQAorUkVQTEFDRV9NQlNSVE9XQ1MgPSBAUkVQTEFDRV9NQlNSVE9XQ1NACitSRVBMQUNFX01CU1RBVEVfVCA9IEBSRVBMQUNFX01CU1RBVEVfVEAKK1JFUExBQ0VfTUJUT1dDID0gQFJFUExBQ0VfTUJUT1dDQAorUkVQTEFDRV9NRU1DSFIgPSBAUkVQTEFDRV9NRU1DSFJACitSRVBMQUNFX01FTU1FTSA9IEBSRVBMQUNFX01FTU1FTUAKK1JFUExBQ0VfTUtESVIgPSBAUkVQTEFDRV9NS0RJUkAKK1JFUExBQ0VfTUtGSUZPID0gQFJFUExBQ0VfTUtGSUZPQAorUkVQTEFDRV9NS05PRCA9IEBSRVBMQUNFX01LTk9EQAorUkVQTEFDRV9NS1NURU1QID0gQFJFUExBQ0VfTUtTVEVNUEAKK1JFUExBQ0VfTUtUSU1FID0gQFJFUExBQ0VfTUtUSU1FQAorUkVQTEFDRV9NT0RGID0gQFJFUExBQ0VfTU9ERkAKK1JFUExBQ0VfTU9ERkYgPSBAUkVQTEFDRV9NT0RGRkAKK1JFUExBQ0VfTU9ERkwgPSBAUkVQTEFDRV9NT0RGTEAKK1JFUExBQ0VfTkFOID0gQFJFUExBQ0VfTkFOQAorUkVQTEFDRV9OQU5PU0xFRVAgPSBAUkVQTEFDRV9OQU5PU0xFRVBACitSRVBMQUNFX05VTEwgPSBAUkVQTEFDRV9OVUxMQAorUkVQTEFDRV9PQlNUQUNLX1BSSU5URiA9IEBSRVBMQUNFX09CU1RBQ0tfUFJJTlRGQAorUkVQTEFDRV9PUEVOID0gQFJFUExBQ0VfT1BFTkAKK1JFUExBQ0VfT1BFTkFUID0gQFJFUExBQ0VfT1BFTkFUQAorUkVQTEFDRV9QRVJST1IgPSBAUkVQTEFDRV9QRVJST1JACitSRVBMQUNFX1BPUEVOID0gQFJFUExBQ0VfUE9QRU5ACitSRVBMQUNFX1BPU0lYX1NQQVdOID0gQFJFUExBQ0VfUE9TSVhfU1BBV05ACitSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRSA9IEBSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRUAKK1JFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDIgPSBAUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMkAKK1JFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU4gPSBAUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURET1BFTkAKK1JFUExBQ0VfUFJFQUQgPSBAUkVQTEFDRV9QUkVBREAKK1JFUExBQ0VfUFJJTlRGID0gQFJFUExBQ0VfUFJJTlRGQAorUkVQTEFDRV9QVEhSRUFEX1NJR01BU0sgPSBAUkVQTEFDRV9QVEhSRUFEX1NJR01BU0tACitSRVBMQUNFX1BUU05BTUUgPSBAUkVQTEFDRV9QVFNOQU1FQAorUkVQTEFDRV9QVFNOQU1FX1IgPSBAUkVQTEFDRV9QVFNOQU1FX1JACitSRVBMQUNFX1BVVEVOViA9IEBSRVBMQUNFX1BVVEVOVkAKK1JFUExBQ0VfUFdSSVRFID0gQFJFUExBQ0VfUFdSSVRFQAorUkVQTEFDRV9SQUlTRSA9IEBSRVBMQUNFX1JBSVNFQAorUkVQTEFDRV9SQU5ET01fUiA9IEBSRVBMQUNFX1JBTkRPTV9SQAorUkVQTEFDRV9SRUFEID0gQFJFUExBQ0VfUkVBREAKK1JFUExBQ0VfUkVBRExJTksgPSBAUkVQTEFDRV9SRUFETElOS0AKK1JFUExBQ0VfUkVBTExPQyA9IEBSRVBMQUNFX1JFQUxMT0NACitSRVBMQUNFX1JFQUxQQVRIID0gQFJFUExBQ0VfUkVBTFBBVEhACitSRVBMQUNFX1JFTUFJTkRFUiA9IEBSRVBMQUNFX1JFTUFJTkRFUkAKK1JFUExBQ0VfUkVNQUlOREVSRiA9IEBSRVBMQUNFX1JFTUFJTkRFUkZACitSRVBMQUNFX1JFTUFJTkRFUkwgPSBAUkVQTEFDRV9SRU1BSU5ERVJMQAorUkVQTEFDRV9SRU1PVkUgPSBAUkVQTEFDRV9SRU1PVkVACitSRVBMQUNFX1JFTkFNRSA9IEBSRVBMQUNFX1JFTkFNRUAKK1JFUExBQ0VfUkVOQU1FQVQgPSBAUkVQTEFDRV9SRU5BTUVBVEAKK1JFUExBQ0VfUk1ESVIgPSBAUkVQTEFDRV9STURJUkAKK1JFUExBQ0VfUk9VTkQgPSBAUkVQTEFDRV9ST1VOREAKK1JFUExBQ0VfUk9VTkRGID0gQFJFUExBQ0VfUk9VTkRGQAorUkVQTEFDRV9ST1VOREwgPSBAUkVQTEFDRV9ST1VORExACitSRVBMQUNFX1NFVEVOViA9IEBSRVBMQUNFX1NFVEVOVkAKK1JFUExBQ0VfU0lHTkJJVCA9IEBSRVBMQUNFX1NJR05CSVRACitSRVBMQUNFX1NJR05CSVRfVVNJTkdfR0NDID0gQFJFUExBQ0VfU0lHTkJJVF9VU0lOR19HQ0NACitSRVBMQUNFX1NMRUVQID0gQFJFUExBQ0VfU0xFRVBACitSRVBMQUNFX1NOUFJJTlRGID0gQFJFUExBQ0VfU05QUklOVEZACitSRVBMQUNFX1NQUklOVEYgPSBAUkVQTEFDRV9TUFJJTlRGQAorUkVQTEFDRV9TUVJUTCA9IEBSRVBMQUNFX1NRUlRMQAorUkVQTEFDRV9TVEFUID0gQFJFUExBQ0VfU1RBVEAKK1JFUExBQ0VfU1RESU9fUkVBRF9GVU5DUyA9IEBSRVBMQUNFX1NURElPX1JFQURfRlVOQ1NACitSRVBMQUNFX1NURElPX1dSSVRFX0ZVTkNTID0gQFJFUExBQ0VfU1RESU9fV1JJVEVfRlVOQ1NACitSRVBMQUNFX1NUUE5DUFkgPSBAUkVQTEFDRV9TVFBOQ1BZQAorUkVQTEFDRV9TVFJDQVNFU1RSID0gQFJFUExBQ0VfU1RSQ0FTRVNUUkAKK1JFUExBQ0VfU1RSQ0hSTlVMID0gQFJFUExBQ0VfU1RSQ0hSTlVMQAorUkVQTEFDRV9TVFJEVVAgPSBAUkVQTEFDRV9TVFJEVVBACitSRVBMQUNFX1NUUkVSUk9SID0gQFJFUExBQ0VfU1RSRVJST1JACitSRVBMQUNFX1NUUkVSUk9SX1IgPSBAUkVQTEFDRV9TVFJFUlJPUl9SQAorUkVQTEFDRV9TVFJOQ0FUID0gQFJFUExBQ0VfU1RSTkNBVEAKK1JFUExBQ0VfU1RSTkRVUCA9IEBSRVBMQUNFX1NUUk5EVVBACitSRVBMQUNFX1NUUk5MRU4gPSBAUkVQTEFDRV9TVFJOTEVOQAorUkVQTEFDRV9TVFJTSUdOQUwgPSBAUkVQTEFDRV9TVFJTSUdOQUxACitSRVBMQUNFX1NUUlNUUiA9IEBSRVBMQUNFX1NUUlNUUkAKK1JFUExBQ0VfU1RSVE9EID0gQFJFUExBQ0VfU1RSVE9EQAorUkVQTEFDRV9TVFJUT0lNQVggPSBAUkVQTEFDRV9TVFJUT0lNQVhACitSRVBMQUNFX1NUUlRPS19SID0gQFJFUExBQ0VfU1RSVE9LX1JACitSRVBMQUNFX1NZTUxJTksgPSBAUkVQTEFDRV9TWU1MSU5LQAorUkVQTEFDRV9USU1FR00gPSBAUkVQTEFDRV9USU1FR01ACitSRVBMQUNFX1RNUEZJTEUgPSBAUkVQTEFDRV9UTVBGSUxFQAorUkVQTEFDRV9UT1dMT1dFUiA9IEBSRVBMQUNFX1RPV0xPV0VSQAorUkVQTEFDRV9UUlVOQyA9IEBSRVBMQUNFX1RSVU5DQAorUkVQTEFDRV9UUlVOQ0YgPSBAUkVQTEFDRV9UUlVOQ0ZACitSRVBMQUNFX1RSVU5DTCA9IEBSRVBMQUNFX1RSVU5DTEAKK1JFUExBQ0VfVFRZTkFNRV9SID0gQFJFUExBQ0VfVFRZTkFNRV9SQAorUkVQTEFDRV9VTkxJTksgPSBAUkVQTEFDRV9VTkxJTktACitSRVBMQUNFX1VOTElOS0FUID0gQFJFUExBQ0VfVU5MSU5LQVRACitSRVBMQUNFX1VOU0VURU5WID0gQFJFUExBQ0VfVU5TRVRFTlZACitSRVBMQUNFX1VTTEVFUCA9IEBSRVBMQUNFX1VTTEVFUEAKK1JFUExBQ0VfVVRJTUVOU0FUID0gQFJFUExBQ0VfVVRJTUVOU0FUQAorUkVQTEFDRV9WQVNQUklOVEYgPSBAUkVQTEFDRV9WQVNQUklOVEZACitSRVBMQUNFX1ZEUFJJTlRGID0gQFJFUExBQ0VfVkRQUklOVEZACitSRVBMQUNFX1ZGUFJJTlRGID0gQFJFUExBQ0VfVkZQUklOVEZACitSRVBMQUNFX1ZQUklOVEYgPSBAUkVQTEFDRV9WUFJJTlRGQAorUkVQTEFDRV9WU05QUklOVEYgPSBAUkVQTEFDRV9WU05QUklOVEZACitSRVBMQUNFX1ZTUFJJTlRGID0gQFJFUExBQ0VfVlNQUklOVEZACitSRVBMQUNFX1dDUlRPTUIgPSBAUkVQTEFDRV9XQ1JUT01CQAorUkVQTEFDRV9XQ1NOUlRPTUJTID0gQFJFUExBQ0VfV0NTTlJUT01CU0AKK1JFUExBQ0VfV0NTUlRPTUJTID0gQFJFUExBQ0VfV0NTUlRPTUJTQAorUkVQTEFDRV9XQ1NXSURUSCA9IEBSRVBMQUNFX1dDU1dJRFRIQAorUkVQTEFDRV9XQ1RPQiA9IEBSRVBMQUNFX1dDVE9CQAorUkVQTEFDRV9XQ1RPTUIgPSBAUkVQTEFDRV9XQ1RPTUJACitSRVBMQUNFX1dDV0lEVEggPSBAUkVQTEFDRV9XQ1dJRFRIQAorUkVQTEFDRV9XUklURSA9IEBSRVBMQUNFX1dSSVRFQAorU0NIRURfSCA9IEBTQ0hFRF9IQAogU0VUX01BS0UgPSBAU0VUX01BS0VACiBTSEVMTCA9IEBTSEVMTEAKK1NJR19BVE9NSUNfVF9TVUZGSVggPSBAU0lHX0FUT01JQ19UX1NVRkZJWEAKK1NJWkVfVF9TVUZGSVggPSBAU0laRV9UX1NVRkZJWEAKIFNUREJPT0xfSCA9IEBTVERCT09MX0hACitTVERERUZfSCA9IEBTVERERUZfSEAKK1NURElOVF9IID0gQFNURElOVF9IQAogU1RSSVAgPSBAU1RSSVBACi1VTklTVERfSCA9IEBVTklTVERfSEAKK1NZU19USU1FX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUMgPSBAU1lTX1RJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQ0AKK1RJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQyA9IEBUSU1FX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUNACitVSU5UMzJfTUFYX0xUX1VJTlRNQVhfTUFYID0gQFVJTlQzMl9NQVhfTFRfVUlOVE1BWF9NQVhACitVSU5UNjRfTUFYX0VRX1VMT05HX01BWCA9IEBVSU5UNjRfTUFYX0VRX1VMT05HX01BWEAKK1VOREVGSU5FX1NUUlRPS19SID0gQFVOREVGSU5FX1NUUlRPS19SQAorVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IID0gQFVOSVNURF9IX0hBVkVfV0lOU09DSzJfSEAKK1VOSVNURF9IX0hBVkVfV0lOU09DSzJfSF9BTkRfVVNFX1NPQ0tFVFMgPSBAVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IX0FORF9VU0VfU09DS0VUU0AKIFVTRV9OTFMgPSBAVVNFX05MU0AKIFZBTEdSSU5EID0gQFZBTEdSSU5EQAorVkFMR1JJTkRfUFJFQklTT04gPSBAVkFMR1JJTkRfUFJFQklTT05ACiBWRVJTSU9OID0gQFZFUlNJT05ACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKK1dBUk5fQ0ZMQUdTID0gQFdBUk5fQ0ZMQUdTQAorV0FSTl9DRkxBR1NfVEVTVCA9IEBXQVJOX0NGTEFHU19URVNUQAorV0FSTl9DWFhGTEFHUyA9IEBXQVJOX0NYWEZMQUdTQAorV0FSTl9DWFhGTEFHU19URVNUID0gQFdBUk5fQ1hYRkxBR1NfVEVTVEAKK1dDSEFSX1RfU1VGRklYID0gQFdDSEFSX1RfU1VGRklYQAogV0VSUk9SX0NGTEFHUyA9IEBXRVJST1JfQ0ZMQUdTQAorV0VSUk9SX0NYWEZMQUdTID0gQFdFUlJPUl9DWFhGTEFHU0AKK1dJTkRPV1NfNjRfQklUX09GRl9UID0gQFdJTkRPV1NfNjRfQklUX09GRl9UQAorV0lORE9XU182NF9CSVRfU1RfU0laRSA9IEBXSU5ET1dTXzY0X0JJVF9TVF9TSVpFQAorV0lOVF9UX1NVRkZJWCA9IEBXSU5UX1RfU1VGRklYQAogWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAorWFNMVFBST0MgPSBAWFNMVFBST0NACiBZQUNDID0gQFlBQ0NACiBZQUNDX0xJQlJBUlkgPSBAWUFDQ19MSUJSQVJZQAogWUFDQ19TQ1JJUFQgPSBAWUFDQ19TQ1JJUFRACitZRkxBR1MgPSBAWUZMQUdTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAogYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACiBhY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfUkFOTElCID0gQGFjX2N0X1JBTkxJQkAKLWFjX2N0X1NUUklQID0gQGFjX2N0X1NUUklQQAogCiAjIEZpbGVzIGluc3RhbGxlZCBmb3IgdXNlIGJ5IEF1dG9tYWtlLgogYWNsb2NhbGRpciA9IEBhY2xvY2FsZGlyQAotYW1fX2Zhc3RkZXBDQ19GQUxTRSA9IEBhbV9fZmFzdGRlcENDX0ZBTFNFQAotYW1fX2Zhc3RkZXBDQ19UUlVFID0gQGFtX19mYXN0ZGVwQ0NfVFJVRUAKLWFtX19mYXN0ZGVwQ1hYX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAotYW1fX2Zhc3RkZXBDWFhfVFJVRSA9IEBhbV9fZmFzdGRlcENYWF9UUlVFQAogYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACiBhbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAogYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKQEAgLTIxMiw1NyArMTM5MCw5MyBAQAogYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKIGJ1aWxkX29zID0gQGJ1aWxkX29zQAogYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAogZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKIGV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorZ2xfTElCT0JKUyA9IEBnbF9MSUJPQkpTQAorZ2xfTFRMSUJPQkpTID0gQGdsX0xUTElCT0JKU0AKK2dsdGVzdHNfTElCT0JKUyA9IEBnbHRlc3RzX0xJQk9CSlNACitnbHRlc3RzX0xUTElCT0JKUyA9IEBnbHRlc3RzX0xUTElCT0JKU0AKK2dsdGVzdHNfV0lUTkVTUyA9IEBnbHRlc3RzX1dJVE5FU1NACiBob3N0ID0gQGhvc3RACiBob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACiBob3N0X2NwdSA9IEBob3N0X2NwdUAKIGhvc3Rfb3MgPSBAaG9zdF9vc0AKIGhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAogaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAogaW5mb2RpciA9IEBpbmZvZGlyQAogaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAogbGliZGlyID0gQGxpYmRpckAKIGxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xpc3BkaXIgPSBAbGlzcGRpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACiBsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACiBtYW5kaXIgPSBAbWFuZGlyQAogbWtkaXJfcCA9IEBta2Rpcl9wQAogb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKIHByZWZpeCA9IEBwcmVmaXhACiBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKIHNiaW5kaXIgPSBAc2JpbmRpckAKIHNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKIHN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKIHRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAogQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQKLVNVQkRJUlMgPSBidWlsZC1hdXggcG8gcnVudGltZS1wbyBsaWIgZGF0YSBzcmMgZG9jIGV4YW1wbGVzIHRlc3RzCitTVUJESVJTID0gYnVpbGQtYXV4IHBvIHJ1bnRpbWUtcG8gbGliIGRhdGEgc3JjIGRvYyBleGFtcGxlcyB0ZXN0cyBldGMKIGFjbG9jYWxfREFUQSA9IG00L2Jpc29uLWkxOG4ubTQKLUVYVFJBX0RJU1QgPSBHTlVtYWtlZmlsZSBNYWtlZmlsZS5jZmcgTWFrZWZpbGUubWFpbnQgXAotICBPQ2hhbmdlTG9nIFBBQ0tBR0lORyBcCitFWFRSQV9ESVNUID0gLnByZXYtdmVyc2lvbiAudmVyc2lvbiBcCisgIGNmZy5tayBDaGFuZ2VMb2ctMTk5OCBDaGFuZ2VMb2ctMjAxMiBQQUNLQUdJTkcgXAogICBkamdwcC9NYWtlZmlsZS5tYWludCBkamdwcC9SRUFETUUuaW4gZGpncHAvY29uZmlnLmJhdCBcCiAgIGRqZ3BwL2NvbmZpZy5zZWQgZGpncHAvY29uZmlnLnNpdGUgZGpncHAvY29uZmlnX2guc2VkIFwKICAgZGpncHAvc3VicGlwZS5jIGRqZ3BwL3N1YnBpcGUuaCBkamdwcC9kanVucGFjay5iYXQgXAotICBkamdwcC9mbmNoYW5nZS5sc3QKKyAgZGpncHAvZm5jaGFuZ2UubHN0IGRqZ3BwL3Rlc3RzdWl0ZS5zZWQKIAotYWxsOiBjb25maWcuaAorTUFJTlRBSU5FUl9DSEVDS1MgPSBcCisgIG1haW50YWluZXItY2hlY2sJCQkJXAorICBtYWludGFpbmVyLXB1c2gtY2hlY2sJCQkJXAorICBtYWludGFpbmVyLXhtbC1jaGVjawkJCQlcCisgIG1haW50YWluZXItcmVsZWFzZS1jaGVjaworCisKKyMgU2VlIGNvbW1lbnRzIGluIGJ1aWxkLWF1eC9naXQtdmVyc2lvbi1nZW4uICBIb3dldmVyLCB3ZSBtYWtlIC52ZXJzaW9uIGRlcGVuZAorIyBvbiBjb25maWd1cmUgc28gdGhhdCAudmVyc2lvbiBhbmQgVkVSU0lPTi9QQUNLQUdFX1ZFUlNJT04gc3RheSBpbiBzeW5jIGluIHRoZQorIyB3b3JraW5nIGNvcHkgKGZvciBleGFtcGxlLCB3aGVuIHlvdSBydW4gYXV0b3JlY29uZiAmJiBtYWtlKS4gIEFsbG93aW5nIHRoZXNlCisjIHRvIGZhbGwgb3V0IG9mIHN5bmMgYXBwZWFycyB0byBoYXZlIGxpdHRsZSBwb3RlbnRpYWwgdG8gaW1wcm92ZSBCaXNvbiBidWlsZAorIyBlZmZpY2llbmN5IChldmVuIGlmIHdlIHdlcmUgdG8gcmVwbGFjZSBWRVJTSU9OL1BBQ0tBR0VfVkVSU0lPTiB3aXRoIC52ZXJzaW9uCisjIGV2ZXJ5d2hlcmUgcG9zc2libGUpLiAgT24gdGhlIG90aGVyIGhhbmQsIGl0IGNvdWxkIGJlIGhhcm1mdWwuICBGb3IgZXhhbXBsZSwKKyMgYSBkZXZlbG9wZXIgbWlnaHQgbmFpdmVseSByZWZlcmVuY2UgLnZlcnNpb24gaW4gYSB0ZXN0IGNhc2Ugd2hpbGUgdGhlIGJpc29uCisjIGV4ZWN1dGFibGUgc3RpbGwgY29tcGlsZXMgd2l0aCBWRVJTSU9OLCBhbmQgc28gdGhlIHRlc3QgY2FzZSBtaWdodCBmYWlsIG9yCisjIHBhc3MgaW5jb3JyZWN0bHkuCitCVUlMVF9TT1VSQ0VTID0gJCh0b3Bfc3JjZGlyKS8udmVyc2lvbgorZ2VuX3N0YXJ0X2RhdGUgPSAyMDEyLTAxLTE2CithbGw6ICQoQlVJTFRfU09VUkNFUykKIAkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbGwtcmVjdXJzaXZlCiAKIC5TVUZGSVhFUzoKLWFtLS1yZWZyZXNoOgorYW0tLXJlZnJlc2g6IE1ha2VmaWxlCiAJQDoKICQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCiAJQGZvciBkZXAgaW4gJD87IGRvIFwKIAkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAogCSAgICAqJCRkZXAqKSBcCi0JICAgICAgZWNobyAnIGNkICQoc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSAnOyBcCi0JICAgICAgY2QgJChzcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251ICBcCisJICAgICAgZWNobyAnIGNkICQoc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWduaXRzJzsgXAorCSAgICAgICQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbml0cyBcCiAJCSYmIGV4aXQgMDsgXAogCSAgICAgIGV4aXQgMTs7IFwKIAkgIGVzYWM7IFwKIAlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgIE1ha2VmaWxlJzsgXAotCWNkICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgIE1ha2VmaWxlCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbml0cyBNYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWduaXRzIE1ha2VmaWxlCiAuUFJFQ0lPVVM6IE1ha2VmaWxlCiBNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCiAJQGNhc2UgJyQ/JyBpbiBcCkBAIC0yNzgsNTMgKzE0OTIsNDQgQEAKIAkkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgLS1yZWNoZWNrCiAKICQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJChzcmNkaXIpICYmICQoQVVUT0NPTkYpCisJJChhbV9fY2QpICQoc3JjZGlyKSAmJiAkKEFVVE9DT05GKQogJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHNyY2RpcikgJiYgJChBQ0xPQ0FMKSAkKEFDTE9DQUxfQU1GTEFHUykKLQotY29uZmlnLmg6IHN0YW1wLWgxCi0JQGlmIHRlc3QgISAtZiAkQDsgdGhlbiBcCi0JICBybSAtZiBzdGFtcC1oMTsgXAotCSAgJChNQUtFKSBzdGFtcC1oMTsgXAotCWVsc2UgOjsgZmkKLQotc3RhbXAtaDE6ICQoc3JjZGlyKS9jb25maWcuaGluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQHJtIC1mIHN0YW1wLWgxCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyBjb25maWcuaAotJChzcmNkaXIpL2NvbmZpZy5oaW46ICAkKGFtX19jb25maWd1cmVfZGVwcykgCi0JY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9IRUFERVIpCi0Jcm0gLWYgc3RhbXAtaDEKLQl0b3VjaCAkQAotCi1kaXN0Y2xlYW4taGRyOgotCS1ybSAtZiBjb25maWcuaCBzdGFtcC1oMQotdW5pbnN0YWxsLWluZm8tYW06CisJJChhbV9fY2QpICQoc3JjZGlyKSAmJiAkKEFDTE9DQUwpICQoQUNMT0NBTF9BTUZMQUdTKQorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKK2phdmFjb21wLnNoOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9qYXZhY29tcC5zaC5pbgorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJEAKK2phdmFleGVjLnNoOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9qYXZhZXhlYy5zaC5pbgorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJEAKIGluc3RhbGwtYWNsb2NhbERBVEE6ICQoYWNsb2NhbF9EQVRBKQogCUAkKE5PUk1BTF9JTlNUQUxMKQotCXRlc3QgLXogIiQoYWNsb2NhbGRpcikiIHx8ICQobWtkaXJfcCkgIiQoREVTVERJUikkKGFjbG9jYWxkaXIpIgotCUBsaXN0PSckKGFjbG9jYWxfREFUQSknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwlAbGlzdD0nJChhY2xvY2FsX0RBVEEpJzsgdGVzdCAtbiAiJChhY2xvY2FsZGlyKSIgfHwgbGlzdD07IFwKKwlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKKwkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChhY2xvY2FsZGlyKSciOyBcCisJICAkKE1LRElSX1ApICIkKERFU1RESVIpJChhY2xvY2FsZGlyKSIgfHwgZXhpdCAxOyBcCisJZmk7IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKIAkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCi0JICBmPSQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoYWNsb2NhbERBVEFfSU5TVEFMTCkgJyQkZCQkcCcgJyQoREVTVERJUikkKGFjbG9jYWxkaXIpLyQkZiciOyBcCi0JICAkKGFjbG9jYWxEQVRBX0lOU1RBTEwpICIkJGQkJHAiICIkKERFU1RESVIpJChhY2xvY2FsZGlyKS8kJGYiOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChhY2xvY2FsZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQoYWNsb2NhbGRpcikiIHx8IGV4aXQgJCQ/OyBcCiAJZG9uZQogCiB1bmluc3RhbGwtYWNsb2NhbERBVEE6CiAJQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChhY2xvY2FsX0RBVEEpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBmPSQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChhY2xvY2FsZGlyKS8kJGYnIjsgXAotCSAgcm0gLWYgIiQoREVTVERJUikkKGFjbG9jYWxkaXIpLyQkZiI7IFwKLQlkb25lCisJQGxpc3Q9JyQoYWNsb2NhbF9EQVRBKSc7IHRlc3QgLW4gIiQoYWNsb2NhbGRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwlkaXI9JyQoREVTVERJUikkKGFjbG9jYWxkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQogCiAjIFRoaXMgZGlyZWN0b3J5J3Mgc3ViZGlyZWN0b3JpZXMgYXJlIG1vc3RseSBpbmRlcGVuZGVudDsgeW91IGNhbiBjZAotIyBpbnRvIHRoZW0gYW5kIHJ1biBgbWFrZScgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoaXMgTWFrZWZpbGUuCi0jIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mIGBtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCi0jICgxKSBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IGluIGBjb25maWcuc3RhdHVzJywgZWRpdCBgY29uZmlnLnN0YXR1cycKLSMgICAgICh3aGljaCB3aWxsIGNhdXNlIHRoZSBNYWtlZmlsZXMgdG8gYmUgcmVnZW5lcmF0ZWQgd2hlbiB5b3UgcnVuIGBtYWtlJyk7Ci0jICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSBgbWFrZScgY29tbWFuZCBsaW5lLgotJChSRUNVUlNJVkVfVEFSR0VUUyk6Ci0JQGZhaWxjb209J2V4aXQgMSc7IFwKKyMgaW50byB0aGVtIGFuZCBydW4gJ21ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgorIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiAnbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAorIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiAnY29uZmlnLnN0YXR1cycsIGVkaXQgJ2NvbmZpZy5zdGF0dXMnCisjICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biAnbWFrZScpOworIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgJ21ha2UnIGNvbW1hbmQgbGluZS4KKyQoUkVDVVJTSVZFX1RBUkdFVFMpICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpOgorCUBmYWlsPSBmYWlsY29tPSdleGl0IDEnOyBcCiAJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAogCSAgY2FzZSAkJGYgaW4gXAogCSAgICAqPSogfCAtLVsha10qKTs7IFwKQEAgLTMzMyw3ICsxNTM4LDExIEBACiAJZG9uZTsgXAogCWRvdF9zZWVuPW5vOyBcCiAJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAotCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCWNhc2UgIiRAIiBpbiBcCisJICBkaXN0Y2xlYW4tKiB8IG1haW50YWluZXItY2xlYW4tKikgbGlzdD0nJChESVNUX1NVQkRJUlMpJyA7OyBcCisJICAqKSBsaXN0PSckKFNVQkRJUlMpJyA7OyBcCisJZXNhYzsgXAorCWZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCiAJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCiAJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAogCSAgICBkb3Rfc2Vlbj15ZXM7IFwKQEAgLTM0MSw1MSArMTU1MCwyMyBAQAogCSAgZWxzZSBcCiAJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCiAJICBmaTsgXAotCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCiAJICB8fCBldmFsICQkZmFpbGNvbTsgXAogCWRvbmU7IFwKIAlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAogCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKIAlmaTsgdGVzdCAteiAiJCRmYWlsIgotCi1tb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlIGRpc3RjbGVhbi1yZWN1cnNpdmUgXAotbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmU6Ci0JQGZhaWxjb209J2V4aXQgMSc7IFwKLQlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCi0JICBjYXNlICQkZiBpbiBcCi0JICAgICo9KiB8IC0tWyFrXSopOzsgXAotCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZG90X3NlZW49bm87IFwKLQljYXNlICIkQCIgaW4gXAotCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAotCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAotCWVzYWM7IFwKLQlyZXY9Jyc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gOjsgZWxzZSBcCi0JICAgIHJldj0iJCRzdWJkaXIgJCRyZXYiOyBcCi0JICBmaTsgXAotCWRvbmU7IFwKLQlyZXY9IiQkcmV2IC4iOyBcCi0JdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAotCWZvciBzdWJkaXIgaW4gJCRyZXY7IGRvIFwKLQkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCi0JICBlbHNlIFwKLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKLQkgIGZpOyBcCi0JICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKLQkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCi0JZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCiB0YWdzLXJlY3Vyc2l2ZToKIAlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRhZ3MpOyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8ICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdGFncyk7IFwKIAlkb25lCiBjdGFncy1yZWN1cnNpdmU6CiAJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8IChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjdGFncyk7IFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjdGFncyk7IFwKKwlkb25lCitjc2NvcGVsaXN0LXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjc2NvcGVsaXN0KTsgXAogCWRvbmUKIAogSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKQEAgLTM5MywxNCArMTU3NCwxNCBAQAogCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCiAJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAogCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAogCW1raWQgLWZJRCAkJHVuaXF1ZQogdGFnczogVEFHUwogCi1UQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgY29uZmlnLmhpbiAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCitUQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKIAkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JdGFncz07IFwKKwlzZXQgeDsgXAogCWhlcmU9YHB3ZGA7IFwKIAlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKIAkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXApAQCAtNDEyLDQyICsxNTkzLDcwIEBACiAJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCiAJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAogCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCi0JICAgICAgdGFncz0iJCR0YWdzICQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCisJICAgICAgc2V0ICIkJEAiICIkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAogCSAgZmk7IFwKIAlkb25lOyBcCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpIGNvbmZpZy5oaW4gJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAogCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCiAJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAogCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAogCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAogCWZpCiBjdGFnczogQ1RBR1MKLUNUQUdTOiBjdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpIGNvbmZpZy5oaW4gJChUQUdTX0RFUEVOREVOQ0lFUykgXAorQ1RBR1M6IGN0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKIAkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JdGFncz07IFwKLQloZXJlPWBwd2RgOyBcCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpIGNvbmZpZy5oaW4gJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAogCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCiAJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAogCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAogCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR0YWdzICQkdW5pcXVlCisJICAgICAkJHVuaXF1ZQogCiBHVEFHUzoKIAloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitjc2NvcGU6IGNzY29wZS5maWxlcworCXRlc3QgISAtcyBjc2NvcGUuZmlsZXMgXAorCSAgfHwgJChDU0NPUEUpIC1iIC1xICQoQU1fQ1NDT1BFRkxBR1MpICQoQ1NDT1BFRkxBR1MpIC1pIGNzY29wZS5maWxlcyAkKENTQ09QRV9BUkdTKQorCitjbGVhbi1jc2NvcGU6CisJLXJtIC1mIGNzY29wZS5maWxlcworCitjc2NvcGUuZmlsZXM6IGNsZWFuLWNzY29wZSBjc2NvcGVsaXN0LXJlY3Vyc2l2ZSBjc2NvcGVsaXN0CisKK2NzY29wZWxpc3Q6IGNzY29wZWxpc3QtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCknOyBcCisJY2FzZSAiJChzcmNkaXIpIiBpbiBcCisJICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCisJICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAorCWVzYWM7IFwKKwlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAorCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAorCSAgZWxzZSBcCisJICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCisJICBmaTsgXAorCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwogCiBkaXN0Y2xlYW4tdGFnczoKIAktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCS1ybSAtZiBjc2NvcGUub3V0IGNzY29wZS5pbi5vdXQgY3Njb3BlLnBvLm91dCBjc2NvcGUuZmlsZXMKIAogZGlzdGRpcjogJChESVNURklMRVMpCiAJQGNhc2UgYHNlZCAxNXEgJChzcmNkaXIpL05FV1NgIGluIFwKQEAgLTQ1Nyw3OCArMTY2NiwxMDIgQEAKIAkgIGV4aXQgMTs7IFwKIAllc2FjCiAJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCi0JbWtkaXIgJChkaXN0ZGlyKQotCSQobWtkaXJfcCkgJChkaXN0ZGlyKS9kamdwcCAkKGRpc3RkaXIpL200ICQoZGlzdGRpcikvcG8gJChkaXN0ZGlyKS9ydW50aW1lLXBvICQoZGlzdGRpcikvdGVzdHMKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCi0JICBjYXNlICQkZmlsZSBpbiBcCi0JICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0JICAgICQodG9wX3NyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3wiYDs7IFwKLQkgIGVzYWM7IFwKKwl0ZXN0IC1kICIkKGRpc3RkaXIpIiB8fCBta2RpciAiJChkaXN0ZGlyKSIKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAogCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAotCSAgICBkaXI9Ii8kJGRpciI7IFwKLQkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAotCSAgZWxzZSBcCi0JICAgIGRpcj0nJzsgXAotCSAgZmk7IFwKIAkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKIAkgICAgZmk7IFwKLQkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKIAkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCiAJICAgIHx8IGV4aXQgMTsgXAogCSAgZmk7IFwKIAlkb25lCi0JbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKIAkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCi0JICAgIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKLQkgICAgfHwgJChta2Rpcl9wKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgICAgZGlzdGRpcj1gJChhbV9fY2QpICQoZGlzdGRpcikgJiYgcHdkYDsgXAotCSAgICB0b3BfZGlzdGRpcj1gJChhbV9fY2QpICQodG9wX2Rpc3RkaXIpICYmIHB3ZGA7IFwKLQkgICAgKGNkICQkc3ViZGlyICYmIFwKKwkgICAgJChhbV9fbWFrZV9kcnlydW4pIFwKKwkgICAgICB8fCB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgICAgfHwgJChNS0RJUl9QKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICAgIHx8IGV4aXQgMTsgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKGRpc3RkaXIpLyQkc3ViZGlyIjsgXAorCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorCSAgICBuZXdfZGlzdGRpcj0kJHJlbGRpcjsgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKHRvcF9kaXN0ZGlyKSI7IFwKKwkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKKwkgICAgbmV3X3RvcF9kaXN0ZGlyPSQkcmVsZGlyOyBcCisJICAgIGVjaG8gIiAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcXCI7IFwKKwkgICAgZWNobyAiICAgICBhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBhbV9fc2tpcF9tb2RlX2ZpeD06IGRpc3RkaXIpIjsgXAorCSAgICAoJChhbV9fY2QpICQkc3ViZGlyICYmIFwKIAkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCi0JICAgICAgICB0b3BfZGlzdGRpcj0iJCR0b3BfZGlzdGRpciIgXAotCSAgICAgICAgZGlzdGRpcj0iJCRkaXN0ZGlyLyQkc3ViZGlyIiBcCisJICAgICAgICB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIFwKKwkgICAgICAgIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFwKKwkJYW1fX3JlbW92ZV9kaXN0ZGlyPTogXAorCQlhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBcCisJCWFtX19za2lwX21vZGVfZml4PTogXAogCSAgICAgICAgZGlzdGRpcikgXAogCSAgICAgIHx8IGV4aXQgMTsgXAogCSAgZmk7IFwKIAlkb25lCi0JLWZpbmQgJChkaXN0ZGlyKSAtdHlwZSBkICEgLXBlcm0gLTc3NyAtZXhlYyBjaG1vZCBhK3J3eCB7fSBcOyAtbyBcCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgdG9wX2Rpc3RkaXI9IiQodG9wX2Rpc3RkaXIpIiBkaXN0ZGlyPSIkKGRpc3RkaXIpIiBcCisJICBkaXN0LWhvb2sKKwktdGVzdCAtbiAiJChhbV9fc2tpcF9tb2RlX2ZpeCkiIFwKKwl8fCBmaW5kICIkKGRpc3RkaXIpIiAtdHlwZSBkICEgLXBlcm0gLTc1NSBcCisJCS1leGVjIGNobW9kIHUrcnd4LGdvK3J4IHt9IFw7IC1vIFwKIAkgICEgLXR5cGUgZCAhIC1wZXJtIC00NDQgLWxpbmtzIDEgLWV4ZWMgY2htb2QgYStyIHt9IFw7IC1vIFwKIAkgICEgLXR5cGUgZCAhIC1wZXJtIC00MDAgLWV4ZWMgY2htb2QgYStyIHt9IFw7IC1vIFwKLQkgICEgLXR5cGUgZCAhIC1wZXJtIC00NDQgLWV4ZWMgJChTSEVMTCkgJChpbnN0YWxsX3NoKSAtYyAtbSBhK3Ige30ge30gXDsgXAotCXx8IGNobW9kIC1SIGErciAkKGRpc3RkaXIpCisJICAhIC10eXBlIGQgISAtcGVybSAtNDQ0IC1leGVjICQoaW5zdGFsbF9zaCkgLWMgLW0gYStyIHt9IHt9IFw7IFwKKwl8fCBjaG1vZCAtUiBhK3IgIiQoZGlzdGRpcikiCiBkaXN0LWd6aXA6IGRpc3RkaXIKIAl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1jID4kKGRpc3RkaXIpLnRhci5negotCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCSQoYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIpCisKIGRpc3QtYnppcDI6IGRpc3RkaXIKLQl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgYnppcDIgLTkgLWMgPiQoZGlzdGRpcikudGFyLmJ6MgotCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBCWklQMj0kJHtCWklQMi0tOX0gYnppcDIgLWMgPiQoZGlzdGRpcikudGFyLmJ6MgorCSQoYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIpCisKK2Rpc3QtbHppcDogZGlzdGRpcgorCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBsemlwIC1jICQke0xaSVBfT1BULS05fSA+JChkaXN0ZGlyKS50YXIubHoKKwkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQorZGlzdC14ejogZGlzdGRpcgorCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBYWl9PUFQ9JCR7WFpfT1BULS1lfSB4eiAtYyA+JChkaXN0ZGlyKS50YXIueHoKKwkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQogCiBkaXN0LXRhclo6IGRpc3RkaXIKIAl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgY29tcHJlc3MgLWMgPiQoZGlzdGRpcikudGFyLloKLQkkKGFtX19yZW1vdmVfZGlzdGRpcikKKwkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQogCiBkaXN0LXNoYXI6IGRpc3RkaXIKIAlzaGFyICQoZGlzdGRpcikgfCBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWMgPiQoZGlzdGRpcikuc2hhci5negotCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCSQoYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIpCiAKIGRpc3QtemlwOiBkaXN0ZGlyCiAJLXJtIC1mICQoZGlzdGRpcikuemlwCiAJemlwIC1ycSAkKGRpc3RkaXIpLnppcCAkKGRpc3RkaXIpCi0JJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisJJChhbV9fcG9zdF9yZW1vdmVfZGlzdGRpcikKIAotZGlzdCBkaXN0LWFsbDogZGlzdGRpcgotCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWMgPiQoZGlzdGRpcikudGFyLmd6Ci0JdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IGJ6aXAyIC05IC1jID4kKGRpc3RkaXIpLnRhci5iejIKLQkkKGFtX19yZW1vdmVfZGlzdGRpcikKK2Rpc3QgZGlzdC1hbGw6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJChESVNUX1RBUkdFVFMpIGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyPSdAOicKKwkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQogCiAjIFRoaXMgdGFyZ2V0IHVudGFycyB0aGUgZGlzdCBmaWxlIGFuZCB0cmllcyBhIFZQQVRIIGNvbmZpZ3VyYXRpb24uICBUaGVuCiAjIGl0IGd1YXJhbnRlZXMgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGlzIHNlbGYtY29udGFpbmVkIGJ5IG1ha2luZyBhbm90aGVyCkBAIC01MzYsMjQgKzE3NjksMzEgQEAKIGRpc3RjaGVjazogZGlzdAogCWNhc2UgJyQoRElTVF9BUkNISVZFUyknIGluIFwKIAkqLnRhci5neiopIFwKLQkgIEdaSVA9JChHWklQX0VOVikgZ3VuemlwIC1jICQoZGlzdGRpcikudGFyLmd6IHwgJChhbV9fdW50YXIpIDs7XAorCSAgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1kYyAkKGRpc3RkaXIpLnRhci5neiB8ICQoYW1fX3VudGFyKSA7O1wKIAkqLnRhci5iejIqKSBcCi0JICBidW56aXAyIC1jICQoZGlzdGRpcikudGFyLmJ6MiB8ICQoYW1fX3VudGFyKSA7O1wKKwkgIGJ6aXAyIC1kYyAkKGRpc3RkaXIpLnRhci5iejIgfCAkKGFtX191bnRhcikgOztcCisJKi50YXIubHoqKSBcCisJICBsemlwIC1kYyAkKGRpc3RkaXIpLnRhci5seiB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnRhci54eiopIFwKKwkgIHh6IC1kYyAkKGRpc3RkaXIpLnRhci54eiB8ICQoYW1fX3VudGFyKSA7O1wKIAkqLnRhci5aKikgXAogCSAgdW5jb21wcmVzcyAtYyAkKGRpc3RkaXIpLnRhci5aIHwgJChhbV9fdW50YXIpIDs7XAogCSouc2hhci5neiopIFwKLQkgIEdaSVA9JChHWklQX0VOVikgZ3VuemlwIC1jICQoZGlzdGRpcikuc2hhci5neiB8IHVuc2hhciA7O1wKKwkgIEdaSVA9JChHWklQX0VOVikgZ3ppcCAtZGMgJChkaXN0ZGlyKS5zaGFyLmd6IHwgdW5zaGFyIDs7XAogCSouemlwKikgXAogCSAgdW56aXAgJChkaXN0ZGlyKS56aXAgOztcCiAJZXNhYwotCWNobW9kIC1SIGEtdyAkKGRpc3RkaXIpOyBjaG1vZCBhK3cgJChkaXN0ZGlyKQotCW1rZGlyICQoZGlzdGRpcikvX2J1aWxkCi0JbWtkaXIgJChkaXN0ZGlyKS9faW5zdAorCWNobW9kIC1SIGEtdyAkKGRpc3RkaXIpCisJY2htb2QgdSt3ICQoZGlzdGRpcikKKwlta2RpciAkKGRpc3RkaXIpL19idWlsZCAkKGRpc3RkaXIpL19pbnN0CiAJY2htb2QgYS13ICQoZGlzdGRpcikKKwl0ZXN0IC1kICQoZGlzdGRpcikvX2J1aWxkIHx8IGV4aXQgMDsgXAogCWRjX2luc3RhbGxfYmFzZT1gJChhbV9fY2QpICQoZGlzdGRpcikvX2luc3QgJiYgcHdkIHwgc2VkIC1lICdzLF5bXjpcXC9dOltcXC9dLC8sJ2AgXAogCSAgJiYgZGNfZGVzdGRpcj0iJCR7VE1QRElSLS90bXB9L2FtLWRjLSQkJCQvIiBcCi0JICAmJiBjZCAkKGRpc3RkaXIpL19idWlsZCBcCisJICAmJiBhbV9fY3dkPWBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKGRpc3RkaXIpL19idWlsZCBcCiAJICAmJiAuLi9jb25maWd1cmUgLS1zcmNkaXI9Li4gLS1wcmVmaXg9IiQkZGNfaW5zdGFsbF9iYXNlIiBcCisJICAgICQoQU1fRElTVENIRUNLX0NPTkZJR1VSRV9GTEFHUykgXAogCSAgICAkKERJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MpIFwKIAkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKIAkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGR2aSBcCkBAIC01NzQsMTQgKzE4MTQsMjQgQEAKIAkgICYmIHJtIC1yZiAiJCRkY19kZXN0ZGlyIiBcCiAJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkaXN0IFwKIAkgICYmIHJtIC1yZiAkKERJU1RfQVJDSElWRVMpIFwKLQkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3RjbGVhbmNoZWNrCi0JJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkaXN0Y2xlYW5jaGVjayBcCisJICAmJiBjZCAiJCRhbV9fY3dkIiBcCisJICB8fCBleGl0IDEKKwkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQogCUAoZWNobyAiJChkaXN0ZGlyKSBhcmNoaXZlcyByZWFkeSBmb3IgZGlzdHJpYnV0aW9uOiAiOyBcCiAJICBsaXN0PSckKERJU1RfQVJDSElWRVMpJzsgZm9yIGkgaW4gJCRsaXN0OyBkbyBlY2hvICQkaTsgZG9uZSkgfCBcCi0JICBzZWQgLWUgJzF7aDtzLy4vPS9nO3A7eDt9JyAtZSAnJCR7cDt4O30nCisJICBzZWQgLWUgMWggLWUgMXMvLi89L2cgLWUgMXAgLWUgMXggLWUgJyQkcCcgLWUgJyQkeCcKIGRpc3R1bmluc3RhbGxjaGVjazoKLQlAY2QgJChkaXN0dW5pbnN0YWxsY2hlY2tfZGlyKSBcCi0JJiYgdGVzdCBgJChkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzKSB8IHdjIC1sYCAtbGUgMSBcCisJQHRlc3QgLW4gJyQoZGlzdHVuaW5zdGFsbGNoZWNrX2RpciknIHx8IHsgXAorCSAgZWNobyAnRVJST1I6IHRyeWluZyB0byBydW4gJEAgd2l0aCBhbiBlbXB0eScgXAorCSAgICAgICAnJCQoZGlzdHVuaW5zdGFsbGNoZWNrX2RpciknID4mMjsgXAorCSAgZXhpdCAxOyBcCisJfTsgXAorCSQoYW1fX2NkKSAnJChkaXN0dW5pbnN0YWxsY2hlY2tfZGlyKScgfHwgeyBcCisJICBlY2hvICdFUlJPUjogY2Fubm90IGNoZGlyIGludG8gJChkaXN0dW5pbnN0YWxsY2hlY2tfZGlyKScgPiYyOyBcCisJICBleGl0IDE7IFwKKwl9OyBcCisJdGVzdCBgJChhbV9fZGlzdHVuaW5zdGFsbGNoZWNrX2xpc3RmaWxlcykgfCB3YyAtbGAgLWVxIDAgXAogCSAgIHx8IHsgZWNobyAiRVJST1I6IGZpbGVzIGxlZnQgYWZ0ZXIgdW5pbnN0YWxsOiIgOyBcCiAJICAgICAgICBpZiB0ZXN0IC1uICIkKERFU1RESVIpIjsgdGhlbiBcCiAJICAgICAgICAgIGVjaG8gIiAgKGNoZWNrIERFU1RESVIgc3VwcG9ydCkiOyBcCkBAIC01OTgsMTQgKzE4NDgsMTYgQEAKIAkgICAgICAgJChkaXN0Y2xlYW5jaGVja19saXN0ZmlsZXMpIDsgXAogCSAgICAgICBleGl0IDE7IH0gPiYyCiBjaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stcmVjdXJzaXZlCi1hbGwtYW06IE1ha2VmaWxlICQoREFUQSkgY29uZmlnLmgKK2NoZWNrOiAkKEJVSUxUX1NPVVJDRVMpCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2stcmVjdXJzaXZlCithbGwtYW06IE1ha2VmaWxlICQoREFUQSkKIGluc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1yZWN1cnNpdmUKIGluc3RhbGxkaXJzLWFtOgogCWZvciBkaXIgaW4gIiQoREVTVERJUikkKGFjbG9jYWxkaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQobWtkaXJfcCkgIiQkZGlyIjsgXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAogCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtcmVjdXJzaXZlCitpbnN0YWxsOiAkKEJVSUxUX1NPVVJDRVMpCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1yZWN1cnNpdmUKIGluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZQogaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlCiB1bmluc3RhbGw6IHVuaW5zdGFsbC1yZWN1cnNpdmUKQEAgLTYxNSwyMCArMTg2NywyNyBAQAogCiBpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKIGluc3RhbGwtc3RyaXA6Ci0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCi0JICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCisJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAgIGluc3RhbGw7IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorCWZpCiBtb3N0bHljbGVhbi1nZW5lcmljOgogCiBjbGVhbi1nZW5lcmljOgogCiBkaXN0Y2xlYW4tZ2VuZXJpYzoKIAktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKIAogbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgogCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKIAlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCisJLXRlc3QgLXogIiQoQlVJTFRfU09VUkNFUykiIHx8IHJtIC1mICQoQlVJTFRfU09VUkNFUykKIGNsZWFuOiBjbGVhbi1yZWN1cnNpdmUKIAogY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tYW0KQEAgLTYzNiw3ICsxODk1LDcgQEAKIGRpc3RjbGVhbjogZGlzdGNsZWFuLXJlY3Vyc2l2ZQogCS1ybSAtZiAkKGFtX19DT05GSUdfRElTVENMRUFOX0ZJTEVTKQogCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4taGRyIGRpc3RjbGVhbi10YWdzCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi10YWdzCiAKIGR2aTogZHZpLXJlY3Vyc2l2ZQogCkBAIC02NDQsMTggKzE5MDMsMzggQEAKIAogaHRtbDogaHRtbC1yZWN1cnNpdmUKIAoraHRtbC1hbToKKwogaW5mbzogaW5mby1yZWN1cnNpdmUKIAogaW5mby1hbToKIAogaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWFjbG9jYWxEQVRBCiAKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1yZWN1cnNpdmUKKworaW5zdGFsbC1kdmktYW06CisKIGluc3RhbGwtZXhlYy1hbToKIAoraW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlCisKK2luc3RhbGwtaHRtbC1hbToKKwogaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCiAKK2luc3RhbGwtaW5mby1hbToKKwogaW5zdGFsbC1tYW46CiAKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1yZWN1cnNpdmUKKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtcmVjdXJzaXZlCisKK2luc3RhbGwtcHMtYW06CisKIGluc3RhbGxjaGVjay1hbToKIAogbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKQEAgLTY3NiwyOSArMTk1NSw2MCBAQAogCiBwcy1hbToKIAotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtYWNsb2NhbERBVEEgdW5pbnN0YWxsLWluZm8tYW0KK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWFjbG9jYWxEQVRBCiAKLXVuaW5zdGFsbC1pbmZvOiB1bmluc3RhbGwtaW5mby1yZWN1cnNpdmUKKy5NQUtFOiAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBhbGwgY2hlY2sgXAorCWNzY29wZWxpc3QtcmVjdXJzaXZlIGN0YWdzLXJlY3Vyc2l2ZSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtc3RyaXAgdGFncy1yZWN1cnNpdmUKIAotLlBIT05ZOiAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGFtLS1yZWZyZXNoIGNoZWNrIFwKLQljaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLXJlY3Vyc2l2ZSBjdGFncyBcCi0JY3RhZ3MtcmVjdXJzaXZlIGRpc3QgZGlzdC1hbGwgZGlzdC1iemlwMiBkaXN0LWd6aXAgZGlzdC1zaGFyIFwKLQlkaXN0LXRhclogZGlzdC16aXAgZGlzdGNoZWNrIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWhkciBkaXN0Y2xlYW4tcmVjdXJzaXZlIGRpc3RjbGVhbi10YWdzIFwKLQlkaXN0Y2xlYW5jaGVjayBkaXN0ZGlyIGRpc3R1bmluc3RhbGxjaGVjayBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hY2xvY2FsREFUQSBpbnN0YWxsLWFtIFwKLQlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gXAotCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1zdHJpcCBcCi0JaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBpbnN0YWxsZGlycy1hbSBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAotCW1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1yZWN1cnNpdmUgXAotCXVuaW5zdGFsbCB1bmluc3RhbGwtYWNsb2NhbERBVEEgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1pbmZvLWFtCisuUEhPTlk6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIFwKKwlhbGwgYWxsLWFtIGFtLS1yZWZyZXNoIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWNzY29wZSBcCisJY2xlYW4tZ2VuZXJpYyBjc2NvcGUgY3Njb3BlbGlzdCBjc2NvcGVsaXN0LXJlY3Vyc2l2ZSBjdGFncyBcCisJY3RhZ3MtcmVjdXJzaXZlIGRpc3QgZGlzdC1hbGwgZGlzdC1iemlwMiBkaXN0LWd6aXAgZGlzdC1ob29rIFwKKwlkaXN0LWx6aXAgZGlzdC1zaGFyIGRpc3QtdGFyWiBkaXN0LXh6IGRpc3QtemlwIGRpc3RjaGVjayBcCisJZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi10YWdzIGRpc3RjbGVhbmNoZWNrIFwKKwlkaXN0ZGlyIGRpc3R1bmluc3RhbGxjaGVjayBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIFwKKwlpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hY2xvY2FsREFUQSBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCisJaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCisJaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKKwlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAorCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCisJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIGluc3RhbGxkaXJzLWFtIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1nZW5lcmljIHBkZiBcCisJcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1yZWN1cnNpdmUgdW5pbnN0YWxsIFwKKwl1bmluc3RhbGwtYWNsb2NhbERBVEEgdW5pbnN0YWxsLWFtCiAKKy5QSE9OWTogJChNQUlOVEFJTkVSX0NIRUNLUykKKyQoTUFJTlRBSU5FUl9DSEVDS1MpOgorCSQoQU1fVl9HRU4pY2QgdGVzdHMgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJEAKKyQodG9wX3NyY2RpcikvLnZlcnNpb246IGNvbmZpZ3VyZQorCSQoQU1fVl9HRU4pZWNobyAkKFZFUlNJT04pID4gJEAtdCAmJiBtdiAkQC10ICRACitkaXN0LWhvb2s6IGdlbi1DaGFuZ2VMb2cKKwkkKEFNX1ZfR0VOKWVjaG8gJChWRVJTSU9OKSA+ICQoZGlzdGRpcikvLnRhcmJhbGwtdmVyc2lvbgogCi0uUEhPTlk6IG1haW50YWluZXItY2hlY2sKLW1haW50YWluZXItY2hlY2s6Ci0JY2QgdGVzdHMgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJEAKKy5QSE9OWTogdXBkYXRlLWI0LWNvcHlyaWdodCB1cGRhdGUtcGFja2FnZS1jb3B5cmlnaHQteWVhcgordXBkYXRlLWI0LWNvcHlyaWdodDoKKwkkKEFNX1ZfR0VOKSBmaW5kIGRhdGEgLXR5cGUgZgkJXAorCSAgfCBncmVwIC12IC1FICdeZGF0YS9iaXNvbi5tNCQkJwlcCisJICB8IHhhcmdzICQoYnVpbGRfYXV4KS8kQAorCUBlY2hvICd3YXJuaW5nOiBzcmMvcGFyc2UtZ3JhbS5baGNdIG1heSBuZWVkIHRvIGJlIHJlZ2VuZXJhdGVkLicKK3VwZGF0ZS1wYWNrYWdlLWNvcHlyaWdodC15ZWFyOgorCSQoQU1fVl9HRU4pJChidWlsZF9hdXgpLyRAIGNvbmZpZ3VyZS5hYworLlBIT05ZOiBnZW4tQ2hhbmdlTG9nCitnZW4tQ2hhbmdlTG9nOgorCSQoQU1fVl9HRU4paWYgdGVzdCAtZCAkKHNyY2RpcikvLmdpdDsgdGhlbglcCisJICBjbD0kKGRpc3RkaXIpL0NoYW5nZUxvZyAmJgkJCVwKKwkgIHJtIC1mICQkY2wudG1wICYmCQkJCVwKKwkgICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2dpdGxvZy10by1jaGFuZ2Vsb2cJXAorCSAgICAtLXN0cmlwLXRhYgkJCQkJXAorCSAgICAtLXN0cmlwLWNoZXJyeS1waWNrCQkJCVwKKwkgICAgLS1uby1jbHVzdGVyCQkJCVwKKwkgICAgLS1hbWVuZD0kKHNyY2RpcikvYnVpbGQtYXV4L2dpdC1sb2ctZml4CVwKKwkgICAgLS1zcmNkaXI9JChzcmNkaXIpCQkJCVwKKwkgICAgLS1zaW5jZT0kKGdlbl9zdGFydF9kYXRlKSA+ICQkY2wudG1wICYmCVwKKwkgIG12IC1mICQkY2wudG1wICQkY2w7CQkJCVwKKwlmaQorCiAjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgogIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCiAuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9NYWtlZmlsZS5tYWludCBiL01ha2VmaWxlLm1haW50CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFlNmJlLi4wMDAwMDAwCi0tLSBhL01ha2VmaWxlLm1haW50CisrKyAvZGV2L251bGwKQEAgLTEsNjM5ICswLDAgQEAKLSMgLSotTWFrZWZpbGUtKi0KLSMgVGhpcyBNYWtlZmlsZSBmcmFnbWVudCBpcyBzaGFyZWQgYmV0d2VlbiB0aGUgY29yZXV0aWxzLAotIyBDUFBJLCBCaXNvbiwgYW5kIEF1dG9jb25mLgotCi0jIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMjCi0jIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSMjIGFueSBsYXRlciB2ZXJzaW9uLgotIyMKLSMjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jIwotIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0jIyAwMjExMC0xMzAxLCBVU0EuCi0KLSMgVGhpcyBpcyByZXBvcnRlZCBub3QgdG8gd29yayB3aXRoIG1ha2UtMy43OS4xCi0jIE1FIDo9ICQod29yZCAkKHdvcmRzICQoTUFLRUZJTEVfTElTVCkpLCQoTUFLRUZJTEVfTElTVCkpCi1NRSA6PSBNYWtlZmlsZS5tYWludAotCi0jIERvIG5vdCBzYXZlIHRoZSBvcmlnaW5hbCBuYW1lIG9yIHRpbWVzdGFtcCBpbiB0aGUgLnRhci5neiBmaWxlLgotIyBVc2UgLS1yc3luY2FibGUgaWYgYXZhaWxhYmxlLgotZ3ppcF9yc3luY2FibGUgPSBcCi0gIChnemlwIC0taGVscHxncmVwIHJzeW5jYWJsZSkgPi9kZXYvbnVsbCAyPiYxICYmIGVjaG8gLS1yc3luY2FibGUKLUdaSVBfRU5WID0gIi0tbm8tbmFtZSAtLWJlc3QgYCQoZ3ppcF9yc3luY2FibGUpYCIKLQotQ1ZTID0gY3ZzCi0KLSMgY3ZzdSBpcyBwYXJ0IG9mIHRoZSBjdnN1dGlscyBwYWNrYWdlOiBodHRwOi8vd3d3LnJlZC1iZWFuLmNvbS9jdnN1dGlscy8KLUNWU19MSVNUID0gc2ggLWMgJyBcCi0gICAgaWYgdGVzdCAteCAkKHNyY2RpcikvYnVpbGQtYXV4L2N2c3U7IHRoZW4gXAotICAgICAgJChzcmNkaXIpL2J1aWxkLWF1eC9jdnN1IC0tZmluZCAtLXR5cGVzPUFGR00gJCQqOyBcCi0gICAgZWxzZSBcCi0gICAgICBhd2sgLUYvICdcJyd7IFwKLQkgIGlmICghJCQxICYmICQkMyAhfiAvXi0vKSB7IFwKLQkgICAgZj1GSUxFTkFNRTsgXAotCSAgICBzdWIoL0NWU1wvRW50cmllcy8sICIiLCBmKTsgXAotCSAgICBwcmludCBmICQkMjsgXAotCSAgfX0nXCcnIFwKLQkkJChmaW5kICQkeyotKn0gLW5hbWUgRW50cmllcyAtcHJpbnQpIC9kZXYvbnVsbDsgXAotICAgIGZpIFwKLSAgJyBkdW1teQotCi1DVlNfTElTVF9FWENFUFQgPSBcCi0gICQoQ1ZTX0xJU1QpIHwgaWYgdGVzdCAtZiAueC0kQDsgdGhlbiBncmVwIC12RWYgLngtJEA7IGVsc2UgZ3JlcCAtdiBDaGFuZ2VMb2c7IGZpCi0KLWlmZXEgKCQob3JpZ2luIHByZXZfdmVyc2lvbl9maWxlKSwgdW5kZWZpbmVkKQotICBwcmV2X3ZlcnNpb25fZmlsZSA9IC5wcmV2LXZlcnNpb24KLWVuZGlmCi0KLVBSRVZfVkVSU0lPTiA6PSAkKHNoZWxsIGNhdCAkKHByZXZfdmVyc2lvbl9maWxlKSkKLVZFUlNJT05fUkVHRVhQID0gJChzdWJzdCAuLFwuLCQoVkVSU0lPTikpCi0KLXRhZy1wYWNrYWdlID0gJChzaGVsbCBlY2hvICIkKFBBQ0tBR0UpIiB8IHRyICdbOmxvd2VyOl0nICdbOnVwcGVyOl0nKQotdGFnLXRoaXMtdmVyc2lvbiA9ICQoc3Vic3QgLixfLCQoVkVSU0lPTikpCi10aGlzLWN2cy10YWcgPSAkKHRhZy1wYWNrYWdlKS0kKHRhZy10aGlzLXZlcnNpb24pCi1teV9kaXN0ZGlyID0gJChQQUNLQUdFKS0kKFZFUlNJT04pCi0KLSMgT2xkIHJlbGVhc2VzIGFyZSBzdG9yZWQgaGVyZS4KLSMgVXNlZCBmb3IgZGlmZnMgYW5kIHhkZWx0YXMuCi1yZWxlYXNlX2FyY2hpdmVfZGlyID89IC4uL3JlbGVhc2UKLQotIyBQcmV2ZW50IHByb2dyYW1zIGxpa2UgJ3NvcnQnIGZyb20gY29uc2lkZXJpbmcgZGlzdGluY3Qgc3RyaW5ncyB0byBiZSBlcXVhbC4KLSMgRG9pbmcgaXQgaGVyZSBzYXZlcyB1cyBmcm9tIGhhdmluZyB0byBzZXQgTENfQUxMIGVsc2V3aGVyZSBpbiB0aGlzIGZpbGUuCi1leHBvcnQgTENfQUxMID0gQwotCi0KLQotIyMgLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBTYW5pdHkgY2hlY2tzLiAgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLSAjIwotCi0jIEZJWE1FOiBhZGQgYSBjaGVjayB0byBwcm9oaWJpdCBkZWZpbml0aW9uIGluIHNyYy8qLmMgb2Ygc3ltYm9scyBkZWZpbmVkCi0jIGluIHN5c3RlbS5oLiAgRS5nLiB0b2RheSBJIHJlbW92ZWQgZnJvbSB0YWlsLmMgYSB1c2VsZXNzIGRlZmluaXRpb24gb2YKLSMgRU5PU1lTLiAgSXQgd2FzIHVzZWxlc3MgYmVjYXVzZSBzeXN0ZW0uaCBlbnN1cmVzIGl0J3MgZGVmaW5lZC4KLQotIyBDaGVja3MgdGhhdCBkb24ndCByZXF1aXJlIGN2cy4KLSMgUnVuIGBjaGFuZ2Vsb2ctY2hlY2snIGxhc3QsIGFzIHByZXZpb3VzIHRlc3QgbWF5IHJldmVhbCBwcm9ibGVtcyByZXF1aXJpbmcKLSMgbmV3IENoYW5nZUxvZyBlbnRyaWVzLgotbG9jYWwtY2hlY2tzLWF2YWlsYWJsZSA9IFwKLSAgcG8tY2hlY2sgY29weXJpZ2h0LWNoZWNrIHdyaXRhYmxlLWZpbGVzIG00LWNoZWNrIGF1dGhvcl9tYXJrX2NoZWNrIFwKLSAgY2hhbmdlbG9nLWNoZWNrIHN0cmZ0aW1lLWNoZWNrICQoc3ludGF4LWNoZWNrLXJ1bGVzKSBcCi0gIG1ha2VmaWxlX3BhdGhfc2VwYXJhdG9yX2NoZWNrIFwKLSAgbWFrZWZpbGUtY2hlY2sKLS5QSE9OWTogJChsb2NhbC1jaGVja3MtYXZhaWxhYmxlKQotCi1sb2NhbC1jaGVjayA9ICQoZmlsdGVyLW91dCAkKGxvY2FsLWNoZWNrcy10by1za2lwKSwgJChsb2NhbC1jaGVja3MtYXZhaWxhYmxlKSkKLQotLlBIT05ZOiAkKHN5bnRheC1jaGVjay1ydWxlcykKLXN5bnRheC1jaGVjay1ydWxlcyA9IFwKLSAgc2NfY2FzdF9vZl9hcmd1bWVudF90b19mcmVlIFwKLSAgc2NfY2FzdF9vZl94X2FsbG9jX3JldHVybl92YWx1ZSBcCi0gIHNjX2Nhc3Rfb2ZfYWxsb2NhX3JldHVybl92YWx1ZSBcCi0gIHNjX2NoYW5nZWxvZyBcCi0gIHNjX2RkX21heF9zeW1fbGVuZ3RoIFwKLSAgc2NfZXJyb3JfZXhpdF9zdWNjZXNzIFwKLSAgc2NfZmlsZV9zeXN0ZW0gXAotICBzY19ub19pZl9oYXZlX2NvbmZpZ19oIFwKLSAgc2Nfb2Jzb2xldGVfc3ltYm9scyBcCi0gIHNjX3Byb2hpYml0X2F0b2lfYXRvZiBcCi0gIHNjX3Byb2hpYml0X2ptX2luX200IFwKLSAgc2NfcHJvaGliaXRfYXNzZXJ0X3dpdGhvdXRfdXNlIFwKLSAgc2NfcmVxdWlyZV9jb25maWdfaCBcCi0gIHNjX3Jvb3RfdGVzdHMgXAotICBzY19zcGFjZV90YWIgXAotICBzY19zdW5fb3NfbmFtZXMgXAotICBzY19zeXN0ZW1faF9oZWFkZXJzIFwKLSAgc2NfdGlnaHRfc2NvcGUgXAotICBzY190cmFpbGluZ19ibGFuayBcCi0gIHNjX3R3b19zcGFjZV9zZXBhcmF0b3JfaW5fdXNhZ2UgXAotICBzY191bm1hcmtlZF9kaWFnbm9zdGljcyBcCi0gIHNjX3VzZWxlc3NfY3BwX3BhcmVucwotCi1zeW50YXgtY2hlY2s6ICQoc3ludGF4LWNoZWNrLXJ1bGVzKQotIwlAZ3JlcCAtbkUgJyMgICppbmNsdWRlIDwobGltaXRzfHN0ZChkZWZ8YXJnfGJvb2wpKVwuaD4nCQlcCi0jCSAgICAkJChmaW5kIC10eXBlIGYgLW5hbWUgJyouW2NobHldJykgJiYJCQlcCi0jCSAgeyBlY2hvICckKE1FKTogZm91bmQgY29uZGl0aW9uYWwgaW5jbHVkZScgMT4mMjsJCVwKLSMJICAgIGV4aXQgMTsgfSB8fCA6Ci0KLSMJZ3JlcCAtbkUgJ14jICAqaW5jbHVkZSA8KHN0cmluZ3xzdGRsaWIpXC5oPicJCQlcCi0jCSAgICAkKHNyY2Rpcikve2xpYixzcmN9LyouW2NoeV0gJiYJCQkJXAotIwkgIHsgZWNobyAnJChNRSk6IEZJWE1FJyAxPiYyOwkJCQkJXAotIwkgICAgZXhpdCAxOyB9IHx8IDoKLSMgRklYTUU6IGRvbid0IGFsbG93IGAjaW5jbHVkZSAuc3RyaW5nc1wuaCcgYW55d2hlcmUKLQotc2NfY2FzdF9vZl9hcmd1bWVudF90b19mcmVlOgotCUBncmVwIC1uRSAnXDxmcmVlIFwoXCgnICQoc3JjZGlyKS97bGliLHNyY30vKi5bY2hseV0gJiYJCVwKLQkgIHsgZWNobyAnJChNRSk6IGRvbidcJyd0IGNhc3QgZnJlZSBhcmd1bWVudCcgMT4mMjsJCVwKLQkgICAgZXhpdCAxOyB9IHx8IDoKLQotc2NfY2FzdF9vZl94X2FsbG9jX3JldHVybl92YWx1ZToKLQlAZ3JlcCAtbkUgLS1leGNsdWRlPSQoc3JjZGlyKS9saWIvcmVnZXguYwkJCVwKLQkgICAgJ1wqXCkgKngobXxjfHJlKWFsbG9jXD4nCQkJCQlcCi0JICAgICQoc3JjZGlyKS97bGliLHNyY30vKi5bY2h5XSAmJgkJCQlcCi0JICB7IGVjaG8gJyQoTUUpOiBkb24nXCcndCBjYXN0IHgqYWxsb2MgcmV0dXJuIHZhbHVlJyAxPiYyOwlcCi0JICAgIGV4aXQgMTsgfSB8fCA6Ci0KLXNjX2Nhc3Rfb2ZfYWxsb2NhX3JldHVybl92YWx1ZToKLQlAZ3JlcCAtbkUgJ1wqXCkgKmFsbG9jYVw+JwkJCQkJXAotCSAgICAkKHNyY2Rpcikvc3JjLyouW2NoeV0gJiYJCQkJCVwKLQkgIHsgZWNobyAnJChNRSk6IGRvbidcJyd0IGNhc3QgYWxsb2NhIHJldHVybiB2YWx1ZScgMT4mMjsJXAotCSAgICBleGl0IDE7IH0gfHwgOgotCi1zY19zcGFjZV90YWI6Ci0JQGdyZXAgLW4gJ1sgXQknICQkKCQoQ1ZTX0xJU1RfRVhDRVBUKSkgJiYJCQlcCi0JICB7IGVjaG8gJyQoTUUpOiBmb3VuZCBTUEFDRS1UQUIgc2VxdWVuY2U7IHJlbW92ZSB0aGUgU1BBQ0UnCVwKLQkJMT4mMjsgZXhpdCAxOyB9IHx8IDoKLQotIyBEb24ndCB1c2UgdGhlIG9sZCBhdG8qIGZ1bmN0aW9ucyBpbiBgcmVhbCcgY29kZS4KLSMgVGhleSBwcm92aWRlIG5vIGVycm9yIGNoZWNraW5nIG1lY2hhbmlzbS4KLSMgSW5zdGVhZCwgdXNlIHN0cnRvKiBmdW5jdGlvbnMuCi1zY19wcm9oaWJpdF9hdG9pX2F0b2Y6Ci0JQGdyZXAgLW5FICdcPGF0byhbZmlscV18bGwpXD4nICQkKCQoQ1ZTX0xJU1RfRVhDRVBUKSkgJiYJXAotCSAgeyBlY2hvICckKE1FKTogZG8gbm90IHVzZSBhdG8nJ2YsIGF0bycnaSwgYXRvJydsLCBhdG8nJ2xsLCBvciBhdG8nJ3EnCVwKLQkJMT4mMjsgZXhpdCAxOyB9IHx8IDoKLQotIyBVc2luZyBFWElUX1NVQ0NFU1MgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGVycm9yIGlzIG1pc2xlYWRpbmcsCi0jIHNpbmNlIHdoZW4gdGhhdCBwYXJhbWV0ZXIgaXMgMCwgZXJyb3IgZG9lcyBub3QgZXhpdC4gIFVzZSBgMCcgaW5zdGVhZC4KLXNjX2Vycm9yX2V4aXRfc3VjY2VzczoKLQlAZ3JlcCAtbkYgJ2Vycm9yIChFWElUX1NVQ0NFU1MsJwkJCQkJXAotCSAgICAkJChmaW5kIC10eXBlIGYgLW5hbWUgJyouW2NobHldJykgJiYJCQlcCi0JICB7IGVjaG8gJyQoTUUpOiBmb3VuZCBlcnJvciAoRVhJVF9TVUNDRVNTJyAxPiYyOwkJXAotCSAgICBleGl0IDE7IH0gfHwgOgotCi1zY19maWxlX3N5c3RlbToKLQlAZ3JlcCAtbmkgJ2ZpbGUnJ3N5c3RlbScgJCQoJChDVlNfTElTVF9FWENFUFQpKSAmJgkJXAotCSAgeyBlY2hvICckKE1FKTogZm91bmQgdXNlIG9mICJmaWxlJydzeXN0ZW0iOycJCQlcCi0JICAgICdyZXdyaXRlIHRvIHVzZSAiZmlsZSBzeXN0ZW0iJyAxPiYyOwkJCVwKLQkgICAgZXhpdCAxOyB9IHx8IDoKLQotc2Nfbm9faWZfaGF2ZV9jb25maWdfaDoKLQlAZ3JlcCAtbiAnXiMgKmlmIEhBVkVfQ09ORklHX0gnICQkKCQoQ1ZTX0xJU1RfRVhDRVBUKSkgJiYJXAotCSAgeyBlY2hvICckKE1FKTogZm91bmQgdXNlIG9mICNpZiBIQVZFX0NPTkZJR19IOyB1c2UgI2lmZGVmJwlcCi0JCTE+JjI7IGV4aXQgMTsgfSB8fCA6Ci0KLSMgTmVhcmx5IGFsbCAuYyBmaWxlcyBtdXN0IGluY2x1ZGUgPGNvbmZpZy5oPi4KLXNjX3JlcXVpcmVfY29uZmlnX2g6Ci0JQGdyZXAgLUwgJ14jICppbmNsdWRlIDxjb25maWdcLmg+JwkJCQlcCi0JCSQkKCQoQ1ZTX0xJU1RfRVhDRVBUKSB8IGdyZXAgJ1wuYyQkJykJCQlcCi0JICAgIHwgZ3JlcCAuICYmCQkJCQkJCVwKLQkgIHsgZWNobyAnJChNRSk6IHRoZSBhYm92ZSBmaWxlcyBkbyBub3QgaW5jbHVkZSA8Y29uZmlnLmg+JwlcCi0JCTE+JjI7IGV4aXQgMTsgfSB8fCA6Ci0KLSMgUHJvaGliaXQgdGhlIGluY2x1c2lvbiBvZiBhc3NlcnQuaCB3aXRob3V0IGFuIGFjdHVhbCB1c2Ugb2YgYXNzZXJ0Lgotc2NfcHJvaGliaXRfYXNzZXJ0X3dpdGhvdXRfdXNlOgotCUBmaWxlcz0kJChncmVwIC1sICcjICppbmNsdWRlIDxhc3NlcnRcLmg+JwkJCVwKLQkJICAgICQkKCQoQ1ZTX0xJU1RfRVhDRVBUKSB8IGdyZXAgJ1wuYyQkJykpICYmCQlcCi0JZ3JlcCAtTCAnXDxhc3NlcnQgKCcgJCRmaWxlcwkJCQkJXAotCSAgICB8IGdyZXAgLiAmJgkJCQkJCQlcCi0JICB7IGVjaG8gIiQoTUUpOiB0aGUgYWJvdmUgZmlsZXMgaW5jbHVkZSA8YXNzZXJ0Lmg+IGJ1dCBkb24ndCB1c2UgaXQiIFwKLQkJMT4mMjsgZXhpdCAxOyB9IHx8IDoKLQotc2Nfb2Jzb2xldGVfc3ltYm9sczoKLQlAZ3JlcCAtbkUgJ1w8KEhBVkUnJ19GQ05UTF9IfE8nJ19OREVMQVkpXD4nCQkJXAotCSAgICAgJCQoJChDVlNfTElTVF9FWENFUFQpKSAmJgkJCQkJXAotCSAgeyBlY2hvICckKE1FKTogZG8gbm90IHVzZSBIQVZFJydfRkNOVExfSCBvciBPJydfTkRFTEFZJwlcCi0JCTE+JjI7IGV4aXQgMTsgfSB8fCA6Ci0KLSMgRklYTUU6IHdhcm4gYWJvdXQgZGVmaW5pdGlvbnMgb2YgRVhJVF9GQUlMVVJFLCBFWElUX1NVQ0NFU1MsIFNUUkVRCi0KLSMgRWFjaCBub25lbXB0eSBsaW5lIG11c3Qgc3RhcnQgd2l0aCBhIHllYXIgbnVtYmVyLCBvciBhIFRBQi4KLXNjX2NoYW5nZWxvZzoKLQlAZ3JlcCAtbiAnXlteMTIJXScgJCQoZmluZCAuIC1tYXhkZXB0aCAyIC1uYW1lIENoYW5nZUxvZykgJiYJXAotCSAgeyBlY2hvICckKE1FKTogZm91bmQgdW5leHBlY3RlZCBwcmVmaXggaW4gYSBDaGFuZ2VMb2cnIDE+JjI7CVwKLQkgICAgZXhpdCAxOyB9IHx8IDoKLQotIyBFbnN1cmUgdGhhdCBkZCdzIGRlZmluaXRpb24gb2YgTE9OR0VTVF9TWU1CT0wgc3RheXMgaW4gc3luYwotIyB3aXRoIHRoZSBzdHJpbmdzIGZyb20gdGhlIHR3byBhZmZlY3RlZCB2YXJpYWJsZXMuCi1kZF9jID0gJChzcmNkaXIpL3NyYy9kZC5jCi1zY19kZF9tYXhfc3ltX2xlbmd0aDoKLWlmbmVxICgkKHdpbGRjYXJkICQoZGRfYykpLCkKLQlAbGVuPSQkKCAoc2VkIC1uICcvY29udmVyc2lvbnNcW1xdID0kJC8sL159Oy9wJyAkKGRkX2MpO1wKLQkJIHNlZCAtbiAnL2ZsYWdzXFtcXSA9JCQvLC9efTsvcCcgJChkZF9jKSApCVwKLQkJfHNlZCAtbiAnLyIvcy9eW14iXSoiXChbXiJdKlwpIi4qL1wxL3AnCQlcCi0JICAgICAgfCB3YyAtLW1heC1saW5lLWxlbmd0aCk7CQkJCVwKLQltYXg9JCQoc2VkIC1uICcvXiNkZWZpbmUgTE9OR0VTVF9TWU1CT0wgL3MvLy9wJyAkKGRkX2MpCVwKLQkgICAgICB8dHIgLWQgJyInIHwgd2MgLS1tYXgtbGluZS1sZW5ndGgpOwkJXAotCWlmIHRlc3QgIiQkbGVuIiA9ICIkJG1heCI7IHRoZW4gOjsgZWxzZQkJCVwKLQkgIGVjaG8gJ2RkLmM6IExPTkdFU1RfU1lNQk9MIGlzIG5vdCBsb25nZXN0JyAxPiYyOwlcCi0JICBleGl0IDE7CQkJCQkJXAotCWZpCi1lbmRpZgotCi0jIE1hbnkgbTQgbWFjcm9zIG5hbWVzIG9uY2UgYmVnYW4gd2l0aCBgam1fJy4KLSMgT24gMjAwNC0wNC0xMywgdGhleSB3ZXJlIGFsbCBjaGFuZ2VkIHRvIHN0YXJ0IHdpdGggZ2xfIGluc3RlYWQuCi0jIE1ha2Ugc3VyZSB0aGF0IG5vbmUgYXJlIGluYWR2ZXJ0ZW50bHkgcmVpbnRyb2R1Y2VkLgotc2NfcHJvaGliaXRfam1faW5fbTQ6Ci0JQGdyZXAgLW5FICdqbV9bQS1aXScJCQkJCQlcCi0JCSQkKCQoQ1ZTX0xJU1QpICQoc3JjZGlyKS9tNCB8Z3JlcCAnXC5tNCQkJykgJiYJCVwKLQkgICAgeyBlY2hvICckKE1FKTogZG8gbm90IHVzZSBqbV8gaW4gbTQgbWFjcm8gbmFtZXMnCQlcCi0JICAgICAgMT4mMjsgZXhpdCAxOyB9IHx8IDoKLQotc2Nfcm9vdF90ZXN0czoKLQlAdDE9c2Mtcm9vdC5leHBlY3RlZDsgdDI9c2Mtcm9vdC5hY3R1YWw7CQkJXAotCWdyZXAgLW5sICdeUFJJVl9DSEVDS19BUkc9cmVxdWlyZS1yb290JwkJCQlcCi0JICAkJCgkKENWU19MSVNUKSB0ZXN0cykgfHNlZCBzLHRlc3RzLC4sIHxzb3J0ID4gJCR0MTsJCVwKLQlzZWQgLW4gJ3MsCWNkIFwoW14gXSpcKSAuKk1BS0UuLmNoZWNrIFRFU1RTPVwoLipcKSwuL1wxL1wyLHAnIFwKLQkgICQoc3JjZGlyKS90ZXN0cy9NYWtlZmlsZS5hbSB8c29ydCA+ICQkdDI7CQkJXAotCWRpZmYgLXUgJCR0MSAkJHQyIHx8IGRpZmY9MTsJCQkJCVwKLQlybSAtZiAkJHQxICQkdDI7CQkJCQkJXAotCXRlc3QgIiQkZGlmZiIJCQkJCQkJXAotCSAgJiYgeyBlY2hvICd0ZXN0cy9NYWtlZmlsZS5hbTogbWlzc2luZyBjaGVjay1yb290IGFjdGlvbic+JjI7CVwKLQkgICAgICAgZXhpdCAxOyB9IHx8IDoKLQotIyBDcmVhdGUgYSBsaXN0IG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgbWF0Y2hpbmcgdGhlIG5hbWVzCi0jIG9mIGZpbGVzIGluY2x1ZGVkIGZyb20gc3lzdGVtLmguICBFeGNsdWRlIGEgY291cGxlLgotLnJlLWxpc3Q6Ci0JQHNlZCAtbiAnL14jICppbmNsdWRlIC9zLy8vcCcgJChzcmNkaXIpL3NyYy9zeXN0ZW0uaCBcCi0JICB8IGdyZXAgLUV2ICdzeXMvKHBhcmFtfGZpbGUpXC5oJyBcCi0JICB8IHNlZCAncy8gLiovLzs7cy9eWyI8XS9eIyAqaW5jbHVkZSBbPCJdLztzL1wuaFsiPl0kJC9cXC5oWyI+XS8nIFwKLQkgID4gJEAtdAotCUBtdiAkQC10ICRACi0KLSMgRmlsZXMgaW4gc3JjLyBzaG91bGQgbm90IGluY2x1ZGUgZGlyZWN0bHkgYW55IG9mCi0jIHRoZSBoZWFkZXJzIGFscmVhZHkgaW5jbHVkZWQgdmlhIHN5c3RlbS5oLgotc2Nfc3lzdGVtX2hfaGVhZGVyczogLnJlLWxpc3QKLQlAaWYgdGVzdCAtZiAkKHNyY2Rpcikvc3JjL3N5c3RlbS5oOyB0aGVuCQkJXAotCSAgdHJhcCAncmM9JCQ/OyBybSAtZiAucmUtbGlzdDsgZXhpdCAkJHJjJyAwIDEgMiAzIDE1OwkJXAotCSAgZ3JlcCAtbkUgLWYgLnJlLWxpc3QJCQkJCQlcCi0JICAgICAgJCQoJChDVlNfTElTVCkgc3JjIHwJCQkJCVwKLQkJIGdyZXAgLUV2ICcoKGNvcHl8c3lzdGVtKVwuaHxwYXJzZS1ncmFtXC5jKSQkJykJCVwKLQkgICAgJiYgeyBlY2hvICckKE1FKTogdGhlIGFib3ZlIGFyZSBhbHJlYWR5IGluY2x1ZGVkIHZpYSBzeXN0ZW0uaCdcCi0JCSAgMT4mMjsgIGV4aXQgMTsgfSB8fCA6OwkJCQlcCi0JZmkKLQotc2Nfc3VuX29zX25hbWVzOgotCUBncmVwIC1uRWkgXAotCSAgICAnc29sYXJpc1teWzphbG51bTpdXSoyXC4oN3w4fDl8WzEtOV1bMC05XSl8c3Vub3NbXls6YWxudW06XV1bNi05XScgXAotCSAgICAkJCgkKENWU19MSVNUX0VYQ0VQVCkpICYmCQkJCQlcCi0JICB7IGVjaG8gJyQoTUUpOiBmb3VuZCBtaXN1c2Ugb2YgU3VuIE9TIHZlcnNpb24gbnVtYmVycycgMT4mMjsJXAotCSAgICBleGl0IDE7IH0gfHwgOgotCi1zY190aWdodF9zY29wZToKLQkkKE1BS0UpIC1DIHNyYyAkQAotCi1zY190cmFpbGluZ19ibGFuazoKLQlAZ3JlcCAtbiAnWwkgXSQkJyAkJCgkKENWU19MSVNUX0VYQ0VQVCkpICYmCQkJXAotCSAgeyBlY2hvICckKE1FKTogZm91bmQgdHJhaWxpbmcgYmxhbmsocyknCQkJXAotCQkxPiYyOyBleGl0IDE7IH0gfHwgOgotCi1zY190d29fc3BhY2Vfc2VwYXJhdG9yX2luX3VzYWdlOgotCUBncmVwIC1uICdeICAgKi0tW2Etel1bMC05QS1aYS16LV0qIFteIF0uKlxcJCQnCQkJXAotCSAgICAkJCgkKENWU19MSVNUX0VYQ0VQVCkpICYmCQkJCQlcCi0JICB7IGVjaG8gIiQoTUUpOiBoZWxwMm1hbiByZXF1aXJlcyBhdCBsZWFzdCB0d28gc3BhY2VzIGJldHdlZW4iOyBcCi0JICAgIGVjaG8gIiQoTUUpOiBhbiBvcHRpb24gYW5kIGl0cyBkZXNjcmlwdGlvbiI7IFwKLQkJMT4mMjsgZXhpdCAxOyB9IHx8IDoKLQotIyBMb29rIGZvciBkaWFnbm9zdGljcyB0aGF0IGFyZW4ndCBtYXJrZWQgZm9yIHRyYW5zbGF0aW9uLgotIyBUaGlzIHdvbid0IGZpbmQgYW55IGZvciB3aGljaCBlcnJvcidzIGZvcm1hdCBzdHJpbmcgaXMgb24gYSBzZXBhcmF0ZSBsaW5lLgotc2NfdW5tYXJrZWRfZGlhZ25vc3RpY3M6Ci0JQGdyZXAgLW5FCQkJCQkJCVwKLQkgICAgJ1w8ZXJyb3IgXChbXiJdKiJbXiJdKlthLXpdezN9JyAkJCgkKENWU19MSVNUX0VYQ0VQVCkpCVwKLQkgIHwgZ3JlcCAtdiAnXycnKCcgJiYJCQkJCQlcCi0JICB7IGVjaG8gJyQoTUUpOiBmb3VuZCB1bm1hcmtlZCBkaWFnbm9zdGljKHMpJyAxPiYyOwkJXAotCSAgICBleGl0IDE7IH0gfHwgOgotCi0jIEF2b2lkIHVzZWxlc3MgcGFyZW50aGVzZXMgbGlrZSB0aG9zZSBpbiB0aGlzIGV4YW1wbGU6Ci0jICNpZiBkZWZpbmVkIChTWU1CT0wpIHx8IGRlZmluZWQgKFNZTTIpCi1zY191c2VsZXNzX2NwcF9wYXJlbnM6Ci0JQGdyZXAgLW4gJ14jICppZiAuKmRlZmluZWQgKignICQkKCQoQ1ZTX0xJU1RfRVhDRVBUKSkgJiYJXAotCSAgeyBlY2hvICckKE1FKTogZm91bmQgdXNlbGVzcyBwYXJlbnRoZXNlcyBpbiBjcHAgZGlyZWN0aXZlJwlcCi0JCTE+JjI7IGV4aXQgMTsgfSB8fCA6Ci0KLSMgRW5zdXJlIHRoYXQgZGF0ZSdzIC0taGVscCBvdXRwdXQgc3RheXMgaW4gc3luYyB3aXRoIHRoZSBpbmZvCi0jIGRvY3VtZW50YXRpb24gZm9yIEdOVSBzdHJmdGltZS4gIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyAlTiwKLSMgd2hpY2ggZGF0ZSBhY2NlcHRzIGJ1dCBHTlUgc3RyZnRpbWUgZG9lcyBub3QuCi1leHRyYWN0X2NoYXIgPSBzZWQgJ3MvXlteJV1bXiVdKiVcKC5cKS4qL1wxLycKLXN0cmZ0aW1lLWNoZWNrOgotCWlmIHRlc3QgLWYgJChzcmNkaXIpL3NyYy9kYXRlLmM7IHRoZW4JCQkJXAotCSAgZ3JlcCAnXiAgJS4gICcgJChzcmNkaXIpL3NyYy9kYXRlLmMgfCBzb3J0CQkJXAotCSAgICB8ICQoZXh0cmFjdF9jaGFyKSA+ICRALXNyYzsJCQkJCVwKLQkgIHsgZWNobyBOOwkJCQkJCQlcCi0JICAgIGluZm8gbGliYyBkYXRlIGNhbGVuZGFyIGZvcm1hdCB8IGdyZXAgJ14gICAgYCUuJ1wnCQlcCi0JICAgICAgfCAkKGV4dHJhY3RfY2hhcik7IH0gfCBzb3J0ID4gJEAtaW5mbzsJCQlcCi0JICBkaWZmIC11ICRALXNyYyAkQC1pbmZvIHx8IGV4aXQgMTsJCQkJXAotCSAgcm0gLWYgJEAtc3JjICRALWluZm87CQkJCQkJXAotCWZpCi0KLSMgRW5zdXJlIHRoYXQgd2UgdXNlIG9ubHkgdGhlIHN0YW5kYXJkICQoVkFSKSBub3RhdGlvbiwKLSMgbm90IEAuLi5AIGluIE1ha2VmaWxlLmFtLCBub3cgdGhhdCB3ZSBjYW4gcmVseSBvbiBhdXRvbWFrZQotIyB0byBlbWl0IGEgZGVmaW5pdGlvbiBmb3IgZWFjaCBzdWJzdGl0dXRlZCB2YXJpYWJsZS4KLW1ha2VmaWxlLWNoZWNrOgotCWdyZXAgLW5FICdAW0EtWl8wLTldK0AnIGBmaW5kIC4gLW5hbWUgTWFrZWZpbGUuYW1gIFwKLQkgICYmIHsgZWNobyAnTWFrZWZpbGUubWFpbnQ6IHVzZSAkJCguLi4pLCBub3QgQC4uLkAnIDE+JjI7IGV4aXQgMTsgfSB8fCA6Ci0KLW5ld3MtZGF0ZS1jaGVjazogTkVXUwotCXRvZGF5PWBkYXRlICslWS0lbS0lZGA7CVwKLQlpZiBoZWFkIE5FV1MgfCBncmVwICdeXCouKiAkKFZFUlNJT05fUkVHRVhQKSAoJyQkdG9kYXknKScgXAotCSAgICA+L2Rldi9udWxsOyB0aGVuIFwKLQkgIDo7IFwKLQllbHNlIFwKLQkgIGVjaG8gInZlcnNpb24gb3IgdG9kYXkncyBkYXRlIGlzIG5vdCBpbiBORVdTIiAxPiYyOyBcCi0JICBleGl0IDE7IFwKLQlmaQotCi1jaGFuZ2Vsb2ctY2hlY2s6Ci0JaWYgaGVhZCBDaGFuZ2VMb2cgfCBncmVwICdWZXJzaW9uICQoVkVSU0lPTl9SRUdFWFApXC4kJCcgXAotCSAgICA+L2Rldi9udWxsOyB0aGVuIFwKLQkgIDo7IFwKLQllbHNlIFwKLQkgIGVjaG8gIiQoVkVSU0lPTikgbm90IGluIENoYW5nZUxvZyIgMT4mMjsgXAotCSAgZXhpdCAxOyBcCi0JZmkKLQotbTQtY2hlY2s6Ci0JQGdyZXAgLW4gJ0FDX0RFRlVOKFteW10nIG00LyoubTQgXAotCSAgJiYgeyBlY2hvICdNYWtlZmlsZS5tYWludDogcXVvdGUgdGhlIGZpcnN0IGFyZyB0byBBQ19ERUZVTicgMT4mMjsgXAotCSAgICAgICBleGl0IDE7IH0gfHwgOgotCi0jIFZlcmlmeSB0aGF0IGFsbCBzb3VyY2UgZmlsZXMgdXNpbmcgXygpIGFyZSBsaXN0ZWQgaW4gcG8vUE9URklMRVMuaW4uCi0jIEZJWE1FOiBkb24ndCBoYXJkLWNvZGUgZmlsZSBuYW1lcyBiZWxvdzsgdXNlIGEgbW9yZSBnZW5lcmFsIG1lY2hhbmlzbS4KLXBvLWNoZWNrOgotCWlmIHRlc3QgLWYgcG8vUE9URklMRVMuaW47IHRoZW4JCQkJCVwKLQkgIGdyZXAgLUUgLXYgJ14oI3wkJCknIHBvL1BPVEZJTEVTLmluCQkJCVwKLQkgICAgfCBncmVwIC12ICdec3JjL2ZhbHNlXC5jJCQnIHwgc29ydCA+ICRALTE7CQkJXAotCSAgZmlsZXM9OwkJCQkJCQlcCi0JICBmb3IgZmlsZSBpbiAkJCgkKENWU19MSVNUX0VYQ0VQVCkpIGxpYi8qLltjaF07IGRvCQlcCi0JICAgIGNhc2UgJCRmaWxlIGluCQkJCQkJXAotCSAgICBkamdwcC8qIHwgbWFuLyopIGNvbnRpbnVlOzsJCQkJCVwKLQkgICAgZXNhYzsJCQkJCQkJXAotCSAgICBjYXNlICQkZmlsZSBpbgkJCQkJCVwKLQkgICAgKi5bY2hdKQkJCQkJCQlcCi0JICAgICAgYmFzZT1gZXhwciAiICQkZmlsZSIgOiAnIFwoLipcKVwuLidgOwkJCVwKLQkgICAgICB7IHRlc3QgLWYgJCRiYXNlLmwgfHwgdGVzdCAtZiAkJGJhc2UueTsgfSAmJiBjb250aW51ZTs7CVwKLQkgICAgZXNhYzsJCQkJCQkJXAotCSAgICBmaWxlcz0iJCRmaWxlcyAkJGZpbGUiOwkJCQkJXAotCSAgZG9uZTsJCQkJCQkJCVwKLQkgIGdyZXAgLUUgLWwgJ1xiTj9fXChbXikiXSooInwkJCknICQkZmlsZXMgfCBzb3J0IC11ID4gJEAtMjsJXAotCSAgZGlmZiAtdSAkQC0xICRALTIgfHwgZXhpdCAxOwkJCQkJXAotCSAgcm0gLWYgJEAtMSAkQC0yOwkJCQkJCVwKLQlmaQotCi0jIEluIGEgZGVmaW5pdGlvbiBvZiAjZGVmaW5lIEFVVEhPUlMgIi4uLiBhbmQgLi4uIiB3aGVyZSB0aGUgUkhTIGNvbnRhaW5zCi0jIHRoZSBFbmdsaXNoIHdvcmQgYGFuZCcsIHRoZSBzdHJpbmcgbXVzdCBiZSBtYXJrZWQgd2l0aCBgTl8gKC4uLiknIHNvIHRoYXQKLSMgZ2V0dGV4dCByZWNvZ25pemVzIGl0IGFzIGEgc3RyaW5nIHJlcXVpcmluZyB0cmFuc2xhdGlvbi4KLWF1dGhvcl9tYXJrX2NoZWNrOgotCUBncmVwIC1uICdeIyAqZGVmaW5lIEFVVEhPUlMgIlteIl0qIGFuZCAnIHNyYy8qLmMgfGdyZXAgLXYgJyBOXyAoJyAmJiBcCi0JICB7IGVjaG8gJ01ha2VmaWxlLm1haW50OiBlbmNsb3NlIHRoZSBhYm92ZSBzdHJpbmdzIGluIE5fICguLi4pJyAxPiYyOyBcCi0JICAgIGV4aXQgMTsgfSB8fCA6Ci0KLSMgU29tZXRpbWVzIGl0IGlzIHVzZWZ1bCB0byBjaGFuZ2UgdGhlIFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUKLSMgaW4gTWFrZWZpbGVzLiAgV2hlbiBkb2luZyBzbywgaXQncyBiZXR0ZXIgbm90IHRvIHVzZSB0aGUgVW5peC1jZW50cmljCi0jIHBhdGggc2VwYXJhdG9yIG9mIGA6JywgYnV0IHJhdGhlciB0aGUgYXV0b21ha2UtcHJvdmlkZWQgYEBQQVRIX1NFUEFSQVRPUkAnLgotIyBJdCdkIGJlIGJldHRlciB0byB1c2UgYGZpbmQgLXByaW50MCAuLi58eGFyZ3MgLTAgLi4uJywgYnV0IGxlc3MgcG9ydGFibGUsCi0jIGFuZCB0aGVyZSBwcm9iYWJseSBhcmVuJ3QgbWFueSBwcm9qZWN0cyB3aXRoIHNvIG1hbnkgTWFrZWZpbGUuYW0gZmlsZXMKLSMgdGhhdCB3ZSdkIGhhdmUgdG8gd29ycnkgYWJvdXQgbGltaXRzIG9uIGNvbW1hbmQgbGluZSBsZW5ndGguCi1tc2cgPSAnTWFrZWZpbGUubWFpbnQ6IERvIG5vdCB1c2UgYDonXCcnIGFib3ZlOyB1c2UgQFBBVEhfU0VQQVJBVE9SQCBpbnN0ZWFkJwotbWFrZWZpbGVfcGF0aF9zZXBhcmF0b3JfY2hlY2s6Ci0JQGdyZXAgLW4gJ1BBVEg9Lio6JyBgZmluZCAkKHNyY2RpcikgLW5hbWUgTWFrZWZpbGUuYW1gIFwKLQkgICYmIHsgZWNobyAkKG1zZykgMT4mMjsgZXhpdCAxOyB9IHx8IDoKLQotIyBDaGVjayB0aGF0IGBtYWtlIGFscGhhJyB3aWxsIG5vdCBmYWlsIGF0IHRoZSBlbmQgb2YgdGhlIHByb2Nlc3MuCi13cml0YWJsZS1maWxlczoKLQlpZiB0ZXN0IC1kICQocmVsZWFzZV9hcmNoaXZlX2Rpcik7IHRoZW4gOjsgZWxzZQkJCVwKLQkgIG1rZGlyICQocmVsZWFzZV9hcmNoaXZlX2Rpcik7CQkJCQlcCi0JZmkKLQlmb3IgZmlsZSBpbiAkKGRpc3RkaXIpLnRhci5neiAkKHhkLWRlbHRhKQkJCVwKLQkgICAgICAgICAgICAkKHJlbGVhc2VfYXJjaGl2ZV9kaXIpLyQoZGlzdGRpcikudGFyLmd6CQlcCi0JICAgICAgICAgICAgJChyZWxlYXNlX2FyY2hpdmVfZGlyKS8kKHhkLWRlbHRhKTsgZG8JCVwKLQkgIHRlc3QgLWUgJCRmaWxlIHx8IGNvbnRpbnVlOwkJCQkJXAotCSAgdGVzdCAtdyAkJGZpbGUJCQkJCQlcCi0JICAgIHx8IHsgZWNobyBFUlJPUjogJCRmaWxlIGlzIG5vdCB3cml0YWJsZTsgZmFpbD0xOyB9OwkJXAotCWRvbmU7CQkJCQkJCQlcCi0JdGVzdCAiJCRmYWlsIiAmJiBleGl0IDEgfHwgOgotCi12X2V0Y19maWxlID0gbGliL3ZlcnNpb24tZXRjLmMKLSMgTWFrZSBzdXJlIHRoYXQgdGhlIGNvcHlyaWdodCBkYXRlIGluICQodl9ldGNfZmlsZSkgaXMgdXAgdG8gZGF0ZS4KLWNvcHlyaWdodC1jaGVjazoKLQlAaWYgdGVzdCAtZiAkKHZfZXRjX2ZpbGUpOyB0aGVuIFwKLQkgIGdyZXAgJ2VudW0geyBDT1BZUklHSFRfWUVBUiA9ICckJChkYXRlICslWSknIH07JyAkKHZfZXRjX2ZpbGUpIFwKLQkgICAgPi9kZXYvbnVsbCBcCi0JICB8fCB7IGVjaG8gJ291dCBvZiBkYXRlIGNvcHlyaWdodCBpbiAkKHZfZXRjX2ZpbGUpOyB1cGRhdGUgaXQnIDE+JjI7IFwKLQkgICAgICAgZXhpdCAxOyB9OyBcCi0JZmkKLQotCi0jIFNhbml0eSBjaGVja3Mgd2l0aCB0aGUgQ1ZTIHJlcG9zaXRvcnkuCi1jdnMtdGFnLWNoZWNrOgotCWVjaG8gJCh0aGlzLWN2cy10YWcpOyBcCi0JaWYgJChDVlMpIC1uIGxvZyAtaCBSRUFETUUgfCBncmVwIC1lICQodGhpcy1jdnMtdGFnKTogPi9kZXYvbnVsbDsgdGhlbiBcCi0JICBlY2hvICIkKHRoaXMtY3ZzLXRhZykgYXMgYWxyZWFkeSBiZWVuIHVzZWQ7IG5vdCB0YWdnaW5nIiAxPiYyOyBcCi0JICBleGl0IDE7IFwKLQllbHNlIDo7IGZpCi0KLWN2cy1kaWZmLWNoZWNrOgotCWlmICQoQ1ZTKSBkaWZmID5jdnMtZGlmZnM7IHRoZW4JCQkJXAotCSAgcm0gY3ZzLWRpZmZzOwkJCQkJCVwKLQllbHNlCQkJCQkJCVwKLQkgIGVjaG8gIlNvbWUgZmlsZXMgYXJlIGxvY2FsbHkgbW9kaWZpZWQ6IiAxPiYyOwkJXAotCSAgY2F0IGN2cy1kaWZmczsJCQkJCVwKLQkgIGV4aXQgMTsJCQkJCQlcCi0JZmkKLQotY3ZzLWNoZWNrOiBjdnMtZGlmZi1jaGVjayBjdnMtdGFnLWNoZWNrCi0KLW1haW50YWluZXItZGlzdGNoZWNrOiBjaGFuZ2Vsb2ctY2hlY2sKLQkkKE1BS0UpIGRpc3RjaGVjawotCSQoTUFLRSkgbXktZGlzdGNoZWNrCi0KLQotIyBUYWcgYmVmb3JlIG1ha2luZyBkaXN0cmlidXRpb24uICBBbHNvLCBkb24ndCBtYWtlIGEgZGlzdHJpYnV0aW9uIGlmCi0jIGNoZWNrcyBmYWlsLiAgQWxzbywgbWFrZSBzdXJlIHRoZSBORVdTIGZpbGUgaXMgdXAtdG8tZGF0ZS4KLSMgRklYTUU6IHVzZSBkaXN0LWhvb2svbXktZGlzdCBsaWtlIGRpc3RjaGVjay1ob29rL215LWRpc3RjaGVjay4KLWN2cy1kaXN0OiAkKGxvY2FsLWNoZWNrKSBjdnMtY2hlY2sgbWFpbnRhaW5lci1kaXN0Y2hlY2sKLQkkKENWUykgdXBkYXRlIHBvCi0JJChDVlMpIHRhZyAtYyAkKHRoaXMtY3ZzLXRhZykKLQkkKE1BS0UpIGRpc3QKLQotIyBVc2UgdGhpcyB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgcnVuIHRoZXNlIHByb2dyYW1zIHdoZW4gYnVpbGRpbmcKLSMgZnJvbSBhIHZpcmdpbiB0Z3ogZmlsZSwgYmVsb3cuCi1udWxsX0FNX01BS0VGTEFHUyA9IFwKLSAgQUNMT0NBTD1mYWxzZSBcCi0gIEFVVE9DT05GPWZhbHNlIFwKLSAgQVVUT01BS0U9ZmFsc2UgXAotICBBVVRPSEVBREVSPWZhbHNlIFwKLSAgTUFLRUlORk89ZmFsc2UKLQotIyBEZXRlY3QgZm9ybWF0LXN0cmluZy9hcmctbGlzdCBtaXNtYXRjaGVzIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgb2JzY3VyZWQKLSMgYnkgdGhlIHVzZSBvZiBfKCkuICBUaGUgLS1kaXNhYmxlLW5scyBlZmZlY3RpdmVseSBkZWZpbmVzIGF3YXkgdGhhdCBtYWNybywKLSMgYW5kIGJ1aWxkaW5nIHdpdGggQ0ZMQUdTPSctV2Zvcm1hdCAtV2Vycm9yJyBjYXVzZXMgYW55IGZvcm1hdCB3YXJuaW5nIHRvIGJlCi0jIHRyZWF0ZWQgYXMgYSBmYWlsdXJlLiAgQWxzbywgY2hlY2sgZm9yIHNoYWRvd2luZyBwcm9ibGVtcyB3aXRoIC1Xc2hhZG93LgotIyBUaGVzZSBDRkxBR1MgYXJlIHByZXR0eSBzdHJpY3QuICBJZiB5b3UgYnVpbGQgdGhpcyB0YXJnZXQsIHlvdSBwcm9iYWJseQotIyBoYXZlIHRvIGhhdmUgYSByZWNlbnQgdmVyc2lvbiBvZiBnY2MgYW5kIGdsaWJjIGhlYWRlcnMuCi1UTVBESVIgPz0gL3RtcAotdD0kKFRNUERJUikvJChQQUNLQUdFKS90ZXN0Ci1teS1kaXN0Y2hlY2s6ICQobG9jYWwtY2hlY2spICQocmVsZWFzZV9hcmNoaXZlX2RpcikvJChwcmV2LXRneikKLQktcm0gLXJmICQodCkKLQlta2RpciAtcCAkKHQpCi0JR1pJUD0kKEdaSVBfRU5WKSAkKEFNVEFSKSAtQyAkKHQpIC16eGYgJChkaXN0ZGlyKS50YXIuZ3oKLQljZCAkKHQpLyQoZGlzdGRpcikJCQkJXAotCSAgJiYgLi9jb25maWd1cmUgLS1kaXNhYmxlLW5scwkJCVwKLQkgICYmICQoTUFLRSkgQ0ZMQUdTPSctV2Vycm9yIC1XYWxsIC1XZm9ybWF0IC1Xc2hhZG93JyBcCi0JICAgICAgQU1fTUFLRUZMQUdTPSckKG51bGxfQU1fTUFLRUZMQUdTKScJXAotCSAgJiYgJChNQUtFKSBkdmkJCQkJXAotCSAgJiYgJChNQUtFKSBjaGVjawkJCQlcCi0JICAmJiAkKE1BS0UpIGRpc3RjbGVhbgotCShjZCAkKHQpICYmIG12ICQoZGlzdGRpcikgJChkaXN0ZGlyKS5vbGQJXAotCSAgJiYgJChBTVRBUikgLXp4ZiAtICkgPCAkKGRpc3RkaXIpLnRhci5negotCWRpZmYgLXVyICQodCkvJChkaXN0ZGlyKS5vbGQgJCh0KS8kKGRpc3RkaXIpCi0JLXJtIC1yZiAkKHQpCi0JQGVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PSI7IFwKLQllY2hvICIkKGRpc3RkaXIpLnRhci5neiBpcyByZWFkeSBmb3IgZGlzdHJpYnV0aW9uIjsgXAotCWVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PSIKLQotV0dFVCA9IHdnZXQKLVdHRVRGTEFHUyA9IC1DIG9mZgotCi1yZWwtY2hlY2s6Ci0JdGFyej0vdG1wL3JlbC1jaGVjay10YXJ6LSQkJCQ7IFwKLQltZDVfdG1wPS90bXAvcmVsLWNoZWNrLW1kNS0kJCQkOyBcCi0Jc2V0IC1lOyBcCi0JdHJhcCAnc3RhdHVzPSQkPzsgcm0gLWYgJCR0YXJ6ICQkbWQ1X3RtcDsgZXhpdCAkJHN0YXR1cycgMCAxIDIgMyAxNTsgXAotCSQoV0dFVCkgJChXR0VURkxBR1MpIC1xIC0tb3V0cHV0LWRvY3VtZW50PSQkdGFyeiAkKHVybCk7IFwKLQllY2hvICIkKG1kNSkgIC0iID4gJCRtZDVfdG1wOyBcCi0JbWQ1c3VtIC1jICQkbWQ1X3RtcCA8ICQkdGFyegotCi1wcmV2LXRneiA9ICQoUEFDS0FHRSktJChQUkVWX1ZFUlNJT04pLnRhci5negoteGQtZGVsdGEgPSAkKFBBQ0tBR0UpLSQoUFJFVl9WRVJTSU9OKS0kKFZFUlNJT04pLnhkZWx0YQotCi1yZWwtZmlsZXMgPSAkKHhkLWRlbHRhKSAkKERJU1RfQVJDSElWRVMpCi1hbm5vdW5jZW1lbnQ6IE5FV1MgQ2hhbmdlTG9nICQocmVsLWZpbGVzKQotCUAuL2Fubm91bmNlLWdlbgkJCQkJCQlcCi0JICAgIC0tcmVsZWFzZS10eXBlPSQoUkVMRUFTRV9UWVBFKQkJCQlcCi0JICAgIC0tcGFja2FnZT0kKFBBQ0tBR0UpCQkJCQlcCi0JICAgIC0tcHJldj0kKFBSRVZfVkVSU0lPTikJCQkJCVwKLQkgICAgLS1jdXJyPSQoVkVSU0lPTikJCQkJCQlcCi0JICAgIC0tcmVsZWFzZS1hcmNoaXZlLWRpcmVjdG9yeT0kKHJlbGVhc2VfYXJjaGl2ZV9kaXIpCQlcCi0JICAgIC0tZ3BnLWtleS1pZD0kKGdwZ19rZXlfSUQpCQkJCQlcCi0JICAgIC0tbmV3cz1ORVdTCQkJCQkJCVwKLQkgICAgJChhZGRwcmVmaXggLS11cmwtZGlyPSwgJCh1cmxfZGlyX2xpc3QpKQkJCVwKLQotCi0jIyAtLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBVcGRhdGluZyBmaWxlcy4gICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tICMjCi0KLWZ0cC1nbnUgPSBmdHA6Ly9mdHAuZ251Lm9yZy9nbnUKLXd3dy1nbnUgPSBodHRwOi8vd3d3LmdudS5vcmcKLQotIyBVc2UgbXYsIGlmIHlvdSBkb24ndCBoYXZlL3dhbnQgbW92ZS1pZi1jaGFuZ2UuCi1tb3ZlX2lmX2NoYW5nZSA/PSBtb3ZlLWlmLWNoYW5nZQotCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKLSMgVXBkYXRpbmcgZXZlcnl0aGluZy4gICMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKLQotLlBIT05ZOiB1cGRhdGUKLWxvY2FsX3VwZGF0ZXMgPz0gd2dldC11cGRhdGUgY3ZzLXVwZGF0ZSBwby11cGRhdGUKLXVwZGF0ZTogJChsb2NhbF91cGRhdGVzKQotCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjCi0jIFVwZGF0aW5nIFBPIGZpbGVzLiAgIwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMKLQotcG9fcmVwbyA9IGh0dHA6Ly93d3cuaXJvLnVtb250cmVhbC5jYS9jb250cmliL3BvL21haW50LyQoUEFDS0FHRSkKLS5QSE9OWTogZG8tcG8tdXBkYXRlIHBvLXVwZGF0ZQotZG8tcG8tdXBkYXRlOgotCXRtcHBvPS90bXAvJChQQUNLQUdFKS0kKFZFUlNJT04pLXBvICYmXAotCXJtIC1yZiAkJHRtcHBvICYmIFwKLQlta2RpciAkJHRtcHBvICYmIFwKLQkoY2QgJCR0bXBwbyAmJiBcCi0JICAkKFdHRVQpICQoV0dFVEZMQUdTKSAtciAtbDEgLW5kIC0tbm8tcGFyZW50IC1BICcqLnBvJyAkKHBvX3JlcG8pKSAmJlwKLQljcCAkJHRtcHBvLyoucG8gcG8KLQljZCBwbyAmJiAkKE1BS0UpIHVwZGF0ZS1wbwotCSQoTUFLRSkgcG8tY2hlY2sKLQotcG8tdXBkYXRlOgotCWlmIHRlc3QgLWQgInBvIjsgdGhlbiBcCi0JICAkKE1BS0UpIGRvLXBvLXVwZGF0ZTsgXAotCWZpCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwotIyBVcGRhdGluZyBHTlUgYnVpbGQgdG9vbHMuICAjCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKLQotIyBUaGUgZm9sbG93aW5nIHBzZXVkbyB0YWJsZSBhc3NvY2lhdGVzIGEgbG9jYWwgZGlyZWN0b3J5IGFuZCBhIFVSTAotIyB3aXRoIGVhY2ggb2YgdGhlIGZpbGVzIHRoYXQgYmVsb25ncyB0byBzb21lIG90aGVyIHBhY2thZ2UgYW5kIGlzCi0jIHJlZ3VsYXJseSB1cGRhdGVkIGZyb20gdGhlIHNwZWNpZmllZCBVUkwuCi13Z2V0X2ZpbGVzID89IFwKLSAgJChzcmNkaXIpL2J1aWxkLWF1eC9jb25maWcuZ3Vlc3MgXAotICAkKHNyY2RpcikvYnVpbGQtYXV4L2NvbmZpZy5zdWIgXAotICAkKHNyY2RpcikvYnVpbGQtYXV4L3RleGluZm8udGV4IFwKLSAgJChzcmNkaXIpL3NyYy9hbnNpMmtuci5jCi0KLWdldC10YXJnZXRzID0gJChwYXRzdWJzdCAlLCBnZXQtJSwgJCh3Z2V0X2ZpbGVzKSkKLQotY29uZmlnLmd1ZXNzLXVybF9wcmVmaXggPSAkKGZ0cC1nbnUpL2J1aWxkLWF1eC8KLWNvbmZpZy5zdWItdXJsX3ByZWZpeCA9ICQoZnRwLWdudSkvYnVpbGQtYXV4LwotCi1hbnNpMmtuci5jLXVybF9wcmVmaXggPSBmdHA6Ly9mdHAuY3Mud2lzYy5lZHUvZ2hvc3QvCi0KLXRleGluZm8udGV4LXVybF9wcmVmaXggPSAkKGZ0cC1nbnUpL3RleGluZm8vCi0KLXN0YW5kYXJkcy50ZXhpLXVybF9wcmVmaXggPSAkKHd3dy1nbnUpL3ByZXAvCi1tYWtlLXN0ZHMudGV4aS11cmxfcHJlZml4ID0gJChzdGFuZGFyZHMudGV4aS11cmxfcHJlZml4KQotCi10YXJnZXQgPSAkKHBhdHN1YnN0IGdldC0lLCAlLCAkQCkKLXVybCA9ICQoJChub3RkaXIgJCh0YXJnZXQpKS11cmxfcHJlZml4KSQobm90ZGlyICQodGFyZ2V0KSkKLQotLlBIT05ZOiAkKGdldC10YXJnZXRzKQotJChnZXQtdGFyZ2V0cyk6Ci0JJChXR0VUKSAkKFdHRVRGTEFHUykgJCh1cmwpIC1PICQodGFyZ2V0KS50IFwKLQkgICYmICQobW92ZV9pZl9jaGFuZ2UpICQodGFyZ2V0KS50ICQodGFyZ2V0KQotCi1jdnNfZmlsZXMgPz0gXAotICAkKHNyY2RpcikvYnVpbGQtYXV4L2RlcGNvbXAgXAotICAkKHNyY2RpcikvYnVpbGQtYXV4L2luc3RhbGwtc2ggXAotICAkKHNyY2RpcikvYnVpbGQtYXV4L21pc3NpbmcgXAotICAkKHNyY2RpcikvYnVpbGQtYXV4L21raW5zdGFsbGRpcnMgXAotICAkKHNyY2Rpcikvc3JjL2Fuc2kya25yLmMKLWF1dG9tYWtlX3JlcG89OnBzZXJ2ZXI6YW5vbmN2czphbm9uY3ZzQHNvdXJjZXMucmVkaGF0LmNvbTovY3ZzL2F1dG9tYWtlCi0uUEhPTlk6IHdnZXQtdXBkYXRlCi13Z2V0LXVwZGF0ZTogJChnZXQtdGFyZ2V0cykKLQotLlBIT05ZOiBjdnMtdXBkYXRlCi1jdnMtdXBkYXRlOgotCWZhaWw9OwkJCQkJCQkJXAotCWZvciBmIGluICQoY3ZzX2ZpbGVzKTsgZG8JCQkJCVwKLQkgIHRlc3QgLWYgJCRmIHx8IHsgZWNobyAiKioqIHNraXBwaW5nICQkZiIgMT4mMjsgY29udGludWU7IH07CVwKLQkgIGN2cyBkaWZmICQkZiA+IC9kZXYvbnVsbAkJCQkJXAotCSAgICB8fCB7IGVjaG8gIioqKiAkJGYgaXMgbG9jYWxseSBtb2RpZmllZDsgc2tpcHBpbmcgaXQiIDE+JjI7CVwKLQkJIGZhaWw9eWVzOyBjb250aW51ZTsgfTsJCQkJCVwKLQkgIGZpbGU9JCQoYmFzZW5hbWUgJCRmKTsJCQkJCVwKLQkgIGVjaG8gY2hlY2tpbmcgb3V0ICQkZmlsZS4uLjsJCQkJCVwKLQkgICQoQ1ZTKSAtZCAkKGF1dG9tYWtlX3JlcG8pIGNvIC1wIGF1dG9tYWtlL2xpYi8kJGZpbGU+ICQkZi50CVwKLQkgICAgJiYgJChtb3ZlX2lmX2NoYW5nZSkgJCRmLnQgJCRmOwkJCQlcCi0JZG9uZTsJCQkJCQkJCVwKLQl0ZXN0ICIkJGZhaWwiICYmIGV4aXQgMQotCi1lbWl0X3VwbG9hZF9jb21tYW5kczoKLQlAZWNobyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JQGVjaG8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCUBlY2hvICIkKHNyY2RpcikvZ251cGxvYWQgJChHTlVQTE9BREZMQUdTKSBcXCIKLQlAZWNobyAiICAgIC0tdG8gJChnbnVfcmVsX2hvc3QpOmNvcmV1dGlscyBcXCIKLQlAZWNobyAiICAkKHJlbC1maWxlcykiCi0JQGVjaG8gJyMgc2VuZCB0aGUgL3RtcC9hbm5vdW5jZW1lbnQgZS1tYWlsJwotCUBlY2hvID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlAZWNobyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSQoeGQtZGVsdGEpOiAkKHJlbGVhc2VfYXJjaGl2ZV9kaXIpLyQocHJldi10Z3opICQoZGlzdGRpcikudGFyLmd6Ci0JeGRlbHRhIGRlbHRhIC05ICReICRAIHx8IDoKLQotLlBIT05ZOiBhbHBoYSBiZXRhIG1ham9yCi1hbHBoYSBiZXRhIG1ham9yOiBuZXdzLWRhdGUtY2hlY2sgJChsb2NhbC1jaGVjaykKLQkkKE1BS0UpIGN2cy1kaXN0Ci0JJChNQUtFKSAkKHhkLWRlbHRhKQotCSQoTUFLRSkgLXMgYW5ub3VuY2VtZW50IFJFTEVBU0VfVFlQRT0kQCA+IC90bXAvYW5ub3VuY2UtJChteV9kaXN0ZGlyKQotCWxuICQocmVsLWZpbGVzKSAkKHJlbGVhc2VfYXJjaGl2ZV9kaXIpCi0JY2htb2QgYS13ICQocmVsLWZpbGVzKQotCSQoTUFLRSkgLXMgZW1pdF91cGxvYWRfY29tbWFuZHMgUkVMRUFTRV9UWVBFPSRACi0JZWNobyAkKFZFUlNJT04pID4gJChwcmV2X3ZlcnNpb25fZmlsZSkKLQkkKENWUykgY2kgLW0uICQocHJldl92ZXJzaW9uX2ZpbGUpCmRpZmYgLS1naXQgYS9ORVdTIGIvTkVXUwppbmRleCAzZGNhNGZlLi5mMzc0NDAyIDEwMDY0NAotLS0gYS9ORVdTCisrKyBiL05FV1MKQEAgLTEsNTIgKzEsMTMyNiBAQAotQmlzb24gTmV3cwotLS0tLS0tLS0tLQorR05VIEJpc29uIE5FV1MKIAotQ2hhbmdlcyBpbiB2ZXJzaW9uIDIuMywgMjAwNi0wNi0wNToKKyogTm90ZXdvcnRoeSBjaGFuZ2VzIGluIHJlbGVhc2UgMi43ICgyMDEyLTEyLTEyKSBbc3RhYmxlXQogCi0qIEdMUiBncmFtbWFycyBzaG91bGQgbm93IHVzZSBgWVlSRUNPVkVSSU5HICgpJyBpbnN0ZWFkIG9mIGBZWVJFQ09WRVJJTkcnLAorKiogQnVnIGZpeGVzCisKKyAgV2FybmluZ3MgYWJvdXQgdW5pbml0aWFsaXplZCB5eWxsb2MgaW4geXlwYXJzZSBoYXZlIGJlZW4gZml4ZWQuCisKKyAgUmVzdG9yZWQgQzkwIGNvbXBsaWFuY2UgKHlldCBubyByZXBvcnQgd2FzIGV2ZXIgbWFkZSkuCisKKyoqIERpYWdub3N0aWNzIGFyZSBpbXByb3ZlZAorCisqKiogQ2hhbmdlcyBpbiB0aGUgZm9ybWF0IG9mIGVycm9yIG1lc3NhZ2VzCisKKyAgVGhpcyB1c2VkIHRvIGJlIHRoZSBmb3JtYXQgb2YgbWFueSBlcnJvciByZXBvcnRzOgorCisgICAgaW5wdXQueToyLjctMTI6ICV0eXBlIHJlZGVjbGFyYXRpb24gZm9yIGV4cAorICAgIGlucHV0Lnk6MS43LTEyOiBwcmV2aW91cyBkZWNsYXJhdGlvbgorCisgIEl0IGlzIG5vdzoKKworICAgIGlucHV0Lnk6Mi43LTEyOiBlcnJvcjogJXR5cGUgcmVkZWNsYXJhdGlvbiBmb3IgZXhwCisgICAgaW5wdXQueToxLjctMTI6ICAgICBwcmV2aW91cyBkZWNsYXJhdGlvbgorCisqKiogTmV3IGZvcm1hdCBmb3IgZXJyb3IgcmVwb3J0czogY2FyZXRzCisKKyAgQ2FyZXQgZXJyb3JzIGhhdmUgYmVlbiBhZGRlZCB0byBCaXNvbjoKKworICAgIGlucHV0Lnk6Mi43LTEyOiBlcnJvcjogJXR5cGUgcmVkZWNsYXJhdGlvbiBmb3IgZXhwCisgICAgICV0eXBlIDxzdmFsPiBleHAKKyAgICAgICAgICAgXl5eXl5eCisgICAgaW5wdXQueToxLjctMTI6ICAgICBwcmV2aW91cyBkZWNsYXJhdGlvbgorICAgICAldHlwZSA8aXZhbD4gZXhwCisgICAgICAgICAgIF5eXl5eXgorCisgIG9yCisKKyAgICBpbnB1dC55OjMuMjAtMjM6IGVycm9yOiBhbWJpZ3VvdXMgcmVmZXJlbmNlOiAnJGV4cCcKKyAgICAgZXhwOiBleHAgJysnIGV4cCB7ICRleHAgPSAkMSArICQzOyB9OworICAgICAgICAgICAgICAgICAgICAgICAgXl5eXgorICAgIGlucHV0Lnk6My4xLTM6ICAgICAgIHJlZmVycyB0bzogJGV4cCBhdCAkJAorICAgICBleHA6IGV4cCAnKycgZXhwIHsgJGV4cCA9ICQxICsgJDM7IH07CisgICAgIF5eXgorICAgIGlucHV0Lnk6My42LTg6ICAgICAgIHJlZmVycyB0bzogJGV4cCBhdCAkMQorICAgICBleHA6IGV4cCAnKycgZXhwIHsgJGV4cCA9ICQxICsgJDM7IH07CisgICAgICAgICAgXl5eCisgICAgaW5wdXQueTozLjE0LTE2OiAgICAgcmVmZXJzIHRvOiAkZXhwIGF0ICQzCisgICAgIGV4cDogZXhwICcrJyBleHAgeyAkZXhwID0gJDEgKyAkMzsgfTsKKyAgICAgICAgICAgICAgICAgIF5eXgorCisgIFRoZSBkZWZhdWx0IGJlaGF2aW91ciBmb3Igbm93IGlzIHN0aWxsIG5vdCB0byBkaXNwbGF5IHRoZXNlIHVubGVzcworICBleHBsaWN0bHkgYXNrZWQgd2l0aCAtZmNhcmV0IChvciAtZmFsbCkuIEhvd2V2ZXIsIGluIGEgbGF0ZXIgcmVsZWFzZSwgaXQKKyAgd2lsbCBiZSBtYWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIChidXQgbWF5IHN0aWxsIGJlIGRlYWN0aXZhdGVkIHdpdGgKKyAgLWZuby1jYXJldCkuCisKKyoqIE5ldyB2YWx1ZSBmb3IgJWRlZmluZSB2YXJpYWJsZTogYXBpLnB1cmUgZnVsbAorCisgIFRoZSAlZGVmaW5lIHZhcmlhYmxlIGFwaS5wdXJlIHJlcXVlc3RzIGEgcHVyZSAocmVlbnRyYW50KSBwYXJzZXIuIEhvd2V2ZXIsCisgIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIHVzaW5nIGl0IGluIGEgbG9jYXRpb24tdHJhY2tpbmcgWWFjYyBwYXJzZXIKKyAgcmVzdWx0ZWQgaW4gYSB5eWVycm9yIGZ1bmN0aW9uIHRoYXQgZGlkIG5vdCB0YWtlIGEgbG9jYXRpb24gYXMgYQorICBwYXJhbWV0ZXIuIFdpdGggdGhpcyBuZXcgdmFsdWUsIHRoZSB1c2VyIG1heSByZXF1ZXN0IGEgYmV0dGVyIHB1cmUgcGFyc2VyLAorICB3aGVyZSB5eWVycm9yIGRvZXMgdGFrZSBhIGxvY2F0aW9uIGFzIGEgcGFyYW1ldGVyIChpbiBsb2NhdGlvbi10cmFja2luZworICBwYXJzZXJzKS4KKworICBUaGUgdXNlIG9mICIlZGVmaW5lIGFwaS5wdXJlIHRydWUiIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdGhpcyBuZXcKKyAgIiVkZWZpbmUgYXBpLnB1cmUgZnVsbCIuCisKKyoqIE5ldyAlZGVmaW5lIHZhcmlhYmxlOiBhcGkubG9jYXRpb24udHlwZSAoZ2xyLmNjLCBsYWxyMS5jYywgbGFscjEuamF2YSkKKworICBUaGUgJWRlZmluZSB2YXJpYWJsZSBhcGkubG9jYXRpb24udHlwZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSB0eXBlIHRvIHVzZQorICBmb3IgbG9jYXRpb25zLiAgV2hlbiBkZWZpbmVkLCBCaXNvbiBubyBsb25nZXIgZ2VuZXJhdGVzIHRoZSBwb3NpdGlvbi5oaAorICBhbmQgbG9jYXRpb24uaGggZmlsZXMsIG5vciBkb2VzIHRoZSBwYXJzZXIgd2lsbCBpbmNsdWRlIHRoZW06IHRoZSB1c2VyIGlzCisgIHRoZW4gcmVzcG9uc2libGUgdG8gZGVmaW5lIGhlciB0eXBlLgorCisgIFRoaXMgY2FuIGJlIHVzZWQgaW4gcHJvZ3JhbXMgd2l0aCBzZXZlcmFsIHBhcnNlcnMgdG8gZmFjdG9yIHRoZWlyIGxvY2F0aW9uCisgIGFuZCBwb3NpdGlvbiBmaWxlczogbGV0IG9uZSBvZiB0aGVtIGdlbmVyYXRlIHRoZW0sIGFuZCB0aGUgb3RoZXJzIGp1c3QgdXNlCisgIHRoZW0uCisKKyAgVGhpcyBmZWF0dXJlIHdhcyBhY3R1YWxseSBpbnRyb2R1Y2VkLCBidXQgbm90IGRvY3VtZW50ZWQsIGluIEJpc29uIDIuNSwKKyAgdW5kZXIgdGhlIG5hbWUgImxvY2F0aW9uX3R5cGUiICh3aGljaCBpcyBtYWludGFpbmVkIGZvciBiYWNrd2FyZAorICBjb21wYXRpYmlsaXR5KS4KKworICBGb3IgY29uc2lzdGVuY3ksIGxhbHIxLmphdmEncyAlZGVmaW5lIHZhcmlhYmxlcyBsb2NhdGlvbl90eXBlIGFuZAorICBwb3NpdGlvbl90eXBlIGFyZSBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGFwaS5sb2NhdGlvbi50eXBlIGFuZAorICBhcGkucG9zaXRpb24udHlwZS4KKworKiogRXhjZXB0aW9uIHNhZmV0eSAobGFscjEuY2MpCisKKyAgVGhlIHBhcnNlIGZ1bmN0aW9uIG5vdyBjYXRjaGVzIGV4Y2VwdGlvbnMsIHVzZXMgdGhlICVkZXN0cnVjdG9ycyB0bworICByZWxlYXNlIG1lbW9yeSAodGhlIGxvb2thaGVhZCBzeW1ib2wgYW5kIHRoZSBzeW1ib2xzIHB1c2hlZCBvbiB0aGUgc3RhY2spCisgIGJlZm9yZSByZS10aHJvd2luZyB0aGUgZXhjZXB0aW9uLgorCisgIFRoaXMgZmVhdHVyZSBpcyBzb21ld2hhdCBleHBlcmltZW50YWwuICBVc2VyIGZlZWRiYWNrIHdvdWxkIGJlCisgIGFwcHJlY2lhdGVkLgorCisqKiBHcmFwaCBpbXByb3ZlbWVudHMgaW4gRE9UIGFuZCBYU0xUCisKKyAgVGhlIGdyYXBoaWNhbCBwcmVzZW50YXRpb24gb2YgdGhlIHN0YXRlcyBpcyBtb3JlIHJlYWRhYmxlOiB0aGVpciBzaGFwZSBpcworICBub3cgcmVjdGFuZ3VsYXIsIHRoZSBzdGF0ZSBudW1iZXIgaXMgY2xlYXJseSBkaXNwbGF5ZWQsIGFuZCB0aGUgaXRlbXMgYXJlCisgIG51bWJlcmVkIGFuZCBsZWZ0LWp1c3RpZmllZC4KKworICBUaGUgcmVkdWN0aW9ucyBhcmUgbm93IGV4cGxpY2l0bHkgcmVwcmVzZW50ZWQgYXMgdHJhbnNpdGlvbnMgdG8gb3RoZXIKKyAgZGlhbW9uZCBzaGFwZWQgbm9kZXMuCisKKyAgVGhlc2UgY2hhbmdlcyBhcmUgcHJlc2VudCBpbiBib3RoIC0tZ3JhcGggb3V0cHV0IGFuZCB4bWwyZG90LnhzbCBYU0xUCisgIHByb2Nlc3NpbmcsIHdpdGggbWlub3IgKGRvY3VtZW50ZWQpIGRpZmZlcmVuY2VzLgorCisqKiAlbGFuZ3VhZ2UgaXMgbm8gbG9uZ2VyIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlLgorCisgIFRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyBmZWF0dXJlLCBpbiAyLjQsIHdhcyBmb3VyIHllYXJzIGFnby4gVGhlCisgIC0tbGFuZ3VhZ2Ugb3B0aW9uIGFuZCB0aGUgJWxhbmd1YWdlIGRpcmVjdGl2ZSBhcmUgbm8gbG9uZ2VyIGV4cGVyaW1lbnRhbC4KKworKiogRG9jdW1lbnRhdGlvbgorCisgIFRoZSBzZWN0aW9ucyBhYm91dCBzaGlmdC9yZWR1Y2UgYW5kIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3RzIHJlc29sdXRpb24KKyAgaGF2ZSBiZWVuIGZpeGVkIGFuZCBleHRlbmRlZC4KKworICBBbHRob3VnaCBpbnRyb2R1Y2VkIG1vcmUgdGhhbiBmb3VyIHllYXJzIGFnbywgWE1MIGFuZCBHcmFwaHZpeiByZXBvcnRzCisgIHdlcmUgbm90IHByb3Blcmx5IGRvY3VtZW50ZWQuCisKKyAgVGhlIHRyYW5zbGF0aW9uIG9mIG1pZC1ydWxlIGFjdGlvbnMgaXMgbm93IGRlc2NyaWJlZC4KKworKiBOb3Rld29ydGh5IGNoYW5nZXMgaW4gcmVsZWFzZSAyLjYuNSAoMjAxMi0xMS0wNykgW3N0YWJsZV0KKworICBXZSBjb25zaWRlciBjb21waWxlciB3YXJuaW5ncyBhYm91dCBCaXNvbiBnZW5lcmF0ZWQgcGFyc2VycyB0byBiZSBidWdzLgorICBSYXRoZXIgdGhhbiB3b3JraW5nIGFyb3VuZCB0aGVtIGluIHlvdXIgb3duIHByb2plY3QsIHBsZWFzZSBjb25zaWRlcgorICByZXBvcnRpbmcgdGhlbSB0byB1cy4KKworKiogQnVnIGZpeGVzCisKKyAgV2FybmluZ3MgYWJvdXQgdW5pbml0aWFsaXplZCB5eWx2YWwgYW5kL29yIHl5bGxvYyBmb3IgcHVzaCBwYXJzZXJzIHdpdGggYQorICBwdXJlIGludGVyZmFjZSBoYXZlIGJlZW4gZml4ZWQgZm9yIEdDQyA0LjAgdXAgdG8gNC44LCBhbmQgQ2xhbmcgMi45IHRvCisgIDMuMi4KKworICBPdGhlciBpc3N1ZXMgaW4gdGhlIHRlc3Qgc3VpdGUgaGF2ZSBiZWVuIGFkZHJlc3NlZC4KKworICBOdWwgY2hhcmFjdGVycyBhcmUgY29ycmVjdGx5IGRpc3BsYXllZCBpbiBlcnJvciBtZXNzYWdlcy4KKworICBXaGVuIHBvc3NpYmxlLCB5eWxsb2MgaXMgY29ycmVjdGx5IGluaXRpYWxpemVkIGJlZm9yZSBjYWxsaW5nIHl5bGV4LiAgSXQKKyAgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSB0byBpbml0aWFsaXplIGl0IGluIHRoZSAlaW5pdGlhbC1hY3Rpb24uCisKKyogTm90ZXdvcnRoeSBjaGFuZ2VzIGluIHJlbGVhc2UgMi42LjQgKDIwMTItMTAtMjMpIFtzdGFibGVdCisKKyAgQmlzb24gMi42LjMncyAtLXZlcnNpb24gd2FzIGluY29ycmVjdC4gIFRoaXMgcmVsZWFzZSBmaXhlcyB0aGlzIGlzc3VlLgorCisqIE5vdGV3b3J0aHkgY2hhbmdlcyBpbiByZWxlYXNlIDIuNi4zICgyMDEyLTEwLTIyKSBbc3RhYmxlXQorCisqKiBCdWcgZml4ZXMKKworICBCdWdzIGFuZCBwb3J0YWJpbGl0eSBpc3N1ZXMgaW4gdGhlIHRlc3Qgc3VpdGUgaGF2ZSBiZWVuIGZpeGVkLgorCisgIFNvbWUgZXJyb3JzIGluIHRyYW5zbGF0aW9ucyBoYXZlIGJlZW4gYWRkcmVzc2VkLCBhbmQgLS1oZWxwIG5vdyBkaXJlY3RzCisgIHVzZXJzIHRvIHRoZSBhcHByb3ByaWF0ZSBwbGFjZSB0byByZXBvcnQgdGhlbS4KKworICBTdHJheSBJbmZvIGZpbGVzIHNoaXBwZWQgYnkgYWNjaWRlbnQgYXJlIHJlbW92ZWQuCisKKyAgSW5jb3JyZWN0IGRlZmluaXRpb25zIG9mIFlZXywgaXNzdWVkIGJ5IHlhY2MuYyB3aGVuIG5vIHBhcnNlciBoZWFkZXIgaXMKKyAgZ2VuZXJhdGVkLCBhcmUgcmVtb3ZlZC4KKworICBBbGwgdGhlIGdlbmVyYXRlZCBoZWFkZXJzIGFyZSBzZWxmLWNvbnRhaW5lZC4KKworKiogSGVhZGVyIGd1YXJkcyAoeWFjYy5jLCBnbHIuYywgZ2xyLmNjKQorCisgIEluIG9yZGVyIHRvIGF2b2lkIGNvbGxpc2lvbnMsIHRoZSBoZWFkZXIgZ3VhcmRzIGFyZSBub3cKKyAgWVlfPFBSRUZJWD5fPEZJTEU+X0lOQ0xVREVELCBpbnN0ZWFkIG9mIG1lcmVseSA8UFJFRklYPl88RklMRT4uCisgIEZvciBpbnN0YW5jZSB0aGUgaGVhZGVyIGdlbmVyYXRlZCBmcm9tCisKKyAgICAlZGVmaW5lIGFwaS5wcmVmaXggImNhbGMiCisgICAgJWRlZmluZXMgImxpYi9wYXJzZS5oIgorCisgIHdpbGwgdXNlIFlZX0NBTENfTElCX1BBUlNFX0hfSU5DTFVERUQgYXMgZ3VhcmQuCisKKyoqIEZpeCBjb21waWxlciB3YXJuaW5ncyBpbiB0aGUgZ2VuZXJhdGVkIHBhcnNlciAoeWFjYy5jLCBnbHIuYykKKworICBUaGUgY29tcGlsYXRpb24gb2YgcHVyZSBwYXJzZXJzICglZGVmaW5lIGFwaS5wdXJlKSBjYW4gdHJpZ2dlciBHQ0MKKyAgd2FybmluZ3Mgc3VjaCBhczoKKworICAgIGlucHV0LmM6IEluIGZ1bmN0aW9uICd5eXBhcnNlJzoKKyAgICBpbnB1dC5jOjE1MDM6MTI6IHdhcm5pbmc6ICd5eWx2YWwnIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaW4gdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gWy1XbWF5YmUtdW5pbml0aWFsaXplZF0KKyAgICAgICAqKyt5eXZzcCA9IHl5bHZhbDsKKyAgICAgICAgICAgICAgICBeCisKKyAgVGhpcyBpcyBub3cgZml4ZWQ7IHByYWdtYXMgdG8gYXZvaWQgdGhlc2Ugd2FybmluZ3MgYXJlIG5vIGxvbmdlciBuZWVkZWQuCisKKyAgV2FybmluZ3MgZnJvbSBjbGFuZyAoImVxdWFsaXR5IGNvbXBhcmlzb24gd2l0aCBleHRyYW5lb3VzIHBhcmVudGhlc2VzIiBhbmQKKyAgImZ1bmN0aW9uIGRlY2xhcmVkICdub3JldHVybicgc2hvdWxkIG5vdCByZXR1cm4iKSBoYXZlIGFsc28gYmVlbgorICBhZGRyZXNzZWQuCisKKyogTm90ZXdvcnRoeSBjaGFuZ2VzIGluIHJlbGVhc2UgMi42LjIgKDIwMTItMDgtMDMpIFtzdGFibGVdCisKKyoqIEJ1ZyBmaXhlcworCisgIEJ1ZmZlciBvdmVycnVucywgY29tcGxhaW50cyBmcm9tIEZsZXgsIGFuZCBwb3J0YWJpbGl0eSBpc3N1ZXMgaW4gdGhlIHRlc3QKKyAgc3VpdGUgaGF2ZSBiZWVuIGZpeGVkLgorCisqKiBTcGFjZXMgaW4gJWxleC0gYW5kICVwYXJzZS1wYXJhbSAobGFscjEuY2MsIGdsci5jYykKKworICBUcmFpbGluZyBlbmQtb2YtbGluZXMgaW4gJXBhcnNlLXBhcmFtIG9yICVsZXgtcGFyYW0gd291bGQgcmVzdWx0IGluCisgIGludmFsaWQgQysrLiAgVGhpcyBpcyBmaXhlZC4KKworKiogU3B1cmlvdXMgc3BhY2VzIGFuZCBlbmQtb2YtbGluZXMKKworICBUaGUgZ2VuZXJhdGVkIGZpbGVzIG5vIGxvbmdlciBlbmQgKG5vciBzdGFydCkgd2l0aCBlbXB0eSBsaW5lcy4KKworKiBOb3Rld29ydGh5IGNoYW5nZXMgaW4gcmVsZWFzZSAyLjYuMSAoMjAxMi0wNy0zMCkgW3N0YWJsZV0KKworICBCaXNvbiBubyBsb25nZXIgZXhlY3V0ZXMgdXNlci1zcGVjaWZpZWQgTTQgY29kZSB3aGVuIHByb2Nlc3NpbmcgYSBncmFtbWFyLgorCisqKiBGdXR1cmUgQ2hhbmdlcworCisgIEluIGFkZGl0aW9uIHRvIHRoZSByZW1vdmFsIG9mIHRoZSBmZWF0dXJlcyBhbm5vdW5jZWQgaW4gQmlzb24gMi42LCB0aGUKKyAgbmV4dCBtYWpvciByZWxlYXNlIHdpbGwgcmVtb3ZlIHRoZSAiVGVtcG9yYXJ5IGhhY2sgZm9yIGFkZGluZyBhIHNlbWljb2xvbgorICB0byB0aGUgdXNlciBhY3Rpb24iLCBhcyBhbm5vdW5jZWQgaW4gdGhlIHJlbGVhc2UgMi41LiAgSW5zdGVhZCBvZjoKKworICAgIGV4cDogZXhwICIrIiBleHAgeyAkJCA9ICQxICsgJDMgfTsKKworICB3cml0ZToKKworICAgIGV4cDogZXhwICIrIiBleHAgeyAkJCA9ICQxICsgJDM7IH07CisKKyoqIEJ1ZyBmaXhlcworCisqKiogVHlwZSBuYW1lcyBhcmUgbm93IHByb3Blcmx5IGVzY2FwZWQuCisKKyoqKiBnbHIuY2M6IHNldF9kZWJ1Z19sZXZlbCBhbmQgZGVidWdfbGV2ZWwgd29yayBhcyBleHBlY3RlZC4KKworKioqIFN0cmF5IEAgb3IgJCBpbiBhY3Rpb25zCisKKyAgV2hpbGUgQmlzb24gdXNlZCB0byB3YXJuIGFib3V0IHN0cmF5ICQgb3IgQCBpbiBhY3Rpb24gcnVsZXMsIGl0IGRpZCBub3QKKyAgZm9yIG90aGVyIGFjdGlvbnMgc3VjaCBhcyBwcmludGVycywgZGVzdHJ1Y3RvcnMsIG9yIGluaXRpYWwgYWN0aW9ucy4gIEl0CisgIG5vdyBkb2VzLgorCisqKiBUeXBlIG5hbWVzIGluIGFjdGlvbnMKKworICBGb3IgY29uc2lzdGVuY3kgd2l0aCBydWxlIGFjdGlvbnMsIGl0IGlzIG5vdyBwb3NzaWJsZSB0byBxdWFsaWZ5ICQkIGJ5IGEKKyAgdHlwZS1uYW1lIGluIGRlc3RydWN0b3JzLCBwcmludGVycywgYW5kIGluaXRpYWwgYWN0aW9ucy4gIEZvciBpbnN0YW5jZToKKworICAgICVwcmludGVyIHsgZnByaW50ZiAoeXlvLCAiKCVkLCAlZikiLCAkPGl2YWw+JCwgJDxmdmFsPiQpOyB9IDwqPiA8PjsKKworICB3aWxsIGRpc3BsYXkgdHdvIHZhbHVlcyBmb3IgZWFjaCB0eXBlZCBhbmQgdW50eXBlZCBzeW1ib2wgKHByb3ZpZGVkCisgIHRoYXQgWVlTVFlQRSBoYXMgYm90aCAiaXZhbCIgYW5kICJmdmFsIiBmaWVsZHMpLgorCisqIE5vdGV3b3J0aHkgY2hhbmdlcyBpbiByZWxlYXNlIDIuNiAoMjAxMi0wNy0xOSkgW3N0YWJsZV0KKworKiogRnV0dXJlIENoYW5nZXMKKworICBUaGUgbmV4dCBtYWpvciByZWxlYXNlIG9mIEJpc29uIHdpbGwgZHJvcCBzdXBwb3J0IGZvciB0aGUgZm9sbG93aW5nCisgIGRlcHJlY2F0ZWQgZmVhdHVyZXMuICBQbGVhc2UgcmVwb3J0IGRpc2FncmVlbWVudHMgdG8gYnVnLWJpc29uQGdudS5vcmcuCisKKyoqKiBLJlIgQyBwYXJzZXJzCisKKyAgU3VwcG9ydCBmb3IgZ2VuZXJhdGluZyBwYXJzZXJzIGluIEsmUiBDIHdpbGwgYmUgcmVtb3ZlZC4gIFBhcnNlcnMKKyAgZ2VuZXJhdGVkIGZvciBDIHN1cHBvcnQgSVNPIEM5MCwgYW5kIGFyZSB0ZXN0ZWQgd2l0aCBJU08gQzk5IGFuZCBJU08gQzExCisgIGNvbXBpbGVycy4KKworKioqIEZlYXR1cmVzIGRlcHJlY2F0ZWQgc2luY2UgQmlzb24gMS44NzUKKworICBUaGUgZGVmaW5pdGlvbnMgb2YgeXlzdHlwZSBhbmQgeXlsdHlwZSB3aWxsIGJlIHJlbW92ZWQ7IHVzZSBZWVNUWVBFIGFuZAorICBZWUxUWVBFLgorCisgIFlZUEFSU0VfUEFSQU0gYW5kIFlZTEVYX1BBUkFNLCBkZXByZWNhdGVkIGluIGZhdm9yIG9mICVwYXJzZS1wYXJhbSBhbmQKKyAgJWxleC1wYXJhbSwgd2lsbCBubyBsb25nZXIgYmUgc3VwcG9ydGVkLgorCisgIFN1cHBvcnQgZm9yIHRoZSBwcmVwcm9jZXNzb3Igc3ltYm9sIFlZRVJST1JfVkVSQk9TRSB3aWxsIGJlIHJlbW92ZWQsIHVzZQorICAlZXJyb3ItdmVyYm9zZS4KKworKioqIFRoZSBnZW5lcmF0ZWQgaGVhZGVyIHdpbGwgYmUgaW5jbHVkZWQgKHlhY2MuYykKKworICBJbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIHRoZSBjb250ZW50IG9mIHRoZSBnZW5lcmF0ZWQgaGVhZGVyIChkZWZpbml0aW9uIG9mCisgIFlZU1RZUEUsIHl5cGFyc2UgZGVjbGFyYXRpb24gZXRjLiksIHRoZSBnZW5lcmF0ZWQgcGFyc2VyIHdpbGwgaW5jbHVkZSBpdCwKKyAgYXMgaXMgYWxyZWFkeSB0aGUgY2FzZSBmb3IgR0xSIG9yIEMrKyBwYXJzZXJzLiAgVGhpcyBjaGFuZ2UgaXMgZGVmZXJyZWQKKyAgYmVjYXVzZSBleGlzdGluZyB2ZXJzaW9ucyBvZiB5bHdyYXAgKGUuZy4sIEF1dG9tYWtlIDEuMTIuMSkgZG8gbm90IHN1cHBvcnQKKyAgaXQuCisKKyoqIEdlbmVyYXRlZCBQYXJzZXIgSGVhZGVycworCisqKiogR3VhcmRzICh5YWNjLmMsIGdsci5jLCBnbHIuY2MpCisKKyAgVGhlIGdlbmVyYXRlZCBoZWFkZXJzIGFyZSBub3cgZ3VhcmRlZCwgYXMgaXMgYWxyZWFkeSB0aGUgY2FzZSBmb3IgQysrCisgIHBhcnNlcnMgKGxhbHIxLmNjKS4gIEZvciBpbnN0YW5jZSwgd2l0aCAtLWRlZmluZXM9Zm9vLmg6CisKKyAgICAjaWZuZGVmIFlZX0ZPT19ICisgICAgIyBkZWZpbmUgWVlfRk9PX0gKKyAgICAuLi4KKyAgICAjZW5kaWYgLyogIVlZX0ZPT19IICAqLworCisqKiogTmV3IGRlY2xhcmF0aW9ucyAoeWFjYy5jLCBnbHIuYykKKworICBUaGUgZ2VuZXJhdGVkIGhlYWRlciBub3cgZGVjbGFyZXMgeXlkZWJ1ZyBhbmQgeXlwYXJzZS4gIEJvdGggaG9ub3IKKyAgLS1uYW1lLXByZWZpeD1iYXJfLCBhbmQgeWllbGQKKworICAgIGludCBiYXJfcGFyc2UgKHZvaWQpOworCisgIHJhdGhlciB0aGFuCisKKyAgICAjZGVmaW5lIHl5cGFyc2UgYmFyX3BhcnNlCisgICAgaW50IHl5cGFyc2UgKHZvaWQpOworCisgIGluIG9yZGVyIHRvIGZhY2lsaXRhdGUgdGhlIGluY2x1c2lvbiBvZiBzZXZlcmFsIHBhcnNlciBoZWFkZXJzIGluc2lkZSBhCisgIHNpbmdsZSBjb21waWxhdGlvbiB1bml0LgorCisqKiogRXhwb3J0ZWQgc3ltYm9scyBpbiBDKysKKworICBUaGUgc3ltYm9scyBZWVRPS0VOX1RBQkxFIGFuZCBZWUVSUk9SX1ZFUkJPU0UsIHdoaWNoIHdlcmUgZGVmaW5lZCBpbiB0aGUKKyAgaGVhZGVyLCBhcmUgcmVtb3ZlZCwgYXMgdGhleSBwcmV2ZW50IHRoZSBwb3NzaWJpbGl0eSBvZiBpbmNsdWRpbmcgc2V2ZXJhbAorICBnZW5lcmF0ZWQgaGVhZGVycyBmcm9tIGEgc2luZ2xlIGNvbXBpbGF0aW9uIHVuaXQuCisKKyoqKiBZWUxTUF9ORUVERUQKKworICBGb3IgdGhlIHNhbWUgcmVhc29ucywgdGhlIHVuZG9jdW1lbnRlZCBhbmQgdW51c2VkIG1hY3JvIFlZTFNQX05FRURFRCBpcyBubworICBsb25nZXIgZGVmaW5lZC4KKworKiogTmV3ICVkZWZpbmUgdmFyaWFibGU6IGFwaS5wcmVmaXgKKworICBOb3cgdGhhdCB0aGUgZ2VuZXJhdGVkIGhlYWRlcnMgYXJlIG1vcmUgY29tcGxldGUgYW5kIHByb3Blcmx5IHByb3RlY3RlZAorICBhZ2FpbnN0IG11bHRpcGxlIGluY2x1c2lvbnMsIGNvbnN0YW50IG5hbWVzLCBzdWNoIGFzIFlZU1RZUEUgYXJlIGEKKyAgcHJvYmxlbS4gIFdoaWxlIHl5cGFyc2UgYW5kIG90aGVycyBhcmUgcHJvcGVybHkgcmVuYW1lZCBieSAlbmFtZS1wcmVmaXgsCisgIFlZU1RZUEUsIFlZREVCVUcgYW5kIG90aGVycyBoYXZlIG5ldmVyIGJlZW4gYWZmZWN0ZWQgYnkgaXQuICBCZWNhdXNlIGl0CisgIHdvdWxkIGludHJvZHVjZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGlzc3VlcyBpbiBwcm9qZWN0cyBub3QgZXhwZWN0aW5nCisgIFlZU1RZUEUgdG8gYmUgcmVuYW1lZCwgaW5zdGVhZCBvZiBjaGFuZ2luZyB0aGUgYmVoYXZpb3Igb2YgJW5hbWUtcHJlZml4LAorICBpdCBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGEgbmV3ICVkZWZpbmUgdmFyaWFibGU6IGFwaS5wcmVmaXguCisKKyAgVGhlIGZvbGxvd2luZyBleGFtcGxlcyBjb21wYXJlcyBib3RoOgorCisgICAgJW5hbWUtcHJlZml4ICJiYXJfIiAgICAgICAgICAgICAgIHwgJWRlZmluZSBhcGkucHJlZml4ICJiYXJfIgorICAgICV0b2tlbiA8aXZhbD4gRk9PICAgICAgICAgICAgICAgICAgICV0b2tlbiA8aXZhbD4gRk9PCisgICAgJXVuaW9uIHsgaW50IGl2YWw7IH0gICAgICAgICAgICAgICAgJXVuaW9uIHsgaW50IGl2YWw7IH0KKyAgICAlJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlJQorICAgIGV4cDogJ2EnOyAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cDogJ2EnOworCisgIGJpc29uIGdlbmVyYXRlczoKKworICAgICNpZm5kZWYgQkFSX0ZPT19IICAgICAgICAgICAgICAgICAgICNpZm5kZWYgQkFSX0ZPT19ICisgICAgIyBkZWZpbmUgQkFSX0ZPT19IICAgICAgICAgICAgICAgICAgIyBkZWZpbmUgQkFSX0ZPT19ICisKKyAgICAvKiBFbmFibGluZyB0cmFjZXMuICAqLyAgICAgICAgICAgICAvKiBFbmFibGluZyB0cmFjZXMuICAqLworICAgICMgaWZuZGVmIFlZREVCVUcgICAgICAgICAgICAgICAgICB8ICMgaWZuZGVmIEJBUl9ERUJVRworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+ICMgIGlmIGRlZmluZWQgWVlERUJVRworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+ICMgICBpZiBZWURFQlVHCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gIyAgICBkZWZpbmUgQkFSX0RFQlVHIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiAjICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+ICMgICAgZGVmaW5lIEJBUl9ERUJVRyAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gIyAgIGVuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gIyAgZWxzZQorICAgICMgIGRlZmluZSBZWURFQlVHIDAgICAgICAgICAgICAgICB8ICMgICBkZWZpbmUgQkFSX0RFQlVHIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiAjICBlbmRpZgorICAgICMgZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICMgZW5kaWYKKworICAgICMgaWYgWVlERUJVRyAgICAgICAgICAgICAgICAgICAgICB8ICMgaWYgQkFSX0RFQlVHCisgICAgZXh0ZXJuIGludCBiYXJfZGVidWc7ICAgICAgICAgICAgICAgZXh0ZXJuIGludCBiYXJfZGVidWc7CisgICAgIyBlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBlbmRpZgorCisgICAgLyogVG9rZW5zLiAgKi8gICAgICAgICAgICAgICAgICAgICAgLyogVG9rZW5zLiAgKi8KKyAgICAjIGlmbmRlZiBZWVRPS0VOVFlQRSAgICAgICAgICAgICAgfCAjIGlmbmRlZiBCQVJfVE9LRU5UWVBFCisgICAgIyAgZGVmaW5lIFlZVE9LRU5UWVBFICAgICAgICAgICAgIHwgIyAgZGVmaW5lIEJBUl9UT0tFTlRZUEUKKyAgICAgICBlbnVtIHl5dG9rZW50eXBlIHsgICAgICAgICAgICAgfCAgICBlbnVtIGJhcl90b2tlbnR5cGUgeworICAgICAgICAgRk9PID0gMjU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgRk9PID0gMjU4CisgICAgICAgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAjIGVuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGVuZGlmCisKKyAgICAjaWYgISBkZWZpbmVkIFlZU1RZUEUgXCAgICAgICAgICAgfCAjaWYgISBkZWZpbmVkIEJBUl9TVFlQRSBcCisgICAgICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVEIHwgICYmICEgZGVmaW5lZCBCQVJfU1RZUEVfSVNfREVDTEFSRUQKKyAgICB0eXBlZGVmIHVuaW9uIFlZU1RZUEUgICAgICAgICAgICAgfCB0eXBlZGVmIHVuaW9uIEJBUl9TVFlQRQorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgaW50IGl2YWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGl2YWw7CisgICAgfSBZWVNUWVBFOyAgICAgICAgICAgICAgICAgICAgICAgIHwgfSBCQVJfU1RZUEU7CisgICAgIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxICAgIHwgIyBkZWZpbmUgQkFSX1NUWVBFX0lTX0RFQ0xBUkVEIDEKKyAgICAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKworICAgIGV4dGVybiBZWVNUWVBFIGJhcl9sdmFsOyAgICAgICAgICB8IGV4dGVybiBCQVJfU1RZUEUgYmFyX2x2YWw7CisKKyAgICBpbnQgYmFyX3BhcnNlICh2b2lkKTsgICAgICAgICAgICAgICBpbnQgYmFyX3BhcnNlICh2b2lkKTsKKworICAgICNlbmRpZiAvKiAhQkFSX0ZPT19IICAqLyAgICAgICAgICAgICNlbmRpZiAvKiAhQkFSX0ZPT19IICAqLworCisqIE5vdGV3b3J0aHkgY2hhbmdlcyBpbiByZWxlYXNlIDIuNS4xICgyMDEyLTA2LTA1KSBbc3RhYmxlXQorCisqKiBGdXR1cmUgY2hhbmdlczoKKworICBUaGUgbmV4dCBtYWpvciByZWxlYXNlIHdpbGwgZHJvcCBzdXBwb3J0IGZvciBnZW5lcmF0aW5nIHBhcnNlcnMgaW4gSyZSIEMuCisKKyoqIHlhY2MuYzogWVlCQUNLVVAgd29ya3MgYXMgZXhwZWN0ZWQuCisKKyoqIGdsci5jIGltcHJvdmVtZW50czoKKworKioqIExvY2F0aW9uIHN1cHBvcnQgaXMgZWxpbWluYXRlZCB3aGVuIG5vdCByZXF1ZXN0ZWQ6CisKKyAgR0xSIHBhcnNlcnMgdXNlZCB0byBpbmNsdWRlIGxvY2F0aW9uLXJlbGF0ZWQgY29kZSBldmVuIHdoZW4gbG9jYXRpb25zIHdlcmUKKyAgbm90IHJlcXVlc3RlZCwgYW5kIHRoZXJlZm9yZSBub3QgZXZlbiB1c2FibGUuCisKKyoqKiBfX2F0dHJpYnV0ZV9fIGlzIHByZXNlcnZlZDoKKworICBfX2F0dHJpYnV0ZV9fIGlzIG5vIGxvbmdlciBkaXNhYmxlZCB3aGVuIF9fU1RSSUNUX0FOU0lfXyBpcyBkZWZpbmVkIChpLmUuLAorICB3aGVuIC1zdGQgaXMgcGFzc2VkIHRvIEdDQykuCisKKyoqIGxhbHIxLmphdmE6IHNldmVyYWwgZml4ZXM6CisKKyAgVGhlIEphdmEgcGFyc2VyIG5vIGxvbmdlciB0aHJvd3MgQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGlmIHRoZQorICBmaXJzdCB0b2tlbiBsZWFkcyB0byBhIHN5bnRheCBlcnJvci4gIFNvbWUgbWlub3IgY2xlYW4gdXBzLgorCisqKiBDaGFuZ2VzIGZvciBDKys6CisKKyoqKiBDKysxMSBjb21wYXRpYmlsaXR5OgorCisgIEMgYW5kIEMrKyBwYXJzZXJzIHVzZSAibnVsbHB0ciIgaW5zdGVhZCBvZiAiMCIgd2hlbiBfX2NwbHVzcGx1cyBpcyAyMDExMDNMCisgIG9yIGhpZ2hlci4KKworKioqIEhlYWRlciBndWFyZHMKKworICBUaGUgaGVhZGVyIGZpbGVzIHN1Y2ggYXMgInBhcnNlci5oaCIsICJsb2NhdGlvbi5oaCIsIGV0Yy4gdXNlZCBhIGNvbnN0YW50CisgIG5hbWUgZm9yIHByZXByb2Nlc3NvciBndWFyZHMsIGZvciBpbnN0YW5jZToKKworICAgICNpZm5kZWYgQklTT05fTE9DQVRJT05fSEgKKyAgICAjIGRlZmluZSBCSVNPTl9MT0NBVElPTl9ISAorICAgIC4uLgorICAgICNlbmRpZiAvLyAhQklTT05fTE9DQVRJT05fSEgKKworICBUaGUgaW5jbHVzaW9uIGd1YXJkIGlzIG5vdyBjb21wdXRlZCBmcm9tICJQUkVGSVgvRklMRS1OQU1FIiwgd2hlcmUgbG93ZXIKKyAgY2FzZSBjaGFyYWN0ZXJzIGFyZSBjb252ZXJ0ZWQgdG8gdXBwZXIgY2FzZSwgYW5kIHNlcmllcyBvZgorICBub24tYWxwaGFudW1lcmljYWwgY2hhcmFjdGVycyBhcmUgY29udmVydGVkIHRvIGFuIHVuZGVyc2NvcmUuCisKKyAgV2l0aCAiYmlzb24gLW8gbGFuZysrL3BhcnNlci5jYyIsICJsb2NhdGlvbi5oaCIgd291bGQgbm93IGluY2x1ZGU6CisKKyAgICAjaWZuZGVmIFlZX0xBTkdfTE9DQVRJT05fSEgKKyAgICAjIGRlZmluZSBZWV9MQU5HX0xPQ0FUSU9OX0hICisgICAgLi4uCisgICAgI2VuZGlmIC8vICFZWV9MQU5HX0xPQ0FUSU9OX0hICisKKyoqKiBDKysgbG9jYXRpb25zOgorCisgIFRoZSBwb3NpdGlvbiBhbmQgbG9jYXRpb24gY29uc3RydWN0b3JzIChhbmQgdGhlaXIgaW5pdGlhbGl6ZSBtZXRob2RzKQorICBhY2NlcHQgbmV3IGFyZ3VtZW50cyBmb3IgbGluZSBhbmQgY29sdW1uLiAgU2V2ZXJhbCBpc3N1ZXMgaW4gdGhlCisgIGRvY3VtZW50YXRpb24gd2VyZSBmaXhlZC4KKworKiogbGlieSBpcyBubyBsb25nZXIgYXNraW5nIGZvciAicnBsX2ZwcmludGYiIG9uIHNvbWUgcGxhdGZvcm1zLgorCisqKiBDaGFuZ2VzIGluIHRoZSBtYW51YWw6CisKKyoqKiAlcHJpbnRlciBpcyBkb2N1bWVudGVkCisKKyAgVGhlICIlcHJpbnRlciIgZGlyZWN0aXZlLCBzdXBwb3J0ZWQgc2luY2UgYXQgbGVhc3QgQmlzb24gMS41MCwgaXMgZmluYWxseQorICBkb2N1bWVudGVkLiAgVGhlICJtZmNhbGMiIGV4YW1wbGUgaXMgZXh0ZW5kZWQgdG8gZGVtb25zdHJhdGUgaXQuCisKKyAgRm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIEMgc2tlbGV0b25zLCB0aGUgQysrIHBhcnNlcnMgbm93IGFsc28gc3VwcG9ydAorICAieXlvdXRwdXQiIChhcyBhbiBhbGlhcyB0byAiZGVidWdfc3RyZWFtICgpIikuCisKKyoqKiBTZXZlcmFsIGltcHJvdmVtZW50cyBoYXZlIGJlZW4gbWFkZToKKworICBUaGUgbGF5b3V0IGZvciBncmFtbWFyIGV4Y2VycHRzIHdhcyBjaGFuZ2VkIHRvIGEgbW9yZSBjb21wYWN0IHNjaGVtZS4KKyAgTmFtZWQgcmVmZXJlbmNlcyBhcmUgbW90aXZhdGVkLiAgVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBhdXRvbWF0b24KKyAgZGVzY3JpcHRpb24gZmlsZSAoKi5vdXRwdXQpIGlzIHVwZGF0ZWQgdG8gdGhlIGN1cnJlbnQgZm9ybWF0LiAgSW5jb3JyZWN0CisgIGluZGV4IGVudHJpZXMgd2VyZSBmaXhlZC4gIFNvbWUgb3RoZXIgZXJyb3JzIHdlcmUgZml4ZWQuCisKKyoqIEJ1aWxkaW5nIGJpc29uOgorCisqKiogQ29uZmxpY3RpbmcgcHJvdG90eXBlcyB3aXRoIHJlY2VudC9tb2RpZmllZCBGbGV4LgorCisgIEZpeGVkIGJ1aWxkIHByb2JsZW1zIHdpdGggdGhlIGN1cnJlbnQsIHVucmVsZWFzZWQsIHZlcnNpb24gb2YgRmxleCwgYW5kCisgIHNvbWUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgMi41LjM1LCB3aGljaCBoYXZlIG1vZGlmaWVkIGZ1bmN0aW9uIHByb3RvdHlwZXMuCisKKyoqKiBXYXJuaW5ncyBkdXJpbmcgdGhlIGJ1aWxkIHByb2NlZHVyZSBoYXZlIGJlZW4gZWxpbWluYXRlZC4KKworKioqIFNldmVyYWwgcG9ydGFiaWxpdHkgcHJvYmxlbXMgaW4gdGhlIHRlc3Qgc3VpdGUgaGF2ZSBiZWVuIGZpeGVkOgorCisgIFRoaXMgaW5jbHVkZXMgd2FybmluZ3Mgd2l0aCBzb21lIGNvbXBpbGVycywgdW5leHBlY3RlZCBiZWhhdmlvciBvZiB0b29scworICBzdWNoIGFzIGRpZmYsIHdhcm5pbmcgbWVzc2FnZXMgZnJvbSB0aGUgdGVzdCBzdWl0ZSBpdHNlbGYsIGV0Yy4KKworKioqIFRoZSBpbnN0YWxsLXBkZiB0YXJnZXQgd29ya3MgcHJvcGVybHk6CisKKyAgUnVubmluZyAibWFrZSBpbnN0YWxsLXBkZiIgKG9yIC1kdmksIC1odG1sLCAtaW5mbywgYW5kIC1wcykgbm8gbG9uZ2VyCisgIGhhbHRzIGluIHRoZSBtaWRkbGUgb2YgaXRzIGNvdXJzZS4KKworKiBDaGFuZ2VzIGluIHZlcnNpb24gMi41ICgyMDExLTA1LTE0KToKKworKiogR3JhbW1hciBzeW1ib2wgbmFtZXMgY2FuIG5vdyBjb250YWluIG5vbi1pbml0aWFsIGRhc2hlczoKKworICBDb25zaXN0ZW50bHkgd2l0aCBkaXJlY3RpdmVzIChzdWNoIGFzICVlcnJvci12ZXJib3NlKSBhbmQgd2l0aAorICAlZGVmaW5lIHZhcmlhYmxlcyAoZS5nLiBwdXNoLXB1bGwpLCBncmFtbWFyIHN5bWJvbCBuYW1lcyBtYXkgY29udGFpbgorICBkYXNoZXMgaW4gYW55IHBvc2l0aW9uIGV4Y2VwdCB0aGUgYmVnaW5uaW5nLiAgVGhpcyBpcyBhIEdOVQorICBleHRlbnNpb24gb3ZlciBQT1NJWCBZYWNjLiAgVGh1cywgdXNlIG9mIHRoaXMgZXh0ZW5zaW9uIGlzIHJlcG9ydGVkCisgIGJ5IC1XeWFjYyBhbmQgcmVqZWN0ZWQgaW4gWWFjYyBtb2RlICgtLXlhY2MpLgorCisqKiBOYW1lZCByZWZlcmVuY2VzOgorCisgIEhpc3RvcmljYWxseSwgWWFjYyBhbmQgQmlzb24gaGF2ZSBzdXBwb3J0ZWQgcG9zaXRpb25hbCByZWZlcmVuY2VzCisgICgkbiwgJCQpIHRvIGFsbG93IGFjY2VzcyB0byBzeW1ib2wgdmFsdWVzIGZyb20gaW5zaWRlIG9mIHNlbWFudGljCisgIGFjdGlvbnMgY29kZS4KKworICBTdGFydGluZyBmcm9tIHRoaXMgdmVyc2lvbiwgQmlzb24gY2FuIGFsc28gYWNjZXB0IG5hbWVkIHJlZmVyZW5jZXMuCisgIFdoZW4gbm8gYW1iaWd1aXR5IGlzIHBvc3NpYmxlLCBvcmlnaW5hbCBzeW1ib2wgbmFtZXMgbWF5IGJlIHVzZWQKKyAgYXMgbmFtZWQgcmVmZXJlbmNlczoKKworICAgIGlmX3N0bXQgOiAiaWYiIGNvbmRfZXhwciAidGhlbiIgdGhlbl9zdG10ICc7JworICAgIHsgJGlmX3N0bXQgPSBta19pZl9zdG10KCRjb25kX2V4cHIsICR0aGVuX3N0bXQpOyB9CisKKyAgSW4gdGhlIG1vcmUgY29tbW9uIGNhc2UsIGV4cGxpY2l0IG5hbWVzIG1heSBiZSBkZWNsYXJlZDoKKworICAgIHN0bXRbcmVzXSA6ICJpZiIgZXhwcltjb25kXSAidGhlbiIgc3RtdFt0aGVuXSAiZWxzZSIgc3RtdFtlbHNlXSAnOycKKyAgICB7ICRyZXMgPSBta19pZl9zdG10KCRjb25kLCAkdGhlbiwgJGVsc2UpOyB9CisKKyAgTG9jYXRpb24gaW5mb3JtYXRpb24gaXMgYWxzbyBhY2Nlc3NpYmxlIHVzaW5nIEBuYW1lIHN5bnRheC4gIFdoZW4KKyAgYWNjZXNzaW5nIHN5bWJvbCBuYW1lcyBjb250YWluaW5nIGRvdHMgb3IgZGFzaGVzLCBleHBsaWNpdCBicmFja2V0aW5nCisgICgkW3N5bS4xXSkgbXVzdCBiZSB1c2VkLgorCisgIFRoZXNlIGZlYXR1cmVzIGFyZSBleHBlcmltZW50YWwgaW4gdGhpcyB2ZXJzaW9uLiAgTW9yZSB1c2VyIGZlZWRiYWNrCisgIHdpbGwgaGVscCB0byBzdGFiaWxpemUgdGhlbS4KKworKiogSUVMUigxKSBhbmQgY2Fub25pY2FsIExSKDEpOgorCisgIElFTFIoMSkgaXMgYSBtaW5pbWFsIExSKDEpIHBhcnNlciB0YWJsZSBnZW5lcmF0aW9uIGFsZ29yaXRobS4gIFRoYXQKKyAgaXMsIGdpdmVuIGFueSBjb250ZXh0LWZyZWUgZ3JhbW1hciwgSUVMUigxKSBnZW5lcmF0ZXMgcGFyc2VyIHRhYmxlcworICB3aXRoIHRoZSBmdWxsIGxhbmd1YWdlLXJlY29nbml0aW9uIHBvd2VyIG9mIGNhbm9uaWNhbCBMUigxKSBidXQgd2l0aAorICBuZWFybHkgdGhlIHNhbWUgbnVtYmVyIG9mIHBhcnNlciBzdGF0ZXMgYXMgTEFMUigxKS4gIFRoaXMgcmVkdWN0aW9uCisgIGluIHBhcnNlciBzdGF0ZXMgaXMgb2Z0ZW4gYW4gb3JkZXIgb2YgbWFnbml0dWRlLiAgTW9yZSBpbXBvcnRhbnRseSwKKyAgYmVjYXVzZSBjYW5vbmljYWwgTFIoMSkncyBleHRyYSBwYXJzZXIgc3RhdGVzIG1heSBjb250YWluIGR1cGxpY2F0ZQorICBjb25mbGljdHMgaW4gdGhlIGNhc2Ugb2Ygbm9uLUxSKDEpIGdyYW1tYXJzLCB0aGUgbnVtYmVyIG9mIGNvbmZsaWN0cworICBmb3IgSUVMUigxKSBpcyBvZnRlbiBhbiBvcmRlciBvZiBtYWduaXR1ZGUgbGVzcyBhcyB3ZWxsLiAgVGhpcyBjYW4KKyAgc2lnbmlmaWNhbnRseSByZWR1Y2UgdGhlIGNvbXBsZXhpdHkgb2YgZGV2ZWxvcGluZyBvZiBhIGdyYW1tYXIuCisKKyAgQmlzb24gY2FuIG5vdyBnZW5lcmF0ZSBJRUxSKDEpIGFuZCBjYW5vbmljYWwgTFIoMSkgcGFyc2VyIHRhYmxlcyBpbgorICBwbGFjZSBvZiBpdHMgdHJhZGl0aW9uYWwgTEFMUigxKSBwYXJzZXIgdGFibGVzLCB3aGljaCByZW1haW4gdGhlCisgIGRlZmF1bHQuICBZb3UgY2FuIHNwZWNpZnkgdGhlIHR5cGUgb2YgcGFyc2VyIHRhYmxlcyBpbiB0aGUgZ3JhbW1hcgorICBmaWxlIHdpdGggdGhlc2UgZGlyZWN0aXZlczoKKworICAgICVkZWZpbmUgbHIudHlwZSBsYWxyCisgICAgJWRlZmluZSBsci50eXBlIGllbHIKKyAgICAlZGVmaW5lIGxyLnR5cGUgY2Fub25pY2FsLWxyCisKKyAgVGhlIGRlZmF1bHQtcmVkdWN0aW9uIG9wdGltaXphdGlvbiBpbiB0aGUgcGFyc2VyIHRhYmxlcyBjYW4gYWxzbyBiZQorICBhZGp1c3RlZCB1c2luZyAiJWRlZmluZSBsci5kZWZhdWx0LXJlZHVjdGlvbnMiLiAgRm9yIGRldGFpbHMgb24gYm90aAorICBvZiB0aGVzZSBmZWF0dXJlcywgc2VlIHRoZSBuZXcgc2VjdGlvbiAiVHVuaW5nIExSIiBpbiB0aGUgQmlzb24KKyAgbWFudWFsLgorCisgIFRoZXNlIGZlYXR1cmVzIGFyZSBleHBlcmltZW50YWwuICBNb3JlIHVzZXIgZmVlZGJhY2sgd2lsbCBoZWxwIHRvCisgIHN0YWJpbGl6ZSB0aGVtLgorCisqKiBMQUMgKExvb2thaGVhZCBDb3JyZWN0aW9uKSBmb3Igc3ludGF4IGVycm9yIGhhbmRsaW5nOgorCisgIENhbm9uaWNhbCBMUiwgSUVMUiwgYW5kIExBTFIgY2FuIHN1ZmZlciBmcm9tIGEgY291cGxlIG9mIHByb2JsZW1zCisgIHVwb24gZW5jb3VudGVyaW5nIGEgc3ludGF4IGVycm9yLiAgRmlyc3QsIHRoZSBwYXJzZXIgbWlnaHQgcGVyZm9ybQorICBhZGRpdGlvbmFsIHBhcnNlciBzdGFjayByZWR1Y3Rpb25zIGJlZm9yZSBkaXNjb3ZlcmluZyB0aGUgc3ludGF4CisgIGVycm9yLiAgU3VjaCByZWR1Y3Rpb25zIGNhbiBwZXJmb3JtIHVzZXIgc2VtYW50aWMgYWN0aW9ucyB0aGF0IGFyZQorICB1bmV4cGVjdGVkIGJlY2F1c2UgdGhleSBhcmUgYmFzZWQgb24gYW4gaW52YWxpZCB0b2tlbiwgYW5kIHRoZXkKKyAgY2F1c2UgZXJyb3IgcmVjb3ZlcnkgdG8gYmVnaW4gaW4gYSBkaWZmZXJlbnQgc3ludGFjdGljIGNvbnRleHQgdGhhbgorICB0aGUgb25lIGluIHdoaWNoIHRoZSBpbnZhbGlkIHRva2VuIHdhcyBlbmNvdW50ZXJlZC4gIFNlY29uZCwgd2hlbgorICB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzIGFyZSBlbmFibGVkICh3aXRoICVlcnJvci12ZXJib3NlIG9yIHRoZQorICBvYnNvbGV0ZSAiI2RlZmluZSBZWUVSUk9SX1ZFUkJPU0UiKSwgdGhlIGV4cGVjdGVkIHRva2VuIGxpc3QgaW4gdGhlCisgIHN5bnRheCBlcnJvciBtZXNzYWdlIGNhbiBib3RoIGNvbnRhaW4gaW52YWxpZCB0b2tlbnMgYW5kIG9taXQgdmFsaWQKKyAgdG9rZW5zLgorCisgIFRoZSBjdWxwcml0cyBmb3IgdGhlIGFib3ZlIHByb2JsZW1zIGFyZSAlbm9uYXNzb2MsIGRlZmF1bHQKKyAgcmVkdWN0aW9ucyBpbiBpbmNvbnNpc3RlbnQgc3RhdGVzLCBhbmQgcGFyc2VyIHN0YXRlIG1lcmdpbmcuICBUaHVzLAorICBJRUxSIGFuZCBMQUxSIHN1ZmZlciB0aGUgbW9zdC4gIENhbm9uaWNhbCBMUiBjYW4gc3VmZmVyIG9ubHkgaWYKKyAgJW5vbmFzc29jIGlzIHVzZWQgb3IgaWYgZGVmYXVsdCByZWR1Y3Rpb25zIGFyZSBlbmFibGVkIGZvcgorICBpbmNvbnNpc3RlbnQgc3RhdGVzLgorCisgIExBQyBpcyBhIG5ldyBtZWNoYW5pc20gd2l0aGluIHRoZSBwYXJzaW5nIGFsZ29yaXRobSB0aGF0IHNvbHZlcworICB0aGVzZSBwcm9ibGVtcyBmb3IgY2Fub25pY2FsIExSLCBJRUxSLCBhbmQgTEFMUiB3aXRob3V0IHNhY3JpZmljaW5nCisgICVub25hc3NvYywgZGVmYXVsdCByZWR1Y3Rpb25zLCBvciBzdGF0ZSBtZXJnaW5nLiAgV2hlbiBMQUMgaXMgaW4KKyAgdXNlLCBjYW5vbmljYWwgTFIgYW5kIElFTFIgYmVoYXZlIGFsbW9zdCBleGFjdGx5IHRoZSBzYW1lIGZvciBib3RoCisgIHN5bnRhY3RpY2FsbHkgYWNjZXB0YWJsZSBhbmQgc3ludGFjdGljYWxseSB1bmFjY2VwdGFibGUgaW5wdXQuCisgIFdoaWxlIExBTFIgc3RpbGwgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZnVsbCBsYW5ndWFnZS1yZWNvZ25pdGlvbgorICBwb3dlciBvZiBjYW5vbmljYWwgTFIgYW5kIElFTFIsIExBQyBhdCBsZWFzdCBlbmFibGVzIExBTFIncyBzeW50YXgKKyAgZXJyb3IgaGFuZGxpbmcgdG8gY29ycmVjdGx5IHJlZmxlY3QgTEFMUidzIGxhbmd1YWdlLXJlY29nbml0aW9uCisgIHBvd2VyLgorCisgIEN1cnJlbnRseSwgTEFDIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBkZXRlcm1pbmlzdGljIHBhcnNlcnMgaW4gQy4KKyAgWW91IGNhbiBlbmFibGUgTEFDIHdpdGggdGhlIGZvbGxvd2luZyBkaXJlY3RpdmU6CisKKyAgICAlZGVmaW5lIHBhcnNlLmxhYyBmdWxsCisKKyAgU2VlIHRoZSBuZXcgc2VjdGlvbiAiTEFDIiBpbiB0aGUgQmlzb24gbWFudWFsIGZvciBhZGRpdGlvbmFsCisgIGRldGFpbHMgaW5jbHVkaW5nIGEgZmV3IGNhdmVhdHMuCisKKyAgTEFDIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlLiAgTW9yZSB1c2VyIGZlZWRiYWNrIHdpbGwgaGVscCB0bworICBzdGFiaWxpemUgaXQuCisKKyoqICVkZWZpbmUgaW1wcm92ZW1lbnRzOgorCisqKiogQ2FuIG5vdyBiZSBpbnZva2VkIHZpYSB0aGUgY29tbWFuZCBsaW5lOgorCisgIEVhY2ggb2YgdGhlc2UgY29tbWFuZC1saW5lIG9wdGlvbnMKKworICAgIC1EIE5BTUVbPVZBTFVFXQorICAgIC0tZGVmaW5lPU5BTUVbPVZBTFVFXQorCisgICAgLUYgTkFNRVs9VkFMVUVdCisgICAgLS1mb3JjZS1kZWZpbmU9TkFNRVs9VkFMVUVdCisKKyAgaXMgZXF1aXZhbGVudCB0byB0aGlzIGdyYW1tYXIgZmlsZSBkZWNsYXJhdGlvbgorCisgICAgJWRlZmluZSBOQU1FIFsiVkFMVUUiXQorCisgIGV4Y2VwdCB0aGF0IHRoZSBtYW5uZXIgaW4gd2hpY2ggQmlzb24gcHJvY2Vzc2VzIG11bHRpcGxlIGRlZmluaXRpb25zCisgIGZvciB0aGUgc2FtZSBOQU1FIGRpZmZlcnMuICBNb3N0IGltcG9ydGFudGx5LCAtRiBhbmQgLS1mb3JjZS1kZWZpbmUKKyAgcXVpZXRseSBvdmVycmlkZSAlZGVmaW5lLCBidXQgLUQgYW5kIC0tZGVmaW5lIGRvIG5vdC4gIEZvciBmdXJ0aGVyCisgIGRldGFpbHMsIHNlZSB0aGUgc2VjdGlvbiAiQmlzb24gT3B0aW9ucyIgaW4gdGhlIEJpc29uIG1hbnVhbC4KKworKioqIFZhcmlhYmxlcyByZW5hbWVkOgorCisgIFRoZSBmb2xsb3dpbmcgJWRlZmluZSB2YXJpYWJsZXMKKworICAgIGFwaS5wdXNoX3B1bGwKKyAgICBsci5rZWVwX3VucmVhY2hhYmxlX3N0YXRlcworCisgIGhhdmUgYmVlbiByZW5hbWVkIHRvCisKKyAgICBhcGkucHVzaC1wdWxsCisgICAgbHIua2VlcC11bnJlYWNoYWJsZS1zdGF0ZXMKKworICBUaGUgb2xkIG5hbWVzIGFyZSBub3cgZGVwcmVjYXRlZCBidXQgd2lsbCBiZSBtYWludGFpbmVkIGluZGVmaW5pdGVseQorICBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKworKioqIFZhbHVlcyBubyBsb25nZXIgbmVlZCB0byBiZSBxdW90ZWQgaW4gdGhlIGdyYW1tYXIgZmlsZToKKworICBJZiBhICVkZWZpbmUgdmFsdWUgaXMgYW4gaWRlbnRpZmllciwgaXQgbm8gbG9uZ2VyIG5lZWRzIHRvIGJlIHBsYWNlZAorICB3aXRoaW4gcXVvdGF0aW9ucyBtYXJrcy4gIEZvciBleGFtcGxlLAorCisgICAgJWRlZmluZSBhcGkucHVzaC1wdWxsICJwdXNoIgorCisgIGNhbiBiZSByZXdyaXR0ZW4gYXMKKworICAgICVkZWZpbmUgYXBpLnB1c2gtcHVsbCBwdXNoCisKKyoqKiBVbnJlY29nbml6ZWQgdmFyaWFibGVzIGFyZSBub3cgZXJyb3JzIG5vdCB3YXJuaW5ncy4KKworKioqIE11bHRpcGxlIGludm9jYXRpb25zIGZvciBhbnkgdmFyaWFibGUgaXMgbm93IGFuIGVycm9yIG5vdCBhIHdhcm5pbmcuCisKKyoqIFVucmVjb2duaXplZCAlY29kZSBxdWFsaWZpZXJzIGFyZSBub3cgZXJyb3JzIG5vdCB3YXJuaW5ncy4KKworKiogQ2hhcmFjdGVyIGxpdGVyYWxzIG5vdCBvZiBsZW5ndGggb25lOgorCisgIFByZXZpb3VzbHksIEJpc29uIHF1aWV0bHkgY29udmVydGVkIGFsbCBjaGFyYWN0ZXIgbGl0ZXJhbHMgdG8gbGVuZ3RoCisgIG9uZS4gIEZvciBleGFtcGxlLCB3aXRob3V0IHdhcm5pbmcsIEJpc29uIGludGVycHJldGVkIHRoZSBvcGVyYXRvcnMgaW4KKyAgdGhlIGZvbGxvd2luZyBncmFtbWFyIHRvIGJlIHRoZSBzYW1lIHRva2VuOgorCisgICAgZXhwOiBleHAgJysrJworICAgICAgIHwgZXhwICcrJyBleHAKKyAgICAgICA7CisKKyAgQmlzb24gbm93IHdhcm5zIHdoZW4gYSBjaGFyYWN0ZXIgbGl0ZXJhbCBpcyBub3Qgb2YgbGVuZ3RoIG9uZS4gIEluCisgIHNvbWUgZnV0dXJlIHJlbGVhc2UsIEJpc29uIHdpbGwgc3RhcnQgcmVwb3J0aW5nIGFuIGVycm9yIGluc3RlYWQuCisKKyoqIERlc3RydWN0b3IgY2FsbHMgZml4ZWQgZm9yIGxvb2thaGVhZHMgYWx0ZXJlZCBpbiBzZW1hbnRpYyBhY3Rpb25zOgorCisgIFByZXZpb3VzbHkgZm9yIGRldGVybWluaXN0aWMgcGFyc2VycyBpbiBDLCBpZiBhIHVzZXIgc2VtYW50aWMgYWN0aW9uCisgIGFsdGVyZWQgeXljaGFyLCB0aGUgcGFyc2VyIGluIHNvbWUgY2FzZXMgdXNlZCB0aGUgb2xkIHl5Y2hhciB2YWx1ZSB0bworICBkZXRlcm1pbmUgd2hpY2ggZGVzdHJ1Y3RvciB0byBjYWxsIGZvciB0aGUgbG9va2FoZWFkIHVwb24gYSBzeW50YXgKKyAgZXJyb3Igb3IgdXBvbiBwYXJzZXIgcmV0dXJuLiAgVGhpcyBidWcgaGFzIGJlZW4gZml4ZWQuCisKKyoqIEMrKyBwYXJzZXJzIHVzZSBZWVJIU0xPQzoKKworICBTaW1pbGFybHkgdG8gdGhlIEMgcGFyc2VycywgdGhlIEMrKyBwYXJzZXJzIG5vdyBkZWZpbmUgdGhlIFlZUkhTTE9DCisgIG1hY3JvIGFuZCB1c2UgaXQgaW4gdGhlIGRlZmF1bHQgWVlMTE9DX0RFRkFVTFQuICBZb3UgYXJlIGVuY291cmFnZWQKKyAgdG8gdXNlIGl0LiAgSWYsIGZvciBpbnN0YW5jZSwgeW91ciBsb2NhdGlvbiBzdHJ1Y3R1cmUgaGFzICJmaXJzdCIKKyAgYW5kICJsYXN0IiBtZW1iZXJzLCBpbnN0ZWFkIG9mCisKKyAgICAjIGRlZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAoQ3VycmVudCkuZmlyc3QgPSAoUmhzKVsxXS5sb2NhdGlvbi5maXJzdDsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKEN1cnJlbnQpLmxhc3QgID0gKFJocylbTl0ubG9jYXRpb24ubGFzdDsgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIChDdXJyZW50KS5maXJzdCA9IChDdXJyZW50KS5sYXN0ID0gKFJocylbMF0ubG9jYXRpb24ubGFzdDsgICBcCisgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgd2hpbGUgKGZhbHNlKQorCisgIHVzZToKKworICAgICMgZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIChDdXJyZW50KS5maXJzdCA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0OyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAoQ3VycmVudCkubGFzdCAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0OyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKEN1cnJlbnQpLmZpcnN0ID0gKEN1cnJlbnQpLmxhc3QgPSBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0OyAgIFwKKyAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB3aGlsZSAoZmFsc2UpCisKKyoqIFlZTExPQ19ERUZBVUxUIGluIEMrKzoKKworICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBZWUxMT0NfREVGQVVMVCB1c2VkIHRvIGJlIGlzc3VlZCBpbgorICB0aGUgaGVhZGVyIGZpbGUuICBJdCBpcyBub3cgb3V0cHV0IGluIHRoZSBpbXBsZW1lbnRhdGlvbiBmaWxlLCBhZnRlcgorICB0aGUgdXNlciAlY29kZSBzZWN0aW9ucyBzbyB0aGF0IGl0cyAjaWZuZGVmIGd1YXJkIGRvZXMgbm90IHRyeSB0bworICBvdmVycmlkZSB0aGUgdXNlcidzIFlZTExPQ19ERUZBVUxUIGlmIHByb3ZpZGVkLgorCisqKiBZWUZBSUwgbm93IHByb2R1Y2VzIHdhcm5pbmdzIGFuZCBKYXZhIHBhcnNlcnMgbm8gbG9uZ2VyIGltcGxlbWVudCBpdDoKKworICBZWUZBSUwgaGFzIGV4aXN0ZWQgZm9yIG1hbnkgeWVhcnMgYXMgYW4gdW5kb2N1bWVudGVkIGZlYXR1cmUgb2YKKyAgZGV0ZXJtaW5pc3RpYyBwYXJzZXJzIGluIEMgZ2VuZXJhdGVkIGJ5IEJpc29uLiAgTW9yZSByZWNlbnRseSwgaXQgd2FzCisgIGEgZG9jdW1lbnRlZCBmZWF0dXJlIG9mIEJpc29uJ3MgZXhwZXJpbWVudGFsIEphdmEgcGFyc2Vycy4gIEFzCisgIHByb21pc2VkIGluIEJpc29uIDIuNC4yJ3MgTkVXUyBlbnRyeSwgYW55IGFwcGVhcmFuY2Ugb2YgWVlGQUlMIGluIGEKKyAgc2VtYW50aWMgYWN0aW9uIG5vdyBwcm9kdWNlcyBhIGRlcHJlY2F0aW9uIHdhcm5pbmcsIGFuZCBKYXZhIHBhcnNlcnMKKyAgbm8gbG9uZ2VyIGltcGxlbWVudCBZWUZBSUwgYXQgYWxsLiAgRm9yIGZ1cnRoZXIgZGV0YWlscywgaW5jbHVkaW5nIGEKKyAgZGlzY3Vzc2lvbiBvZiBob3cgdG8gc3VwcHJlc3MgQyBwcmVwcm9jZXNzb3Igd2FybmluZ3MgYWJvdXQgWVlGQUlMCisgIGJlaW5nIHVudXNlZCwgc2VlIHRoZSBCaXNvbiAyLjQuMiBORVdTIGVudHJ5LgorCisqKiBUZW1wb3JhcnkgaGFjayBmb3IgYWRkaW5nIGEgc2VtaWNvbG9uIHRvIHRoZSB1c2VyIGFjdGlvbjoKKworICBQcmV2aW91c2x5LCBCaXNvbiBhcHBlbmRlZCBhIHNlbWljb2xvbiB0byBldmVyeSB1c2VyIGFjdGlvbiBmb3IKKyAgcmVkdWN0aW9ucyB3aGVuIHRoZSBvdXRwdXQgbGFuZ3VhZ2UgZGVmYXVsdGVkIHRvIEMgKHNwZWNpZmljYWxseSwgd2hlbgorICBuZWl0aGVyICV5YWNjLCAlbGFuZ3VhZ2UsICVza2VsZXRvbiwgb3IgZXF1aXZhbGVudCBjb21tYW5kLWxpbmUKKyAgb3B0aW9ucyB3ZXJlIHNwZWNpZmllZCkuICBUaGlzIGFsbG93ZWQgYWN0aW9ucyBzdWNoIGFzCisKKyAgICBleHA6IGV4cCAiKyIgZXhwIHsgJCQgPSAkMSArICQzIH07CisKKyAgaW5zdGVhZCBvZgorCisgICAgZXhwOiBleHAgIisiIGV4cCB7ICQkID0gJDEgKyAkMzsgfTsKKworICBBcyBhIGZpcnN0IHN0ZXAgaW4gcmVtb3ZpbmcgdGhpcyBtaXNmZWF0dXJlLCBCaXNvbiBub3cgaXNzdWVzIGEKKyAgd2FybmluZyB3aGVuIGl0IGFwcGVuZHMgYSBzZW1pY29sb24uICBNb3Jlb3ZlciwgaW4gY2FzZXMgd2hlcmUgQmlzb24KKyAgY2Fubm90IGVhc2lseSBkZXRlcm1pbmUgd2hldGhlciBhIHNlbWljb2xvbiBpcyBuZWVkZWQgKGZvciBleGFtcGxlLCBhbgorICBhY3Rpb24gZW5kaW5nIHdpdGggYSBjcHAgZGlyZWN0aXZlIG9yIGEgYnJhY2VkIGNvbXBvdW5kIGluaXRpYWxpemVyKSwKKyAgaXQgbm8gbG9uZ2VyIGFwcGVuZHMgb25lLiAgVGh1cywgdGhlIEMgY29tcGlsZXIgbWlnaHQgbm93IGNvbXBsYWluCisgIGFib3V0IGEgbWlzc2luZyBzZW1pY29sb24gd2hlcmUgaXQgZGlkIG5vdCBiZWZvcmUuICBGdXR1cmUgcmVsZWFzZXMgb2YKKyAgQmlzb24gd2lsbCBjZWFzZSB0byBhcHBlbmQgc2VtaWNvbG9ucyBlbnRpcmVseS4KKworKiogVmVyYm9zZSBzeW50YXggZXJyb3IgbWVzc2FnZSBmaXhlczoKKworICBXaGVuICVlcnJvci12ZXJib3NlIG9yIHRoZSBvYnNvbGV0ZSAiI2RlZmluZSBZWUVSUk9SX1ZFUkJPU0UiIGlzCisgIHNwZWNpZmllZCwgc3ludGF4IGVycm9yIG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IHRoZSBnZW5lcmF0ZWQgcGFyc2VyCisgIGluY2x1ZGUgdGhlIHVuZXhwZWN0ZWQgdG9rZW4gYXMgd2VsbCBhcyBhIGxpc3Qgb2YgZXhwZWN0ZWQgdG9rZW5zLgorICBUaGUgZWZmZWN0IG9mICVub25hc3NvYyBvbiB0aGVzZSB2ZXJib3NlIG1lc3NhZ2VzIGhhcyBiZWVuIGNvcnJlY3RlZAorICBpbiB0d28gd2F5cywgYnV0IGEgbW9yZSBjb21wbGV0ZSBmaXggcmVxdWlyZXMgTEFDLCBkZXNjcmliZWQgYWJvdmU6CisKKyoqKiBXaGVuICVub25hc3NvYyBpcyB1c2VkLCB0aGVyZSBjYW4gZXhpc3QgcGFyc2VyIHN0YXRlcyB0aGF0IGFjY2VwdCBubworICAgIHRva2VucywgYW5kIHNvIHRoZSBwYXJzZXIgZG9lcyBub3QgYWx3YXlzIHJlcXVpcmUgYSBsb29rYWhlYWQgdG9rZW4KKyAgICBpbiBvcmRlciB0byBkZXRlY3QgYSBzeW50YXggZXJyb3IuICBCZWNhdXNlIG5vIHVuZXhwZWN0ZWQgdG9rZW4gb3IKKyAgICBleHBlY3RlZCB0b2tlbnMgY2FuIHRoZW4gYmUgcmVwb3J0ZWQsIHRoZSB2ZXJib3NlIHN5bnRheCBlcnJvcgorICAgIG1lc3NhZ2UgZGVzY3JpYmVkIGFib3ZlIGlzIHN1cHByZXNzZWQsIGFuZCB0aGUgcGFyc2VyIGluc3RlYWQKKyAgICByZXBvcnRzIHRoZSBzaW1wbGVyIG1lc3NhZ2UsICJzeW50YXggZXJyb3IiLiAgUHJldmlvdXNseSwgdGhpcworICAgIHN1cHByZXNzaW9uIHdhcyBzb21ldGltZXMgZXJyb25lb3VzbHkgdHJpZ2dlcmVkIGJ5ICVub25hc3NvYyB3aGVuIGEKKyAgICBsb29rYWhlYWQgd2FzIGFjdHVhbGx5IHJlcXVpcmVkLiAgTm93IHZlcmJvc2UgbWVzc2FnZXMgYXJlCisgICAgc3VwcHJlc3NlZCBvbmx5IHdoZW4gYWxsIHByZXZpb3VzIGxvb2thaGVhZHMgaGF2ZSBhbHJlYWR5IGJlZW4KKyAgICBzaGlmdGVkIG9yIGRpc2NhcmRlZC4KKworKioqIFByZXZpb3VzbHksIHRoZSBsaXN0IG9mIGV4cGVjdGVkIHRva2VucyBlcnJvbmVvdXNseSBpbmNsdWRlZCB0b2tlbnMKKyAgICB0aGF0IHdvdWxkIGFjdHVhbGx5IGluZHVjZSBhIHN5bnRheCBlcnJvciBiZWNhdXNlIGNvbmZsaWN0cyBmb3IgdGhlbQorICAgIHdlcmUgcmVzb2x2ZWQgd2l0aCAlbm9uYXNzb2MgaW4gdGhlIGN1cnJlbnQgcGFyc2VyIHN0YXRlLiAgU3VjaAorICAgIHRva2VucyBhcmUgbm93IHByb3Blcmx5IG9taXR0ZWQgZnJvbSB0aGUgbGlzdC4KKworKioqIEV4cGVjdGVkIHRva2VuIGxpc3RzIGFyZSBzdGlsbCBvZnRlbiB3cm9uZyBkdWUgdG8gc3RhdGUgbWVyZ2luZworICAgIChmcm9tIExBTFIgb3IgSUVMUikgYW5kIGRlZmF1bHQgcmVkdWN0aW9ucywgd2hpY2ggY2FuIGJvdGggYWRkCisgICAgaW52YWxpZCB0b2tlbnMgYW5kIHN1YnRyYWN0IHZhbGlkIHRva2Vucy4gIENhbm9uaWNhbCBMUiBhbG1vc3QKKyAgICBjb21wbGV0ZWx5IGZpeGVzIHRoaXMgcHJvYmxlbSBieSBlbGltaW5hdGluZyBzdGF0ZSBtZXJnaW5nIGFuZAorICAgIGRlZmF1bHQgcmVkdWN0aW9ucy4gIEhvd2V2ZXIsIHRoZXJlIGlzIG9uZSBtaW5vciBwcm9ibGVtIGxlZnQgZXZlbgorICAgIHdoZW4gdXNpbmcgY2Fub25pY2FsIExSIGFuZCBldmVuIGFmdGVyIHRoZSBmaXhlcyBhYm92ZS4gIFRoYXQgaXMsCisgICAgaWYgdGhlIHJlc29sdXRpb24gb2YgYSBjb25mbGljdCB3aXRoICVub25hc3NvYyBhcHBlYXJzIGluIGEgbGF0ZXIKKyAgICBwYXJzZXIgc3RhdGUgdGhhbiB0aGUgb25lIGF0IHdoaWNoIHNvbWUgc3ludGF4IGVycm9yIGlzCisgICAgZGlzY292ZXJlZCwgdGhlIGNvbmZsaWN0ZWQgdG9rZW4gaXMgc3RpbGwgZXJyb25lb3VzbHkgaW5jbHVkZWQgaW4KKyAgICB0aGUgZXhwZWN0ZWQgdG9rZW4gbGlzdC4gIEJpc29uJ3MgbmV3IExBQyBpbXBsZW1lbnRhdGlvbiwKKyAgICBkZXNjcmliZWQgYWJvdmUsIGVsaW1pbmF0ZXMgdGhpcyBwcm9ibGVtIGFuZCB0aGUgbmVlZCBmb3IKKyAgICBjYW5vbmljYWwgTFIuICBIb3dldmVyLCBMQUMgaXMgc3RpbGwgZXhwZXJpbWVudGFsIGFuZCBpcyBkaXNhYmxlZAorICAgIGJ5IGRlZmF1bHQuCisKKyoqIEphdmEgc2tlbGV0b24gZml4ZXM6CisKKyoqKiBBIGxvY2F0aW9uIGhhbmRsaW5nIGJ1ZyBoYXMgYmVlbiBmaXhlZC4KKworKioqIFRoZSB0b3AgZWxlbWVudCBvZiBlYWNoIG9mIHRoZSB2YWx1ZSBzdGFjayBhbmQgbG9jYXRpb24gc3RhY2sgaXMgbm93CisgICAgY2xlYXJlZCB3aGVuIHBvcHBlZCBzbyB0aGF0IGl0IGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZC4KKworKioqIFBhcnNlciB0cmFjZXMgbm93IHByaW50IHRoZSB0b3AgZWxlbWVudCBvZiB0aGUgc3RhY2suCisKKyoqIC1XLy0td2FybmluZ3MgZml4ZXM6CisKKyoqKiBCaXNvbiBub3cgcHJvcGVybHkgcmVjb2duaXplcyB0aGUgIm5vLSIgdmVyc2lvbnMgb2YgY2F0ZWdvcmllczoKKworICBGb3IgZXhhbXBsZSwgZ2l2ZW4gdGhlIGZvbGxvd2luZyBjb21tYW5kIGxpbmUsIEJpc29uIG5vdyBlbmFibGVzIGFsbAorICB3YXJuaW5ncyBleGNlcHQgd2FybmluZ3MgZm9yIGluY29tcGF0aWJpbGl0aWVzIHdpdGggUE9TSVggWWFjYzoKKworICAgIGJpc29uIC1XYWxsLG5vLXlhY2MgZ3JhbS55CisKKyoqKiBCaXNvbiBub3cgdHJlYXRzIFMvUiBhbmQgUi9SIGNvbmZsaWN0cyBsaWtlIG90aGVyIHdhcm5pbmdzOgorCisgIFByZXZpb3VzbHksIGNvbmZsaWN0IHJlcG9ydHMgd2VyZSBpbmRlcGVuZGVudCBvZiBCaXNvbidzIG5vcm1hbAorICB3YXJuaW5nIHN5c3RlbS4gIE5vdywgQmlzb24gcmVjb2duaXplcyB0aGUgd2FybmluZyBjYXRlZ29yaWVzCisgICJjb25mbGljdHMtc3IiIGFuZCAiY29uZmxpY3RzLXJyIi4gIFRoaXMgY2hhbmdlIGhhcyBpbXBvcnRhbnQKKyAgY29uc2VxdWVuY2VzIGZvciB0aGUgLVcgYW5kIC0td2FybmluZ3MgY29tbWFuZC1saW5lIG9wdGlvbnMuICBGb3IKKyAgZXhhbXBsZToKKworICAgIGJpc29uIC1Xbm8tY29uZmxpY3RzLXNyIGdyYW0ueSAgIyBTL1IgY29uZmxpY3RzIG5vdCByZXBvcnRlZAorICAgIGJpc29uIC1Xbm8tY29uZmxpY3RzLXJyIGdyYW0ueSAgIyBSL1IgY29uZmxpY3RzIG5vdCByZXBvcnRlZAorICAgIGJpc29uIC1Xbm9uZSAgICAgICAgICAgIGdyYW0ueSAgIyBubyBjb25mbGljdHMgYXJlIHJlcG9ydGVkCisgICAgYmlzb24gLVdlcnJvciAgICAgICAgICAgZ3JhbS55ICAjIGFueSBjb25mbGljdCBpcyBhbiBlcnJvcgorCisgIEhvd2V2ZXIsIGFzIGJlZm9yZSwgaWYgdGhlICVleHBlY3Qgb3IgJWV4cGVjdC1yciBkaXJlY3RpdmUgaXMKKyAgc3BlY2lmaWVkLCBhbiB1bmV4cGVjdGVkIG51bWJlciBvZiBjb25mbGljdHMgaXMgYW4gZXJyb3IsIGFuZCBhbgorICBleHBlY3RlZCBudW1iZXIgb2YgY29uZmxpY3RzIGlzIG5vdCByZXBvcnRlZCwgc28gLVcgYW5kIC0td2FybmluZworICB0aGVuIGhhdmUgbm8gZWZmZWN0IG9uIHRoZSBjb25mbGljdCByZXBvcnQuCisKKyoqKiBUaGUgIm5vbmUiIGNhdGVnb3J5IG5vIGxvbmdlciBkaXNhYmxlcyBhIHByZWNlZGluZyAiZXJyb3IiOgorCisgIEZvciBleGFtcGxlLCBmb3IgdGhlIGZvbGxvd2luZyBjb21tYW5kIGxpbmUsIEJpc29uIG5vdyByZXBvcnRzCisgIGVycm9ycyBpbnN0ZWFkIG9mIHdhcm5pbmdzIGZvciBpbmNvbXBhdGliaWxpdGllcyB3aXRoIFBPU0lYIFlhY2M6CisKKyAgICBiaXNvbiAtV2Vycm9yLG5vbmUseWFjYyBncmFtLnkKKworKioqIFRoZSAibm9uZSIgY2F0ZWdvcnkgbm93IGRpc2FibGVzIGFsbCBCaXNvbiB3YXJuaW5nczoKKworICBQcmV2aW91c2x5LCB0aGUgIm5vbmUiIGNhdGVnb3J5IGRpc2FibGVkIG9ubHkgQmlzb24gd2FybmluZ3MgZm9yCisgIHdoaWNoIHRoZXJlIGV4aXN0ZWQgYSBzcGVjaWZpYyAtVy8tLXdhcm5pbmcgY2F0ZWdvcnkuICBIb3dldmVyLAorICBnaXZlbiB0aGUgZm9sbG93aW5nIGNvbW1hbmQgbGluZSwgQmlzb24gaXMgbm93IGd1YXJhbnRlZWQgdG8KKyAgc3VwcHJlc3MgYWxsIHdhcm5pbmdzOgorCisgICAgYmlzb24gLVdub25lIGdyYW0ueQorCisqKiBQcmVjZWRlbmNlIGRpcmVjdGl2ZXMgY2FuIG5vdyBhc3NpZ24gdG9rZW4gbnVtYmVyIDA6CisKKyAgU2luY2UgQmlzb24gMi4zYiwgd2hpY2ggcmVzdG9yZWQgdGhlIGFiaWxpdHkgb2YgcHJlY2VkZW5jZQorICBkaXJlY3RpdmVzIHRvIGFzc2lnbiB0b2tlbiBudW1iZXJzLCBkb2luZyBzbyBmb3IgdG9rZW4gbnVtYmVyIDAgaGFzCisgIHByb2R1Y2VkIGFuIGFzc2VydGlvbiBmYWlsdXJlLiAgRm9yIGV4YW1wbGU6CisKKyAgICAlbGVmdCBFTkQgMAorCisgIFRoaXMgYnVnIGhhcyBiZWVuIGZpeGVkLgorCisqIENoYW5nZXMgaW4gdmVyc2lvbiAyLjQuMyAoMjAxMC0wOC0wNSk6CisKKyoqIEJpc29uIG5vdyBvYmV5cyAtV2Vycm9yIGFuZCAtLXdhcm5pbmdzPWVycm9yIGZvciB3YXJuaW5ncyBhYm91dAorICAgZ3JhbW1hciBydWxlcyB0aGF0IGFyZSB1c2VsZXNzIGluIHRoZSBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cy4KKworKiogUHJvYmxlbXMgd2l0aCBzcGF3bmluZyBNNCBvbiBhdCBsZWFzdCBGcmVlQlNEIDggYW5kIEZyZWVCU0QgOSBoYXZlCisgICBiZWVuIGZpeGVkLgorCisqKiBGYWlsdXJlcyBpbiB0aGUgdGVzdCBzdWl0ZSBmb3IgR0NDIDQuNSBoYXZlIGJlZW4gZml4ZWQuCisKKyoqIEZhaWx1cmVzIGluIHRoZSB0ZXN0IHN1aXRlIGZvciBzb21lIHZlcnNpb25zIG9mIFN1biBTdHVkaW8gQysrIGhhdmUKKyAgIGJlZW4gZml4ZWQuCisKKyoqIENvbnRyYXJ5IHRvIEJpc29uIDIuNC4yJ3MgTkVXUyBlbnRyeSwgaXQgaGFzIGJlZW4gZGVjaWRlZCB0aGF0CisgICB3YXJuaW5ncyBhYm91dCB1bmRlZmluZWQgJXByZWMgaWRlbnRpZmllcnMgd2lsbCBub3QgYmUgY29udmVydGVkIHRvCisgICBlcnJvcnMgaW4gQmlzb24gMi41LiAgVGhleSB3aWxsIHJlbWFpbiB3YXJuaW5ncywgd2hpY2ggc2hvdWxkIGJlCisgICBzdWZmaWNpZW50IGZvciBQT1NJWCB3aGlsZSBhdm9pZGluZyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGlzc3Vlcy4KKworKiogTWlub3IgZG9jdW1lbnRhdGlvbiBmaXhlcy4KKworKiBDaGFuZ2VzIGluIHZlcnNpb24gMi40LjIgKDIwMTAtMDMtMjApOgorCisqKiBTb21lIHBvcnRhYmlsaXR5IHByb2JsZW1zIHRoYXQgcmVzdWx0ZWQgaW4gZmFpbHVyZXMgYW5kIGxpdmVsb2NrcworICAgaW4gdGhlIHRlc3Qgc3VpdGUgb24gc29tZSB2ZXJzaW9ucyBvZiBhdCBsZWFzdCBTb2xhcmlzLCBBSVgsIEhQLVVYLAorICAgUkhFTDQsIGFuZCBUcnU2NCBoYXZlIGJlZW4gYWRkcmVzc2VkLiAgQXMgYSByZXN1bHQsIGZhdGFsIEJpc29uCisgICBlcnJvcnMgc2hvdWxkIG5vIGxvbmdlciBjYXVzZSBNNCB0byByZXBvcnQgYSBicm9rZW4gcGlwZSBvbiB0aGUKKyAgIGFmZmVjdGVkIHBsYXRmb3Jtcy4KKworKiogIiVwcmVjIElERU5USUZJRVIiIHJlcXVpcmVzIElERU5USUZJRVIgdG8gYmUgZGVmaW5lZCBzZXBhcmF0ZWx5LgorCisgIFBPU0lYIHNwZWNpZmllcyB0aGF0IGFuIGVycm9yIGJlIHJlcG9ydGVkIGZvciBhbnkgaWRlbnRpZmllciB0aGF0IGRvZXMKKyAgbm90IGFwcGVhciBvbiB0aGUgTEhTIG9mIGEgZ3JhbW1hciBydWxlIGFuZCB0aGF0IGlzIG5vdCBkZWZpbmVkIGJ5CisgICV0b2tlbiwgJWxlZnQsICVyaWdodCwgb3IgJW5vbmFzc29jLiAgQmlzb24gMi4zYiBhbmQgbGF0ZXIgbG9zdCB0aGlzCisgIGVycm9yIHJlcG9ydCBmb3IgdGhlIGNhc2Ugd2hlbiBhbiBpZGVudGlmaWVyIGFwcGVhcnMgb25seSBhZnRlciBhCisgICVwcmVjIGRpcmVjdGl2ZS4gIEl0IGlzIG5vdyByZXN0b3JlZC4gIEhvd2V2ZXIsIGZvciBiYWNrd2FyZAorICBjb21wYXRpYmlsaXR5IHdpdGggcmVjZW50IEJpc29uIHJlbGVhc2VzLCBpdCBpcyBvbmx5IGEgd2FybmluZyBmb3IKKyAgbm93LiAgSW4gQmlzb24gMi41IGFuZCBsYXRlciwgaXQgd2lsbCByZXR1cm4gdG8gYmVpbmcgYW4gZXJyb3IuCisgIFtCZXR3ZWVuIHRoZSAyLjQuMiBhbmQgMi40LjMgcmVsZWFzZXMsIGl0IHdhcyBkZWNpZGVkIHRoYXQgdGhpcworICB3YXJuaW5nIHdpbGwgbm90IGJlIGNvbnZlcnRlZCB0byBhbiBlcnJvciBpbiBCaXNvbiAyLjUuXQorCisqKiBEZXRlY3Rpb24gb2YgR05VIE00IDEuNC42IG9yIG5ld2VyIGR1cmluZyBjb25maWd1cmUgaXMgaW1wcm92ZWQuCisKKyoqIFdhcm5pbmdzIGZyb20gZ2NjJ3MgLVd1bmRlZiBvcHRpb24gYWJvdXQgdW5kZWZpbmVkIFlZRU5BQkxFX05MUywKKyAgIFlZTFRZUEVfSVNfVFJJVklBTCwgYW5kIF9fU1RSSUNUX0FOU0lfXyBpbiBDL0MrKyBwYXJzZXJzIGFyZSBub3cKKyAgIGF2b2lkZWQuCisKKyoqICVjb2RlIGlzIG5vdyBhIHBlcm1hbmVudCBmZWF0dXJlLgorCisgIEEgdHJhZGl0aW9uYWwgWWFjYyBwcm9sb2d1ZSBkaXJlY3RpdmUgaXMgd3JpdHRlbiBpbiB0aGUgZm9ybToKKworICAgICV7Q09ERSV9CisKKyAgVG8gcHJvdmlkZSBhIG1vcmUgZmxleGlibGUgYWx0ZXJuYXRpdmUsIEJpc29uIDIuM2IgaW50cm9kdWNlZCB0aGUKKyAgJWNvZGUgZGlyZWN0aXZlIHdpdGggdGhlIGZvbGxvd2luZyBmb3JtcyBmb3IgQy9DKys6CisKKyAgICAlY29kZSAgICAgICAgICB7Q09ERX0KKyAgICAlY29kZSByZXF1aXJlcyB7Q09ERX0KKyAgICAlY29kZSBwcm92aWRlcyB7Q09ERX0KKyAgICAlY29kZSB0b3AgICAgICB7Q09ERX0KKworICBUaGVzZSBmb3JtcyBhcmUgbm93IGNvbnNpZGVyZWQgcGVybWFuZW50IGZlYXR1cmVzIG9mIEJpc29uLiAgU2VlIHRoZQorICAlY29kZSBlbnRyaWVzIGluIHRoZSBzZWN0aW9uICJCaXNvbiBEZWNsYXJhdGlvbiBTdW1tYXJ5IiBpbiB0aGUgQmlzb24KKyAgbWFudWFsIGZvciBhIHN1bW1hcnkgb2YgdGhlaXIgZnVuY3Rpb25hbGl0eS4gIFNlZSB0aGUgc2VjdGlvbgorICAiUHJvbG9ndWUgQWx0ZXJuYXRpdmVzIiBmb3IgYSBkZXRhaWxlZCBkaXNjdXNzaW9uIGluY2x1ZGluZyB0aGUKKyAgYWR2YW50YWdlcyBvZiAlY29kZSBvdmVyIHRoZSB0cmFkaXRpb25hbCBZYWNjIHByb2xvZ3VlIGRpcmVjdGl2ZS4KKworICBCaXNvbidzIEphdmEgZmVhdHVyZSBhcyBhIHdob2xlIGluY2x1ZGluZyBpdHMgY3VycmVudCB1c2FnZSBvZiAlY29kZQorICBpcyBzdGlsbCBjb25zaWRlcmVkIGV4cGVyaW1lbnRhbC4KKworKiogWVlGQUlMIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgZXZlbnR1YWxseSBiZSByZW1vdmVkLgorCisgIFlZRkFJTCBoYXMgZXhpc3RlZCBmb3IgbWFueSB5ZWFycyBhcyBhbiB1bmRvY3VtZW50ZWQgZmVhdHVyZSBvZgorICBkZXRlcm1pbmlzdGljIHBhcnNlcnMgaW4gQyBnZW5lcmF0ZWQgYnkgQmlzb24uICBQcmV2aW91c2x5LCBpdCB3YXMKKyAgZG9jdW1lbnRlZCBmb3IgQmlzb24ncyBleHBlcmltZW50YWwgSmF2YSBwYXJzZXJzLiAgWVlGQUlMIGlzIG5vIGxvbmdlcgorICBkb2N1bWVudGVkIGZvciBKYXZhIHBhcnNlcnMgYW5kIGlzIGZvcm1hbGx5IGRlcHJlY2F0ZWQgaW4gYm90aCBjYXNlcy4KKyAgVXNlcnMgYXJlIHN0cm9uZ2x5IGVuY291cmFnZWQgdG8gbWlncmF0ZSB0byBZWUVSUk9SLCB3aGljaCBpcworICBzcGVjaWZpZWQgYnkgUE9TSVguCisKKyAgTGlrZSBZWUVSUk9SLCB5b3UgY2FuIGludm9rZSBZWUZBSUwgZnJvbSBhIHNlbWFudGljIGFjdGlvbiBpbiBvcmRlciB0bworICBpbmR1Y2UgYSBzeW50YXggZXJyb3IuICBUaGUgbW9zdCBvYnZpb3VzIGRpZmZlcmVuY2UgZnJvbSBZWUVSUk9SIGlzCisgIHRoYXQgWVlGQUlMIHdpbGwgYXV0b21hdGljYWxseSBpbnZva2UgeXllcnJvciB0byByZXBvcnQgdGhlIHN5bnRheAorICBlcnJvciBzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvLiAgSG93ZXZlciwgdGhlcmUgYXJlIHNldmVyYWwgb3RoZXIKKyAgc3VidGxlIGRpZmZlcmVuY2VzIGJldHdlZW4gWVlFUlJPUiBhbmQgWVlGQUlMLCBhbmQgWVlGQUlMIHN1ZmZlcnMgZnJvbQorICBpbmhlcmVudCBmbGF3cyB3aGVuICVlcnJvci12ZXJib3NlIG9yICIjZGVmaW5lIFlZRVJST1JfVkVSQk9TRSIgaXMKKyAgdXNlZC4gIEZvciBhIG1vcmUgZGV0YWlsZWQgZGlzY3Vzc2lvbiwgc2VlOgorCisgICAgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwOS0xMi9tc2cwMDAyNC5odG1sCisKKyAgVGhlIHVwY29taW5nIEJpc29uIDIuNSB3aWxsIHJlbW92ZSBZWUZBSUwgZnJvbSBKYXZhIHBhcnNlcnMsIGJ1dAorICBkZXRlcm1pbmlzdGljIHBhcnNlcnMgaW4gQyB3aWxsIGNvbnRpbnVlIHRvIGltcGxlbWVudCBpdC4gIEhvd2V2ZXIsCisgIGJlY2F1c2UgWVlGQUlMIGlzIGFscmVhZHkgZmxhd2VkLCBpdCBzZWVtcyBmdXRpbGUgdG8gdHJ5IHRvIG1ha2UgbmV3CisgIEJpc29uIGZlYXR1cmVzIGNvbXBhdGlibGUgd2l0aCBpdC4gIFRodXMsIGR1cmluZyBwYXJzZXIgZ2VuZXJhdGlvbiwKKyAgQmlzb24gMi41IHdpbGwgcHJvZHVjZSBhIHdhcm5pbmcgd2hlbmV2ZXIgaXQgZGlzY292ZXJzIFlZRkFJTCBpbiBhCisgIHJ1bGUgYWN0aW9uLiAgSW4gYSBsYXRlciByZWxlYXNlLCBZWUZBSUwgd2lsbCBiZSBkaXNhYmxlZCBmb3IKKyAgJWVycm9yLXZlcmJvc2UgYW5kICIjZGVmaW5lIFlZRVJST1JfVkVSQk9TRSIuICBFdmVudHVhbGx5LCBZWUZBSUwgd2lsbAorICBiZSByZW1vdmVkIGFsdG9nZXRoZXIuCisKKyAgVGhlcmUgZXhpc3RzIGF0IGxlYXN0IG9uZSBjYXNlIHdoZXJlIEJpc29uIDIuNSdzIFlZRkFJTCB3YXJuaW5nIHdpbGwKKyAgYmUgYSBmYWxzZSBwb3NpdGl2ZS4gIFNvbWUgcHJvamVjdHMgYWRkIHBob255IHVzZXMgb2YgWVlGQUlMIGFuZCBvdGhlcgorICBCaXNvbi1kZWZpbmVkIG1hY3JvcyBmb3IgdGhlIHNvbGUgcHVycG9zZSBvZiBzdXBwcmVzc2luZyBDCisgIHByZXByb2Nlc3NvciB3YXJuaW5ncyAoZnJvbSBHQ0MgY3BwJ3MgLVd1bnVzZWQtbWFjcm9zLCBmb3IgZXhhbXBsZSkuCisgIFRvIGF2b2lkIEJpc29uJ3MgZnV0dXJlIHdhcm5pbmcsIHN1Y2ggWVlGQUlMIHVzZXMgY2FuIGJlIG1vdmVkIHRvIHRoZQorICBlcGlsb2d1ZSAodGhhdCBpcywgYWZ0ZXIgdGhlIHNlY29uZCAiJSUiKSBpbiB0aGUgQmlzb24gaW5wdXQgZmlsZS4gIEluCisgIHRoaXMgcmVsZWFzZSAoMi40LjIpLCBCaXNvbiBhbHJlYWR5IGdlbmVyYXRlcyBpdHMgb3duIGNvZGUgdG8gc3VwcHJlc3MKKyAgQyBwcmVwcm9jZXNzb3Igd2FybmluZ3MgZm9yIFlZRkFJTCwgc28gcHJvamVjdHMgY2FuIHJlbW92ZSB0aGVpciBvd24KKyAgcGhvbnkgdXNlcyBvZiBZWUZBSUwgaWYgY29tcGF0aWJpbGl0eSB3aXRoIEJpc29uIHJlbGVhc2VzIHByaW9yIHRvCisgIDIuNC4yIGlzIG5vdCBuZWNlc3NhcnkuCisKKyoqIEludGVybmF0aW9uYWxpemF0aW9uLgorCisgIEZpeCBhIHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBpbiBCaXNvbiAyLjQ6IFVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcywKKyAgbWVzc2FnZSB0cmFuc2xhdGlvbnMgd2VyZSBub3QgaW5zdGFsbGVkIGFsdGhvdWdoIHN1cHBvcnRlZCBieSB0aGUKKyAgaG9zdCBzeXN0ZW0uCisKKyogQ2hhbmdlcyBpbiB2ZXJzaW9uIDIuNC4xICgyMDA4LTEyLTExKToKKworKiogSW4gdGhlIEdMUiBkZWZpbmVzIGZpbGUsIHVuZXhwYW5kZWQgTTQgbWFjcm9zIGluIHRoZSB5eWx2YWwgYW5kIHl5bGxvYworICAgZGVjbGFyYXRpb25zIGhhdmUgYmVlbiBmaXhlZC4KKworKiogVGVtcG9yYXJ5IGhhY2sgZm9yIGFkZGluZyBhIHNlbWljb2xvbiB0byB0aGUgdXNlciBhY3Rpb24uCisKKyAgQmlzb24gdXNlZCB0byBwcmVwZW5kIGEgdHJhaWxpbmcgc2VtaWNvbG9uIGF0IHRoZSBlbmQgb2YgdGhlIHVzZXIKKyAgYWN0aW9uIGZvciByZWR1Y3Rpb25zLiAgVGhpcyBhbGxvd2VkIGFjdGlvbnMgc3VjaCBhcworCisgICAgZXhwOiBleHAgIisiIGV4cCB7ICQkID0gJDEgKyAkMyB9OworCisgIGluc3RlYWQgb2YKKworICAgIGV4cDogZXhwICIrIiBleHAgeyAkJCA9ICQxICsgJDM7IH07CisKKyAgU29tZSBncmFtbWFycyBzdGlsbCBkZXBlbmQgb24gdGhpcyAiZmVhdHVyZSIuICBCaXNvbiAyLjQuMSByZXN0b3JlcworICB0aGUgcHJldmlvdXMgYmVoYXZpb3IgaW4gdGhlIGNhc2Ugb2YgQyBvdXRwdXQgKHNwZWNpZmljYWxseSwgd2hlbgorICBuZWl0aGVyICVsYW5ndWFnZSBvciAlc2tlbGV0b24gb3IgZXF1aXZhbGVudCBjb21tYW5kLWxpbmUgb3B0aW9ucworICBhcmUgdXNlZCkgdG8gbGVhdmUgbW9yZSB0aW1lIGZvciBncmFtbWFycyBkZXBlbmRpbmcgb24gdGhlIG9sZAorICBiZWhhdmlvciB0byBiZSBhZGp1c3RlZC4gIEZ1dHVyZSByZWxlYXNlcyBvZiBCaXNvbiB3aWxsIGRpc2FibGUgdGhpcworICBmZWF0dXJlLgorCisqKiBBIGZldyBtaW5vciBpbXByb3ZlbWVudHMgdG8gdGhlIEJpc29uIG1hbnVhbC4KKworKiBDaGFuZ2VzIGluIHZlcnNpb24gMi40ICgyMDA4LTExLTAyKToKKworKiogJWxhbmd1YWdlIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlLgorCisgIFdlIGZpcnN0IGludHJvZHVjZWQgdGhpcyBmZWF0dXJlIGluIHRlc3QgcmVsZWFzZSAyLjNiIGFzIGEgY2xlYW5lcgorICBhbHRlcm5hdGl2ZSB0byAlc2tlbGV0b24uICBTaW5jZSB0aGVuLCB3ZSBoYXZlIGRpc2N1c3NlZCB0aGUgcG9zc2liaWxpdHkgb2YKKyAgbW9kaWZ5aW5nIGl0cyBlZmZlY3Qgb24gQmlzb24ncyBvdXRwdXQgZmlsZSBuYW1lcy4gIFRodXMsIGluIHRoaXMgcmVsZWFzZSwKKyAgd2UgY29uc2lkZXIgJWxhbmd1YWdlIHRvIGJlIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlIHRoYXQgd2lsbCBsaWtlbHkgZXZvbHZlCisgIGluIGZ1dHVyZSByZWxlYXNlcy4KKworKiogRm9yd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggR05VIE00IGhhcyBiZWVuIGltcHJvdmVkLgorCisqKiBTZXZlcmFsIGJ1Z3MgaW4gdGhlIEMrKyBza2VsZXRvbiBhbmQgdGhlIGV4cGVyaW1lbnRhbCBKYXZhIHNrZWxldG9uIGhhdmUgYmVlbgorICBmaXhlZC4KKworKiBDaGFuZ2VzIGluIHZlcnNpb24gMi4zYiAoMjAwOC0wNS0yNyk6CisKKyoqIFRoZSBxdW90ZXMgYXJvdW5kIE5BTUUgdGhhdCB1c2VkIHRvIGJlIHJlcXVpcmVkIGluIHRoZSBmb2xsb3dpbmcgZGlyZWN0aXZlCisgIGFyZSBub3cgZGVwcmVjYXRlZDoKKworICAgICVkZWZpbmUgTkFNRSAiVkFMVUUiCisKKyoqIFRoZSBkaXJlY3RpdmUgIiVwdXJlLXBhcnNlciIgaXMgbm93IGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2Y6CisKKyAgICAlZGVmaW5lIGFwaS5wdXJlCisKKyAgd2hpY2ggaGFzIHRoZSBzYW1lIGVmZmVjdCBleGNlcHQgdGhhdCBCaXNvbiBpcyBtb3JlIGNhcmVmdWwgdG8gd2FybiBhYm91dAorICB1bnJlYXNvbmFibGUgdXNhZ2UgaW4gdGhlIGxhdHRlciBjYXNlLgorCisqKiBQdXNoIFBhcnNpbmcKKworICBCaXNvbiBjYW4gbm93IGdlbmVyYXRlIGFuIExBTFIoMSkgcGFyc2VyIGluIEMgd2l0aCBhIHB1c2ggaW50ZXJmYWNlLiAgVGhhdAorICBpcywgaW5zdGVhZCBvZiBpbnZva2luZyAieXlwYXJzZSIsIHdoaWNoIHB1bGxzIHRva2VucyBmcm9tICJ5eWxleCIsIHlvdSBjYW4KKyAgcHVzaCBvbmUgdG9rZW4gYXQgYSB0aW1lIHRvIHRoZSBwYXJzZXIgdXNpbmcgInl5cHVzaF9wYXJzZSIsIHdoaWNoIHdpbGwKKyAgcmV0dXJuIHRvIHRoZSBjYWxsZXIgYWZ0ZXIgcHJvY2Vzc2luZyBlYWNoIHRva2VuLiAgQnkgZGVmYXVsdCwgdGhlIHB1c2gKKyAgaW50ZXJmYWNlIGlzIGRpc2FibGVkLiAgRWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgZGlyZWN0aXZlcyB3aWxsIGVuYWJsZSBpdDoKKworICAgICVkZWZpbmUgYXBpLnB1c2hfcHVsbCAicHVzaCIgLy8gSnVzdCBwdXNoOyBkb2VzIG5vdCByZXF1aXJlIHl5bGV4LgorICAgICVkZWZpbmUgYXBpLnB1c2hfcHVsbCAiYm90aCIgLy8gUHVzaCBhbmQgcHVsbDsgcmVxdWlyZXMgeXlsZXguCisKKyAgU2VlIHRoZSBuZXcgc2VjdGlvbiAiQSBQdXNoIFBhcnNlciIgaW4gdGhlIEJpc29uIG1hbnVhbCBmb3IgZGV0YWlscy4KKworICBUaGUgY3VycmVudCBwdXNoIHBhcnNpbmcgaW50ZXJmYWNlIGlzIGV4cGVyaW1lbnRhbCBhbmQgbWF5IGV2b2x2ZS4gIE1vcmUgdXNlcgorICBmZWVkYmFjayB3aWxsIGhlbHAgdG8gc3RhYmlsaXplIGl0LgorCisqKiBUaGUgLWcgYW5kIC0tZ3JhcGggb3B0aW9ucyBub3cgb3V0cHV0IGdyYXBocyBpbiBHcmFwaHZpeiBET1QgZm9ybWF0LAorICBub3QgVkNHIGZvcm1hdC4gIExpa2UgLS1ncmFwaCwgLWcgbm93IGFsc28gdGFrZXMgYW4gb3B0aW9uYWwgRklMRSBhcmd1bWVudAorICBhbmQgdGh1cyBjYW5ub3QgYmUgYnVuZGxlZCB3aXRoIG90aGVyIHNob3J0IG9wdGlvbnMuCisKKyoqIEphdmEKKworICBCaXNvbiBjYW4gbm93IGdlbmVyYXRlIGFuIExBTFIoMSkgcGFyc2VyIGluIEphdmEuICBUaGUgc2tlbGV0b24gaXMKKyAgImRhdGEvbGFscjEuamF2YSIuICBDb25zaWRlciB1c2luZyB0aGUgbmV3ICVsYW5ndWFnZSBkaXJlY3RpdmUgaW5zdGVhZCBvZgorICAlc2tlbGV0b24gdG8gc2VsZWN0IGl0LgorCisgIFNlZSB0aGUgbmV3IHNlY3Rpb24gIkphdmEgUGFyc2VycyIgaW4gdGhlIEJpc29uIG1hbnVhbCBmb3IgZGV0YWlscy4KKworICBUaGUgY3VycmVudCBKYXZhIGludGVyZmFjZSBpcyBleHBlcmltZW50YWwgYW5kIG1heSBldm9sdmUuICBNb3JlIHVzZXIKKyAgZmVlZGJhY2sgd2lsbCBoZWxwIHRvIHN0YWJpbGl6ZSBpdC4KKworKiogJWxhbmd1YWdlCisKKyAgVGhpcyBuZXcgZGlyZWN0aXZlIHNwZWNpZmllcyB0aGUgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2Ugb2YgdGhlIGdlbmVyYXRlZAorICBwYXJzZXIsIHdoaWNoIGNhbiBiZSBDICh0aGUgZGVmYXVsdCksIEMrKywgb3IgSmF2YS4gIEJlc2lkZXMgdGhlIHNrZWxldG9uCisgIHRoYXQgQmlzb24gdXNlcywgdGhlIGRpcmVjdGl2ZSBhZmZlY3RzIHRoZSBuYW1lcyBvZiB0aGUgZ2VuZXJhdGVkIGZpbGVzIGlmCisgIHRoZSBncmFtbWFyIGZpbGUncyBuYW1lIGVuZHMgaW4gIi55Ii4KKworKiogWE1MIEF1dG9tYXRvbiBSZXBvcnQKKworICBCaXNvbiBjYW4gbm93IGdlbmVyYXRlIGFuIFhNTCByZXBvcnQgb2YgdGhlIExBTFIoMSkgYXV0b21hdG9uIHVzaW5nIHRoZSBuZXcKKyAgIi0teG1sIiBvcHRpb24uICBUaGUgY3VycmVudCBYTUwgc2NoZW1hIGlzIGV4cGVyaW1lbnRhbCBhbmQgbWF5IGV2b2x2ZS4gIE1vcmUKKyAgdXNlciBmZWVkYmFjayB3aWxsIGhlbHAgdG8gc3RhYmlsaXplIGl0LgorCisqKiBUaGUgZ3JhbW1hciBmaWxlIG1heSBub3cgc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgcGFyc2VyIGhlYWRlciBmaWxlIHVzaW5nCisgICVkZWZpbmVzLiAgRm9yIGV4YW1wbGU6CisKKyAgICAlZGVmaW5lcyAicGFyc2VyLmgiCisKKyoqIFdoZW4gcmVwb3J0aW5nIHVzZWxlc3MgcnVsZXMsIHVzZWxlc3Mgbm9udGVybWluYWxzLCBhbmQgdW51c2VkIHRlcm1pbmFscywKKyAgQmlzb24gbm93IGVtcGxveXMgdGhlIHRlcm1zICJ1c2VsZXNzIGluIGdyYW1tYXIiIGluc3RlYWQgb2YgInVzZWxlc3MiLAorICAidXNlbGVzcyBpbiBwYXJzZXIiIGluc3RlYWQgb2YgIm5ldmVyIHJlZHVjZWQiLCBhbmQgInVudXNlZCBpbiBncmFtbWFyIgorICBpbnN0ZWFkIG9mICJ1bnVzZWQiLgorCisqKiBVbnJlYWNoYWJsZSBTdGF0ZSBSZW1vdmFsCisKKyAgUHJldmlvdXNseSwgQmlzb24gc29tZXRpbWVzIGdlbmVyYXRlZCBwYXJzZXIgdGFibGVzIGNvbnRhaW5pbmcgdW5yZWFjaGFibGUKKyAgc3RhdGVzLiAgQSBzdGF0ZSBjYW4gYmVjb21lIHVucmVhY2hhYmxlIGR1cmluZyBjb25mbGljdCByZXNvbHV0aW9uIGlmIEJpc29uCisgIGRpc2FibGVzIGEgc2hpZnQgYWN0aW9uIGxlYWRpbmcgdG8gaXQgZnJvbSBhIHByZWRlY2Vzc29yIHN0YXRlLiAgQmlzb24gbm93OgorCisgICAgMS4gUmVtb3ZlcyB1bnJlYWNoYWJsZSBzdGF0ZXMuCisKKyAgICAyLiBEb2VzIG5vdCByZXBvcnQgYW55IGNvbmZsaWN0cyB0aGF0IGFwcGVhcmVkIGluIHVucmVhY2hhYmxlIHN0YXRlcy4KKyAgICAgICBXQVJOSU5HOiBBcyBhIHJlc3VsdCwgeW91IG1heSBuZWVkIHRvIHVwZGF0ZSAlZXhwZWN0IGFuZCAlZXhwZWN0LXJyCisgICAgICAgZGlyZWN0aXZlcyBpbiBleGlzdGluZyBncmFtbWFyIGZpbGVzLgorCisgICAgMy4gRm9yIGFueSBydWxlIHVzZWQgb25seSBpbiBzdWNoIHN0YXRlcywgQmlzb24gbm93IHJlcG9ydHMgdGhlIHJ1bGUgYXMKKyAgICAgICAidXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cyIuCisKKyAgVGhpcyBmZWF0dXJlIGNhbiBiZSBkaXNhYmxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgZGlyZWN0aXZlOgorCisgICAgJWRlZmluZSBsci5rZWVwX3VucmVhY2hhYmxlX3N0YXRlcworCisgIFNlZSB0aGUgJWRlZmluZSBlbnRyeSBpbiB0aGUgIkJpc29uIERlY2xhcmF0aW9uIFN1bW1hcnkiIGluIHRoZSBCaXNvbiBtYW51YWwKKyAgZm9yIGZ1cnRoZXIgZGlzY3Vzc2lvbi4KKworKiogTG9va2FoZWFkIFNldCBDb3JyZWN0aW9uIGluIHRoZSAiLm91dHB1dCIgUmVwb3J0CisKKyAgV2hlbiBpbnN0cnVjdGVkIHRvIGdlbmVyYXRlIGEgIi5vdXRwdXQiIGZpbGUgaW5jbHVkaW5nIGxvb2thaGVhZCBzZXRzCisgICh1c2luZyAiLS1yZXBvcnQ9bG9va2FoZWFkIiwgZm9yIGV4YW1wbGUpLCBCaXNvbiBub3cgcHJpbnRzIGVhY2ggcmVkdWN0aW9uJ3MKKyAgbG9va2FoZWFkIHNldCBvbmx5IG5leHQgdG8gdGhlIGFzc29jaWF0ZWQgc3RhdGUncyBvbmUgaXRlbSB0aGF0ICgxKSBpcworICBhc3NvY2lhdGVkIHdpdGggdGhlIHNhbWUgcnVsZSBhcyB0aGUgcmVkdWN0aW9uIGFuZCAoMikgaGFzIGl0cyBkb3QgYXQgdGhlIGVuZAorICBvZiBpdHMgUkhTLiAgUHJldmlvdXNseSwgQmlzb24gYWxzbyBlcnJvbmVvdXNseSBwcmludGVkIHRoZSBsb29rYWhlYWQgc2V0CisgIG5leHQgdG8gYWxsIG9mIHRoZSBzdGF0ZSdzIG90aGVyIGl0ZW1zIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FtZSBydWxlLiAgVGhpcworICBidWcgYWZmZWN0ZWQgb25seSB0aGUgIi5vdXRwdXQiIGZpbGUgYW5kIG5vdCB0aGUgZ2VuZXJhdGVkIHBhcnNlciBzb3VyY2UKKyAgY29kZS4KKworKiogLS1yZXBvcnQtZmlsZT1GSUxFIGlzIGEgbmV3IG9wdGlvbiB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCAiLm91dHB1dCIgZmlsZQorICBuYW1lLgorCisqKiBUaGUgIj0iIHRoYXQgdXNlZCB0byBiZSByZXF1aXJlZCBpbiB0aGUgZm9sbG93aW5nIGRpcmVjdGl2ZXMgaXMgbm93CisgIGRlcHJlY2F0ZWQ6CisKKyAgICAlZmlsZS1wcmVmaXggInBhcnNlciIKKyAgICAlbmFtZS1wcmVmaXggImNfIgorICAgICVvdXRwdXQgInBhcnNlci5jIgorCisqKiBBbiBBbHRlcm5hdGl2ZSB0byAiJXsuLi4lfSIgLS0gIiVjb2RlIFFVQUxJRklFUiB7Q09ERX0iCisKKyAgQmlzb24gMi4zYSBwcm92aWRlZCBhIG5ldyBzZXQgb2YgZGlyZWN0aXZlcyBhcyBhIG1vcmUgZmxleGlibGUgYWx0ZXJuYXRpdmUgdG8KKyAgdGhlIHRyYWRpdGlvbmFsIFlhY2MgcHJvbG9ndWUgYmxvY2tzLiAgVGhvc2UgaGF2ZSBub3cgYmVlbiBjb25zb2xpZGF0ZWQgaW50bworICBhIHNpbmdsZSAlY29kZSBkaXJlY3RpdmUgd2l0aCBhbiBvcHRpb25hbCBxdWFsaWZpZXIgZmllbGQsIHdoaWNoIGlkZW50aWZpZXMKKyAgdGhlIHB1cnBvc2Ugb2YgdGhlIGNvZGUgYW5kIHRodXMgdGhlIGxvY2F0aW9uKHMpIHdoZXJlIEJpc29uIHNob3VsZCBnZW5lcmF0ZQorICBpdDoKKworICAgIDEuICIlY29kZSAgICAgICAgICB7Q09ERX0iIHJlcGxhY2VzICIlYWZ0ZXItaGVhZGVyICB7Q09ERX0iCisgICAgMi4gIiVjb2RlIHJlcXVpcmVzIHtDT0RFfSIgcmVwbGFjZXMgIiVzdGFydC1oZWFkZXIgIHtDT0RFfSIKKyAgICAzLiAiJWNvZGUgcHJvdmlkZXMge0NPREV9IiByZXBsYWNlcyAiJWVuZC1oZWFkZXIgICAge0NPREV9IgorICAgIDQuICIlY29kZSB0b3AgICAgICB7Q09ERX0iIHJlcGxhY2VzICIlYmVmb3JlLWhlYWRlciB7Q09ERX0iCisKKyAgU2VlIHRoZSAlY29kZSBlbnRyaWVzIGluIHNlY3Rpb24gIkJpc29uIERlY2xhcmF0aW9uIFN1bW1hcnkiIGluIHRoZSBCaXNvbgorICBtYW51YWwgZm9yIGEgc3VtbWFyeSBvZiB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuICBTZWUgdGhlIG5ldyBzZWN0aW9uICJQcm9sb2d1ZQorICBBbHRlcm5hdGl2ZXMiIGZvciBhIGRldGFpbGVkIGRpc2N1c3Npb24gaW5jbHVkaW5nIHRoZSBhZHZhbnRhZ2VzIG9mICVjb2RlCisgIG92ZXIgdGhlIHRyYWRpdGlvbmFsIFlhY2MgcHJvbG9ndWVzLgorCisgIFRoZSBwcm9sb2d1ZSBhbHRlcm5hdGl2ZXMgYXJlIGV4cGVyaW1lbnRhbC4gIE1vcmUgdXNlciBmZWVkYmFjayB3aWxsIGhlbHAgdG8KKyAgZGV0ZXJtaW5lIHdoZXRoZXIgdGhleSBzaG91bGQgYmVjb21lIHBlcm1hbmVudCBmZWF0dXJlcy4KKworKiogUmV2aXNlZCB3YXJuaW5nOiB1bnNldCBvciB1bnVzZWQgbWlkLXJ1bGUgdmFsdWVzCisKKyAgU2luY2UgQmlzb24gMi4yLCBCaXNvbiBoYXMgd2FybmVkIGFib3V0IG1pZC1ydWxlIHZhbHVlcyB0aGF0IGFyZSBzZXQgYnV0IG5vdAorICB1c2VkIHdpdGhpbiBhbnkgb2YgdGhlIGFjdGlvbnMgb2YgdGhlIHBhcmVudCBydWxlLiAgRm9yIGV4YW1wbGUsIEJpc29uIHdhcm5zCisgIGFib3V0IHVudXNlZCAkMiBpbjoKKworICAgIGV4cDogJzEnIHsgJCQgPSAxOyB9ICcrJyBleHAgeyAkJCA9ICQxICsgJDQ7IH07CisKKyAgTm93LCBCaXNvbiBhbHNvIHdhcm5zIGFib3V0IG1pZC1ydWxlIHZhbHVlcyB0aGF0IGFyZSB1c2VkIGJ1dCBub3Qgc2V0LiAgRm9yCisgIGV4YW1wbGUsIEJpc29uIHdhcm5zIGFib3V0IHVuc2V0ICQkIGluIHRoZSBtaWQtcnVsZSBhY3Rpb24gaW46CisKKyAgICBleHA6ICcxJyB7ICQxID0gMTsgfSAnKycgZXhwIHsgJCQgPSAkMiArICQ0OyB9OworCisgIEhvd2V2ZXIsIEJpc29uIG5vdyBkaXNhYmxlcyBib3RoIG9mIHRoZXNlIHdhcm5pbmdzIGJ5IGRlZmF1bHQgc2luY2UgdGhleQorICBzb21ldGltZXMgcHJvdmUgdG8gYmUgZmFsc2UgYWxhcm1zIGluIGV4aXN0aW5nIGdyYW1tYXJzIGVtcGxveWluZyB0aGUgWWFjYworICBjb25zdHJ1Y3RzICQwIG9yICQtTiAod2hlcmUgTiBpcyBzb21lIHBvc2l0aXZlIGludGVnZXIpLgorCisgIFRvIGVuYWJsZSB0aGVzZSB3YXJuaW5ncywgc3BlY2lmeSB0aGUgb3B0aW9uICItLXdhcm5pbmdzPW1pZHJ1bGUtdmFsdWVzIiBvcgorICAiLVciLCB3aGljaCBpcyBhIHN5bm9ueW0gZm9yICItLXdhcm5pbmdzPWFsbCIuCisKKyoqIERlZmF1bHQgJWRlc3RydWN0b3Igb3IgJXByaW50ZXIgd2l0aCAiPCo+IiBvciAiPD4iCisKKyAgQmlzb24gbm93IHJlY29nbml6ZXMgdHdvIHNlcGFyYXRlIGtpbmRzIG9mIGRlZmF1bHQgJWRlc3RydWN0b3IncyBhbmQKKyAgJXByaW50ZXInczoKKworICAgIDEuIFBsYWNlICI8Kj4iIGluIGEgJWRlc3RydWN0b3IvJXByaW50ZXIgc3ltYm9sIGxpc3QgdG8gZGVmaW5lIGEgZGVmYXVsdAorICAgICAgICVkZXN0cnVjdG9yLyVwcmludGVyIGZvciBhbGwgZ3JhbW1hciBzeW1ib2xzIGZvciB3aGljaCB5b3UgaGF2ZSBmb3JtYWxseQorICAgICAgIGRlY2xhcmVkIHNlbWFudGljIHR5cGUgdGFncy4KKworICAgIDIuIFBsYWNlICI8PiIgaW4gYSAlZGVzdHJ1Y3Rvci8lcHJpbnRlciBzeW1ib2wgbGlzdCB0byBkZWZpbmUgYSBkZWZhdWx0CisgICAgICAgJWRlc3RydWN0b3IvJXByaW50ZXIgZm9yIGFsbCBncmFtbWFyIHN5bWJvbHMgd2l0aG91dCBkZWNsYXJlZCBzZW1hbnRpYworICAgICAgIHR5cGUgdGFncy4KKworICBCaXNvbiBubyBsb25nZXIgc3VwcG9ydHMgdGhlICIlc3ltYm9sLWRlZmF1bHQiIG5vdGF0aW9uIGZyb20gQmlzb24gMi4zYS4KKyAgIjwqPiIgYW5kICI8PiIgY29tYmluZWQgYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3Qgd2l0aCBvbmUgZXhjZXB0aW9uOiBCaXNvbiBubworICBsb25nZXIgYXBwbGllcyBhbnkgJWRlc3RydWN0b3IgdG8gYSBtaWQtcnVsZSB2YWx1ZSBpZiB0aGF0IG1pZC1ydWxlIHZhbHVlIGlzCisgIG5vdCBhY3R1YWxseSBldmVyIHJlZmVyZW5jZWQgdXNpbmcgZWl0aGVyICQkIG9yICRuIGluIGEgc2VtYW50aWMgYWN0aW9uLgorCisgIFRoZSBkZWZhdWx0ICVkZXN0cnVjdG9yJ3MgYW5kICVwcmludGVyJ3MgYXJlIGV4cGVyaW1lbnRhbC4gIE1vcmUgdXNlcgorICBmZWVkYmFjayB3aWxsIGhlbHAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhleSBzaG91bGQgYmVjb21lIHBlcm1hbmVudAorICBmZWF0dXJlcy4KKworICBTZWUgdGhlIHNlY3Rpb24gIkZyZWVpbmcgRGlzY2FyZGVkIFN5bWJvbHMiIGluIHRoZSBCaXNvbiBtYW51YWwgZm9yIGZ1cnRoZXIKKyAgZGV0YWlscy4KKworKiogJWxlZnQsICVyaWdodCwgYW5kICVub25hc3NvYyBjYW4gbm93IGRlY2xhcmUgdG9rZW4gbnVtYmVycy4gIFRoaXMgaXMgcmVxdWlyZWQKKyAgYnkgUE9TSVguICBIb3dldmVyLCBzZWUgdGhlIGVuZCBvZiBzZWN0aW9uICJPcGVyYXRvciBQcmVjZWRlbmNlIiBpbiB0aGUgQmlzb24KKyAgbWFudWFsIGZvciBhIGNhdmVhdCBjb25jZXJuaW5nIHRoZSB0cmVhdG1lbnQgb2YgbGl0ZXJhbCBzdHJpbmdzLgorCisqKiBUaGUgbm9uZnVuY3Rpb25hbCAtLW5vLXBhcnNlciwgLW4sIGFuZCAlbm8tcGFyc2VyIG9wdGlvbnMgaGF2ZSBiZWVuCisgIGNvbXBsZXRlbHkgcmVtb3ZlZCBmcm9tIEJpc29uLgorCisqIENoYW5nZXMgaW4gdmVyc2lvbiAyLjNhLCAyMDA2LTA5LTEzOgorCisqKiBJbnN0ZWFkIG9mICV1bmlvbiwgeW91IGNhbiBkZWZpbmUgYW5kIHVzZSB5b3VyIG93biB1bmlvbiB0eXBlCisgIFlZU1RZUEUgaWYgeW91ciBncmFtbWFyIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSA8dHlwZT4gdGFnLgorICBZb3VyIFlZU1RZUEUgbmVlZCBub3QgYmUgYSBtYWNybzsgaXQgY2FuIGJlIGEgdHlwZWRlZi4KKyAgVGhpcyBjaGFuZ2UgaXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBZYWNjIGltcGxlbWVudGF0aW9ucywKKyAgYW5kIGlzIHJlcXVpcmVkIGJ5IFBPU0lYLgorCisqKiBMb2NhdGlvbnMgY29sdW1ucyBhbmQgbGluZXMgc3RhcnQgYXQgMS4KKyAgSW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBHTlUgQ29kaW5nIFN0YW5kYXJkcyBhbmQgRW1hY3MuCisKKyoqIFlvdSBtYXkgbm93IGRlY2xhcmUgcGVyLXR5cGUgYW5kIGRlZmF1bHQgJWRlc3RydWN0b3IncyBhbmQgJXByaW50ZXInczoKKworICBGb3IgZXhhbXBsZToKKworICAgICV1bmlvbiB7IGNoYXIgKnN0cmluZzsgfQorICAgICV0b2tlbiA8c3RyaW5nPiBTVFJJTkcxCisgICAgJXRva2VuIDxzdHJpbmc+IFNUUklORzIKKyAgICAldHlwZSAgPHN0cmluZz4gc3RyaW5nMQorICAgICV0eXBlICA8c3RyaW5nPiBzdHJpbmcyCisgICAgJXVuaW9uIHsgY2hhciBjaGFyYWN0ZXI7IH0KKyAgICAldG9rZW4gPGNoYXJhY3Rlcj4gQ0hSCisgICAgJXR5cGUgIDxjaGFyYWN0ZXI+IGNocgorICAgICVkZXN0cnVjdG9yIHsgZnJlZSAoJCQpOyB9ICVzeW1ib2wtZGVmYXVsdAorICAgICVkZXN0cnVjdG9yIHsgZnJlZSAoJCQpOyBwcmludGYgKCIlZCIsIEAkLmZpcnN0X2xpbmUpOyB9IFNUUklORzEgc3RyaW5nMQorICAgICVkZXN0cnVjdG9yIHsgfSA8Y2hhcmFjdGVyPgorCisgIGd1YXJhbnRlZXMgdGhhdCwgd2hlbiB0aGUgcGFyc2VyIGRpc2NhcmRzIGFueSB1c2VyLWRlZmluZWQgc3ltYm9sIHRoYXQgaGFzIGEKKyAgc2VtYW50aWMgdHlwZSB0YWcgb3RoZXIgdGhhbiAiPGNoYXJhY3Rlcj4iLCBpdCBwYXNzZXMgaXRzIHNlbWFudGljIHZhbHVlIHRvCisgICJmcmVlIi4gIEhvd2V2ZXIsIHdoZW4gdGhlIHBhcnNlciBkaXNjYXJkcyBhICJTVFJJTkcxIiBvciBhICJzdHJpbmcxIiwgaXQKKyAgYWxzbyBwcmludHMgaXRzIGxpbmUgbnVtYmVyIHRvICJzdGRvdXQiLiAgSXQgcGVyZm9ybXMgb25seSB0aGUgc2Vjb25kCisgICIlZGVzdHJ1Y3RvciIgaW4gdGhpcyBjYXNlLCBzbyBpdCBpbnZva2VzICJmcmVlIiBvbmx5IG9uY2UuCisKKyAgW0FsdGhvdWdoIHdlIGZhaWxlZCB0byBtZW50aW9uIHRoaXMgaGVyZSBpbiB0aGUgMi4zYSByZWxlYXNlLCB0aGUgZGVmYXVsdAorICAlZGVzdHJ1Y3RvcidzIGFuZCAlcHJpbnRlcidzIHdlcmUgZXhwZXJpbWVudGFsLCBhbmQgdGhleSB3ZXJlIHJld3JpdHRlbiBpbgorICBmdXR1cmUgdmVyc2lvbnMuXQorCisqKiBFeGNlcHQgZm9yIExBTFIoMSkgcGFyc2VycyBpbiBDIHdpdGggUE9TSVggWWFjYyBlbXVsYXRpb24gZW5hYmxlZCAod2l0aCAiLXkiLAorICAiLS15YWNjIiwgb3IgIiV5YWNjIiksIEJpc29uIG5vIGxvbmdlciBnZW5lcmF0ZXMgI2RlZmluZSBzdGF0ZW1lbnRzIGZvcgorICBhc3NvY2lhdGluZyB0b2tlbiBudW1iZXJzIHdpdGggdG9rZW4gbmFtZXMuICBSZW1vdmluZyB0aGUgI2RlZmluZSBzdGF0ZW1lbnRzCisgIGhlbHBzIHRvIHNhbml0aXplIHRoZSBnbG9iYWwgbmFtZXNwYWNlIGR1cmluZyBwcmVwcm9jZXNzaW5nLCBidXQgUE9TSVggWWFjYworICByZXF1aXJlcyB0aGVtLiAgQmlzb24gc3RpbGwgZ2VuZXJhdGVzIGFuIGVudW0gZm9yIHRva2VuIG5hbWVzIGluIGFsbCBjYXNlcy4KKworKiogSGFuZGxpbmcgb2YgdHJhZGl0aW9uYWwgWWFjYyBwcm9sb2d1ZSBibG9ja3MgaXMgbm93IG1vcmUgY29uc2lzdGVudCBidXQKKyAgcG90ZW50aWFsbHkgaW5jb21wYXRpYmxlIHdpdGggcHJldmlvdXMgcmVsZWFzZXMgb2YgQmlzb24uCisKKyAgQXMgYmVmb3JlLCB5b3UgZGVjbGFyZSBwcm9sb2d1ZSBibG9ja3MgaW4geW91ciBncmFtbWFyIGZpbGUgd2l0aCB0aGUKKyAgIiV7IC4uLiAlfSIgc3ludGF4LiAgVG8gZ2VuZXJhdGUgdGhlIHByZS1wcm9sb2d1ZSwgQmlzb24gY29uY2F0ZW5hdGVzIGFsbAorICBwcm9sb2d1ZSBibG9ja3MgdGhhdCB5b3UndmUgZGVjbGFyZWQgYmVmb3JlIHRoZSBmaXJzdCAldW5pb24uICBUbyBnZW5lcmF0ZQorICB0aGUgcG9zdC1wcm9sb2d1ZSwgQmlzb24gY29uY2F0ZW5hdGVzIGFsbCBwcm9sb2d1ZSBibG9ja3MgdGhhdCB5b3UndmUKKyAgZGVjbGFyZWQgYWZ0ZXIgdGhlIGZpcnN0ICV1bmlvbi4KKworICBQcmV2aW91cyByZWxlYXNlcyBvZiBCaXNvbiBpbnNlcnRlZCB0aGUgcHJlLXByb2xvZ3VlIGludG8gYm90aCB0aGUgaGVhZGVyCisgIGZpbGUgYW5kIHRoZSBjb2RlIGZpbGUgaW4gYWxsIGNhc2VzIGV4Y2VwdCBmb3IgTEFMUigxKSBwYXJzZXJzIGluIEMuICBJbiB0aGUKKyAgbGF0dGVyIGNhc2UsIEJpc29uIGluc2VydGVkIGl0IG9ubHkgaW50byB0aGUgY29kZSBmaWxlLiAgRm9yIHBhcnNlcnMgaW4gQysrLAorICB0aGUgcG9pbnQgb2YgaW5zZXJ0aW9uIHdhcyBiZWZvcmUgYW55IHRva2VuIGRlZmluaXRpb25zICh3aGljaCBhc3NvY2lhdGUKKyAgdG9rZW4gbnVtYmVycyB3aXRoIG5hbWVzKS4gIEZvciBwYXJzZXJzIGluIEMsIHRoZSBwb2ludCBvZiBpbnNlcnRpb24gd2FzCisgIGFmdGVyIHRoZSB0b2tlbiBkZWZpbml0aW9ucy4KKworICBOb3csIEJpc29uIG5ldmVyIGluc2VydHMgdGhlIHByZS1wcm9sb2d1ZSBpbnRvIHRoZSBoZWFkZXIgZmlsZS4gIEluIHRoZSBjb2RlCisgIGZpbGUsIGl0IGFsd2F5cyBpbnNlcnRzIGl0IGJlZm9yZSB0aGUgdG9rZW4gZGVmaW5pdGlvbnMuCisKKyoqIEJpc29uIG5vdyBwcm92aWRlcyBhIG1vcmUgZmxleGlibGUgYWx0ZXJuYXRpdmUgdG8gdGhlIHRyYWRpdGlvbmFsIFlhY2MKKyAgcHJvbG9ndWUgYmxvY2tzOiAlYmVmb3JlLWhlYWRlciwgJXN0YXJ0LWhlYWRlciwgJWVuZC1oZWFkZXIsIGFuZAorICAlYWZ0ZXItaGVhZGVyLgorCisgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGRlY2xhcmF0aW9uIG9yZGVyIGluIHRoZSBncmFtbWFyIGZpbGUgcmVmbGVjdHMgdGhlCisgIG9yZGVyIGluIHdoaWNoIEJpc29uIHdpbGwgb3V0cHV0IHRoZXNlIGNvZGUgYmxvY2tzLiAgSG93ZXZlciwgeW91IGFyZSBmcmVlIHRvCisgIGRlY2xhcmUgdGhlc2UgY29kZSBibG9ja3MgaW4geW91ciBncmFtbWFyIGZpbGUgaW4gd2hhdGV2ZXIgb3JkZXIgaXMgbW9zdAorICBjb252ZW5pZW50IGZvciB5b3U6CisKKyAgICAlYmVmb3JlLWhlYWRlciB7CisgICAgICAvKiBCaXNvbiB0cmVhdHMgdGhpcyBibG9jayBsaWtlIGEgcHJlLXByb2xvZ3VlIGJsb2NrOiBpdCBpbnNlcnRzIGl0IGludG8KKyAgICAgICAqIHRoZSBjb2RlIGZpbGUgYmVmb3JlIHRoZSBjb250ZW50cyBvZiB0aGUgaGVhZGVyIGZpbGUuICBJdCBkb2VzICpub3QqCisgICAgICAgKiBpbnNlcnQgaXQgaW50byB0aGUgaGVhZGVyIGZpbGUuICBUaGlzIGlzIGEgZ29vZCBwbGFjZSB0byBwdXQKKyAgICAgICAqICNpbmNsdWRlJ3MgdGhhdCB5b3Ugd2FudCBhdCB0aGUgdG9wIG9mIHlvdXIgY29kZSBmaWxlLiAgQSBjb21tb24KKyAgICAgICAqIGV4YW1wbGUgaXMgJyNpbmNsdWRlICJzeXN0ZW0uaCInLiAgKi8KKyAgICB9CisgICAgJXN0YXJ0LWhlYWRlciB7CisgICAgICAvKiBCaXNvbiBpbnNlcnRzIHRoaXMgYmxvY2sgaW50byBib3RoIHRoZSBoZWFkZXIgZmlsZSBhbmQgdGhlIGNvZGUgZmlsZS4KKyAgICAgICAqIEluIGJvdGggZmlsZXMsIHRoZSBwb2ludCBvZiBpbnNlcnRpb24gaXMgYmVmb3JlIGFueSBCaXNvbi1nZW5lcmF0ZWQKKyAgICAgICAqIHRva2VuLCBzZW1hbnRpYyB0eXBlLCBsb2NhdGlvbiB0eXBlLCBhbmQgY2xhc3MgZGVmaW5pdGlvbnMuICBUaGlzIGlzIGEKKyAgICAgICAqIGdvb2QgcGxhY2UgdG8gZGVmaW5lICV1bmlvbiBkZXBlbmRlbmNpZXMsIGZvciBleGFtcGxlLiAgKi8KKyAgICB9CisgICAgJXVuaW9uIHsKKyAgICAgIC8qIFVubGlrZSB0aGUgdHJhZGl0aW9uYWwgWWFjYyBwcm9sb2d1ZSBibG9ja3MsIHRoZSBvdXRwdXQgb3JkZXIgZm9yIHRoZQorICAgICAgICogbmV3ICUqLWhlYWRlciBibG9ja3MgaXMgbm90IGFmZmVjdGVkIGJ5IHRoZWlyIGRlY2xhcmF0aW9uIHBvc2l0aW9uCisgICAgICAgKiByZWxhdGl2ZSB0byBhbnkgJXVuaW9uIGluIHRoZSBncmFtbWFyIGZpbGUuICAqLworICAgIH0KKyAgICAlZW5kLWhlYWRlciB7CisgICAgICAvKiBCaXNvbiBpbnNlcnRzIHRoaXMgYmxvY2sgaW50byBib3RoIHRoZSBoZWFkZXIgZmlsZSBhbmQgdGhlIGNvZGUgZmlsZS4KKyAgICAgICAqIEluIGJvdGggZmlsZXMsIHRoZSBwb2ludCBvZiBpbnNlcnRpb24gaXMgYWZ0ZXIgdGhlIEJpc29uLWdlbmVyYXRlZAorICAgICAgICogZGVmaW5pdGlvbnMuICBUaGlzIGlzIGEgZ29vZCBwbGFjZSB0byBkZWNsYXJlIG9yIGRlZmluZSBwdWJsaWMKKyAgICAgICAqIGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgdGhhdCBkZXBlbmQgb24gdGhlIEJpc29uLWdlbmVyYXRlZAorICAgICAgICogZGVmaW5pdGlvbnMuICAqLworICAgIH0KKyAgICAlYWZ0ZXItaGVhZGVyIHsKKyAgICAgIC8qIEJpc29uIHRyZWF0cyB0aGlzIGJsb2NrIGxpa2UgYSBwb3N0LXByb2xvZ3VlIGJsb2NrOiBpdCBpbnNlcnRzIGl0IGludG8KKyAgICAgICAqIHRoZSBjb2RlIGZpbGUgYWZ0ZXIgdGhlIGNvbnRlbnRzIG9mIHRoZSBoZWFkZXIgZmlsZS4gIEl0IGRvZXMgKm5vdCoKKyAgICAgICAqIGluc2VydCBpdCBpbnRvIHRoZSBoZWFkZXIgZmlsZS4gIFRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIGRlY2xhcmUgb3IKKyAgICAgICAqIGRlZmluZSBpbnRlcm5hbCBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgZGVwZW5kIG9uIHRoZQorICAgICAgICogQmlzb24tZ2VuZXJhdGVkIGRlZmluaXRpb25zLiAgKi8KKyAgICB9CisKKyAgSWYgeW91IGhhdmUgbXVsdGlwbGUgb2NjdXJyZW5jZXMgb2YgYW55IG9uZSBvZiB0aGUgYWJvdmUgZGVjbGFyYXRpb25zLCBCaXNvbgorICB3aWxsIGNvbmNhdGVuYXRlIHRoZSBjb250ZW50cyBpbiBkZWNsYXJhdGlvbiBvcmRlci4KKworICBbQWx0aG91Z2ggd2UgZmFpbGVkIHRvIG1lbnRpb24gdGhpcyBoZXJlIGluIHRoZSAyLjNhIHJlbGVhc2UsIHRoZSBwcm9sb2d1ZQorICBhbHRlcm5hdGl2ZXMgd2VyZSBleHBlcmltZW50YWwsIGFuZCB0aGV5IHdlcmUgcmV3cml0dGVuIGluIGZ1dHVyZSB2ZXJzaW9ucy5dCisKKyoqIFRoZSBvcHRpb24gIi0tcmVwb3J0PWxvb2stYWhlYWQiIGhhcyBiZWVuIGNoYW5nZWQgdG8gIi0tcmVwb3J0PWxvb2thaGVhZCIuCisgIFRoZSBvbGQgc3BlbGxpbmcgc3RpbGwgd29ya3MsIGJ1dCBpcyBub3QgZG9jdW1lbnRlZCBhbmQgbWF5IGJlIHJlbW92ZWQKKyAgaW4gYSBmdXR1cmUgcmVsZWFzZS4KKworKiBDaGFuZ2VzIGluIHZlcnNpb24gMi4zLCAyMDA2LTA2LTA1OgorCisqKiBHTFIgZ3JhbW1hcnMgc2hvdWxkIG5vdyB1c2UgIllZUkVDT1ZFUklORyAoKSIgaW5zdGVhZCBvZiAiWVlSRUNPVkVSSU5HIiwKICAgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBMQUxSKDEpIGdyYW1tYXJzLgogCi0qIEl0IGlzIG5vdyBkb2N1bWVudGVkIHRoYXQgYW55IGRlZmluaXRpb24gb2YgWVlTVFlQRSBvciBZWUxUWVBFIHNob3VsZAorKiogSXQgaXMgbm93IGRvY3VtZW50ZWQgdGhhdCBhbnkgZGVmaW5pdGlvbiBvZiBZWVNUWVBFIG9yIFlZTFRZUEUgc2hvdWxkCiAgIGJlIHRvIGEgdHlwZSBuYW1lIHRoYXQgZG9lcyBub3QgY29udGFpbiBwYXJlbnRoZXNlcyBvciBicmFja2V0cy4KIAotQ2hhbmdlcyBpbiB2ZXJzaW9uIDIuMiwgMjAwNi0wNS0xOToKKyogQ2hhbmdlcyBpbiB2ZXJzaW9uIDIuMiwgMjAwNi0wNS0xOToKIAotKiBUaGUgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbGwgQmlzb24tZ2VuZXJhdGVkIHBhcnNlcnMgbm93IHBlcm1pdAorKiogVGhlIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYWxsIEJpc29uLWdlbmVyYXRlZCBwYXJzZXJzIG5vdyBwZXJtaXQKICAgdXNpbmcgdGhlIHBhcnNlcnMgaW4gbm9uZnJlZSBwcm9ncmFtcy4gIFByZXZpb3VzbHksIHRoaXMgcGVybWlzc2lvbgogICB3YXMgZ3JhbnRlZCBvbmx5IGZvciBCaXNvbi1nZW5lcmF0ZWQgTEFMUigxKSBwYXJzZXJzIGluIEMuCiAKLSogJW5hbWUtcHJlZml4IGNoYW5nZXMgdGhlIG5hbWVzcGFjZSBuYW1lIGluIEMrKyBvdXRwdXRzLgorKiogJW5hbWUtcHJlZml4IGNoYW5nZXMgdGhlIG5hbWVzcGFjZSBuYW1lIGluIEMrKyBvdXRwdXRzLgogCi0qIFRoZSBDKysgcGFyc2VycyBleHBvcnQgdGhlaXIgdG9rZW5fdHlwZS4KKyoqIFRoZSBDKysgcGFyc2VycyBleHBvcnQgdGhlaXIgdG9rZW5fdHlwZS4KIAotKiBCaXNvbiBub3cgYWxsb3dzIG11bHRpcGxlICV1bmlvbiBkZWNsYXJhdGlvbnMsIGFuZCBjb25jYXRlbmF0ZXMKKyoqIEJpc29uIG5vdyBhbGxvd3MgbXVsdGlwbGUgJXVuaW9uIGRlY2xhcmF0aW9ucywgYW5kIGNvbmNhdGVuYXRlcwogICB0aGVpciBjb250ZW50cyB0b2dldGhlci4KIAotKiBOZXcgd2FybmluZzogdW51c2VkIHZhbHVlcworKiogTmV3IHdhcm5pbmc6IHVudXNlZCB2YWx1ZXMKICAgUmlnaHQtaGFuZCBzaWRlIHN5bWJvbHMgd2hvc2UgdmFsdWVzIGFyZSBub3QgdXNlZCBhcmUgcmVwb3J0ZWQsCiAgIGlmIHRoZSBzeW1ib2xzIGhhdmUgZGVzdHJ1Y3RvcnMuICBGb3IgaW5zdGFuY2U6CiAKICAgICAgZXhwOiBleHAgIj8iIGV4cCAiOiIgZXhwIHsgJDEgPyAkMSA6ICQzOyB9Ci0JfCBleHAgIisiIGV4cAotCTsKKyAgICAgICAgfCBleHAgIisiIGV4cAorICAgICAgICA7CiAKICAgd2lsbCB0cmlnZ2VyIGEgd2FybmluZyBhYm91dCAkJCBhbmQgJDUgaW4gdGhlIGZpcnN0IHJ1bGUsIGFuZCAkMyBpbgogICB0aGUgc2Vjb25kICgkMSBpcyBjb3BpZWQgdG8gJCQgYnkgdGhlIGRlZmF1bHQgcnVsZSkuICBUaGlzIGV4YW1wbGUKICAgbW9zdCBsaWtlbHkgY29udGFpbnMgdGhyZWUgZXJyb3JzLCBhbmQgY291bGQgYmUgcmV3cml0dGVuIGFzOgogCiAgICAgIGV4cDogZXhwICI/IiBleHAgIjoiIGV4cAotCSAgICB7ICQkID0gJDEgPyAkMyA6ICQ1OyBmcmVlICgkMSA/ICQ1IDogJDMpOyBmcmVlICgkMSk7IH0KLQl8IGV4cCAiKyIgZXhwCi0JICAgIHsgJCQgPSAkMSA/ICQxIDogJDM7IGlmICgkMSkgZnJlZSAoJDMpOyB9Ci0JOworICAgICAgICAgICAgeyAkJCA9ICQxID8gJDMgOiAkNTsgZnJlZSAoJDEgPyAkNSA6ICQzKTsgZnJlZSAoJDEpOyB9CisgICAgICAgIHwgZXhwICIrIiBleHAKKyAgICAgICAgICAgIHsgJCQgPSAkMSA/ICQxIDogJDM7IGlmICgkMSkgZnJlZSAoJDMpOyB9CisgICAgICAgIDsKIAogICBIb3dldmVyLCBpZiB0aGUgb3JpZ2luYWwgYWN0aW9ucyB3ZXJlIHJlYWxseSBpbnRlbmRlZCwgbWVtb3J5IGxlYWtzCiAgIGFuZCBhbGwsIHRoZSB3YXJuaW5ncyBjYW4gYmUgc3VwcHJlc3NlZCBieSBsZXR0aW5nIEJpc29uIGJlbGlldmUgdGhlCiAgIHZhbHVlcyBhcmUgdXNlZCwgZS5nLjoKIAogICAgICBleHA6IGV4cCAiPyIgZXhwICI6IiBleHAgeyAkMSA/ICQxIDogJDM7ICh2b2lkKSAoJCQsICQ1KTsgfQotCXwgZXhwICIrIiBleHAgICAgICAgICB7ICQkID0gJDE7ICh2b2lkKSAkMzsgfQotCTsKKyAgICAgICAgfCBleHAgIisiIGV4cCAgICAgICAgIHsgJCQgPSAkMTsgKHZvaWQpICQzOyB9CisgICAgICAgIDsKIAogICBJZiB0aGVyZSBhcmUgbWlkLXJ1bGUgYWN0aW9ucywgdGhlIHdhcm5pbmcgaXMgaXNzdWVkIGlmIG5vIGFjdGlvbgogICB1c2VzIGl0LiAgVGhlIGZvbGxvd2luZyB0cmlnZ2VycyBubyB3YXJuaW5nOiAkMSBhbmQgJDMgYXJlIHVzZWQuCkBAIC01Niw3MCArMTMzMCw3MCBAQAogICBUaGUgd2FybmluZyBpcyBpbnRlbmRlZCB0byBoZWxwIGNhdGNoaW5nIGxvc3QgdmFsdWVzIGFuZCBtZW1vcnkgbGVha3MuCiAgIElmIGEgdmFsdWUgaXMgaWdub3JlZCwgaXRzIGFzc29jaWF0ZWQgbWVtb3J5IHR5cGljYWxseSBpcyBub3QgcmVjbGFpbWVkLgogCi0qICVkZXN0cnVjdG9yIHZzLiBZWUFCT1JULCBZWUFDQ0VQVCwgYW5kIFlZRVJST1IuCisqKiAlZGVzdHJ1Y3RvciB2cy4gWVlBQk9SVCwgWVlBQ0NFUFQsIGFuZCBZWUVSUk9SLgogICBEZXN0cnVjdG9ycyBhcmUgbm93IGNhbGxlZCB3aGVuIHVzZXIgY29kZSBpbnZva2VzIFlZQUJPUlQsIFlZQUNDRVBULAogICBhbmQgWVlFUlJPUiwgZm9yIGFsbCBvYmplY3RzIG9uIHRoZSBzdGFjaywgb3RoZXIgdGhhbiBvYmplY3RzCiAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJpZ2h0LWhhbmQgc2lkZSBvZiB0aGUgY3VycmVudCBydWxlLgogCi0qICVleHBlY3QsICVleHBlY3QtcnIKKyoqICVleHBlY3QsICVleHBlY3QtcnIKICAgSW5jb3JyZWN0IG51bWJlcnMgb2YgZXhwZWN0ZWQgY29uZmxpY3RzIGFyZSBub3cgYWN0dWFsIGVycm9ycywKICAgaW5zdGVhZCBvZiB3YXJuaW5ncy4KIAotKiBHTFIsIFlBQ0MgcGFyc2Vycy4KKyoqIEdMUiwgWUFDQyBwYXJzZXJzLgogICBUaGUgJXBhcnNlLXBhcmFtcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBkZXN0cnVjdG9ycyAoYW5kIHRoZQogICBleHBlcmltZW50YWwgcHJpbnRlcnMpIGFzIHBlciB0aGUgZG9jdW1lbnRhdGlvbi4KIAotKiBCaXNvbiBub3cgd2FybnMgaWYgaXQgZmluZHMgYSBzdHJheSBgJCcgb3IgYEAnIGluIGFuIGFjdGlvbi4KKyoqIEJpc29uIG5vdyB3YXJucyBpZiBpdCBmaW5kcyBhIHN0cmF5ICIkIiBvciAiQCIgaW4gYW4gYWN0aW9uLgogCi0qICVyZXF1aXJlICJWRVJTSU9OIgorKiogJXJlcXVpcmUgIlZFUlNJT04iCiAgIFRoaXMgc3BlY2lmaWVzIHRoYXQgdGhlIGdyYW1tYXIgZmlsZSBkZXBlbmRzIG9uIGZlYXR1cmVzIGltcGxlbWVudGVkCiAgIGluIEJpc29uIHZlcnNpb24gVkVSU0lPTiBvciBoaWdoZXIuCiAKLSogbGFscjEuY2M6IFRoZSB0b2tlbiBhbmQgdmFsdWUgdHlwZXMgYXJlIG5vdyBjbGFzcyBtZW1iZXJzLgorKiogbGFscjEuY2M6IFRoZSB0b2tlbiBhbmQgdmFsdWUgdHlwZXMgYXJlIG5vdyBjbGFzcyBtZW1iZXJzLgogICBUaGUgdG9rZW5zIHdlcmUgZGVmaW5lZCBhcyBmcmVlIGZvcm0gZW51bXMgYW5kIGNwcCBtYWNyb3MuICBZWVNUWVBFCiAgIHdhcyBkZWZpbmVkIGFzIGEgZnJlZSBmb3JtIHVuaW9uLiAgVGhleSBhcmUgbm93IGNsYXNzIG1lbWJlcnM6Ci0gIHRva2VucyBhcmUgZW51bWVyYXRpb25zIG9mIHRoZSBgeXk6OnBhcnNlcjo6dG9rZW4nIHN0cnVjdCwgYW5kIHRoZQotICBzZW1hbnRpYyB2YWx1ZXMgaGF2ZSB0aGUgYHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUnIHR5cGUuCisgIHRva2VucyBhcmUgZW51bWVyYXRpb25zIG9mIHRoZSAieXk6OnBhcnNlcjo6dG9rZW4iIHN0cnVjdCwgYW5kIHRoZQorICBzZW1hbnRpYyB2YWx1ZXMgaGF2ZSB0aGUgInl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUiIHR5cGUuCiAKICAgSWYgeW91IGRvIG5vdCB3YW50IG9yIGNhbiB1cGRhdGUgdG8gdGhpcyBzY2hlbWUsIHRoZSBkaXJlY3RpdmUKLSAgYCVkZWZpbmUgImdsb2JhbF90b2tlbnNfYW5kX3l5c3R5cGUiICIxIicgdHJpZ2dlcnMgdGhlIGdsb2JhbAorICAnJWRlZmluZSAiZ2xvYmFsX3Rva2Vuc19hbmRfeXlzdHlwZSIgIjEiJyB0cmlnZ2VycyB0aGUgZ2xvYmFsCiAgIGRlZmluaXRpb24gb2YgdG9rZW5zIGFuZCBZWVNUWVBFLiAgVGhpcyBjaGFuZ2UgaXMgc3VpdGFibGUgYm90aAogICBmb3IgcHJldmlvdXMgcmVsZWFzZXMgb2YgQmlzb24sIGFuZCB0aGlzIG9uZS4KIAogICBJZiB5b3Ugd2lzaCB0byB1cGRhdGUsIHRoZW4gbWFrZSBzdXJlIG9sZGVyIHZlcnNpb24gb2YgQmlzb24gd2lsbAotICBmYWlsIHVzaW5nIGAlcmVxdWlyZSAiMi4yIicuCisgIGZhaWwgdXNpbmcgJyVyZXF1aXJlICIyLjIiJy4KIAotKiBESkdQUCBzdXBwb3J0IGFkZGVkLgorKiogREpHUFAgc3VwcG9ydCBhZGRlZC4KIAwKLUNoYW5nZXMgaW4gdmVyc2lvbiAyLjEsIDIwMDUtMDktMTY6CisqIENoYW5nZXMgaW4gdmVyc2lvbiAyLjEsIDIwMDUtMDktMTY6CiAKLSogVGhlIEMrKyBsYWxyMS5jYyBza2VsZXRvbiBzdXBwb3J0cyAlbGV4LXBhcmFtLgorKiogVGhlIEMrKyBsYWxyMS5jYyBza2VsZXRvbiBzdXBwb3J0cyAlbGV4LXBhcmFtLgogCi0qIEJpc29uLWdlbmVyYXRlZCBwYXJzZXJzIG5vdyBzdXBwb3J0IHRoZSB0cmFuc2xhdGlvbiBvZiBkaWFnbm9zdGljcyBsaWtlCisqKiBCaXNvbi1nZW5lcmF0ZWQgcGFyc2VycyBub3cgc3VwcG9ydCB0aGUgdHJhbnNsYXRpb24gb2YgZGlhZ25vc3RpY3MgbGlrZQogICAic3ludGF4IGVycm9yIiBpbnRvIGxhbmd1YWdlcyBvdGhlciB0aGFuIEVuZ2xpc2guICBUaGUgZGVmYXVsdAogICBsYW5ndWFnZSBpcyBzdGlsbCBFbmdsaXNoLiAgRm9yIGRldGFpbHMsIHBsZWFzZSBzZWUgdGhlIG5ldwogICBJbnRlcm5hdGlvbmFsaXphdGlvbiBzZWN0aW9uIG9mIHRoZSBCaXNvbiBtYW51YWwuICBTb2Z0d2FyZQogICBkaXN0cmlidXRvcnMgc2hvdWxkIGFsc28gc2VlIHRoZSBuZXcgUEFDS0FHSU5HIGZpbGUuICBUaGFua3MgdG8KICAgQnJ1bm8gSGFpYmxlIGZvciB0aGlzIG5ldyBmZWF0dXJlLgogCi0qIFdvcmRpbmcgaW4gdGhlIEJpc29uLWdlbmVyYXRlZCBwYXJzZXJzIGhhcyBiZWVuIGNoYW5nZWQgc2xpZ2h0bHkgdG8KKyoqIFdvcmRpbmcgaW4gdGhlIEJpc29uLWdlbmVyYXRlZCBwYXJzZXJzIGhhcyBiZWVuIGNoYW5nZWQgc2xpZ2h0bHkgdG8KICAgc2ltcGxpZnkgdHJhbnNsYXRpb24uICBJbiBwYXJ0aWN1bGFyLCB0aGUgbWVzc2FnZSAibWVtb3J5IGV4aGF1c3RlZCIKICAgaGFzIHJlcGxhY2VkICJwYXJzZXIgc3RhY2sgb3ZlcmZsb3ciLCBhcyB0aGUgb2xkIG1lc3NhZ2Ugd2FzIG5vdAogICBhbHdheXMgYWNjdXJhdGUgZm9yIG1vZGVybiBCaXNvbi1nZW5lcmF0ZWQgcGFyc2Vycy4KIAotKiBEZXN0cnVjdG9ycyBhcmUgbm93IGNhbGxlZCB3aGVuIHRoZSBwYXJzZXIgYWJvcnRzLCBmb3IgYWxsIHN5bWJvbHMgbGVmdAorKiogRGVzdHJ1Y3RvcnMgYXJlIG5vdyBjYWxsZWQgd2hlbiB0aGUgcGFyc2VyIGFib3J0cywgZm9yIGFsbCBzeW1ib2xzIGxlZnQKICAgYmVoaW5kIG9uIHRoZSBzdGFjay4gIEFsc28sIHRoZSBzdGFydCBzeW1ib2wgaXMgbm93IGRlc3Ryb3llZCBhZnRlciBhCiAgIHN1Y2Nlc3NmdWwgcGFyc2UuICBJbiBib3RoIGNhc2VzLCB0aGUgYmVoYXZpb3Igd2FzIGZvcm1lcmx5IGluY29uc2lzdGVudC4KIAotKiBXaGVuIGdlbmVyYXRpbmcgdmVyYm9zZSBkaWFnbm9zdGljcywgQmlzb24tZ2VuZXJhdGVkIHBhcnNlcnMgbm8gbG9uZ2VyCisqKiBXaGVuIGdlbmVyYXRpbmcgdmVyYm9zZSBkaWFnbm9zdGljcywgQmlzb24tZ2VuZXJhdGVkIHBhcnNlcnMgbm8gbG9uZ2VyCiAgIHF1b3RlIHRoZSBsaXRlcmFsIHN0cmluZ3MgYXNzb2NpYXRlZCB3aXRoIHRva2Vucy4gIEZvciBleGFtcGxlLCBmb3IKICAgYSBzeW50YXggZXJyb3IgYXNzb2NpYXRlZCB3aXRoICcldG9rZW4gTlVNICJudW1iZXIiJyB0aGV5IG1pZ2h0CiAgIHByaW50ICdzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyJyBpbnN0ZWFkIG9mICdzeW50YXggZXJyb3IsCiAgIHVuZXhwZWN0ZWQgIm51bWJlciInLgogDAotQ2hhbmdlcyBpbiB2ZXJzaW9uIDIuMCwgMjAwNC0xMi0yNToKKyogQ2hhbmdlcyBpbiB2ZXJzaW9uIDIuMCwgMjAwNC0xMi0yNToKIAotKiBQb3NzaWJseS1pbmNvbXBhdGlibGUgY2hhbmdlcworKiogUG9zc2libHktaW5jb21wYXRpYmxlIGNoYW5nZXMKIAogICAtIEJpc29uLWdlbmVyYXRlZCBwYXJzZXJzIG5vIGxvbmdlciBkZWZhdWx0IHRvIHVzaW5nIHRoZSBhbGxvY2EgZnVuY3Rpb24KICAgICAod2hlbiBhdmFpbGFibGUpIHRvIGV4dGVuZCB0aGUgcGFyc2VyIHN0YWNrLCBkdWUgdG8gd2lkZXNwcmVhZApAQCAtMTQ0LDcgKzE0MTgsNyBAQAogCiAgIC0gTlVMIGJ5dGVzIGFyZSBubyBsb25nZXIgYWxsb3dlZCBpbiBCaXNvbiBzdHJpbmcgbGl0ZXJhbHMsIHVuZm9ydHVuYXRlbHkuCiAKLSogTmV3IGZlYXR1cmVzCisqKiBOZXcgZmVhdHVyZXMKIAogICAtIEdMUiBncmFtbWFycyBub3cgc3VwcG9ydCBsb2NhdGlvbnMuCiAKQEAgLTE1NSwxOSArMTQyOSwxOCBAQAogICAtIEEgbmV3IGRpcmVjdGl2ZSAiJWV4cGVjdC1yciBOIiBzcGVjaWZpZXMgdGhlIGV4cGVjdGVkIG51bWJlciBvZgogICAgIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3RzIGluIEdMUiBwYXJzZXJzLgogCi0gIC0gJXRva2VuIG51bWJlcnMgY2FuIG5vdyBiZSBoZXhhZGVjaW1hbCBpbnRlZ2VycywgZS5nLiwgYCV0b2tlbiBGT08gMHgxMmQnLgorICAtICV0b2tlbiBudW1iZXJzIGNhbiBub3cgYmUgaGV4YWRlY2ltYWwgaW50ZWdlcnMsIGUuZy4sICIldG9rZW4gRk9PIDB4MTJkIi4KICAgICBUaGlzIGlzIGEgR05VIGV4dGVuc2lvbi4KIAotICAtIFRoZSBvcHRpb24gYC0tcmVwb3J0PWxvb2thaGVhZCcgd2FzIGNoYW5nZWQgdG8gYC0tcmVwb3J0PWxvb2stYWhlYWQnLgotICAgIFRoZSBvbGQgc3BlbGxpbmcgc3RpbGwgd29ya3MsIGJ1dCBpcyBub3QgZG9jdW1lbnRlZCBhbmQgd2lsbCBiZQotICAgIHJlbW92ZWQuCisgIC0gVGhlIG9wdGlvbiAiLS1yZXBvcnQ9bG9va2FoZWFkIiB3YXMgY2hhbmdlZCB0byAiLS1yZXBvcnQ9bG9vay1haGVhZCIuCisgICAgW0hvd2V2ZXIsIHRoaXMgd2FzIGNoYW5nZWQgYmFjayBhZnRlciAyLjMuXQogCiAgIC0gRXhwZXJpbWVudGFsICVkZXN0cnVjdG9yIHN1cHBvcnQgaGFzIGJlZW4gYWRkZWQgdG8gbGFscjEuY2MuCiAKICAgLSBOZXcgY29uZmlndXJlIG9wdGlvbiAtLWRpc2FibGUteWFjYywgdG8gZGlzYWJsZSBpbnN0YWxsYXRpb24gb2YgdGhlCiAgICAgeWFjYyBjb21tYW5kIGFuZCAtbHkgbGlicmFyeSBpbnRyb2R1Y2VkIGluIDEuODc1IGZvciBQT1NJWCBjb25mb3JtYW5jZS4KIAotKiBCdWcgZml4ZXMKKyoqIEJ1ZyBmaXhlcwogCiAgIC0gRm9yIG5vdywgJWV4cGVjdC1jb3VudCB2aW9sYXRpb25zIGFyZSBub3cganVzdCB3YXJuaW5ncywgbm90IGVycm9ycy4KICAgICBUaGlzIGlzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQmlzb24gMS43NSBhbmQgZWFybGllciAod2hlbiB0aGVyZSBhcmUKQEAgLTE4MSwxMiArMTQ1NCwxMiBAQAogCiAgIC0gU2VtaWNvbG9ucyBhcmUgbm93IGFsbG93ZWQgYmVmb3JlICJ8IiBpbiBncmFtbWFyIHJ1bGVzLCBhcyBQT1NJWCByZXF1aXJlcy4KIAwKLUNoYW5nZXMgaW4gdmVyc2lvbiAxLjg3NSwgMjAwMy0wMS0wMToKKyogQ2hhbmdlcyBpbiB2ZXJzaW9uIDEuODc1LCAyMDAzLTAxLTAxOgogCi0qIFRoZSBkb2N1bWVudGF0aW9uIGxpY2Vuc2UgaGFzIGJlZW4gdXBncmFkZWQgdG8gdmVyc2lvbiAxLjIKKyoqIFRoZSBkb2N1bWVudGF0aW9uIGxpY2Vuc2UgaGFzIGJlZW4gdXBncmFkZWQgdG8gdmVyc2lvbiAxLjIKICAgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZS4KIAotKiBzeW50YXggZXJyb3IgcHJvY2Vzc2luZworKiogc3ludGF4IGVycm9yIHByb2Nlc3NpbmcKIAogICAtIEluIFlhY2Mtc3R5bGUgcGFyc2VycyBZWUxMT0NfREVGQVVMVCBpcyBub3cgdXNlZCB0byBjb21wdXRlIGVycm9yCiAgICAgbG9jYXRpb25zIHRvby4gIFRoaXMgZml4ZXMgYnVncyBpbiBlcnJvci1sb2NhdGlvbiBjb21wdXRhdGlvbi4KQEAgLTIwMSwxNiArMTQ3NCwxNiBAQAogICAtICNkZWZpbmluZyB5eWVycm9yIHRvIHN0ZWFsIGludGVybmFsIHZhcmlhYmxlcyBpcyBkaXNjb3VyYWdlZC4KICAgICBJdCBpcyBub3QgZ3VhcmFudGVlZCB0byB3b3JrIGZvcmV2ZXIuCiAKLSogUE9TSVggY29uZm9ybWFuY2UKKyoqIFBPU0lYIGNvbmZvcm1hbmNlCiAKICAgLSBTZW1pY29sb25zIGFyZSBvbmNlIGFnYWluIG9wdGlvbmFsIGF0IHRoZSBlbmQgb2YgZ3JhbW1hciBydWxlcy4KICAgICBUaGlzIHJldmVydHMgdG8gdGhlIGJlaGF2aW9yIG9mIEJpc29uIDEuMzMgYW5kIGVhcmxpZXIsIGFuZCBpbXByb3ZlcwogICAgIGNvbXBhdGliaWxpdHkgd2l0aCBZYWNjLgogCi0gIC0gYHBhcnNlIGVycm9yJyAtPiBgc3ludGF4IGVycm9yJwotICAgIEJpc29uIG5vdyB1bmlmb3JtbHkgdXNlcyB0aGUgdGVybSBgc3ludGF4IGVycm9yJzsgZm9ybWVybHksIHRoZSBjb2RlCi0gICAgYW5kIG1hbnVhbCBzb21ldGltZXMgdXNlZCB0aGUgdGVybSBgcGFyc2UgZXJyb3InIGluc3RlYWQuICBQT1NJWAotICAgIHJlcXVpcmVzIGBzeW50YXggZXJyb3InIGluIGRpYWdub3N0aWNzLCBhbmQgaXQgd2FzIHRob3VnaHQgYmV0dGVyIHRvCisgIC0gInBhcnNlIGVycm9yIiAtPiAic3ludGF4IGVycm9yIgorICAgIEJpc29uIG5vdyB1bmlmb3JtbHkgdXNlcyB0aGUgdGVybSAic3ludGF4IGVycm9yIjsgZm9ybWVybHksIHRoZSBjb2RlCisgICAgYW5kIG1hbnVhbCBzb21ldGltZXMgdXNlZCB0aGUgdGVybSAicGFyc2UgZXJyb3IiIGluc3RlYWQuICBQT1NJWAorICAgIHJlcXVpcmVzICJzeW50YXggZXJyb3IiIGluIGRpYWdub3N0aWNzLCBhbmQgaXQgd2FzIHRob3VnaHQgYmV0dGVyIHRvCiAgICAgYmUgY29uc2lzdGVudC4KIAogICAtIFRoZSBkb2N1bWVudGF0aW9uIG5vdyBlbXBoYXNpemVzIHRoYXQgeXlsZXggYW5kIHl5ZXJyb3IgbXVzdCBiZQpAQCAtMjIzLDcgKzE0OTYsNyBAQAogICAgIG91dHB1dCBhcyAiZm9vXFxiYXIueSIuCiAKICAgLSBZYWNjIGNvbW1hbmQgYW5kIGxpYnJhcnkgbm93IGF2YWlsYWJsZQotICAgIFRoZSBCaXNvbiBkaXN0cmlidXRpb24gbm93IGluc3RhbGxzIGEgYHlhY2MnIGNvbW1hbmQsIGFzIFBPU0lYIHJlcXVpcmVzLgorICAgIFRoZSBCaXNvbiBkaXN0cmlidXRpb24gbm93IGluc3RhbGxzIGEgInlhY2MiIGNvbW1hbmQsIGFzIFBPU0lYIHJlcXVpcmVzLgogICAgIEFsc28sIEJpc29uIG5vdyBpbnN0YWxscyBhIHNtYWxsIGxpYnJhcnkgbGlieS5hIGNvbnRhaW5pbmcKICAgICBpbXBsZW1lbnRhdGlvbnMgb2YgWWFjYy1jb21wYXRpYmxlIHl5ZXJyb3IgYW5kIG1haW4gZnVuY3Rpb25zLgogICAgIFRoaXMgbGlicmFyeSBpcyBub3JtYWxseSBub3QgdXNlZnVsLCBidXQgUE9TSVggcmVxdWlyZXMgaXQuCkBAIC0yMzQsODAgKzE1MDcsMTA3IEBACiAgICAgdXNpbmcgdHlwZWRlZiBpbnN0ZWFkIG9mIGRlZmluaW5nIGl0IGFzIGEgbWFjcm8uCiAgICAgRm9yIGNvbnNpc3RlbmN5LCBZWUxUWVBFIGlzIGFsc28gZGVjbGFyZWQgaW5zdGVhZCBvZiBkZWZpbmVkLgogCi0qIE90aGVyIGNvbXBhdGliaWxpdHkgaXNzdWVzCisqKiBPdGhlciBjb21wYXRpYmlsaXR5IGlzc3VlcwogCi0gIC0gJXVuaW9uIGRpcmVjdGl2ZXMgY2FuIG5vdyBoYXZlIGEgdGFnIGJlZm9yZSB0aGUgYHsnLCBlLmcuLCB0aGUKLSAgICBkaXJlY3RpdmUgYCV1bmlvbiBmb28gey4uLn0nIG5vdyBnZW5lcmF0ZXMgdGhlIEMgY29kZQotICAgIGB0eXBlZGVmIHVuaW9uIGZvbyB7IC4uLiB9IFlZU1RZUEU7JzsgdGhpcyBpcyBmb3IgWWFjYyBjb21wYXRpYmlsaXR5LgotICAgIFRoZSBkZWZhdWx0IHVuaW9uIHRhZyBpcyBgWVlTVFlQRScsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggU29sYXJpcyA5IFlhY2MuCi0gICAgRm9yIGNvbnNpc3RlbmN5LCBZWUxUWVBFJ3Mgc3RydWN0IHRhZyBpcyBub3cgYFlZTFRZUEUnIG5vdCBgeXlsdHlwZScuCisgIC0gJXVuaW9uIGRpcmVjdGl2ZXMgY2FuIG5vdyBoYXZlIGEgdGFnIGJlZm9yZSB0aGUgInsiLCBlLmcuLCB0aGUKKyAgICBkaXJlY3RpdmUgIiV1bmlvbiBmb28gey4uLn0iIG5vdyBnZW5lcmF0ZXMgdGhlIEMgY29kZQorICAgICJ0eXBlZGVmIHVuaW9uIGZvbyB7IC4uLiB9IFlZU1RZUEU7IjsgdGhpcyBpcyBmb3IgWWFjYyBjb21wYXRpYmlsaXR5LgorICAgIFRoZSBkZWZhdWx0IHVuaW9uIHRhZyBpcyAiWVlTVFlQRSIsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggU29sYXJpcyA5IFlhY2MuCisgICAgRm9yIGNvbnNpc3RlbmN5LCBZWUxUWVBFJ3Mgc3RydWN0IHRhZyBpcyBub3cgIllZTFRZUEUiIG5vdCAieXlsdHlwZSIuCiAgICAgVGhpcyBpcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGJvdGggWWFjYyBhbmQgQmlzb24gMS4zNS4KIAotICAtIGA7JyBpcyBvdXRwdXQgYmVmb3JlIHRoZSB0ZXJtaW5hdGluZyBgfScgb2YgYW4gYWN0aW9uLCBmb3IKKyAgLSAiOyIgaXMgb3V0cHV0IGJlZm9yZSB0aGUgdGVybWluYXRpbmcgIn0iIG9mIGFuIGFjdGlvbiwgZm9yCiAgICAgY29tcGF0aWJpbGl0eSB3aXRoIEJpc29uIDEuMzUuCiAKICAgLSBCaXNvbiBub3cgdXNlcyBhIFlhY2Mtc3R5bGUgZm9ybWF0IGZvciBjb25mbGljdCByZXBvcnRzLCBlLmcuLAotICAgIGBjb25mbGljdHM6IDIgc2hpZnQvcmVkdWNlLCAxIHJlZHVjZS9yZWR1Y2UnLgorICAgICJjb25mbGljdHM6IDIgc2hpZnQvcmVkdWNlLCAxIHJlZHVjZS9yZWR1Y2UiLgogCi0gIC0gYHl5c3R5cGUnIGFuZCBgeXlsdHlwZScgYXJlIG5vdyBvYnNvbGVzY2VudCBtYWNyb3MgaW5zdGVhZCBvZiBiZWluZworICAtICJ5eXN0eXBlIiBhbmQgInl5bHR5cGUiIGFyZSBub3cgb2Jzb2xlc2NlbnQgbWFjcm9zIGluc3RlYWQgb2YgYmVpbmcKICAgICB0eXBlZGVmcyBvciB0YWdzOyB0aGV5IGFyZSBubyBsb25nZXIgZG9jdW1lbnRlZCBhbmQgYXJlIHBsYW5uZWQgdG8gYmUKICAgICB3aXRoZHJhd24gaW4gYSBmdXR1cmUgcmVsZWFzZS4KIAotKiBHTFIgcGFyc2VyIG5vdGVzCisqKiBHTFIgcGFyc2VyIG5vdGVzCiAKICAgLSBHTFIgYW5kIGlubGluZQogICAgIFVzZXJzIG9mIEJpc29uIGhhdmUgdG8gZGVjaWRlIGhvdyB0aGV5IGhhbmRsZSB0aGUgcG9ydGFiaWxpdHkgb2YgdGhlCi0gICAgQyBrZXl3b3JkIGBpbmxpbmUnLgorICAgIEMga2V5d29yZCAiaW5saW5lIi4KIAotICAtIGBwYXJzaW5nIHN0YWNrIG92ZXJmbG93Li4uJyAtPiBgcGFyc2VyIHN0YWNrIG92ZXJmbG93JwotICAgIEdMUiBwYXJzZXJzIG5vdyByZXBvcnQgYHBhcnNlciBzdGFjayBvdmVyZmxvdycgYXMgcGVyIHRoZSBCaXNvbiBtYW51YWwuCisgIC0gInBhcnNpbmcgc3RhY2sgb3ZlcmZsb3cuLi4iIC0+ICJwYXJzZXIgc3RhY2sgb3ZlcmZsb3ciCisgICAgR0xSIHBhcnNlcnMgbm93IHJlcG9ydCAicGFyc2VyIHN0YWNrIG92ZXJmbG93IiBhcyBwZXIgdGhlIEJpc29uIG1hbnVhbC4KIAotKiBCaXNvbiBub3cgd2FybnMgaWYgaXQgZGV0ZWN0cyBjb25mbGljdGluZyBvdXRwdXRzIHRvIHRoZSBzYW1lIGZpbGUsCi0gIGUuZy4sIGl0IGdlbmVyYXRlcyBhIHdhcm5pbmcgZm9yIGBiaXNvbiAtZCAtbyBmb28uaCBmb28ueScgc2luY2UKKyoqICVwYXJzZS1wYXJhbSBhbmQgJWxleC1wYXJhbQorICBUaGUgbWFjcm9zIFlZUEFSU0VfUEFSQU0gYW5kIFlZTEVYX1BBUkFNIHByb3ZpZGUgYSBtZWFucyB0byBwYXNzCisgIGFkZGl0aW9uYWwgY29udGV4dCB0byB5eXBhcnNlIGFuZCB5eWxleC4gIFRoZXkgc3VmZmVyIGZyb20gc2V2ZXJhbAorICBzaG9ydGNvbWluZ3M6CisKKyAgLSBhIHNpbmdsZSBhcmd1bWVudCBvbmx5IGNhbiBiZSBhZGRlZCwKKyAgLSB0aGVpciB0eXBlcyBhcmUgd2VhayAodm9pZCAqKSwKKyAgLSB0aGlzIGNvbnRleHQgaXMgbm90IHBhc3NlZCB0byBhbmNpbGxhcnkgZnVuY3Rpb25zIHN1Y2ggYXMgeXllcnJvciwKKyAgLSBvbmx5IHlhY2MuYyBwYXJzZXJzIHN1cHBvcnQgdGhlbS4KKworICBUaGUgbmV3ICVwYXJzZS1wYXJhbS8lbGV4LXBhcmFtIGRpcmVjdGl2ZXMgcHJvdmlkZSBhIG1vcmUgcHJlY2lzZSBjb250cm9sLgorICBGb3IgaW5zdGFuY2U6CisKKyAgICAlcGFyc2UtcGFyYW0ge2ludCAqbmFzdGluZXNzfQorICAgICVsZXgtcGFyYW0gICB7aW50ICpuYXN0aW5lc3N9CisgICAgJXBhcnNlLXBhcmFtIHtpbnQgKnJhbmRvbW5lc3N9CisKKyAgcmVzdWx0cyBpbiB0aGUgZm9sbG93aW5nIHNpZ25hdHVyZXM6CisKKyAgICBpbnQgeXlsZXggICAoaW50ICpuYXN0aW5lc3MpOworICAgIGludCB5eXBhcnNlIChpbnQgKm5hc3RpbmVzcywgaW50ICpyYW5kb21uZXNzKTsKKworICBvciwgaWYgYm90aCAlcHVyZS1wYXJzZXIgYW5kICVsb2NhdGlvbnMgYXJlIHVzZWQ6CisKKyAgICBpbnQgeXlsZXggICAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwLCBpbnQgKm5hc3RpbmVzcyk7CisgICAgaW50IHl5cGFyc2UgKGludCAqbmFzdGluZXNzLCBpbnQgKnJhbmRvbW5lc3MpOworCisqKiBCaXNvbiBub3cgd2FybnMgaWYgaXQgZGV0ZWN0cyBjb25mbGljdGluZyBvdXRwdXRzIHRvIHRoZSBzYW1lIGZpbGUsCisgIGUuZy4sIGl0IGdlbmVyYXRlcyBhIHdhcm5pbmcgZm9yICJiaXNvbiAtZCAtbyBmb28uaCBmb28ueSIgc2luY2UKICAgdGhhdCBjb21tYW5kIG91dHB1dHMgYm90aCBjb2RlIGFuZCBoZWFkZXIgdG8gZm9vLmguCiAKLSogI2xpbmUgaW4gb3V0cHV0IGZpbGVzCisqKiAjbGluZSBpbiBvdXRwdXQgZmlsZXMKICAgLSAtLW5vLWxpbmUgd29ya3MgcHJvcGVybHkuCiAKLSogQmlzb24gY2FuIG5vIGxvbmdlciBiZSBidWlsdCBieSBhIEsmUiBDIGNvbXBpbGVyOyBpdCByZXF1aXJlcyBDODkgb3IKKyoqIEJpc29uIGNhbiBubyBsb25nZXIgYmUgYnVpbHQgYnkgYSBLJlIgQyBjb21waWxlcjsgaXQgcmVxdWlyZXMgQzg5IG9yCiAgIGxhdGVyIHRvIGJlIGJ1aWx0LiAgVGhpcyBjaGFuZ2Ugb3JpZ2luYWxseSB0b29rIHBsYWNlIGEgZmV3IHZlcnNpb25zCiAgIGFnbywgYnV0IG5vYm9keSBub3RpY2VkIHVudGlsIHdlIHJlY2VudGx5IGFza2VkIHNvbWVvbmUgdG8gdHJ5CiAgIGJ1aWxkaW5nIEJpc29uIHdpdGggYSBLJlIgQyBjb21waWxlci4KIAwKLUNoYW5nZXMgaW4gdmVyc2lvbiAxLjc1LCAyMDAyLTEwLTE0OgorKiBDaGFuZ2VzIGluIHZlcnNpb24gMS43NSwgMjAwMi0xMC0xNDoKIAotKiBCaXNvbiBzaG91bGQgbm93IHdvcmsgb24gNjQtYml0IGhvc3RzLgorKiogQmlzb24gc2hvdWxkIG5vdyB3b3JrIG9uIDY0LWJpdCBob3N0cy4KIAotKiBJbmRvbmVzaWFuIHRyYW5zbGF0aW9uIHRoYW5rcyB0byBUZWRpIEhlcml5YW50by4KKyoqIEluZG9uZXNpYW4gdHJhbnNsYXRpb24gdGhhbmtzIHRvIFRlZGkgSGVyaXlhbnRvLgogCi0qIEdMUiBwYXJzZXJzCisqKiBHTFIgcGFyc2VycwogICBGaXggc3B1cmlvdXMgcGFyc2UgZXJyb3JzLgogCi0qIFB1cmUgcGFyc2VycworKiogUHVyZSBwYXJzZXJzCiAgIFNvbWUgcGVvcGxlIHJlZGVmaW5lIHl5ZXJyb3IgdG8gc3RlYWwgeXlwYXJzZScgcHJpdmF0ZSB2YXJpYWJsZXMuCiAgIFJlZW5hYmxlIHRoaXMgdHJpY2sgdW50aWwgYW4gb2ZmaWNpYWwgZmVhdHVyZSByZXBsYWNlcyBpdC4KIAotKiBUeXBlIENsYXNoZXMKKyoqIFR5cGUgQ2xhc2hlcwogICBJbiBhZ3JlZW1lbnQgd2l0aCBQT1NJWCBhbmQgd2l0aCBvdGhlciBZYWNjcywgbGVhdmluZyBhIGRlZmF1bHQKICAgYWN0aW9uIGlzIHZhbGlkIHdoZW4gJCQgaXMgdW50eXBlZCwgYW5kICQxIHR5cGVkOgogCi0JdW50eXBlZDogLi4uIHR5cGVkOworICAgICAgICB1bnR5cGVkOiAuLi4gdHlwZWQ7CiAKICAgYnV0IHRoZSBjb252ZXJzZSByZW1haW5zIGFuIGVycm9yOgogCi0JdHlwZWQ6IC4uLiB1bnR5cGVkOworICAgICAgICB0eXBlZDogLi4uIHVudHlwZWQ7CiAKLSogVmFsdWVzIG9mIG1pZC1ydWxlIGFjdGlvbnMKKyoqIFZhbHVlcyBvZiBtaWQtcnVsZSBhY3Rpb25zCiAgIFRoZSBmb2xsb3dpbmcgY29kZToKIAotCWZvbzogeyAuLi4gfSB7ICQkID0gJDE7IH0gLi4uCisgICAgICAgIGZvbzogeyAuLi4gfSB7ICQkID0gJDE7IH0gLi4uCiAKICAgd2FzIGluY29ycmVjdGx5IHJlamVjdGVkOiAkMSBpcyBkZWZpbmVkIGluIHRoZSBzZWNvbmQgbWlkLXJ1bGUKICAgYWN0aW9uLCBhbmQgaXMgZXF1YWwgdG8gdGhlICQkIG9mIHRoZSBmaXJzdCBtaWQtcnVsZSBhY3Rpb24uCiAMCi1DaGFuZ2VzIGluIHZlcnNpb24gMS41MCwgMjAwMi0xMC0wNDoKKyogQ2hhbmdlcyBpbiB2ZXJzaW9uIDEuNTAsIDIwMDItMTAtMDQ6CiAKLSogR0xSIHBhcnNpbmcKKyoqIEdMUiBwYXJzaW5nCiAgIFRoZSBkZWNsYXJhdGlvbgogICAgICAlZ2xyLXBhcnNlcgogICBjYXVzZXMgQmlzb24gdG8gcHJvZHVjZSBhIEdlbmVyYWxpemVkIExSIChHTFIpIHBhcnNlciwgY2FwYWJsZSBvZiBoYW5kbGluZwpAQCAtMzE4LDMzICsxNjE4LDMzIEBACiAgIFVuZm9ydHVuYXRlbHkgQmlzb24gMS41MCBkb2VzIG5vdCB3b3JrIHByb3Blcmx5IG9uIDY0LWJpdCBob3N0cwogICBsaWtlIHRoZSBBbHBoYSwgc28gcGxlYXNlIHN0aWNrIHRvIDMyLWJpdCBob3N0cyBmb3Igbm93LgogCi0qIE91dHB1dCBEaXJlY3RvcnkKKyoqIE91dHB1dCBEaXJlY3RvcnkKICAgV2hlbiBub3QgaW4gWWFjYyBjb21wYXRpYmlsaXR5IG1vZGUsIHdoZW4gdGhlIG91dHB1dCBmaWxlIHdhcyBub3QKLSAgc3BlY2lmaWVkLCBydW5uaW5nIGBiaXNvbiBmb28vYmFyLnknIGNyZWF0ZWQgYGZvby9iYXIuYycuICBJdAotICBub3cgY3JlYXRlcyBgYmFyLmMnLgorICBzcGVjaWZpZWQsIHJ1bm5pbmcgImJpc29uIGZvby9iYXIueSIgY3JlYXRlZCAiZm9vL2Jhci5jIi4gIEl0CisgIG5vdyBjcmVhdGVzICJiYXIuYyIuCiAKLSogVW5kZWZpbmVkIHRva2VuCisqKiBVbmRlZmluZWQgdG9rZW4KICAgVGhlIHVuZGVmaW5lZCB0b2tlbiB3YXMgc3lzdGVtYXRpY2FsbHkgbWFwcGVkIHRvIDIgd2hpY2ggcHJldmVudGVkCiAgIHRoZSB1c2Ugb2YgMiBieSB0aGUgdXNlci4gIFRoaXMgaXMgbm8gbG9uZ2VyIHRoZSBjYXNlLgogCi0qIFVua25vd24gdG9rZW4gbnVtYmVycworKiogVW5rbm93biB0b2tlbiBudW1iZXJzCiAgIElmIHl5bGV4IHJldHVybmVkIGFuIG91dCBvZiByYW5nZSB2YWx1ZSwgeXlwYXJzZSBjb3VsZCBkaWUuICBUaGlzIGlzCiAgIG5vIGxvbmdlciB0aGUgY2FzZS4KIAotKiBFcnJvciB0b2tlbgorKiogRXJyb3IgdG9rZW4KICAgQWNjb3JkaW5nIHRvIFBPU0lYLCB0aGUgZXJyb3IgdG9rZW4gbXVzdCBiZSAyNTYuCiAgIEJpc29uIGV4dGVuZHMgdGhpcyByZXF1aXJlbWVudCBieSBtYWtpbmcgaXQgYSBwcmVmZXJlbmNlOiAqaWYqIHRoZQogICB1c2VyIHNwZWNpZmllZCB0aGF0IG9uZSBvZiBoZXIgdG9rZW5zIGlzIG51bWJlcmVkIDI1NiwgdGhlbiBlcnJvcgogICB3aWxsIGJlIG1hcHBlZCBvbnRvIGFub3RoZXIgbnVtYmVyLgogCi0qIFZlcmJvc2UgZXJyb3IgbWVzc2FnZXMKLSAgVGhleSBubyBsb25nZXIgcmVwb3J0IGAuLi4sIGV4cGVjdGluZyBlcnJvciBvci4uLicgZm9yIHN0YXRlcyB3aGVyZQorKiogVmVyYm9zZSBlcnJvciBtZXNzYWdlcworICBUaGV5IG5vIGxvbmdlciByZXBvcnQgIi4uLiwgZXhwZWN0aW5nIGVycm9yIG9yLi4uIiBmb3Igc3RhdGVzIHdoZXJlCiAgIGVycm9yIHJlY292ZXJ5IGlzIHBvc3NpYmxlLgogCi0qIEVuZCB0b2tlbgotICBEZWZhdWx0cyB0byBgJGVuZCcgaW5zdGVhZCBvZiBgJCcuCisqKiBFbmQgdG9rZW4KKyAgRGVmYXVsdHMgdG8gIiRlbmQiIGluc3RlYWQgb2YgIiQiLgogCi0qIEVycm9yIHJlY292ZXJ5IG5vdyBjb25mb3JtcyB0byBkb2N1bWVudGF0aW9uIGFuZCB0byBQT1NJWAorKiogRXJyb3IgcmVjb3Zlcnkgbm93IGNvbmZvcm1zIHRvIGRvY3VtZW50YXRpb24gYW5kIHRvIFBPU0lYCiAgIFdoZW4gYSBCaXNvbi1nZW5lcmF0ZWQgcGFyc2VyIGVuY291bnRlcnMgYSBzeW50YXggZXJyb3IsIGl0IG5vdyBwb3BzCiAgIHRoZSBzdGFjayB1bnRpbCBpdCBmaW5kcyBhIHN0YXRlIHRoYXQgYWxsb3dzIHNoaWZ0aW5nIHRoZSBlcnJvcgogICB0b2tlbi4gIEZvcm1lcmx5LCBpdCBwb3BwZWQgdGhlIHN0YWNrIHVudGlsIGl0IGZvdW5kIGEgc3RhdGUgdGhhdApAQCAtMzU0LDEwMSArMTY1NCwxMDQgQEAKICAgUGF1bCBFZ2dlcnQsICJSZWR1Y3Rpb25zIGR1cmluZyBCaXNvbiBlcnJvciBoYW5kbGluZyIgKDIwMDItMDUtMjApCiAgIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDItMDUvbXNnMDAwMzguaHRtbD4uCiAKLSogVHJhY2VzCisqKiBUcmFjZXMKICAgUG9wcGVkIHRva2VucyBhbmQgbm9udGVybWluYWxzIGFyZSBub3cgcmVwb3J0ZWQuCiAKLSogTGFyZ2VyIGdyYW1tYXJzCisqKiBMYXJnZXIgZ3JhbW1hcnMKICAgTGFyZ2VyIGdyYW1tYXJzIGFyZSBub3cgc3VwcG9ydGVkIChsYXJnZXIgdG9rZW4gbnVtYmVycywgbGFyZ2VyIGdyYW1tYXIKICAgc2l6ZSAoPSBzdW0gb2YgdGhlIExIUyBhbmQgUkhTIGxlbmd0aHMpLCBsYXJnZXIgTEFMUiB0YWJsZXMpLgogICBGb3JtZXJseSwgbWFueSBvZiB0aGVzZSBudW1iZXJzIHJhbiBhZm91bCBvZiAxNi1iaXQgbGltaXRzOwogICBub3cgdGhlc2UgbGltaXRzIGFyZSAzMiBiaXRzIG9uIG1vc3QgaG9zdHMuCiAKLSogRXhwbGljaXQgaW5pdGlhbCBydWxlCisqKiBFeHBsaWNpdCBpbml0aWFsIHJ1bGUKICAgQmlzb24gdXNlZCB0byBwbGF5IGhhY2tzIHdpdGggdGhlIGluaXRpYWwgcnVsZSwgd2hpY2ggdGhlIHVzZXIgZG9lcwogICBub3Qgd3JpdGUuICBJdCBpcyBub3cgZXhwbGljaXQsIGFuZCB2aXNpYmxlIGluIHRoZSByZXBvcnRzIGFuZAogICBncmFwaHMgYXMgcnVsZSAwLgogCi0qIFVzZWxlc3MgcnVsZXMKKyoqIFVzZWxlc3MgcnVsZXMKICAgQmVmb3JlLCBCaXNvbiByZXBvcnRlZCB0aGUgdXNlbGVzcyBydWxlcywgYnV0LCBhbHRob3VnaCBub3QgdXNlZCwKICAgaW5jbHVkZWQgdGhlbSBpbiB0aGUgcGFyc2Vycy4gIFRoZXkgYXJlIG5vdyBhY3R1YWxseSByZW1vdmVkLgogCi0qIFVzZWxlc3MgcnVsZXMsIHVzZWxlc3Mgbm9udGVybWluYWxzCisqKiBVc2VsZXNzIHJ1bGVzLCB1c2VsZXNzIG5vbnRlcm1pbmFscwogICBUaGV5IGFyZSBub3cgcmVwb3J0ZWQsIGFzIGEgd2FybmluZywgd2l0aCB0aGVpciBsb2NhdGlvbnMuCiAKLSogUnVsZXMgbmV2ZXIgcmVkdWNlZAorKiogUnVsZXMgbmV2ZXIgcmVkdWNlZAogICBSdWxlcyB0aGF0IGNhbiBuZXZlciBiZSByZWR1Y2VkIGJlY2F1c2Ugb2YgY29uZmxpY3RzIGFyZSBub3cKICAgcmVwb3J0ZWQuCiAKLSogSW5jb3JyZWN0IGBUb2tlbiBub3QgdXNlZCcKKyoqIEluY29ycmVjdCAiVG9rZW4gbm90IHVzZWQiCiAgIE9uIGEgZ3JhbW1hciBzdWNoIGFzCiAKLSAgICAgICAgICAgJXRva2VuIHVzZWxlc3MgdXNlZnVsCi0gICAgICAgICAgICUlCi0gICAgICAgICAgIGV4cDogJzAnICVwcmVjIHVzZWZ1bDsKKyAgICAldG9rZW4gdXNlbGVzcyB1c2VmdWwKKyAgICAlJQorICAgIGV4cDogJzAnICVwcmVjIHVzZWZ1bDsKIAogICB3aGVyZSBhIHRva2VuIHdhcyB1c2VkIHRvIHNldCB0aGUgcHJlY2VkZW5jZSBvZiB0aGUgbGFzdCBydWxlLAotICBiaXNvbiByZXBvcnRlZCBib3RoIGB1c2VmdWwnIGFuZCBgdXNlbGVzcycgYXMgdXNlbGVzcyB0b2tlbnMuCisgIGJpc29uIHJlcG9ydGVkIGJvdGggInVzZWZ1bCIgYW5kICJ1c2VsZXNzIiBhcyB1c2VsZXNzIHRva2Vucy4KIAotKiBSZXZlcnQgdGhlIEMrKyBuYW1lc3BhY2UgY2hhbmdlcyBpbnRyb2R1Y2VkIGluIDEuMzEKKyoqIFJldmVydCB0aGUgQysrIG5hbWVzcGFjZSBjaGFuZ2VzIGludHJvZHVjZWQgaW4gMS4zMQogICBhcyB0aGV5IGNhdXNlZCB0b28gbWFueSBwb3J0YWJpbGl0eSBoYXNzbGVzLgogCi0qIERlZmF1bHQgbG9jYXRpb25zCisqKiBEZWZhdWx0IGxvY2F0aW9ucwogICBCeSBhbiBhY2NpZGVudCBvZiBkZXNpZ24sIHRoZSBkZWZhdWx0IGNvbXB1dGF0aW9uIG9mIEAkIHdhcwogICBwZXJmb3JtZWQgYWZ0ZXIgYW5vdGhlciBkZWZhdWx0IGNvbXB1dGF0aW9uIHdhcyBwZXJmb3JtZWQ6IEAkID0gQDEuCiAgIFRoZSBsYXR0ZXIgaXMgbm93IHJlbW92ZWQ6IFlZTExPQ19ERUZBVUxUIGlzIGZ1bGx5IHJlc3BvbnNpYmxlIG9mCiAgIHRoZSBjb21wdXRhdGlvbiBvZiBAJC4KIAotKiBUb2tlbiBlbmQtb2YtZmlsZQorKiogVG9rZW4gZW5kLW9mLWZpbGUKICAgVGhlIHRva2VuIGVuZCBvZiBmaWxlIG1heSBiZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIsIGluIHdoaWNoIGNhc2UsCiAgIHRoZSB1c2VyIHN5bWJvbCBpcyB1c2VkIGluIHRoZSByZXBvcnRzLCB0aGUgZ3JhcGhzLCBhbmQgdGhlIHZlcmJvc2UKLSAgZXJyb3IgbWVzc2FnZXMgaW5zdGVhZCBvZiBgJGVuZCcsIHdoaWNoIHJlbWFpbnMgYmVpbmcgdGhlIGRlZmF1bHQuCisgIGVycm9yIG1lc3NhZ2VzIGluc3RlYWQgb2YgIiRlbmQiLCB3aGljaCByZW1haW5zIGJlaW5nIHRoZSBkZWZhdWx0LgogICBGb3IgaW5zdGFuY2UKLSAgICAgJXRva2VuIE1ZRU9GIDAKKyAgICAldG9rZW4gTVlFT0YgMAogICBvcgotICAgICAldG9rZW4gTVlFT0YgMCAiZW5kIG9mIGZpbGUiCisgICAgJXRva2VuIE1ZRU9GIDAgImVuZCBvZiBmaWxlIgogCi0qIFNlbWFudGljIHBhcnNlcgorKiogU2VtYW50aWMgcGFyc2VyCiAgIFRoaXMgb2xkIG9wdGlvbiwgd2hpY2ggaGFzIGJlZW4gYnJva2VuIGZvciBhZ2VzLCBpcyByZW1vdmVkLgogCi0qIE5ldyB0cmFuc2xhdGlvbnMKKyoqIE5ldyB0cmFuc2xhdGlvbnMKICAgQnJhemlsaWFuIFBvcnR1Z3Vlc2UsIHRoYW5rcyB0byBBbGV4YW5kcmUgRm9sbGUgZGUgTWVuZXplcy4KICAgQ3JvYXRpYW4sIHRoYW5rcyB0byBEZW5pcyBMYWNrb3ZpYy4KIAotKiBJbmNvcnJlY3QgdG9rZW4gZGVmaW5pdGlvbnMKLSAgV2hlbiBnaXZlbiBgJXRva2VuICdhJyAiQSInLCBCaXNvbiB1c2VkIHRvIG91dHB1dCBgI2RlZmluZSAnYScgNjUnLgorKiogSW5jb3JyZWN0IHRva2VuIGRlZmluaXRpb25zCisgIFdoZW4gZ2l2ZW4KKyAgICAldG9rZW4gJ2EnICJBIgorICBiaXNvbiB1c2VkIHRvIG91dHB1dAorICAgICNkZWZpbmUgJ2EnIDY1CiAKLSogVG9rZW4gZGVmaW5pdGlvbnMgYXMgZW51bXMKKyoqIFRva2VuIGRlZmluaXRpb25zIGFzIGVudW1zCiAgIFRva2VucyBhcmUgb3V0cHV0IGJvdGggYXMgdGhlIHRyYWRpdGlvbmFsICNkZWZpbmUncywgYW5kLCBwcm92aWRlZAogICB0aGUgY29tcGlsZXIgc3VwcG9ydHMgQU5TSSBDIG9yIGlzIGEgQysrIGNvbXBpbGVyLCBhcyBlbnVtcy4KICAgVGhpcyBsZXRzIGRlYnVnZ2VycyBkaXNwbGF5IG5hbWVzIGluc3RlYWQgb2YgaW50ZWdlcnMuCiAKLSogUmVwb3J0cworKiogUmVwb3J0cwogICBJbiBhZGRpdGlvbiB0byAtLXZlcmJvc2UsIGJpc29uIHN1cHBvcnRzIC0tcmVwb3J0PVRISU5HUywgd2hpY2gKICAgcHJvZHVjZXMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbjoKICAgLSBpdGVtc2V0CiAgICAgY29tcGxldGUgdGhlIGNvcmUgaXRlbSBzZXRzIHdpdGggdGhlaXIgY2xvc3VyZQotICAtIGxvb2thaGVhZCBbY2hhbmdlZCB0byBgbG9vay1haGVhZCcgaW4gMS44NzVlIGFuZCBsYXRlcl0KLSAgICBleHBsaWNpdGx5IGFzc29jaWF0ZSBsb29rLWFoZWFkIHRva2VucyB0byBpdGVtcworICAtIGxvb2thaGVhZCBbY2hhbmdlZCB0byAibG9vay1haGVhZCIgaW4gMS44NzVlIHRocm91Z2ggMi4zLCBidXQgY2hhbmdlZCBiYWNrXQorICAgIGV4cGxpY2l0bHkgYXNzb2NpYXRlIGxvb2thaGVhZCB0b2tlbnMgdG8gaXRlbXMKICAgLSBzb2x2ZWQKICAgICBkZXNjcmliZSBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIHNvbHZpbmcuCiAgICAgQmlzb24gdXNlZCB0byBzeXN0ZW1hdGljYWxseSBvdXRwdXQgdGhpcyBpbmZvcm1hdGlvbiBvbiB0b3Agb2YKICAgICB0aGUgcmVwb3J0LiAgU29sdmVkIGNvbmZsaWN0cyBhcmUgbm93IGF0dGFjaGVkIHRvIHRoZWlyIHN0YXRlcy4KIAotKiBUeXBlIGNsYXNoZXMKKyoqIFR5cGUgY2xhc2hlcwogICBQcmV2aW91cyB2ZXJzaW9ucyBkb24ndCBjb21wbGFpbiB3aGVuIHRoZXJlIGlzIGEgdHlwZSBjbGFzaCBvbgogICB0aGUgZGVmYXVsdCBhY3Rpb24gaWYgdGhlIHJ1bGUgaGFzIGEgbWlkLXJ1bGUgYWN0aW9uLCBzdWNoIGFzIGluOgogCi0gICAgICAldHlwZSA8Zm9vPiBiYXIKLSAgICAgICUlCi0gICAgICBiYXI6ICcwJyB7fSAnMCc7CisgICAgJXR5cGUgPGZvbz4gYmFyCisgICAgJSUKKyAgICBiYXI6ICcwJyB7fSAnMCc7CiAKICAgVGhpcyBpcyBmaXhlZC4KIAotKiBHTlUgTTQgaXMgbm93IHJlcXVpcmVkIHdoZW4gdXNpbmcgQmlzb24uCisqKiBHTlUgTTQgaXMgbm93IHJlcXVpcmVkIHdoZW4gdXNpbmcgQmlzb24uCiAMCi1DaGFuZ2VzIGluIHZlcnNpb24gMS4zNSwgMjAwMi0wMy0yNToKKyogQ2hhbmdlcyBpbiB2ZXJzaW9uIDEuMzUsIDIwMDItMDMtMjU6CiAKLSogQyBTa2VsZXRvbgorKiogQyBTa2VsZXRvbgogICBTb21lIHByb2plY3RzIHVzZSBCaXNvbidzIEMgcGFyc2VyIHdpdGggQysrIGNvbXBpbGVycywgYW5kIGRlZmluZQogICBZWVNUWVBFIGFzIGEgY2xhc3MuICBUaGUgcmVjZW50IGFkanVzdG1lbnQgb2YgQyBwYXJzZXJzIGZvciBkYXRhCiAgIGFsaWdubWVudCBhbmQgNjQgYml0IGFyY2hpdGVjdHVyZXMgbWFkZSB0aGlzIGltcG9zc2libGUuCkBAIC00NjEsMjM0ICsxNzY0LDIzNCBAQAogICBUaGlzIGtsdWRnZSBhbHNvIGFkZHJlc3NlcyBzb21lIEMrKyBwcm9ibGVtcyB3aGVuIHRoZSBzdGFjayB3YXMKICAgZXh0ZW5kZWQuCiAMCi1DaGFuZ2VzIGluIHZlcnNpb24gMS4zNCwgMjAwMi0wMy0xMjoKKyogQ2hhbmdlcyBpbiB2ZXJzaW9uIDEuMzQsIDIwMDItMDMtMTI6CiAKLSogRmlsZSBuYW1lIGNsYXNoZXMgYXJlIGRldGVjdGVkCisqKiBGaWxlIG5hbWUgY2xhc2hlcyBhcmUgZGV0ZWN0ZWQKICAgJCBiaXNvbiBmb28ueSAtZCAtbyBmb28ueAotICBmYXRhbCBlcnJvcjogaGVhZGVyIGFuZCBwYXJzZXIgd291bGQgYm90aCBiZSBuYW1lZCBgZm9vLngnCisgIGZhdGFsIGVycm9yOiBoZWFkZXIgYW5kIHBhcnNlciB3b3VsZCBib3RoIGJlIG5hbWVkICJmb28ueCIKIAotKiBBIG1pc3NpbmcgYDsnIGF0IHRoZSBlbmQgb2YgYSBydWxlIHRyaWdnZXJzIGEgd2FybmluZworKiogQSBtaXNzaW5nICI7IiBhdCB0aGUgZW5kIG9mIGEgcnVsZSB0cmlnZ2VycyBhIHdhcm5pbmcKICAgSW4gYWNjb3JkYW5jZSB3aXRoIFBPU0lYLCBhbmQgaW4gYWdyZWVtZW50IHdpdGggb3RoZXIKICAgWWFjYyBpbXBsZW1lbnRhdGlvbnMsIEJpc29uIHdpbGwgbWFuZGF0ZSB0aGlzIHNlbWljb2xvbiBpbiB0aGUgbmVhcgogICBmdXR1cmUuICBUaGlzIGVhc2VzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBhIEJpc29uIHBhcnNlciBvZiBCaXNvbgogICBncmFtbWFycyBieSBtYWtpbmcgdGhpcyBncmFtbWFyIExBTFIoMSkgaW5zdGVhZCBvZiBMUigyKS4gIFRvCiAgIGZhY2lsaXRhdGUgdGhlIHRyYW5zaXRpb24sIHRoaXMgcmVsZWFzZSBpbnRyb2R1Y2VzIGEgd2FybmluZy4KIAotKiBSZXZlcnQgdGhlIEMrKyBuYW1lc3BhY2UgY2hhbmdlcyBpbnRyb2R1Y2VkIGluIDEuMzEsIGFzIHRoZXkgY2F1c2VkIHRvbworKiogUmV2ZXJ0IHRoZSBDKysgbmFtZXNwYWNlIGNoYW5nZXMgaW50cm9kdWNlZCBpbiAxLjMxLCBhcyB0aGV5IGNhdXNlZCB0b28KICAgbWFueSBwb3J0YWJpbGl0eSBoYXNzbGVzLgogCi0qIERKR1BQIHN1cHBvcnQgYWRkZWQuCisqKiBESkdQUCBzdXBwb3J0IGFkZGVkLgogCi0qIEZpeCB0ZXN0IHN1aXRlIHBvcnRhYmlsaXR5IHByb2JsZW1zLgorKiogRml4IHRlc3Qgc3VpdGUgcG9ydGFiaWxpdHkgcHJvYmxlbXMuCiAMCi1DaGFuZ2VzIGluIHZlcnNpb24gMS4zMywgMjAwMi0wMi0wNzoKKyogQ2hhbmdlcyBpbiB2ZXJzaW9uIDEuMzMsIDIwMDItMDItMDc6CiAKLSogRml4IEMrKyBpc3N1ZXMKKyoqIEZpeCBDKysgaXNzdWVzCiAgIEdyb2ZmIGNvdWxkIG5vdCBiZSBjb21waWxlZCBmb3IgdGhlIGRlZmluaXRpb24gb2Ygc2l6ZV90IHdhcyBsYWNraW5nCiAgIHVuZGVyIHNvbWUgY29uZGl0aW9ucy4KIAotKiBDYXRjaCBpbnZhbGlkIEBuCisqKiBDYXRjaCBpbnZhbGlkIEBuCiAgIEFzIGlzIGRvbmUgd2l0aCAkbi4KIAwKLUNoYW5nZXMgaW4gdmVyc2lvbiAxLjMyLCAyMDAyLTAxLTIzOgorKiBDaGFuZ2VzIGluIHZlcnNpb24gMS4zMiwgMjAwMi0wMS0yMzoKIAotKiBGaXggWWFjYyBvdXRwdXQgZmlsZSBuYW1lcworKiogRml4IFlhY2Mgb3V0cHV0IGZpbGUgbmFtZXMKIAotKiBQb3J0YWJpbGl0eSBmaXhlcworKiogUG9ydGFiaWxpdHkgZml4ZXMKIAotKiBJdGFsaWFuLCBEdXRjaCB0cmFuc2xhdGlvbnMKKyoqIEl0YWxpYW4sIER1dGNoIHRyYW5zbGF0aW9ucwogDAotQ2hhbmdlcyBpbiB2ZXJzaW9uIDEuMzEsIDIwMDItMDEtMTQ6CisqIENoYW5nZXMgaW4gdmVyc2lvbiAxLjMxLCAyMDAyLTAxLTE0OgogCi0qIE1hbnkgQnVnIEZpeGVzCisqKiBNYW55IEJ1ZyBGaXhlcwogCi0qIEdOVSBHZXR0ZXh0IGFuZCAlZXhwZWN0CisqKiBHTlUgR2V0dGV4dCBhbmQgJWV4cGVjdAogICBHTlUgR2V0dGV4dCBhc3NlcnRzIDEwIHMvciBjb25mbGljdHMsIGJ1dCB0aGVyZSBhcmUgNy4gIE5vdyB0aGF0CiAgIEJpc29uIGRpZXMgb24gaW5jb3JyZWN0ICVleHBlY3RhdGlvbnMsIHdlIGZlYXIgdGhlcmUgd2lsbCBiZQogICB0b28gbWFueSBidWcgcmVwb3J0cyBmb3IgR2V0dGV4dCwgc28gX2ZvciB0aGUgdGltZSBiZWluZ18sICVleHBlY3QKLSAgZG9lcyBub3QgdHJpZ2dlciBhbiBlcnJvciB3aGVuIHRoZSBpbnB1dCBmaWxlIGlzIG5hbWVkIGBwbHVyYWwueScuCisgIGRvZXMgbm90IHRyaWdnZXIgYW4gZXJyb3Igd2hlbiB0aGUgaW5wdXQgZmlsZSBpcyBuYW1lZCAicGx1cmFsLnkiLgogCi0qIFVzZSBvZiBhbGxvY2EgaW4gcGFyc2VycworKiogVXNlIG9mIGFsbG9jYSBpbiBwYXJzZXJzCiAgIElmIFlZU1RBQ0tfVVNFX0FMTE9DQSBpcyBkZWZpbmVkIHRvIDAsIHRoZW4gdGhlIHBhcnNlcnMgd2lsbCB1c2UKICAgbWFsbG9jIGV4Y2x1c2l2ZWx5LiAgU2luY2UgMS4yOSwgYnV0IHdhcyBub3QgTkVXUydlZC4KIAogICBhbGxvY2EgaXMgdXNlZCBvbmx5IHdoZW4gY29tcGlsZWQgd2l0aCBHQ0MsIHRvIGF2b2lkIHBvcnRhYmlsaXR5CiAgIHByb2JsZW1zIGFzIG9uIEFJWC4KIAotKiB5eXBhcnNlIG5vdyByZXR1cm5zIDIgaWYgbWVtb3J5IGlzIGV4aGF1c3RlZDsgZm9ybWVybHkgaXQgZHVtcGVkIGNvcmUuCisqKiB5eXBhcnNlIG5vdyByZXR1cm5zIDIgaWYgbWVtb3J5IGlzIGV4aGF1c3RlZDsgZm9ybWVybHkgaXQgZHVtcGVkIGNvcmUuCiAKLSogV2hlbiB0aGUgZ2VuZXJhdGVkIHBhcnNlciBsYWNrcyBkZWJ1Z2dpbmcgY29kZSwgWVlERUJVRyBpcyBub3cgMAorKiogV2hlbiB0aGUgZ2VuZXJhdGVkIHBhcnNlciBsYWNrcyBkZWJ1Z2dpbmcgY29kZSwgWVlERUJVRyBpcyBub3cgMAogICAoYXMgUE9TSVggcmVxdWlyZXMpIGluc3RlYWQgb2YgYmVpbmcgdW5kZWZpbmVkLgogCi0qIFVzZXIgQWN0aW9ucworKiogVXNlciBBY3Rpb25zCiAgIEJpc29uIGhhcyBhbHdheXMgcGVybWl0dGVkIGFjdGlvbnMgc3VjaCBhcyB7ICQkID0gJDEgfTogaXQgYWRkcyB0aGUKICAgZW5kaW5nIHNlbWljb2xvbi4gIE5vdyBpZiBpbiBZYWNjIGNvbXBhdGliaWxpdHkgbW9kZSwgdGhlIHNlbWljb2xvbgogICBpcyBubyBsb25nZXIgb3V0cHV0OiBvbmUgaGFzIHRvIHdyaXRlIHsgJCQgPSAkMTsgfS4KIAotKiBCZXR0ZXIgQysrIGNvbXBsaWFuY2UKKyoqIEJldHRlciBDKysgY29tcGxpYW5jZQogICBUaGUgb3V0cHV0IHBhcnNlcnMgdHJ5IHRvIHJlc3BlY3QgQysrIG5hbWVzcGFjZXMuCiAgIFtUaGlzIHR1cm5lZCBvdXQgdG8gYmUgYSBmYWlsZWQgZXhwZXJpbWVudCwgYW5kIGl0IHdhcyByZXZlcnRlZCBsYXRlci5dCiAKLSogUmVkdWNlZCBHcmFtbWFycworKiogUmVkdWNlZCBHcmFtbWFycwogICBGaXhlZCBidWdzIHdoZW4gcmVwb3J0aW5nIHVzZWxlc3Mgbm9udGVybWluYWxzLgogCi0qIDY0IGJpdCBob3N0cworKiogNjQgYml0IGhvc3RzCiAgIFRoZSBwYXJzZXJzIHdvcmsgcHJvcGVybHkgb24gNjQgYml0IGhvc3RzLgogCi0qIEVycm9yIG1lc3NhZ2VzCisqKiBFcnJvciBtZXNzYWdlcwogICBTb21lIGNhbGxzIHRvIHN0cmVycm9yIHJlc3VsdGVkIGluIHNjcmFtYmxlZCBvciBtaXNzaW5nIGVycm9yIG1lc3NhZ2VzLgogCi0qICVleHBlY3QKKyoqICVleHBlY3QKICAgV2hlbiB0aGUgbnVtYmVyIG9mIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMgaXMgY29ycmVjdCwgZG9uJ3QgaXNzdWUKICAgYW55IHdhcm5pbmcuCiAKLSogVGhlIHZlcmJvc2UgcmVwb3J0IGluY2x1ZGVzIHRoZSBydWxlIGxpbmUgbnVtYmVycy4KKyoqIFRoZSB2ZXJib3NlIHJlcG9ydCBpbmNsdWRlcyB0aGUgcnVsZSBsaW5lIG51bWJlcnMuCiAKLSogUnVsZSBsaW5lIG51bWJlcnMgYXJlIGZpeGVkIGluIHRyYWNlcy4KKyoqIFJ1bGUgbGluZSBudW1iZXJzIGFyZSBmaXhlZCBpbiB0cmFjZXMuCiAKLSogU3dlZGlzaCB0cmFuc2xhdGlvbgorKiogU3dlZGlzaCB0cmFuc2xhdGlvbgogCi0qIFBhcnNlIGVycm9ycworKiogUGFyc2UgZXJyb3JzCiAgIFZlcmJvc2UgcGFyc2UgZXJyb3IgbWVzc2FnZXMgZnJvbSB0aGUgcGFyc2VycyBhcmUgYmV0dGVyIGxvb2tpbmcuCiAgIEJlZm9yZTogcGFyc2UgZXJyb3I6IHVuZXhwZWN0ZWQgYCcvJycsIGV4cGVjdGluZyBgIm51bWJlciInIG9yIGAnLScnIG9yIGAnKCcnCiAgICAgIE5vdzogcGFyc2UgZXJyb3I6IHVuZXhwZWN0ZWQgJy8nLCBleHBlY3RpbmcgIm51bWJlciIgb3IgJy0nIG9yICcoJwogCi0qIEZpeGVkIHBhcnNlciBtZW1vcnkgbGVha3MuCisqKiBGaXhlZCBwYXJzZXIgbWVtb3J5IGxlYWtzLgogICBXaGVuIHRoZSBnZW5lcmF0ZWQgcGFyc2VyIHdhcyB1c2luZyBtYWxsb2MgdG8gZXh0ZW5kIGl0cyBzdGFja3MsIHRoZQogICBwcmV2aW91cyBhbGxvY2F0aW9ucyB3ZXJlIG5vdCBmcmVlZC4KIAotKiBGaXhlZCB2ZXJib3NlIG91dHB1dCBmaWxlLgorKiogRml4ZWQgdmVyYm9zZSBvdXRwdXQgZmlsZS4KICAgU29tZSBuZXdsaW5lcyB3ZXJlIG1pc3NpbmcuCiAgIFNvbWUgY29uZmxpY3RzIGluIHN0YXRlIGRlc2NyaXB0aW9ucyB3ZXJlIG1pc3NpbmcuCiAKLSogRml4ZWQgY29uZmxpY3QgcmVwb3J0LgorKiogRml4ZWQgY29uZmxpY3QgcmVwb3J0LgogICBPcHRpb24gLXYgd2FzIG5lZWRlZCB0byBnZXQgdGhlIHJlc3VsdC4KIAotKiAlZXhwZWN0CisqKiAlZXhwZWN0CiAgIFdhcyBub3QgdXNlZC4KICAgTWlzbWF0Y2hlcyBhcmUgZXJyb3JzLCBub3Qgd2FybmluZ3MuCiAKLSogRml4ZWQgaW5jb3JyZWN0IHByb2Nlc3Npbmcgb2Ygc29tZSBpbnZhbGlkIGlucHV0LgorKiogRml4ZWQgaW5jb3JyZWN0IHByb2Nlc3Npbmcgb2Ygc29tZSBpbnZhbGlkIGlucHV0LgogCi0qIEZpeGVkIENQUCBndWFyZHM6IDlmb28uaCB1c2VzIEJJU09OXzlGT09fSCBpbnN0ZWFkIG9mIDlGT09fSC4KKyoqIEZpeGVkIENQUCBndWFyZHM6IDlmb28uaCB1c2VzIEJJU09OXzlGT09fSCBpbnN0ZWFkIG9mIDlGT09fSC4KIAotKiBGaXhlZCBzb21lIHR5cG9zIGluIHRoZSBkb2N1bWVudGF0aW9uLgorKiogRml4ZWQgc29tZSB0eXBvcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KIAotKiAldG9rZW4gTVlfRU9GIDAgaXMgc3VwcG9ydGVkLgorKiogJXRva2VuIE1ZX0VPRiAwIGlzIHN1cHBvcnRlZC4KICAgQmVmb3JlLCBNWV9FT0Ygd2FzIHNpbGVudGx5IHJlbnVtYmVyZWQgYXMgMjU3LgogCi0qIGRvYy9yZWZjYXJkLnRleCBpcyB1cGRhdGVkLgorKiogZG9jL3JlZmNhcmQudGV4IGlzIHVwZGF0ZWQuCiAKLSogJW91dHB1dCwgJWZpbGUtcHJlZml4LCAlbmFtZS1wcmVmaXguCisqKiAlb3V0cHV0LCAlZmlsZS1wcmVmaXgsICVuYW1lLXByZWZpeC4KICAgTmV3LgogCi0qIC0tb3V0cHV0Ci0gIE5ldywgYWxpYXNpbmcgYC0tb3V0cHV0LWZpbGUnLgorKiogLS1vdXRwdXQKKyAgTmV3LCBhbGlhc2luZyAiLS1vdXRwdXQtZmlsZSIuCiAMCi1DaGFuZ2VzIGluIHZlcnNpb24gMS4zMCwgMjAwMS0xMC0yNjoKKyogQ2hhbmdlcyBpbiB2ZXJzaW9uIDEuMzAsIDIwMDEtMTAtMjY6CiAKLSogYC0tZGVmaW5lcycgYW5kIGAtLWdyYXBoJyBoYXZlIG5vdyBhbiBvcHRpb25hbCBhcmd1bWVudCB3aGljaCBpcyB0aGUKLSAgb3V0cHV0IGZpbGUgbmFtZS4gYC1kJyBhbmQgYC1nJyBkbyBub3QgY2hhbmdlOyB0aGV5IGRvIG5vdCB0YWtlIGFueQorKiogIi0tZGVmaW5lcyIgYW5kICItLWdyYXBoIiBoYXZlIG5vdyBhbiBvcHRpb25hbCBhcmd1bWVudCB3aGljaCBpcyB0aGUKKyAgb3V0cHV0IGZpbGUgbmFtZS4gIi1kIiBhbmQgIi1nIiBkbyBub3QgY2hhbmdlOyB0aGV5IGRvIG5vdCB0YWtlIGFueQogICBhcmd1bWVudC4KIAotKiBgJXNvdXJjZV9leHRlbnNpb24nIGFuZCBgJWhlYWRlcl9leHRlbnNpb24nIGFyZSByZW1vdmVkLCBmYWlsZWQKKyoqICIlc291cmNlX2V4dGVuc2lvbiIgYW5kICIlaGVhZGVyX2V4dGVuc2lvbiIgYXJlIHJlbW92ZWQsIGZhaWxlZAogICBleHBlcmltZW50LgogCi0qIFBvcnRhYmlsaXR5IGZpeGVzLgorKiogUG9ydGFiaWxpdHkgZml4ZXMuCiAMCi1DaGFuZ2VzIGluIHZlcnNpb24gMS4yOSwgMjAwMS0wOS0wNzoKKyogQ2hhbmdlcyBpbiB2ZXJzaW9uIDEuMjksIDIwMDEtMDktMDc6CiAKLSogVGhlIG91dHB1dCBmaWxlIGRvZXMgbm90IGRlZmluZSBjb25zdCwgYXMgdGhpcyBjYXVzZWQgcHJvYmxlbXMgd2hlbiB1c2VkCisqKiBUaGUgb3V0cHV0IGZpbGUgZG9lcyBub3QgZGVmaW5lIGNvbnN0LCBhcyB0aGlzIGNhdXNlZCBwcm9ibGVtcyB3aGVuIHVzZWQKICAgd2l0aCBjb21tb24gYXV0b2NvbmZpZ3VyYXRpb24gc2NoZW1lcy4gIElmIHlvdSBzdGlsbCB1c2UgYW5jaWVudCBjb21waWxlcnMKICAgdGhhdCBsYWNrIGNvbnN0LCBjb21waWxlIHdpdGggdGhlIGVxdWl2YWxlbnQgb2YgdGhlIEMgY29tcGlsZXIgb3B0aW9uCi0gIGAtRGNvbnN0PScuICBhdXRvY29uZidzIEFDX0NfQ09OU1QgbWFjcm8gcHJvdmlkZXMgb25lIHdheSB0byBkbyB0aGlzLgorICAiLURjb25zdD0iLiAgQXV0b2NvbmYncyBBQ19DX0NPTlNUIG1hY3JvIHByb3ZpZGVzIG9uZSB3YXkgdG8gZG8gdGhpcy4KIAotKiBBZGRlZCBgLWcnIGFuZCBgLS1ncmFwaCcuCisqKiBBZGRlZCAiLWciIGFuZCAiLS1ncmFwaCIuCiAKLSogVGhlIEJpc29uIG1hbnVhbCBpcyBub3cgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRkRMLgorKiogVGhlIEJpc29uIG1hbnVhbCBpcyBub3cgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRkRMLgogCi0qIFRoZSBpbnB1dCBhbmQgdGhlIG91dHB1dCBmaWxlcyBoYXMgYXV0b21hdGljYWxseSBhIHNpbWlsYXIgZXh0ZW5zaW9uLgorKiogVGhlIGlucHV0IGFuZCB0aGUgb3V0cHV0IGZpbGVzIGhhcyBhdXRvbWF0aWNhbGx5IGEgc2ltaWxhciBleHRlbnNpb24uCiAKLSogUnVzc2lhbiB0cmFuc2xhdGlvbiBhZGRlZC4KKyoqIFJ1c3NpYW4gdHJhbnNsYXRpb24gYWRkZWQuCiAKLSogTkxTIHN1cHBvcnQgdXBkYXRlZDsgc2hvdWxkIGhvcGVmdWxseSBiZSBsZXNzIHRyb3VibGVzb21lLgorKiogTkxTIHN1cHBvcnQgdXBkYXRlZDsgc2hvdWxkIGhvcGVmdWxseSBiZSBsZXNzIHRyb3VibGVzb21lLgogCi0qIEFkZGVkIHRoZSBvbGQgQmlzb24gcmVmZXJlbmNlIGNhcmQuCisqKiBBZGRlZCB0aGUgb2xkIEJpc29uIHJlZmVyZW5jZSBjYXJkLgogCi0qIEFkZGVkIGAtLWxvY2F0aW9ucycgYW5kIGAlbG9jYXRpb25zJy4KKyoqIEFkZGVkICItLWxvY2F0aW9ucyIgYW5kICIlbG9jYXRpb25zIi4KIAotKiBBZGRlZCBgLVMnIGFuZCBgLS1za2VsZXRvbicuCisqKiBBZGRlZCAiLVMiIGFuZCAiLS1za2VsZXRvbiIuCiAKLSogYCVyYXcnLCBgLXInLCBgLS1yYXcnIGlzIGRpc2FibGVkLgorKiogIiVyYXciLCAiLXIiLCAiLS1yYXciIGlzIGRpc2FibGVkLgogCi0qIFNwZWNpYWwgY2hhcmFjdGVycyBhcmUgZXNjYXBlZCB3aGVuIG91dHB1dC4gIFRoaXMgc29sdmVzIHRoZSBwcm9ibGVtcworKiogU3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkIHdoZW4gb3V0cHV0LiAgVGhpcyBzb2x2ZXMgdGhlIHByb2JsZW1zCiAgIG9mIHRoZSAjbGluZSBsaW5lcyB3aXRoIHBhdGggbmFtZXMgaW5jbHVkaW5nIGJhY2tzbGFzaGVzLgogCi0qIE5ldyBkaXJlY3RpdmVzLgotICBgJXlhY2MnLCBgJWZpeGVkX291dHB1dF9maWxlcycsIGAlZGVmaW5lcycsIGAlbm9fcGFyc2VyJywgYCV2ZXJib3NlJywKLSAgYCVkZWJ1ZycsIGAlc291cmNlX2V4dGVuc2lvbicgYW5kIGAlaGVhZGVyX2V4dGVuc2lvbicuCisqKiBOZXcgZGlyZWN0aXZlcy4KKyAgIiV5YWNjIiwgIiVmaXhlZF9vdXRwdXRfZmlsZXMiLCAiJWRlZmluZXMiLCAiJW5vX3BhcnNlciIsICIldmVyYm9zZSIsCisgICIlZGVidWciLCAiJXNvdXJjZV9leHRlbnNpb24iIGFuZCAiJWhlYWRlcl9leHRlbnNpb24iLgogCi0qIEAkCisqKiBAJAogICBBdXRvbWF0aWMgbG9jYXRpb24gdHJhY2tpbmcuCiAMCi1DaGFuZ2VzIGluIHZlcnNpb24gMS4yOCwgMTk5OS0wNy0wNjoKKyogQ2hhbmdlcyBpbiB2ZXJzaW9uIDEuMjgsIDE5OTktMDctMDY6CiAKLSogU2hvdWxkIGNvbXBpbGUgYmV0dGVyIG5vdyB3aXRoIEsmUiBjb21waWxlcnMuCisqKiBTaG91bGQgY29tcGlsZSBiZXR0ZXIgbm93IHdpdGggSyZSIGNvbXBpbGVycy4KIAotKiBBZGRlZCBOTFMuCisqKiBBZGRlZCBOTFMuCiAKLSogRml4ZWQgYSBwcm9ibGVtIHdpdGggZXNjYXBpbmcgdGhlIGRvdWJsZSBxdW90ZSBjaGFyYWN0ZXIuCisqKiBGaXhlZCBhIHByb2JsZW0gd2l0aCBlc2NhcGluZyB0aGUgZG91YmxlIHF1b3RlIGNoYXJhY3Rlci4KIAotKiBUaGVyZSBpcyBub3cgYSBGQVEuCisqKiBUaGVyZSBpcyBub3cgYSBGQVEuCiAMCi1DaGFuZ2VzIGluIHZlcnNpb24gMS4yNzoKKyogQ2hhbmdlcyBpbiB2ZXJzaW9uIDEuMjc6CiAKLSogVGhlIG1ha2UgcnVsZSB3aGljaCBwcmV2ZW50ZWQgYmlzb24uc2ltcGxlIGZyb20gYmVpbmcgY3JlYXRlZCBvbgorKiogVGhlIG1ha2UgcnVsZSB3aGljaCBwcmV2ZW50ZWQgYmlzb24uc2ltcGxlIGZyb20gYmVpbmcgY3JlYXRlZCBvbgogICBzb21lIHN5c3RlbXMgaGFzIGJlZW4gZml4ZWQuCiAMCi1DaGFuZ2VzIGluIHZlcnNpb24gMS4yNjoKKyogQ2hhbmdlcyBpbiB2ZXJzaW9uIDEuMjY6CiAKLSogQmlzb24gbm93IHVzZXMgYXV0b21ha2UuCisqKiBCaXNvbiBub3cgdXNlcyBBdXRvbWFrZS4KIAotKiBOZXcgbWFpbGluZyBsaXN0czogPGJ1Zy1iaXNvbkBnbnUub3JnPiBhbmQgPGhlbHAtYmlzb25AZ251Lm9yZz4uCisqKiBOZXcgbWFpbGluZyBsaXN0czogPGJ1Zy1iaXNvbkBnbnUub3JnPiBhbmQgPGhlbHAtYmlzb25AZ251Lm9yZz4uCiAKLSogVG9rZW4gbnVtYmVycyBub3cgc3RhcnQgYXQgMjU3IGFzIHByZXZpb3VzbHkgZG9jdW1lbnRlZCwgbm90IDI1OC4KKyoqIFRva2VuIG51bWJlcnMgbm93IHN0YXJ0IGF0IDI1NyBhcyBwcmV2aW91c2x5IGRvY3VtZW50ZWQsIG5vdCAyNTguCiAKLSogQmlzb24gaG9ub3JzIHRoZSBUTVBESVIgZW52aXJvbm1lbnQgdmFyaWFibGUuCisqKiBCaXNvbiBob25vcnMgdGhlIFRNUERJUiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KIAotKiBBIGNvdXBsZSBvZiBidWZmZXIgb3ZlcnJ1bnMgaGF2ZSBiZWVuIGZpeGVkLgorKiogQSBjb3VwbGUgb2YgYnVmZmVyIG92ZXJydW5zIGhhdmUgYmVlbiBmaXhlZC4KIAotKiBQcm9ibGVtcyB3aGVuIGNsb3NpbmcgZmlsZXMgc2hvdWxkIG5vdyBiZSByZXBvcnRlZC4KKyoqIFByb2JsZW1zIHdoZW4gY2xvc2luZyBmaWxlcyBzaG91bGQgbm93IGJlIHJlcG9ydGVkLgogCi0qIEdlbmVyYXRlZCBwYXJzZXJzIHNob3VsZCBub3cgd29yayBldmVuIG9uIG9wZXJhdGluZyBzeXN0ZW1zIHdoaWNoIGRvCisqKiBHZW5lcmF0ZWQgcGFyc2VycyBzaG91bGQgbm93IHdvcmsgZXZlbiBvbiBvcGVyYXRpbmcgc3lzdGVtcyB3aGljaCBkbwogICBub3QgcHJvdmlkZSBhbGxvY2EoKS4KIAwKLUNoYW5nZXMgaW4gdmVyc2lvbiAxLjI1LCAxOTk1LTEwLTE2OgorKiBDaGFuZ2VzIGluIHZlcnNpb24gMS4yNSwgMTk5NS0xMC0xNjoKIAotKiBFcnJvcnMgaW4gdGhlIGlucHV0IGdyYW1tYXIgYXJlIG5vdCBmYXRhbDsgQmlzb24ga2VlcHMgcmVhZGluZworKiogRXJyb3JzIGluIHRoZSBpbnB1dCBncmFtbWFyIGFyZSBub3QgZmF0YWw7IEJpc29uIGtlZXBzIHJlYWRpbmcKIHRoZSBncmFtbWFyIGZpbGUsIGFuZCByZXBvcnRzIGFsbCB0aGUgZXJyb3JzIGZvdW5kIGluIGl0LgogCi0qIFRva2VucyBjYW4gbm93IGJlIHNwZWNpZmllZCBhcyBtdWx0aXBsZS1jaGFyYWN0ZXIgc3RyaW5nczogZm9yCisqKiBUb2tlbnMgY2FuIG5vdyBiZSBzcGVjaWZpZWQgYXMgbXVsdGlwbGUtY2hhcmFjdGVyIHN0cmluZ3M6IGZvcgogZXhhbXBsZSwgeW91IGNvdWxkIHVzZSAiPD0iIGZvciBhIHRva2VuIHdoaWNoIGxvb2tzIGxpa2UgPD0sIGluc3RlYWQKLW9mIGNob3NpbmcgYSBuYW1lIGxpa2UgTEVTU0VRLgorb2YgY2hvb3NpbmcgYSBuYW1lIGxpa2UgTEVTU0VRLgogCi0qIFRoZSAldG9rZW5fdGFibGUgZGVjbGFyYXRpb24gc2F5cyB0byB3cml0ZSBhIHRhYmxlIG9mIHRva2VucyAobmFtZXMKKyoqIFRoZSAldG9rZW5fdGFibGUgZGVjbGFyYXRpb24gc2F5cyB0byB3cml0ZSBhIHRhYmxlIG9mIHRva2VucyAobmFtZXMKIGFuZCBudW1iZXJzKSBpbnRvIHRoZSBwYXJzZXIgZmlsZS4gIFRoZSB5eWxleCBmdW5jdGlvbiBjYW4gdXNlIHRoaXMKIHRhYmxlIHRvIHJlY29nbml6ZSBtdWx0aXBsZS1jaGFyYWN0ZXIgc3RyaW5nIHRva2Vucywgb3IgZm9yIG90aGVyCiBwdXJwb3Nlcy4KIAotKiBUaGUgJW5vX2xpbmVzIGRlY2xhcmF0aW9uIHNheXMgbm90IHRvIGdlbmVyYXRlIGFueSAjbGluZSBwcmVwcm9jZXNzb3IKKyoqIFRoZSAlbm9fbGluZXMgZGVjbGFyYXRpb24gc2F5cyBub3QgdG8gZ2VuZXJhdGUgYW55ICNsaW5lIHByZXByb2Nlc3NvcgogZGlyZWN0aXZlcyBpbiB0aGUgcGFyc2VyIGZpbGUuCiAKLSogVGhlICVyYXcgZGVjbGFyYXRpb24gc2F5cyB0byB1c2UgaW50ZXJuYWwgQmlzb24gdG9rZW4gbnVtYmVycywgbm90CisqKiBUaGUgJXJhdyBkZWNsYXJhdGlvbiBzYXlzIHRvIHVzZSBpbnRlcm5hbCBCaXNvbiB0b2tlbiBudW1iZXJzLCBub3QKIFlhY2MtY29tcGF0aWJsZSB0b2tlbiBudW1iZXJzLCB3aGVuIHRva2VuIG5hbWVzIGFyZSBkZWZpbmVkIGFzIG1hY3Jvcy4KIAotKiBUaGUgLS1uby1wYXJzZXIgb3B0aW9uIHByb2R1Y2VzIHRoZSBwYXJzZXIgdGFibGVzIHdpdGhvdXQgaW5jbHVkaW5nCisqKiBUaGUgLS1uby1wYXJzZXIgb3B0aW9uIHByb2R1Y2VzIHRoZSBwYXJzZXIgdGFibGVzIHdpdGhvdXQgaW5jbHVkaW5nCiB0aGUgcGFyc2VyIGVuZ2luZTsgYSBwcm9qZWN0IGNhbiBub3cgdXNlIGl0cyBvd24gcGFyc2VyIGVuZ2luZS4KIFRoZSBhY3Rpb25zIGdvIGludG8gYSBzZXBhcmF0ZSBmaWxlIGNhbGxlZCBOQU1FLmFjdCwgaW4gdGhlIGZvcm0gb2YKIGEgc3dpdGNoIHN0YXRlbWVudCBib2R5LgogDAotQ2hhbmdlcyBpbiB2ZXJzaW9uIDEuMjM6CisqIENoYW5nZXMgaW4gdmVyc2lvbiAxLjIzOgogCiBUaGUgdXNlciBjYW4gZGVmaW5lIFlZUEFSU0VfUEFSQU0gYXMgdGhlIG5hbWUgb2YgYW4gYXJndW1lbnQgdG8gYmUKIHBhc3NlZCBpbnRvIHl5cGFyc2UuICBUaGUgYXJndW1lbnQgc2hvdWxkIGhhdmUgdHlwZSB2b2lkICouICBJdCBzaG91bGQKQEAgLTY5NywzNiArMjAwMCw1NCBAQAogCiBMaW5lIG51bWJlcnMgaW4gb3V0cHV0IGZpbGUgY29ycmVjdGVkLgogDAotQ2hhbmdlcyBpbiB2ZXJzaW9uIDEuMjI6CisqIENoYW5nZXMgaW4gdmVyc2lvbiAxLjIyOgogCiAtLWhlbHAgb3B0aW9uIGFkZGVkLgogDAotQ2hhbmdlcyBpbiB2ZXJzaW9uIDEuMjA6CisqIENoYW5nZXMgaW4gdmVyc2lvbiAxLjIwOgogCiBPdXRwdXQgZmlsZSBkb2VzIG5vdCByZWRlZmluZSBjb25zdCBmb3IgQysrLgogCi1Mb2NhbCBWYXJpYWJsZXM6Ci1tb2RlOiBvdXRsaW5lCi1FbmQ6Ci0KIC0tLS0tCiAKLUNvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywKLTIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCitUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBQYXJzZXIgR2VuZXJhdG9yLgogCi1CaXNvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLWFueSBsYXRlciB2ZXJzaW9uLgordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyhhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLUJpc29uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotYWxvbmcgd2l0aCBhdXRvY29uZjsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi10aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIExvY2FsV29yZHM6ICB5YWNjIFlZQkFDS1VQIGdsciBHQ0MgbGFsciBBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gbnVsbHB0cgorIExvY2FsV29yZHM6ICBjcGx1c3BsdXMgbGlieSBycGwgZnByaW50ZiBtZmNhbGMgV3lhY2Mgc3RtdCBjb25kIGV4cHIgbWsgc3ltIGxyCisgTG9jYWxXb3JkczogIElFTFIgaWVsciBMb29rYWhlYWQgWVlFUlJPUiBub25hc3NvYyBMQUxSJ3MgYXBpIGxvb2thaGVhZHMgeXljaGFyCisgTG9jYWxXb3JkczogIGRlc3RydWN0b3IgbG9va2FoZWFkIFlZUkhTTE9DIFlZTExPQyBSaHMgaWZuZGVmIFlZRkFJTCBjcHAgc3IgcnIKKyBMb2NhbFdvcmRzOiAgcHJlcHJvY2Vzc29yIGluaXRpYWxpemVyIFdubyBXbm9uZSBXZXJyb3IgRnJlZUJTRCBwcmVjIGxpdmVsb2NrcworIExvY2FsV29yZHM6ICBTb2xhcmlzIEFJWCBVWCBSSEVMIFRydSBMSFMgZ2NjJ3MgV3VuZGVmIFlZRU5BQkxFIE5MUyBZWUxUWVBFIFZDRworIExvY2FsV29yZHM6ICB5eWVycm9yIGNwcCdzIFd1bnVzZWQgeXlsdmFsIHl5bGxvYyBwcmVwZW5kIHl5cGFyc2UgeXlsZXggeXlwdXNoCisgTG9jYWxXb3JkczogIEdyYXBodml6IHhtbCBub250ZXJtaW5hbHMgbWlkcnVsZSBkZXN0cnVjdG9yJ3MgWVlTVFlQRSB0eXBlZGVmIGx5CisgTG9jYWxXb3JkczogIENIUiBjaHIgcHJpbnRmIHN0ZG91dCBuYW1lc3BhY2UgcHJlcHJvY2Vzc2luZyBlbnVtIHByZSBpbmNsdWRlJ3MKKyBMb2NhbFdvcmRzOiAgWVlSRUNPVkVSSU5HIG5vbmZyZWUgZGVzdHJ1Y3RvcnMgWVlBQk9SVCBZWUFDQ0VQVCBwYXJhbXMgZW51bXMgZGUKKyBMb2NhbFdvcmRzOiAgc3RydWN0IHl5c3R5cGUgREpHUFAgbGV4IHBhcmFtIEhhaWJsZSBOVU0gYWxsb2NhIFlZU1RBQ0sgTlVMIGdvdG8KKyBMb2NhbFdvcmRzOiAgWVlNQVhERVBUSCBVbmVzY2FwZWQgVUNOcyBZWUxUWVBFJ3MgeXlsdHlwZSB0eXBlZGVmcyBpbmxpbmUgWWFjY3MKKyBMb2NhbFdvcmRzOiAgSGVyaXlhbnRvIFJlZW5hYmxlIGRwcmVjIEhpbGZpbmdlciBFZ2dlcnQgTVlFT0YgRm9sbGUgTWVuZXplcyBFT0YKKyBMb2NhbFdvcmRzOiAgTGFja292aWMgZGVmaW5lJ3MgaXRlbXNldCBHcm9mZiBHZXR0ZXh0IG1hbGxvYyBORVdTJ2VkIFlZREVCVUcgWVkKKyBMb2NhbFdvcmRzOiAgbmFtZXNwYWNlcyBzdHJlcnJvciBjb25zdCBhdXRvY29uZmlndXJhdGlvbiBEY29uc3QgQXV0b2NvbmYncyBGREwKKyBMb2NhbFdvcmRzOiAgQXV0b21ha2UgVE1QRElSIExFU1NFUSB5bHdyYXAgZW5kaWYgeXlkZWJ1ZyBZWVRPS0VOIFlZTFNQIGl2YWwgaGgKKyBMb2NhbFdvcmRzOiAgZXh0ZXJuIFlZVE9LRU5UWVBFIFRPS0VOVFlQRSB5eXRva2VudHlwZSB0b2tlbnR5cGUgU1RZUEUgbHZhbCBwZGYKKyBMb2NhbFdvcmRzOiAgbGFuZyB5eW91dHB1dCBkdmkgaHRtbCBwcyBQT1NJWCBsdmFscCBsbG9jcCBjYWxjIHl5byBmdmFsIFdtYXliZQorIExvY2FsV29yZHM6ICB5eXZzcCBwcmFnbWFzIG5vcmV0dXJuIGphdmEncworCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBvdXRsaW5lCitmaWxsLWNvbHVtbjogNzYKK0VuZDoKZGlmZiAtLWdpdCBhL05PVElDRSBiL05PVElDRQppbmRleCBhOGFiNWI1Li45NGE5ZWQwIDEwMDY0NAotLS0gYS9OT1RJQ0UKKysrIGIvTk9USUNFCkBAIC0xLDI4NyArMSw2MjYgQEAKLUNvcHlyaWdodCAoQykgMTk5Mi0yMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNwogCi0JCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQotCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKLQotIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSAgICAgICAgICAgICAgICAgICAgICAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9yZy8+CiAgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCiAgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCiAKLQkJCSAgICBQcmVhbWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWFtYmxlCiAKLSAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgotZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLUxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKLXNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCi1HZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQotRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwotdXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQotdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCisgIFRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBhIGZyZWUsIGNvcHlsZWZ0IGxpY2Vuc2UgZm9yCitzb2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MuCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFuZCBvdGhlciBwcmFjdGljYWwgd29ya3MgYXJlIGRlc2lnbmVkCit0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiAgQnkgY29udHJhc3QsCit0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0bworc2hhcmUgYW5kIGNoYW5nZSBhbGwgdmVyc2lvbnMgb2YgYSBwcm9ncmFtLS10byBtYWtlIHN1cmUgaXQgcmVtYWlucyBmcmVlCitzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFdlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB1c2UgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9zdCBvZiBvdXIgc29mdHdhcmU7IGl0IGFwcGxpZXMgYWxzbyB0bworYW55IG90aGVyIHdvcmsgcmVsZWFzZWQgdGhpcyB3YXkgYnkgaXRzIGF1dGhvcnMuICBZb3UgY2FuIGFwcGx5IGl0IHRvCiB5b3VyIHByb2dyYW1zLCB0b28uCiAKICAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAogcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQogaGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgotdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0Ci1pZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAotaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgordGhlbSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3UKK3dhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3CitmcmVlIHByb2dyYW1zLCBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KIAotICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCi1hbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCi1UaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQotZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gZGVueWluZyB5b3UKK3RoZXNlIHJpZ2h0cyBvciBhc2tpbmcgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiAgVGhlcmVmb3JlLCB5b3UgaGF2ZQorY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmCit5b3UgbW9kaWZ5IGl0OiByZXNwb25zaWJpbGl0aWVzIHRvIHJlc3BlY3QgdGhlIGZyZWVkb20gb2Ygb3RoZXJzLgogCiAgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKLWdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoteW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKLXNvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKLXJpZ2h0cy4KK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IHBhc3Mgb24gdG8gdGhlIHJlY2lwaWVudHMgdGhlIHNhbWUKK2ZyZWVkb21zIHRoYXQgeW91IHJlY2VpdmVkLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlCitvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleQora25vdyB0aGVpciByaWdodHMuCiAKLSAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAotKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKLWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisgIERldmVsb3BlcnMgdGhhdCB1c2UgdGhlIEdOVSBHUEwgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczoKKygxKSBhc3NlcnQgY29weXJpZ2h0IG9uIHRoZSBzb2Z0d2FyZSwgYW5kICgyKSBvZmZlciB5b3UgdGhpcyBMaWNlbnNlCitnaXZpbmcgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IGl0LgogCi0gIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCi10aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQotc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCi13YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwotdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKLWF1dGhvcnMnIHJlcHV0YXRpb25zLgorICBGb3IgdGhlIGRldmVsb3BlcnMnIGFuZCBhdXRob3JzJyBwcm90ZWN0aW9uLCB0aGUgR1BMIGNsZWFybHkgZXhwbGFpbnMKK3RoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIEZvciBib3RoIHVzZXJzJyBhbmQKK2F1dGhvcnMnIHNha2UsIHRoZSBHUEwgcmVxdWlyZXMgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBiZSBtYXJrZWQgYXMKK2NoYW5nZWQsIHNvIHRoYXQgdGhlaXIgcHJvYmxlbXMgd2lsbCBub3QgYmUgYXR0cmlidXRlZCBlcnJvbmVvdXNseSB0bworYXV0aG9ycyBvZiBwcmV2aW91cyB2ZXJzaW9ucy4KIAotICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQotcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQotcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQotcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55Ci1wYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorICBTb21lIGRldmljZXMgYXJlIGRlc2lnbmVkIHRvIGRlbnkgdXNlcnMgYWNjZXNzIHRvIGluc3RhbGwgb3IgcnVuCittb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgc29mdHdhcmUgaW5zaWRlIHRoZW0sIGFsdGhvdWdoIHRoZSBtYW51ZmFjdHVyZXIKK2NhbiBkbyBzby4gIFRoaXMgaXMgZnVuZGFtZW50YWxseSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgYWltIG9mCitwcm90ZWN0aW5nIHVzZXJzJyBmcmVlZG9tIHRvIGNoYW5nZSB0aGUgc29mdHdhcmUuICBUaGUgc3lzdGVtYXRpYworcGF0dGVybiBvZiBzdWNoIGFidXNlIG9jY3VycyBpbiB0aGUgYXJlYSBvZiBwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMgdG8KK3VzZSwgd2hpY2ggaXMgcHJlY2lzZWx5IHdoZXJlIGl0IGlzIG1vc3QgdW5hY2NlcHRhYmxlLiAgVGhlcmVmb3JlLCB3ZQoraGF2ZSBkZXNpZ25lZCB0aGlzIHZlcnNpb24gb2YgdGhlIEdQTCB0byBwcm9oaWJpdCB0aGUgcHJhY3RpY2UgZm9yIHRob3NlCitwcm9kdWN0cy4gIElmIHN1Y2ggcHJvYmxlbXMgYXJpc2Ugc3Vic3RhbnRpYWxseSBpbiBvdGhlciBkb21haW5zLCB3ZQorc3RhbmQgcmVhZHkgdG8gZXh0ZW5kIHRoaXMgcHJvdmlzaW9uIHRvIHRob3NlIGRvbWFpbnMgaW4gZnV0dXJlIHZlcnNpb25zCitvZiB0aGUgR1BMLCBhcyBuZWVkZWQgdG8gcHJvdGVjdCB0aGUgZnJlZWRvbSBvZiB1c2Vycy4KKworICBGaW5hbGx5LCBldmVyeSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZSBwYXRlbnRzLgorU3RhdGVzIHNob3VsZCBub3QgYWxsb3cgcGF0ZW50cyB0byByZXN0cmljdCBkZXZlbG9wbWVudCBhbmQgdXNlIG9mCitzb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaCB0bworYXZvaWQgdGhlIHNwZWNpYWwgZGFuZ2VyIHRoYXQgcGF0ZW50cyBhcHBsaWVkIHRvIGEgZnJlZSBwcm9ncmFtIGNvdWxkCittYWtlIGl0IGVmZmVjdGl2ZWx5IHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB0aGUgR1BMIGFzc3VyZXMgdGhhdAorcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCiAKICAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKIG1vZGlmaWNhdGlvbiBmb2xsb3cuCi0MCi0JCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQotICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCiAKLSAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucwotYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKLXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKLXJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgotbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKLXRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCi1laXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgotbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgotdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisgICAgICAgICAgICAgICAgICAgICAgIFRFUk1TIEFORCBDT05ESVRJT05TCiAKLUFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Ci1jb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCi1ydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCi1pcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQotUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KLVdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorICAwLiBEZWZpbml0aW9ucy4KIAotICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKLXNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQotY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQotY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQotbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OwotYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQotYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKyAgIlRoaXMgTGljZW5zZSIgcmVmZXJzIHRvIHZlcnNpb24gMyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCiAKLVlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoteW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKyAgIkNvcHlyaWdodCIgYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIga2luZHMgb2YKK3dvcmtzLCBzdWNoIGFzIHNlbWljb25kdWN0b3IgbWFza3MuCiAKLSAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgotb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAotZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCi1hYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorICAiVGhlIFByb2dyYW0iIHJlZmVycyB0byBhbnkgY29weXJpZ2h0YWJsZSB3b3JrIGxpY2Vuc2VkIHVuZGVyIHRoaXMKK0xpY2Vuc2UuICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gICJMaWNlbnNlZXMiIGFuZAorInJlY2lwaWVudHMiIG1heSBiZSBpbmRpdmlkdWFscyBvciBvcmdhbml6YXRpb25zLgogCi0gICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCi0gICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKyAgVG8gIm1vZGlmeSIgYSB3b3JrIG1lYW5zIHRvIGNvcHkgZnJvbSBvciBhZGFwdCBhbGwgb3IgcGFydCBvZiB0aGUgd29yaworaW4gYSBmYXNoaW9uIHJlcXVpcmluZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mIGFuCitleGFjdCBjb3B5LiAgVGhlIHJlc3VsdGluZyB3b3JrIGlzIGNhbGxlZCBhICJtb2RpZmllZCB2ZXJzaW9uIiBvZiB0aGUKK2VhcmxpZXIgd29yayBvciBhIHdvcmsgImJhc2VkIG9uIiB0aGUgZWFybGllciB3b3JrLgogCi0gICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCi0gICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55Ci0gICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKLSAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisgIEEgImNvdmVyZWQgd29yayIgbWVhbnMgZWl0aGVyIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0gb3IgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbS4KIAotICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKLSAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCi0gICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgotICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQotICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQotICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKLSAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcwotICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0Ci0gICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgotICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQotDAotVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgotaWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKLWFuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgotdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQotc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91Ci1kaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKLW9uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgotdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKLWVudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKyAgVG8gInByb3BhZ2F0ZSIgYSB3b3JrIG1lYW5zIHRvIGRvIGFueXRoaW5nIHdpdGggaXQgdGhhdCwgd2l0aG91dAorcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvcgoraW5mcmluZ2VtZW50IHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdywgZXhjZXB0IGV4ZWN1dGluZyBpdCBvbiBhCitjb21wdXRlciBvciBtb2RpZnlpbmcgYSBwcml2YXRlIGNvcHkuICBQcm9wYWdhdGlvbiBpbmNsdWRlcyBjb3B5aW5nLAorZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUKK3B1YmxpYywgYW5kIGluIHNvbWUgY291bnRyaWVzIG90aGVyIGFjdGl2aXRpZXMgYXMgd2VsbC4KIAotVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Ci15b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KLWV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgotY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKyAgVG8gImNvbnZleSIgYSB3b3JrIG1lYW5zIGFueSBraW5kIG9mIHByb3BhZ2F0aW9uIHRoYXQgZW5hYmxlcyBvdGhlcgorcGFydGllcyB0byBtYWtlIG9yIHJlY2VpdmUgY29waWVzLiAgTWVyZSBpbnRlcmFjdGlvbiB3aXRoIGEgdXNlciB0aHJvdWdoCithIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgogCi1JbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCi13aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKLWEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCi10aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorICBBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyAiQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyIKK3RvIHRoZSBleHRlbnQgdGhhdCBpdCBpbmNsdWRlcyBhIGNvbnZlbmllbnQgYW5kIHByb21pbmVudGx5IHZpc2libGUKK2ZlYXR1cmUgdGhhdCAoMSkgZGlzcGxheXMgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSwgYW5kICgyKQordGVsbHMgdGhlIHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0aGUKK2V4dGVudCB0aGF0IHdhcnJhbnRpZXMgYXJlIHByb3ZpZGVkKSwgdGhhdCBsaWNlbnNlZXMgbWF5IGNvbnZleSB0aGUKK3dvcmsgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIElmCit0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYQorbWVudSwgYSBwcm9taW5lbnQgaXRlbSBpbiB0aGUgbGlzdCBtZWV0cyB0aGlzIGNyaXRlcmlvbi4KIAotICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKLXVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgotU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAxLiBTb3VyY2UgQ29kZS4KIAotICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKLSAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKLSAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKyAgVGhlICJzb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsKK2ZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gICJPYmplY3QgY29kZSIgbWVhbnMgYW55IG5vbi1zb3VyY2UKK2Zvcm0gb2YgYSB3b3JrLgogCi0gICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKLSAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgotICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKLSAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCi0gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KLSAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisgIEEgIlN0YW5kYXJkIEludGVyZmFjZSIgbWVhbnMgYW4gaW50ZXJmYWNlIHRoYXQgZWl0aGVyIGlzIGFuIG9mZmljaWFsCitzdGFuZGFyZCBkZWZpbmVkIGJ5IGEgcmVjb2duaXplZCBzdGFuZGFyZHMgYm9keSwgb3IsIGluIHRoZSBjYXNlIG9mCitpbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdAoraXMgd2lkZWx5IHVzZWQgYW1vbmcgZGV2ZWxvcGVycyB3b3JraW5nIGluIHRoYXQgbGFuZ3VhZ2UuCiAKLSAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgotICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCi0gICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKLSAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCi0gICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisgIFRoZSAiU3lzdGVtIExpYnJhcmllcyIgb2YgYW4gZXhlY3V0YWJsZSB3b3JrIGluY2x1ZGUgYW55dGhpbmcsIG90aGVyCit0aGFuIHRoZSB3b3JrIGFzIGEgd2hvbGUsIHRoYXQgKGEpIGlzIGluY2x1ZGVkIGluIHRoZSBub3JtYWwgZm9ybSBvZgorcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgorQ29tcG9uZW50LCBhbmQgKGIpIHNlcnZlcyBvbmx5IHRvIGVuYWJsZSB1c2Ugb2YgdGhlIHdvcmsgd2l0aCB0aGF0CitNYWpvciBDb21wb25lbnQsIG9yIHRvIGltcGxlbWVudCBhIFN0YW5kYXJkIEludGVyZmFjZSBmb3Igd2hpY2ggYW4KK2ltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCisiTWFqb3IgQ29tcG9uZW50IiwgaW4gdGhpcyBjb250ZXh0LCBtZWFucyBhIG1ham9yIGVzc2VudGlhbCBjb21wb25lbnQKKyhrZXJuZWwsIHdpbmRvdyBzeXN0ZW0sIGFuZCBzbyBvbikgb2YgdGhlIHNwZWNpZmljIG9wZXJhdGluZyBzeXN0ZW0KKyhpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCitwcm9kdWNlIHRoZSB3b3JrLCBvciBhbiBvYmplY3QgY29kZSBpbnRlcnByZXRlciB1c2VkIHRvIHJ1biBpdC4KIAotVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgotbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKLWNvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Ci1hc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KLWNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKLXNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQotYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKLWZvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCi1vcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAotaXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorICBUaGUgIkNvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsCit0aGUgc291cmNlIGNvZGUgbmVlZGVkIHRvIGdlbmVyYXRlLCBpbnN0YWxsLCBhbmQgKGZvciBhbiBleGVjdXRhYmxlCit3b3JrKSBydW4gdGhlIG9iamVjdCBjb2RlIGFuZCB0byBtb2RpZnkgdGhlIHdvcmssIGluY2x1ZGluZyBzY3JpcHRzIHRvCitjb250cm9sIHRob3NlIGFjdGl2aXRpZXMuICBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKK1N5c3RlbSBMaWJyYXJpZXMsIG9yIGdlbmVyYWwtcHVycG9zZSB0b29scyBvciBnZW5lcmFsbHkgYXZhaWxhYmxlIGZyZWUKK3Byb2dyYW1zIHdoaWNoIGFyZSB1c2VkIHVubW9kaWZpZWQgaW4gcGVyZm9ybWluZyB0aG9zZSBhY3Rpdml0aWVzIGJ1dAord2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiAgRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlCitpbmNsdWRlcyBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcyBhc3NvY2lhdGVkIHdpdGggc291cmNlIGZpbGVzIGZvcgordGhlIHdvcmssIGFuZCB0aGUgc291cmNlIGNvZGUgZm9yIHNoYXJlZCBsaWJyYXJpZXMgYW5kIGR5bmFtaWNhbGx5CitsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwKK3N1Y2ggYXMgYnkgaW50aW1hdGUgZGF0YSBjb21tdW5pY2F0aW9uIG9yIGNvbnRyb2wgZmxvdyBiZXR3ZWVuIHRob3NlCitzdWJwcm9ncmFtcyBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIHdvcmsuCiAKLUlmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKLWFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKLWFjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcwotZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Ci1jb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgotDAotICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLWV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKLW90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwotdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgotSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKLXRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCi1wYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisgIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgdXNlcnMKK2NhbiByZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZworU291cmNlLgogCi0gIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAotc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKLWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQotcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQotbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCi1Qcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAotYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwotdGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisgIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdAorc2FtZSB3b3JrLgogCi0gIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKLVByb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCi1vcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCi10aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgotcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgotWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KKyAgMi4gQmFzaWMgUGVybWlzc2lvbnMuCisKKyAgQWxsIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBhcmUgZ3JhbnRlZCBmb3IgdGhlIHRlcm0gb2YKK2NvcHlyaWdodCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGFyZSBpcnJldm9jYWJsZSBwcm92aWRlZCB0aGUgc3RhdGVkCitjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCitwZXJtaXNzaW9uIHRvIHJ1biB0aGUgdW5tb2RpZmllZCBQcm9ncmFtLiAgVGhlIG91dHB1dCBmcm9tIHJ1bm5pbmcgYQorY292ZXJlZCB3b3JrIGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlIG9ubHkgaWYgdGhlIG91dHB1dCwgZ2l2ZW4gaXRzCitjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgorcmlnaHRzIG9mIGZhaXIgdXNlIG9yIG90aGVyIGVxdWl2YWxlbnQsIGFzIHByb3ZpZGVkIGJ5IGNvcHlyaWdodCBsYXcuCisKKyAgWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdAorY29udmV5LCB3aXRob3V0IGNvbmRpdGlvbnMgc28gbG9uZyBhcyB5b3VyIGxpY2Vuc2Ugb3RoZXJ3aXNlIHJlbWFpbnMKK2luIGZvcmNlLiAgWW91IG1heSBjb252ZXkgY292ZXJlZCB3b3JrcyB0byBvdGhlcnMgZm9yIHRoZSBzb2xlIHB1cnBvc2UKK29mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQord2l0aCBmYWNpbGl0aWVzIGZvciBydW5uaW5nIHRob3NlIHdvcmtzLCBwcm92aWRlZCB0aGF0IHlvdSBjb21wbHkgd2l0aAordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbiBjb252ZXlpbmcgYWxsIG1hdGVyaWFsIGZvciB3aGljaCB5b3UgZG8KK25vdCBjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKK2ZvciB5b3UgbXVzdCBkbyBzbyBleGNsdXNpdmVseSBvbiB5b3VyIGJlaGFsZiwgdW5kZXIgeW91ciBkaXJlY3Rpb24KK2FuZCBjb250cm9sLCBvbiB0ZXJtcyB0aGF0IHByb2hpYml0IHRoZW0gZnJvbSBtYWtpbmcgYW55IGNvcGllcyBvZgoreW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KKworICBDb252ZXlpbmcgdW5kZXIgYW55IG90aGVyIGNpcmN1bXN0YW5jZXMgaXMgcGVybWl0dGVkIHNvbGVseSB1bmRlcgordGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCittYWtlcyBpdCB1bm5lY2Vzc2FyeS4KKworICAzLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdhbCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgorCisgIE5vIGNvdmVyZWQgd29yayBzaGFsbCBiZSBkZWVtZWQgcGFydCBvZiBhbiBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbAorbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9ucyB1bmRlciBhcnRpY2xlCisxMSBvZiB0aGUgV0lQTyBjb3B5cmlnaHQgdHJlYXR5IGFkb3B0ZWQgb24gMjAgRGVjZW1iZXIgMTk5Niwgb3IKK3NpbWlsYXIgbGF3cyBwcm9oaWJpdGluZyBvciByZXN0cmljdGluZyBjaXJjdW12ZW50aW9uIG9mIHN1Y2gKK21lYXN1cmVzLgorCisgIFdoZW4geW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgeW91IHdhaXZlIGFueSBsZWdhbCBwb3dlciB0byBmb3JiaWQKK2NpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2ggY2lyY3VtdmVudGlvbgoraXMgZWZmZWN0ZWQgYnkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0bwordGhlIGNvdmVyZWQgd29yaywgYW5kIHlvdSBkaXNjbGFpbSBhbnkgaW50ZW50aW9uIHRvIGxpbWl0IG9wZXJhdGlvbiBvcgorbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0IHRoZSB3b3JrJ3MKK3VzZXJzLCB5b3VyIG9yIHRoaXJkIHBhcnRpZXMnIGxlZ2FsIHJpZ2h0cyB0byBmb3JiaWQgY2lyY3VtdmVudGlvbiBvZgordGVjaG5vbG9naWNhbCBtZWFzdXJlcy4KKworICA0LiBDb252ZXlpbmcgVmVyYmF0aW0gQ29waWVzLgorCisgIFlvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQorcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQKK2FwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZTsKK2tlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQorbm9uLXBlcm1pc3NpdmUgdGVybXMgYWRkZWQgaW4gYWNjb3JkIHdpdGggc2VjdGlvbiA3IGFwcGx5IHRvIHRoZSBjb2RlOwora2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgb2YgdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbGwKK3JlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCisgIFlvdSBtYXkgY2hhcmdlIGFueSBwcmljZSBvciBubyBwcmljZSBmb3IgZWFjaCBjb3B5IHRoYXQgeW91IGNvbnZleSwKK2FuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCisKKyAgNS4gQ29udmV5aW5nIE1vZGlmaWVkIFNvdXJjZSBWZXJzaW9ucy4KKworICBZb3UgbWF5IGNvbnZleSBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIG9yIHRoZSBtb2RpZmljYXRpb25zIHRvCitwcm9kdWNlIGl0IGZyb20gdGhlIFByb2dyYW0sIGluIHRoZSBmb3JtIG9mIHNvdXJjZSBjb2RlIHVuZGVyIHRoZQordGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgbW9kaWZpZWQKKyAgICBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCisKKyAgICBiKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBpdCBpcworICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgorICAgIDcuICBUaGlzIHJlcXVpcmVtZW50IG1vZGlmaWVzIHRoZSByZXF1aXJlbWVudCBpbiBzZWN0aW9uIDQgdG8KKyAgICAia2VlcCBpbnRhY3QgYWxsIG5vdGljZXMiLgorCisgICAgYykgWW91IG11c3QgbGljZW5zZSB0aGUgZW50aXJlIHdvcmssIGFzIGEgd2hvbGUsIHVuZGVyIHRoaXMKKyAgICBMaWNlbnNlIHRvIGFueW9uZSB3aG8gY29tZXMgaW50byBwb3NzZXNzaW9uIG9mIGEgY29weS4gIFRoaXMKKyAgICBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNhYmxlIHNlY3Rpb24gNworICAgIGFkZGl0aW9uYWwgdGVybXMsIHRvIHRoZSB3aG9sZSBvZiB0aGUgd29yaywgYW5kIGFsbCBpdHMgcGFydHMsCisgICAgcmVnYXJkbGVzcyBvZiBob3cgdGhleSBhcmUgcGFja2FnZWQuICBUaGlzIExpY2Vuc2UgZ2l2ZXMgbm8KKyAgICBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90CisgICAgaW52YWxpZGF0ZSBzdWNoIHBlcm1pc3Npb24gaWYgeW91IGhhdmUgc2VwYXJhdGVseSByZWNlaXZlZCBpdC4KKworICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CisgICAgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlczsgaG93ZXZlciwgaWYgdGhlIFByb2dyYW0gaGFzIGludGVyYWN0aXZlCisgICAgaW50ZXJmYWNlcyB0aGF0IGRvIG5vdCBkaXNwbGF5IEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMsIHlvdXIKKyAgICB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KKworICBBIGNvbXBpbGF0aW9uIG9mIGEgY292ZXJlZCB3b3JrIHdpdGggb3RoZXIgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50Cit3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAorYW5kIHdoaWNoIGFyZSBub3QgY29tYmluZWQgd2l0aCBpdCBzdWNoIGFzIHRvIGZvcm0gYSBsYXJnZXIgcHJvZ3JhbSwKK2luIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4KKyJhZ2dyZWdhdGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAordXNlZCB0byBsaW1pdCB0aGUgYWNjZXNzIG9yIGxlZ2FsIHJpZ2h0cyBvZiB0aGUgY29tcGlsYXRpb24ncyB1c2VycworYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1YWwgd29ya3MgcGVybWl0LiAgSW5jbHVzaW9uIG9mIGEgY292ZXJlZCB3b3JrCitpbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgorcGFydHMgb2YgdGhlIGFnZ3JlZ2F0ZS4KKworICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KKworICBZb3UgbWF5IGNvbnZleSBhIGNvdmVyZWQgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcworb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlCittYWNoaW5lLXJlYWRhYmxlIENvcnJlc3BvbmRpbmcgU291cmNlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsCitpbiBvbmUgb2YgdGhlc2Ugd2F5czoKKworICAgIGEpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKKyAgICAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKworICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKKyAgICAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IGEKKyAgICB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMgYW5kIHZhbGlkIGZvciBhcworICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdAorICAgIG1vZGVsLCB0byBnaXZlIGFueW9uZSB3aG8gcG9zc2Vzc2VzIHRoZSBvYmplY3QgY29kZSBlaXRoZXIgKDEpIGEKKyAgICBjb3B5IG9mIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYWxsIHRoZSBzb2Z0d2FyZSBpbiB0aGUKKyAgICBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbAorICAgIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZSwgZm9yIGEgcHJpY2Ugbm8KKyAgICBtb3JlIHRoYW4geW91ciByZWFzb25hYmxlIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHRoaXMKKyAgICBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgZnJvbSBhIG5ldHdvcmsgc2VydmVyIGF0IG5vIGNoYXJnZS4KKworICAgIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlCisgICAgd3JpdHRlbiBvZmZlciB0byBwcm92aWRlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFRoaXMKKyAgICBhbHRlcm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkgb2NjYXNpb25hbGx5IGFuZCBub25jb21tZXJjaWFsbHksIGFuZAorICAgIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZAorICAgIHdpdGggc3Vic2VjdGlvbiA2Yi4KKworICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkCisgICAgcGxhY2UgKGdyYXRpcyBvciBmb3IgYSBjaGFyZ2UpLCBhbmQgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgaW4gdGhlIHNhbWUgd2F5IHRocm91Z2ggdGhlIHNhbWUgcGxhY2UgYXQgbm8KKyAgICBmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4gIElmIHRoZSBwbGFjZSB0bworICAgIGNvcHkgdGhlIG9iamVjdCBjb2RlIGlzIGEgbmV0d29yayBzZXJ2ZXIsIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZQorICAgIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KQorICAgIHRoYXQgc3VwcG9ydHMgZXF1aXZhbGVudCBjb3B5aW5nIGZhY2lsaXRpZXMsIHByb3ZpZGVkIHlvdSBtYWludGFpbgorICAgIGNsZWFyIGRpcmVjdGlvbnMgbmV4dCB0byB0aGUgb2JqZWN0IGNvZGUgc2F5aW5nIHdoZXJlIHRvIGZpbmQgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlLCB5b3UgcmVtYWluIG9ibGlnYXRlZCB0byBlbnN1cmUgdGhhdCBpdCBpcworICAgIGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyBuZWVkZWQgdG8gc2F0aXNmeSB0aGVzZSByZXF1aXJlbWVudHMuCisKKyAgICBlKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24sIHByb3ZpZGVkCisgICAgeW91IGluZm9ybSBvdGhlciBwZWVycyB3aGVyZSB0aGUgb2JqZWN0IGNvZGUgYW5kIENvcnJlc3BvbmRpbmcKKyAgICBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vCisgICAgY2hhcmdlIHVuZGVyIHN1YnNlY3Rpb24gNmQuCisKKyAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkCitmcm9tIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBhcyBhIFN5c3RlbSBMaWJyYXJ5LCBuZWVkIG5vdCBiZQoraW5jbHVkZWQgaW4gY29udmV5aW5nIHRoZSBvYmplY3QgY29kZSB3b3JrLgorCisgIEEgIlVzZXIgUHJvZHVjdCIgaXMgZWl0aGVyICgxKSBhICJjb25zdW1lciBwcm9kdWN0Iiwgd2hpY2ggbWVhbnMgYW55Cit0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSB3aGljaCBpcyBub3JtYWxseSB1c2VkIGZvciBwZXJzb25hbCwgZmFtaWx5LAorb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbgoraW50byBhIGR3ZWxsaW5nLiAgSW4gZGV0ZXJtaW5pbmcgd2hldGhlciBhIHByb2R1Y3QgaXMgYSBjb25zdW1lciBwcm9kdWN0LAorZG91YnRmdWwgY2FzZXMgc2hhbGwgYmUgcmVzb2x2ZWQgaW4gZmF2b3Igb2YgY292ZXJhZ2UuICBGb3IgYSBwYXJ0aWN1bGFyCitwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCAibm9ybWFsbHkgdXNlZCIgcmVmZXJzIHRvIGEKK3R5cGljYWwgb3IgY29tbW9uIHVzZSBvZiB0aGF0IGNsYXNzIG9mIHByb2R1Y3QsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN0YXR1cworb2YgdGhlIHBhcnRpY3VsYXIgdXNlciBvciBvZiB0aGUgd2F5IGluIHdoaWNoIHRoZSBwYXJ0aWN1bGFyIHVzZXIKK2FjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdAoraXMgYSBjb25zdW1lciBwcm9kdWN0IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgcHJvZHVjdCBoYXMgc3Vic3RhbnRpYWwKK2NvbW1lcmNpYWwsIGluZHVzdHJpYWwgb3Igbm9uLWNvbnN1bWVyIHVzZXMsIHVubGVzcyBzdWNoIHVzZXMgcmVwcmVzZW50Cit0aGUgb25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KKworICAiSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIiBmb3IgYSBVc2VyIFByb2R1Y3QgbWVhbnMgYW55IG1ldGhvZHMsCitwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwKK2FuZCBleGVjdXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGEgY292ZXJlZCB3b3JrIGluIHRoYXQgVXNlciBQcm9kdWN0IGZyb20KK2EgbW9kaWZpZWQgdmVyc2lvbiBvZiBpdHMgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBUaGUgaW5mb3JtYXRpb24gbXVzdAorc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QKK2NvZGUgaXMgaW4gbm8gY2FzZSBwcmV2ZW50ZWQgb3IgaW50ZXJmZXJlZCB3aXRoIHNvbGVseSBiZWNhdXNlCittb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZS4KKworICBJZiB5b3UgY29udmV5IGFuIG9iamVjdCBjb2RlIHdvcmsgdW5kZXIgdGhpcyBzZWN0aW9uIGluLCBvciB3aXRoLCBvcgorc3BlY2lmaWNhbGx5IGZvciB1c2UgaW4sIGEgVXNlciBQcm9kdWN0LCBhbmQgdGhlIGNvbnZleWluZyBvY2N1cnMgYXMKK3BhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZQorVXNlciBQcm9kdWN0IGlzIHRyYW5zZmVycmVkIHRvIHRoZSByZWNpcGllbnQgaW4gcGVycGV0dWl0eSBvciBmb3IgYQorZml4ZWQgdGVybSAocmVnYXJkbGVzcyBvZiBob3cgdGhlIHRyYW5zYWN0aW9uIGlzIGNoYXJhY3Rlcml6ZWQpLCB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCitieSB0aGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uLiAgQnV0IHRoaXMgcmVxdWlyZW1lbnQgZG9lcyBub3QgYXBwbHkKK2lmIG5laXRoZXIgeW91IG5vciBhbnkgdGhpcmQgcGFydHkgcmV0YWlucyB0aGUgYWJpbGl0eSB0byBpbnN0YWxsCittb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCitiZWVuIGluc3RhbGxlZCBpbiBST00pLgorCisgIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKK3JlcXVpcmVtZW50IHRvIGNvbnRpbnVlIHRvIHByb3ZpZGUgc3VwcG9ydCBzZXJ2aWNlLCB3YXJyYW50eSwgb3IgdXBkYXRlcworZm9yIGEgd29yayB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGluc3RhbGxlZCBieSB0aGUgcmVjaXBpZW50LCBvciBmb3IKK3RoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEKK25ldHdvcmsgbWF5IGJlIGRlbmllZCB3aGVuIHRoZSBtb2RpZmljYXRpb24gaXRzZWxmIG1hdGVyaWFsbHkgYW5kCithZHZlcnNlbHkgYWZmZWN0cyB0aGUgb3BlcmF0aW9uIG9mIHRoZSBuZXR3b3JrIG9yIHZpb2xhdGVzIHRoZSBydWxlcyBhbmQKK3Byb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCisKKyAgQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQsIGFuZCBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gcHJvdmlkZWQsCitpbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5Citkb2N1bWVudGVkIChhbmQgd2l0aCBhbiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbgorc291cmNlIGNvZGUgZm9ybSksIGFuZCBtdXN0IHJlcXVpcmUgbm8gc3BlY2lhbCBwYXNzd29yZCBvciBrZXkgZm9yCit1bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy4KKworICA3LiBBZGRpdGlvbmFsIFRlcm1zLgorCisgICJBZGRpdGlvbmFsIHBlcm1pc3Npb25zIiBhcmUgdGVybXMgdGhhdCBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIGJ5IG1ha2luZyBleGNlcHRpb25zIGZyb20gb25lIG9yIG1vcmUgb2YgaXRzIGNvbmRpdGlvbnMuCitBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCitiZSB0cmVhdGVkIGFzIHRob3VnaCB0aGV5IHdlcmUgaW5jbHVkZWQgaW4gdGhpcyBMaWNlbnNlLCB0byB0aGUgZXh0ZW50Cit0aGF0IHRoZXkgYXJlIHZhbGlkIHVuZGVyIGFwcGxpY2FibGUgbGF3LiAgSWYgYWRkaXRpb25hbCBwZXJtaXNzaW9ucworYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQordW5kZXIgdGhvc2UgcGVybWlzc2lvbnMsIGJ1dCB0aGUgZW50aXJlIFByb2dyYW0gcmVtYWlucyBnb3Zlcm5lZCBieQordGhpcyBMaWNlbnNlIHdpdGhvdXQgcmVnYXJkIHRvIHRoZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zLgorCisgIFdoZW4geW91IGNvbnZleSBhIGNvcHkgb2YgYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgYXQgeW91ciBvcHRpb24KK3JlbW92ZSBhbnkgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBmcm9tIHRoYXQgY29weSwgb3IgZnJvbSBhbnkgcGFydCBvZgoraXQuICAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgorcmVtb3ZhbCBpbiBjZXJ0YWluIGNhc2VzIHdoZW4geW91IG1vZGlmeSB0aGUgd29yay4pICBZb3UgbWF5IHBsYWNlCithZGRpdGlvbmFsIHBlcm1pc3Npb25zIG9uIG1hdGVyaWFsLCBhZGRlZCBieSB5b3UgdG8gYSBjb3ZlcmVkIHdvcmssCitmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCisKKyAgTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBmb3IgbWF0ZXJpYWwgeW91CithZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mCit0aGF0IG1hdGVyaWFsKSBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0ZXJtczoKKworICAgIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZQorICAgIHRlcm1zIG9mIHNlY3Rpb25zIDE1IGFuZCAxNiBvZiB0aGlzIExpY2Vuc2U7IG9yCisKKyAgICBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IKKyAgICBhdXRob3IgYXR0cmlidXRpb25zIGluIHRoYXQgbWF0ZXJpYWwgb3IgaW4gdGhlIEFwcHJvcHJpYXRlIExlZ2FsCisgICAgTm90aWNlcyBkaXNwbGF5ZWQgYnkgd29ya3MgY29udGFpbmluZyBpdDsgb3IKKworICAgIGMpIFByb2hpYml0aW5nIG1pc3JlcHJlc2VudGF0aW9uIG9mIHRoZSBvcmlnaW4gb2YgdGhhdCBtYXRlcmlhbCwgb3IKKyAgICByZXF1aXJpbmcgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBvZiBzdWNoIG1hdGVyaWFsIGJlIG1hcmtlZCBpbgorICAgIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKKworICAgIGQpIExpbWl0aW5nIHRoZSB1c2UgZm9yIHB1YmxpY2l0eSBwdXJwb3NlcyBvZiBuYW1lcyBvZiBsaWNlbnNvcnMgb3IKKyAgICBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKKworICAgIGUpIERlY2xpbmluZyB0byBncmFudCByaWdodHMgdW5kZXIgdHJhZGVtYXJrIGxhdyBmb3IgdXNlIG9mIHNvbWUKKyAgICB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKKworICAgIGYpIFJlcXVpcmluZyBpbmRlbW5pZmljYXRpb24gb2YgbGljZW5zb3JzIGFuZCBhdXRob3JzIG9mIHRoYXQKKyAgICBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZgorICAgIGl0KSB3aXRoIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIG9mIGxpYWJpbGl0eSB0byB0aGUgcmVjaXBpZW50LCBmb3IKKyAgICBhbnkgbGlhYmlsaXR5IHRoYXQgdGhlc2UgY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgZGlyZWN0bHkgaW1wb3NlIG9uCisgICAgdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgorCisgIEFsbCBvdGhlciBub24tcGVybWlzc2l2ZSBhZGRpdGlvbmFsIHRlcm1zIGFyZSBjb25zaWRlcmVkICJmdXJ0aGVyCityZXN0cmljdGlvbnMiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMgeW91CityZWNlaXZlZCBpdCwgb3IgYW55IHBhcnQgb2YgaXQsIGNvbnRhaW5zIGEgbm90aWNlIHN0YXRpbmcgdGhhdCBpdCBpcworZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggYSB0ZXJtIHRoYXQgaXMgYSBmdXJ0aGVyCityZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zCithIGZ1cnRoZXIgcmVzdHJpY3Rpb24gYnV0IHBlcm1pdHMgcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nIHVuZGVyIHRoaXMKK0xpY2Vuc2UsIHlvdSBtYXkgYWRkIHRvIGEgY292ZXJlZCB3b3JrIG1hdGVyaWFsIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcworb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMKK25vdCBzdXJ2aXZlIHN1Y2ggcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nLgorCisgIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKK211c3QgcGxhY2UsIGluIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMsIGEgc3RhdGVtZW50IG9mIHRoZQorYWRkaXRpb25hbCB0ZXJtcyB0aGF0IGFwcGx5IHRvIHRob3NlIGZpbGVzLCBvciBhIG5vdGljZSBpbmRpY2F0aW5nCit3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgorCisgIEFkZGl0aW9uYWwgdGVybXMsIHBlcm1pc3NpdmUgb3Igbm9uLXBlcm1pc3NpdmUsIG1heSBiZSBzdGF0ZWQgaW4gdGhlCitmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOwordGhlIGFib3ZlIHJlcXVpcmVtZW50cyBhcHBseSBlaXRoZXIgd2F5LgorCisgIDguIFRlcm1pbmF0aW9uLgorCisgIFlvdSBtYXkgbm90IHByb3BhZ2F0ZSBvciBtb2RpZnkgYSBjb3ZlcmVkIHdvcmsgZXhjZXB0IGFzIGV4cHJlc3NseQorcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvcgorbW9kaWZ5IGl0IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyCit0aGlzIExpY2Vuc2UgKGluY2x1ZGluZyBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhlIHRoaXJkCitwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCisKKyAgSG93ZXZlciwgaWYgeW91IGNlYXNlIGFsbCB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlLCB0aGVuIHlvdXIKK2xpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQorcHJvdmlzaW9uYWxseSwgdW5sZXNzIGFuZCB1bnRpbCB0aGUgY29weXJpZ2h0IGhvbGRlciBleHBsaWNpdGx5IGFuZAorZmluYWxseSB0ZXJtaW5hdGVzIHlvdXIgbGljZW5zZSwgYW5kIChiKSBwZXJtYW5lbnRseSwgaWYgdGhlIGNvcHlyaWdodAoraG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMKK3ByaW9yIHRvIDYwIGRheXMgYWZ0ZXIgdGhlIGNlc3NhdGlvbi4KKworICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKK3JlaW5zdGF0ZWQgcGVybWFuZW50bHkgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIgbm90aWZpZXMgeW91IG9mIHRoZQordmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucywgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaGF2ZQorcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0Citjb3B5cmlnaHQgaG9sZGVyLCBhbmQgeW91IGN1cmUgdGhlIHZpb2xhdGlvbiBwcmlvciB0byAzMCBkYXlzIGFmdGVyCit5b3VyIHJlY2VpcHQgb2YgdGhlIG5vdGljZS4KKworICBUZXJtaW5hdGlvbiBvZiB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIHNlY3Rpb24gZG9lcyBub3QgdGVybWluYXRlIHRoZQorbGljZW5zZXMgb2YgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMgb3IgcmlnaHRzIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CityZWluc3RhdGVkLCB5b3UgZG8gbm90IHF1YWxpZnkgdG8gcmVjZWl2ZSBuZXcgbGljZW5zZXMgZm9yIHRoZSBzYW1lCittYXRlcmlhbCB1bmRlciBzZWN0aW9uIDEwLgorCisgIDkuIEFjY2VwdGFuY2UgTm90IFJlcXVpcmVkIGZvciBIYXZpbmcgQ29waWVzLgorCisgIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgorcnVuIGEgY29weSBvZiB0aGUgUHJvZ3JhbS4gIEFuY2lsbGFyeSBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQgd29yaworb2NjdXJyaW5nIHNvbGVseSBhcyBhIGNvbnNlcXVlbmNlIG9mIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24KK3RvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCitub3RoaW5nIG90aGVyIHRoYW4gdGhpcyBMaWNlbnNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBwcm9wYWdhdGUgb3IKK21vZGlmeSBhbnkgY292ZXJlZCB3b3JrLiAgVGhlc2UgYWN0aW9ucyBpbmZyaW5nZSBjb3B5cmlnaHQgaWYgeW91IGRvCitub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKK2NvdmVyZWQgd29yaywgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28uCisKKyAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgorCisgIEVhY2ggdGltZSB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkKK3JlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZAorcHJvcGFnYXRlIHRoYXQgd29yaywgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuICBZb3UgYXJlIG5vdCByZXNwb25zaWJsZQorZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aCB0aGlzIExpY2Vuc2UuCisKKyAgQW4gImVudGl0eSB0cmFuc2FjdGlvbiIgaXMgYSB0cmFuc2FjdGlvbiB0cmFuc2ZlcnJpbmcgY29udHJvbCBvZiBhbgorb3JnYW5pemF0aW9uLCBvciBzdWJzdGFudGlhbGx5IGFsbCBhc3NldHMgb2Ygb25lLCBvciBzdWJkaXZpZGluZyBhbgorb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKK3dvcmsgcmVzdWx0cyBmcm9tIGFuIGVudGl0eSB0cmFuc2FjdGlvbiwgZWFjaCBwYXJ0eSB0byB0aGF0Cit0cmFuc2FjdGlvbiB3aG8gcmVjZWl2ZXMgYSBjb3B5IG9mIHRoZSB3b3JrIGFsc28gcmVjZWl2ZXMgd2hhdGV2ZXIKK2xpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZAorZ2l2ZSB1bmRlciB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLCBwbHVzIGEgcmlnaHQgdG8gcG9zc2Vzc2lvbiBvZiB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGZyb20gdGhlIHByZWRlY2Vzc29yIGluIGludGVyZXN0LCBpZgordGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgorCisgIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIGV4ZXJjaXNlIG9mIHRoZQorcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKK25vdCBpbXBvc2UgYSBsaWNlbnNlIGZlZSwgcm95YWx0eSwgb3Igb3RoZXIgY2hhcmdlIGZvciBleGVyY2lzZSBvZgorcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgeW91IG1heSBub3QgaW5pdGlhdGUgbGl0aWdhdGlvbgorKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKK2FueSBwYXRlbnQgY2xhaW0gaXMgaW5mcmluZ2VkIGJ5IG1ha2luZywgdXNpbmcsIHNlbGxpbmcsIG9mZmVyaW5nIGZvcgorc2FsZSwgb3IgaW1wb3J0aW5nIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uIG9mIGl0LgorCisgIDExLiBQYXRlbnRzLgorCisgIEEgImNvbnRyaWJ1dG9yIiBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKK0xpY2Vuc2Ugb2YgdGhlIFByb2dyYW0gb3IgYSB3b3JrIG9uIHdoaWNoIHRoZSBQcm9ncmFtIGlzIGJhc2VkLiAgVGhlCit3b3JrIHRodXMgbGljZW5zZWQgaXMgY2FsbGVkIHRoZSBjb250cmlidXRvcidzICJjb250cmlidXRvciB2ZXJzaW9uIi4KKworICBBIGNvbnRyaWJ1dG9yJ3MgImVzc2VudGlhbCBwYXRlbnQgY2xhaW1zIiBhcmUgYWxsIHBhdGVudCBjbGFpbXMKK293bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRyaWJ1dG9yLCB3aGV0aGVyIGFscmVhZHkgYWNxdWlyZWQgb3IKK2hlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZAorYnkgdGhpcyBMaWNlbnNlLCBvZiBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLAorYnV0IGRvIG5vdCBpbmNsdWRlIGNsYWltcyB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBvbmx5IGFzIGEKK2NvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCitwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBpbmNsdWRlcyB0aGUgcmlnaHQgdG8gZ3JhbnQKK3BhdGVudCBzdWJsaWNlbnNlcyBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZgogdGhpcyBMaWNlbnNlLgogCi0gIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKLWluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCi1jb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCisgIEVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KK21ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHJ1biwgbW9kaWZ5IGFuZAorcHJvcGFnYXRlIHRoZSBjb250ZW50cyBvZiBpdHMgY29udHJpYnV0b3IgdmVyc2lvbi4KKworICBJbiB0aGUgZm9sbG93aW5nIHRocmVlIHBhcmFncmFwaHMsIGEgInBhdGVudCBsaWNlbnNlIiBpcyBhbnkgZXhwcmVzcworYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQsIGhvd2V2ZXIgZGVub21pbmF0ZWQsIG5vdCB0byBlbmZvcmNlIGEgcGF0ZW50Cisoc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCitzdWUgZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQpLiAgVG8gImdyYW50IiBzdWNoIGEgcGF0ZW50IGxpY2Vuc2UgdG8gYQorcGFydHkgbWVhbnMgdG8gbWFrZSBzdWNoIGFuIGFncmVlbWVudCBvciBjb21taXRtZW50IG5vdCB0byBlbmZvcmNlIGEKK3BhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KKworICBJZiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCBrbm93aW5nbHkgcmVseWluZyBvbiBhIHBhdGVudCBsaWNlbnNlLAorYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKK3RvIGNvcHksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aHJvdWdoIGEKK3B1YmxpY2x5IGF2YWlsYWJsZSBuZXR3b3JrIHNlcnZlciBvciBvdGhlciByZWFkaWx5IGFjY2Vzc2libGUgbWVhbnMsCit0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCithdmFpbGFibGUsIG9yICgyKSBhcnJhbmdlIHRvIGRlcHJpdmUgeW91cnNlbGYgb2YgdGhlIGJlbmVmaXQgb2YgdGhlCitwYXRlbnQgbGljZW5zZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHdvcmssIG9yICgzKSBhcnJhbmdlLCBpbiBhIG1hbm5lcgorY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudAorbGljZW5zZSB0byBkb3duc3RyZWFtIHJlY2lwaWVudHMuICAiS25vd2luZ2x5IHJlbHlpbmciIG1lYW5zIHlvdSBoYXZlCithY3R1YWwga25vd2xlZGdlIHRoYXQsIGJ1dCBmb3IgdGhlIHBhdGVudCBsaWNlbnNlLCB5b3VyIGNvbnZleWluZyB0aGUKK2NvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsKK2luIGEgY291bnRyeSwgd291bGQgaW5mcmluZ2Ugb25lIG9yIG1vcmUgaWRlbnRpZmlhYmxlIHBhdGVudHMgaW4gdGhhdAorY291bnRyeSB0aGF0IHlvdSBoYXZlIHJlYXNvbiB0byBiZWxpZXZlIGFyZSB2YWxpZC4KKworICBJZiwgcHVyc3VhbnQgdG8gb3IgaW4gY29ubmVjdGlvbiB3aXRoIGEgc2luZ2xlIHRyYW5zYWN0aW9uIG9yCithcnJhbmdlbWVudCwgeW91IGNvbnZleSwgb3IgcHJvcGFnYXRlIGJ5IHByb2N1cmluZyBjb252ZXlhbmNlIG9mLCBhCitjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMKK3JlY2VpdmluZyB0aGUgY292ZXJlZCB3b3JrIGF1dGhvcml6aW5nIHRoZW0gdG8gdXNlLCBwcm9wYWdhdGUsIG1vZGlmeQorb3IgY29udmV5IGEgc3BlY2lmaWMgY29weSBvZiB0aGUgY292ZXJlZCB3b3JrLCB0aGVuIHRoZSBwYXRlbnQgbGljZW5zZQoreW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQKK3dvcmsgYW5kIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIEEgcGF0ZW50IGxpY2Vuc2UgaXMgImRpc2NyaW1pbmF0b3J5IiBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbgordGhlIHNjb3BlIG9mIGl0cyBjb3ZlcmFnZSwgcHJvaGliaXRzIHRoZSBleGVyY2lzZSBvZiwgb3IgaXMKK2NvbmRpdGlvbmVkIG9uIHRoZSBub24tZXhlcmNpc2Ugb2Ygb25lIG9yIG1vcmUgb2YgdGhlIHJpZ2h0cyB0aGF0IGFyZQorc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZAord29yayBpZiB5b3UgYXJlIGEgcGFydHkgdG8gYW4gYXJyYW5nZW1lbnQgd2l0aCBhIHRoaXJkIHBhcnR5IHRoYXQgaXMKK2luIHRoZSBidXNpbmVzcyBvZiBkaXN0cmlidXRpbmcgc29mdHdhcmUsIHVuZGVyIHdoaWNoIHlvdSBtYWtlIHBheW1lbnQKK3RvIHRoZSB0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nCit0aGUgd29yaywgYW5kIHVuZGVyIHdoaWNoIHRoZSB0aGlyZCBwYXJ0eSBncmFudHMsIHRvIGFueSBvZiB0aGUKK3BhcnRpZXMgd2hvIHdvdWxkIHJlY2VpdmUgdGhlIGNvdmVyZWQgd29yayBmcm9tIHlvdSwgYSBkaXNjcmltaW5hdG9yeQorcGF0ZW50IGxpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yaworY29udmV5ZWQgYnkgeW91IChvciBjb3BpZXMgbWFkZSBmcm9tIHRob3NlIGNvcGllcyksIG9yIChiKSBwcmltYXJpbHkKK2ZvciBhbmQgaW4gY29ubmVjdGlvbiB3aXRoIHNwZWNpZmljIHByb2R1Y3RzIG9yIGNvbXBpbGF0aW9ucyB0aGF0Citjb250YWluIHRoZSBjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsCitvciB0aGF0IHBhdGVudCBsaWNlbnNlIHdhcyBncmFudGVkLCBwcmlvciB0byAyOCBNYXJjaCAyMDA3LgorCisgIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBleGNsdWRpbmcgb3IgbGltaXRpbmcKK2FueSBpbXBsaWVkIGxpY2Vuc2Ugb3Igb3RoZXIgZGVmZW5zZXMgdG8gaW5mcmluZ2VtZW50IHRoYXQgbWF5CitvdGhlcndpc2UgYmUgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhcHBsaWNhYmxlIHBhdGVudCBsYXcuCisKKyAgMTIuIE5vIFN1cnJlbmRlciBvZiBPdGhlcnMnIEZyZWVkb20uCisKKyAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgogb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAotZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKLWRpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKLUxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKLW1heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKLWxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKLWFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgotdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bwotcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90IGNvbnZleSBhCitjb3ZlcmVkIHdvcmsgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5Citub3QgY29udmV5IGl0IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiB5b3UgYWdyZWUgdG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UKK3RvIGNvbGxlY3QgYSByb3lhbHR5IGZvciBmdXJ0aGVyIGNvbnZleWluZyBmcm9tIHRob3NlIHRvIHdob20geW91IGNvbnZleQordGhlIFByb2dyYW0sIHRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIHRob3NlIHRlcm1zIGFuZCB0aGlzCitMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uCiAKLUlmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgotYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bwotYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKLWNpcmN1bXN0YW5jZXMuCisgIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgogCi1JdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55Ci1wYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQotc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQotaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCi1pbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKLWdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKLXRocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0Ci1zeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCi10byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKLWltcG9zZSB0aGF0IGNob2ljZS4KKyAgTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCB5b3UgaGF2ZQorcGVybWlzc2lvbiB0byBsaW5rIG9yIGNvbWJpbmUgYW55IGNvdmVyZWQgd29yayB3aXRoIGEgd29yayBsaWNlbnNlZAordW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZQorY29tYmluZWQgd29yaywgYW5kIHRvIGNvbnZleSB0aGUgcmVzdWx0aW5nIHdvcmsuICBUaGUgdGVybXMgb2YgdGhpcworTGljZW5zZSB3aWxsIGNvbnRpbnVlIHRvIGFwcGx5IHRvIHRoZSBwYXJ0IHdoaWNoIGlzIHRoZSBjb3ZlcmVkIHdvcmssCitidXQgdGhlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCitzZWN0aW9uIDEzLCBjb25jZXJuaW5nIGludGVyYWN0aW9uIHRocm91Z2ggYSBuZXR3b3JrIHdpbGwgYXBwbHkgdG8gdGhlCitjb21iaW5hdGlvbiBhcyBzdWNoLgogCi1UaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KLWJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgotDAotICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgotY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCi1vcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCi1tYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKLXRob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKLWNvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwotdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisgIDE0LiBSZXZpc2VkIFZlcnNpb25zIG9mIHRoaXMgTGljZW5zZS4KIAotICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucwotb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCisgIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mCit0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCiBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgogCi1FYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCi1zcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQotbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLVNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKLXRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKLUZvdW5kYXRpb24uCisgIEVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlCitQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgY2VydGFpbiBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoZSBHTlUgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUKK29wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IG51bWJlcmVkCit2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZAorYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KIAotICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCi1wcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCi10byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKLVNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcwotbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKLW9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKLW9mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorICBJZiB0aGUgUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIHByb3h5IGNhbiBkZWNpZGUgd2hpY2ggZnV0dXJlCit2ZXJzaW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgY2FuIGJlIHVzZWQsIHRoYXQgcHJveHkncworcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdQordG8gY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlIFByb2dyYW0uCiAKLQkJCSAgICBOTyBXQVJSQU5UWQorICBMYXRlciBsaWNlbnNlIHZlcnNpb25zIG1heSBnaXZlIHlvdSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudAorcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQorYXV0aG9yIG9yIGNvcHlyaWdodCBob2xkZXIgYXMgYSByZXN1bHQgb2YgeW91ciBjaG9vc2luZyB0byBmb2xsb3cgYQorbGF0ZXIgdmVyc2lvbi4KIAotICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKLUZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgotT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUwotUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKLU9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi1NRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCi1UTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCi1QUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKLVJFUEFJUiBPUiBDT1JSRUNUSU9OLgorICAxNS4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4KIAotICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCi1XSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCi1SRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAotSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCi1PVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECi1UTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKLVlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCi1QUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKLVBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWQorQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVAorSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWQorT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCitUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQorSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GCitBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCiAKLQkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKLQwKLQkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisgIDE2LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4KKworICBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTU9ESUZJRVMgQU5EL09SIENPTlZFWVMKK1RIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWQorR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFCitVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GCitEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRAorUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBQUk9HUkFNUyksCitFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRVMuCisKKyAgMTcuIEludGVycHJldGF0aW9uIG9mIFNlY3Rpb25zIDE1IGFuZCAxNi4KKworICBJZiB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBhbmQgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgcHJvdmlkZWQKK2Fib3ZlIGNhbm5vdCBiZSBnaXZlbiBsb2NhbCBsZWdhbCBlZmZlY3QgYWNjb3JkaW5nIHRvIHRoZWlyIHRlcm1zLAorcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzCithbiBhYnNvbHV0ZSB3YWl2ZXIgb2YgYWxsIGNpdmlsIGxpYWJpbGl0eSBpbiBjb25uZWN0aW9uIHdpdGggdGhlCitQcm9ncmFtLCB1bmxlc3MgYSB3YXJyYW50eSBvciBhc3N1bXB0aW9uIG9mIGxpYWJpbGl0eSBhY2NvbXBhbmllcyBhCitjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuCisKKyAgICAgICAgICAgICAgICAgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisgICAgICAgICAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKIAogICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CiBwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CkBAIC0yODksMTUgKzYyOCwxNSBAQAogCiAgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CiB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Ci1jb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAorc3RhdGUgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAogdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCiAKICAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CiAKLSAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAogICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLApAQCAtMzA2LDM3ICs2NDUsMzAgQEAKICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0KKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIAogQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCiAKLUlmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKLXdoZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisgIElmIHRoZSBwcm9ncmFtIGRvZXMgdGVybWluYWwgaW50ZXJhY3Rpb24sIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQKK25vdGljZSBsaWtlIHRoaXMgd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKIAotICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgotICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICA8cHJvZ3JhbT4gIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisgICAgVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KICAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CiAgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgogCiBUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKLXBhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKLWJlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQotbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB5b3VyIHByb2dyYW0ncyBjb21tYW5kcworbWlnaHQgYmUgZGlmZmVyZW50OyBmb3IgYSBHVUkgaW50ZXJmYWNlLCB5b3Ugd291bGQgdXNlIGFuICJhYm91dCBib3giLgogCi1Zb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgotc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKLW5lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKyAgWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwKK2lmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZiBuZWNlc3NhcnkuCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzLCBhbmQgaG93IHRvIGFwcGx5IGFuZCBmb2xsb3cgdGhlIEdOVSBHUEwsIHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCi0gIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KLSAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCi0KLSAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5Ci0gIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCi0KLVRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bwotcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKLWNvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQotbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCi1QdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KKyAgVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbQoraW50byBwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91CittYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGgKK3RoZSBsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuICBCdXQgZmlyc3QsIHBsZWFzZSByZWFkCis8aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5LW5vdC1sZ3BsLmh0bWw+LgpkaWZmIC0tZ2l0IGEvT0NoYW5nZUxvZyBiL09DaGFuZ2VMb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZTYwYjkuLjAwMDAwMDAKLS0tIGEvT0NoYW5nZUxvZworKysgL2Rldi9udWxsCkBAIC0xLDE1MDAgKzAsMCBAQAotMTk5OC0wMS0wNCAgSi5KLiB2YW4gZGVyIEhlaWpkZW4gIDxKLkoudmFuZGVySGVpamRlbkBzdHVkZW50LnV0d2VudGUubmw+Ci0KLQkqIHNyYy9maWxlcy5jIChvcGVuZmlsZXMpIFtfV0lOMzIgJiYgIV9fQ1lHV0lOMzJfX106IFVzZSBURU1QIG9yCi0JVGVtcCB0byBmaW5kIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSwgaWYgcG9zc2libGUuICBEbyBub3QgdW5saW5rCi0JZmlsZXMgd2hpbGUgdGhleSBhcmUgb3Blbi4KLQotMTk5Ny0wOC0yNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Bwc2lsb2Npbi5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL3JlYWRlci5jIChzdGFja19vZmZzZXQ7KTogQ2hhbmdlIHNvbWUgd2FybmkgdG8gd2FybnMuCi0KLQkqIHNyYy9sZXguYyAobGl0ZXJhbGNoYXIpOiBVc2Ugd2FybnMsIG5vdCB3YXJuaS4KLQotMTk5Ny0wNi0yOCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Bwc2lsb2Npbi5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL2Jpc29uLnNpbXBsZTogQWRkIGEgQmlzb24gdmVyc2lvbiBjb21tZW50LgotCi0JKiBNYWtlZmlsZS5pbiAoYmlzb25fdmVyc2lvbik6IE5ldyB2YXJpYWJsZS4KLQkoZGlzdCk6IFVzZSB0aGF0IHZhcmlhYmxlLgotCShiaXNvbi5zMSk6IFN1YnN0aXR1dGUgdGhlIEJpc29uIHZlcnNpb24gaW50byBiaXNvbi5zaW1wbGUuCi0KLQkqIHNyYy9tYWluLmMgKGZhdGFsLCB3YXJuLCBiZXJyb3IpOiBVc2UgcHJvZ3JhbV9uYW1lLgotCi0xOTk3LTA2LTE4ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHBzaWxvY2luLmdudS5haS5taXQuZWR1PgotCi0JKiBNYWtlZmlsZS5pbjogbmV3LmggcmVuYW1lZCB0byBhbGxvYy5oLgotCSogc3JjLyouYzogc3JjL25ldy5oIHJlbmFtZWQgdG8gc3JjL2FsbG9jLmguCi0KLQkqIHNyYy9hbGxvYy5oOiBSZW5hbWVkIGZyb20gc3JjL25ldy5oLgotCi0xOTk3LTA2LTE1ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHBzaWxvY2luLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvbWFpbi5jIChmYXRhbCwgd2FybiwgYmVycm9yKTogTWFrZSBlcnJvciBtZXNzYWdlcyBzdGFuZGFyZC4KLQkodG9vbWFueSk6IEltcHJvdmUgZXJyb3IgbWVzc2FnZSB0ZXh0LgotCi0xOTk3LTA1LTI0ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHBzaWxvY2luLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvbGV4LmMgKGxpdGVyYWxjaGFyKTogRml4IHRoZSBjb2RlIGZvciBlc2NhcGluZyBcLCAiIGFuZCAnLgotCi0xOTk3LTA1LTIzICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHBzaWxvY2luLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvbGV4LmMgKGxleCk6IEF2b2lkIHRyb3VibGUgd2hlbiB0aGVyZSBhcmUgbWFueSBjaGFycwotCXRvIGRpc2NhcmQgaW4gYSBjaGFyIGxpdGVyYWwgd2l0aCBqdXN0IHNldmVyYWwgY2hhcnMgaW4gaXQuCi0KLTE5OTctMDUtMTcgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAcHNpbG9jaW4uZ251LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9iaXNvbi5zaW1wbGU6IFVzZSBtYWxsb2MsIGlmIHVzaW5nIGFsbG9jYSBpcyB0cm91Ymxlc29tZS4KLQkoWVlTVEFDS19VU0VfQUxMT0NBKTogTmV3IGZsYWcgbWFjcm8uCi0JRGVmaW5lIGl0IGZvciBzb21lIHN5c3RlbXMgYW5kIGNvbXBpbGVycy4KLQkoWVlTVEFDS19BTExPQyk6IE5ldyBtYWNyby4KLQkoeXlwYXJzZSk6IFVzZSBZWVNUQUNLX0FMTE9DIHRvIGFsbG9jYXRlIHN0YWNrLgotCUlmIGl0IHdhcyBtYWxsb2MnZCwgZnJlZSBpdC4KLQotMTk5Ny0wNS0wMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Bwc2lsb2Npbi5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL2Jpc29uLnNpbXBsZSBbX0FJWF06IERvbid0IGluY2x1ZGUgbWFsbG9jLmguCi0KLTE5OTctMDQtMjMgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAcHNpbG9jaW4uZ251LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9iaXNvbi5zaW1wbGUgKGFsbG9jYSkgW19faHB1eF06IEFsd2F5cyBkZWZpbmUgYXMKLQlfX2J1aWx0aW5fYWxsb2NhLgotCi0xOTk3LTA0LTIyICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHBzaWxvY2luLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvYmlzb24uc2ltcGxlIChfX3l5X21lbWNweSk6IERlY2xhcmUgYXJnIGBjb3VudCcgYXMgdW5zaWduZWQKLQlpbnQuCi0JKHl5cGFyc2UpOiBDYXN0IHRoaXJkIGFyZyB0byBfX3l5X21lbWNweSB0byB1bnNpZ25lZCBpbnQuCi0KLQkqIHNyYy9iaXNvbi5zaW1wbGUgKGFsbG9jYSkgW19faHB1eF06IEluY2x1ZGUgYWxsb2NhLmggKHJpZ2h0IGZvcgotCUhQVVggMTApIGluc3RlYWQgb2YgZGVjbGFyaW5nIGFsbG9jYSAocmlnaHQgZm9yIEhQVVggOSkuCi0KLTE5OTctMDEtMDIgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZXRoYW5vbC5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL2FsbG9jYXRlLmMgW19fU1REQ19fIG9yIF9NU0NfVkVSXToKLQlEZWNsYXJlIGNhbGxvYyBhbmQgcmVhbGxvYyB0byByZXR1cm4gdm9pZCAqLgotCi0JKiBNYWtlZmlsZS5pbiAoZGlzdCk6IEV4cGxpY2l0bHkgY2hlY2sgZm9yIHN5bWxpbmtzLCBhbmQgY29weSB0aGVtLgotCi0xOTk2LTEyLTE3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KLQotCSogc3JjL2Jpc29uLnNpbXBsZSAoeXlwYXJzZSk6IElmIF9fR05VQ19fIGFuZCBZWVBBUlNFX1BBUkFNIGFyZQotCWJvdGggZGVmaW5lZCwgZGVjbGFyZSB5eXBhcnNlIHRvIGhhdmUgYSB2b2lkICogYXJndW1lbnQuCi0KLTE5OTYtMTItMTcgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAcHNpbG9jaW4uZ251LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9zeXN0ZW0uaCBbX01TQ19WRVJdOiBJbmNsdWRlIHN0ZGxpYi5oIGFuZCBwcm9jZXNzLmguCi0JW19NU0NfVkVSXSAoZ2V0cGlkKTogRGVmaW5lIGFzIG1hY3JvLS10cmFuc2xhdGUgaXQgdG8gX2dldHBpZC4KLQotCSogc3JjL3JlZHVjZS5jIChuYml0cyk6IEFkZCBzb21lIGNhc3RzLgotCi0JKiBzcmMvbWFpbi5jIChtYWluKTogUmV0dXJuIEZBSUxVUkUgYXMgYSB2YWx1ZS4KLQkocHJpbnRhYmxlX3ZlcnNpb24pOiBEZWNsYXJlIGFyZyBhcyBpbnQsIG5vdCBjaGFyLgotCi0JKiBzcmMvZmlsZXMuYyBbX01TQ19WRVJdIChYUEZJTEUsIFhQRklMRTEpOiBEZWZpbmUsIGlmIG5vdCBhbHJlYWR5Ci0JZGVmaW5lZC4KLQotMTk5Ni0xMi0xNiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Bwc2lsb2Npbi5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL21haW4uYyAocHJpbnRhYmxlX3ZlcnNpb24pOiBVc2UgdHlwZSBgaW50JyBmb3IgdGhlIGFyZy4KLQotMTk5Ni0wOC0xMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Bwc2lsb2Npbi5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL2Jpc29uLnNpbXBsZTogVGVzdCBfTVNET1MgYXMgd2VsbCBhcyBfTVNET1NfLgotCi0xOTk2LTA3LTMxICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHBzaWxvY2luLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvYmlzb24uc2ltcGxlIFtfX3N1biAmJiBfX2kzODZdOiBJbmNsdWRlIGFsbG9jYS5oLgotCi0xOTk2LTA3LTMwICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHBzaWxvY2luLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvYmlzb24uc2ltcGxlOiBUZXN0IF9NU0RPU18sIG5vdCBNU0RPUy4KLQotMTk5Ni0wNi0wMSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Bwc2lsb2Npbi5nbnUuYWkubWl0LmVkdT4KLQotCSogQWxsIGZpbGVzOiBJbnNlcnQgYF8nIG1hY3JvIGFyb3VuZCBtYW55IHN0cmluZyBjb25zdGFudHMuCi0KLQkqIHNyYy9zeXN0ZW0uaCBbSEFWRV9MT0NBTEVfSF06IEluY2x1ZGUgbG9jYWxlLmguCi0JWyEgSEFWRV9MT0NBTEVfSF0gKHNldGxvY2FsZSk6IERlZmluZSBhcyBuby1vcC4KLQlbRU5BQkxFX05MU106IEluY2x1ZGUgbGliaW50bC5oLgotCVtFTkFCTEVfTkxTXSAoZ2V0dGV4dCk6IERlZmluZS4KLQlbISBFTkFCTEVfTkxTXSAoYmludGV4dGRvbWFpbiwgdGV4dGRvbWFpbiwgXyk6IENvbnNvbGF0aW9uIGRlZmluaXRpb25zLgotCShOXywgUEFDS0FHRSwgTE9DQUxFRElSKTogTmV3IG1hY3Jvcy4KLQotCSogc3JjL21haW4uYyAobWFpbik6IENhbGwgc2V0bG9jYWxlLCBiaW5kdGV4dGRvbWFpbiBhbmQgdGV4dGRvbWFpbi4KLQotCSogUE9URklMRVMuaW46IE5ldyBmaWxlLgotCi0JKiBNYWtlZmlsZS5pbiAoYWxsb2NhdGUubyk6IERlZmluZSB0YXJnZXQgZXhwbGljaXRseS4KLQotMTk5Ni0wNi0wMSAgSmltIE1leWVyaW5nICA8bWV5ZXJpbmdAbmEtbmV0Lm9ybmwuZ292PgotCi0JKiBNYWtlZmlsZS5pbiAoQ0ZMQUdTKTogU2V0IHRvIEBDRkxBR1NALgotCShMREZMQUdTKTogU2V0IHRvIEBMREZMQUdTQC4KLQkoY29uZmlndXJlKTogUnVuIGF1dG9jb25mIG9ubHkgaWYgcHJlY2VkaW5nIGBjZCcgc3VjY2VlZHMuCi0JKHNyYy9iaXNvbi5zMSk6IFJlZGlyZWN0IG91dHB1dCB0byB0ZW1wb3JhcnkgZmlsZSB0aGVuIG1vdmUgdGhlCi0JdGVtcG9yYXJ5IHRvIHRoZSB0YXJnZXQsIHJhdGhlciB0aGFuIHJlZGlyZWN0aW5nIGRpcmVjdGx5IHRvCi0Jc3JjL2Jpc29uLnMxLgotCShjbGVhbik6IFJlbW92ZSBjb25maWcuc3RhdHVzIGFuZCBjb25maWcubG9nLgotCShkaXN0Y2xlYW4pOiBEb24ndCByZW1vdmUgY29uZmlnLnN0YXR1cyBoZXJlLgotCi0xOTk2LTA1LTEyICBKaW0gTWV5ZXJpbmcgIDxtZXllcmluZ0BuYS1uZXQub3JubC5nb3Y+Ci0KLQkqIHNyYy9iaXNvbi5zaW1wbGUgKF9feXlfbWVtY3B5KSBbX19jcGx1c3BsdXNdOiBSZW9yZGVyIGRlY2xhcmF0aW9ucwotIAlvZiB2YXJpYWJsZXMgZiBhbmQgdC4KLQotMTk5Ni0wNS0xMSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BkZWxhc3lkLmdudS5haS5taXQuZWR1PgotCi0JKiBWZXJzaW9uIDEuMjUgcmVsZWFzZWQuCi0KLQkqIE1ha2VmaWxlLmluIChkaXN0KTogRG9uJ3QgdXNlICQoc3JjZGlyKS4KLQotCSogc3JjL2Jpc29uLnNpbXBsZSAoX195eV9tZW1jcHkpOiBSZWFsbHkgcmVvcmRlciB0aGUgYXJncywgYXMgd2FzCi0Jc3VwcG9zZWRseSBkb25lIG9uIEZlYiAxNCAxOTk1LgotCSh5eXBhcnNlKTogQ2FsbHMgY2hhbmdlZCBhY2NvcmRpbmdseS4KLQotMTk5Ni0wMS0yNCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9ydWxlX2RhdGEpOiBUZXN0IFlZRVJST1JfVkVSQk9TRSBpbiB0aGUKLQljb25kaXRpb25hbCBhcm91bmQgdGhlIGRlZmluaXRpb24gb2YgdHR5bmFtZS4KLQotMTk5NS0xMi0yOCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvYmlzb24uc2ltcGxlOiBGaXggbGluZSBudW1iZXJzIGluICNsaW5lIGNvbW1hbmRzLgotCi0xOTk1LTEyLTI0ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9iaXNvbi5zaW1wbGUgKFlZUEFSU0VfUEFSQU1fREVDTCk6IEluIEMrKywgbWFrZSBpdCBhbHdheXMKLQludWxsLgotCShZWVBBUlNFX1BBUkFNX0FSRyk6IE5ldyBtYWNyby4KLQkoeXlwYXJzZSk6IFVzZSBZWVBBUlNFX1BBUkFNX0FSRy4KLQotMTk5NS0xMC0xNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvdmVyc2lvbi5jOiBWZXJzaW9uIG5vdyAxLjI1LgotCi0JKiBzcmMvbWFpbi5jICh3YXJuKTogU2V0IGBmYWlsdXJlJy4KLQotMTk5NS0wOC0wMSAgIFdpbGZyZWQgSi4gSGFuc2VuICA8d2poK0BjbXUuZWR1PgotCi0JKiBzcmMvYmlzb24uY2xkLCBzcmMvZ2V0YXJncy5jLCBzcmMvdm1zZ2V0YXJncy5jOiBBZGRlZCAtbiwgLWssCi0JYW5kIC1yYXcgc3dpdGNoZXMuCi0JKG5vcGFyc2VyZmxhZywgdG9rbnVtZmxhZywgcmF3dG9rbnVtZmxhZyk6IE5ldyB2YXJpYWJsZXMuCi0KLQkqIHNyYy9jb25mbGljdHMuYyAocmVzb2x2ZV9zcl9jb25mbGljdCk6IFJlbW92ZSB1c2Ugb2YgYWxsb2NhLgotCi0JKiBzcmMvZmlsZXMuYyAob3BlbmZpbGVzLCBvcGVuX2V4dHJhX2ZpbGVzLCBkb25lKTogIEFkZCBmYWN0aW9uIGZsYWcKLQlhbmQgYWN0ZmlsZSBmaWxlLiAgSGFuZGxlIG5vcGFyc2VyZmxhZy4gIEJvdGggZm9yIC1uIHN3aXRjaC4KLQotCSogc3JjL2xleC5jOiBJbmNsdWRlIGdldG9wdC5oLiAgQWRkIHNvbWUgZXh0ZXJuIGRlY2xzLgotCShzYWZlZ2V0Yyk6IE5ldyBmdW5jdGlvbiB0byBkZWFsIHdpdGggRU9GIGdyYWNlZnVsbHkuCi0JKGxpdGVyYWxjaGFyKTsgbmV3IGZ1bmN0aW9uIHRvIGRlYWwgd2l0aCByZWFkaW5nIFwgZXNjYXBlcy4KLQkobGV4KTogVXNlIGxpdGVyYWxjaGFyLgotCShsZXgpOiBJbXBsZW1lbnRlZCAiLi4uIiB0b2tlbnMuCi0JKGxpdGVyYWxjaGFyLCBsZXgsIHBhcnNlX3BlcmNlbnRfdG9rZW4pOiBNYWRlIHRva2VuYnVmZmVyCi0JYWx3YXlzIGNvbnRhaW4gdGhlIHRva2VuLiAgVGhpcyBpbmNsdWRlcyBncm93aW5nIHRoZSB0b2tlbgotCWJ1ZmZlciB3aGlsZSByZWFkaW5nIGFuIGludGVnZXIuCi0JKHBhcnNlX3BlcmNlbnRfdG9rZW4pOiBSZXBsYWNlZCBpZi1lbHNlIHN0YXRlbWVudCB3aXRoIHBlcmNlbnRfdGFibGUuCi0JKHBhcnNlX3BlcmNlbnRfdG9rZW4pOiBBZGRlZCAlIGRlY2xhcmF0aW9ucyBhcyBhbm90aGVyCi0Jd2F5IHRvIHNwZWNpZnkgdGhlIGZsYWdzIC1uLCAtbCwgYW5kIC1yLiAgQWxzbyBhZGRlZCBob29rcyBmb3IKLQktZCwgLWssIC15LCAtdiwgLXQsIC1wLCAtYiwgLW8sIGJ1dCBpbXBsZW1lbnRhdGlvbiByZXF1aXJlcwotCW1ham9yIGNoYW5nZXMgdG8gc3JjL2ZpbGVzLmMuCi0JKGxleCkgUmV0YWluIGluIHRoZSBpbmNvbWluZyBzdHJlYW0gYSBjaGFyYWN0ZXIgZm9sbG93aW5nCi0JYW4gaW5jb3JyZWN0ICcvJy4KLQkoc2tpcF93aGl0ZV9zcGFjZSwgbGV4KTogIFJldmlzZWQgbW9zdCBlcnJvciBtZXNzYWdlcwotCWFuZCBjaGFuZ2VkIGZhdGFsIHRvIHdhcm4gdG8gYXZvaWQgYWJvcnRpbmcuCi0JKHBlcmNlbnRfdGFibGUpOiAgQWRkZWQgJXRob25nIGRlY2xhcmF0aW9ucy4KLQotCSogc3JjL2xleC5oOiBBZGRlZCBUSE9ORyBhbmQgTk9PUCBmb3IgYWxpYXMgcHJvY2Vzc2luZy4KLQlBZGRlZCBTRVRPUFQgZm9yIHRoZSBuZXcgY29kZSB0aGF0IGFsbG93cyBzZXR0aW5nIG9wdGlvbnMgd2l0aCAlZmxhZ3MuCi0KLQkqIHNyYy9tYWluLmMgKG1haW4pOiBJZiByZWFkZXIgc2VlcyBhbiBlcnJvciwgZG9uJ3QgcHJvY2VzcyB0aGUKLQlncmFtbWFyLgotCShmYXRhbHMpOiBVcGRhdGVkIHRvIG5vdCB1c2UgVkFSQVJHUzEuCi0JKHByaW50YWJsZV92ZXJzaW9uLCBpbnRfdG9fc3RyaW5nLCB3YXJuLCB3YXJuaSwgd2FybnMsIHdhcm5zcykKLQkod2FybnNzcyk6IE5ldyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb25zLiAgQXZvaWQgYWJvcnQgZm9yIGVycm9yLgotCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9oZWFkZXJzLCBvdXRwdXRfdHJhaWxlcnMsIG91dHB1dCwgb3V0cHV0X2dyYW0pCi0JKG91dHB1dF9ydWxlX2RhdGEpOiBJbXBsZW1lbnQgbm9wYXJzZXJmbGFnIHZhcmlhYmxlLgotCUltcGxlbWVudCB0b2tudW1mbGFnIHZhcmlhYmxlLgotCShvdXRwdXQpOiBDYWxsIHJlYWRlcl9vdXRwdXRfeXlsc3AgdG8gb3V0cHV0IExUWVBFU1RSLgotCi0JKiBzcmMvcmVhZGVyLmMgKHJlYWRlcl9vdXRwdXRfeXlsc3ApOiBOZXcgZnVuY3Rpb24uCi0JKHJlYWRncmFtKTogVXNlIGAjaWYgMCcgYXJvdW5kIGNvZGUgdGhhdCBhY2NlcHRlZCAlY29tbWFuZCBpbnNpZGUKLQlncmFtbWFyIHJ1bGVzOiBUaGUgZG9jdW1lbnRhdGlvbiBkb2Vzbid0IGFsbG93IGl0LCBhbmQgaXQgd2lsbAotCWZhaWwgc2luY2UgdGhlICVjb21tYW5kIHByb2Nlc3NvcnMgc2NhbiBmb3IgdGhlIG5leHQgJS4KLQkocGFyc2VfdG9rZW5fZGVjbCk6IEV4dGVuZGVkIHRoZSAldG9rZW4gZGVjbGFyYXRpb24gdG8gYWxsb3cgYQotCW11bHRpLWNoYXJhY3RlciBzeW1ib2wgYXMgYW4gYWxpYXMuCi0JKHBhcnNlX3Rob25nX2RlY2wpOiBOZXcgZnVuY3Rpb24uCi0JKHJlYWRfZGVjbGFyYXRpb25zKTogQWRkZWQgJXRob25nIGRlY2xhcmF0aW9ucy4KLQkocmVhZF9kZWNsYXJhdGlvbnMpOiBIYW5kbGUgTk9PUCB0byBkZWFsIHdpdGggYWxsb3dpbmcgJQotCWRlY2xhcmF0aW9ucyBhcyBhbm90aGVyIG1lYW5zIHRvIHNwZWNpZnkgdGhlIGZsYWdzLgotCShyZWFkZ3JhbSk6IEFsbG93ICVwcmVjIHByaW9yIHRvIHNlbWFudGljcyBlbWJlZGRlZCBpbiBhIHJ1bGUuCi0JKHNraXBfdG9fY2hhciwgcmVhZF9kZWNsYXJhdGlvbnMsIGNvcHlfZGVmaW5pdGlvbikKLQkocGFyc2VfdG9rZW5fZGVjbCwgcGFyc2Vfc3RhcnRfZGVjbCwgcGFyc2VfdHlwZV9kZWNsKQotCShwYXJzZV9hc3NvY19kZWNsLCBwYXJzZV91bmlvbl9kZWNsLCBwYXJzZV9leHBlY3RfZGVjbCkKLQkoZ2V0X3R5cGVfbmFtZSwgY29weV9ndWFyZCwgY29weV9hY3Rpb24sIHJlYWRncmFtKQotCShnZXRfdHlwZSwgcGFja3N5bWJvbHMpOiBSZXZpc2VkIG1vc3QgZXJyb3IgbWVzc2FnZXMuICBDaGFuZ2VkCi0JYGZhdGFsJyB0byBgd2Fybnh4eCcgdG8gYXZvaWQgYWJvcnRpbmcgZm9yIGVycm9yLiAgUmV2aXNlZCBhbmQgdXNlCi0JbXVsdGlwbGUgd2Fybnh4eCBmdW5jdGlvbnMgdG8gYXZvaWQgdXNpbmcgVkFSQVJHUzEuCi0JKHJlYWRfZGVjbGFyYXRpb25zKTogSW1wcm92ZSB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgYW4gaW52YWxpZAotCWNoYXJhY3Rlci4gIERvIG5vdCBhYm9ydC4KLQkocmVhZF9kZWNsYXJhdGlvbnMsIGNvcHlfZ3VhcmQsIGNvcHlfYWN0aW9uKTogVXNlCi0JcHJpbnRhYmxlX3ZlcnNpb24gdG8gYXZvaWQgdW5wcmludGFibGUgY2hhcmFjdGVycyBpbiBwcmludGVkCi0Jb3V0cHV0LgotCShwYXJzZV9leHBlY3RfZGVjbCk6IEVycm9yIGlmIGFyZ3VtZW50IHRvICVleHBlY3QgZXhjZWVkcyAxMAotCWRpZ2l0cy4KLQkocGFyc2VfdG9rZW5fZGVjbCwgcGFyc2VfYXNzb2NfZGVjbCwgcGFyc2VfdHlwZV9kZWNsLCBnZXRfdHlwZSk6Ci0JQWxsb3cgdGhlIHR5cGUgb2YgYSBub24tdGVybWluYWwgY2FuIGJlIGdpdmVuIG1vcmUgdGhhbiBvbmNlLCBhcwotCWxvbmcgYXMgYWxsIHNwZWNpZmljYXRpb25zIGdpdmUgdGhlIHNhbWUgdHlwZS4KLQotCSogc3JjL3JlZHVjZS5jIChyZWR1Y2VfZ3JhbW1hcik6IFJldmlzZSBhbiBlcnJvciBtZXNzYWdlLgotCShwcmludF9ub3RpY2VzKTogUmVtb3ZlIGZpbmFsIGAuJyBmcm9tIGVycm9yIG1lc3NhZ2UuCi0KLQkqIHNyYy9zeW10YWIuaCAoU0FMSUFTKTogTmV3ICNkZWZpbmUgZm9yIGFkZGluZyBhbGlhc2VzIHRvICV0b2tlbi4KLQkoc3RydWN0IGJ1Y2tldCk6IEFkZGVkIGBhbGlhcycgZmllbGQuCi0KLTE5OTUtMDUtMDMgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL2Jpc29uLnNpbXBsZTogQ2hhbmdlIGRpc3RyaWJ1dGlvbiB0ZXJtcy4KLQotCSogc3JjL3ZlcnNpb24uYzogVmVyc2lvbiBub3cgMS4yMy4gIE5vLCAxLjI0LgotCi0xOTk1LTAyLTIzICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9maWxlcy5jOiBUZXN0IF9fVk1TX1BPU0lYIGFzIHdlbGwgYXMgVk1TLgotCi0xOTk1LTAyLTE0ICBKaW0gTWV5ZXJpbmcgPG1leWVyaW5nQGNvbWNvLmNvbT4KLQotCSogc3JjL2Jpc29uLnNpbXBsZSAoX195eV9tZW1jcHkpOiBSZW5hbWVkIGZyb20gX195eV9iY29weSB0byBhdm9pZAotCWNvbmZ1c2lvbi4gIFJldmVyc2UgRlJPTSBhbmQgVE8gYXJndW1lbnRzIHRvIGJlIGNvbnNpc3RlbnQgd2l0aAotCXRob3NlIG9mIG1lbWNweS4KLQotMTk5NC0xMS0xMCAgRGF2aWQgSi4gTWFjS2VuemllICA8ZGptQGR1YWxpdHkuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOiBJbmNsdWRlIGluc3RhbGwtc2gsIG5vdCBpbnN0YWxsLnNoLgotCUluY2x1ZGUgTkVXUy4KLQotCSogY29uZmlndXJlLmluOiBVcGRhdGUgdG8gQXV0b2NvbmYgdjIgbWFjcm8gbmFtZXMuCi0KLTE5OTQtMTAtMDQgIERhdmlkIEouIE1hY0tlbnppZSAgPGRqbUBkdWFsaXR5LmdudS5haS5taXQuZWR1PgotCi0JKiBNYWtlZmlsZS5pbiAocHJlZml4LCBleGVjX3ByZWZpeCk6IExldCBjb25maWd1cmUgc2V0IHRoZW0uCi0KLTE5OTQtMDktMjggIERhdmlkIEouIE1hY0tlbnppZSAgPGRqbUBkdWFsaXR5LmdudS5haS5taXQuZWR1PgotCi0JKiBNYWtlZmlsZS5pbjogU2V0IGRhdGFkaXIgdG8gJChwcmVmaXgpL3NoYXJlLgotCi0xOTk0LTA3LTEyICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9yZWFkZXIuYyAocmVhZGVyKTogUmVuYW1lIHVuZGVmaW5lZC10b2tlbiB0b2tlbiB0bwotCWAkdW5kZWZpbmVkLicuCi0KLTE5OTQtMDUtMDUgIERhdmlkIEouIE1hY0tlbnppZSAgPGRqbUBudXRyaW1hdC5nbnUuYWkubWl0LmVkdT4KLQotCSogTWFrZWZpbGUuaW4gKERJU1RGSUxFUyk6IEFkZCBpbnN0YWxsLnNoLgotCShpbnN0YWxsKTogUmVtb3ZlIGNobW9kIGNvbW1hbmRzLgotCi0xOTk0LTAzLTI2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9iaXNvbi5zaW1wbGU6IEZpeCAjbGluZSBjb21tYW5kcy4KLQotMTk5NC0wMy0yNCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvY29uZmxpY3RzLmMgKHByaW50X3JlZHVjdGlvbnMpOiBJbmNyZW1lbnQgYm90aCBmcDEgYW5kIGZwMgotCXdoaWxlIHByaW50aW5nIHJlZHVjdGlvbnMgaW4gbXVsdGktcnVsZSBjYXNlLgotCi0xOTk0LTAxLTAyICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIE1ha2VmaWxlLmluIChMREZMQUdTKTogTWFrZSBpdCBlbXB0eSBieSBkZWZhdWx0LgotCShiaXNvbik6IFVzZSBDRkxBR1MuCi0KLTE5OTMtMTEtMjEgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL2Jpc29uLnNpbXBsZSAoWVlMRVgpOiBUYWtlIG5vdGljZSBvZiBZWUxFWF9QQVJBTS4KLQotMTk5My0xMC0xOCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvYmlzb24uc2ltcGxlIChZWVBBUlNFX1BBUkFNX0RFQ0wpOiBBbHdheXMgZGVmaW5lIHRoaXMuCi0KLTE5OTMtMTAtMTQgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL2Jpc29uLnNpbXBsZSAoeXlwYXJzZSk6IFN1cHBvcnQgWVlQQVJTRV9QQVJBTS4KLQotMTk5My0wOS0xMyAgTm9haCBGcmllZG1hbiAgPGZyaWVkbWFuQG51dHJpbWF0LmdudS5haS5taXQuZWR1PgotCi0JKiBNYWtlZmlsZS5pbiAoY2hlY2spOiBOZXcgdGFyZ2V0LgotCi0xOTkzLTA5LTEwICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9jb25mbGljdHMuYyAoYWxsb2NhKTogI3VuZGVmIGJlZm9yZSBkZWZpbmluZy4KLQotCSogc3JjL3N5c3RlbS5oIChiY29weSk6IERvbid0IGRlZmluZSBpZiBhbHJlYWR5IGRlZmluZWQuCi0KLTE5OTMtMDktMDYgIE5vYWggRnJpZWRtYW4gIDxmcmllZG1hbkBudXRyaW1hdC5nbnUuYWkubWl0LmVkdT4KLQotCSogVmVyc2lvbiAxLjIyIHJlbGVhc2VkLgotCi0JKiBta2luc3RhbGxkaXJzOiBOZXcgZmlsZS4KLQotCSogTWFrZWZpbGUuaW4gKGRpc3QpOiBVc2UgLmd6IGZvciBleHRlbnNpb24sIG5vdCAuei4KLQkoRElTVEZJTEVTKTogTmV3IHZhcmlhYmxlLgotCShkaXN0KTogVXNlIGl0IGluc3RlYWQgb2YgZXhwbGljaXQgZmlsZSBsaXN0LgotCVRyeSB0byBsaW5rIGVhY2ggZmlsZSBzZXBhcmF0ZWx5LCB0aGVuIGNvcHkgZmlsZSBpZiBsbiBmYWlscy4KLQkoaW5zdGFsbGRpcnMpOiBVc2UgbWtpbnN0YWxsZGlycyBzY3JpcHQuCi0KLTE5OTMtMDctMjkgIERhdmlkIEouIE1hY0tlbnppZSAgPGRqbUB3b29rdW16LmdudS5haS5taXQuZWR1PgotCi0JKiBNYWtlZmlsZS5pbiAoY29uZmlnLnN0YXR1cyk6IFJ1biBjb25maWcuc3RhdHVzIC0tcmVjaGVjaywgbm90Ci0JY29uZmlndXJlLCB0byBnZXQgdGhlIHJpZ2h0IGFyZ3MgcGFzc2VkLgotCi0xOTkzLTA3LTI0ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9iaXNvbi5zaW1wbGUgKHl5cGFyc2UpOiBJbml0IHl5Y2hhcjEgdG8gYXZvaWQgd2FybmluZy4KLQotMTk5My0wNy0wNCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvYmlzb24uc2ltcGxlICh5eXBhcnNlKTogRG9uJ3Qgc2V0IHl5dmFsIHdoZW4geXlsZW4gaXMgMC4KLQotMTk5My0wNi0yNiAgRGF2aWQgSi4gTWFjS2VuemllICA8ZGptQHdvb2t1bXouZ251LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9nZXRhcmdzLmMgKGdldGFyZ3MpOiBFeGl0IGFmdGVyIHByaW50aW5nIHRoZSB2ZXJzaW9uIG51bWJlci4KLQlBZGQgLS1oZWxwIGFuZCAtaCBvcHRpb25zLgotCSh1c2FnZSk6IE5ldyBmdW5jdGlvbi4KLQotMTk5My0wNi0yNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvZ2V0YXJncy5jIChsb25nb3B0cyk6IEFsbG93IGBvdXRwdXQnIGFzIGFuIGFsdGVybmF0aXZlLgotCi0xOTkzLTA2LTE2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9iaXNvbi5zaW1wbGUgKHl5cGFyc2UpOiBDb25kaXRpb25hbGl6ZSB0aGUgZW50aXJlIGNhbGwgdG8KLQl5eW92ZXJmbG93LCBub3QganVzdCB0d28gYXJndW1lbnRzIGluIGl0LgotCi0xOTkzLTA2LTAzICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9iaXNvbi5zaW1wbGUgW19faHB1eF0gKGFsbG9jYSk6IERvbid0IHNwZWNpZnkgYXJnIHR5cGVzLgotCi0xOTkzLTA1LTA3ICBOb2FoIEZyaWVkbWFuICA8ZnJpZWRtYW5AbnV0cmltYXQuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogRGVwZW5kIG9uIGB1bmluc3RhbGwnIGFuZCBgaW5zdGFsbGRpcnMnLgotCShpbnN0YWxsZGlycyk6IE5ldyB0YXJnZXQuCi0KLTE5OTMtMDQtMjggIE5vYWggRnJpZWRtYW4gIDxmcmllZG1hbkBudXRyaW1hdC5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL3JlYWRlci5jOiAgUmVtb3ZlIGRlY2xhcmF0aW9uIG9mIGF0b2kuCi0KLTE5OTMtMDQtMjMgIE5vYWggRnJpZWRtYW4gIDxmcmllZG1hbkBudXRyaW1hdC5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL25ldy5oIFshX19TVERDX19dIChGUkVFKTogQ2hlY2sgeCAhPSAwLgotCU1ha2UgZXhwciB0byBjYWxsIGBmcmVlJyBldmFsdWF0ZSB0byAwLgotCi0xOTkzLTA0LTIwICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1Aa3JvcG90a2luLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvZmlsZXMuYyBbTVNET1NdOiBVc2UgeG1hbGxvYywgbm90IG1hbGxvYy4KLQkqIHNyYy9hbGxvY2F0ZS5jICh4bWFsbG9jKTogUmVuYW1lZCBmcm9tIG1hbGxvY2F0ZS4gIFJlbW92ZSBvbGQKLQl3cmFwcGVyLgotCSogc3JjL2NvbmZsaWN0cy5jLCBzcmMvc3ltdGFiLmMsIHNyYy9maWxlcy5jLCBzcmMvTFIwLmMsCi0Jc3JjL25ldy5oOiBDaGFuZ2UgY2FsbGVycy4KLQkqIHNyYy9hbGxvY2F0ZS5jICh4cmVhbGxvYyk6IE5ldyBmdW5jdGlvbi4KLQkqIHNyYy9uZXcuaDogRGVjbGFyZSBpdC4KLQkqIHNyYy9sZXguYywgc3JjL3JlYWRlci5jOiBVc2UgaXQuCi0KLTE5OTMtMDQtMTggIE5vYWggRnJpZWRtYW4gIDxmcmllZG1hbkBudXRyaW1hdC5nbnUuYWkubWl0LmVkdT4KLQotCSogVmVyc2lvbiAxLjIxIHJlbGVhc2VkLgotCi0JKiBzcmMvcmVhZGVyLmMgOiBEb24ndCBkZWNsYXJlIGByZWFsbG9jJy4KLQotCSogTWFrZWZpbGUuaW4gKGJpc29uLnMxKTogdXNlIGBybSAtZicgc2luY2UgaXQncyBxdWlldGVyLgotCShkaXN0KTogbWFrZSBnemlwcGVkIHRhciBmaWxlLgotCi0xOTkzLTA0LTE2ICBOb2FoIEZyaWVkbWFuICA8ZnJpZWRtYW5AbnV0cmltYXQuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIE1ha2VmaWxlLmluIChNYWtlZmlsZSwgY29uZmlnLnN0YXR1cywgY29uZmlndXJlKTogTmV3IHRhcmdldHMuCi0KLTE5OTMtMDQtMTUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL21haW4uYzogRG9uJ3QgZGVjbGFyZSBgYWJvcnQnLgotCi0JKiBzcmMvZmlsZXMuYzogRG9uJ3QgZGVjbGFyZSBgZXhpdCcuCi0KLTE5OTMtMDQtMTUgIE5vYWggRnJpZWRtYW4gIDxmcmllZG1hbkBudXRyaW1hdC5nbnUuYWkubWl0LmVkdT4KLQotCSogY29uZmlndXJlLmluOiBBZGQgQUNfQ09OU1QuCi0KLTE5OTMtMDQtMTQgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogTWFrZWZpbGUuaW4gKGFsbCk6IERlcGVuZCBvbiBiaXNvbi5zMS4KLQotMTk5My0wNC0xMyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBWZXJzaW9uIDEuMjAgcmVsZWFzZWQuCi0KLTE5OTMtMDMtMjQgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAd29va3Vtei5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL291dHB1dC5jIChvdXRwdXRfaGVhZGVycyk6IFJlbmFtZSB5eW5lcnJzIGlmIC1wLgotCi0xOTkzLTAzLTE4ICBOb2FoIEZyaWVkbWFuICA8ZnJpZWRtYW5AbnV0cmltYXQuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9zeXN0ZW0uaDogRG9uJ3QgdHJ5IHRvIGluY2x1ZGUgc3RkbGliLmggdW5sZXNzIEhBVkVfU1RETElCX0gKLQlpcyBkZWZpbmVkLgotCi0JKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBzdGRsaWIuaC4KLQotMTk5My0wMy0xNyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvYmlzb24uc2ltcGxlIFtfX2hwdXgsIG5vdCBfX0dOVUNfX106IERlY2xhcmUgYWxsb2NhLgotCSh5eXBhcnNlKTogV2hlbiBwcmludGluZyB0aGUgZXhwZWN0ZWQgdG9rZW4gdHlwZXMgZm9yIGFuIGVycm9yLAotCUF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4geXljaGVjayBhbmQgeXl0bmFtZS4KLQotMTk5My0wMy0xMyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBNYWtlZmlsZS5pbiAoZmlsZXMubywgLmMubyk6IFB1dCBDUFBGTEFHUyBhbmQgQ0ZMQUdTIGxhc3QuCi0KLTE5OTMtMDMtMDEgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL2Jpc29uLnNpbXBsZTogVGVzdCBfX3NnaSBsaWtlIF9fc3BhcmMuCi0KLTE5OTMtMDItMTcgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL2NvbmZsaWN0cy5jIChyZXNvbHZlX3NyX2NvbmZsaWN0KTogQWRkIGV4dHJhIHBhcmVucyBpbgotCWFsbG9jYSBjYWxsLgotCi0JKiBzcmMvYmlzb24uc2ltcGxlIFtfX0dOVUNfX10gKHl5cGFyc2UpOiBEZWNsYXJlIHdpdGggcHJvdG90eXBlLgotCi0xOTkzLTAxLTE1ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9jb25mbGljdHMuYyAocHJpbnRfcmVkdWN0aW9uKTogTmVhciBlbmQsIGluY3JlbWVudCBmcDIgd2hlbgotCW1hc2sgcmVjeWNsZXMuCi0KLTE5OTMtMDEtMTMgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogTWFrZWZpbGUuaW4gKGJpc29uLnMxKTogTmV3IHRhcmdldC4gIE1vZGlmaWVzIGJpc29uLnNpbXBsZS4KLQkoaW5zdGFsbCk6IEluc3RhbGwgYmlzb24uczEsIHdpdGhvdXQgY2hhbmdpbmcgaXQuCi0JKGNsZWFuKTogRGVsZXRlIGJpc29uLnMxLgotCi0xOTkzLTAxLTA0ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9yZWFkZXIuYyAocmVhZGVyKTogUHV0IEJpc29uIHZlcnNpb24gaW4gY29tbWVudCBpbiBvdXRwdXQKLQlmaWxlLgotCi0xOTkyLTEyLTIyICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9maWxlcy5jIChvcGVuZmlsZXMpOiBVc2UgLm91dHB1dCwgbm90IC5vdXQsIGZvciBvdXRmaWxlLAotCXJlZ2FyZGxlc3Mgb2Ygc3BlY19uYW1lX3ByZWZpeC4KLQotMTk5Mi0xMi0xNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9ncmFtKTogSW5jbHVkZSB5eXJocyBpbiB0aGUgc2FtZSAjaWYgYXMKLQl5eXByaHMuCi0KLTE5OTItMTItMTUgIE5vYWggRnJpZWRtYW4gIDxmcmllZG1hbkBudXRyaW1hdC5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL291dHB1dC5jIChvdXRwdXQpOiBvdXRwdXQgZGlyZWN0aXZlcyBjaGVja2luZyBmb3IKLQlfX2NwbHVzcGx1cyBhcyB3ZWxsIGFzIF9fU1REQ19fIHRvIGRldGVybWluZSB3aGVuIHRvIGRlZmluZQotCSJjb25zdCIgYXMgYW4gZW1wdHkgdG9rZW4uICAoUGF0Y2ggZnJvbSBXb2xmZ2FuZyBHbHVuegotCTx3b2dsQHN1bjExYS56ZmUuc2llbWVucy5kZT4pCi0KLTE5OTItMTItMDggIERhdmlkIEouIE1hY0tlbnppZSAgPGRqbUBrcm9wb3RraW4uZ251LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9zeXN0ZW0uaCwgc3JjL2NvbmZsaWN0cy5jOiBSZXBsYWNlIFVTRyB3aXRoIEhBVkVfU1RSSU5HX0gKLQlhbmQgSEFWRV9NRU1PUllfSC4KLQotMTk5Mi0xMS0yMSAgRGF2aWQgSi4gTWFjS2VuemllICA8ZGptQGdvbGRtYW4uZ251LmFpLm1pdC5lZHU+Ci0KLQkqIE1ha2VmaWxlLmluOiBTZXQgYW5kIHVzZSAkKE1BS0VJTkZPKS4KLQotMTk5Mi0xMS0yMCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvZmlsZXMuYyAoZG9uZSkgW01TRE9TXTogRGVsZXRlIHRoZSB0bXBkZWZzZmlsZSB3aXRoIHRoZQotCXJlc3QuCi0KLTE5OTItMTAtMDggIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogTWFrZWZpbGUuaW4gKGRpc3QpOiBQdXQgY29uZmlndXJlLmJhdCBpbiB0aGUgZGlzdHJpYnV0aW9uLgotCi0xOTkyLTEwLTAxICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AZ29sZG1hbi5nbnUuYWkubWl0LmVkdT4KLQotCSogTWFrZWZpbGUuaW4gKGluc3RhbGwpOiBjZCB0byAkKHNyY2RpcikgYmVmb3JlIGluc3RhbGxpbmcgaW5mbwotCWZpbGVzLgotCi0xOTkyLTA5LTMwICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIE1ha2VmaWxlLmluIChmaWxlcy5vKTogU3VwcGx5ICQoREVGUyksIGFuZCAkKENQUEZMQUdTKS4KLQotMTk5Mi0wOS0yNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBWZXJzaW9uIDEuMTkgcmVsZWFzZWQuCi0KLQkqIHNyYy9yZWFkZXIuYyAocGFyc2VfdW5pb25fZGVjbCk6IEZpeCBlbmRpbmcgb2YgQysrIGNvbW1lbnQ7Ci0JZG9uJ3QgbG9zZSB0aGUgY2hhciBhZnRlciB0aGUgbmV3bGluZS4KLQotCSogY29uZmlndXJlLmJhdDogTmV3IGZpbGUuCi0KLTE5OTItMDktMjQgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL2NvbmZsaWN0cy5jOiBDaGVjayBmb3IgdXNpbmcgYWxsb2NhLmggYXMgZ2V0b3B0LmMgZG9lcy4KLQotMTk5Mi0wOS0wNiAgS2FybCBCZXJyeSAgPGthcmxAaGF5bGV5PgotCi0JKiBzcmMvZmlsZXMuYyAob3BlbmZpbGVzKTogb3BlbiBgZmRlZmluZXMnIGFmdGVyIHdlIGhhdmUgYXNzaWduZWQKLQlhIG5hbWUgdG8gYHRtcGRlZnNmaWxlJywgYW5kIG9ubHkgaWYgYGRlZmluZXNmbGFnJyBpcyBzZXQuCi0JKGRvbmUpOiBvbmx5IGNyZWF0ZSB0aGUgcmVhbCAudGFiLmggZmlsZSBpZiBgZGVmaW5lc2ZsYWcnIGlzIHNldC4KLQkqIHNyYy9yZWFkZXIuYyAocGFja3N5bWJvbHMpOiBkb24ndCBjbG9zZSBgZmRlZmluZXMnIGhlcmUuCi0KLTE5OTItMDktMDUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL2ZpbGVzLmMgKG9wZW5maWxlcyk6IE9wZW4gZmRlZmluZXMgYXMgdGVtcCBmaWxlLCBsaWtlCi0JZnRhYmxlLgotCShkb25lKTogQ29weSB0ZW1wIGRlZmluZXMgZmlsZSB0byByZWFsIG9uZSwgbGlrZSBtYWluIG91dHB1dCBmaWxlLgotCi0xOTkyLTA4LTIxICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIE1ha2VmaWxlLmluIChkaXN0KTogRG9uJ3QgcmVsZWFzZSBtZXJnZWRpci5hd2sKLQkoaW5zdGFsbCk6IFVzZSBzZWQsIG5vdCBhd2suICBEb24ndCBkZXBlbmQgb24gbWVyZ2VkaXIuYXdrLgotCSogbWVyZ2VkaXIuYXdrOiBGaWxlIGVmZmVjdGl2ZWx5IGRlbGV0ZWQuCi0KLTE5OTItMDctMjkgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL2Jpc29uLnNpbXBsZTogVGVzdCBfX3NwYXJjIGFsb25nIHdpdGggX19zcGFyY19fLgotCi0xOTkyLTA3LTExICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9sZXguYyAoc2tpcF93aGl0ZV9zcGFjZSk6IENvdW50IFxuIGp1c3Qgb25jZSBhdCBlbmQgb2YgYysrCi0JY29tbWVudC4KLQotMTk5Mi0wNi0yNiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvYmlzb24uc2ltcGxlOiBDb21tZW50IGZpeDsgI2xpbmUgY29tbWFuZCB1cGRhdGVkLgotCi0xOTkyLTA2LTI0ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogU3BlY2lmeSBmdWxsIG5ldyBmaWxlIG5hbWUgZm9yIHRoZQotCWV4ZWN1dGFibGUuCi0KLTE5OTItMDYtMjIgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogTWFrZWZpbGUuaW4gKGRpc3QpOiBJbmNsdWRlIGJpc29uLnJuaCBpbiBkaXN0cmlidXRpb24uCi0KLVN1biBKdW4gMjEgMjI6NDI6MTMgMTk5MiBFcmljIFlvdW5nZGFsZSA8eW91bmdkYWxlQHY2NTUwYy5ucmwubmF2eS5taWw+Ci0KLQlDbGVhbiB1cCByb3VnaCBlZGdlcyBpbiBWTVMgcG9ydCBvZiBiaXNvbiwgYWRkIHN1cHBvcnQgZm9yCi0JcmVtYWluaW5nIGNvbW1hbmQgbGluZSBvcHRpb25zLgotCi0JKiBzcmMvYmlzb24uY2xkOiBBZGQgL3ZlcnNpb24sIC95YWNjLCAvZmlsZV9wcmVmaXgsIGFuZAotCS9uYW1lX3ByZWZpeCBzd2l0Y2hlcy4KLQotCSogc3JjL2J1aWxkLmNvbTogR2VuZXJhbCBjbGVhbnVwOiBhZGQgbG9naWMgdG8gYXV0b21hdGljYWxseSBzZW5zZQotCXdoaWNoIEMgY29tcGlsZXIgaXMgcHJlc2VudDsgYWRkIGNvZGUgdG8gY3dkIHRvIHRoZSBkaXJlY3RvcnkgdGhhdAotCWNvbnRhaW5zIGJpc29uIHNvdXJjZXM7IGRvIG5vdCBkZWZpbmUgWFBGSUxFLCBYUEZJTEUxCi0JKGNvcnJlY3QgZGVmYXVsdHMgYXJlIGFwcGxpZWQgaW4gc3JjL2ZpbGUuYykuCi0KLQkqIHNyYy9maWxlcy5jOiBBcHBlbmQgX3RhYiwgbm90IC50YWIgd2hlbiB1c2luZyAvZmlsZV9wcmVmaXggdW5kZXIKLQlWTVMuCi0KLQkqIHNyYy9zeXN0ZW0uaDogSW5jbHVkZSBzdHJpbmcuaCBpbnN0ZWFkIG9mIHN0cmluZ3MuaCAoYSBsYSBVU0cpLgotCi0JKiBzcmMvdm1zZ2V0YXJncy5jOiBBZGQgc3VwcG9ydCBmb3IgYWxsIHN3aXRjaGVzIGFkZGVkIHRvCi0Jc3JjL2Jpc29uLmNsZC4KLQotMTk5Mi0wNi0yMSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6IEFsd2F5cyBzcGVjaWZ5IG5ldyBmaWxlIG5hbWUgZm9yIGluc3RhbGwuCi0JUmVkaXJlY3QgYXdrIG91dHB1dCB0byB0ZW1wIGZpbGUgYW5kIGluc3RhbGwgdGhhdC4KLQotMTk5Mi0wNS0yNyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvYmlzb24uc2ltcGxlICh5eXBhcnNlKTogTWFrZSB5eWJhY2t1cCBhbmQgeXllcnJsYWIxIGFsd2F5cwotCWJlIHVzZWQuCi0KLTE5OTItMDUtMjIgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogTWFrZWZpbGUuaW4gKGRpc3QpOiBEZXBlbmQgb24gYmlzb24uaW5mbwotCShiaXNvbi5pbmZvKTogRGVsZXRlIHNwdXJpb3VzIDwuCi0KLTE5OTItMDUtMTcgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogTWFrZWZpbGUuaW4gKC5jLm8pOiBOZXcgcnVsZS4gIFVzZSAkKERFRlMpIGRpcmVjdGx5LgotCShDRkxBR1MpOiBVc2UganVzdCAtZyBieSBkZWZhdWx0LgotCShDREVCVUcpOiBWYXJpYWJsZSBkZWxldGVkLgotCi0xOTkyLTA1LTA3ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9yZWFkZXIuYyAoY29weV9ndWFyZCk6IEZpeCB0eXBvIHNraXBwaW5nIGNvbW1lbnQuCi0KLTE5OTItMDUtMDQgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogVmVyc2lvbiAxLjE4LgotCi0JKiBzcmMvZ2V0YXJncy5jIChnZXRhcmdzKTogQ2hhbmdlICcwJyB0byAwIGluIGNhc2UgZm9yIGxvbmcKLQlvcHRpb25zLgotCi0xOTkyLTA0LTE5ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9yZWFkZXIuYyAocGFja3N5bWJvbHMpOiBIYW5kbGUgLXAgd2hlbiBkZWNsYXJpbmcgeXlsdmFsLgotCi0xOTkyLTA0LTE4ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X2dyYW0pOiBPdXRwdXQgI2VuZGlmIHByb3Blcmx5IGF0IGVuZCBvZgotCWRlY2wuCi0KLTE5OTItMDMtMzAgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogVmVyc2lvbiAxLjE3LgotCi0JKiBNYWtlZmlsZS5pbiAoY2xlYW4pOiBEb24ndCBkZWxldGUgY29uZmlndXJhdGlvbiBmaWxlcyBvciBUQUdTLgotCShkaXN0Y2xlYW4pOiBOZXcgdGFyZ2V0OyBkbyBkZWxldGUgdGhvc2UuCi0KLTE5OTItMDMtMjggIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL291dHB1dC5jIChvdXRwdXRfZ3JhbSk6IENvbmRpdGlvbmFsaXplIHl5cHJocyBvbiBZWURFQlVHLgotCi0JKiBzcmMvTFIwLmMgKGF1Z21lbnRfYXV0b21hdG9uKTogSWYgY29weWluZyBzcC0+c2hpZnRzIHRvIGluc2VydAotCW5ldyBzaGlmdCwgaGFuZGxlIGNhc2Ugb2YgaW5zZXJ0aW5nIGF0IGVuZC4KLQotMTk5Mi0wMy0yMSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvbGV4LmMgKHNraXBfd2hpdGVfc3BhY2UpOiBIYW5kbGUgQysrIGNvbW1lbnRzLgotCSogc3JjL3JlYWRlci5jIChjb3B5X2RlZmluaXRpb24sIHBhcnNlX3VuaW9uX2RlY2wsIGNvcHlfZ3VhcmQpOgotCShjb3B5X2FjdGlvbik6IExpa2V3aXNlLgotCi0xOTkyLTAzLTA4ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9iaXNvbi5zaW1wbGUgKFlZUE9QU1RBQ0spOiBGaXggdHlwby4KLQotMTk5Mi0wMi0yOSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6IEluc3RhbGwgYmlzb24uaW5mbyogZmlsZXMgb25lIGJ5IG9uZS4KLQotMTk5Mi0wMi0yOCAgRGF2aWQgSi4gTWFjS2VuemllICA8ZGptQHdvb2t1bXouZ251LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9iaXNvbi4xOiBEb2N1bWVudCBsb25nIG9wdGlvbnMgYXMgc3RhcnRpbmcgd2l0aCBgLS0nLCBub3QKLQlgKycuCi0KLTE5OTItMDItMDEgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL2dldGFyZ3MuYyAoZ2V0YXJncyk6IEFjY2VwdCB2YWx1ZSAwIGZyb20gZ2V0b3B0X2xvbmcuCi0KLTE5OTItMDEtMzAgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogTWFrZWZpbGUuaW4gKG1vc3RseWNsZWFuKTogUmVuYW1lZCBmcm9tIGBjbGVhbicuCi0JKGNsZWFuKTogUmVuYW1lZCBmcm9tICdkaXN0Y2xlYW4nLiAgRGVwIG9uIG1vc3RseWNsZWFuLCBub3QKLQlyZWFsY2xlYW4uCi0JKHJlYWxjbGVhbik6IERlcCBvbiBjbGVhbi4KLQotMTk5Mi0wMS0yNyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvYmlzb24uc2ltcGxlOiBVc2UgbWFsbG9jLCBub3QgeG1hbGxvYywgYW5kIGhhbmRsZSBmYWlsdXJlCi0JZXhwbGljaXRseS4KLQotMTk5Mi0wMS0yNiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvY29uZmxpY3RzLmMgKHRvdGFsX2NvbmZsaWN0cyk6IERlbGV0ZSB1bnVzZWQgYXJnIHRvIGZwcmludGYuCi0KLTE5OTItMDEtMjEgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogVmVyc2lvbiAxLjE2LgotCi0xOTkyLTAxLTA2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIE1ha2VmaWxlIChkaXN0Y2xlYW4pOiBEZXBlbmQgb24gY2xlYW4sIG5vdCByZWFsY2xlYW4uICBEb24ndCBybQotCVRBR1MuCi0JKHJlYWxjbGVhbik6IHJtIFRBR1MgaGVyZS4KLQotCSogc3JjL3N5bXRhYi5jIChmcmVlX3N5bXRhYik6IERvbid0IGZyZWUgdGhlIHR5cGUgbmFtZXMuCi0KLTE5OTEtMTItMjkgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL21hY2hpbmUuaDogTVNET1MgaGFzIDMyLWJpdCBpbnRzIGlmIF9fR08zMl9fLgotCi0xOTkxLTEyLTI1ICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1Ad29va3Vtei5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL2Jpc29uLnNpbXBsZSBbX0FJWF06IEluZGVudCBgI3ByYWdtYSBhbGxvY2EnLCBzbyBvbGQgQwotCWNvbXBpbGVycyBkb24ndCBjaG9rZSBvbiBpdC4KLQotMTk5MS0xMi0yMyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvZ2V0b3B0LmMsIHNyYy9nZXRvcHQxLmMsIHNyYy9nZXRvcHQuaDogTGluayB0aGVtIHRvIHN0YW5kYXJkCi0Jc291cmNlIGxvY2F0aW9uLgotCSogc3JjL2FsbG9jYS5jOiBMaWtld2lzZS4KLQkqIE1ha2VmaWxlLmluIChkaXN0KTogQ29weSB0aG9zZSBmaWxlcyBmcm9tIGN1cnJlbnQgZGlyLgotCi0JKiBzcmMvZ2V0YXJncy5jOiBVcGRhdGUgdXNhZ2UgbWVzc2FnZS4KLQotCSogc3JjL0xSMC5jIChhdWdtZW50X2F1dG9tYXRvbik6IFB1dCBuZXcgc2hpZnQgaW4gcHJvcGVyIG9yZGVyLgotCi0xOTkxLTEyLTIwICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9jb25mbGljdHMuYzogVXNlIG1lbWNweSBpZiBBTlNJIEMgbGlicmFyeS4KLQotCSogc3JjL2Nsb3N1cmUuYyAoc2V0X2ZkZXJpdmVzKTogRGVsZXRlIHJlZHVuZGFudCBhc3NpZ25tZW50IHRvCi0JdnJvdy4KLQotCSogc3JjL2Nsb3N1cmUuYyAocHJpbnRfZmlyc3RzKTogRml4IGJvdW5kcyBhbmQgb2Zmc2V0IGNoZWNraW5nCi0JdGFncy4KLQotCSogc3JjL2Nsb3N1cmUuYyAodGFncyk6IERlY2xhcmUganVzdCBvbmNlIGF0IHN0YXJ0IG9mIGZpbGUuCi0KLQkqIHNyYy9MUjAuYyAoYWxsb2NhdGVfaXRlbXNldHMpOiBFbGltaW5hdGUgdW51c2VkIHZhciBtYXguCi0JKGF1Z21lbnRfYXV0b21hdG9uKTogVGVzdCBzcCBpcyBub24tbnVsbC4KLQotCSogc3JjL2xhbHIuYyAoaW5pdGlhbGl6ZV9MQSk6IE1ha2UgdGhlIHZlY3RvcnMgYXQgbGVhc3QgMSBlbGVtZW50Ci0JbG9uZy4KLQotCSogc3JjL3JlYWRlci5jIChyZWFkZ3JhbSk6IFJlbW92ZSBzZXBhcmF0ZSBZWVNUWVBFIGRlZmF1bHQgZm9yCi0JTVNET1MuCi0KLTE5OTEtMTItMTggIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL3ByaW50LmMgKHByaW50X2dyYW1tYXIpOiBEb24ndCBwcmludCBkaXNhYmxlZCBydWxlcy4KLQotMTk5MS0xMi0xNyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvbGV4LmMgKGxleCk6IFBhcnNlIGhleCBlc2NhcGVzIHByb3Blcmx5LgotCUhhbmRsZSBcdiB3aGVuIGZpbGxpbmcgdG9rZW5fYnVmZmVyLgotCi0JKiBzcmMvbGV4LmM6IEluY2x1ZGUgbmV3LmguCi0JKHRva2VuX2J1ZmZlcik6IENoYW5nZSB0byBhIHBvaW50ZXIuCi0JKGluaXRfbGV4KTogQWxsb2NhdGUgaW5pdGlhbCBidWZmZXIuCi0JKGdyb3dfdG9rZW5fYnVmZmVyKTogTmV3IGZ1bmN0aW9uLgotCShsZXgsIHBhcnNlX3BlcmNlbnRfdG9rZW4pOiBVc2UgdGhhdC4KLQotCSogc3JjL3JlYWRlci5jIChyZWFkX2RlY2xhcmF0aW9ucyk6IENhbGwgb3Blbl9leHRyYV9maWxlcyBqdXN0Ci0Jb25jZS4KLQkocGFyc2VfdG9rZW5fZGVjbCk6IERvbid0IGZyZWUgcHJldmlvdXMgdHlwZW5hbWUgdmFsdWUuICBEb24ndAotCWluY3JlbWVudCBudmFycyBpZiBzeW1ib2wgaXMgYWxyZWFkeSBhIG5vbnRlcm1pbmFsLgotCShwYXJzZV91bmlvbl9kZWNsKTogQ2F0Y2ggdW5tYXRjaGVkIGNsb3NlLWJyYWNlLgotCShwYXJzZV9leHBlY3RfZGVjbCk6IE51bGwtdGVybWluYXRlIGJ1ZmZlci4KLQkoY29weV9ndWFyZCk6IFNldCBicmFjZV9mbGFnIGZvciB7LCBub3QgZm9yIH0uCi0KLQkqIHNyYy9yZWFkZXIuYzogRml4ICUlIGluIGNhbGxzIHRvIGZhdGFsLgotCi0JKiBzcmMvcmVhZGVyLmMgKHRva2VuX2J1ZmZlcik6IEp1c3Qgb25lIGV4dGVybiBkZWNsLCBhdCB0b3AgbGV2ZWwuCi0JRGVjbGFyZSBhcyBwb2ludGVyLgotCi0JKiBzcmMvc3ltdGFiLmMgKGZyZWVfc3ltdGFiKTogRnJlZSB0eXBlX25hbWUgZmllbGRzLiAgRnJlZSBzeW10YWIKLQlpdHNlbGYuCi0KLTE5OTEtMTEtMjUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL2Jpc29uLnNpbXBsZTogSGFuZGxlIGFsbG9jYSBmb3IgQUlYLgotCi0JKiBNYWtlZmlsZS5pbiAobWFuZGlyKTogQ29tcHV0ZSBkZWZhdWx0IHVzaW5nIG1hbmV4dC4KLQotMTk5MS0xMS0wMiAgRGF2aWQgSi4gTWFjS2VuemllICA8ZGptQHdvb2t1bXouZ251LmFpLm1pdC5lZHU+Ci0KLQkqIFVwZGF0ZSBhbGwgZmlsZXMgdG8gR1BMIHZlcnNpb24gMi4KLQotMTk5MS0wOS0wNiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvYmlzb24uc2ltcGxlIChfX3l5X2Jjb3B5KTogVXNlIGJ1aWx0aW4gaWYgR0NDIHZlcnNpb24gMi4KLQotMTk5MS0wOC0yNiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvcmVhZGVyLmMgKHBhcnNlX2Fzc29jX2RlY2wpOiBFcnJvciBpZiBzYW1lIHN5bWJvbCBnZXRzIHR3bwotCXByZWNzLgotCi0xOTkxLTA4LTI2ICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AcG9nby5nbnUuYWkubWl0LmVkdT4KLQotCSogTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZTogT25seSBwdXQgJDwgaW4gTWFrZWZpbGUgaWYgdXNpbmcgVlBBVEgsCi0JYmVjYXVzZSBvbGRlciBtYWtlcyBkb24ndCB1bmRlcnN0YW5kIGl0LgotCi0xOTkxLTA4LTIzICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AYXBwbGUtZ3Vua2llcz4KLQotCSogc3JjL2NvbmZsaWN0cy5jIFtfQUlYXTogI3ByYWdtYSBhbGxvY2EuCi0JKiBzcmMvcmVkdWNlLmM6IERvbid0IGRlZmluZSBUUlVFIGFuZCBGQUxTRSBpZiBhbHJlYWR5IGRlZmluZWQuCi0KLTE5OTEtMDgtMTIgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogTWFrZWZpbGUuaW46IEFkZCBkZXBzIG9uIHN5c3RlbS5oLgotCShpbnN0YWxsKTogQWRkIHNvbWUgZGVwcy4KLQotMTk5MS0wOC0wMiAgRGF2aWQgSi4gTWFjS2VuemllICA8ZGptQGFwcGxlLWd1bmtpZXM+Ci0KLQkqIE1ha2VmaWxlLmluIChkaXN0KTogSW5jbHVkZSB0ZXhpbmZvLnRleC4KLQotCSogY29uZmlndXJlOiBDcmVhdGUgY29uZmlnLnN0YXR1cy4gIFJlbW92ZSBpdCBhbmQgTWFrZWZpbGUgaWYKLQlpbnRlcnJ1cHRlZCB3aGlsZSBjcmVhdGluZyB0aGVtLgotCi0xOTkxLTA4LTAxICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AYXBwbGUtZ3Vua2llcz4KLQotCSogY29uZmlndXJlOiBDaGVjayBmb3IgK3NyY2RpciBldGMuIGFyZyBhbmQgbG9vayBmb3IKLQlNYWtlZmlsZS5pbiBpbiB0aGF0IGRpcmVjdG9yeS4gIFNldCBWUEFUSCBpZiBzcmNkaXIgaXMgbm90IGAuJy4KLQkqIE1ha2VmaWxlLmluIChwcmVmaXgpOiBSZW5hbWVkIGZyb20gREVTVERJUi4KLQotMTk5MS0wNy0zMSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvcHJpbnQuYyAocHJpbnRfZ3JhbW1hcik6IE1ha2Ugb3V0cHV0IHByZXR0aWVyLiAgQnJlYWsgbGluZXMuCi0KLTE5OTEtMDctMzAgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL3ByaW50LmMgKHByaW50X2dyYW1tYXIpOiBOZXcgZnVuY3Rpb24uCi0JKHZlcmJvc2UpOiBDYWxsIGl0IGluc3RlYWQgb2YgcHJpbnRpbmcgdG9rZW4gbmFtZXMgaGVyZS4KLQotMTk5MS0wNy0yMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvdm1zZ2V0YXJncy5jIChzcGVjX25hbWVfcHJlZml4LCBzcGVjX2ZpbGVfcHJlZml4KTogRGVmaW5lCi0JdmFyaWFibGVzLgotCi0xOTkxLTA3LTEwICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1Ad29va3Vtei5nbnUuYWkubWl0LmVkdT4KLQotCSogY29uZmlndXJlLCBNYWtlZmlsZS5pbjogJChJTlNUQUxMUFJPRykgLT4gJChJTlNUQUxMKSwKLQkkKElOU1RBTExURVhUKSAtPiAkKElOU1RBTExEQVRBKS4KLQotMTk5MS0wNy0wOSAgRGF2aWQgSi4gTWFjS2VuemllICA8ZGptQHdvb2t1bXouZ251LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9iaXNvbi5zaW1wbGU6IERvbid0IGluY2x1ZGUgbWFsbG9jLmggaWYgX19UVVJCT0NfXy4KLQotMTk5MS0wNy0wNiAgRGF2aWQgSi4gTWFjS2VuemllICA8ZGptQGdlZWNoLmdudS5haS5taXQuZWR1PgotCi0JKiBSZXBsYWNlIE1ha2VmaWxlIHdpdGggY29uZmlndXJlIGFuZCBNYWtlZmlsZS5pbi4gIFVwZGF0ZSBSRUFETUUKLQl3aXRoIGN1cnJlbnQgY29tcGlsYXRpb24gaW5zdHJ1Y3Rpb25zLgotCi0xOTkxLTA3LTAxICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9yZWFkZXIuYyAocmVhZGVyKTogTWFrZSB0aGUgb3V0cHV0IGRlZmluZSBZWUJJU09OLgotCi0xOTkxLTA2LTIwICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AZ2VlY2guZ251LmFpLm1pdC5lZHU+Ci0KLQkqIE1ha2VmaWxlIChNQU5ESVIsIE1BTkVYVCk6IEluc3RhbGwgbWFuIHBhZ2UgaW4KLQkvdXNyL2xvY2FsL21hbi9tYW4xL2Jpc29uLjEgYnkgZGVmYXVsdCwgaW5zdGVhZCBvZgotCS91c3IvbWFuL21hbmwvYmlzb24ubCwgZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgR05VIHByb2dyYW1zLgotCSogTWFrZWZpbGU6IFJlbmFtZSBCSU5ESVIgZXQgYWwuIHRvIGxvd2VyY2FzZSB0byBjb25mb3JtIHRvCi0JR05VIGNvZGluZyBzdGFuZGFyZHMuCi0JKGluc3RhbGwpOiBNYWtlIG1hbiBwYWdlIG5vbi1leGVjdXRhYmxlLgotCi0xOTkxLTA1LTMxICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+Ci0KLQkqIE1ha2VmaWxlIChiaXNvbi5pbmZvKTogTmV3IHRhcmdldC4KLQkocmVhbGNsZWFuKTogTmV3IHRhcmdldC4KLQotMTk5MS0wNS0wMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBzcmMvYmlzb24uc2ltcGxlOiBVc2UgWVlQUklOVCB0byBwcmludCBhIHRva2VuLCBpZiBpdCdzIGRlZmluZWQuCi0KLTE5OTEtMDQtMjkgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL2xhbHIuYyAodHJhbnNwb3NlKTogUmVuYW1lIFIgdG8gUl9hcmcuCi0JKGluaXRpYWxpemVfTEEpOiBBdm9pZCBzaGFkb3dpbmcgdmFyaWFibGUgai4KLQotCSogc3JjL3JlYWRlci5jIChwYWNrc3ltYm9scyk6IEF2b2lkIHNoYWRvd2luZyB2YXJpYWJsZSBpLgotCi0JKiBzcmMvZmlsZXMuYzogRGVjbGFyZSBleGl0IGFuZCBwZXJyb3IuCi0KLQkqIHNyYy9tYWNoaW5lLmg6IERlZmluZSBNQVhTSE9SVCBhbmQgTUlOU0hPUlQgZm9yIHRoZSBldGEtMTAuCi0KLTE5OTEtMDQtMDIgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KLQotCSogc3JjL2FsbG9jYXRlLmMgKG1hbGxvY2F0ZSk6IEFsd2F5cyBhbGxvY2F0ZSBhdCBsZWFzdCBvbmUgYnl0ZS4KLQotMTk5MS0wMy0xOSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgotCi0JKiBNYWtlZmlsZSAoZGlzdCk6IFB1dCBhbGxvY2EuYyBpbnRvIGRpc3RyaWJ1dGlvbi4KLQotMTk5MS0wMy0wNiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9wcmludC5jIChwcmludF9hY3Rpb25zKTogTmljZXIgb3V0cHV0IGZvciBmaW5hbCBzdGF0ZXMuCi0KLTE5OTEtMDItMjEgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5haS5taXQuZWR1PgotCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9ydWxlX2RhdGEpOiBCcmVhayBsaW5lcyBpbiB5eXRsaW5lIGJhc2VkIG9uCi0JaHBvcy4KLQotMTk5MS0wMi0wNyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9iaXNvbi5zaW1wbGUgKHl5cGFyc2UpOiBNb3ZlIGRlY2wgb2YgeXlsc2EgYmVmb3JlIHVzZS4KLQotMTk5MS0wMS0xNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmFpLm1pdC5lZHU+Ci0KLQkqIFZlcnNpb24gMS4xNC4KLQotCSogc3JjL291dHB1dC5jIChvdXRwdXRfcnVsZV9kYXRhKTogSGFuZGxlIE5VTEwgaW4gdGFnc1tpXS4KLQotMTk5MS0wMS0xMSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9iaXNvbi5zaW1wbGU6IE9uIE1TRE9TLCBpbmNsdWRlIG1hbGxvYy5oLgotCi0xOTkwLTEyLTI5ICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1Ad29va3Vtei5haS5taXQuZWR1PgotCi0JKiBzcmMvZmlsZXMuYzogVXNlIGBtYWxsb2NhdGUnIGluc3RlYWQgb2YgYHhtYWxsb2MnIHNvIG5vIGV4dHJhCi0JZGVjbCBpcyBuZWVkZWQuCi0KLTE5OTAtMTItMTkgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5haS5taXQuZWR1PgotCi0JKiBzcmMvcmVhZGVyLmMgKHJlYWRncmFtKTogQWx0ZXJuYXRlIFlZU1RZUEUgZGVmbiBmb3IgTVNET1MuCi0JKiBzcmMvZmlsZXMuYyBbTVNET1NdOiBEZWNsYXJlIHhtYWxsb2MuCi0KLTE5OTAtMTItMTMgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5haS5taXQuZWR1PgotCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9ydWxlX2RhdGEpOiBQdXQgYWxsIHN5bWJvbHMgaW4geXl0bmFtZS4KLQotCSogc3JjL2Jpc29uLnNpbXBsZSAoeXlwYXJzZSk6IERlbGV0ZSBleHRyYSBmcHJpbnRmIGFyZwotCXdoZW4gcHJpbnRpbmcgYSByZXN1bHQgb2YgcmVkdWN0aW9uLgotCi0xOTkwLTEyLTEwICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuYWkubWl0LmVkdT4KLQotCSogc3JjL3JlYWRlci5jIChwYWNrc3ltYm9scyk6IERvbid0IGRlY2xhcmUgeXlsdmFsIGlmIHB1cmVfcGFyc2VyLgotCi0xOTkwLTEwLTMwICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuYWkubWl0LmVkdT4KLQotCSogVmVyc2lvbiAxLjEyLgotCi0JKiBzcmMvTFIwLmMgKGF1Z21lbnRfYXV0b21hdG9uKTogRml4IGJ1Z3MgYWRkaW5nIHNwMiB0byBjaGFpbiBvZgotCXNoaWZ0cy4KLQotMTk5MC0xMC0yMyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9iaXNvbi5zaW1wbGU6IERvbid0IGRlZmluZSBhbGxvY2EgaWYgYWxyZWFkeSBkZWZpbmVkLgotCi0xOTkwLTEwLTIxICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuYWkubWl0LmVkdT4KLQotCSogc3JjL2dldG9wdC5jOiBPbiBWTVMsIHVzZSBzdHJpbmcuaC4KLQotCSogc3JjL21haW4uYyAobWFpbik6IFJldHVybiB0eXBlIGludC4KLQotMTk5MC0wOS0xMCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X2hlYWRlcnMpOiBPdXRwdXQgbWFjcm8gZGVmcyBmb3IgLXAuCi0KLQkqIHNyYy9yZWFkZXIuYyAocmVhZGdyYW0pOiBIYW5kbGUgY29uc2VjdXRpdmUgYWN0aW9ucy4KLQotCSogc3JjL2dldGFyZ3MuYyAoZ2V0YXJncyk6IFJlbmFtZSAtYSB0byAtcC4KLQkqIHNyYy9maWxlcy5jIChvcGVuZmlsZXMpOiBDaGFuZ2UgbmFtZXMgdXNlZCBmb3IgLWIuCi0KLTE5OTAtMDgtMjcgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5haS5taXQuZWR1PgotCi0JKiBzcmMvcmVkdWNlLmMgKHJlZHVjZV9ncmFtbWFyX3RhYmxlcyk6IERvbid0IG1hcCBybGhzIG9mIGRpc2FibGVkCi0JcnVsZS4KLQotMTk5MC0wOC0yNiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9jbG9zdXJlLmMgKHByaW50X2ZpcnN0cywgcHJpbnRfZmRlcml2ZXMpOiBVc2UgQklUSVNTRVQgdG8KLQl0ZXN0IGJpdHMuCi0KLTE5OTAtMDgtMjMgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5haS5taXQuZWR1PgotCi0JKiBzcmMvY2xvc3VyZS5jIChwcmludF9maXJzdHMpOiB2cm93c2l6ZSA9PiB2YXJzZXRzaXplLgotCShwcmludF9mZGVyaXZlcyk6IHJyb3dzaXplID0+IHJ1bGVzZXRzaXplLgotCi0xOTkwLTA4LTEwICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9iaXNvbi5zaW1wbGUgKGFsbG9jYSk6IERvbid0IGRlZmluZSBpZiBhbHJlYWR5IGRlZmluZWQuCi0JKF9feXlfYmNvcHkpOiBBbHRlcm5hdGUgZGVmaW5pdGlvbiBmb3IgQysrLgotCi0xOTkwLTA3LTExICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AYWxiZXJ0LmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9nZXRhcmdzLmMgKGdldGFyZ3MpOiBNZW50aW9uICt5YWNjIGluIHVzYWdlIG1lc3NhZ2UuCi0KLTE5OTAtMDctMTAgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KLQotCSogc3JjL3JlYWRlci5jIChwYXJzZV90b2tlbl9kZWNsLCBjb3B5X2FjdGlvbik6IFNldAotCXZhbHVlX2NvbXBvbmVudHNfdXNlZCBpZiBhcHByb3ByaWF0ZS4KLQkocmVhZGdyYW0pOiBJbmhpYml0IG91dHB1dCBvZiBZWVNUWVBFIGRlZmluaXRpb24gaW4gdGhhdCBjYXNlLgotCi0xOTkwLTA2LTMwICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3BhcnNlcik6IERlZmluZSBZWVBVUkUgaWYgcHVyZSwgYW5kIG5vdAotCW90aGVyd2lzZS4gIERvbid0IGRlZmluZSBZWUlNUFVSRS4KLQkqIHNyYy9iaXNvbi5zaW1wbGU6IEFkanVzdCBjb25kaXRpb25hbHMgYWNjb3JkaW5nbHkuCi0JKiBzcmMvYmlzb24uc2ltcGxlIChZWUxFWCk6IElmIGxvY2F0aW9ucyBub3QgaW4gdXNlLCBkb24ndCBwYXNzCi0JJnl5bGxvYy4KLQotMTk5MC0wNi0yOCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgotCi0JKiBzcmMvZ2V0YXJncy5jIChsb25nb3B0cyk6IEFkZCBgeWFjYycuCi0KLTE5OTAtMDYtMjggIERhdmlkIEouIE1hY0tlbnppZSAgPGRqbUBhcHBsZS1ndW5raWVzPgotCi0JKiBzcmMvZ2V0YXJncy5jIChnZXRhcmdzKTogQWRkIGxvbmcgb3B0aW9ucy4KLQkqIE1ha2VmaWxlOiBMaW5rIHdpdGggZ2V0b3B0MS5vIGFuZCBhZGQgZ2V0b3B0MS5jIGFuZCBnZXRvcHQuaCB0bwotCWRpc3QuCi0KLQkqIE1vdmUgdmVyc2lvbiBudW1iZXIgYW5kIGRlc2NyaXB0aW9uIGJhY2sgaW50byB2ZXJzaW9uLmMgZnJvbQotCU1ha2VmaWxlIGFuZCBnZXRhcmdzLmMuCi0JKiBNYWtlZmlsZSAoZGlzdCk6IEV4dHJhY3QgdmVyc2lvbiBudW1iZXIgZnJvbSB2ZXJzaW9uLmMuCi0KLTE5OTAtMDYtMjYgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KLQotCSogc3JjL291dHB1dC5jIChvdXRwdXQpOiBBbHdheXMgY2FsbCBvdXRwdXRfZ3JhbS4KLQkqIHNyYy9iaXNvbi5zaW1wbGUgKHl5cGFyc2UpOiBQcmludCByaHMgYW5kIGxocyBzeW1ib2xzIG9mCi0JcmVkdWN0aW9uIHJ1bGUuCi0KLTE5OTAtMDYtMjEgIERhdmlkIEouIE1hY0tlbnppZSAgPGRqbUBhbGJlcnQuYWkubWl0LmVkdT4KLQotCSogc3JjL21haW4uYzogTmV3IGdsb2JhbCB2YXIgYHByb2dyYW1fbmFtZScgdG8gaG9sZCBhcmd2WzBdIGZvcgotCWVycm9yIG1lc3NhZ2VzLgotCSogc3JjL2FsbG9jYXRlLmMsIHNyYy9maWxlcy5jLCBzcmMvZ2V0YXJncy5jLCBzcmMvcmVhZGVyLmM6IFVzZQotCWBwcm9ncmFtX25hbWUnIGluIG1lc3NhZ2VzIGluc3RlYWQgb2YgaGFyZGNvZGVkICJiaXNvbiIuCi0KLTE5OTAtMDYtMjAgIERhdmlkIEouIE1hY0tlbnppZSAgPGRqbUBhbGJlcnQuYWkubWl0LmVkdT4KLQotCSogTWFrZWZpbGU6IFNwZWNpZnkgQmlzb24gdmVyc2lvbiBoZXJlLiAgQWRkIHJ1bGUgdG8gcGFzcyBpdCB0bwotCXZlcnNpb24uYy4gIEVuY29kZSBpdCBpbiBkaXN0cmlidXRpb24gZGlyZWN0b3J5IGFuZCB0YXIgZmlsZSBuYW1lcy4KLQkqIHNyYy92ZXJzaW9uLmM6IFVzZSB2ZXJzaW9uIG51bWJlciBmcm9tIE1ha2VmaWxlLgotCSogc3JjL2dldGFyZ3MuYyAoZ2V0YXJncyk6IFByaW50IGFkZGl0aW9uYWwgdGV4dCB0aGF0IHVzZWQgdG8gYmUKLQlwYXJ0IG9mIHZlcnNpb25fc3RyaW5nIGluIHZlcnNpb24uYy4gIFVzZSAtViBpbnN0ZWFkIG9mIC12ZXJzaW9uCi0JdG8gcHJpbnQgQmlzb24gdmVyc2lvbiBpbmZvLiAgUHJpbnQgYSB1c2FnZSBtZXNzYWdlIGFuZCBleGl0IGlmCi0JZ2l2ZW4gYW4gaW52YWxpZCBvcHRpb24uCi0KLTE5OTAtMDYtMTkgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KLQotCSogc3JjL2Jpc29uLnNpbXBsZTogRml4IGEgI2xpbmUuCi0KLQkqIE1ha2VmaWxlIChJTlNUQUxMKTogTmV3IHBhcmFtZXRlci4KLQkoaW5zdGFsbCk6IFVzZSB0aGF0LgotCShDRkxBR1MpOiBNb3ZlIGRlZmluaXRpb24gdG8gdG9wLgotCi0xOTkwLTA2LTE3ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9yZWFkZXIuYyAocGFyc2VfdHlwZV9kZWNsKTogSWdub3JlIHNlbWljb2xvbi4KLQlSZW1vdmUgZXhjZXNzICUgZnJvbSBlcnJvciBtZXNzYWdlcy4KLQotMTk5MC0wNi0xNiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgotCi0JKiBWZXJzaW9uIDEuMTEuCi0KLQkqIE1ha2VmaWxlIChpbnN0YWxsKTogRW5zdXJlIGluc3RhbGxlZCBmaWxlcyByZWFkYWJsZS4KLQotVHVlIEp1biAxMiAxMjo1MDo1NiBFRFQgMTk5MCBKYXkgRmVubGFzb24gPGhhY2tAYWkubWl0LmVkdT4KLQotCSogc3JjL2dldGFyZ3MuYzogRGVjbGFyZSBzcGVjX2ZpbGVfcHJlZml4Ci0KLQkqIHNyYy9sZXguYyAobGV4KTogXGEgaXMgJ1wwMDcnIGluc3RlYWQgb2YgJzAwNycKLQotCSogc3JjL3JlYWRlci5jOiBpbmNsdWRlIG1hY2hpbmUuaAotCi0JKiBzcmMvZmlsZXMuaDogRGVjbGFyZSBleHRlcm4gc3BlY19uYW1lX3ByZWZpeC4KLQotCVRyaXZpYWwgcGF0Y2ggZnJvbSBUaG9yc3RlbiBPaGwgPHRkMTJAZGRhZ3NpMy5iaXRuZXQ+Ci0KLTE5OTAtMDUtMzEgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KLQotCSogVmVyc2lvbiAxLjEwLgotCi0JKiBzcmMvYmlzb24uc2ltcGxlIChZWUJBQ0tVUCwgWVlSRUNPVkVSSU5HKTogTmV3IG1hY3Jvcy4KLQkoWVlJTklUREVQVEgpOiBUaGlzIGlzIHdoYXQgdXNlZCB0byBiZSBZWU1BWERFUFRILgotCShZWU1BWERFUFRIKTogVGhpcyBpcyB3aGF0IHVzZWQgdG8gYmUgWVlNQVhMSU1JVC4KLQlJZiB0aGUgdmFsdWUgaXMgMCwgdXNlIHRoZSBkZWZhdWx0IGluc3RlYWQuCi0JKHl5cGFyc2UpOiBSZXR1cm4gMiBvbiBzdGFjayBvdmVyZmxvdy4KLQotMTk5MC0wNS0zMCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgotCi0JKiBzcmMvYmlzb24uc2ltcGxlIChZWUVSUk9SKTogSnVtcCB0byBuZXcgbGFiZWw7IGRvbid0IHByaW50IGVycm9yCi0JbWVzc2FnZS4KLQkoeXlwYXJzZSk6IERlZmluZSBsYWJlbCB5eWVycmxhYjEuCi0KLTE5OTAtMDUtMTYgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KLQotCSogc3JjL2ZpbGVzLmMgKG9wZW5maWxlcyk6IFN1cHBvcnQgLWIuCi0JKiBzcmMvZ2V0YXJncy5jIChnZXRhcmdzKTogTGlrZXdpc2UuCi0KLQkqIHNyYy9yZWFkZXIuYyAocmVhZGdyYW0pOiBFcnJvciBpZiB0b28gbWFueSBzeW1ib2xzLgotCi0JKiBzcmMvbGV4LmMgKGxleCk6IEhhbmRsZSBcYS4gIE1ha2UgZXJyb3IgbXNncyBtb3JlIHJlbGlhYmxlLgotCSogc3JjL3JlYWRlci5jIChyZWFkX2RlY2xhcmF0aW9ucyk6IE1ha2UgZXJyb3IgbXNncyBtb3JlIHJlbGlhYmxlLgotCi0xOTkwLTA1LTEzICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+Ci0KLQkqIFZlcnNpb24gMS4wOS4KLQotCSogc3JjL3JlZHVjZS5jIChyZWR1Y2VfZ3JhbW1hcl90YWJsZXMpOiBGaXggYmFja3dhcmQgdGVzdC4KLQotMTk5MC0wNS0xMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgotCi0JKiBNYWtlZmlsZSAoYmlzb24tZGlzdC4qKTogUmVuYW1lIHRhcmdldHMgYW5kIGZpbGVzIHRvIGJpc29uLiouCi0JKGJpc29uLnRhcik6IE1ha2UgdGFyIGZpbGUgdG8gdW5wYWNrIGludG8gc3ViZGlyZWN0b3J5IG5hbWVkIGBiaXNvbicuCi0KLTE5OTAtMDQtMzAgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KLQotCSogc3JjL3JlZHVjZS5jIChyZWR1Y2VfZ3JhbW1hcl90YWJsZXMpOiBTZXQgcmxocyB0byAtMSBmb3IgdXNlbGVzcwotCXJ1bGVzLgotCSogc3JjL251bGxhYmxlLmMgKHNldF9udWxsYWJsZSk6IElnbm9yZSB0aG9zZSBydWxlcy4KLQkqIHNyYy9kZXJpdmVzLmMgKHNldF9kZXJpdmVzKTogTGlrZXdpc2UuCi0KLTE5OTAtMDQtMjMgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KLQotCSogc3JjL2Jpc29uLnNpbXBsZSAoeXlwYXJzZSk6IE1lbnRpb24gcnVsZSBudW1iZXIgYXMgd2VsbCBhcyBsaW5lCi0JbnVtYmVyLgotCi0xOTkwLTAzLTI5ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9iaXNvbi5zaW1wbGUgKF9feXlfYmNvcHkpOiBOZXcgZnVuY3Rpb24uCi0JKHl5cGFyc2UpOiBVc2UgdGhhdCwgbm90IGJjb3B5LgotCi0xOTkwLTAzLTI4ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9wcmludC5jIChwcmludF9hY3Rpb25zKTogRG9uJ3QgYWx0ZXIgaSBhbmQgaiBzcHVyaW91c2x5IHdoZW4KLQllcnJwPT0wLgotCi0xOTkwLTAzLTEyICBKaW0gS2luZ2RvbiAgPGtpbmdkb25AcG9nby5haS5taXQuZWR1PgotCi0JKiBzcmMvYmlzb24uc2ltcGxlIFtfX0dOVUNfX106IFVzZSBidWlsdGluX2FsbG9jYS4KLQotMTk5MC0wMy0wNyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgotCi0JKiBNYWtlZmlsZSAoaW5zdGFsbCk6IFVzZSBtZXJnZWRpci5hd2sgdG8gcHJvY2VzcyBiaXNvbi5zaW1wbGUKLQlmb3IgaW5zdGFsbGF0aW9uLgotCi0JKiBzcmMvYmlzb24uc2ltcGxlICh5eXBhcnNlKTogTmV3IGZlYXR1cmUgdG8gaW5jbHVkZSBwb3NzaWJsZSB2YWxpZAotCXRva2VucyBpbiBwYXJzZSBlcnJvciBtZXNzYWdlLgotCi0xOTkwLTAzLTAzICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQGdlZWNoPgotCi0JKiBWZXJzaW9uIDEuMDguCi0KLTE5OTAtMDItMjYgIEppbSBLaW5nZG9uICA8a2luZ2RvbkBwb2dvLmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9wcmludC5jIChwcmludF9hY3Rpb25zKQotCSogc3JjL2NvbmZsaWN0cy5jIChwcmludF9yZWR1Y3Rpb25zKTogQ2hhbmdlICJzaGlmdCAlZCIgdG8KLQkic2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAlZCIgYW5kICJyZWR1Y2UgJWQiIHRvICJyZWR1Y2UgdXNpbmcgcnVsZSAlZCIKLQlhbmQgImdvdG8gJWQiIHRvICJnbyB0byBzdGF0ZSAlZCIuCi0JKiBzcmMvcHJpbnQuYyAocHJpbnRfY29yZSk6IENoYW5nZSAiKCVkKSIgdG8gIihydWxlICVkKSIuCi0KLTE5OTAtMDItMjAgIEpheSBGZW5sYXNvbiAgPGhhY2tAd29va3Vtei5haS5taXQuZWR1PgotCi0JKiBzcmMvYmlzb24uc2ltcGxlOiAgQ29tbWVudCBvdXQgdW51c2VkIHl5cmVzdW1lOiBsYWJlbC4KLQotMTk5MC0wMi0wOSAgSmF5IEZlbmxhc29uIDxoYWNrQHdvb2t1bXouYWkubWl0LmVkdT4KLQotCSogc3JjL2Jpc29uLnNpbXBsZSA6IHN1cnJvdW5kIGFsbCBkZWNsYXJhdGlvbnMgYW5kIChyZW1haW5pbmcpCi0JdXNlcyBvZiB5eWxzKiBhbmQgeXlsbG9jIHdpdGggI2lmZGVmIFlZTFNQX05FRURFRCBUaGlzIHdpbGwKLQlzaWduaWZpY2FudGx5IGN1dCBkb3duIG9uIHN0YWNrIHVzYWdlLCBhbmQgZ2V0cyByaWQgb2YKLQl1bnVzZWQtdmFyaWFibGUgbXNncyBmcm9tIEdDQy4KLQotMTk5MC0wMS0zMSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgotCi0JKiBzcmMvZmlsZXMuYyAoZG9uZSkgW1ZNU106IERvbid0IGRlbGV0ZSBmaWxlcyB0aGF0IHdlcmVuJ3QgdXNlZC4KLQlbVk1TXTogTGV0IHVzZXIgb3ZlcnJpZGUgWFBGSUxFIGFuZCBYUEZJTEUxLgotCi0xOTkwLTAxLTAzICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+Ci0KLQkqIFZlcnNpb24gMS4wNy4KLQotMTk4OS0xMi0xNiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgotCi0JKiBzcmMvZ3JhbS5jIChkdW1teSk6IE5ldyBmdW5jdGlvbi4KLQotCSogc3JjL3JlYWRlci5jIChyZWFkZ3JhbSk6IERldGVjdCBlcnJvciBpZiB0d28gY29uc2VjIGFjdGlvbnMuCi0KLTE5ODktMTEtMTUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KLQotCSogc3JjL3JlZHVjZS5jIChyZWR1Y2VfZ3JhbW1hcl90YWJsZXMpOiBVcGRhdGUgcmxpbmUgbGlrZSBvdGhlcgotCXRhYmxlcy4KLQotCSogTWFrZWZpbGUgKGluc3RhbGwpOiBJbnN0YWxsIHRoZSBtYW4gcGFnZS4KLQotMTk4OS0xMS0xMSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgotCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9ydWxlX2RhdGEpOiBXcml0ZSAjaWYgWVlERUJVRyBhcm91bmQgeXlybGluZS4KLQotMTk4OS0xMC0xOCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgotCi0JKiBWZXJzaW9uIDEuMDYuCi0KLQkqIHNyYy92bXNnZXRhcmdzLmMgKGdldGFyZ3MpOiBEb3duY2FzZSBzcGVjaWZpZWQgb3V0cHV0IGZpbGUgbmFtZS4KLQotMTk4OS0xMC0xMyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgotCi0JKiBzcmMvcmVhZGVyLmMgKHJlYWRncmFtKTogV2FybiBpZiB0aGVyZSBpcyBubyBkZWZhdWx0IHRvIHVzZSBmb3IKLQkkJCBhbmQgb25lIGlzIG5lZWRlZC4KLQotMTk4OS0wOS0yOSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgotCi0JKiBWZXJzaW9uIDEuMDUuCi0KLQkqIHNyYy92bXNnZXRhcmdzLmggKGdldGFyZ3MpOiBQcm9jZXNzIG91dGZpbGUgb3B0aW9uLgotCi0xOTg5LTA5LTA4ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+Ci0KLQkqIFZlcnNpb24gMS4wNC4KLQotCSogc3JjL3JlYWRlci5jIChwYXJzZV91bmlvbl9kZWNsKTogQ291bnQgbmV3bGluZXMgZXZlbiBpbgotCWNvbW1lbnRzLgotCi0xOTg5LTA5LTA2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9maWxlcy5jIChvcGVuZmlsZXMpOiBzaG9ydF9iYXNlX2xlbmd0aCB3YXMgYWx3YXlzID09Ci0JYmFzZV9sZW5ndGguCi0KLTE5ODktMDgtMjQgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAYXBwbGUtZ3Vua2llcy5haS5taXQuZWR1PgotCi0JKiBWZXJzaW9uIDEuMDMuCi0KLQkqIHNyYy9maWxlcy5jIChvcGVuZmlsZXMpOiBXcml0ZSBvdXRwdXQgaW50byBzYW1lIGRpciBhcyBpbnB1dCwgYnkKLQlkZWZhdWx0LgotCi0xOTg5LTA4LTIzICBKYXkgRmVubGFzb24gIDxoYWNrQGdudT4KLQotCSogTWFrZWZpbGU6IEluY2x1ZGUgc3lzdGVtLmggaW4gYmlzb24tZGlzdC50YXIKLQotMTk4OS0wOC0xNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Bob2JiZXMuYWkubWl0LmVkdT4KLQotCSogdmVyc2lvbiAxLjAzLgotCi0JKiBzcmMvcmVhZGVyLmMgKHJlYWRlcik6IE91dHB1dCBMVFlQRVNUUiB0byBmZGVmaW5lcwotCW9ubHkgYWZ0ZXIgcmVhZGluZyB0aGUgZ3JhbW1hci4KLQotMTk4OS0wOC0wNiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgotCi0JKiBzcmMvcmVhZGVyLmMgKHJlYWRfZGVjbGFyYXRpb25zKTogUHV0IHNwYWNlIGJlZm9yZSBjb21tZW50Ci0JdG8gYXZvaWQgYnVnIGluIEdyZWVuIEhpbGxzIEMgY29tcGlsZXIuCi0KLTE5ODktMDYtMTkgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KLQotCSogc3JjL2FsbG9jYXRlLmMgKHhtYWxsb2MpOiBOZXcgZnVuY3Rpb24uCi0KLTE5ODktMDYtMTYgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KLQotCSogc3JjL2J1aWxkLmNvbTogQ29tcGlsZSBhbmQgbGluayByZWR1Y2UuYy4KLQotMTk4OS0wNi0wOSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgotCi0JKiBzcmMvcmVkdWNlLmMgKHJlZHVjZV9ncmFtbWFyX3RhYmxlcyk6IEFkanVzdCBzdGFydF9zeW1ib2wgd2hlbgotCSNzIGNoYW5nZS4KLQotMTk4OS0wNS0yNyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgotCi0JKiBzcmMvcmVhZGVyLmMgKGNvcHlfZGVmaW5pdGlvbiwgY29weV9ndWFyZCk6IERvbid0IG9iamVjdCB0bwotCVwtbmV3bGluZSBpbnNpZGUgc3RyaW5ncy4KLQotMTk4OS0wNS0yMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgotCi0JKiBzcmMvZmlsZXMuYyAob3BlbmZpbGVzKTogQWx0ZXJuYXRlIGZpbGUgbmFtZXMgZm9yIE1TRE9TLgotCShvcGVuX2V4dHJhX2ZpbGVzKTogTGlrZXdpc2UuCi0JKGRvbmUpOiBPbiBNU0RPUywgdW5saW5rIHRlbXAgZmlsZXMgaGVyZSwgbm90IGluIG9wZW5maWxlcy4KLQotCSogc3JjL21hY2hpbmUuaCAoQklUU19QRVJfV09SRCk6IDE2IG9uIE1TRE9TLgotCShNQVhUQUJMRSk6IE5vdyBkZWZpbmVkIGluIHRoaXMgZmlsZS4KLQotCSogc3JjL3N5c3RlbS5oOiBOZXcgZmlsZSBpbmNsdWRlcyBzeXN0ZW0tZGVwZW5kZW50IGhlYWRlcnMuCi0JQWxsIHJlbGV2YW50IC5jIGZpbGVzIGluY2x1ZGUgaXQuCi0KLTE5ODktMDQtMjcgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KLQotCSogc3JjL3ZlcnNpb24uYzogVmVyc2lvbiAxLjAxLgotCi0xOTg5LTA0LTE4ICBSYW5kYWxsIFNtaXRoICA8cmFuZHlAYXBwbGUtZ3Vua2llcy5haS5taXQuZWR1PgotCi0JKiBzcmMvY29uZmxpY3RzLmMgKHRvdGFsX2NvbmZsaWN0cyk6IEZpeGVkIHR5cG8gaW4geWFjYyBzdHlsZQotCW91dHB1dDsgbWVudGlvbiBjb25mbGljdHMgaWYgPiAwLgotCi0xOTg5LTA0LTE1ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9yZWFkZXIuYyAocGFja3N5bWJvbHMpOiBTdGFydCBuZXcgc3ltYm9scyBhZnRlciAyNTYuCi0KLTE5ODktMDQtMTIgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KLQotCSogc3JjL3JlYWRlci5jIChyZWFkZXIpOiBBbHdheXMgYXNzaWduIGNvZGUgMjU2IHRvIGBlcnJvcicgdG9rZW4uCi0JQWx3YXlzIHNldCBgdHJhbnNsYXRpb25zJyB0byAxIHNvIHRoaXMgY29kZSBnZXRzIGhhbmRsZWQuCi0JKiBzcmMvYmlzb24uc2ltcGxlIChZWUVSUkNPREUpOiBEZWZpbmUgaXQuCi0KLTE5ODktMDQtMTEgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KLQotCSogc3JjL2NvbmZsaWN0cy5jOiBJZiBHTlUgQywgdXNlIGJ1aWx0aW4gYWxsb2NhLgotCi0JKiBNYWtlZmlsZSAoaW5zdGFsbCk6IERlbGV0ZSBwYXJzZXIgZmlsZXMgYmVmb3JlIGNvcHlpbmcgdGhlbS4KLQotMTk4OS0wMy0zMCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgotCi0JKiBzcmMvZ2V0YXJncy5jIChnZXRhcmdzKTogVHVybiBvZmYgY2hlY2tpbmcgb2YgbmFtZSBCaXNvbiB3YXMKLQlpbnZva2VkIGJ5LgotCi0JKiBNYWtlZmlsZSAoZGlzdCk6IEluY2x1ZGUgQ2hhbmdlTG9nIGluIGRpc3RyaWIuCi0KLTE5ODktMDMtMjMgIEpheSBGZW5sYXNvbiAgPGhhY2tAYXBwbGUtZ3Vua2llcy5haS5taXQuZWR1PgotCi0JKiBzcmMvTFIwLmMgc3JjL2Nsb3N1cmUuYyBzcmMvY29uZmxpY3RzLmMgc3JjL2Rlcml2ZXMuYwotCXNyYy9maWxlcy5jIHNyYy9nZXRhcmdzLmMgc3JjL2xhbHIuYyBzcmMvbGV4LmMgc3JjL21haW4uYwotCXNyYy9udWxsYWJsZS5jIHNyYy9vdXRwdXQuYyBzcmMvcHJpbnQuYyBzcmMvcmVhZGVyLmMgc3JjL3JlZHVjZS5jCi0Jc3JjL3N5bXRhYi5jIHNyYy93YXJzaGFsbC5jOiBBIGZpcnN0IHBhc3MgYXQgZ2V0dGluZyBnY2MgLVdhbGwgdG8KLQlzaHV0IHVwLiAgTW9zdGx5IGRlY2xhcmVkIGZ1bmN0aW9ucyBhcyB2b2lkLCBldGMuCi0KLQkqIHNyYy9yZWR1Y2UuYyBtb3ZlZCAnZXh0ZXJuIGludCBmaXhlZF9vdXRmaWxlczsnIGludG8gcHJpbnRfbm90aWNlcwotCXdoZXJlIGl0IGJlbG9uZ3MuCi0KLTE5ODktMDMtMDEgIFJhbmRhbGwgU21pdGggIDxyYW5keUBhcHBsZS1ndW5raWVzLmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy90eXBlcy5oLCBzcmMvc3ltdGFiLmgsIHNyYy9zdGF0ZS5oLCBzcmMvbmV3LmgsCi0Jc3JjL21hY2hpbmUuaCwgc3JjL2xleC5oLCBzcmMvZ3JhbS5oLCBzcmMvZmlsZXMuaCwgc3JjL2Nsb3N1cmUuYywKLQlzcmMvdm1zZ2V0YXJncy5jLCBzcmMvd2Fyc2hhbGwuYywgc3JjL3N5bXRhYi5jLCBzcmMvcmVkdWNlLmMsCi0Jc3JjL3JlYWRlci5jLCBzcmMvcHJpbnQuYywgc3JjL291dHB1dC5jLCBzcmMvbnVsbGFibGUuYywKLQlzcmMvbWFpbi5jLCBzcmMvbGV4LmMsIHNyYy9sYWxyLmMsIHNyYy9ncmFtLmMsIHNyYy9nZXRhcmdzLmMsCi0Jc3JjL2ZpbGVzLmMsIHNyYy9kZXJpdmVzLmMsIHNyYy9jb25mbGljdHMuYywgc3JjL2FsbG9jYXRlLmMsCi0Jc3JjL0xSMC5jLCBNYWtlZmlsZSwgc3JjL2Jpc29uLnNpbXBsZTogQ2hhbmdlZCBjb3B5cmlnaHQgbm90aWNlcwotCXRvIGJlIGluIGFjY29yZCB3aXRoIHRoZSBuZXcgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLQkqIENPUFlJTkc6IE1hZGUgYSBsaW5rIHRvIHRoZSBuZXcgY29weWluZyBmaWxlLgotCi0xOTg5LTAyLTIyICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9uZXcuaCAoRlJFRSk6IEFsdGVybmF0ZSBkZWZpbml0aW9uIGZvciBfX1NURENfXyBhdm9pZHMgZXJyb3IKLQlpZiBgZnJlZScgcmV0dXJucyB2b2lkLgotCi0xOTg5LTAyLTIxICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9yZWFkZXIuYyAocmVhZF9kZWNsYXJhdGlvbnMpOiBEb3VibGUgYSBgJScgaW4gYSBmb3JtYXQgc3RyaW5nLgotCShjb3B5X2RlZmluaXRpb24sIHBhcnNlX3N0YXJ0X2RlY2wsIHBhcnNlX3Rva2VuX2RlY2wpOiBMaWtld2lzZS4KLQkocGFyc2VfdHlwZV9kZWNsLCBwYXJzZV91bmlvbl9kZWNsLCBjb3B5X2d1YXJkLCByZWFkZ3JhbSwgZ2V0X3R5cGUpLgotCShjb3B5X2FjdGlvbik6IGNoYW5nZSBhIGBmYXRhbCcgdG8gYGZhdGFscycuCi0KLQkqIHNyYy9sYWxyLmMgKG1hcF9nb3RvKTogSW5pdGlhbCBoaWdoLWVuZCBvZiBiaW5hcnkgc2VhcmNoIHdhcyBvZmYKLQlieSAxLgotCi0xOTg5LTAyLTE4ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9iaXNvbi5zaW1wbGUgW3NwYXJjXTogSW5jbHVkZSBhbGxvY2EuaC4KLQotMTk4OS0wMi0xNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgotCi0JKiBzcmMvcmVhZGVyLmMgKHBhY2tzeW1ib2xzKTogV3JpdGUgZGVjbCBvZiB5eWx2YWwgaW50byAudGFiLmggZmlsZS4KLQotMTk4OS0wMS0yOCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgotCi0JKiBzcmMvYmlzb24uc2ltcGxlOiBBdm9pZCBjb21tZW50cyBvbiBgI2xpbmUnIGxpbmVzLgotCi0JKiBzcmMvcmVhZGVyLmMgKExUWVBFU1RSKTogUmVhcnJhbmdlIHRvIGF2b2lkIHdoaXRlc3BhY2UgYWZ0ZXIKLQlcLW5ld2xpbmUuCi0KLTE5ODktMDEtMDkgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KLQotCSogc3JjL2NvbmZsaWN0cy5jICh0b3RhbF9jb25mbGljdHMpOiBpZiAteSwgdXNlIG91dHB1dCBzeW50YXgKLQlQT1NJWCB3YW50cy4KLQkqIHNyYy9yZWR1Y2UuYyAocHJpbnRfbm90aWNlcyk6IGxpa2V3aXNlLgotCi0JKiBzcmMvbGV4LmMgKGxleCk6IEhhbmRsZSBcdiwgYW5kIFx4IGhleCBlc2NhcGVzLgotCi0JKiBzcmMvcmVhZGVyLmMgKHJlYWRlcik6IE1lcmdlIG91dHB1dF9sdHlwZSBpbnRvIGhlcmUuICBEb24ndAotCW91dHB1dCBZWUxUWVBFIGRlZmluaXRpb24gdG8gLnRhYi5oIGZpbGUgdW5sZXNzIHRoZSBAIGNvbnN0cnVjdCBpcwotCXVzZWQuCi0KLQkqIHNyYy9iaXNvbi5zaW1wbGU6IERlZmluZSBZWUVSUk9SLCBZWUFCT1JULCBZWUFDQ0VQVCBoZXJlLgotCSogc3JjL3JlYWRlci5jIChvdXRwdXRfbHR5cGUpOiBEb24ndCBvdXRwdXQgdGhlbSBoZXJlLgotCi0JKiBzcmMvYmlzb24uc2ltcGxlOiBZWURFQlVHIG5vdyBzaG91bGQgYmUgMCBvciAxLgotCSogc3JjL291dHB1dC5jIChvdXRwdXQpOiBGb3IgWVlERUJVRywgb3V0cHV0IGNvbmRpdGlvbmFsIHRvIGRlZmluZSBpdAotCW9ubHkgaWYgbm90IHByZXZpb3VzbHkgZGVmaW5lZC4KLQotMTk4OS0wMS0wMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgotCi0JKiBzcmMvYmlzb24uc2ltcGxlICh5eXBhcnNlKSBbWVlQVVJFXTogQWRkIGxvY2FsIHl5bmVycnMuCi0JKHl5ZGVidWcpOiBEZWNsYXJlIGdsb2JhbCwgYnV0IGRvbid0IGluaXRpYWxpemUsIHJlZ2FyZGxlc3Mgb2YKLQlZWVBVUkUuCi0JKHl5cGFyc2UpOiBEb24ndCBkZWNsYXJlIHl5ZGVidWcgaGVyZS4KLQotMTk4OC0xMi0yMiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgotCi0JKiBzcmMvcmVkdWNlLmMgKHByaW50X25vdGljZXMpOiBUeXBvIGluIG1lc3NhZ2UuCi0KLTE5ODgtMTItMTEgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KLQotCSogc3JjL291dHB1dC5jIChwYWNrX3RhYmxlKTogRnJlZSBvbmx5IG5vbnplcm8gdGhlIGVsdHMgb2YgZnJvbXMgJgotCXRvcy4KLQotMTk4OC0xMi0wOCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgotCi0JKiBzcmMvZ3JhbS5jIChycHJlY3N5bSk6IE5ldyB2ZWN0b3IgaW5kaWNhdGVzIHRoZSAlcHJlYyBzeW1ib2wgZm9yCi0JYSBydWxlLgotCSogc3JjL3JlYWRlci5jIChwYWNrZ3JhbSk6IEFsbG9jYXRlIGl0IGFuZCBmaWxsIGl0IGluLgotCSogc3JjL3JlZHVjZS5jIChpbmFjY2Vzc2FibGVfc3ltYm9scyk6IFVzZSBpdCB0byBzZXQgVjEuCi0JKiBzcmMvcmVkdWNlLmMgKHByaW50X3Jlc3VsdHMpOiBEb24ndCBjb21wbGFpbiBhYm91dCB1c2VsZXNzIHRva2VuCi0JaWYgaXQncyBpbiBWMS4KLQotMTk4OC0xMi0wNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgotCi0JKiBzcmMvbWFjaGluZS5oIChSRVNFVEJJVCwgQklUSVNTRVQpOiBOZXcgbWFjcm9zLgotCShTRVRCSVQsIFdPUkRTSVpFKTogQ2hhbmdlIHRvIHVzZSBCSVRTX1BFUl9XT1JELgotCi0JKiBzcmMvcmVkdWNlLmM6IE5ldyBmaWxlLCBieSBEYXZpZCBCYWtpbi4gIFJlZHVjZXMgdGhlIGdyYW1tYXIuCi0JKiBNYWtlZmlsZTogQ29tcGlsZSBpdCwgbGluayBpdCwgcHV0IGl0IGluIGRpc3QuCi0KLQkqIHNyYy9tYWluLmMgKG1haW4pOiBDYWxsIHJlZHVjZV9ncmFtbWFyIChpbiByZWR1Y2UuYykuCi0KLTE5ODgtMTEtMTcgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KLQotCSogc3JjL2NvbmZsaWN0cy5jOiBEb24ndCBkZWNsYXJlIGFsbG9jYSBpZiBpbmNsdWRpbmcgYWxsb2NhLmguCi0KLQkqIHNyYy9iaXNvbi5jbGQ6IERlZmluZSBxdWFsaWZpZXJzIGBub2xpbmVzJywgYGRlYnVnJy4KLQkqIHNyYy92bXNnZXRhcmdzLmMgKGdldGFyZ3MpOiBIYW5kbGUgdGhlbS4KLQotCSogc3JjL291dHB1dC5jIChvdXRwdXRfcHJvZ3JhbSk6IE5vdGljZSBgbm9saW5lc2ZsYWcnLgotCi0JKiBzcmMvb3V0cHV0LmMgKG91dHB1dF9wYXJzZXIpOiBTaW1wbGlmeSBsb2dpYyBmb3IgLWwgYW5kICNsaW5lLgotCUF2b2lkIHdyaXRpbmcgRU9GIGNoYXIgaW50byBvdXRwdXQuCi0KLTE5ODgtMTAtMTIgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KLQotCSogSW1wbGVtZW50IGAtbCcgb3B0aW9uLgotCSogc3JjL2dldG9wdC5jOiBTZXQgZmxhZyBgbm9saW5lc2ZsYWcnLgotCSogc3JjL3JlYWRlci5jIChjb3B5X2RlZmluaXRpb24sIHBhcnNlX3VuaW9uX2RlY2wsIGNvcHlfZ3VhcmQsCi0JY29weV9hY3Rpb24pIE9iZXkgdGhhdCBmbGFnOyBkb24ndCBnZW5lcmF0ZSAjbGluZS4KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0X3BhcnNlcik6IERpc2NhcmQgI2xpbmUncyB3aGVuIGNvcHlpbmcgdGhlCi0JcGFyc2VyLgotCi0xOTg4LTA5LTEyICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9yZWFkZXIuYyAoY29weV9ndWFyZCk6IEZpeCBicmFjZS1jb3VudGluZyBmb3IKLQlicmFjZS1zdXJyb3VuZGVkIGd1YXJkLgotCi0xOTg4LTA5LTA4ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9iaXNvbi5zaW1wbGU6IENvcnJlY3QgbnVtYmVyIGluICNsaW5lIGNvbW1hbmQuCi0JKHl5cGFyc2UpOiBDYWxsIFlZQUJPUlQgaW5zdGVhZCBvZiBZWUVSUk9SLCBkdWUgdG8gbGFzdCBjaGFuZ2UgaW4KLQlvdXRwdXRfbHR5cGUuCi0KLTE5ODgtMDktMDUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KLQotCSogTWFrZWZpbGU6IE5ldyB2YXJpYWJsZSBMSUJTLiAgQWx0ZXJuYXRpdmVzIGZvciBVU0cuCi0JKiBzcmMvY29uZmxpY3RzLmMgW1VTR106IERlZmluZSBiY29weS4KLQkqIHNyYy9zeW10YWIuYyBbVVNHXTogSW5jbHVkZSBzdHJpbmcuaCBpbnN0ZWFkIG9mIHN0cmluZ3MuaC4KLQotCSogc3JjL2NvbmZsaWN0cy5jIFtzcGFyY106IEluY2x1ZGUgYWxsb2NhLmguCi0KLTE5ODgtMDgtMDIgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAc3VnYXItYm9tYnMuYWkubWl0LmVkdT4KLQotCSogc3JjL3JlYWRlci5jIChwYXJzZV90b2tlbl9kZWNsKTogSWdub3JlIGNvbW1hcy4KLQotMTk4OC0wNi0yNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BzdWdhci1ib21icy5haS5taXQuZWR1PgotCi0JKiBzcmMvcmVhZGVyLmMgKG91dHB1dF9sdHlwZSk6IE1ha2UgWVlFUlJPUiB5YWNjLWNvbXBhdGlibGUgKGxpa2UKLQlZWUZBSUwpLgotCi0xOTg4LTA2LTI0ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHU+Ci0KLQkqIHNyYy9nZXRhcmdzLmMgKGdldGFyZ3MpOiAtdCBzZXRzIGRlYnVnZmxhZy4KLQlFbGltaW5hdGUgdXBwZXIgY2FzZSBkdXBsaWNhdGUgb3B0aW9ucy4KLQkqIHNyYy9vdXRwdXQuYyAob3V0cHV0KTogSWYgZGVidWdmbGFnLCBvdXRwdXQgYCNkZWZpbmUgWVlERUJVRycuCi0KLTE5ODgtMDUtMjYgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdT4KLQotCSogc3JjL2FsbG9jYXRlLmMgKG1hbGxvY2F0ZSk6IE5ldyBuYW1lIGZvciBgYWxsb2NhdGUnICh3aGljaCBsb3NlcwotCWluIFZNUykuICBDYWxscyBjaGFuZ2VkIGluIExSMC5jLCBjb25mbGljdHMuYywgc3ltdGFiLmMsIG5ldy5oLgotCi0JKiBzcmMvZ2V0YXJncy5jIChnZXRhcmdzKTogSWYgYXJndlswXSBpcyAieWFjYyIsIHNldCBmaXhlZF9vdXRmaWxlcy4KLQotMTk4OC0wNS0xNyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Bmcm9zdGVkLWZsYWtlcy5haS5taXQuZWR1PgotCi0JKiBzcmMvY29uZmxpY3RzLmM6IERlY2xhcmUgYWxsb2NhLgotCSogc3JjL3JlYWRlci5jOiBEZWNsYXJlIHJlYWxsb2MuCi0JKiBzcmMvd2Fyc2hhbGwuYyAoVEMpOiBGaXggb25lIGFyaXRobWV0aWMgb3AgdGhhdCB3YXMgb21pdHRlZCBsYXN0Ci0JdGltZS4KLQotMTk4OC0wNS0wNSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Bmcm9zdGVkLWZsYWtlcy5haS5taXQuZWR1PgotCi0JKiBzcmMvYmlzb24uc2ltcGxlOiBDb25kaXRpb25hbGl6ZSBtb3N0IHJlZnMgdG8geXlsc3Agb24KLQlZWUxTUF9ORUVERUQuCi0JKiBzcmMvcmVhZGVyLmMgKGNvcHlfZ3VhcmQsIGNvcHlfYWN0aW9uKTogTm90aWNlIGlmIGBAJyBpcyB1c2VkLgotCShyZWFkZXIpOiBJZiBpdCB3YXMsIG91dHB1dCBgI2RlZmluZSBZWUxTUF9ORUVERUQnLgotCi0xOTg4LTA0LTE4ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHJpY2Uta3Jpc3BpZXMuYWkubWl0LmVkdT4KLQotCSogc3JjL2Jpc29uLnNpbXBsZTogTmV3IHZhcmlhYmxlIHl5bmVyciBjb3VudHMgY2FsbHMgdG8geXllcnJvci4KLQotCSogc3JjL2xleC5jIChsZXgsIGNhc2UgJz0nKTogVXBkYXRlIGxpbmVubyB3aGVuIHNraXBwaW5nIGEgbmV3bGluZS4KLQotCSogc3JjL3JlYWRlci5jIChwYXJzZV9leHBlY3RfZGVjbCk6IHVuZ2V0YyB0aGUgY2hhciB0aGF0IGVuZHMgdGhlCi0JbnVtYmVyOyBkb24ndCByZWFkIGFueSBmdXJ0aGVyLiAgVGhpcyBoYW5kbGVzIG11bHRpLWxpbmUgY29tbWVudHMKLQlyaWdodCBhbmQgYXZvaWRzIGluY29ycmVjdCBsaW5lbm8uCi0KLQkqIHNyYy9yZWFkZXIuYzogRGVsZXRlIGR1cGxpY2F0ZSBkZWNsIG9mIHN5bXZhbC4KLQotCSogc3JjL3dhcnNoYWxsLmMgKFJUQywgVEMpOiBDYXN0IHB0cnMgdG8gY2hhciAqLCBub3QgdW5zaWduZWQsIGZvcgotCWFyaXRoLgpkaWZmIC0tZ2l0IGEvUEFDS0FHSU5HIGIvUEFDS0FHSU5HCmluZGV4IGRkMjg1YzkuLmM4OTBlZWQgMTAwNjQ0Ci0tLSBhL1BBQ0tBR0lORworKysgYi9QQUNLQUdJTkcKQEAgLTM2LDIxICszNiwxOSBAQAogCiAtLS0tLQogCi1Db3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCiAKLUJpc29uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotYW55IGxhdGVyIHZlcnNpb24uCit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAotQmlzb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi1hbG9uZyB3aXRoIGF1dG9jb25mOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi1Cb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KK2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgpkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IGEwNTNmNGIuLjA0YmY1MTAgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTEsNDEgKzEsNjMgQEAKLVRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBCaXNvbiBwYXJzZXIgZ2VuZXJhdG9yLgorVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHRoZSBHTlUgQmlzb24gcGFyc2VyIGdlbmVyYXRvci4KIAotU2VlIHRoZSBmaWxlIElOU1RBTEwgZm9yIGdlbmVyaWMgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMuCi1TZWUgdGhlIGZpbGUgZG9jL0ZBUSBmb3IgZnJlcXVlbnRseSBhc2tlZCBxdWVzdGlvbnMuCisqIEluc3RhbGxhdGlvbgorKiogQnVpbGQKK1NlZSB0aGUgZmlsZSBJTlNUQUxMIGZvciBnZW5lcmljIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24KK2luc3RydWN0aW9ucy4KIAotQmlzb24gcmVxdWlyZXMgR05VIG00IDEuNC4zIG9yIGxhdGVyLiAgU2VlOgorQmlzb24gcmVxdWlyZXMgR05VIG00IDEuNC42IG9yIGxhdGVyLiAgU2VlOgogCi1mdHA6Ly9mdHAuZ251Lm9yZy9nbnUvbTQvbTQtMS40LjMudGFyLmd6CisgICAgICBmdHA6Ly9mdHAuZ251Lm9yZy9nbnUvbTQvbTQtMS40LjYudGFyLmd6CiAKLUJpc29uIGNhbiB3b3JrIHdpdGggcHJlLTEuNC4zIGRpc3RyaWJ1dGlvbnMgb2YgR05VIG00IGlmIHRoZXkgYXJlCi1zdWZmaWNpZW50bHkgcGF0Y2hlZCwgYnV0IGlmIHlvdSBlbmNvdW50ZXIgYSBidWcgd2l0aCBhbiBvbGRlcgotZGlzdHJpYnV0aW9uIGFuZCByZXBvcnQgYSBidWcgd2Ugd2lsbCBwcm9iYWJseSBzdWdnZXN0IHRoYXQgeW91Ci11cGdyYWRlIHRvIDEuNC4zIGFzIHRoZSBmaXJzdCBzdGVwIGluIHRyeWluZyB0byBmaXggaXQuCisqKiBJbnRlcm5hdGlvbmFsaXphdGlvbgorQmlzb24gc3VwcG9ydHMgdHdvIGNhdGFsb2d1ZXM6IG9uZSBmb3IgQmlzb24gaXRzZWxmIChpLmUuLCBmb3IgdGhlCittYWludGFpbmVyLXNpZGUgcGFyc2VyIGdlbmVyYXRpb24pLCBhbmQgb25lIGZvciB0aGUgZ2VuZXJhdGVkIHBhcnNlcnMKKyhpLmUuLCBmb3IgdGhlIHVzZXItc2lkZSBwYXJzZXIgZXhlY3V0aW9uKS4gIFRoZSByZXF1aXJlbWVudHMgYmV0d2VlbgorYm90aCBkaWZmZXI6IGJpc29uIG5lZWRzIG5nZXR0ZXh0LCB0aGUgZ2VuZXJhdGVkIHBhcnNlcnMgZG8gbm90LiAgVG8KK3NpbXBsaWZ5IHRoZSBidWlsZCBzeXN0ZW0sIG5laXRoZXIgYXJlIGluc3RhbGxlZCBpZiBuZ2V0dGV4dCBpcyBub3QKK3N1cHBvcnRlZCwgZXZlbiBpZiBnZW5lcmF0ZWQgcGFyc2VycyBjb3VsZCBoYXZlIGJlZW4gbG9jYWxpemVkLiAgU2VlCitodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDktMDgvbXNnMDAwMDYuaHRtbCBmb3IKK21vcmUgZGV0YWlscy4KIAotUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gPGJ1Zy1iaXNvbkBnbnUub3JnPi4gIFBsZWFzZSBpbmNsdWRlIHRoZQotdmVyc2lvbiBudW1iZXIgZnJvbSBgYmlzb24gLS12ZXJzaW9uJywgYW5kIGEgY29tcGxldGUsIHNlbGYtY29udGFpbmVkCi10ZXN0IGNhc2UgaW4gZWFjaCBidWcgcmVwb3J0LgorKiBRdWVzdGlvbnMKK1NlZSB0aGUgc2VjdGlvbiBGQVEgaW4gdGhlIGRvY3VtZW50YXRpb24gKGRvYy9iaXNvbi5pbmZvKSBmb3IKK2ZyZXF1ZW50bHkgYXNrZWQgcXVlc3Rpb25zLiAgVGhlIGRvY3VtZW50YXRpb24gaXMgYWxzbyBhdmFpbGFibGUgaW4KK1BERiBhbmQgSFRNTCwgcHJvdmlkZWQgeW91IGhhdmUgYSByZWNlbnQgdmVyc2lvbiBvZiBUZXhpbmZvIGluc3RhbGxlZDoKK3J1biAibWFrZSBwZGYiIG9yICJtYWtlIGh0bWwiLgogCiBJZiB5b3UgaGF2ZSBxdWVzdGlvbnMgYWJvdXQgdXNpbmcgQmlzb24gYW5kIHRoZSBkb2N1bWVudGF0aW9uIGRvZXMKIG5vdCBhbnN3ZXIgdGhlbSwgcGxlYXNlIHNlbmQgbWFpbCB0byA8aGVscC1iaXNvbkBnbnUub3JnPi4KIAorKiBCdWcgcmVwb3J0cworUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gPGJ1Zy1iaXNvbkBnbnUub3JnPi4gIFBsZWFzZSBpbmNsdWRlIHRoZQordmVyc2lvbiBudW1iZXIgZnJvbSBgYmlzb24gLS12ZXJzaW9uJywgYW5kIGEgY29tcGxldGUsIHNlbGYtY29udGFpbmVkCit0ZXN0IGNhc2UgaW4gZWFjaCBidWcgcmVwb3J0LgorCisqIENvcHlyaWdodCBzdGF0ZW1lbnRzCitGb3IgYW55IGNvcHlyaWdodCB5ZWFyIHJhbmdlIHNwZWNpZmllZCBhcyBZWVlZLVpaWlogaW4gdGhpcyBwYWNrYWdlLAorbm90ZSB0aGF0IHRoZSByYW5nZSBzcGVjaWZpZXMgZXZlcnkgc2luZ2xlIHllYXIgaW4gdGhhdCBjbG9zZWQgaW50ZXJ2YWwuCisKKworTG9jYWwgVmFyaWFibGVzOgorbW9kZTogb3V0bGluZQorRW5kOgorCiAtLS0tLQogCi1Db3B5cmlnaHQgKEMpIDE5OTIsIDE5OTgsIDE5OTksIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTgtMTk5OSwgMjAwMy0yMDA1LCAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLgogCiBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KIAotQmlzb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci10aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi1hbnkgbGF0ZXIgdmVyc2lvbi4KK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCi1CaXNvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLWFsb25nIHdpdGggYXV0b2NvbmY7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLUJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCmRpZmYgLS1naXQgYS9SRUFETUUtcmVsZWFzZSBiL1JFQURNRS1yZWxlYXNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkOTQyM2EKLS0tIC9kZXYvbnVsbAorKysgYi9SRUFETUUtcmVsZWFzZQpAQCAtMCwwICsxLDEwMCBAQAorSGVyZSBhcmUgbW9zdCBvZiB0aGUgc3RlcHMgd2UgKG1haW50YWluZXJzKSBmb2xsb3cgd2hlbiBtYWtpbmcgYSByZWxlYXNlLgorCisqIFN0YXJ0IGZyb20gYSBjbGVhbiwgdXAtdG8tZGF0ZSBnaXQgZGlyZWN0b3J5IG9uICJtYXN0ZXIiOgorCisgICAgbWFrZSAtayBtYWludGFpbmVyLWNsZWFuIHx8IHsgLi9jb25maWd1cmUgJiYgbWFrZSBtYWludGFpbmVyLWNsZWFuOyB9CisgICAgZ2l0IGNoZWNrb3V0IG1hc3RlcgorICAgIGdpdCBwdWxsIG9yaWdpbiBtYXN0ZXIKKworKiBFbnN1cmUgdGhhdCB0aGUgbGF0ZXN0IHN0YWJsZSB2ZXJzaW9ucyBvZiBhdXRvY29uZiwgYXV0b21ha2UsIGV0Yy4KKyAgYXJlIGluIHlvdXIgUEFUSC4gIFNlZSB0aGUgYnVpbGRyZXEgbGlzdCBpbiBib290c3RyYXAuY29uZiBmb3IKKyAgdGhlIGNvbXBsZXRlIGxpc3Qgb2YgdG9vbHMuCisKKyogRW5zdXJlIHRoYXQgeW91IGhhdmUgbm8gdW5jb21taXR0ZWQgZGlmZnMuICBUaGlzIHNob3VsZCBwcm9kdWNlIG5vCisgIG91dHB1dDoKKworICAgIGdpdCBkaWZmCisKKyogRW5zdXJlIHRoYXQgeW91J3ZlIHB1c2hlZCBhbGwgY2hhbmdlcyB0aGF0IGJlbG9uZyBpbiB0aGUgcmVsZWFzZToKKworICAgIGdpdCBwdXNoIG9yaWdpbiBtYXN0ZXIKKworKiBDaGVjayB0aGF0IHRoZSBOaXhPUy9IeWRyYSBhdXRvYnVpbGRlciBpcyByZXBvcnRpbmcgYWxsIGlzIHdlbGw6CisKKyAgICBodHRwOi8vaHlkcmEubml4b3Mub3JnL2pvYnNldC9nbnUvYmlzb24tbWFzdGVyCisKKyogUnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBkb3dubG9hZCBhbnkgbmV3IHRyYW5zbGF0aW9uczoKKworICAgIC4vYm9vdHN0cmFwICYmIC4vY29uZmlndXJlCisKKyogUHJlLXJlbGVhc2UgdGVzdGluZzogZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBjb21tYW5kIHN1Y2NlZWRzOgorCisgICAgbWFrZSBjaGVjayBzeW50YXgtY2hlY2sgZGlzdGNoZWNrCisKKyogVG8gKGkpIHNldCB0aGUgZGF0ZSwgdmVyc2lvbiBudW1iZXIsIGFuZCByZWxlYXNlIFRZUEUgb24gbGluZSAzIG9mCisgIE5FV1MsIChpaSkgY29tbWl0IHRoYXQsIGFuZCAoaWlpKSB0YWcgdGhlIHJlbGVhc2UsIHJ1bgorCisgICAgIyAiVFlQRSIgbXVzdCBiZSBzdGFibGUsIGJldGEgb3IgYWxwaGEKKyAgICBtYWtlIHJlbGVhc2UtY29tbWl0IFJFTEVBU0U9J1guWSBUWVBFJworCisqIFJ1biB0aGUgZm9sbG93aW5nIHRvIGNyZWF0ZSByZWxlYXNlIHRhcmJhbGxzLiAgWW91ciBjaG9pY2Ugc2VsZWN0cyB0aGUKKyAgY29ycmVzcG9uZGluZyB1cGxvYWQtdG8gZGVzdGluYXRpb24gaW4gdGhlIGVtaXR0ZWQgZ251cGxvYWQgY29tbWFuZC4KKyAgVGhlIGRpZmZlcmVudCBkZXN0aW5hdGlvbnMgYXJlIHNwZWNpZmllZCBpbiBjZmcubWsuICBTZWUgdGhlIGRlZmluaXRpb25zCisgIG9mIGdudV9mdHBfaG9zdC17YWxwaGEsYmV0YSxzdGFibGV9LgorCisgICAgbWFrZSByZWxlYXNlIFJFTEVBU0U9J1guWSBUWVBFJworCisqIFRlc3QgdGhlIHRhcmJhbGwuICBDb3B5IGl0IHRvIGEgZmV3IG9kZC1iYWxsIHN5c3RlbXMgYW5kIGVuc3VyZSB0aGF0CisgIGl0IGJ1aWxkcyBhbmQgcGFzc2VzIGFsbCB0ZXN0cy4KKworKiBXaGlsZSB0aGF0J3MgaGFwcGVuaW5nLCB3cml0ZSB0aGUgcmVsZWFzZSBhbm5vdW5jZW1lbnQgdGhhdCB5b3Ugd2lsbAorICBzb29uIHBvc3QuICBTdGFydCB3aXRoIHRoZSB0ZW1wbGF0ZSwgJEhPTUUvYW5ub3VuY2UtYmlzb24tWC5ZCisgIHRoYXQgd2FzIGp1c3QgY3JlYXRlZCBieSB0aGF0ICJtYWtlIiBjb21tYW5kLgorCitPbmNlIGFsbCB0aGUgYnVpbGRzIGFuZCB0ZXN0cyBoYXZlIHBhc3NlZCwKKworKiBSdW4gdGhlIGdudXBsb2FkIGNvbW1hbmQgdGhhdCB3YXMgc3VnZ2VzdGVkIGJ5IHlvdXIgIm1ha2UgcmVsZWFzZSIKKyAgcnVuIGFib3ZlLCBvciBydW4KKworICAgIG1ha2UgdXBsb2FkIFJFTEVBU0U9J1guWSBUWVBFJworCisqIFdhaXQgYSBmZXcgbWludXRlcyAobWF5YmUgdXAgdG8gMzA/KSBhbmQgdGhlbiB1c2UgdGhlIHJlbGVhc2UgVVJMcyB0bworICBkb3dubG9hZCBhbGwgdGFyYmFsbC9zaWduYXR1cmUgcGFpcnMgYW5kIHVzZSBncGcgLS12ZXJpZnkgdG8gZW5zdXJlCisgIHRoYXQgdGhleSdyZSBhbGwgdmFsaWQuCisKKyogUHVzaCB0aGUgTkVXUy11cGRhdGluZyBjaGFuZ2VzIGFuZCB0aGUgbmV3IHRhZzoKKworICAgIHY9JChjYXQgLnByZXYtdmVyc2lvbikKKyAgICBnaXQgcHVzaCBvcmlnaW4gbWFzdGVyIHRhZyB2JHYKKworKiBBbm5vdW5jZSBpdCBvbiBTYXZhbm5haCBmaXJzdCwgc28geW91IGNhbiBpbmNsdWRlIHRoZSBzYXZhbm5haC5vcmcKKyAgYW5ub3VuY2VtZW50IGxpbmsgaW4gdGhlIGVtYWlsIG1lc3NhZ2UuCisKKyAgR28gdG8gdGhlIG5ld3Mtc3VibWlzc2lvbiBmb3JtOgorCisgICAgaHR0cHM6Ly9zYXZhbm5haC5nbnUub3JnL25ld3Mvc3VibWl0LnBocD9ncm91cD1iaXNvbgorCisgIElmIGl0IGRvZXMgbm90IHdvcmssIHRoZW4gZW5hYmxlICJOZXdzIiBmb3IgdGhlIHByb2plY3QgdmlhIHRoaXMgbGluazoKKworICAgIGh0dHBzOi8vc2F2YW5uYWguZ251Lm9yZy9wcm9qZWN0L2FkbWluL2VkaXRncm91cGZlYXR1cmVzLnBocD9ncm91cD1iaXNvbgorCisgIFdyaXRlIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKyAgICBTdWJqZWN0OiBiaXNvbi1YLlkgcmVsZWFzZWQgW3N0YWJsZV0KKyAgICArdmVyYmF0aW0rCisgICAgLi4ucGFzdGUgdGhlIGFubm91bmNlbWVudCBoZXJlLi4uCisgICAgLXZlcmJhdGltLQorCisgIFRoZW4gZ28gaGVyZSB0byBhcHByb3ZlIGl0OgorCisgICAgaHR0cHM6Ly9zYXZhbm5haC5nbnUub3JnL25ld3MvYXBwcm92ZS5waHA/Z3JvdXA9Ymlzb24KKworKiBTZW5kIHRoZSBhbm5vdW5jZW1lbnQgZW1haWwgbWVzc2FnZS4KKworKiBBZnRlciBlYWNoIG5vbi1hbHBoYSByZWxlYXNlLCBydW4KKworICAgIG1ha2Ugd2ViLW1hbnVhbC11cGRhdGUKKworICB0byB1cGRhdGUgdGhlIG9uLWxpbmUgbWFudWFsIGFjY2Vzc2libGUgYXQKKworICAgIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iaXNvbi9tYW51YWwvCmRpZmYgLS1naXQgYS9SRUFETUUuYW5kcm9pZCBiL1JFQURNRS5hbmRyb2lkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNjAyZTEKLS0tIC9kZXYvbnVsbAorKysgYi9SRUFETUUuYW5kcm9pZApAQCAtMCwwICsxLDE0IEBACisKK1RoZSBzb3VyY2UgY29kZSBvZiBiaXNvbiAyLjcgd2FzIGRvd25sb2FkZWQgZnJvbSBodHRwOi8vZnRwLmdudS5vcmcvZ251L2Jpc29uLy4KKworVG8gYnVpbGQgaXQgd2l0aCB0aGUgQW5kcm9pZCBidWlsZCBzeXN0ZW0sIHdlIGFkZGVkIDIgc3ViZGlyZWN0b3JpZXMgZGFyd2luLWxpYgorYW5kIGxpbnV4LWxpYiwgYXMgd2VsbCBhcyBhbiBBbmRyb2lkLm1rLgorV2UgdXNlZCB0aGUgZm9sbG93aW5nIHN0ZXBzIHRvIGdlbmVyYXRlIHRoZSBBbmRyb2lkLm1rOgorMSkgT24gYSBNYWMgT1MgWCBtYWNoaW5lLCBydW4gLi9jb25maWd1cmUgYW5kIG1ha2UsIHlvdSdsbCBnZXQgYSBsaXN0IG9mCitnZW5lcmF0ZWQgaGVhZGVyIGZpbGVzIGZyb20gdGhlIGxvZy4gQ29weSB0aGVtIHRvIGRhcndpbi1saWI7IFlvdSBjYW4gYWxzbyBnZXQKK2EgbGlzdCBvZiBzb3VyY2UgZmlsZXMgZnJvbSB0aGUgbG9nLiBBZGQgdGhlbSB0byBMT0NBTF9TUkNfRklMRVMgaW4gdGhlCitBbmRyb2lkLm1rLgorMikgRG8gdGhlIHNhbWUgdGhpbmcgb24gYSBMaW51eCBtYWNoaW5lLgorMykgQ29tbWVudCBvdXQgdGhlIFBLR0lOQ0xVREVESVIgbGluZSBpbiBkYXJ3aW4tbGliL2NvbmZpZ21ha2UuaCBhbmQKK2xpbnV4LWxpYi9jb25maWdtYWtlLmgsIGJlY2F1c2Ugd2UnbGwgcGFzcyBpbiB0aGUgbWFjcm8gZnJvbSB0aGUgYnVpbGQgc3lzdGVtLgorNCkgRGVmaW5lIGxpYmJpc29uIGFuZCBiaXNvbiBpbiB0aGUgQW5kcm9pZC5tay4KZGlmZiAtLWdpdCBhL1RIQU5LUyBiL1RIQU5LUwppbmRleCBjMDA1ODBlLi45YTY0MDEyIDEwMDY0NAotLS0gYS9USEFOS1MKKysrIGIvVEhBTktTCkBAIC0xLDUyICsxLDgxIEBACiBCaXNvbiB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IFJvYmVydCBDb3JiZXR0LiAgSXQgd291bGQgbm90IGJlIHdoYXQKIGl0IGlzIHRvZGF5IHdpdGhvdXQgdGhlIGludmFsdWFibGUgaGVscCBvZiB0aGVzZSBwZW9wbGU6CiAKK9CQ0YHQutCw0YAg0KHQsNGE0LjQvSAgICAgICAgICAgICAgc2FmaW5hc2thckBtYWlsLnJ1CiBBaXJ5IEFuZHJlICAgICAgICAgICAgICAgIEFpcnkuQW5kcmVAZWRmLmZyCi1Ba2ltIERlbWFpbGxlICAgICAgICAgICAgIGFraW1AZnJlZWZyaWVuZHMub3JnCitBa2ltIERlbWFpbGxlICAgICAgICAgICAgIGFraW1AbHJkZS5lcGl0YS5mcgogQWxiZXJ0IENoaW4tQS1Zb3VuZyAgICAgICBjaGluYUB0aGV3cml0dGVud29yZC5jb20KIEFsZXhhbmRlciBCZWxvcG9sc2t5ICAgICAgYWxleGJAcmVudGVjLmNvbQotQWxleGFuZHJlIER1cmV0LUx1dHogICAgICBhZGxAc3JjLmxpcDYuZnIKK0FsZXhhbmRyZSBEdXJldC1MdXR6ICAgICAgYWRsQGxyZGUuZXBpdGEuZnIKIEFuZHJlYXMgU2Nod2FiICAgICAgICAgICAgc2Nod2FiQHN1c2UuZGUKIEFuZHJldyBTdWZmaWVsZCAgICAgICAgICAgYXN1ZmZpZWxkQHVzZXJzLnNvdXJjZWZvcmdlLm5ldAorQW5nZWxvIEJvcnNvdHRpICAgICAgICAgICBhbmdlbG8uYm9yc290dGlAZ21haWwuY29tCiBBbnRob255IEhlYWRpbmcgICAgICAgICAgIGFqcmhAYWpyaC5uZXQKIEFybm9sZCBSb2JiaW5zICAgICAgICAgICAgYXJub2xkQHNrZWV2ZS5jb20KIEFydCBIYWFzICAgICAgICAgICAgICAgICAgYWhhYXNAbmVvc29mdC5jb20KIEJhcm9uIFNjaHdhcnR6ICAgICAgICAgICAgYmFyb25Ac2VxdWVudC5vcmcKK0JlbiBQZmFmZiAgICAgICAgICAgICAgICAgYmxwQGNzLnN0YW5mb3JkLmVkdQogQmVub2l0IFBlcnJvdCAgICAgICAgICAgICBiZW5vaXQucGVycm90QGVwaXRhLmZyCitCZXJuZCBLaWVmZXIgICAgICAgICAgICAgIGtpZWZlckBkZmtpLmRlCiBCZXJ0IERla251eWR0ICAgICAgICAgICAgIEJlcnQuRGVrbnV5ZHRAZXNhdC5rdWxldXZlbi5hYy5iZQorQmlsbCBBbGxvbWJlcnQgICAgICAgICAgICBCaWxsLkFsbG9tYmVydEBtYXRoLnUtYm9yZGVhdXgxLmZyCitCb2IgUm9zc2kgICAgICAgICAgICAgICAgIGJvYkBicmFza28ubmV0CitCcmFuZG9uIEx1Y2lhICAgICAgICAgICAgIGJsdWNpYUBnbWFpbC5jb20KIEJydWNlIExpbGx5ICAgICAgICAgICAgICAgYmxpbGx5QGVyb2xzLmNvbQogQnJ1bm8gSGFpYmxlICAgICAgICAgICAgICBicnVub0BjbGlzcC5vcmcKIENoYXJsZXMtSGVucmkgZGUgQm95c3NvbiAgZGUtYm95X2NAZXBpdGEuZnIKK0NocmlzdGlhbiBCdXJnZXIgICAgICAgICAgY2J1cmdlckBzdW55c2IuZWR1CiBDcmlzIEJhaWxpZmYgICAgICAgICAgICAgIGMuYmFpbGlmZitiaXNvbkBhd2F5d2ViLmNvbQogQ3JpcyB2YW4gUGVsdCAgICAgICAgICAgICBjcmlzQGFtZjAzMDU0Lm9mZmljZS53eHMubmwKK0NzYWJhIFJhZHVseSAgICAgICAgICAgICAgY3NhYmFfMjJAeWFob28uY28udWsKK0RhZ29iZXJ0IE1pY2hlbHNlbiAgICAgICAgZGFtQGJhbHRpYy1vbmxpbmUuZGUKIERhbmllbCBIYWdlcnR5ICAgICAgICAgICAgaGFnQGdudS5vcmcKIERhdmlkIEouIE1hY0tlbnppZSAgICAgICAgZGptQGdudS5vcmcKLURlcmVrIE0uIEpvbmVzCSAgICAgICAgICBkZXJla0Brbm9zb2YuY28udWsKK0RhdmlkIEthc3RydXAgICAgICAgICAgICAgZGFrQGdudS5vcmcKK0Rlbm5pcyBDbGFya2UgICAgICAgICAgICAgZGNsYXJrZUBibGFzdHdhdmUub3JnCitEZXJlayBNLiBKb25lcyAgICAgICAgICAgIGRlcmVrQGtub3NvZi5jby51aworRGktYW4gSmFuICAgICAgICAgICAgICAgICBkaWFuakBmcmVlc2hlbGwub3JnCiBEaWNrIFN0cmVlZmxhbmQgICAgICAgICAgIGRpY2suc3RyZWVmbGFuZEBhbHRpdW0ubmwKK0RpZGllciBHb2RlZnJveSAgICAgICAgICAgZGdAdWx5c2l1bS5uZXQKIEVucmljbyBTY2hvbHogICAgICAgICAgICAgZW5yaWNvLnNjaG9sekBpbmZvcm1hdGlrLnR1LWNoZW1uaXR6LmRlCitFcmljIEJsYWtlICAgICAgICAgICAgICAgIGViYjlAYnl1Lm5ldAogRXZnZW55IFN0YW1idWxjaGlrICAgICAgICBmbmV2Z2VueUBwbGFzbWEtZ2F0ZS53ZWl6bWFubi5hYy5pbAogRmFicmljZSBCYXV6YWMgICAgICAgICAgICBub29uQGNvdGUtZGF6dXIuY29tCiBGbG9yaWFuIEtyb2htICAgICAgICAgICAgIGZsb3JpYW5AZWRhbWFpbC5maXNoa2lsbC5pYm0uY29tCiBGcmFuayBIZWNrZW5iYWNoICAgICAgICAgIGZyYW5rQGctbi11LmRlCitGcmFucyBFbmdsaWNoICAgICAgICAgICAgIGZyYW5zLmVuZ2xpY2hAdGVsaWEuY29tCitHZW9yZyBTYXV0aG9mZiAgICAgICAgICAgIGdzYXV0aG9mQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERQorR2VvcmdlIE5ldW5lciAgICAgICAgICAgICBnbmV1bmVyMkBjb21jYXN0Lm5ldAorR2lsbGVzIEVzcGluYXNzZSAgICAgICAgICBnLmVzcEBmcmVlLmZyCitHb3JhbiBVZGRlYm9yZyAgICAgICAgICAgIGdvZXJhbkB1ZGRlYm9yZy5zZQogR3VpZG8gVHJlbnRhbGFuY2lhICAgICAgICB0cmVudGFsZ0Bhc3Rvbi5hYy51awogSC4gTWVyaWpuIEJyYW5kICAgICAgICAgICBoLm0uYnJhbmRAaGNjbmV0Lm5sCiBIYW5zIEFiZXJnICAgICAgICAgICAgICAgIGhhYmVyZ0BtYXRlbWF0aWsuc3Uuc2UKIEphbiBOaWV1d2VuaHVpemVuICAgICAgICAgamFubmVrZUBnbnUub3JnCitKZXJyeSBRdWlubiAgICAgICAgICAgICAgIGpscXVpbm5Ab3B0b25saW5lLm5ldAogSmVzc2UgVGhpbG8gICAgICAgICAgICAgICBqdGhpbG9AZ251Lm9yZwogSmltIEtlbnQgICAgICAgICAgICAgICAgICBqa2VudEBhcmNoLnNlbC5zb255LmNvbQogSmltIE1leWVyaW5nICAgICAgICAgICAgICBqaW1AbWV5ZXJpbmcubmV0Ci1Kb2VsIEUuIERlbm55ICAgICAgICAgICAgIGpkZW5ueUBjZXMuY2xlbXNvbi5lZHUKLUp1YW4gTWFudWVsIEd1ZXJyZXJvICAgICAgU1QwMDE5MDZASFJaMS5IUlouVFUtRGFybXN0YWR0LkRlCitKb2VsIEUuIERlbm55ICAgICAgICAgICAgIGpvZWxkZW5ueUBqb2VsZGVubnkub3JnCitKb2hhbiB2YW4gU2Vsc3QgICAgICAgICAgIGpvaGFuc0BzdGFjay5ubAorSm9uYXRoYW4gRmFicml6aW8gICAgICAgICBqb25hdGhhbi5mYWJyaXppb0BscmRlLmVwaXRhLmZyCitKb25hdGhhbiBOaWVkZXIgICAgICAgICAgIGpybmllZGVyQGdtYWlsLmNvbQorSnVhbiBNYW51ZWwgR3VlcnJlcm8gICAgICBqdWFuLmd1ZXJyZXJvQGdteC5kZQogS2VlcyBaZWVsZW5iZXJnICAgICAgICAgICBremxnQHVzZXJzLnNvdXJjZWZvcmdlLm5ldAogS2VpdGggQnJvd25lICAgICAgICAgICAgICBrYnJvd25lQGxlZ2F0by5jb20KIExhdXJlbnQgTWFzY2hlcnBhICAgICAgICAgbGF1cmVudC5tYXNjaGVycGFAZXBpdGEuZnIKK0xpZSBZYW4gICAgICAgICAgICAgICAgICAgbGllLnlhbkBrYXVzdC5lZHUuc2EKIE1hZ251cyBGcm9tcmVpZGUgICAgICAgICAgbWFnZnJAbHlzYXRvci5saXUuc2UKIE1hcmMgQXV0cmV0ICAgICAgICAgICAgICAgYXV0cmV0X21AZXBpdGEuZnIKK01hcmMgTWVuZGlvbGEgICAgICAgICAgICAgbW1lbmRpb2xAdXNjLmVkdQorTWFyayBCb3lhbGwgICAgICAgICAgICAgICB3b2xmZWluc3RlaW5AZ21haWwuY29tCitNYXJ0aW4gSmFjb2JzICAgICAgICAgICAgIG1hcnRpbi5qYWNvYnNAYXJjb3IuZGUKIE1hcnRpbiBNb2tyZWpzICAgICAgICAgICAgbW1va3JlanNAbmF0dXIuY3VuaS5jegotTWFydGluIE55bGluCQkgIG1hcnRpbi5ueWxpbkBsaW51eG1haWwub3JnCitNYXJ0aW4gTnlsaW4gICAgICAgICAgICAgIG1hcnRpbi5ueWxpbkBsaW51eG1haWwub3JnCiBNYXR0IEtyYWFpICAgICAgICAgICAgICAgIGtyYWFpQGFsdW1uaS5jbXUuZWR1CiBNYXR0IFJvc2luZyAgICAgICAgICAgICAgIHJvc2luZ0BwZWFrZml2ZS5jb20KIE1pY2hhZWwgSGF5ZXMgICAgICAgICAgICAgbS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubnoKK01pY2hhZWwgUmFza2luICAgICAgICAgICAgN2M2ZjQzNGNAbWFpbC5ydQogTWlja2FlbCBMYWJhdSAgICAgICAgICAgICBsYWJhdV9tQGVwaXRhLmZyCiBNaWtlIENhc3RsZSAgICAgICAgICAgICAgIGRhbGdvZGFAaXgubmV0Y29tLmNvbQogTmVpbCBCb290aCAgICAgICAgICAgICAgICBOZWlsQkBlYXJ0aGxpbmcubmV0CkBAIC01NCwzNyArODMsNzYgQEAKIE5pY29sYXMgQnVycnVzICAgICAgICAgICAgbmljb2xhcy5idXJydXNAZXBpdGEuZnIKIE5pY29sYXMgVGlzc2VyYW5kICAgICAgICAgbmljb2xhcy50aXNzZXJhbmRAZXBpdGEuZnIKIE5vYWggRnJpZWRtYW4gICAgICAgICAgICAgZnJpZWRtYW5AZ251Lm9yZworT2RkIEFyaWxkIE9sc2VuICAgICAgICAgICBvYW9AZmlidWxhLm5vCiBPbGVnIFNtb2xza3kgICAgICAgICAgICAgIG9sZWcuc21vbHNreUBwYWNpZmljLXNpbXVsYXRvcnMuY28ubnoKK09sZWtzaWkgVGFyYW4gICAgICAgICAgICAgb2xla3NpaS50YXJhbkBnbWFpbC5jb20KK1Bhb2xvIEJvbnppbmkgICAgICAgICAgICAgYm9uemluaUBnbnUub3JnCiBQYXNjYWwgQmFydCAgICAgICAgICAgICAgIHBhc2NhbC5iYXJ0QGVwaXRhLmZyCiBQYXVsIEVnZ2VydCAgICAgICAgICAgICAgIGVnZ2VydEBjcy51Y2xhLmVkdQogUGF1bCBIaWxmaW5nZXIgICAgICAgICAgICBIaWxmaW5nZXJAQ1MuQmVya2VsZXkuRURVCiBQZXIgQWxsYW5zc29uICAgICAgICAgICAgIHBlckBhcHBnYXRlLmNvbQorUGV0ZXIgRWlzZW50cmF1dCAgICAgICAgICBwZXRlcl9lQGdteC5uZXQKIFBldGVyIEZhbGVzICAgICAgICAgICAgICAgcHNmYWxlc0BsdWNlbnQuY29tCiBQZXRlciBIYW1vcnNreSAgICAgICAgICAgIGhhbW9AdXBqcy5zaworUGV0ZXIgU2ltb25zICAgICAgICAgICAgICBzaW1vbnNAY3J5cC50bwogUGlvdHIgR2Fja2lld2ljeiAgICAgICAgICBnYWNla0BpbnRlcnRlbC5jb20ucGwKIFF1b2MgUGV5cm90ICAgICAgICAgICAgICAgY2hvamluQGxyZGUuZXBpdGEuZnIKIFIgQmxha2UgICAgICAgICAgICAgICAgICAgYmxha2Vyc0BtYWMuY29tCiBSYWphIFIgSGFyaW5hdGggICAgICAgICAgIGhhcmluYXRoQGNzLnVtbi5lZHUKK1JhbGYgV2lsZGVuaHVlcyAgICAgICAgICAgUmFsZi5XaWxkZW5odWVzQGdteC5kZQogUmljaGFyZCBTdGFsbG1hbiAgICAgICAgICBybXNAZ251Lm9yZworUm9iIFZlcm1hYXMgICAgICAgICAgICAgICByb2IudmVybWFhc0BnbWFpbC5jb20KIFJvYmVydCBBbmlza28gICAgICAgICAgICAgYW5pc2tvX3JAZXBpdGEuZnIKK1NhdHlhIEtpcmFuIFBvcHVyaSAgICAgICAgc2F0eWFraXJhbkBnbWFpbC5jb20KK1NlYmFzdGlhbiBTZXR6ZXIgICAgICAgICAgc2ViYXN0aWFuLnNldHplci5leHRAc2llbWVucy5jb20KK1NlYmFzdGllbiBGcmlja2VyICAgICAgICAgc2ViYXN0aWVuLmZyaWNrZXJAZ21haWwuY29tCitTZXJnZWkgU3Rlc2hlbmtvICAgICAgICAgIHNlcmdzdGVzaEB5YWhvby5jb20KIFNodXJhICAgICAgICAgICAgICAgICAgICAgZGViaWxfdXJvZEBuZ3MucnUKLVN0ZXZlIE11cnBoeQkJICBtdXJmQHBhcnNldHJlZS5jb20KK1N0ZWZhbm8gTGF0dGFyaW5pICAgICAgICAgc3RlZmFuby5sYXR0YXJpbmlAZ21haWwuY29tCitTdGV2ZSBNdXJwaHkgICAgICAgICAgICAgIG11cmZAcGFyc2V0cmVlLmNvbQorU3VtIFd1ICAgICAgICAgICAgICAgICAgICBzdW1AZ2Vla2hvdXNlLm9yZworVGjDqW9waGlsZSBSYW5xdWV0ICAgICAgICAgdGhlb3BoaWxlLnJhbnF1ZXRAZ21haWwuY29tCitUaGlydSBSYW1ha3Jpc2huYW4gICAgICAgIHRoaXJ1LnJhbWFrcmlzaG5hbkBnbWFpbC5jb20KIFRpbSBKb3NsaW5nICAgICAgICAgICAgICAgdGVqQG1lbGJwYy5vcmcuYXUKK1RpbSBMYW5kc2NoZWlkdCAgICAgICAgICAgdGltQHRpbS1sYW5kc2NoZWlkdC5kZQogVGltIFZhbiBIb2xkZXIgICAgICAgICAgICB0aW0udmFuLmhvbGRlckBwYW5kb3JhLmJlCiBUb20gTGFuZSAgICAgICAgICAgICAgICAgIHRnbEBzc3MucGdoLnBhLnVzCiBUb20gVHJvbWV5ICAgICAgICAgICAgICAgIHRyb21leUBjeWdudXMuY29tCi1Ub21teSBOb3JkZ3JlbgkJICB0b21teS5ub3JkZ3JlbkBjaGVsbG8uc2UKK1RvbW15IE5vcmRncmVuICAgICAgICAgICAgdG9tbXkubm9yZGdyZW5AY2hlbGxvLnNlCiBUcm95IEEuIEpvaG5zb24gICAgICAgICAgIHRyb3lqQGVjbi5wdXJkdWUuZWR1CitUeXMgTGVmZXJpbmcgICAgICAgICAgICAgIGdjY2Jpc29uQGdtYWlsLmNvbQogVmluIFNoZWx0b24gICAgICAgICAgICAgICBhY3NAYWx1bW5pLnByaW5jZXRvbi5lZHUKK1cuQy5BLiBXaWpuZ2FhcmRzICAgICAgICAgd291dGVyQE5MbmV0TGFicy5ubAogV2F5bmUgR3JlZW4gICAgICAgICAgICAgICB3YXluZUBpbmZvc2F2dnkuY29tCitXZWkgU29uZyAgICAgICAgICAgICAgICAgIHdzb25nODNAZ21haWwuY29tCitXb2xmZ2FuZyBTLiBLZWNoZWwgICAgICAgIHdvbGZnYW5nLmtlY2hlbEBwcnMuZGUKIFdvbGZyYW0gV2FnbmVyICAgICAgICAgICAgd3dAbXBpLXNiLm1wZy5kZQogV3dwICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRAZnJlZS5mcgogWmFjayBXZWluYmVyZyAgICAgICAgICAgICB6YWNrQGNvZGVzb3VyY2VyeS5jb20KLSAgICAgICAgICAgICAgICAgICAgICAgICAgdHdsZXZvQHhzNGFsbC5ubAogCiBNYW55IHBlb3BsZSBhcmUgbm90IG5hbWVkIGhlcmUgYmVjYXVzZSB3ZSBsb3N0IHRyYWNrIG9mIHRoZW0uICBXZQogdGhhbmsgdGhlbSEgIFBsZWFzZSwgaGVscCB1cyBrZWVwaW5nIHRoaXMgbGlzdCB1cCB0byBkYXRlLgogCiBMb2NhbCBWYXJpYWJsZXM6CiBtb2RlOiB0ZXh0Citjb2Rpbmc6IHV0Zi04CiBFbmQ6CisKKy0tLS0tCisKK0NvcHlyaWdodCAoQykgMjAwMC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBQYXJzZXIgR2VuZXJhdG9yLgorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCmRpZmYgLS1naXQgYS9UT0RPIGIvVE9ETwppbmRleCA3NmNhNzM2Li45NzhiNWM2IDEwMDY0NAotLS0gYS9UT0RPCisrKyBiL1RPRE8KQEAgLTEsMzMgKzEsMTU2IEBACi0tKi0gb3V0bGluZSAtKi0KKyogU2hvcnQgdGVybQorKiogR3JhcGh2aXogZGlzcGxheSBjb2RlIHRob3VnaHRzCitUaGUgY29kZSBmb3IgdGhlIC0tZ3JhcGggb3B0aW9uIGlzIG92ZXIgdHdvIGZpbGVzOiBwcmludF9ncmFwaCwgYW5kCitncmFwaHZpei4gSSBiZWxpZXZlIHRoaXMgaXMgYmVjYXVzZSBCaXNvbiB1c2VkIHRvIGFsc28gcHJvZHVjZSBWQ0cgZ3JhcGhzLAorYnV0IHNpbmNlIHRoaXMgaXMgbm8gbG9uZ2VyIHRydWUsIG1heWJlIHdlIGNvdWxkIGNvbnNpZGVyIHRoZXNlIGZpbGVzIGZvcgorZnVzaW9uLgogCi0qIEhlYWRlciBndWFyZHMKK0xpdHRsZSBlZmZvcnQgZmFjdG9yaW5nIHNlZW1zIHRvIGhhdmUgYmVlbiBnaXZlbiB0byBmYWN0b3JpbmcgaW4gdGhlc2UgZmlsZXMsCithbmQgdGhlaXIgcHJpbnQteG1sIGFuZCBwcmludCBjb3VudGVycGFydC4gV2Ugd291bGQgdmVyeSBtdWNoIGxpa2UgdG8gcmUtdXNlCit0aGUgcHJldHR5IGZvcm1hdCBvZiBzdGF0ZXMgZnJvbSAub3V0cHV0IGluIHRoZSAuZG90CiAKLUZyb20gRnJhbmMsb2lzOiBzaG91bGQgd2Uga2VlcCB0aGUgZGlyZWN0b3J5IHBhcnQgaW4gdGhlIENQUCBndWFyZD8KK0Fsc28sIHRoZSB1bmRlcnNjb3JlIGluIHByaW50X2dyYXBoLltjaF0gaXNuJ3QgdmVyeSBmaXR0aW5nIGNvbnNpZGVyaW5nCit0aGUgZGFzaGVzIGluIHRoZSBvdGhlciBmaWxlbmFtZXMuCisKKyoqIFZhcmlhYmxlIG5hbWVzLgorV2hhdCBzaG91bGQgd2UgbmFtZSBgdmFyaWFudCcgYW5kIGBsZXhfc3ltYm9sJz8KKworKiogVXNlIGI0X3N5bWJvbCBpbiBhbGwgdGhlIHNrZWxldG9uCitNb3ZlIGl0cyBkZWZpbml0aW9uIGluIHRoZSBtb3JlIHN0YW5kYXJkIHBsYWNlcyBhbmQgZGVwbG95IGl0IGluIG90aGVyCitza2VsZXRvbnMuICBUaGVuIHJlbW92ZSB0aGUgb2xkZXIgc3lzdGVtLCBpbmNsdWRpbmcgdGhlIHRhYmxlcworZ2VuZXJhdGVkIGJ5IG91dHB1dC5jCisKKyoqIFVwZGF0ZSB0aGUgZG9jdW1lbnRhdGlvbiBvbiBnbnUub3JnCisKKyoqIEdldCByaWQgb2YgZmFrZSAjbGluZXMgW0Jpc29uOiAuLi5dCitQb3NzaWJseSBhcyBzaW1wbGUgYXMgY2hlY2tpbmcgd2hldGhlciB0aGUgY29sdW1uIG51bWJlciBpcyBub25uZWdhdGl2ZS4KKworSSBoYXZlIHNlZW4gbWVzc2FnZXMgbGlrZSB0aGUgZm9sbG93aW5nIGZyb20gR0NDLgorCis8YnVpbHQtaW4+OjA6IGZhdGFsIGVycm9yOiBvcGVuaW5nIGRlcGVuZGVuY3kgZmlsZSAuZGVwcy9saWJsdGRsL2FyZ3ouVHBvOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CiAKIAotKiBZYWNjLmM6IENQUCBNYWNyb3MKKyoqIERpc2N1c3MgYWJvdXQgJXByaW50ZXIvJWRlc3Ryb3kgaW4gdGhlIGNhc2Ugb2YgQysrLgorSXQgd291bGQgYmUgdmVyeSBuaWNlIHRvIHByb3ZpZGUgdGhlIHN5bWJvbCBjbGFzc2VzIHdpdGggYW4gb3BlcmF0b3I8PAorYW5kIGEgZGVzdHJ1Y3Rvci4gIFVuZm9ydHVuYXRlbHkgdGhlIHN5bnRheCB3ZSBoYXZlIGNob3NlbiBmb3IKKyVkZXN0cm95IGFuZCAlcHJpbnRlciBtYWtlIHRoZW0gaGFyZCB0byByZXVzZS4gIEZvciBpbnN0YW5jZSwgdGhlIHVzZXIKK2lzIGludml0ZWQgdG8gd3JpdGUgc29tZXRoaW5nIGxpa2UKIAotRG8gc29tZSBwZW9wbGUgdXNlIFlZUFVSRSwgWVlMU1BfTkVFREVEIGxpa2Ugd2UgZG8gaW4gdGhlIHRlc3Qgc3VpdGU/Ci1UaGV5IHNob3VsZCBub3Q6IGl0IGlzIG5vdCBkb2N1bWVudGVkLiAgQnV0IGlmIHRoZXkgbmVlZCB0bywgbGV0J3MKLWZpbmQgc29tZXRoaW5nIGNsZWFuIChub3QgbGlrZSBZWUxTUF9ORUVERUQuLi4pLgorICAgJXByaW50ZXIgeyBkZWJ1Z19zdHJlYW0oKSA8PCAkJDsgfSA8bXlfdHlwZT47CisKK3doaWNoIGlzIGhhcmQgdG8gcmV1c2UgZWxzZXdoZXJlIHNpbmNlIGl0IHdhbnRzIHRvIHVzZQorImRlYnVnX3N0cmVhbSgpIiB0byBmaW5kIHRoZSBzdHJlYW0gdG8gdXNlLiAgVGhlIHNhbWUgYXBwbGllcyB0bworJWRlc3Ryb3k6IHdlIHRvbGQgdGhlIHVzZXIgc2hlIGNvdWxkIHVzZSB0aGUgbWVtYmVycyBvZiB0aGUgUGFyc2VyCitjbGFzcyBpbiB0aGUgcHJpbnRlcnMvZGVzdHJ1Y3RvcnMsIHdoaWNoIGlzIG5vdCBnb29kIGZvciBhbiBvcGVyYXRvcjw8CitzaW5jZSBpdCBpcyBubyBsb25nZXIgYm91bmQgdG8gYSBwYXJ0aWN1bGFyIHBhcnNlciwgaXQncyBqdXN0IGEKKyhzdGFuZGFsb25lIHN5bWJvbCkuCisKKyoqIFJlbmFtZSBMUjAuY2MKK2FzIGxyMC5jYywgd2h5IHVwcGVyIGNhc2U/CisKKyoqIGJlbmNoIHNldmVyYWwgYmlzb25zLgorRW5oYW5jZSBiZW5jaC5wbCB3aXRoICViIHRvIHJ1biBkaWZmZXJlbnQgYmlzb25zLgorCisqIFZhcmlvdXMKKyoqIFdhcm5pbmdzCitXYXJuaW5ncyBhYm91dCB0eXBlIHRhZ3MgdGhhdCBhcmUgdXNlZCBpbiBwcmludGVyIGFuZCBkdG9ycywgYnV0IG5vdAorZm9yIHN5bWJvbHM/CisKKyoqIFlZRVJSQ09ERQorRGVmaW5lZCB0byAyNTYsIGJ1dCBub3QgdXNlZCwgbm90IGRvY3VtZW50ZWQuICBQcm9iYWJseSB0aGUgdG9rZW4KK251bWJlciBmb3IgdGhlIGVycm9yIHRva2VuLCB3aGljaCBQT1NJWCB3YW50cyB0byBiZSAyNTYsIGJ1dCB3aGljaAorQmlzb24gbWlnaHQgcmVudW1iZXIgaWYgdGhlIHVzZXIgdXNlZCBudW1iZXIgMjU2LiAgS2VlcCBmaXggYW5kIGRvYz8KK1Rocm93IGF3YXk/CisKK0Fsc28sIHdoeSBkb24ndCB3ZSBvdXRwdXQgdGhlIHRva2VuIG5hbWUgb2YgdGhlIGVycm9yIHRva2VuIGluIHRoZQorb3V0cHV0PyAgSXQgaXMgZXhwbGljaXRseSBza2lwcGVkOgorCisgICAgICAvKiBTa2lwIGVycm9yIHRva2VuIGFuZCB0b2tlbnMgd2l0aG91dCBpZGVudGlmaWVyLiAgKi8KKyAgICAgIGlmIChzeW0gIT0gZXJydG9rZW4gJiYgaWQpCisKK09mIGNvdXJzZSB0aGVyZSBhcmUgaXNzdWVzIHdpdGggbmFtZSBzcGFjZXMsIGJ1dCBpZiB3ZSBkaXNhYmxlIHdlIGhhdmUKK3NvbWV0aGluZyB3aGljaCBzZWVtcyB0byBiZSBtb3JlIHNpbXBsZXIgYW5kIG1vcmUgY29uc2lzdGVudCBpbnN0ZWFkCitvZiB0aGUgc3BlY2lhbCBjYXNlIFlZRVJSQ09ERS4KKworICAgZW51bSB5eXRva2VudHlwZSB7CisgICAgIGVycm9yID0gMjU2LAorICAgICAvLyAuLi4KKyAgIH07CiAKIAotKiBEb2N1bWVudGF0aW9uCi1CZWZvcmUgcmVsZWFzaW5nLCBtYWtlIHN1cmUgdGhlIGRvY3VtZW50YXRpb24gKCJVbmRlcnN0YW5kaW5nIHlvdXIKLXBhcnNlciIpIHJlZmVycyB0byB0aGUgY3VycmVudCBgb3V0cHV0JyBmb3JtYXQuCitXZSBjb3VsZCAoc2hvdWxkPykgYWxzbyB0cmVhdCB0aGUgY2FzZSBvZiB0aGUgdW5kZWZfdG9rZW4sIHdoaWNoIGlzCitudW1iZXJlZCAyNTcgZm9yIHl5bGV4LCBhbmQgMiBpbnRlcm5hbC4gIEJvdGggYXBwZWFyIGZvciBpbnN0YW5jZSBpbgordG9rbnVtOgogCi0qIGxhbHIxLmNjCi0qKiB2ZWN0b3IKLU1vdmUgdG8gdXNpbmcgdmVjdG9yLCBkcm9wIHN0YWNrLmhoLgorICBjb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQKKyAgcGFyc2VyOjp5eXRva2VuX251bWJlcl9bXSA9CisgIHsKKyAgICAgICAwLCAgIDI1NiwgICAyNTcsICAgMjU4LCAgIDI1OSwgICAyNjAsICAgMjYxLCAgIDI2MiwgICAyNjMsICAgMjY0LAogCi0qKiBJMThuCi1DYXRjaCB1cCB3aXRoIHlhY2MuYy4KK3doaWxlIGhlcmUKKworICAgZW51bSB5eXRva2VudHlwZSB7CisgICAgIFRPS19FT0YgPSAwLAorICAgICBUT0tfRVEgPSAyNTgsCisKK3NvIGJvdGggMjU2IGFuZCAyNTcgYXJlICJteXN0ZXJpb3VzIi4KKworICBjb25zdCBjaGFyKgorICBjb25zdCBwYXJzZXI6Onl5dG5hbWVfW10gPQorICB7CisgICJcImVuZCBvZiBjb21tYW5kXCIiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJcIj1cIiIsICJcImJyZWFrXCIiLAorCisKKyoqIFlZRkFJTAorSXQgaXMgc2VlbXMgdG8gYmUgKnJlYWxseSogb2Jzb2xldGUgbm93LCBzaGFsbCB3ZSByZW1vdmUgaXQ/CisKKyoqIHl5Y2hhciA9PSB5eWVtcHR5XworVGhlIGNvZGUgaW4geXllcnJsYWIgcmVhZHM6CisKKyAgICAgIGlmICh5eWNoYXIgPD0gWVlFT0YpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBSZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQuICAqLworICAgICAgICAgIGlmICh5eWNoYXIgPT0gWVlFT0YpCisgICAgICAgICAgICBZWUFCT1JUOworICAgICAgICB9CisKK1RoZXJlIGFyZSBvbmx5IHR3byB5eWNoYXIgdGhhdCBjYW4gYmUgPD0gWVlFT0Y6IFlZRU1QVFkgYW5kIFlZRU9GLgorQnV0IEkgY2FuJ3QgcHJvZHVjZSB0aGUgc2l0dWF0aW9uIHdoZXJlIHl5Y2hhciBpcyBZWUVNUFRZIGhlcmUsIGlzIGl0CityZWFsbHkgcG9zc2libGU/ICBUaGUgdGVzdCBzdWl0ZSBkb2VzIG5vdCBleGVyY2lzZSB0aGlzIGNhc2UuCisKK1RoaXMgc2hvd3MgdGhhdCBpdCB3b3VsZCBiZSBpbnRlcmVzdGluZyB0byBtYW5hZ2UgdG8gaW5zdGFsbCBza2VsZXRvbgorY292ZXJhZ2UgYW5hbHlzaXMgdG8gdGhlIHRlc3Qgc3VpdGUuCisKKyoqIFRhYmxlIGRlZmluaXRpb25zCitJdCBzaG91bGQgYmUgdmVyeSBlYXN5IHRvIGZhY3RvciB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgdmFyaW91cyB0YWJsZXMsCitpbmNsdWRpbmcgdGhlIHNlcGFyYXRpb24gYncgZGVjbGFyYXRpb24gYW5kIGRlZmluaXRpb24uICBTZWUgZm9yCitpbnN0YW5jZSBiNF90YWJsZV9kZWZpbmUgaW4gbGFscjEuY2MuICBUaGlzIHdheSwgd2UgY291bGQgZXZlbiBmYWN0b3IKK0MgdnMuIEMrKyBkZWZpbml0aW9ucy4KKworKiBGcm9tIGxhbHIxLmNjIHRvIHlhY2MuYworKiogU2luZ2xlIHN0YWNrCitNZXJnaW5nIHRoZSB0aHJlZSBzdGFja3MgaW4gbGFscjEuY2Mgc2ltcGxpZmllZCB0aGUgY29kZSwgcHJvbXB0ZWQgZm9yCitvdGhlciBpbXByb3ZlbWVudHMgYW5kIGFsc28gbWFkZSBpdCBmYXN0ZXIgKHByb2JhYmx5IGJlY2F1c2UgbWVtb3J5CittYW5hZ2VtZW50IGlzIHBlcmZvcm1lZCBvbmNlIGluc3RlYWQgb2YgdGhyZWUgdGltZXMpLiAgSSBzdWdnZXN0IHRoYXQKK3dlIGRvIHRoZSBzYW1lIGluIHlhY2MuYy4KKworKiogeXlzeW50YXhfZXJyb3IKK1RoZSBjb2RlIGJ3IGdsci5jIGFuZCB5YWNjLmMgaXMgcmVhbGx5IGFsaWtlLCB3ZSBjYW4gY2VydGFpbmx5IGZhY3Rvcgorc29tZSBwYXJ0cy4KKwogCiAqIFJlcG9ydAogCisqKiBGaWd1cmVzCitTb21lIHN0YXRpc3RpY3MgYWJvdXQgdGhlIGdyYW1tYXIgYW5kIHRoZSBwYXJzZXIgd291bGQgYmUgdXNlZnVsLAorZXNwZWNpYWxseSB3aGVuIGFza2luZyB0aGUgdXNlciB0byBzZW5kIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCitncmFtbWFycyBzaGUgaXMgd29ya2luZyBvbi4gIFdlIHNob3VsZCBwcm9iYWJseSBhbHNvIGluY2x1ZGUgc29tZQoraW5mb3JtYXRpb24gYWJvdXQgdGhlIHZhcmlhYmxlcyAoSSdtIG5vdCBzdXJlIGZvciBpbnN0YW5jZSB3ZSBldmVuCitzcGVjaWZ5IHdoYXQgTFIgdmFyaWFudCB3YXMgdXNlZCkuCisKICoqICBHTFIKIEhvdyB3b3VsZCBQYXVsIGxpa2UgdG8gZGlzcGxheSB0aGUgY29uZmxpY3RlZCBhY3Rpb25zPyAgSW4gcGFydGljdWxhciwKLXdoYXQgd2hlbiB0d28gcmVkdWN0aW9ucyBhcmUgcG9zc2libGUgb24gYSBnaXZlbiBsb29rLWFoZWFkIHRva2VuLCBidXQgb25lIGlzCit3aGF0IHdoZW4gdHdvIHJlZHVjdGlvbnMgYXJlIHBvc3NpYmxlIG9uIGEgZ2l2ZW4gbG9va2FoZWFkIHRva2VuLCBidXQgb25lIGlzCiBwYXJ0IG9mICRkZWZhdWx0LiAgU2hvdWxkIHdlIG1ha2UgdGhlIHR3byByZWR1Y3Rpb25zIGV4cGxpY2l0LCBvciBqdXN0CiBrZWVwICRkZWZhdWx0PyAgU2VlIHRoZSBmb2xsb3dpbmcgcG9pbnQuCiAKQEAgLTQ3LDM5ICsxNzAsMTcgQEAKIGEgc2FtcGxlIHRleHQgZXhoaWJpdGluZyB0aGUgKExBTFIpIGFtYmlndWl0eS4gIFNlZSB0aGUgcGFwZXIgZnJvbQogRGVSZW1lciBhbmQgUGVuZWxsbzogdGhleSBhbHJlYWR5IHByb3ZpZGUgdGhlIGFsZ29yaXRobS4KIAorKiogU3RhdGljYWxseSBjaGVjayBmb3IgcG90ZW50aWFsIGFtYmlndWl0aWVzIGluIEdMUiBncmFtbWFycy4gIFNlZQorPGh0dHA6Ly93d3cuaTNzLnVuaWNlLmZyL35zY2htaXR6L3BhcGVycy5odG1sI2V4cGFtYj4gZm9yIGFuIGFwcHJvYWNoLgorCiAKICogRXh0ZW5zaW9ucwogCi0qKiBMYWJlbGluZyB0aGUgc3ltYm9scwotSGF2ZSBhIGxvb2sgYXQgdGhlIExlbW9uIHBhcnNlciBnZW5lcmF0b3I6IGluc3RlYWQgb2YgJDEsICQyIGV0Yy4gdGhleQotY2FuIG5hbWUgdGhlIHZhbHVlcy4gIFRoaXMgaXMgbXVjaCBtb3JlIHBsZWFzYW50LiAgRm9yIGluc3RhbmNlOgotCi0gICAgICAgZXhwIChyZXMpOiBleHAgKGEpICcrJyBleHAgKGIpIHsgJHJlcyA9ICRhICsgJGI7IH07Ci0KLUkgbG92ZSB0aGlzLiAgSSBoYXZlIGJlZW4gYml0dGVuIHRvbyBvZnRlbiBieSB0aGUgcmVtb3ZhbCBvZiB0aGUKLXN5bWJvbCwgYW5kIGZvcmdldHRpbmcgdG8gc2hpZnQgYWxsIHRoZSAkbiB0byAkbi0xLiAgSWYgeW91IGFyZQotdW5sdWNreSwgaXQgY29tcGlsZXMuLi4KLQotQnV0IGluc3RlYWQgb2YgdXNpbmcgJGEgZXRjLiwgd2UgY2FuIHVzZSByZWd1bGFyIHZhcmlhYmxlcy4gIEFuZAotaW5zdGVhZCBvZiB1c2luZyAoKSwgSSBwcm9wb3NlIHRvIHVzZSBgOicgKGFnYWluKS4gIFBhdWwgc3VnZ2VzdHMKLXN1cHBvcnRpbmcgYC0+JyBpbiBhZGRpdGlvbiB0byBgOicgdG8gc2VwYXJhdGUgTEhTIGFuZCBSSFMuIEluIG90aGVyCi13b3JkczoKLQotICAgICAgIHI6ZXhwIC0+IGE6ZXhwICcrJyBiOmV4cCB7IHIgPSBhICsgYjsgfTsKLQotVGhhdCByZXF1aXJlcyBhbiBzaWduaWZpY2FudCBpbXByb3ZlbWVudCBvZiB0aGUgZ3JhbW1hciBwYXJzZXIuICBVc2luZwotR0xSIHdvdWxkIGJlIG5pY2UuICBJdCBhbHNvIHJlcXVpcmVzIHRoYXQgQmlzb24ga25vdyB0aGUgdHlwZSBvZiB0aGUKLXN5bWJvbHMgKHdoaWNoIHdpbGwgYmUgdXNlZnVsIGZvciAlaW5jbHVkZSBhbnl3YXkpLiAgU28gd2UgaGF2ZSBzb21lCi10aW1lIGJlZm9yZS4uLgotCi1Ob3RlIHRoYXQgdGhlcmUgcmVtYWlucyB0aGUgcHJvYmxlbSBvZiBsb2NhdGlvbnM6IGBAcic/Ci0KLQogKiogJC0xCiBXZSBzaG91bGQgZmluZCBhIG1lYW5zIHRvIHByb3ZpZGUgYW4gYWNjZXNzIHRvIHZhbHVlcyBkZWVwIGluIHRoZQogc3RhY2suICBGb3IgaW5zdGFuY2UsIGluc3RlYWQgb2YKIAotCWJhejogcXV4IHsgJCQgPSAkPGZvbz4tMSArICQ8YmFyPjAgKyAkMTsgfQorICAgICAgICBiYXo6IHF1eCB7ICQkID0gJDxmb28+LTEgKyAkPGJhcj4wICsgJDE7IH0KIAogd2Ugc2hvdWxkIGJlIGFibGUgdG8gaGF2ZToKIApAQCAtOTQsOSArMTk1LDYgQEAKIHBhcnQgb2YgJWlmLiAgQWtpbSBEZW1haWxsZSB0aGlua3MgaXQgc2hvdWxkIGJlIGluIHRoZSBwYXJzZXIsIHNvIGFzCiB0byBhdm9pZCBmYWxsaW5nIGludG8gYW5vdGhlciBDUFAgbWlzdGFrZS4KIAotKiogLUQsIC0tZGVmaW5lLW11c2NsZSBOQU1FPVZBTFVFCi1UbyBkZWZpbmUgbXVzY2xlcyB2aWEgY2xpLiAgT3IgbWF5YmUgc3VwcG9ydCBkaXJlY3RseSBOQU1FPVZBTFVFPwotCiAqKiBYTUwgT3V0cHV0CiBUaGVyZSBhcmUgY291cGxlIG9mIGF2YWlsYWJsZSBleHRlbnNpb25zIG9mIEJpc29uIHRhcmdldGluZyBzb21lIFhNTAogb3V0cHV0LiAgU29tZSBkYXkgd2Ugc2hvdWxkIGNvbnNpZGVyIGluY2x1ZGluZyB0aGVtLiAgT25lIGlzc3VlIGlzCkBAIC0xMTUsMTMgKzIxMywxMyBAQAogKiBVbml0IHJ1bGVzCiBNYXliZSB3ZSBjb3VsZCBleHBhbmQgdW5pdCBydWxlcywgaS5lLiwgdHJhbnNmb3JtCiAKLQlleHA6IGFyaXRoIHwgYm9vbDsKLQlhcml0aDogZXhwICcrJyBleHA7Ci0JYm9vbDogZXhwICcmJyBleHA7CisgICAgICAgIGV4cDogYXJpdGggfCBib29sOworICAgICAgICBhcml0aDogZXhwICcrJyBleHA7CisgICAgICAgIGJvb2w6IGV4cCAnJicgZXhwOwogCiBpbnRvCiAKLQlleHA6IGV4cCAnKycgZXhwIHwgZXhwICcmJyBleHA7CisgICAgICAgIGV4cDogZXhwICcrJyBleHAgfCBleHAgJyYnIGV4cDsKIAogd2hlbiB0aGVyZSBhcmUgbm8gYWN0aW9ucy4gIFRoaXMgY2FuIHNpZ25pZmljYW50bHkgc3BlZWQgdXAgc29tZQogZ3JhbW1hcnMuICBJIGNhbid0IGZpbmQgdGhlIHBhcGVycy4gIEluIHBhcnRpY3VsYXIgdGhlIGJvb2sgYExSCkBAIC0xMzcsODAgKzIzNSwzMCBAQAogU29tZSBoaXN0b3J5IG9mIEJpc29uIGFuZCBzb21lIGJpYmxpb2dyYXBoeSB3b3VsZCBiZSBtb3N0IHdlbGNvbWUuCiBBcmUgdGhlcmUgYW55IFRleGluZm8gc3RhbmRhcmRzIGZvciBiaWJsaW9ncmFwaHk/CiAKLQotCi0qIEphdmEsIEZvcnRyYW4sIGV0Yy4KLQotCi0qKiBKYXZhCi0KLVRoZXJlIGFyZSBhIGNvdXBsZSBvZiBwcm9wb3NlZCBvdXRwdXRzOgotCi0tIEJZQUNDL0oKLSAgd2hpY2ggaXMgYmFzZWQgb24gQnlhY2MuCi0gIDxodHRwOi8vdHJvaS5saW5jb20tYXNnLmNvbS9+cmphbWlzb24vYnlhY2MvPgotCi0tIEJpc29uIEphdmEKLSAgd2hpY2ggaXMgYmFzZWQgb24gQmlzb24uCi0gIDxodHRwOi8vd3d3LmdvaWNlLmNvLmpwL21lbWJlci9tby9oYWNrLXByb2dzL2Jpc29uLWphdmEuaHRtbD4KLQotU2ViYXN0aWVuIFNlcnJ1cmllciAoc2VycnVyX3NAZXBpdGEuZnIpIGlzIHdvcmtpbmcgb24gdGhpczogaGUgaXMKLWV4cGVjdGVkIHRvIGNvbnRhY3QgdGhlIGF1dGhvcnMsIGRlc2lnbiB0aGUgb3V0cHV0LCBhbmQgaW1wbGVtZW50IGl0Ci1pbnRvIEJpc29uLgotCi0KICogQ29kaW5nIHN5c3RlbSBpbmRlcGVuZGVuY2UKIFBhdWwgbm90ZXM6CiAKLQlDdXJyZW50bHkgQmlzb24gYXNzdW1lcyA4LWJpdCBieXRlcyAoaS5lLiB0aGF0IFVDSEFSX01BWCBpcwotCTI1NSkuICBJdCBhbHNvIGFzc3VtZXMgdGhhdCB0aGUgOC1iaXQgY2hhcmFjdGVyIGVuY29kaW5nIGlzCi0JdGhlIHNhbWUgZm9yIHRoZSBpbnZvY2F0aW9uIG9mICdiaXNvbicgYXMgaXQgaXMgZm9yIHRoZQotCWludm9jYXRpb24gb2YgJ2NjJywgYnV0IHRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5IHRydWUgd2hlbgotCXBlb3BsZSBydW4gYmlzb24gb24gYW4gQVNDSUkgaG9zdCBhbmQgdGhlbiB1c2UgY2Mgb24gYW4gRUJDRElDCi0JaG9zdC4gIEkgZG9uJ3QgdGhpbmsgdGhlc2UgdG9waWNzIGFyZSB3b3J0aCBvdXIgdGltZQotCWFkZHJlc3NpbmcgKHVubGVzcyB3ZSBmaW5kIGEgZ3VuZy1obyB2b2x1bnRlZXIgZm9yIEVCQ0RJQyBvcgotCVBEUC0xMCBwb3J0cyA6LSkgYnV0IHRoZXkgc2hvdWxkIHByb2JhYmx5IGJlIGRvY3VtZW50ZWQKLQlzb21ld2hlcmUuCisgICAgICAgIEN1cnJlbnRseSBCaXNvbiBhc3N1bWVzIDgtYml0IGJ5dGVzIChpLmUuIHRoYXQgVUNIQVJfTUFYIGlzCisgICAgICAgIDI1NSkuICBJdCBhbHNvIGFzc3VtZXMgdGhhdCB0aGUgOC1iaXQgY2hhcmFjdGVyIGVuY29kaW5nIGlzCisgICAgICAgIHRoZSBzYW1lIGZvciB0aGUgaW52b2NhdGlvbiBvZiAnYmlzb24nIGFzIGl0IGlzIGZvciB0aGUKKyAgICAgICAgaW52b2NhdGlvbiBvZiAnY2MnLCBidXQgdGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgdHJ1ZSB3aGVuCisgICAgICAgIHBlb3BsZSBydW4gYmlzb24gb24gYW4gQVNDSUkgaG9zdCBhbmQgdGhlbiB1c2UgY2Mgb24gYW4gRUJDRElDCisgICAgICAgIGhvc3QuICBJIGRvbid0IHRoaW5rIHRoZXNlIHRvcGljcyBhcmUgd29ydGggb3VyIHRpbWUKKyAgICAgICAgYWRkcmVzc2luZyAodW5sZXNzIHdlIGZpbmQgYSBndW5nLWhvIHZvbHVudGVlciBmb3IgRUJDRElDIG9yCisgICAgICAgIFBEUC0xMCBwb3J0cyA6LSkgYnV0IHRoZXkgc2hvdWxkIHByb2JhYmx5IGJlIGRvY3VtZW50ZWQKKyAgICAgICAgc29tZXdoZXJlLgogCi0JTW9yZSBpbXBvcnRhbnRseSwgQmlzb24gZG9lcyBub3QgY3VycmVudGx5IGFsbG93IE5VTCBieXRlcyBpbgotCXRva2VucywgZWl0aGVyIHZpYSBlc2NhcGVzIChlLmcuLCAieFwweSIpIG9yIHZpYSBhIE5VTCBieXRlIGluCi0JdGhlIHNvdXJjZSBjb2RlLiAgVGhpcyBzaG91bGQgZ2V0IGZpeGVkLgorICAgICAgICBNb3JlIGltcG9ydGFudGx5LCBCaXNvbiBkb2VzIG5vdCBjdXJyZW50bHkgYWxsb3cgTlVMIGJ5dGVzIGluCisgICAgICAgIHRva2VucywgZWl0aGVyIHZpYSBlc2NhcGVzIChlLmcuLCAieFwweSIpIG9yIHZpYSBhIE5VTCBieXRlIGluCisgICAgICAgIHRoZSBzb3VyY2UgY29kZS4gIFRoaXMgc2hvdWxkIGdldCBmaXhlZC4KIAogKiAtLWdyYXBoCiBTaG93IHJlZHVjdGlvbnMuCiAKICogQnJva2VuIG9wdGlvbnMgPwotKiogJW5vLXBhcnNlcgogKiogJXRva2VuLXRhYmxlCiAqKiBTa2VsZXRvbiBzdHJhdGVneQotTXVzdCB3ZSBrZWVwICVuby1wYXJzZXI/ICAldG9rZW4tdGFibGU/Ci0KLSogc3JjL3ByaW50X2dyYXBoLmMKLUZpbmQgdGhlIGJlc3QgZ3JhcGggcGFyYW1ldGVycy4KLQotKiBCVFlhY2MKLVNlZSBpZiB3ZSBjYW4gaW50ZWdyYXRlIGJhY2t0cmFja2luZyBpbiBCaXNvbi4gIENoYXJsZXMtSGVucmkgZGUKLUJveXNzb24gPGRlLWJveV9jQGVwaXRhLmZyPiBpcyB3b3JraW5nIG9uIHRoaXMsIGFuZCBhbHJlYWR5IGhhcyBzb21lCi1yZXN1bHRzLiAgVmFkaW0gTWFzbG93LCB0aGUgbWFpbnRhaW5lciBvZiBCVFlhY2Mgd2FzIGNvbnRhY3RlZCwgYW5kIHdlCi1zdGF5IGluIHRvdWNoIHdpdGggaGltLiAgQWRqdXN0aW5nIHRoZSBCaXNvbiBncmFtbWFyIHBhcnNlciB3aWxsIGJlCi1uZWVkZWQgdG8gc3VwcG9ydCBzb21lIGV4dHJhIEJUWWFjYyBmZWF0dXJlcy4gIFRoaXMgaXMgbGVzcyB1cmdlbnQuCi0KLSoqIEtlZXBpbmcgdGhlIGNvbmZsaWN0ZWQgYWN0aW9ucwotRmlyc3QsIGFuYWx5emUgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gYnlhY2MgYW5kIGJ0eWFjYyAoSSdtIHJlZmVycmluZwotdG8gdGhlIGV4ZWN1dGFibGVzKS4gIEZpbmQgd2hlcmUgdGhlIGNvbmZsaWN0cyBhcmUgcHJlc2VydmVkLgotCi0qKiBDb21wYXJlIHdpdGggdGhlIEdMUiB0YWJsZXMKLVNlZSBob3cgaXNvbW9ycGhpYyB0aGUgd2F5IEJUWWFjYyBhbmQgdGhlIHdheSB0aGUgR0xSIGFkanVzdG1lbnRzIGluCi1CaXNvbiBhcmUgY29tcGF0aWJsZS4gICpBcyBtdWNoIGFzIHBvc3NpYmxlKiBvbmUgc2hvdWxkIHRyeSB0byB1c2UgdGhlCi1zYW1lIGltcGxlbWVudGF0aW9uIGluIHRoZSBCaXNvbiBleGVjdXRhYmxlcy4gIEkgaW5zaXN0OiBpdCBzaG91bGQgYmUKLXZlcnkgZmVhc2libGUgdG8gdXNlIHRoZSB2ZXJ5IHNhbWUgY29uZmxpY3QgdGFibGVzLgotCi0qKiBBZGp1c3QgdGhlIHNrZWxldG9ucwotSW1wb3J0IHRoZSBza2VsZXRvbnMgZm9yIEMgYW5kIEMrKy4KLQotKiogSW1wcm92ZSB0aGUgc2tlbGV0b25zCi1IYXZlIHRoZW0gc3VwcG9ydCB5eXN5bXByaW50LCB5eWRlc3RydWN0IGFuZCBzbyBmb3J0aC4KLQorTXVzdCB3ZSBrZWVwICV0b2tlbi10YWJsZT8KIAogKiBQcmVjZWRlbmNlCiAKQEAgLTIxOSwxOCArMjY3LDYgQEAKIG1ha2VzIGl0IGltcG9zc2libGUgdG8gaGF2ZSBtb2R1bGFyIHByZWNlZGVuY2UgaW5mb3JtYXRpb24uICBXZSBzaG91bGQKIG1vdmUgdG8gcGFydGlhbCBvcmRlcnMgKHNvdW5kcyBsaWtlIHNlcmllcy9wYXJhbGxlbCBvcmRlcnMgdG8gbWUpLgogCi1UaGlzIHdpbGwgYmUgcG9zc2libGUgd2l0aCBhIEJpc29uIHBhcnNlciBmb3IgdGhlIGdyYW1tYXIsIGFzIGl0IHdpbGwKLW1ha2UgaXQgbXVjaCBlYXNpZXIgdG8gZXh0ZW5kIHRoZSBncmFtbWFyLgotCi0qKiBDb3JyZWxhdGlvbiBiL3cgcHJlY2VkZW5jZSBhbmQgYXNzb2NpYXRpdml0eQotQWxzbywgSSBmYWlsIHRvIHVuZGVyc3RhbmQgd2h5IHdlIGhhdmUgdG8gYXNzaWduIHRoZSBzYW1lCi1hc3NvY2lhdGl2aXR5IHRvIG9wZXJhdG9ycyB3aXRoIHRoZSBzYW1lIHByZWNlZGVuY2UuICBGb3IgaW5zdGFuY2UsCi13aHkgY2FuJ3QgSSBkZWNpZGUgdGhhdCB0aGUgcHJlY2VkZW5jZSBvZiAqIGFuZCAvIGlzIHRoZSBzYW1lLCBidXQgdGhlCi1sYXR0ZXIgaXMgbm9uYXNzb2M/Ci0KLUlmIHRoZXJlIGlzIHJlYWxseSBubyBwcm9mb3VuZCBtb3RpdmF0aW9uLCB3ZSBzaG91bGQgZmluZCBhIG5ldyBzeW50YXgKLXRvIGFsbG93IHNwZWNpZnlpbmcgdGhpcy4KLQogKiogUlIgY29uZmxpY3RzCiBTZWUgaWYgd2UgY2FuIHVzZSBwcmVjZWRlbmNlIGJldHdlZW4gcnVsZXMgdG8gc29sdmUgUlIgY29uZmxpY3RzLiAgU2VlCiB3aGF0IFBPU0lYIHNheXMuCkBAIC0yNTksMjAgKzI5NSw2IEBACiBhIEJpc29uIG9wdGlvbiB3aGVyZSBldmVyeSB0eXBlZCBkZWZhdWx0IHJ1bGUgaXMgZXhwbGljaXRseSB3cml0dGVuIG91dAogKHNhbWUgdHlwZWQgcnVsZWQgY2FuIG9mIGNvdXJzZSBiZSBncm91cGVkIHRvZ2V0aGVyKS4KIAotTm90ZTogUm9iZXJ0IEFuaXNrbyBoYW5kbGVzIHRoaXMuICBIZSBrbm93cyBob3cgdG8gZG8gaXQuCi0KLQotKiBXYXJuaW5ncwotSXQgd291bGQgYmUgbmljZSB0byBoYXZlIHdhcm5pbmcgc3VwcG9ydC4gIFNlZSBob3cgQXV0b2NvbmYgaGFuZGxlcwotdGhlbSwgaXQgaXMgZmFpcmx5IHdlbGwgZGVzY3JpYmVkIHRoZXJlLiAgSXQgd291bGQgYmUgdmVyeSBuaWNlIHRvCi1pbXBsZW1lbnQgdGhpcyBpbiBzdWNoIGEgd2F5IHRoYXQgb3RoZXIgcHJvZ3JhbXMgY291bGQgdXNlCi1saWIvd2FybmluZ3MuW2NoXS4KLQotRG9uJ3Qgd29yayBvbiB0aGlzIHdpdGhvdXQgZmlyc3QgYW5ub3VuY2luZyB5b3UgZG8sIGFzIEkgYWxyZWFkeSBoYXZlCi10aG91Z2h0IGFib3V0IGl0LCBhbmQga25vdyBtYW55IG9mIHRoZSBjb21wb25lbnRzIHRoYXQgY2FuIGJlIHVzZWQgdG8KLWltcGxlbWVudCBpdC4KLQotCiAqIFByZSBhbmQgcG9zdCBhY3Rpb25zLgogRnJvbTogRmxvcmlhbiBLcm9obSA8ZmxvcmlhbkBlZGFtYWlsLmZpc2hraWxsLmlibS5jb20+CiBTdWJqZWN0OiBZWUFDVF9FUElMT0dVRQpAQCAtMzAxLDI4ICszMjMsNDcgQEAKIEkgd2FzIHdvbmRlcmluZyB3aGF0IHlvdSB0aGluayBhYm91dCBhZGRpbmcgWVlBQ1RfUFJPTE9HVUUvRVBJTE9HVUUKIHRvIGJpc29uLiBJZiB5b3UncmUgaW50ZXJlc3RlZCwgSSdsbCB3b3JrIG9uIGEgcGF0Y2guCiAKLSogTW92ZSB0byBHcmFwaHZpegotV2VsbCwgVkNHIHNlZW1zIHJlYWxseSBkZWFkLiAgTW92ZSB0byBHcmFwaHZpeiBpbnN0ZWFkLiAgQWxzbywgZXF1aXAKLXRoZSBwYXJzZXIgd2l0aCBhIG1lYW5zIHRvIGNyZWF0ZSB0aGUgKHZpc3VhbCkgcGFyc2UgdHJlZS4KKyogQmV0dGVyIGdyYXBoaWNzCitFcXVpcCB0aGUgcGFyc2VyIHdpdGggYSBtZWFucyB0byBjcmVhdGUgdGhlICh2aXN1YWwpIHBhcnNlIHRyZWUuCisKKyogQ29tcGxhaW50IHN1Ym1lc3NhZ2UgaW5kZW50YXRpb24uCitXZSBhbHJlYWR5IGhhdmUgYW4gaW1wbGVtZW50YXRpb24gdGhhdCB3b3JrcyBmYWlybHkgd2VsbCBmb3IgbmFtZWQKK3JlZmVyZW5jZSBtZXNzYWdlcywgYnV0IGl0IHdvdWxkIGJlIG5pY2UgdG8gdXNlIGl0IGNvbnNpc3RlbnRseSBmb3IgYWxsCitzdWJtZXNzYWdlcyBmcm9tIEJpc29uLiAgRm9yIGV4YW1wbGUsIHRoZSAicHJldmlvdXMgZGVmaW5pdGlvbiIKK3N1Ym1lc3NhZ2Ugb3IgdGhlIGxpc3Qgb2YgY29ycmVjdCB2YWx1ZXMgZm9yIGEgJWRlZmluZSB2YXJpYWJsZSBtaWdodAorbG9vayBiZXR0ZXIgd2l0aCBpbmRlbnRhdGlvbi4KKworSG93ZXZlciwgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gbWFrZXMgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUKK2xvY2F0aW9uIHByaW50ZWQgb24gdGhlIGZpcnN0IGxpbmUgaXMgbm90IHVzdWFsbHkgbXVjaCBzaG9ydGVyIHRoYW4gdGhlCitsb2NhdGlvbnMgcHJpbnRlZCBvbiB0aGUgc3VibWVzc2FnZSBsaW5lcyB0aGF0IGZvbGxvdy4gIFRoYXQgYXNzdW1wdGlvbgorbWF5IG5vdCBob2xkIHRydWUgYXMgb2Z0ZW4gZm9yIHNvbWUga2luZHMgb2Ygc3VibWVzc2FnZXMgZXNwZWNpYWxseSBpZgord2UgZXZlciBzdXBwb3J0IG11bHRpcGxlIGdyYW1tYXIgZmlsZXMuCisKK0hlcmUncyBhIHByb3Bvc2FsIGZvciBob3cgYSBuZXcgaW1wbGVtZW50YXRpb24gbWlnaHQgbG9vazoKKworICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA5LTA5L21zZzAwMDg2Lmh0bWwKKworCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBvdXRsaW5lCitjb2Rpbmc6IHV0Zi04CitFbmQ6CiAKIC0tLS0tCiAKLUNvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi1JbmMuCitDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCwgMjAwNiwgMjAwOC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KIAotQmlzb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci10aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi1hbnkgbGF0ZXIgdmVyc2lvbi4KK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCi1CaXNvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLWFsb25nIHdpdGggQmlzb247IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLUJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCmRpZmYgLS1naXQgYS9hY2xvY2FsLm00IGIvYWNsb2NhbC5tNAppbmRleCAzYzU0MjZhLi5kMTgzNDI2IDEwMDY0NAotLS0gYS9hY2xvY2FsLm00CisrKyBiL2FjbG9jYWwubTQKQEAgLTEsNyArMSw3IEBACi0jIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGFjbG9jYWwgMS45LjYgLSotIEF1dG9jb25mIC0qLQorIyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBhY2xvY2FsIDEuMTIuNSAtKi0gQXV0b2NvbmYgLSotCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LAotIyAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgpAQCAtMTEsNyArMTEsMTUgQEAKICMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQogIyBQQVJUSUNVTEFSIFBVUlBPU0UuCiAKLSMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK200X2lmbmRlZihbQUNfQVVUT0NPTkZfVkVSU0lPTl0sCisgIFttNF9jb3B5KFttNF9QQUNLQUdFX1ZFUlNJT05dLCBbQUNfQVVUT0NPTkZfVkVSU0lPTl0pXSlkbmwKK200X2lmKG00X2RlZm4oW0FDX0FVVE9DT05GX1ZFUlNJT05dKSwgWzIuNjldLCwKK1ttNF93YXJuaW5nKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgMi42OS4KK1lvdSBoYXZlIGFub3RoZXIgdmVyc2lvbiBvZiBhdXRvY29uZi4gIEl0IG1heSB3b3JrLCBidXQgaXMgbm90IGd1YXJhbnRlZWQgdG8uCitJZiB5b3UgaGF2ZSBwcm9ibGVtcywgeW91IG1heSBuZWVkIHRvIHJlZ2VuZXJhdGUgdGhlIGJ1aWxkIHN5c3RlbSBlbnRpcmVseS4KK1RvIGRvIHNvLCB1c2UgdGhlIHByb2NlZHVyZSBkb2N1bWVudGVkIGJ5IHRoZSBwYWNrYWdlLCB0eXBpY2FsbHkgJ2F1dG9yZWNvbmYnLl0pXSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDItMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKQEAgLTIxLDI2ICsyOSw0MyBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIEF1dG9tYWtlIFguWSB0cmFjZXMgdGhpcyBtYWNybyB0byBlbnN1cmUgYWNsb2NhbC5tNCBoYXMgYmVlbgogIyBnZW5lcmF0ZWQgZnJvbSB0aGUgbTQgZmlsZXMgYWNjb21wYW55aW5nIEF1dG9tYWtlIFguWS4KLUFDX0RFRlVOKFtBTV9BVVRPTUFLRV9WRVJTSU9OXSwgW2FtX19hcGlfdmVyc2lvbj0iMS45Il0pCisjIChUaGlzIHByaXZhdGUgbWFjcm8gc2hvdWxkIG5vdCBiZSBjYWxsZWQgb3V0c2lkZSB0aGlzIGZpbGUuKQorQUNfREVGVU4oW0FNX0FVVE9NQUtFX1ZFUlNJT05dLAorW2FtX19hcGlfdmVyc2lvbj0nMS4xMicKK2RubCBTb21lIHVzZXJzIGZpbmQgQU1fQVVUT01BS0VfVkVSU0lPTiBhbmQgbWlzdGFrZSBpdCBmb3IgYSB3YXkgdG8KK2RubCByZXF1aXJlIHNvbWUgbWluaW11bSB2ZXJzaW9uLiAgUG9pbnQgdGhlbSB0byB0aGUgcmlnaHQgbWFjcm8uCittNF9pZihbJDFdLCBbMS4xMi41XSwgW10sCisgICAgICBbQUNfRkFUQUwoW0RvIG5vdCBjYWxsICQwLCB1c2UgQU1fSU5JVF9BVVRPTUFLRShbJDFdKS5dKV0pZG5sCitdKQorCisjIF9BTV9BVVRPQ09ORl9WRVJTSU9OKFZFUlNJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGFjbG9jYWwgdHJhY2VzIHRoaXMgbWFjcm8gdG8gZmluZCB0aGUgQXV0b2NvbmYgdmVyc2lvbi4KKyMgVGhpcyBpcyBhIHByaXZhdGUgbWFjcm8gdG9vLiAgVXNpbmcgbTRfZGVmaW5lIHNpbXBsaWZpZXMKKyMgdGhlIGxvZ2ljIGluIGFjbG9jYWwsIHdoaWNoIGNhbiBzaW1wbHkgaWdub3JlIHRoaXMgZGVmaW5pdGlvbi4KK200X2RlZmluZShbX0FNX0FVVE9DT05GX1ZFUlNJT05dLCBbXSkKIAogIyBBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2FsbCBBTV9BVVRPTUFLRV9WRVJTSU9OIHNvIGl0IGNhbiBiZSB0cmFjZWQuCi0jIFRoaXMgZnVuY3Rpb24gaXMgQUNfUkVRVUlSRWQgYnkgQUNfSU5JVF9BVVRPTUFLRS4KKyMgQ2FsbCBBTV9BVVRPTUFLRV9WRVJTSU9OIGFuZCBBTV9BVVRPTUFLRV9WRVJTSU9OIHNvIHRoZXkgY2FuIGJlIHRyYWNlZC4KKyMgVGhpcyBmdW5jdGlvbiBpcyBBQ19SRVFVSVJFZCBieSBBTV9JTklUX0FVVE9NQUtFLgogQUNfREVGVU4oW0FNX1NFVF9DVVJSRU5UX0FVVE9NQUtFX1ZFUlNJT05dLAotCSBbQU1fQVVUT01BS0VfVkVSU0lPTihbMS45LjZdKV0pCitbQU1fQVVUT01BS0VfVkVSU0lPTihbMS4xMi41XSlkbmwKK200X2lmbmRlZihbQUNfQVVUT0NPTkZfVkVSU0lPTl0sCisgIFttNF9jb3B5KFttNF9QQUNLQUdFX1ZFUlNJT05dLCBbQUNfQVVUT0NPTkZfVkVSU0lPTl0pXSlkbmwKK19BTV9BVVRPQ09ORl9WRVJTSU9OKG00X2RlZm4oW0FDX0FVVE9DT05GX1ZFUlNJT05dKSldKQogCiAjIEFNX0FVWF9ESVJfRVhQQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCiAKLSMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzLCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAogIyBGb3IgcHJvamVjdHMgdXNpbmcgQUNfQ09ORklHX0FVWF9ESVIoW2Zvb10pLCBBdXRvY29uZiBzZXRzCi0jICRhY19hdXhfZGlyIHRvIGAkc3JjZGlyL2ZvbycuICBJbiBvdGhlciBwcm9qZWN0cywgaXQgaXMgc2V0IHRvCi0jIGAkc3JjZGlyJywgYCRzcmNkaXIvLi4nLCBvciBgJHNyY2Rpci8uLi8uLicuCisjICRhY19hdXhfZGlyIHRvICckc3JjZGlyL2ZvbycuICBJbiBvdGhlciBwcm9qZWN0cywgaXQgaXMgc2V0IHRvCisjICckc3JjZGlyJywgJyRzcmNkaXIvLi4nLCBvciAnJHNyY2Rpci8uLi8uLicuCiAjCiAjIE9mIGNvdXJzZSwgQXV0b21ha2UgbXVzdCBob25vciB0aGlzIHZhcmlhYmxlIHdoZW5ldmVyIGl0IGNhbGxzIGEKICMgdG9vbCBmcm9tIHRoZSBhdXhpbGlhcnkgZGlyZWN0b3J5LiAgVGhlIHByb2JsZW0gaXMgdGhhdCAkc3JjZGlyIChhbmQKQEAgLTU5LDcgKzg0LDcgQEAKICMKICMgVGhlIHJlYXNvbiBvZiB0aGUgbGF0dGVyIGZhaWx1cmUgaXMgdGhhdCAkdG9wX3NyY2RpciBhbmQgJGFjX2F1eF9kaXIKICMgYXJlIGJvdGggcHJlZml4ZWQgYnkgJHNyY2Rpci4gIEluIGFuIGluLXNvdXJjZSBidWlsZCB0aGlzIGlzIHVzdWFsbHkKLSMgaGFybWxlc3MgYmVjYXVzZSAkc3JjZGlyIGlzIGAuJywgYnV0IHRoaW5ncyB3aWxsIGJyb2tlIHdoZW4geW91CisjIGhhcm1sZXNzIGJlY2F1c2UgJHNyY2RpciBpcyAnLicsIGJ1dCB0aGluZ3Mgd2lsbCBicm9rZSB3aGVuIHlvdQogIyBzdGFydCBhIFZQQVRIIGJ1aWxkIG9yIHVzZSBhbiBhYnNvbHV0ZSAkc3JjZGlyLgogIwogIyBTbyB3ZSBjb3VsZCB1c2Ugc29tZXRoaW5nIHNpbWlsYXIgdG8gJHRvcF9zcmNkaXIvJGFjX2F1eF9kaXIvbWlzc2luZywKQEAgLTgzLDQ5ICsxMDgsMjYgQEAKIGFtX2F1eF9kaXI9YGNkICRhY19hdXhfZGlyICYmIHB3ZGAKIF0pCiAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDUKLSMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBzZXJpYWwgNAotCi0jIFRoaXMgd2FzIG1lcmdlZCBpbnRvIEFDX1BST0dfQ0MgaW4gQXV0b2NvbmYuCi0KLUFVX0RFRlVOKFtBTV9QUk9HX0NDX1NURENdLAotW0FDX1BST0dfQ0MKLUFDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sIFskMDoKLQl5b3VyIGNvZGUgc2hvdWxkIG5vIGxvbmdlciBkZXBlbmQgdXBvbiBgYW1fY3ZfcHJvZ19jY19zdGRjJywgYnV0IHVwb24KLQlgYWNfY3ZfcHJvZ19jY19zdGRjJy4gIFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBhc3NpZ25tZW50IHdoZW4KLQl5b3UgYWRqdXN0IHRoZSBjb2RlLiAgWW91IGNhbiBhbHNvIHJlbW92ZSB0aGUgYWJvdmUgY2FsbCB0bwotCUFDX1BST0dfQ0MgaWYgeW91IGFscmVhZHkgY2FsbGVkIGl0IGVsc2V3aGVyZS5dKQotYW1fY3ZfcHJvZ19jY19zdGRjPSRhY19jdl9wcm9nX2NjX3N0ZGMKLV0pCi1BVV9ERUZVTihbZnBfUFJPR19DQ19TVERDXSkKLQogIyBBTV9DT05ESVRJT05BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogCi0jIENvcHlyaWdodCAoQykgMTk5NywgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNQotIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgNwotCiAjIEFNX0NPTkRJVElPTkFMKE5BTUUsIFNIRUxMLUNPTkRJVElPTikKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBEZWZpbmUgYSBjb25kaXRpb25hbC4KIEFDX0RFRlVOKFtBTV9DT05ESVRJT05BTF0sCi1bQUNfUFJFUkVRKDIuNTIpZG5sCi0gaWZlbHNlKFskMV0sIFtUUlVFXSwgIFtBQ19GQVRBTChbJDA6IGludmFsaWQgY29uZGl0aW9uOiAkMV0pXSwKLQlbJDFdLCBbRkFMU0VdLCBbQUNfRkFUQUwoWyQwOiBpbnZhbGlkIGNvbmRpdGlvbjogJDFdKV0pZG5sCi1BQ19TVUJTVChbJDFfVFJVRV0pCi1BQ19TVUJTVChbJDFfRkFMU0VdKQorW0FDX1BSRVJFUShbMi41Ml0pZG5sCisgbTRfaWYoWyQxXSwgW1RSVUVdLCAgW0FDX0ZBVEFMKFskMDogaW52YWxpZCBjb25kaXRpb246ICQxXSldLAorICAgICAgIFskMV0sIFtGQUxTRV0sIFtBQ19GQVRBTChbJDA6IGludmFsaWQgY29uZGl0aW9uOiAkMV0pXSlkbmwKK0FDX1NVQlNUKFskMV9UUlVFXSlkbmwKK0FDX1NVQlNUKFskMV9GQUxTRV0pZG5sCitfQU1fU1VCU1RfTk9UTUFLRShbJDFfVFJVRV0pZG5sCitfQU1fU1VCU1RfTk9UTUFLRShbJDFfRkFMU0VdKWRubAorbTRfZGVmaW5lKFtfQU1fQ09ORF9WQUxVRV8kMV0sIFskMl0pZG5sCiBpZiAkMjsgdGhlbgogICAkMV9UUlVFPQogICAkMV9GQUxTRT0nIycKQEAgLTEzOSwxNyArMTQxLDE0IEBACiBVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS5dXSkKIGZpXSldKQogCi0KLSMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1Ci0jIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCA4CiAKLSMgVGhlcmUgYXJlIGEgZmV3IGRpcnR5IGhhY2tzIGJlbG93IHRvIGF2b2lkIGxldHRpbmcgYEFDX1BST0dfQ0MnIGJlCisjIFRoZXJlIGFyZSBhIGZldyBkaXJ0eSBoYWNrcyBiZWxvdyB0byBhdm9pZCBsZXR0aW5nICdBQ19QUk9HX0NDJyBiZQogIyB3cml0dGVuIGluIGNsZWFyLCBpbiB3aGljaCBjYXNlIGF1dG9tYWtlLCB3aGVuIHJlYWRpbmcgYWNsb2NhbC5tNCwKICMgd2lsbCB0aGluayBpdCBzZWVzIGEgKnVzZSosIGFuZCB0aGVyZWZvcmUgd2lsbCB0cmlnZ2VyIGFsbCBpdCdzCiAjIEMgc3VwcG9ydCBtYWNoaW5lcnkuICBBbHNvIG5vdGUgdGhhdCBpdCBtZWFucyB0aGF0IGF1dG9zY2FuLCBzZWVpbmcKQEAgLTE1OSw3ICsxNTgsNyBAQAogIyBfQU1fREVQRU5ERU5DSUVTKE5BTUUpCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgU2VlIGhvdyB0aGUgY29tcGlsZXIgaW1wbGVtZW50cyBkZXBlbmRlbmN5IGNoZWNraW5nLgotIyBOQU1FIGlzICJDQyIsICJDWFgiLCAiR0NKIiwgb3IgIk9CSkMiLgorIyBOQU1FIGlzICJDQyIsICJDWFgiLCAiT0JKQyIsICJPQkpDWFgiLCAiVVBDIiwgb3IgIkdKQyIuCiAjIFdlIHRyeSBhIGZldyB0ZWNobmlxdWVzIGFuZCB1c2UgdGhhdCB0byBzZXQgYSBzaW5nbGUgY2FjaGUgdmFyaWFibGUuCiAjCiAjIFdlIGRvbid0IEFDX1JFUVVJUkUgdGhlIGNvcnJlc3BvbmRpbmcgQUNfUFJPR19DQyBzaW5jZSB0aGUgbGF0dGVyIHdhcwpAQCAtMTcyLDExICsxNzEsMTMgQEAKIEFDX1JFUVVJUkUoW0FNX01BS0VfSU5DTFVERV0pZG5sCiBBQ19SRVFVSVJFKFtBTV9ERVBfVFJBQ0tdKWRubAogCi1pZmVsc2UoWyQxXSwgQ0MsICAgW2RlcGNjPSIkQ0MiICAgYW1fY29tcGlsZXJfbGlzdD1dLAotICAgICAgIFskMV0sIENYWCwgIFtkZXBjYz0iJENYWCIgIGFtX2NvbXBpbGVyX2xpc3Q9XSwKLSAgICAgICBbJDFdLCBPQkpDLCBbZGVwY2M9IiRPQkpDIiBhbV9jb21waWxlcl9saXN0PSdnY2MzIGdjYyddLAotICAgICAgIFskMV0sIEdDSiwgIFtkZXBjYz0iJEdDSiIgIGFtX2NvbXBpbGVyX2xpc3Q9J2djYzMgZ2NjJ10sCi0gICAgICAgICAgICAgICAgICAgW2RlcGNjPSIkJDEiICAgYW1fY29tcGlsZXJfbGlzdD1dKQorbTRfaWYoWyQxXSwgW0NDXSwgICBbZGVwY2M9IiRDQyIgICBhbV9jb21waWxlcl9saXN0PV0sCisgICAgICBbJDFdLCBbQ1hYXSwgIFtkZXBjYz0iJENYWCIgIGFtX2NvbXBpbGVyX2xpc3Q9XSwKKyAgICAgIFskMV0sIFtPQkpDXSwgW2RlcGNjPSIkT0JKQyIgYW1fY29tcGlsZXJfbGlzdD0nZ2NjMyBnY2MnXSwKKyAgICAgIFskMV0sIFtPQkpDWFhdLCBbZGVwY2M9IiRPQkpDWFgiIGFtX2NvbXBpbGVyX2xpc3Q9J2djYzMgZ2NjJ10sCisgICAgICBbJDFdLCBbVVBDXSwgIFtkZXBjYz0iJFVQQyIgIGFtX2NvbXBpbGVyX2xpc3Q9XSwKKyAgICAgIFskMV0sIFtHQ0pdLCAgW2RlcGNjPSIkR0NKIiAgYW1fY29tcGlsZXJfbGlzdD0nZ2NjMyBnY2MnXSwKKyAgICAgICAgICAgICAgICAgICAgW2RlcGNjPSIkJDEiICAgYW1fY29tcGlsZXJfbGlzdD1dKQogCiBBQ19DQUNIRV9DSEVDSyhbZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2NdLAogICAgICAgICAgICAgICAgW2FtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlXSwKQEAgLTE4NCw4ICsxODUsOSBAQAogICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCiAgICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCiAgICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCi0gICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCBgRCcgLS0gYmVjYXVzZSBgLU1EJyBtZWFucyBgcHV0IHRoZSBvdXRwdXQKLSAgIyBpbiBEJy4KKyAgIyBtYWtpbmcgYSBkdW1teSBmaWxlIG5hbWVkICdEJyAtLSBiZWNhdXNlICctTUQnIG1lYW5zICJwdXQgdGhlIG91dHB1dAorICAjIGluIEQiLgorICBybSAtcmYgY29uZnRlc3QuZGlyCiAgIG1rZGlyIGNvbmZ0ZXN0LmRpcgogICAjIENvcHkgZGVwY29tcCB0byBzdWJkaXIgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd29uJ3QgZmluZCBpdCBpZiB3ZSdyZQogICAjIHVzaW5nIGEgcmVsYXRpdmUgZGlyZWN0b3J5LgpAQCAtMjAzLDYgKzIwNSwxNiBAQAogICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgogICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gWydzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJ10gPCAuL2RlcGNvbXBgCiAgIGZpCisgIGFtX191bml2ZXJzYWw9ZmFsc2UKKyAgbTRfY2FzZShbJDFdLCBbQ0NdLAorICAgIFtjYXNlICIgJGRlcGNjICIgaW4gIygKKyAgICAgKlwgLWFyY2hcICpcIC1hcmNoXCAqKSBhbV9fdW5pdmVyc2FsPXRydWUgOzsKKyAgICAgZXNhY10sCisgICAgW0NYWF0sCisgICAgW2Nhc2UgIiAkZGVwY2MgIiBpbiAjKAorICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OworICAgICBlc2FjXSkKKwogICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KICAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKICAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCkBAIC0yMTQsMzQgKzIyNiw0OSBAQAogICAgIDogPiBzdWIvY29uZnRlc3QuYwogICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbwogICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYwotICAgICAgIyBVc2luZyBgOiA+IHN1Yi9jb25mdHN0JGkuaCcgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKLSAgICAgICMgU29sYXJpcyA4J3Mgey91c3IsfS9iaW4vc2guCi0gICAgICB0b3VjaCBzdWIvY29uZnRzdCRpLmgKKyAgICAgICMgVXNpbmcgIjogPiBzdWIvY29uZnRzdCRpLmgiIGNyZWF0ZXMgb25seSBzdWIvY29uZnRzdDEuaCB3aXRoCisgICAgICAjIFNvbGFyaXMgMTAgL2Jpbi9zaC4KKyAgICAgIGVjaG8gJy8qIGR1bW15ICovJyA+IHN1Yi9jb25mdHN0JGkuaAogICAgIGRvbmUKICAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCiAKKyAgICAjIFdlIGNoZWNrIHdpdGggJy1jJyBhbmQgJy1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKKyAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQorICAgICMgaGFuZGxlICctTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLiAgQWxzbywgc29tZSBJbnRlbAorICAgICMgdmVyc2lvbnMgaGFkIHRyb3VibGUgd2l0aCBvdXRwdXQgaW4gc3ViZGlycy4KKyAgICBhbV9fb2JqPXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfQorICAgIGFtX19taW51c19vYmo9Ii1vICRhbV9fb2JqIgogICAgIGNhc2UgJGRlcG1vZGUgaW4KKyAgICBnY2MpCisgICAgICAjIFRoaXMgZGVwbW9kZSBjYXVzZXMgYSBjb21waWxlciByYWNlIGluIHVuaXZlcnNhbCBtb2RlLgorICAgICAgdGVzdCAiJGFtX191bml2ZXJzYWwiID0gZmFsc2UgfHwgY29udGludWUKKyAgICAgIDs7CiAgICAgbm9zaWRlZWZmZWN0KQotICAgICAgIyBhZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCi0gICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkCisgICAgICAjIEFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKKyAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQuCiAgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KIAljb250aW51ZQogICAgICAgZWxzZQogCWJyZWFrCiAgICAgICBmaQogICAgICAgOzsKKyAgICBtc3ZjNyB8IG1zdmM3bXN5cyB8IG1zdmlzdWFsY3BwIHwgbXN2Y21zeXMpCisgICAgICAjIFRoaXMgY29tcGlsZXIgd29uJ3QgZ3JvayAnLWMgLW8nLCBidXQgYWxzbywgdGhlIG1pbnVzbyB0ZXN0IGhhcworICAgICAgIyBub3QgcnVuIHlldC4gIFRoZXNlIGRlcG1vZGVzIGFyZSBsYXRlIGVub3VnaCBpbiB0aGUgZ2FtZSwgYW5kCisgICAgICAjIHNvIHdlYWsgdGhhdCB0aGVpciBmdW5jdGlvbmluZyBzaG91bGQgbm90IGJlIGltcGFjdGVkLgorICAgICAgYW1fX29iaj1jb25mdGVzdC4ke09CSkVYVC1vfQorICAgICAgYW1fX21pbnVzX29iaj0KKyAgICAgIDs7CiAgICAgbm9uZSkgYnJlYWsgOzsKICAgICBlc2FjCi0gICAgIyBXZSBjaGVjayB3aXRoIGAtYycgYW5kIGAtbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCi0gICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKLSAgICAjIGhhbmRsZSBgLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4KICAgICBpZiBkZXBtb2RlPSRkZXBtb2RlIFwKLSAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBcCisgICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD0kYW1fX29iaiBcCiAgICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKLSAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAtbyBzdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gc3ViL2NvbmZ0ZXN0LmMgXAorICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jICRhbV9fbWludXNfb2JqIHN1Yi9jb25mdGVzdC5jIFwKICAgICAgICAgID4vZGV2L251bGwgMj5jb25mdGVzdC5lcnIgJiYKKyAgICAgICBncmVwIHN1Yi9jb25mdHN0MS5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCiAgICAgICAgZ3JlcCBzdWIvY29uZnRzdDYuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgotICAgICAgIGdyZXAgc3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgZ3JlcCAkYW1fX29iaiBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgogICAgICAgICR7TUFLRS1tYWtlfSAtcyAtZiBjb25mbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbgogICAgICAgIyBpY2MgZG9lc24ndCBjaG9rZSBvbiB1bmtub3duIG9wdGlvbnMsIGl0IHdpbGwganVzdCBpc3N1ZSB3YXJuaW5ncwogICAgICAgIyBvciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKQEAgLTI3NCw3ICszMDEsNyBAQAogIyBBTV9TRVRfREVQRElSCiAjIC0tLS0tLS0tLS0tLS0KICMgQ2hvb3NlIGEgZGlyZWN0b3J5IG5hbWUgZm9yIGRlcGVuZGVuY3kgZmlsZXMuCi0jIFRoaXMgbWFjcm8gaXMgQUNfUkVRVUlSRWQgaW4gX0FNX0RFUEVOREVOQ0lFUworIyBUaGlzIG1hY3JvIGlzIEFDX1JFUVVJUkVkIGluIF9BTV9ERVBFTkRFTkNJRVMuCiBBQ19ERUZVTihbQU1fU0VUX0RFUERJUl0sCiBbQUNfUkVRVUlSRShbQU1fU0VUX0xFQURJTkdfRE9UXSlkbmwKIEFDX1NVQlNUKFtERVBESVJdLCBbIiR7YW1fX2xlYWRpbmdfZG90fWRlcHMiXSlkbmwKQEAgLTI4NCw2OSArMzExLDg1IEBACiAjIEFNX0RFUF9UUkFDSwogIyAtLS0tLS0tLS0tLS0KIEFDX0RFRlVOKFtBTV9ERVBfVFJBQ0tdLAotW0FDX0FSR19FTkFCTEUoZGVwZW5kZW5jeS10cmFja2luZywKLVsgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICBzcGVlZHMgdXAgb25lLXRpbWUgYnVpbGQKLSAgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyAgIGRvIG5vdCByZWplY3Qgc2xvdyBkZXBlbmRlbmN5IGV4dHJhY3RvcnNdKQorW0FDX0FSR19FTkFCTEUoW2RlcGVuZGVuY3ktdHJhY2tpbmddLCBbZG5sCitBU19IRUxQX1NUUklORygKKyAgWy0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmddLAorICBbZG8gbm90IHJlamVjdCBzbG93IGRlcGVuZGVuY3kgZXh0cmFjdG9yc10pCitBU19IRUxQX1NUUklORygKKyAgWy0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nXSwKKyAgW3NwZWVkcyB1cCBvbmUtdGltZSBidWlsZF0pXSkKIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgogICBhbV9kZXBjb21wPSIkYWNfYXV4X2Rpci9kZXBjb21wIgogICBBTURFUEJBQ0tTTEFTSD0nXCcKKyAgYW1fX25vZGVwPSdfbm8nCiBmaQogQU1fQ09ORElUSU9OQUwoW0FNREVQXSwgW3Rlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhub10pCi1BQ19TVUJTVChbQU1ERVBCQUNLU0xBU0hdKQorQUNfU1VCU1QoW0FNREVQQkFDS1NMQVNIXSlkbmwKK19BTV9TVUJTVF9OT1RNQUtFKFtBTURFUEJBQ0tTTEFTSF0pZG5sCitBQ19TVUJTVChbYW1fX25vZGVwXSlkbmwKK19BTV9TVUJTVF9OT1RNQUtFKFthbV9fbm9kZXBdKWRubAogXSkKIAogIyBHZW5lcmF0ZSBjb2RlIHRvIHNldCB1cCBkZXBlbmRlbmN5IHRyYWNraW5nLiAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogCi0jIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNQotIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotI3NlcmlhbCAzCiAKICMgX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQUNfREVGVU4oW19BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10sCi1bZm9yIG1mIGluICRDT05GSUdfRklMRVM7IGRvCi0gICMgU3RyaXAgTUYgc28gd2UgZW5kIHVwIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpbGUuCi0gIG1mPWBlY2hvICIkbWYiIHwgc2VkIC1lICdzLzouKiQvLydgCi0gICMgQ2hlY2sgd2hldGhlciB0aGlzIGlzIGFuIEF1dG9tYWtlIGdlbmVyYXRlZCBNYWtlZmlsZSBvciBub3QuCi0gICMgV2UgdXNlZCB0byBtYXRjaCBvbmx5IHRoZSBmaWxlcyBuYW1lZCBgTWFrZWZpbGUuaW4nLCBidXQKLSAgIyBzb21lIHBlb3BsZSByZW5hbWUgdGhlbTsgc28gaW5zdGVhZCB3ZSBsb29rIGF0IHRoZSBmaWxlIGNvbnRlbnQuCi0gICMgR3JlcCdpbmcgdGhlIGZpcnN0IGxpbmUgaXMgbm90IGVub3VnaDogc29tZSBwZW9wbGUgcG9zdC1wcm9jZXNzCi0gICMgZWFjaCBNYWtlZmlsZS5pbiBhbmQgYWRkIGEgbmV3IGxpbmUgb24gdG9wIG9mIGVhY2ggZmlsZSB0byBzYXkgc28uCi0gICMgU28gbGV0J3MgZ3JlcCB3aG9sZSBmaWxlLgotICBpZiBncmVwICdeIy4qZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlJyAkbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbgotICAgIGRpcnBhcnQ9YEFTX0RJUk5BTUUoIiRtZiIpYAotICBlbHNlCi0gICAgY29udGludWUKLSAgZmkKLSAgIyBFeHRyYWN0IHRoZSBkZWZpbml0aW9uIG9mIERFUERJUiwgYW1fX2luY2x1ZGUsIGFuZCBhbV9fcXVvdGUKLSAgIyBmcm9tIHRoZSBNYWtlZmlsZSB3aXRob3V0IHJ1bm5pbmcgYG1ha2UnLgotICBERVBESVI9YHNlZCAtbiAncy9eREVQRElSID0gLy9wJyA8ICIkbWYiYAotICB0ZXN0IC16ICIkREVQRElSIiAmJiBjb250aW51ZQotICBhbV9faW5jbHVkZT1gc2VkIC1uICdzL15hbV9faW5jbHVkZSA9IC8vcCcgPCAiJG1mImAKLSAgdGVzdCAteiAiYW1fX2luY2x1ZGUiICYmIGNvbnRpbnVlCi0gIGFtX19xdW90ZT1gc2VkIC1uICdzL15hbV9fcXVvdGUgPSAvL3AnIDwgIiRtZiJgCi0gICMgV2hlbiB1c2luZyBhbnNpMmtuciwgVSBtYXkgYmUgZW1wdHkgb3IgYW4gdW5kZXJzY29yZTsgZXhwYW5kIGl0Ci0gIFU9YHNlZCAtbiAncy9eVSA9IC8vcCcgPCAiJG1mImAKLSAgIyBGaW5kIGFsbCBkZXBlbmRlbmN5IG91dHB1dCBmaWxlcywgdGhleSBhcmUgaW5jbHVkZWQgZmlsZXMgd2l0aAotICAjICQoREVQRElSKSBpbiB0aGVpciBuYW1lcy4gIFdlIGludm9rZSBzZWQgdHdpY2UgYmVjYXVzZSBpdCBpcyB0aGUKLSAgIyBzaW1wbGVzdCBhcHByb2FjaCB0byBjaGFuZ2luZyAkKERFUERJUikgdG8gaXRzIGFjdHVhbCB2YWx1ZSBpbiB0aGUKLSAgIyBleHBhbnNpb24uCi0gIGZvciBmaWxlIGluIGBzZWQgLW4gIgotICAgIHMvXiRhbV9faW5jbHVkZSAkYW1fX3F1b3RlXCguKihERVBESVIpLipcKSRhbV9fcXVvdGUiJyQvXDEvcCcgPCIkbWYiIHwgXAotICAgICAgIHNlZCAtZSAncy9cJChERVBESVIpLyciJERFUERJUiInL2cnIC1lICdzL1wkVS8nIiRVIicvZydgOyBkbwotICAgICMgTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzLgotICAgIHRlc3QgLWYgIiRkaXJwYXJ0LyRmaWxlIiAmJiBjb250aW51ZQotICAgIGZkaXI9YEFTX0RJUk5BTUUoWyIkZmlsZSJdKWAKLSAgICBBU19NS0RJUl9QKFskZGlycGFydC8kZmRpcl0pCi0gICAgIyBlY2hvICJjcmVhdGluZyAkZGlycGFydC8kZmlsZSIKLSAgICBlY2hvICcjIGR1bW15JyA+ICIkZGlycGFydC8kZmlsZSIKK1t7CisgICMgQXV0b2NvbmYgMi42MiBxdW90ZXMgLS1maWxlIGFyZ3VtZW50cyBmb3IgZXZhbCwgYnV0IG5vdCB3aGVuIGZpbGVzCisgICMgYXJlIGxpc3RlZCB3aXRob3V0IC0tZmlsZS4gIExldCdzIHBsYXkgc2FmZSBhbmQgb25seSBlbmFibGUgdGhlIGV2YWwKKyAgIyBpZiB3ZSBkZXRlY3QgdGhlIHF1b3RpbmcuCisgIGNhc2UgJENPTkZJR19GSUxFUyBpbgorICAqXCcqKSBldmFsIHNldCB4ICIkQ09ORklHX0ZJTEVTIiA7OworICAqKSAgIHNldCB4ICRDT05GSUdfRklMRVMgOzsKKyAgZXNhYworICBzaGlmdAorICBmb3IgbWYKKyAgZG8KKyAgICAjIFN0cmlwIE1GIHNvIHdlIGVuZCB1cCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgorICAgIG1mPWBlY2hvICIkbWYiIHwgc2VkIC1lICdzLzouKiQvLydgCisgICAgIyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYW4gQXV0b21ha2UgZ2VuZXJhdGVkIE1ha2VmaWxlIG9yIG5vdC4KKyAgICAjIFdlIHVzZWQgdG8gbWF0Y2ggb25seSB0aGUgZmlsZXMgbmFtZWQgJ01ha2VmaWxlLmluJywgYnV0CisgICAgIyBzb21lIHBlb3BsZSByZW5hbWUgdGhlbTsgc28gaW5zdGVhZCB3ZSBsb29rIGF0IHRoZSBmaWxlIGNvbnRlbnQuCisgICAgIyBHcmVwJ2luZyB0aGUgZmlyc3QgbGluZSBpcyBub3QgZW5vdWdoOiBzb21lIHBlb3BsZSBwb3N0LXByb2Nlc3MKKyAgICAjIGVhY2ggTWFrZWZpbGUuaW4gYW5kIGFkZCBhIG5ldyBsaW5lIG9uIHRvcCBvZiBlYWNoIGZpbGUgdG8gc2F5IHNvLgorICAgICMgR3JlcCdpbmcgdGhlIHdob2xlIGZpbGUgaXMgbm90IGdvb2QgZWl0aGVyOiBBSVggZ3JlcCBoYXMgYSBsaW5lCisgICAgIyBsaW1pdCBvZiAyMDQ4LCBidXQgYWxsIHNlZCdzIHdlIGtub3cgaGF2ZSB1bmRlcnN0YW5kIGF0IGxlYXN0IDQwMDAuCisgICAgaWYgc2VkIC1uICdzLF4jLipnZW5lcmF0ZWQgYnkgYXV0b21ha2UuKixYLHAnICIkbWYiIHwgZ3JlcCBYID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgZGlycGFydD1gQVNfRElSTkFNRSgiJG1mIilgCisgICAgZWxzZQorICAgICAgY29udGludWUKKyAgICBmaQorICAgICMgRXh0cmFjdCB0aGUgZGVmaW5pdGlvbiBvZiBERVBESVIsIGFtX19pbmNsdWRlLCBhbmQgYW1fX3F1b3RlCisgICAgIyBmcm9tIHRoZSBNYWtlZmlsZSB3aXRob3V0IHJ1bm5pbmcgJ21ha2UnLgorICAgIERFUERJUj1gc2VkIC1uICdzL15ERVBESVIgPSAvL3AnIDwgIiRtZiJgCisgICAgdGVzdCAteiAiJERFUERJUiIgJiYgY29udGludWUKKyAgICBhbV9faW5jbHVkZT1gc2VkIC1uICdzL15hbV9faW5jbHVkZSA9IC8vcCcgPCAiJG1mImAKKyAgICB0ZXN0IC16ICJhbV9faW5jbHVkZSIgJiYgY29udGludWUKKyAgICBhbV9fcXVvdGU9YHNlZCAtbiAncy9eYW1fX3F1b3RlID0gLy9wJyA8ICIkbWYiYAorICAgICMgRmluZCBhbGwgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZXMsIHRoZXkgYXJlIGluY2x1ZGVkIGZpbGVzIHdpdGgKKyAgICAjICQoREVQRElSKSBpbiB0aGVpciBuYW1lcy4gIFdlIGludm9rZSBzZWQgdHdpY2UgYmVjYXVzZSBpdCBpcyB0aGUKKyAgICAjIHNpbXBsZXN0IGFwcHJvYWNoIHRvIGNoYW5naW5nICQoREVQRElSKSB0byBpdHMgYWN0dWFsIHZhbHVlIGluIHRoZQorICAgICMgZXhwYW5zaW9uLgorICAgIGZvciBmaWxlIGluIGBzZWQgLW4gIgorICAgICAgcy9eJGFtX19pbmNsdWRlICRhbV9fcXVvdGVcKC4qKERFUERJUikuKlwpJGFtX19xdW90ZSInJC9cMS9wJyA8IiRtZiIgfCBcCisJIHNlZCAtZSAncy9cJChERVBESVIpLyciJERFUERJUiInL2cnYDsgZG8KKyAgICAgICMgTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzLgorICAgICAgdGVzdCAtZiAiJGRpcnBhcnQvJGZpbGUiICYmIGNvbnRpbnVlCisgICAgICBmZGlyPWBBU19ESVJOQU1FKFsiJGZpbGUiXSlgCisgICAgICBBU19NS0RJUl9QKFskZGlycGFydC8kZmRpcl0pCisgICAgICAjIGVjaG8gImNyZWF0aW5nICRkaXJwYXJ0LyRmaWxlIgorICAgICAgZWNobyAnIyBkdW1teScgPiAiJGRpcnBhcnQvJGZpbGUiCisgICAgZG9uZQogICBkb25lCi1kb25lCit9CiBdKSMgX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTCiAKIApAQCAtMzU1LDcgKzM5OCw3IEBACiAjIFRoaXMgbWFjcm8gc2hvdWxkIG9ubHkgYmUgaW52b2tlZCBvbmNlIC0tIHVzZSB2aWEgQUNfUkVRVUlSRS4KICMKICMgVGhpcyBjb2RlIGlzIG9ubHkgcmVxdWlyZWQgd2hlbiBhdXRvbWF0aWMgZGVwZW5kZW5jeSB0cmFja2luZwotIyBpcyBlbmFibGVkLiAgRklYTUUuICBUaGlzIGNyZWF0ZXMgZWFjaCBgLlAnIGZpbGUgdGhhdCB3ZSB3aWxsCisjIGlzIGVuYWJsZWQuICBGSVhNRS4gIFRoaXMgY3JlYXRlcyBlYWNoICcuUCcgZmlsZSB0aGF0IHdlIHdpbGwKICMgbmVlZCBpbiBvcmRlciB0byBib290c3RyYXAgdGhlIGRlcGVuZGVuY3kgaGFuZGxpbmcgY29kZS4KIEFDX0RFRlVOKFtBTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10sCiBbQUNfQ09ORklHX0NPTU1BTkRTKFtkZXBmaWxlc10sCkBAIC0zNjUsMTUgKzQwOCwxMiBAQAogCiAjIERvIGFsbCB0aGUgd29yayBmb3IgQXV0b21ha2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1Ci0jIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCAxMgotCiAjIFRoaXMgbWFjcm8gYWN0dWFsbHkgZG9lcyB0b28gbXVjaC4gIFNvbWUgY2hlY2tzIGFyZSBvbmx5IG5lZWRlZCBpZgogIyB5b3VyIHBhY2thZ2UgZG9lcyBjZXJ0YWluIHRoaW5ncy4gIEJ1dCB0aGlzIGlzbid0IHJlYWxseSBhIGJpZyBkZWFsLgogCkBAIC0zODksMTYgKzQyOSwyMCBAQAogIyBhcmd1bWVudHMgbWFuZGF0b3J5LCBhbmQgdGhlbiB3ZSBjYW4gZGVwZW5kIG9uIGEgbmV3IEF1dG9jb25mCiAjIHJlbGVhc2UgYW5kIGRyb3AgdGhlIG9sZCBjYWxsIHN1cHBvcnQuCiBBQ19ERUZVTihbQU1fSU5JVF9BVVRPTUFLRV0sCi1bQUNfUFJFUkVRKFsyLjU4XSlkbmwKK1tBQ19QUkVSRVEoWzIuNjJdKWRubAogZG5sIEF1dG9jb25mIHdhbnRzIHRvIGRpc2FsbG93IEFNXyBuYW1lcy4gIFdlIGV4cGxpY2l0bHkgYWxsb3cKIGRubCB0aGUgb25lcyB3ZSBjYXJlIGFib3V0LgogbTRfcGF0dGVybl9hbGxvdyhbXkFNX1tBLVpdK0ZMQUdTJF0pZG5sCiBBQ19SRVFVSVJFKFtBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OXSlkbmwKIEFDX1JFUVVJUkUoW0FDX1BST0dfSU5TVEFMTF0pZG5sCi0jIHRlc3QgdG8gc2VlIGlmIHNyY2RpciBhbHJlYWR5IGNvbmZpZ3VyZWQKLWlmIHRlc3QgImBjZCAkc3JjZGlyICYmIHB3ZGAiICE9ICJgcHdkYCIgJiYKLSAgIHRlc3QgLWYgJHNyY2Rpci9jb25maWcuc3RhdHVzOyB0aGVuCi0gIEFDX01TR19FUlJPUihbc291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQ7IHJ1biAibWFrZSBkaXN0Y2xlYW4iIHRoZXJlIGZpcnN0XSkKK2lmIHRlc3QgImBjZCAkc3JjZGlyICYmIHB3ZGAiICE9ICJgcHdkYCI7IHRoZW4KKyAgIyBVc2UgLUkkKHNyY2Rpcikgb25seSB3aGVuICQoc3JjZGlyKSAhPSAuLCBzbyB0aGF0IG1ha2UncyBvdXRwdXQKKyAgIyBpcyBub3QgcG9sbHV0ZWQgd2l0aCByZXBlYXRlZCAiLUkuIgorICBBQ19TVUJTVChbYW1fX2lzcmNdLCBbJyAtSSQoc3JjZGlyKSddKV9BTV9TVUJTVF9OT1RNQUtFKFthbV9faXNyY10pZG5sCisgICMgdGVzdCB0byBzZWUgaWYgc3JjZGlyIGFscmVhZHkgY29uZmlndXJlZAorICBpZiB0ZXN0IC1mICRzcmNkaXIvY29uZmlnLnN0YXR1czsgdGhlbgorICAgIEFDX01TR19FUlJPUihbc291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQ7IHJ1biAibWFrZSBkaXN0Y2xlYW4iIHRoZXJlIGZpcnN0XSkKKyAgZmkKIGZpCiAKICMgdGVzdCB3aGV0aGVyIHdlIGhhdmUgY3lncGF0aApAQCAtNDE0LDQ4ICs0NTgsODUgQEAKICMgRGVmaW5lIHRoZSBpZGVudGl0eSBvZiB0aGUgcGFja2FnZS4KIGRubCBEaXN0aW5ndWlzaCBiZXR3ZWVuIG9sZC1zdHlsZSBhbmQgbmV3LXN0eWxlIGNhbGxzLgogbTRfaWZ2YWwoWyQyXSwKLVttNF9pZnZhbChbJDNdLCBbX0FNX1NFVF9PUFRJT04oW25vLWRlZmluZV0pXSlkbmwKK1tBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiB0d28tIGFuZCB0aHJlZS1hcmd1bWVudHMgZm9ybXMgYXJlIGRlcHJlY2F0ZWQuICBGb3IgbW9yZSBpbmZvLCBzZWU6CitodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b21ha2UvbWFudWFsL2F1dG9tYWtlLmh0bWwjTW9kZXJuaXplLUFNX0lOSVRfQVVUT01BS0UtaW52b2NhdGlvbl0pCittNF9pZnZhbChbJDNdLCBbX0FNX1NFVF9PUFRJT04oW25vLWRlZmluZV0pXSlkbmwKICBBQ19TVUJTVChbUEFDS0FHRV0sIFskMV0pZG5sCiAgQUNfU1VCU1QoW1ZFUlNJT05dLCBbJDJdKV0sCiBbX0FNX1NFVF9PUFRJT05TKFskMV0pZG5sCitkbmwgRGlhZ25vc2Ugb2xkLXN0eWxlIEFDX0lOSVQgd2l0aCBuZXctc3R5bGUgQU1fQVVUT01BS0VfSU5JVC4KK200X2lmKAorICBtNF9pZmRlZihbQUNfUEFDS0FHRV9OQU1FXSwgW29rXSk6bTRfaWZkZWYoW0FDX1BBQ0tBR0VfVkVSU0lPTl0sIFtva10pLAorICBbb2s6b2tdLCwKKyAgW200X2ZhdGFsKFtBQ19JTklUIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBwYWNrYWdlIGFuZCB2ZXJzaW9uIGFyZ3VtZW50c10pXSlkbmwKICBBQ19TVUJTVChbUEFDS0FHRV0sIFsnQUNfUEFDS0FHRV9UQVJOQU1FJ10pZG5sCiAgQUNfU1VCU1QoW1ZFUlNJT05dLCBbJ0FDX1BBQ0tBR0VfVkVSU0lPTiddKV0pZG5sCiAKIF9BTV9JRl9PUFRJT04oW25vLWRlZmluZV0sLAotW0FDX0RFRklORV9VTlFVT1RFRChQQUNLQUdFLCAiJFBBQ0tBR0UiLCBbTmFtZSBvZiBwYWNrYWdlXSkKLSBBQ19ERUZJTkVfVU5RVU9URUQoVkVSU0lPTiwgIiRWRVJTSU9OIiwgW1ZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2VdKV0pZG5sCitbQUNfREVGSU5FX1VOUVVPVEVEKFtQQUNLQUdFXSwgWyIkUEFDS0FHRSJdLCBbTmFtZSBvZiBwYWNrYWdlXSkKKyBBQ19ERUZJTkVfVU5RVU9URUQoW1ZFUlNJT05dLCBbIiRWRVJTSU9OIl0sIFtWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlXSldKWRubAogCiAjIFNvbWUgdG9vbHMgQXV0b21ha2UgbmVlZHMuCiBBQ19SRVFVSVJFKFtBTV9TQU5JVFlfQ0hFQ0tdKWRubAogQUNfUkVRVUlSRShbQUNfQVJHX1BST0dSQU1dKWRubAotQU1fTUlTU0lOR19QUk9HKEFDTE9DQUwsIGFjbG9jYWwtJHthbV9fYXBpX3ZlcnNpb259KQotQU1fTUlTU0lOR19QUk9HKEFVVE9DT05GLCBhdXRvY29uZikKLUFNX01JU1NJTkdfUFJPRyhBVVRPTUFLRSwgYXV0b21ha2UtJHthbV9fYXBpX3ZlcnNpb259KQotQU1fTUlTU0lOR19QUk9HKEFVVE9IRUFERVIsIGF1dG9oZWFkZXIpCi1BTV9NSVNTSU5HX1BST0coTUFLRUlORk8sIG1ha2VpbmZvKQotQU1fUFJPR19JTlNUQUxMX1NICi1BTV9QUk9HX0lOU1RBTExfU1RSSVAKLUFDX1JFUVVJUkUoW0FNX1BST0dfTUtESVJfUF0pZG5sCitBTV9NSVNTSU5HX1BST0coW0FDTE9DQUxdLCBbYWNsb2NhbC0ke2FtX19hcGlfdmVyc2lvbn1dKQorQU1fTUlTU0lOR19QUk9HKFtBVVRPQ09ORl0sIFthdXRvY29uZl0pCitBTV9NSVNTSU5HX1BST0coW0FVVE9NQUtFXSwgW2F1dG9tYWtlLSR7YW1fX2FwaV92ZXJzaW9ufV0pCitBTV9NSVNTSU5HX1BST0coW0FVVE9IRUFERVJdLCBbYXV0b2hlYWRlcl0pCitBTV9NSVNTSU5HX1BST0coW01BS0VJTkZPXSwgW21ha2VpbmZvXSkKK0FDX1JFUVVJUkUoW0FNX1BST0dfSU5TVEFMTF9TSF0pZG5sCitBQ19SRVFVSVJFKFtBTV9QUk9HX0lOU1RBTExfU1RSSVBdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19NS0RJUl9QXSlkbmwKKyMgRm9yIGJldHRlciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgVG8gYmUgcmVtb3ZlZCBvbmNlIEF1dG9tYWtlIDEuOS54CisjIGRpZXMgb3V0IGZvciBnb29kLiAgRm9yIG1vcmUgYmFja2dyb3VuZCwgc2VlOgorIyA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2F1dG9tYWtlLzIwMTItMDcvbXNnMDAwMDEuaHRtbD4KKyMgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9hdXRvbWFrZS8yMDEyLTA3L21zZzAwMDE0Lmh0bWw+CitBQ19TVUJTVChbbWtkaXJfcF0sIFsnJChNS0RJUl9QKSddKQogIyBXZSBuZWVkIGF3ayBmb3IgdGhlICJjaGVjayIgdGFyZ2V0LiAgVGhlIHN5c3RlbSAiYXdrIiBpcyBiYWQgb24KICMgc29tZSBwbGF0Zm9ybXMuCiBBQ19SRVFVSVJFKFtBQ19QUk9HX0FXS10pZG5sCiBBQ19SRVFVSVJFKFtBQ19QUk9HX01BS0VfU0VUXSlkbmwKIEFDX1JFUVVJUkUoW0FNX1NFVF9MRUFESU5HX0RPVF0pZG5sCiBfQU1fSUZfT1BUSU9OKFt0YXItdXN0YXJdLCBbX0FNX1BST0dfVEFSKFt1c3Rhcl0pXSwKLSAgICAgICAgICAgICAgW19BTV9JRl9PUFRJT04oW3Rhci1wYXhdLCBbX0FNX1BST0dfVEFSKFtwYXhdKV0sCi0JICAgICAgCQkgICAgIFtfQU1fUFJPR19UQVIoW3Y3XSldKV0pCisJICAgICAgW19BTV9JRl9PUFRJT04oW3Rhci1wYXhdLCBbX0FNX1BST0dfVEFSKFtwYXhdKV0sCisJCQkgICAgIFtfQU1fUFJPR19UQVIoW3Y3XSldKV0pCiBfQU1fSUZfT1BUSU9OKFtuby1kZXBlbmRlbmNpZXNdLCwKIFtBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19DQ10sCi0gICAgICAgICAgICAgICAgICBbX0FNX0RFUEVOREVOQ0lFUyhDQyldLAotICAgICAgICAgICAgICAgICAgW2RlZmluZShbQUNfUFJPR19DQ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRlZm4oW0FDX1BST0dfQ0NdKVtfQU1fREVQRU5ERU5DSUVTKENDKV0pXSlkbmwKKwkJICBbX0FNX0RFUEVOREVOQ0lFUyhbQ0NdKV0sCisJCSAgW200X2RlZmluZShbQUNfUFJPR19DQ10sCisJCQkgICAgIG00X2RlZm4oW0FDX1BST0dfQ0NdKVtfQU1fREVQRU5ERU5DSUVTKFtDQ10pXSldKWRubAogQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ1hYXSwKLSAgICAgICAgICAgICAgICAgIFtfQU1fREVQRU5ERU5DSUVTKENYWCldLAotICAgICAgICAgICAgICAgICAgW2RlZmluZShbQUNfUFJPR19DWFhdLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZuKFtBQ19QUk9HX0NYWF0pW19BTV9ERVBFTkRFTkNJRVMoQ1hYKV0pXSlkbmwKKwkJICBbX0FNX0RFUEVOREVOQ0lFUyhbQ1hYXSldLAorCQkgIFttNF9kZWZpbmUoW0FDX1BST0dfQ1hYXSwKKwkJCSAgICAgbTRfZGVmbihbQUNfUFJPR19DWFhdKVtfQU1fREVQRU5ERU5DSUVTKFtDWFhdKV0pXSlkbmwKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX09CSkNdLAorCQkgIFtfQU1fREVQRU5ERU5DSUVTKFtPQkpDXSldLAorCQkgIFttNF9kZWZpbmUoW0FDX1BST0dfT0JKQ10sCisJCQkgICAgIG00X2RlZm4oW0FDX1BST0dfT0JKQ10pW19BTV9ERVBFTkRFTkNJRVMoW09CSkNdKV0pXSlkbmwKK2RubCBTdXBwb3J0IGZvciBPYmplY3RpdmUgQysrIHdhcyBvbmx5IGludHJvZHVjZWQgaW4gQXV0b2NvbmYgMi42NSwKK2RubCBidXQgd2Ugc3RpbGwgY2F0ZXIgdG8gQXV0b2NvbmYgMi42Mi4KK200X2lmZGVmKFtBQ19QUk9HX09CSkNYWF0sCitbQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfT0JKQ1hYXSwKKwkJICBbX0FNX0RFUEVOREVOQ0lFUyhbT0JKQ1hYXSldLAorCQkgIFttNF9kZWZpbmUoW0FDX1BST0dfT0JKQ1hYXSwKKwkJCSAgICAgbTRfZGVmbihbQUNfUFJPR19PQkpDWFhdKVtfQU1fREVQRU5ERU5DSUVTKFtPQkpDWFhdKV0pXSldKWRubAogXSkKK19BTV9JRl9PUFRJT04oW3NpbGVudC1ydWxlc10sIFtBQ19SRVFVSVJFKFtBTV9TSUxFTlRfUlVMRVNdKV0pZG5sCitkbmwgVGhlICdwYXJhbGxlbC10ZXN0cycgZHJpdmVyIG1heSBuZWVkIHRvIGtub3cgYWJvdXQgRVhFRVhULCBzbyBhZGQgdGhlCitkbmwgJ2FtX19FWEVFWFQnIGNvbmRpdGlvbmFsIGlmIF9BTV9DT01QSUxFUl9FWEVFWFQgd2FzIHNlZW4uICBUaGlzIG1hY3JvCitkbmwgaXMgaG9va2VkIG9udG8gX0FDX0NPTVBJTEVSX0VYRUVYVCBlYXJseSwgc2VlIGJlbG93LgorQUNfQ09ORklHX0NPTU1BTkRTX1BSRShkbmwKK1ttNF9wcm92aWRlX2lmKFtfQU1fQ09NUElMRVJfRVhFRVhUXSwKKyAgW0FNX0NPTkRJVElPTkFMKFthbV9fRVhFRVhUXSwgW3Rlc3QgLW4gIiRFWEVFWFQiXSldKV0pZG5sCiBdKQogCitkbmwgSG9vayBpbnRvICdfQUNfQ09NUElMRVJfRVhFRVhUJyBlYXJseSB0byBsZWFybiBpdHMgZXhwYW5zaW9uLiAgRG8gbm90CitkbmwgYWRkIHRoZSBjb25kaXRpb25hbCByaWdodCBoZXJlLCBhcyBfQUNfQ09NUElMRVJfRVhFRVhUIG1heSBiZSBmdXJ0aGVyCitkbmwgbWFuZ2xlZCBieSBBdXRvY29uZiBhbmQgcnVuIGluIGEgc2hlbGwgY29uZGl0aW9uYWwgc3RhdGVtZW50LgorbTRfZGVmaW5lKFtfQUNfQ09NUElMRVJfRVhFRVhUXSwKK200X2RlZm4oW19BQ19DT01QSUxFUl9FWEVFWFRdKVttNF9wcm92aWRlKFtfQU1fQ09NUElMRVJfRVhFRVhUXSldKQorCiAKICMgV2hlbiBjb25maWcuc3RhdHVzIGdlbmVyYXRlcyBhIGhlYWRlciwgd2UgbXVzdCB1cGRhdGUgdGhlIHN0YW1wLWggZmlsZS4KICMgVGhpcyBmaWxlIHJlc2lkZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBjb25maWcgaGVhZGVyCkBAIC00NjYsMTggKzU0NywxOSBAQAogIyBvdXIgc3RhbXAgZmlsZXMgdGhlcmUuCiBBQ19ERUZVTihbX0FDX0FNX0NPTkZJR19IRUFERVJfSE9PS10sCiBbIyBDb21wdXRlICQxJ3MgaW5kZXggaW4gJGNvbmZpZ19oZWFkZXJzLgorX2FtX2FyZz0kMQogX2FtX3N0YW1wX2NvdW50PTEKIGZvciBfYW1faGVhZGVyIGluICRjb25maWdfaGVhZGVycyA6OyBkbwogICBjYXNlICRfYW1faGVhZGVyIGluCi0gICAgJDEgfCAkMToqICkKKyAgICAkX2FtX2FyZyB8ICRfYW1fYXJnOiogKQogICAgICAgYnJlYWsgOzsKICAgICAqICkKICAgICAgIF9hbV9zdGFtcF9jb3VudD1gZXhwciAkX2FtX3N0YW1wX2NvdW50ICsgMWAgOzsKICAgZXNhYwogZG9uZQotZWNobyAidGltZXN0YW1wIGZvciAkMSIgPmBBU19ESVJOQU1FKFskMV0pYC9zdGFtcC1oW10kX2FtX3N0YW1wX2NvdW50XSkKK2VjaG8gInRpbWVzdGFtcCBmb3IgJF9hbV9hcmciID5gQVNfRElSTkFNRShbIiRfYW1fYXJnIl0pYC9zdGFtcC1oW10kX2FtX3N0YW1wX2NvdW50XSkKIAotIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKQEAgLTQ4OCwxNyArNTcwLDIyIEBACiAjIERlZmluZSAkaW5zdGFsbF9zaC4KIEFDX0RFRlVOKFtBTV9QUk9HX0lOU1RBTExfU0hdLAogW0FDX1JFUVVJUkUoW0FNX0FVWF9ESVJfRVhQQU5EXSlkbmwKLWluc3RhbGxfc2g9JHtpbnN0YWxsX3NoLSIkYW1fYXV4X2Rpci9pbnN0YWxsLXNoIn0KLUFDX1NVQlNUKGluc3RhbGxfc2gpXSkKK2lmIHRlc3QgeCIke2luc3RhbGxfc2h9IiAhPSB4c2V0OyB0aGVuCisgIGNhc2UgJGFtX2F1eF9kaXIgaW4KKyAgKlwgKiB8ICpcCSopCisgICAgaW5zdGFsbF9zaD0iXCR7U0hFTEx9ICckYW1fYXV4X2Rpci9pbnN0YWxsLXNoJyIgOzsKKyAgKikKKyAgICBpbnN0YWxsX3NoPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCIKKyAgZXNhYworZmkKK0FDX1NVQlNUKFtpbnN0YWxsX3NoXSldKQogCi0jIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwMy0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKLSMgc2VyaWFsIDIKLQogIyBDaGVjayB3aGV0aGVyIHRoZSB1bmRlcmx5aW5nIGZpbGUtc3lzdGVtIHN1cHBvcnRzIGZpbGVuYW1lcwogIyB3aXRoIGEgbGVhZGluZyBkb3QuICBGb3IgaW5zdGFuY2UgTVMtRE9TIGRvZXNuJ3QuCiBBQ19ERUZVTihbQU1fU0VUX0xFQURJTkdfRE9UXSwKQEAgLTUxNCwxNCArNjAxLDEyIEBACiAKICMgQ2hlY2sgdG8gc2VlIGhvdyAnbWFrZScgdHJlYXRzIGluY2x1ZGVzLgkgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCiAKLSMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgMwotCiAjIEFNX01BS0VfSU5DTFVERSgpCiAjIC0tLS0tLS0tLS0tLS0tLS0tCiAjIENoZWNrIHRvIHNlZSBob3cgbWFrZSB0cmVhdHMgaW5jbHVkZXMuCkBAIC01MjksNyArNjE0LDcgQEAKIFthbV9tYWtlPSR7TUFLRS1tYWtlfQogY2F0ID4gY29uZmluYyA8PCAnRU5EJwogYW1fX2RvaXQ6Ci0JQGVjaG8gZG9uZQorCUBlY2hvIHRoaXMgaXMgdGhlIGFtX19kb2l0IHRhcmdldAogLlBIT05ZOiBhbV9fZG9pdAogRU5ECiAjIElmIHdlIGRvbid0IGZpbmQgYW4gaW5jbHVkZSBkaXJlY3RpdmUsIGp1c3QgY29tbWVudCBvdXQgdGhlIGNvZGUuCkBAIC01MzksMjQgKzYyNCwyNCBAQAogX2FtX3Jlc3VsdD1ub25lCiAjIEZpcnN0IHRyeSBHTlUgbWFrZSBzdHlsZSBpbmNsdWRlLgogZWNobyAiaW5jbHVkZSBjb25maW5jIiA+IGNvbmZtZgotIyBXZSBncmVwIG91dCBgRW50ZXJpbmcgZGlyZWN0b3J5JyBhbmQgYExlYXZpbmcgZGlyZWN0b3J5JwotIyBtZXNzYWdlcyB3aGljaCBjYW4gb2NjdXIgaWYgYHcnIGVuZHMgdXAgaW4gTUFLRUZMQUdTLgotIyBJbiBwYXJ0aWN1bGFyIHdlIGRvbid0IGxvb2sgYXQgYF5tYWtlOicgYmVjYXVzZSBHTlUgbWFrZSBtaWdodAotIyBiZSBpbnZva2VkIHVuZGVyIHNvbWUgb3RoZXIgbmFtZSAodXN1YWxseSAiZ21ha2UiKSwgaW4gd2hpY2gKLSMgY2FzZSBpdCBwcmludHMgaXRzIG5ldyBuYW1lIGluc3RlYWQgb2YgYG1ha2UnLgotaWYgdGVzdCAiYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGwgfCBncmVwIC12ICdpbmcgZGlyZWN0b3J5J2AiID0gImRvbmUiOyB0aGVuCi0gICBhbV9faW5jbHVkZT1pbmNsdWRlCi0gICBhbV9fcXVvdGU9Ci0gICBfYW1fcmVzdWx0PUdOVQotZmkKKyMgSWdub3JlIGFsbCBraW5kcyBvZiBhZGRpdGlvbmFsIG91dHB1dCBmcm9tICdtYWtlJy4KK2Nhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIGluICMoCisqdGhlXCBhbV9fZG9pdFwgdGFyZ2V0KikKKyAgYW1fX2luY2x1ZGU9aW5jbHVkZQorICBhbV9fcXVvdGU9CisgIF9hbV9yZXN1bHQ9R05VCisgIDs7Citlc2FjCiAjIE5vdyB0cnkgQlNEIG1ha2Ugc3R5bGUgaW5jbHVkZS4KIGlmIHRlc3QgIiRhbV9faW5jbHVkZSIgPSAiIyI7IHRoZW4KICAgIGVjaG8gJy5pbmNsdWRlICJjb25maW5jIicgPiBjb25mbWYKLSAgIGlmIHRlc3QgImAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCIgPSAiZG9uZSI7IHRoZW4KLSAgICAgIGFtX19pbmNsdWRlPS5pbmNsdWRlCi0gICAgICBhbV9fcXVvdGU9IlwiIgotICAgICAgX2FtX3Jlc3VsdD1CU0QKLSAgIGZpCisgICBjYXNlIGAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCBpbiAjKAorICAgKnRoZVwgYW1fX2RvaXRcIHRhcmdldCopCisgICAgIGFtX19pbmNsdWRlPS5pbmNsdWRlCisgICAgIGFtX19xdW90ZT0iXCIiCisgICAgIF9hbV9yZXN1bHQ9QlNECisgICAgIDs7CisgICBlc2FjCiBmaQogQUNfU1VCU1QoW2FtX19pbmNsdWRlXSkKIEFDX1NVQlNUKFthbV9fcXVvdGVdKQpAQCAtNTY0LDE2ICs2NDksNDUgQEAKIHJtIC1mIGNvbmZpbmMgY29uZm1mCiBdKQogCi0jIEZha2UgdGhlIGV4aXN0ZW5jZSBvZiBwcm9ncmFtcyB0aGF0IEdOVSBtYWludGFpbmVycyB1c2UuICAtKi0gQXV0b2NvbmYgLSotCi0KLSMgQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA1Ci0jIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCA0CisjIEFNX1BST0dfQ0NfQ19PCisjIC0tLS0tLS0tLS0tLS0tCisjIExpa2UgQUNfUFJPR19DQ19DX08sIGJ1dCBjaGFuZ2VkIGZvciBhdXRvbWFrZS4KK0FDX0RFRlVOKFtBTV9QUk9HX0NDX0NfT10sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DQ19DX09dKWRubAorQUNfUkVRVUlSRShbQU1fQVVYX0RJUl9FWFBBTkRdKWRubAorQUNfUkVRVUlSRV9BVVhfRklMRShbY29tcGlsZV0pZG5sCisjIEZJWE1FOiB3ZSByZWx5IG9uIHRoZSBjYWNoZSB2YXJpYWJsZSBuYW1lIGJlY2F1c2UKKyMgdGhlcmUgaXMgbm8gb3RoZXIgd2F5Lgorc2V0IGR1bW15ICRDQworYW1fY2M9YGVjaG8gJFsyXSB8IHNlZCBbJ3MvW15hLXpBLVowLTlfXS9fL2c7cy9eWzAtOV0vXy8nXWAKK2V2YWwgYW1fdD1cJGFjX2N2X3Byb2dfY2NfJHthbV9jY31fY19vCitpZiB0ZXN0ICIkYW1fdCIgIT0geWVzOyB0aGVuCisgICAjIExvc2luZyBjb21waWxlciwgc28gb3ZlcnJpZGUgd2l0aCB0aGUgc2NyaXB0LgorICAgIyBGSVhNRTogSXQgaXMgd3JvbmcgdG8gcmV3cml0ZSBDQy4KKyAgICMgQnV0IGlmIHdlIGRvbid0IHRoZW4gd2UgZ2V0IGludG8gdHJvdWJsZSBvZiBvbmUgc29ydCBvciBhbm90aGVyLgorICAgIyBBIGxvbmdlci10ZXJtIGZpeCB3b3VsZCBiZSB0byBoYXZlIGF1dG9tYWtlIHVzZSBhbV9fQ0MgaW4gdGhpcyBjYXNlLAorICAgIyBhbmQgdGhlbiB3ZSBjb3VsZCBzZXQgYW1fX0NDPSJcJCh0b3Bfc3JjZGlyKS9jb21waWxlIFwkKENDKSIKKyAgIENDPSIkYW1fYXV4X2Rpci9jb21waWxlICRDQyIKK2ZpCitkbmwgTWFrZSBzdXJlIEFDX1BST0dfQ0MgaXMgbmV2ZXIgY2FsbGVkIGFnYWluLCBvciBpdCB3aWxsIG92ZXJyaWRlIG91cgorZG5sIHNldHRpbmcgb2YgQ0MuCittNF9kZWZpbmUoW0FDX1BST0dfQ0NdLAorICAgICAgICAgIFttNF9mYXRhbChbQUNfUFJPR19DQyBjYW5ub3QgYmUgY2FsbGVkIGFmdGVyIEFNX1BST0dfQ0NfQ19PXSldKQorXSkKKworIyBGYWtlIHRoZSBleGlzdGVuY2Ugb2YgcHJvZ3JhbXMgdGhhdCBHTlUgbWFpbnRhaW5lcnMgdXNlLiAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5Ny0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKICMgQU1fTUlTU0lOR19QUk9HKE5BTUUsIFBST0dSQU0pCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNTgyLDI0ICs2OTYsMzEgQEAKICQxPSR7JDEtIiR7YW1fbWlzc2luZ19ydW59JDIifQogQUNfU1VCU1QoJDEpXSkKIAotCiAjIEFNX01JU1NJTkdfSEFTX1JVTgogIyAtLS0tLS0tLS0tLS0tLS0tLS0KICMgRGVmaW5lIE1JU1NJTkcgaWYgbm90IGRlZmluZWQgc28gZmFyIGFuZCB0ZXN0IGlmIGl0IHN1cHBvcnRzIC0tcnVuLgogIyBJZiBpdCBkb2VzLCBzZXQgYW1fbWlzc2luZ19ydW4gdG8gdXNlIGl0LCBvdGhlcndpc2UsIHRvIG5vdGhpbmcuCiBBQ19ERUZVTihbQU1fTUlTU0lOR19IQVNfUlVOXSwKIFtBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCi10ZXN0IHgiJHtNSVNTSU5HK3NldH0iID0geHNldCB8fCBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIKK0FDX1JFUVVJUkVfQVVYX0ZJTEUoW21pc3NpbmddKWRubAoraWYgdGVzdCB4IiR7TUlTU0lORytzZXR9IiAhPSB4c2V0OyB0aGVuCisgIGNhc2UgJGFtX2F1eF9kaXIgaW4KKyAgKlwgKiB8ICpcCSopCisgICAgTUlTU0lORz0iXCR7U0hFTEx9IFwiJGFtX2F1eF9kaXIvbWlzc2luZ1wiIiA7OworICAqKQorICAgIE1JU1NJTkc9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9taXNzaW5nIiA7OworICBlc2FjCitmaQogIyBVc2UgZXZhbCB0byBleHBhbmQgJFNIRUxMCiBpZiBldmFsICIkTUlTU0lORyAtLXJ1biB0cnVlIjsgdGhlbgogICBhbV9taXNzaW5nX3J1bj0iJE1JU1NJTkcgLS1ydW4gIgogZWxzZQogICBhbV9taXNzaW5nX3J1bj0KLSAgQUNfTVNHX1dBUk4oW2BtaXNzaW5nJyBzY3JpcHQgaXMgdG9vIG9sZCBvciBtaXNzaW5nXSkKKyAgQUNfTVNHX1dBUk4oWydtaXNzaW5nJyBzY3JpcHQgaXMgdG9vIG9sZCBvciBtaXNzaW5nXSkKIGZpCiBdKQogCi0jIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwMy0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LApAQCAtNjA3LDg3ICs3MjgsNTMgQEAKIAogIyBBTV9QUk9HX01LRElSX1AKICMgLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIHdoZXRoZXIgYG1rZGlyIC1wJyBpcyBzdXBwb3J0ZWQsIGZhbGxiYWNrIHRvIG1raW5zdGFsbGRpcnMgb3RoZXJ3aXNlLgotIwotIyBBdXRvbWFrZSAxLjggdXNlZCBgbWtkaXIgLW0gMDc1NSAtcCAtLScgdG8gZW5zdXJlIHRoYXQgZGlyZWN0b3JpZXMKLSMgY3JlYXRlZCBieSBgbWFrZSBpbnN0YWxsJyBhcmUgYWx3YXlzIHdvcmxkIHJlYWRhYmxlLCBldmVuIGlmIHRoZQotIyBpbnN0YWxsZXIgaGFwcGVucyB0byBoYXZlIGFuIG92ZXJseSByZXN0cmljdGl2ZSB1bWFzayAoZS5nLiAwNzcpLgotIyBUaGlzIHdhcyBhIG1pc3Rha2UuICBUaGVyZSBhcmUgYXQgbGVhc3QgdHdvIHJlYXNvbnMgd2h5IHdlIG11c3Qgbm90Ci0jIHVzZSBgLW0gMDc1NSc6Ci0jICAgLSBpdCBjYXVzZXMgc3BlY2lhbCBiaXRzIGxpa2UgU0dJRCB0byBiZSBpZ25vcmVkLAotIyAgIC0gaXQgbWF5IGJlIHRvbyByZXN0cmljdGl2ZSAoc29tZSBzZXR1cHMgZXhwZWN0IDc3NSBkaXJlY3RvcmllcykuCi0jCi0jIERvIG5vdCB1c2UgLW0gMDc1NSBhbmQgbGV0IHBlb3BsZSBjaG9vc2Ugd2hhdGV2ZXIgdGhleSBleHBlY3QgYnkKLSMgc2V0dGluZyB1bWFzay4KLSMKLSMgV2UgY2Fubm90IGFjY2VwdCBhbnkgaW1wbGVtZW50YXRpb24gb2YgYG1rZGlyJyB0aGF0IHJlY29nbml6ZXMgYC1wJy4KLSMgU29tZSBpbXBsZW1lbnRhdGlvbnMgKHN1Y2ggYXMgU29sYXJpcyA4J3MpIGFyZSBub3QgdGhyZWFkLXNhZmU6IGlmIGEKLSMgcGFyYWxsZWwgbWFrZSB0cmllcyB0byBydW4gYG1rZGlyIC1wIGEvYicgYW5kIGBta2RpciAtcCBhL2MnCi0jIGNvbmN1cnJlbnRseSwgYm90aCB2ZXJzaW9uIGNhbiBkZXRlY3QgdGhhdCBhLyBpcyBtaXNzaW5nLCBidXQgb25seQotIyBvbmUgY2FuIGNyZWF0ZSBpdCBhbmQgdGhlIG90aGVyIHdpbGwgZXJyb3Igb3V0LiAgQ29uc2VxdWVudGx5IHdlCi0jIHJlc3RyaWN0IG91cnNlbHZlcyB0byBHTlUgbWFrZSAodXNpbmcgdGhlIC0tdmVyc2lvbiBvcHRpb24gZW5zdXJlcwotIyB0aGlzLikKKyMgQ2hlY2sgZm9yICdta2RpciAtcCcuCiBBQ19ERUZVTihbQU1fUFJPR19NS0RJUl9QXSwKLVtpZiBta2RpciAtcCAtLXZlcnNpb24gLiA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAhIC1kIC4vLS12ZXJzaW9uOyB0aGVuCi0gICMgV2UgdXNlZCB0byBrZWVwaW5nIHRoZSBgLicgYXMgZmlyc3QgYXJndW1lbnQsIGluIG9yZGVyIHRvCi0gICMgYWxsb3cgJChta2Rpcl9wKSB0byBiZSB1c2VkIHdpdGhvdXQgYXJndW1lbnQuICBBcyBpbgotICAjICAgJChta2Rpcl9wKSAkKHNvbWVkaXIpCi0gICMgd2hlcmUgJChzb21lZGlyKSBpcyBjb25kaXRpb25hbGx5IGRlZmluZWQuICBIb3dldmVyIHRoaXMgaXMgd3JvbmcKLSAgIyBmb3IgdHdvIHJlYXNvbnM6Ci0gICMgIDEuIGlmIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZCBieSBhIHVzZXIgd2hvIGNhbm5vdCB3cml0ZSBgLicKLSAgIyAgICAgbWFrZSBpbnN0YWxsIHdpbGwgZmFpbCwKLSAgIyAgMi4gdGhlIGFib3ZlIGNvbW1lbnQgc2hvdWxkIG1vc3QgY2VydGFpbmx5IHJlYWQKLSAgIyAgICAgJChta2Rpcl9wKSAkKERFU1RESVIpJChzb21lZGlyKQotICAjICAgICBzbyBpdCBkb2VzIG5vdCB3b3JrIHdoZW4gJChzb21lZGlyKSBpcyB1bmRlZmluZWQgYW5kCi0gICMgICAgICQoREVTVERJUikgaXMgbm90LgotICAjICBUbyBzdXBwb3J0IHRoZSBsYXR0ZXIgY2FzZSwgd2UgaGF2ZSB0byB3cml0ZQotICAjICAgICB0ZXN0IC16ICIkKHNvbWVkaXIpIiB8fCAkKG1rZGlyX3ApICQoREVTVERJUikkKHNvbWVkaXIpLAotICAjICBzbyB0aGUgYC4nIHRyaWNrIGlzIHBvaW50bGVzcy4KLSAgbWtkaXJfcD0nbWtkaXIgLXAgLS0nCi1lbHNlCi0gICMgT24gTmV4dFN0ZXAgYW5kIE9wZW5TdGVwLCB0aGUgYG1rZGlyJyBjb21tYW5kIGRvZXMgbm90Ci0gICMgcmVjb2duaXplIGFueSBvcHRpb24uICBJdCB3aWxsIGludGVycHJldCBhbGwgb3B0aW9ucyBhcwotICAjIGRpcmVjdG9yaWVzIHRvIGNyZWF0ZSwgYW5kIHRoZW4gYWJvcnQgYmVjYXVzZSBgLicgYWxyZWFkeQotICAjIGV4aXN0cy4KLSAgZm9yIGQgaW4gLi8tcCAuLy0tdmVyc2lvbjsKLSAgZG8KLSAgICB0ZXN0IC1kICRkICYmIHJtZGlyICRkCi0gIGRvbmUKLSAgIyAkKG1raW5zdGFsbGRpcnMpIGlzIGRlZmluZWQgYnkgQXV0b21ha2UgaWYgbWtpbnN0YWxsZGlycyBleGlzdHMuCi0gIGlmIHRlc3QgLWYgIiRhY19hdXhfZGlyL21raW5zdGFsbGRpcnMiOyB0aGVuCi0gICAgbWtkaXJfcD0nJChta2luc3RhbGxkaXJzKScKLSAgZWxzZQotICAgIG1rZGlyX3A9JyQoaW5zdGFsbF9zaCkgLWQnCi0gIGZpCi1maQotQUNfU1VCU1QoW21rZGlyX3BdKV0pCitbQUNfUFJFUkVRKFsyLjYwXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfTUtESVJfUF0pZG5sCitkbmwgRklYTUUgdG8gYmUgcmVtb3ZlZCBpbiBBdXRvbWFrZSAxLjEzLgorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogdGhpcyBtYWNybyBpcyBkZXByZWNhdGVkLCBhbmQgd2lsbCBzb29uIGJlIHJlbW92ZWQuCitZb3Ugc2hvdWxkIHVzZSB0aGUgQXV0b2NvbmYtcHJvdmlkZWQgJ0FDXVtfUFJPR19NS0RJUl9QJyBtYWNybyBpbnN0ZWFkLAorYW5kIHVzZSAnJChNS0RJUl9QKScgaW5zdGVhZCBvZiAnJChta2Rpcl9wKSdpbiB5b3VyIE1ha2VmaWxlLmFtIGZpbGVzLl0pCitkbmwgQXV0b21ha2UgMS44IHRvIDEuOS42IHVzZWQgdG8gZGVmaW5lIG1rZGlyX3AuICBXZSBub3cgdXNlIE1LRElSX1AsCitkbmwgd2hpbGUga2VlcGluZyBhIGRlZmluaXRpb24gb2YgbWtkaXJfcCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KK2RubCBATUtESVJfUEAgaXMgbWFnaWM6IEFDX09VVFBVVCBhZGp1c3RzIGl0cyB2YWx1ZSBmb3IgZWFjaCBNYWtlZmlsZS4KK2RubCBIb3dldmVyIHdlIGNhbm5vdCBkZWZpbmUgbWtkaXJfcCBhcyAkKE1LRElSX1ApIGZvciB0aGUgc2FrZSBvZgorZG5sIE1ha2VmaWxlLmlucyB0aGF0IGRvIG5vdCBkZWZpbmUgTUtESVJfUCwgc28gd2UgZG8gb3VyIG93bgorZG5sIGFkanVzdG1lbnQgdXNpbmcgdG9wX2J1aWxkZGlyICh3aGljaCBpcyBkZWZpbmVkIG1vcmUgb2Z0ZW4gdGhhbgorZG5sIE1LRElSX1ApLgorQUNfU1VCU1QoW21rZGlyX3BdLCBbIiRNS0RJUl9QIl0pZG5sCitjYXNlICRta2Rpcl9wIGluCisgIFtbXFwvJF1dKiB8ID86W1tcXC9dXSopIDs7CisgICovKikgbWtkaXJfcD0iXCQodG9wX2J1aWxkZGlyKS8kbWtkaXJfcCIgOzsKK2VzYWMKK10pCiAKICMgSGVscGVyIGZ1bmN0aW9ucyBmb3Igb3B0aW9uIGhhbmRsaW5nLiAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KIAotIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCAzCi0KICMgX0FNX01BTkdMRV9PUFRJT04oTkFNRSkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEFDX0RFRlVOKFtfQU1fTUFOR0xFX09QVElPTl0sCiBbW19BTV9PUFRJT05fXW00X2JwYXRzdWJzdCgkMSwgW1teYS16QS1aMC05X11dLCBbX10pXSkKIAogIyBfQU1fU0VUX09QVElPTihOQU1FKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgU2V0IG9wdGlvbiBOQU1FLiAgUHJlc2VudGx5IHRoYXQgb25seSBtZWFucyBkZWZpbmluZyBhIGZsYWcgZm9yIHRoaXMgb3B0aW9uLgogQUNfREVGVU4oW19BTV9TRVRfT1BUSU9OXSwKLVttNF9kZWZpbmUoX0FNX01BTkdMRV9PUFRJT04oWyQxXSksIDEpXSkKK1ttNF9kZWZpbmUoX0FNX01BTkdMRV9PUFRJT04oWyQxXSksIFsxXSldKQogCiAjIF9BTV9TRVRfT1BUSU9OUyhPUFRJT05TKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBPUFRJT05TIGlzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgQXV0b21ha2Ugb3B0aW9ucy4KIEFDX0RFRlVOKFtfQU1fU0VUX09QVElPTlNdLAotW0FDX0ZPUkVBQ0goW19BTV9PcHRpb25dLCBbJDFdLCBbX0FNX1NFVF9PUFRJT04oX0FNX09wdGlvbildKV0pCitbbTRfZm9yZWFjaF93KFtfQU1fT3B0aW9uXSwgWyQxXSwgW19BTV9TRVRfT1BUSU9OKF9BTV9PcHRpb24pXSldKQogCiAjIF9BTV9JRl9PUFRJT04oT1BUSU9OLCBJRi1TRVQsIFtJRi1OT1QtU0VUXSkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNjk3LDQ1ICs3ODQsNjAgQEAKIAogIyBDaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZS4gICAgLSotIEF1dG9jb25mIC0qLQogCi0jIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMjAwMCwgMjAwMSwgMjAwMywgMjAwNQotIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgNAotCiAjIEFNX1NBTklUWV9DSEVDSwogIyAtLS0tLS0tLS0tLS0tLS0KIEFDX0RFRlVOKFtBTV9TQU5JVFlfQ0hFQ0tdLAogW0FDX01TR19DSEVDS0lORyhbd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lXSkKLSMgSnVzdCBpbiBjYXNlCi1zbGVlcCAxCi1lY2hvIHRpbWVzdGFtcCA+IGNvbmZ0ZXN0LmZpbGUKLSMgRG8gYHNldCcgaW4gYSBzdWJzaGVsbCBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBjdXJyZW50IHNoZWxsJ3MKKyMgUmVqZWN0IHVuc2FmZSBjaGFyYWN0ZXJzIGluICRzcmNkaXIgb3IgdGhlIGFic29sdXRlIHdvcmtpbmcgZGlyZWN0b3J5CisjIG5hbWUuICBBY2NlcHQgc3BhY2UgYW5kIHRhYiBvbmx5IGluIHRoZSBsYXR0ZXIuCithbV9sZj0nCisnCitjYXNlIGBwd2RgIGluCisgICpbW1xcXCJcI1wkXCZcJ1xgJGFtX2xmXV0qKQorICAgIEFDX01TR19FUlJPUihbdW5zYWZlIGFic29sdXRlIHdvcmtpbmcgZGlyZWN0b3J5IG5hbWVdKTs7Citlc2FjCitjYXNlICRzcmNkaXIgaW4KKyAgKltbXFxcIlwjXCRcJlwnXGAkYW1fbGZcIFwJXV0qKQorICAgIEFDX01TR19FUlJPUihbdW5zYWZlIHNyY2RpciB2YWx1ZTogJyRzcmNkaXInXSk7OworZXNhYworCisjIERvICdzZXQnIGluIGEgc3Vic2hlbGwgc28gd2UgZG9uJ3QgY2xvYmJlciB0aGUgY3VycmVudCBzaGVsbCdzCiAjIGFyZ3VtZW50cy4gIE11c3QgdHJ5IC1MIGZpcnN0IGluIGNhc2UgY29uZmlndXJlIGlzIGFjdHVhbGx5IGEKICMgc3ltbGluazsgc29tZSBzeXN0ZW1zIHBsYXkgd2VpcmQgZ2FtZXMgd2l0aCB0aGUgbW9kIHRpbWUgb2Ygc3ltbGlua3MKICMgKGVnIEZyZWVCU0QgcmV0dXJucyB0aGUgbW9kIHRpbWUgb2YgdGhlIHN5bWxpbmsncyBjb250YWluaW5nCiAjIGRpcmVjdG9yeSkuCiBpZiAoCi0gICBzZXQgWCBgbHMgLUx0ICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGUgMj4gL2Rldi9udWxsYAotICAgaWYgdGVzdCAiJFsqXSIgPSAiWCI7IHRoZW4KLSAgICAgICMgLUwgZGlkbid0IHdvcmsuCi0gICAgICBzZXQgWCBgbHMgLXQgJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZWAKLSAgIGZpCi0gICBybSAtZiBjb25mdGVzdC5maWxlCi0gICBpZiB0ZXN0ICIkWypdIiAhPSAiWCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlIiBcCi0gICAgICAmJiB0ZXN0ICIkWypdIiAhPSAiWCBjb25mdGVzdC5maWxlICRzcmNkaXIvY29uZmlndXJlIjsgdGhlbgorICAgYW1faGFzX3NsZXB0PW5vCisgICBmb3IgYW1fdHJ5IGluIDEgMjsgZG8KKyAgICAgZWNobyAidGltZXN0YW1wLCBzbGVwdDogJGFtX2hhc19zbGVwdCIgPiBjb25mdGVzdC5maWxlCisgICAgIHNldCBYIGBscyAtTHQgIiRzcmNkaXIvY29uZmlndXJlIiBjb25mdGVzdC5maWxlIDI+IC9kZXYvbnVsbGAKKyAgICAgaWYgdGVzdCAiJFsqXSIgPSAiWCI7IHRoZW4KKwkjIC1MIGRpZG4ndCB3b3JrLgorCXNldCBYIGBscyAtdCAiJHNyY2Rpci9jb25maWd1cmUiIGNvbmZ0ZXN0LmZpbGVgCisgICAgIGZpCisgICAgIGlmIHRlc3QgIiRbKl0iICE9ICJYICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGUiIFwKKwkmJiB0ZXN0ICIkWypdIiAhPSAiWCBjb25mdGVzdC5maWxlICRzcmNkaXIvY29uZmlndXJlIjsgdGhlbgogCi0gICAgICAjIElmIG5laXRoZXIgbWF0Y2hlZCwgdGhlbiB3ZSBoYXZlIGEgYnJva2VuIGxzLiAgVGhpcyBjYW4gaGFwcGVuCi0gICAgICAjIGlmLCBmb3IgaW5zdGFuY2UsIENPTkZJR19TSEVMTCBpcyBiYXNoIGFuZCBpdCBpbmhlcml0cyBhCi0gICAgICAjIGJyb2tlbiBscyBhbGlhcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4gIFRoaXMgaGFzIGFjdHVhbGx5Ci0gICAgICAjIGhhcHBlbmVkLiAgU3VjaCBhIHN5c3RlbSBjb3VsZCBub3QgYmUgY29uc2lkZXJlZCAic2FuZSIuCi0gICAgICBBQ19NU0dfRVJST1IoW2xzIC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4KLWFsaWFzIGluIHlvdXIgZW52aXJvbm1lbnRdKQotICAgZmkKLQorCSMgSWYgbmVpdGhlciBtYXRjaGVkLCB0aGVuIHdlIGhhdmUgYSBicm9rZW4gbHMuICBUaGlzIGNhbiBoYXBwZW4KKwkjIGlmLCBmb3IgaW5zdGFuY2UsIENPTkZJR19TSEVMTCBpcyBiYXNoIGFuZCBpdCBpbmhlcml0cyBhCisJIyBicm9rZW4gbHMgYWxpYXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuICBUaGlzIGhhcyBhY3R1YWxseQorCSMgaGFwcGVuZWQuICBTdWNoIGEgc3lzdGVtIGNvdWxkIG5vdCBiZSBjb25zaWRlcmVkICJzYW5lIi4KKwlBQ19NU0dfRVJST1IoW2xzIC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4KKyAgYWxpYXMgaW4geW91ciBlbnZpcm9ubWVudF0pCisgICAgIGZpCisgICAgIGlmIHRlc3QgIiRbMl0iID0gY29uZnRlc3QuZmlsZSB8fCB0ZXN0ICRhbV90cnkgLWVxIDI7IHRoZW4KKyAgICAgICBicmVhaworICAgICBmaQorICAgICAjIEp1c3QgaW4gY2FzZS4KKyAgICAgc2xlZXAgMQorICAgICBhbV9oYXNfc2xlcHQ9eWVzCisgICBkb25lCiAgICB0ZXN0ICIkWzJdIiA9IGNvbmZ0ZXN0LmZpbGUKICAgICkKIHRoZW4KQEAgLTc0NSw5ICs4NDcsODUgQEAKICAgIEFDX01TR19FUlJPUihbbmV3bHkgY3JlYXRlZCBmaWxlIGlzIG9sZGVyIHRoYW4gZGlzdHJpYnV0ZWQgZmlsZXMhCiBDaGVjayB5b3VyIHN5c3RlbSBjbG9ja10pCiBmaQotQUNfTVNHX1JFU1VMVCh5ZXMpXSkKK0FDX01TR19SRVNVTFQoW3llc10pCisjIElmIHdlIGRpZG4ndCBzbGVlcCwgd2Ugc3RpbGwgbmVlZCB0byBlbnN1cmUgdGltZSBzdGFtcHMgb2YgY29uZmlnLnN0YXR1cyBhbmQKKyMgZ2VuZXJhdGVkIGZpbGVzIGFyZSBzdHJpY3RseSBuZXdlci4KK2FtX3NsZWVwX3BpZD0KK2lmIGdyZXAgJ3NsZXB0OiBubycgY29uZnRlc3QuZmlsZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgKCBzbGVlcCAxICkgJgorICBhbV9zbGVlcF9waWQ9JCEKK2ZpCitBQ19DT05GSUdfQ09NTUFORFNfUFJFKAorICBbQUNfTVNHX0NIRUNLSU5HKFt0aGF0IGdlbmVyYXRlZCBmaWxlcyBhcmUgbmV3ZXIgdGhhbiBjb25maWd1cmVdKQorICAgaWYgdGVzdCAtbiAiJGFtX3NsZWVwX3BpZCI7IHRoZW4KKyAgICAgIyBIaWRlIHdhcm5pbmdzIGFib3V0IHJldXNlZCBQSURzLgorICAgICB3YWl0ICRhbV9zbGVlcF9waWQgMj4vZGV2L251bGwKKyAgIGZpCisgICBBQ19NU0dfUkVTVUxUKFtkb25lXSldKQorcm0gLWYgY29uZnRlc3QuZmlsZQorXSkKIAotIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEFNX1NJTEVOVF9SVUxFUyhbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuYWJsZSBsZXNzIHZlcmJvc2UgYnVpbGQgcnVsZXM7IHdpdGggdGhlIGRlZmF1bHQgc2V0IHRvIERFRkFVTFQKKyMgKCJ5ZXMiIGJlaW5nIGxlc3MgdmVyYm9zZSwgIm5vIiBvciBlbXB0eSBiZWluZyB2ZXJib3NlKS4KK0FDX0RFRlVOKFtBTV9TSUxFTlRfUlVMRVNdLAorW0FDX0FSR19FTkFCTEUoW3NpbGVudC1ydWxlc10sIFtkbmwKK0FTX0hFTFBfU1RSSU5HKAorICBbLS1lbmFibGUtc2lsZW50LXJ1bGVzXSwKKyAgW2xlc3MgdmVyYm9zZSBidWlsZCBvdXRwdXQgKHVuZG86ICJtYWtlIFY9MSIpXSkKK0FTX0hFTFBfU1RSSU5HKAorICBbLS1kaXNhYmxlLXNpbGVudC1ydWxlc10sCisgIFt2ZXJib3NlIGJ1aWxkIG91dHB1dCAodW5kbzogIm1ha2UgVj0wIildKWRubAorXSkKK2Nhc2UgJGVuYWJsZV9zaWxlbnRfcnVsZXMgaW4gQCU6QCAoKCgKKyAgeWVzKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0wOzsKKyAgIG5vKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0xOzsKKyAgICAqKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT1tNF9pZihbJDFdLCBbeWVzXSwgWzBdLCBbMV0pOzsKK2VzYWMKK2RubAorZG5sIEEgZmV3ICdtYWtlJyBpbXBsZW1lbnRhdGlvbnMgKGUuZy4sIE5vblN0b3AgT1MgYW5kIE5leHRTdGVwKQorZG5sIGRvIG5vdCBzdXBwb3J0IG5lc3RlZCB2YXJpYWJsZSBleHBhbnNpb25zLgorZG5sIFNlZSBhdXRvbWFrZSBidWcjOTkyOCBhbmQgYnVnIzEwMjM3LgorYW1fbWFrZT0ke01BS0UtbWFrZX0KK0FDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyICRhbV9tYWtlIHN1cHBvcnRzIG5lc3RlZCB2YXJpYWJsZXNdLAorICAgW2FtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzXSwKKyAgIFtpZiBBU19FQ0hPKFtbJ1RSVUU9JChCQVIkKFYpKQorQkFSMD1mYWxzZQorQkFSMT10cnVlCitWPTEKK2FtX19kb2l0OgorCUAkKFRSVUUpCisuUEhPTlk6IGFtX19kb2l0J11dKSB8ICRhbV9tYWtlIC1mIC0gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzPXllcworZWxzZQorICBhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcz1ubworZmldKQoraWYgdGVzdCAkYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMgPSB5ZXM7IHRoZW4KKyAgZG5sIFVzaW5nICckVicgaW5zdGVhZCBvZiAnJChWKScgYnJlYWtzIElSSVggbWFrZS4KKyAgQU1fVj0nJChWKScKKyAgQU1fREVGQVVMVF9WPSckKEFNX0RFRkFVTFRfVkVSQk9TSVRZKScKK2Vsc2UKKyAgQU1fVj0kQU1fREVGQVVMVF9WRVJCT1NJVFkKKyAgQU1fREVGQVVMVF9WPSRBTV9ERUZBVUxUX1ZFUkJPU0lUWQorZmkKK0FDX1NVQlNUKFtBTV9WXSlkbmwKK0FNX1NVQlNUX05PVE1BS0UoW0FNX1ZdKWRubAorQUNfU1VCU1QoW0FNX0RFRkFVTFRfVl0pZG5sCitBTV9TVUJTVF9OT1RNQUtFKFtBTV9ERUZBVUxUX1ZdKWRubAorQUNfU1VCU1QoW0FNX0RFRkFVTFRfVkVSQk9TSVRZXSlkbmwKK0FNX0JBQ0tTTEFTSD0nXCcKK0FDX1NVQlNUKFtBTV9CQUNLU0xBU0hdKWRubAorX0FNX1NVQlNUX05PVE1BS0UoW0FNX0JBQ0tTTEFTSF0pZG5sCitdKQorCisjIENvcHlyaWdodCAoQykgMjAwMS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LApAQCAtNzU1LDQwICs5MzMsNTUgQEAKIAogIyBBTV9QUk9HX0lOU1RBTExfU1RSSVAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIE9uZSBpc3N1ZSB3aXRoIHZlbmRvciBgaW5zdGFsbCcgKGV2ZW4gR05VKSBpcyB0aGF0IHlvdSBjYW4ndAorIyBPbmUgaXNzdWUgd2l0aCB2ZW5kb3IgJ2luc3RhbGwnIChldmVuIEdOVSkgaXMgdGhhdCB5b3UgY2FuJ3QKICMgc3BlY2lmeSB0aGUgcHJvZ3JhbSB1c2VkIHRvIHN0cmlwIGJpbmFyaWVzLiAgVGhpcyBpcyBlc3BlY2lhbGx5CiAjIGFubm95aW5nIGluIGNyb3NzLWNvbXBpbGluZyBlbnZpcm9ubWVudHMsIHdoZXJlIHRoZSBidWlsZCdzIHN0cmlwCiAjIGlzIHVubGlrZWx5IHRvIGhhbmRsZSB0aGUgaG9zdCdzIGJpbmFyaWVzLgogIyBGb3J0dW5hdGVseSBpbnN0YWxsLXNoIHdpbGwgaG9ub3IgYSBTVFJJUFBST0cgdmFyaWFibGUsIHNvIHdlCi0jIGFsd2F5cyB1c2UgaW5zdGFsbC1zaCBpbiBgbWFrZSBpbnN0YWxsLXN0cmlwJywgYW5kIGluaXRpYWxpemUKKyMgYWx3YXlzIHVzZSBpbnN0YWxsLXNoIGluICJtYWtlIGluc3RhbGwtc3RyaXAiLCBhbmQgaW5pdGlhbGl6ZQogIyBTVFJJUFBST0cgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIFNUUklQIHZhcmlhYmxlIChzZXQgYnkgdGhlIHVzZXIpLgogQUNfREVGVU4oW0FNX1BST0dfSU5TVEFMTF9TVFJJUF0sCiBbQUNfUkVRVUlSRShbQU1fUFJPR19JTlNUQUxMX1NIXSlkbmwKLSMgSW5zdGFsbGVkIGJpbmFyaWVzIGFyZSB1c3VhbGx5IHN0cmlwcGVkIHVzaW5nIGBzdHJpcCcgd2hlbiB0aGUgdXNlcgotIyBydW4gYG1ha2UgaW5zdGFsbC1zdHJpcCcuICBIb3dldmVyIGBzdHJpcCcgbWlnaHQgbm90IGJlIHRoZSByaWdodAorIyBJbnN0YWxsZWQgYmluYXJpZXMgYXJlIHVzdWFsbHkgc3RyaXBwZWQgdXNpbmcgJ3N0cmlwJyB3aGVuIHRoZSB1c2VyCisjIHJ1biAibWFrZSBpbnN0YWxsLXN0cmlwIi4gIEhvd2V2ZXIgJ3N0cmlwJyBtaWdodCBub3QgYmUgdGhlIHJpZ2h0CiAjIHRvb2wgdG8gdXNlIGluIGNyb3NzLWNvbXBpbGF0aW9uIGVudmlyb25tZW50cywgdGhlcmVmb3JlIEF1dG9tYWtlCi0jIHdpbGwgaG9ub3IgdGhlIGBTVFJJUCcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gb3ZlcnJ1bGUgdGhpcyBwcm9ncmFtLgotZG5sIERvbid0IHRlc3QgZm9yICRjcm9zc19jb21waWxpbmcgPSB5ZXMsIGJlY2F1c2UgaXQgbWlnaHQgYmUgYG1heWJlJy4KKyMgd2lsbCBob25vciB0aGUgJ1NUUklQJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBvdmVycnVsZSB0aGlzIHByb2dyYW0uCitkbmwgRG9uJ3QgdGVzdCBmb3IgJGNyb3NzX2NvbXBpbGluZyA9IHllcywgYmVjYXVzZSBpdCBtaWdodCBiZSAnbWF5YmUnLgogaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0gbm87IHRoZW4KICAgQUNfQ0hFQ0tfVE9PTChbU1RSSVBdLCBbc3RyaXBdLCA6KQogZmkKLUlOU1RBTExfU1RSSVBfUFJPR1JBTT0iXCR7U0hFTEx9IFwkKGluc3RhbGxfc2gpIC1jIC1zIgorSU5TVEFMTF9TVFJJUF9QUk9HUkFNPSJcJChpbnN0YWxsX3NoKSAtYyAtcyIKIEFDX1NVQlNUKFtJTlNUQUxMX1NUUklQX1BST0dSQU1dKV0pCiAKLSMgQ2hlY2sgaG93IHRvIGNyZWF0ZSBhIHRhcmJhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KLQotIyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCAyCisjIF9BTV9TVUJTVF9OT1RNQUtFKFZBUklBQkxFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJldmVudCBBdXRvbWFrZSBmcm9tIG91dHB1dHRpbmcgVkFSSUFCTEUgPSBAVkFSSUFCTEVAIGluIE1ha2VmaWxlLmluLgorIyBUaGlzIG1hY3JvIGlzIHRyYWNlZCBieSBBdXRvbWFrZS4KK0FDX0RFRlVOKFtfQU1fU1VCU1RfTk9UTUFLRV0pCisKKyMgQU1fU1VCU1RfTk9UTUFLRShWQVJJQUJMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHVibGljIHNpc3RlciBvZiBfQU1fU1VCU1RfTk9UTUFLRS4KK0FDX0RFRlVOKFtBTV9TVUJTVF9OT1RNQUtFXSwgW19BTV9TVUJTVF9OT1RNQUtFKCRAKV0pCisKKyMgQ2hlY2sgaG93IHRvIGNyZWF0ZSBhIHRhcmJhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCiAjIF9BTV9QUk9HX1RBUihGT1JNQVQpCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIENoZWNrIGhvdyB0byBjcmVhdGUgYSB0YXJiYWxsIGluIGZvcm1hdCBGT1JNQVQuCi0jIEZPUk1BVCBzaG91bGQgYmUgb25lIG9mIGB2NycsIGB1c3RhcicsIG9yIGBwYXgnLgorIyBGT1JNQVQgc2hvdWxkIGJlIG9uZSBvZiAndjcnLCAndXN0YXInLCBvciAncGF4Jy4KICMKICMgU3Vic3RpdHV0ZSBhIHZhcmlhYmxlICQoYW1fX3RhcikgdGhhdCBpcyBhIGNvbW1hbmQKICMgd3JpdGluZyB0byBzdGRvdXQgYSBGT1JNQVQtdGFyYmFsbCBjb250YWluaW5nIHRoZSBkaXJlY3RvcnkKQEAgLTc5OSwxMCArOTkyLDExIEBACiAjIGEgdGFyYmFsbCByZWFkIGZyb20gc3RkaW4uCiAjICAgICAkKGFtX191bnRhcikgPCByZXN1bHQudGFyCiBBQ19ERUZVTihbX0FNX1BST0dfVEFSXSwKLVsjIEFsd2F5cyBkZWZpbmUgQU1UQVIgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCi1BTV9NSVNTSU5HX1BST0coW0FNVEFSXSwgW3Rhcl0pCitbIyBBbHdheXMgZGVmaW5lIEFNVEFSIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgWWVzLCBpdCdzIHN0aWxsIHVzZWQKKyMgaW4gdGhlIHdpbGQgOi0oICBXZSBzaG91bGQgZmluZCBhIHByb3BlciB3YXkgdG8gZGVwcmVjYXRlIGl0IC4uLgorQUNfU1VCU1QoW0FNVEFSXSwgWyckJHtUQVItdGFyfSddKQogbTRfaWYoWyQxXSwgW3Y3XSwKLSAgICAgW2FtX190YXI9JyR7QU1UQVJ9IGNob2YgLSAiJCR0YXJkaXIiJzsgYW1fX3VudGFyPScke0FNVEFSfSB4ZiAtJ10sCisgICAgIFthbV9fdGFyPSckJHtUQVItdGFyfSBjaG9mIC0gIiQkdGFyZGlyIicgYW1fX3VudGFyPSckJHtUQVItdGFyfSB4ZiAtJ10sCiAgICAgIFttNF9jYXNlKFskMV0sIFt1c3Rhcl0sLCBbcGF4XSwsCiAgICAgICAgICAgICAgIFttNF9mYXRhbChbVW5rbm93biB0YXIgZm9ybWF0XSldKQogQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gY3JlYXRlIGEgJDEgdGFyIGFyY2hpdmVdKQpAQCAtODEwLDcgKzEwMDQsNyBAQAogX2FtX3Rvb2xzPSdnbnV0YXIgbTRfaWYoWyQxXSwgW3VzdGFyXSwgW3BsYWludGFyXSkgcGF4IGNwaW8gbm9uZScKIF9hbV90b29scz0ke2FtX2N2X3Byb2dfdGFyXyQxLSRfYW1fdG9vbHN9CiAjIERvIG5vdCBmb2xkIHRoZSBhYm92ZSB0d28gbGluZSBpbnRvIG9uZSwgYmVjYXVzZSBUcnU2NCBzaCBhbmQKLSMgU29sYXJpcyBzaCB3aWxsIG5vdCBncm9rIHNwYWNlcyBpbiB0aGUgcmhzIG9mIGAtJy4KKyMgU29sYXJpcyBzaCB3aWxsIG5vdCBncm9rIHNwYWNlcyBpbiB0aGUgcmhzIG9mICctJy4KIGZvciBfYW1fdG9vbCBpbiAkX2FtX3Rvb2xzCiBkbwogICBjYXNlICRfYW1fdG9vbCBpbgpAQCAtODcxLDU0ICsxMDY1LDE3MSBAQAogQUNfU1VCU1QoW2FtX191bnRhcl0pCiBdKSAjIF9BTV9QUk9HX1RBUgogCittNF9pbmNsdWRlKFttNC8wMGdudWxpYi5tNF0pCittNF9pbmNsdWRlKFttNC9hbGxvY2EubTRdKQorbTRfaW5jbHVkZShbbTQvYXNtLXVuZGVyc2NvcmUubTRdKQorbTRfaW5jbHVkZShbbTQvYXNzZXJ0Lm00XSkKIG00X2luY2x1ZGUoW200L2Jpc29uLWkxOG4ubTRdKQogbTRfaW5jbHVkZShbbTQvYy13b3JraW5nLm00XSkKK200X2luY2x1ZGUoW200L2NhbGxvYy5tNF0pCittNF9pbmNsdWRlKFttNC9jbG9zZS1zdHJlYW0ubTRdKQorbTRfaW5jbHVkZShbbTQvY2xvc2UubTRdKQorbTRfaW5jbHVkZShbbTQvY2xvc2VvdXQubTRdKQorbTRfaW5jbHVkZShbbTQvY29kZXNldC5tNF0pCittNF9pbmNsdWRlKFttNC9jb25maWctaC5tNF0pCittNF9pbmNsdWRlKFttNC9jb25maWdtYWtlLm00XSkKIG00X2luY2x1ZGUoW200L2N4eC5tNF0pCiBtNF9pbmNsdWRlKFttNC9kaXJuYW1lLm00XSkKIG00X2luY2x1ZGUoW200L2RtYWxsb2MubTRdKQotbTRfaW5jbHVkZShbbTQvZG9zLm00XSkKK200X2luY2x1ZGUoW200L2RvdWJsZS1zbGFzaC1yb290Lm00XSkKK200X2luY2x1ZGUoW200L2R1cDIubTRdKQorbTRfaW5jbHVkZShbbTQvZW52aXJvbi5tNF0pCittNF9pbmNsdWRlKFttNC9lcnJub19oLm00XSkKIG00X2luY2x1ZGUoW200L2Vycm9yLm00XSkKLW00X2luY2x1ZGUoW200L2V4aXRmYWlsLm00XSkKK200X2luY2x1ZGUoW200L2V4cG9uZW50ZC5tNF0pCittNF9pbmNsdWRlKFttNC9leHBvbmVudGYubTRdKQorbTRfaW5jbHVkZShbbTQvZXhwb25lbnRsLm00XSkKIG00X2luY2x1ZGUoW200L2V4dGVuc2lvbnMubTRdKQorbTRfaW5jbHVkZShbbTQvZXh0ZXJuLWlubGluZS5tNF0pCittNF9pbmNsdWRlKFttNC9mYXRhbC1zaWduYWwubTRdKQorbTRfaW5jbHVkZShbbTQvZmNudGwtby5tNF0pCittNF9pbmNsdWRlKFttNC9mY250bC5tNF0pCittNF9pbmNsdWRlKFttNC9mY250bF9oLm00XSkKK200X2luY2x1ZGUoW200L2ZsZXgubTRdKQorbTRfaW5jbHVkZShbbTQvZmxvYXRfaC5tNF0pCittNF9pbmNsdWRlKFttNC9mb3Blbi5tNF0pCittNF9pbmNsdWRlKFttNC9mcGVuZGluZy5tNF0pCittNF9pbmNsdWRlKFttNC9mcGllZWUubTRdKQorbTRfaW5jbHVkZShbbTQvZnByaW50Zi1wb3NpeC5tNF0pCittNF9pbmNsdWRlKFttNC9mcmV4cC5tNF0pCittNF9pbmNsdWRlKFttNC9mcmV4cGwubTRdKQorbTRfaW5jbHVkZShbbTQvZnNldGVyci5tNF0pCittNF9pbmNsdWRlKFttNC9mc3RhdC5tNF0pCittNF9pbmNsdWRlKFttNC9nZXRkZWxpbS5tNF0pCittNF9pbmNsdWRlKFttNC9nZXRkdGFibGVzaXplLm00XSkKK200X2luY2x1ZGUoW200L2dldGxpbmUubTRdKQogbTRfaW5jbHVkZShbbTQvZ2V0b3B0Lm00XSkKLW00X2luY2x1ZGUoW200L2dldHRleHRfZ2wubTRdKQotbTRfaW5jbHVkZShbbTQvZ251bGliLm00XSkKLW00X2luY2x1ZGUoW200L2hhcmQtbG9jYWxlLm00XSkKLW00X2luY2x1ZGUoW200L2hhc2gubTRdKQorbTRfaW5jbHVkZShbbTQvZ2V0dGV4dC5tNF0pCittNF9pbmNsdWRlKFttNC9nbGliYzIxLm00XSkKK200X2luY2x1ZGUoW200L2dudWxpYi1jb21tb24ubTRdKQorbTRfaW5jbHVkZShbbTQvZ251bGliLWNvbXAubTRdKQogbTRfaW5jbHVkZShbbTQvaWNvbnYubTRdKQotbTRfaW5jbHVkZShbbTQvaW50dHlwZXNfaF9nbC5tNF0pCi1tNF9pbmNsdWRlKFttNC9saWItbGRfZ2wubTRdKQorbTRfaW5jbHVkZShbbTQvaW5jbHVkZV9uZXh0Lm00XSkKK200X2luY2x1ZGUoW200L2ludGxtYWNvc3gubTRdKQorbTRfaW5jbHVkZShbbTQvaW50bWF4X3QubTRdKQorbTRfaW5jbHVkZShbbTQvaW50dHlwZXMtcHJpLm00XSkKK200X2luY2x1ZGUoW200L2ludHR5cGVzLm00XSkKK200X2luY2x1ZGUoW200L2ludHR5cGVzX2gubTRdKQorbTRfaW5jbHVkZShbbTQvaXNuYW4ubTRdKQorbTRfaW5jbHVkZShbbTQvaXNuYW5kLm00XSkKK200X2luY2x1ZGUoW200L2lzbmFuZi5tNF0pCittNF9pbmNsdWRlKFttNC9pc25hbmwubTRdKQorbTRfaW5jbHVkZShbbTQvaXN3YmxhbmsubTRdKQorbTRfaW5jbHVkZShbbTQvamF2YWNvbXAubTRdKQorbTRfaW5jbHVkZShbbTQvamF2YWV4ZWMubTRdKQorbTRfaW5jbHVkZShbbTQvbGFyZ2VmaWxlLm00XSkKK200X2luY2x1ZGUoW200L2xkZXhwLm00XSkKK200X2luY2x1ZGUoW200L2xkZXhwbC5tNF0pCittNF9pbmNsdWRlKFttNC9saWItbGQubTRdKQogbTRfaW5jbHVkZShbbTQvbGliLWxpbmsubTRdKQotbTRfaW5jbHVkZShbbTQvbGliLXByZWZpeF9nbC5tNF0pCittNF9pbmNsdWRlKFttNC9saWItcHJlZml4Lm00XSkKK200X2luY2x1ZGUoW200L2xpYnVuaXN0cmluZy1iYXNlLm00XSkKK200X2luY2x1ZGUoW200L2xvY2FsY2hhcnNldC5tNF0pCittNF9pbmNsdWRlKFttNC9sb2NhbGUtZnIubTRdKQorbTRfaW5jbHVkZShbbTQvbG9jYWxlLWphLm00XSkKK200X2luY2x1ZGUoW200L2xvY2FsZS16aC5tNF0pCittNF9pbmNsdWRlKFttNC9sb2NrLm00XSkKK200X2luY2x1ZGUoW200L2xvbmdsb25nLm00XSkKIG00X2luY2x1ZGUoW200L200Lm00XSkKK200X2luY2x1ZGUoW200L21hbGxvYy5tNF0pCittNF9pbmNsdWRlKFttNC9tYXRoX2gubTRdKQorbTRfaW5jbHVkZShbbTQvbWJjaGFyLm00XSkKK200X2luY2x1ZGUoW200L21iaXRlci5tNF0pCiBtNF9pbmNsdWRlKFttNC9tYnJ0b3djLm00XSkKK200X2luY2x1ZGUoW200L21ic2luaXQubTRdKQogbTRfaW5jbHVkZShbbTQvbWJzdGF0ZV90Lm00XSkKIG00X2luY2x1ZGUoW200L21ic3dpZHRoLm00XSkKK200X2luY2x1ZGUoW200L21lbWNoci5tNF0pCittNF9pbmNsdWRlKFttNC9tbWFwLWFub24ubTRdKQorbTRfaW5jbHVkZShbbTQvbW9kZV90Lm00XSkKK200X2luY2x1ZGUoW200L21zdmMtaW52YWwubTRdKQorbTRfaW5jbHVkZShbbTQvbXN2Yy1ub3Rocm93Lm00XSkKK200X2luY2x1ZGUoW200L211bHRpYXJjaC5tNF0pCiBtNF9pbmNsdWRlKFttNC9ubHMubTRdKQotbTRfaW5jbHVkZShbbTQvb2JzdGFjay5tNF0pCi1tNF9pbmNsdWRlKFttNC9vbmNlb25seS5tNF0pCi1tNF9pbmNsdWRlKFttNC9wb19nbC5tNF0pCittNF9pbmNsdWRlKFttNC9ub2NyYXNoLm00XSkKK200X2luY2x1ZGUoW200L29ic3RhY2stcHJpbnRmLm00XSkKK200X2luY2x1ZGUoW200L29mZl90Lm00XSkKK200X2luY2x1ZGUoW200L29wZW4ubTRdKQorbTRfaW5jbHVkZShbbTQvcGF0aG1heC5tNF0pCittNF9pbmNsdWRlKFttNC9wZXJyb3IubTRdKQorbTRfaW5jbHVkZShbbTQvcGlwZTIubTRdKQorbTRfaW5jbHVkZShbbTQvcG8ubTRdKQorbTRfaW5jbHVkZShbbTQvcG9zaXhfc3Bhd24ubTRdKQorbTRfaW5jbHVkZShbbTQvcHJpbnRmLWZyZXhwLm00XSkKK200X2luY2x1ZGUoW200L3ByaW50Zi1mcmV4cGwubTRdKQorbTRfaW5jbHVkZShbbTQvcHJpbnRmLXBvc2l4LXJwbC5tNF0pCittNF9pbmNsdWRlKFttNC9wcmludGYubTRdKQogbTRfaW5jbHVkZShbbTQvcHJvZ3Rlc3QubTRdKQogbTRfaW5jbHVkZShbbTQvcXVvdGUubTRdKQogbTRfaW5jbHVkZShbbTQvcXVvdGVhcmcubTRdKQorbTRfaW5jbHVkZShbbTQvcmFpc2UubTRdKQorbTRfaW5jbHVkZShbbTQvcmF3bWVtY2hyLm00XSkKK200X2luY2x1ZGUoW200L3JlYWxsb2MubTRdKQorbTRfaW5jbHVkZShbbTQvc2NoZWRfaC5tNF0pCittNF9pbmNsdWRlKFttNC9zZXRlbnYubTRdKQorbTRfaW5jbHVkZShbbTQvc2lnX2F0b21pY190Lm00XSkKK200X2luY2x1ZGUoW200L3NpZ2FjdGlvbi5tNF0pCittNF9pbmNsdWRlKFttNC9zaWduYWxfaC5tNF0pCittNF9pbmNsdWRlKFttNC9zaWduYWxibG9ja2luZy5tNF0pCittNF9pbmNsdWRlKFttNC9zaWduYml0Lm00XSkKK200X2luY2x1ZGUoW200L3NpemVfbWF4Lm00XSkKK200X2luY2x1ZGUoW200L3NucHJpbnRmLXBvc2l4Lm00XSkKK200X2luY2x1ZGUoW200L3NucHJpbnRmLm00XSkKK200X2luY2x1ZGUoW200L3NwYXduLXBpcGUubTRdKQorbTRfaW5jbHVkZShbbTQvc3Bhd25faC5tNF0pCittNF9pbmNsdWRlKFttNC9zcHJpbnRmLXBvc2l4Lm00XSkKK200X2luY2x1ZGUoW200L3NzaXplX3QubTRdKQorbTRfaW5jbHVkZShbbTQvc3RhdC5tNF0pCiBtNF9pbmNsdWRlKFttNC9zdGRib29sLm00XSkKLW00X2luY2x1ZGUoW200L3N0ZGludF9oX2dsLm00XSkKLW00X2luY2x1ZGUoW200L3N0ZGlvLXNhZmVyLm00XSkKK200X2luY2x1ZGUoW200L3N0ZGRlZl9oLm00XSkKK200X2luY2x1ZGUoW200L3N0ZGludC5tNF0pCittNF9pbmNsdWRlKFttNC9zdGRpbnRfaC5tNF0pCittNF9pbmNsdWRlKFttNC9zdGRpb19oLm00XSkKK200X2luY2x1ZGUoW200L3N0ZGxpYl9oLm00XSkKIG00X2luY2x1ZGUoW200L3N0cGNweS5tNF0pCittNF9pbmNsdWRlKFttNC9zdHJjaHJudWwubTRdKQogbTRfaW5jbHVkZShbbTQvc3RyZHVwLm00XSkKIG00X2luY2x1ZGUoW200L3N0cmVycm9yLm00XSkKK200X2luY2x1ZGUoW200L3N0cmVycm9yX3IubTRdKQorbTRfaW5jbHVkZShbbTQvc3RyaW5nX2gubTRdKQogbTRfaW5jbHVkZShbbTQvc3RybmR1cC5tNF0pCiBtNF9pbmNsdWRlKFttNC9zdHJubGVuLm00XSkKLW00X2luY2x1ZGUoW200L3N0cnRvbC5tNF0pCiBtNF9pbmNsdWRlKFttNC9zdHJ0b3VsLm00XSkKIG00X2luY2x1ZGUoW200L3N0cnZlcnNjbXAubTRdKQotbTRfaW5jbHVkZShbbTQvc3VicGlwZS5tNF0pCittNF9pbmNsdWRlKFttNC9zeXNfc29ja2V0X2gubTRdKQorbTRfaW5jbHVkZShbbTQvc3lzX3N0YXRfaC5tNF0pCittNF9pbmNsdWRlKFttNC9zeXNfdHlwZXNfaC5tNF0pCittNF9pbmNsdWRlKFttNC9zeXNfd2FpdF9oLm00XSkKK200X2luY2x1ZGUoW200L3RocmVhZGxpYi5tNF0pCittNF9pbmNsdWRlKFttNC90aW1lX2gubTRdKQogbTRfaW5jbHVkZShbbTQvdGltZXZhci5tNF0pCi1tNF9pbmNsdWRlKFttNC91aW50bWF4X3RfZ2wubTRdKQotbTRfaW5jbHVkZShbbTQvdWxvbmdsb25nX2dsLm00XSkKIG00X2luY2x1ZGUoW200L3VuaXN0ZC1zYWZlci5tNF0pCiBtNF9pbmNsdWRlKFttNC91bmlzdGRfaC5tNF0pCiBtNF9pbmNsdWRlKFttNC91bmxvY2tlZC1pby5tNF0pCi1tNF9pbmNsdWRlKFttNC93YXJuaW5nLm00XSkKK200X2luY2x1ZGUoW200L3Zhc25wcmludGYubTRdKQorbTRfaW5jbHVkZShbbTQvdmZwcmludGYtcG9zaXgubTRdKQorbTRfaW5jbHVkZShbbTQvdnNucHJpbnRmLXBvc2l4Lm00XSkKK200X2luY2x1ZGUoW200L3ZzbnByaW50Zi5tNF0pCittNF9pbmNsdWRlKFttNC92c3ByaW50Zi1wb3NpeC5tNF0pCittNF9pbmNsdWRlKFttNC93YWl0LXByb2Nlc3MubTRdKQorbTRfaW5jbHVkZShbbTQvd2FpdHBpZC5tNF0pCittNF9pbmNsdWRlKFttNC93YXJuLW9uLXVzZS5tNF0pCittNF9pbmNsdWRlKFttNC93YXJuaW5ncy5tNF0pCittNF9pbmNsdWRlKFttNC93Y2hhcl9oLm00XSkKK200X2luY2x1ZGUoW200L3djaGFyX3QubTRdKQorbTRfaW5jbHVkZShbbTQvd2N0eXBlX2gubTRdKQorbTRfaW5jbHVkZShbbTQvd2N3aWR0aC5tNF0pCittNF9pbmNsdWRlKFttNC93aW50X3QubTRdKQogbTRfaW5jbHVkZShbbTQveGFsbG9jLm00XSkKK200X2luY2x1ZGUoW200L3hzaXplLm00XSkKIG00X2luY2x1ZGUoW200L3hzdHJuZHVwLm00XSkKZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9NYWtlZmlsZSBiL2J1aWxkLWF1eC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRmMzRjYS4uMDAwMDAwMAotLS0gYS9idWlsZC1hdXgvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwzNTYgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjYgZnJvbSBNYWtlZmlsZS5hbS4KLSMgYnVpbGQtYXV4L01ha2VmaWxlLiAgR2VuZXJhdGVkIGZyb20gTWFrZWZpbGUuaW4gYnkgY29uZmlndXJlLgotCi0jIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKLSMgMjAwMywgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi0KLXNyY2RpciA9IC4KLXRvcF9zcmNkaXIgPSAuLgotCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9iaXNvbgotcGtnbGliZGlyID0gJChsaWJkaXIpL2Jpc29uCi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9iaXNvbgotdG9wX2J1aWxkZGlyID0gLi4KLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLUlOU1RBTEwgPSAvdXNyL2Jpbi9pbnN0YWxsIC1jCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0geDg2XzY0LXVua25vd24tbGludXgtZ251Ci1ob3N0X3RyaXBsZXQgPSB4ODZfNjQtdW5rbm93bi1saW51eC1nbnUKLXN1YmRpciA9IGJ1aWxkLWF1eAotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluIGNvbmZpZy5ndWVzcyBcCi0JY29uZmlnLnJwYXRoIGNvbmZpZy5zdWIgZGVwY29tcCBpbnN0YWxsLXNoIG1kYXRlLXNoIG1pc3NpbmcgXAotCW1raW5zdGFsbGRpcnMgdGV4aW5mby50ZXggeWx3cmFwCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaXNvbi1pMThuLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2Mtd29ya2luZy5tNCAkKHRvcF9zcmNkaXIpL200L2N4eC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9kaXJuYW1lLm00ICQodG9wX3NyY2RpcikvbTQvZG1hbGxvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9kb3MubTQgJCh0b3Bfc3JjZGlyKS9tNC9lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9leGl0ZmFpbC5tNCAkKHRvcF9zcmNkaXIpL200L2V4dGVuc2lvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ2V0b3B0Lm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dF9nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9oYXJkLWxvY2FsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9oYXNoLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaF9nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGRfZ2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4X2dsLm00ICQodG9wX3NyY2RpcikvbTQvbTQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbWJydG93Yy5tNCAkKHRvcF9zcmNkaXIpL200L21ic3RhdGVfdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9tYnN3aWR0aC5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9vYnN0YWNrLm00ICQodG9wX3NyY2RpcikvbTQvb25jZW9ubHkubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG9fZ2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9xdW90ZS5tNCAkKHRvcF9zcmNkaXIpL200L3F1b3RlYXJnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3N0ZGJvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaF9nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdGRpby1zYWZlci5tNCAkKHRvcF9zcmNkaXIpL200L3N0cGNweS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdHJkdXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJlcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdHJuZHVwLm00ICQodG9wX3NyY2RpcikvbTQvc3Rybmxlbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b3VsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3N0cnZlcnNjbXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdWJwaXBlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3RpbWV2YXIubTQgJCh0b3Bfc3JjZGlyKS9tNC91aW50bWF4X3RfZ2wubTQgXAotCSQodG9wX3NyY2RpcikvbTQvdWxvbmdsb25nX2dsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3VuaXN0ZC1zYWZlci5tNCAkKHRvcF9zcmNkaXIpL200L3VuaXN0ZF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3VubG9ja2VkLWlvLm00ICQodG9wX3NyY2RpcikvbTQvd2FybmluZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC94YWxsb2MubTQgJCh0b3Bfc3JjZGlyKS9tNC94c3RybmR1cC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L21raW5zdGFsbGRpcnMKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1TT1VSQ0VTID0KLURJU1RfU09VUkNFUyA9Ci1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUNMT0NBTCA9ICR7U0hFTEx9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9taXNzaW5nIC0tcnVuIGFjbG9jYWwtMS45Ci1BTURFUF9GQUxTRSA9ICMKLUFNREVQX1RSVUUgPSAKLUFNVEFSID0gJHtTSEVMTH0gL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC90b29scy9iaXNvbi0yLjMvYnVpbGQtYXV4L21pc3NpbmcgLS1ydW4gdGFyCi1BVVRPQ09ORiA9ICR7U0hFTEx9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9taXNzaW5nIC0tcnVuIGF1dG9jb25mCi1BVVRPSEVBREVSID0gJHtTSEVMTH0gL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC90b29scy9iaXNvbi0yLjMvYnVpbGQtYXV4L21pc3NpbmcgLS1ydW4gYXV0b2hlYWRlcgotQVVUT000VEUgPSAke1NIRUxMfSAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL2Jpc29uLTIuMy9idWlsZC1hdXgvbWlzc2luZyAtLXJ1biBhdXRvbTR0ZQotQVVUT01BS0UgPSAke1NIRUxMfSAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL2Jpc29uLTIuMy9idWlsZC1hdXgvbWlzc2luZyAtLXJ1biBhdXRvbWFrZS0xLjkKLUFXSyA9IGdhd2sKLUJJU09OX0NYWF9XT1JLUyA9IDoKLUJJU09OX0NYWF9XT1JLU19GQUxTRSA9ICMKLUJJU09OX0NYWF9XT1JLU19UUlVFID0gCi1CSVNPTl9MT0NBTEVESVIgPSAvdXNyL3NoYXJlL2xvY2FsZQotQ0MgPSBnY2MKLUNDREVQTU9ERSA9IGRlcG1vZGU9Z2NjMwotQ0ZMQUdTID0gLWcgLU8yCi1DUFAgPSBnY2MgLUUKLUNQUEZMQUdTID0gCi1DWFggPSBnKysKLUNYWERFUE1PREUgPSBkZXBtb2RlPWdjYzMKLUNYWEZMQUdTID0gLWcgLU8yCi1DWUdQQVRIX1cgPSBlY2hvCi1ERUZTID0gLURIQVZFX0NPTkZJR19ICi1ERVBESVIgPSAuZGVwcwotRUNIT19DID0gCi1FQ0hPX04gPSAtbgotRUNIT19UID0gCi1FR1JFUCA9IGdyZXAgLUUKLUVYRUVYVCA9IAotR0NDID0geWVzCi1HRVRPUFRfSCA9IAotR01TR0ZNVCA9IC91c3IvYmluL21zZ2ZtdAotSEFWRV9fQk9PTCA9IDEKLUlOU1RBTExfREFUQSA9ICR7SU5TVEFMTH0gLW0gNjQ0Ci1JTlNUQUxMX1BST0dSQU0gPSAke0lOU1RBTEx9Ci1JTlNUQUxMX1NDUklQVCA9ICR7SU5TVEFMTH0KLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9ICR7U0hFTEx9ICQoaW5zdGFsbF9zaCkgLWMgLXMKLUlOVExMSUJTID0gCi1JTlRMX01BQ09TWF9MSUJTID0gCi1MREZMQUdTID0gCi1MRVggPSBmbGV4Ci1MRVhMSUIgPSAtbGZsCi1MRVhfT1VUUFVUX1JPT1QgPSBsZXgueXkKLUxJQklDT05WID0gLWxpY29udgotTElCSU5UTCA9IAotTElCT0JKUyA9ICBkaXJuYW1lJFUubyBleGl0ZmFpbCRVLm8gaGFyZC1sb2NhbGUkVS5vIGhhc2gkVS5vIHF1b3RlJFUubyBxdW90ZWFyZyRVLm8gZm9wZW4tc2FmZXIkVS5vIGR1cC1zYWZlciRVLm8gZmQtc2FmZXIkVS5vIHBpcGUtc2FmZXIkVS5vIHhtYWxsb2MkVS5vCi1MSUJTID0gCi1MVExJQklDT05WID0gLWxpY29udgotTFRMSUJJTlRMID0gCi1MVExJQk9CSlMgPSAgZGlybmFtZSRVLmxvIGV4aXRmYWlsJFUubG8gaGFyZC1sb2NhbGUkVS5sbyBoYXNoJFUubG8gcXVvdGUkVS5sbyBxdW90ZWFyZyRVLmxvIGZvcGVuLXNhZmVyJFUubG8gZHVwLXNhZmVyJFUubG8gZmQtc2FmZXIkVS5sbyBwaXBlLXNhZmVyJFUubG8geG1hbGxvYyRVLmxvCi1NNCA9IC91c3IvYmluL200Ci1NQUtFSU5GTyA9ICR7U0hFTEx9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9taXNzaW5nIC0tcnVuIG1ha2VpbmZvCi1NS0lOU1RBTExESVJTID0gJCh0b3BfYnVpbGRkaXIpL2J1aWxkLWF1eC9ta2luc3RhbGxkaXJzCi1NU0dGTVQgPSAvdXNyL2Jpbi9tc2dmbXQKLU1TR01FUkdFID0gL3Vzci9iaW4vbXNnbWVyZ2UKLU8wQ0ZMQUdTID0gLWcgCi1PMENYWEZMQUdTID0gLWcgCi1PQkpFWFQgPSBvCi1QQUNLQUdFID0gYmlzb24KLVBBQ0tBR0VfQlVHUkVQT1JUID0gYnVnLWJpc29uQGdudS5vcmcKLVBBQ0tBR0VfTkFNRSA9IEdOVSBCaXNvbgotUEFDS0FHRV9TVFJJTkcgPSBHTlUgQmlzb24gMi4zCi1QQUNLQUdFX1RBUk5BTUUgPSBiaXNvbgotUEFDS0FHRV9WRVJTSU9OID0gMi4zCi1QQVRIX1NFUEFSQVRPUiA9IDoKLVBPU1VCID0gcG8KLVJBTkxJQiA9IHJhbmxpYgotU0VUX01BS0UgPSAKLVNIRUxMID0gL2Jpbi9zaAotU1REQk9PTF9IID0gCi1TVFJJUCA9IAotVU5JU1REX0ggPSAKLVVTRV9OTFMgPSB5ZXMKLVZBTEdSSU5EID0gCi1WRVJTSU9OID0gMi4zCi1XQVJOSU5HX0NGTEFHUyA9IAotV0FSTklOR19DWFhGTEFHUyA9IAotV0VSUk9SX0NGTEFHUyA9IAotWEdFVFRFWFQgPSAvdXNyL2Jpbi94Z2V0dGV4dAotWUFDQyA9IGJpc29uIC15Ci1ZQUNDX0xJQlJBUlkgPSBsaWJ5LmEKLVlBQ0NfU0NSSVBUID0geWFjYwotYWNfY3RfQ0MgPSBnY2MKLWFjX2N0X0NYWCA9IGcrKwotYWNfY3RfUkFOTElCID0gcmFubGliCi1hY19jdF9TVFJJUCA9IAotYWNsb2NhbGRpciA9ICR7ZGF0YWRpcn0vYWNsb2NhbAotYW1fX2Zhc3RkZXBDQ19GQUxTRSA9ICMKLWFtX19mYXN0ZGVwQ0NfVFJVRSA9IAotYW1fX2Zhc3RkZXBDWFhfRkFMU0UgPSAjCi1hbV9fZmFzdGRlcENYWF9UUlVFID0gCi1hbV9faW5jbHVkZSA9IGluY2x1ZGUKLWFtX19sZWFkaW5nX2RvdCA9IC4KLWFtX19xdW90ZSA9IAotYW1fX3RhciA9ICR7QU1UQVJ9IGNob2YgLSAiJCR0YXJkaXIiCi1hbV9fdW50YXIgPSAke0FNVEFSfSB4ZiAtCi1iaW5kaXIgPSAke2V4ZWNfcHJlZml4fS9iaW4KLWJ1aWxkID0geDg2XzY0LXVua25vd24tbGludXgtZ251Ci1idWlsZF9hbGlhcyA9IAotYnVpbGRfY3B1ID0geDg2XzY0Ci1idWlsZF9vcyA9IGxpbnV4LWdudQotYnVpbGRfdmVuZG9yID0gdW5rbm93bgotZGF0YWRpciA9ICR7cHJlZml4fS9zaGFyZQotZXhlY19wcmVmaXggPSAke3ByZWZpeH0KLWhvc3QgPSB4ODZfNjQtdW5rbm93bi1saW51eC1nbnUKLWhvc3RfYWxpYXMgPSAKLWhvc3RfY3B1ID0geDg2XzY0Ci1ob3N0X29zID0gbGludXgtZ251Ci1ob3N0X3ZlbmRvciA9IHVua25vd24KLWluY2x1ZGVkaXIgPSAke3ByZWZpeH0vaW5jbHVkZQotaW5mb2RpciA9ICR7cHJlZml4fS9pbmZvCi1pbnN0YWxsX3NoID0gL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC90b29scy9iaXNvbi0yLjMvYnVpbGQtYXV4L2luc3RhbGwtc2gKLWxpYmRpciA9ICR7ZXhlY19wcmVmaXh9L2xpYgotbGliZXhlY2RpciA9ICR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMKLWxvY2Fsc3RhdGVkaXIgPSAke3ByZWZpeH0vdmFyCi1tYW5kaXIgPSAke3ByZWZpeH0vbWFuCi1ta2Rpcl9wID0gbWtkaXIgLXAgLS0KLW9sZGluY2x1ZGVkaXIgPSAvdXNyL2luY2x1ZGUKLXByZWZpeCA9IC9ob21lL3BoYW5uYS9zcmMvYmlzb24KLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBzLHgseCwKLXNiaW5kaXIgPSAke2V4ZWNfcHJlZml4fS9zYmluCi1zaGFyZWRzdGF0ZWRpciA9ICR7cHJlZml4fS9jb20KLXN5c2NvbmZkaXIgPSAke3ByZWZpeH0vZXRjCi10YXJnZXRfYWxpYXMgPSAKLUVYVFJBX0RJU1QgPSBwcmV2LXZlcnNpb24udHh0Ci1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0kKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCi0JCSYmIGV4aXQgMDsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgIGJ1aWxkLWF1eC9NYWtlZmlsZSc7IFwKLQljZCAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251ICBidWlsZC1hdXgvTWFrZWZpbGUKLS5QUkVDSU9VUzogTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi11bmluc3RhbGwtaW5mby1hbToKLXRhZ3M6IFRBR1MKLVRBR1M6Ci0KLWN0YWdzOiBDVEFHUwotQ1RBR1M6Ci0KLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAotCSAgY2FzZSAkJGZpbGUgaW4gXAotCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCi0JICBlc2FjOyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCi0JICAgIGRpcj0iLyQkZGlyIjsgXAotCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCi0JICBlbHNlIFwKLQkgICAgZGlyPScnOyBcCi0JICBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlCi1pbnN0YWxsZGlyczoKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCi0JICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1pbmZvLWFtCi0KLS5QSE9OWTogYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGRpc3RjbGVhbiBcCi0JZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAotCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAotCW1vc3RseWNsZWFuLWdlbmVyaWMgcGRmIHBkZi1hbSBwcyBwcy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKLQl1bmluc3RhbGwtaW5mby1hbQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9idWlsZC1hdXgvTWFrZWZpbGUuYW0gYi9idWlsZC1hdXgvTWFrZWZpbGUuYW0KaW5kZXggMGUyZWY3YS4uNWIwNzdiOCAxMDA2NDQKLS0tIGEvYnVpbGQtYXV4L01ha2VmaWxlLmFtCisrKyBiL2J1aWxkLWF1eC9NYWtlZmlsZS5hbQpAQCAtMSwyICsxLDIwIEBACi0jIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4gLSotTWFrZWZpbGUtKi0KLUVYVFJBX0RJU1QgPSBwcmV2LXZlcnNpb24udHh0CisjIyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworRVhUUkFfRElTVCA9CQkJCQlcCisgIGNyb3NzLW9wdGlvbnMucGwJCQkJXAorICBkYXJ3aW4xMS40LjAudmFsZ3JpbmQJCQkJXAorICBwcmV2LXZlcnNpb24udHh0CQkJCVwKKyAgdXBkYXRlLWI0LWNvcHlyaWdodApkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L01ha2VmaWxlLmluIGIvYnVpbGQtYXV4L01ha2VmaWxlLmluCmluZGV4IDhhOTBmYzguLmEyMjJiMTUgMTAwNjQ0Ci0tLSBhL2J1aWxkLWF1eC9NYWtlZmlsZS5pbgorKysgYi9idWlsZC1hdXgvTWFrZWZpbGUuaW4KQEAgLTEsOCArMSw4IEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjkuNiBmcm9tIE1ha2VmaWxlLmFtLgorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMi41IGZyb20gTWFrZWZpbGUuYW0uCiAjIEBjb25maWd1cmVfaW5wdXRACiAKLSMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAotIyAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKICMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KQEAgLTEzLDE1ICsxMyw0MSBAQAogIyBQQVJUSUNVTEFSIFBVUlBPU0UuCiAKIEBTRVRfTUFLRUAKLXNyY2RpciA9IEBzcmNkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiBWUEFUSCA9IEBzcmNkaXJACithbV9fbWFrZV9kcnlydW4gPSBcCisgIHsgXAorICAgIGFtX19kcnk9bm87IFwKKyAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKKyAgICAgICpcXFtcIFwJXSopIFwKKyAgICAgICAgZWNobyAnYW0tLWVjaG86IDsgQGVjaG8gIkFNIiAgT0snIHwgJChNQUtFKSAtZiAtIDI+L2Rldi9udWxsIFwKKyAgICAgICAgICB8IGdyZXAgJ15BTSBPSyQkJyA+L2Rldi9udWxsIHx8IGFtX19kcnk9eWVzOzsgXAorICAgICAgKikgXAorICAgICAgICBmb3IgYW1fX2ZsZyBpbiAkJE1BS0VGTEFHUzsgZG8gXAorICAgICAgICAgIGNhc2UgJCRhbV9fZmxnIGluIFwKKyAgICAgICAgICAgICo9KnwtLSopIDs7IFwKKyAgICAgICAgICAgICpuKikgYW1fX2RyeT15ZXM7IGJyZWFrOzsgXAorICAgICAgICAgIGVzYWM7IFwKKyAgICAgICAgZG9uZTs7IFwKKyAgICBlc2FjOyBcCisgICAgdGVzdCAkJGFtX19kcnkgPSB5ZXM7IFwKKyAgfQogcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACiBwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXRvcF9idWlsZGRpciA9IC4uCitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACiBhbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1JTlNUQUxMID0gQElOU1RBTExACiBpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAogaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwogaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCkBAIC0zNiwxMzcgKzYyLDEyMjUgQEAKIGJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACiBob3N0X3RyaXBsZXQgPSBAaG9zdEAKIHN1YmRpciA9IGJ1aWxkLWF1eAotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluIGNvbmZpZy5ndWVzcyBcCi0JY29uZmlnLnJwYXRoIGNvbmZpZy5zdWIgZGVwY29tcCBpbnN0YWxsLXNoIG1kYXRlLXNoIG1pc3NpbmcgXAotCW1raW5zdGFsbGRpcnMgdGV4aW5mby50ZXggeWx3cmFwCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gY29tcGlsZSBcCisJY29uZmlnLmd1ZXNzIGNvbmZpZy5ycGF0aCBjb25maWcuc3ViIGRlcGNvbXAgaW5zdGFsbC1zaCBcCisJbWRhdGUtc2ggbWlzc2luZyB0ZXhpbmZvLnRleCB5bHdyYXAKIEFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2Jpc29uLWkxOG4ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYy13b3JraW5nLm00ICQodG9wX3NyY2RpcikvbTQvY3h4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2Rpcm5hbWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9kbWFsbG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2Rvcy5tNCAkKHRvcF9zcmNkaXIpL200L2Vycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2V4aXRmYWlsLm00ICQodG9wX3NyY2RpcikvbTQvZXh0ZW5zaW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nZXRvcHQubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0X2dsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dudWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2hhcmQtbG9jYWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2hhc2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlc19oX2dsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1sZF9nbC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXhfZ2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9tNC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9tYnJ0b3djLm00ICQodG9wX3NyY2RpcikvbTQvbWJzdGF0ZV90Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L21ic3dpZHRoLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L29ic3RhY2subTQgJCh0b3Bfc3JjZGlyKS9tNC9vbmNlb25seS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wb19nbC5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200LzAwZ251bGliLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2FsbG9jYS5tNCAkKHRvcF9zcmNkaXIpL200L2FzbS11bmRlcnNjb3JlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Fzc2VydC5tNCAkKHRvcF9zcmNkaXIpL200L2Jpc29uLWkxOG4ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYy13b3JraW5nLm00ICQodG9wX3NyY2RpcikvbTQvY2FsbG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Nsb3NlLXN0cmVhbS5tNCAkKHRvcF9zcmNkaXIpL200L2Nsb3NlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Nsb3Nlb3V0Lm00ICQodG9wX3NyY2RpcikvbTQvY29kZXNldC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb25maWctaC5tNCAkKHRvcF9zcmNkaXIpL200L2NvbmZpZ21ha2UubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3h4Lm00ICQodG9wX3NyY2RpcikvbTQvZGlybmFtZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9kbWFsbG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2RvdWJsZS1zbGFzaC1yb290Lm00ICQodG9wX3NyY2RpcikvbTQvZHVwMi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9lbnZpcm9uLm00ICQodG9wX3NyY2RpcikvbTQvZXJybm9faC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9lcnJvci5tNCAkKHRvcF9zcmNkaXIpL200L2V4cG9uZW50ZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHBvbmVudGYubTQgJCh0b3Bfc3JjZGlyKS9tNC9leHBvbmVudGwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXh0ZW5zaW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHRlcm4taW5saW5lLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZhdGFsLXNpZ25hbC5tNCAkKHRvcF9zcmNkaXIpL200L2ZjbnRsLW8ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZmNudGwubTQgJCh0b3Bfc3JjZGlyKS9tNC9mY250bF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZsZXgubTQgJCh0b3Bfc3JjZGlyKS9tNC9mbG9hdF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZvcGVuLm00ICQodG9wX3NyY2RpcikvbTQvZnBlbmRpbmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZnBpZWVlLm00ICQodG9wX3NyY2RpcikvbTQvZnByaW50Zi1wb3NpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mcmV4cC5tNCAkKHRvcF9zcmNkaXIpL200L2ZyZXhwbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mc2V0ZXJyLm00ICQodG9wX3NyY2RpcikvbTQvZnN0YXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ2V0ZGVsaW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXRkdGFibGVzaXplLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dldGxpbmUubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXRvcHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCAkKHRvcF9zcmNkaXIpL200L2dsaWJjMjEubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ251bGliLWNvbW1vbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWItY29tcC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2luY2x1ZGVfbmV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvaW50bWF4X3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMtcHJpLm00ICQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2lzbmFuLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2lzbmFuZC5tNCAkKHRvcF9zcmNkaXIpL200L2lzbmFuZi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pc25hbmwubTQgJCh0b3Bfc3JjZGlyKS9tNC9pc3dibGFuay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9qYXZhY29tcC5tNCAkKHRvcF9zcmNkaXIpL200L2phdmFleGVjLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xhcmdlZmlsZS5tNCAkKHRvcF9zcmNkaXIpL200L2xkZXhwLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xkZXhwbC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGlidW5pc3RyaW5nLWJhc2UubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9jYWxjaGFyc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvbG9jYWxlLWZyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvY2FsZS1qYS5tNCAkKHRvcF9zcmNkaXIpL200L2xvY2FsZS16aC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sb2NrLm00ICQodG9wX3NyY2RpcikvbTQvbG9uZ2xvbmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbTQubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYWxsb2MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWF0aF9oLm00ICQodG9wX3NyY2RpcikvbTQvbWJjaGFyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21iaXRlci5tNCAkKHRvcF9zcmNkaXIpL200L21icnRvd2MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWJzaW5pdC5tNCAkKHRvcF9zcmNkaXIpL200L21ic3RhdGVfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYnN3aWR0aC5tNCAkKHRvcF9zcmNkaXIpL200L21lbWNoci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tbWFwLWFub24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9tb2RlX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbXN2Yy1pbnZhbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tc3ZjLW5vdGhyb3cubTQgJCh0b3Bfc3JjZGlyKS9tNC9tdWx0aWFyY2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvbm9jcmFzaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9vYnN0YWNrLXByaW50Zi5tNCAkKHRvcF9zcmNkaXIpL200L29mZl90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L29wZW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wYXRobWF4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BlcnJvci5tNCAkKHRvcF9zcmNkaXIpL200L3BpcGUyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcG9zaXhfc3Bhd24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJpbnRmLWZyZXhwLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ByaW50Zi1mcmV4cGwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJpbnRmLXBvc2l4LXJwbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcmludGYubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCiAJJCh0b3Bfc3JjZGlyKS9tNC9xdW90ZS5tNCAkKHRvcF9zcmNkaXIpL200L3F1b3RlYXJnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3N0ZGJvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaF9nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdGRpby1zYWZlci5tNCAkKHRvcF9zcmNkaXIpL200L3N0cGNweS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9yYWlzZS5tNCAkKHRvcF9zcmNkaXIpL200L3Jhd21lbWNoci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9yZWFsbG9jLm00ICQodG9wX3NyY2RpcikvbTQvc2NoZWRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zZXRlbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9zaWdfYXRvbWljX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc2lnYWN0aW9uLm00ICQodG9wX3NyY2RpcikvbTQvc2lnbmFsX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc2lnbmFsYmxvY2tpbmcubTQgJCh0b3Bfc3JjZGlyKS9tNC9zaWduYml0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NpemVfbWF4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NucHJpbnRmLXBvc2l4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NucHJpbnRmLm00ICQodG9wX3NyY2RpcikvbTQvc3Bhd24tcGlwZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zcGF3bl9oLm00ICQodG9wX3NyY2RpcikvbTQvc3ByaW50Zi1wb3NpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zc2l6ZV90Lm00ICQodG9wX3NyY2RpcikvbTQvc3RhdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRib29sLm00ICQodG9wX3NyY2RpcikvbTQvc3RkZGVmX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RkaW50Lm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50X2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RkaW9faC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGxpYl9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cGNweS5tNCAkKHRvcF9zcmNkaXIpL200L3N0cmNocm51bC5tNCBcCiAJJCh0b3Bfc3JjZGlyKS9tNC9zdHJkdXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJlcnJvci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJlcnJvcl9yLm00ICQodG9wX3NyY2RpcikvbTQvc3RyaW5nX2gubTQgXAogCSQodG9wX3NyY2RpcikvbTQvc3RybmR1cC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cm5sZW4ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RydG9sLm00ICQodG9wX3NyY2RpcikvbTQvc3RydG91bC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdHJ2ZXJzY21wLm00ICQodG9wX3NyY2RpcikvbTQvc3VicGlwZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC90aW1ldmFyLm00ICQodG9wX3NyY2RpcikvbTQvdWludG1heF90X2dsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Vsb25nbG9uZ19nbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b3VsLm00ICQodG9wX3NyY2RpcikvbTQvc3RydmVyc2NtcC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zeXNfc29ja2V0X2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3lzX3N0YXRfaC5tNCAkKHRvcF9zcmNkaXIpL200L3N5c190eXBlc19oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N5c193YWl0X2gubTQgJCh0b3Bfc3JjZGlyKS9tNC90aHJlYWRsaWIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdGltZV9oLm00ICQodG9wX3NyY2RpcikvbTQvdGltZXZhci5tNCBcCiAJJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGQtc2FmZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC91bmxvY2tlZC1pby5tNCAkKHRvcF9zcmNkaXIpL200L3dhcm5pbmcubTQgXAotCSQodG9wX3NyY2RpcikvbTQveGFsbG9jLm00ICQodG9wX3NyY2RpcikvbTQveHN0cm5kdXAubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdW5sb2NrZWQtaW8ubTQgJCh0b3Bfc3JjZGlyKS9tNC92YXNucHJpbnRmLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ZmcHJpbnRmLXBvc2l4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ZzbnByaW50Zi1wb3NpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC92c25wcmludGYubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdnNwcmludGYtcG9zaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2FpdC1wcm9jZXNzLm00ICQodG9wX3NyY2RpcikvbTQvd2FpdHBpZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93YXJuLW9uLXVzZS5tNCAkKHRvcF9zcmNkaXIpL200L3dhcm5pbmdzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3djaGFyX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC93Y2hhcl90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3djdHlwZV9oLm00ICQodG9wX3NyY2RpcikvbTQvd2N3aWR0aC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93aW50X3QubTQgJCh0b3Bfc3JjZGlyKS9tNC94YWxsb2MubTQgXAorCSQodG9wX3NyY2RpcikvbTQveHNpemUubTQgJCh0b3Bfc3JjZGlyKS9tNC94c3RybmR1cC5tNCBcCiAJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKIGFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCiAJJChBQ0xPQ0FMX000KQotbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L21raW5zdGFsbGRpcnMKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaAogQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitBTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQorYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCithbV9fdl9QXzAgPSBmYWxzZQorYW1fX3ZfUF8xID0gOgorQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKK2FtX192X0dFTl8xID0gCitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK2FtX192X2F0XzEgPSAKIFNPVVJDRVMgPQogRElTVF9TT1VSQ0VTID0KK2FtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAorICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKKyAgICBufG5vfE5PKSBmYWxzZTs7IFwKKyAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAorICBlc2FjCiBESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorcGtnbGliZXhlY2RpciA9IEBwa2dsaWJleGVjZGlyQAogQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQU1ERVBfRkFMU0UgPSBAQU1ERVBfRkFMU0VACi1BTURFUF9UUlVFID0gQEFNREVQX1RSVUVACitBTExPQ0EgPSBAQUxMT0NBQAorQUxMT0NBX0ggPSBAQUxMT0NBX0hACiBBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVBQTEVfVU5JVkVSU0FMX0JVSUxEID0gQEFQUExFX1VOSVZFUlNBTF9CVUlMREAKK0FSID0gQEFSQAorQVJGTEFHUyA9IEBBUkZMQUdTQAorQVNNX1NZTUJPTF9QUkVGSVggPSBAQVNNX1NZTUJPTF9QUkVGSVhACiBBVVRPQ09ORiA9IEBBVVRPQ09ORkAKIEFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKIEFVVE9NNFRFID0gQEFVVE9NNFRFQAogQVVUT01BS0UgPSBAQVVUT01BS0VACiBBV0sgPSBAQVdLQAogQklTT05fQ1hYX1dPUktTID0gQEJJU09OX0NYWF9XT1JLU0AKLUJJU09OX0NYWF9XT1JLU19GQUxTRSA9IEBCSVNPTl9DWFhfV09SS1NfRkFMU0VACi1CSVNPTl9DWFhfV09SS1NfVFJVRSA9IEBCSVNPTl9DWFhfV09SS1NfVFJVRUAKK0JJU09OX0NfV09SS1MgPSBAQklTT05fQ19XT1JLU0AKIEJJU09OX0xPQ0FMRURJUiA9IEBCSVNPTl9MT0NBTEVESVJACitCSVRTSVpFT0ZfUFRSRElGRl9UID0gQEJJVFNJWkVPRl9QVFJESUZGX1RACitCSVRTSVpFT0ZfU0lHX0FUT01JQ19UID0gQEJJVFNJWkVPRl9TSUdfQVRPTUlDX1RACitCSVRTSVpFT0ZfU0laRV9UID0gQEJJVFNJWkVPRl9TSVpFX1RACitCSVRTSVpFT0ZfV0NIQVJfVCA9IEBCSVRTSVpFT0ZfV0NIQVJfVEAKK0JJVFNJWkVPRl9XSU5UX1QgPSBAQklUU0laRU9GX1dJTlRfVEAKIENDID0gQENDQAogQ0NERVBNT0RFID0gQENDREVQTU9ERUAKIENGTEFHUyA9IEBDRkxBR1NACitDTEFTU1BBVEggPSBAQ0xBU1NQQVRIQAorQ0xBU1NQQVRIX1NFUEFSQVRPUiA9IEBDTEFTU1BBVEhfU0VQQVJBVE9SQAorQ09ORklHX0lOQ0xVREUgPSBAQ09ORklHX0lOQ0xVREVACitDT05GX0pBVkEgPSBAQ09ORl9KQVZBQAorQ09ORl9KQVZBQyA9IEBDT05GX0pBVkFDQAogQ1BQID0gQENQUEAKIENQUEZMQUdTID0gQENQUEZMQUdTQAogQ1hYID0gQENYWEAKIENYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKIENYWEZMQUdTID0gQENYWEZMQUdTQAorQ1hYX0NPTVBJTEVSX1BPU0lYTFlfQ09SUkVDVCA9IEBDWFhfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUQAogQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0NfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUID0gQENfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUQAogREVGUyA9IEBERUZTQAogREVQRElSID0gQERFUERJUkAKK0RPVCA9IEBET1RACiBFQ0hPX0MgPSBARUNIT19DQAogRUNIT19OID0gQEVDSE9fTkAKIEVDSE9fVCA9IEBFQ0hPX1RACiBFR1JFUCA9IEBFR1JFUEAKK0VNVUxUSUhPUF9ISURERU4gPSBARU1VTFRJSE9QX0hJRERFTkAKK0VNVUxUSUhPUF9WQUxVRSA9IEBFTVVMVElIT1BfVkFMVUVACitFTk9MSU5LX0hJRERFTiA9IEBFTk9MSU5LX0hJRERFTkAKK0VOT0xJTktfVkFMVUUgPSBARU5PTElOS19WQUxVRUAKK0VPVkVSRkxPV19ISURERU4gPSBARU9WRVJGTE9XX0hJRERFTkAKK0VPVkVSRkxPV19WQUxVRSA9IEBFT1ZFUkZMT1dfVkFMVUVACitFUlJOT19IID0gQEVSUk5PX0hACiBFWEVFWFQgPSBARVhFRVhUQAorRkxPQVRfSCA9IEBGTE9BVF9IQAogR0NDID0gQEdDQ0AKIEdFVE9QVF9IID0gQEdFVE9QVF9IQAorR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKK0dMSUJDMjEgPSBAR0xJQkMyMUAKIEdNU0dGTVQgPSBAR01TR0ZNVEAKK0dNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAorR05VTElCX0FDT1NGID0gQEdOVUxJQl9BQ09TRkAKK0dOVUxJQl9BQ09TTCA9IEBHTlVMSUJfQUNPU0xACitHTlVMSUJfQVNJTkYgPSBAR05VTElCX0FTSU5GQAorR05VTElCX0FTSU5MID0gQEdOVUxJQl9BU0lOTEAKK0dOVUxJQl9BVEFOMkYgPSBAR05VTElCX0FUQU4yRkAKK0dOVUxJQl9BVEFORiA9IEBHTlVMSUJfQVRBTkZACitHTlVMSUJfQVRBTkwgPSBAR05VTElCX0FUQU5MQAorR05VTElCX0FUT0xMID0gQEdOVUxJQl9BVE9MTEAKK0dOVUxJQl9CVE9XQyA9IEBHTlVMSUJfQlRPV0NACitHTlVMSUJfQ0FMTE9DX1BPU0lYID0gQEdOVUxJQl9DQUxMT0NfUE9TSVhACitHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRSA9IEBHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRUAKK0dOVUxJQl9DQlJUID0gQEdOVUxJQl9DQlJUQAorR05VTElCX0NCUlRGID0gQEdOVUxJQl9DQlJURkAKK0dOVUxJQl9DQlJUTCA9IEBHTlVMSUJfQ0JSVExACitHTlVMSUJfQ0VJTCA9IEBHTlVMSUJfQ0VJTEAKK0dOVUxJQl9DRUlMRiA9IEBHTlVMSUJfQ0VJTEZACitHTlVMSUJfQ0VJTEwgPSBAR05VTElCX0NFSUxMQAorR05VTElCX0NIRElSID0gQEdOVUxJQl9DSERJUkAKK0dOVUxJQl9DSE9XTiA9IEBHTlVMSUJfQ0hPV05ACitHTlVMSUJfQ0xPU0UgPSBAR05VTElCX0NMT1NFQAorR05VTElCX0NPUFlTSUdOID0gQEdOVUxJQl9DT1BZU0lHTkAKK0dOVUxJQl9DT1BZU0lHTkYgPSBAR05VTElCX0NPUFlTSUdORkAKK0dOVUxJQl9DT1BZU0lHTkwgPSBAR05VTElCX0NPUFlTSUdOTEAKK0dOVUxJQl9DT1NGID0gQEdOVUxJQl9DT1NGQAorR05VTElCX0NPU0hGID0gQEdOVUxJQl9DT1NIRkAKK0dOVUxJQl9DT1NMID0gQEdOVUxJQl9DT1NMQAorR05VTElCX0RQUklOVEYgPSBAR05VTElCX0RQUklOVEZACitHTlVMSUJfRFVQID0gQEdOVUxJQl9EVVBACitHTlVMSUJfRFVQMiA9IEBHTlVMSUJfRFVQMkAKK0dOVUxJQl9EVVAzID0gQEdOVUxJQl9EVVAzQAorR05VTElCX0VOVklST04gPSBAR05VTElCX0VOVklST05ACitHTlVMSUJfRVVJREFDQ0VTUyA9IEBHTlVMSUJfRVVJREFDQ0VTU0AKK0dOVUxJQl9FWFAyID0gQEdOVUxJQl9FWFAyQAorR05VTElCX0VYUDJGID0gQEdOVUxJQl9FWFAyRkAKK0dOVUxJQl9FWFAyTCA9IEBHTlVMSUJfRVhQMkxACitHTlVMSUJfRVhQRiA9IEBHTlVMSUJfRVhQRkAKK0dOVUxJQl9FWFBMID0gQEdOVUxJQl9FWFBMQAorR05VTElCX0VYUE0xID0gQEdOVUxJQl9FWFBNMUAKK0dOVUxJQl9FWFBNMUYgPSBAR05VTElCX0VYUE0xRkAKK0dOVUxJQl9FWFBNMUwgPSBAR05VTElCX0VYUE0xTEAKK0dOVUxJQl9GQUJTRiA9IEBHTlVMSUJfRkFCU0ZACitHTlVMSUJfRkFCU0wgPSBAR05VTElCX0ZBQlNMQAorR05VTElCX0ZBQ0NFU1NBVCA9IEBHTlVMSUJfRkFDQ0VTU0FUQAorR05VTElCX0ZDSERJUiA9IEBHTlVMSUJfRkNIRElSQAorR05VTElCX0ZDSE1PREFUID0gQEdOVUxJQl9GQ0hNT0RBVEAKK0dOVUxJQl9GQ0hPV05BVCA9IEBHTlVMSUJfRkNIT1dOQVRACitHTlVMSUJfRkNMT1NFID0gQEdOVUxJQl9GQ0xPU0VACitHTlVMSUJfRkNOVEwgPSBAR05VTElCX0ZDTlRMQAorR05VTElCX0ZEQVRBU1lOQyA9IEBHTlVMSUJfRkRBVEFTWU5DQAorR05VTElCX0ZET1BFTiA9IEBHTlVMSUJfRkRPUEVOQAorR05VTElCX0ZGTFVTSCA9IEBHTlVMSUJfRkZMVVNIQAorR05VTElCX0ZGU0wgPSBAR05VTElCX0ZGU0xACitHTlVMSUJfRkZTTEwgPSBAR05VTElCX0ZGU0xMQAorR05VTElCX0ZHRVRDID0gQEdOVUxJQl9GR0VUQ0AKK0dOVUxJQl9GR0VUUyA9IEBHTlVMSUJfRkdFVFNACitHTlVMSUJfRkxPT1IgPSBAR05VTElCX0ZMT09SQAorR05VTElCX0ZMT09SRiA9IEBHTlVMSUJfRkxPT1JGQAorR05VTElCX0ZMT09STCA9IEBHTlVMSUJfRkxPT1JMQAorR05VTElCX0ZNQSA9IEBHTlVMSUJfRk1BQAorR05VTElCX0ZNQUYgPSBAR05VTElCX0ZNQUZACitHTlVMSUJfRk1BTCA9IEBHTlVMSUJfRk1BTEAKK0dOVUxJQl9GTU9EID0gQEdOVUxJQl9GTU9EQAorR05VTElCX0ZNT0RGID0gQEdOVUxJQl9GTU9ERkAKK0dOVUxJQl9GTU9ETCA9IEBHTlVMSUJfRk1PRExACitHTlVMSUJfRk9QRU4gPSBAR05VTElCX0ZPUEVOQAorR05VTElCX0ZQUklOVEYgPSBAR05VTElCX0ZQUklOVEZACitHTlVMSUJfRlBSSU5URl9QT1NJWCA9IEBHTlVMSUJfRlBSSU5URl9QT1NJWEAKK0dOVUxJQl9GUFVSR0UgPSBAR05VTElCX0ZQVVJHRUAKK0dOVUxJQl9GUFVUQyA9IEBHTlVMSUJfRlBVVENACitHTlVMSUJfRlBVVFMgPSBAR05VTElCX0ZQVVRTQAorR05VTElCX0ZSRUFEID0gQEdOVUxJQl9GUkVBREAKK0dOVUxJQl9GUkVPUEVOID0gQEdOVUxJQl9GUkVPUEVOQAorR05VTElCX0ZSRVhQID0gQEdOVUxJQl9GUkVYUEAKK0dOVUxJQl9GUkVYUEYgPSBAR05VTElCX0ZSRVhQRkAKK0dOVUxJQl9GUkVYUEwgPSBAR05VTElCX0ZSRVhQTEAKK0dOVUxJQl9GU0NBTkYgPSBAR05VTElCX0ZTQ0FORkAKK0dOVUxJQl9GU0VFSyA9IEBHTlVMSUJfRlNFRUtACitHTlVMSUJfRlNFRUtPID0gQEdOVUxJQl9GU0VFS09ACitHTlVMSUJfRlNUQVQgPSBAR05VTElCX0ZTVEFUQAorR05VTElCX0ZTVEFUQVQgPSBAR05VTElCX0ZTVEFUQVRACitHTlVMSUJfRlNZTkMgPSBAR05VTElCX0ZTWU5DQAorR05VTElCX0ZURUxMID0gQEdOVUxJQl9GVEVMTEAKK0dOVUxJQl9GVEVMTE8gPSBAR05VTElCX0ZURUxMT0AKK0dOVUxJQl9GVFJVTkNBVEUgPSBAR05VTElCX0ZUUlVOQ0FURUAKK0dOVUxJQl9GVVRJTUVOUyA9IEBHTlVMSUJfRlVUSU1FTlNACitHTlVMSUJfRldSSVRFID0gQEdOVUxJQl9GV1JJVEVACitHTlVMSUJfR0VUQyA9IEBHTlVMSUJfR0VUQ0AKK0dOVUxJQl9HRVRDSEFSID0gQEdOVUxJQl9HRVRDSEFSQAorR05VTElCX0dFVENXRCA9IEBHTlVMSUJfR0VUQ1dEQAorR05VTElCX0dFVERFTElNID0gQEdOVUxJQl9HRVRERUxJTUAKK0dOVUxJQl9HRVRET01BSU5OQU1FID0gQEdOVUxJQl9HRVRET01BSU5OQU1FQAorR05VTElCX0dFVERUQUJMRVNJWkUgPSBAR05VTElCX0dFVERUQUJMRVNJWkVACitHTlVMSUJfR0VUR1JPVVBTID0gQEdOVUxJQl9HRVRHUk9VUFNACitHTlVMSUJfR0VUSE9TVE5BTUUgPSBAR05VTElCX0dFVEhPU1ROQU1FQAorR05VTElCX0dFVExJTkUgPSBAR05VTElCX0dFVExJTkVACitHTlVMSUJfR0VUTE9BREFWRyA9IEBHTlVMSUJfR0VUTE9BREFWR0AKK0dOVUxJQl9HRVRMT0dJTiA9IEBHTlVMSUJfR0VUTE9HSU5ACitHTlVMSUJfR0VUTE9HSU5fUiA9IEBHTlVMSUJfR0VUTE9HSU5fUkAKK0dOVUxJQl9HRVRQQUdFU0laRSA9IEBHTlVMSUJfR0VUUEFHRVNJWkVACitHTlVMSUJfR0VUU1VCT1BUID0gQEdOVUxJQl9HRVRTVUJPUFRACitHTlVMSUJfR0VUVVNFUlNIRUxMID0gQEdOVUxJQl9HRVRVU0VSU0hFTExACitHTlVMSUJfR0xfVU5JU1REX0hfR0VUT1BUID0gQEdOVUxJQl9HTF9VTklTVERfSF9HRVRPUFRACitHTlVMSUJfR1JBTlRQVCA9IEBHTlVMSUJfR1JBTlRQVEAKK0dOVUxJQl9HUk9VUF9NRU1CRVIgPSBAR05VTElCX0dST1VQX01FTUJFUkAKK0dOVUxJQl9IWVBPVCA9IEBHTlVMSUJfSFlQT1RACitHTlVMSUJfSFlQT1RGID0gQEdOVUxJQl9IWVBPVEZACitHTlVMSUJfSFlQT1RMID0gQEdOVUxJQl9IWVBPVExACitHTlVMSUJfSUxPR0IgPSBAR05VTElCX0lMT0dCQAorR05VTElCX0lMT0dCRiA9IEBHTlVMSUJfSUxPR0JGQAorR05VTElCX0lMT0dCTCA9IEBHTlVMSUJfSUxPR0JMQAorR05VTElCX0lNQVhBQlMgPSBAR05VTElCX0lNQVhBQlNACitHTlVMSUJfSU1BWERJViA9IEBHTlVMSUJfSU1BWERJVkAKK0dOVUxJQl9JU0FUVFkgPSBAR05VTElCX0lTQVRUWUAKK0dOVUxJQl9JU0ZJTklURSA9IEBHTlVMSUJfSVNGSU5JVEVACitHTlVMSUJfSVNJTkYgPSBAR05VTElCX0lTSU5GQAorR05VTElCX0lTTkFOID0gQEdOVUxJQl9JU05BTkAKK0dOVUxJQl9JU05BTkQgPSBAR05VTElCX0lTTkFOREAKK0dOVUxJQl9JU05BTkYgPSBAR05VTElCX0lTTkFORkAKK0dOVUxJQl9JU05BTkwgPSBAR05VTElCX0lTTkFOTEAKK0dOVUxJQl9JU1dCTEFOSyA9IEBHTlVMSUJfSVNXQkxBTktACitHTlVMSUJfSVNXQ1RZUEUgPSBAR05VTElCX0lTV0NUWVBFQAorR05VTElCX0xDSE1PRCA9IEBHTlVMSUJfTENITU9EQAorR05VTElCX0xDSE9XTiA9IEBHTlVMSUJfTENIT1dOQAorR05VTElCX0xERVhQRiA9IEBHTlVMSUJfTERFWFBGQAorR05VTElCX0xERVhQTCA9IEBHTlVMSUJfTERFWFBMQAorR05VTElCX0xJTksgPSBAR05VTElCX0xJTktACitHTlVMSUJfTElOS0FUID0gQEdOVUxJQl9MSU5LQVRACitHTlVMSUJfTE9HID0gQEdOVUxJQl9MT0dACitHTlVMSUJfTE9HMTAgPSBAR05VTElCX0xPRzEwQAorR05VTElCX0xPRzEwRiA9IEBHTlVMSUJfTE9HMTBGQAorR05VTElCX0xPRzEwTCA9IEBHTlVMSUJfTE9HMTBMQAorR05VTElCX0xPRzFQID0gQEdOVUxJQl9MT0cxUEAKK0dOVUxJQl9MT0cxUEYgPSBAR05VTElCX0xPRzFQRkAKK0dOVUxJQl9MT0cxUEwgPSBAR05VTElCX0xPRzFQTEAKK0dOVUxJQl9MT0cyID0gQEdOVUxJQl9MT0cyQAorR05VTElCX0xPRzJGID0gQEdOVUxJQl9MT0cyRkAKK0dOVUxJQl9MT0cyTCA9IEBHTlVMSUJfTE9HMkxACitHTlVMSUJfTE9HQiA9IEBHTlVMSUJfTE9HQkAKK0dOVUxJQl9MT0dCRiA9IEBHTlVMSUJfTE9HQkZACitHTlVMSUJfTE9HQkwgPSBAR05VTElCX0xPR0JMQAorR05VTElCX0xPR0YgPSBAR05VTElCX0xPR0ZACitHTlVMSUJfTE9HTCA9IEBHTlVMSUJfTE9HTEAKK0dOVUxJQl9MU0VFSyA9IEBHTlVMSUJfTFNFRUtACitHTlVMSUJfTFNUQVQgPSBAR05VTElCX0xTVEFUQAorR05VTElCX01BTExPQ19QT1NJWCA9IEBHTlVMSUJfTUFMTE9DX1BPU0lYQAorR05VTElCX01CUkxFTiA9IEBHTlVMSUJfTUJSTEVOQAorR05VTElCX01CUlRPV0MgPSBAR05VTElCX01CUlRPV0NACitHTlVMSUJfTUJTQ0FTRUNNUCA9IEBHTlVMSUJfTUJTQ0FTRUNNUEAKK0dOVUxJQl9NQlNDQVNFU1RSID0gQEdOVUxJQl9NQlNDQVNFU1RSQAorR05VTElCX01CU0NIUiA9IEBHTlVMSUJfTUJTQ0hSQAorR05VTElCX01CU0NTUE4gPSBAR05VTElCX01CU0NTUE5ACitHTlVMSUJfTUJTSU5JVCA9IEBHTlVMSUJfTUJTSU5JVEAKK0dOVUxJQl9NQlNMRU4gPSBAR05VTElCX01CU0xFTkAKK0dOVUxJQl9NQlNOQ0FTRUNNUCA9IEBHTlVMSUJfTUJTTkNBU0VDTVBACitHTlVMSUJfTUJTTkxFTiA9IEBHTlVMSUJfTUJTTkxFTkAKK0dOVUxJQl9NQlNOUlRPV0NTID0gQEdOVUxJQl9NQlNOUlRPV0NTQAorR05VTElCX01CU1BCUksgPSBAR05VTElCX01CU1BCUktACitHTlVMSUJfTUJTUENBU0VDTVAgPSBAR05VTElCX01CU1BDQVNFQ01QQAorR05VTElCX01CU1JDSFIgPSBAR05VTElCX01CU1JDSFJACitHTlVMSUJfTUJTUlRPV0NTID0gQEdOVUxJQl9NQlNSVE9XQ1NACitHTlVMSUJfTUJTU0VQID0gQEdOVUxJQl9NQlNTRVBACitHTlVMSUJfTUJTU1BOID0gQEdOVUxJQl9NQlNTUE5ACitHTlVMSUJfTUJTU1RSID0gQEdOVUxJQl9NQlNTVFJACitHTlVMSUJfTUJTVE9LX1IgPSBAR05VTElCX01CU1RPS19SQAorR05VTElCX01CVE9XQyA9IEBHTlVMSUJfTUJUT1dDQAorR05VTElCX01FTUNIUiA9IEBHTlVMSUJfTUVNQ0hSQAorR05VTElCX01FTU1FTSA9IEBHTlVMSUJfTUVNTUVNQAorR05VTElCX01FTVBDUFkgPSBAR05VTElCX01FTVBDUFlACitHTlVMSUJfTUVNUkNIUiA9IEBHTlVMSUJfTUVNUkNIUkAKK0dOVUxJQl9NS0RJUkFUID0gQEdOVUxJQl9NS0RJUkFUQAorR05VTElCX01LRFRFTVAgPSBAR05VTElCX01LRFRFTVBACitHTlVMSUJfTUtGSUZPID0gQEdOVUxJQl9NS0ZJRk9ACitHTlVMSUJfTUtGSUZPQVQgPSBAR05VTElCX01LRklGT0FUQAorR05VTElCX01LTk9EID0gQEdOVUxJQl9NS05PREAKK0dOVUxJQl9NS05PREFUID0gQEdOVUxJQl9NS05PREFUQAorR05VTElCX01LT1NURU1QID0gQEdOVUxJQl9NS09TVEVNUEAKK0dOVUxJQl9NS09TVEVNUFMgPSBAR05VTElCX01LT1NURU1QU0AKK0dOVUxJQl9NS1NURU1QID0gQEdOVUxJQl9NS1NURU1QQAorR05VTElCX01LU1RFTVBTID0gQEdOVUxJQl9NS1NURU1QU0AKK0dOVUxJQl9NS1RJTUUgPSBAR05VTElCX01LVElNRUAKK0dOVUxJQl9NT0RGID0gQEdOVUxJQl9NT0RGQAorR05VTElCX01PREZGID0gQEdOVUxJQl9NT0RGRkAKK0dOVUxJQl9NT0RGTCA9IEBHTlVMSUJfTU9ERkxACitHTlVMSUJfTkFOT1NMRUVQID0gQEdOVUxJQl9OQU5PU0xFRVBACitHTlVMSUJfTk9OQkxPQ0tJTkcgPSBAR05VTElCX05PTkJMT0NLSU5HQAorR05VTElCX09CU1RBQ0tfUFJJTlRGID0gQEdOVUxJQl9PQlNUQUNLX1BSSU5URkAKK0dOVUxJQl9PQlNUQUNLX1BSSU5URl9QT1NJWCA9IEBHTlVMSUJfT0JTVEFDS19QUklOVEZfUE9TSVhACitHTlVMSUJfT1BFTiA9IEBHTlVMSUJfT1BFTkAKK0dOVUxJQl9PUEVOQVQgPSBAR05VTElCX09QRU5BVEAKK0dOVUxJQl9QQ0xPU0UgPSBAR05VTElCX1BDTE9TRUAKK0dOVUxJQl9QRVJST1IgPSBAR05VTElCX1BFUlJPUkAKK0dOVUxJQl9QSVBFID0gQEdOVUxJQl9QSVBFQAorR05VTElCX1BJUEUyID0gQEdOVUxJQl9QSVBFMkAKK0dOVUxJQl9QT1BFTiA9IEBHTlVMSUJfUE9QRU5ACitHTlVMSUJfUE9TSVhfT1BFTlBUID0gQEdOVUxJQl9QT1NJWF9PUEVOUFRACitHTlVMSUJfUE9TSVhfU1BBV04gPSBAR05VTElCX1BPU0lYX1NQQVdOQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9ERVNUUk9ZID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfREVTVFJPWUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VURkxBR1MgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRGTEFHU0AKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUUEdST1VQID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUUEdST1VQQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBBUkFNID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0NIRURQQVJBTUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0NIRURQT0xJQ1kgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBPTElDWUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0lHREVGQVVMVCA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNJR0RFRkFVTFRACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNJR01BU0sgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdNQVNLQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9JTklUID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfSU5JVEAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VURkxBR1MgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRGTEFHU0AKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUUEdST1VQID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUUEdST1VQQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTQ0hFRFBBUkFNID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQQVJBTUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQT0xJQ1kgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTQ0hFRFBPTElDWUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0lHREVGQVVMVCA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNJR0RFRkFVTFRACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNJR01BU0sgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTSUdNQVNLQAorR05VTElCX1BPU0lYX1NQQVdOUCA9IEBHTlVMSUJfUE9TSVhfU1BBV05QQAorR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRSA9IEBHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERENMT1NFQAorR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BREREVVAyID0gQEdOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMkAKK0dOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURET1BFTiA9IEBHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU5ACitHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0RFU1RST1kgPSBAR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19ERVNUUk9ZQAorR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19JTklUID0gQEdOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfSU5JVEAKK0dOVUxJQl9QT1dGID0gQEdOVUxJQl9QT1dGQAorR05VTElCX1BSRUFEID0gQEdOVUxJQl9QUkVBREAKK0dOVUxJQl9QUklOVEYgPSBAR05VTElCX1BSSU5URkAKK0dOVUxJQl9QUklOVEZfUE9TSVggPSBAR05VTElCX1BSSU5URl9QT1NJWEAKK0dOVUxJQl9QVEhSRUFEX1NJR01BU0sgPSBAR05VTElCX1BUSFJFQURfU0lHTUFTS0AKK0dOVUxJQl9QVFNOQU1FID0gQEdOVUxJQl9QVFNOQU1FQAorR05VTElCX1BUU05BTUVfUiA9IEBHTlVMSUJfUFRTTkFNRV9SQAorR05VTElCX1BVVEMgPSBAR05VTElCX1BVVENACitHTlVMSUJfUFVUQ0hBUiA9IEBHTlVMSUJfUFVUQ0hBUkAKK0dOVUxJQl9QVVRFTlYgPSBAR05VTElCX1BVVEVOVkAKK0dOVUxJQl9QVVRTID0gQEdOVUxJQl9QVVRTQAorR05VTElCX1BXUklURSA9IEBHTlVMSUJfUFdSSVRFQAorR05VTElCX1JBSVNFID0gQEdOVUxJQl9SQUlTRUAKK0dOVUxJQl9SQU5ET00gPSBAR05VTElCX1JBTkRPTUAKK0dOVUxJQl9SQU5ET01fUiA9IEBHTlVMSUJfUkFORE9NX1JACitHTlVMSUJfUkFXTUVNQ0hSID0gQEdOVUxJQl9SQVdNRU1DSFJACitHTlVMSUJfUkVBRCA9IEBHTlVMSUJfUkVBREAKK0dOVUxJQl9SRUFETElOSyA9IEBHTlVMSUJfUkVBRExJTktACitHTlVMSUJfUkVBRExJTktBVCA9IEBHTlVMSUJfUkVBRExJTktBVEAKK0dOVUxJQl9SRUFMTE9DX1BPU0lYID0gQEdOVUxJQl9SRUFMTE9DX1BPU0lYQAorR05VTElCX1JFQUxQQVRIID0gQEdOVUxJQl9SRUFMUEFUSEAKK0dOVUxJQl9SRU1BSU5ERVIgPSBAR05VTElCX1JFTUFJTkRFUkAKK0dOVUxJQl9SRU1BSU5ERVJGID0gQEdOVUxJQl9SRU1BSU5ERVJGQAorR05VTElCX1JFTUFJTkRFUkwgPSBAR05VTElCX1JFTUFJTkRFUkxACitHTlVMSUJfUkVNT1ZFID0gQEdOVUxJQl9SRU1PVkVACitHTlVMSUJfUkVOQU1FID0gQEdOVUxJQl9SRU5BTUVACitHTlVMSUJfUkVOQU1FQVQgPSBAR05VTElCX1JFTkFNRUFUQAorR05VTElCX1JJTlQgPSBAR05VTElCX1JJTlRACitHTlVMSUJfUklOVEYgPSBAR05VTElCX1JJTlRGQAorR05VTElCX1JJTlRMID0gQEdOVUxJQl9SSU5UTEAKK0dOVUxJQl9STURJUiA9IEBHTlVMSUJfUk1ESVJACitHTlVMSUJfUk9VTkQgPSBAR05VTElCX1JPVU5EQAorR05VTElCX1JPVU5ERiA9IEBHTlVMSUJfUk9VTkRGQAorR05VTElCX1JPVU5ETCA9IEBHTlVMSUJfUk9VTkRMQAorR05VTElCX1JQTUFUQ0ggPSBAR05VTElCX1JQTUFUQ0hACitHTlVMSUJfU0NBTkYgPSBAR05VTElCX1NDQU5GQAorR05VTElCX1NFVEVOViA9IEBHTlVMSUJfU0VURU5WQAorR05VTElCX1NFVEhPU1ROQU1FID0gQEdOVUxJQl9TRVRIT1NUTkFNRUAKK0dOVUxJQl9TSUdBQ1RJT04gPSBAR05VTElCX1NJR0FDVElPTkAKK0dOVUxJQl9TSUdOQUxfSF9TSUdQSVBFID0gQEdOVUxJQl9TSUdOQUxfSF9TSUdQSVBFQAorR05VTElCX1NJR05CSVQgPSBAR05VTElCX1NJR05CSVRACitHTlVMSUJfU0lHUFJPQ01BU0sgPSBAR05VTElCX1NJR1BST0NNQVNLQAorR05VTElCX1NJTkYgPSBAR05VTElCX1NJTkZACitHTlVMSUJfU0lOSEYgPSBAR05VTElCX1NJTkhGQAorR05VTElCX1NJTkwgPSBAR05VTElCX1NJTkxACitHTlVMSUJfU0xFRVAgPSBAR05VTElCX1NMRUVQQAorR05VTElCX1NOUFJJTlRGID0gQEdOVUxJQl9TTlBSSU5URkAKK0dOVUxJQl9TUFJJTlRGX1BPU0lYID0gQEdOVUxJQl9TUFJJTlRGX1BPU0lYQAorR05VTElCX1NRUlRGID0gQEdOVUxJQl9TUVJURkAKK0dOVUxJQl9TUVJUTCA9IEBHTlVMSUJfU1FSVExACitHTlVMSUJfU1RBVCA9IEBHTlVMSUJfU1RBVEAKK0dOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HID0gQEdOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HQAorR05VTElCX1NURElPX0hfU0lHUElQRSA9IEBHTlVMSUJfU1RESU9fSF9TSUdQSVBFQAorR05VTElCX1NUUENQWSA9IEBHTlVMSUJfU1RQQ1BZQAorR05VTElCX1NUUE5DUFkgPSBAR05VTElCX1NUUE5DUFlACitHTlVMSUJfU1RSQ0FTRVNUUiA9IEBHTlVMSUJfU1RSQ0FTRVNUUkAKK0dOVUxJQl9TVFJDSFJOVUwgPSBAR05VTElCX1NUUkNIUk5VTEAKK0dOVUxJQl9TVFJEVVAgPSBAR05VTElCX1NUUkRVUEAKK0dOVUxJQl9TVFJFUlJPUiA9IEBHTlVMSUJfU1RSRVJST1JACitHTlVMSUJfU1RSRVJST1JfUiA9IEBHTlVMSUJfU1RSRVJST1JfUkAKK0dOVUxJQl9TVFJOQ0FUID0gQEdOVUxJQl9TVFJOQ0FUQAorR05VTElCX1NUUk5EVVAgPSBAR05VTElCX1NUUk5EVVBACitHTlVMSUJfU1RSTkxFTiA9IEBHTlVMSUJfU1RSTkxFTkAKK0dOVUxJQl9TVFJQQlJLID0gQEdOVUxJQl9TVFJQQlJLQAorR05VTElCX1NUUlBUSU1FID0gQEdOVUxJQl9TVFJQVElNRUAKK0dOVUxJQl9TVFJTRVAgPSBAR05VTElCX1NUUlNFUEAKK0dOVUxJQl9TVFJTSUdOQUwgPSBAR05VTElCX1NUUlNJR05BTEAKK0dOVUxJQl9TVFJTVFIgPSBAR05VTElCX1NUUlNUUkAKK0dOVUxJQl9TVFJUT0QgPSBAR05VTElCX1NUUlRPREAKK0dOVUxJQl9TVFJUT0lNQVggPSBAR05VTElCX1NUUlRPSU1BWEAKK0dOVUxJQl9TVFJUT0tfUiA9IEBHTlVMSUJfU1RSVE9LX1JACitHTlVMSUJfU1RSVE9MTCA9IEBHTlVMSUJfU1RSVE9MTEAKK0dOVUxJQl9TVFJUT1VMTCA9IEBHTlVMSUJfU1RSVE9VTExACitHTlVMSUJfU1RSVE9VTUFYID0gQEdOVUxJQl9TVFJUT1VNQVhACitHTlVMSUJfU1RSVkVSU0NNUCA9IEBHTlVMSUJfU1RSVkVSU0NNUEAKK0dOVUxJQl9TWU1MSU5LID0gQEdOVUxJQl9TWU1MSU5LQAorR05VTElCX1NZTUxJTktBVCA9IEBHTlVMSUJfU1lNTElOS0FUQAorR05VTElCX1NZU1RFTV9QT1NJWCA9IEBHTlVMSUJfU1lTVEVNX1BPU0lYQAorR05VTElCX1RBTkYgPSBAR05VTElCX1RBTkZACitHTlVMSUJfVEFOSEYgPSBAR05VTElCX1RBTkhGQAorR05VTElCX1RBTkwgPSBAR05VTElCX1RBTkxACitHTlVMSUJfVElNRUdNID0gQEdOVUxJQl9USU1FR01ACitHTlVMSUJfVElNRV9SID0gQEdOVUxJQl9USU1FX1JACitHTlVMSUJfVE1QRklMRSA9IEBHTlVMSUJfVE1QRklMRUAKK0dOVUxJQl9UT1dDVFJBTlMgPSBAR05VTElCX1RPV0NUUkFOU0AKK0dOVUxJQl9UUlVOQyA9IEBHTlVMSUJfVFJVTkNACitHTlVMSUJfVFJVTkNGID0gQEdOVUxJQl9UUlVOQ0ZACitHTlVMSUJfVFJVTkNMID0gQEdOVUxJQl9UUlVOQ0xACitHTlVMSUJfVFRZTkFNRV9SID0gQEdOVUxJQl9UVFlOQU1FX1JACitHTlVMSUJfVU5JU1REX0hfTk9OQkxPQ0tJTkcgPSBAR05VTElCX1VOSVNURF9IX05PTkJMT0NLSU5HQAorR05VTElCX1VOSVNURF9IX1NJR1BJUEUgPSBAR05VTElCX1VOSVNURF9IX1NJR1BJUEVACitHTlVMSUJfVU5MSU5LID0gQEdOVUxJQl9VTkxJTktACitHTlVMSUJfVU5MSU5LQVQgPSBAR05VTElCX1VOTElOS0FUQAorR05VTElCX1VOTE9DS1BUID0gQEdOVUxJQl9VTkxPQ0tQVEAKK0dOVUxJQl9VTlNFVEVOViA9IEBHTlVMSUJfVU5TRVRFTlZACitHTlVMSUJfVVNMRUVQID0gQEdOVUxJQl9VU0xFRVBACitHTlVMSUJfVVRJTUVOU0FUID0gQEdOVUxJQl9VVElNRU5TQVRACitHTlVMSUJfVkFTUFJJTlRGID0gQEdOVUxJQl9WQVNQUklOVEZACitHTlVMSUJfVkRQUklOVEYgPSBAR05VTElCX1ZEUFJJTlRGQAorR05VTElCX1ZGUFJJTlRGID0gQEdOVUxJQl9WRlBSSU5URkAKK0dOVUxJQl9WRlBSSU5URl9QT1NJWCA9IEBHTlVMSUJfVkZQUklOVEZfUE9TSVhACitHTlVMSUJfVkZTQ0FORiA9IEBHTlVMSUJfVkZTQ0FORkAKK0dOVUxJQl9WUFJJTlRGID0gQEdOVUxJQl9WUFJJTlRGQAorR05VTElCX1ZQUklOVEZfUE9TSVggPSBAR05VTElCX1ZQUklOVEZfUE9TSVhACitHTlVMSUJfVlNDQU5GID0gQEdOVUxJQl9WU0NBTkZACitHTlVMSUJfVlNOUFJJTlRGID0gQEdOVUxJQl9WU05QUklOVEZACitHTlVMSUJfVlNQUklOVEZfUE9TSVggPSBAR05VTElCX1ZTUFJJTlRGX1BPU0lYQAorR05VTElCX1dBSVRQSUQgPSBAR05VTElCX1dBSVRQSURACitHTlVMSUJfV0NQQ1BZID0gQEdOVUxJQl9XQ1BDUFlACitHTlVMSUJfV0NQTkNQWSA9IEBHTlVMSUJfV0NQTkNQWUAKK0dOVUxJQl9XQ1JUT01CID0gQEdOVUxJQl9XQ1JUT01CQAorR05VTElCX1dDU0NBU0VDTVAgPSBAR05VTElCX1dDU0NBU0VDTVBACitHTlVMSUJfV0NTQ0FUID0gQEdOVUxJQl9XQ1NDQVRACitHTlVMSUJfV0NTQ0hSID0gQEdOVUxJQl9XQ1NDSFJACitHTlVMSUJfV0NTQ01QID0gQEdOVUxJQl9XQ1NDTVBACitHTlVMSUJfV0NTQ09MTCA9IEBHTlVMSUJfV0NTQ09MTEAKK0dOVUxJQl9XQ1NDUFkgPSBAR05VTElCX1dDU0NQWUAKK0dOVUxJQl9XQ1NDU1BOID0gQEdOVUxJQl9XQ1NDU1BOQAorR05VTElCX1dDU0RVUCA9IEBHTlVMSUJfV0NTRFVQQAorR05VTElCX1dDU0xFTiA9IEBHTlVMSUJfV0NTTEVOQAorR05VTElCX1dDU05DQVNFQ01QID0gQEdOVUxJQl9XQ1NOQ0FTRUNNUEAKK0dOVUxJQl9XQ1NOQ0FUID0gQEdOVUxJQl9XQ1NOQ0FUQAorR05VTElCX1dDU05DTVAgPSBAR05VTElCX1dDU05DTVBACitHTlVMSUJfV0NTTkNQWSA9IEBHTlVMSUJfV0NTTkNQWUAKK0dOVUxJQl9XQ1NOTEVOID0gQEdOVUxJQl9XQ1NOTEVOQAorR05VTElCX1dDU05SVE9NQlMgPSBAR05VTElCX1dDU05SVE9NQlNACitHTlVMSUJfV0NTUEJSSyA9IEBHTlVMSUJfV0NTUEJSS0AKK0dOVUxJQl9XQ1NSQ0hSID0gQEdOVUxJQl9XQ1NSQ0hSQAorR05VTElCX1dDU1JUT01CUyA9IEBHTlVMSUJfV0NTUlRPTUJTQAorR05VTElCX1dDU1NQTiA9IEBHTlVMSUJfV0NTU1BOQAorR05VTElCX1dDU1NUUiA9IEBHTlVMSUJfV0NTU1RSQAorR05VTElCX1dDU1RPSyA9IEBHTlVMSUJfV0NTVE9LQAorR05VTElCX1dDU1dJRFRIID0gQEdOVUxJQl9XQ1NXSURUSEAKK0dOVUxJQl9XQ1NYRlJNID0gQEdOVUxJQl9XQ1NYRlJNQAorR05VTElCX1dDVE9CID0gQEdOVUxJQl9XQ1RPQkAKK0dOVUxJQl9XQ1RPTUIgPSBAR05VTElCX1dDVE9NQkAKK0dOVUxJQl9XQ1RSQU5TID0gQEdOVUxJQl9XQ1RSQU5TQAorR05VTElCX1dDVFlQRSA9IEBHTlVMSUJfV0NUWVBFQAorR05VTElCX1dDV0lEVEggPSBAR05VTElCX1dDV0lEVEhACitHTlVMSUJfV01FTUNIUiA9IEBHTlVMSUJfV01FTUNIUkAKK0dOVUxJQl9XTUVNQ01QID0gQEdOVUxJQl9XTUVNQ01QQAorR05VTElCX1dNRU1DUFkgPSBAR05VTElCX1dNRU1DUFlACitHTlVMSUJfV01FTU1PVkUgPSBAR05VTElCX1dNRU1NT1ZFQAorR05VTElCX1dNRU1TRVQgPSBAR05VTElCX1dNRU1TRVRACitHTlVMSUJfV1JJVEUgPSBAR05VTElCX1dSSVRFQAorR05VTElCX19FWElUID0gQEdOVUxJQl9fRVhJVEAKK0dSRVAgPSBAR1JFUEAKK0hBVkVfQUNPU0YgPSBASEFWRV9BQ09TRkAKK0hBVkVfQUNPU0wgPSBASEFWRV9BQ09TTEAKK0hBVkVfQVNJTkYgPSBASEFWRV9BU0lORkAKK0hBVkVfQVNJTkwgPSBASEFWRV9BU0lOTEAKK0hBVkVfQVRBTjJGID0gQEhBVkVfQVRBTjJGQAorSEFWRV9BVEFORiA9IEBIQVZFX0FUQU5GQAorSEFWRV9BVEFOTCA9IEBIQVZFX0FUQU5MQAorSEFWRV9BVE9MTCA9IEBIQVZFX0FUT0xMQAorSEFWRV9CVE9XQyA9IEBIQVZFX0JUT1dDQAorSEFWRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FID0gQEhBVkVfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRUAKK0hBVkVfQ0JSVCA9IEBIQVZFX0NCUlRACitIQVZFX0NCUlRGID0gQEhBVkVfQ0JSVEZACitIQVZFX0NCUlRMID0gQEhBVkVfQ0JSVExACitIQVZFX0NIT1dOID0gQEhBVkVfQ0hPV05ACitIQVZFX0NPUFlTSUdOID0gQEhBVkVfQ09QWVNJR05ACitIQVZFX0NPUFlTSUdOTCA9IEBIQVZFX0NPUFlTSUdOTEAKK0hBVkVfQ09TRiA9IEBIQVZFX0NPU0ZACitIQVZFX0NPU0hGID0gQEhBVkVfQ09TSEZACitIQVZFX0NPU0wgPSBASEFWRV9DT1NMQAorSEFWRV9ERUNMX0FDT1NMID0gQEhBVkVfREVDTF9BQ09TTEAKK0hBVkVfREVDTF9BU0lOTCA9IEBIQVZFX0RFQ0xfQVNJTkxACitIQVZFX0RFQ0xfQVRBTkwgPSBASEFWRV9ERUNMX0FUQU5MQAorSEFWRV9ERUNMX0NCUlRGID0gQEhBVkVfREVDTF9DQlJURkAKK0hBVkVfREVDTF9DQlJUTCA9IEBIQVZFX0RFQ0xfQ0JSVExACitIQVZFX0RFQ0xfQ0VJTEYgPSBASEFWRV9ERUNMX0NFSUxGQAorSEFWRV9ERUNMX0NFSUxMID0gQEhBVkVfREVDTF9DRUlMTEAKK0hBVkVfREVDTF9DT1BZU0lHTkYgPSBASEFWRV9ERUNMX0NPUFlTSUdORkAKK0hBVkVfREVDTF9DT1NMID0gQEhBVkVfREVDTF9DT1NMQAorSEFWRV9ERUNMX0VOVklST04gPSBASEFWRV9ERUNMX0VOVklST05ACitIQVZFX0RFQ0xfRVhQMiA9IEBIQVZFX0RFQ0xfRVhQMkAKK0hBVkVfREVDTF9FWFAyRiA9IEBIQVZFX0RFQ0xfRVhQMkZACitIQVZFX0RFQ0xfRVhQMkwgPSBASEFWRV9ERUNMX0VYUDJMQAorSEFWRV9ERUNMX0VYUEwgPSBASEFWRV9ERUNMX0VYUExACitIQVZFX0RFQ0xfRVhQTTFMID0gQEhBVkVfREVDTF9FWFBNMUxACitIQVZFX0RFQ0xfRkNIRElSID0gQEhBVkVfREVDTF9GQ0hESVJACitIQVZFX0RFQ0xfRkRBVEFTWU5DID0gQEhBVkVfREVDTF9GREFUQVNZTkNACitIQVZFX0RFQ0xfRkxPT1JGID0gQEhBVkVfREVDTF9GTE9PUkZACitIQVZFX0RFQ0xfRkxPT1JMID0gQEhBVkVfREVDTF9GTE9PUkxACitIQVZFX0RFQ0xfRlBVUkdFID0gQEhBVkVfREVDTF9GUFVSR0VACitIQVZFX0RFQ0xfRlJFWFBMID0gQEhBVkVfREVDTF9GUkVYUExACitIQVZFX0RFQ0xfRlNFRUtPID0gQEhBVkVfREVDTF9GU0VFS09ACitIQVZFX0RFQ0xfRlRFTExPID0gQEhBVkVfREVDTF9GVEVMTE9ACitIQVZFX0RFQ0xfR0VUREVMSU0gPSBASEFWRV9ERUNMX0dFVERFTElNQAorSEFWRV9ERUNMX0dFVERPTUFJTk5BTUUgPSBASEFWRV9ERUNMX0dFVERPTUFJTk5BTUVACitIQVZFX0RFQ0xfR0VUTElORSA9IEBIQVZFX0RFQ0xfR0VUTElORUAKK0hBVkVfREVDTF9HRVRMT0FEQVZHID0gQEhBVkVfREVDTF9HRVRMT0FEQVZHQAorSEFWRV9ERUNMX0dFVExPR0lOX1IgPSBASEFWRV9ERUNMX0dFVExPR0lOX1JACitIQVZFX0RFQ0xfR0VUUEFHRVNJWkUgPSBASEFWRV9ERUNMX0dFVFBBR0VTSVpFQAorSEFWRV9ERUNMX0dFVFVTRVJTSEVMTCA9IEBIQVZFX0RFQ0xfR0VUVVNFUlNIRUxMQAorSEFWRV9ERUNMX0lNQVhBQlMgPSBASEFWRV9ERUNMX0lNQVhBQlNACitIQVZFX0RFQ0xfSU1BWERJViA9IEBIQVZFX0RFQ0xfSU1BWERJVkAKK0hBVkVfREVDTF9MREVYUEwgPSBASEFWRV9ERUNMX0xERVhQTEAKK0hBVkVfREVDTF9MT0NBTFRJTUVfUiA9IEBIQVZFX0RFQ0xfTE9DQUxUSU1FX1JACitIQVZFX0RFQ0xfTE9HMTBMID0gQEhBVkVfREVDTF9MT0cxMExACitIQVZFX0RFQ0xfTE9HMiA9IEBIQVZFX0RFQ0xfTE9HMkAKK0hBVkVfREVDTF9MT0cyRiA9IEBIQVZFX0RFQ0xfTE9HMkZACitIQVZFX0RFQ0xfTE9HMkwgPSBASEFWRV9ERUNMX0xPRzJMQAorSEFWRV9ERUNMX0xPR0IgPSBASEFWRV9ERUNMX0xPR0JACitIQVZFX0RFQ0xfTE9HTCA9IEBIQVZFX0RFQ0xfTE9HTEAKK0hBVkVfREVDTF9NRU1NRU0gPSBASEFWRV9ERUNMX01FTU1FTUAKK0hBVkVfREVDTF9NRU1SQ0hSID0gQEhBVkVfREVDTF9NRU1SQ0hSQAorSEFWRV9ERUNMX09CU1RBQ0tfUFJJTlRGID0gQEhBVkVfREVDTF9PQlNUQUNLX1BSSU5URkAKK0hBVkVfREVDTF9SRU1BSU5ERVIgPSBASEFWRV9ERUNMX1JFTUFJTkRFUkAKK0hBVkVfREVDTF9SRU1BSU5ERVJMID0gQEhBVkVfREVDTF9SRU1BSU5ERVJMQAorSEFWRV9ERUNMX1JJTlRGID0gQEhBVkVfREVDTF9SSU5URkAKK0hBVkVfREVDTF9ST1VORCA9IEBIQVZFX0RFQ0xfUk9VTkRACitIQVZFX0RFQ0xfUk9VTkRGID0gQEhBVkVfREVDTF9ST1VOREZACitIQVZFX0RFQ0xfUk9VTkRMID0gQEhBVkVfREVDTF9ST1VORExACitIQVZFX0RFQ0xfU0VURU5WID0gQEhBVkVfREVDTF9TRVRFTlZACitIQVZFX0RFQ0xfU0VUSE9TVE5BTUUgPSBASEFWRV9ERUNMX1NFVEhPU1ROQU1FQAorSEFWRV9ERUNMX1NJTkwgPSBASEFWRV9ERUNMX1NJTkxACitIQVZFX0RFQ0xfU05QUklOVEYgPSBASEFWRV9ERUNMX1NOUFJJTlRGQAorSEFWRV9ERUNMX1NRUlRMID0gQEhBVkVfREVDTF9TUVJUTEAKK0hBVkVfREVDTF9TVFJEVVAgPSBASEFWRV9ERUNMX1NUUkRVUEAKK0hBVkVfREVDTF9TVFJFUlJPUl9SID0gQEhBVkVfREVDTF9TVFJFUlJPUl9SQAorSEFWRV9ERUNMX1NUUk5EVVAgPSBASEFWRV9ERUNMX1NUUk5EVVBACitIQVZFX0RFQ0xfU1RSTkxFTiA9IEBIQVZFX0RFQ0xfU1RSTkxFTkAKK0hBVkVfREVDTF9TVFJTSUdOQUwgPSBASEFWRV9ERUNMX1NUUlNJR05BTEAKK0hBVkVfREVDTF9TVFJUT0lNQVggPSBASEFWRV9ERUNMX1NUUlRPSU1BWEAKK0hBVkVfREVDTF9TVFJUT0tfUiA9IEBIQVZFX0RFQ0xfU1RSVE9LX1JACitIQVZFX0RFQ0xfU1RSVE9VTUFYID0gQEhBVkVfREVDTF9TVFJUT1VNQVhACitIQVZFX0RFQ0xfVEFOTCA9IEBIQVZFX0RFQ0xfVEFOTEAKK0hBVkVfREVDTF9UUlVOQyA9IEBIQVZFX0RFQ0xfVFJVTkNACitIQVZFX0RFQ0xfVFJVTkNGID0gQEhBVkVfREVDTF9UUlVOQ0ZACitIQVZFX0RFQ0xfVFJVTkNMID0gQEhBVkVfREVDTF9UUlVOQ0xACitIQVZFX0RFQ0xfVFRZTkFNRV9SID0gQEhBVkVfREVDTF9UVFlOQU1FX1JACitIQVZFX0RFQ0xfVU5TRVRFTlYgPSBASEFWRV9ERUNMX1VOU0VURU5WQAorSEFWRV9ERUNMX1ZTTlBSSU5URiA9IEBIQVZFX0RFQ0xfVlNOUFJJTlRGQAorSEFWRV9ERUNMX1dDVE9CID0gQEhBVkVfREVDTF9XQ1RPQkAKK0hBVkVfREVDTF9XQ1dJRFRIID0gQEhBVkVfREVDTF9XQ1dJRFRIQAorSEFWRV9EUFJJTlRGID0gQEhBVkVfRFBSSU5URkAKK0hBVkVfRFVQMiA9IEBIQVZFX0RVUDJACitIQVZFX0RVUDMgPSBASEFWRV9EVVAzQAorSEFWRV9FVUlEQUNDRVNTID0gQEhBVkVfRVVJREFDQ0VTU0AKK0hBVkVfRVhQRiA9IEBIQVZFX0VYUEZACitIQVZFX0VYUEwgPSBASEFWRV9FWFBMQAorSEFWRV9FWFBNMSA9IEBIQVZFX0VYUE0xQAorSEFWRV9FWFBNMUYgPSBASEFWRV9FWFBNMUZACitIQVZFX0ZBQlNGID0gQEhBVkVfRkFCU0ZACitIQVZFX0ZBQlNMID0gQEhBVkVfRkFCU0xACitIQVZFX0ZBQ0NFU1NBVCA9IEBIQVZFX0ZBQ0NFU1NBVEAKK0hBVkVfRkNIRElSID0gQEhBVkVfRkNIRElSQAorSEFWRV9GQ0hNT0RBVCA9IEBIQVZFX0ZDSE1PREFUQAorSEFWRV9GQ0hPV05BVCA9IEBIQVZFX0ZDSE9XTkFUQAorSEFWRV9GQ05UTCA9IEBIQVZFX0ZDTlRMQAorSEFWRV9GREFUQVNZTkMgPSBASEFWRV9GREFUQVNZTkNACitIQVZFX0ZFQVRVUkVTX0ggPSBASEFWRV9GRUFUVVJFU19IQAorSEFWRV9GRlNMID0gQEhBVkVfRkZTTEAKK0hBVkVfRkZTTEwgPSBASEFWRV9GRlNMTEAKK0hBVkVfRk1BID0gQEhBVkVfRk1BQAorSEFWRV9GTUFGID0gQEhBVkVfRk1BRkAKK0hBVkVfRk1BTCA9IEBIQVZFX0ZNQUxACitIQVZFX0ZNT0RGID0gQEhBVkVfRk1PREZACitIQVZFX0ZNT0RMID0gQEhBVkVfRk1PRExACitIQVZFX0ZSRVhQRiA9IEBIQVZFX0ZSRVhQRkAKK0hBVkVfRlNFRUtPID0gQEhBVkVfRlNFRUtPQAorSEFWRV9GU1RBVEFUID0gQEhBVkVfRlNUQVRBVEAKK0hBVkVfRlNZTkMgPSBASEFWRV9GU1lOQ0AKK0hBVkVfRlRFTExPID0gQEhBVkVfRlRFTExPQAorSEFWRV9GVFJVTkNBVEUgPSBASEFWRV9GVFJVTkNBVEVACitIQVZFX0ZVVElNRU5TID0gQEhBVkVfRlVUSU1FTlNACitIQVZFX0dDSl9DID0gQEhBVkVfR0NKX0NACitIQVZFX0dDSl9JTl9QQVRIID0gQEhBVkVfR0NKX0lOX1BBVEhACitIQVZFX0dFVERUQUJMRVNJWkUgPSBASEFWRV9HRVREVEFCTEVTSVpFQAorSEFWRV9HRVRHUk9VUFMgPSBASEFWRV9HRVRHUk9VUFNACitIQVZFX0dFVEhPU1ROQU1FID0gQEhBVkVfR0VUSE9TVE5BTUVACitIQVZFX0dFVExPR0lOID0gQEhBVkVfR0VUTE9HSU5ACitIQVZFX0dFVE9QVF9IID0gQEhBVkVfR0VUT1BUX0hACitIQVZFX0dFVFBBR0VTSVpFID0gQEhBVkVfR0VUUEFHRVNJWkVACitIQVZFX0dFVFNVQk9QVCA9IEBIQVZFX0dFVFNVQk9QVEAKK0hBVkVfR0lKID0gQEhBVkVfR0lKQAorSEFWRV9HSUpfSU5fUEFUSCA9IEBIQVZFX0dJSl9JTl9QQVRIQAorSEFWRV9HUkFOVFBUID0gQEhBVkVfR1JBTlRQVEAKK0hBVkVfR1JPVVBfTUVNQkVSID0gQEhBVkVfR1JPVVBfTUVNQkVSQAorSEFWRV9IWVBPVEYgPSBASEFWRV9IWVBPVEZACitIQVZFX0hZUE9UTCA9IEBIQVZFX0hZUE9UTEAKK0hBVkVfSUxPR0IgPSBASEFWRV9JTE9HQkAKK0hBVkVfSUxPR0JGID0gQEhBVkVfSUxPR0JGQAorSEFWRV9JTE9HQkwgPSBASEFWRV9JTE9HQkxACitIQVZFX0lOVFRZUEVTX0ggPSBASEFWRV9JTlRUWVBFU19IQAorSEFWRV9JU05BTkQgPSBASEFWRV9JU05BTkRACitIQVZFX0lTTkFORiA9IEBIQVZFX0lTTkFORkAKK0hBVkVfSVNOQU5MID0gQEhBVkVfSVNOQU5MQAorSEFWRV9JU1dCTEFOSyA9IEBIQVZFX0lTV0JMQU5LQAorSEFWRV9JU1dDTlRSTCA9IEBIQVZFX0lTV0NOVFJMQAorSEFWRV9KQVZBID0gQEhBVkVfSkFWQUAKK0hBVkVfSkFWQUMgPSBASEFWRV9KQVZBQ0AKK0hBVkVfSkFWQUNfRU5WVkFSID0gQEhBVkVfSkFWQUNfRU5WVkFSQAorSEFWRV9KQVZBQ19JTl9QQVRIID0gQEhBVkVfSkFWQUNfSU5fUEFUSEAKK0hBVkVfSkFWQV9FTlZWQVIgPSBASEFWRV9KQVZBX0VOVlZBUkAKK0hBVkVfSkFWQV9JTl9QQVRIID0gQEhBVkVfSkFWQV9JTl9QQVRIQAorSEFWRV9KSUtFUyA9IEBIQVZFX0pJS0VTQAorSEFWRV9KSUtFU19JTl9QQVRIID0gQEhBVkVfSklLRVNfSU5fUEFUSEAKK0hBVkVfSlJFID0gQEhBVkVfSlJFQAorSEFWRV9KUkVfSU5fUEFUSCA9IEBIQVZFX0pSRV9JTl9QQVRIQAorSEFWRV9KVklFVyA9IEBIQVZFX0pWSUVXQAorSEFWRV9KVklFV19JTl9QQVRIID0gQEhBVkVfSlZJRVdfSU5fUEFUSEAKK0hBVkVfTENITU9EID0gQEhBVkVfTENITU9EQAorSEFWRV9MQ0hPV04gPSBASEFWRV9MQ0hPV05ACitIQVZFX0xERVhQRiA9IEBIQVZFX0xERVhQRkAKK0hBVkVfTElOSyA9IEBIQVZFX0xJTktACitIQVZFX0xJTktBVCA9IEBIQVZFX0xJTktBVEAKK0hBVkVfTE9HMTBGID0gQEhBVkVfTE9HMTBGQAorSEFWRV9MT0cxMEwgPSBASEFWRV9MT0cxMExACitIQVZFX0xPRzFQID0gQEhBVkVfTE9HMVBACitIQVZFX0xPRzFQRiA9IEBIQVZFX0xPRzFQRkAKK0hBVkVfTE9HMVBMID0gQEhBVkVfTE9HMVBMQAorSEFWRV9MT0dCRiA9IEBIQVZFX0xPR0JGQAorSEFWRV9MT0dCTCA9IEBIQVZFX0xPR0JMQAorSEFWRV9MT0dGID0gQEhBVkVfTE9HRkAKK0hBVkVfTE9HTCA9IEBIQVZFX0xPR0xACitIQVZFX0xPTkdfTE9OR19JTlQgPSBASEFWRV9MT05HX0xPTkdfSU5UQAorSEFWRV9MU1RBVCA9IEBIQVZFX0xTVEFUQAorSEFWRV9NQlJMRU4gPSBASEFWRV9NQlJMRU5ACitIQVZFX01CUlRPV0MgPSBASEFWRV9NQlJUT1dDQAorSEFWRV9NQlNJTklUID0gQEhBVkVfTUJTSU5JVEAKK0hBVkVfTUJTTEVOID0gQEhBVkVfTUJTTEVOQAorSEFWRV9NQlNOUlRPV0NTID0gQEhBVkVfTUJTTlJUT1dDU0AKK0hBVkVfTUJTUlRPV0NTID0gQEhBVkVfTUJTUlRPV0NTQAorSEFWRV9NRU1DSFIgPSBASEFWRV9NRU1DSFJACitIQVZFX01FTVBDUFkgPSBASEFWRV9NRU1QQ1BZQAorSEFWRV9NS0RJUkFUID0gQEhBVkVfTUtESVJBVEAKK0hBVkVfTUtEVEVNUCA9IEBIQVZFX01LRFRFTVBACitIQVZFX01LRklGTyA9IEBIQVZFX01LRklGT0AKK0hBVkVfTUtGSUZPQVQgPSBASEFWRV9NS0ZJRk9BVEAKK0hBVkVfTUtOT0QgPSBASEFWRV9NS05PREAKK0hBVkVfTUtOT0RBVCA9IEBIQVZFX01LTk9EQVRACitIQVZFX01LT1NURU1QID0gQEhBVkVfTUtPU1RFTVBACitIQVZFX01LT1NURU1QUyA9IEBIQVZFX01LT1NURU1QU0AKK0hBVkVfTUtTVEVNUCA9IEBIQVZFX01LU1RFTVBACitIQVZFX01LU1RFTVBTID0gQEhBVkVfTUtTVEVNUFNACitIQVZFX01PREZGID0gQEhBVkVfTU9ERkZACitIQVZFX01PREZMID0gQEhBVkVfTU9ERkxACitIQVZFX01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUiA9IEBIQVZFX01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUkAKK0hBVkVfTkFOT1NMRUVQID0gQEhBVkVfTkFOT1NMRUVQQAorSEFWRV9PUEVOQVQgPSBASEFWRV9PUEVOQVRACitIQVZFX09TX0ggPSBASEFWRV9PU19IQAorSEFWRV9QQ0xPU0UgPSBASEFWRV9QQ0xPU0VACitIQVZFX1BJUEUgPSBASEFWRV9QSVBFQAorSEFWRV9QSVBFMiA9IEBIQVZFX1BJUEUyQAorSEFWRV9QT1BFTiA9IEBIQVZFX1BPUEVOQAorSEFWRV9QT1NJWF9PUEVOUFQgPSBASEFWRV9QT1NJWF9PUEVOUFRACitIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HID0gQEhBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkdACitIQVZFX1BPU0lYX1NQQVdOID0gQEhBVkVfUE9TSVhfU1BBV05ACitIQVZFX1BPU0lYX1NQQVdOQVRUUl9UID0gQEhBVkVfUE9TSVhfU1BBV05BVFRSX1RACitIQVZFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19UID0gQEhBVkVfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX1RACitIQVZFX1BPV0YgPSBASEFWRV9QT1dGQAorSEFWRV9QUkVBRCA9IEBIQVZFX1BSRUFEQAorSEFWRV9QVEhSRUFEX1NJR01BU0sgPSBASEFWRV9QVEhSRUFEX1NJR01BU0tACitIQVZFX1BUU05BTUUgPSBASEFWRV9QVFNOQU1FQAorSEFWRV9QVFNOQU1FX1IgPSBASEFWRV9QVFNOQU1FX1JACitIQVZFX1BXUklURSA9IEBIQVZFX1BXUklURUAKK0hBVkVfUkFJU0UgPSBASEFWRV9SQUlTRUAKK0hBVkVfUkFORE9NID0gQEhBVkVfUkFORE9NQAorSEFWRV9SQU5ET01fSCA9IEBIQVZFX1JBTkRPTV9IQAorSEFWRV9SQU5ET01fUiA9IEBIQVZFX1JBTkRPTV9SQAorSEFWRV9SQVdNRU1DSFIgPSBASEFWRV9SQVdNRU1DSFJACitIQVZFX1JFQURMSU5LID0gQEhBVkVfUkVBRExJTktACitIQVZFX1JFQURMSU5LQVQgPSBASEFWRV9SRUFETElOS0FUQAorSEFWRV9SRUFMUEFUSCA9IEBIQVZFX1JFQUxQQVRIQAorSEFWRV9SRU1BSU5ERVIgPSBASEFWRV9SRU1BSU5ERVJACitIQVZFX1JFTUFJTkRFUkYgPSBASEFWRV9SRU1BSU5ERVJGQAorSEFWRV9SRU5BTUVBVCA9IEBIQVZFX1JFTkFNRUFUQAorSEFWRV9SSU5UID0gQEhBVkVfUklOVEAKK0hBVkVfUklOVEwgPSBASEFWRV9SSU5UTEAKK0hBVkVfUlBNQVRDSCA9IEBIQVZFX1JQTUFUQ0hACitIQVZFX1NBTUVfTE9OR19ET1VCTEVfQVNfRE9VQkxFID0gQEhBVkVfU0FNRV9MT05HX0RPVUJMRV9BU19ET1VCTEVACitIQVZFX1NDSEVEX0ggPSBASEFWRV9TQ0hFRF9IQAorSEFWRV9TRVRFTlYgPSBASEFWRV9TRVRFTlZACitIQVZFX1NFVEhPU1ROQU1FID0gQEhBVkVfU0VUSE9TVE5BTUVACitIQVZFX1NJR0FDVElPTiA9IEBIQVZFX1NJR0FDVElPTkAKK0hBVkVfU0lHSEFORExFUl9UID0gQEhBVkVfU0lHSEFORExFUl9UQAorSEFWRV9TSUdJTkZPX1QgPSBASEFWRV9TSUdJTkZPX1RACitIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1QgPSBASEFWRV9TSUdORURfU0lHX0FUT01JQ19UQAorSEFWRV9TSUdORURfV0NIQVJfVCA9IEBIQVZFX1NJR05FRF9XQ0hBUl9UQAorSEFWRV9TSUdORURfV0lOVF9UID0gQEhBVkVfU0lHTkVEX1dJTlRfVEAKK0hBVkVfU0lHU0VUX1QgPSBASEFWRV9TSUdTRVRfVEAKK0hBVkVfU0lORiA9IEBIQVZFX1NJTkZACitIQVZFX1NJTkhGID0gQEhBVkVfU0lOSEZACitIQVZFX1NJTkwgPSBASEFWRV9TSU5MQAorSEFWRV9TTEVFUCA9IEBIQVZFX1NMRUVQQAorSEFWRV9TUEFXTl9IID0gQEhBVkVfU1BBV05fSEAKK0hBVkVfU1FSVEYgPSBASEFWRV9TUVJURkAKK0hBVkVfU1FSVEwgPSBASEFWRV9TUVJUTEAKK0hBVkVfU1RESU5UX0ggPSBASEFWRV9TVERJTlRfSEAKK0hBVkVfU1RQQ1BZID0gQEhBVkVfU1RQQ1BZQAorSEFWRV9TVFBOQ1BZID0gQEhBVkVfU1RQTkNQWUAKK0hBVkVfU1RSQ0FTRVNUUiA9IEBIQVZFX1NUUkNBU0VTVFJACitIQVZFX1NUUkNIUk5VTCA9IEBIQVZFX1NUUkNIUk5VTEAKK0hBVkVfU1RSUEJSSyA9IEBIQVZFX1NUUlBCUktACitIQVZFX1NUUlBUSU1FID0gQEhBVkVfU1RSUFRJTUVACitIQVZFX1NUUlNFUCA9IEBIQVZFX1NUUlNFUEAKK0hBVkVfU1RSVE9EID0gQEhBVkVfU1RSVE9EQAorSEFWRV9TVFJUT0xMID0gQEhBVkVfU1RSVE9MTEAKK0hBVkVfU1RSVE9VTEwgPSBASEFWRV9TVFJUT1VMTEAKK0hBVkVfU1RSVUNUX1JBTkRPTV9EQVRBID0gQEhBVkVfU1RSVUNUX1JBTkRPTV9EQVRBQAorSEFWRV9TVFJVQ1RfU0NIRURfUEFSQU0gPSBASEFWRV9TVFJVQ1RfU0NIRURfUEFSQU1ACitIQVZFX1NUUlVDVF9TSUdBQ1RJT05fU0FfU0lHQUNUSU9OID0gQEhBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT05ACitIQVZFX1NUUlZFUlNDTVAgPSBASEFWRV9TVFJWRVJTQ01QQAorSEFWRV9TWU1MSU5LID0gQEhBVkVfU1lNTElOS0AKK0hBVkVfU1lNTElOS0FUID0gQEhBVkVfU1lNTElOS0FUQAorSEFWRV9TWVNfQklUWVBFU19IID0gQEhBVkVfU1lTX0JJVFlQRVNfSEAKK0hBVkVfU1lTX0lOVFRZUEVTX0ggPSBASEFWRV9TWVNfSU5UVFlQRVNfSEAKK0hBVkVfU1lTX0xPQURBVkdfSCA9IEBIQVZFX1NZU19MT0FEQVZHX0hACitIQVZFX1NZU19QQVJBTV9IID0gQEhBVkVfU1lTX1BBUkFNX0hACitIQVZFX1NZU19UWVBFU19IID0gQEhBVkVfU1lTX1RZUEVTX0hACitIQVZFX1RBTkYgPSBASEFWRV9UQU5GQAorSEFWRV9UQU5IRiA9IEBIQVZFX1RBTkhGQAorSEFWRV9UQU5MID0gQEhBVkVfVEFOTEAKK0hBVkVfVElNRUdNID0gQEhBVkVfVElNRUdNQAorSEFWRV9UWVBFX1ZPTEFUSUxFX1NJR19BVE9NSUNfVCA9IEBIQVZFX1RZUEVfVk9MQVRJTEVfU0lHX0FUT01JQ19UQAorSEFWRV9VTklTVERfSCA9IEBIQVZFX1VOSVNURF9IQAorSEFWRV9VTkxJTktBVCA9IEBIQVZFX1VOTElOS0FUQAorSEFWRV9VTkxPQ0tQVCA9IEBIQVZFX1VOTE9DS1BUQAorSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UID0gQEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVEAKK0hBVkVfVVNMRUVQID0gQEhBVkVfVVNMRUVQQAorSEFWRV9VVElNRU5TQVQgPSBASEFWRV9VVElNRU5TQVRACitIQVZFX1ZBU1BSSU5URiA9IEBIQVZFX1ZBU1BSSU5URkAKK0hBVkVfVkRQUklOVEYgPSBASEFWRV9WRFBSSU5URkAKK0hBVkVfV0NIQVJfSCA9IEBIQVZFX1dDSEFSX0hACitIQVZFX1dDSEFSX1QgPSBASEFWRV9XQ0hBUl9UQAorSEFWRV9XQ1BDUFkgPSBASEFWRV9XQ1BDUFlACitIQVZFX1dDUE5DUFkgPSBASEFWRV9XQ1BOQ1BZQAorSEFWRV9XQ1JUT01CID0gQEhBVkVfV0NSVE9NQkAKK0hBVkVfV0NTQ0FTRUNNUCA9IEBIQVZFX1dDU0NBU0VDTVBACitIQVZFX1dDU0NBVCA9IEBIQVZFX1dDU0NBVEAKK0hBVkVfV0NTQ0hSID0gQEhBVkVfV0NTQ0hSQAorSEFWRV9XQ1NDTVAgPSBASEFWRV9XQ1NDTVBACitIQVZFX1dDU0NPTEwgPSBASEFWRV9XQ1NDT0xMQAorSEFWRV9XQ1NDUFkgPSBASEFWRV9XQ1NDUFlACitIQVZFX1dDU0NTUE4gPSBASEFWRV9XQ1NDU1BOQAorSEFWRV9XQ1NEVVAgPSBASEFWRV9XQ1NEVVBACitIQVZFX1dDU0xFTiA9IEBIQVZFX1dDU0xFTkAKK0hBVkVfV0NTTkNBU0VDTVAgPSBASEFWRV9XQ1NOQ0FTRUNNUEAKK0hBVkVfV0NTTkNBVCA9IEBIQVZFX1dDU05DQVRACitIQVZFX1dDU05DTVAgPSBASEFWRV9XQ1NOQ01QQAorSEFWRV9XQ1NOQ1BZID0gQEhBVkVfV0NTTkNQWUAKK0hBVkVfV0NTTkxFTiA9IEBIQVZFX1dDU05MRU5ACitIQVZFX1dDU05SVE9NQlMgPSBASEFWRV9XQ1NOUlRPTUJTQAorSEFWRV9XQ1NQQlJLID0gQEhBVkVfV0NTUEJSS0AKK0hBVkVfV0NTUkNIUiA9IEBIQVZFX1dDU1JDSFJACitIQVZFX1dDU1JUT01CUyA9IEBIQVZFX1dDU1JUT01CU0AKK0hBVkVfV0NTU1BOID0gQEhBVkVfV0NTU1BOQAorSEFWRV9XQ1NTVFIgPSBASEFWRV9XQ1NTVFJACitIQVZFX1dDU1RPSyA9IEBIQVZFX1dDU1RPS0AKK0hBVkVfV0NTV0lEVEggPSBASEFWRV9XQ1NXSURUSEAKK0hBVkVfV0NTWEZSTSA9IEBIQVZFX1dDU1hGUk1ACitIQVZFX1dDVFJBTlNfVCA9IEBIQVZFX1dDVFJBTlNfVEAKK0hBVkVfV0NUWVBFX0ggPSBASEFWRV9XQ1RZUEVfSEAKK0hBVkVfV0NUWVBFX1QgPSBASEFWRV9XQ1RZUEVfVEAKK0hBVkVfV0lOU09DSzJfSCA9IEBIQVZFX1dJTlNPQ0syX0hACitIQVZFX1dJTlRfVCA9IEBIQVZFX1dJTlRfVEAKK0hBVkVfV01FTUNIUiA9IEBIQVZFX1dNRU1DSFJACitIQVZFX1dNRU1DTVAgPSBASEFWRV9XTUVNQ01QQAorSEFWRV9XTUVNQ1BZID0gQEhBVkVfV01FTUNQWUAKK0hBVkVfV01FTU1PVkUgPSBASEFWRV9XTUVNTU9WRUAKK0hBVkVfV01FTVNFVCA9IEBIQVZFX1dNRU1TRVRACiBIQVZFX19CT09MID0gQEhBVkVfX0JPT0xACitIQVZFX19FWElUID0gQEhBVkVfX0VYSVRACitIRUxQMk1BTiA9IEBIRUxQMk1BTkAKK0lOQ0xVREVfTkVYVCA9IEBJTkNMVURFX05FWFRACitJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFID0gQElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVACitJTlNUQUxMID0gQElOU1RBTExACiBJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAogSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKIElOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAogSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVDMyX01BWF9MVF9JTlRNQVhfTUFYID0gQElOVDMyX01BWF9MVF9JTlRNQVhfTUFYQAorSU5UNjRfTUFYX0VRX0xPTkdfTUFYID0gQElOVDY0X01BWF9FUV9MT05HX01BWEAKIElOVExMSUJTID0gQElOVExMSUJTQAogSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSVNOQU5EX0xJQk0gPSBASVNOQU5EX0xJQk1ACitJU05BTkZfTElCTSA9IEBJU05BTkZfTElCTUAKK0lTTkFOTF9MSUJNID0gQElTTkFOTF9MSUJNQAorSVNOQU5fTElCTSA9IEBJU05BTl9MSUJNQAorTERFWFBMX0xJQk0gPSBATERFWFBMX0xJQk1ACitMREVYUF9MSUJNID0gQExERVhQX0xJQk1ACiBMREZMQUdTID0gQExERkxBR1NACiBMRVggPSBATEVYQAogTEVYTElCID0gQExFWExJQkAKK0xFWF9JU19GTEVYID0gQExFWF9JU19GTEVYQAogTEVYX09VVFBVVF9ST09UID0gQExFWF9PVVRQVVRfUk9PVEAKK0xJQkJJU09OX0xJQkRFUFMgPSBATElCQklTT05fTElCREVQU0AKK0xJQkJJU09OX0xUTElCREVQUyA9IEBMSUJCSVNPTl9MVExJQkRFUFNACiBMSUJJQ09OViA9IEBMSUJJQ09OVkAKIExJQklOVEwgPSBATElCSU5UTEAKK0xJQk1VTFRJVEhSRUFEID0gQExJQk1VTFRJVEhSRUFEQAogTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUFRIID0gQExJQlBUSEAKK0xJQlBUSF9QUkVGSVggPSBATElCUFRIX1BSRUZJWEAKIExJQlMgPSBATElCU0AKK0xJQlRIUkVBRCA9IEBMSUJUSFJFQURACitMSUJVTklTVFJJTkdfVU5JVFlQRVNfSCA9IEBMSUJVTklTVFJJTkdfVU5JVFlQRVNfSEAKK0xJQlVOSVNUUklOR19VTklXSURUSF9IID0gQExJQlVOSVNUUklOR19VTklXSURUSF9IQAorTE9DQUxDSEFSU0VUX1RFU1RTX0VOVklST05NRU5UID0gQExPQ0FMQ0hBUlNFVF9URVNUU19FTlZJUk9OTUVOVEAKK0xPQ0FMRV9GUl9VVEY4ID0gQExPQ0FMRV9GUl9VVEY4QAorTE9DQUxFX0pBID0gQExPQ0FMRV9KQUAKK0xPQ0FMRV9aSF9DTiA9IEBMT0NBTEVfWkhfQ05ACiBMVExJQklDT05WID0gQExUTElCSUNPTlZACiBMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJNVUxUSVRIUkVBRCA9IEBMVExJQk1VTFRJVEhSRUFEQAogTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xUTElCUFRIID0gQExUTElCUFRIQAorTFRMSUJUSFJFQUQgPSBATFRMSUJUSFJFQURACiBNNCA9IEBNNEAKK000X0RFQlVHRklMRSA9IEBNNF9ERUJVR0ZJTEVACitNNF9HTlUgPSBATTRfR05VQAogTUFLRUlORk8gPSBATUFLRUlORk9ACi1NS0lOU1RBTExESVJTID0gQE1LSU5TVEFMTERJUlNACitNS0RJUl9QID0gQE1LRElSX1BACiBNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAogTVNHTUVSR0UgPSBATVNHTUVSR0VACi1PMENGTEFHUyA9IEBPMENGTEFHU0AKLU8wQ1hYRkxBR1MgPSBATzBDWFhGTEFHU0AKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0VSUk5PX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRVJSTk9fSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0ZDTlRMX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRkNOVExfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0ZMT0FUX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRkxPQVRfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0dFVE9QVF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX0dFVE9QVF9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfSU5UVFlQRVNfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9JTlRUWVBFU19IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfTUFUSF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX01BVEhfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NDSEVEX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU0NIRURfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NJR05BTF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NJR05BTF9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1BBV05fSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TUEFXTl9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1REREVGX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1REREVGX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERJTlRfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERJTlRfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURElPX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RESU9fSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURExJQl9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURExJQl9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RSSU5HX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RSSU5HX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfU1RBVF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19TVEFUX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfVFlQRVNfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfVFlQRVNfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19XQUlUX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1lTX1dBSVRfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1RJTUVfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9USU1FX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9VTklTVERfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9VTklTVERfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDSEFSX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfV0NIQVJfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDVFlQRV9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDVFlQRV9IQAorTkVYVF9FUlJOT19IID0gQE5FWFRfRVJSTk9fSEAKK05FWFRfRkNOVExfSCA9IEBORVhUX0ZDTlRMX0hACitORVhUX0ZMT0FUX0ggPSBATkVYVF9GTE9BVF9IQAorTkVYVF9HRVRPUFRfSCA9IEBORVhUX0dFVE9QVF9IQAorTkVYVF9JTlRUWVBFU19IID0gQE5FWFRfSU5UVFlQRVNfSEAKK05FWFRfTUFUSF9IID0gQE5FWFRfTUFUSF9IQAorTkVYVF9TQ0hFRF9IID0gQE5FWFRfU0NIRURfSEAKK05FWFRfU0lHTkFMX0ggPSBATkVYVF9TSUdOQUxfSEAKK05FWFRfU1BBV05fSCA9IEBORVhUX1NQQVdOX0hACitORVhUX1NURERFRl9IID0gQE5FWFRfU1REREVGX0hACitORVhUX1NURElOVF9IID0gQE5FWFRfU1RESU5UX0hACitORVhUX1NURElPX0ggPSBATkVYVF9TVERJT19IQAorTkVYVF9TVERMSUJfSCA9IEBORVhUX1NURExJQl9IQAorTkVYVF9TVFJJTkdfSCA9IEBORVhUX1NUUklOR19IQAorTkVYVF9TWVNfU1RBVF9IID0gQE5FWFRfU1lTX1NUQVRfSEAKK05FWFRfU1lTX1RZUEVTX0ggPSBATkVYVF9TWVNfVFlQRVNfSEAKK05FWFRfU1lTX1dBSVRfSCA9IEBORVhUX1NZU19XQUlUX0hACitORVhUX1RJTUVfSCA9IEBORVhUX1RJTUVfSEAKK05FWFRfVU5JU1REX0ggPSBATkVYVF9VTklTVERfSEAKK05FWFRfV0NIQVJfSCA9IEBORVhUX1dDSEFSX0hACitORVhUX1dDVFlQRV9IID0gQE5FWFRfV0NUWVBFX0hACiBPQkpFWFQgPSBAT0JKRVhUQAogUEFDS0FHRSA9IEBQQUNLQUdFQAogUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX0NPUFlSSUdIVF9ZRUFSID0gQFBBQ0tBR0VfQ09QWVJJR0hUX1lFQVJACiBQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAogUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACiBQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACiBQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAogUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMID0gQFBFUkxACiBQT1NVQiA9IEBQT1NVQkAKK1BSQUdNQV9DT0xVTU5TID0gQFBSQUdNQV9DT0xVTU5TQAorUFJBR01BX1NZU1RFTV9IRUFERVIgPSBAUFJBR01BX1NZU1RFTV9IRUFERVJACitQUklQVFJfUFJFRklYID0gQFBSSVBUUl9QUkVGSVhACitQUklfTUFDUk9TX0JST0tFTiA9IEBQUklfTUFDUk9TX0JST0tFTkAKK1BUSFJFQURfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQyA9IEBQVEhSRUFEX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUNACitQVFJESUZGX1RfU1VGRklYID0gQFBUUkRJRkZfVF9TVUZGSVhACiBSQU5MSUIgPSBAUkFOTElCQAorUkVQTEFDRV9CVE9XQyA9IEBSRVBMQUNFX0JUT1dDQAorUkVQTEFDRV9DQUxMT0MgPSBAUkVQTEFDRV9DQUxMT0NACitSRVBMQUNFX0NBTk9OSUNBTElaRV9GSUxFX05BTUUgPSBAUkVQTEFDRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FQAorUkVQTEFDRV9DQlJURiA9IEBSRVBMQUNFX0NCUlRGQAorUkVQTEFDRV9DQlJUTCA9IEBSRVBMQUNFX0NCUlRMQAorUkVQTEFDRV9DRUlMID0gQFJFUExBQ0VfQ0VJTEAKK1JFUExBQ0VfQ0VJTEYgPSBAUkVQTEFDRV9DRUlMRkAKK1JFUExBQ0VfQ0VJTEwgPSBAUkVQTEFDRV9DRUlMTEAKK1JFUExBQ0VfQ0hPV04gPSBAUkVQTEFDRV9DSE9XTkAKK1JFUExBQ0VfQ0xPU0UgPSBAUkVQTEFDRV9DTE9TRUAKK1JFUExBQ0VfRFBSSU5URiA9IEBSRVBMQUNFX0RQUklOVEZACitSRVBMQUNFX0RVUCA9IEBSRVBMQUNFX0RVUEAKK1JFUExBQ0VfRFVQMiA9IEBSRVBMQUNFX0RVUDJACitSRVBMQUNFX0VYUDIgPSBAUkVQTEFDRV9FWFAyQAorUkVQTEFDRV9FWFAyTCA9IEBSRVBMQUNFX0VYUDJMQAorUkVQTEFDRV9FWFBNMSA9IEBSRVBMQUNFX0VYUE0xQAorUkVQTEFDRV9FWFBNMUYgPSBAUkVQTEFDRV9FWFBNMUZACitSRVBMQUNFX0ZBQlNMID0gQFJFUExBQ0VfRkFCU0xACitSRVBMQUNFX0ZDSE9XTkFUID0gQFJFUExBQ0VfRkNIT1dOQVRACitSRVBMQUNFX0ZDTE9TRSA9IEBSRVBMQUNFX0ZDTE9TRUAKK1JFUExBQ0VfRkNOVEwgPSBAUkVQTEFDRV9GQ05UTEAKK1JFUExBQ0VfRkRPUEVOID0gQFJFUExBQ0VfRkRPUEVOQAorUkVQTEFDRV9GRkxVU0ggPSBAUkVQTEFDRV9GRkxVU0hACitSRVBMQUNFX0ZMT09SID0gQFJFUExBQ0VfRkxPT1JACitSRVBMQUNFX0ZMT09SRiA9IEBSRVBMQUNFX0ZMT09SRkAKK1JFUExBQ0VfRkxPT1JMID0gQFJFUExBQ0VfRkxPT1JMQAorUkVQTEFDRV9GTUEgPSBAUkVQTEFDRV9GTUFACitSRVBMQUNFX0ZNQUYgPSBAUkVQTEFDRV9GTUFGQAorUkVQTEFDRV9GTUFMID0gQFJFUExBQ0VfRk1BTEAKK1JFUExBQ0VfRk1PRCA9IEBSRVBMQUNFX0ZNT0RACitSRVBMQUNFX0ZNT0RGID0gQFJFUExBQ0VfRk1PREZACitSRVBMQUNFX0ZNT0RMID0gQFJFUExBQ0VfRk1PRExACitSRVBMQUNFX0ZPUEVOID0gQFJFUExBQ0VfRk9QRU5ACitSRVBMQUNFX0ZQUklOVEYgPSBAUkVQTEFDRV9GUFJJTlRGQAorUkVQTEFDRV9GUFVSR0UgPSBAUkVQTEFDRV9GUFVSR0VACitSRVBMQUNFX0ZSRU9QRU4gPSBAUkVQTEFDRV9GUkVPUEVOQAorUkVQTEFDRV9GUkVYUCA9IEBSRVBMQUNFX0ZSRVhQQAorUkVQTEFDRV9GUkVYUEYgPSBAUkVQTEFDRV9GUkVYUEZACitSRVBMQUNFX0ZSRVhQTCA9IEBSRVBMQUNFX0ZSRVhQTEAKK1JFUExBQ0VfRlNFRUsgPSBAUkVQTEFDRV9GU0VFS0AKK1JFUExBQ0VfRlNFRUtPID0gQFJFUExBQ0VfRlNFRUtPQAorUkVQTEFDRV9GU1RBVCA9IEBSRVBMQUNFX0ZTVEFUQAorUkVQTEFDRV9GU1RBVEFUID0gQFJFUExBQ0VfRlNUQVRBVEAKK1JFUExBQ0VfRlRFTEwgPSBAUkVQTEFDRV9GVEVMTEAKK1JFUExBQ0VfRlRFTExPID0gQFJFUExBQ0VfRlRFTExPQAorUkVQTEFDRV9GVFJVTkNBVEUgPSBAUkVQTEFDRV9GVFJVTkNBVEVACitSRVBMQUNFX0ZVVElNRU5TID0gQFJFUExBQ0VfRlVUSU1FTlNACitSRVBMQUNFX0dFVENXRCA9IEBSRVBMQUNFX0dFVENXREAKK1JFUExBQ0VfR0VUREVMSU0gPSBAUkVQTEFDRV9HRVRERUxJTUAKK1JFUExBQ0VfR0VURE9NQUlOTkFNRSA9IEBSRVBMQUNFX0dFVERPTUFJTk5BTUVACitSRVBMQUNFX0dFVEdST1VQUyA9IEBSRVBMQUNFX0dFVEdST1VQU0AKK1JFUExBQ0VfR0VUTElORSA9IEBSRVBMQUNFX0dFVExJTkVACitSRVBMQUNFX0dFVExPR0lOX1IgPSBAUkVQTEFDRV9HRVRMT0dJTl9SQAorUkVQTEFDRV9HRVRQQUdFU0laRSA9IEBSRVBMQUNFX0dFVFBBR0VTSVpFQAorUkVQTEFDRV9IVUdFX1ZBTCA9IEBSRVBMQUNFX0hVR0VfVkFMQAorUkVQTEFDRV9IWVBPVCA9IEBSRVBMQUNFX0hZUE9UQAorUkVQTEFDRV9IWVBPVEYgPSBAUkVQTEFDRV9IWVBPVEZACitSRVBMQUNFX0hZUE9UTCA9IEBSRVBMQUNFX0hZUE9UTEAKK1JFUExBQ0VfSUxPR0IgPSBAUkVQTEFDRV9JTE9HQkAKK1JFUExBQ0VfSUxPR0JGID0gQFJFUExBQ0VfSUxPR0JGQAorUkVQTEFDRV9JU0FUVFkgPSBAUkVQTEFDRV9JU0FUVFlACitSRVBMQUNFX0lTRklOSVRFID0gQFJFUExBQ0VfSVNGSU5JVEVACitSRVBMQUNFX0lTSU5GID0gQFJFUExBQ0VfSVNJTkZACitSRVBMQUNFX0lTTkFOID0gQFJFUExBQ0VfSVNOQU5ACitSRVBMQUNFX0lTV0JMQU5LID0gQFJFUExBQ0VfSVNXQkxBTktACitSRVBMQUNFX0lTV0NOVFJMID0gQFJFUExBQ0VfSVNXQ05UUkxACitSRVBMQUNFX0lUT0xEID0gQFJFUExBQ0VfSVRPTERACitSRVBMQUNFX0xDSE9XTiA9IEBSRVBMQUNFX0xDSE9XTkAKK1JFUExBQ0VfTERFWFBMID0gQFJFUExBQ0VfTERFWFBMQAorUkVQTEFDRV9MSU5LID0gQFJFUExBQ0VfTElOS0AKK1JFUExBQ0VfTElOS0FUID0gQFJFUExBQ0VfTElOS0FUQAorUkVQTEFDRV9MT0NBTFRJTUVfUiA9IEBSRVBMQUNFX0xPQ0FMVElNRV9SQAorUkVQTEFDRV9MT0cgPSBAUkVQTEFDRV9MT0dACitSRVBMQUNFX0xPRzEwID0gQFJFUExBQ0VfTE9HMTBACitSRVBMQUNFX0xPRzEwRiA9IEBSRVBMQUNFX0xPRzEwRkAKK1JFUExBQ0VfTE9HMTBMID0gQFJFUExBQ0VfTE9HMTBMQAorUkVQTEFDRV9MT0cxUCA9IEBSRVBMQUNFX0xPRzFQQAorUkVQTEFDRV9MT0cxUEYgPSBAUkVQTEFDRV9MT0cxUEZACitSRVBMQUNFX0xPRzFQTCA9IEBSRVBMQUNFX0xPRzFQTEAKK1JFUExBQ0VfTE9HMiA9IEBSRVBMQUNFX0xPRzJACitSRVBMQUNFX0xPRzJGID0gQFJFUExBQ0VfTE9HMkZACitSRVBMQUNFX0xPRzJMID0gQFJFUExBQ0VfTE9HMkxACitSRVBMQUNFX0xPR0IgPSBAUkVQTEFDRV9MT0dCQAorUkVQTEFDRV9MT0dCRiA9IEBSRVBMQUNFX0xPR0JGQAorUkVQTEFDRV9MT0dCTCA9IEBSRVBMQUNFX0xPR0JMQAorUkVQTEFDRV9MT0dGID0gQFJFUExBQ0VfTE9HRkAKK1JFUExBQ0VfTE9HTCA9IEBSRVBMQUNFX0xPR0xACitSRVBMQUNFX0xTRUVLID0gQFJFUExBQ0VfTFNFRUtACitSRVBMQUNFX0xTVEFUID0gQFJFUExBQ0VfTFNUQVRACitSRVBMQUNFX01BTExPQyA9IEBSRVBMQUNFX01BTExPQ0AKK1JFUExBQ0VfTUJSTEVOID0gQFJFUExBQ0VfTUJSTEVOQAorUkVQTEFDRV9NQlJUT1dDID0gQFJFUExBQ0VfTUJSVE9XQ0AKK1JFUExBQ0VfTUJTSU5JVCA9IEBSRVBMQUNFX01CU0lOSVRACitSRVBMQUNFX01CU05SVE9XQ1MgPSBAUkVQTEFDRV9NQlNOUlRPV0NTQAorUkVQTEFDRV9NQlNSVE9XQ1MgPSBAUkVQTEFDRV9NQlNSVE9XQ1NACitSRVBMQUNFX01CU1RBVEVfVCA9IEBSRVBMQUNFX01CU1RBVEVfVEAKK1JFUExBQ0VfTUJUT1dDID0gQFJFUExBQ0VfTUJUT1dDQAorUkVQTEFDRV9NRU1DSFIgPSBAUkVQTEFDRV9NRU1DSFJACitSRVBMQUNFX01FTU1FTSA9IEBSRVBMQUNFX01FTU1FTUAKK1JFUExBQ0VfTUtESVIgPSBAUkVQTEFDRV9NS0RJUkAKK1JFUExBQ0VfTUtGSUZPID0gQFJFUExBQ0VfTUtGSUZPQAorUkVQTEFDRV9NS05PRCA9IEBSRVBMQUNFX01LTk9EQAorUkVQTEFDRV9NS1NURU1QID0gQFJFUExBQ0VfTUtTVEVNUEAKK1JFUExBQ0VfTUtUSU1FID0gQFJFUExBQ0VfTUtUSU1FQAorUkVQTEFDRV9NT0RGID0gQFJFUExBQ0VfTU9ERkAKK1JFUExBQ0VfTU9ERkYgPSBAUkVQTEFDRV9NT0RGRkAKK1JFUExBQ0VfTU9ERkwgPSBAUkVQTEFDRV9NT0RGTEAKK1JFUExBQ0VfTkFOID0gQFJFUExBQ0VfTkFOQAorUkVQTEFDRV9OQU5PU0xFRVAgPSBAUkVQTEFDRV9OQU5PU0xFRVBACitSRVBMQUNFX05VTEwgPSBAUkVQTEFDRV9OVUxMQAorUkVQTEFDRV9PQlNUQUNLX1BSSU5URiA9IEBSRVBMQUNFX09CU1RBQ0tfUFJJTlRGQAorUkVQTEFDRV9PUEVOID0gQFJFUExBQ0VfT1BFTkAKK1JFUExBQ0VfT1BFTkFUID0gQFJFUExBQ0VfT1BFTkFUQAorUkVQTEFDRV9QRVJST1IgPSBAUkVQTEFDRV9QRVJST1JACitSRVBMQUNFX1BPUEVOID0gQFJFUExBQ0VfUE9QRU5ACitSRVBMQUNFX1BPU0lYX1NQQVdOID0gQFJFUExBQ0VfUE9TSVhfU1BBV05ACitSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRSA9IEBSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRUAKK1JFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDIgPSBAUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMkAKK1JFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU4gPSBAUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURET1BFTkAKK1JFUExBQ0VfUFJFQUQgPSBAUkVQTEFDRV9QUkVBREAKK1JFUExBQ0VfUFJJTlRGID0gQFJFUExBQ0VfUFJJTlRGQAorUkVQTEFDRV9QVEhSRUFEX1NJR01BU0sgPSBAUkVQTEFDRV9QVEhSRUFEX1NJR01BU0tACitSRVBMQUNFX1BUU05BTUUgPSBAUkVQTEFDRV9QVFNOQU1FQAorUkVQTEFDRV9QVFNOQU1FX1IgPSBAUkVQTEFDRV9QVFNOQU1FX1JACitSRVBMQUNFX1BVVEVOViA9IEBSRVBMQUNFX1BVVEVOVkAKK1JFUExBQ0VfUFdSSVRFID0gQFJFUExBQ0VfUFdSSVRFQAorUkVQTEFDRV9SQUlTRSA9IEBSRVBMQUNFX1JBSVNFQAorUkVQTEFDRV9SQU5ET01fUiA9IEBSRVBMQUNFX1JBTkRPTV9SQAorUkVQTEFDRV9SRUFEID0gQFJFUExBQ0VfUkVBREAKK1JFUExBQ0VfUkVBRExJTksgPSBAUkVQTEFDRV9SRUFETElOS0AKK1JFUExBQ0VfUkVBTExPQyA9IEBSRVBMQUNFX1JFQUxMT0NACitSRVBMQUNFX1JFQUxQQVRIID0gQFJFUExBQ0VfUkVBTFBBVEhACitSRVBMQUNFX1JFTUFJTkRFUiA9IEBSRVBMQUNFX1JFTUFJTkRFUkAKK1JFUExBQ0VfUkVNQUlOREVSRiA9IEBSRVBMQUNFX1JFTUFJTkRFUkZACitSRVBMQUNFX1JFTUFJTkRFUkwgPSBAUkVQTEFDRV9SRU1BSU5ERVJMQAorUkVQTEFDRV9SRU1PVkUgPSBAUkVQTEFDRV9SRU1PVkVACitSRVBMQUNFX1JFTkFNRSA9IEBSRVBMQUNFX1JFTkFNRUAKK1JFUExBQ0VfUkVOQU1FQVQgPSBAUkVQTEFDRV9SRU5BTUVBVEAKK1JFUExBQ0VfUk1ESVIgPSBAUkVQTEFDRV9STURJUkAKK1JFUExBQ0VfUk9VTkQgPSBAUkVQTEFDRV9ST1VOREAKK1JFUExBQ0VfUk9VTkRGID0gQFJFUExBQ0VfUk9VTkRGQAorUkVQTEFDRV9ST1VOREwgPSBAUkVQTEFDRV9ST1VORExACitSRVBMQUNFX1NFVEVOViA9IEBSRVBMQUNFX1NFVEVOVkAKK1JFUExBQ0VfU0lHTkJJVCA9IEBSRVBMQUNFX1NJR05CSVRACitSRVBMQUNFX1NJR05CSVRfVVNJTkdfR0NDID0gQFJFUExBQ0VfU0lHTkJJVF9VU0lOR19HQ0NACitSRVBMQUNFX1NMRUVQID0gQFJFUExBQ0VfU0xFRVBACitSRVBMQUNFX1NOUFJJTlRGID0gQFJFUExBQ0VfU05QUklOVEZACitSRVBMQUNFX1NQUklOVEYgPSBAUkVQTEFDRV9TUFJJTlRGQAorUkVQTEFDRV9TUVJUTCA9IEBSRVBMQUNFX1NRUlRMQAorUkVQTEFDRV9TVEFUID0gQFJFUExBQ0VfU1RBVEAKK1JFUExBQ0VfU1RESU9fUkVBRF9GVU5DUyA9IEBSRVBMQUNFX1NURElPX1JFQURfRlVOQ1NACitSRVBMQUNFX1NURElPX1dSSVRFX0ZVTkNTID0gQFJFUExBQ0VfU1RESU9fV1JJVEVfRlVOQ1NACitSRVBMQUNFX1NUUE5DUFkgPSBAUkVQTEFDRV9TVFBOQ1BZQAorUkVQTEFDRV9TVFJDQVNFU1RSID0gQFJFUExBQ0VfU1RSQ0FTRVNUUkAKK1JFUExBQ0VfU1RSQ0hSTlVMID0gQFJFUExBQ0VfU1RSQ0hSTlVMQAorUkVQTEFDRV9TVFJEVVAgPSBAUkVQTEFDRV9TVFJEVVBACitSRVBMQUNFX1NUUkVSUk9SID0gQFJFUExBQ0VfU1RSRVJST1JACitSRVBMQUNFX1NUUkVSUk9SX1IgPSBAUkVQTEFDRV9TVFJFUlJPUl9SQAorUkVQTEFDRV9TVFJOQ0FUID0gQFJFUExBQ0VfU1RSTkNBVEAKK1JFUExBQ0VfU1RSTkRVUCA9IEBSRVBMQUNFX1NUUk5EVVBACitSRVBMQUNFX1NUUk5MRU4gPSBAUkVQTEFDRV9TVFJOTEVOQAorUkVQTEFDRV9TVFJTSUdOQUwgPSBAUkVQTEFDRV9TVFJTSUdOQUxACitSRVBMQUNFX1NUUlNUUiA9IEBSRVBMQUNFX1NUUlNUUkAKK1JFUExBQ0VfU1RSVE9EID0gQFJFUExBQ0VfU1RSVE9EQAorUkVQTEFDRV9TVFJUT0lNQVggPSBAUkVQTEFDRV9TVFJUT0lNQVhACitSRVBMQUNFX1NUUlRPS19SID0gQFJFUExBQ0VfU1RSVE9LX1JACitSRVBMQUNFX1NZTUxJTksgPSBAUkVQTEFDRV9TWU1MSU5LQAorUkVQTEFDRV9USU1FR00gPSBAUkVQTEFDRV9USU1FR01ACitSRVBMQUNFX1RNUEZJTEUgPSBAUkVQTEFDRV9UTVBGSUxFQAorUkVQTEFDRV9UT1dMT1dFUiA9IEBSRVBMQUNFX1RPV0xPV0VSQAorUkVQTEFDRV9UUlVOQyA9IEBSRVBMQUNFX1RSVU5DQAorUkVQTEFDRV9UUlVOQ0YgPSBAUkVQTEFDRV9UUlVOQ0ZACitSRVBMQUNFX1RSVU5DTCA9IEBSRVBMQUNFX1RSVU5DTEAKK1JFUExBQ0VfVFRZTkFNRV9SID0gQFJFUExBQ0VfVFRZTkFNRV9SQAorUkVQTEFDRV9VTkxJTksgPSBAUkVQTEFDRV9VTkxJTktACitSRVBMQUNFX1VOTElOS0FUID0gQFJFUExBQ0VfVU5MSU5LQVRACitSRVBMQUNFX1VOU0VURU5WID0gQFJFUExBQ0VfVU5TRVRFTlZACitSRVBMQUNFX1VTTEVFUCA9IEBSRVBMQUNFX1VTTEVFUEAKK1JFUExBQ0VfVVRJTUVOU0FUID0gQFJFUExBQ0VfVVRJTUVOU0FUQAorUkVQTEFDRV9WQVNQUklOVEYgPSBAUkVQTEFDRV9WQVNQUklOVEZACitSRVBMQUNFX1ZEUFJJTlRGID0gQFJFUExBQ0VfVkRQUklOVEZACitSRVBMQUNFX1ZGUFJJTlRGID0gQFJFUExBQ0VfVkZQUklOVEZACitSRVBMQUNFX1ZQUklOVEYgPSBAUkVQTEFDRV9WUFJJTlRGQAorUkVQTEFDRV9WU05QUklOVEYgPSBAUkVQTEFDRV9WU05QUklOVEZACitSRVBMQUNFX1ZTUFJJTlRGID0gQFJFUExBQ0VfVlNQUklOVEZACitSRVBMQUNFX1dDUlRPTUIgPSBAUkVQTEFDRV9XQ1JUT01CQAorUkVQTEFDRV9XQ1NOUlRPTUJTID0gQFJFUExBQ0VfV0NTTlJUT01CU0AKK1JFUExBQ0VfV0NTUlRPTUJTID0gQFJFUExBQ0VfV0NTUlRPTUJTQAorUkVQTEFDRV9XQ1NXSURUSCA9IEBSRVBMQUNFX1dDU1dJRFRIQAorUkVQTEFDRV9XQ1RPQiA9IEBSRVBMQUNFX1dDVE9CQAorUkVQTEFDRV9XQ1RPTUIgPSBAUkVQTEFDRV9XQ1RPTUJACitSRVBMQUNFX1dDV0lEVEggPSBAUkVQTEFDRV9XQ1dJRFRIQAorUkVQTEFDRV9XUklURSA9IEBSRVBMQUNFX1dSSVRFQAorU0NIRURfSCA9IEBTQ0hFRF9IQAogU0VUX01BS0UgPSBAU0VUX01BS0VACiBTSEVMTCA9IEBTSEVMTEAKK1NJR19BVE9NSUNfVF9TVUZGSVggPSBAU0lHX0FUT01JQ19UX1NVRkZJWEAKK1NJWkVfVF9TVUZGSVggPSBAU0laRV9UX1NVRkZJWEAKIFNUREJPT0xfSCA9IEBTVERCT09MX0hACitTVERERUZfSCA9IEBTVERERUZfSEAKK1NURElOVF9IID0gQFNURElOVF9IQAogU1RSSVAgPSBAU1RSSVBACi1VTklTVERfSCA9IEBVTklTVERfSEAKK1NZU19USU1FX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUMgPSBAU1lTX1RJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQ0AKK1RJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQyA9IEBUSU1FX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUNACitVSU5UMzJfTUFYX0xUX1VJTlRNQVhfTUFYID0gQFVJTlQzMl9NQVhfTFRfVUlOVE1BWF9NQVhACitVSU5UNjRfTUFYX0VRX1VMT05HX01BWCA9IEBVSU5UNjRfTUFYX0VRX1VMT05HX01BWEAKK1VOREVGSU5FX1NUUlRPS19SID0gQFVOREVGSU5FX1NUUlRPS19SQAorVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IID0gQFVOSVNURF9IX0hBVkVfV0lOU09DSzJfSEAKK1VOSVNURF9IX0hBVkVfV0lOU09DSzJfSF9BTkRfVVNFX1NPQ0tFVFMgPSBAVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IX0FORF9VU0VfU09DS0VUU0AKIFVTRV9OTFMgPSBAVVNFX05MU0AKIFZBTEdSSU5EID0gQFZBTEdSSU5EQAorVkFMR1JJTkRfUFJFQklTT04gPSBAVkFMR1JJTkRfUFJFQklTT05ACiBWRVJTSU9OID0gQFZFUlNJT05ACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKK1dBUk5fQ0ZMQUdTID0gQFdBUk5fQ0ZMQUdTQAorV0FSTl9DRkxBR1NfVEVTVCA9IEBXQVJOX0NGTEFHU19URVNUQAorV0FSTl9DWFhGTEFHUyA9IEBXQVJOX0NYWEZMQUdTQAorV0FSTl9DWFhGTEFHU19URVNUID0gQFdBUk5fQ1hYRkxBR1NfVEVTVEAKK1dDSEFSX1RfU1VGRklYID0gQFdDSEFSX1RfU1VGRklYQAogV0VSUk9SX0NGTEFHUyA9IEBXRVJST1JfQ0ZMQUdTQAorV0VSUk9SX0NYWEZMQUdTID0gQFdFUlJPUl9DWFhGTEFHU0AKK1dJTkRPV1NfNjRfQklUX09GRl9UID0gQFdJTkRPV1NfNjRfQklUX09GRl9UQAorV0lORE9XU182NF9CSVRfU1RfU0laRSA9IEBXSU5ET1dTXzY0X0JJVF9TVF9TSVpFQAorV0lOVF9UX1NVRkZJWCA9IEBXSU5UX1RfU1VGRklYQAogWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAorWFNMVFBST0MgPSBAWFNMVFBST0NACiBZQUNDID0gQFlBQ0NACiBZQUNDX0xJQlJBUlkgPSBAWUFDQ19MSUJSQVJZQAogWUFDQ19TQ1JJUFQgPSBAWUFDQ19TQ1JJUFRACitZRkxBR1MgPSBAWUZMQUdTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAogYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACiBhY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfUkFOTElCID0gQGFjX2N0X1JBTkxJQkAKLWFjX2N0X1NUUklQID0gQGFjX2N0X1NUUklQQAogYWNsb2NhbGRpciA9IEBhY2xvY2FsZGlyQAotYW1fX2Zhc3RkZXBDQ19GQUxTRSA9IEBhbV9fZmFzdGRlcENDX0ZBTFNFQAotYW1fX2Zhc3RkZXBDQ19UUlVFID0gQGFtX19mYXN0ZGVwQ0NfVFJVRUAKLWFtX19mYXN0ZGVwQ1hYX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAotYW1fX2Zhc3RkZXBDWFhfVFJVRSA9IEBhbV9fZmFzdGRlcENYWF9UUlVFQAogYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACiBhbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAogYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKQEAgLTE3OCwyOSArMTI5Miw1MiBAQAogYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKIGJ1aWxkX29zID0gQGJ1aWxkX29zQAogYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAogZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKIGV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorZ2xfTElCT0JKUyA9IEBnbF9MSUJPQkpTQAorZ2xfTFRMSUJPQkpTID0gQGdsX0xUTElCT0JKU0AKK2dsdGVzdHNfTElCT0JKUyA9IEBnbHRlc3RzX0xJQk9CSlNACitnbHRlc3RzX0xUTElCT0JKUyA9IEBnbHRlc3RzX0xUTElCT0JKU0AKK2dsdGVzdHNfV0lUTkVTUyA9IEBnbHRlc3RzX1dJVE5FU1NACiBob3N0ID0gQGhvc3RACiBob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACiBob3N0X2NwdSA9IEBob3N0X2NwdUAKIGhvc3Rfb3MgPSBAaG9zdF9vc0AKIGhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAogaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAogaW5mb2RpciA9IEBpbmZvZGlyQAogaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAogbGliZGlyID0gQGxpYmRpckAKIGxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xpc3BkaXIgPSBAbGlzcGRpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACiBsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACiBtYW5kaXIgPSBAbWFuZGlyQAogbWtkaXJfcCA9IEBta2Rpcl9wQAogb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKIHByZWZpeCA9IEBwcmVmaXhACiBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKIHNiaW5kaXIgPSBAc2JpbmRpckAKIHNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKIHN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKIHRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi1FWFRSQV9ESVNUID0gcHJldi12ZXJzaW9uLnR4dAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK0VYVFJBX0RJU1QgPSBcCisgIGNyb3NzLW9wdGlvbnMucGwJCQkJXAorICBkYXJ3aW4xMS40LjAudmFsZ3JpbmQJCQkJXAorICBwcmV2LXZlcnNpb24udHh0CQkJCVwKKyAgdXBkYXRlLWI0LWNvcHlyaWdodAorCiBhbGw6IGFsbC1hbQogCiAuU1VGRklYRVM6CkBAIC0yMDgsMTQgKzEzNDUsMTQgQEAKIAlAZm9yIGRlcCBpbiAkPzsgZG8gXAogCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCiAJICAgICokJGRlcCopIFwKLQkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAotCQkmJiBleGl0IDA7IFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCiAJICAgICAgZXhpdCAxOzsgXAogCSAgZXNhYzsgXAogCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSAgYnVpbGQtYXV4L01ha2VmaWxlJzsgXAotCWNkICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgIGJ1aWxkLWF1eC9NYWtlZmlsZQorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ25pdHMgYnVpbGQtYXV4L01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ25pdHMgYnVpbGQtYXV4L01ha2VmaWxlCiAuUFJFQ0lPVVM6IE1ha2VmaWxlCiBNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCiAJQGNhc2UgJyQ/JyBpbiBcCkBAIC0yMzMsMzggKzEzNzAsNDMgQEAKIAljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKICQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCiAJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi11bmluc3RhbGwtaW5mby1hbToKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CiB0YWdzOiBUQUdTCiBUQUdTOgogCiBjdGFnczogQ1RBR1MKIENUQUdTOgogCitjc2NvcGUgY3Njb3BlbGlzdDoKKwogCiBkaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCi0JICBjYXNlICQkZmlsZSBpbiBcCi0JICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0JICAgICQodG9wX3NyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3wiYDs7IFwKLQkgIGVzYWM7IFwKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAogCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAotCSAgICBkaXI9Ii8kJGRpciI7IFwKLQkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAotCSAgZWxzZSBcCi0JICAgIGRpcj0nJzsgXAotCSAgZmk7IFwKIAkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKIAkgICAgZmk7IFwKLQkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKIAkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCiAJICAgIHx8IGV4aXQgMTsgXAogCSAgZmk7IFwKIAlkb25lCkBAIC0yODIsMTYgKzE0MjQsMjIgQEAKIAogaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KIGluc3RhbGwtc3RyaXA6Ci0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCi0JICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCisJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAgIGluc3RhbGw7IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorCWZpCiBtb3N0bHljbGVhbi1nZW5lcmljOgogCiBjbGVhbi1nZW5lcmljOgogCiBkaXN0Y2xlYW4tZ2VuZXJpYzoKIAktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKIAogbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgogCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKQEAgLTMxMCwxOCArMTQ1OCwzOCBAQAogCiBodG1sOiBodG1sLWFtCiAKK2h0bWwtYW06CisKIGluZm86IGluZm8tYW0KIAogaW5mby1hbToKIAogaW5zdGFsbC1kYXRhLWFtOgogCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKIGluc3RhbGwtZXhlYy1hbToKIAoraW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCiBpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQogCitpbnN0YWxsLWluZm8tYW06CisKIGluc3RhbGwtbWFuOgogCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKwogaW5zdGFsbGNoZWNrLWFtOgogCiBtYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCkBAIC0zNDAsMTYgKzE1MDgsMjAgQEAKIAogcHMtYW06CiAKLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWluZm8tYW0KK3VuaW5zdGFsbC1hbToKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAogCiAuUEhPTlk6IGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4gXAogCWRpc3RjbGVhbi1nZW5lcmljIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKLQlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAogCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCiAJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAotCW1vc3RseWNsZWFuLWdlbmVyaWMgcGRmIHBkZi1hbSBwcyBwcy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKLQl1bmluc3RhbGwtaW5mby1hbQorCW1vc3RseWNsZWFuLWdlbmVyaWMgcGRmIHBkZi1hbSBwcyBwcy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisKIAogIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KICMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2Fubm91bmNlLWdlbiBiL2J1aWxkLWF1eC9hbm5vdW5jZS1nZW4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWM3YzIyYQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWxkLWF1eC9hbm5vdW5jZS1nZW4KQEAgLTAsMCArMSw1NTUgQEAKK2V2YWwgJyhleGl0ICQ/MCknICYmIGV2YWwgJ2V4ZWMgcGVybCAtd1MgIiQwIiAkezErIiRAIn0nCisgICYgZXZhbCAnZXhlYyBwZXJsIC13UyAiJDAiICRhcmd2OnEnCisgICAgaWYgMDsKKyMgR2VuZXJhdGUgYSByZWxlYXNlIGFubm91bmNlbWVudCBtZXNzYWdlLgorCitteSAkVkVSU0lPTiA9ICcyMDEyLTA2LTA4IDA2OjUzJzsgIyBVVEMKKyMgVGhlIGRlZmluaXRpb24gYWJvdmUgbXVzdCBsaWUgd2l0aGluIHRoZSBmaXJzdCA4IGxpbmVzIGluIG9yZGVyCisjIGZvciB0aGUgRW1hY3MgdGltZS1zdGFtcCB3cml0ZSBob29rIChhdCBlbmQpIHRvIHVwZGF0ZSBpdC4KKyMgSWYgeW91IGNoYW5nZSB0aGlzIGZpbGUgd2l0aCBFbWFjcywgcGxlYXNlIGxldCB0aGUgd3JpdGUgaG9vaworIyBkbyBpdHMgam9iLiAgT3RoZXJ3aXNlLCB1cGRhdGUgdGhpcyBzdHJpbmcgbWFudWFsbHkuCisKKyMgQ29weXJpZ2h0IChDKSAyMDAyLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFdyaXR0ZW4gYnkgSmltIE1leWVyaW5nCisKK3VzZSBzdHJpY3Q7CisKK3VzZSBHZXRvcHQ6Okxvbmc7Cit1c2UgRGlnZXN0OjpNRDU7CitldmFsIHsgcmVxdWlyZSBEaWdlc3Q6OlNIQTsgfQorICBvciBldmFsICd1c2UgRGlnZXN0OjpTSEExJzsKK3VzZSBQT1NJWCBxdyhzdHJmdGltZSk7CisKKyhteSAkTUUgPSAkMCkgPX4gc3wuKi98fDsKKworbXkgJXZhbGlkX3JlbGVhc2VfdHlwZXMgPSBtYXAgeyRfID0+IDF9IHF3IChhbHBoYSBiZXRhIHN0YWJsZSk7CitteSBAYXJjaGl2ZV9zdWZmaXhlcyA9ICgndGFyLmd6JywgJ3Rhci5iejInLCAndGFyLmx6bWEnLCAndGFyLnh6Jyk7CitteSAkc3JjZGlyID0gJy4nOworCitzdWIgdXNhZ2UgKCQpCit7CisgIG15ICgkZXhpdF9jb2RlKSA9IEBfOworICBteSAkU1RSRUFNID0gKCRleGl0X2NvZGUgPT0gMCA/ICpTVERPVVQgOiAqU1RERVJSKTsKKyAgaWYgKCRleGl0X2NvZGUgIT0gMCkKKyAgICB7CisgICAgICBwcmludCAkU1RSRUFNICJUcnkgJyRNRSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIjsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBteSBAdHlwZXMgPSBzb3J0IGtleXMgJXZhbGlkX3JlbGVhc2VfdHlwZXM7CisgICAgICBwcmludCAkU1RSRUFNIDw8RU9GOworVXNhZ2U6ICRNRSBbT1BUSU9OU10KK0dlbmVyYXRlIGFuIGFubm91bmNlbWVudCBtZXNzYWdlLiAgUnVuIHRoaXMgZnJvbSBidWlsZGRpci4KKworT1BUSU9OUzoKKworVGhlc2Ugb3B0aW9ucyBtdXN0IGJlIHNwZWNpZmllZDoKKworICAgLS1yZWxlYXNlLXR5cGU9VFlQRSAgICAgICAgICBUWVBFIG11c3QgYmUgb25lIG9mIEB0eXBlcworICAgLS1wYWNrYWdlLW5hbWU9UEFDS0FHRV9OQU1FCisgICAtLXByZXZpb3VzLXZlcnNpb249VkVSCisgICAtLWN1cnJlbnQtdmVyc2lvbj1WRVIKKyAgIC0tZ3BnLWtleS1pZD1JRCAgICAgICAgIFRoZSBHbnVQRyBJRCBvZiB0aGUga2V5IHVzZWQgdG8gc2lnbiB0aGUgdGFyYmFsbHMKKyAgIC0tdXJsLWRpcmVjdG9yeT1VUkxfRElSCisKK1RoZSBmb2xsb3dpbmcgYXJlIG9wdGlvbmFsOgorCisgICAtLW5ld3M9TkVXU19GSUxFICAgICAgICAgICAgIGluY2x1ZGUgdGhlIE5FV1Mgc2VjdGlvbiBhYm91dCB0aGlzIHJlbGVhc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGlzIE5FV1NfRklMRTsgYWNjdW11bGF0ZXMuCisgICAtLXNyY2Rpcj1ESVIgICAgICAgICAgICAgICAgIHdoZXJlIHRvIGZpbmQgdGhlIE5FV1NfRklMRXMgKGRlZmF1bHQ6ICRzcmNkaXIpCisgICAtLWJvb3RzdHJhcC10b29scz1UT09MX0xJU1QgIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdG9vbHMsIGUuZy4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb25mLGF1dG9tYWtlLGJpc29uLGdudWxpYgorICAgLS1nbnVsaWItdmVyc2lvbj1WRVJTSU9OICAgICByZXBvcnQgVkVSU0lPTiBhcyB0aGUgZ251bGliIHZlcnNpb24sIHdoZXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZFUlNJT04gaXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGdpdCBkZXNjcmliZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgZ251bGliIHNvdXJjZSBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkIGlmIGdudWxpYiBpcyBpbiBUT09MX0xJU1QuCisgICAtLW5vLXByaW50LWNoZWNrc3VtcyAgICAgICAgIGRvIG5vdCBlbWl0IE1ENSBvciBTSEExIGNoZWNrc3VtcworICAgLS1hcmNoaXZlLXN1ZmZpeD1TVUYgICAgICAgICBhZGQgU1VGIHRvIHRoZSBsaXN0IG9mIGFyY2hpdmUgc3VmZml4ZXMKKyAgIC0tbWFpbC1oZWFkZXJzPUhFQURFUlMgICAgICAgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBtYWlsIGhlYWRlcnMsIGUuZy4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvOiB4XEBleGFtcGxlLmNvbSBDYzogeS1hbm5vdW5jZVxAZXhhbXBsZS5jb20sLi4uCisKKyAgIC0taGVscCAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAorICAgLS12ZXJzaW9uICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisKK0VPRgorICAgIH0KKyAgZXhpdCAkZXhpdF9jb2RlOworfQorCisKKz1pdGVtIEM8JXNpemU+ID0gQzxzaXplcyAoQGZpbGUpPgorCitDb21wdXRlIHRoZSBzaXplcyBvZiB0aGUgQzxAZmlsZT4gYW5kIHJldHVybiB0aGVtIGFzIGEgaGFzaC4gIFJldHVybgorQzx1bmRlZj4gaWYgb25lIG9mIHRoZSBjb21wdXRhdGlvbiBmYWlsZWQuCisKKz1jdXQKKworc3ViIHNpemVzIChAKQoreworICBteSAoQGZpbGUpID0gQF87CisKKyAgbXkgJGZhaWwgPSAwOworICBteSAlcmVzOworICBmb3JlYWNoIG15ICRmIChAZmlsZSkKKyAgICB7CisgICAgICBteSAkY21kID0gImR1IC1oICRmIjsKKyAgICAgIG15ICR0ID0gYCRjbWRgOworICAgICAgIyBGSVhNRS1zb21lZGF5OiBnaXZlIGEgYmV0dGVyIGRpYWdub3N0aWMsIGEgbGEgJFBST0NFU1NfU1RBVFVTCisgICAgICAkQAorICAgICAgICBhbmQgKHdhcm4gImNvbW1hbmQgZmFpbGVkOiAnJGNtZCdcbiIpLCAkZmFpbCA9IDE7CisgICAgICBjaG9tcCAkdDsKKyAgICAgICR0ID1+IHMvXlxzKihbXGQuXStbTWtLXSkuKi8kezF9Qi87CisgICAgICAkcmVzeyRmfSA9ICR0OworICAgIH0KKyAgcmV0dXJuICRmYWlsID8gdW5kZWYgOiAlcmVzOworfQorCis9aXRlbSBDPHByaW50X2xvY2F0aW9ucyAoJHRpdGxlLCBcQHVybCwgXCVzaXplLCBAZmlsZSkKKworUHJpbnQgYSBzZWN0aW9uIEM8JHRpdGxlPiBkZWRpY2F0ZWQgdG8gdGhlIGxpc3Qgb2YgPEBmaWxlPiwgd2hpY2gKK3NpemVzIGFyZSBzdG9yZWQgaW4gQzwlc2l6ZT4sIGFuZCB3aGljaCBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIEM8QHVybD4uCisKKz1jdXQKKworc3ViIHByaW50X2xvY2F0aW9ucyAoJFxAXCVAKQoreworICBteSAoJHRpdGxlLCAkdXJsLCAkc2l6ZSwgQGZpbGUpID0gQF87CisgIHByaW50ICJIZXJlIGFyZSB0aGUgJHRpdGxlOlxuIjsKKyAgZm9yZWFjaCBteSAkdXJsIChAeyR1cmx9KQorICAgIHsKKyAgICAgIGZvciBteSAkZmlsZSAoQGZpbGUpCisgICAgICAgIHsKKyAgICAgICAgICBwcmludCAiICAkdXJsLyRmaWxlIjsKKyAgICAgICAgICBwcmludCAiICAgKCIsICQkc2l6ZXskZmlsZX0sICIpIgorICAgICAgICAgICAgaWYgZXhpc3RzICQkc2l6ZXskZmlsZX07CisgICAgICAgICAgcHJpbnQgIlxuIjsKKyAgICAgICAgfQorICAgIH0KKyAgcHJpbnQgIlxuIjsKK30KKworPWl0ZW0gQzxwcmludF9jaGVja3N1bXMgKEBmaWxlKQorCitQcmludCB0aGUgTUQ1IGFuZCBTSEExIHNpZ25hdHVyZSBzZWN0aW9uIGZvciBlYWNoIEM8QGZpbGU+LgorCis9Y3V0CisKK3N1YiBwcmludF9jaGVja3N1bXMgKEApCit7CisgIG15IChAZmlsZSkgPSBAXzsKKworICBwcmludCAiSGVyZSBhcmUgdGhlIE1ENSBhbmQgU0hBMSBjaGVja3N1bXM6XG4iOworICBwcmludCAiXG4iOworCisgIGZvcmVhY2ggbXkgJG1ldGggKHF3IChtZDUgc2hhMSkpCisgICAgeworICAgICAgZm9yZWFjaCBteSAkZiAoQGZpbGUpCisgICAgICAgIHsKKyAgICAgICAgICBvcGVuIElOLCAnPCcsICRmCisgICAgICAgICAgICBvciBkaWUgIiRNRTogJGY6IGNhbm5vdCBvcGVuIGZvciByZWFkaW5nOiAkIVxuIjsKKyAgICAgICAgICBiaW5tb2RlIElOOworICAgICAgICAgIG15ICRkaWcgPQorICAgICAgICAgICAgKCRtZXRoIGVxICdtZDUnCisgICAgICAgICAgICAgPyBEaWdlc3Q6Ok1ENS0+bmV3LT5hZGRmaWxlKCpJTiktPmhleGRpZ2VzdAorICAgICAgICAgICAgIDogRGlnZXN0OjpTSEExLT5uZXctPmFkZGZpbGUoKklOKS0+aGV4ZGlnZXN0KTsKKyAgICAgICAgICBjbG9zZSBJTjsKKyAgICAgICAgICBwcmludCAiJGRpZyAgJGZcbiI7CisgICAgICAgIH0KKyAgICB9CisgIHByaW50ICJcbiI7Cit9CisKKz1pdGVtIEM8cHJpbnRfbmV3c19kZWx0YXMgKCRuZXdzX2ZpbGUsICRwcmV2X3ZlcnNpb24sICRjdXJyX3ZlcnNpb24pCisKK1ByaW50IHRoZSBzZWN0aW9uIG9mIHRoZSBORVdTIGZpbGUgQzwkbmV3c19maWxlPiBhZGRyZXNzaW5nIGNoYW5nZXMKK2JldHdlZW4gdmVyc2lvbnMgQzwkcHJldl92ZXJzaW9uPiBhbmQgQzwkY3Vycl92ZXJzaW9uPi4KKworPWN1dAorCitzdWIgcHJpbnRfbmV3c19kZWx0YXMgKCQkJCkKK3sKKyAgbXkgKCRuZXdzX2ZpbGUsICRwcmV2X3ZlcnNpb24sICRjdXJyX3ZlcnNpb24pID0gQF87CisKKyAgbXkgJG5ld3NfbmFtZSA9ICRuZXdzX2ZpbGU7CisgICRuZXdzX25hbWUgPX4gc3xeXFEkc3JjZGlyXEUvfHw7CisKKyAgcHJpbnQgIlxuJG5ld3NfbmFtZVxuXG4iOworCisgICMgUHJpbnQgYWxsIGxpbmVzIGZyb20gJG5ld3NfZmlsZSwgc3RhcnRpbmcgd2l0aCB0aGUgZmlyc3Qgb25lCisgICMgdGhhdCBtZW50aW9ucyAkY3Vycl92ZXJzaW9uIHVwIHRvIGJ1dCBub3QgaW5jbHVkaW5nCisgICMgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgJHByZXZfdmVyc2lvbi4KKyAgbXkgJGluX2l0ZW1zOworCisgIG15ICRyZV9wcmVmaXggPSBxci8oPzpcKiApPyg/Ok5vdGV3b3J0aHkgY3xNYWpvciBjfEMpKD9pOmhhbmdlcykvOworCisgIG15ICRmb3VuZF9uZXdzOworICBvcGVuIE5FV1MsICc8JywgJG5ld3NfZmlsZQorICAgIG9yIGRpZSAiJE1FOiAkbmV3c19maWxlOiBjYW5ub3Qgb3BlbiBmb3IgcmVhZGluZzogJCFcbiI7CisgIHdoaWxlIChkZWZpbmVkIChteSAkbGluZSA9IDxORVdTPikpCisgICAgeworICAgICAgaWYgKCAhICRpbl9pdGVtcykKKyAgICAgICAgeworICAgICAgICAgICMgTWF0Y2ggbGluZXMgbGlrZSB0aGVzZToKKyAgICAgICAgICAjICogTWFqb3IgY2hhbmdlcyBpbiByZWxlYXNlIDUuMC4xOgorICAgICAgICAgICMgKiBOb3Rld29ydGh5IGNoYW5nZXMgaW4gcmVsZWFzZSA2LjYgKDIwMDYtMTEtMjIpIFtzdGFibGVdCisgICAgICAgICAgJGxpbmUgPX4gL14kcmVfcHJlZml4LiooPzpbXlxkLl18JClcUSRjdXJyX3ZlcnNpb25cRSg/OlteXGQuXXwkKS9vCisgICAgICAgICAgICBvciBuZXh0OworICAgICAgICAgICRpbl9pdGVtcyA9IDE7CisgICAgICAgICAgcHJpbnQgJGxpbmU7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICMgVGhpcyByZWdleHAgbXVzdCBub3QgbWF0Y2ggdmVyc2lvbiBudW1iZXJzIGluIE5FV1MgaXRlbXMuCisgICAgICAgICAgIyBGb3IgZXhhbXBsZSwgdGhleSBtaWdodCB3ZWxsIHNheSAiaW50cm9kdWNlZCBpbiA0LjUuNSIsCisgICAgICAgICAgIyBhbmQgd2UgZG9uJ3Qgd2FudCB0aGF0IHRvIG1hdGNoLgorICAgICAgICAgICRsaW5lID1+IC9eJHJlX3ByZWZpeC4qKD86W15cZC5dfCQpXFEkcHJldl92ZXJzaW9uXEUoPzpbXlxkLl18JCkvbworICAgICAgICAgICAgYW5kIGxhc3Q7CisgICAgICAgICAgcHJpbnQgJGxpbmU7CisgICAgICAgICAgJGxpbmUgPX4gL1xTLworICAgICAgICAgICAgYW5kICRmb3VuZF9uZXdzID0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgY2xvc2UgTkVXUzsKKworICAkaW5faXRlbXMKKyAgICBvciBkaWUgIiRNRTogJG5ld3NfZmlsZTogbm8gbWF0Y2hpbmcgbGluZXMgZm9yICckY3Vycl92ZXJzaW9uJ1xuIjsKKyAgJGZvdW5kX25ld3MKKyAgICBvciBkaWUgIiRNRTogJG5ld3NfZmlsZTogbm8gbmV3cyBpdGVtIGZvdW5kIGZvciAnJGN1cnJfdmVyc2lvbidcbiI7Cit9CisKK3N1YiBwcmludF9jaGFuZ2Vsb2dfZGVsdGFzICgkJCkKK3sKKyAgbXkgKCRwYWNrYWdlX25hbWUsICRwcmV2X3ZlcnNpb24pID0gQF87CisKKyAgIyBQcmludCBuZXcgQ2hhbmdlTG9nIGVudHJpZXMuCisKKyAgIyBGaXJzdCBmaW5kIGFsbCBDVlMtY29udHJvbGxlZCBDaGFuZ2VMb2cgZmlsZXMuCisgIHVzZSBGaWxlOjpGaW5kOworICBteSBAY2hhbmdlbG9nOworICBmaW5kICh7d2FudGVkID0+IHN1YiB7JF8gZXEgJ0NoYW5nZUxvZycgJiYgLWQgJ0NWUycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHB1c2ggQGNoYW5nZWxvZywgJEZpbGU6OkZpbmQ6Om5hbWV9fSwKKyAgICAgICAgJy4nKTsKKworICAjIElmIHRoZXJlIGFyZSBubyBDaGFuZ2VMb2cgZmlsZXMsIHdlJ3JlIGRvbmUuCisgIEBjaGFuZ2Vsb2cKKyAgICBvciByZXR1cm47CisgIG15ICVjaGFuZ2Vsb2cgPSBtYXAgeyRfID0+IDF9IEBjaGFuZ2Vsb2c7CisKKyAgIyBSZW9yZGVyIHRoZSBsaXN0IG9mIGZpbGVzIHNvIHRoYXQgaWYgdGhlcmUgYXJlIENoYW5nZUxvZworICAjIGZpbGVzIGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3JpZXMsIHRoZXkncmUgbGlzdGVkIGZpcnN0LAorICAjIGluIHRoaXMgb3JkZXI6CisgIG15IEBkaXIgPSBxdyAoIC4gc3JjIGxpYiBtNCBjb25maWcgZG9jICk7CisKKyAgIyBBIHR5cGljYWwgQGNoYW5nZWxvZyBhcnJheSBtaWdodCBsb29rIGxpa2UgdGhpczoKKyAgIyAuL0NoYW5nZUxvZworICAjIC4vcG8vQ2hhbmdlTG9nCisgICMgLi9tNC9DaGFuZ2VMb2cKKyAgIyAuL2xpYi9DaGFuZ2VMb2cKKyAgIyAuL2RvYy9DaGFuZ2VMb2cKKyAgIyAuL2NvbmZpZy9DaGFuZ2VMb2cKKyAgbXkgQHJlb3JkZXJlZDsKKyAgZm9yZWFjaCBteSAkZCAoQGRpcikKKyAgICB7CisgICAgICBteSAkZG90X3NsYXNoID0gJGQgZXEgJy4nID8gJGQgOiAiLi8kZCI7CisgICAgICBteSAkdGFyZ2V0ID0gIiRkb3Rfc2xhc2gvQ2hhbmdlTG9nIjsKKyAgICAgIGRlbGV0ZSAkY2hhbmdlbG9neyR0YXJnZXR9CisgICAgICAgIGFuZCBwdXNoIEByZW9yZGVyZWQsICR0YXJnZXQ7CisgICAgfQorCisgICMgQXBwZW5kIGFueSByZW1haW5pbmcgQ2hhbmdlTG9nIGZpbGVzLgorICBwdXNoIEByZW9yZGVyZWQsIHNvcnQga2V5cyAlY2hhbmdlbG9nOworCisgICMgUmVtb3ZlIGxlYWRpbmcgJy4vJy4KKyAgQHJlb3JkZXJlZCA9IG1hcCB7IHMhXlwuLyEhOyAkXyB9IEByZW9yZGVyZWQ7CisKKyAgcHJpbnQgIlxuQ2hhbmdlTG9nIGVudHJpZXM6XG5cbiI7CisgICMgcHJpbnQgam9pbiAoIlxuIiwgQHJlb3JkZXJlZCksICJcbiI7CisKKyAgJHByZXZfdmVyc2lvbiA9fiBzL1wuL18vZzsKKyAgbXkgJHByZXZfY3ZzX3RhZyA9ICJcVSRwYWNrYWdlX25hbWVcRS0kcHJldl92ZXJzaW9uIjsKKworICBteSAkY21kID0gImN2cyAtbiBkaWZmIC11IC1yJHByZXZfY3ZzX3RhZyAtckhFQUQgQHJlb3JkZXJlZCI7CisgIG9wZW4gRElGRiwgJy18JywgJGNtZAorICAgIG9yIGRpZSAiJE1FOiBjYW5ub3QgcnVuICckY21kJzogJCFcbiI7CisgICMgUHJpbnQgdHdvIHR5cGVzIG9mIGxpbmVzLCBtYWtpbmcgbWlub3IgY2hhbmdlczoKKyAgIyBMaW5lcyBzdGFydGluZyB3aXRoICcrKysgJywgZS5nLiwKKyAgIyArKysgQ2hhbmdlTG9nICAgMjIgRmViIDIwMDMgMTY6NTI6NTEgLTAwMDAgICAgICAxLjI0NworICAjIGFuZCB0aG9zZSBzdGFydGluZyB3aXRoICcrJy4KKyAgIyBEb24ndCBwcmludCB0aGUgb3RoZXJzLgorICBteSAkcHJldl9wcmludGVkX2xpbmVfZW1wdHkgPSAxOworICB3aGlsZSAoZGVmaW5lZCAobXkgJGxpbmUgPSA8RElGRj4pKQorICAgIHsKKyAgICAgIGlmICgkbGluZSA9fiAvXlwrXCtcKyAvKQorICAgICAgICB7CisgICAgICAgICAgbXkgJHNlcGFyYXRvciA9ICIqIng3MCAuIlxuIjsKKyAgICAgICAgICAkbGluZSA9fiBzLy8vOworICAgICAgICAgICRsaW5lID1+IHMvXHMuKi8vOworICAgICAgICAgICRwcmV2X3ByaW50ZWRfbGluZV9lbXB0eQorICAgICAgICAgICAgb3IgcHJpbnQgIlxuIjsKKyAgICAgICAgICBwcmludCAkc2VwYXJhdG9yLCAkbGluZSwgJHNlcGFyYXRvcjsKKyAgICAgICAgfQorICAgICAgZWxzaWYgKCRsaW5lID1+IC9eXCsvKQorICAgICAgICB7CisgICAgICAgICAgJGxpbmUgPX4gcy8vLzsKKyAgICAgICAgICBwcmludCAkbGluZTsKKyAgICAgICAgICAkcHJldl9wcmludGVkX2xpbmVfZW1wdHkgPSAoJGxpbmUgPX4gL14kLyk7CisgICAgICAgIH0KKyAgICB9CisgIGNsb3NlIERJRkY7CisKKyAgIyBUaGUgZXhpdCBjb2RlIHNob3VsZCBiZSAxLgorICAjIEFsbG93IGluIGNhc2UgdGhlcmUgYXJlIG5vIG1vZGlmaWVkIENoYW5nZUxvZyBlbnRyaWVzLgorICAkPyA9PSAyNTYgfHwgJD8gPT0gMTI4CisgICAgb3Igd2FybiAid2FybmluZzogJyRjbWQnIGhhZCB1bmV4cGVjdGVkIGV4aXQgY29kZSBvciBzaWduYWwgKCQ/KVxuIjsKK30KKworc3ViIGdldF90b29sX3ZlcnNpb25zICgkJCkKK3sKKyAgbXkgKCR0b29sX2xpc3QsICRnbnVsaWJfdmVyc2lvbikgPSBAXzsKKyAgQCR0b29sX2xpc3QKKyAgICBvciByZXR1cm4gKCk7CisKKyAgbXkgJGZhaWw7CisgIG15IEB0b29sX3ZlcnNpb25fcGFpcjsKKyAgZm9yZWFjaCBteSAkdCAoQCR0b29sX2xpc3QpCisgICAgeworICAgICAgaWYgKCR0IGVxICdnbnVsaWInKQorICAgICAgICB7CisgICAgICAgICAgcHVzaCBAdG9vbF92ZXJzaW9uX3BhaXIsIHVjZmlyc3QgJHQgLiAnICcgLiAkZ251bGliX3ZlcnNpb247CisgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorICAgICAgIyBBc3N1bWUgdGhhdCB0aGUgbGFzdCAid29yZCIgb24gdGhlIGZpcnN0IGxpbmUgb2YKKyAgICAgICMgJ3Rvb2wgLS12ZXJzaW9uJyBvdXRwdXQgaXMgdGhlIHZlcnNpb24gc3RyaW5nLgorICAgICAgbXkgKCRmaXJzdF9saW5lLCB1bmRlZikgPSBzcGxpdCAoIlxuIiwgYCR0IC0tdmVyc2lvbmApOworICAgICAgaWYgKCRmaXJzdF9saW5lID1+IC8uKiAoXGRbXHcuLV0rKSQvKQorICAgICAgICB7CisgICAgICAgICAgJHQgPSB1Y2ZpcnN0ICR0OworICAgICAgICAgIHB1c2ggQHRvb2xfdmVyc2lvbl9wYWlyLCAiJHQgJDEiOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBkZWZpbmVkICRmaXJzdF9saW5lCisgICAgICAgICAgICBhbmQgJGZpcnN0X2xpbmUgPSAnJzsKKyAgICAgICAgICB3YXJuICIkdDogdW5leHBlY3RlZCAtLXZlcnNpb24gb3V0cHV0XG46JGZpcnN0X2xpbmUiOworICAgICAgICAgICRmYWlsID0gMTsKKyAgICAgICAgfQorICAgIH0KKworICAkZmFpbAorICAgIGFuZCBleGl0IDE7CisKKyAgcmV0dXJuIEB0b29sX3ZlcnNpb25fcGFpcjsKK30KKworeworICAjIE5ldXRyYWxpemUgdGhlIGxvY2FsZSwgc28gdGhhdCwgZm9yIGluc3RhbmNlLCAiZHUiIGRvZXMgbm90CisgICMgaXNzdWUgIjEsMiIgaW5zdGVhZCBvZiAiMS4yIiwgd2hhdCBjb25mdXNlcyBvdXIgcmVnZXhwcy4KKyAgJEVOVntMQ19BTEx9ID0gIkMiOworCisgIG15ICRtYWlsX2hlYWRlcnM7CisgIG15ICRyZWxlYXNlX3R5cGU7CisgIG15ICRwYWNrYWdlX25hbWU7CisgIG15ICRwcmV2X3ZlcnNpb247CisgIG15ICRjdXJyX3ZlcnNpb247CisgIG15ICRncGdfa2V5X2lkOworICBteSBAdXJsX2Rpcl9saXN0OworICBteSBAbmV3c19maWxlOworICBteSAkYm9vdHN0cmFwX3Rvb2xzOworICBteSAkZ251bGliX3ZlcnNpb247CisgIG15ICRwcmludF9jaGVja3N1bXNfcCA9IDE7CisKKyAgIyBSZWZvcm1hdCB0aGUgd2FybmluZ3MgYmVmb3JlIGRpc3BsYXlpbmcgdGhlbS4KKyAgbG9jYWwgJFNJR3tfX1dBUk5fX30gPSBzdWIKKyAgICB7CisgICAgICBteSAoJG1zZykgPSBAXzsKKyAgICAgICMgV2FybmluZ3MgZnJvbSBHZXRPcHRpb25zLgorICAgICAgJG1zZyA9fiBzL09wdGlvbiAoXHcpL29wdGlvbiAtLSQxLzsKKyAgICAgIHdhcm4gIiRNRTogJG1zZyI7CisgICAgfTsKKworICBHZXRPcHRpb25zCisgICAgKAorICAgICAnbWFpbC1oZWFkZXJzPXMnICAgICA9PiBcJG1haWxfaGVhZGVycywKKyAgICAgJ3JlbGVhc2UtdHlwZT1zJyAgICAgPT4gXCRyZWxlYXNlX3R5cGUsCisgICAgICdwYWNrYWdlLW5hbWU9cycgICAgID0+IFwkcGFja2FnZV9uYW1lLAorICAgICAncHJldmlvdXMtdmVyc2lvbj1zJyA9PiBcJHByZXZfdmVyc2lvbiwKKyAgICAgJ2N1cnJlbnQtdmVyc2lvbj1zJyAgPT4gXCRjdXJyX3ZlcnNpb24sCisgICAgICdncGcta2V5LWlkPXMnICAgICAgID0+IFwkZ3BnX2tleV9pZCwKKyAgICAgJ3VybC1kaXJlY3Rvcnk9cycgICAgPT4gXEB1cmxfZGlyX2xpc3QsCisgICAgICduZXdzPXMnICAgICAgICAgICAgID0+IFxAbmV3c19maWxlLAorICAgICAnc3JjZGlyPXMnICAgICAgICAgICA9PiBcJHNyY2RpciwKKyAgICAgJ2Jvb3RzdHJhcC10b29scz1zJyAgPT4gXCRib290c3RyYXBfdG9vbHMsCisgICAgICdnbnVsaWItdmVyc2lvbj1zJyAgID0+IFwkZ251bGliX3ZlcnNpb24sCisgICAgICdwcmludC1jaGVja3N1bXMhJyAgID0+IFwkcHJpbnRfY2hlY2tzdW1zX3AsCisgICAgICdhcmNoaXZlLXN1ZmZpeD1zJyAgID0+IFxAYXJjaGl2ZV9zdWZmaXhlcywKKworICAgICBoZWxwID0+IHN1YiB7IHVzYWdlIDAgfSwKKyAgICAgdmVyc2lvbiA9PiBzdWIgeyBwcmludCAiJE1FIHZlcnNpb24gJFZFUlNJT05cbiI7IGV4aXQgfSwKKyAgICApIG9yIHVzYWdlIDE7CisKKyAgbXkgJGZhaWwgPSAwOworICAjIEVuc3VyZSB0aGF0IGVhY2ggcmVxdWlyZWQgb3B0aW9uIGlzIHNwZWNpZmllZC4KKyAgJHJlbGVhc2VfdHlwZQorICAgIG9yICh3YXJuICJyZWxlYXNlIHR5cGUgbm90IHNwZWNpZmllZFxuIiksICRmYWlsID0gMTsKKyAgJHBhY2thZ2VfbmFtZQorICAgIG9yICh3YXJuICJwYWNrYWdlIG5hbWUgbm90IHNwZWNpZmllZFxuIiksICRmYWlsID0gMTsKKyAgJHByZXZfdmVyc2lvbgorICAgIG9yICh3YXJuICJwcmV2aW91cyB2ZXJzaW9uIHN0cmluZyBub3Qgc3BlY2lmaWVkXG4iKSwgJGZhaWwgPSAxOworICAkY3Vycl92ZXJzaW9uCisgICAgb3IgKHdhcm4gImN1cnJlbnQgdmVyc2lvbiBzdHJpbmcgbm90IHNwZWNpZmllZFxuIiksICRmYWlsID0gMTsKKyAgJGdwZ19rZXlfaWQKKyAgICBvciAod2FybiAiR251UEcga2V5IElEIG5vdCBzcGVjaWZpZWRcbiIpLCAkZmFpbCA9IDE7CisgIEB1cmxfZGlyX2xpc3QKKyAgICBvciAod2FybiAiVVJMIGRpcmVjdG9yeSBuYW1lKHMpIG5vdCBzcGVjaWZpZWRcbiIpLCAkZmFpbCA9IDE7CisKKyAgbXkgQHRvb2xfbGlzdCA9IHNwbGl0ICcsJywgJGJvb3RzdHJhcF90b29sczsKKworICBncmVwICgvXmdudWxpYiQvLCBAdG9vbF9saXN0KSBeIGRlZmluZWQgJGdudWxpYl92ZXJzaW9uCisgICAgYW5kICh3YXJuICJ3aGVuIHNwZWNpZnlpbmcgZ251bGliIGFzIGEgdG9vbCwgeW91IG11c3QgYWxzbyBzcGVjaWZ5XG4iCisgICAgICAgIC4gIi0tZ251bGliLXZlcnNpb249Viwgd2hlcmUgViBpcyB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgZ2l0IGRlc2NyaWJlXG4iCisgICAgICAgIC4gImluIHRoZSBnbnVsaWIgc291cmNlIGRpcmVjdG9yeS5cbiIpLCAkZmFpbCA9IDE7CisKKyAgZXhpc3RzICR2YWxpZF9yZWxlYXNlX3R5cGVzeyRyZWxlYXNlX3R5cGV9CisgICAgb3IgKHdhcm4gIickcmVsZWFzZV90eXBlJzogaW52YWxpZCByZWxlYXNlIHR5cGVcbiIpLCAkZmFpbCA9IDE7CisKKyAgQEFSR1YKKyAgICBhbmQgKHdhcm4gInRvbyBtYW55IGFyZ3VtZW50czpcbiIsIGpvaW4gKCJcbiIsIEBBUkdWKSwgIlxuIiksCisgICAgICAkZmFpbCA9IDE7CisgICRmYWlsCisgICAgYW5kIHVzYWdlIDE7CisKKyAgbXkgJG15X2Rpc3RkaXIgPSAiJHBhY2thZ2VfbmFtZS0kY3Vycl92ZXJzaW9uIjsKKworICBteSAkeGQgPSAiJHBhY2thZ2VfbmFtZS0kcHJldl92ZXJzaW9uLSRjdXJyX3ZlcnNpb24ueGRlbHRhIjsKKworICBteSBAY2FuZGlkYXRlcyA9IG1hcCB7ICIkbXlfZGlzdGRpci4kXyIgfSBAYXJjaGl2ZV9zdWZmaXhlczsKKyAgbXkgQHRhcmJhbGxzID0gZ3JlcCB7LWYgJF99IEBjYW5kaWRhdGVzOworCisgIEB0YXJiYWxscworICAgIG9yIGRpZSAiJE1FOiBub25lIG9mICIgLiBqb2luKCcsICcsIEBjYW5kaWRhdGVzKSAuICIgd2VyZSBmb3VuZFxuIjsKKyAgbXkgQHNpemFibGUgPSBAdGFyYmFsbHM7CisgIC1mICR4ZAorICAgIGFuZCBwdXNoIEBzaXphYmxlLCAkeGQ7CisgIG15ICVzaXplID0gc2l6ZXMgKEBzaXphYmxlKTsKKyAgJXNpemUKKyAgICBvciBleGl0IDE7CisKKyAgbXkgJGhlYWRlcnMgPSAnJzsKKyAgaWYgKGRlZmluZWQgJG1haWxfaGVhZGVycykKKyAgICB7CisgICAgICAoJGhlYWRlcnMgPSAkbWFpbF9oZWFkZXJzKSA9fiBzL1xzKyhcUys6KS9cbiQxL2c7CisgICAgICAkaGVhZGVycyAuPSAiXG4iOworICAgIH0KKworICAjIFRoZSBtYXJrdXAgaXMgZXNjYXBlZCBhcyA8XCMgc28gdGhhdCB3aGVuIHRoaXMgc2NyaXB0IGlzIHNlbnQgYnkKKyAgIyBtYWlsIChvciBwYXJ0IG9mIGEgZGlmZiksIEdudXMgaXMgbm90IHRyaWdnZXJlZC4KKyAgcHJpbnQgPDxFT0Y7CisKKyR7aGVhZGVyc31TdWJqZWN0OiAkbXlfZGlzdGRpciByZWxlYXNlZCBbJHJlbGVhc2VfdHlwZV0KKworPFwjc2VjdXJlIG1ldGhvZD1wZ3BtaW1lIG1vZGU9c2lnbj4KKworRklYTUU6IHB1dCBjb21tZW50cyBoZXJlCisKK0VPRgorCisgIGlmIChAdXJsX2Rpcl9saXN0ID09IDEgJiYgQHRhcmJhbGxzID09IDEpCisgICAgeworICAgICAgIyBXaGVuIHRoZXJlJ3Mgb25seSBvbmUgdGFyYmFsbCBhbmQgb25lIFVSTCwgdXNlIGEgbW9yZSBjb25jaXNlIGZvcm0uCisgICAgICBteSAkbSA9ICIkdXJsX2Rpcl9saXN0WzBdLyR0YXJiYWxsc1swXSI7CisgICAgICBwcmludCAiSGVyZSBhcmUgdGhlIGNvbXByZXNzZWQgc291cmNlcyBhbmQgYSBHUEcgZGV0YWNoZWQgc2lnbmF0dXJlWypdOlxuIgorICAgICAgICAuICIgICRtXG4iCisgICAgICAgIC4gIiAgJG0uc2lnXG5cbiI7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcHJpbnRfbG9jYXRpb25zICgiY29tcHJlc3NlZCBzb3VyY2VzIiwgQHVybF9kaXJfbGlzdCwgJXNpemUsIEB0YXJiYWxscyk7CisgICAgICAtZiAkeGQKKyAgICAgICAgYW5kIHByaW50X2xvY2F0aW9ucyAoInhkZWx0YSBkaWZmcyAodXNlZnVsPyBpZiBzbywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJwbGVhc2UgdGVsbCBidWctZ251bGliXEBnbnUub3JnKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB1cmxfZGlyX2xpc3QsICVzaXplLCAkeGQpOworICAgICAgbXkgQHNpZ19maWxlcyA9IG1hcCB7ICIkXy5zaWciIH0gQHRhcmJhbGxzOworICAgICAgcHJpbnRfbG9jYXRpb25zICgiR1BHIGRldGFjaGVkIHNpZ25hdHVyZXNbKl0iLCBAdXJsX2Rpcl9saXN0LCAlc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgQHNpZ19maWxlcyk7CisgICAgfQorCisgIGlmICgkdXJsX2Rpcl9saXN0WzBdID1+ICJnbnVcLm9yZyIpCisgICAgeworICAgICAgcHJpbnQgIlVzZSBhIG1pcnJvciBmb3IgaGlnaGVyIGRvd25sb2FkIGJhbmR3aWR0aDpcbiI7CisgICAgICBpZiAoQHRhcmJhbGxzID09IDEgJiYgJHVybF9kaXJfbGlzdFswXSA9fiBtIWh0dHA6Ly9mdHBcLmdudVwub3JnL2dudS8hKQorICAgICAgICB7CisgICAgICAgICAgKG15ICRtID0gIiR1cmxfZGlyX2xpc3RbMF0vJHRhcmJhbGxzWzBdIikKKyAgICAgICAgICAgID1+IHMhaHR0cDovL2Z0cFwuZ251XC5vcmcvZ251LyFodHRwOi8vZnRwbWlycm9yXC5nbnVcLm9yZy8hOworICAgICAgICAgIHByaW50ICIgICRtXG4iCisgICAgICAgICAgICAgIC4gIiAgJG0uc2lnXG5cbiI7CisKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgcHJpbnQgIiAgaHR0cDovL3d3dy5nbnUub3JnL29yZGVyL2Z0cC5odG1sXG5cbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgJHByaW50X2NoZWNrc3Vtc19wCisgICAgYW5kIHByaW50X2NoZWNrc3VtcyAoQHNpemFibGUpOworCisgIHByaW50IDw8RU9GOworWypdIFVzZSBhIC5zaWcgZmlsZSB0byB2ZXJpZnkgdGhhdCB0aGUgY29ycmVzcG9uZGluZyBmaWxlICh3aXRob3V0IHRoZQorLnNpZyBzdWZmaXgpIGlzIGludGFjdC4gIEZpcnN0LCBiZSBzdXJlIHRvIGRvd25sb2FkIGJvdGggdGhlIC5zaWcgZmlsZQorYW5kIHRoZSBjb3JyZXNwb25kaW5nIHRhcmJhbGwuICBUaGVuLCBydW4gYSBjb21tYW5kIGxpa2UgdGhpczoKKworICBncGcgLS12ZXJpZnkgJHRhcmJhbGxzWzBdLnNpZworCitJZiB0aGF0IGNvbW1hbmQgZmFpbHMgYmVjYXVzZSB5b3UgZG9uJ3QgaGF2ZSB0aGUgcmVxdWlyZWQgcHVibGljIGtleSwKK3RoZW4gcnVuIHRoaXMgY29tbWFuZCB0byBpbXBvcnQgaXQ6CisKKyAgZ3BnIC0ta2V5c2VydmVyIGtleXMuZ251cGcubmV0IC0tcmVjdi1rZXlzICRncGdfa2V5X2lkCisKK2FuZCByZXJ1biB0aGUgJ2dwZyAtLXZlcmlmeScgY29tbWFuZC4KK0VPRgorCisgIG15IEB0b29sX3ZlcnNpb25zID0gZ2V0X3Rvb2xfdmVyc2lvbnMgKFxAdG9vbF9saXN0LCAkZ251bGliX3ZlcnNpb24pOworICBAdG9vbF92ZXJzaW9ucworICAgIGFuZCBwcmludCAiXG5UaGlzIHJlbGVhc2Ugd2FzIGJvb3RzdHJhcHBlZCB3aXRoIHRoZSBmb2xsb3dpbmcgdG9vbHM6IiwKKyAgICAgIGpvaW4gKCcnLCBtYXAgeyJcbiAgJF8ifSBAdG9vbF92ZXJzaW9ucyksICJcbiI7CisKKyAgcHJpbnRfbmV3c19kZWx0YXMgKCRfLCAkcHJldl92ZXJzaW9uLCAkY3Vycl92ZXJzaW9uKQorICAgIGZvcmVhY2ggQG5ld3NfZmlsZTsKKworICAkcmVsZWFzZV90eXBlIGVxICdzdGFibGUnCisgICAgb3IgcHJpbnRfY2hhbmdlbG9nX2RlbHRhcyAoJHBhY2thZ2VfbmFtZSwgJHByZXZfdmVyc2lvbik7CisKKyAgZXhpdCAwOworfQorCisjIyMgU2V0dXAgIkdOVSIgc3R5bGUgZm9yIHBlcmwtbW9kZSBhbmQgY3BlcmwtbW9kZS4KKyMjIExvY2FsIFZhcmlhYmxlczoKKyMjIG1vZGU6IHBlcmwKKyMjIHBlcmwtaW5kZW50LWxldmVsOiAyCisjIyBwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLWltYWdpbmFyeS1vZmZzZXQ6IDAKKyMjIHBlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgcGVybC1leHRyYS1uZXdsaW5lLWJlZm9yZS1icmFjZTogdAorIyMgcGVybC1tZXJnZS10cmFpbGluZy1lbHNlOiBuaWwKKyMjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMjIHRpbWUtc3RhbXAtc3RhcnQ6ICJteSAkVkVSU0lPTiA9ICciCisjIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQgJTAySDolMDJNIgorIyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIyB0aW1lLXN0YW1wLWVuZDogIic7ICMgVVRDIgorIyMgRW5kOgpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2NvbXBpbGUgYi9idWlsZC1hdXgvY29tcGlsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYWM0ODFjCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbGQtYXV4L2NvbXBpbGUKQEAgLTAsMCArMSwzMTAgQEAKKyMhIC9iaW4vc2gKKyMgV3JhcHBlciBmb3IgY29tcGlsZXJzIHdoaWNoIGRvIG5vdCB1bmRlcnN0YW5kIGAtYyAtbycuCisKK3NjcmlwdHZlcnNpb249MjAxMC0xMS0xNS4wOTsgIyBVVEMKKworIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisjIFdyaXR0ZW4gYnkgVG9tIFRyb21leSA8dHJvbWV5QGN5Z251cy5jb20+LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgVGhpcyBmaWxlIGlzIG1haW50YWluZWQgaW4gQXV0b21ha2UsIHBsZWFzZSByZXBvcnQKKyMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bworIyA8YXV0b21ha2UtcGF0Y2hlc0BnbnUub3JnPi4KKworbmw9JworJworCisjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworIyB0aGVyZSB0byBwcmV2ZW50IHRvb2xzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgd2hpdGVzcGFjZSB1c2FnZS4KK0lGUz0iICIiCSRubCIKKworZmlsZV9jb252PQorCisjIGZ1bmNfZmlsZV9jb252IGJ1aWxkX2ZpbGUgbGF6eQorIyBDb252ZXJ0IGEgJGJ1aWxkIGZpbGUgdG8gJGhvc3QgZm9ybSBhbmQgc3RvcmUgaXQgaW4gJGZpbGUKKyMgQ3VycmVudGx5IG9ubHkgc3VwcG9ydHMgV2luMzIgaG9zdHMuIElmIHRoZSBkZXRlcm1pbmVkIGNvbnZlcnNpb24KKyMgdHlwZSBpcyBsaXN0ZWQgaW4gKHRoZSBjb21tYSBzZXBhcmF0ZWQpIExBWlksIG5vIGNvbnZlcnNpb24gd2lsbAorIyB0YWtlIHBsYWNlLgorZnVuY19maWxlX2NvbnYgKCkKK3sKKyAgZmlsZT0kMQorICBjYXNlICRmaWxlIGluCisgICAgLyB8IC9bIS9dKikgIyBhYnNvbHV0ZSBmaWxlLCBhbmQgbm90IGEgVU5DIGZpbGUKKyAgICAgIGlmIHRlc3QgLXogIiRmaWxlX2NvbnYiOyB0aGVuCisJIyBsYXppbHkgZGV0ZXJtaW5lIGhvdyB0byBjb252ZXJ0IGFicyBmaWxlcworCWNhc2UgYHVuYW1lIC1zYCBpbgorCSAgTUlOR1cqKQorCSAgICBmaWxlX2NvbnY9bWluZ3cKKwkgICAgOzsKKwkgIENZR1dJTiopCisJICAgIGZpbGVfY29udj1jeWd3aW4KKwkgICAgOzsKKwkgICopCisJICAgIGZpbGVfY29udj13aW5lCisJICAgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGNhc2UgJGZpbGVfY29udi8sJDIsIGluCisJKiwkZmlsZV9jb252LCopCisJICA7OworCW1pbmd3LyopCisJICBmaWxlPWBjbWQgLy9DIGVjaG8gIiRmaWxlICIgfCBzZWQgLWUgJ3MvIlwoLipcKSAiICokL1wxLydgCisJICA7OworCWN5Z3dpbi8qKQorCSAgZmlsZT1gY3lncGF0aCAtbSAiJGZpbGUiIHx8IGVjaG8gIiRmaWxlImAKKwkgIDs7CisJd2luZS8qKQorCSAgZmlsZT1gd2luZXBhdGggLXcgIiRmaWxlIiB8fCBlY2hvICIkZmlsZSJgCisJICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgZXNhYworfQorCisjIGZ1bmNfY2xfd3JhcHBlciBjbCBhcmcuLi4KKyMgQWRqdXN0IGNvbXBpbGUgY29tbWFuZCB0byBzdWl0IGNsCitmdW5jX2NsX3dyYXBwZXIgKCkKK3sKKyAgIyBBc3N1bWUgYSBjYXBhYmxlIHNoZWxsCisgIGxpYl9wYXRoPQorICBzaGFyZWQ9OgorICBsaW5rZXJfb3B0cz0KKyAgZm9yIGFyZworICBkbworICAgIGlmIHRlc3QgLW4gIiRlYXQiOyB0aGVuCisgICAgICBlYXQ9CisgICAgZWxzZQorICAgICAgY2FzZSAkMSBpbgorCS1vKQorCSAgIyBjb25maWd1cmUgbWlnaHQgY2hvb3NlIHRvIHJ1biBjb21waWxlIGFzIGBjb21waWxlIGNjIC1vIGZvbyBmb28uYycuCisJICBlYXQ9MQorCSAgY2FzZSAkMiBpbgorCSAgICAqLm8gfCAqLltvT11bYkJdW2pKXSkKKwkgICAgICBmdW5jX2ZpbGVfY29udiAiJDIiCisJICAgICAgc2V0IHggIiRAIiAtRm8iJGZpbGUiCisJICAgICAgc2hpZnQKKwkgICAgICA7OworCSAgICAqKQorCSAgICAgIGZ1bmNfZmlsZV9jb252ICIkMiIKKwkgICAgICBzZXQgeCAiJEAiIC1GZSIkZmlsZSIKKwkgICAgICBzaGlmdAorCSAgICAgIDs7CisJICBlc2FjCisJICA7OworCS1JKikKKwkgIGZ1bmNfZmlsZV9jb252ICIkezEjLUl9IiBtaW5ndworCSAgc2V0IHggIiRAIiAtSSIkZmlsZSIKKwkgIHNoaWZ0CisJICA7OworCS1sKikKKwkgIGxpYj0kezEjLWx9CisJICBmb3VuZD1ubworCSAgc2F2ZV9JRlM9JElGUworCSAgSUZTPSc7JworCSAgZm9yIGRpciBpbiAkbGliX3BhdGggJExJQgorCSAgZG8KKwkgICAgSUZTPSRzYXZlX0lGUworCSAgICBpZiAkc2hhcmVkICYmIHRlc3QgLWYgIiRkaXIvJGxpYi5kbGwubGliIjsgdGhlbgorCSAgICAgIGZvdW5kPXllcworCSAgICAgIHNldCB4ICIkQCIgIiRkaXIvJGxpYi5kbGwubGliIgorCSAgICAgIGJyZWFrCisJICAgIGZpCisJICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYi5saWIiOyB0aGVuCisJICAgICAgZm91bmQ9eWVzCisJICAgICAgc2V0IHggIiRAIiAiJGRpci8kbGliLmxpYiIKKwkgICAgICBicmVhaworCSAgICBmaQorCSAgZG9uZQorCSAgSUZTPSRzYXZlX0lGUworCisJICB0ZXN0ICIkZm91bmQiICE9IHllcyAmJiBzZXQgeCAiJEAiICIkbGliLmxpYiIKKwkgIHNoaWZ0CisJICA7OworCS1MKikKKwkgIGZ1bmNfZmlsZV9jb252ICIkezEjLUx9IgorCSAgaWYgdGVzdCAteiAiJGxpYl9wYXRoIjsgdGhlbgorCSAgICBsaWJfcGF0aD0kZmlsZQorCSAgZWxzZQorCSAgICBsaWJfcGF0aD0iJGxpYl9wYXRoOyRmaWxlIgorCSAgZmkKKwkgIGxpbmtlcl9vcHRzPSIkbGlua2VyX29wdHMgLUxJQlBBVEg6JGZpbGUiCisJICA7OworCS1zdGF0aWMpCisJICBzaGFyZWQ9ZmFsc2UKKwkgIDs7CisJLVdsLCopCisJICBhcmc9JHsxIy1XbCx9CisJICBzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKKwkgIGZvciBmbGFnIGluICRhcmc7IGRvCisJICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICBsaW5rZXJfb3B0cz0iJGxpbmtlcl9vcHRzICRmbGFnIgorCSAgZG9uZQorCSAgSUZTPSIkc2F2ZV9pZnMiCisJICA7OworCS1YbGlua2VyKQorCSAgZWF0PTEKKwkgIGxpbmtlcl9vcHRzPSIkbGlua2VyX29wdHMgJDIiCisJICA7OworCS0qKQorCSAgc2V0IHggIiRAIiAiJDEiCisJICBzaGlmdAorCSAgOzsKKwkqLmNjIHwgKi5DQyB8ICouY3h4IHwgKi5DWFggfCAqLltjQ10rKykKKwkgIGZ1bmNfZmlsZV9jb252ICIkMSIKKwkgIHNldCB4ICIkQCIgLVRwIiRmaWxlIgorCSAgc2hpZnQKKwkgIDs7CisJKi5jIHwgKi5jcHAgfCAqLkNQUCB8ICoubGliIHwgKi5MSUIgfCAqLkxpYiB8ICouT0JKIHwgKi5vYmogfCAqLltvT10pCisJICBmdW5jX2ZpbGVfY29udiAiJDEiIG1pbmd3CisJICBzZXQgeCAiJEAiICIkZmlsZSIKKwkgIHNoaWZ0CisJICA7OworCSopCisJICBzZXQgeCAiJEAiICIkMSIKKwkgIHNoaWZ0CisJICA7OworICAgICAgZXNhYworICAgIGZpCisgICAgc2hpZnQKKyAgZG9uZQorICBpZiB0ZXN0IC1uICIkbGlua2VyX29wdHMiOyB0aGVuCisgICAgbGlua2VyX29wdHM9Ii1saW5rJGxpbmtlcl9vcHRzIgorICBmaQorICBleGVjICIkQCIgJGxpbmtlcl9vcHRzCisgIGV4aXQgMQorfQorCitlYXQ9CisKK2Nhc2UgJDEgaW4KKyAgJycpCisgICAgIGVjaG8gIiQwOiBObyBjb21tYW5kLiAgVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKKyAgICAgZXhpdCAxOworICAgICA7OworICAtaCB8IC0taCopCisgICAgY2F0IDw8XEVPRgorVXNhZ2U6IGNvbXBpbGUgWy0taGVscF0gWy0tdmVyc2lvbl0gUFJPR1JBTSBbQVJHU10KKworV3JhcHBlciBmb3IgY29tcGlsZXJzIHdoaWNoIGRvIG5vdCB1bmRlcnN0YW5kIGAtYyAtbycuCitSZW1vdmUgYC1vIGRlc3QubycgZnJvbSBBUkdTLCBydW4gUFJPR1JBTSB3aXRoIHRoZSByZW1haW5pbmcKK2FyZ3VtZW50cywgYW5kIHJlbmFtZSB0aGUgb3V0cHV0IGFzIGV4cGVjdGVkLgorCitJZiB5b3UgYXJlIHRyeWluZyB0byBidWlsZCBhIHdob2xlIHBhY2thZ2UgdGhpcyBpcyBub3QgdGhlCityaWdodCBzY3JpcHQgdG8gcnVuOiBwbGVhc2Ugc3RhcnQgYnkgcmVhZGluZyB0aGUgZmlsZSBgSU5TVEFMTCcuCisKK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uCitFT0YKKyAgICBleGl0ICQ/CisgICAgOzsKKyAgLXYgfCAtLXYqKQorICAgIGVjaG8gImNvbXBpbGUgJHNjcmlwdHZlcnNpb24iCisgICAgZXhpdCAkPworICAgIDs7CisgIGNsIHwgKlsvXFxdY2wgfCBjbC5leGUgfCAqWy9cXF1jbC5leGUgKQorICAgIGZ1bmNfY2xfd3JhcHBlciAiJEAiICAgICAgIyBEb2Vzbid0IHJldHVybi4uLgorICAgIDs7Citlc2FjCisKK29maWxlPQorY2ZpbGU9CisKK2ZvciBhcmcKK2RvCisgIGlmIHRlc3QgLW4gIiRlYXQiOyB0aGVuCisgICAgZWF0PQorICBlbHNlCisgICAgY2FzZSAkMSBpbgorICAgICAgLW8pCisJIyBjb25maWd1cmUgbWlnaHQgY2hvb3NlIHRvIHJ1biBjb21waWxlIGFzIGBjb21waWxlIGNjIC1vIGZvbyBmb28uYycuCisJIyBTbyB3ZSBzdHJpcCBgLW8gYXJnJyBvbmx5IGlmIGFyZyBpcyBhbiBvYmplY3QuCisJZWF0PTEKKwljYXNlICQyIGluCisJICAqLm8gfCAqLm9iaikKKwkgICAgb2ZpbGU9JDIKKwkgICAgOzsKKwkgICopCisJICAgIHNldCB4ICIkQCIgLW8gIiQyIgorCSAgICBzaGlmdAorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKi5jKQorCWNmaWxlPSQxCisJc2V0IHggIiRAIiAiJDEiCisJc2hpZnQKKwk7OworICAgICAgKikKKwlzZXQgeCAiJEAiICIkMSIKKwlzaGlmdAorCTs7CisgICAgZXNhYworICBmaQorICBzaGlmdAorZG9uZQorCitpZiB0ZXN0IC16ICIkb2ZpbGUiIHx8IHRlc3QgLXogIiRjZmlsZSI7IHRoZW4KKyAgIyBJZiBubyBgLW8nIG9wdGlvbiB3YXMgc2VlbiB0aGVuIHdlIG1pZ2h0IGhhdmUgYmVlbiBpbnZva2VkIGZyb20gYQorICAjIHBhdHRlcm4gcnVsZSB3aGVyZSB3ZSBkb24ndCBuZWVkIG9uZS4gIFRoYXQgaXMgb2sgLS0gdGhpcyBpcyBhCisgICMgbm9ybWFsIGNvbXBpbGF0aW9uIHRoYXQgdGhlIGxvc2luZyBjb21waWxlciBjYW4gaGFuZGxlLiAgSWYgbm8KKyAgIyBgLmMnIGZpbGUgd2FzIHNlZW4gdGhlbiB3ZSBhcmUgcHJvYmFibHkgbGlua2luZy4gIFRoYXQgaXMgYWxzbworICAjIG9rLgorICBleGVjICIkQCIKK2ZpCisKKyMgTmFtZSBvZiBmaWxlIHdlIGV4cGVjdCBjb21waWxlciB0byBjcmVhdGUuCitjb2ZpbGU9YGVjaG8gIiRjZmlsZSIgfCBzZWQgJ3N8Xi4qW1xcL118fDsgc3xeW2EtekEtWl06fHw7IHMvXC5jJC8uby8nYAorCisjIENyZWF0ZSB0aGUgbG9jayBkaXJlY3RvcnkuCisjIE5vdGU6IHVzZSBgWy9cXDouLV0nIGhlcmUgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3QgdXNlIHRoZSBzYW1lIG5hbWUKKyMgdGhhdCB3ZSBhcmUgdXNpbmcgZm9yIHRoZSAubyBmaWxlLiAgQWxzbywgYmFzZSB0aGUgbmFtZSBvbiB0aGUgZXhwZWN0ZWQKKyMgb2JqZWN0IGZpbGUgbmFtZSwgc2luY2UgdGhhdCBpcyB3aGF0IG1hdHRlcnMgd2l0aCBhIHBhcmFsbGVsIGJ1aWxkLgorbG9ja2Rpcj1gZWNobyAiJGNvZmlsZSIgfCBzZWQgLWUgJ3N8Wy9cXDouLV18X3xnJ2AuZAord2hpbGUgdHJ1ZTsgZG8KKyAgaWYgbWtkaXIgIiRsb2NrZGlyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBicmVhaworICBmaQorICBzbGVlcCAxCitkb25lCisjIEZJWE1FOiByYWNlIGNvbmRpdGlvbiBoZXJlIGlmIHVzZXIga2lsbHMgYmV0d2VlbiBta2RpciBhbmQgdHJhcC4KK3RyYXAgInJtZGlyICckbG9ja2Rpcic7IGV4aXQgMSIgMSAyIDE1CisKKyMgUnVuIHRoZSBjb21waWxlLgorIiRAIgorcmV0PSQ/CisKK2lmIHRlc3QgLWYgIiRjb2ZpbGUiOyB0aGVuCisgIHRlc3QgIiRjb2ZpbGUiID0gIiRvZmlsZSIgfHwgbXYgIiRjb2ZpbGUiICIkb2ZpbGUiCitlbGlmIHRlc3QgLWYgIiR7Y29maWxlfWJqIjsgdGhlbgorICB0ZXN0ICIke2NvZmlsZX1iaiIgPSAiJG9maWxlIiB8fCBtdiAiJHtjb2ZpbGV9YmoiICIkb2ZpbGUiCitmaQorCitybWRpciAiJGxvY2tkaXIiCitleGl0ICRyZXQKKworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6IHNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjogMgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9jb25maWcuZ3Vlc3MgYi9idWlsZC1hdXgvY29uZmlnLmd1ZXNzCmluZGV4IDkxN2JiYzUuLjg3MmI5NmEgMTAwNzU1Ci0tLSBhL2J1aWxkLWF1eC9jb25maWcuZ3Vlc3MKKysrIGIvYnVpbGQtYXV4L2NvbmZpZy5ndWVzcwpAQCAtMSw5ICsxLDEwIEBACiAjISAvYmluL3NoCiAjIEF0dGVtcHQgdG8gZ3Vlc3MgYSBjYW5vbmljYWwgc3lzdGVtIG5hbWUuCiAjICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAotIyAgIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwKKyMgICAyMDExLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi10aW1lc3RhbXA9JzIwMDUtMDctMDgnCit0aW1lc3RhbXA9JzIwMTItMDktMjUnCiAKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE2LDkgKzE3LDcgQEAKICMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogIwogIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotIyAwMjExMC0xMzAxLCBVU0EuCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAjCiAjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKICMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCkBAIC0yNiwxNiArMjUsMTYgQEAKICMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgogCiAKLSMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyIDxwZXJAYm90aG5lci5jb20+LgotIyBQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4gIFN1Ym1pdCBhIGNvbnRleHQKLSMgZGlmZiBhbmQgYSBwcm9wZXJseSBmb3JtYXR0ZWQgQ2hhbmdlTG9nIGVudHJ5LgorIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuICBQbGVhc2Ugc2VuZCBwYXRjaGVzIChjb250ZXh0CisjIGRpZmYgZm9ybWF0KSB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4gYW5kIGluY2x1ZGUgYSBDaGFuZ2VMb2cKKyMgZW50cnkuCiAjCiAjIFRoaXMgc2NyaXB0IGF0dGVtcHRzIHRvIGd1ZXNzIGEgY2Fub25pY2FsIHN5c3RlbSBuYW1lIHNpbWlsYXIgdG8KICMgY29uZmlnLnN1Yi4gIElmIGl0IHN1Y2NlZWRzLCBpdCBwcmludHMgdGhlIHN5c3RlbSBuYW1lIG9uIHN0ZG91dCwgYW5kCiAjIGV4aXRzIHdpdGggMC4gIE90aGVyd2lzZSwgaXQgZXhpdHMgd2l0aCAxLgogIwotIyBUaGUgcGxhbiBpcyB0aGF0IHRoaXMgY2FuIGJlIGNhbGxlZCBieSBjb25maWd1cmUgc2NyaXB0cyBpZiB5b3UKLSMgZG9uJ3Qgc3BlY2lmeSBhbiBleHBsaWNpdCBidWlsZCBzeXN0ZW0gdHlwZS4KKyMgWW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0IGZyb206CisjIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuZ3Vlc3M7aGI9SEVBRAogCiBtZT1gZWNobyAiJDAiIHwgc2VkIC1lICdzLC4qLywsJ2AKIApAQCAtNTUsNyArNTQsOCBAQAogR05VIGNvbmZpZy5ndWVzcyAoJHRpbWVzdGFtcCkKIAogT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyLgotQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1CitDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyCiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KQEAgLTEwNiw3ICsxMDYsNyBAQAogdHJhcCAiZXhpdGNvZGU9XCQ/OyAocm0gLWYgXCR0bXBmaWxlcyAyPi9kZXYvbnVsbDsgcm1kaXIgXCR0bXAgMj4vZGV2L251bGwpICYmIGV4aXQgXCRleGl0Y29kZSIgMCA7CiB0cmFwICJybSAtZiBcJHRtcGZpbGVzIDI+L2Rldi9udWxsOyBybWRpciBcJHRtcCAyPi9kZXYvbnVsbDsgZXhpdCAxIiAxIDIgMTMgMTUgOwogOiAke1RNUERJUj0vdG1wfSA7Ci0geyB0bXA9YCh1bWFzayAwNzcgJiYgbWt0ZW1wIC1kIC1xICIkVE1QRElSL2NnWFhYWFhYIikgMj4vZGV2L251bGxgICYmIHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiIDsgfSB8fAorIHsgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiJFRNUERJUi9jZ1hYWFhYWCIpIDI+L2Rldi9udWxsYCAmJiB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0IC1kICIkdG1wIiA7IH0gfHwKICB7IHRlc3QgLW4gIiRSQU5ET00iICYmIHRtcD0kVE1QRElSL2NnJCQtJFJBTkRPTSAmJiAodW1hc2sgMDc3ICYmIG1rZGlyICR0bXApIDsgfSB8fAogIHsgdG1wPSRUTVBESVIvY2ctJCQgJiYgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKSAmJiBlY2hvICJXYXJuaW5nOiBjcmVhdGluZyBpbnNlY3VyZSB0ZW1wIGRpcmVjdG9yeSIgPiYyIDsgfSB8fAogIHsgZWNobyAiJG1lOiBjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAkVE1QRElSIiA+JjIgOyBleGl0IDEgOyB9IDsKQEAgLTE0Myw3ICsxNDMsNyBAQAogY2FzZSAiJHtVTkFNRV9NQUNISU5FfToke1VOQU1FX1NZU1RFTX06JHtVTkFNRV9SRUxFQVNFfToke1VOQU1FX1ZFUlNJT059IiBpbgogICAgICo6TmV0QlNEOio6KikKIAkjIE5ldEJTRCAobmJzZCkgdGFyZ2V0cyBzaG91bGQgKHdoZXJlIGFwcGxpY2FibGUpIG1hdGNoIG9uZSBvcgotCSMgbW9yZSBvZiB0aGUgdHVwcGxlczogKi0qLW5ldGJzZGVsZiosICotKi1uZXRic2Rhb3V0KiwKKwkjIG1vcmUgb2YgdGhlIHR1cGxlczogKi0qLW5ldGJzZGVsZiosICotKi1uZXRic2Rhb3V0KiwKIAkjICotKi1uZXRic2RlY29mZiogYW5kICotKi1uZXRic2QqLiAgRm9yIHRhcmdldHMgdGhhdCByZWNlbnRseQogCSMgc3dpdGNoZWQgdG8gRUxGLCAqLSotbmV0YnNkKiB3b3VsZCBzZWxlY3QgdGhlIG9sZAogCSMgb2JqZWN0IGZpbGUgZm9ybWF0LiAgVGhpcyBwcm92aWRlcyBib3RoIGZvcndhcmQKQEAgLTE2MCw2ICsxNjAsNyBAQAogCSAgICBhcm0qKSBtYWNoaW5lPWFybS11bmtub3duIDs7CiAJICAgIHNoM2VsKSBtYWNoaW5lPXNobC11bmtub3duIDs7CiAJICAgIHNoM2ViKSBtYWNoaW5lPXNoLXVua25vd24gOzsKKwkgICAgc2g1ZWwpIG1hY2hpbmU9c2g1bGUtdW5rbm93biA7OwogCSAgICAqKSBtYWNoaW5lPSR7VU5BTUVfTUFDSElORV9BUkNIfS11bmtub3duIDs7CiAJZXNhYwogCSMgVGhlIE9wZXJhdGluZyBTeXN0ZW0gaW5jbHVkaW5nIG9iamVjdCBmb3JtYXQsIGlmIGl0IGhhcyBzd2l0Y2hlZApAQCAtMTY4LDcgKzE2OSw3IEBACiAJICAgIGFybSp8aTM4NnxtNjhrfG5zMzJrfHNoMyp8c3BhcmN8dmF4KQogCQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCiAJCWlmIGVjaG8gX19FTEZfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCi0JCQl8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsCisJCQl8IGdyZXAgLXEgX19FTEZfXwogCQl0aGVuCiAJCSAgICAjIE9uY2UgYWxsIHV0aWxpdGllcyBjYW4gYmUgRUNPRkYgKG5ldGJzZGVjb2ZmKSBvciBhLm91dCAobmV0YnNkYW91dCkuCiAJCSAgICAjIFJldHVybiBuZXRic2QgZm9yIGVpdGhlci4gIEZJWD8KQEAgLTE3OCw3ICsxNzksNyBAQAogCQlmaQogCQk7OwogCSAgICAqKQotCSAgICAgICAgb3M9bmV0YnNkCisJCW9zPW5ldGJzZAogCQk7OwogCWVzYWMKIAkjIFRoZSBPUyByZWxlYXNlCkBAIC0xOTksNiArMjAwLDEwIEBACiAJIyBDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTSBpcyB1c2VkLgogCWVjaG8gIiR7bWFjaGluZX0tJHtvc30ke3JlbGVhc2V9IgogCWV4aXQgOzsKKyAgICAqOkJpdHJpZzoqOiopCisJVU5BTUVfTUFDSElORV9BUkNIPWBhcmNoIHwgc2VkICdzL0JpdHJpZy4vLydgCisJZWNobyAke1VOQU1FX01BQ0hJTkVfQVJDSH0tdW5rbm93bi1iaXRyaWcke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OwogICAgICo6T3BlbkJTRDoqOiopCiAJVU5BTUVfTUFDSElORV9BUkNIPWBhcmNoIHwgc2VkICdzL09wZW5CU0QuLy8nYAogCWVjaG8gJHtVTkFNRV9NQUNISU5FX0FSQ0h9LXVua25vd24tb3BlbmJzZCR7VU5BTUVfUkVMRUFTRX0KQEAgLTIwNiw4ICsyMTEsMTEgQEAKICAgICAqOmVra29CU0Q6KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWVra29ic2Qke1VOQU1FX1JFTEVBU0V9CiAJZXhpdCA7OworICAgICo6U29saWRCU0Q6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXNvbGlkYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKICAgICBtYWNwcGM6TWlyQlNEOio6KikKLQllY2hvIHBvd2VycHBjLXVua25vd24tbWlyYnNkJHtVTkFNRV9SRUxFQVNFfQorCWVjaG8gcG93ZXJwYy11bmtub3duLW1pcmJzZCR7VU5BTUVfUkVMRUFTRX0KIAlleGl0IDs7CiAgICAgKjpNaXJCU0Q6KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW1pcmJzZCR7VU5BTUVfUkVMRUFTRX0KQEAgLTIxOCw3ICsyMjYsNyBAQAogCQlVTkFNRV9SRUxFQVNFPWAvdXNyL3NiaW4vc2l6ZXIgLXYgfCBhd2sgJ3twcmludCAkM30nYAogCQk7OwogCSo1LiopCi0JICAgICAgICBVTkFNRV9SRUxFQVNFPWAvdXNyL3NiaW4vc2l6ZXIgLXYgfCBhd2sgJ3twcmludCAkNH0nYAorCQlVTkFNRV9SRUxFQVNFPWAvdXNyL3NiaW4vc2l6ZXIgLXYgfCBhd2sgJ3twcmludCAkNH0nYAogCQk7OwogCWVzYWMKIAkjIEFjY29yZGluZyB0byBDb21wYXEsIC91c3Ivc2Jpbi9wc3JpbmZvIGhhcyBiZWVuIGF2YWlsYWJsZSBvbgpAQCAtMjY0LDcgKzI3MiwxMCBAQAogCSMgQSBYbi5uIHZlcnNpb24gaXMgYW4gdW5yZWxlYXNlZCBleHBlcmltZW50YWwgYmFzZWxldmVsLgogCSMgMS4yIHVzZXMgIjEuMiIgZm9yIHVuYW1lIC1yLgogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtb3NmYGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9eW1BWVFhdLy8nIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYAotCWV4aXQgOzsKKwkjIFJlc2V0IEVYSVQgdHJhcCBiZWZvcmUgZXhpdGluZyB0byBhdm9pZCBzcHVyaW91cyBub24temVybyBleGl0IGNvZGUuCisJZXhpdGNvZGU9JD8KKwl0cmFwICcnIDAKKwlleGl0ICRleGl0Y29kZSA7OwogICAgIEFscGhhXCAqOldpbmRvd3NfTlQqOiopCiAJIyBIb3cgZG8gd2Uga25vdyBpdCdzIEludGVyaXggcmF0aGVyIHRoYW4gdGhlIGdlbmVyaWMgUE9TSVggc3Vic3lzdGVtPwogCSMgU2hvdWxkIHdlIGNoYW5nZSBVTkFNRV9NQUNISU5FIGJhc2VkIG9uIHRoZSBvdXRwdXQgb2YgdW5hbWUgaW5zdGVhZApAQCAtMjkwLDEyICszMDEsMTIgQEAKIAllY2hvIHMzOTAtaWJtLXp2bW9lCiAJZXhpdCA7OwogICAgICo6T1M0MDA6KjoqKQotICAgICAgICBlY2hvIHBvd2VycGMtaWJtLW9zNDAwCisJZWNobyBwb3dlcnBjLWlibS1vczQwMAogCWV4aXQgOzsKICAgICBhcm06UklTQyo6MS5bMDEyXSo6Knxhcm06cmlzY2l4OjEuWzAxMl0qOiopCiAJZWNobyBhcm0tYWNvcm4tcmlzY2l4JHtVTkFNRV9SRUxFQVNFfQogCWV4aXQgOzsKLSAgICBhcm06cmlzY29zOio6Knxhcm06UklTQ09TOio6KikKKyAgICBhcm0qOnJpc2NvczoqOip8YXJtKjpSSVNDT1M6KjoqKQogCWVjaG8gYXJtLXVua25vd24tcmlzY29zCiAJZXhpdCA7OwogICAgIFNSMj8wMTpISS1VWC9NUFA6KjoqIHwgU1I4MDAwOkhJLVVYL01QUDoqOiopCkBAIC0zMTksMTQgKzMzMCwzMyBAQAogCWNhc2UgYC91c3IvYmluL3VuYW1lIC1wYCBpbgogCSAgICBzcGFyYykgZWNobyBzcGFyYy1pY2wtbng3OyBleGl0IDs7CiAJZXNhYyA7OworICAgIHMzOTB4OlN1bk9TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OwogICAgIHN1bjRIOlN1bk9TOjUuKjoqKQogCWVjaG8gc3BhcmMtaGFsLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCiAJZXhpdCA7OwogICAgIHN1bjQqOlN1bk9TOjUuKjoqIHwgdGFkcG9sZSo6U3VuT1M6NS4qOiopCiAJZWNobyBzcGFyYy1zdW4tc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKIAlleGl0IDs7Ci0gICAgaTg2cGM6U3VuT1M6NS4qOiopCi0JZWNobyBpMzg2LXBjLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisgICAgaTg2cGM6QXVyb3JhVVg6NS4qOiogfCBpODZ4ZW46QXVyb3JhVVg6NS4qOiopCisJZWNobyBpMzg2LXBjLWF1cm9yYXV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBpODZwYzpTdW5PUzo1Lio6KiB8IGk4NnhlbjpTdW5PUzo1Lio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJU1VOX0FSQ0g9ImkzODYiCisJIyBJZiB0aGVyZSBpcyBhIGNvbXBpbGVyLCBzZWUgaWYgaXQgaXMgY29uZmlndXJlZCBmb3IgNjQtYml0IG9iamVjdHMuCisJIyBOb3RlIHRoYXQgdGhlIFN1biBjYyBkb2VzIG5vdCB0dXJuIF9fTFA2NF9fIGludG8gMSBsaWtlIGdjYyBkb2VzLgorCSMgVGhpcyB0ZXN0IHdvcmtzIGZvciBib3RoIGNvbXBpbGVycy4KKwlpZiBbICIkQ0NfRk9SX0JVSUxEIiAhPSAnbm9fY29tcGlsZXJfZm91bmQnIF07IHRoZW4KKwkgICAgaWYgKGVjaG8gJyNpZmRlZiBfX2FtZDY0JzsgZWNobyBJU182NEJJVF9BUkNIOyBlY2hvICcjZW5kaWYnKSB8IFwKKwkJKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKKwkJZ3JlcCBJU182NEJJVF9BUkNIID4vZGV2L251bGwKKwkgICAgdGhlbgorCQlTVU5fQVJDSD0ieDg2XzY0IgorCSAgICBmaQorCWZpCisJZWNobyAke1NVTl9BUkNIfS1wYy1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAogCWV4aXQgOzsKICAgICBzdW40KjpTdW5PUzo2KjoqKQogCSMgQWNjb3JkaW5nIHRvIGNvbmZpZy5zdWIsIHRoaXMgaXMgdGhlIHByb3BlciB3YXkgdG8gY2Fub25pY2FsaXplCkBAIC0zNzAsMjMgKzQwMCwyMyBAQAogICAgICMgTWlOVC4gIEJ1dCBNaU5UIGlzIGRvd253YXJkIGNvbXBhdGlibGUgdG8gVE9TLCBzbyB0aGlzIHNob3VsZAogICAgICMgYmUgbm8gcHJvYmxlbS4KICAgICBhdGFyaXN0W2VdOipNaU5UOio6KiB8IGF0YXJpc3RbZV06Km1pbnQ6KjoqIHwgYXRhcmlzdFtlXToqVE9TOio6KikKLSAgICAgICAgZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CiAJZXhpdCA7OwogICAgIGF0YXJpKjoqTWlOVDoqOiogfCBhdGFyaSo6Km1pbnQ6KjoqIHwgYXRhcmlzdFtlXToqVE9TOio6KikKIAllY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KLSAgICAgICAgZXhpdCA7OworCWV4aXQgOzsKICAgICAqZmFsY29uKjoqTWlOVDoqOiogfCAqZmFsY29uKjoqbWludDoqOiogfCAqZmFsY29uKjoqVE9TOio6KikKLSAgICAgICAgZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CiAJZXhpdCA7OwogICAgIG1pbGFuKjoqTWlOVDoqOiogfCBtaWxhbio6Km1pbnQ6KjoqIHwgKm1pbGFuKjoqVE9TOio6KikKLSAgICAgICAgZWNobyBtNjhrLW1pbGFuLW1pbnQke1VOQU1FX1JFTEVBU0V9Ci0gICAgICAgIGV4aXQgOzsKKwllY2hvIG02OGstbWlsYW4tbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CiAgICAgaGFkZXMqOipNaU5UOio6KiB8IGhhZGVzKjoqbWludDoqOiogfCAqaGFkZXMqOipUT1M6KjoqKQotICAgICAgICBlY2hvIG02OGstaGFkZXMtbWludCR7VU5BTUVfUkVMRUFTRX0KLSAgICAgICAgZXhpdCA7OworCWVjaG8gbTY4ay1oYWRlcy1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKICAgICAqOipNaU5UOio6KiB8ICo6Km1pbnQ6KjoqIHwgKjoqVE9TOio6KikKLSAgICAgICAgZWNobyBtNjhrLXVua25vd24tbWludCR7VU5BTUVfUkVMRUFTRX0KLSAgICAgICAgZXhpdCA7OworCWVjaG8gbTY4ay11bmtub3duLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OwogICAgIG02OGs6bWFjaHRlbjoqOiopCiAJZWNobyBtNjhrLWFwcGxlLW1hY2h0ZW4ke1VOQU1FX1JFTEVBU0V9CiAJZXhpdCA7OwpAQCAtNDU2LDggKzQ4Niw4IEBACiAJZWNobyBtODhrLW1vdG9yb2xhLXN5c3YzCiAJZXhpdCA7OwogICAgIEFWaWlPTjpkZ3V4Oio6KikKLSAgICAgICAgIyBERy9VWCByZXR1cm5zIEFWaWlPTiBmb3IgYWxsIGFyY2hpdGVjdHVyZXMKLSAgICAgICAgVU5BTUVfUFJPQ0VTU09SPWAvdXNyL2Jpbi91bmFtZSAtcGAKKwkjIERHL1VYIHJldHVybnMgQVZpaU9OIGZvciBhbGwgYXJjaGl0ZWN0dXJlcworCVVOQU1FX1BST0NFU1NPUj1gL3Vzci9iaW4vdW5hbWUgLXBgCiAJaWYgWyAkVU5BTUVfUFJPQ0VTU09SID0gbWM4ODEwMCBdIHx8IFsgJFVOQU1FX1BST0NFU1NPUiA9IG1jODgxMTAgXQogCXRoZW4KIAkgICAgaWYgWyAke1RBUkdFVF9CSU5BUllfSU5URVJGQUNFfXggPSBtODhrZGd1eGVsZnggXSB8fCBcCkBAIC00NzAsNyArNTAwLDcgQEAKIAllbHNlCiAJICAgIGVjaG8gaTU4Ni1kZy1kZ3V4JHtVTkFNRV9SRUxFQVNFfQogCWZpCi0gCWV4aXQgOzsKKwlleGl0IDs7CiAgICAgTTg4KjpEb2xwaGluT1M6KjoqKQkjIERvbHBoaW5PUyAoU1ZSMykKIAllY2hvIG04OGstZG9scGhpbi1zeXN2MwogCWV4aXQgOzsKQEAgLTUyNyw3ICs1NTcsNyBAQAogCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yCiAJZmkKIAlleGl0IDs7Ci0gICAgKjpBSVg6KjpbNDVdKQorICAgICo6QUlYOio6WzQ1NjddKQogCUlCTV9DUFVfSUQ9YC91c3Ivc2Jpbi9sc2RldiAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIHwgc2VkIDFxIHwgYXdrICd7IHByaW50ICQxIH0nYAogCWlmIC91c3Ivc2Jpbi9sc2F0dHIgLUVsICR7SUJNX0NQVV9JRH0gfCBncmVwICcgUE9XRVInID4vZGV2L251bGwgMj4mMTsgdGhlbgogCQlJQk1fQVJDSD1yczYwMDAKQEAgLTU3MCw1MiArNjAwLDUyIEBACiAJICAgIDkwMDAvWzY3OF1bMC05XVswLTldKQogCQlpZiBbIC14IC91c3IvYmluL2dldGNvbmYgXTsgdGhlbgogCQkgICAgc2NfY3B1X3ZlcnNpb249YC91c3IvYmluL2dldGNvbmYgU0NfQ1BVX1ZFUlNJT04gMj4vZGV2L251bGxgCi0gICAgICAgICAgICAgICAgICAgIHNjX2tlcm5lbF9iaXRzPWAvdXNyL2Jpbi9nZXRjb25mIFNDX0tFUk5FTF9CSVRTIDI+L2Rldi9udWxsYAotICAgICAgICAgICAgICAgICAgICBjYXNlICIke3NjX2NwdV92ZXJzaW9ufSIgaW4KLSAgICAgICAgICAgICAgICAgICAgICA1MjMpIEhQX0FSQ0g9ImhwcGExLjAiIDs7ICMgQ1BVX1BBX1JJU0MxXzAKLSAgICAgICAgICAgICAgICAgICAgICA1MjgpIEhQX0FSQ0g9ImhwcGExLjEiIDs7ICMgQ1BVX1BBX1JJU0MxXzEKLSAgICAgICAgICAgICAgICAgICAgICA1MzIpICAgICAgICAgICAgICAgICAgICAgICMgQ1BVX1BBX1JJU0MyXzAKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiR7c2Nfa2VybmVsX2JpdHN9IiBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAzMikgSFBfQVJDSD0iaHBwYTIuMG4iIDs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDY0KSBIUF9BUkNIPSJocHBhMi4wdyIgOzsKKwkJICAgIHNjX2tlcm5lbF9iaXRzPWAvdXNyL2Jpbi9nZXRjb25mIFNDX0tFUk5FTF9CSVRTIDI+L2Rldi9udWxsYAorCQkgICAgY2FzZSAiJHtzY19jcHVfdmVyc2lvbn0iIGluCisJCSAgICAgIDUyMykgSFBfQVJDSD0iaHBwYTEuMCIgOzsgIyBDUFVfUEFfUklTQzFfMAorCQkgICAgICA1MjgpIEhQX0FSQ0g9ImhwcGExLjEiIDs7ICMgQ1BVX1BBX1JJU0MxXzEKKwkJICAgICAgNTMyKSAgICAgICAgICAgICAgICAgICAgICAjIENQVV9QQV9SSVNDMl8wCisJCQljYXNlICIke3NjX2tlcm5lbF9iaXRzfSIgaW4KKwkJCSAgMzIpIEhQX0FSQ0g9ImhwcGEyLjBuIiA7OworCQkJICA2NCkgSFBfQVJDSD0iaHBwYTIuMHciIDs7CiAJCQkgICcnKSBIUF9BUkNIPSJocHBhMi4wIiA7OyAgICMgSFAtVVggMTAuMjAKLSAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMgOzsKLSAgICAgICAgICAgICAgICAgICAgZXNhYworCQkJZXNhYyA7OworCQkgICAgZXNhYwogCQlmaQogCQlpZiBbICIke0hQX0FSQ0h9IiA9ICIiIF07IHRoZW4KIAkJICAgIGV2YWwgJHNldF9jY19mb3JfYnVpbGQKLQkJICAgIHNlZCAncy9eICAgICAgICAgICAgICAvLycgPDwgRU9GID4kZHVtbXkuYworCQkgICAgc2VkICdzL14JCS8vJyA8PCBFT0YgPiRkdW1teS5jCiAKLSAgICAgICAgICAgICAgI2RlZmluZSBfSFBVWF9TT1VSQ0UKLSAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgotICAgICAgICAgICAgICAjaW5jbHVkZSA8dW5pc3RkLmg+CisJCSNkZWZpbmUgX0hQVVhfU09VUkNFCisJCSNpbmNsdWRlIDxzdGRsaWIuaD4KKwkJI2luY2x1ZGUgPHVuaXN0ZC5oPgogCi0gICAgICAgICAgICAgIGludCBtYWluICgpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgI2lmIGRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKQotICAgICAgICAgICAgICAgICAgbG9uZyBiaXRzID0gc3lzY29uZihfU0NfS0VSTkVMX0JJVFMpOwotICAgICAgICAgICAgICAjZW5kaWYKLSAgICAgICAgICAgICAgICAgIGxvbmcgY3B1ICA9IHN5c2NvbmYgKF9TQ19DUFVfVkVSU0lPTik7CisJCWludCBtYWluICgpCisJCXsKKwkJI2lmIGRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKQorCQkgICAgbG9uZyBiaXRzID0gc3lzY29uZihfU0NfS0VSTkVMX0JJVFMpOworCQkjZW5kaWYKKwkJICAgIGxvbmcgY3B1ICA9IHN5c2NvbmYgKF9TQ19DUFVfVkVSU0lPTik7CiAKLSAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY3B1KQotICAgICAgICAgICAgICAJewotICAgICAgICAgICAgICAJY2FzZSBDUFVfUEFfUklTQzFfMDogcHV0cyAoImhwcGExLjAiKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIAljYXNlIENQVV9QQV9SSVNDMV8xOiBwdXRzICgiaHBwYTEuMSIpOyBicmVhazsKLSAgICAgICAgICAgICAgCWNhc2UgQ1BVX1BBX1JJU0MyXzA6Ci0gICAgICAgICAgICAgICNpZiBkZWZpbmVkKF9TQ19LRVJORUxfQklUUykKLSAgICAgICAgICAgICAgCSAgICBzd2l0Y2ggKGJpdHMpCi0gICAgICAgICAgICAgIAkJewotICAgICAgICAgICAgICAJCWNhc2UgNjQ6IHB1dHMgKCJocHBhMi4wdyIpOyBicmVhazsKLSAgICAgICAgICAgICAgCQljYXNlIDMyOiBwdXRzICgiaHBwYTIuMG4iKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIAkJZGVmYXVsdDogcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIAkJfSBicmVhazsKLSAgICAgICAgICAgICAgI2Vsc2UgIC8qICFkZWZpbmVkKF9TQ19LRVJORUxfQklUUykgKi8KLSAgICAgICAgICAgICAgCSAgICBwdXRzICgiaHBwYTIuMCIpOyBicmVhazsKLSAgICAgICAgICAgICAgI2VuZGlmCi0gICAgICAgICAgICAgIAlkZWZhdWx0OiBwdXRzICgiaHBwYTEuMCIpOyBicmVhazsKLSAgICAgICAgICAgICAgCX0KLSAgICAgICAgICAgICAgICAgIGV4aXQgKDApOwotICAgICAgICAgICAgICB9CisJCSAgICBzd2l0Y2ggKGNwdSkKKwkJCXsKKwkJCWNhc2UgQ1BVX1BBX1JJU0MxXzA6IHB1dHMgKCJocHBhMS4wIik7IGJyZWFrOworCQkJY2FzZSBDUFVfUEFfUklTQzFfMTogcHV0cyAoImhwcGExLjEiKTsgYnJlYWs7CisJCQljYXNlIENQVV9QQV9SSVNDMl8wOgorCQkjaWYgZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpCisJCQkgICAgc3dpdGNoIChiaXRzKQorCQkJCXsKKwkJCQljYXNlIDY0OiBwdXRzICgiaHBwYTIuMHciKTsgYnJlYWs7CisJCQkJY2FzZSAzMjogcHV0cyAoImhwcGEyLjBuIik7IGJyZWFrOworCQkJCWRlZmF1bHQ6IHB1dHMgKCJocHBhMi4wIik7IGJyZWFrOworCQkJCX0gYnJlYWs7CisJCSNlbHNlICAvKiAhZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpICovCisJCQkgICAgcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7CisJCSNlbmRpZgorCQkJZGVmYXVsdDogcHV0cyAoImhwcGExLjAiKTsgYnJlYWs7CisJCQl9CisJCSAgICBleGl0ICgwKTsKKwkJfQogRU9GCiAJCSAgICAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAyPi9kZXYvbnVsbCkgJiYgSFBfQVJDSD1gJGR1bW15YAogCQkgICAgdGVzdCAteiAiJEhQX0FSQ0giICYmIEhQX0FSQ0g9aHBwYQpAQCAtNjM1LDcgKzY2NSw3IEBACiAJICAgICMgPT4gaHBwYTY0LWhwLWhwdXgxMS4yMwogCiAJICAgIGlmIGVjaG8gX19MUDY0X18gfCAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwKLQkJZ3JlcCBfX0xQNjRfXyA+L2Rldi9udWxsCisJCWdyZXAgLXEgX19MUDY0X18KIAkgICAgdGhlbgogCQlIUF9BUkNIPSJocHBhMi4wdyIKIAkgICAgZWxzZQpAQCAtNzA2LDIyICs3MzYsMjIgQEAKIAlleGl0IDs7CiAgICAgQzEqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMSo6KikKIAllY2hvIGMxLWNvbnZleC1ic2QKLSAgICAgICAgZXhpdCA7OworCWV4aXQgOzsKICAgICBDMio6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMyKjoqKQogCWlmIGdldHN5c2luZm8gLWYgc2NhbGFyX2FjYwogCXRoZW4gZWNobyBjMzItY29udmV4LWJzZAogCWVsc2UgZWNobyBjMi1jb252ZXgtYnNkCiAJZmkKLSAgICAgICAgZXhpdCA7OworCWV4aXQgOzsKICAgICBDMzQqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMzQqOiopCiAJZWNobyBjMzQtY29udmV4LWJzZAotICAgICAgICBleGl0IDs7CisJZXhpdCA7OwogICAgIEMzOCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMzOCo6KikKIAllY2hvIGMzOC1jb252ZXgtYnNkCi0gICAgICAgIGV4aXQgOzsKKwlleGl0IDs7CiAgICAgQzQqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDNCo6KikKIAllY2hvIGM0LWNvbnZleC1ic2QKLSAgICAgICAgZXhpdCA7OworCWV4aXQgOzsKICAgICBDUkFZKlktTVA6KjoqOiopCiAJZWNobyB5bXAtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKIAlleGl0IDs7CkBAIC03NDUsMTQgKzc3NSwxNCBAQAogCWV4aXQgOzsKICAgICBGMzBbMDFdOlVOSVhfU3lzdGVtX1Y6KjoqIHwgRjcwMDpVTklYX1N5c3RlbV9WOio6KikKIAlGVUpJVFNVX1BST0M9YHVuYW1lIC1tIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYAotICAgICAgICBGVUpJVFNVX1NZUz1gdW5hbWUgLXAgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvXC8vLydgCi0gICAgICAgIEZVSklUU1VfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvIC9fLydgCi0gICAgICAgIGVjaG8gIiR7RlVKSVRTVV9QUk9DfS1mdWppdHN1LSR7RlVKSVRTVV9TWVN9JHtGVUpJVFNVX1JFTH0iCi0gICAgICAgIGV4aXQgOzsKKwlGVUpJVFNVX1NZUz1gdW5hbWUgLXAgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvXC8vLydgCisJRlVKSVRTVV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy8gL18vJ2AKKwllY2hvICIke0ZVSklUU1VfUFJPQ30tZnVqaXRzdS0ke0ZVSklUU1VfU1lTfSR7RlVKSVRTVV9SRUx9IgorCWV4aXQgOzsKICAgICA1MDAwOlVOSVhfU3lzdGVtX1Y6NC4qOiopCi0gICAgICAgIEZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy9cLy8vJ2AKLSAgICAgICAgRlVKSVRTVV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy8gL18vJ2AKLSAgICAgICAgZWNobyAic3BhcmMtZnVqaXRzdS0ke0ZVSklUU1VfU1lTfSR7RlVKSVRTVV9SRUx9IgorCUZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy9cLy8vJ2AKKwlGVUpJVFNVX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIHwgc2VkIC1lICdzLyAvXy8nYAorCWVjaG8gInNwYXJjLWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfSIKIAlleGl0IDs7CiAgICAgaSo4NjpCU0QvMzg2Oio6KiB8IGkqODY6QlNEL09TOio6KiB8ICo6QXNjZW5kXCBFbWJlZGRlZC9PUzoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWJzZGkke1VOQU1FX1JFTEVBU0V9CkBAIC03NjQsMjcgKzc5NCw1MSBAQAogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWJzZGkke1VOQU1FX1JFTEVBU0V9CiAJZXhpdCA7OwogICAgICo6RnJlZUJTRDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AKKwlVTkFNRV9QUk9DRVNTT1I9YC91c3IvYmluL3VuYW1lIC1wYAorCWNhc2UgJHtVTkFNRV9QUk9DRVNTT1J9IGluCisJICAgIGFtZDY0KQorCQllY2hvIHg4Nl82NC11bmtub3duLWZyZWVic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgIDs7CisJICAgICopCisJCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AgOzsKKwllc2FjCiAJZXhpdCA7OwogICAgIGkqOkNZR1dJTio6KikKIAllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtY3lnd2luCiAJZXhpdCA7OwotICAgIGkqOk1JTkdXKjoqKQorICAgICo6TUlOR1c2NCo6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbWluZ3c2NAorCWV4aXQgOzsKKyAgICAqOk1JTkdXKjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5ndzMyCiAJZXhpdCA7OworICAgIGkqOk1TWVMqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1zeXMKKwlleGl0IDs7CiAgICAgaSo6d2luZG93czMyKjoqKQotICAgIAkjIHVuYW1lIC1tIGluY2x1ZGVzICItcGMiIG9uIHRoaXMgc3lzdGVtLgotICAgIAllY2hvICR7VU5BTUVfTUFDSElORX0tbWluZ3czMgorCSMgdW5hbWUgLW0gaW5jbHVkZXMgIi1wYyIgb24gdGhpcyBzeXN0ZW0uCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LW1pbmd3MzIKIAlleGl0IDs7CiAgICAgaSo6UFcqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXB3MzIKIAlleGl0IDs7Ci0gICAgeDg2OkludGVyaXgqOlszNF0qKQotCWVjaG8gaTU4Ni1wYy1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvXC4uKi8vJwotCWV4aXQgOzsKKyAgICAqOkludGVyaXgqOiopCisJY2FzZSAke1VOQU1FX01BQ0hJTkV9IGluCisJICAgIHg4NikKKwkJZWNobyBpNTg2LXBjLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CisJCWV4aXQgOzsKKwkgICAgYXV0aGVudGljYW1kIHwgZ2VudWluZWludGVsIHwgRU02NFQpCisJCWVjaG8geDg2XzY0LXVua25vd24taW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KKwkJZXhpdCA7OworCSAgICBJQTY0KQorCQllY2hvIGlhNjQtdW5rbm93bi1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQorCQlleGl0IDs7CisJZXNhYyA7OwogICAgIFszNDVdODY6V2luZG93c185NToqIHwgWzM0NV04NjpXaW5kb3dzXzk4OiogfCBbMzQ1XTg2OldpbmRvd3NfTlQ6KikKIAllY2hvIGkke1VOQU1FX01BQ0hJTkV9LXBjLW1rcwogCWV4aXQgOzsKKyAgICA4NjY0OldpbmRvd3NfTlQ6KikKKwllY2hvIHg4Nl82NC1wYy1ta3MKKwlleGl0IDs7CiAgICAgaSo6V2luZG93c19OVCo6KiB8IFBlbnRpdW0qOldpbmRvd3NfTlQqOiopCiAJIyBIb3cgZG8gd2Uga25vdyBpdCdzIEludGVyaXggcmF0aGVyIHRoYW4gdGhlIGdlbmVyaWMgUE9TSVggc3Vic3lzdGVtPwogCSMgSXQgYWxzbyBjb25mbGljdHMgd2l0aCBwcmUtMi4wIHZlcnNpb25zIG9mIEFUJlQgVVdJTi4gU2hvdWxkIHdlCkBAIC03OTQsNyArODQ4LDcgQEAKICAgICBpKjpVV0lOKjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy11d2luCiAJZXhpdCA7OwotICAgIGFtZDY0OkNZR1dJTio6KjoqKQorICAgIGFtZDY0OkNZR1dJTio6KjoqIHwgeDg2XzY0OkNZR1dJTio6KjoqKQogCWVjaG8geDg2XzY0LXVua25vd24tY3lnd2luCiAJZXhpdCA7OwogICAgIHAqOkNZR1dJTio6KikKQEAgLTgxNCw3MSArODY4LDEzIEBACiAgICAgaSo4NjpNaW5peDoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbml4CiAJZXhpdCA7OwotICAgIGFybSo6TGludXg6KjoqKQorICAgIGFhcmNoNjQ6TGludXg6KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQogCWV4aXQgOzsKLSAgICBjcmlzOkxpbnV4Oio6KikKLQllY2hvIGNyaXMtYXhpcy1saW51eC1nbnUKLQlleGl0IDs7Ci0gICAgY3Jpc3YzMjpMaW51eDoqOiopCi0JZWNobyBjcmlzdjMyLWF4aXMtbGludXgtZ251Ci0JZXhpdCA7OwotICAgIGZydjpMaW51eDoqOiopCi0gICAgCWVjaG8gZnJ2LXVua25vd24tbGludXgtZ251Ci0JZXhpdCA7OwotICAgIGlhNjQ6TGludXg6KjoqKQorICAgIGFhcmNoNjRfYmU6TGludXg6KjoqKQorCVVOQU1FX01BQ0hJTkU9YWFyY2g2NF9iZQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQogCWV4aXQgOzsKLSAgICBtMzJyKjpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251Ci0JZXhpdCA7OwotICAgIG02OCo6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQotCWV4aXQgOzsKLSAgICBtaXBzOkxpbnV4Oio6KikKLQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCi0Jc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKLQkjdW5kZWYgQ1BVCi0JI3VuZGVmIG1pcHMKLQkjdW5kZWYgbWlwc2VsCi0JI2lmIGRlZmluZWQoX19NSVBTRUxfXykgfHwgZGVmaW5lZChfX01JUFNFTCkgfHwgZGVmaW5lZChfTUlQU0VMKSB8fCBkZWZpbmVkKE1JUFNFTCkKLQlDUFU9bWlwc2VsCi0JI2Vsc2UKLQkjaWYgZGVmaW5lZChfX01JUFNFQl9fKSB8fCBkZWZpbmVkKF9fTUlQU0VCKSB8fCBkZWZpbmVkKF9NSVBTRUIpIHx8IGRlZmluZWQoTUlQU0VCKQotCUNQVT1taXBzCi0JI2Vsc2UKLQlDUFU9Ci0JI2VuZGlmCi0JI2VuZGlmCi1FT0YKLQlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCBeQ1BVPWAKLQl0ZXN0IHgiJHtDUFV9IiAhPSB4ICYmIHsgZWNobyAiJHtDUFV9LXVua25vd24tbGludXgtZ251IjsgZXhpdDsgfQotCTs7Ci0gICAgbWlwczY0OkxpbnV4Oio6KikKLQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCi0Jc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKLQkjdW5kZWYgQ1BVCi0JI3VuZGVmIG1pcHM2NAotCSN1bmRlZiBtaXBzNjRlbAotCSNpZiBkZWZpbmVkKF9fTUlQU0VMX18pIHx8IGRlZmluZWQoX19NSVBTRUwpIHx8IGRlZmluZWQoX01JUFNFTCkgfHwgZGVmaW5lZChNSVBTRUwpCi0JQ1BVPW1pcHM2NGVsCi0JI2Vsc2UKLQkjaWYgZGVmaW5lZChfX01JUFNFQl9fKSB8fCBkZWZpbmVkKF9fTUlQU0VCKSB8fCBkZWZpbmVkKF9NSVBTRUIpIHx8IGRlZmluZWQoTUlQU0VCKQotCUNQVT1taXBzNjQKLQkjZWxzZQotCUNQVT0KLQkjZW5kaWYKLQkjZW5kaWYKLUVPRgotCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwIF5DUFU9YAotCXRlc3QgeCIke0NQVX0iICE9IHggJiYgeyBlY2hvICIke0NQVX0tdW5rbm93bi1saW51eC1nbnUiOyBleGl0OyB9Ci0JOzsKLSAgICBwcGM6TGludXg6KjoqKQotCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LWdudQotCWV4aXQgOzsKLSAgICBwcGM2NDpMaW51eDoqOiopCi0JZWNobyBwb3dlcnBjNjQtdW5rbm93bi1saW51eC1nbnUKLQlleGl0IDs7CiAgICAgYWxwaGE6TGludXg6KjoqKQogCWNhc2UgYHNlZCAtbiAnL15jcHUgbW9kZWwvcy9eLio6IFwoLipcKS9cMS9wJyA8IC9wcm9jL2NwdWluZm9gIGluCiAJICBFVjUpICAgVU5BTUVfTUFDSElORT1hbHBoYWV2NSA7OwpAQCAtODg4LDExICs4ODQsOTAgQEAKIAkgIEVWNikgICBVTkFNRV9NQUNISU5FPWFscGhhZXY2IDs7CiAJICBFVjY3KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NjcgOzsKIAkgIEVWNjgqKSBVTkFNRV9NQUNISU5FPWFscGhhZXY2OCA7OwotICAgICAgICBlc2FjCi0Jb2JqZHVtcCAtLXByaXZhdGUtaGVhZGVycyAvYmluL3NoIHwgZ3JlcCBsZC5zby4xID4vZGV2L251bGwKKwllc2FjCisJb2JqZHVtcCAtLXByaXZhdGUtaGVhZGVycyAvYmluL3NoIHwgZ3JlcCAtcSBsZC5zby4xCiAJaWYgdGVzdCAiJD8iID0gMCA7IHRoZW4gTElCQz0ibGliYzEiIDsgZWxzZSBMSUJDPSIiIDsgZmkKIAllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUke0xJQkN9CiAJZXhpdCA7OworICAgIGFybSo6TGludXg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlpZiBlY2hvIF9fQVJNX0VBQklfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJICAgIHwgZ3JlcCAtcSBfX0FSTV9FQUJJX18KKwl0aGVuCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWVsc2UKKwkgICAgaWYgZWNobyBfX0FSTV9QQ1NfVkZQIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKKwkJfCBncmVwIC1xIF9fQVJNX1BDU19WRlAKKwkgICAgdGhlbgorCQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnVlYWJpCisJICAgIGVsc2UKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251ZWFiaWhmCisJICAgIGZpCisJZmkKKwlleGl0IDs7CisgICAgYXZyMzIqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgY3JpczpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWF4aXMtbGludXgtZ251CisJZXhpdCA7OworICAgIGNyaXN2MzI6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBmcnY6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBoZXhhZ29uOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgaSo4NjpMaW51eDoqOiopCisJTElCQz1nbnUKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkjaWZkZWYgX19kaWV0bGliY19fCisJTElCQz1kaWV0bGliYworCSNlbmRpZgorRU9GCisJZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgJ15MSUJDJ2AKKwllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LSR7TElCQ30iCisJZXhpdCA7OworICAgIGlhNjQ6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBtMzJyKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIG02OCo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBtaXBzOkxpbnV4Oio6KiB8IG1pcHM2NDpMaW51eDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI3VuZGVmIENQVQorCSN1bmRlZiAke1VOQU1FX01BQ0hJTkV9CisJI3VuZGVmICR7VU5BTUVfTUFDSElORX1lbAorCSNpZiBkZWZpbmVkKF9fTUlQU0VMX18pIHx8IGRlZmluZWQoX19NSVBTRUwpIHx8IGRlZmluZWQoX01JUFNFTCkgfHwgZGVmaW5lZChNSVBTRUwpCisJQ1BVPSR7VU5BTUVfTUFDSElORX1lbAorCSNlbHNlCisJI2lmIGRlZmluZWQoX19NSVBTRUJfXykgfHwgZGVmaW5lZChfX01JUFNFQikgfHwgZGVmaW5lZChfTUlQU0VCKSB8fCBkZWZpbmVkKE1JUFNFQikKKwlDUFU9JHtVTkFNRV9NQUNISU5FfQorCSNlbHNlCisJQ1BVPQorCSNlbmRpZgorCSNlbmRpZgorRU9GCisJZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgJ15DUFUnYAorCXRlc3QgeCIke0NQVX0iICE9IHggJiYgeyBlY2hvICIke0NQVX0tdW5rbm93bi1saW51eC1nbnUiOyBleGl0OyB9CisJOzsKKyAgICBvcjMyOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgcGFkcmU6TGludXg6KjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgcGFyaXNjNjQ6TGludXg6KjoqIHwgaHBwYTY0OkxpbnV4Oio6KikKKwllY2hvIGhwcGE2NC11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKICAgICBwYXJpc2M6TGludXg6KjoqIHwgaHBwYTpMaW51eDoqOiopCiAJIyBMb29rIGZvciBDUFUgbGV2ZWwKIAljYXNlIGBncmVwICdeY3B1W15hLXpdKjonIC9wcm9jL2NwdWluZm8gMj4vZGV2L251bGwgfCBjdXQgLWQnICcgLWYyYCBpbgpAQCAtOTAxLDE0ICs5NzYsMTcgQEAKIAkgICopICAgIGVjaG8gaHBwYS11bmtub3duLWxpbnV4LWdudSA7OwogCWVzYWMKIAlleGl0IDs7Ci0gICAgcGFyaXNjNjQ6TGludXg6KjoqIHwgaHBwYTY0OkxpbnV4Oio6KikKLQllY2hvIGhwcGE2NC11bmtub3duLWxpbnV4LWdudQorICAgIHBwYzY0OkxpbnV4Oio6KikKKwllY2hvIHBvd2VycGM2NC11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBwcGM6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LWdudQogCWV4aXQgOzsKICAgICBzMzkwOkxpbnV4Oio6KiB8IHMzOTB4OkxpbnV4Oio6KikKIAllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLWxpbnV4CiAJZXhpdCA7OwogICAgIHNoNjQqOkxpbnV4Oio6KikKLSAgICAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CiAJZXhpdCA7OwogICAgIHNoKjpMaW51eDoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CkBAIC05MTYsNjggKzk5NCwxOCBAQAogICAgIHNwYXJjOkxpbnV4Oio6KiB8IHNwYXJjNjQ6TGludXg6KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQogCWV4aXQgOzsKLSAgICB4ODZfNjQ6TGludXg6KjoqKQotCWVjaG8geDg2XzY0LXVua25vd24tbGludXgtZ251CisgICAgdGlsZSo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQogCWV4aXQgOzsKLSAgICBpKjg2OkxpbnV4Oio6KikKLQkjIFRoZSBCRkQgbGlua2VyIGtub3dzIHdoYXQgdGhlIGRlZmF1bHQgb2JqZWN0IGZpbGUgZm9ybWF0IGlzLCBzbwotCSMgZmlyc3Qgc2VlIGlmIGl0IHdpbGwgdGVsbCB1cy4gY2QgdG8gdGhlIHJvb3QgZGlyZWN0b3J5IHRvIHByZXZlbnQKLQkjIHByb2JsZW1zIHdpdGggb3RoZXIgcHJvZ3JhbXMgb3IgZGlyZWN0b3JpZXMgY2FsbGVkIGBsZCcgaW4gdGhlIHBhdGguCi0JIyBTZXQgTENfQUxMPUMgdG8gZW5zdXJlIGxkIG91dHB1dHMgbWVzc2FnZXMgaW4gRW5nbGlzaC4KLQlsZF9zdXBwb3J0ZWRfdGFyZ2V0cz1gY2QgLzsgTENfQUxMPUMgbGQgLS1oZWxwIDI+JjEgXAotCQkJIHwgc2VkIC1uZSAnL3N1cHBvcnRlZCB0YXJnZXRzOi8hZAotCQkJCSAgICBzL1sgCV1bIAldKi8gL2cKLQkJCQkgICAgcy8uKnN1cHBvcnRlZCB0YXJnZXRzOiAqLy8KLQkJCQkgICAgcy8gLiovLwotCQkJCSAgICBwJ2AKLSAgICAgICAgY2FzZSAiJGxkX3N1cHBvcnRlZF90YXJnZXRzIiBpbgotCSAgZWxmMzItaTM4NikKLQkJVEVOVEFUSVZFPSIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LWdudSIKLQkJOzsKLQkgIGEub3V0LWkzODYtbGludXgpCi0JCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtZ251YW91dCIKLQkJZXhpdCA7OwotCSAgY29mZi1pMzg2KQotCQllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LWdudWNvZmYiCi0JCWV4aXQgOzsKLQkgICIiKQotCQkjIEVpdGhlciBhIHByZS1CRkQgYS5vdXQgbGlua2VyIChsaW51eC1nbnVvbGRsZCkgb3IKLQkJIyBvbmUgdGhhdCBkb2VzIG5vdCBnaXZlIHVzIHVzZWZ1bCAtLWhlbHAuCi0JCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtZ251b2xkbGQiCi0JCWV4aXQgOzsKLQllc2FjCi0JIyBEZXRlcm1pbmUgd2hldGhlciB0aGUgZGVmYXVsdCBjb21waWxlciBpcyBhLm91dCBvciBlbGYKLQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCi0Jc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKLQkjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KLQkjaWZkZWYgX19FTEZfXwotCSMgaWZkZWYgX19HTElCQ19fCi0JIyAgaWYgX19HTElCQ19fID49IDIKLQlMSUJDPWdudQotCSMgIGVsc2UKLQlMSUJDPWdudWxpYmMxCi0JIyAgZW5kaWYKLQkjIGVsc2UKLQlMSUJDPWdudWxpYmMxCi0JIyBlbmRpZgotCSNlbHNlCi0JI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKLQlMSUJDPWdudQotCSNlbHNlCi0JTElCQz1nbnVhb3V0Ci0JI2VuZGlmCi0JI2VuZGlmCi0JI2lmZGVmIF9fZGlldGxpYmNfXwotCUxJQkM9ZGlldGxpYmMKLQkjZW5kaWYKLUVPRgotCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwIF5MSUJDPWAKLQl0ZXN0IHgiJHtMSUJDfSIgIT0geCAmJiB7Ci0JCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtJHtMSUJDfSIKLQkJZXhpdAotCX0KLQl0ZXN0IHgiJHtURU5UQVRJVkV9IiAhPSB4ICYmIHsgZWNobyAiJHtURU5UQVRJVkV9IjsgZXhpdDsgfQotCTs7CisgICAgdmF4OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICB4ODZfNjQ6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICB4dGVuc2EqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CiAgICAgaSo4NjpEWU5JWC9wdHg6NCo6KikKIAkjIHB0eCA0LjAgZG9lcyB1bmFtZSAtcyBjb3JyZWN0bHksIHdpdGggRFlOSVgvcHR4IGluIHRoZXJlLgogCSMgZWFybGllciB2ZXJzaW9ucyBhcmUgbWVzc2VkIHVwIGFuZCBwdXQgdGhlIG5vZGVuYW1lIGluIGJvdGgKQEAgLTk4NSwxMSArMTAxMywxMSBAQAogCWVjaG8gaTM4Ni1zZXF1ZW50LXN5c3Y0CiAJZXhpdCA7OwogICAgIGkqODY6VU5JWF9TVjo0LjJNUDoyLiopCi0gICAgICAgICMgVW5peHdhcmUgaXMgYW4gb2Zmc2hvb3Qgb2YgU1ZSNCwgYnV0IGl0IGhhcyBpdHMgb3duIHZlcnNpb24KLSAgICAgICAgIyBudW1iZXIgc2VyaWVzIHN0YXJ0aW5nIHdpdGggMi4uLgotICAgICAgICAjIEkgYW0gbm90IHBvc2l0aXZlIHRoYXQgb3RoZXIgU1ZSNCBzeXN0ZW1zIHdvbid0IG1hdGNoIHRoaXMsCisJIyBVbml4d2FyZSBpcyBhbiBvZmZzaG9vdCBvZiBTVlI0LCBidXQgaXQgaGFzIGl0cyBvd24gdmVyc2lvbgorCSMgbnVtYmVyIHNlcmllcyBzdGFydGluZyB3aXRoIDIuLi4KKwkjIEkgYW0gbm90IHBvc2l0aXZlIHRoYXQgb3RoZXIgU1ZSNCBzeXN0ZW1zIHdvbid0IG1hdGNoIHRoaXMsCiAJIyBJIGp1c3QgaGF2ZSB0byBob3BlLiAgLS0gcm1zLgotICAgICAgICAjIFVzZSBzeXN2NC4ydXcuLi4gc28gdGhhdCBzeXN2NCogbWF0Y2hlcyBpdC4KKwkjIFVzZSBzeXN2NC4ydXcuLi4gc28gdGhhdCBzeXN2NCogbWF0Y2hlcyBpdC4KIAllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdjQuMnV3JHtVTkFNRV9WRVJTSU9OfQogCWV4aXQgOzsKICAgICBpKjg2Ok9TLzI6KjoqKQpAQCAtMTAwNiw3ICsxMDM0LDcgQEAKICAgICBpKjg2OnN5bGxhYmxlOio6KikKIAllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lsbGFibGUKIAlleGl0IDs7Ci0gICAgaSo4NjpMeW54T1M6Mi4qOiogfCBpKjg2Okx5bnhPUzozLlswMV0qOiogfCBpKjg2Okx5bnhPUzo0LjAqOiopCisgICAgaSo4NjpMeW54T1M6Mi4qOiogfCBpKjg2Okx5bnhPUzozLlswMV0qOiogfCBpKjg2Okx5bnhPUzo0LlswMl0qOiopCiAJZWNobyBpMzg2LXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQogCWV4aXQgOzsKICAgICBpKjg2OipET1M6KjoqKQpAQCAtMTAyMSw3ICsxMDQ5LDcgQEAKIAlmaQogCWV4aXQgOzsKICAgICBpKjg2Oio6NTpbNjc4XSopCi0gICAgCSMgVW5peFdhcmUgNy54LCBPcGVuVU5JWCBhbmQgT3BlblNlcnZlciA2LgorCSMgVW5peFdhcmUgNy54LCBPcGVuVU5JWCBhbmQgT3BlblNlcnZlciA2LgogCWNhc2UgYC9iaW4vdW5hbWUgLVggfCBncmVwICJeTWFjaGluZSJgIGluCiAJICAgICo0ODYqKQkgICAgIFVOQU1FX01BQ0hJTkU9aTQ4NiA7OwogCSAgICAqUGVudGl1bSkJICAgICBVTkFNRV9NQUNISU5FPWk1ODYgOzsKQEAgLTEwNDksMTAgKzEwNzcsMTMgQEAKIAlleGl0IDs7CiAgICAgcGM6KjoqOiopCiAJIyBMZWZ0IGhlcmUgZm9yIGNvbXBhdGliaWxpdHk6Ci0gICAgICAgICMgdW5hbWUgLW0gcHJpbnRzIGZvciBESkdQUCBhbHdheXMgJ3BjJywgYnV0IGl0IHByaW50cyBub3RoaW5nIGFib3V0Ci0gICAgICAgICMgdGhlIHByb2Nlc3Nvciwgc28gd2UgcGxheSBzYWZlIGJ5IGFzc3VtaW5nIGkzODYuCi0JZWNobyBpMzg2LXBjLW1zZG9zZGpncHAKLSAgICAgICAgZXhpdCA7OworCSMgdW5hbWUgLW0gcHJpbnRzIGZvciBESkdQUCBhbHdheXMgJ3BjJywgYnV0IGl0IHByaW50cyBub3RoaW5nIGFib3V0CisJIyB0aGUgcHJvY2Vzc29yLCBzbyB3ZSBwbGF5IHNhZmUgYnkgYXNzdW1pbmcgaTU4Ni4KKwkjIE5vdGU6IHdoYXRldmVyIHRoaXMgaXMsIGl0IE1VU1QgYmUgdGhlIHNhbWUgYXMgd2hhdCBjb25maWcuc3ViCisJIyBwcmludHMgZm9yIHRoZSAiZGpncHAiIGhvc3QsIG9yIGVsc2UgR0RCIGNvbmZpZ3VyeSB3aWxsIGRlY2lkZSB0aGF0CisJIyB0aGlzIGlzIGEgY3Jvc3MtYnVpbGQuCisJZWNobyBpNTg2LXBjLW1zZG9zZGpncHAKKwlleGl0IDs7CiAgICAgSW50ZWw6TWFjaDozKjoqKQogCWVjaG8gaTM4Ni1wYy1tYWNoMwogCWV4aXQgOzsKQEAgLTEwODcsOCArMTExOCwxOCBAQAogCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgZW50aXVtID4vZGV2L251bGwgXAogCSAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0gOzsKICAgICAzWzM0XT8/Oio6NC4wOiogfCAzWzM0XT8/LCo6Kjo0LjA6KikKLSAgICAgICAgL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCi0gICAgICAgICAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0OyBleGl0OyB9IDs7CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCisJICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQ7IGV4aXQ7IH0gOzsKKyAgICBOQ1IqOio6NC4yOiogfCBNUFJBUyo6Kjo0LjI6KikKKwlPU19SRUw9Jy4zJworCXRlc3QgLXIgL2V0Yy8ucmVsaWQgXAorCSAgICAmJiBPU19SRUw9LmBzZWQgLW4gJ3MvW14gXSogW14gXSogXChbMC05XVswLTldXCkuKi9cMS9wJyA8IC9ldGMvLnJlbGlkYAorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAorCSAgICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgZW50aXVtID4vZGV2L251bGwgXAorCSAgICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgcHRlcm9uID4vZGV2L251bGwgXAorCSAgICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfSA7OwogICAgIG02OCo6THlueE9TOjIuKjoqIHwgbTY4KjpMeW54T1M6My4wKjoqKQogCWVjaG8gbTY4ay11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KIAlleGl0IDs7CkBAIC0xMTAxLDcgKzExNDIsNyBAQAogICAgIHJzNjAwMDpMeW54T1M6Mi4qOiopCiAJZWNobyByczYwMDAtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CiAJZXhpdCA7OwotICAgIFBvd2VyUEM6THlueE9TOjIuKjoqIHwgUG93ZXJQQzpMeW54T1M6My5bMDFdKjoqIHwgUG93ZXJQQzpMeW54T1M6NC4wKjoqKQorICAgIFBvd2VyUEM6THlueE9TOjIuKjoqIHwgUG93ZXJQQzpMeW54T1M6My5bMDFdKjoqIHwgUG93ZXJQQzpMeW54T1M6NC5bMDJdKjoqKQogCWVjaG8gcG93ZXJwYy11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KIAlleGl0IDs7CiAgICAgU01bQkVdUzpVTklYX1NWOio6KikKQEAgLTExMjEsMTAgKzExNjIsMTAgQEAKIAkJZWNobyBuczMyay1zbmktc3lzdgogCWZpCiAJZXhpdCA7OwotICAgIFBFTlRJVU06Kjo0LjAqOiopICMgVW5pc3lzIGBDbGVhclBhdGggSE1QIElYIDQwMDAnIFNWUjQvTVAgZWZmb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgIyBzYXlzIDxSaWNoYXJkLk0uQmFydGVsQGNjTWFpbC5DZW5zdXMuR09WPgotICAgICAgICBlY2hvIGk1ODYtdW5pc3lzLXN5c3Y0Ci0gICAgICAgIGV4aXQgOzsKKyAgICBQRU5USVVNOio6NC4wKjoqKQkjIFVuaXN5cyBgQ2xlYXJQYXRoIEhNUCBJWCA0MDAwJyBTVlI0L01QIGVmZm9ydAorCQkJIyBzYXlzIDxSaWNoYXJkLk0uQmFydGVsQGNjTWFpbC5DZW5zdXMuR09WPgorCWVjaG8gaTU4Ni11bmlzeXMtc3lzdjQKKwlleGl0IDs7CiAgICAgKjpVTklYX1N5c3RlbV9WOjQqOkZUWCopCiAJIyBGcm9tIEdlcmFsZCBIZXdlcyA8aGV3ZXNAb3Blbm1hcmtldC5jb20+LgogCSMgSG93IGFib3V0IGRpZmZlcmVudGlhdGluZyBiZXR3ZWVuIHN0cmF0dXMgYXJjaGl0ZWN0dXJlcz8gLWRqbQpAQCAtMTE1MCwxMSArMTE5MSwxMSBAQAogCWV4aXQgOzsKICAgICBSWzM0XTAwMDoqU3lzdGVtX1YqOio6KiB8IFI0MDAwOlVOSVhfU1lTVjoqOiogfCBSKjAwMDpVTklYX1NWOio6KikKIAlpZiBbIC1kIC91c3IvbmVjIF07IHRoZW4KLQkgICAgICAgIGVjaG8gbWlwcy1uZWMtc3lzdiR7VU5BTUVfUkVMRUFTRX0KKwkJZWNobyBtaXBzLW5lYy1zeXN2JHtVTkFNRV9SRUxFQVNFfQogCWVsc2UKLQkgICAgICAgIGVjaG8gbWlwcy11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9CisJCWVjaG8gbWlwcy11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9CiAJZmkKLSAgICAgICAgZXhpdCA7OworCWV4aXQgOzsKICAgICBCZUJveDpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gaGFyZHdhcmUgbWFkZSBieSBCZSwgUFBDIG9ubHkuCiAJZWNobyBwb3dlcnBjLWJlLWJlb3MKIAlleGl0IDs7CkBAIC0xMTY0LDYgKzEyMDUsMTIgQEAKICAgICBCZVBDOkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBJbnRlbCBQQyBjb21wYXRpYmxlLgogCWVjaG8gaTU4Ni1wYy1iZW9zCiAJZXhpdCA7OworICAgIEJlUEM6SGFpa3U6KjoqKQkjIEhhaWt1IHJ1bm5pbmcgb24gSW50ZWwgUEMgY29tcGF0aWJsZS4KKwllY2hvIGk1ODYtcGMtaGFpa3UKKwlleGl0IDs7CisgICAgeDg2XzY0OkhhaWt1Oio6KikKKwllY2hvIHg4Nl82NC11bmtub3duLWhhaWt1CisJZXhpdCA7OwogICAgIFNYLTQ6U1VQRVItVVg6KjoqKQogCWVjaG8gc3g0LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQogCWV4aXQgOzsKQEAgLTExNzMsNiArMTIyMCwxNSBAQAogICAgIFNYLTY6U1VQRVItVVg6KjoqKQogCWVjaG8gc3g2LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQogCWV4aXQgOzsKKyAgICBTWC03OlNVUEVSLVVYOio6KikKKwllY2hvIHN4Ny1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtODpTVVBFUi1VWDoqOiopCisJZWNobyBzeDgtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLThSOlNVUEVSLVVYOio6KikKKwllY2hvIHN4OHItbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OwogICAgIFBvd2VyKjpSaGFwc29keToqOiopCiAJZWNobyBwb3dlcnBjLWFwcGxlLXJoYXBzb2R5JHtVTkFNRV9SRUxFQVNFfQogCWV4aXQgOzsKQEAgLTExODIsNyArMTIzOCwxNiBAQAogICAgICo6RGFyd2luOio6KikKIAlVTkFNRV9QUk9DRVNTT1I9YHVuYW1lIC1wYCB8fCBVTkFNRV9QUk9DRVNTT1I9dW5rbm93bgogCWNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgotCSAgICAqODYpIFVOQU1FX1BST0NFU1NPUj1pNjg2IDs7CisJICAgIGkzODYpCisJCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCisJCSAgaWYgKGVjaG8gJyNpZmRlZiBfX0xQNjRfXyc7IGVjaG8gSVNfNjRCSVRfQVJDSDsgZWNobyAnI2VuZGlmJykgfCBcCisJCSAgICAgIChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCisJCSAgICAgIGdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCisJCSAgdGhlbgorCQkgICAgICBVTkFNRV9QUk9DRVNTT1I9Ing4Nl82NCIKKwkJICBmaQorCQlmaSA7OwogCSAgICB1bmtub3duKSBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYyA7OwogCWVzYWMKIAllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS1hcHBsZS1kYXJ3aW4ke1VOQU1FX1JFTEVBU0V9CkBAIC0xMTk4LDcgKzEyNjMsMTAgQEAKICAgICAqOlFOWDoqOjQqKQogCWVjaG8gaTM4Ni1wYy1xbngKIAlleGl0IDs7Ci0gICAgTlNFLT86Tk9OU1RPUF9LRVJORUw6KjoqKQorICAgIE5FTy0/Ok5PTlNUT1BfS0VSTkVMOio6KikKKwllY2hvIG5lby10YW5kZW0tbnNrJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBOU0UtKjpOT05TVE9QX0tFUk5FTDoqOiopCiAJZWNobyBuc2UtdGFuZGVtLW5zayR7VU5BTUVfUkVMRUFTRX0KIAlleGl0IDs7CiAgICAgTlNSLT86Tk9OU1RPUF9LRVJORUw6KjoqKQpAQCAtMTI0MywxMyArMTMxMSwxMyBAQAogCWVjaG8gcGRwMTAtdW5rbm93bi1pdHMKIAlleGl0IDs7CiAgICAgU0VJOio6KjpTRUlVWCkKLSAgICAgICAgZWNobyBtaXBzLXNlaS1zZWl1eCR7VU5BTUVfUkVMRUFTRX0KKwllY2hvIG1pcHMtc2VpLXNlaXV4JHtVTkFNRV9SRUxFQVNFfQogCWV4aXQgOzsKICAgICAqOkRyYWdvbkZseToqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZHJhZ29uZmx5YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYAogCWV4aXQgOzsKICAgICAqOipWTVM6KjoqKQotICAgIAlVTkFNRV9NQUNISU5FPWAodW5hbWUgLXApIDI+L2Rldi9udWxsYAorCVVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtcCkgMj4vZGV2L251bGxgCiAJY2FzZSAiJHtVTkFNRV9NQUNISU5FfSIgaW4KIAkgICAgQSopIGVjaG8gYWxwaGEtZGVjLXZtcyA7IGV4aXQgOzsKIAkgICAgSSopIGVjaG8gaWE2NC1kZWMtdm1zIDsgZXhpdCA7OwpAQCAtMTI2MSwxMSArMTMyOSwxNyBAQAogICAgIGkqODY6c2t5b3M6KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1za3lvc2BlY2hvICR7VU5BTUVfUkVMRUFTRX1gIHwgc2VkIC1lICdzLyAuKiQvLycKIAlleGl0IDs7CisgICAgaSo4NjpyZG9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtcmRvcworCWV4aXQgOzsKKyAgICBpKjg2OkFST1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1hcm9zCisJZXhpdCA7OworICAgIHg4Nl82NDpWTWtlcm5lbDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZXN4CisJZXhpdCA7OwogZXNhYwogCi0jZWNobyAnKE5vIHVuYW1lIGNvbW1hbmQgb3IgdW5hbWUgb3V0cHV0IG5vdCByZWNvZ25pemVkLiknIDE+JjIKLSNlY2hvICIke1VOQU1FX01BQ0hJTkV9OiR7VU5BTUVfU1lTVEVNfToke1VOQU1FX1JFTEVBU0V9OiR7VU5BTUVfVkVSU0lPTn0iIDE+JjIKLQogZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAogY2F0ID4kZHVtbXkuYyA8PEVPRgogI2lmZGVmIF9TRVFVRU5UXwpAQCAtMTI4MywxMSArMTM1NywxMSBAQAogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogICBwcmludGYgKCJtNjhrLXNvbnktbmV3c29zJXNcbiIsCiAjaWZkZWYgTkVXU09TNAotICAgICAgICAgICI0IgorCSI0IgogI2Vsc2UKLQkgICIiCisJIiIKICNlbmRpZgotICAgICAgICAgKTsgZXhpdCAoMCk7CisJKTsgZXhpdCAoMCk7CiAjZW5kaWYKICNlbmRpZgogCkBAIC0xNDIxLDkgKzE0OTUsOSBAQAogdGhlIG9wZXJhdGluZyBzeXN0ZW0geW91IGFyZSB1c2luZy4gSXQgaXMgYWR2aXNlZCB0aGF0IHlvdQogZG93bmxvYWQgdGhlIG1vc3QgdXAgdG8gZGF0ZSB2ZXJzaW9uIG9mIHRoZSBjb25maWcgc2NyaXB0cyBmcm9tCiAKLSAgaHR0cDovL3NhdmFubmFoLmdudS5vcmcvY2dpLWJpbi92aWV3Y3ZzLypjaGVja291dCovY29uZmlnL2NvbmZpZy9jb25maWcuZ3Vlc3MKKyAgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcztoYj1IRUFECiBhbmQKLSAgaHR0cDovL3NhdmFubmFoLmdudS5vcmcvY2dpLWJpbi92aWV3Y3ZzLypjaGVja291dCovY29uZmlnL2NvbmZpZy9jb25maWcuc3ViCisgIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuc3ViO2hiPUhFQUQKIAogSWYgdGhlIHZlcnNpb24geW91IHJ1biAoJDApIGlzIGFscmVhZHkgdXAgdG8gZGF0ZSwgcGxlYXNlCiBzZW5kIHRoZSBmb2xsb3dpbmcgZGF0YSBhbmQgYW55IGluZm9ybWF0aW9uIHlvdSB0aGluayBtaWdodCBiZQpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2NvbmZpZy5ycGF0aCBiL2J1aWxkLWF1eC9jb25maWcucnBhdGgKaW5kZXggYzQ5MmE5My4uMWEwNzAxOCAxMDA3NTUKLS0tIGEvYnVpbGQtYXV4L2NvbmZpZy5ycGF0aAorKysgYi9idWlsZC1hdXgvY29uZmlnLnJwYXRoCkBAIC0yLDcgKzIsNyBAQAogIyBPdXRwdXQgYSBzeXN0ZW0gZGVwZW5kZW50IHNldCBvZiB2YXJpYWJsZXMsIGRlc2NyaWJpbmcgaG93IHRvIHNldCB0aGUKICMgcnVuIHRpbWUgc2VhcmNoIHBhdGggb2Ygc2hhcmVkIGxpYnJhcmllcyBpbiBhbiBleGVjdXRhYmxlLgogIwotIyAgIENvcHlyaWdodCAxOTk2LTIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgQ29weXJpZ2h0IDE5OTYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMgICBUYWtlbiBmcm9tIEdOVSBsaWJ0b29sLCAyMDAxCiAjICAgT3JpZ2luYWxseSBieSBHb3Jkb24gTWF0emlna2VpdCA8Z29yZEBnbnUuYWkubWl0LmVkdT4sIDE5OTYKICMKQEAgLTI1LDcgKzI1LDcgQEAKICMgICBrbm93biB3b3JrYXJvdW5kIGlzIHRvIGNob29zZSBzaG9ydGVyIGRpcmVjdG9yeSBuYW1lcyBmb3IgdGhlIGJ1aWxkCiAjICAgZGlyZWN0b3J5IGFuZC9vciB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KIAotIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCisjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSAnLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKICMgd2hpY2ggbmVlZHMgJy5saWInKS4KIGxpYmV4dD1hCiBzaHJleHQ9LnNvCkBAIC00Nyw3ICs0Nyw3IEBACiBkb25lCiBjY19iYXNlbmFtZT1gZWNobyAiJGNjX3RlbXAiIHwgc2VkIC1lICdzJV4uKi8lJSdgCiAKLSMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDLgorIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIF9MVF9DT01QSUxFUl9QSUMuCiAKIHdsPQogaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KQEAgLTU3LDE0ICs1Nyw3IEBACiAgICAgYWl4KikKICAgICAgIHdsPSctV2wsJwogICAgICAgOzsKLSAgICBkYXJ3aW4qKQotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgeGxjKikKLSAgICAgICAgICB3bD0nLVdsLCcKLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICBtaW5ndyogfCBwdzMyKiB8IG9zMiopCisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKICAgICAgIDs7CiAgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCiAgICAgICB3bD0nLVdsLCcKQEAgLTcyLDI0ICs2NSwzNyBAQAogICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCiAgICAgICB3bD0nLVdsLCcKICAgICAgIDs7Ci0gICAgbmV3c29zNikKLSAgICAgIDs7Ci0gICAgbGludXgqKQorICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgIGljYyogfCBlY2MqKQorICAgICAgICBlY2MqKQogICAgICAgICAgIHdsPSctV2wsJwogICAgICAgICAgIDs7Ci0gICAgICAgIHBnY2MgfCBwZ2Y3NyB8IHBnZjkwKQorICAgICAgICBpY2MqIHwgaWZvcnQqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICAgIGxmOTUqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICAgIG5hZ2ZvciopCisgICAgICAgICAgd2w9Jy1XbCwtV2wsLCcKKyAgICAgICAgICA7OworICAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCiAgICAgICAgICAgd2w9Jy1XbCwnCiAgICAgICAgICAgOzsKICAgICAgICAgY2NjKikKICAgICAgICAgICB3bD0nLVdsLCcKICAgICAgICAgICA7OworICAgICAgICB4bCogfCBiZ3hsKiB8IGJnZiogfCBtcGl4bCopCisgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgOzsKICAgICAgICAgY29tbykKICAgICAgICAgICB3bD0nLWxvcHQ9JwogICAgICAgICAgIDs7CiAgICAgICAgICopCiAgICAgICAgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisgICAgICAgICAgICAqU3VuXCBGKiB8ICpTdW4qRm9ydHJhbiopCisgICAgICAgICAgICAgIHdsPQorICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgKlN1blwgQyopCiAgICAgICAgICAgICAgIHdsPSctV2wsJwogICAgICAgICAgICAgICA7OwpAQCAtOTcsMjIgKzEwMywzNiBAQAogICAgICAgICAgIDs7CiAgICAgICBlc2FjCiAgICAgICA7OworICAgIG5ld3NvczYpCisgICAgICA7OworICAgICpudG8qIHwgKnFueCopCisgICAgICA7OwogICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKICAgICAgIHdsPSctV2wsJwogICAgICAgOzsKLSAgICBzY28zLjJ2NSopCisgICAgcmRvcyopCiAgICAgICA7OwogICAgIHNvbGFyaXMqKQotICAgICAgd2w9Jy1XbCwnCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisgICAgICAgICAgd2w9Jy1Rb3B0aW9uIGxkICcKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICBlc2FjCiAgICAgICA7OwogICAgIHN1bm9zNCopCiAgICAgICB3bD0nLVFvcHRpb24gbGQgJwogICAgICAgOzsKLSAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyogfCBzeXN2NSopCisgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqKQogICAgICAgd2w9Jy1XbCwnCiAgICAgICA7OwogICAgIHN5c3Y0Kk1QKikKICAgICAgIDs7CisgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKICAgICB1bmljb3MqKQogICAgICAgd2w9Jy1XbCwnCiAgICAgICA7OwpAQCAtMTIxLDcgKzE0MSw3IEBACiAgIGVzYWMKIGZpCiAKLSMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTLgorIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIF9MVF9MSU5LRVJfU0hMSUJTLgogCiBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQogaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KQEAgLTEyOSw3ICsxNDksNyBAQAogaGFyZGNvZGVfbWludXNfTD1ubwogCiBjYXNlICIkaG9zdF9vcyIgaW4KLSAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCiAgICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQogICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCiAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KQEAgLTE1NSwyMiArMTc1LDIxIEBACiAgICMgb3B0aW9uIG9mIEdOVSBsZCBpcyBjYWxsZWQgLXJwYXRoLCBub3QgLS1ycGF0aC4KICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwogICBjYXNlICIkaG9zdF9vcyIgaW4KLSAgICBhaXgzKiB8IGFpeDQqIHwgYWl4NSopCisgICAgYWl4WzMtOV0qKQogICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgogICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCiAgICAgICAgIGxkX3NobGlicz1ubwogICAgICAgZmkKICAgICAgIDs7CiAgICAgYW1pZ2FvcyopCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9taW51c19MPXllcwotICAgICAgIyBTYW11ZWwgQS4gRmFsdm8gSUkgPGtjNXRqYUBkb2xwaGluLm9wZW5wcm9qZWN0cy5uZXQ+IHJlcG9ydHMKLSAgICAgICMgdGhhdCB0aGUgc2VtYW50aWNzIG9mIGR5bmFtaWMgbGlicmFyaWVzIG9uIEFtaWdhT1MsIGF0IGxlYXN0IHVwCi0gICAgICAjIHRvIHZlcnNpb24gNCwgaXMgdG8gc2hhcmUgZGF0YSBhbW9uZyBtdWx0aXBsZSBwcm9ncmFtcyBsaW5rZWQKLSAgICAgICMgd2l0aCB0aGUgc2FtZSBkeW5hbWljIGxpYnJhcnkuICBTaW5jZSB0aGlzIGRvZXNuJ3QgbWF0Y2ggdGhlCi0gICAgICAjIGJlaGF2aW9yIG9mIHNoYXJlZCBsaWJyYXJpZXMgb24gb3RoZXIgcGxhdGZvcm1zLCB3ZSBjYW5ub3QgdXNlCi0gICAgICAjIHRoZW0uCi0gICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKyAgICAgICAgcG93ZXJwYykKKyAgICAgICAgICA7OworICAgICAgICBtNjhrKQorICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICAgIDs7CisgICAgICBlc2FjCiAgICAgICA7OwogICAgIGJlb3MqKQogICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCkBAIC0xNzksNyArMTk4LDcgQEAKICAgICAgICAgbGRfc2hsaWJzPW5vCiAgICAgICBmaQogICAgICAgOzsKLSAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQogICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcwogICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKQEAgLTE4OSwxMSArMjA4LDEzIEBACiAgICAgICAgIGxkX3NobGlicz1ubwogICAgICAgZmkKICAgICAgIDs7Ci0gICAgaW50ZXJpeDMqKQorICAgIGhhaWt1KikKKyAgICAgIDs7CisgICAgaW50ZXJpeFszLTldKikKICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubwogICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKICAgICAgIDs7Ci0gICAgbGludXgqKQorICAgIGdudSogfCBsaW51eCogfCB0cGYqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQogICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCiAgICAgICAgIDoKICAgICAgIGVsc2UKQEAgLTI1MSw3ICsyNzIsNyBAQAogICAgICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKICAgICAgIGZpCiAgICAgICA7OwotICAgIGFpeDQqIHwgYWl4NSopCisgICAgYWl4WzQtOV0qKQogICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KICAgICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAogICAgICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KQEAgLTI2MSw3ICsyODIsNyBAQAogICAgICAgICAjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKICAgICAgICAgIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCiAgICAgICAgICMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCi0gICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeDUqKQorICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzIzXXxhaXg0LlsyM10uKnxhaXhbNS05XSopCiAgICAgICAgICAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCiAgICAgICAgICAgICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgogICAgICAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcwpAQCAtMjgwLDcgKzMwMSw3IEBACiAgICAgICAgICAgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCiAgICAgICAgICAgdGhlbgogICAgICAgICAgICAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCi0gICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgICAgICA6CiAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgogICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCkBAIC0zMTYsMTQgKzMzNywxOCBAQAogICAgICAgZmkKICAgICAgIDs7CiAgICAgYW1pZ2FvcyopCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9taW51c19MPXllcwotICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBkaWZmZXJlbnQgc2VtYW50aWNzIG9uIHRoZSBHTlUgbGQgc2VjdGlvbgotICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisgICAgICAgIHBvd2VycGMpCisgICAgICAgICAgOzsKKyAgICAgICAgbTY4aykKKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgICA7OworICAgICAgZXNhYwogICAgICAgOzsKICAgICBic2RpWzQ1XSopCiAgICAgICA7OwotICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCiAgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZwogICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KICAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKQEAgLTMzMywyNCArMzU4LDE1IEBACiAgICAgICA7OwogICAgIGRhcndpbiogfCByaGFwc29keSopCiAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgorICAgICAgaWYgeyBjYXNlICRjY19iYXNlbmFtZSBpbiBpZm9ydCopIHRydWU7OyAqKSB0ZXN0ICIkR0NDIiA9IHllczs7IGVzYWM7IH07IHRoZW4KICAgICAgICAgOgogICAgICAgZWxzZQotICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgIHhsYyopCi0gICAgICAgICAgICA7OwotICAgICAgICAgICopCi0gICAgICAgICAgICBsZF9zaGxpYnM9bm8KLSAgICAgICAgICAgIDs7Ci0gICAgICAgIGVzYWMKKyAgICAgICAgbGRfc2hsaWJzPW5vCiAgICAgICBmaQogICAgICAgOzsKICAgICBkZ3V4KikKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKICAgICAgIDs7Ci0gICAgZnJlZWJzZDEqKQotICAgICAgbGRfc2hsaWJzPW5vCi0gICAgICA7OwogICAgIGZyZWVic2QyLjIqKQogICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJwogICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwpAQCAtMzU5LDcgKzM3NSw3IEBACiAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCiAgICAgICBoYXJkY29kZV9taW51c19MPXllcwogICAgICAgOzsKLSAgICBmcmVlYnNkKiB8IGtmcmVlYnNkKi1nbnUgfCBkcmFnb25mbHkqKQorICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKICAgICAgIDs7CkBAIC00MTEsMTkgKzQyNywyNSBAQAogICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwogICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CiAgICAgICA7OworICAgICpudG8qIHwgKnFueCopCisgICAgICA7OwogICAgIG9wZW5ic2QqKQotICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0gICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICAgIGVsc2UKKyAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgIG9wZW5ic2RbMDFdLiogfCBvcGVuYnNkMi5bMC03XSB8IG9wZW5ic2QyLlswLTddLiopCisgICAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisgICAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICBmaQogICAgICAgZWxzZQotICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KLSAgICAgICAgICBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQotICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJwotICAgICAgICAgICAgOzsKLSAgICAgICAgICAqKQotICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICAgICAgICAgIDs7Ci0gICAgICAgIGVzYWMKKyAgICAgICAgbGRfc2hsaWJzPW5vCiAgICAgICBmaQogICAgICAgOzsKICAgICBvczIqKQpAQCAtNDcxLDcgKzQ5Myw3IEBACiAgICAgICAgIGxkX3NobGlicz15ZXMKICAgICAgIGZpCiAgICAgICA7OwotICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqKQorICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bMDI0XSopCiAgICAgICA7OwogICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCiAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tUiwkbGliZGlyYCcKQEAgLTQ4NywzNCArNTA5LDU4IEBACiBmaQogCiAjIENoZWNrIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcwotIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIEFDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSLgorIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIuCisjIFVubGlrZSBsaWJ0b29sLm00LCBoZXJlIHdlIGRvbid0IGNhcmUgYWJvdXQgX2FsbF8gbmFtZXMgb2YgdGhlIGxpYnJhcnksIGJ1dAorIyBvbmx5IGFib3V0IHRoZSBvbmUgdGhlIGxpbmtlciBmaW5kcyB3aGVuIHBhc3NlZCAtbE5BTUUuIFRoaXMgaXMgdGhlIGxhc3QKKyMgZWxlbWVudCBvZiBsaWJyYXJ5X25hbWVzX3NwZWMgaW4gbGlidG9vbC5tNCwgb3IgcG9zc2libHkgdHdvIG9mIHRoZW0gaWYgdGhlCisjIGxpbmtlciBoYXMgc3BlY2lhbCBzZWFyY2ggcnVsZXMuCitsaWJyYXJ5X25hbWVzX3NwZWM9ICAgICAgIyB0aGUgbGFzdCBlbGVtZW50IG9mIGxpYnJhcnlfbmFtZXNfc3BlYyBpbiBsaWJ0b29sLm00CiBsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJwogY2FzZSAiJGhvc3Rfb3MiIGluCiAgIGFpeDMqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuYScKICAgICA7OwotICBhaXg0KiB8IGFpeDUqKQorICBhaXhbNC05XSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCiAgICAgOzsKICAgYW1pZ2FvcyopCisgICAgY2FzZSAiJGhvc3RfY3B1IiBpbgorICAgICAgcG93ZXJwYyopCisgICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JyA7OworICAgICAgbTY4aykKKyAgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5hJyA7OworICAgIGVzYWMKICAgICA7OwogICBiZW9zKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKICAgICA7OwogICBic2RpWzQ1XSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCiAgICAgOzsKLSAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCiAgICAgc2hyZXh0PS5kbGwKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hICRsaWJuYW1lLmxpYicKICAgICA7OwogICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQogICAgIHNocmV4dD0uZHlsaWIKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKICAgICA7OwogICBkZ3V4KikKLSAgICA7OwotICBmcmVlYnNkMSopCi0gICAgOzsKLSAga2ZyZWVic2QqLWdudSkKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKICAgICA7OwogICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICBmcmVlYnNkWzEyM10qKQorICAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnIDs7CisgICAgICAqKQorICAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcgOzsKKyAgICBlc2FjCiAgICAgOzsKICAgZ251KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBoYWlrdSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCiAgICAgOzsKICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCiAgICAgY2FzZSAkaG9zdF9jcHUgaW4KQEAgLTUyOCwxMCArNTc0LDEzIEBACiAgICAgICAgIHNocmV4dD0uc2wKICAgICAgICAgOzsKICAgICBlc2FjCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCiAgICAgOzsKLSAgaW50ZXJpeDMqKQorICBpbnRlcml4WzMtOV0qKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwogICAgIDs7CiAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCiAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCiAgICAgICBpcml4NSogfCBub25zdG9wdXgqKQogICAgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CkBAIC01NDgsNDEgKzU5Nyw2MiBAQAogICAgIDs7CiAgIGxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCiAgICAgOzsKLSAgbGludXgqKQorICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCiAgICAgOzsKICAga25ldGJzZCotZ251KQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwogICAgIDs7CiAgIG5ldGJzZCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCiAgICAgOzsKICAgbmV3c29zNikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKICAgICA7OwotICBudG8tcW54KikKKyAgKm50byogfCAqcW54KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKICAgICA7OwogICBvcGVuYnNkKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnCiAgICAgOzsKICAgb3MyKikKICAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJwogICAgIHNocmV4dD0uZGxsCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5hJwogICAgIDs7CiAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICByZG9zKikKICAgICA7OwogICBzb2xhcmlzKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKICAgICA7OwogICBzdW5vczQqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcKICAgICA7OwogICBzeXN2NCB8IHN5c3Y0LjMqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwogICAgIDs7CiAgIHN5c3Y0Kk1QKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKICAgICA7OwogICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICB0cGYqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwogICAgIDs7CiAgIHV0czQqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwogICAgIDs7CiBlc2FjCiAKIHNlZF9xdW90ZV9zdWJzdD0ncy9cKFsiYCRcXF1cKS9cXFwxL2cnCiBlc2NhcGVkX3dsPWBlY2hvICJYJHdsIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCiBzaGxpYmV4dD1gZWNobyAiJHNocmV4dCIgfCBzZWQgLWUgJ3MsXlwuLCwnYAorZXNjYXBlZF9saWJuYW1lX3NwZWM9YGVjaG8gIlgkbGlibmFtZV9zcGVjIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCitlc2NhcGVkX2xpYnJhcnlfbmFtZXNfc3BlYz1gZWNobyAiWCRsaWJyYXJ5X25hbWVzX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKIGVzY2FwZWRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz1gZWNobyAiWCRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCiAKIExDX0FMTD1DIHNlZCAtZSAncy9eXChbYS16QS1aMC05X10qXCk9L2FjbF9jdl9cMT0vJyA8PEVPRgpAQCAtNTk2LDYgKzY2NiwxMiBAQAogIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICJzbyIpLgogc2hsaWJleHQ9IiRzaGxpYmV4dCIKIAorIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KK2xpYm5hbWVfc3BlYz0iJGVzY2FwZWRfbGlibmFtZV9zcGVjIgorCisjIExpYnJhcnkgbmFtZXMgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdoZW4gcGFzc2VkIC1sTkFNRS4KK2xpYnJhcnlfbmFtZXNfc3BlYz0iJGVzY2FwZWRfbGlicmFyeV9uYW1lc19zcGVjIgorCiAjIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KICMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiRlc2NhcGVkX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiCmRpZmYgLS1naXQgYS9idWlsZC1hdXgvY29uZmlnLnN1YiBiL2J1aWxkLWF1eC9jb25maWcuc3ViCmluZGV4IDFjMzY2ZGYuLjhkZjU1MTEgMTAwNzU1Ci0tLSBhL2J1aWxkLWF1eC9jb25maWcuc3ViCisrKyBiL2J1aWxkLWF1eC9jb25maWcuc3ViCkBAIC0xLDkgKzEsMTAgQEAKICMhIC9iaW4vc2gKICMgQ29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIHN1YnJvdXRpbmUgc2NyaXB0LgogIyAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKLSMgICAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsCisjICAgMjAxMSwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotdGltZXN0YW1wPScyMDA1LTA3LTA4JwordGltZXN0YW1wPScyMDEyLTEyLTA2JwogCiAjIFRoaXMgZmlsZSBpcyAoaW4gcHJpbmNpcGxlKSBjb21tb24gdG8gQUxMIEdOVSBzb2Z0d2FyZS4KICMgVGhlIHByZXNlbmNlIG9mIGEgbWFjaGluZSBpbiB0aGlzIGZpbGUgc3VnZ2VzdHMgdGhhdCBTT01FIEdOVSBzb2Z0d2FyZQpAQCAtMjAsOSArMjEsNyBAQAogIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogIwogIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotIyAwMjExMC0xMzAxLCBVU0EuCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAjCiAjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKICMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCkBAIC0zMSwxMyArMzAsMTYgQEAKIAogCiAjIFBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiAgU3VibWl0IGEgY29udGV4dAotIyBkaWZmIGFuZCBhIHByb3Blcmx5IGZvcm1hdHRlZCBDaGFuZ2VMb2cgZW50cnkuCisjIGRpZmYgYW5kIGEgcHJvcGVybHkgZm9ybWF0dGVkIEdOVSBDaGFuZ2VMb2cgZW50cnkuCiAjCiAjIENvbmZpZ3VyYXRpb24gc3Vicm91dGluZSB0byB2YWxpZGF0ZSBhbmQgY2Fub25pY2FsaXplIGEgY29uZmlndXJhdGlvbiB0eXBlLgogIyBTdXBwbHkgdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uIHR5cGUgYXMgYW4gYXJndW1lbnQuCiAjIElmIGl0IGlzIGludmFsaWQsIHdlIHByaW50IGFuIGVycm9yIG1lc3NhZ2Ugb24gc3RkZXJyIGFuZCBleGl0IHdpdGggY29kZSAxLgogIyBPdGhlcndpc2UsIHdlIHByaW50IHRoZSBjYW5vbmljYWwgY29uZmlnIHR5cGUgb24gc3Rkb3V0IGFuZCBzdWNjZWVkLgogCisjIFlvdSBjYW4gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIHNjcmlwdCBmcm9tOgorIyBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLnN1YjtoYj1IRUFECisKICMgVGhpcyBmaWxlIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBzYW1lIGZvciBhbGwgR05VIHBhY2thZ2VzCiAjIGFuZCByZWNvZ25pemUgYWxsIHRoZSBDUFUgdHlwZXMsIHN5c3RlbSB0eXBlcyBhbmQgYWxpYXNlcwogIyB0aGF0IGFyZSBtZWFuaW5nZnVsIHdpdGggKmFueSogR05VIHNvZnR3YXJlLgpAQCAtNzEsNyArNzMsOCBAQAogdmVyc2lvbj0iXAogR05VIGNvbmZpZy5zdWIgKCR0aW1lc3RhbXApCiAKLUNvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNQorQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMgogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCkBAIC0xMTksMTEgKzEyMiwxOCBAQAogIyBIZXJlIHdlIG11c3QgcmVjb2duaXplIGFsbCB0aGUgdmFsaWQgS0VSTkVMLU9TIGNvbWJpbmF0aW9ucy4KIG1heWJlX29zPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMi8nYAogY2FzZSAkbWF5YmVfb3MgaW4KLSAgbnRvLXFueCogfCBsaW51eC1nbnUqIHwgbGludXgtZGlldGxpYmMgfCBsaW51eC11Y2xpYmMqIHwgdWNsaW51eC11Y2xpYmMqIHwgdWNsaW51eC1nbnUqIHwgXAotICBrZnJlZWJzZCotZ251KiB8IGtuZXRic2QqLWdudSogfCBuZXRic2QqLWdudSogfCBzdG9ybS1jaGFvcyogfCBvczItZW14KiB8IHJ0bWstbm92YSopCisgIG50by1xbngqIHwgbGludXgtZ251KiB8IGxpbnV4LWFuZHJvaWQqIHwgbGludXgtZGlldGxpYmMgfCBsaW51eC1uZXdsaWIqIHwgXAorICBsaW51eC1tdXNsKiB8IGxpbnV4LXVjbGliYyogfCB1Y2xpbnV4LXVjbGliYyogfCB1Y2xpbnV4LWdudSogfCBrZnJlZWJzZCotZ251KiB8IFwKKyAga25ldGJzZCotZ251KiB8IG5ldGJzZCotZ251KiB8IFwKKyAga29wZW5zb2xhcmlzKi1nbnUqIHwgXAorICBzdG9ybS1jaGFvcyogfCBvczItZW14KiB8IHJ0bWstbm92YSopCiAgICAgb3M9LSRtYXliZV9vcwogICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wxLydgCiAgICAgOzsKKyAgYW5kcm9pZC1saW51eCkKKyAgICBvcz0tbGludXgtYW5kcm9pZAorICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wxLydgLXVua25vd24KKyAgICA7OwogICAqKQogICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvLVteLV0qJC8vJ2AKICAgICBpZiBbICRiYXNpY19tYWNoaW5lICE9ICQxIF0KQEAgLTE0NiwxMCArMTU2LDEzIEBACiAJLWNvbnZlcmdlbnQqIHwgLW5jciogfCAtbmV3cyB8IC0zMiogfCAtMzYwMCogfCAtMzEwMCogfCAtaGl0YWNoaSogfFwKIAktY1sxMjNdKiB8IC1jb252ZXgqIHwgLXN1biB8IC1jcmRzIHwgLW9tcm9uKiB8IC1kZyB8IC11bHRyYSB8IC10dGkqIHwgXAogCS1oYXJyaXMgfCAtZG9scGhpbiB8IC1oaWdobGV2ZWwgfCAtZ291bGQgfCAtY2JtIHwgLW5zIHwgLW1hc3Njb21wIHwgXAotCS1hcHBsZSB8IC1heGlzIHwgLWtudXRoIHwgLWNyYXkpCisJLWFwcGxlIHwgLWF4aXMgfCAta251dGggfCAtY3JheSB8IC1taWNyb2JsYXplKikKIAkJb3M9CiAJCWJhc2ljX21hY2hpbmU9JDEKIAkJOzsKKwktYmx1ZWdlbmUqKQorCQlvcz0tY25rCisJCTs7CiAJLXNpbSB8IC1jaXNjbyB8IC1va2kgfCAtd2VjIHwgLXdpbmJvbmQpCiAJCW9zPQogCQliYXNpY19tYWNoaW5lPSQxCkBAIC0xNjQsMTMgKzE3NywxNyBAQAogCQlvcz0tY2hvcnVzb3MKIAkJYmFzaWNfbWFjaGluZT0kMQogCQk7OwotIAktY2hvcnVzcmRiKQotIAkJb3M9LWNob3J1c3JkYgorCS1jaG9ydXNyZGIpCisJCW9zPS1jaG9ydXNyZGIKIAkJYmFzaWNfbWFjaGluZT0kMQotIAkJOzsKKwkJOzsKIAktaGl1eCopCiAJCW9zPS1oaXV4d2UyCiAJCTs7CisJLXNjbzYpCisJCW9zPS1zY281djYKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OwogCS1zY281KQogCQlvcz0tc2NvMy4ydjUKIAkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYApAQCAtMTg3LDYgKzIwNCwxMCBAQAogCQkjIERvbid0IGZvcmdldCB2ZXJzaW9uIGlmIGl0IGlzIDMuMnY0IG9yIG5ld2VyLgogCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCiAJCTs7CisJLXNjbzV2NiopCisJCSMgRG9uJ3QgZm9yZ2V0IHZlcnNpb24gaWYgaXQgaXMgMy4ydjQgb3IgbmV3ZXIuCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKIAktc2NvKikKIAkJb3M9LXNjbzMuMnYyCiAJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKQEAgLTIwNCw2ICsyMjUsMTIgQEAKIAktaXNjKikKIAkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAogCQk7OworCS1seW54KjE3OCkKKwkJb3M9LWx5bnhvczE3OAorCQk7OworCS1seW54KjUpCisJCW9zPS1seW54b3M1CisJCTs7CiAJLWx5bngqKQogCQlvcz0tbHlueG9zCiAJCTs7CkBAIC0yMjgsMjMgKzI1NSwzNCBAQAogCSMgU29tZSBhcmUgb21pdHRlZCBoZXJlIGJlY2F1c2UgdGhleSBoYXZlIHNwZWNpYWwgbWVhbmluZ3MgYmVsb3cuCiAJMTc1MGEgfCA1ODAgXAogCXwgYTI5ayBcCisJfCBhYXJjaDY0IHwgYWFyY2g2NF9iZSBcCiAJfCBhbHBoYSB8IGFscGhhZXZbNC04XSB8IGFscGhhZXY1NiB8IGFscGhhZXY2Wzc4XSB8IGFscGhhcGNhNVs2N10gXAogCXwgYWxwaGE2NCB8IGFscGhhNjRldls0LThdIHwgYWxwaGE2NGV2NTYgfCBhbHBoYTY0ZXY2Wzc4XSB8IGFscGhhNjRwY2E1WzY3XSBcCiAJfCBhbTMzXzIuMCBcCi0JfCBhcmMgfCBhcm0gfCBhcm1bYmxdZSB8IGFybWVbbGJdIHwgYXJtdlsyMzQ1XSB8IGFybXZbMzQ1XVtsYl0gfCBhdnIgXAorCXwgYXJjIFwKKwl8IGFybSB8IGFybVtibF1lIHwgYXJtZVtsYl0gfCBhcm12WzItOF0gfCBhcm12WzMtOF1bbGJdIHwgYXJtdjdbYXJtXSBcCisJfCBhdnIgfCBhdnIzMiBcCisJfCBiZTMyIHwgYmU2NCBcCiAJfCBiZmluIFwKIAl8IGM0eCB8IGNsaXBwZXIgXAogCXwgZDEwdiB8IGQzMHYgfCBkbHggfCBkc3AxNnh4IFwKLQl8IGZyMzAgfCBmcnYgXAorCXwgZXBpcGhhbnkgXAorCXwgZmlkbyB8IGZyMzAgfCBmcnYgXAogCXwgaDgzMDAgfCBoODUwMCB8IGhwcGEgfCBocHBhMS5bMDFdIHwgaHBwYTIuMCB8IGhwcGEyLjBbbnddIHwgaHBwYTY0IFwKKwl8IGhleGFnb24gXAogCXwgaTM3MCB8IGk4NjAgfCBpOTYwIHwgaWE2NCBcCiAJfCBpcDJrIHwgaXEyMDAwIFwKLQl8IG0zMnIgfCBtMzJybGUgfCBtNjgwMDAgfCBtNjhrIHwgbTg4ayB8IG1heHEgfCBtY29yZSBcCisJfCBsZTMyIHwgbGU2NCBcCisJfCBsbTMyIFwKKwl8IG0zMmMgfCBtMzJyIHwgbTMycmxlIHwgbTY4MDAwIHwgbTY4ayB8IG04OGsgXAorCXwgbWF4cSB8IG1iIHwgbWljcm9ibGF6ZSB8IG1pY3JvYmxhemVlbCB8IG1jb3JlIHwgbWVwIHwgbWV0YWcgXAogCXwgbWlwcyB8IG1pcHNiZSB8IG1pcHNlYiB8IG1pcHNlbCB8IG1pcHNsZSBcCiAJfCBtaXBzMTYgXAogCXwgbWlwczY0IHwgbWlwczY0ZWwgXAotCXwgbWlwczY0dnIgfCBtaXBzNjR2cmVsIFwKKwl8IG1pcHM2NG9jdGVvbiB8IG1pcHM2NG9jdGVvbmVsIFwKIAl8IG1pcHM2NG9yaW9uIHwgbWlwczY0b3Jpb25lbCBcCisJfCBtaXBzNjRyNTkwMCB8IG1pcHM2NHI1OTAwZWwgXAorCXwgbWlwczY0dnIgfCBtaXBzNjR2cmVsIFwKIAl8IG1pcHM2NHZyNDEwMCB8IG1pcHM2NHZyNDEwMGVsIFwKIAl8IG1pcHM2NHZyNDMwMCB8IG1pcHM2NHZyNDMwMGVsIFwKIAl8IG1pcHM2NHZyNTAwMCB8IG1pcHM2NHZyNTAwMGVsIFwKQEAgLTI1NywzNSArMjk1LDY1IEBACiAJfCBtaXBzaXNhNjRzcjcxayB8IG1pcHNpc2E2NHNyNzFrZWwgXAogCXwgbWlwc3R4MzkgfCBtaXBzdHgzOWVsIFwKIAl8IG1uMTAyMDAgfCBtbjEwMzAwIFwKLQl8IG1zMSBcCisJfCBtb3hpZSBcCisJfCBtdCBcCiAJfCBtc3A0MzAgXAorCXwgbmRzMzIgfCBuZHMzMmxlIHwgbmRzMzJiZSBcCisJfCBuaW9zIHwgbmlvczIgXAogCXwgbnMxNmsgfCBuczMyayBcCisJfCBvcGVuOCBcCiAJfCBvcjMyIFwKIAl8IHBkcDEwIHwgcGRwMTEgfCBwaiB8IHBqbCBcCi0JfCBwb3dlcnBjIHwgcG93ZXJwYzY0IHwgcG93ZXJwYzY0bGUgfCBwb3dlcnBjbGUgfCBwcGNiZSBcCisJfCBwb3dlcnBjIHwgcG93ZXJwYzY0IHwgcG93ZXJwYzY0bGUgfCBwb3dlcnBjbGUgXAogCXwgcHlyYW1pZCBcCi0JfCBzaCB8IHNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzIzXWUgfCBzaFszNF1lYiB8IHNoYmUgfCBzaGxlIHwgc2hbMTIzNF1sZSB8IHNoM2VsZSBcCisJfCBybDc4IHwgcnggXAorCXwgc2NvcmUgXAorCXwgc2ggfCBzaFsxMjM0XSB8IHNoWzI0XWEgfCBzaFsyNF1hZWIgfCBzaFsyM11lIHwgc2hbMzRdZWIgfCBzaGViIHwgc2hiZSB8IHNobGUgfCBzaFsxMjM0XWxlIHwgc2gzZWxlIFwKIAl8IHNoNjQgfCBzaDY0bGUgXAotCXwgc3BhcmMgfCBzcGFyYzY0IHwgc3BhcmM2NGIgfCBzcGFyYzg2eCB8IHNwYXJjbGV0IHwgc3BhcmNsaXRlIFwKLQl8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIgXAotCXwgc3Ryb25nYXJtIFwKLQl8IHRhaG9lIHwgdGh1bWIgfCB0aWM0eCB8IHRpYzgwIHwgdHJvbiBcCi0JfCB2ODUwIHwgdjg1MGUgXAorCXwgc3BhcmMgfCBzcGFyYzY0IHwgc3BhcmM2NGIgfCBzcGFyYzY0diB8IHNwYXJjODZ4IHwgc3BhcmNsZXQgfCBzcGFyY2xpdGUgXAorCXwgc3BhcmN2OCB8IHNwYXJjdjkgfCBzcGFyY3Y5YiB8IHNwYXJjdjl2IFwKKwl8IHNwdSBcCisJfCB0YWhvZSB8IHRpYzR4IHwgdGljNTR4IHwgdGljNTV4IHwgdGljNnggfCB0aWM4MCB8IHRyb24gXAorCXwgdWJpY29tMzIgXAorCXwgdjg1MCB8IHY4NTBlIHwgdjg1MGUxIHwgdjg1MGUyIHwgdjg1MGVzIHwgdjg1MGUydjMgXAogCXwgd2UzMmsgXAotCXwgeDg2IHwgeHNjYWxlIHwgeHNjYWxlZVtibF0gfCB4c3Rvcm15MTYgfCB4dGVuc2EgXAotCXwgejhrKQorCXwgeDg2IHwgeGMxNnggfCB4c3Rvcm15MTYgfCB4dGVuc2EgXAorCXwgejhrIHwgejgwKQogCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KIAkJOzsKLQltMzJjKQotCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwljNTR4KQorCQliYXNpY19tYWNoaW5lPXRpYzU0eC11bmtub3duCiAJCTs7Ci0JbTY4MTEgfCBtNjhoYzExIHwgbTY4MTIgfCBtNjhoYzEyKQotCQkjIE1vdG9yb2xhIDY4SEMxMS8xMi4KKwljNTV4KQorCQliYXNpY19tYWNoaW5lPXRpYzU1eC11bmtub3duCisJCTs7CisJYzZ4KQorCQliYXNpY19tYWNoaW5lPXRpYzZ4LXVua25vd24KKwkJOzsKKwltNjgxMSB8IG02OGhjMTEgfCBtNjgxMiB8IG02OGhjMTIgfCBtNjhoY3MxMnggfCBwaWNvY2hpcCkKIAkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCiAJCW9zPS1ub25lCiAJCTs7CiAJbTg4MTEwIHwgbTY4MFsxMjM0Nl0wIHwgbTY4Mz8yIHwgbTY4MzYwIHwgbTUyMDAgfCB2NzAgfCB3NjUgfCB6OGspCiAJCTs7CisJbXMxKQorCQliYXNpY19tYWNoaW5lPW10LXVua25vd24KKwkJOzsKKworCXN0cm9uZ2FybSB8IHRodW1iIHwgeHNjYWxlKQorCQliYXNpY19tYWNoaW5lPWFybS11bmtub3duCisJCTs7CisJeGdhdGUpCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQlvcz0tbm9uZQorCQk7OworCXhzY2FsZWViKQorCQliYXNpY19tYWNoaW5lPWFybWViLXVua25vd24KKwkJOzsKKworCXhzY2FsZWVsKQorCQliYXNpY19tYWNoaW5lPWFybWVsLXVua25vd24KKwkJOzsKIAogCSMgV2UgdXNlIGBwYycgcmF0aGVyIHRoYW4gYHVua25vd24nCiAJIyBiZWNhdXNlICgxKSB0aGF0J3Mgd2hhdCB0aGV5IG5vcm1hbGx5IGFyZSwgYW5kCkBAIC0zMDEsMjkgKzM2OSwzNyBAQAogCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aCBjb21wYW55IG5hbWUuCiAJNTgwLSogXAogCXwgYTI5ay0qIFwKKwl8IGFhcmNoNjQtKiB8IGFhcmNoNjRfYmUtKiBcCiAJfCBhbHBoYS0qIHwgYWxwaGFldls0LThdLSogfCBhbHBoYWV2NTYtKiB8IGFscGhhZXY2Wzc4XS0qIFwKIAl8IGFscGhhNjQtKiB8IGFscGhhNjRldls0LThdLSogfCBhbHBoYTY0ZXY1Ni0qIHwgYWxwaGE2NGV2Nls3OF0tKiBcCiAJfCBhbHBoYXBjYTVbNjddLSogfCBhbHBoYTY0cGNhNVs2N10tKiB8IGFyYy0qIFwKIAl8IGFybS0qICB8IGFybWJlLSogfCBhcm1sZS0qIHwgYXJtZWItKiB8IGFybXYqLSogXAotCXwgYXZyLSogXAorCXwgYXZyLSogfCBhdnIzMi0qIFwKKwl8IGJlMzItKiB8IGJlNjQtKiBcCiAJfCBiZmluLSogfCBiczIwMDAtKiBcCi0JfCBjWzEyM10qIHwgYzMwLSogfCBbY2p0XTkwLSogfCBjNHgtKiB8IGM1NHgtKiB8IGM1NXgtKiB8IGM2eC0qIFwKKwl8IGNbMTIzXSogfCBjMzAtKiB8IFtjanRdOTAtKiB8IGM0eC0qIFwKIAl8IGNsaXBwZXItKiB8IGNyYXludi0qIHwgY3lkcmEtKiBcCiAJfCBkMTB2LSogfCBkMzB2LSogfCBkbHgtKiBcCiAJfCBlbHhzaS0qIFwKLQl8IGYzMFswMV0tKiB8IGY3MDAtKiB8IGZyMzAtKiB8IGZydi0qIHwgZng4MC0qIFwKKwl8IGYzMFswMV0tKiB8IGY3MDAtKiB8IGZpZG8tKiB8IGZyMzAtKiB8IGZydi0qIHwgZng4MC0qIFwKIAl8IGg4MzAwLSogfCBoODUwMC0qIFwKIAl8IGhwcGEtKiB8IGhwcGExLlswMV0tKiB8IGhwcGEyLjAtKiB8IGhwcGEyLjBbbnddLSogfCBocHBhNjQtKiBcCisJfCBoZXhhZ29uLSogXAogCXwgaSo4Ni0qIHwgaTg2MC0qIHwgaTk2MC0qIHwgaWE2NC0qIFwKIAl8IGlwMmstKiB8IGlxMjAwMC0qIFwKLQl8IG0zMnItKiB8IG0zMnJsZS0qIFwKKwl8IGxlMzItKiB8IGxlNjQtKiBcCisJfCBsbTMyLSogXAorCXwgbTMyYy0qIHwgbTMyci0qIHwgbTMycmxlLSogXAogCXwgbTY4MDAwLSogfCBtNjgwWzAxMjM0Nl0wLSogfCBtNjgzNjAtKiB8IG02ODM/Mi0qIHwgbTY4ay0qIFwKLQl8IG04ODExMC0qIHwgbTg4ay0qIHwgbWF4cS0qIHwgbWNvcmUtKiBcCisJfCBtODgxMTAtKiB8IG04OGstKiB8IG1heHEtKiB8IG1jb3JlLSogfCBtZXRhZy0qIFwKKwl8IG1pY3JvYmxhemUtKiB8IG1pY3JvYmxhemVlbC0qIFwKIAl8IG1pcHMtKiB8IG1pcHNiZS0qIHwgbWlwc2ViLSogfCBtaXBzZWwtKiB8IG1pcHNsZS0qIFwKIAl8IG1pcHMxNi0qIFwKIAl8IG1pcHM2NC0qIHwgbWlwczY0ZWwtKiBcCi0JfCBtaXBzNjR2ci0qIHwgbWlwczY0dnJlbC0qIFwKKwl8IG1pcHM2NG9jdGVvbi0qIHwgbWlwczY0b2N0ZW9uZWwtKiBcCiAJfCBtaXBzNjRvcmlvbi0qIHwgbWlwczY0b3Jpb25lbC0qIFwKKwl8IG1pcHM2NHI1OTAwLSogfCBtaXBzNjRyNTkwMGVsLSogXAorCXwgbWlwczY0dnItKiB8IG1pcHM2NHZyZWwtKiBcCiAJfCBtaXBzNjR2cjQxMDAtKiB8IG1pcHM2NHZyNDEwMGVsLSogXAogCXwgbWlwczY0dnI0MzAwLSogfCBtaXBzNjR2cjQzMDBlbC0qIFwKIAl8IG1pcHM2NHZyNTAwMC0qIHwgbWlwczY0dnI1MDAwZWwtKiBcCkBAIC0zMzYsMzAgKzQxMiwzOCBAQAogCXwgbWlwc2lzYTY0c3I3MWstKiB8IG1pcHNpc2E2NHNyNzFrZWwtKiBcCiAJfCBtaXBzdHgzOS0qIHwgbWlwc3R4MzllbC0qIFwKIAl8IG1taXgtKiBcCi0JfCBtczEtKiBcCisJfCBtdC0qIFwKIAl8IG1zcDQzMC0qIFwKKwl8IG5kczMyLSogfCBuZHMzMmxlLSogfCBuZHMzMmJlLSogXAorCXwgbmlvcy0qIHwgbmlvczItKiBcCiAJfCBub25lLSogfCBucDEtKiB8IG5zMTZrLSogfCBuczMyay0qIFwKKwl8IG9wZW44LSogXAogCXwgb3Jpb24tKiBcCiAJfCBwZHAxMC0qIHwgcGRwMTEtKiB8IHBqLSogfCBwamwtKiB8IHBuLSogfCBwb3dlci0qIFwKLQl8IHBvd2VycGMtKiB8IHBvd2VycGM2NC0qIHwgcG93ZXJwYzY0bGUtKiB8IHBvd2VycGNsZS0qIHwgcHBjYmUtKiBcCisJfCBwb3dlcnBjLSogfCBwb3dlcnBjNjQtKiB8IHBvd2VycGM2NGxlLSogfCBwb3dlcnBjbGUtKiBcCiAJfCBweXJhbWlkLSogXAotCXwgcm9tcC0qIHwgcnM2MDAwLSogXAotCXwgc2gtKiB8IHNoWzEyMzRdLSogfCBzaFsyNF1hLSogfCBzaFsyM11lLSogfCBzaFszNF1lYi0qIHwgc2hiZS0qIFwKKwl8IHJsNzgtKiB8IHJvbXAtKiB8IHJzNjAwMC0qIHwgcngtKiBcCisJfCBzaC0qIHwgc2hbMTIzNF0tKiB8IHNoWzI0XWEtKiB8IHNoWzI0XWFlYi0qIHwgc2hbMjNdZS0qIHwgc2hbMzRdZWItKiB8IHNoZWItKiB8IHNoYmUtKiBcCiAJfCBzaGxlLSogfCBzaFsxMjM0XWxlLSogfCBzaDNlbGUtKiB8IHNoNjQtKiB8IHNoNjRsZS0qIFwKLQl8IHNwYXJjLSogfCBzcGFyYzY0LSogfCBzcGFyYzY0Yi0qIHwgc3BhcmM4NngtKiB8IHNwYXJjbGV0LSogXAorCXwgc3BhcmMtKiB8IHNwYXJjNjQtKiB8IHNwYXJjNjRiLSogfCBzcGFyYzY0di0qIHwgc3BhcmM4NngtKiB8IHNwYXJjbGV0LSogXAogCXwgc3BhcmNsaXRlLSogXAotCXwgc3BhcmN2OC0qIHwgc3BhcmN2OS0qIHwgc3BhcmN2OWItKiB8IHN0cm9uZ2FybS0qIHwgc3YxLSogfCBzeD8tKiBcCi0JfCB0YWhvZS0qIHwgdGh1bWItKiBcCisJfCBzcGFyY3Y4LSogfCBzcGFyY3Y5LSogfCBzcGFyY3Y5Yi0qIHwgc3BhcmN2OXYtKiB8IHN2MS0qIHwgc3g/LSogXAorCXwgdGFob2UtKiBcCiAJfCB0aWMzMC0qIHwgdGljNHgtKiB8IHRpYzU0eC0qIHwgdGljNTV4LSogfCB0aWM2eC0qIHwgdGljODAtKiBcCisJfCB0aWxlKi0qIFwKIAl8IHRyb24tKiBcCi0JfCB2ODUwLSogfCB2ODUwZS0qIHwgdmF4LSogXAorCXwgdWJpY29tMzItKiBcCisJfCB2ODUwLSogfCB2ODUwZS0qIHwgdjg1MGUxLSogfCB2ODUwZXMtKiB8IHY4NTBlMi0qIHwgdjg1MGUydjMtKiBcCisJfCB2YXgtKiBcCiAJfCB3ZTMyay0qIFwKLQl8IHg4Ni0qIHwgeDg2XzY0LSogfCB4cHMxMDAtKiB8IHhzY2FsZS0qIHwgeHNjYWxlZVtibF0tKiBcCi0JfCB4c3Rvcm15MTYtKiB8IHh0ZW5zYS0qIFwKKwl8IHg4Ni0qIHwgeDg2XzY0LSogfCB4YzE2eC0qIHwgeHBzMTAwLSogXAorCXwgeHN0b3JteTE2LSogfCB4dGVuc2EqLSogXAogCXwgeW1wLSogXAotCXwgejhrLSopCisJfCB6OGstKiB8IHo4MC0qKQogCQk7OwotCW0zMmMtKikKKwkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGhvdXQgY29tcGFueSBuYW1lLCB3aXRoIGdsb2IgbWF0Y2guCisJeHRlbnNhKikKKwkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCiAJCTs7CiAJIyBSZWNvZ25pemUgdGhlIHZhcmlvdXMgbWFjaGluZSBuYW1lcyBhbmQgYWxpYXNlcyB3aGljaCBzdGFuZAogCSMgZm9yIGEgQ1BVIHR5cGUgYW5kIGEgY29tcGFueSBhbmQgc29tZXRpbWVzIGV2ZW4gYW4gT1MuCkBAIC0zNzcsNyArNDYxLDcgQEAKIAkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAogCQlvcz0tdWRpCiAJCTs7Ci0gICAgCWFiYWN1cykKKwlhYmFjdXMpCiAJCWJhc2ljX21hY2hpbmU9YWJhY3VzLXVua25vd24KIAkJOzsKIAlhZG9iZTY4aykKQEAgLTQyMyw2ICs1MDcsMTAgQEAKIAkJYmFzaWNfbWFjaGluZT1tNjhrLWFwb2xsbwogCQlvcz0tYnNkCiAJCTs7CisJYXJvcykKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1hcm9zCisJCTs7CiAJYXV4KQogCQliYXNpY19tYWNoaW5lPW02OGstYXBwbGUKIAkJb3M9LWF1eApAQCAtNDMxLDEwICs1MTksMzUgQEAKIAkJYmFzaWNfbWFjaGluZT1uczMyay1zZXF1ZW50CiAJCW9zPS1keW5peAogCQk7OworCWJsYWNrZmluKQorCQliYXNpY19tYWNoaW5lPWJmaW4tdW5rbm93bgorCQlvcz0tbGludXgKKwkJOzsKKwlibGFja2Zpbi0qKQorCQliYXNpY19tYWNoaW5lPWJmaW4tYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJb3M9LWxpbnV4CisJCTs7CisJYmx1ZWdlbmUqKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtaWJtCisJCW9zPS1jbmsKKwkJOzsKKwljNTR4LSopCisJCWJhc2ljX21hY2hpbmU9dGljNTR4LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJYzU1eC0qKQorCQliYXNpY19tYWNoaW5lPXRpYzU1eC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCWM2eC0qKQorCQliYXNpY19tYWNoaW5lPXRpYzZ4LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CiAJYzkwKQogCQliYXNpY19tYWNoaW5lPWM5MC1jcmF5CiAJCW9zPS11bmljb3MKIAkJOzsKKwljZWdjYykKKwkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgorCQlvcz0tY2VnY2MKKwkJOzsKIAljb252ZXgtYzEpCiAJCWJhc2ljX21hY2hpbmU9YzEtY29udmV4CiAJCW9zPS1ic2QKQEAgLTQ2Myw4ICs1NzYsOCBAQAogCQliYXNpY19tYWNoaW5lPWNyYXludi1jcmF5CiAJCW9zPS11bmljb3NtcAogCQk7OwotCWNyMTZjKQotCQliYXNpY19tYWNoaW5lPWNyMTZjLXVua25vd24KKwljcjE2IHwgY3IxNi0qKQorCQliYXNpY19tYWNoaW5lPWNyMTYtdW5rbm93bgogCQlvcz0tZWxmCiAJCTs7CiAJY3JkcyB8IHVub3MpCkBAIC01MDIsNiArNjE1LDEwIEBACiAJCWJhc2ljX21hY2hpbmU9bTg4ay1tb3Rvcm9sYQogCQlvcz0tc3lzdjMKIAkJOzsKKwlkaWNvcykKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCW9zPS1kaWNvcworCQk7OwogCWRqZ3BwKQogCQliYXNpY19tYWNoaW5lPWk1ODYtcGMKIAkJb3M9LW1zZG9zZGpncHAKQEAgLTYxNyw3ICs3MzQsNiBAQAogCWkzNzAtaWJtKiB8IGlibSopCiAJCWJhc2ljX21hY2hpbmU9aTM3MC1pYm0KIAkJOzsKLSMgSSdtIG5vdCBzdXJlIHdoYXQgIlN5c3YzMiIgbWVhbnMuICBTaG91bGQgdGhpcyBiZSBzeXN2My4yPwogCWkqODZ2MzIpCiAJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAogCQlvcz0tc3lzdjMyCkBAIC02NTYsNiArNzcyLDE0IEBACiAJCWJhc2ljX21hY2hpbmU9bTY4ay1pc2kKIAkJb3M9LXN5c3YKIAkJOzsKKwltNjhrbm9tbXUpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1saW51eAorCQk7OworCW02OGtub21tdS0qKQorCQliYXNpY19tYWNoaW5lPW02OGstYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJb3M9LWxpbnV4CisJCTs7CiAJbTg4ay1vbXJvbiopCiAJCWJhc2ljX21hY2hpbmU9bTg4ay1vbXJvbgogCQk7OwpAQCAtNjY3LDEwICs3OTEsMjEgQEAKIAkJYmFzaWNfbWFjaGluZT1uczMyay11dGVrCiAJCW9zPS1zeXN2CiAJCTs7CisJbWljcm9ibGF6ZSopCisJCWJhc2ljX21hY2hpbmU9bWljcm9ibGF6ZS14aWxpbngKKwkJOzsKKwltaW5ndzY0KQorCQliYXNpY19tYWNoaW5lPXg4Nl82NC1wYworCQlvcz0tbWluZ3c2NAorCQk7OwogCW1pbmd3MzIpCiAJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYwogCQlvcz0tbWluZ3czMgogCQk7OworCW1pbmd3MzJjZSkKKwkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgorCQlvcz0tbWluZ3czMmNlCisJCTs7CiAJbWluaWZyYW1lKQogCQliYXNpY19tYWNoaW5lPW02ODAwMC1jb252ZXJnZW50CiAJCTs7CkBAIC02OTYsMTAgKzgzMSwyMSBAQAogCQliYXNpY19tYWNoaW5lPWkzODYtcGMKIAkJb3M9LW1zZG9zCiAJCTs7CisJbXMxLSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgLWUgJ3MvbXMxLS9tdC0vJ2AKKwkJOzsKKwltc3lzKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LW1zeXMKKwkJOzsKIAltdnMpCiAJCWJhc2ljX21hY2hpbmU9aTM3MC1pYm0KIAkJb3M9LW12cwogCQk7OworCW5hY2wpCisJCWJhc2ljX21hY2hpbmU9bGUzMi11bmtub3duCisJCW9zPS1uYWNsCisJCTs7CiAJbmNyMzAwMCkKIAkJYmFzaWNfbWFjaGluZT1pNDg2LW5jcgogCQlvcz0tc3lzdjQKQEAgLTc2NCw2ICs5MTAsMTIgQEAKIAlucDEpCiAJCWJhc2ljX21hY2hpbmU9bnAxLWdvdWxkCiAJCTs7CisJbmVvLXRhbmRlbSkKKwkJYmFzaWNfbWFjaGluZT1uZW8tdGFuZGVtCisJCTs7CisJbnNlLXRhbmRlbSkKKwkJYmFzaWNfbWFjaGluZT1uc2UtdGFuZGVtCisJCTs7CiAJbnNyLXRhbmRlbSkKIAkJYmFzaWNfbWFjaGluZT1uc3ItdGFuZGVtCiAJCTs7CkBAIC03OTQsNiArOTQ2LDE0IEBACiAJCWJhc2ljX21hY2hpbmU9aTg2MC1pbnRlbAogCQlvcz0tb3NmCiAJCTs7CisJcGFyaXNjKQorCQliYXNpY19tYWNoaW5lPWhwcGEtdW5rbm93bgorCQlvcz0tbGludXgKKwkJOzsKKwlwYXJpc2MtKikKKwkJYmFzaWNfbWFjaGluZT1ocHBhLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCW9zPS1saW51eAorCQk7OwogCXBiZCkKIAkJYmFzaWNfbWFjaGluZT1zcGFyYy10dGkKIAkJOzsKQEAgLTgwMyw2ICs5NjMsMTIgQEAKIAlwYzUzMiB8IHBjNTMyLSopCiAJCWJhc2ljX21hY2hpbmU9bnMzMmstcGM1MzIKIAkJOzsKKwlwYzk4KQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJOzsKKwlwYzk4LSopCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OwogCXBlbnRpdW0gfCBwNSB8IGs1IHwgazYgfCBuZXhnZW4gfCB2aWFjMykKIAkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCiAJCTs7CkBAIC04MzIsOSArOTk4LDEwIEBACiAJCTs7CiAJcG93ZXIpCWJhc2ljX21hY2hpbmU9cG93ZXItaWJtCiAJCTs7Ci0JcHBjKQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgorCXBwYyB8IHBwY2JlKQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgogCQk7OwotCXBwYy0qKQliYXNpY19tYWNoaW5lPXBvd2VycGMtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwlwcGMtKiB8IHBwY2JlLSopCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAogCQk7OwogCXBwY2xlIHwgcG93ZXJwY2xpdHRsZSB8IHBwYy1sZSB8IHBvd2VycGMtbGl0dGxlKQogCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS11bmtub3duCkBAIC04NTksNiArMTAyNiwxNCBAQAogCQliYXNpY19tYWNoaW5lPWk1ODYtdW5rbm93bgogCQlvcz0tcHczMgogCQk7OworCXJkb3MgfCByZG9zNjQpCisJCWJhc2ljX21hY2hpbmU9eDg2XzY0LXBjCisJCW9zPS1yZG9zCisJCTs7CisJcmRvczMyKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LXJkb3MKKwkJOzsKIAlyb202OGspCiAJCWJhc2ljX21hY2hpbmU9bTY4ay1yb202OGsKIAkJb3M9LWNvZmYKQEAgLTg4NSw2ICsxMDYwLDEwIEBACiAJc2IxZWwpCiAJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTY0c2IxZWwtdW5rbm93bgogCQk7OworCXNkZSkKKwkJYmFzaWNfbWFjaGluZT1taXBzaXNhMzItc2RlCisJCW9zPS1lbGYKKwkJOzsKIAlzZWkpCiAJCWJhc2ljX21hY2hpbmU9bWlwcy1zZWkKIAkJb3M9LXNlaXV4CkBAIC04OTYsNiArMTA3NSw5IEBACiAJCWJhc2ljX21hY2hpbmU9c2gtaGl0YWNoaQogCQlvcz0taG1zCiAJCTs7CisJc2g1ZWwpCisJCWJhc2ljX21hY2hpbmU9c2g1bGUtdW5rbm93bgorCQk7OwogCXNoNjQpCiAJCWJhc2ljX21hY2hpbmU9c2g2NC11bmtub3duCiAJCTs7CkBAIC05MTcsNiArMTA5OSw5IEBACiAJCWJhc2ljX21hY2hpbmU9aTg2MC1zdHJhdHVzCiAJCW9zPS1zeXN2NAogCQk7OworCXN0cm9uZ2FybS0qIHwgdGh1bWItKikKKwkJYmFzaWNfbWFjaGluZT1hcm0tYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKIAlzdW4yKQogCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KIAkJOzsKQEAgLTk3MywxNyArMTE1OCw5IEBACiAJCWJhc2ljX21hY2hpbmU9dDkwLWNyYXkKIAkJb3M9LXVuaWNvcwogCQk7OwotCXRpYzU0eCB8IGM1NHgqKQotCQliYXNpY19tYWNoaW5lPXRpYzU0eC11bmtub3duCi0JCW9zPS1jb2ZmCi0JCTs7Ci0JdGljNTV4IHwgYzU1eCopCi0JCWJhc2ljX21hY2hpbmU9dGljNTV4LXVua25vd24KLQkJb3M9LWNvZmYKLQkJOzsKLQl0aWM2eCB8IGM2eCopCi0JCWJhc2ljX21hY2hpbmU9dGljNngtdW5rbm93bgotCQlvcz0tY29mZgorCXRpbGUqKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJb3M9LWxpbnV4LWdudQogCQk7OwogCXR4MzkpCiAJCWJhc2ljX21hY2hpbmU9bWlwc3R4MzktdW5rbm93bgpAQCAtMTA1Miw2ICsxMjI5LDkgQEAKIAl4cHMgfCB4cHMxMDApCiAJCWJhc2ljX21hY2hpbmU9eHBzMTAwLWhvbmV5d2VsbAogCQk7OworCXhzY2FsZS0qIHwgeHNjYWxlZVtibF0tKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eeHNjYWxlL2FybS8nYAorCQk7OwogCXltcCkKIAkJYmFzaWNfbWFjaGluZT15bXAtY3JheQogCQlvcz0tdW5pY29zCkBAIC0xMDYwLDYgKzEyNDAsMTAgQEAKIAkJYmFzaWNfbWFjaGluZT16OGstdW5rbm93bgogCQlvcz0tc2ltCiAJCTs7CisJejgwLSotY29mZikKKwkJYmFzaWNfbWFjaGluZT16ODAtdW5rbm93bgorCQlvcz0tc2ltCisJCTs7CiAJbm9uZSkKIAkJYmFzaWNfbWFjaGluZT1ub25lLW5vbmUKIAkJb3M9LW5vbmUKQEAgLTEwOTgsMTAgKzEyODIsMTAgQEAKIAl3ZTMyaykKIAkJYmFzaWNfbWFjaGluZT13ZTMyay1hdHQKIAkJOzsKLQlzaFsxMjM0XSB8IHNoWzI0XWEgfCBzaFszNF1lYiB8IHNoWzEyMzRdbGUgfCBzaFsyM11lbGUpCisJc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMjRdYWViIHwgc2hbMzRdZWIgfCBzaFsxMjM0XWxlIHwgc2hbMjNdZWxlKQogCQliYXNpY19tYWNoaW5lPXNoLXVua25vd24KIAkJOzsKLQlzcGFyYyB8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIpCisJc3BhcmMgfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYpCiAJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCiAJCTs7CiAJY3lkcmEpCkBAIC0xMTQ1LDkgKzEzMjksMTIgQEAKIGlmIFsgeCIkb3MiICE9IHgiIiBdCiB0aGVuCiBjYXNlICRvcyBpbgotICAgICAgICAjIEZpcnN0IG1hdGNoIHNvbWUgc3lzdGVtIHR5cGUgYWxpYXNlcwotICAgICAgICAjIHRoYXQgbWlnaHQgZ2V0IGNvbmZ1c2VkIHdpdGggdmFsaWQgc3lzdGVtIHR5cGVzLgorCSMgRmlyc3QgbWF0Y2ggc29tZSBzeXN0ZW0gdHlwZSBhbGlhc2VzCisJIyB0aGF0IG1pZ2h0IGdldCBjb25mdXNlZCB3aXRoIHZhbGlkIHN5c3RlbSB0eXBlcy4KIAkjIC1zb2xhcmlzKiBpcyBhIGJhc2ljIHN5c3RlbSB0eXBlLCB3aXRoIHRoaXMgb25lIGV4Y2VwdGlvbi4KKwktYXVyb3JhdXgpCisJCW9zPS1hdXJvcmF1eAorCQk7OwogCS1zb2xhcmlzMSB8IC1zb2xhcmlzMS4qKQogCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c29sYXJpczF8c3Vub3M0fCdgCiAJCTs7CkBAIC0xMTY4LDI3ICsxMzU1LDMxIEBACiAJIyBFYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOIEEgKiwgdG8gbWF0Y2ggYSB2ZXJzaW9uIG51bWJlci4KIAkjIC1zeXN2KiBpcyBub3QgaGVyZSBiZWNhdXNlIGl0IGNvbWVzIGxhdGVyLCBhZnRlciBzeXN2cjQuCiAJLWdudSogfCAtYnNkKiB8IC1tYWNoKiB8IC1taW5peCogfCAtZ2VuaXgqIHwgLXVsdHJpeCogfCAtaXJpeCogXAotCSAgICAgIHwgLSp2bXMqIHwgLXNjbyogfCAtZXNpeCogfCAtaXNjKiB8IC1haXgqIHwgLXN1bm9zIHwgLXN1bm9zWzM0XSpcCi0JICAgICAgfCAtaHB1eCogfCAtdW5vcyogfCAtb3NmKiB8IC1sdW5hKiB8IC1kZ3V4KiB8IC1zb2xhcmlzKiB8IC1zeW0qIFwKKwkgICAgICB8IC0qdm1zKiB8IC1zY28qIHwgLWVzaXgqIHwgLWlzYyogfCAtYWl4KiB8IC1jbmsqIHwgLXN1bm9zIHwgLXN1bm9zWzM0XSpcCisJICAgICAgfCAtaHB1eCogfCAtdW5vcyogfCAtb3NmKiB8IC1sdW5hKiB8IC1kZ3V4KiB8IC1hdXJvcmF1eCogfCAtc29sYXJpcyogXAorCSAgICAgIHwgLXN5bSogfCAta29wZW5zb2xhcmlzKiBcCiAJICAgICAgfCAtYW1pZ2FvcyogfCAtYW1pZ2Fkb3MqIHwgLW1zZG9zKiB8IC1uZXdzb3MqIHwgLXVuaWNvcyogfCAtYW9mKiBcCi0JICAgICAgfCAtYW9zKiBcCisJICAgICAgfCAtYW9zKiB8IC1hcm9zKiBcCiAJICAgICAgfCAtbmluZHkqIHwgLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC1lYm1vbiogfCAtaG1zKiB8IC1tdnMqIFwKIAkgICAgICB8IC1jbGl4KiB8IC1yaXNjb3MqIHwgLXVuaXBsdXMqIHwgLWlyaXMqIHwgLXJ0dSogfCAteGVuaXgqIFwKLQkgICAgICB8IC1oaXV4KiB8IC0zODZic2QqIHwgLWtuZXRic2QqIHwgLW1pcmJzZCogfCAtbmV0YnNkKiB8IC1vcGVuYnNkKiBcCisJICAgICAgfCAtaGl1eCogfCAtMzg2YnNkKiB8IC1rbmV0YnNkKiB8IC1taXJic2QqIHwgLW5ldGJzZCogXAorCSAgICAgIHwgLWJpdHJpZyogfCAtb3BlbmJzZCogfCAtc29saWRic2QqIFwKIAkgICAgICB8IC1la2tvYnNkKiB8IC1rZnJlZWJzZCogfCAtZnJlZWJzZCogfCAtcmlzY2l4KiB8IC1seW54b3MqIFwKIAkgICAgICB8IC1ib3N4KiB8IC1uZXh0c3RlcCogfCAtY3h1eCogfCAtYW91dCogfCAtZWxmKiB8IC1vYWJpKiBcCiAJICAgICAgfCAtcHR4KiB8IC1jb2ZmKiB8IC1lY29mZiogfCAtd2lubnQqIHwgLWRvbWFpbiogfCAtdnN0YSogXAogCSAgICAgIHwgLXVkaSogfCAtZWFiaSogfCAtbGl0ZXMqIHwgLWllZWUqIHwgLWdvMzIqIHwgLWF1eCogXAotCSAgICAgIHwgLWNob3J1c29zKiB8IC1jaG9ydXNyZGIqIFwKLQkgICAgICB8IC1jeWd3aW4qIHwgLXBlKiB8IC1wc29zKiB8IC1tb3NzKiB8IC1wcm9lbGYqIHwgLXJ0ZW1zKiBcCi0JICAgICAgfCAtbWluZ3czMiogfCAtbGludXgtZ251KiB8IC1saW51eC11Y2xpYmMqIHwgLXV4cHYqIHwgLWJlb3MqIHwgLW1wZWl4KiB8IC11ZGsqIFwKKwkgICAgICB8IC1jaG9ydXNvcyogfCAtY2hvcnVzcmRiKiB8IC1jZWdjYyogXAorCSAgICAgIHwgLWN5Z3dpbiogfCAtbXN5cyogfCAtcGUqIHwgLXBzb3MqIHwgLW1vc3MqIHwgLXByb2VsZiogfCAtcnRlbXMqIFwKKwkgICAgICB8IC1taW5ndzMyKiB8IC1taW5ndzY0KiB8IC1saW51eC1nbnUqIHwgLWxpbnV4LWFuZHJvaWQqIFwKKwkgICAgICB8IC1saW51eC1uZXdsaWIqIHwgLWxpbnV4LW11c2wqIHwgLWxpbnV4LXVjbGliYyogXAorCSAgICAgIHwgLXV4cHYqIHwgLWJlb3MqIHwgLW1wZWl4KiB8IC11ZGsqIFwKIAkgICAgICB8IC1pbnRlcml4KiB8IC11d2luKiB8IC1ta3MqIHwgLXJoYXBzb2R5KiB8IC1kYXJ3aW4qIHwgLW9wZW5lZCogXAogCSAgICAgIHwgLW9wZW5zdGVwKiB8IC1vc2tpdCogfCAtY29uaXgqIHwgLXB3MzIqIHwgLW5vbnN0b3B1eCogXAogCSAgICAgIHwgLXN0b3JtLWNoYW9zKiB8IC10b3BzMTAqIHwgLXRlbmV4KiB8IC10b3BzMjAqIHwgLWl0cyogXAogCSAgICAgIHwgLW9zMiogfCAtdm9zKiB8IC1wYWxtb3MqIHwgLXVjbGludXgqIHwgLW51Y2xldXMqIFwKIAkgICAgICB8IC1tb3JwaG9zKiB8IC1zdXBlcnV4KiB8IC1ydG1rKiB8IC1ydG1rLW5vdmEqIHwgLXdpbmRpc3MqIFwKIAkgICAgICB8IC1wb3dlcm1heCogfCAtZG5peCogfCAtbng2IHwgLW54NyB8IC1zZWkqIHwgLWRyYWdvbmZseSogXAotCSAgICAgIHwgLXNreW9zKiB8IC1oYWlrdSopCisJICAgICAgfCAtc2t5b3MqIHwgLWhhaWt1KiB8IC1yZG9zKiB8IC10b3BwZXJzKiB8IC1kcm9wcyogfCAtZXMqKQogCSMgUmVtZW1iZXIsIGVhY2ggYWx0ZXJuYXRpdmUgTVVTVCBFTkQgSU4gKiwgdG8gbWF0Y2ggYSB2ZXJzaW9uIG51bWJlci4KIAkJOzsKIAktcW54KikKQEAgLTEyMjcsNyArMTQxOCw3IEBACiAJLW9wZW5lZCopCiAJCW9zPS1vcGVuZWRpdGlvbgogCQk7OwotICAgICAgICAtb3M0MDAqKQorCS1vczQwMCopCiAJCW9zPS1vczQwMAogCQk7OwogCS13aW5jZSopCkBAIC0xMjc2LDcgKzE0NjcsNyBAQAogCS1zaW5peCopCiAJCW9zPS1zeXN2NAogCQk7OwotICAgICAgICAtdHBmKikKKwktdHBmKikKIAkJb3M9LXRwZgogCQk7OwogCS10cml0b24qKQpAQCAtMTMxOCw2ICsxNTA5LDExIEBACiAJLXp2bW9lKQogCQlvcz0tenZtb2UKIAkJOzsKKwktZGljb3MqKQorCQlvcz0tZGljb3MKKwkJOzsKKwktbmFjbCopCisJCTs7CiAJLW5vbmUpCiAJCTs7CiAJKikKQEAgLTEzNDAsNiArMTUzNiwxMiBAQAogIyBzeXN0ZW0sIGFuZCB3ZSdsbCBuZXZlciBnZXQgdG8gdGhpcyBwb2ludC4KIAogY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCXNjb3JlLSopCisJCW9zPS1lbGYKKwkJOzsKKwlzcHUtKikKKwkJb3M9LWVsZgorCQk7OwogCSotYWNvcm4pCiAJCW9zPS1yaXNjaXgxLjIKIAkJOzsKQEAgLTEzNDksOSArMTU1MSwyMSBAQAogCWFybSotc2VtaSkKIAkJb3M9LWFvdXQKIAkJOzsKLSAgICBjNHgtKiB8IHRpYzR4LSopCi0gICAgICAgIG9zPS1jb2ZmCi0gICAgICAgIDs7CisJYzR4LSogfCB0aWM0eC0qKQorCQlvcz0tY29mZgorCQk7OworCWhleGFnb24tKikKKwkJb3M9LWVsZgorCQk7OworCXRpYzU0eC0qKQorCQlvcz0tY29mZgorCQk7OworCXRpYzU1eC0qKQorCQlvcz0tY29mZgorCQk7OworCXRpYzZ4LSopCisJCW9zPS1jb2ZmCisJCTs7CiAJIyBUaGlzIG11c3QgY29tZSBiZWZvcmUgdGhlICotZGVjIGVudHJ5LgogCXBkcDEwLSopCiAJCW9zPS10b3BzMjAKQEAgLTEzNzAsMTMgKzE1ODQsMTMgQEAKIAkJOzsKIAltNjgwMDAtc3VuKQogCQlvcz0tc3Vub3MzCi0JCSMgVGhpcyBhbHNvIGV4aXN0cyBpbiB0aGUgY29uZmlndXJlIHByb2dyYW0sIGJ1dCB3YXMgbm90IHRoZQotCQkjIGRlZmF1bHQuCi0JCSMgb3M9LXN1bm9zNAogCQk7OwogCW02OCotY2lzY28pCiAJCW9zPS1hb3V0CiAJCTs7CisJbWVwLSopCisJCW9zPS1lbGYKKwkJOzsKIAltaXBzKi1jaXNjbykKIAkJb3M9LWVsZgogCQk7OwpAQCAtMTQwMSw3ICsxNjE1LDcgQEAKIAkqLWlibSkKIAkJb3M9LWFpeAogCQk7OwotICAgIAkqLWtudXRoKQorCSota251dGgpCiAJCW9zPS1tbWl4d2FyZQogCQk7OwogCSotd2VjKQpAQCAtMTUwNiw3ICsxNzIwLDcgQEAKIAkJCS1zdW5vcyopCiAJCQkJdmVuZG9yPXN1bgogCQkJCTs7Ci0JCQktYWl4KikKKwkJCS1jbmsqfC1haXgqKQogCQkJCXZlbmRvcj1pYm0KIAkJCQk7OwogCQkJLWJlb3MqKQpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2Nyb3NzLW9wdGlvbnMucGwgYi9idWlsZC1hdXgvY3Jvc3Mtb3B0aW9ucy5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NzYyZTI3Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbGQtYXV4L2Nyb3NzLW9wdGlvbnMucGwKQEAgLTAsMCArMSw3OSBAQAorIyEgL3Vzci9iaW4vZW52IHBlcmwKKwordXNlIHdhcm5pbmdzOwordXNlIDUuMDA1OwordXNlIHN0cmljdDsKKworbXkgJW9wdGlvbjsKK215ICVkaXJlY3RpdmU7CitteSAkc2Nhbm5lciA9IGBncmVwIC1pICciJVthLXpdJyAkQVJHVlswXWA7Ciskc2Nhbm5lciA9fiBzLyJcWy1fXF0iLy0vZzsKK3doaWxlICg8U1RESU4+KQoreworICAgIGlmICgvXlxzKiAgICAgICAgICAgICAjIEluaXRpYWwgc3BhY2VzLgorICAgICAgICAoPzooLVx3KSxccyspPyAgICAjICQxOiAkc2hvcnQ6IFBvc3NpYmxlIHNob3J0IG9wdGlvbi4KKyAgICAgICAgKC0tWy1cd10rKSAgICAgICAgIyAkMjogJGxvbmc6ICBMb25nIG9wdGlvbi4KKyAgICAgICAgKFxbPykgICAgICAgICAgICAgIyAkMzogJG9wdDogICAnWycgaWZmIHRoZSBhcmd1bWVudCBpcyBvcHRpb25hbC4KKyAgICAgICAgKD86PShcUyspKT8gICAgICAgIyAkNDogJGFyZzogICBQb3NzaWJsZSBhcmd1bWVudCBuYW1lLgorICAgICAgICBccyAgICAgICAgICAgICAgICAjIFNwYWNlcy4KKyAgICAgICAgL3gpCisgICAgeworCW15ICgkc2hvcnQsICRsb25nLCAkb3B0LCAkYXJnKSA9ICgkMSwgJDIsICQzLCAkNCk7CisJJHNob3J0ID0gJycgaWYgISBkZWZpbmVkICRzaG9ydDsKKwkkc2hvcnQgPSAnLWQnIGlmICRsb25nIGVxICctLWRlZmluZXMnICYmICEgJHNob3J0OworCW15ICRkaXIgPSAnJScgLiBzdWJzdHIoJGxvbmcsIDIpOworCWlmIChpbmRleCAoJHNjYW5uZXIsICJcIiRkaXJcIiIpIDwgMCkKKwl7CisJICBpZiAoJGxvbmcgZXEgJy0tZm9yY2UtZGVmaW5lJykgeyAkZGlyID0gJyVkZWZpbmUnOyB9CisJICBlbHNlIHsgJGRpciA9ICcnOyB9CisJfQorCWlmICgkYXJnKQorCXsKKyAgICAgICAgICAgICMgaWYgJG9wdCwgJGFyZyBjb250YWlucyB0aGUgY2xvc2luZyBdLgorICAgICAgICAgICAgc3Vic3RyICgkYXJnLCAtMSkgPSAnJworICAgICAgICAgICAgICAgIGlmICRvcHQgZXEgJ1snOworCSAgICAkYXJnID1+IHMvXj0vLzsKKyAgICAgICAgICAgICRhcmcgPSBsYyAoJGFyZyk7CisJICAgIG15ICRkaXJfYXJnID0gJGFyZzsKKyAgICAgICAgICAgICMgSWYgdGhlIGFyZ3VtZW50IGlzIGNvbXBpdGUgKGUuZy4sIGZvciAtLWRlZmluZVs9TkFNRVs9VkFMVUVdXSksCisgICAgICAgICAgICAjIHB1dCBlYWNoIHdvcmQgaW4gQHZhciwgdG8gYnVpbGQgQHZhcntuYW1lfVs9QHZhcnt2YWx1ZX1dLCBub3QKKyAgICAgICAgICAgICMgQHZhcntuYW1lWz12YWx1ZV19XS4KKwkgICAgJGFyZyA9fiBzLyhcdyspL1xAdmFyeyQxfS9nOworCSAgICBteSAkbG9uZ19hcmcgPSAiPSRhcmciOworCSAgICBpZiAoJG9wdCBlcSAnWycpIHsKKwkgICAgICAkbG9uZ19hcmcgPSAiWyRsb25nX2FyZ10iOworCSAgICAgICRhcmcgPSAiWyRhcmddIjsKKwkgICAgfQorCSAgICAjIEZvciBhcmd1bWVudHMgb2YgZGlyZWN0aXZlczogdGhpcyBvbmx5IHdvcmtzIGlmIGFsbCBhcmd1bWVudHMKKwkgICAgIyBhcmUgc3RyaW5ncyBhbmQgaGF2ZSB0aGUgc2FtZSBzeW50YXggYXMgb24gdGhlIGNvbW1hbmQgbGluZS4KKwkgICAgaWYgKCRkaXJfYXJnIGVxICduYW1lWz12YWx1ZV0nKQorCSAgICB7CisJCSRkaXJfYXJnID0gJ0B2YXJ7bmFtZX0gWyJAdmFye3ZhbHVlfSJdJzsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJJGRpcl9hcmcgPX4gcy8oXHcrKS9cQHZhcnsiJDEifS9nOworCQkkZGlyX2FyZyA9ICdbJyAuICRkaXJfYXJnIC4gJ10nCisJCSAgICBpZiAkb3B0IGVxICdbJzsKKwkgICAgfQorCSAgICAkbG9uZyA9ICIkbG9uZyRsb25nX2FyZyI7CisJICAgICRzaG9ydCA9ICIkc2hvcnQgJGFyZyIgaWYgJHNob3J0ICYmICRzaG9ydCBuZSAnLWQnOworCSAgICAkZGlyID0gIiRkaXIgJGRpcl9hcmciIGlmICRkaXI7CisJfQorCSRvcHRpb257JGxvbmd9ID0gJHNob3J0OworCSRkaXJlY3RpdmV7JGxvbmd9ID0gJGRpcjsKKyAgICB9Cit9CisKK215ICRzZXAgPSAnJzsKK2ZvcmVhY2ggbXkgJGxvbmcgKHNvcnQga2V5cyAlb3B0aW9uKQoreworICAgICMgQXZvaWQgdHJhaWxpbmcgc3BhY2VzLgorICAgIHByaW50ICRzZXA7CisgICAgJHNlcCA9ICJcbiI7CisgICAgcHJpbnQgJ0BpdGVtIEBvcHRpb257JywgJGxvbmcsICJ9XG5cQHRhYiI7CisgICAgcHJpbnQgJyBAb3B0aW9ueycsICRvcHRpb257JGxvbmd9LCAnfScgaWYgJG9wdGlvbnskbG9uZ307CisgICAgcHJpbnQgIlxuXEB0YWIiOworICAgIHByaW50ICcgQGNvZGV7JywgJGRpcmVjdGl2ZXskbG9uZ30sICd9JyBpZiAkZGlyZWN0aXZleyRsb25nfTsKKyAgICBwcmludCAiXG4iOworfQpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2RhcndpbjExLjQuMC52YWxncmluZCBiL2J1aWxkLWF1eC9kYXJ3aW4xMS40LjAudmFsZ3JpbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYzNTVlYgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWxkLWF1eC9kYXJ3aW4xMS40LjAudmFsZ3JpbmQKQEAgLTAsMCArMSw2NCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgVmFsZ3JpbmQgc3VwcHJlc3Npb24gZmlsZSBmb3IgQmlzb24uCisKK3sKKyAgIE1hYyBPUyBYIGluaXRpYWxpemF0aW9uCisgICBNZW1jaGVjazpMZWFrCisgICBmdW46P2FsbG9jKgorICAgLi4uCisgICBmdW46KkltYWdlTG9hZGVyKgorfQorCit7CisgICBNYWMgT1MgWCBpbml0aWFsaXphdGlvbgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOj9hbGxvYyoKKyAgIC4uLgorICAgZnVuOipkeWxkKgorfQorCit7CisgICBNYWMgT1MgWCBpbml0aWFsaXphdGlvbgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOj9hbGxvYyoKKyAgIC4uLgorICAgZnVuOl9fQ0ZJbml0aWFsaXplCit9CisKK3sKKyAgIE1hYyBPUyBYIEkvTyBidWZmZXIKKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjptYWxsb2MKKyAgIGZ1bjpfX3NtYWtlYnVmCisgICBmdW46X19zd3NldHVwCisgICBmdW46X19zZnZ3cml0ZQorICAgZnVuOmZ3cml0ZQorfQorCit7CisgICBNYWMgT1MgWCBJL08gYnVmZmVyCisgICBNZW1jaGVjazpMZWFrCisgICBmdW46bWFsbG9jCisgICBmdW46X19zbWFrZWJ1ZgorICAgZnVuOl9fc3dzZXR1cAorICAgZnVuOl9fc3didWYKKyAgIGZ1bjpwdXRjaGFyCit9CisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2RlcGNvbXAgYi9idWlsZC1hdXgvZGVwY29tcAppbmRleCAwNDcwMWRhLi4zZjAyZjVkIDEwMDc1NQotLS0gYS9idWlsZC1hdXgvZGVwY29tcAorKysgYi9idWlsZC1hdXgvZGVwY29tcApAQCAtMSw5ICsxLDkgQEAKICMhIC9iaW4vc2gKICMgZGVwY29tcCAtIGNvbXBpbGUgYSBwcm9ncmFtIGdlbmVyYXRpbmcgZGVwZW5kZW5jaWVzIGFzIHNpZGUtZWZmZWN0cwogCi1zY3JpcHR2ZXJzaW9uPTIwMDUtMDctMDkuMTEKK3NjcmlwdHZlcnNpb249MjAxMi0xMC0xOC4xMTsgIyBVVEMKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMTk5OS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xNiw5ICsxNiw3IEBACiAjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotIyAwMjExMC0xMzAxLCBVU0EuCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCiAjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKICMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCkBAIC0yOSw5ICsyNyw5IEBACiAKIGNhc2UgJDEgaW4KICAgJycpCi0gICAgIGVjaG8gIiQwOiBObyBjb21tYW5kLiAgVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKLSAgICAgZXhpdCAxOwotICAgICA7OworICAgIGVjaG8gIiQwOiBObyBjb21tYW5kLiAgVHJ5ICckMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgorICAgIGV4aXQgMTsKKyAgICA7OwogICAtaCB8IC0taCopCiAgICAgY2F0IDw8XEVPRgogVXNhZ2U6IGRlcGNvbXAgWy0taGVscF0gWy0tdmVyc2lvbl0gUFJPR1JBTSBbQVJHU10KQEAgLTQxLDExICszOSwxMSBAQAogCiBFbnZpcm9ubWVudCB2YXJpYWJsZXM6CiAgIGRlcG1vZGUgICAgIERlcGVuZGVuY3kgdHJhY2tpbmcgbW9kZS4KLSAgc291cmNlICAgICAgU291cmNlIGZpbGUgcmVhZCBieSBgUFJPR1JBTVMgQVJHUycuCi0gIG9iamVjdCAgICAgIE9iamVjdCBmaWxlIG91dHB1dCBieSBgUFJPR1JBTVMgQVJHUycuCisgIHNvdXJjZSAgICAgIFNvdXJjZSBmaWxlIHJlYWQgYnkgJ1BST0dSQU1TIEFSR1MnLgorICBvYmplY3QgICAgICBPYmplY3QgZmlsZSBvdXRwdXQgYnkgJ1BST0dSQU1TIEFSR1MnLgogICBERVBESVIgICAgICBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgZGVwZW5kZW5jaWVzLgogICBkZXBmaWxlICAgICBEZXBlbmRlbmN5IGZpbGUgdG8gb3V0cHV0LgotICB0bXBkZXBmaWxlICBUZW1wb3JhcnkgZmlsZSB0byB1c2Ugd2hlbiBvdXRwdXRpbmcgZGVwZW5kZW5jaWVzLgorICB0bXBkZXBmaWxlICBUZW1wb3JhcnkgZmlsZSB0byB1c2Ugd2hlbiBvdXRwdXR0aW5nIGRlcGVuZGVuY2llcy4KICAgbGlidG9vbCAgICAgV2hldGhlciBsaWJ0b29sIGlzIHVzZWQgKHllcy9ubykuCiAKIFJlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uCkBAIC01OCw2ICs1Niw2NiBAQAogICAgIDs7CiBlc2FjCiAKKyMgR2V0IHRoZSBkaXJlY3RvcnkgY29tcG9uZW50IG9mIHRoZSBnaXZlbiBwYXRoLCBhbmQgc2F2ZSBpdCBpbiB0aGUKKyMgZ2xvYmFsIHZhcmlhYmxlcyAnJGRpcicuICBOb3RlIHRoYXQgdGhpcyBkaXJlY3RvcnkgY29tcG9uZW50IHdpbGwKKyMgYmUgZWl0aGVyIGVtcHR5IG9yIGVuZGluZyB3aXRoIGEgJy8nIGNoYXJhY3Rlci4gIFRoaXMgaXMgZGVsaWJlcmF0ZS4KK3NldF9kaXJfZnJvbSAoKQoreworICBjYXNlICQxIGluCisgICAgKi8qKSBkaXI9YGVjaG8gIiQxIiB8IHNlZCAtZSAnc3wvW14vXSokfC98J2A7OworICAgICAgKikgZGlyPTs7CisgIGVzYWMKK30KKworIyBHZXQgdGhlIHN1ZmZpeC1zdHJpcHBlZCBiYXNlbmFtZSBvZiB0aGUgZ2l2ZW4gcGF0aCwgYW5kIHNhdmUgaXQgdGhlCisjIGdsb2JhbCB2YXJpYWJsZSAnJGJhc2UnLgorc2V0X2Jhc2VfZnJvbSAoKQoreworICBiYXNlPWBlY2hvICIkMSIgfCBzZWQgLWUgJ3N8Xi4qL3x8JyAtZSAncy9cLlteLl0qJC8vJ2AKK30KKworIyBJZiBubyBkZXBlbmRlbmN5IGZpbGUgd2FzIGFjdHVhbGx5IGNyZWF0ZWQgYnkgdGhlIGNvbXBpbGVyIGludm9jYXRpb24sCisjIHdlIHN0aWxsIGhhdmUgdG8gY3JlYXRlIGEgZHVtbXkgZGVwZmlsZSwgdG8gYXZvaWQgZXJyb3JzIHdpdGggdGhlCisjIE1ha2VmaWxlICJpbmNsdWRlIGJhc2VuYW1lLlBsbyIgc2NoZW1lLgorbWFrZV9kdW1teV9kZXBmaWxlICgpCit7CisgIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCit9CisKKyMgRmFjdG9yIG91dCBzb21lIGNvbW1vbiBwb3N0LXByb2Nlc3Npbmcgb2YgdGhlIGdlbmVyYXRlZCBkZXBmaWxlLgorIyBSZXF1aXJlcyB0aGUgYXV4aWxpYXJ5IGdsb2JhbCB2YXJpYWJsZSAnJHRtcGRlcGZpbGUnIHRvIGJlIHNldC4KK2FpeF9wb3N0X3Byb2Nlc3NfZGVwZmlsZSAoKQoreworICAjIElmIHRoZSBjb21waWxlciBhY3R1YWxseSBtYW5hZ2VkIHRvIHByb2R1Y2UgYSBkZXBlbmRlbmN5IGZpbGUsCisgICMgcG9zdC1wcm9jZXNzIGl0LgorICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KKyAgICAjIEVhY2ggbGluZSBpcyBvZiB0aGUgZm9ybSAnZm9vLm86IGRlcGVuZGVuY3kuaCcuCisgICAgIyBEbyB0d28gcGFzc2VzLCBvbmUgdG8ganVzdCBjaGFuZ2UgdGhlc2UgdG8KKyAgICAjICAgJG9iamVjdDogZGVwZW5kZW5jeS5oCisgICAgIyBhbmQgb25lIHRvIHNpbXBseSBvdXRwdXQKKyAgICAjICAgZGVwZW5kZW5jeS5oOgorICAgICMgd2hpY2ggaXMgbmVlZGVkIHRvIGF2b2lkIHRoZSBkZWxldGVkLWhlYWRlciBwcm9ibGVtLgorICAgIHsgc2VkIC1lICJzLF4uKlwuWyRsb3dlcl0qOiwkb2JqZWN0OiwiIDwgIiR0bXBkZXBmaWxlIgorICAgICAgc2VkIC1lICJzLF4uKlwuWyRsb3dlcl0qOlskdGFiIF0qLCwiIC1lICdzLCQsOiwnIDwgIiR0bXBkZXBmaWxlIgorICAgIH0gPiAiJGRlcGZpbGUiCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICBlbHNlCisgICAgbWFrZV9kdW1teV9kZXBmaWxlCisgIGZpCit9CisKKyMgQSB0YWJ1bGF0aW9uIGNoYXJhY3Rlci4KK3RhYj0nCScKKyMgQSBuZXdsaW5lIGNoYXJhY3Rlci4KK25sPScKKycKKyMgQ2hhcmFjdGVyIHJhbmdlcyBtaWdodCBiZSBwcm9ibGVtYXRpYyBvdXRzaWRlIHRoZSBDIGxvY2FsZS4KKyMgVGhlc2UgZGVmaW5pdGlvbnMgaGVscC4KK3VwcGVyPUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaCitsb3dlcj1hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorZGlnaXRzPTAxMjM0NTY3ODkKK2FscGhhPSR7dXBwZXJ9JHtsb3dlcn0KKwogaWYgdGVzdCAteiAiJGRlcG1vZGUiIHx8IHRlc3QgLXogIiRzb3VyY2UiIHx8IHRlc3QgLXogIiRvYmplY3QiOyB0aGVuCiAgIGVjaG8gImRlcGNvbXA6IFZhcmlhYmxlcyBzb3VyY2UsIG9iamVjdCBhbmQgZGVwbW9kZSBtdXN0IGJlIHNldCIgMT4mMgogICBleGl0IDEKQEAgLTcwLDYgKzEyOCw5IEBACiAKIHJtIC1mICIkdG1wZGVwZmlsZSIKIAorIyBBdm9pZCBpbnRlcmZlcmVuY2VzIGZyb20gdGhlIGVudmlyb25tZW50LgorZ2NjZmxhZz0gZGFzaG1mbGFnPQorCiAjIFNvbWUgbW9kZXMgd29yayBqdXN0IGxpa2Ugb3RoZXIgbW9kZXMsIGJ1dCB1c2UgZGlmZmVyZW50IGZsYWdzLiAgV2UKICMgcGFyYW1ldGVyaXplIGhlcmUsIGJ1dCBzdGlsbCBsaXN0IHRoZSBtb2RlcyBpbiB0aGUgYmlnIGNhc2UgYmVsb3csCiAjIHRvIG1ha2UgZGVwZW5kLm00IGVhc2llciB0byB3cml0ZS4gIE5vdGUgdGhhdCB3ZSAqY2Fubm90KiB1c2UgYSBjYXNlCkBAIC04MSw5ICsxNDIsMzIgQEAKIGZpCiAKIGlmIHRlc3QgIiRkZXBtb2RlIiA9IGRhc2hYbXN0ZG91dDsgdGhlbgotICAgIyBUaGlzIGlzIGp1c3QgbGlrZSBkYXNobXN0ZG91dCB3aXRoIGEgZGlmZmVyZW50IGFyZ3VtZW50LgotICAgZGFzaG1mbGFnPS14TQotICAgZGVwbW9kZT1kYXNobXN0ZG91dAorICAjIFRoaXMgaXMganVzdCBsaWtlIGRhc2htc3Rkb3V0IHdpdGggYSBkaWZmZXJlbnQgYXJndW1lbnQuCisgIGRhc2htZmxhZz0teE0KKyAgZGVwbW9kZT1kYXNobXN0ZG91dAorZmkKKworY3lncGF0aF91PSJjeWdwYXRoIC11IC1mIC0iCitpZiB0ZXN0ICIkZGVwbW9kZSIgPSBtc3ZjbXN5czsgdGhlbgorICAjIFRoaXMgaXMganVzdCBsaWtlIG1zdmlzdWFsY3BwIGJ1dCB3L28gY3lncGF0aCB0cmFuc2xhdGlvbi4KKyAgIyBKdXN0IGNvbnZlcnQgdGhlIGJhY2tzbGFzaC1lc2NhcGVkIGJhY2tzbGFzaGVzIHRvIHNpbmdsZSBmb3J3YXJkCisgICMgc2xhc2hlcyB0byBzYXRpc2Z5IGRlcGVuZC5tNAorICBjeWdwYXRoX3U9J3NlZCBzLFxcXFwsLyxnJworICBkZXBtb2RlPW1zdmlzdWFsY3BwCitmaQorCitpZiB0ZXN0ICIkZGVwbW9kZSIgPSBtc3ZjN21zeXM7IHRoZW4KKyAgIyBUaGlzIGlzIGp1c3QgbGlrZSBtc3ZjNyBidXQgdy9vIGN5Z3BhdGggdHJhbnNsYXRpb24uCisgICMgSnVzdCBjb252ZXJ0IHRoZSBiYWNrc2xhc2gtZXNjYXBlZCBiYWNrc2xhc2hlcyB0byBzaW5nbGUgZm9yd2FyZAorICAjIHNsYXNoZXMgdG8gc2F0aXNmeSBkZXBlbmQubTQKKyAgY3lncGF0aF91PSdzZWQgcyxcXFxcLC8sZycKKyAgZGVwbW9kZT1tc3ZjNworZmkKKworaWYgdGVzdCAiJGRlcG1vZGUiID0geGxjOyB0aGVuCisgICMgSUJNIEMvQysrIENvbXBpbGVycyB4bGMveGxDIGNhbiBvdXRwdXQgZ2NjLWxpa2UgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbi4KKyAgZ2NjZmxhZz0tcW1ha2VkZXA9Z2NjLC1NRgorICBkZXBtb2RlPWdjYwogZmkKIAogY2FzZSAiJGRlcG1vZGUiIGluCkBAIC05MSwxMCArMTc1LDIyIEBACiAjIyBnY2MgMyBpbXBsZW1lbnRzIGRlcGVuZGVuY3kgdHJhY2tpbmcgdGhhdCBkb2VzIGV4YWN0bHkgd2hhdAogIyMgd2Ugd2FudC4gIFlheSEgIE5vdGU6IGZvciBzb21lIHJlYXNvbiBsaWJ0b29sIDEuNCBkb2Vzbid0IGxpa2UKICMjIGl0IGlmIC1NRCAtTVAgY29tZXMgYWZ0ZXIgdGhlIC1NRiBzdHVmZi4gIEhtbS4KLSAgIiRAIiAtTVQgIiRvYmplY3QiIC1NRCAtTVAgLU1GICIkdG1wZGVwZmlsZSIKKyMjIFVuZm9ydHVuYXRlbHksIEZyZWVCU0QgYzg5IGFjY2VwdGFuY2Ugb2YgZmxhZ3MgZGVwZW5kcyB1cG9uCisjIyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50IG9yZGVyOyBzbyBhZGQgdGhlIGZsYWdzIHdoZXJlIHRoZXkKKyMjIGFwcGVhciBpbiBkZXBlbmQyLmFtLiAgTm90ZSB0aGF0IHRoZSBzbG93ZG93biBpbmN1cnJlZCBoZXJlCisjIyBhZmZlY3RzIG9ubHkgY29uZmlndXJlOiBpbiBtYWtlZmlsZXMsICVGQVNUREVQJSBzaG9ydGN1dHMgdGhpcy4KKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgJGFyZyBpbgorICAgIC1jKSBzZXQgZm5vcmQgIiRAIiAtTVQgIiRvYmplY3QiIC1NRCAtTVAgLU1GICIkdG1wZGVwZmlsZSIgIiRhcmciIDs7CisgICAgKikgIHNldCBmbm9yZCAiJEAiICIkYXJnIiA7OworICAgIGVzYWMKKyAgICBzaGlmdCAjIGZub3JkCisgICAgc2hpZnQgIyAkYXJnCisgIGRvbmUKKyAgIiRAIgogICBzdGF0PSQ/Ci0gIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgotICBlbHNlCisgIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KICAgICBybSAtZiAiJHRtcGRlcGZpbGUiCiAgICAgZXhpdCAkc3RhdAogICBmaQpAQCAtMTAyLDEzICsxOTgsMTcgQEAKICAgOzsKIAogZ2NjKQorIyMgTm90ZSB0aGF0IHRoaXMgZG9lc24ndCBqdXN0IGNhdGVyIHRvIG9ic29zZXRlIHByZS0zLnggR0NDIGNvbXBpbGVycy4KKyMjIGJ1dCBhbHNvIHRvIGluLXVzZSBjb21waWxlcnMgbGlrZSBJTUIgeGxjL3hsQyBhbmQgdGhlIEhQIEMgY29tcGlsZXIuCisjIyAoc2VlIHRoZSBjb25kaXRpb25hbCBhc3NpZ25tZW50IHRvICRnY2NmbGFnIGFib3ZlKS4KICMjIFRoZXJlIGFyZSB2YXJpb3VzIHdheXMgdG8gZ2V0IGRlcGVuZGVuY3kgb3V0cHV0IGZyb20gZ2NjLiAgSGVyZSdzCiAjIyB3aHkgd2UgcGljayB0aGlzIHJhdGhlciBvYnNjdXJlIG1ldGhvZDoKICMjIC0gRG9uJ3Qgd2FudCB0byB1c2UgLU1EIGJlY2F1c2Ugd2UnZCBsaWtlIHRoZSBkZXBlbmRlbmNpZXMgdG8gZW5kCiAjIyAgIHVwIGluIGEgc3ViZGlyLiAgSGF2aW5nIHRvIHJlbmFtZSBieSBoYW5kIGlzIHVnbHkuCiAjIyAgIChXZSBtaWdodCBlbmQgdXAgZG9pbmcgdGhpcyBhbnl3YXkgdG8gc3VwcG9ydCBvdGhlciBjb21waWxlcnMuKQogIyMgLSBUaGUgREVQRU5ERU5DSUVTX09VVFBVVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBtYWtlcyBnY2MgYWN0IGxpa2UKLSMjICAgLU1NLCBub3QgLU0gKGRlc3BpdGUgd2hhdCB0aGUgZG9jcyBzYXkpLgorIyMgICAtTU0sIG5vdCAtTSAoZGVzcGl0ZSB3aGF0IHRoZSBkb2NzIHNheSkuICBBbHNvLCBpdCBtaWdodCBub3QgYmUKKyMjICAgc3VwcG9ydGVkIGJ5IHRoZSBvdGhlciBjb21waWxlcnMgd2hpY2ggdXNlIHRoZSAnZ2NjJyBkZXBtb2RlLgogIyMgLSBVc2luZyAtTSBkaXJlY3RseSBtZWFucyBydW5uaW5nIHRoZSBjb21waWxlciB0d2ljZSAoZXZlbiB3b3JzZQogIyMgICB0aGFuIHJlbmFtaW5nKS4KICAgaWYgdGVzdCAteiAiJGdjY2ZsYWciOyB0aGVuCkBAIC0xMTYsMzEgKzIxNiwzMSBAQAogICBmaQogICAiJEAiIC1XcCwiJGdjY2ZsYWckdG1wZGVwZmlsZSIKICAgc3RhdD0kPwotICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKLSAgZWxzZQorICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCiAgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgogICAgIGV4aXQgJHN0YXQKICAgZmkKICAgcm0gLWYgIiRkZXBmaWxlIgogICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgotICBhbHBoYT1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0jIyBUaGUgc2Vjb25kIC1lIGV4cHJlc3Npb24gaGFuZGxlcyBET1Mtc3R5bGUgZmlsZSBuYW1lcyB3aXRoIGRyaXZlIGxldHRlcnMuCisgICMgVGhlIHNlY29uZCAtZSBleHByZXNzaW9uIGhhbmRsZXMgRE9TLXN0eWxlIGZpbGUgbmFtZXMgd2l0aCBkcml2ZQorICAjIGxldHRlcnMuCiAgIHNlZCAtZSAncy9eW146XSo6IC8gLycgXAogICAgICAgLWUgJ3MvXlsnJGFscGhhJ106XC9bXjpdKjogLyAvJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgotIyMgVGhpcyBuZXh0IHBpZWNlIG9mIG1hZ2ljIGF2b2lkcyB0aGUgYGRlbGV0ZWQgaGVhZGVyIGZpbGUnIHByb2JsZW0uCisjIyBUaGlzIG5leHQgcGllY2Ugb2YgbWFnaWMgYXZvaWRzIHRoZSAiZGVsZXRlZCBoZWFkZXIgZmlsZSIgcHJvYmxlbS4KICMjIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2hlbiBhIGhlYWRlciBmaWxlIHdoaWNoIGFwcGVhcnMgaW4gYSAuUCBmaWxlCiAjIyBpcyBkZWxldGVkLCB0aGUgZGVwZW5kZW5jeSBjYXVzZXMgbWFrZSB0byBkaWUgKGJlY2F1c2UgdGhlcmUgaXMKICMjIHR5cGljYWxseSBubyB3YXkgdG8gcmVidWlsZCB0aGUgaGVhZGVyKS4gIFdlIGF2b2lkIHRoaXMgYnkgYWRkaW5nCiAjIyBkdW1teSBkZXBlbmRlbmNpZXMgZm9yIGVhY2ggaGVhZGVyIGZpbGUuICBUb28gYmFkIGdjYyBkb2Vzbid0IGRvCiAjIyB0aGlzIGZvciB1cyBkaXJlY3RseS4KLSAgdHIgJyAnICcKLScgPCAiJHRtcGRlcGZpbGUiIHwKLSMjIFNvbWUgdmVyc2lvbnMgb2YgZ2NjIHB1dCBhIHNwYWNlIGJlZm9yZSB0aGUgYDonLiAgT24gdGhlIHRoZW9yeQorIyMgU29tZSB2ZXJzaW9ucyBvZiBnY2MgcHV0IGEgc3BhY2UgYmVmb3JlIHRoZSAnOicuICBPbiB0aGUgdGhlb3J5CiAjIyB0aGF0IHRoZSBzcGFjZSBtZWFucyBzb21ldGhpbmcsIHdlIGFkZCBhIHNwYWNlIHRvIHRoZSBvdXRwdXQgYXMKLSMjIHdlbGwuCisjIyB3ZWxsLiAgaHAgZGVwbW9kZSBhbHNvIGFkZHMgdGhhdCBzcGFjZSwgYnV0IGFsc28gcHJlZml4ZXMgdGhlIFZQQVRICisjIyB0byB0aGUgb2JqZWN0LiAgVGFrZSBjYXJlIHRvIG5vdCByZXBlYXQgaXQgaW4gdGhlIG91dHB1dC4KICMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCiAjIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgotICAgIHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICB0ciAnICcgIiRubCIgPCAiJHRtcGRlcGZpbGUiIFwKKyAgICB8IHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgInN8Liokb2JqZWN0JHx8IiAtZSAnLzokL2QnIFwKKyAgICB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgogICBybSAtZiAiJHRtcGRlcGZpbGUiCiAgIDs7CiAKQEAgLTE1OCw4ICsyNTgsNyBAQAogICAgICIkQCIgLU1EdXBkYXRlICIkdG1wZGVwZmlsZSIKICAgZmkKICAgc3RhdD0kPwotICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKLSAgZWxzZQorICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCiAgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgogICAgIGV4aXQgJHN0YXQKICAgZmkKQEAgLTE2Nyw5OSArMjY2LDE1NiBAQAogCiAgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbiAgIyB5ZXMsIHRoZSBzb3VyY2VmaWxlIGRlcGVuZCBvbiBvdGhlciBmaWxlcwogICAgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCi0KICAgICAjIENsaXAgb2ZmIHRoZSBpbml0aWFsIGVsZW1lbnQgKHRoZSBkZXBlbmRlbnQpLiAgRG9uJ3QgdHJ5IHRvIGJlCiAgICAgIyBjbGV2ZXIgYW5kIHJlcGxhY2UgdGhpcyB3aXRoIHNlZCBjb2RlLCBhcyBJUklYIHNlZCB3b24ndCBoYW5kbGUKICAgICAjIGxpbmVzIHdpdGggbW9yZSB0aGFuIGEgZml4ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgKDQwOTYgaW4KICAgICAjIElSSVggNi4yIHNlZCwgODE5MiBpbiBJUklYIDYuNSkuICBXZSBhbHNvIHJlbW92ZSBjb21tZW50IGxpbmVzOwotICAgICMgdGhlIElSSVggY2MgYWRkcyBjb21tZW50cyBsaWtlIGAjOmZlYycgdG8gdGhlIGVuZCBvZiB0aGUKKyAgICAjIHRoZSBJUklYIGNjIGFkZHMgY29tbWVudHMgbGlrZSAnIzpmZWMnIHRvIHRoZSBlbmQgb2YgdGhlCiAgICAgIyBkZXBlbmRlbmN5IGxpbmUuCi0gICAgdHIgJyAnICcKLScgPCAiJHRtcGRlcGZpbGUiIFwKLSAgICB8IHNlZCAtZSAncy9eLipcLm86Ly8nIC1lICdzLyMuKiQvLycgLWUgJy9eJC8gZCcgfCBcCi0gICAgdHIgJwotJyAnICcgPj4gJGRlcGZpbGUKLSAgICBlY2hvID4+ICRkZXBmaWxlCi0KKyAgICB0ciAnICcgIiRubCIgPCAiJHRtcGRlcGZpbGUiIFwKKyAgICAgIHwgc2VkIC1lICdzL14uKlwubzovLycgLWUgJ3MvIy4qJC8vJyAtZSAnL14kLyBkJyBcCisgICAgICB8IHRyICIkbmwiICcgJyA+PiAiJGRlcGZpbGUiCisgICAgZWNobyA+PiAiJGRlcGZpbGUiCiAgICAgIyBUaGUgc2Vjb25kIHBhc3MgZ2VuZXJhdGVzIGEgZHVtbXkgZW50cnkgZm9yIGVhY2ggaGVhZGVyIGZpbGUuCi0gICAgdHIgJyAnICcKLScgPCAiJHRtcGRlcGZpbGUiIFwKLSAgIHwgc2VkIC1lICdzL14uKlwubzovLycgLWUgJ3MvIy4qJC8vJyAtZSAnL14kLyBkJyAtZSAncy8kLzovJyBcCi0gICA+PiAkZGVwZmlsZQorICAgIHRyICcgJyAiJG5sIiA8ICIkdG1wZGVwZmlsZSIgXAorICAgICAgfCBzZWQgLWUgJ3MvXi4qXC5vOi8vJyAtZSAncy8jLiokLy8nIC1lICcvXiQvIGQnIC1lICdzLyQvOi8nIFwKKyAgICAgID4+ICIkZGVwZmlsZSIKICAgZWxzZQotICAgICMgVGhlIHNvdXJjZWZpbGUgZG9lcyBub3QgY29udGFpbiBhbnkgZGVwZW5kZW5jaWVzLCBzbyBqdXN0Ci0gICAgIyBzdG9yZSBhIGR1bW15IGNvbW1lbnQgbGluZSwgdG8gYXZvaWQgZXJyb3JzIHdpdGggdGhlIE1ha2VmaWxlCi0gICAgIyAiaW5jbHVkZSBiYXNlbmFtZS5QbG8iIHNjaGVtZS4KLSAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgorICAgIG1ha2VfZHVtbXlfZGVwZmlsZQogICBmaQogICBybSAtZiAiJHRtcGRlcGZpbGUiCiAgIDs7CiAKK3hsYykKKyAgIyBUaGlzIGNhc2UgZXhpc3RzIG9ubHkgdG8gbGV0IGRlcGVuZC5tNCBkbyBpdHMgd29yay4gIEl0IHdvcmtzIGJ5CisgICMgbG9va2luZyBhdCB0aGUgdGV4dCBvZiB0aGlzIHNjcmlwdC4gIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHJ1biwKKyAgIyBzaW5jZSBpdCBpcyBjaGVja2VkIGZvciBhYm92ZS4KKyAgZXhpdCAxCisgIDs7CisKIGFpeCkKICAgIyBUaGUgQyBmb3IgQUlYIENvbXBpbGVyIHVzZXMgLU0gYW5kIG91dHB1dHMgdGhlIGRlcGVuZGVuY2llcwogICAjIGluIGEgLnUgZmlsZS4gIEluIG9sZGVyIHZlcnNpb25zLCB0aGlzIGZpbGUgYWx3YXlzIGxpdmVzIGluIHRoZQotICAjIGN1cnJlbnQgZGlyZWN0b3J5LiAgQWxzbywgdGhlIEFJWCBjb21waWxlciBwdXRzIGAkb2JqZWN0OicgYXQgdGhlCisgICMgY3VycmVudCBkaXJlY3RvcnkuICBBbHNvLCB0aGUgQUlYIGNvbXBpbGVyIHB1dHMgJyRvYmplY3Q6JyBhdCB0aGUKICAgIyBzdGFydCBvZiBlYWNoIGxpbmU7ICRvYmplY3QgZG9lc24ndCBoYXZlIGRpcmVjdG9yeSBpbmZvcm1hdGlvbi4KICAgIyBWZXJzaW9uIDYgdXNlcyB0aGUgZGlyZWN0b3J5IGluIGJvdGggY2FzZXMuCi0gIHN0cmlwcGVkPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAncy9cKC4qXClcLi4qJC9cMS8nYAotICB0bXBkZXBmaWxlPSIkc3RyaXBwZWQudSIKKyAgc2V0X2Rpcl9mcm9tICIkb2JqZWN0IgorICBzZXRfYmFzZV9mcm9tICIkb2JqZWN0IgogICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2UudQorICAgIHRtcGRlcGZpbGUyPSRiYXNlLnUKKyAgICB0bXBkZXBmaWxlMz0kZGlyLmxpYnMvJGJhc2UudQogICAgICIkQCIgLVdjLC1NCiAgIGVsc2UKKyAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2UudQorICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS51CisgICAgdG1wZGVwZmlsZTM9JGRpciRiYXNlLnUKICAgICAiJEAiIC1NCiAgIGZpCiAgIHN0YXQ9JD8KLQotICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4gOgotICBlbHNlCi0gICAgc3RyaXBwZWQ9YGVjaG8gIiRzdHJpcHBlZCIgfCBzZWQgJ3MsXi4qLywsJ2AKLSAgICB0bXBkZXBmaWxlPSIkc3RyaXBwZWQudSIKLSAgZmkKLQotICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKLSAgZWxzZQotICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgorICAgIHJtIC1mICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiCiAgICAgZXhpdCAkc3RhdAogICBmaQogCi0gIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbgotICAgIG91dG5hbWU9IiRzdHJpcHBlZC5vIgotICAgICMgRWFjaCBsaW5lIGlzIG9mIHRoZSBmb3JtIGBmb28ubzogZGVwZW5kZW50LmgnLgotICAgICMgRG8gdHdvIHBhc3Nlcywgb25lIHRvIGp1c3QgY2hhbmdlIHRoZXNlIHRvCi0gICAgIyBgJG9iamVjdDogZGVwZW5kZW50LmgnIGFuZCBvbmUgdG8gc2ltcGx5IGBkZXBlbmRlbnQuaDonLgotICAgIHNlZCAtZSAicyxeJG91dG5hbWU6LCRvYmplY3QgOiwiIDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKLSAgICBzZWQgLWUgInMsXiRvdXRuYW1lOiBcKC4qXCkkLFwxOiwiIDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCi0gIGVsc2UKLSAgICAjIFRoZSBzb3VyY2VmaWxlIGRvZXMgbm90IGNvbnRhaW4gYW55IGRlcGVuZGVuY2llcywgc28ganVzdAotICAgICMgc3RvcmUgYSBkdW1teSBjb21tZW50IGxpbmUsIHRvIGF2b2lkIGVycm9ycyB3aXRoIHRoZSBNYWtlZmlsZQotICAgICMgImluY2x1ZGUgYmFzZW5hbWUuUGxvIiBzY2hlbWUuCi0gICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKKyAgZm9yIHRtcGRlcGZpbGUgaW4gIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIKKyAgZG8KKyAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKKyAgZG9uZQorICBhaXhfcG9zdF9wcm9jZXNzX2RlcGZpbGUKKyAgOzsKKwordGNjKQorICAjIHRjYyAoVGlueSBDIENvbXBpbGVyKSB1bmRlcnN0YW5kICctTUQgLU1GIGZpbGUnIHNpbmNlIHZlcnNpb24gMC45LjI2CisgICMgRklYTUU6IFRoYXQgdmVyc2lvbiBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhdCB0aGUgbW9tZW50IG9mIHdyaXRpbmcuCisgICMgICAgICAgIE1ha2UgdGhhdCB0aGlzIHN0YXRlbWVudCByZW1haW5zIHRydWUgYWxzbyBmb3Igc3RhYmxlLCByZWxlYXNlZAorICAjICAgICAgICB2ZXJzaW9ucy4KKyAgIyBJdCB3aWxsIHdyYXAgbGluZXMgKGRvZXNuJ3QgbWF0dGVyIHdoZXRoZXIgbG9uZyBvciBzaG9ydCkgd2l0aCBhCisgICMgdHJhaWxpbmcgJ1wnLCBhcyBpbjoKKyAgIworICAjICAgZm9vLm8gOiBcCisgICMgICAgZm9vLmMgXAorICAjICAgIGZvby5oIFwKKyAgIworICAjIEl0IHdpbGwgcHV0IGEgdHJhaWxpbmcgJ1wnIGV2ZW4gb24gdGhlIGxhc3QgbGluZSwgYW5kIHdpbGwgdXNlIGxlYWRpbmcKKyAgIyBzcGFjZXMgcmF0aGVyIHRoYW4gbGVhZGluZyB0YWJzIChhdCBsZWFzdCBzaW5jZSBpdHMgY29tbWl0IDAzOTRjYWY3CisgICMgIkVtaXQgc3BhY2VzIGZvciAtTUQiKS4KKyAgIiRAIiAtTUQgLU1GICIkdG1wZGVwZmlsZSIKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKICAgZmkKKyAgcm0gLWYgIiRkZXBmaWxlIgorICAjIEVhY2ggbm9uLWVtcHR5IGxpbmUgaXMgb2YgdGhlIGZvcm0gJ2Zvby5vIDogXCcgb3IgJyBkZXAuaCBcJy4KKyAgIyBXZSBoYXZlIHRvIGNoYW5nZSBsaW5lcyBvZiB0aGUgZmlyc3Qga2luZCB0byAnJG9iamVjdDogXCcuCisgIHNlZCAtZSAic3wuKjp8JG9iamVjdCA6fCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAjIEFuZCBmb3IgZWFjaCBsaW5lIG9mIHRoZSBzZWNvbmQga2luZCwgd2UgaGF2ZSB0byBlbWl0IGEgJ2RlcC5oOicKKyAgIyBkdW1teSBkZXBlbmRlbmN5LCB0byBhdm9pZCB0aGUgZGVsZXRlZC1oZWFkZXIgcHJvYmxlbS4KKyAgc2VkIC1uIC1lICdzfF4gICpcKC4qXCkgKlxcJHxcMTp8cCcgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKICAgcm0gLWYgIiR0bXBkZXBmaWxlIgogICA7OwogCi1pY2MpCi0gICMgSW50ZWwncyBDIGNvbXBpbGVyIHVuZGVyc3RhbmRzIGAtTUQgLU1GIGZpbGUnLiAgSG93ZXZlciBvbgotICAjICAgIGljYyAtTUQgLU1GIGZvby5kIC1jIC1vIHN1Yi9mb28ubyBzdWIvZm9vLmMKLSAgIyBJQ0MgNy4wIHdpbGwgZmlsbCBmb28uZCB3aXRoIHNvbWV0aGluZyBsaWtlCi0gICMgICAgZm9vLm86IHN1Yi9mb28uYwotICAjICAgIGZvby5vOiBzdWIvZm9vLmgKLSAgIyB3aGljaCBpcyB3cm9uZy4gIFdlIHdhbnQ6Ci0gICMgICAgc3ViL2Zvby5vOiBzdWIvZm9vLmMKLSAgIyAgICBzdWIvZm9vLm86IHN1Yi9mb28uaAotICAjICAgIHN1Yi9mb28uYzoKLSAgIyAgICBzdWIvZm9vLmg6Ci0gICMgSUNDIDcuMSB3aWxsIG91dHB1dAorIyMgVGhlIG9yZGVyIG9mIHRoaXMgb3B0aW9uIGluIHRoZSBjYXNlIHN0YXRlbWVudCBpcyBpbXBvcnRhbnQsIHNpbmNlIHRoZQorIyMgc2hlbGwgY29kZSBpbiBjb25maWd1cmUgd2lsbCB0cnkgZWFjaCBvZiB0aGVzZSBmb3JtYXRzIGluIHRoZSBvcmRlcgorIyMgbGlzdGVkIGluIHRoaXMgZmlsZS4gIEEgcGxhaW4gJy1NRCcgb3B0aW9uIHdvdWxkIGJlIHVuZGVyc3Rvb2QgYnkgbWFueQorIyMgY29tcGlsZXJzLCBzbyB3ZSBtdXN0IGVuc3VyZSB0aGlzIGNvbWVzIGFmdGVyIHRoZSBnY2MgYW5kIGljYyBvcHRpb25zLgorcGdjYykKKyAgIyBQb3J0bGFuZCdzIEMgY29tcGlsZXIgdW5kZXJzdGFuZHMgJy1NRCcuCisgICMgV2lsbCBhbHdheXMgb3V0cHV0IGRlcHMgdG8gJ2ZpbGUuZCcgd2hlcmUgZmlsZSBpcyB0aGUgcm9vdCBuYW1lIG9mIHRoZQorICAjIHNvdXJjZSBmaWxlIHVuZGVyIGNvbXBpbGF0aW9uLCBldmVuIGlmIGZpbGUgcmVzaWRlcyBpbiBhIHN1YmRpcmVjdG9yeS4KKyAgIyBUaGUgb2JqZWN0IGZpbGUgbmFtZSBkb2VzIG5vdCBhZmZlY3QgdGhlIG5hbWUgb2YgdGhlICcuZCcgZmlsZS4KKyAgIyBwZ2NjIDEwLjIgd2lsbCBvdXRwdXQKICAgIyAgICBmb28ubzogc3ViL2Zvby5jIHN1Yi9mb28uaAotICAjIGFuZCB3aWxsIHdyYXAgbG9uZyBsaW5lcyB1c2luZyBcIDoKKyAgIyBhbmQgd2lsbCB3cmFwIGxvbmcgbGluZXMgdXNpbmcgJ1wnIDoKICAgIyAgICBmb28ubzogc3ViL2Zvby5jIC4uLiBcCiAgICMgICAgIHN1Yi9mb28uaCAuLi4gXAogICAjICAgICAuLi4KKyAgc2V0X2Rpcl9mcm9tICIkb2JqZWN0IgorICAjIFVzZSB0aGUgc291cmNlLCBub3QgdGhlIG9iamVjdCwgdG8gZGV0ZXJtaW5lIHRoZSBiYXNlIG5hbWUsIHNpbmNlCisgICMgdGhhdCdzIHNhZGx5IHdoYXQgcGdjYyB3aWxsIGRvIHRvby4KKyAgc2V0X2Jhc2VfZnJvbSAiJHNvdXJjZSIKKyAgdG1wZGVwZmlsZT0kYmFzZS5kCiAKLSAgIiRAIiAtTUQgLU1GICIkdG1wZGVwZmlsZSIKLSAgc3RhdD0kPwotICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKLSAgZWxzZQorICAjIEZvciBwcm9qZWN0cyB0aGF0IGJ1aWxkIHRoZSBzYW1lIHNvdXJjZSBmaWxlIHR3aWNlIGludG8gZGlmZmVyZW50IG9iamVjdAorICAjIGZpbGVzLCB0aGUgcGdjYyBhcHByb2FjaCBvZiB1c2luZyB0aGUgKnNvdXJjZSogZmlsZSByb290IG5hbWUgY2FuIGNhdXNlCisgICMgcHJvYmxlbXMgaW4gcGFyYWxsZWwgYnVpbGRzLiAgVXNlIGEgbG9ja2luZyBzdHJhdGVneSB0byBhdm9pZCBzdG9tcGluZyBvbgorICAjIHRoZSBzYW1lICR0bXBkZXBmaWxlLgorICBsb2NrZGlyPSRiYXNlLmQtbG9jaworICB0cmFwICIKKyAgICBlY2hvICckMDogY2F1Z2h0IHNpZ25hbCwgY2xlYW5pbmcgdXAuLi4nID4mMgorICAgIHJtZGlyICckbG9ja2RpcicKKyAgICBleGl0IDEKKyAgIiAxIDIgMTMgMTUKKyAgbnVtdHJpZXM9MTAwCisgIGk9JG51bXRyaWVzCisgIHdoaWxlIHRlc3QgJGkgLWd0IDA7IGRvCisgICAgIyBta2RpciBpcyBhIHBvcnRhYmxlIHRlc3QtYW5kLXNldC4KKyAgICBpZiBta2RpciAiJGxvY2tkaXIiIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICAjIFRoaXMgcHJvY2VzcyBhY3F1aXJlZCB0aGUgbG9jay4KKyAgICAgICIkQCIgLU1ECisgICAgICBzdGF0PSQ/CisgICAgICAjIFJlbGVhc2UgdGhlIGxvY2suCisgICAgICBybWRpciAiJGxvY2tkaXIiCisgICAgICBicmVhaworICAgIGVsc2UKKyAgICAgICMgSWYgdGhlIGxvY2sgaXMgYmVpbmcgaGVsZCBieSBhIGRpZmZlcmVudCBwcm9jZXNzLCB3YWl0CisgICAgICAjIHVudGlsIHRoZSB3aW5uaW5nIHByb2Nlc3MgaXMgZG9uZSBvciB3ZSB0aW1lb3V0LgorICAgICAgd2hpbGUgdGVzdCAtZCAiJGxvY2tkaXIiICYmIHRlc3QgJGkgLWd0IDA7IGRvCisgICAgICAgIHNsZWVwIDEKKyAgICAgICAgaT1gZXhwciAkaSAtIDFgCisgICAgICBkb25lCisgICAgZmkKKyAgICBpPWBleHByICRpIC0gMWAKKyAgZG9uZQorICB0cmFwIC0gMSAyIDEzIDE1CisgIGlmIHRlc3QgJGkgLWxlIDA7IHRoZW4KKyAgICBlY2hvICIkMDogZmFpbGVkIHRvIGFjcXVpcmUgbG9jayBhZnRlciAkbnVtdHJpZXMgYXR0ZW1wdHMiID4mMgorICAgIGVjaG8gIiQwOiBjaGVjayBsb2NrZGlyICckbG9ja2RpciciID4mMgorICAgIGV4aXQgMQorICBmaQorCisgIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KICAgICBybSAtZiAiJHRtcGRlcGZpbGUiCiAgICAgZXhpdCAkc3RhdAogICBmaQpAQCAtMjcxLDY4ICs0MjcsMTQwIEBACiAgIHNlZCAicyxeW146XSo6LCRvYmplY3QgOiwiIDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKICAgIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgogICAjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCi0gIHNlZCAncyxeW146XSo6IFwoLipcKSQsXDEsO3MvXlxcJC8vOy9eJC9kOy86JC9kJyA8ICIkdG1wZGVwZmlsZSIgfAotICAgIHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBzZWQgJ3MsXlteOl0qOiBcKC4qXCkkLFwxLDtzL15cXCQvLzsvXiQvZDsvOiQvZCcgPCAiJHRtcGRlcGZpbGUiIFwKKyAgICB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgogICBybSAtZiAiJHRtcGRlcGZpbGUiCiAgIDs7CiAKK2hwMikKKyAgIyBUaGUgImhwIiBzdGFuemEgYWJvdmUgZG9lcyBub3Qgd29yayB3aXRoIGFDQyAoQysrKSBhbmQgSFAncyBpYTY0CisgICMgY29tcGlsZXJzLCB3aGljaCBoYXZlIGludGVncmF0ZWQgcHJlcHJvY2Vzc29ycy4gIFRoZSBjb3JyZWN0IG9wdGlvbgorICAjIHRvIHVzZSB3aXRoIHRoZXNlIGlzICtNYWtlZDsgaXQgd3JpdGVzIGRlcGVuZGVuY2llcyB0byBhIGZpbGUgbmFtZWQKKyAgIyAnZm9vLmQnLCB3aGljaCBsYW5kcyBuZXh0IHRvIHRoZSBvYmplY3QgZmlsZSwgd2hlcmV2ZXIgdGhhdAorICAjIGhhcHBlbnMgdG8gYmUuCisgICMgTXVjaCBvZiB0aGlzIGlzIHNpbWlsYXIgdG8gdGhlIHRydTY0IGNhc2U7IHNlZSBjb21tZW50cyB0aGVyZS4KKyAgc2V0X2Rpcl9mcm9tICAiJG9iamVjdCIKKyAgc2V0X2Jhc2VfZnJvbSAiJG9iamVjdCIKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLmQKKyAgICB0bXBkZXBmaWxlMj0kZGlyLmxpYnMvJGJhc2UuZAorICAgICIkQCIgLVdjLCtNYWtlZAorICBlbHNlCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLmQKKyAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2UuZAorICAgICIkQCIgK01ha2VkCisgIGZpCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgorICAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIgorICAgICBleGl0ICRzdGF0CisgIGZpCisKKyAgZm9yIHRtcGRlcGZpbGUgaW4gIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIKKyAgZG8KKyAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKKyAgZG9uZQorICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KKyAgICBzZWQgLWUgInMsXi4qXC5bJGxvd2VyXSo6LCRvYmplY3Q6LCIgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgICAjIEFkZCAnZGVwZW5kZW50Lmg6JyBsaW5lcy4KKyAgICBzZWQgLW5lICcyLCR7CisgICAgICAgICAgICAgICBzL14gKi8vCisgICAgICAgICAgICAgICBzLyBcXCokLy8KKyAgICAgICAgICAgICAgIHMvJC86LworICAgICAgICAgICAgICAgcAorICAgICAgICAgICAgIH0nICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICBlbHNlCisgICAgbWFrZV9kdW1teV9kZXBmaWxlCisgIGZpCisgIHJtIC1mICIkdG1wZGVwZmlsZSIgIiR0bXBkZXBmaWxlMiIKKyAgOzsKKwogdHJ1NjQpCi0gICAjIFRoZSBUcnU2NCBjb21waWxlciB1c2VzIC1NRCB0byBnZW5lcmF0ZSBkZXBlbmRlbmNpZXMgYXMgYSBzaWRlCi0gICAjIGVmZmVjdC4gIGBjYyAtTUQgLW8gZm9vLm8gLi4uJyBwdXRzIHRoZSBkZXBlbmRlbmNpZXMgaW50byBgZm9vLm8uZCcuCi0gICAjIEF0IGxlYXN0IG9uIEFscGhhL1JlZGhhdCA2LjEsIENvbXBhcSBDQ0MgVjYuMi01MDQgc2VlbXMgdG8gcHV0Ci0gICAjIGRlcGVuZGVuY2llcyBpbiBgZm9vLmQnIGluc3RlYWQsIHNvIHdlIGNoZWNrIGZvciB0aGF0IHRvby4KLSAgICMgU3ViZGlyZWN0b3JpZXMgYXJlIHJlc3BlY3RlZC4KLSAgIGRpcj1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8L1teL10qJHwvfCdgCi0gICB0ZXN0ICJ4JGRpciIgPSAieCRvYmplY3QiICYmIGRpcj0KLSAgIGJhc2U9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfF4uKi98fCcgLWUgJ3MvXC5vJC8vJyAtZSAncy9cLmxvJC8vJ2AKKyAgIyBUaGUgVHJ1NjQgY29tcGlsZXIgdXNlcyAtTUQgdG8gZ2VuZXJhdGUgZGVwZW5kZW5jaWVzIGFzIGEgc2lkZQorICAjIGVmZmVjdC4gICdjYyAtTUQgLW8gZm9vLm8gLi4uJyBwdXRzIHRoZSBkZXBlbmRlbmNpZXMgaW50byAnZm9vLm8uZCcuCisgICMgQXQgbGVhc3Qgb24gQWxwaGEvUmVkaGF0IDYuMSwgQ29tcGFxIENDQyBWNi4yLTUwNCBzZWVtcyB0byBwdXQKKyAgIyBkZXBlbmRlbmNpZXMgaW4gJ2Zvby5kJyBpbnN0ZWFkLCBzbyB3ZSBjaGVjayBmb3IgdGhhdCB0b28uCisgICMgU3ViZGlyZWN0b3JpZXMgYXJlIHJlc3BlY3RlZC4KKyAgc2V0X2Rpcl9mcm9tICAiJG9iamVjdCIKKyAgc2V0X2Jhc2VfZnJvbSAiJG9iamVjdCIKIAotICAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCi0gICAgICAjIFdpdGggVHJ1NjQgY2MsIHNoYXJlZCBvYmplY3RzIGNhbiBhbHNvIGJlIHVzZWQgdG8gbWFrZSBhCi0gICAgICAjIHN0YXRpYyBsaWJyYXJ5LiAgVGhpcyBtZWNhbmlzbSBpcyB1c2VkIGluIGxpYnRvb2wgMS40IHNlcmllcyB0bwotICAgICAgIyBoYW5kbGUgYm90aCBzaGFyZWQgYW5kIHN0YXRpYyBsaWJyYXJpZXMgaW4gYSBzaW5nbGUgY29tcGlsYXRpb24uCi0gICAgICAjIFdpdGggbGlidG9vbCAxLjQsIGRlcGVuZGVuY2llcyB3ZXJlIG91dHB1dCBpbiAkZGlyLmxpYnMvJGJhc2UubG8uZC4KLSAgICAgICMKLSAgICAgICMgV2l0aCBsaWJ0b29sIDEuNSB0aGlzIGV4Y2VwdGlvbiB3YXMgcmVtb3ZlZCwgYW5kIGxpYnRvb2wgbm93Ci0gICAgICAjIGdlbmVyYXRlcyAyIHNlcGFyYXRlIG9iamVjdHMgZm9yIHRoZSAyIGxpYnJhcmllcy4gIFRoZXNlIHR3bwotICAgICAgIyBjb21waWxhdGlvbnMgb3V0cHV0IGRlcGVuZGVuY2llcyBpbiBpbiAkZGlyLmxpYnMvJGJhc2Uuby5kIGFuZAotICAgICAgIyBpbiAkZGlyJGJhc2Uuby5kLiAgV2UgaGF2ZSB0byBjaGVjayBmb3IgYm90aCBmaWxlcywgYmVjYXVzZQotICAgICAgIyBvbmUgb2YgdGhlIHR3byBjb21waWxhdGlvbnMgY2FuIGJlIGRpc2FibGVkLiAgV2Ugc2hvdWxkIHByZWZlcgotICAgICAgIyAkZGlyJGJhc2Uuby5kIG92ZXIgJGRpci5saWJzLyRiYXNlLm8uZCBiZWNhdXNlIHRoZSBsYXR0ZXIgaXMKLSAgICAgICMgYXV0b21hdGljYWxseSBjbGVhbmVkIHdoZW4gLmxpYnMvIGlzIGRlbGV0ZWQsIHdoaWxlIGlnbm9yaW5nCi0gICAgICAjIHRoZSBmb3JtZXIgd291bGQgY2F1c2UgYSBkaXN0Y2xlYW5jaGVjayBwYW5pYy4KLSAgICAgIHRtcGRlcGZpbGUxPSRkaXIubGlicy8kYmFzZS5sby5kICAgIyBsaWJ0b29sIDEuNAotICAgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLm8uZCAgICAgICAgICAjIGxpYnRvb2wgMS41Ci0gICAgICB0bXBkZXBmaWxlMz0kZGlyLmxpYnMvJGJhc2Uuby5kICAgICMgbGlidG9vbCAxLjUKLSAgICAgIHRtcGRlcGZpbGU0PSRkaXIubGlicy8kYmFzZS5kICAgICAgIyBDb21wYXEgQ0NDIFY2LjItNTA0Ci0gICAgICAiJEAiIC1XYywtTUQKLSAgIGVsc2UKLSAgICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5vLmQKLSAgICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS5kCi0gICAgICB0bXBkZXBmaWxlMz0kZGlyJGJhc2UuZAotICAgICAgdG1wZGVwZmlsZTQ9JGRpciRiYXNlLmQKLSAgICAgICIkQCIgLU1ECi0gICBmaQorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICAjIExpYnRvb2wgZ2VuZXJhdGVzIDIgc2VwYXJhdGUgb2JqZWN0cyBmb3IgdGhlIDIgbGlicmFyaWVzLiAgVGhlc2UKKyAgICAjIHR3byBjb21waWxhdGlvbnMgb3V0cHV0IGRlcGVuZGVuY2llcyBpbiAkZGlyLmxpYnMvJGJhc2Uuby5kIGFuZAorICAgICMgaW4gJGRpciRiYXNlLm8uZC4gIFdlIGhhdmUgdG8gY2hlY2sgZm9yIGJvdGggZmlsZXMsIGJlY2F1c2UKKyAgICAjIG9uZSBvZiB0aGUgdHdvIGNvbXBpbGF0aW9ucyBjYW4gYmUgZGlzYWJsZWQuICBXZSBzaG91bGQgcHJlZmVyCisgICAgIyAkZGlyJGJhc2Uuby5kIG92ZXIgJGRpci5saWJzLyRiYXNlLm8uZCBiZWNhdXNlIHRoZSBsYXR0ZXIgaXMKKyAgICAjIGF1dG9tYXRpY2FsbHkgY2xlYW5lZCB3aGVuIC5saWJzLyBpcyBkZWxldGVkLCB3aGlsZSBpZ25vcmluZworICAgICMgdGhlIGZvcm1lciB3b3VsZCBjYXVzZSBhIGRpc3RjbGVhbmNoZWNrIHBhbmljLgorICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5vLmQgICAgICAgICAgIyBsaWJ0b29sIDEuNQorICAgIHRtcGRlcGZpbGUyPSRkaXIubGlicy8kYmFzZS5vLmQgICAgIyBMaWtld2lzZS4KKyAgICB0bXBkZXBmaWxlMz0kZGlyLmxpYnMvJGJhc2UuZCAgICAgICMgQ29tcGFxIENDQyBWNi4yLTUwNAorICAgICIkQCIgLVdjLC1NRAorICBlbHNlCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLmQKKyAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2UuZAorICAgIHRtcGRlcGZpbGUzPSRkaXIkYmFzZS5kCisgICAgIiRAIiAtTUQKKyAgZmkKIAotICAgc3RhdD0kPwotICAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6Ci0gICBlbHNlCi0gICAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIiAiJHRtcGRlcGZpbGU0IgotICAgICAgZXhpdCAkc3RhdAotICAgZmkKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIKKyAgICBleGl0ICRzdGF0CisgIGZpCiAKLSAgIGZvciB0bXBkZXBmaWxlIGluICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiICIkdG1wZGVwZmlsZTQiCi0gICBkbwotICAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKLSAgIGRvbmUKLSAgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbgotICAgICAgc2VkIC1lICJzLF4uKlwuW2Etel0qOiwkb2JqZWN0OiwiIDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKLSAgICAgICMgVGhhdCdzIGEgdGFiIGFuZCBhIHNwYWNlIGluIHRoZSBbXS4KLSAgICAgIHNlZCAtZSAncyxeLipcLlthLXpdKjpbCSBdKiwsJyAtZSAncywkLDosJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgotICAgZWxzZQotICAgICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKLSAgIGZpCi0gICBybSAtZiAiJHRtcGRlcGZpbGUiCi0gICA7OworICBmb3IgdG1wZGVwZmlsZSBpbiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIgorICBkbworICAgIHRlc3QgLWYgIiR0bXBkZXBmaWxlIiAmJiBicmVhaworICBkb25lCisgICMgU2FtZSBwb3N0LXByb2Nlc3NpbmcgdGhhdCBpcyByZXF1aXJlZCBmb3IgQUlYIG1vZGUuCisgIGFpeF9wb3N0X3Byb2Nlc3NfZGVwZmlsZQorICA7OworCittc3ZjNykKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgc2hvd0luY2x1ZGVzPS1XYywtc2hvd0luY2x1ZGVzCisgIGVsc2UKKyAgICBzaG93SW5jbHVkZXM9LXNob3dJbmNsdWRlcworICBmaQorICAiJEAiICRzaG93SW5jbHVkZXMgPiAiJHRtcGRlcGZpbGUiCisgIHN0YXQ9JD8KKyAgZ3JlcCAtdiAnXk5vdGU6IGluY2x1ZGluZyBmaWxlOiAnICIkdG1wZGVwZmlsZSIKKyAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKyAgIyBUaGUgZmlyc3Qgc2VkIHByb2dyYW0gYmVsb3cgZXh0cmFjdHMgdGhlIGZpbGUgbmFtZXMgYW5kIGVzY2FwZXMKKyAgIyBiYWNrc2xhc2hlcyBmb3IgY3lncGF0aC4gIFRoZSBzZWNvbmQgc2VkIHByb2dyYW0gb3V0cHV0cyB0aGUgZmlsZQorICAjIG5hbWUgd2hlbiByZWFkaW5nLCBidXQgYWxzbyBhY2N1bXVsYXRlcyBhbGwgaW5jbHVkZSBmaWxlcyBpbiB0aGUKKyAgIyBob2xkIGJ1ZmZlciBpbiBvcmRlciB0byBvdXRwdXQgdGhlbSBhZ2FpbiBhdCB0aGUgZW5kLiAgVGhpcyBvbmx5CisgICMgd29ya3Mgd2l0aCBzZWQgaW1wbGVtZW50YXRpb25zIHRoYXQgY2FuIGhhbmRsZSBsYXJnZSBidWZmZXJzLgorICBzZWQgPCAiJHRtcGRlcGZpbGUiIC1uICcKKy9eTm90ZTogaW5jbHVkaW5nIGZpbGU6ICAqXCguKlwpLyB7CisgIHMvL1wxLworICBzL1xcL1xcXFwvZworICBwCit9JyB8ICRjeWdwYXRoX3UgfCBzb3J0IC11IHwgc2VkIC1uICcKK3MvIC9cXCAvZworcy9cKC4qXCkvJyIkdGFiIidcMSBcXC9wCitzLy5cKC4qXCkgXFwvXDE6LworSAorJCB7CisgIHMvLiovJyIkdGFiIicvCisgIEcKKyAgcAorfScgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK21zdmM3bXN5cykKKyAgIyBUaGlzIGNhc2UgZXhpc3RzIG9ubHkgdG8gbGV0IGRlcGVuZC5tNCBkbyBpdHMgd29yay4gIEl0IHdvcmtzIGJ5CisgICMgbG9va2luZyBhdCB0aGUgdGV4dCBvZiB0aGlzIHNjcmlwdC4gIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHJ1biwKKyAgIyBzaW5jZSBpdCBpcyBjaGVja2VkIGZvciBhYm92ZS4KKyAgZXhpdCAxCisgIDs7CiAKICNub3NpZGVlZmZlY3QpCiAgICMgVGhpcyBjb21tZW50IGFib3ZlIGlzIHVzZWQgYnkgYXV0b21ha2UgdG8gdGVsbCBzaWRlLWVmZmVjdApAQCAtMzQ1LDEzICs1NzMsMTMgQEAKIAogICAjIFJlbW92ZSB0aGUgY2FsbCB0byBMaWJ0b29sLgogICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KLSAgICB3aGlsZSB0ZXN0ICQxICE9ICctLW1vZGU9Y29tcGlsZSc7IGRvCisgICAgd2hpbGUgdGVzdCAiWCQxIiAhPSAnWC0tbW9kZT1jb21waWxlJzsgZG8KICAgICAgIHNoaWZ0CiAgICAgZG9uZQogICAgIHNoaWZ0CiAgIGZpCiAKLSAgIyBSZW1vdmUgYC1vICRvYmplY3QnLgorICAjIFJlbW92ZSAnLW8gJG9iamVjdCcuCiAgIElGUz0iICIKICAgZm9yIGFyZwogICBkbwpAQCAtMzcxLDE4ICs1OTksMTggQEAKICAgZG9uZQogCiAgIHRlc3QgLXogIiRkYXNobWZsYWciICYmIGRhc2htZmxhZz0tTQotICAjIFJlcXVpcmUgYXQgbGVhc3QgdHdvIGNoYXJhY3RlcnMgYmVmb3JlIHNlYXJjaGluZyBmb3IgYDonCisgICMgUmVxdWlyZSBhdCBsZWFzdCB0d28gY2hhcmFjdGVycyBiZWZvcmUgc2VhcmNoaW5nIGZvciAnOicKICAgIyBpbiB0aGUgdGFyZ2V0IG5hbWUuICBUaGlzIGlzIHRvIGNvcGUgd2l0aCBET1Mtc3R5bGUgZmlsZW5hbWVzOgotICAjIGEgZGVwZW5kZW5jeSBzdWNoIGFzIGBjOi9mb28vYmFyJyBjb3VsZCBiZSBzZWVuIGFzIHRhcmdldCBgYycgb3RoZXJ3aXNlLgorICAjIGEgZGVwZW5kZW5jeSBzdWNoIGFzICdjOi9mb28vYmFyJyBjb3VsZCBiZSBzZWVuIGFzIHRhcmdldCAnYycgb3RoZXJ3aXNlLgogICAiJEAiICRkYXNobWZsYWcgfAotICAgIHNlZCAnczpeWyAgXSpbXjogXVteOl1bXjpdKlw6WyAgICBdKjonIiRvYmplY3QiJ1w6IDonID4gIiR0bXBkZXBmaWxlIgorICAgIHNlZCAic3xeWyR0YWIgXSpbXjokdGFiIF1bXjpdW146XSo6WyR0YWIgXSp8JG9iamVjdDogfCIgPiAiJHRtcGRlcGZpbGUiCiAgIHJtIC1mICIkZGVwZmlsZSIKICAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKLSAgdHIgJyAnICcKLScgPCAiJHRtcGRlcGZpbGUiIHwgXAotIyMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KLSMjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCi0gICAgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgICMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIHNlZCBpbnZvY2F0aW9uCisgICMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KKyAgdHIgJyAnICIkbmwiIDwgIiR0bXBkZXBmaWxlIiBcCisgICAgfCBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICcvOiQvZCcgXAorICAgIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCiAgIHJtIC1mICIkdG1wZGVwZmlsZSIKICAgOzsKIApAQCAtMzk2LDQxICs2MjQsNTEgQEAKICAgIiRAIiB8fCBleGl0ICQ/CiAgICMgUmVtb3ZlIGFueSBMaWJ0b29sIGNhbGwKICAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCi0gICAgd2hpbGUgdGVzdCAkMSAhPSAnLS1tb2RlPWNvbXBpbGUnOyBkbworICAgIHdoaWxlIHRlc3QgIlgkMSIgIT0gJ1gtLW1vZGU9Y29tcGlsZSc7IGRvCiAgICAgICBzaGlmdAogICAgIGRvbmUKICAgICBzaGlmdAogICBmaQogICAjIFggbWFrZWRlcGVuZAogICBzaGlmdAotICBjbGVhcmVkPW5vCi0gIGZvciBhcmcgaW4gIiRAIjsgZG8KKyAgY2xlYXJlZD1ubyBlYXQ9bm8KKyAgZm9yIGFyZworICBkbwogICAgIGNhc2UgJGNsZWFyZWQgaW4KICAgICBubykKICAgICAgIHNldCAiIjsgc2hpZnQKICAgICAgIGNsZWFyZWQ9eWVzIDs7CiAgICAgZXNhYworICAgIGlmIHRlc3QgJGVhdCA9IHllczsgdGhlbgorICAgICAgZWF0PW5vCisgICAgICBjb250aW51ZQorICAgIGZpCiAgICAgY2FzZSAiJGFyZyIgaW4KICAgICAtRCp8LUkqKQogICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciOyBzaGlmdCA7OwogICAgICMgU3RyaXAgYW55IG9wdGlvbiB0aGF0IG1ha2VkZXBlbmQgbWF5IG5vdCB1bmRlcnN0YW5kLiAgUmVtb3ZlCiAgICAgIyB0aGUgb2JqZWN0IHRvbywgb3RoZXJ3aXNlIG1ha2VkZXBlbmQgd2lsbCBwYXJzZSBpdCBhcyBhIHNvdXJjZSBmaWxlLgorICAgIC1hcmNoKQorICAgICAgZWF0PXllcyA7OwogICAgIC0qfCRvYmplY3QpCiAgICAgICA7OwogICAgICopCiAgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyI7IHNoaWZ0IDs7CiAgICAgZXNhYwogICBkb25lCi0gIG9ial9zdWZmaXg9ImBlY2hvICRvYmplY3QgfCBzZWQgJ3MvXi4qXC4vLi8nYCIKKyAgb2JqX3N1ZmZpeD1gZWNobyAiJG9iamVjdCIgfCBzZWQgJ3MvXi4qXC4vLi8nYAogICB0b3VjaCAiJHRtcGRlcGZpbGUiCiAgICR7TUFLRURFUEVORC1tYWtlZGVwZW5kfSAtbyIkb2JqX3N1ZmZpeCIgLWYiJHRtcGRlcGZpbGUiICIkQCIKICAgcm0gLWYgIiRkZXBmaWxlIgotICBjYXQgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgotICBzZWQgJzEsMmQnICIkdG1wZGVwZmlsZSIgfCB0ciAnICcgJwotJyB8IFwKLSMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCi0jIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgotICAgIHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICAjIG1ha2VkZXBlbmQgbWF5IHByZXBlbmQgdGhlIFZQQVRIIGZyb20gdGhlIHNvdXJjZSBmaWxlIG5hbWUgdG8gdGhlIG9iamVjdC4KKyAgIyBObyBuZWVkIHRvIHJlZ2V4LWVzY2FwZSAkb2JqZWN0LCBleGNlc3MgbWF0Y2hpbmcgb2YgJy4nIGlzIGhhcm1sZXNzLgorICBzZWQgInN8Xi4qXCgkb2JqZWN0ICo6XCl8XDF8IiAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhlIGxhc3QgaW52b2NhdGlvbgorICAjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCisgIHNlZCAnMSwyZCcgIiR0bXBkZXBmaWxlIiBcCisgICAgfCB0ciAnICcgIiRubCIgXAorICAgIHwgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIFwKKyAgICB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgogICBybSAtZiAiJHRtcGRlcGZpbGUiICIkdG1wZGVwZmlsZSIuYmFrCiAgIDs7CiAKQEAgLTQ0MSwxMyArNjc5LDEzIEBACiAKICAgIyBSZW1vdmUgdGhlIGNhbGwgdG8gTGlidG9vbC4KICAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCi0gICAgd2hpbGUgdGVzdCAkMSAhPSAnLS1tb2RlPWNvbXBpbGUnOyBkbworICAgIHdoaWxlIHRlc3QgIlgkMSIgIT0gJ1gtLW1vZGU9Y29tcGlsZSc7IGRvCiAgICAgICBzaGlmdAogICAgIGRvbmUKICAgICBzaGlmdAogICBmaQogCi0gICMgUmVtb3ZlIGAtbyAkb2JqZWN0Jy4KKyAgIyBSZW1vdmUgJy1vICRvYmplY3QnLgogICBJRlM9IiAiCiAgIGZvciBhcmcKICAgZG8KQEAgLTQ2NiwxMCArNzA0LDEwIEBACiAgICAgZXNhYwogICBkb25lCiAKLSAgIiRAIiAtRSB8Ci0gICAgc2VkIC1uIC1lICcvXiMgWzAtOV1bMC05XSogIlwoW14iXSpcKSIuKi8gczo6IFwxIFxcOnAnIFwKLSAgICAgICAtZSAnL14jbGluZSBbMC05XVswLTldKiAiXChbXiJdKlwpIi4qLyBzOjogXDEgXFw6cCcgfAotICAgIHNlZCAnJCBzOiBcXCQ6OicgPiAiJHRtcGRlcGZpbGUiCisgICIkQCIgLUUgXAorICAgIHwgc2VkIC1uIC1lICcvXiMgWzAtOV1bMC05XSogIlwoW14iXSpcKSIuKi8gczo6IFwxIFxcOnAnIFwKKyAgICAgICAgICAgICAtZSAnL14jbGluZSBbMC05XVswLTldKiAiXChbXiJdKlwpIi4qLyBzOjogXDEgXFw6cCcgXAorICAgIHwgc2VkICckIHM6IFxcJDo6JyA+ICIkdG1wZGVwZmlsZSIKICAgcm0gLWYgIiRkZXBmaWxlIgogICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgogICBjYXQgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKQEAgLTQ3OSwzNSArNzE3LDU2IEBACiAKIG1zdmlzdWFsY3BwKQogICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKLSAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dCwgcmVnYXJkbGVzcyBvZiAtbywKLSAgIyBiZWNhdXNlIHdlIG11c3QgdXNlIC1vIHdoZW4gcnVubmluZyBsaWJ0b29sLgorICAjIGFsd2F5cyB3cml0ZSB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUgdG8gc3Rkb3V0LgogICAiJEAiIHx8IGV4aXQgJD8KKworICAjIFJlbW92ZSB0aGUgY2FsbCB0byBMaWJ0b29sLgorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB3aGlsZSB0ZXN0ICJYJDEiICE9ICdYLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKwogICBJRlM9IiAiCiAgIGZvciBhcmcKICAgZG8KICAgICBjYXNlICIkYXJnIiBpbgorICAgIC1vKQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgJG9iamVjdCkKKyAgICAgIHNoaWZ0CisgICAgICA7OwogICAgICItR20ifCIvR20ifCItR2kifCIvR2kifCItWkkifCIvWkkiKQotCXNldCBmbm9yZCAiJEAiCi0Jc2hpZnQKLQlzaGlmdAotCTs7CisgICAgICAgIHNldCBmbm9yZCAiJEAiCisgICAgICAgIHNoaWZ0CisgICAgICAgIHNoaWZ0CisgICAgICAgIDs7CiAgICAgKikKLQlzZXQgZm5vcmQgIiRAIiAiJGFyZyIKLQlzaGlmdAotCXNoaWZ0Ci0JOzsKKyAgICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciCisgICAgICAgIHNoaWZ0CisgICAgICAgIHNoaWZ0CisgICAgICAgIDs7CiAgICAgZXNhYwogICBkb25lCi0gICIkQCIgLUUgfAotICBzZWQgLW4gJy9eI2xpbmUgWzAtOV1bMC05XSogIlwoW14iXSpcKSIvIHM6OmVjaG8gImBjeWdwYXRoIC11IFxcIlwxXFwiYCI6cCcgfCBzb3J0IHwgdW5pcSA+ICIkdG1wZGVwZmlsZSIKKyAgIiRAIiAtRSAyPi9kZXYvbnVsbCB8CisgIHNlZCAtbiAnL14jbGluZSBbMC05XVswLTldKiAiXChbXiJdKlwpIi8gczo6XDE6cCcgfCAkY3lncGF0aF91IHwgc29ydCAtdSA+ICIkdG1wZGVwZmlsZSIKICAgcm0gLWYgIiRkZXBmaWxlIgogICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgotICAuICIkdG1wZGVwZmlsZSIgfCBzZWQgJ3MlICVcXCAlZycgfCBzZWQgLW4gJy9eXCguKlwpJC8gczo6CVwxIFxcOnAnID4+ICIkZGVwZmlsZSIKLSAgZWNobyAiCSIgPj4gIiRkZXBmaWxlIgotICAuICIkdG1wZGVwZmlsZSIgfCBzZWQgJ3MlICVcXCAlZycgfCBzZWQgLW4gJy9eXCguKlwpJC8gczo6XDFcOjpwJyA+PiAiJGRlcGZpbGUiCisgIHNlZCA8ICIkdG1wZGVwZmlsZSIgLW4gLWUgJ3MlICVcXCAlZycgLWUgJy9eXCguKlwpJC8gczo6JyIkdGFiIidcMSBcXDpwJyA+PiAiJGRlcGZpbGUiCisgIGVjaG8gIiR0YWIiID4+ICIkZGVwZmlsZSIKKyAgc2VkIDwgIiR0bXBkZXBmaWxlIiAtbiAtZSAncyUgJVxcICVnJyAtZSAnL15cKC4qXCkkLyBzOjpcMVw6OnAnID4+ICIkZGVwZmlsZSIKICAgcm0gLWYgIiR0bXBkZXBmaWxlIgogICA7OwogCittc3ZjbXN5cykKKyAgIyBUaGlzIGNhc2UgZXhpc3RzIG9ubHkgdG8gbGV0IGRlcGVuZC5tNCBkbyBpdHMgd29yay4gIEl0IHdvcmtzIGJ5CisgICMgbG9va2luZyBhdCB0aGUgdGV4dCBvZiB0aGlzIHNjcmlwdC4gIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHJ1biwKKyAgIyBzaW5jZSBpdCBpcyBjaGVja2VkIGZvciBhYm92ZS4KKyAgZXhpdCAxCisgIDs7CisKIG5vbmUpCiAgIGV4ZWMgIiRAIgogICA7OwpAQCAtNTI2LDUgKzc4NSw2IEBACiAjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKICMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgogIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKLSMgdGltZS1zdGFtcC1lbmQ6ICIkIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgogIyBFbmQ6CmRpZmYgLS1naXQgYS9idWlsZC1hdXgvZG8tcmVsZWFzZS1jb21taXQtYW5kLXRhZyBiL2J1aWxkLWF1eC9kby1yZWxlYXNlLWNvbW1pdC1hbmQtdGFnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZhODllNzYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsZC1hdXgvZG8tcmVsZWFzZS1jb21taXQtYW5kLXRhZwpAQCAtMCwwICsxLDE3OSBAQAorIyEvYmluL3NoCisjIEluIGEgZ2l0L2F1dG9jb25mL2F1dG9tYWtlLWVuYWJsZWQgcHJvamVjdCB3aXRoIGEgTkVXUyBmaWxlIGFuZCBhIHZlcnNpb24tCisjIGNvbnRyb2xsZWQgLnByZXYtdmVyc2lvbiBmaWxlLCBhdXRvbWF0ZSB0aGUgcHJvY2VkdXJlIGJ5IHdoaWNoIHdlIHJlY29yZAorIyB0aGUgZGF0ZSwgcmVsZWFzZS10eXBlIGFuZCB2ZXJzaW9uIHN0cmluZyBpbiB0aGUgTkVXUyBmaWxlLiAgVGhhdCBjb21taXQKKyMgd2lsbCBzZXJ2ZSB0byBpZGVudGlmeSB0aGUgcmVsZWFzZSwgc28gYXBwbHkgYSBzaWduZWQgdGFnIHRvIGl0IGFzIHdlbGwuCitWRVJTSU9OPTIwMTItMDgtMDEuMDkgIyBVVEMKKworIyBOb3RlOiB0aGlzIGlzIGEgYmFzaCBzY3JpcHQgKGNvdWxkIGJlIHpzaCBvciBkYXNoKQorCisjIENvcHlyaWdodCAoQykgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBXcml0dGVuIGJ5IEppbSBNZXllcmluZworCitNRT0kKGJhc2VuYW1lICIkMCIpCit3YXJuKCkgeyBwcmludGYgJyVzOiAlc1xuJyAiJE1FIiAiJCoiID4mMjsgfQorZGllKCkgeyB3YXJuICIkKiI7IGV4aXQgMTsgfQorCitoZWxwKCkKK3sKKyAgY2F0IDw8RU9GCitVc2FnZTogJE1FIFtPUFRJT04uLi5dIFZFUlNJT04gUkVMRUFTRV9UWVBFCisKK1J1biB0aGlzIHNjcmlwdCBmcm9tIHRvcF9zcmNkaXIgdG8gcGVyZm9ybSB0aGUgZmluYWwgcHJlLXJlbGVhc2UgTkVXUwordXBkYXRlIGluIHdoaWNoIHRoZSBkYXRlLCByZWxlYXNlLXR5cGUgYW5kIHZlcnNpb24gc3RyaW5nIGFyZQorcmVjb3JkZWQuICBDb21taXQgdGhhdCByZXN1bHQgd2l0aCBhIGxvZyBlbnRyeSBtYXJraW5nIHRoZSByZWxlYXNlLAorYW5kIGFwcGx5IGEgc2lnbmVkIHRhZy4gIFJ1biBpdCBmcm9tIHlvdXIgcHJvamVjdCdzIHRvcC1sZXZlbAorZGlyZWN0b3J5LgorCitSZXF1aXJlbWVudHM6CistIHlvdSB1c2UgZ2l0IGZvciB2ZXJzaW9uLWNvbnRyb2wKKy0gYSB2ZXJzaW9uLWNvbnRyb2xsZWQgLnByZXYtdmVyc2lvbiBmaWxlCistIGEgTkVXUyBmaWxlLCB3aXRoIGxpbmUgMyBpZGVudGljYWwgdG8gdGhpczoKKyRub3Rld29ydGh5X3N0dWIKKworT3B0aW9uczoKKyAgLS1icmFuY2g9QlJBTkNIICAgICBzZXQgcmVsZWFzZSBicmFuY2ggKGRlZmF1bHQ6ICRicmFuY2gpCisgIC1DLCAtLWJ1aWxkZGlyPURJUiAgbG9jYXRpb24gb2YgKGNvbmZpZ3VyZWQpIE1ha2VmaWxlIChkZWZhdWx0OiAkYnVpbGRkaXIpCisgIC0taGVscCAgICAgICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLS12ZXJzaW9uICAgICAgICAgICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisKK0VYQU1QTEU6CitUbyB1cGRhdGUgTkVXUyBhbmQgdGFnIHRoZSBiZXRhIDguMSByZWxlYXNlIG9mIGNvcmV1dGlscywgSSB3b3VsZCBydW4gdGhpczoKKworICAkTUUgOC4xIGJldGEKKworUmVwb3J0IGJ1Z3MgYW5kIHBhdGNoZXMgdG8gPGJ1Zy1nbnVsaWJAZ251Lm9yZz4uCitFT0YKKyAgZXhpdAorfQorCit2ZXJzaW9uKCkKK3sKKyAgeWVhcj0kKGVjaG8gIiRWRVJTSU9OIiB8IHNlZCAncy9bXjAtOV0uKi8vJykKKyAgY2F0IDw8RU9GCiskTUUgJFZFUlNJT04KK0NvcHlyaWdodCAoQykgJHllYXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMsCitMaWNlbnNlIEdQTHYzKzogR05VIEdQTCB2ZXJzaW9uIDMgb3IgbGF0ZXIgPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sPgorVGhpcyBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgYXJlIGZyZWUgdG8gY2hhbmdlIGFuZCByZWRpc3RyaWJ1dGUgaXQuCitUaGVyZSBpcyBOTyBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LgorRU9GCisgIGV4aXQKK30KKworIyMgLS0tLS0tICMjCisjIyBNYWluLiAgIyMKKyMjIC0tLS0tLSAjIworCisjIENvbnN0YW50cy4KK25vdGV3b3J0aHk9JyogTm90ZXdvcnRoeSBjaGFuZ2VzIGluIHJlbGVhc2UnCitub3Rld29ydGh5X3N0dWI9IiRub3Rld29ydGh5ID8uPyAoPz8/Py0/Py0/PykgWz9dIgorCisjIFZhcmlhYmxlcy4KK2JyYW5jaD0kKGdpdCBicmFuY2ggfCBzZWQgLW5lICcvXlwqIC97cy8vLztwO3E7fScpCitidWlsZGRpcj0uCisKK3doaWxlIHRlc3QgJCMgIT0gMAorZG8KKyAgIyBIYW5kbGUgLS1vcHRpb249dmFsdWUgYnkgc3BsaXR0aW5nIGFwYXJ0IGFuZCBwdXR0aW5nIGJhY2sgb24gYXJndi4KKyAgY2FzZSAkMSBpbgorICAgIC0tKj0qKQorICAgICAgb3B0PSQoZWNobyAiJDEiIHwgc2VkIC1lICdzLz0uKi8vJykKKyAgICAgIHZhbD0kKGVjaG8gIiQxIiB8IHNlZCAtZSAncy9bXj1dKj0vLycpCisgICAgICBzaGlmdAorICAgICAgc2V0IGR1bW15ICIkb3B0IiAiJHZhbCIgJHsxKyIkQCJ9OyBzaGlmdAorICAgICAgOzsKKyAgZXNhYworCisgIGNhc2UgJDEgaW4KKyAgICAtLWhlbHB8LS12ZXJzaW9uKSAkezEjLS19OzsKKyAgICAtLWJyYW5jaCkgc2hpZnQ7IGJyYW5jaD0kMTsgc2hpZnQgOzsKKyAgICAtQ3wtLWJ1aWxkZGlyKSBzaGlmdDsgYnVpbGRkaXI9JDE7IHNoaWZ0IDs7CisgICAgLS0qKSBkaWUgInVucmVjb2duaXplZCBvcHRpb246ICQxIjs7CisgICAgKikgYnJlYWs7OworICBlc2FjCitkb25lCisKK3Rlc3QgJCMgPSAyIFwKKyAgfHwgZGllICJVc2FnZTogJE1FIFtPUFRJT04uLi5dIFZFUlNJT04gVFlQRSIKKwordmVyPSQxCit0eXBlPSQyCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRmlyc3QsIHNhbml0eSBjaGVja3MuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIFZlcmlmeSB0aGF0ICR2ZXIgbG9va3MgbGlrZSBhIHZlcnNpb24gbnVtYmVyLCBhbmQuLi4KK2VjaG8gIiR2ZXIifGdyZXAgLUUgJ15bMC05XVswLTkuXSpbMC05XSQnID4gL2Rldi9udWxsIFwKKyAgfHwgZGllICJpbnZhbGlkIHZlcnNpb246ICR2ZXIiCitwcmV2X3Zlcj0kKGNhdCAucHJldi12ZXJzaW9uKSBcCisgIHx8IGRpZSAnZmFpbGVkIHRvIGRldGVybWluZSBwcmV2aW91cyB2ZXJzaW9uIG51bWJlciBmcm9tIC5wcmV2LXZlcnNpb24nCisKKyMgVmVyaWZ5IHRoYXQgJHZlciBpcyBzZW5zaWJsZSAoPiAucHJldi12ZXJzaW9uKS4KK2Nhc2UgJChwcmludGYgIiRwcmV2X3ZlclxuJHZlclxuInxzb3J0IC1WIC11fHRyICdcbicgJzonKSBpbgorICAiJHByZXZfdmVyOiR2ZXI6IikgOzsKKyAgKikgZGllICJpbnZhbGlkIHZlcnNpb246ICR2ZXIgKDw9ICRwcmV2X3ZlcikiOzsKK2VzYWMKKworY2FzZSAkdHlwZSBpbgorICBhbHBoYXxiZXRhfHN0YWJsZSkgOzsKKyAgKikgZGllICJpbnZhbGlkIHJlbGVhc2UgdHlwZTogJHR5cGUiOzsKK2VzYWMKKworIyBObyBsb2NhbCBtb2RpZmljYXRpb25zIGFsbG93ZWQuCitjYXNlICQoZ2l0IGRpZmYtaW5kZXggLS1uYW1lLW9ubHkgSEVBRCkgaW4KKyAgJycpIDs7CisgICopIGRpZSAndGhpcyB0cmVlIGlzIGRpcnR5OyBjb21taXQgeW91ciBjaGFuZ2VzIGZpcnN0Jzs7Citlc2FjCisKKyMgRW5zdXJlIHRoZSBjdXJyZW50IGJyYW5jaCBuYW1lIGlzIGNvcnJlY3Q6CitjdXJyX2JyPSQoZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBIRUFEKQordGVzdCAiJGN1cnJfYnIiID0gcmVmcy9oZWFkcy8kYnJhbmNoIHx8IGRpZSBub3Qgb24gYnJhbmNoICRicmFuY2gKKworIyBFeHRyYWN0IHBhY2thZ2UgbmFtZSBmcm9tIE1ha2VmaWxlLgorTWFrZWZpbGU9JGJ1aWxkZGlyL01ha2VmaWxlCitwa2c9JChzZWQgLW4gJ3MvXlBBQ0tBR0UgPSBcKC4qXCkvXDEvcCcgIiRNYWtlZmlsZSIpIFwKKyAgfHwgZGllICJmYWlsZWQgdG8gZGV0ZXJtaW5lIHBhY2thZ2UgbmFtZSBmcm9tICRNYWtlZmlsZSIKKworIyBDaGVjayB0aGF0IGxpbmUgMyBvZiBORVdTIGlzIHRoZSBzdHViIGxpbmUgYWJvdXQgdG8gYmUgcmVwbGFjZWQuCit0ZXN0ICIkKHNlZCAtbiAzcCBORVdTKSIgPSAiJG5vdGV3b3J0aHlfc3R1YiIgXAorICB8fCBkaWUgImxpbmUgMyBvZiBORVdTIG11c3QgYmUgZXhhY3RseSAnJG5vdGV3b3J0aHlfc3R1YiciCisKKyMjIC0tLS0tLS0tLS0tLS0tLSAjIworIyMgVGhlbiwgY2hhbmdlcy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0gIyMKKworIyBVcGRhdGUgTkVXUyB0byBoYXZlIHRvZGF5J3MgZGF0ZSwgcGx1cyBkZXNpcmVkIHZlcnNpb24gbnVtYmVyIGFuZCAkdHlwZS4KK3BlcmwgLU1QT1NJWCAtbmkgLWUgJ215ICR0b2RheSA9IHN0cmZ0aW1lICIlRiIsIGxvY2FsdGltZSB0aW1lOycgXAorIC1lICdteSAoJHR5cGUsICR2ZXIpID0gcXcoJyIkdHlwZSAkdmVyIicpOycgXAorIC1lICdteSAkcGZ4ID0gIiciJG5vdGV3b3J0aHkiJyI7JyBcCisgLWUgJ3ByaW50ICQuPT0zID8gIiRwZnggJHZlciAoJHRvZGF5KSBbJHR5cGVdXG4iIDogJF8nIFwKKyAgICAgTkVXUyB8fCBkaWUgJ2ZhaWxlZCB0byB1cGRhdGUgTkVXUycKKworcHJpbnRmICJ2ZXJzaW9uICR2ZXJcblxuKiBORVdTOiBSZWNvcmQgcmVsZWFzZSBkYXRlLlxuIiBcCisgICAgfCBnaXQgY29tbWl0IC1GIC0gIC1hIHx8IGRpZSAnZ2l0IGNvbW1pdCBmYWlsZWQnCitnaXQgdGFnIC1zIC1tICIkcGtnICR2ZXIiIHYkdmVyIEhFQUQgfHwgZGllICdnaXQgdGFnIGZhaWxlZCcKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGluZGVudC10YWJzLW1vZGU6IG5pbAorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJWRVJTSU9OPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIiAjIFVUQyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2dlbmRvY3Muc2ggYi9idWlsZC1hdXgvZ2VuZG9jcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYzBiYzRiCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbGQtYXV4L2dlbmRvY3Muc2gKQEAgLTAsMCArMSw0MzQgQEAKKyMhL2Jpbi9zaCAtZQorIyBnZW5kb2NzLnNoIC0tIGdlbmVyYXRlIGEgR05VIG1hbnVhbCBpbiBtYW55IGZvcm1hdHMuICBUaGlzIHNjcmlwdCBpcworIyAgIG1lbnRpb25lZCBpbiBtYWludGFpbi50ZXhpLiAgU2VlIHRoZSBoZWxwIG1lc3NhZ2UgYmVsb3cgZm9yIHVzYWdlIGRldGFpbHMuCisKK3NjcmlwdHZlcnNpb249MjAxMi0xMC0yNy4xMQorCisjIENvcHlyaWdodCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyCisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyMKKyMgT3JpZ2luYWwgYXV0aG9yOiBNb2hpdCBBZ2Fyd2FsLgorIyBTZW5kIGJ1ZyByZXBvcnRzIGFuZCBhbnkgb3RoZXIgY29ycmVzcG9uZGVuY2UgdG8gYnVnLXRleGluZm9AZ251Lm9yZy4KKyMKKyMgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0LCBhbmQgdGhlIGNvbXBhbmlvbiB0ZW1wbGF0ZSwgaXMKKyMgYXZhaWxhYmxlIGZyb20gVGV4aW5mbyBDVlM6CisjIGh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2NnaS1iaW4vdmlld2N2cy90ZXhpbmZvL3RleGluZm8vdXRpbC9nZW5kb2NzLnNoCisjIGh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2NnaS1iaW4vdmlld2N2cy90ZXhpbmZvL3RleGluZm8vdXRpbC9nZW5kb2NzX3RlbXBsYXRlCisjCisjIEFuIHVwLXRvLWRhdGUgY29weSBpcyBhbHNvIG1haW50YWluZWQgaW4gR251bGliIChnbnUub3JnL3NvZnR3YXJlL2dudWxpYikuCisKKyMgVE9ETzoKKyMgLSBpbWFnZSBpbXBvcnRhdGlvbiB3YXMgb25seSBpbXBsZW1lbnRlZCBmb3IgSFRNTCBnZW5lcmF0ZWQgYnkKKyMgICBtYWtlaW5mby4gIEJ1dCBpdCBzaG91bGQgYmUgc2ltcGxlIGVub3VnaCB0byBhZGp1c3QuCisjIC0gaW1hZ2VzIGFyZSBub3QgaW1wb3J0ZWQgaW4gdGhlIHNvdXJjZSB0YXJiYWxsLiAgQWxsIHRoZSBuZWVkZWQKKyMgICBmb3JtYXRzIChQREYsIFBORywgZXRjLikgc2hvdWxkIGJlIGluY2x1ZGVkLgorCitwcm9nPWBiYXNlbmFtZSAiJDAiYAorc3JjZGlyPWBwd2RgCisKK3NjcmlwdHVybD0iaHR0cDovL3NhdmFubmFoLmdudS5vcmcvY2dpLWJpbi92aWV3Y3ZzL35jaGVja291dH4vdGV4aW5mby90ZXhpbmZvL3V0aWwvZ2VuZG9jcy5zaCIKK3RlbXBsYXRldXJsPSJodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9jZ2ktYmluL3ZpZXdjdnMvfmNoZWNrb3V0fi90ZXhpbmZvL3RleGluZm8vdXRpbC9nZW5kb2NzX3RlbXBsYXRlIgorCis6ICR7U0VUTEFORz0iZW52IExBTkc9IExDX01FU1NBR0VTPSBMQ19BTEw9IExBTkdVQUdFPSJ9Cis6ICR7TUFLRUlORk89Im1ha2VpbmZvIn0KKzogJHtURVhJMkRWST0idGV4aTJkdmkgLXQgQGZpbmFsb3V0In0KKzogJHtET0NCT09LMkhUTUw9ImRvY2Jvb2syaHRtbCJ9Cis6ICR7RE9DQk9PSzJQREY9ImRvY2Jvb2sycGRmIn0KKzogJHtET0NCT09LMlRYVD0iZG9jYm9vazJ0eHQifQorOiAke0dFTkRPQ1NfVEVNUExBVEVfRElSPSIuIn0KKzogJHtQRVJMPSdwZXJsJ30KKzogJHtURVhJMkhUTUw9InRleGkyaHRtbCJ9Cit1bnNldCBDRFBBVEgKK3Vuc2V0IHVzZV90ZXhpMmh0bWwKKwordmVyc2lvbj0iZ2VuZG9jcy5zaCAkc2NyaXB0dmVyc2lvbgorCitDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoZXJlIGlzIE5PIHdhcnJhbnR5LiAgWW91IG1heSByZWRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK0ZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZXNlIG1hdHRlcnMsIHNlZSB0aGUgZmlsZXMgbmFtZWQgQ09QWUlORy4iCisKK3VzYWdlPSJVc2FnZTogJHByb2cgW09QVElPTl0uLi4gUEFDS0FHRSBNQU5VQUwtVElUTEUKKworR2VuZXJhdGUgb3V0cHV0IGluIHZhcmlvdXMgZm9ybWF0cyBmcm9tIFBBQ0tBR0UudGV4aW5mbyAob3IgLnRleGkgb3IKKy50eGkpIHNvdXJjZS4gIFNlZSB0aGUgR05VIE1haW50YWluZXJzIGRvY3VtZW50IGZvciBhIG1vcmUgZXh0ZW5zaXZlCitkaXNjdXNzaW9uOgorICBodHRwOi8vd3d3LmdudS5vcmcvcHJlcC9tYWludGFpbl90b2MuaHRtbAorCitPcHRpb25zOgorICAtcyBTUkNGSUxFICByZWFkIFRleGluZm8gZnJvbSBTUkNGSUxFLCBpbnN0ZWFkIG9mIFBBQ0tBR0Uue3RleGluZm98dGV4aXx0eGl9CisgIC1vIE9VVERJUiAgIHdyaXRlIGZpbGVzIGludG8gT1VURElSLCBpbnN0ZWFkIG9mIG1hbnVhbC8uCisgIC1JIERJUiAgICAgIGFwcGVuZCBESVIgdG8gdGhlIFRleGluZm8gc2VhcmNoIHBhdGguCisgIC0tZW1haWwgQURSIHVzZSBBRFIgYXMgY29udGFjdCBpbiBnZW5lcmF0ZWQgd2ViIHBhZ2VzLgorICAtLWRvY2Jvb2sgICBjb252ZXJ0IHRocm91Z2ggRG9jQm9vayB0b28gKHhtbCwgdHh0LCBodG1sLCBwZGYpLgorICAtLWh0bWwgQVJHICBwYXNzIGluZGljYXRlZCBBUkcgdG8gbWFrZWluZm8gb3IgdGV4aTJodG1sIGZvciBIVE1MIHRhcmdldHMuCisgIC0taW5mbyBBUkcgIHBhc3MgaW5kaWNhdGVkIEFSRyB0byBtYWtlaW5mbyBmb3IgSW5mbywgaW5zdGVhZCBvZiAtLW5vLXNwbGl0LgorICAtLXRleGkyaHRtbCB1c2UgdGV4aTJodG1sIHRvIGdlbmVyYXRlIEhUTUwgdGFyZ2V0cy4KKyAgLS1oZWxwICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQgc3VjY2Vzc2Z1bGx5LgorICAtLXZlcnNpb24gICBkaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQgc3VjY2Vzc2Z1bGx5LgorCitTaW1wbGUgZXhhbXBsZTogJHByb2cgLS1lbWFpbCBidWctZ251LWVtYWNzQGdudS5vcmcgZW1hY3MgXCJHTlUgRW1hY3MgTWFudWFsXCIKKworVHlwaWNhbCBzZXF1ZW5jZToKKyAgY2QgUEFDS0FHRVNPVVJDRS9kb2MKKyAgd2dldCBcIiRzY3JpcHR1cmxcIgorICB3Z2V0IFwiJHRlbXBsYXRldXJsXCIKKyAgJHByb2cgLS1lbWFpbCBCVUdMSVNUIE1BTlVBTCBcIkdOVSBNQU5VQUwgLSBPbmUtbGluZSBkZXNjcmlwdGlvblwiCisKK091dHB1dCB3aWxsIGJlIGluIGEgbmV3IHN1YmRpcmVjdG9yeSBcIm1hbnVhbFwiIChieSBkZWZhdWx0OwordXNlIC1vIE9VVERJUiB0byBvdmVycmlkZSkuICBNb3ZlIGFsbCB0aGUgbmV3IGZpbGVzIGludG8geW91ciB3ZWIgQ1ZTCit0cmVlLCBhcyBleHBsYWluZWQgaW4gdGhlIFdlYiBQYWdlcyBub2RlIG9mIG1haW50YWluLnRleGkuCisKK1BsZWFzZSBkbyB1c2UgdGhlIC0tZW1haWwgQUREUkVTUyBvcHRpb24gdG8gc3BlY2lmeSB5b3VyIGJ1Zy1yZXBvcnRpbmcKK2FkZHJlc3MgaW4gdGhlIGdlbmVyYXRlZCBIVE1MIHBhZ2VzLgorCitNQU5VQUwtVElUTEUgaXMgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUgSFRNTCA8dGl0bGU+IG9mIHRoZSBvdmVyYWxsCittYW51YWwvaW5kZXguaHRtbCBmaWxlLiAgSXQgc2hvdWxkIGluY2x1ZGUgdGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgYmVpbmcKK2RvY3VtZW50ZWQuICBtYW51YWwvaW5kZXguaHRtbCBpcyBjcmVhdGVkIGJ5IHN1YnN0aXR1dGlvbiBmcm9tIHRoZSBmaWxlCiskR0VORE9DU19URU1QTEFURV9ESVIvZ2VuZG9jc190ZW1wbGF0ZS4gIChGZWVsIGZyZWUgdG8gbW9kaWZ5IHRoZQorZ2VuZXJpYyB0ZW1wbGF0ZSBmb3IgeW91ciBvd24gcHVycG9zZXMuKQorCitJZiB5b3UgaGF2ZSBzZXZlcmFsIG1hbnVhbHMsIHlvdSdsbCBuZWVkIHRvIHJ1biB0aGlzIHNjcmlwdCBzZXZlcmFsCit0aW1lcyB3aXRoIGRpZmZlcmVudCBNQU5VQUwgdmFsdWVzLCBzcGVjaWZ5aW5nIGEgZGlmZmVyZW50IG91dHB1dAorZGlyZWN0b3J5IHdpdGggLW8gZWFjaCB0aW1lLiAgVGhlbiB3cml0ZSAoYnkgaGFuZCkgYW4gb3ZlcmFsbCBpbmRleC5odG1sCit3aXRoIGxpbmtzIHRvIHRoZW0gYWxsLgorCitJZiBhIG1hbnVhbCdzIFRleGluZm8gc291cmNlcyBhcmUgc3ByZWFkIGFjcm9zcyBzZXZlcmFsIGRpcmVjdG9yaWVzLAorZmlyc3QgY29weSBvciBzeW1saW5rIGFsbCBUZXhpbmZvIHNvdXJjZXMgaW50byBhIHNpbmdsZSBkaXJlY3RvcnkuCisoUGFydCBvZiB0aGUgc2NyaXB0J3Mgd29yayBpcyB0byBtYWtlIGEgdGFyLmd6IG9mIHRoZSBzb3VyY2VzLikKKworQXMgaW1wbGllZCBhYm92ZSwgYnkgZGVmYXVsdCBtb25vbGl0aGljIEluZm8gZmlsZXMgYXJlIGdlbmVyYXRlZC4KK0lmIHlvdSB3YW50IHNwbGl0IEluZm8sIG9yIG90aGVyIEluZm8gb3B0aW9ucywgdXNlIC0taW5mbyB0byBvdmVycmlkZS4KKworWW91IGNhbiBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBNQUtFSU5GTywgVEVYSTJEVkksIFRFWEkySFRNTCwKK2FuZCBQRVJMIHRvIGNvbnRyb2wgdGhlIHByb2dyYW1zIHRoYXQgZ2V0IGV4ZWN1dGVkLCBhbmQKK0dFTkRPQ1NfVEVNUExBVEVfRElSIHRvIGNvbnRyb2wgd2hlcmUgdGhlIGdlbmRvY3NfdGVtcGxhdGUgZmlsZSBpcworbG9va2VkIGZvci4gIFdpdGggLS1kb2Nib29rLCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIERPQ0JPT0sySFRNTCwKK0RPQ0JPT0syUERGLCBhbmQgRE9DQk9PSzJUWFQgYXJlIGFsc28gcmVzcGVjdGVkLgorCitCeSBkZWZhdWx0LCBtYWtlaW5mbyBhbmQgdGV4aTJkdmkgYXJlIHJ1biBpbiB0aGUgZGVmYXVsdCAoRW5nbGlzaCkKK2xvY2FsZSwgc2luY2UgdGhhdCdzIHRoZSBsYW5ndWFnZSBvZiBtb3N0IFRleGluZm8gbWFudWFscy4gIElmIHlvdQoraGFwcGVuIHRvIGhhdmUgYSBub24tRW5nbGlzaCBtYW51YWwgYW5kIG5vbi1FbmdsaXNoIHdlYiBzaXRlLCBzZWUgdGhlCitTRVRMQU5HIHNldHRpbmcgaW4gdGhlIHNvdXJjZS4KKworRW1haWwgYnVnIHJlcG9ydHMgb3IgZW5oYW5jZW1lbnQgcmVxdWVzdHMgdG8gYnVnLXRleGluZm9AZ251Lm9yZy4KKyIKKworTUFOVUFMX1RJVExFPQorUEFDS0FHRT0KK0VNQUlMPXdlYm1hc3RlcnNAZ251Lm9yZyAgIyBwbGVhc2Ugb3ZlcnJpZGUgd2l0aCAtLWVtYWlsCitjb21tb25hcmc9ICMgT3B0aW9ucyBwYXNzZWQgdG8gYWxsIHRoZSB0b29scyAoLUkgZGlyKS4KK2RpcnM9ICAgICAgIyAtSSdzIGRpcmVjdG9yaWVzLgoraHRtbGFyZz0KK2luZm9hcmc9LS1uby1zcGxpdAorb3V0ZGlyPW1hbnVhbAorc3JjZmlsZT0KKword2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC0tZW1haWwpIHNoaWZ0OyBFTUFJTD0kMTs7CisgICAgLS1oZWxwKSBlY2hvICIkdXNhZ2UiOyBleGl0IDA7OworICAgIC0tdmVyc2lvbikgZWNobyAiJHZlcnNpb24iOyBleGl0IDA7OworICAgIC1zKSBzaGlmdDsgc3JjZmlsZT0kMTs7CisgICAgLW8pIHNoaWZ0OyBvdXRkaXI9JDE7OworICAgIC1JKSBzaGlmdDsgY29tbW9uYXJnPSIkY29tbW9uYXJnIC1JICckMSciOyBkaXJzPSIkZGlycyAkMSI7OworICAgIC0tZG9jYm9vaykgZG9jYm9vaz15ZXM7OworICAgIC0taHRtbCkgc2hpZnQ7IGh0bWxhcmc9JDE7OworICAgIC0taW5mbykgc2hpZnQ7IGluZm9hcmc9JDE7OworICAgIC0tdGV4aTJodG1sKSB1c2VfdGV4aTJodG1sPTE7OworICAgIC0qKQorICAgICAgZWNobyAiJDA6IFVua25vd24gb3B0aW9uIFxgJDEnLiIgPiYyCisgICAgICBlY2hvICIkMDogVHJ5IFxgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMgorICAgICAgZXhpdCAxOzsKKyAgICAqKQorICAgICAgaWYgdGVzdCAteiAiJFBBQ0tBR0UiOyB0aGVuCisgICAgICAgIFBBQ0tBR0U9JDEKKyAgICAgIGVsaWYgdGVzdCAteiAiJE1BTlVBTF9USVRMRSI7IHRoZW4KKyAgICAgICAgTUFOVUFMX1RJVExFPSQxCisgICAgICBlbHNlCisgICAgICAgIGVjaG8gIiQwOiBleHRyYSBub24tb3B0aW9uIGFyZ3VtZW50IFxgJDEnLiIgPiYyCisgICAgICAgIGV4aXQgMQorICAgICAgZmk7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKKyMgRm9yIG1vc3Qgb2YgdGhlIGZvbGxvd2luZywgdGhlIGJhc2UgbmFtZSBpcyBqdXN0ICRQQUNLQUdFCitiYXNlPSRQQUNLQUdFCisKK2lmIHRlc3QgLW4gIiRzcmNmaWxlIjsgdGhlbgorICAjIGJ1dCBoZXJlLCB3ZSB1c2UgdGhlIGJhc2VuYW1lIG9mICRzcmNmaWxlCisgIGJhc2U9YGJhc2VuYW1lICIkc3JjZmlsZSJgCisgIGNhc2UgJGJhc2UgaW4KKyAgICAqLnR4aXwqLnRleGl8Ki50ZXhpbmZvKSBiYXNlPWBlY2hvICIkYmFzZSJ8c2VkICdzL1wuW3RleGluZm9dKiQvLydgOzsKKyAgZXNhYworICBQQUNLQUdFPSRiYXNlCitlbGlmIHRlc3QgLXMgIiRzcmNkaXIvJFBBQ0tBR0UudGV4aW5mbyI7IHRoZW4KKyAgc3JjZmlsZT0kc3JjZGlyLyRQQUNLQUdFLnRleGluZm8KK2VsaWYgdGVzdCAtcyAiJHNyY2Rpci8kUEFDS0FHRS50ZXhpIjsgdGhlbgorICBzcmNmaWxlPSRzcmNkaXIvJFBBQ0tBR0UudGV4aQorZWxpZiB0ZXN0IC1zICIkc3JjZGlyLyRQQUNLQUdFLnR4aSI7IHRoZW4KKyAgc3JjZmlsZT0kc3JjZGlyLyRQQUNLQUdFLnR4aQorZWxzZQorICBlY2hvICIkMDogY2Fubm90IGZpbmQgLnRleGluZm8gb3IgLnRleGkgb3IgLnR4aSBmb3IgJFBBQ0tBR0UgaW4gJHNyY2Rpci4iID4mMgorICBleGl0IDEKK2ZpCisKK2lmIHRlc3QgISAtciAkR0VORE9DU19URU1QTEFURV9ESVIvZ2VuZG9jc190ZW1wbGF0ZTsgdGhlbgorICBlY2hvICIkMDogY2Fubm90IHJlYWQgJEdFTkRPQ1NfVEVNUExBVEVfRElSL2dlbmRvY3NfdGVtcGxhdGUuIiA+JjIKKyAgZWNobyAiJDA6IGl0IGlzIGF2YWlsYWJsZSBmcm9tICR0ZW1wbGF0ZXVybC4iID4mMgorICBleGl0IDEKK2ZpCisKKyMgRnVuY3Rpb24gdG8gcmV0dXJuIHNpemUgb2YgJDEgaW4gc29tZXRoaW5nIHJlc2VtYmxpbmcga2lsb2J5dGVzLgorY2FsY3NpemUoKQoreworICBzaXplPWBscyAta3NsICQxIHwgYXdrICd7cHJpbnQgJDF9J2AKKyAgZWNobyAkc2l6ZQorfQorCisjIGNvcHlfaW1hZ2VzIE9VVERJUiBIVE1MLUZJTEUuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb3B5IGFsbCB0aGUgaW1hZ2VzIG5lZWRlZCBieSB0aGUgSFRNTC1GSUxFcyBpbnRvIE9VVERJUi4gIExvb2sKKyMgZm9yIHRoZW0gaW4gdGhlIC1JIGRpcmVjdG9yaWVzLgorY29weV9pbWFnZXMoKQoreworICBsb2NhbCBvZGlyCisgIG9kaXI9JDEKKyAgc2hpZnQKKyAgJFBFUkwgLW4gLWUgIgorQkVHSU4geworICBcJG1lID0gJyRwcm9nJzsKKyAgXCRvZGlyID0gJyRvZGlyJzsKKyAgQGRpcnMgPSBxdygkZGlycyk7Cit9CisiIC1lICcKKy88aW1nIHNyYz0iKC4qPykiL2cgJiYgKyskbmVlZHskMX07CisKK0VORCB7CisgICNwcmludCAiJG1lOiBAe1trZXlzICVuZWVkXX1cbiI7ICAjIGZvciBkZWJ1Z2dpbmcsIHNob3cgaW1hZ2VzIGZvdW5kLgorICBGSUxFOiBmb3IgbXkgJGYgKGtleXMgJW5lZWQpIHsKKyAgICBmb3IgbXkgJGQgKEBkaXJzKSB7CisgICAgICBpZiAoLWYgIiRkLyRmIikgeworICAgICAgICB1c2UgRmlsZTo6QmFzZW5hbWU7CisgICAgICAgIG15ICRkZXN0ID0gZGlybmFtZSAoIiRvZGlyLyRmIik7CisgICAgICAgICMKKyAgICAgICAgdXNlIEZpbGU6OlBhdGg7CisgICAgICAgIC1kICRkZXN0IHx8IG1rcGF0aCAoJGRlc3QpCisgICAgICAgICAgfHwgZGllICIkbWU6IGNhbm5vdCBta2RpciAkZGVzdDogJCFcbiI7CisgICAgICAgICMKKyAgICAgICAgdXNlIEZpbGU6OkNvcHk7CisgICAgICAgIGNvcHkgKCIkZC8kZiIsICRkZXN0KQorICAgICAgICAgIHx8IGRpZSAiJG1lOiBjYW5ub3QgY29weSAkZC8kZiB0byAkZGVzdDogJCFcbiI7CisgICAgICAgIG5leHQgRklMRTsKKyAgICAgIH0KKyAgICB9CisgICAgZGllICIkbWU6ICRBUkdWOiBjYW5ub3QgZmluZCBpbWFnZSAkZlxuIjsKKyAgfQorfQorJyAtLSAiJEAiIHx8IGV4aXQgMQorfQorCitjYXNlICRvdXRkaXIgaW4KKyAgLyopIGFic19vdXRkaXI9JG91dGRpcjs7CisgICopICBhYnNfb3V0ZGlyPSRzcmNkaXIvJG91dGRpcjs7Citlc2FjCisKK2VjaG8gIkdlbmVyYXRpbmcgb3V0cHV0IGZvcm1hdHMgZm9yICRzcmNmaWxlIgorCitjbWQ9IiRTRVRMQU5HICRNQUtFSU5GTyAtbyAkUEFDS0FHRS5pbmZvICRjb21tb25hcmcgJGluZm9hcmcgXCIkc3JjZmlsZVwiIgorZWNobyAiR2VuZXJhdGluZyBpbmZvIGZpbGUocykuLi4gKCRjbWQpIgorZXZhbCAiJGNtZCIKK21rZGlyIC1wICIkb3V0ZGlyLyIKK3RhciBjemYgIiRvdXRkaXIvJFBBQ0tBR0UuaW5mby50YXIuZ3oiICRQQUNLQUdFLmluZm8qCitpbmZvX3Rnel9zaXplPWBjYWxjc2l6ZSAiJG91dGRpci8kUEFDS0FHRS5pbmZvLnRhci5neiJgCisjIGRvIG5vdCBtdiB0aGUgaW5mbyBmaWxlcywgdGhlcmUncyBubyBwb2ludCBpbiBoYXZpbmcgdGhlbSBhdmFpbGFibGUKKyMgc2VwYXJhdGVseSBvbiB0aGUgd2ViLgorCitjbWQ9IiRTRVRMQU5HICRURVhJMkRWSSAkY29tbW9uYXJnIFwiJHNyY2ZpbGVcIiIKK2VjaG8gIkdlbmVyYXRpbmcgZHZpIC4uLiAoJGNtZCkiCitldmFsICIkY21kIgorCisjIGNvbXByZXNzL2ZpbmlzaCBkdmk6CitnemlwIC1mIC05ICRQQUNLQUdFLmR2aQorZHZpX2d6X3NpemU9YGNhbGNzaXplICRQQUNLQUdFLmR2aS5nemAKK212ICRQQUNLQUdFLmR2aS5neiAiJG91dGRpci8iCisKK2NtZD0iJFNFVExBTkcgJFRFWEkyRFZJIC0tcGRmICRjb21tb25hcmcgXCIkc3JjZmlsZVwiIgorZWNobyAiR2VuZXJhdGluZyBwZGYgLi4uICgkY21kKSIKK2V2YWwgIiRjbWQiCitwZGZfc2l6ZT1gY2FsY3NpemUgJFBBQ0tBR0UucGRmYAorbXYgJFBBQ0tBR0UucGRmICIkb3V0ZGlyLyIKKworb3B0PSItbyAkUEFDS0FHRS50eHQgLS1uby1zcGxpdCAtLW5vLWhlYWRlcnMgJGNvbW1vbmFyZyIKK2NtZD0iJFNFVExBTkcgJE1BS0VJTkZPICRvcHQgXCIkc3JjZmlsZVwiIgorZWNobyAiR2VuZXJhdGluZyBBU0NJSS4uLiAoJGNtZCkiCitldmFsICIkY21kIgorYXNjaWlfc2l6ZT1gY2FsY3NpemUgJFBBQ0tBR0UudHh0YAorZ3ppcCAtZiAtOSAtYyAkUEFDS0FHRS50eHQgPiIkb3V0ZGlyLyRQQUNLQUdFLnR4dC5neiIKK2FzY2lpX2d6X3NpemU9YGNhbGNzaXplICIkb3V0ZGlyLyRQQUNLQUdFLnR4dC5neiJgCittdiAkUEFDS0FHRS50eHQgIiRvdXRkaXIvIgorCitodG1sX3NwbGl0KCkKK3sKKyAgb3B0PSItLXNwbGl0PSQxICRjb21tb25hcmcgJGh0bWxhcmcgLS1ub2RlLWZpbGVzIgorICBjbWQ9IiRTRVRMQU5HICRURVhJMkhUTUwgLS1vdXRwdXQgJFBBQ0tBR0UuaHRtbCAkb3B0IFwiJHNyY2ZpbGVcIiIKKyAgZWNobyAiR2VuZXJhdGluZyBodG1sIGJ5ICQxLi4uICgkY21kKSIKKyAgZXZhbCAiJGNtZCIKKyAgc3BsaXRfaHRtbF9kaXI9JFBBQ0tBR0UuaHRtbAorICAoCisgICAgY2QgJHtzcGxpdF9odG1sX2Rpcn0gfHwgZXhpdCAxCisgICAgbG4gLXNmICR7UEFDS0FHRX0uaHRtbCBpbmRleC5odG1sCisgICAgdGFyIC1jemYgIiRhYnNfb3V0ZGlyLyR7UEFDS0FHRX0uaHRtbF8kMS50YXIuZ3oiIC0tICouaHRtbAorICApCisgIGV2YWwgaHRtbF8kMV90Z3pfc2l6ZT1gY2FsY3NpemUgIiRvdXRkaXIvJHtQQUNLQUdFfS5odG1sXyQxLnRhci5neiJgCisgIHJtIC1mICIkb3V0ZGlyIi9odG1sXyQxLyouaHRtbAorICBta2RpciAtcCAiJG91dGRpci9odG1sXyQxLyIKKyAgbXYgJHtzcGxpdF9odG1sX2Rpcn0vKi5odG1sICIkb3V0ZGlyL2h0bWxfJDEvIgorICBybWRpciAke3NwbGl0X2h0bWxfZGlyfQorfQorCitpZiB0ZXN0IC16ICIkdXNlX3RleGkyaHRtbCI7IHRoZW4KKyAgb3B0PSItLW5vLXNwbGl0IC0taHRtbCAtbyAkUEFDS0FHRS5odG1sICRjb21tb25hcmcgJGh0bWxhcmciCisgIGNtZD0iJFNFVExBTkcgJE1BS0VJTkZPICRvcHQgXCIkc3JjZmlsZVwiIgorICBlY2hvICJHZW5lcmF0aW5nIG1vbm9saXRoaWMgaHRtbC4uLiAoJGNtZCkiCisgIHJtIC1yZiAkUEFDS0FHRS5odG1sICAjIGluIGNhc2UgYSBkaXJlY3RvcnkgaXMgbGVmdCBvdmVyCisgIGV2YWwgIiRjbWQiCisgIGh0bWxfbW9ub19zaXplPWBjYWxjc2l6ZSAkUEFDS0FHRS5odG1sYAorICBnemlwIC1mIC05IC1jICRQQUNLQUdFLmh0bWwgPiIkb3V0ZGlyLyRQQUNLQUdFLmh0bWwuZ3oiCisgIGh0bWxfbW9ub19nel9zaXplPWBjYWxjc2l6ZSAiJG91dGRpci8kUEFDS0FHRS5odG1sLmd6ImAKKyAgY29weV9pbWFnZXMgIiRvdXRkaXIvIiAkUEFDS0FHRS5odG1sCisgIG12ICRQQUNLQUdFLmh0bWwgIiRvdXRkaXIvIgorCisgIG9wdD0iLS1odG1sIC1vICRQQUNLQUdFLmh0bWwgJGNvbW1vbmFyZyAkaHRtbGFyZyIKKyAgY21kPSIkU0VUTEFORyAkTUFLRUlORk8gJG9wdCBcIiRzcmNmaWxlXCIiCisgIGVjaG8gIkdlbmVyYXRpbmcgaHRtbCBieSBub2RlLi4uICgkY21kKSIKKyAgZXZhbCAiJGNtZCIKKyAgc3BsaXRfaHRtbF9kaXI9JFBBQ0tBR0UuaHRtbAorICBjb3B5X2ltYWdlcyAkc3BsaXRfaHRtbF9kaXIvICRzcGxpdF9odG1sX2Rpci8qLmh0bWwKKyAgKAorICAgIGNkICRzcGxpdF9odG1sX2RpciB8fCBleGl0IDEKKyAgICB0YXIgLWN6ZiAiJGFic19vdXRkaXIvJFBBQ0tBR0UuaHRtbF9ub2RlLnRhci5neiIgLS0gKgorICApCisgIGh0bWxfbm9kZV90Z3pfc2l6ZT1gY2FsY3NpemUgIiRvdXRkaXIvJFBBQ0tBR0UuaHRtbF9ub2RlLnRhci5neiJgCisgIHJtIC1yZiAiJG91dGRpci9odG1sX25vZGUvIgorICBtdiAkc3BsaXRfaHRtbF9kaXIgIiRvdXRkaXIvaHRtbF9ub2RlLyIKK2Vsc2UKKyAgb3B0PSItLW91dHB1dCAkUEFDS0FHRS5odG1sICRjb21tb25hcmcgJGh0bWxhcmciCisgIGNtZD0iJFNFVExBTkcgJFRFWEkySFRNTCAkb3B0IFwiJHNyY2ZpbGVcIiIKKyAgZWNobyAiR2VuZXJhdGluZyBtb25vbGl0aGljIGh0bWwuLi4gKCRjbWQpIgorICBybSAtcmYgJFBBQ0tBR0UuaHRtbCAgIyBpbiBjYXNlIGEgZGlyZWN0b3J5IGlzIGxlZnQgb3ZlcgorICBldmFsICIkY21kIgorICBodG1sX21vbm9fc2l6ZT1gY2FsY3NpemUgJFBBQ0tBR0UuaHRtbGAKKyAgZ3ppcCAtZiAtOSAtYyAkUEFDS0FHRS5odG1sID4iJG91dGRpci8kUEFDS0FHRS5odG1sLmd6IgorICBodG1sX21vbm9fZ3pfc2l6ZT1gY2FsY3NpemUgIiRvdXRkaXIvJFBBQ0tBR0UuaHRtbC5neiJgCisgIG12ICRQQUNLQUdFLmh0bWwgIiRvdXRkaXIvIgorCisgIGh0bWxfc3BsaXQgbm9kZQorICBodG1sX3NwbGl0IGNoYXB0ZXIKKyAgaHRtbF9zcGxpdCBzZWN0aW9uCitmaQorCitlY2hvIE1ha2luZyAudGFyLmd6IGZvciBzb3VyY2VzLi4uCitkPWBkaXJuYW1lICRzcmNmaWxlYAorKAorICBjZCAiJGQiCisgIHNyY2ZpbGVzPWBscyAqLnRleGluZm8gKi50ZXhpICoudHhpICouZXBzIDI+L2Rldi9udWxsYCB8fCB0cnVlCisgIHRhciBjdnpmaCAiJGFic19vdXRkaXIvJFBBQ0tBR0UudGV4aS50YXIuZ3oiICRzcmNmaWxlcworKQordGV4aV90Z3pfc2l6ZT1gY2FsY3NpemUgIiRvdXRkaXIvJFBBQ0tBR0UudGV4aS50YXIuZ3oiYAorCitpZiB0ZXN0IC1uICIkZG9jYm9vayI7IHRoZW4KKyAgb3B0PSItbyAtIC0tZG9jYm9vayAkY29tbW9uYXJnIgorICBjbWQ9IiRTRVRMQU5HICRNQUtFSU5GTyAkb3B0IFwiJHNyY2ZpbGVcIiA+JHtzcmNkaXJ9LyRQQUNLQUdFLWRiLnhtbCIKKyAgZWNobyAiR2VuZXJhdGluZyBkb2Nib29rIFhNTC4uLiAoJGNtZCkiCisgIGV2YWwgIiRjbWQiCisgIGRvY2Jvb2tfeG1sX3NpemU9YGNhbGNzaXplICRQQUNLQUdFLWRiLnhtbGAKKyAgZ3ppcCAtZiAtOSAtYyAkUEFDS0FHRS1kYi54bWwgPiIkb3V0ZGlyLyRQQUNLQUdFLWRiLnhtbC5neiIKKyAgZG9jYm9va194bWxfZ3pfc2l6ZT1gY2FsY3NpemUgIiRvdXRkaXIvJFBBQ0tBR0UtZGIueG1sLmd6ImAKKyAgbXYgJFBBQ0tBR0UtZGIueG1sICIkb3V0ZGlyLyIKKworICBzcGxpdF9odG1sX2RiX2Rpcj1odG1sX25vZGVfZGIKKyAgb3B0PSIkY29tbW9uYXJnIC1vICRzcGxpdF9odG1sX2RiX2RpciIKKyAgY21kPSIkRE9DQk9PSzJIVE1MICRvcHQgXCIke291dGRpcn0vJFBBQ0tBR0UtZGIueG1sXCIiCisgIGVjaG8gIkdlbmVyYXRpbmcgZG9jYm9vayBIVE1MLi4uICgkY21kKSIKKyAgZXZhbCAiJGNtZCIKKyAgKAorICAgIGNkICR7c3BsaXRfaHRtbF9kYl9kaXJ9IHx8IGV4aXQgMQorICAgIHRhciAtY3pmICIkYWJzX291dGRpci8ke1BBQ0tBR0V9Lmh0bWxfbm9kZV9kYi50YXIuZ3oiIC0tICouaHRtbAorICApCisgIGh0bWxfbm9kZV9kYl90Z3pfc2l6ZT1gY2FsY3NpemUgIiRvdXRkaXIvJHtQQUNLQUdFfS5odG1sX25vZGVfZGIudGFyLmd6ImAKKyAgcm0gLWYgIiRvdXRkaXIiL2h0bWxfbm9kZV9kYi8qLmh0bWwKKyAgbWtkaXIgLXAgIiRvdXRkaXIvaHRtbF9ub2RlX2RiIgorICBtdiAke3NwbGl0X2h0bWxfZGJfZGlyfS8qLmh0bWwgIiRvdXRkaXIvaHRtbF9ub2RlX2RiLyIKKyAgcm1kaXIgJHtzcGxpdF9odG1sX2RiX2Rpcn0KKworICBjbWQ9IiRET0NCT09LMlRYVCBcIiR7b3V0ZGlyfS8kUEFDS0FHRS1kYi54bWxcIiIKKyAgZWNobyAiR2VuZXJhdGluZyBkb2Nib29rIEFTQ0lJLi4uICgkY21kKSIKKyAgZXZhbCAiJGNtZCIKKyAgZG9jYm9va19hc2NpaV9zaXplPWBjYWxjc2l6ZSAkUEFDS0FHRS1kYi50eHRgCisgIG12ICRQQUNLQUdFLWRiLnR4dCAiJG91dGRpci8iCisKKyAgY21kPSIkRE9DQk9PSzJQREYgXCIke291dGRpcn0vJFBBQ0tBR0UtZGIueG1sXCIiCisgIGVjaG8gIkdlbmVyYXRpbmcgZG9jYm9vayBQREYuLi4gKCRjbWQpIgorICBldmFsICIkY21kIgorICBkb2Nib29rX3BkZl9zaXplPWBjYWxjc2l6ZSAkUEFDS0FHRS1kYi5wZGZgCisgIG12ICRQQUNLQUdFLWRiLnBkZiAiJG91dGRpci8iCitmaQorCitlY2hvICJXcml0aW5nIGluZGV4IGZpbGUuLi4iCitpZiB0ZXN0IC16ICIkdXNlX3RleGkyaHRtbCI7IHRoZW4KKyAgIENPTkRTPSIvJSVJRiAgKkhUTUxfU0VDVElPTiUlLywvJSVFTkRJRiAgKkhUTUxfU0VDVElPTiUlL2Q7XAorICAgICAgICAgIC8lJUlGICAqSFRNTF9DSEFQVEVSJSUvLC8lJUVORElGICAqSFRNTF9DSEFQVEVSJSUvZCIKK2Vsc2UKKyAgIENPTkRTPSIvJSVFTkRJRi4qJSUvZDsvJSVJRiAgKkhUTUxfU0VDVElPTiUlL2Q7LyUlSUYgICpIVE1MX0NIQVBURVIlJS9kIgorZmkKKworY3VyZGF0ZT1gJFNFVExBTkcgZGF0ZSAnKyVCICVkLCAlWSdgCitzZWQgXAorICAgLWUgInMhJSVUSVRMRSUlISRNQU5VQUxfVElUTEUhZyIgXAorICAgLWUgInMhJSVFTUFJTCUlISRFTUFJTCFnIiBcCisgICAtZSAicyElJVBBQ0tBR0UlJSEkUEFDS0FHRSFnIiBcCisgICAtZSAicyElJURBVEUlJSEkY3VyZGF0ZSFnIiBcCisgICAtZSAicyElJUhUTUxfTU9OT19TSVpFJSUhJGh0bWxfbW9ub19zaXplIWciIFwKKyAgIC1lICJzISUlSFRNTF9NT05PX0daX1NJWkUlJSEkaHRtbF9tb25vX2d6X3NpemUhZyIgXAorICAgLWUgInMhJSVIVE1MX05PREVfVEdaX1NJWkUlJSEkaHRtbF9ub2RlX3Rnel9zaXplIWciIFwKKyAgIC1lICJzISUlSFRNTF9TRUNUSU9OX1RHWl9TSVpFJSUhJGh0bWxfc2VjdGlvbl90Z3pfc2l6ZSFnIiBcCisgICAtZSAicyElJUhUTUxfQ0hBUFRFUl9UR1pfU0laRSUlISRodG1sX2NoYXB0ZXJfdGd6X3NpemUhZyIgXAorICAgLWUgInMhJSVJTkZPX1RHWl9TSVpFJSUhJGluZm9fdGd6X3NpemUhZyIgXAorICAgLWUgInMhJSVEVklfR1pfU0laRSUlISRkdmlfZ3pfc2l6ZSFnIiBcCisgICAtZSAicyElJVBERl9TSVpFJSUhJHBkZl9zaXplIWciIFwKKyAgIC1lICJzISUlQVNDSUlfU0laRSUlISRhc2NpaV9zaXplIWciIFwKKyAgIC1lICJzISUlQVNDSUlfR1pfU0laRSUlISRhc2NpaV9nel9zaXplIWciIFwKKyAgIC1lICJzISUlVEVYSV9UR1pfU0laRSUlISR0ZXhpX3Rnel9zaXplIWciIFwKKyAgIC1lICJzISUlRE9DQk9PS19IVE1MX05PREVfVEdaX1NJWkUlJSEkaHRtbF9ub2RlX2RiX3Rnel9zaXplIWciIFwKKyAgIC1lICJzISUlRE9DQk9PS19BU0NJSV9TSVpFJSUhJGRvY2Jvb2tfYXNjaWlfc2l6ZSFnIiBcCisgICAtZSAicyElJURPQ0JPT0tfUERGX1NJWkUlJSEkZG9jYm9va19wZGZfc2l6ZSFnIiBcCisgICAtZSAicyElJURPQ0JPT0tfWE1MX1NJWkUlJSEkZG9jYm9va194bWxfc2l6ZSFnIiBcCisgICAtZSAicyElJURPQ0JPT0tfWE1MX0daX1NJWkUlJSEkZG9jYm9va194bWxfZ3pfc2l6ZSFnIiBcCisgICAtZSAicywlJVNDUklQVFVSTCUlLCRzY3JpcHR1cmwsZyIgXAorICAgLWUgInMhJSVTQ1JJUFROQU1FJSUhJHByb2chZyIgXAorICAgLWUgIiRDT05EUyIgXAorJEdFTkRPQ1NfVEVNUExBVEVfRElSL2dlbmRvY3NfdGVtcGxhdGUgPiIkb3V0ZGlyL2luZGV4Lmh0bWwiCisKK2VjaG8gIkRvbmUsIHNlZSAkb3V0ZGlyLyBzdWJkaXJlY3RvcnkgZm9yIG5ldyBmaWxlcy4iCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtZW5kOiAiJCIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2dpdC12ZXJzaW9uLWdlbiBiL2J1aWxkLWF1eC9naXQtdmVyc2lvbi1nZW4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGZhOTA2MwotLS0gL2Rldi9udWxsCisrKyBiL2J1aWxkLWF1eC9naXQtdmVyc2lvbi1nZW4KQEAgLTAsMCArMSwyMjAgQEAKKyMhL2Jpbi9zaAorIyBQcmludCBhIHZlcnNpb24gc3RyaW5nLgorc2NyaXB0dmVyc2lvbj0yMDEyLTAzLTE4LjE3OyAjIFVUQworCisjIENvcHlyaWdodCAoQykgMjAwNy0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBUaGlzIHNjcmlwdCBpcyBkZXJpdmVkIGZyb20gR0lULVZFUlNJT04tR0VOIGZyb20gR0lUOiBodHRwOi8vZ2l0Lm9yLmN6Ly4KKyMgSXQgbWF5IGJlIHJ1biB0d28gd2F5czoKKyMgLSBmcm9tIGEgZ2l0IHJlcG9zaXRvcnkgaW4gd2hpY2ggdGhlICJnaXQgZGVzY3JpYmUiIGNvbW1hbmQgYmVsb3cKKyMgICBwcm9kdWNlcyB1c2VmdWwgb3V0cHV0ICh0aHVzIHJlcXVpcmluZyBhdCBsZWFzdCBvbmUgc2lnbmVkIHRhZykKKyMgLSBmcm9tIGEgbm9uLWdpdC1yZXBvIGRpcmVjdG9yeSBjb250YWluaW5nIGEgLnRhcmJhbGwtdmVyc2lvbiBmaWxlLCB3aGljaAorIyAgIHByZXN1bWVzIHRoaXMgc2NyaXB0IGlzIGludm9rZWQgbGlrZSAiLi9naXQtdmVyc2lvbi1nZW4gLnRhcmJhbGwtdmVyc2lvbiIuCisKKyMgSW4gb3JkZXIgdG8gdXNlIGludHJhLXZlcnNpb24gc3RyaW5ncyBpbiB5b3VyIHByb2plY3QsIHlvdSB3aWxsIG5lZWQgdHdvCisjIHNlcGFyYXRlIGdlbmVyYXRlZCB2ZXJzaW9uIHN0cmluZyBmaWxlczoKKyMKKyMgLnRhcmJhbGwtdmVyc2lvbiAtIHByZXNlbnQgb25seSBpbiBhIGRpc3RyaWJ1dGlvbiB0YXJiYWxsLCBhbmQgbm90IGluCisjICAgYSBjaGVja2VkLW91dCByZXBvc2l0b3J5LiAgQ3JlYXRlZCB3aXRoIGNvbnRlbnRzIHRoYXQgd2VyZSBsZWFybmVkIGF0CisjICAgdGhlIGxhc3QgdGltZSBhdXRvY29uZiB3YXMgcnVuLCBhbmQgdXNlZCBieSBnaXQtdmVyc2lvbi1nZW4uICBNdXN0IG5vdAorIyAgIGJlIHByZXNlbnQgaW4gZWl0aGVyICQoc3JjZGlyKSBvciAkKGJ1aWxkZGlyKSBmb3IgZ2l0LXZlcnNpb24tZ2VuIHRvCisjICAgZ2l2ZSBhY2N1cmF0ZSBhbnN3ZXJzIGR1cmluZyBub3JtYWwgZGV2ZWxvcG1lbnQgd2l0aCBhIGNoZWNrZWQgb3V0IHRyZWUsCisjICAgYnV0IG11c3QgYmUgcHJlc2VudCBpbiBhIHRhcmJhbGwgd2hlbiB0aGVyZSBpcyBubyB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtLgorIyAgIFRoZXJlZm9yZSwgaXQgY2Fubm90IGJlIHVzZWQgaW4gYW55IGRlcGVuZGVuY2llcy4gIEdOVW1ha2VmaWxlIGhhcworIyAgIGhvb2tzIHRvIGZvcmNlIGEgcmVjb25maWd1cmUgYXQgZGlzdHJpYnV0aW9uIHRpbWUgdG8gZ2V0IHRoZSB2YWx1ZQorIyAgIGNvcnJlY3QsIHdpdGhvdXQgcGVuYWxpemluZyBub3JtYWwgZGV2ZWxvcG1lbnQgd2l0aCBleHRyYSByZWNvbmZpZ3VyZXMuCisjCisjIC52ZXJzaW9uIC0gcHJlc2VudCBpbiBhIGNoZWNrZWQtb3V0IHJlcG9zaXRvcnkgYW5kIGluIGEgZGlzdHJpYnV0aW9uCisjICAgdGFyYmFsbC4gIFVzYWJsZSBpbiBkZXBlbmRlbmNpZXMsIHBhcnRpY3VsYXJseSBmb3IgZmlsZXMgdGhhdCBkb24ndAorIyAgIHdhbnQgdG8gZGVwZW5kIG9uIGNvbmZpZy5oIGJ1dCBkbyB3YW50IHRvIHRyYWNrIHZlcnNpb24gY2hhbmdlcy4KKyMgICBEZWxldGUgdGhpcyBmaWxlIHByaW9yIHRvIGFueSBhdXRvY29uZiBydW4gd2hlcmUgeW91IHdhbnQgdG8gcmVidWlsZAorIyAgIGZpbGVzIHRvIHBpY2sgdXAgYSB2ZXJzaW9uIHN0cmluZyBjaGFuZ2U7IGFuZCBsZWF2ZSBpdCBzdGFsZSB0bworIyAgIG1pbmltaXplIHJlYnVpbGQgdGltZSBhZnRlciB1bnJlbGF0ZWQgY2hhbmdlcyB0byBjb25maWd1cmUgc291cmNlcy4KKyMKKyMgQXMgd2l0aCBhbnkgZ2VuZXJhdGVkIGZpbGUgaW4gYSBWQydkIGRpcmVjdG9yeSwgeW91IHNob3VsZCBhZGQKKyMgLy52ZXJzaW9uIHRvIC5naXRpZ25vcmUsIHNvIHRoYXQgeW91IGRvbid0IGFjY2lkZW50YWxseSBjb21taXQgaXQuCisjIC50YXJiYWxsLXZlcnNpb24gaXMgbmV2ZXIgZ2VuZXJhdGVkIGluIGEgVkMnZCBkaXJlY3RvcnksIHNvIG5lZWRuJ3QKKyMgYmUgbGlzdGVkIHRoZXJlLgorIworIyBVc2UgdGhlIGZvbGxvd2luZyBsaW5lIGluIHlvdXIgY29uZmlndXJlLmFjLCBzbyB0aGF0ICQoVkVSU0lPTikgd2lsbAorIyBhdXRvbWF0aWNhbGx5IGJlIHVwLXRvLWRhdGUgZWFjaCB0aW1lIGNvbmZpZ3VyZSBpcyBydW4gKGFuZCBub3RlIHRoYXQKKyMgc2luY2UgY29uZmlndXJlLmFjIG5vIGxvbmdlciBpbmNsdWRlcyBhIHZlcnNpb24gc3RyaW5nLCBNYWtlZmlsZSBydWxlcworIyBzaG91bGQgbm90IGRlcGVuZCBvbiBjb25maWd1cmUuYWMgZm9yIHZlcnNpb24gdXBkYXRlcykuCisjCisjIEFDX0lOSVQoW0dOVSBwcm9qZWN0XSwKKyMgICAgICAgICBtNF9lc3lzY21kKFtidWlsZC1hdXgvZ2l0LXZlcnNpb24tZ2VuIC50YXJiYWxsLXZlcnNpb25dKSwKKyMgICAgICAgICBbYnVnLXByb2plY3RAZXhhbXBsZV0pCisjCisjIFRoZW4gdXNlIHRoZSBmb2xsb3dpbmcgbGluZXMgaW4geW91ciBNYWtlZmlsZS5hbSwgc28gdGhhdCAudmVyc2lvbgorIyB3aWxsIGJlIHByZXNlbnQgZm9yIGRlcGVuZGVuY2llcywgYW5kIHNvIHRoYXQgLnZlcnNpb24gYW5kCisjIC50YXJiYWxsLXZlcnNpb24gd2lsbCBleGlzdCBpbiBkaXN0cmlidXRpb24gdGFyYmFsbHMuCisjCisjIEVYVFJBX0RJU1QgPSAkKHRvcF9zcmNkaXIpLy52ZXJzaW9uCisjIEJVSUxUX1NPVVJDRVMgPSAkKHRvcF9zcmNkaXIpLy52ZXJzaW9uCisjICQodG9wX3NyY2RpcikvLnZlcnNpb246CisjCWVjaG8gJChWRVJTSU9OKSA+ICRALXQgJiYgbXYgJEAtdCAkQAorIyBkaXN0LWhvb2s6CisjCWVjaG8gJChWRVJTSU9OKSA+ICQoZGlzdGRpcikvLnRhcmJhbGwtdmVyc2lvbgorCisKK21lPSQwCisKK3ZlcnNpb249ImdpdC12ZXJzaW9uLWdlbiAkc2NyaXB0dmVyc2lvbgorCitDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoZXJlIGlzIE5PIHdhcnJhbnR5LiAgWW91IG1heSByZWRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK0ZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZXNlIG1hdHRlcnMsIHNlZSB0aGUgZmlsZXMgbmFtZWQgQ09QWUlORy4iCisKK3VzYWdlPSJcCitVc2FnZTogJG1lIFtPUFRJT05dLi4uIFwkc3JjZGlyLy50YXJiYWxsLXZlcnNpb24gW1RBRy1OT1JNQUxJWkFUSU9OLVNFRC1TQ1JJUFRdCitQcmludCBhIHZlcnNpb24gc3RyaW5nLgorCitPcHRpb25zOgorCisgICAtLXByZWZpeCAgICAgICAgICAgcHJlZml4IG9mIGdpdCB0YWdzIChkZWZhdWx0ICd2JykKKworICAgLS1oZWxwICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0CisgICAtLXZlcnNpb24gICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKworUnVubmluZyB3aXRob3V0IGFyZ3VtZW50cyB3aWxsIHN1ZmZpY2UgaW4gbW9zdCBjYXNlcy4iCisKK3ByZWZpeD12CisKK3doaWxlIHRlc3QgJCMgLWd0IDA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLWhlbHApIGVjaG8gIiR1c2FnZSI7IGV4aXQgMDs7CisgICAgLS12ZXJzaW9uKSBlY2hvICIkdmVyc2lvbiI7IGV4aXQgMDs7CisgICAgLS1wcmVmaXgpIHNoaWZ0OyBwcmVmaXg9IiQxIjs7CisgICAgLSopCisgICAgICBlY2hvICIkMDogVW5rbm93biBvcHRpb24gJyQxJy4iID4mMgorICAgICAgZWNobyAiJDA6IFRyeSAnLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMgorICAgICAgZXhpdCAxOzsKKyAgICAqKQorICAgICAgaWYgdGVzdCAteiAiJHRhcmJhbGxfdmVyc2lvbl9maWxlIjsgdGhlbgorICAgICAgICB0YXJiYWxsX3ZlcnNpb25fZmlsZT0iJDEiCisgICAgICBlbGlmIHRlc3QgLXogIiR0YWdfc2VkX3NjcmlwdCI7IHRoZW4KKyAgICAgICAgdGFnX3NlZF9zY3JpcHQ9IiQxIgorICAgICAgZWxzZQorICAgICAgICBlY2hvICIkMDogZXh0cmEgbm9uLW9wdGlvbiBhcmd1bWVudCAnJDEnLiIgPiYyCisgICAgICAgIGV4aXQgMQorICAgICAgZmk7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK2lmIHRlc3QgLXogIiR0YXJiYWxsX3ZlcnNpb25fZmlsZSI7IHRoZW4KKyAgICBlY2hvICIkdXNhZ2UiCisgICAgZXhpdCAxCitmaQorCit0YWdfc2VkX3NjcmlwdD0iJHt0YWdfc2VkX3NjcmlwdDotcy94L3gvfSIKKworbmw9JworJworCisjIEF2b2lkIG1lZGRsaW5nIGJ5IGVudmlyb25tZW50IHZhcmlhYmxlIG9mIHRoZSBzYW1lIG5hbWUuCit2PQordl9mcm9tX2dpdD0KKworIyBGaXJzdCBzZWUgaWYgdGhlcmUgaXMgYSB0YXJiYWxsLW9ubHkgdmVyc2lvbiBmaWxlLgorIyB0aGVuIHRyeSAiZ2l0IGRlc2NyaWJlIiwgdGhlbiBkZWZhdWx0LgoraWYgdGVzdCAtZiAkdGFyYmFsbF92ZXJzaW9uX2ZpbGUKK3RoZW4KKyAgICB2PWBjYXQgJHRhcmJhbGxfdmVyc2lvbl9maWxlYCB8fCB2PQorICAgIGNhc2UgJHYgaW4KKyAgICAgICAgKiRubCopIHY9IDs7ICMgcmVqZWN0IG11bHRpLWxpbmUgb3V0cHV0CisgICAgICAgIFswLTldKikgOzsKKyAgICAgICAgKikgdj0gOzsKKyAgICBlc2FjCisgICAgdGVzdCAteiAiJHYiIFwKKyAgICAgICAgJiYgZWNobyAiJDA6IFdBUk5JTkc6ICR0YXJiYWxsX3ZlcnNpb25fZmlsZSBpcyBtaXNzaW5nIG9yIGRhbWFnZWQiIDE+JjIKK2ZpCisKK2lmIHRlc3QgLW4gIiR2IgordGhlbgorICAgIDogIyB1c2UgJHYKKyMgT3RoZXJ3aXNlLCBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgZ2l0IGNvbW1pdCBpbnZvbHZpbmcgdGhlIHdvcmtpbmcKKyMgZGlyZWN0b3J5LCBhbmQgImdpdCBkZXNjcmliZSIgb3V0cHV0IGxvb2tzIHNlbnNpYmxlLCB1c2UgdGhhdCB0bworIyBkZXJpdmUgYSB2ZXJzaW9uIHN0cmluZy4KK2VsaWYgdGVzdCAiYGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OnggLiAyPiYxYCIgPSB4IFwKKyAgICAmJiB2PWBnaXQgZGVzY3JpYmUgLS1hYmJyZXY9NCAtLW1hdGNoPSIkcHJlZml4KiIgSEVBRCAyPi9kZXYvbnVsbCBcCisgICAgICAgICAgfHwgZ2l0IGRlc2NyaWJlIC0tYWJicmV2PTQgSEVBRCAyPi9kZXYvbnVsbGAgXAorICAgICYmIHY9YHByaW50ZiAnJXNcbicgIiR2IiB8IHNlZCAiJHRhZ19zZWRfc2NyaXB0ImAgXAorICAgICYmIGNhc2UgJHYgaW4KKyAgICAgICAgICRwcmVmaXhbMC05XSopIDs7CisgICAgICAgICAqKSAoZXhpdCAxKSA7OworICAgICAgIGVzYWMKK3RoZW4KKyAgICAjIElzIHRoaXMgYSBuZXcgZ2l0IHRoYXQgbGlzdHMgbnVtYmVyIG9mIGNvbW1pdHMgc2luY2UgdGhlIGxhc3QKKyAgICAjIHRhZyBvciB0aGUgcHJldmlvdXMgb2xkZXIgdmVyc2lvbiB0aGF0IGRpZCBub3Q/CisgICAgIyAgIE5ld2VyOiB2Ni4xMC03Ny1nMGY4ZmFlYgorICAgICMgICBPbGRlcjogdjYuMTAtZzBmOGZhZWIKKyAgICBjYXNlICR2IGluCisgICAgICAgICotKi0qKSA6IGdpdCBkZXNjcmliZSBpcyBva2F5IHRocmVlIHBhcnQgZmxhdm9yIDs7CisgICAgICAgICotKikKKyAgICAgICAgICAgIDogZ2l0IGRlc2NyaWJlIGlzIG9sZGVyIHR3byBwYXJ0IGZsYXZvcgorICAgICAgICAgICAgIyBSZWNyZWF0ZSB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgYW5kIHJld3JpdGUgc3VjaCB0aGF0IHRoZQorICAgICAgICAgICAgIyByZXN1bHQgaXMgdGhlIHNhbWUgYXMgaWYgd2Ugd2VyZSB1c2luZyB0aGUgbmV3ZXIgdmVyc2lvbgorICAgICAgICAgICAgIyBvZiBnaXQgZGVzY3JpYmUuCisgICAgICAgICAgICB2dGFnPWBlY2hvICIkdiIgfCBzZWQgJ3MvLS4qLy8nYAorICAgICAgICAgICAgY29tbWl0X2xpc3Q9YGdpdCByZXYtbGlzdCAiJHZ0YWciLi5IRUFEIDI+L2Rldi9udWxsYCBcCisgICAgICAgICAgICAgICAgfHwgeyBjb21taXRfbGlzdD1mYWlsZWQ7CisgICAgICAgICAgICAgICAgICAgICBlY2hvICIkMDogV0FSTklORzogZ2l0IHJldi1saXN0IGZhaWxlZCIgMT4mMjsgfQorICAgICAgICAgICAgbnVtY29tbWl0cz1gZWNobyAiJGNvbW1pdF9saXN0IiB8IHdjIC1sYAorICAgICAgICAgICAgdj1gZWNobyAiJHYiIHwgc2VkICJzL1woLipcKS1cKC4qXCkvXDEtJG51bWNvbW1pdHMtXDIvImA7CisgICAgICAgICAgICB0ZXN0ICIkY29tbWl0X2xpc3QiID0gZmFpbGVkICYmIHY9VU5LTk9XTgorICAgICAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIENoYW5nZSB0aGUgZmlyc3QgJy0nIHRvIGEgJy4nLCBzbyB2ZXJzaW9uLWNvbXBhcmluZyB0b29scyB3b3JrIHByb3Blcmx5LgorICAgICMgUmVtb3ZlIHRoZSAiZyIgaW4gZ2l0IGRlc2NyaWJlJ3Mgb3V0cHV0IHN0cmluZywgdG8gc2F2ZSBhIGJ5dGUuCisgICAgdj1gZWNobyAiJHYiIHwgc2VkICdzLy0vLi87cy9cKC4qXCktZy9cMS0vJ2A7CisgICAgdl9mcm9tX2dpdD0xCitlbHNlCisgICAgdj1VTktOT1dOCitmaQorCit2PWBlY2hvICIkdiIgfHNlZCAicy9eJHByZWZpeC8vImAKKworIyBUZXN0IHdoZXRoZXIgdG8gYXBwZW5kIHRoZSAiLWRpcnR5IiBzdWZmaXggb25seSBpZiB0aGUgdmVyc2lvbgorIyBzdHJpbmcgd2UncmUgdXNpbmcgY2FtZSBmcm9tIGdpdC4gIEkuZS4sIHNraXAgdGhlIHRlc3QgaWYgaXQncyAiVU5LTk9XTiIKKyMgb3IgaWYgaXQgY2FtZSBmcm9tIC50YXJiYWxsLXZlcnNpb24uCitpZiB0ZXN0IC1uICIkdl9mcm9tX2dpdCI7IHRoZW4KKyAgIyBEb24ndCBkZWNsYXJlIGEgdmVyc2lvbiAiZGlydHkiIG1lcmVseSBiZWNhdXNlIGEgdGltZSBzdGFtcCBoYXMgY2hhbmdlZC4KKyAgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggPiAvZGV2L251bGwgMj4mMQorCisgIGRpcnR5PWBleGVjIDI+L2Rldi9udWxsO2dpdCBkaWZmLWluZGV4IC0tbmFtZS1vbmx5IEhFQURgIHx8IGRpcnR5PQorICBjYXNlICIkZGlydHkiIGluCisgICAgICAnJykgOzsKKyAgICAgICopICMgQXBwZW5kIHRoZSBzdWZmaXggb25seSBpZiB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeS4KKyAgICAgICAgICBjYXNlICR2IGluCisgICAgICAgICAgICAqLWRpcnR5KSA7OworICAgICAgICAgICAgKikgdj0iJHYtZGlydHkiIDs7CisgICAgICAgICAgZXNhYyA7OworICBlc2FjCitmaQorCisjIE9taXQgdGhlIHRyYWlsaW5nIG5ld2xpbmUsIHNvIHRoYXQgbTRfZXN5c2NtZCBjYW4gdXNlIHRoZSByZXN1bHQgZGlyZWN0bHkuCitlY2hvICIkdiIgfCB0ciAtZCAiJG5sIgorCisjIExvY2FsIHZhcmlhYmxlczoKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9idWlsZC1hdXgvZ2l0bG9nLXRvLWNoYW5nZWxvZyBiL2J1aWxkLWF1eC9naXRsb2ctdG8tY2hhbmdlbG9nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUxODRlZGMKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsZC1hdXgvZ2l0bG9nLXRvLWNoYW5nZWxvZwpAQCAtMCwwICsxLDQzMiBAQAorZXZhbCAnKGV4aXQgJD8wKScgJiYgZXZhbCAnZXhlYyBwZXJsIC13UyAiJDAiICR7MSsiJEAifScKKyAgJiBldmFsICdleGVjIHBlcmwgLXdTICIkMCIgJGFyZ3Y6cScKKyAgICBpZiAwOworIyBDb252ZXJ0IGdpdCBsb2cgb3V0cHV0IHRvIENoYW5nZUxvZyBmb3JtYXQuCisKK215ICRWRVJTSU9OID0gJzIwMTItMDctMjkgMDY6MTEnOyAjIFVUQworIyBUaGUgZGVmaW5pdGlvbiBhYm92ZSBtdXN0IGxpZSB3aXRoaW4gdGhlIGZpcnN0IDggbGluZXMgaW4gb3JkZXIKKyMgZm9yIHRoZSBFbWFjcyB0aW1lLXN0YW1wIHdyaXRlIGhvb2sgKGF0IGVuZCkgdG8gdXBkYXRlIGl0LgorIyBJZiB5b3UgY2hhbmdlIHRoaXMgZmlsZSB3aXRoIEVtYWNzLCBwbGVhc2UgbGV0IHRoZSB3cml0ZSBob29rCisjIGRvIGl0cyBqb2IuICBPdGhlcndpc2UsIHVwZGF0ZSB0aGlzIHN0cmluZyBtYW51YWxseS4KKworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgV3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBHZXRvcHQ6Okxvbmc7Cit1c2UgUE9TSVggcXcoc3RyZnRpbWUpOworCisobXkgJE1FID0gJDApID1+IHN8LiovfHw7CisKKyMgdXNlIEZpbGU6OkNvZGE7ICMgaHR0cDovL21leWVyaW5nLm5ldC9jb2RlL0NvZGEvCitFTkQgeworICBkZWZpbmVkIGZpbGVubyBTVERPVVQgb3IgcmV0dXJuOworICBjbG9zZSBTVERPVVQgYW5kIHJldHVybjsKKyAgd2FybiAiJE1FOiBmYWlsZWQgdG8gY2xvc2Ugc3RhbmRhcmQgb3V0cHV0OiAkIVxuIjsKKyAgJD8gfHw9IDE7Cit9CisKK3N1YiB1c2FnZSAoJCkKK3sKKyAgbXkgKCRleGl0X2NvZGUpID0gQF87CisgIG15ICRTVFJFQU0gPSAoJGV4aXRfY29kZSA9PSAwID8gKlNURE9VVCA6ICpTVERFUlIpOworICBpZiAoJGV4aXRfY29kZSAhPSAwKQorICAgIHsKKyAgICAgIHByaW50ICRTVFJFQU0gIlRyeSAnJE1FIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHByaW50ICRTVFJFQU0gPDxFT0Y7CitVc2FnZTogJE1FIFtPUFRJT05TXSBbQVJHU10KKworQ29udmVydCBnaXQgbG9nIG91dHB1dCB0byBDaGFuZ2VMb2cgZm9ybWF0LiAgSWYgcHJlc2VudCwgYW55IEFSR1MKK2FyZSBwYXNzZWQgdG8gImdpdCBsb2ciLiAgVG8gYXZvaWQgQVJHUyBiZWluZyBwYXJzZWQgYXMgb3B0aW9ucyB0bworJE1FLCB0aGV5IG1heSBiZSBwcmVjZWRlZCBieSAnLS0nLgorCitPUFRJT05TOgorCisgICAtLWFtZW5kPUZJTEUgRklMRSBtYXBzIGZyb20gYW4gU0hBMSB0byBwZXJsIGNvZGUgKGkuZS4sIHMvb2xkL25ldy8pIHRoYXQKKyAgICAgICAgICAgICAgICAgIG1ha2VzIGEgY2hhbmdlIHRvIFNIQTEncyBjb21taXQgbG9nIHRleHQgb3IgbWV0YWRhdGEuCisgICAtLWFwcGVuZC1kb3QgYXBwZW5kIGEgZG90IHRvIHRoZSBmaXJzdCBsaW5lIG9mIGVhY2ggY29tbWl0IG1lc3NhZ2UgaWYKKyAgICAgICAgICAgICAgICAgIHRoZXJlIGlzIG5vIG90aGVyIHB1bmN0dWF0aW9uIG9yIGJsYW5rIGF0IHRoZSBlbmQuCisgICAtLW5vLWNsdXN0ZXIgbmV2ZXIgY2x1c3RlciBjb21taXQgbWVzc2FnZXMgdW5kZXIgdGhlIHNhbWUgZGF0ZS9hdXRob3IKKyAgICAgICAgICAgICAgICAgIGhlYWRlcjsgdGhlIGRlZmF1bHQgaXMgdG8gY2x1c3RlciBhZGphY2VudCBjb21taXQgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICAgIGlmIHRoZWlyIGhlYWRlcnMgYXJlIHRoZSBzYW1lIGFuZCBuZWl0aGVyIGNvbW1pdCBtZXNzYWdlCisgICAgICAgICAgICAgICAgICBjb250YWlucyBtdWx0aXBsZSBwYXJhZ3JhcGhzLgorICAgLS1zcmNkaXI9RElSIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZSwgZnJvbSB3aGljaCB0aGUgLmdpdC8KKyAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBjYW4gYmUgZGVyaXZlZC4KKyAgIC0tc2luY2U9REFURSBjb252ZXJ0IG9ubHkgdGhlIGxvZ3Mgc2luY2UgREFURTsKKyAgICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0IGlzIHRvIGNvbnZlcnQgYWxsIGxvZyBlbnRyaWVzLgorICAgLS1mb3JtYXQ9Rk1UIHNldCBmb3JtYXQgc3RyaW5nIGZvciBjb21taXQgc3ViamVjdCBhbmQgYm9keTsKKyAgICAgICAgICAgICAgICAgIHNlZSAnbWFuIGdpdC1sb2cnIGZvciB0aGUgbGlzdCBvZiBmb3JtYXQgbWV0YWNoYXJhY3RlcnM7CisgICAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCBpcyAnJXMlbiViJW4nCisgICAtLXN0cmlwLXRhYiAgcmVtb3ZlIG9uZSBhZGRpdGlvbmFsIGxlYWRpbmcgVEFCIGZyb20gY29tbWl0IG1lc3NhZ2UgbGluZXMuCisgICAtLXN0cmlwLWNoZXJyeS1waWNrICByZW1vdmUgZGF0YSBpbnNlcnRlZCBieSAiZ2l0IGNoZXJyeS1waWNrIjsKKyAgICAgICAgICAgICAgICAgIHRoaXMgaW5jbHVkZXMgdGhlICJjaGVycnkgcGlja2VkIGZyb20gY29tbWl0IC4uLiIgbGluZSwKKyAgICAgICAgICAgICAgICAgIGFuZCB0aGUgcG9zc2libGUgZmluYWwgIkNvbmZsaWN0czoiIHBhcmFncmFwaC4KKyAgIC0taGVscCAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAorICAgLS12ZXJzaW9uICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisKK0VYQU1QTEU6CisKKyAgJE1FIC0tc2luY2U9MjAwOC0wMS0wMSA+IENoYW5nZUxvZworICAkTUUgLS0gLW4gNSBmb28gPiBsYXN0LTUtY29tbWl0cy10by1icmFuY2gtZm9vCisKK1NQRUNJQUwgU1lOVEFYOgorCitUaGUgZm9sbG93aW5nIHR5cGVzIG9mIHN0cmluZ3MgYXJlIGludGVycHJldGVkIHNwZWNpYWxseSB3aGVuIHRoZXkgYXBwZWFyCithdCB0aGUgYmVnaW5uaW5nIG9mIGEgbG9nIG1lc3NhZ2UgbGluZS4gIFRoZXkgYXJlIG5vdCBjb3BpZWQgdG8gdGhlIG91dHB1dC4KKworICBDb3B5cmlnaHQtcGFwZXJ3b3JrLWV4ZW1wdDogWWVzCisgICAgQXBwZW5kIHRoZSAiKHRpbnkgY2hhbmdlKSIgbm90YXRpb24gdG8gdGhlIHVzdWFsICJkYXRlIG5hbWUgZW1haWwiCisgICAgQ2hhbmdlTG9nIGhlYWRlciB0byBtYXJrIGEgY2hhbmdlIHRoYXQgZG9lcyBub3QgcmVxdWlyZSBhIGNvcHlyaWdodAorICAgIGFzc2lnbm1lbnQuCisgIENvLWF1dGhvcmVkLWJ5OiBKb2UgVXNlciA8dXNlclxAZXhhbXBsZS5jb20+CisgICAgTGlzdCB0aGUgc3BlY2lmaWVkIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgb24gYSBzZWNvbmQKKyAgICBDaGFuZ2VMb2cgaGVhZGVyLCBkZW5vdGluZyBhIGNvLWF1dGhvci4KKyAgU2lnbmVkLW9mZi1ieTogSm9lIFVzZXIgPHVzZXJcQGV4YW1wbGUuY29tPgorICAgIFRoZXNlIGxpbmVzIGFyZSBzaW1wbHkgZWxpZGVkLgorCitJbiBhIEZJTEUgc3BlY2lmaWVkIHZpYSAtLWFtZW5kLCBjb21tZW50IGxpbmVzIChzdGFydGluZyB3aXRoICIjIikgYXJlIGlnbm9yZWQuCitGSUxFIG11c3QgY29uc2lzdCBvZiA8U0hBLENPREUrPiBwYWlycyB3aGVyZSBTSEEgaXMgYSA0MC1ieXRlIFNIQTEgKGFsb25lIG9uCithIGxpbmUpIHJlZmVycmluZyB0byBhIGNvbW1pdCBpbiB0aGUgY3VycmVudCBwcm9qZWN0LCBhbmQgQ09ERSByZWZlcnMgdG8gb25lCitvciBtb3JlIGNvbnNlY3V0aXZlIGxpbmVzIG9mIFBlcmwgY29kZS4gIFBhaXJzIG11c3QgYmUgc2VwYXJhdGVkIGJ5IG9uZSBvcgorbW9yZSBibGFuayBsaW5lLgorCitIZXJlIGlzIHNhbXBsZSBpbnB1dCBmb3IgdXNlIHdpdGggLS1hbWVuZD1GSUxFLCBmcm9tIGNvcmV1dGlsczoKKworM2ExNjlmNGM1ZDkxNTkyODM1NDgxNzg2NjhkMmZhZTZmY2VkMzAzMAorIyBmaXggdHlwbyBpbiB0aXRsZToKK3MvYWxsIHRpbGUgdHlwZXMvYWxsIGZpbGUgdHlwZXMvCisKKzEzNzllZDk3NGYxZmEzOWIxMmUyZmZhYjE4YjNmN2E2MDcwODIyMDIKKyMgRHVlIHRvIGEgYnVnIGluIHZjLWR3aW0sIEkgbWlzLWF0dHJpYnV0ZWQgYSBwYXRjaCBieSBQYXVsIHRvIG15c2VsZi4KKyMgQ2hhbmdlIHRoZSBhdXRob3IgdG8gYmUgUGF1bC4gIE5vdGUgdGhlIGVzY2FwZWQgIkAiOgorcyxKaW0gLio+LFBhdWwgRWdnZXJ0IDxlZ2dlcnRcXFxAY3MudWNsYS5lZHU+LAorCitFT0YKKyAgICB9CisgIGV4aXQgJGV4aXRfY29kZTsKK30KKworIyBJZiB0aGUgc3RyaW5nICRTIGlzIGEgd2VsbC1iZWhhdmVkIGZpbGUgbmFtZSwgc2ltcGx5IHJldHVybiBpdC4KKyMgSWYgaXQgY29udGFpbnMgd2hpdGUgc3BhY2UsIHF1b3RlcywgZXRjLiwgcXVvdGUgaXQsIGFuZCByZXR1cm4gdGhlIG5ldyBzdHJpbmcuCitzdWIgc2hlbGxfcXVvdGUoJCkKK3sKKyAgbXkgKCRzKSA9IEBfOworICBpZiAoJHMgPX4gbSFbXlx3Ky8uLC1dISkKKyAgICB7CisgICAgICAjIENvbnZlcnQgZWFjaCBzaW5nbGUgcXVvdGUgdG8gJ1wnJworICAgICAgJHMgPX4gcy9cJy9cJ1xcXCdcJy9nOworICAgICAgIyBUaGVuIHNpbmdsZSBxdW90ZSB0aGUgc3RyaW5nLgorICAgICAgJHMgPSAiJyRzJyI7CisgICAgfQorICByZXR1cm4gJHM7Cit9CisKK3N1YiBxdW90ZWRfY21kKEApCit7CisgIHJldHVybiBqb2luICgnICcsIG1hcCB7c2hlbGxfcXVvdGUgJF99IEBfKTsKK30KKworIyBQYXJzZSBmaWxlIEYuCisjIENvbW1lbnQgbGluZXMgKHN0YXJ0aW5nIHdpdGggIiMiKSBhcmUgaWdub3JlZC4KKyMgRiBtdXN0IGNvbnNpc3Qgb2YgPFNIQSxDT0RFKz4gcGFpcnMgd2hlcmUgU0hBIGlzIGEgNDAtYnl0ZSBTSEExCisjIChhbG9uZSBvbiBhIGxpbmUpIHJlZmVycmluZyB0byBhIGNvbW1pdCBpbiB0aGUgY3VycmVudCBwcm9qZWN0LCBhbmQKKyMgQ09ERSByZWZlcnMgdG8gb25lIG9yIG1vcmUgY29uc2VjdXRpdmUgbGluZXMgb2YgUGVybCBjb2RlLgorIyBQYWlycyBtdXN0IGJlIHNlcGFyYXRlZCBieSBvbmUgb3IgbW9yZSBibGFuayBsaW5lLgorc3ViIHBhcnNlX2FtZW5kX2ZpbGUoJCkKK3sKKyAgbXkgKCRmKSA9IEBfOworCisgIG9wZW4gRiwgJzwnLCAkZgorICAgIG9yIGRpZSAiJE1FOiAkZjogZmFpbGVkIHRvIG9wZW4gZm9yIHJlYWRpbmc6ICQhXG4iOworCisgIG15ICRmYWlsOworICBteSAkaCA9IHt9OworICBteSAkaW5fY29kZSA9IDA7CisgIG15ICRzaGE7CisgIHdoaWxlIChkZWZpbmVkIChteSAkbGluZSA9IDxGPikpCisgICAgeworICAgICAgJGxpbmUgPX4gL15cIy8KKyAgICAgICAgYW5kIG5leHQ7CisgICAgICBjaG9tcCAkbGluZTsKKyAgICAgICRsaW5lIGVxICcnCisgICAgICAgIGFuZCAkaW5fY29kZSA9IDAsIG5leHQ7CisKKyAgICAgIGlmICghJGluX2NvZGUpCisgICAgICAgIHsKKyAgICAgICAgICAkbGluZSA9fiAvXihbMC05YS1mQS1GXXs0MH0pJC8KKyAgICAgICAgICAgIG9yICh3YXJuICIkTUU6ICRmOiQuOiBpbnZhbGlkIGxpbmU7IGV4cGVjdGVkIGFuIFNIQTFcbiIpLAorICAgICAgICAgICAgICAkZmFpbCA9IDEsIG5leHQ7CisgICAgICAgICAgJHNoYSA9IGxjICQxOworICAgICAgICAgICRpbl9jb2RlID0gMTsKKyAgICAgICAgICBleGlzdHMgJGgtPnskc2hhfQorICAgICAgICAgICAgYW5kICh3YXJuICIkTUU6ICRmOiQuOiBkdXBsaWNhdGUgU0hBMVxuIiksCisgICAgICAgICAgICAgICRmYWlsID0gMSwgbmV4dDsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgJGgtPnskc2hhfSB8fD0gJyc7CisgICAgICAgICAgJGgtPnskc2hhfSAuPSAiJGxpbmVcbiI7CisgICAgICAgIH0KKyAgICB9CisgIGNsb3NlIEY7CisKKyAgJGZhaWwKKyAgICBhbmQgZXhpdCAxOworCisgIHJldHVybiAkaDsKK30KKworIyBnaXRfZGlyX29wdGlvbiAkU1JDRElSCisjCisjIEZyb20gJFNSQ0RJUiwgdGhlIC0tZ2l0LWRpciBvcHRpb24gdG8gcGFzcyB0byBnaXQgKG5vbmUgaWYgJFNSQ0RJUgorIyBpcyB1bmRlZikuICBSZXR1cm4gYXMgYSBsaXN0ICgwIG9yIDEgZWxlbWVudCkuCitzdWIgZ2l0X2Rpcl9vcHRpb24oJCkKK3sKKyAgbXkgKCRzcmNkaXIpID0gQF87CisgIG15IEByZXMgPSAoKTsKKyAgaWYgKGRlZmluZWQgJHNyY2RpcikKKyAgICB7CisgICAgICBteSAkcWRpciA9IHNoZWxsX3F1b3RlICRzcmNkaXI7CisgICAgICBteSAkY21kID0gImNkICRxZGlyICYmIGdpdCByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsIjsKKyAgICAgIG15ICRxY21kID0gc2hlbGxfcXVvdGUgJGNtZDsKKyAgICAgIG15ICRnaXRfZGlyID0gcXgoJGNtZCk7CisgICAgICBkZWZpbmVkICRnaXRfZGlyCisgICAgICAgIG9yIGRpZSAiJE1FOiBjYW5ub3QgcnVuICRxY21kOiAkIVxuIjsKKyAgICAgICQ/ID09IDAKKyAgICAgICAgb3IgZGllICIkTUU6ICRxY21kIGhhZCB1bmV4cGVjdGVkIGV4aXQgY29kZSBvciBzaWduYWwgKCQ/KVxuIjsKKyAgICAgIGNob21wICRnaXRfZGlyOworICAgICAgcHVzaCBAcmVzLCAiLS1naXQtZGlyPSRnaXRfZGlyLy5naXQiOworICAgIH0KKyAgQHJlczsKK30KKworeworICBteSAkc2luY2VfZGF0ZTsKKyAgbXkgJGZvcm1hdF9zdHJpbmcgPSAnJXMlbiViJW4nOworICBteSAkYW1lbmRfZmlsZTsKKyAgbXkgJGFwcGVuZF9kb3QgPSAwOworICBteSAkY2x1c3RlciA9IDE7CisgIG15ICRzdHJpcF90YWIgPSAwOworICBteSAkc3RyaXBfY2hlcnJ5X3BpY2sgPSAwOworICBteSAkc3JjZGlyOworICBHZXRPcHRpb25zCisgICAgKAorICAgICBoZWxwID0+IHN1YiB7IHVzYWdlIDAgfSwKKyAgICAgdmVyc2lvbiA9PiBzdWIgeyBwcmludCAiJE1FIHZlcnNpb24gJFZFUlNJT05cbiI7IGV4aXQgfSwKKyAgICAgJ3NpbmNlPXMnID0+IFwkc2luY2VfZGF0ZSwKKyAgICAgJ2Zvcm1hdD1zJyA9PiBcJGZvcm1hdF9zdHJpbmcsCisgICAgICdhbWVuZD1zJyA9PiBcJGFtZW5kX2ZpbGUsCisgICAgICdhcHBlbmQtZG90JyA9PiBcJGFwcGVuZF9kb3QsCisgICAgICdjbHVzdGVyIScgPT4gXCRjbHVzdGVyLAorICAgICAnc3RyaXAtdGFiJyA9PiBcJHN0cmlwX3RhYiwKKyAgICAgJ3N0cmlwLWNoZXJyeS1waWNrJyA9PiBcJHN0cmlwX2NoZXJyeV9waWNrLAorICAgICAnc3JjZGlyPXMnID0+IFwkc3JjZGlyLAorICAgICkgb3IgdXNhZ2UgMTsKKworICBkZWZpbmVkICRzaW5jZV9kYXRlCisgICAgYW5kIHVuc2hpZnQgQEFSR1YsICItLXNpbmNlPSRzaW5jZV9kYXRlIjsKKworICAjIFRoaXMgaXMgYSBoYXNoIHRoYXQgbWFwcyBhbiBTSEExIHRvIHBlcmwgY29kZSAoaS5lLiwgcy9vbGQvbmV3LykKKyAgIyB0aGF0IG1ha2VzIGEgY29ycmVjdGlvbiBpbiB0aGUgbG9nIG9yIGF0dHJpYnV0aW9uIG9mIHRoYXQgY29tbWl0LgorICBteSAkYW1lbmRfY29kZSA9IGRlZmluZWQgJGFtZW5kX2ZpbGUgPyBwYXJzZV9hbWVuZF9maWxlICRhbWVuZF9maWxlIDoge307CisKKyAgbXkgQGNtZCA9ICgnZ2l0JywKKyAgICAgICAgICAgICBnaXRfZGlyX29wdGlvbiAkc3JjZGlyLAorICAgICAgICAgICAgIHF3KGxvZyAtLWxvZy1zaXplKSwKKyAgICAgICAgICAgICAnLS1wcmV0dHk9Zm9ybWF0OiVIOiVjdCAgJWFuICA8JWFlPiVuJW4nLiRmb3JtYXRfc3RyaW5nLCBAQVJHVik7CisgIG9wZW4gUElQRSwgJy18JywgQGNtZAorICAgIG9yIGRpZSAoIiRNRTogZmFpbGVkIHRvIHJ1biAnIi4gcXVvdGVkX2NtZCAoQGNtZCkgLiInOiAkIVxuIgorICAgICAgICAgICAgLiAiKElzIHlvdXIgR2l0IHRvbyBvbGQ/ICBWZXJzaW9uIDEuNS4xIG9yIGxhdGVyIGlzIHJlcXVpcmVkLilcbiIpOworCisgIG15ICRwcmV2X211bHRpX3BhcmFncmFwaDsKKyAgbXkgJHByZXZfZGF0ZV9saW5lID0gJyc7CisgIG15IEBwcmV2X2NvYXV0aG9ycyA9ICgpOworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBkZWZpbmVkIChteSAkaW4gPSA8UElQRT4pCisgICAgICAgIG9yIGxhc3Q7CisgICAgICAkaW4gPX4gL15sb2cgc2l6ZSAoXGQrKSQvCisgICAgICAgIG9yIGRpZSAiJE1FOiQuOiBJbnZhbGlkIGxpbmUgKGV4cGVjdGVkIGxvZyBzaXplKTpcbiRpbiI7CisgICAgICBteSAkbG9nX25ieXRlcyA9ICQxOworCisgICAgICBteSAkbG9nOworICAgICAgbXkgJG5fcmVhZCA9IHJlYWQgUElQRSwgJGxvZywgJGxvZ19uYnl0ZXM7CisgICAgICAkbl9yZWFkID09ICRsb2dfbmJ5dGVzCisgICAgICAgIG9yIGRpZSAiJE1FOiQuOiB1bmV4cGVjdGVkIEVPRlxuIjsKKworICAgICAgIyBFeHRyYWN0IGxlYWRpbmcgaGFzaC4KKyAgICAgIG15ICgkc2hhLCAkcmVzdCkgPSBzcGxpdCAnOicsICRsb2csIDI7CisgICAgICBkZWZpbmVkICRzaGEKKyAgICAgICAgb3IgZGllICIkTUU6JC46IG1hbGZvcm1lZCBsb2cgZW50cnlcbiI7CisgICAgICAkc2hhID1+IC9eWzAtOWEtZkEtRl17NDB9JC8KKyAgICAgICAgb3IgZGllICIkTUU6JC46IGludmFsaWQgU0hBMTogJHNoYVxuIjsKKworICAgICAgIyBJZiB0aGlzIGNvbW1pdCdzIGxvZyByZXF1aXJlcyBhbnkgdHJhbnNmb3JtYXRpb24sIGRvIGl0IG5vdy4KKyAgICAgIG15ICRjb2RlID0gJGFtZW5kX2NvZGUtPnskc2hhfTsKKyAgICAgIGlmIChkZWZpbmVkICRjb2RlKQorICAgICAgICB7CisgICAgICAgICAgZXZhbCAndXNlIFNhZmUnOworICAgICAgICAgIG15ICRzID0gbmV3IFNhZmU7CisgICAgICAgICAgIyBQdXQgdGhlIHVucHJlcHJvY2Vzc2VkIGVudHJ5IGludG8gIiRfIi4KKyAgICAgICAgICAkXyA9ICRyZXN0OworCisgICAgICAgICAgIyBMZXQgJGNvZGUgb3BlcmF0ZSBvbiBpdCwgc2FmZWx5LgorICAgICAgICAgIG15ICRyID0gJHMtPnJldmFsKCIkY29kZSIpCisgICAgICAgICAgICBvciBkaWUgIiRNRTokLjokc2hhOiBmYWlsZWQgdG8gZXZhbCBcIiRjb2RlXCI6XG4kQFxuIjsKKworICAgICAgICAgICMgTm90ZSB0aGF0IHdlJ3ZlIHVzZWQgdGhpcyBlbnRyeS4KKyAgICAgICAgICBkZWxldGUgJGFtZW5kX2NvZGUtPnskc2hhfTsKKworICAgICAgICAgICMgVXBkYXRlICRyZXN0IHVwb24gc3VjY2Vzcy4KKyAgICAgICAgICAkcmVzdCA9ICRfOworICAgICAgICB9CisKKyAgICAgICMgUmVtb3ZlIGxpbmVzIGluc2VydGVkIGJ5ICJnaXQgY2hlcnJ5LXBpY2siLgorICAgICAgaWYgKCRzdHJpcF9jaGVycnlfcGljaykKKyAgICAgICAgeworICAgICAgICAgICRyZXN0ID1+IHMvXlxzKkNvbmZsaWN0czpcbi4qLy9zbTsKKyAgICAgICAgICAkcmVzdCA9fiBzL15ccypcKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgW1xkYS1mXStcKVxuLy9tOworICAgICAgICB9CisKKyAgICAgIG15IEBsaW5lID0gc3BsaXQgIlxuIiwgJHJlc3Q7CisgICAgICBteSAkYXV0aG9yX2xpbmUgPSBzaGlmdCBAbGluZTsKKyAgICAgIGRlZmluZWQgJGF1dGhvcl9saW5lCisgICAgICAgIG9yIGRpZSAiJE1FOiQuOiB1bmV4cGVjdGVkIEVPRlxuIjsKKyAgICAgICRhdXRob3JfbGluZSA9fiAvXihcZCspICAoLio+KSQvCisgICAgICAgIG9yIGRpZSAiJE1FOiQuOiBJbnZhbGlkIGxpbmUgIgorICAgICAgICAgIC4gIihleHBlY3RlZCBkYXRlL2F1dGhvci9lbWFpbCk6XG4kYXV0aG9yX2xpbmVcbiI7CisKKyAgICAgICMgRm9ybWF0ICdDb3B5cmlnaHQtcGFwZXJ3b3JrLWV4ZW1wdDogWWVzJyBhcyBhIHN0YW5kYXJkIENoYW5nZUxvZworICAgICAgIyBgKHRpbnkgY2hhbmdlKScgYW5ub3RhdGlvbi4KKyAgICAgIG15ICR0aW55ID0gKGdyZXAgKC9eQ29weXJpZ2h0LXBhcGVyd29yay1leGVtcHQ6XHMrW1l5XWVzJC8sIEBsaW5lKQorICAgICAgICAgICAgICAgICAgPyAnICAodGlueSBjaGFuZ2UpJyA6ICcnKTsKKworICAgICAgbXkgJGRhdGVfbGluZSA9IHNwcmludGYgIiVzICAlcyR0aW55XG4iLAorICAgICAgICBzdHJmdGltZSAoIiVGIiwgbG9jYWx0aW1lICgkMSkpLCAkMjsKKworICAgICAgbXkgQGNvYXV0aG9ycyA9IGdyZXAgL15Dby1hdXRob3JlZC1ieTouKiQvLCBAbGluZTsKKyAgICAgICMgT21pdCBtZXRhLWRhdGEgbGluZXMgd2UndmUgYWxyZWFkeSBpbnRlcnByZXRlZC4KKyAgICAgIEBsaW5lID0gZ3JlcCAhL14oPzpTaWduZWQtb2ZmLWJ5OlsgXS4qPiQKKyAgICAgICAgICAgICAgICAgICAgICAgfENvLWF1dGhvcmVkLWJ5OlsgXQorICAgICAgICAgICAgICAgICAgICAgICB8Q29weXJpZ2h0LXBhcGVyd29yay1leGVtcHQ6WyBdCisgICAgICAgICAgICAgICAgICAgICAgICkveCwgQGxpbmU7CisKKyAgICAgICMgUmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGJsYW5rIGxpbmVzLgorICAgICAgaWYgKEBsaW5lKQorICAgICAgICB7CisgICAgICAgICAgd2hpbGUgKCRsaW5lWzBdID1+IC9eXHMqJC8pIHsgc2hpZnQgQGxpbmU7IH0KKyAgICAgICAgICB3aGlsZSAoJGxpbmVbJCNsaW5lXSA9fiAvXlxzKiQvKSB7IHBvcCBAbGluZTsgfQorICAgICAgICB9CisKKyAgICAgICMgUmVjb3JkIHdoZXRoZXIgdGhlcmUgYXJlIHR3byBvciBtb3JlIHBhcmFncmFwaHMuCisgICAgICBteSAkbXVsdGlfcGFyYWdyYXBoID0gZ3JlcCAvXlxzKiQvLCBAbGluZTsKKworICAgICAgIyBGb3JtYXQgJ0NvLWF1dGhvcmVkLWJ5OiBBIFUgVGhvciA8ZW1haWxAZXhhbXBsZS5jb20+JyBsaW5lcyBpbgorICAgICAgIyBzdGFuZGFyZCBtdWx0aS1hdXRob3IgQ2hhbmdlTG9nIGZvcm1hdC4KKyAgICAgIGZvciAoQGNvYXV0aG9ycykKKyAgICAgICAgeworICAgICAgICAgIHMvXkNvLWF1dGhvcmVkLWJ5OlxzKi9cdCAgICAvOworICAgICAgICAgIHMvXHMqPC8gIDwvOworCisgICAgICAgICAgLzwuKj9ALipcLi4qPi8KKyAgICAgICAgICAgIG9yIHdhcm4gIiRNRTogd2FybmluZzogbWlzc2luZyBlbWFpbCBhZGRyZXNzIGZvciAiCisgICAgICAgICAgICAgIC4gc3Vic3RyICgkXywgNSkgLiAiXG4iOworICAgICAgICB9CisKKyAgICAgICMgSWYgY2x1c3RlcmluZyBvZiBjb21taXQgbWVzc2FnZXMgaGFzIGJlZW4gZGlzYWJsZWQsIGlmIHRoaXMgaGVhZGVyCisgICAgICAjIHdvdWxkIGJlIGRpZmZlcmVudCBmcm9tIHRoZSBwcmV2aW91cyBkYXRlL25hbWUvZW1haWwvY29hdXRob3JzIGhlYWRlciwKKyAgICAgICMgb3IgaWYgdGhpcyBvciB0aGUgcHJldmlvdXMgZW50cnkgY29uc2lzdHMgb2YgdHdvIG9yIG1vcmUgcGFyYWdyYXBocywKKyAgICAgICMgdGhlbiBwcmludCB0aGUgaGVhZGVyLgorICAgICAgaWYgKCAhICRjbHVzdGVyCisgICAgICAgICAgfHwgJGRhdGVfbGluZSBuZSAkcHJldl9kYXRlX2xpbmUKKyAgICAgICAgICB8fCAiQGNvYXV0aG9ycyIgbmUgIkBwcmV2X2NvYXV0aG9ycyIKKyAgICAgICAgICB8fCAkbXVsdGlfcGFyYWdyYXBoCisgICAgICAgICAgfHwgJHByZXZfbXVsdGlfcGFyYWdyYXBoKQorICAgICAgICB7CisgICAgICAgICAgJHByZXZfZGF0ZV9saW5lIGVxICcnCisgICAgICAgICAgICBvciBwcmludCAiXG4iOworICAgICAgICAgIHByaW50ICRkYXRlX2xpbmU7CisgICAgICAgICAgQGNvYXV0aG9ycworICAgICAgICAgICAgYW5kIHByaW50IGpvaW4gKCJcbiIsIEBjb2F1dGhvcnMpLCAiXG4iOworICAgICAgICB9CisgICAgICAkcHJldl9kYXRlX2xpbmUgPSAkZGF0ZV9saW5lOworICAgICAgQHByZXZfY29hdXRob3JzID0gQGNvYXV0aG9yczsKKyAgICAgICRwcmV2X211bHRpX3BhcmFncmFwaCA9ICRtdWx0aV9wYXJhZ3JhcGg7CisKKyAgICAgICMgSWYgdGhlcmUgd2VyZSBhbnkgbGluZXMKKyAgICAgIGlmIChAbGluZSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgd2FybiAiJE1FOiB3YXJuaW5nOiBlbXB0eSBjb21taXQgbWVzc2FnZTpcbiAgJGRhdGVfbGluZVxuIjsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgaWYgKCRhcHBlbmRfZG90KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAjIElmIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBtZXNzYWdlIGhhcyBlbm91Z2ggcm9vbSwgdGhlbgorICAgICAgICAgICAgICBpZiAobGVuZ3RoICRsaW5lWzBdIDwgNzIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgIyBhcHBlbmQgYSBkb3QgaWYgdGhlcmUgaXMgbm8gb3RoZXIgcHVuY3R1YXRpb24gb3IgYmxhbmsKKyAgICAgICAgICAgICAgICAgICMgYXQgdGhlIGVuZC4KKyAgICAgICAgICAgICAgICAgICRsaW5lWzBdID1+IC9bWzpwdW5jdDpdXHNdJC8KKyAgICAgICAgICAgICAgICAgICAgb3IgJGxpbmVbMF0gLj0gJy4nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICMgUmVtb3ZlIG9uZSBhZGRpdGlvbmFsIGxlYWRpbmcgVEFCIGZyb20gZWFjaCBsaW5lLgorICAgICAgICAgICRzdHJpcF90YWIKKyAgICAgICAgICAgIGFuZCBtYXAgeyBzL15cdC8vIH0gQGxpbmU7CisKKyAgICAgICAgICAjIFByZWZpeCBlYWNoIG5vbi1lbXB0eSBsaW5lIHdpdGggYSBUQUIuCisgICAgICAgICAgQGxpbmUgPSBtYXAgeyBsZW5ndGggJF8gPyAiXHQkXyIgOiAnJyB9IEBsaW5lOworCisgICAgICAgICAgcHJpbnQgIlxuIiwgam9pbiAoIlxuIiwgQGxpbmUpLCAiXG4iOworICAgICAgICB9CisKKyAgICAgIGRlZmluZWQgKCRpbiA9IDxQSVBFPikKKyAgICAgICAgb3IgbGFzdDsKKyAgICAgICRpbiBuZSAiXG4iCisgICAgICAgIGFuZCBkaWUgIiRNRTokLjogdW5leHBlY3RlZCBsaW5lOlxuJGluIjsKKyAgICB9CisKKyAgY2xvc2UgUElQRQorICAgIG9yIGRpZSAiJE1FOiBlcnJvciBjbG9zaW5nIHBpcGUgZnJvbSAiIC4gcXVvdGVkX2NtZCAoQGNtZCkgLiAiXG4iOworICAjIEZJWE1FLXNvbWVkYXk6IGluY2x1ZGUgJFBST0NFU1NfU1RBVFVTIGluIHRoZSBkaWFnbm9zdGljCisKKyAgIyBDb21wbGFpbiBhYm91dCBhbnkgdW51c2VkIGVudHJ5IGluIHRoZSAtLWFtZW5kPUYgc3BlY2lmaWVkIGZpbGUuCisgIG15ICRmYWlsID0gMDsKKyAgZm9yZWFjaCBteSAkc2hhIChrZXlzICUkYW1lbmRfY29kZSkKKyAgICB7CisgICAgICB3YXJuICIkTUU6JGFtZW5kX2ZpbGU6IHVudXNlZCBlbnRyeTogJHNoYVxuIjsKKyAgICAgICRmYWlsID0gMTsKKyAgICB9CisKKyAgZXhpdCAkZmFpbDsKK30KKworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6IHBlcmwKKyMgaW5kZW50LXRhYnMtbW9kZTogbmlsCisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogIm15ICRWRVJTSU9OID0gJyIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkICUwMkg6JTAyTSIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIHRpbWUtc3RhbXAtZW5kOiAiJzsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9nbnUtd2ViLWRvYy11cGRhdGUgYi9idWlsZC1hdXgvZ251LXdlYi1kb2MtdXBkYXRlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRhY2Q2OWQKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsZC1hdXgvZ251LXdlYi1kb2MtdXBkYXRlCkBAIC0wLDAgKzEsMTg5IEBACisjIS9iaW4vc2gKKyMgUnVuIHRoaXMgYWZ0ZXIgZWFjaCBub24tYWxwaGEgcmVsZWFzZSwgdG8gdXBkYXRlIHRoZSB3ZWIgZG9jdW1lbnRhdGlvbiBhdAorIyBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvJHBrZy9tYW51YWwvCisjIFRoaXMgc2NyaXB0IG11c3QgYmUgcnVuIGZyb20gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnksCisjIGFzc3VtZXMgeW91J3JlIHVzaW5nIGdpdCBmb3IgcmV2aXNpb24gY29udHJvbCwKKyMgYW5kIHJlcXVpcmVzIGEgLnByZXYtdmVyc2lvbiBmaWxlIGFzIHdlbGwgYXMgYSBNYWtlZmlsZSwKKyMgZnJvbSB3aGljaCBpdCBleHRyYWN0cyB0aGUgdmVyc2lvbiBudW1iZXIgYW5kIHBhY2thZ2UgbmFtZSwgcmVzcGVjdGl2ZWx5LgorIyBBbHNvLCBpdCBhc3N1bWVzIGFsbCBkb2N1bWVudGF0aW9uIGlzIGluIHRoZSBkb2MvIHN1Yi1kaXJlY3RvcnkuCisKK1ZFUlNJT049MjAwOS0wNy0yMS4xNjsgIyBVVEMKKworIyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK01FPSQoYmFzZW5hbWUgIiQwIikKK3dhcm4oKSB7IHByaW50ZiAnJXM6ICVzXG4nICIkTUUiICIkKiIgPiYyOyB9CitkaWUoKSB7IHdhcm4gIiQqIjsgZXhpdCAxOyB9CisKK2hlbHAoKQoreworICBjYXQgPDxFT0YKK1VzYWdlOiAkTUUKKworUnVuIHRoaXMgc2NyaXB0IGZyb20gdG9wX3NyY2RpciAobm8gYXJndW1lbnRzKSBhZnRlciBlYWNoIG5vbi1hbHBoYQorcmVsZWFzZSwgdG8gdXBkYXRlIHRoZSB3ZWIgZG9jdW1lbnRhdGlvbiBhdAoraHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL1wkcGtnL21hbnVhbC8KKworT3B0aW9uczoKKyAgLUMsIC0tYnVpbGRkaXI9RElSICBsb2NhdGlvbiBvZiAoY29uZmlndXJlZCkgTWFrZWZpbGUgKGRlZmF1bHQ6IC4pCisgIC0taGVscCAgICAgICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLS12ZXJzaW9uICAgICAgICAgICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisKK1JlcG9ydCBidWdzIGFuZCBwYXRjaGVzIHRvIDxidWctZ251bGliQGdudS5vcmc+LgorRU9GCisgIGV4aXQKK30KKwordmVyc2lvbigpCit7CisgIHllYXI9JChlY2hvICIkVkVSU0lPTiIgfCBzZWQgJ3MvW14wLTldLiovLycpCisgIGNhdCA8PEVPRgorJE1FICRWRVJTSU9OCitDb3B5cmlnaHQgKEMpICR5ZWFyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLAorTGljZW5zZSBHUEx2Mys6IEdOVSBHUEwgdmVyc2lvbiAzIG9yIGxhdGVyIDxodHRwOi8vZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbD4KK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmlidXRlIGl0LgorVGhlcmUgaXMgTk8gV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy4KK0VPRgorICBleGl0Cit9CisKKyMgZmluZF90b29sIEVOVlZBUiBOQU1FUy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNlYXJjaCBmb3IgYSByZXF1aXJlZCBwcm9ncmFtLiAgVXNlIHRoZSB2YWx1ZSBvZiBFTlZWQVIsIGlmIHNldCwKKyMgb3RoZXJ3aXNlIGZpbmQgdGhlIGZpcnN0IG9mIHRoZSBOQU1FUyB0aGF0IGNhbiBiZSBydW4gKGkuZS4sCisjIHN1cHBvcnRzIC0tdmVyc2lvbikuICBJZiBmb3VuZCwgc2V0IEVOVlZBUiB0byB0aGUgcHJvZ3JhbSBuYW1lLAorIyBkaWUgb3RoZXJ3aXNlLgorIworIyBGSVhNRTogY29kZSBkdXBsaWNhdGlvbiwgc2VlIGFsc28gYm9vdHN0cmFwLgorZmluZF90b29sICgpCit7CisgIGZpbmRfdG9vbF9lbnZ2YXI9JDEKKyAgc2hpZnQKKyAgZmluZF90b29sX25hbWVzPSRACisgIGV2YWwgImZpbmRfdG9vbF9yZXM9XCQkZmluZF90b29sX2VudnZhciIKKyAgaWYgdGVzdCB4IiRmaW5kX3Rvb2xfcmVzIiA9IHg7IHRoZW4KKyAgICBmb3IgaQorICAgIGRvCisgICAgICBpZiAoJGkgLS12ZXJzaW9uIDwvZGV2L251bGwpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgIGZpbmRfdG9vbF9yZXM9JGkKKyAgICAgICBicmVhaworICAgICAgZmkKKyAgICBkb25lCisgIGVsc2UKKyAgICBmaW5kX3Rvb2xfZXJyb3JfcHJlZml4PSJcJCRmaW5kX3Rvb2xfZW52dmFyOiAiCisgIGZpCisgIHRlc3QgeCIkZmluZF90b29sX3JlcyIgIT0geCBcCisgICAgfHwgZGllICJvbmUgb2YgdGhlc2UgaXMgcmVxdWlyZWQ6ICRmaW5kX3Rvb2xfbmFtZXMiCisgICgkZmluZF90b29sX3JlcyAtLXZlcnNpb24gPC9kZXYvbnVsbCkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICB8fCBkaWUgIiR7ZmluZF90b29sX2Vycm9yX3ByZWZpeH1jYW5ub3QgcnVuICRmaW5kX3Rvb2xfcmVzIC0tdmVyc2lvbiIKKyAgZXZhbCAiJGZpbmRfdG9vbF9lbnZ2YXI9XCRmaW5kX3Rvb2xfcmVzIgorICBldmFsICJleHBvcnQgJGZpbmRfdG9vbF9lbnZ2YXIiCit9CisKKyMjIC0tLS0tLSAjIworIyMgTWFpbi4gICMjCisjIyAtLS0tLS0gIyMKKworIyBSZXF1aXJlbWVudHM6IGV2ZXJ5dGhpbmcgcmVxdWlyZWQgdG8gYm9vdHN0cmFwIHlvdXIgcGFja2FnZSwgcGx1cworIyB0aGVzZS4KK2ZpbmRfdG9vbCBDVlMgY3ZzCitmaW5kX3Rvb2wgQ1ZTVSBjdnN1CitmaW5kX3Rvb2wgR0lUIGdpdAorZmluZF90b29sIFJTWU5DIHJzeW5jCitmaW5kX3Rvb2wgWEFSR1MgZ3hhcmdzIHhhcmdzCisKK2J1aWxkZGlyPS4KK3doaWxlIHRlc3QgJCMgIT0gMAorZG8KKyAgIyBIYW5kbGUgLS1vcHRpb249dmFsdWUgYnkgc3BsaXR0aW5nIGFwYXJ0IGFuZCBwdXR0aW5nIGJhY2sgb24gYXJndi4KKyAgY2FzZSAkMSBpbgorICAgIC0tKj0qKQorICAgICAgb3B0PSQoZWNobyAiJDEiIHwgc2VkIC1lICdzLz0uKi8vJykKKyAgICAgIHZhbD0kKGVjaG8gIiQxIiB8IHNlZCAtZSAncy9bXj1dKj0vLycpCisgICAgICBzaGlmdAorICAgICAgc2V0IGR1bW15ICIkb3B0IiAiJHZhbCIgJHsxKyIkQCJ9OyBzaGlmdAorICAgICAgOzsKKyAgZXNhYworCisgIGNhc2UgJDEgaW4KKyAgICAtLWhlbHB8LS12ZXJzaW9uKSAkezEjLS19OzsKKyAgICAtQ3wtLWJ1aWxkZGlyKSBzaGlmdDsgYnVpbGRkaXI9JDE7IHNoaWZ0IDs7CisgICAgLS0qKSBkaWUgInVucmVjb2duaXplZCBvcHRpb246ICQxIjs7CisgICAgKikgYnJlYWs7OworICBlc2FjCitkb25lCisKK3Rlc3QgJCMgPSAwIFwKKyAgfHwgZGllICJ0b28gbWFueSBhcmd1bWVudHMiCisKK3ByZXY9LnByZXYtdmVyc2lvbgordmVyc2lvbj0kKGNhdCAkcHJldikgfHwgZGllICJubyAkcHJldiBmaWxlPyIKK3BrZz0kKHNlZCAtbiAncy9eUEFDS0FHRSA9IFwoLipcKS9cMS9wJyAkYnVpbGRkaXIvTWFrZWZpbGUpIFwKKyAgfHwgZGllICJubyBNYWtlZmlsZT8iCit0bXBfYnJhbmNoPXdlYi1kb2MtJHZlcnNpb24tJCQKK2N1cnJlbnRfYnJhbmNoPSQoJEdJVCBicmFuY2ggfCBzZWQgLW5lICcvXlwqIC97cy8vLztwO3E7fScpCisKK2NsZWFudXAoKQoreworICBfX3N0PSQ/CisgIHJtIC1yZiAiJHRtcCIKKyAgJEdJVCBjaGVja291dCAiJGN1cnJlbnRfYnJhbmNoIgorICAkR0lUIHN1Ym1vZHVsZSB1cGRhdGUgLS1yZWN1cnNpdmUKKyAgJEdJVCBicmFuY2ggLWQgJHRtcF9icmFuY2gKKyAgZXhpdCAkX19zdAorfQordHJhcCBjbGVhbnVwIDAKK3RyYXAgJ2V4aXQgJD8nIDEgMiAxMyAxNQorCisjIFdlIG11c3QgYnVpbGQgdXNpbmcgc291cmNlcyBmb3Igd2hpY2ggLS12ZXJzaW9uIHJlcG9ydHMgdGhlCisjIGp1c3QtcmVsZWFzZWQgdmVyc2lvbiBudW1iZXIsIG5vdCBzb21lIHN0cmluZyBsaWtlIDcuNi4xOC0yMDc2MS4KKyMgVGhhdCB2ZXJzaW9uIHN0cmluZyBwcm9wYWdhdGVzIGludG8gYWxsIGRvY3VtZW50YXRpb24uCitzZXQgLWUKKyRHSVQgY2hlY2tvdXQgLWIgJHRtcF9icmFuY2ggdiR2ZXJzaW9uCiskR0lUIHN1Ym1vZHVsZSB1cGRhdGUgLS1yZWN1cnNpdmUKKy4vYm9vdHN0cmFwCitzcmNkaXI9JChwd2QpCitjZCAiJGJ1aWxkZGlyIgorICAuL2NvbmZpZy5zdGF0dXMgLS1yZWNoZWNrCisgIC4vY29uZmlnLnN0YXR1cworICBtYWtlCisgIG1ha2Ugd2ViLW1hbnVhbAorY2QgIiRzcmNkaXIiCitzZXQgK2UKKwordG1wPSQobWt0ZW1wIC1kIHdlYi1kb2MtdXBkYXRlLlhYWFhYWCkgfHwgZXhpdCAxCisoIGNkICR0bXAgXAorICAgICYmICRDVlMgLWQgJFVTRVJAY3ZzLnN2LmdudS5vcmc6L3dlYmN2cy8kcGtnIGNvICRwa2cgKQorJFJTWU5DIC1hdlAgIiRidWlsZGRpciIvZG9jL21hbnVhbC8gJHRtcC8kcGtnL21hbnVhbAorCisoCisgIGNkICR0bXAvJHBrZy9tYW51YWwKKworICAjIEFkZCBhbnkgbmV3IGZpbGVzOgorICAkQ1ZTVSAtLXR5cGVzPSc/JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHwgc2VkIHMvLi4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHwgJFhBUkdTIC0tbm8tcnVuLWlmLWVtcHR5IC0tICRDVlMgYWRkIC1rbworCisgICRDVlMgY2kgLW0gJHZlcnNpb24KKykKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogIlZFUlNJT049IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2dudXBsb2FkIGIvYnVpbGQtYXV4L2dudXBsb2FkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZlZWNlZjQKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsZC1hdXgvZ251cGxvYWQKQEAgLTAsMCArMSw0MzMgQEAKKyMhL2Jpbi9zaAorIyBTaWduIGZpbGVzIGFuZCB1cGxvYWQgdGhlbS4KKworc2NyaXB0dmVyc2lvbj0yMDEyLTEyLTExLjE2OyAjIFVUQworCisjIENvcHlyaWdodCAoQykgMjAwNC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQWxleGFuZHJlIER1cmV0LUx1dHogPGFkbEBnbnUub3JnPi4KKyMgVGhlIG1hc3RlciBjb3B5IG9mIHRoaXMgZmlsZSBpcyBtYWludGFpbmVkIGluIHRoZSBnbnVsaWIgR2l0IHJlcG9zaXRvcnkuCisjIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIGFuZCBmZWF0dXJlIHJlcXVlc3RzIHRvIGJ1Zy1nbnVsaWJAZ251Lm9yZy4KKworc2V0IC1lCisKK0dQRz0nZ3BnIC0tYmF0Y2ggLS1uby10dHknCitjb25mZmlsZT0uZ251cGxvYWRyYwordG89CitkcnlfcnVuPWZhbHNlCityZXBsYWNlPQorc3ltbGlua19maWxlcz0KK2RlbGV0ZV9maWxlcz0KK2RlbGV0ZV9zeW1saW5rcz0KK2NvbGxlY3RfdmFyPQorZGJnPQorbmw9JworJworCit1c2FnZT0iVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtDTURdIEZJTEUuLi4gW1tDTURdIEZJTEUuLi5dCisKK1NpZ24gYWxsIEZJTEVTLCBhbmQgcHJvY2VzcyB0aGVtIGF0IHNlbGVjdGVkIGRlc3RpbmF0aW9ucyBhY2NvcmRpbmcgdG8gQ01ELgorPGh0dHA6Ly93d3cuZ251Lm9yZy9wcmVwL21haW50YWluL2h0bWxfbm9kZS9BdXRvbWF0ZWQtRlRQLVVwbG9hZHMuaHRtbD4KK2V4cGxhaW5zIGZ1cnRoZXIuCisKK0NvbW1hbmRzOgorICAtLWRlbGV0ZSAgICAgICAgICAgICAgICAgZGVsZXRlIEZJTEVTIGZyb20gZGVzdGluYXRpb24KKyAgLS1zeW1saW5rICAgICAgICAgICAgICAgIGNyZWF0ZSBzeW1ib2xpYyBsaW5rcworICAtLXJtc3ltbGluayAgICAgICAgICAgICAgcmVtb3ZlIHN5bWJvbGljIGxpbmtzCisgIC0tICAgICAgICAgICAgICAgICAgICAgICB0cmVhdCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cyBhcyBmaWxlcyB0byB1cGxvYWQKKworT3B0aW9uczoKKyAgLS1oZWxwICAgICAgICAgICAgICAgICAgIHByaW50IHRoaXMgaGVscCB0ZXh0IGFuZCBleGl0CisgIC0tdG8gREVTVCAgICAgICAgICAgICAgICBzcGVjaWZ5IG9uZSBkZXN0aW5hdGlvbiBmb3IgRklMRVMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChtdWx0aXBsZSAtLXRvIG9wdGlvbnMgYXJlIGFsbG93ZWQpCisgIC0tdXNlciBOQU1FICAgICAgICAgICAgICBzaWduIHdpdGgga2V5IE5BTUUKKyAgLS1yZXBsYWNlICAgICAgICAgICAgICAgIGFsbG93IHJlcGxhY2VtZW50cyBvZiBleGlzdGluZyBmaWxlcworICAtLXN5bWxpbmstcmVnZXhbPUVYUFJdICAgdXNlIHNlZCBzY3JpcHQgRVhQUiB0byBjb21wdXRlIHN5bWJvbGljIGxpbmsgbmFtZXMKKyAgLS1kcnktcnVuICAgICAgICAgICAgICAgIGRvIG5vdGhpbmcsIHNob3cgd2hhdCB3b3VsZCBoYXZlIGJlZW4gZG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluY2x1ZGluZyB0aGUgY29uc3RydWN0ZWQgZGlyZWN0aXZlIGZpbGUpCisgIC0tdmVyc2lvbiAgICAgICAgICAgICAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorCitJZiAtLXN5bWxpbmstcmVnZXggaXMgZ2l2ZW4gd2l0aG91dCBFWFBSLCB0aGVuIHRoZSBsaW5rIHRhcmdldCBuYW1lCitpcyBjcmVhdGVkIGJ5IHJlcGxhY2luZyB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiB3aXRoICctbGF0ZXN0JywgZS5nLjoKKworICBmb28tMS4zLjQudGFyLmd6IC0+IGZvby1sYXRlc3QudGFyLmd6CisKK1JlY29nbml6ZWQgZGVzdGluYXRpb25zIGFyZToKKyAgYWxwaGEuZ251Lm9yZzpESVJFQ1RPUlkKKyAgc2F2YW5uYWguZ251Lm9yZzpESVJFQ1RPUlkKKyAgc2F2YW5uYWgubm9uZ251Lm9yZzpESVJFQ1RPUlkKKyAgZnRwLmdudS5vcmc6RElSRUNUT1JZCisgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBkaXJlY3RpdmUgZmlsZXMgYW5kIHVwbG9hZCBmaWxlcyBieSBGVFAKKyAgZG93bmxvYWQuZ251Lm9yZy51YTp7YWxwaGF8ZnRwfS9ESVJFQ1RPUlkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGRpcmVjdGl2ZSBmaWxlcyBhbmQgdXBsb2FkIGZpbGVzIGJ5IFNGVFAKKyAgW3VzZXJAXWhvc3Q6RElSRUNUT1JZICAgIHVwbG9hZCBmaWxlcyB3aXRoIHNjcAorCitPcHRpb25zIGFuZCBjb21tYW5kcyBhcmUgYXBwbGllZCBpbiBvcmRlci4gIElmIHRoZSBmaWxlICRjb25mZmlsZSBleGlzdHMKK2luIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCBpdHMgY29udGVudHMgYXJlIHByZXBlbmRlZCB0byB0aGUKK2FjdHVhbCBjb21tYW5kIGxpbmUgb3B0aW9ucy4gIFVzZSB0aGlzIHRvIGtlZXAgeW91ciBkZWZhdWx0cy4gIENvbW1lbnRzCisoIykgYW5kIGVtcHR5IGxpbmVzIGluICRjb25mZmlsZSBhcmUgYWxsb3dlZC4KKworRXhhbXBsZXM6CisxLiBVcGxvYWQgZm9vYmFyLTEuMC50YXIuZ3ogdG8gZnRwLmdudS5vcmc6CisgIGdudXBsb2FkIC0tdG8gZnRwLmdudS5vcmc6Zm9vYmFyIGZvb2Jhci0xLjAudGFyLmd6CisKKzIuIFVwbG9hZCBmb29iYXItMS4wLnRhci5neiBhbmQgZm9vYmFyLTEuMC50YXIueHogdG8gZnRwLmdudS5vcmc6CisgIGdudXBsb2FkIC0tdG8gZnRwLmdudS5vcmc6Zm9vYmFyIGZvb2Jhci0xLjAudGFyLmd6IGZvb2Jhci0xLjAudGFyLnh6CisKKzMuIFNhbWUgYXMgYWJvdmUsIGFuZCBhbHNvIGNyZWF0ZSBzeW1ib2xpYyBsaW5rcyB0byBmb29iYXItbGF0ZXN0LnRhci4qOgorICBnbnVwbG9hZCAtLXRvIGZ0cC5nbnUub3JnOmZvb2JhciBcXAorICAgICAgICAgICAtLXN5bWxpbmstcmVnZXggXFwKKyAgICAgICAgICAgZm9vYmFyLTEuMC50YXIuZ3ogZm9vYmFyLTEuMC50YXIueHoKKworNC4gVXBsb2FkIGZvb2Jhci0wLjkuOTAudGFyLmd6IHRvIHR3byBzaXRlczoKKyAgZ251cGxvYWQgLS10byBhbHBoYS5nbnUub3JnOmZvb2JhciBcXAorICAgICAgICAgICAtLXRvIHNvdXJjZXMucmVkaGF0LmNvbTp+ZnRwL3B1Yi9mb29iYXIgXFwKKyAgICAgICAgICAgZm9vYmFyLTAuOS45MC50YXIuZ3oKKworNS4gRGVsZXRlIG9vcHNiYXItMC45LjkxLnRhci5neiBhbmQgdXBsb2FkIGZvb2Jhci0wLjkuOTEudGFyLmd6CisgICAodGhlIC0tIHRlcm1pbmF0ZXMgdGhlIGxpc3Qgb2YgZmlsZXMgdG8gZGVsZXRlKToKKyAgZ251cGxvYWQgLS10byBhbHBoYS5nbnUub3JnOmZvb2JhciBcXAorICAgICAgICAgICAtLXRvIHNvdXJjZXMucmVkaGF0LmNvbTp+ZnRwL3B1Yi9mb29iYXIgXFwKKyAgICAgICAgICAgLS1kZWxldGUgb29wc2Jhci0wLjkuOTEudGFyLmd6IFxcCisgICAgICAgICAgIC0tIGZvb2Jhci0wLjkuOTEudGFyLmd6CisKK2dudXBsb2FkIHVzZXMgdGhlIG5jZnRwcHV0IHByb2dyYW0gdG8gZG8gdGhlIHRyYW5zZmVyczsgaWYgeW91IGRvbid0CitoYXBwZW4gdG8gaGF2ZSBhbiBuY2Z0cCBwYWNrYWdlIGluc3RhbGxlZCwgdGhlIG5jZnRwcHV0LWZ0cCBzY3JpcHQgaW4KK3RoZSBidWlsZC1hdXgvIGRpcmVjdG9yeSBvZiB0aGUgZ251bGliIHBhY2thZ2UKKyhodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9wcm9qZWN0cy9nbnVsaWIpIG1heSBzZXJ2ZSBhcyBhIHJlcGxhY2VtZW50LgorCitTZW5kIHBhdGNoZXMgYW5kIGJ1ZyByZXBvcnRzIHRvIDxidWctZ251bGliQGdudS5vcmc+LiIKKworIyBSZWFkIGxvY2FsIGNvbmZpZ3VyYXRpb24gZmlsZQoraWYgdGVzdCAtciAiJGNvbmZmaWxlIjsgdGhlbgorICBlY2hvICIkMDogUmVhZGluZyBjb25maWd1cmF0aW9uIGZpbGUgJGNvbmZmaWxlIgorICBjb25mPWBzZWQgJ3MvIy4qJC8vOy9eJC9kJyAiJGNvbmZmaWxlIiB8IHRyICJcMDE1JG5sIiAnICAnYAorICBldmFsIHNldCB4ICIkY29uZiBcIlwkQFwiIgorICBzaGlmdAorZmkKKword2hpbGUgdGVzdCAtbiAiJDEiOyBkbworICBjYXNlICQxIGluCisgIC0qKQorICAgIGNvbGxlY3RfdmFyPQorICAgIGNhc2UgJDEgaW4KKyAgICAtLWhlbHApCisgICAgICBlY2hvICIkdXNhZ2UiCisgICAgICBleGl0ICQ/CisgICAgICA7OworICAgIC0tdG8pCisgICAgICBpZiB0ZXN0IC16ICIkMiI7IHRoZW4KKyAgICAgICAgZWNobyAiJDA6IE1pc3NpbmcgYXJndW1lbnQgZm9yIC0tdG8iIDE+JjIKKyAgICAgICAgZXhpdCAxCisgICAgICBlbHNlCisgICAgICAgIHRvPSIkdG8gJDIiCisgICAgICAgIHNoaWZ0CisgICAgICBmaQorICAgICAgOzsKKyAgICAtLXVzZXIpCisgICAgICBpZiB0ZXN0IC16ICIkMiI7IHRoZW4KKyAgICAgICAgZWNobyAiJDA6IE1pc3NpbmcgYXJndW1lbnQgZm9yIC0tdXNlciIgMT4mMgorICAgICAgICBleGl0IDEKKyAgICAgIGVsc2UKKyAgICAgICAgR1BHPSIkR1BHIC0tbG9jYWwtdXNlciAkMiIKKyAgICAgICAgc2hpZnQKKyAgICAgIGZpCisgICAgICA7OworICAgIC0tZGVsZXRlKQorICAgICAgY29sbGVjdF92YXI9ZGVsZXRlX2ZpbGVzCisgICAgICA7OworICAgIC0tcmVwbGFjZSkKKyAgICAgIHJlcGxhY2U9InJlcGxhY2U6IHRydWUiCisgICAgICA7OworICAgIC0tcm1zeW1saW5rKQorICAgICAgY29sbGVjdF92YXI9ZGVsZXRlX3N5bWxpbmtzCisgICAgICA7OworICAgIC0tc3ltbGluay1yZWdleD0qKQorICAgICAgc3ltbGlua19leHByPWBleHByICIkMSIgOiAnW149XSo9XCguKlwpJ2AKKyAgICAgIDs7CisgICAgLS1zeW1saW5rLXJlZ2V4KQorICAgICAgc3ltbGlua19leHByPSdzfC1bMC05XVswLTlcLl0qXCgtWzAtOV1bMC05XSpcKVx7MCwxXH1cLnwtbGF0ZXN0LnwnCisgICAgICA7OworICAgIC0tc3ltbGluaykKKyAgICAgIGNvbGxlY3RfdmFyPXN5bWxpbmtfZmlsZXMKKyAgICAgIDs7CisgICAgLS1kcnktcnVufC1uKQorICAgICAgZHJ5X3J1bj06CisgICAgICA7OworICAgIC0tdmVyc2lvbikKKyAgICAgIGVjaG8gImdudXBsb2FkICRzY3JpcHR2ZXJzaW9uIgorICAgICAgZXhpdCAkPworICAgICAgOzsKKyAgICAtLSkKKyAgICAgIHNoaWZ0CisgICAgICBicmVhaworICAgICAgOzsKKyAgICAtKikKKyAgICAgIGVjaG8gIiQwOiBVbmtub3duIG9wdGlvbiAnJDEnLCB0cnkgJyQwIC0taGVscCciIDE+JjIKKyAgICAgIGV4aXQgMQorICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgKikKKyAgICBpZiB0ZXN0IC16ICIkY29sbGVjdF92YXIiOyB0aGVuCisgICAgICBicmVhaworICAgIGVsc2UKKyAgICAgIGV2YWwgIiRjb2xsZWN0X3Zhcj1cIlwkJGNvbGxlY3RfdmFyICQxXCIiCisgICAgZmkKKyAgICA7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK2RwcmludCgpCit7CisgIGVjaG8gIlJ1bm5pbmcgJCogLi4uIgorfQorCitpZiAkZHJ5X3J1bjsgdGhlbgorICBkYmc9ZHByaW50CitmaQorCitpZiB0ZXN0IC16ICIkdG8iOyB0aGVuCisgIGVjaG8gIiQwOiBNaXNzaW5nIGRlc3RpbmF0aW9uIHNpdGVzIiA+JjIKKyAgZXhpdCAxCitmaQorCitpZiB0ZXN0IC1uICIkc3ltbGlua19maWxlcyI7IHRoZW4KKyAgeD1gZWNobyAiJHN5bWxpbmtfZmlsZXMiIHwgc2VkICdzL1teIF0vL2c7cy8gIC8vZydgCisgIGlmIHRlc3QgLW4gIiR4IjsgdGhlbgorICAgIGVjaG8gIiQwOiBPZGQgbnVtYmVyIG9mIHN5bWxpbmsgYXJndW1lbnRzIiA+JjIKKyAgICBleGl0IDEKKyAgZmkKK2ZpCisKK2lmIHRlc3QgJCMgPSAwOyB0aGVuCisgIGlmIHRlc3QgLXogIiR7c3ltbGlua19maWxlc30ke2RlbGV0ZV9maWxlc30ke2RlbGV0ZV9zeW1saW5rc30iOyB0aGVuCisgICAgZWNobyAiJDA6IE5vIGZpbGUgdG8gdXBsb2FkIiAxPiYyCisgICAgZXhpdCAxCisgIGZpCitlbHNlCisgICMgTWFrZSBzdXJlIGFsbCBmaWxlcyBleGlzdC4gIFdlIGRvbid0IHdhbnQgdG8gYXNrCisgICMgZm9yIHRoZSBwYXNzcGhyYXNlIGlmIHRoZSBzY3JpcHQgd2lsbCBmYWlsLgorICBmb3IgZmlsZQorICBkbworICAgIGlmIHRlc3QgISAtZiAkZmlsZTsgdGhlbgorICAgICAgZWNobyAiJDA6IENhbm5vdCBmaW5kICckZmlsZSciIDE+JjIKKyAgICAgIGV4aXQgMQorICAgIGVsaWYgdGVzdCAtbiAiJHN5bWxpbmtfZXhwciI7IHRoZW4KKyAgICAgIGxpbmtuYW1lPWBlY2hvICRmaWxlIHwgc2VkICIkc3ltbGlua19leHByImAKKyAgICAgIGlmIHRlc3QgLXogIiRsaW5rbmFtZSI7IHRoZW4KKyAgICAgICAgZWNobyAiJDA6IHN5bWxpbmsgZXhwcmVzc2lvbiBwcm9kdWNlcyBlbXB0eSByZXN1bHRzIiA+JjIKKyAgICAgICAgZXhpdCAxCisgICAgICBlbGlmIHRlc3QgIiRsaW5rbmFtZSIgPSAkZmlsZTsgdGhlbgorICAgICAgICBlY2hvICIkMDogc3ltbGluayBleHByZXNzaW9uIGRvZXMgbm90IGFsdGVyIGZpbGUgbmFtZSIgPiYyCisgICAgICAgIGV4aXQgMQorICAgICAgZmkKKyAgICBmaQorICBkb25lCitmaQorCisjIE1ha2Ugc3VyZSBwYXNzcGhyYXNlIGlzIG5vdCBleHBvcnRlZCBpbiB0aGUgZW52aXJvbm1lbnQuCit1bnNldCBwYXNzcGhyYXNlCit1bnNldCBwYXNzcGhyYXNlX2ZkXzAKK0dOVVBHSE9NRT0ke0dOVVBHSE9NRTotJEhPTUUvLmdudXBnfQorCisjIFJlc2V0IFBBVEggdG8gYmUgc3VyZSB0aGF0IGVjaG8gaXMgYSBidWlsdC1pbi4gIFdlIHdpbGwgbGF0ZXIgdXNlCisjICdlY2hvICRwYXNzcGhyYXNlJyB0byBvdXRwdXQgdGhlIHBhc3NwaHJhc2UsIHNvIGl0IGlzIGltcG9ydGFudCB0aGF0CisjIGl0IGlzIGEgYnVpbHQtaW4gKHRoaXJkLXBhcnR5IHByb2dyYW1zIHRlbmQgdG8gYXBwZWFyIGluICdwcycKKyMgbGlzdGluZ3Mgd2l0aCB0aGVpciBhcmd1bWVudHMuLi4pLgorIyBSZW1lbWJlciB0aGlzIHNjcmlwdCBydW5zIHdpdGggJ3NldCAtZScsIHNvIGlmIGVjaG8gaXMgbm90IGJ1aWx0LWluCisjIGl0IHdpbGwgZXhpdCBub3cuCitpZiAkZHJ5X3J1biB8fCBncmVwIC1xICJedXNlLWFnZW50IiAkR05VUEdIT01FL2dwZy5jb25mOyB0aGVuIDo7IGVsc2UKKyAgUEFUSD0vZW1wdHkgZWNobyAtbiAiRW50ZXIgR1BHIHBhc3NwaHJhc2U6ICIKKyAgc3R0eSAtZWNobworICByZWFkIC1yIHBhc3NwaHJhc2UKKyAgc3R0eSBlY2hvCisgIGVjaG8KKyAgcGFzc3BocmFzZV9mZF8wPSItLXBhc3NwaHJhc2UtZmQgMCIKK2ZpCisKK2lmIHRlc3QgJCMgLW5lIDA7IHRoZW4KKyAgZm9yIGZpbGUKKyAgZG8KKyAgICBlY2hvICJTaWduaW5nICRmaWxlIC4uLiIKKyAgICBybSAtZiAkZmlsZS5zaWcKKyAgICBlY2hvICIkcGFzc3BocmFzZSIgfCAkZGJnICRHUEcgJHBhc3NwaHJhc2VfZmRfMCAtYmEgLW8gJGZpbGUuc2lnICRmaWxlCisgIGRvbmUKK2ZpCisKKworIyBta2RpcmVjdGl2ZSBERVNURElSIEJBU0UgRklMRSBTVE1UCisjIEFyZ3VtZW50czogU2VlIHVwbG9hZCwgYmVsb3cKK21rZGlyZWN0aXZlICgpCit7CisgIHN0bXQ9IiQ0IgorICBpZiB0ZXN0IC1uICIkMyI7IHRoZW4KKyAgICBzdG10PSIKK2ZpbGVuYW1lOiAkMyRzdG10IgorICBmaQorCisgIGNhdCA+JHsyfS5kaXJlY3RpdmU8PEVPRgordmVyc2lvbjogMS4yCitkaXJlY3Rvcnk6ICQxCitjb21tZW50OiBnbnVwbG9hZCB2LiAkc2NyaXB0dmVyc2lvbiRzdG10CitFT0YKKyAgaWYgJGRyeV9ydW47IHRoZW4KKyAgICBlY2hvICJGaWxlICR7Mn0uZGlyZWN0aXZlOiIKKyAgICBjYXQgJHsyfS5kaXJlY3RpdmUKKyAgICBlY2hvICJGaWxlICR7Mn0uZGlyZWN0aXZlOiIgfCBzZWQgJ3MvLi8tL2cnCisgIGZpCit9CisKK21rc3ltbGluayAoKQoreworICB3aGlsZSB0ZXN0ICQjIC1uZSAwCisgIGRvCisgICAgZWNobyAic3ltbGluazogJDEgJDIiCisgICAgc2hpZnQKKyAgICBzaGlmdAorICBkb25lCit9CisKKyMgdXBsb2FkIERFU1QgREVTVERJUiBCQVNFIEZJTEUgU1RNVCBGSUxFUworIyBBcmd1bWVudHM6CisjICBERVNUICAgICBEZXN0aW5hdGlvbiBzaXRlOworIyAgREVTVERJUiAgRGVzdGluYXRpb24gZGlyZWN0b3J5OworIyAgQkFTRSAgICAgQmFzZSBuYW1lIGZvciB0aGUgZGlyZWN0aXZlIGZpbGU7CisjICBGSUxFICAgICBOYW1lIG9mIHRoZSBmaWxlIHRvIGRpc3RyaWJ1dGUgKG1heSBiZSBlbXB0eSk7CisjICBTVE1UICAgICBBZGRpdGlvbmFsIHN0YXRlbWVudHMgZm9yIHRoZSBkaXJlY3RpdmUgZmlsZTsKKyMgIEZJTEVTICAgIExpc3Qgb2YgZmlsZXMgdG8gdXBsb2FkLgordXBsb2FkICgpCit7CisgIGRlc3Q9JDEKKyAgZGVzdGRpcj0kMgorICBiYXNlPSQzCisgIGZpbGU9JDQKKyAgc3RtdD0kNQorICBmaWxlcz0kNgorCisgIHJtIC1mICRiYXNlLmRpcmVjdGl2ZSAkYmFzZS5kaXJlY3RpdmUuYXNjCisgIGNhc2UgJGRlc3QgaW4KKyAgICBhbHBoYS5nbnUub3JnOiopCisgICAgICBta2RpcmVjdGl2ZSAiJGRlc3RkaXIiICIkYmFzZSIgIiRmaWxlIiAiJHN0bXQiCisgICAgICBlY2hvICIkcGFzc3BocmFzZSIgfCAkZGJnICRHUEcgJHBhc3NwaHJhc2VfZmRfMCAtLWNsZWFyc2lnbiAkYmFzZS5kaXJlY3RpdmUKKyAgICAgICRkYmcgbmNmdHBwdXQgZnRwLXVwbG9hZC5nbnUub3JnIC9pbmNvbWluZy9hbHBoYSAkZmlsZXMgJGJhc2UuZGlyZWN0aXZlLmFzYworICAgICAgOzsKKyAgICBmdHAuZ251Lm9yZzoqKQorICAgICAgbWtkaXJlY3RpdmUgIiRkZXN0ZGlyIiAiJGJhc2UiICIkZmlsZSIgIiRzdG10IgorICAgICAgZWNobyAiJHBhc3NwaHJhc2UiIHwgJGRiZyAkR1BHICRwYXNzcGhyYXNlX2ZkXzAgLS1jbGVhcnNpZ24gJGJhc2UuZGlyZWN0aXZlCisgICAgICAkZGJnIG5jZnRwcHV0IGZ0cC11cGxvYWQuZ251Lm9yZyAvaW5jb21pbmcvZnRwICRmaWxlcyAkYmFzZS5kaXJlY3RpdmUuYXNjCisgICAgICA7OworICAgIHNhdmFubmFoLmdudS5vcmc6KikKKyAgICAgIGlmIHRlc3QgLXogIiRmaWxlcyI7IHRoZW4KKyAgICAgICAgZWNobyAiJDA6IHdhcm5pbmc6IHN0YW5kYWxvbmUgZGlyZWN0aXZlcyBub3QgYXBwbGljYWJsZSBmb3IgJGRlc3QiID4mMgorICAgICAgZmkKKyAgICAgICRkYmcgbmNmdHBwdXQgc2F2YW5uYWguZ251Lm9yZyAvaW5jb21pbmcvc2F2YW5uYWgvJGRlc3RkaXIgJGZpbGVzCisgICAgICA7OworICAgIHNhdmFubmFoLm5vbmdudS5vcmc6KikKKyAgICAgIGlmIHRlc3QgLXogIiRmaWxlcyI7IHRoZW4KKyAgICAgICAgZWNobyAiJDA6IHdhcm5pbmc6IHN0YW5kYWxvbmUgZGlyZWN0aXZlcyBub3QgYXBwbGljYWJsZSBmb3IgJGRlc3QiID4mMgorICAgICAgZmkKKyAgICAgICRkYmcgbmNmdHBwdXQgc2F2YW5uYWgubm9uZ251Lm9yZyAvaW5jb21pbmcvc2F2YW5uYWgvJGRlc3RkaXIgJGZpbGVzCisgICAgICA7OworICAgIGRvd25sb2FkLmdudS5vcmcudWE6YWxwaGEvKnxkb3dubG9hZC5nbnUub3JnLnVhOmZ0cC8qKQorICAgICAgZGVzdGRpcl9wMT1gZWNobyAiJGRlc3RkaXIiIHwgc2VkICdzLF5bXi9dKi8sLCdgCisgICAgICBkZXN0ZGlyX3RvcGRpcj1gZWNobyAiJGRlc3RkaXIiIHwgc2VkICdzLC8uKiwsJ2AKKyAgICAgIG1rZGlyZWN0aXZlICIkZGVzdGRpcl9wMSIgIiRiYXNlIiAiJGZpbGUiICIkc3RtdCIKKyAgICAgIGVjaG8gIiRwYXNzcGhyYXNlIiB8ICRkYmcgJEdQRyAkcGFzc3BocmFzZV9mZF8wIC0tY2xlYXJzaWduICRiYXNlLmRpcmVjdGl2ZQorICAgICAgZm9yIGYgaW4gJGZpbGVzICRiYXNlLmRpcmVjdGl2ZS5hc2MKKyAgICAgIGRvCisgICAgICAgIGVjaG8gcHV0ICRmCisgICAgICBkb25lIHwgJGRiZyBzZnRwIC1iIC0gcHVzemN6YS5nbnUub3JnLnVhOi9pbmNvbWluZy8kZGVzdGRpcl90b3BkaXIKKyAgICAgIDs7CisgICAgLyopCisgICAgICBkZXN0X2hvc3Q9YGVjaG8gIiRkZXN0IiB8IHNlZCAncyw6LiosLCdgCisgICAgICBta2RpcmVjdGl2ZSAiJGRlc3RkaXIiICIkYmFzZSIgIiRmaWxlIiAiJHN0bXQiCisgICAgICBlY2hvICIkcGFzc3BocmFzZSIgfCAkZGJnICRHUEcgJHBhc3NwaHJhc2VfZmRfMCAtLWNsZWFyc2lnbiAkYmFzZS5kaXJlY3RpdmUKKyAgICAgICRkYmcgY3AgJGZpbGVzICRiYXNlLmRpcmVjdGl2ZS5hc2MgJGRlc3RfaG9zdAorICAgICAgOzsKKyAgICAqKQorICAgICAgaWYgdGVzdCAteiAiJGZpbGVzIjsgdGhlbgorICAgICAgICBlY2hvICIkMDogd2FybmluZzogc3RhbmRhbG9uZSBkaXJlY3RpdmVzIG5vdCBhcHBsaWNhYmxlIGZvciAkZGVzdCIgPiYyCisgICAgICBmaQorICAgICAgJGRiZyBzY3AgJGZpbGVzICRkZXN0CisgICAgICA7OworICBlc2FjCisgIHJtIC1mICRiYXNlLmRpcmVjdGl2ZSAkYmFzZS5kaXJlY3RpdmUuYXNjCit9CisKKyMjIyMjCisjIFByb2Nlc3MgYW55IHN0YW5kYWxvbmUgZGlyZWN0aXZlcworc3RtdD0KK2lmIHRlc3QgLW4gIiRzeW1saW5rX2ZpbGVzIjsgdGhlbgorICBzdG10PSIkc3RtdAorYG1rc3ltbGluayAkc3ltbGlua19maWxlc2AiCitmaQorCitmb3IgZmlsZSBpbiAkZGVsZXRlX2ZpbGVzCitkbworICBzdG10PSIkc3RtdAorYXJjaGl2ZTogJGZpbGUiCitkb25lCisKK2ZvciBmaWxlIGluICRkZWxldGVfc3ltbGlua3MKK2RvCisgIHN0bXQ9IiRzdG10CitybXN5bWxpbms6ICRmaWxlIgorZG9uZQorCitpZiB0ZXN0IC1uICIkc3RtdCI7IHRoZW4KKyAgZm9yIGRlc3QgaW4gJHRvCisgIGRvCisgICAgZGVzdGRpcj1gZWNobyAkZGVzdCB8IHNlZCAncy9bXjpdKjovLydgCisgICAgdXBsb2FkICIkZGVzdCIgIiRkZXN0ZGlyIiAiYGhvc3RuYW1lYC0kJCIgIiIgIiRzdG10IgorICBkb25lCitmaQorCisjIFByb2Nlc3MgYWN0dWFsIHVwbG9hZHMKK2ZvciBkZXN0IGluICR0bworZG8KKyAgZm9yIGZpbGUKKyAgZG8KKyAgICBlY2hvICJVcGxvYWRpbmcgJGZpbGUgdG8gJGRlc3QgLi4uIgorICAgIHN0bXQ9CisgICAgIworICAgICMgYWxsb3dpbmcgZmlsZSByZXBsYWNlbWVudCBpcyBhbGwgb3Igbm90aGluZy4KKyAgICBpZiB0ZXN0IC1uICIkcmVwbGFjZSI7IHRoZW4gc3RtdD0iJHN0bXQKKyRyZXBsYWNlIgorICAgIGZpCisgICAgIworICAgIGZpbGVzPSIkZmlsZSAkZmlsZS5zaWciCisgICAgZGVzdGRpcj1gZWNobyAkZGVzdCB8IHNlZCAncy9bXjpdKjovLydgCisgICAgaWYgdGVzdCAtbiAiJHN5bWxpbmtfZXhwciI7IHRoZW4KKyAgICAgIGxpbmtuYW1lPWBlY2hvICRmaWxlIHwgc2VkICIkc3ltbGlua19leHByImAKKyAgICAgIHN0bXQ9IiRzdG10CitzeW1saW5rOiAkZmlsZSAkbGlua25hbWUKK3N5bWxpbms6ICRmaWxlLnNpZyAkbGlua25hbWUuc2lnIgorICAgIGZpCisgICAgdXBsb2FkICIkZGVzdCIgIiRkZXN0ZGlyIiAiJGZpbGUiICIkZmlsZSIgIiRzdG10IiAiJGZpbGVzIgorICBkb25lCitkb25lCisKK2V4aXQgMAorCisjIExvY2FsIHZhcmlhYmxlczoKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9idWlsZC1hdXgvaW5zdGFsbC1zaCBiL2J1aWxkLWF1eC9pbnN0YWxsLXNoCmluZGV4IDRkNGE5NTEuLjM3N2JiODYgMTAwNzU1Ci0tLSBhL2J1aWxkLWF1eC9pbnN0YWxsLXNoCisrKyBiL2J1aWxkLWF1eC9pbnN0YWxsLXNoCkBAIC0xLDcgKzEsNyBAQAogIyEvYmluL3NoCiAjIGluc3RhbGwgLSBpbnN0YWxsIGEgcHJvZ3JhbSwgc2NyaXB0LCBvciBkYXRhZmlsZQogCi1zY3JpcHR2ZXJzaW9uPTIwMDUtMDUtMTQuMjIKK3NjcmlwdHZlcnNpb249MjAxMS0xMS0yMC4wNzsgIyBVVEMKIAogIyBUaGlzIG9yaWdpbmF0ZXMgZnJvbSBYMTFSNSAobWl0L3V0aWwvc2NyaXB0cy9pbnN0YWxsLnNoKSwgd2hpY2ggd2FzCiAjIGxhdGVyIHJlbGVhc2VkIGluIFgxMVI2ICh4Yy9jb25maWcvdXRpbC9pbnN0YWxsLnNoKSB3aXRoIHRoZQpAQCAtMzUsNDIgKzM1LDcyIEBACiAjIEZTRiBjaGFuZ2VzIHRvIHRoaXMgZmlsZSBhcmUgaW4gdGhlIHB1YmxpYyBkb21haW4uCiAjCiAjIENhbGxpbmcgdGhpcyBzY3JpcHQgaW5zdGFsbC1zaCBpcyBwcmVmZXJyZWQgb3ZlciBpbnN0YWxsLnNoLCB0byBwcmV2ZW50Ci0jIGBtYWtlJyBpbXBsaWNpdCBydWxlcyBmcm9tIGNyZWF0aW5nIGEgZmlsZSBjYWxsZWQgaW5zdGFsbCBmcm9tIGl0CisjICdtYWtlJyBpbXBsaWNpdCBydWxlcyBmcm9tIGNyZWF0aW5nIGEgZmlsZSBjYWxsZWQgaW5zdGFsbCBmcm9tIGl0CiAjIHdoZW4gdGhlcmUgaXMgbm8gTWFrZWZpbGUuCiAjCiAjIFRoaXMgc2NyaXB0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgQlNEIGluc3RhbGwgc2NyaXB0LCBidXQgd2FzIHdyaXR0ZW4KLSMgZnJvbSBzY3JhdGNoLiAgSXQgY2FuIG9ubHkgaW5zdGFsbCBvbmUgZmlsZSBhdCBhIHRpbWUsIGEgcmVzdHJpY3Rpb24KLSMgc2hhcmVkIHdpdGggbWFueSBPUydzIGluc3RhbGwgcHJvZ3JhbXMuCisjIGZyb20gc2NyYXRjaC4KKworbmw9JworJworSUZTPSIgIiIJJG5sIgogCiAjIHNldCBET0lUUFJPRyB0byBlY2hvIHRvIHRlc3QgdGhpcyBzY3JpcHQKIAogIyBEb24ndCB1c2UgOi0gc2luY2UgNC4zQlNEIGFuZCBlYXJsaWVyIHNoZWxscyBkb24ndCBsaWtlIGl0LgotZG9pdD0iJHtET0lUUFJPRy19IgorZG9pdD0ke0RPSVRQUk9HLX0KK2lmIHRlc3QgLXogIiRkb2l0IjsgdGhlbgorICBkb2l0X2V4ZWM9ZXhlYworZWxzZQorICBkb2l0X2V4ZWM9JGRvaXQKK2ZpCiAKLSMgcHV0IGluIGFic29sdXRlIHBhdGhzIGlmIHlvdSBkb24ndCBoYXZlIHRoZW0gaW4geW91ciBwYXRoOyBvciB1c2UgZW52LiB2YXJzLgorIyBQdXQgaW4gYWJzb2x1dGUgZmlsZSBuYW1lcyBpZiB5b3UgZG9uJ3QgaGF2ZSB0aGVtIGluIHlvdXIgcGF0aDsKKyMgb3IgdXNlIGVudmlyb25tZW50IHZhcnMuCiAKLW12cHJvZz0iJHtNVlBST0ctbXZ9IgotY3Bwcm9nPSIke0NQUFJPRy1jcH0iCi1jaG1vZHByb2c9IiR7Q0hNT0RQUk9HLWNobW9kfSIKLWNob3ducHJvZz0iJHtDSE9XTlBST0ctY2hvd259IgotY2hncnBwcm9nPSIke0NIR1JQUFJPRy1jaGdycH0iCi1zdHJpcHByb2c9IiR7U1RSSVBQUk9HLXN0cmlwfSIKLXJtcHJvZz0iJHtSTVBST0ctcm19IgotbWtkaXJwcm9nPSIke01LRElSUFJPRy1ta2Rpcn0iCitjaGdycHByb2c9JHtDSEdSUFBST0ctY2hncnB9CitjaG1vZHByb2c9JHtDSE1PRFBST0ctY2htb2R9CitjaG93bnByb2c9JHtDSE9XTlBST0ctY2hvd259CitjbXBwcm9nPSR7Q01QUFJPRy1jbXB9CitjcHByb2c9JHtDUFBST0ctY3B9Citta2RpcnByb2c9JHtNS0RJUlBST0ctbWtkaXJ9CittdnByb2c9JHtNVlBST0ctbXZ9CitybXByb2c9JHtSTVBST0ctcm19CitzdHJpcHByb2c9JHtTVFJJUFBST0ctc3RyaXB9CiAKLWNobW9kY21kPSIkY2htb2Rwcm9nIDA3NTUiCi1jaG93bmNtZD0KK3Bvc2l4X2dsb2I9Jz8nCitpbml0aWFsaXplX3Bvc2l4X2dsb2I9JworICB0ZXN0ICIkcG9zaXhfZ2xvYiIgIT0gIj8iIHx8IHsKKyAgICBpZiAoc2V0IC1mKSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgcG9zaXhfZ2xvYj0KKyAgICBlbHNlCisgICAgICBwb3NpeF9nbG9iPToKKyAgICBmaQorICB9CisnCisKK3Bvc2l4X21rZGlyPQorCisjIERlc2lyZWQgbW9kZSBvZiBpbnN0YWxsZWQgZmlsZS4KK21vZGU9MDc1NQorCiBjaGdycGNtZD0KLXN0cmlwY21kPQorY2htb2RjbWQ9JGNobW9kcHJvZworY2hvd25jbWQ9CittdmNtZD0kbXZwcm9nCiBybWNtZD0iJHJtcHJvZyAtZiIKLW12Y21kPSIkbXZwcm9nIgorc3RyaXBjbWQ9CisKIHNyYz0KIGRzdD0KIGRpcl9hcmc9Ci1kc3Rhcmc9Citkc3RfYXJnPQorCitjb3B5X29uX2NoYW5nZT1mYWxzZQogbm9fdGFyZ2V0X2RpcmVjdG9yeT0KIAotdXNhZ2U9IlVzYWdlOiAkMCBbT1BUSU9OXS4uLiBbLVRdIFNSQ0ZJTEUgRFNURklMRQordXNhZ2U9IlwKK1VzYWdlOiAkMCBbT1BUSU9OXS4uLiBbLVRdIFNSQ0ZJTEUgRFNURklMRQogICAgb3I6ICQwIFtPUFRJT05dLi4uIFNSQ0ZJTEVTLi4uIERJUkVDVE9SWQogICAgb3I6ICQwIFtPUFRJT05dLi4uIC10IERJUkVDVE9SWSBTUkNGSUxFUy4uLgogICAgb3I6ICQwIFtPUFRJT05dLi4uIC1kIERJUkVDVE9SSUVTLi4uCkBAIC04MCwxMDggKzExMCwxNDggQEAKIEluIHRoZSA0dGgsIGNyZWF0ZSBESVJFQ1RPUklFUy4KIAogT3B0aW9uczoKLS1jICAgICAgICAgKGlnbm9yZWQpCi0tZCAgICAgICAgIGNyZWF0ZSBkaXJlY3RvcmllcyBpbnN0ZWFkIG9mIGluc3RhbGxpbmcgZmlsZXMuCi0tZyBHUk9VUCAgICRjaGdycHByb2cgaW5zdGFsbGVkIGZpbGVzIHRvIEdST1VQLgotLW0gTU9ERSAgICAkY2htb2Rwcm9nIGluc3RhbGxlZCBmaWxlcyB0byBNT0RFLgotLW8gVVNFUiAgICAkY2hvd25wcm9nIGluc3RhbGxlZCBmaWxlcyB0byBVU0VSLgotLXMgICAgICAgICAkc3RyaXBwcm9nIGluc3RhbGxlZCBmaWxlcy4KLS10IERJUkVDVE9SWSAgaW5zdGFsbCBpbnRvIERJUkVDVE9SWS4KLS1UICAgICAgICAgcmVwb3J0IGFuIGVycm9yIGlmIERTVEZJTEUgaXMgYSBkaXJlY3RvcnkuCi0tLWhlbHAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0LgotLS12ZXJzaW9uICBkaXNwbGF5IHZlcnNpb24gaW5mbyBhbmQgZXhpdC4KKyAgICAgLS1oZWxwICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdC4KKyAgICAgLS12ZXJzaW9uICBkaXNwbGF5IHZlcnNpb24gaW5mbyBhbmQgZXhpdC4KKworICAtYyAgICAgICAgICAgIChpZ25vcmVkKQorICAtQyAgICAgICAgICAgIGluc3RhbGwgb25seSBpZiBkaWZmZXJlbnQgKHByZXNlcnZlIHRoZSBsYXN0IGRhdGEgbW9kaWZpY2F0aW9uIHRpbWUpCisgIC1kICAgICAgICAgICAgY3JlYXRlIGRpcmVjdG9yaWVzIGluc3RlYWQgb2YgaW5zdGFsbGluZyBmaWxlcy4KKyAgLWcgR1JPVVAgICAgICAkY2hncnBwcm9nIGluc3RhbGxlZCBmaWxlcyB0byBHUk9VUC4KKyAgLW0gTU9ERSAgICAgICAkY2htb2Rwcm9nIGluc3RhbGxlZCBmaWxlcyB0byBNT0RFLgorICAtbyBVU0VSICAgICAgICRjaG93bnByb2cgaW5zdGFsbGVkIGZpbGVzIHRvIFVTRVIuCisgIC1zICAgICAgICAgICAgJHN0cmlwcHJvZyBpbnN0YWxsZWQgZmlsZXMuCisgIC10IERJUkVDVE9SWSAgaW5zdGFsbCBpbnRvIERJUkVDVE9SWS4KKyAgLVQgICAgICAgICAgICByZXBvcnQgYW4gZXJyb3IgaWYgRFNURklMRSBpcyBhIGRpcmVjdG9yeS4KIAogRW52aXJvbm1lbnQgdmFyaWFibGVzIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGNvbW1hbmRzOgotICBDSEdSUFBST0cgQ0hNT0RQUk9HIENIT1dOUFJPRyBDUFBST0cgTUtESVJQUk9HIE1WUFJPRyBSTVBST0cgU1RSSVBQUk9HCisgIENIR1JQUFJPRyBDSE1PRFBST0cgQ0hPV05QUk9HIENNUFBST0cgQ1BQUk9HIE1LRElSUFJPRyBNVlBST0cKKyAgUk1QUk9HIFNUUklQUFJPRwogIgogCi13aGlsZSB0ZXN0IC1uICIkMSI7IGRvCit3aGlsZSB0ZXN0ICQjIC1uZSAwOyBkbwogICBjYXNlICQxIGluCi0gICAgLWMpIHNoaWZ0Ci0gICAgICAgIGNvbnRpbnVlOzsKKyAgICAtYykgOzsKIAotICAgIC1kKSBkaXJfYXJnPXRydWUKLSAgICAgICAgc2hpZnQKLSAgICAgICAgY29udGludWU7OworICAgIC1DKSBjb3B5X29uX2NoYW5nZT10cnVlOzsKKworICAgIC1kKSBkaXJfYXJnPXRydWU7OwogCiAgICAgLWcpIGNoZ3JwY21kPSIkY2hncnBwcm9nICQyIgotICAgICAgICBzaGlmdAotICAgICAgICBzaGlmdAotICAgICAgICBjb250aW51ZTs7CisJc2hpZnQ7OwogCiAgICAgLS1oZWxwKSBlY2hvICIkdXNhZ2UiOyBleGl0ICQ/OzsKIAotICAgIC1tKSBjaG1vZGNtZD0iJGNobW9kcHJvZyAkMiIKLSAgICAgICAgc2hpZnQKLSAgICAgICAgc2hpZnQKLSAgICAgICAgY29udGludWU7OworICAgIC1tKSBtb2RlPSQyCisJY2FzZSAkbW9kZSBpbgorCSAgKicgJyogfCAqJwknKiB8IConCisnKgkgIHwgKicqJyogfCAqJz8nKiB8IConWycqKQorCSAgICBlY2hvICIkMDogaW52YWxpZCBtb2RlOiAkbW9kZSIgPiYyCisJICAgIGV4aXQgMTs7CisJZXNhYworCXNoaWZ0OzsKIAogICAgIC1vKSBjaG93bmNtZD0iJGNob3ducHJvZyAkMiIKLSAgICAgICAgc2hpZnQKLSAgICAgICAgc2hpZnQKLSAgICAgICAgY29udGludWU7OworCXNoaWZ0OzsKIAotICAgIC1zKSBzdHJpcGNtZD0kc3RyaXBwcm9nCi0gICAgICAgIHNoaWZ0Ci0gICAgICAgIGNvbnRpbnVlOzsKKyAgICAtcykgc3RyaXBjbWQ9JHN0cmlwcHJvZzs7CiAKLSAgICAtdCkgZHN0YXJnPSQyCi0Jc2hpZnQKLQlzaGlmdAotCWNvbnRpbnVlOzsKKyAgICAtdCkgZHN0X2FyZz0kMgorCSMgUHJvdGVjdCBuYW1lcyBwcm9ibGVtYXRpYyBmb3IgJ3Rlc3QnIGFuZCBvdGhlciB1dGlsaXRpZXMuCisJY2FzZSAkZHN0X2FyZyBpbgorCSAgLSogfCBbPVwoXCkhXSkgZHN0X2FyZz0uLyRkc3RfYXJnOzsKKwllc2FjCisJc2hpZnQ7OwogCi0gICAgLVQpIG5vX3RhcmdldF9kaXJlY3Rvcnk9dHJ1ZQotCXNoaWZ0Ci0JY29udGludWU7OworICAgIC1UKSBub190YXJnZXRfZGlyZWN0b3J5PXRydWU7OwogCiAgICAgLS12ZXJzaW9uKSBlY2hvICIkMCAkc2NyaXB0dmVyc2lvbiI7IGV4aXQgJD87OwogCi0gICAgKikgICMgV2hlbiAtZCBpcyB1c2VkLCBhbGwgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgZGlyZWN0b3JpZXMgdG8gY3JlYXRlLgotCSMgV2hlbiAtdCBpcyB1c2VkLCB0aGUgZGVzdGluYXRpb24gaXMgYWxyZWFkeSBzcGVjaWZpZWQuCi0JdGVzdCAtbiAiJGRpcl9hcmckZHN0YXJnIiAmJiBicmVhawotICAgICAgICAjIE90aGVyd2lzZSwgdGhlIGxhc3QgYXJndW1lbnQgaXMgdGhlIGRlc3RpbmF0aW9uLiAgUmVtb3ZlIGl0IGZyb20gJEAuCi0JZm9yIGFyZwotCWRvCi0gICAgICAgICAgaWYgdGVzdCAtbiAiJGRzdGFyZyI7IHRoZW4KLQkgICAgIyAkQCBpcyBub3QgZW1wdHk6IGl0IGNvbnRhaW5zIGF0IGxlYXN0ICRhcmcuCi0JICAgIHNldCBmbm9yZCAiJEAiICIkZHN0YXJnIgotCSAgICBzaGlmdCAjIGZub3JkCi0JICBmaQotCSAgc2hpZnQgIyBhcmcKLQkgIGRzdGFyZz0kYXJnCi0JZG9uZQorICAgIC0tKQlzaGlmdAogCWJyZWFrOzsKKworICAgIC0qKQllY2hvICIkMDogaW52YWxpZCBvcHRpb246ICQxIiA+JjIKKwlleGl0IDE7OworCisgICAgKikgIGJyZWFrOzsKICAgZXNhYworICBzaGlmdAogZG9uZQogCi1pZiB0ZXN0IC16ICIkMSI7IHRoZW4KK2lmIHRlc3QgJCMgLW5lIDAgJiYgdGVzdCAteiAiJGRpcl9hcmckZHN0X2FyZyI7IHRoZW4KKyAgIyBXaGVuIC1kIGlzIHVzZWQsIGFsbCByZW1haW5pbmcgYXJndW1lbnRzIGFyZSBkaXJlY3RvcmllcyB0byBjcmVhdGUuCisgICMgV2hlbiAtdCBpcyB1c2VkLCB0aGUgZGVzdGluYXRpb24gaXMgYWxyZWFkeSBzcGVjaWZpZWQuCisgICMgT3RoZXJ3aXNlLCB0aGUgbGFzdCBhcmd1bWVudCBpcyB0aGUgZGVzdGluYXRpb24uICBSZW1vdmUgaXQgZnJvbSAkQC4KKyAgZm9yIGFyZworICBkbworICAgIGlmIHRlc3QgLW4gIiRkc3RfYXJnIjsgdGhlbgorICAgICAgIyAkQCBpcyBub3QgZW1wdHk6IGl0IGNvbnRhaW5zIGF0IGxlYXN0ICRhcmcuCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGRzdF9hcmciCisgICAgICBzaGlmdCAjIGZub3JkCisgICAgZmkKKyAgICBzaGlmdCAjIGFyZworICAgIGRzdF9hcmc9JGFyZworICAgICMgUHJvdGVjdCBuYW1lcyBwcm9ibGVtYXRpYyBmb3IgJ3Rlc3QnIGFuZCBvdGhlciB1dGlsaXRpZXMuCisgICAgY2FzZSAkZHN0X2FyZyBpbgorICAgICAgLSogfCBbPVwoXCkhXSkgZHN0X2FyZz0uLyRkc3RfYXJnOzsKKyAgICBlc2FjCisgIGRvbmUKK2ZpCisKK2lmIHRlc3QgJCMgLWVxIDA7IHRoZW4KICAgaWYgdGVzdCAteiAiJGRpcl9hcmciOyB0aGVuCiAgICAgZWNobyAiJDA6IG5vIGlucHV0IGZpbGUgc3BlY2lmaWVkLiIgPiYyCiAgICAgZXhpdCAxCiAgIGZpCi0gICMgSXQncyBPSyB0byBjYWxsIGBpbnN0YWxsLXNoIC1kJyB3aXRob3V0IGFyZ3VtZW50LgorICAjIEl0J3MgT0sgdG8gY2FsbCAnaW5zdGFsbC1zaCAtZCcgd2l0aG91dCBhcmd1bWVudC4KICAgIyBUaGlzIGNhbiBoYXBwZW4gd2hlbiBjcmVhdGluZyBjb25kaXRpb25hbCBkaXJlY3Rvcmllcy4KICAgZXhpdCAwCiBmaQogCitpZiB0ZXN0IC16ICIkZGlyX2FyZyI7IHRoZW4KKyAgZG9fZXhpdD0nKGV4aXQgJHJldCk7IGV4aXQgJHJldCcKKyAgdHJhcCAicmV0PTEyOTsgJGRvX2V4aXQiIDEKKyAgdHJhcCAicmV0PTEzMDsgJGRvX2V4aXQiIDIKKyAgdHJhcCAicmV0PTE0MTsgJGRvX2V4aXQiIDEzCisgIHRyYXAgInJldD0xNDM7ICRkb19leGl0IiAxNQorCisgICMgU2V0IHVtYXNrIHNvIGFzIG5vdCB0byBjcmVhdGUgdGVtcHMgd2l0aCB0b28tZ2VuZXJvdXMgbW9kZXMuCisgICMgSG93ZXZlciwgJ3N0cmlwJyByZXF1aXJlcyBib3RoIHJlYWQgYW5kIHdyaXRlIGFjY2VzcyB0byB0ZW1wcy4KKyAgY2FzZSAkbW9kZSBpbgorICAgICMgT3B0aW1pemUgY29tbW9uIGNhc2VzLgorICAgICo2NDQpIGNwX3VtYXNrPTEzMzs7CisgICAgKjc1NSkgY3BfdW1hc2s9MjI7OworCisgICAgKlswLTddKQorICAgICAgaWYgdGVzdCAteiAiJHN0cmlwY21kIjsgdGhlbgorCXVfcGx1c19ydz0KKyAgICAgIGVsc2UKKwl1X3BsdXNfcnc9JyUgMjAwJworICAgICAgZmkKKyAgICAgIGNwX3VtYXNrPWBleHByICcoJyA3NzcgLSAkbW9kZSAlIDEwMDAgJyknICR1X3BsdXNfcndgOzsKKyAgICAqKQorICAgICAgaWYgdGVzdCAteiAiJHN0cmlwY21kIjsgdGhlbgorCXVfcGx1c19ydz0KKyAgICAgIGVsc2UKKwl1X3BsdXNfcnc9LHUrcncKKyAgICAgIGZpCisgICAgICBjcF91bWFzaz0kbW9kZSR1X3BsdXNfcnc7OworICBlc2FjCitmaQorCiBmb3Igc3JjCiBkbwotICAjIFByb3RlY3QgbmFtZXMgc3RhcnRpbmcgd2l0aCBgLScuCisgICMgUHJvdGVjdCBuYW1lcyBwcm9ibGVtYXRpYyBmb3IgJ3Rlc3QnIGFuZCBvdGhlciB1dGlsaXRpZXMuCiAgIGNhc2UgJHNyYyBpbgotICAgIC0qKSBzcmM9Li8kc3JjIDs7CisgICAgLSogfCBbPVwoXCkhXSkgc3JjPS4vJHNyYzs7CiAgIGVzYWMKIAogICBpZiB0ZXN0IC1uICIkZGlyX2FyZyI7IHRoZW4KICAgICBkc3Q9JHNyYwotICAgIHNyYz0KLQotICAgIGlmIHRlc3QgLWQgIiRkc3QiOyB0aGVuCi0gICAgICBta2RpcmNtZD06Ci0gICAgICBjaG1vZGNtZD0KLSAgICBlbHNlCi0gICAgICBta2RpcmNtZD0kbWtkaXJwcm9nCi0gICAgZmkKKyAgICBkc3RkaXI9JGRzdAorICAgIHRlc3QgLWQgIiRkc3RkaXIiCisgICAgZHN0ZGlyX3N0YXR1cz0kPwogICBlbHNlCisKICAgICAjIFdhaXRpbmcgZm9yIHRoaXMgdG8gYmUgZGV0ZWN0ZWQgYnkgdGhlICIkY3Bwcm9nICRzcmMgJGRzdHRtcCIgY29tbWFuZAogICAgICMgbWlnaHQgY2F1c2UgZGlyZWN0b3JpZXMgdG8gYmUgY3JlYXRlZCwgd2hpY2ggd291bGQgYmUgZXNwZWNpYWxseSBiYWQKICAgICAjIGlmICRzcmMgKGFuZCB0aHVzICRkc3R0bXApIGNvbnRhaW5zICcqJy4KQEAgLTE5MCw3MSArMjYwLDE5NCBAQAogICAgICAgZXhpdCAxCiAgICAgZmkKIAotICAgIGlmIHRlc3QgLXogIiRkc3RhcmciOyB0aGVuCisgICAgaWYgdGVzdCAteiAiJGRzdF9hcmciOyB0aGVuCiAgICAgICBlY2hvICIkMDogbm8gZGVzdGluYXRpb24gc3BlY2lmaWVkLiIgPiYyCiAgICAgICBleGl0IDEKICAgICBmaQotCi0gICAgZHN0PSRkc3RhcmcKLSAgICAjIFByb3RlY3QgbmFtZXMgc3RhcnRpbmcgd2l0aCBgLScuCi0gICAgY2FzZSAkZHN0IGluCi0gICAgICAtKikgZHN0PS4vJGRzdCA7OwotICAgIGVzYWMKKyAgICBkc3Q9JGRzdF9hcmcKIAogICAgICMgSWYgZGVzdGluYXRpb24gaXMgYSBkaXJlY3RvcnksIGFwcGVuZCB0aGUgaW5wdXQgZmlsZW5hbWU7IHdvbid0IHdvcmsKICAgICAjIGlmIGRvdWJsZSBzbGFzaGVzIGFyZW4ndCBpZ25vcmVkLgogICAgIGlmIHRlc3QgLWQgIiRkc3QiOyB0aGVuCiAgICAgICBpZiB0ZXN0IC1uICIkbm9fdGFyZ2V0X2RpcmVjdG9yeSI7IHRoZW4KLQllY2hvICIkMDogJGRzdGFyZzogSXMgYSBkaXJlY3RvcnkiID4mMgorCWVjaG8gIiQwOiAkZHN0X2FyZzogSXMgYSBkaXJlY3RvcnkiID4mMgogCWV4aXQgMQogICAgICAgZmkKLSAgICAgIGRzdD0kZHN0L2BiYXNlbmFtZSAiJHNyYyJgCisgICAgICBkc3RkaXI9JGRzdAorICAgICAgZHN0PSRkc3RkaXIvYGJhc2VuYW1lICIkc3JjImAKKyAgICAgIGRzdGRpcl9zdGF0dXM9MAorICAgIGVsc2UKKyAgICAgICMgUHJlZmVyIGRpcm5hbWUsIGJ1dCBmYWxsIGJhY2sgb24gYSBzdWJzdGl0dXRlIGlmIGRpcm5hbWUgZmFpbHMuCisgICAgICBkc3RkaXI9YAorCShkaXJuYW1lICIkZHN0IikgMj4vZGV2L251bGwgfHwKKwlleHByIFgiJGRzdCIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgICAgIFgiJGRzdCIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgICAgIFgiJGRzdCIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgICAgIFgiJGRzdCIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CisJZWNobyBYIiRkc3QiIHwKKwkgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkJICAgcy8vXDEvCisJCSAgIHEKKwkJIH0KKwkJIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkJICAgcy8vXDEvCisJCSAgIHEKKwkJIH0KKwkJIC9eWFwoXC9cL1wpJC97CisJCSAgIHMvL1wxLworCQkgICBxCisJCSB9CisJCSAvXlhcKFwvXCkuKi97CisJCSAgIHMvL1wxLworCQkgICBxCisJCSB9CisJCSBzLy4qLy4vOyBxJworICAgICAgYAorCisgICAgICB0ZXN0IC1kICIkZHN0ZGlyIgorICAgICAgZHN0ZGlyX3N0YXR1cz0kPwogICAgIGZpCiAgIGZpCiAKLSAgIyBUaGlzIHNlZCBjb21tYW5kIGVtdWxhdGVzIHRoZSBkaXJuYW1lIGNvbW1hbmQuCi0gIGRzdGRpcj1gZWNobyAiJGRzdCIgfCBzZWQgLWUgJ3MsLyokLCw7cyxbXi9dKiQsLDtzLC8qJCwsO3MsXiQsLiwnYAorICBvYnNvbGV0ZV9ta2Rpcl91c2VkPWZhbHNlCiAKLSAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IGV4aXN0cy4KKyAgaWYgdGVzdCAkZHN0ZGlyX3N0YXR1cyAhPSAwOyB0aGVuCisgICAgY2FzZSAkcG9zaXhfbWtkaXIgaW4KKyAgICAgICcnKQorCSMgQ3JlYXRlIGludGVybWVkaWF0ZSBkaXJzIHVzaW5nIG1vZGUgNzU1IGFzIG1vZGlmaWVkIGJ5IHRoZSB1bWFzay4KKwkjIFRoaXMgaXMgbGlrZSBGcmVlQlNEICdpbnN0YWxsJyBhcyBvZiAxOTk3LTEwLTI4LgorCXVtYXNrPWB1bWFza2AKKwljYXNlICRzdHJpcGNtZC4kdW1hc2sgaW4KKwkgICMgT3B0aW1pemUgY29tbW9uIGNhc2VzLgorCSAgKlsyMzY3XVsyMzY3XSkgbWtkaXJfdW1hc2s9JHVtYXNrOzsKKwkgIC4qMFswMl1bMDJdIHwgLlswMl1bMDJdIHwgLlswMl0pIG1rZGlyX3VtYXNrPTIyOzsKIAotICAjIFNraXAgbG90cyBvZiBzdGF0IGNhbGxzIGluIHRoZSB1c3VhbCBjYXNlLgotICBpZiB0ZXN0ICEgLWQgIiRkc3RkaXIiOyB0aGVuCi0gICAgZGVmYXVsdElGUz0nCi0JICcKLSAgICBJRlM9IiR7SUZTLSRkZWZhdWx0SUZTfSIKKwkgICpbMC03XSkKKwkgICAgbWtkaXJfdW1hc2s9YGV4cHIgJHVtYXNrICsgMjIgXAorCSAgICAgIC0gJHVtYXNrICUgMTAwICUgNDAgKyAkdW1hc2sgJSAyMCBcCisJICAgICAgLSAkdW1hc2sgJSAxMCAlIDQgKyAkdW1hc2sgJSAyCisJICAgIGA7OworCSAgKikgbWtkaXJfdW1hc2s9JHVtYXNrLGdvLXc7OworCWVzYWMKIAotICAgIG9JRlM9JElGUwotICAgICMgU29tZSBzaCdzIGNhbid0IGhhbmRsZSBJRlM9LyBmb3Igc29tZSByZWFzb24uCi0gICAgSUZTPSclJwotICAgIHNldCB4IGBlY2hvICIkZHN0ZGlyIiB8IHNlZCAtZSAnc0AvQCVAZycgLWUgJ3NAXiVAL0AnYAotICAgIHNoaWZ0Ci0gICAgSUZTPSRvSUZTCisJIyBXaXRoIC1kLCBjcmVhdGUgdGhlIG5ldyBkaXJlY3Rvcnkgd2l0aCB0aGUgdXNlci1zcGVjaWZpZWQgbW9kZS4KKwkjIE90aGVyd2lzZSwgcmVseSBvbiAkbWtkaXJfdW1hc2suCisJaWYgdGVzdCAtbiAiJGRpcl9hcmciOyB0aGVuCisJICBta2Rpcl9tb2RlPS1tJG1vZGUKKwllbHNlCisJICBta2Rpcl9tb2RlPQorCWZpCiAKLSAgICBwYXRoY29tcD0KKwlwb3NpeF9ta2Rpcj1mYWxzZQorCWNhc2UgJHVtYXNrIGluCisJICAqWzEyMzU2N11bMC03XVswLTddKQorCSAgICAjIFBPU0lYIG1rZGlyIC1wIHNldHMgdSt3eCBiaXRzIHJlZ2FyZGxlc3Mgb2YgdW1hc2ssIHdoaWNoCisJICAgICMgaXMgaW5jb21wYXRpYmxlIHdpdGggRnJlZUJTRCAnaW5zdGFsbCcgd2hlbiAodW1hc2sgJiAzMDApICE9IDAuCisJICAgIDs7CisJICAqKQorCSAgICB0bXBkaXI9JHtUTVBESVItL3RtcH0vaW5zJFJBTkRPTS0kJAorCSAgICB0cmFwICdyZXQ9JD87IHJtZGlyICIkdG1wZGlyL2QiICIkdG1wZGlyIiAyPi9kZXYvbnVsbDsgZXhpdCAkcmV0JyAwCiAKLSAgICB3aGlsZSB0ZXN0ICQjIC1uZSAwIDsgZG8KLSAgICAgIHBhdGhjb21wPSRwYXRoY29tcCQxCisJICAgIGlmICh1bWFzayAkbWtkaXJfdW1hc2sgJiYKKwkJZXhlYyAkbWtkaXJwcm9nICRta2Rpcl9tb2RlIC1wIC0tICIkdG1wZGlyL2QiKSA+L2Rldi9udWxsIDI+JjEKKwkgICAgdGhlbgorCSAgICAgIGlmIHRlc3QgLXogIiRkaXJfYXJnIiB8fCB7CisJCSAgICMgQ2hlY2sgZm9yIFBPU0lYIGluY29tcGF0aWJpbGl0aWVzIHdpdGggLW0uCisJCSAgICMgSFAtVVggMTEuMjMgYW5kIElSSVggNi41IG1rZGlyIC1tIC1wIHNldHMgZ3JvdXAtIG9yCisJCSAgICMgb3RoZXItd3JpdGFibGUgYml0IG9mIHBhcmVudCBkaXJlY3Rvcnkgd2hlbiBpdCBzaG91bGRuJ3QuCisJCSAgICMgRnJlZUJTRCA2LjEgbWtkaXIgLW0gLXAgc2V0cyBtb2RlIG9mIGV4aXN0aW5nIGRpcmVjdG9yeS4KKwkJICAgbHNfbGRfdG1wZGlyPWBscyAtbGQgIiR0bXBkaXIiYAorCQkgICBjYXNlICRsc19sZF90bXBkaXIgaW4KKwkJICAgICBkPz8/Py0/ci0qKSBkaWZmZXJlbnRfbW9kZT03MDA7OworCQkgICAgIGQ/Pz8/LT8tLSopIGRpZmZlcmVudF9tb2RlPTc1NTs7CisJCSAgICAgKikgZmFsc2U7OworCQkgICBlc2FjICYmCisJCSAgICRta2RpcnByb2cgLW0kZGlmZmVyZW50X21vZGUgLXAgLS0gIiR0bXBkaXIiICYmIHsKKwkJICAgICBsc19sZF90bXBkaXJfMT1gbHMgLWxkICIkdG1wZGlyImAKKwkJICAgICB0ZXN0ICIkbHNfbGRfdG1wZGlyIiA9ICIkbHNfbGRfdG1wZGlyXzEiCisJCSAgIH0KKwkJIH0KKwkgICAgICB0aGVuIHBvc2l4X21rZGlyPToKKwkgICAgICBmaQorCSAgICAgIHJtZGlyICIkdG1wZGlyL2QiICIkdG1wZGlyIgorCSAgICBlbHNlCisJICAgICAgIyBSZW1vdmUgYW55IGRpcnMgbGVmdCBiZWhpbmQgYnkgYW5jaWVudCBta2RpciBpbXBsZW1lbnRhdGlvbnMuCisJICAgICAgcm1kaXIgLi8kbWtkaXJfbW9kZSAuLy1wIC4vLS0gMj4vZGV2L251bGwKKwkgICAgZmkKKwkgICAgdHJhcCAnJyAwOzsKKwllc2FjOzsKKyAgICBlc2FjCisKKyAgICBpZgorICAgICAgJHBvc2l4X21rZGlyICYmICgKKwl1bWFzayAkbWtkaXJfdW1hc2sgJiYKKwkkZG9pdF9leGVjICRta2RpcnByb2cgJG1rZGlyX21vZGUgLXAgLS0gIiRkc3RkaXIiCisgICAgICApCisgICAgdGhlbiA6CisgICAgZWxzZQorCisgICAgICAjIFRoZSB1bWFzayBpcyByaWRpY3Vsb3VzLCBvciBta2RpciBkb2VzIG5vdCBjb25mb3JtIHRvIFBPU0lYLAorICAgICAgIyBvciBpdCBmYWlsZWQgcG9zc2libHkgZHVlIHRvIGEgcmFjZSBjb25kaXRpb24uICBDcmVhdGUgdGhlCisgICAgICAjIGRpcmVjdG9yeSB0aGUgc2xvdyB3YXksIHN0ZXAgYnkgc3RlcCwgY2hlY2tpbmcgZm9yIHJhY2VzIGFzIHdlIGdvLgorCisgICAgICBjYXNlICRkc3RkaXIgaW4KKwkvKikgcHJlZml4PScvJzs7CisJWy09XChcKSFdKikgcHJlZml4PScuLyc7OworCSopICBwcmVmaXg9Jyc7OworICAgICAgZXNhYworCisgICAgICBldmFsICIkaW5pdGlhbGl6ZV9wb3NpeF9nbG9iIgorCisgICAgICBvSUZTPSRJRlMKKyAgICAgIElGUz0vCisgICAgICAkcG9zaXhfZ2xvYiBzZXQgLWYKKyAgICAgIHNldCBmbm9yZCAkZHN0ZGlyCiAgICAgICBzaGlmdAotICAgICAgaWYgdGVzdCAhIC1kICIkcGF0aGNvbXAiOyB0aGVuCi0gICAgICAgICRta2RpcnByb2cgIiRwYXRoY29tcCIKLQkjIG1rZGlyIGNhbiBmYWlsIHdpdGggYSBgRmlsZSBleGlzdCcgZXJyb3IgaW4gY2FzZSBzZXZlcmFsCi0JIyBpbnN0YWxsLXNoIGFyZSBjcmVhdGluZyB0aGUgZGlyZWN0b3J5IGNvbmN1cnJlbnRseS4gIFRoaXMKLQkjIGlzIE9LLgotCXRlc3QgLWQgIiRwYXRoY29tcCIgfHwgZXhpdAorICAgICAgJHBvc2l4X2dsb2Igc2V0ICtmCisgICAgICBJRlM9JG9JRlMKKworICAgICAgcHJlZml4ZXM9CisKKyAgICAgIGZvciBkCisgICAgICBkbworCXRlc3QgWCIkZCIgPSBYICYmIGNvbnRpbnVlCisKKwlwcmVmaXg9JHByZWZpeCRkCisJaWYgdGVzdCAtZCAiJHByZWZpeCI7IHRoZW4KKwkgIHByZWZpeGVzPQorCWVsc2UKKwkgIGlmICRwb3NpeF9ta2RpcjsgdGhlbgorCSAgICAodW1hc2s9JG1rZGlyX3VtYXNrICYmCisJICAgICAkZG9pdF9leGVjICRta2RpcnByb2cgJG1rZGlyX21vZGUgLXAgLS0gIiRkc3RkaXIiKSAmJiBicmVhaworCSAgICAjIERvbid0IGZhaWwgaWYgdHdvIGluc3RhbmNlcyBhcmUgcnVubmluZyBjb25jdXJyZW50bHkuCisJICAgIHRlc3QgLWQgIiRwcmVmaXgiIHx8IGV4aXQgMQorCSAgZWxzZQorCSAgICBjYXNlICRwcmVmaXggaW4KKwkgICAgICAqXCcqKSBxcHJlZml4PWBlY2hvICIkcHJlZml4IiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7CisJICAgICAgKikgcXByZWZpeD0kcHJlZml4OzsKKwkgICAgZXNhYworCSAgICBwcmVmaXhlcz0iJHByZWZpeGVzICckcXByZWZpeCciCisJICBmaQorCWZpCisJcHJlZml4PSRwcmVmaXgvCisgICAgICBkb25lCisKKyAgICAgIGlmIHRlc3QgLW4gIiRwcmVmaXhlcyI7IHRoZW4KKwkjIERvbid0IGZhaWwgaWYgdHdvIGluc3RhbmNlcyBhcmUgcnVubmluZyBjb25jdXJyZW50bHkuCisJKHVtYXNrICRta2Rpcl91bWFzayAmJgorCSBldmFsICJcJGRvaXRfZXhlYyBcJG1rZGlycHJvZyAkcHJlZml4ZXMiKSB8fAorCSAgdGVzdCAtZCAiJGRzdGRpciIgfHwgZXhpdCAxCisJb2Jzb2xldGVfbWtkaXJfdXNlZD10cnVlCiAgICAgICBmaQotICAgICAgcGF0aGNvbXA9JHBhdGhjb21wLwotICAgIGRvbmUKKyAgICBmaQogICBmaQogCiAgIGlmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgotICAgICRkb2l0ICRta2RpcmNtZCAiJGRzdCIgXAotICAgICAgJiYgeyB0ZXN0IC16ICIkY2hvd25jbWQiIHx8ICRkb2l0ICRjaG93bmNtZCAiJGRzdCI7IH0gXAotICAgICAgJiYgeyB0ZXN0IC16ICIkY2hncnBjbWQiIHx8ICRkb2l0ICRjaGdycGNtZCAiJGRzdCI7IH0gXAotICAgICAgJiYgeyB0ZXN0IC16ICIkc3RyaXBjbWQiIHx8ICRkb2l0ICRzdHJpcGNtZCAiJGRzdCI7IH0gXAotICAgICAgJiYgeyB0ZXN0IC16ICIkY2htb2RjbWQiIHx8ICRkb2l0ICRjaG1vZGNtZCAiJGRzdCI7IH0KLQorICAgIHsgdGVzdCAteiAiJGNob3duY21kIiB8fCAkZG9pdCAkY2hvd25jbWQgIiRkc3QiOyB9ICYmCisgICAgeyB0ZXN0IC16ICIkY2hncnBjbWQiIHx8ICRkb2l0ICRjaGdycGNtZCAiJGRzdCI7IH0gJiYKKyAgICB7IHRlc3QgIiRvYnNvbGV0ZV9ta2Rpcl91c2VkJGNob3duY21kJGNoZ3JwY21kIiA9IGZhbHNlIHx8CisgICAgICB0ZXN0IC16ICIkY2htb2RjbWQiIHx8ICRkb2l0ICRjaG1vZGNtZCAkbW9kZSAiJGRzdCI7IH0gfHwgZXhpdCAxCiAgIGVsc2UKLSAgICBkc3RmaWxlPWBiYXNlbmFtZSAiJGRzdCJgCiAKICAgICAjIE1ha2UgYSBjb3VwbGUgb2YgdGVtcCBmaWxlIG5hbWVzIGluIHRoZSBwcm9wZXIgZGlyZWN0b3J5LgogICAgIGRzdHRtcD0kZHN0ZGlyL19pbnN0LiQkXwpAQCAtMjYyLDEwICs0NTUsOSBAQAogCiAgICAgIyBUcmFwIHRvIGNsZWFuIHVwIHRob3NlIHRlbXAgZmlsZXMgYXQgZXhpdC4KICAgICB0cmFwICdyZXQ9JD87IHJtIC1mICIkZHN0dG1wIiAiJHJtdG1wIiAmJiBleGl0ICRyZXQnIDAKLSAgICB0cmFwICcoZXhpdCAkPyk7IGV4aXQnIDEgMiAxMyAxNQogCiAgICAgIyBDb3B5IHRoZSBmaWxlIG5hbWUgdG8gdGhlIHRlbXAgbmFtZS4KLSAgICAkZG9pdCAkY3Bwcm9nICIkc3JjIiAiJGRzdHRtcCIgJiYKKyAgICAodW1hc2sgJGNwX3VtYXNrICYmICRkb2l0X2V4ZWMgJGNwcHJvZyAiJHNyYyIgIiRkc3R0bXAiKSAmJgogCiAgICAgIyBhbmQgc2V0IGFueSBvcHRpb25zOyBkbyBjaG1vZCBsYXN0IHRvIHByZXNlcnZlIHNldHVpZCBiaXRzLgogICAgICMKQEAgLTI3Myw1MSArNDY1LDYzIEBACiAgICAgIyBpZ25vcmUgZXJyb3JzIGZyb20gYW55IG9mIHRoZXNlLCBqdXN0IG1ha2Ugc3VyZSBub3QgdG8gaWdub3JlCiAgICAgIyBlcnJvcnMgZnJvbSB0aGUgYWJvdmUgIiRkb2l0ICRjcHByb2cgJHNyYyAkZHN0dG1wIiBjb21tYW5kLgogICAgICMKLSAgICB7IHRlc3QgLXogIiRjaG93bmNtZCIgfHwgJGRvaXQgJGNob3duY21kICIkZHN0dG1wIjsgfSBcCi0gICAgICAmJiB7IHRlc3QgLXogIiRjaGdycGNtZCIgfHwgJGRvaXQgJGNoZ3JwY21kICIkZHN0dG1wIjsgfSBcCi0gICAgICAmJiB7IHRlc3QgLXogIiRzdHJpcGNtZCIgfHwgJGRvaXQgJHN0cmlwY21kICIkZHN0dG1wIjsgfSBcCi0gICAgICAmJiB7IHRlc3QgLXogIiRjaG1vZGNtZCIgfHwgJGRvaXQgJGNobW9kY21kICIkZHN0dG1wIjsgfSAmJgorICAgIHsgdGVzdCAteiAiJGNob3duY21kIiB8fCAkZG9pdCAkY2hvd25jbWQgIiRkc3R0bXAiOyB9ICYmCisgICAgeyB0ZXN0IC16ICIkY2hncnBjbWQiIHx8ICRkb2l0ICRjaGdycGNtZCAiJGRzdHRtcCI7IH0gJiYKKyAgICB7IHRlc3QgLXogIiRzdHJpcGNtZCIgfHwgJGRvaXQgJHN0cmlwY21kICIkZHN0dG1wIjsgfSAmJgorICAgIHsgdGVzdCAteiAiJGNobW9kY21kIiB8fCAkZG9pdCAkY2htb2RjbWQgJG1vZGUgIiRkc3R0bXAiOyB9ICYmCiAKLSAgICAjIE5vdyByZW5hbWUgdGhlIGZpbGUgdG8gdGhlIHJlYWwgZGVzdGluYXRpb24uCi0gICAgeyAkZG9pdCAkbXZjbWQgLWYgIiRkc3R0bXAiICIkZHN0ZGlyLyRkc3RmaWxlIiAyPi9kZXYvbnVsbCBcCi0gICAgICB8fCB7Ci0JICAgIyBUaGUgcmVuYW1lIGZhaWxlZCwgcGVyaGFwcyBiZWNhdXNlIG12IGNhbid0IHJlbmFtZSBzb21ldGhpbmcgZWxzZQotCSAgICMgdG8gaXRzZWxmLCBvciBwZXJoYXBzIGJlY2F1c2UgbXYgaXMgc28gYW5jaWVudCB0aGF0IGl0IGRvZXMgbm90Ci0JICAgIyBzdXBwb3J0IC1mLgorICAgICMgSWYgLUMsIGRvbid0IGJvdGhlciB0byBjb3B5IGlmIGl0IHdvdWxkbid0IGNoYW5nZSB0aGUgZmlsZS4KKyAgICBpZiAkY29weV9vbl9jaGFuZ2UgJiYKKyAgICAgICBvbGQ9YExDX0FMTD1DIGxzIC1kbEwgIiRkc3QiCTI+L2Rldi9udWxsYCAmJgorICAgICAgIG5ldz1gTENfQUxMPUMgbHMgLWRsTCAiJGRzdHRtcCIJMj4vZGV2L251bGxgICYmCiAKLQkgICAjIE5vdyByZW1vdmUgb3IgbW92ZSBhc2lkZSBhbnkgb2xkIGZpbGUgYXQgZGVzdGluYXRpb24gbG9jYXRpb24uCi0JICAgIyBXZSB0cnkgdGhpcyB0d28gd2F5cyBzaW5jZSBybSBjYW4ndCB1bmxpbmsgaXRzZWxmIG9uIHNvbWUKLQkgICAjIHN5c3RlbXMgYW5kIHRoZSBkZXN0aW5hdGlvbiBmaWxlIG1pZ2h0IGJlIGJ1c3kgZm9yIG90aGVyCi0JICAgIyByZWFzb25zLiAgSW4gdGhpcyBjYXNlLCB0aGUgZmluYWwgY2xlYW51cCBtaWdodCBmYWlsIGJ1dCB0aGUgbmV3Ci0JICAgIyBmaWxlIHNob3VsZCBzdGlsbCBpbnN0YWxsIHN1Y2Nlc3NmdWxseS4KLQkgICB7Ci0JICAgICBpZiB0ZXN0IC1mICIkZHN0ZGlyLyRkc3RmaWxlIjsgdGhlbgotCSAgICAgICAkZG9pdCAkcm1jbWQgLWYgIiRkc3RkaXIvJGRzdGZpbGUiIDI+L2Rldi9udWxsIFwKLQkgICAgICAgfHwgJGRvaXQgJG12Y21kIC1mICIkZHN0ZGlyLyRkc3RmaWxlIiAiJHJtdG1wIiAyPi9kZXYvbnVsbCBcCi0JICAgICAgIHx8IHsKLQkJIGVjaG8gIiQwOiBjYW5ub3QgdW5saW5rIG9yIHJlbmFtZSAkZHN0ZGlyLyRkc3RmaWxlIiA+JjIKLQkJIChleGl0IDEpOyBleGl0IDEKLQkgICAgICAgfQotCSAgICAgZWxzZQotCSAgICAgICA6Ci0JICAgICBmaQotCSAgIH0gJiYKKyAgICAgICBldmFsICIkaW5pdGlhbGl6ZV9wb3NpeF9nbG9iIiAmJgorICAgICAgICRwb3NpeF9nbG9iIHNldCAtZiAmJgorICAgICAgIHNldCBYICRvbGQgJiYgb2xkPTokMjokNDokNTokNiAmJgorICAgICAgIHNldCBYICRuZXcgJiYgbmV3PTokMjokNDokNTokNiAmJgorICAgICAgICRwb3NpeF9nbG9iIHNldCArZiAmJgogCi0JICAgIyBOb3cgcmVuYW1lIHRoZSBmaWxlIHRvIHRoZSByZWFsIGRlc3RpbmF0aW9uLgotCSAgICRkb2l0ICRtdmNtZCAiJGRzdHRtcCIgIiRkc3RkaXIvJGRzdGZpbGUiCi0JIH0KLSAgICB9Ci0gIGZpIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorICAgICAgIHRlc3QgIiRvbGQiID0gIiRuZXciICYmCisgICAgICAgJGNtcHByb2cgIiRkc3QiICIkZHN0dG1wIiA+L2Rldi9udWxsIDI+JjEKKyAgICB0aGVuCisgICAgICBybSAtZiAiJGRzdHRtcCIKKyAgICBlbHNlCisgICAgICAjIFJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KKyAgICAgICRkb2l0ICRtdmNtZCAtZiAiJGRzdHRtcCIgIiRkc3QiIDI+L2Rldi9udWxsIHx8CisKKyAgICAgICMgVGhlIHJlbmFtZSBmYWlsZWQsIHBlcmhhcHMgYmVjYXVzZSBtdiBjYW4ndCByZW5hbWUgc29tZXRoaW5nIGVsc2UKKyAgICAgICMgdG8gaXRzZWxmLCBvciBwZXJoYXBzIGJlY2F1c2UgbXYgaXMgc28gYW5jaWVudCB0aGF0IGl0IGRvZXMgbm90CisgICAgICAjIHN1cHBvcnQgLWYuCisgICAgICB7CisJIyBOb3cgcmVtb3ZlIG9yIG1vdmUgYXNpZGUgYW55IG9sZCBmaWxlIGF0IGRlc3RpbmF0aW9uIGxvY2F0aW9uLgorCSMgV2UgdHJ5IHRoaXMgdHdvIHdheXMgc2luY2Ugcm0gY2FuJ3QgdW5saW5rIGl0c2VsZiBvbiBzb21lCisJIyBzeXN0ZW1zIGFuZCB0aGUgZGVzdGluYXRpb24gZmlsZSBtaWdodCBiZSBidXN5IGZvciBvdGhlcgorCSMgcmVhc29ucy4gIEluIHRoaXMgY2FzZSwgdGhlIGZpbmFsIGNsZWFudXAgbWlnaHQgZmFpbCBidXQgdGhlIG5ldworCSMgZmlsZSBzaG91bGQgc3RpbGwgaW5zdGFsbCBzdWNjZXNzZnVsbHkuCisJeworCSAgdGVzdCAhIC1mICIkZHN0IiB8fAorCSAgJGRvaXQgJHJtY21kIC1mICIkZHN0IiAyPi9kZXYvbnVsbCB8fAorCSAgeyAkZG9pdCAkbXZjbWQgLWYgIiRkc3QiICIkcm10bXAiIDI+L2Rldi9udWxsICYmCisJICAgIHsgJGRvaXQgJHJtY21kIC1mICIkcm10bXAiIDI+L2Rldi9udWxsOyA6OyB9CisJICB9IHx8CisJICB7IGVjaG8gIiQwOiBjYW5ub3QgdW5saW5rIG9yIHJlbmFtZSAkZHN0IiA+JjIKKwkgICAgKGV4aXQgMSk7IGV4aXQgMQorCSAgfQorCX0gJiYKKworCSMgTm93IHJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KKwkkZG9pdCAkbXZjbWQgIiRkc3R0bXAiICIkZHN0IgorICAgICAgfQorICAgIGZpIHx8IGV4aXQgMQorCisgICAgdHJhcCAnJyAwCisgIGZpCiBkb25lCiAKLSMgVGhlIGZpbmFsIGxpdHRsZSB0cmljayB0byAiY29ycmVjdGx5IiBwYXNzIHRoZSBleGl0IHN0YXR1cyB0byB0aGUgZXhpdCB0cmFwLgotewotICAoZXhpdCAwKTsgZXhpdCAwCi19Ci0KICMgTG9jYWwgdmFyaWFibGVzOgogIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCiAjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKICMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCi0jIHRpbWUtc3RhbXAtZW5kOiAiJCIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKICMgRW5kOgpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2phdmFjb21wLnNoLmluIGIvYnVpbGQtYXV4L2phdmFjb21wLnNoLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMTA4MWIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsZC1hdXgvamF2YWNvbXAuc2guaW4KQEAgLTAsMCArMSw3NSBAQAorIyEvYmluL3NoCisjIENvbXBpbGUgYSBKYXZhIHByb2dyYW0uCisKKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAxLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBUaGlzIHVzZXMgdGhlIHNhbWUgY2hvaWNlcyBhcyBqYXZhY29tcC5jLCBidXQgaW5zdGVhZCBvZiByZWx5aW5nIG9uIHRoZQorIyBlbnZpcm9ubWVudCBzZXR0aW5ncyBhdCBydW4gdGltZSwgaXQgdXNlcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzCisjIHByZXNlbnQgYXQgY29uZmlndXJhdGlvbiB0aW1lLgorIworIyBUaGlzIGlzIGEgc2VwYXJhdGUgc2hlbGwgc2NyaXB0LCBiZWNhdXNlIGl0IG11c3QgYmUgYWJsZSB0byB1bnNldCBKQVZBX0hPTUUKKyMgaW4gc29tZSBjYXNlcywgd2hpY2ggYSBzaW1wbGUgc2hlbGwgY29tbWFuZCBjYW5ub3QgZG8uCisjCisjIFRoZSBleHRyYSBDTEFTU1BBVEggbXVzdCBoYXZlIGJlZW4gc2V0IHByaW9yIHRvIGNhbGxpbmcgdGhpcyBzY3JpcHQuCisjIE9wdGlvbnMgdGhhdCBjYW4gYmUgcGFzc2VkIGFyZSAtTywgLWcgYW5kICItZCBESVJFQ1RPUlkiLgorCitDT05GX0pBVkFDPSdAQ09ORl9KQVZBQ0AnCitDT05GX0NMQVNTUEFUSD0nQENMQVNTUEFUSEAnCitpZiB0ZXN0IC1uICJASEFWRV9KQVZBQ19FTlZWQVJAIjsgdGhlbgorICAjIENvbWJpbmUgZ2l2ZW4gQ0xBU1NQQVRIIGFuZCBjb25maWd1cmVkIENMQVNTUEFUSC4KKyAgaWYgdGVzdCAtbiAiJENMQVNTUEFUSCI7IHRoZW4KKyAgICBDTEFTU1BBVEg9IiRDTEFTU1BBVEgke0NPTkZfQ0xBU1NQQVRIOitAQ0xBU1NQQVRIX1NFUEFSQVRPUkAkQ09ORl9DTEFTU1BBVEh9IgorICBlbHNlCisgICAgQ0xBU1NQQVRIPSIkQ09ORl9DTEFTU1BBVEgiCisgIGZpCisgIGV4cG9ydCBDTEFTU1BBVEgKKyAgdGVzdCAteiAiJEpBVkFfVkVSQk9TRSIgfHwgZWNobyAiJENPTkZfSkFWQUMgJEAiCisgIGV4ZWMgJENPTkZfSkFWQUMgIiRAIgorZWxzZQorICB1bnNldCBKQVZBX0hPTUUKKyAgaWYgdGVzdCAtbiAiQEhBVkVfR0NKX0NAIjsgdGhlbgorICAgICMgSW4gdGhpcyBjYXNlLCAkQ09ORl9KQVZBQyBzdGFydHMgd2l0aCAiZ2NqIC1DIi4KKyAgICBDTEFTU1BBVEg9IiRDTEFTU1BBVEgiCisgICAgZXhwb3J0IENMQVNTUEFUSAorICAgIHRlc3QgLXogIiRKQVZBX1ZFUkJPU0UiIHx8IGVjaG8gIiRDT05GX0pBVkFDICRAIgorICAgIGV4ZWMgJENPTkZfSkFWQUMgIiRAIgorICBlbHNlCisgICAgaWYgdGVzdCAtbiAiQEhBVkVfSkFWQUNAIjsgdGhlbgorICAgICAgIyBJbiB0aGlzIGNhc2UsICRDT05GX0pBVkFDIHN0YXJ0cyB3aXRoICJqYXZhYyIuCisgICAgICBDTEFTU1BBVEg9IiRDTEFTU1BBVEgiCisgICAgICBleHBvcnQgQ0xBU1NQQVRICisgICAgICB0ZXN0IC16ICIkSkFWQV9WRVJCT1NFIiB8fCBlY2hvICIkQ09ORl9KQVZBQyAkQCIKKyAgICAgIGV4ZWMgJENPTkZfSkFWQUMgIiRAIgorICAgIGVsc2UKKyAgICAgIGlmIHRlc3QgLW4gIkBIQVZFX0pJS0VTQCI7IHRoZW4KKyAgICAgICAgIyBJbiB0aGlzIGNhc2UsICRDT05GX0pBVkFDIHN0YXJ0cyB3aXRoICJqaWtlcyIuCisgICAgICAgICMgQ29tYmluZSBnaXZlbiBDTEFTU1BBVEggYW5kIGNvbmZpZ3VyZWQgQ0xBU1NQQVRILgorICAgICAgICBpZiB0ZXN0IC1uICIkQ0xBU1NQQVRIIjsgdGhlbgorICAgICAgICAgIENMQVNTUEFUSD0iJENMQVNTUEFUSCR7Q09ORl9DTEFTU1BBVEg6K0BDTEFTU1BBVEhfU0VQQVJBVE9SQCRDT05GX0NMQVNTUEFUSH0iCisgICAgICAgIGVsc2UKKyAgICAgICAgICBDTEFTU1BBVEg9IiRDT05GX0NMQVNTUEFUSCIKKyAgICAgICAgZmkKKyAgICAgICAgZXhwb3J0IENMQVNTUEFUSAorICAgICAgICB0ZXN0IC16ICIkSkFWQV9WRVJCT1NFIiB8fCBlY2hvICIkQ09ORl9KQVZBQyAkQCIKKyAgICAgICAgZXhlYyAkQ09ORl9KQVZBQyAiJEAiCisgICAgICBlbHNlCisgICAgICAgIGVjaG8gJ0phdmEgY29tcGlsZXIgbm90IGZvdW5kLCB0cnkgaW5zdGFsbGluZyBnY2ogb3Igc2V0ICRKQVZBQywgdGhlbiByZWNvbmZpZ3VyZScgMT4mMgorICAgICAgICBleGl0IDEKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKK2ZpCmRpZmYgLS1naXQgYS9idWlsZC1hdXgvamF2YWV4ZWMuc2guaW4gYi9idWlsZC1hdXgvamF2YWV4ZWMuc2guaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY4ZDUzMwotLS0gL2Rldi9udWxsCisrKyBiL2J1aWxkLWF1eC9qYXZhZXhlYy5zaC5pbgpAQCAtMCwwICsxLDcwIEBACisjIS9iaW4vc2gKKyMgRXhlY3V0ZSBhIEphdmEgcHJvZ3JhbS4KKworIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGhhaWJsZUBjbGlzcC5jb25zLm9yZz4sIDIwMDEuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFRoaXMgdXNlcyB0aGUgc2FtZSBjaG9pY2VzIGFzIGphdmFleGVjLmMsIGJ1dCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gdGhlCisjIGVudmlyb25tZW50IHNldHRpbmdzIGF0IHJ1biB0aW1lLCBpdCB1c2VzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyMgcHJlc2VudCBhdCBjb25maWd1cmF0aW9uIHRpbWUuCisjCisjIFRoaXMgaXMgYSBzZXBhcmF0ZSBzaGVsbCBzY3JpcHQsIGJlY2F1c2UgaXQgbXVzdCBiZSBhYmxlIHRvIHVuc2V0IEpBVkFfSE9NRQorIyBpbiBzb21lIGNhc2VzLCB3aGljaCBhIHNpbXBsZSBzaGVsbCBjb21tYW5kIGNhbm5vdCBkby4KKyMKKyMgVGhlIGV4dHJhIENMQVNTUEFUSCBtdXN0IGhhdmUgYmVlbiBzZXQgcHJpb3IgdG8gY2FsbGluZyB0aGlzIHNjcmlwdC4KKworQ09ORl9KQVZBPSdAQ09ORl9KQVZBQCcKK0NPTkZfQ0xBU1NQQVRIPSdAQ0xBU1NQQVRIQCcKK2lmIHRlc3QgLW4gIkBIQVZFX0pBVkFfRU5WVkFSQCI7IHRoZW4KKyAgIyBDb21iaW5lIGdpdmVuIENMQVNTUEFUSCBhbmQgY29uZmlndXJlZCBDTEFTU1BBVEguCisgIGlmIHRlc3QgLW4gIiRDTEFTU1BBVEgiOyB0aGVuCisgICAgQ0xBU1NQQVRIPSIkQ0xBU1NQQVRIJHtDT05GX0NMQVNTUEFUSDorQENMQVNTUEFUSF9TRVBBUkFUT1JAJENPTkZfQ0xBU1NQQVRIfSIKKyAgZWxzZQorICAgIENMQVNTUEFUSD0iJENPTkZfQ0xBU1NQQVRIIgorICBmaQorICBleHBvcnQgQ0xBU1NQQVRICisgIHRlc3QgLXogIiRKQVZBX1ZFUkJPU0UiIHx8IGVjaG8gIiRDT05GX0pBVkEgJEAiCisgIGV4ZWMgJENPTkZfSkFWQSAiJEAiCitlbHNlCisgIHVuc2V0IEpBVkFfSE9NRQorICBleHBvcnQgQ0xBU1NQQVRICisgIGlmIHRlc3QgLW4gIkBIQVZFX0dJSkAiOyB0aGVuCisgICAgIyBJbiB0aGlzIGNhc2UsICRDT05GX0pBVkEgaXMgImdpaiIuCisgICAgdGVzdCAteiAiJEpBVkFfVkVSQk9TRSIgfHwgZWNobyAiJENPTkZfSkFWQSAkQCIKKyAgICBleGVjICRDT05GX0pBVkEgIiRAIgorICBlbHNlCisgICAgaWYgdGVzdCAtbiAiQEhBVkVfSkFWQUAiOyB0aGVuCisgICAgICAjIEluIHRoaXMgY2FzZSwgJENPTkZfSkFWQSBpcyAiamF2YSIuCisgICAgICB0ZXN0IC16ICIkSkFWQV9WRVJCT1NFIiB8fCBlY2hvICIkQ09ORl9KQVZBICRAIgorICAgICAgZXhlYyAkQ09ORl9KQVZBICIkQCIKKyAgICBlbHNlCisgICAgICBpZiB0ZXN0IC1uICJASEFWRV9KUkVAIjsgdGhlbgorICAgICAgICAjIEluIHRoaXMgY2FzZSwgJENPTkZfSkFWQSBpcyAianJlIi4KKyAgICAgICAgdGVzdCAteiAiJEpBVkFfVkVSQk9TRSIgfHwgZWNobyAiJENPTkZfSkFWQSAkQCIKKyAgICAgICAgZXhlYyAkQ09ORl9KQVZBICIkQCIKKyAgICAgIGVsc2UKKyAgICAgICAgaWYgdGVzdCAtbiAiQEhBVkVfSlZJRVdAIjsgdGhlbgorICAgICAgICAgICMgSW4gdGhpcyBjYXNlLCAkQ09ORl9KQVZBIGlzICJqdmlldyIuCisgICAgICAgICAgdGVzdCAteiAiJEpBVkFfVkVSQk9TRSIgfHwgZWNobyAiJENPTkZfSkFWQSAkQCIKKyAgICAgICAgICBleGVjICRDT05GX0pBVkEgIiRAIgorICAgICAgICBlbHNlCisgICAgICAgICAgZWNobyAnSmF2YSB2aXJ0dWFsIG1hY2hpbmUgbm90IGZvdW5kLCB0cnkgaW5zdGFsbGluZyBnaWogb3Igc2V0ICRKQVZBLCB0aGVuIHJlY29uZmlndXJlJyAxPiYyCisgICAgICAgICAgZXhpdCAxCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGZpCisgIGZpCitmaQpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L21kYXRlLXNoIGIvYnVpbGQtYXV4L21kYXRlLXNoCmluZGV4IGNkOTE2YzAuLjQ2MTQ0NDEgMTAwNzU1Ci0tLSBhL2J1aWxkLWF1eC9tZGF0ZS1zaAorKysgYi9idWlsZC1hdXgvbWRhdGUtc2gKQEAgLTEsMTAgKzEsOSBAQAogIyEvYmluL3NoCiAjIEdldCBtb2RpZmljYXRpb24gdGltZSBvZiBhIGZpbGUgb3IgZGlyZWN0b3J5IGFuZCBwcmV0dHktcHJpbnQgaXQuCiAKLXNjcmlwdHZlcnNpb249MjAwNS0wNi0yOS4yMgorc2NyaXB0dmVyc2lvbj0yMDEwLTA4LTIxLjA2OyAjIFVUQwogCi0jIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NywgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjIHdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+LCBKdW5lIDE5OTUKICMKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTE4LDggKzE3LDcgQEAKICMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICMKICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSMgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCiAjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKICMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCkBAIC0zMCwxNiArMjgsMjYgQEAKICMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bwogIyA8YXV0b21ha2UtcGF0Y2hlc0BnbnUub3JnPi4KIAoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCisKIGNhc2UgJDEgaW4KICAgJycpCi0gICAgIGVjaG8gIiQwOiBObyBmaWxlLiAgVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKKyAgICAgZWNobyAiJDA6IE5vIGZpbGUuICBUcnkgJyQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCiAgICAgIGV4aXQgMTsKICAgICAgOzsKICAgLWggfCAtLWgqKQogICAgIGNhdCA8PFxFT0YKIFVzYWdlOiBtZGF0ZS1zaCBbLS1oZWxwXSBbLS12ZXJzaW9uXSBGSUxFCiAKLVByZXR0eS1wcmludCB0aGUgbW9kaWZpY2F0aW9uIHRpbWUgb2YgRklMRS4KK1ByZXR0eS1wcmludCB0aGUgbW9kaWZpY2F0aW9uIGRheSBvZiBGSUxFLCBpbiB0aGUgZm9ybWF0OgorMSBKYW51YXJ5IDE5NzAKIAogUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4KIEVPRgpAQCAtNTEsNiArNTksMTMgQEAKICAgICA7OwogZXNhYwogCitlcnJvciAoKQoreworICBlY2hvICIkMDogJDEiID4mMgorICBleGl0IDEKK30KKworCiAjIFByZXZlbnQgZGF0ZSBnaXZpbmcgcmVzcG9uc2UgaW4gYW5vdGhlciBsYW5ndWFnZS4KIExBTkc9QwogZXhwb3J0IExBTkcKQEAgLTYwLDcgKzc1LDcgQEAKIGV4cG9ydCBMQ19USU1FCiAKICMgR05VIGxzIGNoYW5nZXMgaXRzIHRpbWUgZm9ybWF0IGluIHJlc3BvbnNlIHRvIHRoZSBUSU1FX1NUWUxFCi0jIHZhcmlhYmxlLiAgU2luY2Ugd2UgY2Fubm90IGFzc3VtZSBgdW5zZXQnIHdvcmtzLCByZXZlcnQgdGhpcworIyB2YXJpYWJsZS4gIFNpbmNlIHdlIGNhbm5vdCBhc3N1bWUgJ3Vuc2V0JyB3b3JrcywgcmV2ZXJ0IHRoaXMKICMgdmFyaWFibGUgdG8gaXRzIGRvY3VtZW50ZWQgZGVmYXVsdC4KIGlmIHRlc3QgIiR7VElNRV9TVFlMRStzZXR9IiA9IHNldDsgdGhlbgogICBUSU1FX1NUWUxFPXBvc2l4LWxvbmctaXNvCkBAIC03NSwyNyArOTAsMzIgQEAKIGVsc2UKICAgbHNfY29tbWFuZD0nbHMgLWwgLWQnCiBmaQorIyBBdm9pZCB1c2VyL2dyb3VwIG5hbWVzIHRoYXQgbWlnaHQgaGF2ZSBzcGFjZXMsIHdoZW4gcG9zc2libGUuCitpZiBscyAtbiAvZGV2L251bGwgMT4vZGV2L251bGwgMj4mMTsgdGhlbgorICBsc19jb21tYW5kPSIkbHNfY29tbWFuZCAtbiIKK2ZpCiAKLSMgQSBgbHMgLWwnIGxpbmUgbG9va3MgYXMgZm9sbG93cyBvbiBPUy8yLgorIyBBICdscyAtbCcgbGluZSBsb29rcyBhcyBmb2xsb3dzIG9uIE9TLzIuCiAjICBkcnd4cnd4LS0tICAgICAgICAwIEF1ZyAxMSAgMjAwMSBmb28KICMgVGhpcyBkaWZmZXJzIGZyb20gVW5peCwgd2hpY2ggYWRkcyBvd25lcnNoaXAgaW5mb3JtYXRpb24uCiAjICBkcnd4cnd4LS0tICAgMiByb290ICByb290ICAgICAgNDA5NiBBdWcgMTEgIDIwMDEgZm9vCiAjCiAjIFRvIGZpbmQgdGhlIGRhdGUsIHdlIHNwbGl0IHRoZSBsaW5lIG9uIHNwYWNlcyBhbmQgaXRlcmF0ZSBvbiB3b3JkcwogIyB1bnRpbCB3ZSBmaW5kIGEgbW9udGguICBUaGlzIGNhbm5vdCB3b3JrIHdpdGggZmlsZXMgd2hvc2Ugb3duZXIgaXMgYQotIyB1c2VyIG5hbWVkIGBKYW4nLCBvciBgRmViJywgZXRjLiAgSG93ZXZlciwgaXQncyB1bmxpa2VseSB0aGF0IGAvJworIyB1c2VyIG5hbWVkICJKYW4iLCBvciAiRmViIiwgZXRjLiAgSG93ZXZlciwgaXQncyB1bmxpa2VseSB0aGF0ICcvJwogIyB3aWxsIGJlIG93bmVkIGJ5IGEgdXNlciB3aG9zZSBuYW1lIGlzIGEgbW9udGguICBTbyB3ZSBmaXJzdCBsb29rIGF0CiAjIHRoZSBleHRlbmRlZCBscyBvdXRwdXQgb2YgdGhlIHJvb3QgZGlyZWN0b3J5IHRvIGRlY2lkZSBob3cgbWFueQogIyB3b3JkcyBzaG91bGQgYmUgc2tpcHBlZCB0byBnZXQgdGhlIGRhdGUuCiAKICMgT24gSFBVWCAvYmluL3NoLCAic2V0IiBpbnRlcnByZXRzICItcnctci0tci0tIiBhcyBvcHRpb25zLCBzbyB0aGUgIngiIGJlbG93Lgotc2V0IHhgbHMgLWwgLWQgL2AKK3NldCB4YCRsc19jb21tYW5kIC9gCiAKICMgRmluZCB3aGljaCBhcmd1bWVudCBpcyB0aGUgbW9udGguCiBtb250aD0KIGNvbW1hbmQ9CiB1bnRpbCB0ZXN0ICRtb250aAogZG8KKyAgdGVzdCAkIyAtZ3QgMCB8fCBlcnJvciAiZmFpbGVkIHBhcnNpbmcgJyRsc19jb21tYW5kIC8nIG91dHB1dCIKICAgc2hpZnQKICAgIyBBZGQgYW5vdGhlciBzaGlmdCB0byB0aGUgY29tbWFuZC4KICAgY29tbWFuZD0iJGNvbW1hbmQgc2hpZnQ7IgpAQCAtMTE1LDggKzEzNSwxMCBAQAogICBlc2FjCiBkb25lCiAKK3Rlc3QgLW4gIiRtb250aCIgfHwgZXJyb3IgImZhaWxlZCBwYXJzaW5nICckbHNfY29tbWFuZCAvJyBvdXRwdXQiCisKICMgR2V0IHRoZSBleHRlbmRlZCBscyBvdXRwdXQgb2YgdGhlIGZpbGUgb3IgZGlyZWN0b3J5Lgotc2V0IGR1bW15IHhgZXZhbCAiJGxzX2NvbW1hbmQgXCJcJHNhdmVfYXJnMVwiImAKK3NldCBkdW1teSB4YGV2YWwgIiRsc19jb21tYW5kIFwiXFxcJHNhdmVfYXJnMVwiImAKIAogIyBSZW1vdmUgYWxsIHByZWNlZGluZyBhcmd1bWVudHMKIGV2YWwgJGNvbW1hbmQKQEAgLTE5Nyw1ICsyMTksNiBAQAogIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCiAjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKICMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCi0jIHRpbWUtc3RhbXAtZW5kOiAiJCIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKICMgRW5kOgpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L21pc3NpbmcgYi9idWlsZC1hdXgvbWlzc2luZwppbmRleCA4OTRlNzg2Li45YTU1NjQ4IDEwMDc1NQotLS0gYS9idWlsZC1hdXgvbWlzc2luZworKysgYi9idWlsZC1hdXgvbWlzc2luZwpAQCAtMSwxMCArMSw5IEBACiAjISAvYmluL3NoCiAjIENvbW1vbiBzdHViIGZvciBhIGZldyBtaXNzaW5nIEdOVSBwcm9ncmFtcyB3aGlsZSBpbnN0YWxsaW5nLgogCi1zY3JpcHR2ZXJzaW9uPTIwMDUtMDYtMDguMjEKK3NjcmlwdHZlcnNpb249MjAxMi0wMS0wNi4xODsgIyBVVEMKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTksIDIwMDAsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUKLSMgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjIE9yaWdpbmFsbHkgYnkgRnJhbixjb2lzIFBpbmFyZCA8cGluYXJkQGlyby51bW9udHJlYWwuY2E+LCAxOTk2LgogCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xOCw5ICsxNyw3IEBACiAjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotIyAwMjExMC0xMzAxLCBVU0EuCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCiAjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKICMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCkBAIC0yOCwxMyArMjUsMTUgQEAKICMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgogCiBpZiB0ZXN0ICQjIC1lcSAwOyB0aGVuCi0gIGVjaG8gMT4mMiAiVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKKyAgZWNobyAxPiYyICJUcnkgJyQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCiAgIGV4aXQgMQogZmkKIAogcnVuPToKK3NlZF9vdXRwdXQ9J3MvLiogLS1vdXRwdXRbID1dXChbXiBdKlwpLiovXDEvcCcKK3NlZF9taW51c289J3MvLiogLW8gXChbXiBdKlwpLiovXDEvcCcKIAotIyBJbiB0aGUgY2FzZXMgd2hlcmUgdGhpcyBtYXR0ZXJzLCBgbWlzc2luZycgaXMgYmVpbmcgcnVuIGluIHRoZQorIyBJbiB0aGUgY2FzZXMgd2hlcmUgdGhpcyBtYXR0ZXJzLCAnbWlzc2luZycgaXMgYmVpbmcgcnVuIGluIHRoZQogIyBzcmNkaXIgYWxyZWFkeS4KIGlmIHRlc3QgLWYgY29uZmlndXJlLmFjOyB0aGVuCiAgIGNvbmZpZ3VyZV9hYz1jb25maWd1cmUuYWMKQEAgLTQ0LDcgKzQzLDcgQEAKIAogbXNnPSJtaXNzaW5nIG9uIHlvdXIgc3lzdGVtIgogCi1jYXNlICIkMSIgaW4KK2Nhc2UgJDEgaW4KIC0tcnVuKQogICAjIFRyeSB0byBydW4gcmVxdWVzdGVkIHByb2dyYW0sIGFuZCBqdXN0IGV4aXQgaWYgaXQgc3VjY2VlZHMuCiAgIHJ1bj0KQEAgLTY1LDcgKzY0LDcgQEAKICAgICBlY2hvICJcCiAkMCBbT1BUSU9OXS4uLiBQUk9HUkFNIFtBUkdVTUVOVF0uLi4KIAotSGFuZGxlIFxgUFJPR1JBTSBbQVJHVU1FTlRdLi4uJyBmb3Igd2hlbiBQUk9HUkFNIGlzIG1pc3NpbmcsIG9yIHJldHVybiBhbgorSGFuZGxlICdQUk9HUkFNIFtBUkdVTUVOVF0uLi4nIGZvciB3aGVuIFBST0dSQU0gaXMgbWlzc2luZywgb3IgcmV0dXJuIGFuCiBlcnJvciBzdGF0dXMgaWYgdGhlcmUgaXMgbm8ga25vd24gaGFuZGxpbmcgZm9yIFBST0dSQU0uCiAKIE9wdGlvbnM6CkBAIC03NCwxNyArNzMsMjAgQEAKICAgLS1ydW4gICAgICAgICAgIHRyeSB0byBydW4gdGhlIGdpdmVuIGNvbW1hbmQsIGFuZCBlbXVsYXRlIGl0IGlmIGl0IGZhaWxzCiAKIFN1cHBvcnRlZCBQUk9HUkFNIHZhbHVlczoKLSAgYWNsb2NhbCAgICAgIHRvdWNoIGZpbGUgXGBhY2xvY2FsLm00JwotICBhdXRvY29uZiAgICAgdG91Y2ggZmlsZSBcYGNvbmZpZ3VyZScKLSAgYXV0b2hlYWRlciAgIHRvdWNoIGZpbGUgXGBjb25maWcuaC5pbicKLSAgYXV0b21ha2UgICAgIHRvdWNoIGFsbCBcYE1ha2VmaWxlLmluJyBmaWxlcwotICBiaXNvbiAgICAgICAgY3JlYXRlIFxgeS50YWIuW2NoXScsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5bY2hdCi0gIGZsZXggICAgICAgICBjcmVhdGUgXGBsZXgueXkuYycsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5jCisgIGFjbG9jYWwgICAgICB0b3VjaCBmaWxlICdhY2xvY2FsLm00JworICBhdXRvY29uZiAgICAgdG91Y2ggZmlsZSAnY29uZmlndXJlJworICBhdXRvaGVhZGVyICAgdG91Y2ggZmlsZSAnY29uZmlnLmguaW4nCisgIGF1dG9tNHRlICAgICB0b3VjaCB0aGUgb3V0cHV0IGZpbGUsIG9yIGNyZWF0ZSBhIHN0dWIgb25lCisgIGF1dG9tYWtlICAgICB0b3VjaCBhbGwgJ01ha2VmaWxlLmluJyBmaWxlcworICBiaXNvbiAgICAgICAgY3JlYXRlICd5LnRhYi5bY2hdJywgaWYgcG9zc2libGUsIGZyb20gZXhpc3RpbmcgLltjaF0KKyAgZmxleCAgICAgICAgIGNyZWF0ZSAnbGV4Lnl5LmMnLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuYwogICBoZWxwMm1hbiAgICAgdG91Y2ggdGhlIG91dHB1dCBmaWxlCi0gIGxleCAgICAgICAgICBjcmVhdGUgXGBsZXgueXkuYycsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5jCisgIGxleCAgICAgICAgICBjcmVhdGUgJ2xleC55eS5jJywgaWYgcG9zc2libGUsIGZyb20gZXhpc3RpbmcgLmMKICAgbWFrZWluZm8gICAgIHRvdWNoIHRoZSBvdXRwdXQgZmlsZQotICB0YXIgICAgICAgICAgdHJ5IHRhciwgZ251dGFyLCBndGFyLCB0aGVuIHRhciB3aXRob3V0IG5vbi1wb3J0YWJsZSBmbGFncwotICB5YWNjICAgICAgICAgY3JlYXRlIFxgeS50YWIuW2NoXScsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5bY2hdCisgIHlhY2MgICAgICAgICBjcmVhdGUgJ3kudGFiLltjaF0nLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuW2NoXQorCitWZXJzaW9uIHN1ZmZpeGVzIHRvIFBST0dSQU0gYXMgd2VsbCBhcyB0aGUgcHJlZml4ZXMgJ2dudS0nLCAnZ251JywgYW5kCisnZycgYXJlIGlnbm9yZWQgd2hlbiBjaGVja2luZyB0aGUgbmFtZS4KIAogU2VuZCBidWcgcmVwb3J0cyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LiIKICAgICBleGl0ICQ/CkBAIC05NiwzNyArOTgsMzUgQEAKICAgICA7OwogCiAgIC0qKQotICAgIGVjaG8gMT4mMiAiJDA6IFVua25vd24gXGAkMScgb3B0aW9uIgotICAgIGVjaG8gMT4mMiAiVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKKyAgICBlY2hvIDE+JjIgIiQwOiBVbmtub3duICckMScgb3B0aW9uIgorICAgIGVjaG8gMT4mMiAiVHJ5ICckMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIgogICAgIGV4aXQgMQogICAgIDs7CiAKIGVzYWMKIAorIyBub3JtYWxpemUgcHJvZ3JhbSBuYW1lIHRvIGNoZWNrIGZvci4KK3Byb2dyYW09YGVjaG8gIiQxIiB8IHNlZCAnCisgIHMvXmdudS0vLzsgdAorICBzL15nbnUvLzsgdAorICBzL15nLy87IHQnYAorCiAjIE5vdyBleGl0IGlmIHdlIGhhdmUgaXQsIGJ1dCBpdCBmYWlsZWQuICBBbHNvIGV4aXQgbm93IGlmIHdlCiAjIGRvbid0IGhhdmUgaXQgYW5kIC0tdmVyc2lvbiB3YXMgcGFzc2VkIChtb3N0IGxpa2VseSB0byBkZXRlY3QKLSMgdGhlIHByb2dyYW0pLgotY2FzZSAiJDEiIGluCi0gIGxleHx5YWNjKQorIyB0aGUgcHJvZ3JhbSkuICBUaGlzIGlzIGFib3V0IG5vbi1HTlUgcHJvZ3JhbXMsIHNvIHVzZSAkMSBub3QKKyMgJHByb2dyYW0uCitjYXNlICQxIGluCisgIGxleCp8eWFjYyopCiAgICAgIyBOb3QgR05VIHByb2dyYW1zLCB0aGV5IGRvbid0IGhhdmUgLS12ZXJzaW9uLgogICAgIDs7CiAKLSAgdGFyKQotICAgIGlmIHRlc3QgLW4gIiRydW4iOyB0aGVuCi0gICAgICAgZWNobyAxPiYyICJFUlJPUjogXGB0YXInIHJlcXVpcmVzIC0tcnVuIgotICAgICAgIGV4aXQgMQotICAgIGVsaWYgdGVzdCAieCQyIiA9ICJ4LS12ZXJzaW9uIiB8fCB0ZXN0ICJ4JDIiID0gIngtLWhlbHAiOyB0aGVuCi0gICAgICAgZXhpdCAxCi0gICAgZmkKLSAgICA7OwotCiAgICopCiAgICAgaWYgdGVzdCAteiAiJHJ1biIgJiYgKCQxIC0tdmVyc2lvbikgPiAvZGV2L251bGwgMj4mMTsgdGhlbgogICAgICAgICMgV2UgaGF2ZSBpdCwgYnV0IGl0IGZhaWxlZC4KICAgICAgICBleGl0IDEKICAgICBlbGlmIHRlc3QgIngkMiIgPSAieC0tdmVyc2lvbiIgfHwgdGVzdCAieCQyIiA9ICJ4LS1oZWxwIjsgdGhlbgogICAgICAgICMgQ291bGQgbm90IHJ1biAtLXZlcnNpb24gb3IgLS1oZWxwLiAgVGhpcyBpcyBwcm9iYWJseSBzb21lb25lCi0gICAgICAgIyBydW5uaW5nIGAkVE9PTCAtLXZlcnNpb24nIG9yIGAkVE9PTCAtLWhlbHAnIHRvIGNoZWNrIHdoZXRoZXIKKyAgICAgICAjIHJ1bm5pbmcgJyRUT09MIC0tdmVyc2lvbicgb3IgJyRUT09MIC0taGVscCcgdG8gY2hlY2sgd2hldGhlcgogICAgICAgICMgJFRPT0wgZXhpc3RzIGFuZCBub3Qga25vd2luZyAkVE9PTCB1c2VzIG1pc3NpbmcuCiAgICAgICAgZXhpdCAxCiAgICAgZmkKQEAgLTEzNSwzNiArMTM1LDM2IEBACiAKICMgSWYgaXQgZG9lcyBub3QgZXhpc3QsIG9yIGZhaWxzIHRvIHJ1biAocG9zc2libHkgYW4gb3V0ZGF0ZWQgdmVyc2lvbiksCiAjIHRyeSB0byBlbXVsYXRlIGl0LgotY2FzZSAiJDEiIGluCitjYXNlICRwcm9ncmFtIGluCiAgIGFjbG9jYWwqKQogICAgIGVjaG8gMT4mMiAiXAotV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCi0gICAgICAgICB5b3UgbW9kaWZpZWQgXGBhY2luY2x1ZGUubTQnIG9yIFxgJHtjb25maWd1cmVfYWN9Jy4gIFlvdSBtaWdodCB3YW50Ci0gICAgICAgICB0byBpbnN0YWxsIHRoZSBcYEF1dG9tYWtlJyBhbmQgXGBQZXJsJyBwYWNrYWdlcy4gIEdyYWIgdGhlbSBmcm9tCitXQVJOSU5HOiAnJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkICdhY2luY2x1ZGUubTQnIG9yICcke2NvbmZpZ3VyZV9hY30nLiAgWW91IG1pZ2h0IHdhbnQKKyAgICAgICAgIHRvIGluc3RhbGwgdGhlIEF1dG9tYWtlIGFuZCBQZXJsIHBhY2thZ2VzLiAgR3JhYiB0aGVtIGZyb20KICAgICAgICAgIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKICAgICB0b3VjaCBhY2xvY2FsLm00CiAgICAgOzsKIAotICBhdXRvY29uZikKKyAgYXV0b2NvbmYqKQogICAgIGVjaG8gMT4mMiAiXAotV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCi0gICAgICAgICB5b3UgbW9kaWZpZWQgXGAke2NvbmZpZ3VyZV9hY30nLiAgWW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCB0aGUKLSAgICAgICAgIFxgQXV0b2NvbmYnIGFuZCBcYEdOVSBtNCcgcGFja2FnZXMuICBHcmFiIHRoZW0gZnJvbSBhbnkgR05VCitXQVJOSU5HOiAnJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkICcke2NvbmZpZ3VyZV9hY30nLiAgWW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCB0aGUKKyAgICAgICAgIEF1dG9jb25mIGFuZCBHTlUgbTQgcGFja2FnZXMuICBHcmFiIHRoZW0gZnJvbSBhbnkgR05VCiAgICAgICAgICBhcmNoaXZlIHNpdGUuIgogICAgIHRvdWNoIGNvbmZpZ3VyZQogICAgIDs7CiAKLSAgYXV0b2hlYWRlcikKKyAgYXV0b2hlYWRlciopCiAgICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKLSAgICAgICAgIHlvdSBtb2RpZmllZCBcYGFjY29uZmlnLmgnIG9yIFxgJHtjb25maWd1cmVfYWN9Jy4gIFlvdSBtaWdodCB3YW50Ci0gICAgICAgICB0byBpbnN0YWxsIHRoZSBcYEF1dG9jb25mJyBhbmQgXGBHTlUgbTQnIHBhY2thZ2VzLiAgR3JhYiB0aGVtCitXQVJOSU5HOiAnJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkICdhY2NvbmZpZy5oJyBvciAnJHtjb25maWd1cmVfYWN9Jy4gIFlvdSBtaWdodCB3YW50CisgICAgICAgICB0byBpbnN0YWxsIHRoZSBBdXRvY29uZiBhbmQgR05VIG00IHBhY2thZ2VzLiAgR3JhYiB0aGVtCiAgICAgICAgICBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKICAgICBmaWxlcz1gc2VkIC1uICdzL15bIF0qQVtDTV1fQ09ORklHX0hFQURFUihcKFteKV0qXCkpLiovXDEvcCcgJHtjb25maWd1cmVfYWN9YAogICAgIHRlc3QgLXogIiRmaWxlcyIgJiYgZmlsZXM9ImNvbmZpZy5oIgogICAgIHRvdWNoX2ZpbGVzPQogICAgIGZvciBmIGluICRmaWxlczsgZG8KLSAgICAgIGNhc2UgIiRmIiBpbgorICAgICAgY2FzZSAkZiBpbgogICAgICAgKjoqKSB0b3VjaF9maWxlcz0iJHRvdWNoX2ZpbGVzICJgZWNobyAiJGYiIHwKIAkJCQkgICAgICAgc2VkIC1lICdzL15bXjpdKjovLycgLWUgJ3MvOi4qLy8nYDs7CiAgICAgICAqKSB0b3VjaF9maWxlcz0iJHRvdWNoX2ZpbGVzICRmLmluIjs7CkBAIC0xNzUsMjUgKzE3NSwyNSBAQAogCiAgIGF1dG9tYWtlKikKICAgICBlY2hvIDE+JjIgIlwKLVdBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgotICAgICAgICAgeW91IG1vZGlmaWVkIFxgTWFrZWZpbGUuYW0nLCBcYGFjaW5jbHVkZS5tNCcgb3IgXGAke2NvbmZpZ3VyZV9hY30nLgotICAgICAgICAgWW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCB0aGUgXGBBdXRvbWFrZScgYW5kIFxgUGVybCcgcGFja2FnZXMuCitXQVJOSU5HOiAnJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkICdNYWtlZmlsZS5hbScsICdhY2luY2x1ZGUubTQnIG9yICcke2NvbmZpZ3VyZV9hY30nLgorICAgICAgICAgWW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCB0aGUgQXV0b21ha2UgYW5kIFBlcmwgcGFja2FnZXMuCiAgICAgICAgICBHcmFiIHRoZW0gZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCiAgICAgZmluZCAuIC10eXBlIGYgLW5hbWUgTWFrZWZpbGUuYW0gLXByaW50IHwKIAkgICBzZWQgJ3MvXC5hbSQvLmluLycgfAogCSAgIHdoaWxlIHJlYWQgZjsgZG8gdG91Y2ggIiRmIjsgZG9uZQogICAgIDs7CiAKLSAgYXV0b200dGUpCisgIGF1dG9tNHRlKikKICAgICBlY2hvIDE+JjIgIlwKLVdBUk5JTkc6IFxgJDEnIGlzIG5lZWRlZCwgYnV0IGlzICRtc2cuCitXQVJOSU5HOiAnJDEnIGlzIG5lZWRlZCwgYnV0IGlzICRtc2cuCiAgICAgICAgICBZb3UgbWlnaHQgaGF2ZSBtb2RpZmllZCBzb21lIGZpbGVzIHdpdGhvdXQgaGF2aW5nIHRoZQogICAgICAgICAgcHJvcGVyIHRvb2xzIGZvciBmdXJ0aGVyIGhhbmRsaW5nIHRoZW0uCi0gICAgICAgICBZb3UgY2FuIGdldCBcYCQxJyBhcyBwYXJ0IG9mIFxgQXV0b2NvbmYnIGZyb20gYW55IEdOVQorICAgICAgICAgWW91IGNhbiBnZXQgJyQxJyBhcyBwYXJ0IG9mIEF1dG9jb25mIGZyb20gYW55IEdOVQogICAgICAgICAgYXJjaGl2ZSBzaXRlLiIKIAotICAgIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAncy8uKi0tb3V0cHV0WyA9XSpcKFteIF0qXCkuKi9cMS9wJ2AKLSAgICB0ZXN0IC16ICIkZmlsZSIgJiYgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICdzLy4qLW9bIF0qXChbXiBdKlwpLiovXDEvcCdgCisgICAgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX291dHB1dCJgCisgICAgdGVzdCAteiAiJGZpbGUiICYmIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9taW51c28iYAogICAgIGlmIHRlc3QgLWYgIiRmaWxlIjsgdGhlbgogCXRvdWNoICRmaWxlCiAgICAgZWxzZQpAQCAtMjA3LDkzICsyMDcsOTcgQEAKICAgICBmaQogICAgIDs7CiAKLSAgYmlzb258eWFjYykKKyAgYmlzb24qfHlhY2MqKQogICAgIGVjaG8gMT4mMiAiXAotV0FSTklORzogXGAkMScgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCi0gICAgICAgICB5b3UgbW9kaWZpZWQgYSBcYC55JyBmaWxlLiAgWW91IG1heSBuZWVkIHRoZSBcYEJpc29uJyBwYWNrYWdlCitXQVJOSU5HOiAnJDEnICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIGEgJy55JyBmaWxlLiAgWW91IG1heSBuZWVkIHRoZSBCaXNvbiBwYWNrYWdlCiAgICAgICAgICBpbiBvcmRlciBmb3IgdGhvc2UgbW9kaWZpY2F0aW9ucyB0byB0YWtlIGVmZmVjdC4gIFlvdSBjYW4gZ2V0Ci0gICAgICAgICBcYEJpc29uJyBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKKyAgICAgICAgIEJpc29uIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgogICAgIHJtIC1mIHkudGFiLmMgeS50YWIuaAotICAgIGlmIFsgJCMgLW5lIDEgXTsgdGhlbgotICAgICAgICBldmFsIExBU1RBUkc9IlwkeyQjfSIKLQljYXNlICIkTEFTVEFSRyIgaW4KKyAgICBpZiB0ZXN0ICQjIC1uZSAxOyB0aGVuCisgICAgICAgIGV2YWwgTEFTVEFSRz1cJHskI30KKwljYXNlICRMQVNUQVJHIGluCiAJKi55KQogCSAgICBTUkNGSUxFPWBlY2hvICIkTEFTVEFSRyIgfCBzZWQgJ3MveSQvYy8nYAotCSAgICBpZiBbIC1mICIkU1JDRklMRSIgXTsgdGhlbgorCSAgICBpZiB0ZXN0IC1mICIkU1JDRklMRSI7IHRoZW4KIAkgICAgICAgICBjcCAiJFNSQ0ZJTEUiIHkudGFiLmMKIAkgICAgZmkKIAkgICAgU1JDRklMRT1gZWNobyAiJExBU1RBUkciIHwgc2VkICdzL3kkL2gvJ2AKLQkgICAgaWYgWyAtZiAiJFNSQ0ZJTEUiIF07IHRoZW4KKwkgICAgaWYgdGVzdCAtZiAiJFNSQ0ZJTEUiOyB0aGVuCiAJICAgICAgICAgY3AgIiRTUkNGSUxFIiB5LnRhYi5oCiAJICAgIGZpCiAJICA7OwogCWVzYWMKICAgICBmaQotICAgIGlmIFsgISAtZiB5LnRhYi5oIF07IHRoZW4KKyAgICBpZiB0ZXN0ICEgLWYgeS50YWIuaDsgdGhlbgogCWVjaG8gPnkudGFiLmgKICAgICBmaQotICAgIGlmIFsgISAtZiB5LnRhYi5jIF07IHRoZW4KKyAgICBpZiB0ZXN0ICEgLWYgeS50YWIuYzsgdGhlbgogCWVjaG8gJ21haW4oKSB7IHJldHVybiAwOyB9JyA+eS50YWIuYwogICAgIGZpCiAgICAgOzsKIAotICBsZXh8ZmxleCkKKyAgbGV4KnxmbGV4KikKICAgICBlY2hvIDE+JjIgIlwKLVdBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgotICAgICAgICAgeW91IG1vZGlmaWVkIGEgXGAubCcgZmlsZS4gIFlvdSBtYXkgbmVlZCB0aGUgXGBGbGV4JyBwYWNrYWdlCitXQVJOSU5HOiAnJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIGEgJy5sJyBmaWxlLiAgWW91IG1heSBuZWVkIHRoZSBGbGV4IHBhY2thZ2UKICAgICAgICAgIGluIG9yZGVyIGZvciB0aG9zZSBtb2RpZmljYXRpb25zIHRvIHRha2UgZWZmZWN0LiAgWW91IGNhbiBnZXQKLSAgICAgICAgIFxgRmxleCcgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgICAgICBGbGV4IGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgogICAgIHJtIC1mIGxleC55eS5jCi0gICAgaWYgWyAkIyAtbmUgMSBdOyB0aGVuCi0gICAgICAgIGV2YWwgTEFTVEFSRz0iXCR7JCN9IgotCWNhc2UgIiRMQVNUQVJHIiBpbgorICAgIGlmIHRlc3QgJCMgLW5lIDE7IHRoZW4KKyAgICAgICAgZXZhbCBMQVNUQVJHPVwkeyQjfQorCWNhc2UgJExBU1RBUkcgaW4KIAkqLmwpCiAJICAgIFNSQ0ZJTEU9YGVjaG8gIiRMQVNUQVJHIiB8IHNlZCAncy9sJC9jLydgCi0JICAgIGlmIFsgLWYgIiRTUkNGSUxFIiBdOyB0aGVuCisJICAgIGlmIHRlc3QgLWYgIiRTUkNGSUxFIjsgdGhlbgogCSAgICAgICAgIGNwICIkU1JDRklMRSIgbGV4Lnl5LmMKIAkgICAgZmkKIAkgIDs7CiAJZXNhYwogICAgIGZpCi0gICAgaWYgWyAhIC1mIGxleC55eS5jIF07IHRoZW4KKyAgICBpZiB0ZXN0ICEgLWYgbGV4Lnl5LmM7IHRoZW4KIAllY2hvICdtYWluKCkgeyByZXR1cm4gMDsgfScgPmxleC55eS5jCiAgICAgZmkKICAgICA7OwogCi0gIGhlbHAybWFuKQorICBoZWxwMm1hbiopCiAgICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKK1dBUk5JTkc6ICckMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCiAJIHlvdSBtb2RpZmllZCBhIGRlcGVuZGVuY3kgb2YgYSBtYW51YWwgcGFnZS4gIFlvdSBtYXkgbmVlZCB0aGUKLQkgXGBIZWxwMm1hbicgcGFja2FnZSBpbiBvcmRlciBmb3IgdGhvc2UgbW9kaWZpY2F0aW9ucyB0byB0YWtlCi0JIGVmZmVjdC4gIFlvdSBjYW4gZ2V0IFxgSGVscDJtYW4nIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorCSBIZWxwMm1hbiBwYWNrYWdlIGluIG9yZGVyIGZvciB0aG9zZSBtb2RpZmljYXRpb25zIHRvIHRha2UKKwkgZWZmZWN0LiAgWW91IGNhbiBnZXQgSGVscDJtYW4gZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCiAKLSAgICBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gJ3MvLiotbyBcKFteIF0qXCkuKi9cMS9wJ2AKLSAgICBpZiB0ZXN0IC16ICIkZmlsZSI7IHRoZW4KLQlmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gJ3MvLiotLW91dHB1dD1cKFteIF0qXCkuKi9cMS9wJ2AKLSAgICBmaQotICAgIGlmIFsgLWYgIiRmaWxlIiBdOyB0aGVuCisgICAgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX291dHB1dCJgCisgICAgdGVzdCAteiAiJGZpbGUiICYmIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9taW51c28iYAorICAgIGlmIHRlc3QgLWYgIiRmaWxlIjsgdGhlbgogCXRvdWNoICRmaWxlCiAgICAgZWxzZQogCXRlc3QgLXogIiRmaWxlIiB8fCBleGVjID4kZmlsZQogCWVjaG8gIi5hYiBoZWxwMm1hbiBpcyByZXF1aXJlZCB0byBnZW5lcmF0ZSB0aGlzIHBhZ2UiCi0JZXhpdCAxCisJZXhpdCAkPwogICAgIGZpCiAgICAgOzsKIAotICBtYWtlaW5mbykKKyAgbWFrZWluZm8qKQogICAgIGVjaG8gMT4mMiAiXAotV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCi0gICAgICAgICB5b3UgbW9kaWZpZWQgYSBcYC50ZXhpJyBvciBcYC50ZXhpbmZvJyBmaWxlLCBvciBhbnkgb3RoZXIgZmlsZQorV0FSTklORzogJyQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKKyAgICAgICAgIHlvdSBtb2RpZmllZCBhICcudGV4aScgb3IgJy50ZXhpbmZvJyBmaWxlLCBvciBhbnkgb3RoZXIgZmlsZQogICAgICAgICAgaW5kaXJlY3RseSBhZmZlY3RpbmcgdGhlIGFzcGVjdCBvZiB0aGUgbWFudWFsLiAgVGhlIHNwdXJpb3VzCi0gICAgICAgICBjYWxsIG1pZ2h0IGFsc28gYmUgdGhlIGNvbnNlcXVlbmNlIG9mIHVzaW5nIGEgYnVnZ3kgXGBtYWtlJyAoQUlYLAotICAgICAgICAgRFUsIElSSVgpLiAgWW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCB0aGUgXGBUZXhpbmZvJyBwYWNrYWdlIG9yCi0gICAgICAgICB0aGUgXGBHTlUgbWFrZScgcGFja2FnZS4gIEdyYWIgZWl0aGVyIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorICAgICAgICAgY2FsbCBtaWdodCBhbHNvIGJlIHRoZSBjb25zZXF1ZW5jZSBvZiB1c2luZyBhIGJ1Z2d5ICdtYWtlJyAoQUlYLAorICAgICAgICAgRFUsIElSSVgpLiAgWW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCB0aGUgVGV4aW5mbyBwYWNrYWdlIG9yCisgICAgICAgICB0aGUgR05VIG1ha2UgcGFja2FnZS4gIEdyYWIgZWl0aGVyIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgogICAgICMgVGhlIGZpbGUgdG8gdG91Y2ggaXMgdGhhdCBzcGVjaWZpZWQgd2l0aCAtbyAuLi4KLSAgICBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gJ3MvLiotbyBcKFteIF0qXCkuKi9cMS9wJ2AKKyAgICBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gIiRzZWRfb3V0cHV0ImAKKyAgICB0ZXN0IC16ICIkZmlsZSIgJiYgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX21pbnVzbyJgCiAgICAgaWYgdGVzdCAteiAiJGZpbGUiOyB0aGVuCiAgICAgICAjIC4uLiBvciBpdCBpcyB0aGUgb25lIHNwZWNpZmllZCB3aXRoIEBzZXRmaWxlbmFtZSAuLi4KICAgICAgIGluZmlsZT1gZWNobyAiJCoiIHwgc2VkICdzLy4qIFwoW14gXSpcKSAqJC9cMS8nYAotICAgICAgZmlsZT1gc2VkIC1uICcvXkBzZXRmaWxlbmFtZS8geyBzLy4qIFwoW14gXSpcKSAqJC9cMS87IHA7IHE7IH0nICRpbmZpbGVgCisgICAgICBmaWxlPWBzZWQgLW4gJworCS9eQHNldGZpbGVuYW1lL3sKKwkgIHMvLiogXChbXiBdKlwpICokL1wxLworCSAgcAorCSAgcQorCX0nICRpbmZpbGVgCiAgICAgICAjIC4uLiBvciBpdCBpcyBkZXJpdmVkIGZyb20gdGhlIHNvdXJjZSBuYW1lIChkaXIvZi50ZXhpIGJlY29tZXMgZi5pbmZvKQogICAgICAgdGVzdCAteiAiJGZpbGUiICYmIGZpbGU9YGVjaG8gIiRpbmZpbGUiIHwgc2VkICdzLC4qLywsO3MsLlteLl0qJCwsJ2AuaW5mbwogICAgIGZpCkBAIC0zMDMsNDkgKzMwNywxNCBAQAogICAgIHRvdWNoICRmaWxlCiAgICAgOzsKIAotICB0YXIpCi0gICAgc2hpZnQKLQotICAgICMgV2UgaGF2ZSBhbHJlYWR5IHRyaWVkIHRhciBpbiB0aGUgZ2VuZXJpYyBwYXJ0LgotICAgICMgTG9vayBmb3IgZ251dGFyL2d0YXIgYmVmb3JlIGludm9jYXRpb24gdG8gYXZvaWQgdWdseSBlcnJvcgotICAgICMgbWVzc2FnZXMuCi0gICAgaWYgKGdudXRhciAtLXZlcnNpb24gPiAvZGV2L251bGwgMj4mMSk7IHRoZW4KLSAgICAgICBnbnV0YXIgIiRAIiAmJiBleGl0IDAKLSAgICBmaQotICAgIGlmIChndGFyIC0tdmVyc2lvbiA+IC9kZXYvbnVsbCAyPiYxKTsgdGhlbgotICAgICAgIGd0YXIgIiRAIiAmJiBleGl0IDAKLSAgICBmaQotICAgIGZpcnN0YXJnPSIkMSIKLSAgICBpZiBzaGlmdDsgdGhlbgotCWNhc2UgIiRmaXJzdGFyZyIgaW4KLQkqbyopCi0JICAgIGZpcnN0YXJnPWBlY2hvICIkZmlyc3RhcmciIHwgc2VkIHMvby8vYAotCSAgICB0YXIgIiRmaXJzdGFyZyIgIiRAIiAmJiBleGl0IDAKLQkgICAgOzsKLQllc2FjCi0JY2FzZSAiJGZpcnN0YXJnIiBpbgotCSpoKikKLQkgICAgZmlyc3Rhcmc9YGVjaG8gIiRmaXJzdGFyZyIgfCBzZWQgcy9oLy9gCi0JICAgIHRhciAiJGZpcnN0YXJnIiAiJEAiICYmIGV4aXQgMAotCSAgICA7OwotCWVzYWMKLSAgICBmaQotCi0gICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBJIGNhbid0IHNlZW0gdG8gYmUgYWJsZSB0byBydW4gXGB0YXInIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4KLSAgICAgICAgIFlvdSBtYXkgd2FudCB0byBpbnN0YWxsIEdOVSB0YXIgb3IgRnJlZSBwYXh1dGlscywgb3IgY2hlY2sgdGhlCi0gICAgICAgICBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiIKLSAgICBleGl0IDEKLSAgICA7OwotCiAgICopCiAgICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBcYCQxJyBpcyBuZWVkZWQsIGFuZCBpcyAkbXNnLgorV0FSTklORzogJyQxJyBpcyBuZWVkZWQsIGFuZCBpcyAkbXNnLgogICAgICAgICAgWW91IG1pZ2h0IGhhdmUgbW9kaWZpZWQgc29tZSBmaWxlcyB3aXRob3V0IGhhdmluZyB0aGUKLSAgICAgICAgIHByb3BlciB0b29scyBmb3IgZnVydGhlciBoYW5kbGluZyB0aGVtLiAgQ2hlY2sgdGhlIFxgUkVBRE1FJyBmaWxlLAorICAgICAgICAgcHJvcGVyIHRvb2xzIGZvciBmdXJ0aGVyIGhhbmRsaW5nIHRoZW0uICBDaGVjayB0aGUgJ1JFQURNRScgZmlsZSwKICAgICAgICAgIGl0IG9mdGVuIHRlbGxzIHlvdSBhYm91dCB0aGUgbmVlZGVkIHByZXJlcXVpc2l0ZXMgZm9yIGluc3RhbGxpbmcKICAgICAgICAgIHRoaXMgcGFja2FnZS4gIFlvdSBtYXkgYWxzbyBwZWVrIGF0IGFueSBHTlUgYXJjaGl2ZSBzaXRlLCBpbiBjYXNlCi0gICAgICAgICBzb21lIG90aGVyIHBhY2thZ2Ugd291bGQgY29udGFpbiB0aGlzIG1pc3NpbmcgXGAkMScgcHJvZ3JhbS4iCisgICAgICAgICBzb21lIG90aGVyIHBhY2thZ2Ugd291bGQgY29udGFpbiB0aGlzIG1pc3NpbmcgJyQxJyBwcm9ncmFtLiIKICAgICBleGl0IDEKICAgICA7OwogZXNhYwpAQCAtMzU2LDUgKzMyNSw2IEBACiAjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKICMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgogIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKLSMgdGltZS1zdGFtcC1lbmQ6ICIkIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgogIyBFbmQ6CmRpZmYgLS1naXQgYS9idWlsZC1hdXgvbWtpbnN0YWxsZGlycyBiL2J1aWxkLWF1eC9ta2luc3RhbGxkaXJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAyNTlkYmZjLi4wMDAwMDAwCi0tLSBhL2J1aWxkLWF1eC9ta2luc3RhbGxkaXJzCisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLSMhIC9iaW4vc2gKLSMgbWtpbnN0YWxsZGlycyAtLS0gbWFrZSBkaXJlY3RvcnkgaGllcmFyY2h5Ci0KLXNjcmlwdHZlcnNpb249MjAwNS0wNi0yOS4yMgotCi0jIE9yaWdpbmFsIGF1dGhvcjogTm9haCBGcmllZG1hbiA8ZnJpZWRtYW5AcHJlcC5haS5taXQuZWR1PgotIyBDcmVhdGVkOiAxOTkzLTA1LTE2Ci0jIFB1YmxpYyBkb21haW4uCi0jCi0jIFRoaXMgZmlsZSBpcyBtYWludGFpbmVkIGluIEF1dG9tYWtlLCBwbGVhc2UgcmVwb3J0Ci0jIGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPiBvciBzZW5kIHBhdGNoZXMgdG8KLSMgPGF1dG9tYWtlLXBhdGNoZXNAZ251Lm9yZz4uCi0KLWVycnN0YXR1cz0wCi1kaXJtb2RlPQotCi11c2FnZT0iXAotVXNhZ2U6IG1raW5zdGFsbGRpcnMgWy1oXSBbLS1oZWxwXSBbLS12ZXJzaW9uXSBbLW0gTU9ERV0gRElSIC4uLgotCi1DcmVhdGUgZWFjaCBkaXJlY3RvcnkgRElSICh3aXRoIG1vZGUgTU9ERSwgaWYgc3BlY2lmaWVkKSwgaW5jbHVkaW5nIGFsbAotbGVhZGluZyBmaWxlIG5hbWUgY29tcG9uZW50cy4KLQotUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4iCi0KLSMgcHJvY2VzcyBjb21tYW5kIGxpbmUgYXJndW1lbnRzCi13aGlsZSB0ZXN0ICQjIC1ndCAwIDsgZG8KLSAgY2FzZSAkMSBpbgotICAgIC1oIHwgLS1oZWxwIHwgLS1oKikgICAgICAgICAjIC1oIGZvciBoZWxwCi0gICAgICBlY2hvICIkdXNhZ2UiCi0gICAgICBleGl0ICQ/Ci0gICAgICA7OwotICAgIC1tKSAgICAgICAgICAgICAgICAgICAgICAgICAjIC1tIFBFUk0gYXJnCi0gICAgICBzaGlmdAotICAgICAgdGVzdCAkIyAtZXEgMCAmJiB7IGVjaG8gIiR1c2FnZSIgMT4mMjsgZXhpdCAxOyB9Ci0gICAgICBkaXJtb2RlPSQxCi0gICAgICBzaGlmdAotICAgICAgOzsKLSAgICAtLXZlcnNpb24pCi0gICAgICBlY2hvICIkMCAkc2NyaXB0dmVyc2lvbiIKLSAgICAgIGV4aXQgJD8KLSAgICAgIDs7Ci0gICAgLS0pICAgICAgICAgICAgICAgICAgICAgICAgICMgc3RvcCBvcHRpb24gcHJvY2Vzc2luZwotICAgICAgc2hpZnQKLSAgICAgIGJyZWFrCi0gICAgICA7OwotICAgIC0qKSAgICAgICAgICAgICAgICAgICAgICAgICAjIHVua25vd24gb3B0aW9uCi0gICAgICBlY2hvICIkdXNhZ2UiIDE+JjIKLSAgICAgIGV4aXQgMQotICAgICAgOzsKLSAgICAqKSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmaXJzdCBub24tb3B0IGFyZwotICAgICAgYnJlYWsKLSAgICAgIDs7Ci0gIGVzYWMKLWRvbmUKLQotZm9yIGZpbGUKLWRvCi0gIGlmIHRlc3QgLWQgIiRmaWxlIjsgdGhlbgotICAgIHNoaWZ0Ci0gIGVsc2UKLSAgICBicmVhawotICBmaQotZG9uZQotCi1jYXNlICQjIGluCi0gIDApIGV4aXQgMCA7OwotZXNhYwotCi0jIFNvbGFyaXMgOCdzIG1rZGlyIC1wIGlzbid0IHRocmVhZC1zYWZlLiAgSWYgeW91IG1rZGlyIC1wIGEvYiBhbmQKLSMgbWtkaXIgLXAgYS9jIGF0IHRoZSBzYW1lIHRpbWUsIGJvdGggd2lsbCBkZXRlY3QgdGhhdCBhIGlzIG1pc3NpbmcsCi0jIG9uZSB3aWxsIGNyZWF0ZSBhLCB0aGVuIHRoZSBvdGhlciB3aWxsIHRyeSB0byBjcmVhdGUgYSBhbmQgZGllIHdpdGgKLSMgYSAiRmlsZSBleGlzdHMiIGVycm9yLiAgVGhpcyBpcyBhIHByb2JsZW0gd2hlbiBjYWxsaW5nIG1raW5zdGFsbGRpcnMKLSMgZnJvbSBhIHBhcmFsbGVsIG1ha2UuICBXZSB1c2UgLS12ZXJzaW9uIGluIHRoZSBwcm9iZSB0byByZXN0cmljdAotIyBvdXJzZWx2ZXMgdG8gR05VIG1rZGlyLCB3aGljaCBpcyB0aHJlYWQtc2FmZS4KLWNhc2UgJGRpcm1vZGUgaW4KLSAgJycpCi0gICAgaWYgbWtkaXIgLXAgLS12ZXJzaW9uIC4gPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgISAtZCAuLy0tdmVyc2lvbjsgdGhlbgotICAgICAgZWNobyAibWtkaXIgLXAgLS0gJCoiCi0gICAgICBleGVjIG1rZGlyIC1wIC0tICIkQCIKLSAgICBlbHNlCi0gICAgICAjIE9uIE5leHRTdGVwIGFuZCBPcGVuU3RlcCwgdGhlIGBta2RpcicgY29tbWFuZCBkb2VzIG5vdAotICAgICAgIyByZWNvZ25pemUgYW55IG9wdGlvbi4gIEl0IHdpbGwgaW50ZXJwcmV0IGFsbCBvcHRpb25zIGFzCi0gICAgICAjIGRpcmVjdG9yaWVzIHRvIGNyZWF0ZSwgYW5kIHRoZW4gYWJvcnQgYmVjYXVzZSBgLicgYWxyZWFkeQotICAgICAgIyBleGlzdHMuCi0gICAgICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAotICAgICAgdGVzdCAtZCAuLy0tdmVyc2lvbiAmJiBybWRpciAuLy0tdmVyc2lvbgotICAgIGZpCi0gICAgOzsKLSAgKikKLSAgICBpZiBta2RpciAtbSAiJGRpcm1vZGUiIC1wIC0tdmVyc2lvbiAuID4vZGV2L251bGwgMj4mMSAmJgotICAgICAgIHRlc3QgISAtZCAuLy0tdmVyc2lvbjsgdGhlbgotICAgICAgZWNobyAibWtkaXIgLW0gJGRpcm1vZGUgLXAgLS0gJCoiCi0gICAgICBleGVjIG1rZGlyIC1tICIkZGlybW9kZSIgLXAgLS0gIiRAIgotICAgIGVsc2UKLSAgICAgICMgQ2xlYW4gdXAgYWZ0ZXIgTmV4dFN0ZXAgYW5kIE9wZW5TdGVwIG1rZGlyLgotICAgICAgZm9yIGQgaW4gLi8tbSAuLy1wIC4vLS12ZXJzaW9uICIuLyRkaXJtb2RlIjsKLSAgICAgIGRvCi0gICAgICAgIHRlc3QgLWQgJGQgJiYgcm1kaXIgJGQKLSAgICAgIGRvbmUKLSAgICBmaQotICAgIDs7Ci1lc2FjCi0KLWZvciBmaWxlCi1kbwotICBjYXNlICRmaWxlIGluCi0gICAgLyopIHBhdGhjb21wPS8gOzsKLSAgICAqKSAgcGF0aGNvbXA9IDs7Ci0gIGVzYWMKLSAgb0lGUz0kSUZTCi0gIElGUz0vCi0gIHNldCBmbm9yZCAkZmlsZQotICBzaGlmdAotICBJRlM9JG9JRlMKLQotICBmb3IgZAotICBkbwotICAgIHRlc3QgIngkZCIgPSB4ICYmIGNvbnRpbnVlCi0KLSAgICBwYXRoY29tcD0kcGF0aGNvbXAkZAotICAgIGNhc2UgJHBhdGhjb21wIGluCi0gICAgICAtKikgcGF0aGNvbXA9Li8kcGF0aGNvbXAgOzsKLSAgICBlc2FjCi0KLSAgICBpZiB0ZXN0ICEgLWQgIiRwYXRoY29tcCI7IHRoZW4KLSAgICAgIGVjaG8gIm1rZGlyICRwYXRoY29tcCIKLQotICAgICAgbWtkaXIgIiRwYXRoY29tcCIgfHwgbGFzdGVycj0kPwotCi0gICAgICBpZiB0ZXN0ICEgLWQgIiRwYXRoY29tcCI7IHRoZW4KLQllcnJzdGF0dXM9JGxhc3RlcnIKLSAgICAgIGVsc2UKLQlpZiB0ZXN0ICEgLXogIiRkaXJtb2RlIjsgdGhlbgotCSAgZWNobyAiY2htb2QgJGRpcm1vZGUgJHBhdGhjb21wIgotCSAgbGFzdGVycj0KLQkgIGNobW9kICIkZGlybW9kZSIgIiRwYXRoY29tcCIgfHwgbGFzdGVycj0kPwotCi0JICBpZiB0ZXN0ICEgLXogIiRsYXN0ZXJyIjsgdGhlbgotCSAgICBlcnJzdGF0dXM9JGxhc3RlcnIKLQkgIGZpCi0JZmkKLSAgICAgIGZpCi0gICAgZmkKLQotICAgIHBhdGhjb21wPSRwYXRoY29tcC8KLSAgZG9uZQotZG9uZQotCi1leGl0ICRlcnJzdGF0dXMKLQotIyBMb2NhbCBWYXJpYWJsZXM6Ci0jIG1vZGU6IHNoZWxsLXNjcmlwdAotIyBzaC1pbmRlbnRhdGlvbjogMgotIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCi0jIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKLSMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCi0jIHRpbWUtc3RhbXAtZW5kOiAiJCIKLSMgRW5kOgpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L3NuaXBwZXQvX05vcmV0dXJuLmggYi9idWlsZC1hdXgvc25pcHBldC9fTm9yZXR1cm4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDRhZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbGQtYXV4L3NuaXBwZXQvX05vcmV0dXJuLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmICFkZWZpbmVkIF9Ob3JldHVybiAmJiBfX1NURENfVkVSU0lPTl9fIDwgMjAxMTEyCisjIGlmICgzIDw9IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSAyICYmIDggPD0gX19HTlVDX01JTk9SX18pIFwKKyAgICAgIHx8IDB4NTExMCA8PSBfX1NVTlBST19DKQorIyAgZGVmaW5lIF9Ob3JldHVybiBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSkKKyMgZWxpZiAxMjAwIDw9IF9NU0NfVkVSCisjICBkZWZpbmUgX05vcmV0dXJuIF9fZGVjbHNwZWMgKG5vcmV0dXJuKQorIyBlbHNlCisjICBkZWZpbmUgX05vcmV0dXJuCisjIGVuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9zbmlwcGV0L2FyZy1ub25udWxsLmggYi9idWlsZC1hdXgvc25pcHBldC9hcmctbm9ubnVsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOWRkMjYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsZC1hdXgvc25pcHBldC9hcmctbm9ubnVsbC5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qIEEgQyBtYWNybyBmb3IgZGVjbGFyaW5nIHRoYXQgc3BlY2lmaWMgYXJndW1lbnRzIG11c3Qgbm90IGJlIE5VTEwuCisgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogX0dMX0FSR19OT05OVUxMKChuLC4uLixtKSkgdGVsbHMgdGhlIGNvbXBpbGVyIGFuZCBzdGF0aWMgYW5hbHl6ZXIgdG9vbHMKKyAgIHRoYXQgdGhlIHZhbHVlcyBwYXNzZWQgYXMgYXJndW1lbnRzIG4sIC4uLiwgbSBtdXN0IGJlIG5vbi1OVUxMIHBvaW50ZXJzLgorICAgbiA9IDEgc3RhbmRzIGZvciB0aGUgZmlyc3QgYXJndW1lbnQsIG4gPSAyIGZvciB0aGUgc2Vjb25kIGFyZ3VtZW50IGV0Yy4gICovCisjaWZuZGVmIF9HTF9BUkdfTk9OTlVMTAorIyBpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSB8fCBfX0dOVUNfXyA+IDMKKyMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKSBfX2F0dHJpYnV0ZV9fICgoX19ub25udWxsX18gcGFyYW1zKSkKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpCisjIGVuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaCBiL2J1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmRhOTRiCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbGQtYXV4L3NuaXBwZXQvYysrZGVmcy5oCkBAIC0wLDAgKzEsMjcxIEBACisvKiBDKysgY29tcGF0aWJsZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBtYWNyb3MuCisgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBfR0xfQ1hYREVGU19ICisjZGVmaW5lIF9HTF9DWFhERUZTX0gKKworLyogVGhlIHRocmVlIG1vc3QgZnJlcXVlbnQgdXNlIGNhc2VzIG9mIHRoZXNlIG1hY3JvcyBhcmU6CisKKyAgICogRm9yIHByb3ZpZGluZyBhIHN1YnN0aXR1dGUgZm9yIGEgZnVuY3Rpb24gdGhhdCBpcyBtaXNzaW5nIG9uIHNvbWUKKyAgICAgcGxhdGZvcm1zLCBidXQgaXMgZGVjbGFyZWQgYW5kIHdvcmtzIGZpbmUgb24gdGhlIHBsYXRmb3JtcyBvbiB3aGljaAorICAgICBpdCBleGlzdHM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiAhQEhBVkVfRk9PQAorICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorCisgICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBhbGwgcGxhdGZvcm1zLAorICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBwbGF0Zm9ybXM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACisgICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyAgICAgICAjICAgdW5kZWYgZm9vCisgICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKyAgICAgICAjIGVsc2UKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorCisgICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBzb21lIHBsYXRmb3JtcworICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBvZiB0aGVtIGFuZAorICAgICBpcyBhZGRpdGlvbmFsbHkgZWl0aGVyIG1pc3Npbmcgb3IgdW5kZWNsYXJlZCBvbiBzb21lIG90aGVyIHBsYXRmb3JtczoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorICAgICAgICMgICB1bmRlZiBmb28KKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworICAgICAgICMgZWxzZQorICAgICAgICMgIGlmICFASEFWRV9GT09AICAgb3IgICBpZiAhQEhBVkVfREVDTF9GT09ACisgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKyovCisKKy8qIF9HTF9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cworIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybiAiQyIKKyNlbHNlCisjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuCisjZW5kaWYKKworLyogX0dMX0ZVTkNERUNMX1JQTCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBkZWNsYXJlcyBhIHJlcGxhY2VtZW50IGZ1bmN0aW9uLCBuYW1lZCBycGxfZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCisgICBFeGFtcGxlOgorICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyAqLworI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9GVU5DREVDTF9SUExfMSAocnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykKKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1JQTF8xKHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICBfR0xfRVhURVJOX0MgcmV0dHlwZSBycGxfZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisKKy8qIF9HTF9GVU5DREVDTF9TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgZGVjbGFyZXMgdGhlIHN5c3RlbSBmdW5jdGlvbiwgbmFtZWQgZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCisgICBFeGFtcGxlOgorICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyAqLworI2RlZmluZSBfR0xfRlVOQ0RFQ0xfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9FWFRFUk5fQyByZXR0eXBlIGZ1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworCisvKiBfR0xfQ1hYQUxJQVNfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCisgICB0aGF0IHJlZGlyZWN0cyB0byBycGxfZnVuYywgaWYgR05VTElCX05BTUVTUEFDRSBpcyBkZWZpbmVkLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0NYWEFMSUFTX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CisgKi8KKyNkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpycGxfZnVuYzsgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xIChmdW5jLCBycGxfZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIHJwbF9mdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50CisgICBkZWNsYXJhdGlvbi4gIEEgY2FzdCBpcyB1c2VkIHRvIHNpbGVuY2UgdGhlICJpbnZhbGlkIGNvbnZlcnNpb24iIGVycm9yCisgICB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6cnBsX2Z1bmMpOyAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCisgICB0aGF0IHJlZGlyZWN0cyB0byB0aGUgc3lzdGVtIHByb3ZpZGVkIGZ1bmN0aW9uIGZ1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UKKyAgIGlzIGRlZmluZWQuCisgICBFeGFtcGxlOgorICAgICBfR0xfQ1hYQUxJQVNfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKyAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisgIC8qIElmIHdlIHdlcmUgdG8gd3JpdGUKKyAgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsKKyAgICAgbGlrZSBhYm92ZSBpbiBfR0xfQ1hYQUxJQVNfUlBMXzEsIHRoZSBjb21waWxlciBjb3VsZCBvcHRpbWl6ZSBjYWxscworICAgICBiZXR0ZXIgKHJlbW92ZSBhbiBpbmRpcmVjdGlvbiB0aHJvdWdoIGEgJ3N0YXRpYycgcG9pbnRlciB2YXJpYWJsZSksCisgICAgIGJ1dCB0aGVuIHRoZSBfR0xfQ1hYQUxJQVNXQVJOIG1hY3JvIGJlbG93IHdvdWxkIGNhdXNlIGEgd2FybmluZyBub3Qgb25seQorICAgICBmb3IgdXNlcyBvZiA6OmZ1bmMgYnV0IGFsc28gZm9yIHVzZXMgb2YgR05VTElCX05BTUVTUEFDRTo6ZnVuYy4gICovCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7ICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBmdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGRlY2xhcmF0aW9uLgorICAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IgdGhhdCB3b3VsZAorICAgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6ZnVuYyk7IFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzLCByZXR0eXBlMiwgcGFyYW1ldGVyczIpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBpcyBwaWNrZWQgYW1vbmcgYSBzZXQgb2Ygb3ZlcmxvYWRlZCBmdW5jdGlvbnMsCisgICBuYW1lbHkgdGhlIG9uZSB3aXRoIHJldHR5cGUyIGFuZCBwYXJhbWV0ZXJzMi4gIFR3byBjb25zZWN1dGl2ZSBjYXN0cworICAgYXJlIHVzZWQgdG8gc2lsZW5jZSB0aGUgImNhbm5vdCBmaW5kIGEgbWF0Y2giIGFuZCAiaW52YWxpZCBjb252ZXJzaW9uIgorICAgZXJyb3JzIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorICAvKiBUaGUgb3V0ZXIgY2FzdCBtdXN0IGJlIGEgcmVpbnRlcnByZXRfY2FzdC4KKyAgICAgVGhlIGlubmVyIGNhc3Q6IFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzZXQgb2Ygb3ZlcmxvYWRlZAorICAgICBmdW5jdGlvbnMsIGl0IHdvcmtzIGFzIGEgc3RhdGljX2Nhc3Q8PiwgY2hvb3NpbmcgdGhlIGRlc2lnbmF0ZWQgdmFyaWFudC4KKyAgICAgV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNpbmdsZSB2YXJpYW50LCBpdCB3b3JrcyBhcyBhCisgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Pi4gVGhlIHBhcmVudGhlc2l6ZWQgY2FzdCBzeW50YXggd29ya3MgYm90aCB3YXlzLiAgKi8KKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAocmV0dHlwZTIoKilwYXJhbWV0ZXJzMikoOjpmdW5jKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU1dBUk4gKGZ1bmMpOworICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gOjpmdW5jIGlzIHVzZWQgYnV0IG5vdCB3aGVuCisgICBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICBmdW5jIG11c3QgYmUgZGVmaW5lZCB3aXRob3V0IG92ZXJsb2FkZWQKKyAgIHZhcmlhbnRzLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOXzEgKGZ1bmMsIEdOVUxJQl9OQU1FU1BBQ0UpCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzEoZnVuYyxuYW1lc3BhY2UpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk5fMiAoZnVuYywgbmFtZXNwYWNlKQorLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKyMgaWYgIV9fT1BUSU1JWkVfXworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgIF9HTF9XQVJOX09OX1VTRSAoZnVuYywgXAorICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAorICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKyAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTV0FSTjEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gdGhlIGdpdmVuIG92ZXJsb2FkZWQgdmFyaWFudCBvZiA6OmZ1bmMKKyAgIGlzIHVzZWQgYnV0IG5vdCB3aGVuIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOMV8xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBHTlVMSUJfTkFNRVNQQUNFKQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk4xXzIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIG5hbWVzcGFjZSkKKy8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAorICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCisjIGlmICFfX09QVElNSVpFX18KKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworIyBlbHNlCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworI2VuZGlmIC8qIF9HTF9DWFhERUZTX0ggKi8KZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9zbmlwcGV0L3dhcm4tb24tdXNlLmggYi9idWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZTY5YmIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oCkBAIC0wLDAgKzEsMTA5IEBACisvKiBBIEMgbWFjcm8gZm9yIGVtaXR0aW5nIHdhcm5pbmdzIGlmIGEgZnVuY3Rpb24gaXMgdXNlZC4KKyAgIENvcHlyaWdodCAoQykgMjAxMC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBfR0xfV0FSTl9PTl9VU0UgKGZ1bmN0aW9uLCAibGl0ZXJhbCBzdHJpbmciKSBpc3N1ZXMgYSBkZWNsYXJhdGlvbgorICAgZm9yIEZVTkNUSU9OIHdoaWNoIHdpbGwgdGhlbiB0cmlnZ2VyIGEgY29tcGlsZXIgd2FybmluZyBjb250YWluaW5nCisgICB0aGUgdGV4dCBvZiAibGl0ZXJhbCBzdHJpbmciIGFueXdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkLCBpZgorICAgc3VwcG9ydGVkIGJ5IHRoZSBjb21waWxlci4gIElmIHRoZSBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMKKyAgIGZlYXR1cmUsIHRoZSBtYWNybyBleHBhbmRzIHRvIGFuIHVudXNlZCBleHRlcm4gZGVjbGFyYXRpb24uCisKKyAgIFRoaXMgbWFjcm8gaXMgdXNlZnVsIGZvciBtYXJraW5nIGEgZnVuY3Rpb24gYXMgYSBwb3RlbnRpYWwKKyAgIHBvcnRhYmlsaXR5IHRyYXAsIHdpdGggdGhlIGludGVudCB0aGF0ICJsaXRlcmFsIHN0cmluZyIgaW5jbHVkZQorICAgaW5zdHJ1Y3Rpb25zIG9uIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSB1c2VkCisgICBpbnN0ZWFkLiAgSG93ZXZlciwgb25lIG9mIHRoZSByZWFzb25zIHRoYXQgYSBmdW5jdGlvbiBpcyBhCisgICBwb3J0YWJpbGl0eSB0cmFwIGlzIGlmIGl0IGhhcyB0aGUgd3Jvbmcgc2lnbmF0dXJlLiAgRGVjbGFyaW5nCisgICBGVU5DVElPTiB3aXRoIGEgZGlmZmVyZW50IHNpZ25hdHVyZSBpbiBDIGlzIGEgY29tcGlsYXRpb24gZXJyb3IsIHNvCisgICB0aGlzIG1hY3JvIG11c3QgdXNlIHRoZSBzYW1lIHR5cGUgYXMgYW55IGV4aXN0aW5nIGRlY2xhcmF0aW9uIHNvCisgICB0aGF0IHByb2dyYW1zIHRoYXQgYXZvaWQgdGhlIHByb2JsZW1hdGljIEZVTkNUSU9OIGRvIG5vdCBmYWlsIHRvCisgICBjb21waWxlIG1lcmVseSBiZWNhdXNlIHRoZXkgaW5jbHVkZWQgYSBoZWFkZXIgdGhhdCBwb2lzb25lZCB0aGUKKyAgIGZ1bmN0aW9uLiAgQnV0IHRoaXMgaW1wbGllcyB0aGF0IF9HTF9XQVJOX09OX1VTRSBpcyBvbmx5IHNhZmUgdG8KKyAgIHVzZSBpZiBGVU5DVElPTiBpcyBrbm93biB0byBhbHJlYWR5IGhhdmUgYSBkZWNsYXJhdGlvbi4gIFVzZSBvZgorICAgdGhpcyBtYWNybyBpbXBsaWVzIHRoYXQgdGhlcmUgbXVzdCBub3QgYmUgYW55IG90aGVyIG1hY3JvIGhpZGluZworICAgdGhlIGRlY2xhcmF0aW9uIG9mIEZVTkNUSU9OOyBidXQgdW5kZWZpbmluZyBGVU5DVElPTiBmaXJzdCBpcyBwYXJ0CisgICBvZiB0aGUgcG9pc29uaW5nIHByb2Nlc3MgYW55d2F5IChhbHRob3VnaCBmb3Igc3ltYm9scyB0aGF0IGFyZQorICAgcHJvdmlkZWQgb25seSB2aWEgYSBtYWNybywgdGhlIHJlc3VsdCBpcyBhIGNvbXBpbGF0aW9uIGVycm9yIHJhdGhlcgorICAgdGhhbiBhIHdhcm5pbmcgY29udGFpbmluZyAibGl0ZXJhbCBzdHJpbmciKS4gIEFsc28gbm90ZSB0aGF0IGluCisgICBDKyssIGl0IGlzIG9ubHkgc2FmZSB0byB1c2UgaWYgRlVOQ1RJT04gaGFzIG5vIG92ZXJsb2Fkcy4KKworICAgRm9yIGFuIGV4YW1wbGUsIGl0IGlzIHBvc3NpYmxlIHRvIHBvaXNvbiAnZ2V0bGluZScgYnk6CisgICAtIGFkZGluZyBhIGNhbGwgdG8gZ2xfV0FSTl9PTl9VU0VfUFJFUEFSRShbWyNpbmNsdWRlIDxzdGRpby5oPl1dLAorICAgICBbZ2V0bGluZV0pIGluIGNvbmZpZ3VyZS5hYywgd2hpY2ggcG90ZW50aWFsbHkgZGVmaW5lcworICAgICBIQVZFX1JBV19ERUNMX0dFVExJTkUKKyAgIC0gYWRkaW5nIHRoaXMgY29kZSB0byBhIGhlYWRlciB0aGF0IHdyYXBzIHRoZSBzeXN0ZW0gPHN0ZGlvLmg+OgorICAgICAjdW5kZWYgZ2V0bGluZQorICAgICAjaWYgSEFWRV9SQVdfREVDTF9HRVRMSU5FCisgICAgIF9HTF9XQVJOX09OX1VTRSAoZ2V0bGluZSwgImdldGxpbmUgaXMgcmVxdWlyZWQgYnkgUE9TSVggMjAwOCwgYnV0IgorICAgICAgICJub3QgdW5pdmVyc2FsbHkgcHJlc2VudDsgdXNlIHRoZSBnbnVsaWIgbW9kdWxlIGdldGxpbmUiKTsKKyAgICAgI2VuZGlmCisKKyAgIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBkaXJlY3RseSBwb2lzb24gZ2xvYmFsIHZhcmlhYmxlcy4gIEJ1dCBpdCBpcworICAgcG9zc2libGUgdG8gd3JpdGUgYSB3cmFwcGVyIGFjY2Vzc29yIGZ1bmN0aW9uLCBhbmQgcG9pc29uIHRoYXQKKyAgIChsZXNzIGNvbW1vbiB1c2FnZSwgbGlrZSAmZW52aXJvbiwgd2lsbCBjYXVzZSBhIGNvbXBpbGF0aW9uIGVycm9yCisgICByYXRoZXIgdGhhbiBpc3N1ZSB0aGUgbmljZSB3YXJuaW5nLCBidXQgdGhlIGVuZCByZXN1bHQgb2YgaW5mb3JtaW5nCisgICB0aGUgZGV2ZWxvcGVyIGFib3V0IHRoZWlyIHBvcnRhYmlsaXR5IHByb2JsZW0gaXMgc3RpbGwgYWNoaWV2ZWQpOgorICAgI2lmIEhBVkVfUkFXX0RFQ0xfRU5WSVJPTgorICAgc3RhdGljIGNoYXIgKioqcnBsX2Vudmlyb24gKHZvaWQpIHsgcmV0dXJuICZlbnZpcm9uOyB9CisgICBfR0xfV0FSTl9PTl9VU0UgKHJwbF9lbnZpcm9uLCAiZW52aXJvbiBpcyBub3QgYWx3YXlzIHByb3Blcmx5IGRlY2xhcmVkIik7CisgICAjIHVuZGVmIGVudmlyb24KKyAgICMgZGVmaW5lIGVudmlyb24gKCpycGxfZW52aXJvbiAoKSkKKyAgICNlbmRpZgorICAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFCisKKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCisvKiBBIGNvbXBpbGVyIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDQuMy4wIGFuZCBsYXRlci4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobWVzc2FnZSkpKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24KKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisjIGVuZGlmCisjZW5kaWYKKworLyogX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuY3Rpb24sIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsICJzdHJpbmciKQorICAgaXMgbGlrZSBfR0xfV0FSTl9PTl9VU0UgKGZ1bmN0aW9uLCAic3RyaW5nIiksIGV4Y2VwdCB0aGF0IHRoZSBmdW5jdGlvbiBpcworICAgZGVjbGFyZWQgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLCBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLAorICAgYW5kIGF0dHJpYnV0ZXMuCisgICBUaGlzIHZhcmlhbnQgaXMgdXNlZnVsIGZvciBvdmVybG9hZGVkIGZ1bmN0aW9ucyBpbiBDKysuIF9HTF9XQVJOX09OX1VTRSBkb2VzCisgICBub3Qgd29yayBpbiB0aGlzIGNhc2UuICAqLworI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0VfQ1hYCisjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyBcCisgICAgIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobXNnKSkpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisvKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBfR0xfV0FSTl9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX0VYVEVSTl9DCisjIGlmIGRlZmluZWQgX19jcGx1c3BsdXMKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4gIkMiCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4KKyMgZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L3RleGluZm8udGV4IGIvYnVpbGQtYXV4L3RleGluZm8udGV4CmluZGV4IGZmMmM0MDYuLmI1ZjMxNDEgMTAwNjQ0Ci0tLSBhL2J1aWxkLWF1eC90ZXhpbmZvLnRleAorKysgYi9idWlsZC1hdXgvdGV4aW5mby50ZXgKQEAgLTEsMTggKzEsMTggQEAKICUgdGV4aW5mby50ZXggLS0gVGVYIG1hY3JvcyB0byBoYW5kbGUgVGV4aW5mbyBmaWxlcy4KLSUKKyUgCiAlIExvYWQgcGxhaW4gaWYgbmVjZXNzYXJ5LCBpLmUuLCBpZiBydW5uaW5nIHVuZGVyIGluaXRleC4KIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIGZtdG5hbWVcZW5kY3NuYW1lXHJlbGF4XGlucHV0IHBsYWluXGZpCiAlCi1cZGVmXHRleGluZm92ZXJzaW9uezIwMDUtMDctMDUuMTl9CitcZGVmXHRleGluZm92ZXJzaW9uezIwMTItMTEtMDguMTF9CiAlCi0lIENvcHlyaWdodCAoQykgMTk4NSwgMTk4NiwgMTk4OCwgMTk5MCwgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwKLSUgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlCi0lIEZvdW5kYXRpb24sIEluYy4KKyUgQ29weXJpZ2h0IDE5ODUsIDE5ODYsIDE5ODgsIDE5OTAsIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsCislIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsCislIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAlCi0lIFRoaXMgdGV4aW5mby50ZXggZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyUgVGhpcyB0ZXhpbmZvLnRleCBmaWxlIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogJSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotJSBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0Ci0lIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyUgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlCislIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAlCiAlIFRoaXMgdGV4aW5mby50ZXggZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKICUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQpAQCAtMjAsOSArMjAsNyBAQAogJSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAlCiAlIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0lIGFsb25nIHdpdGggdGhpcyB0ZXhpbmZvLnRleCBmaWxlOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUKLSUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSUgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCislIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogJQogJSBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGVuIHRoaXMgZmlsZSBpcyByZWFkIGJ5IFRlWCB3aGVuIHByb2Nlc3NpbmcKICUgYSBUZXhpbmZvIHNvdXJjZSBkb2N1bWVudCwgeW91IG1heSB1c2UgdGhlIHJlc3VsdCB3aXRob3V0CkBAIC0zMCw5ICsyOCw5IEBACiAlCiAlIFBsZWFzZSB0cnkgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRleGluZm8udGV4IGJlZm9yZSBzdWJtaXR0aW5nIGJ1ZwogJSByZXBvcnRzOyB5b3UgY2FuIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gZnJvbToKLSUgICBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8gKHRoZSBUZXhpbmZvIGhvbWUgcGFnZSksIG9yCi0lICAgZnRwOi8vdHVnLm9yZy90ZXgvdGV4aW5mby50ZXgKLSUgICAgIChhbmQgYWxsIENUQU4gbWlycm9ycywgc2VlIGh0dHA6Ly93d3cuY3Rhbi5vcmcpLgorJSAgIGh0dHA6Ly9mdHAuZ251Lm9yZy9nbnUvdGV4aW5mby8gKHRoZSBUZXhpbmZvIHJlbGVhc2UgYXJlYSksIG9yCislICAgaHR0cDovL2Z0cG1pcnJvci5nbnUub3JnL3RleGluZm8vIChzYW1lLCB2aWEgYSBtaXJyb3IpLCBvcgorJSAgIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyAodGhlIFRleGluZm8gaG9tZSBwYWdlKQogJSBUaGUgdGV4aW5mby50ZXggaW4gYW55IGdpdmVuIGRpc3RyaWJ1dGlvbiBjb3VsZCB3ZWxsIGJlIG91dAogJSBvZiBkYXRlLCBzbyBpZiB0aGF0J3Mgd2hhdCB5b3UncmUgdXNpbmcsIHBsZWFzZSBjaGVjay4KICUKQEAgLTY3LDcgKzY1LDYgQEAKIFxldmVyeWpvYntcbWVzc2FnZXtbVGV4aW5mbyB2ZXJzaW9uIFx0ZXhpbmZvdmVyc2lvbl19JQogICBcY2F0Y29kZWArPVxhY3RpdmUgXGNhdGNvZGVgXF89XGFjdGl2ZX0KIAotXG1lc3NhZ2V7QmFzaWNzLH0KIFxjaGFyZGVmXG90aGVyPTEyCiAKICUgV2UgbmV2ZXIgd2FudCBwbGFpbidzIFxvdXRlciBkZWZpbml0aW9uIG9mIFwrIGluIFRleGluZm8uCkBAIC05NSwxMCArOTIsMTMgQEAKIFxsZXRccHRleG5ld3dyaXRlXG5ld3dyaXRlCiBcbGV0XHB0ZXhub2luZGVudD1cbm9pbmRlbnQKIFxsZXRccHRleHBsdXM9KworXGxldFxwdGV4cmFnZ2VkcmlnaHQ9XHJhZ2dlZHJpZ2h0CiBcbGV0XHB0ZXhyYnJhY2U9XH0KIFxsZXRccHRleHNsYXNoPVwvCiBcbGV0XHB0ZXhzdGFyPVwqCiBcbGV0XHB0ZXh0PVx0CitcbGV0XHB0ZXh0b3A9XHRvcAore1xjYXRjb2RlYFwnPVxhY3RpdmUgXGdsb2JhbFxsZXRccHRleHF1b3RlcmlnaHQnfSUgYWN0aXZlIGluIHBsYWluJ3MgbWF0aCBtb2RlCiAKICUgSWYgdGhpcyBjaGFyYWN0ZXIgYXBwZWFycyBpbiBhbiBlcnJvciBtZXNzYWdlIG9yIGhlbHAgc3RyaW5nLCBpdAogJSBzdGFydHMgYSBuZXcgbGluZSBpbiB0aGUgb3V0cHV0LgpAQCAtMTE2LDEwICsxMTYsMTEgQEAKICUgU2V0IHVwIGZpeGVkIHdvcmRzIGZvciBFbmdsaXNoIGlmIG5vdCBhbHJlYWR5IHNldC4KIFxpZnhccHV0d29yZEFwcGVuZGl4XHVuZGVmaW5lZCAgXGdkZWZccHV0d29yZEFwcGVuZGl4e0FwcGVuZGl4fVxmaQogXGlmeFxwdXR3b3JkQ2hhcHRlclx1bmRlZmluZWQgICBcZ2RlZlxwdXR3b3JkQ2hhcHRlcntDaGFwdGVyfVxmaQorXGlmeFxwdXR3b3JkZXJyb3JcdW5kZWZpbmVkICAgICBcZ2RlZlxwdXR3b3JkZXJyb3J7ZXJyb3J9XGZpCiBcaWZ4XHB1dHdvcmRmaWxlXHVuZGVmaW5lZCAgICAgIFxnZGVmXHB1dHdvcmRmaWxle2ZpbGV9XGZpCiBcaWZ4XHB1dHdvcmRpblx1bmRlZmluZWQgICAgICAgIFxnZGVmXHB1dHdvcmRpbntpbn1cZmkKLVxpZnhccHV0d29yZEluZGV4SXNFbXB0eVx1bmRlZmluZWQgICAgIFxnZGVmXHB1dHdvcmRJbmRleElzRW1wdHl7KEluZGV4IGlzIGVtcHR5KX1cZmkKLVxpZnhccHV0d29yZEluZGV4Tm9uZXhpc3RlbnRcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRJbmRleE5vbmV4aXN0ZW50eyhJbmRleCBpcyBub25leGlzdGVudCl9XGZpCitcaWZ4XHB1dHdvcmRJbmRleElzRW1wdHlcdW5kZWZpbmVkICAgICAgIFxnZGVmXHB1dHdvcmRJbmRleElzRW1wdHl7KEluZGV4IGlzIGVtcHR5KX1cZmkKK1xpZnhccHV0d29yZEluZGV4Tm9uZXhpc3RlbnRcdW5kZWZpbmVkICAgXGdkZWZccHV0d29yZEluZGV4Tm9uZXhpc3RlbnR7KEluZGV4IGlzIG5vbmV4aXN0ZW50KX1cZmkKIFxpZnhccHV0d29yZEluZm9cdW5kZWZpbmVkICAgICAgXGdkZWZccHV0d29yZEluZm97SW5mb31cZmkKIFxpZnhccHV0d29yZEluc3RhbmNlVmFyaWFibGVvZlx1bmRlZmluZWQgXGdkZWZccHV0d29yZEluc3RhbmNlVmFyaWFibGVvZntJbnN0YW5jZSBWYXJpYWJsZSBvZn1cZmkKIFxpZnhccHV0d29yZE1ldGhvZG9uXHVuZGVmaW5lZCAgXGdkZWZccHV0d29yZE1ldGhvZG9ue01ldGhvZCBvbn1cZmkKQEAgLTE1MywyOCArMTU0LDI1IEBACiBcaWZ4XHB1dHdvcmREZWZvcHRcdW5kZWZpbmVkICAgIFxnZGVmXHB1dHdvcmREZWZvcHR7VXNlciBPcHRpb259XGZpCiBcaWZ4XHB1dHdvcmREZWZmdW5jXHVuZGVmaW5lZCAgIFxnZGVmXHB1dHdvcmREZWZmdW5je0Z1bmN0aW9ufVxmaQogCi0lIEluIHNvbWUgbWFjcm9zLCB3ZSBjYW5ub3QgdXNlIHRoZSBgXD8gbm90YXRpb24tLS10aGUgbGVmdCBxdW90ZSBpcwotJSBpbiBzb21lIGNhc2VzIHRoZSBlc2NhcGUgY2hhci4KLVxjaGFyZGVmXGJhY2tDaGFyICA9IGBcXAorJSBTaW5jZSB0aGUgY2F0ZWdvcnkgb2Ygc3BhY2UgaXMgbm90IGtub3duLCB3ZSBoYXZlIHRvIGJlIGNhcmVmdWwuCitcY2hhcmRlZlxzcGFjZWNhdCA9IDEwCitcZGVmXHNwYWNlaXNzcGFjZXtcY2F0Y29kZWBcID1cc3BhY2VjYXR9CisKKyUgc29tZXRpbWVzIGNoYXJhY3RlcnMgYXJlIGFjdGl2ZSwgc28gd2UgbmVlZCBjb250cm9sIHNlcXVlbmNlcy4KK1xjaGFyZGVmXGFtcENoYXIgICA9IGBcJgogXGNoYXJkZWZcY29sb25DaGFyID0gYFw6CiBcY2hhcmRlZlxjb21tYUNoYXIgPSBgXCwKK1xjaGFyZGVmXGRhc2hDaGFyICA9IGBcLQogXGNoYXJkZWZcZG90Q2hhciAgID0gYFwuCiBcY2hhcmRlZlxleGNsYW1DaGFyPSBgXCEKLVxjaGFyZGVmXHBsdXNDaGFyICA9IGBcKworXGNoYXJkZWZcaGFzaENoYXIgID0gYFwjCitcY2hhcmRlZlxscXVvdGVDaGFyPSBgXGAKIFxjaGFyZGVmXHF1ZXN0Q2hhciA9IGBcPworXGNoYXJkZWZccnF1b3RlQ2hhcj0gYFwnCiBcY2hhcmRlZlxzZW1pQ2hhciAgPSBgXDsKK1xjaGFyZGVmXHNsYXNoQ2hhciA9IGBcLwogXGNoYXJkZWZcdW5kZXJDaGFyID0gYFxfCiAKLVxjaGFyZGVmXHNwYWNlQ2hhciA9IGBcICUKLVxjaGFyZGVmXHNwYWNlY2F0ID0gMTAKLVxkZWZcc3BhY2Vpc3NwYWNle1xjYXRjb2RlXHNwYWNlQ2hhcj1cc3BhY2VjYXR9Ci0KLXslIGZvciBoZWxwIHdpdGggZGVidWdnaW5nLgotICUgZXhhbXBsZSB1c2FnZTogXGV4cGFuZGFmdGVyXHNob3dcYWN0aXZlYmFja3NsYXNoCi0gXGNhdGNvZGVgXCEgPSAwIFxjYXRjb2RlYFxcID0gXGFjdGl2ZQotICFnbG9iYWwhZGVmIWFjdGl2ZWJhY2tzbGFzaHtcfQotfQotCiAlIElnbm9yZSBhIHRva2VuLgogJQogXGRlZlxnb2JibGUjMXt9CkBAIC0yMDMsMzYgKzIwMSw3IEBACiAlIHRoYXQgbWFyayBvdmVyZnVsbCBib3hlcyAoaW4gY2FzZSB5b3UgaGF2ZSBkZWNpZGVkCiAlIHRoYXQgdGhlIHRleHQgbG9va3Mgb2sgZXZlbiB0aG91Z2ggaXQgcGFzc2VzIHRoZSBtYXJnaW4pLgogJQotXGRlZlxmaW5hbG91dHtcb3ZlcmZ1bGxydWxlPTBwdH0KLQotJSBAfCBpbnNlcnRzIGEgY2hhbmdlYmFyIHRvIHRoZSBsZWZ0IG9mIHRoZSBjdXJyZW50IGxpbmUuICBJdCBzaG91bGQKLSUgc3Vycm91bmQgYW55IGNoYW5nZWQgdGV4dC4gIFRoaXMgYXBwcm9hY2ggZG9lcyAqbm90KiB3b3JrIGlmIHRoZQotJSBjaGFuZ2Ugc3BhbnMgbW9yZSB0aGFuIHR3byBsaW5lcyBvZiBvdXRwdXQuICBUbyBoYW5kbGUgdGhhdCwgd2Ugd291bGQKLSUgaGF2ZSBhZG9wdCBhIG11Y2ggbW9yZSBkaWZmaWN1bHQgYXBwcm9hY2ggKHB1dHRpbmcgbWFya3MgaW50byB0aGUgbWFpbgotJSB2ZXJ0aWNhbCBsaXN0IGZvciB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgZWFjaCBjaGFuZ2UpLgotJQotXGRlZlx8eyUKLSAgJSBcdmFkanVzdCBjYW4gb25seSBiZSB1c2VkIGluIGhvcml6b250YWwgbW9kZS4KLSAgXGxlYXZldm1vZGUKLSAgJQotICAlIEFwcGVuZCB0aGlzIHZlcnRpY2FsIG1vZGUgbWF0ZXJpYWwgYWZ0ZXIgdGhlIGN1cnJlbnQgbGluZSBpbiB0aGUgb3V0cHV0LgotICBcdmFkanVzdHslCi0gICAgJSBXZSB3YW50IHRvIGluc2VydCBhIHJ1bGUgd2l0aCB0aGUgaGVpZ2h0IGFuZCBkZXB0aCBvZiB0aGUgY3VycmVudAotICAgICUgbGVhZGluZzsgdGhhdCBpcyBleGFjdGx5IHdoYXQgXHN0cnV0Ym94IGlzIHN1cHBvc2VkIHRvIHJlY29yZC4KLSAgICBcdnNraXAtXGJhc2VsaW5lc2tpcAotICAgICUKLSAgICAlIFx2YWRqdXN0LWl0ZW1zIGFyZSBpbnNlcnRlZCBhdCB0aGUgbGVmdCBlZGdlIG9mIHRoZSB0eXBlLiAgU28KLSAgICAlIHRoZSBcbGxhcCBoZXJlIG1vdmVzIG91dCBpbnRvIHRoZSBsZWZ0LWhhbmQgbWFyZ2luLgotICAgIFxsbGFweyUKLSAgICAgICUKLSAgICAgICUgRm9yIGEgdGhpY2tlciBvciB0aGlubmVyIGJhciwgY2hhbmdlIHRoZSBgMXB0Jy4KLSAgICAgIFx2cnVsZSBoZWlnaHRcYmFzZWxpbmVza2lwIHdpZHRoMXB0Ci0gICAgICAlCi0gICAgICAlIFRoaXMgaXMgdGhlIHNwYWNlIGJldHdlZW4gdGhlIGJhciBhbmQgdGhlIHRleHQuCi0gICAgICBcaHNraXAgMTJwdAotICAgIH0lCi0gIH0lCi19CitcZGVmXGZpbmFsb3V0e1xvdmVyZnVsbHJ1bGU9MHB0IH0KIAogJSBTb21ldGltZXMgaXQgaXMgY29udmVuaWVudCB0byBoYXZlIGV2ZXJ5dGhpbmcgaW4gdGhlIHRyYW5zY3JpcHQgZmlsZQogJSBhbmQgbm90aGluZyBvbiB0aGUgdGVybWluYWwuICBXZSBkb24ndCBqdXN0IGNhbGwgXHRyYWNpbmdhbGwgaGVyZSwKQEAgLTI1MCw3ICsyMTksNyBAQAogICBcdHJhY2luZ21hY3JvczIKICAgXHRyYWNpbmdyZXN0b3JlczEKICAgXHNob3dib3hicmVhZHRoXG1heGRpbWVuIFxzaG93Ym94ZGVwdGhcbWF4ZGltZW4KLSAgXGlmeFxlVGVYdmVyc2lvblx1bmRlZmluZWRcZWxzZSAlIGV0ZXggZ2l2ZXMgdXMgbW9yZSBsb2dnaW5nCisgIFxpZnhcZVRlWHZlcnNpb25cdGhpc2lzdW5kZWZpbmVkXGVsc2UgJSBldGV4IGdpdmVzIHVzIG1vcmUgbG9nZ2luZwogICAgIFx0cmFjaW5nc2NhbnRva2VuczEKICAgICBcdHJhY2luZ2lmczEKICAgICBcdHJhY2luZ2dyb3VwczEKQEAgLTI2MSw2ICsyMzAsMTMgQEAKICAgXGVycm9yY29udGV4dGxpbmVzMTYKIH0lCiAKKyUgQGVycm9ybXNne01TR30uICBEbyB0aGUgaW5kZXgtbGlrZSBleHBhbnNpb25zIG9uIE1TRywgYnV0IGlmIHRoaW5ncworJSBhcmVuJ3QgcGVyZmVjdCwgaXQncyBub3QgdGhlIGVuZCBvZiB0aGUgd29ybGQsIGJlaW5nIGFuIGVycm9yIG1lc3NhZ2UsCislIGFmdGVyIGFsbC4KKyUgCitcZGVmXGVycm9ybXNne1xiZWdpbmdyb3VwIFxpbmRleG5vZm9udHMgXGRvZXJyb3Jtc2d9CitcZGVmXGRvZXJyb3Jtc2cjMXtcZXJybWVzc2FnZXsjMX19CisKICUgYWRkIGNoZWNrIGZvciBcbGFzdHBlbmFsdHkgdG8gcGxhaW4ncyBkZWZpbml0aW9ucy4gIElmIHRoZSBsYXN0IHRoaW5nCiAlIHdlIGRpZCB3YXMgYSBcbm9icmVhaywgd2UgZG9uJ3Qgd2FudCB0byBpbnNlcnQgbW9yZSBzcGFjZS4KICUKQEAgLTI3MSw3ICsyNDcsNiBAQAogXGRlZlxiaWdicmVha3tcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDBccGFyXGlmZGltXGxhc3Rza2lwPFxiaWdza2lwYW1vdW50CiAgIFxyZW1vdmVsYXN0c2tpcFxwZW5hbHR5LTIwMFxiaWdza2lwXGZpXGZpfQogCi0lIEZvciBAY3JvcG1hcmtzIGNvbW1hbmQuCiAlIERvIEBjcm9wbWFya3MgdG8gZ2V0IGNyb3AgbWFya3MuCiAlCiBcbmV3aWZcaWZjcm9wbWFya3MKQEAgLTI4NSw2ICsyNjAsNTAgQEAKIFxuZXdkaW1lblxjb3JuZXJ0aGljayBcY29ybmVydGhpY2s9LjNwdAogXG5ld2RpbWVuXHRvcGFuZGJvdHRvbW1hcmdpbiBcdG9wYW5kYm90dG9tbWFyZ2luPS43NWluCiAKKyUgT3V0cHV0IGEgbWFyayB3aGljaCBzZXRzIFx0aGlzY2hhcHRlciwgXHRoaXNzZWN0aW9uIGFuZCBcdGhpc2NvbG9yLgorJSBXZSBkdW1wIGV2ZXJ5dGhpbmcgdG9nZXRoZXIgYmVjYXVzZSB3ZSBvbmx5IGhhdmUgb25lIGtpbmQgb2YgbWFyay4KKyUgVGhpcyB3b3JrcyBiZWNhdXNlIHdlIG9ubHkgdXNlIFxib3RtYXJrIC8gXHRvcG1hcmssIG5vdCBcZmlyc3RtYXJrLgorJQorJSBBIG1hcmsgY29udGFpbnMgYSBzdWJleHByZXNzaW9uIG9mIHRoZSBcaWZjYXNlIC4uLiBcZmkgY29uc3RydWN0LgorJSBcZ2V0Km1hcmtzIG1hY3JvcyBiZWxvdyBleHRyYWN0IHRoZSBuZWVkZWQgcGFydCB1c2luZyBcaWZjYXNlLgorJQorJSBBbm90aGVyIGNvbXBsaWNhdGlvbiBpcyB0byBsZXQgdGhlIHVzZXIgY2hvb3NlIHdoZXRoZXIgXHRoaXNjaGFwdGVyCislIChcdGhpc3NlY3Rpb24pIHJlZmVycyB0byB0aGUgY2hhcHRlciAoc2VjdGlvbikgaW4gZWZmZWN0IGF0IHRoZSB0b3AKKyUgb2YgYSBwYWdlLCBvciB0aGF0IGF0IHRoZSBib3R0b20gb2YgYSBwYWdlLiAgVGhlIHNvbHV0aW9uIGlzCislIGRlc2NyaWJlZCBvbiBwYWdlIDI2MCBvZiBUaGUgVGVYYm9vay4gIEl0IGludm9sdmVzIG91dHB1dHRpbmcgdHdvCislIG1hcmtzIGZvciB0aGUgc2VjdGlvbmluZyBtYWNyb3MsIG9uZSBiZWZvcmUgdGhlIHNlY3Rpb24gYnJlYWssIGFuZAorJSBvbmUgYWZ0ZXIuICBJIHdvbid0IHByZXRlbmQgSSBjYW4gZGVzY3JpYmUgdGhpcyBiZXR0ZXIgdGhhbiBERUsuLi4KK1xkZWZcZG9tYXJreyUKKyAgXHRva3MwPVxleHBhbmRhZnRlcntcbGFzdGNoYXB0ZXJkZWZzfSUKKyAgXHRva3MyPVxleHBhbmRhZnRlcntcbGFzdHNlY3Rpb25kZWZzfSUKKyAgXHRva3M0PVxleHBhbmRhZnRlcntccHJldmNoYXB0ZXJkZWZzfSUKKyAgXHRva3M2PVxleHBhbmRhZnRlcntccHJldnNlY3Rpb25kZWZzfSUKKyAgXHRva3M4PVxleHBhbmRhZnRlcntcbGFzdGNvbG9yZGVmc30lCisgIFxtYXJreyUKKyAgICAgICAgICAgICAgICAgICBcdGhlXHRva3MwIFx0aGVcdG9rczIKKyAgICAgIFxub2V4cGFuZFxvciBcdGhlXHRva3M0IFx0aGVcdG9rczYKKyAgICBcbm9leHBhbmRcZWxzZSBcdGhlXHRva3M4CisgIH0lCit9CislIFx0b3BtYXJrIGRvZXNuJ3Qgd29yayBmb3IgdGhlIHZlcnkgZmlyc3QgY2hhcHRlciAoYWZ0ZXIgdGhlIHRpdGxlCislIHBhZ2Ugb3IgdGhlIGNvbnRlbnRzKSwgc28gd2UgdXNlIFxmaXJzdG1hcmsgdGhlcmUgLS0gdGhpcyBnZXRzIHVzCislIHRoZSBtYXJrIHdpdGggdGhlIGNoYXB0ZXIgZGVmcywgdW5sZXNzIHRoZSB1c2VyIHNuZWFrcyBpbiwgZS5nLiwKKyUgQHNldGNvbG9yIChvciBAdXJsLCBvciBAbGluaywgZXRjLikgYmV0d2VlbiBAY29udGVudHMgYW5kIHRoZSB2ZXJ5CislIGZpcnN0IEBjaGFwdGVyLgorXGRlZlxnZXR0b3BoZWFkaW5nbWFya3N7JQorICBcaWZjYXNlMFx0b3BtYXJrXGZpCisgIFxpZnhcdGhpc2NoYXB0ZXJcZW1wdHkgXGlmY2FzZTBcZmlyc3RtYXJrXGZpIFxmaQorfQorXGRlZlxnZXRib3R0b21oZWFkaW5nbWFya3N7XGlmY2FzZTFcYm90bWFya1xmaX0KK1xkZWZcZ2V0Y29sb3JtYXJrc3tcaWZjYXNlMlx0b3BtYXJrXGZpfQorCislIEF2b2lkICJ1bmRlZmluZWQgY29udHJvbCBzZXF1ZW5jZSIgZXJyb3JzLgorXGRlZlxsYXN0Y2hhcHRlcmRlZnN7fQorXGRlZlxsYXN0c2VjdGlvbmRlZnN7fQorXGRlZlxwcmV2Y2hhcHRlcmRlZnN7fQorXGRlZlxwcmV2c2VjdGlvbmRlZnN7fQorXGRlZlxsYXN0Y29sb3JkZWZze30KKwogJSBNYWluIG91dHB1dCByb3V0aW5lLgogXGNoYXJkZWZcUEFHRSA9IDI1NQogXG91dHB1dCA9IHtcb25lcGFnZW91dHtccGFnZWNvbnRlbnRzXFBBR0V9fQpAQCAtMzAyLDcgKzMyMSw5IEBACiAgICUKICAgJSBEbyB0aGlzIG91dHNpZGUgb2YgdGhlIFxzaGlwb3V0IHNvIEBjb2RlIGV0Yy4gd2lsbCBiZSBleHBhbmRlZCBpbgogICAlIHRoZSBoZWFkbGluZSBhcyB0aGV5IHNob3VsZCBiZSwgbm90IHRha2VuIGxpdGVyYWxseSAob3V0cHV0dGluZyAnJ2NvZGUpLgorICBcaWZvZGRccGFnZW5vIFxnZXRvZGRoZWFkaW5nbWFya3MgXGVsc2UgXGdldGV2ZW5oZWFkaW5nbWFya3MgXGZpCiAgIFxzZXRib3hcaGVhZGxpbmVib3ggPSBcdmJveHtcbGV0XGhzaXplPVxwYWdld2lkdGggXG1ha2VoZWFkbGluZX0lCisgIFxpZm9kZFxwYWdlbm8gXGdldG9kZGZvb3RpbmdtYXJrcyBcZWxzZSBcZ2V0ZXZlbmZvb3RpbmdtYXJrcyBcZmkKICAgXHNldGJveFxmb290bGluZWJveCA9IFx2Ym94e1xsZXRcaHNpemU9XHBhZ2V3aWR0aCBcbWFrZWZvb3RsaW5lfSUKICAgJQogICB7JQpAQCAtMzExLDYgKzMzMiwxMyBAQAogICAgICUgYmVmb3JlIHRoZSBcc2hpcG91dCBydW5zLgogICAgICUKICAgICBcaW5kZXhkdW1taWVzICAgICAgICAgJSBkb24ndCBleHBhbmQgY29tbWFuZHMgaW4gdGhlIG91dHB1dC4KKyAgICBcbm9ybWFsdHVybm9mZmFjdGl2ZSAgJSBcIGluIGluZGV4IGVudHJpZXMgbXVzdCBub3Qgc3RheSBcLCBlLmcuLCBpZgorICAgICAgICAgICAgICAgJSB0aGUgcGFnZSBicmVhayBoYXBwZW5zIHRvIGJlIGluIHRoZSBtaWRkbGUgb2YgYW4gZXhhbXBsZS4KKyAgICAgICAgICAgICAgICUgV2UgZG9uJ3Qgd2FudCAudnIgKG9yIHdoYXRldmVyKSBlbnRyaWVzIGxpa2UgdGhpczoKKyAgICAgICAgICAgICAgICUgXGVudHJ5e3tcdHQgXGluZGV4YmFja3NsYXNoIH1hY3JvbnltfXszMn17XGNvZGUge1xhY3JvbnltfX0KKyAgICAgICAgICAgICAgICUgIlxhY3JvbnltIiB3b24ndCB3b3JrIHdoZW4gaXQncyByZWFkIGJhY2sgaW47CisgICAgICAgICAgICAgICAlIGl0IG5lZWRzIHRvIGJlCisgICAgICAgICAgICAgICAlIHtcY29kZSB7e1x0dCBcYmFja3NsYXNoY3VyZm9udCB9YWNyb255bX0KICAgICBcc2hpcG91dFx2Ym94eyUKICAgICAgICUgRG8gdGhpcyBlYXJseSBzbyBwZGYgcmVmZXJlbmNlcyBnbyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYWdlLgogICAgICAgXGlmcGRmbWFrZXBhZ2VkZXN0IFxwZGZkZXN0IG5hbWV7XHRoZVxwYWdlbm99IHh5elxmaQpAQCAtMzM4LDkgKzM2Niw5IEBACiAgICAgICBccGFnZWJvZHl7IzF9JQogICAgICAgXGlmZGltXGh0XGZvb3RsaW5lYm94ID4gMHB0CiAgICAgICAgICUgT25seSBsZWF2ZSB0aGlzIHNwYWNlIGlmIHRoZSBmb290bGluZSBpcyBub25lbXB0eS4KLSAgICAgICAgJSAoV2UgbGVzc2VuZWQgXHZzaXplIGZvciBpdCBpbiBcb2RkZm9vdGluZ3h4eC4pCisgICAgICAgICUgKFdlIGxlc3NlbmVkIFx2c2l6ZSBmb3IgaXQgaW4gXG9kZGZvb3Rpbmd5eXkuKQogICAgICAgICAlIFRoZSBcYmFzZWxpbmVza2lwPTI0cHQgaW4gcGxhaW4ncyBcbWFrZWZvb3RsaW5lIGhhcyBubyBlZmZlY3QuCi0gICAgICAgIFx2c2tpcCAyXGJhc2VsaW5lc2tpcAorICAgICAgICBcdnNraXAgMjRwdAogICAgICAgICBcdW52Ym94XGZvb3RsaW5lYm94CiAgICAgICBcZmkKICAgICAgICUKQEAgLTM3NCw3ICs0MDIsNyBAQAogJSBtYXJnaW5hbCBoYWNrcywganVoYUB2aWlzYS51dWNwIChKdWhhIFRha2FsYSkKIFxpZnZvaWRcbWFyZ2luXGVsc2UgJSBtYXJnaW5hbCBpbmZvIGlzIHByZXNlbnQKICAgXHJsYXB7XGtlcm5caHNpemVcdmJveCB0b1x6QHtca2VybjFwdFxib3hcbWFyZ2luIFx2c3N9fVxmaQotXGRpbWVuQD1cZHAjMSBcdW52Ym94IzEKK1xkaW1lbkA9XGRwIzFccmVsYXggXHVudmJveCMxXHJlbGF4CiBcaWZ2b2lkXGZvb3RpbnNcZWxzZVx2c2tpcFxza2lwXGZvb3RpbnNcZm9vdG5vdGVydWxlIFx1bnZib3hcZm9vdGluc1xmaQogXGlmckBnZ2VkYm90dG9tIFxrZXJuLVxkaW1lbkAgXHZmaWwgXGZpfQogfQpAQCAtMzk2LDcgKzQyNCw3IEBACiAlCiBcZGVmXHBhcnNlYXJne1xwYXJzZWFyZ3VzaW5ne319CiBcZGVmXHBhcnNlYXJndXNpbmcjMSMyeyUKLSAgXGRlZlxuZXh0eyMyfSUKKyAgXGRlZlxhcmd0b3J1bnsjMn0lCiAgIFxiZWdpbmdyb3VwCiAgICAgXG9iZXlsaW5lcwogICAgIFxzcGFjZWlzc3BhY2UKQEAgLTQxNSw3ICs0NDMsNyBAQAogXGRlZlxhcmdyZW1vdmVjb21tZW50IzFcY29tbWVudCMyXEFyZ1Rlcm17XGFyZ3JlbW92ZWMgIzFcY1xBcmdUZXJtfQogXGRlZlxhcmdyZW1vdmVjIzFcYyMyXEFyZ1Rlcm17XGFyZ2NoZWNrc3BhY2VzIzFcXl5NXEFyZ1Rlcm19CiAKLSUgRWFjaCBvY2N1cmVuY2Ugb2YgYFxeXk0nIG9yIGA8c3BhY2U+XF5eTScgaXMgcmVwbGFjZWQgYnkgYSBzaW5nbGUgc3BhY2UuCislIEVhY2ggb2NjdXJyZW5jZSBvZiBgXF5eTScgb3IgYDxzcGFjZT5cXl5NJyBpcyByZXBsYWNlZCBieSBhIHNpbmdsZSBzcGFjZS4KICUKICUgXGFyZ3JlbW92ZWMgbWlnaHQgbGVhdmUgdXMgd2l0aCB0cmFpbGluZyBzcGFjZSwgZS5nLiwKICUgICAgQGVuZCBpdGVtaXplICBAYyBmb28KQEAgLTQyNyw4ICs0NTUsNyBAQAogXGRlZlxhcmdjaGVja3NwYWNlc1kjMVxeXk0jMlxeXk0jM1xBcmdUZXJteyUKICAgXGRlZlx0ZW1weyMzfSUKICAgXGlmeFx0ZW1wXGVtcHR5Ci0gICAgJSBXZSBjYW5ub3QgdXNlIFxuZXh0IGhlcmUsIGFzIGl0IGhvbGRzIHRoZSBtYWNybyB0byBydW47Ci0gICAgJSB0aHVzIHdlIHJldXNlIFx0ZW1wLgorICAgICUgRG8gbm90IHVzZSBcbmV4dCwgcGVyaGFwcyB0aGUgY2FsbGVyIG9mIFxwYXJzZWFyZyB1c2VzIGl0OyByZXVzZSBcdGVtcDoKICAgICBcbGV0XHRlbXBcZmluaXNocGFyc2VhcmcKICAgXGVsc2UKICAgICBcbGV0XHRlbXBcYXJnY2hlY2tzcGFjZXMKQEAgLTQ0MCwxNCArNDY3LDE0IEBACiAlIElmIGEgX2RlbGltaXRlZF8gYXJndW1lbnQgaXMgZW5jbG9zZWQgaW4gYnJhY2VzLCB0aGV5IGdldCBzdHJpcHBlZDsgc28KICUgdG8gZ2V0IF9leGFjdGx5XyB0aGUgcmVzdCBvZiB0aGUgbGluZSwgd2UgaGFkIHRvIHByZXZlbnQgc3VjaCBzaXR1YXRpb24uCiAlIFdlIHByZXBlbmRlZCBhbiBcZW1wdHkgdG9rZW4gYXQgdGhlIHZlcnkgYmVnaW5uaW5nIGFuZCB3ZSBleHBhbmQgaXQgbm93LAotJSBqdXN0IGJlZm9yZSBwYXNzaW5nIHRoZSBjb250cm9sIHRvIFxuZXh0LgotJSAoU2ltaWxhcmlseSwgd2UgaGF2ZSB0byB0aGluayBhYm91dCAjMyBvZiBcYXJnY2hlY2tzcGFjZXNZIGFib3ZlOiBpdCBpcworJSBqdXN0IGJlZm9yZSBwYXNzaW5nIHRoZSBjb250cm9sIHRvIFxhcmd0b3J1bi4KKyUgKFNpbWlsYXJseSwgd2UgaGF2ZSB0byB0aGluayBhYm91dCAjMyBvZiBcYXJnY2hlY2tzcGFjZXNZIGFib3ZlOiBpdCBpcwogJSBlaXRoZXIgdGhlIG51bGwgc3RyaW5nLCBvciBpdCBlbmRzIHdpdGggXF5eTS0tLXRodXMgdGhlcmUgaXMgbm8gZGFuZ2VyCiAlIHRoYXQgYSBwYWlyIG9mIGJyYWNlcyB3b3VsZCBiZSBzdHJpcHBlZC4KICUKICUgQnV0IGZpcnN0LCB3ZSBoYXZlIHRvIHJlbW92ZSB0aGUgdHJhaWxpbmcgc3BhY2UgdG9rZW4uCiAlCi1cZGVmXGZpbmlzaHBhcnNlYXJnIzEgXEFyZ1Rlcm17XGV4cGFuZGFmdGVyXG5leHRcZXhwYW5kYWZ0ZXJ7IzF9fQorXGRlZlxmaW5pc2hwYXJzZWFyZyMxIFxBcmdUZXJte1xleHBhbmRhZnRlclxhcmd0b3J1blxleHBhbmRhZnRlcnsjMX19CiAKICUgXHBhcnNlYXJnZGVmXGZvb3suLi59CiAlCWlzIHJvdWdobHkgZXF1aXZhbGVudCB0bwpAQCAtNDk4LDEyICs1MjUsMTIgQEAKICUgdXNlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IGVudmlyb25tZW50IGlzIHRoZSBvbmUgZXhwZWN0ZWQuCiAlCiAlIE5vbi1mYWxzZSBjb25kaXRpb25hbHMgKEBpZnRleCwgQGlmc2V0KSBkb24ndCBmaXQgaW50byB0aGlzLCBzbyB0aGV5Ci0lIGFyZSBub3QgdHJlYXRlZCBhcyBlbnZpcm9tZW50czsgdGhleSBkb24ndCBvcGVuIGEgZ3JvdXAuICAoVGhlCislIGFyZSBub3QgdHJlYXRlZCBhcyBlbnZpcm9ubWVudHM7IHRoZXkgZG9uJ3Qgb3BlbiBhIGdyb3VwLiAgKFRoZQogJSBpbXBsZW1lbnRhdGlvbiBvZiBAZW5kIHRha2VzIGNhcmUgbm90IHRvIGNhbGwgXGVuZGdyb3VwIGluIHRoaXMKICUgc3BlY2lhbCBjYXNlLikKIAogCi0lIEF0IHJ1bnRpbWUsIGVudmlyb25tZW50cyBzdGFydCB3aXRoIHRoaXM6CislIEF0IHJ1bi10aW1lLCBlbnZpcm9ubWVudHMgc3RhcnQgd2l0aCB0aGlzOgogXGRlZlxzdGFydGVudmlyb25tZW50IzF7XGJlZ2luZ3JvdXBcZGVmXHRoaXNlbnZ7IzF9fQogJSBpbml0aWFsaXplCiBcbGV0XHRoaXNlbnZcZW1wdHkKQEAgLTUyMSw3ICs1NDgsNyBAQAogICBcZmkKIH0KIAotJSBFdmlyb25tZW50IG1pc21hdGNoLCAjMSBleHBlY3RlZDoKKyUgRW52aXJvbm1lbnQgbWlzbWF0Y2gsICMxIGV4cGVjdGVkOgogXGRlZlxiYWRlbnZlcnJ7JQogICBcZXJyaGVscCA9IFxFTXNpbXBsZQogICBcZXJybWVzc2FnZXtUaGlzIGNvbW1hbmQgY2FuIGFwcGVhciBvbmx5IFxpbmVudmlyb25tZW50XHRlbXAsCkBAIC01MjksNyArNTU2LDcgQEAKIH0KIFxkZWZcaW5lbnZpcm9ubWVudCMxeyUKICAgXGlmeCMxXGVtcHR5Ci0gICAgb3V0IG9mIGFueSBlbnZpcm9ubWVudCUKKyAgICBvdXRzaWRlIG9mIGFueSBlbnZpcm9ubWVudCUKICAgXGVsc2UKICAgICBpbiBlbnZpcm9ubWVudCBcZXhwYW5kYWZ0ZXJcc3RyaW5nIzElCiAgIFxmaQpAQCAtNTQxLDcgKzU2OCw3IEBACiBccGFyc2VhcmdkZWZcZW5keyUKICAgXGlmIDFcY3NuYW1lIGlzY29uZC4jMVxlbmRjc25hbWUKICAgXGVsc2UKLSAgICAlIFRoZSBnZW5lcmFsIHdvcmRpbmcgb2YgXGJhZGVudmVyciBtYXkgbm90IGJlIGlkZWFsLCBidXQuLi4gLS1rYXNhbCwgMDZub3YwMworICAgICUgVGhlIGdlbmVyYWwgd29yZGluZyBvZiBcYmFkZW52ZXJyIG1heSBub3QgYmUgaWRlYWwuCiAgICAgXGV4cGFuZGFmdGVyXGNoZWNrZW52XGNzbmFtZSMxXGVuZGNzbmFtZQogICAgIFxjc25hbWUgRSMxXGVuZGNzbmFtZQogICAgIFxlbmRncm91cApAQCAtNTUxLDg1ICs1NzgsNiBAQAogXG5ld2hlbHBcRU1zaW1wbGV7UHJlc3MgUkVUVVJOIHRvIGNvbnRpbnVlLn0KIAogCi0lJSBTaW1wbGUgc2luZ2xlLWNoYXJhY3RlciBAIGNvbW1hbmRzCi0KLSUgQEAgcHJpbnRzIGFuIEAKLSUgS2x1ZGdlIHRoaXMgdW50aWwgdGhlIGZvbnRzIGFyZSByaWdodCAoZ3JyKS4KLVxkZWZcQHt7XHR0XGNoYXI2NH19Ci0KLSUgVGhpcyBpcyB0dXJuZWQgb2ZmIGJlY2F1c2UgaXQgd2FzIG5ldmVyIGRvY3VtZW50ZWQKLSUgYW5kIHlvdSBjYW4gdXNlIEB3ey4uLn0gYXJvdW5kIGEgcXVvdGUgdG8gc3VwcHJlc3MgbGlnYXR1cmVzLgotJSUgRGVmaW5lIEBgIGFuZCBAJyB0byBiZSB0aGUgc2FtZSBhcyBgIGFuZCAnCi0lJSBidXQgc3VwcHJlc3NpbmcgbGlnYXR1cmVzLgotJVxkZWZcYHt7YH19Ci0lXGRlZlwne3snfX0KLQotJSBVc2VkIHRvIGdlbmVyYXRlIHF1b3RlZCBicmFjZXMuCi1cZGVmXG15bGJyYWNlIHt7XHR0XGNoYXIxMjN9fQotXGRlZlxteXJicmFjZSB7e1x0dFxjaGFyMTI1fX0KLVxsZXRcez1cbXlsYnJhY2UKLVxsZXRcfT1cbXlyYnJhY2UKLVxiZWdpbmdyb3VwCi0gICUgRGVmaW5pdGlvbnMgdG8gcHJvZHVjZSBceyBhbmQgXH0gY29tbWFuZHMgZm9yIGluZGljZXMsCi0gICUgYW5kIEB7IGFuZCBAfSBmb3IgdGhlIGF1eC90b2MgZmlsZXMuCi0gIFxjYXRjb2RlYFx7ID0gXG90aGVyIFxjYXRjb2RlYFx9ID0gXG90aGVyCi0gIFxjYXRjb2RlYFxbID0gMSBcY2F0Y29kZWBcXSA9IDIKLSAgXGNhdGNvZGVgXCEgPSAwIFxjYXRjb2RlYFxcID0gXG90aGVyCi0gICFnZGVmIWxicmFjZWNtZFtce10lCi0gICFnZGVmIXJicmFjZWNtZFtcfV0lCi0gICFnZGVmIWxicmFjZWF0Y21kW0B7XSUKLSAgIWdkZWYhcmJyYWNlYXRjbWRbQH1dJQotIWVuZGdyb3VwCi0KLSUgQGNvbW1he30gdG8gYXZvaWQgLCBwYXJzaW5nIHByb2JsZW1zLgotXGxldFxjb21tYSA9ICwKLQotJSBBY2NlbnRzOiBALCBAZG90YWNjZW50IEByaW5nYWNjZW50IEB1YmFyYWNjZW50IEB1ZG90YWNjZW50Ci0lIE90aGVycyBhcmUgZGVmaW5lZCBieSBwbGFpbiBUZVg6IEBgIEAnIEAiIEBeIEB+IEA9IEB1IEB2IEBILgotXGxldFwsID0gXGMKLVxsZXRcZG90YWNjZW50ID0gXC4KLVxkZWZccmluZ2FjY2VudCMxe3tcYWNjZW50MjMgIzF9fQotXGxldFx0aWVhY2NlbnQgPSBcdAotXGxldFx1YmFyYWNjZW50ID0gXGIKLVxsZXRcdWRvdGFjY2VudCA9IFxkCi0KLSUgT3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXJzOiBAcXVlc3Rpb25kb3duIEBleGNsYW1kb3duIEBvcmRmIEBvcmRtCi0lIFBsYWluIFRlWCBkZWZpbmVzOiBAQUEgQEFFIEBPIEBPRSBATCAocGx1cyBsb3dlcmNhc2UgdmVyc2lvbnMpIEBzcy4KLVxkZWZccXVlc3Rpb25kb3duez9gfQotXGRlZlxleGNsYW1kb3dueyFgfQotXGRlZlxvcmRme1xsZWF2ZXZtb2RlXHJhaXNlMWV4XGhib3h7XHNlbGVjdGZvbnRzXGxsbHNpemUgXHVuZGVyYmFye2F9fX0KLVxkZWZcb3JkbXtcbGVhdmV2bW9kZVxyYWlzZTFleFxoYm94e1xzZWxlY3Rmb250c1xsbGxzaXplIFx1bmRlcmJhcntvfX19Ci0KLSUgRG90bGVzcyBpIGFuZCBkb3RsZXNzIGosIHVzZWQgZm9yIGFjY2VudHMuCi1cZGVmXGltYWNyb3tpfQotXGRlZlxqbWFjcm97an0KLVxkZWZcZG90bGVzcyMxeyUKLSAgXGRlZlx0ZW1weyMxfSUKLSAgXGlmeFx0ZW1wXGltYWNybyBccHRleGkKLSAgXGVsc2VcaWZ4XHRlbXBcam1hY3JvIFxqCi0gIFxlbHNlIFxlcnJtZXNzYWdle0Bkb3RsZXNzIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCBpIG9yIGp9JQotICBcZmlcZmkKLX0KLQotJSBUaGUgXFRlWHt9IGxvZ28sIGFzIGluIHBsYWluLCBidXQgcmVzZXR0aW5nIHRoZSBzcGFjaW5nIHNvIHRoYXQgYQotJSBwZXJpb2QgZm9sbG93aW5nIGNvdW50cyBhcyBlbmRpbmcgYSBzZW50ZW5jZS4gIChJZGVhIGZvdW5kIGluIGxhdGV4LikKLSUKLVxlZGVmXFRlWHtcVGVYIFxzcGFjZWZhY3Rvcj0xMDAwIH0KLQotJSBATGFUZVh7fSBsb2dvLiAgTm90IHF1aXRlIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIGRlZmluaXRpb24gaW4KLSUgbGF0ZXgubHR4LCBzaW5jZSB3ZSB1c2UgYSBkaWZmZXJlbnQgZm9udCBmb3IgdGhlIHJhaXNlZCBBOyBpdCdzIG1vc3QKLSUgY29udmVuaWVudCBmb3IgdXMgdG8gdXNlIGFuIGV4cGxpY2l0bHkgc21hbGxlciBmb250LCByYXRoZXIgdGhhbiB1c2luZwotJSB0aGUgXHNjcmlwdHN0eWxlIGZvbnQgKHNpbmNlIHdlIGRvbid0IHJlc2V0IFxzY3JpcHRzdHlsZSBhbmQKLSUgXHNjcmlwdHNjcmlwdHN0eWxlKS4KLSUKLVxkZWZcTGFUZVh7JQotICBMXGtlcm4tLjM2ZW0KLSAge1xzZXRib3gwPVxoYm94e1R9JQotICAgXHZib3ggdG8gXGh0MHtcaGJveHtcc2VsZWN0Zm9udHNcbGxsc2l6ZSBBfVx2c3N9fSUKLSAgXGtlcm4tLjE1ZW0KLSAgXFRlWAotfQotCiAlIEJlIHN1cmUgd2UncmUgaW4gaG9yaXpvbnRhbCBtb2RlIHdoZW4gZG9pbmcgYSB0aWUsIHNpbmNlIHdlIG1ha2Ugc3BhY2UKICUgZXF1aXZhbGVudCB0byB0aGlzIGluIEBleGFtcGxlLWxpa2UgZW52aXJvbm1lbnRzLiBPdGhlcndpc2UsIGEgc3BhY2UKICUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgd2lsbCBzdGFydCB3aXRoIFxwZW5hbHR5IC0tIGFuZApAQCAtNjQ2LDcgKzU5NCw3IEBACiBcZGVmXDp7XHNwYWNlZmFjdG9yPTEwMDAgfQogCiAlIEAqIGZvcmNlcyBhIGxpbmUgYnJlYWsuCi1cZGVmXCp7XGhmaWxcYnJlYWtcaGJveHt9XGlnbm9yZXNwYWNlc30KK1xkZWZcKntcdW5za2lwXGhmaWxcYnJlYWtcaGJveHt9XGlnbm9yZXNwYWNlc30KIAogJSBALyBhbGxvd3MgYSBsaW5lIGJyZWFrLgogXGxldFwvPVxhbGxvd2JyZWFrCkBAIC02NjEsNyArNjA5LDcgQEAKIFxkZWZcP3s/XHNwYWNlZmFjdG9yPVxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3Jcc3BhY2V9CiAKICUgQGZyZW5jaHNwYWNpbmcgb258b2ZmICBzYXlzIHdoZXRoZXIgdG8gcHV0IGV4dHJhIHNwYWNlIGFmdGVyIHB1bmN0dWF0aW9uLgotJSAKKyUKIFxkZWZcb253b3Jke29ufQogXGRlZlxvZmZ3b3Jke29mZn0KICUKQEAgLTY3MSw3ICs2MTksNyBAQAogICBcZWxzZVxpZnhcdGVtcFxvZmZ3b3JkIFxwbGFpbm5vbmZyZW5jaHNwYWNpbmcKICAgXGVsc2UKICAgICBcZXJyaGVscCA9IFxFTXNpbXBsZQotICAgIFxlcnJtZXNzYWdle1Vua25vd24gQGZyZW5jaHNwYWNpbmcgb3B0aW9uIGBcdGVtcCcsIG11c3QgYmUgb24vb2ZmfSUKKyAgICBcZXJybWVzc2FnZXtVbmtub3duIEBmcmVuY2hzcGFjaW5nIG9wdGlvbiBgXHRlbXAnLCBtdXN0IGJlIG9ufG9mZn0lCiAgIFxmaVxmaQogfQogCkBAIC03NTMsMTUgKzcwMSw2IEBACiAKIFxuZXdkaW1lblxtaWwgIFxtaWw9MC4wMDFpbgogCi0lIE9sZCBkZWZpbml0aW9uLS1kaWRuJ3Qgd29yay4KLSVccGFyc2VhcmdkZWZcbmVlZHtccGFyICUKLSUlIFRoaXMgbWV0aG9kIHRyaWVzIHRvIG1ha2UgVGVYIGJyZWFrIHRoZSBwYWdlIG5hdHVyYWxseQotJSUgaWYgdGhlIGRlcHRoIG9mIHRoZSBib3ggZG9lcyBub3QgZml0LgotJXtcYmFzZWxpbmVza2lwPTBwdCUKLSVcdnRvcCB0byAjMVxtaWx7XHZmaWx9XGtlcm4gLSMxXG1pbFxub2JyZWFrCi0lXHByZXZkZXB0aD0tMTAwMHB0Ci0lfX0KLQogXHBhcnNlYXJnZGVmXG5lZWR7JQogICAlIEVuc3VyZSB2ZXJ0aWNhbCBtb2RlLCBzbyB3ZSBkb24ndCBtYWtlIGEgYmlnIGJveCBpbiB0aGUgbWlkZGxlIG9mIGEKICAgJSBwYXJhZ3JhcGguCkBAIC04MjUsNyArNzY0LDcgQEAKIAogJSBAaW5tYXJnaW57V0hJQ0h9e1RFWFR9IHB1dHMgVEVYVCBpbiB0aGUgV0hJQ0ggbWFyZ2luIG5leHQgdG8gdGhlIGN1cnJlbnQKICUgcGFyYWdyYXBoLiAgRm9yIG1vcmUgZ2VuZXJhbCBwdXJwb3NlcywgdXNlIHRoZSBcbWFyZ2luIGluc2VydGlvbgotJSBjbGFzcy4gIFdISUNIIGlzIGBsJyBvciBgcicuCislIGNsYXNzLiAgV0hJQ0ggaXMgYGwnIG9yIGByJy4gIE5vdCBkb2N1bWVudGVkLCB3cml0dGVuIGZvciBnYXdrIG1hbnVhbC4KICUKIFxuZXdza2lwXGlubWFyZ2luc3BhY2luZyBcaW5tYXJnaW5zcGFjaW5nPTFjbQogXGRlZlxzdHJ1dGRlcHRoe1xkcFxzdHJ1dGJveH0KQEAgLTg3MiwxNSArODExLDUxIEBACiAgIFx0ZW1wCiB9CiAKLSUgQGluY2x1ZGUgZmlsZSAgICBpbnNlcnQgdGV4dCBvZiB0aGF0IGZpbGUgYXMgaW5wdXQuCislIEB8IGluc2VydHMgYSBjaGFuZ2ViYXIgdG8gdGhlIGxlZnQgb2YgdGhlIGN1cnJlbnQgbGluZS4gIEl0IHNob3VsZAorJSBzdXJyb3VuZCBhbnkgY2hhbmdlZCB0ZXh0LiAgVGhpcyBhcHByb2FjaCBkb2VzICpub3QqIHdvcmsgaWYgdGhlCislIGNoYW5nZSBzcGFucyBtb3JlIHRoYW4gdHdvIGxpbmVzIG9mIG91dHB1dC4gIFRvIGhhbmRsZSB0aGF0LCB3ZSB3b3VsZAorJSBoYXZlIGFkb3B0IGEgbXVjaCBtb3JlIGRpZmZpY3VsdCBhcHByb2FjaCAocHV0dGluZyBtYXJrcyBpbnRvIHRoZSBtYWluCislIHZlcnRpY2FsIGxpc3QgZm9yIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBlYWNoIGNoYW5nZSkuICBUaGlzIGNvbW1hbmQKKyUgaXMgbm90IGRvY3VtZW50ZWQsIG5vdCBzdXBwb3J0ZWQsIGFuZCBkb2Vzbid0IHdvcmsuCislCitcZGVmXHx7JQorICAlIFx2YWRqdXN0IGNhbiBvbmx5IGJlIHVzZWQgaW4gaG9yaXpvbnRhbCBtb2RlLgorICBcbGVhdmV2bW9kZQorICAlCisgICUgQXBwZW5kIHRoaXMgdmVydGljYWwgbW9kZSBtYXRlcmlhbCBhZnRlciB0aGUgY3VycmVudCBsaW5lIGluIHRoZSBvdXRwdXQuCisgIFx2YWRqdXN0eyUKKyAgICAlIFdlIHdhbnQgdG8gaW5zZXJ0IGEgcnVsZSB3aXRoIHRoZSBoZWlnaHQgYW5kIGRlcHRoIG9mIHRoZSBjdXJyZW50CisgICAgJSBsZWFkaW5nOyB0aGF0IGlzIGV4YWN0bHkgd2hhdCBcc3RydXRib3ggaXMgc3VwcG9zZWQgdG8gcmVjb3JkLgorICAgIFx2c2tpcC1cYmFzZWxpbmVza2lwCisgICAgJQorICAgICUgXHZhZGp1c3QtaXRlbXMgYXJlIGluc2VydGVkIGF0IHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIHR5cGUuICBTbworICAgICUgdGhlIFxsbGFwIGhlcmUgbW92ZXMgb3V0IGludG8gdGhlIGxlZnQtaGFuZCBtYXJnaW4uCisgICAgXGxsYXB7JQorICAgICAgJQorICAgICAgJSBGb3IgYSB0aGlja2VyIG9yIHRoaW5uZXIgYmFyLCBjaGFuZ2UgdGhlIGAxcHQnLgorICAgICAgXHZydWxlIGhlaWdodFxiYXNlbGluZXNraXAgd2lkdGgxcHQKKyAgICAgICUKKyAgICAgICUgVGhpcyBpcyB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgYmFyIGFuZCB0aGUgdGV4dC4KKyAgICAgIFxoc2tpcCAxMnB0CisgICAgfSUKKyAgfSUKK30KKworJSBAaW5jbHVkZSBGSUxFIC0tIFxpbnB1dCB0ZXh0IG9mIEZJTEUuCiAlCiBcZGVmXGluY2x1ZGV7XHBhcnNlYXJndXNpbmdcZmlsZW5hbWVjYXRjb2Rlc1xpbmNsdWRlenp6fQogXGRlZlxpbmNsdWRlenp6IzF7JQogICBccHVzaHRoaXNmaWxlc3RhY2sKICAgXGRlZlx0aGlzZmlsZXsjMX0lCiAgIHslCi0gICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKLSAgICBcZGVmXHRlbXB7XGlucHV0ICMxIH0lCisgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUgICUgd2Ugd2FudCB0byBleHBhbmQgYW55IEB2YWx1ZSBpbiBGSUxFLgorICAgIFx0dXJub2ZmYWN0aXZlICAgICAgICAlIGFuZCBhbGxvdyBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlIGV4cGFuc2lvbgorICAgIFxpbmRleG5vZm9udHMgICAgICAgICAlIEFsbG93IGBAQCcgYW5kIG90aGVyIHdlaXJkIHRoaW5ncyBpbiBmaWxlIG5hbWVzLgorICAgIFx3bG9ne3RleGluZm8udGV4OiBkb2luZyBAaW5jbHVkZSBvZiAjMV5eSn0lCisgICAgXGVkZWZcdGVtcHtcbm9leHBhbmRcaW5wdXQgIzEgfSUKKyAgICAlCisgICAgJSBUaGlzIHRyaWNrZXJ5IGlzIHRvIHJlYWQgRklMRSBvdXRzaWRlIG9mIGEgZ3JvdXAsIGluIGNhc2UgaXQgbWFrZXMKKyAgICAlIGRlZmluaXRpb25zLCBldGMuCiAgICAgXGV4cGFuZGFmdGVyCiAgIH1cdGVtcAogICBccG9wdGhpc2ZpbGVzdGFjawpAQCAtODk1LDYgKzg3MCw4IEBACiAgIFxjYXRjb2RlYD49XG90aGVyCiAgIFxjYXRjb2RlYCs9XG90aGVyCiAgIFxjYXRjb2RlYC09XG90aGVyCisgIFxjYXRjb2RlYFxgPVxvdGhlcgorICBcY2F0Y29kZWBcJz1cb3RoZXIKIH0KIAogXGRlZlxwdXNodGhpc2ZpbGVzdGFja3slCkBAIC05MTAsNyArODg3LDcgQEAKIFxkZWZccG9wdGhpc2ZpbGVzdGFja3tcZXJydGhpc2ZpbGVzdGFja2VtcHR5fQogXGRlZlxlcnJ0aGlzZmlsZXN0YWNrZW1wdHl7XGVycm1lc3NhZ2V7SW50ZXJuYWwgZXJyb3I6CiAgIHRoZSBzdGFjayBvZiBmaWxlbmFtZXMgaXMgZW1wdHkufX0KLQorJQogXGRlZlx0aGlzZmlsZXt9CiAKICUgQGNlbnRlciBsaW5lCkBAIC05MTgsMzYgKzg5NSw0NiBAQAogJQogXHBhcnNlYXJnZGVmXGNlbnRlcnslCiAgIFxpZmhtb2RlCi0gICAgXGxldFxuZXh0XGNlbnRlckgKKyAgICBcbGV0XGNlbnRlcnN1YlxjZW50ZXJICiAgIFxlbHNlCi0gICAgXGxldFxuZXh0XGNlbnRlclYKKyAgICBcbGV0XGNlbnRlcnN1YlxjZW50ZXJWCiAgIFxmaQotICBcbmV4dHtcaGZpbCBcaWdub3Jlc3BhY2VzIzFcdW5za2lwIFxoZmlsfSUKKyAgXGNlbnRlcnN1YntcaGZpbCBcaWdub3Jlc3BhY2VzIzFcdW5za2lwIFxoZmlsfSUKKyAgXGxldFxjZW50ZXJzdWJccmVsYXggJSBkb24ndCBsZXQgdGhlIGRlZmluaXRpb24gcGVyc2lzdCwganVzdCBpbiBjYXNlCiB9Ci1cZGVmXGNlbnRlckgjMXslCi0gIHslCi0gICAgXGhmaWxcYnJlYWsKLSAgICBcYWR2YW5jZVxoc2l6ZSBieSAtXGxlZnRza2lwCi0gICAgXGFkdmFuY2VcaHNpemUgYnkgLVxyaWdodHNraXAKLSAgICBcbGluZXsjMX0lCi0gICAgXGJyZWFrCi0gIH0lCitcZGVmXGNlbnRlckgjMXt7JQorICBcaGZpbFxicmVhaworICBcYWR2YW5jZVxoc2l6ZSBieSAtXGxlZnRza2lwCisgIFxhZHZhbmNlXGhzaXplIGJ5IC1ccmlnaHRza2lwCisgIFxsaW5leyMxfSUKKyAgXGJyZWFrCit9fQorJQorXG5ld2NvdW50XGNlbnRlcnBlbmFsdHkKK1xkZWZcY2VudGVyViMxeyUKKyAgJSBUaGUgaWRlYSBoZXJlIGlzIHRoZSBzYW1lIGFzIGluIFxzdGFydGRlZnVuLCBcY2FydG91Y2hlLCBldGMuOiBpZgorICAlIEBjZW50ZXIgaXMgdGhlIGZpcnN0IHRoaW5nIGFmdGVyIGEgc2VjdGlvbiBoZWFkaW5nLCB3ZSBuZWVkIHRvIHdpcGUKKyAgJSBvdXQgdGhlIG5lZ2F0aXZlIHBhcnNraXAgaW5zZXJ0ZWQgYnkgXHNlY3Rpb25oZWFkaW5nLCBidXQgc3RpbGwKKyAgJSBwcmV2ZW50IGEgcGFnZSBicmVhayBoZXJlLgorICBcY2VudGVycGVuYWx0eSA9IFxsYXN0cGVuYWx0eQorICBcaWZudW1cY2VudGVycGVuYWx0eT4xMDAwMCBcdnNraXBccGFyc2tpcCBcZmkKKyAgXGlmbnVtXGNlbnRlcnBlbmFsdHk+OTk5OSBccGVuYWx0eVxjZW50ZXJwZW5hbHR5IFxmaQorICBcbGluZXtca2VyblxsZWZ0c2tpcCAjMVxrZXJuXHJpZ2h0c2tpcH0lCiB9Ci1cZGVmXGNlbnRlclYjMXtcbGluZXtca2VyblxsZWZ0c2tpcCAjMVxrZXJuXHJpZ2h0c2tpcH19CiAKICUgQHNwIG4gICBvdXRwdXRzIG4gbGluZXMgb2YgdmVydGljYWwgc3BhY2UKLQorJQogXHBhcnNlYXJnZGVmXHNwe1x2c2tpcCAjMVxiYXNlbGluZXNraXB9CiAKICUgQGNvbW1lbnQgLi4ubGluZSB3aGljaCBpcyBpZ25vcmVkLi4uCiAlIEBjIGlzIHRoZSBzYW1lIGFzIEBjb21tZW50CiAlIEBpZ25vcmUgLi4uIEBlbmQgaWdub3JlICBpcyBhbm90aGVyIHdheSB0byB3cml0ZSBhIGNvbW1lbnQKLQorJQogXGRlZlxjb21tZW50e1xiZWdpbmdyb3VwIFxjYXRjb2RlYFxeXk09XG90aGVyJQogXGNhdGNvZGVgXEA9XG90aGVyIFxjYXRjb2RlYFx7PVxvdGhlciBcY2F0Y29kZWBcfT1cb3RoZXIlCiBcY29tbWVudHh4eH0KIHtcY2F0Y29kZWBcXl5NPVxvdGhlciBcZ2RlZlxjb21tZW50eHh4IzFeXk17XGVuZGdyb3VwfX0KLQorJQogXGxldFxjPVxjb21tZW50CiAKICUgQHBhcmFncmFwaGluZGVudCBOQ0hBUlMKQEAgLTEwNDAsODYgKzEwMjcsNiBAQAogfQogCiAKLSUgQGFzaXMganVzdCB5aWVsZHMgaXRzIGFyZ3VtZW50LiAgVXNlZCB3aXRoIEB0YWJsZSwgZm9yIGV4YW1wbGUuCi0lCi1cZGVmXGFzaXMjMXsjMX0KLQotJSBAbWF0aCBvdXRwdXRzIGl0cyBhcmd1bWVudCBpbiBtYXRoIG1vZGUuCi0lCi0lIE9uZSBjb21wbGljYXRpb246IF8gdXN1YWxseSBtZWFucyBzdWJzY3JpcHRzLCBidXQgaXQgY291bGQgYWxzbyBtZWFuCi0lIGFuIGFjdHVhbCBfIGNoYXJhY3RlciwgYXMgaW4gQG1hdGh7QHZhcntzb21lX3ZhcmlhYmxlfSArIDF9LiAgU28gbWFrZQotJSBfIGFjdGl2ZSwgYW5kIGRpc3Rpbmd1aXNoIGJ5IHNlZWluZyBpZiB0aGUgY3VycmVudCBmYW1pbHkgaXMgXHNsZmFtLAotJSB3aGljaCBpcyB3aGF0IEB2YXIgdXNlcy4KLXsKLSAgXGNhdGNvZGVcdW5kZXJDaGFyID0gXGFjdGl2ZQotICBcZ2RlZlxtYXRodW5kZXJzY29yZXslCi0gICAgXGNhdGNvZGVcdW5kZXJDaGFyPVxhY3RpdmUKLSAgICBcZGVmX3tcaWZudW1cZmFtPVxzbGZhbSBcX1xlbHNlXHNiXGZpfSUKLSAgfQotfQotJSBBbm90aGVyIGNvbXBsaWNhdGlvbjogd2Ugd2FudCBcXCAoYW5kIEBcKSB0byBvdXRwdXQgYSBcIGNoYXJhY3Rlci4KLSUgRllJLCBwbGFpbi50ZXggdXNlcyBcXCBhcyBhIHRlbXBvcmFyeSBjb250cm9sIHNlcXVlbmNlICh3aHk/KSwgYnV0Ci0lIHRoaXMgaXMgbm90IGFkdmVydGlzZWQgYW5kIHdlIGRvbid0IGNhcmUuICBUZXhpbmZvIGRvZXMgbm90Ci0lIG90aGVyd2lzZSBkZWZpbmUgQFwuCi0lCi0lIFRoZSBcbWF0aGNoYXIgaXMgY2xhc3M9MD1vcmRpbmFyeSwgZmFtaWx5PTc9dHRmYW0sIHBvc2l0aW9uPTVDPVwuCi1cZGVmXG1hdGhiYWNrc2xhc2h7XGlmbnVtXGZhbT1cdHRmYW0gXG1hdGhjaGFyIjA3NUMgXGVsc2VcYmFja3NsYXNoIFxmaX0KLSUKLVxkZWZcbWF0aHslCi0gIFx0ZXgKLSAgXG1hdGh1bmRlcnNjb3JlCi0gIFxsZXRcXCA9IFxtYXRoYmFja3NsYXNoCi0gIFxtYXRoYWN0aXZlCi0gICRcZmluaXNobWF0aAotfQotXGRlZlxmaW5pc2htYXRoIzF7IzEkXGVuZGdyb3VwfSAgJSBDbG9zZSB0aGUgZ3JvdXAgb3BlbmVkIGJ5IFx0ZXguCi0KLSUgU29tZSBhY3RpdmUgY2hhcmFjdGVycyAoc3VjaCBhcyA8KSBhcmUgc3BhY2VkIGRpZmZlcmVudGx5IGluIG1hdGguCi0lIFdlIGhhdmUgdG8gcmVzZXQgdGhlaXIgZGVmaW5pdGlvbnMgaW4gY2FzZSB0aGUgQG1hdGggd2FzIGFuIGFyZ3VtZW50Ci0lIHRvIGEgY29tbWFuZCB3aGljaCBzZXRzIHRoZSBjYXRjb2RlcyAoc3VjaCBhcyBAaXRlbSBvciBAc2VjdGlvbikuCi0lCi17Ci0gIFxjYXRjb2RlYF4gPSBcYWN0aXZlCi0gIFxjYXRjb2RlYDwgPSBcYWN0aXZlCi0gIFxjYXRjb2RlYD4gPSBcYWN0aXZlCi0gIFxjYXRjb2RlYCsgPSBcYWN0aXZlCi0gIFxnZGVmXG1hdGhhY3RpdmV7JQotICAgIFxsZXReID0gXHB0ZXhoYXQKLSAgICBcbGV0PCA9IFxwdGV4bGVzcwotICAgIFxsZXQ+ID0gXHB0ZXhndHIKLSAgICBcbGV0KyA9IFxwdGV4cGx1cwotICB9Ci19Ci0KLSUgQGJ1bGxldCBhbmQgQG1pbnVzIG5lZWQgdGhlIHNhbWUgdHJlYXRtZW50IGFzIEBtYXRoLCBqdXN0IGFib3ZlLgotXGRlZlxidWxsZXR7JFxwdGV4YnVsbGV0JH0KLVxkZWZcbWludXN7JC0kfQotCi0lIEBkb3Rze30gb3V0cHV0cyBhbiBlbGxpcHNpcyB1c2luZyB0aGUgY3VycmVudCBmb250LgotJSBXZSBkbyAuNWVtIHBlciBwZXJpb2Qgc28gdGhhdCBpdCBoYXMgdGhlIHNhbWUgc3BhY2luZyBpbiBhIHR5cGV3cml0ZXIKLSUgZm9udCBhcyB0aHJlZSBhY3R1YWwgcGVyaW9kIGNoYXJhY3RlcnMuCi0lCi1cZGVmXGRvdHN7JQotICBcbGVhdmV2bW9kZQotICBcaGJveCB0byAxLjVlbXslCi0gICAgXGhza2lwIDBwdCBwbHVzIDAuMjVmaWwKLSAgICAuXGhmaWwuXGhmaWwuJQotICAgIFxoc2tpcCAwcHQgcGx1cyAwLjVmaWwKLSAgfSUKLX0KLQotJSBAZW5kZG90c3t9IGlzIGFuIGVuZC1vZi1zZW50ZW5jZSBlbGxpcHNpcy4KLSUKLVxkZWZcZW5kZG90c3slCi0gIFxkb3RzCi0gIFxzcGFjZWZhY3Rvcj1cZW5kb2ZzZW50ZW5jZXNwYWNlZmFjdG9yCi19Ci0KLSUgQGNvbW1he30gaXMgc28gY29tbWFzIGNhbiBiZSBpbnNlcnRlZCBpbnRvIHRleHQgd2l0aG91dCBtZXNzaW5nIHVwCi0lIFRleGluZm8ncyBwYXJzaW5nLgotJQotXGxldFxjb21tYSA9ICwKLQogJSBAcmVmaWxsIGlzIGEgbm8tb3AuCiBcbGV0XHJlZmlsbD1ccmVsYXgKIApAQCAtMTE4NCw5ICsxMDkxLDggQEAKIFxuZXdpZlxpZnBkZm1ha2VwYWdlZGVzdAogCiAlIHdoZW4gcGRmdGV4IGlzIHJ1biBpbiBkdmkgbW9kZSwgXHBkZm91dHB1dCBpcyBkZWZpbmVkIChzbyBccGRmb3V0cHV0PTEKLSUgY2FuIGJlIHNldCkuICBTbyB3ZSB0ZXN0IGZvciBccmVsYXggYW5kIDAgYXMgd2VsbCBhcyBcdW5kZWZpbmVkLAotJSBib3Jyb3dlZCBmcm9tIGlmcGRmLnN0eS4KLVxpZnhccGRmb3V0cHV0XHVuZGVmaW5lZAorJSBjYW4gYmUgc2V0KS4gIFNvIHdlIHRlc3QgZm9yIFxyZWxheCBhbmQgMCBhcyB3ZWxsIGFzIGJlaW5nIHVuZGVmaW5lZC4KK1xpZnhccGRmb3V0cHV0XHRoaXNpc3VuZGVmaW5lZAogXGVsc2UKICAgXGlmeFxwZGZvdXRwdXRccmVsYXgKICAgXGVsc2UKQEAgLTExOTcsOTkgKzExMDMsMTU2IEBACiAgIFxmaQogXGZpCiAKLSUgUERGIHVzZXMgUG9zdFNjcmlwdCBzdHJpbmcgY29uc3RhbnRzIGZvciB0aGUgbmFtZXMgb2YgeHJlZiB0YXJnZXRzLCB0bworJSBQREYgdXNlcyBQb3N0U2NyaXB0IHN0cmluZyBjb25zdGFudHMgZm9yIHRoZSBuYW1lcyBvZiB4cmVmIHRhcmdldHMsCiAlIGZvciBkaXNwbGF5IGluIHRoZSBvdXRsaW5lcywgYW5kIGluIG90aGVyIHBsYWNlcy4gIFRodXMsIHdlIGhhdmUgdG8KICUgZG91YmxlIGFueSBiYWNrc2xhc2hlcy4gIE90aGVyd2lzZSwgYSBuYW1lIGxpa2UgIlxub2RlIiB3aWxsIGJlCiAlIGludGVycHJldGVkIGFzIGEgbmV3bGluZSAoXG4pLCBmb2xsb3dlZCBieSBvLCBkLCBlLiAgTm90IGdvb2QuCi0lIGh0dHA6Ly93d3cubnRnLm5sL3BpcGVybWFpbC9udGctcGRmdGV4LzIwMDQtSnVseS8wMDA2NTQuaHRtbAotJSAoYW5kIHJlbGF0ZWQgbWVzc2FnZXMsIHRoZSBmaW5hbCBvdXRjb21lIGlzIHRoYXQgaXQgaXMgdXAgdG8gdGhlIFRlWAotJSB1c2VyIHRvIGRvdWJsZSB0aGUgYmFja3NsYXNoZXMgYW5kIG90aGVyd2lzZSBtYWtlIHRoZSBzdHJpbmcgdmFsaWQsIHNvCi0lIHRoYXQncyB3ZSBkbykuCi0KLSUgZG91YmxlIGFjdGl2ZSBiYWNrc2xhc2hlcy4KICUgCi17XGNhdGNvZGVgXEA9MCBcY2F0Y29kZWBcXD1cYWN0aXZlCi0gQGdkZWZAYWN0aXZlYmFja3NsYXNoe0BjYXRjb2RlYEBcPUBhY3RpdmUgQG90aGVyYmFja3NsYXNofQotIEBnZGVmQGFjdGl2ZWJhY2tzbGFzaGRvdWJsZXslCi0gICBAY2F0Y29kZUBiYWNrQ2hhcj1AYWN0aXZlCi0gICBAbGV0XD1AZG91YmxlYmFja3NsYXNofQorJSBTZWUgaHR0cDovL3d3dy5udGcubmwvcGlwZXJtYWlsL250Zy1wZGZ0ZXgvMjAwNC1KdWx5LzAwMDY1NC5odG1sIGFuZAorJSByZWxhdGVkIG1lc3NhZ2VzLiAgVGhlIGZpbmFsIG91dGNvbWUgaXMgdGhhdCBpdCBpcyB1cCB0byB0aGUgVGVYIHVzZXIKKyUgdG8gZG91YmxlIHRoZSBiYWNrc2xhc2hlcyBhbmQgb3RoZXJ3aXNlIG1ha2UgdGhlIHN0cmluZyB2YWxpZCwgc28KKyUgdGhhdCdzIHdoYXQgd2UgZG8uICBwZGZ0ZXggMS4zMC4wIChjYS4yMDA1KSBpbnRyb2R1Y2VkIGEgcHJpbWl0aXZlIHRvCislIGRvIHRoaXMgcmVsaWFibHksIHNvIHdlIHVzZSBpdC4KKworJSAjMSBpcyBhIGNvbnRyb2wgc2VxdWVuY2UgaW4gd2hpY2ggdG8gZG8gdGhlIHJlcGxhY2VtZW50cywKKyUgd2hpY2ggd2UgXHhkZWYuCitcZGVmXHR4aWVzY2FwZXBkZiMxeyUKKyAgXGlmeFxwZGZlc2NhcGVzdHJpbmdcdGhpc2lzdW5kZWZpbmVkCisgICAgJSBObyBwcmltaXRpdmUgYXZhaWxhYmxlOyBzaG91bGQgd2UgZ2l2ZSBhIHdhcm5pbmcgb3IgbG9nPworICAgICUgTWFueSB0aW1lcyBpdCB3b24ndCBtYXR0ZXIuCisgIFxlbHNlCisgICAgJSBUaGUgZXhwYW5kYWJsZSBccGRmZXNjYXBlc3RyaW5nIHByaW1pdGl2ZSBlc2NhcGVzIHBhcmVudGhlc2VzLAorICAgICUgYmFja3NsYXNoZXMsIGFuZCBvdGhlciBzcGVjaWFsIGNoYXJzLgorICAgIFx4ZGVmIzF7XHBkZmVzY2FwZXN0cmluZ3sjMX19JQorICBcZmkKIH0KIAotJSBUbyBoYW5kbGUgcGFyZW5zLCB3ZSBtdXN0IGFkb3B0IGEgZGlmZmVyZW50IGFwcHJvYWNoLCBzaW5jZSBwYXJlbnMgYXJlCi0lIG5vdCBhY3RpdmUgY2hhcmFjdGVycy4gIGh5cGVycmVmLmR0eCAod2hpY2ggaGFzIHRoZSBzYW1lIHByb2JsZW0gYXMKLSUgdXMpIGhhbmRsZXMgaXQgd2l0aCB0aGlzIGFtYXppbmcgbWFjcm8gdG8gcmVwbGFjZSB0b2tlbnMuICBJJ3ZlCi0lIHRpbmtlcmVkIHdpdGggaXQgYSBsaXR0bGUgZm9yIHRleGluZm8sIGJ1dCBpdCdzIGRlZmluaXRlbHkgZnJvbSB0aGVyZS4KLSUgCi0lICMxIGlzIHRoZSB0b2tlbnMgdG8gcmVwbGFjZS4KLSUgIzIgaXMgdGhlIHJlcGxhY2VtZW50LgotJSAjMyBpcyB0aGUgY29udHJvbCBzZXF1ZW5jZSB3aXRoIHRoZSBzdHJpbmcuCi0lIAotXGRlZlxIeVBzZFN1YnN0IzEjMiMzeyUKLSAgXGRlZlxIeVBzZFJlcGxhY2UjIzEjMSMjMlxFTkR7JQotICAgICMjMSUKLSAgICBcaWZ4XFwjIzJcXCUKLSAgICBcZWxzZQotICAgICAgIzIlCi0gICAgICBcSHlSZXR1cm5BZnRlckZpeyUKLSAgICAgICAgXEh5UHNkUmVwbGFjZSMjMlxFTkQKLSAgICAgIH0lCi0gICAgXGZpCi0gIH0lCi0gIFx4ZGVmIzN7XGV4cGFuZGFmdGVyXEh5UHNkUmVwbGFjZSMzIzFcRU5EfSUKLX0KLVxsb25nXGRlZlxIeVJldHVybkFmdGVyRmkjMVxmaXtcZmkjMX0KLQotJSAjMSBpcyBhIGNvbnRyb2wgc2VxdWVuY2UgaW4gd2hpY2ggdG8gZG8gdGhlIHJlcGxhY2VtZW50cy4KLVxkZWZcYmFja3NsYXNocGFyZW5zIzF7JQotICBceGRlZiMxeyMxfSUgcmVkZWZpbmUgaXQgYXMgaXRzIGV4cGFuc2lvbjsgdGhlIGRlZmluaXRpb24gaXMgc2ltcGx5Ci0gICAgICAgICAgICAgJSBcbGFzdG5vZGUgd2hlbiBjYWxsZWQgZnJvbSBcc2V0cmVmIC0+IFxwZGZta2Rlc3QuCi0gIFxIeVBzZFN1YnN0eyh9e1xiYWNrc2xhc2hscGFyZW59eyMxfSUKLSAgXEh5UHNkU3Vic3R7KX17XGJhY2tzbGFzaHJwYXJlbn17IzF9JQotfQotCi17XGNhdGNvZGVcZXhjbGFtQ2hhciA9IDAgXGNhdGNvZGVcYmFja0NoYXIgPSBcb3RoZXIKLSAhZ2RlZiFiYWNrc2xhc2hscGFyZW57XCh9JQotICFnZGVmIWJhY2tzbGFzaHJwYXJlbntcKX0lCi19CitcbmV3aGVscFxub3BkZmltYWdlaGVscHtUZXhpbmZvIHN1cHBvcnRzIC5wbmcsIC5qcGcsIC5qcGVnLCBhbmQgLnBkZiBpbWFnZXMKK3dpdGggUERGIG91dHB1dCwgYW5kIG5vbmUgb2YgdGhvc2UgZm9ybWF0cyBjb3VsZCBiZSBmb3VuZC4gICguZXBzIGNhbm5vdAorYmUgc3VwcG9ydGVkIGR1ZSB0byB0aGUgZGVzaWduIG9mIHRoZSBQREYgZm9ybWF0OyB1c2UgcmVndWxhciBUZVggKERWSQorb3V0cHV0KSBmb3IgdGhhdC4pfQogCiBcaWZwZGYKLSAgXGlucHV0IHBkZmNvbG9yCi0gIFxwZGZjYXRhbG9ney9QYWdlTW9kZSAvVXNlT3V0bGluZXN9JQorICAlCisgICUgQ29sb3IgbWFuaXB1bGF0aW9uIG1hY3JvcyBiYXNlZCBvbiBwZGZjb2xvci50ZXgsCisgICUgZXhjZXB0IHVzaW5nIHJnYiBpbnN0ZWFkIG9mIGNteWs7IHRoZSBsYXR0ZXIgaXMgc2FpZCB0byByZW5kZXIgYXMgYQorICAlIHZlcnkgZGFyayBncmF5IG9uLXNjcmVlbiBhbmQgYSB2ZXJ5IGRhcmsgaGFsZnRvbmUgaW4gcHJpbnQsIGluc3RlYWQKKyAgJSBvZiBhY3R1YWwgYmxhY2suCisgIFxkZWZccmdiRGFya1JlZHswLjUwIDAuMDkgMC4xMn0KKyAgXGRlZlxyZ2JCbGFja3swIDAgMH0KKyAgJQorICAlIGsgc2V0cyB0aGUgY29sb3IgZm9yIGZpbGxpbmcgKHVzdWFsIHRleHQsIGV0Yy4pOworICAlIEsgc2V0cyB0aGUgY29sb3IgZm9yIHN0cm9raW5nICh0aGluIHJ1bGVzLCBlLmcuLCBub3JtYWwgXydzKS4KKyAgXGRlZlxwZGZzZXRjb2xvciMxe1xwZGZsaXRlcmFseyMxIHJnICAjMSBSR319CisgICUKKyAgJSBTZXQgY29sb3IsIGFuZCBjcmVhdGUgYSBtYXJrIHdoaWNoIGRlZmluZXMgXHRoaXNjb2xvciBhY2NvcmRpbmdseSwKKyAgJSBzbyB0aGF0IFxtYWtlaGVhZGxpbmUga25vd3Mgd2hpY2ggY29sb3IgdG8gcmVzdG9yZS4KKyAgXGRlZlxzZXRjb2xvciMxeyUKKyAgICBceGRlZlxsYXN0Y29sb3JkZWZze1xnZGVmXG5vZXhwYW5kXHRoaXNjb2xvcnsjMX19JQorICAgIFxkb21hcmsKKyAgICBccGRmc2V0Y29sb3J7IzF9JQorICB9CisgICUKKyAgXGRlZlxtYWluY29sb3J7XHJnYkJsYWNrfQorICBccGRmc2V0Y29sb3J7XG1haW5jb2xvcn0KKyAgXGVkZWZcdGhpc2NvbG9ye1xtYWluY29sb3J9CisgIFxkZWZcbGFzdGNvbG9yZGVmc3t9CisgICUKKyAgXGRlZlxtYWtlZm9vdGxpbmV7JQorICAgIFxiYXNlbGluZXNraXAyNHB0CisgICAgXGxpbmV7XHBkZnNldGNvbG9ye1xtYWluY29sb3J9XHRoZVxmb290bGluZX0lCisgIH0KKyAgJQorICBcZGVmXG1ha2VoZWFkbGluZXslCisgICAgXHZib3ggdG8gMHB0eyUKKyAgICAgIFx2c2tpcC0yMi41cHQKKyAgICAgIFxsaW5leyUKKyAgICAgICAgXHZib3ggdG84LjVwdHt9JQorICAgICAgICAlIEV4dHJhY3QgXHRoaXNjb2xvciBkZWZpbml0aW9uIGZyb20gdGhlIG1hcmtzLgorICAgICAgICBcZ2V0Y29sb3JtYXJrcworICAgICAgICAlIFR5cGVzZXQgdGhlIGhlYWRsaW5lIHdpdGggXG1haW5jb2xvciwgdGhlbiByZXN0b3JlIHRoZSBjb2xvci4KKyAgICAgICAgXHBkZnNldGNvbG9ye1xtYWluY29sb3J9XHRoZVxoZWFkbGluZVxwZGZzZXRjb2xvcntcdGhpc2NvbG9yfSUKKyAgICAgIH0lCisgICAgICBcdnNzCisgICAgfSUKKyAgICBcbm9pbnRlcmxpbmVza2lwCisgIH0KKyAgJQorICAlCisgIFxwZGZjYXRhbG9ney9QYWdlTW9kZSAvVXNlT3V0bGluZXN9CisgICUKKyAgJSAjMSBpcyBpbWFnZSBuYW1lLCAjMiB3aWR0aCAobWlnaHQgYmUgZW1wdHkvd2hpdGVzcGFjZSksICMzIGhlaWdodCAoZGl0dG8pLgogICBcZGVmXGRvcGRmaW1hZ2UjMSMyIzN7JQotICAgIFxkZWZcaW1hZ2V3aWR0aHsjMn0lCi0gICAgXGRlZlxpbWFnZWhlaWdodHsjM30lCi0gICAgJSB3aXRob3V0IFxpbW1lZGlhdGUsIHBkZnRleCBzZWcgZmF1bHRzIHdoZW4gdGhlIHNhbWUgaW1hZ2UgaXMKKyAgICBcZGVmXHBkZmltYWdld2lkdGh7IzJ9XHNldGJveDAgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMyfSUKKyAgICBcZGVmXHBkZmltYWdlaGVpZ2h0eyMzfVxzZXRib3gyID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjM30lCisgICAgJQorICAgICUgcGRmdGV4IChhbmQgdGhlIFBERiBmb3JtYXQpIHN1cHBvcnQgLnBkZiwgLnBuZywgLmpwZyAoYW1vbmcKKyAgICAlIG90aGVycykuICBMZXQncyB0cnkgaW4gdGhhdCBvcmRlciwgUERGIGZpcnN0IHNpbmNlIGlmCisgICAgJSBzb21lb25lIGhhcyBhIHNjYWxhYmxlIGltYWdlLCBwcmVzdW1hYmx5IGJldHRlciB0byB1c2UgdGhhdCB0aGFuIGEKKyAgICAlIGJpdG1hcC4KKyAgICBcbGV0XHBkZmltZ2V4dD1cZW1wdHkKKyAgICBcYmVnaW5ncm91cAorICAgICAgXG9wZW5pbiAxICMxLnBkZiBcaWZlb2YgMQorICAgICAgICBcb3BlbmluIDEgIzEuUERGIFxpZmVvZiAxCisgICAgICAgICAgXG9wZW5pbiAxICMxLnBuZyBcaWZlb2YgMQorICAgICAgICAgICAgXG9wZW5pbiAxICMxLmpwZyBcaWZlb2YgMQorICAgICAgICAgICAgICBcb3BlbmluIDEgIzEuanBlZyBcaWZlb2YgMQorICAgICAgICAgICAgICAgIFxvcGVuaW4gMSAjMS5KUEcgXGlmZW9mIDEKKyAgICAgICAgICAgICAgICAgIFxlcnJoZWxwID0gXG5vcGRmaW1hZ2VoZWxwCisgICAgICAgICAgICAgICAgICBcZXJybWVzc2FnZXtDb3VsZCBub3QgZmluZCBpbWFnZSBmaWxlICMxIGZvciBwZGZ9JQorICAgICAgICAgICAgICAgIFxlbHNlIFxnZGVmXHBkZmltZ2V4dHtKUEd9JQorICAgICAgICAgICAgICAgIFxmaQorICAgICAgICAgICAgICBcZWxzZSBcZ2RlZlxwZGZpbWdleHR7anBlZ30lCisgICAgICAgICAgICAgIFxmaQorICAgICAgICAgICAgXGVsc2UgXGdkZWZccGRmaW1nZXh0e2pwZ30lCisgICAgICAgICAgICBcZmkKKyAgICAgICAgICBcZWxzZSBcZ2RlZlxwZGZpbWdleHR7cG5nfSUKKyAgICAgICAgICBcZmkKKyAgICAgICAgXGVsc2UgXGdkZWZccGRmaW1nZXh0e1BERn0lCisgICAgICAgIFxmaQorICAgICAgXGVsc2UgXGdkZWZccGRmaW1nZXh0e3BkZn0lCisgICAgICBcZmkKKyAgICAgIFxjbG9zZWluIDEKKyAgICBcZW5kZ3JvdXAKKyAgICAlCisgICAgJSB3aXRob3V0IFxpbW1lZGlhdGUsIGFuY2llbnQgcGRmdGV4IHNlZyBmYXVsdHMgd2hlbiB0aGUgc2FtZSBpbWFnZSBpcwogICAgICUgaW5jbHVkZWQgdHdpY2UuICAoVmVyc2lvbiAzLjE0MTU5LXByZS0xLjAtdW5vZmZpY2lhbC0yMDAxMDcwNC4pCiAgICAgXGlmbnVtXHBkZnRleHZlcnNpb24gPCAxNAogICAgICAgXGltbWVkaWF0ZVxwZGZpbWFnZQogICAgIFxlbHNlCiAgICAgICBcaW1tZWRpYXRlXHBkZnhpbWFnZQogICAgIFxmaQotICAgICAgXGlmeFxlbXB0eVxpbWFnZXdpZHRoXGVsc2Ugd2lkdGggXGltYWdld2lkdGggXGZpCi0gICAgICBcaWZ4XGVtcHR5XGltYWdlaGVpZ2h0XGVsc2UgaGVpZ2h0IFxpbWFnZWhlaWdodCBcZmkKKyAgICAgIFxpZmRpbSBcd2QwID4wcHQgd2lkdGggXHBkZmltYWdld2lkdGggXGZpCisgICAgICBcaWZkaW0gXHdkMiA+MHB0IGhlaWdodCBccGRmaW1hZ2VoZWlnaHQgXGZpCiAgICAgICBcaWZudW1ccGRmdGV4dmVyc2lvbjwxMwotICAgICAgICAgIzEucGRmJQorICAgICAgICAgIzEuXHBkZmltZ2V4dAogICAgICAgIFxlbHNlCi0gICAgICAgICB7IzEucGRmfSUKKyAgICAgICAgIHsjMS5ccGRmaW1nZXh0fSUKICAgICAgICBcZmkKICAgICBcaWZudW1ccGRmdGV4dmVyc2lvbiA8IDE0IFxlbHNlCiAgICAgICBccGRmcmVmeGltYWdlIFxwZGZsYXN0eGltYWdlCiAgICAgXGZpfQorICAlCiAgIFxkZWZccGRmbWtkZXN0IzF7eyUKICAgICAlIFdlIGhhdmUgdG8gc2V0IGR1bW1pZXMgc28gY29tbWFuZHMgc3VjaCBhcyBAY29kZSwgYW5kIGNoYXJhY3RlcnMKICAgICAlIHN1Y2ggYXMgXCwgYXJlbid0IGV4cGFuZGVkIHdoZW4gcHJlc2VudCBpbiBhIHNlY3Rpb24gdGl0bGUuCi0gICAgXGF0ZHVtbWllcwotICAgIFxhY3RpdmViYWNrc2xhc2hkb3VibGUKKyAgICBcaW5kZXhub2ZvbnRzCisgICAgXHR1cm5vZmZhY3RpdmUKKyAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQogICAgIFxkZWZccGRmZGVzdG5hbWV7IzF9JQotICAgIFxiYWNrc2xhc2hwYXJlbnNccGRmZGVzdG5hbWUKLSAgICBccGRmZGVzdCBuYW1le1xwZGZkZXN0bmFtZX0geHl6JQotICB9fSUKKyAgICBcdHhpZXNjYXBlcGRmXHBkZmRlc3RuYW1lCisgICAgXHNhZmV3aGF0c2l0e1xwZGZkZXN0IG5hbWV7XHBkZmRlc3RuYW1lfSB4eXp9JQorICB9fQogICAlCiAgICUgdXNlZCB0byBtYXJrIHRhcmdldCBuYW1lczsgbXVzdCBiZSBleHBhbmRhYmxlLgotICBcZGVmXHBkZm1rcGduIzF7IzF9JQorICBcZGVmXHBkZm1rcGduIzF7IzF9CiAgICUKLSAgXGxldFxsaW5rY29sb3IgPSBcQmx1ZSAgJSB3YXMgQ3lhbiwgYnV0IHRoYXQgc2VlbXMgbGlnaHQ/Ci0gIFxkZWZcZW5kbGlua3tcQmxhY2tccGRmZW5kbGlua30KKyAgJSBieSBkZWZhdWx0LCB1c2UgYSBjb2xvciB0aGF0IGlzIGRhcmsgZW5vdWdoIHRvIHByaW50IG9uIHBhcGVyIGFzCisgICUgbmVhcmx5IGJsYWNrLCBidXQgc3RpbGwgZGlzdGluZ3Vpc2hhYmxlIGZvciBvbmxpbmUgdmlld2luZy4KKyAgXGRlZlx1cmxjb2xvcntccmdiRGFya1JlZH0KKyAgXGRlZlxsaW5rY29sb3J7XHJnYkRhcmtSZWR9CisgIFxkZWZcZW5kbGlua3tcc2V0Y29sb3J7XG1haW5jb2xvcn1ccGRmZW5kbGlua30KKyAgJQogICAlIEFkZGluZyBvdXRsaW5lcyB0byBQREY7IG1hY3JvcyBmb3IgY2FsY3VsYXRpbmcgc3RydWN0dXJlIG9mIG91dGxpbmVzCiAgICUgY29tZSBmcm9tIFBldHIgT2xzYWsKICAgXGRlZlxleHBudW1iZXIjMXtcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSMxXGVuZGNzbmFtZVxyZWxheCAwJQpAQCAtMTMwOSwyOSArMTI3MiwyNCBAQAogICAgICUgcGFnZSBudW1iZXIuICBXZSBjb3VsZCBnZW5lcmF0ZSBhIGRlc3RpbmF0aW9uIGZvciB0aGUgc2VjdGlvbgogICAgICUgdGV4dCBpbiB0aGUgY2FzZSB3aGVyZSBhIHNlY3Rpb24gaGFzIG5vIG5vZGUsIGJ1dCBpdCBkb2Vzbid0CiAgICAgJSBzZWVtIHdvcnRoIHRoZSB0cm91YmxlLCBzaW5jZSBtb3N0IGRvY3VtZW50cyBhcmUgbm9ybWFsbHkgc3RydWN0dXJlZC4KLSAgICBcZGVmXHBkZm91dGxpbmVkZXN0eyMzfSUKKyAgICBcZWRlZlxwZGZvdXRsaW5lZGVzdHsjM30lCiAgICAgXGlmeFxwZGZvdXRsaW5lZGVzdFxlbXB0eQogICAgICAgXGRlZlxwZGZvdXRsaW5lZGVzdHsjNH0lCiAgICAgXGVsc2UKLSAgICAgICUgRG91YmxlZCBiYWNrc2xhc2hlcyBpbiB0aGUgbmFtZS4KLSAgICAgIHtcYWN0aXZlYmFja3NsYXNoZG91YmxlIFx4ZGVmXHBkZm91dGxpbmVkZXN0eyMzfSUKLSAgICAgICBcYmFja3NsYXNocGFyZW5zXHBkZm91dGxpbmVkZXN0fSUKKyAgICAgIFx0eGllc2NhcGVwZGZccGRmb3V0bGluZWRlc3QKICAgICBcZmkKICAgICAlCi0gICAgJSBBbHNvIGRvdWJsZSB0aGUgYmFja3NsYXNoZXMgaW4gdGhlIGRpc3BsYXkgc3RyaW5nLgotICAgIHtcYWN0aXZlYmFja3NsYXNoZG91YmxlIFx4ZGVmXHBkZm91dGxpbmV0ZXh0eyMxfSUKLSAgICAgXGJhY2tzbGFzaHBhcmVuc1xwZGZvdXRsaW5ldGV4dH0lCisgICAgJSBBbHNvIGVzY2FwZSBQREYgY2hhcnMgaW4gdGhlIGRpc3BsYXkgc3RyaW5nLgorICAgIFxlZGVmXHBkZm91dGxpbmV0ZXh0eyMxfSUKKyAgICBcdHhpZXNjYXBlcGRmXHBkZm91dGxpbmV0ZXh0CiAgICAgJQogICAgIFxwZGZvdXRsaW5lIGdvdG8gbmFtZXtccGRmbWtwZ257XHBkZm91dGxpbmVkZXN0fX0jMntccGRmb3V0bGluZXRleHR9JQogICB9CiAgICUKICAgXGRlZlxwZGZtYWtlb3V0bGluZXN7JQogICAgIFxiZWdpbmdyb3VwCi0gICAgICAlIFRoYW5oJ3MgaGFjayAvIHByb3BlciBicmFjZXMgaW4gYm9va21hcmtzCi0gICAgICBcZWRlZlxteWxicmFjZXtcaWZ0cnVlIFxzdHJpbmd7XGVsc2V9XGZpfVxsZXRcez1cbXlsYnJhY2UKLSAgICAgIFxlZGVmXG15cmJyYWNle1xpZmZhbHNle1xlbHNlXHN0cmluZ31cZml9XGxldFx9PVxteXJicmFjZQotICAgICAgJQogICAgICAgJSBSZWFkIHRvYyBzaWxlbnRseSwgdG8gZ2V0IGNvdW50cyBvZiBzdWJlbnRyaWVzIGZvciBccGRmb3V0bGluZS4KKyAgICAgIFxkZWZccGFydGVudHJ5IyMxIyMyIyMzIyM0e30lIGlnbm9yZSBwYXJ0cyBpbiB0aGUgb3V0bGluZXMKICAgICAgIFxkZWZcbnVtY2hhcGVudHJ5IyMxIyMyIyMzIyM0eyUKIAlcZGVmXHRoaXNjaGFwbnVteyMjMn0lCiAJXGRlZlx0aGlzc2VjbnVtezB9JQpAQCAtMTM4NSwzNSArMTM0Myw2MyBAQAogICAgICAgJSBMYXRpbiAyICgweGVhKSBnZXRzIHRyYW5zbGF0ZWQgdG8gYSB8IGNoYXJhY3Rlci4gIEluZm8gZnJvbQogICAgICAgJSBTdGFzemVrIFdhd3J5a2lld2ljeiwgMTkgSmFuIDIwMDQgMDQ6MDk6MjQgKzAxMDAuCiAgICAgICAlCi0gICAgICAlIHh4IHRvIGRvIHRoaXMgcmlnaHQsIHdlIGhhdmUgdG8gdHJhbnNsYXRlIDgtYml0IGNoYXJhY3RlcnMgdG8KLSAgICAgICUgdGhlaXIgImJlc3QiIGVxdWl2YWxlbnQsIGJhc2VkIG9uIHRoZSBAZG9jdW1lbnRlbmNvZGluZy4gIFJpZ2h0Ci0gICAgICAlIG5vdywgSSBndWVzcyB3ZSdsbCBqdXN0IGxldCB0aGUgcGRmIHJlYWRlciBoYXZlIGl0cyB3YXkuCisgICAgICAlIFRPRE8gdGhpcyByaWdodCwgd2UgaGF2ZSB0byB0cmFuc2xhdGUgOC1iaXQgY2hhcmFjdGVycyB0bworICAgICAgJSB0aGVpciAiYmVzdCIgZXF1aXZhbGVudCwgYmFzZWQgb24gdGhlIEBkb2N1bWVudGVuY29kaW5nLiAgVG9vCisgICAgICAlIG11Y2ggd29yayBmb3IgdG9vIGxpdHRsZSByZXR1cm4uICBKdXN0IHVzZSB0aGUgQVNDSUkgZXF1aXZhbGVudHMKKyAgICAgICUgd2UgdXNlIGZvciB0aGUgaW5kZXggc29ydCBzdHJpbmdzLgorICAgICAgJSAKICAgICAgIFxpbmRleG5vZm9udHMKICAgICAgIFxzZXR1cGRhdGFmaWxlCi0gICAgICBcYWN0aXZlYmFja3NsYXNoCi0gICAgICBcaW5wdXQgXGpvYm5hbWUudG9jCisgICAgICAlIFdlIGNhbiBoYXZlIG5vcm1hbCBicmFjZSBjaGFyYWN0ZXJzIGluIHRoZSBQREYgb3V0bGluZXMsIHVubGlrZQorICAgICAgJSBUZXhpbmZvIGluZGV4IGZpbGVzLiAgU28gc2V0IHRoYXQgdXAuCisgICAgICBcZGVmXHt7XGxicmFjZWNoYXJsaXRlcmFsfSUKKyAgICAgIFxkZWZcfXtccmJyYWNlY2hhcmxpdGVyYWx9JQorICAgICAgXGNhdGNvZGVgXFw9XGFjdGl2ZSBcb3RoZXJiYWNrc2xhc2gKKyAgICAgIFxpbnB1dCBcdG9jcmVhZGZpbGVuYW1lCiAgICAgXGVuZGdyb3VwCiAgIH0KKyAge1xjYXRjb2RlYFs9MSBcY2F0Y29kZWBdPTIKKyAgIFxjYXRjb2RlYHs9XG90aGVyIFxjYXRjb2RlYH09XG90aGVyCisgICBcZ2RlZlxsYnJhY2VjaGFybGl0ZXJhbFt7XSUKKyAgIFxnZGVmXHJicmFjZWNoYXJsaXRlcmFsW31dJQorICBdCiAgICUKICAgXGRlZlxza2lwc3BhY2VzIzF7XGRlZlxQUHsjMX1cZGVmXER7fH0lCiAgICAgXGlmeFxQUFxEXGxldFxuZXh0c3BccmVsYXgKICAgICBcZWxzZVxsZXRcbmV4dHNwXHNraXBzcGFjZXMKLSAgICAgIFxpZnhccFxzcGFjZVxlbHNlXGFkZHRva2Vuc3tcZmlsZW5hbWV9e1xQUH0lCi0gICAgICAgIFxhZHZhbmNlXGZpbGVuYW1lbGVuZ3RoIGJ5IDEKLSAgICAgIFxmaQorICAgICAgXGFkZHRva2Vuc3tcZmlsZW5hbWV9e1xQUH0lCisgICAgICBcYWR2YW5jZVxmaWxlbmFtZWxlbmd0aCBieSAxCiAgICAgXGZpCiAgICAgXG5leHRzcH0KLSAgXGRlZlxnZXRmaWxlbmFtZSMxe1xmaWxlbmFtZWxlbmd0aD0wXGV4cGFuZGFmdGVyXHNraXBzcGFjZXMjMXxccmVsYXh9CisgIFxkZWZcZ2V0ZmlsZW5hbWUjMXslCisgICAgXGZpbGVuYW1lbGVuZ3RoPTAKKyAgICAlIElmIHdlIGRvbid0IGV4cGFuZCB0aGUgYXJndW1lbnQgbm93LCBcc2tpcHNwYWNlcyB3aWxsIGdldAorICAgICUgc25hZ2dlZCBvbiB0aGluZ3MgbGlrZSAiQHZhbHVle2Zvb30iLgorICAgIFxlZGVmXHRlbXB7IzF9JQorICAgIFxleHBhbmRhZnRlclxza2lwc3BhY2VzXHRlbXB8XHJlbGF4CisgIH0KICAgXGlmbnVtXHBkZnRleHZlcnNpb24gPCAxNAogICAgIFxsZXQgXHN0YXJ0bGluayBccGRmYW5ub3RsaW5rCiAgIFxlbHNlCiAgICAgXGxldCBcc3RhcnRsaW5rIFxwZGZzdGFydGxpbmsKICAgXGZpCisgICUgbWFrZSBhIGxpdmUgdXJsIGluIHBkZiBvdXRwdXQuCiAgIFxkZWZccGRmdXJsIzF7JQogICAgIFxiZWdpbmdyb3VwCi0gICAgICBcbm9ybWFsdHVybm9mZmFjdGl2ZVxkZWZcQHtAfSUKKyAgICAgICUgaXQgc2VlbXMgd2UgcmVhbGx5IG5lZWQgeWV0IGFub3RoZXIgc2V0IG9mIGR1bW1pZXM7IGhhdmUgbm90CisgICAgICAlIHRyaWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBlYWNoIGNvbW1hbmQgc2hvdWxkIGRvIGluIHRoZSBjb250ZXh0CisgICAgICAlIG9mIEB1cmwuICBmb3Igbm93LCBqdXN0IG1ha2UgQC8gYSBuby1vcCwgdGhhdCdzIHRoZSBvbmx5IG9uZQorICAgICAgJSBwZW9wbGUgaGF2ZSBhY3R1YWxseSByZXBvcnRlZCBhIHByb2JsZW0gd2l0aC4KKyAgICAgICUKKyAgICAgIFxub3JtYWx0dXJub2ZmYWN0aXZlCisgICAgICBcZGVmXEB7QH0lCisgICAgICBcbGV0XC89XGVtcHR5CiAgICAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQotICAgICAgXGxlYXZldm1vZGVcUmVkCisgICAgICAlIGRvIHdlIHdhbnQgdG8gZ28gc28gZmFyIGFzIHRvIHVzZSBcaW5kZXhub2ZvbnRzIGluc3RlYWQgb2YganVzdAorICAgICAgJSBzcGVjaWFsLWNhc2luZyBcdmFyIGhlcmU/CisgICAgICBcZGVmXHZhciMjMXsjIzF9JQorICAgICAgJQorICAgICAgXGxlYXZldm1vZGVcc2V0Y29sb3J7XHVybGNvbG9yfSUKICAgICAgIFxzdGFydGxpbmsgYXR0cnsvQm9yZGVyIFswIDAgMF19JQogICAgICAgICB1c2Vyey9TdWJ0eXBlIC9MaW5rIC9BIDw8IC9TIC9VUkkgL1VSSSAoIzEpID4+fSUKICAgICBcZW5kZ3JvdXB9CkBAIC0xNDQwLDEzICsxNDI2LDE1IEBACiAgICAge1xub2V4cGFuZFxwZGZsaW5re1x0aGVcdG9rc0N9fVx0b2tzQz17fVxnbG9iYWxcY291bnRBPTB9CiAgIFxkZWZccGRmbGluayMxeyUKICAgICBcc3RhcnRsaW5rIGF0dHJ7L0JvcmRlciBbMCAwIDBdfSBnb3RvIG5hbWV7XHBkZm1rcGdueyMxfX0KLSAgICBcbGlua2NvbG9yICMxXGVuZGxpbmt9CisgICAgXHNldGNvbG9ye1xsaW5rY29sb3J9IzFcZW5kbGlua30KICAgXGRlZlxkb25le1xlZGVmXHN0e1xnbG9iYWxcbm9leHBhbmRcdG9rc0E9e1x0aGVcdG9rc0J9fVxzdH0KIFxlbHNlCisgICUgbm9uLXBkZiBtb2RlCiAgIFxsZXRccGRmbWtkZXN0ID0gXGdvYmJsZQogICBcbGV0XHBkZnVybCA9IFxnb2JibGUKICAgXGxldFxlbmRsaW5rID0gXHJlbGF4Ci0gIFxsZXRcbGlua2NvbG9yID0gXHJlbGF4CisgIFxsZXRcc2V0Y29sb3IgPSBcZ29iYmxlCisgIFxsZXRccGRmc2V0Y29sb3IgPSBcZ29iYmxlCiAgIFxsZXRccGRmbWFrZW91dGxpbmVzID0gXHJlbGF4CiBcZmkgICUgXGlmeFxwZGZvdXRwdXQKIApAQCAtMTQ3Miw2ICsxNDYwLDEwIEBACiBcZGVmXGJme1xmYW09XGJmZmFtIFxzZXRmb250c3R5bGV7YmZ9fVxkZWZcYmZzdHlsZW5hbWV7YmZ9CiBcZGVmXHR0e1xmYW09XHR0ZmFtIFxzZXRmb250c3R5bGV7dHR9fQogCislIFVuZm9ydHVuYXRlbHksIHdlIGhhdmUgdG8gb3ZlcnJpZGUgdGhpcyBmb3IgdGl0bGVzIGFuZCB0aGUgbGlrZSwgc2luY2UKKyUgaW4gdGhvc2UgY2FzZXMgInJtIiBpcyBib2xkLiAgU2lnaC4KK1xkZWZccm1pc2JvbGR7XHJtXGRlZlxjdXJmb250c3R5bGV7YmZ9fQorCiAlIFRleGluZm8gc29ydCBvZiBzdXBwb3J0cyB0aGUgc2FucyBzZXJpZiBmb250IHN0eWxlLCB3aGljaCBwbGFpbiBUZVggZG9lcyBub3QuCiAlIFNvIHdlIHNldCB1cCBhIFxzZi4KIFxuZXdmYW1cc2ZmYW0KQEAgLTE0ODEsOCArMTQ3Myw2IEBACiAlIFdlIGRvbid0IG5lZWQgbWF0aCBmb3IgdGhpcyBmb250IHN0eWxlLgogXGRlZlx0dHNse1xzZXRmb250c3R5bGV7dHRzbH19CiAKLSUgRGVmYXVsdCBsZWFkaW5nLgotXG5ld2RpbWVuXHRleHRsZWFkaW5nICBcdGV4dGxlYWRpbmcgPSAxMy4ycHQKIAogJSBTZXQgdGhlIGJhc2VsaW5lc2tpcCB0byAjMSwgYW5kIHRoZSBsaW5lc2tpcCBhbmQgc3RydXQgc2l6ZQogJSBjb3JyZXNwb25kaW5nbHkuICBUaGVyZSBpcyBubyBkZWVwIG1lYW5pbmcgYmVoaW5kIHRoZXNlIG1hZ2ljIG51bWJlcnMKQEAgLTE0OTIsOCArMTQ4MiwxMyBAQAogXGRlZlxzdHJ1dGhlaWdodHBlcmNlbnR7LjcwODMzfQogXGRlZlxzdHJ1dGRlcHRocGVyY2VudCB7LjI5MTY3fQogJQorJSBjYW4gZ2V0IGEgc29ydCBvZiBwb29yIG1hbidzIGRvdWJsZSBzcGFjaW5nIGJ5IHJlZGVmaW5pbmcgdGhpcy4KK1xkZWZcYmFzZWxpbmVmYWN0b3J7MX0KKyUKK1xuZXdkaW1lblx0ZXh0bGVhZGluZwogXGRlZlxzZXRsZWFkaW5nIzF7JQotICBcbm9ybWFsYmFzZWxpbmVza2lwID0gIzFccmVsYXgKKyAgXGRpbWVuMCA9ICMxXHJlbGF4CisgIFxub3JtYWxiYXNlbGluZXNraXAgPSBcYmFzZWxpbmVmYWN0b3JcZGltZW4wCiAgIFxub3JtYWxsaW5lc2tpcCA9IFxsaW5lc2tpcGZhY3Rvclxub3JtYWxiYXNlbGluZXNraXAKICAgXG5vcm1hbGJhc2VsaW5lcwogICBcc2V0Ym94XHN0cnV0Ym94ID1caGJveHslCkBAIC0xNTAyLDIwICsxNDk3LDI5NSBAQAogICB9JQogfQogCi0lIFNldCB0aGUgZm9udCBtYWNybyAjMSB0byB0aGUgZm9udCBuYW1lZCAjMiwgYWRkaW5nIG9uIHRoZQotJSBzcGVjaWZpZWQgZm9udCBwcmVmaXggKG5vcm1hbGx5IGBjbScpLgotJSAjMyBpcyB0aGUgZm9udCdzIGRlc2lnbiBzaXplLCAjNCBpcyBhIHNjYWxlIGZhY3RvcgotXGRlZlxzZXRmb250IzEjMiMzIzR7XGZvbnQjMT1cZm9udHByZWZpeCMyIzMgc2NhbGVkICM0fQorJSBQREYgQ01hcHMuICBTZWUgYWxzbyBMYVRlWCdzIHQxLmNtYXAuCislCislIGRvIG5vdGhpbmcgd2l0aCB0aGlzIGJ5IGRlZmF1bHQuCitcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBjbWFwT1QxXGVuZGNzbmFtZVxnb2JibGUKK1xleHBhbmRhZnRlclxsZXRcY3NuYW1lIGNtYXBPVDFJVFxlbmRjc25hbWVcZ29iYmxlCitcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBjbWFwT1QxVFRcZW5kY3NuYW1lXGdvYmJsZQorCislIGlmIHdlIGFyZSBwcm9kdWNpbmcgcGRmLCBhbmQgd2UgaGF2ZSBccGRmZm9udGF0dHIsIHRoZW4gZGVmaW5lIGNtYXBzLgorJSAoXHBkZmZvbnRhdHRyIHdhcyBpbnRyb2R1Y2VkIG1hbnkgeWVhcnMgYWdvLCBidXQgcGVvcGxlIHN0aWxsIHJ1bgorJSBvbGRlciBwZGZ0ZXgnczsgaXQncyBlYXN5IHRvIGNvbmRpdGlvbmFsaXplLCBzbyB3ZSBkby4pCitcaWZwZGYgXGlmeFxwZGZmb250YXR0clx0aGlzaXN1bmRlZmluZWQgXGVsc2UKKyAgXGJlZ2luZ3JvdXAKKyAgICBcY2F0Y29kZWBcXl5NPVxhY3RpdmUgXGRlZl5eTXteXkp9JSBPdXRwdXQgbGluZSBlbmRpbmdzIGFzIHRoZSBeXkogY2hhci4KKyAgICBcY2F0Y29kZWBcJT0xMiBcaW1tZWRpYXRlXHBkZm9iaiBzdHJlYW0geyUhUFMtQWRvYmUtMy4wIFJlc291cmNlLUNNYXAKKyUlRG9jdW1lbnROZWVkZWRSZXNvdXJjZXM6IFByb2NTZXQgKENJREluaXQpCislJUluY2x1ZGVSZXNvdXJjZTogUHJvY1NldCAoQ0lESW5pdCkKKyUlQmVnaW5SZXNvdXJjZTogQ01hcCAoVGVYLU9UMS0wKQorJSVUaXRsZTogKFRlWC1PVDEtMCBUZVggT1QxIDApCislJVZlcnNpb246IDEuMDAwCislJUVuZENvbW1lbnRzCisvQ0lESW5pdCAvUHJvY1NldCBmaW5kcmVzb3VyY2UgYmVnaW4KKzEyIGRpY3QgYmVnaW4KK2JlZ2luY21hcAorL0NJRFN5c3RlbUluZm8KKzw8IC9SZWdpc3RyeSAoVGVYKQorL09yZGVyaW5nIChPVDEpCisvU3VwcGxlbWVudCAwCis+PiBkZWYKKy9DTWFwTmFtZSAvVGVYLU9UMS0wIGRlZgorL0NNYXBUeXBlIDIgZGVmCisxIGJlZ2luY29kZXNwYWNlcmFuZ2UKKzwwMD4gPDdGPgorZW5kY29kZXNwYWNlcmFuZ2UKKzggYmVnaW5iZnJhbmdlCis8MDA+IDwwMT4gPDAzOTM+Cis8MDk+IDwwQT4gPDAzQTg+Cis8MjM+IDwyNj4gPDAwMjM+Cis8Mjg+IDwzQj4gPDAwMjg+Cis8M0Y+IDw1Qj4gPDAwM0Y+Cis8NUQ+IDw1RT4gPDAwNUQ+Cis8NjE+IDw3QT4gPDAwNjE+Cis8N0I+IDw3Qz4gPDIwMTM+CitlbmRiZnJhbmdlCis0MCBiZWdpbmJmY2hhcgorPDAyPiA8MDM5OD4KKzwwMz4gPDAzOUI+Cis8MDQ+IDwwMzlFPgorPDA1PiA8MDNBMD4KKzwwNj4gPDAzQTM+Cis8MDc+IDwwM0QyPgorPDA4PiA8MDNBNj4KKzwwQj4gPDAwNjYwMDY2PgorPDBDPiA8MDA2NjAwNjk+Cis8MEQ+IDwwMDY2MDA2Qz4KKzwwRT4gPDAwNjYwMDY2MDA2OT4KKzwwRj4gPDAwNjYwMDY2MDA2Qz4KKzwxMD4gPDAxMzE+Cis8MTE+IDwwMjM3PgorPDEyPiA8MDA2MD4KKzwxMz4gPDAwQjQ+Cis8MTQ+IDwwMkM3PgorPDE1PiA8MDJEOD4KKzwxNj4gPDAwQUY+Cis8MTc+IDwwMkRBPgorPDE4PiA8MDBCOD4KKzwxOT4gPDAwREY+Cis8MUE+IDwwMEU2PgorPDFCPiA8MDE1Mz4KKzwxQz4gPDAwRjg+Cis8MUQ+IDwwMEM2PgorPDFFPiA8MDE1Mj4KKzwxRj4gPDAwRDg+Cis8MjE+IDwwMDIxPgorPDIyPiA8MjAxRD4KKzwyNz4gPDIwMTk+Cis8M0M+IDwwMEExPgorPDNEPiA8MDAzRD4KKzwzRT4gPDAwQkY+Cis8NUM+IDwyMDFDPgorPDVGPiA8MDJEOT4KKzw2MD4gPDIwMTg+Cis8N0Q+IDwwMkREPgorPDdFPiA8MDA3RT4KKzw3Rj4gPDAwQTg+CitlbmRiZmNoYXIKK2VuZGNtYXAKK0NNYXBOYW1lIGN1cnJlbnRkaWN0IC9DTWFwIGRlZmluZXJlc291cmNlIHBvcAorZW5kCitlbmQKKyUlRW5kUmVzb3VyY2UKKyUlRU9GCisgICAgfVxlbmRncm91cAorICBcZXhwYW5kYWZ0ZXJcZWRlZlxjc25hbWUgY21hcE9UMVxlbmRjc25hbWUjMXslCisgICAgXHBkZmZvbnRhdHRyIzF7L1RvVW5pY29kZSBcdGhlXHBkZmxhc3RvYmpcc3BhY2UgMCBSfSUKKyAgfSUKKyUKKyUgXGNtYXBPVDFJVAorICBcYmVnaW5ncm91cAorICAgIFxjYXRjb2RlYFxeXk09XGFjdGl2ZSBcZGVmXl5Ne15eSn0lIE91dHB1dCBsaW5lIGVuZGluZ3MgYXMgdGhlIF5eSiBjaGFyLgorICAgIFxjYXRjb2RlYFwlPTEyIFxpbW1lZGlhdGVccGRmb2JqIHN0cmVhbSB7JSFQUy1BZG9iZS0zLjAgUmVzb3VyY2UtQ01hcAorJSVEb2N1bWVudE5lZWRlZFJlc291cmNlczogUHJvY1NldCAoQ0lESW5pdCkKKyUlSW5jbHVkZVJlc291cmNlOiBQcm9jU2V0IChDSURJbml0KQorJSVCZWdpblJlc291cmNlOiBDTWFwIChUZVgtT1QxSVQtMCkKKyUlVGl0bGU6IChUZVgtT1QxSVQtMCBUZVggT1QxSVQgMCkKKyUlVmVyc2lvbjogMS4wMDAKKyUlRW5kQ29tbWVudHMKKy9DSURJbml0IC9Qcm9jU2V0IGZpbmRyZXNvdXJjZSBiZWdpbgorMTIgZGljdCBiZWdpbgorYmVnaW5jbWFwCisvQ0lEU3lzdGVtSW5mbworPDwgL1JlZ2lzdHJ5IChUZVgpCisvT3JkZXJpbmcgKE9UMUlUKQorL1N1cHBsZW1lbnQgMAorPj4gZGVmCisvQ01hcE5hbWUgL1RlWC1PVDFJVC0wIGRlZgorL0NNYXBUeXBlIDIgZGVmCisxIGJlZ2luY29kZXNwYWNlcmFuZ2UKKzwwMD4gPDdGPgorZW5kY29kZXNwYWNlcmFuZ2UKKzggYmVnaW5iZnJhbmdlCis8MDA+IDwwMT4gPDAzOTM+Cis8MDk+IDwwQT4gPDAzQTg+Cis8MjU+IDwyNj4gPDAwMjU+Cis8Mjg+IDwzQj4gPDAwMjg+Cis8M0Y+IDw1Qj4gPDAwM0Y+Cis8NUQ+IDw1RT4gPDAwNUQ+Cis8NjE+IDw3QT4gPDAwNjE+Cis8N0I+IDw3Qz4gPDIwMTM+CitlbmRiZnJhbmdlCis0MiBiZWdpbmJmY2hhcgorPDAyPiA8MDM5OD4KKzwwMz4gPDAzOUI+Cis8MDQ+IDwwMzlFPgorPDA1PiA8MDNBMD4KKzwwNj4gPDAzQTM+Cis8MDc+IDwwM0QyPgorPDA4PiA8MDNBNj4KKzwwQj4gPDAwNjYwMDY2PgorPDBDPiA8MDA2NjAwNjk+Cis8MEQ+IDwwMDY2MDA2Qz4KKzwwRT4gPDAwNjYwMDY2MDA2OT4KKzwwRj4gPDAwNjYwMDY2MDA2Qz4KKzwxMD4gPDAxMzE+Cis8MTE+IDwwMjM3PgorPDEyPiA8MDA2MD4KKzwxMz4gPDAwQjQ+Cis8MTQ+IDwwMkM3PgorPDE1PiA8MDJEOD4KKzwxNj4gPDAwQUY+Cis8MTc+IDwwMkRBPgorPDE4PiA8MDBCOD4KKzwxOT4gPDAwREY+Cis8MUE+IDwwMEU2PgorPDFCPiA8MDE1Mz4KKzwxQz4gPDAwRjg+Cis8MUQ+IDwwMEM2PgorPDFFPiA8MDE1Mj4KKzwxRj4gPDAwRDg+Cis8MjE+IDwwMDIxPgorPDIyPiA8MjAxRD4KKzwyMz4gPDAwMjM+Cis8MjQ+IDwwMEEzPgorPDI3PiA8MjAxOT4KKzwzQz4gPDAwQTE+Cis8M0Q+IDwwMDNEPgorPDNFPiA8MDBCRj4KKzw1Qz4gPDIwMUM+Cis8NUY+IDwwMkQ5PgorPDYwPiA8MjAxOD4KKzw3RD4gPDAyREQ+Cis8N0U+IDwwMDdFPgorPDdGPiA8MDBBOD4KK2VuZGJmY2hhcgorZW5kY21hcAorQ01hcE5hbWUgY3VycmVudGRpY3QgL0NNYXAgZGVmaW5lcmVzb3VyY2UgcG9wCitlbmQKK2VuZAorJSVFbmRSZXNvdXJjZQorJSVFT0YKKyAgICB9XGVuZGdyb3VwCisgIFxleHBhbmRhZnRlclxlZGVmXGNzbmFtZSBjbWFwT1QxSVRcZW5kY3NuYW1lIzF7JQorICAgIFxwZGZmb250YXR0ciMxey9Ub1VuaWNvZGUgXHRoZVxwZGZsYXN0b2JqXHNwYWNlIDAgUn0lCisgIH0lCislCislIFxjbWFwT1QxVFQKKyAgXGJlZ2luZ3JvdXAKKyAgICBcY2F0Y29kZWBcXl5NPVxhY3RpdmUgXGRlZl5eTXteXkp9JSBPdXRwdXQgbGluZSBlbmRpbmdzIGFzIHRoZSBeXkogY2hhci4KKyAgICBcY2F0Y29kZWBcJT0xMiBcaW1tZWRpYXRlXHBkZm9iaiBzdHJlYW0geyUhUFMtQWRvYmUtMy4wIFJlc291cmNlLUNNYXAKKyUlRG9jdW1lbnROZWVkZWRSZXNvdXJjZXM6IFByb2NTZXQgKENJREluaXQpCislJUluY2x1ZGVSZXNvdXJjZTogUHJvY1NldCAoQ0lESW5pdCkKKyUlQmVnaW5SZXNvdXJjZTogQ01hcCAoVGVYLU9UMVRULTApCislJVRpdGxlOiAoVGVYLU9UMVRULTAgVGVYIE9UMVRUIDApCislJVZlcnNpb246IDEuMDAwCislJUVuZENvbW1lbnRzCisvQ0lESW5pdCAvUHJvY1NldCBmaW5kcmVzb3VyY2UgYmVnaW4KKzEyIGRpY3QgYmVnaW4KK2JlZ2luY21hcAorL0NJRFN5c3RlbUluZm8KKzw8IC9SZWdpc3RyeSAoVGVYKQorL09yZGVyaW5nIChPVDFUVCkKKy9TdXBwbGVtZW50IDAKKz4+IGRlZgorL0NNYXBOYW1lIC9UZVgtT1QxVFQtMCBkZWYKKy9DTWFwVHlwZSAyIGRlZgorMSBiZWdpbmNvZGVzcGFjZXJhbmdlCis8MDA+IDw3Rj4KK2VuZGNvZGVzcGFjZXJhbmdlCis1IGJlZ2luYmZyYW5nZQorPDAwPiA8MDE+IDwwMzkzPgorPDA5PiA8MEE+IDwwM0E4PgorPDIxPiA8MjY+IDwwMDIxPgorPDI4PiA8NUY+IDwwMDI4PgorPDYxPiA8N0U+IDwwMDYxPgorZW5kYmZyYW5nZQorMzIgYmVnaW5iZmNoYXIKKzwwMj4gPDAzOTg+Cis8MDM+IDwwMzlCPgorPDA0PiA8MDM5RT4KKzwwNT4gPDAzQTA+Cis8MDY+IDwwM0EzPgorPDA3PiA8MDNEMj4KKzwwOD4gPDAzQTY+Cis8MEI+IDwyMTkxPgorPDBDPiA8MjE5Mz4KKzwwRD4gPDAwMjc+Cis8MEU+IDwwMEExPgorPDBGPiA8MDBCRj4KKzwxMD4gPDAxMzE+Cis8MTE+IDwwMjM3PgorPDEyPiA8MDA2MD4KKzwxMz4gPDAwQjQ+Cis8MTQ+IDwwMkM3PgorPDE1PiA8MDJEOD4KKzwxNj4gPDAwQUY+Cis8MTc+IDwwMkRBPgorPDE4PiA8MDBCOD4KKzwxOT4gPDAwREY+Cis8MUE+IDwwMEU2PgorPDFCPiA8MDE1Mz4KKzwxQz4gPDAwRjg+Cis8MUQ+IDwwMEM2PgorPDFFPiA8MDE1Mj4KKzwxRj4gPDAwRDg+Cis8MjA+IDwyNDIzPgorPDI3PiA8MjAxOT4KKzw2MD4gPDIwMTg+Cis8N0Y+IDwwMEE4PgorZW5kYmZjaGFyCitlbmRjbWFwCitDTWFwTmFtZSBjdXJyZW50ZGljdCAvQ01hcCBkZWZpbmVyZXNvdXJjZSBwb3AKK2VuZAorZW5kCislJUVuZFJlc291cmNlCislJUVPRgorICAgIH1cZW5kZ3JvdXAKKyAgXGV4cGFuZGFmdGVyXGVkZWZcY3NuYW1lIGNtYXBPVDFUVFxlbmRjc25hbWUjMXslCisgICAgXHBkZmZvbnRhdHRyIzF7L1RvVW5pY29kZSBcdGhlXHBkZmxhc3RvYmpcc3BhY2UgMCBSfSUKKyAgfSUKK1xmaVxmaQorCisKKyUgU2V0IHRoZSBmb250IG1hY3JvICMxIHRvIHRoZSBmb250IG5hbWVkIFxmb250cHJlZml4IzIuCislICMzIGlzIHRoZSBmb250J3MgZGVzaWduIHNpemUsICM0IGlzIGEgc2NhbGUgZmFjdG9yLCAjNSBpcyB0aGUgQ01hcAorJSBlbmNvZGluZyAob25seSBPVDEsIE9UMUlUIGFuZCBPVDFUVCBhcmUgYWxsb3dlZCwgb3IgZW1wdHkgdG8gb21pdCkuCislIEV4YW1wbGU6CislICMxID0gXHRleHRybQorJSAjMiA9IFxybXNoYXBlCislICMzID0gMTAKKyUgIzQgPSBcbWFpbm1hZ3N0ZXAKKyUgIzUgPSBPVDEKKyUKK1xkZWZcc2V0Zm9udCMxIzIjMyM0IzV7JQorICBcZm9udCMxPVxmb250cHJlZml4IzIjMyBzY2FsZWQgIzQKKyAgXGNzbmFtZSBjbWFwIzVcZW5kY3NuYW1lIzElCit9CislIFRoaXMgaXMgd2hhdCBnZXRzIGNhbGxlZCB3aGVuICM1IG9mIFxzZXRmb250IGlzIGVtcHR5LgorXGxldFxjbWFwXGdvYmJsZQorJQorJSAoZW5kIG9mIGNtYXBzKQogCiAlIFVzZSBjbSBhcyB0aGUgZGVmYXVsdCBmb250IHByZWZpeC4KICUgVG8gc3BlY2lmeSB0aGUgZm9udCBwcmVmaXgsIHlvdSBtdXN0IGRlZmluZSBcZm9udHByZWZpeAogJSBiZWZvcmUgeW91IHJlYWQgaW4gdGV4aW5mby50ZXguCi1caWZ4XGZvbnRwcmVmaXhcdW5kZWZpbmVkCitcaWZ4XGZvbnRwcmVmaXhcdGhpc2lzdW5kZWZpbmVkCiBcZGVmXGZvbnRwcmVmaXh7Y219CiBcZmkKICUgU3VwcG9ydCBmb250IGZhbWlsaWVzIHRoYXQgZG9uJ3QgdXNlIHRoZSBzYW1lIG5hbWluZyBzY2hlbWUgYXMgQ00uCiBcZGVmXHJtc2hhcGV7cn0KLVxkZWZccm1ic2hhcGV7Ynh9ICAgICAgICAgICAgICAgJXdoZXJlIHRoZSBub3JtYWwgZmFjZSBpcyBib2xkCitcZGVmXHJtYnNoYXBle2J4fSAgICAgICAgICAgICAgICUgd2hlcmUgdGhlIG5vcm1hbCBmYWNlIGlzIGJvbGQKIFxkZWZcYmZzaGFwZXtifQogXGRlZlxieHNoYXBle2J4fQogXGRlZlx0dHNoYXBle3R0fQpAQCAtMTUzMCwxMTggKzE4MDAsMjkxIEBACiBcZGVmXHNjc2hhcGV7Y3NjfQogXGRlZlxzY2JzaGFwZXtjc2N9CiAKKyUgRGVmaW5pdGlvbnMgZm9yIGEgbWFpbiB0ZXh0IHNpemUgb2YgMTFwdC4gIChUaGUgZGVmYXVsdCBpbiBUZXhpbmZvLikKKyUKK1xkZWZcZGVmaW5ldGV4dGZvbnRzaXpleGl7JQogJSBUZXh0IGZvbnRzICgxMS4ycHQsIG1hZ3N0ZXAxKS4KIFxkZWZcdGV4dG5vbWluYWxzaXplezExcHR9CiBcZWRlZlxtYWlubWFnc3RlcHtcbWFnc3RlcGhhbGZ9Ci1cc2V0Zm9udFx0ZXh0cm1ccm1zaGFwZXsxMH17XG1haW5tYWdzdGVwfQotXHNldGZvbnRcdGV4dHR0XHR0c2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KLVxzZXRmb250XHRleHRiZlxiZnNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9Ci1cc2V0Zm9udFx0ZXh0aXRcaXRzaGFwZXsxMH17XG1haW5tYWdzdGVwfQotXHNldGZvbnRcdGV4dHNsXHNsc2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KLVxzZXRmb250XHRleHRzZlxzZnNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9Ci1cc2V0Zm9udFx0ZXh0c2Ncc2NzaGFwZXsxMH17XG1haW5tYWdzdGVwfQotXHNldGZvbnRcdGV4dHR0c2xcdHRzbHNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9Citcc2V0Zm9udFx0ZXh0cm1ccm1zaGFwZXsxMH17XG1haW5tYWdzdGVwfXtPVDF9Citcc2V0Zm9udFx0ZXh0dHRcdHRzaGFwZXsxMH17XG1haW5tYWdzdGVwfXtPVDFUVH0KK1xzZXRmb250XHRleHRiZlxiZnNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9e09UMX0KK1xzZXRmb250XHRleHRpdFxpdHNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9e09UMUlUfQorXHNldGZvbnRcdGV4dHNsXHNsc2hhcGV7MTB9e1xtYWlubWFnc3RlcH17T1QxfQorXHNldGZvbnRcdGV4dHNmXHNmc2hhcGV7MTB9e1xtYWlubWFnc3RlcH17T1QxfQorXHNldGZvbnRcdGV4dHNjXHNjc2hhcGV7MTB9e1xtYWlubWFnc3RlcH17T1QxfQorXHNldGZvbnRcdGV4dHR0c2xcdHRzbHNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9e09UMVRUfQogXGZvbnRcdGV4dGk9Y21taTEwIHNjYWxlZCBcbWFpbm1hZ3N0ZXAKIFxmb250XHRleHRzeT1jbXN5MTAgc2NhbGVkIFxtYWlubWFnc3RlcAorXGRlZlx0ZXh0ZWNzaXplezEwOTV9CiAKICUgQSBmZXcgZm9udHMgZm9yIEBkZWZ1biBuYW1lcyBhbmQgYXJncy4KLVxzZXRmb250XGRlZmJmXGJmc2hhcGV7MTB9e1xtYWdzdGVwMX0KLVxzZXRmb250XGRlZnR0XHR0c2hhcGV7MTB9e1xtYWdzdGVwMX0KLVxzZXRmb250XGRlZnR0c2xcdHRzbHNoYXBlezEwfXtcbWFnc3RlcDF9Citcc2V0Zm9udFxkZWZiZlxiZnNoYXBlezEwfXtcbWFnc3RlcDF9e09UMX0KK1xzZXRmb250XGRlZnR0XHR0c2hhcGV7MTB9e1xtYWdzdGVwMX17T1QxVFR9Citcc2V0Zm9udFxkZWZ0dHNsXHR0c2xzaGFwZXsxMH17XG1hZ3N0ZXAxfXtPVDFUVH0KIFxkZWZcZGZ7XGxldFx0ZW50dD1cZGVmdHQgXGxldFx0ZW5iZiA9IFxkZWZiZiBcbGV0XHRlbnR0c2w9XGRlZnR0c2wgXGJmfQogCiAlIEZvbnRzIGZvciBpbmRpY2VzLCBmb290bm90ZXMsIHNtYWxsIGV4YW1wbGVzICg5cHQpLgogXGRlZlxzbWFsbG5vbWluYWxzaXplezlwdH0KLVxzZXRmb250XHNtYWxscm1ccm1zaGFwZXs5fXsxMDAwfQotXHNldGZvbnRcc21hbGx0dFx0dHNoYXBlezl9ezEwMDB9Ci1cc2V0Zm9udFxzbWFsbGJmXGJmc2hhcGV7MTB9ezkwMH0KLVxzZXRmb250XHNtYWxsaXRcaXRzaGFwZXs5fXsxMDAwfQotXHNldGZvbnRcc21hbGxzbFxzbHNoYXBlezl9ezEwMDB9Ci1cc2V0Zm9udFxzbWFsbHNmXHNmc2hhcGV7OX17MTAwMH0KLVxzZXRmb250XHNtYWxsc2Ncc2NzaGFwZXsxMH17OTAwfQotXHNldGZvbnRcc21hbGx0dHNsXHR0c2xzaGFwZXsxMH17OTAwfQorXHNldGZvbnRcc21hbGxybVxybXNoYXBlezl9ezEwMDB9e09UMX0KK1xzZXRmb250XHNtYWxsdHRcdHRzaGFwZXs5fXsxMDAwfXtPVDFUVH0KK1xzZXRmb250XHNtYWxsYmZcYmZzaGFwZXsxMH17OTAwfXtPVDF9Citcc2V0Zm9udFxzbWFsbGl0XGl0c2hhcGV7OX17MTAwMH17T1QxSVR9Citcc2V0Zm9udFxzbWFsbHNsXHNsc2hhcGV7OX17MTAwMH17T1QxfQorXHNldGZvbnRcc21hbGxzZlxzZnNoYXBlezl9ezEwMDB9e09UMX0KK1xzZXRmb250XHNtYWxsc2Ncc2NzaGFwZXsxMH17OTAwfXtPVDF9Citcc2V0Zm9udFxzbWFsbHR0c2xcdHRzbHNoYXBlezEwfXs5MDB9e09UMVRUfQogXGZvbnRcc21hbGxpPWNtbWk5CiBcZm9udFxzbWFsbHN5PWNtc3k5CitcZGVmXHNtYWxsZWNzaXplezA5MDB9CiAKICUgRm9udHMgZm9yIHNtYWxsIGV4YW1wbGVzICg4cHQpLgogXGRlZlxzbWFsbGVybm9taW5hbHNpemV7OHB0fQotXHNldGZvbnRcc21hbGxlcnJtXHJtc2hhcGV7OH17MTAwMH0KLVxzZXRmb250XHNtYWxsZXJ0dFx0dHNoYXBlezh9ezEwMDB9Ci1cc2V0Zm9udFxzbWFsbGVyYmZcYmZzaGFwZXsxMH17ODAwfQotXHNldGZvbnRcc21hbGxlcml0XGl0c2hhcGV7OH17MTAwMH0KLVxzZXRmb250XHNtYWxsZXJzbFxzbHNoYXBlezh9ezEwMDB9Ci1cc2V0Zm9udFxzbWFsbGVyc2Zcc2ZzaGFwZXs4fXsxMDAwfQotXHNldGZvbnRcc21hbGxlcnNjXHNjc2hhcGV7MTB9ezgwMH0KLVxzZXRmb250XHNtYWxsZXJ0dHNsXHR0c2xzaGFwZXsxMH17ODAwfQorXHNldGZvbnRcc21hbGxlcnJtXHJtc2hhcGV7OH17MTAwMH17T1QxfQorXHNldGZvbnRcc21hbGxlcnR0XHR0c2hhcGV7OH17MTAwMH17T1QxVFR9Citcc2V0Zm9udFxzbWFsbGVyYmZcYmZzaGFwZXsxMH17ODAwfXtPVDF9Citcc2V0Zm9udFxzbWFsbGVyaXRcaXRzaGFwZXs4fXsxMDAwfXtPVDFJVH0KK1xzZXRmb250XHNtYWxsZXJzbFxzbHNoYXBlezh9ezEwMDB9e09UMX0KK1xzZXRmb250XHNtYWxsZXJzZlxzZnNoYXBlezh9ezEwMDB9e09UMX0KK1xzZXRmb250XHNtYWxsZXJzY1xzY3NoYXBlezEwfXs4MDB9e09UMX0KK1xzZXRmb250XHNtYWxsZXJ0dHNsXHR0c2xzaGFwZXsxMH17ODAwfXtPVDFUVH0KIFxmb250XHNtYWxsZXJpPWNtbWk4CiBcZm9udFxzbWFsbGVyc3k9Y21zeTgKK1xkZWZcc21hbGxlcmVjc2l6ZXswODAwfQogCiAlIEZvbnRzIGZvciB0aXRsZSBwYWdlICgyMC40cHQpOgogXGRlZlx0aXRsZW5vbWluYWxzaXplezIwcHR9Ci1cc2V0Zm9udFx0aXRsZXJtXHJtYnNoYXBlezEyfXtcbWFnc3RlcDN9Ci1cc2V0Zm9udFx0aXRsZWl0XGl0YnNoYXBlezEwfXtcbWFnc3RlcDR9Ci1cc2V0Zm9udFx0aXRsZXNsXHNsYnNoYXBlezEwfXtcbWFnc3RlcDR9Ci1cc2V0Zm9udFx0aXRsZXR0XHR0YnNoYXBlezEyfXtcbWFnc3RlcDN9Ci1cc2V0Zm9udFx0aXRsZXR0c2xcdHRzbHNoYXBlezEwfXtcbWFnc3RlcDR9Ci1cc2V0Zm9udFx0aXRsZXNmXHNmYnNoYXBlezE3fXtcbWFnc3RlcDF9Citcc2V0Zm9udFx0aXRsZXJtXHJtYnNoYXBlezEyfXtcbWFnc3RlcDN9e09UMX0KK1xzZXRmb250XHRpdGxlaXRcaXRic2hhcGV7MTB9e1xtYWdzdGVwNH17T1QxSVR9Citcc2V0Zm9udFx0aXRsZXNsXHNsYnNoYXBlezEwfXtcbWFnc3RlcDR9e09UMX0KK1xzZXRmb250XHRpdGxldHRcdHRic2hhcGV7MTJ9e1xtYWdzdGVwM317T1QxVFR9Citcc2V0Zm9udFx0aXRsZXR0c2xcdHRzbHNoYXBlezEwfXtcbWFnc3RlcDR9e09UMVRUfQorXHNldGZvbnRcdGl0bGVzZlxzZmJzaGFwZXsxN317XG1hZ3N0ZXAxfXtPVDF9CiBcbGV0XHRpdGxlYmY9XHRpdGxlcm0KLVxzZXRmb250XHRpdGxlc2Ncc2Nic2hhcGV7MTB9e1xtYWdzdGVwNH0KK1xzZXRmb250XHRpdGxlc2Ncc2Nic2hhcGV7MTB9e1xtYWdzdGVwNH17T1QxfQogXGZvbnRcdGl0bGVpPWNtbWkxMiBzY2FsZWQgXG1hZ3N0ZXAzCiBcZm9udFx0aXRsZXN5PWNtc3kxMCBzY2FsZWQgXG1hZ3N0ZXA0Ci1cZGVmXGF1dGhvcnJte1xzZWNybX0KLVxkZWZcYXV0aG9ydHR7XHNlY3R0fQorXGRlZlx0aXRsZWVjc2l6ZXsyMDc0fQogCiAlIENoYXB0ZXIgKGFuZCB1bm51bWJlcmVkKSBmb250cyAoMTcuMjhwdCkuCiBcZGVmXGNoYXBub21pbmFsc2l6ZXsxN3B0fQotXHNldGZvbnRcY2hhcHJtXHJtYnNoYXBlezEyfXtcbWFnc3RlcDJ9Ci1cc2V0Zm9udFxjaGFwaXRcaXRic2hhcGV7MTB9e1xtYWdzdGVwM30KLVxzZXRmb250XGNoYXBzbFxzbGJzaGFwZXsxMH17XG1hZ3N0ZXAzfQotXHNldGZvbnRcY2hhcHR0XHR0YnNoYXBlezEyfXtcbWFnc3RlcDJ9Ci1cc2V0Zm9udFxjaGFwdHRzbFx0dHNsc2hhcGV7MTB9e1xtYWdzdGVwM30KLVxzZXRmb250XGNoYXBzZlxzZmJzaGFwZXsxN317MTAwMH0KK1xzZXRmb250XGNoYXBybVxybWJzaGFwZXsxMn17XG1hZ3N0ZXAyfXtPVDF9Citcc2V0Zm9udFxjaGFwaXRcaXRic2hhcGV7MTB9e1xtYWdzdGVwM317T1QxSVR9Citcc2V0Zm9udFxjaGFwc2xcc2xic2hhcGV7MTB9e1xtYWdzdGVwM317T1QxfQorXHNldGZvbnRcY2hhcHR0XHR0YnNoYXBlezEyfXtcbWFnc3RlcDJ9e09UMVRUfQorXHNldGZvbnRcY2hhcHR0c2xcdHRzbHNoYXBlezEwfXtcbWFnc3RlcDN9e09UMVRUfQorXHNldGZvbnRcY2hhcHNmXHNmYnNoYXBlezE3fXsxMDAwfXtPVDF9CiBcbGV0XGNoYXBiZj1cY2hhcHJtCi1cc2V0Zm9udFxjaGFwc2Ncc2Nic2hhcGV7MTB9e1xtYWdzdGVwM30KK1xzZXRmb250XGNoYXBzY1xzY2JzaGFwZXsxMH17XG1hZ3N0ZXAzfXtPVDF9CiBcZm9udFxjaGFwaT1jbW1pMTIgc2NhbGVkIFxtYWdzdGVwMgogXGZvbnRcY2hhcHN5PWNtc3kxMCBzY2FsZWQgXG1hZ3N0ZXAzCitcZGVmXGNoYXBlY3NpemV7MTcyOH0KIAogJSBTZWN0aW9uIGZvbnRzICgxNC40cHQpLgogXGRlZlxzZWNub21pbmFsc2l6ZXsxNHB0fQotXHNldGZvbnRcc2Vjcm1ccm1ic2hhcGV7MTJ9e1xtYWdzdGVwMX0KLVxzZXRmb250XHNlY2l0XGl0YnNoYXBlezEwfXtcbWFnc3RlcDJ9Ci1cc2V0Zm9udFxzZWNzbFxzbGJzaGFwZXsxMH17XG1hZ3N0ZXAyfQotXHNldGZvbnRcc2VjdHRcdHRic2hhcGV7MTJ9e1xtYWdzdGVwMX0KLVxzZXRmb250XHNlY3R0c2xcdHRzbHNoYXBlezEwfXtcbWFnc3RlcDJ9Ci1cc2V0Zm9udFxzZWNzZlxzZmJzaGFwZXsxMn17XG1hZ3N0ZXAxfQorXHNldGZvbnRcc2Vjcm1ccm1ic2hhcGV7MTJ9e1xtYWdzdGVwMX17T1QxfQorXHNldGZvbnRcc2VjaXRcaXRic2hhcGV7MTB9e1xtYWdzdGVwMn17T1QxSVR9Citcc2V0Zm9udFxzZWNzbFxzbGJzaGFwZXsxMH17XG1hZ3N0ZXAyfXtPVDF9Citcc2V0Zm9udFxzZWN0dFx0dGJzaGFwZXsxMn17XG1hZ3N0ZXAxfXtPVDFUVH0KK1xzZXRmb250XHNlY3R0c2xcdHRzbHNoYXBlezEwfXtcbWFnc3RlcDJ9e09UMVRUfQorXHNldGZvbnRcc2Vjc2Zcc2Zic2hhcGV7MTJ9e1xtYWdzdGVwMX17T1QxfQogXGxldFxzZWNiZlxzZWNybQotXHNldGZvbnRcc2Vjc2Ncc2Nic2hhcGV7MTB9e1xtYWdzdGVwMn0KK1xzZXRmb250XHNlY3NjXHNjYnNoYXBlezEwfXtcbWFnc3RlcDJ9e09UMX0KIFxmb250XHNlY2k9Y21taTEyIHNjYWxlZCBcbWFnc3RlcDEKIFxmb250XHNlY3N5PWNtc3kxMCBzY2FsZWQgXG1hZ3N0ZXAyCitcZGVmXHNlY2Vjc2l6ZXsxNDQwfQogCiAlIFN1YnNlY3Rpb24gZm9udHMgKDEzLjE1cHQpLgogXGRlZlxzc2Vjbm9taW5hbHNpemV7MTNwdH0KLVxzZXRmb250XHNzZWNybVxybWJzaGFwZXsxMn17XG1hZ3N0ZXBoYWxmfQotXHNldGZvbnRcc3NlY2l0XGl0YnNoYXBlezEwfXsxMzE1fQotXHNldGZvbnRcc3NlY3NsXHNsYnNoYXBlezEwfXsxMzE1fQotXHNldGZvbnRcc3NlY3R0XHR0YnNoYXBlezEyfXtcbWFnc3RlcGhhbGZ9Ci1cc2V0Zm9udFxzc2VjdHRzbFx0dHNsc2hhcGV7MTB9ezEzMTV9Ci1cc2V0Zm9udFxzc2Vjc2Zcc2Zic2hhcGV7MTJ9e1xtYWdzdGVwaGFsZn0KK1xzZXRmb250XHNzZWNybVxybWJzaGFwZXsxMn17XG1hZ3N0ZXBoYWxmfXtPVDF9Citcc2V0Zm9udFxzc2VjaXRcaXRic2hhcGV7MTB9ezEzMTV9e09UMUlUfQorXHNldGZvbnRcc3NlY3NsXHNsYnNoYXBlezEwfXsxMzE1fXtPVDF9Citcc2V0Zm9udFxzc2VjdHRcdHRic2hhcGV7MTJ9e1xtYWdzdGVwaGFsZn17T1QxVFR9Citcc2V0Zm9udFxzc2VjdHRzbFx0dHNsc2hhcGV7MTB9ezEzMTV9e09UMVRUfQorXHNldGZvbnRcc3NlY3NmXHNmYnNoYXBlezEyfXtcbWFnc3RlcGhhbGZ9e09UMX0KIFxsZXRcc3NlY2JmXHNzZWNybQotXHNldGZvbnRcc3NlY3NjXHNjYnNoYXBlezEwfXsxMzE1fQorXHNldGZvbnRcc3NlY3NjXHNjYnNoYXBlezEwfXsxMzE1fXtPVDF9CiBcZm9udFxzc2VjaT1jbW1pMTIgc2NhbGVkIFxtYWdzdGVwaGFsZgogXGZvbnRcc3NlY3N5PWNtc3kxMCBzY2FsZWQgMTMxNQorXGRlZlxzc2VjZWNzaXplezEyMDB9CiAKICUgUmVkdWNlZCBmb250cyBmb3IgQGFjcm8gaW4gdGV4dCAoMTBwdCkuCiBcZGVmXHJlZHVjZWRub21pbmFsc2l6ZXsxMHB0fQotXHNldGZvbnRccmVkdWNlZHJtXHJtc2hhcGV7MTB9ezEwMDB9Ci1cc2V0Zm9udFxyZWR1Y2VkdHRcdHRzaGFwZXsxMH17MTAwMH0KLVxzZXRmb250XHJlZHVjZWRiZlxiZnNoYXBlezEwfXsxMDAwfQotXHNldGZvbnRccmVkdWNlZGl0XGl0c2hhcGV7MTB9ezEwMDB9Ci1cc2V0Zm9udFxyZWR1Y2Vkc2xcc2xzaGFwZXsxMH17MTAwMH0KLVxzZXRmb250XHJlZHVjZWRzZlxzZnNoYXBlezEwfXsxMDAwfQotXHNldGZvbnRccmVkdWNlZHNjXHNjc2hhcGV7MTB9ezEwMDB9Ci1cc2V0Zm9udFxyZWR1Y2VkdHRzbFx0dHNsc2hhcGV7MTB9ezEwMDB9Citcc2V0Zm9udFxyZWR1Y2Vkcm1ccm1zaGFwZXsxMH17MTAwMH17T1QxfQorXHNldGZvbnRccmVkdWNlZHR0XHR0c2hhcGV7MTB9ezEwMDB9e09UMVRUfQorXHNldGZvbnRccmVkdWNlZGJmXGJmc2hhcGV7MTB9ezEwMDB9e09UMX0KK1xzZXRmb250XHJlZHVjZWRpdFxpdHNoYXBlezEwfXsxMDAwfXtPVDFJVH0KK1xzZXRmb250XHJlZHVjZWRzbFxzbHNoYXBlezEwfXsxMDAwfXtPVDF9Citcc2V0Zm9udFxyZWR1Y2Vkc2Zcc2ZzaGFwZXsxMH17MTAwMH17T1QxfQorXHNldGZvbnRccmVkdWNlZHNjXHNjc2hhcGV7MTB9ezEwMDB9e09UMX0KK1xzZXRmb250XHJlZHVjZWR0dHNsXHR0c2xzaGFwZXsxMH17MTAwMH17T1QxVFR9CiBcZm9udFxyZWR1Y2VkaT1jbW1pMTAKIFxmb250XHJlZHVjZWRzeT1jbXN5MTAKK1xkZWZccmVkdWNlZGVjc2l6ZXsxMDAwfQorCitcdGV4dGxlYWRpbmcgPSAxMy4ycHQgJSBsaW5lIHNwYWNpbmcgZm9yIDExcHQgQ00KK1x0ZXh0Zm9udHMgICAgICAgICAgICAlIHJlc2V0IHRoZSBjdXJyZW50IGZvbnRzCitccm0KK30gJSBlbmQgb2YgMTFwdCB0ZXh0IGZvbnQgc2l6ZSBkZWZpbml0aW9ucywgXGRlZmluZXRleHRmb250c2l6ZXhpCisKKworJSBEZWZpbml0aW9ucyB0byBtYWtlIHRoZSBtYWluIHRleHQgYmUgMTBwdCBDb21wdXRlciBNb2Rlcm4sIHdpdGgKKyUgc2VjdGlvbiwgY2hhcHRlciwgZXRjLiwgc2l6ZXMgZm9sbG93aW5nIHN1aXQuICBUaGlzIGlzIGZvciB0aGUgR05VCislIFByZXNzIHByaW50aW5nIG9mIHRoZSBFbWFjcyAyMiBtYW51YWwuICBNYXliZSBvdGhlciBtYW51YWxzIGluIHRoZQorJSBmdXR1cmUuICBVc2VkIHdpdGggQHNtYWxsYm9vaywgd2hpY2ggc2V0cyB0aGUgbGVhZGluZyB0byAxMnB0LgorJQorXGRlZlxkZWZpbmV0ZXh0Zm9udHNpemV4eyUKKyUgVGV4dCBmb250cyAoMTBwdCkuCitcZGVmXHRleHRub21pbmFsc2l6ZXsxMHB0fQorXGVkZWZcbWFpbm1hZ3N0ZXB7MTAwMH0KK1xzZXRmb250XHRleHRybVxybXNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9e09UMX0KK1xzZXRmb250XHRleHR0dFx0dHNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9e09UMVRUfQorXHNldGZvbnRcdGV4dGJmXGJmc2hhcGV7MTB9e1xtYWlubWFnc3RlcH17T1QxfQorXHNldGZvbnRcdGV4dGl0XGl0c2hhcGV7MTB9e1xtYWlubWFnc3RlcH17T1QxSVR9Citcc2V0Zm9udFx0ZXh0c2xcc2xzaGFwZXsxMH17XG1haW5tYWdzdGVwfXtPVDF9Citcc2V0Zm9udFx0ZXh0c2Zcc2ZzaGFwZXsxMH17XG1haW5tYWdzdGVwfXtPVDF9Citcc2V0Zm9udFx0ZXh0c2Ncc2NzaGFwZXsxMH17XG1haW5tYWdzdGVwfXtPVDF9Citcc2V0Zm9udFx0ZXh0dHRzbFx0dHNsc2hhcGV7MTB9e1xtYWlubWFnc3RlcH17T1QxVFR9CitcZm9udFx0ZXh0aT1jbW1pMTAgc2NhbGVkIFxtYWlubWFnc3RlcAorXGZvbnRcdGV4dHN5PWNtc3kxMCBzY2FsZWQgXG1haW5tYWdzdGVwCitcZGVmXHRleHRlY3NpemV7MTAwMH0KKworJSBBIGZldyBmb250cyBmb3IgQGRlZnVuIG5hbWVzIGFuZCBhcmdzLgorXHNldGZvbnRcZGVmYmZcYmZzaGFwZXsxMH17XG1hZ3N0ZXBoYWxmfXtPVDF9Citcc2V0Zm9udFxkZWZ0dFx0dHNoYXBlezEwfXtcbWFnc3RlcGhhbGZ9e09UMVRUfQorXHNldGZvbnRcZGVmdHRzbFx0dHNsc2hhcGV7MTB9e1xtYWdzdGVwaGFsZn17T1QxVFR9CitcZGVmXGRme1xsZXRcdGVudHQ9XGRlZnR0IFxsZXRcdGVuYmYgPSBcZGVmYmYgXGxldFx0ZW50dHNsPVxkZWZ0dHNsIFxiZn0KKworJSBGb250cyBmb3IgaW5kaWNlcywgZm9vdG5vdGVzLCBzbWFsbCBleGFtcGxlcyAoOXB0KS4KK1xkZWZcc21hbGxub21pbmFsc2l6ZXs5cHR9Citcc2V0Zm9udFxzbWFsbHJtXHJtc2hhcGV7OX17MTAwMH17T1QxfQorXHNldGZvbnRcc21hbGx0dFx0dHNoYXBlezl9ezEwMDB9e09UMVRUfQorXHNldGZvbnRcc21hbGxiZlxiZnNoYXBlezEwfXs5MDB9e09UMX0KK1xzZXRmb250XHNtYWxsaXRcaXRzaGFwZXs5fXsxMDAwfXtPVDFJVH0KK1xzZXRmb250XHNtYWxsc2xcc2xzaGFwZXs5fXsxMDAwfXtPVDF9Citcc2V0Zm9udFxzbWFsbHNmXHNmc2hhcGV7OX17MTAwMH17T1QxfQorXHNldGZvbnRcc21hbGxzY1xzY3NoYXBlezEwfXs5MDB9e09UMX0KK1xzZXRmb250XHNtYWxsdHRzbFx0dHNsc2hhcGV7MTB9ezkwMH17T1QxVFR9CitcZm9udFxzbWFsbGk9Y21taTkKK1xmb250XHNtYWxsc3k9Y21zeTkKK1xkZWZcc21hbGxlY3NpemV7MDkwMH0KKworJSBGb250cyBmb3Igc21hbGwgZXhhbXBsZXMgKDhwdCkuCitcZGVmXHNtYWxsZXJub21pbmFsc2l6ZXs4cHR9Citcc2V0Zm9udFxzbWFsbGVycm1ccm1zaGFwZXs4fXsxMDAwfXtPVDF9Citcc2V0Zm9udFxzbWFsbGVydHRcdHRzaGFwZXs4fXsxMDAwfXtPVDFUVH0KK1xzZXRmb250XHNtYWxsZXJiZlxiZnNoYXBlezEwfXs4MDB9e09UMX0KK1xzZXRmb250XHNtYWxsZXJpdFxpdHNoYXBlezh9ezEwMDB9e09UMUlUfQorXHNldGZvbnRcc21hbGxlcnNsXHNsc2hhcGV7OH17MTAwMH17T1QxfQorXHNldGZvbnRcc21hbGxlcnNmXHNmc2hhcGV7OH17MTAwMH17T1QxfQorXHNldGZvbnRcc21hbGxlcnNjXHNjc2hhcGV7MTB9ezgwMH17T1QxfQorXHNldGZvbnRcc21hbGxlcnR0c2xcdHRzbHNoYXBlezEwfXs4MDB9e09UMVRUfQorXGZvbnRcc21hbGxlcmk9Y21taTgKK1xmb250XHNtYWxsZXJzeT1jbXN5OAorXGRlZlxzbWFsbGVyZWNzaXplezA4MDB9CisKKyUgRm9udHMgZm9yIHRpdGxlIHBhZ2UgKDIwLjRwdCk6CitcZGVmXHRpdGxlbm9taW5hbHNpemV7MjBwdH0KK1xzZXRmb250XHRpdGxlcm1ccm1ic2hhcGV7MTJ9e1xtYWdzdGVwM317T1QxfQorXHNldGZvbnRcdGl0bGVpdFxpdGJzaGFwZXsxMH17XG1hZ3N0ZXA0fXtPVDFJVH0KK1xzZXRmb250XHRpdGxlc2xcc2xic2hhcGV7MTB9e1xtYWdzdGVwNH17T1QxfQorXHNldGZvbnRcdGl0bGV0dFx0dGJzaGFwZXsxMn17XG1hZ3N0ZXAzfXtPVDFUVH0KK1xzZXRmb250XHRpdGxldHRzbFx0dHNsc2hhcGV7MTB9e1xtYWdzdGVwNH17T1QxVFR9Citcc2V0Zm9udFx0aXRsZXNmXHNmYnNoYXBlezE3fXtcbWFnc3RlcDF9e09UMX0KK1xsZXRcdGl0bGViZj1cdGl0bGVybQorXHNldGZvbnRcdGl0bGVzY1xzY2JzaGFwZXsxMH17XG1hZ3N0ZXA0fXtPVDF9CitcZm9udFx0aXRsZWk9Y21taTEyIHNjYWxlZCBcbWFnc3RlcDMKK1xmb250XHRpdGxlc3k9Y21zeTEwIHNjYWxlZCBcbWFnc3RlcDQKK1xkZWZcdGl0bGVlY3NpemV7MjA3NH0KKworJSBDaGFwdGVyIGZvbnRzICgxNC40cHQpLgorXGRlZlxjaGFwbm9taW5hbHNpemV7MTRwdH0KK1xzZXRmb250XGNoYXBybVxybWJzaGFwZXsxMn17XG1hZ3N0ZXAxfXtPVDF9Citcc2V0Zm9udFxjaGFwaXRcaXRic2hhcGV7MTB9e1xtYWdzdGVwMn17T1QxSVR9Citcc2V0Zm9udFxjaGFwc2xcc2xic2hhcGV7MTB9e1xtYWdzdGVwMn17T1QxfQorXHNldGZvbnRcY2hhcHR0XHR0YnNoYXBlezEyfXtcbWFnc3RlcDF9e09UMVRUfQorXHNldGZvbnRcY2hhcHR0c2xcdHRzbHNoYXBlezEwfXtcbWFnc3RlcDJ9e09UMVRUfQorXHNldGZvbnRcY2hhcHNmXHNmYnNoYXBlezEyfXtcbWFnc3RlcDF9e09UMX0KK1xsZXRcY2hhcGJmXGNoYXBybQorXHNldGZvbnRcY2hhcHNjXHNjYnNoYXBlezEwfXtcbWFnc3RlcDJ9e09UMX0KK1xmb250XGNoYXBpPWNtbWkxMiBzY2FsZWQgXG1hZ3N0ZXAxCitcZm9udFxjaGFwc3k9Y21zeTEwIHNjYWxlZCBcbWFnc3RlcDIKK1xkZWZcY2hhcGVjc2l6ZXsxNDQwfQorCislIFNlY3Rpb24gZm9udHMgKDEycHQpLgorXGRlZlxzZWNub21pbmFsc2l6ZXsxMnB0fQorXHNldGZvbnRcc2Vjcm1ccm1ic2hhcGV7MTJ9ezEwMDB9e09UMX0KK1xzZXRmb250XHNlY2l0XGl0YnNoYXBlezEwfXtcbWFnc3RlcDF9e09UMUlUfQorXHNldGZvbnRcc2Vjc2xcc2xic2hhcGV7MTB9e1xtYWdzdGVwMX17T1QxfQorXHNldGZvbnRcc2VjdHRcdHRic2hhcGV7MTJ9ezEwMDB9e09UMVRUfQorXHNldGZvbnRcc2VjdHRzbFx0dHNsc2hhcGV7MTB9e1xtYWdzdGVwMX17T1QxVFR9Citcc2V0Zm9udFxzZWNzZlxzZmJzaGFwZXsxMn17MTAwMH17T1QxfQorXGxldFxzZWNiZlxzZWNybQorXHNldGZvbnRcc2Vjc2Ncc2Nic2hhcGV7MTB9e1xtYWdzdGVwMX17T1QxfQorXGZvbnRcc2VjaT1jbW1pMTIKK1xmb250XHNlY3N5PWNtc3kxMCBzY2FsZWQgXG1hZ3N0ZXAxCitcZGVmXHNlY2Vjc2l6ZXsxMjAwfQorCislIFN1YnNlY3Rpb24gZm9udHMgKDEwcHQpLgorXGRlZlxzc2Vjbm9taW5hbHNpemV7MTBwdH0KK1xzZXRmb250XHNzZWNybVxybWJzaGFwZXsxMH17MTAwMH17T1QxfQorXHNldGZvbnRcc3NlY2l0XGl0YnNoYXBlezEwfXsxMDAwfXtPVDFJVH0KK1xzZXRmb250XHNzZWNzbFxzbGJzaGFwZXsxMH17MTAwMH17T1QxfQorXHNldGZvbnRcc3NlY3R0XHR0YnNoYXBlezEwfXsxMDAwfXtPVDFUVH0KK1xzZXRmb250XHNzZWN0dHNsXHR0c2xzaGFwZXsxMH17MTAwMH17T1QxVFR9Citcc2V0Zm9udFxzc2Vjc2Zcc2Zic2hhcGV7MTB9ezEwMDB9e09UMX0KK1xsZXRcc3NlY2JmXHNzZWNybQorXHNldGZvbnRcc3NlY3NjXHNjYnNoYXBlezEwfXsxMDAwfXtPVDF9CitcZm9udFxzc2VjaT1jbW1pMTAKK1xmb250XHNzZWNzeT1jbXN5MTAKK1xkZWZcc3NlY2Vjc2l6ZXsxMDAwfQorCislIFJlZHVjZWQgZm9udHMgZm9yIEBhY3JvIGluIHRleHQgKDlwdCkuCitcZGVmXHJlZHVjZWRub21pbmFsc2l6ZXs5cHR9Citcc2V0Zm9udFxyZWR1Y2Vkcm1ccm1zaGFwZXs5fXsxMDAwfXtPVDF9Citcc2V0Zm9udFxyZWR1Y2VkdHRcdHRzaGFwZXs5fXsxMDAwfXtPVDFUVH0KK1xzZXRmb250XHJlZHVjZWRiZlxiZnNoYXBlezEwfXs5MDB9e09UMX0KK1xzZXRmb250XHJlZHVjZWRpdFxpdHNoYXBlezl9ezEwMDB9e09UMUlUfQorXHNldGZvbnRccmVkdWNlZHNsXHNsc2hhcGV7OX17MTAwMH17T1QxfQorXHNldGZvbnRccmVkdWNlZHNmXHNmc2hhcGV7OX17MTAwMH17T1QxfQorXHNldGZvbnRccmVkdWNlZHNjXHNjc2hhcGV7MTB9ezkwMH17T1QxfQorXHNldGZvbnRccmVkdWNlZHR0c2xcdHRzbHNoYXBlezEwfXs5MDB9e09UMVRUfQorXGZvbnRccmVkdWNlZGk9Y21taTkKK1xmb250XHJlZHVjZWRzeT1jbXN5OQorXGRlZlxyZWR1Y2VkZWNzaXplezA5MDB9CisKK1xkaXZpZGVccGFyc2tpcCBieSAyICAlIHJlZHVjZSBzcGFjZSBiZXR3ZWVuIHBhcmFncmFwaHMKK1x0ZXh0bGVhZGluZyA9IDEycHQgICAlIGxpbmUgc3BhY2luZyBmb3IgMTBwdCBDTQorXHRleHRmb250cyAgICAgICAgICAgICUgcmVzZXQgdGhlIGN1cnJlbnQgZm9udHMKK1xybQorfSAlIGVuZCBvZiAxMHB0IHRleHQgZm9udCBzaXplIGRlZmluaXRpb25zLCBcZGVmaW5ldGV4dGZvbnRzaXpleAorCisKKyUgV2UgcHJvdmlkZSB0aGUgdXNlci1sZXZlbCBjb21tYW5kCislICAgQGZvbnR0ZXh0c2l6ZSAxMAorJSAob3IgMTEpIHRvIHJlZGVmaW5lIHRoZSB0ZXh0IGZvbnQgc2l6ZS4gIHB0IGlzIGFzc3VtZWQuCislCitcZGVmXHhpd29yZHsxMX0KK1xkZWZceHdvcmR7MTB9CitcZGVmXHh3b3JkcHR7MTBwdH0KKyUKK1xwYXJzZWFyZ2RlZlxmb250dGV4dHNpemV7JQorICBcZGVmXHRleHRzaXplYXJneyMxfSUKKyAgJVx3bG9ne2RvaW5nIEBmb250dGV4dHNpemUgXHRleHRzaXplYXJnfSUKKyAgJQorICAlIFNldCBcZ2xvYmFsZGVmcyBzbyB0aGF0IGRvY3VtZW50cyBjYW4gdXNlIHRoaXMgaW5zaWRlIEB0ZXgsIHNpbmNlCisgICUgbWFrZWluZm8gNC44IGRvZXMgbm90IHN1cHBvcnQgaXQsIGJ1dCB3ZSBuZWVkIGl0IG5vbmV0aGVsZXNzLgorICAlCisgXGJlZ2luZ3JvdXAgXGdsb2JhbGRlZnM9MQorICBcaWZ4XHRleHRzaXplYXJnXHh3b3JkIFxkZWZpbmV0ZXh0Zm9udHNpemV4CisgIFxlbHNlIFxpZnhcdGV4dHNpemVhcmdceGl3b3JkIFxkZWZpbmV0ZXh0Zm9udHNpemV4aQorICBcZWxzZQorICAgIFxlcnJoZWxwPVxFTXNpbXBsZQorICAgIFxlcnJtZXNzYWdle0Bmb250dGV4dHNpemUgb25seSBzdXBwb3J0cyBgMTAnIG9yIGAxMScsIG5vdCBgXHRleHRzaXplYXJnJ30KKyAgXGZpXGZpCisgXGVuZGdyb3VwCit9CisKIAogJSBJbiBvcmRlciBmb3IgdGhlIGZvbnQgY2hhbmdlcyB0byBhZmZlY3QgbW9zdCBtYXRoIHN5bWJvbHMgYW5kIGxldHRlcnMsCiAlIHdlIGhhdmUgdG8gZGVmaW5lIHRoZSBcdGV4dGZvbnQgb2YgdGhlIHN0YW5kYXJkIGZhbWlsaWVzLiAgU2luY2UKQEAgLTE2ODEsOCArMjEyNCw4IEBACiAgIFxsZXRcdGVudHRzbD1cdGl0bGV0dHNsCiAgIFxkZWZcY3VyZm9udHNpemV7dGl0bGV9JQogICBcZGVmXGxzaXple2NoYXB9XGRlZlxsbGxzaXple3N1YnNlY30lCi0gIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3syNXB0fX0KLVxkZWZcdGl0bGVmb250IzF7e1x0aXRsZWZvbnRzXHJtICMxfX0KKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5nezI3cHR9fQorXGRlZlx0aXRsZWZvbnQjMXt7XHRpdGxlZm9udHNccm1pc2JvbGQgIzF9fQogXGRlZlxjaGFwZm9udHN7JQogICBcbGV0XHRlbnJtPVxjaGFwcm0gXGxldFx0ZW5pdD1cY2hhcGl0IFxsZXRcdGVuc2w9XGNoYXBzbAogICBcbGV0XHRlbmJmPVxjaGFwYmYgXGxldFx0ZW50dD1cY2hhcHR0IFxsZXRcc21hbGxjYXBzPVxjaGFwc2MKQEAgLTE3MzMsNiArMjE3NiwxNiBAQAogICBcZGVmXGxzaXple3NtYWxsZXJ9XGRlZlxsbGxzaXple3NtYWxsZXJ9JQogICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7OS41cHR9fQogCislIEZvbnRzIGZvciBzaG9ydCB0YWJsZSBvZiBjb250ZW50cy4KK1xzZXRmb250XHNob3J0Y29udHJtXHJtc2hhcGV7MTJ9ezEwMDB9e09UMX0KK1xzZXRmb250XHNob3J0Y29udGJmXGJmc2hhcGV7MTB9e1xtYWdzdGVwMX17T1QxfSAgJSBubyBjbWIxMgorXHNldGZvbnRcc2hvcnRjb250c2xcc2xzaGFwZXsxMn17MTAwMH17T1QxfQorXHNldGZvbnRcc2hvcnRjb250dHRcdHRzaGFwZXsxMn17MTAwMH17T1QxVFR9CisKKyUgRGVmaW5lIHRoZXNlIGp1c3Qgc28gdGhleSBjYW4gYmUgZWFzaWx5IGNoYW5nZWQgZm9yIG90aGVyIGZvbnRzLgorXGRlZlxhbmdsZWxlZnR7JFxsYW5nbGUkfQorXGRlZlxhbmdsZXJpZ2h0eyRccmFuZ2xlJH0KKwogJSBTZXQgdGhlIGZvbnRzIHRvIHVzZSB3aXRoIHRoZSBAc21hbGwuLi4gZW52aXJvbm1lbnRzLgogXGxldFxzbWFsbGV4YW1wbGVmb250cyA9IFxzbWFsbGZvbnRzCiAKQEAgLTE3NDYsNTMgKzIxOTksMjEzIEBACiAlCiAlIEJ5IHRoZSB3YXksIGZvciBjb21wYXJpc29uLCBoZXJlJ3Mgd2hhdCBmaXRzIHdpdGggQGV4YW1wbGUgKDEwcHQpOgogJSAgIDguNXgxMT03MSAgc21hbGxib29rPTYwICBhND03NSAgYTU9NTgKLSUKLSUgSSB3aXNoIHRoZSBVU0EgdXNlZCBBNCBwYXBlci4KICUgLS1rYXJsLCAyNGphbjAzLgogCi0KICUgU2V0IHVwIHRoZSBkZWZhdWx0IGZvbnRzLCBzbyB3ZSBjYW4gdXNlIHRoZW0gZm9yIGNyZWF0aW5nIGJveGVzLgogJQotXHRleHRmb250cyBccm0KK1xkZWZpbmV0ZXh0Zm9udHNpemV4aQogCi0lIERlZmluZSB0aGVzZSBzbyB0aGV5IGNhbiBiZSBlYXNpbHkgY2hhbmdlZCBmb3Igb3RoZXIgZm9udHMuCi1cZGVmXGFuZ2xlbGVmdHskXGxhbmdsZSR9Ci1cZGVmXGFuZ2xlcmlnaHR7JFxyYW5nbGUkfQorCitcbWVzc2FnZXttYXJrdXAsfQorCislIENoZWNrIGlmIHdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSB0eXBld3JpdGVyIGZvbnQuICBTaW5jZSBhbGwgdGhlCislIENvbXB1dGVyIE1vZGVybiB0eXBld3JpdGVyIGZvbnRzIGhhdmUgemVybyBpbnRlcndvcmQgc3RyZXRjaCAoYW5kCislIHNocmluayksIGFuZCBpdCBpcyByZWFzb25hYmxlIHRvIGV4cGVjdCBhbGwgdHlwZXdyaXRlciBmb250cyB0byBoYXZlCislIHRoaXMgcHJvcGVydHksIHdlIGNhbiBjaGVjayB0aGF0IGZvbnQgcGFyYW1ldGVyLgorJQorXGRlZlxpZm1vbm9zcGFjZXtcaWZkaW1cZm9udGRpbWVuM1xmb250PTBwdCB9CisKKyUgTWFya3VwIHN0eWxlIGluZnJhc3RydWN0dXJlLiAgXGRlZm1hcmt1cHN0eWxlc2V0dXBcSU5JVE1BQ1JPIHdpbGwKKyUgZGVmaW5lIGFuZCByZWdpc3RlciBcSU5JVE1BQ1JPIHRvIGJlIGNhbGxlZCBvbiBtYXJrdXAgc3R5bGUgY2hhbmdlcy4KKyUgXElOSVRNQUNSTyBjYW4gY2hlY2sgXGN1cnJlbnRtYXJrdXBzdHlsZSBmb3IgdGhlIGlubmVybW9zdAorJSBzdHlsZSBhbmQgdGhlIHNldCBvZiBcaWZtYXJrdXBTVFlMRSBzd2l0Y2hlcyBmb3IgYWxsIHN0eWxlcworJSBjdXJyZW50bHkgaW4gZWZmZWN0LgorXG5ld2lmXGlmbWFya3VwdmFyCitcbmV3aWZcaWZtYXJrdXBzYW1wCitcbmV3aWZcaWZtYXJrdXBrZXkKKyVcbmV3aWZcaWZtYXJrdXBmaWxlICUgQGZpbGUgPT0gQHNhbXAuCislXG5ld2lmXGlmbWFya3Vwb3B0aW9uICUgQG9wdGlvbiA9PSBAc2FtcC4KK1xuZXdpZlxpZm1hcmt1cGNvZGUKK1xuZXdpZlxpZm1hcmt1cGtiZAorJVxuZXdpZlxpZm1hcmt1cGVudiAlIEBlbnYgPT0gQGNvZGUuCislXG5ld2lmXGlmbWFya3VwY29tbWFuZCAlIEBjb21tYW5kID09IEBjb2RlLgorXG5ld2lmXGlmbWFya3VwdGV4ICUgQHRleCAoYW5kIHBhcnQgb2YgQG1hdGgsIGZvciBub3cpLgorXG5ld2lmXGlmbWFya3VwZXhhbXBsZQorXG5ld2lmXGlmbWFya3VwdmVyYgorXG5ld2lmXGlmbWFya3VwdmVyYmF0aW0KKworXGxldFxjdXJyZW50bWFya3Vwc3R5bGVcZW1wdHkKKworXGRlZlxzZXR1cG1hcmt1cHN0eWxlIzF7JQorICBcY3NuYW1lIG1hcmt1cCMxdHJ1ZVxlbmRjc25hbWUKKyAgXGRlZlxjdXJyZW50bWFya3Vwc3R5bGV7IzF9JQorICBcbWFya3Vwc3R5bGVzZXR1cAorfQorCitcbGV0XG1hcmt1cHN0eWxlc2V0dXBcZW1wdHkKKworXGRlZlxkZWZtYXJrdXBzdHlsZXNldHVwIzF7JQorICBcZXhwYW5kYWZ0ZXJcZGVmXGV4cGFuZGFmdGVyXG1hcmt1cHN0eWxlc2V0dXAKKyAgICBcZXhwYW5kYWZ0ZXJ7XG1hcmt1cHN0eWxlc2V0dXAgIzF9JQorICBcZGVmIzElCit9CisKKyUgTWFya3VwIHN0eWxlIHNldHVwIGZvciBsZWZ0IGFuZCByaWdodCBxdW90ZXMuCitcZGVmbWFya3Vwc3R5bGVzZXR1cFxtYXJrdXBzZXR1cGxxeyUKKyAgXGV4cGFuZGFmdGVyXGxldFxleHBhbmRhZnRlciBcdGVtcAorICAgIFxjc25hbWUgbWFya3Vwc2V0dXBscVxjdXJyZW50bWFya3Vwc3R5bGVcZW5kY3NuYW1lCisgIFxpZnhcdGVtcFxyZWxheCBcbWFya3Vwc2V0dXBscWRlZmF1bHQgXGVsc2UgXHRlbXAgXGZpCit9CisKK1xkZWZtYXJrdXBzdHlsZXNldHVwXG1hcmt1cHNldHVwcnF7JQorICBcZXhwYW5kYWZ0ZXJcbGV0XGV4cGFuZGFmdGVyIFx0ZW1wCisgICAgXGNzbmFtZSBtYXJrdXBzZXR1cHJxXGN1cnJlbnRtYXJrdXBzdHlsZVxlbmRjc25hbWUKKyAgXGlmeFx0ZW1wXHJlbGF4IFxtYXJrdXBzZXR1cHJxZGVmYXVsdCBcZWxzZSBcdGVtcCBcZmkKK30KKworeworXGNhdGNvZGVgXCc9XGFjdGl2ZQorXGNhdGNvZGVgXGA9XGFjdGl2ZQorCitcZ2RlZlxtYXJrdXBzZXR1cGxxZGVmYXVsdHtcbGV0YFxscX0KK1xnZGVmXG1hcmt1cHNldHVwcnFkZWZhdWx0e1xsZXQnXHJxfQorCitcZ2RlZlxtYXJrdXBzZXRjb2RlcXVvdGVsZWZ0e1xsZXRgXGNvZGVxdW90ZWxlZnR9CitcZ2RlZlxtYXJrdXBzZXRjb2RlcXVvdGVyaWdodHtcbGV0J1xjb2RlcXVvdGVyaWdodH0KK30KKworXGxldFxtYXJrdXBzZXR1cGxxY29kZSBcbWFya3Vwc2V0Y29kZXF1b3RlbGVmdAorXGxldFxtYXJrdXBzZXR1cHJxY29kZSBcbWFya3Vwc2V0Y29kZXF1b3RlcmlnaHQKKyUKK1xsZXRcbWFya3Vwc2V0dXBscWV4YW1wbGUgXG1hcmt1cHNldGNvZGVxdW90ZWxlZnQKK1xsZXRcbWFya3Vwc2V0dXBycWV4YW1wbGUgXG1hcmt1cHNldGNvZGVxdW90ZXJpZ2h0CislCitcbGV0XG1hcmt1cHNldHVwbHFrYmQgICAgIFxtYXJrdXBzZXRjb2RlcXVvdGVsZWZ0CitcbGV0XG1hcmt1cHNldHVwcnFrYmQgICAgIFxtYXJrdXBzZXRjb2RlcXVvdGVyaWdodAorJQorXGxldFxtYXJrdXBzZXR1cGxxc2FtcCBcbWFya3Vwc2V0Y29kZXF1b3RlbGVmdAorXGxldFxtYXJrdXBzZXR1cHJxc2FtcCBcbWFya3Vwc2V0Y29kZXF1b3RlcmlnaHQKKyUKK1xsZXRcbWFya3Vwc2V0dXBscXZlcmIgXG1hcmt1cHNldGNvZGVxdW90ZWxlZnQKK1xsZXRcbWFya3Vwc2V0dXBycXZlcmIgXG1hcmt1cHNldGNvZGVxdW90ZXJpZ2h0CislCitcbGV0XG1hcmt1cHNldHVwbHF2ZXJiYXRpbSBcbWFya3Vwc2V0Y29kZXF1b3RlbGVmdAorXGxldFxtYXJrdXBzZXR1cHJxdmVyYmF0aW0gXG1hcmt1cHNldGNvZGVxdW90ZXJpZ2h0CisKKyUgQWxsb3cgYW4gb3B0aW9uIHRvIG5vdCB1c2UgcmVndWxhciBkaXJlY3RlZCByaWdodCBxdW90ZS9hcG9zdHJvcGhlCislIChjaGFyIDB4MjcpLCBidXQgaW5zdGVhZCB0aGUgdW5kaXJlY3RlZCBxdW90ZSBmcm9tIGNtdHQgKGNoYXIgMHgwZCkuCislIFRoZSB1bmRpcmVjdGVkIHF1b3RlIGlzIHVnbHksIHNvIGRvbid0IG1ha2UgaXQgdGhlIGRlZmF1bHQsIGJ1dCBpdAorJSB3b3JrcyBmb3IgcGFzdGluZyB3aXRoIG1vcmUgcGRmIHZpZXdlcnMgKGF0IGxlYXN0IGV2aW5jZSksIHRoZQorJSBsaWx5cG9uZCBkZXZlbG9wZXJzIHJlcG9ydC4gIHhwZGYgZG9lcyB3b3JrIHdpdGggdGhlIHJlZ3VsYXIgMHgyNy4KKyUKK1xkZWZcY29kZXF1b3RlcmlnaHR7JQorICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBTRVR0eGljb2RlcXVvdGV1bmRpcmVjdGVkXGVuZGNzbmFtZVxyZWxheAorICAgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIFNFVGNvZGVxdW90ZXVuZGlyZWN0ZWRcZW5kY3NuYW1lXHJlbGF4CisgICAgICAnJQorICAgIFxlbHNlIFxjaGFyJzE1IFxmaQorICBcZWxzZSBcY2hhcicxNSBcZmkKK30KKyUKKyUgYW5kIGEgc2ltaWxhciBvcHRpb24gZm9yIHRoZSBsZWZ0IHF1b3RlIGNoYXIgdnMuIGEgZ3JhdmUgYWNjZW50LgorJSBNb2Rlcm4gZm9udHMgZGlzcGxheSBBU0NJSSAweDYwIGFzIGEgZ3JhdmUgYWNjZW50LCBzbyBzb21lIHBlb3BsZSBsaWtlCislIHRoZSBjb2RlIGVudmlyb25tZW50cyB0byBkbyBsaWtld2lzZS4KKyUKK1xkZWZcY29kZXF1b3RlbGVmdHslCisgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIFNFVHR4aWNvZGVxdW90ZWJhY2t0aWNrXGVuZGNzbmFtZVxyZWxheAorICAgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIFNFVGNvZGVxdW90ZWJhY2t0aWNrXGVuZGNzbmFtZVxyZWxheAorICAgICAgJSBbS251dGhdIHBwLiAzODAsMzgxLDM5MQorICAgICAgJSBccmVsYXggZGlzYWJsZXMgU3BhbmlzaCBsaWdhdHVyZXMgP2AgYW5kICFgIG9mIFx0dCBmb250LgorICAgICAgXHJlbGF4YCUKKyAgICBcZWxzZSBcY2hhcicyMiBcZmkKKyAgXGVsc2UgXGNoYXInMjIgXGZpCit9CisKKyUgQ29tbWFuZHMgdG8gc2V0IHRoZSBxdW90ZSBvcHRpb25zLgorJSAKK1xwYXJzZWFyZ2RlZlxjb2RlcXVvdGV1bmRpcmVjdGVkeyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXG9ud29yZAorICAgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIFNFVHR4aWNvZGVxdW90ZXVuZGlyZWN0ZWRcZW5kY3NuYW1lCisgICAgICA9IHQlCisgIFxlbHNlXGlmeFx0ZW1wXG9mZndvcmQKKyAgICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBTRVR0eGljb2RlcXVvdGV1bmRpcmVjdGVkXGVuZGNzbmFtZQorICAgICAgPSBccmVsYXgKKyAgXGVsc2UKKyAgICBcZXJyaGVscCA9IFxFTXNpbXBsZQorICAgIFxlcnJtZXNzYWdle1Vua25vd24gQGNvZGVxdW90ZXVuZGlyZWN0ZWQgdmFsdWUgYFx0ZW1wJywgbXVzdCBiZSBvbnxvZmZ9JQorICBcZmlcZmkKK30KKyUKK1xwYXJzZWFyZ2RlZlxjb2RlcXVvdGViYWNrdGlja3slCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGVtcFxvbndvcmQKKyAgICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBTRVR0eGljb2RlcXVvdGViYWNrdGlja1xlbmRjc25hbWUKKyAgICAgID0gdCUKKyAgXGVsc2VcaWZ4XHRlbXBcb2Zmd29yZAorICAgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIFNFVHR4aWNvZGVxdW90ZWJhY2t0aWNrXGVuZGNzbmFtZQorICAgICAgPSBccmVsYXgKKyAgXGVsc2UKKyAgICBcZXJyaGVscCA9IFxFTXNpbXBsZQorICAgIFxlcnJtZXNzYWdle1Vua25vd24gQGNvZGVxdW90ZWJhY2t0aWNrIHZhbHVlIGBcdGVtcCcsIG11c3QgYmUgb258b2ZmfSUKKyAgXGZpXGZpCit9CisKKyUgW0tudXRoXSBwcC4gMzgwLDM4MSwzOTEsIGRpc2FibGUgU3BhbmlzaCBsaWdhdHVyZXMgP2AgYW5kICFgIG9mIFx0dCBmb250LgorXGRlZlxub2xpZ2F0dXJlc3F1b3RlbGVmdHtccmVsYXhcbHF9CiAKICUgQ291bnQgZGVwdGggaW4gZm9udC1jaGFuZ2VzLCBmb3IgZXJyb3IgY2hlY2tzCiBcbmV3Y291bnRcZm9udGRlcHRoIFxmb250ZGVwdGg9MAogCi0lIEZvbnRzIGZvciBzaG9ydCB0YWJsZSBvZiBjb250ZW50cy4KLVxzZXRmb250XHNob3J0Y29udHJtXHJtc2hhcGV7MTJ9ezEwMDB9Ci1cc2V0Zm9udFxzaG9ydGNvbnRiZlxiZnNoYXBlezEwfXtcbWFnc3RlcDF9ICAlIG5vIGNtYjEyCi1cc2V0Zm9udFxzaG9ydGNvbnRzbFxzbHNoYXBlezEyfXsxMDAwfQotXHNldGZvbnRcc2hvcnRjb250dHRcdHRzaGFwZXsxMn17MTAwMH0KKyUgRm9udCBjb21tYW5kcy4KIAotJSUgQWRkIHNjcmliZS1saWtlIGZvbnQgZW52aXJvbm1lbnRzLCBwbHVzIEBsIGZvciBpbmxpbmUgbGlzcCAodXN1YWxseSBzYW5zCi0lJSBzZXJpZikgYW5kIEBpaSBmb3IgVGVYIGl0YWxpYworJSAjMSBpcyB0aGUgZm9udCBjb21tYW5kIChcc2wgb3IgXGl0KSwgIzIgaXMgdGhlIHRleHQgdG8gc2xhbnQuCislIElmIHdlIGFyZSBpbiBhIG1vbm9zcGFjZWQgZW52aXJvbm1lbnQsIGhvd2V2ZXIsIDEpIGFsd2F5cyB1c2UgXHR0c2wsCislIGFuZCAyKSBkbyBub3QgYWRkIGFuIGl0YWxpYyBjb3JyZWN0aW9uLgorXGRlZlxkb3NtYXJ0c2xhbnQjMSMyeyUKKyAgXGlmdXNpbmd0dCAKKyAgICB7e1x0dHNsICMyfVxsZXRcbmV4dD1ccmVsYXh9JQorICAgIHtcZGVmXG5leHR7eyMxIzJ9XGZ1dHVyZWxldFxuZXh0XHNtYXJ0aXRhbGljY29ycmVjdGlvbn19JQorICBcbmV4dAorfQorXGRlZlxzbWFydHNsYW50ZWR7XGRvc21hcnRzbGFudFxzbH0KK1xkZWZcc21hcnRpdGFsaWN7XGRvc21hcnRzbGFudFxpdH0KIAotJSBcc21hcnRpdGFsaWN7QVJHfSBvdXRwdXRzIGFyZyBpbiBpdGFsaWNzLCBmb2xsb3dlZCBieSBhbiBpdGFsaWMgY29ycmVjdGlvbgotJSB1bmxlc3MgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIgaXMgc3VjaCBhcyBub3QgdG8gbmVlZCBvbmUuCi1cZGVmXHNtYXJ0aXRhbGljeHtcaWZ4XG5leHQsXGVsc2VcaWZ4XG5leHQtXGVsc2VcaWZ4XG5leHQuXGVsc2UKLSAgICAgICAgICAgICAgICAgICAgXHB0ZXhzbGFzaFxmaVxmaVxmaX0KLVxkZWZcc21hcnRzbGFudGVkIzF7e1xpZnVzaW5ndHRcdHRzbFxzbCAjMX1cZnV0dXJlbGV0XG5leHRcc21hcnRpdGFsaWN4fQotXGRlZlxzbWFydGl0YWxpYyMxe3tcaWZ1c2luZ3R0XHR0c2xcaXQgIzF9XGZ1dHVyZWxldFxuZXh0XHNtYXJ0aXRhbGljeH0KKyUgT3V0cHV0IGFuIGl0YWxpYyBjb3JyZWN0aW9uIHVubGVzcyBcbmV4dCAocHJlc3VtZWQgdG8gYmUgdGhlIGZvbGxvd2luZworJSBjaGFyYWN0ZXIpIGlzIHN1Y2ggYXMgbm90IHRvIG5lZWQgb25lLgorXGRlZlxzbWFydGl0YWxpY2NvcnJlY3Rpb257JQorICBcaWZ4XG5leHQsJQorICBcZWxzZVxpZnhcbmV4dC0lCisgIFxlbHNlXGlmeFxuZXh0LiUKKyAgXGVsc2VccHRleHNsYXNoCisgIFxmaVxmaVxmaQorICBcYWZ0ZXJzbWFydGljCit9CiAKLSUgbGlrZSBcc21hcnRzbGFudGVkIGV4Y2VwdCB1bmNvbmRpdGlvbmFsbHkgdXNlcyBcdHRzbC4KLSUgQHZhciBpcyBzZXQgdG8gdGhpcyBmb3IgZGVmdW4gYXJndW1lbnRzLgotXGRlZlx0dHNsYW50ZWQjMXt7XHR0c2wgIzF9XGZ1dHVyZWxldFxuZXh0XHNtYXJ0aXRhbGljeH0KKyUgVW5jb25kaXRpb25hbCB1c2UgXHR0c2wsIGFuZCBubyBpYy4gIEB2YXIgaXMgc2V0IHRvIHRoaXMgZm9yIGRlZnVucy4KK1xkZWZcdHRzbGFudGVkIzF7e1x0dHNsICMxfX0KIAotJSBsaWtlIFxzbWFydHNsYW50ZWQgZXhjZXB0IHVuY29uZGl0aW9uYWxseSB1c2UgXHNsLiAgV2UgbmV2ZXIgd2FudAorJSBAY2l0ZSBpcyBsaWtlIFxzbWFydHNsYW50ZWQgZXhjZXB0IHVuY29uZGl0aW9uYWxseSB1c2UgXHNsLiAgV2UgbmV2ZXIgd2FudAogJSB0dHNsIGZvciBib29rIHRpdGxlcywgZG8gd2U/Ci1cZGVmXGNpdGUjMXt7XHNsICMxfVxmdXR1cmVsZXRcbmV4dFxzbWFydGl0YWxpY3h9CitcZGVmXGNpdGUjMXt7XHNsICMxfVxmdXR1cmVsZXRcbmV4dFxzbWFydGl0YWxpY2NvcnJlY3Rpb259CisKK1xkZWZcYWZ0ZXJzbWFydGlje30KK1xkZWZcdmFyIzF7JQorICBcbGV0XHNhdmVhZnRlcnNtYXJ0aWMgPSBcYWZ0ZXJzbWFydGljCisgIFxkZWZcYWZ0ZXJzbWFydGlje1xudWxsXGxldFxhZnRlcnNtYXJ0aWM9XHNhdmVhZnRlcnNtYXJ0aWN9JQorICBcc21hcnRzbGFudGVkeyMxfSUKK30KIAogXGxldFxpPVxzbWFydGl0YWxpYwogXGxldFxzbGFudGVkPVxzbWFydHNsYW50ZWQKLVxsZXRcdmFyPVxzbWFydHNsYW50ZWQKIFxsZXRcZGZuPVxzbWFydHNsYW50ZWQKIFxsZXRcZW1waD1cc21hcnRpdGFsaWMKIAotJSBAYiwgZXhwbGljaXQgYm9sZC4KKyUgRXhwbGljaXQgZm9udCBjaGFuZ2VzOiBAciwgQHNjLCB1bmRvY3VtZW50ZWQgQGlpLgorXGRlZlxyIzF7e1xybSAjMX19ICAgICAgICAgICAgICAlIHJvbWFuIGZvbnQKK1xkZWZcc2MjMXt7XHNtYWxsY2FwcyMxfX0gICAgICAgJSBzbWFsbGNhcHMgZm9udAorXGRlZlxpaSMxe3tcaXQgIzF9fSAgICAgICAgICAgICAlIGl0YWxpYyBmb250CisKKyUgQGIsIGV4cGxpY2l0IGJvbGQuICBBbHNvIEBzdHJvbmcuCiBcZGVmXGIjMXt7XGJmICMxfX0KIFxsZXRcc3Ryb25nPVxiCiAKQEAgLTE4MjQsMjkgKzI0MzcsMjEgQEAKIFxjYXRjb2RlYEA9XG90aGVyCiBcZGVmXGVuZG9mc2VudGVuY2VzcGFjZWZhY3RvcnszMDAwfSUgZGVmYXVsdAogCislIEB0LCBleHBsaWNpdCB0eXBld3JpdGVyLgogXGRlZlx0IzF7JQogICB7XHR0IFxyYXdiYWNrc2xhc2ggXHBsYWluZnJlbmNoc3BhY2luZyAjMX0lCiAgIFxudWxsCiB9Ci1cZGVmXHNhbXAjMXtgXHRjbG9zZXsjMX0nXG51bGx9Ci1cc2V0Zm9udFxrZXlybVxybXNoYXBlezh9ezEwMDB9Ci1cZm9udFxrZXlzeT1jbXN5OQotXGRlZlxrZXkjMXt7XGtleXJtXHRleHRmb250Mj1ca2V5c3kgXGxlYXZldm1vZGVcaGJveHslCi0gIFxyYWlzZTAuNHB0XGhib3h7XGFuZ2xlbGVmdH1ca2Vybi0uMDhlbVx2dG9weyUKLSAgICBcdmJveHtcaHJ1bGVca2Vybi0wLjRwdAotICAgICBcaGJveHtccmFpc2UwLjRwdFxoYm94e1x2cGhhbnRvbXtcYW5nbGVsZWZ0fX0jMX19JQotICAgIFxrZXJuLTAuNHB0XGhydWxlfSUKLSAgXGtlcm4tLjA2ZW1ccmFpc2UwLjRwdFxoYm94e1xhbmdsZXJpZ2h0fX19fQotJSBUaGUgb2xkIGRlZmluaXRpb24sIHdpdGggbm8gbG96ZW5nZToKLSVcZGVmXGtleSAjMXt7XHR0c2wgXG5vaHlwaGVuYXRpb24gXHVwcGVyY2FzZXsjMX19XG51bGx9Ci1cZGVmXGN0cmwgIzF7e1x0dCBccmF3YmFja3NsYXNoIFxoYXR9IzF9CiAKLSUgQGZpbGUsIEBvcHRpb24gYXJlIHRoZSBzYW1lIGFzIEBzYW1wLgotXGxldFxmaWxlPVxzYW1wCi1cbGV0XG9wdGlvbj1cc2FtcAorJSBAc2FtcC4KK1xkZWZcc2FtcCMxe3tcc2V0dXBtYXJrdXBzdHlsZXtzYW1wfVxscVx0Y2xvc2V7IzF9XHJxXG51bGx9fQogCi0lIEBjb2RlIGlzIGEgbW9kaWZpY2F0aW9uIG9mIEB0LAotJSB3aGljaCBtYWtlcyBzcGFjZXMgdGhlIHNhbWUgc2l6ZSBhcyBub3JtYWwgaW4gdGhlIHN1cnJvdW5kaW5nIHRleHQuCislIEBpbmRpY2F0ZXVybCBpcyBcc2FtcCwgdGhhdCBpcywgd2l0aCBxdW90ZXMuCitcbGV0XGluZGljYXRldXJsPVxzYW1wCisKKyUgQGNvZGUgKGFuZCBzaW1pbGFyKSBwcmludHMgaW4gdHlwZXdyaXRlciwgYnV0IHdpdGggc3BhY2VzIHRoZSBzYW1lCislIHNpemUgYXMgbm9ybWFsIGluIHRoZSBzdXJyb3VuZGluZyB0ZXh0LCB3aXRob3V0IGh5cGhlbmF0aW9uLCBldGMuCislIFRoaXMgaXMgYSBzdWJyb3V0aW5lIGZvciB0aGF0LgogXGRlZlx0Y2xvc2UjMXslCiAgIHslCiAgICAgJSBDaGFuZ2Ugbm9ybWFsIGludGVyd29yZCBzcGFjZSB0byBiZSBzYW1lIGFzIGZvciB0aGUgY3VycmVudCBmb250LgpAQCAtMTg2NSwyNCArMjQ3MCwyNyBAQAogICAgIFxwbGFpbmZyZW5jaHNwYWNpbmcKICAgICAjMSUKICAgfSUKLSAgXG51bGwKKyAgXG51bGwgJSByZXNldCBzcGFjZWZhY3RvciB0byAxMDAwCiB9CiAKICUgV2UgKm11c3QqIHR1cm4gb24gaHlwaGVuYXRpb24gYXQgYC0nIGFuZCBgXycgaW4gQGNvZGUuCiAlIE90aGVyd2lzZSwgaXQgaXMgdG9vIGhhcmQgdG8gYXZvaWQgb3ZlcmZ1bGwgaGJveGVzCiAlIGluIHRoZSBFbWFjcyBtYW51YWwsIHRoZSBMaWJyYXJ5IG1hbnVhbCwgZXRjLgotCislCiAlIFVuZm9ydHVuYXRlbHksIFRlWCB1c2VzIG9uZSBwYXJhbWV0ZXIgKFxoeXBoZW5jaGFyKSB0byBjb250cm9sCiAlIGJvdGggaHlwaGVuYXRpb24gYXQgLSBhbmQgaHlwaGVuYXRpb24gd2l0aGluIHdvcmRzLgogJSBXZSBtdXN0IHRoZXJlZm9yZSB0dXJuIHRoZW0gYm90aCBvZmYgKFx0Y2xvc2UgZG9lcyB0aGF0KQogJSBhbmQgYXJyYW5nZSBleHBsaWNpdGx5IHRvIGh5cGhlbmF0ZSBhdCBhIGRhc2guCiAlICAtLSBybXMuCiB7Ci0gIFxjYXRjb2RlYFwtPVxhY3RpdmUKLSAgXGNhdGNvZGVgXF89XGFjdGl2ZQorICBcY2F0Y29kZWBcLT1cYWN0aXZlIFxjYXRjb2RlYFxfPVxhY3RpdmUKKyAgXGNhdGNvZGVgXCc9XGFjdGl2ZSBcY2F0Y29kZWBcYD1cYWN0aXZlCisgIFxnbG9iYWxcbGV0Jz1ccnEgXGdsb2JhbFxsZXRgPVxscSAgJSBkZWZhdWx0IGRlZmluaXRpb25zCiAgICUKICAgXGdsb2JhbFxkZWZcY29kZXtcYmVnaW5ncm91cAotICAgIFxjYXRjb2RlYFwtPVxhY3RpdmUgIFxjYXRjb2RlYFxfPVxhY3RpdmUKKyAgICBcc2V0dXBtYXJrdXBzdHlsZXtjb2RlfSUKKyAgICAlIFRoZSBmb2xsb3dpbmcgc2hvdWxkIHJlYWxseSBiZSBtb3ZlZCBpbnRvIFxzZXR1cG1hcmt1cHN0eWxlIGhhbmRsZXJzLgorICAgIFxjYXRjb2RlXGRhc2hDaGFyPVxhY3RpdmUgIFxjYXRjb2RlXHVuZGVyQ2hhcj1cYWN0aXZlCiAgICAgXGlmYWxsb3djb2RlYnJlYWtzCiAgICAgIFxsZXQtXGNvZGVkYXNoCiAgICAgIFxsZXRfXGNvZGV1bmRlcgpAQCAtMTg5NCw2ICsyNTAyLDggQEAKICAgfQogfQogCitcZGVmXGNvZGV4ICMxe1x0Y2xvc2V7IzF9XGVuZGdyb3VwfQorCiBcZGVmXHJlYWxkYXNoey19CiBcZGVmXGNvZGVkYXNoey1cZGlzY3JldGlvbmFyeXt9e317fX0KIFxkZWZcY29kZXVuZGVyeyUKQEAgLTE5MDcsMTMgKzI1MTcsMTIgQEAKICAgICAgICAgICAgICBcZGlzY3JldGlvbmFyeXt9e317fX0lCiAgICAgICAgICAgICB7XF99JQogfQotXGRlZlxjb2RleCAjMXtcdGNsb3NleyMxfVxlbmRncm91cH0KIAogJSBBbiBhZGRpdGlvbmFsIGNvbXBsaWNhdGlvbjogdGhlIGFib3ZlIHdpbGwgYWxsb3cgYnJlYWtzIGFmdGVyLCBlLmcuLAogJSBlYWNoIG9mIHRoZSBmb3VyIHVuZGVyc2NvcmVzIGluIF9fdHlwZW9mX18uICBUaGlzIGlzIHVuZGVzaXJhYmxlIGluCiAlIHNvbWUgbWFudWFscywgZXNwZWNpYWxseSBpZiB0aGV5IGRvbid0IGhhdmUgbG9uZyBpZGVudGlmaWVycyBpbgogJSBnZW5lcmFsLiAgQGFsbG93Y29kZWJyZWFrcyBwcm92aWRlcyBhIHdheSB0byBjb250cm9sIHRoaXMuCi0lIAorJQogXG5ld2lmXGlmYWxsb3djb2RlYnJlYWtzICBcYWxsb3djb2RlYnJlYWtzdHJ1ZQogCiBcZGVmXGtleXdvcmR0cnVle3RydWV9CkBAIC0xOTI3LDU1ICsyNTM2LDI1IEBACiAgICAgXGFsbG93Y29kZWJyZWFrc2ZhbHNlCiAgIFxlbHNlCiAgICAgXGVycmhlbHAgPSBcRU1zaW1wbGUKLSAgICBcZXJybWVzc2FnZXtVbmtub3duIEBhbGxvd2NvZGVicmVha3Mgb3B0aW9uIGBcdHhpYXJnJ30lCisgICAgXGVycm1lc3NhZ2V7VW5rbm93biBAYWxsb3djb2RlYnJlYWtzIG9wdGlvbiBgXHR4aWFyZycsIG11c3QgYmUgdHJ1ZXxmYWxzZX0lCiAgIFxmaVxmaQogfQogCi0lIEBrYmQgaXMgbGlrZSBAY29kZSwgZXhjZXB0IHRoYXQgaWYgdGhlIGFyZ3VtZW50IGlzIGp1c3Qgb25lIEBrZXkgY29tbWFuZCwKLSUgdGhlbiBAa2JkIGhhcyBubyBlZmZlY3QuCi0KLSUgQGtiZGlucHV0c3R5bGUgLS0gYXJnIGlzIGBkaXN0aW5jdCcgKEBrYmQgdXNlcyBzbGFudGVkIHR0eSBmb250IGFsd2F5cyksCi0lICAgYGV4YW1wbGUnIChAa2JkIHVzZXMgdHRzbCBvbmx5IGluc2lkZSBvZiBAZXhhbXBsZSBhbmQgZnJpZW5kcyksCi0lICAgb3IgYGNvZGUnIChAa2JkIHVzZXMgbm9ybWFsIHR0eSBmb250IGFsd2F5cykuCi1ccGFyc2VhcmdkZWZca2JkaW5wdXRzdHlsZXslCi0gIFxkZWZcdHhpYXJneyMxfSUKLSAgXGlmeFx0eGlhcmdcd29yZGRpc3RpbmN0Ci0gICAgXGdkZWZca2JkZXhhbXBsZWZvbnR7XHR0c2x9XGdkZWZca2JkZm9udHtcdHRzbH0lCi0gIFxlbHNlXGlmeFx0eGlhcmdcd29yZGV4YW1wbGUKLSAgICBcZ2RlZlxrYmRleGFtcGxlZm9udHtcdHRzbH1cZ2RlZlxrYmRmb250e1x0dH0lCi0gIFxlbHNlXGlmeFx0eGlhcmdcd29yZGNvZGUKLSAgICBcZ2RlZlxrYmRleGFtcGxlZm9udHtcdHR9XGdkZWZca2JkZm9udHtcdHR9JQotICBcZWxzZQotICAgIFxlcnJoZWxwID0gXEVNc2ltcGxlCi0gICAgXGVycm1lc3NhZ2V7VW5rbm93biBAa2JkaW5wdXRzdHlsZSBvcHRpb24gYFx0eGlhcmcnfSUKLSAgXGZpXGZpXGZpCi19Ci1cZGVmXHdvcmRkaXN0aW5jdHtkaXN0aW5jdH0KLVxkZWZcd29yZGV4YW1wbGV7ZXhhbXBsZX0KLVxkZWZcd29yZGNvZGV7Y29kZX0KLQotJSBEZWZhdWx0IGlzIGBkaXN0aW5jdC4nCi1ca2JkaW5wdXRzdHlsZSBkaXN0aW5jdAotCi1cZGVmXHhrZXl7XGtleX0KLVxkZWZca2JkZm9vIzEjMiMzXHBhcntcZGVmXG9uZXsjMX1cZGVmXHRocmVleyMzfVxkZWZcdGhyZWV4ez8/fSUKLVxpZnhcb25lXHhrZXlcaWZ4XHRocmVleFx0aHJlZSBca2V5eyMyfSUKLVxlbHNle1x0Y2xvc2V7XGtiZGZvbnRcbG9va319XGZpCi1cZWxzZXtcdGNsb3Nle1xrYmRmb250XGxvb2t9fVxmaX0KLQotJSBGb3IgQGluZGljYXRldXJsLCBAZW52LCBAY29tbWFuZCBxdW90ZXMgc2VlbSB1bm5lY2Vzc2FyeSwgc28gdXNlIFxjb2RlLgotXGxldFxpbmRpY2F0ZXVybD1cY29kZQotXGxldFxlbnY9XGNvZGUKKyUgRm9yIEBjb21tYW5kLCBAZW52LCBAZmlsZSwgQG9wdGlvbiBxdW90ZXMgc2VlbSB1bm5lY2Vzc2FyeSwKKyUgc28gdXNlIFxjb2RlIHJhdGhlciB0aGFuIFxzYW1wLgogXGxldFxjb21tYW5kPVxjb2RlCitcbGV0XGVudj1cY29kZQorXGxldFxmaWxlPVxjb2RlCitcbGV0XG9wdGlvbj1cY29kZQogCiAlIEB1cmVmIChhYmJyZXZpYXRpb24gZm9yIGB1cmxyZWYnKSB0YWtlcyBhbiBvcHRpb25hbCAoY29tbWEtc2VwYXJhdGVkKQogJSBzZWNvbmQgYXJndW1lbnQgc3BlY2lmeWluZyB0aGUgdGV4dCB0byBkaXNwbGF5IGFuZCBhbiBvcHRpb25hbCB0aGlyZAogJSBhcmcgYXMgdGV4dCB0byBkaXNwbGF5IGluc3RlYWQgb2YgKHJhdGhlciB0aGFuIGluIGFkZGl0aW9uIHRvKSB0aGUgdXJsCi0lIGl0c2VsZi4gIEZpcnN0IChtYW5kYXRvcnkpIGFyZyBpcyB0aGUgdXJsLiAgUGVyaGFwcyBldmVudHVhbGx5IHB1dCBpbgotJSBhIGh5cGVydGV4IFxzcGVjaWFsIGhlcmUuCi0lCi1cZGVmXHVyZWYjMXtcZG91cmVmICMxLCwsXGZpbmlzaH0KLVxkZWZcZG91cmVmIzEsIzIsIzMsIzRcZmluaXNoe1xiZWdpbmdyb3VwCislIGl0c2VsZi4gIEZpcnN0IChtYW5kYXRvcnkpIGFyZyBpcyB0aGUgdXJsLgorJSAoVGhpcyBcdXJlZm5vYnJlYWsgZGVmaW5pdGlvbiBpc24ndCB1c2VkIG5vdywgbGVhdmluZyBpdCBmb3IgYSB3aGlsZQorJSBmb3IgY29tcGFyaXNvbi4pCitcZGVmXHVyZWZub2JyZWFrIzF7XGRvdXJlZm5vYnJlYWsgIzEsLCxcZmluaXNofQorXGRlZlxkb3VyZWZub2JyZWFrIzEsIzIsIzMsIzRcZmluaXNoe1xiZWdpbmdyb3VwCiAgIFx1bnNlcHNwYWNlcwogICBccGRmdXJseyMxfSUKICAgXHNldGJveDAgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMzfSUKQEAgLTE5OTYsNiArMjU3NSwxMDMgQEAKICAgXGVuZGxpbmsKIFxlbmRncm91cH0KIAorJSBUaGlzIFx1cmVmYnJlYWsgZGVmaW5pdGlvbiBpcyB0aGUgYWN0aXZlIG9uZS4KK1xkZWZcdXJlZmJyZWFre1xiZWdpbmdyb3VwIFx1cmVmY2F0Y29kZXMgXGRvdXJlZmJyZWFrfQorXGxldFx1cmVmPVx1cmVmYnJlYWsKK1xkZWZcZG91cmVmYnJlYWsjMXtcdXJlZmJyZWFrZmluaXNoICMxLCwsXGZpbmlzaH0KK1xkZWZcdXJlZmJyZWFrZmluaXNoIzEsIzIsIzMsIzRcZmluaXNoeyUgZG9lc24ndCB3b3JrIGluIEBleGFtcGxlCisgIFx1bnNlcHNwYWNlcworICBccGRmdXJseyMxfSUKKyAgXHNldGJveDAgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMzfSUKKyAgXGlmZGltXHdkMCA+IDBwdAorICAgIFx1bmhib3gwICUgdGhpcmQgYXJnIGdpdmVuLCBzaG93IG9ubHkgdGhhdAorICBcZWxzZQorICAgIFxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjMn0lCisgICAgXGlmZGltXHdkMCA+IDBwdAorICAgICAgXGlmcGRmCisgICAgICAgIFx1bmhib3gwICAgICAgICAgICAgICUgUERGOiAybmQgYXJnIGdpdmVuLCBzaG93IG9ubHkgaXQKKyAgICAgIFxlbHNlCisgICAgICAgIFx1bmhib3gwXCAoXHVyZWZjb2RleyMxfSklIERWSTogMm5kIGFyZyBnaXZlbiwgc2hvdyBib3RoIGl0IGFuZCB1cmwKKyAgICAgIFxmaQorICAgIFxlbHNlCisgICAgICBcdXJlZmNvZGV7IzF9JSBvbmx5IHVybCBnaXZlbiwgc28gc2hvdyBpdAorICAgIFxmaQorICBcZmkKKyAgXGVuZGxpbmsKK1xlbmRncm91cH0KKworJSBBbGxvdyBsaW5lIGJyZWFrcyBhcm91bmQgb25seSBhIGZldyBjaGFyYWN0ZXJzIChvbmx5KS4KK1xkZWZcdXJlZmNhdGNvZGVzeyUKKyAgXGNhdGNvZGVcYW1wQ2hhcj1cYWN0aXZlICAgXGNhdGNvZGVcZG90Q2hhcj1cYWN0aXZlCisgIFxjYXRjb2RlXGhhc2hDaGFyPVxhY3RpdmUgIFxjYXRjb2RlXHF1ZXN0Q2hhcj1cYWN0aXZlCisgIFxjYXRjb2RlXHNsYXNoQ2hhcj1cYWN0aXZlCit9Cit7CisgIFx1cmVmY2F0Y29kZXMKKyAgJQorICBcZ2xvYmFsXGRlZlx1cmVmY29kZXtcYmVnaW5ncm91cAorICAgIFxzZXR1cG1hcmt1cHN0eWxle2NvZGV9JQorICAgIFx1cmVmY2F0Y29kZXMKKyAgICBcbGV0Jlx1cmVmY29kZWFtcAorICAgIFxsZXQuXHVyZWZjb2RlZG90CisgICAgXGxldCNcdXJlZmNvZGVoYXNoCisgICAgXGxldD9cdXJlZmNvZGVxdWVzdAorICAgIFxsZXQvXHVyZWZjb2Rlc2xhc2gKKyAgICBcY29kZXgKKyAgfQorICAlCisgICUgQnkgZGVmYXVsdCwgdGhleSBhcmUganVzdCByZWd1bGFyIGNoYXJhY3RlcnMuCisgIFxnbG9iYWxcZGVmJntcbm9ybWFsYW1wfQorICBcZ2xvYmFsXGRlZi57XG5vcm1hbGRvdH0KKyAgXGdsb2JhbFxkZWYje1xub3JtYWxoYXNofQorICBcZ2xvYmFsXGRlZj97XG5vcm1hbHF1ZXN0fQorICBcZ2xvYmFsXGRlZi97XG5vcm1hbHNsYXNofQorfQorCislIHdlIHB1dCBhIGxpdHRsZSBzdHJldGNoIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGJyZWFrYWJsZSBjaGFycywgdG8gaGVscAorJSBsaW5lIGJyZWFraW5nIG9mIGxvbmcgdXJsJ3MuICBUaGUgdW5lcXVhbCBza2lwcyBtYWtlIGxvb2sgYmV0dGVyIGluCislIGNtdHQgYXQgbGVhc3QsIGVzcGVjaWFsbHkgZm9yIGRvdHMuCitcZGVmXHVyZWZwcmVzdHJldGNoe1x1cmVmcHJlYnJlYWsgXGhza2lwMHB0IHBsdXMuMTNlbSB9CitcZGVmXHVyZWZwb3N0c3RyZXRjaHtcdXJlZnBvc3RicmVhayBcaHNraXAwcHQgcGx1cy4xZW0gfQorJQorXGRlZlx1cmVmY29kZWFtcHtcdXJlZnByZXN0cmV0Y2ggXCZcdXJlZnBvc3RzdHJldGNofQorXGRlZlx1cmVmY29kZWRvdHtcdXJlZnByZXN0cmV0Y2ggLlx1cmVmcG9zdHN0cmV0Y2h9CitcZGVmXHVyZWZjb2RlaGFzaHtcdXJlZnByZXN0cmV0Y2ggXCNcdXJlZnBvc3RzdHJldGNofQorXGRlZlx1cmVmY29kZXF1ZXN0e1x1cmVmcHJlc3RyZXRjaCA/XHVyZWZwb3N0c3RyZXRjaH0KK1xkZWZcdXJlZmNvZGVzbGFzaHtcZnV0dXJlbGV0XG5leHRcdXJlZmNvZGVzbGFzaGZpbmlzaH0KK3sKKyAgXGNhdGNvZGVgXC89XGFjdGl2ZQorICBcZ2xvYmFsXGRlZlx1cmVmY29kZXNsYXNoZmluaXNoeyUKKyAgICBcdXJlZnByZXN0cmV0Y2ggXHNsYXNoQ2hhcgorICAgICUgQWxsb3cgbGluZSBicmVhayBvbmx5IGFmdGVyIHRoZSBmaW5hbCAvIGluIGEgc2VxdWVuY2Ugb2YKKyAgICAlIHNsYXNoZXMsIHRvIGF2b2lkIGxpbmUgYnJlYWsgYmV0d2VlbiB0aGUgc2xhc2hlcyBpbiBodHRwOi8vLgorICAgIFxpZnhcbmV4dC9cZWxzZSBcdXJlZnBvc3RzdHJldGNoIFxmaQorICB9Cit9CisKKyUgT25lIG1vcmUgY29tcGxpY2F0aW9uOiBieSBkZWZhdWx0IHdlJ2xsIGJyZWFrIGFmdGVyIHRoZSBzcGVjaWFsCislIGNoYXJhY3RlcnMsIGJ1dCBzb21lIHBlb3BsZSBsaWtlIHRvIGJyZWFrIGJlZm9yZSB0aGUgc3BlY2lhbCBjaGFycywgc28KKyUgYWxsb3cgdGhhdC4gIEFsc28gYWxsb3cgbm8gYnJlYWtpbmcgYXQgYWxsLCBmb3IgbWFudWFsIGNvbnRyb2wuCislIAorXHBhcnNlYXJnZGVmXHVyZWZicmVha3N0eWxleyUKKyAgXGRlZlx0eGlhcmd7IzF9JQorICBcaWZ4XHR4aWFyZ1x3b3Jkbm9uZQorICAgIFxkZWZcdXJlZnByZWJyZWFre1xub2JyZWFrfVxkZWZcdXJlZnBvc3RicmVha3tcbm9icmVha30KKyAgXGVsc2VcaWZ4XHR4aWFyZ1x3b3JkYmVmb3JlCisgICAgXGRlZlx1cmVmcHJlYnJlYWt7XGFsbG93YnJlYWt9XGRlZlx1cmVmcG9zdGJyZWFre1xub2JyZWFrfQorICBcZWxzZVxpZnhcdHhpYXJnXHdvcmRhZnRlcgorICAgIFxkZWZcdXJlZnByZWJyZWFre1xub2JyZWFrfVxkZWZcdXJlZnBvc3RicmVha3tcYWxsb3dicmVha30KKyAgXGVsc2UKKyAgICBcZXJyaGVscCA9IFxFTXNpbXBsZQorICAgIFxlcnJtZXNzYWdle1Vua25vd24gQHVyZWZicmVha3N0eWxlIHNldHRpbmcgYFx0eGlhcmcnfSUKKyAgXGZpXGZpXGZpCit9CitcZGVmXHdvcmRhZnRlcnthZnRlcn0KK1xkZWZcd29yZGJlZm9yZXtiZWZvcmV9CitcZGVmXHdvcmRub25le25vbmV9CisKK1x1cmVmYnJlYWtzdHlsZSBhZnRlcgorCiAlIEB1cmwgc3lub255bSBmb3IgQHVyZWYsIHNpbmNlIHRoYXQncyBob3cgZXZlcnlvbmUgdXNlcyBpdC4KICUKIFxsZXRcdXJsPVx1cmVmCkBAIC0yMDE3LDM0ICsyNjkzLDgxIEBACiAgIFxsZXRcZW1haWw9XHVyZWYKIFxmaQogCi0lIENoZWNrIGlmIHdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSB0eXBld3JpdGVyIGZvbnQuICBTaW5jZSBhbGwgdGhlCi0lIENvbXB1dGVyIE1vZGVybiB0eXBld3JpdGVyIGZvbnRzIGhhdmUgemVybyBpbnRlcndvcmQgc3RyZXRjaCAoYW5kCi0lIHNocmluayksIGFuZCBpdCBpcyByZWFzb25hYmxlIHRvIGV4cGVjdCBhbGwgdHlwZXdyaXRlciBmb250cyB0byBoYXZlCi0lIHRoaXMgcHJvcGVydHksIHdlIGNhbiBjaGVjayB0aGF0IGZvbnQgcGFyYW1ldGVyLgorJSBAa2JkaW5wdXRzdHlsZSAtLSBhcmcgaXMgYGRpc3RpbmN0JyAoQGtiZCB1c2VzIHNsYW50ZWQgdHR5IGZvbnQgYWx3YXlzKSwKKyUgICBgZXhhbXBsZScgKEBrYmQgdXNlcyB0dHNsIG9ubHkgaW5zaWRlIG9mIEBleGFtcGxlIGFuZCBmcmllbmRzKSwKKyUgICBvciBgY29kZScgKEBrYmQgdXNlcyBub3JtYWwgdHR5IGZvbnQgYWx3YXlzKS4KK1xwYXJzZWFyZ2RlZlxrYmRpbnB1dHN0eWxleyUKKyAgXGRlZlx0eGlhcmd7IzF9JQorICBcaWZ4XHR4aWFyZ1x3b3JkZGlzdGluY3QKKyAgICBcZ2RlZlxrYmRleGFtcGxlZm9udHtcdHRzbH1cZ2RlZlxrYmRmb250e1x0dHNsfSUKKyAgXGVsc2VcaWZ4XHR4aWFyZ1x3b3JkZXhhbXBsZQorICAgIFxnZGVmXGtiZGV4YW1wbGVmb250e1x0dHNsfVxnZGVmXGtiZGZvbnR7XHR0fSUKKyAgXGVsc2VcaWZ4XHR4aWFyZ1x3b3JkY29kZQorICAgIFxnZGVmXGtiZGV4YW1wbGVmb250e1x0dH1cZ2RlZlxrYmRmb250e1x0dH0lCisgIFxlbHNlCisgICAgXGVycmhlbHAgPSBcRU1zaW1wbGUKKyAgICBcZXJybWVzc2FnZXtVbmtub3duIEBrYmRpbnB1dHN0eWxlIHNldHRpbmcgYFx0eGlhcmcnfSUKKyAgXGZpXGZpXGZpCit9CitcZGVmXHdvcmRkaXN0aW5jdHtkaXN0aW5jdH0KK1xkZWZcd29yZGV4YW1wbGV7ZXhhbXBsZX0KK1xkZWZcd29yZGNvZGV7Y29kZX0KKworJSBEZWZhdWx0IGlzIGBkaXN0aW5jdCcuCitca2JkaW5wdXRzdHlsZSBkaXN0aW5jdAorCislIEBrYmQgaXMgbGlrZSBAY29kZSwgZXhjZXB0IHRoYXQgaWYgdGhlIGFyZ3VtZW50IGlzIGp1c3Qgb25lIEBrZXkgY29tbWFuZCwKKyUgdGhlbiBAa2JkIGhhcyBubyBlZmZlY3QuCitcZGVmXGtiZCMxe3tcZGVmXGxvb2t7IzF9XGV4cGFuZGFmdGVyXGtiZHN1Ylxsb29rPz9ccGFyfX0KKworXGRlZlx4a2V5e1xrZXl9CitcZGVmXGtiZHN1YiMxIzIjM1xwYXJ7JQorICBcZGVmXG9uZXsjMX1cZGVmXHRocmVleyMzfVxkZWZcdGhyZWV4ez8/fSUKKyAgXGlmeFxvbmVceGtleVxpZnhcdGhyZWV4XHRocmVlIFxrZXl7IzJ9JQorICBcZWxzZXtcdGNsb3Nle1xrYmRmb250XHNldHVwbWFya3Vwc3R5bGV7a2JkfVxsb29rfX1cZmkKKyAgXGVsc2V7XHRjbG9zZXtca2JkZm9udFxzZXR1cG1hcmt1cHN0eWxle2tiZH1cbG9va319XGZpCit9CisKKyUgZGVmaW5pdGlvbiBvZiBAa2V5IHRoYXQgcHJvZHVjZXMgYSBsb3plbmdlLiAgRG9lc24ndCBhZGp1c3QgdG8gdGV4dCBzaXplLgorJVxzZXRmb250XGtleXJtXHJtc2hhcGV7OH17MTAwMH17T1QxfQorJVxmb250XGtleXN5PWNtc3k5CislXGRlZlxrZXkjMXt7XGtleXJtXHRleHRmb250Mj1ca2V5c3kgXGxlYXZldm1vZGVcaGJveHslCislICBccmFpc2UwLjRwdFxoYm94e1xhbmdsZWxlZnR9XGtlcm4tLjA4ZW1cdnRvcHslCislICAgIFx2Ym94e1xocnVsZVxrZXJuLTAuNHB0CislICAgICBcaGJveHtccmFpc2UwLjRwdFxoYm94e1x2cGhhbnRvbXtcYW5nbGVsZWZ0fX0jMX19JQorJSAgICBca2Vybi0wLjRwdFxocnVsZX0lCislICBca2Vybi0uMDZlbVxyYWlzZTAuNHB0XGhib3h7XGFuZ2xlcmlnaHR9fX19CisKKyUgZGVmaW5pdGlvbiBvZiBAa2V5IHdpdGggbm8gbG96ZW5nZS4gIElmIHRoZSBjdXJyZW50IGZvbnQgaXMgYWxyZWFkeQorJSBtb25vc3BhY2UsIGRvbid0IGNoYW5nZSBpdDsgdGhhdCB3YXksIHdlIHJlc3BlY3QgQGtiZGlucHV0c3R5bGUuICBCdXQKKyUgaWYgaXQgaXNuJ3QgbW9ub3NwYWNlLCB0aGVuIHVzZSBcdHQuCiAlCi1cZGVmXGlmbW9ub3NwYWNle1xpZmRpbVxmb250ZGltZW4zXGZvbnQ9MHB0IH0KK1xkZWZca2V5IzF7e1xzZXR1cG1hcmt1cHN0eWxle2tleX0lCisgIFxub2h5cGhlbmF0aW9uCisgIFxpZm1vbm9zcGFjZVxlbHNlXHR0XGZpCisgICMxfVxudWxsfQorCislIEBjbGlja3NlcXVlbmNle0ZpbGUgQGNsaWNre30gT3BlbiAuLi59CitcZGVmXGNsaWNrc2VxdWVuY2UjMXtcYmVnaW5ncm91cCAjMVxlbmRncm91cH0KKworJSBAY2xpY2tzdHlsZSBAYXJyb3cgICAoYnkgZGVmYXVsdCkKK1xwYXJzZWFyZ2RlZlxjbGlja3N0eWxle1xkZWZcY2xpY2t7IzF9fQorXGRlZlxjbGlja3tcYXJyb3d9CiAKICUgVHlwZXNldCBhIGRpbWVuc2lvbiwgZS5nLiwgYGluJyBvciBgcHQnLiAgVGhlIG9ubHkgcmVhc29uIGZvciB0aGUKICUgYXJndW1lbnQgaXMgdG8gbWFrZSB0aGUgaW5wdXQgbG9vayByaWdodDogQGRtbntwdH0gaW5zdGVhZCBvZiBAZG1ue31wdC4KICUKIFxkZWZcZG1uIzF7XHRoaW5zcGFjZSAjMX0KIAotXGRlZlxrYmQjMXtcZGVmXGxvb2t7IzF9XGV4cGFuZGFmdGVyXGtiZGZvb1xsb29rPz9ccGFyfQotCiAlIEBsIHdhcyBuZXZlciBkb2N1bWVudGVkIHRvIG1lYW4gYGBzd2l0Y2ggdG8gdGhlIExpc3AgZm9udCcnLAogJSBhbmQgaXQgaXMgbm90IHVzZWQgYXMgc3VjaCBpbiBhbnkgbWFudWFsIEkgY2FuIGZpbmQuICBXZSBuZWVkIGl0IGZvcgogJSBQb2xpc2ggc3VwcHJlc3NlZC1sLiAgLS1rYXJsLCAyMnNlcDk2LgogJVxkZWZcbCMxe3tcbGkgIzF9XG51bGx9CiAKLSUgRXhwbGljaXQgZm9udCBjaGFuZ2VzOiBAciwgQHNjLCB1bmRvY3VtZW50ZWQgQGlpLgotXGRlZlxyIzF7e1xybSAjMX19ICAgICAgICAgICAgICAlIHJvbWFuIGZvbnQKLVxkZWZcc2MjMXt7XHNtYWxsY2FwcyMxfX0gICAgICAgJSBzbWFsbGNhcHMgZm9udAotXGRlZlxpaSMxe3tcaXQgIzF9fSAgICAgICAgICAgICAlIGl0YWxpYyBmb250Ci0KICUgQGFjcm9ueW0gZm9yICJGQkkiLCAiTkFUTyIsIGFuZCB0aGUgbGlrZS4KICUgV2UgcHJpbnQgdGhpcyBvbmUgcG9pbnQgc2l6ZSBzbWFsbGVyLCBzaW5jZSBpdCdzIGludGVuZGVkIGZvcgogJSBhbGwtdXBwZXJjYXNlLgotJSAKKyUKIFxkZWZcYWNyb255bSMxe1xkb2Fjcm9ueW0gIzEsLFxmaW5pc2h9CiBcZGVmXGRvYWNyb255bSMxLCMyLCMzXGZpbmlzaHslCiAgIHtcc2VsZWN0Zm9udHNcbHNpemUgIzF9JQpAQCAtMjA1MiwxMSArMjc3NSwxMiBAQAogICBcaWZ4XHRlbXBcZW1wdHkgXGVsc2UKICAgICBcc3BhY2UgKHtcdW5zZXBzcGFjZXMgXGlnbm9yZXNwYWNlcyBcdGVtcCBcdW5za2lwfSklCiAgIFxmaQorICBcbnVsbCAlIHJlc2V0IFxzcGFjZWZhY3Rvcj0xMDAwCiB9CiAKICUgQGFiYnIgZm9yICJDb21wdXQuIEouIiBhbmQgdGhlIGxpa2UuCiAlIE5vIGZvbnQgY2hhbmdlLCBidXQgZG9uJ3QgZG8gZW5kLW9mLXNlbnRlbmNlIHNwYWNpbmcuCi0lIAorJQogXGRlZlxhYmJyIzF7XGRvYWJiciAjMSwsXGZpbmlzaH0KIFxkZWZcZG9hYmJyIzEsIzIsIzNcZmluaXNoeyUKICAge1xwbGFpbmZyZW5jaHNwYWNpbmcgIzF9JQpAQCAtMjA2NCw4ICsyNzg4LDI1OCBAQAogICBcaWZ4XHRlbXBcZW1wdHkgXGVsc2UKICAgICBcc3BhY2UgKHtcdW5zZXBzcGFjZXMgXGlnbm9yZXNwYWNlcyBcdGVtcCBcdW5za2lwfSklCiAgIFxmaQorICBcbnVsbCAlIHJlc2V0IFxzcGFjZWZhY3Rvcj0xMDAwCiB9CiAKKyUgQGFzaXMganVzdCB5aWVsZHMgaXRzIGFyZ3VtZW50LiAgVXNlZCB3aXRoIEB0YWJsZSwgZm9yIGV4YW1wbGUuCislCitcZGVmXGFzaXMjMXsjMX0KKworJSBAbWF0aCBvdXRwdXRzIGl0cyBhcmd1bWVudCBpbiBtYXRoIG1vZGUuCislCislIE9uZSBjb21wbGljYXRpb246IF8gdXN1YWxseSBtZWFucyBzdWJzY3JpcHRzLCBidXQgaXQgY291bGQgYWxzbyBtZWFuCislIGFuIGFjdHVhbCBfIGNoYXJhY3RlciwgYXMgaW4gQG1hdGh7QHZhcntzb21lX3ZhcmlhYmxlfSArIDF9LiAgU28gbWFrZQorJSBfIGFjdGl2ZSwgYW5kIGRpc3Rpbmd1aXNoIGJ5IHNlZWluZyBpZiB0aGUgY3VycmVudCBmYW1pbHkgaXMgXHNsZmFtLAorJSB3aGljaCBpcyB3aGF0IEB2YXIgdXNlcy4KK3sKKyAgXGNhdGNvZGVgXF8gPSBcYWN0aXZlCisgIFxnZGVmXG1hdGh1bmRlcnNjb3JleyUKKyAgICBcY2F0Y29kZWBcXz1cYWN0aXZlCisgICAgXGRlZl97XGlmbnVtXGZhbT1cc2xmYW0gXF9cZWxzZVxzYlxmaX0lCisgIH0KK30KKyUgQW5vdGhlciBjb21wbGljYXRpb246IHdlIHdhbnQgXFwgKGFuZCBAXCkgdG8gb3V0cHV0IGEgbWF0aCAob3IgdHQpIFwuCislIEZZSSwgcGxhaW4udGV4IHVzZXMgXFwgYXMgYSB0ZW1wb3JhcnkgY29udHJvbCBzZXF1ZW5jZSAoZm9yIG5vCislIHBhcnRpY3VsYXIgcmVhc29uKSwgYnV0IHRoaXMgaXMgbm90IGFkdmVydGlzZWQgYW5kIHdlIGRvbid0IGNhcmUuCislCislIFRoZSBcbWF0aGNoYXIgaXMgY2xhc3M9MD1vcmRpbmFyeSwgZmFtaWx5PTc9dHRmYW0sIHBvc2l0aW9uPTVDPVwuCitcZGVmXG1hdGhiYWNrc2xhc2h7XGlmbnVtXGZhbT1cdHRmYW0gXG1hdGhjaGFyIjA3NUMgXGVsc2VcYmFja3NsYXNoIFxmaX0KKyUKK1xkZWZcbWF0aHslCisgIFx0ZXgKKyAgXG1hdGh1bmRlcnNjb3JlCisgIFxsZXRcXCA9IFxtYXRoYmFja3NsYXNoCisgIFxtYXRoYWN0aXZlCisgICUgbWFrZSB0aGUgdGV4aW5mbyBhY2NlbnQgY29tbWFuZHMgd29yayBpbiBtYXRoIG1vZGUKKyAgXGxldFwiPVxkZG90CisgIFxsZXRcJz1cYWN1dGUKKyAgXGxldFw9PVxiYXIKKyAgXGxldFxePVxoYXQKKyAgXGxldFxgPVxncmF2ZQorICBcbGV0XHU9XGJyZXZlCisgIFxsZXRcdj1cY2hlY2sKKyAgXGxldFx+PVx0aWxkZQorICBcbGV0XGRvdGFjY2VudD1cZG90CisgICRcZmluaXNobWF0aAorfQorXGRlZlxmaW5pc2htYXRoIzF7IzEkXGVuZGdyb3VwfSAgJSBDbG9zZSB0aGUgZ3JvdXAgb3BlbmVkIGJ5IFx0ZXguCisKKyUgU29tZSBhY3RpdmUgY2hhcmFjdGVycyAoc3VjaCBhcyA8KSBhcmUgc3BhY2VkIGRpZmZlcmVudGx5IGluIG1hdGguCislIFdlIGhhdmUgdG8gcmVzZXQgdGhlaXIgZGVmaW5pdGlvbnMgaW4gY2FzZSB0aGUgQG1hdGggd2FzIGFuIGFyZ3VtZW50CislIHRvIGEgY29tbWFuZCB3aGljaCBzZXRzIHRoZSBjYXRjb2RlcyAoc3VjaCBhcyBAaXRlbSBvciBAc2VjdGlvbikuCislCit7CisgIFxjYXRjb2RlYF4gPSBcYWN0aXZlCisgIFxjYXRjb2RlYDwgPSBcYWN0aXZlCisgIFxjYXRjb2RlYD4gPSBcYWN0aXZlCisgIFxjYXRjb2RlYCsgPSBcYWN0aXZlCisgIFxjYXRjb2RlYCcgPSBcYWN0aXZlCisgIFxnZGVmXG1hdGhhY3RpdmV7JQorICAgIFxsZXReID0gXHB0ZXhoYXQKKyAgICBcbGV0PCA9IFxwdGV4bGVzcworICAgIFxsZXQ+ID0gXHB0ZXhndHIKKyAgICBcbGV0KyA9IFxwdGV4cGx1cworICAgIFxsZXQnID0gXHB0ZXhxdW90ZXJpZ2h0CisgIH0KK30KKworJSBjdHJsIGlzIG5vIGxvbmdlciBhIFRleGluZm8gY29tbWFuZCwgYnV0IGxlYXZlIHRoaXMgZGVmaW5pdGlvbiBmb3IgZnVuLgorXGRlZlxjdHJsICMxe3tcdHQgXHJhd2JhY2tzbGFzaCBcaGF0fSMxfQorCislIEBpbmxpbmVmbXR7Rk1UTkFNRSxQUk9DRVNTRUQtVEVYVH0gYW5kIEBpbmxpbmVyYXd7Rk1UTkFNRSxSQVctVEVYVH0uCislIElnbm9yZSB1bmxlc3MgRk1UTkFNRSA9PSB0ZXg7IHRoZW4gaXQgaXMgbGlrZSBAaWZ0ZXggYW5kIEB0ZXgsCislIGV4Y2VwdCBzcGVjaWZpZWQgYXMgYSBub3JtYWwgYnJhY2VkIGFyZywgc28gbm8gbmV3bGluZXMgdG8gd29ycnkgYWJvdXQuCislIAorXGRlZlxvdXRmbXRuYW1ldGV4e3RleH0KKyUKK1xsb25nXGRlZlxpbmxpbmVmbXQjMXtcZG9pbmxpbmVmbXQgIzEsXGZpbmlzaH0KK1xsb25nXGRlZlxkb2lubGluZWZtdCMxLCMyLFxmaW5pc2h7JQorICBcZGVmXGlubGluZWZtdG5hbWV7IzF9JQorICBcaWZ4XGlubGluZWZtdG5hbWVcb3V0Zm10bmFtZXRleCBcaWdub3Jlc3BhY2VzICMyXGZpCit9CislIEZvciByYXcsIG11c3Qgc3dpdGNoIGludG8gQHRleCBiZWZvcmUgcGFyc2luZyB0aGUgYXJndW1lbnQsIHRvIGF2b2lkCislIHNldHRpbmcgY2F0Y29kZXMgcHJlbWF0dXJlbHkuICBEb2luZyBpdCB0aGlzIHdheSBtZWFucyB0aGF0LCBmb3IKKyUgZXhhbXBsZSwgQGlubGluZXJhd3todG1sLCBmb297YmFyfSBnZXRzIGEgcGFyc2UgZXJyb3IgaW5zdGVhZCBvZiBiZWluZworJSBpZ25vcmVkLiAgQnV0IHRoaXMgaXNuJ3QgaW1wb3J0YW50IGJlY2F1c2UgaWYgcGVvcGxlIHdhbnQgYSBsaXRlcmFsCislICpyaWdodCogYnJhY2UgdGhleSB3b3VsZCBoYXZlIHRvIHVzZSBhIGNvbW1hbmQgYW55d2F5LCBzbyB0aGV5IG1heSBhcworJSB3ZWxsIHVzZSBhIGNvbW1hbmQgdG8gZ2V0IGEgbGVmdCBicmFjZSB0b28uICBXZSBjb3VsZCByZS11c2UgdGhlCislIGRlbGltaXRlciBjaGFyYWN0ZXIgaWRlYSBmcm9tIFx2ZXJiLCBidXQgaXQgc2VlbXMgbGlrZSBvdmVya2lsbC4KKyUgCitcbG9uZ1xkZWZcaW5saW5lcmF3e1x0ZXggXGRvaW5saW5lcmF3fQorXGxvbmdcZGVmXGRvaW5saW5lcmF3IzF7XGRvaW5saW5lcmF3dHdvICMxLFxmaW5pc2h9CitcZGVmXGRvaW5saW5lcmF3dHdvIzEsIzIsXGZpbmlzaHslCisgIFxkZWZcaW5saW5lcmF3bmFtZXsjMX0lCisgIFxpZnhcaW5saW5lcmF3bmFtZVxvdXRmbXRuYW1ldGV4IFxpZ25vcmVzcGFjZXMgIzJcZmkKKyAgXGVuZGdyb3VwICUgY2xvc2UgZ3JvdXAgb3BlbmVkIGJ5IFx0ZXguCit9CisKKworXG1lc3NhZ2V7Z2x5cGhzLH0KKyUgYW5kIGxvZ29zLgorCislIEBAIHByaW50cyBhbiBALCBhcyBkb2VzIEBhdGNoYXJ7fS4KK1xkZWZcQHtcY2hhcjY0IH0KK1xsZXRcYXRjaGFyPVxACisKKyUgQHsgQH0gQGxicmFjZWNoYXJ7fSBAcmJyYWNlY2hhcnt9IGFsbCBnZW5lcmF0ZSBicmFjZSBjaGFyYWN0ZXJzLgorJSBVbmxlc3Mgd2UncmUgaW4gdHlwZXdyaXRlciwgdXNlIFxlY2ZvbnQgYmVjYXVzZSB0aGUgQ00gdGV4dCBmb250cyBkbworJSBub3QgaGF2ZSBicmFjZXMsIGFuZCB3ZSBkb24ndCB3YW50IHRvIHN3aXRjaCBpbnRvIG1hdGguCitcZGVmXG15bGJyYWNle3tcaWZtb25vc3BhY2VcZWxzZVxlY2ZvbnRcZmkgXGNoYXIxMjN9fQorXGRlZlxteXJicmFjZXt7XGlmbW9ub3NwYWNlXGVsc2VcZWNmb250XGZpIFxjaGFyMTI1fX0KK1xsZXRcez1cbXlsYnJhY2UgXGxldFxsYnJhY2VjaGFyPVx7CitcbGV0XH09XG15cmJyYWNlIFxsZXRccmJyYWNlY2hhcj1cfQorXGJlZ2luZ3JvdXAKKyAgJSBEZWZpbml0aW9ucyB0byBwcm9kdWNlIFx7IGFuZCBcfSBjb21tYW5kcyBmb3IgaW5kaWNlcywKKyAgJSBhbmQgQHsgYW5kIEB9IGZvciB0aGUgYXV4L3RvYyBmaWxlcy4KKyAgXGNhdGNvZGVgXHsgPSBcb3RoZXIgXGNhdGNvZGVgXH0gPSBcb3RoZXIKKyAgXGNhdGNvZGVgXFsgPSAxIFxjYXRjb2RlYFxdID0gMgorICBcY2F0Y29kZWBcISA9IDAgXGNhdGNvZGVgXFwgPSBcb3RoZXIKKyAgIWdkZWYhbGJyYWNlY21kW1x7XSUKKyAgIWdkZWYhcmJyYWNlY21kW1x9XSUKKyAgIWdkZWYhbGJyYWNlYXRjbWRbQHtdJQorICAhZ2RlZiFyYnJhY2VhdGNtZFtAfV0lCishZW5kZ3JvdXAKKworJSBAY29tbWF7fSB0byBhdm9pZCAsIHBhcnNpbmcgcHJvYmxlbXMuCitcbGV0XGNvbW1hID0gLAorCislIEFjY2VudHM6IEAsIEBkb3RhY2NlbnQgQHJpbmdhY2NlbnQgQHViYXJhY2NlbnQgQHVkb3RhY2NlbnQKKyUgT3RoZXJzIGFyZSBkZWZpbmVkIGJ5IHBsYWluIFRlWDogQGAgQCcgQCIgQF4gQH4gQD0gQHUgQHYgQEguCitcbGV0XCwgPSBccHRleGMKK1xsZXRcZG90YWNjZW50ID0gXHB0ZXhkb3QKK1xkZWZccmluZ2FjY2VudCMxe3tcYWNjZW50MjMgIzF9fQorXGxldFx0aWVhY2NlbnQgPSBccHRleHQKK1xsZXRcdWJhcmFjY2VudCA9IFxwdGV4YgorXGxldFx1ZG90YWNjZW50ID0gXGQKKworJSBPdGhlciBzcGVjaWFsIGNoYXJhY3RlcnM6IEBxdWVzdGlvbmRvd24gQGV4Y2xhbWRvd24gQG9yZGYgQG9yZG0KKyUgUGxhaW4gVGVYIGRlZmluZXM6IEBBQSBAQUUgQE8gQE9FIEBMIChwbHVzIGxvd2VyY2FzZSB2ZXJzaW9ucykgQHNzLgorXGRlZlxxdWVzdGlvbmRvd257P2B9CitcZGVmXGV4Y2xhbWRvd257IWB9CitcZGVmXG9yZGZ7XGxlYXZldm1vZGVccmFpc2UxZXhcaGJveHtcc2VsZWN0Zm9udHNcbGxsc2l6ZSBcdW5kZXJiYXJ7YX19fQorXGRlZlxvcmRte1xsZWF2ZXZtb2RlXHJhaXNlMWV4XGhib3h7XHNlbGVjdGZvbnRzXGxsbHNpemUgXHVuZGVyYmFye299fX0KKworJSBEb3RsZXNzIGkgYW5kIGRvdGxlc3MgaiwgdXNlZCBmb3IgYWNjZW50cy4KK1xkZWZcaW1hY3Jve2l9CitcZGVmXGptYWNyb3tqfQorXGRlZlxkb3RsZXNzIzF7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcaW1hY3JvIFxpZm1tb2RlXGltYXRoIFxlbHNlXHB0ZXhpIFxmaQorICBcZWxzZVxpZnhcdGVtcFxqbWFjcm8gXGlmbW1vZGVcam1hdGggXGVsc2VcaiBcZmkKKyAgXGVsc2UgXGVycm1lc3NhZ2V7QGRvdGxlc3MgY2FuIGJlIHVzZWQgb25seSB3aXRoIGkgb3Igan0lCisgIFxmaVxmaQorfQorCislIFRoZSBcVGVYe30gbG9nbywgYXMgaW4gcGxhaW4sIGJ1dCByZXNldHRpbmcgdGhlIHNwYWNpbmcgc28gdGhhdCBhCislIHBlcmlvZCBmb2xsb3dpbmcgY291bnRzIGFzIGVuZGluZyBhIHNlbnRlbmNlLiAgKElkZWEgZm91bmQgaW4gbGF0ZXguKQorJQorXGVkZWZcVGVYe1xUZVggXHNwYWNlZmFjdG9yPTEwMDAgfQorCislIEBMYVRlWHt9IGxvZ28uICBOb3QgcXVpdGUgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgZGVmaW5pdGlvbiBpbgorJSBsYXRleC5sdHgsIHNpbmNlIHdlIHVzZSBhIGRpZmZlcmVudCBmb250IGZvciB0aGUgcmFpc2VkIEE7IGl0J3MgbW9zdAorJSBjb252ZW5pZW50IGZvciB1cyB0byB1c2UgYW4gZXhwbGljaXRseSBzbWFsbGVyIGZvbnQsIHJhdGhlciB0aGFuIHVzaW5nCislIHRoZSBcc2NyaXB0c3R5bGUgZm9udCAoc2luY2Ugd2UgZG9uJ3QgcmVzZXQgXHNjcmlwdHN0eWxlIGFuZAorJSBcc2NyaXB0c2NyaXB0c3R5bGUpLgorJQorXGRlZlxMYVRlWHslCisgIExca2Vybi0uMzZlbQorICB7XHNldGJveDA9XGhib3h7VH0lCisgICBcdmJveCB0byBcaHQwe1xoYm94eyUKKyAgICAgXGlmeFx0ZXh0bm9taW5hbHNpemVceHdvcmRwdAorICAgICAgICUgZm9yIDEwcHQgcnVubmluZyB0ZXh0LCBcbGxsc2l6ZSAoOHB0KSBpcyB0b28gc21hbGwgZm9yIHRoZSBBIGluIExhVGVYLgorICAgICAgICUgUmV2ZXJ0IHRvIHBsYWluJ3MgXHNjcmlwdHNpemUsIHdoaWNoIGlzIDdwdC4KKyAgICAgICBcY291bnQyNTU9XHRoZVxmYW0gJFxmYW1cY291bnQyNTUgXHNjcmlwdHN0eWxlIEEkJQorICAgICBcZWxzZQorICAgICAgICUgRm9yIDExcHQsIHdlIGNhbiB1c2Ugb3VyIGxsbHNpemUuCisgICAgICAgXHNlbGVjdGZvbnRzXGxsbHNpemUgQSUKKyAgICAgXGZpCisgICAgIH0lCisgICAgIFx2c3MKKyAgfX0lCisgIFxrZXJuLS4xNWVtCisgIFxUZVgKK30KKworJSBTb21lIG1hdGggbW9kZSBzeW1ib2xzLgorXGRlZlxidWxsZXR7JFxwdGV4YnVsbGV0JH0KK1xkZWZcZ2Vxe1xpZm1tb2RlIFxnZVxlbHNlICRcZ2UkXGZpfQorXGRlZlxsZXF7XGlmbW1vZGUgXGxlXGVsc2UgJFxsZSRcZml9CitcZGVmXG1pbnVze1xpZm1tb2RlIC1cZWxzZSAkLSRcZml9CisKKyUgQGRvdHN7fSBvdXRwdXRzIGFuIGVsbGlwc2lzIHVzaW5nIHRoZSBjdXJyZW50IGZvbnQuCislIFdlIGRvIC41ZW0gcGVyIHBlcmlvZCBzbyB0aGF0IGl0IGhhcyB0aGUgc2FtZSBzcGFjaW5nIGluIHRoZSBjbQorJSB0eXBld3JpdGVyIGZvbnRzIGFzIHRocmVlIGFjdHVhbCBwZXJpb2QgY2hhcmFjdGVyczsgb24gdGhlIG90aGVyIGhhbmQsCislIGluIG90aGVyIHR5cGV3cml0ZXIgZm9udHMgdGhyZWUgcGVyaW9kcyBhcmUgd2lkZXIgdGhhbiAxLjVlbS4gIFNvIGRvCislIHdoaWNoZXZlciBpcyBsYXJnZXIuCislCitcZGVmXGRvdHN7JQorICBcbGVhdmV2bW9kZQorICBcc2V0Ym94MD1caGJveHsuLi59JSBnZXQgd2lkdGggb2YgdGhyZWUgcGVyaW9kcworICBcaWZkaW1cd2QwID4gMS41ZW0KKyAgICBcZGltZW4wID0gXHdkMAorICBcZWxzZQorICAgIFxkaW1lbjAgPSAxLjVlbQorICBcZmkKKyAgXGhib3ggdG8gXGRpbWVuMHslCisgICAgXGhza2lwIDBwdCBwbHVzLjI1ZmlsCisgICAgLlxoc2tpcCAwcHQgcGx1czFmaWwKKyAgICAuXGhza2lwIDBwdCBwbHVzMWZpbAorICAgIC5caHNraXAgMHB0IHBsdXMuNWZpbAorICB9JQorfQorCislIEBlbmRkb3Rze30gaXMgYW4gZW5kLW9mLXNlbnRlbmNlIGVsbGlwc2lzLgorJQorXGRlZlxlbmRkb3RzeyUKKyAgXGRvdHMKKyAgXHNwYWNlZmFjdG9yPVxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3IKK30KKworJSBAcG9pbnR7fSwgQHJlc3VsdHt9LCBAZXhwYW5zaW9ue30sIEBwcmludHt9LCBAZXF1aXZ7fS4KKyUKKyUgU2luY2UgdGhlc2UgY2hhcmFjdGVycyBhcmUgdXNlZCBpbiBleGFtcGxlcywgdGhleSBzaG91bGQgYmUgYW4gZXZlbiBudW1iZXIgb2YKKyUgXHR0IHdpZHRocy4gRWFjaCBcdHQgY2hhcmFjdGVyIGlzIDFlbiwgc28gdHdvIG1ha2VzIGl0IDFlbS4KKyUKK1xkZWZccG9pbnR7JFxzdGFyJH0KK1xkZWZcYXJyb3d7XGxlYXZldm1vZGVccmFpc2UuMDVleFxoYm94IHRvIDFlbXtcaGZpbCRccmlnaHRhcnJvdyRcaGZpbH19CitcZGVmXHJlc3VsdHtcbGVhdmV2bW9kZVxyYWlzZS4wNWV4XGhib3ggdG8gMWVte1xoZmlsJFxSaWdodGFycm93JFxoZmlsfX0KK1xkZWZcZXhwYW5zaW9ue1xsZWF2ZXZtb2RlXGhib3ggdG8gMWVte1xoZmlsJFxtYXBzdG8kXGhmaWx9fQorXGRlZlxwcmludHtcbGVhdmV2bW9kZVxsb3dlci4xZXhcaGJveCB0byAxZW17XGhmaWwkXGRhc2h2JFxoZmlsfX0KK1xkZWZcZXF1aXZ7XGxlYXZldm1vZGVcaGJveCB0byAxZW17XGhmaWwkXHB0ZXhlcXVpdiRcaGZpbH19CisKKyUgVGhlIEBlcnJvcnt9IGNvbW1hbmQuCislIEFkYXB0ZWQgZnJvbSB0aGUgVGVYYm9vaydzIFxib3hpdC4KKyUKK1xuZXdib3hcZXJyb3Jib3gKKyUKK3tcdGVudHQgXGdsb2JhbFxkaW1lbjAgPSAzZW19JSBXaWR0aCBvZiB0aGUgYm94LgorXGRpbWVuMiA9IC41NXB0ICUgVGhpY2tuZXNzIG9mIHJ1bGVzCislIFRoZSB0ZXh0LiAoYHInIGlzIG9wZW4gb24gdGhlIHJpZ2h0LCBgZScgc29tZXdoYXQgbGVzcyBzbyBvbiB0aGUgbGVmdC4pCitcc2V0Ym94MCA9IFxoYm94e1xrZXJuLS43NXB0IFxyZWR1Y2Vkc2YgXHB1dHdvcmRlcnJvclxrZXJuLTEuNXB0fQorJQorXHNldGJveFxlcnJvcmJveD1caGJveCB0byBcZGltZW4we1xoZmlsCisgICBcaHNpemUgPSBcZGltZW4wIFxhZHZhbmNlXGhzaXplIGJ5IC01LjhwdCAlIFNwYWNlIHRvIGxlZnQrcmlnaHQuCisgICBcYWR2YW5jZVxoc2l6ZSBieSAtMlxkaW1lbjIgJSBSdWxlcy4KKyAgIFx2Ym94eyUKKyAgICAgIFxocnVsZSBoZWlnaHRcZGltZW4yCisgICAgICBcaGJveHtcdnJ1bGUgd2lkdGhcZGltZW4yIFxrZXJuM3B0ICAgICAgICAgICUgU3BhY2UgdG8gbGVmdCBvZiB0ZXh0LgorICAgICAgICAgXHZ0b3B7XGtlcm4yLjRwdCBcYm94MCBca2VybjIuNHB0fSUgU3BhY2UgYWJvdmUvYmVsb3cuCisgICAgICAgICBca2VybjNwdFx2cnVsZSB3aWR0aFxkaW1lbjJ9JSBTcGFjZSB0byByaWdodC4KKyAgICAgIFxocnVsZSBoZWlnaHRcZGltZW4yfQorICAgIFxoZmlsfQorJQorXGRlZlxlcnJvcntcbGVhdmV2bW9kZVxsb3dlci43ZXhcY29weVxlcnJvcmJveH0KKwogJSBAcG91bmRze30gaXMgYSBzdGVybGluZyBzaWduLCB3aGljaCBLbnV0aCBwdXQgaW4gdGhlIENNIGl0YWxpYyBmb250LgogJQogXGRlZlxwb3VuZHN7e1xpdFwkfX0KQEAgLTIwNzUsNDkgKzMwNDksMTE4IEBACiAlIFRoZWlsaW5nLCB3aGljaCBzdXBwb3J0IHJlZ3VsYXIsIHNsYW50ZWQsIGJvbGQgYW5kIGJvbGQgc2xhbnRlZCAoYW5kCiAlICJvdXRsaW5lZCIgKGJsYWNrYm9hcmQgYm9hcmQsIHNvcnQgb2YpIHZlcnNpb25zLCB3aGljaCB3ZSBkb24ndCBuZWVkKS4KICUgSXQgaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5jdGFuLm9yZy90ZXgtYXJjaGl2ZS9mb250cy9ldXJvc3ltLgotJSAKKyUKICUgQWx0aG91Z2ggb25seSByZWd1bGFyIGlzIHRoZSB0cnVseSBvZmZpY2lhbCBFdXJvIHN5bWJvbCwgd2UgaWdub3JlCiAlIHRoYXQuICBUaGUgRXVybyBpcyBkZXNpZ25lZCB0byBiZSBzbGlnaHRseSB0YWxsZXIgdGhhbiB0aGUgcmVndWxhcgogJSBmb250IGhlaWdodC4KLSUgCislCiAlIGZleW1yIC0gcmVndWxhcgogJSBmZXltbyAtIHNsYW50ZWQKICUgZmV5YnIgLSBib2xkCiAlIGZleWJvIC0gYm9sZCBzbGFudGVkCi0lIAorJQogJSBUaGVyZSBpcyBubyBnb29kIChmcmVlKSB0eXBld3JpdGVyIHZlcnNpb24sIHRvIG15IGtub3dsZWRnZS4KICUgQSBmZXltcjEwIGV1cm8gaXMgfjcuM3B0IHdpZGUsIHdoaWxlIGEgbm9ybWFsIGNtdHQxMCBjaGFyIGlzIH41LjI1cHQgd2lkZS4KICUgSG1tLgotJSAKKyUKICUgQWxzbyBkb2Vzbid0IHdvcmsgaW4gbWF0aC4gIERvIHdlIG5lZWQgdG8gZG8gbWF0aCB3aXRoIGV1cm8gc3ltYm9scz8KICUgSG9wZSBub3QuCi0lIAotJSAKKyUKKyUKIFxkZWZcZXVyb3t7XGV1cm9mb250IGV9fQogXGRlZlxldXJvZm9udHslCiAgICUgV2Ugc2V0IHRoZSBmb250IGF0IGVhY2ggY29tbWFuZCwgcmF0aGVyIHRoYW4gcHJlZGVmaW5pbmcgaXQgaW4KICAgJSBcdGV4dGZvbnRzIGFuZCB0aGUgb3RoZXIgZm9udC1zd2l0Y2hpbmcgY29tbWFuZHMsIHNvIHRoYXQKICAgJSBpbnN0YWxsYXRpb25zIHdoaWNoIG5ldmVyIG5lZWQgdGhlIHN5bWJvbCBkb24ndCBoYXZlIHRvIGhhdmUgdGhlCiAgICUgZm9udCBpbnN0YWxsZWQuCi0gICUgCisgICUKICAgJSBUaGVyZSBpcyBvbmx5IG9uZSBkZXNpZ25lZCBzaXplIChub21pbmFsIDEwcHQpLCBzbyB3ZSBhbHdheXMgc2NhbGUKICAgJSB0aGF0IHRvIHRoZSBjdXJyZW50IG5vbWluYWwgc2l6ZS4KLSAgJSAKKyAgJQogICAlIEJ5IHRoZSB3YXksIHNpbXBseSB1c2luZyAiYXQgMWVtIiB3b3JrcyBmb3IgY21yMTAgYW5kIHRoZSBsaWtlLCBidXQKICAgJSBkb2VzIG5vdCB3b3JrIGZvciBjbWJ4MTAgYW5kIG90aGVyIGV4dGVuZGVkL3NocnVua2VuIGZvbnRzLgotICAlIAorICAlCiAgIFxkZWZcZXVyb3NpemV7XGNzbmFtZVxjdXJmb250c2l6ZSBub21pbmFsc2l6ZVxlbmRjc25hbWV9JQogICAlCi0gIFxpZnhcY3VyZm9udHN0eWxlXGJmc3R5bGVuYW1lIAorICBcaWZ4XGN1cmZvbnRzdHlsZVxiZnN0eWxlbmFtZQogICAgICUgYm9sZDoKICAgICBcZm9udFx0aGlzZXVyb2ZvbnQgPSBcaWZ1c2luZ2l0e2ZleWJvMTB9e2ZleWJyMTB9IGF0IFxldXJvc2l6ZQotICBcZWxzZSAKKyAgXGVsc2UKICAgICAlIHJlZ3VsYXI6CiAgICAgXGZvbnRcdGhpc2V1cm9mb250ID0gXGlmdXNpbmdpdHtmZXltbzEwfXtmZXltcjEwfSBhdCBcZXVyb3NpemUKICAgXGZpCiAgIFx0aGlzZXVyb2ZvbnQKIH0KIAorJSBHbHlwaHMgZnJvbSB0aGUgRUMgZm9udHMuICBXZSBkb24ndCB1c2UgXGxldCBmb3IgdGhlIGFsaWFzZXMsIGJlY2F1c2UKKyUgc29tZXRpbWVzIHdlIHJlZGVmaW5lIHRoZSBvcmlnaW5hbCBtYWNybywgYW5kIHRoZSBhbGlhcyBzaG91bGQgcmVmbGVjdAorJSB0aGUgcmVkZWZpbml0aW9uLgorJQorJSBVc2UgTGFUZVggbmFtZXMgZm9yIHRoZSBJY2VsYW5kaWMgbGV0dGVycy4KK1xkZWZcREh7e1xlY2ZvbnQgXGNoYXIiRDB9fSAlIEV0aAorXGRlZlxkaHt7XGVjZm9udCBcY2hhciJGMH19ICUgZXRoCitcZGVmXFRIe3tcZWNmb250IFxjaGFyIkRFfX0gJSBUaG9ybgorXGRlZlx0aHt7XGVjZm9udCBcY2hhciJGRX19ICUgdGhvcm4KKyUKK1xkZWZcZ3VpbGxlbWV0bGVmdHt7XGVjZm9udCBcY2hhciIxM319CitcZGVmXGd1aWxsZW1vdGxlZnR7XGd1aWxsZW1ldGxlZnR9CitcZGVmXGd1aWxsZW1ldHJpZ2h0e3tcZWNmb250IFxjaGFyIjE0fX0KK1xkZWZcZ3VpbGxlbW90cmlnaHR7XGd1aWxsZW1ldHJpZ2h0fQorXGRlZlxndWlsc2luZ2xsZWZ0e3tcZWNmb250IFxjaGFyIjBFfX0KK1xkZWZcZ3VpbHNpbmdscmlnaHR7e1xlY2ZvbnQgXGNoYXIiMEZ9fQorXGRlZlxxdW90ZWRibGJhc2V7e1xlY2ZvbnQgXGNoYXIiMTJ9fQorXGRlZlxxdW90ZXNpbmdsYmFzZXt7XGVjZm9udCBcY2hhciIwRH19CislCislIFRoaXMgcG9zaXRpb25pbmcgaXMgbm90IHBlcmZlY3QgKHNlZSB0aGUgb2dvbmVrIExhVGVYIHBhY2thZ2UpLCBidXQKKyUgd2UgaGF2ZSB0aGUgcHJlY29tcG9zZWQgZ2x5cGhzIGZvciB0aGUgbW9zdCBjb21tb24gY2FzZXMuICBXZSBwdXQgdGhlCislIHRlc3RzIHRvIHVzZSB0aG9zZSBnbHlwaHMgaW4gdGhlIHNpbmdsZSBcb2dvbmVrIG1hY3JvIHNvIHdlIGhhdmUgZmV3ZXIKKyUgZHVtbXkgZGVmaW5pdGlvbnMgdG8gd29ycnkgYWJvdXQgZm9yIGluZGV4IGVudHJpZXMsIGV0Yy4KKyUKKyUgb2dvbmVrIGlzIGFsc28gdXNlZCB3aXRoIG90aGVyIGxldHRlcnMgaW4gTGl0aHVhbmlhbiAoSU9VKSwgYnV0IHVzaW5nCislIHRoZSBwcmVjb21wb3NlZCBnbHlwaHMgZm9yIHRob3NlIGlzIG5vdCBzbyBlYXN5IHNpbmNlIHRoZXkgYXJlbid0IGluCislIHRoZSBzYW1lIEVDIGZvbnQuCitcZGVmXG9nb25layMxe3slCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGVtcFxtYWNyb2NoYXJBXEFvZ29uZWsKKyAgXGVsc2VcaWZ4XHRlbXBcbWFjcm9jaGFyYVxhb2dvbmVrCisgIFxlbHNlXGlmeFx0ZW1wXG1hY3JvY2hhckVcRW9nb25laworICBcZWxzZVxpZnhcdGVtcFxtYWNyb2NoYXJlXGVvZ29uZWsKKyAgXGVsc2UKKyAgICBcZWNmb250IFxzZXRib3gwPVxoYm94eyMxfSUKKyAgICBcaWZkaW1caHQwPTFleFxhY2NlbnQiMEMgIzElCisgICAgXGVsc2Vcb29hbGlnbntcdW5oYm94MFxjcmNyXGhpZGV3aWR0aFxjaGFyIjBDIFxoaWRld2lkdGh9JQorICAgIFxmaQorICBcZmlcZmlcZmlcZmkKKyAgfSUKK30KK1xkZWZcQW9nb25la3t7XGVjZm9udCBcY2hhciI4MX19XGRlZlxtYWNyb2NoYXJBe0F9CitcZGVmXGFvZ29uZWt7e1xlY2ZvbnQgXGNoYXIiQTF9fVxkZWZcbWFjcm9jaGFyYXthfQorXGRlZlxFb2dvbmVre3tcZWNmb250IFxjaGFyIjg2fX1cZGVmXG1hY3JvY2hhckV7RX0KK1xkZWZcZW9nb25la3t7XGVjZm9udCBcY2hhciJBNn19XGRlZlxtYWNyb2NoYXJle2V9CislCislIFVzZSB0aGUgZWMqIGZvbnRzIChjbS1zdXBlciBpbiBvdXRsaW5lIGZvcm1hdCkgZm9yIG5vbi1DTSBnbHlwaHMuCitcZGVmXGVjZm9udHslCisgICUgV2UgY2FuJ3QgZGlzdGluZ3Vpc2ggc2VyaWYvc2FucyBhbmQgaXRhbGljL3NsYW50ZWQsIGJ1dCB0aGlzCisgICUgaXMgdXNlZCBmb3IgY3J1ZGUgaGFja3MgYW55d2F5IChsaWtlIGFkZGluZyBGcmVuY2ggYW5kIEdlcm1hbgorICAlIHF1b3RlcyB0byBkb2N1bWVudHMgdHlwZXNldCB3aXRoIENNLCB3aGVyZSB3ZSBsb3NlIGtlcm5pbmcpLCBzbworICAlIGhvcGVmdWxseSBub2JvZHkgd2lsbCBub3RpY2UvY2FyZS4KKyAgXGVkZWZcZWNzaXple1xjc25hbWVcY3VyZm9udHNpemUgZWNzaXplXGVuZGNzbmFtZX0lCisgIFxlZGVmXG5vbWluYWxzaXple1xjc25hbWVcY3VyZm9udHNpemUgbm9taW5hbHNpemVcZW5kY3NuYW1lfSUKKyAgXGlmbW9ub3NwYWNlCisgICAgJSB0eXBld3JpdGVyOgorICAgIFxmb250XHRoaXNlY2ZvbnQgPSBlY3R0XGVjc2l6ZSBcc3BhY2UgYXQgXG5vbWluYWxzaXplCisgIFxlbHNlCisgICAgXGlmeFxjdXJmb250c3R5bGVcYmZzdHlsZW5hbWUKKyAgICAgICUgYm9sZDoKKyAgICAgIFxmb250XHRoaXNlY2ZvbnQgPSBlY2JcaWZ1c2luZ2l0e2l9e3h9XGVjc2l6ZSBcc3BhY2UgYXQgXG5vbWluYWxzaXplCisgICAgXGVsc2UKKyAgICAgICUgcmVndWxhcjoKKyAgICAgIFxmb250XHRoaXNlY2ZvbnQgPSBlY1xpZnVzaW5naXR7dGl9e3JtfVxlY3NpemUgXHNwYWNlIGF0IFxub21pbmFsc2l6ZQorICAgIFxmaQorICBcZmkKKyAgXHRoaXNlY2ZvbnQKK30KKwogJSBAcmVnaXN0ZXJlZHN5bWJvbCAtIFIgaW4gYSBjaXJjbGUuICBUaGUgZm9udCBmb3IgdGhlIFIgc2hvdWxkIHJlYWxseQogJSBiZSBzbWFsbGVyIHlldCwgYnV0IGxsbHNpemUgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvIGZvciBub3cuCiAlIEFkYXB0ZWQgZnJvbSB0aGUgcGxhaW4udGV4IGRlZmluaXRpb24gb2YgXGNvcHlyaWdodC4KQEAgLTIxMjgsMTQgKzMxNzEsMjQgQEAKICAgICB9JCUKIH0KIAorJSBAdGV4dGRlZ3JlZSAtIHRoZSBub3JtYWwgZGVncmVlcyBzaWduLgorJQorXGRlZlx0ZXh0ZGVncmVleyReXGNpcmMkfQorCiAlIExhdXJlbnQgU2llYmVubWFubiByZXBvcnRzIFxPcmIgdW5kZWZpbmVkIHdpdGg6CiAlICBUZXh0dXJlcyAxLjcuNyAocHJlbG9hZGVkIGZvcm1hdD1wbGFpbiA5My4xMC4xNCkgICg2OEspICAxNiBBUFIgMjAwNCAwMjozOAogJSBzbyB3ZSdsbCBkZWZpbmUgaXQgaWYgbmVjZXNzYXJ5LgotJSAKLVxpZnhcT3JiXHVuZGVmaW5lZAorJQorXGlmeFxPcmJcdGhpc2lzdW5kZWZpbmVkCiBcZGVmXE9yYntcbWF0aGhleGJveDIwRH0KIFxmaQogCislIFF1b3Rlcy4KK1xjaGFyZGVmXHF1b3RlZGJsbGVmdD0iNUMKK1xjaGFyZGVmXHF1b3RlZGJscmlnaHQ9YFwiCitcY2hhcmRlZlxxdW90ZWxlZnQ9YFxgCitcY2hhcmRlZlxxdW90ZXJpZ2h0PWBcJworCiAKIFxtZXNzYWdle3BhZ2UgaGVhZGluZ3MsfQogCkBAIC0yMTU0LDggKzMyMDcsOSBAQAogXG5ld2lmXGlmc2V0c2hvcnRjb250ZW50c2FmdGVydGl0bGVwYWdlCiAgXGxldFxzZXRzaG9ydGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UgPSBcc2V0c2hvcnRjb250ZW50c2FmdGVydGl0bGVwYWdldHJ1ZQogCi1ccGFyc2VhcmdkZWZcc2hvcnR0aXRsZXBhZ2V7XGJlZ2luZ3JvdXBcaGJveHt9XHZza2lwIDEuNWluIFxjaGFwcm0gXGNlbnRlcmxpbmV7IzF9JQotICAgICAgICBcZW5kZ3JvdXBccGFnZVxoYm94e31ccGFnZX0KK1xwYXJzZWFyZ2RlZlxzaG9ydHRpdGxlcGFnZXslCisgIFxiZWdpbmdyb3VwIFxoYm94e31cdnNraXAgMS41aW4gXGNoYXBybSBcY2VudGVybGluZXsjMX0lCisgIFxlbmRncm91cFxwYWdlXGhib3h7fVxwYWdlfQogCiBcZW52ZGVmXHRpdGxlcGFnZXslCiAgICUgT3BlbiBvbmUgZXh0cmEgZ3JvdXAsIGFzIHdlIHdhbnQgdG8gY2xvc2UgaXQgaW4gdGhlIG1pZGRsZSBvZiBcRXRpdGxlcGFnZS4KQEAgLTIyMTUsMTcgKzMyNjksMjggQEAKICAgXGZpbmlzaGVkdGl0bGVwYWdldHJ1ZQogfQogCi0lJSUgTWFjcm9zIHRvIGJlIHVzZWQgd2l0aGluIEB0aXRsZXBhZ2U6CislIFNldHRpbmdzIHVzZWQgZm9yIHR5cGVzZXR0aW5nIHRpdGxlczogbm8gaHlwaGVuYXRpb24sIG5vIGluZGVudGF0aW9uLAorJSBkb24ndCB3b3JyeSBtdWNoIGFib3V0IHNwYWNpbmcsIHJhZ2dlZCByaWdodC4gIFRoaXMgc2hvdWxkIGJlIHVzZWQKKyUgaW5zaWRlIGEgXHZib3gsIGFuZCBmb250cyBuZWVkIHRvIGJlIHNldCBhcHByb3ByaWF0ZWx5IGZpcnN0LiAgQmVjYXVzZQorJSBpdCBpcyBhbHdheXMgdXNlZCBmb3IgdGl0bGVzLCBub3RoaW5nIGVsc2UsIHdlIGNhbGwgXHJtaXNib2xkLiAgXHBhcgorJSBzaG91bGQgYmUgc3BlY2lmaWVkIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBcdmJveCwgc2luY2UgYSB2Ym94IGlzIGEgZ3JvdXAuCislIAorXGRlZlxyYWdnZWR0aXRsZXNldHRpbmdzeyUKKyAgXHJtaXNib2xkCisgIFxoeXBoZW5wZW5hbHR5PTEwMDAwCisgIFxwYXJpbmRlbnQ9MHB0CisgIFx0b2xlcmFuY2U9NTAwMAorICBccHRleHJhZ2dlZHJpZ2h0Cit9CisKKyUgTWFjcm9zIHRvIGJlIHVzZWQgd2l0aGluIEB0aXRsZXBhZ2U6CiAKIFxsZXRcc3VidGl0bGVybT1cdGVucm0KIFxkZWZcc3VidGl0bGVmb250e1xzdWJ0aXRsZXJtIFxub3JtYWxiYXNlbGluZXNraXAgPSAxM3B0IFxub3JtYWxiYXNlbGluZXN9CiAKLVxkZWZcYXV0aG9yZm9udHtcYXV0aG9ycm0gXG5vcm1hbGJhc2VsaW5lc2tpcCA9IDE2cHQgXG5vcm1hbGJhc2VsaW5lcwotCQlcbGV0XHR0PVxhdXRob3J0dH0KLQogXHBhcnNlYXJnZGVmXHRpdGxleyUKICAgXGNoZWNrZW52XHRpdGxlcGFnZQotICBcbGVmdGxpbmV7XHRpdGxlZm9udHNccm0gIzF9CisgIFx2Ym94e1x0aXRsZWZvbnRzIFxyYWdnZWR0aXRsZXNldHRpbmdzICMxXHBhcn0lCiAgICUgcHJpbnQgYSBydWxlIGF0IHRoZSBwYWdlIGJvdHRvbSBhbHNvLgogICBcZmluaXNoZWR0aXRsZXBhZ2VmYWxzZQogICBcdnNraXA0cHQgXGhydWxlIGhlaWdodCA0cHQgd2lkdGggXGhzaXplIFx2c2tpcDRwdApAQCAtMjI0NiwxMiArMzMxMSwxMiBAQAogICBcZWxzZQogICAgIFxjaGVja2Vudlx0aXRsZXBhZ2UKICAgICBcaWZzZWVuYXV0aG9yXGVsc2UgXHZza2lwIDBwdCBwbHVzIDFmaWxsbCBcc2VlbmF1dGhvcnRydWUgXGZpCi0gICAge1xhdXRob3Jmb250IFxsZWZ0bGluZXsjMX19JQorICAgIHtcc2VjZm9udHNccm1pc2JvbGQgXGxlZnRsaW5leyMxfX0lCiAgIFxmaQogfQogCiAKLSUlJSBTZXQgdXAgcGFnZSBoZWFkaW5ncyBhbmQgZm9vdGluZ3MuCislIFNldCB1cCBwYWdlIGhlYWRpbmdzIGFuZCBmb290aW5ncy4KIAogXGxldFx0aGlzcGFnZT1cZm9saW8KIApAQCAtMjI5OSwxMiArMzM2NCwzOSBAQAogICAlCiAgICUgTGVhdmUgc29tZSBzcGFjZSBmb3IgdGhlIGZvb3RsaW5lLiAgSG9wZWZ1bGx5IG9rIHRvIGFzc3VtZQogICAlIEBldmVuZm9vdGluZyB3aWxsIG5vdCBiZSB1c2VkIGJ5IGl0c2VsZi4KLSAgXGdsb2JhbFxhZHZhbmNlXHBhZ2VoZWlnaHQgYnkgLVxiYXNlbGluZXNraXAKLSAgXGdsb2JhbFxhZHZhbmNlXHZzaXplIGJ5IC1cYmFzZWxpbmVza2lwCisgIFxnbG9iYWxcYWR2YW5jZVxwYWdlaGVpZ2h0IGJ5IC0xMnB0CisgIFxnbG9iYWxcYWR2YW5jZVx2c2l6ZSBieSAtMTJwdAogfQogCiBccGFyc2VhcmdkZWZcZXZlcnlmb290aW5ne1xvZGRmb290aW5neHh4eyMxfVxldmVuZm9vdGluZ3h4eHsjMX19CiAKKyUgQGV2ZW5oZWFkaW5nbWFya3MgdG9wICAgICBcdGhpc2NoYXB0ZXIgPC0gY2hhcHRlciBhdCB0aGUgdG9wIG9mIGEgcGFnZQorJSBAZXZlbmhlYWRpbmdtYXJrcyBib3R0b20gIFx0aGlzY2hhcHRlciA8LSBjaGFwdGVyIGF0IHRoZSBib3R0b20gb2YgYSBwYWdlCislCislIFRoZSBzYW1lIHNldCBvZiBhcmd1bWVudHMgZm9yOgorJQorJSBAb2RkaGVhZGluZ21hcmtzCislIEBldmVuZm9vdGluZ21hcmtzCislIEBvZGRmb290aW5nbWFya3MKKyUgQGV2ZXJ5aGVhZGluZ21hcmtzCislIEBldmVyeWZvb3RpbmdtYXJrcworCitcZGVmXGV2ZW5oZWFkaW5nbWFya3N7XGhlYWRpbmdtYXJrc3tldmVufXtoZWFkaW5nfX0KK1xkZWZcb2RkaGVhZGluZ21hcmtze1xoZWFkaW5nbWFya3N7b2RkfXtoZWFkaW5nfX0KK1xkZWZcZXZlbmZvb3RpbmdtYXJrc3tcaGVhZGluZ21hcmtze2V2ZW59e2Zvb3Rpbmd9fQorXGRlZlxvZGRmb290aW5nbWFya3N7XGhlYWRpbmdtYXJrc3tvZGR9e2Zvb3Rpbmd9fQorXGRlZlxldmVyeWhlYWRpbmdtYXJrcyMxIHtcaGVhZGluZ21hcmtze2V2ZW59e2hlYWRpbmd9eyMxfQorICAgICAgICAgICAgICAgICAgICAgICAgICBcaGVhZGluZ21hcmtze29kZH17aGVhZGluZ317IzF9IH0KK1xkZWZcZXZlcnlmb290aW5nbWFya3MjMSB7XGhlYWRpbmdtYXJrc3tldmVufXtmb290aW5nfXsjMX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgXGhlYWRpbmdtYXJrc3tvZGR9e2Zvb3Rpbmd9eyMxfSB9CislICMxID0gZXZlbi9vZGQsICMyID0gaGVhZGluZy9mb290aW5nLCAjMyA9IHRvcC9ib3R0b20uCitcZGVmXGhlYWRpbmdtYXJrcyMxIzIjMyB7JQorICBcZXhwYW5kYWZ0ZXJcbGV0XGV4cGFuZGFmdGVyXHRlbXAgXGNzbmFtZSBnZXQjM2hlYWRpbmdtYXJrc1xlbmRjc25hbWUKKyAgXGdsb2JhbFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIGdldCMxIzJtYXJrc1xlbmRjc25hbWUgXHRlbXAKK30KKworXGV2ZXJ5aGVhZGluZ21hcmtzIGJvdHRvbQorXGV2ZXJ5Zm9vdGluZ21hcmtzIGJvdHRvbQogCiAlIEBoZWFkaW5ncyBkb3VibGUgICAgICB0dXJucyBoZWFkaW5ncyBvbiBmb3IgZG91YmxlLXNpZGVkIHByaW50aW5nLgogJSBAaGVhZGluZ3Mgc2luZ2xlICAgICAgdHVybnMgaGVhZGluZ3Mgb24gZm9yIHNpbmdsZS1zaWRlZCBwcmludGluZy4KQEAgLTIzMTgsMTAgKzM0MTAsMTQgQEAKIAogXGRlZlxoZWFkaW5ncyAjMSB7XGNzbmFtZSBIRUFESU5HUyMxXGVuZGNzbmFtZX0KIAotXGRlZlxIRUFESU5HU29mZnslCi1cZ2xvYmFsXGV2ZW5oZWFkbGluZT17XGhmaWx9IFxnbG9iYWxcZXZlbmZvb3RsaW5lPXtcaGZpbH0KLVxnbG9iYWxcb2RkaGVhZGxpbmU9e1xoZmlsfSBcZ2xvYmFsXG9kZGZvb3RsaW5lPXtcaGZpbH19Ci1cSEVBRElOR1NvZmYKK1xkZWZcaGVhZGluZ3NvZmZ7JSBub24tZ2xvYmFsIGhlYWRpbmdzIGVsaW1pbmF0aW9uCisgIFxldmVuaGVhZGxpbmU9e1xoZmlsfVxldmVuZm9vdGxpbmU9e1xoZmlsfSUKKyAgIFxvZGRoZWFkbGluZT17XGhmaWx9XG9kZGZvb3RsaW5lPXtcaGZpbH0lCit9CisKK1xkZWZcSEVBRElOR1NvZmZ7e1xnbG9iYWxkZWZzPTEgXGhlYWRpbmdzb2ZmfX0gJSBnbG9iYWwgc2V0dGluZworXEhFQURJTkdTb2ZmICAlIGl0J3MgdGhlIGRlZmF1bHQKKwogJSBXaGVuIHdlIHR1cm4gaGVhZGluZ3Mgb24sIHNldCB0aGUgcGFnZSBudW1iZXIgdG8gMS4KICUgRm9yIGRvdWJsZS1zaWRlZCBwcmludGluZywgcHV0IGN1cnJlbnQgZmlsZSBuYW1lIGluIGxvd2VyIGxlZnQgY29ybmVyLAogJSBjaGFwdGVyIG5hbWUgb24gaW5zaWRlIHRvcCBvZiByaWdodCBoYW5kIHBhZ2VzLCBkb2N1bWVudApAQCAtMjM3Miw3ICszNDY4LDcgQEAKICUgVGhpcyBwcm9kdWNlcyBEYXkgTW9udGggWWVhciBzdHlsZSBvZiBvdXRwdXQuCiAlIE9ubHkgZGVmaW5lIGlmIG5vdCBhbHJlYWR5IGRlZmluZWQsIGluIGNhc2UgYSB0eGktPz8udGV4IGZpbGUgaGFzIHNldAogJSB1cCBhIGRpZmZlcmVudCBmb3JtYXQgKGUuZy4sIHR4aS1jcy50ZXggZG9lcyB0aGlzKS4KLVxpZnhcdG9kYXlcdW5kZWZpbmVkCitcaWZ4XHRvZGF5XHRoaXNpc3VuZGVmaW5lZAogXGRlZlx0b2RheXslCiAgIFxudW1iZXJcZGF5XHNwYWNlCiAgIFxpZmNhc2VcbW9udGgKQEAgLTI0MzMsNyArMzUyOSw3IEBACiAgICAgXGJlZ2luZ3JvdXAKICAgICAgIFxhZHZhbmNlXGxlZnRza2lwIGJ5LVx0YWJsZWluZGVudAogICAgICAgXGFkdmFuY2VcaHNpemUgYnlcdGFibGVpbmRlbnQKLSAgICAgIFxhZHZhbmNlXHJpZ2h0c2tpcCBieTBwdCBwbHVzMWZpbAorICAgICAgXGFkdmFuY2VccmlnaHRza2lwIGJ5MHB0IHBsdXMxZmlsXHJlbGF4CiAgICAgICBcbGVhdmV2bW9kZVx1bmhib3gwXHBhcgogICAgIFxlbmRncm91cAogICAgICUKQEAgLTI0NDcsNyArMzU0Myw3IEBACiAgICAgJSBjYXVzZSB0aGUgZXhhbXBsZSBhbmQgdGhlIGl0ZW0gdG8gY3Jhc2ggdG9nZXRoZXIuICBTbyB3ZSB1c2UgdGhpcwogICAgICUgYml6YXJyZSB2YWx1ZSBvZiAxMDAwMSBhcyBhIHNpZ25hbCB0byBcYWJvdmVlbnZicmVhayB0byBpbnNlcnQKICAgICAlIFxwYXJza2lwIGdsdWUgYWZ0ZXIgYWxsLiAgU2VjdGlvbiB0aXRsZXMgYXJlIGhhbmRsZWQgdGhpcyB3YXkgYWxzby4KLSAgICAlIAorICAgICUKICAgICBccGVuYWx0eSAxMDAwMQogICAgIFxlbmRncm91cAogICAgIFxpdGVteG5lZWRzbmVnYXRpdmV2c2tpcGZhbHNlCkBAIC0yNTQxLDkgKzM2MzcsMTggQEAKICAgXHBhcmluZGVudD0wcHQKICAgXHBhcnNraXA9XHNtYWxsc2tpcGFtb3VudAogICBcaWZkaW1ccGFyc2tpcD0wcHQgXHBhcnNraXA9MnB0IFxmaQorICAlCisgICUgVHJ5IHR5cGVzZXR0aW5nIHRoZSBpdGVtIG1hcmsgdGhhdCBpZiB0aGUgZG9jdW1lbnQgZXJyb25lb3VzbHkgc2F5cworICAlIHNvbWV0aGluZyBsaWtlIEBpdGVtaXplIEBzYW1wIChpbnRlbmRpbmcgQHRhYmxlKSwgdGhlcmUncyBhbiBlcnJvcgorICAlIHJpZ2h0IGF3YXkgYXQgdGhlIEBpdGVtaXplLiAgSXQncyBub3QgdGhlIGJlc3QgZXJyb3IgbWVzc2FnZSBpbiB0aGUKKyAgJSB3b3JsZCwgYnV0IGl0J3MgYmV0dGVyIHRoYW4gbGVhdmluZyBpdCB0byB0aGUgQGl0ZW0uICBUaGlzIG1lYW5zIGlmCisgICUgdGhlIHVzZXIgd2FudHMgYW4gZW1wdHkgbWFyaywgdGhleSBoYXZlIHRvIHNheSBAd3t9IG5vdCBqdXN0IEB3LgogICBcZGVmXGl0ZW1jb250ZW50c3sjMX0lCisgIFxzZXRib3gwID0gXGhib3h7XGl0ZW1jb250ZW50c30lCisgICUKICAgJSBAaXRlbWl6ZSB3aXRoIG5vIGFyZyBpcyBlcXVpdmFsZW50IHRvIEBpdGVtaXplIEBidWxsZXQuCiAgIFxpZnhcaXRlbWNvbnRlbnRzXGVtcHR5XGRlZlxpdGVtY29udGVudHN7XGJ1bGxldH1cZmkKKyAgJQogICBcbGV0XGl0ZW09XGl0ZW1pemVpdGVtCiB9CiAKQEAgLTI1NjQsNiArMzY2OSw3IEBACiAgICBcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDAgXHBhcnNraXA9MGluIFxmaQogICAgXG5vaW5kZW50CiAgICBcaGJveCB0byAwcHR7XGhzcyBcaXRlbWNvbnRlbnRzIFxrZXJuXGl0ZW1tYXJnaW59JQorICAgJQogICAgXHZhZGp1c3R7XHBlbmFsdHkgMTIwMH19JSBub3QgZ29vZCB0byBicmVhayBhZnRlciBmaXJzdCBsaW5lIG9mIGl0ZW0uCiAgIFxmbHVzaGNyCiB9CkBAIC0yNzg1LDEyICszODkxLDE5IEBACiAlCiAlIEBoZWFkaXRlbSBzdGFydHMgYSBoZWFkaW5nIHJvdywgd2hpY2ggd2UgdHlwZXNldCBpbiBib2xkLgogJSBBc3NpZ25tZW50cyBoYXZlIHRvIGJlIGdsb2JhbCBzaW5jZSB3ZSBhcmUgaW5zaWRlIHRoZSBpbXBsaWNpdCBncm91cAotJSBvZiBhbiBhbGlnbm1lbnQgZW50cnkuICBOb3RlIHRoYXQgXGV2ZXJ5Y3IgcmVzZXRzIFxldmVyeXRhYi4KLVxkZWZcaGVhZGl0ZW17XGNoZWNrZW52XG11bHRpdGFibGUgXGNyY3IgXGdsb2JhbFxldmVyeXRhYj17XGJmfVx0aGVcZXZlcnl0YWJ9JQorJSBvZiBhbiBhbGlnbm1lbnQgZW50cnkuICBcZXZlcnljciByZXNldHMgXGV2ZXJ5dGFiIHNvIHdlIGRvbid0IGhhdmUgdG8KKyUgdW5kbyBpdCBvdXJzZWx2ZXMuCitcZGVmXGhlYWRpdGVtZm9udHtcYn0lIGZvciBwZW9wbGUgdG8gdXNlIGluIHRoZSB0ZW1wbGF0ZSByb3c7IG5vdCBjaGFuZ2VhYmxlCitcZGVmXGhlYWRpdGVteyUKKyAgXGNoZWNrZW52XG11bHRpdGFibGUKKyAgXGNyY3IKKyAgXGdsb2JhbFxldmVyeXRhYj17XGJmfSUgY2FuJ3QgdXNlIFxoZWFkaXRlbWZvbnQgc2luY2UgdGhlIHBhcnNpbmcgZGlmZmVycworICBcdGhlXGV2ZXJ5dGFiICUgZm9yIHRoZSBmaXJzdCBpdGVtCit9JQogJQogJSBBIFx0YWIgdXNlZCB0byBpbmNsdWRlIFxoc2tpcDFzcC4gIEJ1dCB0aGVuIHRoZSBzcGFjZSBpbiBhIHRlbXBsYXRlCiAlIGxpbmUgaXMgbm90IGVub3VnaC4gIFRoYXQgaXMgYmFkLiAgU28gbGV0J3MgZ28gYmFjayB0byBqdXN0IGAmJyB1bnRpbAotJSB3ZSBlbmNvdW50ZXIgdGhlIHByb2JsZW0gaXQgd2FzIGludGVuZGVkIHRvIHNvbHZlIGFnYWluLgorJSB3ZSBhZ2FpbiBlbmNvdW50ZXIgdGhlIHByb2JsZW0gdGhlIDFzcCB3YXMgaW50ZW5kZWQgdG8gc29sdmUuCiAlCQkJCQktLWthcmwsIG5hdGhhbkBhY20ub3JnLCAyMGFwcjk5LgogXGRlZlx0YWJ7XGNoZWNrZW52XG11bHRpdGFibGUgJlx0aGVcZXZlcnl0YWJ9JQogCkBAIC0yOTAyLDE4ICs0MDE1LDE4IEBACiBcc2V0Ym94MD1cdmJveHtYfVxnbG9iYWxcbXVsdGl0YWJsZWxpbmVzcGFjZT1cdGhlXGJhc2VsaW5lc2tpcAogXGdsb2JhbFxhZHZhbmNlXG11bHRpdGFibGVsaW5lc3BhY2UgYnktXGh0MAogXGZpCi0lJSBUZXN0IHRvIHNlZSBpZiBwYXJza2lwIGlzIGxhcmdlciB0aGFuIHNwYWNlIGJldHdlZW4gbGluZXMgb2YKLSUlIHRhYmxlLiBJZiBub3QsIGRvIG5vdGhpbmcuCi0lJSAgICAgICAgSWYgc28sIHNldCB0byBzYW1lIGRpbWVuc2lvbiBhcyBtdWx0aXRhYmxlbGluZXNwYWNlLgorJSBUZXN0IHRvIHNlZSBpZiBwYXJza2lwIGlzIGxhcmdlciB0aGFuIHNwYWNlIGJldHdlZW4gbGluZXMgb2YKKyUgdGFibGUuIElmIG5vdCwgZG8gbm90aGluZy4KKyUgICAgICAgIElmIHNvLCBzZXQgdG8gc2FtZSBkaW1lbnNpb24gYXMgbXVsdGl0YWJsZWxpbmVzcGFjZS4KIFxpZmRpbVxtdWx0aXRhYmxlcGFyc2tpcD5cbXVsdGl0YWJsZWxpbmVzcGFjZQogXGdsb2JhbFxtdWx0aXRhYmxlcGFyc2tpcD1cbXVsdGl0YWJsZWxpbmVzcGFjZQotXGdsb2JhbFxhZHZhbmNlXG11bHRpdGFibGVwYXJza2lwLTdwdCAlJSB0byBrZWVwIHBhcnNraXAgc29tZXdoYXQgc21hbGxlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlJSB0aGFuIHNraXAgYmV0d2VlbiBsaW5lcyBpbiB0aGUgdGFibGUuCitcZ2xvYmFsXGFkdmFuY2VcbXVsdGl0YWJsZXBhcnNraXAtN3B0ICUgdG8ga2VlcCBwYXJza2lwIHNvbWV3aGF0IHNtYWxsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSB0aGFuIHNraXAgYmV0d2VlbiBsaW5lcyBpbiB0aGUgdGFibGUuCiBcZmklCiBcaWZkaW1cbXVsdGl0YWJsZXBhcnNraXA9MHB0CiBcZ2xvYmFsXG11bHRpdGFibGVwYXJza2lwPVxtdWx0aXRhYmxlbGluZXNwYWNlCi1cZ2xvYmFsXGFkdmFuY2VcbXVsdGl0YWJsZXBhcnNraXAtN3B0ICUlIHRvIGtlZXAgcGFyc2tpcCBzb21ld2hhdCBzbWFsbGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUlIHRoYW4gc2tpcCBiZXR3ZWVuIGxpbmVzIGluIHRoZSB0YWJsZS4KK1xnbG9iYWxcYWR2YW5jZVxtdWx0aXRhYmxlcGFyc2tpcC03cHQgJSB0byBrZWVwIHBhcnNraXAgc29tZXdoYXQgc21hbGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHRoYW4gc2tpcCBiZXR3ZWVuIGxpbmVzIGluIHRoZSB0YWJsZS4KIFxmaX0KIAogCkBAIC0yOTU5LDYgKzQwNzIsNyBAQAogCiBcZGVmXGRvaWdub3JlIzF7XGJlZ2luZ3JvdXAKICAgJSBTY2FuIGluIGBgdmVyYmF0aW0nJyBtb2RlOgorICBcb2JleWxpbmVzCiAgIFxjYXRjb2RlYFxAID0gXG90aGVyCiAgIFxjYXRjb2RlYFx7ID0gXG90aGVyCiAgIFxjYXRjb2RlYFx9ID0gXG90aGVyCkBAIC0yOTc5LDE2ICs0MDkzLDE2IEBACiAgIFxnZGVmXGRvZG9pZ25vcmUjMXslCiAgICAgJSAjMSBjb250YWlucyB0aGUgY29tbWFuZCBuYW1lIGFzIGEgc3RyaW5nLCBlLmcuLCBgaWZpbmZvJy4KICAgICAlCi0gICAgJSBEZWZpbmUgYSBjb21tYW5kIHRvIGZpbmQgdGhlIG5leHQgYEBlbmQgIzEnLCB3aGljaCBtdXN0IGJlIG9uIGEgbGluZQotICAgICUgYnkgaXRzZWxmLgotICAgIFxsb25nXGRlZlxkb2lnbm9yZXRleHQjIzFeXk1AZW5kICMxe1xkb2lnbm9yZXRleHR5eXkjIzFeXk1AIzFcX1NUT1BffSUKKyAgICAlIERlZmluZSBhIGNvbW1hbmQgdG8gZmluZCB0aGUgbmV4dCBgQGVuZCAjMScuCisgICAgXGxvbmdcZGVmXGRvaWdub3JldGV4dCMjMV5eTUBlbmQgIzF7JQorICAgICAgXGRvaWdub3JldGV4dHl5eSMjMV5eTUAjMVxfU1RPUF99JQorICAgICUKICAgICAlIEFuZCB0aGlzIGNvbW1hbmQgdG8gZmluZCBhbm90aGVyICMxIGNvbW1hbmQsIGF0IHRoZSBiZWdpbm5pbmcgb2YgYQogICAgICUgbGluZS4gIChPdGhlcndpc2UsIHdlIHdvdWxkIGNvbnNpZGVyIGEgbGluZSBgQGMgQGlmc2V0JywgZm9yCiAgICAgJSBleGFtcGxlLCB0byBjb3VudCBhcyBhbiBAaWZzZXQgZm9yIG5lc3RpbmcuKQogICAgIFxsb25nXGRlZlxkb2lnbm9yZXRleHR5eXkjIzFeXk1AIzEjIzJcX1NUT1Bfe1xkb2lnbm9yZXl5eXsjIzJ9XF9TVE9QX30lCiAgICAgJQogICAgICUgQW5kIG5vdyBleHBhbmQgdGhhdCBjb21tYW5kLgotICAgIFxvYmV5bGluZXMgJQogICAgIFxkb2lnbm9yZXRleHQgXl5NJQogICB9JQogfQpAQCAtMzAxOCw3ICs0MTMyLDEyIEBACiB9CiAKICUgRmluaXNoIG9mZiBpZ25vcmVkIHRleHQuCi1cZGVmXGVuZGRvaWdub3Jle1xlbmRncm91cFxpZ25vcmVzcGFjZXN9Cit7IFxvYmV5bGluZXMlCisgICUgSWdub3JlIGFueXRoaW5nIGFmdGVyIHRoZSBsYXN0IGBAZW5kICMxJzsgdGhpcyBtYXR0ZXJzIGluIHZlcmJhdGltCisgICUgZW52aXJvbm1lbnRzLCB3aGVyZSBvdGhlcndpc2UgdGhlIG5ld2xpbmUgYWZ0ZXIgYW4gaWdub3JlZCBjb25kaXRpb25hbAorICAlIHdvdWxkIHJlc3VsdCBpbiBhIGJsYW5rIGxpbmUgaW4gdGhlIG91dHB1dC4KKyAgXGdkZWZcZW5kZG9pZ25vcmUjMV5eTXtcZW5kZ3JvdXBcaWdub3Jlc3BhY2VzfSUKK30KIAogCiAlIEBzZXQgVkFSIHNldHMgdGhlIHZhcmlhYmxlIFZBUiB0byBhbiBlbXB0eSB2YWx1ZS4KQEAgLTMxMDgsNyArNDIyNyw3IEBACiB9CiBcZGVmXGlmc2V0ZmFpbHtcZG9pZ25vcmV7aWZzZXR9fQogCi0lIEBpZmNsZWFyIFZBUiAuLi4gQGVuZCBpZmNsZWFyIHJlYWRzIHRoZSBgLi4uJyBpZmYgVkFSIGhhcyBuZXZlciBiZWVuCislIEBpZmNsZWFyIFZBUiAuLi4gQGVuZCBleGVjdXRlcyB0aGUgYC4uLicgaWZmIFZBUiBoYXMgbmV2ZXIgYmVlbgogJSBkZWZpbmVkIHdpdGggQHNldCwgb3IgaGFzIGJlZW4gdW5kZWZpbmVkIHdpdGggQGNsZWFyLgogJQogJSBUaGUgYFxlbHNlJyBpbnNpZGUgdGhlIGBcZG9pZnNldCcgcGFyYW1ldGVyIGlzIGEgdHJpY2sgdG8gcmV1c2UgdGhlCkBAIC0zMTE5LDYgKzQyMzgsMzUgQEAKIFxkZWZcaWZjbGVhcntccGFyc2Vhcmd7XGRvaWZzZXR7XGVsc2UgXGxldFxuZXh0PVxpZmNsZWFyZmFpbH19fQogXGRlZlxpZmNsZWFyZmFpbHtcZG9pZ25vcmV7aWZjbGVhcn19CiAKKyUgQGlmY29tbWFuZGlzZGVmaW5lZCBDTUQgLi4uIEBlbmQgZXhlY3V0ZXMgdGhlIGAuLi4nIGlmIENNRCAod3JpdHRlbgorJSB3aXRob3V0IHRoZSBAKSBpcyBpbiBmYWN0IGRlZmluZWQuICBXZSBjYW4gb25seSBmZWFzaWJseSBjaGVjayBhdCB0aGUKKyUgVGVYIGxldmVsLCBzbyBzb21ldGhpbmcgbGlrZSBgbWF0aGNvZGUnIGlzIGdvaW5nIHRvIGNvbnNpZGVyZWQKKyUgZGVmaW5lZCBldmVuIHRob3VnaCBpdCBpcyBub3QgYSBUZXhpbmZvIGNvbW1hbmQuCislIAorXG1ha2Vjb25ke2lmY29tbWFuZGRlZmluZWR9CitcZGVmXGlmY29tbWFuZGRlZmluZWR7XHBhcnNlYXJne1xkb2lmY21kZGVmaW5lZHtcbGV0XG5leHQ9XGlmY21kZGVmaW5lZGZhaWx9fX0KKyUKK1xkZWZcZG9pZmNtZGRlZmluZWQjMSMye3slCisgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKKyAgICBcbGV0XG5leHQ9XGVtcHR5CisgICAgXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgIzJcZW5kY3NuYW1lXHJlbGF4CisgICAgICAjMSUgSWYgbm90IGRlZmluZWQsIFxsZXRcbmV4dCBhcyBhYm92ZS4KKyAgICBcZmkKKyAgICBcZXhwYW5kYWZ0ZXIKKyAgfVxuZXh0Cit9CitcZGVmXGlmY21kZGVmaW5lZGZhaWx7XGRvaWdub3Jle2lmY29tbWFuZGRlZmluZWR9fQorCislIEBpZmNvbW1hbmRub3RkZWZpbmVkIENNRCAuLi4gaGFuZGxlZCBzaW1pbGFyIHRvIEBpZmNsZWFyIGFib3ZlLgorXG1ha2Vjb25ke2lmY29tbWFuZG5vdGRlZmluZWR9CitcZGVmXGlmY29tbWFuZG5vdGRlZmluZWR7JQorICBccGFyc2Vhcmd7XGRvaWZjbWRkZWZpbmVke1xlbHNlIFxsZXRcbmV4dD1caWZjbWRub3RkZWZpbmVkZmFpbH19fQorXGRlZlxpZmNtZG5vdGRlZmluZWRmYWlse1xkb2lnbm9yZXtpZmNvbW1hbmRub3RkZWZpbmVkfX0KKworJSBTZXQgdGhlIGB0eGljb21tYW5kY29uZGl0aW9uYWxzJyB2YXJpYWJsZSwgc28gZG9jdW1lbnRzIGhhdmUgYSB3YXkgdG8KKyUgdGVzdCBpZiB0aGUgQGlmY29tbWFuZC4uLmRlZmluZWQgY29uZGl0aW9uYWxzIGFyZSBhdmFpbGFibGUuCitcc2V0IHR4aWNvbW1hbmRjb25kaXRpb25hbHMKKwogJSBAZGlyY2F0ZWdvcnkgQ0FURUdPUlkgIC0tIHNwZWNpZnkgYSBjYXRlZ29yeSBvZiB0aGUgZGlyIGZpbGUKICUgd2hpY2ggdGhpcyBmaWxlIHNob3VsZCBiZWxvbmcgdG8uICBJZ25vcmUgdGhpcyBpbiBUZVguCiBcbGV0XGRpcmNhdGVnb3J5PVxjb21tZW50CkBAIC0zMTgzLDExICs0MzMxLDExIEBACiBcZGVmXGRvc3luaW5kZXgjMSMyIzN7JQogICAlIE9ubHkgZG8gXGNsb3Nlb3V0IGlmIHdlIGhhdmVuJ3QgYWxyZWFkeSBkb25lIGl0LCBlbHNlIHdlJ2xsIGVuZCB1cAogICAlIGNsb3NpbmcgdGhlIHRhcmdldCBpbmRleC4KLSAgXGV4cGFuZGFmdGVyIFxpZnhcY3NuYW1lIGRvbmVzeW5pbmRleCMyXGVuZGNzbmFtZSBcdW5kZWZpbmVkCisgIFxleHBhbmRhZnRlciBcaWZ4XGNzbmFtZSBkb25lc3luaW5kZXgjMlxlbmRjc25hbWUgXHJlbGF4CiAgICAgJSBUaGUgXGNsb3Nlb3V0IGhlbHBzIHJlZHVjZSB1bm5lY2Vzc2FyeSBvcGVuIGZpbGVzOyB0aGUgbGltaXQgb24gdGhlCiAgICAgJSBBY29ybiBSSVNDIE9TIGlzIGEgbWVyZSAxNiBmaWxlcy4KICAgICBcZXhwYW5kYWZ0ZXJcY2xvc2VvdXRcY3NuYW1lIzJpbmRmaWxlXGVuZGNzbmFtZQotICAgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lXGRvbmVzeW5pbmRleCMyXGVuZGNzbmFtZSA9IDEKKyAgICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBkb25lc3luaW5kZXgjMlxlbmRjc25hbWUgPSAxCiAgIFxmaQogICAlIHJlZGVmaW5lIFxmb29pbmRmaWxlOgogICBcZXhwYW5kYWZ0ZXJcbGV0XGV4cGFuZGFmdGVyXHRlbXBcZXhwYW5kYWZ0ZXI9XGNzbmFtZSMzaW5kZmlsZVxlbmRjc25hbWUKQEAgLTMyMjEsMTEgKzQzNjksNDEgQEAKICAgXGVzY2FwZWNoYXIgPSBgXFwgICAgICUgdXNlIGJhY2tzbGFzaCBpbiBvdXRwdXQgZmlsZXMuCiAgIFxkZWZcQHtAfSUgY2hhbmdlIHRvIEBAIHdoZW4gd2Ugc3dpdGNoIHRvIEAgYXMgZXNjYXBlIGNoYXIgaW4gaW5kZXggZmlsZXMuCiAgIFxkZWZcIHtccmVhbGJhY2tzbGFzaFxzcGFjZSB9JQotICAlIE5lZWQgdGhlc2UgaW4gY2FzZSBcdGV4IGlzIGluIGVmZmVjdCBhbmQgXHsgaXMgYSBcZGVsaW1pdGVyIGFnYWluLgotICAlIEJ1dCBjYW4ndCB1c2UgXGxicmFjZWNtZCBhbmQgXHJicmFjZWNtZCBiZWNhdXNlIHRleGluZGV4IGFzc3VtZXMKLSAgJSBicmFjZXMgYW5kIGJhY2tzbGFzaGVzIGFyZSB1c2VkIG9ubHkgYXMgZGVsaW1pdGVycy4KLSAgXGxldFx7ID0gXG15bGJyYWNlCi0gIFxsZXRcfSA9IFxteXJicmFjZQorICAlCisgICUgTmVlZCB0aGVzZSB1bmV4cGFuZGFibGUgKGJlY2F1c2Ugd2UgZGVmaW5lIFx0dCBhcyBhIGR1bW15KQorICAlIGRlZmluaXRpb25zIHdoZW4gQHsgb3IgQH0gYXBwZWFyIGluIGluZGV4IGVudHJ5IHRleHQuICBBbHNvLCBtb3JlCisgICUgY29tcGxpY2F0ZWQsIHdoZW4gXHRleCBpcyBpbiBlZmZlY3QgYW5kIFx7IGlzIGEgXGRlbGltaXRlciBhZ2Fpbi4KKyAgJSBXZSBjYW4ndCB1c2UgXGxicmFjZWNtZCBhbmQgXHJicmFjZWNtZCBiZWNhdXNlIHRleGluZGV4IGFzc3VtZXMKKyAgJSBicmFjZXMgYW5kIGJhY2tzbGFzaGVzIGFyZSB1c2VkIG9ubHkgYXMgZGVsaW1pdGVycy4gIFBlcmhhcHMgd2UKKyAgJSBzaG91bGQgZGVmaW5lIEBsYnJhY2UgYW5kIEByYnJhY2UgY29tbWFuZHMgYSBsYSBAY29tbWEuCisgIFxkZWZce3t7XHR0XGNoYXIxMjN9fSUKKyAgXGRlZlx9e3tcdHRcY2hhcjEyNX19JQorICAlCisgICUgSSBkb24ndCBlbnRpcmVseSB1bmRlcnN0YW5kIHRoaXMsIGJ1dCB3aGVuIGFuIGluZGV4IGVudHJ5IGlzCisgICUgZ2VuZXJhdGVkIGZyb20gYSBtYWNybyBjYWxsLCB0aGUgXGVuZGlucHV0IHdoaWNoIFxzY2FubWFjcm8gaW5zZXJ0cworICAlIGNhdXNlcyBwcm9jZXNzaW5nIHRvIGJlIHByZW1hdHVyZWx5IHRlcm1pbmF0ZWQuICBUaGlzIGlzLAorICAlIGFwcGFyZW50bHksIGJlY2F1c2UgXGluZGV4c29ydHRtcCBpcyBmdWxseSBleHBhbmRlZCwgYW5kIFxlbmRpbnB1dAorICAlIGlzIGFuIGV4cGFuZGFibGUgY29tbWFuZC4gIFRoZSByZWRlZmluaXRpb24gYmVsb3cgbWFrZXMgXGVuZGlucHV0CisgICUgZGlzYXBwZWFyIGFsdG9nZXRoZXIgZm9yIHRoYXQgcHVycG9zZSAtLSBhbHRob3VnaCBsb2dnaW5nIHNob3dzIHRoYXQKKyAgJSBwcm9jZXNzaW5nIGNvbnRpbnVlcyB0byBzb21lIGZ1cnRoZXIgcG9pbnQuICBPbiB0aGUgb3RoZXIgaGFuZCwgaXQKKyAgJSBzZWVtcyBcZW5kaW5wdXQgZG9lcyBub3QgaHVydCBpbiB0aGUgcHJpbnRlZCBpbmRleCBhcmcsIHNpbmNlIHRoYXQKKyAgJSBpcyBzdGlsbCBnZXR0aW5nIHdyaXR0ZW4gd2l0aG91dCBhcHBhcmVudCBoYXJtLgorICAlCisgICUgU2FtcGxlIHNvdXJjZSAobWFjLWlkeDMudGV4LCByZXBvcnRlZCBieSBHcmFoYW0gUGVyY2l2YWwgdG8KKyAgJSBoZWxwLXRleGluZm8sIDIybWF5MDYpOgorICAlIEBtYWNybyBmdW5pbmRleCB7V09SRH0KKyAgJSBAZmluZGV4IHh5egorICAlIEBlbmQgbWFjcm8KKyAgJSAuLi4KKyAgJSBAZnVuaW5kZXggY29tbXRlc3QKKyAgJQorICAlIFRoZSBhYm92ZSBpcyBub3QgZW5vdWdoIHRvIHJlcHJvZHVjZSB0aGUgYnVnLCBidXQgaXQgZ2l2ZXMgdGhlIGZsYXZvci4KKyAgJQorICAlIFNhbXBsZSB3aGF0c2l0IHJlc3VsdGluZzoKKyAgJSAuQHdyaXRlM3tcZW50cnl7eHl6fXtAZm9saW8gfXtAY29kZSB7eHl6QGVuZGlucHV0IH19fQorICAlCisgICUgU286CisgIFxsZXRcZW5kaW5wdXQgPSBcZW1wdHkKICAgJQogICAlIERvIHRoZSByZWRlZmluaXRpb25zLgogICBcY29tbW9uZHVtbWllcwpAQCAtMzI0NCw2ICs0NDIyLDcgQEAKICAgJQogICAlIERvIHRoZSByZWRlZmluaXRpb25zLgogICBcY29tbW9uZHVtbWllcworICBcb3RoZXJiYWNrc2xhc2gKIH0KIAogJSBDYWxsZWQgZnJvbSBcaW5kZXhkdW1taWVzIGFuZCBcYXRkdW1taWVzLgpAQCAtMzI1MSw3ICs0NDMwLDcgQEAKIFxkZWZcY29tbW9uZHVtbWllc3slCiAgICUKICAgJSBcZGVmaW5lZHVtbXl3b3JkIGRlZmluZXMgXCMxIGFzIFxzdHJpbmdcIzFcc3BhY2UsIHRodXMgZWZmZWN0aXZlbHkKLSAgJSBwcmV2ZW50aW5nIGl0cyBleHBhbnNpb24uICBUaGlzIGlzIHVzZWQgb25seSBmb3IgY29udHJvbCUgd29yZHMsCisgICUgcHJldmVudGluZyBpdHMgZXhwYW5zaW9uLiAgVGhpcyBpcyB1c2VkIG9ubHkgZm9yIGNvbnRyb2wgd29yZHMsCiAgICUgbm90IGNvbnRyb2wgbGV0dGVycywgYmVjYXVzZSB0aGUgXHNwYWNlIHdvdWxkIGJlIGluY29ycmVjdCBmb3IKICAgJSBjb250cm9sIGNoYXJhY3RlcnMsIGJ1dCBpcyBuZWVkZWQgdG8gc2VwYXJhdGUgdGhlIGNvbnRyb2wgd29yZAogICAlIGZyb20gd2hhdGV2ZXIgZm9sbG93cy4KQEAgLTMyNzAsMjMgKzQ0NDksMjggQEAKICAgXGNvbW1vbmR1bW1pZXNub2ZvbnRzCiAgICUKICAgXGRlZmluZWR1bW15bGV0dGVyXF8lCisgIFxkZWZpbmVkdW1teWxldHRlclwtJQogICAlCiAgICUgTm9uLUVuZ2xpc2ggbGV0dGVycy4KICAgXGRlZmluZWR1bW15d29yZFxBQQogICBcZGVmaW5lZHVtbXl3b3JkXEFFCisgIFxkZWZpbmVkdW1teXdvcmRcREgKICAgXGRlZmluZWR1bW15d29yZFxMCi0gIFxkZWZpbmVkdW1teXdvcmRcT0UKICAgXGRlZmluZWR1bW15d29yZFxPCisgIFxkZWZpbmVkdW1teXdvcmRcT0UKKyAgXGRlZmluZWR1bW15d29yZFxUSAogICBcZGVmaW5lZHVtbXl3b3JkXGFhCiAgIFxkZWZpbmVkdW1teXdvcmRcYWUKLSAgXGRlZmluZWR1bW15d29yZFxsCi0gIFxkZWZpbmVkdW1teXdvcmRcb2UKLSAgXGRlZmluZWR1bW15d29yZFxvCi0gIFxkZWZpbmVkdW1teXdvcmRcc3MKKyAgXGRlZmluZWR1bW15d29yZFxkaAogICBcZGVmaW5lZHVtbXl3b3JkXGV4Y2xhbWRvd24KLSAgXGRlZmluZWR1bW15d29yZFxxdWVzdGlvbmRvd24KKyAgXGRlZmluZWR1bW15d29yZFxsCisgIFxkZWZpbmVkdW1teXdvcmRcbworICBcZGVmaW5lZHVtbXl3b3JkXG9lCiAgIFxkZWZpbmVkdW1teXdvcmRcb3JkZgogICBcZGVmaW5lZHVtbXl3b3JkXG9yZG0KKyAgXGRlZmluZWR1bW15d29yZFxxdWVzdGlvbmRvd24KKyAgXGRlZmluZWR1bW15d29yZFxzcworICBcZGVmaW5lZHVtbXl3b3JkXHRoCiAgICUKICAgJSBBbHRob3VnaCB0aGVzZSBpbnRlcm5hbCBjb21tYW5kcyBzaG91bGRuJ3Qgc2hvdyB1cCwgc29tZXRpbWVzIHRoZXkgZG8uCiAgIFxkZWZpbmVkdW1teXdvcmRcYmYKQEAgLTMzMDIsMjEgKzQ0ODYsMzkgQEAKICAgXGRlZmluZWR1bW15d29yZFxUZVgKICAgJQogICAlIEFzc29ydGVkIHNwZWNpYWwgY2hhcmFjdGVycy4KKyAgXGRlZmluZWR1bW15d29yZFxhcnJvdwogICBcZGVmaW5lZHVtbXl3b3JkXGJ1bGxldAogICBcZGVmaW5lZHVtbXl3b3JkXGNvbW1hCiAgIFxkZWZpbmVkdW1teXdvcmRcY29weXJpZ2h0CiAgIFxkZWZpbmVkdW1teXdvcmRccmVnaXN0ZXJlZHN5bWJvbAogICBcZGVmaW5lZHVtbXl3b3JkXGRvdHMKICAgXGRlZmluZWR1bW15d29yZFxlbmRkb3RzCisgIFxkZWZpbmVkdW1teXdvcmRcZW50cnlicmVhawogICBcZGVmaW5lZHVtbXl3b3JkXGVxdWl2CiAgIFxkZWZpbmVkdW1teXdvcmRcZXJyb3IKICAgXGRlZmluZWR1bW15d29yZFxldXJvCiAgIFxkZWZpbmVkdW1teXdvcmRcZXhwYW5zaW9uCisgIFxkZWZpbmVkdW1teXdvcmRcZ2VxCisgIFxkZWZpbmVkdW1teXdvcmRcZ3VpbGxlbWV0bGVmdAorICBcZGVmaW5lZHVtbXl3b3JkXGd1aWxsZW1ldHJpZ2h0CisgIFxkZWZpbmVkdW1teXdvcmRcZ3VpbHNpbmdsbGVmdAorICBcZGVmaW5lZHVtbXl3b3JkXGd1aWxzaW5nbHJpZ2h0CisgIFxkZWZpbmVkdW1teXdvcmRcbGJyYWNlY2hhcgorICBcZGVmaW5lZHVtbXl3b3JkXGxlcQogICBcZGVmaW5lZHVtbXl3b3JkXG1pbnVzCisgIFxkZWZpbmVkdW1teXdvcmRcb2dvbmVrCiAgIFxkZWZpbmVkdW1teXdvcmRccG91bmRzCiAgIFxkZWZpbmVkdW1teXdvcmRccG9pbnQKICAgXGRlZmluZWR1bW15d29yZFxwcmludAorICBcZGVmaW5lZHVtbXl3b3JkXHF1b3RlZGJsYmFzZQorICBcZGVmaW5lZHVtbXl3b3JkXHF1b3RlZGJsbGVmdAorICBcZGVmaW5lZHVtbXl3b3JkXHF1b3RlZGJscmlnaHQKKyAgXGRlZmluZWR1bW15d29yZFxxdW90ZWxlZnQKKyAgXGRlZmluZWR1bW15d29yZFxxdW90ZXJpZ2h0CisgIFxkZWZpbmVkdW1teXdvcmRccXVvdGVzaW5nbGJhc2UKKyAgXGRlZmluZWR1bW15d29yZFxyYnJhY2VjaGFyCiAgIFxkZWZpbmVkdW1teXdvcmRccmVzdWx0CisgIFxkZWZpbmVkdW1teXdvcmRcdGV4dGRlZ3JlZQogICAlCiAgICUgV2Ugd2FudCB0byBkaXNhYmxlIGFsbCBtYWNyb3Mgc28gdGhhdCB0aGV5IGFyZSBub3QgZXhwYW5kZWQgYnkgXHdyaXRlLgogICBcbWFjcm9saXN0CkBAIC0zMzMwLDYzICs0NTMyLDcyIEBACiAKICUgXGNvbW1vbmR1bW1pZXNub2ZvbnRzOiBjb21tb24gdG8gXGNvbW1vbmR1bW1pZXMgYW5kIFxpbmRleG5vZm9udHMuCiAlCi0lIEJldHRlciBoYXZlIHRoaXMgd2l0aG91dCBhY3RpdmUgY2hhcnMuCi17Ci0gIFxjYXRjb2RlYFx+PVxvdGhlcgotICBcZ2RlZlxjb21tb25kdW1taWVzbm9mb250c3slCi0gICAgJSBDb250cm9sIGxldHRlcnMgYW5kIGFjY2VudHMuCi0gICAgXGRlZmluZWR1bW15bGV0dGVyXCElCi0gICAgXGRlZmluZWR1bW15YWNjZW50XCIlCi0gICAgXGRlZmluZWR1bW15YWNjZW50XCclCi0gICAgXGRlZmluZWR1bW15bGV0dGVyXColCi0gICAgXGRlZmluZWR1bW15YWNjZW50XCwlCi0gICAgXGRlZmluZWR1bW15bGV0dGVyXC4lCi0gICAgXGRlZmluZWR1bW15bGV0dGVyXC8lCi0gICAgXGRlZmluZWR1bW15bGV0dGVyXDolCi0gICAgXGRlZmluZWR1bW15YWNjZW50XD0lCi0gICAgXGRlZmluZWR1bW15bGV0dGVyXD8lCi0gICAgXGRlZmluZWR1bW15YWNjZW50XF4lCi0gICAgXGRlZmluZWR1bW15YWNjZW50XGAlCi0gICAgXGRlZmluZWR1bW15YWNjZW50XH4lCi0gICAgXGRlZmluZWR1bW15d29yZFx1Ci0gICAgXGRlZmluZWR1bW15d29yZFx2Ci0gICAgXGRlZmluZWR1bW15d29yZFxICi0gICAgXGRlZmluZWR1bW15d29yZFxkb3RhY2NlbnQKLSAgICBcZGVmaW5lZHVtbXl3b3JkXHJpbmdhY2NlbnQKLSAgICBcZGVmaW5lZHVtbXl3b3JkXHRpZWFjY2VudAotICAgIFxkZWZpbmVkdW1teXdvcmRcdWJhcmFjY2VudAotICAgIFxkZWZpbmVkdW1teXdvcmRcdWRvdGFjY2VudAotICAgIFxkZWZpbmVkdW1teXdvcmRcZG90bGVzcwotICAgICUKLSAgICAlIFRleGluZm8gZm9udCBjb21tYW5kcy4KLSAgICBcZGVmaW5lZHVtbXl3b3JkXGIKLSAgICBcZGVmaW5lZHVtbXl3b3JkXGkKLSAgICBcZGVmaW5lZHVtbXl3b3JkXHIKLSAgICBcZGVmaW5lZHVtbXl3b3JkXHNjCi0gICAgXGRlZmluZWR1bW15d29yZFx0Ci0gICAgJQotICAgICUgQ29tbWFuZHMgdGhhdCB0YWtlIGFyZ3VtZW50cy4KLSAgICBcZGVmaW5lZHVtbXl3b3JkXGFjcm9ueW0KLSAgICBcZGVmaW5lZHVtbXl3b3JkXGNpdGUKLSAgICBcZGVmaW5lZHVtbXl3b3JkXGNvZGUKLSAgICBcZGVmaW5lZHVtbXl3b3JkXGNvbW1hbmQKLSAgICBcZGVmaW5lZHVtbXl3b3JkXGRmbgotICAgIFxkZWZpbmVkdW1teXdvcmRcZW1waAotICAgIFxkZWZpbmVkdW1teXdvcmRcZW52Ci0gICAgXGRlZmluZWR1bW15d29yZFxmaWxlCi0gICAgXGRlZmluZWR1bW15d29yZFxrYmQKLSAgICBcZGVmaW5lZHVtbXl3b3JkXGtleQotICAgIFxkZWZpbmVkdW1teXdvcmRcbWF0aAotICAgIFxkZWZpbmVkdW1teXdvcmRcb3B0aW9uCi0gICAgXGRlZmluZWR1bW15d29yZFxzYW1wCi0gICAgXGRlZmluZWR1bW15d29yZFxzdHJvbmcKLSAgICBcZGVmaW5lZHVtbXl3b3JkXHRpZQotICAgIFxkZWZpbmVkdW1teXdvcmRcdXJlZgotICAgIFxkZWZpbmVkdW1teXdvcmRcdXJsCi0gICAgXGRlZmluZWR1bW15d29yZFx2YXIKLSAgICBcZGVmaW5lZHVtbXl3b3JkXHZlcmIKLSAgICBcZGVmaW5lZHVtbXl3b3JkXHcKLSAgfQorXGRlZlxjb21tb25kdW1taWVzbm9mb250c3slCisgICUgQ29udHJvbCBsZXR0ZXJzIGFuZCBhY2NlbnRzLgorICBcZGVmaW5lZHVtbXlsZXR0ZXJcISUKKyAgXGRlZmluZWR1bW15YWNjZW50XCIlCisgIFxkZWZpbmVkdW1teWFjY2VudFwnJQorICBcZGVmaW5lZHVtbXlsZXR0ZXJcKiUKKyAgXGRlZmluZWR1bW15YWNjZW50XCwlCisgIFxkZWZpbmVkdW1teWxldHRlclwuJQorICBcZGVmaW5lZHVtbXlsZXR0ZXJcLyUKKyAgXGRlZmluZWR1bW15bGV0dGVyXDolCisgIFxkZWZpbmVkdW1teWFjY2VudFw9JQorICBcZGVmaW5lZHVtbXlsZXR0ZXJcPyUKKyAgXGRlZmluZWR1bW15YWNjZW50XF4lCisgIFxkZWZpbmVkdW1teWFjY2VudFxgJQorICBcZGVmaW5lZHVtbXlhY2NlbnRcfiUKKyAgXGRlZmluZWR1bW15d29yZFx1CisgIFxkZWZpbmVkdW1teXdvcmRcdgorICBcZGVmaW5lZHVtbXl3b3JkXEgKKyAgXGRlZmluZWR1bW15d29yZFxkb3RhY2NlbnQKKyAgXGRlZmluZWR1bW15d29yZFxvZ29uZWsKKyAgXGRlZmluZWR1bW15d29yZFxyaW5nYWNjZW50CisgIFxkZWZpbmVkdW1teXdvcmRcdGllYWNjZW50CisgIFxkZWZpbmVkdW1teXdvcmRcdWJhcmFjY2VudAorICBcZGVmaW5lZHVtbXl3b3JkXHVkb3RhY2NlbnQKKyAgXGRlZmluZWR1bW15d29yZFxkb3RsZXNzCisgICUKKyAgJSBUZXhpbmZvIGZvbnQgY29tbWFuZHMuCisgIFxkZWZpbmVkdW1teXdvcmRcYgorICBcZGVmaW5lZHVtbXl3b3JkXGkKKyAgXGRlZmluZWR1bW15d29yZFxyCisgIFxkZWZpbmVkdW1teXdvcmRcc2Fuc3NlcmlmCisgIFxkZWZpbmVkdW1teXdvcmRcc2MKKyAgXGRlZmluZWR1bW15d29yZFxzbGFudGVkCisgIFxkZWZpbmVkdW1teXdvcmRcdAorICAlCisgICUgQ29tbWFuZHMgdGhhdCB0YWtlIGFyZ3VtZW50cy4KKyAgXGRlZmluZWR1bW15d29yZFxhYmJyCisgIFxkZWZpbmVkdW1teXdvcmRcYWNyb255bQorICBcZGVmaW5lZHVtbXl3b3JkXGFuY2hvcgorICBcZGVmaW5lZHVtbXl3b3JkXGNpdGUKKyAgXGRlZmluZWR1bW15d29yZFxjb2RlCisgIFxkZWZpbmVkdW1teXdvcmRcY29tbWFuZAorICBcZGVmaW5lZHVtbXl3b3JkXGRmbgorICBcZGVmaW5lZHVtbXl3b3JkXGRtbgorICBcZGVmaW5lZHVtbXl3b3JkXGVtYWlsCisgIFxkZWZpbmVkdW1teXdvcmRcZW1waAorICBcZGVmaW5lZHVtbXl3b3JkXGVudgorICBcZGVmaW5lZHVtbXl3b3JkXGZpbGUKKyAgXGRlZmluZWR1bW15d29yZFxpbWFnZQorICBcZGVmaW5lZHVtbXl3b3JkXGluZGljYXRldXJsCisgIFxkZWZpbmVkdW1teXdvcmRcaW5mb3JlZgorICBcZGVmaW5lZHVtbXl3b3JkXGtiZAorICBcZGVmaW5lZHVtbXl3b3JkXGtleQorICBcZGVmaW5lZHVtbXl3b3JkXG1hdGgKKyAgXGRlZmluZWR1bW15d29yZFxvcHRpb24KKyAgXGRlZmluZWR1bW15d29yZFxweHJlZgorICBcZGVmaW5lZHVtbXl3b3JkXHJlZgorICBcZGVmaW5lZHVtbXl3b3JkXHNhbXAKKyAgXGRlZmluZWR1bW15d29yZFxzdHJvbmcKKyAgXGRlZmluZWR1bW15d29yZFx0aWUKKyAgXGRlZmluZWR1bW15d29yZFx1cmVmCisgIFxkZWZpbmVkdW1teXdvcmRcdXJsCisgIFxkZWZpbmVkdW1teXdvcmRcdmFyCisgIFxkZWZpbmVkdW1teXdvcmRcdmVyYgorICBcZGVmaW5lZHVtbXl3b3JkXHcKKyAgXGRlZmluZWR1bW15d29yZFx4cmVmCiB9CiAKICUgXGluZGV4bm9mb250cyBpcyB1c2VkIHdoZW4gb3V0cHV0dGluZyB0aGUgc3RyaW5ncyB0byBzb3J0IHRoZSBpbmRleApAQCAtMzM5OSw3ICs0NjEwLDcgQEAKICAgXGRlZlxkZWZpbmVkdW1teWFjY2VudCMjMXtcbGV0IyMxXGFzaXN9JQogICAlIFdlIGNhbiBqdXN0IGlnbm9yZSBvdGhlciBjb250cm9sIGxldHRlcnMuCiAgIFxkZWZcZGVmaW5lZHVtbXlsZXR0ZXIjIzF7XGxldCMjMVxlbXB0eX0lCi0gICUgSG9wZWZ1bGx5LCBhbGwgY29udHJvbCB3b3JkcyBjYW4gYmVjb21lIEBhc2lzLgorICAlIEFsbCBjb250cm9sIHdvcmRzIGJlY29tZSBAYXNpcyBieSBkZWZhdWx0OyBvdmVycmlkZXMgYmVsb3cuCiAgIFxsZXRcZGVmaW5lZHVtbXl3b3JkXGRlZmluZWR1bW15YWNjZW50CiAgICUKICAgXGNvbW1vbmR1bW1pZXNub2ZvbnRzCkBAIC0zNDExLDYwICs0NjIyLDk1IEBACiAgICUKICAgXGRlZlwgeyB9JQogICBcZGVmXEB7QH0lCi0gICUgaG93IHRvIGhhbmRsZSBicmFjZXM/CiAgIFxkZWZcX3tcbm9ybWFsdW5kZXJzY29yZX0lCisgIFxkZWZcLXt9JSBALSBzaG91bGRuJ3QgYWZmZWN0IHNvcnRpbmcKKyAgJQorICAlIFVuZm9ydHVuYXRlbHksIHRleGluZGV4IGlzIG5vdCBwcmVwYXJlZCB0byBoYW5kbGUgYnJhY2VzIGluIHRoZQorICAlIGNvbnRlbnQgYXQgYWxsLiAgU28gZm9yIGluZGV4IHNvcnRpbmcsIHdlIG1hcCBAeyBhbmQgQH0gdG8gc3RyaW5ncworICAlIHN0YXJ0aW5nIHdpdGggfCwgc2luY2UgdGhhdCBBU0NJSSBjaGFyYWN0ZXIgaXMgYmV0d2VlbiBBU0NJSSB7IGFuZCB9LgorICBcZGVmXHt7fGF9JQorICBcZGVmXGxicmFjZWNoYXJ7fGF9JQorICAlCisgIFxkZWZcfXt8Yn0lCisgIFxkZWZccmJyYWNlY2hhcnt8Yn0lCiAgICUKICAgJSBOb24tRW5nbGlzaCBsZXR0ZXJzLgogICBcZGVmXEFBe0FBfSUKICAgXGRlZlxBRXtBRX0lCisgIFxkZWZcREh7RFpafSUKICAgXGRlZlxMe0x9JQogICBcZGVmXE9Fe09FfSUKICAgXGRlZlxPe099JQorICBcZGVmXFRIe1paWn0lCiAgIFxkZWZcYWF7YWF9JQogICBcZGVmXGFle2FlfSUKKyAgXGRlZlxkaHtkenp9JQorICBcZGVmXGV4Y2xhbWRvd257IX0lCiAgIFxkZWZcbHtsfSUKICAgXGRlZlxvZXtvZX0lCi0gIFxkZWZcb3tvfSUKLSAgXGRlZlxzc3tzc30lCi0gIFxkZWZcZXhjbGFtZG93bnshfSUKLSAgXGRlZlxxdWVzdGlvbmRvd257P30lCiAgIFxkZWZcb3JkZnthfSUKICAgXGRlZlxvcmRte299JQorICBcZGVmXG97b30lCisgIFxkZWZccXVlc3Rpb25kb3duez99JQorICBcZGVmXHNze3NzfSUKKyAgXGRlZlx0aHt6enp9JQogICAlCiAgIFxkZWZcTGFUZVh7TGFUZVh9JQogICBcZGVmXFRlWHtUZVh9JQogICAlCiAgICUgQXNzb3J0ZWQgc3BlY2lhbCBjaGFyYWN0ZXJzLgogICAlIChUaGUgZm9sbG93aW5nIHt9IHdpbGwgZW5kIHVwIGluIHRoZSBzb3J0IHN0cmluZywgYnV0IHRoYXQncyBvay4pCisgIFxkZWZcYXJyb3d7LT59JQogICBcZGVmXGJ1bGxldHtidWxsZXR9JQogICBcZGVmXGNvbW1heyx9JQogICBcZGVmXGNvcHlyaWdodHtjb3B5cmlnaHR9JQotICBcZGVmXHJlZ2lzdGVyZWRzeW1ib2x7Un0lCiAgIFxkZWZcZG90c3suLi59JQogICBcZGVmXGVuZGRvdHN7Li4ufSUKICAgXGRlZlxlcXVpdns9PX0lCiAgIFxkZWZcZXJyb3J7ZXJyb3J9JQogICBcZGVmXGV1cm97ZXVyb30lCiAgIFxkZWZcZXhwYW5zaW9uez09Pn0lCisgIFxkZWZcZ2Vxez49fSUKKyAgXGRlZlxndWlsbGVtZXRsZWZ0ezw8fSUKKyAgXGRlZlxndWlsbGVtZXRyaWdodHs+Pn0lCisgIFxkZWZcZ3VpbHNpbmdsbGVmdHs8fSUKKyAgXGRlZlxndWlsc2luZ2xyaWdodHs+fSUKKyAgXGRlZlxsZXF7PD19JQogICBcZGVmXG1pbnVzey19JQotICBcZGVmXHBvdW5kc3twb3VuZHN9JQogICBcZGVmXHBvaW50ey59JQorICBcZGVmXHBvdW5kc3twb3VuZHN9JQogICBcZGVmXHByaW50ey18fSUKKyAgXGRlZlxxdW90ZWRibGJhc2V7In0lCisgIFxkZWZccXVvdGVkYmxsZWZ0eyJ9JQorICBcZGVmXHF1b3RlZGJscmlnaHR7In0lCisgIFxkZWZccXVvdGVsZWZ0e2B9JQorICBcZGVmXHF1b3RlcmlnaHR7J30lCisgIFxkZWZccXVvdGVzaW5nbGJhc2V7LH0lCisgIFxkZWZccmVnaXN0ZXJlZHN5bWJvbHtSfSUKICAgXGRlZlxyZXN1bHR7PT59JQorICBcZGVmXHRleHRkZWdyZWV7b30lCisgICUKKyAgXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgU0VUdHhpaW5kZXhscXVvdGVpZ25vcmVcZW5kY3NuYW1lXHJlbGF4CisgIFxlbHNlIFxpbmRleGxxdW90ZWlnbm9yZSBcZmkKICAgJQogICAlIFdlIG5lZWQgdG8gZ2V0IHJpZCBvZiBhbGwgbWFjcm9zLCBsZWF2aW5nIG9ubHkgdGhlIGFyZ3VtZW50cyAoaWYgcHJlc2VudCkuCiAgICUgT2YgY291cnNlIHRoaXMgaXMgbm90IG5lYXJseSBjb3JyZWN0LCBidXQgaXQgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvIGZvciBub3cuCiAgICUgbWFrZWluZm8gZG9lcyBub3QgZXhwYW5kIG1hY3JvcyBpbiB0aGUgYXJndW1lbnQgdG8gQGRlZmZuLCB3aGljaCBlbmRzIHVwCiAgICUgd3JpdGluZyBhbiBpbmRleCBlbnRyeSwgYW5kIHRleGluZGV4IGlzbid0IHByZXBhcmVkIGZvciBhbiBpbmRleCBzb3J0IGVudHJ5CiAgICUgdGhhdCBzdGFydHMgd2l0aCBcLgotICAlIAorICAlCiAgICUgU2luY2UgbWFjcm8gaW52b2NhdGlvbnMgYXJlIGZvbGxvd2VkIGJ5IGJyYWNlcywgd2UgY2FuIGp1c3QgcmVkZWZpbmUgdGhlbQogICAlIHRvIHRha2UgYSBzaW5nbGUgVGVYIGFyZ3VtZW50LiAgVGhlIGNhc2Ugb2YgYSBtYWNybyBpbnZvY2F0aW9uIHRoYXQKICAgJSBnb2VzIHRvIGVuZC1vZi1saW5lIGlzIG5vdCBoYW5kbGVkLgotICAlIAorICAlCiAgIFxtYWNyb2xpc3QKIH0KIAorJSBVbmRvY3VtZW50ZWQgKGZvciBGU0ZTIDJuZCBlZC4pOiBAc2V0IHR4aWluZGV4bHF1b3RlaWdub3JlIG1ha2VzIHVzCislIGlnbm9yZSBsZWZ0IHF1b3RlcyBpbiB0aGUgc29ydCB0ZXJtLgore1xjYXRjb2RlYFxgPVxhY3RpdmUKKyBcZ2RlZlxpbmRleGxxdW90ZWlnbm9yZXtcbGV0YD1cZW1wdHl9fQorCiBcbGV0XGluZGV4YmFja3NsYXNoPTAgICVvdmVycmlkZGVuIGR1cmluZyBccHJpbnRpbmRleC4KIFxsZXRcU0VUbWFyZ2luaW5kZXg9XHJlbGF4ICUgcHV0IGluZGV4IGVudHJpZXMgaW4gbWFyZ2luICh1bmRvY3VtZW50ZWQpPwogCkBAIC0zNDkwLDExICs0NzM2LDcgQEAKICAgICAlCiAgICAgXGVkZWZcd3JpdGV0b3tcY3NuYW1lIzFpbmRmaWxlXGVuZGNzbmFtZX0lCiAgICAgJQotICAgIFxpZnZtb2RlCi0gICAgICBcZG9zdWJpbmRzYW5pdGl6ZQotICAgIFxlbHNlCi0gICAgICBcZG9zdWJpbmR3cml0ZQotICAgIFxmaQorICAgIFxzYWZld2hhdHNpdFxkb3N1YmluZHdyaXRlCiAgIH0lCiAgIFxmaQogfQpAQCAtMzUzMSwxMyArNDc3MywxMyBAQAogICBcdGVtcAogfQogCi0lIFRha2UgY2FyZSBvZiB1bndhbnRlZCBwYWdlIGJyZWFrczoKKyUgVGFrZSBjYXJlIG9mIHVud2FudGVkIHBhZ2UgYnJlYWtzL3NraXBzIGFyb3VuZCBhIHdoYXRzaXQ6CiAlCiAlIElmIGEgc2tpcCBpcyB0aGUgbGFzdCB0aGluZyBvbiB0aGUgbGlzdCBub3csIHByZXNlcnZlIGl0CiAlIGJ5IGJhY2tpbmcgdXAgYnkgXGxhc3Rza2lwLCBkb2luZyB0aGUgXHdyaXRlLCB0aGVuIGluc2VydGluZwogJSB0aGUgc2tpcCBhZ2Fpbi4gIE90aGVyd2lzZSwgdGhlIHdoYXRzaXQgZ2VuZXJhdGVkIGJ5IHRoZQotJSBcd3JpdGUgd2lsbCBtYWtlIFxsYXN0c2tpcCB6ZXJvLiAgVGhlIHJlc3VsdCBpcyB0aGF0IHNlcXVlbmNlcwotJSBsaWtlIHRoaXM6CislIFx3cml0ZSBvciBccGRmZGVzdCB3aWxsIG1ha2UgXGxhc3Rza2lwIHplcm8uICBUaGUgcmVzdWx0IGlzIHRoYXQKKyUgc2VxdWVuY2VzIGxpa2UgdGhpczoKICUgQGVuZCBkZWZ1bgogJSBAdGluZGV4IHdoYXRldmVyCiAlIEBkZWZ1biAuLi4KQEAgLTM1NjEsMjUgKzQ4MDMsMzAgQEAKICUKIFxlZGVmXHplcm9za2lwbWFjcm97XGV4cGFuZGFmdGVyXHRoZVxjc25hbWUgekBza2lwXGVuZGNzbmFtZX0KICUKK1xuZXdza2lwXHdoYXRzaXRza2lwCitcbmV3Y291bnRcd2hhdHNpdHBlbmFsdHkKKyUKICUgLi4uLCByZWFkeSwgR086CiAlCi1cZGVmXGRvc3ViaW5kc2FuaXRpemV7JQorXGRlZlxzYWZld2hhdHNpdCMxe1xpZmhtb2RlCisgICMxJQorIFxlbHNlCiAgICUgXGxhc3Rza2lwIGFuZCBcbGFzdHBlbmFsdHkgY2Fubm90IGJvdGggYmUgbm9uemVybyBzaW11bHRhbmVvdXNseS4KLSAgXHNraXAwID0gXGxhc3Rza2lwCisgIFx3aGF0c2l0c2tpcCA9IFxsYXN0c2tpcAogICBcZWRlZlxsYXN0c2tpcG1hY3Jve1x0aGVcbGFzdHNraXB9JQotICBcY291bnQyNTUgPSBcbGFzdHBlbmFsdHkKKyAgXHdoYXRzaXRwZW5hbHR5ID0gXGxhc3RwZW5hbHR5CiAgICUKICAgJSBJZiBcbGFzdHNraXAgaXMgbm9uemVybywgdGhhdCBtZWFucyB0aGUgbGFzdCBpdGVtIHdhcyBhCiAgICUgc2tpcC4gIEFuZCBzaW5jZSBhIHNraXAgaXMgZGlzY2FyZGFibGUsIHRoYXQgbWVhbnMgdGhpcwotICAlIC1cc2tpcDAgZ2x1ZSB3ZSdyZSBpbnNlcnRpbmcgaXMgcHJlY2VkZWQgYnkgYQorICAlIC1cd2hhdHNpdHNraXAgZ2x1ZSB3ZSdyZSBpbnNlcnRpbmcgaXMgcHJlY2VkZWQgYnkgYQogICAlIG5vbi1kaXNjYXJkYWJsZSBpdGVtLCB0aGVyZWZvcmUgaXQgaXMgbm90IGEgcG90ZW50aWFsCiAgICUgYnJlYWtwb2ludCwgdGhlcmVmb3JlIG5vIFxub2JyZWFrIG5lZWRlZC4KICAgXGlmeFxsYXN0c2tpcG1hY3JvXHplcm9za2lwbWFjcm8KICAgXGVsc2UKLSAgICBcdnNraXAtXHNraXAwCisgICAgXHZza2lwLVx3aGF0c2l0c2tpcAogICBcZmkKICAgJQotICBcZG9zdWJpbmR3cml0ZQorICAjMSUKICAgJQogICBcaWZ4XGxhc3Rza2lwbWFjcm9cemVyb3NraXBtYWNybwogICAgICUgSWYgXGxhc3Rza2lwIHdhcyB6ZXJvLCBwZXJoYXBzIHRoZSBsYXN0IGl0ZW0gd2FzIGEgcGVuYWx0eSwgYW5kCkBAIC0zNTg3LDIwICs0ODM0LDE5IEBACiAgICAgJSB0byByZS1pbnNlcnQgdGhlIHNhbWUgcGVuYWx0eSAodmFsdWVzID4xMDAwMCBhcmUgdXNlZCBmb3IgdmFyaW91cwogICAgICUgc2lnbmFscyk7IHNpbmNlIHdlIGp1c3QgaW5zZXJ0ZWQgYSBub24tZGlzY2FyZGFibGUgaXRlbSwgYW55CiAgICAgJSBmb2xsb3dpbmcgZ2x1ZSAoc3VjaCBhcyBhIFxwYXJza2lwKSB3b3VsZCBiZSBhIGJyZWFrcG9pbnQuICBGb3IgZXhhbXBsZToKLSAgICAlIAogICAgICUgICBAZGVmZm4gZGVmZm4td2hhdGV2ZXIKICAgICAlICAgQHZpbmRleCBpbmRleC13aGF0ZXZlcgogICAgICUgICBEZXNjcmlwdGlvbi4KICAgICAlIHdvdWxkIGFsbG93IGEgYnJlYWsgYmV0d2VlbiB0aGUgaW5kZXgtd2hhdGV2ZXIgd2hhdHNpdAogICAgICUgYW5kIHRoZSAiRGVzY3JpcHRpb24uIiBwYXJhZ3JhcGguCi0gICAgXGlmbnVtXGNvdW50MjU1Pjk5OTkgXHBlbmFsdHlcY291bnQyNTUgXGZpCisgICAgXGlmbnVtXHdoYXRzaXRwZW5hbHR5Pjk5OTkgXHBlbmFsdHlcd2hhdHNpdHBlbmFsdHkgXGZpCiAgIFxlbHNlCiAgICAgJSBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgd2UgaGFkIGEgbm9uemVybyBcbGFzdHNraXAsCiAgICAgJSB0aGlzIG1ha2UtdXAgZ2x1ZSB3b3VsZCBiZSBwcmVjZWRlZCBieSBhIG5vbi1kaXNjYXJkYWJsZSBpdGVtCiAgICAgJSAodGhlIHdoYXRzaXQgZnJvbSB0aGUgXHdyaXRlKSwgc28gd2UgbXVzdCBpbnNlcnQgYSBcbm9icmVhay4KLSAgICBcbm9icmVha1x2c2tpcFxza2lwMAorICAgIFxub2JyZWFrXHZza2lwXHdoYXRzaXRza2lwCiAgIFxmaQotfQorXGZpfQogCiAlIFRoZSBpbmRleCBlbnRyeSB3cml0dGVuIGluIHRoZSBmaWxlIGFjdHVhbGx5IGxvb2tzIGxpa2UKICUgIFxlbnRyeSB7c29ydHN0cmluZ317cGFnZX17dG9waWN9CkBAIC0zNjQyLDYgKzQ4ODgsNyBAQAogICAlCiAgIFxzbWFsbGZvbnRzIFxybQogICBcdG9sZXJhbmNlID0gOTUwMAorICBccGxhaW5mcmVuY2hzcGFjaW5nCiAgIFxldmVyeXBhciA9IHt9JSBkb24ndCB3YW50IHRoZSBca2VyblwtcGFyaW5kZW50IGZyb20gaW5kZW50YXRpb24gc3VwcHJlc3Npb24uCiAgICUKICAgJSBTZWUgaWYgdGhlIGluZGV4IGZpbGUgZXhpc3RzIGFuZCBpcyBub25lbXB0eS4KQEAgLTM3MTUsMTAgKzQ5NjIsOSBAQAogJQogJSBBIHN0cmFpZ2h0Zm9yd2FyZCBpbXBsZW1lbnRhdGlvbiB3b3VsZCBzdGFydCBsaWtlIHRoaXM6CiAlCVxkZWZcZW50cnkjMSMyey4uLgotJSBCdXQgdGhpcyBmcm96ZXMgdGhlIGNhdGNvZGVzIGluIHRoZSBhcmd1bWVudCwgYW5kIGNhbiBjYXVzZSBwcm9ibGVtcyB0bworJSBCdXQgdGhpcyBmcmVlemVzIHRoZSBjYXRjb2RlcyBpbiB0aGUgYXJndW1lbnQsIGFuZCBjYW4gY2F1c2UgcHJvYmxlbXMgdG8KICUgQGNvZGUsIHdoaWNoIHNldHMgLSBhY3RpdmUuICBUaGlzIHByb2JsZW0gd2FzIGZpeGVkIGJ5IGEga2x1ZGdlLS0tCiAlIGBgLScnIHdhcyBhY3RpdmUgdGhyb3VnaG91dCB3aG9sZSBpbmRleCwgYnV0IHRoaXMgaXNuJ3QgcmVhbGx5IHJpZ2h0LgotJQogJSBUaGUgcmlnaHQgc29sdXRpb24gaXMgdG8gcHJldmVudCBcZW50cnkgZnJvbSBzd2FsbG93aW5nIHRoZSB3aG9sZSB0ZXh0LgogJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0ta2FzYWwsIDIxbm92MDMKIFxkZWZcZW50cnl7JQpAQCAtMzc1NSwxMCArNTAwMSwxNyBAQAogICAgICUgY29sdW1ucy4KICAgICBcdnNraXAgMHB0IHBsdXMxcHQKICAgICAlCisgICAgJSBXaGVuIHJlYWRpbmcgdGhlIHRleHQgb2YgZW50cnksIGNvbnZlcnQgZXhwbGljaXQgbGluZSBicmVha3MKKyAgICAlIGZyb20gQCogaW50byBzcGFjZXMuICBUaGUgdXNlciBtaWdodCBnaXZlIHRoZXNlIGluIGxvbmcgc2VjdGlvbgorICAgICUgdGl0bGVzLCBmb3IgaW5zdGFuY2UuCisgICAgXGRlZlwqe1x1bnNraXBcc3BhY2VcaWdub3Jlc3BhY2VzfSUKKyAgICBcZGVmXGVudHJ5YnJlYWt7XGhmaWxcYnJlYWt9JQorICAgICUKICAgICAlIFN3YWxsb3cgdGhlIGxlZnQgYnJhY2Ugb2YgdGhlIHRleHQgKGZpcnN0IHBhcmFtZXRlcik6CiAgICAgXGFmdGVyYXNzaWdubWVudFxkb2VudHJ5CiAgICAgXGxldFx0ZW1wID0KIH0KK1xkZWZcZW50cnlicmVha3tcdW5za2lwXHNwYWNlXGlnbm9yZXNwYWNlc30lCiBcZGVmXGRvZW50cnl7JQogICAgIFxiZ3JvdXAgJSBJbnN0ZWFkIG9mIHRoZSBzd2FsbG93ZWQgYnJhY2UuCiAgICAgICBcbm9pbmRlbnQKQEAgLTM3NzEsMTEgKzUwMjQsOCBAQAogICAgICUgVGhlIGZvbGxvd2luZyBpcyBrbHVkZ2VkIHRvIG5vdCBvdXRwdXQgYSBsaW5lIG9mIGRvdHMgaW4gdGhlIGluZGV4IGlmCiAgICAgJSB0aGVyZSBhcmUgbm8gcGFnZSBudW1iZXJzLiAgVGhlIG5leHQgcGVyc29uIHdobyBicmVha3MgdGhpcyB3aWxsIGJlCiAgICAgJSBjdXJzZWQgYnkgYSBVbml4IGRhZW1vbi4KLSAgICBcZGVmXHRlbXBhe3tccm0gfX0lCi0gICAgXGRlZlx0ZW1wYnsjMX0lCi0gICAgXGVkZWZcdGVtcGN7XHRlbXBhfSUKLSAgICBcZWRlZlx0ZW1wZHtcdGVtcGJ9JQotICAgIFxpZnhcdGVtcGNcdGVtcGQKKyAgICBcc2V0Ym94XGJveEEgPSBcaGJveHsjMX0lCisgICAgXGlmZGltXHdkXGJveEEgPSAwcHQKICAgICAgIFwgJQogICAgIFxlbHNlCiAgICAgICAlCkBAIC0zNzk5LDkgKzUwNDksOSBAQAogICBcZW5kZ3JvdXAKIH0KIAotJSBMaWtlIFxkb3RmaWxsIGV4Y2VwdCB0YWtlcyBhdCBsZWFzdCAxIGVtLgorJSBMaWtlIHBsYWluLnRleCdzIFxkb3RmaWxsLCBleGNlcHQgdXNlcyB1cCBhdCBsZWFzdCAxIGVtLgogXGRlZlxpbmRleGRvdGZpbGx7XGNsZWFkZXJzCi0gIFxoYm94eyRcbWF0aHN1cnJvdW5kPTBwdCBcbWtlcm4xLjVtdSAke1xpdCAufSQgXG1rZXJuMS41bXUkfVxoc2tpcCAxZW0gcGx1cyAxZmlsbH0KKyAgXGhib3h7JFxtYXRoc3Vycm91bmQ9MHB0IFxta2VybjEuNW11Llxta2VybjEuNW11JH1caHNraXAgMWVtIHBsdXMgMWZpbGx9CiAKIFxkZWZccHJpbWFyeSAjMXtcbGluZXsjMVxoZmlsfX0KIApAQCAtMzkxMSw2ICs1MTYxLDM0IEBACiAlCiAlIEFsbCBkb25lIHdpdGggZG91YmxlIGNvbHVtbnMuCiBcZGVmXGVuZGRvdWJsZWNvbHVtbnN7JQorICAlIFRoZSBmb2xsb3dpbmcgcGVuYWx0eSBlbnN1cmVzIHRoYXQgdGhlIHBhZ2UgYnVpbGRlciBpcyBleGVyY2lzZWQKKyAgJSBfYmVmb3JlXyB3ZSBjaGFuZ2UgdGhlIG91dHB1dCByb3V0aW5lLiAgVGhpcyBpcyBuZWNlc3NhcnkgaW4gdGhlCisgICUgZm9sbG93aW5nIHNpdHVhdGlvbjoKKyAgJQorICAlIFRoZSBsYXN0IHNlY3Rpb24gb2YgdGhlIGluZGV4IGNvbnNpc3RzIG9ubHkgb2YgYSBzaW5nbGUgZW50cnkuCisgICUgQmVmb3JlIHRoaXMgc2VjdGlvbiwgXHBhZ2V0b3RhbCBpcyBsZXNzIHRoYW4gXHBhZ2Vnb2FsLCBzbyBubworICAlIGJyZWFrIG9jY3VycyBiZWZvcmUgdGhlIGxhc3Qgc2VjdGlvbiBzdGFydHMuICBIb3dldmVyLCB0aGUgbGFzdAorICAlIHNlY3Rpb24sIGNvbnNpc3Rpbmcgb2YgXGluaXRpYWwgYW5kIHRoZSBzaW5nbGUgXGVudHJ5LCBkb2VzIG5vdAorICAlIGZpdCBvbiB0aGUgcGFnZSBhbmQgaGFzIHRvIGJlIGJyb2tlbiBvZmYuICBXaXRob3V0IHRoZSBmb2xsb3dpbmcKKyAgJSBwZW5hbHR5IHRoZSBwYWdlIGJ1aWxkZXIgd2lsbCBub3QgYmUgZXhlcmNpc2VkIHVudGlsIFxlamVjdAorICAlIGJlbG93LCBhbmQgYnkgdGhhdCB0aW1lIHdlJ2xsIGFscmVhZHkgaGF2ZSBjaGFuZ2VkIHRoZSBvdXRwdXQKKyAgJSByb3V0aW5lIHRvIHRoZSBcYmFsYW5jZWNvbHVtbnMgdmVyc2lvbiwgc28gdGhlIG5leHQtdG8tbGFzdAorICAlIGRvdWJsZS1jb2x1bW4gcGFnZSB3aWxsIGJlIHByb2Nlc3NlZCB3aXRoIFxiYWxhbmNlY29sdW1ucywgd2hpY2gKKyAgJSBpcyB3cm9uZzogIFRoZSB0d28gY29sdW1ucyB3aWxsIGdvIHRvIHRoZSBtYWluIHZlcnRpY2FsIGxpc3QsIHdpdGgKKyAgJSB0aGUgYnJva2VuLW9mZiBzZWN0aW9uIGluIHRoZSByZWNlbnQgY29udHJpYnV0aW9ucy4gIEFzIHNvb24gYXMKKyAgJSB0aGUgb3V0cHV0IHJvdXRpbmUgZmluaXNoZXMsIFRlWCBzdGFydHMgcmVjb25zaWRlcmluZyB0aGUgcGFnZQorICAlIGJyZWFrLiAgVGhlIHR3byBjb2x1bW5zIGFuZCB0aGUgYnJva2VuLW9mZiBzZWN0aW9uIGJvdGggZml0IG9uIHRoZQorICAlIHBhZ2UsIGJlY2F1c2UgdGhlIHR3byBjb2x1bW5zIG5vdyB0YWtlIHVwIG9ubHkgaGFsZiBvZiB0aGUgcGFnZQorICAlIGdvYWwuICBXaGVuIFRlWCBzZWVzIFxlamVjdCBmcm9tIGJlbG93IHdoaWNoIGZvbGxvd3MgdGhlIGZpbmFsCisgICUgc2VjdGlvbiwgaXQgaW52b2tlcyB0aGUgbmV3IG91dHB1dCByb3V0aW5lIHRoYXQgd2UndmUgc2V0IGFmdGVyCisgICUgXGJhbGFuY2Vjb2x1bW5zIGJlbG93OyBcb25lcGFnZW91dCB3aWxsIHRyeSB0byBmaXQgdGhlIHR3byBjb2x1bW5zCisgICUgYW5kIHRoZSBmaW5hbCBzZWN0aW9uIGludG8gdGhlIHZib3ggb2YgXHBhZ2VoZWlnaHQgKHNlZQorICAlIFxwYWdlYm9keSksIGNhdXNpbmcgYW4gb3ZlcmZ1bGwgYm94LgorICAlCisgICUgTm90ZSB0aGF0IGdsdWUgd29uJ3Qgd29yayBoZXJlLCBiZWNhdXNlIGdsdWUgZG9lcyBub3QgZXhlcmNpc2UgdGhlCisgICUgcGFnZSBidWlsZGVyLCB1bmxpa2UgcGVuYWx0aWVzIChzZWUgVGhlIFRlWGJvb2ssIHBwLiAyODAtMjgxKS4KKyAgXHBlbmFsdHkwCisgICUKICAgXG91dHB1dCA9IHslCiAgICAgJSBTcGxpdCB0aGUgbGFzdCBvZiB0aGUgZG91YmxlLWNvbHVtbiBtYXRlcmlhbC4gIExlYXZlIGl0IG9uIHRoZQogICAgICUgY3VycmVudCBwYWdlLCBubyBhdXRvbWF0aWMgcGFnZSBicmVhay4KQEAgLTM5NjYsNyArNTI0NCwyMiBAQAogXG1lc3NhZ2V7c2VjdGlvbmluZyx9CiAlIENoYXB0ZXJzLCBzZWN0aW9ucywgZXRjLgogCi0lIFx1bm51bWJlcmVkbm8gaXMgYW4gb3h5bW9yb24sIG9mIGNvdXJzZS4gIEJ1dCB3ZSBjb3VudCB0aGUgdW5udW1iZXJlZAorJSBMZXQncyBzdGFydCB3aXRoIEBwYXJ0LgorXG91dGVyXHBhcnNlYXJnZGVmXHBhcnR7XHBhcnR6enp7IzF9fQorXGRlZlxwYXJ0enp6IzF7JQorICBcY2hhcG9kZHBhZ2UKKyAgXG51bGwKKyAgXHZza2lwLjNcdnNpemUgICUgbW92ZSBpdCBkb3duIG9uIHRoZSBwYWdlIGEgYml0CisgIFxiZWdpbmdyb3VwCisgICAgXG5vaW5kZW50IFx0aXRsZWZvbnRzXHJtaXNib2xkICMxXHBhciAlIHRoZSB0ZXh0CisgICAgXGxldFxsYXN0bm9kZT1cZW1wdHkgICAgICAlIG5vIG5vZGUgdG8gYXNzb2NpYXRlIHdpdGgKKyAgICBcd3JpdGV0b2NlbnRyeXtwYXJ0fXsjMX17fSUgYnV0IHB1dCBpdCBpbiB0aGUgdG9jCisgICAgXGhlYWRpbmdzb2ZmICAgICAgICAgICAgICAlIG5vIGhlYWRsaW5lIG9yIGZvb3RsaW5lIG9uIHRoZSBwYXJ0IHBhZ2UKKyAgICBcY2hhcG9kZHBhZ2UKKyAgXGVuZGdyb3VwCit9CisKKyUgXHVubnVtYmVyZWRubyBpcyBhbiBveHltb3Jvbi4gIEJ1dCB3ZSBjb3VudCB0aGUgdW5udW1iZXJlZAogJSBzZWN0aW9ucyBzbyB0aGF0IHdlIGNhbiByZWZlciB0byB0aGVtIHVuYW1iaWd1b3VzbHkgaW4gdGhlIHBkZgogJSBvdXRsaW5lcyBieSB0aGVpciAic2VjdGlvbiBudW1iZXIiLiAgV2UgYXZvaWQgY29sbGlzaW9ucyB3aXRoIGNoYXB0ZXIKICUgbnVtYmVycyBieSBzdGFydGluZyB0aGVtIGF0IDEwMDAwLiAgKElmIGEgZG9jdW1lbnQgZXZlciBoYXMgMTAwMDAKQEAgLTQwMjAsMTEgKzUzMTMsMTUgQEAKICAgXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpCiAgIFxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaX0KIAotJSBFYWNoIEBjaGFwdGVyIGRlZmluZXMgdGhpcyBhcyB0aGUgbmFtZSBvZiB0aGUgY2hhcHRlci4KLSUgcGFnZSBoZWFkaW5ncyBhbmQgZm9vdGluZ3MgY2FuIHVzZSBpdC4gIEBzZWN0aW9uIGRvZXMgbGlrZXdpc2UuCi0lIEhvd2V2ZXIsIHRoZXkgYXJlIG5vdCByZWxpYWJsZSwgYmVjYXVzZSB3ZSBkb24ndCB1c2UgbWFya3MuCislIEVhY2ggQGNoYXB0ZXIgZGVmaW5lcyB0aGVzZSAodXNpbmcgbWFya3MpIGFzIHRoZSBudW1iZXIrbmFtZSwgbnVtYmVyCislIGFuZCBuYW1lIG9mIHRoZSBjaGFwdGVyLiAgUGFnZSBoZWFkaW5ncyBhbmQgZm9vdGluZ3MgY2FuIHVzZQorJSB0aGVzZS4gIEBzZWN0aW9uIGRvZXMgbGlrZXdpc2UuCiBcZGVmXHRoaXNjaGFwdGVye30KK1xkZWZcdGhpc2NoYXB0ZXJudW17fQorXGRlZlx0aGlzY2hhcHRlcm5hbWV7fQogXGRlZlx0aGlzc2VjdGlvbnt9CitcZGVmXHRoaXNzZWN0aW9ubnVte30KK1xkZWZcdGhpc3NlY3Rpb25uYW1le30KIAogXG5ld2NvdW50XGFic3NlY2xldmVsICUgdXNlZCB0byBjYWxjdWxhdGUgcHJvcGVyIGhlYWRpbmcgbGV2ZWwKIFxuZXdjb3VudFxzZWNiYXNlXHNlY2Jhc2U9MCAlIEByYWlzZXNlY3Rpb25zL0Bsb3dlcnNlY3Rpb25zIG1vZGlmeSB0aGlzIGNvdW50CkBAIC00MDQxLDggKzUzMzgsOCBAQAogXGNoYXJkZWZcbWF4c2VjbGV2ZWwgPSAzCiAlCiAlIEEgbnVtYmVyZWQgc2VjdGlvbiB3aXRoaW4gYW4gdW5udW1iZXJlZCBjaGFuZ2VzIHRvIHVubnVtYmVyZWQgdG9vLgotJSBUbyBhY2hpdmUgdGhpcywgcmVtZW1iZXIgdGhlICJiaWdnZXN0IiB1bm51bS4gc2VjLiB3ZSBhcmUgY3VycmVudGx5IGluOgotXGNoYXJkZWZcdW5tbGV2ZWwgPSBcbWF4c2VjbGV2ZWwKKyUgVG8gYWNoaWV2ZSB0aGlzLCByZW1lbWJlciB0aGUgImJpZ2dlc3QiIHVubnVtLiBzZWMuIHdlIGFyZSBjdXJyZW50bHkgaW46CitcY2hhcmRlZlx1bm5sZXZlbCA9IFxtYXhzZWNsZXZlbAogJQogJSBUcmFjZSB3aGV0aGVyIHRoZSBjdXJyZW50IGNoYXB0ZXIgaXMgYW4gYXBwZW5kaXggb3Igbm90OgogJSBcY2hhcGhlYWR0eXBlIGlzICJOIiBvciAiQSIsIHVubnVtYmVyZWQgY2hhcHRlcnMgYXJlIGlnbm9yZWQuCkBAIC00MDY3LDggKzUzNjQsOCBAQAogICAlIFRoZSBoZWFkaW5nIHR5cGU6CiAgIFxkZWZcaGVhZHR5cGV7IzF9JQogICBcaWYgXGhlYWR0eXBlIFUlCi0gICAgXGlmbnVtIFxhYnNzZWNsZXZlbCA8IFx1bm1sZXZlbAotICAgICAgXGNoYXJkZWZcdW5tbGV2ZWwgPSBcYWJzc2VjbGV2ZWwKKyAgICBcaWZudW0gXGFic3NlY2xldmVsIDwgXHVubmxldmVsCisgICAgICBcY2hhcmRlZlx1bm5sZXZlbCA9IFxhYnNzZWNsZXZlbAogICAgIFxmaQogICBcZWxzZQogICAgICUgQ2hlY2sgZm9yIGFwcGVuZGl4IHNlY3Rpb25zOgpAQCAtNDA4MCwxMCArNTM3NywxMCBAQAogICAgICAgXGZpXGZpCiAgICAgXGZpCiAgICAgJSBDaGVjayBmb3IgbnVtYmVyZWQgd2l0aGluIHVubnVtYmVyZWQ6Ci0gICAgXGlmbnVtIFxhYnNzZWNsZXZlbCA+IFx1bm1sZXZlbAorICAgIFxpZm51bSBcYWJzc2VjbGV2ZWwgPiBcdW5ubGV2ZWwKICAgICAgIFxkZWZcaGVhZHR5cGV7VX0lCiAgICAgXGVsc2UKLSAgICAgIFxjaGFyZGVmXHVubWxldmVsID0gMworICAgICAgXGNoYXJkZWZcdW5ubGV2ZWwgPSAzCiAgICAgXGZpCiAgIFxmaQogICAlIE5vdyBwcmludCB0aGUgaGVhZGluZzoKQEAgLTQxMzcsNyArNTQzNCw5IEBACiAgIFxnZGVmXGNoYXBsZXZlbHByZWZpeHtcdGhlXGNoYXBuby59JQogICBccmVzZXRhbGxmbG9hdG5vcwogICAlCi0gIFxtZXNzYWdle1xwdXR3b3JkQ2hhcHRlclxzcGFjZSBcdGhlXGNoYXBub30lCisgICUgXHB1dHdvcmRDaGFwdGVyIGNhbiBjb250YWluIGNvbXBsZXggdGhpbmdzIGluIHRyYW5zbGF0aW9ucy4KKyAgXHRva3MwPVxleHBhbmRhZnRlcntccHV0d29yZENoYXB0ZXJ9JQorICBcbWVzc2FnZXtcdGhlXHRva3MwIFxzcGFjZSBcdGhlXGNoYXBub30lCiAgICUKICAgJSBXcml0ZSB0aGUgYWN0dWFsIGhlYWRpbmcuCiAgIFxjaGFwbWFjcm97IzF9e1ludW1iZXJlZH17XHRoZVxjaGFwbm99JQpAQCAtNDE0OCwxNSArNTQ0NywxNyBAQAogICBcZ2xvYmFsXGxldFxzdWJzdWJzZWN0aW9uID0gXG51bWJlcmVkc3Vic3Vic2VjCiB9CiAKLVxvdXRlclxwYXJzZWFyZ2RlZlxhcHBlbmRpeHtcYXBwaGVhZDB7IzF9fSAlIG5vcm1hbGx5IGFwcGhlYWQwIGNhbGxzIGFwcGVuZGl4enp6Citcb3V0ZXJccGFyc2VhcmdkZWZcYXBwZW5kaXh7XGFwcGhlYWQweyMxfX0gJSBub3JtYWxseSBjYWxscyBhcHBlbmRpeHp6egorJQogXGRlZlxhcHBlbmRpeHp6eiMxeyUKICAgXGdsb2JhbFxzZWNubz0wIFxnbG9iYWxcc3Vic2Vjbm89MCBcZ2xvYmFsXHN1YnN1YnNlY25vPTAKICAgICBcZ2xvYmFsXGFkdmFuY2VcYXBwZW5kaXhubyBieSAxCiAgIFxnZGVmXGNoYXBsZXZlbHByZWZpeHtcYXBwZW5kaXhsZXR0ZXIufSUKICAgXHJlc2V0YWxsZmxvYXRub3MKICAgJQotICBcZGVmXGFwcGVuZGl4bnVte1xwdXR3b3JkQXBwZW5kaXhcc3BhY2UgXGFwcGVuZGl4bGV0dGVyfSUKLSAgXG1lc3NhZ2V7XGFwcGVuZGl4bnVtfSUKKyAgJSBccHV0d29yZEFwcGVuZGl4IGNhbiBjb250YWluIGNvbXBsZXggdGhpbmdzIGluIHRyYW5zbGF0aW9ucy4KKyAgXHRva3MwPVxleHBhbmRhZnRlcntccHV0d29yZEFwcGVuZGl4fSUKKyAgXG1lc3NhZ2V7XHRoZVx0b2tzMCBcc3BhY2UgXGFwcGVuZGl4bGV0dGVyfSUKICAgJQogICBcY2hhcG1hY3JveyMxfXtZYXBwZW5kaXh9e1xhcHBlbmRpeGxldHRlcn0lCiAgICUKQEAgLTQxNjUsNyArNTQ2Niw4IEBACiAgIFxnbG9iYWxcbGV0XHN1YnN1YnNlY3Rpb24gPSBcYXBwZW5kaXhzdWJzdWJzZWMKIH0KIAotXG91dGVyXHBhcnNlYXJnZGVmXHVubnVtYmVyZWR7XHVubm1oZWFkMHsjMX19ICUgbm9ybWFsbHkgdW5ubWhlYWQwIGNhbGxzIHVubnVtYmVyZWR6enoKKyUgbm9ybWFsbHkgdW5ubWhlYWQwIGNhbGxzIHVubnVtYmVyZWR6eno6Citcb3V0ZXJccGFyc2VhcmdkZWZcdW5udW1iZXJlZHtcdW5ubWhlYWQweyMxfX0KIFxkZWZcdW5udW1iZXJlZHp6eiMxeyUKICAgXGdsb2JhbFxzZWNubz0wIFxnbG9iYWxcc3Vic2Vjbm89MCBcZ2xvYmFsXHN1YnN1YnNlY25vPTAKICAgICBcZ2xvYmFsXGFkdmFuY2VcdW5udW1iZXJlZG5vIGJ5IDEKQEAgLTQyMDksNDAgKzU1MTEsNDcgQEAKIFxsZXRcdG9wXHVubnVtYmVyZWQKIAogJSBTZWN0aW9ucy4KKyUgCiBcb3V0ZXJccGFyc2VhcmdkZWZcbnVtYmVyZWRzZWN7XG51bWhlYWQxeyMxfX0gJSBub3JtYWxseSBjYWxscyBzZWN6enoKIFxkZWZcc2Vjenp6IzF7JQogICBcZ2xvYmFsXHN1YnNlY25vPTAgXGdsb2JhbFxzdWJzdWJzZWNubz0wICBcZ2xvYmFsXGFkdmFuY2Vcc2Vjbm8gYnkgMQogICBcc2VjdGlvbmhlYWRpbmd7IzF9e3NlY317WW51bWJlcmVkfXtcdGhlXGNoYXBuby5cdGhlXHNlY25vfSUKIH0KIAotXG91dGVyXHBhcnNlYXJnZGVmXGFwcGVuZGl4c2VjdGlvbntcYXBwaGVhZDF7IzF9fSAlIG5vcm1hbGx5IGNhbGxzIGFwcGVuZGl4c2VjdGlvbnp6egorJSBub3JtYWxseSBjYWxscyBhcHBlbmRpeHNlY3Rpb256eno6Citcb3V0ZXJccGFyc2VhcmdkZWZcYXBwZW5kaXhzZWN0aW9ue1xhcHBoZWFkMXsjMX19CiBcZGVmXGFwcGVuZGl4c2VjdGlvbnp6eiMxeyUKICAgXGdsb2JhbFxzdWJzZWNubz0wIFxnbG9iYWxcc3Vic3Vic2Vjbm89MCAgXGdsb2JhbFxhZHZhbmNlXHNlY25vIGJ5IDEKICAgXHNlY3Rpb25oZWFkaW5neyMxfXtzZWN9e1lhcHBlbmRpeH17XGFwcGVuZGl4bGV0dGVyLlx0aGVcc2Vjbm99JQogfQogXGxldFxhcHBlbmRpeHNlY1xhcHBlbmRpeHNlY3Rpb24KIAotXG91dGVyXHBhcnNlYXJnZGVmXHVubnVtYmVyZWRzZWN7XHVubm1oZWFkMXsjMX19ICUgbm9ybWFsbHkgY2FsbHMgdW5udW1iZXJlZHNlY3p6egorJSBub3JtYWxseSBjYWxscyB1bm51bWJlcmVkc2Vjenp6OgorXG91dGVyXHBhcnNlYXJnZGVmXHVubnVtYmVyZWRzZWN7XHVubm1oZWFkMXsjMX19CiBcZGVmXHVubnVtYmVyZWRzZWN6enojMXslCiAgIFxnbG9iYWxcc3Vic2Vjbm89MCBcZ2xvYmFsXHN1YnN1YnNlY25vPTAgIFxnbG9iYWxcYWR2YW5jZVxzZWNubyBieSAxCiAgIFxzZWN0aW9uaGVhZGluZ3sjMX17c2VjfXtZbm90aGluZ317XHRoZVx1bm51bWJlcmVkbm8uXHRoZVxzZWNub30lCiB9CiAKICUgU3Vic2VjdGlvbnMuCi1cb3V0ZXJccGFyc2VhcmdkZWZcbnVtYmVyZWRzdWJzZWN7XG51bWhlYWQyeyMxfX0gJSBub3JtYWxseSBjYWxscyBudW1iZXJlZHN1YnNlY3p6egorJSAKKyUgbm9ybWFsbHkgY2FsbHMgbnVtYmVyZWRzdWJzZWN6eno6Citcb3V0ZXJccGFyc2VhcmdkZWZcbnVtYmVyZWRzdWJzZWN7XG51bWhlYWQyeyMxfX0KIFxkZWZcbnVtYmVyZWRzdWJzZWN6enojMXslCiAgIFxnbG9iYWxcc3Vic3Vic2Vjbm89MCAgXGdsb2JhbFxhZHZhbmNlXHN1YnNlY25vIGJ5IDEKICAgXHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzZWN9e1ludW1iZXJlZH17XHRoZVxjaGFwbm8uXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vfSUKIH0KIAotXG91dGVyXHBhcnNlYXJnZGVmXGFwcGVuZGl4c3Vic2Vje1xhcHBoZWFkMnsjMX19ICUgbm9ybWFsbHkgY2FsbHMgYXBwZW5kaXhzdWJzZWN6enoKKyUgbm9ybWFsbHkgY2FsbHMgYXBwZW5kaXhzdWJzZWN6eno6Citcb3V0ZXJccGFyc2VhcmdkZWZcYXBwZW5kaXhzdWJzZWN7XGFwcGhlYWQyeyMxfX0KIFxkZWZcYXBwZW5kaXhzdWJzZWN6enojMXslCiAgIFxnbG9iYWxcc3Vic3Vic2Vjbm89MCAgXGdsb2JhbFxhZHZhbmNlXHN1YnNlY25vIGJ5IDEKICAgXHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzZWN9e1lhcHBlbmRpeH0lCiAgICAgICAgICAgICAgICAgIHtcYXBwZW5kaXhsZXR0ZXIuXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vfSUKIH0KIAotXG91dGVyXHBhcnNlYXJnZGVmXHVubnVtYmVyZWRzdWJzZWN7XHVubm1oZWFkMnsjMX19ICVub3JtYWxseSBjYWxscyB1bm51bWJlcmVkc3Vic2Vjenp6CislIG5vcm1hbGx5IGNhbGxzIHVubnVtYmVyZWRzdWJzZWN6eno6Citcb3V0ZXJccGFyc2VhcmdkZWZcdW5udW1iZXJlZHN1YnNlY3tcdW5ubWhlYWQyeyMxfX0KIFxkZWZcdW5udW1iZXJlZHN1YnNlY3p6eiMxeyUKICAgXGdsb2JhbFxzdWJzdWJzZWNubz0wICBcZ2xvYmFsXGFkdmFuY2Vcc3Vic2Vjbm8gYnkgMQogICBcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnNlY317WW5vdGhpbmd9JQpAQCAtNDI1MCwyMSArNTU1OSwyNSBAQAogfQogCiAlIFN1YnN1YnNlY3Rpb25zLgotXG91dGVyXHBhcnNlYXJnZGVmXG51bWJlcmVkc3Vic3Vic2Vje1xudW1oZWFkM3sjMX19ICUgbm9ybWFsbHkgbnVtYmVyZWRzdWJzdWJzZWN6enoKKyUgCislIG5vcm1hbGx5IG51bWJlcmVkc3Vic3Vic2Vjenp6OgorXG91dGVyXHBhcnNlYXJnZGVmXG51bWJlcmVkc3Vic3Vic2Vje1xudW1oZWFkM3sjMX19CiBcZGVmXG51bWJlcmVkc3Vic3Vic2Vjenp6IzF7JQogICBcZ2xvYmFsXGFkdmFuY2Vcc3Vic3Vic2Vjbm8gYnkgMQogICBcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnN1YnNlY317WW51bWJlcmVkfSUKICAgICAgICAgICAgICAgICAge1x0aGVcY2hhcG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNuby5cdGhlXHN1YnN1YnNlY25vfSUKIH0KIAotXG91dGVyXHBhcnNlYXJnZGVmXGFwcGVuZGl4c3Vic3Vic2Vje1xhcHBoZWFkM3sjMX19ICUgbm9ybWFsbHkgYXBwZW5kaXhzdWJzdWJzZWN6enoKKyUgbm9ybWFsbHkgYXBwZW5kaXhzdWJzdWJzZWN6eno6Citcb3V0ZXJccGFyc2VhcmdkZWZcYXBwZW5kaXhzdWJzdWJzZWN7XGFwcGhlYWQzeyMxfX0KIFxkZWZcYXBwZW5kaXhzdWJzdWJzZWN6enojMXslCiAgIFxnbG9iYWxcYWR2YW5jZVxzdWJzdWJzZWNubyBieSAxCiAgIFxzZWN0aW9uaGVhZGluZ3sjMX17c3Vic3Vic2VjfXtZYXBwZW5kaXh9JQogICAgICAgICAgICAgICAgICB7XGFwcGVuZGl4bGV0dGVyLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNuby5cdGhlXHN1YnN1YnNlY25vfSUKIH0KIAotXG91dGVyXHBhcnNlYXJnZGVmXHVubnVtYmVyZWRzdWJzdWJzZWN7XHVubm1oZWFkM3sjMX19ICVub3JtYWxseSB1bm51bWJlcmVkc3Vic3Vic2Vjenp6CislIG5vcm1hbGx5IHVubnVtYmVyZWRzdWJzdWJzZWN6eno6Citcb3V0ZXJccGFyc2VhcmdkZWZcdW5udW1iZXJlZHN1YnN1YnNlY3tcdW5ubWhlYWQzeyMxfX0KIFxkZWZcdW5udW1iZXJlZHN1YnN1YnNlY3p6eiMxeyUKICAgXGdsb2JhbFxhZHZhbmNlXHN1YnN1YnNlY25vIGJ5IDEKICAgXHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzdWJzZWN9e1lub3RoaW5nfSUKQEAgLTQyODAsMTUgKzU1OTMsNiBAQAogCiAlIERlZmluZSBAbWFqb3JoZWFkaW5nLCBAaGVhZGluZyBhbmQgQHN1YmhlYWRpbmcKIAotJSBOT1RFIG9uIHVzZSBvZiBcdmJveCBmb3IgY2hhcHRlciBoZWFkaW5ncywgc2VjdGlvbiBoZWFkaW5ncywgYW5kIHN1Y2g6Ci0lICAgICAgIDEpIFdlIHVzZSBcdmJveCByYXRoZXIgdGhhbiB0aGUgZWFybGllciBcbGluZSB0byBwZXJtaXQKLSUgICAgICAgICAgb3ZlcmxvbmcgaGVhZGluZ3MgdG8gZm9sZC4KLSUgICAgICAgMikgXGh5cGhlbnBlbmFsdHkgaXMgc2V0IHRvIDEwMDAwIGJlY2F1c2UgaHlwaGVuYXRpb24gaW4gYQotJSAgICAgICAgICBoZWFkaW5nIGlzIG9ibm94aW91czsgdGhpcyBmb3JiaWRzIGl0LgotJSAgICAgICAzKSBMaWtld2lzZSwgaGVhZGluZ3MgbG9vayBiZXN0IGlmIG5vIFxwYXJpbmRlbnQgaXMgdXNlZCwgYW5kCi0lICAgICAgICAgIGlmIGp1c3RpZmljYXRpb24gaXMgbm90IGF0dGVtcHRlZC4gIEhlbmNlIFxyYWdnZWRyaWdodC4KLQotCiBcZGVmXG1ham9yaGVhZGluZ3slCiAgIHtcYWR2YW5jZVxjaGFwaGVhZGluZ3NraXAgYnkgMTBwdCBcY2hhcGJyZWFrIH0lCiAgIFxwYXJzZWFyZ1xjaGFwaGVhZGluZ3p6egpAQCAtNDI5NiwxMCArNTYwMCw4IEBACiAKIFxkZWZcY2hhcGhlYWRpbmd7XGNoYXBicmVhayBccGFyc2VhcmdcY2hhcGhlYWRpbmd6enp9CiBcZGVmXGNoYXBoZWFkaW5nenp6IzF7JQotICB7XGNoYXBmb250cyBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMFx0b2xlcmFuY2U9NTAwMAotICAgICAgICAgICAgICAgICAgICBccGFyaW5kZW50PTBwdFxyYWdnZWRyaWdodAotICAgICAgICAgICAgICAgICAgICBccm0gIzFcaGZpbGx9fSUKLSAgXGJpZ3NraXAgXHBhclxwZW5hbHR5IDIwMFxyZWxheAorICBcdmJveHtcY2hhcGZvbnRzIFxyYWdnZWR0aXRsZXNldHRpbmdzICMxXHBhcn0lCisgIFxub2JyZWFrXGJpZ3NraXAgXG5vYnJlYWsKICAgXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnQKIH0KIApAQCAtNDMxNSwxNyArNTYxNywyOCBAQAogJSAoaW5jbHVkaW5nIHdoaXRlc3BhY2UsIGxpbmVicmVha2luZywgZXRjLiBhcm91bmQgaXQpLAogJSBnaXZlbiBhbGwgdGhlIGluZm9ybWF0aW9uIGluIGNvbnZlbmllbnQsIHBhcnNlZCBmb3JtLgogCi0lJSUgQXJncyBhcmUgdGhlIHNraXAgYW5kIHBlbmFsdHkgKHVzdWFsbHkgbmVnYXRpdmUpCislIEFyZ3MgYXJlIHRoZSBza2lwIGFuZCBwZW5hbHR5ICh1c3VhbGx5IG5lZ2F0aXZlKQogXGRlZlxkb2JyZWFrIzEjMntccGFyXGlmZGltXGxhc3Rza2lwPCMxXHJlbW92ZWxhc3Rza2lwXHBlbmFsdHkjMlx2c2tpcCMxXGZpfQogCi0lJSUgRGVmaW5lIHBsYWluIGNoYXB0ZXIgc3RhcnRzLCBhbmQgcGFnZSBvbi9vZmYgc3dpdGNoaW5nIGZvciBpdAogJSBQYXJhbWV0ZXIgY29udHJvbGxpbmcgc2tpcCBiZWZvcmUgY2hhcHRlciBoZWFkaW5ncyAoaWYgbmVlZGVkKQotCiBcbmV3c2tpcFxjaGFwaGVhZGluZ3NraXAKIAorJSBEZWZpbmUgcGxhaW4gY2hhcHRlciBzdGFydHMsIGFuZCBwYWdlIG9uL29mZiBzd2l0Y2hpbmcgZm9yIGl0LgogXGRlZlxjaGFwYnJlYWt7XGRvYnJlYWsgXGNoYXBoZWFkaW5nc2tpcCB7LTQwMDB9fQogXGRlZlxjaGFwcGFnZXJ7XHBhclx2ZmlsbFxzdXBlcmVqZWN0fQotXGRlZlxjaGFwb2RkcGFnZXtcY2hhcHBhZ2VyIFxpZm9kZFxwYWdlbm8gXGVsc2UgXGhib3ggdG8gMHB0e30gXGNoYXBwYWdlclxmaX0KKyUgQmVjYXVzZSBcZG9tYXJrIGlzIGNhbGxlZCBiZWZvcmUgXGNoYXBvZGRwYWdlLCB0aGUgZmlsbGVyIHBhZ2Ugd2lsbAorJSBnZXQgdGhlIGhlYWRpbmdzIGZvciB0aGUgbmV4dCBjaGFwdGVyLCB3aGljaCBpcyB3cm9uZy4gIEJ1dCB3ZSBkb24ndAorJSBjYXJlIC0tIHdlIGp1c3QgZGlzYWJsZSBhbGwgaGVhZGluZ3Mgb24gdGhlIGZpbGxlciBwYWdlLgorXGRlZlxjaGFwb2RkcGFnZXslCisgIFxjaGFwcGFnZXIKKyAgXGlmb2RkXHBhZ2VubyBcZWxzZQorICAgIFxiZWdpbmdyb3VwCisgICAgICBcaGVhZGluZ3NvZmYKKyAgICAgIFxudWxsCisgICAgICBcY2hhcHBhZ2VyCisgICAgXGVuZGdyb3VwCisgIFxmaQorfQogCiBcZGVmXHNldGNoYXB0ZXJuZXdwYWdlICMxIHtcY3NuYW1lIENIQVBQQUcjMVxlbmRjc25hbWV9CiAKQEAgLTQzNTksNDEgKzU2NzIsNzggQEAKIFxkZWZcWWFwcGVuZGl4a2V5d29yZHtZYXBwZW5kaXh9CiAlCiBcZGVmXGNoYXBtYWNybyMxIzIjM3slCisgICUgSW5zZXJ0IHRoZSBmaXJzdCBtYXJrIGJlZm9yZSB0aGUgaGVhZGluZyBicmVhayAoc2VlIG5vdGVzIGZvciBcZG9tYXJrKS4KKyAgXGxldFxwcmV2Y2hhcHRlcmRlZnM9XGxhc3RjaGFwdGVyZGVmcworICBcbGV0XHByZXZzZWN0aW9uZGVmcz1cbGFzdHNlY3Rpb25kZWZzCisgIFxnZGVmXGxhc3RzZWN0aW9uZGVmc3tcZ2RlZlx0aGlzc2VjdGlvbm5hbWV7fVxnZGVmXHRoaXNzZWN0aW9ubnVte30lCisgICAgICAgICAgICAgICAgICAgICAgICBcZ2RlZlx0aGlzc2VjdGlvbnt9fSUKKyAgJQorICBcZGVmXHRlbXB0eXBleyMyfSUKKyAgXGlmeFx0ZW1wdHlwZVxZbm90aGluZ2tleXdvcmQKKyAgICBcZ2RlZlxsYXN0Y2hhcHRlcmRlZnN7XGdkZWZcdGhpc2NoYXB0ZXJuYW1leyMxfVxnZGVmXHRoaXNjaGFwdGVybnVte30lCisgICAgICAgICAgICAgICAgICAgICAgICAgIFxnZGVmXHRoaXNjaGFwdGVye1x0aGlzY2hhcHRlcm5hbWV9fSUKKyAgXGVsc2VcaWZ4XHRlbXB0eXBlXFlvbWl0ZnJvbXRvY2tleXdvcmQKKyAgICBcZ2RlZlxsYXN0Y2hhcHRlcmRlZnN7XGdkZWZcdGhpc2NoYXB0ZXJuYW1leyMxfVxnZGVmXHRoaXNjaGFwdGVybnVte30lCisgICAgICAgICAgICAgICAgICAgICAgICAgIFxnZGVmXHRoaXNjaGFwdGVye319JQorICBcZWxzZVxpZnhcdGVtcHR5cGVcWWFwcGVuZGl4a2V5d29yZAorICAgIFx0b2tzMD17IzF9JQorICAgIFx4ZGVmXGxhc3RjaGFwdGVyZGVmc3slCisgICAgICBcZ2RlZlxub2V4cGFuZFx0aGlzY2hhcHRlcm5hbWV7XHRoZVx0b2tzMH0lCisgICAgICBcZ2RlZlxub2V4cGFuZFx0aGlzY2hhcHRlcm51bXtcYXBwZW5kaXhsZXR0ZXJ9JQorICAgICAgJSBcbm9leHBhbmRccHV0d29yZEFwcGVuZGl4IGF2b2lkcyBleHBhbmRpbmcgaW5kaWdlc3RpYmxlCisgICAgICAlIGNvbW1hbmRzIGluIHNvbWUgb2YgdGhlIHRyYW5zbGF0aW9ucy4KKyAgICAgIFxnZGVmXG5vZXhwYW5kXHRoaXNjaGFwdGVye1xub2V4cGFuZFxwdXR3b3JkQXBwZW5kaXh7fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5vZXhwYW5kXHRoaXNjaGFwdGVybnVtOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5vZXhwYW5kXHRoaXNjaGFwdGVybmFtZX0lCisgICAgfSUKKyAgXGVsc2UKKyAgICBcdG9rczA9eyMxfSUKKyAgICBceGRlZlxsYXN0Y2hhcHRlcmRlZnN7JQorICAgICAgXGdkZWZcbm9leHBhbmRcdGhpc2NoYXB0ZXJuYW1le1x0aGVcdG9rczB9JQorICAgICAgXGdkZWZcbm9leHBhbmRcdGhpc2NoYXB0ZXJudW17XHRoZVxjaGFwbm99JQorICAgICAgJSBcbm9leHBhbmRccHV0d29yZENoYXB0ZXIgYXZvaWRzIGV4cGFuZGluZyBpbmRpZ2VzdGlibGUKKyAgICAgICUgY29tbWFuZHMgaW4gc29tZSBvZiB0aGUgdHJhbnNsYXRpb25zLgorICAgICAgXGdkZWZcbm9leHBhbmRcdGhpc2NoYXB0ZXJ7XG5vZXhwYW5kXHB1dHdvcmRDaGFwdGVye30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxub2V4cGFuZFx0aGlzY2hhcHRlcm51bToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxub2V4cGFuZFx0aGlzY2hhcHRlcm5hbWV9JQorICAgIH0lCisgIFxmaVxmaVxmaQorICAlCisgICUgT3V0cHV0IHRoZSBtYXJrLiAgUGFzcyBpdCB0aHJvdWdoIFxzYWZld2hhdHNpdCwgdG8gdGFrZSBjYXJlIG9mCisgICUgdGhlIHByZWNlZGluZyBzcGFjZS4KKyAgXHNhZmV3aGF0c2l0XGRvbWFyaworICAlCisgICUgSW5zZXJ0IHRoZSBjaGFwdGVyIGhlYWRpbmcgYnJlYWsuCiAgIFxwY2hhcHNlcG1hY3JvCisgICUKKyAgJSBOb3cgdGhlIHNlY29uZCBtYXJrLCBhZnRlciB0aGUgaGVhZGluZyBicmVhay4gIE5vIGJyZWFrIHBvaW50cworICAlIGJldHdlZW4gaGVyZSBhbmQgdGhlIGhlYWRpbmcuCisgIFxsZXRccHJldmNoYXB0ZXJkZWZzPVxsYXN0Y2hhcHRlcmRlZnMKKyAgXGxldFxwcmV2c2VjdGlvbmRlZnM9XGxhc3RzZWN0aW9uZGVmcworICBcZG9tYXJrCisgICUKICAgeyUKLSAgICBcY2hhcGZvbnRzIFxybQorICAgIFxjaGFwZm9udHMgXHJtaXNib2xkCiAgICAgJQotICAgICUgSGF2ZSB0byBkZWZpbmUgXHRoaXNzZWN0aW9uIGJlZm9yZSBjYWxsaW5nIFxkb25vZGVyZWYsIGJlY2F1c2UgdGhlCisgICAgJSBIYXZlIHRvIGRlZmluZSBcbGFzdHNlY3Rpb24gYmVmb3JlIGNhbGxpbmcgXGRvbm9kZXJlZiwgYmVjYXVzZSB0aGUKICAgICAlIHhyZWYgY29kZSBldmVudHVhbGx5IHVzZXMgaXQuICBPbiB0aGUgb3RoZXIgaGFuZCwgaXQgaGFzIHRvIGJlIGNhbGxlZAogICAgICUgYWZ0ZXIgXHBjaGFwc2VwbWFjcm8sIG9yIHRoZSBoZWFkbGluZSB3aWxsIGNoYW5nZSB0b28gc29vbi4KLSAgICBcZ2RlZlx0aGlzc2VjdGlvbnsjMX0lCi0gICAgXGdkZWZcdGhpc2NoYXB0ZXJuYW1leyMxfSUKKyAgICBcZ2RlZlxsYXN0c2VjdGlvbnsjMX0lCiAgICAgJQogICAgICUgT25seSBpbnNlcnQgdGhlIHNlcGFyYXRpbmcgc3BhY2UgaWYgd2UgaGF2ZSBhIGNoYXB0ZXIvYXBwZW5kaXgKICAgICAlIG51bWJlciwgYW5kIGRvbid0IHByaW50IHRoZSB1bm51bWJlcmVkIGBgbnVtYmVyJycuCi0gICAgXGRlZlx0ZW1wdHlwZXsjMn0lCiAgICAgXGlmeFx0ZW1wdHlwZVxZbm90aGluZ2tleXdvcmQKICAgICAgIFxzZXRib3gwID0gXGhib3h7fSUKICAgICAgIFxkZWZcdG9jdHlwZXt1bm5jaGFwfSUKLSAgICAgIFxnZGVmXHRoaXNjaGFwdGVyeyMxfSUKICAgICBcZWxzZVxpZnhcdGVtcHR5cGVcWW9taXRmcm9tdG9ja2V5d29yZAogICAgICAgXHNldGJveDAgPSBcaGJveHt9JSBjb250ZW50cyBsaWtlIHVubnVtYmVyZWQsIGJ1dCBubyB0b2MgZW50cnkKICAgICAgIFxkZWZcdG9jdHlwZXtvbWl0fSUKLSAgICAgIFxnZGVmXHRoaXNjaGFwdGVye30lCiAgICAgXGVsc2VcaWZ4XHRlbXB0eXBlXFlhcHBlbmRpeGtleXdvcmQKICAgICAgIFxzZXRib3gwID0gXGhib3h7XHB1dHdvcmRBcHBlbmRpeHt9ICMzXGVuc3BhY2V9JQogICAgICAgXGRlZlx0b2N0eXBle2FwcH0lCi0gICAgICAlIFdlIGRvbid0IHN1YnN0aXR1dGUgdGhlIGFjdHVhbCBjaGFwdGVyIG5hbWUgaW50byBcdGhpc2NoYXB0ZXIKLSAgICAgICUgYmVjYXVzZSB3ZSBkb24ndCB3YW50IGl0cyBtYWNyb3MgZXZhbHVhdGVkIG5vdy4gIEFuZCB3ZSBkb24ndAotICAgICAgJSB1c2UgXHRoaXNzZWN0aW9uIGJlY2F1c2UgdGhhdCBjaGFuZ2VzIHdpdGggZWFjaCBzZWN0aW9uLgotICAgICAgJQotICAgICAgXHhkZWZcdGhpc2NoYXB0ZXJ7XHB1dHdvcmRBcHBlbmRpeHt9IFxhcHBlbmRpeGxldHRlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIFxub2V4cGFuZFx0aGlzY2hhcHRlcm5hbWV9JQogICAgIFxlbHNlCiAgICAgICBcc2V0Ym94MCA9IFxoYm94eyMzXGVuc3BhY2V9JQogICAgICAgXGRlZlx0b2N0eXBle251bWNoYXB9JQotICAgICAgXHhkZWZcdGhpc2NoYXB0ZXJ7XHB1dHdvcmRDaGFwdGVye30gXHRoZVxjaGFwbm86Ci0gICAgICAgICAgICAgICAgICAgICAgICBcbm9leHBhbmRcdGhpc2NoYXB0ZXJuYW1lfSUKICAgICBcZmlcZmlcZmkKICAgICAlCiAgICAgJSBXcml0ZSB0aGUgdG9jIGVudHJ5IGZvciB0aGlzIGNoYXB0ZXIuICBNdXN0IGNvbWUgYmVmb3JlIHRoZQpAQCAtNDQwOSw4ICs1NzU5LDggQEAKICAgICBcZG9ub2RlcmVmeyMyfSUKICAgICAlCiAgICAgJSBUeXBlc2V0IHRoZSBhY3R1YWwgaGVhZGluZy4KLSAgICBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMCBcdG9sZXJhbmNlPTUwMDAgXHBhcmluZGVudD0wcHQgXHJhZ2dlZHJpZ2h0Ci0gICAgICAgICAgXGhhbmdpbmRlbnQ9XHdkMCBcY2VudGVycGFyYW1ldGVyc21heWJlCisgICAgXG5vYnJlYWsgJSBBdm9pZCBwYWdlIGJyZWFrcyBhdCB0aGUgaW50ZXJsaW5lIGdsdWUuCisgICAgXHZib3h7XHJhZ2dlZHRpdGxlc2V0dGluZ3MgXGhhbmdpbmRlbnQ9XHdkMCBcY2VudGVycGFyYW1ldGVyc21heWJlCiAgICAgICAgICAgXHVuaGJveDAgIzFccGFyfSUKICAgfSUKICAgXG5vYnJlYWtcYmlnc2tpcCAlIG5vIHBhZ2UgYnJlYWsgYWZ0ZXIgYSBjaGFwdGVyIHRpdGxlCkBAIC00NDMyLDE4ICs1NzgyLDE4IEBACiBcZGVmXHNldGNoYXB0ZXJzdHlsZSAjMSB7XGNzbmFtZSBDSEFQRiMxXGVuZGNzbmFtZX0KICUKIFxkZWZcdW5uY2hmb3BlbiAjMXslCi1cY2hhcG9kZHBhZ2Uge1xjaGFwZm9udHMgXHZib3h7XGh5cGhlbnBlbmFsdHk9MTAwMDBcdG9sZXJhbmNlPTUwMDAKLSAgICAgICAgICAgICAgICAgICAgICAgXHBhcmluZGVudD0wcHRccmFnZ2VkcmlnaHQKLSAgICAgICAgICAgICAgICAgICAgICAgXHJtICMxXGhmaWxsfX1cYmlnc2tpcCBccGFyXG5vYnJlYWsKKyAgXGNoYXBvZGRwYWdlCisgIFx2Ym94e1xjaGFwZm9udHMgXHJhZ2dlZHRpdGxlc2V0dGluZ3MgIzFccGFyfSUKKyAgXG5vYnJlYWtcYmlnc2tpcFxub2JyZWFrCiB9CiBcZGVmXGNoZm9wZW4gIzEjMntcY2hhcG9kZHBhZ2Uge1xjaGFwZm9udHMKIFx2Ym94IHRvIDNpbntcdmZpbCBcaGJveCB0b1xoc2l6ZXtcaGZpbCAjMn0gXGhib3ggdG9caHNpemV7XGhmaWwgIzF9IFx2ZmlsfX0lCiBccGFyXHBlbmFsdHkgNTAwMCAlCiB9CiBcZGVmXGNlbnRlcmNoZm9wZW4gIzF7JQotXGNoYXBvZGRwYWdlIHtcY2hhcGZvbnRzIFx2Ym94e1xoeXBoZW5wZW5hbHR5PTEwMDAwXHRvbGVyYW5jZT01MDAwCi0gICAgICAgICAgICAgICAgICAgICAgIFxwYXJpbmRlbnQ9MHB0Ci0gICAgICAgICAgICAgICAgICAgICAgIFxoZmlsbCB7XHJtICMxfVxoZmlsbH19XGJpZ3NraXAgXHBhclxub2JyZWFrCisgIFxjaGFwb2RkcGFnZQorICBcdmJveHtcY2hhcGZvbnRzIFxyYWdnZWR0aXRsZXNldHRpbmdzIFxoZmlsbCAjMVxoZmlsbH0lCisgIFxub2JyZWFrXGJpZ3NraXAgXG5vYnJlYWsKIH0KIFxkZWZcQ0hBUEZvcGVueyUKICAgXGdsb2JhbFxsZXRcY2hhcG1hY3JvPVxjaGZvcGVuCkBAIC00NDcxLDQ3ICs1ODIxLDExMCBAQAogJSB0aGUgc2VjdGlvbiB0eXBlIGZvciB4cmVmcyAoWW51bWJlcmVkLCBZbm90aGluZywgWWFwcGVuZGl4KSwgIzQgaXMgdGhlCiAlIHNlY3Rpb24gbnVtYmVyLgogJQorXGRlZlxzZWNrZXl3b3Jke3NlY30KKyUKIFxkZWZcc2VjdGlvbmhlYWRpbmcjMSMyIzMjNHslCiAgIHslCisgICAgXGNoZWNrZW52e30lIHNob3VsZCBub3QgYmUgaW4gYW4gZW52aXJvbm1lbnQuCisgICAgJQogICAgICUgU3dpdGNoIHRvIHRoZSByaWdodCBzZXQgb2YgZm9udHMuCi0gICAgXGNzbmFtZSAjMmZvbnRzXGVuZGNzbmFtZSBccm0KKyAgICBcY3NuYW1lICMyZm9udHNcZW5kY3NuYW1lIFxybWlzYm9sZAorICAgICUKKyAgICBcZGVmXHNlY3Rpb25sZXZlbHsjMn0lCisgICAgXGRlZlx0ZW1wdHlwZXsjM30lCisgICAgJQorICAgICUgSW5zZXJ0IGZpcnN0IG1hcmsgYmVmb3JlIHRoZSBoZWFkaW5nIGJyZWFrIChzZWUgbm90ZXMgZm9yIFxkb21hcmspLgorICAgIFxsZXRccHJldnNlY3Rpb25kZWZzPVxsYXN0c2VjdGlvbmRlZnMKKyAgICBcaWZ4XHRlbXB0eXBlXFlub3RoaW5na2V5d29yZAorICAgICAgXGlmeFxzZWN0aW9ubGV2ZWxcc2Vja2V5d29yZAorICAgICAgICBcZ2RlZlxsYXN0c2VjdGlvbmRlZnN7XGdkZWZcdGhpc3NlY3Rpb25uYW1leyMxfVxnZGVmXHRoaXNzZWN0aW9ubnVte30lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcZ2RlZlx0aGlzc2VjdGlvbntcdGhpc3NlY3Rpb25uYW1lfX0lCisgICAgICBcZmkKKyAgICBcZWxzZVxpZnhcdGVtcHR5cGVcWW9taXRmcm9tdG9ja2V5d29yZAorICAgICAgJSBEb24ndCByZWRlZmluZSBcdGhpc3NlY3Rpb24uCisgICAgXGVsc2VcaWZ4XHRlbXB0eXBlXFlhcHBlbmRpeGtleXdvcmQKKyAgICAgIFxpZnhcc2VjdGlvbmxldmVsXHNlY2tleXdvcmQKKyAgICAgICAgXHRva3MwPXsjMX0lCisgICAgICAgIFx4ZGVmXGxhc3RzZWN0aW9uZGVmc3slCisgICAgICAgICAgXGdkZWZcbm9leHBhbmRcdGhpc3NlY3Rpb25uYW1le1x0aGVcdG9rczB9JQorICAgICAgICAgIFxnZGVmXG5vZXhwYW5kXHRoaXNzZWN0aW9ubnVteyM0fSUKKyAgICAgICAgICAlIFxub2V4cGFuZFxwdXR3b3JkU2VjdGlvbiBhdm9pZHMgZXhwYW5kaW5nIGluZGlnZXN0aWJsZQorICAgICAgICAgICUgY29tbWFuZHMgaW4gc29tZSBvZiB0aGUgdHJhbnNsYXRpb25zLgorICAgICAgICAgIFxnZGVmXG5vZXhwYW5kXHRoaXNzZWN0aW9ue1xub2V4cGFuZFxwdXR3b3JkU2VjdGlvbnt9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5vZXhwYW5kXHRoaXNzZWN0aW9ubnVtOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxub2V4cGFuZFx0aGlzc2VjdGlvbm5hbWV9JQorICAgICAgICB9JQorICAgICAgXGZpCisgICAgXGVsc2UKKyAgICAgIFxpZnhcc2VjdGlvbmxldmVsXHNlY2tleXdvcmQKKyAgICAgICAgXHRva3MwPXsjMX0lCisgICAgICAgIFx4ZGVmXGxhc3RzZWN0aW9uZGVmc3slCisgICAgICAgICAgXGdkZWZcbm9leHBhbmRcdGhpc3NlY3Rpb25uYW1le1x0aGVcdG9rczB9JQorICAgICAgICAgIFxnZGVmXG5vZXhwYW5kXHRoaXNzZWN0aW9ubnVteyM0fSUKKyAgICAgICAgICAlIFxub2V4cGFuZFxwdXR3b3JkU2VjdGlvbiBhdm9pZHMgZXhwYW5kaW5nIGluZGlnZXN0aWJsZQorICAgICAgICAgICUgY29tbWFuZHMgaW4gc29tZSBvZiB0aGUgdHJhbnNsYXRpb25zLgorICAgICAgICAgIFxnZGVmXG5vZXhwYW5kXHRoaXNzZWN0aW9ue1xub2V4cGFuZFxwdXR3b3JkU2VjdGlvbnt9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5vZXhwYW5kXHRoaXNzZWN0aW9ubnVtOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxub2V4cGFuZFx0aGlzc2VjdGlvbm5hbWV9JQorICAgICAgICB9JQorICAgICAgXGZpCisgICAgXGZpXGZpXGZpCisgICAgJQorICAgICUgR28gaW50byB2ZXJ0aWNhbCBtb2RlLiAgVXN1YWxseSB3ZSdsbCBhbHJlYWR5IGJlIHRoZXJlLCBidXQgd2UKKyAgICAlIGRvbid0IHdhbnQgdGhlIGZvbGxvd2luZyB3aGF0c2l0IHRvIGVuZCB1cCBpbiBhIHByZWNlZGluZyBwYXJhZ3JhcGgKKyAgICAlIGlmIHRoZSBkb2N1bWVudCBkaWRuJ3QgaGFwcGVuIHRvIGhhdmUgYSBibGFuayBsaW5lLgorICAgIFxwYXIKKyAgICAlCisgICAgJSBPdXRwdXQgdGhlIG1hcmsuICBQYXNzIGl0IHRocm91Z2ggXHNhZmV3aGF0c2l0LCB0byB0YWtlIGNhcmUgb2YKKyAgICAlIHRoZSBwcmVjZWRpbmcgc3BhY2UuCisgICAgXHNhZmV3aGF0c2l0XGRvbWFyawogICAgICUKICAgICAlIEluc2VydCBzcGFjZSBhYm92ZSB0aGUgaGVhZGluZy4KICAgICBcY3NuYW1lICMyaGVhZGluZ2JyZWFrXGVuZGNzbmFtZQogICAgICUKLSAgICAlIE9ubHkgaW5zZXJ0IHRoZSBzcGFjZSBhZnRlciB0aGUgbnVtYmVyIGlmIHdlIGhhdmUgYSBzZWN0aW9uIG51bWJlci4KLSAgICBcZGVmXHNlY3Rpb25sZXZlbHsjMn0lCi0gICAgXGRlZlx0ZW1wdHlwZXsjM30lCisgICAgJSBOb3cgdGhlIHNlY29uZCBtYXJrLCBhZnRlciB0aGUgaGVhZGluZyBicmVhay4gIE5vIGJyZWFrIHBvaW50cworICAgICUgYmV0d2VlbiBoZXJlIGFuZCB0aGUgaGVhZGluZy4KKyAgICBcbGV0XHByZXZzZWN0aW9uZGVmcz1cbGFzdHNlY3Rpb25kZWZzCisgICAgXGRvbWFyawogICAgICUKKyAgICAlIE9ubHkgaW5zZXJ0IHRoZSBzcGFjZSBhZnRlciB0aGUgbnVtYmVyIGlmIHdlIGhhdmUgYSBzZWN0aW9uIG51bWJlci4KICAgICBcaWZ4XHRlbXB0eXBlXFlub3RoaW5na2V5d29yZAogICAgICAgXHNldGJveDAgPSBcaGJveHt9JQogICAgICAgXGRlZlx0b2N0eXBle3Vubn0lCi0gICAgICBcZ2RlZlx0aGlzc2VjdGlvbnsjMX0lCisgICAgICBcZ2RlZlxsYXN0c2VjdGlvbnsjMX0lCiAgICAgXGVsc2VcaWZ4XHRlbXB0eXBlXFlvbWl0ZnJvbXRvY2tleXdvcmQKICAgICAgICUgZm9yIEBoZWFkaW5ncyAtLSBubyBzZWN0aW9uIG51bWJlciwgZG9uJ3QgaW5jbHVkZSBpbiB0b2MsCi0gICAgICAlIGFuZCBkb24ndCByZWRlZmluZSBcdGhpc3NlY3Rpb24uCisgICAgICAlIGFuZCBkb24ndCByZWRlZmluZSBcbGFzdHNlY3Rpb24uCiAgICAgICBcc2V0Ym94MCA9IFxoYm94e30lCiAgICAgICBcZGVmXHRvY3R5cGV7b21pdH0lCiAgICAgICBcbGV0XHNlY3Rpb25sZXZlbD1cZW1wdHkKICAgICBcZWxzZVxpZnhcdGVtcHR5cGVcWWFwcGVuZGl4a2V5d29yZAogICAgICAgXHNldGJveDAgPSBcaGJveHsjNFxlbnNwYWNlfSUKICAgICAgIFxkZWZcdG9jdHlwZXthcHB9JQotICAgICAgXGdkZWZcdGhpc3NlY3Rpb257IzF9JQorICAgICAgXGdkZWZcbGFzdHNlY3Rpb257IzF9JQogICAgIFxlbHNlCiAgICAgICBcc2V0Ym94MCA9IFxoYm94eyM0XGVuc3BhY2V9JQogICAgICAgXGRlZlx0b2N0eXBle251bX0lCi0gICAgICBcZ2RlZlx0aGlzc2VjdGlvbnsjMX0lCisgICAgICBcZ2RlZlxsYXN0c2VjdGlvbnsjMX0lCiAgICAgXGZpXGZpXGZpCiAgICAgJQotICAgICUgV3JpdGUgdGhlIHRvYyBlbnRyeSAoYmVmb3JlIFxkb25vZGVyZWYpLiAgU2VlIGNvbW1lbnRzIGluIFxjaGZwbGFpbi4KKyAgICAlIFdyaXRlIHRoZSB0b2MgZW50cnkgKGJlZm9yZSBcZG9ub2RlcmVmKS4gIFNlZSBjb21tZW50cyBpbiBcY2hhcG1hY3JvLgogICAgIFx3cml0ZXRvY2VudHJ5e1x0b2N0eXBlXHNlY3Rpb25sZXZlbH17IzF9eyM0fSUKICAgICAlCiAgICAgJSBXcml0ZSB0aGUgbm9kZSByZWZlcmVuY2UgKD0gcGRmIGRlc3RpbmF0aW9uIGZvciBwZGZ0ZXgpLgotICAgICUgQWdhaW4sIHNlZSBjb21tZW50cyBpbiBcY2hmcGxhaW4uCisgICAgJSBBZ2Fpbiwgc2VlIGNvbW1lbnRzIGluIFxjaGFwbWFjcm8uCiAgICAgXGRvbm9kZXJlZnsjM30lCiAgICAgJQorICAgICUgSW50ZXJsaW5lIGdsdWUgd2lsbCBiZSBpbnNlcnRlZCB3aGVuIHRoZSB2Ym94IGlzIGNvbXBsZXRlZC4KKyAgICAlIFRoYXQgZ2x1ZSB3aWxsIGJlIGEgdmFsaWQgYnJlYWtwb2ludCBmb3IgdGhlIHBhZ2UsIHNpbmNlIGl0J2xsIGJlCisgICAgJSBwcmVjZWRlZCBieSBhIHdoYXRzaXQgKHVzdWFsbHkgZnJvbSB0aGUgXGRvbm9kZXJlZiwgb3IgZnJvbSB0aGUKKyAgICAlIFx3cml0ZXRvY2VudHJ5IGlmIHRoZXJlIHdhcyBubyBub2RlKS4gIFdlIGRvbid0IHdhbnQgdG8gYWxsb3cgdGhhdAorICAgICUgYnJlYWssIHNpbmNlIHRoZW4gdGhlIHdoYXRzaXRzIGNvdWxkIGVuZCB1cCBvbiBwYWdlIG4gd2hpbGUgdGhlCisgICAgJSBzZWN0aW9uIGlzIG9uIHBhZ2UgbisxLCB0aHVzIHRvYy9ldGMuIGFyZSB3cm9uZy4gIERlYmlhbiBidWcgMjc2MDAwLgorICAgIFxub2JyZWFrCisgICAgJQogICAgICUgT3V0cHV0IHRoZSBhY3R1YWwgc2VjdGlvbiBoZWFkaW5nLgotICAgIFx2Ym94e1xoeXBoZW5wZW5hbHR5PTEwMDAwIFx0b2xlcmFuY2U9NTAwMCBccGFyaW5kZW50PTBwdCBccmFnZ2VkcmlnaHQKKyAgICBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMCBcdG9sZXJhbmNlPTUwMDAgXHBhcmluZGVudD0wcHQgXHB0ZXhyYWdnZWRyaWdodAogICAgICAgICAgIFxoYW5naW5kZW50PVx3ZDAgICUgemVybyBpZiBubyBzZWN0aW9uIG51bWJlcgogICAgICAgICAgIFx1bmhib3gwICMxfSUKICAgfSUKQEAgLTQ1MjUsMTUgKzU5MzgsMTUgQEAKICAgJQogICAlIFdlJ2xsIGFsbW9zdCBjZXJ0YWlubHkgc3RhcnQgYSBwYXJhZ3JhcGggbmV4dCwgc28gZG9uJ3QgbGV0IHRoYXQKICAgJSBnbHVlIGFjY3VtdWxhdGUuICAoTm90IGEgYnJlYWtwb2ludCBiZWNhdXNlIGl0J3MgcHJlY2VkZWQgYnkgYQotICAlIGRpc2NhcmRhYmxlIGl0ZW0uKQorICAlIGRpc2NhcmRhYmxlIGl0ZW0uKSAgSG93ZXZlciwgd2hlbiBhIHBhcmFncmFwaCBpcyBub3Qgc3RhcnRlZCBuZXh0CisgICUgKFxzdGFydGRlZnVuLCBcY2FydG91Y2hlLCBcY2VudGVyLCBldGMuKSwgdGhpcyBuZWVkcyB0byBiZSB3aXBlZCBvdXQKKyAgJSBvciB0aGUgbmVnYXRpdmUgZ2x1ZSB3aWxsIGNhdXNlIHdlaXJkbHkgd3Jvbmcgb3V0cHV0LCB0eXBpY2FsbHkKKyAgJSBvYnNjdXJpbmcgdGhlIHNlY3Rpb24gaGVhZGluZyB3aXRoIHNvbWV0aGluZyBlbHNlLgogICBcdnNraXAtXHBhcnNraXAKLSAgJSAKLSAgJSBUaGlzIGlzIHB1cmVseSBzbyB0aGUgbGFzdCBpdGVtIG9uIHRoZSBsaXN0IGlzIGEga25vd24gXHBlbmFsdHkgPgotICAlIDEwMDAwLiAgVGhpcyBpcyBzbyBcc3RhcnRkZWZ1biBjYW4gYXZvaWQgYWxsb3dpbmcgYnJlYWtwb2ludHMgYWZ0ZXIKLSAgJSBzZWN0aW9uIGhlYWRpbmdzLiAgT3RoZXJ3aXNlLCBpdCB3b3VsZCBpbnNlcnQgYSB2YWxpZCBicmVha3BvaW50IGJldHdlZW46Ci0gICUgCi0gICUgICBAc2VjdGlvbiBzZWMtd2hhdGV2ZXIKLSAgJSAgIEBkZWZmbiBkZWYtd2hhdGV2ZXIKKyAgJQorICAlIFRoaXMgaXMgc28gdGhlIGxhc3QgaXRlbSBvbiB0aGUgbWFpbiB2ZXJ0aWNhbCBsaXN0IGlzIGEga25vd24KKyAgJSBccGVuYWx0eSA+IDEwMDAwLCBzbyBcc3RhcnRkZWZ1biwgZXRjLiwgY2FuIHJlY29nbml6ZSB0aGUgc2l0dWF0aW9uCisgICUgYW5kIGRvIHRoZSBuZWVkZnVsLgogICBccGVuYWx0eSAxMDAwMQogfQogCkBAIC00NTcyLDcgKzU5ODUsNyBAQAogICAgICAgIFxlZGVmXHRlbXB7JQogICAgICAgICAgXHdyaXRlXHRvY2ZpbGV7QCMxZW50cnl7IzJ9eyMzfXtcbGFzdG5vZGV9e1xub2V4cGFuZFxmb2xpb319fSUKICAgICAgICBcdGVtcAotICAgICAgfQorICAgICAgfSUKICAgICBcZmkKICAgXGZpCiAgICUKQEAgLTQ1ODksNyArNjAwMiw3IEBACiAlIFRoZXNlIGNoYXJhY3RlcnMgZG8gbm90IHByaW50IHByb3Blcmx5IGluIHRoZSBDb21wdXRlciBNb2Rlcm4gcm9tYW4KICUgZm9udHMsIHNvIHdlIG11c3QgdGFrZSBzcGVjaWFsIGNhcmUuICBUaGlzIGlzIG1vcmUgb3IgbGVzcyByZWR1bmRhbnQKICUgd2l0aCB0aGUgVGV4aW5mbyBpbnB1dCBmb3JtYXQgc2V0dXAgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCi0lIAorJQogXGRlZlxhY3RpdmVjYXRjb2Rlc3slCiAgIFxjYXRjb2RlYFwiPVxhY3RpdmUKICAgXGNhdGNvZGVgXCQ9XGFjdGl2ZQpAQCAtNDYwNyw3ICs2MDIwLDcgQEAKIFxkZWZccmVhZHRvY2ZpbGV7JQogICBcc2V0dXBkYXRhZmlsZQogICBcYWN0aXZlY2F0Y29kZXMKLSAgXGlucHV0IFxqb2JuYW1lLnRvYworICBcaW5wdXQgXHRvY3JlYWRmaWxlbmFtZQogfQogCiBcbmV3c2tpcFxjb250ZW50c3JpZ2h0bWFyZ2luIFxjb250ZW50c3JpZ2h0bWFyZ2luPTFpbgpAQCAtNDYyNiw3ICs2MDM5LDYgQEAKICAgJQogICAlIERvbid0IG5lZWQgdG8gcHV0IGBDb250ZW50cycgb3IgYFNob3J0IENvbnRlbnRzJyBpbiB0aGUgaGVhZGxpbmUuCiAgICUgSXQgaXMgYWJ1bmRhbnRseSBjbGVhciB3aGF0IHRoZXkgYXJlLgotICBcZGVmXHRoaXNjaGFwdGVye30lCiAgIFxjaGFwbWFjcm97IzF9e1lvbWl0ZnJvbXRvY317fSUKICAgJQogICBcc2F2ZXBhZ2VubyA9IFxwYWdlbm8KQEAgLTQ2MzgsMTEgKzYwNTAsMTYgQEAKICAgICBcaWZudW0gXHBhZ2Vubz4wIFxnbG9iYWxccGFnZW5vID0gXGxhc3RuZWdhdGl2ZXBhZ2VubyBcZmkKIH0KIAorJSByZWRlZmluZWQgZm9yIHRoZSB0d28tdm9sdW1lIGxpc3ByZWYuICBXZSBhbHdheXMgb3V0cHV0IG9uCislIFxqb2JuYW1lLnRvYyBldmVuIGlmIHRoaXMgaXMgcmVkZWZpbmVkLgorJQorXGRlZlx0b2NyZWFkZmlsZW5hbWV7XGpvYm5hbWUudG9jfQogCiAlIE5vcm1hbCAobG9uZykgdG9jLgorJQogXGRlZlxjb250ZW50c3slCiAgIFxzdGFydGNvbnRlbnRze1xwdXR3b3JkVE9DfSUKLSAgICBcb3BlbmluIDEgXGpvYm5hbWUudG9jCisgICAgXG9wZW5pbiAxIFx0b2NyZWFkZmlsZW5hbWVcc3BhY2UKICAgICBcaWZlb2YgMSBcZWxzZQogICAgICAgXHJlYWR0b2NmaWxlCiAgICAgXGZpCkBAIC00NjYxLDYgKzYwNzgsNyBAQAogXGRlZlxzdW1tYXJ5Y29udGVudHN7JQogICBcc3RhcnRjb250ZW50c3tccHV0d29yZFNob3J0VE9DfSUKICAgICAlCisgICAgXGxldFxwYXJ0ZW50cnkgPSBcc2hvcnRwYXJ0ZW50cnkKICAgICBcbGV0XG51bWNoYXBlbnRyeSA9IFxzaG9ydGNoYXBlbnRyeQogICAgIFxsZXRcYXBwZW50cnkgPSBcc2hvcnRjaGFwZW50cnkKICAgICBcbGV0XHVubmNoYXBlbnRyeSA9IFxzaG9ydHVubmNoYXBlbnRyeQpAQCAtNDY4MCw3ICs2MDk4LDcgQEAKICAgICBcbGV0XG51bXN1YnN1YnNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CiAgICAgXGxldFxhcHBzdWJzdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQogICAgIFxsZXRcdW5uc3Vic3Vic2VjZW50cnkgPSBcbnVtc2VjZW50cnkKLSAgICBcb3BlbmluIDEgXGpvYm5hbWUudG9jCisgICAgXG9wZW5pbiAxIFx0b2NyZWFkZmlsZW5hbWVcc3BhY2UKICAgICBcaWZlb2YgMSBcZWxzZQogICAgICAgXHJlYWR0b2NmaWxlCiAgICAgXGZpCkBAIC00NzE2LDYgKzYxMzQsMTkgQEAKICUgVGhlIGxhc3QgYXJndW1lbnQgaXMgdGhlIHBhZ2UgbnVtYmVyLgogJSBUaGUgYXJndW1lbnRzIGluIGJldHdlZW4gYXJlIHRoZSBjaGFwdGVyIG51bWJlciwgc2VjdGlvbiBudW1iZXIsIC4uLgogCislIFBhcnRzLCBpbiB0aGUgbWFpbiBjb250ZW50cy4gIFJlcGxhY2UgdGhlIHBhcnQgbnVtYmVyLCB3aGljaCBkb2Vzbid0CislIGV4aXN0LCB3aXRoIGFuIGVtcHR5IGJveC4gIExldCdzIGhvcGUgYWxsIHRoZSBudW1iZXJzIGhhdmUgdGhlIHNhbWUgd2lkdGguCislIEFsc28gaWdub3JlIHRoZSBwYWdlIG51bWJlciwgd2hpY2ggaXMgY29udmVudGlvbmFsbHkgbm90IHByaW50ZWQuCitcZGVmXG51bWVyYWxib3h7XHNldGJveDA9XGhib3h7OH1caGJveCB0byBcd2Qwe1xoZmlsfX0KK1xkZWZccGFydGVudHJ5IzEjMiMzIzR7XGRvY2hhcGVudHJ5e1xudW1lcmFsYm94XGxhYmVsc3BhY2UjMX17fX0KKyUKKyUgUGFydHMsIGluIHRoZSBzaG9ydCB0b2MuCitcZGVmXHNob3J0cGFydGVudHJ5IzEjMiMzIzR7JQorICBccGVuYWx0eS0zMDAKKyAgXHZza2lwLjVcYmFzZWxpbmVza2lwIHBsdXMuMTVcYmFzZWxpbmVza2lwIG1pbnVzLjFcYmFzZWxpbmVza2lwCisgIFxzaG9ydGNoYXBlbnRyeXt7XGJmICMxfX17XG51bWVyYWxib3h9e317fSUKK30KKwogJSBDaGFwdGVycywgaW4gdGhlIG1haW4gY29udGVudHMuCiBcZGVmXG51bWNoYXBlbnRyeSMxIzIjMyM0e1xkb2NoYXBlbnRyeXsjMlxsYWJlbHNwYWNlIzF9eyM0fX0KICUKQEAgLTQ4MDUsNDUgKzYyMzYsMTIgQEAKIFxtZXNzYWdle2Vudmlyb25tZW50cyx9CiAlIEBmb28gLi4uIEBlbmQgZm9vLgogCi0lIEBwb2ludHt9LCBAcmVzdWx0e30sIEBleHBhbnNpb257fSwgQHByaW50e30sIEBlcXVpdnt9LgotJQotJSBTaW5jZSB0aGVzZSBjaGFyYWN0ZXJzIGFyZSB1c2VkIGluIGV4YW1wbGVzLCBpdCBzaG91bGQgYmUgYW4gZXZlbiBudW1iZXIgb2YKLSUgXHR0IHdpZHRocy4gRWFjaCBcdHQgY2hhcmFjdGVyIGlzIDFlbiwgc28gdHdvIG1ha2VzIGl0IDFlbS4KLSUKLVxkZWZccG9pbnR7JFxzdGFyJH0KLVxkZWZccmVzdWx0e1xsZWF2ZXZtb2RlXHJhaXNlLjE1ZXhcaGJveCB0byAxZW17XGhmaWwkXFJpZ2h0YXJyb3ckXGhmaWx9fQotXGRlZlxleHBhbnNpb257XGxlYXZldm1vZGVccmFpc2UuMWV4XGhib3ggdG8gMWVte1xoZmlsJFxtYXBzdG8kXGhmaWx9fQotXGRlZlxwcmludHtcbGVhdmV2bW9kZVxsb3dlci4xZXhcaGJveCB0byAxZW17XGhmaWwkXGRhc2h2JFxoZmlsfX0KLVxkZWZcZXF1aXZ7XGxlYXZldm1vZGVcbG93ZXIuMWV4XGhib3ggdG8gMWVte1xoZmlsJFxwdGV4ZXF1aXYkXGhmaWx9fQotCi0lIFRoZSBAZXJyb3J7fSBjb21tYW5kLgotJSBBZGFwdGVkIGZyb20gdGhlIFRlWGJvb2sncyBcYm94aXQuCi0lCi1cbmV3Ym94XGVycm9yYm94Ci0lCi17XHRlbnR0IFxnbG9iYWxcZGltZW4wID0gM2VtfSUgV2lkdGggb2YgdGhlIGJveC4KLVxkaW1lbjIgPSAuNTVwdCAlIFRoaWNrbmVzcyBvZiBydWxlcwotJSBUaGUgdGV4dC4gKGByJyBpcyBvcGVuIG9uIHRoZSByaWdodCwgYGUnIHNvbWV3aGF0IGxlc3Mgc28gb24gdGhlIGxlZnQuKQotXHNldGJveDAgPSBcaGJveHtca2Vybi0uNzVwdCBcdGVuc2YgZXJyb3Jca2Vybi0xLjVwdH0KLSUKLVxzZXRib3hcZXJyb3Jib3g9XGhib3ggdG8gXGRpbWVuMHtcaGZpbAotICAgXGhzaXplID0gXGRpbWVuMCBcYWR2YW5jZVxoc2l6ZSBieSAtNS44cHQgJSBTcGFjZSB0byBsZWZ0K3JpZ2h0LgotICAgXGFkdmFuY2VcaHNpemUgYnkgLTJcZGltZW4yICUgUnVsZXMuCi0gICBcdmJveHslCi0gICAgICBcaHJ1bGUgaGVpZ2h0XGRpbWVuMgotICAgICAgXGhib3h7XHZydWxlIHdpZHRoXGRpbWVuMiBca2VybjNwdCAgICAgICAgICAlIFNwYWNlIHRvIGxlZnQgb2YgdGV4dC4KLSAgICAgICAgIFx2dG9we1xrZXJuMi40cHQgXGJveDAgXGtlcm4yLjRwdH0lIFNwYWNlIGFib3ZlL2JlbG93LgotICAgICAgICAgXGtlcm4zcHRcdnJ1bGUgd2lkdGhcZGltZW4yfSUgU3BhY2UgdG8gcmlnaHQuCi0gICAgICBcaHJ1bGUgaGVpZ2h0XGRpbWVuMn0KLSAgICBcaGZpbH0KLSUKLVxkZWZcZXJyb3J7XGxlYXZldm1vZGVcbG93ZXIuN2V4XGNvcHlcZXJyb3Jib3h9Ci0KLSUgQHRleCAuLi4gQGVuZCB0ZXggICAgZXNjYXBlcyBpbnRvIHJhdyBUZXggdGVtcG9yYXJpbHkuCislIEB0ZXggLi4uIEBlbmQgdGV4ICAgIGVzY2FwZXMgaW50byByYXcgVGVYIHRlbXBvcmFyaWx5LgogJSBPbmUgZXhjZXB0aW9uOiBAIGlzIHN0aWxsIGFuIGVzY2FwZSBjaGFyYWN0ZXIsIHNvIHRoYXQgQGVuZCB0ZXggd29ya3MuCi0lIEJ1dCBcQCBvciBAQCB3aWxsIGdldCBhIHBsYWluIHRleCBAIGNoYXJhY3Rlci4KKyUgQnV0IFxAIG9yIEBAIHdpbGwgZ2V0IGEgcGxhaW4gQCBjaGFyYWN0ZXIuCiAKIFxlbnZkZWZcdGV4eyUKKyAgXHNldHVwbWFya3Vwc3R5bGV7dGV4fSUKICAgXGNhdGNvZGUgYFxcPTAgXGNhdGNvZGUgYFx7PTEgXGNhdGNvZGUgYFx9PTIKICAgXGNhdGNvZGUgYFwkPTMgXGNhdGNvZGUgYFwmPTQgXGNhdGNvZGUgYFwjPTYKICAgXGNhdGNvZGUgYFxePTcgXGNhdGNvZGUgYFxfPTggXGNhdGNvZGUgYFx+PVxhY3RpdmUgXGxldH49XHRpZQpAQCAtNDg1Myw4ICs2MjUxLDE0IEBACiAgIFxjYXRjb2RlIGBcfD1cb3RoZXIKICAgXGNhdGNvZGUgYFw8PVxvdGhlcgogICBcY2F0Y29kZSBgXD49XG90aGVyCisgIFxjYXRjb2RlYFxgPVxvdGhlcgorICBcY2F0Y29kZWBcJz1cb3RoZXIKICAgXGVzY2FwZWNoYXI9YFxcCiAgICUKKyAgJSAnIGlzIGFjdGl2ZSBpbiBtYXRoIG1vZGUgKG1hdGhjb2RlIjgwMDApLiAgU28gcmVzZXQgaXQsIGFuZCBhbGwgb3VyCisgICUgb3RoZXIgbWF0aCBhY3RpdmUgY2hhcmFjdGVycyAoanVzdCBpbiBjYXNlKSwgdG8gcGxhaW4ncyBkZWZpbml0aW9ucy4KKyAgXG1hdGhhY3RpdmUKKyAgJQogICBcbGV0XGI9XHB0ZXhiCiAgIFxsZXRcYnVsbGV0PVxwdGV4YnVsbGV0CiAgIFxsZXRcYz1ccHRleGMKQEAgLTQ4NzIsNiArNjI3Niw3IEBACiAgIFxsZXRcLz1ccHRleHNsYXNoCiAgIFxsZXRcKj1ccHRleHN0YXIKICAgXGxldFx0PVxwdGV4dAorICBcZXhwYW5kYWZ0ZXIgXGxldFxjc25hbWUgdG9wXGVuZGNzbmFtZT1ccHRleHRvcCAgJSBvdXRlcgogICBcbGV0XGZyZW5jaHNwYWNpbmc9XHBsYWluZnJlbmNoc3BhY2luZwogICAlCiAgIFxkZWZcZW5kbGRvdHN7XG1hdGhpbm5lcntcbGRvdHNcbGRvdHNcbGRvdHNcbGRvdHN9fSUKQEAgLTQ5NTcsNiArNjM2MiwxMiBAQAogICBcbm9ybWJza2lwPVxiYXNlbGluZXNraXAgXG5vcm1wc2tpcD1ccGFyc2tpcCBcbm9ybWxza2lwPVxsaW5lc2tpcAogICAlIEZsYWcgdG8gdGVsbCBAbGlzcCwgZXRjLiwgbm90IHRvIG5hcnJvdyBtYXJnaW4uCiAgIFxsZXRcbm9uYXJyb3dpbmcgPSB0JQorICAlCisgICUgSWYgdGhpcyBjYXJ0b3VjaGUgZGlyZWN0bHkgZm9sbG93cyBhIHNlY3Rpb25pbmcgY29tbWFuZCwgd2UgbmVlZCB0aGUKKyAgJSBccGFyc2tpcCBnbHVlIChiYWNrc3BhY2VkIG92ZXIgYnkgZGVmYXVsdCkgb3IgdGhlIGNhcnRvdWNoZSBjYW4KKyAgJSBjb2xsaWRlIHdpdGggdGhlIHNlY3Rpb24gaGVhZGluZy4KKyAgXGlmbnVtXGxhc3RwZW5hbHR5PjEwMDAwIFx2c2tpcFxwYXJza2lwIFxwZW5hbHR5XGxhc3RwZW5hbHR5IFxmaQorICAlCiAgIFx2Ym94XGJncm91cAogICAgICAgXGJhc2VsaW5lc2tpcD0wcHRccGFyc2tpcD0wcHRcbGluZXNraXA9MHB0CiAgICAgICBcY2FydHRvcApAQCAtNDk3MCw3ICs2MzgxLDcgQEAKIAkgICAgICBcbGluZXNraXA9XG5vcm1sc2tpcAogCSAgICAgIFxwYXJza2lwPVxub3JtcHNraXAKIAkgICAgICBcdnNraXAgLVxwYXJza2lwCi0JICAgICAgXGNvbW1lbnQgJSBGb3IgZXhwbGFuYXRpb24sIHNlZSB0aGUgZW5kIG9mIFxkZWZcZ3JvdXAuCisJICAgICAgXGNvbW1lbnQgJSBGb3IgZXhwbGFuYXRpb24sIHNlZSB0aGUgZW5kIG9mIGRlZlxncm91cC4KIH0KIFxkZWZcRWNhcnRvdWNoZXslCiAgICAgICAgICAgICAgIFxpZmhtb2RlXHBhclxmaQpAQCAtNDk4Nyw2ICs2Mzk4LDcgQEAKIAogJSBUaGlzIG1hY3JvIGlzIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGFsbCB0aGUgQGV4YW1wbGUgdmFyaWFudHMsCiAlIGluc2lkZSBhIGdyb3VwLgorXG5ld2RpbWVuXG5vbmZpbGxwYXJpbmRlbnQKIFxkZWZcbm9uZmlsbHN0YXJ0eyUKICAgXGFib3ZlZW52YnJlYWsKICAgXGhmdXp6ID0gMTJwdCAlIERvbid0IGJlIGZ1c3N5CkBAIC00OTk0LDcgKzY0MDYsMTIgQEAKICAgXGxldFxwYXIgPSBcbGlzcHBhciAlIGRvbid0IGlnbm9yZSBibGFuayBsaW5lcwogICBcb2JleWxpbmVzICUgZWFjaCBsaW5lIG9mIGlucHV0IGlzIGEgbGluZSBvZiBvdXRwdXQKICAgXHBhcnNraXAgPSAwcHQKKyAgJSBUdXJuIG9mZiBwYXJhZ3JhcGggaW5kZW50YXRpb24gYnV0IHJlZGVmaW5lIFxpbmRlbnQgdG8gZW11bGF0ZQorICAlIHRoZSBub3JtYWwgXGluZGVudC4KKyAgXG5vbmZpbGxwYXJpbmRlbnQ9XHBhcmluZGVudAogICBccGFyaW5kZW50ID0gMHB0CisgIFxsZXRcaW5kZW50XG5vbmZpbGxpbmRlbnQKKyAgJQogICBcZW1lcmdlbmN5c3RyZXRjaCA9IDBwdCAlIGRvbid0IHRyeSB0byBhdm9pZCBvdmVyZnVsbCBib3hlcwogICBcaWZ4XG5vbmFycm93aW5nXHJlbGF4CiAgICAgXGFkdmFuY2UgXGxlZnRza2lwIGJ5IFxsaXNwbmFycm93aW5nCkBAIC01MDA1LDYgKzY0MjIsMjQgQEAKICAgXGxldFxleGRlbnQ9XG5vZmlsbGV4ZGVudAogfQogCitcYmVnaW5ncm91cAorXG9iZXlzcGFjZXMKKyUgV2Ugd2FudCB0byBzd2FsbG93IHNwYWNlcyAoYnV0IG5vdCBvdGhlciB0b2tlbnMpIGFmdGVyIHRoZSBmYWtlCislIEBpbmRlbnQgaW4gb3VyIG5vbmZpbGwtZW52aXJvbm1lbnRzLCB3aGVyZSBzcGFjZXMgYXJlIG5vcm1hbGx5CislIGFjdGl2ZSBhbmQgc2V0IHRvIEB0aWUsIHJlc3VsdGluZyBpbiB0aGVtIG5vdCBiZWluZyBpZ25vcmVkIGFmdGVyCislIEBpbmRlbnQuCitcZ2RlZlxub25maWxsaW5kZW50e1xmdXR1cmVsZXRcdGVtcFxub25maWxsaW5kZW50Y2hlY2t9JQorXGdkZWZcbm9uZmlsbGluZGVudGNoZWNreyUKK1xpZnhcdGVtcCAlCitcZXhwYW5kYWZ0ZXJcbm9uZmlsbGluZGVudGdvYmJsZSUKK1xlbHNlJQorXGxlYXZldm1vZGVcbm9uZmlsbGluZGVudGJveCUKK1xmaSUKK30lCitcZW5kZ3JvdXAKK1xkZWZcbm9uZmlsbGluZGVudGdvYmJsZSMxe1xub25maWxsaW5kZW50fQorXGRlZlxub25maWxsaW5kZW50Ym94e1xoYm94IHRvIFxub25maWxscGFyaW5kZW50e1xoc3N9fQorCiAlIElmIHlvdSB3YW50IGFsbCBleGFtcGxlcyBldGMuIHNtYWxsOiBAc2V0IGRpc3BlbnZzaXplIHNtYWxsLgogJSBJZiB5b3Ugd2FudCBldmVuIHNtYWxsIGV4YW1wbGVzIHRoZSBmdWxsIHNpemU6IEBzZXQgZGlzcGVudnNpemUgbm9zbWFsbC4KICUgVGhpcyBhZmZlY3RzIHRoZSBmb2xsb3dpbmcgZGlzcGxheWVkIGVudmlyb25tZW50czoKQEAgLTUwMTUsNTMgKzY0NTAsNTkgQEAKIFxsZXRcU0VUZGlzcGVudnNpemVccmVsYXgKIFxkZWZcc2V0bm9ybWFsZGlzcGVudnslCiAgIFxpZnhcU0VUZGlzcGVudnNpemVcc21hbGx3b3JkCisgICAgJSBlbmQgcGFyYWdyYXBoIGZvciBzYWtlIG9mIGxlYWRpbmcsIGluIGNhc2UgZG9jdW1lbnQgaGFzIG5vIGJsYW5rCisgICAgJSBsaW5lLiAgVGhpcyBpcyByZWR1bmRhbnQgd2l0aCB3aGF0IGhhcHBlbnMgaW4gXGFib3ZlZW52YnJlYWssIGJ1dAorICAgICUgd2UgbmVlZCB0byBkbyBpdCBiZWZvcmUgY2hhbmdpbmcgdGhlIGZvbnRzLCBhbmQgaXQncyBpbmNvbnZlbmllbnQKKyAgICAlIHRvIGNoYW5nZSB0aGUgZm9udHMgYWZ0ZXJ3YXJkLgorICAgIFxpZm51bSBcbGFzdHBlbmFsdHk9MTAwMDAgXGVsc2UgXGVuZGdyYWYgXGZpCiAgICAgXHNtYWxsZXhhbXBsZWZvbnRzIFxybQogICBcZmkKIH0KIFxkZWZcc2V0c21hbGxkaXNwZW52eyUKICAgXGlmeFxTRVRkaXNwZW52c2l6ZVxub3NtYWxsd29yZAogICBcZWxzZQorICAgIFxpZm51bSBcbGFzdHBlbmFsdHk9MTAwMDAgXGVsc2UgXGVuZGdyYWYgXGZpCiAgICAgXHNtYWxsZXhhbXBsZWZvbnRzIFxybQogICBcZmkKIH0KIAogJSBXZSBvZnRlbiBkZWZpbmUgdHdvIGVudmlyb25tZW50cywgQGZvbyBhbmQgQHNtYWxsZm9vLgotJSBMZXQncyBkbyBpdCBieSBvbmUgY29tbWFuZDoKLVxkZWZcbWFrZWRpc3BlbnYgIzEjMnsKLSAgXGV4cGFuZGFmdGVyXGVudmRlZlxjc25hbWUjMVxlbmRjc25hbWUge1xzZXRub3JtYWxkaXNwZW52ICMyfQotICBcZXhwYW5kYWZ0ZXJcZW52ZGVmXGNzbmFtZSBzbWFsbCMxXGVuZGNzbmFtZSB7XHNldHNtYWxsZGlzcGVudiAjMn0KKyUgTGV0J3MgZG8gaXQgaW4gb25lIGNvbW1hbmQuICAjMSBpcyB0aGUgZW52IG5hbWUsICMyIHRoZSBkZWZpbml0aW9uLgorXGRlZlxtYWtlZGlzcGVudmRlZiMxIzJ7JQorICBcZXhwYW5kYWZ0ZXJcZW52ZGVmXGNzbmFtZSMxXGVuZGNzbmFtZSB7XHNldG5vcm1hbGRpc3BlbnYgIzJ9JQorICBcZXhwYW5kYWZ0ZXJcZW52ZGVmXGNzbmFtZSBzbWFsbCMxXGVuZGNzbmFtZSB7XHNldHNtYWxsZGlzcGVudiAjMn0lCiAgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIEUjMVxlbmRjc25hbWUgXGFmdGVyZW52YnJlYWsKICAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgRXNtYWxsIzFcZW5kY3NuYW1lIFxhZnRlcmVudmJyZWFrCiB9CiAKLSUgRGVmaW5lIHR3byBzeW5vbnltczoKLVxkZWZcbWFrZXR3b2Rpc3BlbnZzICMxIzIjM3sKLSAgXG1ha2VkaXNwZW52eyMxfXsjM30KLSAgXG1ha2VkaXNwZW52eyMyfXsjM30KKyUgRGVmaW5lIHR3byBlbnZpcm9ubWVudCBzeW5vbnltcyAoIzEgYW5kICMyKSBmb3IgYW4gZW52aXJvbm1lbnQuCitcZGVmXG1ha2V0d29kaXNwZW52ZGVmIzEjMiMzeyUKKyAgXG1ha2VkaXNwZW52ZGVmeyMxfXsjM30lCisgIFxtYWtlZGlzcGVudmRlZnsjMn17IzN9JQogfQotCi0lIEBsaXNwOiBpbmRlbnRlZCwgbmFycm93ZWQsIHR5cGV3cml0ZXIgZm9udDsgQGV4YW1wbGU6IHNhbWUgYXMgQGxpc3AuCislCislIEBsaXNwOiBpbmRlbnRlZCwgbmFycm93ZWQsIHR5cGV3cml0ZXIgZm9udDsKKyUgQGV4YW1wbGU6IHNhbWUgYXMgQGxpc3AuCiAlCiAlIEBzbWFsbGV4YW1wbGUgYW5kIEBzbWFsbGxpc3A6IHVzZSBzbWFsbGVyIGZvbnRzLgogJSBPcmlnaW5hbGx5IGNvbnRyaWJ1dGVkIGJ5IFBhdmVsQHhlcm94LgogJQotXG1ha2V0d29kaXNwZW52cyB7bGlzcH17ZXhhbXBsZX17JQorXG1ha2V0d29kaXNwZW52ZGVme2xpc3B9e2V4YW1wbGV9eyUKICAgXG5vbmZpbGxzdGFydAotICBcdHQKKyAgXHR0XHNldHVwbWFya3Vwc3R5bGV7ZXhhbXBsZX0lCiAgIFxsZXRca2JkZm9udCA9IFxrYmRleGFtcGxlZm9udCAlIEFsbG93IEBrYmQgdG8gZG8gc29tZXRoaW5nIHNwZWNpYWwuCi0gIFxnb2JibGUgICAgICAgJSBlYXQgcmV0dXJuCisgIFxnb2JibGUgJSBlYXQgcmV0dXJuCiB9Ci0KICUgQGRpc3BsYXkvQHNtYWxsZGlzcGxheTogc2FtZSBhcyBAbGlzcCBleGNlcHQga2VlcCBjdXJyZW50IGZvbnQuCiAlCi1cbWFrZWRpc3BlbnYge2Rpc3BsYXl9eyUKK1xtYWtlZGlzcGVudmRlZntkaXNwbGF5fXslCiAgIFxub25maWxsc3RhcnQKICAgXGdvYmJsZQogfQogCiAlIEBmb3JtYXQvQHNtYWxsZm9ybWF0OiBzYW1lIGFzIEBkaXNwbGF5IGV4Y2VwdCBkb24ndCBuYXJyb3cgbWFyZ2lucy4KICUKLVxtYWtlZGlzcGVudntmb3JtYXR9eyUKK1xtYWtlZGlzcGVudmRlZntmb3JtYXR9eyUKICAgXGxldFxub25hcnJvd2luZyA9IHQlCiAgIFxub25maWxsc3RhcnQKICAgXGdvYmJsZQpAQCAtNTA4MCwyOCArNjUyMSw0NyBAQAogXGVudmRlZlxmbHVzaHJpZ2h0eyUKICAgXGxldFxub25hcnJvd2luZyA9IHQlCiAgIFxub25maWxsc3RhcnQKLSAgXGFkdmFuY2VcbGVmdHNraXAgYnkgMHB0IHBsdXMgMWZpbGwKKyAgXGFkdmFuY2VcbGVmdHNraXAgYnkgMHB0IHBsdXMgMWZpbGxccmVsYXgKICAgXGdvYmJsZQogfQogXGxldFxFZmx1c2hyaWdodCA9IFxhZnRlcmVudmJyZWFrCiAKIAorJSBAcmFnZ2VkcmlnaHQgZG9lcyBtb3JlLW9yLWxlc3Mgbm9ybWFsIGxpbmUgYnJlYWtpbmcgYnV0IG5vIHJpZ2h0CislIGp1c3RpZmljYXRpb24uICBGcm9tIHBsYWluLnRleC4KK1xlbnZkZWZccmFnZ2VkcmlnaHR7JQorICBccmlnaHRza2lwMHB0IHBsdXMyZW0gXHNwYWNlc2tpcC4zMzMzZW0gXHhzcGFjZXNraXAuNWVtXHJlbGF4Cit9CitcbGV0XEVyYWdnZWRyaWdodFxwYXIKKworXGVudmRlZlxyYWdnZWRsZWZ0eyUKKyAgXHBhcmluZGVudD0wcHQgXGxlZnRza2lwMHB0IHBsdXMyZW0KKyAgXHNwYWNlc2tpcC4zMzMzZW0gXHhzcGFjZXNraXAuNWVtIFxwYXJmaWxsc2tpcD0wcHQKKyAgXGhiYWRuZXNzPTEwMDAwICUgTGFzdCBsaW5lIHdpbGwgdXN1YWxseSBiZSB1bmRlcmZ1bGwsIHNvIHR1cm4gb2ZmCisgICAgICAgICAgICAgICAgICAlIGJhZG5lc3MgcmVwb3J0aW5nLgorfQorXGxldFxFcmFnZ2VkbGVmdFxwYXIKKworXGVudmRlZlxyYWdnZWRjZW50ZXJ7JQorICBccGFyaW5kZW50PTBwdCBccmlnaHRza2lwMHB0IHBsdXMxZW0gXGxlZnRza2lwMHB0IHBsdXMxZW0KKyAgXHNwYWNlc2tpcC4zMzMzZW0gXHhzcGFjZXNraXAuNWVtIFxwYXJmaWxsc2tpcD0wcHQKKyAgXGhiYWRuZXNzPTEwMDAwICUgTGFzdCBsaW5lIHdpbGwgdXN1YWxseSBiZSB1bmRlcmZ1bGwsIHNvIHR1cm4gb2ZmCisgICAgICAgICAgICAgICAgICAlIGJhZG5lc3MgcmVwb3J0aW5nLgorfQorXGxldFxFcmFnZ2VkY2VudGVyXHBhcgorCisKICUgQHF1b3RhdGlvbiBkb2VzIG5vcm1hbCBsaW5lYnJlYWtpbmcgKGhlbmNlIHdlIGNhbid0IHVzZSBcbm9uZmlsbHN0YXJ0KQogJSBhbmQgbmFycm93cyB0aGUgbWFyZ2lucy4gIFdlIGtlZXAgXHBhcnNraXAgbm9uemVybyBpbiBnZW5lcmFsLCBzaW5jZQogJSB3ZSdyZSBkb2luZyBub3JtYWwgZmlsbGluZy4gIFNvLCB3aGVuIHVzaW5nIFxhYm92ZWVudmJyZWFrIGFuZAogJSBcYWZ0ZXJlbnZicmVhaywgdGVtcG9yYXJpbHkgbWFrZSBccGFyc2tpcCAwLgogJQotXGVudmRlZlxxdW90YXRpb257JQotICB7XHBhcnNraXA9MHB0IFxhYm92ZWVudmJyZWFrfSUgYmVjYXVzZSBcYWJvdmVlbnZicmVhayBpbnNlcnRzIFxwYXJza2lwCi0gIFxwYXJpbmRlbnQ9MHB0Ci0gICUKLSAgJSBAY2FydG91Y2hlIGRlZmluZXMgXG5vbmFycm93aW5nIHRvIGluaGliaXQgbmFycm93aW5nIGF0IG5leHQgbGV2ZWwgZG93bi4KK1xtYWtlZGlzcGVudmRlZntxdW90YXRpb259e1xxdW90YXRpb25zdGFydH0KKyUKK1xkZWZccXVvdGF0aW9uc3RhcnR7JQorICBcaW5kZW50ZWRibG9ja3N0YXJ0ICUgc2FtZSBhcyBcaW5kZW50ZWRibG9jaywgYnV0IGluY3JlYXNlIHJpZ2h0IG1hcmdpbiB0b28uCiAgIFxpZnhcbm9uYXJyb3dpbmdccmVsYXgKLSAgICBcYWR2YW5jZVxsZWZ0c2tpcCBieSBcbGlzcG5hcnJvd2luZwogICAgIFxhZHZhbmNlXHJpZ2h0c2tpcCBieSBcbGlzcG5hcnJvd2luZwotICAgIFxleGRlbnRhbW91bnQgPSBcbGlzcG5hcnJvd2luZwotICBcZWxzZQotICAgIFxsZXRcbm9uYXJyb3dpbmcgPSBccmVsYXgKICAgXGZpCiAgIFxwYXJzZWFyZ1xxdW90YXRpb25sYWJlbAogfQpAQCAtNTExMSwxMiArNjU3MSwxMyBAQAogJQogXGRlZlxFcXVvdGF0aW9ueyUKICAgXHBhcgotICBcaWZ4XHF1b3RhdGlvbmF1dGhvclx1bmRlZmluZWRcZWxzZQorICBcaWZ4XHF1b3RhdGlvbmF1dGhvclx0aGlzaXN1bmRlZmluZWRcZWxzZQogICAgICUgaW5kZW50IGEgYml0LgogICAgIFxsZWZ0bGluZXtca2VybiAyXGxlZnRza2lwIFxzbCAtLS1ccXVvdGF0aW9uYXV0aG9yfSUKICAgXGZpCiAgIHtccGFyc2tpcD0wcHQgXGFmdGVyZW52YnJlYWt9JQogfQorXGRlZlxFc21hbGxxdW90YXRpb257XEVxdW90YXRpb259CiAKICUgSWYgd2UncmUgZ2l2ZW4gYW4gYXJndW1lbnQsIHR5cGVzZXQgaXQgaW4gYm9sZCB3aXRoIGEgY29sb24gYWZ0ZXIuCiBcZGVmXHF1b3RhdGlvbmxhYmVsIzF7JQpAQCAtNTEyNiw2ICs2NTg3LDMyIEBACiAgIFxmaQogfQogCislIEBpbmRlbnRlZGJsb2NrIGlzIGxpa2UgQHF1b3RhdGlvbiwgYnV0IGluZGVudHMgb25seSBvbiB0aGUgbGVmdCBhbmQKKyUgaGFzIG5vIG9wdGlvbmFsIGFyZ3VtZW50LgorJSAKK1xtYWtlZGlzcGVudmRlZntpbmRlbnRlZGJsb2NrfXtcaW5kZW50ZWRibG9ja3N0YXJ0fQorJQorXGRlZlxpbmRlbnRlZGJsb2Nrc3RhcnR7JQorICB7XHBhcnNraXA9MHB0IFxhYm92ZWVudmJyZWFrfSUgYmVjYXVzZSBcYWJvdmVlbnZicmVhayBpbnNlcnRzIFxwYXJza2lwCisgIFxwYXJpbmRlbnQ9MHB0CisgICUKKyAgJSBAY2FydG91Y2hlIGRlZmluZXMgXG5vbmFycm93aW5nIHRvIGluaGliaXQgbmFycm93aW5nIGF0IG5leHQgbGV2ZWwgZG93bi4KKyAgXGlmeFxub25hcnJvd2luZ1xyZWxheAorICAgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IFxsaXNwbmFycm93aW5nCisgICAgXGV4ZGVudGFtb3VudCA9IFxsaXNwbmFycm93aW5nCisgIFxlbHNlCisgICAgXGxldFxub25hcnJvd2luZyA9IFxyZWxheAorICBcZmkKK30KKworJSBLZWVwIGEgbm9uemVybyBwYXJza2lwIGZvciB0aGUgZW52aXJvbm1lbnQsIHNpbmNlIHdlJ3JlIGRvaW5nIG5vcm1hbCBmaWxsaW5nLgorJQorXGRlZlxFaW5kZW50ZWRibG9ja3slCisgIFxwYXIKKyAge1xwYXJza2lwPTBwdCBcYWZ0ZXJlbnZicmVha30lCit9CitcZGVmXEVzbWFsbGluZGVudGVkYmxvY2t7XEVpbmRlbnRlZGJsb2NrfQorCiAKICUgTGFUZVgtbGlrZSBAdmVyYmF0aW0uLi5AZW5kIHZlcmJhdGltIGFuZCBAdmVyYns8Y2hhcj4uLi48Y2hhcj59CiAlIElmIHdlIHdhbnQgdG8gYWxsb3cgYW55IDxjaGFyPiBhcyBkZWxpbWl0ZXIsCkBAIC01MTQxLDE4ICs2NjI4LDE2IEBACiAgIFxkb1wgXGRvXFxcZG9ce1xkb1x9XGRvXCRcZG9cJiUKICAgXGRvXCNcZG9cXlxkb1xeXktcZG9cX1xkb1xeXkFcZG9cJVxkb1x+JQogICBcZG9cPFxkb1w+XGRvXHxcZG9cQFxkbytcZG9cIiUKKyAgJSBEb24ndCBkbyB0aGUgcXVvdGVzIC0tIGlmIHdlIGRvLCBAc2V0IHR4aWNvZGVxdW90ZXVuZGlyZWN0ZWQgYW5kCisgICUgQHNldCB0eGljb2RlcXVvdGViYWNrdGljayB3aWxsIG5vdCBoYXZlIGVmZmVjdCBvbiBAdmVyYiBhbmQKKyAgJSBAdmVyYmF0aW0sIGFuZCA/YCBhbmQgIWAgbGlnYXR1cmVzIHdvbid0IGdldCBkaXNhYmxlZC4KKyAgJVxkb1xgXGRvXCclCiB9CiAlCiAlIFtLbnV0aF0gcC4gMzgwCiBcZGVmXHVuY2F0Y29kZXNwZWNpYWxzeyUKICAgXGRlZlxkbyMjMXtcY2F0Y29kZWAjIzE9XG90aGVyfVxkb3NwZWNpYWxzfQogJQotJSBbS251dGhdIHBwLiAzODAsMzgxLDM5MQotJSBEaXNhYmxlIFNwYW5pc2ggbGlnYXR1cmVzID9gIGFuZCAhYCBvZiBcdHQgZm9udAotXGJlZ2luZ3JvdXAKLSAgXGNhdGNvZGVgXGA9XGFjdGl2ZVxnZGVmYHtccmVsYXhcbHF9Ci1cZW5kZ3JvdXAKLSUKICUgU2V0dXAgZm9yIHRoZSBAdmVyYiBjb21tYW5kLgogJQogJSBFaWdodCBzcGFjZXMgZm9yIGEgdGFiCkBAIC01MTY0LDcgKzY2NDksNyBAQAogXGRlZlxzZXR1cHZlcmJ7JQogICBcdHQgICUgZWFzaWVzdCAoYW5kIGNvbnZlbnRpb25hbGx5IHVzZWQpIGZvbnQgZm9yIHZlcmJhdGltCiAgIFxkZWZccGFye1xsZWF2ZXZtb2RlXGVuZGdyYWZ9JQotICBcY2F0Y29kZWBcYD1cYWN0aXZlCisgIFxzZXR1cG1hcmt1cHN0eWxle3ZlcmJ9JQogICBcdGFiZWlnaHRzcGFjZXMKICAgJSBSZXNwZWN0IGxpbmUgYnJlYWtzLAogICAlIHByaW50IHNwZWNpYWwgc3ltYm9scyBhcyB0aGVtc2VsdmVzLCBhbmQKQEAgLTUxNzUsMzUgKzY2NjAsNDYgQEAKIAogJSBTZXR1cCBmb3IgdGhlIEB2ZXJiYXRpbSBlbnZpcm9ubWVudAogJQotJSBSZWFsIHRhYiBleHBhbnNpb24KKyUgUmVhbCB0YWIgZXhwYW5zaW9uLgogXG5ld2RpbWVuXHRhYncgXHNldGJveDA9XGhib3h7XHR0XHNwYWNlfSBcdGFidz04XHdkMCAlIHRhYiBhbW91bnQKICUKLVxkZWZcc3RhcnR0YWJib3h7XHNldGJveDA9XGhib3hcYmdyb3VwfQorJSBXZSB0eXBlc2V0IGVhY2ggbGluZSBvZiB0aGUgdmVyYmF0aW0gaW4gYW4gXGhib3gsIHNvIHdlIGNhbiBoYW5kbGUKKyUgdGFicy4gIFRoZSBcZ2xvYmFsIGlzIGluIGNhc2UgdGhlIHZlcmJhdGltIGxpbmUgc3RhcnRzIHdpdGggYW4gYWNjZW50LAorJSBvciBzb21lIG90aGVyIGNvbW1hbmQgdGhhdCBzdGFydHMgd2l0aCBhIGJlZ2luLWdyb3VwLiAgT3RoZXJ3aXNlLCB0aGUKKyUgZW50aXJlIFx2ZXJiYm94IHdvdWxkIGRpc2FwcGVhciBhdCB0aGUgY29ycmVzcG9uZGluZyBlbmQtZ3JvdXAsIGJlZm9yZQorJSBpdCBpcyB0eXBlc2V0LiAgTWVhbndoaWxlLCB3ZSBjYW4ndCBoYXZlIG5lc3RlZCB2ZXJiYXRpbSBjb21tYW5kcworJSAoY2FuIHdlPyksIHNvIHRoZSBcZ2xvYmFsIHdvbid0IGJlIG92ZXJ3cml0aW5nIGl0c2VsZi4KK1xuZXdib3hcdmVyYmJveAorXGRlZlxzdGFydHRhYmJveHtcZ2xvYmFsXHNldGJveFx2ZXJiYm94PVxoYm94XGJncm91cH0KKyUKIFxiZWdpbmdyb3VwCiAgIFxjYXRjb2RlYFxeXkk9XGFjdGl2ZQogICBcZ2RlZlx0YWJleHBhbmR7JQogICAgIFxjYXRjb2RlYFxeXkk9XGFjdGl2ZQogICAgIFxkZWZeXkl7XGxlYXZldm1vZGVcZWdyb3VwCi0gICAgICBcZGltZW4wPVx3ZDAgJSB0aGUgd2lkdGggc28gZmFyLCBvciBzaW5jZSB0aGUgcHJldmlvdXMgdGFiCi0gICAgICBcZGl2aWRlXGRpbWVuMCBieVx0YWJ3Ci0gICAgICBcbXVsdGlwbHlcZGltZW4wIGJ5XHRhYncgJSBjb21wdXRlIHByZXZpb3VzIG11bHRpcGxlIG9mIFx0YWJ3Ci0gICAgICBcYWR2YW5jZVxkaW1lbjAgYnlcdGFidyAgJSBhZHZhbmNlIHRvIG5leHQgbXVsdGlwbGUgb2YgXHRhYncKLSAgICAgIFx3ZDA9XGRpbWVuMCBcYm94MCBcc3RhcnR0YWJib3gKKyAgICAgIFxkaW1lblx2ZXJiYm94PVx3ZFx2ZXJiYm94ICUgdGhlIHdpZHRoIHNvIGZhciwgb3Igc2luY2UgdGhlIHByZXZpb3VzIHRhYgorICAgICAgXGRpdmlkZVxkaW1lblx2ZXJiYm94IGJ5XHRhYncKKyAgICAgIFxtdWx0aXBseVxkaW1lblx2ZXJiYm94IGJ5XHRhYncgJSBjb21wdXRlIHByZXZpb3VzIG11bHRpcGxlIG9mIFx0YWJ3CisgICAgICBcYWR2YW5jZVxkaW1lblx2ZXJiYm94IGJ5XHRhYncgICUgYWR2YW5jZSB0byBuZXh0IG11bHRpcGxlIG9mIFx0YWJ3CisgICAgICBcd2RcdmVyYmJveD1cZGltZW5cdmVyYmJveCBcYm94XHZlcmJib3ggXHN0YXJ0dGFiYm94CiAgICAgfSUKICAgfQogXGVuZGdyb3VwCisKKyUgc3RhcnQgdGhlIHZlcmJhdGltIGVudmlyb25tZW50LgogXGRlZlxzZXR1cHZlcmJhdGlteyUKICAgXGxldFxub25hcnJvd2luZyA9IHQlCiAgIFxub25maWxsc3RhcnQKLSAgJSBFYXNpZXN0IChhbmQgY29udmVudGlvbmFsbHkgdXNlZCkgZm9udCBmb3IgdmVyYmF0aW0KLSAgXHR0Ci0gIFxkZWZccGFye1xsZWF2ZXZtb2RlXGVncm91cFxib3gwXGVuZGdyYWZ9JQotICBcY2F0Y29kZWBcYD1cYWN0aXZlCisgIFx0dCAlIGVhc2llc3QgKGFuZCBjb252ZW50aW9uYWxseSB1c2VkKSBmb250IGZvciB2ZXJiYXRpbQorICAlIFRoZSBcbGVhdmV2bW9kZSBoZXJlIGlzIGZvciBibGFuayBsaW5lcy4gIE90aGVyd2lzZSwgd2Ugd291bGQKKyAgJSBuZXZlciBcc3RhcnR0YWJveCBhbmQgdGhlIFxlZ3JvdXAgd291bGQgZW5kIHZlcmJhdGltIG1vZGUuCisgIFxkZWZccGFye1xsZWF2ZXZtb2RlXGVncm91cFxib3hcdmVyYmJveFxlbmRncmFmfSUKICAgXHRhYmV4cGFuZAorICBcc2V0dXBtYXJrdXBzdHlsZXt2ZXJiYXRpbX0lCiAgICUgUmVzcGVjdCBsaW5lIGJyZWFrcywKICAgJSBwcmludCBzcGVjaWFsIHN5bWJvbHMgYXMgdGhlbXNlbHZlcywgYW5kCi0gICUgbWFrZSBlYWNoIHNwYWNlIGNvdW50Ci0gICUgbXVzdCBkbyBpbiB0aGlzIG9yZGVyOgorICAlIG1ha2UgZWFjaCBzcGFjZSBjb3VudC4KKyAgJSBNdXN0IGRvIGluIHRoaXMgb3JkZXI6CiAgIFxvYmV5bGluZXMgXHVuY2F0Y29kZXNwZWNpYWxzIFxzZXBzcGFjZXMKICAgXGV2ZXJ5cGFye1xzdGFydHRhYmJveH0lCiB9CkBAIC01MjU5LDYgKzY3NTUsOCBAQAogICB7JQogICAgIFxtYWtldmFsdWVleHBhbmRhYmxlCiAgICAgXHNldHVwdmVyYmF0aW0KKyAgICBcaW5kZXhub2ZvbnRzICAgICAgICUgQWxsb3cgYEBAJyBhbmQgb3RoZXIgd2VpcmQgdGhpbmdzIGluIGZpbGUgbmFtZXMuCisgICAgXHdsb2d7dGV4aW5mby50ZXg6IGRvaW5nIEB2ZXJiYXRpbWluY2x1ZGUgb2YgIzFeXkp9JQogICAgIFxpbnB1dCAjMQogICAgIFxhZnRlcmVudmJyZWFrCiAgIH0lCkBAIC01Mjg0LDI3ICs2NzgyLDM1IEBACiAgIFxlbmRncm91cAogfQogCisKIFxtZXNzYWdle2RlZnVucyx9CiAlIEBkZWZ1biBldGMuCiAKIFxuZXdza2lwXGRlZmJvZHlpbmRlbnQgXGRlZmJvZHlpbmRlbnQ9LjRpbgogXG5ld3NraXBcZGVmYXJnc2luZGVudCBcZGVmYXJnc2luZGVudD01MHB0CiBcbmV3c2tpcFxkZWZsYXN0YXJnbWFyZ2luIFxkZWZsYXN0YXJnbWFyZ2luPTE4cHQKK1xuZXdjb3VudFxkZWZ1bnBlbmFsdHkKIAogJSBTdGFydCB0aGUgcHJvY2Vzc2luZyBvZiBAZGVmZm46CiBcZGVmXHN0YXJ0ZGVmdW57JQogICBcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDAKICAgICBcbWVkYnJlYWsKKyAgICBcZGVmdW5wZW5hbHR5PTEwMDAzICUgV2lsbCBrZWVwIHRoaXMgQGRlZmZuIHRvZ2V0aGVyIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAlIGZvbGxvd2luZyBAZGVmIGNvbW1hbmQsIHNlZSBiZWxvdy4KICAgXGVsc2UKICAgICAlIElmIHRoZXJlIGFyZSB0d28gQGRlZiBjb21tYW5kcyBpbiBhIHJvdywgd2UnbGwgaGF2ZSBhIFxub2JyZWFrLAogICAgICUgd2hpY2ggaXMgdGhlcmUgdG8ga2VlcCB0aGUgZnVuY3Rpb24gZGVzY3JpcHRpb24gdG9nZXRoZXIgd2l0aCBpdHMKICAgICAlIGhlYWRlci4gIEJ1dCBpZiB0aGVyZSdzIG5vdGhpbmcgYnV0IGhlYWRlcnMsIHdlIG5lZWQgdG8gYWxsb3cgYQogICAgICUgYnJlYWsgc29tZXdoZXJlLiAgQ2hlY2sgc3BlY2lmaWNhbGx5IGZvciBwZW5hbHR5IDEwMDAyLCBpbnNlcnRlZAotICAgICUgYnkgXGRlZmFyZ3Njb21tb25lbmRpbmcsIGluc3RlYWQgb2YgMTAwMDAsIHNpbmNlIHRoZSBzZWN0aW9uaW5nCisgICAgJSBieSBccHJpbnRkZWZ1bmxpbmUsIGluc3RlYWQgb2YgMTAwMDAsIHNpbmNlIHRoZSBzZWN0aW9uaW5nCiAgICAgJSBjb21tYW5kcyBhbHNvIGluc2VydCBhIG5vYnJlYWsgcGVuYWx0eSwgYW5kIHdlIGRvbid0IHdhbnQgdG8gYWxsb3cKICAgICAlIGEgYnJlYWsgYmV0d2VlbiBhIHNlY3Rpb24gaGVhZGluZyBhbmQgYSBkZWZ1bi4KLSAgICAlIAotICAgIFxpZm51bVxsYXN0cGVuYWx0eT0xMDAwMiBccGVuYWx0eTIwMDAgXGZpCisgICAgJQorICAgICUgQXMgYSBmdXJ0aGVyIHJlZmluZW1lbnQsIHdlIGF2b2lkICJjbHViIiBoZWFkZXJzIGJ5IHNpZ25hbGxpbmcKKyAgICAlIHdpdGggcGVuYWx0eSBvZiAxMDAwMyBhZnRlciB0aGUgdmVyeSBmaXJzdCBAZGVmZm4gaW4gdGhlCisgICAgJSBzZXF1ZW5jZSAoc2VlIGFib3ZlKSwgYW5kIHBlbmFsdHkgb2YgMTAwMDIgYWZ0ZXIgYW55IGZvbGxvd2luZworICAgICUgQGRlZiBjb21tYW5kLgorICAgIFxpZm51bVxsYXN0cGVuYWx0eT0xMDAwMiBccGVuYWx0eTIwMDAgXGVsc2UgXGRlZnVucGVuYWx0eT0xMDAwMiBcZmkKICAgICAlCiAgICAgJSBTaW1pbGFybHksIGFmdGVyIGEgc2VjdGlvbiBoZWFkaW5nLCBkbyBub3QgYWxsb3cgYSBicmVhay4KICAgICAlIEJ1dCBkbyBpbnNlcnQgdGhlIGdsdWUuCkBAIC01MzIyLDcgKzY4MjgsNyBAQAogICAlCiAgICUgQXMgYWJvdmUsIGFsbG93IGxpbmUgYnJlYWsgaWYgd2UgaGF2ZSBtdWx0aXBsZSB4IGhlYWRlcnMgaW4gYSByb3cuCiAgICUgSXQncyBub3QgYSBncmVhdCBwbGFjZSwgdGhvdWdoLgotICBcaWZudW1cbGFzdHBlbmFsdHk9MTAwMDIgXHBlbmFsdHkzMDAwIFxmaQorICBcaWZudW1cbGFzdHBlbmFsdHk9MTAwMDIgXHBlbmFsdHkzMDAwIFxlbHNlIFxkZWZ1bnBlbmFsdHk9MTAwMDIgXGZpCiAgICUKICAgJSBBbmQgbm93LCBpdCdzIHRpbWUgdG8gcmV1c2UgdGhlIGJvZHkgb2YgdGhlIG9yaWdpbmFsIGRlZnVuOgogICBcZXhwYW5kYWZ0ZXJcZ29iYmxlZGVmdW4jMSUKQEAgLTUzMzcsMTAgKzY4NDMsMTAgQEAKICAgICAjMSMyIFxlbmRoZWFkZXIKICAgICAlIGNvbW1vbiBlbmRpbmc6CiAgICAgXGludGVybGluZXBlbmFsdHkgPSAxMDAwMAotICAgIFxhZHZhbmNlXHJpZ2h0c2tpcCBieSAwcHQgcGx1cyAxZmlsCisgICAgXGFkdmFuY2VccmlnaHRza2lwIGJ5IDBwdCBwbHVzIDFmaWxccmVsYXgKICAgICBcZW5kZ3JhZgogICAgIFxub2JyZWFrXHZza2lwIC1ccGFyc2tpcAotICAgIFxwZW5hbHR5IDEwMDAyICAlIHNpZ25hbCB0byBcc3RhcnRkZWZ1biBhbmQgXGRvZGVmdW54CisgICAgXHBlbmFsdHlcZGVmdW5wZW5hbHR5ICAlIHNpZ25hbCB0byBcc3RhcnRkZWZ1biBhbmQgXGRvZGVmdW54CiAgICAgJSBTb21lIG9mIHRoZSBAZGVmdW4tdHlwZSB0YWdzIGRvIG5vdCBlbmFibGUgbWFnaWMgcGFyZW50aGVzZXMsCiAgICAgJSByZW5kZXJpbmcgdGhlIGZvbGxvd2luZyBjaGVjayByZWR1bmRhbnQuICBCdXQgd2UgZG9uJ3Qgb3B0aW1pemUuCiAgICAgXGNoZWNrcGFyZW5jb3VudHMKQEAgLTUzNTAsNyArNjg1Niw3IEBACiBcZGVmXEVkZWZ1bntcZW5kZ3JhZlxtZWRicmVha30KIAogJSBcbWFrZWRlZnVue2RlZmZufSBjcmVhdGVzIFxkZWZmbiwgXGRlZmZueCBhbmQgXEVkZWZmbjsKLSUgdGhlIG9ubHkgdGhpbmcgcmVtYWlubmlnIGlzIHRvIGRlZmluZSBcZGVmZm5oZWFkZXIuCislIHRoZSBvbmx5IHRoaW5nIHJlbWFpbmluZyBpcyB0byBkZWZpbmUgXGRlZmZuaGVhZGVyLgogJQogXGRlZlxtYWtlZGVmdW4jMXslCiAgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIEUjMVxlbmRjc25hbWUgPSBcRWRlZnVuCkBAIC01MzY3LDEzICs2ODczLDM2IEBACiBcZGVmXGRvbWFrZWRlZnVuIzEjMiMzeyUKICAgXGVudmRlZiMxeyUKICAgICBcc3RhcnRkZWZ1bgorICAgIFxkb2luZ3R5cGVmbmZhbHNlICAgICUgZGlzdGluZ3Vpc2ggdHlwZWQgZnVuY3Rpb25zIGZyb20gYWxsIGVsc2UKICAgICBccGFyc2Vhcmd1c2luZ1xhY3RpdmVwYXJlbnN7XHByaW50ZGVmdW5saW5lIzN9JQogICB9JQogICBcZGVmIzJ7XGRvZGVmdW54IzF9JQogICBcZGVmIzMlCiB9CiAKLSUlJSBVbnR5cGVkIGZ1bmN0aW9uczoKK1xuZXdpZlxpZmRvaW5ndHlwZWZuICAgICAgICUgZG9pbmcgdHlwZWQgZnVuY3Rpb24/CitcbmV3aWZcaWZyZXR0eXBlb3dubGluZSAgICAlIHR5cGVzZXQgcmV0dXJuIHR5cGUgb24gaXRzIG93biBsaW5lPworCislIEBkZWZ0eXBlZm5uZXdsaW5lIG9ufG9mZiBzYXlzIHdoZXRoZXIgdGhlIHJldHVybiB0eXBlIG9mIHR5cGVkIGZ1bmN0aW9ucworJSBhcmUgcHJpbnRlZCBvbiB0aGVpciBvd24gbGluZS4gIFRoaXMgYWZmZWN0cyBAZGVmdHlwZWZuLCBAZGVmdHlwZWZ1biwKKyUgQGRlZnR5cGVvcCwgYW5kIEBkZWZ0eXBlbWV0aG9kLgorJSAKK1xwYXJzZWFyZ2RlZlxkZWZ0eXBlZm5uZXdsaW5leyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXG9ud29yZAorICAgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIFNFVHR4aWRlZnR5cGVmbm5sXGVuZGNzbmFtZQorICAgICAgPSBcZW1wdHkKKyAgXGVsc2VcaWZ4XHRlbXBcb2Zmd29yZAorICAgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIFNFVHR4aWRlZnR5cGVmbm5sXGVuZGNzbmFtZQorICAgICAgPSBccmVsYXgKKyAgXGVsc2UKKyAgICBcZXJyaGVscCA9IFxFTXNpbXBsZQorICAgIFxlcnJtZXNzYWdle1Vua25vd24gQHR4aWRlZnR5cGVmbm5sIHZhbHVlIGBcdGVtcCcsCisgICAgICAgICAgICAgICAgbXVzdCBiZSBvbnxvZmZ9JQorICBcZmlcZmkKK30KKworJSBVbnR5cGVkIGZ1bmN0aW9uczoKIAogJSBAZGVmZm4gY2F0ZWdvcnkgbmFtZSBhcmdzCiBcbWFrZWRlZnVue2RlZmZufXtcZGVmZm5nZW5lcmFse319CkBAIC01MzkyLDcgKzY5MjEsNyBAQAogICBcZGVmbmFtZXsjMn17fXsjM31cbWFnaWNhbXBcZGVmdW5hcmdzeyM0XHVuc2tpcH0lCiB9CiAKLSUlJSBUeXBlZCBmdW5jdGlvbnM6CislIFR5cGVkIGZ1bmN0aW9uczoKIAogJSBAZGVmdHlwZWZuIGNhdGVnb3J5IHR5cGUgbmFtZSBhcmdzCiBcbWFrZWRlZnVue2RlZnR5cGVmbn17XGRlZnR5cGVmbmdlbmVyYWx7fX0KQEAgLTU0MDcsMTAgKzY5MzYsMTEgQEAKICUKIFxkZWZcZGVmdHlwZWZuZ2VuZXJhbCMxIzIgIzMgIzQgIzVcZW5kaGVhZGVyeyUKICAgXGRvc3ViaW5ke2ZufXtcY29kZXsjNH19eyMxfSUKKyAgXGRvaW5ndHlwZWZudHJ1ZQogICBcZGVmbmFtZXsjMn17IzN9eyM0fVxkZWZ1bmFyZ3N7IzVcdW5za2lwfSUKIH0KIAotJSUlIFR5cGVkIHZhcmlhYmxlczoKKyUgVHlwZWQgdmFyaWFibGVzOgogCiAlIEBkZWZ0eXBldnIgY2F0ZWdvcnkgdHlwZSB2YXIgYXJncwogXG1ha2VkZWZ1bntkZWZ0eXBldnJ9e1xkZWZ0eXBlY3ZnZW5lcmFse319CkBAIC01NDI4LDcgKzY5NTgsNyBAQAogICBcZGVmbmFtZXsjMn17IzN9eyM0fVxkZWZ1bmFyZ3N7IzVcdW5za2lwfSUKIH0KIAotJSUlIFVudHlwZWQgdmFyaWFibGVzOgorJSBVbnR5cGVkIHZhcmlhYmxlczoKIAogJSBAZGVmdnIgY2F0ZWdvcnkgdmFyIGFyZ3MKIFxtYWtlZGVmdW57ZGVmdnJ9IzEge1xkZWZ0eXBldnJoZWFkZXJ7IzF9IHt9IH0KQEAgLTU0MzksNyArNjk2OSw4IEBACiAlIFxkZWZjdm9mIHtjYXRlZ29yeSBvZn1jbGFzcyB2YXIgYXJncwogXGRlZlxkZWZjdm9mIzEjMiB7XGRlZnR5cGVjdm9meyMxfSMyIHt9IH0KIAotJSUlIFR5cGU6CislIFR5cGVzOgorCiAlIEBkZWZ0cCBjYXRlZ29yeSBuYW1lIGFyZ3MKIFxtYWtlZGVmdW57ZGVmdHB9IzEgIzIgIzNcZW5kaGVhZGVyeyUKICAgXGRvaW5ke3RwfXtcY29kZXsjMn19JQpAQCAtNTQ2NywyNSArNjk5OCw0OSBAQAogJSBXZSBhcmUgZm9sbG93ZWQgYnkgKGJ1dCBub3QgcGFzc2VkKSB0aGUgYXJndW1lbnRzLCBpZiBhbnkuCiAlCiBcZGVmXGRlZm5hbWUjMSMyIzN7JQorICBccGFyCiAgICUgR2V0IHRoZSB2YWx1ZXMgb2YgXGxlZnRza2lwIGFuZCBccmlnaHRza2lwIGFzIHRoZXkgd2VyZSBvdXRzaWRlIHRoZSBAZGVmLi4uCiAgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IC1cZGVmYm9keWluZGVudAogICAlCi0gICUgSG93IHdlJ2xsIGZvcm1hdCB0aGUgdHlwZSBuYW1lLiAgUHV0dGluZyBpdCBpbiBicmFja2V0cyBoZWxwcworICAlIERldGVybWluZSBpZiB3ZSBhcmUgdHlwZXNldHRpbmcgdGhlIHJldHVybiB0eXBlIG9mIGEgdHlwZWQgZnVuY3Rpb24KKyAgJSBvbiBhIGxpbmUgYnkgaXRzZWxmLgorICBccmV0dHlwZW93bmxpbmVmYWxzZQorICBcaWZkb2luZ3R5cGVmbiAgJSBkb2luZyBhIHR5cGVkIGZ1bmN0aW9uIHNwZWNpZmljYWxseT8KKyAgICAlIHRoZW4gY2hlY2sgdXNlciBvcHRpb24gZm9yIHB1dHRpbmcgcmV0dXJuIHR5cGUgb24gaXRzIG93biBsaW5lOgorICAgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIFNFVHR4aWRlZnR5cGVmbm5sXGVuZGNzbmFtZVxyZWxheCBcZWxzZQorICAgICAgXHJldHR5cGVvd25saW5ldHJ1ZQorICAgIFxmaQorICBcZmkKKyAgJQorICAlIEhvdyB3ZSdsbCBmb3JtYXQgdGhlIGNhdGVnb3J5IG5hbWUuICBQdXR0aW5nIGl0IGluIGJyYWNrZXRzIGhlbHBzCiAgICUgZGlzdGluZ3Vpc2ggaXQgZnJvbSB0aGUgYm9keSB0ZXh0IHRoYXQgbWF5IGVuZCB1cCBvbiB0aGUgbmV4dCBsaW5lCiAgICUganVzdCBiZWxvdyBpdC4KICAgXGRlZlx0ZW1weyMxfSUKICAgXHNldGJveDA9XGhib3h7XGtlcm5cZGVmbGFzdGFyZ21hcmdpbiBcaWZ4XHRlbXBcZW1wdHlcZWxzZSBbXHJtXHRlbXBdXGZpfQogICAlCi0gICUgRmlndXJlIG91dCBsaW5lIHNpemVzIGZvciB0aGUgcGFyYWdyYXBoIHNoYXBlLgorICAlIEZpZ3VyZSBvdXQgbGluZSBzaXplcyBmb3IgdGhlIHBhcmFncmFwaCBzaGFwZS4gIFdlJ2xsIGFsd2F5cyBoYXZlIGF0CisgICUgbGVhc3QgdHdvLgorICBcdGVtcG51bSA9IDIKKyAgJQogICAlIFRoZSBmaXJzdCBsaW5lIG5lZWRzIHNwYWNlIGZvciBcYm94MDsgYnV0IGlmIFxyaWdodHNraXAgaXMgbm9uemVybywKICAgJSB3ZSBuZWVkIG9ubHkgc3BhY2UgZm9yIHRoZSBwYXJ0IG9mIFxib3gwIHdoaWNoIGV4Y2VlZHMgaXQ6CiAgIFxkaW1lbjA9XGhzaXplICBcYWR2YW5jZVxkaW1lbjAgYnkgLVx3ZDAgIFxhZHZhbmNlXGRpbWVuMCBieSBccmlnaHRza2lwCisgICUKKyAgJSBJZiBkb2luZyBhIHJldHVybiB0eXBlIG9uIGl0cyBvd24gbGluZSwgd2UnbGwgaGF2ZSBhbm90aGVyIGxpbmUuCisgIFxpZnJldHR5cGVvd25saW5lCisgICAgXGFkdmFuY2VcdGVtcG51bSBieSAxCisgICAgXGRlZlxtYXliZXNoYXBlbGluZXswaW4gXGhzaXplfSUKKyAgXGVsc2UKKyAgICBcZGVmXG1heWJlc2hhcGVsaW5le30lCisgIFxmaQorICAlCiAgICUgVGhlIGNvbnRpbnVhdGlvbnM6CiAgIFxkaW1lbjI9XGhzaXplICBcYWR2YW5jZVxkaW1lbjIgYnkgLVxkZWZhcmdzaW5kZW50Ci0gICUgKHBsYWluLnRleCBzYXlzIHRoYXQgXGRpbWVuMSBzaG91bGQgYmUgdXNlZCBvbmx5IGFzIGdsb2JhbC4pCi0gIFxwYXJzaGFwZSAyIDBpbiBcZGltZW4wIFxkZWZhcmdzaW5kZW50IFxkaW1lbjIKICAgJQotICAlIFB1dCB0aGUgdHlwZSBuYW1lIHRvIHRoZSByaWdodCBtYXJnaW4uCisgICUgVGhlIGZpbmFsIHBhcmFncmFwaCBzaGFwZToKKyAgXHBhcnNoYXBlIFx0ZW1wbnVtICAwaW4gXGRpbWVuMCAgXG1heWJlc2hhcGVsaW5lICBcZGVmYXJnc2luZGVudCBcZGltZW4yCisgICUKKyAgJSBQdXQgdGhlIGNhdGVnb3J5IG5hbWUgYXQgdGhlIHJpZ2h0IG1hcmdpbi4KICAgXG5vaW5kZW50CiAgIFxoYm94IHRvIDBwdHslCiAgICAgXGhmaWxcYm94MCBca2Vybi1caHNpemUKQEAgLTU1MDcsOCArNzA2MiwxNiBAQAogICAgICUgLiB0aGlzIHN0aWxsIGRvZXMgbm90IGZpeCB0aGUgP2AgYW5kICFgIGxpZ2F0dXJlcywgYnV0IHNvIGZhciBubwogICAgICUgICBvbmUgaGFzIG1hZGUgaWRlbnRpZmllcnMgdXNpbmcgdGhlbSA6KS4KICAgICBcZGYgXHR0Ci0gICAgXGRlZlx0ZW1weyMyfSUgcmV0dXJuIHZhbHVlIHR5cGUKLSAgICBcaWZ4XHRlbXBcZW1wdHlcZWxzZSBcdGNsb3Nle1x0ZW1wfSBcZmkKKyAgICBcZGVmXHRlbXB7IzJ9JSB0ZXh0IG9mIHRoZSByZXR1cm4gdHlwZQorICAgIFxpZnhcdGVtcFxlbXB0eVxlbHNlCisgICAgICBcdGNsb3Nle1x0ZW1wfSUgdHlwZXNldCB0aGUgcmV0dXJuIHR5cGUKKyAgICAgIFxpZnJldHR5cGVvd25saW5lCisgICAgICAgICUgcHV0IHJldHVybiB0eXBlIG9uIGl0cyBvd24gbGluZTsgcHJvaGliaXQgbGluZSBicmVhayBmb2xsb3dpbmc6CisgICAgICAgIFxoZmlsXHZhZGp1c3R7XG5vYnJlYWt9XGJyZWFrICAKKyAgICAgIFxlbHNlCisgICAgICAgIFxzcGFjZSAgJSB0eXBlIG9uIHNhbWUgbGluZSwgc28ganVzdCBmb2xsb3dlZCBieSBhIHNwYWNlCisgICAgICBcZmkKKyAgICBcZmkgICAgICAgICAgICUgbm8gcmV0dXJuIHR5cGUKICAgICAjMyUgb3V0cHV0IGZ1bmN0aW9uIG5hbWUKICAgfSUKICAge1xybVxlbnNraXB9JSBoc2tpcCAwLjUgZW0gb2YgXHRlbnJtCkBAIC01NTI4LDggKzcwOTEsMTEgQEAKICAgXGRmIFxzbCBcaHlwaGVuY2hhclxmb250PTAKICAgJQogICAlIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBhbiBhcmd1bWVudCBoYXMgdHdvIGRhc2hlcyAoZm9yIGluc3RhbmNlKSwgd2UKLSAgJSB3YW50IGEgd2F5IHRvIGdldCB0dHNsLiAgTGV0J3MgdHJ5IEB2YXIgZm9yIHRoYXQuCi0gIFxsZXRcdmFyPVx0dHNsYW50ZWQKKyAgJSB3YW50IGEgd2F5IHRvIGdldCB0dHNsLiAgV2UgdXNlZCB0byByZWNvbW1lbmQgQHZhciBmb3IgdGhhdCwgc28KKyAgJSBsZWF2ZSB0aGUgY29kZSBpbiwgYnV0IGl0J3Mgc3RyYW5nZSBmb3IgQHZhciB0byBsZWFkIHRvIHR5cGV3cml0ZXIuCisgICUgTm93YWRheXMgd2UgcmVjb21tZW5kIEBjb2RlLCBzaW5jZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgdHRzbCBoeXBoZW4KKyAgJSBhbmQgYSB0dCBoeXBoZW4gaXMgcHJldHR5IHRpbnkuICBAY29kZSBhbHNvIGRpc2FibGVzID9gICFgLgorICBcZGVmXHZhciMjMXt7XHNldHVwbWFya3Vwc3R5bGV7dmFyfVx0dHNsYW50ZWR7IyMxfX19JQogICAjMSUKICAgXHNsXGh5cGhlbmNoYXJcZm9udD00NQogfQpAQCAtNTYwOSwxMiArNzE3NSwxNCBAQAogICBcaWZudW1ccGFyZW5jb3VudD0wIFxlbHNlIFxiYWRwYXJlbmNvdW50IFxmaQogICBcaWZudW1cYnJhY2tjb3VudD0wIFxlbHNlIFxiYWRicmFja2NvdW50IFxmaQogfQorJSB0aGVzZSBzaG91bGQgbm90IHVzZSBcZXJybWVzc2FnZTsgdGhlIGdsaWJjIG1hbnVhbCwgYXQgbGVhc3QsIGFjdHVhbGx5CislIGhhcyBzdWNoIGNvbnN0cnVjdHMgKHdoZW4gZG9jdW1lbnRpbmcgZnVuY3Rpb24gcG9pbnRlcnMpLgogXGRlZlxiYWRwYXJlbmNvdW50eyUKLSAgXGVycm1lc3NhZ2V7VW5iYWxhbmNlZCBwYXJlbnRoZXNlcyBpbiBAZGVmfSUKKyAgXG1lc3NhZ2V7V2FybmluZzogdW5iYWxhbmNlZCBwYXJlbnRoZXNlcyBpbiBAZGVmLi4ufSUKICAgXGdsb2JhbFxwYXJlbmNvdW50PTAKIH0KIFxkZWZcYmFkYnJhY2tjb3VudHslCi0gIFxlcnJtZXNzYWdle1VuYmFsYW5jZWQgc3F1YXJlIGJyYWNlcyBpbiBAZGVmfSUKKyAgXG1lc3NhZ2V7V2FybmluZzogdW5iYWxhbmNlZCBzcXVhcmUgYnJhY2tldHMgaW4gQGRlZi4uLn0lCiAgIFxnbG9iYWxcYnJhY2tjb3VudD0wCiB9CiAKQEAgLTU2MjQsNyArNzE5Miw3IEBACiAKICUgVG8gZG8gdGhpcyByaWdodCB3ZSBuZWVkIGEgZmVhdHVyZSBvZiBlLVRlWCwgXHNjYW50b2tlbnMsCiAlIHdoaWNoIHdlIGFycmFuZ2UgdG8gZW11bGF0ZSB3aXRoIGEgdGVtcG9yYXJ5IGZpbGUgaW4gb3JkaW5hcnkgVGVYLgotXGlmeFxlVGVYdmVyc2lvblx1bmRlZmluZWQKK1xpZnhcZVRlWHZlcnNpb25cdGhpc2lzdW5kZWZpbmVkCiAgIFxuZXd3cml0ZVxtYWNzY3JpYmJsZQogICBcZGVmXHNjYW50b2tlbnMjMXslCiAgICAgXHRva3MwPXsjMX0lCkBAIC01NjM1LDI2ICs3MjAzLDMwIEBACiAgIH0KIFxmaQogCi1cZGVmXHNjYW5tYWNybyMxeyUKLSAgXGJlZ2luZ3JvdXAKLSAgICBcbmV3bGluZWNoYXJgXF5eTQotICAgIFxsZXRceGVhdHNwYWNlc1xlYXRzcGFjZXMKLSAgICAlIFVuZG8gY2F0Y29kZSBjaGFuZ2VzIG9mIFxzdGFydGNvbnRlbnRzIGFuZCBcZG9wcmludGluZGV4Ci0gICAgJSBXaGVuIGNhbGxlZCBmcm9tIEBpbnNlcnRjb3B5aW5nIG9yIChzaG9ydCljYXB0aW9uLCB3ZSBuZWVkIGFjdGl2ZQotICAgICUgYmFja3NsYXNoIHRvIGdldCBpdCBwcmludGVkIGNvcnJlY3RseS4gIFByZXZpb3VzbHksIHdlIGhhZAotICAgICUgXGNhdGNvZGVgXFw9XG90aGVyIGluc3RlYWQuICBXZSdsbCBzZWUgd2hldGhlciBhIHByb2JsZW0gYXBwZWFycwotICAgICUgd2l0aCBtYWNybyBleHBhbnNpb24uCQkJCS0ta2FzYWwsIDE5YXVnMDQKLSAgICBcY2F0Y29kZWBcQD0wIFxjYXRjb2RlYFxcPVxhY3RpdmUgXGVzY2FwZWNoYXI9YFxACi0gICAgJSAuLi4gYW5kIFxleGFtcGxlCi0gICAgXHNwYWNlaXNzcGFjZQotICAgICUKLSAgICAlIEFwcGVuZCBcZW5kaW5wdXQgdG8gbWFrZSBzdXJlIHRoYXQgVGVYIGRvZXMgbm90IHNlZSB0aGUgZW5kaW5nIG5ld2xpbmUuCi0gICAgJQotICAgICUgSSd2ZSB2ZXJpZmllZCB0aGF0IGl0IGlzIG5lY2Vzc2FyeSBib3RoIGZvciBlLVRlWCBhbmQgZm9yIG9yZGluYXJ5IFRlWAotICAgICUJCQkJCQkJLS1rYXNhbCwgMjlub3YwMwotICAgIFxzY2FudG9rZW5zeyMxXGVuZGlucHV0fSUKLSAgXGVuZGdyb3VwCi19CitcZGVmXHNjYW5tYWNybyMxe1xiZWdpbmdyb3VwCisgIFxuZXdsaW5lY2hhcmBcXl5NCisgIFxsZXRceGVhdHNwYWNlc1xlYXRzcGFjZXMKKyAgJQorICAlIFVuZG8gY2F0Y29kZSBjaGFuZ2VzIG9mIFxzdGFydGNvbnRlbnRzIGFuZCBcZG9wcmludGluZGV4CisgICUgV2hlbiBjYWxsZWQgZnJvbSBAaW5zZXJ0Y29weWluZyBvciAoc2hvcnQpY2FwdGlvbiwgd2UgbmVlZCBhY3RpdmUKKyAgJSBiYWNrc2xhc2ggdG8gZ2V0IGl0IHByaW50ZWQgY29ycmVjdGx5LiAgUHJldmlvdXNseSwgd2UgaGFkCisgICUgXGNhdGNvZGVgXFw9XG90aGVyIGluc3RlYWQuICBXZSdsbCBzZWUgd2hldGhlciBhIHByb2JsZW0gYXBwZWFycworICAlIHdpdGggbWFjcm8gZXhwYW5zaW9uLgkJCQktLWthc2FsLCAxOWF1ZzA0CisgIFxjYXRjb2RlYFxAPTAgXGNhdGNvZGVgXFw9XGFjdGl2ZSBcZXNjYXBlY2hhcj1gXEAKKyAgJQorICAlIC4uLiBhbmQgZm9yIFxleGFtcGxlOgorICBcc3BhY2Vpc3NwYWNlCisgICUKKyAgJSBUaGUgXGVtcHR5IGhlcmUgY2F1c2VzIGEgZm9sbG93aW5nIGNhdGNvZGUgNSBuZXdsaW5lIHRvIGJlIGVhdGVuIGFzCisgICUgcGFydCBvZiByZWFkaW5nIHdoaXRlc3BhY2UgYWZ0ZXIgYSBjb250cm9sIHNlcXVlbmNlLiAgSXQgZG9lcyBub3QKKyAgJSBlYXQgYSBjYXRjb2RlIDEzIG5ld2xpbmUuICBUaGVyZSdzIG5vIGdvb2Qgd2F5IHRvIGhhbmRsZSB0aGUgdHdvCisgICUgY2FzZXMgKHVudHJpZWQ6IG1heWJlIGUtVGVYJ3MgXGV2ZXJ5ZW9mIGNvdWxkIGhlbHAsIHRob3VnaCBwbGFpbiBUZVgKKyAgJSB3b3VsZCB0aGVuIGhhdmUgZGlmZmVyZW50IGJlaGF2aW9yKS4gIFNlZSB0aGUgTWFjcm8gRGV0YWlscyBub2RlIGluCisgICUgdGhlIG1hbnVhbCBmb3IgdGhlIHdvcmthcm91bmQgd2UgcmVjb21tZW5kIGZvciBtYWNyb3MgYW5kCisgICUgbGluZS1vcmllbnRlZCBjb21tYW5kcy4KKyAgJSAKKyAgXHNjYW50b2tlbnN7IzFcZW1wdHl9JQorXGVuZGdyb3VwfQogCiBcZGVmXHNjYW5leHAjMXslCiAgIFxlZGVmXHRlbXB7XG5vZXhwYW5kXHNjYW5tYWNyb3sjMX19JQpAQCAtNTY4Miw3ICs3MjU0LDcgQEAKICUgVGhpcyBkb2VzIFxsZXQgIzEgPSAjMiwgd2l0aCBcY3NuYW1lczsgdGhhdCBpcywKICUgICBcbGV0IFxjc25hbWUjMVxlbmRjc25hbWUgPSBcY3NuYW1lIzJcZW5kY3NuYW1lCiAlIChleGNlcHQgb2YgY291cnNlIHdlIGhhdmUgdG8gcGxheSBleHBhbnNpb24gZ2FtZXMpLgotJSAKKyUKIFxkZWZcY3NsZXQjMSMyeyUKICAgXGV4cGFuZGFmdGVyXGxldAogICBcY3NuYW1lIzFcZXhwYW5kYWZ0ZXJcZW5kY3NuYW1lCkBAIC01NzA4LDEzICs3MjgwLDE4IEBACiAKICUgTWFjcm8gYm9kaWVzIGFyZSBhYnNvcmJlZCBhcyBhbiBhcmd1bWVudCBpbiBhIGNvbnRleHQgd2hlcmUKICUgYWxsIGNoYXJhY3RlcnMgYXJlIGNhdGNvZGUgMTAsIDExIG9yIDEyLCBleGNlcHQgXCB3aGljaCBpcyBhY3RpdmUKLSUgKGFzIGluIG5vcm1hbCB0ZXhpbmZvKS4gSXQgaXMgbmVjZXNzYXJ5IHRvIGNoYW5nZSB0aGUgZGVmaW5pdGlvbiBvZiBcLgotCislIChhcyBpbiBub3JtYWwgdGV4aW5mbykuIEl0IGlzIG5lY2Vzc2FyeSB0byBjaGFuZ2UgdGhlIGRlZmluaXRpb24gb2YgXAorJSB0byByZWNvZ25pemUgbWFjcm8gYXJndW1lbnRzOyB0aGlzIGlzIHRoZSBqb2Igb2YgXG1ib2R5YmFja3NsYXNoLgorJQorJSBOb24tQVNDSUkgZW5jb2RpbmdzIG1ha2UgOC1iaXQgY2hhcmFjdGVycyBhY3RpdmUsIHNvIHVuLWFjdGl2YXRlCislIHRoZW0gdG8gYXZvaWQgdGhlaXIgZXhwYW5zaW9uLiAgTXVzdCBkbyB0aGlzIG5vbi1nbG9iYWxseSwgdG8KKyUgY29uZmluZSB0aGUgY2hhbmdlIHRvIHRoZSBjdXJyZW50IGdyb3VwLgorJQogJSBJdCdzIG5lY2Vzc2FyeSB0byBoYXZlIGhhcmQgQ1JzIHdoZW4gdGhlIG1hY3JvIGlzIGV4ZWN1dGVkLiBUaGlzIGlzCi0lIGRvbmUgYnkgIG1ha2luZyBeXk0gKFxlbmRsaW5lY2hhcikgY2F0Y29kZSAxMiB3aGVuIHJlYWRpbmcgdGhlIG1hY3JvCislIGRvbmUgYnkgbWFraW5nIF5eTSAoXGVuZGxpbmVjaGFyKSBjYXRjb2RlIDEyIHdoZW4gcmVhZGluZyB0aGUgbWFjcm8KICUgYm9keSwgYW5kIHRoZW4gbWFraW5nIGl0IHRoZSBcbmV3bGluZWNoYXIgaW4gXHNjYW5tYWNyby4KLQotXGRlZlxzY2FuY3R4dHslCislCitcZGVmXHNjYW5jdHh0eyUgdXNlZCBhcyBzdWJyb3V0aW5lCiAgIFxjYXRjb2RlYFwiPVxvdGhlcgogICBcY2F0Y29kZWBcKz1cb3RoZXIKICAgXGNhdGNvZGVgXDw9XG90aGVyCkBAIC01NzI0LDE1ICs3MzAxLDE2IEBACiAgIFxjYXRjb2RlYFxfPVxvdGhlcgogICBcY2F0Y29kZWBcfD1cb3RoZXIKICAgXGNhdGNvZGVgXH49XG90aGVyCisgIFxpZnhcZGVjbGFyZWRlbmNvZGluZ1xhc2NpaSBcZWxzZSBcc2V0bm9uYXNjaWljaGFyc2NhdGNvZGVub25nbG9iYWxcb3RoZXIgXGZpCiB9CiAKLVxkZWZcc2NhbmFyZ2N0eHR7JQorXGRlZlxzY2FuYXJnY3R4dHslIHVzZWQgZm9yIGNvcHlpbmcgYW5kIGNhcHRpb25zLCBub3QgbWFjcm9zLgogICBcc2NhbmN0eHQKICAgXGNhdGNvZGVgXFw9XG90aGVyCiAgIFxjYXRjb2RlYFxeXk09XG90aGVyCiB9CiAKLVxkZWZcbWFjcm9ib2R5Y3R4dHslCitcZGVmXG1hY3JvYm9keWN0eHR7JSB1c2VkIGZvciBAbWFjcm8gZGVmaW5pdGlvbnMKICAgXHNjYW5jdHh0CiAgIFxjYXRjb2RlYFx7PVxvdGhlcgogICBcY2F0Y29kZWBcfT1cb3RoZXIKQEAgLTU3NDAsMzIgKzczMTgsNTYgQEAKICAgXHVzZW1ib2R5YmFja3NsYXNoCiB9CiAKLVxkZWZcbWFjcm9hcmdjdHh0eyUKK1xkZWZcbWFjcm9hcmdjdHh0eyUgdXNlZCB3aGVuIHNjYW5uaW5nIGludm9jYXRpb25zCiAgIFxzY2FuY3R4dAotICBcY2F0Y29kZWBcXD1cb3RoZXIKKyAgXGNhdGNvZGVgXFw9MAogfQorJSB3aHkgY2F0Y29kZSAwIGZvciBcIGluIHRoZSBhYm92ZT8gIFRvIHJlY29nbml6ZSBcXCBceyBcfSBhcyAiZXNjYXBlcyIKKyUgZm9yIHRoZSBzaW5nbGUgY2hhcmFjdGVycyBcIHsgfS4gIFRodXMsIHdlIGVuZCB1cCB3aXRoIHRoZSAiY29tbWFuZHMiCislIHRoYXQgd291bGQgYmUgd3JpdHRlbiBAXCBAeyBAfSBpbiBhIFRleGluZm8gZG9jdW1lbnQuCislIAorJSBXZSBhbHJlYWR5IGhhdmUgQHsgYW5kIEB9LiAgRm9yIEBcLCB3ZSBkZWZpbmUgaXQgaGVyZSwgYW5kIG9ubHkgZm9yCislIHRoaXMgcHVycG9zZSwgdG8gcHJvZHVjZSBhIHR5cGV3cml0ZXIgYmFja3NsYXNoIChzbywgdGhlIEBcIHRoYXQgd2UKKyUgZGVmaW5lIGZvciBAbWF0aCBjYW4ndCBiZSB1c2VkIHdpdGggQG1hY3JvIGNhbGxzKToKKyUKK1xkZWZcXHtcbm9ybWFsYmFja3NsYXNofSUKKyUgCislIFdlIHdvdWxkIGxpa2UgdG8gZG8gdGhpcyBmb3IgXCwgdG9vLCBzaW5jZSB0aGF0IGlzIHdoYXQgbWFrZWluZm8gZG9lcy4KKyUgQnV0IGl0IGlzIG5vdCBwb3NzaWJsZSwgYmVjYXVzZSBUZXhpbmZvIGFscmVhZHkgaGFzIGEgY29tbWFuZCBALCBmb3IgYQorJSBjZWRpbGxhIGFjY2VudC4gIERvY3VtZW50cyBtdXN0IHVzZSBAY29tbWF7fSBpbnN0ZWFkLgorJQorJSBcYW55dGhpbmdlbHNlIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBhbiBlcnJvciBvZiBzb21lIGtpbmQuCisKIAogJSBcbWJvZHliYWNrc2xhc2ggaXMgdGhlIGRlZmluaXRpb24gb2YgXCBpbiBAbWFjcm8gYm9kaWVzLgogJSBJdCBtYXBzIFxmb29cID0+IFxjc25hbWUgbWFjYXJnLmZvb1xlbmRjc25hbWUgPT4gI04KICUgd2hlcmUgTiBpcyB0aGUgbWFjcm8gcGFyYW1ldGVyIG51bWJlci4KICUgV2UgZGVmaW5lIFxjc25hbWUgbWFjYXJnLlxlbmRjc25hbWUgdG8gYmUgXHJlYWxiYWNrc2xhc2gsIHNvCiAlIFxcIGluIG1hY3JvIHJlcGxhY2VtZW50IHRleHQgZ2V0cyB5b3UgYSBiYWNrc2xhc2guCi0KKyUKIHtcY2F0Y29kZWBAPTAgQGNhdGNvZGVgQFw9QGFjdGl2ZQogIEBnZGVmQHVzZW1ib2R5YmFja3NsYXNoe0BsZXRcPUBtYm9keWJhY2tzbGFzaH0KICBAZ2RlZkBtYm9keWJhY2tzbGFzaCMxXHtAY3NuYW1lIG1hY2FyZy4jMUBlbmRjc25hbWV9CiB9CiBcZXhwYW5kYWZ0ZXJcZGVmXGNzbmFtZSBtYWNhcmcuXGVuZGNzbmFtZXtccmVhbGJhY2tzbGFzaH0KIAorXGRlZlxtYXJnYmFja3NsYXNoIzF7XGNoYXJgXCMxIH0KKwogXGRlZlxtYWNyb3tccmVjdXJzaXZlZmFsc2VccGFyc2VhcmdcbWFjcm94eHh9CiBcZGVmXHJtYWNyb3tccmVjdXJzaXZldHJ1ZVxwYXJzZWFyZ1xtYWNyb3h4eH0KIAogXGRlZlxtYWNyb3h4eCMxeyUKLSAgXGdldGFyZ3N7IzF9JSAgICAgICAgICAgbm93IFxtYWNuYW1lIGlzIHRoZSBtYWNuYW1lIGFuZCBcYXJnbCB0aGUgYXJnbGlzdAorICBcZ2V0YXJnc3sjMX0lIG5vdyBcbWFjbmFtZSBpcyB0aGUgbWFjbmFtZSBhbmQgXGFyZ2wgdGhlIGFyZ2xpc3QKICAgXGlmeFxhcmdsXGVtcHR5ICAgICAgICUgbm8gYXJndW1lbnRzCi0gICAgIFxwYXJhbW5vPTAlCisgICAgIFxwYXJhbW5vPTBccmVsYXgKICAgXGVsc2UKICAgICAgXGV4cGFuZGFmdGVyXHBhcnNlbWFyZ2RlZiBcYXJnbDslCisgICAgIFxpZlxwYXJhbW5vPjI1NlxyZWxheAorICAgICAgIFxpZnhcZVRlWHZlcnNpb25cdGhpc2lzdW5kZWZpbmVkCisgICAgICAgICBcZXJyaGVscCA9IFxFTXNpbXBsZQorICAgICAgICAgXGVycm1lc3NhZ2V7WW91IG5lZWQgZVRlWCB0byBjb21waWxlIGEgZmlsZSB3aXRoIG1hY3JvcyB3aXRoIG1vcmUgdGhhbiAyNTYgYXJndW1lbnRzfQorICAgICAgIFxmaQorICAgICBcZmkKICAgXGZpCiAgIFxpZjFcY3NuYW1lIGlzbWFjcm8uXHRoZVxtYWNuYW1lXGVuZGNzbmFtZQogICAgICBcbWVzc2FnZXtXYXJuaW5nOiByZWRlZmluaW5nIFx0aGVcbWFjbmFtZX0lCkBAIC01ODEyLDQ2ICs3NDE0LDI2OSBAQAogJSBhbiBvcGVuaW5nIGJyYWNlLCBhbmQgdGhhdCBvcGVuaW5nIGJyYWNlIGlzIG5vdCBjb25zdW1lZC4KIFxkZWZcZ2V0YXJncyMxe1xnZXRhcmdzeHh4IzF7fX0KIFxkZWZcZ2V0YXJnc3h4eCMxI3tcZ2V0bWFjbmFtZSAjMSBccmVsYXhcZ2V0bWFjYXJnc30KLVxkZWZcZ2V0bWFjbmFtZSAjMSAjMlxyZWxheHtcbWFjbmFtZT17IzF9fQorXGRlZlxnZXRtYWNuYW1lIzEgIzJccmVsYXh7XG1hY25hbWU9eyMxfX0KIFxkZWZcZ2V0bWFjYXJncyMxe1xkZWZcYXJnbHsjMX19CiAKLSUgUGFyc2UgdGhlIG9wdGlvbmFsIHtwYXJhbXN9IGxpc3QuICBTZXQgdXAgXHBhcmFtbm8gYW5kIFxwYXJhbWxpc3QKLSUgc28gXGRlZm1hY3JvIGtub3dzIHdoYXQgdG8gZG8uICBEZWZpbmUgXG1hY2FyZy5ibGFoIGZvciBlYWNoIGJsYWgKLSUgaW4gdGhlIHBhcmFtcyBsaXN0LCB0byBiZSAjI04gd2hlcmUgTiBpcyB0aGUgcG9zaXRpb24gaW4gdGhhdCBsaXN0LgotJSBUaGF0IGdldHMgdXNlZCBieSBcbWJvZHliYWNrc2xhc2ggKGFib3ZlKS4KKyUgRm9yIG1hY3JvIHByb2Nlc3NpbmcgbWFrZSBAIGEgbGV0dGVyIHNvIHRoYXQgd2UgY2FuIG1ha2UgVGV4aW5mbyBwcml2YXRlIG1hY3JvIG5hbWVzLgorXGVkZWZcdGV4aWF0Y2F0Y29kZXtcdGhlXGNhdGNvZGVgXEB9CitcY2F0Y29kZSBgQD0xMVxyZWxheAogCislIFBhcnNlIHRoZSBvcHRpb25hbCB7cGFyYW1zfSBsaXN0LiAgU2V0IHVwIFxwYXJhbW5vIGFuZCBccGFyYW1saXN0CislIHNvIFxkZWZtYWNybyBrbm93cyB3aGF0IHRvIGRvLiAgRGVmaW5lIFxtYWNhcmcuQkxBSCBmb3IgZWFjaCBCTEFICislIGluIHRoZSBwYXJhbXMgbGlzdCB0byBzb21lIGhvb2sgd2hlcmUgdGhlIGFyZ3VtZW50IHNpIHRvIGJlIGV4cGFuZGVkLiAgSWYKKyUgdGhlcmUgYXJlIGxlc3MgdGhhbiAxMCBhcmd1bWVudHMgdGhhdCBob29rIGlzIHRvIGJlIHJlcGxhY2VkIGJ5ICMjTiB3aGVyZSBOCislIGlzIHRoZSBwb3NpdGlvbiBpbiB0aGF0IGxpc3QsIHRoYXQgaXMgdG8gc2F5IHRoZSBtYWNybyBhcmd1bWVudHMgYXJlIHRvIGJlCislIGRlZmluZWQgYGEgbGEgVGVYIGluIHRoZSBtYWNybyBib2R5LiAgCislCislIFRoYXQgZ2V0cyB1c2VkIGJ5IFxtYm9keWJhY2tzbGFzaCAoYWJvdmUpLgorJQogJSBXZSBuZWVkIHRvIGdldCBgbWFjcm8gcGFyYW1ldGVyIGNoYXIgIycgaW50byBzZXZlcmFsIGRlZmluaXRpb25zLgotJSBUaGUgdGVjaG5pcXVlIHVzZWQgaXMgc3RvbGVuIGZyb20gTGFUZVg6ICBsZXQgXGhhc2ggYmUgc29tZXRoaW5nCislIFRoZSB0ZWNobmlxdWUgdXNlZCBpcyBzdG9sZW4gZnJvbSBMYVRlWDogbGV0IFxoYXNoIGJlIHNvbWV0aGluZwogJSB1bmV4cGFuZGFibGUsIGluc2VydCB0aGF0IHdoZXJldmVyIHlvdSBuZWVkIGEgIywgYW5kIHRoZW4gcmVkZWZpbmUKICUgaXQgdG8gIyBqdXN0IGJlZm9yZSB1c2luZyB0aGUgdG9rZW4gbGlzdCBwcm9kdWNlZC4KICUKICUgVGhlIHNhbWUgdGVjaG5pcXVlIGlzIHVzZWQgdG8gcHJvdGVjdCBcZWF0c3BhY2VzIHRpbGwganVzdCBiZWZvcmUKICUgdGhlIG1hY3JvIGlzIHVzZWQuCi0KLVxkZWZccGFyc2VtYXJnZGVmIzE7e1xwYXJhbW5vPTBcZGVmXHBhcmFtbGlzdHt9JQotICAgICAgICBcbGV0XGhhc2hccmVsYXhcbGV0XHhlYXRzcGFjZXNccmVsYXhccGFyc2VtYXJnZGVmeHh4IzEsOyx9CislCislIElmIHRoZXJlIGFyZSAxMCBvciBtb3JlIGFyZ3VtZW50cywgYSBkaWZmZXJlbnQgdGVjaG5pcXVlIGlzIHVzZWQsIHdoZXJlIHRoZQorJSBob29rIHJlbWFpbnMgaW4gdGhlIGJvZHksIGFuZCB3aGVuIG1hY3JvIGlzIHRvIGJlIGV4cGFuZGVkIHRoZSBib2R5IGlzCislIHByb2Nlc3NlZCBhZ2FpbiB0byByZXBsYWNlIHRoZSBhcmd1bWVudHMuCislCislIEluIHRoYXQgY2FzZSwgdGhlIGhvb2sgaXMgXHRoZVx0b2tzIE4tMSwgYW5kIHdlIHNpbXBseSBzZXQgXHRva3MgTi0xIHRvIHRoZQorJSBhcmd1bWVudCBOIHZhbHVlIGFuZCB0aGVuIFxlZGVmICB0aGUgYm9keSAobm90aGluZyBlbHNlIHdpbGwgZXhwYW5kIGJlY2F1c2Ugb2YKKyUgdGhlIGNhdGNvZGUgcmVnaW1lIHVuZGVyd2hpY2ggdGhlIGJvZHkgd2FzIGlucHV0KS4KKyUKKyUgSWYgeW91IGNvbXBpbGUgd2l0aCBUZVggKG5vdCBlVGVYKSwgYW5kIHlvdSBoYXZlIG1hY3JvcyB3aXRoIDEwIG9yIG1vcmUKKyUgYXJndW1lbnRzLCB5b3UgbmVlZCB0aGF0IG5vIG1hY3JvIGhhcyBtb3JlIHRoYW4gMjU2IGFyZ3VtZW50cywgb3RoZXJ3aXNlIGFuCislIGVycm9yIGlzIHByb2R1Y2VkLgorXGRlZlxwYXJzZW1hcmdkZWYjMTt7JQorICBccGFyYW1ubz0wXGRlZlxwYXJhbWxpc3R7fSUKKyAgXGxldFxoYXNoXHJlbGF4CisgIFxsZXRceGVhdHNwYWNlc1xyZWxheAorICBccGFyc2VtYXJnZGVmeHh4IzEsOywlCisgICUgSW4gY2FzZSB0aGF0IHRoZXJlIGFyZSAxMCBvciBtb3JlIGFyZ3VtZW50cyB3ZSBwYXJzZSBhZ2FpbiB0aGUgYXJndW1lbnRzCisgICUgbGlzdCB0byBzZXQgbmV3IGRlZmluaXRpb25zIGZvciB0aGUgXG1hY2FyZy5CTEFIIG1hY3JvcyBjb3JyZXNwb25kaW5nIHRvCisgICUgZWFjaCBCTEFIIGFyZ3VtZW50LiBJdCB3YXMgYW55aG93IG5lZWRlZCB0byBwYXJzZSBhbHJlYWR5IG9uY2UgdGhpcyBsaXN0CisgICUgaW4gb3JkZXIgdG8gY291bnQgdGhlIGFyZ3VtZW50cywgYW5kIGFzIG1hY3JvcyB3aXRoIGF0IG1vc3QgOSBhcmd1bWVudHMKKyAgJSBhcmUgYnkgZmFyIG1vcmUgZnJlcXVlbnQgdGhhbiBtYWNybyB3aXRoIDEwIG9yIG1vcmUgYXJndW1lbnRzLCBkZWZpbmluZworICAlIHR3aWNlIHRoZSBcbWFjYXJnLkJMQUggbWFjcm9zIGRvZXMgbm90IGNvc3QgdG9vIG11Y2ggcHJvY2Vzc2luZyBwb3dlci4KKyAgXGlmbnVtXHBhcmFtbm88MTBccmVsYXhcZWxzZQorICAgIFxwYXJhbW5vMFxyZWxheAorICAgIFxwYXJzZW1tYW55YXJnZGVmQEAjMSw7LCUgMTAgb3IgbW9yZSBhcmd1bWVudHMKKyAgXGZpCit9CiBcZGVmXHBhcnNlbWFyZ2RlZnh4eCMxLHslCiAgIFxpZiMxO1xsZXRcbmV4dD1ccmVsYXgKICAgXGVsc2UgXGxldFxuZXh0PVxwYXJzZW1hcmdkZWZ4eHgKLSAgICBcYWR2YW5jZVxwYXJhbW5vIGJ5IDElCisgICAgXGFkdmFuY2VccGFyYW1ubyBieSAxCiAgICAgXGV4cGFuZGFmdGVyXGVkZWZcY3NuYW1lIG1hY2FyZy5cZWF0c3BhY2VzeyMxfVxlbmRjc25hbWUKICAgICAgICAge1x4ZWF0c3BhY2Vze1xoYXNoXHRoZVxwYXJhbW5vfX0lCiAgICAgXGVkZWZccGFyYW1saXN0e1xwYXJhbWxpc3RcaGFzaFx0aGVccGFyYW1ubyx9JQogICBcZmlcbmV4dH0KIAorXGRlZlxwYXJzZW1tYW55YXJnZGVmQEAjMSx7JQorICBcaWYjMTtcbGV0XG5leHQ9XHJlbGF4CisgIFxlbHNlIAorICAgIFxsZXRcbmV4dD1ccGFyc2VtbWFueWFyZ2RlZkBACisgICAgXGVkZWZcdGVtcGJ7XGVhdHNwYWNlc3sjMX19JQorICAgIFxleHBhbmRhZnRlclxkZWZcZXhwYW5kYWZ0ZXJcdGVtcGEKKyAgICAgICBcZXhwYW5kYWZ0ZXJ7XGNzbmFtZSBtYWNhcmcuXHRlbXBiXGVuZGNzbmFtZX0lCisgICAgJSBOb3RlIHRoYXQgd2UgbmVlZCBzb21lIGV4dHJhIFxub2V4cGFuZFxub2V4cGFuZCwgdGhpcyBpcyBiZWNhdXNlIHdlCisgICAgJSBkb24ndCB3YW50IFx0aGUgIHRvIGJlIGV4cGFuZGVkIGluIHRoZSBccGFyc2VybWFjYm9keSAgYXMgaXQgdXNlcyBhbgorICAgICUgXHhkZWYgLgorICAgIFxleHBhbmRhZnRlclxlZGVmXHRlbXBhCisgICAgICB7XG5vZXhwYW5kXG5vZXhwYW5kXG5vZXhwYW5kXHRoZVx0b2tzXHRoZVxwYXJhbW5vfSUKKyAgICBcYWR2YW5jZVxwYXJhbW5vIGJ5IDFccmVsYXgKKyAgXGZpXG5leHR9CisKICUgVGhlc2UgdHdvIGNvbW1hbmRzIHJlYWQgcmVjdXJzaXZlIGFuZCBub25yZWN1cnNpdmUgbWFjcm8gYm9kaWVzLgogJSAoVGhleSdyZSBkaWZmZXJlbnQgc2luY2UgcmVjIGFuZCBub25yZWMgbWFjcm9zIGVuZCBkaWZmZXJlbnRseS4pCislCiAKK1xjYXRjb2RlIGBcQFx0ZXhpYXRjYXRjb2RlCiBcbG9uZ1xkZWZccGFyc2VtYWNib2R5IzFAZW5kIG1hY3JvJQoge1x4ZGVmXHRlbXB7XGVhdGNyeyMxfX1cZW5kZ3JvdXBcZGVmbWFjcm99JQogXGxvbmdcZGVmXHBhcnNlcm1hY2JvZHkjMUBlbmQgcm1hY3JvJQoge1x4ZGVmXHRlbXB7XGVhdGNyeyMxfX1cZW5kZ3JvdXBcZGVmbWFjcm99JQorXGNhdGNvZGUgYFxAPTExXHJlbGF4CiAKLSUgVGhpcyBkZWZpbmVzIHRoZSBtYWNybyBpdHNlbGYuIFRoZXJlIGFyZSBzaXggY2FzZXM6IHJlY3Vyc2l2ZSBhbmQKLSUgbm9ucmVjdXJzaXZlIG1hY3JvcyBvZiB6ZXJvLCBvbmUsIGFuZCBtYW55IGFyZ3VtZW50cy4KK1xsZXRcZW5kYXJnc0BccmVsYXgKK1xsZXRcbmlsQFxyZWxheAorXGRlZlxuaWxtQHtcbmlsQH0lCitcbG9uZ1xkZWZcbmlsbG1Ae1xuaWxAfSUKKworJSBUaGlzIG1hY3JvIGlzIGV4cGFuZGVkIGR1cmluZyB0aGUgVGV4aW5mbyBtYWNybyBleHBhbnNpb24sIG5vdCBkdXJpbmcgaXRzCislIGRlZmluaXRpb24uICBJdCBnZXRzIGFsbCB0aGUgYXJndW1lbnRzIHZhbHVlcyBhbmQgYXNzaWducyB0aGVtIHRvIG1hY3JvcworJSBtYWNhcmcuQVJHTkFNRQorJQorJSAjMSBpcyB0aGUgbWFjcm8gbmFtZQorJSAjMiBpcyB0aGUgbGlzdCBvZiBhcmd1bWVudCBuYW1lcworJSAjMyBpcyB0aGUgbGlzdCBvZiBhcmd1bWVudCB2YWx1ZXMKK1xkZWZcZ2V0YXJndmFsc0AjMSMyIzN7JQorICBcZGVmXG1hY2FyZ2RlZmxpc3RAe30lCisgIFxkZWZcc2F2ZXBhcmFtbGlzdEB7IzJ9JSBOZWVkIHRvIGtlZXAgYSBjb3B5IGZvciBwYXJhbWV0ZXIgZXhwYW5zaW9uLgorICBcZGVmXHBhcmFtbGlzdHsjMixcbmlsQH0lCisgIFxkZWZcbWFjcm9uYW1leyMxfSUKKyAgXGJlZ2luZ3JvdXAKKyAgXG1hY3JvYXJnY3R4dAorICBcZGVmXGFyZ3ZhbHVlbGlzdHsjMyxcbmlsQH0lCisgIFxkZWZcQHRlbXBheyMzfSUKKyAgXGlmeFxAdGVtcGFcZW1wdHkKKyAgICBcc2V0ZW1wdHlhcmd2YWx1ZXNACisgIFxlbHNlCisgICAgXGdldGFyZ3ZhbHNAQAorICBcZmkKK30KKworJSAKK1xkZWZcZ2V0YXJndmFsc0BAeyUKKyAgXGlmeFxwYXJhbWxpc3RcbmlsbUAKKyAgICAgICUgU29tZSBzYW5pdHkgY2hlY2sgbmVlZGVkIGhlcmUgdGhhdCBcYXJndmFsdWVsaXN0IGlzIGFsc28gZW1wdHkuCisgICAgICBcaWZ4XGFyZ3ZhbHVlbGlzdFxuaWxsbUAKKyAgICAgIFxlbHNlCisgICAgICAgIFxlcnJoZWxwID0gXEVNc2ltcGxlCisgICAgICAgIFxlcnJtZXNzYWdle1RvbyBtYW55IGFyZ3VtZW50cyBpbiBtYWNybyBgXG1hY3JvbmFtZSchfSUKKyAgICAgIFxmaQorICAgICAgXGxldFxuZXh0XG1hY2FyZ2V4cGFuZGluYm9keUAKKyAgXGVsc2UKKyAgICBcaWZ4XGFyZ3ZhbHVlbGlzdFxuaWxsbUAKKyAgICAgICAlIE5vIG1vcmUgYXJndW1lbnRzIHZhbHVlcyBwYXNzZWQgdG8gbWFjcm8uICBTZXQgcmVtYWluaW5nIG5hbWVkLWFyZworICAgICAgICUgbWFjcm9zIHRvIGVtcHR5LgorICAgICAgIFxsZXRcbmV4dFxzZXRlbXB0eWFyZ3ZhbHVlc0AKKyAgICBcZWxzZQorICAgICAgJSBwb3AgY3VycmVudCBhcmcgbmFtZSBpbnRvIFxAdGVtcGIKKyAgICAgIFxkZWZcQHRlbXBhIyMxe1xwb3BAe1xAdGVtcGJ9e1xwYXJhbWxpc3R9IyMxXGVuZGFyZ3NAfSUKKyAgICAgIFxleHBhbmRhZnRlclxAdGVtcGFcZXhwYW5kYWZ0ZXJ7XHBhcmFtbGlzdH0lCisgICAgICAgJSBwb3AgY3VycmVudCBhcmd1bWVudCB2YWx1ZSBpbnRvIFxAdGVtcGMKKyAgICAgIFxkZWZcQHRlbXBhIyMxe1xsb25ncG9wQHtcQHRlbXBjfXtcYXJndmFsdWVsaXN0fSMjMVxlbmRhcmdzQH0lCisgICAgICBcZXhwYW5kYWZ0ZXJcQHRlbXBhXGV4cGFuZGFmdGVye1xhcmd2YWx1ZWxpc3R9JQorICAgICAgICUgSGVyZSBcQHRlbXBiIGlzIHRoZSBjdXJyZW50IGFyZyBuYW1lIGFuZCBcQHRlbXBjIGlzIHRoZSBjdXJyZW50IGFyZyB2YWx1ZS4KKyAgICAgICAlIEZpcnN0IHBsYWNlIHRoZSBuZXcgYXJndW1lbnQgbWFjcm8gZGVmaW5pdGlvbiBpbnRvIFxAdGVtcGQKKyAgICAgICBcZXhwYW5kYWZ0ZXJcbWFjbmFtZVxleHBhbmRhZnRlcntcQHRlbXBjfSUKKyAgICAgICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBtYWNhcmcuXEB0ZW1wYlxlbmRjc25hbWVccmVsYXgKKyAgICAgICBcZXhwYW5kYWZ0ZXJcZGVmXGV4cGFuZGFmdGVyXEB0ZW1wZVxleHBhbmRhZnRlcnslCisgICAgICAgICBcY3NuYW1lIG1hY2FyZy5cQHRlbXBiXGVuZGNzbmFtZX0lCisgICAgICAgXGVkZWZcQHRlbXBke1xsb25nXGRlZlxAdGVtcGV7XHRoZVxtYWNuYW1lfX0lCisgICAgICAgXHB1c2hAXEB0ZW1wZFxtYWNhcmdkZWZsaXN0QAorICAgICAgIFxsZXRcbmV4dFxnZXRhcmd2YWxzQEAKKyAgICBcZmkKKyAgXGZpCisgIFxuZXh0Cit9CisKK1xkZWZccHVzaEAjMSMyeyUKKyAgXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyXGRlZgorICBcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXIjMiUKKyAgXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyeyUKKyAgXGV4cGFuZGFmdGVyIzEjMn0lCit9CisKKyUgUmVwbGFjZSBhcmd1bWVudHMgYnkgdGhlaXIgdmFsdWVzIGluIHRoZSBtYWNybyBib2R5LCBhbmQgcGxhY2UgdGhlIHJlc3VsdAorJSBpbiBtYWNybyBcQHRlbXBhCitcZGVmXG1hY3ZhbHN0b2FyZ3NAeyUKKyAgJSAgVG8gZG8gdGhpcyB3ZSB1c2UgdGhlIHByb3BlcnR5IHRoYXQgdG9rZW4gcmVnaXN0ZXJzIHRoYXQgYXJlIFx0aGUnZWQKKyAgJSB3aXRoaW4gYW4gXGVkZWYgIGV4cGFuZCBvbmx5IG9uY2UuIFNvIHdlIGFyZSBnb2luZyB0byBwbGFjZSBhbGwgYXJndW1lbnQKKyAgJSB2YWx1ZXMgaW50byByZXNwZWN0aXZlIHRva2VuIHJlZ2lzdGVycy4KKyAgJQorICAlIEZpcnN0IHdlIHNhdmUgdGhlIHRva2VuIGNvbnRleHQsIGFuZCBpbml0aWFsaXplIGFyZ3VtZW50IG51bWJlcmluZy4KKyAgXGJlZ2luZ3JvdXAKKyAgICBccGFyYW1ubzBccmVsYXgKKyAgICAlIFRoZW4sIGZvciBlYWNoIGFyZ3VtZW50IG51bWJlciAjTiwgd2UgcGxhY2UgdGhlIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQKKyAgICAlIHZhbHVlIGludG8gYSBuZXcgdG9rZW4gbGlzdCByZWdpc3RlciBcdG9rcyNOCisgICAgXGV4cGFuZGFmdGVyXHB1dGFyZ3NpbnRva2Vuc0Bcc2F2ZXBhcmFtbGlzdEAsOywlCisgICAgJSBUaGVuLCB3ZSBleHBhbmQgdGhlIGJvZHkgc28gdGhhdCBhcmd1bWVudCBhcmUgcmVwbGFjZWQgYnkgdGhlaXIKKyAgICAlIHZhbHVlcy4gVGhlIHRyaWNrIGZvciB2YWx1ZXMgbm90IHRvIGJlIGV4cGFuZGVkIHRoZW1zZWx2ZXMgaXMgdGhhdCB0aGV5CisgICAgJSBhcmUgd2l0aGluIHRva2VucyBhbmQgdGhhdCB0b2tlbnMgZXhwYW5kIG9ubHkgb25jZSBpbiBhbiBcZWRlZiAuCisgICAgXGVkZWZcQHRlbXBje1xjc25hbWUgbWFjLlxtYWNyb25hbWUgLmJvZHlcZW5kY3NuYW1lfSUKKyAgICAlIE5vdyB3ZSByZXN0b3JlIHRoZSB0b2tlbiBzdGFjayBwb2ludGVyIHRvIGZyZWUgdGhlIHRva2VuIGxpc3QgcmVnaXN0ZXJzCisgICAgJSB3aGljaCB3ZSBoYXZlIHVzZWQsIGJ1dCB3ZSBtYWtlIHN1cmUgdGhhdCBleHBhbmRlZCBib2R5IGlzIHNhdmVkIGFmdGVyCisgICAgJSBncm91cC4KKyAgICBcZXhwYW5kYWZ0ZXIKKyAgXGVuZGdyb3VwCisgIFxleHBhbmRhZnRlclxkZWZcZXhwYW5kYWZ0ZXJcQHRlbXBhXGV4cGFuZGFmdGVye1xAdGVtcGN9JQorICB9CisKK1xkZWZcbWFjYXJnZXhwYW5kaW5ib2R5QHslIAorICAlJSBEZWZpbmUgdGhlIG5hbWVkLW1hY3JvIG91dHNpZGUgb2YgdGhpcyBncm91cCBhbmQgdGhlbiBjbG9zZSB0aGlzIGdyb3VwLiAKKyAgXGV4cGFuZGFmdGVyCisgIFxlbmRncm91cAorICBcbWFjYXJnZGVmbGlzdEAKKyAgJSBGaXJzdCB0aGUgcmVwbGFjZSBpbiBib2R5IHRoZSBtYWNybyBhcmd1bWVudHMgYnkgdGhlaXIgdmFsdWVzLCB0aGUgcmVzdWx0CisgICUgaXMgaW4gXEB0ZW1wYSAuCisgIFxtYWN2YWxzdG9hcmdzQAorICAlIFRoZW4gd2UgcG9pbnQgYXQgdGhlIFxub3JlY3Vyc2Ugb3IgXGdvYmJsZSAoZm9yIHJlY3Vyc2l2ZSkgbWFjcm8gdmFsdWUKKyAgJSB3aXRoIFxAdGVtcGIgLgorICBcZXhwYW5kYWZ0ZXJcbGV0XGV4cGFuZGFmdGVyXEB0ZW1wYlxjc25hbWUgbWFjLlxtYWNyb25hbWUgLnJlY3Vyc2VcZW5kY3NuYW1lCisgICUgRGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQgaXMgcmVjdXJzaXZlIG9yIG5vdCwgd2UgbmVlZCBzb21lIHRhaWxpbmcKKyAgJSBcZWdyb3VwIC4KKyAgXGlmeFxAdGVtcGJcZ29iYmxlCisgICAgIFxsZXRcQHRlbXBjXHJlbGF4CisgIFxlbHNlCisgICAgIFxsZXRcQHRlbXBjXGVncm91cAorICBcZmkKKyAgJSBBbmQgbm93IHdlIGRvIHRoZSByZWFsIGpvYjoKKyAgXGVkZWZcQHRlbXBke1xub2V4cGFuZFxAdGVtcGJ7XG1hY3JvbmFtZX1cbm9leHBhbmRcc2Nhbm1hY3Jve1xAdGVtcGF9XEB0ZW1wY30lCisgIFxAdGVtcGQKK30KKworXGRlZlxwdXRhcmdzaW50b2tlbnNAIzEseyUKKyAgXGlmIzE7XGxldFxuZXh0XHJlbGF4CisgIFxlbHNlCisgICAgXGxldFxuZXh0XHB1dGFyZ3NpbnRva2Vuc0AKKyAgICAlIEZpcnN0IHdlIGFsbG9jYXRlIHRoZSBuZXcgdG9rZW4gbGlzdCByZWdpc3RlciwgYW5kIGdpdmUgaXQgYSB0ZW1wb3JhcnkKKyAgICAlIGFsaWFzIFxAdGVtcGIgLgorICAgIFx0b2tzZGVmXEB0ZW1wYlx0aGVccGFyYW1ubworICAgICUgVGhlbiB3ZSBwbGFjZSB0aGUgYXJndW1lbnQgdmFsdWUgaW50byB0aGF0IHRva2VuIGxpc3QgcmVnaXN0ZXIuCisgICAgXGV4cGFuZGFmdGVyXGxldFxleHBhbmRhZnRlclxAdGVtcGFcY3NuYW1lIG1hY2FyZy4jMVxlbmRjc25hbWUKKyAgICBcZXhwYW5kYWZ0ZXJcQHRlbXBiXGV4cGFuZGFmdGVye1xAdGVtcGF9JQorICAgIFxhZHZhbmNlXHBhcmFtbm8gYnkgMVxyZWxheAorICBcZmkKKyAgXG5leHQKK30KKworJSBTYXZlIHRoZSB0b2tlbiBzdGFjayBwb2ludGVyIGludG8gbWFjcm8gIzEKK1xkZWZcdGV4aXNhdmV0b2tzc3RhY2twb2ludCMxe1xlZGVmIzF7XHRoZVxAY2Nsdml9fQorJSBSZXN0b3JlIHRoZSB0b2tlbiBzdGFjayBwb2ludGVyIGZyb20gbnVtYmVyIGluIG1hY3JvICMxCitcZGVmXHRleGlyZXN0b3JldG9rc3N0YWNrcG9pbnQjMXtcZXhwYW5kYWZ0ZXJcbWF0aGNoYXJkZWZcZXhwYW5kYWZ0ZXJcQGNjbHZpIzFccmVsYXh9CislIG5ld3Rva3MgdGhhdCBjYW4gYmUgdXNlZCBub24gXG91dGVyIC4KK1xkZWZcdGV4aW5vbm91dGVybmV3dG9rc3tcYWxsb2NAIDVcdG9rcyBcdG9rc2RlZiBcQGNjbHZpfQorCislIFRhaWxpbmcgbWlzc2luZyBhcmd1bWVudHMgYXJlIHNldCB0byBlbXB0eQorXGRlZlxzZXRlbXB0eWFyZ3ZhbHVlc0B7JQorICBcaWZ4XHBhcmFtbGlzdFxuaWxtQAorICAgIFxsZXRcbmV4dFxtYWNhcmdleHBhbmRpbmJvZHlACisgIFxlbHNlCisgICAgXGV4cGFuZGFmdGVyXHNldGVtcHR5YXJndmFsdWVzcGFyc2VyQFxwYXJhbWxpc3RcZW5kYXJnc0AKKyAgICBcbGV0XG5leHRcc2V0ZW1wdHlhcmd2YWx1ZXNACisgIFxmaQorICBcbmV4dAorfQorCitcZGVmXHNldGVtcHR5YXJndmFsdWVzcGFyc2VyQCMxLCMyXGVuZGFyZ3NAeyUKKyAgXGV4cGFuZGFmdGVyXGRlZlxleHBhbmRhZnRlclxAdGVtcGFcZXhwYW5kYWZ0ZXJ7JQorICAgIFxleHBhbmRhZnRlclxkZWZcY3NuYW1lIG1hY2FyZy4jMVxlbmRjc25hbWV7fX0lCisgIFxwdXNoQFxAdGVtcGFcbWFjYXJnZGVmbGlzdEAKKyAgXGRlZlxwYXJhbWxpc3R7IzJ9JQorfQorCislICMxIGlzIHRoZSBlbGVtZW50IHRhcmdldCBtYWNybworJSAjMiBpcyB0aGUgbGlzdCBtYWNybworJSAjMywjNFxlbmRhcmdzQCBpcyB0aGUgbGlzdCB2YWx1ZQorXGRlZlxwb3BAIzEjMiMzLCM0XGVuZGFyZ3NAeyUKKyAgIFxkZWYjMXsjM30lCisgICBcZGVmIzJ7IzR9JQorfQorXGxvbmdcZGVmXGxvbmdwb3BAIzEjMiMzLCM0XGVuZGFyZ3NAeyUKKyAgIFxsb25nXGRlZiMxeyMzfSUKKyAgIFxsb25nXGRlZiMyeyM0fSUKK30KKworJSBUaGlzIGRlZmluZXMgYSBUZXhpbmZvIEBtYWNyby4gVGhlcmUgYXJlIGVpZ2h0IGNhc2VzOiByZWN1cnNpdmUgYW5kCislIG5vbnJlY3Vyc2l2ZSBtYWNyb3Mgb2YgemVybywgb25lLCB1cCB0byBuaW5lLCBhbmQgbWFueSBhcmd1bWVudHMuCiAlIE11Y2ggbWFnaWMgd2l0aCBcZXhwYW5kYWZ0ZXIgaGVyZS4KICUgXHhkZWYgaXMgdXNlZCBzbyB0aGF0IG1hY3JvIGRlZmluaXRpb25zIHdpbGwgc3Vydml2ZSB0aGUgZmlsZQogJSB0aGV5J3JlIGRlZmluZWQgaW47IEBpbmNsdWRlIHJlYWRzIHRoZSBmaWxlIGluc2lkZSBhIGdyb3VwLgorJQogXGRlZlxkZWZtYWNyb3slCiAgIFxsZXRcaGFzaD0jIyUgY29udmVydCBwbGFjZWhvbGRlcnMgdG8gbWFjcm8gcGFyYW1ldGVyIGNoYXJzCiAgIFxpZnJlY3Vyc2l2ZQpAQCAtNTg2NiwxNyArNzY5MSwyNSBAQAogICAgICAgICAgXGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lfSUKICAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lIyMxeyUKICAgICAgICAgIFxlZ3JvdXBcbm9leHBhbmRcc2Nhbm1hY3Jve1x0ZW1wfX0lCi0gICAgXGVsc2UgJSBtYW55Ci0gICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWVcZW5kY3NuYW1leyUKLSAgICAgICAgIFxiZ3JvdXBcbm9leHBhbmRcbWFjcm9hcmdjdHh0Ci0gICAgICAgICBcbm9leHBhbmRcY3NuYW1lXHRoZVxtYWNuYW1lIHh4XGVuZGNzbmFtZX0lCi0gICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWUgeHhcZW5kY3NuYW1lIyMxeyUKLSAgICAgICAgICBcZXhwYW5kYWZ0ZXJcbm9leHBhbmRcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWUgIyMxLH0lCi0gICAgICBcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXIKLSAgICAgIFxleHBhbmRhZnRlclx4ZGVmCi0gICAgICBcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXIKLSAgICAgICAgXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lCi0gICAgICAgICAgXHBhcmFtbGlzdHtcZWdyb3VwXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH19JQorICAgIFxlbHNlCisgICAgICBcaWZudW1ccGFyYW1ubzwxMFxyZWxheCAlIGF0IG1vc3QgOQorICAgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWVcZW5kY3NuYW1leyUKKyAgICAgICAgICAgXGJncm91cFxub2V4cGFuZFxtYWNyb2FyZ2N0eHQKKyAgICAgICAgICAgXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZSB4eFxlbmRjc25hbWV9JQorICAgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWUgeHhcZW5kY3NuYW1lIyMxeyUKKyAgICAgICAgICAgIFxleHBhbmRhZnRlclxub2V4cGFuZFxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZSAjIzEsfSUKKyAgICAgICAgXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyCisgICAgICAgIFxleHBhbmRhZnRlclx4ZGVmCisgICAgICAgIFxleHBhbmRhZnRlclxleHBhbmRhZnRlcgorICAgICAgICAgIFxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZQorICAgICAgICAgICAgXHBhcmFtbGlzdHtcZWdyb3VwXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH19JQorICAgICAgXGVsc2UgJSAxMCBvciBtb3JlCisgICAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZVxlbmRjc25hbWV7JQorICAgICAgICAgIFxub2V4cGFuZFxnZXRhcmd2YWxzQHtcdGhlXG1hY25hbWV9e1xhcmdsfSUKKyAgICAgICAgfSUgICAgCisgICAgICAgIFxnbG9iYWxcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBtYWMuXHRoZVxtYWNuYW1lIC5ib2R5XGVuZGNzbmFtZVx0ZW1wCisgICAgICAgIFxnbG9iYWxcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBtYWMuXHRoZVxtYWNuYW1lIC5yZWN1cnNlXGVuZGNzbmFtZVxnb2JibGUKKyAgICAgIFxmaQogICAgIFxmaQogICBcZWxzZQogICAgIFxpZmNhc2VccGFyYW1ubwpAQCAtNTg5MywzOSArNzcyNiw1MSBAQAogICAgICAgICBcZWdyb3VwCiAgICAgICAgIFxub2V4cGFuZFxub3JlY3Vyc2V7XHRoZVxtYWNuYW1lfSUKICAgICAgICAgXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH1cZWdyb3VwfSUKLSAgICBcZWxzZSAlIG1hbnkKLSAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZVxlbmRjc25hbWV7JQotICAgICAgICAgXGJncm91cFxub2V4cGFuZFxtYWNyb2FyZ2N0eHQKLSAgICAgICAgIFxleHBhbmRhZnRlclxub2V4cGFuZFxjc25hbWVcdGhlXG1hY25hbWUgeHhcZW5kY3NuYW1lfSUKLSAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZSB4eFxlbmRjc25hbWUjIzF7JQotICAgICAgICAgIFxleHBhbmRhZnRlclxub2V4cGFuZFxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZSAjIzEsfSUKLSAgICAgIFxleHBhbmRhZnRlclxleHBhbmRhZnRlcgotICAgICAgXGV4cGFuZGFmdGVyXHhkZWYKLSAgICAgIFxleHBhbmRhZnRlclxleHBhbmRhZnRlcgotICAgICAgXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lCi0gICAgICBccGFyYW1saXN0eyUKLSAgICAgICAgICBcZWdyb3VwCi0gICAgICAgICAgXG5vZXhwYW5kXG5vcmVjdXJzZXtcdGhlXG1hY25hbWV9JQotICAgICAgICAgIFxub2V4cGFuZFxzY2FubWFjcm97XHRlbXB9XGVncm91cH0lCisgICAgXGVsc2UgJSBhdCBtb3N0IDkKKyAgICAgIFxpZm51bVxwYXJhbW5vPDEwXHJlbGF4CisgICAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZVxlbmRjc25hbWV7JQorICAgICAgICAgICBcYmdyb3VwXG5vZXhwYW5kXG1hY3JvYXJnY3R4dAorICAgICAgICAgICBcZXhwYW5kYWZ0ZXJcbm9leHBhbmRcY3NuYW1lXHRoZVxtYWNuYW1lIHh4XGVuZGNzbmFtZX0lCisgICAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZSB4eFxlbmRjc25hbWUjIzF7JQorICAgICAgICAgICAgXGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lICMjMSx9JQorICAgICAgICBcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXIKKyAgICAgICAgXGV4cGFuZGFmdGVyXHhkZWYKKyAgICAgICAgXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyCisgICAgICAgIFxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZQorICAgICAgICBccGFyYW1saXN0eyUKKyAgICAgICAgICAgIFxlZ3JvdXAKKyAgICAgICAgICAgIFxub2V4cGFuZFxub3JlY3Vyc2V7XHRoZVxtYWNuYW1lfSUKKyAgICAgICAgICAgIFxub2V4cGFuZFxzY2FubWFjcm97XHRlbXB9XGVncm91cH0lCisgICAgICBcZWxzZSAlIDEwIG9yIG1vcmU6CisgICAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZVxlbmRjc25hbWV7JQorICAgICAgICAgIFxub2V4cGFuZFxnZXRhcmd2YWxzQHtcdGhlXG1hY25hbWV9e1xhcmdsfSUKKyAgICAgICAgfSUKKyAgICAgICAgXGdsb2JhbFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIG1hYy5cdGhlXG1hY25hbWUgLmJvZHlcZW5kY3NuYW1lXHRlbXAKKyAgICAgICAgXGdsb2JhbFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIG1hYy5cdGhlXG1hY25hbWUgLnJlY3Vyc2VcZW5kY3NuYW1lXG5vcmVjdXJzZQorICAgICAgXGZpCiAgICAgXGZpCiAgIFxmaX0KIAorXGNhdGNvZGUgYFxAXHRleGlhdGNhdGNvZGVccmVsYXgKKwogXGRlZlxub3JlY3Vyc2UjMXtcYmdyb3VwXGNzbGV0eyMxfXttYWNzYXZlLiMxfX0KIAogJSBcYnJhY2VvcmxpbmUgZGVjaWRlcyB3aGV0aGVyIHRoZSBuZXh0IG5vbndoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIGEKICUgey4gIElmIHNvIGl0IHJlYWRzIHVwIHRvIHRoZSBjbG9zaW5nIH0sIGlmIG5vdCwgaXQgcmVhZHMgdGhlIHdob2xlCiAlIGxpbmUuICBXaGF0ZXZlciB3YXMgcmVhZCBpcyB0aGVuIGZlZCB0byB0aGUgbmV4dCBjb250cm9sIHNlcXVlbmNlCi0lIGFzIGFuIGFyZ3VtZW50IChieSBccGFyc2VicmFjZSBvciBccGFyc2VhcmcpCi1cZGVmXGJyYWNlb3JsaW5lIzF7XGxldFxuZXh0PSMxXGZ1dHVyZWxldFxuY2hhclxicmFjZW9ybGluZXh4eH0KKyUgYXMgYW4gYXJndW1lbnQgKGJ5IFxwYXJzZWJyYWNlIG9yIFxwYXJzZWFyZykuCislIAorXGRlZlxicmFjZW9ybGluZSMxe1xsZXRcbWFjbmFtZXh4eD0jMVxmdXR1cmVsZXRcbmNoYXJcYnJhY2VvcmxpbmV4eHh9CiBcZGVmXGJyYWNlb3JsaW5leHh4eyUKICAgXGlmeFxuY2hhclxiZ3JvdXBcZWxzZQogICAgIFxleHBhbmRhZnRlclxwYXJzZWFyZwotICBcZmkgXG5leHR9CisgIFxmaSBcbWFjbmFtZXh4eH0KIAogCiAlIEBhbGlhcy4KICUgV2UgbmVlZCBzb21lIHRyaWNrZXJ5IHRvIHJlbW92ZSB0aGUgb3B0aW9uYWwgc3BhY2VzIGFyb3VuZCB0aGUgZXF1YWwKLSUgc2lnbi4gIEp1c3QgbWFrZSB0aGVtIGFjdGl2ZSBhbmQgdGhlbiBleHBhbmQgdGhlbSBhbGwgdG8gbm90aGluZy4KKyUgc2lnbi4gIE1ha2UgdGhlbSBhY3RpdmUgYW5kIHRoZW4gZXhwYW5kIHRoZW0gYWxsIHRvIG5vdGhpbmcuCislCiBcZGVmXGFsaWFze1xwYXJzZWFyZ3VzaW5nXG9iZXlzcGFjZXNcYWxpYXN4eHh9CiBcZGVmXGFsaWFzeHh4ICMxe1xhbGlhc3l5eSMxXHJlbGF4fQogXGRlZlxhbGlhc3l5eSAjMT0jMlxyZWxheHslCkBAIC01OTQxLDEzICs3Nzg2LDEzIEBACiBcbWVzc2FnZXtjcm9zcyByZWZlcmVuY2VzLH0KIAogXG5ld3dyaXRlXGF1eGZpbGUKLQogXG5ld2lmXGlmaGF2ZXhyZWZzICAgICUgVHJ1ZSBpZiB4cmVmIHZhbHVlcyBhcmUga25vd24uCiBcbmV3aWZcaWZ3YXJuZWR4cmVmcyAgJSBUcnVlIGlmIHdlIHdhcm5lZCBvbmNlIHRoYXQgdGhleSBhcmVuJ3Qga25vd24uCiAKICUgQGluZm9yZWYgaXMgcmVsYXRpdmVseSBzaW1wbGUuCiBcZGVmXGluZm9yZWYgIzF7XGluZm9yZWZ6enogIzEsLCwsKip9Ci1cZGVmXGluZm9yZWZ6enogIzEsIzIsIzMsIzQqKntccHV0d29yZFNlZXt9IFxwdXR3b3JkSW5mb3t9IFxwdXR3b3JkZmlsZXt9IFxmaWxle1xpZ25vcmVzcGFjZXMgIzN7fX0sCitcZGVmXGluZm9yZWZ6enogIzEsIzIsIzMsIzQqKnslCisgIFxwdXR3b3JkU2Vle30gXHB1dHdvcmRJbmZve30gXHB1dHdvcmRmaWxle30gXGZpbGV7XGlnbm9yZXNwYWNlcyAjM3t9fSwKICAgbm9kZSBcc2FtcHtcaWdub3Jlc3BhY2VzIzF7fX19CiAKICUgQG5vZGUncyBvbmx5IGpvYiBpbiBUZVggaXMgdG8gZGVmaW5lIFxsYXN0bm9kZSwgd2hpY2ggaXMgdXNlZCBpbgpAQCAtNTk4Niw3ICs3ODMxLDcgQEAKIAogJSBcc2V0cmVme05BTUV9e1NOVH0gZGVmaW5lcyBhIGNyb3NzLXJlZmVyZW5jZSBwb2ludCBOQU1FIChhIG5vZGUgb3IgYW4KICUgYW5jaG9yKSwgd2hpY2ggY29uc2lzdHMgb2YgdGhyZWUgcGFydHM6Ci0lIDEpIE5BTUUtdGl0bGUgLSB0aGUgY3VycmVudCBzZWN0aW9uaW5nIG5hbWUgdGFrZW4gZnJvbSBcdGhpc3NlY3Rpb24sCislIDEpIE5BTUUtdGl0bGUgLSB0aGUgY3VycmVudCBzZWN0aW9uaW5nIG5hbWUgdGFrZW4gZnJvbSBcbGFzdHNlY3Rpb24sCiAlICAgICAgICAgICAgICAgICBvciB0aGUgYW5jaG9yIG5hbWUuCiAlIDIpIE5BTUUtc250ICAgLSBzZWN0aW9uIG51bWJlciBhbmQgdHlwZSwgcGFzc2VkIGFzIHRoZSBTTlQgYXJnLCBvcgogJSAgICAgICAgICAgICAgICAgZW1wdHkgZm9yIGFuY2hvcnMuCkBAIC02MDA1LDE0ICs3ODUwLDM1IEBACiAJXHdyaXRlXGF1eGZpbGV7QHhyZGVmeyMxLSUgIzEgb2YgXHNldHJlZiwgZXhwYW5kZWQgYnkgdGhlIFxlZGVmCiAJICAjIzF9eyMjMn19JSB0aGVzZSBhcmUgcGFyYW1ldGVycyBvZiBcd3JpdGV4cmRlZgogICAgICAgfSUKLSAgICAgIFx0b2tzMCA9IFxleHBhbmRhZnRlcntcdGhpc3NlY3Rpb259JQorICAgICAgXHRva3MwID0gXGV4cGFuZGFmdGVye1xsYXN0c2VjdGlvbn0lCiAgICAgICBcaW1tZWRpYXRlIFx3cml0ZXhyZGVme3RpdGxlfXtcdGhlXHRva3MwIH0lCiAgICAgICBcaW1tZWRpYXRlIFx3cml0ZXhyZGVme3NudH17XGNzbmFtZSAjMlxlbmRjc25hbWV9JSBcWW51bWJlcmVkIGV0Yy4KLSAgICAgIFx3cml0ZXhyZGVme3BnfXtcZm9saW99JSB3aWxsIGJlIHdyaXR0ZW4gbGF0ZXIsIGR1cmluZyBcc2hpcG91dAorICAgICAgXHNhZmV3aGF0c2l0e1x3cml0ZXhyZGVme3BnfXtcZm9saW99fSUgd2lsbCBiZSB3cml0dGVuIGxhdGVyLCBhdCBcc2hpcG91dAogICAgIH0lCiAgIFxmaQogfQogCislIEB4cmVmYXV0b3NlY3Rpb250aXRsZSBvbnxvZmYgc2F5cyB3aGV0aGVyIEBzZWN0aW9uKGluZykgbmFtZXMgYXJlIHVzZWQKKyUgYXV0b21hdGljYWxseSBpbiB4cmVmcywgaWYgdGhlIHRoaXJkIGFyZyBpcyBub3QgZXhwbGljaXRseSBzcGVjaWZpZWQuCislIFRoaXMgd2FzIHByb3ZpZGVkIGFzIGEgInNlY3JldCIgQHNldCB4cmVmLWF1dG9tYXRpYy1zZWN0aW9uLXRpdGxlCislIHZhcmlhYmxlLCBub3cgaXQncyBvZmZpY2lhbC4KKyUgCitccGFyc2VhcmdkZWZceHJlZmF1dG9tYXRpY3NlY3Rpb250aXRsZXslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGVtcFxvbndvcmQKKyAgICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBTRVR4cmVmLWF1dG9tYXRpYy1zZWN0aW9uLXRpdGxlXGVuZGNzbmFtZQorICAgICAgPSBcZW1wdHkKKyAgXGVsc2VcaWZ4XHRlbXBcb2Zmd29yZAorICAgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIFNFVHhyZWYtYXV0b21hdGljLXNlY3Rpb24tdGl0bGVcZW5kY3NuYW1lCisgICAgICA9IFxyZWxheAorICBcZWxzZQorICAgIFxlcnJoZWxwID0gXEVNc2ltcGxlCisgICAgXGVycm1lc3NhZ2V7VW5rbm93biBAeHJlZmF1dG9tYXRpY3NlY3Rpb250aXRsZSB2YWx1ZSBgXHRlbXAnLAorICAgICAgICAgICAgICAgIG11c3QgYmUgb258b2ZmfSUKKyAgXGZpXGZpCit9CisKKyUgDAogJSBAeHJlZiwgQHB4cmVmLCBhbmQgQHJlZiBnZW5lcmF0ZSBjcm9zcy1yZWZlcmVuY2VzLiAgRm9yIFx4cmVmWCwgIzEgaXMKICUgdGhlIG5vZGUgbmFtZSwgIzIgdGhlIG5hbWUgb2YgdGhlIEluZm8gY3Jvc3MtcmVmZXJlbmNlLCAjMyB0aGUgcHJpbnRlZAogJSBub2RlIG5hbWUsICM0IHRoZSBuYW1lIG9mIHRoZSBJbmZvIGZpbGUsICM1IHRoZSBuYW1lIG9mIHRoZSBwcmludGVkCkBAIC02MDIxLDI2ICs3ODg3LDQxIEBACiBcZGVmXHB4cmVmIzF7XHB1dHdvcmRzZWV7fSBceHJlZlhbIzEsLCwsLCwsXX0KIFxkZWZceHJlZiMxe1xwdXR3b3JkU2Vle30gXHhyZWZYWyMxLCwsLCwsLF19CiBcZGVmXHJlZiMxe1x4cmVmWFsjMSwsLCwsLCxdfQorJQorXG5ld2JveFx0b3ByZWZib3gKK1xuZXdib3hccHJpbnRlZHJlZm5hbWVib3gKK1xuZXdib3hcaW5mb2ZpbGVuYW1lYm94CitcbmV3Ym94XHByaW50ZWRtYW51YWxib3gKKyUKIFxkZWZceHJlZlhbIzEsIzIsIzMsIzQsIzUsIzZde1xiZWdpbmdyb3VwCiAgIFx1bnNlcHNwYWNlcwotICBcZGVmXHByaW50ZWRtYW51YWx7XGlnbm9yZXNwYWNlcyAjNX0lCisgICUKKyAgJSBHZXQgYXJncyB3aXRob3V0IGxlYWRpbmcvdHJhaWxpbmcgc3BhY2VzLgogICBcZGVmXHByaW50ZWRyZWZuYW1le1xpZ25vcmVzcGFjZXMgIzN9JQotICBcc2V0Ym94MT1caGJveHtccHJpbnRlZG1hbnVhbFx1bnNraXB9JQotICBcc2V0Ym94MD1caGJveHtccHJpbnRlZHJlZm5hbWVcdW5za2lwfSUKLSAgXGlmZGltIFx3ZDAgPSAwcHQKKyAgXHNldGJveFxwcmludGVkcmVmbmFtZWJveCA9IFxoYm94e1xwcmludGVkcmVmbmFtZVx1bnNraXB9JQorICAlCisgIFxkZWZcaW5mb2ZpbGVuYW1le1xpZ25vcmVzcGFjZXMgIzR9JQorICBcc2V0Ym94XGluZm9maWxlbmFtZWJveCA9IFxoYm94e1xpbmZvZmlsZW5hbWVcdW5za2lwfSUKKyAgJQorICBcZGVmXHByaW50ZWRtYW51YWx7XGlnbm9yZXNwYWNlcyAjNX0lCisgIFxzZXRib3hccHJpbnRlZG1hbnVhbGJveCAgPSBcaGJveHtccHJpbnRlZG1hbnVhbFx1bnNraXB9JQorICAlCisgICUgSWYgdGhlIHByaW50ZWQgcmVmZXJlbmNlIG5hbWUgKGFyZyAjMykgd2FzIG5vdCBleHBsaWNpdGx5IGdpdmVuIGluCisgICUgdGhlIEB4cmVmLCBmaWd1cmUgb3V0IHdoYXQgd2Ugd2FudCB0byB1c2UuCisgIFxpZmRpbSBcd2RccHJpbnRlZHJlZm5hbWVib3ggPSAwcHQKICAgICAlIE5vIHByaW50ZWQgbm9kZSBuYW1lIHdhcyBleHBsaWNpdGx5IGdpdmVuLgotICAgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIFNFVHhyZWYtYXV0b21hdGljLXNlY3Rpb24tdGl0bGVcZW5kY3NuYW1lXHJlbGF4Ci0gICAgICAlIFVzZSB0aGUgbm9kZSBuYW1lIGluc2lkZSB0aGUgc3F1YXJlIGJyYWNrZXRzLgorICAgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIFNFVHhyZWYtYXV0b21hdGljLXNlY3Rpb24tdGl0bGVcZW5kY3NuYW1lIFxyZWxheAorICAgICAgJSBOb3QgYXV0byBzZWN0aW9uLXRpdGxlOiB1c2Ugbm9kZSBuYW1lIGluc2lkZSB0aGUgc3F1YXJlIGJyYWNrZXRzLgogICAgICAgXGRlZlxwcmludGVkcmVmbmFtZXtcaWdub3Jlc3BhY2VzICMxfSUKICAgICBcZWxzZQotICAgICAgJSBVc2UgdGhlIGFjdHVhbCBjaGFwdGVyL3NlY3Rpb24gdGl0bGUgYXBwZWFyIGluc2lkZQotICAgICAgJSB0aGUgc3F1YXJlIGJyYWNrZXRzLiAgVXNlIHRoZSByZWFsIHNlY3Rpb24gdGl0bGUgaWYgd2UgaGF2ZSBpdC4KLSAgICAgIFxpZmRpbSBcd2QxID4gMHB0Ci0gICAgICAgICUgSXQgaXMgaW4gYW5vdGhlciBtYW51YWwsIHNvIHdlIGRvbid0IGhhdmUgaXQuCisgICAgICAlIEF1dG8gc2VjdGlvbi10aXRsZTogdXNlIGNoYXB0ZXIvc2VjdGlvbiB0aXRsZSBpbnNpZGUKKyAgICAgICUgdGhlIHNxdWFyZSBicmFja2V0cyBpZiB3ZSBoYXZlIGl0LgorICAgICAgXGlmZGltIFx3ZFxwcmludGVkbWFudWFsYm94ID4gMHB0CisgICAgICAgICUgSXQgaXMgaW4gYW5vdGhlciBtYW51YWwsIHNvIHdlIGRvbid0IGhhdmUgaXQ7IHVzZSBub2RlIG5hbWUuCiAgICAgICAgIFxkZWZccHJpbnRlZHJlZm5hbWV7XGlnbm9yZXNwYWNlcyAjMX0lCiAgICAgICBcZWxzZQogICAgICAgICBcaWZoYXZleHJlZnMKLSAgICAgICAgICAlIFdlIGtub3cgdGhlIHJlYWwgdGl0bGUgaWYgd2UgaGF2ZSB0aGUgeHJlZiB2YWx1ZXMuCisgICAgICAgICAgJSBXZSAoc2hvdWxkKSBrbm93IHRoZSByZWFsIHRpdGxlIGlmIHdlIGhhdmUgdGhlIHhyZWYgdmFsdWVzLgogICAgICAgICAgIFxkZWZccHJpbnRlZHJlZm5hbWV7XHJlZnh7IzEtdGl0bGV9e319JQogICAgICAgICBcZWxzZQogICAgICAgICAgICUgT3RoZXJ3aXNlIGp1c3QgY29weSB0aGUgSW5mbyBub2RlIG5hbWUuCkBAIC02MDUyLDIyICs3OTMzLDMyIEBACiAgICUKICAgJSBNYWtlIGxpbmsgaW4gcGRmIG91dHB1dC4KICAgXGlmcGRmCi0gICAgXGxlYXZldm1vZGUKLSAgICBcZ2V0ZmlsZW5hbWV7IzR9JQotICAgIHtcdHVybm9mZmFjdGl2ZQotICAgICAlIFNlZSBjb21tZW50cyBhdCBcYWN0aXZlYmFja3NsYXNoZG91YmxlLgotICAgICB7XGFjdGl2ZWJhY2tzbGFzaGRvdWJsZSBceGRlZlxwZGZ4cmVmZGVzdHsjMX0lCi0gICAgICBcYmFja3NsYXNocGFyZW5zXHBkZnhyZWZkZXN0fSUKKyAgICB7XGluZGV4bm9mb250cworICAgICBcdHVybm9mZmFjdGl2ZQorICAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorICAgICAlIFRoaXMgZXhwYW5kcyB0b2tlbnMsIHNvIGRvIGl0IGFmdGVyIG1ha2luZyBjYXRjb2RlIGNoYW5nZXMsIHNvIF8KKyAgICAgJSBldGMuIGRvbid0IGdldCB0aGVpciBUZVggZGVmaW5pdGlvbnMuICBUaGlzIGlnbm9yZXMgYWxsIHNwYWNlcyBpbgorICAgICAlICM0LCBpbmNsdWRpbmcgKHdyb25nbHkpIHRob3NlIGluIHRoZSBtaWRkbGUgb2YgdGhlIGZpbGVuYW1lLgorICAgICBcZ2V0ZmlsZW5hbWV7IzR9JQogICAgICAlCi0gICAgIFxpZm51bVxmaWxlbmFtZWxlbmd0aD4wCi0gICAgICAgXHN0YXJ0bGluayBhdHRyey9Cb3JkZXIgWzAgMCAwXX0lCi0gICAgICAgICBnb3RvIGZpbGV7XHRoZVxmaWxlbmFtZS5wZGZ9IG5hbWV7XHBkZnhyZWZkZXN0fSUKKyAgICAgJSBUaGlzICh3cm9uZ2x5KSBkb2VzIG5vdCB0YWtlIGFjY291bnQgb2YgbGVhZGluZyBvciB0cmFpbGluZworICAgICAlIHNwYWNlcyBpbiAjMSwgd2hpY2ggc2hvdWxkIGJlIGlnbm9yZWQuCisgICAgIFxlZGVmXHBkZnhyZWZkZXN0eyMxfSUKKyAgICAgXGlmeFxwZGZ4cmVmZGVzdFxlbXB0eQorICAgICAgIFxkZWZccGRmeHJlZmRlc3R7VG9wfSUgbm8gZW1wdHkgdGFyZ2V0cwogICAgICBcZWxzZQotICAgICAgIFxzdGFydGxpbmsgYXR0cnsvQm9yZGVyIFswIDAgMF19JQotICAgICAgICAgZ290byBuYW1le1xwZGZta3BnbntccGRmeHJlZmRlc3R9fSUKKyAgICAgICBcdHhpZXNjYXBlcGRmXHBkZnhyZWZkZXN0ICAlIGVzY2FwZSBQREYgc3BlY2lhbCBjaGFycworICAgICBcZmkKKyAgICAgJQorICAgICBcbGVhdmV2bW9kZQorICAgICBcc3RhcnRsaW5rIGF0dHJ7L0JvcmRlciBbMCAwIDBdfSUKKyAgICAgXGlmbnVtXGZpbGVuYW1lbGVuZ3RoPjAKKyAgICAgICBnb3RvIGZpbGV7XHRoZVxmaWxlbmFtZS5wZGZ9IG5hbWV7XHBkZnhyZWZkZXN0fSUKKyAgICAgXGVsc2UKKyAgICAgICBnb3RvIG5hbWV7XHBkZm1rcGdue1xwZGZ4cmVmZGVzdH19JQogICAgICBcZmkKICAgICB9JQotICAgIFxsaW5rY29sb3IKKyAgICBcc2V0Y29sb3J7XGxpbmtjb2xvcn0lCiAgIFxmaQogICAlCiAgICUgRmxvYXQgcmVmZXJlbmNlcyBhcmUgcHJpbnRlZCBjb21wbGV0ZWx5IGRpZmZlcmVudGx5OiAiRmlndXJlIDEuMiIKQEAgLTYwODQsMjkgKzc5NzUsNDIgQEAKICAgXGlmZmxvYXRcWHRoaXNyZWZ0aXRsZQogICAgICUgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIHRoZSBwcmludCBuYW1lICh0aGlyZCBhcmcpIHRvIHRoZSByZWYsCiAgICAgJSBwcmludCBpdCBpbnN0ZWFkIG9mIG91ciB1c3VhbCAiRmlndXJlIDEuMiIuCi0gICAgXGlmZGltXHdkMCA9IDBwdAotICAgICAgXHJlZnh7IzEtc250fSUKKyAgICBcaWZkaW1cd2RccHJpbnRlZHJlZm5hbWVib3ggPSAwcHQKKyAgICAgIFxyZWZ4eyMxLXNudH17fSUKICAgICBcZWxzZQogICAgICAgXHByaW50ZWRyZWZuYW1lCiAgICAgXGZpCiAgICAgJQotICAgICUgaWYgdGhlIHVzZXIgYWxzbyBnYXZlIHRoZSBwcmludGVkIG1hbnVhbCBuYW1lIChmaWZ0aCBhcmcpLCBhcHBlbmQKKyAgICAlIElmIHRoZSB1c2VyIGFsc28gZ2F2ZSB0aGUgcHJpbnRlZCBtYW51YWwgbmFtZSAoZmlmdGggYXJnKSwgYXBwZW5kCiAgICAgJSAiaW4gTUFOVUFMTkFNRSIuCi0gICAgXGlmZGltIFx3ZDEgPiAwcHQKKyAgICBcaWZkaW0gXHdkXHByaW50ZWRtYW51YWxib3ggPiAwcHQKICAgICAgIFxzcGFjZSBccHV0d29yZGlue30gXGNpdGV7XHByaW50ZWRtYW51YWx9JQogICAgIFxmaQogICBcZWxzZQogICAgICUgbm9kZS9hbmNob3IgKG5vbi1mbG9hdCkgcmVmZXJlbmNlcy4KKyAgICAlIAorICAgICUgSWYgd2UgdXNlIFx1bmhib3ggdG8gcHJpbnQgdGhlIG5vZGUgbmFtZXMsIFRlWCBkb2VzIG5vdCBpbnNlcnQKKyAgICAlIGVtcHR5IGRpc2NyZXRpb25hcmllcyBhZnRlciBoeXBoZW5zLCB3aGljaCBtZWFucyB0aGF0IGl0IHdpbGwgbm90CisgICAgJSBmaW5kIGEgbGluZSBicmVhayBhdCBhIGh5cGhlbiBpbiBhIG5vZGUgbmFtZXMuICBTaW5jZSBzb21lIG1hbnVhbHMKKyAgICAlIGFyZSBiZXN0IHdyaXR0ZW4gd2l0aCBmYWlybHkgbG9uZyBub2RlIG5hbWVzLCBjb250YWluaW5nIGh5cGhlbnMsCisgICAgJSB0aGlzIGlzIGEgbG9zcy4gIFRoZXJlZm9yZSwgd2UgZ2l2ZSB0aGUgdGV4dCBvZiB0aGUgbm9kZSBuYW1lCisgICAgJSBhZ2Fpbiwgc28gaXQgaXMgYXMgaWYgVGVYIGlzIHNlZWluZyBpdCBmb3IgdGhlIGZpcnN0IHRpbWUuCisgICAgJSAKKyAgICBcaWZkaW0gXHdkXHByaW50ZWRtYW51YWxib3ggPiAwcHQKKyAgICAgICUgQ3Jvc3MtbWFudWFsIHJlZmVyZW5jZSB3aXRoIGEgcHJpbnRlZCBtYW51YWwgbmFtZS4KKyAgICAgICUgCisgICAgICBcY3Jvc3NtYW51YWx4cmVme1xjaXRle1xwcmludGVkbWFudWFsXHVuc2tpcH19JQogICAgICUKLSAgICAlIElmIHdlIHVzZSBcdW5oYm94MCBhbmQgXHVuaGJveDEgdG8gcHJpbnQgdGhlIG5vZGUgbmFtZXMsIFRlWCBkb2VzIG5vdAotICAgICUgaW5zZXJ0IGVtcHR5IGRpc2NyZXRpb25hcmllcyBhZnRlciBoeXBoZW5zLCB3aGljaCBtZWFucyB0aGF0IGl0IHdpbGwKLSAgICAlIG5vdCBmaW5kIGEgbGluZSBicmVhayBhdCBhIGh5cGhlbiBpbiBhIG5vZGUgbmFtZXMuICBTaW5jZSBzb21lIG1hbnVhbHMKLSAgICAlIGFyZSBiZXN0IHdyaXR0ZW4gd2l0aCBmYWlybHkgbG9uZyBub2RlIG5hbWVzLCBjb250YWluaW5nIGh5cGhlbnMsIHRoaXMKLSAgICAlIGlzIGEgbG9zcy4gIFRoZXJlZm9yZSwgd2UgZ2l2ZSB0aGUgdGV4dCBvZiB0aGUgbm9kZSBuYW1lIGFnYWluLCBzbyBpdAotICAgICUgaXMgYXMgaWYgVGVYIGlzIHNlZWluZyBpdCBmb3IgdGhlIGZpcnN0IHRpbWUuCi0gICAgXGlmZGltIFx3ZDEgPiAwcHQKLSAgICAgIFxwdXR3b3Jkc2VjdGlvbnt9IGBgXHByaW50ZWRyZWZuYW1lJycgXHB1dHdvcmRpbnt9IFxjaXRle1xwcmludGVkbWFudWFsfSUKKyAgICBcZWxzZVxpZmRpbSBcd2RcaW5mb2ZpbGVuYW1lYm94ID4gMHB0CisgICAgICAlIENyb3NzLW1hbnVhbCByZWZlcmVuY2Ugd2l0aCBvbmx5IGFuIGluZm8gZmlsZW5hbWUgKGFyZyA0KSwgbm8KKyAgICAgICUgcHJpbnRlZCBtYW51YWwgbmFtZSAoYXJnIDUpLiAgVGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcworICAgICAgJSB0aGUgY2FzZSBhYm92ZTsgd2Ugb3V0cHV0IHRoZSBmaWxlbmFtZSwgc2luY2Ugd2UgaGF2ZSBub3RoaW5nIGVsc2UuCisgICAgICAlIAorICAgICAgXGNyb3NzbWFudWFseHJlZntcY29kZXtcaW5mb2ZpbGVuYW1lXHVuc2tpcH19JQorICAgICUKICAgICBcZWxzZQorICAgICAgJSBSZWZlcmVuY2Ugd2l0aGluIHRoaXMgbWFudWFsLgorICAgICAgJQogICAgICAgJSBfIChmb3IgZXhhbXBsZSkgaGFzIHRvIGJlIHRoZSBjaGFyYWN0ZXIgXyBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoZQogICAgICAgJSBjb250cm9sIHNlcXVlbmNlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG5vZGUsIGJ1dCBpdCBoYXMgdG8gZXhwYW5kCiAgICAgICAlIGludG8gdGhlIHVzdWFsIFxsZWF2ZXZtb2RlLi4uXHZydWxlIHN0dWZmIGZvciBwdXJwb3NlcyBvZgpAQCAtNjExOCw3ICs4MDIyLDcgQEAKICAgICAgICBcc2V0Ym94MiA9IFxoYm94e1xpZ25vcmVzcGFjZXMgXHJlZnh7IzEtc250fXt9fSUKICAgICAgICBcaWZkaW0gXHdkMiA+IDBwdCBccmVmeHsjMS1zbnR9XHNwYWNlXGZpCiAgICAgICB9JQotICAgICAgJSBvdXRwdXQgdGhlIGBbbXlub2RlXScgdmlhIGEgbWFjcm8gc28gaXQgY2FuIGJlIG92ZXJyaWRkZW4uCisgICAgICAlIG91dHB1dCB0aGUgYFtteW5vZGVdJyB2aWEgdGhlIG1hY3JvIGJlbG93IHNvIGl0IGNhbiBiZSBvdmVycmlkZGVuLgogICAgICAgXHhyZWZwcmludG5vZGVuYW1lXHByaW50ZWRyZWZuYW1lCiAgICAgICAlCiAgICAgICAlIEJ1dCB3ZSBhbHdheXMgd2FudCBhIGNvbW1hIGFuZCBhIHNwYWNlOgpAQCAtNjEyNiwxMSArODAzMCwzNyBAQAogICAgICAgJQogICAgICAgJSBvdXRwdXQgdGhlIGBwYWdlIDMnLgogICAgICAgXHR1cm5vZmZhY3RpdmUgXHB1dHdvcmRwYWdlXHRpZVxyZWZ4eyMxLXBnfXt9JQotICAgIFxmaQorICAgIFxmaVxmaQogICBcZmkKICAgXGVuZGxpbmsKIFxlbmRncm91cH0KIAorJSBPdXRwdXQgYSBjcm9zcy1tYW51YWwgeHJlZiB0byAjMS4gIFVzZWQganVzdCBhYm92ZSAodHdpY2UpLgorJSAKKyUgT25seSBpbmNsdWRlIHRoZSB0ZXh0ICJTZWN0aW9uIGBgZm9vJycgaW4iIGlmIHRoZSBmb28gaXMgbmVpdGhlcgorJSBtaXNzaW5nIG9yIFRvcC4gIFRodXMsIEB4cmVmeywsLGZvbyxUaGUgRm9vIE1hbnVhbH0gb3V0cHV0cyBzaW1wbHkKKyUgInNlZSBUaGUgRm9vIE1hbnVhbCIsIHRoZSBpZGVhIGJlaW5nIHRvIHJlZmVyIHRvIHRoZSB3aG9sZSBtYW51YWwuCislIAorJSBCdXQsIHRoaXMgYmVpbmcgVGVYLCB3ZSBjYW4ndCBlYXNpbHkgY29tcGFyZSBvdXIgbm9kZSBuYW1lIGFnYWluc3QgdGhlCislIHN0cmluZyAiVG9wIiB3aGlsZSBpZ25vcmluZyB0aGUgcG9zc2libGUgc3BhY2VzIGJlZm9yZSBhbmQgYWZ0ZXIgaW4KKyUgdGhlIGlucHV0LiAgQnkgYWRkaW5nIHRoZSBhcmJpdHJhcnkgN3NwIGJlbG93LCB3ZSBtYWtlIGl0IG11Y2ggbGVzcworJSBsaWtlbHkgdGhhdCBhIHJlYWwgbm9kZSBuYW1lIHdvdWxkIGhhdmUgdGhlIHNhbWUgd2lkdGggYXMgIlRvcCIgKGUuZy4sCislIGluIGEgbW9ub3NwYWNlZCBmb250KS4gIEhvcGVmdWxseSBpdCB3aWxsIG5ldmVyIGhhcHBlbiBpbiBwcmFjdGljZS4KKyUgCislIEZvciB0aGUgc2FtZSBiYXNpYyByZWFzb24sIHdlIHJldHlwZXNldCB0aGUgIlRvcCIgYXQgZXZlcnkKKyUgcmVmZXJlbmNlLCBzaW5jZSB0aGUgY3VycmVudCBmb250IGlzIGluZGV0ZXJtaW5hdGUuCislIAorXGRlZlxjcm9zc21hbnVhbHhyZWYjMXslCisgIFxzZXRib3hcdG9wcmVmYm94ID0gXGhib3h7VG9wXGtlcm43c3B9JQorICBcc2V0Ym94MiA9IFxoYm94e1xpZ25vcmVzcGFjZXMgXHByaW50ZWRyZWZuYW1lIFx1bnNraXAgXGtlcm43c3B9JQorICBcaWZkaW0gXHdkMiA+IDdzcCAgJSBub25lbXB0eT8KKyAgICBcaWZkaW0gXHdkMiA9IFx3ZFx0b3ByZWZib3ggXGVsc2UgICUgc2FtZSBhcyBUb3A/CisgICAgICBccHV0d29yZFNlY3Rpb257fSBgYFxwcmludGVkcmVmbmFtZScnIFxwdXR3b3JkaW57fVxzcGFjZQorICAgIFxmaQorICBcZmkKKyAgIzElCit9CisKICUgVGhpcyBtYWNybyBpcyBjYWxsZWQgZnJvbSBceHJlZlggZm9yIHRoZSBgW25vZGVuYW1lXScgcGFydCBvZiB4cmVmCiAlIG91dHB1dC4gIEl0J3MgYSBzZXBhcmF0ZSBtYWNybyBvbmx5IHNvIGl0IGNhbiBiZSBjaGFuZ2VkIG1vcmUgZWFzaWx5LAogJSBzaW5jZSBzcXVhcmUgYnJhY2tldHMgZG9uJ3Qgd29yayB3ZWxsIGluIHNvbWUgZG9jdW1lbnRzLiAgUGFydGljdWxhcmx5CkBAIC02MTgxLDcgKzgxMTEsOCBAQAogICAgIFxhbmdsZWxlZnQgdW5cLWRlXC1maW5lZFxhbmdsZXJpZ2h0CiAgICAgXGlmbGlua3MKICAgICAgIFxpZmhhdmV4cmVmcwotICAgICAgICBcbWVzc2FnZXtcbGluZW51bWJlciBVbmRlZmluZWQgY3Jvc3MgcmVmZXJlbmNlIGAjMScufSUKKyAgICAgICAge1x0b2tzMCA9IHsjMX0lIGF2b2lkIGV4cGFuc2lvbiBvZiBwb3NzaWJseS1jb21wbGV4IHZhbHVlCisgICAgICAgICBcbWVzc2FnZXtcbGluZW51bWJlciBVbmRlZmluZWQgY3Jvc3MgcmVmZXJlbmNlIGBcdGhlXHRva3MwJy59fSUKICAgICAgIFxlbHNlCiAgICAgICAgIFxpZndhcm5lZHhyZWZzXGVsc2UKICAgICAgICAgICBcZ2xvYmFsXHdhcm5lZHhyZWZzdHJ1ZQpAQCAtNjIwMSwxMCArODEzMiwxOCBAQAogJSBjb2xsaXNpb25zKS4gIEJ1dCBpZiB0aGlzIGlzIGEgZmxvYXQgdHlwZSwgd2UgaGF2ZSBtb3JlIHdvcmsgdG8gZG8uCiAlCiBcZGVmXHhyZGVmIzEjMnslCi0gIFxleHBhbmRhZnRlclxnZGVmXGNzbmFtZSBYUiMxXGVuZGNzbmFtZXsjMn0lIHJlbWVtYmVyIHRoaXMgeHJlZiB2YWx1ZS4KKyAgeyUgVGhlIG5vZGUgbmFtZSBtaWdodCBjb250YWluIDgtYml0IGNoYXJhY3RlcnMsIHdoaWNoIGluIG91ciBjdXJyZW50CisgICAlIGltcGxlbWVudGF0aW9uIGFyZSBjaGFuZ2VkIHRvIGNvbW1hbmRzIGxpa2UgQCdlLiAgRG9uJ3QgbGV0IHRoZXNlCisgICAlIG1lc3MgdXAgdGhlIGNvbnRyb2wgc2VxdWVuY2UgbmFtZS4KKyAgICBcaW5kZXhub2ZvbnRzCisgICAgXHR1cm5vZmZhY3RpdmUKKyAgICBceGRlZlxzYWZleHJlZm5hbWV7IzF9JQorICB9JQorICAlCisgIFxleHBhbmRhZnRlclxnZGVmXGNzbmFtZSBYUlxzYWZleHJlZm5hbWVcZW5kY3NuYW1leyMyfSUgcmVtZW1iZXIgdGhpcyB4cmVmCiAgICUKICAgJSBXYXMgdGhhdCB4cmVmIGNvbnRyb2wgc2VxdWVuY2UgdGhhdCB3ZSBqdXN0IGRlZmluZWQgZm9yIGEgZmxvYXQ/Ci0gIFxleHBhbmRhZnRlclxpZmZsb2F0XGNzbmFtZSBYUiMxXGVuZGNzbmFtZQorICBcZXhwYW5kYWZ0ZXJcaWZmbG9hdFxjc25hbWUgWFJcc2FmZXhyZWZuYW1lXGVuZGNzbmFtZQogICAgICUgaXQgd2FzIGEgZmxvYXQsIGFuZCB3ZSBoYXZlIHRoZSAoc2FmZSkgZmxvYXQgdHlwZSBpbiBcaWZmbG9hdHR5cGUuCiAgICAgXGV4cGFuZGFmdGVyXGxldFxleHBhbmRhZnRlclxmbG9hdGxpc3QKICAgICAgIFxjc25hbWUgZmxvYXRsaXN0XGlmZmxvYXR0eXBlXGVuZGNzbmFtZQpAQCAtNjIxOSw3ICs4MTU4LDggQEAKICAgICAlCiAgICAgJSBSZW1lbWJlciB0aGlzIHhyZWYgaW4gdGhlIGNvbnRyb2wgc2VxdWVuY2UgXGZsb2F0bGlzdEZMT0FUVFlQRSwKICAgICAlIGZvciBsYXRlciB1c2UgaW4gXGxpc3RvZmZsb2F0cy4KLSAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUgZmxvYXRsaXN0XGlmZmxvYXR0eXBlXGVuZGNzbmFtZXtcdGhlXHRva3MweyMxfX0lCisgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lIGZsb2F0bGlzdFxpZmZsb2F0dHlwZVxlbmRjc25hbWV7XHRoZVx0b2tzMAorICAgICAge1xzYWZleHJlZm5hbWV9fSUKICAgXGZpCiB9CiAKQEAgLTYzMjMsNiArODI2Myw3IEBACiAgIFxpbnB1dFxqb2JuYW1lLiMxCiBcZW5kZ3JvdXB9CiAKKwogXG1lc3NhZ2V7aW5zZXJ0aW9ucyx9CiAlIGluY2x1ZGluZyBmb290bm90ZXMuCiAKQEAgLTYzMzUsNyArODI3Niw3IEBACiAlIHNwYWNlIHRvIHByZXZlbnQgc3RyYW5nZSBleHBhbnNpb24gZXJyb3JzLikKIFxkZWZcc3VwZXJlamVjdHtccGFyXHBlbmFsdHkgLTIwMDAwXGZvb3Rub3Rlbm8gPTAgfQogCi0lIEBmb290bm90ZXN0eWxlIGlzIG1lYW5pbmdmdWwgZm9yIGluZm8gb3V0cHV0IG9ubHkuCislIEBmb290bm90ZXN0eWxlIGlzIG1lYW5pbmdmdWwgZm9yIEluZm8gb3V0cHV0IG9ubHkuCiBcbGV0XGZvb3Rub3Rlc3R5bGU9XGNvbW1lbnQKIAoge1xjYXRjb2RlIGBcQD0xMQpAQCAtNjM5OCw2ICs4MzM5LDggQEAKICAgJSBleHBhbmRzIGludG8gYSBib3gsIGl0IG11c3QgY29tZSB3aXRoaW4gdGhlIHBhcmFncmFwaCwgbGVzdCBpdAogICAlIHByb3ZpZGUgYSBwbGFjZSB3aGVyZSBUZVggY2FuIHNwbGl0IHRoZSBmb290bm90ZS4KICAgXGZvb3RzdHJ1dAorICAlCisgICUgSW52b2tlIHJlc3Qgb2YgcGxhaW4gVGVYIGZvb3Rub3RlIHJvdXRpbmUuCiAgIFxmdXR1cmVsZXRcbmV4dFxmb0B0CiB9CiB9JWVuZCBcY2F0Y29kZSBgXEA9MTEKQEAgLTY0MDUsNyArODM0OCw3IEBACiAlIEluIGNhc2UgYSBAZm9vdG5vdGUgYXBwZWFycyBpbiBhIHZib3gsIHNhdmUgdGhlIGZvb3Rub3RlIHRleHQgYW5kIGNyZWF0ZQogJSB0aGUgcmVhbCBcaW5zZXJ0IGp1c3QgYWZ0ZXIgdGhlIHZib3ggZmluaXNoZWQuICBPdGhlcndpc2UsIHRoZSBpbnNlcnRpb24KICUgd291bGQgYmUgbG9zdC4KLSUgU2ltaWxhcmlseSwgaWYgYSBAZm9vdG5vdGUgYXBwZWFycyBpbnNpZGUgYW4gYWxpZ25tZW50LCBzYXZlIHRoZSBmb290bm90ZQorJSBTaW1pbGFybHksIGlmIGEgQGZvb3Rub3RlIGFwcGVhcnMgaW5zaWRlIGFuIGFsaWdubWVudCwgc2F2ZSB0aGUgZm9vdG5vdGUKICUgdGV4dCB0byBhIGJveCBhbmQgbWFrZSB0aGUgXGluc2VydCB3aGVuIGEgcm93IG9mIHRoZSB0YWJsZSBpcyBmaW5pc2hlZC4KICUgQW5kIHRoZSBzYW1lIGNhbiBiZSBkb25lIGZvciBvdGhlciBpbnNlcnQgY2xhc3Nlcy4gIC0ta2FzYWwsIDE2bm92MDMuCiAKQEAgLTY0ODUsNyArODQyOCw3IEBACiAgIGl0IGZyb20gZnRwOi8vdHVnLm9yZy90ZXgvZXBzZi50ZXgufQogJQogXGRlZlxpbWFnZSMxeyUKLSAgXGlmeFxlcHNmYm94XHVuZGVmaW5lZAorICBcaWZ4XGVwc2Zib3hcdGhpc2lzdW5kZWZpbmVkCiAgICAgXGlmd2FybmVkbm9lcHNmIFxlbHNlCiAgICAgICBcZXJyaGVscCA9IFxub2Vwc2ZoZWxwCiAgICAgICBcZXJybWVzc2FnZXtlcHNmLnRleCBub3QgZm91bmQsIGltYWdlcyB3aWxsIGJlIGlnbm9yZWR9JQpAQCAtNjUwMSw3ICs4NDQ0LDcgQEAKICUgIzIgaXMgKG9wdGlvbmFsKSB3aWR0aCwgIzMgaXMgKG9wdGlvbmFsKSBoZWlnaHQuCiAlICM0IGlzIChpZ25vcmVkIG9wdGlvbmFsKSBodG1sIGFsdCB0ZXh0LgogJSAjNSBpcyAoaWdub3JlZCBvcHRpb25hbCkgZXh0ZW5zaW9uLgotJSAjNiBpcyBqdXN0IHRoZSB1c3VhbCBleHRyYSBpZ25vcmVkIGFyZyBmb3IgcGFyc2luZyB0aGlzIHN0dWZmLgorJSAjNiBpcyBqdXN0IHRoZSB1c3VhbCBleHRyYSBpZ25vcmVkIGFyZyBmb3IgcGFyc2luZyBzdHVmZi4KIFxuZXdpZlxpZmltYWdldm1vZGUKIFxkZWZcaW1hZ2V4eHgjMSwjMiwjMywjNCwjNSwjNlxmaW5pc2h7XGJlZ2luZ3JvdXAKICAgXGNhdGNvZGVgXF5eTSA9IDUgICAgICUgaW4gY2FzZSB3ZSdyZSBpbnNpZGUgYW4gZXhhbXBsZQpAQCAtNjUwOSwxNSArODQ1MiwzMCBAQAogICAlIElmIHRoZSBpbWFnZSBpcyBieSBpdHNlbGYsIGNlbnRlciBpdC4KICAgXGlmdm1vZGUKICAgICBcaW1hZ2V2bW9kZXRydWUKLSAgICBcbm9icmVha1xiaWdza2lwCisgIFxlbHNlIFxpZnhcY2VudGVyc3ViXGNlbnRlclYKKyAgICAlIGZvciBAY2VudGVyIEBpbWFnZSwgd2UgbmVlZCBhIHZib3ggc28gd2UgY2FuIGhhdmUgb3VyIHZlcnRpY2FsIHNwYWNlCisgICAgXGltYWdldm1vZGV0cnVlCisgICAgXHZib3hcYmdyb3VwICUgdmJveCBoYXMgYmV0dGVyIGJlaGF2aW9yIHRoYW4gdnRvcCBoZXJldgorICBcZmlcZmkKKyAgJQorICBcaWZpbWFnZXZtb2RlCisgICAgXG5vYnJlYWtcbWVkc2tpcAogICAgICUgVXN1YWxseSB3ZSdsbCBoYXZlIHRleHQgYWZ0ZXIgdGhlIGltYWdlIHdoaWNoIHdpbGwgaW5zZXJ0CiAgICAgJSBccGFyc2tpcCBnbHVlLCBzbyBpbnNlcnQgaXQgaGVyZSB0b28gdG8gZXF1YWxpemUgdGhlIHNwYWNlCiAgICAgJSBhYm92ZSBhbmQgYmVsb3cuCiAgICAgXG5vYnJlYWtcdnNraXBccGFyc2tpcAogICAgIFxub2JyZWFrCi0gICAgXGxpbmVcYmdyb3VwXGhzcwogICBcZmkKICAgJQorICAlIExlYXZlIHZlcnRpY2FsIG1vZGUgc28gdGhhdCBpbmRlbnRhdGlvbiBmcm9tIGFuIGVuY2xvc2luZworICAlICBlbnZpcm9ubWVudCBzdWNoIGFzIEBxdW90YXRpb24gaXMgcmVzcGVjdGVkLgorICAlIEhvd2V2ZXIsIGlmIHdlJ3JlIGF0IHRoZSB0b3AgbGV2ZWwsIHdlIGRvbid0IHdhbnQgdGhlCisgICUgIG5vcm1hbCBwYXJhZ3JhcGggaW5kZW50YXRpb24uCisgICUgT24gdGhlIG90aGVyIGhhbmQsIGlmIHdlIGFyZSBpbiB0aGUgY2FzZSBvZiBAY2VudGVyIEBpbWFnZSwgd2UgZG9uJ3QKKyAgJSAgd2FudCB0byBzdGFydCBhIHBhcmFncmFwaCwgd2hpY2ggd2lsbCBjcmVhdGUgYSBoc2l6ZS13aWR0aCBib3ggYW5kCisgICUgIGVyYWRpY2F0ZSB0aGUgY2VudGVyaW5nLgorICBcaWZ4XGNlbnRlcnN1YlxjZW50ZXJWXGVsc2UgXG5vaW5kZW50IFxmaQorICAlCiAgICUgT3V0cHV0IHRoZSBpbWFnZS4KICAgXGlmcGRmCiAgICAgXGRvcGRmaW1hZ2V7IzF9eyMyfXsjM30lCkBAIC02NTI4LDcgKzg0ODYsMTAgQEAKICAgICBcZXBzZmJveHsjMS5lcHN9JQogICBcZmkKICAgJQotICBcaWZpbWFnZXZtb2RlIFxoc3MgXGVncm91cCBcYmlnYnJlYWsgXGZpICAlIHNwYWNlIGFmdGVyIHRoZSBpbWFnZQorICBcaWZpbWFnZXZtb2RlCisgICAgXG1lZHNraXAgICUgc3BhY2UgYWZ0ZXIgYSBzdGFuZGFsb25lIGltYWdlCisgIFxmaSAgCisgIFxpZnhcY2VudGVyc3ViXGNlbnRlclYgXGVncm91cCBcZmkKIFxlbmRncm91cH0KIAogCkBAIC02NTk1LDEzICs4NTU2LDEzIEBACiAgICAgICBcZ2xvYmFsXGFkdmFuY2VcZmxvYXRubyBieSAxCiAgICAgICAlCiAgICAgICB7JQotICAgICAgICAlIFRoaXMgbWFnaWMgdmFsdWUgZm9yIFx0aGlzc2VjdGlvbiBpcyBvdXRwdXQgYnkgXHNldHJlZiBhcyB0aGUKKyAgICAgICAgJSBUaGlzIG1hZ2ljIHZhbHVlIGZvciBcbGFzdHNlY3Rpb24gaXMgb3V0cHV0IGJ5IFxzZXRyZWYgYXMgdGhlCiAgICAgICAgICUgWFJFRkxBQkVMLXRpdGxlIHZhbHVlLiAgXHhyZWZYIHVzZXMgaXQgdG8gZGlzdGluZ3Vpc2ggZmxvYXQKICAgICAgICAgJSBsYWJlbHMgKHdoaWNoIGhhdmUgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBvdXRwdXQgZm9ybWF0KSBmcm9tCiAgICAgICAgICUgbm9kZSBhbmQgYW5jaG9yIGxhYmVscy4gIEFuZCBceHJkZWYgdXNlcyBpdCB0byBjb25zdHJ1Y3QgdGhlCiAgICAgICAgICUgbGlzdHMgb2YgZmxvYXRzLgogICAgICAgICAlCi0gICAgICAgIFxlZGVmXHRoaXNzZWN0aW9ue1xmbG9hdG1hZ2ljPVxzYWZlZmxvYXR0eXBlfSUKKyAgICAgICAgXGVkZWZcbGFzdHNlY3Rpb257XGZsb2F0bWFnaWM9XHNhZmVmbG9hdHR5cGV9JQogICAgICAgICBcc2V0cmVme1xmbG9hdGxhYmVsfXtZZmxvYXR9JQogICAgICAgfSUKICAgICBcZmkKQEAgLTY2NjksNiArODYzMCw3IEBACiAgICAgICAlIGNhcHRpb24gaWYgc3BlY2lmaWVkLCBlbHNlIHRoZSBmdWxsIGNhcHRpb24gaWYgc3BlY2lmaWVkLCBlbHNlIG5vdGhpbmcuCiAgICAgICB7JQogICAgICAgICBcYXRkdW1taWVzCisgICAgICAgICUKICAgICAgICAgJSBzaW5jZSB3ZSByZWFkIHRoZSBjYXB0aW9uIHRleHQgaW4gdGhlIG1hY3JvIHdvcmxkLCB3aGVyZSBeXk0KICAgICAgICAgJSBpcyB0dXJuZWQgaW50byBhIG5vcm1hbCBjaGFyYWN0ZXIsIHdlIGhhdmUgdG8gc2NhbiBpdCBiYWNrLCBzbwogICAgICAgICAlIHdlIGRvbid0IHdyaXRlIHRoZSBsaXRlcmFsIHRocmVlIGNoYXJhY3RlcnMgIl5eTSIgaW50byB0aGUgYXV4IGZpbGUuCkBAIC02Njg5LDggKzg2NTEsOSBAQAogICAlCiAgICUgcGxhY2UgdGhlIGNhcHR1cmVkIGluc2VydHMKICAgJQotICAlIEJFV0FSRTogd2hlbiB0aGUgZmxvYXRzIHN0YXJ0IGZsb2F0LCB3ZSBoYXZlIHRvIGlzc3VlIHdhcm5pbmcgd2hlbmV2ZXIgYW4KLSAgJSBpbnNlcnQgYXBwZWFycyBpbnNpZGUgYSBmbG9hdCB3aGljaCBjb3VsZCBwb3NzaWJseSBmbG9hdC4gLS1rYXNhbCwgMjZtYXkwNAorICAlIEJFV0FSRTogd2hlbiB0aGUgZmxvYXRzIHN0YXJ0IGZsb2F0aW5nLCB3ZSBoYXZlIHRvIGlzc3VlIHdhcm5pbmcKKyAgJSB3aGVuZXZlciBhbiBpbnNlcnQgYXBwZWFycyBpbnNpZGUgYSBmbG9hdCB3aGljaCBjb3VsZCBwb3NzaWJseQorICAlIGZsb2F0LiAtLWthc2FsLCAyNm1heTA0CiAgICUKICAgXGNoZWNraW5zZXJ0cwogfQpAQCAtNjczNCw3ICs4Njk3LDcgQEAKIAogJSAjMSBpcyB0aGUgY29udHJvbCBzZXF1ZW5jZSB3ZSBhcmUgcGFzc2VkOyB3ZSBleHBhbmQgaW50byBhIGNvbmRpdGlvbmFsCiAlIHdoaWNoIGlzIHRydWUgaWYgIzEgcmVwcmVzZW50cyBhIGZsb2F0IHJlZi4gIFRoYXQgaXMsIHRoZSBtYWdpYwotJSBcdGhpc3NlY3Rpb24gdmFsdWUgd2hpY2ggd2UgXHNldHJlZiBhYm92ZS4KKyUgXGxhc3RzZWN0aW9uIHZhbHVlIHdoaWNoIHdlIFxzZXRyZWYgYWJvdmUuCiAlCiBcZGVmXGlmZmxvYXQjMXtcZXhwYW5kYWZ0ZXJcZG9pZmZsb2F0IzE9PVxmaW5pc2h9CiAlCkBAIC02Nzk1LDM5ICs4NzU4LDkwOSBAQAogICBcd3JpdGVlbnRyeQogfX0KIAotXG1lc3NhZ2V7bG9jYWxpemF0aW9uLH0KLSUgYW5kIGkxOG4uCiAKLSUgQGRvY3VtZW50bGFuZ3VhZ2UgaXMgdXN1YWxseSBnaXZlbiB2ZXJ5IGVhcmx5LCBqdXN0IGFmdGVyCi0lIEBzZXRmaWxlbmFtZS4gIElmIGRvbmUgdG9vIGxhdGUsIGl0IG1heSBub3Qgb3ZlcnJpZGUgZXZlcnl0aGluZwotJSBwcm9wZXJseS4gIFNpbmdsZSBhcmd1bWVudCBpcyB0aGUgbGFuZ3VhZ2UgYWJicmV2aWF0aW9uLgotJSBJdCB3b3VsZCBiZSBuaWNlIGlmIHdlIGNvdWxkIHNldCB1cCBhIGh5cGhlbmF0aW9uIGZpbGUgaGVyZS4KK1xtZXNzYWdle2xvY2FsaXphdGlvbix9CisKKyUgRm9yIHNpbmdsZS1sYW5ndWFnZSBkb2N1bWVudHMsIEBkb2N1bWVudGxhbmd1YWdlIGlzIHVzdWFsbHkgZ2l2ZW4gdmVyeQorJSBlYXJseSwganVzdCBhZnRlciBAZG9jdW1lbnRlbmNvZGluZy4gIFNpbmdsZSBhcmd1bWVudCBpcyB0aGUgbGFuZ3VhZ2UKKyUgKGRlKSBvciBsb2NhbGUgKGRlX0RFKSBhYmJyZXZpYXRpb24uCiAlCi1ccGFyc2VhcmdkZWZcZG9jdW1lbnRsYW5ndWFnZXslCit7CisgIFxjYXRjb2RlYFxfID0gXGFjdGl2ZQorICBcZ2xvYmFsZGVmcz0xCitccGFyc2VhcmdkZWZcZG9jdW1lbnRsYW5ndWFnZXtcYmVnaW5ncm91cAorICBcbGV0Xz1cbm9ybWFsdW5kZXJzY29yZSAgJSBub3JtYWwgXyBjaGFyYWN0ZXIgZm9yIGZpbGVuYW1lcwogICBcdGV4ICUgcmVhZCB0eGktPz8udGV4IGZpbGUgaW4gcGxhaW4gVGVYLgotICAgICUgUmVhZCB0aGUgZmlsZSBpZiBpdCBleGlzdHMuCisgICAgJSBSZWFkIHRoZSBmaWxlIGJ5IHRoZSBuYW1lIHRoZXkgcGFzc2VkIGlmIGl0IGV4aXN0cy4KICAgICBcb3BlbmluIDEgdHhpLSMxLnRleAogICAgIFxpZmVvZiAxCi0gICAgICBcZXJyaGVscCA9IFxub2xhbmdoZWxwCi0gICAgICBcZXJybWVzc2FnZXtDYW5ub3QgcmVhZCBsYW5ndWFnZSBmaWxlIHR4aS0jMS50ZXh9JQorICAgICAgXGRvY3VtZW50bGFuZ3VhZ2V0cnl3aXRob3V0dW5kZXJzY29yZXsjMV9cZmluaXNofSUKICAgICBcZWxzZQorICAgICAgXGdsb2JhbGRlZnMgPSAxICAlIGV2ZXJ5dGhpbmcgaW4gdGhlIHR4aS1MTCBmaWxlcyBuZWVkcyB0byBwZXJzaXN0CiAgICAgICBcaW5wdXQgdHhpLSMxLnRleAogICAgIFxmaQogICAgIFxjbG9zZWluIDEKLSAgXGVuZGdyb3VwCi19Ci1cbmV3aGVscFxub2xhbmdoZWxwe1RoZSBnaXZlbiBsYW5ndWFnZSBkZWZpbml0aW9uIGZpbGUgY2Fubm90IGJlIGZvdW5kIG9yCi1pcyBlbXB0eS4gIE1heWJlIHlvdSBuZWVkIHRvIGluc3RhbGwgaXQ/ICBJbiB0aGUgY3VycmVudCBkaXJlY3RvcnkKLXNob3VsZCB3b3JrIGlmIG5vd2hlcmUgZWxzZSBkb2VzLn0KLQotCi0lIEBkb2N1bWVudGVuY29kaW5nIHNob3VsZCBjaGFuZ2Ugc29tZXRoaW5nIGluIFRlWCBldmVudHVhbGx5LCBtb3N0Ci0lIGxpa2VseSwgYnV0IGZvciBub3cganVzdCByZWNvZ25pemUgaXQuCi1cbGV0XGRvY3VtZW50ZW5jb2RpbmcgPSBcY29tbWVudAotCi0KLSUgUGFnZSBzaXplIHBhcmFtZXRlcnMuCisgIFxlbmRncm91cCAlIGVuZCByYXcgVGVYCitcZW5kZ3JvdXB9CiAlCislIElmIHRoZXkgcGFzc2VkIGRlX0RFLCBhbmQgdHhpLWRlX0RFLnRleCBkb2Vzbid0IGV4aXN0LAorJSB0cnkgdHhpLWRlLnRleC4KKyUKK1xnZGVmXGRvY3VtZW50bGFuZ3VhZ2V0cnl3aXRob3V0dW5kZXJzY29yZSMxXyMyXGZpbmlzaHslCisgIFxvcGVuaW4gMSB0eGktIzEudGV4CisgIFxpZmVvZiAxCisgICAgXGVycmhlbHAgPSBcbm9sYW5naGVscAorICAgIFxlcnJtZXNzYWdle0Nhbm5vdCByZWFkIGxhbmd1YWdlIGZpbGUgdHhpLSMxLnRleH0lCisgIFxlbHNlCisgICAgXGdsb2JhbGRlZnMgPSAxICAlIGV2ZXJ5dGhpbmcgaW4gdGhlIHR4aS1MTCBmaWxlcyBuZWVkcyB0byBwZXJzaXN0CisgICAgXGlucHV0IHR4aS0jMS50ZXgKKyAgXGZpCisgIFxjbG9zZWluIDEKK30KK30lIGVuZCBvZiBzcGVjaWFsIF8gY2F0Y29kZQorJQorXG5ld2hlbHBcbm9sYW5naGVscHtUaGUgZ2l2ZW4gbGFuZ3VhZ2UgZGVmaW5pdGlvbiBmaWxlIGNhbm5vdCBiZSBmb3VuZCBvcgoraXMgZW1wdHkuICBNYXliZSB5b3UgbmVlZCB0byBpbnN0YWxsIGl0PyAgUHV0dGluZyBpdCBpbiB0aGUgY3VycmVudAorZGlyZWN0b3J5IHNob3VsZCB3b3JrIGlmIG5vd2hlcmUgZWxzZSBkb2VzLn0KKworJSBUaGlzIG1hY3JvIGlzIGNhbGxlZCBmcm9tIHR4aS0/Py50ZXggZmlsZXM7IHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUKKyUgXGxhbmd1YWdlIG5hbWUgdG8gc2V0ICh3aXRob3V0IHRoZSAiXGxhbmdAIiBwcmVmaXgpLCB0aGUgc2Vjb25kIGFuZAorJSB0aGlyZCBhcmdzIGFyZSBce2xlZnQscmlnaHR9aHlwaGVubWluLgorJQorJSBUaGUgbGFuZ3VhZ2UgbmFtZXMgdG8gcGFzcyBhcmUgZGV0ZXJtaW5lZCB3aGVuIHRoZSBmb3JtYXQgaXMgYnVpbHQuCislIFNlZSB0aGUgZXRleC5sb2cgZmlsZSBjcmVhdGVkIGF0IHRoYXQgdGltZSwgZS5nLiwKKyUgL3Vzci9sb2NhbC90ZXhsaXZlLzIwMDgvdGV4bWYtdmFyL3dlYjJjL3BkZnRleC9ldGV4LmxvZy4KKyUKKyUgV2l0aCBUZVggTGl2ZSAyMDA4LCBldGV4IG5vdyBpbmNsdWRlcyBoeXBoZW5hdGlvbiBwYXR0ZXJucyBmb3IgYWxsCislIGF2YWlsYWJsZSBsYW5ndWFnZXMuICBUaGlzIG1lYW5zIHdlIGNhbiBzdXBwb3J0IGh5cGhlbmF0aW9uIGluCislIFRleGluZm8sIGF0IGxlYXN0IHRvIHNvbWUgZXh0ZW50LiAgKFRoaXMgc3RpbGwgZG9lc24ndCBzb2x2ZSB0aGUKKyUgYWNjZW50ZWQgY2hhcmFjdGVycyBwcm9ibGVtLikKKyUKK1xjYXRjb2RlYEA9MTEKK1xkZWZcdHhpc2V0bGFuZ3VhZ2UjMSMyIzN7JQorICAlIGRvIG5vdCBzZXQgdGhlIGxhbmd1YWdlIGlmIHRoZSBuYW1lIGlzIHVuZGVmaW5lZCBpbiB0aGUgY3VycmVudCBUZVguCisgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIGxhbmdAIzFcZW5kY3NuYW1lIFxyZWxheAorICAgIFxtZXNzYWdle25vIHBhdHRlcm5zIGZvciAjMX0lCisgIFxlbHNlCisgICAgXGdsb2JhbFxsYW5ndWFnZSA9IFxjc25hbWUgbGFuZ0AjMVxlbmRjc25hbWUKKyAgXGZpCisgICUgYnV0IHRoZXJlIGlzIG5vIGhhcm0gaW4gYWRqdXN0aW5nIHRoZSBoeXBoZW5taW4gdmFsdWVzIHJlZ2FyZGxlc3MuCisgIFxnbG9iYWxcbGVmdGh5cGhlbm1pbiA9ICMyXHJlbGF4CisgIFxnbG9iYWxccmlnaHRoeXBoZW5taW4gPSAjM1xyZWxheAorfQorCislIEhlbHBlcnMgZm9yIGVuY29kaW5ncy4KKyUgU2V0IHRoZSBjYXRjb2RlIG9mIGNoYXJhY3RlcnMgMTI4IHRocm91Z2ggMjU1IHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyLgorJQorXGRlZlxzZXRub25hc2NpaWNoYXJzY2F0Y29kZSMxeyUKKyAgIFxjb3VudDI1NT0xMjgKKyAgIFxsb29wXGlmbnVtXGNvdW50MjU1PDI1NgorICAgICAgXGdsb2JhbFxjYXRjb2RlXGNvdW50MjU1PSMxXHJlbGF4CisgICAgICBcYWR2YW5jZVxjb3VudDI1NSBieSAxCisgICBccmVwZWF0Cit9CisKK1xkZWZcc2V0bm9uYXNjaWljaGFyc2NhdGNvZGVub25nbG9iYWwjMXslCisgICBcY291bnQyNTU9MTI4CisgICBcbG9vcFxpZm51bVxjb3VudDI1NTwyNTYKKyAgICAgIFxjYXRjb2RlXGNvdW50MjU1PSMxXHJlbGF4CisgICAgICBcYWR2YW5jZVxjb3VudDI1NSBieSAxCisgICBccmVwZWF0Cit9CisKKyUgQGRvY3VtZW50ZW5jb2Rpbmcgc2V0cyB0aGUgZGVmaW5pdGlvbiBvZiBub24tQVNDSUkgY2hhcmFjdGVycworJSBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBlbmNvZGluZy4KKyUKK1xwYXJzZWFyZ2RlZlxkb2N1bWVudGVuY29kaW5neyUKKyAgJSBFbmNvZGluZyBiZWluZyBkZWNsYXJlZCBmb3IgdGhlIGRvY3VtZW50LgorICBcZGVmXGRlY2xhcmVkZW5jb2Rpbmd7XGNzbmFtZSAjMS5lbmNcZW5kY3NuYW1lfSUKKyAgJQorICAlIFN1cHBvcnRlZCBlbmNvZGluZ3M6IG5hbWVzIGNvbnZlcnRlZCB0byB0b2tlbnMgaW4gb3JkZXIgdG8gYmUgYWJsZQorICAlIHRvIGNvbXBhcmUgdGhlbSB3aXRoIFxpZnguCisgIFxkZWZcYXNjaWl7XGNzbmFtZSBVUy1BU0NJSS5lbmNcZW5kY3NuYW1lfSUKKyAgXGRlZlxsYXRuaW5le1xjc25hbWUgSVNPLTg4NTktMTUuZW5jXGVuZGNzbmFtZX0lCisgIFxkZWZcbGF0b25le1xjc25hbWUgSVNPLTg4NTktMS5lbmNcZW5kY3NuYW1lfSUKKyAgXGRlZlxsYXR0d297XGNzbmFtZSBJU08tODg1OS0yLmVuY1xlbmRjc25hbWV9JQorICBcZGVmXHV0ZmVpZ2h0e1xjc25hbWUgVVRGLTguZW5jXGVuZGNzbmFtZX0lCisgICUKKyAgXGlmeCBcZGVjbGFyZWRlbmNvZGluZyBcYXNjaWkKKyAgICAgXGFzY2lpY2hhcmRlZnMKKyAgJQorICBcZWxzZSBcaWZ4IFxkZWNsYXJlZGVuY29kaW5nIFxsYXR0d28KKyAgICAgXHNldG5vbmFzY2lpY2hhcnNjYXRjb2RlXGFjdGl2ZQorICAgICBcbGF0dHdvY2hhcmRlZnMKKyAgJQorICBcZWxzZSBcaWZ4IFxkZWNsYXJlZGVuY29kaW5nIFxsYXRvbmUKKyAgICAgXHNldG5vbmFzY2lpY2hhcnNjYXRjb2RlXGFjdGl2ZQorICAgICBcbGF0b25lY2hhcmRlZnMKKyAgJQorICBcZWxzZSBcaWZ4IFxkZWNsYXJlZGVuY29kaW5nIFxsYXRuaW5lCisgICAgIFxzZXRub25hc2NpaWNoYXJzY2F0Y29kZVxhY3RpdmUKKyAgICAgXGxhdG5pbmVjaGFyZGVmcworICAlCisgIFxlbHNlIFxpZnggXGRlY2xhcmVkZW5jb2RpbmcgXHV0ZmVpZ2h0CisgICAgIFxzZXRub25hc2NpaWNoYXJzY2F0Y29kZVxhY3RpdmUKKyAgICAgXHV0ZmVpZ2h0Y2hhcmRlZnMKKyAgJQorICBcZWxzZQorICAgIFxtZXNzYWdle1Vua25vd24gZG9jdW1lbnQgZW5jb2RpbmcgIzEsIGlnbm9yaW5nLn0lCisgICUKKyAgXGZpICUgdXRmZWlnaHQKKyAgXGZpICUgbGF0bmluZQorICBcZmkgJSBsYXRvbmUKKyAgXGZpICUgbGF0dHdvCisgIFxmaSAlIGFzY2lpCit9CisKKyUgQSBtZXNzYWdlIHRvIGJlIGxvZ2dlZCB3aGVuIHVzaW5nIGEgY2hhcmFjdGVyIHRoYXQgaXNuJ3QgYXZhaWxhYmxlCislIHRoZSBkZWZhdWx0IGZvbnQgZW5jb2RpbmcgKE9UMSkuCislCitcZGVmXG1pc3NpbmdjaGFybXNnIzF7XG1lc3NhZ2V7Q2hhcmFjdGVyIG1pc3NpbmcgaW4gT1QxIGVuY29kaW5nOiAjMS59fQorCislIFRha2UgYWNjb3VudCBvZiBcYyAocGxhaW4pIHZzLiBcLCAoVGV4aW5mbykgZGlmZmVyZW5jZS4KK1xkZWZcY2VkaWxsYSMxe1xpZnhcY1xwdGV4Y1xjeyMxfVxlbHNlXCx7IzF9XGZpfQorCislIEZpcnN0LCBtYWtlIGFjdGl2ZSBub24tQVNDSUkgY2hhcmFjdGVycyBpbiBvcmRlciBmb3IgdGhlbSB0byBiZQorJSBjb3JyZWN0bHkgY2F0ZWdvcml6ZWQgd2hlbiBUZVggcmVhZHMgdGhlIHJlcGxhY2VtZW50IHRleHQgb2YKKyUgbWFjcm9zIGNvbnRhaW5pbmcgdGhlIGNoYXJhY3RlciBkZWZpbml0aW9ucy4KK1xzZXRub25hc2NpaWNoYXJzY2F0Y29kZVxhY3RpdmUKKyUKKyUgTGF0aW4xIChJU08tODg1OS0xKSBjaGFyYWN0ZXIgZGVmaW5pdGlvbnMuCitcZGVmXGxhdG9uZWNoYXJkZWZzeyUKKyAgXGdkZWZeXmEwe1x0aWV9CisgIFxnZGVmXl5hMXtcZXhjbGFtZG93bn0KKyAgXGdkZWZeXmEye1xtaXNzaW5nY2hhcm1zZ3tDRU5UIFNJR059fQorICBcZ2RlZl5eYTN7e1xwb3VuZHN9fQorICBcZ2RlZl5eYTR7XG1pc3NpbmdjaGFybXNne0NVUlJFTkNZIFNJR059fQorICBcZ2RlZl5eYTV7XG1pc3NpbmdjaGFybXNne1lFTiBTSUdOfX0KKyAgXGdkZWZeXmE2e1xtaXNzaW5nY2hhcm1zZ3tCUk9LRU4gQkFSfX0KKyAgXGdkZWZeXmE3e1xTfQorICBcZ2RlZl5eYTh7XCJ7fX0KKyAgXGdkZWZeXmE5e1xjb3B5cmlnaHR9CisgIFxnZGVmXl5hYXtcb3JkZn0KKyAgXGdkZWZeXmFie1xndWlsbGVtZXRsZWZ0fQorICBcZ2RlZl5eYWN7JFxsbm90JH0KKyAgXGdkZWZeXmFke1wtfQorICBcZ2RlZl5eYWV7XHJlZ2lzdGVyZWRzeW1ib2x9CisgIFxnZGVmXl5hZntcPXt9fQorICAlCisgIFxnZGVmXl5iMHtcdGV4dGRlZ3JlZX0KKyAgXGdkZWZeXmIxeyRccG0kfQorICBcZ2RlZl5eYjJ7JF4yJH0KKyAgXGdkZWZeXmIzeyReMyR9CisgIFxnZGVmXl5iNHtcJ3t9fQorICBcZ2RlZl5eYjV7JFxtdSR9CisgIFxnZGVmXl5iNntcUH0KKyAgJQorICBcZ2RlZl5eYjd7JF4uJH0KKyAgXGdkZWZeXmI4e1xjZWRpbGxhXCB9CisgIFxnZGVmXl5iOXskXjEkfQorICBcZ2RlZl5eYmF7XG9yZG19CisgICUKKyAgXGdkZWZeXmJie1xndWlsbGVtZXRyaWdodH0KKyAgXGdkZWZeXmJjeyQxXG92ZXI0JH0KKyAgXGdkZWZeXmJkeyQxXG92ZXIyJH0KKyAgXGdkZWZeXmJleyQzXG92ZXI0JH0KKyAgXGdkZWZeXmJme1xxdWVzdGlvbmRvd259CisgICUKKyAgXGdkZWZeXmMwe1xgQX0KKyAgXGdkZWZeXmMxe1wnQX0KKyAgXGdkZWZeXmMye1xeQX0KKyAgXGdkZWZeXmMze1x+QX0KKyAgXGdkZWZeXmM0e1wiQX0KKyAgXGdkZWZeXmM1e1xyaW5nYWNjZW50IEF9CisgIFxnZGVmXl5jNntcQUV9CisgIFxnZGVmXl5jN3tcY2VkaWxsYSBDfQorICBcZ2RlZl5eYzh7XGBFfQorICBcZ2RlZl5eYzl7XCdFfQorICBcZ2RlZl5eY2F7XF5FfQorICBcZ2RlZl5eY2J7XCJFfQorICBcZ2RlZl5eY2N7XGBJfQorICBcZ2RlZl5eY2R7XCdJfQorICBcZ2RlZl5eY2V7XF5JfQorICBcZ2RlZl5eY2Z7XCJJfQorICAlCisgIFxnZGVmXl5kMHtcREh9CisgIFxnZGVmXl5kMXtcfk59CisgIFxnZGVmXl5kMntcYE99CisgIFxnZGVmXl5kM3tcJ099CisgIFxnZGVmXl5kNHtcXk99CisgIFxnZGVmXl5kNXtcfk99CisgIFxnZGVmXl5kNntcIk99CisgIFxnZGVmXl5kN3skXHRpbWVzJH0KKyAgXGdkZWZeXmQ4e1xPfQorICBcZ2RlZl5eZDl7XGBVfQorICBcZ2RlZl5eZGF7XCdVfQorICBcZ2RlZl5eZGJ7XF5VfQorICBcZ2RlZl5eZGN7XCJVfQorICBcZ2RlZl5eZGR7XCdZfQorICBcZ2RlZl5eZGV7XFRIfQorICBcZ2RlZl5eZGZ7XHNzfQorICAlCisgIFxnZGVmXl5lMHtcYGF9CisgIFxnZGVmXl5lMXtcJ2F9CisgIFxnZGVmXl5lMntcXmF9CisgIFxnZGVmXl5lM3tcfmF9CisgIFxnZGVmXl5lNHtcImF9CisgIFxnZGVmXl5lNXtccmluZ2FjY2VudCBhfQorICBcZ2RlZl5eZTZ7XGFlfQorICBcZ2RlZl5eZTd7XGNlZGlsbGEgY30KKyAgXGdkZWZeXmU4e1xgZX0KKyAgXGdkZWZeXmU5e1wnZX0KKyAgXGdkZWZeXmVhe1xeZX0KKyAgXGdkZWZeXmVie1wiZX0KKyAgXGdkZWZeXmVje1xge1xkb3RsZXNzIGl9fQorICBcZ2RlZl5eZWR7XCd7XGRvdGxlc3MgaX19CisgIFxnZGVmXl5lZXtcXntcZG90bGVzcyBpfX0KKyAgXGdkZWZeXmVme1wie1xkb3RsZXNzIGl9fQorICAlCisgIFxnZGVmXl5mMHtcZGh9CisgIFxnZGVmXl5mMXtcfm59CisgIFxnZGVmXl5mMntcYG99CisgIFxnZGVmXl5mM3tcJ299CisgIFxnZGVmXl5mNHtcXm99CisgIFxnZGVmXl5mNXtcfm99CisgIFxnZGVmXl5mNntcIm99CisgIFxnZGVmXl5mN3skXGRpdiR9CisgIFxnZGVmXl5mOHtcb30KKyAgXGdkZWZeXmY5e1xgdX0KKyAgXGdkZWZeXmZhe1wndX0KKyAgXGdkZWZeXmZie1xedX0KKyAgXGdkZWZeXmZje1widX0KKyAgXGdkZWZeXmZke1wneX0KKyAgXGdkZWZeXmZle1x0aH0KKyAgXGdkZWZeXmZme1wieX0KK30KKworJSBMYXRpbjkgKElTTy04ODU5LTE1KSBlbmNvZGluZyBjaGFyYWN0ZXIgZGVmaW5pdGlvbnMuCitcZGVmXGxhdG5pbmVjaGFyZGVmc3slCisgICUgRW5jb2RpbmcgaXMgYWxtb3N0IGlkZW50aWNhbCB0byBMYXRpbjEuCisgIFxsYXRvbmVjaGFyZGVmcworICAlCisgIFxnZGVmXl5hNHtcZXVyb30KKyAgXGdkZWZeXmE2e1x2IFN9CisgIFxnZGVmXl5hOHtcdiBzfQorICBcZ2RlZl5eYjR7XHYgWn0KKyAgXGdkZWZeXmI4e1x2IHp9CisgIFxnZGVmXl5iY3tcT0V9CisgIFxnZGVmXl5iZHtcb2V9CisgIFxnZGVmXl5iZXtcIll9Cit9CisKKyUgTGF0aW4yIChJU08tODg1OS0yKSBjaGFyYWN0ZXIgZGVmaW5pdGlvbnMuCitcZGVmXGxhdHR3b2NoYXJkZWZzeyUKKyAgXGdkZWZeXmEwe1x0aWV9CisgIFxnZGVmXl5hMXtcb2dvbmVre0F9fQorICBcZ2RlZl5eYTJ7XHV7fX0KKyAgXGdkZWZeXmEze1xMfQorICBcZ2RlZl5eYTR7XG1pc3NpbmdjaGFybXNne0NVUlJFTkNZIFNJR059fQorICBcZ2RlZl5eYTV7XHYgTH0KKyAgXGdkZWZeXmE2e1wnU30KKyAgXGdkZWZeXmE3e1xTfQorICBcZ2RlZl5eYTh7XCJ7fX0KKyAgXGdkZWZeXmE5e1x2IFN9CisgIFxnZGVmXl5hYXtcY2VkaWxsYSBTfQorICBcZ2RlZl5eYWJ7XHYgVH0KKyAgXGdkZWZeXmFje1wnWn0KKyAgXGdkZWZeXmFke1wtfQorICBcZ2RlZl5eYWV7XHYgWn0KKyAgXGdkZWZeXmFme1xkb3RhY2NlbnQgWn0KKyAgJQorICBcZ2RlZl5eYjB7XHRleHRkZWdyZWV9CisgIFxnZGVmXl5iMXtcb2dvbmVre2F9fQorICBcZ2RlZl5eYjJ7XG9nb25la3sgfX0KKyAgXGdkZWZeXmIze1xsfQorICBcZ2RlZl5eYjR7XCd7fX0KKyAgXGdkZWZeXmI1e1x2IGx9CisgIFxnZGVmXl5iNntcJ3N9CisgIFxnZGVmXl5iN3tcdnt9fQorICBcZ2RlZl5eYjh7XGNlZGlsbGFcIH0KKyAgXGdkZWZeXmI5e1x2IHN9CisgIFxnZGVmXl5iYXtcY2VkaWxsYSBzfQorICBcZ2RlZl5eYmJ7XHYgdH0KKyAgXGdkZWZeXmJje1wnen0KKyAgXGdkZWZeXmJke1xIe319CisgIFxnZGVmXl5iZXtcdiB6fQorICBcZ2RlZl5eYmZ7XGRvdGFjY2VudCB6fQorICAlCisgIFxnZGVmXl5jMHtcJ1J9CisgIFxnZGVmXl5jMXtcJ0F9CisgIFxnZGVmXl5jMntcXkF9CisgIFxnZGVmXl5jM3tcdSBBfQorICBcZ2RlZl5eYzR7XCJBfQorICBcZ2RlZl5eYzV7XCdMfQorICBcZ2RlZl5eYzZ7XCdDfQorICBcZ2RlZl5eYzd7XGNlZGlsbGEgQ30KKyAgXGdkZWZeXmM4e1x2IEN9CisgIFxnZGVmXl5jOXtcJ0V9CisgIFxnZGVmXl5jYXtcb2dvbmVre0V9fQorICBcZ2RlZl5eY2J7XCJFfQorICBcZ2RlZl5eY2N7XHYgRX0KKyAgXGdkZWZeXmNke1wnSX0KKyAgXGdkZWZeXmNle1xeSX0KKyAgXGdkZWZeXmNme1x2IER9CisgICUKKyAgXGdkZWZeXmQwe1xESH0KKyAgXGdkZWZeXmQxe1wnTn0KKyAgXGdkZWZeXmQye1x2IE59CisgIFxnZGVmXl5kM3tcJ099CisgIFxnZGVmXl5kNHtcXk99CisgIFxnZGVmXl5kNXtcSCBPfQorICBcZ2RlZl5eZDZ7XCJPfQorICBcZ2RlZl5eZDd7JFx0aW1lcyR9CisgIFxnZGVmXl5kOHtcdiBSfQorICBcZ2RlZl5eZDl7XHJpbmdhY2NlbnQgVX0KKyAgXGdkZWZeXmRhe1wnVX0KKyAgXGdkZWZeXmRie1xIIFV9CisgIFxnZGVmXl5kY3tcIlV9CisgIFxnZGVmXl5kZHtcJ1l9CisgIFxnZGVmXl5kZXtcY2VkaWxsYSBUfQorICBcZ2RlZl5eZGZ7XHNzfQorICAlCisgIFxnZGVmXl5lMHtcJ3J9CisgIFxnZGVmXl5lMXtcJ2F9CisgIFxnZGVmXl5lMntcXmF9CisgIFxnZGVmXl5lM3tcdSBhfQorICBcZ2RlZl5eZTR7XCJhfQorICBcZ2RlZl5eZTV7XCdsfQorICBcZ2RlZl5eZTZ7XCdjfQorICBcZ2RlZl5eZTd7XGNlZGlsbGEgY30KKyAgXGdkZWZeXmU4e1x2IGN9CisgIFxnZGVmXl5lOXtcJ2V9CisgIFxnZGVmXl5lYXtcb2dvbmVre2V9fQorICBcZ2RlZl5eZWJ7XCJlfQorICBcZ2RlZl5eZWN7XHYgZX0KKyAgXGdkZWZeXmVke1wne1xkb3RsZXNze2l9fX0KKyAgXGdkZWZeXmVle1xee1xkb3RsZXNze2l9fX0KKyAgXGdkZWZeXmVme1x2IGR9CisgICUKKyAgXGdkZWZeXmYwe1xkaH0KKyAgXGdkZWZeXmYxe1wnbn0KKyAgXGdkZWZeXmYye1x2IG59CisgIFxnZGVmXl5mM3tcJ299CisgIFxnZGVmXl5mNHtcXm99CisgIFxnZGVmXl5mNXtcSCBvfQorICBcZ2RlZl5eZjZ7XCJvfQorICBcZ2RlZl5eZjd7JFxkaXYkfQorICBcZ2RlZl5eZjh7XHYgcn0KKyAgXGdkZWZeXmY5e1xyaW5nYWNjZW50IHV9CisgIFxnZGVmXl5mYXtcJ3V9CisgIFxnZGVmXl5mYntcSCB1fQorICBcZ2RlZl5eZmN7XCJ1fQorICBcZ2RlZl5eZmR7XCd5fQorICBcZ2RlZl5eZmV7XGNlZGlsbGEgdH0KKyAgXGdkZWZeXmZme1xkb3RhY2NlbnR7fX0KK30KKworJSBVVEYtOCBjaGFyYWN0ZXIgZGVmaW5pdGlvbnMuCislCislIFRoaXMgY29kZSB0byBzdXBwb3J0IFVURi04IGlzIGJhc2VkIG9uIExhVGVYJ3MgdXRmOC5kZWYsIHdpdGggc29tZQorJSBjaGFuZ2VzIGZvciBUZXhpbmZvIGNvbnZlbnRpb25zLiAgSXQgaXMgaW5jbHVkZWQgaGVyZSB1bmRlciB0aGUgR1BMIGJ5CislIHBlcm1pc3Npb24gZnJvbSBGcmFuayBNaXR0ZWxiYWNoIGFuZCB0aGUgTGFUZVggdGVhbS4KKyUKK1xuZXdjb3VudFxjb3VudFVURngKK1xuZXdjb3VudFxjb3VudFVURnkKK1xuZXdjb3VudFxjb3VudFVURnoKKworXGdkZWZcVVRGdmlpaVR3b09jdGV0cyMxIzJ7XGV4cGFuZGFmdGVyCisgICBcVVRGdmlpaURlZmluZWRcY3NuYW1lIHU4OiMxXHN0cmluZyAjMlxlbmRjc25hbWV9CislCitcZ2RlZlxVVEZ2aWlpVGhyZWVPY3RldHMjMSMyIzN7XGV4cGFuZGFmdGVyCisgICBcVVRGdmlpaURlZmluZWRcY3NuYW1lIHU4OiMxXHN0cmluZyAjMlxzdHJpbmcgIzNcZW5kY3NuYW1lfQorJQorXGdkZWZcVVRGdmlpaUZvdXJPY3RldHMjMSMyIzMjNHtcZXhwYW5kYWZ0ZXIKKyAgIFxVVEZ2aWlpRGVmaW5lZFxjc25hbWUgdTg6IzFcc3RyaW5nICMyXHN0cmluZyAjM1xzdHJpbmcgIzRcZW5kY3NuYW1lfQorCitcZ2RlZlxVVEZ2aWlpRGVmaW5lZCMxeyUKKyAgXGlmeCAjMVxyZWxheAorICAgIFxtZXNzYWdle1xsaW5lbnVtYmVyIFVuaWNvZGUgY2hhciBcc3RyaW5nICMxIG5vdCBkZWZpbmVkIGZvciBUZXhpbmZvfSUKKyAgXGVsc2UKKyAgICBcZXhwYW5kYWZ0ZXIgIzElCisgIFxmaQorfQorCitcYmVnaW5ncm91cAorICBcY2F0Y29kZWBcfjEzCisgIFxjYXRjb2RlYFwiMTIKKworICBcZGVmXFVURnZpaWlMb29weyUKKyAgICBcZ2xvYmFsXGNhdGNvZGVcY291bnRVVEZ4XGFjdGl2ZQorICAgIFx1Y2NvZGVgXH5cY291bnRVVEZ4CisgICAgXHVwcGVyY2FzZVxleHBhbmRhZnRlcntcVVRGdmlpaVRtcH0lCisgICAgXGFkdmFuY2VcY291bnRVVEZ4IGJ5IDEKKyAgICBcaWZudW1cY291bnRVVEZ4IDwgXGNvdW50VVRGeQorICAgICAgXGV4cGFuZGFmdGVyXFVURnZpaWlMb29wCisgICAgXGZpfQorCisgIFxjb3VudFVURnggPSAiQzIKKyAgXGNvdW50VVRGeSA9ICJFMAorICBcZGVmXFVURnZpaWlUbXB7JQorICAgIFx4ZGVmfntcbm9leHBhbmRcVVRGdmlpaVR3b09jdGV0c1xzdHJpbmd+fX0KKyAgXFVURnZpaWlMb29wCisKKyAgXGNvdW50VVRGeCA9ICJFMAorICBcY291bnRVVEZ5ID0gIkYwCisgIFxkZWZcVVRGdmlpaVRtcHslCisgICAgXHhkZWZ+e1xub2V4cGFuZFxVVEZ2aWlpVGhyZWVPY3RldHNcc3RyaW5nfn19CisgIFxVVEZ2aWlpTG9vcAorCisgIFxjb3VudFVURnggPSAiRjAKKyAgXGNvdW50VVRGeSA9ICJGNAorICBcZGVmXFVURnZpaWlUbXB7JQorICAgIFx4ZGVmfntcbm9leHBhbmRcVVRGdmlpaUZvdXJPY3RldHNcc3RyaW5nfn19CisgIFxVVEZ2aWlpTG9vcAorXGVuZGdyb3VwCisKK1xiZWdpbmdyb3VwCisgIFxjYXRjb2RlYFwiPTEyCisgIFxjYXRjb2RlYFw8PTEyCisgIFxjYXRjb2RlYFwuPTEyCisgIFxjYXRjb2RlYFwsPTEyCisgIFxjYXRjb2RlYFw7PTEyCisgIFxjYXRjb2RlYFwhPTEyCisgIFxjYXRjb2RlYFx+PTEzCisKKyAgXGdkZWZcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXIjMSMyeyUKKyAgICBcY291bnRVVEZ6ID0gIiMxXHJlbGF4CisgICAgJVx3bG9ne1xzcGFjZVxzcGFjZSBkZWZpbmluZyBVbmljb2RlIGNoYXIgVSsjMSAoZGVjaW1hbCBcdGhlXGNvdW50VVRGeil9JQorICAgIFxiZWdpbmdyb3VwCisgICAgICBccGFyc2VYTUxDaGFycmVmCisgICAgICBcZGVmXFVURnZpaWlUd29PY3RldHMjIzEjIzJ7JQorICAgICAgICBcY3NuYW1lIHU4OiMjMVxzdHJpbmcgIyMyXGVuZGNzbmFtZX0lCisgICAgICBcZGVmXFVURnZpaWlUaHJlZU9jdGV0cyMjMSMjMiMjM3slCisgICAgICAgIFxjc25hbWUgdTg6IyMxXHN0cmluZyAjIzJcc3RyaW5nICMjM1xlbmRjc25hbWV9JQorICAgICAgXGRlZlxVVEZ2aWlpRm91ck9jdGV0cyMjMSMjMiMjMyMjNHslCisgICAgICAgIFxjc25hbWUgdTg6IyMxXHN0cmluZyAjIzJcc3RyaW5nICMjM1xzdHJpbmcgIyM0XGVuZGNzbmFtZX0lCisgICAgICBcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXIKKyAgICAgICBcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXIKKyAgICAgICBcZ2RlZlxVVEZ2aWlpVG1weyMyfSUKKyAgICBcZW5kZ3JvdXB9CisKKyAgXGdkZWZccGFyc2VYTUxDaGFycmVmeyUKKyAgICBcaWZudW1cY291bnRVVEZ6IDwgIkEwXHJlbGF4CisgICAgICBcZXJyaGVscCA9IFxFTXNpbXBsZQorICAgICAgXGVycm1lc3NhZ2V7Q2Fubm90IGRlZmluZSBVbmljb2RlIGNoYXIgdmFsdWUgPCAwMEEwfSUKKyAgICBcZWxzZVxpZm51bVxjb3VudFVURnogPCAiODAwXHJlbGF4CisgICAgICBccGFyc2VVVEZ2aWlpQSwlCisgICAgICBccGFyc2VVVEZ2aWlpQiBDXFVURnZpaWlUd29PY3RldHMuLCUKKyAgICBcZWxzZVxpZm51bVxjb3VudFVURnogPCAiMTAwMDBccmVsYXgKKyAgICAgIFxwYXJzZVVURnZpaWlBOyUKKyAgICAgIFxwYXJzZVVURnZpaWlBLCUKKyAgICAgIFxwYXJzZVVURnZpaWlCIEVcVVRGdmlpaVRocmVlT2N0ZXRzLnssO30lCisgICAgXGVsc2UKKyAgICAgIFxwYXJzZVVURnZpaWlBOyUKKyAgICAgIFxwYXJzZVVURnZpaWlBLCUKKyAgICAgIFxwYXJzZVVURnZpaWlBISUKKyAgICAgIFxwYXJzZVVURnZpaWlCIEZcVVRGdmlpaUZvdXJPY3RldHMueyEsO30lCisgICAgXGZpXGZpXGZpCisgIH0KKworICBcZ2RlZlxwYXJzZVVURnZpaWlBIzF7JQorICAgIFxjb3VudFVURnggPSBcY291bnRVVEZ6CisgICAgXGRpdmlkZVxjb3VudFVURnogYnkgNjQKKyAgICBcY291bnRVVEZ5ID0gXGNvdW50VVRGegorICAgIFxtdWx0aXBseVxjb3VudFVURnogYnkgNjQKKyAgICBcYWR2YW5jZVxjb3VudFVURnggYnkgLVxjb3VudFVURnoKKyAgICBcYWR2YW5jZVxjb3VudFVURnggYnkgMTI4CisgICAgXHVjY29kZSBgIzFcY291bnRVVEZ4CisgICAgXGNvdW50VVRGeiA9IFxjb3VudFVURnl9CisKKyAgXGdkZWZccGFyc2VVVEZ2aWlpQiMxIzIjMyM0eyUKKyAgICBcYWR2YW5jZVxjb3VudFVURnogYnkgIiMxMFxyZWxheAorICAgIFx1Y2NvZGUgYCMzXGNvdW50VVRGegorICAgIFx1cHBlcmNhc2V7XGdkZWZcVVRGdmlpaVRtcHsjMiMzIzR9fX0KK1xlbmRncm91cAorCitcZGVmXHV0ZmVpZ2h0Y2hhcmRlZnN7JQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBBMH17XHRpZX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwQTF9e1xleGNsYW1kb3dufQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBBM317XHBvdW5kc30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwQTh9e1wieyB9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBBOX17XGNvcHlyaWdodH0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwQUF9e1xvcmRmfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBBQn17XGd1aWxsZW1ldGxlZnR9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEFEfXtcLX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwQUV9e1xyZWdpc3RlcmVkc3ltYm9sfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBBRn17XD17IH19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwQjB9e1xyaW5nYWNjZW50eyB9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBCNH17XCd7IH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEI4fXtcY2VkaWxsYXsgfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwQkF9e1xvcmRtfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBCQn17XGd1aWxsZW1ldHJpZ2h0fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBCRn17XHF1ZXN0aW9uZG93bn0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBDMH17XGBBfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBDMX17XCdBfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBDMn17XF5BfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBDM317XH5BfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBDNH17XCJBfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBDNX17XEFBfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBDNn17XEFFfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBDN317XGNlZGlsbGF7Q319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEM4fXtcYEV9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEM5fXtcJ0V9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMENBfXtcXkV9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMENCfXtcIkV9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMENDfXtcYEl9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMENEfXtcJ0l9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMENFfXtcXkl9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMENGfXtcIkl9CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRDB9e1xESH0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRDF9e1x+Tn0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRDJ9e1xgT30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRDN9e1wnT30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRDR9e1xeT30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRDV9e1x+T30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRDZ9e1wiT30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRDh9e1xPfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBEOX17XGBVfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBEQX17XCdVfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBEQn17XF5VfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBEQ317XCJVfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBERH17XCdZfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBERX17XFRIfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBERn17XHNzfQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEUwfXtcYGF9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEUxfXtcJ2F9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEUyfXtcXmF9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEUzfXtcfmF9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEU0fXtcImF9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEU1fXtcYWF9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEU2fXtcYWV9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEU3fXtcY2VkaWxsYXtjfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRTh9e1xgZX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRTl9e1wnZX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRUF9e1xeZX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRUJ9e1wiZX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRUN9e1xge1xkb3RsZXNze2l9fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRUR9e1wne1xkb3RsZXNze2l9fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRUV9e1xee1xkb3RsZXNze2l9fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRUZ9e1wie1xkb3RsZXNze2l9fX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBGMH17XGRofQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBGMX17XH5ufQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBGMn17XGBvfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBGM317XCdvfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBGNH17XF5vfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBGNX17XH5vfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBGNn17XCJvfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBGOH17XG99CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEY5fXtcYHV9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEZBfXtcJ3V9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEZCfXtcXnV9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEZDfXtcInV9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEZEfXtcJ3l9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEZFfXtcdGh9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEZGfXtcInl9CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMDB9e1w9QX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMDF9e1w9YX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMDJ9e1x1e0F9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEwM317XHV7YX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTA0fXtcb2dvbmVre0F9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEwNX17XG9nb25la3thfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMDZ9e1wnQ30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMDd9e1wnY30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMDh9e1xeQ30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMDl9e1xeY30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMTh9e1xvZ29uZWt7RX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTE5fXtcb2dvbmVre2V9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEwQX17XGRvdGFjY2VudHtDfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMEJ9e1xkb3RhY2NlbnR7Y319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTBDfXtcdntDfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMER9e1x2e2N9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEwRX17XHZ7RH19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMTJ9e1w9RX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMTN9e1w9ZX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMTR9e1x1e0V9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDExNX17XHV7ZX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTE2fXtcZG90YWNjZW50e0V9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDExN317XGRvdGFjY2VudHtlfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMUF9e1x2e0V9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDExQn17XHZ7ZX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTFDfXtcXkd9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTFEfXtcXmd9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTFFfXtcdXtHfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMUZ9e1x1e2d9fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTIwfXtcZG90YWNjZW50e0d9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEyMX17XGRvdGFjY2VudHtnfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMjR9e1xeSH0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMjV9e1xeaH0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMjh9e1x+SX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMjl9e1x+e1xkb3RsZXNze2l9fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMkF9e1w9SX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMkJ9e1w9e1xkb3RsZXNze2l9fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMkN9e1x1e0l9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEyRH17XHV7XGRvdGxlc3N7aX19fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTMwfXtcZG90YWNjZW50e0l9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEzMX17XGRvdGxlc3N7aX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTMyfXtJSn0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMzN9e2lqfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEzNH17XF5KfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEzNX17XF57XGRvdGxlc3N7an19fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEzOX17XCdMfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEzQX17XCdsfQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTQxfXtcTH0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNDJ9e1xsfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE0M317XCdOfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE0NH17XCdufQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE0N317XHZ7Tn19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTQ4fXtcdntufX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNEN9e1w9T30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNER9e1w9b30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNEV9e1x1e099fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE0Rn17XHV7b319CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNTB9e1xIe099fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE1MX17XEh7b319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTUyfXtcT0V9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTUzfXtcb2V9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTU0fXtcJ1J9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTU1fXtcJ3J9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTU4fXtcdntSfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNTl9e1x2e3J9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE1QX17XCdTfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE1Qn17XCdzfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE1Q317XF5TfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE1RH17XF5zfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE1RX17XGNlZGlsbGF7U319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTVGfXtcY2VkaWxsYXtzfX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE2MH17XHZ7U319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTYxfXtcdntzfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNjJ9e1xjZWRpbGxhe3R9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE2M317XGNlZGlsbGF7VH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTY0fXtcdntUfX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE2OH17XH5VfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE2OX17XH51fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE2QX17XD1VfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE2Qn17XD11fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE2Q317XHV7VX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTZEfXtcdXt1fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNkV9e1xyaW5nYWNjZW50e1V9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE2Rn17XHJpbmdhY2NlbnR7dX19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNzB9e1xIe1V9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE3MX17XEh7dX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTc0fXtcXld9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTc1fXtcXnd9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTc2fXtcXll9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTc3fXtcXnl9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTc4fXtcIll9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTc5fXtcJ1p9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTdBfXtcJ3p9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTdCfXtcZG90YWNjZW50e1p9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE3Q317XGRvdGFjY2VudHt6fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxN0R9e1x2e1p9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE3RX17XHZ7en19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxQzR9e0RcdntafX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxQzV9e0Rcdnt6fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxQzZ9e2Rcdnt6fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxQzd9e0xKfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFDOH17TGp9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUM5fXtsan0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxQ0F9e05KfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFDQn17Tmp9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUNDfXtuan0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxQ0R9e1x2e0F9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFDRX17XHZ7YX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUNGfXtcdntJfX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFEMH17XHZ7XGRvdGxlc3N7aX19fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFEMX17XHZ7T319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUQyfXtcdntvfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRDN9e1x2e1V9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFENH17XHZ7dX19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRTJ9e1w9e1xBRX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUUzfXtcPXtcYWV9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFFNn17XHZ7R319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUU3fXtcdntnfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRTh9e1x2e0t9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFFOX17XHZ7a319CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRjB9e1x2e1xkb3RsZXNze2p9fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRjF9e0RafQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFGMn17RHp9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUYzfXtken0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRjR9e1wnR30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRjV9e1wnZ30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRjh9e1xgTn0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRjl9e1xgbn0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRkN9e1wne1xBRX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUZEfXtcJ3tcYWV9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFGRX17XCd7XE99fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFGRn17XCd7XG99fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMjFFfXtcdntIfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAyMUZ9e1x2e2h9fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMjI2fXtcZG90YWNjZW50e0F9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDIyN317XGRvdGFjY2VudHthfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAyMjh9e1xjZWRpbGxhe0V9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDIyOX17XGNlZGlsbGF7ZX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMjJFfXtcZG90YWNjZW50e099fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDIyRn17XGRvdGFjY2VudHtvfX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDIzMn17XD1ZfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDIzM317XD15fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDIzN317XGRvdGxlc3N7an19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAyREJ9e1xvZ29uZWt7IH19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMDJ9e1xkb3RhY2NlbnR7Qn19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTAzfXtcZG90YWNjZW50e2J9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUwNH17XHVkb3RhY2NlbnR7Qn19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTA1fXtcdWRvdGFjY2VudHtifX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMDZ9e1x1YmFyYWNjZW50e0J9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUwN317XHViYXJhY2NlbnR7Yn19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTBBfXtcZG90YWNjZW50e0R9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUwQn17XGRvdGFjY2VudHtkfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMEN9e1x1ZG90YWNjZW50e0R9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUwRH17XHVkb3RhY2NlbnR7ZH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTBFfXtcdWJhcmFjY2VudHtEfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMEZ9e1x1YmFyYWNjZW50e2R9fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTFFfXtcZG90YWNjZW50e0Z9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUxRn17XGRvdGFjY2VudHtmfX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUyMH17XD1HfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUyMX17XD1nfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUyMn17XGRvdGFjY2VudHtIfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMjN9e1xkb3RhY2NlbnR7aH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTI0fXtcdWRvdGFjY2VudHtIfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMjV9e1x1ZG90YWNjZW50e2h9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUyNn17XCJIfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUyN317XCJofQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTMwfXtcJ0t9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTMxfXtcJ2t9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTMyfXtcdWRvdGFjY2VudHtLfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMzN9e1x1ZG90YWNjZW50e2t9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUzNH17XHViYXJhY2NlbnR7S319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTM1fXtcdWJhcmFjY2VudHtrfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMzZ9e1x1ZG90YWNjZW50e0x9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUzN317XHVkb3RhY2NlbnR7bH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTNBfXtcdWJhcmFjY2VudHtMfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFM0J9e1x1YmFyYWNjZW50e2x9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUzRX17XCdNfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUzRn17XCdtfQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTQwfXtcZG90YWNjZW50e019fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU0MX17XGRvdGFjY2VudHttfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFNDJ9e1x1ZG90YWNjZW50e019fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU0M317XHVkb3RhY2NlbnR7bX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTQ0fXtcZG90YWNjZW50e059fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU0NX17XGRvdGFjY2VudHtufX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFNDZ9e1x1ZG90YWNjZW50e059fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU0N317XHVkb3RhY2NlbnR7bn19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTQ4fXtcdWJhcmFjY2VudHtOfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFNDl9e1x1YmFyYWNjZW50e259fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTU0fXtcJ1B9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTU1fXtcJ3B9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTU2fXtcZG90YWNjZW50e1B9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU1N317XGRvdGFjY2VudHtwfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFNTh9e1xkb3RhY2NlbnR7Un19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTU5fXtcZG90YWNjZW50e3J9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU1QX17XHVkb3RhY2NlbnR7Un19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTVCfXtcdWRvdGFjY2VudHtyfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFNUV9e1x1YmFyYWNjZW50e1J9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU1Rn17XHViYXJhY2NlbnR7cn19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFNjB9e1xkb3RhY2NlbnR7U319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTYxfXtcZG90YWNjZW50e3N9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU2Mn17XHVkb3RhY2NlbnR7U319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTYzfXtcdWRvdGFjY2VudHtzfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFNkF9e1xkb3RhY2NlbnR7VH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTZCfXtcZG90YWNjZW50e3R9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU2Q317XHVkb3RhY2NlbnR7VH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTZEfXtcdWRvdGFjY2VudHt0fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFNkV9e1x1YmFyYWNjZW50e1R9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU2Rn17XHViYXJhY2NlbnR7dH19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFN0N9e1x+Vn0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFN0R9e1x+dn0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFN0V9e1x1ZG90YWNjZW50e1Z9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU3Rn17XHVkb3RhY2NlbnR7dn19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFODB9e1xgV30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFODF9e1xgd30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFODJ9e1wnV30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFODN9e1wnd30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFODR9e1wiV30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFODV9e1wid30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFODZ9e1xkb3RhY2NlbnR7V319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTg3fXtcZG90YWNjZW50e3d9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU4OH17XHVkb3RhY2NlbnR7V319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTg5fXtcdWRvdGFjY2VudHt3fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFOEF9e1xkb3RhY2NlbnR7WH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRThCfXtcZG90YWNjZW50e3h9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU4Q317XCJYfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU4RH17XCJ4fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU4RX17XGRvdGFjY2VudHtZfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFOEZ9e1xkb3RhY2NlbnR7eX19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFOTB9e1xeWn0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFOTF9e1xeen0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFOTJ9e1x1ZG90YWNjZW50e1p9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU5M317XHVkb3RhY2NlbnR7en19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTk0fXtcdWJhcmFjY2VudHtafX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFOTV9e1x1YmFyYWNjZW50e3p9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU5Nn17XHViYXJhY2NlbnR7aH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTk3fXtcInR9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTk4fXtccmluZ2FjY2VudHt3fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFOTl9e1xyaW5nYWNjZW50e3l9fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRUEwfXtcdWRvdGFjY2VudHtBfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFQTF9e1x1ZG90YWNjZW50e2F9fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRUI4fXtcdWRvdGFjY2VudHtFfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFQjl9e1x1ZG90YWNjZW50e2V9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUVCQ317XH5FfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUVCRH17XH5lfQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRUNBfXtcdWRvdGFjY2VudHtJfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFQ0J9e1x1ZG90YWNjZW50e2l9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUVDQ317XHVkb3RhY2NlbnR7T319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRUNEfXtcdWRvdGFjY2VudHtvfX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUVFNH17XHVkb3RhY2NlbnR7VX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRUU1fXtcdWRvdGFjY2VudHt1fX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUVGMn17XGBZfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUVGM317XGB5fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUVGNH17XHVkb3RhY2NlbnR7WX19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFRjh9e1x+WX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFRjl9e1x+eX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MjAxM317LS19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsyMDE0fXstLS19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsyMDE4fXtccXVvdGVsZWZ0fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MjAxOX17XHF1b3RlcmlnaHR9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsyMDFBfXtccXVvdGVzaW5nbGJhc2V9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsyMDFDfXtccXVvdGVkYmxsZWZ0fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MjAxRH17XHF1b3RlZGJscmlnaHR9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsyMDFFfXtccXVvdGVkYmxiYXNlfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MjAyMn17XGJ1bGxldH0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezIwMjZ9e1xkb3RzfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MjAzOX17XGd1aWxzaW5nbGxlZnR9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsyMDNBfXtcZ3VpbHNpbmdscmlnaHR9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsyMEFDfXtcZXVyb30KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MjE5Mn17XGV4cGFuc2lvbn0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezIxRDJ9e1xyZXN1bHR9CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezIyMTJ9e1xtaW51c30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezIyMTd9e1xwb2ludH0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezIyNjF9e1xlcXVpdn0KK30lIGVuZCBvZiBcdXRmZWlnaHRjaGFyZGVmcworCisKKyUgVVMtQVNDSUkgY2hhcmFjdGVyIGRlZmluaXRpb25zLgorXGRlZlxhc2NpaWNoYXJkZWZzeyUgbm90aGluZyBuZWVkIGJlIGRvbmUKKyAgIFxyZWxheAorfQorCislIE1ha2Ugbm9uLUFTQ0lJIGNoYXJhY3RlcnMgcHJpbnRhYmxlIGFnYWluIGZvciBjb21wYXRpYmlsaXR5IHdpdGgKKyUgZXhpc3RpbmcgVGV4aW5mbyBkb2N1bWVudHMgdGhhdCBtYXkgdXNlIHRoZW0sIGV2ZW4gd2l0aG91dCBkZWNsYXJpbmcgYQorJSBkb2N1bWVudCBlbmNvZGluZy4KKyUKK1xzZXRub25hc2NpaWNoYXJzY2F0Y29kZSBcb3RoZXIKKworCitcbWVzc2FnZXtmb3JtYXR0aW5nLH0KKwogXG5ld2RpbWVuXGRlZmF1bHRwYXJpbmRlbnQgXGRlZmF1bHRwYXJpbmRlbnQgPSAxNXB0CiAKIFxjaGFwaGVhZGluZ3NraXAgPSAxNXB0IHBsdXMgNHB0IG1pbnVzIDJwdApAQCAtNjgzNywxMCArOTY3MCwxMCBAQAogJSBQcmV2ZW50IHVuZGVyZnVsbCB2Ym94IGVycm9yIG1lc3NhZ2VzLgogXHZiYWRuZXNzID0gMTAwMDAKIAotJSBEb24ndCBiZSBzbyBmaW5pY2t5IGFib3V0IHVuZGVyZnVsbCBoYm94ZXMsIGVpdGhlci4KLVxoYmFkbmVzcyA9IDIwMDAKKyUgRG9uJ3QgYmUgdmVyeSBmaW5pY2t5IGFib3V0IHVuZGVyZnVsbCBoYm94ZXMsIGVpdGhlci4KK1xoYmFkbmVzcyA9IDY2NjYKIAotJSBGb2xsb3dpbmcgR2VvcmdlIEJ1c2gsIGp1c3QgZ2V0IHJpZCBvZiB3aWRvd3MgYW5kIG9ycGhhbnMuCislIEZvbGxvd2luZyBHZW9yZ2UgQnVzaCwgZ2V0IHJpZCBvZiB3aWRvd3MgYW5kIG9ycGhhbnMuCiBcd2lkb3dwZW5hbHR5PTEwMDAwCiBcY2x1YnBlbmFsdHk9MTAwMDAKIApAQCAtNjg4Nyw2ICs5NzIwLDEwIEBACiAgIFxpZnBkZgogICAgIFxwZGZwYWdlaGVpZ2h0ICM3XHJlbGF4CiAgICAgXHBkZnBhZ2V3aWR0aCAjOFxyZWxheAorICAgICUgaWYgd2UgZG9uJ3QgcmVzZXQgdGhlc2UsIHRoZXkgd2lsbCByZW1haW4gYXQgIjEgdHJ1ZSBpbiIgb2YKKyAgICAlIHdoYXRldmVyIGxheW91dCBwZGZ0ZXggd2FzIGR1bXBlZCB3aXRoLgorICAgIFxwZGZob3JpZ2luID0gMSB0cnVlIGluCisgICAgXHBkZnZvcmlnaW4gPSAxIHRydWUgaW4KICAgXGZpCiAgICUKICAgXHNldGxlYWRpbmd7XHRleHRsZWFkaW5nfQpAQCAtNjkwMSw3ICs5NzM4LDcgQEAKICAgXHRleHRsZWFkaW5nID0gMTMuMnB0CiAgICUKICAgJSBJZiBwYWdlIGlzIG5vdGhpbmcgYnV0IHRleHQsIG1ha2UgaXQgY29tZSBvdXQgZXZlbi4KLSAgXGludGVybmFscGFnZXNpemVzezQ2XGJhc2VsaW5lc2tpcH17NmlufSUKKyAgXGludGVybmFscGFnZXNpemVzezYwNy4ycHR9ezZpbn0lIHRoYXQncyA0NiBsaW5lcwogICAgICAgICAgICAgICAgICAgICB7XHZvZmZzZXR9ey4yNWlufSUKICAgICAgICAgICAgICAgICAgICAge1xiaW5kaW5nb2Zmc2V0fXszNnB0fSUKICAgICAgICAgICAgICAgICAgICAgezExaW59ezguNWlufSUKQEAgLTY5MTMsNyArOTc1MCw3IEBACiAgIFx0ZXh0bGVhZGluZyA9IDEycHQKICAgJQogICBcaW50ZXJuYWxwYWdlc2l6ZXN7Ny41aW59ezVpbn0lCi0gICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17LjI1aW59JQorICAgICAgICAgICAgICAgICAgICB7LS4yaW59ezBpbn0lCiAgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17MTZwdH0lCiAgICAgICAgICAgICAgICAgICAgIHs5LjI1aW59ezdpbn0lCiAgICUKQEAgLTY5NTcsNyArOTc5NCw3IEBACiAgICUgXGdsb2JhbFxub3JtYWxvZmZzZXQgPSAtNm1tCiAgICUgXGdsb2JhbFxiaW5kaW5nb2Zmc2V0ID0gMTBtbQogICAlIEBlbmQgdGV4Ci0gIFxpbnRlcm5hbHBhZ2VzaXplc3s1MVxiYXNlbGluZXNraXB9ezE2MG1tfQorICBcaW50ZXJuYWxwYWdlc2l6ZXN7NjczLjJwdH17MTYwbW19JSB0aGF0J3MgNTEgbGluZXMKICAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXtcaG9mZnNldH0lCiAgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17NDRwdH0lCiAgICAgICAgICAgICAgICAgICAgIHsyOTdtbX17MjEwbW19JQpAQCAtNzAyMiw3ICs5ODU5LDcgQEAKICAgXHBhcnNraXAgPSAzcHQgcGx1cyAycHQgbWludXMgMXB0CiAgIFxzZXRsZWFkaW5ne1x0ZXh0bGVhZGluZ30lCiAgICUKLSAgXGRpbWVuMCA9ICMxCisgIFxkaW1lbjAgPSAjMVxyZWxheAogICBcYWR2YW5jZVxkaW1lbjAgYnkgXHZvZmZzZXQKICAgJQogICBcZGltZW4yID0gXGhzaXplCkBAIC03MDQxLDI1ICs5ODc4LDIxIEBACiAKIFxtZXNzYWdle2FuZCB0dXJuaW5nIG9uIHRleGluZm8gaW5wdXQgZm9ybWF0Ln0KIAorXGRlZl5eTHtccGFyfSAlIHJlbW92ZSBcb3V0ZXIsIHNvIF5MIGNhbiBhcHBlYXIgaW4gYW4gQGNvbW1lbnQKKworJSBERUwgaXMgYSBjb21tZW50IGNoYXJhY3RlciwgaW4gY2FzZSBAYyBkb2VzIG5vdCBzdWZmaWNlLgorXGNhdGNvZGVgXF5ePyA9IDE0CisKICUgRGVmaW5lIG1hY3JvcyB0byBvdXRwdXQgdmFyaW91cyBjaGFyYWN0ZXJzIHdpdGggY2F0Y29kZSBmb3Igbm9ybWFsIHRleHQuCi1cY2F0Y29kZWBcIj1cb3RoZXIKLVxjYXRjb2RlYFx+PVxvdGhlcgotXGNhdGNvZGVgXF49XG90aGVyCi1cY2F0Y29kZWBcXz1cb3RoZXIKLVxjYXRjb2RlYFx8PVxvdGhlcgotXGNhdGNvZGVgXDw9XG90aGVyCi1cY2F0Y29kZWBcPj1cb3RoZXIKLVxjYXRjb2RlYFwrPVxvdGhlcgotXGNhdGNvZGVgXCQ9XG90aGVyCi1cZGVmXG5vcm1hbGRvdWJsZXF1b3RleyJ9Ci1cZGVmXG5vcm1hbHRpbGRle359Ci1cZGVmXG5vcm1hbGNhcmV0e159Ci1cZGVmXG5vcm1hbHVuZGVyc2NvcmV7X30KLVxkZWZcbm9ybWFsdmVydGljYWxiYXJ7fH0KLVxkZWZcbm9ybWFsbGVzc3s8fQotXGRlZlxub3JtYWxncmVhdGVyez59Ci1cZGVmXG5vcm1hbHBsdXN7K30KLVxkZWZcbm9ybWFsZG9sbGFyeyR9JSQgZm9udC1sb2NrIGZpeAorXGNhdGNvZGVgXCI9XG90aGVyIFxkZWZcbm9ybWFsZG91YmxlcXVvdGV7In0KK1xjYXRjb2RlYFwkPVxvdGhlciBcZGVmXG5vcm1hbGRvbGxhcnskfSUkIGZvbnQtbG9jayBmaXgKK1xjYXRjb2RlYFwrPVxvdGhlciBcZGVmXG5vcm1hbHBsdXN7K30KK1xjYXRjb2RlYFw8PVxvdGhlciBcZGVmXG5vcm1hbGxlc3N7PH0KK1xjYXRjb2RlYFw+PVxvdGhlciBcZGVmXG5vcm1hbGdyZWF0ZXJ7Pn0KK1xjYXRjb2RlYFxePVxvdGhlciBcZGVmXG5vcm1hbGNhcmV0e159CitcY2F0Y29kZWBcXz1cb3RoZXIgXGRlZlxub3JtYWx1bmRlcnNjb3Jle199CitcY2F0Y29kZWBcfD1cb3RoZXIgXGRlZlxub3JtYWx2ZXJ0aWNhbGJhcnt8fQorXGNhdGNvZGVgXH49XG90aGVyIFxkZWZcbm9ybWFsdGlsZGV7fn0KIAogJSBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gbWFrZSBhIGNoYXJhY3RlciBwcmludCBvbmUgd2F5IGluIFx0dAogJSAod2hlcmUgaXQgY2FuIHByb2JhYmx5IGJlIG91dHB1dCBhcy1pcyksIGFuZCBhbm90aGVyIHdheSBpbiBvdGhlciBmb250cywKQEAgLTcxMTcsNiArOTk1MCwxMyBAQAogJSBcb3RoZXJpZnlhY3RpdmUgaXMgY2FsbGVkIG5lYXIgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCiBcZGVmXG90aGVyaWZ5YWN0aXZle1xjYXRjb2RlYCs9XG90aGVyIFxjYXRjb2RlYFxfPVxvdGhlcn0KIAorJSBVc2VkIHNvbWV0aW1lcyB0byB0dXJuIG9mZiAoZWZmZWN0aXZlbHkpIHRoZSBhY3RpdmUgY2hhcmFjdGVycyBldmVuIGFmdGVyCislIHBhcnNpbmcgdGhlbS4KK1xkZWZcdHVybm9mZmFjdGl2ZXslCisgIFxub3JtYWx0dXJub2ZmYWN0aXZlCisgIFxvdGhlcmJhY2tzbGFzaAorfQorCiBcY2F0Y29kZWBcQD0wCiAKICUgXGJhY2tzbGFzaGN1cmZvbnQgb3V0cHV0cyBvbmUgYmFja3NsYXNoIGNoYXJhY3RlciBpbiBjdXJyZW50IGZvbnQsCkBAIC03MTI0LDQ1ICs5OTY0LDUyIEBACiBcZ2xvYmFsXGNoYXJkZWZcYmFja3NsYXNoY3VyZm9udD1gXFwKIFxnbG9iYWxcbGV0XHJhd2JhY2tzbGFzaHh4PVxiYWNrc2xhc2hjdXJmb250ICAlIGxldCBleGlzdGluZyAuPz9zIGZpbGVzIHdvcmsKIAotJSBccmF3YmFja3NsYXNoIGRlZmluZXMgYW4gYWN0aXZlIFwgdG8gZG8gXGJhY2tzbGFzaGN1cmZvbnQuCi0lIFxvdGhlcmJhY2tzbGFzaCBkZWZpbmVzIGFuIGFjdGl2ZSBcIHRvIGJlIGEgbGl0ZXJhbCBgXCcgY2hhcmFjdGVyIHdpdGgKLSUgY2F0Y29kZSBvdGhlci4KLXtcY2F0Y29kZWBcXD1cYWN0aXZlCi0gQGdkZWZAcmF3YmFja3NsYXNoe0BsZXRcPUBiYWNrc2xhc2hjdXJmb250fQotIEBnZGVmQG90aGVyYmFja3NsYXNoe0BsZXRcPUByZWFsYmFja3NsYXNofQotfQotCiAlIFxyZWFsYmFja3NsYXNoIGlzIGFuIGFjdHVhbCBjaGFyYWN0ZXIgYFwnIHdpdGggY2F0Y29kZSBvdGhlciwgYW5kCiAlIFxkb3VibGViYWNrc2xhc2ggaXMgdHdvIG9mIHRoZW0gKGZvciB0aGUgcGRmIG91dGxpbmVzKS4KIHtcY2F0Y29kZWBcXD1cb3RoZXIgQGdkZWZAcmVhbGJhY2tzbGFzaHtcfSBAZ2RlZkBkb3VibGViYWNrc2xhc2h7XFx9fQogCi0lIFxub3JtYWxiYWNrc2xhc2ggb3V0cHV0cyBvbmUgYmFja3NsYXNoIGluIGZpeGVkIHdpZHRoIGZvbnQuCi1cZGVmXG5vcm1hbGJhY2tzbGFzaHt7XHR0XGJhY2tzbGFzaGN1cmZvbnR9fQorJSBJbiB0ZXhpbmZvLCBiYWNrc2xhc2ggaXMgYW4gYWN0aXZlIGNoYXJhY3RlcjsgaXQgcHJpbnRzIHRoZSBiYWNrc2xhc2gKKyUgaW4gZml4ZWQgd2lkdGggZm9udC4KK1xjYXRjb2RlYFxcPVxhY3RpdmUgICUgQCBmb3IgZXNjYXBlIGNoYXIgZnJvbSBub3cgb24uCiAKLVxjYXRjb2RlYFxcPVxhY3RpdmUKKyUgVGhlIHN0b3J5IGhlcmUgaXMgdGhhdCBpbiBtYXRoIG1vZGUsIHRoZSBcY2hhciBvZiBcYmFja3NsYXNoY3VyZm9udAorJSBlbmRzIHVwIHByaW50aW5nIHRoZSByb21hbiBcIGZyb20gdGhlIG1hdGggc3ltYm9sIGZvbnQgKGJlY2F1c2UgXGNoYXIKKyUgaW4gbWF0aCBtb2RlIHVzZXMgdGhlIFxtYXRoY29kZSwgYW5kIHBsYWluLnRleCBzZXRzCislIFxtYXRoY29kZWBcXD0iMDI2RSkuICBJdCBzZWVtcyBiZXR0ZXIgZm9yIEBiYWNrc2xhc2hjaGFye30gdG8gYWx3YXlzCislIHByaW50IGEgdHlwZXdyaXRlciBiYWNrc2xhc2gsIGhlbmNlIHdlIHVzZSBhbiBleHBsaWNpdCBcbWF0aGNoYXIsCislIHdoaWNoIGlzIHRoZSBkZWNpbWFsIGVxdWl2YWxlbnQgb2YgIjcxNWMgKGNsYXNzIDcsIGUuZy4sIHVzZSBcZmFtOworJSBpZ25vcmVkIGZhbWlseSB2YWx1ZTsgY2hhciBwb3NpdGlvbiAiNUMpLiAgV2UgY2FuJ3QgdXNlICIgZm9yIHRoZQorJSB1c3VhbCBoZXggdmFsdWUgYmVjYXVzZSBpdCBoYXMgYWxyZWFkeSBiZWVuIG1hZGUgYWN0aXZlLgorQGRlZkBub3JtYWxiYWNrc2xhc2h7e0B0dCBAaWZtbW9kZSBAbWF0aGNoYXIyOTAyMCBAZWxzZSBAYmFja3NsYXNoY3VyZm9udCBAZml9fQorQGxldEBiYWNrc2xhc2hjaGFyID0gQG5vcm1hbGJhY2tzbGFzaCAlIEBiYWNrc2xhc2hjaGFye30gaXMgZm9yIHVzZXIgZG9jdW1lbnRzLgogCi0lIFVzZWQgc29tZXRpbWVzIHRvIHR1cm4gb2ZmIChlZmZlY3RpdmVseSkgdGhlIGFjdGl2ZSBjaGFyYWN0ZXJzCi0lIGV2ZW4gYWZ0ZXIgcGFyc2luZyB0aGVtLgotQGRlZkB0dXJub2ZmYWN0aXZleyUKKyUgT24gc3RhcnR1cCwgQGZpeGJhY2tzbGFzaCBhc3NpZ25zOgorJSAgQGxldCBcID0gQG5vcm1hbGJhY2tzbGFzaAorJSBccmF3YmFja3NsYXNoIGRlZmluZXMgYW4gYWN0aXZlIFwgdG8gZG8gXGJhY2tzbGFzaGN1cmZvbnQuCislIFxvdGhlcmJhY2tzbGFzaCBkZWZpbmVzIGFuIGFjdGl2ZSBcIHRvIGJlIGEgbGl0ZXJhbCBgXCcgY2hhcmFjdGVyIHdpdGgKKyUgY2F0Y29kZSBvdGhlci4gIFdlIHN3aXRjaCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHRoZXNlLgorQGdkZWZAcmF3YmFja3NsYXNoe0BsZXRcPUBiYWNrc2xhc2hjdXJmb250fQorQGdkZWZAb3RoZXJiYWNrc2xhc2h7QGxldFw9QHJlYWxiYWNrc2xhc2h9CisKKyUgU2FtZSBhcyBAdHVybm9mZmFjdGl2ZSBleGNlcHQgb3V0cHV0cyBcIGFzIHtcdHRcY2hhcmBcXH0gaW5zdGVhZCBvZgorJSB0aGUgbGl0ZXJhbCBjaGFyYWN0ZXIgYFwnLgorJQorQGRlZkBub3JtYWx0dXJub2ZmYWN0aXZleyUKICAgQGxldCI9QG5vcm1hbGRvdWJsZXF1b3RlCi0gIEBsZXRcPUByZWFsYmFja3NsYXNoCi0gIEBsZXR+PUBub3JtYWx0aWxkZQorICBAbGV0JD1Abm9ybWFsZG9sbGFyICUkIGZvbnQtbG9jayBmaXgKKyAgQGxldCs9QG5vcm1hbHBsdXMKKyAgQGxldDw9QG5vcm1hbGxlc3MKKyAgQGxldD49QG5vcm1hbGdyZWF0ZXIKKyAgQGxldFw9QG5vcm1hbGJhY2tzbGFzaAogICBAbGV0Xj1Abm9ybWFsY2FyZXQKICAgQGxldF89QG5vcm1hbHVuZGVyc2NvcmUKICAgQGxldHw9QG5vcm1hbHZlcnRpY2FsYmFyCi0gIEBsZXQ8PUBub3JtYWxsZXNzCi0gIEBsZXQ+PUBub3JtYWxncmVhdGVyCi0gIEBsZXQrPUBub3JtYWxwbHVzCi0gIEBsZXQkPUBub3JtYWxkb2xsYXIgJSQgZm9udC1sb2NrIGZpeAorICBAbGV0fj1Abm9ybWFsdGlsZGUKKyAgQG1hcmt1cHNldHVwbHFkZWZhdWx0CisgIEBtYXJrdXBzZXR1cHJxZGVmYXVsdAogICBAdW5zZXBzcGFjZXMKIH0KIAotJSBTYW1lIGFzIEB0dXJub2ZmYWN0aXZlIGV4Y2VwdCBvdXRwdXRzIFwgYXMge1x0dFxjaGFyYFxcfSBpbnN0ZWFkIG9mCi0lIHRoZSBsaXRlcmFsIGNoYXJhY3RlciBgXCcuICAoVGh1cywgXCBpcyBub3QgZXhwYW5kYWJsZSB3aGVuIHRoaXMgaXMgaW4KLSUgZWZmZWN0LikKLSUKLUBkZWZAbm9ybWFsdHVybm9mZmFjdGl2ZXtAdHVybm9mZmFjdGl2ZSBAbGV0XD1Abm9ybWFsYmFja3NsYXNofQotCiAlIE1ha2UgXyBhbmQgKyBcb3RoZXIgY2hhcmFjdGVycywgdGVtcG9yYXJpbHkuCiAlIFRoaXMgaXMgY2FuY2VsZWQgYnkgQGZpeGJhY2tzbGFzaC4KIEBvdGhlcmlmeWFjdGl2ZQpAQCAtNzE3NSw3ICsxMDAyMiw3IEBACiBAZ2xvYmFsQGxldFwgPSBAZWF0aW5wdXQKIAogJSBPbiB0aGUgb3RoZXIgaGFuZCwgcGVyaGFwcyB0aGUgZmlsZSBkaWQgbm90IGhhdmUgYSBgXGlucHV0IHRleGluZm8nLiBUaGVuCi0lIHRoZSBmaXJzdCBgXHsgaW4gdGhlIGZpbGUgd291bGQgY2F1c2UgYW4gZXJyb3IuIFRoaXMgbWFjcm8gdHJpZXMgdG8gZml4CislIHRoZSBmaXJzdCBgXCcgaW4gdGhlIGZpbGUgd291bGQgY2F1c2UgYW4gZXJyb3IuIFRoaXMgbWFjcm8gdHJpZXMgdG8gZml4CiAlIHRoYXQsIGFzc3VtaW5nIGl0IGlzIGNhbGxlZCBiZWZvcmUgdGhlIGZpcnN0IGBcJyBjb3VsZCBwbGF1c2libHkgb2NjdXIuCiAlIEFsc28gdHVybiBiYWNrIG9uIGFjdGl2ZSBjaGFyYWN0ZXJzIHRoYXQgbWlnaHQgYXBwZWFyIGluIHRoZSBpbnB1dAogJSBmaWxlIG5hbWUsIGluIGNhc2Ugbm90IHVzaW5nIGEgcHJlLWR1bXBlZCBmb3JtYXQuCkBAIC03MTg5LDExICsxMDAzNiwyOCBAQAogJSBTYXkgQGZvbywgbm90IFxmb28sIGluIGVycm9yIG1lc3NhZ2VzLgogQGVzY2FwZWNoYXIgPSBgQEAKIAotJSBUaGVzZSBsb29rIG9rIGluIGFsbCBmb250cywgc28ganVzdCBtYWtlIHRoZW0gbm90IHNwZWNpYWwuCi1AY2F0Y29kZWBAJiA9IEBvdGhlcgotQGNhdGNvZGVgQCMgPSBAb3RoZXIKLUBjYXRjb2RlYEAlID0gQG90aGVyCislIFRoZXNlIChhbG9uZyB3aXRoICYgYW5kICMpIGFyZSBtYWRlIGFjdGl2ZSBmb3IgdXJsLWJyZWFraW5nLCBzbyBuZWVkCislIGFjdGl2ZSBkZWZpbml0aW9ucyBhcyB0aGUgbm9ybWFsIGNoYXJhY3RlcnMuCitAZGVmQG5vcm1hbGRvdHsufQorQGRlZkBub3JtYWxxdWVzdHs/fQorQGRlZkBub3JtYWxzbGFzaHsvfQogCislIFRoZXNlIGxvb2sgb2sgaW4gYWxsIGZvbnRzLCBzbyBqdXN0IG1ha2UgdGhlbSBub3Qgc3BlY2lhbC4KKyUgQGhhc2hjaGFye30gZ2V0cyBpdHMgb3duIHVzZXItbGV2ZWwgY29tbWFuZCwgYmVjYXVzZSBvZiAjbGluZS4KK0BjYXRjb2RlYEAmID0gQG90aGVyIEBkZWZAbm9ybWFsYW1weyZ9CitAY2F0Y29kZWBAIyA9IEBvdGhlciBAZGVmQG5vcm1hbGhhc2h7I30KK0BjYXRjb2RlYEAlID0gQG90aGVyIEBkZWZAbm9ybWFscGVyY2VudHslfQorCitAbGV0IEBoYXNoY2hhciA9IEBub3JtYWxoYXNoCisKK0BjIEZpbmFsbHksIG1ha2UgYCBhbmQgJyBhY3RpdmUsIHNvIHRoYXQgdHhpY29kZXF1b3RldW5kaXJlY3RlZCBhbmQKK0BjIHR4aWNvZGVxdW90ZWJhY2t0aWNrIHdvcmsgcmlnaHQgaW4sIGUuZy4sIEB3e0Bjb2Rle2Bmb28nfX0uICBJZiB3ZQorQGMgZG9uJ3QgbWFrZSBgIGFuZCAnIGFjdGl2ZSwgQGNvZGUgd2lsbCBub3QgZ2V0IHRoZW0gYXMgYWN0aXZlIGNoYXJzLgorQGMgRG8gdGhpcyBsYXN0IG9mIGFsbCBzaW5jZSB3ZSB1c2UgYCBpbiB0aGUgcHJldmlvdXMgQGNhdGNvZGUgYXNzaWdubWVudHMuCitAY2F0Y29kZWBAJz1AYWN0aXZlCitAY2F0Y29kZWBAYD1AYWN0aXZlCitAbWFya3Vwc2V0dXBscWRlZmF1bHQKK0BtYXJrdXBzZXR1cHJxZGVmYXVsdAogCiBAYyBMb2NhbCB2YXJpYWJsZXM6CiBAYyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCmRpZmYgLS1naXQgYS9idWlsZC1hdXgvdXBkYXRlLWI0LWNvcHlyaWdodCBiL2J1aWxkLWF1eC91cGRhdGUtYjQtY29weXJpZ2h0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMwZjVhMTMKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsZC1hdXgvdXBkYXRlLWI0LWNvcHlyaWdodApAQCAtMCwwICsxLDE1MiBAQAorIyEvdXNyL2Jpbi9wZXJsIC0wNzc3IC1waQorCisjIFVwZGF0ZSBiNF9jb3B5cmlnaHQgaW52b2NhdGlvbnMgb3IgYjRfY29weXJpZ2h0X3llYXJzIGRlZmluaXRpb25zIHRvCisjIGluY2x1ZGUgdGhlIGN1cnJlbnQgeWVhci4KKworIyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKworbXkgJG1hcmdpbiA9IDcyOworCitteSAkdGhpc195ZWFyID0gJEVOVntVUERBVEVfQ09QWVJJR0hUX1lFQVJ9OworaWYgKCEkdGhpc195ZWFyIHx8ICR0aGlzX3llYXIgIX4gbS9eXGR7NH0kLykKKyAgeworICAgIG15ICgkc2VjLCAkbWluLCAkaG91ciwgJG1kYXksICRtb250aCwgJHllYXIpID0gbG9jYWx0aW1lICh0aW1lICgpKTsKKyAgICAkdGhpc195ZWFyID0gJHllYXIgKyAxOTAwOworICB9CitteSAkb2xkX3JlID0gPDwnRU9GJworICAoCisgICAgKD86XnxcbikKKyAgICAjQkVGT1JFCisgICAgKD86CisgICAgICBiNF9jb3B5cmlnaHRcKFxbW15dW10qXQorICAgICAgfCBtNF8oPzpwdXNofHBvcClkZWZcKFxbYjRfY29weXJpZ2h0X3llYXJzXQorICAgICkKKyAgICAjQUZURVIKKyAgKQorICAoPzoKKyAgICAsXHMqCisgICAgKAorICAgICAgXFtccyogKD86XGR7NH0oPzosXHMqfC0pKSogKFxkezR9KSBccypdCisgICAgKQorICApPworICBcKQorRU9GCisgIDsKKword2hpbGUgKC8oJG9sZF9yZSkvZ3gpCisgIHsKKyAgICBteSAkc3RhcnQgPSBwb3MoKSAtIGxlbmd0aCAoJDEpOworICAgIG15ICRiNF9jb3B5cmlnaHRfbGluZSA9ICQyOworICAgIG15ICR5ZWFyX2xpbmVzID0gJDM7CisgICAgbXkgJGZpbmFsX3llYXIgPSAkNDsKKyAgICAkeWVhcl9saW5lcyAuPSAnKSc7CisKKyAgICAjIElmIHRoZXJlIHdhcyBhIHNlY29uZCBhcmd1bWVudCwgaXQgY29udGFpbnMgeWVhcnMsIHNvIHVwZGF0ZSB0aGVtLgorICAgIGlmICgkZmluYWxfeWVhcikKKyAgICAgIHsKKyAgICAgICAgJGI0X2NvcHlyaWdodF9saW5lIC49ICcsJzsKKyAgICAgICAgaWYgKCRmaW5hbF95ZWFyICE9ICR0aGlzX3llYXIpCisgICAgICAgICAgeworICAgICAgICAgICAgIyBVcGRhdGUgdGhlIHllYXIuCisgICAgICAgICAgICAkeWVhcl9saW5lcyA9fiBzLyRmaW5hbF95ZWFyLyRmaW5hbF95ZWFyLCAkdGhpc195ZWFyLzsKKyAgICAgICAgICB9CisKKyAgICAgICAgIyBOb3JtYWxpemUgYWxsIHdoaXRlc3BhY2UuCisgICAgICAgICR5ZWFyX2xpbmVzID1+IHMvXHMrLyAvZzsKKworICAgICAgICAjIFB1dCBzcGFjZXMgYWZ0ZXIgY29tbWFzLgorICAgICAgICAkeWVhcl9saW5lcyA9fiBzLywgPy8sIC9nOworCisgICAgICAgICMgQ29tcHJlc3MgdG8gaW50ZXJ2YWxzLgorICAgICAgICAkeWVhcl9saW5lcyA9fgorICAgICAgICAgIHMvCisgICAgICAgICAgICAoXGR7NH0pCisgICAgICAgICAgICAoPzoKKyAgICAgICAgICAgICAgKCxcIHwtKQorICAgICAgICAgICAgICAoKD8/eworICAgICAgICAgICAgICAgIGlmICAgICgkMiBlcSAnLScpIHsgJ1xkezR9JzsgfQorICAgICAgICAgICAgICAgIGVsc2lmICghJDMpICAgICAgIHsgJDEgKyAxOyAgfQorICAgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgIHsgJDMgKyAxOyAgfQorICAgICAgICAgICAgICB9KSkKKyAgICAgICAgICAgICkrCisgICAgICAgICAgLyQxLSQzL2d4OworCisgICAgICAgICMgRm9ybWF0IHdpdGhpbiBtYXJnaW4uCisgICAgICAgIG15ICR5ZWFyX2xpbmVzX25ldzsKKyAgICAgICAgbXkgJGluZGVudCA9IGluZGV4ICgkYjRfY29weXJpZ2h0X2xpbmUsICdbJyk7CisgICAgICAgIC0tJGluZGVudCBpZiAoJGI0X2NvcHlyaWdodF9saW5lID1+IG0vXlxuLyk7CisgICAgICAgIHdoaWxlIChsZW5ndGggJHllYXJfbGluZXMpCisgICAgICAgICAgeworICAgICAgICAgICAgbXkgJHRleHRfbWFyZ2luID0gJG1hcmdpbiAtICRpbmRlbnQ7CisgICAgICAgICAgICBpZiAoKCR5ZWFyX2xpbmVzID1+IHMvXiguezEsJHRleHRfbWFyZ2lufSkoPzogfCQpLy8pCisgICAgICAgICAgICAgICAgfHwgKCR5ZWFyX2xpbmVzID1+IHMvXihbXFNdKykoPzogfCQpLy8pKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbXkgJGxpbmUgPSAiXG4iIC4gKCcgJ3gkaW5kZW50KSAuICQxOworICAgICAgICAgICAgICAgICsrJGluZGVudCBpZiAoISR5ZWFyX2xpbmVzX25ldyk7CisgICAgICAgICAgICAgICAgJHllYXJfbGluZXNfbmV3IC49ICRsaW5lOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAjIFNob3VsZCBiZSB1bnJlYWNoYWJsZSwgYnV0IHdlIGRvbid0IHdhbnQgYW4gaW5maW5pdGUKKyAgICAgICAgICAgICAgICAjIGxvb3AgaWYgaXQgY2FuIGJlIHJlYWNoZWQuCisgICAgICAgICAgICAgICAgZGllOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICMgUmVwbGFjZSB0aGUgb2xkIGludm9jYXRpb24uICBTaG91bGQgbmV2ZXIgZGllLgorICAgICAgICBkaWUgaWYgKCFzLyRvbGRfcmVcRy8kYjRfY29weXJpZ2h0X2xpbmUkeWVhcl9saW5lc19uZXcveCk7CisKKyAgICAgICAgIyBQcmVwYXJlIGZvciB0aGUgbmV4dCBzZWFyY2guCisgICAgICAgIHBvcyAoKSA9ICRzdGFydCArIGxlbmd0aCAoIiRiNF9jb3B5cmlnaHRfbGluZSR5ZWFyX2xpbmVzX25ldyIpOworICAgICAgfQorICB9CisKK3doaWxlICgvKFxiYjRfY29weXJpZ2h0XCgpL2cpCisgIHsKKyAgICBteSAkc3RhcnQgPSBwb3MgKCkgLSBsZW5ndGggKCQxKTsKKyAgICBteSAkZW5kID0gcG9zICgpOworICAgIG15ICRyZSA9ICRvbGRfcmU7CisgICAgcG9zICgpID0gJHN0YXJ0OworICAgICRyZSA9fiBzL1wjQkVGT1JFL1xcRy87CisgICAgaWYgKCEvJHJlL3gpCisgICAgICB7CisgICAgICAgIG15ICRsaW5lID0gKHN1YnN0ciAoJF8sIDAsICRzdGFydCkgPX4gcy9cbi9cbi9nKSArIDE7CisgICAgICAgIHByaW50IFNUREVSUgorICAgICAgICAgICIkQVJHVjokbGluZTogd2FybmluZzogZmFpbGVkIHRvIHVwZGF0ZSBhIGI0X2NvcHlyaWdodFxuIjsKKyAgICAgIH0KKyAgICBwb3MgKCkgPSAkZW5kOworICB9CisKK3doaWxlICgvKFxbYjRfY29weXJpZ2h0X3llYXJzXSkvZykKKyAgeworICAgIG15ICRzdGFydCA9IHBvcyAoKSAtIGxlbmd0aCAoJDEpOworICAgIG15ICRlbmQgPSBwb3MgKCk7CisgICAgbXkgJHJlID0gJG9sZF9yZTsKKyAgICAkcmUgPX4gcy9cI0FGVEVSL1xcRy87CisgICAgaWYgKCEvJHJlL3gpCisgICAgICB7CisgICAgICAgICMgVGhlIHN1YnN0ciBvcGVyYXRpb24gYmxvd3MgYXdheSBwb3MgKCksIHNvIHJlc3RvcmluZyBwb3MgKCkKKyAgICAgICAgIyBhdCB0aGUgZW5kIGlzIG5lY2Vzc2FyeS4KKyAgICAgICAgbXkgJGxpbmUgPSAoc3Vic3RyICgkXywgMCwgJHN0YXJ0KSA9fiBzL1xuL1xuL2cpICsgMTsKKyAgICAgICAgcHJpbnQgU1RERVJSCisgICAgICAgICAgIiRBUkdWOiRsaW5lOiB3YXJuaW5nOiBmYWlsZWQgdG8gdXBkYXRlIGEiCisgICAgICAgICAgLiAiIGI0X2NvcHlyaWdodF95ZWFyc1xuIjsKKyAgICAgIH0KKyAgICBwb3MgKCkgPSAkZW5kOworICB9CmRpZmYgLS1naXQgYS9idWlsZC1hdXgvdXBkYXRlLWNvcHlyaWdodCBiL2J1aWxkLWF1eC91cGRhdGUtY29weXJpZ2h0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA4MmI3NDkKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsZC1hdXgvdXBkYXRlLWNvcHlyaWdodApAQCAtMCwwICsxLDI3NCBAQAorZXZhbCAnKGV4aXQgJD8wKScgJiYgZXZhbCAnZXhlYyBwZXJsIC13UyAtMDc3NyAtcGkgIiQwIiAkezErIiRAIn0nCisgICYgZXZhbCAnZXhlYyBwZXJsIC13UyAtMDc3NyAtcGkgIiQwIiAkYXJndjpxJworICAgIGlmIDA7CisjIFVwZGF0ZSBhbiBGU0YgY29weXJpZ2h0IHllYXIgbGlzdCB0byBpbmNsdWRlIHRoZSBjdXJyZW50IHllYXIuCisKK215ICRWRVJTSU9OID0gJzIwMTItMDItMDUuMjE6MzknOyAjIFVUQworCisjIENvcHlyaWdodCAoQykgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBXcml0dGVuIGJ5IEppbSBNZXllcmluZyBhbmQgSm9lbCBFLiBEZW5ueQorCisjIFRoZSBhcmd1bWVudHMgdG8gdGhpcyBzY3JpcHQgc2hvdWxkIGJlIG5hbWVzIG9mIGZpbGVzIHRoYXQgY29udGFpbgorIyBjb3B5cmlnaHQgc3RhdGVtZW50cyB0byBiZSB1cGRhdGVkLiAgVGhlIGNvcHlyaWdodCBob2xkZXIncyBuYW1lCisjIGRlZmF1bHRzIHRvICJGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4iIGJ1dCBtYXkgYmUgY2hhbmdlZCB0bworIyBhbnkgb3RoZXIgbmFtZSBieSB1c2luZyB0aGUgIlVQREFURV9DT1BZUklHSFRfSE9MREVSIiBlbnZpcm9ubWVudAorIyB2YXJpYWJsZS4KKyMKKyMgRm9yIGV4YW1wbGUsIHlvdSBtaWdodCB3aXNoIHRvIHVzZSB0aGUgdXBkYXRlLWNvcHlyaWdodCB0YXJnZXQgcnVsZQorIyBpbiBtYWludC5tayBmcm9tIGdudWxpYidzIG1haW50YWluZXItbWFrZWZpbGUgbW9kdWxlLgorIworIyBJZmYgYSBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIHJlY29nbml6ZWQgaW4gYSBmaWxlIGFuZCB0aGUgZmluYWwKKyMgeWVhciBpcyBub3QgdGhlIGN1cnJlbnQgeWVhciwgdGhlbiB0aGUgc3RhdGVtZW50IGlzIHVwZGF0ZWQgZm9yIHRoZQorIyBuZXcgeWVhciBhbmQgaXQgaXMgcmVmb3JtYXR0ZWQgdG86CisjCisjICAgMS4gRml0IHdpdGhpbiA3MiBjb2x1bW5zLgorIyAgIDIuIENvbnZlcnQgMi1kaWdpdCB5ZWFycyB0byA0LWRpZ2l0IHllYXJzIGJ5IHByZXBlbmRpbmcgIjE5Ii4KKyMgICAzLiBFeHBhbmQgY29weXJpZ2h0IHllYXIgaW50ZXJ2YWxzLiAgKFNlZSAiRW52aXJvbm1lbnQgdmFyaWFibGVzIgorIyAgICAgIGJlbG93LikKKyMKKyMgQSB3YXJuaW5nIGlzIHByaW50ZWQgZm9yIGV2ZXJ5IGZpbGUgZm9yIHdoaWNoIG5vIGNvcHlyaWdodAorIyBzdGF0ZW1lbnQgaXMgcmVjb2duaXplZC4KKyMKKyMgRWFjaCBmaWxlJ3MgY29weXJpZ2h0IHN0YXRlbWVudCBtdXN0IGJlIGZvcm1hdHRlZCBjb3JyZWN0bHkgaW4KKyMgb3JkZXIgdG8gYmUgcmVjb2duaXplZC4gIEZvciBleGFtcGxlLCBlYWNoIG9mIHRoZXNlIGlzIGZpbmU6CisjCisjICAgQ29weXJpZ2h0IEBjb3B5cmlnaHR7fSAxOTkwLTIwMDUsIDIwMDctMjAwOSBGcmVlIFNvZnR3YXJlCisjICAgRm91bmRhdGlvbiwgSW5jLgorIworIyAgICMgQ29weXJpZ2h0IChDKSAxOTkwLTIwMDUsIDIwMDctMjAwOSBGcmVlIFNvZnR3YXJlCisjICAgIyBGb3VuZGF0aW9uLCBJbmMuCisjCisjICAgLyoKKyMgICAgKiBDb3B5cmlnaHQgJmNvcHk7IDkwLDIwMDUsMjAwNy0yMDA5CisjICAgICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgICovCisjCisjIEhvd2V2ZXIsIHRoZSBmb2xsb3dpbmcgZm9ybWF0IGlzIG5vdCByZWNvZ25pemVkIGJlY2F1c2UgdGhlIGxpbmUKKyMgcHJlZml4IGNoYW5nZXMgYWZ0ZXIgdGhlIGZpcnN0IGxpbmU6CisjCisjICAgIyMgQ29weXJpZ2h0IChDKSAxOTkwLTIwMDUsIDIwMDctMjAwOSBGcmVlIFNvZnR3YXJlCisjICAgIyAgRm91bmRhdGlvbiwgSW5jLgorIworIyBIb3dldmVyLCBhbnkgY29ycmVjdGx5IGZvcm1hdHRlZCBjb3B5cmlnaHQgc3RhdGVtZW50IGZvbGxvd2luZworIyBhIG5vbi1tYXRjaGluZyBjb3B5cmlnaHQgc3RhdGVtZW50cyB3b3VsZCBiZSByZWNvZ25pemVkLgorIworIyBUaGUgZXhhY3QgY29uZGl0aW9ucyB0aGF0IGEgZmlsZSdzIGNvcHlyaWdodCBzdGF0ZW1lbnQgbXVzdCBtZWV0CisjIHRvIGJlIHJlY29nbml6ZWQgYXJlOgorIworIyAgIDEuIEl0IGlzIHRoZSBmaXJzdCBjb3B5cmlnaHQgc3RhdGVtZW50IHRoYXQgbWVldHMgYWxsIG9mIHRoZQorIyAgICAgIGZvbGxvd2luZyBjb25kaXRpb25zLiAgU3Vic2VxdWVudCBjb3B5cmlnaHQgc3RhdGVtZW50cyBhcmUKKyMgICAgICBpZ25vcmVkLgorIyAgIDIuIEl0cyBmb3JtYXQgaXMgIkNvcHlyaWdodCAoQykiLCB0aGVuIGEgbGlzdCBvZiBjb3B5cmlnaHQgeWVhcnMsCisjICAgICAgYW5kIHRoZW4gdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIuCisjICAgMy4gVGhlICIoQykiIHRha2VzIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1zIG9yIGlzIG9taXR0ZWQKKyMgICAgICBlbnRpcmVseToKKyMKKyMgICAgICAgIEEuIChDKQorIyAgICAgICAgQi4gKGMpCisjICAgICAgICBDLiBAY29weXJpZ2h0e30KKyMgICAgICAgIEQuICZjb3B5OworIworIyAgIDQuIFRoZSAiQ29weXJpZ2h0IiBhcHBlYXJzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLCBleGNlcHQgdGhhdCBpdAorIyAgICAgIG1heSBiZSBwcmVmaXhlZCBieSBhbnkgc2VxdWVuY2UgKGUuZy4sIGEgY29tbWVudCkgb2Ygbm8gbW9yZSB0aGFuCisjICAgICAgNSBjaGFyYWN0ZXJzIC0tIGluY2x1ZGluZyB3aGl0ZSBzcGFjZS4KKyMgICA1LiBJZmYgc3VjaCBhIHByZWZpeCBpcyBwcmVzZW50LCB0aGUgc2FtZSBwcmVmaXggYXBwZWFycyBhdCB0aGUKKyMgICAgICBiZWdpbm5pbmcgb2YgZWFjaCByZW1haW5pbmcgbGluZSB3aXRoaW4gdGhlIEZTRiBjb3B5cmlnaHQKKyMgICAgICBzdGF0ZW1lbnQuICBUaGVyZSBpcyBvbmUgZXhjZXB0aW9uIGluIG9yZGVyIHRvIHN1cHBvcnQgQy1zdHlsZQorIyAgICAgIGNvbW1lbnRzOiBpZiB0aGUgZmlyc3QgbGluZSdzIHByZWZpeCBjb250YWlucyBub3RoaW5nIGJ1dAorIyAgICAgIHdoaXRlc3BhY2Ugc3Vycm91bmRpbmcgYSAiLyoiLCB0aGVuIHRoZSBwcmVmaXggZm9yIGFsbCBzdWJzZXF1ZW50CisjICAgICAgbGluZXMgaXMgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IGxpbmUncyBwcmVmaXggZXhjZXB0IHdpdGggZWFjaCBvZgorIyAgICAgICIvIiBhbmQgcG9zc2libHkgIioiIHJlcGxhY2VkIGJ5IGEgIiAiLiAgVGhlIHJlcGxhY2VtZW50IG9mICIqIgorIyAgICAgIGJ5ICIgIiBpcyBjb25zaXN0ZW50IHRocm91Z2hvdXQgYWxsIHN1YnNlcXVlbnQgbGluZXMuCisjICAgNi4gQmxhbmsgbGluZXMsIGV2ZW4gaWYgcHJlY2VkZWQgYnkgdGhlIHByZWZpeCwgZG8gbm90IGFwcGVhcgorIyAgICAgIHdpdGhpbiB0aGUgRlNGIGNvcHlyaWdodCBzdGF0ZW1lbnQuCisjICAgNy4gRWFjaCBjb3B5cmlnaHQgeWVhciBpcyAyIG9yIDQgZGlnaXRzLCBhbmQgeWVhcnMgYXJlIHNlcGFyYXRlZCBieQorIyAgICAgIGNvbW1hcyBvciBkYXNoZXMuICBXaGl0ZXNwYWNlIG1heSBhcHBlYXIgYWZ0ZXIgY29tbWFzLgorIworIyBFbnZpcm9ubWVudCB2YXJpYWJsZXM6CisjCisjICAgMS4gSWYgVVBEQVRFX0NPUFlSSUdIVF9GT1JDRT0xLCBhIHJlY29nbml6ZWQgRlNGIGNvcHlyaWdodCBzdGF0ZW1lbnQKKyMgICAgICBpcyByZWZvcm1hdHRlZCBldmVuIGlmIGl0IGRvZXMgbm90IG5lZWQgdXBkYXRpbmcgZm9yIHRoZSBuZXcKKyMgICAgICB5ZWFyLiAgSWYgdW5zZXQgb3Igc2V0IHRvIDAsIG9ubHkgdXBkYXRlZCBGU0YgY29weXJpZ2h0CisjICAgICAgc3RhdGVtZW50cyBhcmUgcmVmb3JtYXR0ZWQuCisjICAgMi4gSWYgVVBEQVRFX0NPUFlSSUdIVF9VU0VfSU5URVJWQUxTPTEsIGV2ZXJ5IHNlcmllcyBvZiBjb25zZWN1dGl2ZQorIyAgICAgIGNvcHlyaWdodCB5ZWFycyAoc3VjaCBhcyA5MCwgMTk5MSwgMTk5Mi0yMDA3LCAyMDA4KSBpbiBhCisjICAgICAgcmVmb3JtYXR0ZWQgRlNGIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgY29sbGFwc2VkIHRvIGEgc2luZ2xlCisjICAgICAgaW50ZXJ2YWwgKHN1Y2ggYXMgMTk5MC0yMDA4KS4gIElmIHVuc2V0IG9yIHNldCB0byAwLCBhbGwgZXhpc3RpbmcKKyMgICAgICBjb3B5cmlnaHQgeWVhciBpbnRlcnZhbHMgaW4gYSByZWZvcm1hdHRlZCBGU0YgY29weXJpZ2h0IHN0YXRlbWVudAorIyAgICAgIGFyZSBleHBhbmRlZCBpbnN0ZWFkLgorIyAgICAgIElmIFVQREFURV9DT1BZUklHSFRfVVNFX0lOVEVSVkFMUz0yLCBjb252ZXJ0IGEgc2VxdWVuY2Ugd2l0aCBnYXBzCisjICAgICAgdG8gdGhlIG1pbmltYWwgY29udGFpbmluZyByYW5nZS4gIEZvciBleGFtcGxlLCBjb252ZXJ0CisjICAgICAgMjAwMCwgMjAwNC0yMDA3LCAyMDA5IHRvIDIwMDAtMjAwOS4KKyMgICAzLiBGb3IgdGVzdGluZyBwdXJwb3NlcywgeW91IGNhbiBzZXQgdGhlIGFzc3VtZWQgY3VycmVudCB5ZWFyIGluCisjICAgICAgVVBEQVRFX0NPUFlSSUdIVF9ZRUFSLgorIyAgIDQuIFRoZSBkZWZhdWx0IG1heGltdW0gbGluZSBsZW5ndGggZm9yIGEgY29weXJpZ2h0IGxpbmUgaXMgNzIuCisjICAgICAgU2V0IFVQREFURV9DT1BZUklHSFRfTUFYX0xJTkVfTEVOR1RIIHRvIHVzZSBhIGRpZmZlcmVudCBsZW5ndGguCisjICAgNS4gU2V0IFVQREFURV9DT1BZUklHSFRfSE9MREVSIGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGlzIG90aGVyCisjICAgICAgdGhhbiAiRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIi4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKworbXkgJGNvcHlyaWdodF9yZSA9ICdDb3B5cmlnaHQnOworbXkgJGNpcmNsZV9jX3JlID0gJyg/OlwoW2NDXVwpfEBjb3B5cmlnaHR7fXwmY29weTspJzsKK215ICRob2xkZXIgPSAkRU5We1VQREFURV9DT1BZUklHSFRfSE9MREVSfTsKKyRob2xkZXIgfHw9ICdGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4nOworbXkgJHByZWZpeF9tYXggPSA1OworbXkgJG1hcmdpbiA9ICRFTlZ7VVBEQVRFX0NPUFlSSUdIVF9NQVhfTElORV9MRU5HVEh9OworISRtYXJnaW4gfHwgJG1hcmdpbiAhfiBtL15cZCskLworICBhbmQgJG1hcmdpbiA9IDcyOworCitteSAkdGFiX3dpZHRoID0gODsKKworbXkgJHRoaXNfeWVhciA9ICRFTlZ7VVBEQVRFX0NPUFlSSUdIVF9ZRUFSfTsKK2lmICghJHRoaXNfeWVhciB8fCAkdGhpc195ZWFyICF+IG0vXlxkezR9JC8pCisgIHsKKyAgICBteSAoJHNlYywgJG1pbiwgJGhvdXIsICRtZGF5LCAkbW9udGgsICR5ZWFyKSA9IGxvY2FsdGltZSAodGltZSAoKSk7CisgICAgJHRoaXNfeWVhciA9ICR5ZWFyICsgMTkwMDsKKyAgfQorCisjIFVubGVzcyB0aGUgZmlsZSBjb25zaXN0ZW50bHkgdXNlcyAiXHJcbiIgYXMgdGhlIEVPTCwgdXNlICJcbiIgaW5zdGVhZC4KK215ICRlb2wgPSAvKD86XnxbXlxyXSlcbi8gPyAiXG4iIDogIlxyXG4iOworCitteSAkbGVhZGluZzsKK215ICRwcmVmaXg7CitteSAkd3NfcmU7CitteSAkc3RtdF9yZTsKK3doaWxlICgvKF58XG4pKC57MCwkcHJlZml4X21heH0pJGNvcHlyaWdodF9yZS9nKQorICB7CisgICAgJGxlYWRpbmcgPSAiJDEkMiI7CisgICAgJHByZWZpeCA9ICQyOworICAgIGlmICgkcHJlZml4ID1+IC9eKFxzKlwvKVwqKFxzKikkLykKKyAgICAgIHsKKyAgICAgICAgJHByZWZpeCA9fiBzLC8sICw7CisgICAgICAgIG15ICRwcmVmaXhfd3MgPSAkcHJlZml4OworICAgICAgICAkcHJlZml4X3dzID1+IHMvXCovIC87ICMgT25seSB3aGl0ZXNwYWNlLgorICAgICAgICBpZiAoL1xHKD86W14qXG5dfFwqW15cL1xuXSkqXCo/XG4kcHJlZml4X3dzLykKKyAgICAgICAgICB7CisgICAgICAgICAgICAkcHJlZml4ID0gJHByZWZpeF93czsKKyAgICAgICAgICB9CisgICAgICB9CisgICAgJHdzX3JlID0gJ1sgXHRcclxmXSc7ICMgXHMgd2l0aG91dCBcbgorICAgICR3c19yZSA9CisgICAgICAiKD86JHdzX3JlKig/OiR3c19yZXxcXG4iIC4gcXVvdGVtZXRhKCRwcmVmaXgpIC4gIikkd3NfcmUqKSI7CisgICAgbXkgJGhvbGRlcl9yZSA9ICRob2xkZXI7CisgICAgJGhvbGRlcl9yZSA9fiBzL1xzLyR3c19yZS9nOworICAgIG15ICRzdG10X3JlbWFpbmRlcl9yZSA9CisgICAgICAiKD86JHdzX3JlJGNpcmNsZV9jX3JlKT8iCisgICAgICAuICIkd3NfcmUoPzooPzpcXGRcXGQpP1xcZFxcZCg/Oiwkd3NfcmU/fC0pKSoiCisgICAgICAuICIoKD86XFxkXFxkKT9cXGRcXGQpJHdzX3JlJGhvbGRlcl9yZSI7CisgICAgaWYgKC9cRyRzdG10X3JlbWFpbmRlcl9yZS8pCisgICAgICB7CisgICAgICAgICRzdG10X3JlID0KKyAgICAgICAgICBxdW90ZW1ldGEoJGxlYWRpbmcpIC4gIigkY29weXJpZ2h0X3JlJHN0bXRfcmVtYWluZGVyX3JlKSI7CisgICAgICAgIGxhc3Q7CisgICAgICB9CisgIH0KK2lmIChkZWZpbmVkICRzdG10X3JlKQorICB7CisgICAgLyRzdG10X3JlLyBvciBkaWU7ICMgU2hvdWxkIG5ldmVyIGRpZS4KKyAgICBteSAkc3RtdCA9ICQxOworICAgIG15ICRmaW5hbF95ZWFyX29yaWcgPSAkMjsKKworICAgICMgSGFuZGxlIHR3by1kaWdpdCB5ZWFyIG51bWJlcnMgbGlrZSAiOTgiIGFuZCAiOTkiLgorICAgIG15ICRmaW5hbF95ZWFyID0gJGZpbmFsX3llYXJfb3JpZzsKKyAgICAkZmluYWxfeWVhciA8PSA5OQorICAgICAgYW5kICRmaW5hbF95ZWFyICs9IDE5MDA7CisKKyAgICBpZiAoJGZpbmFsX3llYXIgIT0gJHRoaXNfeWVhcikKKyAgICAgIHsKKyAgICAgICAgIyBVcGRhdGUgdGhlIHllYXIuCisgICAgICAgICRzdG10ID1+IHMvJGZpbmFsX3llYXJfb3JpZy8kZmluYWxfeWVhciwgJHRoaXNfeWVhci87CisgICAgICB9CisgICAgaWYgKCRmaW5hbF95ZWFyICE9ICR0aGlzX3llYXIgfHwgJEVOVnsnVVBEQVRFX0NPUFlSSUdIVF9GT1JDRSd9KQorICAgICAgeworICAgICAgICAjIE5vcm1hbGl6ZSBhbGwgd2hpdGVzcGFjZSBpbmNsdWRpbmcgbmV3bGluZS1wcmVmaXggc2VxdWVuY2VzLgorICAgICAgICAkc3RtdCA9fiBzLyR3c19yZS8gL2c7CisKKyAgICAgICAgIyBQdXQgc3BhY2VzIGFmdGVyIGNvbW1hcy4KKyAgICAgICAgJHN0bXQgPX4gcy8sID8vLCAvZzsKKworICAgICAgICAjIENvbnZlcnQgMi1kaWdpdCB0byA0LWRpZ2l0IHllYXJzLgorICAgICAgICAkc3RtdCA9fiBzLyhcYlxkXGRcYikvMTkkMS9nOworCisgICAgICAgICMgTWFrZSB0aGUgdXNlIG9mIGludGVydmFscyBjb25zaXN0ZW50LgorICAgICAgICBpZiAoISRFTlZ7VVBEQVRFX0NPUFlSSUdIVF9VU0VfSU5URVJWQUxTfSkKKyAgICAgICAgICB7CisgICAgICAgICAgICAkc3RtdCA9fiBzLyhcZHs0fSktKFxkezR9KS9qb2luKCcsICcsICQxLi4kMikvZWc7CisgICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgJHN0bXQgPX4KKyAgICAgICAgICAgICAgcy8KKyAgICAgICAgICAgICAgICAoXGR7NH0pCisgICAgICAgICAgICAgICAgKD86CisgICAgICAgICAgICAgICAgICAoLFwgfC0pCisgICAgICAgICAgICAgICAgICAoKD8/eworICAgICAgICAgICAgICAgICAgICBpZiAgICAoJDIgZXEgJy0nKSB7ICdcZHs0fSc7IH0KKyAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCEkMykgICAgICAgeyAkMSArIDE7ICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgIHsgJDMgKyAxOyAgfQorICAgICAgICAgICAgICAgICAgfSkpCisgICAgICAgICAgICAgICAgKSsKKyAgICAgICAgICAgICAgLyQxLSQzL2d4OworCisgICAgICAgICAgICAjIFdoZW4gaXQncyAyLCBlbWl0IGEgc2luZ2xlIHJhbmdlIGVuY29tcGFzc2luZyBhbGwgeWVhciBudW1iZXJzLgorICAgICAgICAgICAgJEVOVntVUERBVEVfQ09QWVJJR0hUX1VTRV9JTlRFUlZBTFN9ID09IDIKKyAgICAgICAgICAgICAgYW5kICRzdG10ID1+IHMvXGIoXGR7NH0pXGIuKlxiKFxkezR9KVxiLyQxLSQyLzsKKyAgICAgICAgICB9CisKKyAgICAgICAgIyBGb3JtYXQgd2l0aGluIG1hcmdpbi4KKyAgICAgICAgbXkgJHN0bXRfd3JhcHBlZDsKKyAgICAgICAgbXkgJHRleHRfbWFyZ2luID0gJG1hcmdpbiAtIGxlbmd0aCgkcHJlZml4KTsKKyAgICAgICAgaWYgKCRwcmVmaXggPX4gL14oXHQrKS8pCisgICAgICAgICAgeworICAgICAgICAgICAgJHRleHRfbWFyZ2luIC09IGxlbmd0aCgkMSkgKiAoJHRhYl93aWR0aCAtIDEpOworICAgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKGxlbmd0aCAkc3RtdCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoKCRzdG10ID1+IHMvXiguezEsJHRleHRfbWFyZ2lufSkoPzogfCQpLy8pCisgICAgICAgICAgICAgICAgfHwgKCRzdG10ID1+IHMvXihbXFNdKykoPzogfCQpLy8pKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbXkgJGxpbmUgPSAkMTsKKyAgICAgICAgICAgICAgICAkc3RtdF93cmFwcGVkIC49ICRzdG10X3dyYXBwZWQgPyAiJGVvbCRwcmVmaXgiIDogJGxlYWRpbmc7CisgICAgICAgICAgICAgICAgJHN0bXRfd3JhcHBlZCAuPSAkbGluZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIyBTaG91bGQgYmUgdW5yZWFjaGFibGUsIGJ1dCB3ZSBkb24ndCB3YW50IGFuIGluZmluaXRlCisgICAgICAgICAgICAgICAgIyBsb29wIGlmIGl0IGNhbiBiZSByZWFjaGVkLgorICAgICAgICAgICAgICAgIGRpZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAjIFJlcGxhY2UgdGhlIG9sZCBjb3B5cmlnaHQgc3RhdGVtZW50LgorICAgICAgICBzLyRzdG10X3JlLyRzdG10X3dyYXBwZWQvOworICAgICAgfQorICB9CitlbHNlCisgIHsKKyAgICBwcmludCBTVERFUlIgIiRBUkdWOiB3YXJuaW5nOiBjb3B5cmlnaHQgc3RhdGVtZW50IG5vdCBmb3VuZFxuIjsKKyAgfQorCisjIExvY2FsIHZhcmlhYmxlczoKKyMgbW9kZTogcGVybAorIyBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAibXkgJFZFUlNJT04gPSAnIgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySDolMDJNIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICInOyAjIFVUQyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L3VzZWxlc3MtaWYtYmVmb3JlLWZyZWUgYi9idWlsZC1hdXgvdXNlbGVzcy1pZi1iZWZvcmUtZnJlZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYjY0NjMwCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbGQtYXV4L3VzZWxlc3MtaWYtYmVmb3JlLWZyZWUKQEAgLTAsMCArMSwyMDcgQEAKK2V2YWwgJyhleGl0ICQ/MCknICYmIGV2YWwgJ2V4ZWMgcGVybCAtd1NUICIkMCIgJHsxKyIkQCJ9JworICAmIGV2YWwgJ2V4ZWMgcGVybCAtd1NUICIkMCIgJGFyZ3Y6cScKKyAgICBpZiAwOworIyBEZXRlY3QgaW5zdGFuY2VzIG9mICJpZiAocCkgZnJlZSAocCk7Ii4KKyMgTGlrZXdpc2UgImlmIChwICE9IDApIiwgImlmICgwICE9IHApIiwgb3Igd2l0aCBOVUxMOyBhbmQgd2l0aCBicmFjZXMuCisKK215ICRWRVJTSU9OID0gJzIwMTItMDEtMDYgMDc6MjMnOyAjIFVUQworIyBUaGUgZGVmaW5pdGlvbiBhYm92ZSBtdXN0IGxpZSB3aXRoaW4gdGhlIGZpcnN0IDggbGluZXMgaW4gb3JkZXIKKyMgZm9yIHRoZSBFbWFjcyB0aW1lLXN0YW1wIHdyaXRlIGhvb2sgKGF0IGVuZCkgdG8gdXBkYXRlIGl0LgorIyBJZiB5b3UgY2hhbmdlIHRoaXMgZmlsZSB3aXRoIEVtYWNzLCBwbGVhc2UgbGV0IHRoZSB3cml0ZSBob29rCisjIGRvIGl0cyBqb2IuICBPdGhlcndpc2UsIHVwZGF0ZSB0aGlzIHN0cmluZyBtYW51YWxseS4KKworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgV3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBHZXRvcHQ6Okxvbmc7CisKKyhteSAkTUUgPSAkMCkgPX4gc3wuKi98fDsKKworIyB1c2UgRmlsZTo6Q29kYTsgIyBodHRwOi8vbWV5ZXJpbmcubmV0L2NvZGUvQ29kYS8KK0VORCB7CisgIGRlZmluZWQgZmlsZW5vIFNURE9VVCBvciByZXR1cm47CisgIGNsb3NlIFNURE9VVCBhbmQgcmV0dXJuOworICB3YXJuICIkTUU6IGZhaWxlZCB0byBjbG9zZSBzdGFuZGFyZCBvdXRwdXQ6ICQhXG4iOworICAkPyB8fD0gMTsKK30KKworc3ViIHVzYWdlICgkKQoreworICBteSAoJGV4aXRfY29kZSkgPSBAXzsKKyAgbXkgJFNUUkVBTSA9ICgkZXhpdF9jb2RlID09IDAgPyAqU1RET1VUIDogKlNUREVSUik7CisgIGlmICgkZXhpdF9jb2RlICE9IDApCisgICAgeworICAgICAgcHJpbnQgJFNUUkVBTSAiVHJ5ICckTUUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiI7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcHJpbnQgJFNUUkVBTSA8PEVPRjsKK1VzYWdlOiAkTUUgW09QVElPTlNdIEZJTEUuLi4KKworRGV0ZWN0IGFueSBpbnN0YW5jZSBpbiBGSUxFIG9mIGEgdXNlbGVzcyAiaWYiIHRlc3QgYmVmb3JlIGEgZnJlZSBjYWxsLCBlLmcuLAorImlmIChwKSBmcmVlIChwKTsiLiAgQW55IHN1Y2ggdGVzdCBtYXkgYmUgc2FmZWx5IHJlbW92ZWQgd2l0aG91dCBhZmZlY3RpbmcKK3RoZSBzZW1hbnRpY3Mgb2YgdGhlIEMgY29kZSBpbiBGSUxFLiAgVXNlIC0tbmFtZT1GT08gLS1uYW1lPUJBUiB0byBhbHNvCitkZXRlY3QgZnJlZS1saWtlIGZ1bmN0aW9ucyBuYW1lZCBGT08gYW5kIEJBUi4KKworT1BUSU9OUzoKKworICAgLS1saXN0ICAgICAgIHByaW50IG9ubHkgdGhlIG5hbWUgb2YgZWFjaCBtYXRjaGluZyBGSUxFIChcXDAtdGVybWluYXRlZCkKKyAgIC0tbmFtZT1OICAgICBhZGQgbmFtZSBOIHRvIHRoZSBsaXN0IG9mIFwnZnJlZVwnLWxpa2UgZnVuY3Rpb25zIHRvIGRldGVjdDsKKyAgICAgICAgICAgICAgICAgIG1heSBiZSByZXBlYXRlZAorCisgICAtLWhlbHAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQKKyAgIC0tdmVyc2lvbiAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorCitFeGl0IHN0YXR1czoKKworICAwICAgb25lIG9yIG1vcmUgbWF0Y2hlcworICAxICAgbm8gbWF0Y2gKKyAgMiAgIGFuIGVycm9yCisKK0VYQU1QTEU6CisKK0ZvciBleGFtcGxlLCB0aGlzIGNvbW1hbmQgcHJpbnRzIGFsbCByZW1vdmFibGUgImlmIiB0ZXN0cyBiZWZvcmUgImZyZWUiCithbmQgImtmcmVlIiBjYWxscyBpbiB0aGUgbGludXgga2VybmVsIHNvdXJjZXM6CisKKyAgICBnaXQgbHMtZmlsZXMgLXogfHhhcmdzIC0wICRNRSAtLW5hbWU9a2ZyZWUKKworRU9GCisgICAgfQorICBleGl0ICRleGl0X2NvZGU7Cit9CisKK3N1YiBpc19OVUxMICgkKQoreworICBteSAoJGV4cHIpID0gQF87CisgIHJldHVybiAoJGV4cHIgZXEgJ05VTEwnIHx8ICRleHByIGVxICcwJyk7Cit9CisKK3sKKyAgc3ViIEVYSVRfTUFUQ0ggezB9CisgIHN1YiBFWElUX05PX01BVENIIHsxfQorICBzdWIgRVhJVF9FUlJPUiB7Mn0KKyAgbXkgJGVyciA9IEVYSVRfTk9fTUFUQ0g7CisKKyAgbXkgJGxpc3Q7CisgIG15IEBuYW1lID0gcXcoZnJlZSk7CisgIEdldE9wdGlvbnMKKyAgICAoCisgICAgIGhlbHAgPT4gc3ViIHsgdXNhZ2UgMCB9LAorICAgICB2ZXJzaW9uID0+IHN1YiB7IHByaW50ICIkTUUgdmVyc2lvbiAkVkVSU0lPTlxuIjsgZXhpdCB9LAorICAgICBsaXN0ID0+IFwkbGlzdCwKKyAgICAgJ25hbWU9c0AnID0+IFxAbmFtZSwKKyAgICApIG9yIHVzYWdlIDE7CisKKyAgIyBNYWtlIHN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgbnVtYmVyIG9mIG5vbi1vcHRpb24gYXJndW1lbnRzLgorICAjIEFsd2F5cyB0ZWxsIHRoZSB1c2VyIHdoeSB3ZSBmYWlsLgorICBAQVJHViA8IDEKKyAgICBhbmQgKHdhcm4gIiRNRTogbWlzc2luZyBGSUxFIGFyZ3VtZW50XG4iKSwgdXNhZ2UgRVhJVF9FUlJPUjsKKworICBteSAkb3IgPSBqb2luICd8JywgQG5hbWU7CisgIG15ICRyZWdleHAgPSBxci8oPzokb3IpLzsKKworICAjIFNldCB0aGUgaW5wdXQgcmVjb3JkIHNlcGFyYXRvci4KKyAgIyBOb3RlOiB0aGlzIG1ha2VzIGl0IGltcHJhY3RpY2FsIHRvIHByaW50IGxpbmUgbnVtYmVycy4KKyAgJC8gPSAnIic7CisKKyAgbXkgJGZvdW5kX21hdGNoID0gMDsKKyBGSUxFOgorICBmb3JlYWNoIG15ICRmaWxlIChAQVJHVikKKyAgICB7CisgICAgICBvcGVuIEZILCAnPCcsICRmaWxlCisgICAgICAgIG9yICh3YXJuICIkTUU6IGNhbid0IG9wZW4gJyRmaWxlJyBmb3IgcmVhZGluZzogJCFcbiIpLAorICAgICAgICAgICRlcnIgPSBFWElUX0VSUk9SLCBuZXh0OworICAgICAgd2hpbGUgKGRlZmluZWQgKG15ICRsaW5lID0gPEZIPikpCisgICAgICAgIHsKKyAgICAgICAgICB3aGlsZSAoJGxpbmUgPX4KKyAgICAgICAgICAgICAgL1xiKGlmXHMqXChccyooW14pXSs/KSg/OlxzKiE9XHMqKFteKV0rPykpP1xzKlwpCisgICAgICAgICAgICAgICMgIDEgICAgICAgICAgMiAgICAgICAgICAgICAgICAgIDMKKyAgICAgICAgICAgICAgICg/OiAgIFxzKiRyZWdleHBccypcKCg/OlxzKlwoW14pXStcKSk/XHMqKFteKV0rKVwpXHMqO3wKKyAgICAgICAgICAgICAgICBccypce1xzKiRyZWdleHBccypcKCg/OlxzKlwoW14pXStcKSk/XHMqKFteKV0rKVwpXHMqO1xzKlx9KSkvc3hnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBteSAkYWxsID0gJDE7CisgICAgICAgICAgICAgIG15ICgkbGhzLCAkcmhzKSA9ICgkMiwgJDMpOworICAgICAgICAgICAgICBteSAoJGZyZWVfb3BuZCwgJGJyYWNlZF9mcmVlX29wbmQpID0gKCQ0LCAkNSk7CisgICAgICAgICAgICAgIG15ICRub25fTlVMTDsKKyAgICAgICAgICAgICAgaWYgKCFkZWZpbmVkICRyaHMpIHsgJG5vbl9OVUxMID0gJGxocyB9CisgICAgICAgICAgICAgIGVsc2lmIChpc19OVUxMICRyaHMpIHsgJG5vbl9OVUxMID0gJGxocyB9CisgICAgICAgICAgICAgIGVsc2lmIChpc19OVUxMICRsaHMpIHsgJG5vbl9OVUxMID0gJHJocyB9CisgICAgICAgICAgICAgIGVsc2UgeyBuZXh0IH0KKworICAgICAgICAgICAgICAjIENvbXBhcmUgdGhlIG5vbi1OVUxMIHBhcnQgb2YgdGhlICJpZiIgZXhwcmVzc2lvbiBhbmQgdGhlCisgICAgICAgICAgICAgICMgZnJlZSdkIGV4cHJlc3Npb24sIHdpdGhvdXQgcmVnYXJkIHRvIHdoaXRlIHNwYWNlLgorICAgICAgICAgICAgICAkbm9uX05VTEwgPX4gdHIvIFx0Ly9kOworICAgICAgICAgICAgICBteSAkZTIgPSBkZWZpbmVkICRmcmVlX29wbmQgPyAkZnJlZV9vcG5kIDogJGJyYWNlZF9mcmVlX29wbmQ7CisgICAgICAgICAgICAgICRlMiA9fiB0ci8gXHQvL2Q7CisgICAgICAgICAgICAgIGlmICgkbm9uX05VTEwgZXEgJGUyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICRmb3VuZF9tYXRjaCA9IDE7CisgICAgICAgICAgICAgICAgICAkbGlzdAorICAgICAgICAgICAgICAgICAgICBhbmQgKHByaW50ICIkZmlsZVwwIiksIG5leHQgRklMRTsKKyAgICAgICAgICAgICAgICAgIHByaW50ICIkZmlsZTogJGFsbFxuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgIGNvbnRpbnVlCisgICAgeworICAgICAgY2xvc2UgRkg7CisgICAgfQorCisgICRmb3VuZF9tYXRjaCAmJiAkZXJyID09IEVYSVRfTk9fTUFUQ0gKKyAgICBhbmQgJGVyciA9IEVYSVRfTUFUQ0g7CisKKyAgZXhpdCAkZXJyOworfQorCitteSAkZm9vID0gPDwnRU9GJzsKKyMgVGhlIGFib3ZlIGlzIHRvICpmaW5kKiB0aGVtLgorIyBUaGlzIGFkanVzdHMgdGhlbSwgcmVtb3ZpbmcgdGhlIHVubmVjZXNzYXJ5ICJpZiAocCkiIHBhcnQuCisKKyMgRklYTUU6IGRvIHNvbWV0aGluZyBsaWtlIHRoaXMgYXMgYW4gb3B0aW9uIChkb2Vzbid0IGRvIGJyYWNlcyk6CitmcmVlPXhmcmVlCitnaXQgZ3JlcCAtbCAteiAiJGZyZWUgKigiIFwKKyAgfCB4YXJncyAtMCB1c2VsZXNzLWlmLWJlZm9yZS1mcmVlIC1sIC0tbmFtZT0iJGZyZWUiIFwKKyAgfCB4YXJncyAtMCBwZXJsIC0weDNiIC1waSAtZSBcCisgICAncy9cYmlmXHMqXChccyooXFMrPykoPzpccyohPVxzKig/OjB8TlVMTCkpP1xzKlwpXHMrKCciJGZyZWUiJ1xzKlwoKD86XHMqXChbXildK1wpKT9ccypcMVxzKlwpXHMqOykvJDIvcycKKworIyBVc2UgdGhlIGZvbGxvd2luZyB0byByZW1vdmUgcmVkdW5kYW50IHVzZXMgb2Yga2ZyZWUgaW5zaWRlIGJyYWNlcy4KKyMgTm90ZSB0aGF0IC0wNzc3IHB1dHMgcGVybCBpbiBzbHVycC13aG9sZS1maWxlIG1vZGU7CisjIGJ1dCB3ZSBoYXZlIHBsZW50eSBvZiBtZW1vcnksIHRoZXNlIGRheXMuLi4KK2ZyZWU9a2ZyZWUKK2dpdCBncmVwIC1sIC16ICIkZnJlZSAqKCIgXAorICB8IHhhcmdzIC0wIHVzZWxlc3MtaWYtYmVmb3JlLWZyZWUgLWwgLS1uYW1lPSIkZnJlZSIgXAorICB8IHhhcmdzIC0wIHBlcmwgLTA3NzcgLXBpIC1lIFwKKyAgICAgJ3MvXGJpZlxzKlwoXHMqKFxTKz8pKD86XHMqIT1ccyooPzowfE5VTEwpKT9ccypcKVxzKlx7XHMqKCciJGZyZWUiJ1xzKlwoKD86XHMqXChbXildK1wpKT9ccypcMVxzKlwpOylccypcfVteXG5dKiQvJDIvZ21zJworCitCZSBjYXJlZnVsIHRoYXQgdGhlIHJlc3VsdCBvZiB0aGUgYWJvdmUgdHJhbnNmb3JtYXRpb24gaXMgdmFsaWQuCitJZiB0aGUgbWF0Y2hlZCBzdHJpbmcgaXMgZm9sbG93ZWQgYnkgImVsc2UiLCB0aGVuIG9idmlvdXNseSwgaXQgd29uJ3QgYmUuCisKK1doZW4gbW9kaWZ5aW5nIGZpbGVzLCByZWZ1c2UgdG8gcHJvY2VzcyBhbnl0aGluZyBvdGhlciB0aGFuIGEgcmVndWxhciBmaWxlLgorRU9GCisKKyMjIExvY2FsIFZhcmlhYmxlczoKKyMjIG1vZGU6IHBlcmwKKyMjIGluZGVudC10YWJzLW1vZGU6IG5pbAorIyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyMgdGltZS1zdGFtcC1zdGFydDogIm15ICRWRVJTSU9OID0gJyIKKyMjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZCAlMDJIOiUwMk0iCisjIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMjIHRpbWUtc3RhbXAtZW5kOiAiJzsgIyBVVEMiCisjIyBFbmQ6CmRpZmYgLS1naXQgYS9idWlsZC1hdXgvdmMtbGlzdC1maWxlcyBiL2J1aWxkLWF1eC92Yy1saXN0LWZpbGVzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ0NzdkYTgKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsZC1hdXgvdmMtbGlzdC1maWxlcwpAQCAtMCwwICsxLDExMyBAQAorIyEvYmluL3NoCisjIExpc3QgdmVyc2lvbi1jb250cm9sbGVkIGZpbGUgbmFtZXMuCisKKyMgUHJpbnQgYSB2ZXJzaW9uIHN0cmluZy4KK3NjcmlwdHZlcnNpb249MjAxMS0wNS0xNi4yMjsgIyBVVEMKKworIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKworIyBMaXN0IHRoZSBzcGVjaWZpZWQgdmVyc2lvbi1jb250cm9sbGVkIGZpbGVzLgorIyBXaXRoIG5vIGFyZ3VtZW50LCBsaXN0IHRoZW0gYWxsLiAgV2l0aCBhIHNpbmdsZSBESVJFQ1RPUlkgYXJndW1lbnQsCisjIGxpc3QgdGhlIHZlcnNpb24tY29udHJvbGxlZCBmaWxlcyBpbiB0aGF0IGRpcmVjdG9yeS4KKworIyBJZiB0aGVyZSdzIGFuIGFyZ3VtZW50LCBpdCBtdXN0IGJlIGEgc2luZ2xlLCAiLiItcmVsYXRpdmUgZGlyZWN0b3J5IG5hbWUuCisjIGN2c3UgaXMgcGFydCBvZiB0aGUgY3ZzdXRpbHMgcGFja2FnZTogaHR0cDovL3d3dy5yZWQtYmVhbi5jb20vY3ZzdXRpbHMvCisKK3Bvc3Rwcm9jZXNzPQorY2FzZSAkMSBpbgorICAtLWhlbHApIGNhdCA8PEVPRgorVXNhZ2U6ICQwIFstQyBTUkNESVJdIFtESVIuLi5dCisKK091dHB1dCBhIGxpc3Qgb2YgdmVyc2lvbi1jb250cm9sbGVkIGZpbGVzIGluIERJUiAoZGVmYXVsdCAuKSwgcmVsYXRpdmUgdG8KK1NSQ0RJUiAoZGVmYXVsdCAuKS4gIFNSQ0RJUiBtdXN0IGJlIHRoZSB0b3AgZGlyZWN0b3J5IG9mIGEgY2hlY2tvdXQuCisKK09wdGlvbnM6CisgIC0taGVscCAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLS12ZXJzaW9uICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisgIC1DIFNSQ0RJUiAgY2hhbmdlIGRpcmVjdG9yeSB0byBTUkNESVIgYmVmb3JlIGdlbmVyYXRpbmcgbGlzdAorCitSZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8YnVnLWdudWxpYkBnbnUub3JnPi4KK0VPRgorICAgIGV4aXQgOzsKKworICAtLXZlcnNpb24pCisgICAgeWVhcj1gZWNobyAiJHNjcmlwdHZlcnNpb24iIHwgc2VkICdzL1teMC05XS4qLy8nYAorICAgIGNhdCA8PEVPRgordmMtbGlzdC1maWxlcyAkc2NyaXB0dmVyc2lvbgorQ29weXJpZ2h0IChDKSAkeWVhciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYywKK0xpY2Vuc2UgR1BMdjMrOiBHTlUgR1BMIHZlcnNpb24gMyBvciBsYXRlciA8aHR0cDovL2dudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWw+CitUaGlzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBhcmUgZnJlZSB0byBjaGFuZ2UgYW5kIHJlZGlzdHJpYnV0ZSBpdC4KK1RoZXJlIGlzIE5PIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuCitFT0YKKyAgICBleGl0IDs7CisKKyAgLUMpCisgICAgdGVzdCAiJDIiID0gLiB8fCBwb3N0cHJvY2Vzcz0ifCBzZWQgJ3N8XnwkMi98JyIKKyAgICBjZCAiJDIiIHx8IGV4aXQgMQorICAgIHNoaWZ0OyBzaGlmdCA7OworZXNhYworCit0ZXN0ICQjID0gMCAmJiBzZXQgLgorCitmb3IgZGlyCitkbworICBpZiB0ZXN0IC1kIC5naXQ7IHRoZW4KKyAgICB0ZXN0ICJ4JGRpciIgPSB4LiBcCisgICAgICAmJiBkaXI9IHNlZF9lc2M9IFwKKyAgICAgIHx8IHsgZGlyPSIkZGlyLyI7IHNlZF9lc2M9YGVjaG8gIiRkaXIifGVudiBzZWQgJ3MsXChbXFwvXVwpLFxcXFxcMSxnJ2A7IH0KKyAgICAjIElnbm9yZSBnaXQgc3ltbGlua3MgLSBlaXRoZXIgdGhleSBwb2ludCBpbnRvIHRoZSB0cmVlLCBpbiB3aGljaCBjYXNlCisgICAgIyB3ZSBkb24ndCBuZWVkIHRvIHZpc2l0IHRoZSB0YXJnZXQgdHdpY2UsIG9yIHRoZXkgcG9pbnQgc29tZXdoZXJlCisgICAgIyBlbHNlIChvZnRlbiBpbnRvIGEgc3VibW9kdWxlKSwgaW4gd2hpY2ggY2FzZSB0aGUgY29udGVudCBkb2VzIG5vdAorICAgICMgYmVsb25nIHRvIHRoaXMgcGFja2FnZS4KKyAgICBldmFsIGV4ZWMgZ2l0IGxzLXRyZWUgLXIgJ0hFQUQ6IiRkaXIiJyBcCisgICAgICBcfCBzZWQgLW4gJyJzL14xMDBbXgldKi4vJHNlZF9lc2MvcCInICRwb3N0cHJvY2VzcworICBlbGlmIHRlc3QgLWQgLmhnOyB0aGVuCisgICAgZXZhbCBleGVjIGhnIGxvY2F0ZSAnIiRkaXIvKiInICRwb3N0cHJvY2VzcworICBlbGlmIHRlc3QgLWQgLmJ6cjsgdGhlbgorICAgIHRlc3QgIiRwb3N0cHJvY2VzcyIgPSAnJyAmJiBwb3N0cHJvY2Vzcz0ifCBzZWQgJ3N8XlwuL3x8JyIKKyAgICBldmFsIGV4ZWMgYnpyIGxzIC1SIC0tdmVyc2lvbmVkICciJGRpciInICRwb3N0cHJvY2VzcworICBlbGlmIHRlc3QgLWQgQ1ZTOyB0aGVuCisgICAgdGVzdCAiJHBvc3Rwcm9jZXNzIiA9ICcnICYmIHBvc3Rwcm9jZXNzPSJ8IHNlZCAnc3xeXC4vfHwnIgorICAgIGlmIHRlc3QgLXggYnVpbGQtYXV4L2N2c3U7IHRoZW4KKyAgICAgIGV2YWwgYnVpbGQtYXV4L2N2c3UgLS1maW5kIC0tdHlwZXM9QUZHTSAnIiRkaXIiJyAkcG9zdHByb2Nlc3MKKyAgICBlbGlmIChjdnN1IC0taGVscCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICBldmFsIGN2c3UgLS1maW5kIC0tdHlwZXM9QUZHTSAnIiRkaXIiJyAkcG9zdHByb2Nlc3MKKyAgICBlbHNlCisgICAgICBldmFsIGF3ayAtRi8gXCcnewkJCVwKKyAgICAgICAgICBpZiAoISQxICYmICQzICF+IC9eLS8pIHsJXAorICAgICAgICAgICAgZj1GSUxFTkFNRTsJCQlcCisgICAgICAgICAgICBpZiAoZiB+IC9DVlNcL0VudHJpZXMkLykJXAorICAgICAgICAgICAgICBmID0gc3Vic3RyKGYsIDEsIGxlbmd0aChmKS0xMSk7IFwKKyAgICAgICAgICAgIHByaW50IGYgJDI7CQkJXAorICAgICAgICAgIH19J1wnJwkJCQlcCisgICAgICAgIGBmaW5kICIkZGlyIiAtbmFtZSBFbnRyaWVzIC1wcmludGAgL2Rldi9udWxsJyAkcG9zdHByb2Nlc3MKKyAgICBmaQorICBlbGlmIHRlc3QgLWQgLnN2bjsgdGhlbgorICAgIGV2YWwgZXhlYyBzdm4gbGlzdCAtUiAnIiRkaXIiJyAkcG9zdHByb2Nlc3MKKyAgZWxzZQorICAgIGVjaG8gIiQwOiBGYWlsZWQgdG8gZGV0ZXJtaW5lIHR5cGUgb2YgdmVyc2lvbiBjb250cm9sIHVzZWQgaW4gYHB3ZGAiIDE+JjIKKyAgICBleGl0IDEKKyAgZmkKK2RvbmUKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L3lsd3JhcCBiL2J1aWxkLWF1eC95bHdyYXAKaW5kZXggMTAyYmQ4OS4uOWRiNmUyYyAxMDA3NTUKLS0tIGEvYnVpbGQtYXV4L3lsd3JhcAorKysgYi9idWlsZC1hdXgveWx3cmFwCkBAIC0xLDEwICsxLDEwIEBACiAjISAvYmluL3NoCiAjIHlsd3JhcCAtIHdyYXBwZXIgZm9yIGxleC95YWNjIGludm9jYXRpb25zLgogCi1zY3JpcHR2ZXJzaW9uPTIwMDUtMDUtMTQuMjIKK3NjcmlwdHZlcnNpb249MjAxMi0xMC0wOC4wNzsgIyBVVEMKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUKLSMgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LAorIyAyMDA3LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBXcml0dGVuIGJ5IFRvbSBUcm9tZXkgPHRyb21leUBjeWdudXMuY29tPi4KICMKQEAgLTE5LDkgKzE5LDcgQEAKICMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICMKICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotIyAwMjExMC0xMzAxLCBVU0EuCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCiAjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKICMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCkBAIC0xMDEsMTQgKzk5LDE4IEBACiAjIEZJWE1FOiBhZGQgaG9zdG5hbWUgaGVyZSBmb3IgcGFyYWxsZWwgbWFrZXMgdGhhdCBydW4gY29tbWFuZHMgb24KICMgb3RoZXIgbWFjaGluZXMuICBCdXQgdGhhdCBtaWdodCB0YWtlIHVzIG92ZXIgdGhlIDE0LWNoYXIgbGltaXQuCiBkaXJuYW1lPXlsd3JhcCQkCi10cmFwICJjZCBgcHdkYDsgcm0gLXJmICRkaXJuYW1lID4gL2Rldi9udWxsIDI+JjEiIDEgMiAzIDE1Citkb19leGl0PSJjZCAnYHB3ZGAnICYmIHJtIC1yZiAkZGlybmFtZSA+IC9kZXYvbnVsbCAyPiYxOyInIChleGl0ICRyZXQpOyBleGl0ICRyZXQnCit0cmFwICJyZXQ9MTI5OyAkZG9fZXhpdCIgMQordHJhcCAicmV0PTEzMDsgJGRvX2V4aXQiIDIKK3RyYXAgInJldD0xNDE7ICRkb19leGl0IiAxMwordHJhcCAicmV0PTE0MzsgJGRvX2V4aXQiIDE1CiBta2RpciAkZGlybmFtZSB8fCBleGl0IDEKIAogY2QgJGRpcm5hbWUKIAogY2FzZSAkIyBpbgotICAwKSAkcHJvZyAiJGlucHV0IiA7OwotICAqKSAkcHJvZyAiJEAiICIkaW5wdXQiIDs7CisgIDApICIkcHJvZyIgIiRpbnB1dCIgOzsKKyAgKikgIiRwcm9nIiAiJEAiICIkaW5wdXQiIDs7CiBlc2FjCiByZXQ9JD8KIApAQCAtMTM1LDE5ICsxMzcsMTkgQEAKICAgICAjIEhhbmRsZSB5X3RhYi5jIGFuZCB5X3RhYi5oIG91dHB1dCBieSBET1MKICAgICBpZiB0ZXN0ICR5X3RhYl9ub2RvdCA9ICJ5ZXMiOyB0aGVuCiAgICAgICBpZiB0ZXN0ICRmcm9tID0gInkudGFiLmMiOyB0aGVuCi0gICAgCWZyb209InlfdGFiLmMiCisgICAgICAgIGZyb209InlfdGFiLmMiCiAgICAgICBlbHNlCi0gICAgCWlmIHRlc3QgJGZyb20gPSAieS50YWIuaCI7IHRoZW4KLSAgICAJICBmcm9tPSJ5X3RhYi5oIgotICAgIAlmaQorICAgICAgICBpZiB0ZXN0ICRmcm9tID0gInkudGFiLmgiOyB0aGVuCisgICAgICAgICAgZnJvbT0ieV90YWIuaCIKKyAgICAgICAgZmkKICAgICAgIGZpCiAgICAgZmkKICAgICBpZiB0ZXN0IC1mICIkZnJvbSI7IHRoZW4KICAgICAgICMgSWYgJDIgaXMgYW4gYWJzb2x1dGUgcGF0aCBuYW1lLCB0aGVuIGp1c3QgdXNlIHRoYXQsCiAgICAgICAjIG90aGVyd2lzZSBwcmVwZW5kIGAuLi8nLgogICAgICAgY2FzZSAiJDIiIGluCi0gICAgCVtcXC9dKiB8ID86W1xcL10qKSB0YXJnZXQ9IiQyIjs7Ci0gICAgCSopIHRhcmdldD0iLi4vJDIiOzsKKyAgICAgICAgW1xcL10qIHwgPzpbXFwvXSopIHRhcmdldD0iJDIiOzsKKyAgICAgICAgKikgdGFyZ2V0PSIuLi8kMiI7OwogICAgICAgZXNhYwogCiAgICAgICAjIFdlIGRvIG5vdCB3YW50IHRvIG92ZXJ3cml0ZSBhIGhlYWRlciBmaWxlIGlmIGl0IGhhc24ndApAQCAtMTU3LDggKzE1OSw4IEBACiAgICAgICAjIE1ha2VmaWxlLiAgRGl2ZXJ0IHRoZSBvdXRwdXQgb2YgYWxsIG90aGVyIGZpbGVzIHRvIGEgdGVtcG9yYXJ5CiAgICAgICAjIGZpbGUgc28gd2UgY2FuIGNvbXBhcmUgdGhlbSB0byBleGlzdGluZyB2ZXJzaW9ucy4KICAgICAgIGlmIHRlc3QgJGZpcnN0ID0gbm87IHRoZW4KLQlyZWFsdGFyZ2V0PSIkdGFyZ2V0IgotCXRhcmdldD0idG1wLWBlY2hvICR0YXJnZXQgfCBzZWQgcy8uKltcXC9dLy9nYCIKKyAgICAgICAgcmVhbHRhcmdldD0iJHRhcmdldCIKKyAgICAgICAgdGFyZ2V0PSJ0bXAtYGVjaG8gJHRhcmdldCB8IHNlZCBzLy4qW1xcL10vL2dgIgogICAgICAgZmkKICAgICAgICMgRWRpdCBvdXQgYCNsaW5lJyBvciBgIycgZGlyZWN0aXZlcy4KICAgICAgICMKQEAgLTE4MiwxMCArMTg0LDEwIEBACiAKICAgICAgICMgQ2hlY2sgd2hldGhlciBoZWFkZXIgZmlsZXMgbXVzdCBiZSB1cGRhdGVkLgogICAgICAgaWYgdGVzdCAkZmlyc3QgPSBubzsgdGhlbgotCWlmIHRlc3QgLWYgIiRyZWFsdGFyZ2V0IiAmJiBjbXAgLXMgIiRyZWFsdGFyZ2V0IiAiJHRhcmdldCI7IHRoZW4KLQkgIGVjaG8gIiQyIiBpcyB1bmNoYW5nZWQKLQkgIHJtIC1mICIkdGFyZ2V0IgotCWVsc2UKKyAgICAgICAgaWYgdGVzdCAtZiAiJHJlYWx0YXJnZXQiICYmIGNtcCAtcyAiJHJlYWx0YXJnZXQiICIkdGFyZ2V0IjsgdGhlbgorICAgICAgICAgIGVjaG8gIiQyIiBpcyB1bmNoYW5nZWQKKyAgICAgICAgICBybSAtZiAiJHRhcmdldCIKKyAgICAgICAgZWxzZQogICAgICAgICAgIGVjaG8gdXBkYXRpbmcgIiQyIgogICAgICAgICAgIG12IC1mICIkdGFyZ2V0IiAiJHJlYWx0YXJnZXQiCiAgICAgICAgIGZpCkBAIC0yMTksNSArMjIxLDYgQEAKICMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQogIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCiAjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgotIyB0aW1lLXN0YW1wLWVuZDogIiQiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCiAjIEVuZDoKZGlmZiAtLWdpdCBhL2NmZy5tayBiL2NmZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzczMTJlCi0tLSAvZGV2L251bGwKKysrIGIvY2ZnLm1rCkBAIC0wLDAgKzEsOTMgQEAKKyMgQ3VzdG9taXplIG1haW50Lm1rICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIG1ha2VmaWxlIC0qLQorIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgVXBkYXRlIHZlcnNpb24sIHRoZW4gcmVjb21waWxlIHNvIHRoYXQgdGVzdHMvYmlzb24gLS12ZXJzaW9uIGJlCisjIHVwLXRvLWRhdGUsIHRoZW4gY29tcGlsZSBvdXIgcGFyc2VyIGFnYWluIHdpdGggb3VyIHVwLXRvLWRhdGUgYmlzb24uCisuUEhPTlk6IHJlZ2VuCityZWdlbjogX3ZlcnNpb24KKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKQorCXRvdWNoICQoc3JjZGlyKS9zcmMvcGFyc2UtZ3JhbS55CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykKKworIyBVc2VkIGluIG1haW50Lm1rJ3Mgd2ViLW1hbnVhbCBydWxlCittYW51YWxfdGl0bGUgPSBUaGUgWWFjYy1jb21wYXRpYmxlIFBhcnNlciBHZW5lcmF0b3IKK2dlbmRvY3Nfb3B0aW9uc18gPSAtSSAkKGFic190b3Bfc3JjZGlyKS9kb2MgLUkgJChhYnNfdG9wX2J1aWxkZGlyKS9kb2MKKworIyBJdCdzIHVzZWZ1bCB0byBydW4gbWFpbnRhaW5lci0qY2hlY2sqIHRhcmdldHMgZHVyaW5nIGRldmVsb3BtZW50LCBidXQgd2UKKyMgZG9uJ3Qgd2FudCB0byB3YWl0IG9uIGEgcmVjb21waWxlIGJlY2F1c2Ugb2YgYW4gdXBkYXRlIHRvICQoVkVSU0lPTikuICBUaHVzLAorIyBvdmVycmlkZSB0aGUgX2lzLWRpc3QtdGFyZ2V0IGZyb20gR05VbWFrZWZpbGUgc28gdGhhdCBtYWludGFpbmVyLSpjaGVjayoKKyMgdGFyZ2V0cyBhcmUgZmlsdGVyZWQgb3V0LgorX2lzLWRpc3QtdGFyZ2V0ID0gJChmaWx0ZXItb3V0ICVjbGVhbiBtYWludGFpbmVyLWNoZWNrJSBtYWludGFpbmVyLSUtY2hlY2ssIFwKKyAgJChmaWx0ZXIgbWFpbnRhaW5lci0lIGRpc3QlIGFscGhhIGJldGEgbWFqb3IsJChNQUtFQ01ER09BTFMpKSkKKwordXJsX2Rpcl9saXN0ID0gXAorICBmdHA6Ly8kKGdudV9yZWxfaG9zdCkvZ251L2Jpc29uCisKKyMgVGVzdHMgbm90IHRvIHJ1biBhcyBwYXJ0IG9mICJtYWtlIGRpc3RjaGVjayIuCisjIEV4Y2x1ZGUgY2hhbmdlbG9nLWNoZWNrIGhlcmUgc28gdGhhdCB0aGVyZSdzIGxlc3MgY2h1cm4gaW4gQ2hhbmdlTG9nCisjIGZpbGVzIC0tIG90aGVyd2lzZSwgeW91J2QgbmVlZCB0byBoYXZlIHRoZSB1cGNvbWluZyB2ZXJzaW9uIG51bWJlcgorIyBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlIGZvciBlYWNoIGBtYWtlIGRpc3RjaGVjaycgcnVuLgorbG9jYWwtY2hlY2tzLXRvLXNraXAgPSBcCisgIGNoYW5nZWxvZy1jaGVjayBcCisgIHNjX2ltbXV0YWJsZV9ORVdTCQkJXAorICBzY19wcm9oaWJpdF9hbHdheXNfdHJ1ZV9oZWFkZXJfdGVzdHMJXAorICBzY19wcm9oaWJpdF9hdG9pX2F0b2YJCQlcCisgIHNjX3Byb2hpYml0X3N0cmNtcAorCisjIFRoZSBsb2NhbCBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgY2hlY2tlZC1vdXQgY29weSBvZiBnbnVsaWIgdXNlZCBpbgorIyB0aGlzIHJlbGVhc2UuICBVc2VkIHNvbGVseSB0byBnZXQgYSBkYXRlIGZvciB0aGUgImFubm91bmNlbWVudCIgdGFyZ2V0LgorZ251bGliX2RpciA9ICQoc3JjZGlyKS9nbnVsaWIKKworYm9vdHN0cmFwLXRvb2xzID0gYXV0b2NvbmYsYXV0b21ha2UsZmxleCxnZXR0ZXh0LGdudWxpYgorCithbm5vdW5jZW1lbnRfQ2NfID0gXAorICBidWctYmlzb25AZ251Lm9yZywgaGVscC1iaXNvbkBnbnUub3JnLCBiaXNvbi1wYXRjaGVzQGdudS5vcmcsIFwKKyAgY29vcmRpbmF0b3JAdHJhbnNsYXRpb25wcm9qZWN0Lm9yZworCit1cGRhdGUtY29weXJpZ2h0OiB1cGRhdGUtYjQtY29weXJpZ2h0IHVwZGF0ZS1wYWNrYWdlLWNvcHlyaWdodC15ZWFyCit1cGRhdGUtY29weXJpZ2h0LWVudiA9IFwKKyAgVVBEQVRFX0NPUFlSSUdIVF9GT1JDRT0xIFVQREFURV9DT1BZUklHSFRfVVNFX0lOVEVSVkFMUz0xCisKKyMgQXQgbGVhc3QgZm9yIE1hYyBPUyBYJ3MgZ3JlcCwgdGhlIG9yZGVyIGJldHdlZW4gLiBhbmQgWyBpbiAiW14uW10iCisjIG1hdHRlcnM6CisjICQgTENfQUxMPWZyX0ZSIGdyZXAgLW5FICdbXlsuXScgL2Rldi9udWxsCisjICQgTENfQUxMPUMgZ3JlcCAtbkUgJ1teWy5dJyAvZGV2L251bGwKKyMgZ3JlcDogaW52YWxpZCBjb2xsYXRpbmcgZWxlbWVudCBvciBjbGFzcworIyAkIExDX0FMTD1mcl9GUiBncmVwIC1uRSAnW14uW10nIC9kZXYvbnVsbAorIyAkIExDX0FMTD1DIGdyZXAgLW5FICdbXi5bXScgL2Rldi9udWxsCitzY19hdF9wYXJzZXJfY2hlY2s6CisJQHByb2hpYml0PSdBVF9QQVJTRVJfQ0hFQ0tcKFxbK1teLltdfEFUX0NIRUNLXChcWytcLi8nCQlcCisJaGFsdD0ndXNlIEFUX1BBUlNFUl9DSEVDSyBmb3IgYW5kIG9ubHkgZm9yIGdlbmVyYXRlZCBwYXJzZXJzJwlcCisJICAkKF9zY19zZWFyY2hfcmVnZXhwKQorCitleGNsdWRlID0gXAorICAkKGZvcmVhY2ggYSwkKDEpLCQoZXZhbCAkKHN1YnN0ICQkLCQkJCQsZXhjbHVkZV9maWxlX25hbWVfcmVnZXhwLS1zY18kKGEpKSkpCiskKGNhbGwgZXhjbHVkZSwJCQkJCQkJCVwKKyAgYmluZHRleHRkb21haW49XmxpYi9tYWluLmMkJAkJCQkJCVwKKyAgcHJvZ3JhbV9uYW1lPV5saWIvbWFpbi5jJCQJCQkJCQlcCisgIHByb2hpYml0X2Fsd2F5cy1kZWZpbmVkX21hY3Jvcz1eZGF0YS95YWNjLmMkJHxeZGpncHAvCQkJXAorICBwcm9oaWJpdF9hbHdheXMtZGVmaW5lZF9tYWNyb3MrPT98XmxpYi90aW1ldmFyLmMkJAkJCVwKKyAgcHJvaGliaXRfYWx3YXlzLWRlZmluZWRfbWFjcm9zKz0/fF5zcmMvKHBhcnNlLWdyYW0uY3xzeXN0ZW0uaCkkJAlcCisgIHByb2hpYml0X2Fsd2F5cy1kZWZpbmVkX21hY3Jvcys9P3xedGVzdHMvcmVncmVzc2lvbi5hdCQkCQlcCisgIHByb2hpYml0X2RlZmluZWRfaGF2ZV9kZWNsX3Rlc3RzPT98XmxpYi90aW1ldmFyLmMkJAkJCVwKKyAgcHJvaGliaXRfZG91YmxlZF93b3JkPV50ZXN0cy9uYW1lZC1yZWZzLmF0JCQgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcHJvaGliaXRfbWFnaWNfbnVtYmVyX2V4aXQ9XmRvYy9iaXNvbi50ZXhpJCQJCQkJXAorICBwcm9oaWJpdF9tYWdpY19udW1iZXJfZXhpdCs9P3xedGVzdHMvKGNvbmZsaWN0c3xyZWdyZXNzaW9uKS5hdCQkCVwKKyAgcmVxdWlyZV9jb25maWdfaF9maXJzdD1eKGxpYi95eWVycm9yfGRhdGEvKGdscnx5YWNjKSlcLmMkJAkJXAorICBzcGFjZV90YWI9XnRlc3RzLyhpbnB1dHxjXCtcKylcLmF0JCQJCQkJCVwKKyAgdHJhaWxpbmdfYmxhbms9XnNyYy9wYXJzZS1ncmFtLltjaF0kJAkJCQkJXAorICB1bm1hcmtlZF9kaWFnbm9zdGljcz1eKGRqZ3BwL3xkb2MvYmlzb24udGV4aSQkfHRlc3RzL2NcK1wrXC5hdCQkKQlcCispCmRpZmYgLS1naXQgYS9jb25maWcuaCBiL2NvbmZpZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmQ0YWViLi4wMDAwMDAwCi0tLSBhL2NvbmZpZy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDE0ICswLDAgQEAKLS8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gICovCi0vKiBjb25maWcuaGluLiAgR2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmFjIGJ5IGF1dG9oZWFkZXIuICAqLwotCi0vKiBEZWZpbmUgdG8gMSBpZiB0cmFuc2xhdGlvbiBvZiBwcm9ncmFtIG1lc3NhZ2VzIHRvIHRoZSB1c2VyJ3MgbmF0aXZlCi0gICBsYW5ndWFnZSBpcyByZXF1ZXN0ZWQuICovCi0jZGVmaW5lIEVOQUJMRV9OTFMgMQotCi0vKiBEZWZpbmUgb24gc3lzdGVtcyBmb3Igd2hpY2ggZmlsZSBuYW1lcyBtYXkgaGF2ZSBhIHNvLWNhbGxlZCBgZHJpdmUgbGV0dGVyJwotICAgcHJlZml4LCBkZWZpbmUgdGhpcyB0byBjb21wdXRlIHRoZSBsZW5ndGggb2YgdGhhdCBwcmVmaXgsIGluY2x1ZGluZyB0aGUKLSAgIGNvbG9uLiAqLwotI2RlZmluZSBGSUxFX1NZU1RFTV9BQ0NFUFRTX0RSSVZFX0xFVFRFUl9QUkVGSVggMAotCi0vKiBEZWZpbmUgaWYgdGhlIGJhY2tzbGFzaCBjaGFyYWN0ZXIgbWF5IGFsc28gc2VydmUgYXMgYSBmaWxlIG5hbWUgY29tcG9uZW50Ci0gICBzZXBhcmF0b3IuICovCi0jZGVmaW5lIEZJTEVfU1lTVEVNX0JBQ0tTTEFTSF9JU19GSUxFX05BTUVfU0VQQVJBVE9SIDAKLQotI2lmIEZJTEVfU1lTVEVNX0FDQ0VQVFNfRFJJVkVfTEVUVEVSX1BSRUZJWAotIyBkZWZpbmUgRklMRV9TWVNURU1fUFJFRklYX0xFTihGaWxlbmFtZSkgXAotICAoKEZpbGVuYW1lKVswXSAmJiAoRmlsZW5hbWUpWzFdID09ICc6JyA/IDIgOiAwKQotI2Vsc2UKLSMgZGVmaW5lIEZJTEVfU1lTVEVNX1BSRUZJWF9MRU4oRmlsZW5hbWUpIDAKLSNlbmRpZgotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTWFjT1MgWCBmdW5jdGlvbiBDRkxvY2FsZUNvcHlDdXJyZW50IGluIHRoZQotICAgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLiAqLwotLyogI3VuZGVmIEhBVkVfQ0ZMT0NBTEVDT1BZQ1VSUkVOVCAqLwotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTWFjT1MgWCBmdW5jdGlvbiBDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlIGluCi0gICB0aGUgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLiAqLwotLyogI3VuZGVmIEhBVkVfQ0ZQUkVGRVJFTkNFU0NPUFlBUFBWQUxVRSAqLwotCi0vKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgY2xvY2tfdCcuICovCi0jZGVmaW5lIEhBVkVfQ0xPQ0tfVCAxCi0KLS8qIERlZmluZSBpZiB0aGUgR05VIGRjZ2V0dGV4dCgpIGZ1bmN0aW9uIGlzIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQuCi0gICAqLwotI2RlZmluZSBIQVZFX0RDR0VUVEVYVCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgY2xlYXJlcnJfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZgotICAgeW91IGRvbid0LiAqLwotI2RlZmluZSBIQVZFX0RFQ0xfQ0xFQVJFUlJfVU5MT0NLRUQgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGNsb2NrJywgYW5kIHRvIDAgaWYgeW91IGRvbid0LgotICAgKi8KLSNkZWZpbmUgSEFWRV9ERUNMX0NMT0NLIDAKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBmZW9mX3VubG9ja2VkJywgYW5kIHRvIDAgaWYgeW91Ci0gICBkb24ndC4gKi8KLSNkZWZpbmUgSEFWRV9ERUNMX0ZFT0ZfVU5MT0NLRUQgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGZlcnJvcl91bmxvY2tlZCcsIGFuZCB0byAwIGlmCi0gICB5b3UgZG9uJ3QuICovCi0jZGVmaW5lIEhBVkVfREVDTF9GRVJST1JfVU5MT0NLRUQgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGZmbHVzaF91bmxvY2tlZCcsIGFuZCB0byAwIGlmCi0gICB5b3UgZG9uJ3QuICovCi0jZGVmaW5lIEhBVkVfREVDTF9GRkxVU0hfVU5MT0NLRUQgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGZnZXRzX3VubG9ja2VkJywgYW5kIHRvIDAgaWYKLSAgIHlvdSBkb24ndC4gKi8KLSNkZWZpbmUgSEFWRV9ERUNMX0ZHRVRTX1VOTE9DS0VEIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBmcHV0Y191bmxvY2tlZCcsIGFuZCB0byAwIGlmCi0gICB5b3UgZG9uJ3QuICovCi0jZGVmaW5lIEhBVkVfREVDTF9GUFVUQ19VTkxPQ0tFRCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZnB1dHNfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZgotICAgeW91IGRvbid0LiAqLwotI2RlZmluZSBIQVZFX0RFQ0xfRlBVVFNfVU5MT0NLRUQgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGZyZWFkX3VubG9ja2VkJywgYW5kIHRvIDAgaWYKLSAgIHlvdSBkb24ndC4gKi8KLSNkZWZpbmUgSEFWRV9ERUNMX0ZSRUFEX1VOTE9DS0VEIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBmd3JpdGVfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZgotICAgeW91IGRvbid0LiAqLwotI2RlZmluZSBIQVZFX0RFQ0xfRldSSVRFX1VOTE9DS0VEIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBnZXRjaGFyX3VubG9ja2VkJywgYW5kIHRvIDAgaWYKLSAgIHlvdSBkb24ndC4gKi8KLSNkZWZpbmUgSEFWRV9ERUNMX0dFVENIQVJfVU5MT0NLRUQgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGdldGNfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZiB5b3UKLSAgIGRvbid0LiAqLwotI2RlZmluZSBIQVZFX0RFQ0xfR0VUQ19VTkxPQ0tFRCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZ2V0ZW52JywgYW5kIHRvIDAgaWYgeW91IGRvbid0LgotICAgKi8KLSNkZWZpbmUgSEFWRV9ERUNMX0dFVEVOViAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZ2V0cnVzYWdlJywgYW5kIHRvIDAgaWYgeW91Ci0gICBkb24ndC4gKi8KLSNkZWZpbmUgSEFWRV9ERUNMX0dFVFJVU0FHRSAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgZGVjbGFyYXRpb24gb2YgbWJzd2lkdGgoKSBpbiA8d2NoYXIuaD4sIGFuZCB0byAwCi0gICBvdGhlcndpc2UuICovCi0jZGVmaW5lIEhBVkVfREVDTF9NQlNXSURUSF9JTl9XQ0hBUl9IIDAKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBwdXRjaGFyX3VubG9ja2VkJywgYW5kIHRvIDAgaWYKLSAgIHlvdSBkb24ndC4gKi8KLSNkZWZpbmUgSEFWRV9ERUNMX1BVVENIQVJfVU5MT0NLRUQgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHB1dGNfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZiB5b3UKLSAgIGRvbid0LiAqLwotI2RlZmluZSBIQVZFX0RFQ0xfUFVUQ19VTkxPQ0tFRCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgc3RyZHVwJywgYW5kIHRvIDAgaWYgeW91IGRvbid0LgotICAgKi8KLSNkZWZpbmUgSEFWRV9ERUNMX1NUUkRVUCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgc3RyZXJyb3JfcicsIGFuZCB0byAwIGlmIHlvdQotICAgZG9uJ3QuICovCi0jZGVmaW5lIEhBVkVfREVDTF9TVFJFUlJPUl9SIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBzdHJuZHVwJywgYW5kIHRvIDAgaWYgeW91Ci0gICBkb24ndC4gKi8KLSNkZWZpbmUgSEFWRV9ERUNMX1NUUk5EVVAgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHN0cm5sZW4nLCBhbmQgdG8gMCBpZiB5b3UKLSAgIGRvbid0LiAqLwotI2RlZmluZSBIQVZFX0RFQ0xfU1RSTkxFTiAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgc3lzY29uZicsIGFuZCB0byAwIGlmIHlvdQotICAgZG9uJ3QuICovCi0jZGVmaW5lIEhBVkVfREVDTF9TWVNDT05GIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGB0aW1lcycsIGFuZCB0byAwIGlmIHlvdSBkb24ndC4KLSAgICovCi0jZGVmaW5lIEhBVkVfREVDTF9USU1FUyAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiB3Y3dpZHRoKCksIGFuZCB0byAwIG90aGVyd2lzZS4KLSAgICovCi0jZGVmaW5lIEhBVkVfREVDTF9XQ1dJRFRIIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkdXAyJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9EVVAyIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmb3JrJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9GT1JLIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxnZXRvcHQuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfR0VUT1BUX0ggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldG9wdF9sb25nX29ubHknIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVE9QVF9MT05HX09OTFkgMQotCi0vKiBEZWZpbmUgaWYgdGhlIEdOVSBnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC4gKi8KLSNkZWZpbmUgSEFWRV9HRVRURVhUIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpY29udigpIGZ1bmN0aW9uLiAqLwotLyogI3VuZGVmIEhBVkVfSUNPTlYgKi8KLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDEKLQotLyogRGVmaW5lIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMsIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LCBhbmQKLSAgIGRlY2xhcmVzIHVpbnRtYXhfdC4gKi8KLSNkZWZpbmUgSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaXNhc2NpaScgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfSVNBU0NJSSAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaXN3Y250cmwnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0lTV0NOVFJMIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpc3dwcmludCcgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfSVNXUFJJTlQgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxvY2FsZS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9MT0NBTEVfSCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdXIgc3lzdGVtIGhhcyBhIEdOVSBsaWJjIGNvbXBhdGlibGUgYG1hbGxvYycgZnVuY3Rpb24sIGFuZAotICAgdG8gMCBvdGhlcndpc2UuICovCi0jZGVmaW5lIEhBVkVfTUFMTE9DIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgbWJydG93YyBhbmQgbWJzdGF0ZV90IGFyZSBwcm9wZXJseSBkZWNsYXJlZC4gKi8KLSNkZWZpbmUgSEFWRV9NQlJUT1dDIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtYnNpbml0JyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9NQlNJTklUIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgPHdjaGFyLmg+IGRlY2xhcmVzIG1ic3RhdGVfdC4gKi8KLSNkZWZpbmUgSEFWRV9NQlNUQVRFX1QgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9NRU1PUllfSCAxCi0KLS8qIERlZmluZSB0byAxIGlmIGxpYmMgaW5jbHVkZXMgb2JzdGFja3MuICovCi0jZGVmaW5lIEhBVkVfT0JTVEFDSyAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0bG9jYWxlJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TRVRMT0NBTEUgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiBzdGRib29sLmggY29uZm9ybXMgdG8gQzk5LiAqLwotI2RlZmluZSBIQVZFX1NUREJPT0xfSCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NURElOVF9IIDEKLQotLyogRGVmaW5lIGlmIDxzdGRpbnQuaD4gZXhpc3RzLCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwgYW5kIGRlY2xhcmVzCi0gICB1aW50bWF4X3QuICovCi0jZGVmaW5lIEhBVkVfU1RESU5UX0hfV0lUSF9VSU5UTUFYIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1RETElCX0ggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cGNweScgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU1RQQ1BZIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJkdXAnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NUUkRVUCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyZXJyb3InIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NUUkVSUk9SIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJlcnJvcl9yJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TVFJFUlJPUl9SIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NUUklOR1NfSCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5nLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NUUklOR19IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzdHJuZHVwKCkgZnVuY3Rpb24gYW5kIGl0IHdvcmtzLiAqLwotI2RlZmluZSBIQVZFX1NUUk5EVVAgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnRvbCcgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU1RSVE9MIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJ0b3VsJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TVFJUT1VMIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHN0cnVjdCB0bXMnLiAqLwotI2RlZmluZSBIQVZFX1NUUlVDVF9UTVMgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnZlcnNjbXAnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NUUlZFUlNDTVAgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9yZXNvdXJjZS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TWVNfUkVTT1VSQ0VfSCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWVzLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19USU1FU19IIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TWVNfVElNRV9IIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSA8c3lzL3dhaXQuaD4gdGhhdCBpcyBQT1NJWC4xIGNvbXBhdGlibGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1dBSVRfSCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdGltZXMnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1RJTUVTIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAndWludG1heF90JyB0eXBlIGluIDxzdGRpbnQuaD4gb3IgPGludHR5cGVzLmg+LiAqLwotI2RlZmluZSBIQVZFX1VJTlRNQVhfVCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1aW50cHRyX3QnLiAqLwotI2RlZmluZSBIQVZFX1VJTlRQVFJfVCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1VOSVNURF9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAndW5zaWduZWQgbG9uZyBsb25nJyB0eXBlLiAqLwotI2RlZmluZSBIQVZFX1VOU0lHTkVEX0xPTkdfTE9ORyAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdmZvcmsnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1ZGT1JLIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx2Zm9yay5oPiBoZWFkZXIgZmlsZS4gKi8KLS8qICN1bmRlZiBIQVZFX1ZGT1JLX0ggKi8KLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB3YWl0cGlkJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9XQUlUUElEIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx3Y2hhci5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9XQ0hBUl9IIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx3Y3R5cGUuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfV0NUWVBFX0ggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHdjd2lkdGgnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1dDV0lEVEggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiBgZm9yaycgd29ya3MuICovCi0jZGVmaW5lIEhBVkVfV09SS0lOR19GT1JLIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgYHZmb3JrJyB3b3Jrcy4gKi8KLSNkZWZpbmUgSEFWRV9XT1JLSU5HX1ZGT1JLIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYF9Cb29sJy4gKi8KLSNkZWZpbmUgSEFWRV9fQk9PTCAxCi0KLSNpZiBGSUxFX1NZU1RFTV9CQUNLU0xBU0hfSVNfRklMRV9OQU1FX1NFUEFSQVRPUgotIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09ICcvJyB8fCAoQykgPT0gJ1xcJykKLSNlbHNlCi0jIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nKQotI2VuZGlmCi0KLS8qIERlZmluZSB0byB0aGUgR05VIE00IGV4ZWN1dGFibGUgbmFtZS4gKi8KLSNkZWZpbmUgTTQgIi91c3IvYmluL200IgotCi0vKiBOYW1lIG9mIHBhY2thZ2UgKi8KLSNkZWZpbmUgUEFDS0FHRSAiYmlzb24iCi0KLS8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLwotI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiYnVnLWJpc29uQGdudS5vcmciCi0KLS8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KLSNkZWZpbmUgUEFDS0FHRV9OQU1FICJHTlUgQmlzb24iCi0KLS8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KLSNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgIkdOVSBCaXNvbiAyLjMiCi0KLS8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KLSNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICJiaXNvbiIKLQotLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KLSNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIyLjMiCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLwotI2RlZmluZSBTVERDX0hFQURFUlMgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiBzdHJlcnJvcl9yIHJldHVybnMgY2hhciAqLiAqLwotI2RlZmluZSBTVFJFUlJPUl9SX0NIQVJfUCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSB3YW50IGdldGMgZXRjLiB0byB1c2UgdW5sb2NrZWQgSS9PIGlmIGF2YWlsYWJsZS4KLSAgIFVubG9ja2VkIEkvTyBjYW4gaW1wcm92ZSBwZXJmb3JtYW5jZSBpbiB1bml0aHJlYWRlZCBhcHBzLCBidXQgaXQgaXMgbm90Ci0gICBzYWZlIGZvciBtdWx0aXRocmVhZGVkIGFwcHMuICovCi0jZGVmaW5lIFVTRV9VTkxPQ0tFRF9JTyAxCi0KLS8qIFZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2UgKi8KLSNkZWZpbmUgVkVSU0lPTiAiMi4zIgotCi0vKiBEZWZpbmUgaWYgdXNpbmcgdGhlIGRtYWxsb2MgZGVidWdnaW5nIG1hbGxvYyBwYWNrYWdlICovCi0vKiAjdW5kZWYgV0lUSF9ETUFMTE9DICovCi0KLS8qIERlZmluZSB0byAxIHRvIGludGVybmF0aW9uYWxpemUgYmlzb24gcnVudGltZSBtZXNzYWdlcy4gKi8KLSNkZWZpbmUgWVlFTkFCTEVfTkxTIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgYGxleCcgZGVjbGFyZXMgYHl5dGV4dCcgYXMgYSBgY2hhciAqJyBieSBkZWZhdWx0LCBub3QgYQotICAgYGNoYXJbXScuICovCi0jZGVmaW5lIFlZVEVYVF9QT0lOVEVSIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgb24gQUlYIDMuCi0gICBTeXN0ZW0gaGVhZGVycyBzb21ldGltZXMgZGVmaW5lIHRoaXMuCi0gICBXZSBqdXN0IHdhbnQgdG8gYXZvaWQgYSByZWRlZmluaXRpb24gZXJyb3IgbWVzc2FnZS4gICovCi0jaWZuZGVmIF9BTExfU09VUkNFCi0vKiAjIHVuZGVmIF9BTExfU09VUkNFICovCi0jZW5kaWYKLQotLyogRW5hYmxlIEdOVSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBoYXZlIHRoZW0uICAqLwotI2lmbmRlZiBfR05VX1NPVVJDRQotIyBkZWZpbmUgX0dOVV9TT1VSQ0UgMQotI2VuZGlmCi0KLS8qIERlZmluZSB0byAxIGlmIG9uIE1JTklYLiAqLwotLyogI3VuZGVmIF9NSU5JWCAqLwotCi0vKiBEZWZpbmUgdG8gMiBpZiB0aGUgc3lzdGVtIGRvZXMgbm90IHByb3ZpZGUgUE9TSVguMSBmZWF0dXJlcyBleGNlcHQgd2l0aAotICAgdGhpcyBkZWZpbmVkLiAqLwotLyogI3VuZGVmIF9QT1NJWF8xX1NPVVJDRSAqLwotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgbmVlZCB0byBpbiBvcmRlciBmb3IgYHN0YXQnIGFuZCBvdGhlciB0aGluZ3MgdG8gd29yay4gKi8KLS8qICN1bmRlZiBfUE9TSVhfU09VUkNFICovCi0KLS8qIEVuYWJsZSBleHRlbnNpb25zIG9uIFNvbGFyaXMuICAqLwotI2lmbmRlZiBfX0VYVEVOU0lPTlNfXwotIyBkZWZpbmUgX19FWFRFTlNJT05TX18gMQotI2VuZGlmCi0jaWZuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUwotIyBkZWZpbmUgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTIDEKLSNlbmRpZgotCi0vKiBEZWZpbmUgdG8gcnBsXyBpZiB0aGUgZ2V0b3B0IHJlcGxhY2VtZW50IGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIHNob3VsZCBiZQotICAgdXNlZC4gKi8KLS8qICN1bmRlZiBfX0dFVE9QVF9QUkVGSVggKi8KLQotLyogRGVmaW5lIHRvIGBfX2lubGluZV9fJyBvciBgX19pbmxpbmUnIGlmIHRoYXQncyB3aGF0IHRoZSBDIGNvbXBpbGVyCi0gICBjYWxscyBpdCwgb3IgdG8gbm90aGluZyBpZiAnaW5saW5lJyBpcyBub3Qgc3VwcG9ydGVkIHVuZGVyIGFueSBuYW1lLiAgKi8KLSNpZm5kZWYgX19jcGx1c3BsdXMKLS8qICN1bmRlZiBpbmxpbmUgKi8KLSNlbmRpZgotCi0vKiBEZWZpbmUgdG8gMSBpZiB0aGUgY29tcGlsZXIgaXMgY2hlY2tpbmcgZm9yIGxpbnQuICovCi0vKiAjdW5kZWYgbGludCAqLwotCi0vKiBEZWZpbmUgdG8gcnBsX21hbGxvYyBpZiB0aGUgcmVwbGFjZW1lbnQgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQuICovCi0vKiAjdW5kZWYgbWFsbG9jICovCi0KLS8qIERlZmluZSB0byBhIHR5cGUgaWYgPHdjaGFyLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KLS8qICN1bmRlZiBtYnN0YXRlX3QgKi8KLQotLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLwotLyogI3VuZGVmIHBpZF90ICovCi0KLS8qIERlZmluZSB0byBycGxfc3RybmR1cCBpZiB0aGUgcmVwbGFjZW1lbnQgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQsICovCi0vKiAjdW5kZWYgc3RybmR1cCAqLwotCi0vKiBEZWZpbmUgdG8gcnBsX3N0cm5sZW4gaWYgdGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkLiAqLwotLyogI3VuZGVmIHN0cm5sZW4gKi8KLQotLyogRGVmaW5lIHRvIHVuc2lnbmVkIGxvbmcgb3IgdW5zaWduZWQgbG9uZyBsb25nIGlmIDxzdGRpbnQuaD4gYW5kCi0gICA8aW50dHlwZXMuaD4gZG9uJ3QgZGVmaW5lLiAqLwotLyogI3VuZGVmIHVpbnRtYXhfdCAqLwotCi0vKiBEZWZpbmUgYXMgYGZvcmsnIGlmIGB2Zm9yaycgZG9lcyBub3Qgd29yay4gKi8KLS8qICN1bmRlZiB2Zm9yayAqLwpkaWZmIC0tZ2l0IGEvY29uZmlnLmhpbiBiL2NvbmZpZy5oaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmMGM0OGIuLjAwMDAwMDAKLS0tIGEvY29uZmlnLmhpbgorKysgL2Rldi9udWxsCkBAIC0xLDQxMyArMCwwIEBACi0vKiBjb25maWcuaGluLiAgR2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmFjIGJ5IGF1dG9oZWFkZXIuICAqLwotCi0vKiBEZWZpbmUgdG8gMSBpZiB0cmFuc2xhdGlvbiBvZiBwcm9ncmFtIG1lc3NhZ2VzIHRvIHRoZSB1c2VyJ3MgbmF0aXZlCi0gICBsYW5ndWFnZSBpcyByZXF1ZXN0ZWQuICovCi0jdW5kZWYgRU5BQkxFX05MUwotCi0vKiBEZWZpbmUgb24gc3lzdGVtcyBmb3Igd2hpY2ggZmlsZSBuYW1lcyBtYXkgaGF2ZSBhIHNvLWNhbGxlZCBgZHJpdmUgbGV0dGVyJwotICAgcHJlZml4LCBkZWZpbmUgdGhpcyB0byBjb21wdXRlIHRoZSBsZW5ndGggb2YgdGhhdCBwcmVmaXgsIGluY2x1ZGluZyB0aGUKLSAgIGNvbG9uLiAqLwotI3VuZGVmIEZJTEVfU1lTVEVNX0FDQ0VQVFNfRFJJVkVfTEVUVEVSX1BSRUZJWAotCi0vKiBEZWZpbmUgaWYgdGhlIGJhY2tzbGFzaCBjaGFyYWN0ZXIgbWF5IGFsc28gc2VydmUgYXMgYSBmaWxlIG5hbWUgY29tcG9uZW50Ci0gICBzZXBhcmF0b3IuICovCi0jdW5kZWYgRklMRV9TWVNURU1fQkFDS1NMQVNIX0lTX0ZJTEVfTkFNRV9TRVBBUkFUT1IKLQotI2lmIEZJTEVfU1lTVEVNX0FDQ0VQVFNfRFJJVkVfTEVUVEVSX1BSRUZJWAotIyBkZWZpbmUgRklMRV9TWVNURU1fUFJFRklYX0xFTihGaWxlbmFtZSkgXAotICAoKEZpbGVuYW1lKVswXSAmJiAoRmlsZW5hbWUpWzFdID09ICc6JyA/IDIgOiAwKQotI2Vsc2UKLSMgZGVmaW5lIEZJTEVfU1lTVEVNX1BSRUZJWF9MRU4oRmlsZW5hbWUpIDAKLSNlbmRpZgotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTWFjT1MgWCBmdW5jdGlvbiBDRkxvY2FsZUNvcHlDdXJyZW50IGluIHRoZQotICAgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLiAqLwotI3VuZGVmIEhBVkVfQ0ZMT0NBTEVDT1BZQ1VSUkVOVAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTWFjT1MgWCBmdW5jdGlvbiBDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlIGluCi0gICB0aGUgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLiAqLwotI3VuZGVmIEhBVkVfQ0ZQUkVGRVJFTkNFU0NPUFlBUFBWQUxVRQotCi0vKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgY2xvY2tfdCcuICovCi0jdW5kZWYgSEFWRV9DTE9DS19UCi0KLS8qIERlZmluZSBpZiB0aGUgR05VIGRjZ2V0dGV4dCgpIGZ1bmN0aW9uIGlzIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQuCi0gICAqLwotI3VuZGVmIEhBVkVfRENHRVRURVhUCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgY2xlYXJlcnJfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZgotICAgeW91IGRvbid0LiAqLwotI3VuZGVmIEhBVkVfREVDTF9DTEVBUkVSUl9VTkxPQ0tFRAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGNsb2NrJywgYW5kIHRvIDAgaWYgeW91IGRvbid0LgotICAgKi8KLSN1bmRlZiBIQVZFX0RFQ0xfQ0xPQ0sKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBmZW9mX3VubG9ja2VkJywgYW5kIHRvIDAgaWYgeW91Ci0gICBkb24ndC4gKi8KLSN1bmRlZiBIQVZFX0RFQ0xfRkVPRl9VTkxPQ0tFRAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGZlcnJvcl91bmxvY2tlZCcsIGFuZCB0byAwIGlmCi0gICB5b3UgZG9uJ3QuICovCi0jdW5kZWYgSEFWRV9ERUNMX0ZFUlJPUl9VTkxPQ0tFRAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGZmbHVzaF91bmxvY2tlZCcsIGFuZCB0byAwIGlmCi0gICB5b3UgZG9uJ3QuICovCi0jdW5kZWYgSEFWRV9ERUNMX0ZGTFVTSF9VTkxPQ0tFRAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGZnZXRzX3VubG9ja2VkJywgYW5kIHRvIDAgaWYKLSAgIHlvdSBkb24ndC4gKi8KLSN1bmRlZiBIQVZFX0RFQ0xfRkdFVFNfVU5MT0NLRUQKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBmcHV0Y191bmxvY2tlZCcsIGFuZCB0byAwIGlmCi0gICB5b3UgZG9uJ3QuICovCi0jdW5kZWYgSEFWRV9ERUNMX0ZQVVRDX1VOTE9DS0VECi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZnB1dHNfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZgotICAgeW91IGRvbid0LiAqLwotI3VuZGVmIEhBVkVfREVDTF9GUFVUU19VTkxPQ0tFRAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGZyZWFkX3VubG9ja2VkJywgYW5kIHRvIDAgaWYKLSAgIHlvdSBkb24ndC4gKi8KLSN1bmRlZiBIQVZFX0RFQ0xfRlJFQURfVU5MT0NLRUQKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBmd3JpdGVfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZgotICAgeW91IGRvbid0LiAqLwotI3VuZGVmIEhBVkVfREVDTF9GV1JJVEVfVU5MT0NLRUQKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBnZXRjaGFyX3VubG9ja2VkJywgYW5kIHRvIDAgaWYKLSAgIHlvdSBkb24ndC4gKi8KLSN1bmRlZiBIQVZFX0RFQ0xfR0VUQ0hBUl9VTkxPQ0tFRAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGdldGNfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZiB5b3UKLSAgIGRvbid0LiAqLwotI3VuZGVmIEhBVkVfREVDTF9HRVRDX1VOTE9DS0VECi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZ2V0ZW52JywgYW5kIHRvIDAgaWYgeW91IGRvbid0LgotICAgKi8KLSN1bmRlZiBIQVZFX0RFQ0xfR0VURU5WCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZ2V0cnVzYWdlJywgYW5kIHRvIDAgaWYgeW91Ci0gICBkb24ndC4gKi8KLSN1bmRlZiBIQVZFX0RFQ0xfR0VUUlVTQUdFCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgZGVjbGFyYXRpb24gb2YgbWJzd2lkdGgoKSBpbiA8d2NoYXIuaD4sIGFuZCB0byAwCi0gICBvdGhlcndpc2UuICovCi0jdW5kZWYgSEFWRV9ERUNMX01CU1dJRFRIX0lOX1dDSEFSX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBwdXRjaGFyX3VubG9ja2VkJywgYW5kIHRvIDAgaWYKLSAgIHlvdSBkb24ndC4gKi8KLSN1bmRlZiBIQVZFX0RFQ0xfUFVUQ0hBUl9VTkxPQ0tFRAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHB1dGNfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZiB5b3UKLSAgIGRvbid0LiAqLwotI3VuZGVmIEhBVkVfREVDTF9QVVRDX1VOTE9DS0VECi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgc3RyZHVwJywgYW5kIHRvIDAgaWYgeW91IGRvbid0LgotICAgKi8KLSN1bmRlZiBIQVZFX0RFQ0xfU1RSRFVQCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgc3RyZXJyb3JfcicsIGFuZCB0byAwIGlmIHlvdQotICAgZG9uJ3QuICovCi0jdW5kZWYgSEFWRV9ERUNMX1NUUkVSUk9SX1IKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBzdHJuZHVwJywgYW5kIHRvIDAgaWYgeW91Ci0gICBkb24ndC4gKi8KLSN1bmRlZiBIQVZFX0RFQ0xfU1RSTkRVUAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHN0cm5sZW4nLCBhbmQgdG8gMCBpZiB5b3UKLSAgIGRvbid0LiAqLwotI3VuZGVmIEhBVkVfREVDTF9TVFJOTEVOCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgc3lzY29uZicsIGFuZCB0byAwIGlmIHlvdQotICAgZG9uJ3QuICovCi0jdW5kZWYgSEFWRV9ERUNMX1NZU0NPTkYKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGB0aW1lcycsIGFuZCB0byAwIGlmIHlvdSBkb24ndC4KLSAgICovCi0jdW5kZWYgSEFWRV9ERUNMX1RJTUVTCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiB3Y3dpZHRoKCksIGFuZCB0byAwIG90aGVyd2lzZS4KLSAgICovCi0jdW5kZWYgSEFWRV9ERUNMX1dDV0lEVEgKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkdXAyJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX0RVUDIKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmb3JrJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX0ZPUksKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxnZXRvcHQuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9HRVRPUFRfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldG9wdF9sb25nX29ubHknIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfR0VUT1BUX0xPTkdfT05MWQotCi0vKiBEZWZpbmUgaWYgdGhlIEdOVSBnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC4gKi8KLSN1bmRlZiBIQVZFX0dFVFRFWFQKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpY29udigpIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfSUNPTlYKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX0lOVFRZUEVTX0gKLQotLyogRGVmaW5lIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMsIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LCBhbmQKLSAgIGRlY2xhcmVzIHVpbnRtYXhfdC4gKi8KLSN1bmRlZiBIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaXNhc2NpaScgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9JU0FTQ0lJCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaXN3Y250cmwnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfSVNXQ05UUkwKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpc3dwcmludCcgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9JU1dQUklOVAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxvY2FsZS5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX0xPQ0FMRV9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdXIgc3lzdGVtIGhhcyBhIEdOVSBsaWJjIGNvbXBhdGlibGUgYG1hbGxvYycgZnVuY3Rpb24sIGFuZAotICAgdG8gMCBvdGhlcndpc2UuICovCi0jdW5kZWYgSEFWRV9NQUxMT0MKLQotLyogRGVmaW5lIHRvIDEgaWYgbWJydG93YyBhbmQgbWJzdGF0ZV90IGFyZSBwcm9wZXJseSBkZWNsYXJlZC4gKi8KLSN1bmRlZiBIQVZFX01CUlRPV0MKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtYnNpbml0JyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX01CU0lOSVQKLQotLyogRGVmaW5lIHRvIDEgaWYgPHdjaGFyLmg+IGRlY2xhcmVzIG1ic3RhdGVfdC4gKi8KLSN1bmRlZiBIQVZFX01CU1RBVEVfVAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX01FTU9SWV9ICi0KLS8qIERlZmluZSB0byAxIGlmIGxpYmMgaW5jbHVkZXMgb2JzdGFja3MuICovCi0jdW5kZWYgSEFWRV9PQlNUQUNLCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0bG9jYWxlJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX1NFVExPQ0FMRQotCi0vKiBEZWZpbmUgdG8gMSBpZiBzdGRib29sLmggY29uZm9ybXMgdG8gQzk5LiAqLwotI3VuZGVmIEhBVkVfU1REQk9PTF9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfU1RESU5UX0gKLQotLyogRGVmaW5lIGlmIDxzdGRpbnQuaD4gZXhpc3RzLCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwgYW5kIGRlY2xhcmVzCi0gICB1aW50bWF4X3QuICovCi0jdW5kZWYgSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVgKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TVERMSUJfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cGNweScgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9TVFBDUFkKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJkdXAnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfU1RSRFVQCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyZXJyb3InIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfU1RSRVJST1IKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJlcnJvcl9yJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX1NUUkVSUk9SX1IKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfU1RSSU5HU19ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5nLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfU1RSSU5HX0gKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzdHJuZHVwKCkgZnVuY3Rpb24gYW5kIGl0IHdvcmtzLiAqLwotI3VuZGVmIEhBVkVfU1RSTkRVUAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnRvbCcgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9TVFJUT0wKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJ0b3VsJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX1NUUlRPVUwKLQotLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHN0cnVjdCB0bXMnLiAqLwotI3VuZGVmIEhBVkVfU1RSVUNUX1RNUwotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnZlcnNjbXAnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfU1RSVkVSU0NNUAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9yZXNvdXJjZS5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1NZU19SRVNPVVJDRV9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TWVNfU1RBVF9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWVzLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfU1lTX1RJTUVTX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1NZU19USU1FX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TWVNfVFlQRVNfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSA8c3lzL3dhaXQuaD4gdGhhdCBpcyBQT1NJWC4xIGNvbXBhdGlibGUuICovCi0jdW5kZWYgSEFWRV9TWVNfV0FJVF9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdGltZXMnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfVElNRVMKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAndWludG1heF90JyB0eXBlIGluIDxzdGRpbnQuaD4gb3IgPGludHR5cGVzLmg+LiAqLwotI3VuZGVmIEhBVkVfVUlOVE1BWF9UCi0KLS8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1aW50cHRyX3QnLiAqLwotI3VuZGVmIEhBVkVfVUlOVFBUUl9UCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfVU5JU1REX0gKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAndW5zaWduZWQgbG9uZyBsb25nJyB0eXBlLiAqLwotI3VuZGVmIEhBVkVfVU5TSUdORURfTE9OR19MT05HCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdmZvcmsnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfVkZPUksKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx2Zm9yay5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1ZGT1JLX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB3YWl0cGlkJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX1dBSVRQSUQKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx3Y2hhci5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1dDSEFSX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx3Y3R5cGUuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9XQ1RZUEVfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHdjd2lkdGgnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfV0NXSURUSAotCi0vKiBEZWZpbmUgdG8gMSBpZiBgZm9yaycgd29ya3MuICovCi0jdW5kZWYgSEFWRV9XT1JLSU5HX0ZPUksKLQotLyogRGVmaW5lIHRvIDEgaWYgYHZmb3JrJyB3b3Jrcy4gKi8KLSN1bmRlZiBIQVZFX1dPUktJTkdfVkZPUksKLQotLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYF9Cb29sJy4gKi8KLSN1bmRlZiBIQVZFX19CT09MCi0KLSNpZiBGSUxFX1NZU1RFTV9CQUNLU0xBU0hfSVNfRklMRV9OQU1FX1NFUEFSQVRPUgotIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09ICcvJyB8fCAoQykgPT0gJ1xcJykKLSNlbHNlCi0jIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nKQotI2VuZGlmCi0KLS8qIERlZmluZSB0byB0aGUgR05VIE00IGV4ZWN1dGFibGUgbmFtZS4gKi8KLSN1bmRlZiBNNAotCi0vKiBOYW1lIG9mIHBhY2thZ2UgKi8KLSN1bmRlZiBQQUNLQUdFCi0KLS8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLwotI3VuZGVmIFBBQ0tBR0VfQlVHUkVQT1JUCi0KLS8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KLSN1bmRlZiBQQUNLQUdFX05BTUUKLQotLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwotI3VuZGVmIFBBQ0tBR0VfU1RSSU5HCi0KLS8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KLSN1bmRlZiBQQUNLQUdFX1RBUk5BTUUKLQotLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KLSN1bmRlZiBQQUNLQUdFX1ZFUlNJT04KLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCi0jdW5kZWYgU1REQ19IRUFERVJTCi0KLS8qIERlZmluZSB0byAxIGlmIHN0cmVycm9yX3IgcmV0dXJucyBjaGFyICouICovCi0jdW5kZWYgU1RSRVJST1JfUl9DSEFSX1AKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgZ2V0YyBldGMuIHRvIHVzZSB1bmxvY2tlZCBJL08gaWYgYXZhaWxhYmxlLgotICAgVW5sb2NrZWQgSS9PIGNhbiBpbXByb3ZlIHBlcmZvcm1hbmNlIGluIHVuaXRocmVhZGVkIGFwcHMsIGJ1dCBpdCBpcyBub3QKLSAgIHNhZmUgZm9yIG11bHRpdGhyZWFkZWQgYXBwcy4gKi8KLSN1bmRlZiBVU0VfVU5MT0NLRURfSU8KLQotLyogVmVyc2lvbiBudW1iZXIgb2YgcGFja2FnZSAqLwotI3VuZGVmIFZFUlNJT04KLQotLyogRGVmaW5lIGlmIHVzaW5nIHRoZSBkbWFsbG9jIGRlYnVnZ2luZyBtYWxsb2MgcGFja2FnZSAqLwotI3VuZGVmIFdJVEhfRE1BTExPQwotCi0vKiBEZWZpbmUgdG8gMSB0byBpbnRlcm5hdGlvbmFsaXplIGJpc29uIHJ1bnRpbWUgbWVzc2FnZXMuICovCi0jdW5kZWYgWVlFTkFCTEVfTkxTCi0KLS8qIERlZmluZSB0byAxIGlmIGBsZXgnIGRlY2xhcmVzIGB5eXRleHQnIGFzIGEgYGNoYXIgKicgYnkgZGVmYXVsdCwgbm90IGEKLSAgIGBjaGFyW10nLiAqLwotI3VuZGVmIFlZVEVYVF9QT0lOVEVSCi0KLS8qIERlZmluZSB0byAxIGlmIG9uIEFJWCAzLgotICAgU3lzdGVtIGhlYWRlcnMgc29tZXRpbWVzIGRlZmluZSB0aGlzLgotICAgV2UganVzdCB3YW50IHRvIGF2b2lkIGEgcmVkZWZpbml0aW9uIGVycm9yIG1lc3NhZ2UuICAqLwotI2lmbmRlZiBfQUxMX1NPVVJDRQotIyB1bmRlZiBfQUxMX1NPVVJDRQotI2VuZGlmCi0KLS8qIEVuYWJsZSBHTlUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSB0aGVtLiAgKi8KLSNpZm5kZWYgX0dOVV9TT1VSQ0UKLSMgdW5kZWYgX0dOVV9TT1VSQ0UKLSNlbmRpZgotCi0vKiBEZWZpbmUgdG8gMSBpZiBvbiBNSU5JWC4gKi8KLSN1bmRlZiBfTUlOSVgKLQotLyogRGVmaW5lIHRvIDIgaWYgdGhlIHN5c3RlbSBkb2VzIG5vdCBwcm92aWRlIFBPU0lYLjEgZmVhdHVyZXMgZXhjZXB0IHdpdGgKLSAgIHRoaXMgZGVmaW5lZC4gKi8KLSN1bmRlZiBfUE9TSVhfMV9TT1VSQ0UKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IG5lZWQgdG8gaW4gb3JkZXIgZm9yIGBzdGF0JyBhbmQgb3RoZXIgdGhpbmdzIHRvIHdvcmsuICovCi0jdW5kZWYgX1BPU0lYX1NPVVJDRQotCi0vKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KLSNpZm5kZWYgX19FWFRFTlNJT05TX18KLSMgdW5kZWYgX19FWFRFTlNJT05TX18KLSNlbmRpZgotI2lmbmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKLSMgdW5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCi0jZW5kaWYKLQotLyogRGVmaW5lIHRvIHJwbF8gaWYgdGhlIGdldG9wdCByZXBsYWNlbWVudCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBzaG91bGQgYmUKLSAgIHVzZWQuICovCi0jdW5kZWYgX19HRVRPUFRfUFJFRklYCi0KLS8qIERlZmluZSB0byBgX19pbmxpbmVfXycgb3IgYF9faW5saW5lJyBpZiB0aGF0J3Mgd2hhdCB0aGUgQyBjb21waWxlcgotICAgY2FsbHMgaXQsIG9yIHRvIG5vdGhpbmcgaWYgJ2lubGluZScgaXMgbm90IHN1cHBvcnRlZCB1bmRlciBhbnkgbmFtZS4gICovCi0jaWZuZGVmIF9fY3BsdXNwbHVzCi0jdW5kZWYgaW5saW5lCi0jZW5kaWYKLQotLyogRGVmaW5lIHRvIDEgaWYgdGhlIGNvbXBpbGVyIGlzIGNoZWNraW5nIGZvciBsaW50LiAqLwotI3VuZGVmIGxpbnQKLQotLyogRGVmaW5lIHRvIHJwbF9tYWxsb2MgaWYgdGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkLiAqLwotI3VuZGVmIG1hbGxvYwotCi0vKiBEZWZpbmUgdG8gYSB0eXBlIGlmIDx3Y2hhci5oPiBkb2VzIG5vdCBkZWZpbmUuICovCi0jdW5kZWYgbWJzdGF0ZV90Ci0KLS8qIERlZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KLSN1bmRlZiBwaWRfdAotCi0vKiBEZWZpbmUgdG8gcnBsX3N0cm5kdXAgaWYgdGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkLCAqLwotI3VuZGVmIHN0cm5kdXAKLQotLyogRGVmaW5lIHRvIHJwbF9zdHJubGVuIGlmIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZC4gKi8KLSN1bmRlZiBzdHJubGVuCi0KLS8qIERlZmluZSB0byB1bnNpZ25lZCBsb25nIG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBpZiA8c3RkaW50Lmg+IGFuZAotICAgPGludHR5cGVzLmg+IGRvbid0IGRlZmluZS4gKi8KLSN1bmRlZiB1aW50bWF4X3QKLQotLyogRGVmaW5lIGFzIGBmb3JrJyBpZiBgdmZvcmsnIGRvZXMgbm90IHdvcmsuICovCi0jdW5kZWYgdmZvcmsKZGlmZiAtLWdpdCBhL2NvbmZpZy5sb2cgYi9jb25maWcubG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDAyZGE3Li4wMDAwMDAwCi0tLSBhL2NvbmZpZy5sb2cKKysrIC9kZXYvbnVsbApAQCAtMSwyNDM5ICswLDAgQEAKLVRoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCi1ydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgotCi1JdCB3YXMgY3JlYXRlZCBieSBHTlUgQmlzb24gY29uZmlndXJlIDIuMywgd2hpY2ggd2FzCi1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTkuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKLQotICAkIC4vY29uZmlndXJlIC0tcHJlZml4IC9ob21lL3BoYW5uYS9zcmMvYmlzb24KLQotIyMgLS0tLS0tLS0tICMjCi0jIyBQbGF0Zm9ybS4gIyMKLSMjIC0tLS0tLS0tLSAjIwotCi1ob3N0bmFtZSA9IHBoYW5uYS5jbmMuY29ycC5nb29nbGUuY29tCi11bmFtZSAtbSA9IHg4Nl82NAotdW5hbWUgLXIgPSAyLjYuMTguNS1nZzM0d29ya3N0YXRpb24tbWl4ZWQ2NC0zMgotdW5hbWUgLXMgPSBMaW51eAotdW5hbWUgLXYgPSAjMSBTTVAgVGh1IE1heSA4IDAxOjMxOjIzIFVUQyAyMDA4Ci0KLS91c3IvYmluL3VuYW1lIC1wID0gdW5rbm93bgotL2Jpbi91bmFtZSAtWCAgICAgPSB1bmtub3duCi0KLS9iaW4vYXJjaCAgICAgICAgICAgICAgPSB4ODZfNjQKLS91c3IvYmluL2FyY2ggLWsgICAgICAgPSB1bmtub3duCi0vdXNyL2NvbnZleC9nZXRzeXNpbmZvID0gdW5rbm93bgotaG9zdGluZm8gICAgICAgICAgICAgICA9IHVua25vd24KLS9iaW4vbWFjaGluZSAgICAgICAgICAgPSB1bmtub3duCi0vdXNyL2Jpbi9vc2xldmVsICAgICAgID0gdW5rbm93bgotL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IHVua25vd24KLQotUEFUSDogL3Vzci9sb2NhbC9zeW1saW5rcwotUEFUSDogL3Vzci9sb2NhbC9zY3JpcHRzCi1QQVRIOiAvdXNyL2xvY2FsL3NiaW4KLVBBVEg6IC91c3IvbG9jYWwvYmluCi1QQVRIOiAvdXNyL3NiaW4KLVBBVEg6IC91c3IvYmluCi1QQVRIOiAvc2JpbgotUEFUSDogL2JpbgotUEFUSDogL3Vzci9iaW4vWDExCi1QQVRIOiAvaG9tZS9waGFubmEvanN3YXQtNC4yL2JpbgotUEFUSDogL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC9vdXQvaG9zdC9saW51eC14ODYvYmluCi1QQVRIOiAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3ByZWJ1aWx0L0xpbnV4L3Rvb2xjaGFpbi9hcm0tZWxmCi1QQVRIOiAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL3F0b29scwotUEFUSDogL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC9wcmVidWlsdC9MaW51eC90b29sY2hhaW4tZWFiaS00LjIuMS9iaW4KLVBBVEg6IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvcHJlYnVpbHQvTGludXgvdG9vbGNoYWluLWVhYmktNC4yLjEvYmluCi0KLQotIyMgLS0tLS0tLS0tLS0gIyMKLSMjIENvcmUgdGVzdHMuICMjCi0jIyAtLS0tLS0tLS0tLSAjIwotCi1jb25maWd1cmU6MTQwMjogY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbAotY29uZmlndXJlOjE0NTc6IHJlc3VsdDogL3Vzci9iaW4vaW5zdGFsbCAtYwotY29uZmlndXJlOjE0Njg6IGNoZWNraW5nIHdoZXRoZXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZQotY29uZmlndXJlOjE1MTE6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6MTU3NjogY2hlY2tpbmcgZm9yIGdhd2sKLWNvbmZpZ3VyZToxNTkyOiBmb3VuZCAvdXNyL2Jpbi9nYXdrCi1jb25maWd1cmU6MTYwMjogcmVzdWx0OiBnYXdrCi1jb25maWd1cmU6MTYxMjogY2hlY2tpbmcgd2hldGhlciBtYWtlIHNldHMgJChNQUtFKQotY29uZmlndXJlOjE2MzI6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6MTgyMTogY2hlY2tpbmcgZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSBtYWtlCi1jb25maWd1cmU6MTg0OTogcmVzdWx0OiBHTlUKLWNvbmZpZ3VyZToxOTIwOiBjaGVja2luZyBmb3IgZ2NjCi1jb25maWd1cmU6MTkzNjogZm91bmQgL3Vzci9iaW4vZ2NjCi1jb25maWd1cmU6MTk0NjogcmVzdWx0OiBnY2MKLWNvbmZpZ3VyZToyMTkwOiBjaGVja2luZyBmb3IgQyBjb21waWxlciB2ZXJzaW9uCi1jb25maWd1cmU6MjE5MzogZ2NjIC0tdmVyc2lvbiA8L2Rldi9udWxsID4mNQotZ2NjIChHQ0MpIDQuMC4zIChVYnVudHUgNC4wLjMtMXVidW50dTUpCi1Db3B5cmlnaHQgKEMpIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi1UaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTwotd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLWNvbmZpZ3VyZToyMTk2OiAkPyA9IDAKLWNvbmZpZ3VyZToyMTk4OiBnY2MgLXYgPC9kZXYvbnVsbCA+JjUKLVVzaW5nIGJ1aWx0LWluIHNwZWNzLgotVGFyZ2V0OiBpNDg2LWxpbnV4LWdudQotQ29uZmlndXJlZCB3aXRoOiAuLi9zcmMvY29uZmlndXJlIC12IC0tZW5hYmxlLWxhbmd1YWdlcz1jLGMrKyxqYXZhLGY5NSxvYmpjLGFkYSx0cmVlbGFuZyAtLXByZWZpeD0vdXNyIC0tZW5hYmxlLXNoYXJlZCAtLXdpdGgtc3lzdGVtLXpsaWIgLS1saWJleGVjZGlyPS91c3IvbGliIC0td2l0aG91dC1pbmNsdWRlZC1nZXR0ZXh0IC0tZW5hYmxlLXRocmVhZHM9cG9zaXggLS1lbmFibGUtbmxzIC0tcHJvZ3JhbS1zdWZmaXg9LTQuMCAtLWVuYWJsZS1fX2N4YV9hdGV4aXQgLS1lbmFibGUtY2xvY2FsZT1nbnUgLS1lbmFibGUtbGlic3RkY3h4LWRlYnVnIC0tZW5hYmxlLWphdmEtYXd0PWd0ay1kZWZhdWx0IC0tZW5hYmxlLWd0ay1jYWlybyAtLXdpdGgtamF2YS1ob21lPS91c3IvbGliL2p2bS9qYXZhLTEuNC4yLWdjai00LjAtMS40LjIuMC9qcmUgLS1lbmFibGUtbXBmciAtLWRpc2FibGUtd2Vycm9yIC0td2l0aC10dW5lPXBlbnRpdW00IC0tZW5hYmxlLWNoZWNraW5nPXJlbGVhc2UgaTQ4Ni1saW51eC1nbnUKLVRocmVhZCBtb2RlbDogcG9zaXgKLWdjYyB2ZXJzaW9uIDQuMC4zIChVYnVudHUgNC4wLjMtMXVidW50dTUpCi1jb25maWd1cmU6MjIwMTogJD8gPSAwCi1jb25maWd1cmU6MjIwMzogZ2NjIC1WIDwvZGV2L251bGwgPiY1Ci1nY2M6ICctVicgb3B0aW9uIG11c3QgaGF2ZSBhcmd1bWVudAotY29uZmlndXJlOjIyMDY6ICQ/ID0gMQotY29uZmlndXJlOjIyMjk6IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZQotY29uZmlndXJlOjIyMzI6IGdjYyAgICBjb25mdGVzdC5jICA+JjUKLWNvbmZpZ3VyZToyMjM1OiAkPyA9IDAKLWNvbmZpZ3VyZToyMjgxOiByZXN1bHQ6IGEub3V0Ci1jb25maWd1cmU6MjI4NjogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3JrcwotY29uZmlndXJlOjIyOTI6IC4vYS5vdXQKLWNvbmZpZ3VyZToyMjk1OiAkPyA9IDAKLWNvbmZpZ3VyZToyMzEyOiByZXN1bHQ6IHllcwotY29uZmlndXJlOjIzMTk6IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZwotY29uZmlndXJlOjIzMjE6IHJlc3VsdDogbm8KLWNvbmZpZ3VyZToyMzI0OiBjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzCi1jb25maWd1cmU6MjMyNjogZ2NjIC1vIGNvbmZ0ZXN0ICAgIGNvbmZ0ZXN0LmMgID4mNQotY29uZmlndXJlOjIzMjk6ICQ/ID0gMAotY29uZmlndXJlOjIzNTQ6IHJlc3VsdDogCi1jb25maWd1cmU6MjM2MDogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMKLWNvbmZpZ3VyZToyMzgxOiBnY2MgLWMgICBjb25mdGVzdC5jID4mNQotY29uZmlndXJlOjIzODQ6ICQ/ID0gMAotY29uZmlndXJlOjI0MDY6IHJlc3VsdDogbwotY29uZmlndXJlOjI0MTA6IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlcgotY29uZmlndXJlOjI0MzQ6IGdjYyAtYyAgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25maWd1cmU6MjQ0MDogJD8gPSAwCi1jb25maWd1cmU6MjQ0MzogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjI0NDY6ICQ/ID0gMAotY29uZmlndXJlOjI0NDk6IHRlc3QgLXMgY29uZnRlc3QubwotY29uZmlndXJlOjI0NTI6ICQ/ID0gMAotY29uZmlndXJlOjI0NjU6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6MjQ3MTogY2hlY2tpbmcgd2hldGhlciBnY2MgYWNjZXB0cyAtZwotY29uZmlndXJlOjI0OTI6IGdjYyAtYyAtZyAgY29uZnRlc3QuYyA+JjUKLWNvbmZpZ3VyZToyNDk4OiAkPyA9IDAKLWNvbmZpZ3VyZToyNTAxOiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6MjUwNDogJD8gPSAwCi1jb25maWd1cmU6MjUwNzogdGVzdCAtcyBjb25mdGVzdC5vCi1jb25maWd1cmU6MjUxMDogJD8gPSAwCi1jb25maWd1cmU6MjUyMTogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZToyNTM4OiBjaGVja2luZyBmb3IgZ2NjIG9wdGlvbiB0byBhY2NlcHQgQU5TSSBDCi1jb25maWd1cmU6MjYwODogZ2NjICAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25maWd1cmU6MjYxNDogJD8gPSAwCi1jb25maWd1cmU6MjYxNzogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjI2MjA6ICQ/ID0gMAotY29uZmlndXJlOjI2MjM6IHRlc3QgLXMgY29uZnRlc3QubwotY29uZmlndXJlOjI2MjY6ICQ/ID0gMAotY29uZmlndXJlOjI2NDQ6IHJlc3VsdDogbm9uZSBuZWVkZWQKLWNvbmZpZ3VyZToyNjYyOiBnY2MgLWMgLWcgLU8yICBjb25mdGVzdC5jID4mNQotY29uZnRlc3QuYzoyOiBlcnJvcjogc3ludGF4IGVycm9yIGJlZm9yZSAnbWUnCi1jb25maWd1cmU6MjY2ODogJD8gPSAxCi1jb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoKLXwgI2lmbmRlZiBfX2NwbHVzcGx1cwotfCAgIGNob2tlIG1lCi18ICNlbmRpZgotY29uZmlndXJlOjI4MDA6IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgZ2NjCi1jb25maWd1cmU6Mjg5MDogcmVzdWx0OiBnY2MzCi1jb25maWd1cmU6MjkxMzogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IKLWNvbmZpZ3VyZToyOTQ4OiBnY2MgLUUgIGNvbmZ0ZXN0LmMKLWNvbmZpZ3VyZToyOTU0OiAkPyA9IDAKLWNvbmZpZ3VyZToyOTg2OiBnY2MgLUUgIGNvbmZ0ZXN0LmMKLWNvbmZ0ZXN0LmM6MTI6Mjg6IGVycm9yOiBhY19ub25leGlzdGVudC5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Ci1jb25maWd1cmU6Mjk5MjogJD8gPSAxCi1jb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoKLXwgLyogY29uZmRlZnMuaC4gICovCi18IAotfCAjZGVmaW5lIFBBQ0tBR0VfTkFNRSAiR05VIEJpc29uIgotfCAjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiYmlzb24iCi18ICNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIyLjMiCi18ICNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgIkdOVSBCaXNvbiAyLjMiCi18ICNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgImJ1Zy1iaXNvbkBnbnUub3JnIgotfCAjZGVmaW5lIFBBQ0tBR0UgImJpc29uIgotfCAjZGVmaW5lIFZFUlNJT04gIjIuMyIKLXwgI2RlZmluZSBfR05VX1NPVVJDRSAxCi18IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLXwgI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+Ci1jb25maWd1cmU6MzAzMTogcmVzdWx0OiBnY2MgLUUKLWNvbmZpZ3VyZTozMDU1OiBnY2MgLUUgIGNvbmZ0ZXN0LmMKLWNvbmZpZ3VyZTozMDYxOiAkPyA9IDAKLWNvbmZpZ3VyZTozMDkzOiBnY2MgLUUgIGNvbmZ0ZXN0LmMKLWNvbmZ0ZXN0LmM6MTI6Mjg6IGVycm9yOiBhY19ub25leGlzdGVudC5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Ci1jb25maWd1cmU6MzA5OTogJD8gPSAxCi1jb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoKLXwgLyogY29uZmRlZnMuaC4gICovCi18IAotfCAjZGVmaW5lIFBBQ0tBR0VfTkFNRSAiR05VIEJpc29uIgotfCAjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiYmlzb24iCi18ICNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIyLjMiCi18ICNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgIkdOVSBCaXNvbiAyLjMiCi18ICNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgImJ1Zy1iaXNvbkBnbnUub3JnIgotfCAjZGVmaW5lIFBBQ0tBR0UgImJpc29uIgotfCAjZGVmaW5lIFZFUlNJT04gIjIuMyIKLXwgI2RlZmluZSBfR05VX1NPVVJDRSAxCi18IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLXwgI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+Ci1jb25maWd1cmU6MzE0MzogY2hlY2tpbmcgZm9yIGVncmVwCi1jb25maWd1cmU6MzE1MzogcmVzdWx0OiBncmVwIC1FCi1jb25maWd1cmU6MzE1OTogY2hlY2tpbmcgZm9yIEFJWAotY29uZmlndXJlOjMxODE6IHJlc3VsdDogbm8KLWNvbmZpZ3VyZTozMTg3OiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcwotY29uZmlndXJlOjMyMTI6IGdjYyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25maWd1cmU6MzIxODogJD8gPSAwCi1jb25maWd1cmU6MzIyMTogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjMyMjQ6ICQ/ID0gMAotY29uZmlndXJlOjMyMjc6IHRlc3QgLXMgY29uZnRlc3QubwotY29uZmlndXJlOjMyMzA6ICQ/ID0gMAotY29uZmlndXJlOjMzMTk6IGdjYyAtbyBjb25mdGVzdCAtZyAtTzIgICBjb25mdGVzdC5jICA+JjUKLWNvbmZ0ZXN0LmM6IEluIGZ1bmN0aW9uICdtYWluJzoKLWNvbmZ0ZXN0LmM6Mjk6IHdhcm5pbmc6IGluY29tcGF0aWJsZSBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBidWlsdC1pbiBmdW5jdGlvbiAnZXhpdCcKLWNvbmZpZ3VyZTozMzIyOiAkPyA9IDAKLWNvbmZpZ3VyZTozMzI0OiAuL2NvbmZ0ZXN0Ci1jb25maWd1cmU6MzMyNzogJD8gPSAwCi1jb25maWd1cmU6MzM0MjogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZTozMzY2OiBjaGVja2luZyBmb3Igc3lzL3R5cGVzLmgKLWNvbmZpZ3VyZTozMzgyOiBnY2MgLWMgLWcgLU8yICBjb25mdGVzdC5jID4mNQotY29uZmlndXJlOjMzODg6ICQ/ID0gMAotY29uZmlndXJlOjMzOTE6IHRlc3QgLXogCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLWNvbmZpZ3VyZTozMzk0OiAkPyA9IDAKLWNvbmZpZ3VyZTozMzk3OiB0ZXN0IC1zIGNvbmZ0ZXN0Lm8KLWNvbmZpZ3VyZTozNDAwOiAkPyA9IDAKLWNvbmZpZ3VyZTozNDExOiByZXN1bHQ6IHllcwotY29uZmlndXJlOjMzNjY6IGNoZWNraW5nIGZvciBzeXMvc3RhdC5oCi1jb25maWd1cmU6MzM4MjogZ2NjIC1jIC1nIC1PMiAgY29uZnRlc3QuYyA+JjUKLWNvbmZpZ3VyZTozMzg4OiAkPyA9IDAKLWNvbmZpZ3VyZTozMzkxOiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6MzM5NDogJD8gPSAwCi1jb25maWd1cmU6MzM5NzogdGVzdCAtcyBjb25mdGVzdC5vCi1jb25maWd1cmU6MzQwMDogJD8gPSAwCi1jb25maWd1cmU6MzQxMTogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZTozMzY2OiBjaGVja2luZyBmb3Igc3RkbGliLmgKLWNvbmZpZ3VyZTozMzgyOiBnY2MgLWMgLWcgLU8yICBjb25mdGVzdC5jID4mNQotY29uZmlndXJlOjMzODg6ICQ/ID0gMAotY29uZmlndXJlOjMzOTE6IHRlc3QgLXogCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLWNvbmZpZ3VyZTozMzk0OiAkPyA9IDAKLWNvbmZpZ3VyZTozMzk3OiB0ZXN0IC1zIGNvbmZ0ZXN0Lm8KLWNvbmZpZ3VyZTozNDAwOiAkPyA9IDAKLWNvbmZpZ3VyZTozNDExOiByZXN1bHQ6IHllcwotY29uZmlndXJlOjMzNjY6IGNoZWNraW5nIGZvciBzdHJpbmcuaAotY29uZmlndXJlOjMzODI6IGdjYyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25maWd1cmU6MzM4ODogJD8gPSAwCi1jb25maWd1cmU6MzM5MTogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjMzOTQ6ICQ/ID0gMAotY29uZmlndXJlOjMzOTc6IHRlc3QgLXMgY29uZnRlc3QubwotY29uZmlndXJlOjM0MDA6ICQ/ID0gMAotY29uZmlndXJlOjM0MTE6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6MzM2NjogY2hlY2tpbmcgZm9yIG1lbW9yeS5oCi1jb25maWd1cmU6MzM4MjogZ2NjIC1jIC1nIC1PMiAgY29uZnRlc3QuYyA+JjUKLWNvbmZpZ3VyZTozMzg4OiAkPyA9IDAKLWNvbmZpZ3VyZTozMzkxOiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6MzM5NDogJD8gPSAwCi1jb25maWd1cmU6MzM5NzogdGVzdCAtcyBjb25mdGVzdC5vCi1jb25maWd1cmU6MzQwMDogJD8gPSAwCi1jb25maWd1cmU6MzQxMTogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZTozMzY2OiBjaGVja2luZyBmb3Igc3RyaW5ncy5oCi1jb25maWd1cmU6MzM4MjogZ2NjIC1jIC1nIC1PMiAgY29uZnRlc3QuYyA+JjUKLWNvbmZpZ3VyZTozMzg4OiAkPyA9IDAKLWNvbmZpZ3VyZTozMzkxOiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6MzM5NDogJD8gPSAwCi1jb25maWd1cmU6MzM5NzogdGVzdCAtcyBjb25mdGVzdC5vCi1jb25maWd1cmU6MzQwMDogJD8gPSAwCi1jb25maWd1cmU6MzQxMTogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZTozMzY2OiBjaGVja2luZyBmb3IgaW50dHlwZXMuaAotY29uZmlndXJlOjMzODI6IGdjYyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25maWd1cmU6MzM4ODogJD8gPSAwCi1jb25maWd1cmU6MzM5MTogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjMzOTQ6ICQ/ID0gMAotY29uZmlndXJlOjMzOTc6IHRlc3QgLXMgY29uZnRlc3QubwotY29uZmlndXJlOjM0MDA6ICQ/ID0gMAotY29uZmlndXJlOjM0MTE6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6MzM2NjogY2hlY2tpbmcgZm9yIHN0ZGludC5oCi1jb25maWd1cmU6MzM4MjogZ2NjIC1jIC1nIC1PMiAgY29uZnRlc3QuYyA+JjUKLWNvbmZpZ3VyZTozMzg4OiAkPyA9IDAKLWNvbmZpZ3VyZTozMzkxOiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6MzM5NDogJD8gPSAwCi1jb25maWd1cmU6MzM5NzogdGVzdCAtcyBjb25mdGVzdC5vCi1jb25maWd1cmU6MzQwMDogJD8gPSAwCi1jb25maWd1cmU6MzQxMTogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZTozMzY2OiBjaGVja2luZyBmb3IgdW5pc3RkLmgKLWNvbmZpZ3VyZTozMzgyOiBnY2MgLWMgLWcgLU8yICBjb25mdGVzdC5jID4mNQotY29uZmlndXJlOjMzODg6ICQ/ID0gMAotY29uZmlndXJlOjMzOTE6IHRlc3QgLXogCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLWNvbmZpZ3VyZTozMzk0OiAkPyA9IDAKLWNvbmZpZ3VyZTozMzk3OiB0ZXN0IC1zIGNvbmZ0ZXN0Lm8KLWNvbmZpZ3VyZTozNDAwOiAkPyA9IDAKLWNvbmZpZ3VyZTozNDExOiByZXN1bHQ6IHllcwotY29uZmlndXJlOjM0MzM6IGNoZWNraW5nIG1pbml4L2NvbmZpZy5oIHVzYWJpbGl0eQotY29uZmlndXJlOjM0NDU6IGdjYyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25mdGVzdC5jOjU2OjI2OiBlcnJvcjogbWluaXgvY29uZmlnLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKLWNvbmZpZ3VyZTozNDUxOiAkPyA9IDEKLWNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOgotfCAvKiBjb25mZGVmcy5oLiAgKi8KLXwgCi18ICNkZWZpbmUgUEFDS0FHRV9OQU1FICJHTlUgQmlzb24iCi18ICNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICJiaXNvbiIKLXwgI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIjIuMyIKLXwgI2RlZmluZSBQQUNLQUdFX1NUUklORyAiR05VIEJpc29uIDIuMyIKLXwgI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiYnVnLWJpc29uQGdudS5vcmciCi18ICNkZWZpbmUgUEFDS0FHRSAiYmlzb24iCi18ICNkZWZpbmUgVkVSU0lPTiAiMi4zIgotfCAjZGVmaW5lIF9HTlVfU09VUkNFIDEKLXwgI2RlZmluZSBTVERDX0hFQURFUlMgMQotfCAjZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMQotfCAjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCi18ICNkZWZpbmUgSEFWRV9TVERMSUJfSCAxCi18ICNkZWZpbmUgSEFWRV9TVFJJTkdfSCAxCi18ICNkZWZpbmUgSEFWRV9NRU1PUllfSCAxCi18ICNkZWZpbmUgSEFWRV9TVFJJTkdTX0ggMQotfCAjZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAxCi18ICNkZWZpbmUgSEFWRV9TVERJTlRfSCAxCi18ICNkZWZpbmUgSEFWRV9VTklTVERfSCAxCi18IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLXwgI2luY2x1ZGUgPHN0ZGlvLmg+Ci18ICNpZiBIQVZFX1NZU19UWVBFU19ICi18ICMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci18ICNlbmRpZgotfCAjaWYgSEFWRV9TWVNfU1RBVF9ICi18ICMgaW5jbHVkZSA8c3lzL3N0YXQuaD4KLXwgI2VuZGlmCi18ICNpZiBTVERDX0hFQURFUlMKLXwgIyBpbmNsdWRlIDxzdGRsaWIuaD4KLXwgIyBpbmNsdWRlIDxzdGRkZWYuaD4KLXwgI2Vsc2UKLXwgIyBpZiBIQVZFX1NURExJQl9ICi18ICMgIGluY2x1ZGUgPHN0ZGxpYi5oPgotfCAjIGVuZGlmCi18ICNlbmRpZgotfCAjaWYgSEFWRV9TVFJJTkdfSAotfCAjIGlmICFTVERDX0hFQURFUlMgJiYgSEFWRV9NRU1PUllfSAotfCAjICBpbmNsdWRlIDxtZW1vcnkuaD4KLXwgIyBlbmRpZgotfCAjIGluY2x1ZGUgPHN0cmluZy5oPgotfCAjZW5kaWYKLXwgI2lmIEhBVkVfU1RSSU5HU19ICi18ICMgaW5jbHVkZSA8c3RyaW5ncy5oPgotfCAjZW5kaWYKLXwgI2lmIEhBVkVfSU5UVFlQRVNfSAotfCAjIGluY2x1ZGUgPGludHR5cGVzLmg+Ci18ICNlbHNlCi18ICMgaWYgSEFWRV9TVERJTlRfSAotfCAjICBpbmNsdWRlIDxzdGRpbnQuaD4KLXwgIyBlbmRpZgotfCAjZW5kaWYKLXwgI2lmIEhBVkVfVU5JU1REX0gKLXwgIyBpbmNsdWRlIDx1bmlzdGQuaD4KLXwgI2VuZGlmCi18ICNpbmNsdWRlIDxtaW5peC9jb25maWcuaD4KLWNvbmZpZ3VyZTozNDczOiByZXN1bHQ6IG5vCi1jb25maWd1cmU6MzQ3NzogY2hlY2tpbmcgbWluaXgvY29uZmlnLmggcHJlc2VuY2UKLWNvbmZpZ3VyZTozNDg3OiBnY2MgLUUgIGNvbmZ0ZXN0LmMKLWNvbmZ0ZXN0LmM6MjI6MjY6IGVycm9yOiBtaW5peC9jb25maWcuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQotY29uZmlndXJlOjM0OTM6ICQ/ID0gMQotY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6Ci18IC8qIGNvbmZkZWZzLmguICAqLwotfCAKLXwgI2RlZmluZSBQQUNLQUdFX05BTUUgIkdOVSBCaXNvbiIKLXwgI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgImJpc29uIgotfCAjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiMi4zIgotfCAjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICJHTlUgQmlzb24gMi4zIgotfCAjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICJidWctYmlzb25AZ251Lm9yZyIKLXwgI2RlZmluZSBQQUNLQUdFICJiaXNvbiIKLXwgI2RlZmluZSBWRVJTSU9OICIyLjMiCi18ICNkZWZpbmUgX0dOVV9TT1VSQ0UgMQotfCAjZGVmaW5lIFNURENfSEVBREVSUyAxCi18ICNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxCi18ICNkZWZpbmUgSEFWRV9TWVNfU1RBVF9IIDEKLXwgI2RlZmluZSBIQVZFX1NURExJQl9IIDEKLXwgI2RlZmluZSBIQVZFX1NUUklOR19IIDEKLXwgI2RlZmluZSBIQVZFX01FTU9SWV9IIDEKLXwgI2RlZmluZSBIQVZFX1NUUklOR1NfSCAxCi18ICNkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDEKLXwgI2RlZmluZSBIQVZFX1NURElOVF9IIDEKLXwgI2RlZmluZSBIQVZFX1VOSVNURF9IIDEKLXwgLyogZW5kIGNvbmZkZWZzLmguICAqLwotfCAjaW5jbHVkZSA8bWluaXgvY29uZmlnLmg+Ci1jb25maWd1cmU6MzUxMzogcmVzdWx0OiBubwotY29uZmlndXJlOjM1NDg6IGNoZWNraW5nIGZvciBtaW5peC9jb25maWcuaAotY29uZmlndXJlOjM1NTU6IHJlc3VsdDogbm8KLWNvbmZpZ3VyZTozNTk0OiBjaGVja2luZyB3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fCi1jb25maWd1cmU6MzYxNzogZ2NjIC1jIC1nIC1PMiAgY29uZnRlc3QuYyA+JjUKLWNvbmZpZ3VyZTozNjIzOiAkPyA9IDAKLWNvbmZpZ3VyZTozNjI2OiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6MzYyOTogJD8gPSAwCi1jb25maWd1cmU6MzYzMjogdGVzdCAtcyBjb25mdGVzdC5vCi1jb25maWd1cmU6MzYzNTogJD8gPSAwCi1jb25maWd1cmU6MzY0NjogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZTozNzA2OiBjaGVja2luZyBmb3IgZ2NjCi1jb25maWd1cmU6MzczMjogcmVzdWx0OiBnY2MKLWNvbmZpZ3VyZTozOTc2OiBjaGVja2luZyBmb3IgQyBjb21waWxlciB2ZXJzaW9uCi1jb25maWd1cmU6Mzk3OTogZ2NjIC0tdmVyc2lvbiA8L2Rldi9udWxsID4mNQotZ2NjIChHQ0MpIDQuMC4zIChVYnVudHUgNC4wLjMtMXVidW50dTUpCi1Db3B5cmlnaHQgKEMpIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi1UaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTwotd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLWNvbmZpZ3VyZTozOTgyOiAkPyA9IDAKLWNvbmZpZ3VyZTozOTg0OiBnY2MgLXYgPC9kZXYvbnVsbCA+JjUKLVVzaW5nIGJ1aWx0LWluIHNwZWNzLgotVGFyZ2V0OiBpNDg2LWxpbnV4LWdudQotQ29uZmlndXJlZCB3aXRoOiAuLi9zcmMvY29uZmlndXJlIC12IC0tZW5hYmxlLWxhbmd1YWdlcz1jLGMrKyxqYXZhLGY5NSxvYmpjLGFkYSx0cmVlbGFuZyAtLXByZWZpeD0vdXNyIC0tZW5hYmxlLXNoYXJlZCAtLXdpdGgtc3lzdGVtLXpsaWIgLS1saWJleGVjZGlyPS91c3IvbGliIC0td2l0aG91dC1pbmNsdWRlZC1nZXR0ZXh0IC0tZW5hYmxlLXRocmVhZHM9cG9zaXggLS1lbmFibGUtbmxzIC0tcHJvZ3JhbS1zdWZmaXg9LTQuMCAtLWVuYWJsZS1fX2N4YV9hdGV4aXQgLS1lbmFibGUtY2xvY2FsZT1nbnUgLS1lbmFibGUtbGlic3RkY3h4LWRlYnVnIC0tZW5hYmxlLWphdmEtYXd0PWd0ay1kZWZhdWx0IC0tZW5hYmxlLWd0ay1jYWlybyAtLXdpdGgtamF2YS1ob21lPS91c3IvbGliL2p2bS9qYXZhLTEuNC4yLWdjai00LjAtMS40LjIuMC9qcmUgLS1lbmFibGUtbXBmciAtLWRpc2FibGUtd2Vycm9yIC0td2l0aC10dW5lPXBlbnRpdW00IC0tZW5hYmxlLWNoZWNraW5nPXJlbGVhc2UgaTQ4Ni1saW51eC1nbnUKLVRocmVhZCBtb2RlbDogcG9zaXgKLWdjYyB2ZXJzaW9uIDQuMC4zIChVYnVudHUgNC4wLjMtMXVidW50dTUpCi1jb25maWd1cmU6Mzk4NzogJD8gPSAwCi1jb25maWd1cmU6Mzk4OTogZ2NjIC1WIDwvZGV2L251bGwgPiY1Ci1nY2M6ICctVicgb3B0aW9uIG11c3QgaGF2ZSBhcmd1bWVudAotY29uZmlndXJlOjM5OTI6ICQ/ID0gMQotY29uZmlndXJlOjM5OTU6IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlcgotY29uZmlndXJlOjQwNTA6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6NDA1NjogY2hlY2tpbmcgd2hldGhlciBnY2MgYWNjZXB0cyAtZwotY29uZmlndXJlOjQxMDY6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6NDEyMzogY2hlY2tpbmcgZm9yIGdjYyBvcHRpb24gdG8gYWNjZXB0IEFOU0kgQwotY29uZmlndXJlOjQyMjk6IHJlc3VsdDogbm9uZSBuZWVkZWQKLWNvbmZpZ3VyZTo0MjQ3OiBnY2MgLWMgLWcgLU8yICBjb25mdGVzdC5jID4mNQotY29uZnRlc3QuYzoyOiBlcnJvcjogc3ludGF4IGVycm9yIGJlZm9yZSAnbWUnCi1jb25maWd1cmU6NDI1MzogJD8gPSAxCi1jb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoKLXwgI2lmbmRlZiBfX2NwbHVzcGx1cwotfCAgIGNob2tlIG1lCi18ICNlbmRpZgotY29uZmlndXJlOjQzODU6IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgZ2NjCi1jb25maWd1cmU6NDQ3NTogcmVzdWx0OiBnY2MzCi1jb25maWd1cmU6NDUzODogY2hlY2tpbmcgZm9yIGdjYwotY29uZmlndXJlOjQ1NjQ6IHJlc3VsdDogZ2NjCi1jb25maWd1cmU6NDgwODogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgdmVyc2lvbgotY29uZmlndXJlOjQ4MTE6IGdjYyAtLXZlcnNpb24gPC9kZXYvbnVsbCA+JjUKLWdjYyAoR0NDKSA0LjAuMyAoVWJ1bnR1IDQuMC4zLTF1YnVudHU1KQotQ29weXJpZ2h0IChDKSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KLXdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1jb25maWd1cmU6NDgxNDogJD8gPSAwCi1jb25maWd1cmU6NDgxNjogZ2NjIC12IDwvZGV2L251bGwgPiY1Ci1Vc2luZyBidWlsdC1pbiBzcGVjcy4KLVRhcmdldDogaTQ4Ni1saW51eC1nbnUKLUNvbmZpZ3VyZWQgd2l0aDogLi4vc3JjL2NvbmZpZ3VyZSAtdiAtLWVuYWJsZS1sYW5ndWFnZXM9YyxjKyssamF2YSxmOTUsb2JqYyxhZGEsdHJlZWxhbmcgLS1wcmVmaXg9L3VzciAtLWVuYWJsZS1zaGFyZWQgLS13aXRoLXN5c3RlbS16bGliIC0tbGliZXhlY2Rpcj0vdXNyL2xpYiAtLXdpdGhvdXQtaW5jbHVkZWQtZ2V0dGV4dCAtLWVuYWJsZS10aHJlYWRzPXBvc2l4IC0tZW5hYmxlLW5scyAtLXByb2dyYW0tc3VmZml4PS00LjAgLS1lbmFibGUtX19jeGFfYXRleGl0IC0tZW5hYmxlLWNsb2NhbGU9Z251IC0tZW5hYmxlLWxpYnN0ZGN4eC1kZWJ1ZyAtLWVuYWJsZS1qYXZhLWF3dD1ndGstZGVmYXVsdCAtLWVuYWJsZS1ndGstY2Fpcm8gLS13aXRoLWphdmEtaG9tZT0vdXNyL2xpYi9qdm0vamF2YS0xLjQuMi1nY2otNC4wLTEuNC4yLjAvanJlIC0tZW5hYmxlLW1wZnIgLS1kaXNhYmxlLXdlcnJvciAtLXdpdGgtdHVuZT1wZW50aXVtNCAtLWVuYWJsZS1jaGVja2luZz1yZWxlYXNlIGk0ODYtbGludXgtZ251Ci1UaHJlYWQgbW9kZWw6IHBvc2l4Ci1nY2MgdmVyc2lvbiA0LjAuMyAoVWJ1bnR1IDQuMC4zLTF1YnVudHU1KQotY29uZmlndXJlOjQ4MTk6ICQ/ID0gMAotY29uZmlndXJlOjQ4MjE6IGdjYyAtViA8L2Rldi9udWxsID4mNQotZ2NjOiAnLVYnIG9wdGlvbiBtdXN0IGhhdmUgYXJndW1lbnQKLWNvbmZpZ3VyZTo0ODI0OiAkPyA9IDEKLWNvbmZpZ3VyZTo0ODI3OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIKLWNvbmZpZ3VyZTo0ODgyOiByZXN1bHQ6IHllcwotY29uZmlndXJlOjQ4ODg6IGNoZWNraW5nIHdoZXRoZXIgZ2NjIGFjY2VwdHMgLWcKLWNvbmZpZ3VyZTo0OTM4OiByZXN1bHQ6IHllcwotY29uZmlndXJlOjQ5NTU6IGNoZWNraW5nIGZvciBnY2Mgb3B0aW9uIHRvIGFjY2VwdCBBTlNJIEMKLWNvbmZpZ3VyZTo1MDYxOiByZXN1bHQ6IG5vbmUgbmVlZGVkCi1jb25maWd1cmU6NTA3OTogZ2NjIC1jIC1nIC1PMiAgY29uZnRlc3QuYyA+JjUKLWNvbmZ0ZXN0LmM6MjogZXJyb3I6IHN5bnRheCBlcnJvciBiZWZvcmUgJ21lJwotY29uZmlndXJlOjUwODU6ICQ/ID0gMQotY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6Ci18ICNpZm5kZWYgX19jcGx1c3BsdXMKLXwgICBjaG9rZSBtZQotfCAjZW5kaWYKLWNvbmZpZ3VyZTo1MjE3OiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mIGdjYwotY29uZmlndXJlOjUzMDc6IHJlc3VsdDogZ2NjMwotY29uZmlndXJlOjYwMDc6IGdjYyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25maWd1cmU6NjAxMzogJD8gPSAwCi1jb25maWd1cmU6NjAxNjogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjYwMTk6ICQ/ID0gMAotY29uZmlndXJlOjYwMjI6IHRlc3QgLXMgY29uZnRlc3QubwotY29uZmlndXJlOjYwMjU6ICQ/ID0gMAotY29uZmlndXJlOjYwNjQ6IGNoZWNraW5nIGZvciBmbGV4Ci1jb25maWd1cmU6NjA4MDogZm91bmQgL3Vzci9iaW4vZmxleAotY29uZmlndXJlOjYwOTA6IHJlc3VsdDogZmxleAotY29uZmlndXJlOjYxMDM6IGNoZWNraW5nIGZvciB5eXdyYXAgaW4gLWxmbAotY29uZmlndXJlOjYxMzM6IGdjYyAtbyBjb25mdGVzdCAtZyAtTzIgICBjb25mdGVzdC5jIC1sZmwgICA+JjUKLWNvbmZpZ3VyZTo2MTM5OiAkPyA9IDAKLWNvbmZpZ3VyZTo2MTQyOiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6NjE0NTogJD8gPSAwCi1jb25maWd1cmU6NjE0ODogdGVzdCAtcyBjb25mdGVzdAotY29uZmlndXJlOjYxNTE6ICQ/ID0gMAotY29uZmlndXJlOjYxNjQ6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6NjI0MTogY2hlY2tpbmcgbGV4IG91dHB1dCBmaWxlIHJvb3QKLWNvbmZpZ3VyZTo2MjUyOiBmbGV4IGNvbmZ0ZXN0LmwKLWNvbmZpZ3VyZTo2MjU1OiAkPyA9IDAKLWNvbmZpZ3VyZTo2MjY3OiByZXN1bHQ6IGxleC55eQotY29uZmlndXJlOjYyNzI6IGNoZWNraW5nIHdoZXRoZXIgeXl0ZXh0IGlzIGEgcG9pbnRlcgotY29uZmlndXJlOjYyODg6IGdjYyAtbyBjb25mdGVzdCAtZyAtTzIgICBjb25mdGVzdC5jICAtbGZsID4mNQotY29uZmlndXJlOjYyOTQ6ICQ/ID0gMAotY29uZmlndXJlOjYyOTc6IHRlc3QgLXogCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLWNvbmZpZ3VyZTo2MzAwOiAkPyA9IDAKLWNvbmZpZ3VyZTo2MzAzOiB0ZXN0IC1zIGNvbmZ0ZXN0Ci1jb25maWd1cmU6NjMwNjogJD8gPSAwCi1jb25maWd1cmU6NjMyMDogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZTo2MzM1OiBjaGVja2luZyBmb3IgYmlzb24KLWNvbmZpZ3VyZTo2MzUxOiBmb3VuZCAvdXNyL2Jpbi9iaXNvbgotY29uZmlndXJlOjYzNjE6IHJlc3VsdDogYmlzb24gLXkKLWNvbmZpZ3VyZTo2NDEzOiBjaGVja2luZyBmb3IgcmFubGliCi1jb25maWd1cmU6NjQyOTogZm91bmQgL3Vzci9iaW4vcmFubGliCi1jb25maWd1cmU6NjQ0MDogcmVzdWx0OiByYW5saWIKLWNvbmZpZ3VyZTo2NDU2OiBjaGVja2luZyBmb3IgZ200Ci1jb25maWd1cmU6NjQ4OTogcmVzdWx0OiBubwotY29uZmlndXJlOjY0NTY6IGNoZWNraW5nIGZvciBnbnVtNAotY29uZmlndXJlOjY0ODk6IHJlc3VsdDogbm8KLWNvbmZpZ3VyZTo2NDU2OiBjaGVja2luZyBmb3IgbTQKLWNvbmZpZ3VyZTo2NDc0OiBmb3VuZCAvdXNyL2Jpbi9tNAotY29uZmlndXJlOjY0ODY6IHJlc3VsdDogL3Vzci9iaW4vbTQKLWNvbmZpZ3VyZTo2NDk3OiBjaGVja2luZyB3aGV0aGVyIG00IHN1cHBvcnRzIGZyb3plbiBmaWxlcwotY29uZmlndXJlOjY1MDk6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6NjU0MTogY2hlY2tpbmcgbG9jYWxlLmggdXNhYmlsaXR5Ci1jb25maWd1cmU6NjU1MzogZ2NjIC1jIC1nIC1PMiAgY29uZnRlc3QuYyA+JjUKLWNvbmZpZ3VyZTo2NTU5OiAkPyA9IDAKLWNvbmZpZ3VyZTo2NTYyOiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6NjU2NTogJD8gPSAwCi1jb25maWd1cmU6NjU2ODogdGVzdCAtcyBjb25mdGVzdC5vCi1jb25maWd1cmU6NjU3MTogJD8gPSAwCi1jb25maWd1cmU6NjU4MTogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZTo2NTg1OiBjaGVja2luZyBsb2NhbGUuaCBwcmVzZW5jZQotY29uZmlndXJlOjY1OTU6IGdjYyAtRSAgY29uZnRlc3QuYwotY29uZmlndXJlOjY2MDE6ICQ/ID0gMAotY29uZmlndXJlOjY2MjE6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6NjY1NjogY2hlY2tpbmcgZm9yIGxvY2FsZS5oCi1jb25maWd1cmU6NjY2MzogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZTo2NTQxOiBjaGVja2luZyB3Y2hhci5oIHVzYWJpbGl0eQotY29uZmlndXJlOjY1NTM6IGdjYyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25maWd1cmU6NjU1OTogJD8gPSAwCi1jb25maWd1cmU6NjU2MjogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjY1NjU6ICQ/ID0gMAotY29uZmlndXJlOjY1Njg6IHRlc3QgLXMgY29uZnRlc3QubwotY29uZmlndXJlOjY1NzE6ICQ/ID0gMAotY29uZmlndXJlOjY1ODE6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6NjU4NTogY2hlY2tpbmcgd2NoYXIuaCBwcmVzZW5jZQotY29uZmlndXJlOjY1OTU6IGdjYyAtRSAgY29uZnRlc3QuYwotY29uZmlndXJlOjY2MDE6ICQ/ID0gMAotY29uZmlndXJlOjY2MjE6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6NjY1NjogY2hlY2tpbmcgZm9yIHdjaGFyLmgKLWNvbmZpZ3VyZTo2NjYzOiByZXN1bHQ6IHllcwotY29uZmlndXJlOjY1NDE6IGNoZWNraW5nIHdjdHlwZS5oIHVzYWJpbGl0eQotY29uZmlndXJlOjY1NTM6IGdjYyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25maWd1cmU6NjU1OTogJD8gPSAwCi1jb25maWd1cmU6NjU2MjogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjY1NjU6ICQ/ID0gMAotY29uZmlndXJlOjY1Njg6IHRlc3QgLXMgY29uZnRlc3QubwotY29uZmlndXJlOjY1NzE6ICQ/ID0gMAotY29uZmlndXJlOjY1ODE6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6NjU4NTogY2hlY2tpbmcgd2N0eXBlLmggcHJlc2VuY2UKLWNvbmZpZ3VyZTo2NTk1OiBnY2MgLUUgIGNvbmZ0ZXN0LmMKLWNvbmZpZ3VyZTo2NjAxOiAkPyA9IDAKLWNvbmZpZ3VyZTo2NjIxOiByZXN1bHQ6IHllcwotY29uZmlndXJlOjY2NTY6IGNoZWNraW5nIGZvciB3Y3R5cGUuaAotY29uZmlndXJlOjY2NjM6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6NjY4ODogY2hlY2tpbmcgZm9yIHN0ZGJvb2wuaCB0aGF0IGNvbmZvcm1zIHRvIEM5OQotY29uZmlndXJlOjY3NzY6IGdjYyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25maWd1cmU6Njc4MjogJD8gPSAwCi1jb25maWd1cmU6Njc4NTogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjY3ODg6ICQ/ID0gMAotY29uZmlndXJlOjY3OTE6IHRlc3QgLXMgY29uZnRlc3QubwotY29uZmlndXJlOjY3OTQ6ICQ/ID0gMAotY29uZmlndXJlOjY4MDU6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6NjgwNzogY2hlY2tpbmcgZm9yIF9Cb29sCi1jb25maWd1cmU6NjgzMTogZ2NjIC1jIC1nIC1PMiAgY29uZnRlc3QuYyA+JjUKLWNvbmZpZ3VyZTo2ODM3OiAkPyA9IDAKLWNvbmZpZ3VyZTo2ODQwOiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6Njg0MzogJD8gPSAwCi1jb25maWd1cmU6Njg0NjogdGVzdCAtcyBjb25mdGVzdC5vCi1jb25maWd1cmU6Njg0OTogJD8gPSAwCi1jb25maWd1cmU6Njg2MDogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZTo2ODk5OiBjaGVja2luZyBmb3IgaW5saW5lCi1jb25maWd1cmU6NjkyMDogZ2NjIC1jIC1nIC1PMiAgY29uZnRlc3QuYyA+JjUKLWNvbmZpZ3VyZTo2OTI2OiAkPyA9IDAKLWNvbmZpZ3VyZTo2OTI5OiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6NjkzMjogJD8gPSAwCi1jb25maWd1cmU6NjkzNTogdGVzdCAtcyBjb25mdGVzdC5vCi1jb25maWd1cmU6NjkzODogJD8gPSAwCi1jb25maWd1cmU6Njk1MDogcmVzdWx0OiBpbmxpbmUKLWNvbmZpZ3VyZTo2OTcxOiBjaGVja2luZyBmb3IgdWludHB0cl90Ci1jb25maWd1cmU6Njk5NTogZ2NjIC1jIC1nIC1PMiAgY29uZnRlc3QuYyA+JjUKLWNvbmZpZ3VyZTo3MDAxOiAkPyA9IDAKLWNvbmZpZ3VyZTo3MDA0OiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6NzAwNzogJD8gPSAwCi1jb25maWd1cmU6NzAxMDogdGVzdCAtcyBjb25mdGVzdC5vCi1jb25maWd1cmU6NzAxMzogJD8gPSAwCi1jb25maWd1cmU6NzAyNDogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZTo3MDQ1OiBjaGVja2luZyBmb3Igc2V0bG9jYWxlCi1jb25maWd1cmU6NzEwMjogZ2NjIC1vIGNvbmZ0ZXN0IC1nIC1PMiAgIGNvbmZ0ZXN0LmMgID4mNQotY29uZmlndXJlOjcxMDg6ICQ/ID0gMAotY29uZmlndXJlOjcxMTE6IHRlc3QgLXogCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLWNvbmZpZ3VyZTo3MTE0OiAkPyA9IDAKLWNvbmZpZ3VyZTo3MTE3OiB0ZXN0IC1zIGNvbmZ0ZXN0Ci1jb25maWd1cmU6NzEyMDogJD8gPSAwCi1jb25maWd1cmU6NzEzMjogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZTo3MDQ1OiBjaGVja2luZyBmb3IgaXNhc2NpaQotY29uZmlndXJlOjcxMDI6IGdjYyAtbyBjb25mdGVzdCAtZyAtTzIgICBjb25mdGVzdC5jICA+JjUKLWNvbmZ0ZXN0LmM6NTc6IHdhcm5pbmc6IGNvbmZsaWN0aW5nIHR5cGVzIGZvciBidWlsdC1pbiBmdW5jdGlvbiAnaXNhc2NpaScKLWNvbmZpZ3VyZTo3MTA4OiAkPyA9IDAKLWNvbmZpZ3VyZTo3MTExOiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6NzExNDogJD8gPSAwCi1jb25maWd1cmU6NzExNzogdGVzdCAtcyBjb25mdGVzdAotY29uZmlndXJlOjcxMjA6ICQ/ID0gMAotY29uZmlndXJlOjcxMzI6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6NzA0NTogY2hlY2tpbmcgZm9yIGlzd3ByaW50Ci1jb25maWd1cmU6NzEwMjogZ2NjIC1vIGNvbmZ0ZXN0IC1nIC1PMiAgIGNvbmZ0ZXN0LmMgID4mNQotY29uZnRlc3QuYzo1ODogd2FybmluZzogY29uZmxpY3RpbmcgdHlwZXMgZm9yIGJ1aWx0LWluIGZ1bmN0aW9uICdpc3dwcmludCcKLWNvbmZpZ3VyZTo3MTA4OiAkPyA9IDAKLWNvbmZpZ3VyZTo3MTExOiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6NzExNDogJD8gPSAwCi1jb25maWd1cmU6NzExNzogdGVzdCAtcyBjb25mdGVzdAotY29uZmlndXJlOjcxMjA6ICQ/ID0gMAotY29uZmlndXJlOjcxMzI6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6NzA0NTogY2hlY2tpbmcgZm9yIG1ic2luaXQKLWNvbmZpZ3VyZTo3MTAyOiBnY2MgLW8gY29uZnRlc3QgLWcgLU8yICAgY29uZnRlc3QuYyAgPiY1Ci1jb25maWd1cmU6NzEwODogJD8gPSAwCi1jb25maWd1cmU6NzExMTogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjcxMTQ6ICQ/ID0gMAotY29uZmlndXJlOjcxMTc6IHRlc3QgLXMgY29uZnRlc3QKLWNvbmZpZ3VyZTo3MTIwOiAkPyA9IDAKLWNvbmZpZ3VyZTo3MTMyOiByZXN1bHQ6IHllcwotY29uZmlndXJlOjcxNTQ6IGNoZWNraW5nIGlmIG1hbGxvYyBkZWJ1Z2dpbmcgaXMgd2FudGVkCi1jb25maWd1cmU6NzE3NTogcmVzdWx0OiBubwotY29uZmlndXJlOjcxODA6IGNoZWNraW5nIGZvciBwaWRfdAotY29uZmlndXJlOjcyMDQ6IGdjYyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25maWd1cmU6NzIxMDogJD8gPSAwCi1jb25maWd1cmU6NzIxMzogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjcyMTY6ICQ/ID0gMAotY29uZmlndXJlOjcyMTk6IHRlc3QgLXMgY29uZnRlc3QubwotY29uZmlndXJlOjcyMjI6ICQ/ID0gMAotY29uZmlndXJlOjcyMzM6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6NzI0NTogY2hlY2tpbmcgZm9yIHN5cy93YWl0LmggdGhhdCBpcyBQT1NJWC4xIGNvbXBhdGlibGUKLWNvbmZpZ3VyZTo3Mjc2OiBnY2MgLWMgLWcgLU8yICBjb25mdGVzdC5jID4mNQotY29uZmlndXJlOjcyODI6ICQ/ID0gMAotY29uZmlndXJlOjcyODU6IHRlc3QgLXogCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLWNvbmZpZ3VyZTo3Mjg4OiAkPyA9IDAKLWNvbmZpZ3VyZTo3MjkxOiB0ZXN0IC1zIGNvbmZ0ZXN0Lm8KLWNvbmZpZ3VyZTo3Mjk0OiAkPyA9IDAKLWNvbmZpZ3VyZTo3MzA1OiByZXN1bHQ6IHllcwotY29uZmlndXJlOjczMjA6IGNoZWNraW5nIGZvciBkdXAyCi1jb25maWd1cmU6NzM3NzogZ2NjIC1vIGNvbmZ0ZXN0IC1nIC1PMiAgIGNvbmZ0ZXN0LmMgID4mNQotY29uZmlndXJlOjczODM6ICQ/ID0gMAotY29uZmlndXJlOjczODY6IHRlc3QgLXogCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLWNvbmZpZ3VyZTo3Mzg5OiAkPyA9IDAKLWNvbmZpZ3VyZTo3MzkyOiB0ZXN0IC1zIGNvbmZ0ZXN0Ci1jb25maWd1cmU6NzM5NTogJD8gPSAwCi1jb25maWd1cmU6NzQwNzogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZTo3MzIwOiBjaGVja2luZyBmb3Igd2FpdHBpZAotY29uZmlndXJlOjczNzc6IGdjYyAtbyBjb25mdGVzdCAtZyAtTzIgICBjb25mdGVzdC5jICA+JjUKLWNvbmZpZ3VyZTo3MzgzOiAkPyA9IDAKLWNvbmZpZ3VyZTo3Mzg2OiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6NzM4OTogJD8gPSAwCi1jb25maWd1cmU6NzM5MjogdGVzdCAtcyBjb25mdGVzdAotY29uZmlndXJlOjczOTU6ICQ/ID0gMAotY29uZmlndXJlOjc0MDc6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6NzQyMzogY2hlY2tpbmcgZm9yIHVuaXN0ZC5oCi1jb25maWd1cmU6NzQyODogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZTo3NDMyOiBjaGVja2luZyB2Zm9yay5oIHVzYWJpbGl0eQotY29uZmlndXJlOjc0NDQ6IGdjYyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25mdGVzdC5jOjc0OjE5OiBlcnJvcjogdmZvcmsuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQotY29uZmlndXJlOjc0NTA6ICQ/ID0gMQotY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6Ci18IC8qIGNvbmZkZWZzLmguICAqLwotfCAKLXwgI2RlZmluZSBQQUNLQUdFX05BTUUgIkdOVSBCaXNvbiIKLXwgI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgImJpc29uIgotfCAjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiMi4zIgotfCAjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICJHTlUgQmlzb24gMi4zIgotfCAjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICJidWctYmlzb25AZ251Lm9yZyIKLXwgI2RlZmluZSBQQUNLQUdFICJiaXNvbiIKLXwgI2RlZmluZSBWRVJTSU9OICIyLjMiCi18ICNkZWZpbmUgX0dOVV9TT1VSQ0UgMQotfCAjZGVmaW5lIFNURENfSEVBREVSUyAxCi18ICNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxCi18ICNkZWZpbmUgSEFWRV9TWVNfU1RBVF9IIDEKLXwgI2RlZmluZSBIQVZFX1NURExJQl9IIDEKLXwgI2RlZmluZSBIQVZFX1NUUklOR19IIDEKLXwgI2RlZmluZSBIQVZFX01FTU9SWV9IIDEKLXwgI2RlZmluZSBIQVZFX1NUUklOR1NfSCAxCi18ICNkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDEKLXwgI2RlZmluZSBIQVZFX1NURElOVF9IIDEKLXwgI2RlZmluZSBIQVZFX1VOSVNURF9IIDEKLXwgI2RlZmluZSBfX0VYVEVOU0lPTlNfXyAxCi18ICNkZWZpbmUgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTIDEKLXwgI2RlZmluZSBZWVRFWFRfUE9JTlRFUiAxCi18ICNkZWZpbmUgTTQgIi91c3IvYmluL200IgotfCAjZGVmaW5lIEhBVkVfTE9DQUxFX0ggMQotfCAjZGVmaW5lIEhBVkVfV0NIQVJfSCAxCi18ICNkZWZpbmUgSEFWRV9XQ1RZUEVfSCAxCi18ICNkZWZpbmUgSEFWRV9fQk9PTCAxCi18ICNkZWZpbmUgSEFWRV9TVERCT09MX0ggMQotfCAjZGVmaW5lIEhBVkVfVUlOVFBUUl9UIDEKLXwgI2RlZmluZSBIQVZFX1NFVExPQ0FMRSAxCi18ICNkZWZpbmUgSEFWRV9JU0FTQ0lJIDEKLXwgI2RlZmluZSBIQVZFX0lTV1BSSU5UIDEKLXwgI2RlZmluZSBIQVZFX01CU0lOSVQgMQotfCAjZGVmaW5lIEhBVkVfU1lTX1dBSVRfSCAxCi18ICNkZWZpbmUgSEFWRV9EVVAyIDEKLXwgI2RlZmluZSBIQVZFX1dBSVRQSUQgMQotfCAjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQotfCAvKiBlbmQgY29uZmRlZnMuaC4gICovCi18ICNpbmNsdWRlIDxzdGRpby5oPgotfCAjaWYgSEFWRV9TWVNfVFlQRVNfSAotfCAjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgotfCAjZW5kaWYKLXwgI2lmIEhBVkVfU1lTX1NUQVRfSAotfCAjIGluY2x1ZGUgPHN5cy9zdGF0Lmg+Ci18ICNlbmRpZgotfCAjaWYgU1REQ19IRUFERVJTCi18ICMgaW5jbHVkZSA8c3RkbGliLmg+Ci18ICMgaW5jbHVkZSA8c3RkZGVmLmg+Ci18ICNlbHNlCi18ICMgaWYgSEFWRV9TVERMSUJfSAotfCAjICBpbmNsdWRlIDxzdGRsaWIuaD4KLXwgIyBlbmRpZgotfCAjZW5kaWYKLXwgI2lmIEhBVkVfU1RSSU5HX0gKLXwgIyBpZiAhU1REQ19IRUFERVJTICYmIEhBVkVfTUVNT1JZX0gKLXwgIyAgaW5jbHVkZSA8bWVtb3J5Lmg+Ci18ICMgZW5kaWYKLXwgIyBpbmNsdWRlIDxzdHJpbmcuaD4KLXwgI2VuZGlmCi18ICNpZiBIQVZFX1NUUklOR1NfSAotfCAjIGluY2x1ZGUgPHN0cmluZ3MuaD4KLXwgI2VuZGlmCi18ICNpZiBIQVZFX0lOVFRZUEVTX0gKLXwgIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgotfCAjZWxzZQotfCAjIGlmIEhBVkVfU1RESU5UX0gKLXwgIyAgaW5jbHVkZSA8c3RkaW50Lmg+Ci18ICMgZW5kaWYKLXwgI2VuZGlmCi18ICNpZiBIQVZFX1VOSVNURF9ICi18ICMgaW5jbHVkZSA8dW5pc3RkLmg+Ci18ICNlbmRpZgotfCAjaW5jbHVkZSA8dmZvcmsuaD4KLWNvbmZpZ3VyZTo3NDcyOiByZXN1bHQ6IG5vCi1jb25maWd1cmU6NzQ3NjogY2hlY2tpbmcgdmZvcmsuaCBwcmVzZW5jZQotY29uZmlndXJlOjc0ODY6IGdjYyAtRSAgY29uZnRlc3QuYwotY29uZnRlc3QuYzo0MDoxOTogZXJyb3I6IHZmb3JrLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKLWNvbmZpZ3VyZTo3NDkyOiAkPyA9IDEKLWNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOgotfCAvKiBjb25mZGVmcy5oLiAgKi8KLXwgCi18ICNkZWZpbmUgUEFDS0FHRV9OQU1FICJHTlUgQmlzb24iCi18ICNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICJiaXNvbiIKLXwgI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIjIuMyIKLXwgI2RlZmluZSBQQUNLQUdFX1NUUklORyAiR05VIEJpc29uIDIuMyIKLXwgI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiYnVnLWJpc29uQGdudS5vcmciCi18ICNkZWZpbmUgUEFDS0FHRSAiYmlzb24iCi18ICNkZWZpbmUgVkVSU0lPTiAiMi4zIgotfCAjZGVmaW5lIF9HTlVfU09VUkNFIDEKLXwgI2RlZmluZSBTVERDX0hFQURFUlMgMQotfCAjZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMQotfCAjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCi18ICNkZWZpbmUgSEFWRV9TVERMSUJfSCAxCi18ICNkZWZpbmUgSEFWRV9TVFJJTkdfSCAxCi18ICNkZWZpbmUgSEFWRV9NRU1PUllfSCAxCi18ICNkZWZpbmUgSEFWRV9TVFJJTkdTX0ggMQotfCAjZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAxCi18ICNkZWZpbmUgSEFWRV9TVERJTlRfSCAxCi18ICNkZWZpbmUgSEFWRV9VTklTVERfSCAxCi18ICNkZWZpbmUgX19FWFRFTlNJT05TX18gMQotfCAjZGVmaW5lIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUyAxCi18ICNkZWZpbmUgWVlURVhUX1BPSU5URVIgMQotfCAjZGVmaW5lIE00ICIvdXNyL2Jpbi9tNCIKLXwgI2RlZmluZSBIQVZFX0xPQ0FMRV9IIDEKLXwgI2RlZmluZSBIQVZFX1dDSEFSX0ggMQotfCAjZGVmaW5lIEhBVkVfV0NUWVBFX0ggMQotfCAjZGVmaW5lIEhBVkVfX0JPT0wgMQotfCAjZGVmaW5lIEhBVkVfU1REQk9PTF9IIDEKLXwgI2RlZmluZSBIQVZFX1VJTlRQVFJfVCAxCi18ICNkZWZpbmUgSEFWRV9TRVRMT0NBTEUgMQotfCAjZGVmaW5lIEhBVkVfSVNBU0NJSSAxCi18ICNkZWZpbmUgSEFWRV9JU1dQUklOVCAxCi18ICNkZWZpbmUgSEFWRV9NQlNJTklUIDEKLXwgI2RlZmluZSBIQVZFX1NZU19XQUlUX0ggMQotfCAjZGVmaW5lIEhBVkVfRFVQMiAxCi18ICNkZWZpbmUgSEFWRV9XQUlUUElEIDEKLXwgI2RlZmluZSBIQVZFX1VOSVNURF9IIDEKLXwgLyogZW5kIGNvbmZkZWZzLmguICAqLwotfCAjaW5jbHVkZSA8dmZvcmsuaD4KLWNvbmZpZ3VyZTo3NTEyOiByZXN1bHQ6IG5vCi1jb25maWd1cmU6NzU0NzogY2hlY2tpbmcgZm9yIHZmb3JrLmgKLWNvbmZpZ3VyZTo3NTU0OiByZXN1bHQ6IG5vCi1jb25maWd1cmU6NzU3MjogY2hlY2tpbmcgZm9yIGZvcmsKLWNvbmZpZ3VyZTo3NjI5OiBnY2MgLW8gY29uZnRlc3QgLWcgLU8yICAgY29uZnRlc3QuYyAgPiY1Ci1jb25mdGVzdC5jOjY0OiB3YXJuaW5nOiBjb25mbGljdGluZyB0eXBlcyBmb3IgYnVpbHQtaW4gZnVuY3Rpb24gJ2ZvcmsnCi1jb25maWd1cmU6NzYzNTogJD8gPSAwCi1jb25maWd1cmU6NzYzODogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjc2NDE6ICQ/ID0gMAotY29uZmlndXJlOjc2NDQ6IHRlc3QgLXMgY29uZnRlc3QKLWNvbmZpZ3VyZTo3NjQ3OiAkPyA9IDAKLWNvbmZpZ3VyZTo3NjU5OiByZXN1bHQ6IHllcwotY29uZmlndXJlOjc1NzI6IGNoZWNraW5nIGZvciB2Zm9yawotY29uZmlndXJlOjc2Mjk6IGdjYyAtbyBjb25mdGVzdCAtZyAtTzIgICBjb25mdGVzdC5jICA+JjUKLWNvbmZpZ3VyZTo3NjM1OiAkPyA9IDAKLWNvbmZpZ3VyZTo3NjM4OiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6NzY0MTogJD8gPSAwCi1jb25maWd1cmU6NzY0NDogdGVzdCAtcyBjb25mdGVzdAotY29uZmlndXJlOjc2NDc6ICQ/ID0gMAotY29uZmlndXJlOjc2NTk6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6NzY3MDogY2hlY2tpbmcgZm9yIHdvcmtpbmcgZm9yawotY29uZmlndXJlOjc2OTM6IGdjYyAtbyBjb25mdGVzdCAtZyAtTzIgICBjb25mdGVzdC5jICA+JjUKLWNvbmZ0ZXN0LmM6IEluIGZ1bmN0aW9uICdtYWluJzoKLWNvbmZ0ZXN0LmM6MTA6IHdhcm5pbmc6IGluY29tcGF0aWJsZSBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBidWlsdC1pbiBmdW5jdGlvbiAnZXhpdCcKLWNvbmZpZ3VyZTo3Njk2OiAkPyA9IDAKLWNvbmZpZ3VyZTo3Njk4OiAuL2NvbmZ0ZXN0Ci1jb25maWd1cmU6NzcwMTogJD8gPSAwCi1jb25maWd1cmU6NzcxNTogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZTo3NzM2OiBjaGVja2luZyBmb3Igd29ya2luZyB2Zm9yawotY29uZmlndXJlOjc4Njk6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6NzkxNjogY2hlY2tpbmcgc3lzL3RpbWUuaCB1c2FiaWxpdHkKLWNvbmZpZ3VyZTo3OTI4OiBnY2MgLWMgLWcgLU8yICBjb25mdGVzdC5jID4mNQotY29uZmlndXJlOjc5MzQ6ICQ/ID0gMAotY29uZmlndXJlOjc5Mzc6IHRlc3QgLXogCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLWNvbmZpZ3VyZTo3OTQwOiAkPyA9IDAKLWNvbmZpZ3VyZTo3OTQzOiB0ZXN0IC1zIGNvbmZ0ZXN0Lm8KLWNvbmZpZ3VyZTo3OTQ2OiAkPyA9IDAKLWNvbmZpZ3VyZTo3OTU2OiByZXN1bHQ6IHllcwotY29uZmlndXJlOjc5NjA6IGNoZWNraW5nIHN5cy90aW1lLmggcHJlc2VuY2UKLWNvbmZpZ3VyZTo3OTcwOiBnY2MgLUUgIGNvbmZ0ZXN0LmMKLWNvbmZpZ3VyZTo3OTc2OiAkPyA9IDAKLWNvbmZpZ3VyZTo3OTk2OiByZXN1bHQ6IHllcwotY29uZmlndXJlOjgwMzE6IGNoZWNraW5nIGZvciBzeXMvdGltZS5oCi1jb25maWd1cmU6ODAzODogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZTo3OTE2OiBjaGVja2luZyBzeXMvdGltZXMuaCB1c2FiaWxpdHkKLWNvbmZpZ3VyZTo3OTI4OiBnY2MgLWMgLWcgLU8yICBjb25mdGVzdC5jID4mNQotY29uZmlndXJlOjc5MzQ6ICQ/ID0gMAotY29uZmlndXJlOjc5Mzc6IHRlc3QgLXogCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLWNvbmZpZ3VyZTo3OTQwOiAkPyA9IDAKLWNvbmZpZ3VyZTo3OTQzOiB0ZXN0IC1zIGNvbmZ0ZXN0Lm8KLWNvbmZpZ3VyZTo3OTQ2OiAkPyA9IDAKLWNvbmZpZ3VyZTo3OTU2OiByZXN1bHQ6IHllcwotY29uZmlndXJlOjc5NjA6IGNoZWNraW5nIHN5cy90aW1lcy5oIHByZXNlbmNlCi1jb25maWd1cmU6Nzk3MDogZ2NjIC1FICBjb25mdGVzdC5jCi1jb25maWd1cmU6Nzk3NjogJD8gPSAwCi1jb25maWd1cmU6Nzk5NjogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZTo4MDMxOiBjaGVja2luZyBmb3Igc3lzL3RpbWVzLmgKLWNvbmZpZ3VyZTo4MDM4OiByZXN1bHQ6IHllcwotY29uZmlndXJlOjgwNTU6IGNoZWNraW5nIGZvciBzeXMvcmVzb3VyY2UuaAotY29uZmlndXJlOjgwNzg6IGdjYyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25maWd1cmU6ODA4NDogJD8gPSAwCi1jb25maWd1cmU6ODA4NzogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjgwOTA6ICQ/ID0gMAotY29uZmlndXJlOjgwOTM6IHRlc3QgLXMgY29uZnRlc3QubwotY29uZmlndXJlOjgwOTY6ICQ/ID0gMAotY29uZmlndXJlOjgxMDc6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6ODEyMjogY2hlY2tpbmcgZm9yIHRpbWVzCi1jb25maWd1cmU6ODE3OTogZ2NjIC1vIGNvbmZ0ZXN0IC1nIC1PMiAgIGNvbmZ0ZXN0LmMgID4mNQotY29uZmlndXJlOjgxODU6ICQ/ID0gMAotY29uZmlndXJlOjgxODg6IHRlc3QgLXogCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLWNvbmZpZ3VyZTo4MTkxOiAkPyA9IDAKLWNvbmZpZ3VyZTo4MTk0OiB0ZXN0IC1zIGNvbmZ0ZXN0Ci1jb25maWd1cmU6ODE5NzogJD8gPSAwCi1jb25maWd1cmU6ODIwOTogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZTo4MjIwOiBjaGVja2luZyB3aGV0aGVyIGdldHJ1c2FnZSBpcyBkZWNsYXJlZAotY29uZmlndXJlOjgyNTU6IGdjYyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25maWd1cmU6ODI2MTogJD8gPSAwCi1jb25maWd1cmU6ODI2NDogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjgyNjc6ICQ/ID0gMAotY29uZmlndXJlOjgyNzA6IHRlc3QgLXMgY29uZnRlc3QubwotY29uZmlndXJlOjgyNzM6ICQ/ID0gMAotY29uZmlndXJlOjgyODQ6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6ODMwMDogY2hlY2tpbmcgd2hldGhlciB0aW1lcyBpcyBkZWNsYXJlZAotY29uZmlndXJlOjgzMzU6IGdjYyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25maWd1cmU6ODM0MTogJD8gPSAwCi1jb25maWd1cmU6ODM0NDogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjgzNDc6ICQ/ID0gMAotY29uZmlndXJlOjgzNTA6IHRlc3QgLXMgY29uZnRlc3QubwotY29uZmlndXJlOjgzNTM6ICQ/ID0gMAotY29uZmlndXJlOjgzNjQ6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6ODM4MDogY2hlY2tpbmcgd2hldGhlciBjbG9jayBpcyBkZWNsYXJlZAotY29uZmlndXJlOjg0MTU6IGdjYyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25mdGVzdC5jOiBJbiBmdW5jdGlvbiAnbWFpbic6Ci1jb25mdGVzdC5jOjk5OiBlcnJvcjogJ2Nsb2NrJyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikKLWNvbmZ0ZXN0LmM6OTk6IGVycm9yOiAoRWFjaCB1bmRlY2xhcmVkIGlkZW50aWZpZXIgaXMgcmVwb3J0ZWQgb25seSBvbmNlCi1jb25mdGVzdC5jOjk5OiBlcnJvcjogZm9yIGVhY2ggZnVuY3Rpb24gaXQgYXBwZWFycyBpbi4pCi1jb25maWd1cmU6ODQyMTogJD8gPSAxCi1jb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoKLXwgLyogY29uZmRlZnMuaC4gICovCi18IAotfCAjZGVmaW5lIFBBQ0tBR0VfTkFNRSAiR05VIEJpc29uIgotfCAjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiYmlzb24iCi18ICNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIyLjMiCi18ICNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgIkdOVSBCaXNvbiAyLjMiCi18ICNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgImJ1Zy1iaXNvbkBnbnUub3JnIgotfCAjZGVmaW5lIFBBQ0tBR0UgImJpc29uIgotfCAjZGVmaW5lIFZFUlNJT04gIjIuMyIKLXwgI2RlZmluZSBfR05VX1NPVVJDRSAxCi18ICNkZWZpbmUgU1REQ19IRUFERVJTIDEKLXwgI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEKLXwgI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMQotfCAjZGVmaW5lIEhBVkVfU1RETElCX0ggMQotfCAjZGVmaW5lIEhBVkVfU1RSSU5HX0ggMQotfCAjZGVmaW5lIEhBVkVfTUVNT1JZX0ggMQotfCAjZGVmaW5lIEhBVkVfU1RSSU5HU19IIDEKLXwgI2RlZmluZSBIQVZFX0lOVFRZUEVTX0ggMQotfCAjZGVmaW5lIEhBVkVfU1RESU5UX0ggMQotfCAjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQotfCAjZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKLXwgI2RlZmluZSBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MgMQotfCAjZGVmaW5lIFlZVEVYVF9QT0lOVEVSIDEKLXwgI2RlZmluZSBNNCAiL3Vzci9iaW4vbTQiCi18ICNkZWZpbmUgSEFWRV9MT0NBTEVfSCAxCi18ICNkZWZpbmUgSEFWRV9XQ0hBUl9IIDEKLXwgI2RlZmluZSBIQVZFX1dDVFlQRV9IIDEKLXwgI2RlZmluZSBIQVZFX19CT09MIDEKLXwgI2RlZmluZSBIQVZFX1NUREJPT0xfSCAxCi18ICNkZWZpbmUgSEFWRV9VSU5UUFRSX1QgMQotfCAjZGVmaW5lIEhBVkVfU0VUTE9DQUxFIDEKLXwgI2RlZmluZSBIQVZFX0lTQVNDSUkgMQotfCAjZGVmaW5lIEhBVkVfSVNXUFJJTlQgMQotfCAjZGVmaW5lIEhBVkVfTUJTSU5JVCAxCi18ICNkZWZpbmUgSEFWRV9TWVNfV0FJVF9IIDEKLXwgI2RlZmluZSBIQVZFX0RVUDIgMQotfCAjZGVmaW5lIEhBVkVfV0FJVFBJRCAxCi18ICNkZWZpbmUgSEFWRV9VTklTVERfSCAxCi18ICNkZWZpbmUgSEFWRV9GT1JLIDEKLXwgI2RlZmluZSBIQVZFX1ZGT1JLIDEKLXwgI2RlZmluZSBIQVZFX1dPUktJTkdfVkZPUksgMQotfCAjZGVmaW5lIEhBVkVfV09SS0lOR19GT1JLIDEKLXwgI2RlZmluZSBIQVZFX1NZU19USU1FX0ggMQotfCAjZGVmaW5lIEhBVkVfU1lTX1RJTUVTX0ggMQotfCAjZGVmaW5lIEhBVkVfU1lTX1JFU09VUkNFX0ggMQotfCAjZGVmaW5lIEhBVkVfVElNRVMgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9HRVRSVVNBR0UgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9USU1FUyAxCi18IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLXwgI2luY2x1ZGUgPHN0ZGlvLmg+Ci18ICNpZiBIQVZFX1NZU19UWVBFU19ICi18ICMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci18ICNlbmRpZgotfCAjaWYgSEFWRV9TWVNfU1RBVF9ICi18ICMgaW5jbHVkZSA8c3lzL3N0YXQuaD4KLXwgI2VuZGlmCi18ICNpZiBTVERDX0hFQURFUlMKLXwgIyBpbmNsdWRlIDxzdGRsaWIuaD4KLXwgIyBpbmNsdWRlIDxzdGRkZWYuaD4KLXwgI2Vsc2UKLXwgIyBpZiBIQVZFX1NURExJQl9ICi18ICMgIGluY2x1ZGUgPHN0ZGxpYi5oPgotfCAjIGVuZGlmCi18ICNlbmRpZgotfCAjaWYgSEFWRV9TVFJJTkdfSAotfCAjIGlmICFTVERDX0hFQURFUlMgJiYgSEFWRV9NRU1PUllfSAotfCAjICBpbmNsdWRlIDxtZW1vcnkuaD4KLXwgIyBlbmRpZgotfCAjIGluY2x1ZGUgPHN0cmluZy5oPgotfCAjZW5kaWYKLXwgI2lmIEhBVkVfU1RSSU5HU19ICi18ICMgaW5jbHVkZSA8c3RyaW5ncy5oPgotfCAjZW5kaWYKLXwgI2lmIEhBVkVfSU5UVFlQRVNfSAotfCAjIGluY2x1ZGUgPGludHR5cGVzLmg+Ci18ICNlbHNlCi18ICMgaWYgSEFWRV9TVERJTlRfSAotfCAjICBpbmNsdWRlIDxzdGRpbnQuaD4KLXwgIyBlbmRpZgotfCAjZW5kaWYKLXwgI2lmIEhBVkVfVU5JU1REX0gKLXwgIyBpbmNsdWRlIDx1bmlzdGQuaD4KLXwgI2VuZGlmCi18ICNpZiBIQVZFX1NZU19USU1FX0gKLXwgIyBpbmNsdWRlIDxzeXMvdGltZS5oPgotfCAjZW5kaWYKLXwgI2lmIEhBVkVfU1lTX1RJTUVTX0gKLXwgIyBpbmNsdWRlIDxzeXMvdGltZXMuaD4KLXwgI2VuZGlmCi18ICNpZiBIQVZFX1NZU19SRVNPVVJDRV9ICi18ICMgaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+Ci18ICNlbmRpZgotfCAKLXwgCi18IGludAotfCBtYWluICgpCi18IHsKLXwgI2lmbmRlZiBjbG9jawotfCAgIGNoYXIgKnAgPSAoY2hhciAqKSBjbG9jazsKLXwgI2VuZGlmCi18IAotfCAgIDsKLXwgICByZXR1cm4gMDsKLXwgfQotY29uZmlndXJlOjg0NDQ6IHJlc3VsdDogbm8KLWNvbmZpZ3VyZTo4NDYwOiBjaGVja2luZyB3aGV0aGVyIHN5c2NvbmYgaXMgZGVjbGFyZWQKLWNvbmZpZ3VyZTo4NDk1OiBnY2MgLWMgLWcgLU8yICBjb25mdGVzdC5jID4mNQotY29uZmlndXJlOjg1MDE6ICQ/ID0gMAotY29uZmlndXJlOjg1MDQ6IHRlc3QgLXogCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLWNvbmZpZ3VyZTo4NTA3OiAkPyA9IDAKLWNvbmZpZ3VyZTo4NTEwOiB0ZXN0IC1zIGNvbmZ0ZXN0Lm8KLWNvbmZpZ3VyZTo4NTEzOiAkPyA9IDAKLWNvbmZpZ3VyZTo4NTI0OiByZXN1bHQ6IHllcwotY29uZmlndXJlOjg1NDM6IGNoZWNraW5nIGZvciBjbG9ja190Ci1jb25maWd1cmU6ODU3ODogZ2NjIC1jIC1nIC1PMiAgY29uZnRlc3QuYyA+JjUKLWNvbmZpZ3VyZTo4NTg0OiAkPyA9IDAKLWNvbmZpZ3VyZTo4NTg3OiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6ODU5MDogJD8gPSAwCi1jb25maWd1cmU6ODU5MzogdGVzdCAtcyBjb25mdGVzdC5vCi1jb25maWd1cmU6ODU5NjogJD8gPSAwCi1jb25maWd1cmU6ODYwNzogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZTo4NjE3OiBjaGVja2luZyBmb3Igc3RydWN0IHRtcwotY29uZmlndXJlOjg2NTI6IGdjYyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25maWd1cmU6ODY1ODogJD8gPSAwCi1jb25maWd1cmU6ODY2MTogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjg2NjQ6ICQ/ID0gMAotY29uZmlndXJlOjg2Njc6IHRlc3QgLXMgY29uZnRlc3QubwotY29uZmlndXJlOjg2NzA6ICQ/ID0gMAotY29uZmlndXJlOjg2ODE6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6ODY5NjogY2hlY2tpbmcgd2hldGhlciBzeXN0ZW0gaXMgV2luZG93cyBvciBNU0RPUwotY29uZmlndXJlOjg3MjA6IGdjYyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25mdGVzdC5jOiBJbiBmdW5jdGlvbiAnbWFpbic6Ci1jb25mdGVzdC5jOjU5OiBlcnJvcjogJ25laXRoZXInIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQotY29uZnRlc3QuYzo1OTogZXJyb3I6IChFYWNoIHVuZGVjbGFyZWQgaWRlbnRpZmllciBpcyByZXBvcnRlZCBvbmx5IG9uY2UKLWNvbmZ0ZXN0LmM6NTk6IGVycm9yOiBmb3IgZWFjaCBmdW5jdGlvbiBpdCBhcHBlYXJzIGluLikKLWNvbmZ0ZXN0LmM6NTk6IGVycm9yOiBzeW50YXggZXJyb3IgYmVmb3JlICdNU0RPUycKLWNvbmZpZ3VyZTo4NzI2OiAkPyA9IDEKLWNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOgotfCAvKiBjb25mZGVmcy5oLiAgKi8KLXwgCi18ICNkZWZpbmUgUEFDS0FHRV9OQU1FICJHTlUgQmlzb24iCi18ICNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICJiaXNvbiIKLXwgI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIjIuMyIKLXwgI2RlZmluZSBQQUNLQUdFX1NUUklORyAiR05VIEJpc29uIDIuMyIKLXwgI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiYnVnLWJpc29uQGdudS5vcmciCi18ICNkZWZpbmUgUEFDS0FHRSAiYmlzb24iCi18ICNkZWZpbmUgVkVSU0lPTiAiMi4zIgotfCAjZGVmaW5lIF9HTlVfU09VUkNFIDEKLXwgI2RlZmluZSBTVERDX0hFQURFUlMgMQotfCAjZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMQotfCAjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCi18ICNkZWZpbmUgSEFWRV9TVERMSUJfSCAxCi18ICNkZWZpbmUgSEFWRV9TVFJJTkdfSCAxCi18ICNkZWZpbmUgSEFWRV9NRU1PUllfSCAxCi18ICNkZWZpbmUgSEFWRV9TVFJJTkdTX0ggMQotfCAjZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAxCi18ICNkZWZpbmUgSEFWRV9TVERJTlRfSCAxCi18ICNkZWZpbmUgSEFWRV9VTklTVERfSCAxCi18ICNkZWZpbmUgX19FWFRFTlNJT05TX18gMQotfCAjZGVmaW5lIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUyAxCi18ICNkZWZpbmUgWVlURVhUX1BPSU5URVIgMQotfCAjZGVmaW5lIE00ICIvdXNyL2Jpbi9tNCIKLXwgI2RlZmluZSBIQVZFX0xPQ0FMRV9IIDEKLXwgI2RlZmluZSBIQVZFX1dDSEFSX0ggMQotfCAjZGVmaW5lIEhBVkVfV0NUWVBFX0ggMQotfCAjZGVmaW5lIEhBVkVfX0JPT0wgMQotfCAjZGVmaW5lIEhBVkVfU1REQk9PTF9IIDEKLXwgI2RlZmluZSBIQVZFX1VJTlRQVFJfVCAxCi18ICNkZWZpbmUgSEFWRV9TRVRMT0NBTEUgMQotfCAjZGVmaW5lIEhBVkVfSVNBU0NJSSAxCi18ICNkZWZpbmUgSEFWRV9JU1dQUklOVCAxCi18ICNkZWZpbmUgSEFWRV9NQlNJTklUIDEKLXwgI2RlZmluZSBIQVZFX1NZU19XQUlUX0ggMQotfCAjZGVmaW5lIEhBVkVfRFVQMiAxCi18ICNkZWZpbmUgSEFWRV9XQUlUUElEIDEKLXwgI2RlZmluZSBIQVZFX1VOSVNURF9IIDEKLXwgI2RlZmluZSBIQVZFX0ZPUksgMQotfCAjZGVmaW5lIEhBVkVfVkZPUksgMQotfCAjZGVmaW5lIEhBVkVfV09SS0lOR19WRk9SSyAxCi18ICNkZWZpbmUgSEFWRV9XT1JLSU5HX0ZPUksgMQotfCAjZGVmaW5lIEhBVkVfU1lTX1RJTUVfSCAxCi18ICNkZWZpbmUgSEFWRV9TWVNfVElNRVNfSCAxCi18ICNkZWZpbmUgSEFWRV9TWVNfUkVTT1VSQ0VfSCAxCi18ICNkZWZpbmUgSEFWRV9USU1FUyAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX0dFVFJVU0FHRSAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX1RJTUVTIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfQ0xPQ0sgMAotfCAjZGVmaW5lIEhBVkVfREVDTF9TWVNDT05GIDEKLXwgI2RlZmluZSBIQVZFX0NMT0NLX1QgMQotfCAjZGVmaW5lIEhBVkVfU1RSVUNUX1RNUyAxCi18IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLXwgCi18IGludAotfCBtYWluICgpCi18IHsKLXwgI2lmICFkZWZpbmVkIF9XSU4zMiAmJiAhZGVmaW5lZCBfX1dJTjMyX18gJiYgIWRlZmluZWQgX19NU0RPU19fICYmICFkZWZpbmVkIF9fQ1lHV0lOX18KLXwgbmVpdGhlciBNU0RPUyBub3IgV2luZG93cwotfCAjZW5kaWYKLXwgICA7Ci18ICAgcmV0dXJuIDA7Ci18IH0KLWNvbmZpZ3VyZTo4NzUwOiByZXN1bHQ6IG5vCi1jb25maWd1cmU6ODc3OTogY2hlY2tpbmcgd2hldGhlciBzdHJlcnJvcl9yIGlzIGRlY2xhcmVkCi1jb25maWd1cmU6ODgwMzogZ2NjIC1jIC1nIC1PMiAgY29uZnRlc3QuYyA+JjUKLWNvbmZpZ3VyZTo4ODA5OiAkPyA9IDAKLWNvbmZpZ3VyZTo4ODEyOiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6ODgxNTogJD8gPSAwCi1jb25maWd1cmU6ODgxODogdGVzdCAtcyBjb25mdGVzdC5vCi1jb25maWd1cmU6ODgyMTogJD8gPSAwCi1jb25maWd1cmU6ODgzMjogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZTo4ODU0OiBjaGVja2luZyBmb3Igc3RyZXJyb3JfcgotY29uZmlndXJlOjg5MTE6IGdjYyAtbyBjb25mdGVzdCAtZyAtTzIgICBjb25mdGVzdC5jICA+JjUKLWNvbmZpZ3VyZTo4OTE3OiAkPyA9IDAKLWNvbmZpZ3VyZTo4OTIwOiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6ODkyMzogJD8gPSAwCi1jb25maWd1cmU6ODkyNjogdGVzdCAtcyBjb25mdGVzdAotY29uZmlndXJlOjg5Mjk6ICQ/ID0gMAotY29uZmlndXJlOjg5NDE6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6ODk1MTogY2hlY2tpbmcgd2hldGhlciBzdHJlcnJvcl9yIHJldHVybnMgY2hhciAqCi1jb25maWd1cmU6ODk3OTogZ2NjIC1jIC1nIC1PMiAgY29uZnRlc3QuYyA+JjUKLWNvbmZpZ3VyZTo4OTg1OiAkPyA9IDAKLWNvbmZpZ3VyZTo4OTg4OiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6ODk5MTogJD8gPSAwCi1jb25maWd1cmU6ODk5NDogdGVzdCAtcyBjb25mdGVzdC5vCi1jb25maWd1cmU6ODk5NzogJD8gPSAwCi1jb25maWd1cmU6OTA1NzogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZTo5MDgzOiBjaGVja2luZyBnZXRvcHQuaCB1c2FiaWxpdHkKLWNvbmZpZ3VyZTo5MDk1OiBnY2MgLWMgLWcgLU8yICBjb25mdGVzdC5jID4mNQotY29uZmlndXJlOjkxMDE6ICQ/ID0gMAotY29uZmlndXJlOjkxMDQ6IHRlc3QgLXogCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLWNvbmZpZ3VyZTo5MTA3OiAkPyA9IDAKLWNvbmZpZ3VyZTo5MTEwOiB0ZXN0IC1zIGNvbmZ0ZXN0Lm8KLWNvbmZpZ3VyZTo5MTEzOiAkPyA9IDAKLWNvbmZpZ3VyZTo5MTIzOiByZXN1bHQ6IHllcwotY29uZmlndXJlOjkxMjc6IGNoZWNraW5nIGdldG9wdC5oIHByZXNlbmNlCi1jb25maWd1cmU6OTEzNzogZ2NjIC1FICBjb25mdGVzdC5jCi1jb25maWd1cmU6OTE0MzogJD8gPSAwCi1jb25maWd1cmU6OTE2MzogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZTo5MTk4OiBjaGVja2luZyBmb3IgZ2V0b3B0LmgKLWNvbmZpZ3VyZTo5MjA1OiByZXN1bHQ6IHllcwotY29uZmlndXJlOjkyMjc6IGNoZWNraW5nIGZvciBnZXRvcHRfbG9uZ19vbmx5Ci1jb25maWd1cmU6OTI4NDogZ2NjIC1vIGNvbmZ0ZXN0IC1nIC1PMiAgIGNvbmZ0ZXN0LmMgID4mNQotY29uZmlndXJlOjkyOTA6ICQ/ID0gMAotY29uZmlndXJlOjkyOTM6IHRlc3QgLXogCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLWNvbmZpZ3VyZTo5Mjk2OiAkPyA9IDAKLWNvbmZpZ3VyZTo5Mjk5OiB0ZXN0IC1zIGNvbmZ0ZXN0Ci1jb25maWd1cmU6OTMwMjogJD8gPSAwCi1jb25maWd1cmU6OTMxNDogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZTo5MzI5OiBjaGVja2luZyB3aGV0aGVyIG9wdHJlc2V0IGlzIGRlY2xhcmVkCi1jb25maWd1cmU6OTM1NDogZ2NjIC1jIC1nIC1PMiAgY29uZnRlc3QuYyA+JjUKLWNvbmZ0ZXN0LmM6IEluIGZ1bmN0aW9uICdtYWluJzoKLWNvbmZ0ZXN0LmM6Njc6IGVycm9yOiAnb3B0cmVzZXQnIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQotY29uZnRlc3QuYzo2NzogZXJyb3I6IChFYWNoIHVuZGVjbGFyZWQgaWRlbnRpZmllciBpcyByZXBvcnRlZCBvbmx5IG9uY2UKLWNvbmZ0ZXN0LmM6Njc6IGVycm9yOiBmb3IgZWFjaCBmdW5jdGlvbiBpdCBhcHBlYXJzIGluLikKLWNvbmZpZ3VyZTo5MzYwOiAkPyA9IDEKLWNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOgotfCAvKiBjb25mZGVmcy5oLiAgKi8KLXwgCi18ICNkZWZpbmUgUEFDS0FHRV9OQU1FICJHTlUgQmlzb24iCi18ICNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICJiaXNvbiIKLXwgI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIjIuMyIKLXwgI2RlZmluZSBQQUNLQUdFX1NUUklORyAiR05VIEJpc29uIDIuMyIKLXwgI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiYnVnLWJpc29uQGdudS5vcmciCi18ICNkZWZpbmUgUEFDS0FHRSAiYmlzb24iCi18ICNkZWZpbmUgVkVSU0lPTiAiMi4zIgotfCAjZGVmaW5lIF9HTlVfU09VUkNFIDEKLXwgI2RlZmluZSBTVERDX0hFQURFUlMgMQotfCAjZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMQotfCAjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCi18ICNkZWZpbmUgSEFWRV9TVERMSUJfSCAxCi18ICNkZWZpbmUgSEFWRV9TVFJJTkdfSCAxCi18ICNkZWZpbmUgSEFWRV9NRU1PUllfSCAxCi18ICNkZWZpbmUgSEFWRV9TVFJJTkdTX0ggMQotfCAjZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAxCi18ICNkZWZpbmUgSEFWRV9TVERJTlRfSCAxCi18ICNkZWZpbmUgSEFWRV9VTklTVERfSCAxCi18ICNkZWZpbmUgX19FWFRFTlNJT05TX18gMQotfCAjZGVmaW5lIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUyAxCi18ICNkZWZpbmUgWVlURVhUX1BPSU5URVIgMQotfCAjZGVmaW5lIE00ICIvdXNyL2Jpbi9tNCIKLXwgI2RlZmluZSBIQVZFX0xPQ0FMRV9IIDEKLXwgI2RlZmluZSBIQVZFX1dDSEFSX0ggMQotfCAjZGVmaW5lIEhBVkVfV0NUWVBFX0ggMQotfCAjZGVmaW5lIEhBVkVfX0JPT0wgMQotfCAjZGVmaW5lIEhBVkVfU1REQk9PTF9IIDEKLXwgI2RlZmluZSBIQVZFX1VJTlRQVFJfVCAxCi18ICNkZWZpbmUgSEFWRV9TRVRMT0NBTEUgMQotfCAjZGVmaW5lIEhBVkVfSVNBU0NJSSAxCi18ICNkZWZpbmUgSEFWRV9JU1dQUklOVCAxCi18ICNkZWZpbmUgSEFWRV9NQlNJTklUIDEKLXwgI2RlZmluZSBIQVZFX1NZU19XQUlUX0ggMQotfCAjZGVmaW5lIEhBVkVfRFVQMiAxCi18ICNkZWZpbmUgSEFWRV9XQUlUUElEIDEKLXwgI2RlZmluZSBIQVZFX1VOSVNURF9IIDEKLXwgI2RlZmluZSBIQVZFX0ZPUksgMQotfCAjZGVmaW5lIEhBVkVfVkZPUksgMQotfCAjZGVmaW5lIEhBVkVfV09SS0lOR19WRk9SSyAxCi18ICNkZWZpbmUgSEFWRV9XT1JLSU5HX0ZPUksgMQotfCAjZGVmaW5lIEhBVkVfU1lTX1RJTUVfSCAxCi18ICNkZWZpbmUgSEFWRV9TWVNfVElNRVNfSCAxCi18ICNkZWZpbmUgSEFWRV9TWVNfUkVTT1VSQ0VfSCAxCi18ICNkZWZpbmUgSEFWRV9USU1FUyAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX0dFVFJVU0FHRSAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX1RJTUVTIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfQ0xPQ0sgMAotfCAjZGVmaW5lIEhBVkVfREVDTF9TWVNDT05GIDEKLXwgI2RlZmluZSBIQVZFX0NMT0NLX1QgMQotfCAjZGVmaW5lIEhBVkVfU1RSVUNUX1RNUyAxCi18ICNkZWZpbmUgRklMRV9TWVNURU1fQUNDRVBUU19EUklWRV9MRVRURVJfUFJFRklYIDAKLXwgI2RlZmluZSBGSUxFX1NZU1RFTV9CQUNLU0xBU0hfSVNfRklMRV9OQU1FX1NFUEFSQVRPUiAwCi18ICNkZWZpbmUgSEFWRV9ERUNMX1NUUkVSUk9SX1IgMQotfCAjZGVmaW5lIEhBVkVfU1RSRVJST1JfUiAxCi18ICNkZWZpbmUgU1RSRVJST1JfUl9DSEFSX1AgMQotfCAjZGVmaW5lIEhBVkVfR0VUT1BUX0ggMQotfCAjZGVmaW5lIEhBVkVfR0VUT1BUX0xPTkdfT05MWSAxCi18IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLXwgI2luY2x1ZGUgPGdldG9wdC5oPgotfCAKLXwgaW50Ci18IG1haW4gKCkKLXwgewotfCAjaWZuZGVmIG9wdHJlc2V0Ci18ICAgY2hhciAqcCA9IChjaGFyICopIG9wdHJlc2V0OwotfCAjZW5kaWYKLXwgCi18ICAgOwotfCAgIHJldHVybiAwOwotfCB9Ci1jb25maWd1cmU6OTM4MzogcmVzdWx0OiBubwotY29uZmlndXJlOjkzOTI6IGNoZWNraW5nIGZvciB3b3JraW5nIEdOVSBnZXRvcHQgZnVuY3Rpb24KLWNvbmZpZ3VyZTo5NDgzOiBnY2MgLW8gY29uZnRlc3QgLWcgLU8yICAgY29uZnRlc3QuYyAgPiY1Ci1jb25maWd1cmU6OTQ4NjogJD8gPSAwCi1jb25maWd1cmU6OTQ4ODogLi9jb25mdGVzdAotY29uZnRlc3Q6IGludmFsaWQgb3B0aW9uIC0tICsKLWNvbmZpZ3VyZTo5NDkxOiAkPyA9IDAKLWNvbmZpZ3VyZTo5NTA1OiByZXN1bHQ6IHllcwotY29uZmlndXJlOjk1MTM6IGNoZWNraW5nIHdoZXRoZXIgZ2V0ZW52IGlzIGRlY2xhcmVkCi1jb25maWd1cmU6OTUzNzogZ2NjIC1jIC1nIC1PMiAgY29uZnRlc3QuYyA+JjUKLWNvbmZpZ3VyZTo5NTQzOiAkPyA9IDAKLWNvbmZpZ3VyZTo5NTQ2OiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6OTU0OTogJD8gPSAwCi1jb25maWd1cmU6OTU1MjogdGVzdCAtcyBjb25mdGVzdC5vCi1jb25maWd1cmU6OTU1NTogJD8gPSAwCi1jb25maWd1cmU6OTU2NjogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZTo5NjAwOiBjaGVja2luZyB3aGV0aGVyIE5MUyBpcyByZXF1ZXN0ZWQKLWNvbmZpZ3VyZTo5NjA5OiByZXN1bHQ6IHllcwotY29uZmlndXJlOjk2NDc6IGNoZWNraW5nIGZvciBtc2dmbXQKLWNvbmZpZ3VyZTogdHJ5aW5nIC91c3IvYmluL21zZ2ZtdC4uLgotMCB0cmFuc2xhdGVkIG1lc3NhZ2VzLgotY29uZmlndXJlOjk2Nzk6IHJlc3VsdDogL3Vzci9iaW4vbXNnZm10Ci1jb25maWd1cmU6OTY4ODogY2hlY2tpbmcgZm9yIGdtc2dmbXQKLWNvbmZpZ3VyZTo5NzE5OiByZXN1bHQ6IC91c3IvYmluL21zZ2ZtdAotY29uZmlndXJlOjk3NTg6IGNoZWNraW5nIGZvciB4Z2V0dGV4dAotY29uZmlndXJlOiB0cnlpbmcgL3Vzci9iaW4veGdldHRleHQuLi4KLS91c3IvYmluL3hnZXR0ZXh0OiB3YXJuaW5nOiBmaWxlIGAvZGV2L251bGwnIGV4dGVuc2lvbiBgJyBpcyB1bmtub3duOyB3aWxsIHRyeSBDCi1jb25maWd1cmU6OTc5MDogcmVzdWx0OiAvdXNyL2Jpbi94Z2V0dGV4dAotY29uZmlndXJlOjk4MzA6IGNoZWNraW5nIGZvciBtc2dtZXJnZQotY29uZmlndXJlOiB0cnlpbmcgL3Vzci9iaW4vbXNnbWVyZ2UuLi4KLWNvbmZpZ3VyZTo5ODYxOiByZXN1bHQ6IC91c3IvYmluL21zZ21lcmdlCi1jb25maWd1cmU6OTkxODogY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUKLWNvbmZpZ3VyZTo5OTM2OiByZXN1bHQ6IHg4Nl82NC11bmtub3duLWxpbnV4LWdudQotY29uZmlndXJlOjk5NDQ6IGNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUKLWNvbmZpZ3VyZTo5OTU4OiByZXN1bHQ6IHg4Nl82NC11bmtub3duLWxpbnV4LWdudQotY29uZmlndXJlOjk5OTA6IGNoZWNraW5nIGZvciBsZCB1c2VkIGJ5IEdDQwotY29uZmlndXJlOjEwMDU0OiByZXN1bHQ6IC91c3IvYmluL2xkCi1jb25maWd1cmU6MTAwNjM6IGNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKC91c3IvYmluL2xkKSBpcyBHTlUgbGQKLWNvbmZpZ3VyZToxMDA3NjogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZToxMDA4MzogY2hlY2tpbmcgZm9yIHNoYXJlZCBsaWJyYXJ5IHJ1biBwYXRoIG9yaWdpbgotY29uZmlndXJlOjEwMDk2OiByZXN1bHQ6IGRvbmUKLWNvbmZpZ3VyZToxMDU0NzogY2hlY2tpbmcgZm9yIGludHR5cGVzLmgKLWNvbmZpZ3VyZToxMDU2OTogZ2NjIC1jIC1nIC1PMiAgY29uZnRlc3QuYyA+JjUKLWNvbmZpZ3VyZToxMDU3NTogJD8gPSAwCi1jb25maWd1cmU6MTA1Nzg6IHRlc3QgLXogCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLWNvbmZpZ3VyZToxMDU4MTogJD8gPSAwCi1jb25maWd1cmU6MTA1ODQ6IHRlc3QgLXMgY29uZnRlc3QubwotY29uZmlndXJlOjEwNTg3OiAkPyA9IDAKLWNvbmZpZ3VyZToxMDU5ODogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZToxMDYwOTogY2hlY2tpbmcgZm9yIHN0ZGludC5oCi1jb25maWd1cmU6MTA2MzE6IGdjYyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25maWd1cmU6MTA2Mzc6ICQ/ID0gMAotY29uZmlndXJlOjEwNjQwOiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6MTA2NDM6ICQ/ID0gMAotY29uZmlndXJlOjEwNjQ2OiB0ZXN0IC1zIGNvbmZ0ZXN0Lm8KLWNvbmZpZ3VyZToxMDY0OTogJD8gPSAwCi1jb25maWd1cmU6MTA2NjA6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6MTA2NzE6IGNoZWNraW5nIGZvciB1bnNpZ25lZCBsb25nIGxvbmcKLWNvbmZpZ3VyZToxMDY5MzogZ2NjIC1vIGNvbmZ0ZXN0IC1nIC1PMiAgIGNvbmZ0ZXN0LmMgID4mNQotY29uZmlndXJlOjEwNjk5OiAkPyA9IDAKLWNvbmZpZ3VyZToxMDcwMjogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjEwNzA1OiAkPyA9IDAKLWNvbmZpZ3VyZToxMDcwODogdGVzdCAtcyBjb25mdGVzdAotY29uZmlndXJlOjEwNzExOiAkPyA9IDAKLWNvbmZpZ3VyZToxMDcyMzogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZToxMDc1NTogY2hlY2tpbmcgd2hldGhlciBzdHJkdXAgaXMgZGVjbGFyZWQKLWNvbmZpZ3VyZToxMDc3OTogZ2NjIC1jIC1nIC1PMiAgY29uZnRlc3QuYyA+JjUKLWNvbmZpZ3VyZToxMDc4NTogJD8gPSAwCi1jb25maWd1cmU6MTA3ODg6IHRlc3QgLXogCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLWNvbmZpZ3VyZToxMDc5MTogJD8gPSAwCi1jb25maWd1cmU6MTA3OTQ6IHRlc3QgLXMgY29uZnRlc3QubwotY29uZmlndXJlOjEwNzk3OiAkPyA9IDAKLWNvbmZpZ3VyZToxMDgwODogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZToxMDgyODogY2hlY2tpbmcgd2hldGhlciBzdHJuZHVwIGlzIGRlY2xhcmVkCi1jb25maWd1cmU6MTA4NTI6IGdjYyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25maWd1cmU6MTA4NTg6ICQ/ID0gMAotY29uZmlndXJlOjEwODYxOiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6MTA4NjQ6ICQ/ID0gMAotY29uZmlndXJlOjEwODY3OiB0ZXN0IC1zIGNvbmZ0ZXN0Lm8KLWNvbmZpZ3VyZToxMDg3MDogJD8gPSAwCi1jb25maWd1cmU6MTA4ODE6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6MTA5MDE6IGNoZWNraW5nIHdoZXRoZXIgc3RybmxlbiBpcyBkZWNsYXJlZAotY29uZmlndXJlOjEwOTI1OiBnY2MgLWMgLWcgLU8yICBjb25mdGVzdC5jID4mNQotY29uZmlndXJlOjEwOTMxOiAkPyA9IDAKLWNvbmZpZ3VyZToxMDkzNDogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjEwOTM3OiAkPyA9IDAKLWNvbmZpZ3VyZToxMDk0MDogdGVzdCAtcyBjb25mdGVzdC5vCi1jb25maWd1cmU6MTA5NDM6ICQ/ID0gMAotY29uZmlndXJlOjEwOTU0OiByZXN1bHQ6IHllcwotY29uZmlndXJlOjEwOTc0OiBjaGVja2luZyB3aGV0aGVyIGNsZWFyZXJyX3VubG9ja2VkIGlzIGRlY2xhcmVkCi1jb25maWd1cmU6MTA5OTg6IGdjYyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25maWd1cmU6MTEwMDQ6ICQ/ID0gMAotY29uZmlndXJlOjExMDA3OiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6MTEwMTA6ICQ/ID0gMAotY29uZmlndXJlOjExMDEzOiB0ZXN0IC1zIGNvbmZ0ZXN0Lm8KLWNvbmZpZ3VyZToxMTAxNjogJD8gPSAwCi1jb25maWd1cmU6MTEwMjc6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6MTEwNDc6IGNoZWNraW5nIHdoZXRoZXIgZmVvZl91bmxvY2tlZCBpcyBkZWNsYXJlZAotY29uZmlndXJlOjExMDcxOiBnY2MgLWMgLWcgLU8yICBjb25mdGVzdC5jID4mNQotY29uZmlndXJlOjExMDc3OiAkPyA9IDAKLWNvbmZpZ3VyZToxMTA4MDogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjExMDgzOiAkPyA9IDAKLWNvbmZpZ3VyZToxMTA4NjogdGVzdCAtcyBjb25mdGVzdC5vCi1jb25maWd1cmU6MTEwODk6ICQ/ID0gMAotY29uZmlndXJlOjExMTAwOiByZXN1bHQ6IHllcwotY29uZmlndXJlOjExMTIwOiBjaGVja2luZyB3aGV0aGVyIGZlcnJvcl91bmxvY2tlZCBpcyBkZWNsYXJlZAotY29uZmlndXJlOjExMTQ0OiBnY2MgLWMgLWcgLU8yICBjb25mdGVzdC5jID4mNQotY29uZmlndXJlOjExMTUwOiAkPyA9IDAKLWNvbmZpZ3VyZToxMTE1MzogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjExMTU2OiAkPyA9IDAKLWNvbmZpZ3VyZToxMTE1OTogdGVzdCAtcyBjb25mdGVzdC5vCi1jb25maWd1cmU6MTExNjI6ICQ/ID0gMAotY29uZmlndXJlOjExMTczOiByZXN1bHQ6IHllcwotY29uZmlndXJlOjExMTkzOiBjaGVja2luZyB3aGV0aGVyIGZmbHVzaF91bmxvY2tlZCBpcyBkZWNsYXJlZAotY29uZmlndXJlOjExMjE3OiBnY2MgLWMgLWcgLU8yICBjb25mdGVzdC5jID4mNQotY29uZmlndXJlOjExMjIzOiAkPyA9IDAKLWNvbmZpZ3VyZToxMTIyNjogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjExMjI5OiAkPyA9IDAKLWNvbmZpZ3VyZToxMTIzMjogdGVzdCAtcyBjb25mdGVzdC5vCi1jb25maWd1cmU6MTEyMzU6ICQ/ID0gMAotY29uZmlndXJlOjExMjQ2OiByZXN1bHQ6IHllcwotY29uZmlndXJlOjExMjY2OiBjaGVja2luZyB3aGV0aGVyIGZnZXRzX3VubG9ja2VkIGlzIGRlY2xhcmVkCi1jb25maWd1cmU6MTEyOTA6IGdjYyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25maWd1cmU6MTEyOTY6ICQ/ID0gMAotY29uZmlndXJlOjExMjk5OiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6MTEzMDI6ICQ/ID0gMAotY29uZmlndXJlOjExMzA1OiB0ZXN0IC1zIGNvbmZ0ZXN0Lm8KLWNvbmZpZ3VyZToxMTMwODogJD8gPSAwCi1jb25maWd1cmU6MTEzMTk6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6MTEzMzk6IGNoZWNraW5nIHdoZXRoZXIgZnB1dGNfdW5sb2NrZWQgaXMgZGVjbGFyZWQKLWNvbmZpZ3VyZToxMTM2MzogZ2NjIC1jIC1nIC1PMiAgY29uZnRlc3QuYyA+JjUKLWNvbmZpZ3VyZToxMTM2OTogJD8gPSAwCi1jb25maWd1cmU6MTEzNzI6IHRlc3QgLXogCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLWNvbmZpZ3VyZToxMTM3NTogJD8gPSAwCi1jb25maWd1cmU6MTEzNzg6IHRlc3QgLXMgY29uZnRlc3QubwotY29uZmlndXJlOjExMzgxOiAkPyA9IDAKLWNvbmZpZ3VyZToxMTM5MjogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZToxMTQxMjogY2hlY2tpbmcgd2hldGhlciBmcHV0c191bmxvY2tlZCBpcyBkZWNsYXJlZAotY29uZmlndXJlOjExNDM2OiBnY2MgLWMgLWcgLU8yICBjb25mdGVzdC5jID4mNQotY29uZmlndXJlOjExNDQyOiAkPyA9IDAKLWNvbmZpZ3VyZToxMTQ0NTogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjExNDQ4OiAkPyA9IDAKLWNvbmZpZ3VyZToxMTQ1MTogdGVzdCAtcyBjb25mdGVzdC5vCi1jb25maWd1cmU6MTE0NTQ6ICQ/ID0gMAotY29uZmlndXJlOjExNDY1OiByZXN1bHQ6IHllcwotY29uZmlndXJlOjExNDg1OiBjaGVja2luZyB3aGV0aGVyIGZyZWFkX3VubG9ja2VkIGlzIGRlY2xhcmVkCi1jb25maWd1cmU6MTE1MDk6IGdjYyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25maWd1cmU6MTE1MTU6ICQ/ID0gMAotY29uZmlndXJlOjExNTE4OiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6MTE1MjE6ICQ/ID0gMAotY29uZmlndXJlOjExNTI0OiB0ZXN0IC1zIGNvbmZ0ZXN0Lm8KLWNvbmZpZ3VyZToxMTUyNzogJD8gPSAwCi1jb25maWd1cmU6MTE1Mzg6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6MTE1NTg6IGNoZWNraW5nIHdoZXRoZXIgZndyaXRlX3VubG9ja2VkIGlzIGRlY2xhcmVkCi1jb25maWd1cmU6MTE1ODI6IGdjYyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25maWd1cmU6MTE1ODg6ICQ/ID0gMAotY29uZmlndXJlOjExNTkxOiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6MTE1OTQ6ICQ/ID0gMAotY29uZmlndXJlOjExNTk3OiB0ZXN0IC1zIGNvbmZ0ZXN0Lm8KLWNvbmZpZ3VyZToxMTYwMDogJD8gPSAwCi1jb25maWd1cmU6MTE2MTE6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6MTE2MzE6IGNoZWNraW5nIHdoZXRoZXIgZ2V0Y191bmxvY2tlZCBpcyBkZWNsYXJlZAotY29uZmlndXJlOjExNjU1OiBnY2MgLWMgLWcgLU8yICBjb25mdGVzdC5jID4mNQotY29uZmlndXJlOjExNjYxOiAkPyA9IDAKLWNvbmZpZ3VyZToxMTY2NDogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjExNjY3OiAkPyA9IDAKLWNvbmZpZ3VyZToxMTY3MDogdGVzdCAtcyBjb25mdGVzdC5vCi1jb25maWd1cmU6MTE2NzM6ICQ/ID0gMAotY29uZmlndXJlOjExNjg0OiByZXN1bHQ6IHllcwotY29uZmlndXJlOjExNzA0OiBjaGVja2luZyB3aGV0aGVyIGdldGNoYXJfdW5sb2NrZWQgaXMgZGVjbGFyZWQKLWNvbmZpZ3VyZToxMTcyODogZ2NjIC1jIC1nIC1PMiAgY29uZnRlc3QuYyA+JjUKLWNvbmZpZ3VyZToxMTczNDogJD8gPSAwCi1jb25maWd1cmU6MTE3Mzc6IHRlc3QgLXogCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLWNvbmZpZ3VyZToxMTc0MDogJD8gPSAwCi1jb25maWd1cmU6MTE3NDM6IHRlc3QgLXMgY29uZnRlc3QubwotY29uZmlndXJlOjExNzQ2OiAkPyA9IDAKLWNvbmZpZ3VyZToxMTc1NzogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZToxMTc3NzogY2hlY2tpbmcgd2hldGhlciBwdXRjX3VubG9ja2VkIGlzIGRlY2xhcmVkCi1jb25maWd1cmU6MTE4MDE6IGdjYyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25maWd1cmU6MTE4MDc6ICQ/ID0gMAotY29uZmlndXJlOjExODEwOiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6MTE4MTM6ICQ/ID0gMAotY29uZmlndXJlOjExODE2OiB0ZXN0IC1zIGNvbmZ0ZXN0Lm8KLWNvbmZpZ3VyZToxMTgxOTogJD8gPSAwCi1jb25maWd1cmU6MTE4MzA6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6MTE4NTA6IGNoZWNraW5nIHdoZXRoZXIgcHV0Y2hhcl91bmxvY2tlZCBpcyBkZWNsYXJlZAotY29uZmlndXJlOjExODc0OiBnY2MgLWMgLWcgLU8yICBjb25mdGVzdC5jID4mNQotY29uZmlndXJlOjExODgwOiAkPyA9IDAKLWNvbmZpZ3VyZToxMTg4MzogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjExODg2OiAkPyA9IDAKLWNvbmZpZ3VyZToxMTg4OTogdGVzdCAtcyBjb25mdGVzdC5vCi1jb25maWd1cmU6MTE4OTI6ICQ/ID0gMAotY29uZmlndXJlOjExOTAzOiByZXN1bHQ6IHllcwotY29uZmlndXJlOjExOTQwOiBjaGVja2luZyBmb3IgZXJyb3JfYXRfbGluZQotY29uZmlndXJlOjExOTYxOiBnY2MgLW8gY29uZnRlc3QgLWcgLU8yICAgY29uZnRlc3QuYyAgPiY1Ci1jb25maWd1cmU6MTE5Njc6ICQ/ID0gMAotY29uZmlndXJlOjExOTcwOiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6MTE5NzM6ICQ/ID0gMAotY29uZmlndXJlOjExOTc2OiB0ZXN0IC1zIGNvbmZ0ZXN0Ci1jb25maWd1cmU6MTE5Nzk6ICQ/ID0gMAotY29uZmlndXJlOjExOTkxOiByZXN1bHQ6IHllcwotY29uZmlndXJlOjEyMDg1OiBjaGVja2luZyBmb3IgQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZQotY29uZmlndXJlOjEyMTEwOiBnY2MgLW8gY29uZnRlc3QgLWcgLU8yICAtSS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvcmVGb3VuZGF0aW9uLmZyYW1ld29yay9IZWFkZXJzICBjb25mdGVzdC5jICAtZnJhbWV3b3JrIENvcmVGb3VuZGF0aW9uID4mNQotZ2NjOiBDb3JlRm91bmRhdGlvbjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQotY2MxOiBlcnJvcjogdW5yZWNvZ25pemVkIGNvbW1hbmQgbGluZSBvcHRpb24gIi1mcmFtZXdvcmsiCi1jb25maWd1cmU6MTIxMTY6ICQ/ID0gMQotY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6Ci18IC8qIGNvbmZkZWZzLmguICAqLwotfCAKLXwgI2RlZmluZSBQQUNLQUdFX05BTUUgIkdOVSBCaXNvbiIKLXwgI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgImJpc29uIgotfCAjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiMi4zIgotfCAjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICJHTlUgQmlzb24gMi4zIgotfCAjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICJidWctYmlzb25AZ251Lm9yZyIKLXwgI2RlZmluZSBQQUNLQUdFICJiaXNvbiIKLXwgI2RlZmluZSBWRVJTSU9OICIyLjMiCi18ICNkZWZpbmUgX0dOVV9TT1VSQ0UgMQotfCAjZGVmaW5lIFNURENfSEVBREVSUyAxCi18ICNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxCi18ICNkZWZpbmUgSEFWRV9TWVNfU1RBVF9IIDEKLXwgI2RlZmluZSBIQVZFX1NURExJQl9IIDEKLXwgI2RlZmluZSBIQVZFX1NUUklOR19IIDEKLXwgI2RlZmluZSBIQVZFX01FTU9SWV9IIDEKLXwgI2RlZmluZSBIQVZFX1NUUklOR1NfSCAxCi18ICNkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDEKLXwgI2RlZmluZSBIQVZFX1NURElOVF9IIDEKLXwgI2RlZmluZSBIQVZFX1VOSVNURF9IIDEKLXwgI2RlZmluZSBfX0VYVEVOU0lPTlNfXyAxCi18ICNkZWZpbmUgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTIDEKLXwgI2RlZmluZSBZWVRFWFRfUE9JTlRFUiAxCi18ICNkZWZpbmUgTTQgIi91c3IvYmluL200IgotfCAjZGVmaW5lIEhBVkVfTE9DQUxFX0ggMQotfCAjZGVmaW5lIEhBVkVfV0NIQVJfSCAxCi18ICNkZWZpbmUgSEFWRV9XQ1RZUEVfSCAxCi18ICNkZWZpbmUgSEFWRV9fQk9PTCAxCi18ICNkZWZpbmUgSEFWRV9TVERCT09MX0ggMQotfCAjZGVmaW5lIEhBVkVfVUlOVFBUUl9UIDEKLXwgI2RlZmluZSBIQVZFX1NFVExPQ0FMRSAxCi18ICNkZWZpbmUgSEFWRV9JU0FTQ0lJIDEKLXwgI2RlZmluZSBIQVZFX0lTV1BSSU5UIDEKLXwgI2RlZmluZSBIQVZFX01CU0lOSVQgMQotfCAjZGVmaW5lIEhBVkVfU1lTX1dBSVRfSCAxCi18ICNkZWZpbmUgSEFWRV9EVVAyIDEKLXwgI2RlZmluZSBIQVZFX1dBSVRQSUQgMQotfCAjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQotfCAjZGVmaW5lIEhBVkVfRk9SSyAxCi18ICNkZWZpbmUgSEFWRV9WRk9SSyAxCi18ICNkZWZpbmUgSEFWRV9XT1JLSU5HX1ZGT1JLIDEKLXwgI2RlZmluZSBIQVZFX1dPUktJTkdfRk9SSyAxCi18ICNkZWZpbmUgSEFWRV9TWVNfVElNRV9IIDEKLXwgI2RlZmluZSBIQVZFX1NZU19USU1FU19IIDEKLXwgI2RlZmluZSBIQVZFX1NZU19SRVNPVVJDRV9IIDEKLXwgI2RlZmluZSBIQVZFX1RJTUVTIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfR0VUUlVTQUdFIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfVElNRVMgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9DTE9DSyAwCi18ICNkZWZpbmUgSEFWRV9ERUNMX1NZU0NPTkYgMQotfCAjZGVmaW5lIEhBVkVfQ0xPQ0tfVCAxCi18ICNkZWZpbmUgSEFWRV9TVFJVQ1RfVE1TIDEKLXwgI2RlZmluZSBGSUxFX1NZU1RFTV9BQ0NFUFRTX0RSSVZFX0xFVFRFUl9QUkVGSVggMAotfCAjZGVmaW5lIEZJTEVfU1lTVEVNX0JBQ0tTTEFTSF9JU19GSUxFX05BTUVfU0VQQVJBVE9SIDAKLXwgI2RlZmluZSBIQVZFX0RFQ0xfU1RSRVJST1JfUiAxCi18ICNkZWZpbmUgSEFWRV9TVFJFUlJPUl9SIDEKLXwgI2RlZmluZSBTVFJFUlJPUl9SX0NIQVJfUCAxCi18ICNkZWZpbmUgSEFWRV9HRVRPUFRfSCAxCi18ICNkZWZpbmUgSEFWRV9HRVRPUFRfTE9OR19PTkxZIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfR0VURU5WIDEKLXwgI2RlZmluZSBIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYIDEKLXwgI2RlZmluZSBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCAxCi18ICNkZWZpbmUgSEFWRV9VTlNJR05FRF9MT05HX0xPTkcgMQotfCAjZGVmaW5lIEhBVkVfVUlOVE1BWF9UIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfU1RSRFVQIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfU1RSTkRVUCAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX1NUUk5MRU4gMQotfCAjZGVmaW5lIEhBVkVfREVDTF9DTEVBUkVSUl9VTkxPQ0tFRCAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX0ZFT0ZfVU5MT0NLRUQgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9GRVJST1JfVU5MT0NLRUQgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9GRkxVU0hfVU5MT0NLRUQgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9GR0VUU19VTkxPQ0tFRCAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX0ZQVVRDX1VOTE9DS0VEIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfRlBVVFNfVU5MT0NLRUQgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9GUkVBRF9VTkxPQ0tFRCAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX0ZXUklURV9VTkxPQ0tFRCAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX0dFVENfVU5MT0NLRUQgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9HRVRDSEFSX1VOTE9DS0VEIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfUFVUQ19VTkxPQ0tFRCAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX1BVVENIQVJfVU5MT0NLRUQgMQotfCAvKiBlbmQgY29uZmRlZnMuaC4gICovCi18ICNpbmNsdWRlIDxDRlByZWZlcmVuY2VzLmg+Ci18IGludAotfCBtYWluICgpCi18IHsKLXwgQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZShOVUxMLCBOVUxMKQotfCAgIDsKLXwgICByZXR1cm4gMDsKLXwgfQotY29uZmlndXJlOjEyMTQyOiByZXN1bHQ6IG5vCi1jb25maWd1cmU6MTIxNTE6IGNoZWNraW5nIGZvciBDRkxvY2FsZUNvcHlDdXJyZW50Ci1jb25maWd1cmU6MTIxNzY6IGdjYyAtbyBjb25mdGVzdCAtZyAtTzIgIC1JL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZUZvdW5kYXRpb24uZnJhbWV3b3JrL0hlYWRlcnMgIGNvbmZ0ZXN0LmMgIC1mcmFtZXdvcmsgQ29yZUZvdW5kYXRpb24gPiY1Ci1nY2M6IENvcmVGb3VuZGF0aW9uOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Ci1jYzE6IGVycm9yOiB1bnJlY29nbml6ZWQgY29tbWFuZCBsaW5lIG9wdGlvbiAiLWZyYW1ld29yayIKLWNvbmZpZ3VyZToxMjE4MjogJD8gPSAxCi1jb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoKLXwgLyogY29uZmRlZnMuaC4gICovCi18IAotfCAjZGVmaW5lIFBBQ0tBR0VfTkFNRSAiR05VIEJpc29uIgotfCAjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiYmlzb24iCi18ICNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIyLjMiCi18ICNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgIkdOVSBCaXNvbiAyLjMiCi18ICNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgImJ1Zy1iaXNvbkBnbnUub3JnIgotfCAjZGVmaW5lIFBBQ0tBR0UgImJpc29uIgotfCAjZGVmaW5lIFZFUlNJT04gIjIuMyIKLXwgI2RlZmluZSBfR05VX1NPVVJDRSAxCi18ICNkZWZpbmUgU1REQ19IRUFERVJTIDEKLXwgI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEKLXwgI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMQotfCAjZGVmaW5lIEhBVkVfU1RETElCX0ggMQotfCAjZGVmaW5lIEhBVkVfU1RSSU5HX0ggMQotfCAjZGVmaW5lIEhBVkVfTUVNT1JZX0ggMQotfCAjZGVmaW5lIEhBVkVfU1RSSU5HU19IIDEKLXwgI2RlZmluZSBIQVZFX0lOVFRZUEVTX0ggMQotfCAjZGVmaW5lIEhBVkVfU1RESU5UX0ggMQotfCAjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQotfCAjZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKLXwgI2RlZmluZSBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MgMQotfCAjZGVmaW5lIFlZVEVYVF9QT0lOVEVSIDEKLXwgI2RlZmluZSBNNCAiL3Vzci9iaW4vbTQiCi18ICNkZWZpbmUgSEFWRV9MT0NBTEVfSCAxCi18ICNkZWZpbmUgSEFWRV9XQ0hBUl9IIDEKLXwgI2RlZmluZSBIQVZFX1dDVFlQRV9IIDEKLXwgI2RlZmluZSBIQVZFX19CT09MIDEKLXwgI2RlZmluZSBIQVZFX1NUREJPT0xfSCAxCi18ICNkZWZpbmUgSEFWRV9VSU5UUFRSX1QgMQotfCAjZGVmaW5lIEhBVkVfU0VUTE9DQUxFIDEKLXwgI2RlZmluZSBIQVZFX0lTQVNDSUkgMQotfCAjZGVmaW5lIEhBVkVfSVNXUFJJTlQgMQotfCAjZGVmaW5lIEhBVkVfTUJTSU5JVCAxCi18ICNkZWZpbmUgSEFWRV9TWVNfV0FJVF9IIDEKLXwgI2RlZmluZSBIQVZFX0RVUDIgMQotfCAjZGVmaW5lIEhBVkVfV0FJVFBJRCAxCi18ICNkZWZpbmUgSEFWRV9VTklTVERfSCAxCi18ICNkZWZpbmUgSEFWRV9GT1JLIDEKLXwgI2RlZmluZSBIQVZFX1ZGT1JLIDEKLXwgI2RlZmluZSBIQVZFX1dPUktJTkdfVkZPUksgMQotfCAjZGVmaW5lIEhBVkVfV09SS0lOR19GT1JLIDEKLXwgI2RlZmluZSBIQVZFX1NZU19USU1FX0ggMQotfCAjZGVmaW5lIEhBVkVfU1lTX1RJTUVTX0ggMQotfCAjZGVmaW5lIEhBVkVfU1lTX1JFU09VUkNFX0ggMQotfCAjZGVmaW5lIEhBVkVfVElNRVMgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9HRVRSVVNBR0UgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9USU1FUyAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX0NMT0NLIDAKLXwgI2RlZmluZSBIQVZFX0RFQ0xfU1lTQ09ORiAxCi18ICNkZWZpbmUgSEFWRV9DTE9DS19UIDEKLXwgI2RlZmluZSBIQVZFX1NUUlVDVF9UTVMgMQotfCAjZGVmaW5lIEZJTEVfU1lTVEVNX0FDQ0VQVFNfRFJJVkVfTEVUVEVSX1BSRUZJWCAwCi18ICNkZWZpbmUgRklMRV9TWVNURU1fQkFDS1NMQVNIX0lTX0ZJTEVfTkFNRV9TRVBBUkFUT1IgMAotfCAjZGVmaW5lIEhBVkVfREVDTF9TVFJFUlJPUl9SIDEKLXwgI2RlZmluZSBIQVZFX1NUUkVSUk9SX1IgMQotfCAjZGVmaW5lIFNUUkVSUk9SX1JfQ0hBUl9QIDEKLXwgI2RlZmluZSBIQVZFX0dFVE9QVF9IIDEKLXwgI2RlZmluZSBIQVZFX0dFVE9QVF9MT05HX09OTFkgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9HRVRFTlYgMQotfCAjZGVmaW5lIEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVggMQotfCAjZGVmaW5lIEhBVkVfU1RESU5UX0hfV0lUSF9VSU5UTUFYIDEKLXwgI2RlZmluZSBIQVZFX1VOU0lHTkVEX0xPTkdfTE9ORyAxCi18ICNkZWZpbmUgSEFWRV9VSU5UTUFYX1QgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9TVFJEVVAgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9TVFJORFVQIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfU1RSTkxFTiAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX0NMRUFSRVJSX1VOTE9DS0VEIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfRkVPRl9VTkxPQ0tFRCAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX0ZFUlJPUl9VTkxPQ0tFRCAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX0ZGTFVTSF9VTkxPQ0tFRCAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX0ZHRVRTX1VOTE9DS0VEIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfRlBVVENfVU5MT0NLRUQgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9GUFVUU19VTkxPQ0tFRCAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX0ZSRUFEX1VOTE9DS0VEIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfRldSSVRFX1VOTE9DS0VEIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfR0VUQ19VTkxPQ0tFRCAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX0dFVENIQVJfVU5MT0NLRUQgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9QVVRDX1VOTE9DS0VEIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfUFVUQ0hBUl9VTkxPQ0tFRCAxCi18IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLXwgI2luY2x1ZGUgPENGTG9jYWxlLmg+Ci18IGludAotfCBtYWluICgpCi18IHsKLXwgQ0ZMb2NhbGVDb3B5Q3VycmVudCgpOwotfCAgIDsKLXwgICByZXR1cm4gMDsKLXwgfQotY29uZmlndXJlOjEyMjA4OiByZXN1bHQ6IG5vCi1jb25maWd1cmU6MTIyMjU6IGNoZWNraW5nIHdoZXRoZXIgTkxTIGlzIHJlcXVlc3RlZAotY29uZmlndXJlOjEyMjM0OiByZXN1bHQ6IHllcwotY29uZmlndXJlOjEyMjUyOiBjaGVja2luZyBmb3IgR05VIGdldHRleHQgaW4gbGliYwotY29uZmlndXJlOjEyMjc2OiBnY2MgLW8gY29uZnRlc3QgLWcgLU8yICAgY29uZnRlc3QuYyAgPiY1Ci1jb25maWd1cmU6MTIyODI6ICQ/ID0gMAotY29uZmlndXJlOjEyMjg1OiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6MTIyODg6ICQ/ID0gMAotY29uZmlndXJlOjEyMjkxOiB0ZXN0IC1zIGNvbmZ0ZXN0Ci1jb25maWd1cmU6MTIyOTQ6ICQ/ID0gMAotY29uZmlndXJlOjEyMzA2OiByZXN1bHQ6IHllcwotY29uZmlndXJlOjEzMDEwOiBjaGVja2luZyB3aGV0aGVyIHRvIHVzZSBOTFMKLWNvbmZpZ3VyZToxMzAxMjogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZToxMzAxNTogY2hlY2tpbmcgd2hlcmUgdGhlIGdldHRleHQgZnVuY3Rpb24gY29tZXMgZnJvbQotY29uZmlndXJlOjEzMDI2OiByZXN1bHQ6IGxpYmMKLWNvbmZpZ3VyZToxMzEyMjogY2hlY2tpbmcgZm9yIHN0ZGxpYi5oCi1jb25maWd1cmU6MTMxMjc6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6MTMyNjY6IGNoZWNraW5nIGZvciBHTlUgbGliYyBjb21wYXRpYmxlIG1hbGxvYwotY29uZmlndXJlOjEzMjk1OiBnY2MgLW8gY29uZnRlc3QgLWcgLU8yICAgY29uZnRlc3QuYyAgPiY1Ci1jb25maWd1cmU6MTMyOTg6ICQ/ID0gMAotY29uZmlndXJlOjEzMzAwOiAuL2NvbmZ0ZXN0Ci1jb25maWd1cmU6MTMzMDM6ICQ/ID0gMAotY29uZmlndXJlOjEzMzE3OiByZXN1bHQ6IHllcwotY29uZmlndXJlOjEzMzc3OiBjaGVja2luZyBmb3IgaXN3Y250cmwKLWNvbmZpZ3VyZToxMzQzNDogZ2NjIC1vIGNvbmZ0ZXN0IC1nIC1PMiAgIGNvbmZ0ZXN0LmMgID4mNQotY29uZnRlc3QuYzoxMTE6IHdhcm5pbmc6IGNvbmZsaWN0aW5nIHR5cGVzIGZvciBidWlsdC1pbiBmdW5jdGlvbiAnaXN3Y250cmwnCi1jb25maWd1cmU6MTM0NDA6ICQ/ID0gMAotY29uZmlndXJlOjEzNDQzOiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6MTM0NDY6ICQ/ID0gMAotY29uZmlndXJlOjEzNDQ5OiB0ZXN0IC1zIGNvbmZ0ZXN0Ci1jb25maWd1cmU6MTM0NTI6ICQ/ID0gMAotY29uZmlndXJlOjEzNDY0OiByZXN1bHQ6IHllcwotY29uZmlndXJlOjEzMzc3OiBjaGVja2luZyBmb3Igd2N3aWR0aAotY29uZmlndXJlOjEzNDM0OiBnY2MgLW8gY29uZnRlc3QgLWcgLU8yICAgY29uZnRlc3QuYyAgPiY1Ci1jb25maWd1cmU6MTM0NDA6ICQ/ID0gMAotY29uZmlndXJlOjEzNDQzOiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6MTM0NDY6ICQ/ID0gMAotY29uZmlndXJlOjEzNDQ5OiB0ZXN0IC1zIGNvbmZ0ZXN0Ci1jb25maWd1cmU6MTM0NTI6ICQ/ID0gMAotY29uZmlndXJlOjEzNDY0OiByZXN1bHQ6IHllcwotY29uZmlndXJlOjEzNDc1OiBjaGVja2luZyB3aGV0aGVyIG1icnRvd2MgYW5kIG1ic3RhdGVfdCBhcmUgcHJvcGVybHkgZGVjbGFyZWQKLWNvbmZpZ3VyZToxMzUwMDogZ2NjIC1vIGNvbmZ0ZXN0IC1nIC1PMiAgIGNvbmZ0ZXN0LmMgID4mNQotY29uZmlndXJlOjEzNTA2OiAkPyA9IDAKLWNvbmZpZ3VyZToxMzUwOTogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjEzNTEyOiAkPyA9IDAKLWNvbmZpZ3VyZToxMzUxNTogdGVzdCAtcyBjb25mdGVzdAotY29uZmlndXJlOjEzNTE4OiAkPyA9IDAKLWNvbmZpZ3VyZToxMzUzMDogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZToxMzU0MTogY2hlY2tpbmcgd2hldGhlciB3Y3dpZHRoIGlzIGRlY2xhcmVkCi1jb25maWd1cmU6MTM1NzQ6IGdjYyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25maWd1cmU6MTM1ODA6ICQ/ID0gMAotY29uZmlndXJlOjEzNTgzOiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6MTM1ODY6ICQ/ID0gMAotY29uZmlndXJlOjEzNTg5OiB0ZXN0IC1zIGNvbmZ0ZXN0Lm8KLWNvbmZpZ3VyZToxMzU5MjogJD8gPSAwCi1jb25maWd1cmU6MTM2MDM6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6MTM2MTY6IGNoZWNraW5nIHdoZXRoZXIgbWJzd2lkdGggaXMgZGVjbGFyZWQgaW4gPHdjaGFyLmg+Ci1jb25maWd1cmU6MTM2NDM6IGdjYyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmMgPiY1Ci1jb25mdGVzdC5jOiBJbiBmdW5jdGlvbiAnbWFpbic6Ci1jb25mdGVzdC5jOjEwMDogZXJyb3I6ICdtYnN3aWR0aCcgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pCi1jb25mdGVzdC5jOjEwMDogZXJyb3I6IChFYWNoIHVuZGVjbGFyZWQgaWRlbnRpZmllciBpcyByZXBvcnRlZCBvbmx5IG9uY2UKLWNvbmZ0ZXN0LmM6MTAwOiBlcnJvcjogZm9yIGVhY2ggZnVuY3Rpb24gaXQgYXBwZWFycyBpbi4pCi1jb25maWd1cmU6MTM2NDk6ICQ/ID0gMQotY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6Ci18IC8qIGNvbmZkZWZzLmguICAqLwotfCAKLXwgI2RlZmluZSBQQUNLQUdFX05BTUUgIkdOVSBCaXNvbiIKLXwgI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgImJpc29uIgotfCAjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiMi4zIgotfCAjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICJHTlUgQmlzb24gMi4zIgotfCAjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICJidWctYmlzb25AZ251Lm9yZyIKLXwgI2RlZmluZSBQQUNLQUdFICJiaXNvbiIKLXwgI2RlZmluZSBWRVJTSU9OICIyLjMiCi18ICNkZWZpbmUgX0dOVV9TT1VSQ0UgMQotfCAjZGVmaW5lIFNURENfSEVBREVSUyAxCi18ICNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxCi18ICNkZWZpbmUgSEFWRV9TWVNfU1RBVF9IIDEKLXwgI2RlZmluZSBIQVZFX1NURExJQl9IIDEKLXwgI2RlZmluZSBIQVZFX1NUUklOR19IIDEKLXwgI2RlZmluZSBIQVZFX01FTU9SWV9IIDEKLXwgI2RlZmluZSBIQVZFX1NUUklOR1NfSCAxCi18ICNkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDEKLXwgI2RlZmluZSBIQVZFX1NURElOVF9IIDEKLXwgI2RlZmluZSBIQVZFX1VOSVNURF9IIDEKLXwgI2RlZmluZSBfX0VYVEVOU0lPTlNfXyAxCi18ICNkZWZpbmUgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTIDEKLXwgI2RlZmluZSBZWVRFWFRfUE9JTlRFUiAxCi18ICNkZWZpbmUgTTQgIi91c3IvYmluL200IgotfCAjZGVmaW5lIEhBVkVfTE9DQUxFX0ggMQotfCAjZGVmaW5lIEhBVkVfV0NIQVJfSCAxCi18ICNkZWZpbmUgSEFWRV9XQ1RZUEVfSCAxCi18ICNkZWZpbmUgSEFWRV9fQk9PTCAxCi18ICNkZWZpbmUgSEFWRV9TVERCT09MX0ggMQotfCAjZGVmaW5lIEhBVkVfVUlOVFBUUl9UIDEKLXwgI2RlZmluZSBIQVZFX1NFVExPQ0FMRSAxCi18ICNkZWZpbmUgSEFWRV9JU0FTQ0lJIDEKLXwgI2RlZmluZSBIQVZFX0lTV1BSSU5UIDEKLXwgI2RlZmluZSBIQVZFX01CU0lOSVQgMQotfCAjZGVmaW5lIEhBVkVfU1lTX1dBSVRfSCAxCi18ICNkZWZpbmUgSEFWRV9EVVAyIDEKLXwgI2RlZmluZSBIQVZFX1dBSVRQSUQgMQotfCAjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQotfCAjZGVmaW5lIEhBVkVfRk9SSyAxCi18ICNkZWZpbmUgSEFWRV9WRk9SSyAxCi18ICNkZWZpbmUgSEFWRV9XT1JLSU5HX1ZGT1JLIDEKLXwgI2RlZmluZSBIQVZFX1dPUktJTkdfRk9SSyAxCi18ICNkZWZpbmUgSEFWRV9TWVNfVElNRV9IIDEKLXwgI2RlZmluZSBIQVZFX1NZU19USU1FU19IIDEKLXwgI2RlZmluZSBIQVZFX1NZU19SRVNPVVJDRV9IIDEKLXwgI2RlZmluZSBIQVZFX1RJTUVTIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfR0VUUlVTQUdFIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfVElNRVMgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9DTE9DSyAwCi18ICNkZWZpbmUgSEFWRV9ERUNMX1NZU0NPTkYgMQotfCAjZGVmaW5lIEhBVkVfQ0xPQ0tfVCAxCi18ICNkZWZpbmUgSEFWRV9TVFJVQ1RfVE1TIDEKLXwgI2RlZmluZSBGSUxFX1NZU1RFTV9BQ0NFUFRTX0RSSVZFX0xFVFRFUl9QUkVGSVggMAotfCAjZGVmaW5lIEZJTEVfU1lTVEVNX0JBQ0tTTEFTSF9JU19GSUxFX05BTUVfU0VQQVJBVE9SIDAKLXwgI2RlZmluZSBIQVZFX0RFQ0xfU1RSRVJST1JfUiAxCi18ICNkZWZpbmUgSEFWRV9TVFJFUlJPUl9SIDEKLXwgI2RlZmluZSBTVFJFUlJPUl9SX0NIQVJfUCAxCi18ICNkZWZpbmUgSEFWRV9HRVRPUFRfSCAxCi18ICNkZWZpbmUgSEFWRV9HRVRPUFRfTE9OR19PTkxZIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfR0VURU5WIDEKLXwgI2RlZmluZSBIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYIDEKLXwgI2RlZmluZSBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCAxCi18ICNkZWZpbmUgSEFWRV9VTlNJR05FRF9MT05HX0xPTkcgMQotfCAjZGVmaW5lIEhBVkVfVUlOVE1BWF9UIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfU1RSRFVQIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfU1RSTkRVUCAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX1NUUk5MRU4gMQotfCAjZGVmaW5lIEhBVkVfREVDTF9DTEVBUkVSUl9VTkxPQ0tFRCAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX0ZFT0ZfVU5MT0NLRUQgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9GRVJST1JfVU5MT0NLRUQgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9GRkxVU0hfVU5MT0NLRUQgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9GR0VUU19VTkxPQ0tFRCAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX0ZQVVRDX1VOTE9DS0VEIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfRlBVVFNfVU5MT0NLRUQgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9GUkVBRF9VTkxPQ0tFRCAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX0ZXUklURV9VTkxPQ0tFRCAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX0dFVENfVU5MT0NLRUQgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9HRVRDSEFSX1VOTE9DS0VEIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfUFVUQ19VTkxPQ0tFRCAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX1BVVENIQVJfVU5MT0NLRUQgMQotfCAjZGVmaW5lIEVOQUJMRV9OTFMgMQotfCAjZGVmaW5lIEhBVkVfR0VUVEVYVCAxCi18ICNkZWZpbmUgSEFWRV9EQ0dFVFRFWFQgMQotfCAjZGVmaW5lIEhBVkVfU1RETElCX0ggMQotfCAjZGVmaW5lIEhBVkVfTUFMTE9DIDEKLXwgI2RlZmluZSBIQVZFX0lTV0NOVFJMIDEKLXwgI2RlZmluZSBIQVZFX1dDV0lEVEggMQotfCAjZGVmaW5lIEhBVkVfTUJSVE9XQyAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX1dDV0lEVEggMQotfCAvKiBlbmQgY29uZmRlZnMuaC4gICovCi18IAotfCAjaWYgSEFWRV9XQ0hBUl9ICi18ICMgaW5jbHVkZSA8d2NoYXIuaD4KLXwgI2VuZGlmCi18IAotfCBpbnQKLXwgbWFpbiAoKQotfCB7Ci18IAotfCAgIGNoYXIgKnAgPSAoY2hhciAqKSBtYnN3aWR0aDsKLXwgCi18ICAgOwotfCAgIHJldHVybiAwOwotfCB9Ci1jb25maWd1cmU6MTM2NzI6IHJlc3VsdDogbm8KLWNvbmZpZ3VyZToxMzY4NTogY2hlY2tpbmcgZm9yIG1ic3RhdGVfdAotY29uZmlndXJlOjEzNzA3OiBnY2MgLWMgLWcgLU8yICBjb25mdGVzdC5jID4mNQotY29uZmlndXJlOjEzNzEzOiAkPyA9IDAKLWNvbmZpZ3VyZToxMzcxNjogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjEzNzE5OiAkPyA9IDAKLWNvbmZpZ3VyZToxMzcyMjogdGVzdCAtcyBjb25mdGVzdC5vCi1jb25maWd1cmU6MTM3MjU6ICQ/ID0gMAotY29uZmlndXJlOjEzNzM2OiByZXN1bHQ6IHllcwotY29uZmlndXJlOjEzNzU0OiBjaGVja2luZyBmb3Igb2JzdGFja3MKLWNvbmZpZ3VyZToxMzc3NTogZ2NjIC1vIGNvbmZ0ZXN0IC1nIC1PMiAgIGNvbmZ0ZXN0LmMgID4mNQotY29uZmlndXJlOjEzNzgxOiAkPyA9IDAKLWNvbmZpZ3VyZToxMzc4NDogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjEzNzg3OiAkPyA9IDAKLWNvbmZpZ3VyZToxMzc5MDogdGVzdCAtcyBjb25mdGVzdAotY29uZmlndXJlOjEzNzkzOiAkPyA9IDAKLWNvbmZpZ3VyZToxMzgwNTogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZToxMzg3ODogY2hlY2tpbmcgZm9yIG1ic3RhdGVfdAotY29uZmlndXJlOjEzOTI5OiByZXN1bHQ6IHllcwotY29uZmlndXJlOjEzOTQ1OiBjaGVja2luZyB3aGV0aGVyIG1icnRvd2MgYW5kIG1ic3RhdGVfdCBhcmUgcHJvcGVybHkgZGVjbGFyZWQKLWNvbmZpZ3VyZToxNDAwMDogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZToxNDA1MTogY2hlY2tpbmcgZm9yIHN0cGNweQotY29uZmlndXJlOjE0MTA4OiBnY2MgLW8gY29uZnRlc3QgLWcgLU8yICAgY29uZnRlc3QuYyAgPiY1Ci1jb25mdGVzdC5jOjEyMDogd2FybmluZzogY29uZmxpY3RpbmcgdHlwZXMgZm9yIGJ1aWx0LWluIGZ1bmN0aW9uICdzdHBjcHknCi1jb25maWd1cmU6MTQxMTQ6ICQ/ID0gMAotY29uZmlndXJlOjE0MTE3OiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6MTQxMjA6ICQ/ID0gMAotY29uZmlndXJlOjE0MTIzOiB0ZXN0IC1zIGNvbmZ0ZXN0Ci1jb25maWd1cmU6MTQxMjY6ICQ/ID0gMAotY29uZmlndXJlOjE0MTM4OiByZXN1bHQ6IHllcwotY29uZmlndXJlOjE0MTcyOiBjaGVja2luZyBmb3Igc3RyZHVwCi1jb25maWd1cmU6MTQyMjk6IGdjYyAtbyBjb25mdGVzdCAtZyAtTzIgICBjb25mdGVzdC5jICA+JjUKLWNvbmZ0ZXN0LmM6MTIxOiB3YXJuaW5nOiBjb25mbGljdGluZyB0eXBlcyBmb3IgYnVpbHQtaW4gZnVuY3Rpb24gJ3N0cmR1cCcKLWNvbmZpZ3VyZToxNDIzNTogJD8gPSAwCi1jb25maWd1cmU6MTQyMzg6IHRlc3QgLXogCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLWNvbmZpZ3VyZToxNDI0MTogJD8gPSAwCi1jb25maWd1cmU6MTQyNDQ6IHRlc3QgLXMgY29uZnRlc3QKLWNvbmZpZ3VyZToxNDI0NzogJD8gPSAwCi1jb25maWd1cmU6MTQyNTk6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6MTQyOTQ6IGNoZWNraW5nIGZvciBzdHJlcnJvcgotY29uZmlndXJlOjE0MzUxOiBnY2MgLW8gY29uZnRlc3QgLWcgLU8yICAgY29uZnRlc3QuYyAgPiY1Ci1jb25maWd1cmU6MTQzNTc6ICQ/ID0gMAotY29uZmlndXJlOjE0MzYwOiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6MTQzNjM6ICQ/ID0gMAotY29uZmlndXJlOjE0MzY2OiB0ZXN0IC1zIGNvbmZ0ZXN0Ci1jb25maWd1cmU6MTQzNjk6ICQ/ID0gMAotY29uZmlndXJlOjE0MzgxOiByZXN1bHQ6IHllcwotY29uZmlndXJlOjE0NDIyOiBjaGVja2luZyBmb3Igd29ya2luZyBzdHJuZHVwCi1jb25maWd1cmU6MTQ0NzQ6IGdjYyAtbyBjb25mdGVzdCAtZyAtTzIgICBjb25mdGVzdC5jICA+JjUKLWNvbmZpZ3VyZToxNDQ3NzogJD8gPSAwCi1jb25maWd1cmU6MTQ0Nzk6IC4vY29uZnRlc3QKLWNvbmZpZ3VyZToxNDQ4MjogJD8gPSAwCi1jb25maWd1cmU6MTQ0OTY6IHJlc3VsdDogeWVzCi1jb25maWd1cmU6MTQ1Mjc6IGNoZWNraW5nIGZvciB3b3JraW5nIHN0cm5sZW4KLWNvbmZpZ3VyZToxNDU2NjogZ2NjIC1vIGNvbmZ0ZXN0IC1nIC1PMiAgIGNvbmZ0ZXN0LmMgID4mNQotY29uZmlndXJlOjE0NTY5OiAkPyA9IDAKLWNvbmZpZ3VyZToxNDU3MTogLi9jb25mdGVzdAotY29uZmlndXJlOjE0NTc0OiAkPyA9IDAKLWNvbmZpZ3VyZToxNDU4ODogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZToxNDYyNjogY2hlY2tpbmcgZm9yIHN0cnRvbAotY29uZmlndXJlOjE0NjgzOiBnY2MgLW8gY29uZnRlc3QgLWcgLU8yICAgY29uZnRlc3QuYyAgPiY1Ci1jb25maWd1cmU6MTQ2ODk6ICQ/ID0gMAotY29uZmlndXJlOjE0NjkyOiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6MTQ2OTU6ICQ/ID0gMAotY29uZmlndXJlOjE0Njk4OiB0ZXN0IC1zIGNvbmZ0ZXN0Ci1jb25maWd1cmU6MTQ3MDE6ICQ/ID0gMAotY29uZmlndXJlOjE0NzEzOiByZXN1bHQ6IHllcwotY29uZmlndXJlOjE0NzUyOiBjaGVja2luZyBmb3Igc3RydG91bAotY29uZmlndXJlOjE0ODA5OiBnY2MgLW8gY29uZnRlc3QgLWcgLU8yICAgY29uZnRlc3QuYyAgPiY1Ci1jb25maWd1cmU6MTQ4MTU6ICQ/ID0gMAotY29uZmlndXJlOjE0ODE4OiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6MTQ4MjE6ICQ/ID0gMAotY29uZmlndXJlOjE0ODI0OiB0ZXN0IC1zIGNvbmZ0ZXN0Ci1jb25maWd1cmU6MTQ4Mjc6ICQ/ID0gMAotY29uZmlndXJlOjE0ODM5OiByZXN1bHQ6IHllcwotY29uZmlndXJlOjE0ODg0OiBjaGVja2luZyBmb3Igc3RydmVyc2NtcAotY29uZmlndXJlOjE0OTQxOiBnY2MgLW8gY29uZnRlc3QgLWcgLU8yICAgY29uZnRlc3QuYyAgPiY1Ci1jb25maWd1cmU6MTQ5NDc6ICQ/ID0gMAotY29uZmlndXJlOjE0OTUwOiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6MTQ5NTM6ICQ/ID0gMAotY29uZmlndXJlOjE0OTU2OiB0ZXN0IC1zIGNvbmZ0ZXN0Ci1jb25maWd1cmU6MTQ5NTk6ICQ/ID0gMAotY29uZmlndXJlOjE0OTcxOiByZXN1bHQ6IHllcwotY29uZmlndXJlOjE1MDA0OiBjaGVja2luZyBmb3IgdW5pc3RkLmgKLWNvbmZpZ3VyZToxNTAwOTogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZToxNTM4NjogY2hlY2tpbmcgZm9yIHZhbGdyaW5kCi1jb25maWd1cmU6MTU0MTU6IHJlc3VsdDogbm8KLWNvbmZpZ3VyZToxNTQ3NDogY2hlY2tpbmcgZm9yIGcrKwotY29uZmlndXJlOjE1NDkwOiBmb3VuZCAvdXNyL2Jpbi9nKysKLWNvbmZpZ3VyZToxNTUwMDogcmVzdWx0OiBnKysKLWNvbmZpZ3VyZToxNTUxNjogY2hlY2tpbmcgZm9yIEMrKyBjb21waWxlciB2ZXJzaW9uCi1jb25maWd1cmU6MTU1MTk6IGcrKyAtLXZlcnNpb24gPC9kZXYvbnVsbCA+JjUKLWcrKyAoR0NDKSA0LjAuMyAoVWJ1bnR1IDQuMC4zLTF1YnVudHU1KQotQ29weXJpZ2h0IChDKSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KLXdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1jb25maWd1cmU6MTU1MjI6ICQ/ID0gMAotY29uZmlndXJlOjE1NTI0OiBnKysgLXYgPC9kZXYvbnVsbCA+JjUKLVVzaW5nIGJ1aWx0LWluIHNwZWNzLgotVGFyZ2V0OiBpNDg2LWxpbnV4LWdudQotQ29uZmlndXJlZCB3aXRoOiAuLi9zcmMvY29uZmlndXJlIC12IC0tZW5hYmxlLWxhbmd1YWdlcz1jLGMrKyxqYXZhLGY5NSxvYmpjLGFkYSx0cmVlbGFuZyAtLXByZWZpeD0vdXNyIC0tZW5hYmxlLXNoYXJlZCAtLXdpdGgtc3lzdGVtLXpsaWIgLS1saWJleGVjZGlyPS91c3IvbGliIC0td2l0aG91dC1pbmNsdWRlZC1nZXR0ZXh0IC0tZW5hYmxlLXRocmVhZHM9cG9zaXggLS1lbmFibGUtbmxzIC0tcHJvZ3JhbS1zdWZmaXg9LTQuMCAtLWVuYWJsZS1fX2N4YV9hdGV4aXQgLS1lbmFibGUtY2xvY2FsZT1nbnUgLS1lbmFibGUtbGlic3RkY3h4LWRlYnVnIC0tZW5hYmxlLWphdmEtYXd0PWd0ay1kZWZhdWx0IC0tZW5hYmxlLWd0ay1jYWlybyAtLXdpdGgtamF2YS1ob21lPS91c3IvbGliL2p2bS9qYXZhLTEuNC4yLWdjai00LjAtMS40LjIuMC9qcmUgLS1lbmFibGUtbXBmciAtLWRpc2FibGUtd2Vycm9yIC0td2l0aC10dW5lPXBlbnRpdW00IC0tZW5hYmxlLWNoZWNraW5nPXJlbGVhc2UgaTQ4Ni1saW51eC1nbnUKLVRocmVhZCBtb2RlbDogcG9zaXgKLWdjYyB2ZXJzaW9uIDQuMC4zIChVYnVudHUgNC4wLjMtMXVidW50dTUpCi1jb25maWd1cmU6MTU1Mjc6ICQ/ID0gMAotY29uZmlndXJlOjE1NTI5OiBnKysgLVYgPC9kZXYvbnVsbCA+JjUKLWcrKzogJy1WJyBvcHRpb24gbXVzdCBoYXZlIGFyZ3VtZW50Ci1jb25maWd1cmU6MTU1MzI6ICQ/ID0gMQotY29uZmlndXJlOjE1NTM1OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMrKyBjb21waWxlcgotY29uZmlndXJlOjE1NTU5OiBnKysgLWMgICBjb25mdGVzdC5jYyA+JjUKLWNvbmZpZ3VyZToxNTU2NTogJD8gPSAwCi1jb25maWd1cmU6MTU1Njg6IHRlc3QgLXogCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLWNvbmZpZ3VyZToxNTU3MTogJD8gPSAwCi1jb25maWd1cmU6MTU1NzQ6IHRlc3QgLXMgY29uZnRlc3QubwotY29uZmlndXJlOjE1NTc3OiAkPyA9IDAKLWNvbmZpZ3VyZToxNTU5MDogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZToxNTU5NjogY2hlY2tpbmcgd2hldGhlciBnKysgYWNjZXB0cyAtZwotY29uZmlndXJlOjE1NjE3OiBnKysgLWMgLWcgIGNvbmZ0ZXN0LmNjID4mNQotY29uZmlndXJlOjE1NjIzOiAkPyA9IDAKLWNvbmZpZ3VyZToxNTYyNjogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjE1NjI5OiAkPyA9IDAKLWNvbmZpZ3VyZToxNTYzMjogdGVzdCAtcyBjb25mdGVzdC5vCi1jb25maWd1cmU6MTU2MzU6ICQ/ID0gMAotY29uZmlndXJlOjE1NjQ2OiByZXN1bHQ6IHllcwotY29uZmlndXJlOjE1Njg4OiBnKysgLWMgLWcgLU8yICBjb25mdGVzdC5jYyA+JjUKLWNvbmZpZ3VyZToxNTY5NDogJD8gPSAwCi1jb25maWd1cmU6MTU2OTc6IHRlc3QgLXogCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLWNvbmZpZ3VyZToxNTcwMDogJD8gPSAwCi1jb25maWd1cmU6MTU3MDM6IHRlc3QgLXMgY29uZnRlc3QubwotY29uZmlndXJlOjE1NzA2OiAkPyA9IDAKLWNvbmZpZ3VyZToxNTczMjogZysrIC1jIC1nIC1PMiAgY29uZnRlc3QuY2MgPiY1Ci1jb25mdGVzdC5jYzogSW4gZnVuY3Rpb24gJ2ludCBtYWluKCknOgotY29uZnRlc3QuY2M6MTEwOiBlcnJvcjogJ2V4aXQnIHdhcyBub3QgZGVjbGFyZWQgaW4gdGhpcyBzY29wZQotY29uZmlndXJlOjE1NzM4OiAkPyA9IDEKLWNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOgotfCAvKiBjb25mZGVmcy5oLiAgKi8KLXwgCi18ICNkZWZpbmUgUEFDS0FHRV9OQU1FICJHTlUgQmlzb24iCi18ICNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICJiaXNvbiIKLXwgI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIjIuMyIKLXwgI2RlZmluZSBQQUNLQUdFX1NUUklORyAiR05VIEJpc29uIDIuMyIKLXwgI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiYnVnLWJpc29uQGdudS5vcmciCi18ICNkZWZpbmUgUEFDS0FHRSAiYmlzb24iCi18ICNkZWZpbmUgVkVSU0lPTiAiMi4zIgotfCAjZGVmaW5lIF9HTlVfU09VUkNFIDEKLXwgI2RlZmluZSBTVERDX0hFQURFUlMgMQotfCAjZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMQotfCAjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCi18ICNkZWZpbmUgSEFWRV9TVERMSUJfSCAxCi18ICNkZWZpbmUgSEFWRV9TVFJJTkdfSCAxCi18ICNkZWZpbmUgSEFWRV9NRU1PUllfSCAxCi18ICNkZWZpbmUgSEFWRV9TVFJJTkdTX0ggMQotfCAjZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAxCi18ICNkZWZpbmUgSEFWRV9TVERJTlRfSCAxCi18ICNkZWZpbmUgSEFWRV9VTklTVERfSCAxCi18ICNkZWZpbmUgX19FWFRFTlNJT05TX18gMQotfCAjZGVmaW5lIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUyAxCi18ICNkZWZpbmUgWVlURVhUX1BPSU5URVIgMQotfCAjZGVmaW5lIE00ICIvdXNyL2Jpbi9tNCIKLXwgI2RlZmluZSBIQVZFX0xPQ0FMRV9IIDEKLXwgI2RlZmluZSBIQVZFX1dDSEFSX0ggMQotfCAjZGVmaW5lIEhBVkVfV0NUWVBFX0ggMQotfCAjZGVmaW5lIEhBVkVfX0JPT0wgMQotfCAjZGVmaW5lIEhBVkVfU1REQk9PTF9IIDEKLXwgI2RlZmluZSBIQVZFX1VJTlRQVFJfVCAxCi18ICNkZWZpbmUgSEFWRV9TRVRMT0NBTEUgMQotfCAjZGVmaW5lIEhBVkVfSVNBU0NJSSAxCi18ICNkZWZpbmUgSEFWRV9JU1dQUklOVCAxCi18ICNkZWZpbmUgSEFWRV9NQlNJTklUIDEKLXwgI2RlZmluZSBIQVZFX1NZU19XQUlUX0ggMQotfCAjZGVmaW5lIEhBVkVfRFVQMiAxCi18ICNkZWZpbmUgSEFWRV9XQUlUUElEIDEKLXwgI2RlZmluZSBIQVZFX1VOSVNURF9IIDEKLXwgI2RlZmluZSBIQVZFX0ZPUksgMQotfCAjZGVmaW5lIEhBVkVfVkZPUksgMQotfCAjZGVmaW5lIEhBVkVfV09SS0lOR19WRk9SSyAxCi18ICNkZWZpbmUgSEFWRV9XT1JLSU5HX0ZPUksgMQotfCAjZGVmaW5lIEhBVkVfU1lTX1RJTUVfSCAxCi18ICNkZWZpbmUgSEFWRV9TWVNfVElNRVNfSCAxCi18ICNkZWZpbmUgSEFWRV9TWVNfUkVTT1VSQ0VfSCAxCi18ICNkZWZpbmUgSEFWRV9USU1FUyAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX0dFVFJVU0FHRSAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX1RJTUVTIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfQ0xPQ0sgMAotfCAjZGVmaW5lIEhBVkVfREVDTF9TWVNDT05GIDEKLXwgI2RlZmluZSBIQVZFX0NMT0NLX1QgMQotfCAjZGVmaW5lIEhBVkVfU1RSVUNUX1RNUyAxCi18ICNkZWZpbmUgRklMRV9TWVNURU1fQUNDRVBUU19EUklWRV9MRVRURVJfUFJFRklYIDAKLXwgI2RlZmluZSBGSUxFX1NZU1RFTV9CQUNLU0xBU0hfSVNfRklMRV9OQU1FX1NFUEFSQVRPUiAwCi18ICNkZWZpbmUgSEFWRV9ERUNMX1NUUkVSUk9SX1IgMQotfCAjZGVmaW5lIEhBVkVfU1RSRVJST1JfUiAxCi18ICNkZWZpbmUgU1RSRVJST1JfUl9DSEFSX1AgMQotfCAjZGVmaW5lIEhBVkVfR0VUT1BUX0ggMQotfCAjZGVmaW5lIEhBVkVfR0VUT1BUX0xPTkdfT05MWSAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX0dFVEVOViAxCi18ICNkZWZpbmUgSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWCAxCi18ICNkZWZpbmUgSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVggMQotfCAjZGVmaW5lIEhBVkVfVU5TSUdORURfTE9OR19MT05HIDEKLXwgI2RlZmluZSBIQVZFX1VJTlRNQVhfVCAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX1NUUkRVUCAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX1NUUk5EVVAgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9TVFJOTEVOIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfQ0xFQVJFUlJfVU5MT0NLRUQgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9GRU9GX1VOTE9DS0VEIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfRkVSUk9SX1VOTE9DS0VEIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfRkZMVVNIX1VOTE9DS0VEIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfRkdFVFNfVU5MT0NLRUQgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9GUFVUQ19VTkxPQ0tFRCAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX0ZQVVRTX1VOTE9DS0VEIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfRlJFQURfVU5MT0NLRUQgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9GV1JJVEVfVU5MT0NLRUQgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9HRVRDX1VOTE9DS0VEIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfR0VUQ0hBUl9VTkxPQ0tFRCAxCi18ICNkZWZpbmUgSEFWRV9ERUNMX1BVVENfVU5MT0NLRUQgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9QVVRDSEFSX1VOTE9DS0VEIDEKLXwgI2RlZmluZSBFTkFCTEVfTkxTIDEKLXwgI2RlZmluZSBIQVZFX0dFVFRFWFQgMQotfCAjZGVmaW5lIEhBVkVfRENHRVRURVhUIDEKLXwgI2RlZmluZSBIQVZFX1NURExJQl9IIDEKLXwgI2RlZmluZSBIQVZFX01BTExPQyAxCi18ICNkZWZpbmUgSEFWRV9JU1dDTlRSTCAxCi18ICNkZWZpbmUgSEFWRV9XQ1dJRFRIIDEKLXwgI2RlZmluZSBIQVZFX01CUlRPV0MgMQotfCAjZGVmaW5lIEhBVkVfREVDTF9XQ1dJRFRIIDEKLXwgI2RlZmluZSBIQVZFX0RFQ0xfTUJTV0lEVEhfSU5fV0NIQVJfSCAwCi18ICNkZWZpbmUgSEFWRV9NQlNUQVRFX1QgMQotfCAjZGVmaW5lIEhBVkVfT0JTVEFDSyAxCi18ICNkZWZpbmUgSEFWRV9NQlNUQVRFX1QgMQotfCAjZGVmaW5lIEhBVkVfTUJSVE9XQyAxCi18ICNkZWZpbmUgSEFWRV9TVFBDUFkgMQotfCAjZGVmaW5lIEhBVkVfU1RSRFVQIDEKLXwgI2RlZmluZSBIQVZFX1NUUkVSUk9SIDEKLXwgI2RlZmluZSBIQVZFX1NUUk5EVVAgMQotfCAjZGVmaW5lIEhBVkVfU1RSVE9MIDEKLXwgI2RlZmluZSBIQVZFX1NUUlRPVUwgMQotfCAjZGVmaW5lIEhBVkVfU1RSVkVSU0NNUCAxCi18ICNkZWZpbmUgSEFWRV9VTklTVERfSCAxCi18ICNkZWZpbmUgVVNFX1VOTE9DS0VEX0lPIDEKLXwgI2RlZmluZSBZWUVOQUJMRV9OTFMgMQotfCAvKiBlbmQgY29uZmRlZnMuaC4gICovCi18IAotfCBpbnQKLXwgbWFpbiAoKQotfCB7Ci18IGV4aXQgKDQyKTsKLXwgICA7Ci18ICAgcmV0dXJuIDA7Ci18IH0KLWNvbmZpZ3VyZToxNTY4ODogZysrIC1jIC1nIC1PMiAgY29uZnRlc3QuY2MgPiY1Ci1jb25maWd1cmU6MTU2OTQ6ICQ/ID0gMAotY29uZmlndXJlOjE1Njk3OiB0ZXN0IC16IAkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi1jb25maWd1cmU6MTU3MDA6ICQ/ID0gMAotY29uZmlndXJlOjE1NzAzOiB0ZXN0IC1zIGNvbmZ0ZXN0Lm8KLWNvbmZpZ3VyZToxNTcwNjogJD8gPSAwCi1jb25maWd1cmU6MTU3MzI6IGcrKyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmNjID4mNQotY29uZmlndXJlOjE1NzM4OiAkPyA9IDAKLWNvbmZpZ3VyZToxNTc0MTogdGVzdCAteiAJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotY29uZmlndXJlOjE1NzQ0OiAkPyA9IDAKLWNvbmZpZ3VyZToxNTc0NzogdGVzdCAtcyBjb25mdGVzdC5vCi1jb25maWd1cmU6MTU3NTA6ICQ/ID0gMAotY29uZmlndXJlOjE1Nzc1OiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mIGcrKwotY29uZmlndXJlOjE1ODY1OiByZXN1bHQ6IGdjYzMKLWNvbmZpZ3VyZToxNTg4NDogY2hlY2tpbmcgd2hldGhlciBnKysgYnVpbGRzIGV4ZWN1dGFibGVzIHRoYXQgd29yawotY29uZmlndXJlOjE1OTI0OiBnKysgLWMgLWcgLU8yICBjb25mdGVzdC5jYyA+JjUKLWNvbmZpZ3VyZToxNTkzMDogJD8gPSAwCi1jb25maWd1cmU6MTU5MzM6IHRlc3QgLXogCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLWNvbmZpZ3VyZToxNTkzNjogJD8gPSAwCi1jb25maWd1cmU6MTU5Mzk6IHRlc3QgLXMgY29uZnRlc3QubwotY29uZmlndXJlOjE1OTQyOiAkPyA9IDAKLWNvbmZpZ3VyZToxNTk0NTogZysrIC1vIGNvbmZ0ZXN0IC1nIC1PMiAgIGNvbmZ0ZXN0Lm8gID4mNQotY29uZmlndXJlOjE1OTQ4OiAkPyA9IDAKLWNvbmZpZ3VyZToxNTk1NDogLi9jb25mdGVzdAotY29uZmlndXJlOjE1OTU3OiAkPyA9IDAKLWNvbmZpZ3VyZToxNTk4MDogcmVzdWx0OiB5ZXMKLWNvbmZpZ3VyZToxNjE1MTogY3JlYXRpbmcgLi9jb25maWcuc3RhdHVzCi0KLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJ1bm5pbmcgY29uZmlnLnN0YXR1cy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLQotVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSBHTlUgQmlzb24gY29uZmlnLnN0YXR1cyAyLjMsIHdoaWNoIHdhcwotZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCi0KLSAgQ09ORklHX0ZJTEVTICAgID0gCi0gIENPTkZJR19IRUFERVJTICA9IAotICBDT05GSUdfTElOS1MgICAgPSAKLSAgQ09ORklHX0NPTU1BTkRTID0gCi0gICQgLi9jb25maWcuc3RhdHVzIAotCi1vbiBwaGFubmEuY25jLmNvcnAuZ29vZ2xlLmNvbQotCi1jb25maWcuc3RhdHVzOjgwMjogY3JlYXRpbmcgcnVudGltZS1wby9NYWtlZmlsZS5pbgotY29uZmlnLnN0YXR1czo4MDI6IGNyZWF0aW5nIHRlc3RzL01ha2VmaWxlCi1jb25maWcuc3RhdHVzOjgwMjogY3JlYXRpbmcgdGVzdHMvYXRsb2NhbAotY29uZmlnLnN0YXR1czo4MDI6IGNyZWF0aW5nIHRlc3RzL2Jpc29uCi1jb25maWcuc3RhdHVzOjgwMjogY3JlYXRpbmcgTWFrZWZpbGUKLWNvbmZpZy5zdGF0dXM6ODAyOiBjcmVhdGluZyBidWlsZC1hdXgvTWFrZWZpbGUKLWNvbmZpZy5zdGF0dXM6ODAyOiBjcmVhdGluZyBwby9NYWtlZmlsZS5pbgotY29uZmlnLnN0YXR1czo4MDI6IGNyZWF0aW5nIGRhdGEvTWFrZWZpbGUKLWNvbmZpZy5zdGF0dXM6ODAyOiBjcmVhdGluZyBleGFtcGxlcy9NYWtlZmlsZQotY29uZmlnLnN0YXR1czo4MDI6IGNyZWF0aW5nIGV4YW1wbGVzL2NhbGMrKy9NYWtlZmlsZQotY29uZmlnLnN0YXR1czo4MDI6IGNyZWF0aW5nIGxpYi9NYWtlZmlsZQotY29uZmlnLnN0YXR1czo4MDI6IGNyZWF0aW5nIHNyYy9NYWtlZmlsZQotY29uZmlnLnN0YXR1czo4MDI6IGNyZWF0aW5nIGRvYy9NYWtlZmlsZQotY29uZmlnLnN0YXR1czo4NzI6IGNyZWF0aW5nIGNvbmZpZy5oCi1jb25maWcuc3RhdHVzOjEzNjQ6IGV4ZWN1dGluZyBkZXBmaWxlcyBjb21tYW5kcwotY29uZmlnLnN0YXR1czoxMzY0OiBleGVjdXRpbmcgZGVmYXVsdC0xIGNvbW1hbmRzCi1jb25maWcuc3RhdHVzOjEzNjQ6IGV4ZWN1dGluZyB0ZXN0cy9hdGNvbmZpZyBjb21tYW5kcwotCi0jIyAtLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBDYWNoZSB2YXJpYWJsZXMuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tICMjCi0KLWFjX2N2X2J1aWxkPXg4Nl82NC11bmtub3duLWxpbnV4LWdudQotYWNfY3ZfYnVpbGRfYWxpYXM9eDg2XzY0LXVua25vd24tbGludXgtZ251Ci1hY19jdl9jX2NvbXBpbGVyX2dudT15ZXMKLWFjX2N2X2NfaW5saW5lPWlubGluZQotYWNfY3ZfY3h4X2NvbXBpbGVyX2dudT15ZXMKLWFjX2N2X2Vudl9DQ19zZXQ9Ci1hY19jdl9lbnZfQ0NfdmFsdWU9Ci1hY19jdl9lbnZfQ0ZMQUdTX3NldD0KLWFjX2N2X2Vudl9DRkxBR1NfdmFsdWU9Ci1hY19jdl9lbnZfQ1BQRkxBR1Nfc2V0PQotYWNfY3ZfZW52X0NQUEZMQUdTX3ZhbHVlPQotYWNfY3ZfZW52X0NQUF9zZXQ9Ci1hY19jdl9lbnZfQ1BQX3ZhbHVlPQotYWNfY3ZfZW52X0NYWEZMQUdTX3NldD0KLWFjX2N2X2Vudl9DWFhGTEFHU192YWx1ZT0KLWFjX2N2X2Vudl9DWFhfc2V0PQotYWNfY3ZfZW52X0NYWF92YWx1ZT0KLWFjX2N2X2Vudl9MREZMQUdTX3NldD0KLWFjX2N2X2Vudl9MREZMQUdTX3ZhbHVlPQotYWNfY3ZfZW52X2J1aWxkX2FsaWFzX3NldD0KLWFjX2N2X2Vudl9idWlsZF9hbGlhc192YWx1ZT0KLWFjX2N2X2Vudl9ob3N0X2FsaWFzX3NldD0KLWFjX2N2X2Vudl9ob3N0X2FsaWFzX3ZhbHVlPQotYWNfY3ZfZW52X3RhcmdldF9hbGlhc19zZXQ9Ci1hY19jdl9lbnZfdGFyZ2V0X2FsaWFzX3ZhbHVlPQotYWNfY3ZfZXhlZXh0PQotYWNfY3ZfZnVuY19kdXAyPXllcwotYWNfY3ZfZnVuY19mb3JrPXllcwotYWNfY3ZfZnVuY19mb3JrX3dvcmtzPXllcwotYWNfY3ZfZnVuY19nZXRvcHRfbG9uZ19vbmx5PXllcwotYWNfY3ZfZnVuY19pc2FzY2lpPXllcwotYWNfY3ZfZnVuY19pc3djbnRybD15ZXMKLWFjX2N2X2Z1bmNfaXN3cHJpbnQ9eWVzCi1hY19jdl9mdW5jX21hbGxvY18wX25vbm51bGw9eWVzCi1hY19jdl9mdW5jX21ic2luaXQ9eWVzCi1hY19jdl9mdW5jX29ic3RhY2s9eWVzCi1hY19jdl9mdW5jX3NldGxvY2FsZT15ZXMKLWFjX2N2X2Z1bmNfc3RwY3B5PXllcwotYWNfY3ZfZnVuY19zdHJkdXA9eWVzCi1hY19jdl9mdW5jX3N0cmVycm9yPXllcwotYWNfY3ZfZnVuY19zdHJlcnJvcl9yPXllcwotYWNfY3ZfZnVuY19zdHJlcnJvcl9yX2NoYXJfcD15ZXMKLWFjX2N2X2Z1bmNfc3Rybmxlbl93b3JraW5nPXllcwotYWNfY3ZfZnVuY19zdHJ0b2w9eWVzCi1hY19jdl9mdW5jX3N0cnRvdWw9eWVzCi1hY19jdl9mdW5jX3N0cnZlcnNjbXA9eWVzCi1hY19jdl9mdW5jX3RpbWVzPXllcwotYWNfY3ZfZnVuY192Zm9yaz15ZXMKLWFjX2N2X2Z1bmNfdmZvcmtfd29ya3M9eWVzCi1hY19jdl9mdW5jX3dhaXRwaWQ9eWVzCi1hY19jdl9mdW5jX3djd2lkdGg9eWVzCi1hY19jdl9oYXZlX2RlY2xfY2xlYXJlcnJfdW5sb2NrZWQ9eWVzCi1hY19jdl9oYXZlX2RlY2xfY2xvY2s9bm8KLWFjX2N2X2hhdmVfZGVjbF9mZW9mX3VubG9ja2VkPXllcwotYWNfY3ZfaGF2ZV9kZWNsX2ZlcnJvcl91bmxvY2tlZD15ZXMKLWFjX2N2X2hhdmVfZGVjbF9mZmx1c2hfdW5sb2NrZWQ9eWVzCi1hY19jdl9oYXZlX2RlY2xfZmdldHNfdW5sb2NrZWQ9eWVzCi1hY19jdl9oYXZlX2RlY2xfZnB1dGNfdW5sb2NrZWQ9eWVzCi1hY19jdl9oYXZlX2RlY2xfZnB1dHNfdW5sb2NrZWQ9eWVzCi1hY19jdl9oYXZlX2RlY2xfZnJlYWRfdW5sb2NrZWQ9eWVzCi1hY19jdl9oYXZlX2RlY2xfZndyaXRlX3VubG9ja2VkPXllcwotYWNfY3ZfaGF2ZV9kZWNsX2dldGNfdW5sb2NrZWQ9eWVzCi1hY19jdl9oYXZlX2RlY2xfZ2V0Y2hhcl91bmxvY2tlZD15ZXMKLWFjX2N2X2hhdmVfZGVjbF9nZXRlbnY9eWVzCi1hY19jdl9oYXZlX2RlY2xfZ2V0cnVzYWdlPXllcwotYWNfY3ZfaGF2ZV9kZWNsX21ic3dpZHRoPW5vCi1hY19jdl9oYXZlX2RlY2xfb3B0cmVzZXQ9bm8KLWFjX2N2X2hhdmVfZGVjbF9wdXRjX3VubG9ja2VkPXllcwotYWNfY3ZfaGF2ZV9kZWNsX3B1dGNoYXJfdW5sb2NrZWQ9eWVzCi1hY19jdl9oYXZlX2RlY2xfc3RyZHVwPXllcwotYWNfY3ZfaGF2ZV9kZWNsX3N0cmVycm9yX3I9eWVzCi1hY19jdl9oYXZlX2RlY2xfc3RybmR1cD15ZXMKLWFjX2N2X2hhdmVfZGVjbF9zdHJubGVuPXllcwotYWNfY3ZfaGF2ZV9kZWNsX3N5c2NvbmY9eWVzCi1hY19jdl9oYXZlX2RlY2xfdGltZXM9eWVzCi1hY19jdl9oYXZlX2RlY2xfd2N3aWR0aD15ZXMKLWFjX2N2X2hlYWRlcl9nZXRvcHRfaD15ZXMKLWFjX2N2X2hlYWRlcl9pbnR0eXBlc19oPXllcwotYWNfY3ZfaGVhZGVyX2xvY2FsZV9oPXllcwotYWNfY3ZfaGVhZGVyX21lbW9yeV9oPXllcwotYWNfY3ZfaGVhZGVyX21pbml4X2NvbmZpZ19oPW5vCi1hY19jdl9oZWFkZXJfc3RkYm9vbF9oPXllcwotYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCi1hY19jdl9oZWFkZXJfc3RkaW50X2g9eWVzCi1hY19jdl9oZWFkZXJfc3RkbGliX2g9eWVzCi1hY19jdl9oZWFkZXJfc3RyaW5nX2g9eWVzCi1hY19jdl9oZWFkZXJfc3RyaW5nc19oPXllcwotYWNfY3ZfaGVhZGVyX3N5c19yZXNvdXJjZV9oPXllcwotYWNfY3ZfaGVhZGVyX3N5c19zdGF0X2g9eWVzCi1hY19jdl9oZWFkZXJfc3lzX3RpbWVfaD15ZXMKLWFjX2N2X2hlYWRlcl9zeXNfdGltZXNfaD15ZXMKLWFjX2N2X2hlYWRlcl9zeXNfdHlwZXNfaD15ZXMKLWFjX2N2X2hlYWRlcl9zeXNfd2FpdF9oPXllcwotYWNfY3ZfaGVhZGVyX3VuaXN0ZF9oPXllcwotYWNfY3ZfaGVhZGVyX3Zmb3JrX2g9bm8KLWFjX2N2X2hlYWRlcl93Y2hhcl9oPXllcwotYWNfY3ZfaGVhZGVyX3djdHlwZV9oPXllcwotYWNfY3ZfaG9zdD14ODZfNjQtdW5rbm93bi1saW51eC1nbnUKLWFjX2N2X2hvc3RfYWxpYXM9eDg2XzY0LXVua25vd24tbGludXgtZ251Ci1hY19jdl9saWJfZXJyb3JfYXRfbGluZT15ZXMKLWFjX2N2X2xpYl9mbF95eXdyYXA9eWVzCi1hY19jdl9vYmpleHQ9bwotYWNfY3ZfcGF0aF9HTVNHRk1UPS91c3IvYmluL21zZ2ZtdAotYWNfY3ZfcGF0aF9NND0vdXNyL2Jpbi9tNAotYWNfY3ZfcGF0aF9NU0dGTVQ9L3Vzci9iaW4vbXNnZm10Ci1hY19jdl9wYXRoX01TR01FUkdFPS91c3IvYmluL21zZ21lcmdlCi1hY19jdl9wYXRoX1hHRVRURVhUPS91c3IvYmluL3hnZXR0ZXh0Ci1hY19jdl9wYXRoX2luc3RhbGw9Jy91c3IvYmluL2luc3RhbGwgLWMnCi1hY19jdl9wcm9nX0FXSz1nYXdrCi1hY19jdl9wcm9nX0NQUD0nZ2NjIC1FJwotYWNfY3ZfcHJvZ19MRVg9ZmxleAotYWNfY3ZfcHJvZ19ZQUNDPSdiaXNvbiAteScKLWFjX2N2X3Byb2dfYWNfY3RfQ0M9Z2NjCi1hY19jdl9wcm9nX2FjX2N0X0NYWD1nKysKLWFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPXJhbmxpYgotYWNfY3ZfcHJvZ19jY19nPXllcwotYWNfY3ZfcHJvZ19jY19zdGRjPQotYWNfY3ZfcHJvZ19jeHhfZz15ZXMKLWFjX2N2X3Byb2dfZWdyZXA9J2dyZXAgLUUnCi1hY19jdl9wcm9nX2dudV9tND15ZXMKLWFjX2N2X3Byb2dfbGV4X3Jvb3Q9bGV4Lnl5Ci1hY19jdl9wcm9nX2xleF95eXRleHRfcG9pbnRlcj15ZXMKLWFjX2N2X3Byb2dfbWFrZV9tYWtlX3NldD15ZXMKLWFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPXllcwotYWNfY3ZfdHlwZV9fQm9vbD15ZXMKLWFjX2N2X3R5cGVfY2xvY2tfdD15ZXMKLWFjX2N2X3R5cGVfbWJzdGF0ZV90PXllcwotYWNfY3ZfdHlwZV9waWRfdD15ZXMKLWFjX2N2X3R5cGVfc3RydWN0X3Rtcz15ZXMKLWFjX2N2X3R5cGVfdWludHB0cl90PXllcwotYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmc9eWVzCi1hY19jdl93aW5fb3JfZG9zPW5vCi1hY2xfY3ZfaGFyZGNvZGVfZGlyZWN0PW5vCi1hY2xfY3ZfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotYWNsX2N2X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9Ci1hY2xfY3ZfaGFyZGNvZGVfbWludXNfTD1ubwotYWNsX2N2X2xpYmV4dD1hCi1hY2xfY3ZfcGF0aF9MRD0vdXNyL2Jpbi9sZAotYWNsX2N2X3Byb2dfZ251X2xkPXllcwotYWNsX2N2X3JwYXRoPWRvbmUKLWFjbF9jdl9zaGxpYmV4dD1zbwotYWNsX2N2X3dsPS1XbCwKLWFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPWdjYzMKLWFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1nY2MzCi1hbV9jdl9wcm9nX2NjX3N0ZGM9Ci1iaXNvbl9jdl9jeHhfd29ya3M9eWVzCi1nbF9jdl9mdW5jX2dudV9nZXRvcHQ9eWVzCi1nbF9jdl9mdW5jX21icnRvd2M9eWVzCi1nbF9jdl9mdW5jX3N0cm5kdXA9eWVzCi1nbF9jdl9oZWFkZXJfaW50dHlwZXNfaD15ZXMKLWdsX2N2X2hlYWRlcl9zdGRpbnRfaD15ZXMKLWd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudD1ubwotZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlPW5vCi1ndF9jdl9mdW5jX2dudWdldHRleHQxX2xpYmM9eWVzCi0KLSMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBPdXRwdXQgdmFyaWFibGVzLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKLQotQUNMT0NBTD0nJHtTSEVMTH0gL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC90b29scy9iaXNvbi0yLjMvYnVpbGQtYXV4L21pc3NpbmcgLS1ydW4gYWNsb2NhbC0xLjknCi1BTURFUEJBQ0tTTEFTSD0nXCcKLUFNREVQX0ZBTFNFPScjJwotQU1ERVBfVFJVRT0nJwotQU1UQVI9JyR7U0hFTEx9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9taXNzaW5nIC0tcnVuIHRhcicKLUFVVE9DT05GPScke1NIRUxMfSAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL2Jpc29uLTIuMy9idWlsZC1hdXgvbWlzc2luZyAtLXJ1biBhdXRvY29uZicKLUFVVE9IRUFERVI9JyR7U0hFTEx9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9taXNzaW5nIC0tcnVuIGF1dG9oZWFkZXInCi1BVVRPTTRURT0nJHtTSEVMTH0gL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC90b29scy9iaXNvbi0yLjMvYnVpbGQtYXV4L21pc3NpbmcgLS1ydW4gYXV0b200dGUnCi1BVVRPTUFLRT0nJHtTSEVMTH0gL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC90b29scy9iaXNvbi0yLjMvYnVpbGQtYXV4L21pc3NpbmcgLS1ydW4gYXV0b21ha2UtMS45JwotQVdLPSdnYXdrJwotQklTT05fQ1hYX1dPUktTPSc6JwotQklTT05fQ1hYX1dPUktTX0ZBTFNFPScjJwotQklTT05fQ1hYX1dPUktTX1RSVUU9JycKLUJJU09OX0xPQ0FMRURJUj0nL3Vzci9zaGFyZS9sb2NhbGUnCi1DQz0nZ2NjJwotQ0NERVBNT0RFPSdkZXBtb2RlPWdjYzMnCi1DRkxBR1M9Jy1nIC1PMicKLUNQUD0nZ2NjIC1FJwotQ1BQRkxBR1M9JycKLUNYWD0nZysrJwotQ1hYREVQTU9ERT0nZGVwbW9kZT1nY2MzJwotQ1hYRkxBR1M9Jy1nIC1PMicKLUNZR1BBVEhfVz0nZWNobycKLURFRlM9Jy1ESEFWRV9DT05GSUdfSCcKLURFUERJUj0nLmRlcHMnCi1FQ0hPX0M9JycKLUVDSE9fTj0nLW4nCi1FQ0hPX1Q9JycKLUVHUkVQPSdncmVwIC1FJwotRVhFRVhUPScnCi1HQ0M9J3llcycKLUdFVE9QVF9IPScnCi1HTVNHRk1UPScvdXNyL2Jpbi9tc2dmbXQnCi1IQVZFX19CT09MPScxJwotSU5TVEFMTF9EQVRBPScke0lOU1RBTEx9IC1tIDY0NCcKLUlOU1RBTExfUFJPR1JBTT0nJHtJTlNUQUxMfScKLUlOU1RBTExfU0NSSVBUPScke0lOU1RBTEx9JwotSU5TVEFMTF9TVFJJUF9QUk9HUkFNPScke1NIRUxMfSAkKGluc3RhbGxfc2gpIC1jIC1zJwotSU5UTExJQlM9JycKLUlOVExfTUFDT1NYX0xJQlM9JycKLUxERkxBR1M9JycKLUxFWD0nZmxleCcKLUxFWExJQj0nLWxmbCcKLUxFWF9PVVRQVVRfUk9PVD0nbGV4Lnl5JwotTElCSUNPTlY9Jy1saWNvbnYnCi1MSUJJTlRMPScnCi1MSUJPQkpTPScgZGlybmFtZSRVLm8gZXhpdGZhaWwkVS5vIGhhcmQtbG9jYWxlJFUubyBoYXNoJFUubyBxdW90ZSRVLm8gcXVvdGVhcmckVS5vIGZvcGVuLXNhZmVyJFUubyBkdXAtc2FmZXIkVS5vIGZkLXNhZmVyJFUubyBwaXBlLXNhZmVyJFUubyB4bWFsbG9jJFUubycKLUxJQlM9JycKLUxUTElCSUNPTlY9Jy1saWNvbnYnCi1MVExJQklOVEw9JycKLUxUTElCT0JKUz0nIGRpcm5hbWUkVS5sbyBleGl0ZmFpbCRVLmxvIGhhcmQtbG9jYWxlJFUubG8gaGFzaCRVLmxvIHF1b3RlJFUubG8gcXVvdGVhcmckVS5sbyBmb3Blbi1zYWZlciRVLmxvIGR1cC1zYWZlciRVLmxvIGZkLXNhZmVyJFUubG8gcGlwZS1zYWZlciRVLmxvIHhtYWxsb2MkVS5sbycKLU00PScvdXNyL2Jpbi9tNCcKLU1BS0VJTkZPPScke1NIRUxMfSAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL2Jpc29uLTIuMy9idWlsZC1hdXgvbWlzc2luZyAtLXJ1biBtYWtlaW5mbycKLU1LSU5TVEFMTERJUlM9JyQodG9wX2J1aWxkZGlyKS9idWlsZC1hdXgvbWtpbnN0YWxsZGlycycKLU1TR0ZNVD0nL3Vzci9iaW4vbXNnZm10JwotTVNHTUVSR0U9Jy91c3IvYmluL21zZ21lcmdlJwotTzBDRkxBR1M9Jy1nICcKLU8wQ1hYRkxBR1M9Jy1nICcKLU9CSkVYVD0nbycKLVBBQ0tBR0U9J2Jpc29uJwotUEFDS0FHRV9CVUdSRVBPUlQ9J2J1Zy1iaXNvbkBnbnUub3JnJwotUEFDS0FHRV9OQU1FPSdHTlUgQmlzb24nCi1QQUNLQUdFX1NUUklORz0nR05VIEJpc29uIDIuMycKLVBBQ0tBR0VfVEFSTkFNRT0nYmlzb24nCi1QQUNLQUdFX1ZFUlNJT049JzIuMycKLVBBVEhfU0VQQVJBVE9SPSc6JwotUE9TVUI9J3BvJwotUkFOTElCPSdyYW5saWInCi1TRVRfTUFLRT0nJwotU0hFTEw9Jy9iaW4vc2gnCi1TVERCT09MX0g9JycKLVNUUklQPScnCi1VTklTVERfSD0nJwotVVNFX05MUz0neWVzJwotVkFMR1JJTkQ9JycKLVZFUlNJT049JzIuMycKLVdBUk5JTkdfQ0ZMQUdTPScnCi1XQVJOSU5HX0NYWEZMQUdTPScnCi1XRVJST1JfQ0ZMQUdTPScnCi1YR0VUVEVYVD0nL3Vzci9iaW4veGdldHRleHQnCi1ZQUNDPSdiaXNvbiAteScKLVlBQ0NfTElCUkFSWT0nbGlieS5hJwotWUFDQ19TQ1JJUFQ9J3lhY2MnCi1hY19jdF9DQz0nZ2NjJwotYWNfY3RfQ1hYPSdnKysnCi1hY19jdF9SQU5MSUI9J3JhbmxpYicKLWFjX2N0X1NUUklQPScnCi1hY2xvY2FsZGlyPScke2RhdGFkaXJ9L2FjbG9jYWwnCi1hbV9fZmFzdGRlcENDX0ZBTFNFPScjJwotYW1fX2Zhc3RkZXBDQ19UUlVFPScnCi1hbV9fZmFzdGRlcENYWF9GQUxTRT0nIycKLWFtX19mYXN0ZGVwQ1hYX1RSVUU9JycKLWFtX19pbmNsdWRlPSdpbmNsdWRlJwotYW1fX2xlYWRpbmdfZG90PScuJwotYW1fX3F1b3RlPScnCi1hbV9fdGFyPScke0FNVEFSfSBjaG9mIC0gIiQkdGFyZGlyIicKLWFtX191bnRhcj0nJHtBTVRBUn0geGYgLScKLWJpbmRpcj0nJHtleGVjX3ByZWZpeH0vYmluJwotYnVpbGQ9J3g4Nl82NC11bmtub3duLWxpbnV4LWdudScKLWJ1aWxkX2FsaWFzPScnCi1idWlsZF9jcHU9J3g4Nl82NCcKLWJ1aWxkX29zPSdsaW51eC1nbnUnCi1idWlsZF92ZW5kb3I9J3Vua25vd24nCi1kYXRhZGlyPScke3ByZWZpeH0vc2hhcmUnCi1leGVjX3ByZWZpeD0nJHtwcmVmaXh9JwotaG9zdD0neDg2XzY0LXVua25vd24tbGludXgtZ251JwotaG9zdF9hbGlhcz0nJwotaG9zdF9jcHU9J3g4Nl82NCcKLWhvc3Rfb3M9J2xpbnV4LWdudScKLWhvc3RfdmVuZG9yPSd1bmtub3duJwotaW5jbHVkZWRpcj0nJHtwcmVmaXh9L2luY2x1ZGUnCi1pbmZvZGlyPScke3ByZWZpeH0vaW5mbycKLWluc3RhbGxfc2g9Jy91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9pbnN0YWxsLXNoJwotbGliZGlyPScke2V4ZWNfcHJlZml4fS9saWInCi1saWJleGVjZGlyPScke2V4ZWNfcHJlZml4fS9saWJleGVjJwotbG9jYWxzdGF0ZWRpcj0nJHtwcmVmaXh9L3ZhcicKLW1hbmRpcj0nJHtwcmVmaXh9L21hbicKLW1rZGlyX3A9J21rZGlyIC1wIC0tJwotb2xkaW5jbHVkZWRpcj0nL3Vzci9pbmNsdWRlJwotcHJlZml4PScvaG9tZS9waGFubmEvc3JjL2Jpc29uJwotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0ncyx4LHgsJwotc2JpbmRpcj0nJHtleGVjX3ByZWZpeH0vc2JpbicKLXNoYXJlZHN0YXRlZGlyPScke3ByZWZpeH0vY29tJwotc3lzY29uZmRpcj0nJHtwcmVmaXh9L2V0YycKLXRhcmdldF9hbGlhcz0nJwotCi0jIyAtLS0tLS0tLS0tLSAjIwotIyMgY29uZmRlZnMuaC4gIyMKLSMjIC0tLS0tLS0tLS0tICMjCi0KLSNkZWZpbmUgRU5BQkxFX05MUyAxCi0jZGVmaW5lIEZJTEVfU1lTVEVNX0FDQ0VQVFNfRFJJVkVfTEVUVEVSX1BSRUZJWCAwCi0jZGVmaW5lIEZJTEVfU1lTVEVNX0JBQ0tTTEFTSF9JU19GSUxFX05BTUVfU0VQQVJBVE9SIDAKLSNkZWZpbmUgSEFWRV9DTE9DS19UIDEKLSNkZWZpbmUgSEFWRV9EQ0dFVFRFWFQgMQotI2RlZmluZSBIQVZFX0RFQ0xfQ0xFQVJFUlJfVU5MT0NLRUQgMQotI2RlZmluZSBIQVZFX0RFQ0xfQ0xPQ0sgMAotI2RlZmluZSBIQVZFX0RFQ0xfRkVPRl9VTkxPQ0tFRCAxCi0jZGVmaW5lIEhBVkVfREVDTF9GRVJST1JfVU5MT0NLRUQgMQotI2RlZmluZSBIQVZFX0RFQ0xfRkZMVVNIX1VOTE9DS0VEIDEKLSNkZWZpbmUgSEFWRV9ERUNMX0ZHRVRTX1VOTE9DS0VEIDEKLSNkZWZpbmUgSEFWRV9ERUNMX0ZQVVRDX1VOTE9DS0VEIDEKLSNkZWZpbmUgSEFWRV9ERUNMX0ZQVVRTX1VOTE9DS0VEIDEKLSNkZWZpbmUgSEFWRV9ERUNMX0ZSRUFEX1VOTE9DS0VEIDEKLSNkZWZpbmUgSEFWRV9ERUNMX0ZXUklURV9VTkxPQ0tFRCAxCi0jZGVmaW5lIEhBVkVfREVDTF9HRVRDSEFSX1VOTE9DS0VEIDEKLSNkZWZpbmUgSEFWRV9ERUNMX0dFVENfVU5MT0NLRUQgMQotI2RlZmluZSBIQVZFX0RFQ0xfR0VURU5WIDEKLSNkZWZpbmUgSEFWRV9ERUNMX0dFVFJVU0FHRSAxCi0jZGVmaW5lIEhBVkVfREVDTF9NQlNXSURUSF9JTl9XQ0hBUl9IIDAKLSNkZWZpbmUgSEFWRV9ERUNMX1BVVENIQVJfVU5MT0NLRUQgMQotI2RlZmluZSBIQVZFX0RFQ0xfUFVUQ19VTkxPQ0tFRCAxCi0jZGVmaW5lIEhBVkVfREVDTF9TVFJEVVAgMQotI2RlZmluZSBIQVZFX0RFQ0xfU1RSRVJST1JfUiAxCi0jZGVmaW5lIEhBVkVfREVDTF9TVFJORFVQIDEKLSNkZWZpbmUgSEFWRV9ERUNMX1NUUk5MRU4gMQotI2RlZmluZSBIQVZFX0RFQ0xfU1lTQ09ORiAxCi0jZGVmaW5lIEhBVkVfREVDTF9USU1FUyAxCi0jZGVmaW5lIEhBVkVfREVDTF9XQ1dJRFRIIDEKLSNkZWZpbmUgSEFWRV9EVVAyIDEKLSNkZWZpbmUgSEFWRV9GT1JLIDEKLSNkZWZpbmUgSEFWRV9HRVRPUFRfSCAxCi0jZGVmaW5lIEhBVkVfR0VUT1BUX0xPTkdfT05MWSAxCi0jZGVmaW5lIEhBVkVfR0VUVEVYVCAxCi0jZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAxCi0jZGVmaW5lIEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVggMQotI2RlZmluZSBIQVZFX0lTQVNDSUkgMQotI2RlZmluZSBIQVZFX0lTV0NOVFJMIDEKLSNkZWZpbmUgSEFWRV9JU1dQUklOVCAxCi0jZGVmaW5lIEhBVkVfTE9DQUxFX0ggMQotI2RlZmluZSBIQVZFX01BTExPQyAxCi0jZGVmaW5lIEhBVkVfTUJSVE9XQyAxCi0jZGVmaW5lIEhBVkVfTUJSVE9XQyAxCi0jZGVmaW5lIEhBVkVfTUJTSU5JVCAxCi0jZGVmaW5lIEhBVkVfTUJTVEFURV9UIDEKLSNkZWZpbmUgSEFWRV9NQlNUQVRFX1QgMQotI2RlZmluZSBIQVZFX01FTU9SWV9IIDEKLSNkZWZpbmUgSEFWRV9PQlNUQUNLIDEKLSNkZWZpbmUgSEFWRV9TRVRMT0NBTEUgMQotI2RlZmluZSBIQVZFX1NUREJPT0xfSCAxCi0jZGVmaW5lIEhBVkVfU1RESU5UX0ggMQotI2RlZmluZSBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCAxCi0jZGVmaW5lIEhBVkVfU1RETElCX0ggMQotI2RlZmluZSBIQVZFX1NURExJQl9IIDEKLSNkZWZpbmUgSEFWRV9TVFBDUFkgMQotI2RlZmluZSBIQVZFX1NUUkRVUCAxCi0jZGVmaW5lIEhBVkVfU1RSRVJST1IgMQotI2RlZmluZSBIQVZFX1NUUkVSUk9SX1IgMQotI2RlZmluZSBIQVZFX1NUUklOR1NfSCAxCi0jZGVmaW5lIEhBVkVfU1RSSU5HX0ggMQotI2RlZmluZSBIQVZFX1NUUk5EVVAgMQotI2RlZmluZSBIQVZFX1NUUlRPTCAxCi0jZGVmaW5lIEhBVkVfU1RSVE9VTCAxCi0jZGVmaW5lIEhBVkVfU1RSVUNUX1RNUyAxCi0jZGVmaW5lIEhBVkVfU1RSVkVSU0NNUCAxCi0jZGVmaW5lIEhBVkVfU1lTX1JFU09VUkNFX0ggMQotI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMQotI2RlZmluZSBIQVZFX1NZU19USU1FU19IIDEKLSNkZWZpbmUgSEFWRV9TWVNfVElNRV9IIDEKLSNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxCi0jZGVmaW5lIEhBVkVfU1lTX1dBSVRfSCAxCi0jZGVmaW5lIEhBVkVfVElNRVMgMQotI2RlZmluZSBIQVZFX1VJTlRNQVhfVCAxCi0jZGVmaW5lIEhBVkVfVUlOVFBUUl9UIDEKLSNkZWZpbmUgSEFWRV9VTklTVERfSCAxCi0jZGVmaW5lIEhBVkVfVU5JU1REX0ggMQotI2RlZmluZSBIQVZFX1VOSVNURF9IIDEKLSNkZWZpbmUgSEFWRV9VTlNJR05FRF9MT05HX0xPTkcgMQotI2RlZmluZSBIQVZFX1ZGT1JLIDEKLSNkZWZpbmUgSEFWRV9XQUlUUElEIDEKLSNkZWZpbmUgSEFWRV9XQ0hBUl9IIDEKLSNkZWZpbmUgSEFWRV9XQ1RZUEVfSCAxCi0jZGVmaW5lIEhBVkVfV0NXSURUSCAxCi0jZGVmaW5lIEhBVkVfV09SS0lOR19GT1JLIDEKLSNkZWZpbmUgSEFWRV9XT1JLSU5HX1ZGT1JLIDEKLSNkZWZpbmUgSEFWRV9fQk9PTCAxCi0jZGVmaW5lIE00ICIvdXNyL2Jpbi9tNCIKLSNkZWZpbmUgUEFDS0FHRSAiYmlzb24iCi0jZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICJidWctYmlzb25AZ251Lm9yZyIKLSNkZWZpbmUgUEFDS0FHRV9OQU1FICJHTlUgQmlzb24iCi0jZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICJHTlUgQmlzb24gMi4zIgotI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgImJpc29uIgotI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIjIuMyIKLSNkZWZpbmUgU1REQ19IRUFERVJTIDEKLSNkZWZpbmUgU1RSRVJST1JfUl9DSEFSX1AgMQotI2RlZmluZSBVU0VfVU5MT0NLRURfSU8gMQotI2RlZmluZSBWRVJTSU9OICIyLjMiCi0jZGVmaW5lIFlZRU5BQkxFX05MUyAxCi0jZGVmaW5lIFlZVEVYVF9QT0lOVEVSIDEKLSNkZWZpbmUgX0dOVV9TT1VSQ0UgMQotI2RlZmluZSBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MgMQotI2RlZmluZSBfX0VYVEVOU0lPTlNfXyAxCi0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB2b2lkIHN0ZDo6ZXhpdCAoaW50KSB0aHJvdyAoKTsgdXNpbmcgc3RkOjpleGl0OwotCi1jb25maWd1cmU6IGV4aXQgMApkaWZmIC0tZ2l0IGEvY29uZmlnLnN0YXR1cyBiL2NvbmZpZy5zdGF0dXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDBjNDkwNGEuLjAwMDAwMDAKLS0tIGEvY29uZmlnLnN0YXR1cworKysgL2Rldi9udWxsCkBAIC0xLDE1ODcgKzAsMCBAQAotIyEgL2Jpbi9zaAotIyBHZW5lcmF0ZWQgYnkgY29uZmlndXJlLgotIyBSdW4gdGhpcyBmaWxlIHRvIHJlY3JlYXRlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCi0jIENvbXBpbGVyIG91dHB1dCBwcm9kdWNlZCBieSBjb25maWd1cmUsIHVzZWZ1bCBmb3IgZGVidWdnaW5nCi0jIGNvbmZpZ3VyZSwgaXMgaW4gY29uZmlnLmxvZyBpZiBpdCBleGlzdHMuCi0KLWRlYnVnPWZhbHNlCi1hY19jc19yZWNoZWNrPWZhbHNlCi1hY19jc19zaWxlbnQ9ZmFsc2UKLVNIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9Ci0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIE00c2ggSW5pdGlhbGl6YXRpb24uICAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0KLSMgQmUgQm91cm5lIGNvbXBhdGlibGUKLWlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBlbXVsYXRlIHNoCi0gIE5VTExDTUQ9OgotICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCi0gICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCi0gIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJwotZWxpZiB0ZXN0IC1uICIke0JBU0hfVkVSU0lPTitzZXR9IiAmJiAoc2V0IC1vIHBvc2l4KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgc2V0IC1vIHBvc2l4Ci1maQotRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAotCi0jIFN1cHBvcnQgdW5zZXQgd2hlbiBwb3NzaWJsZS4KLWlmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhc191bnNldD11bnNldAotZWxzZQotICBhc191bnNldD1mYWxzZQotZmkKLQotCi0jIFdvcmsgYXJvdW5kIGJ1Z3MgaW4gcHJlLTMuMCBVV0lOIGtzaC4KLSRhc191bnNldCBFTlYgTUFJTCBNQUlMUEFUSAotUFMxPSckICcKLVBTMj0nPiAnCi1QUzQ9JysgJwotCi0jIE5MUyBudWlzYW5jZXMuCi1mb3IgYXNfdmFyIGluIFwKLSAgTEFORyBMQU5HVUFHRSBMQ19BRERSRVNTIExDX0FMTCBMQ19DT0xMQVRFIExDX0NUWVBFIExDX0lERU5USUZJQ0FUSU9OIFwKLSAgTENfTUVBU1VSRU1FTlQgTENfTUVTU0FHRVMgTENfTU9ORVRBUlkgTENfTkFNRSBMQ19OVU1FUklDIExDX1BBUEVSIFwKLSAgTENfVEVMRVBIT05FIExDX1RJTUUKLWRvCi0gIGlmIChzZXQgK3g7IHRlc3QgLXogImAoZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyKSAyPiYxYCIpOyB0aGVuCi0gICAgZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyCi0gIGVsc2UKLSAgICAkYXNfdW5zZXQgJGFzX3ZhcgotICBmaQotZG9uZQotCi0jIFJlcXVpcmVkIHRvIHVzZSBiYXNlbmFtZS4KLWlmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGFzX2V4cHI9ZXhwcgotZWxzZQotICBhc19leHByPWZhbHNlCi1maQotCi1pZiAoYmFzZW5hbWUgLykgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgIlhgYmFzZW5hbWUgLyAyPiYxYCIgPSAiWC8iOyB0aGVuCi0gIGFzX2Jhc2VuYW1lPWJhc2VuYW1lCi1lbHNlCi0gIGFzX2Jhc2VuYW1lPWZhbHNlCi1maQotCi0KLSMgTmFtZSBvZiB0aGUgZXhlY3V0YWJsZS4KLWFzX21lPWAkYXNfYmFzZW5hbWUgIiQwIiB8fAotJGFzX2V4cHIgWC8iJDAiIDogJy4qL1woW14vXVteL10qXCkvKiQnIFx8IFwKLQkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkMCIgOiAnWFwoL1wpJCcgXHwgXAotCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWC8iJDAiIHwKLSAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwvXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwvXChcL1wpLioveyBzLy9cMS87IHE7IH0KLSAgCSAgcy8uKi8uLzsgcSdgCi0KLQotIyBQQVRIIG5lZWRzIENSLCBhbmQgTElORU5PIG5lZWRzIENSIGFuZCBQQVRILgotIyBBdm9pZCBkZXBlbmRpbmcgdXBvbiBDaGFyYWN0ZXIgUmFuZ2VzLgotYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCi1hc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKLWFzX2NyX0xldHRlcnM9JGFzX2NyX2xldHRlcnMkYXNfY3JfTEVUVEVSUwotYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JwotYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCi0KLSMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgotaWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KLSAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAotICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCi0gIGNobW9kICt4IGNvbmYkJC5zaAotICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgIFBBVEhfU0VQQVJBVE9SPSc7JwotICBlbHNlCi0gICAgUEFUSF9TRVBBUkFUT1I9OgotICBmaQotICBybSAtZiBjb25mJCQuc2gKLWZpCi0KLQotICBhc19saW5lbm9fMT0kTElORU5PCi0gIGFzX2xpbmVub18yPSRMSU5FTk8KLSAgYXNfbGluZW5vXzM9YChleHByICRhc19saW5lbm9fMSArIDEpIDI+L2Rldi9udWxsYAotICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKLSAgdGVzdCAieCRhc19saW5lbm9fMyIgID0gIngkYXNfbGluZW5vXzIiICB8fCB7Ci0gICMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIHBhdGggYXQgYWxsCi0gICMgcmVsYXRpdmUgb3Igbm90LgotICBjYXNlICQwIGluCi0gICAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OwotICAgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKLWRvbmUKLQotICAgICAgIDs7Ci0gIGVzYWMKLSAgIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJwotICAjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KLSAgaWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgotICAgIGFzX215c2VsZj0kMAotICBmaQotICBpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIHBhdGgiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIHBhdGgiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgZmkKLSAgY2FzZSAkQ09ORklHX1NIRUxMIGluCi0gICcnKQotICAgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbwotCSBjYXNlICRhc19kaXIgaW4KLQkgLyopCi0JICAgaWYgKCIkYXNfZGlyLyRhc19iYXNlIiAtYyAnCi0gIGFzX2xpbmVub18xPSRMSU5FTk8KLSAgYXNfbGluZW5vXzI9JExJTkVOTwotICBhc19saW5lbm9fMz1gKGV4cHIgJGFzX2xpbmVub18xICsgMSkgMj4vZGV2L251bGxgCi0gIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgotICB0ZXN0ICJ4JGFzX2xpbmVub18zIiAgPSAieCRhc19saW5lbm9fMiIgJykgMj4vZGV2L251bGw7IHRoZW4KLQkgICAgICRhc191bnNldCBCQVNIX0VOViB8fCB0ZXN0ICIke0JBU0hfRU5WK3NldH0iICE9IHNldCB8fCB7IEJBU0hfRU5WPTsgZXhwb3J0IEJBU0hfRU5WOyB9Ci0JICAgICAkYXNfdW5zZXQgRU5WIHx8IHRlc3QgIiR7RU5WK3NldH0iICE9IHNldCB8fCB7IEVOVj07IGV4cG9ydCBFTlY7IH0KLQkgICAgIENPTkZJR19TSEVMTD0kYXNfZGlyLyRhc19iYXNlCi0JICAgICBleHBvcnQgQ09ORklHX1NIRUxMCi0JICAgICBleGVjICIkQ09ORklHX1NIRUxMIiAiJDAiICR7MSsiJEAifQotCSAgIGZpOzsKLQkgZXNhYwotICAgICAgIGRvbmUKLWRvbmUKLTs7Ci0gIGVzYWMKLQotICAjIENyZWF0ZSAkYXNfbWUubGluZW5vIGFzIGEgY29weSBvZiAkYXNfbXlzZWxmLCBidXQgd2l0aCAkTElORU5PCi0gICMgdW5pZm9ybWx5IHJlcGxhY2VkIGJ5IHRoZSBsaW5lIG51bWJlci4gIFRoZSBmaXJzdCAnc2VkJyBpbnNlcnRzIGEKLSAgIyBsaW5lLW51bWJlciBsaW5lIGJlZm9yZSBlYWNoIGxpbmU7IHRoZSBzZWNvbmQgJ3NlZCcgZG9lcyB0aGUgcmVhbAotICAjIHdvcmsuICBUaGUgc2Vjb25kIHNjcmlwdCB1c2VzICdOJyB0byBwYWlyIGVhY2ggbGluZS1udW1iZXIgbGluZQotICAjIHdpdGggdGhlIG51bWJlcmVkIGxpbmUsIGFuZCBhcHBlbmRzIHRyYWlsaW5nICctJyBkdXJpbmcKLSAgIyBzdWJzdGl0dXRpb24gc28gdGhhdCAkTElORU5PIGlzIG5vdCBhIHNwZWNpYWwgY2FzZSBhdCBsaW5lIGVuZC4KLSAgIyAoUmFqYSBSIEhhcmluYXRoIHN1Z2dlc3RlZCBzZWQgJz0nLCBhbmQgUGF1bCBFZ2dlcnQgd3JvdGUgdGhlCi0gICMgc2Vjb25kICdzZWQnIHNjcmlwdC4gIEJsYW1lIExlZSBFLiBNY01haG9uIGZvciBzZWQncyBzeW50YXguICA6LSkKLSAgc2VkICc9JyA8JGFzX215c2VsZiB8Ci0gICAgc2VkICcKLSAgICAgIE4KLSAgICAgIHMsJCwtLAotICAgICAgOiBsb29wCi0gICAgICBzLF5cKFsnJGFzX2NyX2RpZ2l0cyddKlwpXCguKlwpWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX11cKSxcMVwyXDFcMywKLSAgICAgIHQgbG9vcAotICAgICAgcywtJCwsCi0gICAgICBzLF5bJyRhc19jcl9kaWdpdHMnXSpcbiwsCi0gICAgJyA+JGFzX21lLmxpbmVubyAmJgotICBjaG1vZCAreCAkYXNfbWUubGluZW5vIHx8Ci0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSAkYXNfbWUubGluZW5vOyByZXJ1biB3aXRoIGEgUE9TSVggc2hlbGwiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSAkYXNfbWUubGluZW5vOyByZXJ1biB3aXRoIGEgUE9TSVggc2hlbGwiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLQotICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcwotICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKLSAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpYmxlIHRvIHRoaXMpLgotICAuIC4vJGFzX21lLmxpbmVubwotICAjIEV4aXQgc3RhdHVzIGlzIHRoYXQgb2YgdGhlIGxhc3QgY29tbWFuZC4KLSAgZXhpdAotfQotCi0KLWNhc2UgYGVjaG8gInRlc3RpbmdcYyI7IGVjaG8gMSwyLDNgLGBlY2hvIC1uIHRlc3Rpbmc7IGVjaG8gMSwyLDNgIGluCi0gICpjKiwtbiopIEVDSE9fTj0gRUNIT19DPScKLScgRUNIT19UPScJJyA7OwotICAqYyosKiAgKSBFQ0hPX049LW4gRUNIT19DPSBFQ0hPX1Q9IDs7Ci0gICopICAgICAgIEVDSE9fTj0gRUNIT19DPSdcYycgRUNIT19UPSA7OwotZXNhYwotCi1pZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhc19leHByPWV4cHIKLWVsc2UKLSAgYXNfZXhwcj1mYWxzZQotZmkKLQotcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKLWVjaG8gPmNvbmYkJC5maWxlCi1pZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KLSAgIyBXZSBjb3VsZCBqdXN0IGNoZWNrIGZvciBESkdQUDsgYnV0IHRoaXMgdGVzdCBhKSB3b3JrcyBiKSBpcyBtb3JlIGdlbmVyaWMKLSAgIyBhbmQgYykgd2lsbCByZW1haW4gdmFsaWQgb25jZSBESkdQUCBzdXBwb3J0cyBzeW1saW5rcyAoREpHUFAgMi4wNCkuCi0gIGlmIHRlc3QgLWYgY29uZiQkLmV4ZTsgdGhlbgotICAgICMgRG9uJ3QgdXNlIGxuIGF0IGFsbDsgd2UgZG9uJ3QgaGF2ZSBhbnkgbGlua3MKLSAgICBhc19sbl9zPSdjcCAtcCcKLSAgZWxzZQotICAgIGFzX2xuX3M9J2xuIC1zJwotICBmaQotZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KLSAgYXNfbG5fcz1sbgotZWxzZQotICBhc19sbl9zPSdjcCAtcCcKLWZpCi1ybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQotCi1pZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCi0gIGFzX21rZGlyX3A9OgotZWxzZQotICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAotICBhc19ta2Rpcl9wPWZhbHNlCi1maQotCi1hc19leGVjdXRhYmxlX3A9InRlc3QgLWYiCi0KLSMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KLWFzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCi0KLSMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgotYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKLQotCi0jIElGUwotIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4KLWFzX25sPScKLScKLUlGUz0iIAkkYXNfbmwiCi0KLSMgQ0RQQVRILgotJGFzX3Vuc2V0IENEUEFUSAotCi1leGVjIDY+JjEKLQotIyBPcGVuIHRoZSBsb2cgcmVhbCBzb29uLCB0byBrZWVwIFwkWzBdIGFuZCBzbyBvbiBtZWFuaW5nZnVsLCBhbmQgdG8KLSMgcmVwb3J0IGFjdHVhbCBpbnB1dCB2YWx1ZXMgb2YgQ09ORklHX0ZJTEVTIGV0Yy4gaW5zdGVhZCBvZiB0aGVpcgotIyB2YWx1ZXMgYWZ0ZXIgb3B0aW9ucyBoYW5kbGluZy4gIExvZ2dpbmcgLS12ZXJzaW9uIGV0Yy4gaXMgT0suCi1leGVjIDU+PmNvbmZpZy5sb2cKLXsKLSAgZWNobwotICBzZWQgJ2g7cy8uLy0vZztzL14uLi4vIyMgLztzLy4uLiQvICMjLztwO3g7cDt4JyA8PF9BU0JPWAotIyMgUnVubmluZyAkYXNfbWUuICMjCi1fQVNCT1gKLX0gPiY1Ci1jYXQgPiY1IDw8X0NTRU9GCi0KLVRoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgR05VIEJpc29uICRhc19tZSAyLjMsIHdoaWNoIHdhcwotZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCi0KLSAgQ09ORklHX0ZJTEVTICAgID0gJENPTkZJR19GSUxFUwotICBDT05GSUdfSEVBREVSUyAgPSAkQ09ORklHX0hFQURFUlMKLSAgQ09ORklHX0xJTktTICAgID0gJENPTkZJR19MSU5LUwotICBDT05GSUdfQ09NTUFORFMgPSAkQ09ORklHX0NPTU1BTkRTCi0gICQgJDAgJEAKLQotX0NTRU9GCi1lY2hvICJvbiBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAiID4mNQotZWNobyA+JjUKLWNvbmZpZ19maWxlcz0iIHJ1bnRpbWUtcG8vTWFrZWZpbGUuaW4gdGVzdHMvTWFrZWZpbGUgdGVzdHMvYXRsb2NhbCB0ZXN0cy9iaXNvbiBNYWtlZmlsZSBidWlsZC1hdXgvTWFrZWZpbGUgcG8vTWFrZWZpbGUuaW4gZGF0YS9NYWtlZmlsZSBleGFtcGxlcy9NYWtlZmlsZSBleGFtcGxlcy9jYWxjKysvTWFrZWZpbGUgbGliL01ha2VmaWxlIHNyYy9NYWtlZmlsZSBkb2MvTWFrZWZpbGUiCi1jb25maWdfaGVhZGVycz0iIGNvbmZpZy5oOmNvbmZpZy5oaW4iCi1jb25maWdfY29tbWFuZHM9IiBkZXBmaWxlcyBkZWZhdWx0LTEgdGVzdHMvYXRjb25maWciCi0KLWFjX2NzX3VzYWdlPSJcCi1cYCRhc19tZScgaW5zdGFudGlhdGVzIGZpbGVzIGZyb20gdGVtcGxhdGVzIGFjY29yZGluZyB0byB0aGUKLWN1cnJlbnQgY29uZmlndXJhdGlvbi4KLQotVXNhZ2U6ICQwIFtPUFRJT05TXSBbRklMRV0uLi4KLQotICAtaCwgLS1oZWxwICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0Ci0gIC1WLCAtLXZlcnNpb24gICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAotICAtcSwgLS1xdWlldCAgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcwotICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKLSAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucwotICAtLWZpbGU9RklMRVs6VEVNUExBVEVdCi0JCSAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQotICAtLWhlYWRlcj1GSUxFWzpURU1QTEFURV0KLQkJICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIEZJTEUKLQotQ29uZmlndXJhdGlvbiBmaWxlczoKLSRjb25maWdfZmlsZXMKLQotQ29uZmlndXJhdGlvbiBoZWFkZXJzOgotJGNvbmZpZ19oZWFkZXJzCi0KLUNvbmZpZ3VyYXRpb24gY29tbWFuZHM6Ci0kY29uZmlnX2NvbW1hbmRzCi0KLVJlcG9ydCBidWdzIHRvIDxidWctYXV0b2NvbmZAZ251Lm9yZz4uIgotYWNfY3NfdmVyc2lvbj0iXAotR05VIEJpc29uIGNvbmZpZy5zdGF0dXMgMi4zCi1jb25maWd1cmVkIGJ5IC4vY29uZmlndXJlLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTksCi0gIHdpdGggb3B0aW9ucyBcIictLXByZWZpeCcgJy9ob21lL3BoYW5uYS9zcmMvYmlzb24nXCIKLQotQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotVGhpcyBjb25maWcuc3RhdHVzIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi1naXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuIgotc3JjZGlyPS4KLUlOU1RBTEw9Ii91c3IvYmluL2luc3RhbGwgLWMiCi0jIElmIG5vIGZpbGUgYXJlIHNwZWNpZmllZCBieSB0aGUgdXNlciwgdGhlbiB3ZSBuZWVkIHRvIHByb3ZpZGUgZGVmYXVsdAotIyB2YWx1ZS4gIEJ5IHdlIG5lZWQgdG8ga25vdyBpZiBmaWxlcyB3ZXJlIHNwZWNpZmllZCBieSB0aGUgdXNlci4KLWFjX25lZWRfZGVmYXVsdHM9Ogotd2hpbGUgdGVzdCAkIyAhPSAwCi1kbwotICBjYXNlICQxIGluCi0gIC0tKj0qKQotICAgIGFjX29wdGlvbj1gZXhwciAieCQxIiA6ICd4XChbXj1dKlwpPSdgCi0gICAgYWNfb3B0YXJnPWBleHByICJ4JDEiIDogJ3hbXj1dKj1cKC4qXCknYAotICAgIGFjX3NoaWZ0PToKLSAgICA7OwotICAtKikKLSAgICBhY19vcHRpb249JDEKLSAgICBhY19vcHRhcmc9JDIKLSAgICBhY19zaGlmdD1zaGlmdAotICAgIDs7Ci0gICopICMgVGhpcyBpcyBub3QgYW4gb3B0aW9uLCBzbyB0aGUgdXNlciBoYXMgcHJvYmFibHkgZ2l2ZW4gZXhwbGljaXQKLSAgICAgIyBhcmd1bWVudHMuCi0gICAgIGFjX29wdGlvbj0kMQotICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKLSAgZXNhYwotCi0gIGNhc2UgJGFjX29wdGlvbiBpbgotICAjIEhhbmRsaW5nIG9mIHRoZSBvcHRpb25zLgotICAtcmVjaGVjayB8IC0tcmVjaGVjayB8IC0tcmVjaGVjIHwgLS1yZWNoZSB8IC0tcmVjaCB8IC0tcmVjIHwgLS1yZSB8IC0tcikKLSAgICBhY19jc19yZWNoZWNrPTogOzsKLSAgLS12ZXJzaW9uIHwgLS12ZXJzKiB8IC1WICkKLSAgICBlY2hvICIkYWNfY3NfdmVyc2lvbiI7IGV4aXQgMCA7OwotICAtLWhlIHwgLS1oKQotICAgICMgQ29uZmxpY3QgYmV0d2VlbiAtLWhlbHAgYW5kIC0taGVhZGVyCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYW1iaWd1b3VzIG9wdGlvbjogJDEKLVRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGFtYmlndW91cyBvcHRpb246ICQxCi1UcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7Ci0gIC0taGVscCB8IC0taGVsIHwgLWggKQotICAgIGVjaG8gIiRhY19jc191c2FnZSI7IGV4aXQgMCA7OwotICAtLWRlYnVnIHwgLS1kKiB8IC1kICkKLSAgICBkZWJ1Zz06IDs7Ci0gIC0tZmlsZSB8IC0tZmlsIHwgLS1maSB8IC0tZiApCi0gICAgJGFjX3NoaWZ0Ci0gICAgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTICRhY19vcHRhcmciCi0gICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7Ci0gIC0taGVhZGVyIHwgLS1oZWFkZSB8IC0taGVhZCB8IC0taGVhICkKLSAgICAkYWNfc2hpZnQKLSAgICBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTICRhY19vcHRhcmciCi0gICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7Ci0gIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCi0gIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsIHwgLS1zaSB8IC0tcykKLSAgICBhY19jc19zaWxlbnQ9OiA7OwotCi0gICMgVGhpcyBpcyBhbiBlcnJvci4KLSAgLSopIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb246ICQxCi1UcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uOiAkMQotVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKLQotICAqKSBhY19jb25maWdfdGFyZ2V0cz0iJGFjX2NvbmZpZ190YXJnZXRzICQxIiA7OwotCi0gIGVzYWMKLSAgc2hpZnQKLWRvbmUKLQotYWNfY29uZmlndXJlX2V4dHJhX2FyZ3M9Ci0KLWlmICRhY19jc19zaWxlbnQ7IHRoZW4KLSAgZXhlYyA2Pi9kZXYvbnVsbAotICBhY19jb25maWd1cmVfZXh0cmFfYXJncz0iJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tc2lsZW50IgotZmkKLQotaWYgJGFjX2NzX3JlY2hlY2s7IHRoZW4KLSAgZWNobyAicnVubmluZyAvYmluL3NoIC4vY29uZmlndXJlICIgJy0tcHJlZml4JyAnL2hvbWUvcGhhbm5hL3NyYy9iaXNvbicgJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzICIgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24iID4mNgotICBleGVjIC9iaW4vc2ggLi9jb25maWd1cmUgJy0tcHJlZml4JyAnL2hvbWUvcGhhbm5hL3NyYy9iaXNvbicgJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uCi1maQotCi0jCi0jIElOSVQtQ09NTUFORFMgc2VjdGlvbi4KLSMKLQotQU1ERVBfVFJVRT0iIiBhY19hdXhfZGlyPSJidWlsZC1hdXgiCi0jIENhcHR1cmUgdGhlIHZhbHVlIG9mIG9ic29sZXRlIEFMTF9MSU5HVUFTIGJlY2F1c2Ugd2UgbmVlZCBpdCB0byBjb21wdXRlCi0gICAgIyBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTLCBDQVRBTE9HUy4gQnV0IGhpZGUgaXQKLSAgICAjIGZyb20gYXV0b21ha2UuCi0gICAgZXZhbCAnT0JTT0xFVEVfQUxMX0xJTkdVQVMnJz0iIicKLSAgICAjIENhcHR1cmUgdGhlIHZhbHVlIG9mIExJTkdVQVMgYmVjYXVzZSB3ZSBuZWVkIGl0IHRvIGNvbXB1dGUgQ0FUQUxPR1MuCi0gICAgTElOR1VBUz0iJVVOU0VUJSIKLQotCi1mb3IgYWNfY29uZmlnX3RhcmdldCBpbiAkYWNfY29uZmlnX3RhcmdldHMKLWRvCi0gIGNhc2UgIiRhY19jb25maWdfdGFyZ2V0IiBpbgotICAjIEhhbmRsaW5nIG9mIGFyZ3VtZW50cy4KLSAgInJ1bnRpbWUtcG8vTWFrZWZpbGUuaW4iICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHJ1bnRpbWUtcG8vTWFrZWZpbGUuaW4iIDs7Ci0gICJ0ZXN0cy9NYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdHMvTWFrZWZpbGUiIDs7Ci0gICJ0ZXN0cy9hdGxvY2FsIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0cy9hdGxvY2FsIiA7OwotICAidGVzdHMvYmlzb24iICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RzL2Jpc29uIiA7OwotICAiTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1ha2VmaWxlIiA7OwotICAiYnVpbGQtYXV4L01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBidWlsZC1hdXgvTWFrZWZpbGUiIDs7Ci0gICJwby9NYWtlZmlsZS5pbiIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcG8vTWFrZWZpbGUuaW4iIDs7Ci0gICJkYXRhL01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkYXRhL01ha2VmaWxlIiA7OwotICAiZXhhbXBsZXMvTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGV4YW1wbGVzL01ha2VmaWxlIiA7OwotICAiZXhhbXBsZXMvY2FsYysrL01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBleGFtcGxlcy9jYWxjKysvTWFrZWZpbGUiIDs7Ci0gICJsaWIvTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYi9NYWtlZmlsZSIgOzsKLSAgInNyYy9NYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgc3JjL01ha2VmaWxlIiA7OwotICAiZG9jL01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkb2MvTWFrZWZpbGUiIDs7Ci0gICJkZXBmaWxlcyIgKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgZGVwZmlsZXMiIDs7Ci0gICJkZWZhdWx0LTEiICkgQ09ORklHX0NPTU1BTkRTPSIkQ09ORklHX0NPTU1BTkRTIGRlZmF1bHQtMSIgOzsKLSAgInRlc3RzL2F0Y29uZmlnIiApIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyB0ZXN0cy9hdGNvbmZpZyIgOzsKLSAgImNvbmZpZy5oIiApIENPTkZJR19IRUFERVJTPSIkQ09ORklHX0hFQURFUlMgY29uZmlnLmg6Y29uZmlnLmhpbiIgOzsKLSAgKikgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW52YWxpZCBhcmd1bWVudDogJGFjX2NvbmZpZ190YXJnZXQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBhcmd1bWVudDogJGFjX2NvbmZpZ190YXJnZXQiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OwotICBlc2FjCi1kb25lCi0KLSMgSWYgdGhlIHVzZXIgZGlkIG5vdCB1c2UgdGhlIGFyZ3VtZW50cyB0byBzcGVjaWZ5IHRoZSBpdGVtcyB0byBpbnN0YW50aWF0ZSwKLSMgdGhlbiB0aGUgZW52dmFyIGludGVyZmFjZSBpcyB1c2VkLiAgU2V0IG9ubHkgdGhvc2UgdGhhdCBhcmUgbm90LgotIyBXZSB1c2UgdGhlIGxvbmcgZm9ybSBmb3IgdGhlIGRlZmF1bHQgYXNzaWdubWVudCBiZWNhdXNlIG9mIGFuIGV4dHJlbWVseQotIyBiaXphcnJlIGJ1ZyBvbiBTdW5PUyA0LjEuMy4KLWlmICRhY19uZWVkX2RlZmF1bHRzOyB0aGVuCi0gIHRlc3QgIiR7Q09ORklHX0ZJTEVTK3NldH0iID0gc2V0IHx8IENPTkZJR19GSUxFUz0kY29uZmlnX2ZpbGVzCi0gIHRlc3QgIiR7Q09ORklHX0hFQURFUlMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0hFQURFUlM9JGNvbmZpZ19oZWFkZXJzCi0gIHRlc3QgIiR7Q09ORklHX0NPTU1BTkRTK3NldH0iID0gc2V0IHx8IENPTkZJR19DT01NQU5EUz0kY29uZmlnX2NvbW1hbmRzCi1maQotCi0jIEhhdmUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBjb252ZW5pZW5jZS4gIE1ha2UgaXQgaW4gdGhlIGJ1aWxkIHRyZWUKLSMgc2ltcGx5IGJlY2F1c2UgdGhlcmUgaXMgbm8gcmVhc29uIHRvIHB1dCBpdCBoZXJlLCBhbmQgaW4gYWRkaXRpb24sCi0jIGNyZWF0aW5nIGFuZCBtb3ZpbmcgZmlsZXMgZnJvbSAvdG1wIGNhbiBzb21ldGltZXMgY2F1c2UgcHJvYmxlbXMuCi0jIENyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnksIGFuZCBob29rIGZvciBpdHMgcmVtb3ZhbCB1bmxlc3MgZGVidWdnaW5nLgotJGRlYnVnIHx8Ci17Ci0gIHRyYXAgJ2V4aXRfc3RhdHVzPSQ/OyBybSAtcmYgJHRtcCAmJiBleGl0ICRleGl0X3N0YXR1cycgMAotICB0cmFwICd7IChleGl0IDEpOyBleGl0IDE7IH0nIDEgMiAxMyAxNQotfQotCi0jIENyZWF0ZSBhIChzZWN1cmUpIHRtcCBkaXJlY3RvcnkgZm9yIHRtcCBmaWxlcy4KLQotewotICB0bXA9YCh1bWFzayAwNzcgJiYgbWt0ZW1wIC1kIC1xICIuL2NvbmZzdGF0WFhYWFhYIikgMj4vZGV2L251bGxgICYmCi0gIHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiCi19ICB8fAotewotICB0bXA9Li9jb25mc3RhdCQkLSRSQU5ET00KLSAgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKQotfSB8fAotewotICAgZWNobyAiJG1lOiBjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAuIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQotfQotCi0KLSMKLSMgQ09ORklHX0ZJTEVTIHNlY3Rpb24uCi0jCi0KLSMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGUgc2NyaXB0cyBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0ZJTEVTLgotIyBUaGlzIGhhcHBlbnMgZm9yIGluc3RhbmNlIHdoZW4gLi9jb25maWcuc3RhdHVzIGNvbmZpZy5oCi1pZiB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIjsgdGhlbgotICAjIFByb3RlY3QgYWdhaW5zdCBiZWluZyBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhIHNlZCBzdWJzdCBpbiBjb25maWcuc3RhdHVzLgotICBzZWQgJ3MvLEAvQEAvOyBzL0AsL0BALzsgcy8sO3QgdCQvQDt0IHQvOyAvQDt0IHQkL3MvW1xcJixdL1xcJi9nOwotICAgcy9AQC8sQC87IHMvQEAvQCwvOyBzL0A7dCB0JC8sO3QgdC8nID4kdG1wL3N1YnMuc2VkIDw8XENFT0YKLXMsQFNIRUxMQCwvYmluL3NoLDt0IHQKLXMsQFBBVEhfU0VQQVJBVE9SQCw6LDt0IHQKLXMsQFBBQ0tBR0VfTkFNRUAsR05VIEJpc29uLDt0IHQKLXMsQFBBQ0tBR0VfVEFSTkFNRUAsYmlzb24sO3QgdAotcyxAUEFDS0FHRV9WRVJTSU9OQCwyLjMsO3QgdAotcyxAUEFDS0FHRV9TVFJJTkdALEdOVSBCaXNvbiAyLjMsO3QgdAotcyxAUEFDS0FHRV9CVUdSRVBPUlRALGJ1Zy1iaXNvbkBnbnUub3JnLDt0IHQKLXMsQGV4ZWNfcHJlZml4QCwke3ByZWZpeH0sO3QgdAotcyxAcHJlZml4QCwvaG9tZS9waGFubmEvc3JjL2Jpc29uLDt0IHQKLXMsQHByb2dyYW1fdHJhbnNmb3JtX25hbWVALHMseCx4LCw7dCB0Ci1zLEBiaW5kaXJALCR7ZXhlY19wcmVmaXh9L2Jpbiw7dCB0Ci1zLEBzYmluZGlyQCwke2V4ZWNfcHJlZml4fS9zYmluLDt0IHQKLXMsQGxpYmV4ZWNkaXJALCR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMsO3QgdAotcyxAZGF0YWRpckAsJHtwcmVmaXh9L3NoYXJlLDt0IHQKLXMsQHN5c2NvbmZkaXJALCR7cHJlZml4fS9ldGMsO3QgdAotcyxAc2hhcmVkc3RhdGVkaXJALCR7cHJlZml4fS9jb20sO3QgdAotcyxAbG9jYWxzdGF0ZWRpckAsJHtwcmVmaXh9L3Zhciw7dCB0Ci1zLEBsaWJkaXJALCR7ZXhlY19wcmVmaXh9L2xpYiw7dCB0Ci1zLEBpbmNsdWRlZGlyQCwke3ByZWZpeH0vaW5jbHVkZSw7dCB0Ci1zLEBvbGRpbmNsdWRlZGlyQCwvdXNyL2luY2x1ZGUsO3QgdAotcyxAaW5mb2RpckAsJHtwcmVmaXh9L2luZm8sO3QgdAotcyxAbWFuZGlyQCwke3ByZWZpeH0vbWFuLDt0IHQKLXMsQGJ1aWxkX2FsaWFzQCwsO3QgdAotcyxAaG9zdF9hbGlhc0AsLDt0IHQKLXMsQHRhcmdldF9hbGlhc0AsLDt0IHQKLXMsQERFRlNALC1ESEFWRV9DT05GSUdfSCw7dCB0Ci1zLEBFQ0hPX0NALCw7dCB0Ci1zLEBFQ0hPX05ALC1uLDt0IHQKLXMsQEVDSE9fVEAsLDt0IHQKLXMsQExJQlNALCw7dCB0Ci1zLEBJTlNUQUxMX1BST0dSQU1ALCR7SU5TVEFMTH0sO3QgdAotcyxASU5TVEFMTF9TQ1JJUFRALCR7SU5TVEFMTH0sO3QgdAotcyxASU5TVEFMTF9EQVRBQCwke0lOU1RBTEx9IC1tIDY0NCw7dCB0Ci1zLEBDWUdQQVRIX1dALGVjaG8sO3QgdAotcyxAUEFDS0FHRUAsYmlzb24sO3QgdAotcyxAVkVSU0lPTkAsMi4zLDt0IHQKLXMsQEFDTE9DQUxALCR7U0hFTEx9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9taXNzaW5nIC0tcnVuIGFjbG9jYWwtMS45LDt0IHQKLXMsQEFVVE9DT05GQCwke1NIRUxMfSAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL2Jpc29uLTIuMy9idWlsZC1hdXgvbWlzc2luZyAtLXJ1biBhdXRvY29uZiw7dCB0Ci1zLEBBVVRPTUFLRUAsJHtTSEVMTH0gL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC90b29scy9iaXNvbi0yLjMvYnVpbGQtYXV4L21pc3NpbmcgLS1ydW4gYXV0b21ha2UtMS45LDt0IHQKLXMsQEFVVE9IRUFERVJALCR7U0hFTEx9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9taXNzaW5nIC0tcnVuIGF1dG9oZWFkZXIsO3QgdAotcyxATUFLRUlORk9ALCR7U0hFTEx9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9taXNzaW5nIC0tcnVuIG1ha2VpbmZvLDt0IHQKLXMsQGluc3RhbGxfc2hALC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9pbnN0YWxsLXNoLDt0IHQKLXMsQFNUUklQQCwsO3QgdAotcyxAYWNfY3RfU1RSSVBALCw7dCB0Ci1zLEBJTlNUQUxMX1NUUklQX1BST0dSQU1ALCR7U0hFTEx9ICQoaW5zdGFsbF9zaCkgLWMgLXMsO3QgdAotcyxAbWtkaXJfcEAsbWtkaXIgLXAgLS0sO3QgdAotcyxAQVdLQCxnYXdrLDt0IHQKLXMsQFNFVF9NQUtFQCwsO3QgdAotcyxAYW1fX2xlYWRpbmdfZG90QCwuLDt0IHQKLXMsQEFNVEFSQCwke1NIRUxMfSAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL2Jpc29uLTIuMy9idWlsZC1hdXgvbWlzc2luZyAtLXJ1biB0YXIsO3QgdAotcyxAYW1fX3RhckAsJHtBTVRBUn0gY2hvZiAtICIkJHRhcmRpciIsO3QgdAotcyxAYW1fX3VudGFyQCwke0FNVEFSfSB4ZiAtLDt0IHQKLXMsQENDQCxnY2MsO3QgdAotcyxAQ0ZMQUdTQCwtZyAtTzIsO3QgdAotcyxATERGTEFHU0AsLDt0IHQKLXMsQENQUEZMQUdTQCwsO3QgdAotcyxAYWNfY3RfQ0NALGdjYyw7dCB0Ci1zLEBFWEVFWFRALCw7dCB0Ci1zLEBPQkpFWFRALG8sO3QgdAotcyxAREVQRElSQCwuZGVwcyw7dCB0Ci1zLEBhbV9faW5jbHVkZUAsaW5jbHVkZSw7dCB0Ci1zLEBhbV9fcXVvdGVALCw7dCB0Ci1zLEBBTURFUF9UUlVFQCwsO3QgdAotcyxAQU1ERVBfRkFMU0VALCMsO3QgdAotcyxAQU1ERVBCQUNLU0xBU0hALFwsO3QgdAotcyxAQ0NERVBNT0RFQCxkZXBtb2RlPWdjYzMsO3QgdAotcyxAYW1fX2Zhc3RkZXBDQ19UUlVFQCwsO3QgdAotcyxAYW1fX2Zhc3RkZXBDQ19GQUxTRUAsIyw7dCB0Ci1zLEBDUFBALGdjYyAtRSw7dCB0Ci1zLEBFR1JFUEAsZ3JlcCAtRSw7dCB0Ci1zLEBXQVJOSU5HX0NGTEFHU0AsLDt0IHQKLXMsQFdFUlJPUl9DRkxBR1NALCw7dCB0Ci1zLEBXQVJOSU5HX0NYWEZMQUdTQCwsO3QgdAotcyxAWUFDQ19TQ1JJUFRALHlhY2MsO3QgdAotcyxAWUFDQ19MSUJSQVJZQCxsaWJ5LmEsO3QgdAotcyxATEVYQCxmbGV4LDt0IHQKLXMsQExFWExJQkAsLWxmbCw7dCB0Ci1zLEBMRVhfT1VUUFVUX1JPT1RALGxleC55eSw7dCB0Ci1zLEBZQUNDQCxiaXNvbiAteSw7dCB0Ci1zLEBSQU5MSUJALHJhbmxpYiw7dCB0Ci1zLEBhY19jdF9SQU5MSUJALHJhbmxpYiw7dCB0Ci1zLEBNNEAsL3Vzci9iaW4vbTQsO3QgdAotcyxAU1REQk9PTF9IQCwsO3QgdAotcyxASEFWRV9fQk9PTEAsMSw7dCB0Ci1zLEBMSUJPQkpTQCwgZGlybmFtZSRVLm8gZXhpdGZhaWwkVS5vIGhhcmQtbG9jYWxlJFUubyBoYXNoJFUubyBxdW90ZSRVLm8gcXVvdGVhcmckVS5vIGZvcGVuLXNhZmVyJFUubyBkdXAtc2FmZXIkVS5vIGZkLXNhZmVyJFUubyBwaXBlLXNhZmVyJFUubyB4bWFsbG9jJFUubyw7dCB0Ci1zLEBHRVRPUFRfSEAsLDt0IHQKLXMsQE1LSU5TVEFMTERJUlNALCQodG9wX2J1aWxkZGlyKS9idWlsZC1hdXgvbWtpbnN0YWxsZGlycyw7dCB0Ci1zLEBVU0VfTkxTQCx5ZXMsO3QgdAotcyxATVNHRk1UQCwvdXNyL2Jpbi9tc2dmbXQsO3QgdAotcyxAR01TR0ZNVEAsL3Vzci9iaW4vbXNnZm10LDt0IHQKLXMsQFhHRVRURVhUQCwvdXNyL2Jpbi94Z2V0dGV4dCw7dCB0Ci1zLEBNU0dNRVJHRUAsL3Vzci9iaW4vbXNnbWVyZ2UsO3QgdAotcyxAYnVpbGRALHg4Nl82NC11bmtub3duLWxpbnV4LWdudSw7dCB0Ci1zLEBidWlsZF9jcHVALHg4Nl82NCw7dCB0Ci1zLEBidWlsZF92ZW5kb3JALHVua25vd24sO3QgdAotcyxAYnVpbGRfb3NALGxpbnV4LWdudSw7dCB0Ci1zLEBob3N0QCx4ODZfNjQtdW5rbm93bi1saW51eC1nbnUsO3QgdAotcyxAaG9zdF9jcHVALHg4Nl82NCw7dCB0Ci1zLEBob3N0X3ZlbmRvckAsdW5rbm93biw7dCB0Ci1zLEBob3N0X29zQCxsaW51eC1nbnUsO3QgdAotcyxASU5UTF9NQUNPU1hfTElCU0AsLDt0IHQKLXMsQExJQklDT05WQCwtbGljb252LDt0IHQKLXMsQExUTElCSUNPTlZALC1saWNvbnYsO3QgdAotcyxASU5UTExJQlNALCw7dCB0Ci1zLEBMSUJJTlRMQCwsO3QgdAotcyxATFRMSUJJTlRMQCwsO3QgdAotcyxAUE9TVUJALHBvLDt0IHQKLXMsQFVOSVNURF9IQCwsO3QgdAotcyxAQklTT05fTE9DQUxFRElSQCwvdXNyL3NoYXJlL2xvY2FsZSw7dCB0Ci1zLEBhY2xvY2FsZGlyQCwke2RhdGFkaXJ9L2FjbG9jYWwsO3QgdAotcyxAVkFMR1JJTkRALCw7dCB0Ci1zLEBDWFhALGcrKyw7dCB0Ci1zLEBDWFhGTEFHU0AsLWcgLU8yLDt0IHQKLXMsQGFjX2N0X0NYWEAsZysrLDt0IHQKLXMsQENYWERFUE1PREVALGRlcG1vZGU9Z2NjMyw7dCB0Ci1zLEBhbV9fZmFzdGRlcENYWF9UUlVFQCwsO3QgdAotcyxAYW1fX2Zhc3RkZXBDWFhfRkFMU0VALCMsO3QgdAotcyxAQklTT05fQ1hYX1dPUktTQCw6LDt0IHQKLXMsQEJJU09OX0NYWF9XT1JLU19UUlVFQCwsO3QgdAotcyxAQklTT05fQ1hYX1dPUktTX0ZBTFNFQCwjLDt0IHQKLXMsQEFVVE9NNFRFQCwke1NIRUxMfSAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL2Jpc29uLTIuMy9idWlsZC1hdXgvbWlzc2luZyAtLXJ1biBhdXRvbTR0ZSw7dCB0Ci1zLEBHQ0NALHllcyw7dCB0Ci1zLEBPMENGTEFHU0AsLWcgLDt0IHQKLXMsQE8wQ1hYRkxBR1NALC1nICw7dCB0Ci1zLEBMVExJQk9CSlNALCBkaXJuYW1lJFUubG8gZXhpdGZhaWwkVS5sbyBoYXJkLWxvY2FsZSRVLmxvIGhhc2gkVS5sbyBxdW90ZSRVLmxvIHF1b3RlYXJnJFUubG8gZm9wZW4tc2FmZXIkVS5sbyBkdXAtc2FmZXIkVS5sbyBmZC1zYWZlciRVLmxvIHBpcGUtc2FmZXIkVS5sbyB4bWFsbG9jJFUubG8sO3QgdAotQ0VPRgotCi0gICMgU3BsaXQgdGhlIHN1YnN0aXR1dGlvbnMgaW50byBiaXRlLXNpemVkIHBpZWNlcyBmb3Igc2VkcyB3aXRoCi0gICMgc21hbGwgY29tbWFuZCBudW1iZXIgbGltaXRzLCBsaWtlIG9uIERpZ2l0YWwgT1NGLzEgYW5kIEhQLVVYLgotICBhY19tYXhfc2VkX2xpbmVzPTQ4Ci0gIGFjX3NlZF9mcmFnPTEgIyBOdW1iZXIgb2YgY3VycmVudCBmaWxlLgotICBhY19iZWc9MSAjIEZpcnN0IGxpbmUgZm9yIGN1cnJlbnQgZmlsZS4KLSAgYWNfZW5kPSRhY19tYXhfc2VkX2xpbmVzICMgTGluZSBhZnRlciBsYXN0IGxpbmUgZm9yIGN1cnJlbnQgZmlsZS4KLSAgYWNfbW9yZV9saW5lcz06Ci0gIGFjX3NlZF9jbWRzPQotICB3aGlsZSAkYWNfbW9yZV9saW5lczsgZG8KLSAgICBpZiB0ZXN0ICRhY19iZWcgLWd0IDE7IHRoZW4KLSAgICAgIHNlZCAiMSwke2FjX2JlZ31kOyAke2FjX2VuZH1xIiAkdG1wL3N1YnMuc2VkID4kdG1wL3N1YnMuZnJhZwotICAgIGVsc2UKLSAgICAgIHNlZCAiJHthY19lbmR9cSIgJHRtcC9zdWJzLnNlZCA+JHRtcC9zdWJzLmZyYWcKLSAgICBmaQotICAgIGlmIHRlc3QgISAtcyAkdG1wL3N1YnMuZnJhZzsgdGhlbgotICAgICAgYWNfbW9yZV9saW5lcz1mYWxzZQotICAgIGVsc2UKLSAgICAgICMgVGhlIHB1cnBvc2Ugb2YgdGhlIGxhYmVsIGFuZCBvZiB0aGUgYnJhbmNoaW5nIGNvbmRpdGlvbiBpcyB0bwotICAgICAgIyBzcGVlZCB1cCB0aGUgc2VkIHByb2Nlc3NpbmcgKGlmIHRoZXJlIGFyZSBubyBgQCcgYXQgYWxsLCB0aGVyZQotICAgICAgIyBpcyBubyBuZWVkIHRvIGJyb3dzZSBhbnkgb2YgdGhlIHN1YnN0aXR1dGlvbnMpLgotICAgICAgIyBUaGVzZSBhcmUgdGhlIHR3byBleHRyYSBzZWQgY29tbWFuZHMgbWVudGlvbmVkIGFib3ZlLgotICAgICAgKGVjaG8gJzp0Ci0gIC9AW2EtekEtWl9dW2EtekEtWl8wLTldKkAvIWInICYmIGNhdCAkdG1wL3N1YnMuZnJhZykgPiR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkCi0gICAgICBpZiB0ZXN0IC16ICIkYWNfc2VkX2NtZHMiOyB0aGVuCi0JYWNfc2VkX2NtZHM9InNlZCAtZiAkdG1wL3N1YnMtJGFjX3NlZF9mcmFnLnNlZCIKLSAgICAgIGVsc2UKLQlhY19zZWRfY21kcz0iJGFjX3NlZF9jbWRzIHwgc2VkIC1mICR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkIgotICAgICAgZmkKLSAgICAgIGFjX3NlZF9mcmFnPWBleHByICRhY19zZWRfZnJhZyArIDFgCi0gICAgICBhY19iZWc9JGFjX2VuZAotICAgICAgYWNfZW5kPWBleHByICRhY19lbmQgKyAkYWNfbWF4X3NlZF9saW5lc2AKLSAgICBmaQotICBkb25lCi0gIGlmIHRlc3QgLXogIiRhY19zZWRfY21kcyI7IHRoZW4KLSAgICBhY19zZWRfY21kcz1jYXQKLSAgZmkKLWZpICMgdGVzdCAtbiAiJENPTkZJR19GSUxFUyIKLQotZm9yIGFjX2ZpbGUgaW4gOiAkQ09ORklHX0ZJTEVTOyBkbyB0ZXN0ICJ4JGFjX2ZpbGUiID0geDogJiYgY29udGludWUKLSAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIiwgZGVmYXVsdGluZyBpbmZpbGU9Im91dGZpbGUuaW4iLgotICBjYXNlICRhY19maWxlIGluCi0gIC0gfCAqOi0gfCAqOi06KiApICMgaW5wdXQgZnJvbSBzdGRpbgotCWNhdCA+JHRtcC9zdGRpbgotCWFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCi0JYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKLSAgKjoqICkgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKLQlhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OwotICAqICkgICBhY19maWxlX2luPSRhY19maWxlLmluIDs7Ci0gIGVzYWMKLQotICAjIENvbXB1dGUgQHNyY2RpckAsIEB0b3Bfc3JjZGlyQCwgYW5kIEBJTlNUQUxMQCBmb3Igc3ViZGlyZWN0b3JpZXMuCi0gIGFjX2Rpcj1gKGRpcm5hbWUgIiRhY19maWxlIikgMj4vZGV2L251bGwgfHwKLSRhc19leHByIFgiJGFjX2ZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgXAotCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkYWNfZmlsZSIgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KLSAgCSAgcy8uKi8uLzsgcSdgCi0gIHsgaWYgJGFzX21rZGlyX3A7IHRoZW4KLSAgICBta2RpciAtcCAiJGFjX2RpciIKLSAgZWxzZQotICAgIGFzX2Rpcj0iJGFjX2RpciIKLSAgICBhc19kaXJzPQotICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCi0gICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgotICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8Ci0kYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAotCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkYXNfZGlyIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKLSAgICBkb25lCi0gICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKLSAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KLQotICBhY19idWlsZGRpcj0uCi0KLWlmIHRlc3QgIiRhY19kaXIiICE9IC47IHRoZW4KLSAgYWNfZGlyX3N1ZmZpeD0vYGVjaG8gIiRhY19kaXIiIHwgc2VkICdzLF5cLltcXC9dLCwnYAotICAjIEEgIi4uLyIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgotICBhY190b3BfYnVpbGRkaXI9YGVjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAncywvW15cXC9dKiwuLi8sZydgCi1lbHNlCi0gIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcj0KLWZpCi0KLWNhc2UgJHNyY2RpciBpbgotICAuKSAgIyBObyAtLXNyY2RpciBvcHRpb24uICBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCi0gICAgYWNfc3JjZGlyPS4KLSAgICBpZiB0ZXN0IC16ICIkYWNfdG9wX2J1aWxkZGlyIjsgdGhlbgotICAgICAgIGFjX3RvcF9zcmNkaXI9LgotICAgIGVsc2UKLSAgICAgICBhY190b3Bfc3JjZGlyPWBlY2hvICRhY190b3BfYnVpbGRkaXIgfCBzZWQgJ3MsLyQsLCdgCi0gICAgZmkgOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBwYXRoLgotICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7Ci0gICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7Ci0gICopICMgUmVsYXRpdmUgcGF0aC4KLSAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIkYWNfZGlyX3N1ZmZpeAotICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIgOzsKLWVzYWMKLQotIyBEbyBub3QgdXNlIGBjZCBmb28gJiYgcHdkYCB0byBjb21wdXRlIGFic29sdXRlIHBhdGhzLCBiZWNhdXNlCi0jIHRoZSBkaXJlY3RvcmllcyBtYXkgbm90IGV4aXN0LgotY2FzZSBgcHdkYCBpbgotLikgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7Ci0qKQotICBjYXNlICIkYWNfZGlyIiBpbgotICAuKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGA7OwotICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OwotICAqKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGAvIiRhY19kaXIiOzsKLSAgZXNhYzs7Ci1lc2FjCi1jYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KLS4pIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7Ci0qKQotICBjYXNlICR7YWNfdG9wX2J1aWxkZGlyfS4gaW4KLSAgLikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OwotICAqKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXIvJHthY190b3BfYnVpbGRkaXJ9Ljs7Ci0gIGVzYWM7OwotZXNhYwotY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCi0uKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OwotKikKLSAgY2FzZSAkYWNfc3JjZGlyIGluCi0gIC4pIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKLSAgKikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY19zcmNkaXI7OwotICBlc2FjOzsKLWVzYWMKLWNhc2UgJGFjX2Fic19idWlsZGRpciBpbgotLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OwotKikKLSAgY2FzZSAkYWNfdG9wX3NyY2RpciBpbgotICAuKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7Ci0gICopIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3RvcF9zcmNkaXI7OwotICBlc2FjOzsKLWVzYWMKLQotCi0gIGNhc2UgJElOU1RBTEwgaW4KLSAgW1xcLyRdKiB8ID86W1xcL10qICkgYWNfSU5TVEFMTD0kSU5TVEFMTCA7OwotICAqKSBhY19JTlNUQUxMPSRhY190b3BfYnVpbGRkaXIkSU5TVEFMTCA7OwotICBlc2FjCi0KLSAgIyBMZXQncyBzdGlsbCBwcmV0ZW5kIGl0IGlzIGBjb25maWd1cmUnIHdoaWNoIGluc3RhbnRpYXRlcyAoaS5lLiwgZG9uJ3QKLSAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byByZWFkOgotICAjICAgIC8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZy5zdGF0dXMuICAqLwotICBpZiB0ZXN0IHgiJGFjX2ZpbGUiID0geC07IHRoZW4KLSAgICBjb25maWd1cmVfaW5wdXQ9Ci0gIGVsc2UKLSAgICBjb25maWd1cmVfaW5wdXQ9IiRhY19maWxlLiAgIgotICBmaQotICBjb25maWd1cmVfaW5wdXQ9JGNvbmZpZ3VyZV9pbnB1dCJHZW5lcmF0ZWQgZnJvbSBgZWNobyAkYWNfZmlsZV9pbiB8Ci0JCQkJICAgICBzZWQgJ3MsLiovLCwnYCBieSBjb25maWd1cmUuIgotCi0gICMgRmlyc3QgbG9vayBmb3IgdGhlIGlucHV0IGZpbGVzIGluIHRoZSBidWlsZCB0cmVlLCBvdGhlcndpc2UgaW4gdGhlCi0gICMgc3JjIHRyZWUuCi0gIGFjX2ZpbGVfaW5wdXRzPWBJRlM9OgotICAgIGZvciBmIGluICRhY19maWxlX2luOyBkbwotICAgICAgY2FzZSAkZiBpbgotICAgICAgLSkgZWNobyAkdG1wL3N0ZGluIDs7Ci0gICAgICBbXFwvJF0qKQotCSAjIEFic29sdXRlIChjYW4ndCBiZSBET1Mtc3R5bGUsIGFzIElGUz06KQotCSB0ZXN0IC1mICIkZiIgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLQkgZWNobyAiJGYiOzsKLSAgICAgICopICMgUmVsYXRpdmUKLQkgaWYgdGVzdCAtZiAiJGYiOyB0aGVuCi0JICAgIyBCdWlsZCB0cmVlCi0JICAgZWNobyAiJGYiCi0JIGVsaWYgdGVzdCAtZiAiJHNyY2Rpci8kZiI7IHRoZW4KLQkgICAjIFNvdXJjZSB0cmVlCi0JICAgZWNobyAiJHNyY2Rpci8kZiIKLQkgZWxzZQotCSAgICMgL2Rldi9udWxsIHRyZWUKLQkgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotCSBmaTs7Ci0gICAgICBlc2FjCi0gICAgZG9uZWAgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9Ci0KLSAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRhY19maWxlIiA+JjUKLWVjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9Ci0gICAgcm0gLWYgIiRhY19maWxlIgotICBmaQotICBzZWQgIi9eWwkgXSpWUEFUSFsJIF0qPS97Ci1zLzoqXCQoc3JjZGlyKToqLzovOwotcy86Klwke3NyY2Rpcn06Ki86LzsKLXMvOipAc3JjZGlyQDoqLzovOwotcy9eXChbXj1dKj1bCSBdKlwpOiovXDEvOwotcy86KiQvLzsKLXMvXltePV0qPVsJIF0qJC8vOwotfQotCi06dAotL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYgotcyxAY29uZmlndXJlX2lucHV0QCwkY29uZmlndXJlX2lucHV0LDt0IHQKLXMsQHNyY2RpckAsJGFjX3NyY2Rpciw7dCB0Ci1zLEBhYnNfc3JjZGlyQCwkYWNfYWJzX3NyY2Rpciw7dCB0Ci1zLEB0b3Bfc3JjZGlyQCwkYWNfdG9wX3NyY2Rpciw7dCB0Ci1zLEBhYnNfdG9wX3NyY2RpckAsJGFjX2Fic190b3Bfc3JjZGlyLDt0IHQKLXMsQGJ1aWxkZGlyQCwkYWNfYnVpbGRkaXIsO3QgdAotcyxAYWJzX2J1aWxkZGlyQCwkYWNfYWJzX2J1aWxkZGlyLDt0IHQKLXMsQHRvcF9idWlsZGRpckAsJGFjX3RvcF9idWlsZGRpciw7dCB0Ci1zLEBhYnNfdG9wX2J1aWxkZGlyQCwkYWNfYWJzX3RvcF9idWlsZGRpciw7dCB0Ci1zLEBJTlNUQUxMQCwkYWNfSU5TVEFMTCw7dCB0Ci0iICRhY19maWxlX2lucHV0cyB8IChldmFsICIkYWNfc2VkX2NtZHMiKSA+JHRtcC9vdXQKLSAgcm0gLWYgJHRtcC9zdGRpbgotICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCi0gICAgbXYgJHRtcC9vdXQgJGFjX2ZpbGUKLSAgZWxzZQotICAgIGNhdCAkdG1wL291dAotICAgIHJtIC1mICR0bXAvb3V0Ci0gIGZpCi0KLSAgIyBSdW4gdGhlIGNvbW1hbmRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlsZS4KLSAgY2FzZSAkYWNfZmlsZSBpbgotICAgIHRlc3RzL2Jpc29uICkgY2htb2QgK3ggdGVzdHMvYmlzb24gOzsKLSAgZXNhYwotZG9uZQotCi0jCi0jIENPTkZJR19IRUFERVIgc2VjdGlvbi4KLSMKLQotIyBUaGVzZSBzZWQgY29tbWFuZHMgYXJlIHBhc3NlZCB0byBzZWQgYXMgIkEgTkFNRSBCIE5BTUUgQyBWQUxVRSBEIiwgd2hlcmUKLSMgTkFNRSBpcyB0aGUgY3BwIG1hY3JvIGJlaW5nIGRlZmluZWQgYW5kIFZBTFVFIGlzIHRoZSB2YWx1ZSBpdCBpcyBiZWluZyBnaXZlbi4KLSMKLSMgYWNfZCBzZXRzIHRoZSB2YWx1ZSBpbiAiI2RlZmluZSBOQU1FIFZBTFVFIiBsaW5lcy4KLWFjX2RBPSdzLF5cKFsJIF0qXCkjXChbCSBdKmRlZmluZVsJIF1bCSBdKlwpJwotYWNfZEI9J1sJIF0uKiQsXDEjXDInCi1hY19kQz0nICcKLWFjX2REPScsO3QnCi0jIGFjX3UgdHVybnMgIiN1bmRlZiBOQU1FIiB3aXRob3V0IHRyYWlsaW5nIGJsYW5rcyBpbnRvICIjZGVmaW5lIE5BTUUgVkFMVUUiLgotYWNfdUE9J3MsXlwoWwkgXSpcKSNcKFsJIF0qXCl1bmRlZlwoWwkgXVsJIF0qXCknCi1hY191Qj0nJCxcMSNcMmRlZmluZVwzJwotYWNfdUM9JyAnCi1hY191RD0nLDt0JwotCi1mb3IgYWNfZmlsZSBpbiA6ICRDT05GSUdfSEVBREVSUzsgZG8gdGVzdCAieCRhY19maWxlIiA9IHg6ICYmIGNvbnRpbnVlCi0gICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIsIGRlZmF1bHRpbmcgaW5maWxlPSJvdXRmaWxlLmluIi4KLSAgY2FzZSAkYWNfZmlsZSBpbgotICAtIHwgKjotIHwgKjotOiogKSAjIGlucHV0IGZyb20gc3RkaW4KLQljYXQgPiR0bXAvc3RkaW4KLQlhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAotCWFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7Ci0gICo6KiApIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCi0JYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKLSAgKiApICAgYWNfZmlsZV9pbj0kYWNfZmlsZS5pbiA7OwotICBlc2FjCi0KLSAgdGVzdCB4IiRhY19maWxlIiAhPSB4LSAmJiB7IGVjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyAkYWNfZmlsZSIgPiY1Ci1lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQotCi0gICMgRmlyc3QgbG9vayBmb3IgdGhlIGlucHV0IGZpbGVzIGluIHRoZSBidWlsZCB0cmVlLCBvdGhlcndpc2UgaW4gdGhlCi0gICMgc3JjIHRyZWUuCi0gIGFjX2ZpbGVfaW5wdXRzPWBJRlM9OgotICAgIGZvciBmIGluICRhY19maWxlX2luOyBkbwotICAgICAgY2FzZSAkZiBpbgotICAgICAgLSkgZWNobyAkdG1wL3N0ZGluIDs7Ci0gICAgICBbXFwvJF0qKQotCSAjIEFic29sdXRlIChjYW4ndCBiZSBET1Mtc3R5bGUsIGFzIElGUz06KQotCSB0ZXN0IC1mICIkZiIgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLQkgIyBEbyBxdW90ZSAkZiwgdG8gcHJldmVudCBET1MgcGF0aHMgZnJvbSBiZWluZyBJRlMnZC4KLQkgZWNobyAiJGYiOzsKLSAgICAgICopICMgUmVsYXRpdmUKLQkgaWYgdGVzdCAtZiAiJGYiOyB0aGVuCi0JICAgIyBCdWlsZCB0cmVlCi0JICAgZWNobyAiJGYiCi0JIGVsaWYgdGVzdCAtZiAiJHNyY2Rpci8kZiI7IHRoZW4KLQkgICAjIFNvdXJjZSB0cmVlCi0JICAgZWNobyAiJHNyY2Rpci8kZiIKLQkgZWxzZQotCSAgICMgL2Rldi9udWxsIHRyZWUKLQkgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotCSBmaTs7Ci0gICAgICBlc2FjCi0gICAgZG9uZWAgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9Ci0gICMgUmVtb3ZlIHRoZSB0cmFpbGluZyBzcGFjZXMuCi0gIHNlZCAncy9bCSBdKiQvLycgJGFjX2ZpbGVfaW5wdXRzID4kdG1wL2luCi0KLSAgIyBIYW5kbGUgYWxsIHRoZSAjZGVmaW5lIHRlbXBsYXRlcyBvbmx5IGlmIG5lY2Vzc2FyeS4KLSAgaWYgZ3JlcCAiXlsJIF0qI1sJIF0qZGVmaW5lIiAkdG1wL2luID4vZGV2L251bGw7IHRoZW4KLSAgIyBJZiB0aGVyZSBhcmUgbm8gZGVmaW5lcywgd2UgbWF5IGhhdmUgYW4gZW1wdHkgaWYvZmkKLSAgOgotICBjYXQgPiR0bXAvZGVmaW5lcy5zZWQgPDxDRU9GCi0vXlsJIF0qI1sJIF0qZGVmaW5lLyFiCi10IGNscgotOiBjbHIKLSR7YWNfZEF9UEFDS0FHRV9OQU1FJHthY19kQn1QQUNLQUdFX05BTUUke2FjX2RDfSJHTlUgQmlzb24iJHthY19kRH0KLSR7YWNfZEF9UEFDS0FHRV9UQVJOQU1FJHthY19kQn1QQUNLQUdFX1RBUk5BTUUke2FjX2RDfSJiaXNvbiIke2FjX2REfQotJHthY19kQX1QQUNLQUdFX1ZFUlNJT04ke2FjX2RCfVBBQ0tBR0VfVkVSU0lPTiR7YWNfZEN9IjIuMyIke2FjX2REfQotJHthY19kQX1QQUNLQUdFX1NUUklORyR7YWNfZEJ9UEFDS0FHRV9TVFJJTkcke2FjX2RDfSJHTlUgQmlzb24gMi4zIiR7YWNfZER9Ci0ke2FjX2RBfVBBQ0tBR0VfQlVHUkVQT1JUJHthY19kQn1QQUNLQUdFX0JVR1JFUE9SVCR7YWNfZEN9ImJ1Zy1iaXNvbkBnbnUub3JnIiR7YWNfZER9Ci0ke2FjX2RBfVBBQ0tBR0Uke2FjX2RCfVBBQ0tBR0Uke2FjX2RDfSJiaXNvbiIke2FjX2REfQotJHthY19kQX1WRVJTSU9OJHthY19kQn1WRVJTSU9OJHthY19kQ30iMi4zIiR7YWNfZER9Ci0ke2FjX2RBfV9HTlVfU09VUkNFJHthY19kQn1fR05VX1NPVVJDRSR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfVNURENfSEVBREVSUyR7YWNfZEJ9U1REQ19IRUFERVJTJHthY19kQ30xJHthY19kRH0KLSR7YWNfZEF9SEFWRV9TWVNfVFlQRVNfSCR7YWNfZEJ9SEFWRV9TWVNfVFlQRVNfSCR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUhBVkVfU1lTX1NUQVRfSCR7YWNfZEJ9SEFWRV9TWVNfU1RBVF9IJHthY19kQ30xJHthY19kRH0KLSR7YWNfZEF9SEFWRV9TVERMSUJfSCR7YWNfZEJ9SEFWRV9TVERMSUJfSCR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUhBVkVfU1RSSU5HX0gke2FjX2RCfUhBVkVfU1RSSU5HX0gke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX01FTU9SWV9IJHthY19kQn1IQVZFX01FTU9SWV9IJHthY19kQ30xJHthY19kRH0KLSR7YWNfZEF9SEFWRV9TVFJJTkdTX0gke2FjX2RCfUhBVkVfU1RSSU5HU19IJHthY19kQ30xJHthY19kRH0KLSR7YWNfZEF9SEFWRV9JTlRUWVBFU19IJHthY19kQn1IQVZFX0lOVFRZUEVTX0gke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX1NURElOVF9IJHthY19kQn1IQVZFX1NURElOVF9IJHthY19kQ30xJHthY19kRH0KLSR7YWNfZEF9SEFWRV9VTklTVERfSCR7YWNfZEJ9SEFWRV9VTklTVERfSCR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfV9fRVhURU5TSU9OU19fJHthY19kQn1fX0VYVEVOU0lPTlNfXyR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfV9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUyR7YWNfZEJ9X1BPU0lYX1BUSFJFQURfU0VNQU5USUNTJHthY19kQ30xJHthY19kRH0KLSR7YWNfZEF9WVlURVhUX1BPSU5URVIke2FjX2RCfVlZVEVYVF9QT0lOVEVSJHthY19kQ30xJHthY19kRH0KLSR7YWNfZEF9TTQke2FjX2RCfU00JHthY19kQ30iL3Vzci9iaW4vbTQiJHthY19kRH0KLSR7YWNfZEF9SEFWRV9MT0NBTEVfSCR7YWNfZEJ9SEFWRV9MT0NBTEVfSCR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUhBVkVfV0NIQVJfSCR7YWNfZEJ9SEFWRV9XQ0hBUl9IJHthY19kQ30xJHthY19kRH0KLSR7YWNfZEF9SEFWRV9XQ1RZUEVfSCR7YWNfZEJ9SEFWRV9XQ1RZUEVfSCR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUhBVkVfX0JPT0wke2FjX2RCfUhBVkVfX0JPT0wke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX1NUREJPT0xfSCR7YWNfZEJ9SEFWRV9TVERCT09MX0gke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX1VJTlRQVFJfVCR7YWNfZEJ9SEFWRV9VSU5UUFRSX1Qke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX1NFVExPQ0FMRSR7YWNfZEJ9SEFWRV9TRVRMT0NBTEUke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX0lTQVNDSUkke2FjX2RCfUhBVkVfSVNBU0NJSSR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUhBVkVfSVNXUFJJTlQke2FjX2RCfUhBVkVfSVNXUFJJTlQke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX01CU0lOSVQke2FjX2RCfUhBVkVfTUJTSU5JVCR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUhBVkVfU1lTX1dBSVRfSCR7YWNfZEJ9SEFWRV9TWVNfV0FJVF9IJHthY19kQ30xJHthY19kRH0KLSR7YWNfZEF9SEFWRV9EVVAyJHthY19kQn1IQVZFX0RVUDIke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX1dBSVRQSUQke2FjX2RCfUhBVkVfV0FJVFBJRCR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUhBVkVfVU5JU1REX0gke2FjX2RCfUhBVkVfVU5JU1REX0gke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX0ZPUkske2FjX2RCfUhBVkVfRk9SSyR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUhBVkVfVkZPUkske2FjX2RCfUhBVkVfVkZPUkske2FjX2RDfTEke2FjX2REfQotQ0VPRgotICBzZWQgLWYgJHRtcC9kZWZpbmVzLnNlZCAkdG1wL2luID4kdG1wL291dAotICBybSAtZiAkdG1wL2luCi0gIG12ICR0bXAvb3V0ICR0bXAvaW4KLQotICBjYXQgPiR0bXAvZGVmaW5lcy5zZWQgPDxDRU9GCi0vXlsJIF0qI1sJIF0qZGVmaW5lLyFiCi10IGNscgotOiBjbHIKLSR7YWNfZEF9SEFWRV9XT1JLSU5HX1ZGT1JLJHthY19kQn1IQVZFX1dPUktJTkdfVkZPUkske2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX1dPUktJTkdfRk9SSyR7YWNfZEJ9SEFWRV9XT1JLSU5HX0ZPUkske2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX1NZU19USU1FX0gke2FjX2RCfUhBVkVfU1lTX1RJTUVfSCR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUhBVkVfU1lTX1RJTUVTX0gke2FjX2RCfUhBVkVfU1lTX1RJTUVTX0gke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX1NZU19SRVNPVVJDRV9IJHthY19kQn1IQVZFX1NZU19SRVNPVVJDRV9IJHthY19kQ30xJHthY19kRH0KLSR7YWNfZEF9SEFWRV9USU1FUyR7YWNfZEJ9SEFWRV9USU1FUyR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUhBVkVfREVDTF9HRVRSVVNBR0Uke2FjX2RCfUhBVkVfREVDTF9HRVRSVVNBR0Uke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX0RFQ0xfVElNRVMke2FjX2RCfUhBVkVfREVDTF9USU1FUyR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUhBVkVfREVDTF9DTE9DSyR7YWNfZEJ9SEFWRV9ERUNMX0NMT0NLJHthY19kQ30wJHthY19kRH0KLSR7YWNfZEF9SEFWRV9ERUNMX1NZU0NPTkYke2FjX2RCfUhBVkVfREVDTF9TWVNDT05GJHthY19kQ30xJHthY19kRH0KLSR7YWNfZEF9SEFWRV9DTE9DS19UJHthY19kQn1IQVZFX0NMT0NLX1Qke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX1NUUlVDVF9UTVMke2FjX2RCfUhBVkVfU1RSVUNUX1RNUyR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUZJTEVfU1lTVEVNX0FDQ0VQVFNfRFJJVkVfTEVUVEVSX1BSRUZJWCR7YWNfZEJ9RklMRV9TWVNURU1fQUNDRVBUU19EUklWRV9MRVRURVJfUFJFRklYJHthY19kQ30wJHthY19kRH0KLSR7YWNfZEF9RklMRV9TWVNURU1fQkFDS1NMQVNIX0lTX0ZJTEVfTkFNRV9TRVBBUkFUT1Ike2FjX2RCfUZJTEVfU1lTVEVNX0JBQ0tTTEFTSF9JU19GSUxFX05BTUVfU0VQQVJBVE9SJHthY19kQ30wJHthY19kRH0KLSR7YWNfZEF9SEFWRV9ERUNMX1NUUkVSUk9SX1Ike2FjX2RCfUhBVkVfREVDTF9TVFJFUlJPUl9SJHthY19kQ30xJHthY19kRH0KLSR7YWNfZEF9SEFWRV9TVFJFUlJPUl9SJHthY19kQn1IQVZFX1NUUkVSUk9SX1Ike2FjX2RDfTEke2FjX2REfQotJHthY19kQX1TVFJFUlJPUl9SX0NIQVJfUCR7YWNfZEJ9U1RSRVJST1JfUl9DSEFSX1Ake2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX0dFVE9QVF9IJHthY19kQn1IQVZFX0dFVE9QVF9IJHthY19kQ30xJHthY19kRH0KLSR7YWNfZEF9SEFWRV9HRVRPUFRfTE9OR19PTkxZJHthY19kQn1IQVZFX0dFVE9QVF9MT05HX09OTFkke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX0RFQ0xfR0VURU5WJHthY19kQn1IQVZFX0RFQ0xfR0VURU5WJHthY19kQ30xJHthY19kRH0KLSR7YWNfZEF9SEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWCR7YWNfZEJ9SEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWCR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUhBVkVfU1RESU5UX0hfV0lUSF9VSU5UTUFYJHthY19kQn1IQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUhBVkVfVU5TSUdORURfTE9OR19MT05HJHthY19kQn1IQVZFX1VOU0lHTkVEX0xPTkdfTE9ORyR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUhBVkVfVUlOVE1BWF9UJHthY19kQn1IQVZFX1VJTlRNQVhfVCR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUhBVkVfREVDTF9TVFJEVVAke2FjX2RCfUhBVkVfREVDTF9TVFJEVVAke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX0RFQ0xfU1RSTkRVUCR7YWNfZEJ9SEFWRV9ERUNMX1NUUk5EVVAke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX0RFQ0xfU1RSTkxFTiR7YWNfZEJ9SEFWRV9ERUNMX1NUUk5MRU4ke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX0RFQ0xfQ0xFQVJFUlJfVU5MT0NLRUQke2FjX2RCfUhBVkVfREVDTF9DTEVBUkVSUl9VTkxPQ0tFRCR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUhBVkVfREVDTF9GRU9GX1VOTE9DS0VEJHthY19kQn1IQVZFX0RFQ0xfRkVPRl9VTkxPQ0tFRCR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUhBVkVfREVDTF9GRVJST1JfVU5MT0NLRUQke2FjX2RCfUhBVkVfREVDTF9GRVJST1JfVU5MT0NLRUQke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX0RFQ0xfRkZMVVNIX1VOTE9DS0VEJHthY19kQn1IQVZFX0RFQ0xfRkZMVVNIX1VOTE9DS0VEJHthY19kQ30xJHthY19kRH0KLSR7YWNfZEF9SEFWRV9ERUNMX0ZHRVRTX1VOTE9DS0VEJHthY19kQn1IQVZFX0RFQ0xfRkdFVFNfVU5MT0NLRUQke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX0RFQ0xfRlBVVENfVU5MT0NLRUQke2FjX2RCfUhBVkVfREVDTF9GUFVUQ19VTkxPQ0tFRCR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUhBVkVfREVDTF9GUFVUU19VTkxPQ0tFRCR7YWNfZEJ9SEFWRV9ERUNMX0ZQVVRTX1VOTE9DS0VEJHthY19kQ30xJHthY19kRH0KLSR7YWNfZEF9SEFWRV9ERUNMX0ZSRUFEX1VOTE9DS0VEJHthY19kQn1IQVZFX0RFQ0xfRlJFQURfVU5MT0NLRUQke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX0RFQ0xfRldSSVRFX1VOTE9DS0VEJHthY19kQn1IQVZFX0RFQ0xfRldSSVRFX1VOTE9DS0VEJHthY19kQ30xJHthY19kRH0KLSR7YWNfZEF9SEFWRV9ERUNMX0dFVENfVU5MT0NLRUQke2FjX2RCfUhBVkVfREVDTF9HRVRDX1VOTE9DS0VEJHthY19kQ30xJHthY19kRH0KLSR7YWNfZEF9SEFWRV9ERUNMX0dFVENIQVJfVU5MT0NLRUQke2FjX2RCfUhBVkVfREVDTF9HRVRDSEFSX1VOTE9DS0VEJHthY19kQ30xJHthY19kRH0KLUNFT0YKLSAgc2VkIC1mICR0bXAvZGVmaW5lcy5zZWQgJHRtcC9pbiA+JHRtcC9vdXQKLSAgcm0gLWYgJHRtcC9pbgotICBtdiAkdG1wL291dCAkdG1wL2luCi0KLSAgY2F0ID4kdG1wL2RlZmluZXMuc2VkIDw8Q0VPRgotL15bCSBdKiNbCSBdKmRlZmluZS8hYgotdCBjbHIKLTogY2xyCi0ke2FjX2RBfUhBVkVfREVDTF9QVVRDX1VOTE9DS0VEJHthY19kQn1IQVZFX0RFQ0xfUFVUQ19VTkxPQ0tFRCR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUhBVkVfREVDTF9QVVRDSEFSX1VOTE9DS0VEJHthY19kQn1IQVZFX0RFQ0xfUFVUQ0hBUl9VTkxPQ0tFRCR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUVOQUJMRV9OTFMke2FjX2RCfUVOQUJMRV9OTFMke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX0dFVFRFWFQke2FjX2RCfUhBVkVfR0VUVEVYVCR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUhBVkVfRENHRVRURVhUJHthY19kQn1IQVZFX0RDR0VUVEVYVCR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUhBVkVfU1RETElCX0gke2FjX2RCfUhBVkVfU1RETElCX0gke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX01BTExPQyR7YWNfZEJ9SEFWRV9NQUxMT0Mke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX0lTV0NOVFJMJHthY19kQn1IQVZFX0lTV0NOVFJMJHthY19kQ30xJHthY19kRH0KLSR7YWNfZEF9SEFWRV9XQ1dJRFRIJHthY19kQn1IQVZFX1dDV0lEVEgke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX01CUlRPV0Mke2FjX2RCfUhBVkVfTUJSVE9XQyR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUhBVkVfREVDTF9XQ1dJRFRIJHthY19kQn1IQVZFX0RFQ0xfV0NXSURUSCR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUhBVkVfREVDTF9NQlNXSURUSF9JTl9XQ0hBUl9IJHthY19kQn1IQVZFX0RFQ0xfTUJTV0lEVEhfSU5fV0NIQVJfSCR7YWNfZEN9MCR7YWNfZER9Ci0ke2FjX2RBfUhBVkVfTUJTVEFURV9UJHthY19kQn1IQVZFX01CU1RBVEVfVCR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUhBVkVfT0JTVEFDSyR7YWNfZEJ9SEFWRV9PQlNUQUNLJHthY19kQ30xJHthY19kRH0KLSR7YWNfZEF9SEFWRV9NQlNUQVRFX1Qke2FjX2RCfUhBVkVfTUJTVEFURV9UJHthY19kQ30xJHthY19kRH0KLSR7YWNfZEF9SEFWRV9NQlJUT1dDJHthY19kQn1IQVZFX01CUlRPV0Mke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX1NUUENQWSR7YWNfZEJ9SEFWRV9TVFBDUFkke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX1NUUkRVUCR7YWNfZEJ9SEFWRV9TVFJEVVAke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX1NUUkVSUk9SJHthY19kQn1IQVZFX1NUUkVSUk9SJHthY19kQ30xJHthY19kRH0KLSR7YWNfZEF9SEFWRV9TVFJORFVQJHthY19kQn1IQVZFX1NUUk5EVVAke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX1NUUlRPTCR7YWNfZEJ9SEFWRV9TVFJUT0wke2FjX2RDfTEke2FjX2REfQotJHthY19kQX1IQVZFX1NUUlRPVUwke2FjX2RCfUhBVkVfU1RSVE9VTCR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfUhBVkVfU1RSVkVSU0NNUCR7YWNfZEJ9SEFWRV9TVFJWRVJTQ01QJHthY19kQ30xJHthY19kRH0KLSR7YWNfZEF9SEFWRV9VTklTVERfSCR7YWNfZEJ9SEFWRV9VTklTVERfSCR7YWNfZEN9MSR7YWNfZER9Ci0ke2FjX2RBfVVTRV9VTkxPQ0tFRF9JTyR7YWNfZEJ9VVNFX1VOTE9DS0VEX0lPJHthY19kQ30xJHthY19kRH0KLSR7YWNfZEF9WVlFTkFCTEVfTkxTJHthY19kQn1ZWUVOQUJMRV9OTFMke2FjX2RDfTEke2FjX2REfQotQ0VPRgotICBzZWQgLWYgJHRtcC9kZWZpbmVzLnNlZCAkdG1wL2luID4kdG1wL291dAotICBybSAtZiAkdG1wL2luCi0gIG12ICR0bXAvb3V0ICR0bXAvaW4KLQotICBmaSAjIGdyZXAKLQotICAjIEhhbmRsZSBhbGwgdGhlICN1bmRlZiB0ZW1wbGF0ZXMKLSAgY2F0ID4kdG1wL3VuZGVmcy5zZWQgPDxDRU9GCi0vXlsJIF0qI1sJIF0qdW5kZWYvIWIKLXQgY2xyCi06IGNscgotJHthY191QX1QQUNLQUdFX05BTUUke2FjX3VCfVBBQ0tBR0VfTkFNRSR7YWNfdUN9IkdOVSBCaXNvbiIke2FjX3VEfQotJHthY191QX1QQUNLQUdFX1RBUk5BTUUke2FjX3VCfVBBQ0tBR0VfVEFSTkFNRSR7YWNfdUN9ImJpc29uIiR7YWNfdUR9Ci0ke2FjX3VBfVBBQ0tBR0VfVkVSU0lPTiR7YWNfdUJ9UEFDS0FHRV9WRVJTSU9OJHthY191Q30iMi4zIiR7YWNfdUR9Ci0ke2FjX3VBfVBBQ0tBR0VfU1RSSU5HJHthY191Qn1QQUNLQUdFX1NUUklORyR7YWNfdUN9IkdOVSBCaXNvbiAyLjMiJHthY191RH0KLSR7YWNfdUF9UEFDS0FHRV9CVUdSRVBPUlQke2FjX3VCfVBBQ0tBR0VfQlVHUkVQT1JUJHthY191Q30iYnVnLWJpc29uQGdudS5vcmciJHthY191RH0KLSR7YWNfdUF9UEFDS0FHRSR7YWNfdUJ9UEFDS0FHRSR7YWNfdUN9ImJpc29uIiR7YWNfdUR9Ci0ke2FjX3VBfVZFUlNJT04ke2FjX3VCfVZFUlNJT04ke2FjX3VDfSIyLjMiJHthY191RH0KLSR7YWNfdUF9X0dOVV9TT1VSQ0Uke2FjX3VCfV9HTlVfU09VUkNFJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9U1REQ19IRUFERVJTJHthY191Qn1TVERDX0hFQURFUlMke2FjX3VDfTEke2FjX3VEfQotJHthY191QX1IQVZFX1NZU19UWVBFU19IJHthY191Qn1IQVZFX1NZU19UWVBFU19IJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9SEFWRV9TWVNfU1RBVF9IJHthY191Qn1IQVZFX1NZU19TVEFUX0gke2FjX3VDfTEke2FjX3VEfQotJHthY191QX1IQVZFX1NURExJQl9IJHthY191Qn1IQVZFX1NURExJQl9IJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9SEFWRV9TVFJJTkdfSCR7YWNfdUJ9SEFWRV9TVFJJTkdfSCR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfTUVNT1JZX0gke2FjX3VCfUhBVkVfTUVNT1JZX0gke2FjX3VDfTEke2FjX3VEfQotJHthY191QX1IQVZFX1NUUklOR1NfSCR7YWNfdUJ9SEFWRV9TVFJJTkdTX0gke2FjX3VDfTEke2FjX3VEfQotJHthY191QX1IQVZFX0lOVFRZUEVTX0gke2FjX3VCfUhBVkVfSU5UVFlQRVNfSCR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfU1RESU5UX0gke2FjX3VCfUhBVkVfU1RESU5UX0gke2FjX3VDfTEke2FjX3VEfQotJHthY191QX1IQVZFX1VOSVNURF9IJHthY191Qn1IQVZFX1VOSVNURF9IJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9X19FWFRFTlNJT05TX18ke2FjX3VCfV9fRVhURU5TSU9OU19fJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9X1BPU0lYX1BUSFJFQURfU0VNQU5USUNTJHthY191Qn1fUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1Mke2FjX3VDfTEke2FjX3VEfQotJHthY191QX1ZWVRFWFRfUE9JTlRFUiR7YWNfdUJ9WVlURVhUX1BPSU5URVIke2FjX3VDfTEke2FjX3VEfQotJHthY191QX1NNCR7YWNfdUJ9TTQke2FjX3VDfSIvdXNyL2Jpbi9tNCIke2FjX3VEfQotJHthY191QX1IQVZFX0xPQ0FMRV9IJHthY191Qn1IQVZFX0xPQ0FMRV9IJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9SEFWRV9XQ0hBUl9IJHthY191Qn1IQVZFX1dDSEFSX0gke2FjX3VDfTEke2FjX3VEfQotJHthY191QX1IQVZFX1dDVFlQRV9IJHthY191Qn1IQVZFX1dDVFlQRV9IJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9SEFWRV9fQk9PTCR7YWNfdUJ9SEFWRV9fQk9PTCR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfU1REQk9PTF9IJHthY191Qn1IQVZFX1NUREJPT0xfSCR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfVUlOVFBUUl9UJHthY191Qn1IQVZFX1VJTlRQVFJfVCR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfU0VUTE9DQUxFJHthY191Qn1IQVZFX1NFVExPQ0FMRSR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfSVNBU0NJSSR7YWNfdUJ9SEFWRV9JU0FTQ0lJJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9SEFWRV9JU1dQUklOVCR7YWNfdUJ9SEFWRV9JU1dQUklOVCR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfTUJTSU5JVCR7YWNfdUJ9SEFWRV9NQlNJTklUJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9SEFWRV9TWVNfV0FJVF9IJHthY191Qn1IQVZFX1NZU19XQUlUX0gke2FjX3VDfTEke2FjX3VEfQotJHthY191QX1IQVZFX0RVUDIke2FjX3VCfUhBVkVfRFVQMiR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfV0FJVFBJRCR7YWNfdUJ9SEFWRV9XQUlUUElEJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9SEFWRV9VTklTVERfSCR7YWNfdUJ9SEFWRV9VTklTVERfSCR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfRk9SSyR7YWNfdUJ9SEFWRV9GT1JLJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9SEFWRV9WRk9SSyR7YWNfdUJ9SEFWRV9WRk9SSyR7YWNfdUN9MSR7YWNfdUR9Ci1DRU9GCi0gIHNlZCAtZiAkdG1wL3VuZGVmcy5zZWQgJHRtcC9pbiA+JHRtcC9vdXQKLSAgcm0gLWYgJHRtcC9pbgotICBtdiAkdG1wL291dCAkdG1wL2luCi0KLSAgY2F0ID4kdG1wL3VuZGVmcy5zZWQgPDxDRU9GCi0vXlsJIF0qI1sJIF0qdW5kZWYvIWIKLXQgY2xyCi06IGNscgotJHthY191QX1IQVZFX1dPUktJTkdfVkZPUkske2FjX3VCfUhBVkVfV09SS0lOR19WRk9SSyR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfV09SS0lOR19GT1JLJHthY191Qn1IQVZFX1dPUktJTkdfRk9SSyR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfU1lTX1RJTUVfSCR7YWNfdUJ9SEFWRV9TWVNfVElNRV9IJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9SEFWRV9TWVNfVElNRVNfSCR7YWNfdUJ9SEFWRV9TWVNfVElNRVNfSCR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfU1lTX1JFU09VUkNFX0gke2FjX3VCfUhBVkVfU1lTX1JFU09VUkNFX0gke2FjX3VDfTEke2FjX3VEfQotJHthY191QX1IQVZFX1RJTUVTJHthY191Qn1IQVZFX1RJTUVTJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9SEFWRV9ERUNMX0dFVFJVU0FHRSR7YWNfdUJ9SEFWRV9ERUNMX0dFVFJVU0FHRSR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfREVDTF9USU1FUyR7YWNfdUJ9SEFWRV9ERUNMX1RJTUVTJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9SEFWRV9ERUNMX0NMT0NLJHthY191Qn1IQVZFX0RFQ0xfQ0xPQ0ske2FjX3VDfTAke2FjX3VEfQotJHthY191QX1IQVZFX0RFQ0xfU1lTQ09ORiR7YWNfdUJ9SEFWRV9ERUNMX1NZU0NPTkYke2FjX3VDfTEke2FjX3VEfQotJHthY191QX1IQVZFX0NMT0NLX1Qke2FjX3VCfUhBVkVfQ0xPQ0tfVCR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfU1RSVUNUX1RNUyR7YWNfdUJ9SEFWRV9TVFJVQ1RfVE1TJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9RklMRV9TWVNURU1fQUNDRVBUU19EUklWRV9MRVRURVJfUFJFRklYJHthY191Qn1GSUxFX1NZU1RFTV9BQ0NFUFRTX0RSSVZFX0xFVFRFUl9QUkVGSVgke2FjX3VDfTAke2FjX3VEfQotJHthY191QX1GSUxFX1NZU1RFTV9CQUNLU0xBU0hfSVNfRklMRV9OQU1FX1NFUEFSQVRPUiR7YWNfdUJ9RklMRV9TWVNURU1fQkFDS1NMQVNIX0lTX0ZJTEVfTkFNRV9TRVBBUkFUT1Ike2FjX3VDfTAke2FjX3VEfQotJHthY191QX1IQVZFX0RFQ0xfU1RSRVJST1JfUiR7YWNfdUJ9SEFWRV9ERUNMX1NUUkVSUk9SX1Ike2FjX3VDfTEke2FjX3VEfQotJHthY191QX1IQVZFX1NUUkVSUk9SX1Ike2FjX3VCfUhBVkVfU1RSRVJST1JfUiR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfVNUUkVSUk9SX1JfQ0hBUl9QJHthY191Qn1TVFJFUlJPUl9SX0NIQVJfUCR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfR0VUT1BUX0gke2FjX3VCfUhBVkVfR0VUT1BUX0gke2FjX3VDfTEke2FjX3VEfQotJHthY191QX1IQVZFX0dFVE9QVF9MT05HX09OTFkke2FjX3VCfUhBVkVfR0VUT1BUX0xPTkdfT05MWSR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfREVDTF9HRVRFTlYke2FjX3VCfUhBVkVfREVDTF9HRVRFTlYke2FjX3VDfTEke2FjX3VEfQotJHthY191QX1IQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYJHthY191Qn1IQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9SEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVgke2FjX3VCfUhBVkVfU1RESU5UX0hfV0lUSF9VSU5UTUFYJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9SEFWRV9VTlNJR05FRF9MT05HX0xPTkcke2FjX3VCfUhBVkVfVU5TSUdORURfTE9OR19MT05HJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9SEFWRV9VSU5UTUFYX1Qke2FjX3VCfUhBVkVfVUlOVE1BWF9UJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9SEFWRV9ERUNMX1NUUkRVUCR7YWNfdUJ9SEFWRV9ERUNMX1NUUkRVUCR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfREVDTF9TVFJORFVQJHthY191Qn1IQVZFX0RFQ0xfU1RSTkRVUCR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfREVDTF9TVFJOTEVOJHthY191Qn1IQVZFX0RFQ0xfU1RSTkxFTiR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfREVDTF9DTEVBUkVSUl9VTkxPQ0tFRCR7YWNfdUJ9SEFWRV9ERUNMX0NMRUFSRVJSX1VOTE9DS0VEJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9SEFWRV9ERUNMX0ZFT0ZfVU5MT0NLRUQke2FjX3VCfUhBVkVfREVDTF9GRU9GX1VOTE9DS0VEJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9SEFWRV9ERUNMX0ZFUlJPUl9VTkxPQ0tFRCR7YWNfdUJ9SEFWRV9ERUNMX0ZFUlJPUl9VTkxPQ0tFRCR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfREVDTF9GRkxVU0hfVU5MT0NLRUQke2FjX3VCfUhBVkVfREVDTF9GRkxVU0hfVU5MT0NLRUQke2FjX3VDfTEke2FjX3VEfQotJHthY191QX1IQVZFX0RFQ0xfRkdFVFNfVU5MT0NLRUQke2FjX3VCfUhBVkVfREVDTF9GR0VUU19VTkxPQ0tFRCR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfREVDTF9GUFVUQ19VTkxPQ0tFRCR7YWNfdUJ9SEFWRV9ERUNMX0ZQVVRDX1VOTE9DS0VEJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9SEFWRV9ERUNMX0ZQVVRTX1VOTE9DS0VEJHthY191Qn1IQVZFX0RFQ0xfRlBVVFNfVU5MT0NLRUQke2FjX3VDfTEke2FjX3VEfQotJHthY191QX1IQVZFX0RFQ0xfRlJFQURfVU5MT0NLRUQke2FjX3VCfUhBVkVfREVDTF9GUkVBRF9VTkxPQ0tFRCR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfREVDTF9GV1JJVEVfVU5MT0NLRUQke2FjX3VCfUhBVkVfREVDTF9GV1JJVEVfVU5MT0NLRUQke2FjX3VDfTEke2FjX3VEfQotJHthY191QX1IQVZFX0RFQ0xfR0VUQ19VTkxPQ0tFRCR7YWNfdUJ9SEFWRV9ERUNMX0dFVENfVU5MT0NLRUQke2FjX3VDfTEke2FjX3VEfQotJHthY191QX1IQVZFX0RFQ0xfR0VUQ0hBUl9VTkxPQ0tFRCR7YWNfdUJ9SEFWRV9ERUNMX0dFVENIQVJfVU5MT0NLRUQke2FjX3VDfTEke2FjX3VEfQotQ0VPRgotICBzZWQgLWYgJHRtcC91bmRlZnMuc2VkICR0bXAvaW4gPiR0bXAvb3V0Ci0gIHJtIC1mICR0bXAvaW4KLSAgbXYgJHRtcC9vdXQgJHRtcC9pbgotCi0gIGNhdCA+JHRtcC91bmRlZnMuc2VkIDw8Q0VPRgotL15bCSBdKiNbCSBdKnVuZGVmLyFiCi10IGNscgotOiBjbHIKLSR7YWNfdUF9SEFWRV9ERUNMX1BVVENfVU5MT0NLRUQke2FjX3VCfUhBVkVfREVDTF9QVVRDX1VOTE9DS0VEJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9SEFWRV9ERUNMX1BVVENIQVJfVU5MT0NLRUQke2FjX3VCfUhBVkVfREVDTF9QVVRDSEFSX1VOTE9DS0VEJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9RU5BQkxFX05MUyR7YWNfdUJ9RU5BQkxFX05MUyR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfR0VUVEVYVCR7YWNfdUJ9SEFWRV9HRVRURVhUJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9SEFWRV9EQ0dFVFRFWFQke2FjX3VCfUhBVkVfRENHRVRURVhUJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9SEFWRV9TVERMSUJfSCR7YWNfdUJ9SEFWRV9TVERMSUJfSCR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfTUFMTE9DJHthY191Qn1IQVZFX01BTExPQyR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfSVNXQ05UUkwke2FjX3VCfUhBVkVfSVNXQ05UUkwke2FjX3VDfTEke2FjX3VEfQotJHthY191QX1IQVZFX1dDV0lEVEgke2FjX3VCfUhBVkVfV0NXSURUSCR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfTUJSVE9XQyR7YWNfdUJ9SEFWRV9NQlJUT1dDJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9SEFWRV9ERUNMX1dDV0lEVEgke2FjX3VCfUhBVkVfREVDTF9XQ1dJRFRIJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9SEFWRV9ERUNMX01CU1dJRFRIX0lOX1dDSEFSX0gke2FjX3VCfUhBVkVfREVDTF9NQlNXSURUSF9JTl9XQ0hBUl9IJHthY191Q30wJHthY191RH0KLSR7YWNfdUF9SEFWRV9NQlNUQVRFX1Qke2FjX3VCfUhBVkVfTUJTVEFURV9UJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9SEFWRV9PQlNUQUNLJHthY191Qn1IQVZFX09CU1RBQ0ske2FjX3VDfTEke2FjX3VEfQotJHthY191QX1IQVZFX01CU1RBVEVfVCR7YWNfdUJ9SEFWRV9NQlNUQVRFX1Qke2FjX3VDfTEke2FjX3VEfQotJHthY191QX1IQVZFX01CUlRPV0Mke2FjX3VCfUhBVkVfTUJSVE9XQyR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfU1RQQ1BZJHthY191Qn1IQVZFX1NUUENQWSR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfU1RSRFVQJHthY191Qn1IQVZFX1NUUkRVUCR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfU1RSRVJST1Ike2FjX3VCfUhBVkVfU1RSRVJST1Ike2FjX3VDfTEke2FjX3VEfQotJHthY191QX1IQVZFX1NUUk5EVVAke2FjX3VCfUhBVkVfU1RSTkRVUCR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfU1RSVE9MJHthY191Qn1IQVZFX1NUUlRPTCR7YWNfdUN9MSR7YWNfdUR9Ci0ke2FjX3VBfUhBVkVfU1RSVE9VTCR7YWNfdUJ9SEFWRV9TVFJUT1VMJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9SEFWRV9TVFJWRVJTQ01QJHthY191Qn1IQVZFX1NUUlZFUlNDTVAke2FjX3VDfTEke2FjX3VEfQotJHthY191QX1IQVZFX1VOSVNURF9IJHthY191Qn1IQVZFX1VOSVNURF9IJHthY191Q30xJHthY191RH0KLSR7YWNfdUF9VVNFX1VOTE9DS0VEX0lPJHthY191Qn1VU0VfVU5MT0NLRURfSU8ke2FjX3VDfTEke2FjX3VEfQotJHthY191QX1ZWUVOQUJMRV9OTFMke2FjX3VCfVlZRU5BQkxFX05MUyR7YWNfdUN9MSR7YWNfdUR9Ci1zLF5bCSBdKiNbCSBdKnVuZGVmWwkgXVsJIF0qW2EtekEtWl9dW2EtekEtWl8wLTldKiwvKiAmICovLAotQ0VPRgotICBzZWQgLWYgJHRtcC91bmRlZnMuc2VkICR0bXAvaW4gPiR0bXAvb3V0Ci0gIHJtIC1mICR0bXAvaW4KLSAgbXYgJHRtcC9vdXQgJHRtcC9pbgotCi0gICMgTGV0J3Mgc3RpbGwgcHJldGVuZCBpdCBpcyBgY29uZmlndXJlJyB3aGljaCBpbnN0YW50aWF0ZXMgKGkuZS4sIGRvbid0Ci0gICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKLSAgIyAgICAvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBieSBjb25maWcuc3RhdHVzLiAgKi8KLSAgaWYgdGVzdCB4IiRhY19maWxlIiA9IHgtOyB0aGVuCi0gICAgZWNobyAiLyogR2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gICovIiA+JHRtcC9jb25maWcuaAotICBlbHNlCi0gICAgZWNobyAiLyogJGFjX2ZpbGUuICBHZW5lcmF0ZWQgYnkgY29uZmlndXJlLiAgKi8iID4kdG1wL2NvbmZpZy5oCi0gIGZpCi0gIGNhdCAkdG1wL2luID4+JHRtcC9jb25maWcuaAotICBybSAtZiAkdG1wL2luCi0gIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KLSAgICBpZiBkaWZmICRhY19maWxlICR0bXAvY29uZmlnLmggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNQotZWNobyAiJGFzX21lOiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNjt9Ci0gICAgZWxzZQotICAgICAgYWNfZGlyPWAoZGlybmFtZSAiJGFjX2ZpbGUiKSAyPi9kZXYvbnVsbCB8fAotJGFzX2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCBcCi0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiRhY19maWxlIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKLSAgICAgIHsgaWYgJGFzX21rZGlyX3A7IHRoZW4KLSAgICBta2RpciAtcCAiJGFjX2RpciIKLSAgZWxzZQotICAgIGFzX2Rpcj0iJGFjX2RpciIKLSAgICBhc19kaXJzPQotICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCi0gICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgotICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8Ci0kYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAotCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkYXNfZGlyIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKLSAgICBkb25lCi0gICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKLSAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KLQotICAgICAgcm0gLWYgJGFjX2ZpbGUKLSAgICAgIG12ICR0bXAvY29uZmlnLmggJGFjX2ZpbGUKLSAgICBmaQotICBlbHNlCi0gICAgY2F0ICR0bXAvY29uZmlnLmgKLSAgICBybSAtZiAkdG1wL2NvbmZpZy5oCi0gIGZpCi0jIENvbXB1dGUgJGFjX2ZpbGUncyBpbmRleCBpbiAkY29uZmlnX2hlYWRlcnMuCi1fYW1fc3RhbXBfY291bnQ9MQotZm9yIF9hbV9oZWFkZXIgaW4gJGNvbmZpZ19oZWFkZXJzIDo7IGRvCi0gIGNhc2UgJF9hbV9oZWFkZXIgaW4KLSAgICAkYWNfZmlsZSB8ICRhY19maWxlOiogKQotICAgICAgYnJlYWsgOzsKLSAgICAqICkKLSAgICAgIF9hbV9zdGFtcF9jb3VudD1gZXhwciAkX2FtX3N0YW1wX2NvdW50ICsgMWAgOzsKLSAgZXNhYwotZG9uZQotZWNobyAidGltZXN0YW1wIGZvciAkYWNfZmlsZSIgPmAoZGlybmFtZSAkYWNfZmlsZSkgMj4vZGV2L251bGwgfHwKLSRhc19leHByIFgkYWNfZmlsZSA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAotCSBYJGFjX2ZpbGUgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCRhY19maWxlIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgkYWNfZmlsZSA6ICdYXCgvXCknIFx8IFwKLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgkYWNfZmlsZSB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2Avc3RhbXAtaCRfYW1fc3RhbXBfY291bnQKLWRvbmUKLQotIwotIyBDT05GSUdfQ09NTUFORFMgc2VjdGlvbi4KLSMKLWZvciBhY19maWxlIGluIDogJENPTkZJR19DT01NQU5EUzsgZG8gdGVzdCAieCRhY19maWxlIiA9IHg6ICYmIGNvbnRpbnVlCi0gIGFjX2Rlc3Q9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgCi0gIGFjX3NvdXJjZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKLSAgYWNfZGlyPWAoZGlybmFtZSAiJGFjX2Rlc3QiKSAyPi9kZXYvbnVsbCB8fAotJGFzX2V4cHIgWCIkYWNfZGVzdCIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkYWNfZGVzdCIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkYWNfZGVzdCIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkYWNfZGVzdCIgOiAnWFwoL1wpJyBcfCBcCi0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiRhY19kZXN0IiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKLSAgeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgotICAgIG1rZGlyIC1wICIkYWNfZGlyIgotICBlbHNlCi0gICAgYXNfZGlyPSIkYWNfZGlyIgotICAgIGFzX2RpcnM9Ci0gICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KLSAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCi0gICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKLSRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCi0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiRhc19kaXIiIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIHMvLiovLi87IHEnYAotICAgIGRvbmUKLSAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycwotICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQotCi0gIGFjX2J1aWxkZGlyPS4KLQotaWYgdGVzdCAiJGFjX2RpciIgIT0gLjsgdGhlbgotICBhY19kaXJfc3VmZml4PS9gZWNobyAiJGFjX2RpciIgfCBzZWQgJ3MsXlwuW1xcL10sLCdgCi0gICMgQSAiLi4vIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCi0gIGFjX3RvcF9idWlsZGRpcj1gZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzLC9bXlxcL10qLC4uLyxnJ2AKLWVsc2UKLSAgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyPQotZmkKLQotY2FzZSAkc3JjZGlyIGluCi0gIC4pICAjIE5vIC0tc3JjZGlyIG9wdGlvbi4gIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KLSAgICBhY19zcmNkaXI9LgotICAgIGlmIHRlc3QgLXogIiRhY190b3BfYnVpbGRkaXIiOyB0aGVuCi0gICAgICAgYWNfdG9wX3NyY2Rpcj0uCi0gICAgZWxzZQotICAgICAgIGFjX3RvcF9zcmNkaXI9YGVjaG8gJGFjX3RvcF9idWlsZGRpciB8IHNlZCAncywvJCwsJ2AKLSAgICBmaSA7OwotICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIHBhdGguCi0gICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKLSAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKLSAgKikgIyBSZWxhdGl2ZSBwYXRoLgotICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciRhY19kaXJfc3VmZml4Ci0gICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciA7OwotZXNhYwotCi0jIERvIG5vdCB1c2UgYGNkIGZvbyAmJiBwd2RgIHRvIGNvbXB1dGUgYWJzb2x1dGUgcGF0aHMsIGJlY2F1c2UKLSMgdGhlIGRpcmVjdG9yaWVzIG1heSBub3QgZXhpc3QuCi1jYXNlIGBwd2RgIGluCi0uKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKLSopCi0gIGNhc2UgIiRhY19kaXIiIGluCi0gIC4pIGFjX2Fic19idWlsZGRpcj1gcHdkYDs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7Ci0gICopIGFjX2Fic19idWlsZGRpcj1gcHdkYC8iJGFjX2RpciI7OwotICBlc2FjOzsKLWVzYWMKLWNhc2UgJGFjX2Fic19idWlsZGRpciBpbgotLikgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKLSopCi0gIGNhc2UgJHthY190b3BfYnVpbGRkaXJ9LiBpbgotICAuKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXI7OwotICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7Ci0gICopIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpci8ke2FjX3RvcF9idWlsZGRpcn0uOzsKLSAgZXNhYzs7Ci1lc2FjCi1jYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KLS4pIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7Ci0qKQotICBjYXNlICRhY19zcmNkaXIgaW4KLSAgLikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OwotICAqKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3NyY2Rpcjs7Ci0gIGVzYWM7OwotZXNhYwotY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCi0uKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7Ci0qKQotICBjYXNlICRhY190b3Bfc3JjZGlyIGluCi0gIC4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OwotICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKLSAgKikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfdG9wX3NyY2Rpcjs7Ci0gIGVzYWM7OwotZXNhYwotCi0KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXhlY3V0aW5nICRhY19kZXN0IGNvbW1hbmRzIiA+JjUKLWVjaG8gIiRhc19tZTogZXhlY3V0aW5nICRhY19kZXN0IGNvbW1hbmRzIiA+JjY7fQotICBjYXNlICRhY19kZXN0IGluCi0gICAgZGVwZmlsZXMgKSB0ZXN0IHgiJEFNREVQX1RSVUUiICE9IHgiIiB8fCBmb3IgbWYgaW4gJENPTkZJR19GSUxFUzsgZG8KLSAgIyBTdHJpcCBNRiBzbyB3ZSBlbmQgdXAgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KLSAgbWY9YGVjaG8gIiRtZiIgfCBzZWQgLWUgJ3MvOi4qJC8vJ2AKLSAgIyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYW4gQXV0b21ha2UgZ2VuZXJhdGVkIE1ha2VmaWxlIG9yIG5vdC4KLSAgIyBXZSB1c2VkIHRvIG1hdGNoIG9ubHkgdGhlIGZpbGVzIG5hbWVkIGBNYWtlZmlsZS5pbicsIGJ1dAotICAjIHNvbWUgcGVvcGxlIHJlbmFtZSB0aGVtOyBzbyBpbnN0ZWFkIHdlIGxvb2sgYXQgdGhlIGZpbGUgY29udGVudC4KLSAgIyBHcmVwJ2luZyB0aGUgZmlyc3QgbGluZSBpcyBub3QgZW5vdWdoOiBzb21lIHBlb3BsZSBwb3N0LXByb2Nlc3MKLSAgIyBlYWNoIE1ha2VmaWxlLmluIGFuZCBhZGQgYSBuZXcgbGluZSBvbiB0b3Agb2YgZWFjaCBmaWxlIHRvIHNheSBzby4KLSAgIyBTbyBsZXQncyBncmVwIHdob2xlIGZpbGUuCi0gIGlmIGdyZXAgJ14jLipnZW5lcmF0ZWQgYnkgYXV0b21ha2UnICRtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgZGlycGFydD1gKGRpcm5hbWUgIiRtZiIpIDI+L2Rldi9udWxsIHx8Ci0kYXNfZXhwciBYIiRtZiIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkbWYiIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgiJG1mIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiRtZiIgOiAnWFwoL1wpJyBcfCBcCi0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiRtZiIgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KLSAgCSAgcy8uKi8uLzsgcSdgCi0gIGVsc2UKLSAgICBjb250aW51ZQotICBmaQotICAjIEV4dHJhY3QgdGhlIGRlZmluaXRpb24gb2YgREVQRElSLCBhbV9faW5jbHVkZSwgYW5kIGFtX19xdW90ZQotICAjIGZyb20gdGhlIE1ha2VmaWxlIHdpdGhvdXQgcnVubmluZyBgbWFrZScuCi0gIERFUERJUj1gc2VkIC1uICdzL15ERVBESVIgPSAvL3AnIDwgIiRtZiJgCi0gIHRlc3QgLXogIiRERVBESVIiICYmIGNvbnRpbnVlCi0gIGFtX19pbmNsdWRlPWBzZWQgLW4gJ3MvXmFtX19pbmNsdWRlID0gLy9wJyA8ICIkbWYiYAotICB0ZXN0IC16ICJhbV9faW5jbHVkZSIgJiYgY29udGludWUKLSAgYW1fX3F1b3RlPWBzZWQgLW4gJ3MvXmFtX19xdW90ZSA9IC8vcCcgPCAiJG1mImAKLSAgIyBXaGVuIHVzaW5nIGFuc2kya25yLCBVIG1heSBiZSBlbXB0eSBvciBhbiB1bmRlcnNjb3JlOyBleHBhbmQgaXQKLSAgVT1gc2VkIC1uICdzL15VID0gLy9wJyA8ICIkbWYiYAotICAjIEZpbmQgYWxsIGRlcGVuZGVuY3kgb3V0cHV0IGZpbGVzLCB0aGV5IGFyZSBpbmNsdWRlZCBmaWxlcyB3aXRoCi0gICMgJChERVBESVIpIGluIHRoZWlyIG5hbWVzLiAgV2UgaW52b2tlIHNlZCB0d2ljZSBiZWNhdXNlIGl0IGlzIHRoZQotICAjIHNpbXBsZXN0IGFwcHJvYWNoIHRvIGNoYW5naW5nICQoREVQRElSKSB0byBpdHMgYWN0dWFsIHZhbHVlIGluIHRoZQotICAjIGV4cGFuc2lvbi4KLSAgZm9yIGZpbGUgaW4gYHNlZCAtbiAiCi0gICAgcy9eJGFtX19pbmNsdWRlICRhbV9fcXVvdGVcKC4qKERFUERJUikuKlwpJGFtX19xdW90ZSInJC9cMS9wJyA8IiRtZiIgfCBcCi0gICAgICAgc2VkIC1lICdzL1wkKERFUERJUikvJyIkREVQRElSIicvZycgLWUgJ3MvXCRVLyciJFUiJy9nJ2A7IGRvCi0gICAgIyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBleGlzdHMuCi0gICAgdGVzdCAtZiAiJGRpcnBhcnQvJGZpbGUiICYmIGNvbnRpbnVlCi0gICAgZmRpcj1gKGRpcm5hbWUgIiRmaWxlIikgMj4vZGV2L251bGwgfHwKLSRhc19leHByIFgiJGZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJGZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgiJGZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJGZpbGUiIDogJ1hcKC9cKScgXHwgXAotCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkZmlsZSIgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KLSAgCSAgcy8uKi8uLzsgcSdgCi0gICAgeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgotICAgIG1rZGlyIC1wICRkaXJwYXJ0LyRmZGlyCi0gIGVsc2UKLSAgICBhc19kaXI9JGRpcnBhcnQvJGZkaXIKLSAgICBhc19kaXJzPQotICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCi0gICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgotICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8Ci0kYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAotCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkYXNfZGlyIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKLSAgICBkb25lCi0gICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKLSAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGRpcnBhcnQvJGZkaXIiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGRpcnBhcnQvJGZkaXIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KLQotICAgICMgZWNobyAiY3JlYXRpbmcgJGRpcnBhcnQvJGZpbGUiCi0gICAgZWNobyAnIyBkdW1teScgPiAiJGRpcnBhcnQvJGZpbGUiCi0gIGRvbmUKLWRvbmUKLSA7OwotICAgIGRlZmF1bHQtMSApCi0gICAgZm9yIGFjX2ZpbGUgaW4gJENPTkZJR19GSUxFUzsgZG8KLSAgICAgICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIKLSAgICAgIGNhc2UgIiRhY19maWxlIiBpbgotICAgICAgICAqOiopIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlOi4qJSUnYCA7OwotICAgICAgZXNhYwotICAgICAgIyBQTyBkaXJlY3RvcmllcyBoYXZlIGEgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGZyb20gTWFrZWZpbGUuaW4uaW4uCi0gICAgICBjYXNlICIkYWNfZmlsZSIgaW4gKi9NYWtlZmlsZS5pbikKLSAgICAgICAgIyBBZGp1c3QgYSByZWxhdGl2ZSBzcmNkaXIuCi0gICAgICAgIGFjX2Rpcj1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyUvW14vXVteL10qJCUlJ2AKLSAgICAgICAgYWNfZGlyX3N1ZmZpeD0iL2BlY2hvICIkYWNfZGlyInxzZWQgJ3MlXlwuLyUlJ2AiCi0gICAgICAgIGFjX2RvdHM9YGVjaG8gIiRhY19kaXJfc3VmZml4InxzZWQgJ3MlL1teL10qJS4uLyVnJ2AKLSAgICAgICAgIyBJbiBhdXRvY29uZi0yLjEzIGl0IGlzIGNhbGxlZCAkYWNfZ2l2ZW5fc3JjZGlyLgotICAgICAgICAjIEluIGF1dG9jb25mLTIuNTAgaXQgaXMgY2FsbGVkICRzcmNkaXIuCi0gICAgICAgIHRlc3QgLW4gIiRhY19naXZlbl9zcmNkaXIiIHx8IGFjX2dpdmVuX3NyY2Rpcj0iJHNyY2RpciIKLSAgICAgICAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KLSAgICAgICAgICAuKSAgdG9wX3NyY2Rpcj1gZWNobyAkYWNfZG90c3xzZWQgJ3MlLyQlJSdgIDs7Ci0gICAgICAgICAgLyopIHRvcF9zcmNkaXI9IiRhY19naXZlbl9zcmNkaXIiIDs7Ci0gICAgICAgICAgKikgIHRvcF9zcmNkaXI9IiRhY19kb3RzJGFjX2dpdmVuX3NyY2RpciIgOzsKLSAgICAgICAgZXNhYwotICAgICAgICAjIFRyZWF0IGEgZGlyZWN0b3J5IGFzIGEgUE8gZGlyZWN0b3J5IGlmIGFuZCBvbmx5IGlmIGl0IGhhcyBhCi0gICAgICAgICMgUE9URklMRVMuaW4gZmlsZS4gVGhpcyBhbGxvd3MgcGFja2FnZXMgdG8gaGF2ZSBtdWx0aXBsZSBQTwotICAgICAgICAjIGRpcmVjdG9yaWVzIHVuZGVyIGRpZmZlcmVudCBuYW1lcyBvciBpbiBkaWZmZXJlbnQgbG9jYXRpb25zLgotICAgICAgICBpZiB0ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iOyB0aGVuCi0gICAgICAgICAgcm0gLWYgIiRhY19kaXIvUE9URklMRVMiCi0gICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19kaXIvUE9URklMRVMiIHx8IGVjaG8gImNyZWF0aW5nICRhY19kaXIvUE9URklMRVMiCi0gICAgICAgICAgY2F0ICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iIHwgc2VkIC1lICIvXiMvZCIgLWUgIi9eWyAJXSpcJC9kIiAtZSAicywuKiwgICAgICR0b3Bfc3JjZGlyLyYgXFxcXCwiIHwgc2VkIC1lICJcJHMvXCguKlwpIFxcXFwvXDEvIiA+ICIkYWNfZGlyL1BPVEZJTEVTIgotICAgICAgICAgIFBPTUFLRUZJTEVERVBTPSJQT1RGSUxFUy5pbiIKLSAgICAgICAgICAjIEFMTF9MSU5HVUFTLCBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTIGRlcGVuZAotICAgICAgICAgICMgb24gJGFjX2RpciBidXQgZG9uJ3QgZGVwZW5kIG9uIHVzZXItc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAjIHBhcmFtZXRlcnMuCi0gICAgICAgICAgaWYgdGVzdCAtZiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL0xJTkdVQVMiOyB0aGVuCi0gICAgICAgICAgICAjIFRoZSBMSU5HVUFTIGZpbGUgY29udGFpbnMgdGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzLgotICAgICAgICAgICAgaWYgdGVzdCAtbiAiJE9CU09MRVRFX0FMTF9MSU5HVUFTIjsgdGhlbgotICAgICAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogc2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiIHx8IGVjaG8gInNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIgotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgLWUgInMvIy4qLy8iICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyJgCi0gICAgICAgICAgICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbWVudCBmcm9tIGF1dG9tYWtlLgotICAgICAgICAgICAgZXZhbCAnQUxMX0xJTkdVQVMnJz0kQUxMX0xJTkdVQVNfJwotICAgICAgICAgICAgUE9NQUtFRklMRURFUFM9IiRQT01BS0VGSUxFREVQUyBMSU5HVUFTIgotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICMgVGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzIHdhcyBnaXZlbiBpbiBjb25maWd1cmUuaW4uCi0gICAgICAgICAgICBldmFsICdBTExfTElOR1VBUycnPSRPQlNPTEVURV9BTExfTElOR1VBUycKLSAgICAgICAgICBmaQotICAgICAgICAgICMgQ29tcHV0ZSBQT0ZJTEVTCi0gICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQobGFuZykucG8pCi0gICAgICAgICAgIyBDb21wdXRlIFVQREFURVBPRklMRVMKLSAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLnBvLXVwZGF0ZSkKLSAgICAgICAgICAjIENvbXB1dGUgRFVNTVlQT0ZJTEVTCi0gICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5ub3ApCi0gICAgICAgICAgIyBDb21wdXRlIEdNT0ZJTEVTCi0gICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQobGFuZykuZ21vKQotICAgICAgICAgIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCi0gICAgICAgICAgICAuKSBzcmNkaXJwcmU9IDs7Ci0gICAgICAgICAgICAqKSBzcmNkaXJwcmU9JyQoc3JjZGlyKS8nIDs7Ci0gICAgICAgICAgZXNhYwotICAgICAgICAgIFBPRklMRVM9Ci0gICAgICAgICAgVVBEQVRFUE9GSUxFUz0KLSAgICAgICAgICBEVU1NWVBPRklMRVM9Ci0gICAgICAgICAgR01PRklMRVM9Ci0gICAgICAgICAgZm9yIGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbwotICAgICAgICAgICAgUE9GSUxFUz0iJFBPRklMRVMgJHNyY2RpcnByZSRsYW5nLnBvIgotICAgICAgICAgICAgVVBEQVRFUE9GSUxFUz0iJFVQREFURVBPRklMRVMgJGxhbmcucG8tdXBkYXRlIgotICAgICAgICAgICAgRFVNTVlQT0ZJTEVTPSIkRFVNTVlQT0ZJTEVTICRsYW5nLm5vcCIKLSAgICAgICAgICAgIEdNT0ZJTEVTPSIkR01PRklMRVMgJHNyY2RpcnByZSRsYW5nLmdtbyIKLSAgICAgICAgICBkb25lCi0gICAgICAgICAgIyBDQVRBTE9HUyBkZXBlbmRzIG9uIGJvdGggJGFjX2RpciBhbmQgdGhlIHVzZXIncyBMSU5HVUFTCi0gICAgICAgICAgIyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KLSAgICAgICAgICBJTlNUX0xJTkdVQVM9Ci0gICAgICAgICAgaWYgdGVzdCAtbiAiJEFMTF9MSU5HVUFTIjsgdGhlbgotICAgICAgICAgICAgZm9yIHByZXNlbnRsYW5nIGluICRBTExfTElOR1VBUzsgZG8KLSAgICAgICAgICAgICAgdXNlaXQ9bm8KLSAgICAgICAgICAgICAgaWYgdGVzdCAiJVVOU0VUJSIgIT0gIiRMSU5HVUFTIjsgdGhlbgotICAgICAgICAgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRMSU5HVUFTIgotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJEFMTF9MSU5HVUFTIgotICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICBmb3IgZGVzaXJlZGxhbmcgaW4gJGRlc2lyZWRsYW5ndWFnZXM7IGRvCi0gICAgICAgICAgICAgICAgIyBVc2UgdGhlIHByZXNlbnRsYW5nIGNhdGFsb2cgaWYgZGVzaXJlZGxhbmcgaXMKLSAgICAgICAgICAgICAgICAjICAgYS4gZXF1YWwgdG8gcHJlc2VudGxhbmcsIG9yCi0gICAgICAgICAgICAgICAgIyAgIGIuIGEgdmFyaWFudCBvZiBwcmVzZW50bGFuZyAoYmVjYXVzZSBpbiB0aGlzIGNhc2UsCi0gICAgICAgICAgICAgICAgIyAgICAgIHByZXNlbnRsYW5nIGNhbiBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgZm9yIG1lc3NhZ2VzCi0gICAgICAgICAgICAgICAgIyAgICAgIHdoaWNoIGFyZSBub3QgdHJhbnNsYXRlZCBpbiB0aGUgZGVzaXJlZGxhbmcgY2F0YWxvZykuCi0gICAgICAgICAgICAgICAgY2FzZSAiJGRlc2lyZWRsYW5nIiBpbgotICAgICAgICAgICAgICAgICAgIiRwcmVzZW50bGFuZyIqKSB1c2VpdD15ZXM7OwotICAgICAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgICBpZiB0ZXN0ICR1c2VpdCA9IHllczsgdGhlbgotICAgICAgICAgICAgICAgIElOU1RfTElOR1VBUz0iJElOU1RfTElOR1VBUyAkcHJlc2VudGxhbmciCi0gICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBkb25lCi0gICAgICAgICAgZmkKLSAgICAgICAgICBDQVRBTE9HUz0KLSAgICAgICAgICBpZiB0ZXN0IC1uICIkSU5TVF9MSU5HVUFTIjsgdGhlbgotICAgICAgICAgICAgZm9yIGxhbmcgaW4gJElOU1RfTElOR1VBUzsgZG8KLSAgICAgICAgICAgICAgQ0FUQUxPR1M9IiRDQVRBTE9HUyAkbGFuZy5nbW8iCi0gICAgICAgICAgICBkb25lCi0gICAgICAgICAgZmkKLSAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2Rpci9NYWtlZmlsZSIgfHwgZWNobyAiY3JlYXRpbmcgJGFjX2Rpci9NYWtlZmlsZSIKLSAgICAgICAgICBzZWQgLWUgIi9eUE9URklMRVMgPS9yICRhY19kaXIvUE9URklMRVMiIC1lICIvXiMgTWFrZXZhcnMvciAkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTWFrZXZhcnMiIC1lICJzfEBQT0ZJTEVTQHwkUE9GSUxFU3xnIiAtZSAic3xAVVBEQVRFUE9GSUxFU0B8JFVQREFURVBPRklMRVN8ZyIgLWUgInN8QERVTU1ZUE9GSUxFU0B8JERVTU1ZUE9GSUxFU3xnIiAtZSAic3xAR01PRklMRVNAfCRHTU9GSUxFU3xnIiAtZSAic3xAQ0FUQUxPR1NAfCRDQVRBTE9HU3xnIiAtZSAic3xAUE9NQUtFRklMRURFUFNAfCRQT01BS0VGSUxFREVQU3xnIiAiJGFjX2Rpci9NYWtlZmlsZS5pbiIgPiAiJGFjX2Rpci9NYWtlZmlsZSIKLSAgICAgICAgICBmb3IgZiBpbiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyIi9SdWxlcy0qOyBkbwotICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGYiOyB0aGVuCi0gICAgICAgICAgICAgIGNhc2UgIiRmIiBpbgotICAgICAgICAgICAgICAgICoub3JpZyB8ICouYmFrIHwgKn4pIDs7Ci0gICAgICAgICAgICAgICAgKikgY2F0ICIkZiIgPj4gIiRhY19kaXIvTWFrZWZpbGUiIDs7Ci0gICAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgZG9uZQotICAgICAgICBmaQotICAgICAgICA7OwotICAgICAgZXNhYwotICAgIGRvbmUgOzsKLSAgICB0ZXN0cy9hdGNvbmZpZyApIGNhdCA+dGVzdHMvYXRjb25maWcgPDxBVEVPRgotIyBDb25maWd1cmFibGUgdmFyaWFibGUgdmFsdWVzIGZvciBidWlsZGluZyB0ZXN0IHN1aXRlcy4KLSMgR2VuZXJhdGVkIGJ5ICQwLgotIyBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhlIHRlc3Qgc3VpdGUgd2lsbCBkZWZpbmUgdG9wX3NyY2Rpcj0kYXRfdG9wX3NyY2Rpci8uLi8uLiBldGMuCi1hdF90ZXN0ZGlyPSd0ZXN0cycKLWFic19idWlsZGRpcj0nJGFjX2Fic19idWlsZGRpcicKLWF0X3NyY2Rpcj0nJGFjX3NyY2RpcicKLWFic19zcmNkaXI9JyRhY19hYnNfc3JjZGlyJwotYXRfdG9wX3NyY2Rpcj0nJGFjX3RvcF9zcmNkaXInCi1hYnNfdG9wX3NyY2Rpcj0nJGFjX2Fic190b3Bfc3JjZGlyJwotYXRfdG9wX2J1aWxkZGlyPSckYWNfdG9wX2J1aWxkZGlyJwotYWJzX3RvcF9idWlsZGRpcj0nJGFjX2Fic190b3BfYnVpbGRkaXInCi0KLUFVVE9URVNUX1BBVEg9J3Rlc3RzJwotCi1TSEVMTD1cJHtDT05GSUdfU0hFTEwtJyRTSEVMTCd9Ci1BVEVPRgotIDs7Ci0gIGVzYWMKLWRvbmUKLQoteyAoZXhpdCAwKTsgZXhpdCAwOyB9CmRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKaW5kZXggNDAyNzBkZi4uMjljOWI2MiAxMDA3NTUKLS0tIGEvY29uZmlndXJlCisrKyBiL2NvbmZpZ3VyZQpAQCAtMSw4MyArMSw0NjIgQEAKICMhIC9iaW4vc2gKICMgR3Vlc3MgdmFsdWVzIGZvciBzeXN0ZW0tZGVwZW5kZW50IHZhcmlhYmxlcyBhbmQgY3JlYXRlIE1ha2VmaWxlcy4KLSMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU5IGZvciBHTlUgQmlzb24gMi4zLgorIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkgZm9yIEdOVSBCaXNvbiAyLjcuCiAjCiAjIFJlcG9ydCBidWdzIHRvIDxidWctYmlzb25AZ251Lm9yZz4uCiAjCi0jIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTkyLTE5OTYsIDE5OTgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMKICMgVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBNNHNoIEluaXRpYWxpemF0aW9uLiAgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggSW5pdGlhbGl6YXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogCi0jIEJlIEJvdXJuZSBjb21wYXRpYmxlCi1pZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyMgQmUgbW9yZSBCb3VybmUgY29tcGF0aWJsZQorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKICAgZW11bGF0ZSBzaAogICBOVUxMQ01EPToKLSAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKICAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KICAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCi1lbGlmIHRlc3QgLW4gIiR7QkFTSF9WRVJTSU9OK3NldH0iICYmIChzZXQgLW8gcG9zaXgpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBzZXQgLW8gcG9zaXgKLWZpCi1EVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCi0KLSMgU3VwcG9ydCB1bnNldCB3aGVuIHBvc3NpYmxlLgotaWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGFzX3Vuc2V0PXVuc2V0CisgIHNldG9wdCBOT19HTE9CX1NVQlNUCiBlbHNlCi0gIGFzX3Vuc2V0PWZhbHNlCisgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAjKAorICAqcG9zaXgqKSA6CisgICAgc2V0IC1vIHBvc2l4IDs7ICMoCisgICopIDoKKyAgICAgOzsKK2VzYWMKIGZpCiAKIAotIyBXb3JrIGFyb3VuZCBidWdzIGluIHByZS0zLjAgVVdJTiBrc2guCi0kYXNfdW5zZXQgRU5WIE1BSUwgTUFJTFBBVEgKK2FzX25sPScKKycKK2V4cG9ydCBhc19ubAorIyBQcmludGluZyBhIGxvbmcgc3RyaW5nIGNyYXNoZXMgU29sYXJpcyA3IC91c3IvYmluL3ByaW50Zi4KK2FzX2VjaG89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCisjIFByZWZlciBhIGtzaCBzaGVsbCBidWlsdGluIG92ZXIgYW4gZXh0ZXJuYWwgcHJpbnRmIHByb2dyYW0gb24gU29sYXJpcywKKyMgYnV0IHdpdGhvdXQgd2FzdGluZyBmb3JrcyBmb3IgYmFzaCBvciB6c2guCitpZiB0ZXN0IC16ICIkQkFTSF9WRVJTSU9OJFpTSF9WRVJTSU9OIiBcCisgICAgJiYgKHRlc3QgIlhgcHJpbnQgLXIgLS0gJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludCAtciAtLScKKyAgYXNfZWNob19uPSdwcmludCAtcm4gLS0nCitlbGlmICh0ZXN0ICJYYHByaW50ZiAlcyAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50ZiAlc1xuJworICBhc19lY2hvX249J3ByaW50ZiAlcycKK2Vsc2UKKyAgaWYgdGVzdCAiWGAoL3Vzci91Y2IvZWNobyAtbiAtbiAkYXNfZWNobykgMj4vZGV2L251bGxgIiA9ICJYLW4gJGFzX2VjaG8iOyB0aGVuCisgICAgYXNfZWNob19ib2R5PSdldmFsIC91c3IvdWNiL2VjaG8gLW4gIiQxJGFzX25sIicKKyAgICBhc19lY2hvX249Jy91c3IvdWNiL2VjaG8gLW4nCisgIGVsc2UKKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgZXhwciAiWCQxIiA6ICJYXFwoLipcXCkiJworICAgIGFzX2VjaG9fbl9ib2R5PSdldmFsCisgICAgICBhcmc9JDE7CisgICAgICBjYXNlICRhcmcgaW4gIygKKyAgICAgICoiJGFzX25sIiopCisJZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSRhc19ubCI7CisJYXJnPWBleHByICJYJGFyZyIgOiAiLiokYXNfbmxcXCguKlxcKSJgOzsKKyAgICAgIGVzYWM7CisgICAgICBleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpIiB8IHRyIC1kICIkYXNfbmwiCisgICAgJworICAgIGV4cG9ydCBhc19lY2hvX25fYm9keQorICAgIGFzX2VjaG9fbj0nc2ggLWMgJGFzX2VjaG9fbl9ib2R5IGFzX2VjaG8nCisgIGZpCisgIGV4cG9ydCBhc19lY2hvX2JvZHkKKyAgYXNfZWNobz0nc2ggLWMgJGFzX2VjaG9fYm9keSBhc19lY2hvJworZmkKKworIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCitpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorICBQQVRIX1NFUEFSQVRPUj06CisgIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxICYmIHsKKyAgICAoUEFUSD0nL2JpbjovYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSB8fAorICAgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisgIH0KK2ZpCisKKworIyBJRlMKKyMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuICBRdW90aW5nIGlzCisjIHRoZXJlIHRvIHByZXZlbnQgZWRpdG9ycyBmcm9tIGNvbXBsYWluaW5nIGFib3V0IHNwYWNlLXRhYi4KKyMgKElmIF9BU19QQVRIX1dBTEsgd2VyZSBjYWxsZWQgd2l0aCBJRlMgdW5zZXQsIGl0IHdvdWxkIGRpc2FibGUgd29yZAorIyBzcGxpdHRpbmcgYnkgc2V0dGluZyBJRlMgdG8gZW1wdHkgdmFsdWUuKQorSUZTPSIgIiIJJGFzX25sIgorCisjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBkaXJlY3Rvcnkgc2VwYXJhdG9yLgorYXNfbXlzZWxmPQorY2FzZSAkMCBpbiAjKCgKKyAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OworICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgICAgIDs7Citlc2FjCisjIFdlIGRpZCBub3QgZmluZCBvdXJzZWx2ZXMsIG1vc3QgcHJvYmFibHkgd2Ugd2VyZSBydW4gYXMgYHNoIENPTU1BTkQnCisjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KK2lmIHRlc3QgIngkYXNfbXlzZWxmIiA9IHg7IHRoZW4KKyAgYXNfbXlzZWxmPSQwCitmaQoraWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgorICAkYXNfZWNobyAiJGFzX215c2VsZjogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUiID4mMgorICBleGl0IDEKK2ZpCisKKyMgVW5zZXQgdmFyaWFibGVzIHRoYXQgd2UgZG8gbm90IG5lZWQgYW5kIHdoaWNoIGNhdXNlIGJ1Z3MgKGUuZy4gaW4KKyMgcHJlLTMuMCBVV0lOIGtzaCkuICBCdXQgZG8gbm90IGNhdXNlIGJ1Z3MgaW4gYmFzaCAyLjAxOyB0aGUgInx8IGV4aXQgMSIKKyMgc3VwcHJlc3NlcyBhbnkgIlNlZ21lbnRhdGlvbiBmYXVsdCIgbWVzc2FnZSB0aGVyZS4gICcoKCcgY291bGQKKyMgdHJpZ2dlciBhIGJ1ZyBpbiBwZGtzaCA1LjIuMTQuCitmb3IgYXNfdmFyIGluIEJBU0hfRU5WIEVOViBNQUlMIE1BSUxQQVRICitkbyBldmFsIHRlc3QgeFwkeyRhc192YXIrc2V0fSA9IHhzZXQgXAorICAmJiAoICh1bnNldCAkYXNfdmFyKSB8fCBleGl0IDEpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCAkYXNfdmFyIHx8IDoKK2RvbmUKIFBTMT0nJCAnCiBQUzI9Jz4gJwogUFM0PScrICcKIAogIyBOTFMgbnVpc2FuY2VzLgotZm9yIGFzX3ZhciBpbiBcCi0gIExBTkcgTEFOR1VBR0UgTENfQUREUkVTUyBMQ19BTEwgTENfQ09MTEFURSBMQ19DVFlQRSBMQ19JREVOVElGSUNBVElPTiBcCi0gIExDX01FQVNVUkVNRU5UIExDX01FU1NBR0VTIExDX01PTkVUQVJZIExDX05BTUUgTENfTlVNRVJJQyBMQ19QQVBFUiBcCi0gIExDX1RFTEVQSE9ORSBMQ19USU1FCi1kbwotICBpZiAoc2V0ICt4OyB0ZXN0IC16ICJgKGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcikgMj4mMWAiKTsgdGhlbgotICAgIGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcgotICBlbHNlCi0gICAgJGFzX3Vuc2V0ICRhc192YXIKLSAgZmkKLWRvbmUKK0xDX0FMTD1DCitleHBvcnQgTENfQUxMCitMQU5HVUFHRT1DCitleHBvcnQgTEFOR1VBR0UKIAotIyBSZXF1aXJlZCB0byB1c2UgYmFzZW5hbWUuCi1pZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMTsgdGhlbgorIyBDRFBBVEguCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKKyMgVXNlIGEgcHJvcGVyIGludGVybmFsIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGVuc3VyZSB3ZSBkb24ndCBmYWxsCisgICMgaW50byBhbiBpbmZpbml0ZSBsb29wLCBjb250aW51b3VzbHkgcmUtZXhlY3V0aW5nIG91cnNlbHZlcy4KKyAgaWYgdGVzdCB4IiR7X2FzX2Nhbl9yZWV4ZWN9IiAhPSB4bm8gJiYgdGVzdCAieCRDT05GSUdfU0hFTEwiICE9IHg7IHRoZW4KKyAgICBfYXNfY2FuX3JlZXhlYz1ubzsgZXhwb3J0IF9hc19jYW5fcmVleGVjOworICAgICMgV2UgY2Fubm90IHlldCBhc3N1bWUgYSBkZWNlbnQgc2hlbGwsIHNvIHdlIGhhdmUgdG8gcHJvdmlkZSBhCisjIG5ldXRyYWxpemF0aW9uIHZhbHVlIGZvciBzaGVsbHMgd2l0aG91dCB1bnNldDsgYW5kIHRoaXMgYWxzbworIyB3b3JrcyBhcm91bmQgc2hlbGxzIHRoYXQgY2Fubm90IHVuc2V0IG5vbmV4aXN0ZW50IHZhcmlhYmxlcy4KKyMgUHJlc2VydmUgLXYgYW5kIC14IHRvIHRoZSByZXBsYWNlbWVudCBzaGVsbC4KK0JBU0hfRU5WPS9kZXYvbnVsbAorRU5WPS9kZXYvbnVsbAorKHVuc2V0IEJBU0hfRU5WKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQkFTSF9FTlYgRU5WCitjYXNlICQtIGluICMgKCgoKAorICAqdip4KiB8ICp4KnYqICkgYXNfb3B0cz0tdnggOzsKKyAgKnYqICkgYXNfb3B0cz0tdiA7OworICAqeCogKSBhc19vcHRzPS14IDs7CisgICogKSBhc19vcHRzPSA7OworZXNhYworZXhlYyAkQ09ORklHX1NIRUxMICRhc19vcHRzICIkYXNfbXlzZWxmIiAkezErIiRAIn0KKyMgQWRtaXR0ZWRseSwgdGhpcyBpcyBxdWl0ZSBwYXJhbm9pZCwgc2luY2UgYWxsIHRoZSBrbm93biBzaGVsbHMgYmFpbAorIyBvdXQgYWZ0ZXIgYSBmYWlsZWQgYGV4ZWMnLgorJGFzX2VjaG8gIiQwOiBjb3VsZCBub3QgcmUtZXhlY3V0ZSB3aXRoICRDT05GSUdfU0hFTEwiID4mMgorYXNfZm5fZXhpdCAyNTUKKyAgZmkKKyAgIyBXZSBkb24ndCB3YW50IHRoaXMgdG8gcHJvcGFnYXRlIHRvIG90aGVyIHN1YnByb2Nlc3Nlcy4KKyAgICAgICAgICB7IF9hc19jYW5fcmVleGVjPTsgdW5zZXQgX2FzX2Nhbl9yZWV4ZWM7fQoraWYgdGVzdCAieCRDT05GSUdfU0hFTEwiID0geDsgdGhlbgorICBhc19ib3VybmVfY29tcGF0aWJsZT0iaWYgdGVzdCAtbiBcIlwke1pTSF9WRVJTSU9OK3NldH1cIiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiBcJHsxK1wiXCRAXCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnXCR7MStcIlwkQFwifSc9J1wiXCRAXCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgXGAoc2V0IC1vKSAyPi9kZXYvbnVsbFxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYworZmkKKyIKKyAgYXNfcmVxdWlyZWQ9ImFzX2ZuX3JldHVybiAoKSB7IChleGl0IFwkMSk7IH0KK2FzX2ZuX3N1Y2Nlc3MgKCkgeyBhc19mbl9yZXR1cm4gMDsgfQorYXNfZm5fZmFpbHVyZSAoKSB7IGFzX2ZuX3JldHVybiAxOyB9Cithc19mbl9yZXRfc3VjY2VzcyAoKSB7IHJldHVybiAwOyB9Cithc19mbl9yZXRfZmFpbHVyZSAoKSB7IHJldHVybiAxOyB9CisKK2V4aXRjb2RlPTAKK2FzX2ZuX3N1Y2Nlc3MgfHwgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3N1Y2Nlc3MgZmFpbGVkLjsgfQorYXNfZm5fZmFpbHVyZSAmJiB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fZmFpbHVyZSBzdWNjZWVkZWQuOyB9Cithc19mbl9yZXRfc3VjY2VzcyB8fCB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fcmV0X3N1Y2Nlc3MgZmFpbGVkLjsgfQorYXNfZm5fcmV0X2ZhaWx1cmUgJiYgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3JldF9mYWlsdXJlIHN1Y2NlZWRlZC47IH0KK2lmICggc2V0IHg7IGFzX2ZuX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuIDoKKworZWxzZQorICBleGl0Y29kZT0xOyBlY2hvIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIG5vdCBzYXZlZC4KK2ZpCit0ZXN0IHhcJGV4aXRjb2RlID0geDAgfHwgZXhpdCAxCit0ZXN0IC14IC8gfHwgZXhpdCAxIgorICBhc19zdWdnZXN0ZWQ9IiAgYXNfbGluZW5vXzE9Ijthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCRMSU5FTk87YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQiIGFzX2xpbmVub18xYT1cJExJTkVOTworICBhc19saW5lbm9fMj0iO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkJExJTkVOTzthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCIgYXNfbGluZW5vXzJhPVwkTElORU5PCisgIGV2YWwgJ3Rlc3QgXCJ4XCRhc19saW5lbm9fMSdcJGFzX3J1bidcIiAhPSBcInhcJGFzX2xpbmVub18yJ1wkYXNfcnVuJ1wiICYmCisgIHRlc3QgXCJ4XGBleHByIFwkYXNfbGluZW5vXzEnXCRhc19ydW4nICsgMVxgXCIgPSBcInhcJGFzX2xpbmVub18yJ1wkYXNfcnVuJ1wiJyB8fCBleGl0IDEKK3Rlc3QgXCQoKCAxICsgMSApKSA9IDIgfHwgZXhpdCAxIgorICBpZiAoZXZhbCAiJGFzX3JlcXVpcmVkIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBhc19oYXZlX3JlcXVpcmVkPXllcworZWxzZQorICBhc19oYXZlX3JlcXVpcmVkPW5vCitmaQorICBpZiB0ZXN0IHgkYXNfaGF2ZV9yZXF1aXJlZCA9IHh5ZXMgJiYgKGV2YWwgIiRhc19zdWdnZXN0ZWQiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisKK2Vsc2UKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorYXNfZm91bmQ9ZmFsc2UKK2ZvciBhc19kaXIgaW4gL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgYXNfZm91bmQ9OgorICBjYXNlICRhc19kaXIgaW4gIygKKwkgLyopCisJICAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbworCSAgICAgIyBUcnkgb25seSBzaGVsbHMgdGhhdCBleGlzdCwgdG8gc2F2ZSBzZXZlcmFsIGZvcmtzLgorCSAgICAgYXNfc2hlbGw9JGFzX2Rpci8kYXNfYmFzZQorCSAgICAgaWYgeyB0ZXN0IC1mICIkYXNfc2hlbGwiIHx8IHRlc3QgLWYgIiRhc19zaGVsbC5leGUiOyB9ICYmCisJCSAgICB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19yZXF1aXJlZCIgfCBhc19ydW49YSAiJGFzX3NoZWxsIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIENPTkZJR19TSEVMTD0kYXNfc2hlbGwgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKKwkJICAgaWYgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfc3VnZ2VzdGVkIiB8IGFzX3J1bj1hICIkYXNfc2hlbGwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgYnJlYWsgMgorZmkKK2ZpCisJICAgZG9uZTs7CisgICAgICAgZXNhYworICBhc19mb3VuZD1mYWxzZQorZG9uZQorJGFzX2ZvdW5kIHx8IHsgaWYgeyB0ZXN0IC1mICIkU0hFTEwiIHx8IHRlc3QgLWYgIiRTSEVMTC5leGUiOyB9ICYmCisJICAgICAgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfcmVxdWlyZWQiIHwgYXNfcnVuPWEgIiRTSEVMTCI7IH0gMj4vZGV2L251bGw7IHRoZW4gOgorICBDT05GSUdfU0hFTEw9JFNIRUxMIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCitmaTsgfQorSUZTPSRhc19zYXZlX0lGUworCisKKyAgICAgIGlmIHRlc3QgIngkQ09ORklHX1NIRUxMIiAhPSB4OyB0aGVuIDoKKyAgZXhwb3J0IENPTkZJR19TSEVMTAorICAgICAgICAgICAgICMgV2UgY2Fubm90IHlldCBhc3N1bWUgYSBkZWNlbnQgc2hlbGwsIHNvIHdlIGhhdmUgdG8gcHJvdmlkZSBhCisjIG5ldXRyYWxpemF0aW9uIHZhbHVlIGZvciBzaGVsbHMgd2l0aG91dCB1bnNldDsgYW5kIHRoaXMgYWxzbworIyB3b3JrcyBhcm91bmQgc2hlbGxzIHRoYXQgY2Fubm90IHVuc2V0IG5vbmV4aXN0ZW50IHZhcmlhYmxlcy4KKyMgUHJlc2VydmUgLXYgYW5kIC14IHRvIHRoZSByZXBsYWNlbWVudCBzaGVsbC4KK0JBU0hfRU5WPS9kZXYvbnVsbAorRU5WPS9kZXYvbnVsbAorKHVuc2V0IEJBU0hfRU5WKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQkFTSF9FTlYgRU5WCitjYXNlICQtIGluICMgKCgoKAorICAqdip4KiB8ICp4KnYqICkgYXNfb3B0cz0tdnggOzsKKyAgKnYqICkgYXNfb3B0cz0tdiA7OworICAqeCogKSBhc19vcHRzPS14IDs7CisgICogKSBhc19vcHRzPSA7OworZXNhYworZXhlYyAkQ09ORklHX1NIRUxMICRhc19vcHRzICIkYXNfbXlzZWxmIiAkezErIiRAIn0KKyMgQWRtaXR0ZWRseSwgdGhpcyBpcyBxdWl0ZSBwYXJhbm9pZCwgc2luY2UgYWxsIHRoZSBrbm93biBzaGVsbHMgYmFpbAorIyBvdXQgYWZ0ZXIgYSBmYWlsZWQgYGV4ZWMnLgorJGFzX2VjaG8gIiQwOiBjb3VsZCBub3QgcmUtZXhlY3V0ZSB3aXRoICRDT05GSUdfU0hFTEwiID4mMgorZXhpdCAyNTUKK2ZpCisKKyAgICBpZiB0ZXN0IHgkYXNfaGF2ZV9yZXF1aXJlZCA9IHhubzsgdGhlbiA6CisgICRhc19lY2hvICIkMDogVGhpcyBzY3JpcHQgcmVxdWlyZXMgYSBzaGVsbCBtb3JlIG1vZGVybiB0aGFuIGFsbCIKKyAgJGFzX2VjaG8gIiQwOiB0aGUgc2hlbGxzIHRoYXQgSSBmb3VuZCBvbiB5b3VyIHN5c3RlbS4iCisgIGlmIHRlc3QgeCR7WlNIX1ZFUlNJT04rc2V0fSA9IHhzZXQgOyB0aGVuCisgICAgJGFzX2VjaG8gIiQwOiBJbiBwYXJ0aWN1bGFyLCB6c2ggJFpTSF9WRVJTSU9OIGhhcyBidWdzIGFuZCBzaG91bGQiCisgICAgJGFzX2VjaG8gIiQwOiBiZSB1cGdyYWRlZCB0byB6c2ggNC4zLjQgb3IgbGF0ZXIuIgorICBlbHNlCisgICAgJGFzX2VjaG8gIiQwOiBQbGVhc2UgdGVsbCBidWctYXV0b2NvbmZAZ251Lm9yZyBhbmQgYnVnLWJpc29uQGdudS5vcmcKKyQwOiBhYm91dCB5b3VyIHN5c3RlbSwgaW5jbHVkaW5nIGFueSBlcnJvciBwb3NzaWJseSBvdXRwdXQKKyQwOiBiZWZvcmUgdGhpcyBtZXNzYWdlLiBUaGVuIGluc3RhbGwgYSBtb2Rlcm4gc2hlbGwsIG9yCiskMDogbWFudWFsbHkgcnVuIHRoZSBzY3JpcHQgdW5kZXIgc3VjaCBhIHNoZWxsIGlmIHlvdSBkbworJDA6IGhhdmUgb25lLiIKKyAgZmkKKyAgZXhpdCAxCitmaQorZmkKK2ZpCitTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorZXhwb3J0IFNIRUxMCisjIFVuc2V0IG1vcmUgdmFyaWFibGVzIGtub3duIHRvIGludGVyZmVyZSB3aXRoIGJlaGF2aW9yIG9mIGNvbW1vbiB0b29scy4KK0NMSUNPTE9SX0ZPUkNFPSBHUkVQX09QVElPTlM9Cit1bnNldCBDTElDT0xPUl9GT1JDRSBHUkVQX09QVElPTlMKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNNHNoIFNoZWxsIEZ1bmN0aW9ucy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyBhc19mbl91bnNldCBWQVIKKyMgLS0tLS0tLS0tLS0tLS0tCisjIFBvcnRhYmx5IHVuc2V0IFZBUi4KK2FzX2ZuX3Vuc2V0ICgpCit7CisgIHsgZXZhbCAkMT07IHVuc2V0ICQxO30KK30KK2FzX3Vuc2V0PWFzX2ZuX3Vuc2V0CisKKyMgYXNfZm5fc2V0X3N0YXR1cyBTVEFUVVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0ICQ/IHRvIFNUQVRVUywgd2l0aG91dCBmb3JraW5nLgorYXNfZm5fc2V0X3N0YXR1cyAoKQoreworICByZXR1cm4gJDEKK30gIyBhc19mbl9zZXRfc3RhdHVzCisKKyMgYXNfZm5fZXhpdCBTVEFUVVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhpdCB0aGUgc2hlbGwgd2l0aCBTVEFUVVMsIGV2ZW4gaW4gYSAidHJhcCAwIiBvciAic2V0IC1lIiBjb250ZXh0LgorYXNfZm5fZXhpdCAoKQoreworICBzZXQgK2UKKyAgYXNfZm5fc2V0X3N0YXR1cyAkMQorICBleGl0ICQxCit9ICMgYXNfZm5fZXhpdAorCisjIGFzX2ZuX21rZGlyX3AKKyMgLS0tLS0tLS0tLS0tLQorIyBDcmVhdGUgIiRhc19kaXIiIGFzIGEgZGlyZWN0b3J5LCBpbmNsdWRpbmcgcGFyZW50cyBpZiBuZWNlc3NhcnkuCithc19mbl9ta2Rpcl9wICgpCit7CisKKyAgY2FzZSAkYXNfZGlyIGluICMoCisgIC0qKSBhc19kaXI9Li8kYXNfZGlyOzsKKyAgZXNhYworICB0ZXN0IC1kICIkYXNfZGlyIiB8fCBldmFsICRhc19ta2Rpcl9wIHx8IHsKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIDo7IGRvCisgICAgICBjYXNlICRhc19kaXIgaW4gIygKKyAgICAgICpcJyopIGFzX3FkaXI9YCRhc19lY2hvICIkYXNfZGlyIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7ICMnKAorICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKKyAgICAgIGVzYWMKKyAgICAgIGFzX2RpcnM9IickYXNfcWRpcicgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJGFzX2RpciIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgICAgICB0ZXN0IC1kICIkYXNfZGlyIiAmJiBicmVhaworICAgIGRvbmUKKyAgICB0ZXN0IC16ICIkYXNfZGlycyIgfHwgZXZhbCAibWtkaXIgJGFzX2RpcnMiCisgIH0gfHwgdGVzdCAtZCAiJGFzX2RpciIgfHwgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiCisKKworfSAjIGFzX2ZuX21rZGlyX3AKKworIyBhc19mbl9leGVjdXRhYmxlX3AgRklMRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0IGlmIEZJTEUgaXMgYW4gZXhlY3V0YWJsZSByZWd1bGFyIGZpbGUuCithc19mbl9leGVjdXRhYmxlX3AgKCkKK3sKKyAgdGVzdCAtZiAiJDEiICYmIHRlc3QgLXggIiQxIgorfSAjIGFzX2ZuX2V4ZWN1dGFibGVfcAorIyBhc19mbl9hcHBlbmQgVkFSIFZBTFVFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXBwZW5kIHRoZSB0ZXh0IGluIFZBTFVFIHRvIHRoZSBlbmQgb2YgdGhlIGRlZmluaXRpb24gY29udGFpbmVkIGluIFZBUi4gVGFrZQorIyBhZHZhbnRhZ2Ugb2YgYW55IHNoZWxsIG9wdGltaXphdGlvbnMgdGhhdCBhbGxvdyBhbW9ydGl6ZWQgbGluZWFyIGdyb3d0aCBvdmVyCisjIHJlcGVhdGVkIGFwcGVuZHMsIGluc3RlYWQgb2YgdGhlIHR5cGljYWwgcXVhZHJhdGljIGdyb3d0aCBwcmVzZW50IGluIG5haXZlCisjIGltcGxlbWVudGF0aW9ucy4KK2lmIChldmFsICJhc192YXI9MTsgYXNfdmFyKz0yOyB0ZXN0IHhcJGFzX3ZhciA9IHgxMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxKz1cJDIKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxPVwkJDFcJDIKKyAgfQorZmkgIyBhc19mbl9hcHBlbmQKKworIyBhc19mbl9hcml0aCBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gYXJpdGhtZXRpYyBldmFsdWF0aW9uIG9uIHRoZSBBUkdzLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUKKyMgZ2xvYmFsICRhc192YWwuIFRha2UgYWR2YW50YWdlIG9mIHNoZWxscyB0aGF0IGNhbiBhdm9pZCBmb3Jrcy4gVGhlIGFyZ3VtZW50cworIyBtdXN0IGJlIHBvcnRhYmxlIGFjcm9zcyAkKCgpKSBhbmQgZXhwci4KK2lmIChldmFsICJ0ZXN0IFwkKCggMSArIDEgKSkgPSAyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPSQoKCAkKiApKQorICB9JworZWxzZQorICBhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPWBleHByICIkQCIgfHwgdGVzdCAkPyAtZXEgMWAKKyAgfQorZmkgIyBhc19mbl9hcml0aAorCisKKyMgYXNfZm5fZXJyb3IgU1RBVFVTIEVSUk9SIFtMSU5FTk8gTE9HX0ZEXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCAiYGJhc2VuYW1lICQwYDogZXJyb3I6IEVSUk9SIiB0byBzdGRlcnIuIElmIExJTkVOTyBhbmQgTE9HX0ZEIGFyZQorIyBwcm92aWRlZCwgYWxzbyBvdXRwdXQgdGhlIGVycm9yIHRvIExPR19GRCwgcmVmZXJlbmNpbmcgTElORU5PLiBUaGVuIGV4aXQgdGhlCisjIHNjcmlwdCB3aXRoIFNUQVRVUywgdXNpbmcgMSBpZiB0aGF0IHdhcyAwLgorYXNfZm5fZXJyb3IgKCkKK3sKKyAgYXNfc3RhdHVzPSQxOyB0ZXN0ICRhc19zdGF0dXMgLWVxIDAgJiYgYXNfc3RhdHVzPTEKKyAgaWYgdGVzdCAiJDQiOyB0aGVuCisgICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMyJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiAkMiIgPiYkNAorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJDIiID4mMgorICBhc19mbl9leGl0ICRhc19zdGF0dXMKK30gIyBhc19mbl9lcnJvcgorCitpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KICAgYXNfZXhwcj1leHByCiBlbHNlCiAgIGFzX2V4cHI9ZmFsc2UKIGZpCiAKLWlmIChiYXNlbmFtZSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KK2lmIChiYXNlbmFtZSAtLSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAtLSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KICAgYXNfYmFzZW5hbWU9YmFzZW5hbWUKIGVsc2UKICAgYXNfYmFzZW5hbWU9ZmFsc2UKIGZpCiAKK2lmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc19kaXJuYW1lPWRpcm5hbWUKK2Vsc2UKKyAgYXNfZGlybmFtZT1mYWxzZQorZmkKIAotIyBOYW1lIG9mIHRoZSBleGVjdXRhYmxlLgotYXNfbWU9YCRhc19iYXNlbmFtZSAiJDAiIHx8Cithc19tZT1gJGFzX2Jhc2VuYW1lIC0tICIkMCIgfHwKICRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCiAJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJDAiIDogJ1hcKC9cKSQnIFx8IFwKLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgvIiQwIiB8Ci0gICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcL1woXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcL1woXC9cKS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIHMvLiovLi87IHEnYAorCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgvIiQwIiB8CisgICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcL1woXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcL1woXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAogCi0KLSMgUEFUSCBuZWVkcyBDUiwgYW5kIExJTkVOTyBuZWVkcyBDUiBhbmQgUEFUSC4KICMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KIGFzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JwogYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCkBAIC04NSwxNDYgKzQ2NCw5MSBAQAogYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JwogYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCiAKLSMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgotaWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KLSAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAotICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCi0gIGNobW9kICt4IGNvbmYkJC5zaAotICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgIFBBVEhfU0VQQVJBVE9SPSc7JwotICBlbHNlCi0gICAgUEFUSF9TRVBBUkFUT1I9OgotICBmaQotICBybSAtZiBjb25mJCQuc2gKLWZpCiAKLQotICBhc19saW5lbm9fMT0kTElORU5PCi0gIGFzX2xpbmVub18yPSRMSU5FTk8KLSAgYXNfbGluZW5vXzM9YChleHByICRhc19saW5lbm9fMSArIDEpIDI+L2Rldi9udWxsYAotICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKLSAgdGVzdCAieCRhc19saW5lbm9fMyIgID0gIngkYXNfbGluZW5vXzIiICB8fCB7Ci0gICMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIHBhdGggYXQgYWxsCi0gICMgcmVsYXRpdmUgb3Igbm90LgotICBjYXNlICQwIGluCi0gICAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OwotICAgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKLWRvbmUKLQotICAgICAgIDs7Ci0gIGVzYWMKLSAgIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJwotICAjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KLSAgaWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgotICAgIGFzX215c2VsZj0kMAotICBmaQotICBpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgcGF0aCIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgZmkKLSAgY2FzZSAkQ09ORklHX1NIRUxMIGluCi0gICcnKQotICAgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbwotCSBjYXNlICRhc19kaXIgaW4KLQkgLyopCi0JICAgaWYgKCIkYXNfZGlyLyRhc19iYXNlIiAtYyAnCi0gIGFzX2xpbmVub18xPSRMSU5FTk8KLSAgYXNfbGluZW5vXzI9JExJTkVOTwotICBhc19saW5lbm9fMz1gKGV4cHIgJGFzX2xpbmVub18xICsgMSkgMj4vZGV2L251bGxgCi0gIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgotICB0ZXN0ICJ4JGFzX2xpbmVub18zIiAgPSAieCRhc19saW5lbm9fMiIgJykgMj4vZGV2L251bGw7IHRoZW4KLQkgICAgICRhc191bnNldCBCQVNIX0VOViB8fCB0ZXN0ICIke0JBU0hfRU5WK3NldH0iICE9IHNldCB8fCB7IEJBU0hfRU5WPTsgZXhwb3J0IEJBU0hfRU5WOyB9Ci0JICAgICAkYXNfdW5zZXQgRU5WIHx8IHRlc3QgIiR7RU5WK3NldH0iICE9IHNldCB8fCB7IEVOVj07IGV4cG9ydCBFTlY7IH0KLQkgICAgIENPTkZJR19TSEVMTD0kYXNfZGlyLyRhc19iYXNlCi0JICAgICBleHBvcnQgQ09ORklHX1NIRUxMCi0JICAgICBleGVjICIkQ09ORklHX1NIRUxMIiAiJDAiICR7MSsiJEAifQotCSAgIGZpOzsKLQkgZXNhYwotICAgICAgIGRvbmUKLWRvbmUKLTs7Ci0gIGVzYWMKLQotICAjIENyZWF0ZSAkYXNfbWUubGluZW5vIGFzIGEgY29weSBvZiAkYXNfbXlzZWxmLCBidXQgd2l0aCAkTElORU5PCi0gICMgdW5pZm9ybWx5IHJlcGxhY2VkIGJ5IHRoZSBsaW5lIG51bWJlci4gIFRoZSBmaXJzdCAnc2VkJyBpbnNlcnRzIGEKLSAgIyBsaW5lLW51bWJlciBsaW5lIGJlZm9yZSBlYWNoIGxpbmU7IHRoZSBzZWNvbmQgJ3NlZCcgZG9lcyB0aGUgcmVhbAotICAjIHdvcmsuICBUaGUgc2Vjb25kIHNjcmlwdCB1c2VzICdOJyB0byBwYWlyIGVhY2ggbGluZS1udW1iZXIgbGluZQotICAjIHdpdGggdGhlIG51bWJlcmVkIGxpbmUsIGFuZCBhcHBlbmRzIHRyYWlsaW5nICctJyBkdXJpbmcKLSAgIyBzdWJzdGl0dXRpb24gc28gdGhhdCAkTElORU5PIGlzIG5vdCBhIHNwZWNpYWwgY2FzZSBhdCBsaW5lIGVuZC4KLSAgIyAoUmFqYSBSIEhhcmluYXRoIHN1Z2dlc3RlZCBzZWQgJz0nLCBhbmQgUGF1bCBFZ2dlcnQgd3JvdGUgdGhlCi0gICMgc2Vjb25kICdzZWQnIHNjcmlwdC4gIEJsYW1lIExlZSBFLiBNY01haG9uIGZvciBzZWQncyBzeW50YXguICA6LSkKLSAgc2VkICc9JyA8JGFzX215c2VsZiB8CisgIGFzX2xpbmVub18xPSRMSU5FTk8gYXNfbGluZW5vXzFhPSRMSU5FTk8KKyAgYXNfbGluZW5vXzI9JExJTkVOTyBhc19saW5lbm9fMmE9JExJTkVOTworICBldmFsICd0ZXN0ICJ4JGFzX2xpbmVub18xJyRhc19ydW4nIiAhPSAieCRhc19saW5lbm9fMickYXNfcnVuJyIgJiYKKyAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSckYXNfcnVuJyArIDFgIiA9ICJ4JGFzX2xpbmVub18yJyRhc19ydW4nIicgfHwgeworICAjIEJsYW1lIExlZSBFLiBNY01haG9uICgxOTMxLTE5ODkpIGZvciBzZWQncyBzeW50YXguICA6LSkKKyAgc2VkIC1uICcKKyAgICBwCisgICAgL1skXUxJTkVOTy89CisgICcgPCRhc19teXNlbGYgfAogICAgIHNlZCAnCisgICAgICBzL1skXUxJTkVOTy4qLyYtLworICAgICAgdCBsaW5lbm8KKyAgICAgIGIKKyAgICAgIDpsaW5lbm8KICAgICAgIE4KLSAgICAgIHMsJCwtLAotICAgICAgOiBsb29wCi0gICAgICBzLF5cKFsnJGFzX2NyX2RpZ2l0cyddKlwpXCguKlwpWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX11cKSxcMVwyXDFcMywKKyAgICAgIDpsb29wCisgICAgICBzL1skXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dLipcblwpXCguKlwpL1wyXDFcMi8KICAgICAgIHQgbG9vcAotICAgICAgcywtJCwsCi0gICAgICBzLF5bJyRhc19jcl9kaWdpdHMnXSpcbiwsCisgICAgICBzLy1cbi4qLy8KICAgICAnID4kYXNfbWUubGluZW5vICYmCi0gIGNobW9kICt4ICRhc19tZS5saW5lbm8gfHwKLSAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICBjaG1vZCAreCAiJGFzX21lLmxpbmVubyIgfHwKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyOyBhc19mbl9leGl0IDE7IH0KIAorICAjIElmIHdlIGhhZCB0byByZS1leGVjdXRlIHdpdGggJENPTkZJR19TSEVMTCwgd2UncmUgZW5zdXJlZCB0byBoYXZlCisgICMgYWxyZWFkeSBkb25lIHRoYXQsIHNvIGVuc3VyZSB3ZSBkb24ndCB0cnkgdG8gZG8gc28gYWdhaW4gYW5kIGZhbGwKKyAgIyBpbiBhbiBpbmZpbml0ZSBsb29wLiAgVGhpcyBoYXMgYWxyZWFkeSBoYXBwZW5lZCBpbiBwcmFjdGljZS4KKyAgX2FzX2Nhbl9yZWV4ZWM9bm87IGV4cG9ydCBfYXNfY2FuX3JlZXhlYwogICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcwogICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKLSAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpYmxlIHRvIHRoaXMpLgotICAuIC4vJGFzX21lLmxpbmVubworICAjIG9yaWdpbmFsIGFuZCBzbyBvbi4gIEF1dG9jb25mIGlzIGVzcGVjaWFsbHkgc2Vuc2l0aXZlIHRvIHRoaXMpLgorICAuICIuLyRhc19tZS5saW5lbm8iCiAgICMgRXhpdCBzdGF0dXMgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kLgogICBleGl0CiB9CiAKLQotY2FzZSBgZWNobyAidGVzdGluZ1xjIjsgZWNobyAxLDIsM2AsYGVjaG8gLW4gdGVzdGluZzsgZWNobyAxLDIsM2AgaW4KLSAgKmMqLC1uKikgRUNIT19OPSBFQ0hPX0M9JwotJyBFQ0hPX1Q9JwknIDs7Ci0gICpjKiwqICApIEVDSE9fTj0tbiBFQ0hPX0M9IEVDSE9fVD0gOzsKLSAgKikgICAgICAgRUNIT19OPSBFQ0hPX0M9J1xjJyBFQ0hPX1Q9IDs7CitFQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQorY2FzZSBgZWNobyAtbiB4YCBpbiAjKCgoKCgKKy1uKikKKyAgY2FzZSBgZWNobyAneHlcYydgIGluCisgICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgorICB4eSkgIEVDSE9fQz0nXGMnOzsKKyAgKikgICBlY2hvIGBlY2hvIGtzaDg4IGJ1ZyBvbiBBSVggNi4xYCA+IC9kZXYvbnVsbAorICAgICAgIEVDSE9fVD0nCSc7OworICBlc2FjOzsKKyopCisgIEVDSE9fTj0nLW4nOzsKIGVzYWMKIAotaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYXNfZXhwcj1leHByCi1lbHNlCi0gIGFzX2V4cHI9ZmFsc2UKLWZpCi0KIHJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCi1lY2hvID5jb25mJCQuZmlsZQotaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCi0gICMgV2UgY291bGQganVzdCBjaGVjayBmb3IgREpHUFA7IGJ1dCB0aGlzIHRlc3QgYSkgd29ya3MgYikgaXMgbW9yZSBnZW5lcmljCi0gICMgYW5kIGMpIHdpbGwgcmVtYWluIHZhbGlkIG9uY2UgREpHUFAgc3VwcG9ydHMgc3ltbGlua3MgKERKR1BQIDIuMDQpLgotICBpZiB0ZXN0IC1mIGNvbmYkJC5leGU7IHRoZW4KLSAgICAjIERvbid0IHVzZSBsbiBhdCBhbGw7IHdlIGRvbid0IGhhdmUgYW55IGxpbmtzCi0gICAgYXNfbG5fcz0nY3AgLXAnCi0gIGVsc2UKK2lmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgorICBybSAtZiBjb25mJCQuZGlyL2NvbmYkJC5maWxlCitlbHNlCisgIHJtIC1mIGNvbmYkJC5kaXIKKyAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorZmkKK2lmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4KKyAgaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCiAgICAgYXNfbG5fcz0nbG4gLXMnCisgICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKKyAgICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgorICAgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgorICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcFInLgorICAgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKyAgICAgIGFzX2xuX3M9J2NwIC1wUicKKyAgZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhc19sbl9zPWxuCisgIGVsc2UKKyAgICBhc19sbl9zPSdjcCAtcFInCiAgIGZpCi1lbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgotICBhc19sbl9zPWxuCiBlbHNlCi0gIGFzX2xuX3M9J2NwIC1wJworICBhc19sbl9zPSdjcCAtcFInCiBmaQotcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKK3JtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKIAogaWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgotICBhc19ta2Rpcl9wPToKKyAgYXNfbWtkaXJfcD0nbWtkaXIgLXAgIiRhc19kaXIiJwogZWxzZQogICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAogICBhc19ta2Rpcl9wPWZhbHNlCiBmaQogCi1hc19leGVjdXRhYmxlX3A9InRlc3QgLWYiCithc190ZXN0X3g9J3Rlc3QgLXgnCithc19leGVjdXRhYmxlX3A9YXNfZm5fZXhlY3V0YWJsZV9wCiAKICMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KIGFzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCkBAIC0yMzMsOTEgKzU1NywxMjg2IEBACiBhc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgogCiAKLSMgSUZTCi0jIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLgotYXNfbmw9JwotJwotSUZTPSIgCSRhc19ubCIKLQotIyBDRFBBVEguCi0kYXNfdW5zZXQgQ0RQQVRICi0KK3Rlc3QgLW4gIiRESkRJUiIgfHwgZXhlYyA3PCYwIDwvZGV2L251bGwKK2V4ZWMgNj4mMQogCiAjIE5hbWUgb2YgdGhlIGhvc3QuCi0jIGhvc3RuYW1lIG9uIHNvbWUgc3lzdGVtcyAoU1ZSMy4yLCBMaW51eCkgcmV0dXJucyBhIGJvZ3VzIGV4aXQgc3RhdHVzLAorIyBob3N0bmFtZSBvbiBzb21lIHN5c3RlbXMgKFNWUjMuMiwgb2xkIEdOVS9MaW51eCkgcmV0dXJucyBhIGJvZ3VzIGV4aXQgc3RhdHVzLAogIyBzbyB1bmFtZSBnZXRzIHJ1biB0b28uCiBhY19ob3N0bmFtZT1gKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKIAotZXhlYyA2PiYxCi0KICMKICMgSW5pdGlhbGl6YXRpb25zLgogIwogYWNfZGVmYXVsdF9wcmVmaXg9L3Vzci9sb2NhbAorYWNfY2xlYW5fZmlsZXM9CiBhY19jb25maWdfbGlib2JqX2Rpcj0uCitMSUJPQkpTPQogY3Jvc3NfY29tcGlsaW5nPW5vCiBzdWJkaXJzPQogTUZMQUdTPQogTUFLRUZMQUdTPQotU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KLQotIyBNYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0byBwdXQgaW4gYSBzaGVsbCBoZXJlIGRvY3VtZW50LgotIyBUaGlzIHZhcmlhYmxlIHNlZW1zIG9ic29sZXRlLiAgSXQgc2hvdWxkIHByb2JhYmx5IGJlIHJlbW92ZWQsIGFuZAotIyBvbmx5IGFjX21heF9zZWRfbGluZXMgc2hvdWxkIGJlIHVzZWQuCi06ICR7YWNfbWF4X2hlcmVfbGluZXM9Mzh9CiAKICMgSWRlbnRpdHkgb2YgdGhpcyBwYWNrYWdlLgogUEFDS0FHRV9OQU1FPSdHTlUgQmlzb24nCiBQQUNLQUdFX1RBUk5BTUU9J2Jpc29uJwotUEFDS0FHRV9WRVJTSU9OPScyLjMnCi1QQUNLQUdFX1NUUklORz0nR05VIEJpc29uIDIuMycKK1BBQ0tBR0VfVkVSU0lPTj0nMi43JworUEFDS0FHRV9TVFJJTkc9J0dOVSBCaXNvbiAyLjcnCiBQQUNLQUdFX0JVR1JFUE9SVD0nYnVnLWJpc29uQGdudS5vcmcnCitQQUNLQUdFX1VSTD0naHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2Jpc29uLycKIAogIyBGYWN0b3JpbmcgZGVmYXVsdCBoZWFkZXJzIGZvciBtb3N0IHRlc3RzLgogYWNfaW5jbHVkZXNfZGVmYXVsdD0iXAogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaWYgSEFWRV9TWVNfVFlQRVNfSAorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKICMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjZW5kaWYKLSNpZiBIQVZFX1NZU19TVEFUX0gKKyNpZmRlZiBIQVZFX1NZU19TVEFUX0gKICMgaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNlbmRpZgotI2lmIFNURENfSEVBREVSUworI2lmZGVmIFNURENfSEVBREVSUwogIyBpbmNsdWRlIDxzdGRsaWIuaD4KICMgaW5jbHVkZSA8c3RkZGVmLmg+CiAjZWxzZQotIyBpZiBIQVZFX1NURExJQl9ICisjIGlmZGVmIEhBVkVfU1RETElCX0gKICMgIGluY2x1ZGUgPHN0ZGxpYi5oPgogIyBlbmRpZgogI2VuZGlmCi0jaWYgSEFWRV9TVFJJTkdfSAotIyBpZiAhU1REQ19IRUFERVJTICYmIEhBVkVfTUVNT1JZX0gKKyNpZmRlZiBIQVZFX1NUUklOR19ICisjIGlmICFkZWZpbmVkIFNURENfSEVBREVSUyAmJiBkZWZpbmVkIEhBVkVfTUVNT1JZX0gKICMgIGluY2x1ZGUgPG1lbW9yeS5oPgogIyBlbmRpZgogIyBpbmNsdWRlIDxzdHJpbmcuaD4KICNlbmRpZgotI2lmIEhBVkVfU1RSSU5HU19ICisjaWZkZWYgSEFWRV9TVFJJTkdTX0gKICMgaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCi0jaWYgSEFWRV9JTlRUWVBFU19ICisjaWZkZWYgSEFWRV9JTlRUWVBFU19ICiAjIGluY2x1ZGUgPGludHR5cGVzLmg+Ci0jZWxzZQotIyBpZiBIQVZFX1NURElOVF9ICi0jICBpbmNsdWRlIDxzdGRpbnQuaD4KLSMgZW5kaWYKICNlbmRpZgotI2lmIEhBVkVfVU5JU1REX0gKKyNpZmRlZiBIQVZFX1NURElOVF9ICisjIGluY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAogIyBpbmNsdWRlIDx1bmlzdGQuaD4KICNlbmRpZiIKIAotZ2xfaGVhZGVyX2xpc3Q9Ci1nbF9mdW5jX2xpc3Q9Ci1hY19zdWJzdF92YXJzPSdTSEVMTCBQQVRIX1NFUEFSQVRPUiBQQUNLQUdFX05BTUUgUEFDS0FHRV9UQVJOQU1FIFBBQ0tBR0VfVkVSU0lPTiBQQUNLQUdFX1NUUklORyBQQUNLQUdFX0JVR1JFUE9SVCBleGVjX3ByZWZpeCBwcmVmaXggcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFkaXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBsb2NhbHN0YXRlZGlyIGxpYmRpciBpbmNsdWRlZGlyIG9sZGluY2x1ZGVkaXIgaW5mb2RpciBtYW5kaXIgYnVpbGRfYWxpYXMgaG9zdF9hbGlhcyB0YXJnZXRfYWxpYXMgREVGUyBFQ0hPX0MgRUNIT19OIEVDSE9fVCBMSUJTIElOU1RBTExfUFJPR1JBTSBJTlNUQUxMX1NDUklQVCBJTlNUQUxMX0RBVEEgQ1lHUEFUSF9XIFBBQ0tBR0UgVkVSU0lPTiBBQ0xPQ0FMIEFVVE9DT05GIEFVVE9NQUtFIEFVVE9IRUFERVIgTUFLRUlORk8gaW5zdGFsbF9zaCBTVFJJUCBhY19jdF9TVFJJUCBJTlNUQUxMX1NUUklQX1BST0dSQU0gbWtkaXJfcCBBV0sgU0VUX01BS0UgYW1fX2xlYWRpbmdfZG90IEFNVEFSIGFtX190YXIgYW1fX3VudGFyIENDIENGTEFHUyBMREZMQUdTIENQUEZMQUdTIGFjX2N0X0NDIEVYRUVYVCBPQkpFWFQgREVQRElSIGFtX19pbmNsdWRlIGFtX19xdW90ZSBBTURFUF9UUlVFIEFNREVQX0ZBTFNFIEFNREVQQkFDS1NMQVNIIENDREVQTU9ERSBhbV9fZmFzdGRlcENDX1RSVUUgYW1fX2Zhc3RkZXBDQ19GQUxTRSBDUFAgRUdSRVAgV0FSTklOR19DRkxBR1MgV0VSUk9SX0NGTEFHUyBXQVJOSU5HX0NYWEZMQUdTIFlBQ0NfU0NSSVBUIFlBQ0NfTElCUkFSWSBMRVggTEVYTElCIExFWF9PVVRQVVRfUk9PVCBZQUNDIFJBTkxJQiBhY19jdF9SQU5MSUIgTTQgU1REQk9PTF9IIEhBVkVfX0JPT0wgTElCT0JKUyBHRVRPUFRfSCBNS0lOU1RBTExESVJTIFVTRV9OTFMgTVNHRk1UIEdNU0dGTVQgWEdFVFRFWFQgTVNHTUVSR0UgYnVpbGQgYnVpbGRfY3B1IGJ1aWxkX3ZlbmRvciBidWlsZF9vcyBob3N0IGhvc3RfY3B1IGhvc3RfdmVuZG9yIGhvc3Rfb3MgSU5UTF9NQUNPU1hfTElCUyBMSUJJQ09OViBMVExJQklDT05WIElOVExMSUJTIExJQklOVEwgTFRMSUJJTlRMIFBPU1VCIFVOSVNURF9IIEJJU09OX0xPQ0FMRURJUiBhY2xvY2FsZGlyIFZBTEdSSU5EIENYWCBDWFhGTEFHUyBhY19jdF9DWFggQ1hYREVQTU9ERSBhbV9fZmFzdGRlcENYWF9UUlVFIGFtX19mYXN0ZGVwQ1hYX0ZBTFNFIEJJU09OX0NYWF9XT1JLUyBCSVNPTl9DWFhfV09SS1NfVFJVRSBCSVNPTl9DWFhfV09SS1NfRkFMU0UgQVVUT000VEUgR0NDIE8wQ0ZMQUdTIE8wQ1hYRkxBR1MgTFRMSUJPQkpTJworZ2xfdXNlX3RocmVhZHNfZGVmYXVsdD0KK2FjX2hlYWRlcl9saXN0PQorYWNfZnVuY19saXN0PQorZ2xfZ2V0b3B0X3JlcXVpcmVkPVBPU0lYCitnbF9nZXRvcHRfcmVxdWlyZWQ9UE9TSVgKK2d0X25lZWRzPQorYWNfc3Vic3RfdmFycz0nZ2x0ZXN0c19MVExJQk9CSlMKK2dsdGVzdHNfTElCT0JKUworZ2xfTFRMSUJPQkpTCitnbF9MSUJPQkpTCitDT05GSUdfSU5DTFVERQorYW1fX0VYRUVYVF9GQUxTRQorYW1fX0VYRUVYVF9UUlVFCitMVExJQk9CSlMKK0xJQk9CSlMKK0hBVkVfSklLRVMKK0hBVkVfSkFWQUMKK0hBVkVfR0NKX0MKK0hBVkVfSkFWQUNfRU5WVkFSCitDT05GX0pBVkFDCitIQVZFX0pJS0VTX0lOX1BBVEgKK0hBVkVfSkFWQUNfSU5fUEFUSAorSEFWRV9HQ0pfSU5fUEFUSAorSEFWRV9KVklFVworSEFWRV9KUkUKK0hBVkVfSkFWQQorSEFWRV9HSUoKK0hBVkVfSkFWQV9FTlZWQVIKK0NMQVNTUEFUSF9TRVBBUkFUT1IKK0NMQVNTUEFUSAorQ09ORl9KQVZBCitIQVZFX0pWSUVXX0lOX1BBVEgKK0hBVkVfSlJFX0lOX1BBVEgKK0hBVkVfSkFWQV9JTl9QQVRICitIQVZFX0dJSl9JTl9QQVRICitHQ0MKK0FVVE9NNFRFCitWQUxHUklORF9QUkVCSVNPTgorVkFMR1JJTkQKK2FjbG9jYWxkaXIKK0JJU09OX0xPQ0FMRURJUgorUE9TVUIKK0lOVExMSUJTCitMVExJQklDT05WCitMSUJJQ09OVgorSU5UTF9NQUNPU1hfTElCUworWEdFVFRFWFRfRVhUUkFfT1BUSU9OUworTVNHTUVSR0UKK1hHRVRURVhUXzAxNQorWEdFVFRFWFQKK0dNU0dGTVRfMDE1CitNU0dGTVRfMDE1CitHTVNHRk1UCitNU0dGTVQKK0dFVFRFWFRfTUFDUk9fVkVSU0lPTgorVVNFX05MUworTElCQklTT05fTFRMSUJERVBTCitMSUJCSVNPTl9MSUJERVBTCitnbHRlc3RzX1dJVE5FU1MKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDSEFSX0gKK05FWFRfV0NIQVJfSAorTElCVU5JU1RSSU5HX0NPTVBJTEVfVU5JV0lEVEhfV0lEVEhfRkFMU0UKK0xJQlVOSVNUUklOR19DT01QSUxFX1VOSVdJRFRIX1dJRFRIX1RSVUUKK0xJQlVOSVNUUklOR19VTklXSURUSF9ICitMSUJVTklTVFJJTkdfVU5JVFlQRVNfSAorSEFWRV9VTklTVERfSAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfVU5JU1REX0gKK05FWFRfVU5JU1REX0gKK1BUSFJFQURfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQworU1lTX1RJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQworVElNRV9IX0RFRklORVNfU1RSVUNUX1RJTUVTUEVDCitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9USU1FX0gKK05FWFRfVElNRV9ICitSRVBMQUNFX1RJTUVHTQorUkVQTEFDRV9OQU5PU0xFRVAKK1JFUExBQ0VfTUtUSU1FCitSRVBMQUNFX0xPQ0FMVElNRV9SCitIQVZFX1RJTUVHTQorSEFWRV9TVFJQVElNRQorSEFWRV9OQU5PU0xFRVAKK0hBVkVfREVDTF9MT0NBTFRJTUVfUgorR05VTElCX1RJTUVfUgorR05VTElCX1RJTUVHTQorR05VTElCX1NUUlBUSU1FCitHTlVMSUJfTkFOT1NMRUVQCitHTlVMSUJfTUtUSU1FCitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfV0FJVF9ICitORVhUX1NZU19XQUlUX0gKK0dOVUxJQl9XQUlUUElECitXSU5ET1dTXzY0X0JJVF9PRkZfVAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1lTX1RZUEVTX0gKK05FWFRfU1lTX1RZUEVTX0gKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NUUklOR19ICitORVhUX1NUUklOR19ICitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERMSUJfSAorTkVYVF9TVERMSUJfSAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RESU9fSAorTkVYVF9TVERJT19ICitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERERUZfSAorTkVYVF9TVERERUZfSAorR0xfR0VORVJBVEVfU1REREVGX0hfRkFMU0UKK0dMX0dFTkVSQVRFX1NURERFRl9IX1RSVUUKK1NURERFRl9ICitIQVZFX1dDSEFSX1QKK1JFUExBQ0VfTlVMTAorSEFWRV9fQk9PTAorR0xfR0VORVJBVEVfU1REQk9PTF9IX0ZBTFNFCitHTF9HRU5FUkFURV9TVERCT09MX0hfVFJVRQorU1REQk9PTF9ICitIQVZFX1NQQVdOX0gKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NQQVdOX0gKK05FWFRfU1BBV05fSAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU0lHTkFMX0gKK05FWFRfU0lHTkFMX0gKK0dMX0dFTkVSQVRFX1NDSEVEX0hfRkFMU0UKK0dMX0dFTkVSQVRFX1NDSEVEX0hfVFJVRQorU0NIRURfSAorSEFWRV9TVFJVQ1RfU0NIRURfUEFSQU0KK0hBVkVfU0NIRURfSAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU0NIRURfSAorTkVYVF9TQ0hFRF9ICitSRVBMQUNFX1JBSVNFCitSRVBMQUNFX1BUSFJFQURfU0lHTUFTSworSEFWRV9TSUdIQU5ETEVSX1QKK0hBVkVfVFlQRV9WT0xBVElMRV9TSUdfQVRPTUlDX1QKK0hBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT04KK0hBVkVfU0lHQUNUSU9OCitIQVZFX1NJR0lORk9fVAorSEFWRV9TSUdTRVRfVAorSEFWRV9SQUlTRQorSEFWRV9QVEhSRUFEX1NJR01BU0sKK0hBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkcKK0dOVUxJQl9TSUdBQ1RJT04KK0dOVUxJQl9TSUdQUk9DTUFTSworR05VTElCX1NJR05BTF9IX1NJR1BJUEUKK0dOVUxJQl9SQUlTRQorR05VTElCX1BUSFJFQURfU0lHTUFTSworQVNNX1NZTUJPTF9QUkVGSVgKK1JFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU4KK1JFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDIKK1JFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERENMT1NFCitSRVBMQUNFX1BPU0lYX1NQQVdOCitIQVZFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19UCitIQVZFX1BPU0lYX1NQQVdOQVRUUl9UCitIQVZFX1BPU0lYX1NQQVdOCitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0RFU1RST1kKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0lHTUFTSworR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdNQVNLCitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNJR0RFRkFVTFQKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0lHREVGQVVMVAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTQ0hFRFBPTElDWQorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBPTElDWQorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTQ0hFRFBBUkFNCitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNDSEVEUEFSQU0KK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUUEdST1VQCitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFBHUk9VUAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRGTEFHUworR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRGTEFHUworR05VTElCX1BPU0lYX1NQQVdOQVRUUl9JTklUCitHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0RFU1RST1kKK0dOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURET1BFTgorR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BREREVVAyCitHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERENMT1NFCitHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0lOSVQKK0dOVUxJQl9QT1NJWF9TUEFXTlAKK0dOVUxJQl9QT1NJWF9TUEFXTgorVU5ERUZJTkVfU1RSVE9LX1IKK1JFUExBQ0VfU1RSVE9LX1IKK1JFUExBQ0VfU1RSU0lHTkFMCitSRVBMQUNFX1NUUk5MRU4KK1JFUExBQ0VfU1RSTkRVUAorUkVQTEFDRV9TVFJOQ0FUCitSRVBMQUNFX1NUUkVSUk9SX1IKK1JFUExBQ0VfU1RSRVJST1IKK1JFUExBQ0VfU1RSQ0hSTlVMCitSRVBMQUNFX1NUUkNBU0VTVFIKK1JFUExBQ0VfU1RSU1RSCitSRVBMQUNFX1NUUkRVUAorUkVQTEFDRV9TVFBOQ1BZCitSRVBMQUNFX01FTU1FTQorUkVQTEFDRV9NRU1DSFIKK0hBVkVfU1RSVkVSU0NNUAorSEFWRV9ERUNMX1NUUlNJR05BTAorSEFWRV9ERUNMX1NUUkVSUk9SX1IKK0hBVkVfREVDTF9TVFJUT0tfUgorSEFWRV9TVFJDQVNFU1RSCitIQVZFX1NUUlNFUAorSEFWRV9TVFJQQlJLCitIQVZFX0RFQ0xfU1RSTkxFTgorSEFWRV9ERUNMX1NUUk5EVVAKK0hBVkVfREVDTF9TVFJEVVAKK0hBVkVfU1RSQ0hSTlVMCitIQVZFX1NUUE5DUFkKK0hBVkVfU1RQQ1BZCitIQVZFX1JBV01FTUNIUgorSEFWRV9ERUNMX01FTVJDSFIKK0hBVkVfTUVNUENQWQorSEFWRV9ERUNMX01FTU1FTQorSEFWRV9NRU1DSFIKK0hBVkVfRkZTTEwKK0hBVkVfRkZTTAorSEFWRV9NQlNMRU4KK0dOVUxJQl9TVFJWRVJTQ01QCitHTlVMSUJfU1RSU0lHTkFMCitHTlVMSUJfU1RSRVJST1JfUgorR05VTElCX1NUUkVSUk9SCitHTlVMSUJfTUJTVE9LX1IKK0dOVUxJQl9NQlNTRVAKK0dOVUxJQl9NQlNTUE4KK0dOVUxJQl9NQlNQQlJLCitHTlVMSUJfTUJTQ1NQTgorR05VTElCX01CU0NBU0VTVFIKK0dOVUxJQl9NQlNQQ0FTRUNNUAorR05VTElCX01CU05DQVNFQ01QCitHTlVMSUJfTUJTQ0FTRUNNUAorR05VTElCX01CU1NUUgorR05VTElCX01CU1JDSFIKK0dOVUxJQl9NQlNDSFIKK0dOVUxJQl9NQlNOTEVOCitHTlVMSUJfTUJTTEVOCitHTlVMSUJfU1RSVE9LX1IKK0dOVUxJQl9TVFJDQVNFU1RSCitHTlVMSUJfU1RSU1RSCitHTlVMSUJfU1RSU0VQCitHTlVMSUJfU1RSUEJSSworR05VTElCX1NUUk5MRU4KK0dOVUxJQl9TVFJORFVQCitHTlVMSUJfU1RSTkNBVAorR05VTElCX1NUUkRVUAorR05VTElCX1NUUkNIUk5VTAorR05VTElCX1NUUE5DUFkKK0dOVUxJQl9TVFBDUFkKK0dOVUxJQl9SQVdNRU1DSFIKK0dOVUxJQl9NRU1SQ0hSCitHTlVMSUJfTUVNUENQWQorR05VTElCX01FTU1FTQorR05VTElCX01FTUNIUgorR05VTElCX0ZGU0xMCitHTlVMSUJfRkZTTAorTE9DQUxFX0ZSX1VURjgKK0xPQ0FMRV9aSF9DTgorTE9DQUxFX0pBCitSRVBMQUNFX1dDU1dJRFRICitSRVBMQUNFX1dDV0lEVEgKK1JFUExBQ0VfV0NTTlJUT01CUworUkVQTEFDRV9XQ1NSVE9NQlMKK1JFUExBQ0VfV0NSVE9NQgorUkVQTEFDRV9NQlNOUlRPV0NTCitSRVBMQUNFX01CU1JUT1dDUworUkVQTEFDRV9NQlJMRU4KK1JFUExBQ0VfTUJSVE9XQworUkVQTEFDRV9NQlNJTklUCitSRVBMQUNFX1dDVE9CCitSRVBMQUNFX0JUT1dDCitSRVBMQUNFX01CU1RBVEVfVAorSEFWRV9ERUNMX1dDV0lEVEgKK0hBVkVfREVDTF9XQ1RPQgorSEFWRV9XQ1NXSURUSAorSEFWRV9XQ1NUT0sKK0hBVkVfV0NTU1RSCitIQVZFX1dDU1BCUksKK0hBVkVfV0NTU1BOCitIQVZFX1dDU0NTUE4KK0hBVkVfV0NTUkNIUgorSEFWRV9XQ1NDSFIKK0hBVkVfV0NTRFVQCitIQVZFX1dDU1hGUk0KK0hBVkVfV0NTQ09MTAorSEFWRV9XQ1NOQ0FTRUNNUAorSEFWRV9XQ1NDQVNFQ01QCitIQVZFX1dDU05DTVAKK0hBVkVfV0NTQ01QCitIQVZFX1dDU05DQVQKK0hBVkVfV0NTQ0FUCitIQVZFX1dDUE5DUFkKK0hBVkVfV0NTTkNQWQorSEFWRV9XQ1BDUFkKK0hBVkVfV0NTQ1BZCitIQVZFX1dDU05MRU4KK0hBVkVfV0NTTEVOCitIQVZFX1dNRU1TRVQKK0hBVkVfV01FTU1PVkUKK0hBVkVfV01FTUNQWQorSEFWRV9XTUVNQ01QCitIQVZFX1dNRU1DSFIKK0hBVkVfV0NTTlJUT01CUworSEFWRV9XQ1NSVE9NQlMKK0hBVkVfV0NSVE9NQgorSEFWRV9NQlNOUlRPV0NTCitIQVZFX01CU1JUT1dDUworSEFWRV9NQlJMRU4KK0hBVkVfTUJSVE9XQworSEFWRV9NQlNJTklUCitIQVZFX0JUT1dDCitHTlVMSUJfV0NTV0lEVEgKK0dOVUxJQl9XQ1NUT0sKK0dOVUxJQl9XQ1NTVFIKK0dOVUxJQl9XQ1NQQlJLCitHTlVMSUJfV0NTU1BOCitHTlVMSUJfV0NTQ1NQTgorR05VTElCX1dDU1JDSFIKK0dOVUxJQl9XQ1NDSFIKK0dOVUxJQl9XQ1NEVVAKK0dOVUxJQl9XQ1NYRlJNCitHTlVMSUJfV0NTQ09MTAorR05VTElCX1dDU05DQVNFQ01QCitHTlVMSUJfV0NTQ0FTRUNNUAorR05VTElCX1dDU05DTVAKK0dOVUxJQl9XQ1NDTVAKK0dOVUxJQl9XQ1NOQ0FUCitHTlVMSUJfV0NTQ0FUCitHTlVMSUJfV0NQTkNQWQorR05VTElCX1dDU05DUFkKK0dOVUxJQl9XQ1BDUFkKK0dOVUxJQl9XQ1NDUFkKK0dOVUxJQl9XQ1NOTEVOCitHTlVMSUJfV0NTTEVOCitHTlVMSUJfV01FTVNFVAorR05VTElCX1dNRU1NT1ZFCitHTlVMSUJfV01FTUNQWQorR05VTElCX1dNRU1DTVAKK0dOVUxJQl9XTUVNQ0hSCitHTlVMSUJfV0NXSURUSAorR05VTElCX1dDU05SVE9NQlMKK0dOVUxJQl9XQ1NSVE9NQlMKK0dOVUxJQl9XQ1JUT01CCitHTlVMSUJfTUJTTlJUT1dDUworR05VTElCX01CU1JUT1dDUworR05VTElCX01CUkxFTgorR05VTElCX01CUlRPV0MKK0dOVUxJQl9NQlNJTklUCitHTlVMSUJfV0NUT0IKK0dOVUxJQl9CVE9XQworTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfTUFUSF9ICitORVhUX01BVEhfSAorTFRMSUJNVUxUSVRIUkVBRAorTElCTVVMVElUSFJFQUQKK0xUTElCVEhSRUFECitMSUJUSFJFQUQKK0xJQlBUSF9QUkVGSVgKK0xUTElCUFRICitMSUJQVEgKK0xPQ0FMQ0hBUlNFVF9URVNUU19FTlZJUk9OTUVOVAorR0xJQkMyMQorTERFWFBMX0xJQk0KK0xERVhQX0xJQk0KK1JFUExBQ0VfVE9XTE9XRVIKK1JFUExBQ0VfSVNXQ05UUkwKK0hBVkVfV0NUWVBFX0gKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDVFlQRV9ICitORVhUX1dDVFlQRV9ICitIQVZFX1dJTlRfVAorSEFWRV9JU1dDTlRSTAorUkVQTEFDRV9JU1dCTEFOSworSEFWRV9XQ1RSQU5TX1QKK0hBVkVfV0NUWVBFX1QKK0hBVkVfSVNXQkxBTksKK0dOVUxJQl9UT1dDVFJBTlMKK0dOVUxJQl9XQ1RSQU5TCitHTlVMSUJfSVNXQ1RZUEUKK0dOVUxJQl9XQ1RZUEUKK0dOVUxJQl9JU1dCTEFOSworSVNOQU5fTElCTQorSVNOQU5MX0xJQk0KK0lTTkFORF9MSUJNCitJU05BTkZfTElCTQorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfSU5UVFlQRVNfSAorTkVYVF9JTlRUWVBFU19ICitVSU5UNjRfTUFYX0VRX1VMT05HX01BWAorVUlOVDMyX01BWF9MVF9VSU5UTUFYX01BWAorUFJJUFRSX1BSRUZJWAorUFJJX01BQ1JPU19CUk9LRU4KK0lOVDY0X01BWF9FUV9MT05HX01BWAorSU5UMzJfTUFYX0xUX0lOVE1BWF9NQVgKK1JFUExBQ0VfU1RSVE9JTUFYCitIQVZFX0RFQ0xfU1RSVE9VTUFYCitIQVZFX0RFQ0xfU1RSVE9JTUFYCitIQVZFX0RFQ0xfSU1BWERJVgorSEFWRV9ERUNMX0lNQVhBQlMKK0dOVUxJQl9TVFJUT1VNQVgKK0dOVUxJQl9TVFJUT0lNQVgKK0dOVUxJQl9JTUFYRElWCitHTlVMSUJfSU1BWEFCUworR0xfR0VORVJBVEVfU1RESU5UX0hfRkFMU0UKK0dMX0dFTkVSQVRFX1NURElOVF9IX1RSVUUKK1NURElOVF9ICitXSU5UX1RfU1VGRklYCitXQ0hBUl9UX1NVRkZJWAorU0lHX0FUT01JQ19UX1NVRkZJWAorU0laRV9UX1NVRkZJWAorUFRSRElGRl9UX1NVRkZJWAorSEFWRV9TSUdORURfV0lOVF9UCitIQVZFX1NJR05FRF9XQ0hBUl9UCitIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1QKK0JJVFNJWkVPRl9XSU5UX1QKK0JJVFNJWkVPRl9XQ0hBUl9UCitCSVRTSVpFT0ZfU0lHX0FUT01JQ19UCitCSVRTSVpFT0ZfU0laRV9UCitCSVRTSVpFT0ZfUFRSRElGRl9UCitIQVZFX1NZU19CSVRZUEVTX0gKK0hBVkVfU1lTX0lOVFRZUEVTX0gKK0hBVkVfU1RESU5UX0gKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURElOVF9ICitORVhUX1NURElOVF9ICitIQVZFX1NZU19UWVBFU19ICitIQVZFX0lOVFRZUEVTX0gKK0hBVkVfV0NIQVJfSAorSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UCitIQVZFX0xPTkdfTE9OR19JTlQKK0xUTElCSU5UTAorTElCSU5UTAorR05VTElCX0dMX1VOSVNURF9IX0dFVE9QVAorR0VUT1BUX0gKK0hBVkVfR0VUT1BUX0gKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0dFVE9QVF9ICitORVhUX0dFVE9QVF9ICitXSU5ET1dTXzY0X0JJVF9TVF9TSVpFCitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfU1RBVF9ICitORVhUX1NZU19TVEFUX0gKK1JFUExBQ0VfVVRJTUVOU0FUCitSRVBMQUNFX1NUQVQKK1JFUExBQ0VfTUtOT0QKK1JFUExBQ0VfTUtGSUZPCitSRVBMQUNFX01LRElSCitSRVBMQUNFX0xTVEFUCitSRVBMQUNFX0ZVVElNRU5TCitSRVBMQUNFX0ZTVEFUQVQKK1JFUExBQ0VfRlNUQVQKK0hBVkVfVVRJTUVOU0FUCitIQVZFX01LTk9EQVQKK0hBVkVfTUtOT0QKK0hBVkVfTUtGSUZPQVQKK0hBVkVfTUtGSUZPCitIQVZFX01LRElSQVQKK0hBVkVfTFNUQVQKK0hBVkVfTENITU9ECitIQVZFX0ZVVElNRU5TCitIQVZFX0ZTVEFUQVQKK0hBVkVfRkNITU9EQVQKK0dOVUxJQl9VVElNRU5TQVQKK0dOVUxJQl9TVEFUCitHTlVMSUJfTUtOT0RBVAorR05VTElCX01LTk9ECitHTlVMSUJfTUtGSUZPQVQKK0dOVUxJQl9NS0ZJRk8KK0dOVUxJQl9NS0RJUkFUCitHTlVMSUJfTFNUQVQKK0dOVUxJQl9MQ0hNT0QKK0dOVUxJQl9GVVRJTUVOUworR05VTElCX0ZTVEFUQVQKK0dOVUxJQl9GU1RBVAorR05VTElCX0ZDSE1PREFUCitSRVBMQUNFX1RSVU5DTAorUkVQTEFDRV9UUlVOQ0YKK1JFUExBQ0VfVFJVTkMKK1JFUExBQ0VfU1FSVEwKK1JFUExBQ0VfU0lHTkJJVF9VU0lOR19HQ0MKK1JFUExBQ0VfU0lHTkJJVAorUkVQTEFDRV9ST1VOREwKK1JFUExBQ0VfUk9VTkRGCitSRVBMQUNFX1JPVU5ECitSRVBMQUNFX1JFTUFJTkRFUkwKK1JFUExBQ0VfUkVNQUlOREVSRgorUkVQTEFDRV9SRU1BSU5ERVIKK1JFUExBQ0VfTkFOCitSRVBMQUNFX01PREZMCitSRVBMQUNFX01PREZGCitSRVBMQUNFX01PREYKK1JFUExBQ0VfTE9HQkwKK1JFUExBQ0VfTE9HQkYKK1JFUExBQ0VfTE9HQgorUkVQTEFDRV9MT0cyTAorUkVQTEFDRV9MT0cyRgorUkVQTEFDRV9MT0cyCitSRVBMQUNFX0xPRzFQTAorUkVQTEFDRV9MT0cxUEYKK1JFUExBQ0VfTE9HMVAKK1JFUExBQ0VfTE9HMTBMCitSRVBMQUNFX0xPRzEwRgorUkVQTEFDRV9MT0cxMAorUkVQTEFDRV9MT0dMCitSRVBMQUNFX0xPR0YKK1JFUExBQ0VfTE9HCitSRVBMQUNFX0xERVhQTAorUkVQTEFDRV9JU05BTgorUkVQTEFDRV9JU0lORgorUkVQTEFDRV9JU0ZJTklURQorUkVQTEFDRV9JTE9HQkYKK1JFUExBQ0VfSUxPR0IKK1JFUExBQ0VfSFlQT1RMCitSRVBMQUNFX0hZUE9URgorUkVQTEFDRV9IWVBPVAorUkVQTEFDRV9IVUdFX1ZBTAorUkVQTEFDRV9GUkVYUEwKK1JFUExBQ0VfRlJFWFAKK1JFUExBQ0VfRlJFWFBGCitSRVBMQUNFX0ZNT0RMCitSRVBMQUNFX0ZNT0RGCitSRVBMQUNFX0ZNT0QKK1JFUExBQ0VfRk1BTAorUkVQTEFDRV9GTUFGCitSRVBMQUNFX0ZNQQorUkVQTEFDRV9GTE9PUkwKK1JFUExBQ0VfRkxPT1JGCitSRVBMQUNFX0ZMT09SCitSRVBMQUNFX0ZBQlNMCitSRVBMQUNFX0VYUDJMCitSRVBMQUNFX0VYUDIKK1JFUExBQ0VfRVhQTTFGCitSRVBMQUNFX0VYUE0xCitSRVBMQUNFX0NFSUxMCitSRVBMQUNFX0NFSUxGCitSRVBMQUNFX0NFSUwKK1JFUExBQ0VfQ0JSVEwKK1JFUExBQ0VfQ0JSVEYKK0hBVkVfREVDTF9UUlVOQ0wKK0hBVkVfREVDTF9UUlVOQ0YKK0hBVkVfREVDTF9UUlVOQworSEFWRV9ERUNMX1RBTkwKK0hBVkVfREVDTF9TUVJUTAorSEFWRV9ERUNMX1NJTkwKK0hBVkVfREVDTF9ST1VOREwKK0hBVkVfREVDTF9ST1VOREYKK0hBVkVfREVDTF9ST1VORAorSEFWRV9ERUNMX1JJTlRGCitIQVZFX0RFQ0xfUkVNQUlOREVSTAorSEFWRV9ERUNMX1JFTUFJTkRFUgorSEFWRV9ERUNMX0xPR0IKK0hBVkVfREVDTF9MT0cyTAorSEFWRV9ERUNMX0xPRzJGCitIQVZFX0RFQ0xfTE9HMgorSEFWRV9ERUNMX0xPRzEwTAorSEFWRV9ERUNMX0xPR0wKK0hBVkVfREVDTF9MREVYUEwKK0hBVkVfREVDTF9GUkVYUEwKK0hBVkVfREVDTF9GTE9PUkwKK0hBVkVfREVDTF9GTE9PUkYKK0hBVkVfREVDTF9FWFBNMUwKK0hBVkVfREVDTF9FWFAyTAorSEFWRV9ERUNMX0VYUDJGCitIQVZFX0RFQ0xfRVhQMgorSEFWRV9ERUNMX0VYUEwKK0hBVkVfREVDTF9DT1NMCitIQVZFX0RFQ0xfQ09QWVNJR05GCitIQVZFX0RFQ0xfQ0VJTEwKK0hBVkVfREVDTF9DRUlMRgorSEFWRV9ERUNMX0NCUlRMCitIQVZFX0RFQ0xfQ0JSVEYKK0hBVkVfREVDTF9BVEFOTAorSEFWRV9ERUNMX0FTSU5MCitIQVZFX0RFQ0xfQUNPU0wKK0hBVkVfVEFOSEYKK0hBVkVfVEFOTAorSEFWRV9UQU5GCitIQVZFX1NRUlRMCitIQVZFX1NRUlRGCitIQVZFX1NJTkhGCitIQVZFX1NJTkwKK0hBVkVfU0lORgorSEFWRV9SSU5UTAorSEFWRV9SSU5UCitIQVZFX1JFTUFJTkRFUkYKK0hBVkVfUkVNQUlOREVSCitIQVZFX1BPV0YKK0hBVkVfTU9ERkwKK0hBVkVfTU9ERkYKK0hBVkVfTE9HQkwKK0hBVkVfTE9HQkYKK0hBVkVfTE9HMVBMCitIQVZFX0xPRzFQRgorSEFWRV9MT0cxUAorSEFWRV9MT0cxMEwKK0hBVkVfTE9HMTBGCitIQVZFX0xPR0wKK0hBVkVfTE9HRgorSEFWRV9MREVYUEYKK0hBVkVfSVNOQU5MCitIQVZFX0lTTkFORAorSEFWRV9JU05BTkYKK0hBVkVfSUxPR0JMCitIQVZFX0lMT0dCRgorSEFWRV9JTE9HQgorSEFWRV9IWVBPVEwKK0hBVkVfSFlQT1RGCitIQVZFX0ZSRVhQRgorSEFWRV9GTU9ETAorSEFWRV9GTU9ERgorSEFWRV9GTUFMCitIQVZFX0ZNQUYKK0hBVkVfRk1BCitIQVZFX0ZBQlNMCitIQVZFX0ZBQlNGCitIQVZFX0VYUE0xRgorSEFWRV9FWFBNMQorSEFWRV9FWFBMCitIQVZFX0VYUEYKK0hBVkVfQ09TSEYKK0hBVkVfQ09TTAorSEFWRV9DT1NGCitIQVZFX0NPUFlTSUdOTAorSEFWRV9DT1BZU0lHTgorSEFWRV9DQlJUTAorSEFWRV9DQlJURgorSEFWRV9DQlJUCitIQVZFX0FUQU4yRgorSEFWRV9BVEFOTAorSEFWRV9BVEFORgorSEFWRV9BU0lOTAorSEFWRV9BU0lORgorSEFWRV9BQ09TTAorSEFWRV9BQ09TRgorR05VTElCX1RSVU5DTAorR05VTElCX1RSVU5DRgorR05VTElCX1RSVU5DCitHTlVMSUJfVEFOSEYKK0dOVUxJQl9UQU5MCitHTlVMSUJfVEFORgorR05VTElCX1NRUlRMCitHTlVMSUJfU1FSVEYKK0dOVUxJQl9TSU5IRgorR05VTElCX1NJTkwKK0dOVUxJQl9TSU5GCitHTlVMSUJfU0lHTkJJVAorR05VTElCX1JPVU5ETAorR05VTElCX1JPVU5ERgorR05VTElCX1JPVU5ECitHTlVMSUJfUklOVEwKK0dOVUxJQl9SSU5URgorR05VTElCX1JJTlQKK0dOVUxJQl9SRU1BSU5ERVJMCitHTlVMSUJfUkVNQUlOREVSRgorR05VTElCX1JFTUFJTkRFUgorR05VTElCX1BPV0YKK0dOVUxJQl9NT0RGTAorR05VTElCX01PREZGCitHTlVMSUJfTU9ERgorR05VTElCX0xPR0JMCitHTlVMSUJfTE9HQkYKK0dOVUxJQl9MT0dCCitHTlVMSUJfTE9HMkwKK0dOVUxJQl9MT0cyRgorR05VTElCX0xPRzIKK0dOVUxJQl9MT0cxUEwKK0dOVUxJQl9MT0cxUEYKK0dOVUxJQl9MT0cxUAorR05VTElCX0xPRzEwTAorR05VTElCX0xPRzEwRgorR05VTElCX0xPRzEwCitHTlVMSUJfTE9HTAorR05VTElCX0xPR0YKK0dOVUxJQl9MT0cKK0dOVUxJQl9MREVYUEwKK0dOVUxJQl9MREVYUEYKK0dOVUxJQl9JU05BTkwKK0dOVUxJQl9JU05BTkQKK0dOVUxJQl9JU05BTkYKK0dOVUxJQl9JU05BTgorR05VTElCX0lTSU5GCitHTlVMSUJfSVNGSU5JVEUKK0dOVUxJQl9JTE9HQkwKK0dOVUxJQl9JTE9HQkYKK0dOVUxJQl9JTE9HQgorR05VTElCX0hZUE9UTAorR05VTElCX0hZUE9URgorR05VTElCX0hZUE9UCitHTlVMSUJfRlJFWFBMCitHTlVMSUJfRlJFWFAKK0dOVUxJQl9GUkVYUEYKK0dOVUxJQl9GTU9ETAorR05VTElCX0ZNT0RGCitHTlVMSUJfRk1PRAorR05VTElCX0ZNQUwKK0dOVUxJQl9GTUFGCitHTlVMSUJfRk1BCitHTlVMSUJfRkxPT1JMCitHTlVMSUJfRkxPT1JGCitHTlVMSUJfRkxPT1IKK0dOVUxJQl9GQUJTTAorR05VTElCX0ZBQlNGCitHTlVMSUJfRVhQTTFMCitHTlVMSUJfRVhQTTFGCitHTlVMSUJfRVhQTTEKK0dOVUxJQl9FWFAyTAorR05VTElCX0VYUDJGCitHTlVMSUJfRVhQMgorR05VTElCX0VYUEwKK0dOVUxJQl9FWFBGCitHTlVMSUJfQ09TSEYKK0dOVUxJQl9DT1NMCitHTlVMSUJfQ09TRgorR05VTElCX0NPUFlTSUdOTAorR05VTElCX0NPUFlTSUdORgorR05VTElCX0NPUFlTSUdOCitHTlVMSUJfQ0VJTEwKK0dOVUxJQl9DRUlMRgorR05VTElCX0NFSUwKK0dOVUxJQl9DQlJUTAorR05VTElCX0NCUlRGCitHTlVMSUJfQ0JSVAorR05VTElCX0FUQU4yRgorR05VTElCX0FUQU5MCitHTlVMSUJfQVRBTkYKK0dOVUxJQl9BU0lOTAorR05VTElCX0FTSU5GCitHTlVMSUJfQUNPU0wKK0dOVUxJQl9BQ09TRgorSEFWRV9GRUFUVVJFU19ICitBUFBMRV9VTklWRVJTQUxfQlVJTEQKK0hBVkVfU0FNRV9MT05HX0RPVUJMRV9BU19ET1VCTEUKK1JFUExBQ0VfVlNQUklOVEYKK1JFUExBQ0VfVlNOUFJJTlRGCitSRVBMQUNFX1ZQUklOVEYKK1JFUExBQ0VfVkZQUklOVEYKK1JFUExBQ0VfVkRQUklOVEYKK1JFUExBQ0VfVkFTUFJJTlRGCitSRVBMQUNFX1RNUEZJTEUKK1JFUExBQ0VfU1RESU9fV1JJVEVfRlVOQ1MKK1JFUExBQ0VfU1RESU9fUkVBRF9GVU5DUworUkVQTEFDRV9TUFJJTlRGCitSRVBMQUNFX1NOUFJJTlRGCitSRVBMQUNFX1JFTkFNRUFUCitSRVBMQUNFX1JFTkFNRQorUkVQTEFDRV9SRU1PVkUKK1JFUExBQ0VfUFJJTlRGCitSRVBMQUNFX1BPUEVOCitSRVBMQUNFX1BFUlJPUgorUkVQTEFDRV9PQlNUQUNLX1BSSU5URgorUkVQTEFDRV9HRVRMSU5FCitSRVBMQUNFX0dFVERFTElNCitSRVBMQUNFX0ZURUxMTworUkVQTEFDRV9GVEVMTAorUkVQTEFDRV9GU0VFS08KK1JFUExBQ0VfRlNFRUsKK1JFUExBQ0VfRlJFT1BFTgorUkVQTEFDRV9GUFVSR0UKK1JFUExBQ0VfRlBSSU5URgorUkVQTEFDRV9GT1BFTgorUkVQTEFDRV9GRkxVU0gKK1JFUExBQ0VfRkRPUEVOCitSRVBMQUNFX0ZDTE9TRQorUkVQTEFDRV9EUFJJTlRGCitIQVZFX1ZEUFJJTlRGCitIQVZFX1ZBU1BSSU5URgorSEFWRV9SRU5BTUVBVAorSEFWRV9QT1BFTgorSEFWRV9QQ0xPU0UKK0hBVkVfRlRFTExPCitIQVZFX0ZTRUVLTworSEFWRV9EUFJJTlRGCitIQVZFX0RFQ0xfVlNOUFJJTlRGCitIQVZFX0RFQ0xfU05QUklOVEYKK0hBVkVfREVDTF9PQlNUQUNLX1BSSU5URgorSEFWRV9ERUNMX0dFVExJTkUKK0hBVkVfREVDTF9HRVRERUxJTQorSEFWRV9ERUNMX0ZURUxMTworSEFWRV9ERUNMX0ZTRUVLTworSEFWRV9ERUNMX0ZQVVJHRQorR05VTElCX1ZTUFJJTlRGX1BPU0lYCitHTlVMSUJfVlNOUFJJTlRGCitHTlVMSUJfVlBSSU5URl9QT1NJWAorR05VTElCX1ZQUklOVEYKK0dOVUxJQl9WRlBSSU5URl9QT1NJWAorR05VTElCX1ZGUFJJTlRGCitHTlVMSUJfVkRQUklOVEYKK0dOVUxJQl9WU0NBTkYKK0dOVUxJQl9WRlNDQU5GCitHTlVMSUJfVkFTUFJJTlRGCitHTlVMSUJfVE1QRklMRQorR05VTElCX1NURElPX0hfU0lHUElQRQorR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkcKK0dOVUxJQl9TUFJJTlRGX1BPU0lYCitHTlVMSUJfU05QUklOVEYKK0dOVUxJQl9TQ0FORgorR05VTElCX1JFTkFNRUFUCitHTlVMSUJfUkVOQU1FCitHTlVMSUJfUkVNT1ZFCitHTlVMSUJfUFVUUworR05VTElCX1BVVENIQVIKK0dOVUxJQl9QVVRDCitHTlVMSUJfUFJJTlRGX1BPU0lYCitHTlVMSUJfUFJJTlRGCitHTlVMSUJfUE9QRU4KK0dOVUxJQl9QRVJST1IKK0dOVUxJQl9QQ0xPU0UKK0dOVUxJQl9PQlNUQUNLX1BSSU5URl9QT1NJWAorR05VTElCX09CU1RBQ0tfUFJJTlRGCitHTlVMSUJfR0VUTElORQorR05VTElCX0dFVERFTElNCitHTlVMSUJfR0VUQ0hBUgorR05VTElCX0dFVEMKK0dOVUxJQl9GV1JJVEUKK0dOVUxJQl9GVEVMTE8KK0dOVUxJQl9GVEVMTAorR05VTElCX0ZTRUVLTworR05VTElCX0ZTRUVLCitHTlVMSUJfRlNDQU5GCitHTlVMSUJfRlJFT1BFTgorR05VTElCX0ZSRUFECitHTlVMSUJfRlBVVFMKK0dOVUxJQl9GUFVUQworR05VTElCX0ZQVVJHRQorR05VTElCX0ZQUklOVEZfUE9TSVgKK0dOVUxJQl9GUFJJTlRGCitHTlVMSUJfRk9QRU4KK0dOVUxJQl9GR0VUUworR05VTElCX0ZHRVRDCitHTlVMSUJfRkZMVVNICitHTlVMSUJfRkRPUEVOCitHTlVMSUJfRkNMT1NFCitHTlVMSUJfRFBSSU5URgorUkVQTEFDRV9JVE9MRAorR0xfR0VORVJBVEVfRkxPQVRfSF9GQUxTRQorR0xfR0VORVJBVEVfRkxPQVRfSF9UUlVFCitGTE9BVF9ICitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9GTE9BVF9ICitORVhUX0ZMT0FUX0gKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0ZDTlRMX0gKK05FWFRfRkNOVExfSAorUkVQTEFDRV9PUEVOQVQKK1JFUExBQ0VfT1BFTgorUkVQTEFDRV9GQ05UTAorSEFWRV9PUEVOQVQKK0hBVkVfRkNOVEwKK0dOVUxJQl9PUEVOQVQKK0dOVUxJQl9PUEVOCitHTlVMSUJfTk9OQkxPQ0tJTkcKK0dOVUxJQl9GQ05UTAorRU9WRVJGTE9XX1ZBTFVFCitFT1ZFUkZMT1dfSElEREVOCitFTk9MSU5LX1ZBTFVFCitFTk9MSU5LX0hJRERFTgorRU1VTFRJSE9QX1ZBTFVFCitFTVVMVElIT1BfSElEREVOCitHTF9HRU5FUkFURV9FUlJOT19IX0ZBTFNFCitHTF9HRU5FUkFURV9FUlJOT19IX1RSVUUKK0VSUk5PX0gKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0VSUk5PX0gKK05FWFRfRVJSTk9fSAorUFJBR01BX0NPTFVNTlMKK1BSQUdNQV9TWVNURU1fSEVBREVSCitJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFCitJTkNMVURFX05FWFQKK3BrZ2xpYmV4ZWNkaXIKK2xpc3BkaXIKK0hBVkVfV0lOU09DSzJfSAorSEFWRV9NU1ZDX0lOVkFMSURfUEFSQU1FVEVSX0hBTkRMRVIKK1VOSVNURF9IX0hBVkVfV0lOU09DSzJfSF9BTkRfVVNFX1NPQ0tFVFMKK1VOSVNURF9IX0hBVkVfV0lOU09DSzJfSAorUkVQTEFDRV9XUklURQorUkVQTEFDRV9VU0xFRVAKK1JFUExBQ0VfVU5MSU5LQVQKK1JFUExBQ0VfVU5MSU5LCitSRVBMQUNFX1RUWU5BTUVfUgorUkVQTEFDRV9TWU1MSU5LCitSRVBMQUNFX1NMRUVQCitSRVBMQUNFX1JNRElSCitSRVBMQUNFX1JFQURMSU5LCitSRVBMQUNFX1JFQUQKK1JFUExBQ0VfUFdSSVRFCitSRVBMQUNFX1BSRUFECitSRVBMQUNFX0xTRUVLCitSRVBMQUNFX0xJTktBVAorUkVQTEFDRV9MSU5LCitSRVBMQUNFX0xDSE9XTgorUkVQTEFDRV9JU0FUVFkKK1JFUExBQ0VfR0VUUEFHRVNJWkUKK1JFUExBQ0VfR0VUR1JPVVBTCitSRVBMQUNFX0dFVExPR0lOX1IKK1JFUExBQ0VfR0VURE9NQUlOTkFNRQorUkVQTEFDRV9HRVRDV0QKK1JFUExBQ0VfRlRSVU5DQVRFCitSRVBMQUNFX0ZDSE9XTkFUCitSRVBMQUNFX0RVUDIKK1JFUExBQ0VfRFVQCitSRVBMQUNFX0NMT1NFCitSRVBMQUNFX0NIT1dOCitIQVZFX1NZU19QQVJBTV9ICitIQVZFX09TX0gKK0hBVkVfREVDTF9UVFlOQU1FX1IKK0hBVkVfREVDTF9TRVRIT1NUTkFNRQorSEFWRV9ERUNMX0dFVFVTRVJTSEVMTAorSEFWRV9ERUNMX0dFVFBBR0VTSVpFCitIQVZFX0RFQ0xfR0VUTE9HSU5fUgorSEFWRV9ERUNMX0dFVERPTUFJTk5BTUUKK0hBVkVfREVDTF9GREFUQVNZTkMKK0hBVkVfREVDTF9GQ0hESVIKK0hBVkVfREVDTF9FTlZJUk9OCitIQVZFX1VTTEVFUAorSEFWRV9VTkxJTktBVAorSEFWRV9TWU1MSU5LQVQKK0hBVkVfU1lNTElOSworSEFWRV9TTEVFUAorSEFWRV9TRVRIT1NUTkFNRQorSEFWRV9SRUFETElOS0FUCitIQVZFX1JFQURMSU5LCitIQVZFX1BXUklURQorSEFWRV9QUkVBRAorSEFWRV9QSVBFMgorSEFWRV9QSVBFCitIQVZFX0xJTktBVAorSEFWRV9MSU5LCitIQVZFX0xDSE9XTgorSEFWRV9HUk9VUF9NRU1CRVIKK0hBVkVfR0VUUEFHRVNJWkUKK0hBVkVfR0VUTE9HSU4KK0hBVkVfR0VUSE9TVE5BTUUKK0hBVkVfR0VUR1JPVVBTCitIQVZFX0dFVERUQUJMRVNJWkUKK0hBVkVfRlRSVU5DQVRFCitIQVZFX0ZTWU5DCitIQVZFX0ZEQVRBU1lOQworSEFWRV9GQ0hPV05BVAorSEFWRV9GQ0hESVIKK0hBVkVfRkFDQ0VTU0FUCitIQVZFX0VVSURBQ0NFU1MKK0hBVkVfRFVQMworSEFWRV9EVVAyCitIQVZFX0NIT1dOCitHTlVMSUJfV1JJVEUKK0dOVUxJQl9VU0xFRVAKK0dOVUxJQl9VTkxJTktBVAorR05VTElCX1VOTElOSworR05VTElCX1VOSVNURF9IX1NJR1BJUEUKK0dOVUxJQl9VTklTVERfSF9OT05CTE9DS0lORworR05VTElCX1RUWU5BTUVfUgorR05VTElCX1NZTUxJTktBVAorR05VTElCX1NZTUxJTksKK0dOVUxJQl9TTEVFUAorR05VTElCX1NFVEhPU1ROQU1FCitHTlVMSUJfUk1ESVIKK0dOVUxJQl9SRUFETElOS0FUCitHTlVMSUJfUkVBRExJTksKK0dOVUxJQl9SRUFECitHTlVMSUJfUFdSSVRFCitHTlVMSUJfUFJFQUQKK0dOVUxJQl9QSVBFMgorR05VTElCX1BJUEUKK0dOVUxJQl9MU0VFSworR05VTElCX0xJTktBVAorR05VTElCX0xJTksKK0dOVUxJQl9MQ0hPV04KK0dOVUxJQl9JU0FUVFkKK0dOVUxJQl9HUk9VUF9NRU1CRVIKK0dOVUxJQl9HRVRVU0VSU0hFTEwKK0dOVUxJQl9HRVRQQUdFU0laRQorR05VTElCX0dFVExPR0lOX1IKK0dOVUxJQl9HRVRMT0dJTgorR05VTElCX0dFVEhPU1ROQU1FCitHTlVMSUJfR0VUR1JPVVBTCitHTlVMSUJfR0VURFRBQkxFU0laRQorR05VTElCX0dFVERPTUFJTk5BTUUKK0dOVUxJQl9HRVRDV0QKK0dOVUxJQl9GVFJVTkNBVEUKK0dOVUxJQl9GU1lOQworR05VTElCX0ZEQVRBU1lOQworR05VTElCX0ZDSE9XTkFUCitHTlVMSUJfRkNIRElSCitHTlVMSUJfRkFDQ0VTU0FUCitHTlVMSUJfRVVJREFDQ0VTUworR05VTElCX0VOVklST04KK0dOVUxJQl9EVVAzCitHTlVMSUJfRFVQMgorR05VTElCX0RVUAorR05VTElCX0NMT1NFCitHTlVMSUJfQ0hPV04KK0dOVUxJQl9DSERJUgorUkVQTEFDRV9XQ1RPTUIKK1JFUExBQ0VfVU5TRVRFTlYKK1JFUExBQ0VfU1RSVE9ECitSRVBMQUNFX1NFVEVOVgorUkVQTEFDRV9SRUFMUEFUSAorUkVQTEFDRV9SRUFMTE9DCitSRVBMQUNFX1JBTkRPTV9SCitSRVBMQUNFX1BVVEVOVgorUkVQTEFDRV9QVFNOQU1FX1IKK1JFUExBQ0VfUFRTTkFNRQorUkVQTEFDRV9NS1NURU1QCitSRVBMQUNFX01CVE9XQworUkVQTEFDRV9NQUxMT0MKK1JFUExBQ0VfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRQorUkVQTEFDRV9DQUxMT0MKK0hBVkVfREVDTF9VTlNFVEVOVgorSEFWRV9VTkxPQ0tQVAorSEFWRV9TWVNfTE9BREFWR19ICitIQVZFX1NUUlVDVF9SQU5ET01fREFUQQorSEFWRV9TVFJUT1VMTAorSEFWRV9TVFJUT0xMCitIQVZFX1NUUlRPRAorSEFWRV9ERUNMX1NFVEVOVgorSEFWRV9TRVRFTlYKK0hBVkVfUlBNQVRDSAorSEFWRV9SRUFMUEFUSAorSEFWRV9SQU5ET01fUgorSEFWRV9SQU5ET01fSAorSEFWRV9SQU5ET00KK0hBVkVfUFRTTkFNRV9SCitIQVZFX1BUU05BTUUKK0hBVkVfUE9TSVhfT1BFTlBUCitIQVZFX01LU1RFTVBTCitIQVZFX01LU1RFTVAKK0hBVkVfTUtPU1RFTVBTCitIQVZFX01LT1NURU1QCitIQVZFX01LRFRFTVAKK0hBVkVfR1JBTlRQVAorSEFWRV9HRVRTVUJPUFQKK0hBVkVfREVDTF9HRVRMT0FEQVZHCitIQVZFX0NBTk9OSUNBTElaRV9GSUxFX05BTUUKK0hBVkVfQVRPTEwKK0hBVkVfX0VYSVQKK0dOVUxJQl9XQ1RPTUIKK0dOVUxJQl9VTlNFVEVOVgorR05VTElCX1VOTE9DS1BUCitHTlVMSUJfU1lTVEVNX1BPU0lYCitHTlVMSUJfU1RSVE9VTEwKK0dOVUxJQl9TVFJUT0xMCitHTlVMSUJfU1RSVE9ECitHTlVMSUJfU0VURU5WCitHTlVMSUJfUlBNQVRDSAorR05VTElCX1JFQUxQQVRICitHTlVMSUJfUkVBTExPQ19QT1NJWAorR05VTElCX1JBTkRPTV9SCitHTlVMSUJfUkFORE9NCitHTlVMSUJfUFVURU5WCitHTlVMSUJfUFRTTkFNRV9SCitHTlVMSUJfUFRTTkFNRQorR05VTElCX1BPU0lYX09QRU5QVAorR05VTElCX01LU1RFTVBTCitHTlVMSUJfTUtTVEVNUAorR05VTElCX01LT1NURU1QUworR05VTElCX01LT1NURU1QCitHTlVMSUJfTUtEVEVNUAorR05VTElCX01CVE9XQworR05VTElCX01BTExPQ19QT1NJWAorR05VTElCX0dSQU5UUFQKK0dOVUxJQl9HRVRTVUJPUFQKK0dOVUxJQl9HRVRMT0FEQVZHCitHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRQorR05VTElCX0NBTExPQ19QT1NJWAorR05VTElCX0FUT0xMCitHTlVMSUJfX0VYSVQKK0dMX0dFTkVSQVRFX0FMTE9DQV9IX0ZBTFNFCitHTF9HRU5FUkFURV9BTExPQ0FfSF9UUlVFCitBTExPQ0FfSAorQUxMT0NBCitHTF9DT05EX0xJQlRPT0xfRkFMU0UKK0dMX0NPTkRfTElCVE9PTF9UUlVFCitYU0xUUFJPQworSEVMUDJNQU4KK1BFUkwKK000X0RFQlVHRklMRQorTTRfR05VCitNNAorWUZMQUdTCitZQUNDCitMRVhMSUIKK0xFWF9PVVRQVVRfUk9PVAorTEVYX0lTX0ZMRVgKK0xFWAorRE9UCitZQUNDX0xJQlJBUlkKK1lBQ0NfU0NSSVBUCitDWFhfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUCitCSVNPTl9DWFhfV09SS1NfRkFMU0UKK0JJU09OX0NYWF9XT1JLU19UUlVFCitCSVNPTl9DWFhfV09SS1MKK0NfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUCitCSVNPTl9DX1dPUktTCitXQVJOX0NYWEZMQUdTX1RFU1QKK1dFUlJPUl9DWFhGTEFHUworV0FSTl9DWFhGTEFHUworV0FSTl9DRkxBR1NfVEVTVAorV0VSUk9SX0NGTEFHUworV0FSTl9DRkxBR1MKK2hvc3Rfb3MKK2hvc3RfdmVuZG9yCitob3N0X2NwdQoraG9zdAorYnVpbGRfb3MKK2J1aWxkX3ZlbmRvcgorYnVpbGRfY3B1CitidWlsZAorUkFOTElCCitBUkZMQUdTCitBUgorRUdSRVAKK0dSRVAKK0NQUAorYW1fX2Zhc3RkZXBDWFhfRkFMU0UKK2FtX19mYXN0ZGVwQ1hYX1RSVUUKK0NYWERFUE1PREUKK2FjX2N0X0NYWAorQ1hYRkxBR1MKK0NYWAorYW1fX2Zhc3RkZXBDQ19GQUxTRQorYW1fX2Zhc3RkZXBDQ19UUlVFCitDQ0RFUE1PREUKK2FtX19ub2RlcAorQU1ERVBCQUNLU0xBU0gKK0FNREVQX0ZBTFNFCitBTURFUF9UUlVFCithbV9fcXVvdGUKK2FtX19pbmNsdWRlCitERVBESVIKK09CSkVYVAorRVhFRVhUCithY19jdF9DQworQ1BQRkxBR1MKK0xERkxBR1MKK0NGTEFHUworQ0MKK0FNX0JBQ0tTTEFTSAorQU1fREVGQVVMVF9WRVJCT1NJVFkKK0FNX0RFRkFVTFRfVgorQU1fVgorYW1fX3VudGFyCithbV9fdGFyCitBTVRBUgorYW1fX2xlYWRpbmdfZG90CitTRVRfTUFLRQorQVdLCitta2Rpcl9wCitNS0RJUl9QCitJTlNUQUxMX1NUUklQX1BST0dSQU0KK1NUUklQCitpbnN0YWxsX3NoCitNQUtFSU5GTworQVVUT0hFQURFUgorQVVUT01BS0UKK0FVVE9DT05GCitBQ0xPQ0FMCitWRVJTSU9OCitQQUNLQUdFCitDWUdQQVRIX1cKK2FtX19pc3JjCitJTlNUQUxMX0RBVEEKK0lOU1RBTExfU0NSSVBUCitJTlNUQUxMX1BST0dSQU0KK1BBQ0tBR0VfQ09QWVJJR0hUX1lFQVIKK3RhcmdldF9hbGlhcworaG9zdF9hbGlhcworYnVpbGRfYWxpYXMKK0xJQlMKK0VDSE9fVAorRUNIT19OCitFQ0hPX0MKK0RFRlMKK21hbmRpcgorbG9jYWxlZGlyCitsaWJkaXIKK3BzZGlyCitwZGZkaXIKK2R2aWRpcgoraHRtbGRpcgoraW5mb2RpcgorZG9jZGlyCitvbGRpbmNsdWRlZGlyCitpbmNsdWRlZGlyCitsb2NhbHN0YXRlZGlyCitzaGFyZWRzdGF0ZWRpcgorc3lzY29uZmRpcgorZGF0YWRpcgorZGF0YXJvb3RkaXIKK2xpYmV4ZWNkaXIKK3NiaW5kaXIKK2JpbmRpcgorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZQorcHJlZml4CitleGVjX3ByZWZpeAorUEFDS0FHRV9VUkwKK1BBQ0tBR0VfQlVHUkVQT1JUCitQQUNLQUdFX1NUUklORworUEFDS0FHRV9WRVJTSU9OCitQQUNLQUdFX1RBUk5BTUUKK1BBQ0tBR0VfTkFNRQorUEFUSF9TRVBBUkFUT1IKK1NIRUxMJwogYWNfc3Vic3RfZmlsZXM9JycKK2FjX3VzZXJfb3B0cz0nCitlbmFibGVfb3B0aW9uX2NoZWNraW5nCitlbmFibGVfc2lsZW50X3J1bGVzCitlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZworZW5hYmxlX2xhcmdlZmlsZQorZW5hYmxlX3RocmVhZHMKK2VuYWJsZV9nY2Nfd2FybmluZ3MKK2VuYWJsZV95YWNjCitlbmFibGVfYXNzZXJ0Cit3aXRoX2dudV9sZAorZW5hYmxlX3JwYXRoCit3aXRoX2xpYnB0aF9wcmVmaXgKK3dpdGhfZG1hbGxvYworZW5hYmxlX25scword2l0aF9saWJpY29udl9wcmVmaXgKK3dpdGhfbGliaW50bF9wcmVmaXgKKycKKyAgICAgIGFjX3ByZWNpb3VzX3ZhcnM9J2J1aWxkX2FsaWFzCitob3N0X2FsaWFzCit0YXJnZXRfYWxpYXMKK0NDCitDRkxBR1MKK0xERkxBR1MKK0xJQlMKK0NQUEZMQUdTCitDWFgKK0NYWEZMQUdTCitDQ0MKK0NQUAorWUFDQworWUZMQUdTCitNNCcKKwogCiAjIEluaXRpYWxpemUgc29tZSB2YXJpYWJsZXMgc2V0IGJ5IG9wdGlvbnMuCiBhY19pbml0X2hlbHA9CiBhY19pbml0X3ZlcnNpb249ZmFsc2UKK2FjX3VucmVjb2duaXplZF9vcHRzPQorYWNfdW5yZWNvZ25pemVkX3NlcD0KICMgVGhlIHZhcmlhYmxlcyBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRoZSBvcHRpb25zLCB3aXRoCiAjIGRhc2hlcyBjaGFuZ2VkIHRvIHVuZGVybGluZXMuCiBjYWNoZV9maWxlPS9kZXYvbnVsbApAQCAtMzQwLDM0ICsxODU5LDQ5IEBACiAjIGFuZCBhbGwgdGhlIHZhcmlhYmxlcyB0aGF0IGFyZSBzdXBwb3NlZCB0byBiZSBiYXNlZCBvbiBleGVjX3ByZWZpeAogIyBieSBkZWZhdWx0IHdpbGwgYWN0dWFsbHkgY2hhbmdlLgogIyBVc2UgYnJhY2VzIGluc3RlYWQgb2YgcGFyZW5zIGJlY2F1c2Ugc2gsIHBlcmwsIGV0Yy4gYWxzbyBhY2NlcHQgdGhlbS4KKyMgKFRoZSBsaXN0IGZvbGxvd3MgdGhlIHNhbWUgb3JkZXIgYXMgdGhlIEdOVSBDb2RpbmcgU3RhbmRhcmRzLikKIGJpbmRpcj0nJHtleGVjX3ByZWZpeH0vYmluJwogc2JpbmRpcj0nJHtleGVjX3ByZWZpeH0vc2JpbicKIGxpYmV4ZWNkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMnCi1kYXRhZGlyPScke3ByZWZpeH0vc2hhcmUnCitkYXRhcm9vdGRpcj0nJHtwcmVmaXh9L3NoYXJlJworZGF0YWRpcj0nJHtkYXRhcm9vdGRpcn0nCiBzeXNjb25mZGlyPScke3ByZWZpeH0vZXRjJwogc2hhcmVkc3RhdGVkaXI9JyR7cHJlZml4fS9jb20nCiBsb2NhbHN0YXRlZGlyPScke3ByZWZpeH0vdmFyJwotbGliZGlyPScke2V4ZWNfcHJlZml4fS9saWInCiBpbmNsdWRlZGlyPScke3ByZWZpeH0vaW5jbHVkZScKIG9sZGluY2x1ZGVkaXI9Jy91c3IvaW5jbHVkZScKLWluZm9kaXI9JyR7cHJlZml4fS9pbmZvJwotbWFuZGlyPScke3ByZWZpeH0vbWFuJworZG9jZGlyPScke2RhdGFyb290ZGlyfS9kb2MvJHtQQUNLQUdFX1RBUk5BTUV9JworaW5mb2Rpcj0nJHtkYXRhcm9vdGRpcn0vaW5mbycKK2h0bWxkaXI9JyR7ZG9jZGlyfScKK2R2aWRpcj0nJHtkb2NkaXJ9JworcGRmZGlyPScke2RvY2Rpcn0nCitwc2Rpcj0nJHtkb2NkaXJ9JworbGliZGlyPScke2V4ZWNfcHJlZml4fS9saWInCitsb2NhbGVkaXI9JyR7ZGF0YXJvb3RkaXJ9L2xvY2FsZScKK21hbmRpcj0nJHtkYXRhcm9vdGRpcn0vbWFuJwogCiBhY19wcmV2PQorYWNfZGFzaGRhc2g9CiBmb3IgYWNfb3B0aW9uCiBkbwogICAjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZHMgYW4gYXJndW1lbnQsIGFzc2lnbiBpdC4KICAgaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCi0gICAgZXZhbCAiJGFjX3ByZXY9XCRhY19vcHRpb24iCisgICAgZXZhbCAkYWNfcHJldj1cJGFjX29wdGlvbgogICAgIGFjX3ByZXY9CiAgICAgY29udGludWUKICAgZmkKIAotICBhY19vcHRhcmc9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4W149XSo9XCguKlwpJ2AKKyAgY2FzZSAkYWNfb3B0aW9uIGluCisgICo9PyopIGFjX29wdGFyZz1gZXhwciAiWCRhY19vcHRpb24iIDogJ1tePV0qPVwoLipcKSdgIDs7CisgICo9KSAgIGFjX29wdGFyZz0gOzsKKyAgKikgICAgYWNfb3B0YXJnPXllcyA7OworICBlc2FjCiAKICAgIyBBY2NlcHQgdGhlIGltcG9ydGFudCBDeWdudXMgY29uZmlndXJlIG9wdGlvbnMsIHNvIHdlIGNhbiBkaWFnbm9zZSB0eXBvcy4KIAotICBjYXNlICRhY19vcHRpb24gaW4KKyAgY2FzZSAkYWNfZGFzaGRhc2gkYWNfb3B0aW9uIGluCisgIC0tKQorICAgIGFjX2Rhc2hkYXNoPXllcyA7OwogCiAgIC1iaW5kaXIgfCAtLWJpbmRpciB8IC0tYmluZGkgfCAtLWJpbmQgfCAtLWJpbiB8IC0tYmkpCiAgICAgYWNfcHJldj1iaW5kaXIgOzsKQEAgLTM4OSwzMyArMTkyMyw1OSBAQAogICAtLWNvbmZpZy1jYWNoZSB8IC1DKQogICAgIGNhY2hlX2ZpbGU9Y29uZmlnLmNhY2hlIDs7CiAKLSAgLWRhdGFkaXIgfCAtLWRhdGFkaXIgfCAtLWRhdGFkaSB8IC0tZGF0YWQgfCAtLWRhdGEgfCAtLWRhdCB8IC0tZGEpCisgIC1kYXRhZGlyIHwgLS1kYXRhZGlyIHwgLS1kYXRhZGkgfCAtLWRhdGFkKQogICAgIGFjX3ByZXY9ZGF0YWRpciA7OwotICAtZGF0YWRpcj0qIHwgLS1kYXRhZGlyPSogfCAtLWRhdGFkaT0qIHwgLS1kYXRhZD0qIHwgLS1kYXRhPSogfCAtLWRhdD0qIFwKLSAgfCAtLWRhPSopCisgIC1kYXRhZGlyPSogfCAtLWRhdGFkaXI9KiB8IC0tZGF0YWRpPSogfCAtLWRhdGFkPSopCiAgICAgZGF0YWRpcj0kYWNfb3B0YXJnIDs7CiAKKyAgLWRhdGFyb290ZGlyIHwgLS1kYXRhcm9vdGRpciB8IC0tZGF0YXJvb3RkaSB8IC0tZGF0YXJvb3RkIHwgLS1kYXRhcm9vdCBcCisgIHwgLS1kYXRhcm9vIHwgLS1kYXRhcm8gfCAtLWRhdGFyKQorICAgIGFjX3ByZXY9ZGF0YXJvb3RkaXIgOzsKKyAgLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGk9KiB8IC0tZGF0YXJvb3RkPSogXAorICB8IC0tZGF0YXJvb3Q9KiB8IC0tZGF0YXJvbz0qIHwgLS1kYXRhcm89KiB8IC0tZGF0YXI9KikKKyAgICBkYXRhcm9vdGRpcj0kYWNfb3B0YXJnIDs7CisKICAgLWRpc2FibGUtKiB8IC0tZGlzYWJsZS0qKQotICAgIGFjX2ZlYXR1cmU9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSpkaXNhYmxlLVwoLipcKSdgCisgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmRpc2FibGUtXCguKlwpJ2AKICAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCi0gICAgZXhwciAieCRhY19mZWF0dXJlIiA6ICIuKlteLV8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfZmVhdHVyZSIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICBhY19mZWF0dXJlPWBlY2hvICRhY19mZWF0dXJlIHwgc2VkICdzLy0vXy9nJ2AKLSAgICBldmFsICJlbmFibGVfJGFjX2ZlYXR1cmU9bm8iIDs7CisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJlbmFibGVfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0tZGlzYWJsZS0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgIGVzYWMKKyAgICBldmFsIGVuYWJsZV8kYWNfdXNlcm9wdD1ubyA7OworCisgIC1kb2NkaXIgfCAtLWRvY2RpciB8IC0tZG9jZGkgfCAtLWRvYyB8IC0tZG8pCisgICAgYWNfcHJldj1kb2NkaXIgOzsKKyAgLWRvY2Rpcj0qIHwgLS1kb2NkaXI9KiB8IC0tZG9jZGk9KiB8IC0tZG9jPSogfCAtLWRvPSopCisgICAgZG9jZGlyPSRhY19vcHRhcmcgOzsKKworICAtZHZpZGlyIHwgLS1kdmlkaXIgfCAtLWR2aWRpIHwgLS1kdmlkIHwgLS1kdmkgfCAtLWR2KQorICAgIGFjX3ByZXY9ZHZpZGlyIDs7CisgIC1kdmlkaXI9KiB8IC0tZHZpZGlyPSogfCAtLWR2aWRpPSogfCAtLWR2aWQ9KiB8IC0tZHZpPSogfCAtLWR2PSopCisgICAgZHZpZGlyPSRhY19vcHRhcmcgOzsKIAogICAtZW5hYmxlLSogfCAtLWVuYWJsZS0qKQotICAgIGFjX2ZlYXR1cmU9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSplbmFibGUtXChbXj1dKlwpJ2AKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZW5hYmxlLVwoW149XSpcKSdgCiAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgotICAgIGV4cHIgIngkYWNfZmVhdHVyZSIgOiAiLipbXi1fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgotICAgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX2ZlYXR1cmUiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfZmVhdHVyZSB8IHNlZCAncy8tL18vZydgCi0gICAgY2FzZSAkYWNfb3B0aW9uIGluCi0gICAgICAqPSopIGFjX29wdGFyZz1gZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OwotICAgICAgKikgYWNfb3B0YXJnPXllcyA7OworICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisiZW5hYmxlXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLWVuYWJsZS0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OwogICAgIGVzYWMKLSAgICBldmFsICJlbmFibGVfJGFjX2ZlYXR1cmU9JyRhY19vcHRhcmcnIiA7OworICAgIGV2YWwgZW5hYmxlXyRhY191c2Vyb3B0PVwkYWNfb3B0YXJnIDs7CiAKICAgLWV4ZWMtcHJlZml4IHwgLS1leGVjX3ByZWZpeCB8IC0tZXhlYy1wcmVmaXggfCAtLWV4ZWMtcHJlZmkgXAogICB8IC0tZXhlYy1wcmVmIHwgLS1leGVjLXByZSB8IC0tZXhlYy1wciB8IC0tZXhlYy1wIHwgLS1leGVjLSBcCkBAIC00NDIsNiArMjAwMiwxMiBAQAogICAtaG9zdD0qIHwgLS1ob3N0PSogfCAtLWhvcz0qIHwgLS1obz0qKQogICAgIGhvc3RfYWxpYXM9JGFjX29wdGFyZyA7OwogCisgIC1odG1sZGlyIHwgLS1odG1sZGlyIHwgLS1odG1sZGkgfCAtLWh0bWxkIHwgLS1odG1sIHwgLS1odG0gfCAtLWh0KQorICAgIGFjX3ByZXY9aHRtbGRpciA7OworICAtaHRtbGRpcj0qIHwgLS1odG1sZGlyPSogfCAtLWh0bWxkaT0qIHwgLS1odG1sZD0qIHwgLS1odG1sPSogfCAtLWh0bT0qIFwKKyAgfCAtLWh0PSopCisgICAgaHRtbGRpcj0kYWNfb3B0YXJnIDs7CisKICAgLWluY2x1ZGVkaXIgfCAtLWluY2x1ZGVkaXIgfCAtLWluY2x1ZGVkaSB8IC0taW5jbHVkZWQgfCAtLWluY2x1ZGUgXAogICB8IC0taW5jbHVkIHwgLS1pbmNsdSB8IC0taW5jbCB8IC0taW5jKQogICAgIGFjX3ByZXY9aW5jbHVkZWRpciA7OwpAQCAtNDY2LDEzICsyMDMyLDE2IEBACiAgIHwgLS1saWJleGU9KiB8IC0tbGliZXg9KiB8IC0tbGliZT0qKQogICAgIGxpYmV4ZWNkaXI9JGFjX29wdGFyZyA7OwogCisgIC1sb2NhbGVkaXIgfCAtLWxvY2FsZWRpciB8IC0tbG9jYWxlZGkgfCAtLWxvY2FsZWQgfCAtLWxvY2FsZSkKKyAgICBhY19wcmV2PWxvY2FsZWRpciA7OworICAtbG9jYWxlZGlyPSogfCAtLWxvY2FsZWRpcj0qIHwgLS1sb2NhbGVkaT0qIHwgLS1sb2NhbGVkPSogfCAtLWxvY2FsZT0qKQorICAgIGxvY2FsZWRpcj0kYWNfb3B0YXJnIDs7CisKICAgLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaSB8IC0tbG9jYWxzdGF0ZWQgXAotICB8IC0tbG9jYWxzdGF0ZSB8IC0tbG9jYWxzdGF0IHwgLS1sb2NhbHN0YSB8IC0tbG9jYWxzdCBcCi0gIHwgLS1sb2NhbHMgfCAtLWxvY2FsIHwgLS1sb2NhIHwgLS1sb2MgfCAtLWxvKQorICB8IC0tbG9jYWxzdGF0ZSB8IC0tbG9jYWxzdGF0IHwgLS1sb2NhbHN0YSB8IC0tbG9jYWxzdCB8IC0tbG9jYWxzKQogICAgIGFjX3ByZXY9bG9jYWxzdGF0ZWRpciA7OwogICAtbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaT0qIHwgLS1sb2NhbHN0YXRlZD0qIFwKLSAgfCAtLWxvY2Fsc3RhdGU9KiB8IC0tbG9jYWxzdGF0PSogfCAtLWxvY2Fsc3RhPSogfCAtLWxvY2Fsc3Q9KiBcCi0gIHwgLS1sb2NhbHM9KiB8IC0tbG9jYWw9KiB8IC0tbG9jYT0qIHwgLS1sb2M9KiB8IC0tbG89KikKKyAgfCAtLWxvY2Fsc3RhdGU9KiB8IC0tbG9jYWxzdGF0PSogfCAtLWxvY2Fsc3RhPSogfCAtLWxvY2Fsc3Q9KiB8IC0tbG9jYWxzPSopCiAgICAgbG9jYWxzdGF0ZWRpcj0kYWNfb3B0YXJnIDs7CiAKICAgLW1hbmRpciB8IC0tbWFuZGlyIHwgLS1tYW5kaSB8IC0tbWFuZCB8IC0tbWFuIHwgLS1tYSB8IC0tbSkKQEAgLTUzNyw2ICsyMTA2LDE2IEBACiAgIHwgLS1wcm9nci10cmE9KiB8IC0tcHJvZ3JhbS10cj0qIHwgLS1wcm9ncmFtLXQ9KikKICAgICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSRhY19vcHRhcmcgOzsKIAorICAtcGRmZGlyIHwgLS1wZGZkaXIgfCAtLXBkZmRpIHwgLS1wZGZkIHwgLS1wZGYgfCAtLXBkKQorICAgIGFjX3ByZXY9cGRmZGlyIDs7CisgIC1wZGZkaXI9KiB8IC0tcGRmZGlyPSogfCAtLXBkZmRpPSogfCAtLXBkZmQ9KiB8IC0tcGRmPSogfCAtLXBkPSopCisgICAgcGRmZGlyPSRhY19vcHRhcmcgOzsKKworICAtcHNkaXIgfCAtLXBzZGlyIHwgLS1wc2RpIHwgLS1wc2QgfCAtLXBzKQorICAgIGFjX3ByZXY9cHNkaXIgOzsKKyAgLXBzZGlyPSogfCAtLXBzZGlyPSogfCAtLXBzZGk9KiB8IC0tcHNkPSogfCAtLXBzPSopCisgICAgcHNkaXI9JGFjX29wdGFyZyA7OworCiAgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCiAgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQogICAgIHNpbGVudD15ZXMgOzsKQEAgLTU4NywyNiArMjE2NiwzNiBAQAogICAgIGFjX2luaXRfdmVyc2lvbj06IDs7CiAKICAgLXdpdGgtKiB8IC0td2l0aC0qKQotICAgIGFjX3BhY2thZ2U9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRoLVwoW149XSpcKSdgCisgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGgtXChbXj1dKlwpJ2AKICAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCi0gICAgZXhwciAieCRhY19wYWNrYWdlIiA6ICIuKlteLV8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfcGFja2FnZSIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICBhY19wYWNrYWdlPWBlY2hvICRhY19wYWNrYWdlfCBzZWQgJ3MvLS9fL2cnYAotICAgIGNhc2UgJGFjX29wdGlvbiBpbgotICAgICAgKj0qKSBhY19vcHRhcmc9YGVjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsKLSAgICAgICopIGFjX29wdGFyZz15ZXMgOzsKKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfdXNlcm9wdCIKKyAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisgICAgICAqIgorIndpdGhfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0td2l0aC0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OwogICAgIGVzYWMKLSAgICBldmFsICJ3aXRoXyRhY19wYWNrYWdlPSckYWNfb3B0YXJnJyIgOzsKKyAgICBldmFsIHdpdGhfJGFjX3VzZXJvcHQ9XCRhY19vcHRhcmcgOzsKIAogICAtd2l0aG91dC0qIHwgLS13aXRob3V0LSopCi0gICAgYWNfcGFja2FnZT1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGhvdXQtXCguKlwpJ2AKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aG91dC1cKC4qXCknYAogICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KLSAgICBleHByICJ4JGFjX3BhY2thZ2UiIDogIi4qW14tXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY19wYWNrYWdlIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX3BhY2thZ2UgfCBzZWQgJ3MvLS9fL2cnYAotICAgIGV2YWwgIndpdGhfJGFjX3BhY2thZ2U9bm8iIDs7CisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHBhY2thZ2UgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJ3aXRoXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLXdpdGhvdXQtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKyAgICBlc2FjCisgICAgZXZhbCB3aXRoXyRhY191c2Vyb3B0PW5vIDs7CiAKICAgLS14KQogICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgteC4KQEAgLTYyNiwyNyArMjIxNSwyNiBAQAogICB8IC0teC1saWJyYXI9KiB8IC0teC1saWJyYT0qIHwgLS14LWxpYnI9KiB8IC0teC1saWI9KiB8IC0teC1saT0qIHwgLS14LWw9KikKICAgICB4X2xpYnJhcmllcz0kYWNfb3B0YXJnIDs7CiAKLSAgLSopIHsgZWNobyAiJGFzX21lOiBlcnJvcjogdW5yZWNvZ25pemVkIG9wdGlvbjogJGFjX29wdGlvbgotVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIC0qKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVkIG9wdGlvbjogXGAkYWNfb3B0aW9uJworVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKICAgICA7OwogCiAgICo9KikKICAgICBhY19lbnZ2YXI9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4XChbXj1dKlwpPSdgCiAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgotICAgIGV4cHIgIngkYWNfZW52dmFyIiA6ICIuKlteXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB2YXJpYWJsZSBuYW1lOiAkYWNfZW52dmFyIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGFjX29wdGFyZz1gZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAKLSAgICBldmFsICIkYWNfZW52dmFyPSckYWNfb3B0YXJnJyIKKyAgICBjYXNlICRhY19lbnZ2YXIgaW4gIygKKyAgICAgICcnIHwgWzAtOV0qIHwgKlshXyRhc19jcl9hbG51bV0qICkKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhcmlhYmxlIG5hbWU6IFxgJGFjX2VudnZhciciIDs7CisgICAgZXNhYworICAgIGV2YWwgJGFjX2VudnZhcj1cJGFjX29wdGFyZwogICAgIGV4cG9ydCAkYWNfZW52dmFyIDs7CiAKICAgKikKICAgICAjIEZJWE1FOiBzaG91bGQgYmUgcmVtb3ZlZCBpbiBhdXRvY29uZiAzLjAuCi0gICAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiB5b3Ugc2hvdWxkIHVzZSAtLWJ1aWxkLCAtLWhvc3QsIC0tdGFyZ2V0IiA+JjIKKyAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB5b3Ugc2hvdWxkIHVzZSAtLWJ1aWxkLCAtLWhvc3QsIC0tdGFyZ2V0IiA+JjIKICAgICBleHByICJ4JGFjX29wdGlvbiIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogaW52YWxpZCBob3N0IHR5cGU6ICRhY19vcHRpb24iID4mMgotICAgIDogJHtidWlsZF9hbGlhcz0kYWNfb3B0aW9ufSAke2hvc3RfYWxpYXM9JGFjX29wdGlvbn0gJHt0YXJnZXRfYWxpYXM9JGFjX29wdGlvbn0KKyAgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGludmFsaWQgaG9zdCB0eXBlOiAkYWNfb3B0aW9uIiA+JjIKKyAgICA6ICIke2J1aWxkX2FsaWFzPSRhY19vcHRpb259ICR7aG9zdF9hbGlhcz0kYWNfb3B0aW9ufSAke3RhcmdldF9hbGlhcz0kYWNfb3B0aW9ufSIKICAgICA7OwogCiAgIGVzYWMKQEAgLTY1NCwzMSArMjI0MiwzNiBAQAogCiBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KICAgYWNfb3B0aW9uPS0tYGVjaG8gJGFjX3ByZXYgfCBzZWQgJ3MvXy8tL2cnYAotICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IG1pc3NpbmcgYXJndW1lbnQgdG8gJGFjX29wdGlvbiIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgYXNfZm5fZXJyb3IgJD8gIm1pc3NpbmcgYXJndW1lbnQgdG8gJGFjX29wdGlvbiIKIGZpCiAKLSMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIHBhdGhzLgotZm9yIGFjX3ZhciBpbiBleGVjX3ByZWZpeCBwcmVmaXgKLWRvCi0gIGV2YWwgYWNfdmFsPSRgZWNobyAkYWNfdmFyYAotICBjYXNlICRhY192YWwgaW4KLSAgICBbXFwvJF0qIHwgPzpbXFwvXSogfCBOT05FIHwgJycgKSA7OwotICAgICopICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKK2lmIHRlc3QgLW4gIiRhY191bnJlY29nbml6ZWRfb3B0cyI7IHRoZW4KKyAgY2FzZSAkZW5hYmxlX29wdGlvbl9jaGVja2luZyBpbgorICAgIG5vKSA7OworICAgIGZhdGFsKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgOzsKKyAgICAqKSAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiYyIDs7CiAgIGVzYWMKLWRvbmUKK2ZpCiAKLSMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIHBhdGhzLgotZm9yIGFjX3ZhciBpbiBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFkaXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBcCi0JICAgICAgbG9jYWxzdGF0ZWRpciBsaWJkaXIgaW5jbHVkZWRpciBvbGRpbmNsdWRlZGlyIGluZm9kaXIgbWFuZGlyCisjIENoZWNrIGFsbCBkaXJlY3RvcnkgYXJndW1lbnRzIGZvciBjb25zaXN0ZW5jeS4KK2ZvciBhY192YXIgaW4JZXhlY19wcmVmaXggcHJlZml4IGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YXJvb3RkaXIgXAorCQlkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgbG9jYWxzdGF0ZWRpciBpbmNsdWRlZGlyIFwKKwkJb2xkaW5jbHVkZWRpciBkb2NkaXIgaW5mb2RpciBodG1sZGlyIGR2aWRpciBwZGZkaXIgcHNkaXIgXAorCQlsaWJkaXIgbG9jYWxlZGlyIG1hbmRpcgogZG8KLSAgZXZhbCBhY192YWw9JGBlY2hvICRhY192YXJgCisgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAjIFJlbW92ZSB0cmFpbGluZyBzbGFzaGVzLgogICBjYXNlICRhY192YWwgaW4KLSAgICBbXFwvJF0qIHwgPzpbXFwvXSogKSA7OwotICAgICopICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKyAgICAqLyApCisgICAgICBhY192YWw9YGV4cHIgIlgkYWNfdmFsIiA6ICdYXCguKlteL11cKScgXHwgIlgkYWNfdmFsIiA6ICdYXCguKlwpJ2AKKyAgICAgIGV2YWwgJGFjX3Zhcj1cJGFjX3ZhbDs7CiAgIGVzYWMKKyAgIyBCZSBzdXJlIHRvIGhhdmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWVzLgorICBjYXNlICRhY192YWwgaW4KKyAgICBbXFwvJF0qIHwgPzpbXFwvXSogKSAgY29udGludWU7OworICAgIE5PTkUgfCAnJyApIGNhc2UgJGFjX3ZhciBpbiAqcHJlZml4ICkgY29udGludWU7OyBlc2FjOzsKKyAgZXNhYworICBhc19mbl9lcnJvciAkPyAiZXhwZWN0ZWQgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgZm9yIC0tJGFjX3ZhcjogJGFjX3ZhbCIKIGRvbmUKIAogIyBUaGVyZSBtaWdodCBiZSBwZW9wbGUgd2hvIGRlcGVuZCBvbiB0aGUgb2xkIGJyb2tlbiBiZWhhdmlvcjogYCRob3N0JwpAQCAtNjkyLDggKzIyODUsNiBAQAogaWYgdGVzdCAieCRob3N0X2FsaWFzIiAhPSB4OyB0aGVuCiAgIGlmIHRlc3QgIngkYnVpbGRfYWxpYXMiID0geDsgdGhlbgogICAgIGNyb3NzX2NvbXBpbGluZz1tYXliZQotICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogSWYgeW91IHdhbnRlZCB0byBzZXQgdGhlIC0tYnVpbGQgdHlwZSwgZG9uJ3QgdXNlIC0taG9zdC4KLSAgICBJZiBhIGNyb3NzIGNvbXBpbGVyIGlzIGRldGVjdGVkIHRoZW4gY3Jvc3MgY29tcGlsZSBtb2RlIHdpbGwgYmUgdXNlZC4iID4mMgogICBlbGlmIHRlc3QgIngkYnVpbGRfYWxpYXMiICE9ICJ4JGhvc3RfYWxpYXMiOyB0aGVuCiAgICAgY3Jvc3NfY29tcGlsaW5nPXllcwogICBmaQpAQCAtNzA1LDgyICsyMjk2LDcyIEBACiB0ZXN0ICIkc2lsZW50IiA9IHllcyAmJiBleGVjIDY+L2Rldi9udWxsCiAKIAorYWNfcHdkPWBwd2RgICYmIHRlc3QgLW4gIiRhY19wd2QiICYmCithY19sc19kaT1gbHMgLWRpIC5gICYmCithY19wd2RfbHNfZGk9YGNkICIkYWNfcHdkIiAmJiBscyAtZGkgLmAgfHwKKyAgYXNfZm5fZXJyb3IgJD8gIndvcmtpbmcgZGlyZWN0b3J5IGNhbm5vdCBiZSBkZXRlcm1pbmVkIgordGVzdCAiWCRhY19sc19kaSIgPSAiWCRhY19wd2RfbHNfZGkiIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJwd2QgZG9lcyBub3QgcmVwb3J0IG5hbWUgb2Ygd29ya2luZyBkaXJlY3RvcnkiCisKKwogIyBGaW5kIHRoZSBzb3VyY2UgZmlsZXMsIGlmIGxvY2F0aW9uIHdhcyBub3Qgc3BlY2lmaWVkLgogaWYgdGVzdCAteiAiJHNyY2RpciI7IHRoZW4KICAgYWNfc3JjZGlyX2RlZmF1bHRlZD15ZXMKLSAgIyBUcnkgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgc2NyaXB0LCB0aGVuIGl0cyBwYXJlbnQuCi0gIGFjX2NvbmZkaXI9YChkaXJuYW1lICIkMCIpIDI+L2Rldi9udWxsIHx8Ci0kYXNfZXhwciBYIiQwIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAotCSBYIiQwIiA6ICdYXCgvL1wpW14vXScgXHwgXAotCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiQwIiA6ICdYXCgvXCknIFx8IFwKLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgiJDAiIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIHMvLiovLi87IHEnYAorICAjIFRyeSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBzY3JpcHQsIHRoZW4gdGhlIHBhcmVudCBkaXJlY3RvcnkuCisgIGFjX2NvbmZkaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfbXlzZWxmIiB8fAorJGFzX2V4cHIgWCIkYXNfbXlzZWxmIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19teXNlbGYiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX215c2VsZiIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfbXlzZWxmIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJGFzX215c2VsZiIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCiAgIHNyY2Rpcj0kYWNfY29uZmRpcgotICBpZiB0ZXN0ICEgLXIgJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGU7IHRoZW4KKyAgaWYgdGVzdCAhIC1yICIkc3JjZGlyLyRhY191bmlxdWVfZmlsZSI7IHRoZW4KICAgICBzcmNkaXI9Li4KICAgZmkKIGVsc2UKICAgYWNfc3JjZGlyX2RlZmF1bHRlZD1ubwogZmkKLWlmIHRlc3QgISAtciAkc3JjZGlyLyRhY191bmlxdWVfZmlsZTsgdGhlbgotICBpZiB0ZXN0ICIkYWNfc3JjZGlyX2RlZmF1bHRlZCIgPSB5ZXM7IHRoZW4KLSAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIHNvdXJjZXMgKCRhY191bmlxdWVfZmlsZSkgaW4gJGFjX2NvbmZkaXIgb3IgLi4iID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gIGVsc2UKLSAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIHNvdXJjZXMgKCRhY191bmlxdWVfZmlsZSkgaW4gJHNyY2RpciIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgZmkKK2lmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuCisgIHRlc3QgIiRhY19zcmNkaXJfZGVmYXVsdGVkIiA9IHllcyAmJiBzcmNkaXI9IiRhY19jb25mZGlyIG9yIC4uIgorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGZpbmQgc291cmNlcyAoJGFjX3VuaXF1ZV9maWxlKSBpbiAkc3JjZGlyIgogZmkKLShjZCAkc3JjZGlyICYmIHRlc3QgLXIgLi8kYWNfdW5pcXVlX2ZpbGUpIDI+L2Rldi9udWxsIHx8Ci0gIHsgZWNobyAiJGFzX21lOiBlcnJvcjogc291cmNlcyBhcmUgaW4gJHNyY2RpciwgYnV0IFxgY2QgJHNyY2RpcicgZG9lcyBub3Qgd29yayIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLXNyY2Rpcj1gZWNobyAiJHNyY2RpciIgfCBzZWQgJ3MlXChbXlxcL11cKVtcXC9dKiQlXDElJ2AKLWFjX2Vudl9idWlsZF9hbGlhc19zZXQ9JHtidWlsZF9hbGlhcytzZXR9Ci1hY19lbnZfYnVpbGRfYWxpYXNfdmFsdWU9JGJ1aWxkX2FsaWFzCi1hY19jdl9lbnZfYnVpbGRfYWxpYXNfc2V0PSR7YnVpbGRfYWxpYXMrc2V0fQotYWNfY3ZfZW52X2J1aWxkX2FsaWFzX3ZhbHVlPSRidWlsZF9hbGlhcwotYWNfZW52X2hvc3RfYWxpYXNfc2V0PSR7aG9zdF9hbGlhcytzZXR9Ci1hY19lbnZfaG9zdF9hbGlhc192YWx1ZT0kaG9zdF9hbGlhcwotYWNfY3ZfZW52X2hvc3RfYWxpYXNfc2V0PSR7aG9zdF9hbGlhcytzZXR9Ci1hY19jdl9lbnZfaG9zdF9hbGlhc192YWx1ZT0kaG9zdF9hbGlhcwotYWNfZW52X3RhcmdldF9hbGlhc19zZXQ9JHt0YXJnZXRfYWxpYXMrc2V0fQotYWNfZW52X3RhcmdldF9hbGlhc192YWx1ZT0kdGFyZ2V0X2FsaWFzCi1hY19jdl9lbnZfdGFyZ2V0X2FsaWFzX3NldD0ke3RhcmdldF9hbGlhcytzZXR9Ci1hY19jdl9lbnZfdGFyZ2V0X2FsaWFzX3ZhbHVlPSR0YXJnZXRfYWxpYXMKLWFjX2Vudl9DQ19zZXQ9JHtDQytzZXR9Ci1hY19lbnZfQ0NfdmFsdWU9JENDCi1hY19jdl9lbnZfQ0Nfc2V0PSR7Q0Mrc2V0fQotYWNfY3ZfZW52X0NDX3ZhbHVlPSRDQwotYWNfZW52X0NGTEFHU19zZXQ9JHtDRkxBR1Mrc2V0fQotYWNfZW52X0NGTEFHU192YWx1ZT0kQ0ZMQUdTCi1hY19jdl9lbnZfQ0ZMQUdTX3NldD0ke0NGTEFHUytzZXR9Ci1hY19jdl9lbnZfQ0ZMQUdTX3ZhbHVlPSRDRkxBR1MKLWFjX2Vudl9MREZMQUdTX3NldD0ke0xERkxBR1Mrc2V0fQotYWNfZW52X0xERkxBR1NfdmFsdWU9JExERkxBR1MKLWFjX2N2X2Vudl9MREZMQUdTX3NldD0ke0xERkxBR1Mrc2V0fQotYWNfY3ZfZW52X0xERkxBR1NfdmFsdWU9JExERkxBR1MKLWFjX2Vudl9DUFBGTEFHU19zZXQ9JHtDUFBGTEFHUytzZXR9Ci1hY19lbnZfQ1BQRkxBR1NfdmFsdWU9JENQUEZMQUdTCi1hY19jdl9lbnZfQ1BQRkxBR1Nfc2V0PSR7Q1BQRkxBR1Mrc2V0fQotYWNfY3ZfZW52X0NQUEZMQUdTX3ZhbHVlPSRDUFBGTEFHUwotYWNfZW52X0NQUF9zZXQ9JHtDUFArc2V0fQotYWNfZW52X0NQUF92YWx1ZT0kQ1BQCi1hY19jdl9lbnZfQ1BQX3NldD0ke0NQUCtzZXR9Ci1hY19jdl9lbnZfQ1BQX3ZhbHVlPSRDUFAKLWFjX2Vudl9DWFhfc2V0PSR7Q1hYK3NldH0KLWFjX2Vudl9DWFhfdmFsdWU9JENYWAotYWNfY3ZfZW52X0NYWF9zZXQ9JHtDWFgrc2V0fQotYWNfY3ZfZW52X0NYWF92YWx1ZT0kQ1hYCi1hY19lbnZfQ1hYRkxBR1Nfc2V0PSR7Q1hYRkxBR1Mrc2V0fQotYWNfZW52X0NYWEZMQUdTX3ZhbHVlPSRDWFhGTEFHUwotYWNfY3ZfZW52X0NYWEZMQUdTX3NldD0ke0NYWEZMQUdTK3NldH0KLWFjX2N2X2Vudl9DWFhGTEFHU192YWx1ZT0kQ1hYRkxBR1MKK2FjX21zZz0ic291cmNlcyBhcmUgaW4gJHNyY2RpciwgYnV0IFxgY2QgJHNyY2RpcicgZG9lcyBub3Qgd29yayIKK2FjX2Fic19jb25mZGlyPWAoCisJY2QgIiRzcmNkaXIiICYmIHRlc3QgLXIgIi4vJGFjX3VuaXF1ZV9maWxlIiB8fCBhc19mbl9lcnJvciAkPyAiJGFjX21zZyIKKwlwd2QpYAorIyBXaGVuIGJ1aWxkaW5nIGluIHBsYWNlLCBzZXQgc3JjZGlyPS4KK2lmIHRlc3QgIiRhY19hYnNfY29uZmRpciIgPSAiJGFjX3B3ZCI7IHRoZW4KKyAgc3JjZGlyPS4KK2ZpCisjIFJlbW92ZSB1bm5lY2Vzc2FyeSB0cmFpbGluZyBzbGFzaGVzIGZyb20gc3JjZGlyLgorIyBEb3VibGUgc2xhc2hlcyBpbiBmaWxlIG5hbWVzIGluIG9iamVjdCBmaWxlIGRlYnVnZ2luZyBpbmZvCisjIG1lc3MgdXAgTS14IGdkYiBpbiBFbWFjcy4KK2Nhc2UgJHNyY2RpciBpbgorKi8pIHNyY2Rpcj1gZXhwciAiWCRzcmNkaXIiIDogJ1hcKC4qW14vXVwpJyBcfCAiWCRzcmNkaXIiIDogJ1hcKC4qXCknYDs7Citlc2FjCitmb3IgYWNfdmFyIGluICRhY19wcmVjaW91c192YXJzOyBkbworICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fc2V0PVwkeyR7YWNfdmFyfStzZXR9CisgIGV2YWwgYWNfZW52XyR7YWNfdmFyfV92YWx1ZT1cJCR7YWNfdmFyfQorICBldmFsIGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0PVwkeyR7YWNfdmFyfStzZXR9CisgIGV2YWwgYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZT1cJCR7YWNfdmFyfQorZG9uZQogCiAjCiAjIFJlcG9ydCB0aGUgLS1oZWxwIG1lc3NhZ2UuCkBAIC03ODksNyArMjM3MCw3IEBACiAgICMgT21pdCBzb21lIGludGVybmFsIG9yIG9ic29sZXRlIG9wdGlvbnMgdG8gbWFrZSB0aGUgbGlzdCBsZXNzIGltcG9zaW5nLgogICAjIFRoaXMgbWVzc2FnZSBpcyB0b28gbG9uZyB0byBiZSBhIHN0cmluZyBpbiB0aGUgQS9VWCAzLjEgc2guCiAgIGNhdCA8PF9BQ0VPRgotXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgR05VIEJpc29uIDIuMyB0byBhZGFwdCB0byBtYW55IGtpbmRzIG9mIHN5c3RlbXMuCitcYGNvbmZpZ3VyZScgY29uZmlndXJlcyBHTlUgQmlzb24gMi43IHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KIAogVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtWQVI9VkFMVUVdLi4uCiAKQEAgLTgwMywyMCArMjM4NCwxNyBAQAogICAgICAgLS1oZWxwPXNob3J0ICAgICAgICBkaXNwbGF5IG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhpcyBwYWNrYWdlCiAgICAgICAtLWhlbHA9cmVjdXJzaXZlICAgIGRpc3BsYXkgdGhlIHNob3J0IGhlbHAgb2YgYWxsIHRoZSBpbmNsdWRlZCBwYWNrYWdlcwogICAtViwgLS12ZXJzaW9uICAgICAgICAgICBkaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKLSAgLXEsIC0tcXVpZXQsIC0tc2lsZW50ICAgZG8gbm90IHByaW50IFxgY2hlY2tpbmcuLi4nIG1lc3NhZ2VzCisgIC1xLCAtLXF1aWV0LCAtLXNpbGVudCAgIGRvIG5vdCBwcmludCBcYGNoZWNraW5nIC4uLicgbWVzc2FnZXMKICAgICAgIC0tY2FjaGUtZmlsZT1GSUxFICAgY2FjaGUgdGVzdCByZXN1bHRzIGluIEZJTEUgW2Rpc2FibGVkXQogICAtQywgLS1jb25maWctY2FjaGUgICAgICBhbGlhcyBmb3IgXGAtLWNhY2hlLWZpbGU9Y29uZmlnLmNhY2hlJwogICAtbiwgLS1uby1jcmVhdGUgICAgICAgICBkbyBub3QgY3JlYXRlIG91dHB1dCBmaWxlcwogICAgICAgLS1zcmNkaXI9RElSICAgICAgICBmaW5kIHRoZSBzb3VyY2VzIGluIERJUiBbY29uZmlndXJlIGRpciBvciBcYC4uJ10KIAotX0FDRU9GCi0KLSAgY2F0IDw8X0FDRU9GCiBJbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6CiAgIC0tcHJlZml4PVBSRUZJWCAgICAgICAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzIGluIFBSRUZJWAotCQkJICBbJGFjX2RlZmF1bHRfcHJlZml4XQorICAgICAgICAgICAgICAgICAgICAgICAgICBbJGFjX2RlZmF1bHRfcHJlZml4XQogICAtLWV4ZWMtcHJlZml4PUVQUkVGSVggICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgZmlsZXMgaW4gRVBSRUZJWAotCQkJICBbUFJFRklYXQorICAgICAgICAgICAgICAgICAgICAgICAgICBbUFJFRklYXQogCiBCeSBkZWZhdWx0LCBcYG1ha2UgaW5zdGFsbCcgd2lsbCBpbnN0YWxsIGFsbCB0aGUgZmlsZXMgaW4KIFxgJGFjX2RlZmF1bHRfcHJlZml4L2JpbicsIFxgJGFjX2RlZmF1bHRfcHJlZml4L2xpYicgZXRjLiAgWW91IGNhbiBzcGVjaWZ5CkBAIC04MjYsMTggKzI0MDQsMjUgQEAKIEZvciBiZXR0ZXIgY29udHJvbCwgdXNlIHRoZSBvcHRpb25zIGJlbG93LgogCiBGaW5lIHR1bmluZyBvZiB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzOgotICAtLWJpbmRpcj1ESVIgICAgICAgICAgIHVzZXIgZXhlY3V0YWJsZXMgW0VQUkVGSVgvYmluXQotICAtLXNiaW5kaXI9RElSICAgICAgICAgIHN5c3RlbSBhZG1pbiBleGVjdXRhYmxlcyBbRVBSRUZJWC9zYmluXQotICAtLWxpYmV4ZWNkaXI9RElSICAgICAgIHByb2dyYW0gZXhlY3V0YWJsZXMgW0VQUkVGSVgvbGliZXhlY10KLSAgLS1kYXRhZGlyPURJUiAgICAgICAgICByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW1BSRUZJWC9zaGFyZV0KLSAgLS1zeXNjb25mZGlyPURJUiAgICAgICByZWFkLW9ubHkgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL2V0Y10KLSAgLS1zaGFyZWRzdGF0ZWRpcj1ESVIgICBtb2RpZmlhYmxlIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtQUkVGSVgvY29tXQotICAtLWxvY2Fsc3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL3Zhcl0KLSAgLS1saWJkaXI9RElSICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgW0VQUkVGSVgvbGliXQotICAtLWluY2x1ZGVkaXI9RElSICAgICAgIEMgaGVhZGVyIGZpbGVzIFtQUkVGSVgvaW5jbHVkZV0KLSAgLS1vbGRpbmNsdWRlZGlyPURJUiAgICBDIGhlYWRlciBmaWxlcyBmb3Igbm9uLWdjYyBbL3Vzci9pbmNsdWRlXQotICAtLWluZm9kaXI9RElSICAgICAgICAgIGluZm8gZG9jdW1lbnRhdGlvbiBbUFJFRklYL2luZm9dCi0gIC0tbWFuZGlyPURJUiAgICAgICAgICAgbWFuIGRvY3VtZW50YXRpb24gW1BSRUZJWC9tYW5dCisgIC0tYmluZGlyPURJUiAgICAgICAgICAgIHVzZXIgZXhlY3V0YWJsZXMgW0VQUkVGSVgvYmluXQorICAtLXNiaW5kaXI9RElSICAgICAgICAgICBzeXN0ZW0gYWRtaW4gZXhlY3V0YWJsZXMgW0VQUkVGSVgvc2Jpbl0KKyAgLS1saWJleGVjZGlyPURJUiAgICAgICAgcHJvZ3JhbSBleGVjdXRhYmxlcyBbRVBSRUZJWC9saWJleGVjXQorICAtLXN5c2NvbmZkaXI9RElSICAgICAgICByZWFkLW9ubHkgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL2V0Y10KKyAgLS1zaGFyZWRzdGF0ZWRpcj1ESVIgICAgbW9kaWZpYWJsZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbUFJFRklYL2NvbV0KKyAgLS1sb2NhbHN0YXRlZGlyPURJUiAgICAgbW9kaWZpYWJsZSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvdmFyXQorICAtLWxpYmRpcj1ESVIgICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgW0VQUkVGSVgvbGliXQorICAtLWluY2x1ZGVkaXI9RElSICAgICAgICBDIGhlYWRlciBmaWxlcyBbUFJFRklYL2luY2x1ZGVdCisgIC0tb2xkaW5jbHVkZWRpcj1ESVIgICAgIEMgaGVhZGVyIGZpbGVzIGZvciBub24tZ2NjIFsvdXNyL2luY2x1ZGVdCisgIC0tZGF0YXJvb3RkaXI9RElSICAgICAgIHJlYWQtb25seSBhcmNoLi1pbmRlcGVuZGVudCBkYXRhIHJvb3QgW1BSRUZJWC9zaGFyZV0KKyAgLS1kYXRhZGlyPURJUiAgICAgICAgICAgcmVhZC1vbmx5IGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtEQVRBUk9PVERJUl0KKyAgLS1pbmZvZGlyPURJUiAgICAgICAgICAgaW5mbyBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9pbmZvXQorICAtLWxvY2FsZWRpcj1ESVIgICAgICAgICBsb2NhbGUtZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSL2xvY2FsZV0KKyAgLS1tYW5kaXI9RElSICAgICAgICAgICAgbWFuIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL21hbl0KKyAgLS1kb2NkaXI9RElSICAgICAgICAgICAgZG9jdW1lbnRhdGlvbiByb290IFtEQVRBUk9PVERJUi9kb2MvYmlzb25dCisgIC0taHRtbGRpcj1ESVIgICAgICAgICAgIGh0bWwgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorICAtLWR2aWRpcj1ESVIgICAgICAgICAgICBkdmkgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorICAtLXBkZmRpcj1ESVIgICAgICAgICAgICBwZGYgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorICAtLXBzZGlyPURJUiAgICAgICAgICAgICBwcyBkb2N1bWVudGF0aW9uIFtET0NESVJdCiBfQUNFT0YKIAogICBjYXQgPDxcX0FDRU9GCkBAIC04NTUsMjYgKzI0NDAsMzggQEAKIAogaWYgdGVzdCAtbiAiJGFjX2luaXRfaGVscCI7IHRoZW4KICAgY2FzZSAkYWNfaW5pdF9oZWxwIGluCi0gICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBHTlUgQmlzb24gMi4zOiI7OworICAgICBzaG9ydCB8IHJlY3Vyc2l2ZSApIGVjaG8gIkNvbmZpZ3VyYXRpb24gb2YgR05VIEJpc29uIDIuNzoiOzsKICAgIGVzYWMKICAgY2F0IDw8XF9BQ0VPRgogCiBPcHRpb25hbCBGZWF0dXJlczoKKyAgLS1kaXNhYmxlLW9wdGlvbi1jaGVja2luZyAgaWdub3JlIHVucmVjb2duaXplZCAtLWVuYWJsZS8tLXdpdGggb3B0aW9ucwogICAtLWRpc2FibGUtRkVBVFVSRSAgICAgICBkbyBub3QgaW5jbHVkZSBGRUFUVVJFIChzYW1lIGFzIC0tZW5hYmxlLUZFQVRVUkU9bm8pCiAgIC0tZW5hYmxlLUZFQVRVUkVbPUFSR10gIGluY2x1ZGUgRkVBVFVSRSBbQVJHPXllc10KLSAgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgIHNwZWVkcyB1cCBvbmUtdGltZSBidWlsZAotICAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICAgZG8gbm90IHJlamVjdCBzbG93IGRlcGVuZGVuY3kgZXh0cmFjdG9ycworICAtLWVuYWJsZS1zaWxlbnQtcnVsZXMgICBsZXNzIHZlcmJvc2UgYnVpbGQgb3V0cHV0ICh1bmRvOiAibWFrZSBWPTEiKQorICAtLWRpc2FibGUtc2lsZW50LXJ1bGVzICB2ZXJib3NlIGJ1aWxkIG91dHB1dCAodW5kbzogIm1ha2UgVj0wIikKKyAgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZworICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBub3QgcmVqZWN0IHNsb3cgZGVwZW5kZW5jeSBleHRyYWN0b3JzCisgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWVkcyB1cCBvbmUtdGltZSBidWlsZAorICAtLWRpc2FibGUtbGFyZ2VmaWxlICAgICBvbWl0IHN1cHBvcnQgZm9yIGxhcmdlIGZpbGVzCisgIC0tZW5hYmxlLXRocmVhZHM9e3Bvc2l4fHNvbGFyaXN8cHRofHdpbmRvd3N9CisgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgbXVsdGl0aHJlYWRpbmcgQVBJCisgIC0tZGlzYWJsZS10aHJlYWRzICAgICAgIGJ1aWxkIHdpdGhvdXQgbXVsdGl0aHJlYWQgc2FmZXR5CiAgIC0tZW5hYmxlLWdjYy13YXJuaW5ncyAgIHR1cm4gb24gbG90cyBvZiBHQ0Mgd2FybmluZ3MgKG5vdCByZWNvbW1lbmRlZCkKICAgLS1kaXNhYmxlLXlhY2MgICAgICAgICAgZG8gbm90IGJ1aWxkIGEgeWFjYyBjb21tYW5kIG9yIGFuIC1seSBsaWJyYXJ5Ci0gIC0tZGlzYWJsZS1ubHMgICAgICAgICAgIGRvIG5vdCB1c2UgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyAgLS1kaXNhYmxlLWFzc2VydCAgICAgICAgdHVybiBvZmYgYXNzZXJ0aW9ucwogICAtLWRpc2FibGUtcnBhdGggICAgICAgICBkbyBub3QgaGFyZGNvZGUgcnVudGltZSBsaWJyYXJ5IHBhdGhzCisgIC0tZGlzYWJsZS1ubHMgICAgICAgICAgIGRvIG5vdCB1c2UgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKIAogT3B0aW9uYWwgUGFja2FnZXM6CiAgIC0td2l0aC1QQUNLQUdFWz1BUkddICAgIHVzZSBQQUNLQUdFIFtBUkc9eWVzXQogICAtLXdpdGhvdXQtUEFDS0FHRSAgICAgICBkbyBub3QgdXNlIFBBQ0tBR0UgKHNhbWUgYXMgLS13aXRoLVBBQ0tBR0U9bm8pCisgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKyAgLS13aXRoLWxpYnB0aC1wcmVmaXhbPURJUl0gIHNlYXJjaCBmb3IgbGlicHRoIGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCisgIC0td2l0aG91dC1saWJwdGgtcHJlZml4ICAgICBkb24ndCBzZWFyY2ggZm9yIGxpYnB0aCBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXIKICAgLS13aXRoLWRtYWxsb2MgICAgICAgICAgdXNlIGRtYWxsb2MsIGFzIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuZG1hbGxvYy5jb20vZG1hbGxvYy50YXIuZ3oKLSAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIGRlZmF1bHQ9bm8KICAgLS13aXRoLWxpYmljb252LXByZWZpeFs9RElSXSAgc2VhcmNoIGZvciBsaWJpY29udiBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgogICAtLXdpdGhvdXQtbGliaWNvbnYtcHJlZml4ICAgICBkb24ndCBzZWFyY2ggZm9yIGxpYmljb252IGluIGluY2x1ZGVkaXIgYW5kIGxpYmRpcgogICAtLXdpdGgtbGliaW50bC1wcmVmaXhbPURJUl0gIHNlYXJjaCBmb3IgbGliaW50bCBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgpAQCAtODg1LDEzMSArMjQ4Miw4ODkgQEAKICAgQ0ZMQUdTICAgICAgQyBjb21waWxlciBmbGFncwogICBMREZMQUdTICAgICBsaW5rZXIgZmxhZ3MsIGUuZy4gLUw8bGliIGRpcj4gaWYgeW91IGhhdmUgbGlicmFyaWVzIGluIGEKICAgICAgICAgICAgICAgbm9uc3RhbmRhcmQgZGlyZWN0b3J5IDxsaWIgZGlyPgotICBDUFBGTEFHUyAgICBDL0MrKyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmIHlvdSBoYXZlCi0gICAgICAgICAgICAgIGhlYWRlcnMgaW4gYSBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGluY2x1ZGUgZGlyPgotICBDUFAgICAgICAgICBDIHByZXByb2Nlc3NvcgorICBMSUJTICAgICAgICBsaWJyYXJpZXMgdG8gcGFzcyB0byB0aGUgbGlua2VyLCBlLmcuIC1sPGxpYnJhcnk+CisgIENQUEZMQUdTICAgIChPYmplY3RpdmUpIEMvQysrIHByZXByb2Nlc3NvciBmbGFncywgZS5nLiAtSTxpbmNsdWRlIGRpcj4gaWYKKyAgICAgICAgICAgICAgeW91IGhhdmUgaGVhZGVycyBpbiBhIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8aW5jbHVkZSBkaXI+CiAgIENYWCAgICAgICAgIEMrKyBjb21waWxlciBjb21tYW5kCiAgIENYWEZMQUdTICAgIEMrKyBjb21waWxlciBmbGFncworICBDUFAgICAgICAgICBDIHByZXByb2Nlc3NvcgorICBZQUNDICAgICAgICBUaGUgYFlldCBBbm90aGVyIENvbXBpbGVyIENvbXBpbGVyJyBpbXBsZW1lbnRhdGlvbiB0byB1c2UuCisgICAgICAgICAgICAgIERlZmF1bHRzIHRvIHRoZSBmaXJzdCBwcm9ncmFtIGZvdW5kIG91dCBvZjogYGJpc29uIC15JywgYGJ5YWNjJywKKyAgICAgICAgICAgICAgYHlhY2MnLgorICBZRkxBR1MgICAgICBUaGUgbGlzdCBvZiBhcmd1bWVudHMgdGhhdCB3aWxsIGJlIHBhc3NlZCBieSBkZWZhdWx0IHRvICRZQUNDLgorICAgICAgICAgICAgICBUaGlzIHNjcmlwdCB3aWxsIGRlZmF1bHQgWUZMQUdTIHRvIHRoZSBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgYQorICAgICAgICAgICAgICBkZWZhdWx0IHZhbHVlIG9mIGAtZCcgZ2l2ZW4gYnkgc29tZSBtYWtlIGFwcGxpY2F0aW9ucy4KKyAgTTQgICAgICAgICAgTG9jYXRpb24gb2YgR05VIE00IDEuNC42IG9yIGxhdGVyLiBEZWZhdWx0cyB0byB0aGUgZmlyc3QgcHJvZ3JhbQorICAgICAgICAgICAgICBvZiAnbTQnLCAnZ200Jywgb3IgJ2dudW00JyBvbiBQQVRIIHRoYXQgbWVldHMgQXV0b2NvbmYgbmVlZHMuCiAKIFVzZSB0aGVzZSB2YXJpYWJsZXMgdG8gb3ZlcnJpZGUgdGhlIGNob2ljZXMgbWFkZSBieSBgY29uZmlndXJlJyBvciB0byBoZWxwCiBpdCB0byBmaW5kIGxpYnJhcmllcyBhbmQgcHJvZ3JhbXMgd2l0aCBub25zdGFuZGFyZCBuYW1lcy9sb2NhdGlvbnMuCiAKIFJlcG9ydCBidWdzIHRvIDxidWctYmlzb25AZ251Lm9yZz4uCitHTlUgQmlzb24gaG9tZSBwYWdlOiA8aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2Jpc29uLz4uCitHZW5lcmFsIGhlbHAgdXNpbmcgR05VIHNvZnR3YXJlOiA8aHR0cDovL3d3dy5nbnUub3JnL2dldGhlbHAvPi4KIF9BQ0VPRgorYWNfc3RhdHVzPSQ/CiBmaQogCiBpZiB0ZXN0ICIkYWNfaW5pdF9oZWxwIiA9ICJyZWN1cnNpdmUiOyB0aGVuCiAgICMgSWYgdGhlcmUgYXJlIHN1YmRpcnMsIHJlcG9ydCB0aGVpciBzcGVjaWZpYyAtLWhlbHAuCi0gIGFjX3BvcGRpcj1gcHdkYAogICBmb3IgYWNfZGlyIGluIDogJGFjX3N1YmRpcnNfYWxsOyBkbyB0ZXN0ICJ4JGFjX2RpciIgPSB4OiAmJiBjb250aW51ZQotICAgIHRlc3QgLWQgJGFjX2RpciB8fCBjb250aW51ZQorICAgIHRlc3QgLWQgIiRhY19kaXIiIHx8CisgICAgICB7IGNkICIkc3JjZGlyIiAmJiBhY19wd2Q9YHB3ZGAgJiYgc3JjZGlyPS4gJiYgdGVzdCAtZCAiJGFjX2RpciI7IH0gfHwKKyAgICAgIGNvbnRpbnVlCiAgICAgYWNfYnVpbGRkaXI9LgogCi1pZiB0ZXN0ICIkYWNfZGlyIiAhPSAuOyB0aGVuCi0gIGFjX2Rpcl9zdWZmaXg9L2BlY2hvICIkYWNfZGlyIiB8IHNlZCAncyxeXC5bXFwvXSwsJ2AKLSAgIyBBICIuLi8iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KLSAgYWNfdG9wX2J1aWxkZGlyPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3MsL1teXFwvXSosLi4vLGcnYAotZWxzZQotICBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXI9Ci1maQorY2FzZSAiJGFjX2RpciIgaW4KKy4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKikKKyAgYWNfZGlyX3N1ZmZpeD0vYCRhc19lY2hvICIkYWNfZGlyIiB8IHNlZCAnc3xeXC5bXFwvXXx8J2AKKyAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorICBhY190b3BfYnVpbGRkaXJfc3ViPWAkYXNfZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzfC9bXlxcL10qfC8uLnxnO3N8L3x8J2AKKyAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgorICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisgICopICBhY190b3BfYnVpbGRfcHJlZml4PSRhY190b3BfYnVpbGRkaXJfc3ViLyA7OworICBlc2FjIDs7Citlc2FjCithY19hYnNfdG9wX2J1aWxkZGlyPSRhY19wd2QKK2FjX2Fic19idWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKKyMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6CithY190b3BfYnVpbGRkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgKIAogY2FzZSAkc3JjZGlyIGluCi0gIC4pICAjIE5vIC0tc3JjZGlyIG9wdGlvbi4gIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KKyAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgogICAgIGFjX3NyY2Rpcj0uCi0gICAgaWYgdGVzdCAteiAiJGFjX3RvcF9idWlsZGRpciI7IHRoZW4KLSAgICAgICBhY190b3Bfc3JjZGlyPS4KLSAgICBlbHNlCi0gICAgICAgYWNfdG9wX3NyY2Rpcj1gZWNobyAkYWNfdG9wX2J1aWxkZGlyIHwgc2VkICdzLC8kLCwnYAotICAgIGZpIDs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgcGF0aC4KKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZCA7OworICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuCiAgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKLSAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKLSAgKikgIyBSZWxhdGl2ZSBwYXRoLgotICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciRhY19kaXJfc3VmZml4Ci0gICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciA7OworICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKyAgKikgIyBSZWxhdGl2ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZC8kc3JjZGlyIDs7CiBlc2FjCithY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3NyY2RpciRhY19kaXJfc3VmZml4CiAKLSMgRG8gbm90IHVzZSBgY2QgZm9vICYmIHB3ZGAgdG8gY29tcHV0ZSBhYnNvbHV0ZSBwYXRocywgYmVjYXVzZQotIyB0aGUgZGlyZWN0b3JpZXMgbWF5IG5vdCBleGlzdC4KLWNhc2UgYHB3ZGAgaW4KLS4pIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OwotKikKLSAgY2FzZSAiJGFjX2RpciIgaW4KLSAgLikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKLSAgKikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgLyIkYWNfZGlyIjs7Ci0gIGVzYWM7OwotZXNhYwotY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCi0uKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OwotKikKLSAgY2FzZSAke2FjX3RvcF9idWlsZGRpcn0uIGluCi0gIC4pIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpcjs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKLSAgKikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyLyR7YWNfdG9wX2J1aWxkZGlyfS47OwotICBlc2FjOzsKLWVzYWMKLWNhc2UgJGFjX2Fic19idWlsZGRpciBpbgotLikgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKLSopCi0gIGNhc2UgJGFjX3NyY2RpciBpbgotICAuKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OwotICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7Ci0gICopIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfc3JjZGlyOzsKLSAgZXNhYzs7Ci1lc2FjCi1jYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KLS4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKLSopCi0gIGNhc2UgJGFjX3RvcF9zcmNkaXIgaW4KLSAgLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OwotICAqKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY190b3Bfc3JjZGlyOzsKLSAgZXNhYzs7Ci1lc2FjCi0KLSAgICBjZCAkYWNfZGlyCi0gICAgIyBDaGVjayBmb3IgZ3Vlc3RlZCBjb25maWd1cmU7IG90aGVyd2lzZSBnZXQgQ3lnbnVzIHN0eWxlIGNvbmZpZ3VyZS4KLSAgICBpZiB0ZXN0IC1mICRhY19zcmNkaXIvY29uZmlndXJlLmdudTsgdGhlbgotICAgICAgZWNobwotICAgICAgJFNIRUxMICRhY19zcmNkaXIvY29uZmlndXJlLmdudSAgLS1oZWxwPXJlY3Vyc2l2ZQotICAgIGVsaWYgdGVzdCAtZiAkYWNfc3JjZGlyL2NvbmZpZ3VyZTsgdGhlbgotICAgICAgZWNobwotICAgICAgJFNIRUxMICRhY19zcmNkaXIvY29uZmlndXJlICAtLWhlbHA9cmVjdXJzaXZlCi0gICAgZWxpZiB0ZXN0IC1mICRhY19zcmNkaXIvY29uZmlndXJlLmFjIHx8Ci0JICAgdGVzdCAtZiAkYWNfc3JjZGlyL2NvbmZpZ3VyZS5pbjsgdGhlbgotICAgICAgZWNobwotICAgICAgJGFjX2NvbmZpZ3VyZSAtLWhlbHAKKyAgICBjZCAiJGFjX2RpciIgfHwgeyBhY19zdGF0dXM9JD87IGNvbnRpbnVlOyB9CisgICAgIyBDaGVjayBmb3IgZ3Vlc3RlZCBjb25maWd1cmUuCisgICAgaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUuZ251IjsgdGhlbgorICAgICAgZWNobyAmJgorICAgICAgJFNIRUxMICIkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUiIC0taGVscD1yZWN1cnNpdmUKKyAgICBlbGlmIHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlIjsgdGhlbgorICAgICAgZWNobyAmJgorICAgICAgJFNIRUxMICIkYWNfc3JjZGlyL2NvbmZpZ3VyZSIgLS1oZWxwPXJlY3Vyc2l2ZQogICAgIGVsc2UKLSAgICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogbm8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBpbiAkYWNfZGlyIiA+JjIKLSAgICBmaQotICAgIGNkICIkYWNfcG9wZGlyIgorICAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogbm8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBpbiAkYWNfZGlyIiA+JjIKKyAgICBmaSB8fCBhY19zdGF0dXM9JD8KKyAgICBjZCAiJGFjX3B3ZCIgfHwgeyBhY19zdGF0dXM9JD87IGJyZWFrOyB9CiAgIGRvbmUKIGZpCiAKLXRlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgMAordGVzdCAtbiAiJGFjX2luaXRfaGVscCIgJiYgZXhpdCAkYWNfc3RhdHVzCiBpZiAkYWNfaW5pdF92ZXJzaW9uOyB0aGVuCiAgIGNhdCA8PFxfQUNFT0YKLUdOVSBCaXNvbiBjb25maWd1cmUgMi4zCi1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTkKK0dOVSBCaXNvbiBjb25maWd1cmUgMi43CitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkKIAotQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KIF9BQ0VPRgotICBleGl0IDAKKyAgZXhpdAogZmkKLWV4ZWMgNT5jb25maWcubG9nCi1jYXQgPiY1IDw8X0FDRU9GCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQXV0b2NvbmYgaW5pdGlhbGl6YXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBhY19mbl9jX3RyeV9jb21waWxlIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gY29tcGlsZSBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jX3RyeV9jb21waWxlICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorICBpZiB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX3JldHZhbD0xCitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9jb21waWxlCisKKyMgYWNfZm5fY3h4X3RyeV9jb21waWxlIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBjb21waWxlIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2N4eF90cnlfY29tcGlsZSAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX3JldHZhbD0xCitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jeHhfdHJ5X2NvbXBpbGUKKworIyBhY19mbl9jX3RyeV9jcHAgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIHByZXByb2Nlc3MgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfY3BwICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSA+IGNvbmZ0ZXN0LmkgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICAgYWNfcmV0dmFsPTEKK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X2NwcAorCisjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgTElORU5PIEhFQURFUiBWQVIgSU5DTFVERVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIEhFQURFUiBleGlzdHMsIGdpdmluZyBhIHdhcm5pbmcgaWYgaXQgY2Fubm90IGJlIGNvbXBpbGVkIHVzaW5nCisjIHRoZSBpbmNsdWRlIGZpbGVzIGluIElOQ0xVREVTIGFuZCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIKKyMgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CitlbHNlCisgICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyAkMiB1c2FiaWxpdHkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgJDIgdXNhYmlsaXR5Li4uICIgPiY2OyB9CitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAorI2luY2x1ZGUgPCQyPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKK2Vsc2UKKyAgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CiskYXNfZWNobyAiJGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CisKKyMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyAkMiBwcmVzZW5jZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyAkMiBwcmVzZW5jZS4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPCQyPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCitlbHNlCisgIGFjX2hlYWRlcl9wcmVwcm9jPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CiskYXNfZWNobyAiJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKworIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CitjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICMoKAorICB5ZXM6bm86ICkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisgICAgOzsKKyAgbm86eWVzOiogKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKCAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1iaXNvbkBnbnUub3JnICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIyIKKyAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorICAgIDs7Citlc2FjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGV2YWwgIiQzPVwkYWNfaGVhZGVyX2NvbXBpbGVyIgorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsCisKKyMgYWNfZm5fY190cnlfcnVuIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBsaW5rIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4gQXNzdW1lcworIyB0aGF0IGV4ZWN1dGFibGVzICpjYW4qIGJlIHJ1bi4KK2FjX2ZuX2NfdHJ5X3J1biAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIGlmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CisgICAgICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgICAgICBhY19yZXR2YWw9JGFjX3N0YXR1cworZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0gY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbworICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9ydW4KKworIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlIExJTkVOTyBIRUFERVIgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBIRUFERVIgZXhpc3RzIGFuZCBjYW4gYmUgY29tcGlsZWQgdXNpbmcgdGhlIGluY2x1ZGUgZmlsZXMgaW4KKyMgSU5DTFVERVMsIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseS4KK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAorI2luY2x1ZGUgPCQyPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQzPXllcyIKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZQorCisjIGFjX2ZuX2NfdHJ5X2xpbmsgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBsaW5rIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2NfdHJ5X2xpbmsgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICBpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7CisJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisJIHRlc3QgLXggY29uZnRlc3QkYWNfZXhlZXh0CisgICAgICAgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfcmV0dmFsPTEKK2ZpCisgICMgRGVsZXRlIHRoZSBJUEEvSVBPIChJbnRlciBQcm9jZWR1cmFsIEFuYWx5c2lzL09wdGltaXphdGlvbikgaW5mb3JtYXRpb24KKyAgIyBjcmVhdGVkIGJ5IHRoZSBQR0kgY29tcGlsZXIgKGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28pLCBhcyBpdCB3b3VsZAorICAjIGludGVyZmVyZSB3aXRoIHRoZSBuZXh0IGxpbmsgY29tbWFuZDsgYWxzbyBkZWxldGUgYSBkaXJlY3RvcnkgdGhhdCBpcworICAjIGxlZnQgYmVoaW5kIGJ5IEFwcGxlJ3MgY29tcGlsZXIuICBXZSBkbyB0aGlzIGJlZm9yZSBleGVjdXRpbmcgdGhlIGFjdGlvbnMuCisgIHJtIC1yZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY190cnlfbGluaworCisjIGFjX2ZuX2N4eF90cnlfbGluayBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gbGluayBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jeHhfdHJ5X2xpbmsgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICBpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKwkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKwkgdGVzdCAteCBjb25mdGVzdCRhY19leGVleHQKKyAgICAgICB9OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgIyBEZWxldGUgdGhlIElQQS9JUE8gKEludGVyIFByb2NlZHVyYWwgQW5hbHlzaXMvT3B0aW1pemF0aW9uKSBpbmZvcm1hdGlvbgorICAjIGNyZWF0ZWQgYnkgdGhlIFBHSSBjb21waWxlciAoY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyksIGFzIGl0IHdvdWxkCisgICMgaW50ZXJmZXJlIHdpdGggdGhlIG5leHQgbGluayBjb21tYW5kOyBhbHNvIGRlbGV0ZSBhIGRpcmVjdG9yeSB0aGF0IGlzCisgICMgbGVmdCBiZWhpbmQgYnkgQXBwbGUncyBjb21waWxlci4gIFdlIGRvIHRoaXMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgYWN0aW9ucy4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0gY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbworICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jeHhfdHJ5X2xpbmsKKworIyBhY19mbl9jX2NoZWNrX3R5cGUgTElORU5PIFRZUEUgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBUWVBFIGV4aXN0cyBhZnRlciBoYXZpbmcgaW5jbHVkZWQgSU5DTFVERVMsIHNldHRpbmcgY2FjaGUKKyMgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5LgorYWNfZm5fY19jaGVja190eXBlICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK2lmIChzaXplb2YgKCQyKSkKKwkgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworaWYgKHNpemVvZiAoKCQyKSkpCisJICAgIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgZXZhbCAiJDM9eWVzIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKworfSAjIGFjX2ZuX2NfY2hlY2tfdHlwZQorCisjIGFjX2ZuX2NfY2hlY2tfZnVuYyBMSU5FTk8gRlVOQyBWQVIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIEZVTkMgZXhpc3RzLCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkKK2FjX2ZuX2NfY2hlY2tfZnVuYyAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy8qIERlZmluZSAkMiB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICQyLgorICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisjZGVmaW5lICQyIGlubm9jdW91c18kMgorCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkMiAoKTsgYmVsb3cuCisgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisKKyN1bmRlZiAkMgorCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyICQyICgpOworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCBfX3N0dWJfJDIgfHwgZGVmaW5lZCBfX3N0dWJfX18kMgorY2hva2UgbWUKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3JldHVybiAkMiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkMz15ZXMiCitlbHNlCisgIGV2YWwgIiQzPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19jaGVja19mdW5jCisKKyMgYWNfZm5fY19jb21wdXRlX2ludCBMSU5FTk8gRVhQUiBWQVIgSU5DTFVERVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJpZXMgdG8gZmluZCB0aGUgY29tcGlsZS10aW1lIHZhbHVlIG9mIEVYUFIgaW4gYSBwcm9ncmFtIHRoYXQgaW5jbHVkZXMKKyMgSU5DTFVERVMsIHNldHRpbmcgVkFSIGFjY29yZGluZ2x5LiBSZXR1cm5zIHdoZXRoZXIgdGhlIHZhbHVlIGNvdWxkIGJlCisjIGNvbXB1dGVkCithY19mbl9jX2NvbXB1dGVfaW50ICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA+PSAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDA7CityZXR1cm4gdGVzdF9hcnJheSBbMF07CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19sbz0wIGFjX21pZD0wCisgIHdoaWxlIDo7IGRvCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDA7CityZXR1cm4gdGVzdF9hcnJheSBbMF07CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oaT0kYWNfbWlkOyBicmVhaworZWxzZQorICBhc19mbl9hcml0aCAkYWNfbWlkICsgMSAmJiBhY19sbz0kYXNfdmFsCisJCQlpZiB0ZXN0ICRhY19sbyAtbGUgJGFjX21pZDsgdGhlbgorCQkJICBhY19sbz0gYWNfaGk9CisJCQkgIGJyZWFrCisJCQlmaQorCQkJYXNfZm5fYXJpdGggMiAnKicgJGFjX21pZCArIDEgJiYgYWNfbWlkPSRhc192YWwKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpIDwgMCldOwordGVzdF9hcnJheSBbMF0gPSAwOworcmV0dXJuIHRlc3RfYXJyYXkgWzBdOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfaGk9LTEgYWNfbWlkPS0xCisgIHdoaWxlIDo7IGRvCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA+PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDA7CityZXR1cm4gdGVzdF9hcnJheSBbMF07CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19sbz0kYWNfbWlkOyBicmVhaworZWxzZQorICBhc19mbl9hcml0aCAnKCcgJGFjX21pZCAnKScgLSAxICYmIGFjX2hpPSRhc192YWwKKwkJCWlmIHRlc3QgJGFjX21pZCAtbGUgJGFjX2hpOyB0aGVuCisJCQkgIGFjX2xvPSBhY19oaT0KKwkJCSAgYnJlYWsKKwkJCWZpCisJCQlhc19mbl9hcml0aCAyICcqJyAkYWNfbWlkICYmIGFjX21pZD0kYXNfdmFsCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgYWNfbG89IGFjX2hpPQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIyBCaW5hcnkgc2VhcmNoIGJldHdlZW4gbG8gYW5kIGhpIGJvdW5kcy4KK3doaWxlIHRlc3QgIngkYWNfbG8iICE9ICJ4JGFjX2hpIjsgZG8KKyAgYXNfZm5fYXJpdGggJygnICRhY19oaSAtICRhY19sbyAnKScgLyAyICsgJGFjX2xvICYmIGFjX21pZD0kYXNfdmFsCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkMikgPD0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwOworcmV0dXJuIHRlc3RfYXJyYXkgWzBdOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfaGk9JGFjX21pZAorZWxzZQorICBhc19mbl9hcml0aCAnKCcgJGFjX21pZCAnKScgKyAxICYmIGFjX2xvPSRhc192YWwKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2RvbmUKK2Nhc2UgJGFjX2xvIGluICMoKAorPyopIGV2YWwgIiQzPVwkYWNfbG8iOyBhY19yZXR2YWw9MCA7OworJycpIGFjX3JldHZhbD0xIDs7Citlc2FjCisgIGVsc2UKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAorc3RhdGljIGxvbmcgaW50IGxvbmd2YWwgKCkgeyByZXR1cm4gJDI7IH0KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGludCB1bG9uZ3ZhbCAoKSB7IHJldHVybiAkMjsgfQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CitpbnQKK21haW4gKCkKK3sKKworICBGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC52YWwiLCAidyIpOworICBpZiAoISBmKQorICAgIHJldHVybiAxOworICBpZiAoKCQyKSA8IDApCisgICAgeworICAgICAgbG9uZyBpbnQgaSA9IGxvbmd2YWwgKCk7CisgICAgICBpZiAoaSAhPSAoJDIpKQorCXJldHVybiAxOworICAgICAgZnByaW50ZiAoZiwgIiVsZCIsIGkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgaW50IGkgPSB1bG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgkMikpCisJcmV0dXJuIDE7CisgICAgICBmcHJpbnRmIChmLCAiJWx1IiwgaSk7CisgICAgfQorICAvKiBEbyBub3Qgb3V0cHV0IGEgdHJhaWxpbmcgbmV3bGluZSwgYXMgdGhpcyBjYXVzZXMgXHJcbiBjb25mdXNpb24KKyAgICAgb24gc29tZSBwbGF0Zm9ybXMuICAqLworICByZXR1cm4gZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDA7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGVjaG8gPj5jb25mdGVzdC52YWw7IHJlYWQgJDMgPGNvbmZ0ZXN0LnZhbDsgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgYWNfcmV0dmFsPTEKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb25mdGVzdC52YWwKKworICBmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX2NvbXB1dGVfaW50CisKKyMgYWNfZm5fY19jaGVja19kZWNsIExJTkVOTyBTWU1CT0wgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIFNZTUJPTCBpcyBkZWNsYXJlZCBpbiBJTkNMVURFUywgc2V0dGluZyBjYWNoZSB2YXJpYWJsZSBWQVIKKyMgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX2RlY2wgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBhc19kZWNsX25hbWU9YGVjaG8gJDJ8c2VkICdzLyAqKC4qLy8nYAorICBhc19kZWNsX3VzZT1gZWNobyAkMnxzZWQgLWUgJ3MvKC8oKC8nIC1lICdzLykvKSAwJi8nIC1lICdzLywvKSAwJiAoL2cnYAorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJGFzX2RlY2xfbmFtZSBpcyBkZWNsYXJlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRhc19kZWNsX25hbWUgaXMgZGVjbGFyZWQuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CisjaWZuZGVmICRhc19kZWNsX25hbWUKKyNpZmRlZiBfX2NwbHVzcGx1cworICAodm9pZCkgJGFzX2RlY2xfdXNlOworI2Vsc2UKKyAgKHZvaWQpICRhc19kZWNsX25hbWU7CisjZW5kaWYKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJDM9eWVzIgorZWxzZQorICBldmFsICIkMz1ubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX2RlY2wKKworIyBhY19mbl9jX2NoZWNrX21lbWJlciBMSU5FTk8gQUdHUiBNRU1CRVIgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJpZXMgdG8gZmluZCBpZiB0aGUgZmllbGQgTUVNQkVSIGV4aXN0cyBpbiB0eXBlIEFHR1IsIGFmdGVyIGluY2x1ZGluZworIyBJTkNMVURFUywgc2V0dGluZyBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX21lbWJlciAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyLiQzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4kMy4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskNCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ1CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyAkMiBhY19hZ2dyOworaWYgKGFjX2FnZ3IuJDMpCityZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkND15ZXMiCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ1CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyAkMiBhY19hZ2dyOworaWYgKHNpemVvZiBhY19hZ2dyLiQzKQorcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJDQ9eWVzIgorZWxzZQorICBldmFsICIkND1ubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQ0CisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX21lbWJlcgorY2F0ID5jb25maWcubG9nIDw8X0FDRU9GCiBUaGlzIGZpbGUgY29udGFpbnMgYW55IG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IGNvbXBpbGVycyB3aGlsZQogcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2VzIGEgbWlzdGFrZS4KIAotSXQgd2FzIGNyZWF0ZWQgYnkgR05VIEJpc29uICRhc19tZSAyLjMsIHdoaWNoIHdhcwotZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCitJdCB3YXMgY3JlYXRlZCBieSBHTlUgQmlzb24gJGFzX21lIDIuNywgd2hpY2ggd2FzCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKIAogICAkICQwICRACiAKIF9BQ0VPRgorZXhlYyA1Pj5jb25maWcubG9nCiB7CiBjYXQgPDxfQVNVTkFNRQogIyMgLS0tLS0tLS0tICMjCkBAIC0xMDI4LDcgKzMzODMsNyBAQAogL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbCAgICAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAogL3Vzci9iaW4vYXJjaCAtayAgICAgICA9IGAoL3Vzci9iaW4vYXJjaCAtaykgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAogL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyA9IGAoL3Vzci9jb252ZXgvZ2V0c3lzaW5mbykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAotaG9zdGluZm8gICAgICAgICAgICAgICA9IGAoaG9zdGluZm8pIDI+L2Rldi9udWxsICAgICAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vaG9zdGluZm8gICAgICA9IGAoL3Vzci9iaW4vaG9zdGluZm8pIDI+L2Rldi9udWxsICAgICAgfHwgZWNobyB1bmtub3duYAogL2Jpbi9tYWNoaW5lICAgICAgICAgICA9IGAoL2Jpbi9tYWNoaW5lKSAyPi9kZXYvbnVsbCAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAogL3Vzci9iaW4vb3NsZXZlbCAgICAgICA9IGAoL3Vzci9iaW4vb3NsZXZlbCkgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAogL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGwgICAgICAgICAgfHwgZWNobyB1bmtub3duYApAQCAtMTA0MCw4ICszMzk1LDkgQEAKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZWNobyAiUEFUSDogJGFzX2RpciIKLWRvbmUKKyAgICAkYXNfZWNobyAiUEFUSDogJGFzX2RpciIKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUwogCiB9ID4mNQogCkBAIC0xMDYzLDcgKzM0MTksNiBAQAogYWNfY29uZmlndXJlX2FyZ3M9CiBhY19jb25maWd1cmVfYXJnczA9CiBhY19jb25maWd1cmVfYXJnczE9Ci1hY19zZXA9CiBhY19tdXN0X2tlZXBfbmV4dD1mYWxzZQogZm9yIGFjX3Bhc3MgaW4gMSAyCiBkbwpAQCAtMTA3NCwxMyArMzQyOSwxMyBAQAogICAgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCiAgICAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpCiAgICAgICBjb250aW51ZSA7OwotICAgICoiICIqfCoiCSIqfCpbXFtcXVx+XCNcJFxeXCZcKlwoXClce1x9XFxcfFw7XDxcPlw/XCJcJ10qKQotICAgICAgYWNfYXJnPWBlY2hvICIkYWNfYXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgICpcJyopCisgICAgICBhY19hcmc9YCRhc19lY2hvICIkYWNfYXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OwogICAgIGVzYWMKICAgICBjYXNlICRhY19wYXNzIGluCi0gICAgMSkgYWNfY29uZmlndXJlX2FyZ3MwPSIkYWNfY29uZmlndXJlX2FyZ3MwICckYWNfYXJnJyIgOzsKKyAgICAxKSBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MwICIgJyRhY19hcmcnIiA7OwogICAgIDIpCi0gICAgICBhY19jb25maWd1cmVfYXJnczE9IiRhY19jb25maWd1cmVfYXJnczEgJyRhY19hcmcnIgorICAgICAgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzMSAiICckYWNfYXJnJyIKICAgICAgIGlmIHRlc3QgJGFjX211c3Rfa2VlcF9uZXh0ID0gdHJ1ZTsgdGhlbgogCWFjX211c3Rfa2VlcF9uZXh0PWZhbHNlICMgR290IHZhbHVlLCBiYWNrIHRvIG5vcm1hbC4KICAgICAgIGVsc2UKQEAgLTEwOTYsMTA0ICszNDUxLDExNSBAQAogCSAgLSogKSBhY19tdXN0X2tlZXBfbmV4dD10cnVlIDs7CiAJZXNhYwogICAgICAgZmkKLSAgICAgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MkYWNfc2VwJyRhY19hcmcnIgotICAgICAgIyBHZXQgcmlkIG9mIHRoZSBsZWFkaW5nIHNwYWNlLgotICAgICAgYWNfc2VwPSIgIgorICAgICAgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzICIgJyRhY19hcmcnIgogICAgICAgOzsKICAgICBlc2FjCiAgIGRvbmUKIGRvbmUKLSRhc191bnNldCBhY19jb25maWd1cmVfYXJnczAgfHwgdGVzdCAiJHthY19jb25maWd1cmVfYXJnczArc2V0fSIgIT0gc2V0IHx8IHsgYWNfY29uZmlndXJlX2FyZ3MwPTsgZXhwb3J0IGFjX2NvbmZpZ3VyZV9hcmdzMDsgfQotJGFzX3Vuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMSB8fCB0ZXN0ICIke2FjX2NvbmZpZ3VyZV9hcmdzMStzZXR9IiAhPSBzZXQgfHwgeyBhY19jb25maWd1cmVfYXJnczE9OyBleHBvcnQgYWNfY29uZmlndXJlX2FyZ3MxOyB9Cit7IGFjX2NvbmZpZ3VyZV9hcmdzMD07IHVuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMDt9Cit7IGFjX2NvbmZpZ3VyZV9hcmdzMT07IHVuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMTt9CiAKICMgV2hlbiBpbnRlcnJ1cHRlZCBvciBleGl0J2QsIGNsZWFudXAgdGVtcG9yYXJ5IGZpbGVzLCBhbmQgY29tcGxldGUKICMgY29uZmlnLmxvZy4gIFdlIHJlbW92ZSBjb21tZW50cyBiZWNhdXNlIGFueXdheSB0aGUgcXVvdGVzIGluIHRoZXJlCiAjIHdvdWxkIGNhdXNlIHByb2JsZW1zIG9yIGxvb2sgdWdseS4KLSMgV0FSTklORzogQmUgc3VyZSBub3QgdG8gdXNlIHNpbmdsZSBxdW90ZXMgaW4gdGhlcmUsIGFzIHNvbWUgc2hlbGxzLAotIyBzdWNoIGFzIG91ciBEVSA1LjAgZnJpZW5kLCB3aWxsIHRoZW4gYGNsb3NlJyB0aGUgdHJhcC4KKyMgV0FSTklORzogVXNlICdcJycgdG8gcmVwcmVzZW50IGFuIGFwb3N0cm9waGUgd2l0aGluIHRoZSB0cmFwLgorIyBXQVJOSU5HOiBEbyBub3Qgc3RhcnQgdGhlIHRyYXAgY29kZSB3aXRoIGEgbmV3bGluZSwgZHVlIHRvIGEgRnJlZUJTRCA0LjAgYnVnLgogdHJhcCAnZXhpdF9zdGF0dXM9JD8KICAgIyBTYXZlIGludG8gY29uZmlnLmxvZyBzb21lIGluZm9ybWF0aW9uIHRoYXQgbWlnaHQgaGVscCBpbiBkZWJ1Z2dpbmcuCiAgIHsKICAgICBlY2hvCiAKLSAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tICMjCisgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKICMjIENhY2hlIHZhcmlhYmxlcy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAorIyMgLS0tLS0tLS0tLS0tLS0tLSAjIyIKICAgICBlY2hvCiAgICAgIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKLXsKKygKKyAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAnXCcncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdcJydgOyBkbworICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAorICAgICoke2FzX25sfSopCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgICpfY3ZfKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiYyO30gOzsKKyAgICAgIGVzYWMKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAorICAgICAgQkFTSF9BUkdWIHwgQkFTSF9TT1VSQ0UpIGV2YWwgJGFjX3Zhcj0gOzsgIygKKyAgICAgICopIHsgZXZhbCAkYWNfdmFyPTsgdW5zZXQgJGFjX3Zhcjt9IDs7CisgICAgICBlc2FjIDs7CisgICAgZXNhYworICBkb25lCiAgIChzZXQpIDI+JjEgfAotICAgIGNhc2UgYChhY19zcGFjZT0nIiciJyAnIiciJzsgc2V0IHwgZ3JlcCBhY19zcGFjZSkgMj4mMWAgaW4KLSAgICAqYWNfc3BhY2U9XCAqKQorICAgIGNhc2UgJGFzX25sYChhY19zcGFjZT0nXCcnICdcJyc7IHNldCkgMj4mMWAgaW4gIygKKyAgICAqJHthc19ubH1hY19zcGFjZT1cICopCiAgICAgICBzZWQgLW4gXAotCSJzLyciJyInLyciJyInXFxcXCciJyInJyInIicvZzsKLQkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9JyInIidcXDInIiciJy9wIgotICAgICAgOzsKKwkicy8nXCcnLydcJydcXFxcJ1wnJydcJycvZzsKKwkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1wnJ1xcMidcJycvcCIKKyAgICAgIDs7ICMoCiAgICAgKikKLSAgICAgIHNlZCAtbiBcCi0JInMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9XFwyL3AiCisgICAgICBzZWQgLW4gIi9eW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qPS9wIgogICAgICAgOzsKLSAgICBlc2FjOwotfQorICAgIGVzYWMgfAorICAgIHNvcnQKKykKICAgICBlY2hvCiAKLSAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIwogIyMgT3V0cHV0IHZhcmlhYmxlcy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjIgogICAgIGVjaG8KICAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF92YXJzCiAgICAgZG8KLSAgICAgIGV2YWwgYWNfdmFsPSRgZWNobyAkYWNfdmFyYAotICAgICAgZWNobyAiJGFjX3Zhcj0nIiciJyRhY192YWwnIiciJyIKKyAgICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgICAgY2FzZSAkYWNfdmFsIGluCisgICAgICAqXCdcJycqKSBhY192YWw9YCRhc19lY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CisgICAgICBlc2FjCisgICAgICAkYXNfZWNobyAiJGFjX3Zhcj0nXCcnJGFjX3ZhbCdcJyciCiAgICAgZG9uZSB8IHNvcnQKICAgICBlY2hvCiAKICAgICBpZiB0ZXN0IC1uICIkYWNfc3Vic3RfZmlsZXMiOyB0aGVuCi0gICAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tICMjCi0jIyBPdXRwdXQgZmlsZXMuICMjCi0jIyAtLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKKyAgICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBGaWxlIHN1YnN0aXR1dGlvbnMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjIgogICAgICAgZWNobwogICAgICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfZmlsZXMKICAgICAgIGRvCi0JZXZhbCBhY192YWw9JGBlY2hvICRhY192YXJgCi0JZWNobyAiJGFjX3Zhcj0nIiciJyRhY192YWwnIiciJyIKKwlldmFsIGFjX3ZhbD1cJCRhY192YXIKKwljYXNlICRhY192YWwgaW4KKwkqXCdcJycqKSBhY192YWw9YCRhc19lY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CisJZXNhYworCSRhc19lY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKICAgICAgIGRvbmUgfCBzb3J0CiAgICAgICBlY2hvCiAgICAgZmkKIAogICAgIGlmIHRlc3QgLXMgY29uZmRlZnMuaDsgdGhlbgotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0gIyMKKyAgICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLSAjIwogIyMgY29uZmRlZnMuaC4gIyMKLSMjIC0tLS0tLS0tLS0tICMjCi1fQVNCT1gKKyMjIC0tLS0tLS0tLS0tICMjIgogICAgICAgZWNobwotICAgICAgc2VkICIvXiQvZCIgY29uZmRlZnMuaCB8IHNvcnQKKyAgICAgIGNhdCBjb25mZGVmcy5oCiAgICAgICBlY2hvCiAgICAgZmkKICAgICB0ZXN0ICIkYWNfc2lnbmFsIiAhPSAwICYmCi0gICAgICBlY2hvICIkYXNfbWU6IGNhdWdodCBzaWduYWwgJGFjX3NpZ25hbCIKLSAgICBlY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIgorICAgICAgJGFzX2VjaG8gIiRhc19tZTogY2F1Z2h0IHNpZ25hbCAkYWNfc2lnbmFsIgorICAgICRhc19lY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIgogICB9ID4mNQotICBybSAtZiBjb3JlICouY29yZSAmJgotICBybSAtcmYgY29uZnRlc3QqIGNvbmZkZWZzKiBjb25mJCQqICRhY19jbGVhbl9maWxlcyAmJgorICBybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogJiYKKyAgICBybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMqIGNvbmYkJCogJGFjX2NsZWFuX2ZpbGVzICYmCiAgICAgZXhpdCAkZXhpdF9zdGF0dXMKLSAgICAgJyAwCisnIDAKIGZvciBhY19zaWduYWwgaW4gMSAyIDEzIDE1OyBkbwotICB0cmFwICdhY19zaWduYWw9JyRhY19zaWduYWwnOyB7IChleGl0IDEpOyBleGl0IDE7IH0nICRhY19zaWduYWwKKyAgdHJhcCAnYWNfc2lnbmFsPSckYWNfc2lnbmFsJzsgYXNfZm5fZXhpdCAxJyAkYWNfc2lnbmFsCiBkb25lCiBhY19zaWduYWw9MAogCiAjIGNvbmZkZWZzLmggYXZvaWRzIE9TIGNvbW1hbmQgbGluZSBsZW5ndGggbGltaXRzIHRoYXQgREVGUyBjYW4gZXhjZWVkLgotcm0gLXJmIGNvbmZ0ZXN0KiBjb25mZGVmcy5oCi0jIEFJWCBjcHAgbG9zZXMgb24gYW4gZW1wdHkgZmlsZSwgc28gbWFrZSBzdXJlIGl0IGNvbnRhaW5zIGF0IGxlYXN0IGEgbmV3bGluZS4KLWVjaG8gPmNvbmZkZWZzLmgKK3JtIC1mIC1yIGNvbmZ0ZXN0KiBjb25mZGVmcy5oCisKKyRhc19lY2hvICIvKiBjb25mZGVmcy5oICovIiA+IGNvbmZkZWZzLmgKIAogIyBQcmVkZWZpbmVkIHByZXByb2Nlc3NvciB2YXJpYWJsZXMuCiAKQEAgLTEyMDEsMTEyICszNTY3LDE4OSBAQAogI2RlZmluZSBQQUNLQUdFX05BTUUgIiRQQUNLQUdFX05BTUUiCiBfQUNFT0YKIAotCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiJFBBQ0tBR0VfVEFSTkFNRSIKIF9BQ0VPRgogCi0KIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIkUEFDS0FHRV9WRVJTSU9OIgogX0FDRU9GCiAKLQogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBQQUNLQUdFX1NUUklORyAiJFBBQ0tBR0VfU1RSSU5HIgogX0FDRU9GCiAKLQogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiJFBBQ0tBR0VfQlVHUkVQT1JUIgogX0FDRU9GCiAKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9VUkwgIiRQQUNLQUdFX1VSTCIKK19BQ0VPRgorCiAKICMgTGV0IHRoZSBzaXRlIGZpbGUgc2VsZWN0IGFuIGFsdGVybmF0ZSBjYWNoZSBmaWxlIGlmIGl0IHdhbnRzIHRvLgotIyBQcmVmZXIgZXhwbGljaXRseSBzZWxlY3RlZCBmaWxlIHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgb25lcy4KLWlmIHRlc3QgLXogIiRDT05GSUdfU0lURSI7IHRoZW4KLSAgaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCi0gICAgQ09ORklHX1NJVEU9IiRwcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUgJHByZWZpeC9ldGMvY29uZmlnLnNpdGUiCi0gIGVsc2UKLSAgICBDT05GSUdfU0lURT0iJGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlICRhY19kZWZhdWx0X3ByZWZpeC9ldGMvY29uZmlnLnNpdGUiCi0gIGZpCisjIFByZWZlciBhbiBleHBsaWNpdGx5IHNlbGVjdGVkIGZpbGUgdG8gYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbmVzLgorYWNfc2l0ZV9maWxlMT1OT05FCithY19zaXRlX2ZpbGUyPU5PTkUKK2lmIHRlc3QgLW4gIiRDT05GSUdfU0lURSI7IHRoZW4KKyAgIyBXZSBkbyBub3Qgd2FudCBhIFBBVEggc2VhcmNoIGZvciBjb25maWcuc2l0ZS4KKyAgY2FzZSAkQ09ORklHX1NJVEUgaW4gIygoCisgICAgLSopICBhY19zaXRlX2ZpbGUxPS4vJENPTkZJR19TSVRFOzsKKyAgICAqLyopIGFjX3NpdGVfZmlsZTE9JENPTkZJR19TSVRFOzsKKyAgICAqKSAgIGFjX3NpdGVfZmlsZTE9Li8kQ09ORklHX1NJVEU7OworICBlc2FjCitlbGlmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgorICBhY19zaXRlX2ZpbGUxPSRwcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKKyAgYWNfc2l0ZV9maWxlMj0kcHJlZml4L2V0Yy9jb25maWcuc2l0ZQorZWxzZQorICBhY19zaXRlX2ZpbGUxPSRhY19kZWZhdWx0X3ByZWZpeC9zaGFyZS9jb25maWcuc2l0ZQorICBhY19zaXRlX2ZpbGUyPSRhY19kZWZhdWx0X3ByZWZpeC9ldGMvY29uZmlnLnNpdGUKIGZpCi1mb3IgYWNfc2l0ZV9maWxlIGluICRDT05GSUdfU0lURTsgZG8KLSAgaWYgdGVzdCAtciAiJGFjX3NpdGVfZmlsZSI7IHRoZW4KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNQotZWNobyAiJGFzX21lOiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNjt9Citmb3IgYWNfc2l0ZV9maWxlIGluICIkYWNfc2l0ZV9maWxlMSIgIiRhY19zaXRlX2ZpbGUyIgorZG8KKyAgdGVzdCAieCRhY19zaXRlX2ZpbGUiID0geE5PTkUgJiYgY29udGludWUKKyAgaWYgdGVzdCAvZGV2L251bGwgIT0gIiRhY19zaXRlX2ZpbGUiICYmIHRlc3QgLXIgIiRhY19zaXRlX2ZpbGUiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjY7fQogICAgIHNlZCAncy9eL3wgLycgIiRhY19zaXRlX2ZpbGUiID4mNQotICAgIC4gIiRhY19zaXRlX2ZpbGUiCisgICAgLiAiJGFjX3NpdGVfZmlsZSIgXAorICAgICAgfHwgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiZmFpbGVkIHRvIGxvYWQgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KICAgZmkKIGRvbmUKIAogaWYgdGVzdCAtciAiJGNhY2hlX2ZpbGUiOyB0aGVuCi0gICMgU29tZSB2ZXJzaW9ucyBvZiBiYXNoIHdpbGwgZmFpbCB0byBzb3VyY2UgL2Rldi9udWxsIChzcGVjaWFsCi0gICMgZmlsZXMgYWN0dWFsbHkpLCBzbyB3ZSBhdm9pZCBkb2luZyB0aGF0LgotICBpZiB0ZXN0IC1mICIkY2FjaGVfZmlsZSI7IHRoZW4KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKLWVjaG8gIiRhc19tZTogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgIyBTb21lIHZlcnNpb25zIG9mIGJhc2ggd2lsbCBmYWlsIHRvIHNvdXJjZSAvZGV2L251bGwgKHNwZWNpYWwgZmlsZXMKKyAgIyBhY3R1YWxseSksIHNvIHdlIGF2b2lkIGRvaW5nIHRoYXQuICBESkdQUCBlbXVsYXRlcyBpdCBhcyBhIHJlZ3VsYXIgZmlsZS4KKyAgaWYgdGVzdCAvZGV2L251bGwgIT0gIiRjYWNoZV9maWxlIiAmJiB0ZXN0IC1mICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KICAgICBjYXNlICRjYWNoZV9maWxlIGluCi0gICAgICBbXFwvXSogfCA/OltcXC9dKiApIC4gJGNhY2hlX2ZpbGU7OwotICAgICAgKikgICAgICAgICAgICAgICAgICAgICAgLiAuLyRjYWNoZV9maWxlOzsKKyAgICAgIFtcXC9dKiB8ID86W1xcL10qICkgLiAiJGNhY2hlX2ZpbGUiOzsKKyAgICAgICopICAgICAgICAgICAgICAgICAgICAgIC4gIi4vJGNhY2hlX2ZpbGUiOzsKICAgICBlc2FjCiAgIGZpCiBlbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKLWVjaG8gIiRhc19tZTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CiAgID4kY2FjaGVfZmlsZQogZmkKIAorYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgbG9jYWxlLmgiCithc19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgX3NldF9pbnZhbGlkX3BhcmFtZXRlcl9oYW5kbGVyIgorYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgc3lzL3NvY2tldC5oIgorYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgdW5pc3RkLmgiCithc19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgZmNudGwiCithc19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgc3ltbGluayIKK2FzX2ZuX2FwcGVuZCBhY19oZWFkZXJfbGlzdCAiIHN0ZGlvX2V4dC5oIgorYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIF9fZnBlbmRpbmciCithc19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgdmFzbnByaW50ZiIKK2FzX2ZuX2FwcGVuZCBhY19oZWFkZXJfbGlzdCAiIGZlYXR1cmVzLmgiCithc19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgc25wcmludGYiCithc19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgYWxhcm0iCithc19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgX19mc2V0ZXJyIgorYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgc3lzL3N0YXQuaCIKK2FzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiBnZXRkZWxpbSIKK2FzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiBnZXRkdGFibGVzaXplIgorZ2xfZ2V0b3B0X3JlcXVpcmVkPUdOVQorYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgZ2V0b3B0LmgiCithc19mbl9hcHBlbmQgYWNfaGVhZGVyX2xpc3QgIiB3Y2hhci5oIgorYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgc3RkaW50LmgiCithc19mbl9hcHBlbmQgYWNfaGVhZGVyX2xpc3QgIiBpbnR0eXBlcy5oIgorYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIGlzd2NudHJsIgorYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgd2N0eXBlLmgiCithc19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgaXN3YmxhbmsiCithc19mbl9hcHBlbmQgYWNfaGVhZGVyX2xpc3QgIiBtYXRoLmgiCithc19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgbWJzaW5pdCIKK2FzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiBtYnJ0b3djIgorYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIGlzYXNjaWkiCithc19mbl9hcHBlbmQgYWNfaGVhZGVyX2xpc3QgIiBzeXMvbW1hbi5oIgorYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIG1wcm90ZWN0IgorYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIG9ic3RhY2tfcHJpbnRmIgorYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIGxzdGF0IgorYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgc3lzL3BhcmFtLmgiCithc19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgc3RyZXJyb3JfciIKK2FzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiBfX3hwZ19zdHJlcnJvcl9yIgorYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIHBpcGUyIgorYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIHBvc2l4X3NwYXduIgorZ2xfcHJpbnRmX3NhZmU9eWVzCithc19mbl9hcHBlbmQgYWNfaGVhZGVyX2xpc3QgIiBzY2hlZC5oIgorYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIHNpZ2FjdGlvbiIKK2FzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiBzaWdhbHRzdGFjayIKK2FzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiBzaWdpbnRlcnJ1cHQiCithc19mbl9hcHBlbmQgYWNfaGVhZGVyX2xpc3QgIiBzcGF3bi5oIgorYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIHN0cmR1cCIKK2FzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiBjYXRnZXRzIgorYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIHN0cm5kdXAiCithc19mbl9hcHBlbmQgYWNfaGVhZGVyX2xpc3QgIiBzeXMvd2FpdC5oIgorYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgc3lzL3RpbWUuaCIKK2FzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiBwaXBlIgorYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIHdjd2lkdGgiCithc19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgc2V0bG9jYWxlIgorZ3RfbmVlZHM9IiRndF9uZWVkcyBuZWVkLW5nZXR0ZXh0IgogIyBDaGVjayB0aGF0IHRoZSBwcmVjaW91cyB2YXJpYWJsZXMgc2F2ZWQgaW4gdGhlIGNhY2hlIGhhdmUga2VwdCB0aGUgc2FtZQogIyB2YWx1ZS4KIGFjX2NhY2hlX2NvcnJ1cHRlZD1mYWxzZQotZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8Ci0JICAgICAgIHNlZCAtbiAncy9eYWNfZW52X1woW2EtekEtWl8wLTldKlwpX3NldD0uKi9cMS9wJ2A7IGRvCitmb3IgYWNfdmFyIGluICRhY19wcmVjaW91c192YXJzOyBkbwogICBldmFsIGFjX29sZF9zZXQ9XCRhY19jdl9lbnZfJHthY192YXJ9X3NldAogICBldmFsIGFjX25ld19zZXQ9XCRhY19lbnZfJHthY192YXJ9X3NldAotICBldmFsIGFjX29sZF92YWw9IlwkYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZSIKLSAgZXZhbCBhY19uZXdfdmFsPSJcJGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWUiCisgIGV2YWwgYWNfb2xkX3ZhbD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWUKKyAgZXZhbCBhY19uZXdfdmFsPVwkYWNfZW52XyR7YWNfdmFyfV92YWx1ZQogICBjYXNlICRhY19vbGRfc2V0LCRhY19uZXdfc2V0IGluCiAgICAgc2V0LCkKLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KICAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CiAgICAgLHNldCkKLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CiAgICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OiA7OwogICAgICwpOzsKICAgICAqKQogICAgICAgaWYgdGVzdCAieCRhY19vbGRfdmFsIiAhPSAieCRhY19uZXdfdmFsIjsgdGhlbgotCXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9Ci0JeyBlY2hvICIkYXNfbWU6JExJTkVOTzogICBmb3JtZXIgdmFsdWU6ICAkYWNfb2xkX3ZhbCIgPiY1Ci1lY2hvICIkYXNfbWU6ICAgZm9ybWVyIHZhbHVlOiAgJGFjX29sZF92YWwiID4mMjt9Ci0JeyBlY2hvICIkYXNfbWU6JExJTkVOTzogICBjdXJyZW50IHZhbHVlOiAkYWNfbmV3X3ZhbCIgPiY1Ci1lY2hvICIkYXNfbWU6ICAgY3VycmVudCB2YWx1ZTogJGFjX25ld192YWwiID4mMjt9Ci0JYWNfY2FjaGVfY29ycnVwdGVkPToKKwkjIGRpZmZlcmVuY2VzIGluIHdoaXRlc3BhY2UgZG8gbm90IGxlYWQgdG8gZmFpbHVyZS4KKwlhY19vbGRfdmFsX3c9YGVjaG8geCAkYWNfb2xkX3ZhbGAKKwlhY19uZXdfdmFsX3c9YGVjaG8geCAkYWNfbmV3X3ZhbGAKKwlpZiB0ZXN0ICIkYWNfb2xkX3ZhbF93IiAhPSAiJGFjX25ld192YWxfdyI7IHRoZW4KKwkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9CisJICBhY19jYWNoZV9jb3JydXB0ZWQ9OgorCWVsc2UKKwkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogd2FybmluZzogaWdub3Jpbmcgd2hpdGVzcGFjZSBjaGFuZ2VzIGluIFxgJGFjX3Zhcicgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogd2FybmluZzogaWdub3Jpbmcgd2hpdGVzcGFjZSBjaGFuZ2VzIGluIFxgJGFjX3Zhcicgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9CisJICBldmFsICRhY192YXI9XCRhY19vbGRfdmFsCisJZmkKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICAgZm9ybWVyIHZhbHVlOiAgXGAkYWNfb2xkX3ZhbCciID4mNQorJGFzX2VjaG8gIiRhc19tZTogICBmb3JtZXIgdmFsdWU6ICBcYCRhY19vbGRfdmFsJyIgPiYyO30KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICAgY3VycmVudCB2YWx1ZTogXGAkYWNfbmV3X3ZhbCciID4mNQorJGFzX2VjaG8gIiRhc19tZTogICBjdXJyZW50IHZhbHVlOiBcYCRhY19uZXdfdmFsJyIgPiYyO30KICAgICAgIGZpOzsKICAgZXNhYwogICAjIFBhc3MgcHJlY2lvdXMgdmFyaWFibGVzIHRvIGNvbmZpZy5zdGF0dXMuCiAgIGlmIHRlc3QgIiRhY19uZXdfc2V0IiA9IHNldDsgdGhlbgogICAgIGNhc2UgJGFjX25ld192YWwgaW4KLSAgICAqIiAiKnwqIgkiKnwqW1xbXF1cflwjXCRcXlwmXCpcKFwpXHtcfVxcXHxcO1w8XD5cP1wiXCddKikKLSAgICAgIGFjX2FyZz0kYWNfdmFyPWBlY2hvICIkYWNfbmV3X3ZhbCIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICAqXCcqKSBhY19hcmc9JGFjX3Zhcj1gJGFzX2VjaG8gIiRhY19uZXdfdmFsIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OwogICAgICopIGFjX2FyZz0kYWNfdmFyPSRhY19uZXdfdmFsIDs7CiAgICAgZXNhYwogICAgIGNhc2UgIiAkYWNfY29uZmlndXJlX2FyZ3MgIiBpbgogICAgICAgKiIgJyRhY19hcmcnICIqKSA7OyAjIEF2b2lkIGR1cHMuICBVc2Ugb2YgcXVvdGVzIGVuc3VyZXMgYWNjdXJhY3kuCi0gICAgICAqKSBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICckYWNfYXJnJyIgOzsKKyAgICAgICopIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJncyAiICckYWNfYXJnJyIgOzsKICAgICBlc2FjCiAgIGZpCiBkb25lCiBpZiAkYWNfY2FjaGVfY29ycnVwdGVkOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjI7fQotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBydW4gXGBtYWtlIGRpc3RjbGVhbicgYW5kL29yIFxgcm0gJGNhY2hlX2ZpbGUnIGFuZCBzdGFydCBvdmVyIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IHJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiYyO30KKyAgYXNfZm5fZXJyb3IgJD8gInJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiICIkTElORU5PIiA1CiBmaQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1haW4gYm9keSBvZiBzY3JpcHQuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogCiBhY19leHQ9YwogYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKQEAgLTEzMTUsNzcgKzM3NTgsNTkgQEAKIGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKIAogCi1nbF9oZWFkZXJfbGlzdD0iJGdsX2hlYWRlcl9saXN0IGxvY2FsZS5oIgotZ2xfZnVuY19saXN0PSIkZ2xfZnVuY19saXN0IHNldGxvY2FsZSIKLWdsX2hlYWRlcl9saXN0PSIkZ2xfaGVhZGVyX2xpc3Qgd2NoYXIuaCIKLWdsX2hlYWRlcl9saXN0PSIkZ2xfaGVhZGVyX2xpc3Qgd2N0eXBlLmgiCi1nbF9mdW5jX2xpc3Q9IiRnbF9mdW5jX2xpc3QgaXNhc2NpaSIKLWdsX2Z1bmNfbGlzdD0iJGdsX2Z1bmNfbGlzdCBpc3dwcmludCIKLWdsX2Z1bmNfbGlzdD0iJGdsX2Z1bmNfbGlzdCBtYnNpbml0IgorUEFDS0FHRV9DT1BZUklHSFRfWUVBUj0yMDEyCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX0NPUFlSSUdIVF9ZRUFSICRQQUNLQUdFX0NPUFlSSUdIVF9ZRUFSCitfQUNFT0YKIAogCiBhY19hdXhfZGlyPQotZm9yIGFjX2RpciBpbiBidWlsZC1hdXggJHNyY2Rpci9idWlsZC1hdXg7IGRvCi0gIGlmIHRlc3QgLWYgJGFjX2Rpci9pbnN0YWxsLXNoOyB0aGVuCitmb3IgYWNfZGlyIGluIGJ1aWxkLWF1eCAiJHNyY2RpciIvYnVpbGQtYXV4OyBkbworICBpZiB0ZXN0IC1mICIkYWNfZGlyL2luc3RhbGwtc2giOyB0aGVuCiAgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCiAgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC1zaCAtYyIKICAgICBicmVhawotICBlbGlmIHRlc3QgLWYgJGFjX2Rpci9pbnN0YWxsLnNoOyB0aGVuCisgIGVsaWYgdGVzdCAtZiAiJGFjX2Rpci9pbnN0YWxsLnNoIjsgdGhlbgogICAgIGFjX2F1eF9kaXI9JGFjX2RpcgogICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwuc2ggLWMiCiAgICAgYnJlYWsKLSAgZWxpZiB0ZXN0IC1mICRhY19kaXIvc2h0b29sOyB0aGVuCisgIGVsaWYgdGVzdCAtZiAiJGFjX2Rpci9zaHRvb2wiOyB0aGVuCiAgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCiAgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvc2h0b29sIGluc3RhbGwgLWMiCiAgICAgYnJlYWsKICAgZmkKIGRvbmUKIGlmIHRlc3QgLXogIiRhY19hdXhfZGlyIjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnN0YWxsLXNoIG9yIGluc3RhbGwuc2ggaW4gYnVpbGQtYXV4ICRzcmNkaXIvYnVpbGQtYXV4IiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGluc3RhbGwtc2ggb3IgaW5zdGFsbC5zaCBpbiBidWlsZC1hdXggJHNyY2Rpci9idWlsZC1hdXgiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1hY19jb25maWdfZ3Vlc3M9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiCi1hY19jb25maWdfc3ViPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIKLWFjX2NvbmZpZ3VyZT0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZ3VyZSIgIyBUaGlzIHNob3VsZCBiZSBDeWdudXMgY29uZmlndXJlLgotCi1jYXNlIG00IGluCi0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfbWFjcm9fZGlyPW00ICAgICAgICAgOzsKLSAgKikgICAgICAgICAgICAgICAgICAgICAgYWNfbWFjcm9fZGlyPSRzcmNkaXIvbTQgOzsKLWVzYWMKLWlmIHRlc3QgLWQgIiRhY19tYWNyb19kaXIiOyB0aGVuIDoKLWVsc2UKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgbWFjcm8gZGlyZWN0b3J5IFxgbTQnIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIG1hY3JvIGRpcmVjdG9yeSBcYG00JyIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGZpbmQgaW5zdGFsbC1zaCwgaW5zdGFsbC5zaCwgb3Igc2h0b29sIGluIGJ1aWxkLWF1eCBcIiRzcmNkaXJcIi9idWlsZC1hdXgiICIkTElORU5PIiA1CiBmaQogCisjIFRoZXNlIHRocmVlIHZhcmlhYmxlcyBhcmUgdW5kb2N1bWVudGVkIGFuZCB1bnN1cHBvcnRlZCwKKyMgYW5kIGFyZSBpbnRlbmRlZCB0byBiZSB3aXRoZHJhd24gaW4gYSBmdXR1cmUgQXV0b2NvbmYgcmVsZWFzZS4KKyMgVGhleSBjYW4gY2F1c2Ugc2VyaW91cyBwcm9ibGVtcyBpZiBhIGJ1aWxkZXIncyBzb3VyY2UgdHJlZSBpcyBpbiBhIGRpcmVjdG9yeQorIyB3aG9zZSBmdWxsIG5hbWUgY29udGFpbnMgdW51c3VhbCBjaGFyYWN0ZXJzLgorYWNfY29uZmlnX2d1ZXNzPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorYWNfY29uZmlnX3N1Yj0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCithY19jb25maWd1cmU9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWd1cmUiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCiAKLSMgV2UgZG9uJ3QgaGF2ZSBhIGZpbGUgbTQvTWFrZWZpbGUuYW0sIHNvIHdlIG5lZWQgQXV0b21ha2UgMS44IG9yIGxhdGVyLgotYW1fX2FwaV92ZXJzaW9uPSIxLjkiCisKKworCisjIEF1dG9tYWtlIDEuMTAuMyBhbmQgMS4xMS4xIGZpeCBhIHNlY3VyaXR5IGZsYXcgZGlzY3Vzc2VkIGhlcmU6CisjCisjICAgaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUuY29tcC5zeXN1dGlscy5hdXRvdG9vbHMuYW5ub3VuY2UvMTMxCisjCisjIFRvIGF2b2lkIDEuMTEsIHdlIG1ha2UgMS4xMS4xIHRoZSBtaW5pbXVtIHZlcnNpb24uCisjCisjIFdlIHdhbnQgZ25pdHMgc3RyaWN0bmVzcyBvbmx5IHdoZW4gcm9sbGluZyBhIHN0YWJsZSByZWxlYXNlLiAgRm9yCisjIHJlbGVhc2UgY2FuZGlkYXRlcywgd2UgdXNlIHZlcnNpb24gc3RyaW5ncyBsaWtlIDIuNC4zX3JjMSwgYnV0IGduaXRzCisjIGRvZXNuJ3QgbGlrZSB0aGF0LCBzbyB3ZSBsZXQgdGhlIHVuZGVyc2NvcmUgZGlzYWJsZSBnbml0cy4gIEJldHdlZW4KKyMgcmVsZWFzZXMsIHdlIHdhbnQgdG8gYmUgYWJsZSBydW4gbWFrZSBkaXN0IHdpdGhvdXQgYmVpbmcgcmVxdWlyZWQgdG8KKyMgYWRkIGEgYm9ndXMgTkVXUyBlbnRyeS4gIEluIHRoYXQgY2FzZSwgdGhlIHZlcnNpb24gc3RyaW5nCisjIGF1dG9tYXRpY2FsbHkgY29udGFpbnMgYSBkYXNoLCB3aGljaCB3ZSBhbHNvIGxldCBkaXNhYmxlIGduaXRzLgorYW1fX2FwaV92ZXJzaW9uPScxLjEyJworCiAjIEZpbmQgYSBnb29kIGluc3RhbGwgcHJvZ3JhbS4gIFdlIHByZWZlciBhIEMgcHJvZ3JhbSAoZmFzdGVyKSwKICMgc28gb25lIHNjcmlwdCBpcyBhcyBnb29kIGFzIGFub3RoZXIuICBCdXQgYXZvaWQgdGhlIGJyb2tlbiBvcgogIyBpbmNvbXBhdGlibGUgdmVyc2lvbnM6CkBAIC0xMzk5LDIyICszODI0LDIzIEBACiAjIFNWUjQgL3Vzci91Y2IvaW5zdGFsbCwgd2hpY2ggdHJpZXMgdG8gdXNlIHRoZSBub25leGlzdGVudCBncm91cCAic3RhZmYiCiAjIE9TLzIncyBzeXN0ZW0gaW5zdGFsbCwgd2hpY2ggaGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc2VtYW50aWMKICMgLi9pbnN0YWxsLCB3aGljaCBjYW4gYmUgZXJyb25lb3VzbHkgY3JlYXRlZCBieSBtYWtlIGZyb20gLi9pbnN0YWxsLnNoLgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsLi4uICRFQ0hPX0MiID4mNgorIyBSZWplY3QgaW5zdGFsbCBwcm9ncmFtcyB0aGF0IGNhbm5vdCBpbnN0YWxsIG11bHRpcGxlIGZpbGVzLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwuLi4gIiA+JjY7IH0KIGlmIHRlc3QgLXogIiRJTlNUQUxMIjsgdGhlbgotaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2lmICR7YWNfY3ZfcGF0aF9pbnN0YWxsKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogZm9yIGFzX2RpciBpbiAkUEFUSAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAjIEFjY291bnQgZm9yIHBlb3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50cy4KLWNhc2UgJGFzX2Rpci8gaW4KLSAgLi8gfCAuLy8gfCAvY0MvKiB8IFwKKyAgICAjIEFjY291bnQgZm9yIHBlb3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50cy4KK2Nhc2UgJGFzX2Rpci8gaW4gIygoCisgIC4vIHwgLi8vIHwgL1tjQ10vKiB8IFwKICAgL2V0Yy8qIHwgL3Vzci9zYmluLyogfCAvdXNyL2V0Yy8qIHwgL3NiaW4vKiB8IC91c3IvYWZzd3MvYmluLyogfCBcCi0gID86XFwvb3MyXFwvaW5zdGFsbFxcLyogfCA/OlxcL09TMlxcL0lOU1RBTExcXC8qIHwgXAorICA/OltcXC9db3MyW1xcL11pbnN0YWxsW1xcL10qIHwgPzpbXFwvXU9TMltcXC9dSU5TVEFMTFtcXC9dKiB8IFwKICAgL3Vzci91Y2IvKiApIDs7CiAgICopCiAgICAgIyBPU0YxIGFuZCBTQ08gT0RUIDMuMCBoYXZlIHRoZWlyIG93biBuYW1lcyBmb3IgaW5zdGFsbC4KQEAgLTE0MjIsNyArMzg0OCw3IEBACiAgICAgIyBieSBkZWZhdWx0LgogICAgIGZvciBhY19wcm9nIGluIGdpbnN0YWxsIHNjb2luc3QgaW5zdGFsbDsgZG8KICAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotCWlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB0aGVuCisJaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgdGhlbgogCSAgaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKIAkgICAgZ3JlcCBkc3Btc2cgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgogCSAgICAjIEFJWCBpbnN0YWxsLiAgSXQgaGFzIGFuIGluY29tcGF0aWJsZSBjYWxsaW5nIGNvbnZlbnRpb24uCkBAIC0xNDMyLDMwICszODU4LDQzIEBACiAJICAgICMgcHJvZ3JhbS1zcGVjaWZpYyBpbnN0YWxsIHNjcmlwdCB1c2VkIGJ5IEhQIHB3cGx1cy0tZG9uJ3QgdXNlLgogCSAgICA6CiAJICBlbHNlCi0JICAgIGFjX2N2X3BhdGhfaW5zdGFsbD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCAtYyIKLQkgICAgYnJlYWsgMworCSAgICBybSAtcmYgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byBjb25mdGVzdC5kaXIKKwkgICAgZWNobyBvbmUgPiBjb25mdGVzdC5vbmUKKwkgICAgZWNobyB0d28gPiBjb25mdGVzdC50d28KKwkgICAgbWtkaXIgY29uZnRlc3QuZGlyCisJICAgIGlmICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAtYyBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvICJgcHdkYC9jb25mdGVzdC5kaXIiICYmCisJICAgICAgdGVzdCAtcyBjb25mdGVzdC5vbmUgJiYgdGVzdCAtcyBjb25mdGVzdC50d28gJiYKKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0LmRpci9jb25mdGVzdC5vbmUgJiYKKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0LmRpci9jb25mdGVzdC50d28KKwkgICAgdGhlbgorCSAgICAgIGFjX2N2X3BhdGhfaW5zdGFsbD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCAtYyIKKwkgICAgICBicmVhayAzCisJICAgIGZpCiAJICBmaQogCWZpCiAgICAgICBkb25lCiAgICAgZG9uZQogICAgIDs7CiBlc2FjCi1kb25lCiAKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitybSAtcmYgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byBjb25mdGVzdC5kaXIKIAogZmkKICAgaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KICAgICBJTlNUQUxMPSRhY19jdl9wYXRoX2luc3RhbGwKICAgZWxzZQotICAgICMgQXMgYSBsYXN0IHJlc29ydCwgdXNlIHRoZSBzbG93IHNoZWxsIHNjcmlwdC4gIFdlIGRvbid0IGNhY2hlIGEKLSAgICAjIHBhdGggZm9yIElOU1RBTEwgd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKKyAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBEb24ndCBjYWNoZSBhCisgICAgIyB2YWx1ZSBmb3IgSU5TVEFMTCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbAogICAgICMgYnJlYWsgb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhlIGNhY2hlIGlmIHRoYXQgZGlyZWN0b3J5IGlzCi0gICAgIyByZW1vdmVkLCBvciBpZiB0aGUgcGF0aCBpcyByZWxhdGl2ZS4KKyAgICAjIHJlbW92ZWQsIG9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlbGF0aXZlIG5hbWUuCiAgICAgSU5TVEFMTD0kYWNfaW5zdGFsbF9zaAogICBmaQogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRJTlNUQUxMIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRJTlNUQUxMIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSU5TVEFMTCIgPiY1CiskYXNfZWNobyAiJElOU1RBTEwiID4mNjsgfQogCiAjIFVzZSB0ZXN0IC16IGJlY2F1c2UgU3VuT1M0IHNoIG1pc2hhbmRsZXMgYnJhY2VzIGluICR7dmFyLXZhbH0uCiAjIEl0IHRoaW5rcyB0aGUgZmlyc3QgY2xvc2UgYnJhY2UgZW5kcyB0aGUgdmFyaWFibGUgc3Vic3RpdHV0aW9uLgpAQCAtMTQ2NSwxMTggKzM5MDQsMjYzIEBACiAKIHRlc3QgLXogIiRJTlNUQUxMX0RBVEEiICYmIElOU1RBTExfREFUQT0nJHtJTlNUQUxMfSAtbSA2NDQnCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUuLi4gJEVDSE9fQyIgPiY2Ci0jIEp1c3QgaW4gY2FzZQotc2xlZXAgMQotZWNobyB0aW1lc3RhbXAgPiBjb25mdGVzdC5maWxlCi0jIERvIGBzZXQnIGluIGEgc3Vic2hlbGwgc28gd2UgZG9uJ3QgY2xvYmJlciB0aGUgY3VycmVudCBzaGVsbCdzCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUuLi4gIiA+JjY7IH0KKyMgUmVqZWN0IHVuc2FmZSBjaGFyYWN0ZXJzIGluICRzcmNkaXIgb3IgdGhlIGFic29sdXRlIHdvcmtpbmcgZGlyZWN0b3J5CisjIG5hbWUuICBBY2NlcHQgc3BhY2UgYW5kIHRhYiBvbmx5IGluIHRoZSBsYXR0ZXIuCithbV9sZj0nCisnCitjYXNlIGBwd2RgIGluCisgICpbXFxcIlwjXCRcJlwnXGAkYW1fbGZdKikKKyAgICBhc19mbl9lcnJvciAkPyAidW5zYWZlIGFic29sdXRlIHdvcmtpbmcgZGlyZWN0b3J5IG5hbWUiICIkTElORU5PIiA1OzsKK2VzYWMKK2Nhc2UgJHNyY2RpciBpbgorICAqW1xcXCJcI1wkXCZcJ1xgJGFtX2xmXCBcCV0qKQorICAgIGFzX2ZuX2Vycm9yICQ/ICJ1bnNhZmUgc3JjZGlyIHZhbHVlOiAnJHNyY2RpciciICIkTElORU5PIiA1OzsKK2VzYWMKKworIyBEbyAnc2V0JyBpbiBhIHN1YnNoZWxsIHNvIHdlIGRvbid0IGNsb2JiZXIgdGhlIGN1cnJlbnQgc2hlbGwncwogIyBhcmd1bWVudHMuICBNdXN0IHRyeSAtTCBmaXJzdCBpbiBjYXNlIGNvbmZpZ3VyZSBpcyBhY3R1YWxseSBhCiAjIHN5bWxpbms7IHNvbWUgc3lzdGVtcyBwbGF5IHdlaXJkIGdhbWVzIHdpdGggdGhlIG1vZCB0aW1lIG9mIHN5bWxpbmtzCiAjIChlZyBGcmVlQlNEIHJldHVybnMgdGhlIG1vZCB0aW1lIG9mIHRoZSBzeW1saW5rJ3MgY29udGFpbmluZwogIyBkaXJlY3RvcnkpLgogaWYgKAotICAgc2V0IFggYGxzIC1MdCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlIDI+IC9kZXYvbnVsbGAKLSAgIGlmIHRlc3QgIiQqIiA9ICJYIjsgdGhlbgotICAgICAgIyAtTCBkaWRuJ3Qgd29yay4KLSAgICAgIHNldCBYIGBscyAtdCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlYAotICAgZmkKLSAgIHJtIC1mIGNvbmZ0ZXN0LmZpbGUKLSAgIGlmIHRlc3QgIiQqIiAhPSAiWCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlIiBcCi0gICAgICAmJiB0ZXN0ICIkKiIgIT0gIlggY29uZnRlc3QuZmlsZSAkc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KKyAgIGFtX2hhc19zbGVwdD1ubworICAgZm9yIGFtX3RyeSBpbiAxIDI7IGRvCisgICAgIGVjaG8gInRpbWVzdGFtcCwgc2xlcHQ6ICRhbV9oYXNfc2xlcHQiID4gY29uZnRlc3QuZmlsZQorICAgICBzZXQgWCBgbHMgLUx0ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCisgICAgIGlmIHRlc3QgIiQqIiA9ICJYIjsgdGhlbgorCSMgLUwgZGlkbid0IHdvcmsuCisJc2V0IFggYGxzIC10ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZWAKKyAgICAgZmkKKyAgICAgaWYgdGVzdCAiJCoiICE9ICJYICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGUiIFwKKwkmJiB0ZXN0ICIkKiIgIT0gIlggY29uZnRlc3QuZmlsZSAkc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KIAotICAgICAgIyBJZiBuZWl0aGVyIG1hdGNoZWQsIHRoZW4gd2UgaGF2ZSBhIGJyb2tlbiBscy4gIFRoaXMgY2FuIGhhcHBlbgotICAgICAgIyBpZiwgZm9yIGluc3RhbmNlLCBDT05GSUdfU0hFTEwgaXMgYmFzaCBhbmQgaXQgaW5oZXJpdHMgYQotICAgICAgIyBicm9rZW4gbHMgYWxpYXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuICBUaGlzIGhhcyBhY3R1YWxseQotICAgICAgIyBoYXBwZW5lZC4gIFN1Y2ggYSBzeXN0ZW0gY291bGQgbm90IGJlIGNvbnNpZGVyZWQgInNhbmUiLgotICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbHMgLXQgYXBwZWFycyB0byBmYWlsLiAgTWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhIGJyb2tlbgotYWxpYXMgaW4geW91ciBlbnZpcm9ubWVudCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBscyAtdCBhcHBlYXJzIHRvIGZhaWwuICBNYWtlIHN1cmUgdGhlcmUgaXMgbm90IGEgYnJva2VuCi1hbGlhcyBpbiB5b3VyIGVudmlyb25tZW50IiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICBmaQotCisJIyBJZiBuZWl0aGVyIG1hdGNoZWQsIHRoZW4gd2UgaGF2ZSBhIGJyb2tlbiBscy4gIFRoaXMgY2FuIGhhcHBlbgorCSMgaWYsIGZvciBpbnN0YW5jZSwgQ09ORklHX1NIRUxMIGlzIGJhc2ggYW5kIGl0IGluaGVyaXRzIGEKKwkjIGJyb2tlbiBscyBhbGlhcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4gIFRoaXMgaGFzIGFjdHVhbGx5CisJIyBoYXBwZW5lZC4gIFN1Y2ggYSBzeXN0ZW0gY291bGQgbm90IGJlIGNvbnNpZGVyZWQgInNhbmUiLgorCWFzX2ZuX2Vycm9yICQ/ICJscyAtdCBhcHBlYXJzIHRvIGZhaWwuICBNYWtlIHN1cmUgdGhlcmUgaXMgbm90IGEgYnJva2VuCisgIGFsaWFzIGluIHlvdXIgZW52aXJvbm1lbnQiICIkTElORU5PIiA1CisgICAgIGZpCisgICAgIGlmIHRlc3QgIiQyIiA9IGNvbmZ0ZXN0LmZpbGUgfHwgdGVzdCAkYW1fdHJ5IC1lcSAyOyB0aGVuCisgICAgICAgYnJlYWsKKyAgICAgZmkKKyAgICAgIyBKdXN0IGluIGNhc2UuCisgICAgIHNsZWVwIDEKKyAgICAgYW1faGFzX3NsZXB0PXllcworICAgZG9uZQogICAgdGVzdCAiJDIiID0gY29uZnRlc3QuZmlsZQogICAgKQogdGhlbgogICAgIyBPay4KICAgIDoKIGVsc2UKLSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5ld2x5IGNyZWF0ZWQgZmlsZSBpcyBvbGRlciB0aGFuIGRpc3RyaWJ1dGVkIGZpbGVzIQotQ2hlY2sgeW91ciBzeXN0ZW0gY2xvY2siID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogbmV3bHkgY3JlYXRlZCBmaWxlIGlzIG9sZGVyIHRoYW4gZGlzdHJpYnV0ZWQgZmlsZXMhCi1DaGVjayB5b3VyIHN5c3RlbSBjbG9jayIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgYXNfZm5fZXJyb3IgJD8gIm5ld2x5IGNyZWF0ZWQgZmlsZSBpcyBvbGRlciB0aGFuIGRpc3RyaWJ1dGVkIGZpbGVzIQorQ2hlY2sgeW91ciBzeXN0ZW0gY2xvY2siICIkTElORU5PIiA1CiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorIyBJZiB3ZSBkaWRuJ3Qgc2xlZXAsIHdlIHN0aWxsIG5lZWQgdG8gZW5zdXJlIHRpbWUgc3RhbXBzIG9mIGNvbmZpZy5zdGF0dXMgYW5kCisjIGdlbmVyYXRlZCBmaWxlcyBhcmUgc3RyaWN0bHkgbmV3ZXIuCithbV9zbGVlcF9waWQ9CitpZiBncmVwICdzbGVwdDogbm8nIGNvbmZ0ZXN0LmZpbGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICggc2xlZXAgMSApICYKKyAgYW1fc2xlZXBfcGlkPSQhCitmaQorCitybSAtZiBjb25mdGVzdC5maWxlCisKIHRlc3QgIiRwcm9ncmFtX3ByZWZpeCIgIT0gTk9ORSAmJgotICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSJzLF4sJHByb2dyYW1fcHJlZml4LDskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKKyAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0icyZeJiRwcm9ncmFtX3ByZWZpeCY7JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiCiAjIFVzZSBhIGRvdWJsZSAkIHNvIG1ha2UgaWdub3JlcyBpdC4KIHRlc3QgIiRwcm9ncmFtX3N1ZmZpeCIgIT0gTk9ORSAmJgotICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSJzLFwkLCRwcm9ncmFtX3N1ZmZpeCw7JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiCi0jIERvdWJsZSBhbnkgXCBvciAkLiAgZWNobyBtaWdodCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCisgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9InMmXCQmJHByb2dyYW1fc3VmZml4JjskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKKyMgRG91YmxlIGFueSBcIG9yICQuCiAjIEJ5IGRlZmF1bHQgd2FzIGBzLHgseCcsIHJlbW92ZSBpdCBpZiB1c2VsZXNzLgotY2F0IDw8XF9BQ0VPRiA+Y29uZnRlc3Quc2VkCi1zL1tcXCRdLyYmL2c7cy87cyx4LHgsJC8vCi1fQUNFT0YKLXByb2dyYW1fdHJhbnNmb3JtX25hbWU9YGVjaG8gJHByb2dyYW1fdHJhbnNmb3JtX25hbWUgfCBzZWQgLWYgY29uZnRlc3Quc2VkYAotcm0gY29uZnRlc3Quc2VkCithY19zY3JpcHQ9J3MvW1xcJF0vJiYvZztzLztzLHgseCwkLy8nCitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPWAkYXNfZWNobyAiJHByb2dyYW1fdHJhbnNmb3JtX25hbWUiIHwgc2VkICIkYWNfc2NyaXB0ImAKIAogIyBleHBhbmQgJGFjX2F1eF9kaXIgdG8gYW4gYWJzb2x1dGUgcGF0aAogYW1fYXV4X2Rpcj1gY2QgJGFjX2F1eF9kaXIgJiYgcHdkYAogCi10ZXN0IHgiJHtNSVNTSU5HK3NldH0iID0geHNldCB8fCBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIKK2lmIHRlc3QgeCIke01JU1NJTkcrc2V0fSIgIT0geHNldDsgdGhlbgorICBjYXNlICRhbV9hdXhfZGlyIGluCisgICpcICogfCAqXAkqKQorICAgIE1JU1NJTkc9Ilwke1NIRUxMfSBcIiRhbV9hdXhfZGlyL21pc3NpbmdcIiIgOzsKKyAgKikKKyAgICBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIgOzsKKyAgZXNhYworZmkKICMgVXNlIGV2YWwgdG8gZXhwYW5kICRTSEVMTAogaWYgZXZhbCAiJE1JU1NJTkcgLS1ydW4gdHJ1ZSI7IHRoZW4KICAgYW1fbWlzc2luZ19ydW49IiRNSVNTSU5HIC0tcnVuICIKIGVsc2UKICAgYW1fbWlzc2luZ19ydW49Ci0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IFxgbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiYyO30KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAnbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAnbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiYyO30KIGZpCiAKLWlmIG1rZGlyIC1wIC0tdmVyc2lvbiAuID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICEgLWQgLi8tLXZlcnNpb247IHRoZW4KLSAgIyBXZSB1c2VkIHRvIGtlZXBpbmcgdGhlIGAuJyBhcyBmaXJzdCBhcmd1bWVudCwgaW4gb3JkZXIgdG8KLSAgIyBhbGxvdyAkKG1rZGlyX3ApIHRvIGJlIHVzZWQgd2l0aG91dCBhcmd1bWVudC4gIEFzIGluCi0gICMgICAkKG1rZGlyX3ApICQoc29tZWRpcikKLSAgIyB3aGVyZSAkKHNvbWVkaXIpIGlzIGNvbmRpdGlvbmFsbHkgZGVmaW5lZC4gIEhvd2V2ZXIgdGhpcyBpcyB3cm9uZwotICAjIGZvciB0d28gcmVhc29uczoKLSAgIyAgMS4gaWYgdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkIGJ5IGEgdXNlciB3aG8gY2Fubm90IHdyaXRlIGAuJwotICAjICAgICBtYWtlIGluc3RhbGwgd2lsbCBmYWlsLAotICAjICAyLiB0aGUgYWJvdmUgY29tbWVudCBzaG91bGQgbW9zdCBjZXJ0YWlubHkgcmVhZAotICAjICAgICAkKG1rZGlyX3ApICQoREVTVERJUikkKHNvbWVkaXIpCi0gICMgICAgIHNvIGl0IGRvZXMgbm90IHdvcmsgd2hlbiAkKHNvbWVkaXIpIGlzIHVuZGVmaW5lZCBhbmQKLSAgIyAgICAgJChERVNURElSKSBpcyBub3QuCi0gICMgIFRvIHN1cHBvcnQgdGhlIGxhdHRlciBjYXNlLCB3ZSBoYXZlIHRvIHdyaXRlCi0gICMgICAgIHRlc3QgLXogIiQoc29tZWRpcikiIHx8ICQobWtkaXJfcCkgJChERVNURElSKSQoc29tZWRpciksCi0gICMgIHNvIHRoZSBgLicgdHJpY2sgaXMgcG9pbnRsZXNzLgotICBta2Rpcl9wPSdta2RpciAtcCAtLScKK2lmIHRlc3QgeCIke2luc3RhbGxfc2h9IiAhPSB4c2V0OyB0aGVuCisgIGNhc2UgJGFtX2F1eF9kaXIgaW4KKyAgKlwgKiB8ICpcCSopCisgICAgaW5zdGFsbF9zaD0iXCR7U0hFTEx9ICckYW1fYXV4X2Rpci9pbnN0YWxsLXNoJyIgOzsKKyAgKikKKyAgICBpbnN0YWxsX3NoPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCIKKyAgZXNhYworZmkKKworIyBJbnN0YWxsZWQgYmluYXJpZXMgYXJlIHVzdWFsbHkgc3RyaXBwZWQgdXNpbmcgJ3N0cmlwJyB3aGVuIHRoZSB1c2VyCisjIHJ1biAibWFrZSBpbnN0YWxsLXN0cmlwIi4gIEhvd2V2ZXIgJ3N0cmlwJyBtaWdodCBub3QgYmUgdGhlIHJpZ2h0CisjIHRvb2wgdG8gdXNlIGluIGNyb3NzLWNvbXBpbGF0aW9uIGVudmlyb25tZW50cywgdGhlcmVmb3JlIEF1dG9tYWtlCisjIHdpbGwgaG9ub3IgdGhlICdTVFJJUCcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gb3ZlcnJ1bGUgdGhpcyBwcm9ncmFtLgoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0gbm87IHRoZW4KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX1NUUklQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgIyBPbiBOZXh0U3RlcCBhbmQgT3BlblN0ZXAsIHRoZSBgbWtkaXInIGNvbW1hbmQgZG9lcyBub3QKLSAgIyByZWNvZ25pemUgYW55IG9wdGlvbi4gIEl0IHdpbGwgaW50ZXJwcmV0IGFsbCBvcHRpb25zIGFzCi0gICMgZGlyZWN0b3JpZXMgdG8gY3JlYXRlLCBhbmQgdGhlbiBhYm9ydCBiZWNhdXNlIGAuJyBhbHJlYWR5Ci0gICMgZXhpc3RzLgotICBmb3IgZCBpbiAuLy1wIC4vLS12ZXJzaW9uOwotICBkbwotICAgIHRlc3QgLWQgJGQgJiYgcm1kaXIgJGQKKyAgaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgorICBhY19jdl9wcm9nX1NUUklQPSIkU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19TVFJJUD0iJHthY190b29sX3ByZWZpeH1zdHJpcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCiAgIGRvbmUKLSAgIyAkKG1raW5zdGFsbGRpcnMpIGlzIGRlZmluZWQgYnkgQXV0b21ha2UgaWYgbWtpbnN0YWxsZGlycyBleGlzdHMuCi0gIGlmIHRlc3QgLWYgIiRhY19hdXhfZGlyL21raW5zdGFsbGRpcnMiOyB0aGVuCi0gICAgbWtkaXJfcD0nJChta2luc3RhbGxkaXJzKScKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitTVFJJUD0kYWNfY3ZfcHJvZ19TVFJJUAoraWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFNUUklQIiA+JjUKKyRhc19lY2hvICIkU1RSSVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX1NUUklQIjsgdGhlbgorICBhY19jdF9TVFJJUD0kU1RSSVAKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJzdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgc3RyaXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X1NUUklQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSIkYWNfY3RfU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0ic3RyaXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfU1RSSVA9JGFjX2N2X3Byb2dfYWNfY3RfU1RSSVAKK2lmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9TVFJJUCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X1NUUklQIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfU1RSSVAiID0geDsgdGhlbgorICAgIFNUUklQPSI6IgogICBlbHNlCi0gICAgbWtkaXJfcD0nJChpbnN0YWxsX3NoKSAtZCcKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgU1RSSVA9JGFjX2N0X1NUUklQCisgIGZpCitlbHNlCisgIFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKK2ZpCisKK2ZpCitJTlNUQUxMX1NUUklQX1BST0dSQU09IlwkKGluc3RhbGxfc2gpIC1jIC1zIgorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIHRocmVhZC1zYWZlIG1rZGlyIC1wIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIHRocmVhZC1zYWZlIG1rZGlyIC1wLi4uICIgPiY2OyB9CitpZiB0ZXN0IC16ICIkTUtESVJfUCI7IHRoZW4KKyAgaWYgJHthY19jdl9wYXRoX21rZGlyKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi9vcHQvc2Z3L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIG1rZGlyIGdta2RpcjsgZG8KKwkgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisJICAgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiB8fCBjb250aW51ZQorCSAgIGNhc2UgYCIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAtLXZlcnNpb24gMj4mMWAgaW4gIygKKwkgICAgICdta2RpciAoR05VIGNvcmV1dGlscykgJyogfCBcCisJICAgICAnbWtkaXIgKGNvcmV1dGlscykgJyogfCBcCisJICAgICAnbWtkaXIgKGZpbGV1dGlscykgJzQuMSopCisJICAgICAgIGFjX2N2X3BhdGhfbWtkaXI9JGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dAorCSAgICAgICBicmVhayAzOzsKKwkgICBlc2FjCisJIGRvbmUKKyAgICAgICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKKworICB0ZXN0IC1kIC4vLS12ZXJzaW9uICYmIHJtZGlyIC4vLS12ZXJzaW9uCisgIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9ta2RpcitzZXR9IiA9IHNldDsgdGhlbgorICAgIE1LRElSX1A9IiRhY19jdl9wYXRoX21rZGlyIC1wIgorICBlbHNlCisgICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB1c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgRG9uJ3QgY2FjaGUgYQorICAgICMgdmFsdWUgZm9yIE1LRElSX1Agd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKKyAgICAjIGJyZWFrIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBjYWNoZSBpZiB0aGF0IGRpcmVjdG9yeSBpcworICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVsYXRpdmUgbmFtZS4KKyAgICBNS0RJUl9QPSIkYWNfaW5zdGFsbF9zaCAtZCIKICAgZmkKIGZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1LRElSX1AiID4mNQorJGFzX2VjaG8gIiRNS0RJUl9QIiA+JjY7IH0KKwogCiBmb3IgYWNfcHJvZyBpbiBnYXdrIG1hd2sgbmF3ayBhd2sKIGRvCiAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgogc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX0FXSytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQVdLKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KICAgYWNfY3ZfcHJvZ19BV0s9IiRBV0siICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgpAQCAtMTU4Niw1NSArNDE3MCw1OSBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgogICAgIGFjX2N2X3Byb2dfQVdLPSIkYWNfcHJvZyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQogZG9uZQotZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKIGZpCiBmaQogQVdLPSRhY19jdl9wcm9nX0FXSwogaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJEFXSyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQVdLIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBV0siID4mNQorJGFzX2VjaG8gIiRBV0siID4mNjsgfQogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAorCiAgIHRlc3QgLW4gIiRBV0siICYmIGJyZWFrCiBkb25lCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKS4uLiAkRUNIT19DIiA+JjYKLXNldCBkdW1teSAke01BS0UtbWFrZX07IGFjX21ha2U9YGVjaG8gIiQyIiB8IHNlZCAneSw6Li8rLSxfX19wXywnYAotaWYgZXZhbCAidGVzdCBcIlwke2FjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKS4uLiAiID4mNjsgfQorc2V0IHggJHtNQUtFLW1ha2V9CithY19tYWtlPWAkYXNfZWNobyAiJDIiIHwgc2VkICdzLysvcC9nOyBzL1teYS16QS1aMC05X10vXy9nJ2AKK2lmIGV2YWwgXCR7YWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgY2F0ID5jb25mdGVzdC5tYWtlIDw8XF9BQ0VPRgorU0hFTEwgPSAvYmluL3NoCiBhbGw6Ci0JQGVjaG8gJ2FjX21ha2V0ZW1wPSIkKE1BS0UpIicKKwlAZWNobyAnQEBAJSUlPSQoTUFLRSk9QEBAJSUlJwogX0FDRU9GCi0jIEdOVSBtYWtlIHNvbWV0aW1lcyBwcmludHMgIm1ha2VbMV06IEVudGVyaW5nLi4uIiwgd2hpY2ggd291bGQgY29uZnVzZSB1cy4KLWV2YWwgYCR7TUFLRS1tYWtlfSAtZiBjb25mdGVzdC5tYWtlIDI+L2Rldi9udWxsIHwgZ3JlcCB0ZW1wPWAKLWlmIHRlc3QgLW4gIiRhY19tYWtldGVtcCI7IHRoZW4KLSAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9eWVzCi1lbHNlCi0gIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PW5vCi1maQorIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZyAuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgorY2FzZSBgJHtNQUtFLW1ha2V9IC1mIGNvbmZ0ZXN0Lm1ha2UgMj4vZGV2L251bGxgIGluCisgICpAQEAlJSU9Pyo9QEBAJSUlKikKKyAgICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD15ZXM7OworICAqKQorICAgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PW5vOzsKK2VzYWMKIHJtIC1mIGNvbmZ0ZXN0Lm1ha2UKIGZpCi1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9wcm9nX21ha2VfJyR7YWNfbWFrZX1fc2V0YFwiID0geWVzIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKK2lmIGV2YWwgdGVzdCBcJGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldCA9IHllczsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQogICBTRVRfTUFLRT0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KICAgU0VUX01BS0U9Ik1BS0U9JHtNQUtFLW1ha2V9IgogZmkKIApAQCAtMTY0NywxMiArNDIzNSw1MyBAQAogZmkKIHJtZGlyIC50c3QgMj4vZGV2L251bGwKIAotIyB0ZXN0IHRvIHNlZSBpZiBzcmNkaXIgYWxyZWFkeSBjb25maWd1cmVkCi1pZiB0ZXN0ICJgY2QgJHNyY2RpciAmJiBwd2RgIiAhPSAiYHB3ZGAiICYmCi0gICB0ZXN0IC1mICRzcmNkaXIvY29uZmlnLnN0YXR1czsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBzb3VyY2UgZGlyZWN0b3J5IGFscmVhZHkgY29uZmlndXJlZDsgcnVuIFwibWFrZSBkaXN0Y2xlYW5cIiB0aGVyZSBmaXJzdCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBzb3VyY2UgZGlyZWN0b3J5IGFscmVhZHkgY29uZmlndXJlZDsgcnVuIFwibWFrZSBkaXN0Y2xlYW5cIiB0aGVyZSBmaXJzdCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNpbGVudC1ydWxlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zaWxlbnRfcnVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zaWxlbnRfcnVsZXM7CitmaQorCitjYXNlICRlbmFibGVfc2lsZW50X3J1bGVzIGluICMgKCgoCisgIHllcykgQU1fREVGQVVMVF9WRVJCT1NJVFk9MDs7CisgICBubykgQU1fREVGQVVMVF9WRVJCT1NJVFk9MTs7CisgICAgKikgQU1fREVGQVVMVF9WRVJCT1NJVFk9MTs7Citlc2FjCithbV9tYWtlPSR7TUFLRS1tYWtlfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRhbV9tYWtlIHN1cHBvcnRzIG5lc3RlZCB2YXJpYWJsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkYW1fbWFrZSBzdXBwb3J0cyBuZXN0ZWQgdmFyaWFibGVzLi4uICIgPiY2OyB9CitpZiAke2FtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgJGFzX2VjaG8gJ1RSVUU9JChCQVIkKFYpKQorQkFSMD1mYWxzZQorQkFSMT10cnVlCitWPTEKK2FtX19kb2l0OgorCUAkKFRSVUUpCisuUEhPTlk6IGFtX19kb2l0JyB8ICRhbV9tYWtlIC1mIC0gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzPXllcworZWxzZQorICBhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcz1ubworZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMiID4mNjsgfQoraWYgdGVzdCAkYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMgPSB5ZXM7IHRoZW4KKyAgICBBTV9WPSckKFYpJworICBBTV9ERUZBVUxUX1Y9JyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpJworZWxzZQorICBBTV9WPSRBTV9ERUZBVUxUX1ZFUkJPU0lUWQorICBBTV9ERUZBVUxUX1Y9JEFNX0RFRkFVTFRfVkVSQk9TSVRZCitmaQorQU1fQkFDS1NMQVNIPSdcJworCitpZiB0ZXN0ICJgY2QgJHNyY2RpciAmJiBwd2RgIiAhPSAiYHB3ZGAiOyB0aGVuCisgICMgVXNlIC1JJChzcmNkaXIpIG9ubHkgd2hlbiAkKHNyY2RpcikgIT0gLiwgc28gdGhhdCBtYWtlJ3Mgb3V0cHV0CisgICMgaXMgbm90IHBvbGx1dGVkIHdpdGggcmVwZWF0ZWQgIi1JLiIKKyAgYW1fX2lzcmM9JyAtSSQoc3JjZGlyKScKKyAgIyB0ZXN0IHRvIHNlZSBpZiBzcmNkaXIgYWxyZWFkeSBjb25maWd1cmVkCisgIGlmIHRlc3QgLWYgJHNyY2Rpci9jb25maWcuc3RhdHVzOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gInNvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkOyBydW4gXCJtYWtlIGRpc3RjbGVhblwiIHRoZXJlIGZpcnN0IiAiJExJTkVOTyIgNQorICBmaQogZmkKIAogIyB0ZXN0IHdoZXRoZXIgd2UgaGF2ZSBjeWdwYXRoCkBAIC0xNjY3LDcgKzQyOTYsNyBAQAogCiAjIERlZmluZSB0aGUgaWRlbnRpdHkgb2YgdGhlIHBhY2thZ2UuCiAgUEFDS0FHRT0nYmlzb24nCi0gVkVSU0lPTj0nMi4zJworIFZFUlNJT049JzIuNycKIAogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCkBAIC0xNjk1LDE3MyArNDMyNCwxMjIgQEAKIAogTUFLRUlORk89JHtNQUtFSU5GTy0iJHthbV9taXNzaW5nX3J1bn1tYWtlaW5mbyJ9CiAKLWluc3RhbGxfc2g9JHtpbnN0YWxsX3NoLSIkYW1fYXV4X2Rpci9pbnN0YWxsLXNoIn0KLQotIyBJbnN0YWxsZWQgYmluYXJpZXMgYXJlIHVzdWFsbHkgc3RyaXBwZWQgdXNpbmcgYHN0cmlwJyB3aGVuIHRoZSB1c2VyCi0jIHJ1biBgbWFrZSBpbnN0YWxsLXN0cmlwJy4gIEhvd2V2ZXIgYHN0cmlwJyBtaWdodCBub3QgYmUgdGhlIHJpZ2h0Ci0jIHRvb2wgdG8gdXNlIGluIGNyb3NzLWNvbXBpbGF0aW9uIGVudmlyb25tZW50cywgdGhlcmVmb3JlIEF1dG9tYWtlCi0jIHdpbGwgaG9ub3IgdGhlIGBTVFJJUCcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gb3ZlcnJ1bGUgdGhpcyBwcm9ncmFtLgotaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0gbm87IHRoZW4KLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgotICBhY19jdl9wcm9nX1NUUklQPSIkU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX1NUUklQPSIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLWZpCi1maQotU1RSSVA9JGFjX2N2X3Byb2dfU1RSSVAKLWlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFNUUklQIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRTVFJJUCIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19TVFJJUCI7IHRoZW4KLSAgYWNfY3RfU1RSSVA9JFNUUklQCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IHN0cmlwOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X1NUUklQK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0iJGFjX2N0X1NUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0ic3RyaXAiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9TVFJJUCIgJiYgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0iOiIKLWZpCi1maQotYWNfY3RfU1RSSVA9JGFjX2N2X3Byb2dfYWNfY3RfU1RSSVAKLWlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X1NUUklQIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9TVFJJUCIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSAgU1RSSVA9JGFjX2N0X1NUUklQCi1lbHNlCi0gIFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKLWZpCi0KLWZpCi1JTlNUQUxMX1NUUklQX1BST0dSQU09Ilwke1NIRUxMfSBcJChpbnN0YWxsX3NoKSAtYyAtcyIKKyMgRm9yIGJldHRlciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgVG8gYmUgcmVtb3ZlZCBvbmNlIEF1dG9tYWtlIDEuOS54CisjIGRpZXMgb3V0IGZvciBnb29kLiAgRm9yIG1vcmUgYmFja2dyb3VuZCwgc2VlOgorIyA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2F1dG9tYWtlLzIwMTItMDcvbXNnMDAwMDEuaHRtbD4KKyMgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9hdXRvbWFrZS8yMDEyLTA3L21zZzAwMDE0Lmh0bWw+Citta2Rpcl9wPSckKE1LRElSX1ApJwogCiAjIFdlIG5lZWQgYXdrIGZvciB0aGUgImNoZWNrIiB0YXJnZXQuICBUaGUgc3lzdGVtICJhd2siIGlzIGJhZCBvbgogIyBzb21lIHBsYXRmb3Jtcy4KLSMgQWx3YXlzIGRlZmluZSBBTVRBUiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKyMgQWx3YXlzIGRlZmluZSBBTVRBUiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gIFllcywgaXQncyBzdGlsbCB1c2VkCisjIGluIHRoZSB3aWxkIDotKCAgV2Ugc2hvdWxkIGZpbmQgYSBwcm9wZXIgd2F5IHRvIGRlcHJlY2F0ZSBpdCAuLi4KK0FNVEFSPSckJHtUQVItdGFyfScKIAotQU1UQVI9JHtBTVRBUi0iJHthbV9taXNzaW5nX3J1bn10YXIifQotCi1hbV9fdGFyPScke0FNVEFSfSBjaG9mIC0gIiQkdGFyZGlyIic7IGFtX191bnRhcj0nJHtBTVRBUn0geGYgLScKK2FtX190YXI9JyQke1RBUi10YXJ9IGNob2YgLSAiJCR0YXJkaXIiJyBhbV9fdW50YXI9JyQke1RBUi10YXJ9IHhmIC0nCiAKIAogCiAKIAotICAgICAgICAgIGFjX2NvbmZpZ19oZWFkZXJzPSIkYWNfY29uZmlnX2hlYWRlcnMgY29uZmlnLmg6Y29uZmlnLmhpbiIKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaWxlbnQtcnVsZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc2lsZW50X3J1bGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc2lsZW50X3J1bGVzOworZmkKKworY2FzZSAkZW5hYmxlX3NpbGVudF9ydWxlcyBpbiAjICgoKAorICB5ZXMpIEFNX0RFRkFVTFRfVkVSQk9TSVRZPTA7OworICAgbm8pIEFNX0RFRkFVTFRfVkVSQk9TSVRZPTE7OworICAgICopIEFNX0RFRkFVTFRfVkVSQk9TSVRZPTA7OworZXNhYworYW1fbWFrZT0ke01BS0UtbWFrZX0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkYW1fbWFrZSBzdXBwb3J0cyBuZXN0ZWQgdmFyaWFibGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJGFtX21ha2Ugc3VwcG9ydHMgbmVzdGVkIHZhcmlhYmxlcy4uLiAiID4mNjsgfQoraWYgJHthbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmICRhc19lY2hvICdUUlVFPSQoQkFSJChWKSkKK0JBUjA9ZmFsc2UKK0JBUjE9dHJ1ZQorVj0xCithbV9fZG9pdDoKKwlAJChUUlVFKQorLlBIT05ZOiBhbV9fZG9pdCcgfCAkYW1fbWFrZSAtZiAtID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcz15ZXMKK2Vsc2UKKyAgYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXM9bm8KK2ZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcyIgPiY1CiskYXNfZWNobyAiJGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzIiA+JjY7IH0KK2lmIHRlc3QgJGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzID0geWVzOyB0aGVuCisgICAgQU1fVj0nJChWKScKKyAgQU1fREVGQVVMVF9WPSckKEFNX0RFRkFVTFRfVkVSQk9TSVRZKScKK2Vsc2UKKyAgQU1fVj0kQU1fREVGQVVMVF9WRVJCT1NJVFkKKyAgQU1fREVGQVVMVF9WPSRBTV9ERUZBVUxUX1ZFUkJPU0lUWQorZmkKK0FNX0JBQ0tTTEFTSD0nXCcKKworYWNfY29uZmlnX2hlYWRlcnM9IiRhY19jb25maWdfaGVhZGVycyBsaWIvY29uZmlnLmg6bGliL2NvbmZpZy5pbi5oIgogCiAKLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgX0dOVV9TT1VSQ0UgMQotX0FDRU9GCi0KLQorIyBDaGVja3MgZm9yIHRoZSBjb21waWxlci4KIERFUERJUj0iJHthbV9fbGVhZGluZ19kb3R9ZGVwcyIKIAotICAgICAgICAgIGFjX2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyBkZXBmaWxlcyIKK2FjX2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyBkZXBmaWxlcyIKIAogCiBhbV9tYWtlPSR7TUFLRS1tYWtlfQogY2F0ID4gY29uZmluYyA8PCAnRU5EJwogYW1fX2RvaXQ6Ci0JQGVjaG8gZG9uZQorCUBlY2hvIHRoaXMgaXMgdGhlIGFtX19kb2l0IHRhcmdldAogLlBIT05ZOiBhbV9fZG9pdAogRU5ECiAjIElmIHdlIGRvbid0IGZpbmQgYW4gaW5jbHVkZSBkaXJlY3RpdmUsIGp1c3QgY29tbWVudCBvdXQgdGhlIGNvZGUuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdHlsZSBvZiBpbmNsdWRlIHVzZWQgYnkgJGFtX21ha2UuLi4gJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdHlsZSBvZiBpbmNsdWRlIHVzZWQgYnkgJGFtX21ha2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZS4uLiAiID4mNjsgfQogYW1fX2luY2x1ZGU9IiMiCiBhbV9fcXVvdGU9CiBfYW1fcmVzdWx0PW5vbmUKICMgRmlyc3QgdHJ5IEdOVSBtYWtlIHN0eWxlIGluY2x1ZGUuCiBlY2hvICJpbmNsdWRlIGNvbmZpbmMiID4gY29uZm1mCi0jIFdlIGdyZXAgb3V0IGBFbnRlcmluZyBkaXJlY3RvcnknIGFuZCBgTGVhdmluZyBkaXJlY3RvcnknCi0jIG1lc3NhZ2VzIHdoaWNoIGNhbiBvY2N1ciBpZiBgdycgZW5kcyB1cCBpbiBNQUtFRkxBR1MuCi0jIEluIHBhcnRpY3VsYXIgd2UgZG9uJ3QgbG9vayBhdCBgXm1ha2U6JyBiZWNhdXNlIEdOVSBtYWtlIG1pZ2h0Ci0jIGJlIGludm9rZWQgdW5kZXIgc29tZSBvdGhlciBuYW1lICh1c3VhbGx5ICJnbWFrZSIpLCBpbiB3aGljaAotIyBjYXNlIGl0IHByaW50cyBpdHMgbmV3IG5hbWUgaW5zdGVhZCBvZiBgbWFrZScuCi1pZiB0ZXN0ICJgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbCB8IGdyZXAgLXYgJ2luZyBkaXJlY3RvcnknYCIgPSAiZG9uZSI7IHRoZW4KLSAgIGFtX19pbmNsdWRlPWluY2x1ZGUKLSAgIGFtX19xdW90ZT0KLSAgIF9hbV9yZXN1bHQ9R05VCi1maQorIyBJZ25vcmUgYWxsIGtpbmRzIG9mIGFkZGl0aW9uYWwgb3V0cHV0IGZyb20gJ21ha2UnLgorY2FzZSBgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAgaW4gIygKKyp0aGVcIGFtX19kb2l0XCB0YXJnZXQqKQorICBhbV9faW5jbHVkZT1pbmNsdWRlCisgIGFtX19xdW90ZT0KKyAgX2FtX3Jlc3VsdD1HTlUKKyAgOzsKK2VzYWMKICMgTm93IHRyeSBCU0QgbWFrZSBzdHlsZSBpbmNsdWRlLgogaWYgdGVzdCAiJGFtX19pbmNsdWRlIiA9ICIjIjsgdGhlbgogICAgZWNobyAnLmluY2x1ZGUgImNvbmZpbmMiJyA+IGNvbmZtZgotICAgaWYgdGVzdCAiYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIiA9ICJkb25lIjsgdGhlbgotICAgICAgYW1fX2luY2x1ZGU9LmluY2x1ZGUKLSAgICAgIGFtX19xdW90ZT0iXCIiCi0gICAgICBfYW1fcmVzdWx0PUJTRAotICAgZmkKKyAgIGNhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIGluICMoCisgICAqdGhlXCBhbV9fZG9pdFwgdGFyZ2V0KikKKyAgICAgYW1fX2luY2x1ZGU9LmluY2x1ZGUKKyAgICAgYW1fX3F1b3RlPSJcIiIKKyAgICAgX2FtX3Jlc3VsdD1CU0QKKyAgICAgOzsKKyAgIGVzYWMKIGZpCiAKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJF9hbV9yZXN1bHQiID4mNQotZWNobyAiJHtFQ0hPX1R9JF9hbV9yZXN1bHQiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRfYW1fcmVzdWx0IiA+JjUKKyRhc19lY2hvICIkX2FtX3Jlc3VsdCIgPiY2OyB9CiBybSAtZiBjb25maW5jIGNvbmZtZgogCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyBvciAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIgorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmc7CitmaQogCi1maTsKIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgogICBhbV9kZXBjb21wPSIkYWNfYXV4X2Rpci9kZXBjb21wIgogICBBTURFUEJBQ0tTTEFTSD0nXCcKKyAgYW1fX25vZGVwPSdfbm8nCiBmaQotCi0KLWlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgorIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgogICBBTURFUF9UUlVFPQogICBBTURFUF9GQUxTRT0nIycKIGVsc2UKQEAgLTE4NzAsNyArNDQ0OCw2IEBACiBmaQogCiAKLQogYWNfZXh0PWMKIGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCiBhY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCkBAIC0xODc5LDEwICs0NDU2LDEwIEBACiBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCiAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1nY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgogc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Z2NjOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KICAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KQEAgLTE4OTIsMzUgKzQ0NjksMzcgQEAKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KICAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWdjYyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQogZG9uZQotZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKIGZpCiBmaQogQ0M9JGFjX2N2X3Byb2dfQ0MKIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRDQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCisKIGZpCiBpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19DQyI7IHRoZW4KICAgYWNfY3RfQ0M9JENDCiAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSBnY2M7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgogICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgpAQCAtMTkzMCwzOSArNDUwOSw1MCBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgogICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9ImdjYyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQogZG9uZQotZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKIGZpCiBmaQogYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9DQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCi0gIENDPSRhY19jdF9DQworICBpZiB0ZXN0ICJ4JGFjX2N0X0NDIiA9IHg7IHRoZW4KKyAgICBDQz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIENDPSRhY19jdF9DQworICBmaQogZWxzZQogICBDQz0iJGFjX2N2X3Byb2dfQ0MiCiBmaQogCiBpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCi0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWNjOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KICAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KQEAgLTE5NzIsNzcgKzQ1NjIsMzcgQEAKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KICAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWNjIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAogZmkKIGZpCiBDQz0kYWNfY3ZfcHJvZ19DQwogaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JENDIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19DQyI7IHRoZW4KLSAgYWNfY3RfQ0M9JENDCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGNjOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iY2MiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKKwogICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLWFjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCi1pZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3RfQ0MiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0gIENDPSRhY19jdF9DQwotZWxzZQotICBDQz0iJGFjX2N2X3Byb2dfQ0MiCi1maQotCiBmaQogaWYgdGVzdCAteiAiJENDIjsgdGhlbgogICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSBjYzsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCiAgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCkBAIC0yMDUzLDE4ICs0NjAzLDE5IEBACiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCiAgICAgaWYgdGVzdCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPSAiL3Vzci91Y2IvY2MiOyB0aGVuCiAgICAgICAgYWNfcHJvZ19yZWplY3RlZD15ZXMKICAgICAgICBjb250aW51ZQogICAgICBmaQogICAgIGFjX2N2X3Byb2dfQ0M9ImNjIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAogaWYgdGVzdCAkYWNfcHJvZ19yZWplY3RlZCA9IHllczsgdGhlbgogICAjIFdlIGZvdW5kIGEgYm9nb24gaW4gdGhlIHBhdGgsIHNvIG1ha2Ugc3VyZSB3ZSBuZXZlciB1c2UgaXQuCkBAIC0yMDgyLDI0ICs0NjMzLDI1IEBACiBmaQogQ0M9JGFjX2N2X3Byb2dfQ0MKIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRDQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCisKIGZpCiBpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCiAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgZm9yIGFjX3Byb2cgaW4gY2wKKyAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCiAgIGRvCiAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgogICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgpAQCAtMjEwOSwzOSArNDY2MSw0MSBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgogICAgIGFjX2N2X3Byb2dfQ0M9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAogZmkKIGZpCiBDQz0kYWNfY3ZfcHJvZ19DQwogaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JENDIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKKwogICAgIHRlc3QgLW4gIiRDQyIgJiYgYnJlYWsKICAgZG9uZQogZmkKIGlmIHRlc3QgLXogIiRDQyI7IHRoZW4KICAgYWNfY3RfQ0M9JENDCi0gIGZvciBhY19wcm9nIGluIGNsCisgIGZvciBhY19wcm9nIGluIGNsLmV4ZQogZG8KICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgogICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgpAQCAtMjE1MSw2NiArNDcwNSw3OCBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgogICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19wcm9nIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAogZmkKIGZpCiBhY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQwogaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0NDIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0NDIiA+JjY7IH0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKKwogICB0ZXN0IC1uICIkYWNfY3RfQ0MiICYmIGJyZWFrCiBkb25lCiAKLSAgQ0M9JGFjX2N0X0NDCisgIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgorICAgIENDPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQ0M9JGFjX2N0X0NDCisgIGZpCiBmaQogCiBmaQogCiAKLXRlc3QgLXogIiRDQyIgJiYgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK3Rlc3QgLXogIiRDQyIgJiYgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KIAogIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgotZWNobyAiJGFzX21lOiRMSU5FTk86IiBcCi0gICAgICJjaGVja2luZyBmb3IgQyBjb21waWxlciB2ZXJzaW9uIiA+JjUKLWFjX2NvbXBpbGVyPWBzZXQgWCAkYWNfY29tcGlsZTsgZWNobyAkMmAKLXsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA8L2Rldi9udWxsID4mNVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlciAtLXZlcnNpb24gPC9kZXYvbnVsbCA+JjUpIDI+JjUKKyRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQorc2V0IFggJGFjX2NvbXBpbGUKK2FjX2NvbXBpbGVyPSQyCitmb3IgYWNfb3B0aW9uIGluIC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCisgIHsgeyBhY190cnk9IiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IikgMj5jb25mdGVzdC5lcnIKICAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLXsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVyIC12IDwvZGV2L251bGwgPiY1XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGVyIC12IDwvZGV2L251bGwgPiY1KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci17IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlciAtViA8L2Rldi9udWxsID4mNVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlciAtViA8L2Rldi9udWxsID4mNSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIHNlZCAnMTBhXAorLi4uIHJlc3Qgb2Ygc3RkZXJyIG91dHB1dCBkZWxldGVkIC4uLgorICAgICAgICAgMTBxJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KK2RvbmUKIAotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludApAQCAtMjIyMiwxMTIgKzQ3ODgsMTA4IEBACiB9CiBfQUNFT0YKIGFjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCi1hY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzIGEub3V0IGEuZXhlIGIub3V0IgorYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyBhLm91dCBhLm91dC5kU1lNIGEuZXhlIGIub3V0IgogIyBUcnkgdG8gY3JlYXRlIGFuIGV4ZWN1dGFibGUgd2l0aG91dCAtbyBmaXJzdCwgZGlzcmVnYXJkIGEub3V0LgogIyBJdCB3aWxsIGhlbHAgdXMgZGlhZ25vc2UgYnJva2VuIGNvbXBpbGVycywgYW5kIGZpbmRpbmcgb3V0IGFuIGludHVpdGlvbgogIyBvZiBleGVleHQuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lLi4uICRFQ0hPX0MiID4mNgotYWNfbGlua19kZWZhdWx0PWBlY2hvICIkYWNfbGluayIgfCBzZWQgJ3MvIC1vICpjb25mdGVzdFteIF0qLy8nYAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua19kZWZhdWx0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmtfZGVmYXVsdCkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgotICAjIEZpbmQgdGhlIG91dHB1dCwgc3RhcnRpbmcgZnJvbSB0aGUgbW9zdCBsaWtlbHkuICBUaGlzIHNjaGVtZSBpcwotIyBub3Qgcm9idXN0IHRvIGp1bmsgaW4gYC4nLCBoZW5jZSBnbyB0byB3aWxkY2FyZHMgKGEuKikgb25seSBhcyBhIGxhc3QKLSMgcmVzb3J0LgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MuLi4gIiA+JjY7IH0KK2FjX2xpbmtfZGVmYXVsdD1gJGFzX2VjaG8gIiRhY19saW5rIiB8IHNlZCAncy8gLW8gKmNvbmZ0ZXN0W14gXSovLydgCiAKLSMgQmUgY2FyZWZ1bCB0byBpbml0aWFsaXplIHRoaXMgdmFyaWFibGUsIHNpbmNlIGl0IHVzZWQgdG8gYmUgY2FjaGVkLgotIyBPdGhlcndpc2UgYW4gb2xkIGNhY2hlIHZhbHVlIG9mIGBubycgbGVkIHRvIGBFWEVFWFQgPSBubycgaW4gYSBNYWtlZmlsZS4KLWFjX2N2X2V4ZWV4dD0KLSMgYi5vdXQgaXMgY3JlYXRlZCBieSBpOTYwIGNvbXBpbGVycy4KLWZvciBhY19maWxlIGluIGFfb3V0LmV4ZSBhLmV4ZSBjb25mdGVzdC5leGUgYS5vdXQgY29uZnRlc3QgYS4qIGNvbmZ0ZXN0LiogYi5vdXQKKyMgVGhlIHBvc3NpYmxlIG91dHB1dCBmaWxlczoKK2FjX2ZpbGVzPSJhLm91dCBjb25mdGVzdC5leGUgY29uZnRlc3QgYS5leGUgYV9vdXQuZXhlIGIub3V0IGNvbmZ0ZXN0LioiCisKK2FjX3JtZmlsZXM9Citmb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMKK2RvCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7CisgICAgKiApIGFjX3JtZmlsZXM9IiRhY19ybWZpbGVzICRhY19maWxlIjs7CisgIGVzYWMKK2RvbmUKK3JtIC1mICRhY19ybWZpbGVzCisKK2lmIHsgeyBhY190cnk9IiRhY19saW5rX2RlZmF1bHQiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rX2RlZmF1bHQiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CisgICMgQXV0b2NvbmYtMi4xMyBjb3VsZCBzZXQgdGhlIGFjX2N2X2V4ZWV4dCB2YXJpYWJsZSB0byBgbm8nLgorIyBTbyBpZ25vcmUgYSB2YWx1ZSBvZiBgbm8nLCBvdGhlcndpc2UgdGhpcyB3b3VsZCBsZWFkIHRvIGBFWEVFWFQgPSBubycKKyMgaW4gYSBNYWtlZmlsZS4gIFdlIHNob3VsZCBub3Qgb3ZlcnJpZGUgYWNfY3ZfZXhlZXh0IGlmIGl0IHdhcyBjYWNoZWQsCisjIHNvIHRoYXQgdGhlIHVzZXIgY2FuIHNob3J0LWNpcmN1aXQgdGhpcyB0ZXN0IGZvciBjb21waWxlcnMgdW5rbm93biB0bworIyBBdXRvY29uZi4KK2ZvciBhY19maWxlIGluICRhY19maWxlcyAnJwogZG8KICAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCiAgIGNhc2UgJGFjX2ZpbGUgaW4KLSAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubyB8ICoub2JqICkKLQk7OwotICAgIGNvbmZ0ZXN0LiRhY19leHQgKQotCSMgVGhpcyBpcyB0aGUgc291cmNlIGZpbGUuCisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKQogCTs7CiAgICAgW2FiXS5vdXQgKQogCSMgV2UgZm91bmQgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSwgYnV0IGV4ZWV4dD0nJyBpcyBtb3N0CiAJIyBjZXJ0YWlubHkgcmlnaHQuCiAJYnJlYWs7OwogICAgICouKiApCi0JYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCi0JIyBGSVhNRTogSSBiZWxpZXZlIHdlIGV4cG9ydCBhY19jdl9leGVleHQgZm9yIExpYnRvb2wsCi0JIyBidXQgaXQgd291bGQgYmUgY29vbCB0byBmaW5kIG91dCBpZiBpdCdzIHRydWUuICBEb2VzIGFueWJvZHkKLQkjIG1haW50YWluIExpYnRvb2w/IC0tYWtpbS4KLQlleHBvcnQgYWNfY3ZfZXhlZXh0CisJaWYgdGVzdCAiJHthY19jdl9leGVleHQrc2V0fSIgPSBzZXQgJiYgdGVzdCAiJGFjX2N2X2V4ZWV4dCIgIT0gbm87CisJdGhlbiA6OyBlbHNlCisJICAgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCisJZmkKKwkjIFdlIHNldCBhY19jdl9leGVleHQgaGVyZSBiZWNhdXNlIHRoZSBsYXRlciB0ZXN0IGZvciBpdCBpcyBub3QKKwkjIHNhZmU6IGNyb3NzIGNvbXBpbGVycyBtYXkgbm90IGFkZCB0aGUgc3VmZml4IGlmIGdpdmVuIGFuIGAtbycKKwkjIGFyZ3VtZW50LCBzbyB3ZSBtYXkgbmVlZCB0byBrbm93IGl0IGF0IHRoYXQgcG9pbnQgYWxyZWFkeS4KKwkjIEV2ZW4gaWYgdGhpcyBzZWN0aW9uIGxvb2tzIGNydWZ0eTogaXQgaGFzIHRoZSBhZHZhbnRhZ2Ugb2YKKwkjIGFjdHVhbGx5IHdvcmtpbmcuCiAJYnJlYWs7OwogICAgICogKQogCWJyZWFrOzsKICAgZXNhYwogZG9uZQordGVzdCAiJGFjX2N2X2V4ZWV4dCIgPSBubyAmJiBhY19jdl9leGVleHQ9CisKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgYWNfZmlsZT0nJworZmkKK2lmIHRlc3QgLXogIiRhY19maWxlIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKLXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgNzcpOyBleGl0IDc3OyB9OyB9Cit7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yIDc3ICJDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CiBmaQotCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUuLi4gIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFjX2ZpbGUiID4mNjsgfQogYWNfZXhlZXh0PSRhY19jdl9leGVleHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19maWxlIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19maWxlIiA+JjYKIAotIyBDaGVjayB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCi0jIHRoZSBjb21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3JrcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MuLi4gJEVDSE9fQyIgPiY2Ci0jIEZJWE1FOiBUaGVzZSBjcm9zcyBjb21waWxlciBoYWNrcyBzaG91bGQgYmUgcmVtb3ZlZCBmb3IgQXV0b2NvbmYgMy4wCi0jIElmIG5vdCBjcm9zcyBjb21waWxpbmcsIGNoZWNrIHRoYXQgd2UgY2FuIHJ1biBhIHNpbXBsZSBwcm9ncmFtLgotaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0geWVzOyB0aGVuCi0gIGlmIHsgYWNfdHJ5PScuLyRhY19maWxlJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gICAgY3Jvc3NfY29tcGlsaW5nPW5vCi0gIGVsc2UKLSAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG1heWJlOyB0aGVuCi0JY3Jvc3NfY29tcGlsaW5nPXllcwotICAgIGVsc2UKLQl7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgcnVuIEMgY29tcGlsZWQgcHJvZ3JhbXMuCi1JZiB5b3UgbWVhbnQgdG8gY3Jvc3MgY29tcGlsZSwgdXNlIFxgLS1ob3N0Jy4KLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBydW4gQyBjb21waWxlZCBwcm9ncmFtcy4KLUlmIHlvdSBtZWFudCB0byBjcm9zcyBjb21waWxlLCB1c2UgXGAtLWhvc3QnLgotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICBmaQotICBmaQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotCi1ybSAtZiBhLm91dCBhLmV4ZSBjb25mdGVzdCRhY19jdl9leGVleHQgYi5vdXQKK3JtIC1mIC1yIGEub3V0IGEub3V0LmRTWU0gYS5leGUgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGIub3V0CiBhY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQotIyBDaGVjayB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCi0jIHRoZSBjb21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nLi4uICRFQ0hPX0MiID4mNgotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGNyb3NzX2NvbXBpbGluZyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kY3Jvc3NfY29tcGlsaW5nIiA+JjYKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzLi4uICRFQ0hPX0MiID4mNgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPiY1Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBleGVjdXRhYmxlcy4uLiAiID4mNjsgfQoraWYgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CiAgICMgSWYgYm90aCBgY29uZnRlc3QuZXhlJyBhbmQgYGNvbmZ0ZXN0JyBhcmUgYHByZXNlbnQnICh3ZWxsLCBvYnNlcnZhYmxlKQogIyBjYXRjaCBgY29uZnRlc3QuZXhlJy4gIEZvciBpbnN0YW5jZSB3aXRoIEN5Z3dpbiwgYGxzIGNvbmZ0ZXN0JyB3aWxsCiAjIHdvcmsgcHJvcGVybHkgKGkuZS4sIHJlZmVyIHRvIGBjb25mdGVzdC5leGUnKSwgd2hpbGUgaXQgd29uJ3Qgd2l0aApAQCAtMjMzNSwzOCArNDg5Nyw5MCBAQAogZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QuZXhlIGNvbmZ0ZXN0IGNvbmZ0ZXN0Lio7IGRvCiAgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQogICBjYXNlICRhY19maWxlIGluCi0gICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm8gfCAqLm9iaiApIDs7CisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKSA7OwogICAgICouKiApIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAotCSAgZXhwb3J0IGFjX2N2X2V4ZWV4dAogCSAgYnJlYWs7OwogICAgICogKSBicmVhazs7CiAgIGVzYWMKIGRvbmUKIGVsc2UKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIGV4ZWN1dGFibGVzOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIGV4ZWN1dGFibGVzOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIGV4ZWN1dGFibGVzOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluaworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KIGZpCi0KLXJtIC1mIGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2V4ZWV4dCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZXhlZXh0IiA+JjYKK3JtIC1mIGNvbmZ0ZXN0IGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9leGVleHQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9leGVleHQiID4mNjsgfQogCiBybSAtZiBjb25mdGVzdC4kYWNfZXh0CiBFWEVFWFQ9JGFjX2N2X2V4ZWV4dAogYWNfZXhlZXh0PSRFWEVFWFQKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9vYmpleHQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgoraW50CittYWluICgpCit7CitGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC5vdXQiLCAidyIpOworIHJldHVybiBmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMDsKKworICA7CisgIHJldHVybiAwOworfQogX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgY29uZnRlc3Qub3V0IgorIyBDaGVjayB0aGF0IHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKKyMgdGhlIGNvbXBpbGVyIGlzIGJyb2tlbiwgb3Igd2UgY3Jvc3MgY29tcGlsZS4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0geWVzOyB0aGVuCisgIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisgIGlmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCcKKyAgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuCisgICAgY3Jvc3NfY29tcGlsaW5nPW5vCisgIGVsc2UKKyAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG1heWJlOyB0aGVuCisJY3Jvc3NfY29tcGlsaW5nPXllcworICAgIGVsc2UKKwl7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgcnVuIEMgY29tcGlsZWQgcHJvZ3JhbXMuCitJZiB5b3UgbWVhbnQgdG8gY3Jvc3MgY29tcGlsZSwgdXNlIFxgLS1ob3N0Jy4KK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisgICAgZmkKKyAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGNyb3NzX2NvbXBpbGluZyIgPiY1CiskYXNfZWNobyAiJGNyb3NzX2NvbXBpbGluZyIgPiY2OyB9CisKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGNvbmZ0ZXN0Lm91dAorYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfb2JqZXh0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiBpbnQKQEAgLTIzNzgsNDUgKzQ5OTIsNDYgQEAKIH0KIF9BQ0VPRgogcm0gLWYgY29uZnRlc3QubyBjb25mdGVzdC5vYmoKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQoraWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgotICBmb3IgYWNfZmlsZSBpbiBgKGxzIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqOyBscyBjb25mdGVzdC4qKSAyPi9kZXYvbnVsbGA7IGRvCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoKKyAgZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QubyBjb25mdGVzdC5vYmogY29uZnRlc3QuKjsgZG8KKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlOwogICBjYXNlICRhY19maWxlIGluCi0gICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgKSA7OworICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSApIDs7CiAgICAgKikgYWNfY3Zfb2JqZXh0PWBleHByICIkYWNfZmlsZSIgOiAnLipcLlwoLipcKSdgCiAgICAgICAgYnJlYWs7OwogICBlc2FjCiBkb25lCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQogc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCi17IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIG9iamVjdCBmaWxlczogY2Fubm90IGNvbXBpbGUKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Cit7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KIGZpCi0KIHJtIC1mIGNvbmZ0ZXN0LiRhY19jdl9vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9vYmpleHQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X29iamV4dCIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X29iamV4dCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X29iamV4dCIgPiY2OyB9CiBPQkpFWFQ9JGFjX2N2X29iamV4dAogYWNfb2JqZXh0PSRPQkpFWFQKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2NfY29tcGlsZXJfZ251K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfY19jb21waWxlcl9nbnUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiBpbnQKQEAgLTI0MzAsNTQgKzUwNDUsMzQgQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2NvbXBpbGVyX2dudT15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY29tcGlsZXJfZ251PW5vCisgIGFjX2NvbXBpbGVyX2dudT1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogYWNfY3ZfY19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQogCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY2Ci1HQ0M9YHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllcyAmJiBlY2hvIHllc2AKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY2OyB9CitpZiB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXM7IHRoZW4KKyAgR0NDPXllcworZWxzZQorICBHQ0M9CitmaQogYWNfdGVzdF9DRkxBR1M9JHtDRkxBR1Mrc2V0fQogYWNfc2F2ZV9DRkxBR1M9JENGTEFHUwotQ0ZMQUdTPSItZyIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19nK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2NjX2crOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgYWNfc2F2ZV9jX3dlcnJvcl9mbGFnPSRhY19jX3dlcnJvcl9mbGFnCisgICBhY19jX3dlcnJvcl9mbGFnPXllcworICAgYWNfY3ZfcHJvZ19jY19nPW5vCisgICBDRkxBR1M9Ii1nIgorICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiBpbnQKQEAgLTI0ODgsMzggKzUwODMsNDkgQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X3Byb2dfY2NfZz15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgQ0ZMQUdTPSIiCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLWFjX2N2X3Byb2dfY2NfZz1ubworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZworCSBDRkxBR1M9Ii1nIgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19nPXllcwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfY2NfZyIgPiY2CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19nIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19nIiA+JjY7IH0KIGlmIHRlc3QgIiRhY190ZXN0X0NGTEFHUyIgPSBzZXQ7IHRoZW4KICAgQ0ZMQUdTPSRhY19zYXZlX0NGTEFHUwogZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2NjX2cgPSB5ZXM7IHRoZW4KQEAgLTI1MzUsMjMgKzUxNDEsMTggQEAKICAgICBDRkxBR1M9CiAgIGZpCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBBTlNJIEMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgQU5TSSBDLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX3N0ZGMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19jY19jODkrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBhY19jdl9wcm9nX2NjX3N0ZGM9bm8KKyAgYWNfY3ZfcHJvZ19jY19jODk9bm8KIGFjX3NhdmVfQ0M9JENDCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CitzdHJ1Y3Qgc3RhdDsKIC8qIE1vc3Qgb2YgdGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgc3RvbGVuIGZyb20gUkNTIDUuNydzIHNyYy9jb25mLnNoLiAgKi8KIHN0cnVjdCBidWYgeyBpbnQgeDsgfTsKIEZJTEUgKiAoKnJjc29wZW4pIChzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCk7CkBAIC0yNTc0LDEyICs1MTc1LDE3IEBACiAvKiBPU0YgNC4wIENvbXBhcSBjYyBpcyBzb21lIHNvcnQgb2YgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdC4gIEl0IGhhcwogICAgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgc3R1ZmYsIGJ1dCBub3QgJ1x4SEgnIGhleCBjaGFyYWN0ZXIgY29uc3RhbnRzLgogICAgVGhlc2UgZG9uJ3QgcHJvdm9rZSBhbiBlcnJvciB1bmZvcnR1bmF0ZWx5LCBpbnN0ZWFkIGFyZSBzaWxlbnRseSB0cmVhdGVkCi0gICBhcyAneCcuICBUaGUgZm9sbG93aW5nIGluZHVjZXMgYW4gZXJyb3IsIHVudGlsIC1zdGQxIGlzIGFkZGVkIHRvIGdldAorICAgYXMgJ3gnLiAgVGhlIGZvbGxvd2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAtc3RkIGlzIGFkZGVkIHRvIGdldAogICAgcHJvcGVyIEFOU0kgbW9kZS4gIEN1cmlvdXNseSAnXHgwMCchPSd4JyBhbHdheXMgY29tZXMgb3V0IHRydWUsIGZvciBhbgogICAgYXJyYXkgc2l6ZSBhdCBsZWFzdC4gIEl0J3MgbmVjZXNzYXJ5IHRvIHdyaXRlICdceDAwJz09MCB0byBnZXQgc29tZXRoaW5nCi0gICB0aGF0J3MgdHJ1ZSBvbmx5IHdpdGggLXN0ZDEuICAqLworICAgdGhhdCdzIHRydWUgb25seSB3aXRoIC1zdGQuICAqLwogaW50IG9zZjRfY2NfYXJyYXkgWydceDAwJyA9PSAwID8gMSA6IC0xXTsKIAorLyogSUJNIEMgNiBmb3IgQUlYIGlzIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQsIGJ1dCBpdCByZXBsYWNlcyBtYWNybyBwYXJhbWV0ZXJzCisgICBpbnNpZGUgc3RyaW5ncyBhbmQgY2hhcmFjdGVyIGNvbnN0YW50cy4gICovCisjZGVmaW5lIEZPTyh4KSAneCcKK2ludCB4bGM2X2NjX2FycmF5W0ZPTyhhKSA9PSAneCcgPyAxIDogLTFdOworCiBpbnQgdGVzdCAoaW50IGksIGRvdWJsZSB4KTsKIHN0cnVjdCBzMSB7aW50ICgqZikgKGludCBhKTt9Owogc3RydWN0IHMyIHtpbnQgKCpmKSAoZG91YmxlIGEpO307CkBAIC0yNTk0LDIwMSArNTIwMCwzNyBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotIyBEb24ndCB0cnkgZ2NjIC1hbnNpOyB0aGF0IHR1cm5zIG9mZiB1c2VmdWwgZXh0ZW5zaW9ucyBhbmQKLSMgYnJlYWtzIHNvbWUgc3lzdGVtcycgaGVhZGVyIGZpbGVzLgotIyBBSVgJCQktcWxhbmdsdmw9YW5zaQotIyBVbHRyaXggYW5kIE9TRi8xCS1zdGQxCi0jIEhQLVVYIDEwLjIwIGFuZCBsYXRlcgktQWUKLSMgSFAtVVggb2xkZXIgdmVyc2lvbnMJLUFhIC1EX0hQVVhfU09VUkNFCi0jIFNWUjQJCQktWGMgLURfX0VYVEVOU0lPTlNfXwotZm9yIGFjX2FyZyBpbiAiIiAtcWxhbmdsdmw9YW5zaSAtc3RkMSAtQWUgIi1BYSAtRF9IUFVYX1NPVVJDRSIgIi1YYyAtRF9fRVhURU5TSU9OU19fIgorZm9yIGFjX2FyZyBpbiAnJyAtcWxhbmdsdmw9ZXh0Yzg5IC1xbGFuZ2x2bD1hbnNpIC1zdGQgXAorCS1BZSAiLUFhIC1EX0hQVVhfU09VUkNFIiAiLVhjIC1EX19FWFRFTlNJT05TX18iCiBkbwogICBDQz0iJGFjX3NhdmVfQ0MgJGFjX2FyZyIKLSAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfcHJvZ19jY19zdGRjPSRhY19hcmcKLWJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KKyAgaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2NjX2M4OT0kYWNfYXJnCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0gInhubyIgJiYgYnJlYWsKIGRvbmUKLXJtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QuJGFjX29iamV4dAorcm0gLWYgY29uZnRlc3QuJGFjX2V4dAogQ0M9JGFjX3NhdmVfQ0MKIAogZmkKLQotY2FzZSAieCRhY19jdl9wcm9nX2NjX3N0ZGMiIGluCi0gIHh8eG5vKQotICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vbmUgbmVlZGVkIiA+JjYgOzsKKyMgQUNfQ0FDSEVfVkFMCitjYXNlICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiBpbgorICB4KQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1CiskYXNfZWNobyAibm9uZSBuZWVkZWQiID4mNjsgfSA7OworICB4bm8pCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUKKyRhc19lY2hvICJ1bnN1cHBvcnRlZCIgPiY2OyB9IDs7CiAgICopCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfY2Nfc3RkYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19jY19zdGRjIiA+JjYKLSAgICBDQz0iJENDICRhY19jdl9wcm9nX2NjX3N0ZGMiIDs7CisgICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19jODkiCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2M4OSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjY7IH0gOzsKIGVzYWMKLQotIyBTb21lIHBlb3BsZSB1c2UgYSBDKysgY29tcGlsZXIgdG8gY29tcGlsZSBDLiAgU2luY2Ugd2UgdXNlIGBleGl0JywKLSMgaW4gQysrIHdlIG5lZWQgdG8gZGVjbGFyZSBpdC4gIEluIGNhc2Ugc29tZW9uZSB1c2VzIHRoZSBzYW1lIGNvbXBpbGVyCi0jIGZvciBib3RoIGNvbXBpbGluZyBDIGFuZCBDKysgd2UgbmVlZCB0byBoYXZlIHRoZSBDKysgY29tcGlsZXIgZGVjaWRlCi0jIHRoZSBkZWNsYXJhdGlvbiBvZiBleGl0LCBzaW5jZSBpdCdzIHRoZSBtb3N0IGRlbWFuZGluZyBlbnZpcm9ubWVudC4KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotI2lmbmRlZiBfX2NwbHVzcGx1cwotICBjaG9rZSBtZQotI2VuZGlmCi1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGZvciBhY19kZWNsYXJhdGlvbiBpbiBcCi0gICAnJyBcCi0gICAnZXh0ZXJuICJDIiB2b2lkIHN0ZDo6ZXhpdCAoaW50KSB0aHJvdyAoKTsgdXNpbmcgc3RkOjpleGl0OycgXAotICAgJ2V4dGVybiAiQyIgdm9pZCBzdGQ6OmV4aXQgKGludCk7IHVzaW5nIHN0ZDo6ZXhpdDsnIFwKLSAgICdleHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KSB0aHJvdyAoKTsnIFwKLSAgICdleHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KTsnIFwKLSAgICd2b2lkIGV4aXQgKGludCk7JwotZG8KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfZGVjbGFyYXRpb24KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLWludAotbWFpbiAoKQotewotZXhpdCAoNDIpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICA6Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWNvbnRpbnVlCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19kZWNsYXJhdGlvbgotaW50Ci1tYWluICgpCi17Ci1leGl0ICg0Mik7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CitpZiB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSB4bm87IHRoZW4gOgogCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZG9uZQotcm0gLWYgY29uZnRlc3QqCi1pZiB0ZXN0IC1uICIkYWNfZGVjbGFyYXRpb24iOyB0aGVuCi0gIGVjaG8gJyNpZmRlZiBfX2NwbHVzcGx1cycgPj5jb25mZGVmcy5oCi0gIGVjaG8gJGFjX2RlY2xhcmF0aW9uICAgICAgPj5jb25mZGVmcy5oCi0gIGVjaG8gJyNlbmRpZicgICAgICAgICAgICAgPj5jb25mZGVmcy5oCi1maQogCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiBhY19leHQ9YwogYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKIGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKQEAgLTI3OTcsMTcgKzUyMzksMTggQEAKIAogZGVwY2M9IiRDQyIgICBhbV9jb21waWxlcl9saXN0PQogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MuLi4gIiA+JjY7IH0KK2lmICR7YW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC16ICIkQU1ERVBfVFJVRSIgJiYgdGVzdCAtZiAiJGFtX2RlcGNvbXAiOyB0aGVuCiAgICMgV2UgbWFrZSBhIHN1YmRpciBhbmQgZG8gdGhlIHRlc3RzIHRoZXJlLiAgT3RoZXJ3aXNlIHdlIGNhbiBlbmQgdXAKICAgIyBtYWtpbmcgYm9ndXMgZmlsZXMgdGhhdCB3ZSBkb24ndCBrbm93IGFib3V0IGFuZCBuZXZlciByZW1vdmUuICBGb3IKICAgIyBpbnN0YW5jZSBpdCB3YXMgcmVwb3J0ZWQgdGhhdCBvbiBIUC1VWCB0aGUgZ2NjIHRlc3Qgd2lsbCBlbmQgdXAKLSAgIyBtYWtpbmcgYSBkdW1teSBmaWxlIG5hbWVkIGBEJyAtLSBiZWNhdXNlIGAtTUQnIG1lYW5zIGBwdXQgdGhlIG91dHB1dAotICAjIGluIEQnLgorICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgJ0QnIC0tIGJlY2F1c2UgJy1NRCcgbWVhbnMgInB1dCB0aGUgb3V0cHV0CisgICMgaW4gRCIuCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKICAgbWtkaXIgY29uZnRlc3QuZGlyCiAgICMgQ29weSBkZXBjb21wIHRvIHN1YmRpciBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b24ndCBmaW5kIGl0IGlmIHdlJ3JlCiAgICMgdXNpbmcgYSByZWxhdGl2ZSBkaXJlY3RvcnkuCkBAIC0yODI1LDYgKzUyNjgsMTEgQEAKICAgaWYgdGVzdCAiJGFtX2NvbXBpbGVyX2xpc3QiID0gIiI7IHRoZW4KICAgICAgYW1fY29tcGlsZXJfbGlzdD1gc2VkIC1uICdzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJyA8IC4vZGVwY29tcGAKICAgZmkKKyAgYW1fX3VuaXZlcnNhbD1mYWxzZQorICBjYXNlICIgJGRlcGNjICIgaW4gIygKKyAgICAgKlwgLWFyY2hcICpcIC1hcmNoXCAqKSBhbV9fdW5pdmVyc2FsPXRydWUgOzsKKyAgICAgZXNhYworCiAgIGZvciBkZXBtb2RlIGluICRhbV9jb21waWxlcl9saXN0OyBkbwogICAgICMgU2V0dXAgYSBzb3VyY2Ugd2l0aCBtYW55IGRlcGVuZGVuY2llcywgYmVjYXVzZSBzb21lIGNvbXBpbGVycwogICAgICMgbGlrZSB0byB3cmFwIGxhcmdlIGRlcGVuZGVuY3kgbGlzdHMgb24gY29sdW1uIDgwICh3aXRoIFwpLCBhbmQKQEAgLTI4MzYsMzQgKzUyODQsNDkgQEAKICAgICA6ID4gc3ViL2NvbmZ0ZXN0LmMKICAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNjsgZG8KICAgICAgIGVjaG8gJyNpbmNsdWRlICJjb25mdHN0JyRpJy5oIicgPj4gc3ViL2NvbmZ0ZXN0LmMKLSAgICAgICMgVXNpbmcgYDogPiBzdWIvY29uZnRzdCRpLmgnIGNyZWF0ZXMgb25seSBzdWIvY29uZnRzdDEuaCB3aXRoCi0gICAgICAjIFNvbGFyaXMgOCdzIHsvdXNyLH0vYmluL3NoLgotICAgICAgdG91Y2ggc3ViL2NvbmZ0c3QkaS5oCisgICAgICAjIFVzaW5nICI6ID4gc3ViL2NvbmZ0c3QkaS5oIiBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAorICAgICAgIyBTb2xhcmlzIDEwIC9iaW4vc2guCisgICAgICBlY2hvICcvKiBkdW1teSAqLycgPiBzdWIvY29uZnRzdCRpLmgKICAgICBkb25lCiAgICAgZWNobyAiJHthbV9faW5jbHVkZX0gJHthbV9fcXVvdGV9c3ViL2NvbmZ0ZXN0LlBvJHthbV9fcXVvdGV9IiA+IGNvbmZtZgogCisgICAgIyBXZSBjaGVjayB3aXRoICctYycgYW5kICctbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCisgICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKKyAgICAjIGhhbmRsZSAnLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4gIEFsc28sIHNvbWUgSW50ZWwKKyAgICAjIHZlcnNpb25zIGhhZCB0cm91YmxlIHdpdGggb3V0cHV0IGluIHN1YmRpcnMuCisgICAgYW1fX29iaj1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICBhbV9fbWludXNfb2JqPSItbyAkYW1fX29iaiIKICAgICBjYXNlICRkZXBtb2RlIGluCisgICAgZ2NjKQorICAgICAgIyBUaGlzIGRlcG1vZGUgY2F1c2VzIGEgY29tcGlsZXIgcmFjZSBpbiB1bml2ZXJzYWwgbW9kZS4KKyAgICAgIHRlc3QgIiRhbV9fdW5pdmVyc2FsIiA9IGZhbHNlIHx8IGNvbnRpbnVlCisgICAgICA7OwogICAgIG5vc2lkZWVmZmVjdCkKLSAgICAgICMgYWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAotICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZAorICAgICAgIyBBZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCisgICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkLgogICAgICAgaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgPSB4eWVzOyB0aGVuCiAJY29udGludWUKICAgICAgIGVsc2UKIAlicmVhawogICAgICAgZmkKICAgICAgIDs7CisgICAgbXN2YzcgfCBtc3ZjN21zeXMgfCBtc3Zpc3VhbGNwcCB8IG1zdmNtc3lzKQorICAgICAgIyBUaGlzIGNvbXBpbGVyIHdvbid0IGdyb2sgJy1jIC1vJywgYnV0IGFsc28sIHRoZSBtaW51c28gdGVzdCBoYXMKKyAgICAgICMgbm90IHJ1biB5ZXQuICBUaGVzZSBkZXBtb2RlcyBhcmUgbGF0ZSBlbm91Z2ggaW4gdGhlIGdhbWUsIGFuZAorICAgICAgIyBzbyB3ZWFrIHRoYXQgdGhlaXIgZnVuY3Rpb25pbmcgc2hvdWxkIG5vdCBiZSBpbXBhY3RlZC4KKyAgICAgIGFtX19vYmo9Y29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICAgIGFtX19taW51c19vYmo9CisgICAgICA7OwogICAgIG5vbmUpIGJyZWFrIDs7CiAgICAgZXNhYwotICAgICMgV2UgY2hlY2sgd2l0aCBgLWMnIGFuZCBgLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgotICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5Ci0gICAgIyBoYW5kbGUgYC1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuCiAgICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCi0gICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gXAorICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9JGFtX19vYmogXAogICAgICAgIGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlBvIHRtcGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlRQbyBcCi0gICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgLW8gc3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IHN1Yi9jb25mdGVzdC5jIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCiAgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgogICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICBncmVwIHN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgJGFtX19vYmogc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKICAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KICAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKICAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCkBAIC0yODg3LDEzICs1MzUwLDExIEBACiBmaQogCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNjsgfQogQ0NERVBNT0RFPWRlcG1vZGU9JGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlCiAKLQotCi1pZgorIGlmCiAgIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCiAgICYmIHRlc3QgIiRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzOyB0aGVuCiAgIGFtX19mYXN0ZGVwQ0NfVFJVRT0KQEAgLTI5MDQsMjEgKzUzNjUsNzAwIEBACiBmaQogCiAKKyAgIGNhc2UgJGFjX2N2X3Byb2dfY2Nfc3RkYyBpbiAjKAorICBubykgOgorICAgIGFjX2N2X3Byb2dfY2NfYzk5PW5vOyBhY19jdl9wcm9nX2NjX2M4OT1ubyA7OyAjKAorICAqKSA6CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM5OSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM5OS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2NjX2M5OSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2N2X3Byb2dfY2NfYzk5PW5vCithY19zYXZlX0NDPSRDQworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8vIENoZWNrIHZhcmFyZ3MgbWFjcm9zLiAgVGhlc2UgZXhhbXBsZXMgYXJlIHRha2VuIGZyb20gQzk5IDYuMTAuMy41LgorI2RlZmluZSBkZWJ1ZyguLi4pIGZwcmludGYgKHN0ZGVyciwgX19WQV9BUkdTX18pCisjZGVmaW5lIHNob3dsaXN0KC4uLikgcHV0cyAoI19fVkFfQVJHU19fKQorI2RlZmluZSByZXBvcnQodGVzdCwuLi4pICgodGVzdCkgPyBwdXRzICgjdGVzdCkgOiBwcmludGYgKF9fVkFfQVJHU19fKSkKK3N0YXRpYyB2b2lkCit0ZXN0X3ZhcmFyZ3NfbWFjcm9zICh2b2lkKQoreworICBpbnQgeCA9IDEyMzQ7CisgIGludCB5ID0gNTY3ODsKKyAgZGVidWcgKCJGbGFnIik7CisgIGRlYnVnICgiWCA9ICVkXG4iLCB4KTsKKyAgc2hvd2xpc3QgKFRoZSBmaXJzdCwgc2Vjb25kLCBhbmQgdGhpcmQgaXRlbXMuKTsKKyAgcmVwb3J0ICh4PnksICJ4IGlzICVkIGJ1dCB5IGlzICVkIiwgeCwgeSk7Cit9CisKKy8vIENoZWNrIGxvbmcgbG9uZyB0eXBlcy4KKyNkZWZpbmUgQklHNjQgMTg0NDY3NDQwNzM3MDk1NTE2MTV1bGwKKyNkZWZpbmUgQklHMzIgNDI5NDk2NzI5NXVsCisjZGVmaW5lIEJJR19PSyAoQklHNjQgLyBCSUczMiA9PSA0Mjk0OTY3Mjk3dWxsICYmIEJJRzY0ICUgQklHMzIgPT0gMCkKKyNpZiAhQklHX09LCisgIHlvdXIgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbjsKKyNlbmRpZgorI2lmIEJJR19PSworI2Vsc2UKKyAgeW91ciBwcmVwcm9jZXNzb3IgaXMgYnJva2VuOworI2VuZGlmCitzdGF0aWMgbG9uZyBsb25nIGludCBiaWdudW0gPSAtOTIyMzM3MjAzNjg1NDc3NTgwN0xMOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWJpZ251bSA9IEJJRzY0OworCitzdHJ1Y3QgaW5jb21wbGV0ZV9hcnJheQoreworICBpbnQgZGF0YXNpemU7CisgIGRvdWJsZSBkYXRhW107Cit9OworCitzdHJ1Y3QgbmFtZWRfaW5pdCB7CisgIGludCBudW1iZXI7CisgIGNvbnN0IHdjaGFyX3QgKm5hbWU7CisgIGRvdWJsZSBhdmVyYWdlOworfTsKKwordHlwZWRlZiBjb25zdCBjaGFyICpjY3A7CisKK3N0YXRpYyBpbmxpbmUgaW50Cit0ZXN0X3Jlc3RyaWN0IChjY3AgcmVzdHJpY3QgdGV4dCkKK3sKKyAgLy8gU2VlIGlmIEMrKy1zdHlsZSBjb21tZW50cyB3b3JrLgorICAvLyBJdGVyYXRlIHRocm91Z2ggaXRlbXMgdmlhIHRoZSByZXN0cmljdGVkIHBvaW50ZXIuCisgIC8vIEFsc28gY2hlY2sgZm9yIGRlY2xhcmF0aW9ucyBpbiBmb3IgbG9vcHMuCisgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyAqKHRleHQraSkgIT0gJ1wwJzsgKytpKQorICAgIGNvbnRpbnVlOworICByZXR1cm4gMDsKK30KKworLy8gQ2hlY2sgdmFyYXJncyBhbmQgdmFfY29weS4KK3N0YXRpYyB2b2lkCit0ZXN0X3ZhcmFyZ3MgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ3M7CisgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworICB2YV9saXN0IGFyZ3NfY29weTsKKyAgdmFfY29weSAoYXJnc19jb3B5LCBhcmdzKTsKKworICBjb25zdCBjaGFyICpzdHI7CisgIGludCBudW1iZXI7CisgIGZsb2F0IGZudW1iZXI7CisKKyAgd2hpbGUgKCpmb3JtYXQpCisgICAgeworICAgICAgc3dpdGNoICgqZm9ybWF0KyspCisJeworCWNhc2UgJ3MnOiAvLyBzdHJpbmcKKwkgIHN0ciA9IHZhX2FyZyAoYXJnc19jb3B5LCBjb25zdCBjaGFyICopOworCSAgYnJlYWs7CisJY2FzZSAnZCc6IC8vIGludAorCSAgbnVtYmVyID0gdmFfYXJnIChhcmdzX2NvcHksIGludCk7CisJICBicmVhazsKKwljYXNlICdmJzogLy8gZmxvYXQKKwkgIGZudW1iZXIgPSB2YV9hcmcgKGFyZ3NfY29weSwgZG91YmxlKTsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICBicmVhazsKKwl9CisgICAgfQorICB2YV9lbmQgKGFyZ3NfY29weSk7CisgIHZhX2VuZCAoYXJncyk7Cit9CisKK2ludAorbWFpbiAoKQoreworCisgIC8vIENoZWNrIGJvb2wuCisgIF9Cb29sIHN1Y2Nlc3MgPSBmYWxzZTsKKworICAvLyBDaGVjayByZXN0cmljdC4KKyAgaWYgKHRlc3RfcmVzdHJpY3QgKCJTdHJpbmcgbGl0ZXJhbCIpID09IDApCisgICAgc3VjY2VzcyA9IHRydWU7CisgIGNoYXIgKnJlc3RyaWN0IG5ld3ZhciA9ICJBbm90aGVyIHN0cmluZyI7CisKKyAgLy8gQ2hlY2sgdmFyYXJncy4KKyAgdGVzdF92YXJhcmdzICgicywgZCcgZiAuIiwgInN0cmluZyIsIDY1LCAzNC4yMzQpOworICB0ZXN0X3ZhcmFyZ3NfbWFjcm9zICgpOworCisgIC8vIENoZWNrIGZsZXhpYmxlIGFycmF5IG1lbWJlcnMuCisgIHN0cnVjdCBpbmNvbXBsZXRlX2FycmF5ICppYSA9CisgICAgbWFsbG9jIChzaXplb2YgKHN0cnVjdCBpbmNvbXBsZXRlX2FycmF5KSArIChzaXplb2YgKGRvdWJsZSkgKiAxMCkpOworICBpYS0+ZGF0YXNpemUgPSAxMDsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBpYS0+ZGF0YXNpemU7ICsraSkKKyAgICBpYS0+ZGF0YVtpXSA9IGkgKiAxLjIzNDsKKworICAvLyBDaGVjayBuYW1lZCBpbml0aWFsaXplcnMuCisgIHN0cnVjdCBuYW1lZF9pbml0IG5pID0geworICAgIC5udW1iZXIgPSAzNCwKKyAgICAubmFtZSA9IEwiVGVzdCB3aWRlIHN0cmluZyIsCisgICAgLmF2ZXJhZ2UgPSA1NDMuMzQzNDMsCisgIH07CisKKyAgbmkubnVtYmVyID0gNTg7CisKKyAgaW50IGR5bmFtaWNfYXJyYXlbbmkubnVtYmVyXTsKKyAgZHluYW1pY19hcnJheVtuaS5udW1iZXIgLSAxXSA9IDU0MzsKKworICAvLyB3b3JrIGFyb3VuZCB1bnVzZWQgdmFyaWFibGUgd2FybmluZ3MKKyAgcmV0dXJuICghc3VjY2VzcyB8fCBiaWdudW0gPT0gMExMIHx8IHViaWdudW0gPT0gMHVMTCB8fCBuZXd2YXJbMF0gPT0gJ3gnCisJICB8fCBkeW5hbWljX2FycmF5W25pLm51bWJlciAtIDFdICE9IDU0Myk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorZm9yIGFjX2FyZyBpbiAnJyAtc3RkPWdudTk5IC1zdGQ9Yzk5IC1jOTkgLUFDOTkgLURfU1REQ19DOTk9IC1xbGFuZ2x2bD1leHRjOTkKK2RvCisgIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgorICBpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY2NfYzk5PSRhY19hcmcKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisgIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jOTkiICE9ICJ4bm8iICYmIGJyZWFrCitkb25lCitybSAtZiBjb25mdGVzdC4kYWNfZXh0CitDQz0kYWNfc2F2ZV9DQworCitmaQorIyBBQ19DQUNIRV9WQUwKK2Nhc2UgIngkYWNfY3ZfcHJvZ19jY19jOTkiIGluCisgIHgpCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKKyRhc19lY2hvICJub25lIG5lZWRlZCIgPiY2OyB9IDs7CisgIHhubykKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdW5zdXBwb3J0ZWQiID4mNQorJGFzX2VjaG8gInVuc3VwcG9ydGVkIiA+JjY7IH0gOzsKKyAgKikKKyAgICBDQz0iJENDICRhY19jdl9wcm9nX2NjX2M5OSIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfYzk5IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19jOTkiID4mNjsgfSA7OworZXNhYworaWYgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M5OSIgIT0geG5vOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19zdGRjPSRhY19jdl9wcm9nX2NjX2M5OQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfY2NfYzg5Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19jY19jODk9bm8KK2FjX3NhdmVfQ0M9JENDCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KK3N0cnVjdCBzdGF0OworLyogTW9zdCBvZiB0aGUgZm9sbG93aW5nIHRlc3RzIGFyZSBzdG9sZW4gZnJvbSBSQ1MgNS43J3Mgc3JjL2NvbmYuc2guICAqLworc3RydWN0IGJ1ZiB7IGludCB4OyB9OworRklMRSAqICgqcmNzb3BlbikgKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KTsKK3N0YXRpYyBjaGFyICplIChwLCBpKQorICAgICBjaGFyICoqcDsKKyAgICAgaW50IGk7Cit7CisgIHJldHVybiBwW2ldOworfQorc3RhdGljIGNoYXIgKmYgKGNoYXIgKiAoKmcpIChjaGFyICoqLCBpbnQpLCBjaGFyICoqcCwgLi4uKQoreworICBjaGFyICpzOworICB2YV9saXN0IHY7CisgIHZhX3N0YXJ0ICh2LHApOworICBzID0gZyAocCwgdmFfYXJnICh2LGludCkpOworICB2YV9lbmQgKHYpOworICByZXR1cm4gczsKK30KKworLyogT1NGIDQuMCBDb21wYXEgY2MgaXMgc29tZSBzb3J0IG9mIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQuICBJdCBoYXMKKyAgIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIHN0dWZmLCBidXQgbm90ICdceEhIJyBoZXggY2hhcmFjdGVyIGNvbnN0YW50cy4KKyAgIFRoZXNlIGRvbid0IHByb3Zva2UgYW4gZXJyb3IgdW5mb3J0dW5hdGVseSwgaW5zdGVhZCBhcmUgc2lsZW50bHkgdHJlYXRlZAorICAgYXMgJ3gnLiAgVGhlIGZvbGxvd2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAtc3RkIGlzIGFkZGVkIHRvIGdldAorICAgcHJvcGVyIEFOU0kgbW9kZS4gIEN1cmlvdXNseSAnXHgwMCchPSd4JyBhbHdheXMgY29tZXMgb3V0IHRydWUsIGZvciBhbgorICAgYXJyYXkgc2l6ZSBhdCBsZWFzdC4gIEl0J3MgbmVjZXNzYXJ5IHRvIHdyaXRlICdceDAwJz09MCB0byBnZXQgc29tZXRoaW5nCisgICB0aGF0J3MgdHJ1ZSBvbmx5IHdpdGggLXN0ZC4gICovCitpbnQgb3NmNF9jY19hcnJheSBbJ1x4MDAnID09IDAgPyAxIDogLTFdOworCisvKiBJQk0gQyA2IGZvciBBSVggaXMgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdCwgYnV0IGl0IHJlcGxhY2VzIG1hY3JvIHBhcmFtZXRlcnMKKyAgIGluc2lkZSBzdHJpbmdzIGFuZCBjaGFyYWN0ZXIgY29uc3RhbnRzLiAgKi8KKyNkZWZpbmUgRk9PKHgpICd4JworaW50IHhsYzZfY2NfYXJyYXlbRk9PKGEpID09ICd4JyA/IDEgOiAtMV07CisKK2ludCB0ZXN0IChpbnQgaSwgZG91YmxlIHgpOworc3RydWN0IHMxIHtpbnQgKCpmKSAoaW50IGEpO307CitzdHJ1Y3QgczIge2ludCAoKmYpIChkb3VibGUgYSk7fTsKK2ludCBwYWlybmFtZXMgKGludCwgY2hhciAqKiwgRklMRSAqKCopKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KSwgaW50LCBpbnQpOworaW50IGFyZ2M7CitjaGFyICoqYXJndjsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGYgKGUsIGFyZ3YsIDApICE9IGFyZ3ZbMF0gIHx8ICBmIChlLCBhcmd2LCAxKSAhPSBhcmd2WzFdOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitmb3IgYWNfYXJnIGluICcnIC1xbGFuZ2x2bD1leHRjODkgLXFsYW5nbHZsPWFuc2kgLXN0ZCBcCisJLUFlICItQWEgLURfSFBVWF9TT1VSQ0UiICItWGMgLURfX0VYVEVOU0lPTlNfXyIKK2RvCisgIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgorICBpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY2NfYzg5PSRhY19hcmcKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisgIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODkiICE9ICJ4bm8iICYmIGJyZWFrCitkb25lCitybSAtZiBjb25mdGVzdC4kYWNfZXh0CitDQz0kYWNfc2F2ZV9DQworCitmaQorIyBBQ19DQUNIRV9WQUwKK2Nhc2UgIngkYWNfY3ZfcHJvZ19jY19jODkiIGluCisgIHgpCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKKyRhc19lY2hvICJub25lIG5lZWRlZCIgPiY2OyB9IDs7CisgIHhubykKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdW5zdXBwb3J0ZWQiID4mNQorJGFzX2VjaG8gInVuc3VwcG9ydGVkIiA+JjY7IH0gOzsKKyAgKikKKyAgICBDQz0iJENDICRhY19jdl9wcm9nX2NjX2M4OSIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19jODkiID4mNjsgfSA7OworZXNhYworaWYgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0geG5vOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19zdGRjPSRhY19jdl9wcm9nX2NjX2M4OQorZWxzZQorICBhY19jdl9wcm9nX2NjX3N0ZGM9bm8KK2ZpCisKK2ZpCisgOzsKK2VzYWMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIFN0YW5kYXJkIEMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBTdGFuZGFyZCBDLi4uICIgPiY2OyB9CisgIGlmICR7YWNfY3ZfcHJvZ19jY19zdGRjKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2ZpCisKKyAgY2FzZSAkYWNfY3ZfcHJvZ19jY19zdGRjIGluICMoCisgIG5vKSA6CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUKKyRhc19lY2hvICJ1bnN1cHBvcnRlZCIgPiY2OyB9IDs7ICMoCisgICcnKSA6CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKKyRhc19lY2hvICJub25lIG5lZWRlZCIgPiY2OyB9IDs7ICMoCisgICopIDoKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2Nfc3RkYyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfY2Nfc3RkYyIgPiY2OyB9IDs7Citlc2FjCisKK2FjX2V4dD1jcHAKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CitpZiB0ZXN0IC16ICIkQ1hYIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkQ0NDIjsgdGhlbgorICAgIENYWD0kQ0NDCisgIGVsc2UKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGcrKyBjKysgZ3BwIGFDQyBDQyBjeHggY2MrKyBjbC5leGUgRkNDIEtDQyBSQ0MgeGxDX3IgeGxDCisgIGRvCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ1hYPSIkQ1hYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ1hYPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitDWFg9JGFjX2N2X3Byb2dfQ1hYCitpZiB0ZXN0IC1uICIkQ1hYIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENYWCIgPiY1CiskYXNfZWNobyAiJENYWCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJENYWCIgJiYgYnJlYWsKKyAgZG9uZQorZmkKK2lmIHRlc3QgLXogIiRDWFgiOyB0aGVuCisgIGFjX2N0X0NYWD0kQ1hYCisgIGZvciBhY19wcm9nIGluIGcrKyBjKysgZ3BwIGFDQyBDQyBjeHggY2MrKyBjbC5leGUgRkNDIEtDQyBSQ0MgeGxDX3IgeGxDCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NYWCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9DWFg9IiRhY19jdF9DWFgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9DWFg9IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0NYWD0kYWNfY3ZfcHJvZ19hY19jdF9DWFgKK2lmIHRlc3QgLW4gIiRhY19jdF9DWFgiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ1hYIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQ1hYIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJGFjX2N0X0NYWCIgJiYgYnJlYWsKK2RvbmUKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0NYWCIgPSB4OyB0aGVuCisgICAgQ1hYPSJnKysiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQ1hYPSRhY19jdF9DWFgKKyAgZmkKK2ZpCisKKyAgZmkKK2ZpCisjIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCiskYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQysrIGNvbXBpbGVyIHZlcnNpb24iID4mNQorc2V0IFggJGFjX2NvbXBpbGUKK2FjX2NvbXBpbGVyPSQyCitmb3IgYWNfb3B0aW9uIGluIC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCisgIHsgeyBhY190cnk9IiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgc2VkICcxMGFcCisuLi4gcmVzdCBvZiBzdGRlcnIgb3V0cHV0IGRlbGV0ZWQgLi4uCisgICAgICAgICAxMHEnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorZG9uZQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVyLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2N4eF9jb21waWxlcl9nbnUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworI2lmbmRlZiBfX0dOVUNfXworICAgICAgIGNob2tlIG1lCisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY29tcGlsZXJfZ251PXllcworZWxzZQorICBhY19jb21waWxlcl9nbnU9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2FjX2N2X2N4eF9jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jeHhfY29tcGlsZXJfZ251IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfY3h4X2NvbXBpbGVyX2dudSIgPiY2OyB9CitpZiB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXM7IHRoZW4KKyAgR1hYPXllcworZWxzZQorICBHWFg9CitmaQorYWNfdGVzdF9DWFhGTEFHUz0ke0NYWEZMQUdTK3NldH0KK2FjX3NhdmVfQ1hYRkxBR1M9JENYWEZMQUdTCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENYWCBhY2NlcHRzIC1nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENYWCBhY2NlcHRzIC1nLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfY3h4X2crOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19zYXZlX2N4eF93ZXJyb3JfZmxhZz0kYWNfY3h4X3dlcnJvcl9mbGFnCisgICBhY19jeHhfd2Vycm9yX2ZsYWc9eWVzCisgICBhY19jdl9wcm9nX2N4eF9nPW5vCisgICBDWFhGTEFHUz0iLWciCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2N4eF9nPXllcworZWxzZQorICBDWFhGTEFHUz0iIgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBhY19jeHhfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY3h4X3dlcnJvcl9mbGFnCisJIENYWEZMQUdTPSItZyIKKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jeHhfZz15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGFjX2N4eF93ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWcKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY3h4X2ciID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2N4eF9nIiA+JjY7IH0KK2lmIHRlc3QgIiRhY190ZXN0X0NYWEZMQUdTIiA9IHNldDsgdGhlbgorICBDWFhGTEFHUz0kYWNfc2F2ZV9DWFhGTEFHUworZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2N4eF9nID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgQ1hYRkxBR1M9Ii1nIC1PMiIKKyAgZWxzZQorICAgIENYWEZMQUdTPSItZyIKKyAgZmkKK2Vsc2UKKyAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICBDWFhGTEFHUz0iLU8yIgorICBlbHNlCisgICAgQ1hYRkxBR1M9CisgIGZpCitmaQorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitkZXBjYz0iJENYWCIgIGFtX2NvbXBpbGVyX2xpc3Q9CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MuLi4gIiA+JjY7IH0KK2lmICR7YW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgorICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCisgICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCisgICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCisgICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCAnRCcgLS0gYmVjYXVzZSAnLU1EJyBtZWFucyAicHV0IHRoZSBvdXRwdXQKKyAgIyBpbiBEIi4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorICBta2RpciBjb25mdGVzdC5kaXIKKyAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKKyAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KKyAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKKyAgY2QgY29uZnRlc3QuZGlyCisgICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQorICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQorICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQorICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KKyAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0CisgICMgZGlyZWN0b3J5LgorICBta2RpciBzdWIKKworICBhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgorICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnIDwgLi9kZXBjb21wYAorICBmaQorICBhbV9fdW5pdmVyc2FsPWZhbHNlCisgIGNhc2UgIiAkZGVwY2MgIiBpbiAjKAorICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OworICAgICBlc2FjCisKKyAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCisgICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCisgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAorICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KKyAgICAjCisgICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKKyAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgorICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgorICAgIDogPiBzdWIvY29uZnRlc3QuYworICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbworICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYworICAgICAgIyBVc2luZyAiOiA+IHN1Yi9jb25mdHN0JGkuaCIgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKKyAgICAgICMgU29sYXJpcyAxMCAvYmluL3NoLgorICAgICAgZWNobyAnLyogZHVtbXkgKi8nID4gc3ViL2NvbmZ0c3QkaS5oCisgICAgZG9uZQorICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKKworICAgICMgV2UgY2hlY2sgd2l0aCAnLWMnIGFuZCAnLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgorICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5CisgICAgIyBoYW5kbGUgJy1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuICBBbHNvLCBzb21lIEludGVsCisgICAgIyB2ZXJzaW9ucyBoYWQgdHJvdWJsZSB3aXRoIG91dHB1dCBpbiBzdWJkaXJzLgorICAgIGFtX19vYmo9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgYW1fX21pbnVzX29iaj0iLW8gJGFtX19vYmoiCisgICAgY2FzZSAkZGVwbW9kZSBpbgorICAgIGdjYykKKyAgICAgICMgVGhpcyBkZXBtb2RlIGNhdXNlcyBhIGNvbXBpbGVyIHJhY2UgaW4gdW5pdmVyc2FsIG1vZGUuCisgICAgICB0ZXN0ICIkYW1fX3VuaXZlcnNhbCIgPSBmYWxzZSB8fCBjb250aW51ZQorICAgICAgOzsKKyAgICBub3NpZGVlZmZlY3QpCisgICAgICAjIEFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKKyAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQuCisgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZWxzZQorCWJyZWFrCisgICAgICBmaQorICAgICAgOzsKKyAgICBtc3ZjNyB8IG1zdmM3bXN5cyB8IG1zdmlzdWFsY3BwIHwgbXN2Y21zeXMpCisgICAgICAjIFRoaXMgY29tcGlsZXIgd29uJ3QgZ3JvayAnLWMgLW8nLCBidXQgYWxzbywgdGhlIG1pbnVzbyB0ZXN0IGhhcworICAgICAgIyBub3QgcnVuIHlldC4gIFRoZXNlIGRlcG1vZGVzIGFyZSBsYXRlIGVub3VnaCBpbiB0aGUgZ2FtZSwgYW5kCisgICAgICAjIHNvIHdlYWsgdGhhdCB0aGVpciBmdW5jdGlvbmluZyBzaG91bGQgbm90IGJlIGltcGFjdGVkLgorICAgICAgYW1fX29iaj1jb25mdGVzdC4ke09CSkVYVC1vfQorICAgICAgYW1fX21pbnVzX29iaj0KKyAgICAgIDs7CisgICAgbm9uZSkgYnJlYWsgOzsKKyAgICBlc2FjCisgICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCisgICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD0kYW1fX29iaiBcCisgICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwICRhbV9fb2JqIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCisgICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQorICAgICAgIyB0aGF0IHNheXMgYW4gb3B0aW9uIHdhcyBpZ25vcmVkIG9yIG5vdCBzdXBwb3J0ZWQuCisgICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHdhcm5pbmc6IGlnbm9yaW5nIG9wdGlvbiAnLU0nOyBubyBhcmd1bWVudCByZXF1aXJlZAorICAgICAgIyBUaGUgZGlhZ25vc2lzIGNoYW5nZWQgaW4gaWNjIDguMDoKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCisgICAgICBpZiAoZ3JlcCAnaWdub3Jpbmcgb3B0aW9uJyBjb25mdGVzdC5lcnIgfHwKKyAgICAgICAgICBncmVwICdub3Qgc3VwcG9ydGVkJyBjb25mdGVzdC5lcnIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgICAgICAgIGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT0kZGVwbW9kZQorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBmaQorICBkb25lCisKKyAgY2QgLi4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorZWxzZQorICBhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjY7IH0KK0NYWERFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlCisKKyBpZgorICB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm8gXAorICAmJiB0ZXN0ICIkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA9IGdjYzM7IHRoZW4KKyAgYW1fX2Zhc3RkZXBDWFhfVFJVRT0KKyAgYW1fX2Zhc3RkZXBDWFhfRkFMU0U9JyMnCitlbHNlCisgIGFtX19mYXN0ZGVwQ1hYX1RSVUU9JyMnCisgIGFtX19mYXN0ZGVwQ1hYX0ZBTFNFPQorZmkKKworCisKKyMgR251bGliIChlYXJseSBjaGVja3MpLgogCiBhY19leHQ9YwogYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKIGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKIGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCiBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3Nvci4uLiAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IuLi4gIiA+JjY7IH0KICMgT24gU3Vucywgc29tZXRpbWVzICRDUFAgbmFtZXMgYSBkaXJlY3RvcnkuCiBpZiB0ZXN0IC1uICIkQ1BQIiAmJiB0ZXN0IC1kICIkQ1BQIjsgdGhlbgogICBDUFA9CiBmaQogaWYgdGVzdCAteiAiJENQUCI7IHRoZW4KLSAgaWYgdGVzdCAiJHthY19jdl9wcm9nX0NQUCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICBpZiAke2FjX2N2X3Byb2dfQ1BQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAogICAgIGZvciBDUFAgaW4gIiRDQyAtRSIgIiRDQyAtRSAtdHJhZGl0aW9uYWwtY3BwIiAiL2xpYi9jcHAiCkBAIC0yOTMyLDExICs2MDcyLDcgQEAKICAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCiAgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCiAgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2lmZGVmIF9fU1REQ19fCiAjIGluY2x1ZGUgPGxpbWl0cy5oPgpAQCAtMjk0NSw3OCArNjA4MSwzNCBAQAogI2VuZGlmCiAJCSAgICAgU3ludGF4IGVycm9yCiBfQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIDoKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgogCitlbHNlCiAgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KIGNvbnRpbnVlCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKIAotICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uLWV4aXN0ZW50IGhlYWRlcnMKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKICAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgogX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CiAgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCiBjb250aW51ZQogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCiAgICMgUGFzc2VzIGJvdGggdGVzdHMuCiBhY19wcmVwcm9jX29rPToKIGJyZWFrCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKIAogZG9uZQogIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotaWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKICAgYnJlYWsKIGZpCiAKQEAgLTMwMjgsOCArNjEyMCw4IEBACiBlbHNlCiAgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ1BQIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRDUFAiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDUFAiID4mNQorJGFzX2VjaG8gIiRDUFAiID4mNjsgfQogYWNfcHJlcHJvY19vaz1mYWxzZQogZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCiBkbwpAQCAtMzAzOSwxMSArNjEzMSw3IEBACiAgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgogICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAogICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpZmRlZiBfX1NURENfXwogIyBpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTMwNTIsODUgKzYxNDAsNDAgQEAKICNlbmRpZgogCQkgICAgIFN5bnRheCBlcnJvcgogX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICA6Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKIAorZWxzZQogICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCiBjb250aW51ZQogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CiAKLSAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbi1leGlzdGVudCBoZWFkZXJzCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCiAgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KIF9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgogICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgogY29udGludWUKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQogICAjIFBhc3NlcyBib3RoIHRlc3RzLgogYWNfcHJlcHJvY19vaz06CiBicmVhawogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CiAKIGRvbmUKICMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWlmICRhY19wcmVwcm9jX29rOyB0aGVuCi0gIDoKK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKKwogZWxzZQotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBDIHByZXByb2Nlc3NvciBcIiRDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IEMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNhbml0eSBjaGVjawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQogZmkKIAogYWNfZXh0PWMKQEAgLTMxNDAsNjAgKzYxODMsNTc3IEBACiBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CiAKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBlZ3JlcCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19lZ3JlcCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdyZXAgdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMgYW5kIC1lLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfR1JFUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGlmIGVjaG8gYSB8IChncmVwIC1FICcoYXxiKScpID4vZGV2L251bGwgMj4mMQotICAgIHRoZW4gYWNfY3ZfcHJvZ19lZ3JlcD0nZ3JlcCAtRScKLSAgICBlbHNlIGFjX2N2X3Byb2dfZWdyZXA9J2VncmVwJworICBpZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KKyAgYWNfcGF0aF9HUkVQX2ZvdW5kPWZhbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gZ3JlcCBnZ3JlcDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGFjX3BhdGhfR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFjX3BhdGhfR1JFUCIgfHwgY29udGludWUKKyMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0dSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0dSRVAKK2Nhc2UgYCIkYWNfcGF0aF9HUkVQIiAtLXZlcnNpb24gMj4mMWAgaW4KKypHTlUqKQorICBhY19jdl9wYXRoX0dSRVA9IiRhY19wYXRoX0dSRVAiIGFjX3BhdGhfR1JFUF9mb3VuZD06OzsKKyopCisgIGFjX2NvdW50PTAKKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisgIHdoaWxlIDoKKyAgZG8KKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgorICAgICIkYWNfcGF0aF9HUkVQIiAtZSAnR1JFUCQnIC1lICctKGNhbm5vdCBtYXRjaCktJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfR1JFUF9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIgorICAgICAgYWNfcGF0aF9HUkVQX21heD0kYWNfY291bnQKICAgICBmaQorICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgZG9uZQorICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKK2VzYWMKKworICAgICAgJGFjX3BhdGhfR1JFUF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgIiRMSU5FTk8iIDUKKyAgZmkKK2Vsc2UKKyAgYWNfY3ZfcGF0aF9HUkVQPSRHUkVQCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfZWdyZXAiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfZWdyZXAiID4mNgotIEVHUkVQPSRhY19jdl9wcm9nX2VncmVwCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfR1JFUCIgPiY2OyB9CisgR1JFUD0iJGFjX2N2X3BhdGhfR1JFUCIKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBlZ3JlcCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZWdyZXAuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9FR1JFUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIGVjaG8gYSB8ICRHUkVQIC1FICcoYXxiKScgPi9kZXYvbnVsbCAyPiYxCisgICB0aGVuIGFjX2N2X3BhdGhfRUdSRVA9IiRHUkVQIC1FIgorICAgZWxzZQorICAgICBpZiB0ZXN0IC16ICIkRUdSRVAiOyB0aGVuCisgIGFjX3BhdGhfRUdSRVBfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBlZ3JlcDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGFjX3BhdGhfRUdSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhY19wYXRoX0VHUkVQIiB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfRUdSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0VHUkVQCitjYXNlIGAiJGFjX3BhdGhfRUdSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIiBhY19wYXRoX0VHUkVQX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICdFR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgorICAgICIkYWNfcGF0aF9FR1JFUCIgJ0VHUkVQJCcgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0VHUkVQX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX0VHUkVQPSIkYWNfcGF0aF9FR1JFUCIKKyAgICAgIGFjX3BhdGhfRUdSRVBfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAkYWNfcGF0aF9FR1JFUF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfRUdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZWdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQorICBmaQorZWxzZQorICBhY19jdl9wYXRoX0VHUkVQPSRFR1JFUAorZmkKKworICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfRUdSRVAiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX0VHUkVQIiA+JjY7IH0KKyBFR1JFUD0iJGFjX2N2X3BhdGhfRUdSRVAiCiAKIAogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEFJWCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBBSVguLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBNaW5peCBBbXN0ZXJkYW0gY29tcGlsZXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIE1pbml4IEFtc3RlcmRhbSBjb21waWxlci4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9jX2Ftc3RlcmRhbV9jb21waWxlcis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpZmRlZiBfQUlYCi0gIHllcworCisjaWZkZWYgX19BQ0tfXworQW1zdGVyZGFtCiAjZW5kaWYKIAogX0FDRU9GCiBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBfQUxMX1NPVVJDRSAxCi1fQUNFT0YKLQorICAkRUdSRVAgIkFtc3RlcmRhbSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZ2xfY3ZfY19hbXN0ZXJkYW1fY29tcGlsZXI9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgZ2xfY3ZfY19hbXN0ZXJkYW1fY29tcGlsZXI9bm8KIGZpCiBybSAtZiBjb25mdGVzdCoKIAogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N0ZGMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2NfYW1zdGVyZGFtX2NvbXBpbGVyIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfY19hbXN0ZXJkYW1fY29tcGlsZXIiID4mNjsgfQorICBpZiB0ZXN0IC16ICIkQVIiOyB0aGVuCisgICAgaWYgdGVzdCAkZ2xfY3ZfY19hbXN0ZXJkYW1fY29tcGlsZXIgPSB5ZXM7IHRoZW4KKyAgICAgIEFSPSdjYyAtYy5hJworICAgICAgaWYgdGVzdCAteiAiJEFSRkxBR1MiOyB0aGVuCisgICAgICAgIEFSRkxBR1M9Jy1vJworICAgICAgZmkKKyAgICBlbHNlCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hcjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQVIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLworICBpZiB0ZXN0IC1uICIkQVIiOyB0aGVuCisgIGFjX2N2X3Byb2dfQVI9IiRBUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0FSPSIke2FjX3Rvb2xfcHJlZml4fWFyIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0FSPSRhY19jdl9wcm9nX0FSCitpZiB0ZXN0IC1uICIkQVIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQVIiID4mNQorJGFzX2VjaG8gIiRBUiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCisgIGFjX2N0X0FSPSRBUgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBhcjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfQVIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19jdF9BUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSJhciIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9BUj0kYWNfY3ZfcHJvZ19hY19jdF9BUgoraWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0FSIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQVIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCisgICAgQVI9ImFyIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIEFSPSRhY19jdF9BUgorICBmaQorZWxzZQorICBBUj0iJGFjX2N2X3Byb2dfQVIiCitmaQorCisgICAgICBpZiB0ZXN0IC16ICIkQVJGTEFHUyI7IHRoZW4KKyAgICAgICAgQVJGTEFHUz0nY3J1JworICAgICAgZmkKKyAgICBmaQorICBlbHNlCisgICAgaWYgdGVzdCAteiAiJEFSRkxBR1MiOyB0aGVuCisgICAgICBBUkZMQUdTPSdjcnUnCisgICAgZmkKKyAgZmkKKworCisgIGlmIHRlc3QgLXogIiRSQU5MSUIiOyB0aGVuCisgICAgaWYgdGVzdCAkZ2xfY3ZfY19hbXN0ZXJkYW1fY29tcGlsZXIgPSB5ZXM7IHRoZW4KKyAgICAgIFJBTkxJQj0nOicKKyAgICBlbHNlCisgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1yYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9cmFubGliOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19SQU5MSUIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICBhY19jdl9wcm9nX1JBTkxJQj0iJFJBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX1JBTkxJQj0iJHthY190b29sX3ByZWZpeH1yYW5saWIiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorUkFOTElCPSRhY19jdl9wcm9nX1JBTkxJQgoraWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRSQU5MSUIiID4mNQorJGFzX2VjaG8gIiRSQU5MSUIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX1JBTkxJQiI7IHRoZW4KKyAgYWNfY3RfUkFOTElCPSRSQU5MSUIKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJyYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHJhbmxpYjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfUkFOTElCKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9IiRhY19jdF9SQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9InJhbmxpYiIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9SQU5MSUI9JGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCCitpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X1JBTkxJQiIgPiY1CiskYXNfZWNobyAiJGFjX2N0X1JBTkxJQiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X1JBTkxJQiIgPSB4OyB0aGVuCisgICAgUkFOTElCPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIFJBTkxJQj0kYWNfY3RfUkFOTElCCisgIGZpCitlbHNlCisgIFJBTkxJQj0iJGFjX2N2X3Byb2dfUkFOTElCIgorZmkKKworICAgIGZpCisgIGZpCisKKworaWYgdGVzdCAieCRDQyIgIT0geGNjOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0MgYW5kIGNjIHVuZGVyc3RhbmQgLWMgYW5kIC1vIHRvZ2V0aGVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIGFuZCBjYyB1bmRlcnN0YW5kIC1jIGFuZCAtbyB0b2dldGhlci4uLiAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgY2MgdW5kZXJzdGFuZHMgLWMgYW5kIC1vIHRvZ2V0aGVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgY2MgdW5kZXJzdGFuZHMgLWMgYW5kIC1vIHRvZ2V0aGVyLi4uICIgPiY2OyB9CitmaQorc2V0IGR1bW15ICRDQzsgYWNfY2M9YCRhc19lY2hvICIkMiIgfAorCQkgICAgICBzZWQgJ3MvW15hLXpBLVowLTlfXS9fL2c7cy9eWzAtOV0vXy8nYAoraWYgZXZhbCBcJHthY19jdl9wcm9nX2NjXyR7YWNfY2N9X2Nfbys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KIF9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjIE1ha2Ugc3VyZSBpdCB3b3JrcyBib3RoIHdpdGggJENDIGFuZCB3aXRoIHNpbXBsZSBjYy4KKyMgV2UgZG8gdGhlIHRlc3QgdHdpY2UgYmVjYXVzZSBzb21lIGNvbXBpbGVycyByZWZ1c2UgdG8gb3ZlcndyaXRlIGFuCisjIGV4aXN0aW5nIC5vIGZpbGUgd2l0aCAtbywgdGhvdWdoIHRoZXkgd2lsbCBjcmVhdGUgb25lLgorYWNfdHJ5PSckQ0MgLWMgY29uZnRlc3QuJGFjX2V4dCAtbyBjb25mdGVzdDIuJGFjX29iamV4dCA+JjUnCitybSAtZiBjb25mdGVzdDIuKgoraWYgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmCisgICB0ZXN0IC1mIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ICYmIHsgeyBjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsKK3RoZW4KKyAgZXZhbCBhY19jdl9wcm9nX2NjXyR7YWNfY2N9X2Nfbz15ZXMKKyAgaWYgdGVzdCAieCRDQyIgIT0geGNjOyB0aGVuCisgICAgIyBUZXN0IGZpcnN0IHRoYXQgY2MgZXhpc3RzIGF0IGFsbC4KKyAgICBpZiB7IGFjX3RyeT0nY2MgLWMgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisgIHsgeyBjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbgorICAgICAgYWNfdHJ5PSdjYyAtYyBjb25mdGVzdC4kYWNfZXh0IC1vIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ID4mNScKKyAgICAgIHJtIC1mIGNvbmZ0ZXN0Mi4qCisgICAgICBpZiB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYKKwkgdGVzdCAtZiBjb25mdGVzdDIuJGFjX29iamV4dCAmJiB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07CisgICAgICB0aGVuCisJIyBjYyB3b3JrcyB0b28uCisJOgorICAgICAgZWxzZQorCSMgY2MgZXhpc3RzIGJ1dCBkb2Vzbid0IGxpa2UgLW8uCisJZXZhbCBhY19jdl9wcm9nX2NjXyR7YWNfY2N9X2Nfbz1ubworICAgICAgZmkKKyAgICBmaQorICBmaQorZWxzZQorICBldmFsIGFjX2N2X3Byb2dfY2NfJHthY19jY31fY19vPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdCoKKworZmkKK2lmIGV2YWwgdGVzdCBcJGFjX2N2X3Byb2dfY2NfJHthY19jY31fY19vID0geWVzOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCiskYXNfZWNobyAiI2RlZmluZSBOT19NSU5VU19DX01JTlVTX08gMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgRklYTUU6IHdlIHJlbHkgb24gdGhlIGNhY2hlIHZhcmlhYmxlIG5hbWUgYmVjYXVzZQorIyB0aGVyZSBpcyBubyBvdGhlciB3YXkuCitzZXQgZHVtbXkgJENDCithbV9jYz1gZWNobyAkMiB8IHNlZCAncy9bXmEtekEtWjAtOV9dL18vZztzL15bMC05XS9fLydgCitldmFsIGFtX3Q9XCRhY19jdl9wcm9nX2NjXyR7YW1fY2N9X2NfbworaWYgdGVzdCAiJGFtX3QiICE9IHllczsgdGhlbgorICAgIyBMb3NpbmcgY29tcGlsZXIsIHNvIG92ZXJyaWRlIHdpdGggdGhlIHNjcmlwdC4KKyAgICMgRklYTUU6IEl0IGlzIHdyb25nIHRvIHJld3JpdGUgQ0MuCisgICAjIEJ1dCBpZiB3ZSBkb24ndCB0aGVuIHdlIGdldCBpbnRvIHRyb3VibGUgb2Ygb25lIHNvcnQgb3IgYW5vdGhlci4KKyAgICMgQSBsb25nZXItdGVybSBmaXggd291bGQgYmUgdG8gaGF2ZSBhdXRvbWFrZSB1c2UgYW1fX0NDIGluIHRoaXMgY2FzZSwKKyAgICMgYW5kIHRoZW4gd2UgY291bGQgc2V0IGFtX19DQz0iXCQodG9wX3NyY2RpcikvY29tcGlsZSBcJChDQykiCisgICBDQz0iJGFtX2F1eF9kaXIvY29tcGlsZSAkQ0MiCitmaQorCisKKyMgTWFrZSBzdXJlIHdlIGNhbiBydW4gY29uZmlnLnN1Yi4KKyRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgc3VuNCA+L2Rldi9udWxsIDI+JjEgfHwKKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBydW4gJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICIkTElORU5PIiA1CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfYnVpbGQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKK3Rlc3QgIngkYWNfYnVpbGRfYWxpYXMiID0geCAmJgorICBhY19idWlsZF9hbGlhcz1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiYAordGVzdCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmCisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgZ3Vlc3MgYnVpbGQgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiICIkTElORU5PIiA1CithY19jdl9idWlsZD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkYWNfYnVpbGRfYWxpYXNgIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkYWNfYnVpbGRfYWxpYXMgZmFpbGVkIiAiJExJTkVOTyIgNQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9idWlsZCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2J1aWxkIiA+JjY7IH0KK2Nhc2UgJGFjX2N2X2J1aWxkIGluCisqLSotKikgOzsKKyopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBidWlsZCIgIiRMSU5FTk8iIDU7OworZXNhYworYnVpbGQ9JGFjX2N2X2J1aWxkCithY19zYXZlX0lGUz0kSUZTOyBJRlM9Jy0nCitzZXQgeCAkYWNfY3ZfYnVpbGQKK3NoaWZ0CitidWlsZF9jcHU9JDEKK2J1aWxkX3ZlbmRvcj0kMgorc2hpZnQ7IHNoaWZ0CisjIFJlbWVtYmVyLCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIElGUyBpcyB1c2VkIHRvIGNyZWF0ZSAkKiwKKyMgZXhjZXB0IHdpdGggb2xkIHNoZWxsczoKK2J1aWxkX29zPSQqCitJRlM9JGFjX3NhdmVfSUZTCitjYXNlICRidWlsZF9vcyBpbiAqXCAqKSBidWlsZF9vcz1gZWNobyAiJGJ1aWxkX29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hvc3QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0ICJ4JGhvc3RfYWxpYXMiID0geDsgdGhlbgorICBhY19jdl9ob3N0PSRhY19jdl9idWlsZAorZWxzZQorICBhY19jdl9ob3N0PWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICRob3N0X2FsaWFzYCB8fAorICAgIGFzX2ZuX2Vycm9yICQ/ICIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkaG9zdF9hbGlhcyBmYWlsZWQiICIkTElORU5PIiA1CitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9ob3N0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaG9zdCIgPiY2OyB9CitjYXNlICRhY19jdl9ob3N0IGluCisqLSotKikgOzsKKyopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBob3N0IiAiJExJTkVOTyIgNTs7Citlc2FjCitob3N0PSRhY19jdl9ob3N0CithY19zYXZlX0lGUz0kSUZTOyBJRlM9Jy0nCitzZXQgeCAkYWNfY3ZfaG9zdAorc2hpZnQKK2hvc3RfY3B1PSQxCitob3N0X3ZlbmRvcj0kMgorc2hpZnQ7IHNoaWZ0CisjIFJlbWVtYmVyLCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIElGUyBpcyB1c2VkIHRvIGNyZWF0ZSAkKiwKKyMgZXhjZXB0IHdpdGggb2xkIHNoZWxsczoKK2hvc3Rfb3M9JCoKK0lGUz0kYWNfc2F2ZV9JRlMKK2Nhc2UgJGhvc3Rfb3MgaW4gKlwgKikgaG9zdF9vcz1gZWNobyAiJGhvc3Rfb3MiIHwgc2VkICdzLyAvLS9nJ2A7OyBlc2FjCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9oZWFkZXJfc3RkYys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KQEAgLTMyMDgsNTAgKzY3NjgsMjMgQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2hlYWRlcl9zdGRjPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9oZWFkZXJfc3RkYz1ubworICBhY19jdl9oZWFkZXJfc3RkYz1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogCiBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgogICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKIF9BQ0VPRgogaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIDoKKyAgJEVHUkVQICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKIGVsc2UKICAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KIGZpCkBAIC0zMjYxLDE4ICs2Nzk0LDE0IEBACiAKIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCiAgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxzdGRsaWIuaD4KIAogX0FDRU9GCiBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAiZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIDoKKyAgJEVHUkVQICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCiBlbHNlCiAgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCiBmaQpAQCAtMzI4MiwxNiArNjgxMSwxMyBAQAogCiBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgogICAjIC9iaW4vY2MgaW4gSXJpeC00LjAuNSBnZXRzIG5vbi1BTlNJIGN0eXBlIG1hY3JvcyB1bmxlc3MgdXNpbmcgLWFuc2kuCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKICAgOgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CiAjaWYgKCgnICcgJiAweDBGRikgPT0gMHgwMjApCiAjIGRlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCiAjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCkBAIC0zMzExLDEwOCArNjgzNywzOSBAQAogICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCiAgICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQogCXx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQotICAgICAgZXhpdCgyKTsKLSAgZXhpdCAoMCk7CisgICAgICByZXR1cm4gMjsKKyAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICA6Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1Ci1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CiAKLSggZXhpdCAkYWNfc3RhdHVzICkKLWFjX2N2X2hlYWRlcl9zdGRjPW5vCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCiBmaQotcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKIGZpCiBmaQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjY7IH0KIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIFNURENfSEVBREVSUyAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIFNURENfSEVBREVSUyAxIiA+PmNvbmZkZWZzLmgKIAogZmkKIAogIyBPbiBJUklYIDUuMywgc3lzL3R5cGVzIGFuZCBpbnR0eXBlcy5oIGFyZSBjb25mbGljdGluZy4KLQotCi0KLQotCi0KLQotCi0KIGZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3N0YXQuaCBzdGRsaWIuaCBzdHJpbmcuaCBtZW1vcnkuaCBzdHJpbmdzLmggXAogCQkgIGludHR5cGVzLmggc3RkaW50LmggdW5pc3RkLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdAorIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCiBfQUNFT0YKIAogZmkKQEAgLTM0MjAsMTkxICs2ODc3LDQ4IEBACiBkb25lCiAKIAotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfbWluaXhfY29uZmlnX2grc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBtaW5peC9jb25maWcuaCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBtaW5peC9jb25maWcuaC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX21pbml4X2NvbmZpZ19oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9taW5peF9jb25maWdfaCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX21pbml4X2NvbmZpZ19oIiA+JjYKLWVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgbWluaXgvY29uZmlnLmggdXNhYmlsaXR5IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgbWluaXgvY29uZmlnLmggdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPG1pbml4L2NvbmZpZy5oPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKLWFjX2hlYWRlcl9jb21waWxlcj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CiAKLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIG1pbml4L2NvbmZpZy5oIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgbWluaXgvY29uZmlnLmggcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxtaW5peC9jb25maWcuaD4KLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2Ci0KLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPwotY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgotICB5ZXM6bm86ICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWluaXgvY29uZmlnLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWluaXgvY29uZmlnLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWluaXgvY29uZmlnLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1iaXNvbkBnbnUub3JnICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBtaW5peC9jb25maWcuaCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBtaW5peC9jb25maWcuaC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX21pbml4X2NvbmZpZ19oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2N2X2hlYWRlcl9taW5peF9jb25maWdfaD0kYWNfaGVhZGVyX3ByZXByb2MKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX21pbml4X2NvbmZpZ19oIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfbWluaXhfY29uZmlnX2giID4mNgotCi1maQotaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX21pbml4X2NvbmZpZ19oID0geWVzOyB0aGVuCisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJtaW5peC9jb25maWcuaCIgImFjX2N2X2hlYWRlcl9taW5peF9jb25maWdfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbWluaXhfY29uZmlnX2giID0geHllczsgdGhlbiA6CiAgIE1JTklYPXllcwogZWxzZQogICBNSU5JWD0KIGZpCiAKIAotaWYgdGVzdCAiJE1JTklYIiA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkTUlOSVgiID0geWVzOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIF9QT1NJWF9TT1VSQ0UgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBfUE9TSVhfU09VUkNFIDEiID4+Y29uZmRlZnMuaAogCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIF9QT1NJWF8xX1NPVVJDRSAyCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIF9QT1NJWF8xX1NPVVJDRSAyIiA+PmNvbmZkZWZzLmgKIAogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBfTUlOSVggMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBfTUlOSVggMSIgPj5jb25mZGVmcy5oCiAKLWZpCisgIGZpCisKKyAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgaHB1eCopCisKKyRhc19lY2hvICIjZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNTAwIiA+PmNvbmZkZWZzLmgKKworICAgICAgOzsKKyAgZXNhYwogCiAKLQotCi0KLQotCi0KLQotCi0KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgaXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJT05TX18iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgaXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJT05TX18iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBpdCBpcyBzYWZlIHRvIGRlZmluZSBfX0VYVEVOU0lPTlNfXy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLQkgICNkZWZpbmUgX19FWFRFTlNJT05TX18gMQotCSAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyMgICAgICAgICBkZWZpbmUgX19FWFRFTlNJT05TX18gMQorICAgICAgICAgICRhY19pbmNsdWRlc19kZWZhdWx0CiBpbnQKIG1haW4gKCkKIHsKQEAgLTM2MTMsMjM4NSArNjkyNywxMDg1IEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm8KKyAgYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18iID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18iID4mNQorJGFzX2VjaG8gIiRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyIgPiY2OyB9CiAgIHRlc3QgJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fID0geWVzICYmCi0gICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgX19FWFRFTlNJT05TX18gMQotX0FDRU9GCisgICAgJGFzX2VjaG8gIiNkZWZpbmUgX19FWFRFTlNJT05TX18gMSIgPj5jb25mZGVmcy5oCiAKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTIDEKLV9BQ0VPRgorICAkYXNfZWNobyAiI2RlZmluZSBfQUxMX1NPVVJDRSAxIiA+PmNvbmZkZWZzLmgKKworICAkYXNfZWNobyAiI2RlZmluZSBfREFSV0lOX0NfU09VUkNFIDEiID4+Y29uZmRlZnMuaAorCisgICRhc19lY2hvICIjZGVmaW5lIF9HTlVfU09VUkNFIDEiID4+Y29uZmRlZnMuaAorCisgICRhc19lY2hvICIjZGVmaW5lIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUyAxIiA+PmNvbmZkZWZzLmgKKworICAkYXNfZWNobyAiI2RlZmluZSBfVEFOREVNX1NPVVJDRSAxIiA+PmNvbmZkZWZzLmgKIAogCiAKLSMgQ2hlY2tzIGZvciB0aGUgY29tcGlsZXIuCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1nY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Z2NjOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1nY2MiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotZmkKLWZpCi1DQz0kYWNfY3ZfcHJvZ19DQwotaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JENDIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0NDIjsgdGhlbgotICBhY19jdF9DQz0kQ0MKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGdjYzsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9ImdjYyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLWFjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCi1pZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3RfQ0MiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0gIENDPSRhY19jdF9DQwotZWxzZQotICBDQz0iJGFjX2N2X3Byb2dfQ0MiCi1maQotCi1pZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCi0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWNjOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1jYyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLUNDPSRhY19jdl9wcm9nX0NDCi1pZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQ0MiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQ0MiOyB0aGVuCi0gIGFjX2N0X0NDPSRDQwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBjYzsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9ImNjIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLWZpCi1maQotYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKLWlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9DQyIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSAgQ0M9JGFjX2N0X0NDCi1lbHNlCi0gIENDPSIkYWNfY3ZfcHJvZ19DQyIKLWZpCi0KLWZpCi1pZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGNjOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLSAgYWNfcHJvZ19yZWplY3RlZD1ubwotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBpZiB0ZXN0ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA9ICIvdXNyL3VjYi9jYyI7IHRoZW4KLSAgICAgICBhY19wcm9nX3JlamVjdGVkPXllcwotICAgICAgIGNvbnRpbnVlCi0gICAgIGZpCi0gICAgYWNfY3ZfcHJvZ19DQz0iY2MiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotaWYgdGVzdCAkYWNfcHJvZ19yZWplY3RlZCA9IHllczsgdGhlbgotICAjIFdlIGZvdW5kIGEgYm9nb24gaW4gdGhlIHBhdGgsIHNvIG1ha2Ugc3VyZSB3ZSBuZXZlciB1c2UgaXQuCi0gIHNldCBkdW1teSAkYWNfY3ZfcHJvZ19DQwotICBzaGlmdAotICBpZiB0ZXN0ICQjICE9IDA7IHRoZW4KLSAgICAjIFdlIGNob3NlIGEgZGlmZmVyZW50IGNvbXBpbGVyIGZyb20gdGhlIGJvZ3VzIG9uZS4KLSAgICAjIEhvd2V2ZXIsIGl0IGhhcyB0aGUgc2FtZSBiYXNlbmFtZSwgc28gdGhlIGJvZ29uIHdpbGwgYmUgY2hvc2VuCi0gICAgIyBmaXJzdCBpZiB3ZSBzZXQgQ0MgdG8ganVzdCB0aGUgYmFzZW5hbWU7IHVzZSB0aGUgZnVsbCBmaWxlIG5hbWUuCi0gICAgc2hpZnQKLSAgICBhY19jdl9wcm9nX0NDPSIkYXNfZGlyLyRhY193b3JkJHsxKycgJ30kQCIKLSAgZmkKLWZpCi1maQotZmkKLUNDPSRhY19jdl9wcm9nX0NDCi1pZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQ0MiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi1maQotaWYgdGVzdCAteiAiJENDIjsgdGhlbgotICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gIGZvciBhY19wcm9nIGluIGNsCi0gIGRvCi0gICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX0NDPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLUNDPSRhY19jdl9wcm9nX0NDCi1pZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQ0MiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0gICAgdGVzdCAtbiAiJENDIiAmJiBicmVhawotICBkb25lCi1maQotaWYgdGVzdCAteiAiJENDIjsgdGhlbgotICBhY19jdF9DQz0kQ0MKLSAgZm9yIGFjX3Byb2cgaW4gY2wKLWRvCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX3Byb2ciCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotZmkKLWZpCi1hY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQwotaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0NDIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotICB0ZXN0IC1uICIkYWNfY3RfQ0MiICYmIGJyZWFrCi1kb25lCi0KLSAgQ0M9JGFjX2N0X0NDCi1maQotCi1maQogCiAKLXRlc3QgLXogIiRDQyIgJiYgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KIAotIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgotZWNobyAiJGFzX21lOiRMSU5FTk86IiBcCi0gICAgICJjaGVja2luZyBmb3IgQyBjb21waWxlciB2ZXJzaW9uIiA+JjUKLWFjX2NvbXBpbGVyPWBzZXQgWCAkYWNfY29tcGlsZTsgZWNobyAkMmAKLXsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA8L2Rldi9udWxsID4mNVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlciAtLXZlcnNpb24gPC9kZXYvbnVsbCA+JjUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLXsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVyIC12IDwvZGV2L251bGwgPiY1XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGVyIC12IDwvZGV2L251bGwgPiY1KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci17IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlciAtViA8L2Rldi9udWxsID4mNVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlciAtViA8L2Rldi9udWxsID4mNSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9jX2NvbXBpbGVyX2dudStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotaW50Ci1tYWluICgpCi17Ci0jaWZuZGVmIF9fR05VQ19fCi0gICAgICAgY2hva2UgbWUKLSNlbmRpZgogCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2NvbXBpbGVyX2dudT15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAotYWNfY29tcGlsZXJfZ251PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotYWNfY3ZfY19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQogCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY2Ci1HQ0M9YHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllcyAmJiBlY2hvIHllc2AKLWFjX3Rlc3RfQ0ZMQUdTPSR7Q0ZMQUdTK3NldH0KLWFjX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLUNGTEFHUz0iLWciCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWcuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfZytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfcHJvZ19jY19nPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9wcm9nX2NjX2c9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfZyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19jY19nIiA+JjYKLWlmIHRlc3QgIiRhY190ZXN0X0NGTEFHUyIgPSBzZXQ7IHRoZW4KLSAgQ0ZMQUdTPSRhY19zYXZlX0NGTEFHUwotZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2NjX2cgPSB5ZXM7IHRoZW4KLSAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICBDRkxBR1M9Ii1nIC1PMiIKLSAgZWxzZQotICAgIENGTEFHUz0iLWciCi0gIGZpCi1lbHNlCi0gIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgQ0ZMQUdTPSItTzIiCi0gIGVsc2UKLSAgICBDRkxBR1M9Ci0gIGZpCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBBTlNJIEMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgQU5TSSBDLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX3N0ZGMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY3ZfcHJvZ19jY19zdGRjPW5vCi1hY19zYXZlX0NDPSRDQwotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotLyogTW9zdCBvZiB0aGUgZm9sbG93aW5nIHRlc3RzIGFyZSBzdG9sZW4gZnJvbSBSQ1MgNS43J3Mgc3JjL2NvbmYuc2guICAqLwotc3RydWN0IGJ1ZiB7IGludCB4OyB9OwotRklMRSAqICgqcmNzb3BlbikgKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KTsKLXN0YXRpYyBjaGFyICplIChwLCBpKQotICAgICBjaGFyICoqcDsKLSAgICAgaW50IGk7Ci17Ci0gIHJldHVybiBwW2ldOwotfQotc3RhdGljIGNoYXIgKmYgKGNoYXIgKiAoKmcpIChjaGFyICoqLCBpbnQpLCBjaGFyICoqcCwgLi4uKQotewotICBjaGFyICpzOwotICB2YV9saXN0IHY7Ci0gIHZhX3N0YXJ0ICh2LHApOwotICBzID0gZyAocCwgdmFfYXJnICh2LGludCkpOwotICB2YV9lbmQgKHYpOwotICByZXR1cm4gczsKLX0KLQotLyogT1NGIDQuMCBDb21wYXEgY2MgaXMgc29tZSBzb3J0IG9mIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQuICBJdCBoYXMKLSAgIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIHN0dWZmLCBidXQgbm90ICdceEhIJyBoZXggY2hhcmFjdGVyIGNvbnN0YW50cy4KLSAgIFRoZXNlIGRvbid0IHByb3Zva2UgYW4gZXJyb3IgdW5mb3J0dW5hdGVseSwgaW5zdGVhZCBhcmUgc2lsZW50bHkgdHJlYXRlZAotICAgYXMgJ3gnLiAgVGhlIGZvbGxvd2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAtc3RkMSBpcyBhZGRlZCB0byBnZXQKLSAgIHByb3BlciBBTlNJIG1vZGUuICBDdXJpb3VzbHkgJ1x4MDAnIT0neCcgYWx3YXlzIGNvbWVzIG91dCB0cnVlLCBmb3IgYW4KLSAgIGFycmF5IHNpemUgYXQgbGVhc3QuICBJdCdzIG5lY2Vzc2FyeSB0byB3cml0ZSAnXHgwMCc9PTAgdG8gZ2V0IHNvbWV0aGluZwotICAgdGhhdCdzIHRydWUgb25seSB3aXRoIC1zdGQxLiAgKi8KLWludCBvc2Y0X2NjX2FycmF5IFsnXHgwMCcgPT0gMCA/IDEgOiAtMV07Ci0KLWludCB0ZXN0IChpbnQgaSwgZG91YmxlIHgpOwotc3RydWN0IHMxIHtpbnQgKCpmKSAoaW50IGEpO307Ci1zdHJ1Y3QgczIge2ludCAoKmYpIChkb3VibGUgYSk7fTsKLWludCBwYWlybmFtZXMgKGludCwgY2hhciAqKiwgRklMRSAqKCopKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KSwgaW50LCBpbnQpOwotaW50IGFyZ2M7Ci1jaGFyICoqYXJndjsKLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgKGUsIGFyZ3YsIDApICE9IGFyZ3ZbMF0gIHx8ICBmIChlLCBhcmd2LCAxKSAhPSBhcmd2WzFdOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi0jIERvbid0IHRyeSBnY2MgLWFuc2k7IHRoYXQgdHVybnMgb2ZmIHVzZWZ1bCBleHRlbnNpb25zIGFuZAotIyBicmVha3Mgc29tZSBzeXN0ZW1zJyBoZWFkZXIgZmlsZXMuCi0jIEFJWAkJCS1xbGFuZ2x2bD1hbnNpCi0jIFVsdHJpeCBhbmQgT1NGLzEJLXN0ZDEKLSMgSFAtVVggMTAuMjAgYW5kIGxhdGVyCS1BZQotIyBIUC1VWCBvbGRlciB2ZXJzaW9ucwktQWEgLURfSFBVWF9TT1VSQ0UKLSMgU1ZSNAkJCS1YYyAtRF9fRVhURU5TSU9OU19fCi1mb3IgYWNfYXJnIGluICIiIC1xbGFuZ2x2bD1hbnNpIC1zdGQxIC1BZSAiLUFhIC1EX0hQVVhfU09VUkNFIiAiLVhjIC1EX19FWFRFTlNJT05TX18iCi1kbwotICBDQz0iJGFjX3NhdmVfQ0MgJGFjX2FyZyIKLSAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfcHJvZ19jY19zdGRjPSRhY19hcmcKLWJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAotZG9uZQotcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfb2JqZXh0Ci1DQz0kYWNfc2F2ZV9DQwotCi1maQotCi1jYXNlICJ4JGFjX2N2X3Byb2dfY2Nfc3RkYyIgaW4KLSAgeHx4bm8pCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm9uZSBuZWVkZWQiID4mNQotZWNobyAiJHtFQ0hPX1R9bm9uZSBuZWVkZWQiID4mNiA7OwotICAqKQotICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX3N0ZGMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfY2Nfc3RkYyIgPiY2Ci0gICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19zdGRjIiA7OwotZXNhYwotCi0jIFNvbWUgcGVvcGxlIHVzZSBhIEMrKyBjb21waWxlciB0byBjb21waWxlIEMuICBTaW5jZSB3ZSB1c2UgYGV4aXQnLAotIyBpbiBDKysgd2UgbmVlZCB0byBkZWNsYXJlIGl0LiAgSW4gY2FzZSBzb21lb25lIHVzZXMgdGhlIHNhbWUgY29tcGlsZXIKLSMgZm9yIGJvdGggY29tcGlsaW5nIEMgYW5kIEMrKyB3ZSBuZWVkIHRvIGhhdmUgdGhlIEMrKyBjb21waWxlciBkZWNpZGUKLSMgdGhlIGRlY2xhcmF0aW9uIG9mIGV4aXQsIHNpbmNlIGl0J3MgdGhlIG1vc3QgZGVtYW5kaW5nIGVudmlyb25tZW50LgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0jaWZuZGVmIF9fY3BsdXNwbHVzCi0gIGNob2tlIG1lCi0jZW5kaWYKLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZm9yIGFjX2RlY2xhcmF0aW9uIGluIFwKLSAgICcnIFwKLSAgICdleHRlcm4gIkMiIHZvaWQgc3RkOjpleGl0IChpbnQpIHRocm93ICgpOyB1c2luZyBzdGQ6OmV4aXQ7JyBcCi0gICAnZXh0ZXJuICJDIiB2b2lkIHN0ZDo6ZXhpdCAoaW50KTsgdXNpbmcgc3RkOjpleGl0OycgXAotICAgJ2V4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpIHRocm93ICgpOycgXAotICAgJ2V4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpOycgXAotICAgJ3ZvaWQgZXhpdCAoaW50KTsnCi1kbwotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19kZWNsYXJhdGlvbgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotaW50Ci1tYWluICgpCi17Ci1leGl0ICg0Mik7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIDoKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotY29udGludWUKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2RlY2xhcmF0aW9uCi1pbnQKLW1haW4gKCkKLXsKLWV4aXQgKDQyKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYnJlYWsKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWRvbmUKLXJtIC1mIGNvbmZ0ZXN0KgotaWYgdGVzdCAtbiAiJGFjX2RlY2xhcmF0aW9uIjsgdGhlbgotICBlY2hvICcjaWZkZWYgX19jcGx1c3BsdXMnID4+Y29uZmRlZnMuaAotICBlY2hvICRhY19kZWNsYXJhdGlvbiAgICAgID4+Y29uZmRlZnMuaAotICBlY2hvICcjZW5kaWYnICAgICAgICAgICAgID4+Y29uZmRlZnMuaAotZmkKLQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi1kZXBjYz0iJENDIiAgIGFtX2NvbXBpbGVyX2xpc3Q9Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC16ICIkQU1ERVBfVFJVRSIgJiYgdGVzdCAtZiAiJGFtX2RlcGNvbXAiOyB0aGVuCi0gICMgV2UgbWFrZSBhIHN1YmRpciBhbmQgZG8gdGhlIHRlc3RzIHRoZXJlLiAgT3RoZXJ3aXNlIHdlIGNhbiBlbmQgdXAKLSAgIyBtYWtpbmcgYm9ndXMgZmlsZXMgdGhhdCB3ZSBkb24ndCBrbm93IGFib3V0IGFuZCBuZXZlciByZW1vdmUuICBGb3IKLSAgIyBpbnN0YW5jZSBpdCB3YXMgcmVwb3J0ZWQgdGhhdCBvbiBIUC1VWCB0aGUgZ2NjIHRlc3Qgd2lsbCBlbmQgdXAKLSAgIyBtYWtpbmcgYSBkdW1teSBmaWxlIG5hbWVkIGBEJyAtLSBiZWNhdXNlIGAtTUQnIG1lYW5zIGBwdXQgdGhlIG91dHB1dAotICAjIGluIEQnLgotICBta2RpciBjb25mdGVzdC5kaXIKLSAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKLSAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KLSAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKLSAgY2QgY29uZnRlc3QuZGlyCi0gICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQotICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQotICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQotICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KLSAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0Ci0gICMgZGlyZWN0b3J5LgotICBta2RpciBzdWIKLQotICBhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCi0gIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCi0gICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiAncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCcgPCAuL2RlcGNvbXBgCi0gIGZpCi0gIGZvciBkZXBtb2RlIGluICRhbV9jb21waWxlcl9saXN0OyBkbwotICAgICMgU2V0dXAgYSBzb3VyY2Ugd2l0aCBtYW55IGRlcGVuZGVuY2llcywgYmVjYXVzZSBzb21lIGNvbXBpbGVycwotICAgICMgbGlrZSB0byB3cmFwIGxhcmdlIGRlcGVuZGVuY3kgbGlzdHMgb24gY29sdW1uIDgwICh3aXRoIFwpLCBhbmQKLSAgICAjIHdlIHNob3VsZCBub3QgY2hvb3NlIGEgZGVwY29tcCBtb2RlIHdoaWNoIGlzIGNvbmZ1c2VkIGJ5IHRoaXMuCi0gICAgIwotICAgICMgV2UgbmVlZCB0byByZWNyZWF0ZSB0aGVzZSBmaWxlcyBmb3IgZWFjaCB0ZXN0LCBhcyB0aGUgY29tcGlsZXIgbWF5Ci0gICAgIyBvdmVyd3JpdGUgc29tZSBvZiB0aGVtIHdoZW4gdGVzdGluZyB3aXRoIG9ic2N1cmUgY29tbWFuZCBsaW5lcy4KLSAgICAjIFRoaXMgaGFwcGVucyBhdCBsZWFzdCB3aXRoIHRoZSBBSVggQyBjb21waWxlci4KLSAgICA6ID4gc3ViL2NvbmZ0ZXN0LmMKLSAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNjsgZG8KLSAgICAgIGVjaG8gJyNpbmNsdWRlICJjb25mdHN0JyRpJy5oIicgPj4gc3ViL2NvbmZ0ZXN0LmMKLSAgICAgICMgVXNpbmcgYDogPiBzdWIvY29uZnRzdCRpLmgnIGNyZWF0ZXMgb25seSBzdWIvY29uZnRzdDEuaCB3aXRoCi0gICAgICAjIFNvbGFyaXMgOCdzIHsvdXNyLH0vYmluL3NoLgotICAgICAgdG91Y2ggc3ViL2NvbmZ0c3QkaS5oCi0gICAgZG9uZQotICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKLQotICAgIGNhc2UgJGRlcG1vZGUgaW4KLSAgICBub3NpZGVlZmZlY3QpCi0gICAgICAjIGFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKLSAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQKLSAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciID0geHllczsgdGhlbgotCWNvbnRpbnVlCisgICMgSUVFRSBiZWhhdmlvdXIgaXMgdGhlIGRlZmF1bHQgb24gYWxsIENQVXMgZXhjZXB0IEFscGhhIGFuZCBTSAorICAjIChhY2NvcmRpbmcgdG8gdGhlIHRlc3QgcmVzdWx0cyBvZiBCcnVubyBIYWlibGUncyBpZWVlZnAvZmVudl9kZWZhdWx0Lm00CisgICMgYW5kIHRoZSBHQ0MgNC4xLjIgbWFudWFsKS4KKyAgY2FzZSAiJGhvc3RfY3B1IiBpbgorICAgIGFscGhhKikKKyAgICAgICMgT24gQWxwaGEgc3lzdGVtcywgYSBjb21waWxlciBvcHRpb24gcHJvdmlkZXMgdGhlIGJlaGF2aW91ci4KKyAgICAgICMgU2VlIHRoZSBpZWVlKDMpIG1hbnVhbCBwYWdlLCBhbHNvIGF2YWlsYWJsZSBhdAorICAgICAgIyA8aHR0cDovL2gzMDA5Ny53d3czLmhwLmNvbS9kb2NzL2Jhc2VfZG9jL0RPQ1VNRU5UQVRJT04vVjUxQl9IVE1ML01BTi9NQU4zLzA2MDBfX19fLkhUTT4KKyAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisgICAgICAgICMgR0NDIGhhcyB0aGUgb3B0aW9uIC1taWVlZS4KKyAgICAgICAgIyBGb3IgZnVsbCBJRUVFIGNvbXBsaWFuY2UgKHJhcmVseSBuZWVkZWQpLCB1c2Ugb3B0aW9uIC1taWVlZS13aXRoLWluZXhhY3QuCisgICAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLW1pZWVlIgogICAgICAgZWxzZQotCWJyZWFrCisgICAgICAgICMgQ29tcGFxIChleC1ERUMpIEMgaGFzIHRoZSBvcHRpb24gLWllZWUsIGVxdWl2YWxlbnQgdG8gLWllZWVfd2l0aF9ub19pbmV4YWN0LgorICAgICAgICAjIEZvciBmdWxsIElFRUUgY29tcGxpYW5jZSAocmFyZWx5IG5lZWRlZCksIHVzZSBvcHRpb24gLWllZWVfd2l0aF9pbmV4YWN0LgorICAgICAgICBDUFBGTEFHUz0iJENQUEZMQUdTIC1pZWVlIgogICAgICAgZmkKICAgICAgIDs7Ci0gICAgbm9uZSkgYnJlYWsgOzsKLSAgICBlc2FjCi0gICAgIyBXZSBjaGVjayB3aXRoIGAtYycgYW5kIGAtbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCi0gICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKLSAgICAjIGhhbmRsZSBgLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4KLSAgICBpZiBkZXBtb2RlPSRkZXBtb2RlIFwKLSAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBcCi0gICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKLSAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAtbyBzdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gc3ViL2NvbmZ0ZXN0LmMgXAotICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgotICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICBncmVwIHN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgotICAgICAgICR7TUFLRS1tYWtlfSAtcyAtZiBjb25mbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgIyBpY2MgZG9lc24ndCBjaG9rZSBvbiB1bmtub3duIG9wdGlvbnMsIGl0IHdpbGwganVzdCBpc3N1ZSB3YXJuaW5ncwotICAgICAgIyBvciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKLSAgICAgICMgdGhhdCBzYXlzIGFuIG9wdGlvbiB3YXMgaWdub3JlZCBvciBub3Qgc3VwcG9ydGVkLgotICAgICAgIyBXaGVuIGdpdmVuIC1NUCwgaWNjIDcuMCBhbmQgNy4xIGNvbXBsYWluIHRodXNseToKLSAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSB3YXJuaW5nOiBpZ25vcmluZyBvcHRpb24gJy1NJzsgbm8gYXJndW1lbnQgcmVxdWlyZWQKLSAgICAgICMgVGhlIGRpYWdub3NpcyBjaGFuZ2VkIGluIGljYyA4LjA6Ci0gICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgcmVtYXJrOiBvcHRpb24gJy1NUCcgbm90IHN1cHBvcnRlZAotICAgICAgaWYgKGdyZXAgJ2lnbm9yaW5nIG9wdGlvbicgY29uZnRlc3QuZXJyIHx8Ci0gICAgICAgICAgZ3JlcCAnbm90IHN1cHBvcnRlZCcgY29uZnRlc3QuZXJyKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQotICAgICAgICBhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT0kZGVwbW9kZQotICAgICAgICBicmVhawotICAgICAgZmkKLSAgICBmaQotICBkb25lCi0KLSAgY2QgLi4KLSAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgotZWxzZQotICBhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCi1maQotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2Ci1DQ0RFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUKLQotCi0KLWlmCi0gIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCi0gICYmIHRlc3QgIiRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzOyB0aGVuCi0gIGFtX19mYXN0ZGVwQ0NfVFJVRT0KLSAgYW1fX2Zhc3RkZXBDQ19GQUxTRT0nIycKLWVsc2UKLSAgYW1fX2Zhc3RkZXBDQ19UUlVFPScjJwotICBhbV9fZmFzdGRlcENDX0ZBTFNFPQotZmkKLQotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1nY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Z2NjOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1nY2MiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotZmkKLWZpCi1DQz0kYWNfY3ZfcHJvZ19DQwotaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JENDIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0NDIjsgdGhlbgotICBhY19jdF9DQz0kQ0MKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGdjYzsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9ImdjYyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLWFjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCi1pZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3RfQ0MiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0gIENDPSRhY19jdF9DQwotZWxzZQotICBDQz0iJGFjX2N2X3Byb2dfQ0MiCi1maQotCi1pZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCi0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWNjOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1jYyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLUNDPSRhY19jdl9wcm9nX0NDCi1pZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQ0MiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQ0MiOyB0aGVuCi0gIGFjX2N0X0NDPSRDQwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBjYzsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9ImNjIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLWZpCi1maQotYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKLWlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9DQyIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSAgQ0M9JGFjX2N0X0NDCi1lbHNlCi0gIENDPSIkYWNfY3ZfcHJvZ19DQyIKLWZpCi0KLWZpCi1pZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGNjOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLSAgYWNfcHJvZ19yZWplY3RlZD1ubwotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBpZiB0ZXN0ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA9ICIvdXNyL3VjYi9jYyI7IHRoZW4KLSAgICAgICBhY19wcm9nX3JlamVjdGVkPXllcwotICAgICAgIGNvbnRpbnVlCi0gICAgIGZpCi0gICAgYWNfY3ZfcHJvZ19DQz0iY2MiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotaWYgdGVzdCAkYWNfcHJvZ19yZWplY3RlZCA9IHllczsgdGhlbgotICAjIFdlIGZvdW5kIGEgYm9nb24gaW4gdGhlIHBhdGgsIHNvIG1ha2Ugc3VyZSB3ZSBuZXZlciB1c2UgaXQuCi0gIHNldCBkdW1teSAkYWNfY3ZfcHJvZ19DQwotICBzaGlmdAotICBpZiB0ZXN0ICQjICE9IDA7IHRoZW4KLSAgICAjIFdlIGNob3NlIGEgZGlmZmVyZW50IGNvbXBpbGVyIGZyb20gdGhlIGJvZ3VzIG9uZS4KLSAgICAjIEhvd2V2ZXIsIGl0IGhhcyB0aGUgc2FtZSBiYXNlbmFtZSwgc28gdGhlIGJvZ29uIHdpbGwgYmUgY2hvc2VuCi0gICAgIyBmaXJzdCBpZiB3ZSBzZXQgQ0MgdG8ganVzdCB0aGUgYmFzZW5hbWU7IHVzZSB0aGUgZnVsbCBmaWxlIG5hbWUuCi0gICAgc2hpZnQKLSAgICBhY19jdl9wcm9nX0NDPSIkYXNfZGlyLyRhY193b3JkJHsxKycgJ30kQCIKLSAgZmkKLWZpCi1maQotZmkKLUNDPSRhY19jdl9wcm9nX0NDCi1pZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQ0MiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi1maQotaWYgdGVzdCAteiAiJENDIjsgdGhlbgotICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gIGZvciBhY19wcm9nIGluIGNsCi0gIGRvCi0gICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX0NDPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLUNDPSRhY19jdl9wcm9nX0NDCi1pZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQ0MiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0gICAgdGVzdCAtbiAiJENDIiAmJiBicmVhawotICBkb25lCi1maQotaWYgdGVzdCAteiAiJENDIjsgdGhlbgotICBhY19jdF9DQz0kQ0MKLSAgZm9yIGFjX3Byb2cgaW4gY2wKLWRvCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX3Byb2ciCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotZmkKLWZpCi1hY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQwotaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0NDIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotICB0ZXN0IC1uICIkYWNfY3RfQ0MiICYmIGJyZWFrCi1kb25lCi0KLSAgQ0M9JGFjX2N0X0NDCi1maQotCi1maQotCi0KLXRlc3QgLXogIiRDQyIgJiYgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLQotIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgotZWNobyAiJGFzX21lOiRMSU5FTk86IiBcCi0gICAgICJjaGVja2luZyBmb3IgQyBjb21waWxlciB2ZXJzaW9uIiA+JjUKLWFjX2NvbXBpbGVyPWBzZXQgWCAkYWNfY29tcGlsZTsgZWNobyAkMmAKLXsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA8L2Rldi9udWxsID4mNVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlciAtLXZlcnNpb24gPC9kZXYvbnVsbCA+JjUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLXsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVyIC12IDwvZGV2L251bGwgPiY1XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGVyIC12IDwvZGV2L251bGwgPiY1KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci17IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlciAtViA8L2Rldi9udWxsID4mNVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlciAtViA8L2Rldi9udWxsID4mNSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9jX2NvbXBpbGVyX2dudStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0jaWZuZGVmIF9fR05VQ19fCi0gICAgICAgY2hva2UgbWUKLSNlbmRpZgotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2NvbXBpbGVyX2dudT15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY29tcGlsZXJfZ251PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotYWNfY3ZfY19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY2Ci1HQ0M9YHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllcyAmJiBlY2hvIHllc2AKLWFjX3Rlc3RfQ0ZMQUdTPSR7Q0ZMQUdTK3NldH0KLWFjX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLUNGTEFHUz0iLWciCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWcuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfZytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfcHJvZ19jY19nPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9wcm9nX2NjX2c9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfZyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19jY19nIiA+JjYKLWlmIHRlc3QgIiRhY190ZXN0X0NGTEFHUyIgPSBzZXQ7IHRoZW4KLSAgQ0ZMQUdTPSRhY19zYXZlX0NGTEFHUwotZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2NjX2cgPSB5ZXM7IHRoZW4KLSAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICBDRkxBR1M9Ii1nIC1PMiIKLSAgZWxzZQotICAgIENGTEFHUz0iLWciCi0gIGZpCi1lbHNlCi0gIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgQ0ZMQUdTPSItTzIiCi0gIGVsc2UKLSAgICBDRkxBR1M9Ci0gIGZpCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBBTlNJIEMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgQU5TSSBDLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX3N0ZGMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY3ZfcHJvZ19jY19zdGRjPW5vCi1hY19zYXZlX0NDPSRDQwotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotLyogTW9zdCBvZiB0aGUgZm9sbG93aW5nIHRlc3RzIGFyZSBzdG9sZW4gZnJvbSBSQ1MgNS43J3Mgc3JjL2NvbmYuc2guICAqLwotc3RydWN0IGJ1ZiB7IGludCB4OyB9OwotRklMRSAqICgqcmNzb3BlbikgKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KTsKLXN0YXRpYyBjaGFyICplIChwLCBpKQotICAgICBjaGFyICoqcDsKLSAgICAgaW50IGk7Ci17Ci0gIHJldHVybiBwW2ldOwotfQotc3RhdGljIGNoYXIgKmYgKGNoYXIgKiAoKmcpIChjaGFyICoqLCBpbnQpLCBjaGFyICoqcCwgLi4uKQotewotICBjaGFyICpzOwotICB2YV9saXN0IHY7Ci0gIHZhX3N0YXJ0ICh2LHApOwotICBzID0gZyAocCwgdmFfYXJnICh2LGludCkpOwotICB2YV9lbmQgKHYpOwotICByZXR1cm4gczsKLX0KLQotLyogT1NGIDQuMCBDb21wYXEgY2MgaXMgc29tZSBzb3J0IG9mIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQuICBJdCBoYXMKLSAgIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIHN0dWZmLCBidXQgbm90ICdceEhIJyBoZXggY2hhcmFjdGVyIGNvbnN0YW50cy4KLSAgIFRoZXNlIGRvbid0IHByb3Zva2UgYW4gZXJyb3IgdW5mb3J0dW5hdGVseSwgaW5zdGVhZCBhcmUgc2lsZW50bHkgdHJlYXRlZAotICAgYXMgJ3gnLiAgVGhlIGZvbGxvd2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAtc3RkMSBpcyBhZGRlZCB0byBnZXQKLSAgIHByb3BlciBBTlNJIG1vZGUuICBDdXJpb3VzbHkgJ1x4MDAnIT0neCcgYWx3YXlzIGNvbWVzIG91dCB0cnVlLCBmb3IgYW4KLSAgIGFycmF5IHNpemUgYXQgbGVhc3QuICBJdCdzIG5lY2Vzc2FyeSB0byB3cml0ZSAnXHgwMCc9PTAgdG8gZ2V0IHNvbWV0aGluZwotICAgdGhhdCdzIHRydWUgb25seSB3aXRoIC1zdGQxLiAgKi8KLWludCBvc2Y0X2NjX2FycmF5IFsnXHgwMCcgPT0gMCA/IDEgOiAtMV07Ci0KLWludCB0ZXN0IChpbnQgaSwgZG91YmxlIHgpOwotc3RydWN0IHMxIHtpbnQgKCpmKSAoaW50IGEpO307Ci1zdHJ1Y3QgczIge2ludCAoKmYpIChkb3VibGUgYSk7fTsKLWludCBwYWlybmFtZXMgKGludCwgY2hhciAqKiwgRklMRSAqKCopKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KSwgaW50LCBpbnQpOwotaW50IGFyZ2M7Ci1jaGFyICoqYXJndjsKLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgKGUsIGFyZ3YsIDApICE9IGFyZ3ZbMF0gIHx8ICBmIChlLCBhcmd2LCAxKSAhPSBhcmd2WzFdOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi0jIERvbid0IHRyeSBnY2MgLWFuc2k7IHRoYXQgdHVybnMgb2ZmIHVzZWZ1bCBleHRlbnNpb25zIGFuZAotIyBicmVha3Mgc29tZSBzeXN0ZW1zJyBoZWFkZXIgZmlsZXMuCi0jIEFJWAkJCS1xbGFuZ2x2bD1hbnNpCi0jIFVsdHJpeCBhbmQgT1NGLzEJLXN0ZDEKLSMgSFAtVVggMTAuMjAgYW5kIGxhdGVyCS1BZQotIyBIUC1VWCBvbGRlciB2ZXJzaW9ucwktQWEgLURfSFBVWF9TT1VSQ0UKLSMgU1ZSNAkJCS1YYyAtRF9fRVhURU5TSU9OU19fCi1mb3IgYWNfYXJnIGluICIiIC1xbGFuZ2x2bD1hbnNpIC1zdGQxIC1BZSAiLUFhIC1EX0hQVVhfU09VUkNFIiAiLVhjIC1EX19FWFRFTlNJT05TX18iCi1kbwotICBDQz0iJGFjX3NhdmVfQ0MgJGFjX2FyZyIKLSAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfcHJvZ19jY19zdGRjPSRhY19hcmcKLWJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAotZG9uZQotcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfb2JqZXh0Ci1DQz0kYWNfc2F2ZV9DQwotCi1maQotCi1jYXNlICJ4JGFjX2N2X3Byb2dfY2Nfc3RkYyIgaW4KLSAgeHx4bm8pCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm9uZSBuZWVkZWQiID4mNQotZWNobyAiJHtFQ0hPX1R9bm9uZSBuZWVkZWQiID4mNiA7OwotICAqKQotICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX3N0ZGMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfY2Nfc3RkYyIgPiY2Ci0gICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19zdGRjIiA7OwotZXNhYwotCi0jIFNvbWUgcGVvcGxlIHVzZSBhIEMrKyBjb21waWxlciB0byBjb21waWxlIEMuICBTaW5jZSB3ZSB1c2UgYGV4aXQnLAotIyBpbiBDKysgd2UgbmVlZCB0byBkZWNsYXJlIGl0LiAgSW4gY2FzZSBzb21lb25lIHVzZXMgdGhlIHNhbWUgY29tcGlsZXIKLSMgZm9yIGJvdGggY29tcGlsaW5nIEMgYW5kIEMrKyB3ZSBuZWVkIHRvIGhhdmUgdGhlIEMrKyBjb21waWxlciBkZWNpZGUKLSMgdGhlIGRlY2xhcmF0aW9uIG9mIGV4aXQsIHNpbmNlIGl0J3MgdGhlIG1vc3QgZGVtYW5kaW5nIGVudmlyb25tZW50LgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0jaWZuZGVmIF9fY3BsdXNwbHVzCi0gIGNob2tlIG1lCi0jZW5kaWYKLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZm9yIGFjX2RlY2xhcmF0aW9uIGluIFwKLSAgICcnIFwKLSAgICdleHRlcm4gIkMiIHZvaWQgc3RkOjpleGl0IChpbnQpIHRocm93ICgpOyB1c2luZyBzdGQ6OmV4aXQ7JyBcCi0gICAnZXh0ZXJuICJDIiB2b2lkIHN0ZDo6ZXhpdCAoaW50KTsgdXNpbmcgc3RkOjpleGl0OycgXAotICAgJ2V4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpIHRocm93ICgpOycgXAotICAgJ2V4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpOycgXAotICAgJ3ZvaWQgZXhpdCAoaW50KTsnCi1kbwotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19kZWNsYXJhdGlvbgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotaW50Ci1tYWluICgpCi17Ci1leGl0ICg0Mik7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIDoKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotY29udGludWUKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2RlY2xhcmF0aW9uCi1pbnQKLW1haW4gKCkKLXsKLWV4aXQgKDQyKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYnJlYWsKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWRvbmUKLXJtIC1mIGNvbmZ0ZXN0KgotaWYgdGVzdCAtbiAiJGFjX2RlY2xhcmF0aW9uIjsgdGhlbgotICBlY2hvICcjaWZkZWYgX19jcGx1c3BsdXMnID4+Y29uZmRlZnMuaAotICBlY2hvICRhY19kZWNsYXJhdGlvbiAgICAgID4+Y29uZmRlZnMuaAotICBlY2hvICcjZW5kaWYnICAgICAgICAgICAgID4+Y29uZmRlZnMuaAotZmkKLQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi1kZXBjYz0iJENDIiAgIGFtX2NvbXBpbGVyX2xpc3Q9Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC16ICIkQU1ERVBfVFJVRSIgJiYgdGVzdCAtZiAiJGFtX2RlcGNvbXAiOyB0aGVuCi0gICMgV2UgbWFrZSBhIHN1YmRpciBhbmQgZG8gdGhlIHRlc3RzIHRoZXJlLiAgT3RoZXJ3aXNlIHdlIGNhbiBlbmQgdXAKLSAgIyBtYWtpbmcgYm9ndXMgZmlsZXMgdGhhdCB3ZSBkb24ndCBrbm93IGFib3V0IGFuZCBuZXZlciByZW1vdmUuICBGb3IKLSAgIyBpbnN0YW5jZSBpdCB3YXMgcmVwb3J0ZWQgdGhhdCBvbiBIUC1VWCB0aGUgZ2NjIHRlc3Qgd2lsbCBlbmQgdXAKLSAgIyBtYWtpbmcgYSBkdW1teSBmaWxlIG5hbWVkIGBEJyAtLSBiZWNhdXNlIGAtTUQnIG1lYW5zIGBwdXQgdGhlIG91dHB1dAotICAjIGluIEQnLgotICBta2RpciBjb25mdGVzdC5kaXIKLSAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKLSAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KLSAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKLSAgY2QgY29uZnRlc3QuZGlyCi0gICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQotICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQotICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQotICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KLSAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0Ci0gICMgZGlyZWN0b3J5LgotICBta2RpciBzdWIKLQotICBhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCi0gIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCi0gICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiAncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCcgPCAuL2RlcGNvbXBgCi0gIGZpCi0gIGZvciBkZXBtb2RlIGluICRhbV9jb21waWxlcl9saXN0OyBkbwotICAgICMgU2V0dXAgYSBzb3VyY2Ugd2l0aCBtYW55IGRlcGVuZGVuY2llcywgYmVjYXVzZSBzb21lIGNvbXBpbGVycwotICAgICMgbGlrZSB0byB3cmFwIGxhcmdlIGRlcGVuZGVuY3kgbGlzdHMgb24gY29sdW1uIDgwICh3aXRoIFwpLCBhbmQKLSAgICAjIHdlIHNob3VsZCBub3QgY2hvb3NlIGEgZGVwY29tcCBtb2RlIHdoaWNoIGlzIGNvbmZ1c2VkIGJ5IHRoaXMuCi0gICAgIwotICAgICMgV2UgbmVlZCB0byByZWNyZWF0ZSB0aGVzZSBmaWxlcyBmb3IgZWFjaCB0ZXN0LCBhcyB0aGUgY29tcGlsZXIgbWF5Ci0gICAgIyBvdmVyd3JpdGUgc29tZSBvZiB0aGVtIHdoZW4gdGVzdGluZyB3aXRoIG9ic2N1cmUgY29tbWFuZCBsaW5lcy4KLSAgICAjIFRoaXMgaGFwcGVucyBhdCBsZWFzdCB3aXRoIHRoZSBBSVggQyBjb21waWxlci4KLSAgICA6ID4gc3ViL2NvbmZ0ZXN0LmMKLSAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNjsgZG8KLSAgICAgIGVjaG8gJyNpbmNsdWRlICJjb25mdHN0JyRpJy5oIicgPj4gc3ViL2NvbmZ0ZXN0LmMKLSAgICAgICMgVXNpbmcgYDogPiBzdWIvY29uZnRzdCRpLmgnIGNyZWF0ZXMgb25seSBzdWIvY29uZnRzdDEuaCB3aXRoCi0gICAgICAjIFNvbGFyaXMgOCdzIHsvdXNyLH0vYmluL3NoLgotICAgICAgdG91Y2ggc3ViL2NvbmZ0c3QkaS5oCi0gICAgZG9uZQotICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKLQotICAgIGNhc2UgJGRlcG1vZGUgaW4KLSAgICBub3NpZGVlZmZlY3QpCi0gICAgICAjIGFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKLSAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQKLSAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciID0geHllczsgdGhlbgotCWNvbnRpbnVlCi0gICAgICBlbHNlCi0JYnJlYWsKKyAgICBzaCopCisgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgICAjIEdDQyBoYXMgdGhlIG9wdGlvbiAtbWllZWUuCisgICAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLW1pZWVlIgogICAgICAgZmkKICAgICAgIDs7Ci0gICAgbm9uZSkgYnJlYWsgOzsKLSAgICBlc2FjCi0gICAgIyBXZSBjaGVjayB3aXRoIGAtYycgYW5kIGAtbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCi0gICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKLSAgICAjIGhhbmRsZSBgLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4KLSAgICBpZiBkZXBtb2RlPSRkZXBtb2RlIFwKLSAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBcCi0gICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKLSAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAtbyBzdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gc3ViL2NvbmZ0ZXN0LmMgXAotICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgotICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICBncmVwIHN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgotICAgICAgICR7TUFLRS1tYWtlfSAtcyAtZiBjb25mbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgIyBpY2MgZG9lc24ndCBjaG9rZSBvbiB1bmtub3duIG9wdGlvbnMsIGl0IHdpbGwganVzdCBpc3N1ZSB3YXJuaW5ncwotICAgICAgIyBvciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKLSAgICAgICMgdGhhdCBzYXlzIGFuIG9wdGlvbiB3YXMgaWdub3JlZCBvciBub3Qgc3VwcG9ydGVkLgotICAgICAgIyBXaGVuIGdpdmVuIC1NUCwgaWNjIDcuMCBhbmQgNy4xIGNvbXBsYWluIHRodXNseToKLSAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSB3YXJuaW5nOiBpZ25vcmluZyBvcHRpb24gJy1NJzsgbm8gYXJndW1lbnQgcmVxdWlyZWQKLSAgICAgICMgVGhlIGRpYWdub3NpcyBjaGFuZ2VkIGluIGljYyA4LjA6Ci0gICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgcmVtYXJrOiBvcHRpb24gJy1NUCcgbm90IHN1cHBvcnRlZAotICAgICAgaWYgKGdyZXAgJ2lnbm9yaW5nIG9wdGlvbicgY29uZnRlc3QuZXJyIHx8Ci0gICAgICAgICAgZ3JlcCAnbm90IHN1cHBvcnRlZCcgY29uZnRlc3QuZXJyKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQotICAgICAgICBhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT0kZGVwbW9kZQotICAgICAgICBicmVhawotICAgICAgZmkKKyAgZXNhYworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGFyZ2VmaWxlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2xhcmdlZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2xhcmdlZmlsZTsKK2ZpCisKK2lmIHRlc3QgIiRlbmFibGVfbGFyZ2VmaWxlIiAhPSBubzsgdGhlbgorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNwZWNpYWwgQyBjb21waWxlciBvcHRpb25zIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNwZWNpYWwgQyBjb21waWxlciBvcHRpb25zIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc3lzX2xhcmdlZmlsZV9DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2N2X3N5c19sYXJnZWZpbGVfQ0M9bm8KKyAgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgICAgYWNfc2F2ZV9DQz0kQ0MKKyAgICAgICB3aGlsZSA6OyBkbworCSAjIElSSVggNi4yIGFuZCBsYXRlciBkbyBub3Qgc3VwcG9ydCBsYXJnZSBmaWxlcyBieSBkZWZhdWx0LAorCSAjIHNvIHVzZSB0aGUgQyBjb21waWxlcidzIC1uMzIgb3B0aW9uIGlmIHRoYXQgaGVscHMuCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAvKiBDaGVjayB0aGF0IG9mZl90IGNhbiByZXByZXNlbnQgMioqNjMgLSAxIGNvcnJlY3RseS4KKyAgICBXZSBjYW4ndCBzaW1wbHkgZGVmaW5lIExBUkdFX09GRl9UIHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcsCisgICAgc2luY2Ugc29tZSBDKysgY29tcGlsZXJzIG1hc3F1ZXJhZGluZyBhcyBDIGNvbXBpbGVycworICAgIGluY29ycmVjdGx5IHJlamVjdCA5MjIzMzcyMDM2ODU0Nzc1ODA3LiAgKi8KKyNkZWZpbmUgTEFSR0VfT0ZGX1QgKCgob2ZmX3QpIDEgPDwgNjIpIC0gMSArICgob2ZmX3QpIDEgPDwgNjIpKQorICBpbnQgb2ZmX3RfaXNfbGFyZ2VbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKKwkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQorCQkgICAgICA/IDEgOiAtMV07CitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCisJIGlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisJIENDPSIkQ0MgLW4zMiIKKwkgaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zeXNfbGFyZ2VmaWxlX0NDPScgLW4zMic7IGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAorCSBicmVhaworICAgICAgIGRvbmUKKyAgICAgICBDQz0kYWNfc2F2ZV9DQworICAgICAgIHJtIC1mIGNvbmZ0ZXN0LiRhY19leHQKICAgICBmaQotICBkb25lCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zeXNfbGFyZ2VmaWxlX0NDIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQyIgPiY2OyB9CisgIGlmIHRlc3QgIiRhY19jdl9zeXNfbGFyZ2VmaWxlX0NDIiAhPSBubzsgdGhlbgorICAgIENDPSRDQyRhY19jdl9zeXNfbGFyZ2VmaWxlX0NDCisgIGZpCiAKLSAgY2QgLi4KLSAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBfRklMRV9PRkZTRVRfQklUUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBfRklMRV9PRkZTRVRfQklUUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3N5c19maWxlX29mZnNldF9iaXRzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorICB3aGlsZSA6OyBkbworICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgLyogQ2hlY2sgdGhhdCBvZmZfdCBjYW4gcmVwcmVzZW50IDIqKjYzIC0gMSBjb3JyZWN0bHkuCisgICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LAorICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKKyAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovCisjZGVmaW5lIExBUkdFX09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAtIDEgKyAoKG9mZl90KSAxIDw8IDYyKSkKKyAgaW50IG9mZl90X2lzX2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCisJCSAgICAgICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkKKwkJICAgICAgPyAxIDogLTFdOworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cz1ubzsgYnJlYWsKIGZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyA2NAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgorICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKKyAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCisgICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLworI2RlZmluZSBMQVJHRV9PRkZfVCAoKChvZmZfdCkgMSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8PCA2MikpCisgIGludCBvZmZfdF9pc19sYXJnZVsoTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQorCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjQ3ID09IDEpCisJCSAgICAgID8gMSA6IC0xXTsKK2ludAorbWFpbiAoKQorewogCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHM9NjQ7IGJyZWFrCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2Ci1DQ0RFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUKLQotCi0KLWlmCi0gIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCi0gICYmIHRlc3QgIiRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzOyB0aGVuCi0gIGFtX19mYXN0ZGVwQ0NfVFJVRT0KLSAgYW1fX2Zhc3RkZXBDQ19GQUxTRT0nIycKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cz11bmtub3duCisgIGJyZWFrCitkb25lCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzIiA+JjY7IH0KK2Nhc2UgJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzIGluICMoCisgIG5vIHwgdW5rbm93bikgOzsKKyAgKikKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzCitfQUNFT0YKKzs7Citlc2FjCitybSAtcmYgY29uZnRlc3QqCisgIGlmIHRlc3QgJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzID0gdW5rbm93bjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIF9MQVJHRV9GSUxFUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBfTEFSR0VfRklMRVMgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zeXNfbGFyZ2VfZmlsZXMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBhbV9fZmFzdGRlcENDX1RSVUU9JyMnCi0gIGFtX19mYXN0ZGVwQ0NfRkFMU0U9CisgIHdoaWxlIDo7IGRvCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAvKiBDaGVjayB0aGF0IG9mZl90IGNhbiByZXByZXNlbnQgMioqNjMgLSAxIGNvcnJlY3RseS4KKyAgICBXZSBjYW4ndCBzaW1wbHkgZGVmaW5lIExBUkdFX09GRl9UIHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcsCisgICAgc2luY2Ugc29tZSBDKysgY29tcGlsZXJzIG1hc3F1ZXJhZGluZyBhcyBDIGNvbXBpbGVycworICAgIGluY29ycmVjdGx5IHJlamVjdCA5MjIzMzcyMDM2ODU0Nzc1ODA3LiAgKi8KKyNkZWZpbmUgTEFSR0VfT0ZGX1QgKCgob2ZmX3QpIDEgPDwgNjIpIC0gMSArICgob2ZmX3QpIDEgPDwgNjIpKQorICBpbnQgb2ZmX3RfaXNfbGFyZ2VbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKKwkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQorCQkgICAgICA/IDEgOiAtMV07CitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3N5c19sYXJnZV9maWxlcz1ubzsgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2RlZmluZSBfTEFSR0VfRklMRVMgMQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgorICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKKyAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCisgICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLworI2RlZmluZSBMQVJHRV9PRkZfVCAoKChvZmZfdCkgMSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8PCA2MikpCisgIGludCBvZmZfdF9pc19sYXJnZVsoTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQorCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjQ3ID09IDEpCisJCSAgICAgID8gMSA6IC0xXTsKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzPTE7IGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGFjX2N2X3N5c19sYXJnZV9maWxlcz11bmtub3duCisgIGJyZWFrCitkb25lCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zeXNfbGFyZ2VfZmlsZXMiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zeXNfbGFyZ2VfZmlsZXMiID4mNjsgfQorY2FzZSAkYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzIGluICMoCisgIG5vIHwgdW5rbm93bikgOzsKKyAgKikKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgX0xBUkdFX0ZJTEVTICRhY19jdl9zeXNfbGFyZ2VfZmlsZXMKK19BQ0VPRgorOzsKK2VzYWMKK3JtIC1yZiBjb25mdGVzdCoKKyAgZmkKKworCiBmaQogCiAKIAotYW1fY3ZfcHJvZ19jY19zdGRjPSRhY19jdl9wcm9nX2NjX3N0ZGMKIAotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWdjYy13YXJuaW5ncyBvciAtLWRpc2FibGUtZ2NjLXdhcm5pbmdzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2djY193YXJuaW5ncytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfZ2NjX3dhcm5pbmdzIgotICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisKKworICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdGhyZWFkcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV90aHJlYWRzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfdGhyZWFkczsgZ2xfdXNlX3RocmVhZHM9JGVuYWJsZXZhbAorZWxzZQorICBpZiB0ZXN0IC1uICIkZ2xfdXNlX3RocmVhZHNfZGVmYXVsdCI7IHRoZW4KKyAgICAgICBnbF91c2VfdGhyZWFkcz0iJGdsX3VzZV90aHJlYWRzX2RlZmF1bHQiCisgICAgIGVsc2UKKyAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zZiopIGdsX3VzZV90aHJlYWRzPW5vIDs7CisgICAgICAgICBjeWd3aW4qKQorICAgICAgICAgICAgICAgY2FzZSBgdW5hbWUgLXJgIGluCisgICAgICAgICAgICAgICAgIDEuWzAtNV0uKikgZ2xfdXNlX3RocmVhZHM9bm8gOzsKKyAgICAgICAgICAgICAgICAgKikgICAgICAgICBnbF91c2VfdGhyZWFkcz15ZXMgOzsKKyAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAqKSAgICBnbF91c2VfdGhyZWFkcz15ZXMgOzsKKyAgICAgICBlc2FjCisgICAgIGZpCisKK2ZpCisKKyAgaWYgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiA9IHllcyB8fCB0ZXN0ICIkZ2xfdXNlX3RocmVhZHMiID0gcG9zaXg7IHRoZW4KKyAgICAjIEZvciB1c2luZyA8cHRocmVhZC5oPjoKKyAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgIG9zZiopCisgICAgICAgICMgT24gT1NGLzEsIHRoZSBjb21waWxlciBuZWVkcyB0aGUgZmxhZyAtRF9SRUVOVFJBTlQgc28gdGhhdCBpdAorICAgICAgICAjIGdyb2tzIDxwdGhyZWFkLmg+LiBjYyBhbHNvIHVuZGVyc3RhbmRzIHRoZSBmbGFnIC1wdGhyZWFkLCBidXQKKyAgICAgICAgIyB3ZSBkb24ndCB1c2UgaXQgYmVjYXVzZSAxLiBnY2MtMi45NSBkb2Vzbid0IHVuZGVyc3RhbmQgLXB0aHJlYWQsCisgICAgICAgICMgMi4gcHV0dGluZyBhIGZsYWcgaW50byBDUFBGTEFHUyB0aGF0IGhhcyBhbiBlZmZlY3Qgb24gdGhlIGxpbmtlcgorICAgICAgICAjIGNhdXNlcyB0aGUgQUNfTElOS19JRkVMU0UgdGVzdCBiZWxvdyB0byBzdWNjZWVkIHVuZXhwZWN0ZWRseSwKKyAgICAgICAgIyBsZWFkaW5nIHRvIHdyb25nIHZhbHVlcyBvZiBMSUJUSFJFQUQgYW5kIExUTElCVEhSRUFELgorICAgICAgICBDUFBGTEFHUz0iJENQUEZMQUdTIC1EX1JFRU5UUkFOVCIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgIyBTb21lIHN5c3RlbXMgb3B0aW1pemUgZm9yIHNpbmdsZS10aHJlYWRlZCBwcm9ncmFtcyBieSBkZWZhdWx0LCBhbmQKKyAgICAjIG5lZWQgc3BlY2lhbCBmbGFncyB0byBkaXNhYmxlIHRoZXNlIG9wdGltaXphdGlvbnMuIEZvciBleGFtcGxlLCB0aGUKKyAgICAjIGRlZmluaXRpb24gb2YgJ2Vycm5vJyBpbiA8ZXJybm8uaD4uCisgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICBhaXgqIHwgZnJlZWJzZCopIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfVEhSRUFEX1NBRkUiIDs7CisgICAgICBzb2xhcmlzKikgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9SRUVOVFJBTlQiIDs7CisgICAgZXNhYworICBmaQorCisKKworCisgICMgQ29kZSBmcm9tIG1vZHVsZSBhbGxvY2Etb3B0OgorICAjIENvZGUgZnJvbSBtb2R1bGUgYW5ub3VuY2UtZ2VuOgorICAjIENvZGUgZnJvbSBtb2R1bGUgYXJnbWF0Y2g6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBhc3NlcnQ6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBiaW5hcnktaW86CisgICMgQ29kZSBmcm9tIG1vZHVsZSBiaXRyb3RhdGU6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBjLWN0eXBlOgorICAjIENvZGUgZnJvbSBtb2R1bGUgYy1zdHJjYXNlOgorICAjIENvZGUgZnJvbSBtb2R1bGUgYy1zdHJjYXNlZXE6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBjYWxsb2MtcG9zaXg6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBjbG9leGVjOgorICAjIENvZGUgZnJvbSBtb2R1bGUgY2xvc2U6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBjbG9zZS1zdHJlYW06CisgICMgQ29kZSBmcm9tIG1vZHVsZSBjbG9zZW91dDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGNvbmZpZy1oOgorICAjIENvZGUgZnJvbSBtb2R1bGUgY29uZmlnbWFrZToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGRpcm5hbWU6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBkaXJuYW1lLWxncGw6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBkby1yZWxlYXNlLWNvbW1pdC1hbmQtdGFnOgorICAjIENvZGUgZnJvbSBtb2R1bGUgZG9zbmFtZToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGRvdWJsZS1zbGFzaC1yb290OgorICAjIENvZGUgZnJvbSBtb2R1bGUgZHVwMjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGVudmlyb246CisgICMgQ29kZSBmcm9tIG1vZHVsZSBlcnJubzoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGVycm9yOgorICAjIENvZGUgZnJvbSBtb2R1bGUgZXhpdGZhaWw6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBleHRlbnNpb25zOgorCisgICMgQ29kZSBmcm9tIG1vZHVsZSBleHRlcm4taW5saW5lOgorICAjIENvZGUgZnJvbSBtb2R1bGUgZmF0YWwtc2lnbmFsOgorICAjIENvZGUgZnJvbSBtb2R1bGUgZmNudGw6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBmY250bC1oOgorICAjIENvZGUgZnJvbSBtb2R1bGUgZmQtaG9vazoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGZkLXNhZmVyLWZsYWc6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBmZGw6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBmbG9hdDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGZvcGVuOgorICAjIENvZGUgZnJvbSBtb2R1bGUgZm9wZW4tc2FmZXI6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBmcGVuZGluZzoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGZwaWVlZToKKworICAjIENvZGUgZnJvbSBtb2R1bGUgZnByaW50Zi1wb3NpeDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGZwdWN3OgorICAjIENvZGUgZnJvbSBtb2R1bGUgZnJleHAtbm9saWJtOgorICAjIENvZGUgZnJvbSBtb2R1bGUgZnJleHBsLW5vbGlibToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGZzZXRlcnI6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBmc3RhdDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGdlbmRvY3M6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBnZXRkZWxpbToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGdldGR0YWJsZXNpemU6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBnZXRsaW5lOgorICAjIENvZGUgZnJvbSBtb2R1bGUgZ2V0b3B0LWdudToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGdldG9wdC1wb3NpeDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGdldHRleHQ6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBnZXR0ZXh0LWg6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBnaXQtdmVyc2lvbi1nZW46CisgICMgQ29kZSBmcm9tIG1vZHVsZSBnaXRsb2ctdG8tY2hhbmdlbG9nOgorICAjIENvZGUgZnJvbSBtb2R1bGUgZ251LXdlYi1kb2MtdXBkYXRlOgorICAjIENvZGUgZnJvbSBtb2R1bGUgZ251bWFrZWZpbGU6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBnbnVwbG9hZDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGdwbC0zLjA6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBoYXNoOgorICAjIENvZGUgZnJvbSBtb2R1bGUgaGF2ZWxpYjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGluY2x1ZGVfbmV4dDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGludHByb3BzOgorICAjIENvZGUgZnJvbSBtb2R1bGUgaW50dHlwZXM6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBpbnR0eXBlcy1pbmNvbXBsZXRlOgorICAjIENvZGUgZnJvbSBtb2R1bGUgaXNuYW46CisgICMgQ29kZSBmcm9tIG1vZHVsZSBpc25hbmQ6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBpc25hbmQtbm9saWJtOgorICAjIENvZGUgZnJvbSBtb2R1bGUgaXNuYW5mOgorICAjIENvZGUgZnJvbSBtb2R1bGUgaXNuYW5mLW5vbGlibToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGlzbmFubDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGlzbmFubC1ub2xpYm06CisgICMgQ29kZSBmcm9tIG1vZHVsZSBpc3dibGFuazoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGphdmFjb21wLXNjcmlwdDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGphdmFleGVjLXNjcmlwdDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGxhcmdlZmlsZToKKworICAjIENvZGUgZnJvbSBtb2R1bGUgbGRleHA6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBsZGV4cGw6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBsb2NhbGNoYXJzZXQ6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBsb2NrOgorICAjIENvZGUgZnJvbSBtb2R1bGUgbWFpbnRhaW5lci1tYWtlZmlsZToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIG1hbGxvYy1nbnU6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBtYWxsb2MtcG9zaXg6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBtYXRoOgorICAjIENvZGUgZnJvbSBtb2R1bGUgbWJjaGFyOgorICAjIENvZGUgZnJvbSBtb2R1bGUgbWJydG93YzoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIG1ic2NocjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIG1ic2luaXQ6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBtYnNyY2hyOgorICAjIENvZGUgZnJvbSBtb2R1bGUgbWJzd2lkdGg6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBtYnVpdGVyOgorICAjIENvZGUgZnJvbSBtb2R1bGUgbWVtY2hyOgorICAjIENvZGUgZnJvbSBtb2R1bGUgbXN2Yy1pbnZhbDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIG1zdmMtbm90aHJvdzoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIG11bHRpYXJjaDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIG5vY3Jhc2g6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBvYnN0YWNrOgorICAjIENvZGUgZnJvbSBtb2R1bGUgb2JzdGFjay1wcmludGY6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBvcGVuOgorICAjIENvZGUgZnJvbSBtb2R1bGUgcGF0aG1heDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHBlcnJvcjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHBpcGUyOgorICAjIENvZGUgZnJvbSBtb2R1bGUgcGlwZTItc2FmZXI6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBwb3NpeF9zcGF3bi1pbnRlcm5hbDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyOgorICAjIENvZGUgZnJvbSBtb2R1bGUgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW46CisgICMgQ29kZSBmcm9tIG1vZHVsZSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfZGVzdHJveToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19pbml0OgorICAjIENvZGUgZnJvbSBtb2R1bGUgcG9zaXhfc3Bhd25hdHRyX2Rlc3Ryb3k6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBwb3NpeF9zcGF3bmF0dHJfaW5pdDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9zZXRmbGFnczoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9zZXRzaWdtYXNrOgorICAjIENvZGUgZnJvbSBtb2R1bGUgcG9zaXhfc3Bhd25wOgorICAjIENvZGUgZnJvbSBtb2R1bGUgcHJpbnRmLWZyZXhwOgorICAjIENvZGUgZnJvbSBtb2R1bGUgcHJpbnRmLWZyZXhwbDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHByaW50Zi1wb3NpeDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHByaW50Zi1zYWZlOgorICAjIENvZGUgZnJvbSBtb2R1bGUgcHJvZ25hbWU6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBxdW90ZToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHF1b3RlYXJnOgorICAjIENvZGUgZnJvbSBtb2R1bGUgcXVvdGVhcmctc2ltcGxlOgorICAjIENvZGUgZnJvbSBtb2R1bGUgcmFpc2U6CisgICMgQ29kZSBmcm9tIG1vZHVsZSByYXdtZW1jaHI6CisgICMgQ29kZSBmcm9tIG1vZHVsZSByZWFkbWUtcmVsZWFzZToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHJlYWxsb2MtcG9zaXg6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzY2hlZDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHNpZ2FjdGlvbjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHNpZ25hbC1oOgorICAjIENvZGUgZnJvbSBtb2R1bGUgc2lnbmJpdDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHNpZ3Byb2NtYXNrOgorICAjIENvZGUgZnJvbSBtb2R1bGUgc2l6ZV9tYXg6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzbmlwcGV0L19Ob3JldHVybjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHNuaXBwZXQvYXJnLW5vbm51bGw6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzbmlwcGV0L2MrK2RlZnM6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzbmlwcGV0L3dhcm4tb24tdXNlOgorICAjIENvZGUgZnJvbSBtb2R1bGUgc25wcmludGY6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzbnByaW50Zi1wb3NpeDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHNwYXduOgorICAjIENvZGUgZnJvbSBtb2R1bGUgc3Bhd24tcGlwZToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHNwcmludGYtcG9zaXg6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzc2l6ZV90OgorICAjIENvZGUgZnJvbSBtb2R1bGUgc3RhdDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHN0ZGJvb2w6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzdGRkZWY6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzdGRpbnQ6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzdGRpbzoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHN0ZGxpYjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHN0cGNweToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHN0cmNocm51bDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHN0cmR1cC1wb3NpeDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHN0cmVxOgorICAjIENvZGUgZnJvbSBtb2R1bGUgc3RyZXJyb3I6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJlcnJvci1vdmVycmlkZToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHN0cmVycm9yX3ItcG9zaXg6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJpbmc6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJuZHVwOgorICAjIENvZGUgZnJvbSBtb2R1bGUgc3RybmxlbjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHN0cm5sZW4xOgorICAjIENvZGUgZnJvbSBtb2R1bGUgc3RydG91bDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHN0cnZlcnNjbXA6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzeXNfc3RhdDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHN5c190eXBlczoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHN5c193YWl0OgorICAjIENvZGUgZnJvbSBtb2R1bGUgdGhyZWFkbGliOgorCisKKworICAjIENvZGUgZnJvbSBtb2R1bGUgdGltZToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHVuaXN0ZDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHVuaXN0ZC1zYWZlcjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHVuaXR5cGVzOgorICAjIENvZGUgZnJvbSBtb2R1bGUgdW5pd2lkdGgvYmFzZToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHVuaXdpZHRoL3dpZHRoOgorICAjIENvZGUgZnJvbSBtb2R1bGUgdW5sb2NrZWQtaW86CisgICMgQ29kZSBmcm9tIG1vZHVsZSB1bnNldGVudjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHVwZGF0ZS1jb3B5cmlnaHQ6CisgICMgQ29kZSBmcm9tIG1vZHVsZSB1c2VsZXNzLWlmLWJlZm9yZS1mcmVlOgorICAjIENvZGUgZnJvbSBtb2R1bGUgdmFzbnByaW50ZjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHZjLWxpc3QtZmlsZXM6CisgICMgQ29kZSBmcm9tIG1vZHVsZSB2ZXJpZnk6CisgICMgQ29kZSBmcm9tIG1vZHVsZSB2ZnByaW50Zi1wb3NpeDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHZzbnByaW50ZjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHZzbnByaW50Zi1wb3NpeDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHZzcHJpbnRmLXBvc2l4OgorICAjIENvZGUgZnJvbSBtb2R1bGUgd2FpdC1wcm9jZXNzOgorICAjIENvZGUgZnJvbSBtb2R1bGUgd2FpdHBpZDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHdhcm5pbmdzOgorICAjIENvZGUgZnJvbSBtb2R1bGUgd2NoYXI6CisgICMgQ29kZSBmcm9tIG1vZHVsZSB3Y3R5cGUtaDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHdjd2lkdGg6CisgICMgQ29kZSBmcm9tIG1vZHVsZSB4YWxsb2M6CisgICMgQ29kZSBmcm9tIG1vZHVsZSB4YWxsb2MtZGllOgorICAjIENvZGUgZnJvbSBtb2R1bGUgeGFsbG9jLW92ZXJzaXplZDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHhtZW1kdXAwOgorICAjIENvZGUgZnJvbSBtb2R1bGUgeHNpemU6CisgICMgQ29kZSBmcm9tIG1vZHVsZSB4c3RybmR1cDoKKworCisjIEdudWxpYiB1c2VzICcjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gnIHRvIHNpbGVuY2Ugc29tZQorIyB3YXJuaW5ncywgYnV0IG9sZGVyIGdjYyBkb2Vzbid0IHN1cHBvcnQgdGhpcy4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaCB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoIHdvcmtzLi4uICIgPiY2OyB9CitpZiAke2x2X2N2X2djY19wcmFnbWFfcHVzaF93b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgc2F2ZV9DRkxBR1M9JENGTEFHUworICBDRkxBR1M9Jy1XdW5rbm93bi1wcmFnbWFzIC1XZXJyb3InCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorICAgICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbHZfY3ZfZ2NjX3ByYWdtYV9wdXNoX3dvcmtzPXllcworZWxzZQorICBsdl9jdl9nY2NfcHJhZ21hX3B1c2hfd29ya3M9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgQ0ZMQUdTPSRzYXZlX0NGTEFHUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHZfY3ZfZ2NjX3ByYWdtYV9wdXNoX3dvcmtzIiA+JjUKKyRhc19lY2hvICIkbHZfY3ZfZ2NjX3ByYWdtYV9wdXNoX3dvcmtzIiA+JjY7IH0KKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWdjYy13YXJuaW5ncyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9nY2Nfd2FybmluZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9nY2Nfd2FybmluZ3M7IGNhc2UgJGVuYWJsZV9nY2Nfd2FybmluZ3MgaW4KICAgIHllc3xubykgOzsKLSAgICopICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgZ2NjLXdhcm5pbmdzIG9wdGlvbiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciBnY2Mtd2FybmluZ3Mgb3B0aW9uIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CisgICAqKSAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgZm9yIC0tZ2NjLXdhcm5pbmdzOiAkZW5hYmxlX2djY193YXJuaW5ncyIgIiRMSU5FTk8iIDU7OwogIGVzYWMKIGVsc2UKLSAgZW5hYmxldmFsPW5vCi1maTsKLWlmIHRlc3QgIiR7ZW5hYmxldmFsfSIgPSB5ZXM7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgY29tcGlsZXIgYWNjZXB0cyAtV2Vycm9yIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBjb21waWxlciBhY2NlcHRzIC1XZXJyb3IuLi4gJEVDSE9fQyIgPiY2CisgIGVuYWJsZV9nY2Nfd2FybmluZ3M9bm8KK2ZpCiAKLWFjX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2lmIHRlc3QgIiRlbmFibGVfZ2NjX3dhcm5pbmdzIiA9IHllczsgdGhlbgorICB3YXJuX2NvbW1vbj0nLVdhbGwgLVdleHRyYSAtV25vLXNpZ24tY29tcGFyZSAtV2Nhc3QtYWxpZ24KKyAgICAtV2Zvcm1hdCAtV3BvaW50ZXItYXJpdGggLVd3cml0ZS1zdHJpbmdzJworICB3YXJuX2M9Jy1XYmFkLWZ1bmN0aW9uLWNhc3QgLVdzaGFkb3cgLVdzdHJpY3QtcHJvdG90eXBlcycKKyAgd2Fybl9jeHg9Jy1Xbm9leGNlcHQnCisgIGFjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworICAjIENsYW5nIHN1cHBvcnRzIG1hbnkgb2YgR0NDJ3MgLVcgb3B0aW9ucywgYnV0IG9ubHkgaXNzdWVzIHdhcm5pbmdzCisgICMgb24gdGhlIG9uZXMgaXQgZG9lcyBub3QgcmVjb2duaXplLiAgSW4gdGhhdCBjYXNlLCBnbF9XQVJOX0FERAorICAjIHRoaW5rcyB0aGUgb3B0aW9uIGlzIHN1cHBvcnRlZCwgYW5kIHVua25vd24gb3B0aW9ucyBhcmUgdGhlbiBhZGRlZAorICAjIHRvIENGTEFHUy4gIEJ1dCB0aGVuLCB3aGVuIC1XZXJyb3IgaXMgYWRkZWQgaW4gdGhlIHRlc3Qgc3VpdGUgZm9yCisgICMgaW5zdGFuY2UsIHRoZSB3YXJuaW5nIGFib3V0IHRoZSB1bmtub3duIG9wdGlvbiB0dXJucyBpbnRvIGFuCisgICMgZXJyb3IuCisgICMKKyAgIyBUaGlzIHNob3VsZCBiZSBhZGRyZXNzZWQgYnkgZ251bGliJ3MgZ2xfV0FSTl9BREQsIGJ1dCBpbiB0aGUKKyAgIyBtZWFud2hpbGUsIHR1cm4gd2FybmluZ3MgYWJvdXQgdW5rbm93biBvcHRpb25zIGludG8gZXJyb3JzIGluCisgICMgQ0ZMQUdTLCBhbmQgcmVzdG9yZSBDRkxBR1MgYWZ0ZXIgdGhlIHRlc3RzLgorICBzYXZlX0NGTEFHUz0kQ0ZMQUdTCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBDIGNvbXBpbGVyIGhhbmRsZXMgLVdlcnJvcj11bmtub3duLXdhcm5pbmctb3B0aW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgQyBjb21waWxlciBoYW5kbGVzIC1XZXJyb3I9dW5rbm93bi13YXJuaW5nLW9wdGlvbi4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl93YXJuX2NfX1dlcnJvcl91bmtub3duX3dhcm5pbmdfb3B0aW9uKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICBnbF9zYXZlX2NvbXBpbGVyX0ZMQUdTPSIkQ0ZMQUdTIgorICBhc19mbl9hcHBlbmQgQ0ZMQUdTICIgLVdlcnJvcj11bmtub3duLXdhcm5pbmctb3B0aW9uIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludAogbWFpbiAoKQogewotaW50IHg7CisKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgV0FSTklOR19DRkxBR1M9IiRXQVJOSU5HX0NGTEFHUyAtV2Vycm9yIgotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2CitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X3dhcm5fY19fV2Vycm9yX3Vua25vd25fd2FybmluZ19vcHRpb249eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgZ2xfY3Zfd2Fybl9jX19XZXJyb3JfdW5rbm93bl93YXJuaW5nX29wdGlvbj1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUNGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgotICBXRVJST1JfQ0ZMQUdTPSRXQVJOSU5HX0NGTEFHUworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIENGTEFHUz0iJGdsX3NhdmVfY29tcGlsZXJfRkxBR1MiCiAKLSAgV0FSTklOR19DRkxBR1M9Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGNvbXBpbGVyIGFjY2VwdHMgLVciID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGNvbXBpbGVyIGFjY2VwdHMgLVcuLi4gJEVDSE9fQyIgPiY2CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl93YXJuX2NfX1dlcnJvcl91bmtub3duX3dhcm5pbmdfb3B0aW9uIiA+JjUKKyRhc19lY2hvICIkZ2xfY3Zfd2Fybl9jX19XZXJyb3JfdW5rbm93bl93YXJuaW5nX29wdGlvbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGdsX2N2X3dhcm5fY19fV2Vycm9yX3Vua25vd25fd2FybmluZ19vcHRpb24iID0geHllczsgdGhlbiA6CisgIGFzX2ZuX2FwcGVuZCBDRkxBR1MgIiAtV2Vycm9yPXVua25vd24td2FybmluZy1vcHRpb24iCitmaQogCi1hY19zYXZlX0NGTEFHUz0iJENGTEFHUyIKLUNGTEFHUz0iJENGTEFHUyAtVyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorCisgIGZvciBpIGluICR3YXJuX2NvbW1vbiAkd2Fybl9jOworICBkbworICAgIGFzX2dsX1dhcm49YCRhc19lY2hvICJnbF9jdl93YXJuX2NfJGkiIHwgJGFzX3RyX3NoYAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIEMgY29tcGlsZXIgaGFuZGxlcyAkaSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIEMgY29tcGlsZXIgaGFuZGxlcyAkaS4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskYXNfZ2xfV2Fybis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgZ2xfc2F2ZV9jb21waWxlcl9GTEFHUz0iJENGTEFHUyIKKyAgYXNfZm5fYXBwZW5kIENGTEFHUyAiICRpIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludAogbWFpbiAoKQogewotaW50IHg7CisKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgV0FSTklOR19DRkxBR1M9IiRXQVJOSU5HX0NGTEFHUyAtVyIKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkYXNfZ2xfV2Fybj15ZXMiCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgZXZhbCAiJGFzX2dsX1dhcm49bm8iCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGNvbXBpbGVyIGFjY2VwdHMgLVdhbGwiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGNvbXBpbGVyIGFjY2VwdHMgLVdhbGwuLi4gJEVDSE9fQyIgPiY2CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgQ0ZMQUdTPSIkZ2xfc2F2ZV9jb21waWxlcl9GTEFHUyIKIAotYWNfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi1DRkxBR1M9IiRDRkxBR1MgLVdhbGwiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2ZpCitldmFsIGFjX3Jlcz1cJCRhc19nbF9XYXJuCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfZ2xfV2FybiJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGFzX2ZuX2FwcGVuZCBXQVJOX0NGTEFHUyAiICRpIgorZmkKKworCisgIGRvbmUKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIEMgY29tcGlsZXIgaGFuZGxlcyAtV2Vycm9yIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgQyBjb21waWxlciBoYW5kbGVzIC1XZXJyb3IuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3Zfd2Fybl9jX19XZXJyb3IrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgIGdsX3NhdmVfY29tcGlsZXJfRkxBR1M9IiRDRkxBR1MiCisgIGFzX2ZuX2FwcGVuZCBDRkxBR1MgIiAtV2Vycm9yIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludAogbWFpbiAoKQogewotaW50IHg7CisKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgV0FSTklOR19DRkxBR1M9IiRXQVJOSU5HX0NGTEFHUyAtV2FsbCIKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl93YXJuX2NfX1dlcnJvcj15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICBnbF9jdl93YXJuX2NfX1dlcnJvcj1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUNGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBjb21waWxlciBhY2NlcHRzIC1XY2FzdC1hbGlnbiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgY29tcGlsZXIgYWNjZXB0cyAtV2Nhc3QtYWxpZ24uLi4gJEVDSE9fQyIgPiY2CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgQ0ZMQUdTPSIkZ2xfc2F2ZV9jb21waWxlcl9GTEFHUyIKIAotYWNfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi1DRkxBR1M9IiRDRkxBR1MgLVdjYXN0LWFsaWduIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl93YXJuX2NfX1dlcnJvciIgPiY1CiskYXNfZWNobyAiJGdsX2N2X3dhcm5fY19fV2Vycm9yIiA+JjY7IH0KK2lmIHRlc3QgIngkZ2xfY3Zfd2Fybl9jX19XZXJyb3IiID0geHllczsgdGhlbiA6CisgIGFzX2ZuX2FwcGVuZCBXRVJST1JfQ0ZMQUdTICIgLVdlcnJvciIKK2ZpCisKKworCisgICMgV2FybmluZ3MgZm9yIHRoZSB0ZXN0IHN1aXRlLCBhbmQgbWF5YmUgZm9yIGJpc29uIGlmIEdDQyBpcyBtb2Rlcm4KKyAgIyBlbm91Z2guCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBDIGNvbXBpbGVyIGhhbmRsZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIEMgY29tcGlsZXIgaGFuZGxlcyAtV21pc3NpbmctZGVjbGFyYXRpb25zLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X3dhcm5fY19fV21pc3NpbmdfZGVjbGFyYXRpb25zKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICBnbF9zYXZlX2NvbXBpbGVyX0ZMQUdTPSIkQ0ZMQUdTIgorICBhc19mbl9hcHBlbmQgQ0ZMQUdTICIgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiBpbnQKIG1haW4gKCkKIHsKLWludCB4OworCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIFdBUk5JTkdfQ0ZMQUdTPSIkV0FSTklOR19DRkxBR1MgLVdjYXN0LWFsaWduIgotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2CitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X3dhcm5fY19fV21pc3NpbmdfZGVjbGFyYXRpb25zPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgIGdsX2N2X3dhcm5fY19fV21pc3NpbmdfZGVjbGFyYXRpb25zPW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGNvbXBpbGVyIGFjY2VwdHMgLVdjYXN0LXF1YWwiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGNvbXBpbGVyIGFjY2VwdHMgLVdjYXN0LXF1YWwuLi4gJEVDSE9fQyIgPiY2CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgQ0ZMQUdTPSIkZ2xfc2F2ZV9jb21waWxlcl9GTEFHUyIKIAotYWNfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi1DRkxBR1M9IiRDRkxBR1MgLVdjYXN0LXF1YWwiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X3dhcm5fY19fV21pc3NpbmdfZGVjbGFyYXRpb25zIiA+JjUKKyRhc19lY2hvICIkZ2xfY3Zfd2Fybl9jX19XbWlzc2luZ19kZWNsYXJhdGlvbnMiID4mNjsgfQoraWYgdGVzdCAieCRnbF9jdl93YXJuX2NfX1dtaXNzaW5nX2RlY2xhcmF0aW9ucyIgPSB4eWVzOyB0aGVuIDoKKyAgYXNfZm5fYXBwZW5kIFdBUk5fQ0ZMQUdTX1RFU1QgIiAtV21pc3NpbmctZGVjbGFyYXRpb25zIgorZmkKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBDIGNvbXBpbGVyIGhhbmRsZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBDIGNvbXBpbGVyIGhhbmRsZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3Zfd2Fybl9jX19XbWlzc2luZ19wcm90b3R5cGVzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICBnbF9zYXZlX2NvbXBpbGVyX0ZMQUdTPSIkQ0ZMQUdTIgorICBhc19mbl9hcHBlbmQgQ0ZMQUdTICIgLVdtaXNzaW5nLXByb3RvdHlwZXMiCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CiBtYWluICgpCiB7Ci1pbnQgeDsKKwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBXQVJOSU5HX0NGTEFHUz0iJFdBUk5JTkdfQ0ZMQUdTIC1XY2FzdC1xdWFsIgotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2CitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X3dhcm5fY19fV21pc3NpbmdfcHJvdG90eXBlcz15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICBnbF9jdl93YXJuX2NfX1dtaXNzaW5nX3Byb3RvdHlwZXM9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1DRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgY29tcGlsZXIgYWNjZXB0cyAtV2Zvcm1hdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgY29tcGlsZXIgYWNjZXB0cyAtV2Zvcm1hdC4uLiAkRUNIT19DIiA+JjYKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBDRkxBR1M9IiRnbF9zYXZlX2NvbXBpbGVyX0ZMQUdTIgogCi1hY19zYXZlX0NGTEFHUz0iJENGTEFHUyIKLUNGTEFHUz0iJENGTEFHUyAtV2Zvcm1hdCIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3Zfd2Fybl9jX19XbWlzc2luZ19wcm90b3R5cGVzIiA+JjUKKyRhc19lY2hvICIkZ2xfY3Zfd2Fybl9jX19XbWlzc2luZ19wcm90b3R5cGVzIiA+JjY7IH0KK2lmIHRlc3QgIngkZ2xfY3Zfd2Fybl9jX19XbWlzc2luZ19wcm90b3R5cGVzIiA9IHh5ZXM7IHRoZW4gOgorICBhc19mbl9hcHBlbmQgV0FSTl9DRkxBR1NfVEVTVCAiIC1XbWlzc2luZy1wcm90b3R5cGVzIgorZmkKKworCisgIHRlc3QgJGx2X2N2X2djY19wcmFnbWFfcHVzaF93b3JrcyA9IHllcyAmJgorICAgIGFzX2ZuX2FwcGVuZCBXQVJOX0NGTEFHUyAiICRXQVJOX0NGTEFHU19URVNUIgorCisgICMgV2FybmluZ3MgZm9yIHRoZSB0ZXN0IHN1aXRlIG9ubHkuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBDIGNvbXBpbGVyIGhhbmRsZXMgLVd1bmRlZiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIEMgY29tcGlsZXIgaGFuZGxlcyAtV3VuZGVmLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X3dhcm5fY19fV3VuZGVmKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICBnbF9zYXZlX2NvbXBpbGVyX0ZMQUdTPSIkQ0ZMQUdTIgorICBhc19mbl9hcHBlbmQgQ0ZMQUdTICIgLVd1bmRlZiIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiBpbnQKIG1haW4gKCkKIHsKLWludCB4OworCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIFdBUk5JTkdfQ0ZMQUdTPSIkV0FSTklOR19DRkxBR1MgLVdmb3JtYXQiCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3Zfd2Fybl9jX19XdW5kZWY9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgZ2xfY3Zfd2Fybl9jX19XdW5kZWY9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1DRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgY29tcGlsZXIgYWNjZXB0cyAtV3dyaXRlLXN0cmluZ3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGNvbXBpbGVyIGFjY2VwdHMgLVd3cml0ZS1zdHJpbmdzLi4uICRFQ0hPX0MiID4mNgorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIENGTEFHUz0iJGdsX3NhdmVfY29tcGlsZXJfRkxBR1MiCiAKLWFjX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotQ0ZMQUdTPSIkQ0ZMQUdTIC1Xd3JpdGUtc3RyaW5ncyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3Zfd2Fybl9jX19XdW5kZWYiID4mNQorJGFzX2VjaG8gIiRnbF9jdl93YXJuX2NfX1d1bmRlZiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGdsX2N2X3dhcm5fY19fV3VuZGVmIiA9IHh5ZXM7IHRoZW4gOgorICBhc19mbl9hcHBlbmQgV0FSTl9DRkxBR1NfVEVTVCAiIC1XdW5kZWYiCitmaQorCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIEMgY29tcGlsZXIgaGFuZGxlcyAtcGVkYW50aWMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBDIGNvbXBpbGVyIGhhbmRsZXMgLXBlZGFudGljLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X3dhcm5fY19fcGVkYW50aWMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgIGdsX3NhdmVfY29tcGlsZXJfRkxBR1M9IiRDRkxBR1MiCisgIGFzX2ZuX2FwcGVuZCBDRkxBR1MgIiAtcGVkYW50aWMiCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CiBtYWluICgpCiB7Ci1pbnQgeDsKKwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBXQVJOSU5HX0NGTEFHUz0iJFdBUk5JTkdfQ0ZMQUdTIC1Xd3JpdGUtc3RyaW5ncyIKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl93YXJuX2NfX3BlZGFudGljPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgIGdsX2N2X3dhcm5fY19fcGVkYW50aWM9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1DRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKLSAgV0FSTklOR19DWFhGTEFHUz0kV0FSTklOR19DRkxBR1MKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBDRkxBR1M9IiRnbF9zYXZlX2NvbXBpbGVyX0ZMQUdTIgogCi0gICMgVGhlIGZvbGxvd2luZyB3YXJuaW5ncyBhcmUgbm90IHN1aXRhYmxlIGZvciBDKysuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGNvbXBpbGVyIGFjY2VwdHMgLVdiYWQtZnVuY3Rpb24tY2FzdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgY29tcGlsZXIgYWNjZXB0cyAtV2JhZC1mdW5jdGlvbi1jYXN0Li4uICRFQ0hPX0MiID4mNgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3Zfd2Fybl9jX19wZWRhbnRpYyIgPiY1CiskYXNfZWNobyAiJGdsX2N2X3dhcm5fY19fcGVkYW50aWMiID4mNjsgfQoraWYgdGVzdCAieCRnbF9jdl93YXJuX2NfX3BlZGFudGljIiA9IHh5ZXM7IHRoZW4gOgorICBhc19mbl9hcHBlbmQgV0FSTl9DRkxBR1NfVEVTVCAiIC1wZWRhbnRpYyIKK2ZpCiAKLWFjX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotQ0ZMQUdTPSIkQ0ZMQUdTIC1XYmFkLWZ1bmN0aW9uLWNhc3QiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKworICBDRkxBR1M9JHNhdmVfQ0ZMQUdTCisgIGFjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCisKKyAgYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKKworICBzYXZlX0NYWEZMQUdTPSRDWFhGTEFHUworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgQysrIGNvbXBpbGVyIGhhbmRsZXMgLVdlcnJvcj11bmtub3duLXdhcm5pbmctb3B0aW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgQysrIGNvbXBpbGVyIGhhbmRsZXMgLVdlcnJvcj11bmtub3duLXdhcm5pbmctb3B0aW9uLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X3dhcm5fY3h4X19XZXJyb3JfdW5rbm93bl93YXJuaW5nX29wdGlvbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgZ2xfc2F2ZV9jb21waWxlcl9GTEFHUz0iJENYWEZMQUdTIgorICBhc19mbl9hcHBlbmQgQ1hYRkxBR1MgIiAtV2Vycm9yPXVua25vd24td2FybmluZy1vcHRpb24iCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CiBtYWluICgpCiB7Ci1pbnQgeDsKKwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBXQVJOSU5HX0NGTEFHUz0iJFdBUk5JTkdfQ0ZMQUdTIC1XYmFkLWZ1bmN0aW9uLWNhc3QiCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl93YXJuX2N4eF9fV2Vycm9yX3Vua25vd25fd2FybmluZ19vcHRpb249eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgZ2xfY3Zfd2Fybl9jeHhfX1dlcnJvcl91bmtub3duX3dhcm5pbmdfb3B0aW9uPW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGNvbXBpbGVyIGFjY2VwdHMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgY29tcGlsZXIgYWNjZXB0cyAtV21pc3NpbmctZGVjbGFyYXRpb25zLi4uICRFQ0hPX0MiID4mNgorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIENYWEZMQUdTPSIkZ2xfc2F2ZV9jb21waWxlcl9GTEFHUyIKIAotYWNfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi1DRkxBR1M9IiRDRkxBR1MgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3Zfd2Fybl9jeHhfX1dlcnJvcl91bmtub3duX3dhcm5pbmdfb3B0aW9uIiA+JjUKKyRhc19lY2hvICIkZ2xfY3Zfd2Fybl9jeHhfX1dlcnJvcl91bmtub3duX3dhcm5pbmdfb3B0aW9uIiA+JjY7IH0KK2lmIHRlc3QgIngkZ2xfY3Zfd2Fybl9jeHhfX1dlcnJvcl91bmtub3duX3dhcm5pbmdfb3B0aW9uIiA9IHh5ZXM7IHRoZW4gOgorICBhc19mbl9hcHBlbmQgQ1hYRkxBR1MgIiAtV2Vycm9yPXVua25vd24td2FybmluZy1vcHRpb24iCitmaQorCisKKyAgZm9yIGkgaW4gJHdhcm5fY29tbW9uICR3YXJuX2N4eDsKKyAgZG8KKyAgICBhc19nbF9XYXJuPWAkYXNfZWNobyAiZ2xfY3Zfd2Fybl9jeHhfJGkiIHwgJGFzX3RyX3NoYAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIEMrKyBjb21waWxlciBoYW5kbGVzICRpIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgQysrIGNvbXBpbGVyIGhhbmRsZXMgJGkuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JGFzX2dsX1dhcm4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgIGdsX3NhdmVfY29tcGlsZXJfRkxBR1M9IiRDWFhGTEFHUyIKKyAgYXNfZm5fYXBwZW5kIENYWEZMQUdTICIgJGkiCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CiBtYWluICgpCiB7Ci1pbnQgeDsKKwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBXQVJOSU5HX0NGTEFHUz0iJFdBUk5JTkdfQ0ZMQUdTIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMiCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkYXNfZ2xfV2Fybj15ZXMiCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgZXZhbCAiJGFzX2dsX1dhcm49bm8iCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGNvbXBpbGVyIGFjY2VwdHMgLVdtaXNzaW5nLXByb3RvdHlwZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGNvbXBpbGVyIGFjY2VwdHMgLVdtaXNzaW5nLXByb3RvdHlwZXMuLi4gJEVDSE9fQyIgPiY2CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgQ1hYRkxBR1M9IiRnbF9zYXZlX2NvbXBpbGVyX0ZMQUdTIgogCi1hY19zYXZlX0NGTEFHUz0iJENGTEFHUyIKLUNGTEFHUz0iJENGTEFHUyAtV21pc3NpbmctcHJvdG90eXBlcyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorZmkKK2V2YWwgYWNfcmVzPVwkJGFzX2dsX1dhcm4KKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19nbF9XYXJuIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgYXNfZm5fYXBwZW5kIFdBUk5fQ1hYRkxBR1MgIiAkaSIKK2ZpCisKKworICBkb25lCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBDKysgY29tcGlsZXIgaGFuZGxlcyAtV3plcm8tYXMtbnVsbC1wb2ludGVyLWNvbnN0YW50IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgQysrIGNvbXBpbGVyIGhhbmRsZXMgLVd6ZXJvLWFzLW51bGwtcG9pbnRlci1jb25zdGFudC4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl93YXJuX2N4eF9fV3plcm9fYXNfbnVsbF9wb2ludGVyX2NvbnN0YW50Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICBnbF9zYXZlX2NvbXBpbGVyX0ZMQUdTPSIkQ1hYRkxBR1MiCisgIGFzX2ZuX2FwcGVuZCBDWFhGTEFHUyAiIC1XemVyby1hcy1udWxsLXBvaW50ZXItY29uc3RhbnQiCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CiBtYWluICgpCiB7Ci1pbnQgeDsKK251bGxwdHIKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgV0FSTklOR19DRkxBR1M9IiRXQVJOSU5HX0NGTEFHUyAtV21pc3NpbmctcHJvdG90eXBlcyIKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgoraWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X3dhcm5fY3h4X19XemVyb19hc19udWxsX3BvaW50ZXJfY29uc3RhbnQ9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgZ2xfY3Zfd2Fybl9jeHhfX1d6ZXJvX2FzX251bGxfcG9pbnRlcl9jb25zdGFudD1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUNGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBjb21waWxlciBhY2NlcHRzIC1Xc2hhZG93IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBjb21waWxlciBhY2NlcHRzIC1Xc2hhZG93Li4uICRFQ0hPX0MiID4mNgorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIENYWEZMQUdTPSIkZ2xfc2F2ZV9jb21waWxlcl9GTEFHUyIKIAotYWNfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi1DRkxBR1M9IiRDRkxBR1MgLVdzaGFkb3ciCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X3dhcm5fY3h4X19XemVyb19hc19udWxsX3BvaW50ZXJfY29uc3RhbnQiID4mNQorJGFzX2VjaG8gIiRnbF9jdl93YXJuX2N4eF9fV3plcm9fYXNfbnVsbF9wb2ludGVyX2NvbnN0YW50IiA+JjY7IH0KK2lmIHRlc3QgIngkZ2xfY3Zfd2Fybl9jeHhfX1d6ZXJvX2FzX251bGxfcG9pbnRlcl9jb25zdGFudCIgPSB4eWVzOyB0aGVuIDoKKyAgYXNfZm5fYXBwZW5kIFdBUk5fQ1hYRkxBR1MgIiAtV3plcm8tYXMtbnVsbC1wb2ludGVyLWNvbnN0YW50IgorZmkKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBDKysgY29tcGlsZXIgaGFuZGxlcyAtV2Vycm9yIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgQysrIGNvbXBpbGVyIGhhbmRsZXMgLVdlcnJvci4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl93YXJuX2N4eF9fV2Vycm9yKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICBnbF9zYXZlX2NvbXBpbGVyX0ZMQUdTPSIkQ1hYRkxBR1MiCisgIGFzX2ZuX2FwcGVuZCBDWFhGTEFHUyAiIC1XZXJyb3IiCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CiBtYWluICgpCiB7Ci1pbnQgeDsKKwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBXQVJOSU5HX0NGTEFHUz0iJFdBUk5JTkdfQ0ZMQUdTIC1Xc2hhZG93IgotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2CitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3Zfd2Fybl9jeHhfX1dlcnJvcj15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICBnbF9jdl93YXJuX2N4eF9fV2Vycm9yPW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGNvbXBpbGVyIGFjY2VwdHMgLVdzdHJpY3QtcHJvdG90eXBlcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgY29tcGlsZXIgYWNjZXB0cyAtV3N0cmljdC1wcm90b3R5cGVzLi4uICRFQ0hPX0MiID4mNgorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIENYWEZMQUdTPSIkZ2xfc2F2ZV9jb21waWxlcl9GTEFHUyIKIAotYWNfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi1DRkxBR1M9IiRDRkxBR1MgLVdzdHJpY3QtcHJvdG90eXBlcyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3Zfd2Fybl9jeHhfX1dlcnJvciIgPiY1CiskYXNfZWNobyAiJGdsX2N2X3dhcm5fY3h4X19XZXJyb3IiID4mNjsgfQoraWYgdGVzdCAieCRnbF9jdl93YXJuX2N4eF9fV2Vycm9yIiA9IHh5ZXM7IHRoZW4gOgorICBhc19mbl9hcHBlbmQgV0VSUk9SX0NYWEZMQUdTICIgLVdlcnJvciIKK2ZpCisKKworICAjIFdhcm5pbmdzIGZvciB0aGUgdGVzdCBzdWl0ZSBvbmx5LgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgQysrIGNvbXBpbGVyIGhhbmRsZXMgLVd1bmRlZiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIEMrKyBjb21waWxlciBoYW5kbGVzIC1XdW5kZWYuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3Zfd2Fybl9jeHhfX1d1bmRlZis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgZ2xfc2F2ZV9jb21waWxlcl9GTEFHUz0iJENYWEZMQUdTIgorICBhc19mbl9hcHBlbmQgQ1hYRkxBR1MgIiAtV3VuZGVmIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludAogbWFpbiAoKQogewotaW50IHg7CisKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgV0FSTklOR19DRkxBR1M9IiRXQVJOSU5HX0NGTEFHUyAtV3N0cmljdC1wcm90b3R5cGVzIgotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2CitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3Zfd2Fybl9jeHhfX1d1bmRlZj15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICBnbF9jdl93YXJuX2N4eF9fV3VuZGVmPW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgQ1hYRkxBR1M9IiRnbF9zYXZlX2NvbXBpbGVyX0ZMQUdTIgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBsaW50IDEKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X3dhcm5fY3h4X19XdW5kZWYiID4mNQorJGFzX2VjaG8gIiRnbF9jdl93YXJuX2N4eF9fV3VuZGVmIiA+JjY7IH0KK2lmIHRlc3QgIngkZ2xfY3Zfd2Fybl9jeHhfX1d1bmRlZiIgPSB4eWVzOyB0aGVuIDoKKyAgYXNfZm5fYXBwZW5kIFdBUk5fQ1hYRkxBR1NfVEVTVCAiIC1XdW5kZWYiCitmaQorCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIEMrKyBjb21waWxlciBoYW5kbGVzIC1wZWRhbnRpYyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIEMrKyBjb21waWxlciBoYW5kbGVzIC1wZWRhbnRpYy4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl93YXJuX2N4eF9fcGVkYW50aWMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgIGdsX3NhdmVfY29tcGlsZXJfRkxBR1M9IiRDWFhGTEFHUyIKKyAgYXNfZm5fYXBwZW5kIENYWEZMQUdTICIgLXBlZGFudGljIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CiBfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl93YXJuX2N4eF9fcGVkYW50aWM9eWVzCitlbHNlCisgIGdsX2N2X3dhcm5fY3h4X19wZWRhbnRpYz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBDWFhGTEFHUz0iJGdsX3NhdmVfY29tcGlsZXJfRkxBR1MiCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X3dhcm5fY3h4X19wZWRhbnRpYyIgPiY1CiskYXNfZWNobyAiJGdsX2N2X3dhcm5fY3h4X19wZWRhbnRpYyIgPiY2OyB9CitpZiB0ZXN0ICJ4JGdsX2N2X3dhcm5fY3h4X19wZWRhbnRpYyIgPSB4eWVzOyB0aGVuIDoKKyAgYXNfZm5fYXBwZW5kIFdBUk5fQ1hYRkxBR1NfVEVTVCAiIC1wZWRhbnRpYyIKK2ZpCisKKworICBDWFhGTEFHUz0kc2F2ZV9DWFhGTEFHUworICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CiAKIGZpCiAKIAotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPGxpbWl0cy5oPgogCSBpbnQgdGVzdF9hcnJheVtDSEFSX0JJVF07CkBAIC02MDAzLDQ4ICs4MDE3LDIzMiBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgOgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21waWxlIGEgc2ltcGxlIEMgcHJvZ3JhbQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXBpbGUgYSBzaW1wbGUgQyBwcm9ncmFtCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY29tcGlsZSBhIHNpbXBsZSBDIHByb2dyYW0KK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBCSVNPTl9DX1dPUktTPToKIAogCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUteWFjYyBvciAtLWRpc2FibGUteWFjYyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV95YWNjK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV95YWNjIgorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQogCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIHN1cHBvcnRzIFBPU0lYTFlfQ09SUkVDVD0xIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIHN1cHBvcnRzIFBPU0lYTFlfQ09SUkVDVD0xLi4uICIgPiY2OyB9CitpZiAke2Jpc29uX2N2X2Nfc3VwcG9ydHNfcG9zaXhseV9jb3JyZWN0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZ2xfYXdrX3Byb2JlPSdCRUdJTiB7IGlmICgiUE9TSVhMWV9DT1JSRUNUIiBpbiBFTlZJUk9OKSBwcmludCAieCIgfScKK2Nhc2UgJHtQT1NJWExZX0NPUlJFQ1QreH1gJEFXSyAiJGdsX2F3a19wcm9iZSIgPC9kZXYvbnVsbGAgaW4KKyAgeHgpIGdsX2hhZF9QT1NJWExZX0NPUlJFQ1Q9ZXhwb3J0ZWQgOzsKKyAgeCkgIGdsX2hhZF9QT1NJWExZX0NPUlJFQ1Q9eWVzICAgICAgOzsKKyAgKikgIGdsX2hhZF9QT1NJWExZX0NPUlJFQ1Q9ICAgICAgICAgOzsKK2VzYWMKK1BPU0lYTFlfQ09SUkVDVD0xCitleHBvcnQgUE9TSVhMWV9DT1JSRUNUCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYmlzb25fY3ZfY19zdXBwb3J0c19wb3NpeGx5X2NvcnJlY3Q9eWVzCitlbHNlCisgIGJpc29uX2N2X2Nfc3VwcG9ydHNfcG9zaXhseV9jb3JyZWN0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2Nhc2UgJGdsX2hhZF9QT1NJWExZX0NPUlJFQ1QgaW4KKyAgZXhwb3J0ZWQpIDs7CisgIHllcykgeyBQT1NJWExZX0NPUlJFQ1Q9OyB1bnNldCBQT1NJWExZX0NPUlJFQ1Q7fTsgUE9TSVhMWV9DT1JSRUNUPTEgOzsKKyAgKikgeyBQT1NJWExZX0NPUlJFQ1Q9OyB1bnNldCBQT1NJWExZX0NPUlJFQ1Q7fSA7OworZXNhYworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRiaXNvbl9jdl9jX3N1cHBvcnRzX3Bvc2l4bHlfY29ycmVjdCIgPiY1CiskYXNfZWNobyAiJGJpc29uX2N2X2Nfc3VwcG9ydHNfcG9zaXhseV9jb3JyZWN0IiA+JjY7IH0KK2Nhc2UgJGJpc29uX2N2X2Nfc3VwcG9ydHNfcG9zaXhseV9jb3JyZWN0IGluCisgIHllcykgQ19DT01QSUxFUl9QT1NJWExZX0NPUlJFQ1Q9dHJ1ZQorIDs7CisgIG5vKSAgQ19DT01QSUxFUl9QT1NJWExZX0NPUlJFQ1Q9ZmFsc2UKKzs7Citlc2FjCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENYWCBidWlsZHMgZXhlY3V0YWJsZXMgdGhhdCB3b3JrIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENYWCBidWlsZHMgZXhlY3V0YWJsZXMgdGhhdCB3b3JrLi4uICIgPiY2OyB9CitpZiAke2Jpc29uX2N2X2N4eF93b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2V4dD1jcHAKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CisKKyAgICBiaXNvbl9jdl9jeHhfd29ya3M9bm8KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8Y3N0ZGxpYj4KKwkgICNpbmNsdWRlIDxpb3N0cmVhbT4KKwkgICNpbmNsdWRlIDxtYXA+CisJICAjaW5jbHVkZSA8c3RyaW5nPgorCSAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKK2ludAorbWFpbiAoKQoreworc3RkOjpjZXJyIDw8ICIiOworICAgICAgICAgIGNvdXQgPDwgIiI7CisJICB0eXBlZGVmIHN0ZDo6cGFpcjx1bnNpZ25lZCBpbnQsIGludD4gdWlwYWlyOworCSAgc3RkOjptYXA8dW5zaWduZWQgaW50LCBpbnQ+IG07CisJICBzdGQ6Om1hcDx1bnNpZ25lZCBpbnQsIGludD46Oml0ZXJhdG9yIGk7CisJICBtLmluc2VydCAodWlwYWlyICg0LCAtNCkpOworCSAgZm9yIChpID0gbS5iZWdpbiAoKTsgaSAhPSBtLmVuZCAoKTsgKytpKQorCSAgICBpZiAoaS0+Zmlyc3QgIT0gNCkKKwkgICAgICByZXR1cm4gMTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGlmIHsgYWNfdHJ5PSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19vYmpleHQgJExJQlMgPiY1JworICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfdHJ5XCIiOyB9ID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbiA6CisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgYmlzb25fY3ZfY3h4X3dvcmtzPWNyb3NzCitlbHNlCisgIGlmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX3RyeVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IH07IHRoZW4gOgorICBiaXNvbl9jdl9jeHhfd29ya3M9eWVzCitmaQorZmkKK2ZpCisgICAgICAgcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRiaXNvbl9jdl9jeHhfd29ya3MiID4mNQorJGFzX2VjaG8gIiRiaXNvbl9jdl9jeHhfd29ya3MiID4mNjsgfQorCisgY2FzZSAkYmlzb25fY3ZfY3h4X3dvcmtzIGluCisgeWVzKQorICAgIEJJU09OX0NYWF9XT1JLUz0nOic7OworIG5vIHwgY3Jvc3MpCisgICAgQklTT05fQ1hYX1dPUktTPSdleGl0IDc3Jzs7CisgZXNhYworCisKKyAgaWYgdGVzdCAkYmlzb25fY3ZfY3h4X3dvcmtzID0geWVzOyB0aGVuCisgIEJJU09OX0NYWF9XT1JLU19UUlVFPQorICBCSVNPTl9DWFhfV09SS1NfRkFMU0U9JyMnCitlbHNlCisgIEJJU09OX0NYWF9XT1JLU19UUlVFPScjJworICBCSVNPTl9DWFhfV09SS1NfRkFMU0U9CitmaQorCisKK2FjX2V4dD1jcHAKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ1hYIHN1cHBvcnRzIFBPU0lYTFlfQ09SUkVDVD0xIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENYWCBzdXBwb3J0cyBQT1NJWExZX0NPUlJFQ1Q9MS4uLiAiID4mNjsgfQoraWYgJHtiaXNvbl9jdl9jeHhfc3VwcG9ydHNfcG9zaXhseV9jb3JyZWN0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZ2xfYXdrX3Byb2JlPSdCRUdJTiB7IGlmICgiUE9TSVhMWV9DT1JSRUNUIiBpbiBFTlZJUk9OKSBwcmludCAieCIgfScKK2Nhc2UgJHtQT1NJWExZX0NPUlJFQ1QreH1gJEFXSyAiJGdsX2F3a19wcm9iZSIgPC9kZXYvbnVsbGAgaW4KKyAgeHgpIGdsX2hhZF9QT1NJWExZX0NPUlJFQ1Q9ZXhwb3J0ZWQgOzsKKyAgeCkgIGdsX2hhZF9QT1NJWExZX0NPUlJFQ1Q9eWVzICAgICAgOzsKKyAgKikgIGdsX2hhZF9QT1NJWExZX0NPUlJFQ1Q9ICAgICAgICAgOzsKK2VzYWMKK1BPU0lYTFlfQ09SUkVDVD0xCitleHBvcnQgUE9TSVhMWV9DT1JSRUNUCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBiaXNvbl9jdl9jeHhfc3VwcG9ydHNfcG9zaXhseV9jb3JyZWN0PXllcworZWxzZQorICBiaXNvbl9jdl9jeHhfc3VwcG9ydHNfcG9zaXhseV9jb3JyZWN0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2Nhc2UgJGdsX2hhZF9QT1NJWExZX0NPUlJFQ1QgaW4KKyAgZXhwb3J0ZWQpIDs7CisgIHllcykgeyBQT1NJWExZX0NPUlJFQ1Q9OyB1bnNldCBQT1NJWExZX0NPUlJFQ1Q7fTsgUE9TSVhMWV9DT1JSRUNUPTEgOzsKKyAgKikgeyBQT1NJWExZX0NPUlJFQ1Q9OyB1bnNldCBQT1NJWExZX0NPUlJFQ1Q7fSA7OworZXNhYworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRiaXNvbl9jdl9jeHhfc3VwcG9ydHNfcG9zaXhseV9jb3JyZWN0IiA+JjUKKyRhc19lY2hvICIkYmlzb25fY3ZfY3h4X3N1cHBvcnRzX3Bvc2l4bHlfY29ycmVjdCIgPiY2OyB9CitjYXNlICRiaXNvbl9jdl9jeHhfc3VwcG9ydHNfcG9zaXhseV9jb3JyZWN0IGluCisgIHllcykgQ1hYX0NPTVBJTEVSX1BPU0lYTFlfQ09SUkVDVD10cnVlCisgOzsKKyAgbm8pICBDWFhfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUPWZhbHNlCis7OworZXNhYworCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUteWFjYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV95YWNjK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfeWFjYzsKIGVsc2UKICAgZW5hYmxlX3lhY2M9eWVzCi1maTsKK2ZpCisKIGNhc2UgJGVuYWJsZV95YWNjIGluCiB5ZXMpCiAgIFlBQ0NfU0NSSVBUPXlhY2MKQEAgLTYwNTcsMTQgKzgyNTUsMTcgQEAKIAogCiAjIENoZWNrcyBmb3IgcHJvZ3JhbXMuCisKK0RPVD0ke0RPVC0iJHthbV9taXNzaW5nX3J1bn1kb3QifQorCiBmb3IgYWNfcHJvZyBpbiBmbGV4IGxleAogZG8KICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfTEVYK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19MRVgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkTEVYIjsgdGhlbgogICBhY19jdl9wcm9nX0xFWD0iJExFWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCkBAIC02MDc0LDI2OCArODI3NSwxODkgQEAKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KICAgICBhY19jdl9wcm9nX0xFWD0iJGFjX3Byb2ciCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKIGRvbmUKLWRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUwogCiBmaQogZmkKIExFWD0kYWNfY3ZfcHJvZ19MRVgKIGlmIHRlc3QgLW4gIiRMRVgiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRMRVgiID4mNQotZWNobyAiJHtFQ0hPX1R9JExFWCIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTEVYIiA+JjUKKyRhc19lY2hvICIkTEVYIiA+JjY7IH0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKKwogICB0ZXN0IC1uICIkTEVYIiAmJiBicmVhawogZG9uZQogdGVzdCAtbiAiJExFWCIgfHwgTEVYPSI6IgogCi1pZiB0ZXN0IC16ICIkTEVYTElCIgotdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHl5d3JhcCBpbiAtbGZsIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHl5d3JhcCBpbiAtbGZsLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfZmxfeXl3cmFwK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sZmwgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgeXl3cmFwICgpOwotaW50Ci1tYWluICgpCi17Ci15eXdyYXAgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9mbF95eXdyYXA9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9mbF95eXdyYXA9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZmxfeXl3cmFwIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZmxfeXl3cmFwIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9mbF95eXdyYXAgPSB5ZXM7IHRoZW4KLSAgTEVYTElCPSItbGZsIgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHl5d3JhcCBpbiAtbGwiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgeXl3cmFwIGluIC1sbC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2xfeXl3cmFwK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sbCAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciB5eXdyYXAgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXl5d3JhcCAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX2xfeXl3cmFwPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfbF95eXdyYXA9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfbF95eXdyYXAiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9sX3l5d3JhcCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfbF95eXdyYXAgPSB5ZXM7IHRoZW4KLSAgTEVYTElCPSItbGwiCi1maQotCi1maQotCi1maQotCiBpZiB0ZXN0ICJ4JExFWCIgIT0gIng6IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgbGV4IG91dHB1dCBmaWxlIHJvb3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBsZXggb3V0cHV0IGZpbGUgcm9vdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19sZXhfcm9vdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbGV4IGlzIGZsZXgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBsZXggaXMgZmxleC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2xleF9pc19mbGV4Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgIyBUaGUgbWluaW1hbCBsZXggcHJvZ3JhbSBpcyBqdXN0IGEgc2luZ2xlIGxpbmU6ICUlLiAgQnV0IHNvbWUgYnJva2VuIGxleGVzCi0jIChTb2xhcmlzLCBJIHRoaW5rIGl0IHdhcykgd2FudCB0d28gJSUgbGluZXMsIHNvIGFjY29tbW9kYXRlIHRoZW0uCisgIGNhdCA+Y29uZnRlc3QubCA8PF9BQ0VPRgorJW9wdGlvbiBkZWJ1ZyBub2RlZmF1bHQgbm9pbnB1dCBub3VucHV0IG5veXl3cmFwIG5ldmVyLWludGVyYWN0aXZlCisleCBTQ19DT05GX1RFU1QKKyUlCithIHsgQkVHSU4gU0NfQ09ORl9URVNUOyB9CitfQUNFT0YKK2lmIHsgeyBhY190cnk9IiRMRVggY29uZnRlc3QubCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJExFWCBjb25mdGVzdC5sIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgYWNfY3ZfcHJvZ19sZXhfaXNfZmxleD15ZXMKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19sZXhfaXNfZmxleD1ubworZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19sZXhfaXNfZmxleCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfbGV4X2lzX2ZsZXgiID4mNjsgfQorTEVYX0lTX0ZMRVg9YHRlc3QgIiRhY19jdl9wcm9nX2xleF9pc19mbGV4IiA9IHllcyAmJiBlY2hvIHRydWUgfHwgZWNobyBmYWxzZWAKKwogY2F0ID5jb25mdGVzdC5sIDw8X0FDRU9GCiAlJQorYSB7IEVDSE87IH0KK2IgeyBSRUpFQ1Q7IH0KK2MgeyB5eW1vcmUgKCk7IH0KK2QgeyB5eWxlc3MgKDEpOyB9CitlIHsgLyogSVJJWCA2LjUgZmxleCAyLjUuNCB1bmRlcnF1b3RlcyBpdHMgeXlsZXNzIGFyZ3VtZW50LiAgKi8KKyAgICB5eWxlc3MgKChpbnB1dCAoKSAhPSAwKSk7IH0KK2YgeyB1bnB1dCAoeXl0ZXh0WzBdKTsgfQorLiB7IEJFR0lOIElOSVRJQUw7IH0KICUlCisjaWZkZWYgWVlURVhUX1BPSU5URVIKK2V4dGVybiBjaGFyICp5eXRleHQ7CisjZW5kaWYKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuICEgeXlsZXggKCkgKyAhIHl5d3JhcCAoKTsKK30KIF9BQ0VPRgoteyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkTEVYIGNvbmZ0ZXN0LmxcIiIpID4mNQotICAoZXZhbCAkTEVYIGNvbmZ0ZXN0LmwpIDI+JjUKK3sgeyBhY190cnk9IiRMRVggY29uZnRlc3QubCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJExFWCBjb25mdGVzdC5sIikgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBsZXggb3V0cHV0IGZpbGUgcm9vdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBsZXggb3V0cHV0IGZpbGUgcm9vdC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2xleF9yb290Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKwogaWYgdGVzdCAtZiBsZXgueXkuYzsgdGhlbgogICBhY19jdl9wcm9nX2xleF9yb290PWxleC55eQogZWxpZiB0ZXN0IC1mIGxleHl5LmM7IHRoZW4KICAgYWNfY3ZfcHJvZ19sZXhfcm9vdD1sZXh5eQogZWxzZQotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBvdXRwdXQgZnJvbSAkTEVYOyBnaXZpbmcgdXAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgb3V0cHV0IGZyb20gJExFWDsgZ2l2aW5nIHVwIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgZmluZCBvdXRwdXQgZnJvbSAkTEVYOyBnaXZpbmcgdXAiICIkTElORU5PIiA1CiBmaQogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2xleF9yb290IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2xleF9yb290IiA+JjYKLXJtIC1mIGNvbmZ0ZXN0LmwKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19sZXhfcm9vdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfbGV4X3Jvb3QiID4mNjsgfQogTEVYX09VVFBVVF9ST09UPSRhY19jdl9wcm9nX2xleF9yb290CiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHl5dGV4dCBpcyBhIHBvaW50ZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHl5dGV4dCBpcyBhIHBvaW50ZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfbGV4X3l5dGV4dF9wb2ludGVyK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitpZiB0ZXN0IC16ICIke0xFWExJQitzZXR9IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGxleCBsaWJyYXJ5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGxleCBsaWJyYXJ5Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9sZXgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICAjIFBPU0lYIHNheXMgbGV4IGNhbiBkZWNsYXJlIHl5dGV4dCBlaXRoZXIgYXMgYSBwb2ludGVyIG9yIGFuIGFycmF5OyB0aGUKLSMgZGVmYXVsdCBpcyBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQuIEZpZ3VyZSBvdXQgd2hpY2ggaXQgaXMsIHNpbmNlCi0jIG5vdCBhbGwgaW1wbGVtZW50YXRpb25zIHByb3ZpZGUgdGhlICVwb2ludGVyIGFuZCAlYXJyYXkgZGVjbGFyYXRpb25zLgotYWNfY3ZfcHJvZ19sZXhfeXl0ZXh0X3BvaW50ZXI9bm8KLWVjaG8gJ2V4dGVybiBjaGFyICp5eXRleHQ7JyA+PiRMRVhfT1VUUFVUX1JPT1QuYwotYWNfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSIkTElCUyAkTEVYTElCIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisKKyAgICBhY19zYXZlX0xJQlM9JExJQlMKKyAgICBhY19jdl9saWJfbGV4PSdub25lIG5lZWRlZCcKKyAgICBmb3IgYWNfbGliIGluICcnIC1sZmwgLWxsOyBkbworICAgICAgTElCUz0iJGFjX2xpYiAkYWNfc2F2ZV9MSUJTIgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLwogYGNhdCAkTEVYX09VVFBVVF9ST09ULmNgCiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3Byb2dfbGV4X3l5dGV4dF9wb2ludGVyPXllcworaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfbGV4PSRhY19saWIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgdGVzdCAiJGFjX2N2X2xpYl9sZXgiICE9ICdub25lIG5lZWRlZCcgJiYgYnJlYWsKKyAgICBkb25lCisgICAgTElCUz0kYWNfc2F2ZV9MSUJTCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9sZXgiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfbGV4IiA+JjY7IH0KKyAgdGVzdCAiJGFjX2N2X2xpYl9sZXgiICE9ICdub25lIG5lZWRlZCcgJiYgTEVYTElCPSRhY19jdl9saWJfbGV4CitmaQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB5eXRleHQgaXMgYSBwb2ludGVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgeXl0ZXh0IGlzIGEgcG9pbnRlci4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2xleF95eXRleHRfcG9pbnRlcis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgICMgUE9TSVggc2F5cyBsZXggY2FuIGRlY2xhcmUgeXl0ZXh0IGVpdGhlciBhcyBhIHBvaW50ZXIgb3IgYW4gYXJyYXk7IHRoZQorIyBkZWZhdWx0IGlzIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudC4gIEZpZ3VyZSBvdXQgd2hpY2ggaXQgaXMsIHNpbmNlCisjIG5vdCBhbGwgaW1wbGVtZW50YXRpb25zIHByb3ZpZGUgdGhlICVwb2ludGVyIGFuZCAlYXJyYXkgZGVjbGFyYXRpb25zLgorYWNfY3ZfcHJvZ19sZXhfeXl0ZXh0X3BvaW50ZXI9bm8KK2FjX3NhdmVfTElCUz0kTElCUworTElCUz0iJExFWExJQiAkYWNfc2F2ZV9MSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLwogCisgICNkZWZpbmUgWVlURVhUX1BPSU5URVIgMQorYGNhdCAkTEVYX09VVFBVVF9ST09ULmNgCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19sZXhfeXl0ZXh0X3BvaW50ZXI9eWVzCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19zYXZlX0xJQlMKLXJtIC1mICIke0xFWF9PVVRQVVRfUk9PVH0uYyIKIAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2xleF95eXRleHRfcG9pbnRlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19sZXhfeXl0ZXh0X3BvaW50ZXIiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2xleF95eXRleHRfcG9pbnRlciIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfbGV4X3l5dGV4dF9wb2ludGVyIiA+JjY7IH0KIGlmIHRlc3QgJGFjX2N2X3Byb2dfbGV4X3l5dGV4dF9wb2ludGVyID0geWVzOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIFlZVEVYVF9QT0lOVEVSIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgWVlURVhUX1BPSU5URVIgMSIgPj5jb25mZGVmcy5oCiAKIGZpCitybSAtZiBjb25mdGVzdC5sICRMRVhfT1VUUFVUX1JPT1QuYwogCiBmaQorJExFWF9JU19GTEVYIHx8IGFzX2ZuX2Vycm9yICQ/ICJGbGV4IGlzIHJlcXVpcmVkIiAiJExJTkVOTyIgNQogZm9yIGFjX3Byb2cgaW4gJ2Jpc29uIC15JyBieWFjYwogZG8KICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfWUFDQytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfWUFDQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiRZQUNDIjsgdGhlbgogICBhY19jdl9wcm9nX1lBQ0M9IiRZQUNDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KQEAgLTYzNDUsMjYgKzg0NjcsMjggQEAKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KICAgICBhY19jdl9wcm9nX1lBQ0M9IiRhY19wcm9nIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAogZmkKIGZpCiBZQUNDPSRhY19jdl9wcm9nX1lBQ0MKIGlmIHRlc3QgLW4gIiRZQUNDIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkWUFDQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kWUFDQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkWUFDQyIgPiY1CiskYXNfZWNobyAiJFlBQ0MiID4mNjsgfQogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAorCiAgIHRlc3QgLW4gIiRZQUNDIiAmJiBicmVhawogZG9uZQogdGVzdCAtbiAiJFlBQ0MiIHx8IFlBQ0M9InlhY2MiCkBAIC02MzcyLDEwICs4NDk2LDEwIEBACiBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCiAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1yYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgogc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9cmFubGliOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX1JBTkxJQitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfUkFOTElCKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KICAgYWNfY3ZfcHJvZ19SQU5MSUI9IiRSQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgpAQCAtNjM4NSwzNSArODUwOSwzNyBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgogICAgIGFjX2N2X3Byb2dfUkFOTElCPSIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQogZG9uZQotZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKIGZpCiBmaQogUkFOTElCPSRhY19jdl9wcm9nX1JBTkxJQgogaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFJBTkxJQiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kUkFOTElCIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRSQU5MSUIiID4mNQorJGFzX2VjaG8gIiRSQU5MSUIiID4mNjsgfQogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAorCiBmaQogaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfUkFOTElCIjsgdGhlbgogICBhY19jdF9SQU5MSUI9JFJBTkxJQgogICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgcmFubGliOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X1JBTkxJQitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfUkFOTElCKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KICAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9IiRhY19jdF9SQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgpAQCAtNjQyMyw0NCArODU0OSwxNTcgQEAKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KICAgICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0icmFubGliIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAotICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIiICYmIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSI6IgogZmkKIGZpCiBhY19jdF9SQU5MSUI9JGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCCiBpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9SQU5MSUIiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X1JBTkxJQiIgPiY1CiskYXNfZWNobyAiJGFjX2N0X1JBTkxJQiIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCi0gIFJBTkxJQj0kYWNfY3RfUkFOTElCCisgIGlmIHRlc3QgIngkYWNfY3RfUkFOTElCIiA9IHg7IHRoZW4KKyAgICBSQU5MSUI9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgUkFOTElCPSRhY19jdF9SQU5MSUIKKyAgZmkKIGVsc2UKICAgUkFOTElCPSIkYWNfY3ZfcHJvZ19SQU5MSUIiCiBmaQogCi1mb3IgYWNfcHJvZyBpbiBnbTQgZ251bTQgbTQKLWRvCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wYXRoX000K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR05VIE00IHRoYXQgc3VwcG9ydHMgYWNjdXJhdGUgdHJhY2VzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBHTlUgTTQgdGhhdCBzdXBwb3J0cyBhY2N1cmF0ZSB0cmFjZXMuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9NNCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhc2UgJE00IGluCisgIHJtIC1mIGNvbmZ0ZXN0Lm00ZgorYWNfaGFkX3Bvc2l4bHlfY29ycmVjdD0ke1BPU0lYTFlfQ09SUkVDVDoreWVzfQoreyBQT1NJWExZX0NPUlJFQ1Q9OyB1bnNldCBQT1NJWExZX0NPUlJFQ1Q7fQoraWYgdGVzdCAteiAiJE00IjsgdGhlbgorICBhY19wYXRoX000X2ZvdW5kPWZhbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBtNCBnbTQgZ251bTQ7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX000PSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgYXNfZm5fZXhlY3V0YWJsZV9wICIkYWNfcGF0aF9NNCIgfHwgY29udGludWUKKyAgICAgICMgUm9vdCBvdXQgR05VIE00IDEuNC41LCBhcyB3ZWxsIGFzIG5vbi1HTlUgbTQgdGhhdCBpZ25vcmUgLXQsIC1GLgorICAgICAgIyBSb290IG91dCBHTlUgTTQgMS40LjE1IHdpdGggYnVnZ3kgZmFsc2UgbmVnYXRpdmUgcmVwbGFjZW1lbnQgc3Ryc3RyLgorICAgICAgIyBSb290IG91dCBHbGliYyAyLjkgLSAyLjEyIGFuZCBHTlUgTTQgMS40LjExIC0gMS40LjE1IHdpdGggYnVnZ3kKKyAgICAgICMgZmFsc2UgcG9zaXRpdmUgc3Ryc3RyLgorICAgICAgYWNfc25pcHBldD1jaGFuZ2UncXVvdGUoPCw+KWluJydkaXIoPGlmJydkZWY+LG1hYyxidWcpJworICAgICAgYWNfc25pcHBldD0ke2FjX3NuaXBwZXR9cGF0J3N1YnN0KGEsXChiXClcfFwoYVwpLFwxKWQnbmwKKyAgICAgIGFjX3NuaXBwZXQ9JHthY19zbmlwcGV0fSR7YXNfbmx9aWYnZWxzZShpbicnZGV4KC4ud2kuZC4sLmQuKSwtMSxidWcpJworICAgICAgYWNfc25pcHBldD0ke2FjX3NuaXBwZXR9JHthc19ubH1pZidlbHNlKGluJydkZXgoOzoxMS06MTItOjEyLToxMi06MTItOjEyLToxMi06MTItOjEyLjoxMi46MTIuOjEyLjoxMi46MTIuOjEyLjoxMi46MTItLDoxMi06MTItOjEyLToxMi06MTItOjEyLToxMi06MTItKSwtMSwsc3Ryc3RyLWJ1ZzIpJworICAgICAgdGVzdCAteiAiYCRhY19wYXRoX000IC1GIGNvbmZ0ZXN0Lm00ZiA8L2Rldi9udWxsIDI+JjFgIiBcCisgICAgICAmJiB0ZXN0IC16ICJgJGFzX2VjaG8gJGFjX3NuaXBwZXQgfCAkYWNfcGF0aF9NNCAtLXRyYWNlPW1hYyAyPiYxYCIgXAorICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdC5tNGYgXAorICAgICAgJiYgYWNfY3ZfcGF0aF9NND0kYWNfcGF0aF9NNCBhY19wYXRoX000X2ZvdW5kPToKKyAgICAgIHJtIC1mIGNvbmZ0ZXN0Lm00ZgorICAgICAgJGFjX3BhdGhfTTRfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX000IjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIG00IGNvdWxkIGJlIGZvdW5kIGluIFwkUEFUSC4KK0dOVSBNNCAxLjQuNiBvciBsYXRlciBpcyByZXF1aXJlZDsgMS40LjE2IG9yIG5ld2VyIGlzIHJlY29tbWVuZGVkLgorR05VIE00IDEuNC4xNSB1c2VzIGEgYnVnZ3kgcmVwbGFjZW1lbnQgc3Ryc3RyIG9uIHNvbWUgc3lzdGVtcy4KK0dsaWJjIDIuOSAtIDIuMTIgYW5kIEdOVSBNNCAxLjQuMTEgLSAxLjQuMTUgaGF2ZSBhbm90aGVyIHN0cnN0ciBidWcuIiAiJExJTkVOTyIgNQorICBmaQorZWxzZQorICBhY19jdl9wYXRoX000PSRNNAorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9NNCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfTTQiID4mNjsgfQorICBNND0kYWNfY3ZfcGF0aF9NNAorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJGFjX2N2X3BhdGhfTTQgYWNjZXB0cyAtLWdudSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRhY19jdl9wYXRoX000IGFjY2VwdHMgLS1nbnUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19nbnVfbTRfZ251Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSBgJE00IC0taGVscCA8IC9kZXYvbnVsbCAyPiYxYCBpbgorICAgICAgKi0tZ251KikgYWNfY3ZfcHJvZ19nbnVfbTRfZ251PXllcyA7OworICAgICAgKikgYWNfY3ZfcHJvZ19nbnVfbTRfZ251PW5vIDs7CisgICAgZXNhYworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19nbnVfbTRfZ251IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19nbnVfbTRfZ251IiA+JjY7IH0KKyAgaWYgdGVzdCAiJGFjX2N2X3Byb2dfZ251X200X2dudSIgPSB5ZXM7IHRoZW4KKyAgICBNNF9HTlU9LS1nbnUKKyAgZWxzZQorICAgIE00X0dOVT0KKyAgZmkKKworICBpZiB0ZXN0IHgkYWNfaGFkX3Bvc2l4bHlfY29ycmVjdCA9IHh5ZXM7IHRoZW4KKyAgICBQT1NJWExZX0NPUlJFQ1Q9OgorICAgIGlmIHRlc3QgJGFjX2N2X3Byb2dfZ251X200X2dudSA9IG5vOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHRoZSB2ZXJzaW9uIG9mIE00IHRoYXQgd2FzIGZvdW5kIGRvZXMgbm90IHN1cHBvcnQgLWciID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdGhlIHZlcnNpb24gb2YgTTQgdGhhdCB3YXMgZm91bmQgZG9lcyBub3Qgc3VwcG9ydCAtZyIgPiYyO30KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgaXQgd2l0aCBQT1NJWExZX0NPUlJFQ1Qgc2V0IG1heSBjYXVzZSBwcm9ibGVtcyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBpdCB3aXRoIFBPU0lYTFlfQ09SUkVDVCBzZXQgbWF5IGNhdXNlIHByb2JsZW1zIiA+JjI7fQorICAgIGZpCisgIGZpCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IG00IHN1cHBvcnRzIHRyYWNlIGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyBtNCBzdXBwb3J0cyB0cmFjZSBmaWxlcy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2dudV9tNF9kZWJ1Z2ZpbGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlIGAkTTQgLS1oZWxwIDwgL2Rldi9udWxsIDI+JjFgIGluCisgICAgICAqZGVidWdmaWxlKikgYWNfY3ZfcHJvZ19nbnVfbTRfZGVidWdmaWxlPS0tZGVidWdmaWxlIDs7CisgICAgICAqKSBhY19jdl9wcm9nX2dudV9tNF9kZWJ1Z2ZpbGU9LS1lcnJvci1vdXRwdXQgOzsKKyAgICBlc2FjCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2dudV9tNF9kZWJ1Z2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2dudV9tNF9kZWJ1Z2ZpbGUiID4mNjsgfQorICBNNF9ERUJVR0ZJTEU9JGFjX2N2X3Byb2dfZ251X200X2RlYnVnZmlsZQorCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBNNCAiJE00IgorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBNNF9HTlVfT1BUSU9OICIkTTRfR05VIgorX0FDRU9GCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicGVybCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcGVybDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfUEVSTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJFBFUkwgaW4KICAgW1xcL10qIHwgPzpbXFwvXSopCi0gIGFjX2N2X3BhdGhfTTQ9IiRNNCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIGFjX2N2X3BhdGhfUEVSTD0iJFBFUkwiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgogICA7OwogICAqKQogICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCkBAIC02NDY4LDIwNSArODcwNyw4OSBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wYXRoX000PSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3BhdGhfUEVSTD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAogICA7OwogZXNhYwogZmkKLU00PSRhY19jdl9wYXRoX000Ci0KLWlmIHRlc3QgLW4gIiRNNCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJE00IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRNNCIgPiY2CitQRVJMPSRhY19jdl9wYXRoX1BFUkwKK2lmIHRlc3QgLW4gIiRQRVJMIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBFUkwiID4mNQorJGFzX2VjaG8gIiRQRVJMIiA+JjY7IH0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKLSAgdGVzdCAtbiAiJE00IiAmJiBicmVhaworCitpZiB0ZXN0IC16ICIkUEVSTCI7IHRoZW4KKyAgIGFzX2ZuX2Vycm9yICQ/ICJwZXJsIG5vdCBmb3VuZCIgIiRMSU5FTk8iIDUKK2ZpCisKK0hFTFAyTUFOPSR7SEVMUDJNQU4tIiR7YW1fbWlzc2luZ19ydW59aGVscDJtYW4ifQorCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInhzbHRwcm9jIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSB4c2x0cHJvYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfWFNMVFBST0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRYU0xUUFJPQyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9YU0xUUFJPQz0iJFhTTFRQUk9DIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcGF0aF9YU0xUUFJPQz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCiBkb25lCi10ZXN0IC1uICIkTTQiIHx8IE00PSJtNCIKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUwogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBtNCBzdXBwb3J0cyBmcm96ZW4gZmlsZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIG00IHN1cHBvcnRzIGZyb3plbiBmaWxlcy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19nbnVfbTQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgOzsKK2VzYWMKK2ZpCitYU0xUUFJPQz0kYWNfY3ZfcGF0aF9YU0xUUFJPQworaWYgdGVzdCAtbiAiJFhTTFRQUk9DIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFhTTFRQUk9DIiA+JjUKKyRhc19lY2hvICIkWFNMVFBST0MiID4mNjsgfQogZWxzZQotICBhY19jdl9wcm9nX2dudV9tND1ubwotaWYgdGVzdCB4IiRNNCIgIT0geDsgdGhlbgotICBjYXNlIGAkTTQgLS1oZWxwIDwgL2Rldi9udWxsIDI+JjFgIGluCi0gICAgKnJlbG9hZC1zdGF0ZSopIGFjX2N2X3Byb2dfZ251X200PXllcyA7OwotICBlc2FjCi1maQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2dudV9tNCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19nbnVfbTQiID4mNgotaWYgdGVzdCB4IiRhY19jdl9wcm9nX2dudV9tNCIgIT0geHllczsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBHTlUgTTQgMS40IGlzIHJlcXVpcmVkIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IEdOVSBNNCAxLjQgaXMgcmVxdWlyZWQiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIE00ICIkTTQiCi1fQUNFT0YKKwogCiAKICMgQ2hlY2tzIGZvciBoZWFkZXIgZmlsZXMuCiAKIAogCi0KLQotZm9yIGFjX2hlYWRlciBpbiAkZ2xfaGVhZGVyX2xpc3QKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfaGVhZGVyX2NvbXBpbGVyPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKLQotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICBhY19oZWFkZXJfcHJlcHJvYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKLQotIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/Ci1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCi0gIHllczpubzogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQotICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotICAgIDs7Ci0gIG5vOnllczoqICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBSZXBvcnQgdGhpcyB0byBidWctYmlzb25AZ251Lm9yZyAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorICBmb3IgYWNfaGVhZGVyIGluICRhY19oZWFkZXJfbGlzdAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdAorIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCiBfQUNFT0YKIAogZmkKQEAgLTY2NzcsMjM3ICs4ODAwLDE1IEBACiAKIAogCi0KLQotICA6Ci0KLQotCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdGRib29sLmggdGhhdCBjb25mb3JtcyB0byBDOTkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RkYm9vbC5oIHRoYXQgY29uZm9ybXMgdG8gQzk5Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3RkYm9vbF9oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0JICAjaW5jbHVkZSA8c3RkYm9vbC5oPgotCSAgI2lmbmRlZiBib29sCi0JICAgImVycm9yOiBib29sIGlzIG5vdCBkZWZpbmVkIgotCSAgI2VuZGlmCi0JICAjaWZuZGVmIGZhbHNlCi0JICAgImVycm9yOiBmYWxzZSBpcyBub3QgZGVmaW5lZCIKLQkgICNlbmRpZgotCSAgI2lmIGZhbHNlCi0JICAgImVycm9yOiBmYWxzZSBpcyBub3QgMCIKLQkgICNlbmRpZgotCSAgI2lmbmRlZiB0cnVlCi0JICAgImVycm9yOiB0cnVlIGlzIG5vdCBkZWZpbmVkIgotCSAgI2VuZGlmCi0JICAjaWYgdHJ1ZSAhPSAxCi0JICAgImVycm9yOiB0cnVlIGlzIG5vdCAxIgotCSAgI2VuZGlmCi0JICAjaWZuZGVmIF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkCi0JICAgImVycm9yOiBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCBpcyBub3QgZGVmaW5lZCIKLQkgICNlbmRpZgotCi0JICBzdHJ1Y3QgcyB7IF9Cb29sIHM6IDE7IF9Cb29sIHQ7IH0gczsKLQotCSAgY2hhciBhW3RydWUgPT0gMSA/IDEgOiAtMV07Ci0JICBjaGFyIGJbZmFsc2UgPT0gMCA/IDEgOiAtMV07Ci0JICBjaGFyIGNbX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQgPT0gMSA/IDEgOiAtMV07Ci0JICBjaGFyIGRbKGJvb2wpIDAuNSA9PSB0cnVlID8gMSA6IC0xXTsKLQkgIGJvb2wgZSA9ICZzOwotCSAgY2hhciBmWyhfQm9vbCkgMC4wID09IGZhbHNlID8gMSA6IC0xXTsKLQkgIGNoYXIgZ1t0cnVlXTsKLQkgIGNoYXIgaFtzaXplb2YgKF9Cb29sKV07Ci0JICBjaGFyIGlbc2l6ZW9mIHMudF07Ci0JICBlbnVtIHsgaiA9IGZhbHNlLCBrID0gdHJ1ZSwgbCA9IGZhbHNlICogdHJ1ZSwgbSA9IHRydWUgKiAyNTYgfTsKLQkgIF9Cb29sIG5bbV07Ci0JICBjaGFyIG9bc2l6ZW9mIG4gPT0gbSAqIHNpemVvZiBuWzBdID8gMSA6IC0xXTsKLQkgIGNoYXIgcFstMSAtIChfQm9vbCkgMCA8IDAgJiYgLTEgLSAoYm9vbCkgMCA8IDAgPyAxIDogLTFdOwotCSAgI2lmIGRlZmluZWQgX194bGNfXyB8fCBkZWZpbmVkIF9fR05VQ19fCi0JICAgLyogQ2F0Y2ggYSBidWcgaW4gSUJNIEFJWCB4bGMgY29tcGlsZXIgdmVyc2lvbiA2LjAuMC4wCi0JICAgICAgcmVwb3J0ZWQgYnkgSmFtZXMgTGVtbGV5IG9uIDIwMDUtMTAtMDU7IHNlZQotCSAgICAgIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctY29yZXV0aWxzLzIwMDUtMTAvbXNnMDAwODYuaHRtbAotCSAgICAgIFRoaXMgdGVzdCBpcyBub3QgcXVpdGUgcmlnaHQsIHNpbmNlIHhsYyBpcyBhbGxvd2VkIHRvCi0JICAgICAgcmVqZWN0IHRoaXMgcHJvZ3JhbSwgYXMgdGhlIGluaXRpYWxpemVyIGZvciB4bGNidWcgaXMKLQkgICAgICBub3Qgb25lIG9mIHRoZSBmb3JtcyB0aGF0IEMgcmVxdWlyZXMgc3VwcG9ydCBmb3IuCi0JICAgICAgSG93ZXZlciwgZG9pbmcgdGhlIHRlc3QgcmlnaHQgd291bGQgcmVxdWlyZSBhIHJ1bi10aW1lCi0JICAgICAgdGVzdCwgYW5kIHRoYXQgd291bGQgbWFrZSBjcm9zcy1jb21waWxhdGlvbiBoYXJkZXIuCi0JICAgICAgTGV0IHVzIGhvcGUgdGhhdCBJQk0gZml4ZXMgdGhlIHhsYyBidWcsIGFuZCBhbHNvIGFkZHMKLQkgICAgICBzdXBwb3J0IGZvciB0aGlzIGtpbmQgb2YgY29uc3RhbnQgZXhwcmVzc2lvbi4gIEluIHRoZQotCSAgICAgIG1lYW50aW1lLCB0aGlzIHRlc3Qgd2lsbCByZWplY3QgeGxjLCB3aGljaCBpcyBPSywgc2luY2UKLQkgICAgICBvdXIgc3RkYm9vbC5oIHN1YnN0aXR1dGUgc2hvdWxkIHN1ZmZpY2UuICBXZSBhbHNvIHRlc3QKLQkgICAgICB0aGlzIHdpdGggR0NDLCB3aGVyZSBpdCBzaG91bGQgd29yaywgdG8gZGV0ZWN0IG1vcmUKLQkgICAgICBxdWlja2x5IHdoZXRoZXIgc29tZW9uZSBtZXNzZXMgdXAgdGhlIHRlc3QgaW4gdGhlCi0JICAgICAgZnV0dXJlLiAgKi8KLQkgICBjaGFyIGRpZ3NbXSA9ICIwMTIzNDU2Nzg5IjsKLQkgICBpbnQgeGxjYnVnID0gMSAvICgmKGRpZ3MgKyA1KVstMiArIChib29sKSAxXSA9PSAmZGlnc1s0XSA/IDEgOiAtMSk7Ci0JICAjZW5kaWYKLQkgIC8qIENhdGNoIGEgYnVnIGluIGFuIEhQLVVYIEMgY29tcGlsZXIuICBTZWUKLQkgICAgIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDAzLTEyL21zZzAyMzAzLmh0bWwKLQkgICAgIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctY29yZXV0aWxzLzIwMDUtMTEvbXNnMDAxNjEuaHRtbAotCSAgICovCi0JICBfQm9vbCBxID0gdHJ1ZTsKLQkgIF9Cb29sICpwcSA9ICZxOwotCi1pbnQKLW1haW4gKCkKLXsKLQotCSAgKnBxIHw9IHE7Ci0JICAqcHEgfD0gISBxOwotCSAgLyogUmVmZXIgdG8gZXZlcnkgZGVjbGFyZWQgdmFsdWUsIHRvIGF2b2lkIGNvbXBpbGVyIG9wdGltaXphdGlvbnMuICAqLwotCSAgcmV0dXJuICghYSArICFiICsgIWMgKyAhZCArICFlICsgIWYgKyAhZyArICFoICsgIWkgKyAhIWogKyAhayArICEhbAotCQkgICsgIW0gKyAhbiArICFvICsgIXAgKyAhcSArICFwcSk7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPiY2Ci0gICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIF9Cb29sIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIF9Cb29sLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX19Cb29sK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotaWYgKChfQm9vbCAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKF9Cb29sKSkKLSAgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfX0Jvb2w9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X3R5cGVfX0Jvb2w9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfX0Jvb2wiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfX0Jvb2wiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV9fQm9vbCA9IHllczsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfX0JPT0wgMQotX0FDRU9GCi0KLQotZmkKLQotICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCA9IHllczsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX1NUREJPT0xfSCAxCi1fQUNFT0YKLQotICAgZmkKLQotCi0KLSAgIyBEZWZpbmUgdHdvIGFkZGl0aW9uYWwgdmFyaWFibGVzIHVzZWQgaW4gdGhlIE1ha2VmaWxlIHN1YnN0aXR1dGlvbi4KLQotICBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPSB5ZXM7IHRoZW4KLSAgICBTVERCT09MX0g9JycKLSAgZWxzZQotICAgIFNUREJPT0xfSD0nc3RkYm9vbC5oJwotICBmaQotCi0KLSAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfX0Jvb2wiID0geWVzOyB0aGVuCi0gICAgSEFWRV9fQk9PTD0xCi0gIGVsc2UKLSAgICBIQVZFX19CT09MPTAKLSAgZmkKLQotCi0KICMgQ2hlY2tzIGZvciBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlubGluZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpbmxpbmUuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2NfaW5saW5lK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBpbmxpbmUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGlubGluZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jX2lubGluZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2N2X2NfaW5saW5lPW5vCiBmb3IgYWNfa3cgaW4gaW5saW5lIF9faW5saW5lX18gX19pbmxpbmU7IGRvCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaWZuZGVmIF9fY3BsdXNwbHVzCiB0eXBlZGVmIGludCBmb29fdDsKQEAgLTY5MTYsNDAgKzg4MTcsMTYgQEAKICNlbmRpZgogCiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2NfaW5saW5lPSRhY19rdzsgYnJlYWsKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9jX2lubGluZT0kYWNfa3cKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgdGVzdCAiJGFjX2N2X2NfaW5saW5lIiAhPSBubyAmJiBicmVhawogZG9uZQogCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfaW5saW5lIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9jX2lubGluZSIgPiY2Ci0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19pbmxpbmUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX2lubGluZSIgPiY2OyB9CiAKIGNhc2UgJGFjX2N2X2NfaW5saW5lIGluCiAgIGlubGluZSB8IHllcykgOzsKQEAgLTY5NjcsMTczICs4ODQ0LDQ1OCBAQAogZXNhYwogCiAKLSMgQ2hlY2tzIGZvciB0eXBlcy4KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdWludHB0cl90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHVpbnRwdHJfdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV91aW50cHRyX3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyMgR251bGliIChsYXRlciBjaGVja3MpLiAgUHV0dGluZyB0aGVtIGhlcmUgcmF0aGVyIHRoYW4gcmlnaHQgYWZ0ZXIKKyMgZ2xfRUFSTFkgYXZvaWRzIHNvbWUgcmVkdW5kYW50IGNoZWNrcy4KKworCisKKworCisgICAgICAgICAgTElCQ19GQVRBTF9TVERFUlJfPTEKKyAgZXhwb3J0IExJQkNfRkFUQUxfU1RERVJSXworCithY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJzaXplX3QiICJhY19jdl90eXBlX3NpemVfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX3NpemVfdCIgPSB4eWVzOyB0aGVuIDoKKwogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIHNpemVfdCB1bnNpZ25lZCBpbnQKIF9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisKK2ZpCisKKyMgVGhlIFVsdHJpeCA0LjIgbWlwcyBidWlsdGluIGFsbG9jYSBkZWNsYXJlZCBieSBhbGxvY2EuaCBvbmx5IHdvcmtzCisjIGZvciBjb25zdGFudCBhcmd1bWVudHMuICBVc2VsZXNzIQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd29ya2luZyBhbGxvY2EuaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igd29ya2luZyBhbGxvY2EuaC4uLiAiID4mNjsgfQoraWYgJHthY19jdl93b3JraW5nX2FsbG9jYV9oKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFsbG9jYS5oPgoraW50CittYWluICgpCit7CitjaGFyICpwID0gKGNoYXIgKikgYWxsb2NhICgyICogc2l6ZW9mIChpbnQpKTsKKwkJCSAgaWYgKHApIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3dvcmtpbmdfYWxsb2NhX2g9eWVzCitlbHNlCisgIGFjX2N2X3dvcmtpbmdfYWxsb2NhX2g9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfd29ya2luZ19hbGxvY2FfaCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3dvcmtpbmdfYWxsb2NhX2giID4mNjsgfQoraWYgdGVzdCAkYWNfY3Zfd29ya2luZ19hbGxvY2FfaCA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0FMTE9DQV9IIDEiID4+Y29uZmRlZnMuaAorCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhbGxvY2EiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFsbG9jYS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9mdW5jX2FsbG9jYV93b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZmRlZiBfX0dOVUNfXworIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKyNlbHNlCisjIGlmZGVmIF9NU0NfVkVSCisjICBpbmNsdWRlIDxtYWxsb2MuaD4KKyMgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQorIyBlbHNlCisjICBpZmRlZiBIQVZFX0FMTE9DQV9ICisjICAgaW5jbHVkZSA8YWxsb2NhLmg+CisjICBlbHNlCisjICAgaWZkZWYgX0FJWAorICNwcmFnbWEgYWxsb2NhCisjICAgZWxzZQorIyAgICBpZm5kZWYgYWxsb2NhIC8qIHByZWRlZmluZWQgYnkgSFAgY2MgK09saWJjYWxscyAqLwordm9pZCAqYWxsb2NhIChzaXplX3QpOworIyAgICBlbmRpZgorIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworY2hhciAqcCA9IChjaGFyICopIGFsbG9jYSAoMSk7CisJCQkJICAgIGlmIChwKSByZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9mdW5jX2FsbG9jYV93b3Jrcz15ZXMKK2Vsc2UKKyAgYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3M9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3MiID4mNQorJGFzX2VjaG8gIiRhY19jdl9mdW5jX2FsbG9jYV93b3JrcyIgPiY2OyB9CisKK2lmIHRlc3QgJGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQUxMT0NBIDEiID4+Y29uZmRlZnMuaAorCitlbHNlCisgICMgVGhlIFNWUjMgbGliUFcgYW5kIFNWUjQgbGlidWNiIGJvdGggY29udGFpbiBpbmNvbXBhdGlibGUgZnVuY3Rpb25zCisjIHRoYXQgY2F1c2UgdHJvdWJsZS4gIFNvbWUgdmVyc2lvbnMgZG8gbm90IGV2ZW4gY29udGFpbiBhbGxvY2Egb3IKKyMgY29udGFpbiBhIGJ1Z2d5IHZlcnNpb24uICBJZiB5b3Ugc3RpbGwgd2FudCB0byB1c2UgdGhlaXIgYWxsb2NhLAorIyB1c2UgYXIgdG8gZXh0cmFjdCBhbGxvY2EubyBmcm9tIHRoZW0gaW5zdGVhZCBvZiBjb21waWxpbmcgYWxsb2NhLmMuCisKKworCisKKworQUxMT0NBPVwke0xJQk9CSkRJUn1hbGxvY2EuJGFjX29iamV4dAorCiskYXNfZWNobyAiI2RlZmluZSBDX0FMTE9DQSAxIiA+PmNvbmZkZWZzLmgKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgXGBhbGxvY2EuYycgbmVlZHMgQ3JheSBob29rcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIFxgYWxsb2NhLmMnIG5lZWRzIENyYXkgaG9va3MuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfb3NfY3JheSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZiBkZWZpbmVkIENSQVkgJiYgISBkZWZpbmVkIENSQVkyCit3ZWJlY3JheQorI2Vsc2UKK3dlbm90YmVjcmF5CisjZW5kaWYKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAid2ViZWNyYXkiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGFjX2N2X29zX2NyYXk9eWVzCitlbHNlCisgIGFjX2N2X29zX2NyYXk9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfb3NfY3JheSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X29zX2NyYXkiID4mNjsgfQoraWYgdGVzdCAkYWNfY3Zfb3NfY3JheSA9IHllczsgdGhlbgorICBmb3IgYWNfZnVuYyBpbiBfZ2V0YjY3IEdFVEI2NyBnZXRiNjc7IGRvCisgICAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgQ1JBWV9TVEFDS1NFR19FTkQgJGFjX2Z1bmMKK19BQ0VPRgorCisgICAgYnJlYWsKK2ZpCisKKyAgZG9uZQorZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzdGFjayBkaXJlY3Rpb24gZm9yIEMgYWxsb2NhIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHN0YWNrIGRpcmVjdGlvbiBmb3IgQyBhbGxvY2EuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfY19zdGFja19kaXJlY3Rpb24rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uPTAKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKIGludAotbWFpbiAoKQorZmluZF9zdGFja19kaXJlY3Rpb24gKGludCAqYWRkciwgaW50IGRlcHRoKQogewotaWYgKCh1aW50cHRyX3QgKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mICh1aW50cHRyX3QpKQotICByZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKKyAgaW50IGRpciwgZHVtbXkgPSAwOworICBpZiAoISBhZGRyKQorICAgIGFkZHIgPSAmZHVtbXk7CisgICphZGRyID0gYWRkciA8ICZkdW1teSA/IDEgOiBhZGRyID09ICZkdW1teSA/IDAgOiAtMTsKKyAgZGlyID0gZGVwdGggPyBmaW5kX3N0YWNrX2RpcmVjdGlvbiAoYWRkciwgZGVwdGggLSAxKSA6IDA7CisgIHJldHVybiBkaXIgKyBkdW1teTsKK30KKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIHJldHVybiBmaW5kX3N0YWNrX2RpcmVjdGlvbiAoMCwgYXJnYyArICFhcmd2ICsgMjApIDwgMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV91aW50cHRyX3Q9eWVzCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfY19zdGFja19kaXJlY3Rpb249MQogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl90eXBlX3VpbnRwdHJfdD1ubworICBhY19jdl9jX3N0YWNrX2RpcmVjdGlvbj0tMQogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV91aW50cHRyX3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfdWludHB0cl90IiA+JjYKLWlmIHRlc3QgJGFjX2N2X3R5cGVfdWludHB0cl90ID0geWVzOyB0aGVuCiAKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfY19zdGFja19kaXJlY3Rpb24iID4mNjsgfQogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX1VJTlRQVFJfVCAxCisjZGVmaW5lIFNUQUNLX0RJUkVDVElPTiAkYWNfY3ZfY19zdGFja19kaXJlY3Rpb24KIF9BQ0VPRgogCiAKIGZpCiAKIAotIyBDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zLgorICBHTlVMSUJfX0VYSVQ9MDsKKyAgR05VTElCX0FUT0xMPTA7CisgIEdOVUxJQl9DQUxMT0NfUE9TSVg9MDsKKyAgR05VTElCX0NBTk9OSUNBTElaRV9GSUxFX05BTUU9MDsKKyAgR05VTElCX0dFVExPQURBVkc9MDsKKyAgR05VTElCX0dFVFNVQk9QVD0wOworICBHTlVMSUJfR1JBTlRQVD0wOworICBHTlVMSUJfTUFMTE9DX1BPU0lYPTA7CisgIEdOVUxJQl9NQlRPV0M9MDsKKyAgR05VTElCX01LRFRFTVA9MDsKKyAgR05VTElCX01LT1NURU1QPTA7CisgIEdOVUxJQl9NS09TVEVNUFM9MDsKKyAgR05VTElCX01LU1RFTVA9MDsKKyAgR05VTElCX01LU1RFTVBTPTA7CisgIEdOVUxJQl9QT1NJWF9PUEVOUFQ9MDsKKyAgR05VTElCX1BUU05BTUU9MDsKKyAgR05VTElCX1BUU05BTUVfUj0wOworICBHTlVMSUJfUFVURU5WPTA7CisgIEdOVUxJQl9SQU5ET009MDsKKyAgR05VTElCX1JBTkRPTV9SPTA7CisgIEdOVUxJQl9SRUFMTE9DX1BPU0lYPTA7CisgIEdOVUxJQl9SRUFMUEFUSD0wOworICBHTlVMSUJfUlBNQVRDSD0wOworICBHTlVMSUJfU0VURU5WPTA7CisgIEdOVUxJQl9TVFJUT0Q9MDsKKyAgR05VTElCX1NUUlRPTEw9MDsKKyAgR05VTElCX1NUUlRPVUxMPTA7CisgIEdOVUxJQl9TWVNURU1fUE9TSVg9MDsKKyAgR05VTElCX1VOTE9DS1BUPTA7CisgIEdOVUxJQl9VTlNFVEVOVj0wOworICBHTlVMSUJfV0NUT01CPTA7CisgICAgSEFWRV9fRVhJVD0xOworICBIQVZFX0FUT0xMPTE7CisgIEhBVkVfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRT0xOworICBIQVZFX0RFQ0xfR0VUTE9BREFWRz0xOworICBIQVZFX0dFVFNVQk9QVD0xOworICBIQVZFX0dSQU5UUFQ9MTsKKyAgSEFWRV9NS0RURU1QPTE7CisgIEhBVkVfTUtPU1RFTVA9MTsKKyAgSEFWRV9NS09TVEVNUFM9MTsKKyAgSEFWRV9NS1NURU1QPTE7CisgIEhBVkVfTUtTVEVNUFM9MTsKKyAgSEFWRV9QT1NJWF9PUEVOUFQ9MTsKKyAgSEFWRV9QVFNOQU1FPTE7CisgIEhBVkVfUFRTTkFNRV9SPTE7CisgIEhBVkVfUkFORE9NPTE7CisgIEhBVkVfUkFORE9NX0g9MTsKKyAgSEFWRV9SQU5ET01fUj0xOworICBIQVZFX1JFQUxQQVRIPTE7CisgIEhBVkVfUlBNQVRDSD0xOworICBIQVZFX1NFVEVOVj0xOworICBIQVZFX0RFQ0xfU0VURU5WPTE7CisgIEhBVkVfU1RSVE9EPTE7CisgIEhBVkVfU1RSVE9MTD0xOworICBIQVZFX1NUUlRPVUxMPTE7CisgIEhBVkVfU1RSVUNUX1JBTkRPTV9EQVRBPTE7CisgIEhBVkVfU1lTX0xPQURBVkdfSD0wOworICBIQVZFX1VOTE9DS1BUPTE7CisgIEhBVkVfREVDTF9VTlNFVEVOVj0xOworICBSRVBMQUNFX0NBTExPQz0wOworICBSRVBMQUNFX0NBTk9OSUNBTElaRV9GSUxFX05BTUU9MDsKKyAgUkVQTEFDRV9NQUxMT0M9MDsKKyAgUkVQTEFDRV9NQlRPV0M9MDsKKyAgUkVQTEFDRV9NS1NURU1QPTA7CisgIFJFUExBQ0VfUFRTTkFNRT0wOworICBSRVBMQUNFX1BUU05BTUVfUj0wOworICBSRVBMQUNFX1BVVEVOVj0wOworICBSRVBMQUNFX1JBTkRPTV9SPTA7CisgIFJFUExBQ0VfUkVBTExPQz0wOworICBSRVBMQUNFX1JFQUxQQVRIPTA7CisgIFJFUExBQ0VfU0VURU5WPTA7CisgIFJFUExBQ0VfU1RSVE9EPTA7CisgIFJFUExBQ0VfVU5TRVRFTlY9MDsKKyAgUkVQTEFDRV9XQ1RPTUI9MDsKIAogCi0KLQotCi1mb3IgYWNfZnVuYyBpbiAkZ2xfZnVuY19saXN0Ci1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBtYWxsb2MsIHJlYWxsb2MsIGNhbGxvYyBhcmUgUE9TSVggY29tcGxpYW50IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbWFsbG9jLCByZWFsbG9jLCBjYWxsb2MgYXJlIFBPU0lYIGNvbXBsaWFudC4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX21hbGxvY19wb3NpeCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorCisgICAgICAgICAgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgogCiBpbnQKIG1haW4gKCkKIHsKLXJldHVybiBmICE9ICRhY19mdW5jOworI2lmIChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgISBkZWZpbmVkIF9fQ1lHV0lOX18KKyAgICAgICAgICAgICBjaG9rZSBtZQorICAgICAgICAgICAgICNlbmRpZgorCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX21hbGxvY19wb3NpeD15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgZ2xfY3ZfZnVuY19tYWxsb2NfcG9zaXg9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIAotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19tYWxsb2NfcG9zaXgiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX21hbGxvY19wb3NpeCIgPiY2OyB9CisKKworICBHTlVMSUJfQ0hESVI9MDsKKyAgR05VTElCX0NIT1dOPTA7CisgIEdOVUxJQl9DTE9TRT0wOworICBHTlVMSUJfRFVQPTA7CisgIEdOVUxJQl9EVVAyPTA7CisgIEdOVUxJQl9EVVAzPTA7CisgIEdOVUxJQl9FTlZJUk9OPTA7CisgIEdOVUxJQl9FVUlEQUNDRVNTPTA7CisgIEdOVUxJQl9GQUNDRVNTQVQ9MDsKKyAgR05VTElCX0ZDSERJUj0wOworICBHTlVMSUJfRkNIT1dOQVQ9MDsKKyAgR05VTElCX0ZEQVRBU1lOQz0wOworICBHTlVMSUJfRlNZTkM9MDsKKyAgR05VTElCX0ZUUlVOQ0FURT0wOworICBHTlVMSUJfR0VUQ1dEPTA7CisgIEdOVUxJQl9HRVRET01BSU5OQU1FPTA7CisgIEdOVUxJQl9HRVREVEFCTEVTSVpFPTA7CisgIEdOVUxJQl9HRVRHUk9VUFM9MDsKKyAgR05VTElCX0dFVEhPU1ROQU1FPTA7CisgIEdOVUxJQl9HRVRMT0dJTj0wOworICBHTlVMSUJfR0VUTE9HSU5fUj0wOworICBHTlVMSUJfR0VUUEFHRVNJWkU9MDsKKyAgR05VTElCX0dFVFVTRVJTSEVMTD0wOworICBHTlVMSUJfR1JPVVBfTUVNQkVSPTA7CisgIEdOVUxJQl9JU0FUVFk9MDsKKyAgR05VTElCX0xDSE9XTj0wOworICBHTlVMSUJfTElOSz0wOworICBHTlVMSUJfTElOS0FUPTA7CisgIEdOVUxJQl9MU0VFSz0wOworICBHTlVMSUJfUElQRT0wOworICBHTlVMSUJfUElQRTI9MDsKKyAgR05VTElCX1BSRUFEPTA7CisgIEdOVUxJQl9QV1JJVEU9MDsKKyAgR05VTElCX1JFQUQ9MDsKKyAgR05VTElCX1JFQURMSU5LPTA7CisgIEdOVUxJQl9SRUFETElOS0FUPTA7CisgIEdOVUxJQl9STURJUj0wOworICBHTlVMSUJfU0VUSE9TVE5BTUU9MDsKKyAgR05VTElCX1NMRUVQPTA7CisgIEdOVUxJQl9TWU1MSU5LPTA7CisgIEdOVUxJQl9TWU1MSU5LQVQ9MDsKKyAgR05VTElCX1RUWU5BTUVfUj0wOworICBHTlVMSUJfVU5JU1REX0hfTk9OQkxPQ0tJTkc9MDsKKyAgR05VTElCX1VOSVNURF9IX1NJR1BJUEU9MDsKKyAgR05VTElCX1VOTElOSz0wOworICBHTlVMSUJfVU5MSU5LQVQ9MDsKKyAgR05VTElCX1VTTEVFUD0wOworICBHTlVMSUJfV1JJVEU9MDsKKyAgICBIQVZFX0NIT1dOPTE7CisgIEhBVkVfRFVQMj0xOworICBIQVZFX0RVUDM9MTsKKyAgSEFWRV9FVUlEQUNDRVNTPTE7CisgIEhBVkVfRkFDQ0VTU0FUPTE7CisgIEhBVkVfRkNIRElSPTE7CisgIEhBVkVfRkNIT1dOQVQ9MTsKKyAgSEFWRV9GREFUQVNZTkM9MTsKKyAgSEFWRV9GU1lOQz0xOworICBIQVZFX0ZUUlVOQ0FURT0xOworICBIQVZFX0dFVERUQUJMRVNJWkU9MTsKKyAgSEFWRV9HRVRHUk9VUFM9MTsKKyAgSEFWRV9HRVRIT1NUTkFNRT0xOworICBIQVZFX0dFVExPR0lOPTE7CisgIEhBVkVfR0VUUEFHRVNJWkU9MTsKKyAgSEFWRV9HUk9VUF9NRU1CRVI9MTsKKyAgSEFWRV9MQ0hPV049MTsKKyAgSEFWRV9MSU5LPTE7CisgIEhBVkVfTElOS0FUPTE7CisgIEhBVkVfUElQRT0xOworICBIQVZFX1BJUEUyPTE7CisgIEhBVkVfUFJFQUQ9MTsKKyAgSEFWRV9QV1JJVEU9MTsKKyAgSEFWRV9SRUFETElOSz0xOworICBIQVZFX1JFQURMSU5LQVQ9MTsKKyAgSEFWRV9TRVRIT1NUTkFNRT0xOworICBIQVZFX1NMRUVQPTE7CisgIEhBVkVfU1lNTElOSz0xOworICBIQVZFX1NZTUxJTktBVD0xOworICBIQVZFX1VOTElOS0FUPTE7CisgIEhBVkVfVVNMRUVQPTE7CisgIEhBVkVfREVDTF9FTlZJUk9OPTE7CisgIEhBVkVfREVDTF9GQ0hESVI9MTsKKyAgSEFWRV9ERUNMX0ZEQVRBU1lOQz0xOworICBIQVZFX0RFQ0xfR0VURE9NQUlOTkFNRT0xOworICBIQVZFX0RFQ0xfR0VUTE9HSU5fUj0xOworICBIQVZFX0RFQ0xfR0VUUEFHRVNJWkU9MTsKKyAgSEFWRV9ERUNMX0dFVFVTRVJTSEVMTD0xOworICBIQVZFX0RFQ0xfU0VUSE9TVE5BTUU9MTsKKyAgSEFWRV9ERUNMX1RUWU5BTUVfUj0xOworICBIQVZFX09TX0g9MDsKKyAgSEFWRV9TWVNfUEFSQU1fSD0wOworICBSRVBMQUNFX0NIT1dOPTA7CisgIFJFUExBQ0VfQ0xPU0U9MDsKKyAgUkVQTEFDRV9EVVA9MDsKKyAgUkVQTEFDRV9EVVAyPTA7CisgIFJFUExBQ0VfRkNIT1dOQVQ9MDsKKyAgUkVQTEFDRV9GVFJVTkNBVEU9MDsKKyAgUkVQTEFDRV9HRVRDV0Q9MDsKKyAgUkVQTEFDRV9HRVRET01BSU5OQU1FPTA7CisgIFJFUExBQ0VfR0VUTE9HSU5fUj0wOworICBSRVBMQUNFX0dFVEdST1VQUz0wOworICBSRVBMQUNFX0dFVFBBR0VTSVpFPTA7CisgIFJFUExBQ0VfSVNBVFRZPTA7CisgIFJFUExBQ0VfTENIT1dOPTA7CisgIFJFUExBQ0VfTElOSz0wOworICBSRVBMQUNFX0xJTktBVD0wOworICBSRVBMQUNFX0xTRUVLPTA7CisgIFJFUExBQ0VfUFJFQUQ9MDsKKyAgUkVQTEFDRV9QV1JJVEU9MDsKKyAgUkVQTEFDRV9SRUFEPTA7CisgIFJFUExBQ0VfUkVBRExJTks9MDsKKyAgUkVQTEFDRV9STURJUj0wOworICBSRVBMQUNFX1NMRUVQPTA7CisgIFJFUExBQ0VfU1lNTElOSz0wOworICBSRVBMQUNFX1RUWU5BTUVfUj0wOworICBSRVBMQUNFX1VOTElOSz0wOworICBSRVBMQUNFX1VOTElOS0FUPTA7CisgIFJFUExBQ0VfVVNMRUVQPTA7CisgIFJFUExBQ0VfV1JJVEU9MDsKKyAgVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IPTA7CisgIFVOSVNURF9IX0hBVkVfV0lOU09DSzJfSF9BTkRfVVNFX1NPQ0tFVFM9MDsKKworCisKKworCisgIGZvciBhY19mdW5jIGluICRhY19mdW5jX2xpc3QKK2RvIDoKKyAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQogX0FDRU9GCiAKIGZpCkBAIC03MTQzLDk4ICs5MzA1LDg4MCBAQAogCiAKIAorICBpZiB0ZXN0ICRhY19jdl9mdW5jX19zZXRfaW52YWxpZF9wYXJhbWV0ZXJfaGFuZGxlciA9IHllczsgdGhlbgorICAgIEhBVkVfTVNWQ19JTlZBTElEX1BBUkFNRVRFUl9IQU5ETEVSPTEKIAorJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9NU1ZDX0lOVkFMSURfUEFSQU1FVEVSX0hBTkRMRVIgMSIgPj5jb25mZGVmcy5oCiAKLSAgOgorICBlbHNlCisgICAgSEFWRV9NU1ZDX0lOVkFMSURfUEFSQU1FVEVSX0hBTkRMRVI9MAorICBmaQogCiAKIAogCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiBtYWxsb2MgZGVidWdnaW5nIGlzIHdhbnRlZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIG1hbGxvYyBkZWJ1Z2dpbmcgaXMgd2FudGVkLi4uICRFQ0hPX0MiID4mNgogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWRtYWxsb2Mgb3IgLS13aXRob3V0LWRtYWxsb2Mgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2RtYWxsb2Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfZG1hbGxvYyIKLSAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBXSVRIX0RNQUxMT0MgMQotX0FDRU9GCi0KLSAgTElCUz0iJExJQlMgLWxkbWFsbG9jIgotICBMREZMQUdTPSIkTERGTEFHUyAtZyIKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIC8vIGlzIGRpc3RpbmN0IGZyb20gLyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIC8vIGlzIGRpc3RpbmN0IGZyb20gLy4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9kb3VibGVfc2xhc2hfcm9vdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgIGlmIHRlc3QgeCIkY3Jvc3NfY29tcGlsaW5nIiA9IHh5ZXMgOyB0aGVuCisgICAgICAgICMgV2hlbiBjcm9zcy1jb21waWxpbmcsIHRoZXJlIGlzIG5vIHdheSB0byB0ZWxsIHdoZXRoZXIgLy8gaXMgc3BlY2lhbAorICAgICAgICAjIHNob3J0IG9mIGEgbGlzdCBvZiBob3N0cy4gIEhvd2V2ZXIsIHRoZSBvbmx5IGtub3duIGhvc3RzIHRvIGRhdGUKKyAgICAgICAgIyB0aGF0IGhhdmUgYSBkaXN0aW5jdCAvLyBhcmUgQXBvbGxvIERvbWFpbk9TICh0b28gb2xkIHRvIHBvcnQgdG8pLAorICAgICAgICAjIEN5Z3dpbiwgYW5kIHovT1MuICBJZiBhbnlvbmUga25vd3Mgb2YgYW5vdGhlciBzeXN0ZW0gZm9yIHdoaWNoIC8vIGhhcworICAgICAgICAjIHNwZWNpYWwgc2VtYW50aWNzIGFuZCBpcyBkaXN0aW5jdCBmcm9tIC8sIHBsZWFzZSByZXBvcnQgaXQgdG8KKyAgICAgICAgIyA8YnVnLWdudWxpYkBnbnUub3JnPi4KKyAgICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgICAgICotY3lnd2luIHwgaTM3MC1pYm0tb3BlbmVkaXRpb24pCisgICAgICAgICAgICBnbF9jdl9kb3VibGVfc2xhc2hfcm9vdD15ZXMgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgIyBCZSBvcHRpbWlzdGljIGFuZCBhc3N1bWUgdGhhdCAvIGFuZCAvLyBhcmUgdGhlIHNhbWUgd2hlbiB3ZQorICAgICAgICAgICAgIyBkb24ndCBrbm93LgorICAgICAgICAgICAgZ2xfY3ZfZG91YmxlX3NsYXNoX3Jvb3Q9J3Vua25vd24sIGFzc3VtaW5nIG5vJyA7OworICAgICAgICBlc2FjCisgICAgICBlbHNlCisgICAgICAgIHNldCB4IGBscyAtZGkgLyAvLyAyPi9kZXYvbnVsbGAKKyAgICAgICAgaWYgdGVzdCAiJDIiID0gIiQ0IiAmJiB3YyAvL2Rldi9udWxsID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICAgIGdsX2N2X2RvdWJsZV9zbGFzaF9yb290PW5vCisgICAgICAgIGVsc2UKKyAgICAgICAgICBnbF9jdl9kb3VibGVfc2xhc2hfcm9vdD15ZXMKKyAgICAgICAgZmkKKyAgICAgIGZpCiBmaQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maTsKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZG91YmxlX3NsYXNoX3Jvb3QiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9kb3VibGVfc2xhc2hfcm9vdCIgPiY2OyB9CisgIGlmIHRlc3QgIiRnbF9jdl9kb3VibGVfc2xhc2hfcm9vdCIgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgRE9VQkxFX1NMQVNIX0lTX0RJU1RJTkNUX1JPT1QgMSIgPj5jb25mZGVmcy5oCisKKyAgZmkKIAogCi0gZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBwaWRfdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBwaWRfdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9waWRfdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorCisKKworCisKKworCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGVudmlyb24gaXMgcHJvcGVybHkgZGVjbGFyZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZW52aXJvbiBpcyBwcm9wZXJseSBkZWNsYXJlZC4uLiAiID4mNjsgfQorICBpZiAke2d0X2N2X3Zhcl9lbnZpcm9uX2RlY2xhcmF0aW9uKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KKworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZiBIQVZFX1VOSVNURF9ICisgICAgICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAgICAgI2VuZGlmCisgICAgIC8qIG1pbmd3LCBCZU9TLCBIYWlrdSBkZWNsYXJlIGVudmlyb24gaW4gPHN0ZGxpYi5oPiwgbm90IGluIDx1bmlzdGQuaD4uICAqLworICAgICAjaW5jbHVkZSA8c3RkbGliLmg+CisKKyAgICAgICAgICAgZXh0ZXJuIHN0cnVjdCB7IGludCBmb287IH0gZW52aXJvbjsKK2ludAorbWFpbiAoKQoreworZW52aXJvbi5mb28gPSAxOworICA7CisgIHJldHVybiAwOworfQogX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ3RfY3ZfdmFyX2Vudmlyb25fZGVjbGFyYXRpb249bm8KK2Vsc2UKKyAgZ3RfY3ZfdmFyX2Vudmlyb25fZGVjbGFyYXRpb249eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3ZfdmFyX2Vudmlyb25fZGVjbGFyYXRpb24iID4mNQorJGFzX2VjaG8gIiRndF9jdl92YXJfZW52aXJvbl9kZWNsYXJhdGlvbiIgPiY2OyB9CisgIGlmIHRlc3QgJGd0X2N2X3Zhcl9lbnZpcm9uX2RlY2xhcmF0aW9uID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfRU5WSVJPTl9ERUNMIDEiID4+Y29uZmRlZnMuaAorCisgIGZpCisKKworICBpZiB0ZXN0ICRndF9jdl92YXJfZW52aXJvbl9kZWNsYXJhdGlvbiAhPSB5ZXM7IHRoZW4KKyAgICBIQVZFX0RFQ0xfRU5WSVJPTj0wCisgIGZpCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgcHJlcHJvY2Vzc29yIHN1cHBvcnRzIGluY2x1ZGVfbmV4dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBwcmVwcm9jZXNzb3Igc3VwcG9ydHMgaW5jbHVkZV9uZXh0Li4uICIgPiY2OyB9CitpZiAke2dsX2N2X2hhdmVfaW5jbHVkZV9uZXh0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgcm0gLXJmIGNvbmZ0ZXN0ZDFhIGNvbmZ0ZXN0ZDFiIGNvbmZ0ZXN0ZDIKKyAgICAgbWtkaXIgY29uZnRlc3RkMWEgY29uZnRlc3RkMWIgY29uZnRlc3RkMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXQgPDxFT0YgPiBjb25mdGVzdGQxYS9jb25mdGVzdC5oCisjZGVmaW5lIERFRklORURfSU5fQ09ORlRFU1REMQorI2luY2x1ZGVfbmV4dCA8Y29uZnRlc3QuaD4KKyNpZmRlZiBERUZJTkVEX0lOX0NPTkZURVNURDIKK2ludCBmb287CisjZWxzZQorI2Vycm9yICJpbmNsdWRlX25leHQgZG9lc24ndCB3b3JrIgorI2VuZGlmCitFT0YKKyAgICAgY2F0IDw8RU9GID4gY29uZnRlc3RkMWIvY29uZnRlc3QuaAorI2RlZmluZSBERUZJTkVEX0lOX0NPTkZURVNURDEKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGVfbmV4dCA8Y29uZnRlc3QuaD4KKyNpZmRlZiBERUZJTkVEX0lOX0NPTkZURVNURDIKK2ludCBmb287CisjZWxzZQorI2Vycm9yICJpbmNsdWRlX25leHQgZG9lc24ndCB3b3JrIgorI2VuZGlmCitFT0YKKyAgICAgY2F0IDw8RU9GID4gY29uZnRlc3RkMi9jb25mdGVzdC5oCisjaWZuZGVmIERFRklORURfSU5fQ09ORlRFU1REMQorI2Vycm9yICJpbmNsdWRlX25leHQgdGVzdCBkb2Vzbid0IHdvcmsiCisjZW5kaWYKKyNkZWZpbmUgREVGSU5FRF9JTl9DT05GVEVTVEQyCitFT0YKKyAgICAgZ2xfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgICBDUFBGTEFHUz0iJGdsX3NhdmVfQ1BQRkxBR1MgLUljb25mdGVzdGQxYiAtSWNvbmZ0ZXN0ZDIiCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxjb25mdGVzdC5oPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0PXllcworZWxzZQorICBDUFBGTEFHUz0iJGdsX3NhdmVfQ1BQRkxBR1MgLUljb25mdGVzdGQxYSAtSWNvbmZ0ZXN0ZDIiCisgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxjb25mdGVzdC5oPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0PWJ1Z2d5CitlbHNlCisgIGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgQ1BQRkxBR1M9IiRnbF9zYXZlX0NQUEZMQUdTIgorICAgICBybSAtcmYgY29uZnRlc3RkMWEgY29uZnRlc3RkMWIgY29uZnRlc3RkMgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0IiA+JjY7IH0KKyAgUFJBR01BX1NZU1RFTV9IRUFERVI9CisgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzOyB0aGVuCisgICAgSU5DTFVERV9ORVhUPWluY2x1ZGVfbmV4dAorICAgIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9aW5jbHVkZV9uZXh0CisgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKyAgICAgIFBSQUdNQV9TWVNURU1fSEVBREVSPScjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyJworICAgIGZpCisgIGVsc2UKKyAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IGJ1Z2d5OyB0aGVuCisgICAgICBJTkNMVURFX05FWFQ9aW5jbHVkZQorICAgICAgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT1pbmNsdWRlX25leHQKKyAgICBlbHNlCisgICAgICBJTkNMVURFX05FWFQ9aW5jbHVkZQorICAgICAgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT1pbmNsdWRlCisgICAgZmkKKyAgZmkKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHN5c3RlbSBoZWFkZXIgZmlsZXMgbGltaXQgdGhlIGxpbmUgbGVuZ3RoIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgc3lzdGVtIGhlYWRlciBmaWxlcyBsaW1pdCB0aGUgbGluZSBsZW5ndGguLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfcHJhZ21hX2NvbHVtbnMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2lmZGVmIF9fVEFOREVNCitjaG9rZSBtZQorI2VuZGlmCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImNob2tlIG1lIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBnbF9jdl9wcmFnbWFfY29sdW1ucz15ZXMKK2Vsc2UKKyAgZ2xfY3ZfcHJhZ21hX2NvbHVtbnM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9wcmFnbWFfY29sdW1ucyIgPiY1CiskYXNfZWNobyAiJGdsX2N2X3ByYWdtYV9jb2x1bW5zIiA+JjY7IH0KKyAgaWYgdGVzdCAkZ2xfY3ZfcHJhZ21hX2NvbHVtbnMgPSB5ZXM7IHRoZW4KKyAgICBQUkFHTUFfQ09MVU1OUz0iI3ByYWdtYSBDT0xVTU5TIDEwMDAwIgorICBlbHNlCisgICAgUFJBR01BX0NPTFVNTlM9CisgIGZpCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgY29tcGxldGUgZXJybm8uaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgY29tcGxldGUgZXJybm8uaC4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9oZWFkZXJfZXJybm9faF9jb21wbGV0ZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2lmICFkZWZpbmVkIEVUWFRCU1kKK2Jvb2JvbworI2VuZGlmCisjaWYgIWRlZmluZWQgRU5PTVNHCitib29ib28KKyNlbmRpZgorI2lmICFkZWZpbmVkIEVJRFJNCitib29ib28KKyNlbmRpZgorI2lmICFkZWZpbmVkIEVOT0xJTksKK2Jvb2JvbworI2VuZGlmCisjaWYgIWRlZmluZWQgRVBST1RPCitib29ib28KKyNlbmRpZgorI2lmICFkZWZpbmVkIEVNVUxUSUhPUAorYm9vYm9vCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBFQkFETVNHCitib29ib28KKyNlbmRpZgorI2lmICFkZWZpbmVkIEVPVkVSRkxPVworYm9vYm9vCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBFTk9UU1VQCitib29ib28KKyNlbmRpZgorI2lmICFkZWZpbmVkIEVORVRSRVNFVAorYm9vYm9vCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBFQ09OTkFCT1JURUQKK2Jvb2JvbworI2VuZGlmCisjaWYgIWRlZmluZWQgRVNUQUxFCitib29ib28KKyNlbmRpZgorI2lmICFkZWZpbmVkIEVEUVVPVAorYm9vYm9vCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBFQ0FOQ0VMRUQKK2Jvb2JvbworI2VuZGlmCisjaWYgIWRlZmluZWQgRU9XTkVSREVBRAorYm9vYm9vCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBFTk9UUkVDT1ZFUkFCTEUKK2Jvb2JvbworI2VuZGlmCisjaWYgIWRlZmluZWQgRUlMU0VRCitib29ib28KKyNlbmRpZgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJib29ib28iID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGdsX2N2X2hlYWRlcl9lcnJub19oX2NvbXBsZXRlPW5vCitlbHNlCisgIGdsX2N2X2hlYWRlcl9lcnJub19oX2NvbXBsZXRlPXllcworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2hlYWRlcl9lcnJub19oX2NvbXBsZXRlIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfY29tcGxldGUiID4mNjsgfQorICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfZXJybm9faF9jb21wbGV0ZSA9IHllczsgdGhlbgorICAgIEVSUk5PX0g9JycKKyAgZWxzZQorCisKKworCisKKworCisKKyAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXM7IHRoZW4KKyAgICAgICBnbF9jdl9uZXh0X2Vycm5vX2g9JzwnZXJybm8uaCc+JworICAgICBlbHNlCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxlcnJuby5oPiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxlcnJuby5oPi4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9uZXh0X2Vycm5vX2grOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8ZXJybm8uaD4KKworX0FDRU9GCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgYWl4KikgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAgLUMiIDs7CisgICAgICAgICAgICAgICAgICopICAgIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIiA7OworICAgICAgICAgICAgICAgZXNhYworCisgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgbWluZ3cqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2RpcnNlcF9yZWdleD0nWy9cXF0nCisgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICBnbF9kaXJzZXBfcmVnZXg9J1wvJworICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9tYWtlX2xpdGVyYWxfcmVnZXhfc2VkPSdzLFtdJF5cXC4qL1tdLFxcJixnJworCisgICAgICAgICAgICAgICBnbF9oZWFkZXJfbGl0ZXJhbF9yZWdleD1gZWNobyAnZXJybm8uaCcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICIkZ2xfbWFrZV9saXRlcmFsX3JlZ2V4X3NlZCJgCisgICAgICAgICAgICAgICBnbF9hYnNvbHV0ZV9oZWFkZXJfc2VkPSIvJHtnbF9kaXJzZXBfcmVnZXh9JHtnbF9oZWFkZXJfbGl0ZXJhbF9yZWdleH0vIid7CisgICAgICAgICAgICAgICAgICAgcy8uKiJcKC4qJyIke2dsX2RpcnNlcF9yZWdleH0ke2dsX2hlYWRlcl9saXRlcmFsX3JlZ2V4fSInXCkiLiovXDEvCisgICAgICAgICAgICAgICAgICAgc3xeL1teL118Ly8mfAorICAgICAgICAgICAgICAgICAgIHAKKyAgICAgICAgICAgICAgICAgICBxCisgICAgICAgICAgICAgICAgIH0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9uZXh0X2Vycm5vX2g9JyInYChldmFsICIkZ2xfYWJzbmFtZV9jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAgICAgICAgICAgICAgICAgICAgIHNlZCAtbiAiJGdsX2Fic29sdXRlX2hlYWRlcl9zZWQiYCciJworCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X25leHRfZXJybm9faCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X25leHRfZXJybm9faCIgPiY2OyB9CisgICAgIGZpCisgICAgIE5FWFRfRVJSTk9fSD0kZ2xfY3ZfbmV4dF9lcnJub19oCisKKyAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXMgfHwgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSBidWdneTsgdGhlbgorICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZV9uZXh0JworICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSc8J2Vycm5vLmgnPicKKyAgICAgZWxzZQorICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZScKKyAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0kZ2xfY3ZfbmV4dF9lcnJub19oCisgICAgIGZpCisgICAgIE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX0VSUk5PX0g9JGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlCisKKworCisKKyAgICBFUlJOT19IPSdlcnJuby5oJworICBmaQorCisgICBpZiB0ZXN0IC1uICIkRVJSTk9fSCI7IHRoZW4KKyAgR0xfR0VORVJBVEVfRVJSTk9fSF9UUlVFPQorICBHTF9HRU5FUkFURV9FUlJOT19IX0ZBTFNFPScjJworZWxzZQorICBHTF9HRU5FUkFURV9FUlJOT19IX1RSVUU9JyMnCisgIEdMX0dFTkVSQVRFX0VSUk5PX0hfRkFMU0U9CitmaQorCisKKyAgaWYgdGVzdCAtbiAiJEVSUk5PX0giOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgRU1VTFRJSE9QIHZhbHVlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBFTVVMVElIT1AgdmFsdWUuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfaGVhZGVyX2Vycm5vX2hfRU1VTFRJSE9QKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpZmRlZiBFTVVMVElIT1AKK3llcworI2VuZGlmCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfRU1VTFRJSE9QPXllcworZWxzZQorICBnbF9jdl9oZWFkZXJfZXJybm9faF9FTVVMVElIT1A9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworICAgICAgaWYgdGVzdCAkZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfRU1VTFRJSE9QID0gbm87IHRoZW4KKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgMQorI2luY2x1ZGUgPGVycm5vLmg+CisjaWZkZWYgRU1VTFRJSE9QCit5ZXMKKyNlbmRpZgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGdsX2N2X2hlYWRlcl9lcnJub19oX0VNVUxUSUhPUD1oaWRkZW4KK2ZpCitybSAtZiBjb25mdGVzdCoKKworICAgICAgICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfZXJybm9faF9FTVVMVElIT1AgPSBoaWRkZW47IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICJFTVVMVElIT1AiICJnbF9jdl9oZWFkZXJfZXJybm9faF9FTVVMVElIT1AiICAgICAgICAiCisjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgMQorI2luY2x1ZGUgPGVycm5vLmg+CisvKiBUaGUgZm9sbG93aW5nIHR3byBsaW5lcyBhcmUgYSB3b3JrYXJvdW5kIGFnYWluc3QgYW4gYXV0b2NvbmYtMi41MiBidWcuICAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisiOyB0aGVuIDoKKworZmkKKworICAgICAgICBmaQorICAgICAgZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfRU1VTFRJSE9QIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfRU1VTFRJSE9QIiA+JjY7IH0KKyAgICBjYXNlICRnbF9jdl9oZWFkZXJfZXJybm9faF9FTVVMVElIT1AgaW4KKyAgICAgIHllcyB8IG5vKQorICAgICAgICBFTVVMVElIT1BfSElEREVOPTA7IEVNVUxUSUhPUF9WQUxVRT0KKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIEVNVUxUSUhPUF9ISURERU49MTsgRU1VTFRJSE9QX1ZBTFVFPSIkZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfRU1VTFRJSE9QIgorICAgICAgICA7OworICAgIGVzYWMKKworCisgIGZpCisKKworICBpZiB0ZXN0IC1uICIkRVJSTk9fSCI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBFTk9MSU5LIHZhbHVlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBFTk9MSU5LIHZhbHVlLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2hlYWRlcl9lcnJub19oX0VOT0xJTksrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2lmZGVmIEVOT0xJTksKK3llcworI2VuZGlmCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfRU5PTElOSz15ZXMKK2Vsc2UKKyAgZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfRU5PTElOSz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgICAgICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfZXJybm9faF9FTk9MSU5LID0gbm87IHRoZW4KKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgMQorI2luY2x1ZGUgPGVycm5vLmg+CisjaWZkZWYgRU5PTElOSworeWVzCisjZW5kaWYKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBnbF9jdl9oZWFkZXJfZXJybm9faF9FTk9MSU5LPWhpZGRlbgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgICAgICAgIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9lcnJub19oX0VOT0xJTksgPSBoaWRkZW47IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICJFTk9MSU5LIiAiZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfRU5PTElOSyIgICAgICAgICIKKyNkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCAxCisjaW5jbHVkZSA8ZXJybm8uaD4KKy8qIFRoZSBmb2xsb3dpbmcgdHdvIGxpbmVzIGFyZSBhIHdvcmthcm91bmQgYWdhaW5zdCBhbiBhdXRvY29uZi0yLjUyIGJ1Zy4gICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyI7IHRoZW4gOgorCitmaQorCisgICAgICAgIGZpCisgICAgICBmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9oZWFkZXJfZXJybm9faF9FTk9MSU5LIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfRU5PTElOSyIgPiY2OyB9CisgICAgY2FzZSAkZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfRU5PTElOSyBpbgorICAgICAgeWVzIHwgbm8pCisgICAgICAgIEVOT0xJTktfSElEREVOPTA7IEVOT0xJTktfVkFMVUU9CisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBFTk9MSU5LX0hJRERFTj0xOyBFTk9MSU5LX1ZBTFVFPSIkZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfRU5PTElOSyIKKyAgICAgICAgOzsKKyAgICBlc2FjCisKKworICBmaQorCisKKyAgaWYgdGVzdCAtbiAiJEVSUk5PX0giOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgRU9WRVJGTE9XIHZhbHVlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBFT1ZFUkZMT1cgdmFsdWUuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfaGVhZGVyX2Vycm5vX2hfRU9WRVJGTE9XKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpZmRlZiBFT1ZFUkZMT1cKK3llcworI2VuZGlmCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfRU9WRVJGTE9XPXllcworZWxzZQorICBnbF9jdl9oZWFkZXJfZXJybm9faF9FT1ZFUkZMT1c9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworICAgICAgaWYgdGVzdCAkZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfRU9WRVJGTE9XID0gbm87IHRoZW4KKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgMQorI2luY2x1ZGUgPGVycm5vLmg+CisjaWZkZWYgRU9WRVJGTE9XCit5ZXMKKyNlbmRpZgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGdsX2N2X2hlYWRlcl9lcnJub19oX0VPVkVSRkxPVz1oaWRkZW4KK2ZpCitybSAtZiBjb25mdGVzdCoKKworICAgICAgICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfZXJybm9faF9FT1ZFUkZMT1cgPSBoaWRkZW47IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICJFT1ZFUkZMT1ciICJnbF9jdl9oZWFkZXJfZXJybm9faF9FT1ZFUkZMT1ciICAgICAgICAiCisjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgMQorI2luY2x1ZGUgPGVycm5vLmg+CisvKiBUaGUgZm9sbG93aW5nIHR3byBsaW5lcyBhcmUgYSB3b3JrYXJvdW5kIGFnYWluc3QgYW4gYXV0b2NvbmYtMi41MiBidWcuICAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisiOyB0aGVuIDoKKworZmkKKworICAgICAgICBmaQorICAgICAgZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfRU9WRVJGTE9XIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfRU9WRVJGTE9XIiA+JjY7IH0KKyAgICBjYXNlICRnbF9jdl9oZWFkZXJfZXJybm9faF9FT1ZFUkZMT1cgaW4KKyAgICAgIHllcyB8IG5vKQorICAgICAgICBFT1ZFUkZMT1dfSElEREVOPTA7IEVPVkVSRkxPV19WQUxVRT0KKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIEVPVkVSRkxPV19ISURERU49MTsgRU9WRVJGTE9XX1ZBTFVFPSIkZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfRU9WRVJGTE9XIgorICAgICAgICA7OworICAgIGVzYWMKKworCisgIGZpCisKKworYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAic3RyZXJyb3JfciIgImFjX2N2X2hhdmVfZGVjbF9zdHJlcnJvcl9yIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9zdHJlcnJvcl9yIiA9IHh5ZXM7IHRoZW4gOgorICBhY19oYXZlX2RlY2w9MQorZWxzZQorICBhY19oYXZlX2RlY2w9MAorZmkKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfU1RSRVJST1JfUiAkYWNfaGF2ZV9kZWNsCitfQUNFT0YKKworZm9yIGFjX2Z1bmMgaW4gc3RyZXJyb3JfcgorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzdHJlcnJvcl9yIiAiYWNfY3ZfZnVuY19zdHJlcnJvcl9yIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3N0cmVycm9yX3IiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJFUlJPUl9SIDEKK19BQ0VPRgorCitmaQorZG9uZQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc3RyZXJyb3JfciByZXR1cm5zIGNoYXIgKiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHN0cmVycm9yX3IgcmV0dXJucyBjaGFyICouLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfZnVuY19zdHJlcnJvcl9yX2NoYXJfcCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICBhY19jdl9mdW5jX3N0cmVycm9yX3JfY2hhcl9wPW5vCisgICAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3N0cmVycm9yX3IgPSB5ZXM7IHRoZW4KKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICRhY19pbmNsdWRlc19kZWZhdWx0CiBpbnQKIG1haW4gKCkKIHsKLWlmICgocGlkX3QgKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mIChwaWRfdCkpCi0gIHJldHVybiAwOworCisJICBjaGFyIGJ1ZlsxMDBdOworCSAgY2hhciB4ID0gKnN0cmVycm9yX3IgKDAsIGJ1Ziwgc2l6ZW9mIGJ1Zik7CisJICBjaGFyICpwID0gc3RyZXJyb3JfciAoMCwgYnVmLCBzaXplb2YgYnVmKTsKKwkgIHJldHVybiAhcCB8fCB4OworCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfcGlkX3Q9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X3R5cGVfcGlkX3Q9bm8KK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfZnVuY19zdHJlcnJvcl9yX2NoYXJfcD15ZXMKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfcGlkX3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfcGlkX3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV9waWRfdCA9IHllczsgdGhlbgorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgZWxzZQorICAgICAgIyBzdHJlcnJvcl9yIGlzIG5vdCBkZWNsYXJlZC4gIENob29zZSBiZXR3ZWVuCisgICAgICAjIHN5c3RlbXMgdGhhdCBoYXZlIHJlbGF0aXZlbHkgaW5hY2Nlc3NpYmxlIGRlY2xhcmF0aW9ucyBmb3IgdGhlCisgICAgICAjIGZ1bmN0aW9uLiAgQmVPUyBhbmQgREVDIFVOSVggNC4wIGZhbGwgaW4gdGhpcyBjYXRlZ29yeSwgYnV0IHRoZQorICAgICAgIyBmb3JtZXIgaGFzIGEgc3RyZXJyb3JfciB0aGF0IHJldHVybnMgY2hhciosIHdoaWxlIHRoZSBsYXR0ZXIKKyAgICAgICMgaGFzIGEgc3RyZXJyb3JfciB0aGF0IHJldHVybnMgYGludCcuCisgICAgICAjIFRoaXMgdGVzdCBzaG91bGQgc2VnZmF1bHQgb24gdGhlIERFQyBzeXN0ZW0uCisgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CiAgIDoKIGVsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKwlleHRlcm4gY2hhciAqc3RyZXJyb3JfciAoKTsKK2ludAorbWFpbiAoKQoreworY2hhciBidWZbMTAwXTsKKwkgIGNoYXIgeCA9ICpzdHJlcnJvcl9yICgwLCBidWYsIHNpemVvZiBidWYpOworCSAgcmV0dXJuICEgaXNhbHBoYSAoeCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9mdW5jX3N0cmVycm9yX3JfY2hhcl9wPXllcworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgICBmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX3N0cmVycm9yX3JfY2hhcl9wIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZnVuY19zdHJlcnJvcl9yX2NoYXJfcCIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9mdW5jX3N0cmVycm9yX3JfY2hhcl9wID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFNUUkVSUk9SX1JfQ0hBUl9QIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKyAgWEdFVFRFWFRfRVhUUkFfT1BUSU9OUz0KKworCisKKworCisgIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInNpZ19hdG9taWNfdCIgImFjX2N2X3R5cGVfc2lnX2F0b21pY190IiAiI2luY2x1ZGUgPHNpZ25hbC5oPgorIgoraWYgdGVzdCAieCRhY19jdl90eXBlX3NpZ19hdG9taWNfdCIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NJR19BVE9NSUNfVCAxCitfQUNFT0YKKworCitlbHNlCisKKyRhc19lY2hvICIjZGVmaW5lIHNpZ19hdG9taWNfdCBpbnQiID4+Y29uZmRlZnMuaAorCitmaQorCisKKworICBHTlVMSUJfRkNOVEw9MDsKKyAgR05VTElCX05PTkJMT0NLSU5HPTA7CisgIEdOVUxJQl9PUEVOPTA7CisgIEdOVUxJQl9PUEVOQVQ9MDsKKyAgICBIQVZFX0ZDTlRMPTE7CisgIEhBVkVfT1BFTkFUPTE7CisgIFJFUExBQ0VfRkNOVEw9MDsKKyAgUkVQTEFDRV9PUEVOPTA7CisgIFJFUExBQ0VfT1BFTkFUPTA7CisKKworCisKKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd29ya2luZyBmY250bC5oIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB3b3JraW5nIGZjbnRsLmguLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfaGVhZGVyX3dvcmtpbmdfZmNudGxfaCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfZmNudGxfaD1jcm9zcy1jb21waWxpbmcKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgICAgICAgICAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAgICAgICAgICAgI2lmIEhBVkVfVU5JU1REX0gKKyAgICAgICAgICAgIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyAgICAgICAgICAgI2Vsc2UgLyogb24gV2luZG93cyB3aXRoIE1TVkMgKi8KKyAgICAgICAgICAgIyBpbmNsdWRlIDxpby5oPgorICAgICAgICAgICAjIGluY2x1ZGUgPHN0ZGxpYi5oPgorICAgICAgICAgICAjIGRlZmluZWQgc2xlZXAobikgX3NsZWVwICgobikgKiAxMDAwKQorICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgI2luY2x1ZGUgPGZjbnRsLmg+CisgICAgICAgICAgICNpZm5kZWYgT19OT0FUSU1FCisgICAgICAgICAgICAjZGVmaW5lIE9fTk9BVElNRSAwCisgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAjaWZuZGVmIE9fTk9GT0xMT1cKKyAgICAgICAgICAgICNkZWZpbmUgT19OT0ZPTExPVyAwCisgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICBzdGF0aWMgaW50IGNvbnN0IGNvbnN0YW50c1tdID0KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgT19DUkVBVCwgT19FWENMLCBPX05PQ1RUWSwgT19UUlVOQywgT19BUFBFTkQsCisgICAgICAgICAgICAgIE9fTk9OQkxPQ0ssIE9fU1lOQywgT19BQ0NNT0RFLCBPX1JET05MWSwgT19SRFdSLCBPX1dST05MWQorICAgICAgICAgICAgfTsKKworaW50CittYWluICgpCit7CisKKyAgICAgICAgICAgIGludCByZXN1bHQgPSAhY29uc3RhbnRzOworICAgICAgICAgICAgI2lmIEhBVkVfU1lNTElOSworICAgICAgICAgICAgeworICAgICAgICAgICAgICBzdGF0aWMgY2hhciBjb25zdCBzeW1bXSA9ICJjb25mdGVzdC5zeW0iOworICAgICAgICAgICAgICBpZiAoc3ltbGluayAoIi9kZXYvbnVsbCIsIHN5bSkgIT0gMCkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gMjsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGludCBmZCA9IG9wZW4gKHN5bSwgT19XUk9OTFkgfCBPX05PRk9MTE9XIHwgT19DUkVBVCwgMCk7CisgICAgICAgICAgICAgICAgICBpZiAoZmQgPj0gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGNsb3NlIChmZCk7CisgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmICh1bmxpbmsgKHN5bSkgIT0gMCB8fCBzeW1saW5rICgiLiIsIHN5bSkgIT0gMCkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gMjsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGludCBmZCA9IG9wZW4gKHN5bSwgT19SRE9OTFkgfCBPX05PRk9MTE9XKTsKKyAgICAgICAgICAgICAgICAgIGlmIChmZCA+PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2xvc2UgKGZkKTsKKyAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gNDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgdW5saW5rIChzeW0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IGZpbGVbXSA9ICJjb25mZGVmcy5oIjsKKyAgICAgICAgICAgICAgaW50IGZkID0gb3BlbiAoZmlsZSwgT19SRE9OTFkgfCBPX05PQVRJTUUpOworICAgICAgICAgICAgICBpZiAoZmQgPCAwKQorICAgICAgICAgICAgICAgIHJlc3VsdCB8PSA4OworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQgc3QwOworICAgICAgICAgICAgICAgICAgaWYgKGZzdGF0IChmZCwgJnN0MCkgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDE2OworICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2hhciBjOworICAgICAgICAgICAgICAgICAgICAgIHNsZWVwICgxKTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZCAoZmQsICZjLCAxKSAhPSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDI0OworICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNsb3NlIChmZCkgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gMzI7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCBzdDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdCAoZmlsZSwgJnN0MSkgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDQwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3QwLnN0X2F0aW1lICE9IHN0MS5zdF9hdGltZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gNjQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2hlYWRlcl93b3JraW5nX2ZjbnRsX2g9eWVzCitlbHNlCisgIGNhc2UgJD8gaW4gIygKKyAgICAgICAgNCkgZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfZmNudGxfaD0nbm8gKGJhZCBPX05PRk9MTE9XKSc7OyAjKAorICAgICAgICA2NCkgZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfZmNudGxfaD0nbm8gKGJhZCBPX05PQVRJTUUpJzs7ICMoCisgICAgICAgIDY4KSBnbF9jdl9oZWFkZXJfd29ya2luZ19mY250bF9oPSdubyAoYmFkIE9fTk9BVElNRSwgT19OT0ZPTExPVyknOzsgIygKKyAgICAgICAgICopIGdsX2N2X2hlYWRlcl93b3JraW5nX2ZjbnRsX2g9J25vJzs7CisgICAgICAgIGVzYWMKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9oZWFkZXJfd29ya2luZ19mY250bF9oIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfZmNudGxfaCIgPiY2OyB9CisKKyAgY2FzZSAkZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfZmNudGxfaCBpbiAjKAorICAqT19OT0FUSU1FKiB8IG5vIHwgY3Jvc3MtY29tcGlsaW5nKSBhY192YWw9MDs7ICMoCisgICopIGFjX3ZhbD0xOzsKKyAgZXNhYworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfV09SS0lOR19PX05PQVRJTUUgJGFjX3ZhbAorX0FDRU9GCisKKworICBjYXNlICRnbF9jdl9oZWFkZXJfd29ya2luZ19mY250bF9oIGluICMoCisgICpPX05PRk9MTE9XKiB8IG5vIHwgY3Jvc3MtY29tcGlsaW5nKSBhY192YWw9MDs7ICMoCisgICopIGFjX3ZhbD0xOzsKKyAgZXNhYworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfV09SS0lOR19PX05PRk9MTE9XICRhY192YWwKK19BQ0VPRgorCisKK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInBpZF90IiAiYWNfY3ZfdHlwZV9waWRfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX3BpZF90IiA9IHh5ZXM7IHRoZW4gOgorCitlbHNlCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgcGlkX3QgaW50CkBAIC03MjQyLDgwNiArMTAxODYsMjQxMzIgQEAKIAogZmkKIAotIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3lzL3dhaXQuaCB0aGF0IGlzIFBPU0lYLjEgY29tcGF0aWJsZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzeXMvd2FpdC5oIHRoYXQgaXMgUE9TSVguMSBjb21wYXRpYmxlLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3lzX3dhaXRfaCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAibW9kZV90IiAiYWNfY3ZfdHlwZV9tb2RlX3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9tb2RlX3QiID0geHllczsgdGhlbiA6CisKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBtb2RlX3QgaW50CiBfQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorCitmaQorCisKKyAgR05VTElCX0RQUklOVEY9MDsKKyAgR05VTElCX0ZDTE9TRT0wOworICBHTlVMSUJfRkRPUEVOPTA7CisgIEdOVUxJQl9GRkxVU0g9MDsKKyAgR05VTElCX0ZHRVRDPTA7CisgIEdOVUxJQl9GR0VUUz0wOworICBHTlVMSUJfRk9QRU49MDsKKyAgR05VTElCX0ZQUklOVEY9MDsKKyAgR05VTElCX0ZQUklOVEZfUE9TSVg9MDsKKyAgR05VTElCX0ZQVVJHRT0wOworICBHTlVMSUJfRlBVVEM9MDsKKyAgR05VTElCX0ZQVVRTPTA7CisgIEdOVUxJQl9GUkVBRD0wOworICBHTlVMSUJfRlJFT1BFTj0wOworICBHTlVMSUJfRlNDQU5GPTA7CisgIEdOVUxJQl9GU0VFSz0wOworICBHTlVMSUJfRlNFRUtPPTA7CisgIEdOVUxJQl9GVEVMTD0wOworICBHTlVMSUJfRlRFTExPPTA7CisgIEdOVUxJQl9GV1JJVEU9MDsKKyAgR05VTElCX0dFVEM9MDsKKyAgR05VTElCX0dFVENIQVI9MDsKKyAgR05VTElCX0dFVERFTElNPTA7CisgIEdOVUxJQl9HRVRMSU5FPTA7CisgIEdOVUxJQl9PQlNUQUNLX1BSSU5URj0wOworICBHTlVMSUJfT0JTVEFDS19QUklOVEZfUE9TSVg9MDsKKyAgR05VTElCX1BDTE9TRT0wOworICBHTlVMSUJfUEVSUk9SPTA7CisgIEdOVUxJQl9QT1BFTj0wOworICBHTlVMSUJfUFJJTlRGPTA7CisgIEdOVUxJQl9QUklOVEZfUE9TSVg9MDsKKyAgR05VTElCX1BVVEM9MDsKKyAgR05VTElCX1BVVENIQVI9MDsKKyAgR05VTElCX1BVVFM9MDsKKyAgR05VTElCX1JFTU9WRT0wOworICBHTlVMSUJfUkVOQU1FPTA7CisgIEdOVUxJQl9SRU5BTUVBVD0wOworICBHTlVMSUJfU0NBTkY9MDsKKyAgR05VTElCX1NOUFJJTlRGPTA7CisgIEdOVUxJQl9TUFJJTlRGX1BPU0lYPTA7CisgIEdOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HPTA7CisgIEdOVUxJQl9TVERJT19IX1NJR1BJUEU9MDsKKyAgR05VTElCX1RNUEZJTEU9MDsKKyAgR05VTElCX1ZBU1BSSU5URj0wOworICBHTlVMSUJfVkZTQ0FORj0wOworICBHTlVMSUJfVlNDQU5GPTA7CisgIEdOVUxJQl9WRFBSSU5URj0wOworICBHTlVMSUJfVkZQUklOVEY9MDsKKyAgR05VTElCX1ZGUFJJTlRGX1BPU0lYPTA7CisgIEdOVUxJQl9WUFJJTlRGPTA7CisgIEdOVUxJQl9WUFJJTlRGX1BPU0lYPTA7CisgIEdOVUxJQl9WU05QUklOVEY9MDsKKyAgR05VTElCX1ZTUFJJTlRGX1BPU0lYPTA7CisgICAgSEFWRV9ERUNMX0ZQVVJHRT0xOworICBIQVZFX0RFQ0xfRlNFRUtPPTE7CisgIEhBVkVfREVDTF9GVEVMTE89MTsKKyAgSEFWRV9ERUNMX0dFVERFTElNPTE7CisgIEhBVkVfREVDTF9HRVRMSU5FPTE7CisgIEhBVkVfREVDTF9PQlNUQUNLX1BSSU5URj0xOworICBIQVZFX0RFQ0xfU05QUklOVEY9MTsKKyAgSEFWRV9ERUNMX1ZTTlBSSU5URj0xOworICBIQVZFX0RQUklOVEY9MTsKKyAgSEFWRV9GU0VFS089MTsKKyAgSEFWRV9GVEVMTE89MTsKKyAgSEFWRV9QQ0xPU0U9MTsKKyAgSEFWRV9QT1BFTj0xOworICBIQVZFX1JFTkFNRUFUPTE7CisgIEhBVkVfVkFTUFJJTlRGPTE7CisgIEhBVkVfVkRQUklOVEY9MTsKKyAgUkVQTEFDRV9EUFJJTlRGPTA7CisgIFJFUExBQ0VfRkNMT1NFPTA7CisgIFJFUExBQ0VfRkRPUEVOPTA7CisgIFJFUExBQ0VfRkZMVVNIPTA7CisgIFJFUExBQ0VfRk9QRU49MDsKKyAgUkVQTEFDRV9GUFJJTlRGPTA7CisgIFJFUExBQ0VfRlBVUkdFPTA7CisgIFJFUExBQ0VfRlJFT1BFTj0wOworICBSRVBMQUNFX0ZTRUVLPTA7CisgIFJFUExBQ0VfRlNFRUtPPTA7CisgIFJFUExBQ0VfRlRFTEw9MDsKKyAgUkVQTEFDRV9GVEVMTE89MDsKKyAgUkVQTEFDRV9HRVRERUxJTT0wOworICBSRVBMQUNFX0dFVExJTkU9MDsKKyAgUkVQTEFDRV9PQlNUQUNLX1BSSU5URj0wOworICBSRVBMQUNFX1BFUlJPUj0wOworICBSRVBMQUNFX1BPUEVOPTA7CisgIFJFUExBQ0VfUFJJTlRGPTA7CisgIFJFUExBQ0VfUkVNT1ZFPTA7CisgIFJFUExBQ0VfUkVOQU1FPTA7CisgIFJFUExBQ0VfUkVOQU1FQVQ9MDsKKyAgUkVQTEFDRV9TTlBSSU5URj0wOworICBSRVBMQUNFX1NQUklOVEY9MDsKKyAgUkVQTEFDRV9TVERJT19SRUFEX0ZVTkNTPTA7CisgIFJFUExBQ0VfU1RESU9fV1JJVEVfRlVOQ1M9MDsKKyAgUkVQTEFDRV9UTVBGSUxFPTA7CisgIFJFUExBQ0VfVkFTUFJJTlRGPTA7CisgIFJFUExBQ0VfVkRQUklOVEY9MDsKKyAgUkVQTEFDRV9WRlBSSU5URj0wOworICBSRVBMQUNFX1ZQUklOVEY9MDsKKyAgUkVQTEFDRV9WU05QUklOVEY9MDsKKyAgUkVQTEFDRV9WU1BSSU5URj0wOworCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdGRpbnQuaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3RkaW50LmguLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfaGVhZGVyX3N0ZGludF9oKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy93YWl0Lmg+Ci0jaWZuZGVmIFdFWElUU1RBVFVTCi0jIGRlZmluZSBXRVhJVFNUQVRVUyhzdGF0X3ZhbCkgKCh1bnNpZ25lZCkoc3RhdF92YWwpID4+IDgpCi0jZW5kaWYKLSNpZm5kZWYgV0lGRVhJVEVECi0jIGRlZmluZSBXSUZFWElURUQoc3RhdF92YWwpICgoKHN0YXRfdmFsKSAmIDI1NSkgPT0gMCkKLSNlbmRpZgotCisgICAgICAgICAgICAjaW5jbHVkZSA8c3RkaW50Lmg+CiBpbnQKIG1haW4gKCkKIHsKLSAgaW50IHM7Ci0gIHdhaXQgKCZzKTsKLSAgcyA9IFdJRkVYSVRFRCAocykgPyBXRVhJVFNUQVRVUyAocykgOiAxOwordWludG1heF90IGkgPSAodWludG1heF90KSAtMTsgcmV0dXJuICFpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9oZWFkZXJfc3lzX3dhaXRfaD15ZXMKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfaGVhZGVyX3N0ZGludF9oPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9oZWFkZXJfc3lzX3dhaXRfaD1ubworICBnbF9jdl9oZWFkZXJfc3RkaW50X2g9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N5c193YWl0X2giID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9zeXNfd2FpdF9oIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfd2FpdF9oID0geWVzOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2hlYWRlcl9zdGRpbnRfaCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2hlYWRlcl9zdGRpbnRfaCIgPiY2OyB9CisgIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9zdGRpbnRfaCA9IHllczsgdGhlbgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX1NZU19XQUlUX0ggMQorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCAxCiBfQUNFT0YKIAotZmkKKyAgZmkKIAogCi0KLWZvciBhY19mdW5jIGluIGR1cDIgd2FpdHBpZAotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBpbnR0eXBlcy5oIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBpbnR0eXBlcy5oLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2hlYWRlcl9pbnR0eXBlc19oKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwogCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KIAogaW50CiBtYWluICgpCiB7Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKK3VpbnRtYXhfdCBpID0gKHVpbnRtYXhfdCkgLTE7IHJldHVybiAhaTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2hlYWRlcl9pbnR0eXBlc19oPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBnbF9jdl9oZWFkZXJfaW50dHlwZXNfaD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfaGVhZGVyX2ludHR5cGVzX2giID4mNQorJGFzX2VjaG8gIiRnbF9jdl9oZWFkZXJfaW50dHlwZXNfaCIgPiY2OyB9CisgIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0aGVuCiAKLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYIDEKIF9BQ0VPRgogCi1maQotZG9uZQorICBmaQogCiAKIAotZm9yIGFjX2hlYWRlciBpbiB1bmlzdGQuaCB2Zm9yay5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKKworCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgc2l6ZSBzcGVjaWZpZXJzIGFzIGluIEM5OSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHByaW50ZiBzdXBwb3J0cyBzaXplIHNwZWNpZmllcnMgYXMgaW4gQzk5Li4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfcHJpbnRmX3NpemVzX2M5OSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLworCisgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisKKyAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gZ2xpYmMgc3lzdGVtcy4KKyAgICAgICAgICAgKi1nbnUqKSAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX3NpemVzX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBGcmVlQlNEID49IDUuCisgICAgICAgICAgIGZyZWVic2RbMS00XSopICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9zaXplc19jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIGZyZWVic2QqIHwga2ZyZWVic2QqKSBnbF9jdl9mdW5jX3ByaW50Zl9zaXplc19jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gTWFjIE9TIFggPj0gMTAuMy4KKyAgICAgICAgICAgZGFyd2luWzEtNl0uKikgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX3NpemVzX2M5OT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgZGFyd2luKikgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX3NpemVzX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBPcGVuQlNEID49IDMuOS4KKyAgICAgICAgICAgb3BlbmJzZFsxLTJdLiogfCBvcGVuYnNkMy5bMC04XSB8IG9wZW5ic2QzLlswLThdLiopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9zaXplc19jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIG9wZW5ic2QqKSAgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9zaXplc19jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gU29sYXJpcyA+PSAyLjEwLgorICAgICAgICAgICBzb2xhcmlzMi5bMS05XVswLTldKikgZ2xfY3ZfZnVuY19wcmludGZfc2l6ZXNfYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgc29sYXJpcyopICAgICAgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX3NpemVzX2M5OT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIE5ldEJTRCA+PSAzLgorICAgICAgICAgICBuZXRic2RbMS0yXSogfCBuZXRic2RlbGZbMS0yXSogfCBuZXRic2Rhb3V0WzEtMl0qIHwgbmV0YnNkY29mZlsxLTJdKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX3NpemVzX2M5OT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgbmV0YnNkKikgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX3NpemVzX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIHdlIGRvbid0IGtub3csIGFzc3VtZSB0aGUgd29yc3QuCisgICAgICAgICAgICopICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9zaXplc19jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICBlc2FjCisKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZiBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWAorIyBpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorI2lmIEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVgKKyMgaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbmRpZgorc3RhdGljIGNoYXIgYnVmWzEwMF07CitpbnQgbWFpbiAoKQoreworICBpbnQgcmVzdWx0ID0gMDsKKyNpZiBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCB8fCBIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYCisgIGJ1ZlswXSA9ICdcMCc7CisgIGlmIChzcHJpbnRmIChidWYsICIlanUgJWQiLCAodWludG1heF90KSAxMjM0NTY3MSwgMzMsIDQ0LCA1NSkgPCAwCisgICAgICB8fCBzdHJjbXAgKGJ1ZiwgIjEyMzQ1NjcxIDMzIikgIT0gMCkKKyAgICByZXN1bHQgfD0gMTsKKyNlbmRpZgorICBidWZbMF0gPSAnXDAnOworICBpZiAoc3ByaW50ZiAoYnVmLCAiJXp1ICVkIiwgKHNpemVfdCkgMTIzNDU2NzIsIDMzLCA0NCwgNTUpIDwgMAorICAgICAgfHwgc3RyY21wIChidWYsICIxMjM0NTY3MiAzMyIpICE9IDApCisgICAgcmVzdWx0IHw9IDI7CisgIGJ1ZlswXSA9ICdcMCc7CisgIGlmIChzcHJpbnRmIChidWYsICIldHUgJWQiLCAocHRyZGlmZl90KSAxMjM0NTY3MywgMzMsIDQ0LCA1NSkgPCAwCisgICAgICB8fCBzdHJjbXAgKGJ1ZiwgIjEyMzQ1NjczIDMzIikgIT0gMCkKKyAgICByZXN1bHQgfD0gNDsKKyAgYnVmWzBdID0gJ1wwJzsKKyAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZyAlZCIsIChsb25nIGRvdWJsZSkgMS41LCAzMywgNDQsIDU1KSA8IDAKKyAgICAgIHx8IHN0cmNtcCAoYnVmLCAiMS41IDMzIikgIT0gMCkKKyAgICByZXN1bHQgfD0gODsKKyAgcmV0dXJuIHJlc3VsdDsKK30KIF9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19wcmludGZfc2l6ZXNfYzk5PXllcworZWxzZQorICBnbF9jdl9mdW5jX3ByaW50Zl9zaXplc19jOTk9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfcHJpbnRmX3NpemVzX2M5OSIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfcHJpbnRmX3NpemVzX2M5OSIgPiY2OyB9CisKKworCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgJ2xvbmcgZG91YmxlJyBhcmd1bWVudHMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgJ2xvbmcgZG91YmxlJyBhcmd1bWVudHMuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19wcmludGZfbG9uZ19kb3VibGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisKKyAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICBiZW9zKikgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2xvbmdfZG91YmxlPSJndWVzc2luZyBubyI7OworICAgICAgICAgICBtaW5ndyogfCBwdyopIGdsX2N2X2Z1bmNfcHJpbnRmX2xvbmdfZG91YmxlPSJndWVzc2luZyBubyI7OworICAgICAgICAgICAqKSAgICAgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2xvbmdfZG91YmxlPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgIGVzYWMKKworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorc3RhdGljIGNoYXIgYnVmWzEwMDAwXTsKK2ludCBtYWluICgpCit7CisgIGludCByZXN1bHQgPSAwOworICBidWZbMF0gPSAnXDAnOworICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxmICVkIiwgMS43NUwsIDMzLCA0NCwgNTUpIDwgMAorICAgICAgfHwgc3RyY21wIChidWYsICIxLjc1MDAwMCAzMyIpICE9IDApCisgICAgcmVzdWx0IHw9IDE7CisgIGJ1ZlswXSA9ICdcMCc7CisgIGlmIChzcHJpbnRmIChidWYsICIlTGUgJWQiLCAxLjc1TCwgMzMsIDQ0LCA1NSkgPCAwCisgICAgICB8fCBzdHJjbXAgKGJ1ZiwgIjEuNzUwMDAwZSswMCAzMyIpICE9IDApCisgICAgcmVzdWx0IHw9IDI7CisgIGJ1ZlswXSA9ICdcMCc7CisgIGlmIChzcHJpbnRmIChidWYsICIlTGcgJWQiLCAxLjc1TCwgMzMsIDQ0LCA1NSkgPCAwCisgICAgICB8fCBzdHJjbXAgKGJ1ZiwgIjEuNzUgMzMiKSAhPSAwKQorICAgIHJlc3VsdCB8PSA0OworICByZXR1cm4gcmVzdWx0OworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19wcmludGZfbG9uZ19kb3VibGU9eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfcHJpbnRmX2xvbmdfZG91YmxlPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3ByaW50Zl9sb25nX2RvdWJsZSIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfcHJpbnRmX2xvbmdfZG91YmxlIiA+JjY7IH0KKworCisKKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHByaW50ZiBzdXBwb3J0cyBpbmZpbml0ZSAnZG91YmxlJyBhcmd1bWVudHMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgaW5maW5pdGUgJ2RvdWJsZScgYXJndW1lbnRzLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorCisgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIGdsaWJjIHN5c3RlbXMuCisgICAgICAgICAgICotZ251KikgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBGcmVlQlNEID49IDYuCisgICAgICAgICAgIGZyZWVic2RbMS01XSopICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgZnJlZWJzZCogfCBrZnJlZWJzZCopIGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIE1hYyBPUyBYID49IDEwLjMuCisgICAgICAgICAgIGRhcndpblsxLTZdLiopICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgZGFyd2luKikgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIEhQLVVYID49IDExLgorICAgICAgICAgICBocHV4WzctOV0qIHwgaHB1eDEwKikgZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGU9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIGhwdXgqKSAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBOZXRCU0QgPj0gMy4KKyAgICAgICAgICAgbmV0YnNkWzEtMl0qIHwgbmV0YnNkZWxmWzEtMl0qIHwgbmV0YnNkYW91dFsxLTJdKiB8IG5ldGJzZGNvZmZbMS0yXSopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgbmV0YnNkKikgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIEJlT1MuCisgICAgICAgICAgIGJlb3MqKSAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIHdlIGRvbid0IGtub3csIGFzc3VtZSB0aGUgd29yc3QuCisgICAgICAgICAgICopICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgIGVzYWMKKworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorc3RhdGljIGludAorc3RyaXNuYW4gKGNvbnN0IGNoYXIgKnN0cmluZywgc2l6ZV90IHN0YXJ0X2luZGV4LCBzaXplX3QgZW5kX2luZGV4KQoreworICBpZiAoc3RhcnRfaW5kZXggPCBlbmRfaW5kZXgpCisgICAgeworICAgICAgaWYgKHN0cmluZ1tzdGFydF9pbmRleF0gPT0gJy0nKQorICAgICAgICBzdGFydF9pbmRleCsrOworICAgICAgaWYgKHN0YXJ0X2luZGV4ICsgMyA8PSBlbmRfaW5kZXgKKyAgICAgICAgICAmJiBtZW1jbXAgKHN0cmluZyArIHN0YXJ0X2luZGV4LCAibmFuIiwgMykgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIHN0YXJ0X2luZGV4ICs9IDM7CisgICAgICAgICAgaWYgKHN0YXJ0X2luZGV4ID09IGVuZF9pbmRleAorICAgICAgICAgICAgICB8fCAoc3RyaW5nW3N0YXJ0X2luZGV4XSA9PSAnKCcgJiYgc3RyaW5nW2VuZF9pbmRleCAtIDFdID09ICcpJykpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKyAgcmV0dXJuIDA7Cit9CitzdGF0aWMgaW50CitoYXZlX21pbnVzX3plcm8gKCkKK3sKKyAgc3RhdGljIGRvdWJsZSBwbHVzX3plcm8gPSAwLjA7CisgIGRvdWJsZSBtaW51c196ZXJvID0gLSBwbHVzX3plcm87CisgIHJldHVybiBtZW1jbXAgKCZwbHVzX3plcm8sICZtaW51c196ZXJvLCBzaXplb2YgKGRvdWJsZSkpICE9IDA7Cit9CitzdGF0aWMgY2hhciBidWZbMTAwMDBdOworc3RhdGljIGRvdWJsZSB6ZXJvID0gMC4wOworaW50IG1haW4gKCkKK3sKKyAgaW50IHJlc3VsdCA9IDA7CisgIGlmIChzcHJpbnRmIChidWYsICIlZiIsIDEuMCAvIHplcm8pIDwgMAorICAgICAgfHwgKHN0cmNtcCAoYnVmLCAiaW5mIikgIT0gMCAmJiBzdHJjbXAgKGJ1ZiwgImluZmluaXR5IikgIT0gMCkpCisgICAgcmVzdWx0IHw9IDE7CisgIGlmIChzcHJpbnRmIChidWYsICIlZiIsIC0xLjAgLyB6ZXJvKSA8IDAKKyAgICAgIHx8IChzdHJjbXAgKGJ1ZiwgIi1pbmYiKSAhPSAwICYmIHN0cmNtcCAoYnVmLCAiLWluZmluaXR5IikgIT0gMCkpCisgICAgcmVzdWx0IHw9IDE7CisgIGlmIChzcHJpbnRmIChidWYsICIlZiIsIHplcm8gLyB6ZXJvKSA8IDAKKyAgICAgIHx8ICFzdHJpc25hbiAoYnVmLCAwLCBzdHJsZW4gKGJ1ZikpKQorICAgIHJlc3VsdCB8PSAyOworICBpZiAoc3ByaW50ZiAoYnVmLCAiJWUiLCAxLjAgLyB6ZXJvKSA8IDAKKyAgICAgIHx8IChzdHJjbXAgKGJ1ZiwgImluZiIpICE9IDAgJiYgc3RyY21wIChidWYsICJpbmZpbml0eSIpICE9IDApKQorICAgIHJlc3VsdCB8PSA0OworICBpZiAoc3ByaW50ZiAoYnVmLCAiJWUiLCAtMS4wIC8gemVybykgPCAwCisgICAgICB8fCAoc3RyY21wIChidWYsICItaW5mIikgIT0gMCAmJiBzdHJjbXAgKGJ1ZiwgIi1pbmZpbml0eSIpICE9IDApKQorICAgIHJlc3VsdCB8PSA0OworICBpZiAoc3ByaW50ZiAoYnVmLCAiJWUiLCB6ZXJvIC8gemVybykgPCAwCisgICAgICB8fCAhc3RyaXNuYW4gKGJ1ZiwgMCwgc3RybGVuIChidWYpKSkKKyAgICByZXN1bHQgfD0gODsKKyAgaWYgKHNwcmludGYgKGJ1ZiwgIiVnIiwgMS4wIC8gemVybykgPCAwCisgICAgICB8fCAoc3RyY21wIChidWYsICJpbmYiKSAhPSAwICYmIHN0cmNtcCAoYnVmLCAiaW5maW5pdHkiKSAhPSAwKSkKKyAgICByZXN1bHQgfD0gMTY7CisgIGlmIChzcHJpbnRmIChidWYsICIlZyIsIC0xLjAgLyB6ZXJvKSA8IDAKKyAgICAgIHx8IChzdHJjbXAgKGJ1ZiwgIi1pbmYiKSAhPSAwICYmIHN0cmNtcCAoYnVmLCAiLWluZmluaXR5IikgIT0gMCkpCisgICAgcmVzdWx0IHw9IDE2OworICBpZiAoc3ByaW50ZiAoYnVmLCAiJWciLCB6ZXJvIC8gemVybykgPCAwCisgICAgICB8fCAhc3RyaXNuYW4gKGJ1ZiwgMCwgc3RybGVuIChidWYpKSkKKyAgICByZXN1bHQgfD0gMzI7CisgIC8qIFRoaXMgdGVzdCBmYWlscyBvbiBIUC1VWCAxMC4yMC4gICovCisgIGlmIChoYXZlX21pbnVzX3plcm8gKCkpCisgICAgaWYgKHNwcmludGYgKGJ1ZiwgIiVnIiwgLSB6ZXJvKSA8IDAKKyAgICAgICAgfHwgc3RyY21wIChidWYsICItMCIpICE9IDApCisgICAgcmVzdWx0IHw9IDY0OworICByZXR1cm4gcmVzdWx0OworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGU9eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZSIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlIiA+JjY7IH0KKworCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYnl0ZSBvcmRlcmluZyBpcyBiaWdlbmRpYW4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbi4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jX2JpZ2VuZGlhbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24KKyAgICAjIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSB1bml2ZXJzYWwgY29tcGlsZXIuCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmbmRlZiBfX0FQUExFX0NDX18KKwkgICAgICAgbm90IGEgdW5pdmVyc2FsIGNhcGFibGUgY29tcGlsZXIKKwkgICAgICNlbmRpZgorCSAgICAgdHlwZWRlZiBpbnQgZHVtbXk7CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisJIyBDaGVjayBmb3IgcG90ZW50aWFsIC1hcmNoIGZsYWdzLiAgSXQgaXMgbm90IHVuaXZlcnNhbCB1bmxlc3MKKwkjIHRoZXJlIGFyZSBhdCBsZWFzdCB0d28gLWFyY2ggZmxhZ3Mgd2l0aCBkaWZmZXJlbnQgdmFsdWVzLgorCWFjX2FyY2g9CisJYWNfcHJldj0KKwlmb3IgYWNfd29yZCBpbiAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1M7IGRvCisJIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorCSAgIGNhc2UgJGFjX3dvcmQgaW4KKwkgICAgIGk/ODYgfCB4ODZfNjQgfCBwcGMgfCBwcGM2NCkKKwkgICAgICAgaWYgdGVzdCAteiAiJGFjX2FyY2giIHx8IHRlc3QgIiRhY19hcmNoIiA9ICIkYWNfd29yZCI7IHRoZW4KKwkJIGFjX2FyY2g9JGFjX3dvcmQKKwkgICAgICAgZWxzZQorCQkgYWNfY3ZfY19iaWdlbmRpYW49dW5pdmVyc2FsCisJCSBicmVhaworCSAgICAgICBmaQorCSAgICAgICA7OworCSAgIGVzYWMKKwkgICBhY19wcmV2PQorCSBlbGlmIHRlc3QgIngkYWNfd29yZCIgPSAieC1hcmNoIjsgdGhlbgorCSAgIGFjX3ByZXY9YXJjaAorCSBmaQorICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KKyAgICAgICMgU2VlIGlmIHN5cy9wYXJhbS5oIGRlZmluZXMgdGhlIEJZVEVfT1JERVIgbWFjcm8uCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisJICAgICAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisKK2ludAorbWFpbiAoKQoreworI2lmICEgKGRlZmluZWQgQllURV9PUkRFUiAmJiBkZWZpbmVkIEJJR19FTkRJQU4gXAorCQkgICAgICYmIGRlZmluZWQgTElUVExFX0VORElBTiAmJiBCWVRFX09SREVSICYmIEJJR19FTkRJQU4gXAorCQkgICAgICYmIExJVFRMRV9FTkRJQU4pCisJICAgICAgYm9ndXMgZW5kaWFuIG1hY3JvcworCSAgICAgI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICAjIEl0IGRvZXM7IG5vdyBzZWUgd2hldGhlciBpdCBkZWZpbmVkIHRvIEJJR19FTkRJQU4gb3Igbm90LgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisJCSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKworaW50CittYWluICgpCit7CisjaWYgQllURV9PUkRFUiAhPSBCSUdfRU5ESUFOCisJCSBub3QgYmlnIGVuZGlhbgorCQkjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2NfYmlnZW5kaWFuPXllcworZWxzZQorICBhY19jdl9jX2JpZ2VuZGlhbj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpCisgICAgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCisgICAgICAjIFNlZSBpZiA8bGltaXRzLmg+IGRlZmluZXMgX0xJVFRMRV9FTkRJQU4gb3IgX0JJR19FTkRJQU4gKGUuZy4sIFNvbGFyaXMpLgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGxpbWl0cy5oPgorCitpbnQKK21haW4gKCkKK3sKKyNpZiAhIChkZWZpbmVkIF9MSVRUTEVfRU5ESUFOIHx8IGRlZmluZWQgX0JJR19FTkRJQU4pCisJICAgICAgYm9ndXMgZW5kaWFuIG1hY3JvcworCSAgICAgI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICAjIEl0IGRvZXM7IG5vdyBzZWUgd2hldGhlciBpdCBkZWZpbmVkIHRvIF9CSUdfRU5ESUFOIG9yIG5vdC4KKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGxpbWl0cy5oPgorCitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgX0JJR19FTkRJQU4KKwkJIG5vdCBiaWcgZW5kaWFuCisJCSNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCitlbHNlCisgIGFjX2N2X2NfYmlnZW5kaWFuPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgZmkKKyAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KKyAgICAgICMgQ29tcGlsZSBhIHRlc3QgcHJvZ3JhbS4KKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgIyBUcnkgdG8gZ3Vlc3MgYnkgZ3JlcHBpbmcgdmFsdWVzIGZyb20gYW4gb2JqZWN0IGZpbGUuCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK3Nob3J0IGludCBhc2NpaV9tbVtdID0KKwkJICB7IDB4NDI0OSwgMHg0NzY1LCAweDZFNDQsIDB4Njk2MSwgMHg2RTUzLCAweDc5NTMsIDAgfTsKKwkJc2hvcnQgaW50IGFzY2lpX2lpW10gPQorCQkgIHsgMHg2OTRDLCAweDU0NTQsIDB4NjU2QywgMHg2RTQ1LCAweDY5NDQsIDB4NkU2MSwgMCB9OworCQlpbnQgdXNlX2FzY2lpIChpbnQgaSkgeworCQkgIHJldHVybiBhc2NpaV9tbVtpXSArIGFzY2lpX2lpW2ldOworCQl9CisJCXNob3J0IGludCBlYmNkaWNfaWlbXSA9CisJCSAgeyAweDg5RDMsIDB4RTNFMywgMHg4NTkzLCAweDk1QzUsIDB4ODlDNCwgMHg5NTgxLCAwIH07CisJCXNob3J0IGludCBlYmNkaWNfbW1bXSA9CisJCSAgeyAweEMyQzksIDB4Qzc4NSwgMHg5NUM0LCAweDg5ODEsIDB4OTVFMiwgMHhBOEUyLCAwIH07CisJCWludCB1c2VfZWJjZGljIChpbnQgaSkgeworCQkgIHJldHVybiBlYmNkaWNfbW1baV0gKyBlYmNkaWNfaWlbaV07CisJCX0KKwkJZXh0ZXJuIGludCBmb287CisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHVzZV9hc2NpaSAoZm9vKSA9PSB1c2VfZWJjZGljIChmb28pOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGlmIGdyZXAgQklHZW5EaWFuU3lTIGNvbmZ0ZXN0LiRhY19vYmpleHQgPi9kZXYvbnVsbDsgdGhlbgorCSAgICAgIGFjX2N2X2NfYmlnZW5kaWFuPXllcworCSAgICBmaQorCSAgICBpZiBncmVwIExpVFRsZUVuRGlhbiBjb25mdGVzdC4kYWNfb2JqZXh0ID4vZGV2L251bGwgOyB0aGVuCisJICAgICAgaWYgdGVzdCAiJGFjX2N2X2NfYmlnZW5kaWFuIiA9IHVua25vd247IHRoZW4KKwkJYWNfY3ZfY19iaWdlbmRpYW49bm8KKwkgICAgICBlbHNlCisJCSMgZmluZGluZyBib3RoIHN0cmluZ3MgaXMgdW5saWtlbHkgdG8gaGFwcGVuLCBidXQgd2hvIGtub3dzPworCQlhY19jdl9jX2JpZ2VuZGlhbj11bmtub3duCisJICAgICAgZmkKKwkgICAgZmkKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2hlYWRlcl9jb21waWxlcj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2Ci0KLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2Ci0KLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPwotY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgotICB5ZXM6bm86ICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLSAgICA7OwotICBubzp5ZXM6KiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KLSAgICAoCi0gICAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWJpc29uQGdudS5vcmcgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgICApIHwKLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgotICAgIDs7Ci1lc2FjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLQotZmkKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLQotCi1mb3IgYWNfZnVuYyBpbiBmb3JrIHZmb3JrCi1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKK2ludAorbWFpbiAoKQogewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKKworCSAgICAgLyogQXJlIHdlIGxpdHRsZSBvciBiaWcgZW5kaWFuPyAgRnJvbSBIYXJiaXNvbiZTdGVlbGUuICAqLworCSAgICAgdW5pb24KKwkgICAgIHsKKwkgICAgICAgbG9uZyBpbnQgbDsKKwkgICAgICAgY2hhciBjW3NpemVvZiAobG9uZyBpbnQpXTsKKwkgICAgIH0gdTsKKwkgICAgIHUubCA9IDE7CisJICAgICByZXR1cm4gdS5jW3NpemVvZiAobG9uZyBpbnQpIC0gMV0gPT0gMTsKKworICA7CisgIHJldHVybiAwOwogfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfY19iaWdlbmRpYW49bm8KK2Vsc2UKKyAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworICAgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2JpZ2VuZGlhbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2NfYmlnZW5kaWFuIiA+JjY7IH0KKyBjYXNlICRhY19jdl9jX2JpZ2VuZGlhbiBpbiAjKAorICAgeWVzKQorICAgICAkYXNfZWNobyAiI2RlZmluZSBXT1JEU19CSUdFTkRJQU4gMSIgPj5jb25mZGVmcy5oCis7OyAjKAorICAgbm8pCisgICAgICA7OyAjKAorICAgdW5pdmVyc2FsKQorCiskYXNfZWNobyAiI2RlZmluZSBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgOzsgIygKKyAgICopCisgICAgIGFzX2ZuX2Vycm9yICQ/ICJ1bmtub3duIGVuZGlhbm5lc3MKKyBwcmVzZXR0aW5nIGFjX2N2X2NfYmlnZW5kaWFuPW5vIChvciB5ZXMpIHdpbGwgaGVscCIgIiRMSU5FTk8iIDUgOzsKKyBlc2FjCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBsb25nIGRvdWJsZSBhbmQgZG91YmxlIGFyZSB0aGUgc2FtZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGxvbmcgZG91YmxlIGFuZCBkb3VibGUgYXJlIHRoZSBzYW1lLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2xvbmdfZG91YmxlX2VxdWFsc19kb3VibGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8ZmxvYXQuaD4KK2ludAorbWFpbiAoKQorewordHlwZWRlZiBpbnQgY2hlY2tbc2l6ZW9mIChsb25nIGRvdWJsZSkgPT0gc2l6ZW9mIChkb3VibGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBMREJMX01BTlRfRElHID09IERCTF9NQU5UX0RJRworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgTERCTF9NQVhfRVhQID09IERCTF9NQVhfRVhQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBMREJMX01JTl9FWFAgPT0gREJMX01JTl9FWFAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMSA6IC0xXTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2xvbmdfZG91YmxlX2VxdWFsc19kb3VibGU9eWVzCitlbHNlCisgIGdsX2N2X2xvbmdfZG91YmxlX2VxdWFsc19kb3VibGU9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfbG9uZ19kb3VibGVfZXF1YWxzX2RvdWJsZSIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2xvbmdfZG91YmxlX2VxdWFsc19kb3VibGUiID4mNjsgfQorICBpZiB0ZXN0ICRnbF9jdl9sb25nX2RvdWJsZV9lcXVhbHNfZG91YmxlID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU0FNRV9MT05HX0RPVUJMRV9BU19ET1VCTEUgMSIgPj5jb25mZGVmcy5oCisKKyAgICBIQVZFX1NBTUVfTE9OR19ET1VCTEVfQVNfRE9VQkxFPTEKKyAgZWxzZQorICAgIEhBVkVfU0FNRV9MT05HX0RPVUJMRV9BU19ET1VCTEU9MAorICBmaQorCisKKworCisKKworCisgICAgICAgICBpZiB0ZXN0IC1uICIkZ2xfcHJpbnRmX3NhZmUiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIENIRUNLX1BSSU5URl9TQUZFIDEiID4+Y29uZmRlZnMuaAorCisgIGZpCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9sb25nX2RvdWJsZSIgaW4KKyAgICAqeWVzKQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHByaW50ZiBzdXBwb3J0cyBpbmZpbml0ZSAnbG9uZyBkb3VibGUnIGFyZ3VtZW50cyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHByaW50ZiBzdXBwb3J0cyBpbmZpbml0ZSAnbG9uZyBkb3VibGUnIGFyZ3VtZW50cy4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZV9sb25nX2RvdWJsZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisKKyAgICAgICAgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyBubyBvbiBpYTY0LCB4ODZfNjQsIGkzODYuCisgICAgICAgICAgICAgICBpYTY0IHwgeDg2XzY0IHwgaSo4NikgZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGVfbG9uZ19kb3VibGU9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gZ2xpYmMgc3lzdGVtcy4KKyAgICAgICAgICAgICAgICAgICAqLWdudSopICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGVfbG9uZ19kb3VibGU9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBGcmVlQlNEID49IDYuCisgICAgICAgICAgICAgICAgICAgZnJlZWJzZFsxLTVdKikgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlX2xvbmdfZG91YmxlPSJndWVzc2luZyBubyI7OworICAgICAgICAgICAgICAgICAgIGZyZWVic2QqIHwga2ZyZWVic2QqKSBnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZV9sb25nX2RvdWJsZT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIEhQLVVYID49IDExLgorICAgICAgICAgICAgICAgICAgIGhwdXhbNy05XSogfCBocHV4MTAqKSBnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZV9sb25nX2RvdWJsZT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgICAgICAgICBocHV4KikgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGVfbG9uZ19kb3VibGU9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIHdlIGRvbid0IGtub3csIGFzc3VtZSB0aGUgd29yc3QuCisgICAgICAgICAgICAgICAgICAgKikgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlX2xvbmdfZG91YmxlPSJndWVzc2luZyBubyI7OworICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgZXNhYworCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWYgZGVmaW5lZCBfX01BQ0hfXyAmJiBkZWZpbmVkIF9fQVBQTEVfXworLyogQXZvaWQgYSBjcmFzaCBvbiBNYWMgT1MgWC4gICovCisjaW5jbHVkZSA8bWFjaC9tYWNoLmg+CisjaW5jbHVkZSA8bWFjaC9tYWNoX2Vycm9yLmg+CisjaW5jbHVkZSA8bWFjaC90aHJlYWRfc3RhdHVzLmg+CisjaW5jbHVkZSA8bWFjaC9leGNlcHRpb24uaD4KKyNpbmNsdWRlIDxtYWNoL3Rhc2suaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisvKiBUaGUgZXhjZXB0aW9uIHBvcnQgb24gd2hpY2ggb3VyIHRocmVhZCBsaXN0ZW5zLiAgKi8KK3N0YXRpYyBtYWNoX3BvcnRfdCBvdXJfZXhjZXB0aW9uX3BvcnQ7CisvKiBUaGUgbWFpbiBmdW5jdGlvbiBvZiB0aGUgdGhyZWFkIGxpc3RlbmluZyBmb3IgZXhjZXB0aW9ucyBvZiB0eXBlCisgICBFWENfQkFEX0FDQ0VTUy4gICovCitzdGF0aWMgdm9pZCAqCittYWNoX2V4Y2VwdGlvbl90aHJlYWQgKHZvaWQgKmFyZykKK3sKKyAgLyogQnVmZmVyIGZvciBhIG1lc3NhZ2UgdG8gYmUgcmVjZWl2ZWQuICAqLworICBzdHJ1Y3QgeworICAgIG1hY2hfbXNnX2hlYWRlcl90IGhlYWQ7CisgICAgbWFjaF9tc2dfYm9keV90IG1zZ2hfYm9keTsKKyAgICBjaGFyIGRhdGFbMTAyNF07CisgIH0gbXNnOworICBtYWNoX21zZ19yZXR1cm5fdCByZXR2YWw7CisgIC8qIFdhaXQgZm9yIGEgbWVzc2FnZSBvbiB0aGUgZXhjZXB0aW9uIHBvcnQuICAqLworICByZXR2YWwgPSBtYWNoX21zZyAoJm1zZy5oZWFkLCBNQUNIX1JDVl9NU0cgfCBNQUNIX1JDVl9MQVJHRSwgMCwgc2l6ZW9mIChtc2cpLAorICAgICAgICAgICAgICAgICAgICAgb3VyX2V4Y2VwdGlvbl9wb3J0LCBNQUNIX01TR19USU1FT1VUX05PTkUsIE1BQ0hfUE9SVF9OVUxMKTsKKyAgaWYgKHJldHZhbCAhPSBNQUNIX01TR19TVUNDRVNTKQorICAgIGFib3J0ICgpOworICBleGl0ICgxKTsKK30KK3N0YXRpYyB2b2lkCitub2NyYXNoX2luaXQgKHZvaWQpCit7CisgIG1hY2hfcG9ydF90IHNlbGYgPSBtYWNoX3Rhc2tfc2VsZiAoKTsKKyAgLyogQWxsb2NhdGUgYSBwb3J0IG9uIHdoaWNoIHRoZSB0aHJlYWQgc2hhbGwgbGlzdGVuIGZvciBleGNlcHRpb25zLiAgKi8KKyAgaWYgKG1hY2hfcG9ydF9hbGxvY2F0ZSAoc2VsZiwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsICZvdXJfZXhjZXB0aW9uX3BvcnQpCisgICAgICA9PSBLRVJOX1NVQ0NFU1MpIHsKKyAgICAvKiBTZWUgaHR0cDovL3dlYi5taXQuZWR1L2Rhcndpbi9zcmMvbW9kdWxlcy94bnUvb3NmbWsvbWFuL21hY2hfcG9ydF9pbnNlcnRfcmlnaHQuaHRtbC4gICovCisgICAgaWYgKG1hY2hfcG9ydF9pbnNlcnRfcmlnaHQgKHNlbGYsIG91cl9leGNlcHRpb25fcG9ydCwgb3VyX2V4Y2VwdGlvbl9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQUNIX01TR19UWVBFX01BS0VfU0VORCkKKyAgICAgICAgPT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAvKiBUaGUgZXhjZXB0aW9ucyB3ZSB3YW50IHRvIGNhdGNoLiAgT25seSBFWENfQkFEX0FDQ0VTUyBpcyBpbnRlcmVzdGluZworICAgICAgICAgZm9yIHVzLiAgKi8KKyAgICAgIGV4Y2VwdGlvbl9tYXNrX3QgbWFzayA9IEVYQ19NQVNLX0JBRF9BQ0NFU1M7CisgICAgICAvKiBDcmVhdGUgdGhlIHRocmVhZCBsaXN0ZW5pbmcgb24gdGhlIGV4Y2VwdGlvbiBwb3J0LiAgKi8KKyAgICAgIHB0aHJlYWRfYXR0cl90IGF0dHI7CisgICAgICBwdGhyZWFkX3QgdGhyZWFkOworICAgICAgaWYgKHB0aHJlYWRfYXR0cl9pbml0ICgmYXR0cikgPT0gMAorICAgICAgICAgICYmIHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSAoJmF0dHIsIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKSA9PSAwCisgICAgICAgICAgJiYgcHRocmVhZF9jcmVhdGUgKCZ0aHJlYWQsICZhdHRyLCBtYWNoX2V4Y2VwdGlvbl90aHJlYWQsIE5VTEwpID09IDApIHsKKyAgICAgICAgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgKCZhdHRyKTsKKyAgICAgICAgLyogUmVwbGFjZSB0aGUgZXhjZXB0aW9uIHBvcnQgaW5mbyBmb3IgdGhlc2UgZXhjZXB0aW9ucyB3aXRoIG91ciBvd24uCisgICAgICAgICAgIE5vdGUgdGhhdCB3ZSByZXBsYWNlIHRoZSBleGNlcHRpb24gcG9ydCBmb3IgdGhlIGVudGlyZSB0YXNrLCBub3Qgb25seQorICAgICAgICAgICBmb3IgYSBwYXJ0aWN1bGFyIHRocmVhZC4gIFRoaXMgaGFzIHRoZSBlZmZlY3QgdGhhdCB3aGVuIG91ciBleGNlcHRpb24KKyAgICAgICAgICAgcG9ydCBnZXRzIHRoZSBtZXNzYWdlLCB0aGUgdGhyZWFkIHNwZWNpZmljIGV4Y2VwdGlvbiBwb3J0IGhhcyBhbHJlYWR5CisgICAgICAgICAgIGJlZW4gYXNrZWQsIGFuZCB3ZSBkb24ndCBuZWVkIHRvIGJvdGhlciBhYm91dCBpdC4KKyAgICAgICAgICAgU2VlIGh0dHA6Ly93ZWIubWl0LmVkdS9kYXJ3aW4vc3JjL21vZHVsZXMveG51L29zZm1rL21hbi90YXNrX3NldF9leGNlcHRpb25fcG9ydHMuaHRtbC4gICovCisgICAgICAgIHRhc2tfc2V0X2V4Y2VwdGlvbl9wb3J0cyAoc2VsZiwgbWFzaywgb3VyX2V4Y2VwdGlvbl9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYQ0VQVElPTl9ERUZBVUxULCBNQUNISU5FX1RIUkVBRF9TVEFURSk7CisgICAgICB9CisgICAgfQorICB9Cit9CisjZWxpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCisvKiBBdm9pZCBhIGNyYXNoIG9uIG5hdGl2ZSBXaW5kb3dzLiAgKi8KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3aW5lcnJvci5oPgorc3RhdGljIExPTkcgV0lOQVBJCitleGNlcHRpb25fZmlsdGVyIChFWENFUFRJT05fUE9JTlRFUlMgKkV4Y2VwdGlvbkluZm8pCit7CisgIHN3aXRjaCAoRXhjZXB0aW9uSW5mby0+RXhjZXB0aW9uUmVjb3JkLT5FeGNlcHRpb25Db2RlKQorICAgIHsKKyAgICBjYXNlIEVYQ0VQVElPTl9BQ0NFU1NfVklPTEFUSU9OOgorICAgIGNhc2UgRVhDRVBUSU9OX0lOX1BBR0VfRVJST1I6CisgICAgY2FzZSBFWENFUFRJT05fU1RBQ0tfT1ZFUkZMT1c6CisgICAgY2FzZSBFWENFUFRJT05fR1VBUkRfUEFHRToKKyAgICBjYXNlIEVYQ0VQVElPTl9QUklWX0lOU1RSVUNUSU9OOgorICAgIGNhc2UgRVhDRVBUSU9OX0lMTEVHQUxfSU5TVFJVQ1RJT046CisgICAgY2FzZSBFWENFUFRJT05fREFUQVRZUEVfTUlTQUxJR05NRU5UOgorICAgIGNhc2UgRVhDRVBUSU9OX0FSUkFZX0JPVU5EU19FWENFRURFRDoKKyAgICBjYXNlIEVYQ0VQVElPTl9OT05DT05USU5VQUJMRV9FWENFUFRJT046CisgICAgICBleGl0ICgxKTsKKyAgICB9CisgIHJldHVybiBFWENFUFRJT05fQ09OVElOVUVfU0VBUkNIOworfQorc3RhdGljIHZvaWQKK25vY3Jhc2hfaW5pdCAodm9pZCkKK3sKKyAgU2V0VW5oYW5kbGVkRXhjZXB0aW9uRmlsdGVyICgoTFBUT1BfTEVWRUxfRVhDRVBUSU9OX0ZJTFRFUikgZXhjZXB0aW9uX2ZpbHRlcik7Cit9CisjZWxzZQorLyogQXZvaWQgYSBjcmFzaCBvbiBQT1NJWCBzeXN0ZW1zLiAgKi8KKyNpbmNsdWRlIDxzaWduYWwuaD4KKy8qIEEgUE9TSVggc2lnbmFsIGhhbmRsZXIuICAqLworc3RhdGljIHZvaWQKK2V4Y2VwdGlvbl9oYW5kbGVyIChpbnQgc2lnKQoreworICBleGl0ICgxKTsKK30KK3N0YXRpYyB2b2lkCitub2NyYXNoX2luaXQgKHZvaWQpCit7CisjaWZkZWYgU0lHU0VHVgorICBzaWduYWwgKFNJR1NFR1YsIGV4Y2VwdGlvbl9oYW5kbGVyKTsKKyNlbmRpZgorI2lmZGVmIFNJR0JVUworICBzaWduYWwgKFNJR0JVUywgZXhjZXB0aW9uX2hhbmRsZXIpOworI2VuZGlmCit9CisjZW5kaWYKKworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KK3N0YXRpYyBpbnQKK3N0cmlzbmFuIChjb25zdCBjaGFyICpzdHJpbmcsIHNpemVfdCBzdGFydF9pbmRleCwgc2l6ZV90IGVuZF9pbmRleCkKK3sKKyAgaWYgKHN0YXJ0X2luZGV4IDwgZW5kX2luZGV4KQorICAgIHsKKyAgICAgIGlmIChzdHJpbmdbc3RhcnRfaW5kZXhdID09ICctJykKKyAgICAgICAgc3RhcnRfaW5kZXgrKzsKKyAgICAgIGlmIChzdGFydF9pbmRleCArIDMgPD0gZW5kX2luZGV4CisgICAgICAgICAgJiYgbWVtY21wIChzdHJpbmcgKyBzdGFydF9pbmRleCwgIm5hbiIsIDMpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBzdGFydF9pbmRleCArPSAzOworICAgICAgICAgIGlmIChzdGFydF9pbmRleCA9PSBlbmRfaW5kZXgKKyAgICAgICAgICAgICAgfHwgKHN0cmluZ1tzdGFydF9pbmRleF0gPT0gJygnICYmIHN0cmluZ1tlbmRfaW5kZXggLSAxXSA9PSAnKScpKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICB9CisgIHJldHVybiAwOworfQorc3RhdGljIGNoYXIgYnVmWzEwMDAwXTsKK3N0YXRpYyBsb25nIGRvdWJsZSB6ZXJvTCA9IDAuMEw7CitpbnQgbWFpbiAoKQoreworICBpbnQgcmVzdWx0ID0gMDsKKyAgbm9jcmFzaF9pbml0KCk7CisgIGlmIChzcHJpbnRmIChidWYsICIlTGYiLCAxLjBMIC8gemVyb0wpIDwgMAorICAgICAgfHwgKHN0cmNtcCAoYnVmLCAiaW5mIikgIT0gMCAmJiBzdHJjbXAgKGJ1ZiwgImluZmluaXR5IikgIT0gMCkpCisgICAgcmVzdWx0IHw9IDE7CisgIGlmIChzcHJpbnRmIChidWYsICIlTGYiLCAtMS4wTCAvIHplcm9MKSA8IDAKKyAgICAgIHx8IChzdHJjbXAgKGJ1ZiwgIi1pbmYiKSAhPSAwICYmIHN0cmNtcCAoYnVmLCAiLWluZmluaXR5IikgIT0gMCkpCisgICAgcmVzdWx0IHw9IDE7CisgIGlmIChzcHJpbnRmIChidWYsICIlTGYiLCB6ZXJvTCAvIHplcm9MKSA8IDAKKyAgICAgIHx8ICFzdHJpc25hbiAoYnVmLCAwLCBzdHJsZW4gKGJ1ZikpKQorICAgIHJlc3VsdCB8PSAxOworICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxlIiwgMS4wTCAvIHplcm9MKSA8IDAKKyAgICAgIHx8IChzdHJjbXAgKGJ1ZiwgImluZiIpICE9IDAgJiYgc3RyY21wIChidWYsICJpbmZpbml0eSIpICE9IDApKQorICAgIHJlc3VsdCB8PSAxOworICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxlIiwgLTEuMEwgLyB6ZXJvTCkgPCAwCisgICAgICB8fCAoc3RyY21wIChidWYsICItaW5mIikgIT0gMCAmJiBzdHJjbXAgKGJ1ZiwgIi1pbmZpbml0eSIpICE9IDApKQorICAgIHJlc3VsdCB8PSAxOworICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxlIiwgemVyb0wgLyB6ZXJvTCkgPCAwCisgICAgICB8fCAhc3RyaXNuYW4gKGJ1ZiwgMCwgc3RybGVuIChidWYpKSkKKyAgICByZXN1bHQgfD0gMTsKKyAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZyIsIDEuMEwgLyB6ZXJvTCkgPCAwCisgICAgICB8fCAoc3RyY21wIChidWYsICJpbmYiKSAhPSAwICYmIHN0cmNtcCAoYnVmLCAiaW5maW5pdHkiKSAhPSAwKSkKKyAgICByZXN1bHQgfD0gMTsKKyAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZyIsIC0xLjBMIC8gemVyb0wpIDwgMAorICAgICAgfHwgKHN0cmNtcCAoYnVmLCAiLWluZiIpICE9IDAgJiYgc3RyY21wIChidWYsICItaW5maW5pdHkiKSAhPSAwKSkKKyAgICByZXN1bHQgfD0gMTsKKyAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZyIsIHplcm9MIC8gemVyb0wpIDwgMAorICAgICAgfHwgIXN0cmlzbmFuIChidWYsIDAsIHN0cmxlbiAoYnVmKSkpCisgICAgcmVzdWx0IHw9IDE7CisjaWYgQ0hFQ0tfUFJJTlRGX1NBRkUgJiYgKChkZWZpbmVkIF9faWE2NCAmJiBMREJMX01BTlRfRElHID09IDY0KSB8fCAoZGVmaW5lZCBfX3g4Nl82NF9fIHx8IGRlZmluZWQgX19hbWQ2NF9fKSB8fCAoZGVmaW5lZCBfX2kzODYgfHwgZGVmaW5lZCBfX2kzODZfXyB8fCBkZWZpbmVkIF9JMzg2IHx8IGRlZmluZWQgX01fSVg4NiB8fCBkZWZpbmVkIF9YODZfKSkgJiYgIUhBVkVfU0FNRV9MT05HX0RPVUJMRV9BU19ET1VCTEUKKy8qIFJlcHJlc2VudGF0aW9uIG9mIGFuIDgwLWJpdCAnbG9uZyBkb3VibGUnIGFzIGFuIGluaXRpYWxpemVyIGZvciBhIHNlcXVlbmNlCisgICBvZiAndW5zaWduZWQgaW50JyB3b3Jkcy4gICovCisjIGlmZGVmIFdPUkRTX0JJR0VORElBTgorIyAgZGVmaW5lIExEQkw4MF9XT1JEUyhleHBvbmVudCxtYW50aGksbWFudGxvKSBcCisgICAgIHsgKCh1bnNpZ25lZCBpbnQpIChleHBvbmVudCkgPDwgMTYpIHwgKCh1bnNpZ25lZCBpbnQpIChtYW50aGkpID4+IDE2KSwgXAorICAgICAgICgodW5zaWduZWQgaW50KSAobWFudGhpKSA8PCAxNikgfCAodW5zaWduZWQgaW50KSAobWFudGxvKSA+PiAxNiksICAgIFwKKyAgICAgICAodW5zaWduZWQgaW50KSAobWFudGxvKSA8PCAxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0KKyMgZWxzZQorIyAgZGVmaW5lIExEQkw4MF9XT1JEUyhleHBvbmVudCxtYW50aGksbWFudGxvKSBcCisgICAgIHsgbWFudGxvLCBtYW50aGksIGV4cG9uZW50IH0KKyMgZW5kaWYKKyAgeyAvKiBRdWlldCBOYU4uICAqLworICAgIHN0YXRpYyB1bmlvbiB7IHVuc2lnbmVkIGludCB3b3JkWzRdOyBsb25nIGRvdWJsZSB2YWx1ZTsgfSB4ID0KKyAgICAgIHsgTERCTDgwX1dPUkRTICgweEZGRkYsIDB4QzMzMzMzMzMsIDB4MDAwMDAwMDApIH07CisgICAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZiIsIHgudmFsdWUpIDwgMAorICAgICAgICB8fCAhc3RyaXNuYW4gKGJ1ZiwgMCwgc3RybGVuIChidWYpKSkKKyAgICAgIHJlc3VsdCB8PSAyOworICAgIGlmIChzcHJpbnRmIChidWYsICIlTGUiLCB4LnZhbHVlKSA8IDAKKyAgICAgICAgfHwgIXN0cmlzbmFuIChidWYsIDAsIHN0cmxlbiAoYnVmKSkpCisgICAgICByZXN1bHQgfD0gMjsKKyAgICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxnIiwgeC52YWx1ZSkgPCAwCisgICAgICAgIHx8ICFzdHJpc25hbiAoYnVmLCAwLCBzdHJsZW4gKGJ1ZikpKQorICAgICAgcmVzdWx0IHw9IDI7CisgIH0KKyAgeworICAgIC8qIFNpZ25hbGxpbmcgTmFOLiAgKi8KKyAgICBzdGF0aWMgdW5pb24geyB1bnNpZ25lZCBpbnQgd29yZFs0XTsgbG9uZyBkb3VibGUgdmFsdWU7IH0geCA9CisgICAgICB7IExEQkw4MF9XT1JEUyAoMHhGRkZGLCAweDgzMzMzMzMzLCAweDAwMDAwMDAwKSB9OworICAgIGlmIChzcHJpbnRmIChidWYsICIlTGYiLCB4LnZhbHVlKSA8IDAKKyAgICAgICAgfHwgIXN0cmlzbmFuIChidWYsIDAsIHN0cmxlbiAoYnVmKSkpCisgICAgICByZXN1bHQgfD0gMjsKKyAgICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxlIiwgeC52YWx1ZSkgPCAwCisgICAgICAgIHx8ICFzdHJpc25hbiAoYnVmLCAwLCBzdHJsZW4gKGJ1ZikpKQorICAgICAgcmVzdWx0IHw9IDI7CisgICAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZyIsIHgudmFsdWUpIDwgMAorICAgICAgICB8fCAhc3RyaXNuYW4gKGJ1ZiwgMCwgc3RybGVuIChidWYpKSkKKyAgICAgIHJlc3VsdCB8PSAyOworICB9CisgIHsgLyogUHNldWRvLU5hTi4gICovCisgICAgc3RhdGljIHVuaW9uIHsgdW5zaWduZWQgaW50IHdvcmRbNF07IGxvbmcgZG91YmxlIHZhbHVlOyB9IHggPQorICAgICAgeyBMREJMODBfV09SRFMgKDB4RkZGRiwgMHg0MDAwMDAwMSwgMHgwMDAwMDAwMCkgfTsKKyAgICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxmIiwgeC52YWx1ZSkgPCAwCisgICAgICAgIHx8ICFzdHJpc25hbiAoYnVmLCAwLCBzdHJsZW4gKGJ1ZikpKQorICAgICAgcmVzdWx0IHw9IDQ7CisgICAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZSIsIHgudmFsdWUpIDwgMAorICAgICAgICB8fCAhc3RyaXNuYW4gKGJ1ZiwgMCwgc3RybGVuIChidWYpKSkKKyAgICAgIHJlc3VsdCB8PSA0OworICAgIGlmIChzcHJpbnRmIChidWYsICIlTGciLCB4LnZhbHVlKSA8IDAKKyAgICAgICAgfHwgIXN0cmlzbmFuIChidWYsIDAsIHN0cmxlbiAoYnVmKSkpCisgICAgICByZXN1bHQgfD0gNDsKKyAgfQorICB7IC8qIFBzZXVkby1JbmZpbml0eS4gICovCisgICAgc3RhdGljIHVuaW9uIHsgdW5zaWduZWQgaW50IHdvcmRbNF07IGxvbmcgZG91YmxlIHZhbHVlOyB9IHggPQorICAgICAgeyBMREJMODBfV09SRFMgKDB4RkZGRiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCkgfTsKKyAgICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxmIiwgeC52YWx1ZSkgPCAwCisgICAgICAgIHx8ICFzdHJpc25hbiAoYnVmLCAwLCBzdHJsZW4gKGJ1ZikpKQorICAgICAgcmVzdWx0IHw9IDg7CisgICAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZSIsIHgudmFsdWUpIDwgMAorICAgICAgICB8fCAhc3RyaXNuYW4gKGJ1ZiwgMCwgc3RybGVuIChidWYpKSkKKyAgICAgIHJlc3VsdCB8PSA4OworICAgIGlmIChzcHJpbnRmIChidWYsICIlTGciLCB4LnZhbHVlKSA8IDAKKyAgICAgICAgfHwgIXN0cmlzbmFuIChidWYsIDAsIHN0cmxlbiAoYnVmKSkpCisgICAgICByZXN1bHQgfD0gODsKKyAgfQorICB7IC8qIFBzZXVkby1aZXJvLiAgKi8KKyAgICBzdGF0aWMgdW5pb24geyB1bnNpZ25lZCBpbnQgd29yZFs0XTsgbG9uZyBkb3VibGUgdmFsdWU7IH0geCA9CisgICAgICB7IExEQkw4MF9XT1JEUyAoMHg0MDA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwKSB9OworICAgIGlmIChzcHJpbnRmIChidWYsICIlTGYiLCB4LnZhbHVlKSA8IDAKKyAgICAgICAgfHwgIXN0cmlzbmFuIChidWYsIDAsIHN0cmxlbiAoYnVmKSkpCisgICAgICByZXN1bHQgfD0gMTY7CisgICAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZSIsIHgudmFsdWUpIDwgMAorICAgICAgICB8fCAhc3RyaXNuYW4gKGJ1ZiwgMCwgc3RybGVuIChidWYpKSkKKyAgICAgIHJlc3VsdCB8PSAxNjsKKyAgICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxnIiwgeC52YWx1ZSkgPCAwCisgICAgICAgIHx8ICFzdHJpc25hbiAoYnVmLCAwLCBzdHJsZW4gKGJ1ZikpKQorICAgICAgcmVzdWx0IHw9IDE2OworICB9CisgIHsgLyogVW5ub3JtYWxpemVkIG51bWJlci4gICovCisgICAgc3RhdGljIHVuaW9uIHsgdW5zaWduZWQgaW50IHdvcmRbNF07IGxvbmcgZG91YmxlIHZhbHVlOyB9IHggPQorICAgICAgeyBMREJMODBfV09SRFMgKDB4NDAwMCwgMHg2MzMzMzMzMywgMHgwMDAwMDAwMCkgfTsKKyAgICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxmIiwgeC52YWx1ZSkgPCAwCisgICAgICAgIHx8ICFzdHJpc25hbiAoYnVmLCAwLCBzdHJsZW4gKGJ1ZikpKQorICAgICAgcmVzdWx0IHw9IDMyOworICAgIGlmIChzcHJpbnRmIChidWYsICIlTGUiLCB4LnZhbHVlKSA8IDAKKyAgICAgICAgfHwgIXN0cmlzbmFuIChidWYsIDAsIHN0cmxlbiAoYnVmKSkpCisgICAgICByZXN1bHQgfD0gMzI7CisgICAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZyIsIHgudmFsdWUpIDwgMAorICAgICAgICB8fCAhc3RyaXNuYW4gKGJ1ZiwgMCwgc3RybGVuIChidWYpKSkKKyAgICAgIHJlc3VsdCB8PSAzMjsKKyAgfQorICB7IC8qIFBzZXVkby1EZW5vcm1hbC4gICovCisgICAgc3RhdGljIHVuaW9uIHsgdW5zaWduZWQgaW50IHdvcmRbNF07IGxvbmcgZG91YmxlIHZhbHVlOyB9IHggPQorICAgICAgeyBMREJMODBfV09SRFMgKDB4MDAwMCwgMHg4MzMzMzMzMywgMHgwMDAwMDAwMCkgfTsKKyAgICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxmIiwgeC52YWx1ZSkgPCAwCisgICAgICAgIHx8ICFzdHJpc25hbiAoYnVmLCAwLCBzdHJsZW4gKGJ1ZikpKQorICAgICAgcmVzdWx0IHw9IDY0OworICAgIGlmIChzcHJpbnRmIChidWYsICIlTGUiLCB4LnZhbHVlKSA8IDAKKyAgICAgICAgfHwgIXN0cmlzbmFuIChidWYsIDAsIHN0cmxlbiAoYnVmKSkpCisgICAgICByZXN1bHQgfD0gNjQ7CisgICAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZyIsIHgudmFsdWUpIDwgMAorICAgICAgICB8fCAhc3RyaXNuYW4gKGJ1ZiwgMCwgc3RybGVuIChidWYpKSkKKyAgICAgIHJlc3VsdCB8PSA2NDsKKyAgfQorI2VuZGlmCisgIHJldHVybiByZXN1bHQ7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZV9sb25nX2RvdWJsZT15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGVfbG9uZ19kb3VibGU9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlX2xvbmdfZG91YmxlIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGVfbG9uZ19kb3VibGUiID4mNjsgfQorICAgICAgOzsKKyAgICAqKQorICAgICAgZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGVfbG9uZ19kb3VibGU9ImlycmVsZXZhbnQiCisgICAgICA7OworICBlc2FjCisKKworCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgdGhlICdhJyBhbmQgJ0EnIGRpcmVjdGl2ZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgdGhlICdhJyBhbmQgJ0EnIGRpcmVjdGl2ZXMuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2ErOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisKKyAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gZ2xpYmMgPj0gMi41IHN5c3RlbXMuCisgICAgICAgICAgICotZ251KikKKyAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICAgICAgICAgICNpbmNsdWRlIDxmZWF0dXJlcy5oPgorICAgICAgICAgICAgICAgI2lmZGVmIF9fR05VX0xJQlJBUllfXworICAgICAgICAgICAgICAgICNpZiAoKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSA1KSB8fCAoX19HTElCQ19fID4gMikpICYmICFkZWZpbmVkIF9fVUNMSUJDX18KKyAgICAgICAgICAgICAgICAgQloyOTA4CisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAjZW5kaWYKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiQloyOTA4IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfYT0iZ3Vlc3NpbmcgeWVzIgorZWxzZQorICBnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfYT0iZ3Vlc3Npbmcgbm8iCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiB3ZSBkb24ndCBrbm93LCBhc3N1bWUgdGhlIHdvcnN0LgorICAgICAgICAgICAqKSAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2E9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICBlc2FjCisKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KK3N0YXRpYyBjaGFyIGJ1ZlsxMDBdOworc3RhdGljIGRvdWJsZSB6ZXJvID0gMC4wOworaW50IG1haW4gKCkKK3sKKyAgaW50IHJlc3VsdCA9IDA7CisgIGlmIChzcHJpbnRmIChidWYsICIlYSAlZCIsIDMuMTQxNjAxNTYyNSwgMzMsIDQ0LCA1NSkgPCAwCisgICAgICB8fCAoc3RyY21wIChidWYsICIweDEuOTIycCsxIDMzIikgIT0gMAorICAgICAgICAgICYmIHN0cmNtcCAoYnVmLCAiMHgzLjI0NHArMCAzMyIpICE9IDAKKyAgICAgICAgICAmJiBzdHJjbXAgKGJ1ZiwgIjB4Ni40ODhwLTEgMzMiKSAhPSAwCisgICAgICAgICAgJiYgc3RyY21wIChidWYsICIweGMuOTFwLTIgMzMiKSAhPSAwKSkKKyAgICByZXN1bHQgfD0gMTsKKyAgaWYgKHNwcmludGYgKGJ1ZiwgIiVBICVkIiwgLTMuMTQxNjAxNTYyNSwgMzMsIDQ0LCA1NSkgPCAwCisgICAgICB8fCAoc3RyY21wIChidWYsICItMFgxLjkyMlArMSAzMyIpICE9IDAKKyAgICAgICAgICAmJiBzdHJjbXAgKGJ1ZiwgIi0wWDMuMjQ0UCswIDMzIikgIT0gMAorICAgICAgICAgICYmIHN0cmNtcCAoYnVmLCAiLTBYNi40ODhQLTEgMzMiKSAhPSAwCisgICAgICAgICAgJiYgc3RyY21wIChidWYsICItMFhDLjkxUC0yIDMzIikgIT0gMCkpCisgICAgcmVzdWx0IHw9IDI7CisgIC8qIFRoaXMgY2F0Y2hlcyBhIEZyZWVCU0QgNi4xIGJ1ZzogaXQgZG9lc24ndCByb3VuZC4gICovCisgIGlmIChzcHJpbnRmIChidWYsICIlLjJhICVkIiwgMS41MSwgMzMsIDQ0LCA1NSkgPCAwCisgICAgICB8fCAoc3RyY21wIChidWYsICIweDEuODNwKzAgMzMiKSAhPSAwCisgICAgICAgICAgJiYgc3RyY21wIChidWYsICIweDMuMDVwLTEgMzMiKSAhPSAwCisgICAgICAgICAgJiYgc3RyY21wIChidWYsICIweDYuMGFwLTIgMzMiKSAhPSAwCisgICAgICAgICAgJiYgc3RyY21wIChidWYsICIweGMuMTRwLTMgMzMiKSAhPSAwKSkKKyAgICByZXN1bHQgfD0gNDsKKyAgLyogVGhpcyBjYXRjaGVzIGEgRnJlZUJTRCA2LjEgYnVnLiAgU2VlCisgICAgIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWdudWxpYi8yMDA3LTA0L21zZzAwMTA3Lmh0bWw+ICovCisgIGlmIChzcHJpbnRmIChidWYsICIlMDEwYSAlZCIsIDEuMCAvIHplcm8sIDMzLCA0NCwgNTUpIDwgMAorICAgICAgfHwgYnVmWzBdID09ICcwJykKKyAgICByZXN1bHQgfD0gODsKKyAgLyogVGhpcyBjYXRjaGVzIGEgTWFjIE9TIFggMTAuMy45IChEYXJ3aW4gNy45KSBidWcuICAqLworICBpZiAoc3ByaW50ZiAoYnVmLCAiJS4xYSIsIDEuOTk5KSA8IDAKKyAgICAgIHx8IChzdHJjbXAgKGJ1ZiwgIjB4MS4wcCsxIikgIT0gMAorICAgICAgICAgICYmIHN0cmNtcCAoYnVmLCAiMHgyLjBwKzAiKSAhPSAwCisgICAgICAgICAgJiYgc3RyY21wIChidWYsICIweDQuMHAtMSIpICE9IDAKKyAgICAgICAgICAmJiBzdHJjbXAgKGJ1ZiwgIjB4OC4wcC0yIikgIT0gMCkpCisgICAgcmVzdWx0IHw9IDE2OworICAvKiBUaGlzIGNhdGNoZXMgdGhlIHNhbWUgTWFjIE9TIFggMTAuMy45IChEYXJ3aW4gNy45KSBidWcgYW5kIGFsc28gYQorICAgICBnbGliYyAyLjQgYnVnIDxodHRwOi8vc291cmNld2FyZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTI5MDg+LiAgKi8KKyAgaWYgKHNwcmludGYgKGJ1ZiwgIiUuMUxhIiwgMS45OTlMKSA8IDAKKyAgICAgIHx8IChzdHJjbXAgKGJ1ZiwgIjB4MS4wcCsxIikgIT0gMAorICAgICAgICAgICYmIHN0cmNtcCAoYnVmLCAiMHgyLjBwKzAiKSAhPSAwCisgICAgICAgICAgJiYgc3RyY21wIChidWYsICIweDQuMHAtMSIpICE9IDAKKyAgICAgICAgICAmJiBzdHJjbXAgKGJ1ZiwgIjB4OC4wcC0yIikgIT0gMCkpCisgICAgcmVzdWx0IHw9IDMyOworICByZXR1cm4gcmVzdWx0OworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2E9eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9hPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfYSIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9hIiA+JjY7IH0KKworCisKKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHByaW50ZiBzdXBwb3J0cyB0aGUgJ0YnIGRpcmVjdGl2ZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHByaW50ZiBzdXBwb3J0cyB0aGUgJ0YnIGRpcmVjdGl2ZS4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfZis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKworICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBnbGliYyBzeXN0ZW1zLgorICAgICAgICAgICAqLWdudSopICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2Y9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gRnJlZUJTRCA+PSA2LgorICAgICAgICAgICBmcmVlYnNkWzEtNV0qKSAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2Y9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIGZyZWVic2QqIHwga2ZyZWVic2QqKSBnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfZj0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBNYWMgT1MgWCA+PSAxMC4zLgorICAgICAgICAgICBkYXJ3aW5bMS02XS4qKSAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2Y9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIGRhcndpbiopICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfZj0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBTb2xhcmlzID49IDIuMTAuCisgICAgICAgICAgIHNvbGFyaXMyLlsxLTldWzAtOV0qKSBnbF9jdl9mdW5jX3ByaW50Zl9zaXplc19jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICBzb2xhcmlzKikgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfc2l6ZXNfYzk5PSJndWVzc2luZyBubyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiB3ZSBkb24ndCBrbm93LCBhc3N1bWUgdGhlIHdvcnN0LgorICAgICAgICAgICAqKSAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2Y9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICBlc2FjCisKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KK3N0YXRpYyBjaGFyIGJ1ZlsxMDBdOworc3RhdGljIGRvdWJsZSB6ZXJvID0gMC4wOworaW50IG1haW4gKCkKK3sKKyAgaW50IHJlc3VsdCA9IDA7CisgIGlmIChzcHJpbnRmIChidWYsICIlRiAlZCIsIDEyMzQ1NjcuMCwgMzMsIDQ0LCA1NSkgPCAwCisgICAgICB8fCBzdHJjbXAgKGJ1ZiwgIjEyMzQ1NjcuMDAwMDAwIDMzIikgIT0gMCkKKyAgICByZXN1bHQgfD0gMTsKKyAgaWYgKHNwcmludGYgKGJ1ZiwgIiVGIiwgMS4wIC8gemVybykgPCAwCisgICAgICB8fCAoc3RyY21wIChidWYsICJJTkYiKSAhPSAwICYmIHN0cmNtcCAoYnVmLCAiSU5GSU5JVFkiKSAhPSAwKSkKKyAgICByZXN1bHQgfD0gMjsKKyAgLyogVGhpcyBjYXRjaGVzIGEgQ3lnd2luIDEuNS54IGJ1Zy4gICovCisgIGlmIChzcHJpbnRmIChidWYsICIlLkYiLCAxMjM0LjApIDwgMAorICAgICAgfHwgc3RyY21wIChidWYsICIxMjM0IikgIT0gMCkKKyAgICByZXN1bHQgfD0gNDsKKyAgcmV0dXJuIHJlc3VsdDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9mPXllcworZWxzZQorICBnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfZj1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2YiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfZiIgPiY2OyB9CisKKworCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgdGhlICduJyBkaXJlY3RpdmUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgdGhlICduJyBkaXJlY3RpdmUuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX24rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisKKyAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICBtaW5ndyopIGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9uPSJndWVzc2luZyBubyI7OworICAgICAgICAgICAqKSAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9uPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgIGVzYWMKKworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmZGVmIF9NU0NfVkVSCisvKiBTZWUgcGFnZSBhYm91dCAiUGFyYW1ldGVyIFZhbGlkYXRpb24iIG9uIG1zZG4ubWljcm9zb2Z0LmNvbS4gICovCitzdGF0aWMgdm9pZCBjZGVjbAoraW52YWxpZF9wYXJhbWV0ZXJfaGFuZGxlciAoY29uc3Qgd2NoYXJfdCAqZXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKmZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqZmlsZSwgdW5zaWduZWQgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50cHRyX3QgZHVtbXkpCit7CisgIGV4aXQgKDEpOworfQorI2VuZGlmCitzdGF0aWMgY2hhciBmbXRzdHJpbmdbMTBdOworc3RhdGljIGNoYXIgYnVmWzEwMF07CitpbnQgbWFpbiAoKQoreworICBpbnQgY291bnQgPSAtMTsKKyNpZmRlZiBfTVNDX1ZFUgorICBfc2V0X2ludmFsaWRfcGFyYW1ldGVyX2hhbmRsZXIgKGludmFsaWRfcGFyYW1ldGVyX2hhbmRsZXIpOworI2VuZGlmCisgIC8qIENvcHkgdGhlIGZvcm1hdCBzdHJpbmcuICBTb21lIHN5c3RlbXMgKGdsaWJjIHdpdGggX0ZPUlRJRllfU09VUkNFPTIpCisgICAgIHN1cHBvcnQgJW4gaW4gZm9ybWF0IHN0cmluZ3MgaW4gcmVhZC1vbmx5IG1lbW9yeSBidXQgbm90IGluIHdyaXRhYmxlCisgICAgIG1lbW9yeS4gICovCisgIHN0cmNweSAoZm10c3RyaW5nLCAiJWQgJW4iKTsKKyAgaWYgKHNwcmludGYgKGJ1ZiwgZm10c3RyaW5nLCAxMjMsICZjb3VudCwgMzMsIDQ0LCA1NSkgPCAwCisgICAgICB8fCBzdHJjbXAgKGJ1ZiwgIjEyMyAiKSAhPSAwCisgICAgICB8fCBjb3VudCAhPSA0KQorICAgIHJldHVybiAxOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9uPXllcworZWxzZQorICBnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbj1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX24iID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbiIgPiY2OyB9CisKKworCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgdGhlICdscycgZGlyZWN0aXZlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgcHJpbnRmIHN1cHBvcnRzIHRoZSAnbHMnIGRpcmVjdGl2ZS4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbHMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisKKyAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICBvcGVuYnNkKikgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9scz0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgaXJpeCopICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbHM9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIHNvbGFyaXMqKSAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2xzPSJndWVzc2luZyBubyI7OworICAgICAgICAgICBjeWd3aW4qKSAgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9scz0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgYmVvcyogfCBoYWlrdSopICBnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbHM9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICopICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2xzPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgIGVzYWMKKworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUKKyAgIDx3Y2hhci5oPi4KKyAgIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZQorICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KK2ludCBtYWluICgpCit7CisgIGludCByZXN1bHQgPSAwOworICBjaGFyIGJ1ZlsxMDBdOworICAvKiBUZXN0IHdoZXRoZXIgJWxzIHdvcmtzIGF0IGFsbC4KKyAgICAgVGhpcyB0ZXN0IGZhaWxzIG9uIE9wZW5CU0QgNC4wLCBJUklYIDYuNSwgU29sYXJpcyAyLjYsIEhhaWt1LCBidXQgbm90IG9uCisgICAgIEN5Z3dpbiAxLjUuICAqLworICB7CisgICAgc3RhdGljIGNvbnN0IHdjaGFyX3Qgd3N0cmluZ1tdID0geyAnYScsICdiJywgJ2MnLCAwIH07CisgICAgYnVmWzBdID0gJ1wwJzsKKyAgICBpZiAoc3ByaW50ZiAoYnVmLCAiJWxzIiwgd3N0cmluZykgPCAwCisgICAgICAgIHx8IHN0cmNtcCAoYnVmLCAiYWJjIikgIT0gMCkKKyAgICAgIHJlc3VsdCB8PSAxOworICB9CisgIC8qIFRoaXMgdGVzdCBmYWlscyBvbiBJUklYIDYuNSwgU29sYXJpcyAyLjYsIEN5Z3dpbiAxLjUsIEhhaWt1ICh3aXRoIGFuCisgICAgIGFzc2VydGlvbiBmYWlsdXJlIGluc2lkZSBsaWJjKSwgYnV0IG5vdCBvbiBPcGVuQlNEIDQuMC4gICovCisgIHsKKyAgICBzdGF0aWMgY29uc3Qgd2NoYXJfdCB3c3RyaW5nW10gPSB7ICdhJywgMCB9OworICAgIGJ1ZlswXSA9ICdcMCc7CisgICAgaWYgKHNwcmludGYgKGJ1ZiwgIiVscyIsIHdzdHJpbmcpIDwgMAorICAgICAgICB8fCBzdHJjbXAgKGJ1ZiwgImEiKSAhPSAwKQorICAgICAgcmVzdWx0IHw9IDI7CisgIH0KKyAgLyogVGVzdCB3aGV0aGVyIHByZWNpc2lvbnMgaW4gJWxzIGFyZSBzdXBwb3J0ZWQgYXMgc3BlY2lmaWVkIGluIElTTyBDIDk5CisgICAgIHNlY3Rpb24gNy4xOS42LjE6CisgICAgICAgIklmIGEgcHJlY2lzaW9uIGlzIHNwZWNpZmllZCwgbm8gbW9yZSB0aGFuIHRoYXQgbWFueSBieXRlcyBhcmUgd3JpdHRlbgorICAgICAgICAoaW5jbHVkaW5nIHNoaWZ0IHNlcXVlbmNlcywgaWYgYW55KSwgYW5kIHRoZSBhcnJheSBzaGFsbCBjb250YWluIGEKKyAgICAgICAgbnVsbCB3aWRlIGNoYXJhY3RlciBpZiwgdG8gZXF1YWwgdGhlIG11bHRpYnl0ZSBjaGFyYWN0ZXIgc2VxdWVuY2UKKyAgICAgICAgbGVuZ3RoIGdpdmVuIGJ5IHRoZSBwcmVjaXNpb24sIHRoZSBmdW5jdGlvbiB3b3VsZCBuZWVkIHRvIGFjY2VzcyBhCisgICAgICAgIHdpZGUgY2hhcmFjdGVyIG9uZSBwYXN0IHRoZSBlbmQgb2YgdGhlIGFycmF5LiIKKyAgICAgVGhpcyB0ZXN0IGZhaWxzIG9uIFNvbGFyaXMgMTAuICAqLworICB7CisgICAgc3RhdGljIGNvbnN0IHdjaGFyX3Qgd3N0cmluZ1tdID0geyAnYScsICdiJywgKHdjaGFyX3QpIDB4ZmRmZGZkZmQsIDAgfTsKKyAgICBidWZbMF0gPSAnXDAnOworICAgIGlmIChzcHJpbnRmIChidWYsICIlLjJscyIsIHdzdHJpbmcpIDwgMAorICAgICAgICB8fCBzdHJjbXAgKGJ1ZiwgImFiIikgIT0gMCkKKyAgICAgIHJlc3VsdCB8PSA4OworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbHM9eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9scz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2xzIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2xzIiA+JjY7IH0KKworCisKKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHByaW50ZiBzdXBwb3J0cyBQT1NJWC9YU0kgZm9ybWF0IHN0cmluZ3Mgd2l0aCBwb3NpdGlvbnMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgUE9TSVgvWFNJIGZvcm1hdCBzdHJpbmdzIHdpdGggcG9zaXRpb25zLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfcHJpbnRmX3Bvc2l0aW9ucys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKworICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgIG5ldGJzZFsxLTNdKiB8IG5ldGJzZGVsZlsxLTNdKiB8IG5ldGJzZGFvdXRbMS0zXSogfCBuZXRic2Rjb2ZmWzEtM10qKQorICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX3Bvc2l0aW9ucz0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgYmVvcyopICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9wb3NpdGlvbnM9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIG1pbmd3KiB8IHB3KikgZ2xfY3ZfZnVuY19wcmludGZfcG9zaXRpb25zPSJndWVzc2luZyBubyI7OworICAgICAgICAgICAqKSAgICAgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX3Bvc2l0aW9ucz0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICBlc2FjCisKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKy8qIFRoZSBzdHJpbmcgIiUyJGQgJTEkZCIsIHdpdGggZG9sbGFyIGNoYXJhY3RlcnMgcHJvdGVjdGVkIGZyb20gdGhlIHNoZWxsJ3MKKyAgIGRvbGxhciBleHBhbnNpb24gKHBvc3NpYmx5IGFuIGF1dG9jb25mIGJ1ZykuICAqLworc3RhdGljIGNoYXIgZm9ybWF0W10gPSB7ICclJywgJzInLCAnJCcsICdkJywgJyAnLCAnJScsICcxJywgJyQnLCAnZCcsICdcMCcgfTsKK3N0YXRpYyBjaGFyIGJ1ZlsxMDBdOworaW50IG1haW4gKCkKK3sKKyAgc3ByaW50ZiAoYnVmLCBmb3JtYXQsIDMzLCA1NSk7CisgIHJldHVybiAoc3RyY21wIChidWYsICI1NSAzMyIpICE9IDApOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19wcmludGZfcG9zaXRpb25zPXllcworZWxzZQorICBnbF9jdl9mdW5jX3ByaW50Zl9wb3NpdGlvbnM9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfcHJpbnRmX3Bvc2l0aW9ucyIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfcHJpbnRmX3Bvc2l0aW9ucyIgPiY2OyB9CisKKworCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgdGhlIGdyb3VwaW5nIGZsYWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgdGhlIGdyb3VwaW5nIGZsYWcuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19wcmludGZfZmxhZ19ncm91cGluZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKworICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgIGN5Z3dpbiopICAgICAgZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19ncm91cGluZz0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgbmV0YnNkKikgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2dyb3VwaW5nPSJndWVzc2luZyBubyI7OworICAgICAgICAgICBtaW5ndyogfCBwdyopIGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfZ3JvdXBpbmc9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICopICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19ncm91cGluZz0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICBlc2FjCisKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KK3N0YXRpYyBjaGFyIGJ1ZlsxMDBdOworaW50IG1haW4gKCkKK3sKKyAgaWYgKHNwcmludGYgKGJ1ZiwgIiUnZCAlZCIsIDEyMzQ1NjcsIDk5KSA8IDAKKyAgICAgIHx8IGJ1ZltzdHJsZW4gKGJ1ZikgLSAxXSAhPSAnOScpCisgICAgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19ncm91cGluZz15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19ncm91cGluZz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19ncm91cGluZyIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfZ3JvdXBpbmciID4mNjsgfQorCisKKworICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgcHJpbnRmIHN1cHBvcnRzIHRoZSBsZWZ0LWFkanVzdCBmbGFnIGNvcnJlY3RseSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHByaW50ZiBzdXBwb3J0cyB0aGUgbGVmdC1hZGp1c3QgZmxhZyBjb3JyZWN0bHkuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19wcmludGZfZmxhZ19sZWZ0YWRqdXN0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorCisgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gSFAtVVggMTEuCisgICAgICAgICAgIGhwdXgxMSopIGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfbGVmdGFkanVzdD0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICMgR3Vlc3Mgbm8gb24gSFAtVVggMTAgYW5kIG9sZGVyLgorICAgICAgICAgICBocHV4KikgICBnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2xlZnRhZGp1c3Q9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG90aGVyd2lzZS4KKyAgICAgICAgICAgKikgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19sZWZ0YWRqdXN0PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgIGVzYWMKKworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorc3RhdGljIGNoYXIgYnVmWzEwMF07CitpbnQgbWFpbiAoKQoreworICAvKiBDaGVjayB0aGF0IGEgJy0nIGZsYWcgaXMgbm90IGFubmloaWxhdGVkIGJ5IGEgbmVnYXRpdmUgd2lkdGguICAqLworICBpZiAoc3ByaW50ZiAoYnVmLCAiYSUtKnNjIiwgLTMsICJiIikgPCAwCisgICAgICB8fCBzdHJjbXAgKGJ1ZiwgImFiICBjIikgIT0gMCkKKyAgICByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2xlZnRhZGp1c3Q9eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfbGVmdGFkanVzdD1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19sZWZ0YWRqdXN0IiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19sZWZ0YWRqdXN0IiA+JjY7IH0KKworCisKKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHByaW50ZiBzdXBwb3J0cyB0aGUgemVybyBmbGFnIGNvcnJlY3RseSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHByaW50ZiBzdXBwb3J0cyB0aGUgemVybyBmbGFnIGNvcnJlY3RseS4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX3plcm8rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisKKyAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIGdsaWJjIHN5c3RlbXMuCisgICAgICAgICAgICotZ251KikgZ2xfY3ZfZnVuY19wcmludGZfZmxhZ196ZXJvPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBCZU9TLgorICAgICAgICAgICBiZW9zKikgIGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfemVybz0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgIyBJZiB3ZSBkb24ndCBrbm93LCBhc3N1bWUgdGhlIHdvcnN0LgorICAgICAgICAgICAqKSAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfemVybz0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgIGVzYWMKKworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorc3RhdGljIGNoYXIgYnVmWzEwMF07CitzdGF0aWMgZG91YmxlIHplcm8gPSAwLjA7CitpbnQgbWFpbiAoKQoreworICBpZiAoc3ByaW50ZiAoYnVmLCAiJTAxMGYiLCAxLjAgLyB6ZXJvLCAzMywgNDQsIDU1KSA8IDAKKyAgICAgIHx8IChzdHJjbXAgKGJ1ZiwgIiAgICAgICBpbmYiKSAhPSAwCisgICAgICAgICAgJiYgc3RyY21wIChidWYsICIgIGluZmluaXR5IikgIT0gMCkpCisgICAgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19wcmludGZfZmxhZ196ZXJvPXllcworZWxzZQorICBnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX3plcm89bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfemVybyIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfemVybyIgPiY2OyB9CisKKworCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgbGFyZ2UgcHJlY2lzaW9ucyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHByaW50ZiBzdXBwb3J0cyBsYXJnZSBwcmVjaXNpb25zLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfcHJpbnRmX3ByZWNpc2lvbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKworICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICMgR3Vlc3Mgbm8gb25seSBvbiBTb2xhcmlzLCBuYXRpdmUgV2luZG93cywgYW5kIEJlT1Mgc3lzdGVtcy4KKyAgICAgICAgICAgc29sYXJpcyopICAgICBnbF9jdl9mdW5jX3ByaW50Zl9wcmVjaXNpb249Imd1ZXNzaW5nIG5vIiA7OworICAgICAgICAgICBtaW5ndyogfCBwdyopIGdsX2N2X2Z1bmNfcHJpbnRmX3ByZWNpc2lvbj0iZ3Vlc3Npbmcgbm8iIDs7CisgICAgICAgICAgIGJlb3MqKSAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfcHJlY2lzaW9uPSJndWVzc2luZyBubyIgOzsKKyAgICAgICAgICAgKikgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9wcmVjaXNpb249Imd1ZXNzaW5nIHllcyIgOzsKKyAgICAgICAgIGVzYWMKKworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorc3RhdGljIGNoYXIgYnVmWzUwMDBdOworaW50IG1haW4gKCkKK3sKKyAgaW50IHJlc3VsdCA9IDA7CisjaWZkZWYgX19CRU9TX18KKyAgLyogT24gQmVPUywgdGhpcyB3b3VsZCBjcmFzaCBhbmQgc2hvdyBhIGRpYWxvZyBib3guICBBdm9pZCB0aGUgY3Jhc2guICAqLworICByZXR1cm4gMTsKKyNlbmRpZgorICBpZiAoc3ByaW50ZiAoYnVmLCAiJS40MDAwZCAlZCIsIDEsIDMzLCA0NCkgPCA0MDAwICsgMykKKyAgICByZXN1bHQgfD0gMTsKKyAgaWYgKHNwcmludGYgKGJ1ZiwgIiUuNDAwMGYgJWQiLCAxLjAsIDMzLCA0NCkgPCA0MDAwICsgNSkKKyAgICByZXN1bHQgfD0gMjsKKyAgaWYgKHNwcmludGYgKGJ1ZiwgIiUuNTExZiAlZCIsIDEuMCwgMzMsIDQ0KSA8IDUxMSArIDUKKyAgICAgIHx8IGJ1ZlswXSAhPSAnMScpCisgICAgcmVzdWx0IHw9IDQ7CisgIGlmIChzcHJpbnRmIChidWYsICIlLjk5OWYgJWQiLCAxLjAsIDMzLCA0NCkgPCA5OTkgKyA1CisgICAgICB8fCBidWZbMF0gIT0gJzEnKQorICAgIHJlc3VsdCB8PSA0OworICByZXR1cm4gcmVzdWx0OworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19wcmludGZfcHJlY2lzaW9uPXllcworZWxzZQorICBnbF9jdl9mdW5jX3ByaW50Zl9wcmVjaXNpb249bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfcHJpbnRmX3ByZWNpc2lvbiIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfcHJpbnRmX3ByZWNpc2lvbiIgPiY2OyB9CisKKworICAgIGdsX2N2X2NfbXVsdGlhcmNoPW5vCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZm5kZWYgX19BUFBMRV9DQ19fCisgICAgICAgICBub3QgYSB1bml2ZXJzYWwgY2FwYWJsZSBjb21waWxlcgorICAgICAgICAjZW5kaWYKKyAgICAgICAgdHlwZWRlZiBpbnQgZHVtbXk7CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICAgICAgICAgICBhcmNoPQorICAgICBwcmV2PQorICAgICBmb3Igd29yZCBpbiAke0NDfSAke0NGTEFHU30gJHtDUFBGTEFHU30gJHtMREZMQUdTfTsgZG8KKyAgICAgICBpZiB0ZXN0IC1uICIkcHJldiI7IHRoZW4KKyAgICAgICAgIGNhc2UgJHdvcmQgaW4KKyAgICAgICAgICAgaT84NiB8IHg4Nl82NCB8IHBwYyB8IHBwYzY0KQorICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRhcmNoIiB8fCB0ZXN0ICIkYXJjaCIgPSAiJHdvcmQiOyB0aGVuCisgICAgICAgICAgICAgICBhcmNoPSIkd29yZCIKKyAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICBnbF9jdl9jX211bHRpYXJjaD15ZXMKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIDs7CisgICAgICAgICBlc2FjCisgICAgICAgICBwcmV2PQorICAgICAgIGVsc2UKKyAgICAgICAgIGlmIHRlc3QgIngkd29yZCIgPSAieC1hcmNoIjsgdGhlbgorICAgICAgICAgICBwcmV2PWFyY2gKKyAgICAgICAgIGZpCisgICAgICAgZmkKKyAgICAgZG9uZQorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgJGdsX2N2X2NfbXVsdGlhcmNoID0geWVzOyB0aGVuCisgICAgQVBQTEVfVU5JVkVSU0FMX0JVSUxEPTEKKyAgZWxzZQorICAgIEFQUExFX1VOSVZFUlNBTF9CVUlMRD0wCisgIGZpCisKKworCisKKworICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgcHJpbnRmIHN1cnZpdmVzIG91dC1vZi1tZW1vcnkgY29uZGl0aW9ucyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHByaW50ZiBzdXJ2aXZlcyBvdXQtb2YtbWVtb3J5IGNvbmRpdGlvbnMuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19wcmludGZfZW5vbWVtKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtPSJndWVzc2luZyBubyIKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm87IHRoZW4KKyAgICAgICAgaWYgdGVzdCAkQVBQTEVfVU5JVkVSU0FMX0JVSUxEID0gMDsgdGhlbgorICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWYgZGVmaW5lZCBfX01BQ0hfXyAmJiBkZWZpbmVkIF9fQVBQTEVfXworLyogQXZvaWQgYSBjcmFzaCBvbiBNYWMgT1MgWC4gICovCisjaW5jbHVkZSA8bWFjaC9tYWNoLmg+CisjaW5jbHVkZSA8bWFjaC9tYWNoX2Vycm9yLmg+CisjaW5jbHVkZSA8bWFjaC90aHJlYWRfc3RhdHVzLmg+CisjaW5jbHVkZSA8bWFjaC9leGNlcHRpb24uaD4KKyNpbmNsdWRlIDxtYWNoL3Rhc2suaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisvKiBUaGUgZXhjZXB0aW9uIHBvcnQgb24gd2hpY2ggb3VyIHRocmVhZCBsaXN0ZW5zLiAgKi8KK3N0YXRpYyBtYWNoX3BvcnRfdCBvdXJfZXhjZXB0aW9uX3BvcnQ7CisvKiBUaGUgbWFpbiBmdW5jdGlvbiBvZiB0aGUgdGhyZWFkIGxpc3RlbmluZyBmb3IgZXhjZXB0aW9ucyBvZiB0eXBlCisgICBFWENfQkFEX0FDQ0VTUy4gICovCitzdGF0aWMgdm9pZCAqCittYWNoX2V4Y2VwdGlvbl90aHJlYWQgKHZvaWQgKmFyZykKK3sKKyAgLyogQnVmZmVyIGZvciBhIG1lc3NhZ2UgdG8gYmUgcmVjZWl2ZWQuICAqLworICBzdHJ1Y3QgeworICAgIG1hY2hfbXNnX2hlYWRlcl90IGhlYWQ7CisgICAgbWFjaF9tc2dfYm9keV90IG1zZ2hfYm9keTsKKyAgICBjaGFyIGRhdGExMDI0OworICB9IG1zZzsKKyAgbWFjaF9tc2dfcmV0dXJuX3QgcmV0dmFsOworICAvKiBXYWl0IGZvciBhIG1lc3NhZ2Ugb24gdGhlIGV4Y2VwdGlvbiBwb3J0LiAgKi8KKyAgcmV0dmFsID0gbWFjaF9tc2cgKCZtc2cuaGVhZCwgTUFDSF9SQ1ZfTVNHIHwgTUFDSF9SQ1ZfTEFSR0UsIDAsIHNpemVvZiAobXNnKSwKKyAgICAgICAgICAgICAgICAgICAgIG91cl9leGNlcHRpb25fcG9ydCwgTUFDSF9NU0dfVElNRU9VVF9OT05FLCBNQUNIX1BPUlRfTlVMTCk7CisgIGlmIChyZXR2YWwgIT0gTUFDSF9NU0dfU1VDQ0VTUykKKyAgICBhYm9ydCAoKTsKKyAgZXhpdCAoMSk7Cit9CitzdGF0aWMgdm9pZAorbm9jcmFzaF9pbml0ICh2b2lkKQoreworICBtYWNoX3BvcnRfdCBzZWxmID0gbWFjaF90YXNrX3NlbGYgKCk7CisgIC8qIEFsbG9jYXRlIGEgcG9ydCBvbiB3aGljaCB0aGUgdGhyZWFkIHNoYWxsIGxpc3RlbiBmb3IgZXhjZXB0aW9ucy4gICovCisgIGlmIChtYWNoX3BvcnRfYWxsb2NhdGUgKHNlbGYsIE1BQ0hfUE9SVF9SSUdIVF9SRUNFSVZFLCAmb3VyX2V4Y2VwdGlvbl9wb3J0KQorICAgICAgPT0gS0VSTl9TVUNDRVNTKSB7CisgICAgLyogU2VlIGh0dHA6Ly93ZWIubWl0LmVkdS9kYXJ3aW4vc3JjL21vZHVsZXMveG51L29zZm1rL21hbi9tYWNoX3BvcnRfaW5zZXJ0X3JpZ2h0Lmh0bWwuICAqLworICAgIGlmIChtYWNoX3BvcnRfaW5zZXJ0X3JpZ2h0IChzZWxmLCBvdXJfZXhjZXB0aW9uX3BvcnQsIG91cl9leGNlcHRpb25fcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkQpCisgICAgICAgID09IEtFUk5fU1VDQ0VTUykgeworICAgICAgLyogVGhlIGV4Y2VwdGlvbnMgd2Ugd2FudCB0byBjYXRjaC4gIE9ubHkgRVhDX0JBRF9BQ0NFU1MgaXMgaW50ZXJlc3RpbmcKKyAgICAgICAgIGZvciB1cy4gICovCisgICAgICBleGNlcHRpb25fbWFza190IG1hc2sgPSBFWENfTUFTS19CQURfQUNDRVNTOworICAgICAgLyogQ3JlYXRlIHRoZSB0aHJlYWQgbGlzdGVuaW5nIG9uIHRoZSBleGNlcHRpb24gcG9ydC4gICovCisgICAgICBwdGhyZWFkX2F0dHJfdCBhdHRyOworICAgICAgcHRocmVhZF90IHRocmVhZDsKKyAgICAgIGlmIChwdGhyZWFkX2F0dHJfaW5pdCAoJmF0dHIpID09IDAKKyAgICAgICAgICAmJiBwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUgKCZhdHRyLCBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRCkgPT0gMAorICAgICAgICAgICYmIHB0aHJlYWRfY3JlYXRlICgmdGhyZWFkLCAmYXR0ciwgbWFjaF9leGNlcHRpb25fdGhyZWFkLCBOVUxMKSA9PSAwKSB7CisgICAgICAgIHB0aHJlYWRfYXR0cl9kZXN0cm95ICgmYXR0cik7CisgICAgICAgIC8qIFJlcGxhY2UgdGhlIGV4Y2VwdGlvbiBwb3J0IGluZm8gZm9yIHRoZXNlIGV4Y2VwdGlvbnMgd2l0aCBvdXIgb3duLgorICAgICAgICAgICBOb3RlIHRoYXQgd2UgcmVwbGFjZSB0aGUgZXhjZXB0aW9uIHBvcnQgZm9yIHRoZSBlbnRpcmUgdGFzaywgbm90IG9ubHkKKyAgICAgICAgICAgZm9yIGEgcGFydGljdWxhciB0aHJlYWQuICBUaGlzIGhhcyB0aGUgZWZmZWN0IHRoYXQgd2hlbiBvdXIgZXhjZXB0aW9uCisgICAgICAgICAgIHBvcnQgZ2V0cyB0aGUgbWVzc2FnZSwgdGhlIHRocmVhZCBzcGVjaWZpYyBleGNlcHRpb24gcG9ydCBoYXMgYWxyZWFkeQorICAgICAgICAgICBiZWVuIGFza2VkLCBhbmQgd2UgZG9uJ3QgbmVlZCB0byBib3RoZXIgYWJvdXQgaXQuCisgICAgICAgICAgIFNlZSBodHRwOi8vd2ViLm1pdC5lZHUvZGFyd2luL3NyYy9tb2R1bGVzL3hudS9vc2Ztay9tYW4vdGFza19zZXRfZXhjZXB0aW9uX3BvcnRzLmh0bWwuICAqLworICAgICAgICB0YXNrX3NldF9leGNlcHRpb25fcG9ydHMgKHNlbGYsIG1hc2ssIG91cl9leGNlcHRpb25fcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWENFUFRJT05fREVGQVVMVCwgTUFDSElORV9USFJFQURfU1RBVEUpOworICAgICAgfQorICAgIH0KKyAgfQorfQorI2VsaWYgKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXworLyogQXZvaWQgYSBjcmFzaCBvbiBuYXRpdmUgV2luZG93cy4gICovCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d2luZXJyb3IuaD4KK3N0YXRpYyBMT05HIFdJTkFQSQorZXhjZXB0aW9uX2ZpbHRlciAoRVhDRVBUSU9OX1BPSU5URVJTICpFeGNlcHRpb25JbmZvKQoreworICBzd2l0Y2ggKEV4Y2VwdGlvbkluZm8tPkV4Y2VwdGlvblJlY29yZC0+RXhjZXB0aW9uQ29kZSkKKyAgICB7CisgICAgY2FzZSBFWENFUFRJT05fQUNDRVNTX1ZJT0xBVElPTjoKKyAgICBjYXNlIEVYQ0VQVElPTl9JTl9QQUdFX0VSUk9SOgorICAgIGNhc2UgRVhDRVBUSU9OX1NUQUNLX09WRVJGTE9XOgorICAgIGNhc2UgRVhDRVBUSU9OX0dVQVJEX1BBR0U6CisgICAgY2FzZSBFWENFUFRJT05fUFJJVl9JTlNUUlVDVElPTjoKKyAgICBjYXNlIEVYQ0VQVElPTl9JTExFR0FMX0lOU1RSVUNUSU9OOgorICAgIGNhc2UgRVhDRVBUSU9OX0RBVEFUWVBFX01JU0FMSUdOTUVOVDoKKyAgICBjYXNlIEVYQ0VQVElPTl9BUlJBWV9CT1VORFNfRVhDRUVERUQ6CisgICAgY2FzZSBFWENFUFRJT05fTk9OQ09OVElOVUFCTEVfRVhDRVBUSU9OOgorICAgICAgZXhpdCAoMSk7CisgICAgfQorICByZXR1cm4gRVhDRVBUSU9OX0NPTlRJTlVFX1NFQVJDSDsKK30KK3N0YXRpYyB2b2lkCitub2NyYXNoX2luaXQgKHZvaWQpCit7CisgIFNldFVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlciAoKExQVE9QX0xFVkVMX0VYQ0VQVElPTl9GSUxURVIpIGV4Y2VwdGlvbl9maWx0ZXIpOworfQorI2Vsc2UKKy8qIEF2b2lkIGEgY3Jhc2ggb24gUE9TSVggc3lzdGVtcy4gICovCisjaW5jbHVkZSA8c2lnbmFsLmg+CisvKiBBIFBPU0lYIHNpZ25hbCBoYW5kbGVyLiAgKi8KK3N0YXRpYyB2b2lkCitleGNlcHRpb25faGFuZGxlciAoaW50IHNpZykKK3sKKyAgZXhpdCAoMSk7Cit9CitzdGF0aWMgdm9pZAorbm9jcmFzaF9pbml0ICh2b2lkKQoreworI2lmZGVmIFNJR1NFR1YKKyAgc2lnbmFsIChTSUdTRUdWLCBleGNlcHRpb25faGFuZGxlcik7CisjZW5kaWYKKyNpZmRlZiBTSUdCVVMKKyAgc2lnbmFsIChTSUdCVVMsIGV4Y2VwdGlvbl9oYW5kbGVyKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KK2ludCBtYWluKCkKK3sKKyAgc3RydWN0IHJsaW1pdCBsaW1pdDsKKyAgaW50IHJldDsKKyAgbm9jcmFzaF9pbml0ICgpOworICAvKiBTb21lIHByaW50ZiBpbXBsZW1lbnRhdGlvbnMgYWxsb2NhdGUgdGVtcG9yYXJ5IHNwYWNlIHdpdGggbWFsbG9jLiAgKi8KKyAgLyogT24gQlNEIHN5c3RlbXMsIG1hbGxvYygpIGlzIGxpbWl0ZWQgYnkgUkxJTUlUX0RBVEEuICAqLworI2lmZGVmIFJMSU1JVF9EQVRBCisgIGlmIChnZXRybGltaXQgKFJMSU1JVF9EQVRBLCAmbGltaXQpIDwgMCkKKyAgICByZXR1cm4gNzc7CisgIGlmIChsaW1pdC5ybGltX21heCA9PSBSTElNX0lORklOSVRZIHx8IGxpbWl0LnJsaW1fbWF4ID4gNTAwMDAwMCkKKyAgICBsaW1pdC5ybGltX21heCA9IDUwMDAwMDA7CisgIGxpbWl0LnJsaW1fY3VyID0gbGltaXQucmxpbV9tYXg7CisgIGlmIChzZXRybGltaXQgKFJMSU1JVF9EQVRBLCAmbGltaXQpIDwgMCkKKyAgICByZXR1cm4gNzc7CisjZW5kaWYKKyAgLyogT24gTGludXggc3lzdGVtcywgbWFsbG9jKCkgaXMgbGltaXRlZCBieSBSTElNSVRfQVMuICAqLworI2lmZGVmIFJMSU1JVF9BUworICBpZiAoZ2V0cmxpbWl0IChSTElNSVRfQVMsICZsaW1pdCkgPCAwKQorICAgIHJldHVybiA3NzsKKyAgaWYgKGxpbWl0LnJsaW1fbWF4ID09IFJMSU1fSU5GSU5JVFkgfHwgbGltaXQucmxpbV9tYXggPiA1MDAwMDAwKQorICAgIGxpbWl0LnJsaW1fbWF4ID0gNTAwMDAwMDsKKyAgbGltaXQucmxpbV9jdXIgPSBsaW1pdC5ybGltX21heDsKKyAgaWYgKHNldHJsaW1pdCAoUkxJTUlUX0FTLCAmbGltaXQpIDwgMCkKKyAgICByZXR1cm4gNzc7CisjZW5kaWYKKyAgLyogU29tZSBwcmludGYgaW1wbGVtZW50YXRpb25zIGFsbG9jYXRlIHRlbXBvcmFyeSBzcGFjZSBvbiB0aGUgc3RhY2suICAqLworI2lmZGVmIFJMSU1JVF9TVEFDSworICBpZiAoZ2V0cmxpbWl0IChSTElNSVRfU1RBQ0ssICZsaW1pdCkgPCAwKQorICAgIHJldHVybiA3NzsKKyAgaWYgKGxpbWl0LnJsaW1fbWF4ID09IFJMSU1fSU5GSU5JVFkgfHwgbGltaXQucmxpbV9tYXggPiA1MDAwMDAwKQorICAgIGxpbWl0LnJsaW1fbWF4ID0gNTAwMDAwMDsKKyAgbGltaXQucmxpbV9jdXIgPSBsaW1pdC5ybGltX21heDsKKyAgaWYgKHNldHJsaW1pdCAoUkxJTUlUX1NUQUNLLCAmbGltaXQpIDwgMCkKKyAgICByZXR1cm4gNzc7CisjZW5kaWYKKyAgcmV0ID0gcHJpbnRmICgiJS41MDAwMDAwZiIsIDEuMCk7CisgIHJldHVybiAhKHJldCA9PSA1MDAwMDAyIHx8IChyZXQgPCAwICYmIGVycm5vID09IEVOT01FTSkpOworfQorCitfQUNFT0YKKyAgICAgICAgICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICAgICAgICAoLi9jb25mdGVzdCAyPiY1CisgICAgICAgICAgICAgcmVzdWx0PSQ/CisgICAgICAgICAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJHJlc3VsdCIgPiY1CisgICAgICAgICAgICAgaWYgdGVzdCAkcmVzdWx0ICE9IDAgJiYgdGVzdCAkcmVzdWx0ICE9IDc3OyB0aGVuIHJlc3VsdD0xOyBmaQorICAgICAgICAgICAgIGV4aXQgJHJlc3VsdAorICAgICAgICAgICAgKSA+L2Rldi9udWxsIDI+L2Rldi9udWxsCisgICAgICAgICAgICBjYXNlICQ/IGluCisgICAgICAgICAgICAgIDApIGdsX2N2X2Z1bmNfcHJpbnRmX2Vub21lbT0ieWVzIiA7OworICAgICAgICAgICAgICA3NykgZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtPSJndWVzc2luZyBubyIgOzsKKyAgICAgICAgICAgICAgKikgZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtPSJubyIgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9lbm9tZW09Imd1ZXNzaW5nIG5vIgorICAgICAgICAgIGZpCisgICAgICAgICAgcm0gLWZyIGNvbmZ0ZXN0KgorICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtPSJndWVzc2luZyBubyIKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtIiA9ICJndWVzc2luZyBubyI7IHRoZW4KKyAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIGdsaWJjIHN5c3RlbXMuCisgICAgICAgICAgKi1nbnUqKSAgIGdsX2N2X2Z1bmNfcHJpbnRmX2Vub21lbT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIFNvbGFyaXMuCisgICAgICAgICAgc29sYXJpcyopIGdsX2N2X2Z1bmNfcHJpbnRmX2Vub21lbT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIEFJWC4KKyAgICAgICAgICBhaXgqKSAgICAgZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gSFAtVVgvaHBwYS4KKyAgICAgICAgICBocHV4KikgICAgY2FzZSAiJGhvc3RfY3B1IiBpbgorICAgICAgICAgICAgICAgICAgICAgIGhwcGEqKSBnbF9jdl9mdW5jX3ByaW50Zl9lbm9tZW09Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICopICAgICBnbF9jdl9mdW5jX3ByaW50Zl9lbm9tZW09Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gSVJJWC4KKyAgICAgICAgICBpcml4KikgICAgZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gT1NGLzEuCisgICAgICAgICAgb3NmKikgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2Vub21lbT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIEJlT1MuCisgICAgICAgICAgYmVvcyopICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2Vub21lbT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIEhhaWt1LgorICAgICAgICAgIGhhaWt1KikgICBnbF9jdl9mdW5jX3ByaW50Zl9lbm9tZW09Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAjIElmIHdlIGRvbid0IGtub3csIGFzc3VtZSB0aGUgd29yc3QuCisgICAgICAgICAgKikgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2Vub21lbT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgZXNhYworICAgICAgZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtIiA+JjY7IH0KKworCisKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2xvbmdfZG91YmxlIiBpbgorICAgICp5ZXMpCisgICAgICA7OworICAgICopCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0xPTkdfRE9VQkxFIDEiID4+Y29uZmRlZnMuaAorCisgICAgICA7OworICBlc2FjCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdW5zaWduZWQgbG9uZyBsb25nIGludCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgdW5zaWduZWQgbG9uZyBsb25nIGludC4uLiAiID4mNjsgfQoraWYgJHthY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQ9eWVzCisgICAgIGlmIHRlc3QgIngke2FjX2N2X3Byb2dfY2NfYzk5LW5vfSIgPSB4bm87IHRoZW4KKyAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgLyogRm9yIG5vdywgZG8gbm90IHRlc3QgdGhlIHByZXByb2Nlc3NvcjsgYXMgb2YgMjAwNyB0aGVyZSBhcmUgdG9vIG1hbnkKKyAgICAgICAgIGltcGxlbWVudGF0aW9ucyB3aXRoIGJyb2tlbiBwcmVwcm9jZXNzb3JzLiAgUGVyaGFwcyB0aGlzIGNhbgorICAgICAgICAgYmUgcmV2aXNpdGVkIGluIDIwMTIuICBJbiB0aGUgbWVhbnRpbWUsIGNvZGUgc2hvdWxkIG5vdCBleHBlY3QKKyAgICAgICAgICNpZiB0byB3b3JrIHdpdGggbGl0ZXJhbHMgd2lkZXIgdGhhbiAzMiBiaXRzLiAgKi8KKyAgICAgIC8qIFRlc3QgbGl0ZXJhbHMuICAqLworICAgICAgbG9uZyBsb25nIGludCBsbCA9IDkyMjMzNzIwMzY4NTQ3NzU4MDdsbDsKKyAgICAgIGxvbmcgbG9uZyBpbnQgbmxsID0gLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTDsKKyAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWxsID0gMTg0NDY3NDQwNzM3MDk1NTE2MTVVTEw7CisgICAgICAvKiBUZXN0IGNvbnN0YW50IGV4cHJlc3Npb25zLiAgICovCisgICAgICB0eXBlZGVmIGludCBhWygoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCA8IDAgJiYgMCA8IDkyMjMzNzIwMzY4NTQ3NzU4MDdsbCkKKyAgICAgICAgICAgICAgICAgICAgID8gMSA6IC0xKV07CisgICAgICB0eXBlZGVmIGludCBiWygxODQ0Njc0NDA3MzcwOTU1MTYxNVVMTCA8PSAodW5zaWduZWQgbG9uZyBsb25nIGludCkgLTEKKyAgICAgICAgICAgICAgICAgICAgID8gMSA6IC0xKV07CisgICAgICBpbnQgaSA9IDYzOworaW50CittYWluICgpCit7CisvKiBUZXN0IGF2YWlsYWJpbGl0eSBvZiBydW50aW1lIHJvdXRpbmVzIGZvciBzaGlmdCBhbmQgZGl2aXNpb24uICAqLworICAgICAgbG9uZyBsb25nIGludCBsbG1heCA9IDkyMjMzNzIwMzY4NTQ3NzU4MDdsbDsKKyAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWxsbWF4ID0gMTg0NDY3NDQwNzM3MDk1NTE2MTV1bGw7CisgICAgICByZXR1cm4gKChsbCA8PCA2MykgfCAobGwgPj4gNjMpIHwgKGxsIDwgaSkgfCAobGwgPiBpKQorICAgICAgICAgICAgICB8IChsbG1heCAvIGxsKSB8IChsbG1heCAlIGxsKQorICAgICAgICAgICAgICB8ICh1bGwgPDwgNjMpIHwgKHVsbCA+PiA2MykgfCAodWxsIDw8IGkpIHwgKHVsbCA+PiBpKQorICAgICAgICAgICAgICB8ICh1bGxtYXggLyB1bGwpIHwgKHVsbG1heCAlIHVsbCkpOworICA7CisgIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50IiA+JjY7IH0KKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50ID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCAxIiA+PmNvbmZkZWZzLmgKKworICBmaQorCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsb25nIGxvbmcgaW50IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsb25nIGxvbmcgaW50Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3R5cGVfbG9uZ19sb25nX2ludCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2N2X3R5cGVfbG9uZ19sb25nX2ludD15ZXMKKyAgICAgIGlmIHRlc3QgIngke2FjX2N2X3Byb2dfY2NfYzk5LW5vfSIgPSB4bm87IHRoZW4KKyAgICAgICAgYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50PSRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQKKyAgICAgICAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50ID0geWVzOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICA6CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyAgICAgICAgICAgICAgICAgI2lmbmRlZiBMTE9OR19NQVgKKyAgICAgICAgICAgICAgICAgIyBkZWZpbmUgSEFMRiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICgxTEwgPDwgKHNpemVvZiAobG9uZyBsb25nIGludCkgKiBDSEFSX0JJVCAtIDIpKQorICAgICAgICAgICAgICAgICAjIGRlZmluZSBMTE9OR19NQVggKEhBTEYgLSAxICsgSEFMRikKKyAgICAgICAgICAgICAgICAgI2VuZGlmCitpbnQKK21haW4gKCkKK3sKK2xvbmcgbG9uZyBpbnQgbiA9IDE7CisgICAgICAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyA7IGkrKykKKyAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBsb25nIGxvbmcgaW50IG0gPSBuIDw8IGk7CisgICAgICAgICAgICAgICAgICAgICBpZiAobSA+PiBpICE9IG4pCisgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgICAgICAgaWYgKExMT05HX01BWCAvIDIgPCBtKQorICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBhY19jdl90eXBlX2xvbmdfbG9uZ19pbnQ9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgICAgICAgIGZpCisgICAgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50IiA+JjY7IH0KKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50ID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTE9OR19MT05HX0lOVCAxIiA+PmNvbmZkZWZzLmgKKworICBmaQorCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd2NoYXJfdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igd2NoYXJfdC4uLiAiID4mNjsgfQoraWYgJHtndF9jdl9jX3djaGFyX3QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisgICAgICAgICAgICB3Y2hhcl90IGZvbyA9ICh3Y2hhcl90KSdcMCc7CitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGd0X2N2X2Nfd2NoYXJfdD15ZXMKK2Vsc2UKKyAgZ3RfY3ZfY193Y2hhcl90PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRndF9jdl9jX3djaGFyX3QiID4mNQorJGFzX2VjaG8gIiRndF9jdl9jX3djaGFyX3QiID4mNjsgfQorICBpZiB0ZXN0ICRndF9jdl9jX3djaGFyX3QgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9XQ0hBUl9UIDEiID4+Y29uZmRlZnMuaAorCisgIGZpCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3aW50X3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdpbnRfdC4uLiAiID4mNjsgfQoraWYgJHtndF9jdl9jX3dpbnRfdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQorICAgPHdjaGFyLmg+LgorICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlIGluY2x1ZGVkCisgICBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorICAgICAgICAgICAgd2ludF90IGZvbyA9ICh3Y2hhcl90KSdcMCc7CitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGd0X2N2X2Nfd2ludF90PXllcworZWxzZQorICBndF9jdl9jX3dpbnRfdD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3ZfY193aW50X3QiID4mNQorJGFzX2VjaG8gIiRndF9jdl9jX3dpbnRfdCIgPiY2OyB9CisgIGlmIHRlc3QgJGd0X2N2X2Nfd2ludF90ID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfV0lOVF9UIDEiID4+Y29uZmRlZnMuaAorCisgIGZpCisKKworCisKKworICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfZmVhdHVyZXNfaCA9IHllczsgdGhlbgorICAgIEhBVkVfRkVBVFVSRVNfSD0xCisgIGVsc2UKKyAgICBIQVZFX0ZFQVRVUkVTX0g9MAorICBmaQorCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgaW50bWF4X3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGludG1heF90Li4uICIgPiY2OyB9CitpZiAke2d0X2N2X2NfaW50bWF4X3QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZiBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWAorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisjaWYgSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWAorI2luY2x1ZGUgPGludHR5cGVzLmg+CiAjZW5kaWYKIAogaW50CiBtYWluICgpCiB7Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKK2ludG1heF90IHggPSAtMTsgcmV0dXJuICF4OwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ3RfY3ZfY19pbnRtYXhfdD15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgZ3RfY3ZfY19pbnRtYXhfdD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3ZfY19pbnRtYXhfdCIgPiY1CiskYXNfZWNobyAiJGd0X2N2X2NfaW50bWF4X3QiID4mNjsgfQorICBpZiB0ZXN0ICRndF9jdl9jX2ludG1heF90ID0geWVzOyB0aGVuCiAKLWV2YWwgIiRhc19hY192YXI9bm8iCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0lOVE1BWF9UIDEiID4+Y29uZmRlZnMuaAorCisgIGVsc2UKKworICAgIHRlc3QgJGFjX2N2X3R5cGVfbG9uZ19sb25nX2ludCA9IHllcyBcCisgICAgICAmJiBhY190eXBlPSdsb25nIGxvbmcnIFwKKyAgICAgIHx8IGFjX3R5cGU9J2xvbmcnCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgaW50bWF4X3QgJGFjX3R5cGUKK19BQ0VPRgorCisgIGZpCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXJlIHRvIGZpbmQgdGhlIGV4cG9uZW50IGluIGEgJ2RvdWJsZSciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hlcmUgdG8gZmluZCB0aGUgZXhwb25lbnQgaW4gYSAnZG91YmxlJy4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9jY19kb3VibGVfZXhwYml0MCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2lmIGRlZmluZWQgYXJtIHx8IGRlZmluZWQgX19hcm0gfHwgZGVmaW5lZCBfX2FybV9fCisgIG1peGVkX2VuZGlhbm5lc3MKKyNlbmRpZgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJtaXhlZF9lbmRpYW5uZXNzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBnbF9jdl9jY19kb3VibGVfZXhwYml0MD0idW5rbm93biIKK2Vsc2UKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOgoraWYgJHthY19jdl9jX2JpZ2VuZGlhbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24KKyAgICAjIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSB1bml2ZXJzYWwgY29tcGlsZXIuCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmbmRlZiBfX0FQUExFX0NDX18KKwkgICAgICAgbm90IGEgdW5pdmVyc2FsIGNhcGFibGUgY29tcGlsZXIKKwkgICAgICNlbmRpZgorCSAgICAgdHlwZWRlZiBpbnQgZHVtbXk7CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisJIyBDaGVjayBmb3IgcG90ZW50aWFsIC1hcmNoIGZsYWdzLiAgSXQgaXMgbm90IHVuaXZlcnNhbCB1bmxlc3MKKwkjIHRoZXJlIGFyZSBhdCBsZWFzdCB0d28gLWFyY2ggZmxhZ3Mgd2l0aCBkaWZmZXJlbnQgdmFsdWVzLgorCWFjX2FyY2g9CisJYWNfcHJldj0KKwlmb3IgYWNfd29yZCBpbiAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1M7IGRvCisJIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorCSAgIGNhc2UgJGFjX3dvcmQgaW4KKwkgICAgIGk/ODYgfCB4ODZfNjQgfCBwcGMgfCBwcGM2NCkKKwkgICAgICAgaWYgdGVzdCAteiAiJGFjX2FyY2giIHx8IHRlc3QgIiRhY19hcmNoIiA9ICIkYWNfd29yZCI7IHRoZW4KKwkJIGFjX2FyY2g9JGFjX3dvcmQKKwkgICAgICAgZWxzZQorCQkgYWNfY3ZfY19iaWdlbmRpYW49dW5pdmVyc2FsCisJCSBicmVhaworCSAgICAgICBmaQorCSAgICAgICA7OworCSAgIGVzYWMKKwkgICBhY19wcmV2PQorCSBlbGlmIHRlc3QgIngkYWNfd29yZCIgPSAieC1hcmNoIjsgdGhlbgorCSAgIGFjX3ByZXY9YXJjaAorCSBmaQorICAgICAgIGRvbmUKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCisgICAgICAjIFNlZSBpZiBzeXMvcGFyYW0uaCBkZWZpbmVzIHRoZSBCWVRFX09SREVSIG1hY3JvLgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCSAgICAgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorCitpbnQKK21haW4gKCkKK3sKKyNpZiAhIChkZWZpbmVkIEJZVEVfT1JERVIgJiYgZGVmaW5lZCBCSUdfRU5ESUFOIFwKKwkJICAgICAmJiBkZWZpbmVkIExJVFRMRV9FTkRJQU4gJiYgQllURV9PUkRFUiAmJiBCSUdfRU5ESUFOIFwKKwkJICAgICAmJiBMSVRUTEVfRU5ESUFOKQorCSAgICAgIGJvZ3VzIGVuZGlhbiBtYWNyb3MKKwkgICAgICNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIyBJdCBkb2VzOyBub3cgc2VlIHdoZXRoZXIgaXQgZGVmaW5lZCB0byBCSUdfRU5ESUFOIG9yIG5vdC4KKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCQkjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisKK2ludAorbWFpbiAoKQoreworI2lmIEJZVEVfT1JERVIgIT0gQklHX0VORElBTgorCQkgbm90IGJpZyBlbmRpYW4KKwkJI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKK2Vsc2UKKyAgYWNfY3ZfY19iaWdlbmRpYW49bm8KIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBmaQorICAgIGlmIHRlc3QgJGFjX2N2X2NfYmlnZW5kaWFuID0gdW5rbm93bjsgdGhlbgorICAgICAgIyBTZWUgaWYgPGxpbWl0cy5oPiBkZWZpbmVzIF9MSVRUTEVfRU5ESUFOIG9yIF9CSUdfRU5ESUFOIChlLmcuLCBTb2xhcmlzKS4KKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworaW50CittYWluICgpCit7CisjaWYgISAoZGVmaW5lZCBfTElUVExFX0VORElBTiB8fCBkZWZpbmVkIF9CSUdfRU5ESUFOKQorCSAgICAgIGJvZ3VzIGVuZGlhbiBtYWNyb3MKKwkgICAgICNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIyBJdCBkb2VzOyBub3cgc2VlIHdoZXRoZXIgaXQgZGVmaW5lZCB0byBfQklHX0VORElBTiBvciBub3QuCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworaW50CittYWluICgpCit7CisjaWZuZGVmIF9CSUdfRU5ESUFOCisJCSBub3QgYmlnIGVuZGlhbgorCQkjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2NfYmlnZW5kaWFuPXllcworZWxzZQorICBhY19jdl9jX2JpZ2VuZGlhbj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpCisgICAgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCisgICAgICAjIENvbXBpbGUgYSB0ZXN0IHByb2dyYW0uCisgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgICMgVHJ5IHRvIGd1ZXNzIGJ5IGdyZXBwaW5nIHZhbHVlcyBmcm9tIGFuIG9iamVjdCBmaWxlLgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCitzaG9ydCBpbnQgYXNjaWlfbW1bXSA9CisJCSAgeyAweDQyNDksIDB4NDc2NSwgMHg2RTQ0LCAweDY5NjEsIDB4NkU1MywgMHg3OTUzLCAwIH07CisJCXNob3J0IGludCBhc2NpaV9paVtdID0KKwkJICB7IDB4Njk0QywgMHg1NDU0LCAweDY1NkMsIDB4NkU0NSwgMHg2OTQ0LCAweDZFNjEsIDAgfTsKKwkJaW50IHVzZV9hc2NpaSAoaW50IGkpIHsKKwkJICByZXR1cm4gYXNjaWlfbW1baV0gKyBhc2NpaV9paVtpXTsKKwkJfQorCQlzaG9ydCBpbnQgZWJjZGljX2lpW10gPQorCQkgIHsgMHg4OUQzLCAweEUzRTMsIDB4ODU5MywgMHg5NUM1LCAweDg5QzQsIDB4OTU4MSwgMCB9OworCQlzaG9ydCBpbnQgZWJjZGljX21tW10gPQorCQkgIHsgMHhDMkM5LCAweEM3ODUsIDB4OTVDNCwgMHg4OTgxLCAweDk1RTIsIDB4QThFMiwgMCB9OworCQlpbnQgdXNlX2ViY2RpYyAoaW50IGkpIHsKKwkJICByZXR1cm4gZWJjZGljX21tW2ldICsgZWJjZGljX2lpW2ldOworCQl9CisJCWV4dGVybiBpbnQgZm9vOworCitpbnQKK21haW4gKCkKK3sKK3JldHVybiB1c2VfYXNjaWkgKGZvbykgPT0gdXNlX2ViY2RpYyAoZm9vKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBpZiBncmVwIEJJR2VuRGlhblN5UyBjb25mdGVzdC4kYWNfb2JqZXh0ID4vZGV2L251bGw7IHRoZW4KKwkgICAgICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKKwkgICAgZmkKKwkgICAgaWYgZ3JlcCBMaVRUbGVFbkRpYW4gY29uZnRlc3QuJGFjX29iamV4dCA+L2Rldi9udWxsIDsgdGhlbgorCSAgICAgIGlmIHRlc3QgIiRhY19jdl9jX2JpZ2VuZGlhbiIgPSB1bmtub3duOyB0aGVuCisJCWFjX2N2X2NfYmlnZW5kaWFuPW5vCisJICAgICAgZWxzZQorCQkjIGZpbmRpbmcgYm90aCBzdHJpbmdzIGlzIHVubGlrZWx5IHRvIGhhcHBlbiwgYnV0IHdobyBrbm93cz8KKwkJYWNfY3ZfY19iaWdlbmRpYW49dW5rbm93bgorCSAgICAgIGZpCisJICAgIGZpCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKKworCSAgICAgLyogQXJlIHdlIGxpdHRsZSBvciBiaWcgZW5kaWFuPyAgRnJvbSBIYXJiaXNvbiZTdGVlbGUuICAqLworCSAgICAgdW5pb24KKwkgICAgIHsKKwkgICAgICAgbG9uZyBpbnQgbDsKKwkgICAgICAgY2hhciBjW3NpemVvZiAobG9uZyBpbnQpXTsKKwkgICAgIH0gdTsKKwkgICAgIHUubCA9IDE7CisJICAgICByZXR1cm4gdS5jW3NpemVvZiAobG9uZyBpbnQpIC0gMV0gPT0gMTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfY19iaWdlbmRpYW49bm8KK2Vsc2UKKyAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworICAgIGZpCitmaQorOgorIGNhc2UgJGFjX2N2X2NfYmlnZW5kaWFuIGluICMoCisgICB5ZXMpCisgICAgIGdsX2N2X2NjX2RvdWJsZV9leHBiaXQwPSJ3b3JkIDAgYml0IDIwIjs7ICMoCisgICBubykKKyAgICAgZ2xfY3ZfY2NfZG91YmxlX2V4cGJpdDA9IndvcmQgMSBiaXQgMjAiIDs7ICMoCisgICB1bml2ZXJzYWwpCisKKyRhc19lY2hvICIjZGVmaW5lIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRCAxIiA+PmNvbmZkZWZzLmgKKworICAgICA7OyAjKAorICAgKikKKyAgICAgZ2xfY3ZfY2NfZG91YmxlX2V4cGJpdDA9InVua25vd24iIDs7CisgZXNhYworCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNkZWZpbmUgTldPUkRTIFwKKyAgKChzaXplb2YgKGRvdWJsZSkgKyBzaXplb2YgKHVuc2lnbmVkIGludCkgLSAxKSAvIHNpemVvZiAodW5zaWduZWQgaW50KSkKK3R5cGVkZWYgdW5pb24geyBkb3VibGUgdmFsdWU7IHVuc2lnbmVkIGludCB3b3JkW05XT1JEU107IH0gbWVtb3J5X2RvdWJsZTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb3JlZF93b3Jkc1tOV09SRFNdOworc3RhdGljIHVuc2lnbmVkIGludCBhbmRlZF93b3Jkc1tOV09SRFNdOworc3RhdGljIHZvaWQgYWRkX3RvX29yZWRfd29yZHMgKGRvdWJsZSB4KQoreworICBtZW1vcnlfZG91YmxlIG07CisgIHNpemVfdCBpOworICAvKiBDbGVhciBpdCBmaXJzdCwgaW4gY2FzZSBzaXplb2YgKGRvdWJsZSkgPCBzaXplb2YgKG1lbW9yeV9kb3VibGUpLiAgKi8KKyAgbWVtc2V0ICgmbSwgMCwgc2l6ZW9mIChtZW1vcnlfZG91YmxlKSk7CisgIG0udmFsdWUgPSB4OworICBmb3IgKGkgPSAwOyBpIDwgTldPUkRTOyBpKyspCisgICAgeworICAgICAgb3JlZF93b3Jkc1tpXSB8PSBtLndvcmRbaV07CisgICAgICBhbmRlZF93b3Jkc1tpXSAmPSBtLndvcmRbaV07CisgICAgfQorfQoraW50IG1haW4gKCkKK3sKKyAgc2l6ZV90IGo7CisgIEZJTEUgKmZwID0gZm9wZW4gKCJjb25mdGVzdC5vdXQiLCAidyIpOworICBpZiAoZnAgPT0gTlVMTCkKKyAgICByZXR1cm4gMTsKKyAgZm9yIChqID0gMDsgaiA8IE5XT1JEUzsgaisrKQorICAgIGFuZGVkX3dvcmRzW2pdID0gfiAodW5zaWduZWQgaW50KSAwOworICBhZGRfdG9fb3JlZF93b3JkcyAoMC4yNSk7CisgIGFkZF90b19vcmVkX3dvcmRzICgwLjUpOworICBhZGRfdG9fb3JlZF93b3JkcyAoMS4wKTsKKyAgYWRkX3RvX29yZWRfd29yZHMgKDIuMCk7CisgIGFkZF90b19vcmVkX3dvcmRzICg0LjApOworICAvKiBSZW1vdmUgYml0cyB0aGF0IGFyZSBjb21tb24gKGUuZy4gaWYgcmVwcmVzZW50YXRpb24gb2YgdGhlIGZpcnN0IG1hbnRpc3NhCisgICAgIGJpdCBpcyBleHBsaWNpdCkuICAqLworICBmb3IgKGogPSAwOyBqIDwgTldPUkRTOyBqKyspCisgICAgb3JlZF93b3Jkc1tqXSAmPSB+YW5kZWRfd29yZHNbal07CisgIC8qIE5vdyBmaW5kIHRoZSBub256ZXJvIHdvcmQuICAqLworICBmb3IgKGogPSAwOyBqIDwgTldPUkRTOyBqKyspCisgICAgaWYgKG9yZWRfd29yZHNbal0gIT0gMCkKKyAgICAgIGJyZWFrOworICBpZiAoaiA8IE5XT1JEUykKKyAgICB7CisgICAgICBzaXplX3QgaTsKKyAgICAgIGZvciAoaSA9IGogKyAxOyBpIDwgTldPUkRTOyBpKyspCisgICAgICAgIGlmIChvcmVkX3dvcmRzW2ldICE9IDApCisgICAgICAgICAgeworICAgICAgICAgICAgZnByaW50ZiAoZnAsICJ1bmtub3duIik7CisgICAgICAgICAgICByZXR1cm4gKGZjbG9zZSAoZnApICE9IDApOworICAgICAgICAgIH0KKyAgICAgIGZvciAoaSA9IDA7IDsgaSsrKQorICAgICAgICBpZiAoKG9yZWRfd29yZHNbal0gPj4gaSkgJiAxKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGZwcmludGYgKGZwLCAid29yZCAlZCBiaXQgJWQiLCAoaW50KSBqLCAoaW50KSBpKTsKKyAgICAgICAgICAgIHJldHVybiAoZmNsb3NlIChmcCkgIT0gMCk7CisgICAgICAgICAgfQorICAgIH0KKyAgZnByaW50ZiAoZnAsICJ1bmtub3duIik7CisgIHJldHVybiAoZmNsb3NlIChmcCkgIT0gMCk7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2NjX2RvdWJsZV9leHBiaXQwPWBjYXQgY29uZnRlc3Qub3V0YAorZWxzZQorICBnbF9jdl9jY19kb3VibGVfZXhwYml0MD0idW5rbm93biIKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgICAgICBybSAtZiBjb25mdGVzdC5vdXQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfY2NfZG91YmxlX2V4cGJpdDAiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9jY19kb3VibGVfZXhwYml0MCIgPiY2OyB9CisgIGNhc2UgIiRnbF9jdl9jY19kb3VibGVfZXhwYml0MCIgaW4KKyAgICB3b3JkKmJpdCopCisgICAgICB3b3JkPWBlY2hvICIkZ2xfY3ZfY2NfZG91YmxlX2V4cGJpdDAiIHwgc2VkIC1lICdzL3dvcmQgLy8nIC1lICdzLyBiaXQuKi8vJ2AKKyAgICAgIGJpdD1gZWNobyAiJGdsX2N2X2NjX2RvdWJsZV9leHBiaXQwIiB8IHNlZCAtZSAncy93b3JkLipiaXQgLy8nYAorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIERCTF9FWFBCSVQwX1dPUkQgJHdvcmQKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgREJMX0VYUEJJVDBfQklUICRiaXQKK19BQ0VPRgorCisgICAgICA7OworICBlc2FjCisKKworCisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBzbnByaW50ZiByZXR1cm5zIGEgYnl0ZSBjb3VudCBhcyBpbiBDOTkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBzbnByaW50ZiByZXR1cm5zIGEgYnl0ZSBjb3VudCBhcyBpbiBDOTkuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19zbnByaW50Zl9yZXR2YWxfYzk5Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorCisgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIGdsaWJjIHN5c3RlbXMuCisgICAgICAgICAgICotZ251KikgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3JldHZhbF9jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gRnJlZUJTRCA+PSA1LgorICAgICAgICAgICBmcmVlYnNkWzEtNF0qKSAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9yZXR2YWxfYzk5PSJndWVzc2luZyBubyI7OworICAgICAgICAgICBmcmVlYnNkKiB8IGtmcmVlYnNkKikgZ2xfY3ZfZnVuY19zbnByaW50Zl9yZXR2YWxfYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIE1hYyBPUyBYID49IDEwLjMuCisgICAgICAgICAgIGRhcndpblsxLTZdLiopICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3JldHZhbF9jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIGRhcndpbiopICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3JldHZhbF9jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gT3BlbkJTRCA+PSAzLjkuCisgICAgICAgICAgIG9wZW5ic2RbMS0yXS4qIHwgb3BlbmJzZDMuWzAtOF0gfCBvcGVuYnNkMy5bMC04XS4qKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9yZXR2YWxfYzk5PSJndWVzc2luZyBubyI7OworICAgICAgICAgICBvcGVuYnNkKikgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9yZXR2YWxfYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIFNvbGFyaXMgPj0gMi4xMC4KKyAgICAgICAgICAgc29sYXJpczIuWzEtOV1bMC05XSopIGdsX2N2X2Z1bmNfcHJpbnRmX3NpemVzX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgIHNvbGFyaXMqKSAgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9zaXplc19jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBBSVggPj0gNC4KKyAgICAgICAgICAgYWl4WzEtM10qKSAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfcmV0dmFsX2M5OT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgYWl4KikgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfcmV0dmFsX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBOZXRCU0QgPj0gMy4KKyAgICAgICAgICAgbmV0YnNkWzEtMl0qIHwgbmV0YnNkZWxmWzEtMl0qIHwgbmV0YnNkYW91dFsxLTJdKiB8IG5ldGJzZGNvZmZbMS0yXSopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3JldHZhbF9jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIG5ldGJzZCopICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3JldHZhbF9jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gQmVPUy4KKyAgICAgICAgICAgYmVvcyopICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfcmV0dmFsX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIHdlIGRvbid0IGtub3csIGFzc3VtZSB0aGUgd29yc3QuCisgICAgICAgICAgICopICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3JldHZhbF9jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICBlc2FjCisKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1NOUFJJTlRGCisjIGRlZmluZSBteV9zbnByaW50ZiBzbnByaW50ZgorI2Vsc2UKKyMgaW5jbHVkZSA8c3RkYXJnLmg+CitzdGF0aWMgaW50IG15X3NucHJpbnRmIChjaGFyICpidWYsIGludCBzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdzOworICBpbnQgcmV0OworICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKyAgcmV0ID0gdnNucHJpbnRmIChidWYsIHNpemUsIGZvcm1hdCwgYXJncyk7CisgIHZhX2VuZCAoYXJncyk7CisgIHJldHVybiByZXQ7Cit9CisjZW5kaWYKK3N0YXRpYyBjaGFyIGJ1ZlsxMDBdOworaW50IG1haW4gKCkKK3sKKyAgc3RyY3B5IChidWYsICJBQkNERUYiKTsKKyAgaWYgKG15X3NucHJpbnRmIChidWYsIDMsICIlZCAlZCIsIDQ1NjcsIDg5KSAhPSA3KQorICAgIHJldHVybiAxOworICBpZiAobXlfc25wcmludGYgKGJ1ZiwgMCwgIiVkICVkIiwgNDU2NywgODkpICE9IDcpCisgICAgcmV0dXJuIDI7CisgIGlmIChteV9zbnByaW50ZiAoTlVMTCwgMCwgIiVkICVkIiwgNDU2NywgODkpICE9IDcpCisgICAgcmV0dXJuIDM7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19zbnByaW50Zl9yZXR2YWxfYzk5PXllcworZWxzZQorICBnbF9jdl9mdW5jX3NucHJpbnRmX3JldHZhbF9jOTk9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfc25wcmludGZfcmV0dmFsX2M5OSIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfc25wcmludGZfcmV0dmFsX2M5OSIgPiY2OyB9CisKKworCisKKworCisgIGZvciBhY19mdW5jIGluIHNucHJpbnRmIHN0cm5sZW4gd2NzbGVuIHdjc25sZW4gbWJydG93YyB3Y3J0b21iCitkbyA6CisgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKIF9BQ0VPRgogCiBmaQogZG9uZQogCi1pZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZm9yayIgPSB4eWVzOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igd29ya2luZyBmb3JrIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgZm9yay4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19mb3JrX3dvcmtzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICAgICBhY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJfc25wcmludGYiICJhY19jdl9oYXZlX2RlY2xfX3NucHJpbnRmIiAiI2luY2x1ZGUgPHN0ZGlvLmg+CisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9fc25wcmludGYiID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCiBlbHNlCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCi0gIGFjX2N2X2Z1bmNfZm9ya193b3Jrcz1jcm9zcwotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIEJ5IFJ1ZWRpZ2VyIEt1aGxtYW5uLiAqLwotICAgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotICAgICAgI2lmIEhBVkVfVU5JU1REX0gKLSAgICAgICMgaW5jbHVkZSA8dW5pc3RkLmg+Ci0gICAgICAjZW5kaWYKLSAgICAgIC8qIFNvbWUgc3lzdGVtcyBvbmx5IGhhdmUgYSBkdW1teSBzdHViIGZvciBmb3JrKCkgKi8KLSAgICAgIGludCBtYWluICgpCi0gICAgICB7Ci0JaWYgKGZvcmsoKSA8IDApCi0JICBleGl0ICgxKTsKLQlleGl0ICgwKTsKLSAgICAgIH0KKyAgYWNfaGF2ZV9kZWNsPTAKK2ZpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ERUNMX19TTlBSSU5URiAkYWNfaGF2ZV9kZWNsCiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9mdW5jX2Zvcmtfd29ya3M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1Ci1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCi0oIGV4aXQgJGFjX3N0YXR1cyApCi1hY19jdl9mdW5jX2Zvcmtfd29ya3M9bm8KLWZpCi1ybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19mb3JrX3dvcmtzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2Zvcmtfd29ya3MiID4mNgogCi1lbHNlCi0gIGFjX2N2X2Z1bmNfZm9ya193b3Jrcz0kYWNfY3ZfZnVuY19mb3JrCi1maQotaWYgdGVzdCAieCRhY19jdl9mdW5jX2Zvcmtfd29ya3MiID0geGNyb3NzOyB0aGVuCi0gIGNhc2UgJGhvc3QgaW4KLSAgICAqLSotYW1pZ2FvcyogfCAqLSotbXNkb3NkamdwcCopCi0gICAgICAjIE92ZXJyaWRlLCBhcyB0aGVzZSBzeXN0ZW1zIGhhdmUgb25seSBhIGR1bW15IGZvcmsoKSBzdHViCi0gICAgICBhY19jdl9mdW5jX2Zvcmtfd29ya3M9bm8KLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGFjX2N2X2Z1bmNfZm9ya193b3Jrcz15ZXMKKworICBjYXNlICIkZ2xfY3ZfZnVuY19zbnByaW50Zl9yZXR2YWxfYzk5IiBpbgorICAgICp5ZXMpCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU05QUklOVEZfUkVUVkFMX0M5OSAxIiA+PmNvbmZkZWZzLmgKKwogICAgICAgOzsKICAgZXNhYwotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiByZXN1bHQgJGFjX2N2X2Z1bmNfZm9ya193b3JrcyBndWVzc2VkIGJlY2F1c2Ugb2YgY3Jvc3MgY29tcGlsYXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiByZXN1bHQgJGFjX2N2X2Z1bmNfZm9ya193b3JrcyBndWVzc2VkIGJlY2F1c2Ugb2YgY3Jvc3MgY29tcGlsYXRpb24iID4mMjt9Ci1maQotYWNfY3ZfZnVuY192Zm9ya193b3Jrcz0kYWNfY3ZfZnVuY192Zm9yawotaWYgdGVzdCAieCRhY19jdl9mdW5jX3Zmb3JrIiA9IHh5ZXM7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB3b3JraW5nIHZmb3JrIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgdmZvcmsuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfdmZvcmtfd29ya3Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKworCisgIEdOVUxJQl9BQ09TRj0wOworICBHTlVMSUJfQUNPU0w9MDsKKyAgR05VTElCX0FTSU5GPTA7CisgIEdOVUxJQl9BU0lOTD0wOworICBHTlVMSUJfQVRBTkY9MDsKKyAgR05VTElCX0FUQU5MPTA7CisgIEdOVUxJQl9BVEFOMkY9MDsKKyAgR05VTElCX0NCUlQ9MDsKKyAgR05VTElCX0NCUlRGPTA7CisgIEdOVUxJQl9DQlJUTD0wOworICBHTlVMSUJfQ0VJTD0wOworICBHTlVMSUJfQ0VJTEY9MDsKKyAgR05VTElCX0NFSUxMPTA7CisgIEdOVUxJQl9DT1BZU0lHTj0wOworICBHTlVMSUJfQ09QWVNJR05GPTA7CisgIEdOVUxJQl9DT1BZU0lHTkw9MDsKKyAgR05VTElCX0NPU0Y9MDsKKyAgR05VTElCX0NPU0w9MDsKKyAgR05VTElCX0NPU0hGPTA7CisgIEdOVUxJQl9FWFBGPTA7CisgIEdOVUxJQl9FWFBMPTA7CisgIEdOVUxJQl9FWFAyPTA7CisgIEdOVUxJQl9FWFAyRj0wOworICBHTlVMSUJfRVhQMkw9MDsKKyAgR05VTElCX0VYUE0xPTA7CisgIEdOVUxJQl9FWFBNMUY9MDsKKyAgR05VTElCX0VYUE0xTD0wOworICBHTlVMSUJfRkFCU0Y9MDsKKyAgR05VTElCX0ZBQlNMPTA7CisgIEdOVUxJQl9GTE9PUj0wOworICBHTlVMSUJfRkxPT1JGPTA7CisgIEdOVUxJQl9GTE9PUkw9MDsKKyAgR05VTElCX0ZNQT0wOworICBHTlVMSUJfRk1BRj0wOworICBHTlVMSUJfRk1BTD0wOworICBHTlVMSUJfRk1PRD0wOworICBHTlVMSUJfRk1PREY9MDsKKyAgR05VTElCX0ZNT0RMPTA7CisgIEdOVUxJQl9GUkVYUEY9MDsKKyAgR05VTElCX0ZSRVhQPTA7CisgIEdOVUxJQl9GUkVYUEw9MDsKKyAgR05VTElCX0hZUE9UPTA7CisgIEdOVUxJQl9IWVBPVEY9MDsKKyAgR05VTElCX0hZUE9UTD0wOworICBHTlVMSUJfSUxPR0I9MDsKKyAgR05VTElCX0lMT0dCRj0wOworICBHTlVMSUJfSUxPR0JMPTA7CisgIEdOVUxJQl9JU0ZJTklURT0wOworICBHTlVMSUJfSVNJTkY9MDsKKyAgR05VTElCX0lTTkFOPTA7CisgIEdOVUxJQl9JU05BTkY9MDsKKyAgR05VTElCX0lTTkFORD0wOworICBHTlVMSUJfSVNOQU5MPTA7CisgIEdOVUxJQl9MREVYUEY9MDsKKyAgR05VTElCX0xERVhQTD0wOworICBHTlVMSUJfTE9HPTA7CisgIEdOVUxJQl9MT0dGPTA7CisgIEdOVUxJQl9MT0dMPTA7CisgIEdOVUxJQl9MT0cxMD0wOworICBHTlVMSUJfTE9HMTBGPTA7CisgIEdOVUxJQl9MT0cxMEw9MDsKKyAgR05VTElCX0xPRzFQPTA7CisgIEdOVUxJQl9MT0cxUEY9MDsKKyAgR05VTElCX0xPRzFQTD0wOworICBHTlVMSUJfTE9HMj0wOworICBHTlVMSUJfTE9HMkY9MDsKKyAgR05VTElCX0xPRzJMPTA7CisgIEdOVUxJQl9MT0dCPTA7CisgIEdOVUxJQl9MT0dCRj0wOworICBHTlVMSUJfTE9HQkw9MDsKKyAgR05VTElCX01PREY9MDsKKyAgR05VTElCX01PREZGPTA7CisgIEdOVUxJQl9NT0RGTD0wOworICBHTlVMSUJfUE9XRj0wOworICBHTlVMSUJfUkVNQUlOREVSPTA7CisgIEdOVUxJQl9SRU1BSU5ERVJGPTA7CisgIEdOVUxJQl9SRU1BSU5ERVJMPTA7CisgIEdOVUxJQl9SSU5UPTA7CisgIEdOVUxJQl9SSU5URj0wOworICBHTlVMSUJfUklOVEw9MDsKKyAgR05VTElCX1JPVU5EPTA7CisgIEdOVUxJQl9ST1VOREY9MDsKKyAgR05VTElCX1JPVU5ETD0wOworICBHTlVMSUJfU0lHTkJJVD0wOworICBHTlVMSUJfU0lORj0wOworICBHTlVMSUJfU0lOTD0wOworICBHTlVMSUJfU0lOSEY9MDsKKyAgR05VTElCX1NRUlRGPTA7CisgIEdOVUxJQl9TUVJUTD0wOworICBHTlVMSUJfVEFORj0wOworICBHTlVMSUJfVEFOTD0wOworICBHTlVMSUJfVEFOSEY9MDsKKyAgR05VTElCX1RSVU5DPTA7CisgIEdOVUxJQl9UUlVOQ0Y9MDsKKyAgR05VTElCX1RSVU5DTD0wOworICAgIEhBVkVfQUNPU0Y9MTsKKyAgSEFWRV9BQ09TTD0xOworICBIQVZFX0FTSU5GPTE7CisgIEhBVkVfQVNJTkw9MTsKKyAgSEFWRV9BVEFORj0xOworICBIQVZFX0FUQU5MPTE7CisgIEhBVkVfQVRBTjJGPTE7CisgIEhBVkVfQ0JSVD0xOworICBIQVZFX0NCUlRGPTE7CisgIEhBVkVfQ0JSVEw9MTsKKyAgSEFWRV9DT1BZU0lHTj0xOworICBIQVZFX0NPUFlTSUdOTD0xOworICBIQVZFX0NPU0Y9MTsKKyAgSEFWRV9DT1NMPTE7CisgIEhBVkVfQ09TSEY9MTsKKyAgSEFWRV9FWFBGPTE7CisgIEhBVkVfRVhQTD0xOworICBIQVZFX0VYUE0xPTE7CisgIEhBVkVfRVhQTTFGPTE7CisgIEhBVkVfRkFCU0Y9MTsKKyAgSEFWRV9GQUJTTD0xOworICBIQVZFX0ZNQT0xOworICBIQVZFX0ZNQUY9MTsKKyAgSEFWRV9GTUFMPTE7CisgIEhBVkVfRk1PREY9MTsKKyAgSEFWRV9GTU9ETD0xOworICBIQVZFX0ZSRVhQRj0xOworICBIQVZFX0hZUE9URj0xOworICBIQVZFX0hZUE9UTD0xOworICBIQVZFX0lMT0dCPTE7CisgIEhBVkVfSUxPR0JGPTE7CisgIEhBVkVfSUxPR0JMPTE7CisgIEhBVkVfSVNOQU5GPTE7CisgIEhBVkVfSVNOQU5EPTE7CisgIEhBVkVfSVNOQU5MPTE7CisgIEhBVkVfTERFWFBGPTE7CisgIEhBVkVfTE9HRj0xOworICBIQVZFX0xPR0w9MTsKKyAgSEFWRV9MT0cxMEY9MTsKKyAgSEFWRV9MT0cxMEw9MTsKKyAgSEFWRV9MT0cxUD0xOworICBIQVZFX0xPRzFQRj0xOworICBIQVZFX0xPRzFQTD0xOworICBIQVZFX0xPR0JGPTE7CisgIEhBVkVfTE9HQkw9MTsKKyAgSEFWRV9NT0RGRj0xOworICBIQVZFX01PREZMPTE7CisgIEhBVkVfUE9XRj0xOworICBIQVZFX1JFTUFJTkRFUj0xOworICBIQVZFX1JFTUFJTkRFUkY9MTsKKyAgSEFWRV9SSU5UPTE7CisgIEhBVkVfUklOVEw9MTsKKyAgSEFWRV9TSU5GPTE7CisgIEhBVkVfU0lOTD0xOworICBIQVZFX1NJTkhGPTE7CisgIEhBVkVfU1FSVEY9MTsKKyAgSEFWRV9TUVJUTD0xOworICBIQVZFX1RBTkY9MTsKKyAgSEFWRV9UQU5MPTE7CisgIEhBVkVfVEFOSEY9MTsKKyAgSEFWRV9ERUNMX0FDT1NMPTE7CisgIEhBVkVfREVDTF9BU0lOTD0xOworICBIQVZFX0RFQ0xfQVRBTkw9MTsKKyAgSEFWRV9ERUNMX0NCUlRGPTE7CisgIEhBVkVfREVDTF9DQlJUTD0xOworICBIQVZFX0RFQ0xfQ0VJTEY9MTsKKyAgSEFWRV9ERUNMX0NFSUxMPTE7CisgIEhBVkVfREVDTF9DT1BZU0lHTkY9MTsKKyAgSEFWRV9ERUNMX0NPU0w9MTsKKyAgSEFWRV9ERUNMX0VYUEw9MTsKKyAgSEFWRV9ERUNMX0VYUDI9MTsKKyAgSEFWRV9ERUNMX0VYUDJGPTE7CisgIEhBVkVfREVDTF9FWFAyTD0xOworICBIQVZFX0RFQ0xfRVhQTTFMPTE7CisgIEhBVkVfREVDTF9GTE9PUkY9MTsKKyAgSEFWRV9ERUNMX0ZMT09STD0xOworICBIQVZFX0RFQ0xfRlJFWFBMPTE7CisgIEhBVkVfREVDTF9MREVYUEw9MTsKKyAgSEFWRV9ERUNMX0xPR0w9MTsKKyAgSEFWRV9ERUNMX0xPRzEwTD0xOworICBIQVZFX0RFQ0xfTE9HMj0xOworICBIQVZFX0RFQ0xfTE9HMkY9MTsKKyAgSEFWRV9ERUNMX0xPRzJMPTE7CisgIEhBVkVfREVDTF9MT0dCPTE7CisgIEhBVkVfREVDTF9SRU1BSU5ERVI9MTsKKyAgSEFWRV9ERUNMX1JFTUFJTkRFUkw9MTsKKyAgSEFWRV9ERUNMX1JJTlRGPTE7CisgIEhBVkVfREVDTF9ST1VORD0xOworICBIQVZFX0RFQ0xfUk9VTkRGPTE7CisgIEhBVkVfREVDTF9ST1VOREw9MTsKKyAgSEFWRV9ERUNMX1NJTkw9MTsKKyAgSEFWRV9ERUNMX1NRUlRMPTE7CisgIEhBVkVfREVDTF9UQU5MPTE7CisgIEhBVkVfREVDTF9UUlVOQz0xOworICBIQVZFX0RFQ0xfVFJVTkNGPTE7CisgIEhBVkVfREVDTF9UUlVOQ0w9MTsKKyAgUkVQTEFDRV9DQlJURj0wOworICBSRVBMQUNFX0NCUlRMPTA7CisgIFJFUExBQ0VfQ0VJTD0wOworICBSRVBMQUNFX0NFSUxGPTA7CisgIFJFUExBQ0VfQ0VJTEw9MDsKKyAgUkVQTEFDRV9FWFBNMT0wOworICBSRVBMQUNFX0VYUE0xRj0wOworICBSRVBMQUNFX0VYUDI9MDsKKyAgUkVQTEFDRV9FWFAyTD0wOworICBSRVBMQUNFX0ZBQlNMPTA7CisgIFJFUExBQ0VfRkxPT1I9MDsKKyAgUkVQTEFDRV9GTE9PUkY9MDsKKyAgUkVQTEFDRV9GTE9PUkw9MDsKKyAgUkVQTEFDRV9GTUE9MDsKKyAgUkVQTEFDRV9GTUFGPTA7CisgIFJFUExBQ0VfRk1BTD0wOworICBSRVBMQUNFX0ZNT0Q9MDsKKyAgUkVQTEFDRV9GTU9ERj0wOworICBSRVBMQUNFX0ZNT0RMPTA7CisgIFJFUExBQ0VfRlJFWFBGPTA7CisgIFJFUExBQ0VfRlJFWFA9MDsKKyAgUkVQTEFDRV9GUkVYUEw9MDsKKyAgUkVQTEFDRV9IVUdFX1ZBTD0wOworICBSRVBMQUNFX0hZUE9UPTA7CisgIFJFUExBQ0VfSFlQT1RGPTA7CisgIFJFUExBQ0VfSFlQT1RMPTA7CisgIFJFUExBQ0VfSUxPR0I9MDsKKyAgUkVQTEFDRV9JTE9HQkY9MDsKKyAgUkVQTEFDRV9JU0ZJTklURT0wOworICBSRVBMQUNFX0lTSU5GPTA7CisgIFJFUExBQ0VfSVNOQU49MDsKKyAgUkVQTEFDRV9MREVYUEw9MDsKKyAgUkVQTEFDRV9MT0c9MDsKKyAgUkVQTEFDRV9MT0dGPTA7CisgIFJFUExBQ0VfTE9HTD0wOworICBSRVBMQUNFX0xPRzEwPTA7CisgIFJFUExBQ0VfTE9HMTBGPTA7CisgIFJFUExBQ0VfTE9HMTBMPTA7CisgIFJFUExBQ0VfTE9HMVA9MDsKKyAgUkVQTEFDRV9MT0cxUEY9MDsKKyAgUkVQTEFDRV9MT0cxUEw9MDsKKyAgUkVQTEFDRV9MT0cyPTA7CisgIFJFUExBQ0VfTE9HMkY9MDsKKyAgUkVQTEFDRV9MT0cyTD0wOworICBSRVBMQUNFX0xPR0I9MDsKKyAgUkVQTEFDRV9MT0dCRj0wOworICBSRVBMQUNFX0xPR0JMPTA7CisgIFJFUExBQ0VfTU9ERj0wOworICBSRVBMQUNFX01PREZGPTA7CisgIFJFUExBQ0VfTU9ERkw9MDsKKyAgUkVQTEFDRV9OQU49MDsKKyAgUkVQTEFDRV9SRU1BSU5ERVI9MDsKKyAgUkVQTEFDRV9SRU1BSU5ERVJGPTA7CisgIFJFUExBQ0VfUkVNQUlOREVSTD0wOworICBSRVBMQUNFX1JPVU5EPTA7CisgIFJFUExBQ0VfUk9VTkRGPTA7CisgIFJFUExBQ0VfUk9VTkRMPTA7CisgIFJFUExBQ0VfU0lHTkJJVD0wOworICBSRVBMQUNFX1NJR05CSVRfVVNJTkdfR0NDPTA7CisgIFJFUExBQ0VfU1FSVEw9MDsKKyAgUkVQTEFDRV9UUlVOQz0wOworICBSRVBMQUNFX1RSVU5DRj0wOworICBSRVBMQUNFX1RSVU5DTD0wOworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGZyZXhwKCkgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGZyZXhwKCkgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibS4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX2ZyZXhwX25vX2xpYm0rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgotICBhY19jdl9mdW5jX3Zmb3JrX3dvcmtzPWNyb3NzCi1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBUaGFua3MgdG8gUGF1bCBFZ2dlcnQgZm9yIHRoaXMgdGVzdC4gICovCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisgICAgICAgICAgICAgZG91YmxlIHg7CitpbnQKK21haW4gKCkKK3sKK2ludCBlOyByZXR1cm4gZnJleHAgKHgsICZlKSA+IDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19mcmV4cF9ub19saWJtPXllcworZWxzZQorICBnbF9jdl9mdW5jX2ZyZXhwX25vX2xpYm09bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2ZyZXhwX25vX2xpYm0iID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2ZyZXhwX25vX2xpYm0iID4mNjsgfQorCisKKworCisKKworICAgICBHTlVMSUJfRkNITU9EQVQ9MDsKKyAgR05VTElCX0ZTVEFUPTA7CisgIEdOVUxJQl9GU1RBVEFUPTA7CisgIEdOVUxJQl9GVVRJTUVOUz0wOworICBHTlVMSUJfTENITU9EPTA7CisgIEdOVUxJQl9MU1RBVD0wOworICBHTlVMSUJfTUtESVJBVD0wOworICBHTlVMSUJfTUtGSUZPPTA7CisgIEdOVUxJQl9NS0ZJRk9BVD0wOworICBHTlVMSUJfTUtOT0Q9MDsKKyAgR05VTElCX01LTk9EQVQ9MDsKKyAgR05VTElCX1NUQVQ9MDsKKyAgR05VTElCX1VUSU1FTlNBVD0wOworICAgIEhBVkVfRkNITU9EQVQ9MTsKKyAgSEFWRV9GU1RBVEFUPTE7CisgIEhBVkVfRlVUSU1FTlM9MTsKKyAgSEFWRV9MQ0hNT0Q9MTsKKyAgSEFWRV9MU1RBVD0xOworICBIQVZFX01LRElSQVQ9MTsKKyAgSEFWRV9NS0ZJRk89MTsKKyAgSEFWRV9NS0ZJRk9BVD0xOworICBIQVZFX01LTk9EPTE7CisgIEhBVkVfTUtOT0RBVD0xOworICBIQVZFX1VUSU1FTlNBVD0xOworICBSRVBMQUNFX0ZTVEFUPTA7CisgIFJFUExBQ0VfRlNUQVRBVD0wOworICBSRVBMQUNFX0ZVVElNRU5TPTA7CisgIFJFUExBQ0VfTFNUQVQ9MDsKKyAgUkVQTEFDRV9NS0RJUj0wOworICBSRVBMQUNFX01LRklGTz0wOworICBSRVBMQUNFX01LTk9EPTA7CisgIFJFUExBQ0VfU1RBVD0wOworICBSRVBMQUNFX1VUSU1FTlNBVD0wOworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc3RhdCBmaWxlLW1vZGUgbWFjcm9zIGFyZSBicm9rZW4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBzdGF0IGZpbGUtbW9kZSBtYWNyb3MgYXJlIGJyb2tlbi4uLiAiID4mNjsgfQoraWYgJHthY19jdl9oZWFkZXJfc3RhdF9icm9rZW4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2lmIGRlZmluZWQgU19JU0JMSyAmJiBkZWZpbmVkIFNfSUZESVIKK2V4dGVybiBjaGFyIGMxW1NfSVNCTEsgKFNfSUZESVIpID8gLTEgOiAxXTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBTX0lTQkxLICYmIGRlZmluZWQgU19JRkNIUgorZXh0ZXJuIGNoYXIgYzJbU19JU0JMSyAoU19JRkNIUikgPyAtMSA6IDFdOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIFNfSVNMTksgJiYgZGVmaW5lZCBTX0lGUkVHCitleHRlcm4gY2hhciBjM1tTX0lTTE5LIChTX0lGUkVHKSA/IC0xIDogMV07CisjZW5kaWYKKworI2lmIGRlZmluZWQgU19JU1NPQ0sgJiYgZGVmaW5lZCBTX0lGUkVHCitleHRlcm4gY2hhciBjNFtTX0lTU09DSyAoU19JRlJFRykgPyAtMSA6IDFdOworI2VuZGlmCisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9oZWFkZXJfc3RhdF9icm9rZW49bm8KK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0YXRfYnJva2VuPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0YXRfYnJva2VuIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3N0YXRfYnJva2VuIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGF0X2Jyb2tlbiA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBTVEFUX01BQ1JPU19CUk9LRU4gMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworCisKKworICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBtaW5ndyopCisgICAgICAgICAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciA2NC1iaXQgb2ZmX3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIDY0LWJpdCBvZmZfdC4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl90eXBlX29mZl90XzY0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgICAgICAgICAgICAgIGludCB2ZXJpZnlfb2ZmX3Rfc2l6ZVtzaXplb2YgKG9mZl90KSA+PSA4ID8gMSA6IC0xXTsKKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl90eXBlX29mZl90XzY0PXllcworZWxzZQorICBnbF9jdl90eXBlX29mZl90XzY0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X3R5cGVfb2ZmX3RfNjQiID4mNQorJGFzX2VjaG8gIiRnbF9jdl90eXBlX29mZl90XzY0IiA+JjY7IH0KKyAgICAgIGlmIHRlc3QgJGdsX2N2X3R5cGVfb2ZmX3RfNjQgPSBubzsgdGhlbgorICAgICAgICBXSU5ET1dTXzY0X0JJVF9PRkZfVD0xCisgICAgICBlbHNlCisgICAgICAgIFdJTkRPV1NfNjRfQklUX09GRl9UPTAKKyAgICAgIGZpCisgICAgICAgICAgICAgICAgICBXSU5ET1dTXzY0X0JJVF9TVF9TSVpFPTEKKyAgICAgIDs7CisgICAgKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdJTkRPV1NfNjRfQklUX09GRl9UPTAKKyAgICAgIFdJTkRPV1NfNjRfQklUX1NUX1NJWkU9MAorICAgICAgOzsKKyAgZXNhYworCisKKworCisKKworCisKKworCisKKworCisKKworICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllczsgdGhlbgorICAgICAgIGdsX2N2X25leHRfc3lzX3N0YXRfaD0nPCdzeXMvc3RhdC5oJz4nCisgICAgIGVsc2UKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHN5cy9zdGF0Lmg+IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHN5cy9zdGF0Lmg+Li4uICIgPiY2OyB9CitpZiAke2dsX2N2X25leHRfc3lzX3N0YXRfaCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgICAgICAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3N0YXRfaCA9IHllczsgdGhlbgorCisKKyAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCitfQUNFT0YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICBhaXgqKSBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCAtQyIgOzsKKyAgICAgICAgICAgICAgICAgKikgICAgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAiIDs7CisgICAgICAgICAgICAgICBlc2FjCisKKyAgICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICBtaW5ndyopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZGlyc2VwX3JlZ2V4PSdbL1xcXScKKyAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgIGdsX2RpcnNlcF9yZWdleD0nXC8nCisgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX21ha2VfbGl0ZXJhbF9yZWdleF9zZWQ9J3MsW10kXlxcLiovW10sXFwmLGcnCisKKyAgICAgICAgICAgICAgIGdsX2hlYWRlcl9saXRlcmFsX3JlZ2V4PWBlY2hvICdzeXMvc3RhdC5oJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgIiRnbF9tYWtlX2xpdGVyYWxfcmVnZXhfc2VkImAKKyAgICAgICAgICAgICAgIGdsX2Fic29sdXRlX2hlYWRlcl9zZWQ9Ii8ke2dsX2RpcnNlcF9yZWdleH0ke2dsX2hlYWRlcl9saXRlcmFsX3JlZ2V4fS8iJ3sKKyAgICAgICAgICAgICAgICAgICBzLy4qIlwoLionIiR7Z2xfZGlyc2VwX3JlZ2V4fSR7Z2xfaGVhZGVyX2xpdGVyYWxfcmVnZXh9IidcKSIuKi9cMS8KKyAgICAgICAgICAgICAgICAgICBzfF4vW14vXXwvLyZ8CisgICAgICAgICAgICAgICAgICAgcAorICAgICAgICAgICAgICAgICAgIHEKKyAgICAgICAgICAgICAgICAgfScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X25leHRfc3lzX3N0YXRfaD0nIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICAgICAgICAgICAgICAgICAgICAgc2VkIC1uICIkZ2xfYWJzb2x1dGVfaGVhZGVyX3NlZCJgJyInCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgZ2xfY3ZfbmV4dF9zeXNfc3RhdF9oPSc8J3N5cy9zdGF0LmgnPicKKyAgICAgICAgICAgICBmaQorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X25leHRfc3lzX3N0YXRfaCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X25leHRfc3lzX3N0YXRfaCIgPiY2OyB9CisgICAgIGZpCisgICAgIE5FWFRfU1lTX1NUQVRfSD0kZ2xfY3ZfbmV4dF9zeXNfc3RhdF9oCisKKyAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXMgfHwgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSBidWdneTsgdGhlbgorICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZV9uZXh0JworICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSc8J3N5cy9zdGF0LmgnPicKKyAgICAgZWxzZQorICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZScKKyAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0kZ2xfY3ZfbmV4dF9zeXNfc3RhdF9oCisgICAgIGZpCisgICAgIE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19TVEFUX0g9JGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlCisKKworCisKKworCisKKworCisKKworICBpZiB0ZXN0ICRXSU5ET1dTXzY0X0JJVF9TVF9TSVpFID0gMTsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBfR0xfV0lORE9XU182NF9CSVRfU1RfU0laRSAxIiA+PmNvbmZkZWZzLmgKKworICBmaQorCisgICAgICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJubGlua190IiAiYWNfY3ZfdHlwZV9ubGlua190IiAiI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgICAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9ubGlua190IiA9IHh5ZXM7IHRoZW4gOgorCitlbHNlCisKKyRhc19lY2hvICIjZGVmaW5lIG5saW5rX3QgaW50IiA+PmNvbmZkZWZzLmgKKworZmkKKworCisKKyAgICBmb3IgZ2xfZnVuYyBpbiBmY2htb2RhdCBmc3RhdCBmc3RhdGF0IGZ1dGltZW5zIGxjaG1vZCBsc3RhdCBta2RpcmF0IG1rZmlmbyBta2ZpZm9hdCAgICAgbWtub2QgbWtub2RhdCBzdGF0IHV0aW1lbnNhdDsgZG8KKyAgICBhc19nbF9TeW1ib2w9YCRhc19lY2hvICJnbF9jdl9oYXZlX3Jhd19kZWNsXyRnbF9mdW5jIiB8ICRhc190cl9zaGAKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyRhc19nbF9TeW1ib2wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworaW50CittYWluICgpCit7CisjdW5kZWYgJGdsX2Z1bmMKKyAgKHZvaWQpICRnbF9mdW5jOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiRhc19nbF9TeW1ib2w9eWVzIgorZWxzZQorICBldmFsICIkYXNfZ2xfU3ltYm9sPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJGFzX2dsX1N5bWJvbAorCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgICAgaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19nbF9TeW1ib2wiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV9SQVdfREVDTF8kZ2xfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworICAgICAgICAgICAgICAgICAgICAgZXZhbCBhY19jdl9oYXZlX2RlY2xfJGdsX2Z1bmM9eWVzCitmaQorICAgICAgZG9uZQorCisKK2FjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgImdldGRlbGltIiAiYWNfY3ZfaGF2ZV9kZWNsX2dldGRlbGltIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9nZXRkZWxpbSIgPSB4eWVzOyB0aGVuIDoKKyAgYWNfaGF2ZV9kZWNsPTEKK2Vsc2UKKyAgYWNfaGF2ZV9kZWNsPTAKK2ZpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ERUNMX0dFVERFTElNICRhY19oYXZlX2RlY2wKK19BQ0VPRgorCisKKworCisKK2FjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgImdldGxpbmUiICJhY19jdl9oYXZlX2RlY2xfZ2V0bGluZSIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfZ2V0bGluZSIgPSB4eWVzOyB0aGVuIDoKKyAgYWNfaGF2ZV9kZWNsPTEKK2Vsc2UKKyAgYWNfaGF2ZV9kZWNsPTAKK2ZpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ERUNMX0dFVExJTkUgJGFjX2hhdmVfZGVjbAorX0FDRU9GCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXM7IHRoZW4KKyAgICAgICBnbF9jdl9uZXh0X2dldG9wdF9oPSc8J2dldG9wdC5oJz4nCisgICAgIGVsc2UKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPGdldG9wdC5oPiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxnZXRvcHQuaD4uLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfbmV4dF9nZXRvcHRfaCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgICAgICAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfZ2V0b3B0X2ggPSB5ZXM7IHRoZW4KKworCisgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisKK19BQ0VPRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgIGFpeCopIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIC1DIiA7OworICAgICAgICAgICAgICAgICAqKSAgICBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCIgOzsKKyAgICAgICAgICAgICAgIGVzYWMKKworICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgIG1pbmd3KikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kaXJzZXBfcmVnZXg9J1svXFxdJworICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgZ2xfZGlyc2VwX3JlZ2V4PSdcLycKKyAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfbWFrZV9saXRlcmFsX3JlZ2V4X3NlZD0ncyxbXSReXFwuKi9bXSxcXCYsZycKKworICAgICAgICAgICAgICAgZ2xfaGVhZGVyX2xpdGVyYWxfcmVnZXg9YGVjaG8gJ2dldG9wdC5oJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgIiRnbF9tYWtlX2xpdGVyYWxfcmVnZXhfc2VkImAKKyAgICAgICAgICAgICAgIGdsX2Fic29sdXRlX2hlYWRlcl9zZWQ9Ii8ke2dsX2RpcnNlcF9yZWdleH0ke2dsX2hlYWRlcl9saXRlcmFsX3JlZ2V4fS8iJ3sKKyAgICAgICAgICAgICAgICAgICBzLy4qIlwoLionIiR7Z2xfZGlyc2VwX3JlZ2V4fSR7Z2xfaGVhZGVyX2xpdGVyYWxfcmVnZXh9IidcKSIuKi9cMS8KKyAgICAgICAgICAgICAgICAgICBzfF4vW14vXXwvLyZ8CisgICAgICAgICAgICAgICAgICAgcAorICAgICAgICAgICAgICAgICAgIHEKKyAgICAgICAgICAgICAgICAgfScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X25leHRfZ2V0b3B0X2g9JyInYChldmFsICIkZ2xfYWJzbmFtZV9jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAgICAgICAgICAgICAgICAgICAgIHNlZCAtbiAiJGdsX2Fic29sdXRlX2hlYWRlcl9zZWQiYCciJworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIGdsX2N2X25leHRfZ2V0b3B0X2g9JzwnZ2V0b3B0LmgnPicKKyAgICAgICAgICAgICBmaQorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X25leHRfZ2V0b3B0X2giID4mNQorJGFzX2VjaG8gIiRnbF9jdl9uZXh0X2dldG9wdF9oIiA+JjY7IH0KKyAgICAgZmkKKyAgICAgTkVYVF9HRVRPUFRfSD0kZ2xfY3ZfbmV4dF9nZXRvcHRfaAorCisgICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzIHx8IHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0gYnVnZ3k7IHRoZW4KKyAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGVfbmV4dCcKKyAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0nPCdnZXRvcHQuaCc+JworICAgICBlbHNlCisgICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNsdWRlJworICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSRnbF9jdl9uZXh0X2dldG9wdF9oCisgICAgIGZpCisgICAgIE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX0dFVE9QVF9IPSRnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZQorCisKKworCisgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9nZXRvcHRfaCA9IHllczsgdGhlbgorICAgIEhBVkVfR0VUT1BUX0g9MQorICBlbHNlCisgICAgSEFWRV9HRVRPUFRfSD0wCisgIGZpCisKKworICBnbF9yZXBsYWNlX2dldG9wdD0KKworICAgIGlmIHRlc3QgLXogIiRnbF9yZXBsYWNlX2dldG9wdCIgJiYgdGVzdCAkZ2xfZ2V0b3B0X3JlcXVpcmVkID0gR05VOyB0aGVuCisgICAgZm9yIGFjX2hlYWRlciBpbiBnZXRvcHQuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiZ2V0b3B0LmgiICJhY19jdl9oZWFkZXJfZ2V0b3B0X2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2dldG9wdF9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfR0VUT1BUX0ggMQorX0FDRU9GCisKK2Vsc2UKKyAgZ2xfcmVwbGFjZV9nZXRvcHQ9eWVzCitmaQorCitkb25lCisKKyAgZmkKKworICAgIGlmIHRlc3QgLXogIiRnbF9yZXBsYWNlX2dldG9wdCIgJiYgdGVzdCAkZ2xfZ2V0b3B0X3JlcXVpcmVkID0gR05VOyB0aGVuCisgICAgZm9yIGFjX2Z1bmMgaW4gZ2V0b3B0X2xvbmdfb25seQorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnZXRvcHRfbG9uZ19vbmx5IiAiYWNfY3ZfZnVuY19nZXRvcHRfbG9uZ19vbmx5IgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2dldG9wdF9sb25nX29ubHkiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9HRVRPUFRfTE9OR19PTkxZIDEKK19BQ0VPRgorCitlbHNlCisgIGdsX3JlcGxhY2VfZ2V0b3B0PXllcworZmkKK2RvbmUKKworICBmaQorCisgICAgICAgICAgaWYgdGVzdCAteiAiJGdsX3JlcGxhY2VfZ2V0b3B0IjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBnZXRvcHQgaXMgUE9TSVggY29tcGF0aWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGdldG9wdCBpcyBQT1NJWCBjb21wYXRpYmxlLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfZ2V0b3B0X3Bvc2l4Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAkY3Jvc3NfY29tcGlsaW5nID0gbm87IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworaW50CittYWluICgpCit7CisgIHN0YXRpYyBjaGFyIHByb2dyYW1bXSA9ICJwcm9ncmFtIjsKKyAgc3RhdGljIGNoYXIgYVtdID0gIi1hIjsKKyAgc3RhdGljIGNoYXIgZm9vW10gPSAiZm9vIjsKKyAgc3RhdGljIGNoYXIgYmFyW10gPSAiYmFyIjsKKyAgY2hhciAqYXJndltdID0geyBwcm9ncmFtLCBhLCBmb28sIGJhciwgTlVMTCB9OworICBpbnQgYzsKKworICBjID0gZ2V0b3B0ICg0LCBhcmd2LCAiYWIiKTsKKyAgaWYgKCEoYyA9PSAnYScpKQorICAgIHJldHVybiAxOworICBjID0gZ2V0b3B0ICg0LCBhcmd2LCAiYWIiKTsKKyAgaWYgKCEoYyA9PSAtMSkpCisgICAgcmV0dXJuIDI7CisgIGlmICghKG9wdGluZCA9PSAyKSkKKyAgICByZXR1cm4gMzsKKyAgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfZ2V0b3B0X3Bvc2l4PW1heWJlCitlbHNlCisgIGdsX2N2X2Z1bmNfZ2V0b3B0X3Bvc2l4PW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworICAgICAgICAgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfZ2V0b3B0X3Bvc2l4ID0gbWF5YmU7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworaW50CittYWluICgpCit7CisgIHN0YXRpYyBjaGFyIHByb2dyYW1bXSA9ICJwcm9ncmFtIjsKKyAgc3RhdGljIGNoYXIgZG9uYWxkW10gPSAiZG9uYWxkIjsKKyAgc3RhdGljIGNoYXIgcFtdID0gIi1wIjsKKyAgc3RhdGljIGNoYXIgYmlsbHlbXSA9ICJiaWxseSI7CisgIHN0YXRpYyBjaGFyIGR1Y2tbXSA9ICJkdWNrIjsKKyAgc3RhdGljIGNoYXIgYVtdID0gIi1hIjsKKyAgc3RhdGljIGNoYXIgYmFyW10gPSAiYmFyIjsKKyAgY2hhciAqYXJndltdID0geyBwcm9ncmFtLCBkb25hbGQsIHAsIGJpbGx5LCBkdWNrLCBhLCBiYXIsIE5VTEwgfTsKKyAgaW50IGM7CisKKyAgYyA9IGdldG9wdCAoNywgYXJndiwgIithYnA6cToiKTsKKyAgaWYgKCEoYyA9PSAtMSkpCisgICAgcmV0dXJuIDQ7CisgIGlmICghKHN0cmNtcCAoYXJndlswXSwgInByb2dyYW0iKSA9PSAwKSkKKyAgICByZXR1cm4gNTsKKyAgaWYgKCEoc3RyY21wIChhcmd2WzFdLCAiZG9uYWxkIikgPT0gMCkpCisgICAgcmV0dXJuIDY7CisgIGlmICghKHN0cmNtcCAoYXJndlsyXSwgIi1wIikgPT0gMCkpCisgICAgcmV0dXJuIDc7CisgIGlmICghKHN0cmNtcCAoYXJndlszXSwgImJpbGx5IikgPT0gMCkpCisgICAgcmV0dXJuIDg7CisgIGlmICghKHN0cmNtcCAoYXJndls0XSwgImR1Y2siKSA9PSAwKSkKKyAgICByZXR1cm4gOTsKKyAgaWYgKCEoc3RyY21wIChhcmd2WzVdLCAiLWEiKSA9PSAwKSkKKyAgICByZXR1cm4gMTA7CisgIGlmICghKHN0cmNtcCAoYXJndls2XSwgImJhciIpID09IDApKQorICAgIHJldHVybiAxMTsKKyAgaWYgKCEob3B0aW5kID09IDEpKQorICAgIHJldHVybiAxMjsKKyAgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfZ2V0b3B0X3Bvc2l4PW1heWJlCitlbHNlCisgIGdsX2N2X2Z1bmNfZ2V0b3B0X3Bvc2l4PW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworICAgICAgICAgIGZpCisgICAgICAgICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19nZXRvcHRfcG9zaXggPSBtYXliZTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgcnVuIHRlc3QgcHJvZ3JhbSB3aGlsZSBjcm9zcyBjb21waWxpbmcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitpbnQKK21haW4gKCkKK3sKKyAgc3RhdGljIGNoYXIgcHJvZ3JhbVtdID0gInByb2dyYW0iOworICBzdGF0aWMgY2hhciBhYltdID0gIi1hYiI7CisgIGNoYXIgKmFyZ3ZbM10gPSB7IHByb2dyYW0sIGFiLCBOVUxMIH07CisgIGlmIChnZXRvcHQgKDIsIGFyZ3YsICJhYjoiKSAhPSAnYScpCisgICAgcmV0dXJuIDEzOworICBpZiAoZ2V0b3B0ICgyLCBhcmd2LCAiYWI6IikgIT0gJz8nKQorICAgIHJldHVybiAxNDsKKyAgaWYgKG9wdG9wdCAhPSAnYicpCisgICAgcmV0dXJuIDE1OworICBpZiAob3B0aW5kICE9IDIpCisgICAgcmV0dXJuIDE2OworICByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19nZXRvcHRfcG9zaXg9eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfZ2V0b3B0X3Bvc2l4PW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworICAgICAgICAgIGZpCisgICAgICAgIGVsc2UKKyAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgIGRhcndpbiogfCBhaXgqIHwgbWluZ3cqKSBnbF9jdl9mdW5jX2dldG9wdF9wb3NpeD0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgICopICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX2dldG9wdF9wb3NpeD0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgZXNhYworICAgICAgICBmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2dldG9wdF9wb3NpeCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfZ2V0b3B0X3Bvc2l4IiA+JjY7IH0KKyAgICBjYXNlICIkZ2xfY3ZfZnVuY19nZXRvcHRfcG9zaXgiIGluCisgICAgICAqbm8pIGdsX3JlcGxhY2VfZ2V0b3B0PXllcyA7OworICAgIGVzYWMKKyAgZmkKKworICBpZiB0ZXN0IC16ICIkZ2xfcmVwbGFjZV9nZXRvcHQiICYmIHRlc3QgJGdsX2dldG9wdF9yZXF1aXJlZCA9IEdOVTsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdvcmtpbmcgR05VIGdldG9wdCBmdW5jdGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igd29ya2luZyBHTlUgZ2V0b3B0IGZ1bmN0aW9uLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfZ2V0b3B0X2dudSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICMgRXZlbiB3aXRoIFBPU0lYTFlfQ09SUkVDVCwgdGhlIEdOVSBleHRlbnNpb24gb2YgbGVhZGluZyAnLScgaW4gdGhlCisgICAgICAgIyBvcHRzdHJpbmcgaXMgbmVjZXNzYXJ5IGZvciBwcm9ncmFtcyBsaWtlIG00IHRoYXQgaGF2ZSBQT1NJWC1tYW5kYXRlZAorICAgICAgICMgc2VtYW50aWNzIGZvciBzdXBwb3J0aW5nIG9wdGlvbnMgaW50ZXJzcGVyc2VkIHdpdGggZmlsZXMuCisgICAgICAgIyBBbHNvLCBzaW5jZSBnZXRvcHRfbG9uZyBpcyBhIEdOVSBleHRlbnNpb24sIHdlIHJlcXVpcmUgb3B0aW5kPTAuCisgICAgICAgIyBCYXNoIHRpZXMgJ3NldCAtbyBwb3NpeCcgdG8gYSBub24tZXhwb3J0ZWQgUE9TSVhMWV9DT1JSRUNUOworICAgICAgICMgc28gdGFrZSBjYXJlIHRvIHJldmVydCB0byB0aGUgY29ycmVjdCAobm9uLSlleHBvcnQgc3RhdGUuCisgICAgICAgZ2xfYXdrX3Byb2JlPSdCRUdJTiB7IGlmICgiUE9TSVhMWV9DT1JSRUNUIiBpbiBFTlZJUk9OKSBwcmludCAieCIgfScKKyAgICAgICBjYXNlICR7UE9TSVhMWV9DT1JSRUNUK3h9YCRBV0sgIiRnbF9hd2tfcHJvYmUiIDwvZGV2L251bGxgIGluCisgICAgICAgICB4eCkgZ2xfaGFkX1BPU0lYTFlfQ09SUkVDVD1leHBvcnRlZCA7OworICAgICAgICAgeCkgIGdsX2hhZF9QT1NJWExZX0NPUlJFQ1Q9eWVzICAgICAgOzsKKyAgICAgICAgICopICBnbF9oYWRfUE9TSVhMWV9DT1JSRUNUPSAgICAgICAgIDs7CisgICAgICAgZXNhYworICAgICAgIFBPU0lYTFlfQ09SUkVDVD0xCisgICAgICAgZXhwb3J0IFBPU0lYTFlfQ09SUkVDVAorICAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgICAgICAgICAgZ2xfY3ZfZnVuY19nZXRvcHRfZ251PSJndWVzc2luZyBubyIKKworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3RkZGVmLmg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZiBkZWZpbmVkIF9fTUFDSF9fICYmIGRlZmluZWQgX19BUFBMRV9fCisvKiBBdm9pZCBhIGNyYXNoIG9uIE1hYyBPUyBYLiAgKi8KKyNpbmNsdWRlIDxtYWNoL21hY2guaD4KKyNpbmNsdWRlIDxtYWNoL21hY2hfZXJyb3IuaD4KKyNpbmNsdWRlIDxtYWNoL3RocmVhZF9zdGF0dXMuaD4KKyNpbmNsdWRlIDxtYWNoL2V4Y2VwdGlvbi5oPgorI2luY2x1ZGUgPG1hY2gvdGFzay5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKy8qIFRoZSBleGNlcHRpb24gcG9ydCBvbiB3aGljaCBvdXIgdGhyZWFkIGxpc3RlbnMuICAqLworc3RhdGljIG1hY2hfcG9ydF90IG91cl9leGNlcHRpb25fcG9ydDsKKy8qIFRoZSBtYWluIGZ1bmN0aW9uIG9mIHRoZSB0aHJlYWQgbGlzdGVuaW5nIGZvciBleGNlcHRpb25zIG9mIHR5cGUKKyAgIEVYQ19CQURfQUNDRVNTLiAgKi8KK3N0YXRpYyB2b2lkICoKK21hY2hfZXhjZXB0aW9uX3RocmVhZCAodm9pZCAqYXJnKQoreworICAvKiBCdWZmZXIgZm9yIGEgbWVzc2FnZSB0byBiZSByZWNlaXZlZC4gICovCisgIHN0cnVjdCB7CisgICAgbWFjaF9tc2dfaGVhZGVyX3QgaGVhZDsKKyAgICBtYWNoX21zZ19ib2R5X3QgbXNnaF9ib2R5OworICAgIGNoYXIgZGF0YVsxMDI0XTsKKyAgfSBtc2c7CisgIG1hY2hfbXNnX3JldHVybl90IHJldHZhbDsKKyAgLyogV2FpdCBmb3IgYSBtZXNzYWdlIG9uIHRoZSBleGNlcHRpb24gcG9ydC4gICovCisgIHJldHZhbCA9IG1hY2hfbXNnICgmbXNnLmhlYWQsIE1BQ0hfUkNWX01TRyB8IE1BQ0hfUkNWX0xBUkdFLCAwLCBzaXplb2YgKG1zZyksCisgICAgICAgICAgICAgICAgICAgICBvdXJfZXhjZXB0aW9uX3BvcnQsIE1BQ0hfTVNHX1RJTUVPVVRfTk9ORSwgTUFDSF9QT1JUX05VTEwpOworICBpZiAocmV0dmFsICE9IE1BQ0hfTVNHX1NVQ0NFU1MpCisgICAgYWJvcnQgKCk7CisgIGV4aXQgKDEpOworfQorc3RhdGljIHZvaWQKK25vY3Jhc2hfaW5pdCAodm9pZCkKK3sKKyAgbWFjaF9wb3J0X3Qgc2VsZiA9IG1hY2hfdGFza19zZWxmICgpOworICAvKiBBbGxvY2F0ZSBhIHBvcnQgb24gd2hpY2ggdGhlIHRocmVhZCBzaGFsbCBsaXN0ZW4gZm9yIGV4Y2VwdGlvbnMuICAqLworICBpZiAobWFjaF9wb3J0X2FsbG9jYXRlIChzZWxmLCBNQUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgJm91cl9leGNlcHRpb25fcG9ydCkKKyAgICAgID09IEtFUk5fU1VDQ0VTUykgeworICAgIC8qIFNlZSBodHRwOi8vd2ViLm1pdC5lZHUvZGFyd2luL3NyYy9tb2R1bGVzL3hudS9vc2Ztay9tYW4vbWFjaF9wb3J0X2luc2VydF9yaWdodC5odG1sLiAgKi8KKyAgICBpZiAobWFjaF9wb3J0X2luc2VydF9yaWdodCAoc2VsZiwgb3VyX2V4Y2VwdGlvbl9wb3J0LCBvdXJfZXhjZXB0aW9uX3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BQ0hfTVNHX1RZUEVfTUFLRV9TRU5EKQorICAgICAgICA9PSBLRVJOX1NVQ0NFU1MpIHsKKyAgICAgIC8qIFRoZSBleGNlcHRpb25zIHdlIHdhbnQgdG8gY2F0Y2guICBPbmx5IEVYQ19CQURfQUNDRVNTIGlzIGludGVyZXN0aW5nCisgICAgICAgICBmb3IgdXMuICAqLworICAgICAgZXhjZXB0aW9uX21hc2tfdCBtYXNrID0gRVhDX01BU0tfQkFEX0FDQ0VTUzsKKyAgICAgIC8qIENyZWF0ZSB0aGUgdGhyZWFkIGxpc3RlbmluZyBvbiB0aGUgZXhjZXB0aW9uIHBvcnQuICAqLworICAgICAgcHRocmVhZF9hdHRyX3QgYXR0cjsKKyAgICAgIHB0aHJlYWRfdCB0aHJlYWQ7CisgICAgICBpZiAocHRocmVhZF9hdHRyX2luaXQgKCZhdHRyKSA9PSAwCisgICAgICAgICAgJiYgcHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlICgmYXR0ciwgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQpID09IDAKKyAgICAgICAgICAmJiBwdGhyZWFkX2NyZWF0ZSAoJnRocmVhZCwgJmF0dHIsIG1hY2hfZXhjZXB0aW9uX3RocmVhZCwgTlVMTCkgPT0gMCkgeworICAgICAgICBwdGhyZWFkX2F0dHJfZGVzdHJveSAoJmF0dHIpOworICAgICAgICAvKiBSZXBsYWNlIHRoZSBleGNlcHRpb24gcG9ydCBpbmZvIGZvciB0aGVzZSBleGNlcHRpb25zIHdpdGggb3VyIG93bi4KKyAgICAgICAgICAgTm90ZSB0aGF0IHdlIHJlcGxhY2UgdGhlIGV4Y2VwdGlvbiBwb3J0IGZvciB0aGUgZW50aXJlIHRhc2ssIG5vdCBvbmx5CisgICAgICAgICAgIGZvciBhIHBhcnRpY3VsYXIgdGhyZWFkLiAgVGhpcyBoYXMgdGhlIGVmZmVjdCB0aGF0IHdoZW4gb3VyIGV4Y2VwdGlvbgorICAgICAgICAgICBwb3J0IGdldHMgdGhlIG1lc3NhZ2UsIHRoZSB0aHJlYWQgc3BlY2lmaWMgZXhjZXB0aW9uIHBvcnQgaGFzIGFscmVhZHkKKyAgICAgICAgICAgYmVlbiBhc2tlZCwgYW5kIHdlIGRvbid0IG5lZWQgdG8gYm90aGVyIGFib3V0IGl0LgorICAgICAgICAgICBTZWUgaHR0cDovL3dlYi5taXQuZWR1L2Rhcndpbi9zcmMvbW9kdWxlcy94bnUvb3NmbWsvbWFuL3Rhc2tfc2V0X2V4Y2VwdGlvbl9wb3J0cy5odG1sLiAgKi8KKyAgICAgICAgdGFza19zZXRfZXhjZXB0aW9uX3BvcnRzIChzZWxmLCBtYXNrLCBvdXJfZXhjZXB0aW9uX3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhDRVBUSU9OX0RFRkFVTFQsIE1BQ0hJTkVfVEhSRUFEX1NUQVRFKTsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKyNlbGlmIChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgISBkZWZpbmVkIF9fQ1lHV0lOX18KKy8qIEF2b2lkIGEgY3Jhc2ggb24gbmF0aXZlIFdpbmRvd3MuICAqLworI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHdpbmVycm9yLmg+CitzdGF0aWMgTE9ORyBXSU5BUEkKK2V4Y2VwdGlvbl9maWx0ZXIgKEVYQ0VQVElPTl9QT0lOVEVSUyAqRXhjZXB0aW9uSW5mbykKK3sKKyAgc3dpdGNoIChFeGNlcHRpb25JbmZvLT5FeGNlcHRpb25SZWNvcmQtPkV4Y2VwdGlvbkNvZGUpCisgICAgeworICAgIGNhc2UgRVhDRVBUSU9OX0FDQ0VTU19WSU9MQVRJT046CisgICAgY2FzZSBFWENFUFRJT05fSU5fUEFHRV9FUlJPUjoKKyAgICBjYXNlIEVYQ0VQVElPTl9TVEFDS19PVkVSRkxPVzoKKyAgICBjYXNlIEVYQ0VQVElPTl9HVUFSRF9QQUdFOgorICAgIGNhc2UgRVhDRVBUSU9OX1BSSVZfSU5TVFJVQ1RJT046CisgICAgY2FzZSBFWENFUFRJT05fSUxMRUdBTF9JTlNUUlVDVElPTjoKKyAgICBjYXNlIEVYQ0VQVElPTl9EQVRBVFlQRV9NSVNBTElHTk1FTlQ6CisgICAgY2FzZSBFWENFUFRJT05fQVJSQVlfQk9VTkRTX0VYQ0VFREVEOgorICAgIGNhc2UgRVhDRVBUSU9OX05PTkNPTlRJTlVBQkxFX0VYQ0VQVElPTjoKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKyAgcmV0dXJuIEVYQ0VQVElPTl9DT05USU5VRV9TRUFSQ0g7Cit9CitzdGF0aWMgdm9pZAorbm9jcmFzaF9pbml0ICh2b2lkKQoreworICBTZXRVbmhhbmRsZWRFeGNlcHRpb25GaWx0ZXIgKChMUFRPUF9MRVZFTF9FWENFUFRJT05fRklMVEVSKSBleGNlcHRpb25fZmlsdGVyKTsKK30KKyNlbHNlCisvKiBBdm9pZCBhIGNyYXNoIG9uIFBPU0lYIHN5c3RlbXMuICAqLworI2luY2x1ZGUgPHNpZ25hbC5oPgorLyogQSBQT1NJWCBzaWduYWwgaGFuZGxlci4gICovCitzdGF0aWMgdm9pZAorZXhjZXB0aW9uX2hhbmRsZXIgKGludCBzaWcpCit7CisgIGV4aXQgKDEpOworfQorc3RhdGljIHZvaWQKK25vY3Jhc2hfaW5pdCAodm9pZCkKK3sKKyNpZmRlZiBTSUdTRUdWCisgIHNpZ25hbCAoU0lHU0VHViwgZXhjZXB0aW9uX2hhbmRsZXIpOworI2VuZGlmCisjaWZkZWYgU0lHQlVTCisgIHNpZ25hbCAoU0lHQlVTLCBleGNlcHRpb25faGFuZGxlcik7CisjZW5kaWYKK30KKyNlbmRpZgorCisKK2ludAorbWFpbiAoKQoreworCisgICAgICAgICAgICAgaW50IHJlc3VsdCA9IDA7CisKKyAgICAgICAgICAgICBub2NyYXNoX2luaXQoKTsKKworICAgICAgICAgICAgIC8qIFRoaXMgY29kZSBzdWNjZWVkcyBvbiBnbGliYyAyLjgsIE9wZW5CU0QgNC4wLCBDeWd3aW4sIG1pbmd3LAorICAgICAgICAgICAgICAgIGFuZCBmYWlscyBvbiBNYWMgT1MgWCAxMC41LCBBSVggNS4yLCBIUC1VWCAxMSwgSVJJWCA2LjUsCisgICAgICAgICAgICAgICAgT1NGLzEgNS4xLCBTb2xhcmlzIDEwLiAgKi8KKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBzdGF0aWMgY2hhciBjb25mdGVzdFtdID0gImNvbmZ0ZXN0IjsKKyAgICAgICAgICAgICAgIHN0YXRpYyBjaGFyIHBsdXNbXSA9ICItKyI7CisgICAgICAgICAgICAgICBjaGFyICphcmd2WzNdID0geyBjb25mdGVzdCwgcGx1cywgTlVMTCB9OworICAgICAgICAgICAgICAgb3B0ZXJyID0gMDsKKyAgICAgICAgICAgICAgIGlmIChnZXRvcHQgKDIsIGFyZ3YsICIrYSIpICE9ICc/JykKKyAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDE7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIC8qIFRoaXMgY29kZSBzdWNjZWVkcyBvbiBnbGliYyAyLjgsIG1pbmd3LAorICAgICAgICAgICAgICAgIGFuZCBmYWlscyBvbiBNYWMgT1MgWCAxMC41LCBPcGVuQlNEIDQuMCwgQUlYIDUuMiwgSFAtVVggMTEsCisgICAgICAgICAgICAgICAgSVJJWCA2LjUsIE9TRi8xIDUuMSwgU29sYXJpcyAxMCwgQ3lnd2luIDEuNS54LiAgKi8KKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBzdGF0aWMgY2hhciBwcm9ncmFtW10gPSAicHJvZ3JhbSI7CisgICAgICAgICAgICAgICBzdGF0aWMgY2hhciBwW10gPSAiLXAiOworICAgICAgICAgICAgICAgc3RhdGljIGNoYXIgZm9vW10gPSAiZm9vIjsKKyAgICAgICAgICAgICAgIHN0YXRpYyBjaGFyIGJhcltdID0gImJhciI7CisgICAgICAgICAgICAgICBjaGFyICphcmd2W10gPSB7IHByb2dyYW0sIHAsIGZvbywgYmFyLCBOVUxMIH07CisKKyAgICAgICAgICAgICAgIG9wdGluZCA9IDE7CisgICAgICAgICAgICAgICBpZiAoZ2V0b3B0ICg0LCBhcmd2LCAicDo6IikgIT0gJ3AnKQorICAgICAgICAgICAgICAgICByZXN1bHQgfD0gMjsKKyAgICAgICAgICAgICAgIGVsc2UgaWYgKG9wdGFyZyAhPSBOVUxMKQorICAgICAgICAgICAgICAgICByZXN1bHQgfD0gNDsKKyAgICAgICAgICAgICAgIGVsc2UgaWYgKGdldG9wdCAoNCwgYXJndiwgInA6OiIpICE9IC0xKQorICAgICAgICAgICAgICAgICByZXN1bHQgfD0gNjsKKyAgICAgICAgICAgICAgIGVsc2UgaWYgKG9wdGluZCAhPSAyKQorICAgICAgICAgICAgICAgICByZXN1bHQgfD0gODsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgLyogVGhpcyBjb2RlIHN1Y2NlZWRzIG9uIGdsaWJjIDIuOCBhbmQgZmFpbHMgb24gQ3lnd2luIDEuNy4wLiAgKi8KKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBzdGF0aWMgY2hhciBwcm9ncmFtW10gPSAicHJvZ3JhbSI7CisgICAgICAgICAgICAgICBzdGF0aWMgY2hhciBmb29bXSA9ICJmb28iOworICAgICAgICAgICAgICAgc3RhdGljIGNoYXIgcFtdID0gIi1wIjsKKyAgICAgICAgICAgICAgIGNoYXIgKmFyZ3ZbXSA9IHsgcHJvZ3JhbSwgZm9vLCBwLCBOVUxMIH07CisgICAgICAgICAgICAgICBvcHRpbmQgPSAwOworICAgICAgICAgICAgICAgaWYgKGdldG9wdCAoMywgYXJndiwgIi1wIikgIT0gMSkKKyAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDE2OworICAgICAgICAgICAgICAgZWxzZSBpZiAoZ2V0b3B0ICgzLCBhcmd2LCAiLXAiKSAhPSAncCcpCisgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSAxNjsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgLyogVGhpcyBjb2RlIGZhaWxzIG9uIGdsaWJjIDIuMTEuICAqLworICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIHN0YXRpYyBjaGFyIHByb2dyYW1bXSA9ICJwcm9ncmFtIjsKKyAgICAgICAgICAgICAgIHN0YXRpYyBjaGFyIGJbXSA9ICItYiI7CisgICAgICAgICAgICAgICBzdGF0aWMgY2hhciBhW10gPSAiLWEiOworICAgICAgICAgICAgICAgY2hhciAqYXJndltdID0geyBwcm9ncmFtLCBiLCBhLCBOVUxMIH07CisgICAgICAgICAgICAgICBvcHRpbmQgPSBvcHRlcnIgPSAwOworICAgICAgICAgICAgICAgaWYgKGdldG9wdCAoMywgYXJndiwgIis6YTpiIikgIT0gJ2InKQorICAgICAgICAgICAgICAgICByZXN1bHQgfD0gMzI7CisgICAgICAgICAgICAgICBlbHNlIGlmIChnZXRvcHQgKDMsIGFyZ3YsICIrOmE6YiIpICE9ICc6JykKKyAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDMyOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAvKiBUaGlzIGNvZGUgZHVtcHMgY29yZSBvbiBnbGliYyAyLjE0LiAgKi8KKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBzdGF0aWMgY2hhciBwcm9ncmFtW10gPSAicHJvZ3JhbSI7CisgICAgICAgICAgICAgICBzdGF0aWMgY2hhciB3W10gPSAiLVciOworICAgICAgICAgICAgICAgc3RhdGljIGNoYXIgZHVtbXlbXSA9ICJkdW1teSI7CisgICAgICAgICAgICAgICBjaGFyICphcmd2W10gPSB7IHByb2dyYW0sIHcsIGR1bW15LCBOVUxMIH07CisgICAgICAgICAgICAgICBvcHRpbmQgPSBvcHRlcnIgPSAxOworICAgICAgICAgICAgICAgaWYgKGdldG9wdCAoMywgYXJndiwgIlc7IikgIT0gJ1cnKQorICAgICAgICAgICAgICAgICByZXN1bHQgfD0gNjQ7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfZ2V0b3B0X2dudT15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19nZXRvcHRfZ251PW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworICAgICAgIGNhc2UgJGdsX2hhZF9QT1NJWExZX0NPUlJFQ1QgaW4KKyAgICAgICAgIGV4cG9ydGVkKSA7OworICAgICAgICAgeWVzKSB7IFBPU0lYTFlfQ09SUkVDVD07IHVuc2V0IFBPU0lYTFlfQ09SUkVDVDt9OyBQT1NJWExZX0NPUlJFQ1Q9MSA7OworICAgICAgICAgKikgeyBQT1NJWExZX0NPUlJFQ1Q9OyB1bnNldCBQT1NJWExZX0NPUlJFQ1Q7fSA7OworICAgICAgIGVzYWMKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19nZXRvcHRfZ251IiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19nZXRvcHRfZ251IiA+JjY7IH0KKyAgICBpZiB0ZXN0ICIkZ2xfY3ZfZnVuY19nZXRvcHRfZ251IiAhPSB5ZXM7IHRoZW4KKyAgICAgIGdsX3JlcGxhY2VfZ2V0b3B0PXllcworICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdvcmtpbmcgR05VIGdldG9wdF9sb25nIGZ1bmN0aW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB3b3JraW5nIEdOVSBnZXRvcHRfbG9uZyBmdW5jdGlvbi4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX2dldG9wdF9sb25nX2dudSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgIG9wZW5ic2QqKSBnbF9jdl9mdW5jX2dldG9wdF9sb25nX2dudT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgICAgKikgICAgICAgIGdsX2N2X2Z1bmNfZ2V0b3B0X2xvbmdfZ251PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgIGVzYWMKKworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGRlZi5oPgorICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzdHJpbmcuaD4KKworaW50CittYWluICgpCit7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9CisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHsgInh0cmVtZWx5LSIsbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIDEwMDMgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAieHRyYSIsICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgMTAwMSB9LAorICAgICAgICAgICAgICAgICAgICB7ICJ4dHJlbWUiLCAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAxMDAyIH0sCisgICAgICAgICAgICAgICAgICAgIHsgInh0cmVtZWx5Iiwgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIDEwMDMgfSwKKyAgICAgICAgICAgICAgICAgICAgeyBOVUxMLCAgICAgICAwLCAgICAgICAgICAgICAgICAgTlVMTCwgMCB9CisgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIC8qIFRoaXMgY29kZSBmYWlscyBvbiBPcGVuQlNEIDUuMC4gICovCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgc3RhdGljIGNoYXIgcHJvZ3JhbVtdID0gInByb2dyYW0iOworICAgICAgICAgICAgICAgICAgc3RhdGljIGNoYXIgeHRyZW1lbFtdID0gIi0teHRyZW1lbCI7CisgICAgICAgICAgICAgICAgICBjaGFyICphcmd2W10gPSB7IHByb2dyYW0sIHh0cmVtZWwsIE5VTEwgfTsKKyAgICAgICAgICAgICAgICAgIGludCBvcHRpb25faW5kZXg7CisgICAgICAgICAgICAgICAgICBvcHRpbmQgPSAxOyBvcHRlcnIgPSAwOworICAgICAgICAgICAgICAgICAgaWYgKGdldG9wdF9sb25nICgyLCBhcmd2LCAiIiwgbG9uZ19vcHRpb25zLCAmb3B0aW9uX2luZGV4KSAhPSAxMDAzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfZ2V0b3B0X2xvbmdfZ251PXllcworZWxzZQorICBnbF9jdl9mdW5jX2dldG9wdF9sb25nX2dudT1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19nZXRvcHRfbG9uZ19nbnUiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2dldG9wdF9sb25nX2dudSIgPiY2OyB9CisgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19nZXRvcHRfbG9uZ19nbnUiIGluCisgICAgICAgICp5ZXMpIDs7CisgICAgICAgICopIGdsX3JlcGxhY2VfZ2V0b3B0PXllcyA7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCisKKworCisKKworCisgICAgUkVQTEFDRV9HRVRPUFQ9MAorICAgIGlmIHRlc3QgLW4gIiRnbF9yZXBsYWNlX2dldG9wdCI7IHRoZW4KKyAgICAgIFJFUExBQ0VfR0VUT1BUPTEKKyAgICBmaQorCisgIGlmIHRlc3QgJFJFUExBQ0VfR0VUT1BUID0gMTsgdGhlbgorCisgIEdFVE9QVF9IPWdldG9wdC5oCisKKyRhc19lY2hvICIjZGVmaW5lIF9fR0VUT1BUX1BSRUZJWCBycGxfIiA+PmNvbmZkZWZzLmgKKworCisKKyAgZmkKKworYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiZ2V0ZW52IiAiYWNfY3ZfaGF2ZV9kZWNsX2dldGVudiIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfZ2V0ZW52IiA9IHh5ZXM7IHRoZW4gOgorICBhY19oYXZlX2RlY2w9MQorZWxzZQorICBhY19oYXZlX2RlY2w9MAorZmkKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfR0VURU5WICRhY19oYXZlX2RlY2wKK19BQ0VPRgorCisKKworCisKKworCisKKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50ID0geWVzOyB0aGVuCisgICAgSEFWRV9MT05HX0xPTkdfSU5UPTEKKyAgZWxzZQorICAgIEhBVkVfTE9OR19MT05HX0lOVD0wCisgIGZpCisKKworICBpZiB0ZXN0ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQgPSB5ZXM7IHRoZW4KKyAgICBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQ9MQorICBlbHNlCisgICAgSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UPTAKKyAgZmkKKworCisKKyAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3djaGFyX2ggPSB5ZXM7IHRoZW4KKyAgICBIQVZFX1dDSEFSX0g9MQorICBlbHNlCisgICAgSEFWRV9XQ0hBUl9IPTAKKyAgZmkKKworCisgICAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHllczsgdGhlbgorICAgIEhBVkVfSU5UVFlQRVNfSD0xCisgIGVsc2UKKyAgICBIQVZFX0lOVFRZUEVTX0g9MAorICBmaQorCisKKyAgICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfdHlwZXNfaCA9IHllczsgdGhlbgorICAgIEhBVkVfU1lTX1RZUEVTX0g9MQorICBlbHNlCisgICAgSEFWRV9TWVNfVFlQRVNfSD0wCisgIGZpCisKKworCisKKworCisKKworCisKKworICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllczsgdGhlbgorICAgICAgIGdsX2N2X25leHRfc3RkaW50X2g9Jzwnc3RkaW50LmgnPicKKyAgICAgZWxzZQorICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8c3RkaW50Lmg+IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHN0ZGludC5oPi4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9uZXh0X3N0ZGludF9oKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgICAgICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRpbnRfaCA9IHllczsgdGhlbgorCisKKyAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworX0FDRU9GCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgYWl4KikgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAgLUMiIDs7CisgICAgICAgICAgICAgICAgICopICAgIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIiA7OworICAgICAgICAgICAgICAgZXNhYworCisgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgbWluZ3cqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2RpcnNlcF9yZWdleD0nWy9cXF0nCisgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICBnbF9kaXJzZXBfcmVnZXg9J1wvJworICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9tYWtlX2xpdGVyYWxfcmVnZXhfc2VkPSdzLFtdJF5cXC4qL1tdLFxcJixnJworCisgICAgICAgICAgICAgICBnbF9oZWFkZXJfbGl0ZXJhbF9yZWdleD1gZWNobyAnc3RkaW50LmgnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAiJGdsX21ha2VfbGl0ZXJhbF9yZWdleF9zZWQiYAorICAgICAgICAgICAgICAgZ2xfYWJzb2x1dGVfaGVhZGVyX3NlZD0iLyR7Z2xfZGlyc2VwX3JlZ2V4fSR7Z2xfaGVhZGVyX2xpdGVyYWxfcmVnZXh9LyIneworICAgICAgICAgICAgICAgICAgIHMvLioiXCguKiciJHtnbF9kaXJzZXBfcmVnZXh9JHtnbF9oZWFkZXJfbGl0ZXJhbF9yZWdleH0iJ1wpIi4qL1wxLworICAgICAgICAgICAgICAgICAgIHN8Xi9bXi9dfC8vJnwKKyAgICAgICAgICAgICAgICAgICBwCisgICAgICAgICAgICAgICAgICAgcQorICAgICAgICAgICAgICAgICB9JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfbmV4dF9zdGRpbnRfaD0nIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICAgICAgICAgICAgICAgICAgICAgc2VkIC1uICIkZ2xfYWJzb2x1dGVfaGVhZGVyX3NlZCJgJyInCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgZ2xfY3ZfbmV4dF9zdGRpbnRfaD0nPCdzdGRpbnQuaCc+JworICAgICAgICAgICAgIGZpCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfbmV4dF9zdGRpbnRfaCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X25leHRfc3RkaW50X2giID4mNjsgfQorICAgICBmaQorICAgICBORVhUX1NURElOVF9IPSRnbF9jdl9uZXh0X3N0ZGludF9oCisKKyAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXMgfHwgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSBidWdneTsgdGhlbgorICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZV9uZXh0JworICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSc8J3N0ZGludC5oJz4nCisgICAgIGVsc2UKKyAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGUnCisgICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9JGdsX2N2X25leHRfc3RkaW50X2gKKyAgICAgZmkKKyAgICAgTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RESU5UX0g9JGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlCisKKworCisKKyAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGludF9oID0geWVzOyB0aGVuCisgICAgSEFWRV9TVERJTlRfSD0xCisgIGVsc2UKKyAgICBIQVZFX1NURElOVF9IPTAKKyAgZmkKKworCisgICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGludF9oID0geWVzOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHN0ZGludC5oIGNvbmZvcm1zIHRvIEM5OSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHN0ZGludC5oIGNvbmZvcm1zIHRvIEM5OS4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9oZWFkZXJfd29ya2luZ19zdGRpbnRfaCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGdsX2N2X2hlYWRlcl93b3JraW5nX3N0ZGludF9oPW5vCisgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgX0dMX0pVU1RfSU5DTFVERV9TWVNURU1fU1RESU5UX0ggMSAvKiB3b3JrIGlmIGJ1aWxkIGlzbid0IGNsZWFuICovCisjaW5jbHVkZSA8c3RkaW50Lmg+CisvKiBEcmFnb25mbHkgZGVmaW5lcyBXQ0hBUl9NSU4sIFdDSEFSX01BWCBvbmx5IGluIDx3Y2hhci5oPi4gICovCisjaWYgIShkZWZpbmVkIFdDSEFSX01JTiAmJiBkZWZpbmVkIFdDSEFSX01BWCkKKyNlcnJvciAiV0NIQVJfTUlOLCBXQ0hBUl9NQVggbm90IGRlZmluZWQgaW4gPHN0ZGludC5oPiIKKyNlbmRpZgorCisKKyAgLyogQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLworICAjaW5jbHVkZSA8c3RkZGVmLmg+CisgICNpbmNsdWRlIDxzaWduYWwuaD4KKyAgI2lmIEhBVkVfV0NIQVJfSAorICAjIGluY2x1ZGUgPHN0ZGlvLmg+CisgICMgaW5jbHVkZSA8dGltZS5oPgorICAjIGluY2x1ZGUgPHdjaGFyLmg+CisgICNlbmRpZgorCisKKyNpZmRlZiBJTlQ4X01BWAoraW50OF90IGExID0gSU5UOF9NQVg7CitpbnQ4X3QgYTFtaW4gPSBJTlQ4X01JTjsKKyNlbmRpZgorI2lmZGVmIElOVDE2X01BWAoraW50MTZfdCBhMiA9IElOVDE2X01BWDsKK2ludDE2X3QgYTJtaW4gPSBJTlQxNl9NSU47CisjZW5kaWYKKyNpZmRlZiBJTlQzMl9NQVgKK2ludDMyX3QgYTMgPSBJTlQzMl9NQVg7CitpbnQzMl90IGEzbWluID0gSU5UMzJfTUlOOworI2VuZGlmCisjaWZkZWYgSU5UNjRfTUFYCitpbnQ2NF90IGE0ID0gSU5UNjRfTUFYOworaW50NjRfdCBhNG1pbiA9IElOVDY0X01JTjsKKyNlbmRpZgorI2lmZGVmIFVJTlQ4X01BWAordWludDhfdCBiMSA9IFVJTlQ4X01BWDsKKyNlbHNlCit0eXBlZGVmIGludCBiMVsodW5zaWduZWQgY2hhcikgLTEgIT0gMjU1ID8gMSA6IC0xXTsKKyNlbmRpZgorI2lmZGVmIFVJTlQxNl9NQVgKK3VpbnQxNl90IGIyID0gVUlOVDE2X01BWDsKKyNlbmRpZgorI2lmZGVmIFVJTlQzMl9NQVgKK3VpbnQzMl90IGIzID0gVUlOVDMyX01BWDsKKyNlbmRpZgorI2lmZGVmIFVJTlQ2NF9NQVgKK3VpbnQ2NF90IGI0ID0gVUlOVDY0X01BWDsKKyNlbmRpZgoraW50X2xlYXN0OF90IGMxID0gSU5UOF9DICgweDdmKTsKK2ludF9sZWFzdDhfdCBjMW1heCA9IElOVF9MRUFTVDhfTUFYOworaW50X2xlYXN0OF90IGMxbWluID0gSU5UX0xFQVNUOF9NSU47CitpbnRfbGVhc3QxNl90IGMyID0gSU5UMTZfQyAoMHg3ZmZmKTsKK2ludF9sZWFzdDE2X3QgYzJtYXggPSBJTlRfTEVBU1QxNl9NQVg7CitpbnRfbGVhc3QxNl90IGMybWluID0gSU5UX0xFQVNUMTZfTUlOOworaW50X2xlYXN0MzJfdCBjMyA9IElOVDMyX0MgKDB4N2ZmZmZmZmYpOworaW50X2xlYXN0MzJfdCBjM21heCA9IElOVF9MRUFTVDMyX01BWDsKK2ludF9sZWFzdDMyX3QgYzNtaW4gPSBJTlRfTEVBU1QzMl9NSU47CitpbnRfbGVhc3Q2NF90IGM0ID0gSU5UNjRfQyAoMHg3ZmZmZmZmZmZmZmZmZmZmKTsKK2ludF9sZWFzdDY0X3QgYzRtYXggPSBJTlRfTEVBU1Q2NF9NQVg7CitpbnRfbGVhc3Q2NF90IGM0bWluID0gSU5UX0xFQVNUNjRfTUlOOwordWludF9sZWFzdDhfdCBkMSA9IFVJTlQ4X0MgKDB4ZmYpOwordWludF9sZWFzdDhfdCBkMW1heCA9IFVJTlRfTEVBU1Q4X01BWDsKK3VpbnRfbGVhc3QxNl90IGQyID0gVUlOVDE2X0MgKDB4ZmZmZik7Cit1aW50X2xlYXN0MTZfdCBkMm1heCA9IFVJTlRfTEVBU1QxNl9NQVg7Cit1aW50X2xlYXN0MzJfdCBkMyA9IFVJTlQzMl9DICgweGZmZmZmZmZmKTsKK3VpbnRfbGVhc3QzMl90IGQzbWF4ID0gVUlOVF9MRUFTVDMyX01BWDsKK3VpbnRfbGVhc3Q2NF90IGQ0ID0gVUlOVDY0X0MgKDB4ZmZmZmZmZmZmZmZmZmZmZik7Cit1aW50X2xlYXN0NjRfdCBkNG1heCA9IFVJTlRfTEVBU1Q2NF9NQVg7CitpbnRfZmFzdDhfdCBlMSA9IElOVF9GQVNUOF9NQVg7CitpbnRfZmFzdDhfdCBlMW1pbiA9IElOVF9GQVNUOF9NSU47CitpbnRfZmFzdDE2X3QgZTIgPSBJTlRfRkFTVDE2X01BWDsKK2ludF9mYXN0MTZfdCBlMm1pbiA9IElOVF9GQVNUMTZfTUlOOworaW50X2Zhc3QzMl90IGUzID0gSU5UX0ZBU1QzMl9NQVg7CitpbnRfZmFzdDMyX3QgZTNtaW4gPSBJTlRfRkFTVDMyX01JTjsKK2ludF9mYXN0NjRfdCBlNCA9IElOVF9GQVNUNjRfTUFYOworaW50X2Zhc3Q2NF90IGU0bWluID0gSU5UX0ZBU1Q2NF9NSU47Cit1aW50X2Zhc3Q4X3QgZjEgPSBVSU5UX0ZBU1Q4X01BWDsKK3VpbnRfZmFzdDE2X3QgZjIgPSBVSU5UX0ZBU1QxNl9NQVg7Cit1aW50X2Zhc3QzMl90IGYzID0gVUlOVF9GQVNUMzJfTUFYOwordWludF9mYXN0NjRfdCBmNCA9IFVJTlRfRkFTVDY0X01BWDsKKyNpZmRlZiBJTlRQVFJfTUFYCitpbnRwdHJfdCBnID0gSU5UUFRSX01BWDsKK2ludHB0cl90IGdtaW4gPSBJTlRQVFJfTUlOOworI2VuZGlmCisjaWZkZWYgVUlOVFBUUl9NQVgKK3VpbnRwdHJfdCBoID0gVUlOVFBUUl9NQVg7CisjZW5kaWYKK2ludG1heF90IGkgPSBJTlRNQVhfTUFYOwordWludG1heF90IGogPSBVSU5UTUFYX01BWDsKKworI2luY2x1ZGUgPGxpbWl0cy5oPiAvKiBmb3IgQ0hBUl9CSVQgKi8KKyNkZWZpbmUgVFlQRV9NSU5JTVVNKHQpIFwKKyAgKCh0KSAoKHQpIDAgPCAodCkgLTEgPyAodCkgMCA6IH4gVFlQRV9NQVhJTVVNICh0KSkpCisjZGVmaW5lIFRZUEVfTUFYSU1VTSh0KSBcCisgICgodCkgKCh0KSAwIDwgKHQpIC0xIFwKKyAgICAgICAgPyAodCkgLTEgXAorICAgICAgICA6ICgoKCh0KSAxIDw8IChzaXplb2YgKHQpICogQ0hBUl9CSVQgLSAyKSkgLSAxKSAqIDIgKyAxKSkpCitzdHJ1Y3QgcyB7CisgIGludCBjaGVja19QVFJESUZGOgorICAgICAgUFRSRElGRl9NSU4gPT0gVFlQRV9NSU5JTVVNIChwdHJkaWZmX3QpCisgICAgICAmJiBQVFJESUZGX01BWCA9PSBUWVBFX01BWElNVU0gKHB0cmRpZmZfdCkKKyAgICAgID8gMSA6IC0xOworICAvKiBEZXRlY3QgYnVnIGluIEZyZWVCU0QgNi4wIC8gaWE2NC4gICovCisgIGludCBjaGVja19TSUdfQVRPTUlDOgorICAgICAgU0lHX0FUT01JQ19NSU4gPT0gVFlQRV9NSU5JTVVNIChzaWdfYXRvbWljX3QpCisgICAgICAmJiBTSUdfQVRPTUlDX01BWCA9PSBUWVBFX01BWElNVU0gKHNpZ19hdG9taWNfdCkKKyAgICAgID8gMSA6IC0xOworICBpbnQgY2hlY2tfU0laRTogU0laRV9NQVggPT0gVFlQRV9NQVhJTVVNIChzaXplX3QpID8gMSA6IC0xOworICBpbnQgY2hlY2tfV0NIQVI6CisgICAgICBXQ0hBUl9NSU4gPT0gVFlQRV9NSU5JTVVNICh3Y2hhcl90KQorICAgICAgJiYgV0NIQVJfTUFYID09IFRZUEVfTUFYSU1VTSAod2NoYXJfdCkKKyAgICAgID8gMSA6IC0xOworICAvKiBEZXRlY3QgYnVnIGluIG1pbmd3LiAgKi8KKyAgaW50IGNoZWNrX1dJTlQ6CisgICAgICBXSU5UX01JTiA9PSBUWVBFX01JTklNVU0gKHdpbnRfdCkKKyAgICAgICYmIFdJTlRfTUFYID09IFRZUEVfTUFYSU1VTSAod2ludF90KQorICAgICAgPyAxIDogLTE7CisKKyAgLyogRGV0ZWN0IGJ1Z3MgaW4gZ2xpYmMgMi40IGFuZCBTb2xhcmlzIDEwIHN0ZGludC5oLCBhbW9uZyBvdGhlcnMuICAqLworICBpbnQgY2hlY2tfVUlOVDhfQzoKKyAgICAgICAgKC0xIDwgVUlOVDhfQyAoMCkpID09ICgtMSA8ICh1aW50X2xlYXN0OF90KSAwKSA/IDEgOiAtMTsKKyAgaW50IGNoZWNrX1VJTlQxNl9DOgorICAgICAgICAoLTEgPCBVSU5UMTZfQyAoMCkpID09ICgtMSA8ICh1aW50X2xlYXN0MTZfdCkgMCkgPyAxIDogLTE7CisKKyAgLyogRGV0ZWN0IGJ1Z3MgaW4gT3BlbkJTRCAzLjkgc3RkaW50LmguICAqLworI2lmZGVmIFVJTlQ4X01BWAorICBpbnQgY2hlY2tfdWludDg6ICh1aW50OF90KSAtMSA9PSBVSU5UOF9NQVggPyAxIDogLTE7CisjZW5kaWYKKyNpZmRlZiBVSU5UMTZfTUFYCisgIGludCBjaGVja191aW50MTY6ICh1aW50MTZfdCkgLTEgPT0gVUlOVDE2X01BWCA/IDEgOiAtMTsKKyNlbmRpZgorI2lmZGVmIFVJTlQzMl9NQVgKKyAgaW50IGNoZWNrX3VpbnQzMjogKHVpbnQzMl90KSAtMSA9PSBVSU5UMzJfTUFYID8gMSA6IC0xOworI2VuZGlmCisjaWZkZWYgVUlOVDY0X01BWAorICBpbnQgY2hlY2tfdWludDY0OiAodWludDY0X3QpIC0xID09IFVJTlQ2NF9NQVggPyAxIDogLTE7CisjZW5kaWYKKyAgaW50IGNoZWNrX3VpbnRfbGVhc3Q4OiAodWludF9sZWFzdDhfdCkgLTEgPT0gVUlOVF9MRUFTVDhfTUFYID8gMSA6IC0xOworICBpbnQgY2hlY2tfdWludF9sZWFzdDE2OiAodWludF9sZWFzdDE2X3QpIC0xID09IFVJTlRfTEVBU1QxNl9NQVggPyAxIDogLTE7CisgIGludCBjaGVja191aW50X2xlYXN0MzI6ICh1aW50X2xlYXN0MzJfdCkgLTEgPT0gVUlOVF9MRUFTVDMyX01BWCA/IDEgOiAtMTsKKyAgaW50IGNoZWNrX3VpbnRfbGVhc3Q2NDogKHVpbnRfbGVhc3Q2NF90KSAtMSA9PSBVSU5UX0xFQVNUNjRfTUFYID8gMSA6IC0xOworICBpbnQgY2hlY2tfdWludF9mYXN0ODogKHVpbnRfZmFzdDhfdCkgLTEgPT0gVUlOVF9GQVNUOF9NQVggPyAxIDogLTE7CisgIGludCBjaGVja191aW50X2Zhc3QxNjogKHVpbnRfZmFzdDE2X3QpIC0xID09IFVJTlRfRkFTVDE2X01BWCA/IDEgOiAtMTsKKyAgaW50IGNoZWNrX3VpbnRfZmFzdDMyOiAodWludF9mYXN0MzJfdCkgLTEgPT0gVUlOVF9GQVNUMzJfTUFYID8gMSA6IC0xOworICBpbnQgY2hlY2tfdWludF9mYXN0NjQ6ICh1aW50X2Zhc3Q2NF90KSAtMSA9PSBVSU5UX0ZBU1Q2NF9NQVggPyAxIDogLTE7CisgIGludCBjaGVja191aW50cHRyOiAodWludHB0cl90KSAtMSA9PSBVSU5UUFRSX01BWCA/IDEgOiAtMTsKKyAgaW50IGNoZWNrX3VpbnRtYXg6ICh1aW50bWF4X3QpIC0xID09IFVJTlRNQVhfTUFYID8gMSA6IC0xOworICBpbnQgY2hlY2tfc2l6ZTogKHNpemVfdCkgLTEgPT0gU0laRV9NQVggPyAxIDogLTE7Cit9OworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICAgICAgICAgICAgICAgICBnbF9jdl9oZWFkZXJfd29ya2luZ19zdGRpbnRfaD15ZXMKKworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBfR0xfSlVTVF9JTkNMVURFX1NZU1RFTV9TVERJTlRfSCAxIC8qIHdvcmsgaWYgYnVpbGQgaXNuJ3QgY2xlYW4gKi8KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworCisgIC8qIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZQorICAgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyAgI2luY2x1ZGUgPHN0ZGRlZi5oPgorICAjaW5jbHVkZSA8c2lnbmFsLmg+CisgICNpZiBIQVZFX1dDSEFSX0gKKyAgIyBpbmNsdWRlIDxzdGRpby5oPgorICAjIGluY2x1ZGUgPHRpbWUuaD4KKyAgIyBpbmNsdWRlIDx3Y2hhci5oPgorICAjZW5kaWYKKworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNkZWZpbmUgTVZBTChtYWNybykgTVZBTDEobWFjcm8pCisjZGVmaW5lIE1WQUwxKGV4cHJlc3Npb24pICNleHByZXNzaW9uCitzdGF0aWMgY29uc3QgY2hhciAqbWFjcm9fdmFsdWVzW10gPQorICB7CisjaWZkZWYgSU5UOF9NQVgKKyAgICBNVkFMIChJTlQ4X01BWCksCisjZW5kaWYKKyNpZmRlZiBJTlQxNl9NQVgKKyAgICBNVkFMIChJTlQxNl9NQVgpLAorI2VuZGlmCisjaWZkZWYgSU5UMzJfTUFYCisgICAgTVZBTCAoSU5UMzJfTUFYKSwKKyNlbmRpZgorI2lmZGVmIElOVDY0X01BWAorICAgIE1WQUwgKElOVDY0X01BWCksCisjZW5kaWYKKyNpZmRlZiBVSU5UOF9NQVgKKyAgICBNVkFMIChVSU5UOF9NQVgpLAorI2VuZGlmCisjaWZkZWYgVUlOVDE2X01BWAorICAgIE1WQUwgKFVJTlQxNl9NQVgpLAorI2VuZGlmCisjaWZkZWYgVUlOVDMyX01BWAorICAgIE1WQUwgKFVJTlQzMl9NQVgpLAorI2VuZGlmCisjaWZkZWYgVUlOVDY0X01BWAorICAgIE1WQUwgKFVJTlQ2NF9NQVgpLAorI2VuZGlmCisgICAgTlVMTAorICB9OworCitpbnQKK21haW4gKCkKK3sKKworICBjb25zdCBjaGFyICoqbXY7CisgIGZvciAobXYgPSBtYWNyb192YWx1ZXM7ICptdiAhPSBOVUxMOyBtdisrKQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKnZhbHVlID0gKm12OworICAgICAgLyogVGVzdCB3aGV0aGVyIGl0IGxvb2tzIGxpa2UgYSBjYXN0IGV4cHJlc3Npb24uICAqLworICAgICAgaWYgKHN0cm5jbXAgKHZhbHVlLCAiKCh1bnNpZ25lZCBpbnQpIi8qKSovLCAxNSkgPT0gMAorICAgICAgICAgIHx8IHN0cm5jbXAgKHZhbHVlLCAiKCh1bnNpZ25lZCBzaG9ydCkiLyopKi8sIDE3KSA9PSAwCisgICAgICAgICAgfHwgc3RybmNtcCAodmFsdWUsICIoKHVuc2lnbmVkIGNoYXIpIi8qKSovLCAxNikgPT0gMAorICAgICAgICAgIHx8IHN0cm5jbXAgKHZhbHVlLCAiKChpbnQpIi8qKSovLCA2KSA9PSAwCisgICAgICAgICAgfHwgc3RybmNtcCAodmFsdWUsICIoKHNpZ25lZCBzaG9ydCkiLyopKi8sIDE1KSA9PSAwCisgICAgICAgICAgfHwgc3RybmNtcCAodmFsdWUsICIoKHNpZ25lZCBjaGFyKSIvKikqLywgMTQpID09IDApCisgICAgICAgIHJldHVybiBtdiAtIG1hY3JvX3ZhbHVlcyArIDE7CisgICAgfQorICByZXR1cm4gMDsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfc3RkaW50X2g9eWVzCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2hlYWRlcl93b3JraW5nX3N0ZGludF9oIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfc3RkaW50X2giID4mNjsgfQorICBmaQorICBpZiB0ZXN0ICIkZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfc3RkaW50X2giID0geWVzOyB0aGVuCisgICAgU1RESU5UX0g9CisgIGVsc2UKKyAgICAgICAgICAgIGZvciBhY19oZWFkZXIgaW4gc3lzL2ludHR5cGVzLmggc3lzL2JpdHlwZXMuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisgICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c19pbnR0eXBlc19oID0geWVzOyB0aGVuCisgICAgICBIQVZFX1NZU19JTlRUWVBFU19IPTEKKyAgICBlbHNlCisgICAgICBIQVZFX1NZU19JTlRUWVBFU19IPTAKKyAgICBmaQorCisgICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c19iaXR5cGVzX2ggPSB5ZXM7IHRoZW4KKyAgICAgIEhBVkVfU1lTX0JJVFlQRVNfSD0xCisgICAgZWxzZQorICAgICAgSEFWRV9TWVNfQklUWVBFU19IPTAKKyAgICBmaQorCisKKworCisgIGlmIHRlc3QgJEFQUExFX1VOSVZFUlNBTF9CVUlMRCA9IDA7IHRoZW4KKworCisgIGZvciBnbHR5cGUgaW4gcHRyZGlmZl90IHNpemVfdCA7IGRvCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYml0IHNpemUgb2YgJGdsdHlwZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYml0IHNpemUgb2YgJGdsdHlwZS4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHtnbF9jdl9iaXRzaXplb2ZfJHtnbHR5cGV9Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgInNpemVvZiAoJGdsdHlwZSkgKiBDSEFSX0JJVCIgInJlc3VsdCIgICAgICAgICIKKyAgLyogQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLworICAjaW5jbHVkZSA8c3RkZGVmLmg+CisgICNpbmNsdWRlIDxzaWduYWwuaD4KKyAgI2lmIEhBVkVfV0NIQVJfSAorICAjIGluY2x1ZGUgPHN0ZGlvLmg+CisgICMgaW5jbHVkZSA8dGltZS5oPgorICAjIGluY2x1ZGUgPHdjaGFyLmg+CisgICNlbmRpZgorCisjaW5jbHVkZSA8bGltaXRzLmg+IjsgdGhlbiA6CisKK2Vsc2UKKyAgcmVzdWx0PXVua25vd24KK2ZpCisKKyAgICAgICBldmFsIGdsX2N2X2JpdHNpemVvZl8ke2dsdHlwZX09XCRyZXN1bHQKKworZmkKK2V2YWwgYWNfcmVzPVwkZ2xfY3ZfYml0c2l6ZW9mXyR7Z2x0eXBlfQorCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgICAgZXZhbCByZXN1bHQ9XCRnbF9jdl9iaXRzaXplb2ZfJHtnbHR5cGV9CisgICAgaWYgdGVzdCAkcmVzdWx0ID0gdW5rbm93bjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PTAKKyAgICBmaQorICAgIEdMVFlQRT1gZWNobyAiJGdsdHlwZSIgfCB0ciAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXogJyAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfJ2AKKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEJJVFNJWkVPRl8ke0dMVFlQRX0gJHJlc3VsdAorX0FDRU9GCisKKyAgICBldmFsIEJJVFNJWkVPRl8ke0dMVFlQRX09XCRyZXN1bHQKKyAgZG9uZQorCisKKyAgZmkKKworCisgIGZvciBnbHR5cGUgaW4gc2lnX2F0b21pY190IHdjaGFyX3Qgd2ludF90IDsgZG8KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBiaXQgc2l6ZSBvZiAkZ2x0eXBlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBiaXQgc2l6ZSBvZiAkZ2x0eXBlLi4uICIgPiY2OyB9CitpZiBldmFsIFwke2dsX2N2X2JpdHNpemVvZl8ke2dsdHlwZX0rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAic2l6ZW9mICgkZ2x0eXBlKSAqIENIQVJfQklUIiAicmVzdWx0IiAgICAgICAgIgorICAvKiBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUKKyAgICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovCisgICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgI2luY2x1ZGUgPHNpZ25hbC5oPgorICAjaWYgSEFWRV9XQ0hBUl9ICisgICMgaW5jbHVkZSA8c3RkaW8uaD4KKyAgIyBpbmNsdWRlIDx0aW1lLmg+CisgICMgaW5jbHVkZSA8d2NoYXIuaD4KKyAgI2VuZGlmCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4iOyB0aGVuIDoKKworZWxzZQorICByZXN1bHQ9dW5rbm93bgorZmkKKworICAgICAgIGV2YWwgZ2xfY3ZfYml0c2l6ZW9mXyR7Z2x0eXBlfT1cJHJlc3VsdAorCitmaQorZXZhbCBhY19yZXM9XCRnbF9jdl9iaXRzaXplb2ZfJHtnbHR5cGV9CisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgICBldmFsIHJlc3VsdD1cJGdsX2N2X2JpdHNpemVvZl8ke2dsdHlwZX0KKyAgICBpZiB0ZXN0ICRyZXN1bHQgPSB1bmtub3duOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9MAorICAgIGZpCisgICAgR0xUWVBFPWBlY2hvICIkZ2x0eXBlIiB8IHRyICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiAnICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl8nYAorICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgQklUU0laRU9GXyR7R0xUWVBFfSAkcmVzdWx0CitfQUNFT0YKKworICAgIGV2YWwgQklUU0laRU9GXyR7R0xUWVBFfT1cJHJlc3VsdAorICBkb25lCisKKworCisKKyAgZm9yIGdsdHlwZSBpbiBzaWdfYXRvbWljX3Qgd2NoYXJfdCB3aW50X3QgOyBkbworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkZ2x0eXBlIGlzIHNpZ25lZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRnbHR5cGUgaXMgc2lnbmVkLi4uICIgPiY2OyB9CitpZiBldmFsIFwke2dsX2N2X3R5cGVfJHtnbHR5cGV9X3NpZ25lZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAvKiBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUKKyAgICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovCisgICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgI2luY2x1ZGUgPHNpZ25hbC5oPgorICAjaWYgSEFWRV9XQ0hBUl9ICisgICMgaW5jbHVkZSA8c3RkaW8uaD4KKyAgIyBpbmNsdWRlIDx0aW1lLmg+CisgICMgaW5jbHVkZSA8d2NoYXIuaD4KKyAgI2VuZGlmCisKKyAgICAgICAgICAgIGludCB2ZXJpZnlbMiAqICgoJGdsdHlwZSkgLTEgPCAoJGdsdHlwZSkgMCkgLSAxXTsKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgcmVzdWx0PXllcworZWxzZQorICByZXN1bHQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICBldmFsIGdsX2N2X3R5cGVfJHtnbHR5cGV9X3NpZ25lZD1cJHJlc3VsdAorCitmaQorZXZhbCBhY19yZXM9XCRnbF9jdl90eXBlXyR7Z2x0eXBlfV9zaWduZWQKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICAgIGV2YWwgcmVzdWx0PVwkZ2xfY3ZfdHlwZV8ke2dsdHlwZX1fc2lnbmVkCisgICAgR0xUWVBFPWBlY2hvICRnbHR5cGUgfCB0ciAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXogJyAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfJ2AKKyAgICBpZiB0ZXN0ICIkcmVzdWx0IiA9IHllczsgdGhlbgorICAgICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NJR05FRF8ke0dMVFlQRX0gMQorX0FDRU9GCisKKyAgICAgIGV2YWwgSEFWRV9TSUdORURfJHtHTFRZUEV9PTEKKyAgICBlbHNlCisgICAgICBldmFsIEhBVkVfU0lHTkVEXyR7R0xUWVBFfT0wCisgICAgZmkKKyAgZG9uZQorCisKKyAgZ2xfY3ZfdHlwZV9wdHJkaWZmX3Rfc2lnbmVkPXllcworICBnbF9jdl90eXBlX3NpemVfdF9zaWduZWQ9bm8KKyAgaWYgdGVzdCAkQVBQTEVfVU5JVkVSU0FMX0JVSUxEID0gMDsgdGhlbgorCisKKyAgZm9yIGdsdHlwZSBpbiBwdHJkaWZmX3Qgc2l6ZV90IDsgZG8KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkZ2x0eXBlIGludGVnZXIgbGl0ZXJhbCBzdWZmaXgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRnbHR5cGUgaW50ZWdlciBsaXRlcmFsIHN1ZmZpeC4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHtnbF9jdl90eXBlXyR7Z2x0eXBlfV9zdWZmaXgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBldmFsIGdsX2N2X3R5cGVfJHtnbHR5cGV9X3N1ZmZpeD1ubworICAgICAgIGV2YWwgcmVzdWx0PVwkZ2xfY3ZfdHlwZV8ke2dsdHlwZX1fc2lnbmVkCisgICAgICAgaWYgdGVzdCAiJHJlc3VsdCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgIGdsc3VmdT0KKyAgICAgICBlbHNlCisgICAgICAgICBnbHN1ZnU9dQorICAgICAgIGZpCisgICAgICAgZm9yIGdsc3VmIGluICIkZ2xzdWZ1IiAke2dsc3VmdX1sICR7Z2xzdWZ1fWxsICR7Z2xzdWZ1fWk2NDsgZG8KKyAgICAgICAgIGNhc2UgJGdsc3VmIGluCisgICAgICAgICAgICcnKSAgZ2x0eXBlMT0naW50Jzs7CisgICAgICAgICAgIGwpICAgZ2x0eXBlMT0nbG9uZyBpbnQnOzsKKyAgICAgICAgICAgbGwpICBnbHR5cGUxPSdsb25nIGxvbmcgaW50Jzs7CisgICAgICAgICAgIGk2NCkgZ2x0eXBlMT0nX19pbnQ2NCc7OworICAgICAgICAgICB1KSAgIGdsdHlwZTE9J3Vuc2lnbmVkIGludCc7OworICAgICAgICAgICB1bCkgIGdsdHlwZTE9J3Vuc2lnbmVkIGxvbmcgaW50Jzs7CisgICAgICAgICAgIHVsbCkgZ2x0eXBlMT0ndW5zaWduZWQgbG9uZyBsb25nIGludCc7OworICAgICAgICAgICB1aTY0KWdsdHlwZTE9J3Vuc2lnbmVkIF9faW50NjQnOzsKKyAgICAgICAgIGVzYWMKKyAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAvKiBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUKKyAgICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovCisgICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgI2luY2x1ZGUgPHNpZ25hbC5oPgorICAjaWYgSEFWRV9XQ0hBUl9ICisgICMgaW5jbHVkZSA8c3RkaW8uaD4KKyAgIyBpbmNsdWRlIDx0aW1lLmg+CisgICMgaW5jbHVkZSA8d2NoYXIuaD4KKyAgI2VuZGlmCisKKyAgICAgICAgICAgICAgZXh0ZXJuICRnbHR5cGUgZm9vOworICAgICAgICAgICAgICBleHRlcm4gJGdsdHlwZTEgZm9vOworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsIGdsX2N2X3R5cGVfJHtnbHR5cGV9X3N1ZmZpeD1cJGdsc3VmCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICBldmFsIHJlc3VsdD1cJGdsX2N2X3R5cGVfJHtnbHR5cGV9X3N1ZmZpeAorICAgICAgICAgdGVzdCAiJHJlc3VsdCIgIT0gbm8gJiYgYnJlYWsKKyAgICAgICBkb25lCitmaQorZXZhbCBhY19yZXM9XCRnbF9jdl90eXBlXyR7Z2x0eXBlfV9zdWZmaXgKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICAgIEdMVFlQRT1gZWNobyAkZ2x0eXBlIHwgdHIgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6ICcgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXydgCisgICAgZXZhbCByZXN1bHQ9XCRnbF9jdl90eXBlXyR7Z2x0eXBlfV9zdWZmaXgKKyAgICB0ZXN0ICIkcmVzdWx0IiA9IG5vICYmIHJlc3VsdD0KKyAgICBldmFsICR7R0xUWVBFfV9TVUZGSVg9XCRyZXN1bHQKKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lICR7R0xUWVBFfV9TVUZGSVggJHJlc3VsdAorX0FDRU9GCisKKyAgZG9uZQorCisKKyAgZmkKKworCisgIGZvciBnbHR5cGUgaW4gc2lnX2F0b21pY190IHdjaGFyX3Qgd2ludF90IDsgZG8KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkZ2x0eXBlIGludGVnZXIgbGl0ZXJhbCBzdWZmaXgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRnbHR5cGUgaW50ZWdlciBsaXRlcmFsIHN1ZmZpeC4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHtnbF9jdl90eXBlXyR7Z2x0eXBlfV9zdWZmaXgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBldmFsIGdsX2N2X3R5cGVfJHtnbHR5cGV9X3N1ZmZpeD1ubworICAgICAgIGV2YWwgcmVzdWx0PVwkZ2xfY3ZfdHlwZV8ke2dsdHlwZX1fc2lnbmVkCisgICAgICAgaWYgdGVzdCAiJHJlc3VsdCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgIGdsc3VmdT0KKyAgICAgICBlbHNlCisgICAgICAgICBnbHN1ZnU9dQorICAgICAgIGZpCisgICAgICAgZm9yIGdsc3VmIGluICIkZ2xzdWZ1IiAke2dsc3VmdX1sICR7Z2xzdWZ1fWxsICR7Z2xzdWZ1fWk2NDsgZG8KKyAgICAgICAgIGNhc2UgJGdsc3VmIGluCisgICAgICAgICAgICcnKSAgZ2x0eXBlMT0naW50Jzs7CisgICAgICAgICAgIGwpICAgZ2x0eXBlMT0nbG9uZyBpbnQnOzsKKyAgICAgICAgICAgbGwpICBnbHR5cGUxPSdsb25nIGxvbmcgaW50Jzs7CisgICAgICAgICAgIGk2NCkgZ2x0eXBlMT0nX19pbnQ2NCc7OworICAgICAgICAgICB1KSAgIGdsdHlwZTE9J3Vuc2lnbmVkIGludCc7OworICAgICAgICAgICB1bCkgIGdsdHlwZTE9J3Vuc2lnbmVkIGxvbmcgaW50Jzs7CisgICAgICAgICAgIHVsbCkgZ2x0eXBlMT0ndW5zaWduZWQgbG9uZyBsb25nIGludCc7OworICAgICAgICAgICB1aTY0KWdsdHlwZTE9J3Vuc2lnbmVkIF9faW50NjQnOzsKKyAgICAgICAgIGVzYWMKKyAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAvKiBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUKKyAgICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovCisgICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgI2luY2x1ZGUgPHNpZ25hbC5oPgorICAjaWYgSEFWRV9XQ0hBUl9ICisgICMgaW5jbHVkZSA8c3RkaW8uaD4KKyAgIyBpbmNsdWRlIDx0aW1lLmg+CisgICMgaW5jbHVkZSA8d2NoYXIuaD4KKyAgI2VuZGlmCisKKyAgICAgICAgICAgICAgZXh0ZXJuICRnbHR5cGUgZm9vOworICAgICAgICAgICAgICBleHRlcm4gJGdsdHlwZTEgZm9vOworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsIGdsX2N2X3R5cGVfJHtnbHR5cGV9X3N1ZmZpeD1cJGdsc3VmCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICBldmFsIHJlc3VsdD1cJGdsX2N2X3R5cGVfJHtnbHR5cGV9X3N1ZmZpeAorICAgICAgICAgdGVzdCAiJHJlc3VsdCIgIT0gbm8gJiYgYnJlYWsKKyAgICAgICBkb25lCitmaQorZXZhbCBhY19yZXM9XCRnbF9jdl90eXBlXyR7Z2x0eXBlfV9zdWZmaXgKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICAgIEdMVFlQRT1gZWNobyAkZ2x0eXBlIHwgdHIgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6ICcgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXydgCisgICAgZXZhbCByZXN1bHQ9XCRnbF9jdl90eXBlXyR7Z2x0eXBlfV9zdWZmaXgKKyAgICB0ZXN0ICIkcmVzdWx0IiA9IG5vICYmIHJlc3VsdD0KKyAgICBldmFsICR7R0xUWVBFfV9TVUZGSVg9XCRyZXN1bHQKKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lICR7R0xUWVBFfV9TVUZGSVggJHJlc3VsdAorX0FDRU9GCisKKyAgZG9uZQorCisKKworICAgICAgICAgIGlmIHRlc3QgJEJJVFNJWkVPRl9XSU5UX1QgLWx0IDMyOyB0aGVuCisgICAgQklUU0laRU9GX1dJTlRfVD0zMgorICBmaQorCisgICAgU1RESU5UX0g9c3RkaW50LmgKKyAgZmkKKworICAgaWYgdGVzdCAtbiAiJFNURElOVF9IIjsgdGhlbgorICBHTF9HRU5FUkFURV9TVERJTlRfSF9UUlVFPQorICBHTF9HRU5FUkFURV9TVERJTlRfSF9GQUxTRT0nIycKK2Vsc2UKKyAgR0xfR0VORVJBVEVfU1RESU5UX0hfVFJVRT0nIycKKyAgR0xfR0VORVJBVEVfU1RESU5UX0hfRkFMU0U9CitmaQorCisKKworCisKKyAgR05VTElCX0lNQVhBQlM9MDsKKyAgR05VTElCX0lNQVhESVY9MDsKKyAgR05VTElCX1NUUlRPSU1BWD0wOworICBHTlVMSUJfU1RSVE9VTUFYPTA7CisgICAgSEFWRV9ERUNMX0lNQVhBQlM9MTsKKyAgSEFWRV9ERUNMX0lNQVhESVY9MTsKKyAgSEFWRV9ERUNMX1NUUlRPSU1BWD0xOworICBIQVZFX0RFQ0xfU1RSVE9VTUFYPTE7CisgIFJFUExBQ0VfU1RSVE9JTUFYPTA7CisgIElOVDMyX01BWF9MVF9JTlRNQVhfTUFYPTE7CisgIElOVDY0X01BWF9FUV9MT05HX01BWD0nZGVmaW5lZCBfTFA2NCc7CisgIFBSSV9NQUNST1NfQlJPS0VOPTA7CisgIFBSSVBUUl9QUkVGSVg9X19QUklQVFJfUFJFRklYOworICBVSU5UMzJfTUFYX0xUX1VJTlRNQVhfTUFYPTE7CisgIFVJTlQ2NF9NQVhfRVFfVUxPTkdfTUFYPSdkZWZpbmVkIF9MUDY0JzsKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXM7IHRoZW4KKyAgICAgICBnbF9jdl9uZXh0X2ludHR5cGVzX2g9JzwnaW50dHlwZXMuaCc+JworICAgICBlbHNlCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxpbnR0eXBlcy5oPiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxpbnR0eXBlcy5oPi4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9uZXh0X2ludHR5cGVzX2grOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICAgICAgICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSB5ZXM7IHRoZW4KKworCisgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKworX0FDRU9GCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgYWl4KikgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAgLUMiIDs7CisgICAgICAgICAgICAgICAgICopICAgIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIiA7OworICAgICAgICAgICAgICAgZXNhYworCisgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgbWluZ3cqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2RpcnNlcF9yZWdleD0nWy9cXF0nCisgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICBnbF9kaXJzZXBfcmVnZXg9J1wvJworICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9tYWtlX2xpdGVyYWxfcmVnZXhfc2VkPSdzLFtdJF5cXC4qL1tdLFxcJixnJworCisgICAgICAgICAgICAgICBnbF9oZWFkZXJfbGl0ZXJhbF9yZWdleD1gZWNobyAnaW50dHlwZXMuaCcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICIkZ2xfbWFrZV9saXRlcmFsX3JlZ2V4X3NlZCJgCisgICAgICAgICAgICAgICBnbF9hYnNvbHV0ZV9oZWFkZXJfc2VkPSIvJHtnbF9kaXJzZXBfcmVnZXh9JHtnbF9oZWFkZXJfbGl0ZXJhbF9yZWdleH0vIid7CisgICAgICAgICAgICAgICAgICAgcy8uKiJcKC4qJyIke2dsX2RpcnNlcF9yZWdleH0ke2dsX2hlYWRlcl9saXRlcmFsX3JlZ2V4fSInXCkiLiovXDEvCisgICAgICAgICAgICAgICAgICAgc3xeL1teL118Ly8mfAorICAgICAgICAgICAgICAgICAgIHAKKyAgICAgICAgICAgICAgICAgICBxCisgICAgICAgICAgICAgICAgIH0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9uZXh0X2ludHR5cGVzX2g9JyInYChldmFsICIkZ2xfYWJzbmFtZV9jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAgICAgICAgICAgICAgICAgICAgIHNlZCAtbiAiJGdsX2Fic29sdXRlX2hlYWRlcl9zZWQiYCciJworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIGdsX2N2X25leHRfaW50dHlwZXNfaD0nPCdpbnR0eXBlcy5oJz4nCisgICAgICAgICAgICAgZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9uZXh0X2ludHR5cGVzX2giID4mNQorJGFzX2VjaG8gIiRnbF9jdl9uZXh0X2ludHR5cGVzX2giID4mNjsgfQorICAgICBmaQorICAgICBORVhUX0lOVFRZUEVTX0g9JGdsX2N2X25leHRfaW50dHlwZXNfaAorCisgICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzIHx8IHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0gYnVnZ3k7IHRoZW4KKyAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGVfbmV4dCcKKyAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0nPCdpbnR0eXBlcy5oJz4nCisgICAgIGVsc2UKKyAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGUnCisgICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9JGdsX2N2X25leHRfaW50dHlwZXNfaAorICAgICBmaQorICAgICBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9JTlRUWVBFU19IPSRnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZQorCisKKworCisKKworCisKKyAgICBmb3IgZ2xfZnVuYyBpbiBpbWF4YWJzIGltYXhkaXYgc3RydG9pbWF4IHN0cnRvdW1heDsgZG8KKyAgICBhc19nbF9TeW1ib2w9YCRhc19lY2hvICJnbF9jdl9oYXZlX3Jhd19kZWNsXyRnbF9mdW5jIiB8ICRhc190cl9zaGAKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyRhc19nbF9TeW1ib2wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKworaW50CittYWluICgpCit7CisjdW5kZWYgJGdsX2Z1bmMKKyAgKHZvaWQpICRnbF9mdW5jOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiRhc19nbF9TeW1ib2w9eWVzIgorZWxzZQorICBldmFsICIkYXNfZ2xfU3ltYm9sPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJGFzX2dsX1N5bWJvbAorCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgICAgaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19nbF9TeW1ib2wiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV9SQVdfREVDTF8kZ2xfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworICAgICAgICAgICAgICAgICAgICAgZXZhbCBhY19jdl9oYXZlX2RlY2xfJGdsX2Z1bmM9eWVzCitmaQorICAgICAgZG9uZQorCisKKworICBmb3IgYWNfaGVhZGVyIGluIGludHR5cGVzLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgImludHR5cGVzLmgiICJhY19jdl9oZWFkZXJfaW50dHlwZXNfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfaW50dHlwZXNfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0lOVFRZUEVTX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHllczsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgaW50dHlwZXMuaCBQUkl4Tk4gbWFjcm9zIGFyZSBicm9rZW4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgaW50dHlwZXMuaCBQUkl4Tk4gbWFjcm9zIGFyZSBicm9rZW4uLi4gIiA+JjY7IH0KK2lmICR7Z3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpZmRlZiBQUklkMzIKK2NoYXIgKnAgPSBQUklkMzI7CisjZW5kaWYKKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuPW5vCitlbHNlCisgIGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW49eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW4iID4mNQorJGFzX2VjaG8gIiRndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuIiA+JjY7IH0KKyAgZmkKKyAgaWYgdGVzdCAiJGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW4iID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUFJJX01BQ1JPU19CUk9LRU4gMQorX0FDRU9GCisKKyAgICBQUklfTUFDUk9TX0JST0tFTj0xCisgIGVsc2UKKyAgICBQUklfTUFDUk9TX0JST0tFTj0wCisgIGZpCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hlcmUgdG8gZmluZCB0aGUgZXhwb25lbnQgaW4gYSAnZmxvYXQnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXJlIHRvIGZpbmQgdGhlIGV4cG9uZW50IGluIGEgJ2Zsb2F0Jy4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9jY19mbG9hdF9leHBiaXQwKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBnbF9jdl9jY19mbG9hdF9leHBiaXQwPSJ3b3JkIDAgYml0IDIzIgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZGVmaW5lIE5XT1JEUyBcCisgICgoc2l6ZW9mIChmbG9hdCkgKyBzaXplb2YgKHVuc2lnbmVkIGludCkgLSAxKSAvIHNpemVvZiAodW5zaWduZWQgaW50KSkKK3R5cGVkZWYgdW5pb24geyBmbG9hdCB2YWx1ZTsgdW5zaWduZWQgaW50IHdvcmRbTldPUkRTXTsgfSBtZW1vcnlfZmxvYXQ7CitzdGF0aWMgdW5zaWduZWQgaW50IG9yZWRfd29yZHNbTldPUkRTXTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYW5kZWRfd29yZHNbTldPUkRTXTsKK3N0YXRpYyB2b2lkIGFkZF90b19vcmVkX3dvcmRzIChmbG9hdCB4KQoreworICBtZW1vcnlfZmxvYXQgbTsKKyAgc2l6ZV90IGk7CisgIC8qIENsZWFyIGl0IGZpcnN0LCBpbiBjYXNlCisgICAgIHNpemVvZiAoZmxvYXQpIDwgc2l6ZW9mIChtZW1vcnlfZmxvYXQpLiAgKi8KKyAgbWVtc2V0ICgmbSwgMCwgc2l6ZW9mIChtZW1vcnlfZmxvYXQpKTsKKyAgbS52YWx1ZSA9IHg7CisgIGZvciAoaSA9IDA7IGkgPCBOV09SRFM7IGkrKykKKyAgICB7CisgICAgICBvcmVkX3dvcmRzW2ldIHw9IG0ud29yZFtpXTsKKyAgICAgIGFuZGVkX3dvcmRzW2ldICY9IG0ud29yZFtpXTsKKyAgICB9Cit9CitpbnQgbWFpbiAoKQoreworICBzaXplX3QgajsKKyAgRklMRSAqZnAgPSBmb3BlbiAoImNvbmZ0ZXN0Lm91dCIsICJ3Iik7CisgIGlmIChmcCA9PSBOVUxMKQorICAgIHJldHVybiAxOworICBmb3IgKGogPSAwOyBqIDwgTldPUkRTOyBqKyspCisgICAgYW5kZWRfd29yZHNbal0gPSB+ICh1bnNpZ25lZCBpbnQpIDA7CisgIGFkZF90b19vcmVkX3dvcmRzICgwLjI1Zik7CisgIGFkZF90b19vcmVkX3dvcmRzICgwLjVmKTsKKyAgYWRkX3RvX29yZWRfd29yZHMgKDEuMGYpOworICBhZGRfdG9fb3JlZF93b3JkcyAoMi4wZik7CisgIGFkZF90b19vcmVkX3dvcmRzICg0LjBmKTsKKyAgLyogUmVtb3ZlIGJpdHMgdGhhdCBhcmUgY29tbW9uIChlLmcuIGlmIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmaXJzdCBtYW50aXNzYQorICAgICBiaXQgaXMgZXhwbGljaXQpLiAgKi8KKyAgZm9yIChqID0gMDsgaiA8IE5XT1JEUzsgaisrKQorICAgIG9yZWRfd29yZHNbal0gJj0gfmFuZGVkX3dvcmRzW2pdOworICAvKiBOb3cgZmluZCB0aGUgbm9uemVybyB3b3JkLiAgKi8KKyAgZm9yIChqID0gMDsgaiA8IE5XT1JEUzsgaisrKQorICAgIGlmIChvcmVkX3dvcmRzW2pdICE9IDApCisgICAgICBicmVhazsKKyAgaWYgKGogPCBOV09SRFMpCisgICAgeworICAgICAgc2l6ZV90IGk7CisgICAgICBmb3IgKGkgPSBqICsgMTsgaSA8IE5XT1JEUzsgaSsrKQorICAgICAgICBpZiAob3JlZF93b3Jkc1tpXSAhPSAwKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGZwcmludGYgKGZwLCAidW5rbm93biIpOworICAgICAgICAgICAgcmV0dXJuIChmY2xvc2UgKGZwKSAhPSAwKTsKKyAgICAgICAgICB9CisgICAgICBmb3IgKGkgPSAwOyA7IGkrKykKKyAgICAgICAgaWYgKChvcmVkX3dvcmRzW2pdID4+IGkpICYgMSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBmcHJpbnRmIChmcCwgIndvcmQgJWQgYml0ICVkIiwgKGludCkgaiwgKGludCkgaSk7CisgICAgICAgICAgICByZXR1cm4gKGZjbG9zZSAoZnApICE9IDApOworICAgICAgICAgIH0KKyAgICB9CisgIGZwcmludGYgKGZwLCAidW5rbm93biIpOworICByZXR1cm4gKGZjbG9zZSAoZnApICE9IDApOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9jY19mbG9hdF9leHBiaXQwPWBjYXQgY29uZnRlc3Qub3V0YAorZWxzZQorICBnbF9jdl9jY19mbG9hdF9leHBiaXQwPSJ1bmtub3duIgorZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgICAgIHJtIC1mIGNvbmZ0ZXN0Lm91dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9jY19mbG9hdF9leHBiaXQwIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfY2NfZmxvYXRfZXhwYml0MCIgPiY2OyB9CisgIGNhc2UgIiRnbF9jdl9jY19mbG9hdF9leHBiaXQwIiBpbgorICAgIHdvcmQqYml0KikKKyAgICAgIHdvcmQ9YGVjaG8gIiRnbF9jdl9jY19mbG9hdF9leHBiaXQwIiB8IHNlZCAtZSAncy93b3JkIC8vJyAtZSAncy8gYml0LiovLydgCisgICAgICBiaXQ9YGVjaG8gIiRnbF9jdl9jY19mbG9hdF9leHBiaXQwIiB8IHNlZCAtZSAncy93b3JkLipiaXQgLy8nYAorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEZMVF9FWFBCSVQwX1dPUkQgJHdvcmQKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgRkxUX0VYUEJJVDBfQklUICRiaXQKK19BQ0VPRgorCisgICAgICA7OworICBlc2FjCisKKworCisgIElTTkFORl9MSUJNPQorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBpc25hbihmbG9hdCkgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGlzbmFuKGZsb2F0KSBjYW4gYmUgdXNlZCB3aXRob3V0IGxpbmtpbmcgd2l0aCBsaWJtLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfaXNuYW5mX25vX2xpYm0rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bWF0aC5oPgorICAgICAgICAgICAgICNpZiBfX0dOVUNfXyA+PSA0CisgICAgICAgICAgICAgIyB1bmRlZiBpc25hbmYKKyAgICAgICAgICAgICAjIGRlZmluZSBpc25hbmYoeCkgX19idWlsdGluX2lzbmFuZiAoKGZsb2F0KSh4KSkKKyAgICAgICAgICAgICAjZWxpZiBkZWZpbmVkIGlzbmFuCisgICAgICAgICAgICAgIyB1bmRlZiBpc25hbmYKKyAgICAgICAgICAgICAjIGRlZmluZSBpc25hbmYoeCkgaXNuYW4gKChmbG9hdCkoeCkpCisgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgZmxvYXQgeDsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGlzbmFuZiAoeCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19pc25hbmZfbm9fbGlibT15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19pc25hbmZfbm9fbGlibT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfaXNuYW5mX25vX2xpYm0iID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2lzbmFuZl9ub19saWJtIiA+JjY7IH0KKworICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2lzbmFuZl9ub19saWJtID0gbm87IHRoZW4KKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgaXNuYW4oZmxvYXQpIGNhbiBiZSB1c2VkIHdpdGggbGlibSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGlzbmFuKGZsb2F0KSBjYW4gYmUgdXNlZCB3aXRoIGxpYm0uLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19pc25hbmZfaW5fbGlibSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgICBMSUJTPSIkTElCUyAtbG0iCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bWF0aC5oPgorICAgICAgICAgICAgICNpZiBfX0dOVUNfXyA+PSA0CisgICAgICAgICAgICAgIyB1bmRlZiBpc25hbmYKKyAgICAgICAgICAgICAjIGRlZmluZSBpc25hbmYoeCkgX19idWlsdGluX2lzbmFuZiAoKGZsb2F0KSh4KSkKKyAgICAgICAgICAgICAjZWxpZiBkZWZpbmVkIGlzbmFuCisgICAgICAgICAgICAgIyB1bmRlZiBpc25hbmYKKyAgICAgICAgICAgICAjIGRlZmluZSBpc25hbmYoeCkgaXNuYW4gKChmbG9hdCkoeCkpCisgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgZmxvYXQgeDsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGlzbmFuZiAoeCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19pc25hbmZfaW5fbGlibT15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19pc25hbmZfaW5fbGlibT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICBMSUJTPSIkc2F2ZV9MSUJTIgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2lzbmFuZl9pbl9saWJtIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19pc25hbmZfaW5fbGlibSIgPiY2OyB9CisKKyAgICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2lzbmFuZl9pbl9saWJtID0geWVzOyB0aGVuCisgICAgICBJU05BTkZfTElCTT0tbG0KKyAgICBmaQorICBmaQorICAgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfaXNuYW5mX25vX2xpYm0gPSB5ZXMgXAorICAgICB8fCB0ZXN0ICRnbF9jdl9mdW5jX2lzbmFuZl9pbl9saWJtID0geWVzOyB0aGVuCisgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICBMSUJTPSIkTElCUyAkSVNOQU5GX0xJQk0iCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBpc25hbihmbG9hdCkgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBpc25hbihmbG9hdCkgd29ya3MuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19pc25hbmZfd29ya3MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICBpcml4KiB8IHNvbGFyaXMqKSBnbF9jdl9mdW5jX2lzbmFuZl93b3Jrcz0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgKikgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19pc25hbmZfd29ya3M9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgZXNhYworCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPG1hdGguaD4KKyNpZiBfX0dOVUNfXyA+PSA0CisjIHVuZGVmIGlzbmFuZgorIyBkZWZpbmUgaXNuYW5mKHgpIF9fYnVpbHRpbl9pc25hbmYgKChmbG9hdCkoeCkpCisjZWxpZiBkZWZpbmVkIGlzbmFuCisjIHVuZGVmIGlzbmFuZgorIyBkZWZpbmUgaXNuYW5mKHgpIGlzbmFuICgoZmxvYXQpKHgpKQorI2VuZGlmCisvKiBUaGUgQ29tcGFxIChleC1ERUMpIEMgNi40IGNvbXBpbGVyIGNob2tlcyBvbiB0aGUgZXhwcmVzc2lvbiAwLjAgLyAwLjAuICAqLworI2lmZGVmIF9fREVDQworc3RhdGljIGZsb2F0CitOYU4gKCkKK3sKKyAgc3RhdGljIGZsb2F0IHplcm8gPSAwLjBmOworICByZXR1cm4gemVybyAvIHplcm87Cit9CisjZWxzZQorIyBkZWZpbmUgTmFOKCkgKDAuMGYgLyAwLjBmKQorI2VuZGlmCisjZGVmaW5lIE5XT1JEUyBcCisgICgoc2l6ZW9mIChmbG9hdCkgKyBzaXplb2YgKHVuc2lnbmVkIGludCkgLSAxKSAvIHNpemVvZiAodW5zaWduZWQgaW50KSkKK3R5cGVkZWYgdW5pb24geyB1bnNpZ25lZCBpbnQgd29yZFtOV09SRFNdOyBmbG9hdCB2YWx1ZTsgfSBtZW1vcnlfZmxvYXQ7CitpbnQgbWFpbigpCit7CisgIGludCByZXN1bHQgPSAwOworCisgIGlmIChpc25hbmYgKDEuMGYgLyAwLjBmKSkKKyAgICByZXN1bHQgfD0gMTsKKworICBpZiAoIWlzbmFuZiAoTmFOICgpKSkKKyAgICByZXN1bHQgfD0gMjsKKworI2lmIGRlZmluZWQgRkxUX0VYUEJJVDBfV09SRCAmJiBkZWZpbmVkIEZMVF9FWFBCSVQwX0JJVAorICAvKiBUaGUgaXNuYW5mIGZ1bmN0aW9uIHNob3VsZCBiZSBpbW11bmUgYWdhaW5zdCBjaGFuZ2VzIGluIHRoZSBzaWduIGJpdCBhbmQKKyAgICAgaW4gdGhlIG1hbnRpc3NhIGJpdHMuICBUaGUgeG9yIG9wZXJhdGlvbiB0d2lkZGxlcyBhIGJpdCB0aGF0IGNhbiBvbmx5IGJlCisgICAgIGEgc2lnbiBiaXQgb3IgYSBtYW50aXNzYSBiaXQuICAqLworICBpZiAoRkxUX0VYUEJJVDBfV09SRCA9PSAwICYmIEZMVF9FWFBCSVQwX0JJVCA+IDApCisgICAgeworICAgICAgbWVtb3J5X2Zsb2F0IG07CisKKyAgICAgIG0udmFsdWUgPSBOYU4gKCk7CisgICAgICAvKiBTZXQgdGhlIGJpdHMgYmVsb3cgdGhlIGV4cG9uZW50IHRvIDAxMTExLi4uMTExLiAgKi8KKyAgICAgIG0ud29yZFswXSAmPSAtMVUgPDwgRkxUX0VYUEJJVDBfQklUOworICAgICAgbS53b3JkWzBdIHw9IDFVIDw8IChGTFRfRVhQQklUMF9CSVQgLSAxKSAtIDE7CisgICAgICBpZiAoIWlzbmFuZiAobS52YWx1ZSkpCisgICAgICAgIHJlc3VsdCB8PSA0OworICAgIH0KKyNlbmRpZgorCisgIHJldHVybiByZXN1bHQ7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX2lzbmFuZl93b3Jrcz15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19pc25hbmZfd29ya3M9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfaXNuYW5mX3dvcmtzIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19pc25hbmZfd29ya3MiID4mNjsgfQorCisgICAgTElCUz0iJHNhdmVfTElCUyIKKyAgICBjYXNlICIkZ2xfY3ZfZnVuY19pc25hbmZfd29ya3MiIGluCisgICAgICAqeWVzKSBnbF9mdW5jX2lzbmFuZj15ZXMgOzsKKyAgICAgICopICAgIGdsX2Z1bmNfaXNuYW5mPW5vOyBJU05BTkZfTElCTT0gOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBnbF9mdW5jX2lzbmFuZj1ubworICBmaQorICBpZiB0ZXN0ICRnbF9mdW5jX2lzbmFuZiAhPSB5ZXM7IHRoZW4KKyAgICBIQVZFX0lTTkFORj0wCisgIGZpCisKKworCisKKyAgSVNOQU5EX0xJQk09CisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGlzbmFuKGRvdWJsZSkgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGlzbmFuKGRvdWJsZSkgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibS4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX2lzbmFuZF9ub19saWJtKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPG1hdGguaD4KKyAgICAgICAgICAgICAjaWYgX19HTlVDX18gPj0gNAorICAgICAgICAgICAgICMgdW5kZWYgaXNuYW5kCisgICAgICAgICAgICAgIyBkZWZpbmUgaXNuYW5kKHgpIF9fYnVpbHRpbl9pc25hbiAoKGRvdWJsZSkoeCkpCisgICAgICAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICAjIHVuZGVmIGlzbmFuZAorICAgICAgICAgICAgICMgZGVmaW5lIGlzbmFuZCh4KSBpc25hbiAoKGRvdWJsZSkoeCkpCisgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgZG91YmxlIHg7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBpc25hbmQgKHgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfaXNuYW5kX25vX2xpYm09eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfaXNuYW5kX25vX2xpYm09bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2lzbmFuZF9ub19saWJtIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19pc25hbmRfbm9fbGlibSIgPiY2OyB9CisKKyAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19pc25hbmRfbm9fbGlibSA9IG5vOyB0aGVuCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGlzbmFuKGRvdWJsZSkgY2FuIGJlIHVzZWQgd2l0aCBsaWJtIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgaXNuYW4oZG91YmxlKSBjYW4gYmUgdXNlZCB3aXRoIGxpYm0uLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19pc25hbmRfaW5fbGlibSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgICBMSUJTPSIkTElCUyAtbG0iCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bWF0aC5oPgorICAgICAgICAgICAgICNpZiBfX0dOVUNfXyA+PSA0CisgICAgICAgICAgICAgIyB1bmRlZiBpc25hbmQKKyAgICAgICAgICAgICAjIGRlZmluZSBpc25hbmQoeCkgX19idWlsdGluX2lzbmFuICgoZG91YmxlKSh4KSkKKyAgICAgICAgICAgICAjZWxpZiBkZWZpbmVkIGlzbmFuCisgICAgICAgICAgICAgIyB1bmRlZiBpc25hbmQKKyAgICAgICAgICAgICAjIGRlZmluZSBpc25hbmQoeCkgaXNuYW4gKChkb3VibGUpKHgpKQorICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgIGRvdWJsZSB4OworaW50CittYWluICgpCit7CityZXR1cm4gaXNuYW5kICh4KTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX2lzbmFuZF9pbl9saWJtPXllcworZWxzZQorICBnbF9jdl9mdW5jX2lzbmFuZF9pbl9saWJtPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgIExJQlM9IiRzYXZlX0xJQlMiCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfaXNuYW5kX2luX2xpYm0iID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2lzbmFuZF9pbl9saWJtIiA+JjY7IH0KKworICAgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfaXNuYW5kX2luX2xpYm0gPSB5ZXM7IHRoZW4KKyAgICAgIElTTkFORF9MSUJNPS1sbQorICAgIGZpCisgIGZpCisgICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19pc25hbmRfbm9fbGlibSA9IHllcyBcCisgICAgIHx8IHRlc3QgJGdsX2N2X2Z1bmNfaXNuYW5kX2luX2xpYm0gPSB5ZXM7IHRoZW4KKyAgICBnbF9mdW5jX2lzbmFuZD15ZXMKKyAgZWxzZQorICAgIGdsX2Z1bmNfaXNuYW5kPW5vCisgICAgSEFWRV9JU05BTkQ9MAorICBmaQorCisKKworCisgIElTTkFOTF9MSUJNPQorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBpc25hbihsb25nIGRvdWJsZSkgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGlzbmFuKGxvbmcgZG91YmxlKSBjYW4gYmUgdXNlZCB3aXRob3V0IGxpbmtpbmcgd2l0aCBsaWJtLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfaXNuYW5sX25vX2xpYm0rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bWF0aC5oPgorICAgICAgICAgICAgICNpZiBfX0dOVUNfXyA+PSA0CisgICAgICAgICAgICAgIyB1bmRlZiBpc25hbmwKKyAgICAgICAgICAgICAjIGRlZmluZSBpc25hbmwoeCkgX19idWlsdGluX2lzbmFubCAoKGxvbmcgZG91YmxlKSh4KSkKKyAgICAgICAgICAgICAjZWxpZiBkZWZpbmVkIGlzbmFuCisgICAgICAgICAgICAgIyB1bmRlZiBpc25hbmwKKyAgICAgICAgICAgICAjIGRlZmluZSBpc25hbmwoeCkgaXNuYW4gKChsb25nIGRvdWJsZSkoeCkpCisgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgbG9uZyBkb3VibGUgeDsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGlzbmFubCAoeCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19pc25hbmxfbm9fbGlibT15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19pc25hbmxfbm9fbGlibT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfaXNuYW5sX25vX2xpYm0iID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2lzbmFubF9ub19saWJtIiA+JjY7IH0KKworICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2lzbmFubF9ub19saWJtID0gbm87IHRoZW4KKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgaXNuYW4obG9uZyBkb3VibGUpIGNhbiBiZSB1c2VkIHdpdGggbGlibSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGlzbmFuKGxvbmcgZG91YmxlKSBjYW4gYmUgdXNlZCB3aXRoIGxpYm0uLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19pc25hbmxfaW5fbGlibSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgICBMSUJTPSIkTElCUyAtbG0iCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bWF0aC5oPgorICAgICAgICAgICAgICNpZiBfX0dOVUNfXyA+PSA0CisgICAgICAgICAgICAgIyB1bmRlZiBpc25hbmwKKyAgICAgICAgICAgICAjIGRlZmluZSBpc25hbmwoeCkgX19idWlsdGluX2lzbmFubCAoKGxvbmcgZG91YmxlKSh4KSkKKyAgICAgICAgICAgICAjZWxpZiBkZWZpbmVkIGlzbmFuCisgICAgICAgICAgICAgIyB1bmRlZiBpc25hbmwKKyAgICAgICAgICAgICAjIGRlZmluZSBpc25hbmwoeCkgaXNuYW4gKChsb25nIGRvdWJsZSkoeCkpCisgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgbG9uZyBkb3VibGUgeDsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGlzbmFubCAoeCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19pc25hbmxfaW5fbGlibT15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19pc25hbmxfaW5fbGlibT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICBMSUJTPSIkc2F2ZV9MSUJTIgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2lzbmFubF9pbl9saWJtIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19pc25hbmxfaW5fbGlibSIgPiY2OyB9CisKKyAgICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2lzbmFubF9pbl9saWJtID0geWVzOyB0aGVuCisgICAgICBJU05BTkxfTElCTT0tbG0KKyAgICBmaQorICBmaQorICAgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfaXNuYW5sX25vX2xpYm0gPSB5ZXMgXAorICAgICB8fCB0ZXN0ICRnbF9jdl9mdW5jX2lzbmFubF9pbl9saWJtID0geWVzOyB0aGVuCisgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICBMSUJTPSIkTElCUyAkSVNOQU5MX0xJQk0iCisKKworCisKKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGlzbmFubCB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGlzbmFubCB3b3Jrcy4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX2lzbmFubF93b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgY2FzZSAiJGhvc3RfY3B1IiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyBubyBvbiBpYTY0LCB4ODZfNjQsIGkzODYuCisgICAgICAgICAgIGlhNjQgfCB4ODZfNjQgfCBpKjg2KSBnbF9jdl9mdW5jX2lzbmFubF93b3Jrcz0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgKikKKyAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgIG5ldGJzZCopIGdsX2N2X2Z1bmNfaXNuYW5sX3dvcmtzPSJndWVzc2luZyBubyI7OworICAgICAgICAgICAgICAgKikgICAgICAgZ2xfY3ZfZnVuY19pc25hbmxfd29ya3M9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICA7OworICAgICAgICAgZXNhYworCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2lmIF9fR05VQ19fID49IDQKKyMgdW5kZWYgaXNuYW5sCisjIGRlZmluZSBpc25hbmwoeCkgX19idWlsdGluX2lzbmFubCAoKGxvbmcgZG91YmxlKSh4KSkKKyNlbGlmIGRlZmluZWQgaXNuYW4KKyMgdW5kZWYgaXNuYW5sCisjIGRlZmluZSBpc25hbmwoeCkgaXNuYW4gKChsb25nIGRvdWJsZSkoeCkpCisjZW5kaWYKKyNkZWZpbmUgTldPUkRTIFwKKyAgKChzaXplb2YgKGxvbmcgZG91YmxlKSArIHNpemVvZiAodW5zaWduZWQgaW50KSAtIDEpIC8gc2l6ZW9mICh1bnNpZ25lZCBpbnQpKQordHlwZWRlZiB1bmlvbiB7IHVuc2lnbmVkIGludCB3b3JkW05XT1JEU107IGxvbmcgZG91YmxlIHZhbHVlOyB9CisgICAgICAgIG1lbW9yeV9sb25nX2RvdWJsZTsKKy8qIE9uIElyaXggNi41LCBnY2MgMy40LjMgY2FuJ3QgY29tcHV0ZSBjb21waWxlLXRpbWUgTmFOLCBhbmQgbmVlZHMgdGhlCisgICBydW50aW1lIHR5cGUgY29udmVyc2lvbi4gICovCisjaWZkZWYgX19zZ2kKK3N0YXRpYyBsb25nIGRvdWJsZSBOYU5sICgpCit7CisgIGRvdWJsZSB6ZXJvID0gMC4wOworICByZXR1cm4gemVybyAvIHplcm87Cit9CisjZWxzZQorIyBkZWZpbmUgTmFObCgpICgwLjBMIC8gMC4wTCkKKyNlbmRpZgoraW50IG1haW4gKCkKK3sKKyAgaW50IHJlc3VsdCA9IDA7CisKKyAgaWYgKCFpc25hbmwgKE5hTmwgKCkpKQorICAgIHJlc3VsdCB8PSAxOworCisgIHsKKyAgICBtZW1vcnlfbG9uZ19kb3VibGUgbTsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIC8qIFRoZSBpc25hbmwgZnVuY3Rpb24gc2hvdWxkIGJlIGltbXVuZSBhZ2FpbnN0IGNoYW5nZXMgaW4gdGhlIHNpZ24gYml0IGFuZAorICAgICAgIGluIHRoZSBtYW50aXNzYSBiaXRzLiAgVGhlIHhvciBvcGVyYXRpb24gdHdpZGRsZXMgYSBiaXQgdGhhdCBjYW4gb25seSBiZQorICAgICAgIGEgc2lnbiBiaXQgb3IgYSBtYW50aXNzYSBiaXQgKHNpbmNlIHRoZSBleHBvbmVudCBuZXZlciBleHRlbmRzIHRvCisgICAgICAgYml0IDMxKS4gICovCisgICAgbS52YWx1ZSA9IE5hTmwgKCk7CisgICAgbS53b3JkW05XT1JEUyAvIDJdIF49ICh1bnNpZ25lZCBpbnQpIDEgPDwgKHNpemVvZiAodW5zaWduZWQgaW50KSAqIENIQVJfQklUIC0gMSk7CisgICAgZm9yIChpID0gMDsgaSA8IE5XT1JEUzsgaSsrKQorICAgICAgbS53b3JkW2ldIHw9IDE7CisgICAgaWYgKCFpc25hbmwgKG0udmFsdWUpKQorICAgICAgcmVzdWx0IHw9IDE7CisgIH0KKworI2lmICgoZGVmaW5lZCBfX2lhNjQgJiYgTERCTF9NQU5UX0RJRyA9PSA2NCkgfHwgKGRlZmluZWQgX194ODZfNjRfXyB8fCBkZWZpbmVkIF9fYW1kNjRfXykgfHwgKGRlZmluZWQgX19pMzg2IHx8IGRlZmluZWQgX19pMzg2X18gfHwgZGVmaW5lZCBfSTM4NiB8fCBkZWZpbmVkIF9NX0lYODYgfHwgZGVmaW5lZCBfWDg2XykpICYmICFIQVZFX1NBTUVfTE9OR19ET1VCTEVfQVNfRE9VQkxFCisvKiBSZXByZXNlbnRhdGlvbiBvZiBhbiA4MC1iaXQgJ2xvbmcgZG91YmxlJyBhcyBhbiBpbml0aWFsaXplciBmb3IgYSBzZXF1ZW5jZQorICAgb2YgJ3Vuc2lnbmVkIGludCcgd29yZHMuICAqLworIyBpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyMgIGRlZmluZSBMREJMODBfV09SRFMoZXhwb25lbnQsbWFudGhpLG1hbnRsbykgXAorICAgICB7ICgodW5zaWduZWQgaW50KSAoZXhwb25lbnQpIDw8IDE2KSB8ICgodW5zaWduZWQgaW50KSAobWFudGhpKSA+PiAxNiksIFwKKyAgICAgICAoKHVuc2lnbmVkIGludCkgKG1hbnRoaSkgPDwgMTYpIHwgKHVuc2lnbmVkIGludCkgKG1hbnRsbykgPj4gMTYpLCAgICBcCisgICAgICAgKHVuc2lnbmVkIGludCkgKG1hbnRsbykgPDwgMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9CisjIGVsc2UKKyMgIGRlZmluZSBMREJMODBfV09SRFMoZXhwb25lbnQsbWFudGhpLG1hbnRsbykgXAorICAgICB7IG1hbnRsbywgbWFudGhpLCBleHBvbmVudCB9CisjIGVuZGlmCisgIHsgLyogUXVpZXQgTmFOLiAgKi8KKyAgICBzdGF0aWMgbWVtb3J5X2xvbmdfZG91YmxlIHggPQorICAgICAgeyBMREJMODBfV09SRFMgKDB4RkZGRiwgMHhDMzMzMzMzMywgMHgwMDAwMDAwMCkgfTsKKyAgICBpZiAoIWlzbmFubCAoeC52YWx1ZSkpCisgICAgICByZXN1bHQgfD0gMjsKKyAgfQorICB7CisgICAgLyogU2lnbmFsbGluZyBOYU4uICAqLworICAgIHN0YXRpYyBtZW1vcnlfbG9uZ19kb3VibGUgeCA9CisgICAgICB7IExEQkw4MF9XT1JEUyAoMHhGRkZGLCAweDgzMzMzMzMzLCAweDAwMDAwMDAwKSB9OworICAgIGlmICghaXNuYW5sICh4LnZhbHVlKSkKKyAgICAgIHJlc3VsdCB8PSAyOworICB9CisgIC8qIFRoZSBpc25hbmwgZnVuY3Rpb24gc2hvdWxkIHJlY29nbml6ZSBQc2V1ZG8tTmFOcywgUHNldWRvLUluZmluaXRpZXMsCisgICAgIFBzZXVkby1aZXJvZXMsIFVubm9ybWFsaXplZCBOdW1iZXJzLCBhbmQgUHNldWRvLURlbm9ybWFscywgYXMgZGVmaW5lZCBpbgorICAgICAgIEludGVsIElBLTY0IEFyY2hpdGVjdHVyZSBTb2Z0d2FyZSBEZXZlbG9wZXIncyBNYW51YWwsIFZvbHVtZSAxOgorICAgICAgIEFwcGxpY2F0aW9uIEFyY2hpdGVjdHVyZS4KKyAgICAgICBUYWJsZSA1LTIgIkZsb2F0aW5nLVBvaW50IFJlZ2lzdGVyIEVuY29kaW5ncyIKKyAgICAgICBGaWd1cmUgNS02ICJNZW1vcnkgdG8gRmxvYXRpbmctUG9pbnQgUmVnaXN0ZXIgRGF0YSBUcmFuc2xhdGlvbiIKKyAgICovCisgIHsgLyogUHNldWRvLU5hTi4gICovCisgICAgc3RhdGljIG1lbW9yeV9sb25nX2RvdWJsZSB4ID0KKyAgICAgIHsgTERCTDgwX1dPUkRTICgweEZGRkYsIDB4NDAwMDAwMDEsIDB4MDAwMDAwMDApIH07CisgICAgaWYgKCFpc25hbmwgKHgudmFsdWUpKQorICAgICAgcmVzdWx0IHw9IDQ7CisgIH0KKyAgeyAvKiBQc2V1ZG8tSW5maW5pdHkuICAqLworICAgIHN0YXRpYyBtZW1vcnlfbG9uZ19kb3VibGUgeCA9CisgICAgICB7IExEQkw4MF9XT1JEUyAoMHhGRkZGLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwKSB9OworICAgIGlmICghaXNuYW5sICh4LnZhbHVlKSkKKyAgICAgIHJlc3VsdCB8PSA4OworICB9CisgIHsgLyogUHNldWRvLVplcm8uICAqLworICAgIHN0YXRpYyBtZW1vcnlfbG9uZ19kb3VibGUgeCA9CisgICAgICB7IExEQkw4MF9XT1JEUyAoMHg0MDA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwKSB9OworICAgIGlmICghaXNuYW5sICh4LnZhbHVlKSkKKyAgICAgIHJlc3VsdCB8PSAxNjsKKyAgfQorICB7IC8qIFVubm9ybWFsaXplZCBudW1iZXIuICAqLworICAgIHN0YXRpYyBtZW1vcnlfbG9uZ19kb3VibGUgeCA9CisgICAgICB7IExEQkw4MF9XT1JEUyAoMHg0MDAwLCAweDYzMzMzMzMzLCAweDAwMDAwMDAwKSB9OworICAgIGlmICghaXNuYW5sICh4LnZhbHVlKSkKKyAgICAgIHJlc3VsdCB8PSAzMjsKKyAgfQorICB7IC8qIFBzZXVkby1EZW5vcm1hbC4gICovCisgICAgc3RhdGljIG1lbW9yeV9sb25nX2RvdWJsZSB4ID0KKyAgICAgIHsgTERCTDgwX1dPUkRTICgweDAwMDAsIDB4ODMzMzMzMzMsIDB4MDAwMDAwMDApIH07CisgICAgaWYgKCFpc25hbmwgKHgudmFsdWUpKQorICAgICAgcmVzdWx0IHw9IDY0OworICB9CisjZW5kaWYKKworICByZXR1cm4gcmVzdWx0OworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19pc25hbmxfd29ya3M9eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfaXNuYW5sX3dvcmtzPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2lzbmFubF93b3JrcyIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfaXNuYW5sX3dvcmtzIiA+JjY7IH0KKworICAgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgY2FzZSAiJGdsX2N2X2Z1bmNfaXNuYW5sX3dvcmtzIiBpbgorICAgICAgKnllcykgZ2xfZnVuY19pc25hbmw9eWVzIDs7CisgICAgICAqKSAgICBnbF9mdW5jX2lzbmFubD1ubzsgSVNOQU5MX0xJQk09IDs7CisgICAgZXNhYworICBlbHNlCisgICAgZ2xfZnVuY19pc25hbmw9bm8KKyAgZmkKKyAgaWYgdGVzdCAkZ2xfZnVuY19pc25hbmwgIT0geWVzOyB0aGVuCisgICAgSEFWRV9JU05BTkw9MAorICBmaQorCisKKworICBHTlVMSUJfSVNXQkxBTks9MDsKKyAgR05VTElCX1dDVFlQRT0wOworICBHTlVMSUJfSVNXQ1RZUEU9MDsKKyAgR05VTElCX1dDVFJBTlM9MDsKKyAgR05VTElCX1RPV0NUUkFOUz0wOworICAgIEhBVkVfSVNXQkxBTks9MTsKKyAgSEFWRV9XQ1RZUEVfVD0xOworICBIQVZFX1dDVFJBTlNfVD0xOworICBSRVBMQUNFX0lTV0JMQU5LPTA7CisKKworCisKKworCisKKworCisKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19pc3djbnRybCA9IHllczsgdGhlbgorICAgIEhBVkVfSVNXQ05UUkw9MQorICBlbHNlCisgICAgSEFWRV9JU1dDTlRSTD0wCisgIGZpCisKKworCisgIGlmIHRlc3QgJGd0X2N2X2Nfd2ludF90ID0geWVzOyB0aGVuCisgICAgSEFWRV9XSU5UX1Q9MQorICBlbHNlCisgICAgSEFWRV9XSU5UX1Q9MAorICBmaQorCisKKworCisKKworCisKKworCisKKyAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXM7IHRoZW4KKyAgICAgICBnbF9jdl9uZXh0X3djdHlwZV9oPSc8J3djdHlwZS5oJz4nCisgICAgIGVsc2UKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHdjdHlwZS5oPiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDx3Y3R5cGUuaD4uLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfbmV4dF93Y3R5cGVfaCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgICAgICAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfd2N0eXBlX2ggPSB5ZXM7IHRoZW4KKworCisgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8d2N0eXBlLmg+CisKK19BQ0VPRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgIGFpeCopIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIC1DIiA7OworICAgICAgICAgICAgICAgICAqKSAgICBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCIgOzsKKyAgICAgICAgICAgICAgIGVzYWMKKworICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgIG1pbmd3KikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kaXJzZXBfcmVnZXg9J1svXFxdJworICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgZ2xfZGlyc2VwX3JlZ2V4PSdcLycKKyAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfbWFrZV9saXRlcmFsX3JlZ2V4X3NlZD0ncyxbXSReXFwuKi9bXSxcXCYsZycKKworICAgICAgICAgICAgICAgZ2xfaGVhZGVyX2xpdGVyYWxfcmVnZXg9YGVjaG8gJ3djdHlwZS5oJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgIiRnbF9tYWtlX2xpdGVyYWxfcmVnZXhfc2VkImAKKyAgICAgICAgICAgICAgIGdsX2Fic29sdXRlX2hlYWRlcl9zZWQ9Ii8ke2dsX2RpcnNlcF9yZWdleH0ke2dsX2hlYWRlcl9saXRlcmFsX3JlZ2V4fS8iJ3sKKyAgICAgICAgICAgICAgICAgICBzLy4qIlwoLionIiR7Z2xfZGlyc2VwX3JlZ2V4fSR7Z2xfaGVhZGVyX2xpdGVyYWxfcmVnZXh9IidcKSIuKi9cMS8KKyAgICAgICAgICAgICAgICAgICBzfF4vW14vXXwvLyZ8CisgICAgICAgICAgICAgICAgICAgcAorICAgICAgICAgICAgICAgICAgIHEKKyAgICAgICAgICAgICAgICAgfScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X25leHRfd2N0eXBlX2g9JyInYChldmFsICIkZ2xfYWJzbmFtZV9jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAgICAgICAgICAgICAgICAgICAgIHNlZCAtbiAiJGdsX2Fic29sdXRlX2hlYWRlcl9zZWQiYCciJworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIGdsX2N2X25leHRfd2N0eXBlX2g9Jzwnd2N0eXBlLmgnPicKKyAgICAgICAgICAgICBmaQorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X25leHRfd2N0eXBlX2giID4mNQorJGFzX2VjaG8gIiRnbF9jdl9uZXh0X3djdHlwZV9oIiA+JjY7IH0KKyAgICAgZmkKKyAgICAgTkVYVF9XQ1RZUEVfSD0kZ2xfY3ZfbmV4dF93Y3R5cGVfaAorCisgICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzIHx8IHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0gYnVnZ3k7IHRoZW4KKyAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGVfbmV4dCcKKyAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0nPCd3Y3R5cGUuaCc+JworICAgICBlbHNlCisgICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNsdWRlJworICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSRnbF9jdl9uZXh0X3djdHlwZV9oCisgICAgIGZpCisgICAgIE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDVFlQRV9IPSRnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZQorCisKKworCisgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl93Y3R5cGVfaCA9IHllczsgdGhlbgorICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfaXN3Y250cmwgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBpc3djbnRybCB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGlzd2NudHJsIHdvcmtzLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfaXN3Y250cmxfd29ya3MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICNpZiBfX0dOVV9MSUJSQVJZX18gPT0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICBMaW51eCBsaWJjNSBpMThuIGlzIGJyb2tlbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfaXN3Y250cmxfd29ya3M9Imd1ZXNzaW5nIHllcyIKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19pc3djbnRybF93b3Jrcz0iZ3Vlc3Npbmcgbm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgICAgICAgICAgICAvKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUKKyAgICAgICAgICAgICAgICAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uCisgICAgICAgICAgICAgICAgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+CisgICAgICAgICAgICAgICAgICBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLworICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGRlZi5oPgorICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICAgICAgICAgICAgICAjaW5jbHVkZSA8dGltZS5oPgorICAgICAgICAgICAgICAgI2luY2x1ZGUgPHdjaGFyLmg+CisgICAgICAgICAgICAgICAjaW5jbHVkZSA8d2N0eXBlLmg+CisgICAgICAgICAgICAgICBpbnQgbWFpbiAoKSB7IHJldHVybiBpc3dwcmludCAoJ3gnKSA9PSAwOyB9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfaXN3Y250cmxfd29ya3M9eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfaXN3Y250cmxfd29ya3M9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfaXN3Y250cmxfd29ya3MiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2lzd2NudHJsX3dvcmtzIiA+JjY7IH0KKyAgICBmaQorICAgIEhBVkVfV0NUWVBFX0g9MQorICBlbHNlCisgICAgSEFWRV9XQ1RZUEVfSD0wCisgIGZpCisKKworICBjYXNlICIkZ2xfY3ZfZnVuY19pc3djbnRybF93b3JrcyIgaW4KKyAgICAqeWVzKSBSRVBMQUNFX0lTV0NOVFJMPTAgOzsKKyAgICAqKSAgICBSRVBMQUNFX0lTV0NOVFJMPTEgOzsKKyAgZXNhYworCisKKyAgaWYgdGVzdCAkSEFWRV9JU1dDTlRSTCA9IDAgfHwgdGVzdCAkUkVQTEFDRV9JU1dDTlRSTCA9IDE7IHRoZW4KKyAgICAgICAgOgorICBmaQorCisgIGlmIHRlc3QgJFJFUExBQ0VfSVNXQ05UUkwgPSAxOyB0aGVuCisgICAgUkVQTEFDRV9UT1dMT1dFUj0xCisgIGVsc2UKKyAgICBmb3IgYWNfZnVuYyBpbiB0b3dsb3dlcgorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJ0b3dsb3dlciIgImFjX2N2X2Z1bmNfdG93bG93ZXIiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfdG93bG93ZXIiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9UT1dMT1dFUiAxCitfQUNFT0YKKworZmkKK2RvbmUKKworICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfdG93bG93ZXIgPSB5ZXM7IHRoZW4KKyAgICAgIFJFUExBQ0VfVE9XTE9XRVI9MAorICAgIGVsc2UKKyAgICAgIGFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgInRvd2xvd2VyIiAiYWNfY3ZfaGF2ZV9kZWNsX3Rvd2xvd2VyIiAiLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlCisgICAgICAgICAgICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4KKyAgICAgICAgICAgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+CisgICAgICAgICAgICAgbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyAgICAgICAgICAjaW5jbHVkZSA8c3RkZGVmLmg+CisgICAgICAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICAgICAgICAgI2luY2x1ZGUgPHRpbWUuaD4KKyAgICAgICAgICAjaW5jbHVkZSA8d2NoYXIuaD4KKyAgICAgICAgICAjaWYgSEFWRV9XQ1RZUEVfSAorICAgICAgICAgICMgaW5jbHVkZSA8d2N0eXBlLmg+CisgICAgICAgICAgI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX3Rvd2xvd2VyIiA9IHh5ZXM7IHRoZW4gOgorICBhY19oYXZlX2RlY2w9MQorZWxzZQorICBhY19oYXZlX2RlY2w9MAorZmkKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfVE9XTE9XRVIgJGFjX2hhdmVfZGVjbAorX0FDRU9GCisKKyAgICAgIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF90b3dsb3dlciA9IHllczsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVBMQUNFX1RPV0xPV0VSPTEKKyAgICAgIGVsc2UKKyAgICAgICAgUkVQTEFDRV9UT1dMT1dFUj0wCisgICAgICBmaQorICAgIGZpCisgIGZpCisKKworICBpZiB0ZXN0ICRIQVZFX0lTV0NOVFJMID0gMCB8fCB0ZXN0ICRSRVBMQUNFX1RPV0xPV0VSID0gMTsgdGhlbgorICAgICAgICA6CisgIGZpCisKKyAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3Y3R5cGVfdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igd2N0eXBlX3QuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfdHlwZV93Y3R5cGVfdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZQorICAgICAgICAgICAgICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4KKyAgICAgICAgICAgICAgIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4KKyAgICAgICAgICAgICAgIG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovCisgICAgICAgICAgICAjaW5jbHVkZSA8c3RkZGVmLmg+CisgICAgICAgICAgICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgICAgICAgICAgICNpbmNsdWRlIDx0aW1lLmg+CisgICAgICAgICAgICAjaW5jbHVkZSA8d2NoYXIuaD4KKyAgICAgICAgICAgICNpZiBIQVZFX1dDVFlQRV9ICisgICAgICAgICAgICAjIGluY2x1ZGUgPHdjdHlwZS5oPgorICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICB3Y3R5cGVfdCBhOworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X3R5cGVfd2N0eXBlX3Q9eWVzCitlbHNlCisgIGdsX2N2X3R5cGVfd2N0eXBlX3Q9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfdHlwZV93Y3R5cGVfdCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X3R5cGVfd2N0eXBlX3QiID4mNjsgfQorICBpZiB0ZXN0ICRnbF9jdl90eXBlX3djdHlwZV90ID0gbm87IHRoZW4KKyAgICBIQVZFX1dDVFlQRV9UPTAKKyAgZmkKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd2N0cmFuc190IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB3Y3RyYW5zX3QuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfdHlwZV93Y3RyYW5zX3QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisvKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUKKyAgICAgICAgICAgICAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uCisgICAgICAgICAgICAgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+CisgICAgICAgICAgICAgICBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLworICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGRlZi5oPgorICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICAgICAgICAgICAjaW5jbHVkZSA8dGltZS5oPgorICAgICAgICAgICAgI2luY2x1ZGUgPHdjaGFyLmg+CisgICAgICAgICAgICAjaW5jbHVkZSA8d2N0eXBlLmg+CisgICAgICAgICAgICB3Y3RyYW5zX3QgYTsKKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl90eXBlX3djdHJhbnNfdD15ZXMKK2Vsc2UKKyAgZ2xfY3ZfdHlwZV93Y3RyYW5zX3Q9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfdHlwZV93Y3RyYW5zX3QiID4mNQorJGFzX2VjaG8gIiRnbF9jdl90eXBlX3djdHJhbnNfdCIgPiY2OyB9CisgIGlmIHRlc3QgJGdsX2N2X3R5cGVfd2N0cmFuc190ID0gbm87IHRoZW4KKyAgICBIQVZFX1dDVFJBTlNfVD0wCisgIGZpCisKKworICAgIGZvciBnbF9mdW5jIGluIHdjdHlwZSBpc3djdHlwZSB3Y3RyYW5zIHRvd2N0cmFucyAgICAgOyBkbworICAgIGFzX2dsX1N5bWJvbD1gJGFzX2VjaG8gImdsX2N2X2hhdmVfcmF3X2RlY2xfJGdsX2Z1bmMiIHwgJGFzX3RyX3NoYAorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNsYXJlZCB3aXRob3V0IGEgbWFjcm8iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNsYXJlZCB3aXRob3V0IGEgbWFjcm8uLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JGFzX2dsX1N5bWJvbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQorICAgPHdjaGFyLmg+LgorICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyNpZiAhKGRlZmluZWQgX19HTElCQ19fICYmICFkZWZpbmVkIF9fVUNMSUJDX18pCisjIGluY2x1ZGUgPHN0ZGRlZi5oPgorIyBpbmNsdWRlIDxzdGRpby5oPgorIyBpbmNsdWRlIDx0aW1lLmg+CisjIGluY2x1ZGUgPHdjaGFyLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx3Y3R5cGUuaD4KKworaW50CittYWluICgpCit7CisjdW5kZWYgJGdsX2Z1bmMKKyAgKHZvaWQpICRnbF9mdW5jOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiRhc19nbF9TeW1ib2w9eWVzIgorZWxzZQorICBldmFsICIkYXNfZ2xfU3ltYm9sPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJGFzX2dsX1N5bWJvbAorCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgICAgaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19nbF9TeW1ib2wiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV9SQVdfREVDTF8kZ2xfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworICAgICAgICAgICAgICAgICAgICAgZXZhbCBhY19jdl9oYXZlX2RlY2xfJGdsX2Z1bmM9eWVzCitmaQorICAgICAgZG9uZQorCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGxkZXhwKCkgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGxkZXhwKCkgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibS4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX2xkZXhwX25vX2xpYm0rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZuZGVmIF9fTk9fTUFUSF9JTkxJTkVTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRlZmluZSBfX05PX01BVEhfSU5MSU5FUyAxIC8qIGZvciBnbGliYyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8bWF0aC5oPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICgqZnVuY3B0cikgKGRvdWJsZSwgaW50KSA9IGxkZXhwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHg7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBsZGV4cCAoeCwgLTEpID4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX2xkZXhwX25vX2xpYm09eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfbGRleHBfbm9fbGlibT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfbGRleHBfbm9fbGlibSIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfbGRleHBfbm9fbGlibSIgPiY2OyB9CisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBubF9sYW5naW5mbyBhbmQgQ09ERVNFVCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbmxfbGFuZ2luZm8gYW5kIENPREVTRVQuLi4gIiA+JjY7IH0KK2lmICR7YW1fY3ZfbGFuZ2luZm9fY29kZXNldCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxsYW5naW5mby5oPgoraW50CittYWluICgpCit7CitjaGFyKiBjcyA9IG5sX2xhbmdpbmZvKENPREVTRVQpOyByZXR1cm4gIWNzOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQ9eWVzCitlbHNlCisgIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9sYW5naW5mb19jb2Rlc2V0IiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfbGFuZ2luZm9fY29kZXNldCIgPiY2OyB9CisgIGlmIHRlc3QgJGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MQU5HSU5GT19DT0RFU0VUIDEiID4+Y29uZmRlZnMuaAorCisgIGZpCisKK2FjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgImdldGNfdW5sb2NrZWQiICJhY19jdl9oYXZlX2RlY2xfZ2V0Y191bmxvY2tlZCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfZ2V0Y191bmxvY2tlZCIgPSB4eWVzOyB0aGVuIDoKKyAgYWNfaGF2ZV9kZWNsPTEKK2Vsc2UKKyAgYWNfaGF2ZV9kZWNsPTAKK2ZpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ERUNMX0dFVENfVU5MT0NLRUQgJGFjX2hhdmVfZGVjbAorX0FDRU9GCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIExpYnJhcnkgPj0gMi4xIG9yIHVDbGliYyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgTGlicmFyeSA+PSAyLjEgb3IgdUNsaWJjLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2dudV9saWJyYXJ5XzJfMSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaWZkZWYgX19HTlVfTElCUkFSWV9fCisgI2lmIChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMSkgfHwgKF9fR0xJQkNfXyA+IDIpCisgIEx1Y2t5IEdOVSB1c2VyCisgI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBfX1VDTElCQ19fCisgTHVja3kgdXNlcgorI2VuZGlmCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIkx1Y2t5IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBhY19jdl9nbnVfbGlicmFyeV8yXzE9eWVzCitlbHNlCisgIGFjX2N2X2dudV9saWJyYXJ5XzJfMT1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZ251X2xpYnJhcnlfMl8xIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZ251X2xpYnJhcnlfMl8xIiA+JjY7IH0KKworICAgIEdMSUJDMjE9IiRhY19jdl9nbnVfbGlicmFyeV8yXzEiCisKKworCisgICAgICBpZiB0ZXN0ICJYJHByZWZpeCIgPSAiWE5PTkUiOyB0aGVuCisgICAgYWNsX2ZpbmFsX3ByZWZpeD0iJGFjX2RlZmF1bHRfcHJlZml4IgorICBlbHNlCisgICAgYWNsX2ZpbmFsX3ByZWZpeD0iJHByZWZpeCIKKyAgZmkKKyAgaWYgdGVzdCAiWCRleGVjX3ByZWZpeCIgPSAiWE5PTkUiOyB0aGVuCisgICAgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PScke3ByZWZpeH0nCisgIGVsc2UKKyAgICBhY2xfZmluYWxfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZmkKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBldmFsIGFjbF9maW5hbF9leGVjX3ByZWZpeD1cIiRhY2xfZmluYWxfZXhlY19wcmVmaXhcIgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWdudS1sZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9nbnVfbGQ7IHRlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllcworZWxzZQorICB3aXRoX2dudV9sZD1ubworZmkKKworIyBQcmVwYXJlIFBBVEhfU0VQQVJBVE9SLgorIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCitpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorICAjIERldGVybWluZSBQQVRIX1NFUEFSQVRPUiBieSB0cnlpbmcgdG8gZmluZCAvYmluL3NoIGluIGEgUEFUSCB3aGljaAorICAjIGNvbnRhaW5zIG9ubHkgL2Jpbi4gTm90ZSB0aGF0IGtzaCBsb29rcyBhbHNvIGF0IHRoZSBGUEFUSCB2YXJpYWJsZSwKKyAgIyBzbyB3ZSBoYXZlIHRvIHNldCB0aGF0IGFzIHdlbGwgZm9yIHRoZSB0ZXN0LgorICBQQVRIX1NFUEFSQVRPUj06CisgIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICAmJiB7IChQQVRIPScvYmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICAgICAgICAgfHwgUEFUSF9TRVBBUkFUT1I9JzsnCisgICAgICAgfQorZmkKKworYWNfcHJvZz1sZAoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQy4uLiAiID4mNjsgfQorICBjYXNlICRob3N0IGluCisgICotKi1taW5ndyopCisgICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuIHdoaWNoIHVwc2V0cyBtaW5ndworICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKKyAgKikKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7CisgIGVzYWMKKyAgY2FzZSAkYWNfcHJvZyBpbgorICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgorICAgIFtcXC9dKiB8ID86W1xcL10qKQorICAgICAgcmVfZGlyZWx0PScvW14vXVteL10qL1wuXC4vJworICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCisgICAgICBhY19wcm9nPWBlY2hvICIkYWNfcHJvZyJ8IHNlZCAncyVcXFxcJS8lZydgCisgICAgICB3aGlsZSBlY2hvICIkYWNfcHJvZyIgfCBncmVwICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworICAgICAgICBhY19wcm9nPWBlY2hvICRhY19wcm9nfCBzZWQgInMlJHJlX2RpcmVsdCUvJSJgCisgICAgICBkb25lCisgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKKyAgICAgIDs7CisgICIiKQorICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorICAgIGFjX3Byb2c9bGQKKyAgICA7OworICAqKQorICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKyAgICB3aXRoX2dudV9sZD11bmtub3duCisgICAgOzsKKyAgZXNhYworZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgR05VIGxkLi4uICIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gIiA+JjY7IH0KK2ZpCitpZiAke2FjbF9jdl9wYXRoX0xEKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJExEIjsgdGhlbgorICBhY2xfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgSUZTPSIkYWNsX3NhdmVfaWZzIgorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCisgICAgICBhY2xfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKyAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCisgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKyAgICAgIGNhc2UgYCIkYWNsX2N2X3BhdGhfTEQiIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKyAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQorICAgICAgICB0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJyZWFrCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICB0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhaworICAgICAgICA7OworICAgICAgZXNhYworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNsX3NhdmVfaWZzIgorZWxzZQorICBhY2xfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KK2ZpCitmaQorCitMRD0iJGFjbF9jdl9wYXRoX0xEIgoraWYgdGVzdCAtbiAiJExEIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExEIiA+JjUKKyRhc19lY2hvICIkTEQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCit0ZXN0IC16ICIkTEQiICYmIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gIiA+JjY7IH0KK2lmICR7YWNsX2N2X3Byb2dfZ251X2xkKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgorY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBhY2xfY3ZfcHJvZ19nbnVfbGQ9eWVzCisgIDs7CisqKQorICBhY2xfY3ZfcHJvZ19nbnVfbGQ9bm8KKyAgOzsKK2VzYWMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjbF9jdl9wcm9nX2dudV9sZCIgPiY1CiskYXNfZWNobyAiJGFjbF9jdl9wcm9nX2dudV9sZCIgPiY2OyB9Cit3aXRoX2dudV9sZD0kYWNsX2N2X3Byb2dfZ251X2xkCisKKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNoYXJlZCBsaWJyYXJ5IHJ1biBwYXRoIG9yaWdpbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc2hhcmVkIGxpYnJhcnkgcnVuIHBhdGggb3JpZ2luLi4uICIgPiY2OyB9CitpZiAke2FjbF9jdl9ycGF0aCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICBDQz0iJENDIiBHQ0M9IiRHQ0MiIExERkxBR1M9IiRMREZMQUdTIiBMRD0iJExEIiB3aXRoX2dudV9sZD0iJHdpdGhfZ251X2xkIiBcCisgICAgJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gIiRhY19hdXhfZGlyL2NvbmZpZy5ycGF0aCIgIiRob3N0IiA+IGNvbmZ0ZXN0LnNoCisgICAgLiAuL2NvbmZ0ZXN0LnNoCisgICAgcm0gLWYgLi9jb25mdGVzdC5zaAorICAgIGFjbF9jdl9ycGF0aD1kb25lCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjbF9jdl9ycGF0aCIgPiY1CiskYXNfZWNobyAiJGFjbF9jdl9ycGF0aCIgPiY2OyB9CisgIHdsPSIkYWNsX2N2X3dsIgorICBhY2xfbGliZXh0PSIkYWNsX2N2X2xpYmV4dCIKKyAgYWNsX3NobGliZXh0PSIkYWNsX2N2X3NobGliZXh0IgorICBhY2xfbGlibmFtZV9zcGVjPSIkYWNsX2N2X2xpYm5hbWVfc3BlYyIKKyAgYWNsX2xpYnJhcnlfbmFtZXNfc3BlYz0iJGFjbF9jdl9saWJyYXJ5X25hbWVzX3NwZWMiCisgIGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkYWNsX2N2X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiCisgIGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSIkYWNsX2N2X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiCisgIGFjbF9oYXJkY29kZV9kaXJlY3Q9IiRhY2xfY3ZfaGFyZGNvZGVfZGlyZWN0IgorICBhY2xfaGFyZGNvZGVfbWludXNfTD0iJGFjbF9jdl9oYXJkY29kZV9taW51c19MIgorICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ycGF0aCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9ycGF0aCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3JwYXRoOyA6CitlbHNlCisgIGVuYWJsZV9ycGF0aD15ZXMKK2ZpCisKKworCisKKyAgYWNsX2xpYmRpcnN0ZW09bGliCisgIGFjbF9saWJkaXJzdGVtMj0KKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgc29sYXJpcyopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciA2NC1iaXQgaG9zdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgNjQtYml0IGhvc3QuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3Zfc29sYXJpc182NGJpdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2lmZGVmIF9MUDY0CitzaXh0eWZvdXIgYml0cworI2VuZGlmCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgInNpeHR5Zm91ciBiaXRzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBnbF9jdl9zb2xhcmlzXzY0Yml0PXllcworZWxzZQorICBnbF9jdl9zb2xhcmlzXzY0Yml0PW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3Zfc29sYXJpc182NGJpdCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X3NvbGFyaXNfNjRiaXQiID4mNjsgfQorICAgICAgaWYgdGVzdCAkZ2xfY3Zfc29sYXJpc182NGJpdCA9IHllczsgdGhlbgorICAgICAgICBhY2xfbGliZGlyc3RlbT1saWIvNjQKKyAgICAgICAgY2FzZSAiJGhvc3RfY3B1IiBpbgorICAgICAgICAgIHNwYXJjKikgICAgICAgIGFjbF9saWJkaXJzdGVtMj1saWIvc3BhcmN2OSA7OworICAgICAgICAgIGkqODYgfCB4ODZfNjQpIGFjbF9saWJkaXJzdGVtMj1saWIvYW1kNjQgOzsKKyAgICAgICAgZXNhYworICAgICAgZmkKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHNlYXJjaHBhdGg9YChMQ19BTEw9QyAkQ0MgLXByaW50LXNlYXJjaC1kaXJzKSAyPi9kZXYvbnVsbCB8IHNlZCAtbiAtZSAncyxebGlicmFyaWVzOiAsLHAnIHwgc2VkIC1lICdzLF49LCwnYAorICAgICAgaWYgdGVzdCAtbiAiJHNlYXJjaHBhdGgiOyB0aGVuCisgICAgICAgIGFjbF9zYXZlX0lGUz0iJHtJRlM9IAl9IjsgSUZTPSI6IgorICAgICAgICBmb3Igc2VhcmNoZGlyIGluICRzZWFyY2hwYXRoOyBkbworICAgICAgICAgIGlmIHRlc3QgLWQgIiRzZWFyY2hkaXIiOyB0aGVuCisgICAgICAgICAgICBjYXNlICIkc2VhcmNoZGlyIiBpbgorICAgICAgICAgICAgICAqL2xpYjY0LyB8ICovbGliNjQgKSBhY2xfbGliZGlyc3RlbT1saWI2NCA7OworICAgICAgICAgICAgICAqLy4uLyB8ICovLi4gKQorICAgICAgICAgICAgICAgICMgQmV0dGVyIGlnbm9yZSBkaXJlY3RvcmllcyBvZiB0aGlzIGZvcm0uIFRoZXkgYXJlIG1pc2xlYWRpbmcuCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgKikgc2VhcmNoZGlyPWBjZCAiJHNlYXJjaGRpciIgJiYgcHdkYAorICAgICAgICAgICAgICAgICBjYXNlICIkc2VhcmNoZGlyIiBpbgorICAgICAgICAgICAgICAgICAgICovbGliNjQgKSBhY2xfbGliZGlyc3RlbT1saWI2NCA7OworICAgICAgICAgICAgICAgICBlc2FjIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgICAgICBJRlM9IiRhY2xfc2F2ZV9JRlMiCisgICAgICBmaQorICAgICAgOzsKKyAgZXNhYworICB0ZXN0IC1uICIkYWNsX2xpYmRpcnN0ZW0yIiB8fCBhY2xfbGliZGlyc3RlbTI9IiRhY2xfbGliZGlyc3RlbSIKKworCisKKyAgZ2xfdGhyZWFkc19hcGk9bm9uZQorICBMSUJUSFJFQUQ9CisgIExUTElCVEhSRUFEPQorICBMSUJNVUxUSVRIUkVBRD0KKyAgTFRMSUJNVUxUSVRIUkVBRD0KKyAgaWYgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiAhPSBubzsgdGhlbgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgaW1wb3J0ZWQgc3ltYm9scyBjYW4gYmUgZGVjbGFyZWQgd2VhayIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGltcG9ydGVkIHN5bWJvbHMgY2FuIGJlIGRlY2xhcmVkIHdlYWsuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfaGF2ZV93ZWFrKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZ2xfY3ZfaGF2ZV93ZWFrPW5vCisgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK2V4dGVybiB2b2lkIHh5enp5ICgpOworI3ByYWdtYSB3ZWFrIHh5enp5CitpbnQKK21haW4gKCkKK3sKK3h5enp5KCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfaGF2ZV93ZWFrPW1heWJlCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX3dlYWsgPSBtYXliZTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICAgICAgICAgICAgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZkZWYgX19FTEZfXworICAgICAgICAgICAgICAgRXh0ZW5zaWJsZSBMaW5raW5nIEZvcm1hdAorICAgICAgICAgICAgICAgI2VuZGlmCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIkV4dGVuc2libGUgTGlua2luZyBGb3JtYXQiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGdsX2N2X2hhdmVfd2Vhaz0iZ3Vlc3NpbmcgeWVzIgorZWxzZQorICBnbF9jdl9oYXZlX3dlYWs9Imd1ZXNzaW5nIG5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNwcmFnbWEgd2VhayBmcHV0cworaW50IG1haW4gKCkKK3sKKyAgcmV0dXJuIChmcHV0cyA9PSBOVUxMKTsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2hhdmVfd2Vhaz15ZXMKK2Vsc2UKKyAgZ2xfY3ZfaGF2ZV93ZWFrPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworICAgICAgIGZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2hhdmVfd2VhayIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2hhdmVfd2VhayIgPiY2OyB9CisgICAgaWYgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiA9IHllcyB8fCB0ZXN0ICIkZ2xfdXNlX3RocmVhZHMiID0gcG9zaXg7IHRoZW4KKyAgICAgICMgT24gT1NGLzEsIHRoZSBjb21waWxlciBuZWVkcyB0aGUgZmxhZyAtcHRocmVhZCBvciAtRF9SRUVOVFJBTlQgc28gdGhhdAorICAgICAgIyBpdCBncm9rcyA8cHRocmVhZC5oPi4gSXQncyBhZGRlZCBhYm92ZSwgaW4gZ2xfVEhSRUFETElCX0VBUkxZX0JPRFkuCisgICAgICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAicHRocmVhZC5oIiAiYWNfY3ZfaGVhZGVyX3B0aHJlYWRfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfcHRocmVhZF9oIiA9IHh5ZXM7IHRoZW4gOgorICBnbF9oYXZlX3B0aHJlYWRfaD15ZXMKK2Vsc2UKKyAgZ2xfaGF2ZV9wdGhyZWFkX2g9bm8KK2ZpCisKKworICAgICAgaWYgdGVzdCAiJGdsX2hhdmVfcHRocmVhZF9oIiA9IHllczsgdGhlbgorICAgICAgICAjIE90aGVyIHBvc3NpYmxlIHRlc3RzOgorICAgICAgICAjICAgLWxwdGhyZWFkcyAoRlNVIHRocmVhZHMsIFBDdGhyZWFkcykKKyAgICAgICAgIyAgIC1sZ3RocmVhZHMKKyAgICAgICAgZ2xfaGF2ZV9wdGhyZWFkPQorICAgICAgICAjIFRlc3Qgd2hldGhlciBib3RoIHB0aHJlYWRfbXV0ZXhfbG9jayBhbmQgcHRocmVhZF9tdXRleGF0dHJfaW5pdCBleGlzdAorICAgICAgICAjIGluIGxpYmMuIElSSVggNi41IGhhcyB0aGUgZmlyc3Qgb25lIGluIGJvdGggbGliYyBhbmQgbGlicHRocmVhZCwgYnV0CisgICAgICAgICMgdGhlIHNlY29uZCBvbmUgb25seSBpbiBsaWJwdGhyZWFkLCBhbmQgbG9jay5jIG5lZWRzIGl0LgorICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8cHRocmVhZC5oPgoraW50CittYWluICgpCit7CitwdGhyZWFkX211dGV4X2xvY2soKHB0aHJlYWRfbXV0ZXhfdCopMCk7CisgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4YXR0cl9pbml0KChwdGhyZWFkX211dGV4YXR0cl90KikwKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9oYXZlX3B0aHJlYWQ9eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgIyBUZXN0IGZvciBsaWJwdGhyZWFkIGJ5IGxvb2tpbmcgZm9yIHB0aHJlYWRfa2lsbC4gKE5vdCBwdGhyZWFkX3NlbGYsCisgICAgICAgICMgc2luY2UgaXQgaXMgZGVmaW5lZCBhcyBhIG1hY3JvIG9uIE9TRi8xLikKKyAgICAgICAgaWYgdGVzdCAtbiAiJGdsX2hhdmVfcHRocmVhZCI7IHRoZW4KKyAgICAgICAgICAjIFRoZSBwcm9ncmFtIGxpbmtzIGZpbmUgd2l0aG91dCBsaWJwdGhyZWFkLiBCdXQgaXQgbWF5IGFjdHVhbGx5CisgICAgICAgICAgIyBuZWVkIHRvIGxpbmsgd2l0aCBsaWJwdGhyZWFkIGluIG9yZGVyIHRvIGNyZWF0ZSBtdWx0aXBsZSB0aHJlYWRzLgorICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHB0aHJlYWRfa2lsbCBpbiAtbHB0aHJlYWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHB0aHJlYWRfa2lsbCBpbiAtbHB0aHJlYWQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9raWxsKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxwdGhyZWFkICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBwdGhyZWFkX2tpbGwgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBwdGhyZWFkX2tpbGwgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9raWxsPXllcworZWxzZQorICBhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX2tpbGw9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9raWxsIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9raWxsIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9raWxsIiA9IHh5ZXM7IHRoZW4gOgorICBMSUJNVUxUSVRIUkVBRD0tbHB0aHJlYWQgTFRMSUJNVUxUSVRIUkVBRD0tbHB0aHJlYWQKKyAgICAgICAgICAgICAjIE9uIFNvbGFyaXMgYW5kIEhQLVVYLCBtb3N0IHB0aHJlYWQgZnVuY3Rpb25zIGV4aXN0IGFsc28gaW4gbGliYy4KKyAgICAgICAgICAgICAjIFRoZXJlZm9yZSBwdGhyZWFkX2luX3VzZSgpIG5lZWRzIHRvIGFjdHVhbGx5IHRyeSB0byBjcmVhdGUgYQorICAgICAgICAgICAgICMgdGhyZWFkOiBwdGhyZWFkX2NyZWF0ZSBmcm9tIGxpYmMgd2lsbCBmYWlsLCB3aGVyZWFzCisgICAgICAgICAgICAgIyBwdGhyZWFkX2NyZWF0ZSB3aWxsIGFjdHVhbGx5IGNyZWF0ZSBhIHRocmVhZC4KKyAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgIHNvbGFyaXMqIHwgaHB1eCopCisKKyRhc19lY2hvICIjZGVmaW5lIFBUSFJFQURfSU5fVVNFX0RFVEVDVElPTl9IQVJEIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgICAgICAgZXNhYworCitmaQorCisgICAgICAgIGVsc2UKKyAgICAgICAgICAjIFNvbWUgbGlicmFyeSBpcyBuZWVkZWQuIFRyeSBsaWJwdGhyZWFkIGFuZCBsaWJjX3IuCisgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcHRocmVhZF9raWxsIGluIC1scHRocmVhZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcHRocmVhZF9raWxsIGluIC1scHRocmVhZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX2tpbGwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHB0aHJlYWQgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHB0aHJlYWRfa2lsbCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHB0aHJlYWRfa2lsbCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX2tpbGw9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfa2lsbD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX2tpbGwiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX2tpbGwiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX2tpbGwiID0geHllczsgdGhlbiA6CisgIGdsX2hhdmVfcHRocmVhZD15ZXMKKyAgICAgICAgICAgICBMSUJUSFJFQUQ9LWxwdGhyZWFkIExUTElCVEhSRUFEPS1scHRocmVhZAorICAgICAgICAgICAgIExJQk1VTFRJVEhSRUFEPS1scHRocmVhZCBMVExJQk1VTFRJVEhSRUFEPS1scHRocmVhZAorZmkKKworICAgICAgICAgIGlmIHRlc3QgLXogIiRnbF9oYXZlX3B0aHJlYWQiOyB0aGVuCisgICAgICAgICAgICAjIEZvciBGcmVlQlNEIDQuCisgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBwdGhyZWFkX2tpbGwgaW4gLWxjX3IiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHB0aHJlYWRfa2lsbCBpbiAtbGNfci4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfY19yX3B0aHJlYWRfa2lsbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sY19yICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBwdGhyZWFkX2tpbGwgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBwdGhyZWFkX2tpbGwgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2Nfcl9wdGhyZWFkX2tpbGw9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9jX3JfcHRocmVhZF9raWxsPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9jX3JfcHRocmVhZF9raWxsIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2Nfcl9wdGhyZWFkX2tpbGwiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfY19yX3B0aHJlYWRfa2lsbCIgPSB4eWVzOyB0aGVuIDoKKyAgZ2xfaGF2ZV9wdGhyZWFkPXllcworICAgICAgICAgICAgICAgTElCVEhSRUFEPS1sY19yIExUTElCVEhSRUFEPS1sY19yCisgICAgICAgICAgICAgICBMSUJNVUxUSVRIUkVBRD0tbGNfciBMVExJQk1VTFRJVEhSRUFEPS1sY19yCitmaQorCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgaWYgdGVzdCAtbiAiJGdsX2hhdmVfcHRocmVhZCI7IHRoZW4KKyAgICAgICAgICBnbF90aHJlYWRzX2FwaT1wb3NpeAorCiskYXNfZWNobyAiI2RlZmluZSBVU0VfUE9TSVhfVEhSRUFEUyAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICAgIGlmIHRlc3QgLW4gIiRMSUJNVUxUSVRIUkVBRCIgfHwgdGVzdCAtbiAiJExUTElCTVVMVElUSFJFQUQiOyB0aGVuCisgICAgICAgICAgICBpZiBjYXNlICIkZ2xfY3ZfaGF2ZV93ZWFrIiBpbiAqeWVzKSB0cnVlOzsgKikgZmFsc2U7OyBlc2FjOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9QT1NJWF9USFJFQURTX1dFQUsgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgICAgICAgTElCVEhSRUFEPQorICAgICAgICAgICAgICBMVExJQlRIUkVBRD0KKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKKyAgICBpZiB0ZXN0IC16ICIkZ2xfaGF2ZV9wdGhyZWFkIjsgdGhlbgorICAgICAgaWYgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiA9IHllcyB8fCB0ZXN0ICIkZ2xfdXNlX3RocmVhZHMiID0gc29sYXJpczsgdGhlbgorICAgICAgICBnbF9oYXZlX3NvbGFyaXN0aHJlYWQ9CisgICAgICAgIGdsX3NhdmVfTElCUz0iJExJQlMiCisgICAgICAgIExJQlM9IiRMSUJTIC1sdGhyZWFkIgorICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDx0aHJlYWQuaD4KKyNpbmNsdWRlIDxzeW5jaC5oPgorCitpbnQKK21haW4gKCkKK3sKK3Rocl9zZWxmKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfaGF2ZV9zb2xhcmlzdGhyZWFkPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgIExJQlM9IiRnbF9zYXZlX0xJQlMiCisgICAgICAgIGlmIHRlc3QgLW4gIiRnbF9oYXZlX3NvbGFyaXN0aHJlYWQiOyB0aGVuCisgICAgICAgICAgZ2xfdGhyZWFkc19hcGk9c29sYXJpcworICAgICAgICAgIExJQlRIUkVBRD0tbHRocmVhZAorICAgICAgICAgIExUTElCVEhSRUFEPS1sdGhyZWFkCisgICAgICAgICAgTElCTVVMVElUSFJFQUQ9IiRMSUJUSFJFQUQiCisgICAgICAgICAgTFRMSUJNVUxUSVRIUkVBRD0iJExUTElCVEhSRUFEIgorCiskYXNfZWNobyAiI2RlZmluZSBVU0VfU09MQVJJU19USFJFQURTIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgICAgaWYgY2FzZSAiJGdsX2N2X2hhdmVfd2VhayIgaW4gKnllcykgdHJ1ZTs7ICopIGZhbHNlOzsgZXNhYzsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBVU0VfU09MQVJJU19USFJFQURTX1dFQUsgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgICAgIExJQlRIUkVBRD0KKyAgICAgICAgICAgIExUTElCVEhSRUFEPQorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGZpCisgICAgaWYgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiA9IHB0aDsgdGhlbgorICAgICAgZ2xfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gbGluayB3aXRoIGxpYnB0aCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gbGluayB3aXRoIGxpYnB0aC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJwdGhfbGlicys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKworCisKKworCisKKworICAgIHVzZV9hZGRpdGlvbmFsPXllcworCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisKKyAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKyAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlicHRoLXByZWZpeCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbGlicHRoX3ByZWZpeCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbGlicHRoX3ByZWZpeDsKKyAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlhubyI7IHRoZW4KKyAgICAgIHVzZV9hZGRpdGlvbmFsPW5vCisgICAgZWxzZQorICAgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYIjsgdGhlbgorCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisKKyAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKyAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorCisgICAgICBlbHNlCisgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJHdpdGh2YWwvaW5jbHVkZSIKKyAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9IiR3aXRodmFsLyRhY2xfbGliZGlyc3RlbSIKKyAgICAgICAgaWYgdGVzdCAiJGFjbF9saWJkaXJzdGVtMiIgIT0gIiRhY2xfbGliZGlyc3RlbSIgXAorICAgICAgICAgICAmJiAhIHRlc3QgLWQgIiR3aXRodmFsLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KKyAgICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvJGFjbF9saWJkaXJzdGVtMiIKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKKworZmkKKworICAgICAgTElCUFRIPQorICBMVExJQlBUSD0KKyAgSU5DUFRIPQorICBMSUJQVEhfUFJFRklYPQorICAgICAgSEFWRV9MSUJQVEg9CisgIHJwYXRoZGlycz0KKyAgbHRycGF0aGRpcnM9CisgIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0KKyAgbmFtZXNfbmV4dF9yb3VuZD0ncHRoICcKKyAgd2hpbGUgdGVzdCAtbiAiJG5hbWVzX25leHRfcm91bmQiOyBkbworICAgIG5hbWVzX3RoaXNfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kIgorICAgIG5hbWVzX25leHRfcm91bmQ9CisgICAgZm9yIG5hbWUgaW4gJG5hbWVzX3RoaXNfcm91bmQ7IGRvCisgICAgICBhbHJlYWR5X2hhbmRsZWQ9CisgICAgICBmb3IgbiBpbiAkbmFtZXNfYWxyZWFkeV9oYW5kbGVkOyBkbworICAgICAgICBpZiB0ZXN0ICIkbiIgPSAiJG5hbWUiOyB0aGVuCisgICAgICAgICAgYWxyZWFkeV9oYW5kbGVkPXllcworICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgICBpZiB0ZXN0IC16ICIkYWxyZWFkeV9oYW5kbGVkIjsgdGhlbgorICAgICAgICBuYW1lc19hbHJlYWR5X2hhbmRsZWQ9IiRuYW1lc19hbHJlYWR5X2hhbmRsZWQgJG5hbWUiCisgICAgICAgICAgICAgICAgICAgICAgICB1cHBlcm5hbWU9YGVjaG8gIiRuYW1lIiB8IHNlZCAtZSAneXxhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vKy18QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19ffCdgCisgICAgICAgIGV2YWwgdmFsdWU9XCJcJEhBVkVfTElCJHVwcGVybmFtZVwiCisgICAgICAgIGlmIHRlc3QgLW4gIiR2YWx1ZSI7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0ICIkdmFsdWUiID0geWVzOyB0aGVuCisgICAgICAgICAgICBldmFsIHZhbHVlPVwiXCRMSUIkdXBwZXJuYW1lXCIKKyAgICAgICAgICAgIHRlc3QgLXogIiR2YWx1ZSIgfHwgTElCUFRIPSIke0xJQlBUSH0ke0xJQlBUSDorIH0kdmFsdWUiCisgICAgICAgICAgICBldmFsIHZhbHVlPVwiXCRMVExJQiR1cHBlcm5hbWVcIgorICAgICAgICAgICAgdGVzdCAteiAiJHZhbHVlIiB8fCBMVExJQlBUSD0iJHtMVExJQlBUSH0ke0xUTElCUFRIOisgfSR2YWx1ZSIKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6CisgICAgICAgICAgZmkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPQorICAgICAgICAgIGZvdW5kX2xhPQorICAgICAgICAgIGZvdW5kX3NvPQorICAgICAgICAgIGZvdW5kX2E9CisgICAgICAgICAgZXZhbCBsaWJuYW1lPVwiJGFjbF9saWJuYW1lX3NwZWNcIiAgICAjIHR5cGljYWxseTogbGlibmFtZT1saWIkbmFtZQorICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCisgICAgICAgICAgICBzaHJleHQ9Ii4kYWNsX3NobGliZXh0IiAgICAgICAgICAgICAjIHR5cGljYWxseTogc2hyZXh0PS5zbworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNocmV4dD0KKyAgICAgICAgICBmaQorICAgICAgICAgIGlmIHRlc3QgJHVzZV9hZGRpdGlvbmFsID0geWVzOyB0aGVuCisgICAgICAgICAgICBkaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCisgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQiCisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlYyIgPSAnJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCc7IHRoZW4KKyAgICAgICAgICAgICAgICAgIHZlcj1gKGNkICIkZGlyIiAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAiJGxpYm5hbWUkc2hyZXh0Ii4qOyBkbyBlY2hvICIkZiI7IGRvbmUgXAorICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgInMsXiRsaWJuYW1lJHNocmV4dFxcXFwuLCwiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc29ydCAtdCAnLicgLW4gLXIgLWsxLDEgLWsyLDIgLWszLDMgLWs0LDQgLWs1LDUgXAorICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgMXEgKSAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiR2ZXIiICYmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGV2YWwgbGlicmFyeV9uYW1lcz1cIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjXCIKKyAgICAgICAgICAgICAgICAgIGZvciBmIGluICRsaWJyYXJ5X25hbWVzOyBkbworICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRmIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kZiIKKyAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCisgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLmxhIjsgdGhlbgorICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyLyRsaWJuYW1lLmxhIgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICBmaQorICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbgorICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExUTElCUFRIOyBkbworCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisgIGV2YWwgeD1cIiR4XCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorCisgICAgICAgICAgICAgIGNhc2UgIiR4IiBpbgorICAgICAgICAgICAgICAgIC1MKikKKyAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCR4IiB8IHNlZCAtZSAncy9eWC1MLy8nYAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9zaGxpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dCIKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjIiA9ICckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgdmVyPWAoY2QgIiRkaXIiICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICIkbGlibmFtZSRzaHJleHQiLio7IGRvIGVjaG8gIiRmIjsgZG9uZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAicyxeJGxpYm5hbWUkc2hyZXh0XFxcXC4sLCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzb3J0IC10ICcuJyAtbiAtciAtazEsMSAtazIsMiAtazMsMyAtazQsNCAtazUsNSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAxcSApIDI+L2Rldi9udWxsYAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHZlciIgJiYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWNcIgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gJGxpYnJhcnlfbmFtZXM7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGYiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRmIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUubGEiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvJGxpYm5hbWUubGEiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICBmaQorICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIExUTElCUFRIPSIke0xUTElCUFRIfSR7TFRMSUJQVEg6KyB9LUwkZm91bmRfZGlyIC1sJG5hbWUiCisgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX3NvIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIgPSBubyBcCisgICAgICAgICAgICAgICAgIHx8IHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iIFwKKyAgICAgICAgICAgICAgICAgfHwgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbTIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlBUSD0iJHtMSUJQVEh9JHtMSUJQVEg6KyB9JGZvdW5kX3NvIgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICBmb3IgeCBpbiAkbHRycGF0aGRpcnM7IGRvCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZm91bmRfZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgbHRycGF0aGRpcnM9IiRsdHJwYXRoZGlycyAkZm91bmRfZGlyIgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfaGFyZGNvZGVfZGlyZWN0IiA9IHllczsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCUFRIPSIke0xJQlBUSH0ke0xJQlBUSDorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiAmJiB0ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlBUSD0iJHtMSUJQVEh9JHtMSUJQVEg6KyB9JGZvdW5kX3NvIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRmb3VuZF9kaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGZvdW5kX2RpciIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTElCUFRIOyBkbworCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisgIGV2YWwgeD1cIiR4XCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkZm91bmRfZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgTElCUFRIPSIke0xJQlBUSH0ke0xJQlBUSDorIH0tTCRmb3VuZF9kaXIiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJQVEg9IiR7TElCUFRIfSR7TElCUFRIOisgfSRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJQVEg9IiR7TElCUFRIfSR7TElCUFRIOisgfS1sJG5hbWUiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfYSIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlBUSD0iJHtMSUJQVEh9JHtMSUJQVEg6KyB9JGZvdW5kX2EiCisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlBUSD0iJHtMSUJQVEh9JHtMSUJQVEg6KyB9LUwkZm91bmRfZGlyIC1sJG5hbWUiCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPQorICAgICAgICAgICAgY2FzZSAiJGZvdW5kX2RpciIgaW4KKyAgICAgICAgICAgICAgKi8kYWNsX2xpYmRpcnN0ZW0gfCAqLyRhY2xfbGliZGlyc3RlbS8pCisgICAgICAgICAgICAgICAgYmFzZWRpcj1gZWNobyAiWCRmb3VuZF9kaXIiIHwgc2VkIC1lICdzLF5YLCwnIC1lICJzLC8kYWNsX2xpYmRpcnN0ZW0vIicqJCwsJ2AKKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkbmFtZSIgPSAncHRoJzsgdGhlbgorICAgICAgICAgICAgICAgICAgTElCUFRIX1BSRUZJWD0iJGJhc2VkaXIiCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiRiYXNlZGlyL2luY2x1ZGUiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgKi8kYWNsX2xpYmRpcnN0ZW0yIHwgKi8kYWNsX2xpYmRpcnN0ZW0yLykKKyAgICAgICAgICAgICAgICBiYXNlZGlyPWBlY2hvICJYJGZvdW5kX2RpciIgfCBzZWQgLWUgJ3MsXlgsLCcgLWUgInMsLyRhY2xfbGliZGlyc3RlbTIvIicqJCwsJ2AKKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkbmFtZSIgPSAncHRoJzsgdGhlbgorICAgICAgICAgICAgICAgICAgTElCUFRIX1BSRUZJWD0iJGJhc2VkaXIiCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiRiYXNlZGlyL2luY2x1ZGUiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgvdXNyL2luY2x1ZGUiOyB0aGVuCisgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiA9ICJYL3Vzci9sb2NhbC9pbmNsdWRlIjsgdGhlbgorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICAgICAgICAgICAgICAgIGxpbnV4KiB8IGdudSogfCBrKmJzZCotZ251KSBoYXZlaXQ9eWVzOzsKKyAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkQ1BQRkxBR1MgJElOQ1BUSDsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkNQVEg9IiR7SU5DUFRIfSR7SU5DUFRIOisgfS1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkZm91bmRfbGEiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVfbGliZGlyPSIkbGliZGlyIgorICAgICAgICAgICAgICBjYXNlICIkZm91bmRfbGEiIGluCisgICAgICAgICAgICAgICAgKi8qIHwgKlxcKikgLiAiJGZvdW5kX2xhIiA7OworICAgICAgICAgICAgICAgICopIC4gIi4vJGZvdW5kX2xhIiA7OworICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgIGxpYmRpcj0iJHNhdmVfbGliZGlyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKyAgICAgICAgICAgICAgICBjYXNlICIkZGVwIiBpbgorICAgICAgICAgICAgICAgICAgLUwqKQorICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj1gZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLUwvLydgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgIT0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbSIgXAorICAgICAgICAgICAgICAgICAgICAgICAmJiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtMiI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgPSAiWC91c3IvbG9jYWwvJGFjbF9saWJkaXJzdGVtIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgPSAiWC91c3IvbG9jYWwvJGFjbF9saWJkaXJzdGVtMiI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW51eCogfCBnbnUqIHwgaypic2QqLWdudSkgaGF2ZWl0PXllczs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExJQlBUSDsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCUFRIPSIke0xJQlBUSH0ke0xJQlBUSDorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJQVEg7IGRvCisKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKyAgZXZhbCB4PVwiJHhcIgorICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUTElCUFRIPSIke0xUTElCUFRIfSR7TFRMSUJQVEg6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAtUiopCisgICAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLVIvLydgCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiICE9IG5vOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRsdHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgIC1sKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1sLy8nYAorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgKi5sYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNfbmV4dF9yb3VuZD0iJG5hbWVzX25leHRfcm91bmQgImBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MsXlguKi8sLCcgLWUgJ3MsXmxpYiwsJyAtZSAncyxcLmxhJCwsJ2AKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCUFRIPSIke0xJQlBUSH0ke0xJQlBUSDorIH0kZGVwIgorICAgICAgICAgICAgICAgICAgICBMVExJQlBUSD0iJHtMVExJQlBUSH0ke0xUTElCUFRIOisgfSRkZXAiCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICBmaQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlBUSD0iJHtMSUJQVEh9JHtMSUJQVEg6KyB9LWwkbmFtZSIKKyAgICAgICAgICAgIExUTElCUFRIPSIke0xUTElCUFRIfSR7TFRMSUJQVEg6KyB9LWwkbmFtZSIKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBkb25lCisgIGRvbmUKKyAgaWYgdGVzdCAiWCRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFsbGRpcnM9CisgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCisgICAgICAgIGFsbGRpcnM9IiR7YWxsZGlyc30ke2FsbGRpcnM6KyRhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcn0kZm91bmRfZGlyIgorICAgICAgZG9uZQorICAgICAgICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgorICAgICAgbGliZGlyPSIkYWxsZGlycyIKKyAgICAgIGV2YWwgZmxhZz1cIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisgICAgICBMSUJQVEg9IiR7TElCUFRIfSR7TElCUFRIOisgfSRmbGFnIgorICAgIGVsc2UKKyAgICAgICAgICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgorICAgICAgICBsaWJkaXI9IiRmb3VuZF9kaXIiCisgICAgICAgIGV2YWwgZmxhZz1cIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKyAgICAgICAgTElCUFRIPSIke0xJQlBUSH0ke0xJQlBUSDorIH0kZmxhZyIKKyAgICAgIGRvbmUKKyAgICBmaQorICBmaQorICBpZiB0ZXN0ICJYJGx0cnBhdGhkaXJzIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgIGZvciBmb3VuZF9kaXIgaW4gJGx0cnBhdGhkaXJzOyBkbworICAgICAgTFRMSUJQVEg9IiR7TFRMSUJQVEh9JHtMVExJQlBUSDorIH0tUiRmb3VuZF9kaXIiCisgICAgZG9uZQorICBmaQorCisKKworCisKKworICAgIGFjX2N2X2xpYnB0aF9saWJzPSIkTElCUFRIIgorICAgIGFjX2N2X2xpYnB0aF9sdGxpYnM9IiRMVExJQlBUSCIKKyAgICBhY19jdl9saWJwdGhfY3BwZmxhZ3M9IiRJTkNQVEgiCisgICAgYWNfY3ZfbGlicHRoX3ByZWZpeD0iJExJQlBUSF9QUkVGSVgiCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYnB0aF9saWJzIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGlicHRoX2xpYnMiID4mNjsgfQorICBMSUJQVEg9IiRhY19jdl9saWJwdGhfbGlicyIKKyAgTFRMSUJQVEg9IiRhY19jdl9saWJwdGhfbHRsaWJzIgorICBJTkNQVEg9IiRhY19jdl9saWJwdGhfY3BwZmxhZ3MiCisgIExJQlBUSF9QUkVGSVg9IiRhY19jdl9saWJwdGhfcHJlZml4IgorCisgIGZvciBlbGVtZW50IGluICRJTkNQVEg7IGRvCisgICAgaGF2ZWl0PQorICAgIGZvciB4IGluICRDUFBGTEFHUzsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGVsZW1lbnQiOyB0aGVuCisgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZG9uZQorICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30ke0NQUEZMQUdTOisgfSRlbGVtZW50IgorICAgIGZpCisgIGRvbmUKKworCisKKworICAgICAgSEFWRV9MSUJQVEg9eWVzCisKKworCisgICAgICBnbF9oYXZlX3B0aD0KKyAgICAgIGdsX3NhdmVfTElCUz0iJExJQlMiCisgICAgICBMSUJTPSIkTElCUyAkTElCUFRIIgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHB0aC5oPgoraW50CittYWluICgpCit7CitwdGhfc2VsZigpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2hhdmVfcHRoPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICBMSUJTPSIkZ2xfc2F2ZV9MSUJTIgorICAgICAgaWYgdGVzdCAtbiAiJGdsX2hhdmVfcHRoIjsgdGhlbgorICAgICAgICBnbF90aHJlYWRzX2FwaT1wdGgKKyAgICAgICAgTElCVEhSRUFEPSIkTElCUFRIIgorICAgICAgICBMVExJQlRIUkVBRD0iJExUTElCUFRIIgorICAgICAgICBMSUJNVUxUSVRIUkVBRD0iJExJQlRIUkVBRCIKKyAgICAgICAgTFRMSUJNVUxUSVRIUkVBRD0iJExUTElCVEhSRUFEIgorCiskYXNfZWNobyAiI2RlZmluZSBVU0VfUFRIX1RIUkVBRFMgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgaWYgdGVzdCAtbiAiJExJQk1VTFRJVEhSRUFEIiB8fCB0ZXN0IC1uICIkTFRMSUJNVUxUSVRIUkVBRCI7IHRoZW4KKyAgICAgICAgICBpZiBjYXNlICIkZ2xfY3ZfaGF2ZV93ZWFrIiBpbiAqeWVzKSB0cnVlOzsgKikgZmFsc2U7OyBlc2FjOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9QVEhfVEhSRUFEU19XRUFLIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgICAgICBMSUJUSFJFQUQ9CisgICAgICAgICAgICBMVExJQlRIUkVBRD0KKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZWxzZQorICAgICAgICBDUFBGTEFHUz0iJGdsX3NhdmVfQ1BQRkxBR1MiCisgICAgICBmaQorICAgIGZpCisgICAgaWYgdGVzdCAteiAiJGdsX2hhdmVfcHRocmVhZCI7IHRoZW4KKyAgICAgIGNhc2UgIiRnbF91c2VfdGhyZWFkcyIgaW4KKyAgICAgICAgeWVzIHwgd2luZG93cyB8IHdpbjMyKSAjIFRoZSAnd2luMzInIGlzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorICAgICAgICAgIGlmIHsgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgIG1pbmd3KikgdHJ1ZTs7CisgICAgICAgICAgICAgICAgICopIGZhbHNlOzsKKyAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICB9OyB0aGVuCisgICAgICAgICAgICBnbF90aHJlYWRzX2FwaT13aW5kb3dzCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9XSU5ET1dTX1RIUkVBRFMgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgICBmaQorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZmkKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbXVsdGl0aHJlYWQgQVBJIHRvIHVzZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbXVsdGl0aHJlYWQgQVBJIHRvIHVzZS4uLiAiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX3RocmVhZHNfYXBpIiA+JjUKKyRhc19lY2hvICIkZ2xfdGhyZWFkc19hcGkiID4mNjsgfQorCisKKworCisKKworCisKKworCisKKworICBHTlVMSUJfQlRPV0M9MDsKKyAgR05VTElCX1dDVE9CPTA7CisgIEdOVUxJQl9NQlNJTklUPTA7CisgIEdOVUxJQl9NQlJUT1dDPTA7CisgIEdOVUxJQl9NQlJMRU49MDsKKyAgR05VTElCX01CU1JUT1dDUz0wOworICBHTlVMSUJfTUJTTlJUT1dDUz0wOworICBHTlVMSUJfV0NSVE9NQj0wOworICBHTlVMSUJfV0NTUlRPTUJTPTA7CisgIEdOVUxJQl9XQ1NOUlRPTUJTPTA7CisgIEdOVUxJQl9XQ1dJRFRIPTA7CisgIEdOVUxJQl9XTUVNQ0hSPTA7CisgIEdOVUxJQl9XTUVNQ01QPTA7CisgIEdOVUxJQl9XTUVNQ1BZPTA7CisgIEdOVUxJQl9XTUVNTU9WRT0wOworICBHTlVMSUJfV01FTVNFVD0wOworICBHTlVMSUJfV0NTTEVOPTA7CisgIEdOVUxJQl9XQ1NOTEVOPTA7CisgIEdOVUxJQl9XQ1NDUFk9MDsKKyAgR05VTElCX1dDUENQWT0wOworICBHTlVMSUJfV0NTTkNQWT0wOworICBHTlVMSUJfV0NQTkNQWT0wOworICBHTlVMSUJfV0NTQ0FUPTA7CisgIEdOVUxJQl9XQ1NOQ0FUPTA7CisgIEdOVUxJQl9XQ1NDTVA9MDsKKyAgR05VTElCX1dDU05DTVA9MDsKKyAgR05VTElCX1dDU0NBU0VDTVA9MDsKKyAgR05VTElCX1dDU05DQVNFQ01QPTA7CisgIEdOVUxJQl9XQ1NDT0xMPTA7CisgIEdOVUxJQl9XQ1NYRlJNPTA7CisgIEdOVUxJQl9XQ1NEVVA9MDsKKyAgR05VTElCX1dDU0NIUj0wOworICBHTlVMSUJfV0NTUkNIUj0wOworICBHTlVMSUJfV0NTQ1NQTj0wOworICBHTlVMSUJfV0NTU1BOPTA7CisgIEdOVUxJQl9XQ1NQQlJLPTA7CisgIEdOVUxJQl9XQ1NTVFI9MDsKKyAgR05VTElCX1dDU1RPSz0wOworICBHTlVMSUJfV0NTV0lEVEg9MDsKKyAgICBIQVZFX0JUT1dDPTE7CisgIEhBVkVfTUJTSU5JVD0xOworICBIQVZFX01CUlRPV0M9MTsKKyAgSEFWRV9NQlJMRU49MTsKKyAgSEFWRV9NQlNSVE9XQ1M9MTsKKyAgSEFWRV9NQlNOUlRPV0NTPTE7CisgIEhBVkVfV0NSVE9NQj0xOworICBIQVZFX1dDU1JUT01CUz0xOworICBIQVZFX1dDU05SVE9NQlM9MTsKKyAgSEFWRV9XTUVNQ0hSPTE7CisgIEhBVkVfV01FTUNNUD0xOworICBIQVZFX1dNRU1DUFk9MTsKKyAgSEFWRV9XTUVNTU9WRT0xOworICBIQVZFX1dNRU1TRVQ9MTsKKyAgSEFWRV9XQ1NMRU49MTsKKyAgSEFWRV9XQ1NOTEVOPTE7CisgIEhBVkVfV0NTQ1BZPTE7CisgIEhBVkVfV0NQQ1BZPTE7CisgIEhBVkVfV0NTTkNQWT0xOworICBIQVZFX1dDUE5DUFk9MTsKKyAgSEFWRV9XQ1NDQVQ9MTsKKyAgSEFWRV9XQ1NOQ0FUPTE7CisgIEhBVkVfV0NTQ01QPTE7CisgIEhBVkVfV0NTTkNNUD0xOworICBIQVZFX1dDU0NBU0VDTVA9MTsKKyAgSEFWRV9XQ1NOQ0FTRUNNUD0xOworICBIQVZFX1dDU0NPTEw9MTsKKyAgSEFWRV9XQ1NYRlJNPTE7CisgIEhBVkVfV0NTRFVQPTE7CisgIEhBVkVfV0NTQ0hSPTE7CisgIEhBVkVfV0NTUkNIUj0xOworICBIQVZFX1dDU0NTUE49MTsKKyAgSEFWRV9XQ1NTUE49MTsKKyAgSEFWRV9XQ1NQQlJLPTE7CisgIEhBVkVfV0NTU1RSPTE7CisgIEhBVkVfV0NTVE9LPTE7CisgIEhBVkVfV0NTV0lEVEg9MTsKKyAgSEFWRV9ERUNMX1dDVE9CPTE7CisgIEhBVkVfREVDTF9XQ1dJRFRIPTE7CisgIFJFUExBQ0VfTUJTVEFURV9UPTA7CisgIFJFUExBQ0VfQlRPV0M9MDsKKyAgUkVQTEFDRV9XQ1RPQj0wOworICBSRVBMQUNFX01CU0lOSVQ9MDsKKyAgUkVQTEFDRV9NQlJUT1dDPTA7CisgIFJFUExBQ0VfTUJSTEVOPTA7CisgIFJFUExBQ0VfTUJTUlRPV0NTPTA7CisgIFJFUExBQ0VfTUJTTlJUT1dDUz0wOworICBSRVBMQUNFX1dDUlRPTUI9MDsKKyAgUkVQTEFDRV9XQ1NSVE9NQlM9MDsKKyAgUkVQTEFDRV9XQ1NOUlRPTUJTPTA7CisgIFJFUExBQ0VfV0NXSURUSD0wOworICBSRVBMQUNFX1dDU1dJRFRIPTA7CisKKworCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBtYnN0YXRlX3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG1ic3RhdGVfdC4uLiAiID4mNjsgfQoraWYgJHthY19jdl90eXBlX21ic3RhdGVfdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CisvKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlCisgICA8d2NoYXIuaD4uCisgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUKKyAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CitpbnQKK21haW4gKCkKK3sKK21ic3RhdGVfdCB4OyByZXR1cm4gc2l6ZW9mIHg7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfdHlwZV9tYnN0YXRlX3Q9eWVzCitlbHNlCisgIGFjX2N2X3R5cGVfbWJzdGF0ZV90PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl90eXBlX21ic3RhdGVfdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3R5cGVfbWJzdGF0ZV90IiA+JjY7IH0KKyAgIGlmIHRlc3QgJGFjX2N2X3R5cGVfbWJzdGF0ZV90ID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTUJTVEFURV9UIDEiID4+Y29uZmRlZnMuaAorCisgICBlbHNlCisKKyRhc19lY2hvICIjZGVmaW5lIG1ic3RhdGVfdCBpbnQiID4+Y29uZmRlZnMuaAorCisgICBmaQorCisKKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSB0cmFkaXRpb25hbCBqYXBhbmVzZSBsb2NhbGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgdHJhZGl0aW9uYWwgamFwYW5lc2UgbG9jYWxlLi4uICIgPiY2OyB9CitpZiAke2d0X2N2X2xvY2FsZV9qYSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisjIGluY2x1ZGUgPGxhbmdpbmZvLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KK3N0cnVjdCB0bSB0OworY2hhciBidWZbMTZdOworaW50IG1haW4gKCkKK3sKKyAgY29uc3QgY2hhciAqcDsKKyAgLyogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbG9jYWxlIG5hbWUgaXMgcmVjb2duaXplZCBieSB0aGUgc3lzdGVtLiAgKi8KKyNpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICFkZWZpbmVkIF9fQ1lHV0lOX18KKyAgLyogT24gbmF0aXZlIFdpbmRvd3MsIHNldGxvY2FsZShjYXRlZ29yeSwgIiIpIGxvb2tzIGF0IHRoZSBzeXN0ZW0gc2V0dGluZ3MsCisgICAgIG5vdCBhdCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgQWxzbywgd2hlbiBhbiBlbmNvZGluZyBzdWZmaXggc3VjaAorICAgICBhcyAiLjY1MDAxIiBvciAiLjU0OTM2IiBpcyBzcGVjaWZpZWQsIGl0IHN1Y2NlZWRzIGJ1dCBzZXRzIHRoZSBMQ19DVFlQRQorICAgICBjYXRlZ29yeSBvZiB0aGUgbG9jYWxlIHRvICJDIi4gICovCisgIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgZ2V0ZW52ICgiTENfQUxMIikpID09IE5VTEwKKyAgICAgIHx8IHN0cmNtcCAoc2V0bG9jYWxlIChMQ19DVFlQRSwgTlVMTCksICJDIikgPT0gMCkKKyAgICByZXR1cm4gMTsKKyNlbHNlCisgIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgIiIpID09IE5VTEwpIHJldHVybiAxOworI2VuZGlmCisgIC8qIENoZWNrIHdoZXRoZXIgbmxfbGFuZ2luZm8oQ09ERVNFVCkgaXMgbm9uZW1wdHkgYW5kIG5vdCAiQVNDSUkiIG9yICI2NDYiLgorICAgICBPbiBNYWMgT1MgWCAxMC4zLjUgKERhcndpbiA3LjUpIGluIHRoZSBmcl9GUiBsb2NhbGUsIG5sX2xhbmdpbmZvKENPREVTRVQpCisgICAgIGlzIGVtcHR5LCBhbmQgdGhlIGJlaGF2aW91ciBvZiBUY2wgOC40IGluIHRoaXMgbG9jYWxlIGlzIG5vdCB1c2VmdWwuCisgICAgIE9uIE9wZW5CU0QgNC4wLCB3aGVuIGFuIHVuc3VwcG9ydGVkIGxvY2FsZSBpcyBzcGVjaWZpZWQsIHNldGxvY2FsZSgpCisgICAgIHN1Y2NlZWRzIGJ1dCB0aGVuIG5sX2xhbmdpbmZvKENPREVTRVQpIGlzICI2NDYiLiBJbiB0aGlzIHNpdHVhdGlvbiwKKyAgICAgc29tZSB1bml0IHRlc3RzIGZhaWwuCisgICAgIE9uIE1pckJTRCAxMCwgd2hlbiBhbiB1bnN1cHBvcnRlZCBsb2NhbGUgaXMgc3BlY2lmaWVkLCBzZXRsb2NhbGUoKQorICAgICBzdWNjZWVkcyBidXQgdGhlbiBubF9sYW5naW5mbyhDT0RFU0VUKSBpcyAiVVRGLTgiLiAgKi8KKyNpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKyAgeworICAgIGNvbnN0IGNoYXIgKmNzID0gbmxfbGFuZ2luZm8gKENPREVTRVQpOworICAgIGlmIChjc1swXSA9PSAnXDAnIHx8IHN0cmNtcCAoY3MsICJBU0NJSSIpID09IDAgfHwgc3RyY21wIChjcywgIjY0NiIpID09IDAKKyAgICAgICAgfHwgc3RyY21wIChjcywgIlVURi04IikgPT0gMCkKKyAgICAgIHJldHVybiAxOworICB9CisjZW5kaWYKKyNpZmRlZiBfX0NZR1dJTl9fCisgIC8qIE9uIEN5Z3dpbiwgYXZvaWQgbG9jYWxlIG5hbWVzIHdpdGhvdXQgZW5jb2Rpbmcgc3VmZml4LCBiZWNhdXNlIHRoZQorICAgICBsb2NhbGVfY2hhcnNldCgpIGZ1bmN0aW9uIHJlbGllcyBvbiB0aGUgZW5jb2Rpbmcgc3VmZml4LiAgTm90ZSB0aGF0CisgICAgIExDX0FMTCBpcyBzZXQgb24gdGhlIGNvbW1hbmQgbGluZS4gICovCisgIGlmIChzdHJjaHIgKGdldGVudiAoIkxDX0FMTCIpLCAnLicpID09IE5VTEwpIHJldHVybiAxOworI2VuZGlmCisgIC8qIENoZWNrIHdoZXRoZXIgTUJfQ1VSX01BWCBpcyA+IDEuICBUaGlzIGV4Y2x1ZGVzIHRoZSBkeXNmdW5jdGlvbmFsIGxvY2FsZXMKKyAgICAgb24gQ3lnd2luIDEuNS54LiAgKi8KKyAgaWYgKE1CX0NVUl9NQVggPT0gMSkKKyAgICByZXR1cm4gMTsKKyAgLyogQ2hlY2sgd2hldGhlciBpbiBhIG1vbnRoIG5hbWUsIG5vIGJ5dGUgaW4gdGhlIHJhbmdlIDB4ODAuLjB4OUYgb2NjdXJzLgorICAgICBUaGlzIGV4Y2x1ZGVzIHRoZSBVVEYtOCBlbmNvZGluZyAoZXhjZXB0IG9uIE1pckJTRCkuICAqLworICB0LnRtX3llYXIgPSAxOTc1IC0gMTkwMDsgdC50bV9tb24gPSAyIC0gMTsgdC50bV9tZGF5ID0gNDsKKyAgaWYgKHN0cmZ0aW1lIChidWYsIHNpemVvZiAoYnVmKSwgIiVCIiwgJnQpIDwgMikgcmV0dXJuIDE7CisgIGZvciAocCA9IGJ1ZjsgKnAgIT0gJ1wwJzsgcCsrKQorICAgIGlmICgodW5zaWduZWQgY2hhcikgKnAgPj0gMHg4MCAmJiAodW5zaWduZWQgY2hhcikgKnAgPCAweGEwKQorICAgICAgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorCitfQUNFT0YKKyAgICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgIyBIYW5kbGUgbmF0aXZlIFdpbmRvd3Mgc3BlY2lhbGx5LCBiZWNhdXNlIHRoZXJlIHNldGxvY2FsZSgpIGludGVycHJldHMKKyAgICAgICAgIyAiYXIiIGFzICJBcmFiaWMiIG9yICJBcmFiaWNfU2F1ZGkgQXJhYmlhLjEyNTYiLAorICAgICAgICAjICJmciIgb3IgImZyYSIgYXMgIkZyZW5jaCIgb3IgIkZyZW5jaF9GcmFuY2UuMTI1MiIsCisgICAgICAgICMgImdlIighKSBvciAiZGV1IighKSBhcyAiR2VybWFuIiBvciAiR2VybWFuX0dlcm1hbnkuMTI1MiIsCisgICAgICAgICMgImphIiBhcyAiSmFwYW5lc2UiIG9yICJKYXBhbmVzZV9KYXBhbi45MzIiLAorICAgICAgICAjIGFuZCBzaW1pbGFyLgorICAgICAgICBtaW5ndyopCisgICAgICAgICAgIyBOb3RlIHRoYXQgb24gbmF0aXZlIFdpbmRvd3MsIHRoZSBKYXBhbmVzZSBsb2NhbGUgaXMKKyAgICAgICAgICAjIEphcGFuZXNlX0phcGFuLjkzMiwgYW5kIENQOTMyIGlzIHZlcnkgZGlmZmVyZW50IGZyb20gRVVDLUpQLCBzbyB3ZQorICAgICAgICAgICMgY2Fubm90IHVzZSBpdCBoZXJlLgorICAgICAgICAgIGd0X2N2X2xvY2FsZV9qYT1ub25lCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAjIFNldHRpbmcgTENfQUxMIGlzIG5vdCBlbm91Z2guIE5lZWQgdG8gc2V0IExDX1RJTUUgdG8gZW1wdHksIGJlY2F1c2UKKyAgICAgICAgICAjIG90aGVyd2lzZSBvbiBNYWMgT1MgWCAxMC4zLjUgdGhlIExDX1RJTUU9QyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlCisgICAgICAgICAgIyBjb25maWd1cmUgc2NyaXB0IHdvdWxkIG92ZXJyaWRlIHRoZSBMQ19BTEwgc2V0dGluZy4gTGlrZXdpc2UgZm9yCisgICAgICAgICAgIyBMQ19DVFlQRSwgd2hpY2ggaXMgYWxzbyBzZXQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY29uZmlndXJlIHNjcmlwdC4KKyAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBBSVggbG9jYWxlIG5hbWUuCisgICAgICAgICAgaWYgKExDX0FMTD1qYV9KUCBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9qYT1qYV9KUAorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICMgVGVzdCBmb3IgdGhlIGxvY2FsZSBuYW1lIHdpdGggZXhwbGljaXQgZW5jb2Rpbmcgc3VmZml4LgorICAgICAgICAgICAgaWYgKExDX0FMTD1qYV9KUC5FVUMtSlAgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9qYT1qYV9KUC5FVUMtSlAKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIyBUZXN0IGZvciB0aGUgSFAtVVgsIE9TRi8xLCBOZXRCU0QgbG9jYWxlIG5hbWUuCisgICAgICAgICAgICAgIGlmIChMQ19BTEw9amFfSlAuZXVjSlAgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2phPWphX0pQLmV1Y0pQCisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBJUklYLCBGcmVlQlNEIGxvY2FsZSBuYW1lLgorICAgICAgICAgICAgICAgIGlmIChMQ19BTEw9amFfSlAuRVVDIExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2phPWphX0pQLkVVQworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICMgVGVzdCBmb3IgdGhlIFNvbGFyaXMgNyBsb2NhbGUgbmFtZS4KKyAgICAgICAgICAgICAgICAgIGlmIChMQ19BTEw9amEgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9qYT1qYQorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAjIFNwZWNpYWwgdGVzdCBmb3IgTmV0QlNEIDEuNi4KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAvdXNyL3NoYXJlL2xvY2FsZS9qYV9KUC5ldWNKUC9MQ19DVFlQRTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9qYT1qYV9KUC5ldWNKUAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgIyBOb25lIGZvdW5kLgorICAgICAgICAgICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9qYT1ub25lCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIHJtIC1mciBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3ZfbG9jYWxlX2phIiA+JjUKKyRhc19lY2hvICIkZ3RfY3ZfbG9jYWxlX2phIiA+JjY7IH0KKyAgTE9DQUxFX0pBPSRndF9jdl9sb2NhbGVfamEKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgdHJhbnNpdGlvbmFsIGNoaW5lc2UgbG9jYWxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIHRyYW5zaXRpb25hbCBjaGluZXNlIGxvY2FsZS4uLiAiID4mNjsgfQoraWYgJHtndF9jdl9sb2NhbGVfemhfQ04rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmIEhBVkVfTEFOR0lORk9fQ09ERVNFVAorIyBpbmNsdWRlIDxsYW5naW5mby5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CitzdHJ1Y3QgdG0gdDsKK2NoYXIgYnVmWzE2XTsKK2ludCBtYWluICgpCit7CisgIGNvbnN0IGNoYXIgKnA7CisgIC8qIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGxvY2FsZSBuYW1lIGlzIHJlY29nbml6ZWQgYnkgdGhlIHN5c3RlbS4gICovCisjaWYgKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhZGVmaW5lZCBfX0NZR1dJTl9fCisgIC8qIE9uIG5hdGl2ZSBXaW5kb3dzLCBzZXRsb2NhbGUoY2F0ZWdvcnksICIiKSBsb29rcyBhdCB0aGUgc3lzdGVtIHNldHRpbmdzLAorICAgICBub3QgYXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIEFsc28sIHdoZW4gYW4gZW5jb2Rpbmcgc3VmZml4IHN1Y2gKKyAgICAgYXMgIi42NTAwMSIgb3IgIi41NDkzNiIgaXMgc3BlY2lmaWVkLCBpdCBzdWNjZWVkcyBidXQgc2V0cyB0aGUgTENfQ1RZUEUKKyAgICAgY2F0ZWdvcnkgb2YgdGhlIGxvY2FsZSB0byAiQyIuICAqLworICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsIGdldGVudiAoIkxDX0FMTCIpKSA9PSBOVUxMCisgICAgICB8fCBzdHJjbXAgKHNldGxvY2FsZSAoTENfQ1RZUEUsIE5VTEwpLCAiQyIpID09IDApCisgICAgcmV0dXJuIDE7CisjZWxzZQorICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICIiKSA9PSBOVUxMKSByZXR1cm4gMTsKKyNlbmRpZgorICAvKiBDaGVjayB3aGV0aGVyIG5sX2xhbmdpbmZvKENPREVTRVQpIGlzIG5vbmVtcHR5IGFuZCBub3QgIkFTQ0lJIiBvciAiNjQ2Ii4KKyAgICAgT24gTWFjIE9TIFggMTAuMy41IChEYXJ3aW4gNy41KSBpbiB0aGUgZnJfRlIgbG9jYWxlLCBubF9sYW5naW5mbyhDT0RFU0VUKQorICAgICBpcyBlbXB0eSwgYW5kIHRoZSBiZWhhdmlvdXIgb2YgVGNsIDguNCBpbiB0aGlzIGxvY2FsZSBpcyBub3QgdXNlZnVsLgorICAgICBPbiBPcGVuQlNEIDQuMCwgd2hlbiBhbiB1bnN1cHBvcnRlZCBsb2NhbGUgaXMgc3BlY2lmaWVkLCBzZXRsb2NhbGUoKQorICAgICBzdWNjZWVkcyBidXQgdGhlbiBubF9sYW5naW5mbyhDT0RFU0VUKSBpcyAiNjQ2Ii4gSW4gdGhpcyBzaXR1YXRpb24sCisgICAgIHNvbWUgdW5pdCB0ZXN0cyBmYWlsLgorICAgICBPbiBNaXJCU0QgMTAsIHdoZW4gYW4gdW5zdXBwb3J0ZWQgbG9jYWxlIGlzIHNwZWNpZmllZCwgc2V0bG9jYWxlKCkKKyAgICAgc3VjY2VlZHMgYnV0IHRoZW4gbmxfbGFuZ2luZm8oQ09ERVNFVCkgaXMgIlVURi04Ii4gICovCisjaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisgIHsKKyAgICBjb25zdCBjaGFyICpjcyA9IG5sX2xhbmdpbmZvIChDT0RFU0VUKTsKKyAgICBpZiAoY3NbMF0gPT0gJ1wwJyB8fCBzdHJjbXAgKGNzLCAiQVNDSUkiKSA9PSAwIHx8IHN0cmNtcCAoY3MsICI2NDYiKSA9PSAwCisgICAgICAgIHx8IHN0cmNtcCAoY3MsICJVVEYtOCIpID09IDApCisgICAgICByZXR1cm4gMTsKKyAgfQorI2VuZGlmCisjaWZkZWYgX19DWUdXSU5fXworICAvKiBPbiBDeWd3aW4sIGF2b2lkIGxvY2FsZSBuYW1lcyB3aXRob3V0IGVuY29kaW5nIHN1ZmZpeCwgYmVjYXVzZSB0aGUKKyAgICAgbG9jYWxlX2NoYXJzZXQoKSBmdW5jdGlvbiByZWxpZXMgb24gdGhlIGVuY29kaW5nIHN1ZmZpeC4gIE5vdGUgdGhhdAorICAgICBMQ19BTEwgaXMgc2V0IG9uIHRoZSBjb21tYW5kIGxpbmUuICAqLworICBpZiAoc3RyY2hyIChnZXRlbnYgKCJMQ19BTEwiKSwgJy4nKSA9PSBOVUxMKSByZXR1cm4gMTsKKyNlbmRpZgorICAvKiBDaGVjayB3aGV0aGVyIGluIGEgbW9udGggbmFtZSwgbm8gYnl0ZSBpbiB0aGUgcmFuZ2UgMHg4MC4uMHg5RiBvY2N1cnMuCisgICAgIFRoaXMgZXhjbHVkZXMgdGhlIFVURi04IGVuY29kaW5nIChleGNlcHQgb24gTWlyQlNEKS4gICovCisgIHQudG1feWVhciA9IDE5NzUgLSAxOTAwOyB0LnRtX21vbiA9IDIgLSAxOyB0LnRtX21kYXkgPSA0OworICBpZiAoc3RyZnRpbWUgKGJ1Ziwgc2l6ZW9mIChidWYpLCAiJUIiLCAmdCkgPCAyKSByZXR1cm4gMTsKKyAgZm9yIChwID0gYnVmOyAqcCAhPSAnXDAnOyBwKyspCisgICAgaWYgKCh1bnNpZ25lZCBjaGFyKSAqcCA+PSAweDgwICYmICh1bnNpZ25lZCBjaGFyKSAqcCA8IDB4YTApCisgICAgICByZXR1cm4gMTsKKyAgLyogQ2hlY2sgd2hldGhlciBhIHR5cGljYWwgR0IxODAzMCBtdWx0aWJ5dGUgc2VxdWVuY2UgaXMgcmVjb2duaXplZCBhcyBhCisgICAgIHNpbmdsZSB3aWRlIGNoYXJhY3Rlci4gIFRoaXMgZXhjbHVkZXMgdGhlIEdCMjMxMiBhbmQgR0JLIGVuY29kaW5ncy4gICovCisgIGlmIChtYmxlbiAoIlwyMDNcMDYyXDMzMlwwNjYiLCA1KSAhPSA0KQorICAgIHJldHVybiAxOworICByZXR1cm4gMDsKK30KKworX0FDRU9GCisgICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICMgSGFuZGxlIG5hdGl2ZSBXaW5kb3dzIHNwZWNpYWxseSwgYmVjYXVzZSB0aGVyZSBzZXRsb2NhbGUoKSBpbnRlcnByZXRzCisgICAgICAgICMgImFyIiBhcyAiQXJhYmljIiBvciAiQXJhYmljX1NhdWRpIEFyYWJpYS4xMjU2IiwKKyAgICAgICAgIyAiZnIiIG9yICJmcmEiIGFzICJGcmVuY2giIG9yICJGcmVuY2hfRnJhbmNlLjEyNTIiLAorICAgICAgICAjICJnZSIoISkgb3IgImRldSIoISkgYXMgIkdlcm1hbiIgb3IgIkdlcm1hbl9HZXJtYW55LjEyNTIiLAorICAgICAgICAjICJqYSIgYXMgIkphcGFuZXNlIiBvciAiSmFwYW5lc2VfSmFwYW4uOTMyIiwKKyAgICAgICAgIyBhbmQgc2ltaWxhci4KKyAgICAgICAgbWluZ3cqKQorICAgICAgICAgICMgVGVzdCBmb3IgdGhlIGh5cG90aGV0aWNhbCBuYXRpdmUgV2luZG93cyBsb2NhbGUgbmFtZS4KKyAgICAgICAgICBpZiAoTENfQUxMPUNoaW5lc2VfQ2hpbmEuNTQ5MzYgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICBndF9jdl9sb2NhbGVfemhfQ049Q2hpbmVzZV9DaGluYS41NDkzNgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICMgTm9uZSBmb3VuZC4KKyAgICAgICAgICAgIGd0X2N2X2xvY2FsZV96aF9DTj1ub25lCisgICAgICAgICAgZmkKKyAgICAgICAgICA7OworICAgICAgICBzb2xhcmlzMi44KQorICAgICAgICAgICMgT24gU29sYXJpcyA4LCB0aGUgbG9jYWxlcyB6aF9DTi5HQjE4MDMwLCB6aF9DTi5HQkssIHpoLkdCSyBhcmUKKyAgICAgICAgICAjIGJyb2tlbi4gT25lIHdpdG5lc3MgaXMgdGhlIHRlc3QgY2FzZSBpbiBnbF9NQlJUT1dDX1NBTklUWUNIRUNLLgorICAgICAgICAgICMgQW5vdGhlciB3aXRuZXNzIGlzIHRoYXQgIkxDX0FMTD16aF9DTi5HQjE4MDMwIGJhc2ggLWMgdHJ1ZSIgZHVtcHMgY29yZS4KKyAgICAgICAgICBndF9jdl9sb2NhbGVfemhfQ049bm9uZQorICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgIyBTZXR0aW5nIExDX0FMTCBpcyBub3QgZW5vdWdoLiBOZWVkIHRvIHNldCBMQ19USU1FIHRvIGVtcHR5LCBiZWNhdXNlCisgICAgICAgICAgIyBvdGhlcndpc2Ugb24gTWFjIE9TIFggMTAuMy41IHRoZSBMQ19USU1FPUMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZQorICAgICAgICAgICMgY29uZmlndXJlIHNjcmlwdCB3b3VsZCBvdmVycmlkZSB0aGUgTENfQUxMIHNldHRpbmcuIExpa2V3aXNlIGZvcgorICAgICAgICAgICMgTENfQ1RZUEUsIHdoaWNoIGlzIGFsc28gc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisgICAgICAgICAgIyBUZXN0IGZvciB0aGUgbG9jYWxlIG5hbWUgd2l0aG91dCBlbmNvZGluZyBzdWZmaXguCisgICAgICAgICAgaWYgKExDX0FMTD16aF9DTiBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgIGd0X2N2X2xvY2FsZV96aF9DTj16aF9DTgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICMgVGVzdCBmb3IgdGhlIGxvY2FsZSBuYW1lIHdpdGggZXhwbGljaXQgZW5jb2Rpbmcgc3VmZml4LgorICAgICAgICAgICAgaWYgKExDX0FMTD16aF9DTi5HQjE4MDMwIExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgICBndF9jdl9sb2NhbGVfemhfQ049emhfQ04uR0IxODAzMAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAjIE5vbmUgZm91bmQuCisgICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV96aF9DTj1ub25lCisgICAgICAgICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBlbHNlCisgICAgICAjIElmIHRoZXJlIHdhcyBhIGxpbmsgZXJyb3IsIGR1ZSB0byBtYmxlbigpLCB0aGUgc3lzdGVtIGlzIHNvIG9sZCB0aGF0CisgICAgICAjIGl0IGNlcnRhaW5seSBkb2Vzbid0IGhhdmUgYSBjaGluZXNlIGxvY2FsZS4KKyAgICAgIGd0X2N2X2xvY2FsZV96aF9DTj1ub25lCisgICAgZmkKKyAgICBybSAtZnIgY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGd0X2N2X2xvY2FsZV96aF9DTiIgPiY1CiskYXNfZWNobyAiJGd0X2N2X2xvY2FsZV96aF9DTiIgPiY2OyB9CisgIExPQ0FMRV9aSF9DTj0kZ3RfY3ZfbG9jYWxlX3poX0NOCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBmcmVuY2ggVW5pY29kZSBsb2NhbGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgZnJlbmNoIFVuaWNvZGUgbG9jYWxlLi4uICIgPiY2OyB9CitpZiAke2d0X2N2X2xvY2FsZV9mcl91dGY4Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPGxvY2FsZS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKyMgaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorc3RydWN0IHRtIHQ7CitjaGFyIGJ1ZlsxNl07CitpbnQgbWFpbiAoKSB7CisgIC8qIE9uIEJlT1MgYW5kIEhhaWt1LCBsb2NhbGVzIGFyZSBub3QgaW1wbGVtZW50ZWQgaW4gbGliYy4gIFJhdGhlciwgbGliaW50bAorICAgICBpbWl0YXRlcyBsb2NhbGUgZGVwZW5kZW50IGJlaGF2aW91ciBieSBsb29raW5nIGF0IHRoZSBlbnZpcm9ubWVudAorICAgICB2YXJpYWJsZXMsIGFuZCBhbGwgbG9jYWxlcyB1c2UgdGhlIFVURi04IGVuY29kaW5nLiAgKi8KKyNpZiAhKGRlZmluZWQgX19CRU9TX18gfHwgZGVmaW5lZCBfX0hBSUtVX18pCisgIC8qIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGxvY2FsZSBuYW1lIGlzIHJlY29nbml6ZWQgYnkgdGhlIHN5c3RlbS4gICovCisjIGlmIChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgIWRlZmluZWQgX19DWUdXSU5fXworICAvKiBPbiBuYXRpdmUgV2luZG93cywgc2V0bG9jYWxlKGNhdGVnb3J5LCAiIikgbG9va3MgYXQgdGhlIHN5c3RlbSBzZXR0aW5ncywKKyAgICAgbm90IGF0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBBbHNvLCB3aGVuIGFuIGVuY29kaW5nIHN1ZmZpeCBzdWNoCisgICAgIGFzICIuNjUwMDEiIG9yICIuNTQ5MzYiIGlzIHNwZWNpZmllZCwgaXQgc3VjY2VlZHMgYnV0IHNldHMgdGhlIExDX0NUWVBFCisgICAgIGNhdGVnb3J5IG9mIHRoZSBsb2NhbGUgdG8gIkMiLiAgKi8KKyAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCBnZXRlbnYgKCJMQ19BTEwiKSkgPT0gTlVMTAorICAgICAgfHwgc3RyY21wIChzZXRsb2NhbGUgKExDX0NUWVBFLCBOVUxMKSwgIkMiKSA9PSAwKQorICAgIHJldHVybiAxOworIyBlbHNlCisgIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgIiIpID09IE5VTEwpIHJldHVybiAxOworIyBlbmRpZgorICAvKiBDaGVjayB3aGV0aGVyIG5sX2xhbmdpbmZvKENPREVTRVQpIGlzIG5vbmVtcHR5IGFuZCBub3QgIkFTQ0lJIiBvciAiNjQ2Ii4KKyAgICAgT24gTWFjIE9TIFggMTAuMy41IChEYXJ3aW4gNy41KSBpbiB0aGUgZnJfRlIgbG9jYWxlLCBubF9sYW5naW5mbyhDT0RFU0VUKQorICAgICBpcyBlbXB0eSwgYW5kIHRoZSBiZWhhdmlvdXIgb2YgVGNsIDguNCBpbiB0aGlzIGxvY2FsZSBpcyBub3QgdXNlZnVsLgorICAgICBPbiBPcGVuQlNEIDQuMCwgd2hlbiBhbiB1bnN1cHBvcnRlZCBsb2NhbGUgaXMgc3BlY2lmaWVkLCBzZXRsb2NhbGUoKQorICAgICBzdWNjZWVkcyBidXQgdGhlbiBubF9sYW5naW5mbyhDT0RFU0VUKSBpcyAiNjQ2Ii4gSW4gdGhpcyBzaXR1YXRpb24sCisgICAgIHNvbWUgdW5pdCB0ZXN0cyBmYWlsLiAgKi8KKyMgaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisgIHsKKyAgICBjb25zdCBjaGFyICpjcyA9IG5sX2xhbmdpbmZvIChDT0RFU0VUKTsKKyAgICBpZiAoY3NbMF0gPT0gJ1wwJyB8fCBzdHJjbXAgKGNzLCAiQVNDSUkiKSA9PSAwIHx8IHN0cmNtcCAoY3MsICI2NDYiKSA9PSAwKQorICAgICAgcmV0dXJuIDE7CisgIH0KKyMgZW5kaWYKKyMgaWZkZWYgX19DWUdXSU5fXworICAvKiBPbiBDeWd3aW4sIGF2b2lkIGxvY2FsZSBuYW1lcyB3aXRob3V0IGVuY29kaW5nIHN1ZmZpeCwgYmVjYXVzZSB0aGUKKyAgICAgbG9jYWxlX2NoYXJzZXQoKSBmdW5jdGlvbiByZWxpZXMgb24gdGhlIGVuY29kaW5nIHN1ZmZpeC4gIE5vdGUgdGhhdAorICAgICBMQ19BTEwgaXMgc2V0IG9uIHRoZSBjb21tYW5kIGxpbmUuICAqLworICBpZiAoc3RyY2hyIChnZXRlbnYgKCJMQ19BTEwiKSwgJy4nKSA9PSBOVUxMKSByZXR1cm4gMTsKKyMgZW5kaWYKKyAgLyogQ2hlY2sgd2hldGhlciBpbiB0aGUgYWJicmV2aWF0aW9uIG9mIHRoZSBzZWNvbmQgbW9udGgsIHRoZSBzZWNvbmQKKyAgICAgY2hhcmFjdGVyIChzaG91bGQgYmUgVSswMEU5OiBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFKSBpcworICAgICB0d28gYnl0ZXMgbG9uZywgd2l0aCBVVEYtOCBlbmNvZGluZy4gICovCisgIHQudG1feWVhciA9IDE5NzUgLSAxOTAwOyB0LnRtX21vbiA9IDIgLSAxOyB0LnRtX21kYXkgPSA0OworICBpZiAoc3RyZnRpbWUgKGJ1Ziwgc2l6ZW9mIChidWYpLCAiJWIiLCAmdCkgPCA0CisgICAgICB8fCBidWZbMV0gIT0gKGNoYXIpIDB4YzMgfHwgYnVmWzJdICE9IChjaGFyKSAweGE5IHx8IGJ1ZlszXSAhPSAndicpCisgICAgcmV0dXJuIDE7CisjZW5kaWYKKyNpZiAhZGVmaW5lZCBfX0JJT05JQ19fIC8qIEJpb25pYyBsaWJjJ3MgJ3N0cnVjdCBsY29udicgaXMganVzdCBhIGR1bW15LiAgKi8KKyAgLyogQ2hlY2sgd2hldGhlciB0aGUgZGVjaW1hbCBzZXBhcmF0b3IgaXMgYSBjb21tYS4KKyAgICAgT24gTmV0QlNEIDMuMCBpbiB0aGUgZnJfRlIuSVNPODg1OS0xIGxvY2FsZSwgbG9jYWxlY29udigpLT5kZWNpbWFsX3BvaW50CisgICAgIGFyZSBubF9sYW5naW5mbyhSQURJWENIQVIpIGFyZSBib3RoICIuIi4gICovCisgIGlmIChsb2NhbGVjb252ICgpIC0+ZGVjaW1hbF9wb2ludFswXSAhPSAnLCcpIHJldHVybiAxOworI2VuZGlmCisgIHJldHVybiAwOworfQorCitfQUNFT0YKKyAgICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgIyBIYW5kbGUgbmF0aXZlIFdpbmRvd3Mgc3BlY2lhbGx5LCBiZWNhdXNlIHRoZXJlIHNldGxvY2FsZSgpIGludGVycHJldHMKKyAgICAgICAgIyAiYXIiIGFzICJBcmFiaWMiIG9yICJBcmFiaWNfU2F1ZGkgQXJhYmlhLjEyNTYiLAorICAgICAgICAjICJmciIgb3IgImZyYSIgYXMgIkZyZW5jaCIgb3IgIkZyZW5jaF9GcmFuY2UuMTI1MiIsCisgICAgICAgICMgImdlIighKSBvciAiZGV1IighKSBhcyAiR2VybWFuIiBvciAiR2VybWFuX0dlcm1hbnkuMTI1MiIsCisgICAgICAgICMgImphIiBhcyAiSmFwYW5lc2UiIG9yICJKYXBhbmVzZV9KYXBhbi45MzIiLAorICAgICAgICAjIGFuZCBzaW1pbGFyLgorICAgICAgICBtaW5ndyopCisgICAgICAgICAgIyBUZXN0IGZvciB0aGUgaHlwb3RoZXRpY2FsIG5hdGl2ZSBXaW5kb3dzIGxvY2FsZSBuYW1lLgorICAgICAgICAgIGlmIChMQ19BTEw9RnJlbmNoX0ZyYW5jZS42NTAwMSBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcl91dGY4PUZyZW5jaF9GcmFuY2UuNjUwMDEKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAjIE5vbmUgZm91bmQuCisgICAgICAgICAgICBndF9jdl9sb2NhbGVfZnJfdXRmOD1ub25lCisgICAgICAgICAgZmkKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICMgU2V0dGluZyBMQ19BTEwgaXMgbm90IGVub3VnaC4gTmVlZCB0byBzZXQgTENfVElNRSB0byBlbXB0eSwgYmVjYXVzZQorICAgICAgICAgICMgb3RoZXJ3aXNlIG9uIE1hYyBPUyBYIDEwLjMuNSB0aGUgTENfVElNRT1DIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUKKyAgICAgICAgICAjIGNvbmZpZ3VyZSBzY3JpcHQgd291bGQgb3ZlcnJpZGUgdGhlIExDX0FMTCBzZXR0aW5nLiBMaWtld2lzZSBmb3IKKyAgICAgICAgICAjIExDX0NUWVBFLCB3aGljaCBpcyBhbHNvIHNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb25maWd1cmUgc2NyaXB0LgorICAgICAgICAgICMgVGVzdCBmb3IgdGhlIHVzdWFsIGxvY2FsZSBuYW1lLgorICAgICAgICAgIGlmIChMQ19BTEw9ZnJfRlIgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICBndF9jdl9sb2NhbGVfZnJfdXRmOD1mcl9GUgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICMgVGVzdCBmb3IgdGhlIGxvY2FsZSBuYW1lIHdpdGggZXhwbGljaXQgZW5jb2Rpbmcgc3VmZml4LgorICAgICAgICAgICAgaWYgKExDX0FMTD1mcl9GUi5VVEYtOCBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyX3V0Zjg9ZnJfRlIuVVRGLTgKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIyBUZXN0IGZvciB0aGUgU29sYXJpcyA3IGxvY2FsZSBuYW1lLgorICAgICAgICAgICAgICBpZiAoTENfQUxMPWZyLlVURi04IExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcl91dGY4PWZyLlVURi04CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAjIE5vbmUgZm91bmQuCisgICAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyX3V0Zjg9bm9uZQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICBmaQorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICBybSAtZnIgY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGd0X2N2X2xvY2FsZV9mcl91dGY4IiA+JjUKKyRhc19lY2hvICIkZ3RfY3ZfbG9jYWxlX2ZyX3V0ZjgiID4mNjsgfQorICBMT0NBTEVfRlJfVVRGOD0kZ3RfY3ZfbG9jYWxlX2ZyX3V0ZjgKKworCisKKyAgR05VTElCX0ZGU0w9MDsKKyAgR05VTElCX0ZGU0xMPTA7CisgIEdOVUxJQl9NRU1DSFI9MDsKKyAgR05VTElCX01FTU1FTT0wOworICBHTlVMSUJfTUVNUENQWT0wOworICBHTlVMSUJfTUVNUkNIUj0wOworICBHTlVMSUJfUkFXTUVNQ0hSPTA7CisgIEdOVUxJQl9TVFBDUFk9MDsKKyAgR05VTElCX1NUUE5DUFk9MDsKKyAgR05VTElCX1NUUkNIUk5VTD0wOworICBHTlVMSUJfU1RSRFVQPTA7CisgIEdOVUxJQl9TVFJOQ0FUPTA7CisgIEdOVUxJQl9TVFJORFVQPTA7CisgIEdOVUxJQl9TVFJOTEVOPTA7CisgIEdOVUxJQl9TVFJQQlJLPTA7CisgIEdOVUxJQl9TVFJTRVA9MDsKKyAgR05VTElCX1NUUlNUUj0wOworICBHTlVMSUJfU1RSQ0FTRVNUUj0wOworICBHTlVMSUJfU1RSVE9LX1I9MDsKKyAgR05VTElCX01CU0xFTj0wOworICBHTlVMSUJfTUJTTkxFTj0wOworICBHTlVMSUJfTUJTQ0hSPTA7CisgIEdOVUxJQl9NQlNSQ0hSPTA7CisgIEdOVUxJQl9NQlNTVFI9MDsKKyAgR05VTElCX01CU0NBU0VDTVA9MDsKKyAgR05VTElCX01CU05DQVNFQ01QPTA7CisgIEdOVUxJQl9NQlNQQ0FTRUNNUD0wOworICBHTlVMSUJfTUJTQ0FTRVNUUj0wOworICBHTlVMSUJfTUJTQ1NQTj0wOworICBHTlVMSUJfTUJTUEJSSz0wOworICBHTlVMSUJfTUJTU1BOPTA7CisgIEdOVUxJQl9NQlNTRVA9MDsKKyAgR05VTElCX01CU1RPS19SPTA7CisgIEdOVUxJQl9TVFJFUlJPUj0wOworICBHTlVMSUJfU1RSRVJST1JfUj0wOworICBHTlVMSUJfU1RSU0lHTkFMPTA7CisgIEdOVUxJQl9TVFJWRVJTQ01QPTA7CisgIEhBVkVfTUJTTEVOPTA7CisgICAgSEFWRV9GRlNMPTE7CisgIEhBVkVfRkZTTEw9MTsKKyAgSEFWRV9NRU1DSFI9MTsKKyAgSEFWRV9ERUNMX01FTU1FTT0xOworICBIQVZFX01FTVBDUFk9MTsKKyAgSEFWRV9ERUNMX01FTVJDSFI9MTsKKyAgSEFWRV9SQVdNRU1DSFI9MTsKKyAgSEFWRV9TVFBDUFk9MTsKKyAgSEFWRV9TVFBOQ1BZPTE7CisgIEhBVkVfU1RSQ0hSTlVMPTE7CisgIEhBVkVfREVDTF9TVFJEVVA9MTsKKyAgSEFWRV9ERUNMX1NUUk5EVVA9MTsKKyAgSEFWRV9ERUNMX1NUUk5MRU49MTsKKyAgSEFWRV9TVFJQQlJLPTE7CisgIEhBVkVfU1RSU0VQPTE7CisgIEhBVkVfU1RSQ0FTRVNUUj0xOworICBIQVZFX0RFQ0xfU1RSVE9LX1I9MTsKKyAgSEFWRV9ERUNMX1NUUkVSUk9SX1I9MTsKKyAgSEFWRV9ERUNMX1NUUlNJR05BTD0xOworICBIQVZFX1NUUlZFUlNDTVA9MTsKKyAgUkVQTEFDRV9NRU1DSFI9MDsKKyAgUkVQTEFDRV9NRU1NRU09MDsKKyAgUkVQTEFDRV9TVFBOQ1BZPTA7CisgIFJFUExBQ0VfU1RSRFVQPTA7CisgIFJFUExBQ0VfU1RSU1RSPTA7CisgIFJFUExBQ0VfU1RSQ0FTRVNUUj0wOworICBSRVBMQUNFX1NUUkNIUk5VTD0wOworICBSRVBMQUNFX1NUUkVSUk9SPTA7CisgIFJFUExBQ0VfU1RSRVJST1JfUj0wOworICBSRVBMQUNFX1NUUk5DQVQ9MDsKKyAgUkVQTEFDRV9TVFJORFVQPTA7CisgIFJFUExBQ0VfU1RSTkxFTj0wOworICBSRVBMQUNFX1NUUlNJR05BTD0wOworICBSRVBMQUNFX1NUUlRPS19SPTA7CisgIFVOREVGSU5FX1NUUlRPS19SPTA7CisKKworCisKKworCisKKworCisKKworICAjIENoZWNrIGZvciBtbWFwKCkuIERvbid0IHVzZSBBQ19GVU5DX01NQVAsIGJlY2F1c2UgaXQgY2hlY2tzIHRvbyBtdWNoOiBpdAorICAjIGZhaWxzIG9uIEhQLVVYIDExLCBiZWNhdXNlIE1BUF9GSVhFRCBtYXBwaW5ncyBkbyBub3Qgd29yay4gQnV0IHRoaXMgaXMKKyAgIyBpcnJlbGV2YW50IGZvciBhbm9ueW1vdXMgbWFwcGluZ3MuCisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIm1tYXAiICJhY19jdl9mdW5jX21tYXAiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfbW1hcCIgPSB4eWVzOyB0aGVuIDoKKyAgZ2xfaGF2ZV9tbWFwPXllcworZWxzZQorICBnbF9oYXZlX21tYXA9bm8KK2ZpCisKKworICAjIFRyeSB0byBhbGxvdyBNQVBfQU5PTllNT1VTLgorICBnbF9oYXZlX21tYXBfYW5vbnltb3VzPW5vCisgIGlmIHRlc3QgJGdsX2hhdmVfbW1hcCA9IHllczsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIE1BUF9BTk9OWU1PVVMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIE1BUF9BTk9OWU1PVVMuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2lmZGVmIE1BUF9BTk9OWU1PVVMKKyAgICBJIGNhbm5vdCBpZGVudGlmeSB0aGlzIG1hcAorI2VuZGlmCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIkkgY2Fubm90IGlkZW50aWZ5IHRoaXMgbWFwIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBnbF9oYXZlX21tYXBfYW5vbnltb3VzPXllcworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgICAgaWYgdGVzdCAkZ2xfaGF2ZV9tbWFwX2Fub255bW91cyAhPSB5ZXM7IHRoZW4KKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaWZkZWYgTUFQX0FOT04KKyAgICBJIGNhbm5vdCBpZGVudGlmeSB0aGlzIG1hcAorI2VuZGlmCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIkkgY2Fubm90IGlkZW50aWZ5IHRoaXMgbWFwIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBNQVBfQU5PTllNT1VTIE1BUF9BTk9OIiA+PmNvbmZkZWZzLmgKKworICAgICAgICAgZ2xfaGF2ZV9tbWFwX2Fub255bW91cz15ZXMKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICAgIGZpCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9oYXZlX21tYXBfYW5vbnltb3VzIiA+JjUKKyRhc19lY2hvICIkZ2xfaGF2ZV9tbWFwX2Fub255bW91cyIgPiY2OyB9CisgICAgaWYgdGVzdCAkZ2xfaGF2ZV9tbWFwX2Fub255bW91cyA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX01BUF9BTk9OWU1PVVMgMSIgPj5jb25mZGVmcy5oCisKKyAgICBmaQorICBmaQorCisKKworCisKKworICBpZiB0ZXN0ICRIQVZFX01FTUNIUiA9IDE7IHRoZW4KKyAgICAjIERldGVjdCBwbGF0Zm9ybS1zcGVjaWZpYyBidWdzIGluIHNvbWUgdmVyc2lvbnMgb2YgZ2xpYmM6CisgICAgIyBtZW1jaHIgc2hvdWxkIG5vdCBkZXJlZmVyZW5jZSBhbnl0aGluZyB3aXRoIGxlbmd0aCAwCisgICAgIyAgIGh0dHA6Ly9idWd6aWxsYS5yZWRoYXQuY29tLzQ5OTY4OQorICAgICMgbWVtY2hyIHNob3VsZCBub3QgZGVyZWZlcmVuY2Ugb3ZlcmVzdGltYXRlZCBsZW5ndGggYWZ0ZXIgYSBtYXRjaAorICAgICMgICBodHRwOi8vYnVncy5kZWJpYW4ub3JnL2NnaS1iaW4vYnVncmVwb3J0LmNnaT9idWc9NTIxNzM3CisgICAgIyAgIGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTAxNjIKKyAgICAjIEFzc3VtZSB0aGF0IG1lbWNociB3b3JrcyBvbiBwbGF0Zm9ybXMgdGhhdCBsYWNrIG1wcm90ZWN0LgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBtZW1jaHIgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBtZW1jaHIgd29ya3MuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19tZW1jaHJfd29ya3MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgICAgICAgICBnbF9jdl9mdW5jX21lbWNocl93b3Jrcz0iZ3Vlc3Npbmcgbm8iCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfU1lTX01NQU5fSAorIyBpbmNsdWRlIDxmY250bC5oPgorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjIGluY2x1ZGUgPHN5cy9tbWFuLmg+CisjIGlmbmRlZiBNQVBfRklMRQorIyAgZGVmaW5lIE1BUF9GSUxFIDAKKyMgZW5kaWYKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKKworICBpbnQgcmVzdWx0ID0gMDsKKyAgY2hhciAqZmVuY2UgPSBOVUxMOworI2lmIEhBVkVfU1lTX01NQU5fSCAmJiBIQVZFX01QUk9URUNUCisjIGlmIEhBVkVfTUFQX0FOT05ZTU9VUworICBjb25zdCBpbnQgZmxhZ3MgPSBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEU7CisgIGNvbnN0IGludCBmZCA9IC0xOworIyBlbHNlIC8qICFIQVZFX01BUF9BTk9OWU1PVVMgKi8KKyAgY29uc3QgaW50IGZsYWdzID0gTUFQX0ZJTEUgfCBNQVBfUFJJVkFURTsKKyAgaW50IGZkID0gb3BlbiAoIi9kZXYvemVybyIsIE9fUkRPTkxZLCAwNjY2KTsKKyAgaWYgKGZkID49IDApCisjIGVuZGlmCisgICAgeworICAgICAgaW50IHBhZ2VzaXplID0gZ2V0cGFnZXNpemUgKCk7CisgICAgICBjaGFyICp0d29fcGFnZXMgPQorICAgICAgICAoY2hhciAqKSBtbWFwIChOVUxMLCAyICogcGFnZXNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLCBmZCwgMCk7CisgICAgICBpZiAodHdvX3BhZ2VzICE9IChjaGFyICopKC0xKQorICAgICAgICAgICYmIG1wcm90ZWN0ICh0d29fcGFnZXMgKyBwYWdlc2l6ZSwgcGFnZXNpemUsIFBST1RfTk9ORSkgPT0gMCkKKyAgICAgICAgZmVuY2UgPSB0d29fcGFnZXMgKyBwYWdlc2l6ZTsKKyAgICB9CisjZW5kaWYKKyAgaWYgKGZlbmNlKQorICAgIHsKKyAgICAgIGlmIChtZW1jaHIgKGZlbmNlLCAwLCAwKSkKKyAgICAgICAgcmVzdWx0IHw9IDE7CisgICAgICBzdHJjcHkgKGZlbmNlIC0gOSwgIjEyMzQ1Njc4Iik7CisgICAgICBpZiAobWVtY2hyIChmZW5jZSAtIDksIDAsIDc5KSAhPSBmZW5jZSAtIDEpCisgICAgICAgIHJlc3VsdCB8PSAyOworICAgICAgaWYgKG1lbWNociAoZmVuY2UgLSAxLCAwLCAzKSAhPSBmZW5jZSAtIDEpCisgICAgICAgIHJlc3VsdCB8PSA0OworICAgIH0KKyAgcmV0dXJuIHJlc3VsdDsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19tZW1jaHJfd29ya3M9eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfbWVtY2hyX3dvcmtzPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19tZW1jaHJfd29ya3MiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX21lbWNocl93b3JrcyIgPiY2OyB9CisgICAgaWYgdGVzdCAiJGdsX2N2X2Z1bmNfbWVtY2hyX3dvcmtzIiAhPSB5ZXM7IHRoZW4KKyAgICAgIFJFUExBQ0VfTUVNQ0hSPTEKKyAgICBmaQorICBmaQorCisKKworYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAib2JzdGFja19wcmludGYiICJhY19jdl9oYXZlX2RlY2xfb2JzdGFja19wcmludGYiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX29ic3RhY2tfcHJpbnRmIiA9IHh5ZXM7IHRoZW4gOgorICBhY19oYXZlX2RlY2w9MQorZWxzZQorICBhY19oYXZlX2RlY2w9MAorZmkKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfT0JTVEFDS19QUklOVEYgJGFjX2hhdmVfZGVjbAorX0FDRU9GCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBwcm9tb3RlZCBtb2RlX3QgdHlwZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcHJvbW90ZWQgbW9kZV90IHR5cGUuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfcHJvbW90ZWRfbW9kZV90Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK2ludAorbWFpbiAoKQorewordHlwZWRlZiBpbnQgYXJyYXlbMiAqIChzaXplb2YgKG1vZGVfdCkgPCBzaXplb2YgKGludCkpIC0gMV07CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfcHJvbW90ZWRfbW9kZV90PSdpbnQnCitlbHNlCisgIGdsX2N2X3Byb21vdGVkX21vZGVfdD0nbW9kZV90JworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9wcm9tb3RlZF9tb2RlX3QiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9wcm9tb3RlZF9tb2RlX3QiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBST01PVEVEX01PREVfVCAkZ2xfY3ZfcHJvbW90ZWRfbW9kZV90CitfQUNFT0YKKworCisKKworCisgICAgIFJFUExBQ0VfU1RSRVJST1JfMD0wCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBzdHJlcnJvcigwKSBzdWNjZWVkcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHN0cmVycm9yKDApIHN1Y2NlZWRzLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfc3RyZXJyb3JfMF93b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIGdsaWJjIHN5c3RlbXMuCisgICAgICAgICAqLWdudSopIGdsX2N2X2Z1bmNfc3RyZXJyb3JfMF93b3Jrcz0iZ3Vlc3NpbmcgeWVzIiA7OworICAgICAgICAgICAgICAgICAjIElmIHdlIGRvbid0IGtub3csIGFzc3VtZSB0aGUgd29yc3QuCisgICAgICAgICAqKSAgICAgIGdsX2N2X2Z1bmNfc3RyZXJyb3JfMF93b3Jrcz0iZ3Vlc3Npbmcgbm8iIDs7CisgICAgICAgZXNhYworCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAgICAgICAgICAgI2luY2x1ZGUgPGVycm5vLmg+CisKK2ludAorbWFpbiAoKQoreworaW50IHJlc3VsdCA9IDA7CisgICAgICAgICAgIGNoYXIgKnN0cjsKKyAgICAgICAgICAgZXJybm8gPSAwOworICAgICAgICAgICBzdHIgPSBzdHJlcnJvciAoMCk7CisgICAgICAgICAgIGlmICghKnN0cikgcmVzdWx0IHw9IDE7CisgICAgICAgICAgIGlmIChlcnJubykgcmVzdWx0IHw9IDI7CisgICAgICAgICAgIGlmIChzdHJzdHIgKHN0ciwgIm5rbm93biIpIHx8IHN0cnN0ciAoc3RyLCAibmRlZmluZWQiKSkKKyAgICAgICAgICAgICByZXN1bHQgfD0gNDsKKyAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfc3RyZXJyb3JfMF93b3Jrcz15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19zdHJlcnJvcl8wX3dvcmtzPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3N0cmVycm9yXzBfd29ya3MiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX3N0cmVycm9yXzBfd29ya3MiID4mNjsgfQorICBjYXNlICIkZ2xfY3ZfZnVuY19zdHJlcnJvcl8wX3dvcmtzIiBpbgorICAgICp5ZXMpIDs7CisgICAgKikKKyAgICAgIFJFUExBQ0VfU1RSRVJST1JfMD0xCisKKyRhc19lY2hvICIjZGVmaW5lIFJFUExBQ0VfU1RSRVJST1JfMCAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgOzsKKyAgZXNhYworCisKKworCisKKworCisKKworCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfc3RyZXJyb3JfciA9IHllczsgdGhlbgorICAgIGlmIHRlc3QgIiRFUlJOT19IOiRSRVBMQUNFX1NUUkVSUk9SXzAiID0gOjA7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0cmVycm9yX3Igd2l0aCBQT1NJWCBzaWduYXR1cmUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN0cmVycm9yX3Igd2l0aCBQT1NJWCBzaWduYXR1cmUuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19zdHJlcnJvcl9yX3Bvc2l4X3NpZ25hdHVyZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAgICAgICAgICAgICAgICBpbnQgc3RyZXJyb3JfciAoaW50LCBjaGFyICosIHNpemVfdCk7CisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19zdHJlcnJvcl9yX3Bvc2l4X3NpZ25hdHVyZT15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19zdHJlcnJvcl9yX3Bvc2l4X3NpZ25hdHVyZT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3N0cmVycm9yX3JfcG9zaXhfc2lnbmF0dXJlIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19zdHJlcnJvcl9yX3Bvc2l4X3NpZ25hdHVyZSIgPiY2OyB9CisgICAgICBpZiB0ZXN0ICRnbF9jdl9mdW5jX3N0cmVycm9yX3JfcG9zaXhfc2lnbmF0dXJlID0geWVzOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBzdHJlcnJvcl9yIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgc3RyZXJyb3JfciB3b3Jrcy4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX3N0cmVycm9yX3Jfd29ya3MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisKKyAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3Mgbm8gb24gQUlYLgorICAgICAgICAgICAgICAgIGFpeCopICBnbF9jdl9mdW5jX3N0cmVycm9yX3Jfd29ya3M9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3Mgbm8gb24gSFAtVVguCisgICAgICAgICAgICAgICAgaHB1eCopIGdsX2N2X2Z1bmNfc3RyZXJyb3Jfcl93b3Jrcz0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyBubyBvbiBCU0QgdmFyaWFudHMuCisgICAgICAgICAgICAgICAgKmJzZCopICBnbF9jdl9mdW5jX3N0cmVycm9yX3Jfd29ya3M9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG90aGVyd2lzZS4KKyAgICAgICAgICAgICAgICAqKSAgICAgZ2xfY3ZfZnVuY19zdHJlcnJvcl9yX3dvcmtzPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgZXNhYworCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxlcnJuby5oPgorICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0cmluZy5oPgorCitpbnQKK21haW4gKCkKK3sKK2ludCByZXN1bHQgPSAwOworICAgICAgICAgICAgICAgICAgY2hhciBidWZbNzldOworICAgICAgICAgICAgICAgICAgaWYgKHN0cmVycm9yX3IgKEVBQ0NFUywgYnVmLCAwKSA8IDApCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSAxOworICAgICAgICAgICAgICAgICAgZXJybm8gPSAwOworICAgICAgICAgICAgICAgICAgaWYgKHN0cmVycm9yX3IgKEVBQ0NFUywgYnVmLCBzaXplb2YgYnVmKSAhPSAwKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gMjsKKyAgICAgICAgICAgICAgICAgIHN0cmNweSAoYnVmLCAiVW5rbm93biIpOworICAgICAgICAgICAgICAgICAgaWYgKHN0cmVycm9yX3IgKDAsIGJ1Ziwgc2l6ZW9mIGJ1ZikgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDQ7CisgICAgICAgICAgICAgICAgICBpZiAoZXJybm8pCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSA4OworICAgICAgICAgICAgICAgICAgaWYgKHN0cnN0ciAoYnVmLCAibmtub3duIikgfHwgc3Ryc3RyIChidWYsICJuZGVmaW5lZCIpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gMHgxMDsKKyAgICAgICAgICAgICAgICAgIGVycm5vID0gMDsKKyAgICAgICAgICAgICAgICAgICpidWYgPSAwOworICAgICAgICAgICAgICAgICAgaWYgKHN0cmVycm9yX3IgKC0zLCBidWYsIHNpemVvZiBidWYpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDB4MjA7CisgICAgICAgICAgICAgICAgICBpZiAoZXJybm8pCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSAweDQwOworICAgICAgICAgICAgICAgICAgaWYgKCEqYnVmKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gMHg4MDsKKyAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfc3RyZXJyb3Jfcl93b3Jrcz15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19zdHJlcnJvcl9yX3dvcmtzPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3N0cmVycm9yX3Jfd29ya3MiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX3N0cmVycm9yX3Jfd29ya3MiID4mNjsgfQorICAgICAgZWxzZQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX19feHBnX3N0cmVycm9yX3IgPSB5ZXM7IHRoZW4KKyAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgX194cGdfc3RyZXJyb3JfciB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIF9feHBnX3N0cmVycm9yX3Igd29ya3MuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19zdHJlcnJvcl9yX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc3RyZXJyb3Jfcl93b3Jrcz0iZ3Vlc3Npbmcgbm8iCisKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGVycm5vLmg+CisgICAgICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAgICAgICAgICAgICAgICAgICAgZXh0ZXJuCisgICAgICAgICAgICAgICAgICAgICNpZmRlZiBfX2NwbHVzcGx1cworICAgICAgICAgICAgICAgICAgICAiQyIKKyAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIGludCBfX3hwZ19zdHJlcnJvcl9yKGludCwgY2hhciAqLCBzaXplX3QpOworCitpbnQKK21haW4gKCkKK3sKK2ludCByZXN1bHQgPSAwOworICAgICAgICAgICAgICAgICAgICBjaGFyIGJ1ZlsyNTZdID0gIl4iOworICAgICAgICAgICAgICAgICAgICBjaGFyIGNvcHlbMjU2XTsKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqc3RyID0gc3RyZXJyb3IgKC0xKTsKKyAgICAgICAgICAgICAgICAgICAgc3RyY3B5IChjb3B5LCBzdHIpOworICAgICAgICAgICAgICAgICAgICBpZiAoX194cGdfc3RyZXJyb3JfciAoLTIsIGJ1ZiwgMSkgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCpidWYpCisgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDI7CisgICAgICAgICAgICAgICAgICAgIF9feHBnX3N0cmVycm9yX3IgKC0yLCBidWYsIDI1Nik7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAgKHN0ciwgY29weSkpCisgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDQ7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfc3RyZXJyb3Jfcl93b3Jrcz15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19zdHJlcnJvcl9yX3dvcmtzPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3N0cmVycm9yX3Jfd29ya3MiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX3N0cmVycm9yX3Jfd29ya3MiID4mNjsgfQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorICBmaQorCithY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJzdHJlcnJvcl9yIiAiYWNfY3ZfaGF2ZV9kZWNsX3N0cmVycm9yX3IiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX3N0cmVycm9yX3IiID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCitlbHNlCisgIGFjX2hhdmVfZGVjbD0wCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9TVFJFUlJPUl9SICRhY19oYXZlX2RlY2wKK19BQ0VPRgorCisKKworCisKKworCisKKyAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3N0cmVycm9yX3IgPSBubzsgdGhlbgorICAgIEhBVkVfREVDTF9TVFJFUlJPUl9SPTAKKyAgZmkKKworICBpZiB0ZXN0ICRhY19jdl9mdW5jX3N0cmVycm9yX3IgPSB5ZXM7IHRoZW4KKyAgICBpZiB0ZXN0ICIkRVJSTk9fSDokUkVQTEFDRV9TVFJFUlJPUl8wIiA9IDowOyB0aGVuCisgICAgICBpZiB0ZXN0ICRnbF9jdl9mdW5jX3N0cmVycm9yX3JfcG9zaXhfc2lnbmF0dXJlID0geWVzOyB0aGVuCisgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3N0cmVycm9yX3Jfd29ya3MiIGluCisgICAgICAgICAgICAgICAgICAgICpubykgUkVQTEFDRV9TVFJFUlJPUl9SPTEgOzsKKyAgICAgICAgZXNhYworICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFJFUExBQ0VfU1RSRVJST1JfUj0xCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIFJFUExBQ0VfU1RSRVJST1JfUj0xCisgICAgZmkKKyAgZmkKKworCisKKworICBHTlVMSUJfUE9TSVhfU1BBV049MDsKKyAgR05VTElCX1BPU0lYX1NQQVdOUD0wOworICBHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0lOSVQ9MDsKKyAgR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRT0wOworICBHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDI9MDsKKyAgR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERPUEVOPTA7CisgIEdOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfREVTVFJPWT0wOworICBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0lOSVQ9MDsKKyAgR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRGTEFHUz0wOworICBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVEZMQUdTPTA7CisgIEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUUEdST1VQPTA7CisgIEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUUEdST1VQPTA7CisgIEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0NIRURQQVJBTT0wOworICBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNDSEVEUEFSQU09MDsKKyAgR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBPTElDWT0wOworICBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNDSEVEUE9MSUNZPTA7CisgIEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0lHREVGQVVMVD0wOworICBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNJR0RFRkFVTFQ9MDsKKyAgR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdNQVNLPTA7CisgIEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0lHTUFTSz0wOworICBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0RFU1RST1k9MDsKKyAgICBIQVZFX1BPU0lYX1NQQVdOPTE7CisgIEhBVkVfUE9TSVhfU1BBV05BVFRSX1Q9MTsKKyAgSEFWRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfVD0xOworCisgIFJFUExBQ0VfUE9TSVhfU1BBV049MDsKKyAgUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQUREQ0xPU0U9MDsKKworICBSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BREREVVAyPTA7CisKKyAgUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURET1BFTj0wOworCisKKworCisKKworCisKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19wb3NpeF9zcGF3biAhPSB5ZXM7IHRoZW4KKyAgICBIQVZFX1BPU0lYX1NQQVdOPTAKKyAgZmkKKworCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX3Bvc2l4X3NwYXduID0geWVzOyB0aGVuCisKKworICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgcG9zaXhfc3Bhd24gd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBwb3NpeF9zcGF3biB3b3Jrcy4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX3Bvc2l4X3NwYXduX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAkY3Jvc3NfY29tcGlsaW5nID0gbm87IHRoZW4KKyAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3Bhd24uaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvd2FpdC5oPgorCitleHRlcm4gY2hhciAqKmVudmlyb247CisKKyNpZm5kZWYgU1RESU5fRklMRU5PCisjIGRlZmluZSBTVERJTl9GSUxFTk8gMAorI2VuZGlmCisjaWZuZGVmIFNURE9VVF9GSUxFTk8KKyMgZGVmaW5lIFNURE9VVF9GSUxFTk8gMQorI2VuZGlmCisjaWZuZGVmIFNUREVSUl9GSUxFTk8KKyMgZGVmaW5lIFNUREVSUl9GSUxFTk8gMgorI2VuZGlmCisKKyNpZm5kZWYgV1RFUk1TSUcKKyMgZGVmaW5lIFdURVJNU0lHKHgpICgoeCkgJiAweDdmKQorI2VuZGlmCisjaWZuZGVmIFdJRkVYSVRFRAorIyBkZWZpbmUgV0lGRVhJVEVEKHgpIChXVEVSTVNJRyAoeCkgPT0gMCkKKyNlbmRpZgorI2lmbmRlZiBXRVhJVFNUQVRVUworIyBkZWZpbmUgV0VYSVRTVEFUVVMoeCkgKCgoeCkgPj4gOCkgJiAweGZmKQorI2VuZGlmCisKKyNkZWZpbmUgQ0hJTERfUFJPR1JBTV9GSUxFTkFNRSAiL25vbi9leGlzdC9lbnQiCisKK3N0YXRpYyBpbnQKK2ZkX3NhZmVyIChpbnQgZmQpCit7CisgIGlmICgwIDw9IGZkICYmIGZkIDw9IDIpCisgICAgeworICAgICAgaW50IGYgPSBmZF9zYWZlciAoZHVwIChmZCkpOworICAgICAgaW50IGUgPSBlcnJubzsKKyAgICAgIGNsb3NlIChmZCk7CisgICAgICBlcnJubyA9IGU7CisgICAgICBmZCA9IGY7CisgICAgfQorCisgIHJldHVybiBmZDsKK30KKworaW50CittYWluICgpCit7CisgIGNoYXIgKmFyZ3ZbMl0gPSB7IENISUxEX1BST0dSQU1fRklMRU5BTUUsIE5VTEwgfTsKKyAgaW50IG9mZFsyXTsKKyAgc2lnc2V0X3QgYmxvY2tlZF9zaWduYWxzOworICBzaWdzZXRfdCBmYXRhbF9zaWduYWxfc2V0OworICBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCBhY3Rpb25zOworICBib29sIGFjdGlvbnNfYWxsb2NhdGVkOworICBwb3NpeF9zcGF3bmF0dHJfdCBhdHRyczsKKyAgYm9vbCBhdHRyc19hbGxvY2F0ZWQ7CisgIGludCBlcnI7CisgIHBpZF90IGNoaWxkOworICBpbnQgc3RhdHVzOworICBpbnQgZXhpdHN0YXR1czsKKworICBzZXR2YnVmIChzdGRvdXQsIE5VTEwsIF9JT0ZCRiwgMCk7CisgIHB1dHMgKCJUaGlzIHNob3VsZCBiZSBzZWVuIG9ubHkgb25jZS4iKTsKKyAgaWYgKHBpcGUgKG9mZCkgPCAwIHx8IChvZmRbMV0gPSBmZF9zYWZlciAob2ZkWzFdKSkgPCAwKQorICAgIHsKKyAgICAgIHBlcnJvciAoImNhbm5vdCBjcmVhdGUgcGlwZSIpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorICBzaWdwcm9jbWFzayAoU0lHX1NFVE1BU0ssIE5VTEwsICZibG9ja2VkX3NpZ25hbHMpOworICBzaWdlbXB0eXNldCAoJmZhdGFsX3NpZ25hbF9zZXQpOworICBzaWdhZGRzZXQgKCZmYXRhbF9zaWduYWxfc2V0LCBTSUdJTlQpOworICBzaWdhZGRzZXQgKCZmYXRhbF9zaWduYWxfc2V0LCBTSUdURVJNKTsKKyAgc2lnYWRkc2V0ICgmZmF0YWxfc2lnbmFsX3NldCwgU0lHSFVQKTsKKyAgc2lnYWRkc2V0ICgmZmF0YWxfc2lnbmFsX3NldCwgU0lHUElQRSk7CisgIHNpZ3Byb2NtYXNrIChTSUdfQkxPQ0ssICZmYXRhbF9zaWduYWxfc2V0LCBOVUxMKTsKKyAgYWN0aW9uc19hbGxvY2F0ZWQgPSBmYWxzZTsKKyAgYXR0cnNfYWxsb2NhdGVkID0gZmFsc2U7CisgIGlmICgoZXJyID0gcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2luaXQgKCZhY3Rpb25zKSkgIT0gMAorICAgICAgfHwgKGFjdGlvbnNfYWxsb2NhdGVkID0gdHJ1ZSwKKyAgICAgICAgICAoZXJyID0gcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDIgKCZhY3Rpb25zLCBvZmRbMF0sIFNURElOX0ZJTEVOTykpICE9IDAKKyAgICAgICAgICB8fCAoZXJyID0gcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlICgmYWN0aW9ucywgb2ZkWzBdKSkgIT0gMAorICAgICAgICAgIHx8IChlcnIgPSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2UgKCZhY3Rpb25zLCBvZmRbMV0pKSAhPSAwCisgICAgICAgICAgfHwgKGVyciA9IHBvc2l4X3NwYXduYXR0cl9pbml0ICgmYXR0cnMpKSAhPSAwCisgICAgICAgICAgfHwgKGF0dHJzX2FsbG9jYXRlZCA9IHRydWUsCisgICAgICAgICAgICAgIChlcnIgPSBwb3NpeF9zcGF3bmF0dHJfc2V0c2lnbWFzayAoJmF0dHJzLCAmYmxvY2tlZF9zaWduYWxzKSkgIT0gMAorICAgICAgICAgICAgICB8fCAoZXJyID0gcG9zaXhfc3Bhd25hdHRyX3NldGZsYWdzICgmYXR0cnMsIFBPU0lYX1NQQVdOX1NFVFNJR01BU0spKSAhPSAwKQorICAgICAgICAgIHx8IChlcnIgPSBwb3NpeF9zcGF3bnAgKCZjaGlsZCwgQ0hJTERfUFJPR1JBTV9GSUxFTkFNRSwgJmFjdGlvbnMsICZhdHRycywgYXJndiwgZW52aXJvbikpICE9IDApKQorICAgIHsKKyAgICAgIGlmIChhY3Rpb25zX2FsbG9jYXRlZCkKKyAgICAgICAgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3kgKCZhY3Rpb25zKTsKKyAgICAgIGlmIChhdHRyc19hbGxvY2F0ZWQpCisgICAgICAgIHBvc2l4X3NwYXduYXR0cl9kZXN0cm95ICgmYXR0cnMpOworICAgICAgc2lncHJvY21hc2sgKFNJR19VTkJMT0NLLCAmZmF0YWxfc2lnbmFsX3NldCwgTlVMTCk7CisgICAgICBpZiAoZXJyID09IEVOT0VOVCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBlcnJubyA9IGVycjsKKyAgICAgICAgICBwZXJyb3IgKCJzdWJwcm9jZXNzIGZhaWxlZCIpOworICAgICAgICAgIGV4aXQgKDEpOworICAgICAgICB9CisgICAgfQorICBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfZGVzdHJveSAoJmFjdGlvbnMpOworICBwb3NpeF9zcGF3bmF0dHJfZGVzdHJveSAoJmF0dHJzKTsKKyAgc2lncHJvY21hc2sgKFNJR19VTkJMT0NLLCAmZmF0YWxfc2lnbmFsX3NldCwgTlVMTCk7CisgIGNsb3NlIChvZmRbMF0pOworICBjbG9zZSAob2ZkWzFdKTsKKyAgc3RhdHVzID0gMDsKKyAgd2hpbGUgKHdhaXRwaWQgKGNoaWxkLCAmc3RhdHVzLCAwKSAhPSBjaGlsZCkKKyAgICA7CisgIGlmICghV0lGRVhJVEVEIChzdGF0dXMpKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgInN1YnByb2Nlc3MgdGVybWluYXRlZCB3aXRoIHVuZXhwZWN0ZWQgd2FpdCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisgICAgICBleGl0ICgxKTsKKyAgICB9CisgIGV4aXRzdGF0dXMgPSBXRVhJVFNUQVRVUyAoc3RhdHVzKTsKKyAgaWYgKGV4aXRzdGF0dXMgIT0gMTI3KQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgInN1YnByb2Nlc3MgdGVybWluYXRlZCB3aXRoIHVuZXhwZWN0ZWQgZXhpdCBzdGF0dXMgJWRcbiIsIGV4aXRzdGF0dXMpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorICByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGlmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgICAgICAgICAgICAmJiAuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCA+IGNvbmZ0ZXN0Lm91dCBcCisgICAgICAgICAgICAgJiYgZWNobyAnVGhpcyBzaG91bGQgYmUgc2VlbiBvbmx5IG9uY2UuJyA+IGNvbmZ0ZXN0Lm9rIFwKKyAgICAgICAgICAgICAmJiBjbXAgY29uZnRlc3Qub3V0IGNvbmZ0ZXN0Lm9rID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICBnbF9jdl9mdW5jX3Bvc2l4X3NwYXduX3dvcmtzPXllcworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdsX2N2X2Z1bmNfcG9zaXhfc3Bhd25fd29ya3M9bm8KKyAgICAgICAgICBmaQorZWxzZQorICBnbF9jdl9mdW5jX3Bvc2l4X3NwYXduX3dvcmtzPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICBpZiB0ZXN0ICRnbF9jdl9mdW5jX3Bvc2l4X3NwYXduX3dvcmtzID0geWVzOyB0aGVuCisgICAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBydW4gdGVzdCBwcm9ncmFtIHdoaWxlIGNyb3NzIGNvbXBpbGluZworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBUZXN0IHdoZXRoZXIgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW4gc3VwcG9ydHMgZmlsZW5hbWUgYXJndW1lbnRzCisgICB0aGF0IGNvbnRhaW4gc3BlY2lhbCBjaGFyYWN0ZXJzIHN1Y2ggYXMgJyonLiAgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzcGF3bi5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisKK2V4dGVybiBjaGFyICoqZW52aXJvbjsKKworI2lmbmRlZiBTVERJTl9GSUxFTk8KKyMgZGVmaW5lIFNURElOX0ZJTEVOTyAwCisjZW5kaWYKKyNpZm5kZWYgU1RET1VUX0ZJTEVOTworIyBkZWZpbmUgU1RET1VUX0ZJTEVOTyAxCisjZW5kaWYKKyNpZm5kZWYgU1RERVJSX0ZJTEVOTworIyBkZWZpbmUgU1RERVJSX0ZJTEVOTyAyCisjZW5kaWYKKworI2lmbmRlZiBXVEVSTVNJRworIyBkZWZpbmUgV1RFUk1TSUcoeCkgKCh4KSAmIDB4N2YpCisjZW5kaWYKKyNpZm5kZWYgV0lGRVhJVEVECisjIGRlZmluZSBXSUZFWElURUQoeCkgKFdURVJNU0lHICh4KSA9PSAwKQorI2VuZGlmCisjaWZuZGVmIFdFWElUU1RBVFVTCisjIGRlZmluZSBXRVhJVFNUQVRVUyh4KSAoKCh4KSA+PiA4KSAmIDB4ZmYpCisjZW5kaWYKKworI2RlZmluZSBDSElMRF9QUk9HUkFNX0ZJTEVOQU1FICJjb25mdGVzdCIKKyNkZWZpbmUgREFUQV9GSUxFTkFNRSAiY29uZnRlc3QlPSojPyIKKworc3RhdGljIGludAorcGFyZW50X21haW4gKHZvaWQpCit7CisgIEZJTEUgKmZwOworICBjaGFyICphcmd2WzNdID0geyBDSElMRF9QUk9HUkFNX0ZJTEVOQU1FLCAiLWNoaWxkIiwgTlVMTCB9OworICBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCBhY3Rpb25zOworICBib29sIGFjdGlvbnNfYWxsb2NhdGVkOworICBpbnQgZXJyOworICBwaWRfdCBjaGlsZDsKKyAgaW50IHN0YXR1czsKKyAgaW50IGV4aXRzdGF0dXM7CisKKyAgLyogQ3JlYXRlIGEgZGF0YSBmaWxlIHdpdGggc3BlY2lmaWMgY29udGVudHMuICAqLworICBmcCA9IGZvcGVuIChEQVRBX0ZJTEVOQU1FLCAid2IiKTsKKyAgaWYgKGZwID09IE5VTEwpCisgICAgeworICAgICAgcGVycm9yICgiY2Fubm90IGNyZWF0ZSBkYXRhIGZpbGUiKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgZndyaXRlICgiSGFsbGUgUG90dGEiLCAxLCAxMSwgZnApOworICBpZiAoZmZsdXNoIChmcCkgfHwgZmNsb3NlIChmcCkpCisgICAgeworICAgICAgcGVycm9yICgiY2Fubm90IHByZXBhcmUgZGF0YSBmaWxlIik7CisgICAgICByZXR1cm4gMjsKKyAgICB9CisKKyAgLyogQXZvaWQgcmVhZGluZyBmcm9tIG91ciBzdGRpbiwgYXMgaXQgY291bGQgYmxvY2suICAqLworICBmcmVvcGVuICgiL2Rldi9udWxsIiwgInJiIiwgc3RkaW4pOworCisgIC8qIFRlc3Qgd2hldGhlciBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3BlbiB3aXRoIHRoaXMgZmlsZSBuYW1lCisgICAgIGFjdHVhbGx5IHdvcmtzLCBidXQgc3Bhd25pbmcgYSBjaGlsZCB0aGF0IHJlYWRzIGZyb20gdGhpcyBmaWxlLiAgKi8KKyAgYWN0aW9uc19hbGxvY2F0ZWQgPSBmYWxzZTsKKyAgaWYgKChlcnIgPSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfaW5pdCAoJmFjdGlvbnMpKSAhPSAwCisgICAgICB8fCAoYWN0aW9uc19hbGxvY2F0ZWQgPSB0cnVlLAorICAgICAgICAgIChlcnIgPSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3BlbiAoJmFjdGlvbnMsIFNURElOX0ZJTEVOTywgREFUQV9GSUxFTkFNRSwgT19SRE9OTFksIDA2MDApKSAhPSAwCisgICAgICAgICAgfHwgKGVyciA9IHBvc2l4X3NwYXduICgmY2hpbGQsIENISUxEX1BST0dSQU1fRklMRU5BTUUsICZhY3Rpb25zLCBOVUxMLCBhcmd2LCBlbnZpcm9uKSkgIT0gMCkpCisgICAgeworICAgICAgaWYgKGFjdGlvbnNfYWxsb2NhdGVkKQorICAgICAgICBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfZGVzdHJveSAoJmFjdGlvbnMpOworICAgICAgZXJybm8gPSBlcnI7CisgICAgICBwZXJyb3IgKCJzdWJwcm9jZXNzIGZhaWxlZCIpOworICAgICAgcmV0dXJuIDM7CisgICAgfQorICBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfZGVzdHJveSAoJmFjdGlvbnMpOworICBzdGF0dXMgPSAwOworICB3aGlsZSAod2FpdHBpZCAoY2hpbGQsICZzdGF0dXMsIDApICE9IGNoaWxkKQorICAgIDsKKyAgaWYgKCFXSUZFWElURUQgKHN0YXR1cykpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAic3VicHJvY2VzcyB0ZXJtaW5hdGVkIHdpdGggdW5leHBlY3RlZCB3YWl0IHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKKyAgICAgIHJldHVybiA0OworICAgIH0KKyAgZXhpdHN0YXR1cyA9IFdFWElUU1RBVFVTIChzdGF0dXMpOworICBpZiAoZXhpdHN0YXR1cyAhPSAwKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgInN1YnByb2Nlc3MgdGVybWluYXRlZCB3aXRoIHVuZXhwZWN0ZWQgZXhpdCBzdGF0dXMgJWRcbiIsIGV4aXRzdGF0dXMpOworICAgICAgcmV0dXJuIDU7CisgICAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorY2hpbGRfbWFpbiAodm9pZCkKK3sKKyAgY2hhciBidWZbMTAyNF07CisKKyAgLyogU2VlIGlmIHJlYWRpbmcgZnJvbSBTVERJTl9GSUxFTk8geWllbGRzIHRoZSBleHBlY3RlZCBjb250ZW50cy4gICovCisgIGlmIChmcmVhZCAoYnVmLCAxLCBzaXplb2YgKGJ1ZiksIHN0ZGluKSA9PSAxMQorICAgICAgJiYgbWVtY21wIChidWYsICJIYWxsZSBQb3R0YSIsIDExKSA9PSAwKQorICAgIHJldHVybiAwOworICBlbHNlCisgICAgcmV0dXJuIDg7Cit9CisKK3N0YXRpYyB2b2lkCitjbGVhbnVwX3RoZW5fZGllIChpbnQgc2lnKQoreworICAvKiBDbGVhbiB1cCBkYXRhIGZpbGUuICAqLworICB1bmxpbmsgKERBVEFfRklMRU5BTUUpOworCisgIC8qIFJlLXJhaXNlIHRoZSBzaWduYWwgYW5kIGRpZSBmcm9tIGl0LiAgKi8KKyAgc2lnbmFsIChzaWcsIFNJR19ERkwpOworICByYWlzZSAoc2lnKTsKK30KKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICBpbnQgZXhpdHN0YXR1czsKKworICBpZiAoIShhcmdjID4gMSAmJiBzdHJjbXAgKGFyZ3ZbMV0sICItY2hpbGQiKSA9PSAwKSkKKyAgICB7CisgICAgICAvKiBUaGlzIGlzIHRoZSBwYXJlbnQgcHJvY2Vzcy4gICovCisgICAgICBzaWduYWwgKFNJR0lOVCwgY2xlYW51cF90aGVuX2RpZSk7CisgICAgICBzaWduYWwgKFNJR1RFUk0sIGNsZWFudXBfdGhlbl9kaWUpOworICAgICAgI2lmZGVmIFNJR0hVUAorICAgICAgc2lnbmFsIChTSUdIVVAsIGNsZWFudXBfdGhlbl9kaWUpOworICAgICAgI2VuZGlmCisKKyAgICAgIGV4aXRzdGF0dXMgPSBwYXJlbnRfbWFpbiAoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBUaGlzIGlzIHRoZSBjaGlsZCBwcm9jZXNzLiAgKi8KKworICAgICAgZXhpdHN0YXR1cyA9IGNoaWxkX21haW4gKCk7CisgICAgfQorICB1bmxpbmsgKERBVEFfRklMRU5BTUUpOworICByZXR1cm4gZXhpdHN0YXR1czsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBnbF9jdl9mdW5jX3Bvc2l4X3NwYXduX3dvcmtzPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworICAgICAgIGZpCisgICAgIGVsc2UKKyAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgIGFpeCopIGdsX2N2X2Z1bmNfcG9zaXhfc3Bhd25fd29ya3M9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAqKSAgICBnbF9jdl9mdW5jX3Bvc2l4X3NwYXduX3dvcmtzPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICBlc2FjCisgICAgIGZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfcG9zaXhfc3Bhd25fd29ya3MiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX3Bvc2l4X3NwYXduX3dvcmtzIiA+JjY7IH0KKworICAgIGNhc2UgIiRnbF9jdl9mdW5jX3Bvc2l4X3NwYXduX3dvcmtzIiBpbgorICAgICAgKnllcykKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9XT1JLSU5HX1BPU0lYX1NQQVdOIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBvbGljeSBpcyBzdXBwb3J0ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwb2xpY3kgaXMgc3VwcG9ydGVkLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfc3Bhd25hdHRyX3NldHNjaGVkcG9saWN5Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3Bhd24uaD4KKyNpZiBQT1NJWF9TUEFXTl9TRVRTQ0hFRFVMRVIKKyBQT1NJWCBzY2hlZHVsaW5nIHN1cHBvcnRlZAorI2VuZGlmCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIlBPU0lYIHNjaGVkdWxpbmcgc3VwcG9ydGVkIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBnbF9jdl9mdW5jX3NwYXduYXR0cl9zZXRzY2hlZHBvbGljeT15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19zcGF3bmF0dHJfc2V0c2NoZWRwb2xpY3k9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3NwYXduYXR0cl9zZXRzY2hlZHBvbGljeSIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfc3Bhd25hdHRyX3NldHNjaGVkcG9saWN5IiA+JjY7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgcG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcGFyYW0gaXMgc3VwcG9ydGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgcG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcGFyYW0gaXMgc3VwcG9ydGVkLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfc3Bhd25hdHRyX3NldHNjaGVkcGFyYW0rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzcGF3bi5oPgorI2lmIFBPU0lYX1NQQVdOX1NFVFNDSEVEUEFSQU0KKyBQT1NJWCBzY2hlZHVsaW5nIHN1cHBvcnRlZAorI2VuZGlmCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIlBPU0lYIHNjaGVkdWxpbmcgc3VwcG9ydGVkIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBnbF9jdl9mdW5jX3NwYXduYXR0cl9zZXRzY2hlZHBhcmFtPXllcworZWxzZQorICBnbF9jdl9mdW5jX3NwYXduYXR0cl9zZXRzY2hlZHBhcmFtPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19zcGF3bmF0dHJfc2V0c2NoZWRwYXJhbSIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfc3Bhd25hdHRyX3NldHNjaGVkcGFyYW0iID4mNjsgfQorICAgICAgICA7OworICAgICAgKikgUkVQTEFDRV9QT1NJWF9TUEFXTj0xIDs7CisgICAgZXNhYworICBmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisgIGdsX2N2X2Z1bmNfdmZwcmludGZfcG9zaXg9bm8KKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX3NpemVzX2M5OSIgaW4KKyAgICAqeWVzKQorICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2xvbmdfZG91YmxlIiBpbgorICAgICAgICAqeWVzKQorICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZSIgaW4KKyAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZV9sb25nX2RvdWJsZSIgaW4KKyAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9hIiBpbgorICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfZiIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbiIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9scyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfcG9zaXRpb25zIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfZ3JvdXBpbmciIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2xlZnRhZGp1c3QiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfemVybyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9wcmVjaXNpb24iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9lbm9tZW0iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB2ZnByaW50ZiBleGlzdHMgYW5kIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbHJlYWR5IFBPU0lYIGNvbXBsaWFudC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ZmcHJpbnRmX3Bvc2l4PXllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICBlc2FjCisgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfdmZwcmludGZfcG9zaXggPSBubzsgdGhlbgorCisKKworICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGUiIGluCisgICAgKnllcykKKyAgICAgIDs7CisgICAgKikKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfSU5GSU5JVEVfRE9VQkxFIDEiID4+Y29uZmRlZnMuaAorCisgICAgICA7OworICBlc2FjCisKKworCisKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2xvbmdfZG91YmxlIiBpbgorICAgICp5ZXMpCisgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGVfbG9uZ19kb3VibGUiIGluCisgICAgICAgICp5ZXMpCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfSU5GSU5JVEVfTE9OR19ET1VCTEUgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgZXNhYworCisKKworICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2EiIGluCisgICAgKnllcykKKyAgICAgIDs7CisgICAgKikKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfRElSRUNUSVZFX0EgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIGZvciBhY19mdW5jIGluIG5sX2xhbmdpbmZvCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIm5sX2xhbmdpbmZvIiAiYWNfY3ZfZnVuY19ubF9sYW5naW5mbyIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19ubF9sYW5naW5mbyIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX05MX0xBTkdJTkZPIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisgICAgICA7OworICBlc2FjCisKKworCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfZiIgaW4KKyAgICAqeWVzKQorICAgICAgOzsKKyAgICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9ESVJFQ1RJVkVfRiAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgOzsKKyAgZXNhYworCisKKworICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2xzIiBpbgorICAgICp5ZXMpCisgICAgICA7OworICAgICopCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0RJUkVDVElWRV9MUyAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgOzsKKyAgZXNhYworCisKKworICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19ncm91cGluZyIgaW4KKyAgICAqeWVzKQorICAgICAgOzsKKyAgICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9GTEFHX0dST1VQSU5HIDEiID4+Y29uZmRlZnMuaAorCisgICAgICA7OworICBlc2FjCisKKworCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2xlZnRhZGp1c3QiIGluCisgICAgKnllcykKKyAgICAgIDs7CisgICAgKikKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfRkxBR19MRUZUQURKVVNUIDEiID4+Y29uZmRlZnMuaAorCisgICAgICA7OworICBlc2FjCisKKworCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX3plcm8iIGluCisgICAgKnllcykKKyAgICAgIDs7CisgICAgKikKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfRkxBR19aRVJPIDEiID4+Y29uZmRlZnMuaAorCisgICAgICA7OworICBlc2FjCisKKworCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9wcmVjaXNpb24iIGluCisgICAgKnllcykKKyAgICAgIDs7CisgICAgKikKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfVU5CT1VOREVEX1BSRUNJU0lPTiAxIiA+PmNvbmZkZWZzLmgKKworCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9ET1VCTEUgMSIgPj5jb25mZGVmcy5oCisKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfTE9OR19ET1VCTEUgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2Vub21lbSIgaW4KKyAgICAqeWVzKQorICAgICAgOzsKKyAgICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9FTk9NRU0gMSIgPj5jb25mZGVmcy5oCisKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfRE9VQkxFIDEiID4+Y29uZmRlZnMuaAorCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0xPTkdfRE9VQkxFIDEiID4+Y29uZmRlZnMuaAorCisgICAgICA7OworICBlc2FjCisKKworCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyB2YXNucHJpbnRmLiRhY19vYmpleHQiCisKKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHByaW50Zi1hcmdzLiRhY19vYmpleHQiCisKKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHByaW50Zi1wYXJzZS4kYWNfb2JqZXh0IgorCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBhc25wcmludGYuJGFjX29iamV4dCIKKworICBpZiB0ZXN0ICRhY19jdl9mdW5jX3Zhc25wcmludGYgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgUkVQTEFDRV9WQVNOUFJJTlRGIDEiID4+Y29uZmRlZnMuaAorCisgIGZpCisKKworCisKKworCisKKworCisKKworICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJwdHJkaWZmX3QiICJhY19jdl90eXBlX3B0cmRpZmZfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX3B0cmRpZmZfdCIgPSB4eWVzOyB0aGVuIDoKKworZWxzZQorCiskYXNfZWNobyAiI2RlZmluZSBwdHJkaWZmX3QgbG9uZyIgPj5jb25mZGVmcy5oCisKKworZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHZmcHJpbnRmLiRhY19vYmpleHQiCisKKyAgUkVQTEFDRV9WRlBSSU5URj0xCisKKyRhc19lY2hvICIjZGVmaW5lIFJFUExBQ0VfVkZQUklOVEZfUE9TSVggMSIgPj5jb25mZGVmcy5oCisKKyAgOgorCisgIGZpCisKKworICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpZmRlZiBfTVNDX1ZFUgorTWljcm9zb2Z0Q29tcGlsZXIKKyNlbmRpZgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJNaWNyb3NvZnRDb21waWxlciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZ2xfYXNtZXh0PSdhc20nCisgICAgIGdsX2NfYXNtX29wdD0nLWMgLUZhJworCitlbHNlCisgIGdsX2FzbWV4dD0ncycKKyAgICAgZ2xfY19hc21fb3B0PSctUycKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBDIHN5bWJvbHMgYXJlIHByZWZpeGVkIHdpdGggdW5kZXJzY29yZSBhdCB0aGUgbGlua2VyIGxldmVsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgQyBzeW1ib2xzIGFyZSBwcmVmaXhlZCB3aXRoIHVuZGVyc2NvcmUgYXQgdGhlIGxpbmtlciBsZXZlbC4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9wcm9nX2FzX3VuZGVyc2NvcmUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC5jIDw8RU9GCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgaW50IGZvbyAodm9pZCk7CisjZW5kaWYKK2ludCBmb28odm9pZCkgeyByZXR1cm4gMDsgfQorRU9GCisgICAgICMgTG9vayBmb3IgdGhlIGFzc2VtYmx5IGxhbmd1YWdlIG5hbWUgaW4gdGhlIC5zIGZpbGUuCisgICAgIHsgYWNfdHJ5PScke0NDLWNjfSAkQ0ZMQUdTICRDUFBGTEFHUyAkZ2xfY19hc21fb3B0IGNvbmZ0ZXN0LmMnCisgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY190cnlcIiI7IH0gPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9ID4vZGV2L251bGwgMj4mMQorICAgICBpZiBncmVwIF9mb28gY29uZnRlc3QuJGdsX2FzbWV4dCA+L2Rldi9udWxsIDsgdGhlbgorICAgICAgIGdsX2N2X3Byb2dfYXNfdW5kZXJzY29yZT15ZXMKKyAgICAgZWxzZQorICAgICAgIGdsX2N2X3Byb2dfYXNfdW5kZXJzY29yZT1ubworICAgICBmaQorICAgICBybSAtZiBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfcHJvZ19hc191bmRlcnNjb3JlIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfcHJvZ19hc191bmRlcnNjb3JlIiA+JjY7IH0KKyAgaWYgdGVzdCAkZ2xfY3ZfcHJvZ19hc191bmRlcnNjb3JlID0geWVzOyB0aGVuCisgICAgVVNFUl9MQUJFTF9QUkVGSVg9XworICBlbHNlCisgICAgVVNFUl9MQUJFTF9QUkVGSVg9CisgIGZpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgVVNFUl9MQUJFTF9QUkVGSVggJFVTRVJfTEFCRUxfUFJFRklYCitfQUNFT0YKKworICBBU01fU1lNQk9MX1BSRUZJWD0nIicke1VTRVJfTEFCRUxfUFJFRklYfSciJworCisKKworICBHTlVMSUJfUFRIUkVBRF9TSUdNQVNLPTA7CisgIEdOVUxJQl9SQUlTRT0wOworICBHTlVMSUJfU0lHTkFMX0hfU0lHUElQRT0wOworICBHTlVMSUJfU0lHUFJPQ01BU0s9MDsKKyAgR05VTElCX1NJR0FDVElPTj0wOworICAgIEhBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkc9MTsKKyAgSEFWRV9QVEhSRUFEX1NJR01BU0s9MTsKKyAgSEFWRV9SQUlTRT0xOworICBIQVZFX1NJR1NFVF9UPTE7CisgIEhBVkVfU0lHSU5GT19UPTE7CisgIEhBVkVfU0lHQUNUSU9OPTE7CisgIEhBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT049MTsKKworICBIQVZFX1RZUEVfVk9MQVRJTEVfU0lHX0FUT01JQ19UPTE7CisKKyAgSEFWRV9TSUdIQU5ETEVSX1Q9MTsKKyAgUkVQTEFDRV9QVEhSRUFEX1NJR01BU0s9MDsKKyAgUkVQTEFDRV9SQUlTRT0wOworCisKKyAgYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAic2lnc2V0X3QiICJhY19jdl90eXBlX3NpZ3NldF90IiAiCisgICAgICAjaW5jbHVkZSA8c2lnbmFsLmg+CisgICAgICAvKiBNaW5ndyBkZWZpbmVzIHNpZ3NldF90IG5vdCBpbiA8c2lnbmFsLmg+LCBidXQgaW4gPHN5cy90eXBlcy5oPi4gICovCisgICAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9zaWdzZXRfdCIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NJR1NFVF9UIDEKK19BQ0VPRgorCitnbF9jdl90eXBlX3NpZ3NldF90PXllcworZWxzZQorICBnbF9jdl90eXBlX3NpZ3NldF90PW5vCitmaQorCisgIGlmIHRlc3QgJGdsX2N2X3R5cGVfc2lnc2V0X3QgIT0geWVzOyB0aGVuCisgICAgSEFWRV9TSUdTRVRfVD0wCisgIGZpCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQy9DKysgcmVzdHJpY3Qga2V5d29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQy9DKysgcmVzdHJpY3Qga2V5d29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jX3Jlc3RyaWN0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfY19yZXN0cmljdD1ubworICAgIyBUaGUgb3JkZXIgaGVyZSBjYXRlcnMgdG8gdGhlIGZhY3QgdGhhdCBDKysgZG9lcyBub3QgcmVxdWlyZSByZXN0cmljdC4KKyAgIGZvciBhY19rdyBpbiBfX3Jlc3RyaWN0IF9fcmVzdHJpY3RfXyBfUmVzdHJpY3QgcmVzdHJpY3Q7IGRvCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK3R5cGVkZWYgaW50ICogaW50X3B0cjsKKwlpbnQgZm9vIChpbnRfcHRyICRhY19rdyBpcCkgeworCXJldHVybiBpcFswXTsKKyAgICAgICB9CitpbnQKK21haW4gKCkKK3sKK2ludCBzWzFdOworCWludCAqICRhY19rdyB0ID0gczsKKwl0WzBdID0gMDsKKwlyZXR1cm4gZm9vKHQpCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfY19yZXN0cmljdD0kYWNfa3cKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgdGVzdCAiJGFjX2N2X2NfcmVzdHJpY3QiICE9IG5vICYmIGJyZWFrCisgICBkb25lCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfcmVzdHJpY3QiID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX3Jlc3RyaWN0IiA+JjY7IH0KKworIGNhc2UgJGFjX2N2X2NfcmVzdHJpY3QgaW4KKyAgIHJlc3RyaWN0KSA7OworICAgbm8pICRhc19lY2hvICIjZGVmaW5lIHJlc3RyaWN0IC8qKi8iID4+Y29uZmRlZnMuaAorIDs7CisgICAqKSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSByZXN0cmljdCAkYWNfY3ZfY19yZXN0cmljdAorX0FDRU9GCisgOzsKKyBlc2FjCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHVpZF90IGluIHN5cy90eXBlcy5oIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB1aWRfdCBpbiBzeXMvdHlwZXMuaC4uLiAiID4mNjsgfQoraWYgJHthY19jdl90eXBlX3VpZF90Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJ1aWRfdCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgYWNfY3ZfdHlwZV91aWRfdD15ZXMKK2Vsc2UKKyAgYWNfY3ZfdHlwZV91aWRfdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl90eXBlX3VpZF90IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfdHlwZV91aWRfdCIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl90eXBlX3VpZF90ID0gbm87IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgdWlkX3QgaW50IiA+PmNvbmZkZWZzLmgKKworCiskYXNfZWNobyAiI2RlZmluZSBnaWRfdCBpbnQiID4+Y29uZmRlZnMuaAorCitmaQorCisKKworCisKK2FjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgInNucHJpbnRmIiAiYWNfY3ZfaGF2ZV9kZWNsX3NucHJpbnRmIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9zbnByaW50ZiIgPSB4eWVzOyB0aGVuIDoKKyAgYWNfaGF2ZV9kZWNsPTEKK2Vsc2UKKyAgYWNfaGF2ZV9kZWNsPTAKK2ZpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ERUNMX1NOUFJJTlRGICRhY19oYXZlX2RlY2wKK19BQ0VPRgorCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3RkYm9vbC5oIHRoYXQgY29uZm9ybXMgdG8gQzk5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdGRib29sLmggdGhhdCBjb25mb3JtcyB0byBDOTkuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgICAgICAgICNpbmNsdWRlIDxzdGRib29sLmg+CisgICAgICAgICAgICAgI2lmbmRlZiBib29sCisgICAgICAgICAgICAgICJlcnJvcjogYm9vbCBpcyBub3QgZGVmaW5lZCIKKyAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAjaWZuZGVmIGZhbHNlCisgICAgICAgICAgICAgICJlcnJvcjogZmFsc2UgaXMgbm90IGRlZmluZWQiCisgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgI2lmIGZhbHNlCisgICAgICAgICAgICAgICJlcnJvcjogZmFsc2UgaXMgbm90IDAiCisgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgI2lmbmRlZiB0cnVlCisgICAgICAgICAgICAgICJlcnJvcjogdHJ1ZSBpcyBub3QgZGVmaW5lZCIKKyAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAjaWYgdHJ1ZSAhPSAxCisgICAgICAgICAgICAgICJlcnJvcjogdHJ1ZSBpcyBub3QgMSIKKyAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAjaWZuZGVmIF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkCisgICAgICAgICAgICAgICJlcnJvcjogX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQgaXMgbm90IGRlZmluZWQiCisgICAgICAgICAgICAgI2VuZGlmCisKKyAgICAgICAgICAgICBzdHJ1Y3QgcyB7IF9Cb29sIHM6IDE7IF9Cb29sIHQ7IH0gczsKKworICAgICAgICAgICAgIGNoYXIgYVt0cnVlID09IDEgPyAxIDogLTFdOworICAgICAgICAgICAgIGNoYXIgYltmYWxzZSA9PSAwID8gMSA6IC0xXTsKKyAgICAgICAgICAgICBjaGFyIGNbX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQgPT0gMSA/IDEgOiAtMV07CisgICAgICAgICAgICAgY2hhciBkWyhib29sKSAwLjUgPT0gdHJ1ZSA/IDEgOiAtMV07CisgICAgICAgICAgICAgLyogU2VlIGJvZHkgb2YgbWFpbiBwcm9ncmFtIGZvciAnZScuICAqLworICAgICAgICAgICAgIGNoYXIgZlsoX0Jvb2wpIDAuMCA9PSBmYWxzZSA/IDEgOiAtMV07CisgICAgICAgICAgICAgY2hhciBnW3RydWVdOworICAgICAgICAgICAgIGNoYXIgaFtzaXplb2YgKF9Cb29sKV07CisgICAgICAgICAgICAgY2hhciBpW3NpemVvZiBzLnRdOworICAgICAgICAgICAgIGVudW0geyBqID0gZmFsc2UsIGsgPSB0cnVlLCBsID0gZmFsc2UgKiB0cnVlLCBtID0gdHJ1ZSAqIDI1NiB9OworICAgICAgICAgICAgIC8qIFRoZSBmb2xsb3dpbmcgZmFpbHMgZm9yCisgICAgICAgICAgICAgICAgSFAgYUMrKy9BTlNJIEMgQjM5MTBCIEEuMDUuNTUgW0RlYyAwNCAyMDAzXS4gKi8KKyAgICAgICAgICAgICBfQm9vbCBuW21dOworICAgICAgICAgICAgIGNoYXIgb1tzaXplb2YgbiA9PSBtICogc2l6ZW9mIG5bMF0gPyAxIDogLTFdOworICAgICAgICAgICAgIGNoYXIgcFstMSAtIChfQm9vbCkgMCA8IDAgJiYgLTEgLSAoYm9vbCkgMCA8IDAgPyAxIDogLTFdOworICAgICAgICAgICAgIC8qIENhdGNoIGEgYnVnIGluIGFuIEhQLVVYIEMgY29tcGlsZXIuICBTZWUKKyAgICAgICAgICAgICAgICBodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAwMy0xMi9tc2cwMjMwMy5odG1sCisgICAgICAgICAgICAgICAgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1jb3JldXRpbHMvMjAwNS0xMS9tc2cwMDE2MS5odG1sCisgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgX0Jvb2wgcSA9IHRydWU7CisgICAgICAgICAgICAgX0Jvb2wgKnBxID0gJnE7CisKK2ludAorbWFpbiAoKQoreworCisgICAgICAgICAgICAgYm9vbCBlID0gJnM7CisgICAgICAgICAgICAgKnBxIHw9IHE7CisgICAgICAgICAgICAgKnBxIHw9ICEgcTsKKyAgICAgICAgICAgICAvKiBSZWZlciB0byBldmVyeSBkZWNsYXJlZCB2YWx1ZSwgdG8gYXZvaWQgY29tcGlsZXIgb3B0aW1pemF0aW9ucy4gICovCisgICAgICAgICAgICAgcmV0dXJuICghYSArICFiICsgIWMgKyAhZCArICFlICsgIWYgKyAhZyArICFoICsgIWkgKyAhIWogKyAhayArICEhbAorICAgICAgICAgICAgICAgICAgICAgKyAhbSArICFuICsgIW8gKyAhcCArICFxICsgIXBxKTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2hlYWRlcl9zdGRib29sX2g9eWVzCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRib29sX2g9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRib29sX2giID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfc3RkYm9vbF9oIiA+JjY7IH0KKyAgIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgIl9Cb29sIiAiYWNfY3ZfdHlwZV9fQm9vbCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX19Cb29sIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfX0JPT0wgMQorX0FDRU9GCisKKworZmkKKworCisKKyAgICBSRVBMQUNFX05VTEw9MDsKKyAgSEFWRV9XQ0hBUl9UPTE7CisKKworCithY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJzdHJkdXAiICJhY19jdl9oYXZlX2RlY2xfc3RyZHVwIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9zdHJkdXAiID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCitlbHNlCisgIGFjX2hhdmVfZGVjbD0wCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9TVFJEVVAgJGFjX2hhdmVfZGVjbAorX0FDRU9GCisKKworCisKKworCisKKworCisKKworCisKKworICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllczsgdGhlbgorICAgICAgIGdsX2N2X25leHRfc3RyaW5nX2g9Jzwnc3RyaW5nLmgnPicKKyAgICAgZWxzZQorICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8c3RyaW5nLmg+IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHN0cmluZy5oPi4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9uZXh0X3N0cmluZ19oKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorCitfQUNFT0YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICBhaXgqKSBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCAtQyIgOzsKKyAgICAgICAgICAgICAgICAgKikgICAgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAiIDs7CisgICAgICAgICAgICAgICBlc2FjCisKKyAgICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICBtaW5ndyopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZGlyc2VwX3JlZ2V4PSdbL1xcXScKKyAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgIGdsX2RpcnNlcF9yZWdleD0nXC8nCisgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX21ha2VfbGl0ZXJhbF9yZWdleF9zZWQ9J3MsW10kXlxcLiovW10sXFwmLGcnCisKKyAgICAgICAgICAgICAgIGdsX2hlYWRlcl9saXRlcmFsX3JlZ2V4PWBlY2hvICdzdHJpbmcuaCcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICIkZ2xfbWFrZV9saXRlcmFsX3JlZ2V4X3NlZCJgCisgICAgICAgICAgICAgICBnbF9hYnNvbHV0ZV9oZWFkZXJfc2VkPSIvJHtnbF9kaXJzZXBfcmVnZXh9JHtnbF9oZWFkZXJfbGl0ZXJhbF9yZWdleH0vIid7CisgICAgICAgICAgICAgICAgICAgcy8uKiJcKC4qJyIke2dsX2RpcnNlcF9yZWdleH0ke2dsX2hlYWRlcl9saXRlcmFsX3JlZ2V4fSInXCkiLiovXDEvCisgICAgICAgICAgICAgICAgICAgc3xeL1teL118Ly8mfAorICAgICAgICAgICAgICAgICAgIHAKKyAgICAgICAgICAgICAgICAgICBxCisgICAgICAgICAgICAgICAgIH0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9uZXh0X3N0cmluZ19oPSciJ2AoZXZhbCAiJGdsX2Fic25hbWVfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgICAgICAgICAgICAgICAgICAgICBzZWQgLW4gIiRnbF9hYnNvbHV0ZV9oZWFkZXJfc2VkImAnIicKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9uZXh0X3N0cmluZ19oIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfbmV4dF9zdHJpbmdfaCIgPiY2OyB9CisgICAgIGZpCisgICAgIE5FWFRfU1RSSU5HX0g9JGdsX2N2X25leHRfc3RyaW5nX2gKKworICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllcyB8fCB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IGJ1Z2d5OyB0aGVuCisgICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNsdWRlX25leHQnCisgICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9Jzwnc3RyaW5nLmgnPicKKyAgICAgZWxzZQorICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZScKKyAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0kZ2xfY3ZfbmV4dF9zdHJpbmdfaAorICAgICBmaQorICAgICBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVFJJTkdfSD0kZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmUKKworCisKKworCisKKyAgICBmb3IgZ2xfZnVuYyBpbiBmZnNsIGZmc2xsIG1lbW1lbSBtZW1wY3B5IG1lbXJjaHIgcmF3bWVtY2hyIHN0cGNweSBzdHBuY3B5IHN0cmNocm51bCAgICAgIHN0cmR1cCBzdHJuY2F0IHN0cm5kdXAgc3RybmxlbiBzdHJwYnJrIHN0cnNlcCBzdHJjYXNlc3RyIHN0cnRva19yICAgICAgc3RyZXJyb3JfciBzdHJzaWduYWwgc3RydmVyc2NtcDsgZG8KKyAgICBhc19nbF9TeW1ib2w9YCRhc19lY2hvICJnbF9jdl9oYXZlX3Jhd19kZWNsXyRnbF9mdW5jIiB8ICRhc190cl9zaGAKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyRhc19nbF9TeW1ib2wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2ludAorbWFpbiAoKQoreworI3VuZGVmICRnbF9mdW5jCisgICh2b2lkKSAkZ2xfZnVuYzsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkYXNfZ2xfU3ltYm9sPXllcyIKK2Vsc2UKKyAgZXZhbCAiJGFzX2dsX1N5bWJvbD1ubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCRhc19nbF9TeW1ib2wKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICAgIGlmIGV2YWwgdGVzdCBcInhcJCIkYXNfZ2xfU3ltYm9sIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfUkFXX0RFQ0xfJGdsX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKKyAgICAgICAgICAgICAgICAgICAgIGV2YWwgYWNfY3ZfaGF2ZV9kZWNsXyRnbF9mdW5jPXllcworZmkKKyAgICAgIGRvbmUKKworCithY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJzdHJuZHVwIiAiYWNfY3ZfaGF2ZV9kZWNsX3N0cm5kdXAiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX3N0cm5kdXAiID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCitlbHNlCisgIGFjX2hhdmVfZGVjbD0wCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9TVFJORFVQICRhY19oYXZlX2RlY2wKK19BQ0VPRgorCisKKworYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAic3RybmxlbiIgImFjX2N2X2hhdmVfZGVjbF9zdHJubGVuIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9zdHJubGVuIiA9IHh5ZXM7IHRoZW4gOgorICBhY19oYXZlX2RlY2w9MQorZWxzZQorICBhY19oYXZlX2RlY2w9MAorZmkKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfU1RSTkxFTiAkYWNfaGF2ZV9kZWNsCitfQUNFT0YKKworCisKKworCisKKworCisKKworICBHTlVMSUJfV0FJVFBJRD0wOworCisKKworCisgIEdOVUxJQl9NS1RJTUU9MDsKKyAgR05VTElCX05BTk9TTEVFUD0wOworICBHTlVMSUJfU1RSUFRJTUU9MDsKKyAgR05VTElCX1RJTUVHTT0wOworICBHTlVMSUJfVElNRV9SPTA7CisgICAgSEFWRV9ERUNMX0xPQ0FMVElNRV9SPTE7CisgIEhBVkVfTkFOT1NMRUVQPTE7CisgIEhBVkVfU1RSUFRJTUU9MTsKKyAgSEFWRV9USU1FR009MTsKKyAgICAgICAgUkVQTEFDRV9MT0NBTFRJTUVfUj1HTlVMSUJfUE9SVENIRUNLOworICBSRVBMQUNFX01LVElNRT1HTlVMSUJfUE9SVENIRUNLOworICBSRVBMQUNFX05BTk9TTEVFUD1HTlVMSUJfUE9SVENIRUNLOworICBSRVBMQUNFX1RJTUVHTT1HTlVMSUJfUE9SVENIRUNLOworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3RydWN0IHRpbWVzcGVjIGluIDx0aW1lLmg+IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdHJ1Y3QgdGltZXNwZWMgaW4gPHRpbWUuaD4uLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3Zfc3lzX3N0cnVjdF90aW1lc3BlY19pbl90aW1lX2grOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8dGltZS5oPgorCitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBzdHJ1Y3QgdGltZXNwZWMgeDsgeC50dl9zZWMgPSB4LnR2X25zZWM7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3Zfc3lzX3N0cnVjdF90aW1lc3BlY19pbl90aW1lX2g9eWVzCitlbHNlCisgIGdsX2N2X3N5c19zdHJ1Y3RfdGltZXNwZWNfaW5fdGltZV9oPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9zeXNfc3RydWN0X3RpbWVzcGVjX2luX3RpbWVfaCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X3N5c19zdHJ1Y3RfdGltZXNwZWNfaW5fdGltZV9oIiA+JjY7IH0KKworICBUSU1FX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUM9MAorICBTWVNfVElNRV9IX0RFRklORVNfU1RSVUNUX1RJTUVTUEVDPTAKKyAgUFRIUkVBRF9IX0RFRklORVNfU1RSVUNUX1RJTUVTUEVDPTAKKyAgaWYgdGVzdCAkZ2xfY3Zfc3lzX3N0cnVjdF90aW1lc3BlY19pbl90aW1lX2ggPSB5ZXM7IHRoZW4KKyAgICBUSU1FX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUM9MQorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3RydWN0IHRpbWVzcGVjIGluIDxzeXMvdGltZS5oPiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3RydWN0IHRpbWVzcGVjIGluIDxzeXMvdGltZS5oPi4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9zeXNfc3RydWN0X3RpbWVzcGVjX2luX3N5c190aW1lX2grOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworaW50CittYWluICgpCit7CitzdGF0aWMgc3RydWN0IHRpbWVzcGVjIHg7IHgudHZfc2VjID0geC50dl9uc2VjOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X3N5c19zdHJ1Y3RfdGltZXNwZWNfaW5fc3lzX3RpbWVfaD15ZXMKK2Vsc2UKKyAgZ2xfY3Zfc3lzX3N0cnVjdF90aW1lc3BlY19pbl9zeXNfdGltZV9oPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9zeXNfc3RydWN0X3RpbWVzcGVjX2luX3N5c190aW1lX2giID4mNQorJGFzX2VjaG8gIiRnbF9jdl9zeXNfc3RydWN0X3RpbWVzcGVjX2luX3N5c190aW1lX2giID4mNjsgfQorICAgIGlmIHRlc3QgJGdsX2N2X3N5c19zdHJ1Y3RfdGltZXNwZWNfaW5fc3lzX3RpbWVfaCA9IHllczsgdGhlbgorICAgICAgU1lTX1RJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQz0xCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3RydWN0IHRpbWVzcGVjIGluIDxwdGhyZWFkLmg+IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdHJ1Y3QgdGltZXNwZWMgaW4gPHB0aHJlYWQuaD4uLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3Zfc3lzX3N0cnVjdF90aW1lc3BlY19pbl9wdGhyZWFkX2grOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8cHRocmVhZC5oPgorCitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBzdHJ1Y3QgdGltZXNwZWMgeDsgeC50dl9zZWMgPSB4LnR2X25zZWM7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3Zfc3lzX3N0cnVjdF90aW1lc3BlY19pbl9wdGhyZWFkX2g9eWVzCitlbHNlCisgIGdsX2N2X3N5c19zdHJ1Y3RfdGltZXNwZWNfaW5fcHRocmVhZF9oPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9zeXNfc3RydWN0X3RpbWVzcGVjX2luX3B0aHJlYWRfaCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X3N5c19zdHJ1Y3RfdGltZXNwZWNfaW5fcHRocmVhZF9oIiA+JjY7IH0KKyAgICAgIGlmIHRlc3QgJGdsX2N2X3N5c19zdHJ1Y3RfdGltZXNwZWNfaW5fcHRocmVhZF9oID0geWVzOyB0aGVuCisgICAgICAgIFBUSFJFQURfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQz0xCisgICAgICBmaQorICAgIGZpCisgIGZpCisKKworCisKKworCisKKworCisKKworCisKKworCisgICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzOyB0aGVuCisgICAgICAgZ2xfY3ZfbmV4dF90aW1lX2g9JzwndGltZS5oJz4nCisgICAgIGVsc2UKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHRpbWUuaD4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8dGltZS5oPi4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9uZXh0X3RpbWVfaCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDx0aW1lLmg+CisKK19BQ0VPRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgIGFpeCopIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIC1DIiA7OworICAgICAgICAgICAgICAgICAqKSAgICBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCIgOzsKKyAgICAgICAgICAgICAgIGVzYWMKKworICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgIG1pbmd3KikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kaXJzZXBfcmVnZXg9J1svXFxdJworICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgZ2xfZGlyc2VwX3JlZ2V4PSdcLycKKyAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfbWFrZV9saXRlcmFsX3JlZ2V4X3NlZD0ncyxbXSReXFwuKi9bXSxcXCYsZycKKworICAgICAgICAgICAgICAgZ2xfaGVhZGVyX2xpdGVyYWxfcmVnZXg9YGVjaG8gJ3RpbWUuaCcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICIkZ2xfbWFrZV9saXRlcmFsX3JlZ2V4X3NlZCJgCisgICAgICAgICAgICAgICBnbF9hYnNvbHV0ZV9oZWFkZXJfc2VkPSIvJHtnbF9kaXJzZXBfcmVnZXh9JHtnbF9oZWFkZXJfbGl0ZXJhbF9yZWdleH0vIid7CisgICAgICAgICAgICAgICAgICAgcy8uKiJcKC4qJyIke2dsX2RpcnNlcF9yZWdleH0ke2dsX2hlYWRlcl9saXRlcmFsX3JlZ2V4fSInXCkiLiovXDEvCisgICAgICAgICAgICAgICAgICAgc3xeL1teL118Ly8mfAorICAgICAgICAgICAgICAgICAgIHAKKyAgICAgICAgICAgICAgICAgICBxCisgICAgICAgICAgICAgICAgIH0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9uZXh0X3RpbWVfaD0nIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICAgICAgICAgICAgICAgICAgICAgc2VkIC1uICIkZ2xfYWJzb2x1dGVfaGVhZGVyX3NlZCJgJyInCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfbmV4dF90aW1lX2giID4mNQorJGFzX2VjaG8gIiRnbF9jdl9uZXh0X3RpbWVfaCIgPiY2OyB9CisgICAgIGZpCisgICAgIE5FWFRfVElNRV9IPSRnbF9jdl9uZXh0X3RpbWVfaAorCisgICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzIHx8IHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0gYnVnZ3k7IHRoZW4KKyAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGVfbmV4dCcKKyAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0nPCd0aW1lLmgnPicKKyAgICAgZWxzZQorICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZScKKyAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0kZ2xfY3ZfbmV4dF90aW1lX2gKKyAgICAgZmkKKyAgICAgTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfVElNRV9IPSRnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZQorCisKKworCisKKworCisKKworCisKKworCisKK2dsX2xpYnVuaXN0cmluZ19zZWRfZXh0cmFjdF9tYWpvcj0nL15bMC05XS97cy9eXChbMC05XSpcKS4qL1wxL3A7cTt9CitpXAorMAorcQorJworZ2xfbGlidW5pc3RyaW5nX3NlZF9leHRyYWN0X21pbm9yPScvXlswLTldWzAtOV0qWy5dWzAtOV0ve3MvXlswLTldKlsuXVwoWzAtOV0qXCkuKi9cMS9wO3E7fQoraVwKKzAKK3EKKycKK2dsX2xpYnVuaXN0cmluZ19zZWRfZXh0cmFjdF9zdWJtaW5vcj0nL15bMC05XVswLTldKlsuXVswLTldWzAtOV0qWy5dWzAtOV0ve3MvXlswLTldKlsuXVswLTldKlsuXVwoWzAtOV0qXCkuKi9cMS9wO3E7fQoraVwKKzAKK3EKKycKKworCisgIGlmIHRlc3QgIiRIQVZFX0xJQlVOSVNUUklORyIgPSB5ZXM7IHRoZW4KKyAgICBMSUJVTklTVFJJTkdfVkVSU0lPTl9NQUpPUj1gZWNobyAiJExJQlVOSVNUUklOR19WRVJTSU9OIiB8IHNlZCAtbiAtZSAiJGdsX2xpYnVuaXN0cmluZ19zZWRfZXh0cmFjdF9tYWpvciJgCisgICAgTElCVU5JU1RSSU5HX1ZFUlNJT05fTUlOT1I9YGVjaG8gIiRMSUJVTklTVFJJTkdfVkVSU0lPTiIgfCBzZWQgLW4gLWUgIiRnbF9saWJ1bmlzdHJpbmdfc2VkX2V4dHJhY3RfbWlub3IiYAorICAgIExJQlVOSVNUUklOR19WRVJTSU9OX1NVQk1JTk9SPWBlY2hvICIkTElCVU5JU1RSSU5HX1ZFUlNJT04iIHwgc2VkIC1uIC1lICIkZ2xfbGlidW5pc3RyaW5nX3NlZF9leHRyYWN0X3N1Ym1pbm9yImAKKyAgZmkKKworYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiY2xlYXJlcnJfdW5sb2NrZWQiICJhY19jdl9oYXZlX2RlY2xfY2xlYXJlcnJfdW5sb2NrZWQiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2NsZWFyZXJyX3VubG9ja2VkIiA9IHh5ZXM7IHRoZW4gOgorICBhY19oYXZlX2RlY2w9MQorZWxzZQorICBhY19oYXZlX2RlY2w9MAorZmkKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfQ0xFQVJFUlJfVU5MT0NLRUQgJGFjX2hhdmVfZGVjbAorX0FDRU9GCisKK2FjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgImZlb2ZfdW5sb2NrZWQiICJhY19jdl9oYXZlX2RlY2xfZmVvZl91bmxvY2tlZCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfZmVvZl91bmxvY2tlZCIgPSB4eWVzOyB0aGVuIDoKKyAgYWNfaGF2ZV9kZWNsPTEKK2Vsc2UKKyAgYWNfaGF2ZV9kZWNsPTAKK2ZpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ERUNMX0ZFT0ZfVU5MT0NLRUQgJGFjX2hhdmVfZGVjbAorX0FDRU9GCisKK2FjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgImZlcnJvcl91bmxvY2tlZCIgImFjX2N2X2hhdmVfZGVjbF9mZXJyb3JfdW5sb2NrZWQiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2ZlcnJvcl91bmxvY2tlZCIgPSB4eWVzOyB0aGVuIDoKKyAgYWNfaGF2ZV9kZWNsPTEKK2Vsc2UKKyAgYWNfaGF2ZV9kZWNsPTAKK2ZpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ERUNMX0ZFUlJPUl9VTkxPQ0tFRCAkYWNfaGF2ZV9kZWNsCitfQUNFT0YKKworYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiZmZsdXNoX3VubG9ja2VkIiAiYWNfY3ZfaGF2ZV9kZWNsX2ZmbHVzaF91bmxvY2tlZCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfZmZsdXNoX3VubG9ja2VkIiA9IHh5ZXM7IHRoZW4gOgorICBhY19oYXZlX2RlY2w9MQorZWxzZQorICBhY19oYXZlX2RlY2w9MAorZmkKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfRkZMVVNIX1VOTE9DS0VEICRhY19oYXZlX2RlY2wKK19BQ0VPRgorCithY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJmZ2V0c191bmxvY2tlZCIgImFjX2N2X2hhdmVfZGVjbF9mZ2V0c191bmxvY2tlZCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfZmdldHNfdW5sb2NrZWQiID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCitlbHNlCisgIGFjX2hhdmVfZGVjbD0wCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9GR0VUU19VTkxPQ0tFRCAkYWNfaGF2ZV9kZWNsCitfQUNFT0YKKworYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiZnB1dGNfdW5sb2NrZWQiICJhY19jdl9oYXZlX2RlY2xfZnB1dGNfdW5sb2NrZWQiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2ZwdXRjX3VubG9ja2VkIiA9IHh5ZXM7IHRoZW4gOgorICBhY19oYXZlX2RlY2w9MQorZWxzZQorICBhY19oYXZlX2RlY2w9MAorZmkKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfRlBVVENfVU5MT0NLRUQgJGFjX2hhdmVfZGVjbAorX0FDRU9GCisKK2FjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgImZwdXRzX3VubG9ja2VkIiAiYWNfY3ZfaGF2ZV9kZWNsX2ZwdXRzX3VubG9ja2VkIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9mcHV0c191bmxvY2tlZCIgPSB4eWVzOyB0aGVuIDoKKyAgYWNfaGF2ZV9kZWNsPTEKK2Vsc2UKKyAgYWNfaGF2ZV9kZWNsPTAKK2ZpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ERUNMX0ZQVVRTX1VOTE9DS0VEICRhY19oYXZlX2RlY2wKK19BQ0VPRgorCithY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJmcmVhZF91bmxvY2tlZCIgImFjX2N2X2hhdmVfZGVjbF9mcmVhZF91bmxvY2tlZCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfZnJlYWRfdW5sb2NrZWQiID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCitlbHNlCisgIGFjX2hhdmVfZGVjbD0wCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9GUkVBRF9VTkxPQ0tFRCAkYWNfaGF2ZV9kZWNsCitfQUNFT0YKKworYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiZndyaXRlX3VubG9ja2VkIiAiYWNfY3ZfaGF2ZV9kZWNsX2Z3cml0ZV91bmxvY2tlZCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfZndyaXRlX3VubG9ja2VkIiA9IHh5ZXM7IHRoZW4gOgorICBhY19oYXZlX2RlY2w9MQorZWxzZQorICBhY19oYXZlX2RlY2w9MAorZmkKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfRldSSVRFX1VOTE9DS0VEICRhY19oYXZlX2RlY2wKK19BQ0VPRgorCithY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJnZXRjaGFyX3VubG9ja2VkIiAiYWNfY3ZfaGF2ZV9kZWNsX2dldGNoYXJfdW5sb2NrZWQiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2dldGNoYXJfdW5sb2NrZWQiID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCitlbHNlCisgIGFjX2hhdmVfZGVjbD0wCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9HRVRDSEFSX1VOTE9DS0VEICRhY19oYXZlX2RlY2wKK19BQ0VPRgorCithY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJwdXRjX3VubG9ja2VkIiAiYWNfY3ZfaGF2ZV9kZWNsX3B1dGNfdW5sb2NrZWQiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX3B1dGNfdW5sb2NrZWQiID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCitlbHNlCisgIGFjX2hhdmVfZGVjbD0wCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9QVVRDX1VOTE9DS0VEICRhY19oYXZlX2RlY2wKK19BQ0VPRgorCithY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJwdXRjaGFyX3VubG9ja2VkIiAiYWNfY3ZfaGF2ZV9kZWNsX3B1dGNoYXJfdW5sb2NrZWQiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX3B1dGNoYXJfdW5sb2NrZWQiID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCitlbHNlCisgIGFjX2hhdmVfZGVjbD0wCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9QVVRDSEFSX1VOTE9DS0VEICRhY19oYXZlX2RlY2wKK19BQ0VPRgorCithY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJ1bnNldGVudiIgImFjX2N2X2hhdmVfZGVjbF91bnNldGVudiIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfdW5zZXRlbnYiID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCitlbHNlCisgIGFjX2hhdmVfZGVjbD0wCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9VTlNFVEVOViAkYWNfaGF2ZV9kZWNsCitfQUNFT0YKKworYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAidnNucHJpbnRmIiAiYWNfY3ZfaGF2ZV9kZWNsX3ZzbnByaW50ZiIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfdnNucHJpbnRmIiA9IHh5ZXM7IHRoZW4gOgorICBhY19oYXZlX2RlY2w9MQorZWxzZQorICBhY19oYXZlX2RlY2w9MAorZmkKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfVlNOUFJJTlRGICRhY19oYXZlX2RlY2wKK19BQ0VPRgorCisKKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciA8d2NoYXIuaD4gdXNlcyAnaW5saW5lJyBjb3JyZWN0bHkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciA8d2NoYXIuaD4gdXNlcyAnaW5saW5lJyBjb3JyZWN0bHkuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfaGVhZGVyX3djaGFyX2hfY29ycmVjdF9pbmxpbmUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBnbF9jdl9oZWFkZXJfd2NoYXJfaF9jb3JyZWN0X2lubGluZT15ZXMKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgICAgI2RlZmluZSB3Y3N0b2QgcmVuYW1lZF93Y3N0b2QKKy8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUKKyAgIDx3Y2hhci5oPi4KKyAgIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZQorICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KK2V4dGVybiBpbnQgemVybyAodm9pZCk7CitpbnQgbWFpbiAoKSB7IHJldHVybiB6ZXJvKCk7IH0KKworX0FDRU9GCisgICAgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICAgICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0MS4kYWNfb2JqZXh0CisgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgICAgICAjZGVmaW5lIHdjc3RvZCByZW5hbWVkX3djc3RvZAorLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQorICAgPHdjaGFyLmg+LgorICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgoraW50IHplcm8gKHZvaWQpIHsgcmV0dXJuIDA7IH0KKworX0FDRU9GCisgICAgICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgICAgICAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdDIuJGFjX29iamV4dAorICAgICAgICAgaWYgJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0MS4kYWNfb2JqZXh0IGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ICRMSUJTID4mNSAyPiYxOyB0aGVuCisgICAgICAgICAgIDoKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgZ2xfY3ZfaGVhZGVyX3djaGFyX2hfY29ycmVjdF9pbmxpbmU9bm8KKyAgICAgICAgIGZpCisgICAgICAgZmkKKyAgICAgZmkKKyAgICAgcm0gLWYgY29uZnRlc3QxLiRhY19vYmpleHQgY29uZnRlc3QyLiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2hlYWRlcl93Y2hhcl9oX2NvcnJlY3RfaW5saW5lIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfaGVhZGVyX3djaGFyX2hfY29ycmVjdF9pbmxpbmUiID4mNjsgfQorICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfd2NoYXJfaF9jb3JyZWN0X2lubGluZSA9IG5vOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIjx3Y2hhci5oPiBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoaXMgY29tcGlsZXIgKCRDQyAkQ0ZMQUdTICRDUFBGTEFHUykuCitUaGlzIGlzIGEga25vd24gaW50ZXJvcGVyYWJpbGl0eSBwcm9ibGVtIG9mIGdsaWJjIDw9IDIuNSB3aXRoIGdjYyA+PSA0LjMgaW4KK0M5OSBtb2RlLiBZb3UgaGF2ZSBmb3VyIG9wdGlvbnM6CisgIC0gQWRkIHRoZSBmbGFnIC1mZ251ODktaW5saW5lIHRvIENDIGFuZCByZWNvbmZpZ3VyZSwgb3IKKyAgLSBGaXggeW91ciBpbmNsdWRlIGZpbGVzLCB1c2luZyBwYXJ0cyBvZgorICAgIDxodHRwOi8vc291cmNld2FyZS5vcmcvZ2l0Lz9wPWdsaWJjLmdpdDthPWNvbW1pdGRpZmY7aD1iMDM3YTI5M2E0ODcxOGFmMzBkNzA2YzJlMThjOTI5ZDBlNjlhNjIxPiwgb3IKKyAgLSBVc2UgYSBnY2MgdmVyc2lvbiBvbGRlciB0aGFuIDQuMywgb3IKKyAgLSBEb24ndCB1c2UgdGhlIGZsYWdzIC1zdGQ9Yzk5IG9yIC1zdGQ9Z251OTkuCitDb25maWd1cmF0aW9uIGFib3J0ZWQuIiAiJExJTkVOTyIgNQorICBmaQorCisKKworCisgICBpZiBmYWxzZTsgdGhlbgorICBHTF9DT05EX0xJQlRPT0xfVFJVRT0KKyAgR0xfQ09ORF9MSUJUT09MX0ZBTFNFPScjJworZWxzZQorICBHTF9DT05EX0xJQlRPT0xfVFJVRT0nIycKKyAgR0xfQ09ORF9MSUJUT09MX0ZBTFNFPQorZmkKKworICBnbF9jb25kX2xpYnRvb2w9ZmFsc2UKKyAgZ2xfbGliZGVwcz0KKyAgZ2xfbHRsaWJkZXBzPQorICBnbF9tNF9iYXNlPSdtNCcKKworCisKKworCisKKworCisKKyAgZ2xfc291cmNlX2Jhc2U9J2xpYicKKworCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzID0gbm87IHRoZW4KKyAgICA6CisgIGZpCisKKyAgIyBEZWZpbmUgYW4gYWRkaXRpb25hbCB2YXJpYWJsZSB1c2VkIGluIHRoZSBNYWtlZmlsZSBzdWJzdGl0dXRpb24uCisgIGlmIHRlc3QgJGFjX2N2X3dvcmtpbmdfYWxsb2NhX2ggPSB5ZXM7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhbGxvY2EgYXMgYSBjb21waWxlciBidWlsdC1pbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYWxsb2NhIGFzIGEgY29tcGlsZXIgYnVpbHQtaW4uLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfcnBsX2FsbG9jYSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2lmIGRlZmluZWQgX19HTlVDX18gfHwgZGVmaW5lZCBfQUlYIHx8IGRlZmluZWQgX01TQ19WRVIKKyAgICAgICAgTmVlZCBvd24gYWxsb2NhCisjZW5kaWYKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiTmVlZCBvd24gYWxsb2NhIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBnbF9jdl9ycGxfYWxsb2NhPXllcworZWxzZQorICBnbF9jdl9ycGxfYWxsb2NhPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfcnBsX2FsbG9jYSIgPiY1CiskYXNfZWNobyAiJGdsX2N2X3JwbF9hbGxvY2EiID4mNjsgfQorICAgIGlmIHRlc3QgJGdsX2N2X3JwbF9hbGxvY2EgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9BTExPQ0EgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIEFMTE9DQV9IPWFsbG9jYS5oCisgICAgZWxzZQorICAgICAgICAgICAgICAgICAgQUxMT0NBX0g9CisgICAgZmkKKyAgZWxzZQorICAgIEFMTE9DQV9IPWFsbG9jYS5oCisgIGZpCisKKyAgIGlmIHRlc3QgLW4gIiRBTExPQ0FfSCI7IHRoZW4KKyAgR0xfR0VORVJBVEVfQUxMT0NBX0hfVFJVRT0KKyAgR0xfR0VORVJBVEVfQUxMT0NBX0hfRkFMU0U9JyMnCitlbHNlCisgIEdMX0dFTkVSQVRFX0FMTE9DQV9IX1RSVUU9JyMnCisgIEdMX0dFTkVSQVRFX0FMTE9DQV9IX0ZBTFNFPQorZmkKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBhc3NlcnRpb25zIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIGFzc2VydGlvbnMuLi4gIiA+JjY7IH0KKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWFzc2VydCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9hc3NlcnQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9hc3NlcnQ7IGlmIHRlc3QgIngkZW5hYmxldmFsIiA9IHhubzsgdGhlbiA6CisKKyRhc19lY2hvICIjZGVmaW5lIE5ERUJVRyAxIiA+PmNvbmZkZWZzLmgKKworZWxpZiB0ZXN0ICJ4JGVuYWJsZXZhbCIgIT0geHllczsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogaW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byAtLWVuYWJsZS1hc3NlcnQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byAtLWVuYWJsZS1hc3NlcnQiID4mMjt9CisgICAgICBlbmFibGVfYXNzZXJ0PXllcworZmkKK2Vsc2UKKyAgZW5hYmxlX2Fzc2VydD15ZXMKK2ZpCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVfYXNzZXJ0IiA+JjUKKyRhc19lY2hvICIkZW5hYmxlX2Fzc2VydCIgPiY2OyB9CisKKworCisKKyAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19tYWxsb2NfcG9zaXggPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DQUxMT0NfUE9TSVggMSIgPj5jb25mZGVmcy5oCisKKyAgZWxzZQorICAgIFJFUExBQ0VfQ0FMTE9DPTEKKyAgZmkKKworICBpZiB0ZXN0ICRSRVBMQUNFX0NBTExPQyA9IDE7IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGNhbGxvYy4kYWNfb2JqZXh0IgorCisgIGZpCisKKworCisKKworICAgICAgICAgIEdOVUxJQl9DQUxMT0NfUE9TSVg9MQorCisKKworCisKKyRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX0NBTExPQ19QT1NJWCAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCiskYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9DTE9FWEVDIDEiID4+Y29uZmRlZnMuaAorCisKKworCisKKyAgaWYgdGVzdCAkSEFWRV9NU1ZDX0lOVkFMSURfUEFSQU1FVEVSX0hBTkRMRVIgPSAxOyB0aGVuCisgICAgUkVQTEFDRV9DTE9TRT0xCisgIGZpCisKKworCisKKworICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3NvY2tldF9oICE9IHllczsgdGhlbgorICAgICAgICAgICAgICAgICAgICBmb3IgYWNfaGVhZGVyIGluIHdpbnNvY2syLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIndpbnNvY2syLmgiICJhY19jdl9oZWFkZXJfd2luc29jazJfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfd2luc29jazJfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1dJTlNPQ0syX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworICBmaQorICBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2giID0geWVzOyB0aGVuCisgICAgSEFWRV9XSU5TT0NLMl9IPTEKKyAgICBVTklTVERfSF9IQVZFX1dJTlNPQ0syX0g9MQorICAgIFNZU19JT0NUTF9IX0hBVkVfV0lOU09DSzJfSD0xCisgIGVsc2UKKyAgICBIQVZFX1dJTlNPQ0syX0g9MAorICBmaQorCisKKyAgICBpZiB0ZXN0ICRVTklTVERfSF9IQVZFX1dJTlNPQ0syX0ggPSAxOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBSRVBMQUNFX0NMT1NFPTEKKyAgICBmaQorCisKKworICBpZiB0ZXN0ICRSRVBMQUNFX0NMT1NFID0gMTsgdGhlbgorCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgY2xvc2UuJGFjX29iamV4dCIKKworICBmaQorCisKKworCisKKyAgICAgICAgICBHTlVMSUJfQ0xPU0U9MQorCisKKworCisKKyRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX0NMT1NFIDEiID4+Y29uZmRlZnMuaAorCisKKworCisgIDoKKworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgR05VTElCX0NMT1NFX1NUUkVBTSAxCitfQUNFT0YKKworCisKKyAgOgorCisKKworICAgICAgICAgIGlmIHRlc3QgIngkZGF0YXJvb3RkaXIiID0geDsgdGhlbgorICAgIGRhdGFyb290ZGlyPScke2RhdGFkaXJ9JworCisgIGZpCisgICAgaWYgdGVzdCAieCRkb2NkaXIiID0geDsgdGhlbgorICAgIGRvY2Rpcj0nJHtkYXRhcm9vdGRpcn0vZG9jLyR7UEFDS0FHRV9UQVJOQU1FfScKKworICBmaQorICAgIGlmIHRlc3QgIngkaHRtbGRpciIgPSB4OyB0aGVuCisgICAgaHRtbGRpcj0nJHtkb2NkaXJ9JworCisgIGZpCisgIGlmIHRlc3QgIngkZHZpZGlyIiA9IHg7IHRoZW4KKyAgICBkdmlkaXI9JyR7ZG9jZGlyfScKKworICBmaQorICBpZiB0ZXN0ICJ4JHBkZmRpciIgPSB4OyB0aGVuCisgICAgcGRmZGlyPScke2RvY2Rpcn0nCisKKyAgZmkKKyAgaWYgdGVzdCAieCRwc2RpciIgPSB4OyB0aGVuCisgICAgcHNkaXI9JyR7ZG9jZGlyfScKKworICBmaQorICBpZiB0ZXN0ICJ4JGxpc3BkaXIiID0geDsgdGhlbgorICAgIGxpc3BkaXI9JyR7ZGF0YXJvb3RkaXJ9L2VtYWNzL3NpdGUtbGlzcCcKKworICBmaQorICBpZiB0ZXN0ICJ4JGxvY2FsZWRpciIgPSB4OyB0aGVuCisgICAgbG9jYWxlZGlyPScke2RhdGFyb290ZGlyfS9sb2NhbGUnCisKKyAgZmkKKworICAgICAgcGtnbGliZXhlY2Rpcj0nJHtsaWJleGVjZGlyfS8ke1BBQ0tBR0V9JworCisKKworCisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEdOVUxJQl9ESVJOQU1FIDEKK19BQ0VPRgorCisKKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIC8vIGlzIGRpc3RpbmN0IGZyb20gLyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIC8vIGlzIGRpc3RpbmN0IGZyb20gLy4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9kb3VibGVfc2xhc2hfcm9vdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICBpZiB0ZXN0IHgiJGNyb3NzX2NvbXBpbGluZyIgPSB4eWVzIDsgdGhlbgorICAgICAgICAjIFdoZW4gY3Jvc3MtY29tcGlsaW5nLCB0aGVyZSBpcyBubyB3YXkgdG8gdGVsbCB3aGV0aGVyIC8vIGlzIHNwZWNpYWwKKyAgICAgICAgIyBzaG9ydCBvZiBhIGxpc3Qgb2YgaG9zdHMuICBIb3dldmVyLCB0aGUgb25seSBrbm93biBob3N0cyB0byBkYXRlCisgICAgICAgICMgdGhhdCBoYXZlIGEgZGlzdGluY3QgLy8gYXJlIEFwb2xsbyBEb21haW5PUyAodG9vIG9sZCB0byBwb3J0IHRvKSwKKyAgICAgICAgIyBDeWd3aW4sIGFuZCB6L09TLiAgSWYgYW55b25lIGtub3dzIG9mIGFub3RoZXIgc3lzdGVtIGZvciB3aGljaCAvLyBoYXMKKyAgICAgICAgIyBzcGVjaWFsIHNlbWFudGljcyBhbmQgaXMgZGlzdGluY3QgZnJvbSAvLCBwbGVhc2UgcmVwb3J0IGl0IHRvCisgICAgICAgICMgPGJ1Zy1nbnVsaWJAZ251Lm9yZz4uCisgICAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICAgICAqLWN5Z3dpbiB8IGkzNzAtaWJtLW9wZW5lZGl0aW9uKQorICAgICAgICAgICAgZ2xfY3ZfZG91YmxlX3NsYXNoX3Jvb3Q9eWVzIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgICMgQmUgb3B0aW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQgLyBhbmQgLy8gYXJlIHRoZSBzYW1lIHdoZW4gd2UKKyAgICAgICAgICAgICMgZG9uJ3Qga25vdy4KKyAgICAgICAgICAgIGdsX2N2X2RvdWJsZV9zbGFzaF9yb290PSd1bmtub3duLCBhc3N1bWluZyBubycgOzsKKyAgICAgICAgZXNhYworICAgICAgZWxzZQorICAgICAgICBzZXQgeCBgbHMgLWRpIC8gLy8gMj4vZGV2L251bGxgCisgICAgICAgIGlmIHRlc3QgIiQyIiA9ICIkNCIgJiYgd2MgLy9kZXYvbnVsbCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAgICBnbF9jdl9kb3VibGVfc2xhc2hfcm9vdD1ubworICAgICAgICBlbHNlCisgICAgICAgICAgZ2xfY3ZfZG91YmxlX3NsYXNoX3Jvb3Q9eWVzCisgICAgICAgIGZpCisgICAgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZG91YmxlX3NsYXNoX3Jvb3QiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9kb3VibGVfc2xhc2hfcm9vdCIgPiY2OyB9CisgIGlmIHRlc3QgIiRnbF9jdl9kb3VibGVfc2xhc2hfcm9vdCIgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgRE9VQkxFX1NMQVNIX0lTX0RJU1RJTkNUX1JPT1QgMSIgPj5jb25mZGVmcy5oCisKKyAgZmkKKworCisKKworCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfRFVQMiAxIiA+PmNvbmZkZWZzLmgKKworCisgIGlmIHRlc3QgJEhBVkVfRFVQMiA9IDE7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgZHVwMiB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGR1cDIgd29ya3MuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19kdXAyX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgbWluZ3cqKSAjIG9uIHRoaXMgcGxhdGZvcm0sIGR1cDIgYWx3YXlzIHJldHVybnMgMCBmb3Igc3VjY2VzcworICAgICAgICAgICAgIGdsX2N2X2Z1bmNfZHVwMl93b3Jrcz0iZ3Vlc3Npbmcgbm8iIDs7CisgICAgICAgICAgIGN5Z3dpbiopICMgb24gY3lnd2luIDEuNS54LCBkdXAyKDEsMSkgcmV0dXJucyAwCisgICAgICAgICAgICAgZ2xfY3ZfZnVuY19kdXAyX3dvcmtzPSJndWVzc2luZyBubyIgOzsKKyAgICAgICAgICAgbGludXgqKSAjIE9uIGxpbnV4IGJldHdlZW4gMjAwOC0wNy0yNyBhbmQgMjAwOS0wNS0xMSwgZHVwMiBvZiBhCisgICAgICAgICAgICAgICAgICAgIyBjbG9zZWQgZmQgbWF5IHlpZWxkIC1FQkFERiBpbnN0ZWFkIG9mIC0xIC8gZXJybm89RUJBREYuCisgICAgICAgICAgICAgZ2xfY3ZfZnVuY19kdXAyX3dvcmtzPSJndWVzc2luZyBubyIgOzsKKyAgICAgICAgICAgZnJlZWJzZCopICMgb24gRnJlZUJTRCA2LjEsIGR1cDIoMSwxMDAwMDAwKSBnaXZlcyBFTUZJTEUsIG5vdCBFQkFERi4KKyAgICAgICAgICAgICBnbF9jdl9mdW5jX2R1cDJfd29ya3M9Imd1ZXNzaW5nIG5vIiA7OworICAgICAgICAgICBoYWlrdSopICMgb24gSGFpa3UgYWxwaGEgMiwgZHVwMigxLCAxKSByZXNldHMgRkRfQ0xPRVhFQy4KKyAgICAgICAgICAgICBnbF9jdl9mdW5jX2R1cDJfd29ya3M9Imd1ZXNzaW5nIG5vIiA7OworICAgICAgICAgICAqKSBnbF9jdl9mdW5jX2R1cDJfd29ya3M9Imd1ZXNzaW5nIHllcyIgOzsKKyAgICAgICAgIGVzYWMKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgICAgICAjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgoraW50CittYWluICgpCit7CitpbnQgcmVzdWx0ID0gMDsKKyNpZmRlZiBGRF9DTE9FWEVDCisgICAgICAgICAgICBpZiAoZmNudGwgKDEsIEZfU0VURkQsIEZEX0NMT0VYRUMpID09IC0xKQorICAgICAgICAgICAgICByZXN1bHQgfD0gMTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKGR1cDIgKDEsIDEpID09IDApCisgICAgICAgICAgICAgIHJlc3VsdCB8PSAyOworI2lmZGVmIEZEX0NMT0VYRUMKKyAgICAgICAgICAgIGlmIChmY250bCAoMSwgRl9HRVRGRCkgIT0gRkRfQ0xPRVhFQykKKyAgICAgICAgICAgICAgcmVzdWx0IHw9IDQ7CisjZW5kaWYKKyAgICAgICAgICAgIGNsb3NlICgwKTsKKyAgICAgICAgICAgIGlmIChkdXAyICgwLCAwKSAhPSAtMSkKKyAgICAgICAgICAgICAgcmVzdWx0IHw9IDg7CisgICAgICAgICAgICAvKiBNYW55IGdudWxpYiBtb2R1bGVzIHJlcXVpcmUgUE9TSVggY29uZm9ybWFuY2Ugb2YgRUJBREYuICAqLworICAgICAgICAgICAgaWYgKGR1cDIgKDIsIDEwMDAwMDApID09IC0xICYmIGVycm5vICE9IEVCQURGKQorICAgICAgICAgICAgICByZXN1bHQgfD0gMTY7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisgIDsKKyAgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfZHVwMl93b3Jrcz15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19kdXAyX3dvcmtzPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2R1cDJfd29ya3MiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2R1cDJfd29ya3MiID4mNjsgfQorICAgIGNhc2UgIiRnbF9jdl9mdW5jX2R1cDJfd29ya3MiIGluCisgICAgICAqeWVzKSA7OworICAgICAgKikKKyAgICAgICAgUkVQTEFDRV9EVVAyPTEKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisKKworICBpZiB0ZXN0ICRIQVZFX0RVUDIgPSAwIHx8IHRlc3QgJFJFUExBQ0VfRFVQMiA9IDE7IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGR1cDIuJGFjX29iamV4dCIKKworCisgIGZpCisKKworCisKKworICAgICAgICAgIEdOVUxJQl9EVVAyPTEKKworCisKKworCiskYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9EVVAyIDEiID4+Y29uZmRlZnMuaAorCisKKworCisKKworCisKKworICAgICAgICAgIEdOVUxJQl9FTlZJUk9OPTEKKworCisKKworCiskYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9FTlZJUk9OIDEiID4+Y29uZmRlZnMuaAorCisKKworCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGVycm9yX2F0X2xpbmUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGVycm9yX2F0X2xpbmUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2Vycm9yX2F0X2xpbmUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8ZXJyb3IuaD4KK2ludAorbWFpbiAoKQoreworZXJyb3JfYXRfbGluZSAoMCwgMCwgIiIsIDAsICJhbiBlcnJvciBvY2N1cnJlZCIpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9lcnJvcl9hdF9saW5lPXllcworZWxzZQorICBhY19jdl9saWJfZXJyb3JfYXRfbGluZT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZXJyb3JfYXRfbGluZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9lcnJvcl9hdF9saW5lIiA+JjY7IH0KKworICBpZiB0ZXN0ICRhY19jdl9saWJfZXJyb3JfYXRfbGluZSA9IG5vOyB0aGVuCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBlcnJvci4kYWNfb2JqZXh0IgorCisKKworICA6CisKKyAgZmkKKworCisgIFhHRVRURVhUX0VYVFJBX09QVElPTlM9IiRYR0VUVEVYVF9FWFRSQV9PUFRJT05TIC0tZmxhZz1lcnJvcjozOmMtZm9ybWF0IgorCisKKworICBYR0VUVEVYVF9FWFRSQV9PUFRJT05TPSIkWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyAtLWZsYWc9ZXJyb3JfYXRfbGluZTo1OmMtZm9ybWF0IgorCisKKworCisKKyAgOgorCisKKworCisKKworICBpZiB0ZXN0ICRhY19jdl9mdW5jX2ZjbnRsID0gbm87IHRoZW4KKworCisKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19mY250bCA9IG5vOyB0aGVuCisgICAgSEFWRV9GQ05UTD0wCisgIGVsc2UKKyAgICBSRVBMQUNFX0ZDTlRMPTEKKyAgZmkKKworICBlbHNlCisgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgZmNudGwgaGFuZGxlcyBGX0RVUEZEIGNvcnJlY3RseSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGZjbnRsIGhhbmRsZXMgRl9EVVBGRCBjb3JyZWN0bHkuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19mY250bF9mX2R1cGZkX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICAjIEd1ZXNzIHRoYXQgaXQgd29ya3Mgb24gZ2xpYmMgc3lzdGVtcworICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gIygoCisgICAgICAgICAgICAqLWdudSopIGdsX2N2X2Z1bmNfZmNudGxfZl9kdXBmZF93b3Jrcz0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAqKSAgICAgIGdsX2N2X2Z1bmNfZmNudGxfZl9kdXBmZF93b3Jrcz0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICBlc2FjCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworaW50CittYWluICgpCit7CitpbnQgcmVzdWx0ID0gMDsKKyAgICAgIGlmIChmY250bCAoMCwgRl9EVVBGRCwgLTEpICE9IC0xKSByZXN1bHQgfD0gMTsKKyAgICAgIGlmIChlcnJubyAhPSBFSU5WQUwpIHJlc3VsdCB8PSAyOworICAgICAgcmV0dXJuIHJlc3VsdDsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19mY250bF9mX2R1cGZkX3dvcmtzPXllcworZWxzZQorICBnbF9jdl9mdW5jX2ZjbnRsX2ZfZHVwZmRfd29ya3M9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2ZjbnRsX2ZfZHVwZmRfd29ya3MiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2ZjbnRsX2ZfZHVwZmRfd29ya3MiID4mNjsgfQorICAgIGNhc2UgJGdsX2N2X2Z1bmNfZmNudGxfZl9kdXBmZF93b3JrcyBpbgorICAgICAgKnllcykgOzsKKyAgICAgICopCisKKworICBpZiB0ZXN0ICRhY19jdl9mdW5jX2ZjbnRsID0gbm87IHRoZW4KKyAgICBIQVZFX0ZDTlRMPTAKKyAgZWxzZQorICAgIFJFUExBQ0VfRkNOVEw9MQorICBmaQorCisKKyRhc19lY2hvICIjZGVmaW5lIEZDTlRMX0RVUEZEX0JVR0dZIDEiID4+Y29uZmRlZnMuaAorIDs7CisgICAgZXNhYworCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBmY250bCB1bmRlcnN0YW5kcyBGX0RVUEZEX0NMT0VYRUMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBmY250bCB1bmRlcnN0YW5kcyBGX0RVUEZEX0NMT0VYRUMuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19mY250bF9mX2R1cGZkX2Nsb2V4ZWMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2lmbmRlZiBGX0RVUEZEX0NMT0VYRUMKK2Nob2tlIG1lCisjZW5kaWYKKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpZmRlZiBfX2xpbnV4X18KKy8qIFRoZSBMaW51eCBrZXJuZWwgb25seSBhZGRlZCBGX0RVUEZEX0NMT0VYRUMgaW4gMi42LjI0LCBzbyB3ZSBhbHdheXMgcmVwbGFjZQorICAgaXQgdG8gc3VwcG9ydCB0aGUgc2VtYW50aWNzIG9uIG9sZGVyIGtlcm5lbHMgdGhhdCBmYWlsZWQgd2l0aCBFSU5WQUwuICAqLworY2hva2UgbWUKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfZmNudGxfZl9kdXBmZF9jbG9leGVjPXllcworZWxzZQorICBnbF9jdl9mdW5jX2ZjbnRsX2ZfZHVwZmRfY2xvZXhlYz0ibmVlZHMgcnVudGltZSBjaGVjayIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19mY250bF9mX2R1cGZkX2Nsb2V4ZWM9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfZmNudGxfZl9kdXBmZF9jbG9leGVjIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19mY250bF9mX2R1cGZkX2Nsb2V4ZWMiID4mNjsgfQorICAgIGlmIHRlc3QgIiRnbF9jdl9mdW5jX2ZjbnRsX2ZfZHVwZmRfY2xvZXhlYyIgIT0geWVzOyB0aGVuCisKKworCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfZmNudGwgPSBubzsgdGhlbgorICAgIEhBVkVfRkNOVEw9MAorICBlbHNlCisgICAgUkVQTEFDRV9GQ05UTD0xCisgIGZpCisKKyAgICAgICAgICBmaQorICBmaQorCisKKyAgaWYgdGVzdCAkSEFWRV9GQ05UTCA9IDAgfHwgdGVzdCAkUkVQTEFDRV9GQ05UTCA9IDE7IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGZjbnRsLiRhY19vYmpleHQiCisKKyAgZmkKKworCisKKworCisgICAgICAgICAgR05VTElCX0ZDTlRMPTEKKworCisKKworCiskYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9GQ05UTCAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCisKKworCisKKworCisKKworCisgICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzOyB0aGVuCisgICAgICAgZ2xfY3ZfbmV4dF9mY250bF9oPSc8J2ZjbnRsLmgnPicKKyAgICAgZWxzZQorICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8ZmNudGwuaD4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8ZmNudGwuaD4uLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfbmV4dF9mY250bF9oKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGZjbnRsLmg+CisKK19BQ0VPRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgIGFpeCopIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIC1DIiA7OworICAgICAgICAgICAgICAgICAqKSAgICBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCIgOzsKKyAgICAgICAgICAgICAgIGVzYWMKKworICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgIG1pbmd3KikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kaXJzZXBfcmVnZXg9J1svXFxdJworICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgZ2xfZGlyc2VwX3JlZ2V4PSdcLycKKyAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfbWFrZV9saXRlcmFsX3JlZ2V4X3NlZD0ncyxbXSReXFwuKi9bXSxcXCYsZycKKworICAgICAgICAgICAgICAgZ2xfaGVhZGVyX2xpdGVyYWxfcmVnZXg9YGVjaG8gJ2ZjbnRsLmgnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAiJGdsX21ha2VfbGl0ZXJhbF9yZWdleF9zZWQiYAorICAgICAgICAgICAgICAgZ2xfYWJzb2x1dGVfaGVhZGVyX3NlZD0iLyR7Z2xfZGlyc2VwX3JlZ2V4fSR7Z2xfaGVhZGVyX2xpdGVyYWxfcmVnZXh9LyIneworICAgICAgICAgICAgICAgICAgIHMvLioiXCguKiciJHtnbF9kaXJzZXBfcmVnZXh9JHtnbF9oZWFkZXJfbGl0ZXJhbF9yZWdleH0iJ1wpIi4qL1wxLworICAgICAgICAgICAgICAgICAgIHN8Xi9bXi9dfC8vJnwKKyAgICAgICAgICAgICAgICAgICBwCisgICAgICAgICAgICAgICAgICAgcQorICAgICAgICAgICAgICAgICB9JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfbmV4dF9mY250bF9oPSciJ2AoZXZhbCAiJGdsX2Fic25hbWVfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgICAgICAgICAgICAgICAgICAgICBzZWQgLW4gIiRnbF9hYnNvbHV0ZV9oZWFkZXJfc2VkImAnIicKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9uZXh0X2ZjbnRsX2giID4mNQorJGFzX2VjaG8gIiRnbF9jdl9uZXh0X2ZjbnRsX2giID4mNjsgfQorICAgICBmaQorICAgICBORVhUX0ZDTlRMX0g9JGdsX2N2X25leHRfZmNudGxfaAorCisgICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzIHx8IHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0gYnVnZ3k7IHRoZW4KKyAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGVfbmV4dCcKKyAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0nPCdmY250bC5oJz4nCisgICAgIGVsc2UKKyAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGUnCisgICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9JGdsX2N2X25leHRfZmNudGxfaAorICAgICBmaQorICAgICBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9GQ05UTF9IPSRnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZQorCisKKworCisKKworCisKKworCisgICAgZm9yIGdsX2Z1bmMgaW4gZmNudGwgb3BlbmF0OyBkbworICAgIGFzX2dsX1N5bWJvbD1gJGFzX2VjaG8gImdsX2N2X2hhdmVfcmF3X2RlY2xfJGdsX2Z1bmMiIHwgJGFzX3RyX3NoYAorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNsYXJlZCB3aXRob3V0IGEgbWFjcm8iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNsYXJlZCB3aXRob3V0IGEgbWFjcm8uLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JGFzX2dsX1N5bWJvbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxmY250bC5oPgorCitpbnQKK21haW4gKCkKK3sKKyN1bmRlZiAkZ2xfZnVuYworICAodm9pZCkgJGdsX2Z1bmM7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJGFzX2dsX1N5bWJvbD15ZXMiCitlbHNlCisgIGV2YWwgIiRhc19nbF9TeW1ib2w9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkYXNfZ2xfU3ltYm9sCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgICBpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2dsX1N5bWJvbCJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFX1JBV19ERUNMXyRnbF9mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCisgICAgICAgICAgICAgICAgICAgICBldmFsIGFjX2N2X2hhdmVfZGVjbF8kZ2xfZnVuYz15ZXMKK2ZpCisgICAgICBkb25lCisKKworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgR05VTElCX0ZEX1NBRkVSX0ZMQUcgMQorX0FDRU9GCisKKworCisKKworICBGTE9BVF9IPQorICBSRVBMQUNFX0ZMT0FUX0xEQkw9MAorICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBhaXgqIHwgYmVvcyogfCBvcGVuYnNkKiB8IG1pcmJzZCogfCBpcml4KikKKyAgICAgIEZMT0FUX0g9ZmxvYXQuaAorICAgICAgOzsKKyAgICBmcmVlYnNkKikKKyAgICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKyAgICAgICAgaVszNDU2N104NiApCisgICAgICAgICAgRkxPQVRfSD1mbG9hdC5oCisgICAgICAgICAgOzsKKyAgICAgICAgeDg2XzY0ICkKKyAgICAgICAgICAjIE9uIHg4Nl82NCBzeXN0ZW1zLCB0aGUgQyBjb21waWxlciBtYXkgc3RpbGwgYmUgZ2VuZXJhdGluZworICAgICAgICAgICMgMzItYml0IGNvZGUuCisgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmIGRlZmluZWQgX19MUDY0X18gfHwgZGVmaW5lZCBfX3g4Nl82NF9fIHx8IGRlZmluZWQgX19hbWQ2NF9fCisgICAgICAgICAgICAgeWVzCisgICAgICAgICAgICAgI2VuZGlmCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKK2Vsc2UKKyAgRkxPQVRfSD1mbG9hdC5oCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBsaW51eCopCisgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisgICAgICAgIHBvd2VycGMqKQorICAgICAgICAgIEZMT0FUX0g9ZmxvYXQuaAorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICBlc2FjCisgIGNhc2UgIiRob3N0X29zIiBpbgorICAgIGFpeCogfCBmcmVlYnNkKiB8IGxpbnV4KikKKyAgICAgIGlmIHRlc3QgLW4gIiRGTE9BVF9IIjsgdGhlbgorICAgICAgICBSRVBMQUNFX0ZMT0FUX0xEQkw9MQorICAgICAgZmkKKyAgICAgIDs7CisgIGVzYWMKKworICAgIFJFUExBQ0VfSVRPTEQ9MAorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgY29udmVyc2lvbiBmcm9tICdpbnQnIHRvICdsb25nIGRvdWJsZScgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBjb252ZXJzaW9uIGZyb20gJ2ludCcgdG8gJ2xvbmcgZG91YmxlJyB3b3Jrcy4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX2l0b2xkX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgICAgc3BhcmMqLSotbGludXgqKQorICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZiBkZWZpbmVkIF9fTFA2NF9fIHx8IGRlZmluZWQgX19hcmNoNjRfXworICAgICAgICAgICAgICAgIHllcworICAgICAgICAgICAgICAgICNlbmRpZgorX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBnbF9jdl9mdW5jX2l0b2xkX3dvcmtzPSJndWVzc2luZyBubyIKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19pdG9sZF93b3Jrcz0iZ3Vlc3NpbmcgeWVzIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgKikgZ2xfY3ZfZnVuY19pdG9sZF93b3Jrcz0iZ3Vlc3NpbmcgeWVzIiA7OworICAgICAgICAgZXNhYworCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50IGkgPSAtMTsKK3ZvbGF0aWxlIGxvbmcgZG91YmxlIGxkOworaW50IG1haW4gKCkKK3sKKyAgbGQgKz0gaSAqIDEuMEw7CisgIGlmIChsZCA+IDApCisgICAgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19pdG9sZF93b3Jrcz15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19pdG9sZF93b3Jrcz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19pdG9sZF93b3JrcyIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfaXRvbGRfd29ya3MiID4mNjsgfQorICBjYXNlICIkZ2xfY3ZfZnVuY19pdG9sZF93b3JrcyIgaW4KKyAgICAqbm8pCisgICAgICBSRVBMQUNFX0lUT0xEPTEKKyAgICAgICAgICAgICAgICAgIEZMT0FUX0g9ZmxvYXQuaAorICAgICAgOzsKKyAgZXNhYworCisgIGlmIHRlc3QgLW4gIiRGTE9BVF9IIjsgdGhlbgorCisKKworCisKKworCisKKyAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXM7IHRoZW4KKyAgICAgICBnbF9jdl9uZXh0X2Zsb2F0X2g9JzwnZmxvYXQuaCc+JworICAgICBlbHNlCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxmbG9hdC5oPiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxmbG9hdC5oPi4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9uZXh0X2Zsb2F0X2grOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8ZmxvYXQuaD4KKworX0FDRU9GCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgYWl4KikgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAgLUMiIDs7CisgICAgICAgICAgICAgICAgICopICAgIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIiA7OworICAgICAgICAgICAgICAgZXNhYworCisgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgbWluZ3cqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2RpcnNlcF9yZWdleD0nWy9cXF0nCisgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICBnbF9kaXJzZXBfcmVnZXg9J1wvJworICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9tYWtlX2xpdGVyYWxfcmVnZXhfc2VkPSdzLFtdJF5cXC4qL1tdLFxcJixnJworCisgICAgICAgICAgICAgICBnbF9oZWFkZXJfbGl0ZXJhbF9yZWdleD1gZWNobyAnZmxvYXQuaCcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICIkZ2xfbWFrZV9saXRlcmFsX3JlZ2V4X3NlZCJgCisgICAgICAgICAgICAgICBnbF9hYnNvbHV0ZV9oZWFkZXJfc2VkPSIvJHtnbF9kaXJzZXBfcmVnZXh9JHtnbF9oZWFkZXJfbGl0ZXJhbF9yZWdleH0vIid7CisgICAgICAgICAgICAgICAgICAgcy8uKiJcKC4qJyIke2dsX2RpcnNlcF9yZWdleH0ke2dsX2hlYWRlcl9saXRlcmFsX3JlZ2V4fSInXCkiLiovXDEvCisgICAgICAgICAgICAgICAgICAgc3xeL1teL118Ly8mfAorICAgICAgICAgICAgICAgICAgIHAKKyAgICAgICAgICAgICAgICAgICBxCisgICAgICAgICAgICAgICAgIH0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9uZXh0X2Zsb2F0X2g9JyInYChldmFsICIkZ2xfYWJzbmFtZV9jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAgICAgICAgICAgICAgICAgICAgIHNlZCAtbiAiJGdsX2Fic29sdXRlX2hlYWRlcl9zZWQiYCciJworCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X25leHRfZmxvYXRfaCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X25leHRfZmxvYXRfaCIgPiY2OyB9CisgICAgIGZpCisgICAgIE5FWFRfRkxPQVRfSD0kZ2xfY3ZfbmV4dF9mbG9hdF9oCisKKyAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXMgfHwgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSBidWdneTsgdGhlbgorICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZV9uZXh0JworICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSc8J2Zsb2F0LmgnPicKKyAgICAgZWxzZQorICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZScKKyAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0kZ2xfY3ZfbmV4dF9mbG9hdF9oCisgICAgIGZpCisgICAgIE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX0ZMT0FUX0g9JGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlCisKKworCisKKyAgZmkKKworICAgaWYgdGVzdCAtbiAiJEZMT0FUX0giOyB0aGVuCisgIEdMX0dFTkVSQVRFX0ZMT0FUX0hfVFJVRT0KKyAgR0xfR0VORVJBVEVfRkxPQVRfSF9GQUxTRT0nIycKK2Vsc2UKKyAgR0xfR0VORVJBVEVfRkxPQVRfSF9UUlVFPScjJworICBHTF9HRU5FUkFURV9GTE9BVF9IX0ZBTFNFPQorZmkKKworCisKKyAgaWYgdGVzdCAkUkVQTEFDRV9GTE9BVF9MREJMID0gMTsgdGhlbgorCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgZmxvYXQuJGFjX29iamV4dCIKKworICBmaQorICBpZiB0ZXN0ICRSRVBMQUNFX0lUT0xEID0gMTsgdGhlbgorCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgaXRvbGQuJGFjX29iamV4dCIKKworICBmaQorCisKKworICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBtaW5ndyogfCBwdyopCisgICAgICAgICAgICBSRVBMQUNFX0ZPUEVOPTEKKyAgICAgICAgICAgIGdsX2N2X2Z1bmNfZm9wZW5fc2xhc2g9Imd1ZXNzaW5nIG5vIgorICAgICAgOzsKKyAgICAqKQorICAgICAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGZvcGVuIHJlY29nbml6ZXMgYSB0cmFpbGluZyBzbGFzaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGZvcGVuIHJlY29nbml6ZXMgYSB0cmFpbGluZyBzbGFzaC4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX2ZvcGVuX3NsYXNoKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKworICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgYWl4KiB8IGhwdXgqIHwgc29sYXJpczIuWzAtOV0gfCBzb2xhcmlzMi5bMC05XS4qKQorICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX2ZvcGVuX3NsYXNoPSJndWVzc2luZyBubyIgOzsKKyAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfZm9wZW5fc2xhc2g9Imd1ZXNzaW5nIHllcyIgOzsKKyAgICAgICAgICAgICBlc2FjCisKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludCBtYWluICgpCit7CisgIHJldHVybiBmb3BlbiAoImNvbmZ0ZXN0LnNsLyIsICJ3IikgIT0gTlVMTDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfZm9wZW5fc2xhc2g9eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfZm9wZW5fc2xhc2g9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgICAgICAgICAgcm0gLWYgY29uZnRlc3Quc2wKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19mb3Blbl9zbGFzaCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfZm9wZW5fc2xhc2giID4mNjsgfQorICAgICAgOzsKKyAgZXNhYworICBjYXNlICIkZ2xfY3ZfZnVuY19mb3Blbl9zbGFzaCIgaW4KKyAgICAqbm8pCisKKyRhc19lY2hvICIjZGVmaW5lIEZPUEVOX1RSQUlMSU5HX1NMQVNIX0JVRyAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgUkVQTEFDRV9GT1BFTj0xCisgICAgICA7OworICBlc2FjCisKKyAgaWYgdGVzdCAkUkVQTEFDRV9GT1BFTiA9IDE7IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGZvcGVuLiRhY19vYmpleHQiCisKKyAgICA6CisgIGZpCisKKworCisKKworICAgICAgICAgIEdOVUxJQl9GT1BFTj0xCisKKworCisKKworJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfRk9QRU4gMSIgPj5jb25mZGVmcy5oCisKKworCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBHTlVMSUJfRk9QRU5fU0FGRVIgMQorX0FDRU9GCisKKworCisKKworICBmcF9oZWFkZXJzPScKKyMgICAgIGluY2x1ZGUgPHN0ZGlvLmg+CisjICAgICBpZiBIQVZFX1NURElPX0VYVF9ICisjICAgICAgaW5jbHVkZSA8c3RkaW9fZXh0Lmg+CisjICAgICBlbmRpZgorJworICBhY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJfX2ZwZW5kaW5nIiAiYWNfY3ZfaGF2ZV9kZWNsX19fZnBlbmRpbmciICIkZnBfaGVhZGVycworIgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfX19mcGVuZGluZyIgPSB4eWVzOyB0aGVuIDoKKyAgYWNfaGF2ZV9kZWNsPTEKK2Vsc2UKKyAgYWNfaGF2ZV9kZWNsPTAKK2ZpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ERUNMX19fRlBFTkRJTkcgJGFjX2hhdmVfZGVjbAorX0FDRU9GCisKKworICBpZiB0ZXN0ICRhY19jdl9mdW5jX19fZnBlbmRpbmcgPSBubzsgdGhlbgorCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgZnBlbmRpbmcuJGFjX29iamV4dCIKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIHBlbmRpbmcgb3V0cHV0IGJ5dGVzIG9uIGEgc3RyZWFtIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBwZW5kaW5nIG91dHB1dCBieXRlcyBvbiBhIHN0cmVhbS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zeXNfcGVuZGluZ19vdXRwdXRfbl9ieXRlcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGZvciBhY19leHByIGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAnIyBnbGliYzInICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAnZnAtPl9JT193cml0ZV9wdHIgLSBmcC0+X0lPX3dyaXRlX2Jhc2UnICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAnIyB0cmFkaXRpb25hbCBVbml4JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAnZnAtPl9wdHIgLSBmcC0+X2Jhc2UnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAnIyBCU0QnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAnZnAtPl9wIC0gZnAtPl9iZi5fYmFzZScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAnIyBTQ08sIFVuaXh3YXJlJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAnKGZwLT5fX3B0ciA/IGZwLT5fX3B0ciAtIGZwLT5fX2Jhc2UgOiAwKScgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAnIyBRTlgnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAnKGZwLT5fTW9kZSAmIDB4MjAwMCAvKl9NV1JJVEUqLyA/IGZwLT5fTmV4dCAtIGZwLT5fQnVmIDogMCknIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAnIyBvbGQgZ2xpYmM/JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAnZnAtPl9fYnVmcCAtIGZwLT5fX2J1ZmZlcicgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAnIyBvbGQgZ2xpYmMgaW9zdHJlYW0/JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAnZnAtPl9wcHRyIC0gZnAtPl9wYmFzZScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAnIyBlbXgrZ2NjJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAnZnAtPl9wdHIgLSBmcC0+X2J1ZmZlcicgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAnIyBNaW5peCcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAnZnAtPl9wdHIgLSBmcC0+X2J1ZicgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAnIyBQbGFuOScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAnZnAtPndwIC0gZnAtPmJ1ZicgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAnIyBWTVMnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAnKCpmcCktPl9wdHIgLSAoKmZwKS0+X2Jhc2UnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAnIyBlLmcuLCBER1VYIFI0LjExOyB0aGUgaW5mbyBpcyBub3QgYXZhaWxhYmxlJyAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICA7IGRvCisKKyAgICAgICAgIyBTa2lwIGVhY2ggZW1iZWRkZWQgY29tbWVudC4KKyAgICAgICAgY2FzZSAiJGFjX2V4cHIiIGluICcjJyopIGNvbnRpbnVlOzsgZXNhYworCisgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgoraW50CittYWluICgpCit7CitGSUxFICpmcCA9IHN0ZGluOyAodm9pZCkgKCRhY19leHByKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBmcF9kb25lPXllcworCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgIHRlc3QgIiRmcF9kb25lIiA9IHllcyAmJiBicmVhaworICAgICAgZG9uZQorCisgICAgICBhY19jdl9zeXNfcGVuZGluZ19vdXRwdXRfbl9ieXRlcz0kYWNfZXhwcgorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3N5c19wZW5kaW5nX291dHB1dF9uX2J5dGVzIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc3lzX3BlbmRpbmdfb3V0cHV0X25fYnl0ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBFTkRJTkdfT1VUUFVUX05fQllURVMgJGFjX2N2X3N5c19wZW5kaW5nX291dHB1dF9uX2J5dGVzCitfQUNFT0YKKworCisgIGZpCisKKworCisKKworCisKKworCisKKworCisKKworCisgIGdsX2N2X2Z1bmNfZnByaW50Zl9wb3NpeD1ubworICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfc2l6ZXNfYzk5IiBpbgorICAgICp5ZXMpCisgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfbG9uZ19kb3VibGUiIGluCisgICAgICAgICp5ZXMpCisgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlIiBpbgorICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlX2xvbmdfZG91YmxlIiBpbgorICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2EiIGluCisgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9mIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9uIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2xzIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9wb3NpdGlvbnMiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19ncm91cGluZyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfbGVmdGFkanVzdCIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZmxhZ196ZXJvIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX3ByZWNpc2lvbiIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2Vub21lbSIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZwcmludGYgZXhpc3RzIGFuZCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWxyZWFkeSBQT1NJWCBjb21wbGlhbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19mcHJpbnRmX3Bvc2l4PXllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICBlc2FjCisgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfZnByaW50Zl9wb3NpeCA9IG5vOyB0aGVuCisKKworCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZSIgaW4KKyAgICAqeWVzKQorICAgICAgOzsKKyAgICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9JTkZJTklURV9ET1VCTEUgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKKworICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfbG9uZ19kb3VibGUiIGluCisgICAgKnllcykKKyAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZV9sb25nX2RvdWJsZSIgaW4KKyAgICAgICAgKnllcykKKyAgICAgICAgICA7OworICAgICAgICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9JTkZJTklURV9MT05HX0RPVUJMRSAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICBlc2FjCisKKworCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfYSIgaW4KKyAgICAqeWVzKQorICAgICAgOzsKKyAgICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9ESVJFQ1RJVkVfQSAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgZm9yIGFjX2Z1bmMgaW4gbmxfbGFuZ2luZm8KK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAibmxfbGFuZ2luZm8iICJhY19jdl9mdW5jX25sX2xhbmdpbmZvIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX25sX2xhbmdpbmZvIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTkxfTEFOR0lORk8gMQorX0FDRU9GCisKK2ZpCitkb25lCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9mIiBpbgorICAgICp5ZXMpCisgICAgICA7OworICAgICopCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0RJUkVDVElWRV9GIDEiID4+Y29uZmRlZnMuaAorCisgICAgICA7OworICBlc2FjCisKKworCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbHMiIGluCisgICAgKnllcykKKyAgICAgIDs7CisgICAgKikKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfRElSRUNUSVZFX0xTIDEiID4+Y29uZmRlZnMuaAorCisgICAgICA7OworICBlc2FjCisKKworCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2dyb3VwaW5nIiBpbgorICAgICp5ZXMpCisgICAgICA7OworICAgICopCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0ZMQUdfR1JPVVBJTkcgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfbGVmdGFkanVzdCIgaW4KKyAgICAqeWVzKQorICAgICAgOzsKKyAgICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9GTEFHX0xFRlRBREpVU1QgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfemVybyIgaW4KKyAgICAqeWVzKQorICAgICAgOzsKKyAgICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9GTEFHX1pFUk8gMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX3ByZWNpc2lvbiIgaW4KKyAgICAqeWVzKQorICAgICAgOzsKKyAgICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9VTkJPVU5ERURfUFJFQ0lTSU9OIDEiID4+Y29uZmRlZnMuaAorCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0RPVUJMRSAxIiA+PmNvbmZkZWZzLmgKKworCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9MT05HX0RPVUJMRSAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgOzsKKyAgZXNhYworCisKKworICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtIiBpbgorICAgICp5ZXMpCisgICAgICA7OworICAgICopCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0VOT01FTSAxIiA+PmNvbmZkZWZzLmgKKworCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9ET1VCTEUgMSIgPj5jb25mZGVmcy5oCisKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfTE9OR19ET1VCTEUgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHZhc25wcmludGYuJGFjX29iamV4dCIKKworCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgcHJpbnRmLWFyZ3MuJGFjX29iamV4dCIKKworCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgcHJpbnRmLXBhcnNlLiRhY19vYmpleHQiCisKKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGFzbnByaW50Zi4kYWNfb2JqZXh0IgorCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfdmFzbnByaW50ZiA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBSRVBMQUNFX1ZBU05QUklOVEYgMSIgPj5jb25mZGVmcy5oCisKKyAgZmkKKworCisKKworCisKKworCisKKworCisgIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInB0cmRpZmZfdCIgImFjX2N2X3R5cGVfcHRyZGlmZl90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfcHRyZGlmZl90IiA9IHh5ZXM7IHRoZW4gOgorCitlbHNlCisKKyRhc19lY2hvICIjZGVmaW5lIHB0cmRpZmZfdCBsb25nIiA+PmNvbmZkZWZzLmgKKworCitmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgZnByaW50Zi4kYWNfb2JqZXh0IgorCisgIFJFUExBQ0VfRlBSSU5URj0xCisKKyRhc19lY2hvICIjZGVmaW5lIFJFUExBQ0VfRlBSSU5URl9QT1NJWCAxIiA+PmNvbmZkZWZzLmgKKworICA6CisKKyAgZmkKKworCisKKworCisKKyAgICAgICAgICBHTlVMSUJfRlBSSU5URl9QT1NJWD0xCisKKworCisKKworJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfRlBSSU5URl9QT1NJWCAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCisKKyAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19mcmV4cF9ub19saWJtID0geWVzOyB0aGVuCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBmcmV4cCB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGZyZXhwIHdvcmtzLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfZnJleHBfd29ya3MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICBuZXRic2QqIHwgaXJpeCogfCBtaW5ndyopIGdsX2N2X2Z1bmNfZnJleHBfd29ya3M9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICopICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19mcmV4cF93b3Jrcz0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICBlc2FjCisKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9BTEFSTQorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorLyogSFAgY2Mgb24gSFAtVVggMTAuMjAgaGFzIGEgYnVnIHdpdGggdGhlIGNvbnN0YW50IGV4cHJlc3Npb24gLTAuMC4KKyAgIElDQyAxMC4wIGhhcyBhIGJ1ZyB3aGVuIG9wdGltaXppbmcgdGhlIGV4cHJlc3Npb24gLXplcm8uCisgICBUaGUgZXhwcmVzc2lvbiAtREJMX01JTiAqIERCTF9NSU4gZG9lcyBub3Qgd29yayB3aGVuIGNyb3NzLWNvbXBpbGluZworICAgdG8gUG93ZXJQQyBvbiBNYWMgT1MgWCAxMC41LiAgKi8KKyNpZiBkZWZpbmVkIF9faHB1eCB8fCBkZWZpbmVkIF9fc2dpIHx8IGRlZmluZWQgX19JQ0MKK3N0YXRpYyBkb3VibGUKK2NvbXB1dGVfbWludXNfemVybyAodm9pZCkKK3sKKyAgcmV0dXJuIC1EQkxfTUlOICogREJMX01JTjsKK30KKyMgZGVmaW5lIG1pbnVzX3plcm8gY29tcHV0ZV9taW51c196ZXJvICgpCisjZWxzZQorZG91YmxlIG1pbnVzX3plcm8gPSAtMC4wOworI2VuZGlmCitpbnQgbWFpbigpCit7CisgIGludCByZXN1bHQgPSAwOworICBpbnQgaTsKKyAgdm9sYXRpbGUgZG91YmxlIHg7CisgIGRvdWJsZSB6ZXJvID0gMC4wOworI2lmIEhBVkVfQUxBUk0KKyAgLyogTmVYVHN0ZXAgMy4zIGZyZXhwKCkgcnVucyBpbnRvIGFuIGVuZGxlc3MgbG9vcCB3aGVuIGNhbGxlZCBvbiBhbiBpbmZpbml0ZQorICAgICBudW1iZXIuICBMZXQgdGhlIHRlc3QgZmFpbCBpbiB0aGlzIGNhc2UuICAqLworICBhbGFybSAoNSk7CisjZW5kaWYKKyAgLyogVGVzdCBvbiBkZW5vcm1hbGl6ZWQgbnVtYmVycy4gICovCisgIGZvciAoaSA9IDEsIHggPSAxLjA7IGkgPj0gREJMX01JTl9FWFA7IGktLSwgeCAqPSAwLjUpCisgICAgOworICBpZiAoeCA+IDAuMCkKKyAgICB7CisgICAgICBpbnQgZXhwOworICAgICAgZG91YmxlIHkgPSBmcmV4cCAoeCwgJmV4cCk7CisgICAgICAvKiBPbiBtYWNoaW5lcyB3aXRoIElFRUU3NTQgYXJpdGhtZXRpYzogeCA9IDEuMTEyNTRlLTMwOCwgZXhwID0gLTEwMjIuCisgICAgICAgICBPbiBOZXRCU0Q6IHkgPSAwLjc1LiBDb3JyZWN0OiB5ID0gMC41LiAgKi8KKyAgICAgIGlmICh5ICE9IDAuNSkKKyAgICAgICAgcmVzdWx0IHw9IDE7CisgICAgfQorICAvKiBUZXN0IG9uIGluZmluaXRlIG51bWJlcnMuICAqLworICB4ID0gMS4wIC8gemVybzsKKyAgeworICAgIGludCBleHA7CisgICAgZG91YmxlIHkgPSBmcmV4cCAoeCwgJmV4cCk7CisgICAgaWYgKHkgIT0geCkKKyAgICAgIHJlc3VsdCB8PSAyOworICB9CisgIC8qIFRlc3Qgb24gbmVnYXRpdmUgemVyby4gICovCisgIHggPSBtaW51c196ZXJvOworICB7CisgICAgaW50IGV4cDsKKyAgICBkb3VibGUgeSA9IGZyZXhwICh4LCAmZXhwKTsKKyAgICBpZiAobWVtY21wICgmeSwgJngsIHNpemVvZiB4KSkKKyAgICAgIHJlc3VsdCB8PSA0OworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX2ZyZXhwX3dvcmtzPXllcworZWxzZQorICBnbF9jdl9mdW5jX2ZyZXhwX3dvcmtzPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2ZyZXhwX3dvcmtzIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19mcmV4cF93b3JrcyIgPiY2OyB9CisKKyAgICBjYXNlICIkZ2xfY3ZfZnVuY19mcmV4cF93b3JrcyIgaW4KKyAgICAgICp5ZXMpIGdsX2Z1bmNfZnJleHBfbm9fbGlibT15ZXMgOzsKKyAgICAgICopICAgIGdsX2Z1bmNfZnJleHBfbm9fbGlibT1ubzsgUkVQTEFDRV9GUkVYUD0xIDs7CisgICAgZXNhYworICBlbHNlCisgICAgZ2xfZnVuY19mcmV4cF9ub19saWJtPW5vCisgICAgICAgIFJFUExBQ0VfRlJFWFA9MQorICBmaQorICBpZiB0ZXN0ICRnbF9mdW5jX2ZyZXhwX25vX2xpYm0gPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9GUkVYUF9JTl9MSUJDIDEiID4+Y29uZmRlZnMuaAorCisgIGZpCisKKyAgaWYgdGVzdCAkZ2xfZnVuY19mcmV4cF9ub19saWJtICE9IHllczsgdGhlbgorCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgZnJleHAuJGFjX29iamV4dCIKKworICBmaQorCisKKworCisKKyAgICAgICAgICBHTlVMSUJfRlJFWFA9MQorCisKKworCisKKyRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX0ZSRVhQIDEiID4+Y29uZmRlZnMuaAorCisKKworCisKKworICAgICAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiZnJleHBsIiAiYWNfY3ZfaGF2ZV9kZWNsX2ZyZXhwbCIgIiNpbmNsdWRlIDxtYXRoLmg+CisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9mcmV4cGwiID0geHllczsgdGhlbiA6CisKK2Vsc2UKKyAgSEFWRV9ERUNMX0ZSRVhQTD0wCitmaQorCisgIGlmIHRlc3QgJEhBVkVfREVDTF9GUkVYUEwgPSAxOyB0aGVuCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGZyZXhwbCgpIGNhbiBiZSB1c2VkIHdpdGhvdXQgbGlua2luZyB3aXRoIGxpYm0iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBmcmV4cGwoKSBjYW4gYmUgdXNlZCB3aXRob3V0IGxpbmtpbmcgd2l0aCBsaWJtLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfZnJleHBsX25vX2xpYm0rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bWF0aC5oPgorICAgICAgICAgICAgIGxvbmcgZG91YmxlIHg7CitpbnQKK21haW4gKCkKK3sKK2ludCBlOyByZXR1cm4gZnJleHBsICh4LCAmZSkgPiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfZnJleHBsX25vX2xpYm09eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfZnJleHBsX25vX2xpYm09bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2ZyZXhwbF9ub19saWJtIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19mcmV4cGxfbm9fbGlibSIgPiY2OyB9CisKKyAgICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2ZyZXhwbF9ub19saWJtID0geWVzOyB0aGVuCisKKworICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgZnJleHBsIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgZnJleHBsIHdvcmtzLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfZnJleHBsX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorCisgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgYWl4IHwgYWl4WzMtNl0qIHwgYmVvcyogfCBkYXJ3aW4qIHwgaXJpeCogfCBtaW5ndyogfCBwdyopCisgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfZnJleHBsX3dvcmtzPSJndWVzc2luZyBubyI7OworICAgICAgICAgICAqKSBnbF9jdl9mdW5jX2ZyZXhwbF93b3Jrcz0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICBlc2FjCisKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisvKiBPdmVycmlkZSB0aGUgdmFsdWVzIG9mIDxmbG9hdC5oPiwgbGlrZSBkb25lIGluIGZsb2F0LmluLmguICAqLworI2lmIGRlZmluZWQgX19pMzg2X18gJiYgKGRlZmluZWQgX19CRU9TX18gfHwgZGVmaW5lZCBfX09wZW5CU0RfXykKKyMgdW5kZWYgTERCTF9NSU5fRVhQCisjIGRlZmluZSBMREJMX01JTl9FWFAgICAgKC0xNjM4MSkKKyNlbmRpZgorI2lmIGRlZmluZWQgX19pMzg2X18gJiYgZGVmaW5lZCBfX0ZyZWVCU0RfXworIyB1bmRlZiBMREJMX01JTl9FWFAKKyMgZGVmaW5lIExEQkxfTUlOX0VYUCAgICAoLTE2MzgxKQorI2VuZGlmCisjaWYgKGRlZmluZWQgX0FSQ0hfUFBDIHx8IGRlZmluZWQgX1BPV0VSKSAmJiBkZWZpbmVkIF9BSVggJiYgKExEQkxfTUFOVF9ESUcgPT0gMTA2KSAmJiBkZWZpbmVkIF9fR05VQ19fCisjIHVuZGVmIExEQkxfTUlOX0VYUAorIyBkZWZpbmUgTERCTF9NSU5fRVhQIERCTF9NSU5fRVhQCisjZW5kaWYKKyNpZiBkZWZpbmVkIF9fc2dpICYmIChMREJMX01BTlRfRElHID49IDEwNikKKyMgaWYgZGVmaW5lZCBfX0dOVUNfXworIyAgdW5kZWYgTERCTF9NSU5fRVhQCisjICBkZWZpbmUgTERCTF9NSU5fRVhQIERCTF9NSU5fRVhQCisjIGVuZGlmCisjZW5kaWYKK2V4dGVybgorI2lmZGVmIF9fY3BsdXNwbHVzCisiQyIKKyNlbmRpZgorbG9uZyBkb3VibGUgZnJleHBsIChsb25nIGRvdWJsZSwgaW50ICopOworaW50IG1haW4oKQoreworICBpbnQgcmVzdWx0ID0gMDsKKyAgdm9sYXRpbGUgbG9uZyBkb3VibGUgeDsKKyAgLyogVGVzdCBvbiBmaW5pdGUgbnVtYmVycyB0aGF0IGZhaWxzIG9uIEFJWCA1LjEuICAqLworICB4ID0gMTYuMEw7CisgIHsKKyAgICBpbnQgZXhwID0gLTk5OTk7CisgICAgZnJleHBsICh4LCAmZXhwKTsKKyAgICBpZiAoZXhwICE9IDUpCisgICAgICByZXN1bHQgfD0gMTsKKyAgfQorICAvKiBUZXN0IG9uIGZpbml0ZSBudW1iZXJzIHRoYXQgZmFpbHMgb24gTWFjIE9TIFggMTAuNCwgYmVjYXVzZSBpdHMgZnJleHBsCisgICAgIGZ1bmN0aW9uIHJldHVybnMgYW4gaW52YWxpZCAoaW5jb3JyZWN0bHkgbm9ybWFsaXplZCkgdmFsdWU6IGl0IHJldHVybnMKKyAgICAgICAgICAgICAgIHkgPSB7IDB4M2ZlMDI4ZjUsIDB4YzI4ZjVjMjgsIDB4M2M5ZWI4NTEsIDB4ZWI4NTFlYjggfQorICAgICBidXQgdGhlIGNvcnJlY3QgcmVzdWx0IGlzCisgICAgICAgICAgMC41MDVMID0geyAweDNmZTAyOGY1LCAweGMyOGY1YzI5LCAweGJjNTQ3YWUxLCAweDQ3YWUxNDgwIH0gICovCisgIHggPSAxLjAxTDsKKyAgeworICAgIGludCBleHAgPSAtOTk5OTsKKyAgICBsb25nIGRvdWJsZSB5ID0gZnJleHBsICh4LCAmZXhwKTsKKyAgICBpZiAoIShleHAgPT0gMSAmJiB5ID09IDAuNTA1TCkpCisgICAgICByZXN1bHQgfD0gMjsKKyAgfQorICAvKiBUZXN0IG9uIGxhcmdlIGZpbml0ZSBudW1iZXJzLiAgVGhpcyBmYWlscyBvbiBCZU9TIGF0IGkgPSAxNjMyMiwgd2hpbGUKKyAgICAgTERCTF9NQVhfRVhQID0gMTYzODQuCisgICAgIEluIHRoZSBsb29wIGVuZCB0ZXN0LCB3ZSB0ZXN0IHggYWdhaW5zdCBJbmZpbml0eSwgcmF0aGVyIHRoYW4gY29tcGFyaW5nCisgICAgIGkgd2l0aCBMREJMX01BWF9FWFAsIGJlY2F1c2UgQmVPUyA8ZmxvYXQuaD4gaGFzIGEgd3JvbmcgTERCTF9NQVhfRVhQLiAgKi8KKyAgeworICAgIGludCBpOworICAgIGZvciAoaSA9IDEsIHggPSAxLjBMOyB4ICE9IHggKyB4OyBpKyssIHggKj0gMi4wTCkKKyAgICAgIHsKKyAgICAgICAgaW50IGV4cCA9IC05OTk5OworICAgICAgICBmcmV4cGwgKHgsICZleHApOworICAgICAgICBpZiAoZXhwICE9IGkpCisgICAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0IHw9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICB9CisgIH0KKyAgLyogVGVzdCBvbiBkZW5vcm1hbGl6ZWQgbnVtYmVycy4gICovCisgIHsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAxLCB4ID0gMS4wTDsgaSA+PSBMREJMX01JTl9FWFA7IGktLSwgeCAqPSAwLjVMKQorICAgICAgOworICAgIGlmICh4ID4gMC4wTCkKKyAgICAgIHsKKyAgICAgICAgaW50IGV4cDsKKyAgICAgICAgbG9uZyBkb3VibGUgeSA9IGZyZXhwbCAoeCwgJmV4cCk7CisgICAgICAgIC8qIE9uIG1hY2hpbmVzIHdpdGggSUVFRTg1NCBhcml0aG1ldGljOiB4ID0gMS42ODEwNWUtNDkzMiwKKyAgICAgICAgICAgZXhwID0gLTE2MzgyLCB5ID0gMC41LiAgT24gTWFjIE9TIFggMTAuNTogZXhwID0gLTE2Mzg0LCB5ID0gMC41LiAgKi8KKyAgICAgICAgaWYgKGV4cCAhPSBMREJMX01JTl9FWFAgLSAxKQorICAgICAgICAgIHJlc3VsdCB8PSA4OworICAgICAgfQorICB9CisgIC8qIFRlc3Qgb24gaW5maW5pdGUgbnVtYmVycy4gICovCisgIHggPSAxLjBMIC8gMC4wTDsKKyAgeworICAgIGludCBleHA7CisgICAgbG9uZyBkb3VibGUgeSA9IGZyZXhwbCAoeCwgJmV4cCk7CisgICAgaWYgKHkgIT0geCkKKyAgICAgIHJlc3VsdCB8PSAxNjsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19mcmV4cGxfd29ya3M9eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfZnJleHBsX3dvcmtzPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2ZyZXhwbF93b3JrcyIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfZnJleHBsX3dvcmtzIiA+JjY7IH0KKworICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfZnJleHBsX3dvcmtzIiBpbgorICAgICAgICAqeWVzKSBnbF9mdW5jX2ZyZXhwbF9ub19saWJtPXllcyA7OworICAgICAgICAqKSAgICBnbF9mdW5jX2ZyZXhwbF9ub19saWJtPW5vOyBSRVBMQUNFX0ZSRVhQTD0xIDs7CisgICAgICBlc2FjCisgICAgZWxzZQorICAgICAgZ2xfZnVuY19mcmV4cGxfbm9fbGlibT1ubworICAgICAgICAgICAgUkVQTEFDRV9GUkVYUEw9MQorICAgIGZpCisgICAgaWYgdGVzdCAkZ2xfZnVuY19mcmV4cGxfbm9fbGlibSA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0ZSRVhQTF9JTl9MSUJDIDEiID4+Y29uZmRlZnMuaAorCisgICAgZmkKKyAgZmkKKworICBpZiB0ZXN0ICRIQVZFX0RFQ0xfRlJFWFBMID0gMCB8fCB0ZXN0ICRnbF9mdW5jX2ZyZXhwbF9ub19saWJtID0gbm87IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGZyZXhwbC4kYWNfb2JqZXh0IgorCisgIGZpCisKKworCisKKworICAgICAgICAgIEdOVUxJQl9GUkVYUEw9MQorCisKKworCisKKyRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX0ZSRVhQTCAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCisKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19fX2ZzZXRlcnIgPSBubzsgdGhlbgorCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgZnNldGVyci4kYWNfb2JqZXh0IgorCisgIGZpCisKKworCisKKyAgaWYgdGVzdCAkSEFWRV9NU1ZDX0lOVkFMSURfUEFSQU1FVEVSX0hBTkRMRVIgPSAxOyB0aGVuCisgICAgUkVQTEFDRV9GU1RBVD0xCisgIGZpCisKKworICBpZiB0ZXN0ICRXSU5ET1dTXzY0X0JJVF9TVF9TSVpFID0gMTsgdGhlbgorICAgIFJFUExBQ0VfRlNUQVQ9MQorICBmaQorCisKKworICBpZiB0ZXN0ICRSRVBMQUNFX0ZTVEFUID0gMTsgdGhlbgorCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgZnN0YXQuJGFjX29iamV4dCIKKworICAgIDoKKyAgZmkKKworCisKKworCisgICAgICAgICAgR05VTElCX0ZTVEFUPTEKKworCisKKworCiskYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9GU1RBVCAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCisKKworCisKKworCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfZ2V0ZGVsaW0gPSB5ZXM7IHRoZW4KKyAgICBIQVZFX0dFVERFTElNPTEKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd29ya2luZyBnZXRkZWxpbSBmdW5jdGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igd29ya2luZyBnZXRkZWxpbSBmdW5jdGlvbi4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX3dvcmtpbmdfZ2V0ZGVsaW0rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBlY2hvIGZvb05iYXJOIHwgdHIgLWQgJ1wwMTInIHwgdHIgTiAnXDAxMicgPiBjb25mdGVzdC5kYXRhCisgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorI2lmZGVmIF9fR05VX0xJQlJBUllfXworICNpZiAoX19HTElCQ19fID49IDIpICYmICFkZWZpbmVkIF9fVUNMSUJDX18KKyAgTHVja3kgR05VIHVzZXIKKyAjZW5kaWYKKyNlbmRpZgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJMdWNreSBHTlUgdXNlciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY193b3JraW5nX2dldGRlbGltPSJndWVzc2luZyB5ZXMiCitlbHNlCisgIGdsX2N2X2Z1bmNfd29ya2luZ19nZXRkZWxpbT0iZ3Vlc3Npbmcgbm8iCitmaQorcm0gLWYgY29uZnRlc3QqCisKKworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyMgICAgaW5jbHVkZSA8c3RkaW8uaD4KKyMgICAgaW5jbHVkZSA8c3RkbGliLmg+CisjICAgIGluY2x1ZGUgPHN0cmluZy5oPgorICAgIGludCBtYWluICgpCisgICAgeworICAgICAgRklMRSAqaW4gPSBmb3BlbiAoIi4vY29uZnRlc3QuZGF0YSIsICJyIik7CisgICAgICBpZiAoIWluKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIHsKKyAgICAgICAgLyogVGVzdCByZXN1bHQgZm9yIGEgTlVMTCBidWZmZXIgYW5kIGEgemVybyBzaXplLgorICAgICAgICAgICBCYXNlZCBvbiBhIHRlc3QgcHJvZ3JhbSBmcm9tIEthcmwgSGV1ZXIuICAqLworICAgICAgICBjaGFyICpsaW5lID0gTlVMTDsKKyAgICAgICAgc2l6ZV90IHNpeiA9IDA7CisgICAgICAgIGludCBsZW4gPSBnZXRkZWxpbSAoJmxpbmUsICZzaXosICdcbicsIGluKTsKKyAgICAgICAgaWYgKCEobGVuID09IDQgJiYgbGluZSAmJiBzdHJjbXAgKGxpbmUsICJmb29cbiIpID09IDApKQorICAgICAgICAgIHJldHVybiAyOworICAgICAgfQorICAgICAgeworICAgICAgICAvKiBUZXN0IHJlc3VsdCBmb3IgYSBOVUxMIGJ1ZmZlciBhbmQgYSBub24temVybyBzaXplLgorICAgICAgICAgICBUaGlzIGNyYXNoZXMgb24gRnJlZUJTRCA4LjAuICAqLworICAgICAgICBjaGFyICpsaW5lID0gTlVMTDsKKyAgICAgICAgc2l6ZV90IHNpeiA9IChzaXplX3QpKH4wKSAvIDQ7CisgICAgICAgIGlmIChnZXRkZWxpbSAoJmxpbmUsICZzaXosICdcbicsIGluKSA9PSAtMSkKKyAgICAgICAgICByZXR1cm4gMzsKKyAgICAgIH0KKyAgICAgIHJldHVybiAwOworICAgIH0KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY193b3JraW5nX2dldGRlbGltPXllcworZWxzZQorICBnbF9jdl9mdW5jX3dvcmtpbmdfZ2V0ZGVsaW09bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3dvcmtpbmdfZ2V0ZGVsaW0iID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX3dvcmtpbmdfZ2V0ZGVsaW0iID4mNjsgfQorICAgIGNhc2UgIiRnbF9jdl9mdW5jX3dvcmtpbmdfZ2V0ZGVsaW0iIGluCisgICAgICAqbm8pCisgICAgICAgIFJFUExBQ0VfR0VUREVMSU09MQorICAgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIEhBVkVfR0VUREVMSU09MAorICBmaQorCisgIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9nZXRkZWxpbSA9IG5vOyB0aGVuCisgICAgSEFWRV9ERUNMX0dFVERFTElNPTAKKyAgZmkKKworICBpZiB0ZXN0ICRIQVZFX0dFVERFTElNID0gMCB8fCB0ZXN0ICRSRVBMQUNFX0dFVERFTElNID0gMTsgdGhlbgorCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgZ2V0ZGVsaW0uJGFjX29iamV4dCIKKworCisgIGZvciBhY19mdW5jIGluIGZsb2NrZmlsZSBmdW5sb2NrZmlsZQorZG8gOgorICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKyAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiZ2V0Y191bmxvY2tlZCIgImFjX2N2X2hhdmVfZGVjbF9nZXRjX3VubG9ja2VkIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9nZXRjX3VubG9ja2VkIiA9IHh5ZXM7IHRoZW4gOgorICBhY19oYXZlX2RlY2w9MQorZWxzZQorICBhY19oYXZlX2RlY2w9MAorZmkKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfR0VUQ19VTkxPQ0tFRCAkYWNfaGF2ZV9kZWNsCitfQUNFT0YKKworCisgIGZpCisKKworCisKKworICAgICAgICAgIEdOVUxJQl9HRVRERUxJTT0xCisKKworCisKKworJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfR0VUREVMSU0gMSIgPj5jb25mZGVmcy5oCisKKworCisKKworCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfZ2V0ZHRhYmxlc2l6ZSAhPSB5ZXM7IHRoZW4KKyAgICBIQVZFX0dFVERUQUJMRVNJWkU9MAorICBmaQorCisgIGlmIHRlc3QgJEhBVkVfR0VURFRBQkxFU0laRSA9IDA7IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGdldGR0YWJsZXNpemUuJGFjX29iamV4dCIKKworICAgIDoKKyAgZmkKKworCisKKworCisgICAgICAgICAgR05VTElCX0dFVERUQUJMRVNJWkU9MQorCisKKworCisKKyRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX0dFVERUQUJMRVNJWkUgMSIgPj5jb25mZGVmcy5oCisKKworCisKKworCisKKworCisKKyAgZ2xfZ2V0bGluZV9uZWVkc19ydW5fdGltZV9jaGVjaz1ubworICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnZXRsaW5lIiAiYWNfY3ZfZnVuY19nZXRsaW5lIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2dldGxpbmUiID0geHllczsgdGhlbiA6CisgICAgICAgICAgICAgICAgICAgZ2xfZ2V0bGluZV9uZWVkc19ydW5fdGltZV9jaGVjaz15ZXMKK2Vsc2UKKyAgYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9bm8KK2ZpCisKKyAgaWYgdGVzdCAkZ2xfZ2V0bGluZV9uZWVkc19ydW5fdGltZV9jaGVjayA9IHllczsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdvcmtpbmcgZ2V0bGluZSBmdW5jdGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igd29ya2luZyBnZXRsaW5lIGZ1bmN0aW9uLi4uICIgPiY2OyB9CitpZiAke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZWNobyBmb29OYmFyTiB8IHRyIC1kICdcMDEyJyB8IHRyIE4gJ1wwMTInID4gY29uZnRlc3QuZGF0YQorICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpZmRlZiBfX0dOVV9MSUJSQVJZX18KKyAjaWYgKF9fR0xJQkNfXyA+PSAyKSAmJiAhZGVmaW5lZCBfX1VDTElCQ19fCisgIEx1Y2t5IEdOVSB1c2VyCisgI2VuZGlmCisjZW5kaWYKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiTHVja3kgR05VIHVzZXIiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGFtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSJndWVzc2luZyB5ZXMiCitlbHNlCisgIGFtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSJndWVzc2luZyBubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKKworCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworIyAgICBpbmNsdWRlIDxzdGRpby5oPgorIyAgICBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgICAgaW5jbHVkZSA8c3RyaW5nLmg+CisgICAgaW50IG1haW4gKCkKKyAgICB7CisgICAgICBGSUxFICppbiA9IGZvcGVuICgiLi9jb25mdGVzdC5kYXRhIiwgInIiKTsKKyAgICAgIGlmICghaW4pCisgICAgICAgIHJldHVybiAxOworICAgICAgeworICAgICAgICAvKiBUZXN0IHJlc3VsdCBmb3IgYSBOVUxMIGJ1ZmZlciBhbmQgYSB6ZXJvIHNpemUuCisgICAgICAgICAgIEJhc2VkIG9uIGEgdGVzdCBwcm9ncmFtIGZyb20gS2FybCBIZXVlci4gICovCisgICAgICAgIGNoYXIgKmxpbmUgPSBOVUxMOworICAgICAgICBzaXplX3Qgc2l6ID0gMDsKKyAgICAgICAgaW50IGxlbiA9IGdldGxpbmUgKCZsaW5lLCAmc2l6LCBpbik7CisgICAgICAgIGlmICghKGxlbiA9PSA0ICYmIGxpbmUgJiYgc3RyY21wIChsaW5lLCAiZm9vXG4iKSA9PSAwKSkKKyAgICAgICAgICByZXR1cm4gMjsKKyAgICAgIH0KKyAgICAgIHsKKyAgICAgICAgLyogVGVzdCByZXN1bHQgZm9yIGEgTlVMTCBidWZmZXIgYW5kIGEgbm9uLXplcm8gc2l6ZS4KKyAgICAgICAgICAgVGhpcyBjcmFzaGVzIG9uIEZyZWVCU0QgOC4wLiAgKi8KKyAgICAgICAgY2hhciAqbGluZSA9IE5VTEw7CisgICAgICAgIHNpemVfdCBzaXogPSAoc2l6ZV90KSh+MCkgLyA0OworICAgICAgICBpZiAoZ2V0bGluZSAoJmxpbmUsICZzaXosIGluKSA9PSAtMSkKKyAgICAgICAgICByZXR1cm4gMzsKKyAgICAgIH0KKyAgICAgIHJldHVybiAwOworICAgIH0KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzCitlbHNlCisgIGFtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmUiID4mNQorJGFzX2VjaG8gIiRhbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZSIgPiY2OyB9CisgIGZpCisKKyAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX2dldGxpbmUgPSBubzsgdGhlbgorICAgIEhBVkVfREVDTF9HRVRMSU5FPTAKKyAgZmkKKworICBjYXNlICIkYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmUiIGluCisgICAgKm5vKQorICAgICAgICAgICAgICAgICAgICAgICAgUkVQTEFDRV9HRVRMSU5FPTEKKyAgICAgIDs7CisgIGVzYWMKKworICBpZiB0ZXN0ICRSRVBMQUNFX0dFVExJTkUgPSAxOyB0aGVuCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBnZXRsaW5lLiRhY19vYmpleHQiCisKKworICA6CisKKyAgZmkKKworCisKKworCisgICAgICAgICAgR05VTElCX0dFVExJTkU9MQorCisKKworCisKKyRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX0dFVExJTkUgMSIgPj5jb25mZGVmcy5oCisKKworCisKKworCisKKworICBpZiB0ZXN0ICRSRVBMQUNFX0dFVE9QVCA9IDE7IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGdldG9wdC4kYWNfb2JqZXh0IgorCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBnZXRvcHQxLiRhY19vYmpleHQiCisKKworCisKKyAgICAgICAgR05VTElCX0dMX1VOSVNURF9IX0dFVE9QVD0xCisgIGZpCisKKworCiskYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9HRVRPUFRfR05VIDEiID4+Y29uZmRlZnMuaAorCisKKworCisKKworCisgICAgUkVQTEFDRV9HRVRPUFQ9MAorICAgIGlmIHRlc3QgLW4gIiRnbF9yZXBsYWNlX2dldG9wdCI7IHRoZW4KKyAgICAgIFJFUExBQ0VfR0VUT1BUPTEKKyAgICBmaQorCisgIGlmIHRlc3QgJFJFUExBQ0VfR0VUT1BUID0gMTsgdGhlbgorCisgIEdFVE9QVF9IPWdldG9wdC5oCisKKyRhc19lY2hvICIjZGVmaW5lIF9fR0VUT1BUX1BSRUZJWCBycGxfIiA+PmNvbmZkZWZzLmgKKworCisKKyAgZmkKKworICBpZiB0ZXN0ICRSRVBMQUNFX0dFVE9QVCA9IDE7IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGdldG9wdC4kYWNfb2JqZXh0IgorCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBnZXRvcHQxLiRhY19vYmpleHQiCisKKworCisKKyAgICAgICAgR05VTElCX0dMX1VOSVNURF9IX0dFVE9QVD0xCisgIGZpCisKKworCisKKyAgIyBBdXRvY29uZiAyLjYxYS45OSBhbmQgZWFybGllciBkb24ndCBzdXBwb3J0IGxpbmtpbmcgYSBmaWxlIG9ubHkKKyAgIyBpbiBWUEFUSCBidWlsZHMuICBCdXQgc2luY2UgR05VbWFrZWZpbGUgaXMgZm9yIG1haW50YWluZXIgdXNlCisgICMgb25seSwgaXQgZG9lcyBub3QgbWF0dGVyIGlmIHdlIHNraXAgdGhlIGxpbmsgd2l0aCBvbGRlciBhdXRvY29uZi4KKyAgIyBBdXRvbWFrZSAxLjEwLjEgYW5kIGVhcmxpZXIgdHJ5IHRvIHJlbW92ZSBHTlVtYWtlZmlsZSBpbiBub24tVlBBVEgKKyAgIyBidWlsZHMsIHNvIHVzZSBhIHNoZWxsIHZhcmlhYmxlIHRvIGJ5cGFzcyB0aGlzLgorICBHTlVtYWtlZmlsZT1HTlVtYWtlZmlsZQorICBhY19jb25maWdfbGlua3M9IiRhY19jb25maWdfbGlua3MgJEdOVW1ha2VmaWxlOiRHTlVtYWtlZmlsZSIKKworCisKKworCisKKyAgUFJJUFRSX1BSRUZJWD0KKyAgaWYgdGVzdCAtbiAiJFNURElOVF9IIjsgdGhlbgorICAgICAgICBQUklQVFJfUFJFRklYPScibCInCisgIGVsc2UKKyAgICAgICAgZm9yIGdscGZ4IGluICcnIGwgbGwgSTY0OyBkbworICAgICAgY2FzZSAkZ2xwZnggaW4KKyAgICAgICAgJycpICBnbHR5cGUxPSdpbnQnOzsKKyAgICAgICAgbCkgICBnbHR5cGUxPSdsb25nIGludCc7OworICAgICAgICBsbCkgIGdsdHlwZTE9J2xvbmcgbG9uZyBpbnQnOzsKKyAgICAgICAgSTY0KSBnbHR5cGUxPSdfX2ludDY0Jzs7CisgICAgICBlc2FjCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkaW50Lmg+CisgICAgICAgICAgIGV4dGVybiBpbnRwdHJfdCBmb287CisgICAgICAgICAgIGV4dGVybiAkZ2x0eXBlMSBmb287CitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIFBSSVBUUl9QUkVGSVg9JyInJGdscGZ4JyInCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICB0ZXN0IC1uICIkUFJJUFRSX1BSRUZJWCIgJiYgYnJlYWsKKyAgICBkb25lCisgIGZpCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBJTlQzMl9NQVggPCBJTlRNQVhfTUFYIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgSU5UMzJfTUFYIDwgSU5UTUFYX01BWC4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl90ZXN0X0lOVDMyX01BWF9MVF9JTlRNQVhfTUFYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworLyogV29yayBhbHNvIGluIEMrKyBtb2RlLiAgKi8KKyAgICAgICAgICAgICNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyAxCisKKyAgICAgICAgICAgIC8qIFdvcmsgaWYgYnVpbGQgaXMgbm90IGNsZWFuLiAgKi8KKyAgICAgICAgICAgICNkZWZpbmUgX0dMX0pVU1RfSU5DTFVERV9TWVNURU1fU1RESU5UX0gKKworICAgICAgICAgICAgI2luY2x1ZGUgPGxpbWl0cy5oPgorICAgICAgICAgICAgI2lmIEhBVkVfU1RESU5UX0gKKyAgICAgICAgICAgICAjaW5jbHVkZSA8c3RkaW50Lmg+CisgICAgICAgICAgICAjZW5kaWYKKworICAgICAgICAgICAgI2lmIGRlZmluZWQgSU5UMzJfTUFYICYmIGRlZmluZWQgSU5UTUFYX01BWAorICAgICAgICAgICAgICNkZWZpbmUgQ09ORElUSU9OIChJTlQzMl9NQVggPCBJTlRNQVhfTUFYKQorICAgICAgICAgICAgI2VsaWYgSEFWRV9MT05HX0xPTkdfSU5UCisgICAgICAgICAgICAgI2RlZmluZSBDT05ESVRJT04gKHNpemVvZiAoaW50KSA8IHNpemVvZiAobG9uZyBsb25nIGludCkpCisgICAgICAgICAgICAjZWxzZQorICAgICAgICAgICAgICNkZWZpbmUgQ09ORElUSU9OIDAKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgaW50IHRlc3RbQ09ORElUSU9OID8gMSA6IC0xXTsKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfdGVzdF9JTlQzMl9NQVhfTFRfSU5UTUFYX01BWD15ZXMKK2Vsc2UKKyAgZ2xfY3ZfdGVzdF9JTlQzMl9NQVhfTFRfSU5UTUFYX01BWD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfdGVzdF9JTlQzMl9NQVhfTFRfSU5UTUFYX01BWCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X3Rlc3RfSU5UMzJfTUFYX0xUX0lOVE1BWF9NQVgiID4mNjsgfQorICBpZiB0ZXN0ICRnbF9jdl90ZXN0X0lOVDMyX01BWF9MVF9JTlRNQVhfTUFYID0geWVzOyB0aGVuCisgICAgSU5UMzJfTUFYX0xUX0lOVE1BWF9NQVg9MTsKKyAgZWxzZQorICAgIElOVDMyX01BWF9MVF9JTlRNQVhfTUFYPTA7CisgIGZpCisKKworICBpZiB0ZXN0ICRBUFBMRV9VTklWRVJTQUxfQlVJTEQgPSAwOyB0aGVuCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIElOVDY0X01BWCA9PSBMT05HX01BWCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIElOVDY0X01BWCA9PSBMT05HX01BWC4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl90ZXN0X0lOVDY0X01BWF9FUV9MT05HX01BWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy8qIFdvcmsgYWxzbyBpbiBDKysgbW9kZS4gICovCisgICAgICAgICAgICAjZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgMQorCisgICAgICAgICAgICAvKiBXb3JrIGlmIGJ1aWxkIGlzIG5vdCBjbGVhbi4gICovCisgICAgICAgICAgICAjZGVmaW5lIF9HTF9KVVNUX0lOQ0xVREVfU1lTVEVNX1NURElOVF9ICisKKyAgICAgICAgICAgICNpbmNsdWRlIDxsaW1pdHMuaD4KKyAgICAgICAgICAgICNpZiBIQVZFX1NURElOVF9ICisgICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGludC5oPgorICAgICAgICAgICAgI2VuZGlmCisKKyAgICAgICAgICAgICNpZiBkZWZpbmVkIElOVDY0X01BWAorICAgICAgICAgICAgICNkZWZpbmUgQ09ORElUSU9OIChJTlQ2NF9NQVggPT0gTE9OR19NQVgpCisgICAgICAgICAgICAjZWxpZiBIQVZFX0xPTkdfTE9OR19JTlQKKyAgICAgICAgICAgICAjZGVmaW5lIENPTkRJVElPTiAoc2l6ZW9mIChsb25nIGxvbmcgaW50KSA9PSBzaXplb2YgKGxvbmcgaW50KSkKKyAgICAgICAgICAgICNlbHNlCisgICAgICAgICAgICAgI2RlZmluZSBDT05ESVRJT04gMAorICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICBpbnQgdGVzdFtDT05ESVRJT04gPyAxIDogLTFdOworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl90ZXN0X0lOVDY0X01BWF9FUV9MT05HX01BWD15ZXMKK2Vsc2UKKyAgZ2xfY3ZfdGVzdF9JTlQ2NF9NQVhfRVFfTE9OR19NQVg9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X3Rlc3RfSU5UNjRfTUFYX0VRX0xPTkdfTUFYIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfdGVzdF9JTlQ2NF9NQVhfRVFfTE9OR19NQVgiID4mNjsgfQorICBpZiB0ZXN0ICRnbF9jdl90ZXN0X0lOVDY0X01BWF9FUV9MT05HX01BWCA9IHllczsgdGhlbgorICAgIElOVDY0X01BWF9FUV9MT05HX01BWD0xOworICBlbHNlCisgICAgSU5UNjRfTUFYX0VRX0xPTkdfTUFYPTA7CisgIGZpCisKKworICBlbHNlCisgICAgSU5UNjRfTUFYX0VRX0xPTkdfTUFYPS0xCisgIGZpCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIFVJTlQzMl9NQVggPCBVSU5UTUFYX01BWCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIFVJTlQzMl9NQVggPCBVSU5UTUFYX01BWC4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl90ZXN0X1VJTlQzMl9NQVhfTFRfVUlOVE1BWF9NQVgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisvKiBXb3JrIGFsc28gaW4gQysrIG1vZGUuICAqLworICAgICAgICAgICAgI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDEKKworICAgICAgICAgICAgLyogV29yayBpZiBidWlsZCBpcyBub3QgY2xlYW4uICAqLworICAgICAgICAgICAgI2RlZmluZSBfR0xfSlVTVF9JTkNMVURFX1NZU1RFTV9TVERJTlRfSAorCisgICAgICAgICAgICAjaW5jbHVkZSA8bGltaXRzLmg+CisgICAgICAgICAgICAjaWYgSEFWRV9TVERJTlRfSAorICAgICAgICAgICAgICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAgICAgICAgICAgICNlbmRpZgorCisgICAgICAgICAgICAjaWYgZGVmaW5lZCBVSU5UMzJfTUFYICYmIGRlZmluZWQgVUlOVE1BWF9NQVgKKyAgICAgICAgICAgICAjZGVmaW5lIENPTkRJVElPTiAoVUlOVDMyX01BWCA8IFVJTlRNQVhfTUFYKQorICAgICAgICAgICAgI2VsaWYgSEFWRV9MT05HX0xPTkdfSU5UCisgICAgICAgICAgICAgI2RlZmluZSBDT05ESVRJT04gKHNpemVvZiAodW5zaWduZWQgaW50KSA8IHNpemVvZiAodW5zaWduZWQgbG9uZyBsb25nIGludCkpCisgICAgICAgICAgICAjZWxzZQorICAgICAgICAgICAgICNkZWZpbmUgQ09ORElUSU9OIDAKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgaW50IHRlc3RbQ09ORElUSU9OID8gMSA6IC0xXTsKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfdGVzdF9VSU5UMzJfTUFYX0xUX1VJTlRNQVhfTUFYPXllcworZWxzZQorICBnbF9jdl90ZXN0X1VJTlQzMl9NQVhfTFRfVUlOVE1BWF9NQVg9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X3Rlc3RfVUlOVDMyX01BWF9MVF9VSU5UTUFYX01BWCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X3Rlc3RfVUlOVDMyX01BWF9MVF9VSU5UTUFYX01BWCIgPiY2OyB9CisgIGlmIHRlc3QgJGdsX2N2X3Rlc3RfVUlOVDMyX01BWF9MVF9VSU5UTUFYX01BWCA9IHllczsgdGhlbgorICAgIFVJTlQzMl9NQVhfTFRfVUlOVE1BWF9NQVg9MTsKKyAgZWxzZQorICAgIFVJTlQzMl9NQVhfTFRfVUlOVE1BWF9NQVg9MDsKKyAgZmkKKworCisgIGlmIHRlc3QgJEFQUExFX1VOSVZFUlNBTF9CVUlMRCA9IDA7IHRoZW4KKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgVUlOVDY0X01BWCA9PSBVTE9OR19NQVgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBVSU5UNjRfTUFYID09IFVMT05HX01BWC4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl90ZXN0X1VJTlQ2NF9NQVhfRVFfVUxPTkdfTUFYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworLyogV29yayBhbHNvIGluIEMrKyBtb2RlLiAgKi8KKyAgICAgICAgICAgICNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyAxCisKKyAgICAgICAgICAgIC8qIFdvcmsgaWYgYnVpbGQgaXMgbm90IGNsZWFuLiAgKi8KKyAgICAgICAgICAgICNkZWZpbmUgX0dMX0pVU1RfSU5DTFVERV9TWVNURU1fU1RESU5UX0gKKworICAgICAgICAgICAgI2luY2x1ZGUgPGxpbWl0cy5oPgorICAgICAgICAgICAgI2lmIEhBVkVfU1RESU5UX0gKKyAgICAgICAgICAgICAjaW5jbHVkZSA8c3RkaW50Lmg+CisgICAgICAgICAgICAjZW5kaWYKKworICAgICAgICAgICAgI2lmIGRlZmluZWQgVUlOVDY0X01BWAorICAgICAgICAgICAgICNkZWZpbmUgQ09ORElUSU9OIChVSU5UNjRfTUFYID09IFVMT05HX01BWCkKKyAgICAgICAgICAgICNlbGlmIEhBVkVfTE9OR19MT05HX0lOVAorICAgICAgICAgICAgICNkZWZpbmUgQ09ORElUSU9OIChzaXplb2YgKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpID09IHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKQorICAgICAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICAjZGVmaW5lIENPTkRJVElPTiAwCisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgIGludCB0ZXN0W0NPTkRJVElPTiA/IDEgOiAtMV07CitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X3Rlc3RfVUlOVDY0X01BWF9FUV9VTE9OR19NQVg9eWVzCitlbHNlCisgIGdsX2N2X3Rlc3RfVUlOVDY0X01BWF9FUV9VTE9OR19NQVg9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X3Rlc3RfVUlOVDY0X01BWF9FUV9VTE9OR19NQVgiID4mNQorJGFzX2VjaG8gIiRnbF9jdl90ZXN0X1VJTlQ2NF9NQVhfRVFfVUxPTkdfTUFYIiA+JjY7IH0KKyAgaWYgdGVzdCAkZ2xfY3ZfdGVzdF9VSU5UNjRfTUFYX0VRX1VMT05HX01BWCA9IHllczsgdGhlbgorICAgIFVJTlQ2NF9NQVhfRVFfVUxPTkdfTUFYPTE7CisgIGVsc2UKKyAgICBVSU5UNjRfTUFYX0VRX1VMT05HX01BWD0wOworICBmaQorCisKKyAgZWxzZQorICAgIFVJTlQ2NF9NQVhfRVFfVUxPTkdfTUFYPS0xCisgIGZpCisKKworCisKKworCisKKworCisgICMgSWYgd2UgcmVwbGFjZWQgYW55IG9mIHRoZSB1bmRlcmx5aW5nIGlzbmFuKiBmdW5jdGlvbnMsIHJlcGxhY2UKKyAgIyB0aGUgaXNuYW4gbWFjcm87IGl0IHVuZG91YnRlZGx5IHN1ZmZlcnMgZnJvbSB0aGUgc2FtZSBmbGF3cy4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGlzbmFuIG1hY3JvIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgaXNuYW4gbWFjcm8gd29ya3MuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAkZ2xfZnVuY19pc25hbmYgPSB5ZXMgXAorICAgICAmJiB0ZXN0ICRnbF9mdW5jX2lzbmFuZCA9IHllcyBcCisgICAgICYmIHRlc3QgJGdsX2Z1bmNfaXNuYW5sID0geWVzOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBJU05BTl9MSUJNPQorICAgICAgICBjYXNlICIgJElTTkFOX0xJQk0gIiBpbgorICAgICAgKiIgJElTTkFORl9MSUJNICIqKSA7OworICAgICAgKikgSVNOQU5fTElCTT0iJElTTkFOX0xJQk0gJElTTkFORl9MSUJNIiA7OworICAgIGVzYWMKKyAgICAgICAgY2FzZSAiICRJU05BTl9MSUJNICIgaW4KKyAgICAgICoiICRJU05BTkRfTElCTSAiKikgOzsKKyAgICAgICopIElTTkFOX0xJQk09IiRJU05BTl9MSUJNICRJU05BTkRfTElCTSIgOzsKKyAgICBlc2FjCisgICAgICAgIGNhc2UgIiAkSVNOQU5fTElCTSAiIGluCisgICAgICAqIiAkSVNOQU5MX0xJQk0gIiopIDs7CisgICAgICAqKSBJU05BTl9MSUJNPSIkSVNOQU5fTElCTSAkSVNOQU5MX0xJQk0iIDs7CisgICAgZXNhYworICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICAgIFJFUExBQ0VfSVNOQU49MQorICAgIElTTkFOX0xJQk09CisgIGZpCisKKworCisKKworCisKKyAgICAgICAgICBHTlVMSUJfSVNOQU49MQorCisKKworCisKKyRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX0lTTkFOIDEiID4+Y29uZmRlZnMuaAorCisKKworCisKKyAgSVNOQU5EX0xJQk09CisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGlzbmFuKGRvdWJsZSkgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGlzbmFuKGRvdWJsZSkgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibS4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX2lzbmFuZF9ub19saWJtKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPG1hdGguaD4KKyAgICAgICAgICAgICAjaWYgX19HTlVDX18gPj0gNAorICAgICAgICAgICAgICMgdW5kZWYgaXNuYW5kCisgICAgICAgICAgICAgIyBkZWZpbmUgaXNuYW5kKHgpIF9fYnVpbHRpbl9pc25hbiAoKGRvdWJsZSkoeCkpCisgICAgICAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICAjIHVuZGVmIGlzbmFuZAorICAgICAgICAgICAgICMgZGVmaW5lIGlzbmFuZCh4KSBpc25hbiAoKGRvdWJsZSkoeCkpCisgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgZG91YmxlIHg7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBpc25hbmQgKHgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfaXNuYW5kX25vX2xpYm09eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfaXNuYW5kX25vX2xpYm09bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2lzbmFuZF9ub19saWJtIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19pc25hbmRfbm9fbGlibSIgPiY2OyB9CisKKyAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19pc25hbmRfbm9fbGlibSA9IG5vOyB0aGVuCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGlzbmFuKGRvdWJsZSkgY2FuIGJlIHVzZWQgd2l0aCBsaWJtIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgaXNuYW4oZG91YmxlKSBjYW4gYmUgdXNlZCB3aXRoIGxpYm0uLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19pc25hbmRfaW5fbGlibSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgICBMSUJTPSIkTElCUyAtbG0iCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bWF0aC5oPgorICAgICAgICAgICAgICNpZiBfX0dOVUNfXyA+PSA0CisgICAgICAgICAgICAgIyB1bmRlZiBpc25hbmQKKyAgICAgICAgICAgICAjIGRlZmluZSBpc25hbmQoeCkgX19idWlsdGluX2lzbmFuICgoZG91YmxlKSh4KSkKKyAgICAgICAgICAgICAjZWxpZiBkZWZpbmVkIGlzbmFuCisgICAgICAgICAgICAgIyB1bmRlZiBpc25hbmQKKyAgICAgICAgICAgICAjIGRlZmluZSBpc25hbmQoeCkgaXNuYW4gKChkb3VibGUpKHgpKQorICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgIGRvdWJsZSB4OworaW50CittYWluICgpCit7CityZXR1cm4gaXNuYW5kICh4KTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX2lzbmFuZF9pbl9saWJtPXllcworZWxzZQorICBnbF9jdl9mdW5jX2lzbmFuZF9pbl9saWJtPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgIExJQlM9IiRzYXZlX0xJQlMiCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfaXNuYW5kX2luX2xpYm0iID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2lzbmFuZF9pbl9saWJtIiA+JjY7IH0KKworICAgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfaXNuYW5kX2luX2xpYm0gPSB5ZXM7IHRoZW4KKyAgICAgIElTTkFORF9MSUJNPS1sbQorICAgIGZpCisgIGZpCisgICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19pc25hbmRfbm9fbGlibSA9IHllcyBcCisgICAgIHx8IHRlc3QgJGdsX2N2X2Z1bmNfaXNuYW5kX2luX2xpYm0gPSB5ZXM7IHRoZW4KKyAgICBnbF9mdW5jX2lzbmFuZD15ZXMKKyAgZWxzZQorICAgIGdsX2Z1bmNfaXNuYW5kPW5vCisgICAgSEFWRV9JU05BTkQ9MAorICBmaQorCisKKworCisKKyAgaWYgdGVzdCAkSEFWRV9JU05BTkQgPSAwIHx8IHRlc3QgJFJFUExBQ0VfSVNOQU4gPSAxOyB0aGVuCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBpc25hbmQuJGFjX29iamV4dCIKKworCisKKworICBmaQorCisKKworCisKKyAgICAgICAgICBHTlVMSUJfSVNOQU5EPTEKKworCisKKworCiskYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9JU05BTkQgMSIgPj5jb25mZGVmcy5oCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgaXNuYW4oZG91YmxlKSBjYW4gYmUgdXNlZCB3aXRob3V0IGxpbmtpbmcgd2l0aCBsaWJtIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgaXNuYW4oZG91YmxlKSBjYW4gYmUgdXNlZCB3aXRob3V0IGxpbmtpbmcgd2l0aCBsaWJtLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfaXNuYW5kX25vX2xpYm0rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bWF0aC5oPgorICAgICAgICAgICAgICNpZiBfX0dOVUNfXyA+PSA0CisgICAgICAgICAgICAgIyB1bmRlZiBpc25hbmQKKyAgICAgICAgICAgICAjIGRlZmluZSBpc25hbmQoeCkgX19idWlsdGluX2lzbmFuICgoZG91YmxlKSh4KSkKKyAgICAgICAgICAgICAjZWxzZQorICAgICAgICAgICAgICMgdW5kZWYgaXNuYW5kCisgICAgICAgICAgICAgIyBkZWZpbmUgaXNuYW5kKHgpIGlzbmFuICgoZG91YmxlKSh4KSkKKyAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICBkb3VibGUgeDsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGlzbmFuZCAoeCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19pc25hbmRfbm9fbGlibT15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19pc25hbmRfbm9fbGlibT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfaXNuYW5kX25vX2xpYm0iID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2lzbmFuZF9ub19saWJtIiA+JjY7IH0KKworICBnbF9mdW5jX2lzbmFuZF9ub19saWJtPSRnbF9jdl9mdW5jX2lzbmFuZF9ub19saWJtCisgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfaXNuYW5kX25vX2xpYm0gPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9JU05BTkRfSU5fTElCQyAxIiA+PmNvbmZkZWZzLmgKKworICBmaQorCisgIGlmIHRlc3QgJGdsX2Z1bmNfaXNuYW5kX25vX2xpYm0gIT0geWVzOyB0aGVuCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBpc25hbmQuJGFjX29iamV4dCIKKworCisKKworICBmaQorCisKKyAgSVNOQU5GX0xJQk09CisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGlzbmFuKGZsb2F0KSBjYW4gYmUgdXNlZCB3aXRob3V0IGxpbmtpbmcgd2l0aCBsaWJtIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgaXNuYW4oZmxvYXQpIGNhbiBiZSB1c2VkIHdpdGhvdXQgbGlua2luZyB3aXRoIGxpYm0uLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19pc25hbmZfbm9fbGlibSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxtYXRoLmg+CisgICAgICAgICAgICAgI2lmIF9fR05VQ19fID49IDQKKyAgICAgICAgICAgICAjIHVuZGVmIGlzbmFuZgorICAgICAgICAgICAgICMgZGVmaW5lIGlzbmFuZih4KSBfX2J1aWx0aW5faXNuYW5mICgoZmxvYXQpKHgpKQorICAgICAgICAgICAgICNlbGlmIGRlZmluZWQgaXNuYW4KKyAgICAgICAgICAgICAjIHVuZGVmIGlzbmFuZgorICAgICAgICAgICAgICMgZGVmaW5lIGlzbmFuZih4KSBpc25hbiAoKGZsb2F0KSh4KSkKKyAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICBmbG9hdCB4OworaW50CittYWluICgpCit7CityZXR1cm4gaXNuYW5mICh4KTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX2lzbmFuZl9ub19saWJtPXllcworZWxzZQorICBnbF9jdl9mdW5jX2lzbmFuZl9ub19saWJtPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19pc25hbmZfbm9fbGlibSIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfaXNuYW5mX25vX2xpYm0iID4mNjsgfQorCisgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfaXNuYW5mX25vX2xpYm0gPSBubzsgdGhlbgorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBpc25hbihmbG9hdCkgY2FuIGJlIHVzZWQgd2l0aCBsaWJtIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgaXNuYW4oZmxvYXQpIGNhbiBiZSB1c2VkIHdpdGggbGlibS4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX2lzbmFuZl9pbl9saWJtKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgIExJQlM9IiRMSUJTIC1sbSIKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxtYXRoLmg+CisgICAgICAgICAgICAgI2lmIF9fR05VQ19fID49IDQKKyAgICAgICAgICAgICAjIHVuZGVmIGlzbmFuZgorICAgICAgICAgICAgICMgZGVmaW5lIGlzbmFuZih4KSBfX2J1aWx0aW5faXNuYW5mICgoZmxvYXQpKHgpKQorICAgICAgICAgICAgICNlbGlmIGRlZmluZWQgaXNuYW4KKyAgICAgICAgICAgICAjIHVuZGVmIGlzbmFuZgorICAgICAgICAgICAgICMgZGVmaW5lIGlzbmFuZih4KSBpc25hbiAoKGZsb2F0KSh4KSkKKyAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICBmbG9hdCB4OworaW50CittYWluICgpCit7CityZXR1cm4gaXNuYW5mICh4KTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX2lzbmFuZl9pbl9saWJtPXllcworZWxzZQorICBnbF9jdl9mdW5jX2lzbmFuZl9pbl9saWJtPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgIExJQlM9IiRzYXZlX0xJQlMiCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfaXNuYW5mX2luX2xpYm0iID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2lzbmFuZl9pbl9saWJtIiA+JjY7IH0KKworICAgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfaXNuYW5mX2luX2xpYm0gPSB5ZXM7IHRoZW4KKyAgICAgIElTTkFORl9MSUJNPS1sbQorICAgIGZpCisgIGZpCisgICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19pc25hbmZfbm9fbGlibSA9IHllcyBcCisgICAgIHx8IHRlc3QgJGdsX2N2X2Z1bmNfaXNuYW5mX2luX2xpYm0gPSB5ZXM7IHRoZW4KKyAgICBzYXZlX0xJQlM9IiRMSUJTIgorICAgIExJQlM9IiRMSUJTICRJU05BTkZfTElCTSIKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGlzbmFuKGZsb2F0KSB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGlzbmFuKGZsb2F0KSB3b3Jrcy4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX2lzbmFuZl93b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgIGlyaXgqIHwgc29sYXJpcyopIGdsX2N2X2Z1bmNfaXNuYW5mX3dvcmtzPSJndWVzc2luZyBubyI7OworICAgICAgICAgICAqKSAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX2lzbmFuZl93b3Jrcz0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICBlc2FjCisKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorI2lmIF9fR05VQ19fID49IDQKKyMgdW5kZWYgaXNuYW5mCisjIGRlZmluZSBpc25hbmYoeCkgX19idWlsdGluX2lzbmFuZiAoKGZsb2F0KSh4KSkKKyNlbGlmIGRlZmluZWQgaXNuYW4KKyMgdW5kZWYgaXNuYW5mCisjIGRlZmluZSBpc25hbmYoeCkgaXNuYW4gKChmbG9hdCkoeCkpCisjZW5kaWYKKy8qIFRoZSBDb21wYXEgKGV4LURFQykgQyA2LjQgY29tcGlsZXIgY2hva2VzIG9uIHRoZSBleHByZXNzaW9uIDAuMCAvIDAuMC4gICovCisjaWZkZWYgX19ERUNDCitzdGF0aWMgZmxvYXQKK05hTiAoKQoreworICBzdGF0aWMgZmxvYXQgemVybyA9IDAuMGY7CisgIHJldHVybiB6ZXJvIC8gemVybzsKK30KKyNlbHNlCisjIGRlZmluZSBOYU4oKSAoMC4wZiAvIDAuMGYpCisjZW5kaWYKKyNkZWZpbmUgTldPUkRTIFwKKyAgKChzaXplb2YgKGZsb2F0KSArIHNpemVvZiAodW5zaWduZWQgaW50KSAtIDEpIC8gc2l6ZW9mICh1bnNpZ25lZCBpbnQpKQordHlwZWRlZiB1bmlvbiB7IHVuc2lnbmVkIGludCB3b3JkW05XT1JEU107IGZsb2F0IHZhbHVlOyB9IG1lbW9yeV9mbG9hdDsKK2ludCBtYWluKCkKK3sKKyAgaW50IHJlc3VsdCA9IDA7CisKKyAgaWYgKGlzbmFuZiAoMS4wZiAvIDAuMGYpKQorICAgIHJlc3VsdCB8PSAxOworCisgIGlmICghaXNuYW5mIChOYU4gKCkpKQorICAgIHJlc3VsdCB8PSAyOworCisjaWYgZGVmaW5lZCBGTFRfRVhQQklUMF9XT1JEICYmIGRlZmluZWQgRkxUX0VYUEJJVDBfQklUCisgIC8qIFRoZSBpc25hbmYgZnVuY3Rpb24gc2hvdWxkIGJlIGltbXVuZSBhZ2FpbnN0IGNoYW5nZXMgaW4gdGhlIHNpZ24gYml0IGFuZAorICAgICBpbiB0aGUgbWFudGlzc2EgYml0cy4gIFRoZSB4b3Igb3BlcmF0aW9uIHR3aWRkbGVzIGEgYml0IHRoYXQgY2FuIG9ubHkgYmUKKyAgICAgYSBzaWduIGJpdCBvciBhIG1hbnRpc3NhIGJpdC4gICovCisgIGlmIChGTFRfRVhQQklUMF9XT1JEID09IDAgJiYgRkxUX0VYUEJJVDBfQklUID4gMCkKKyAgICB7CisgICAgICBtZW1vcnlfZmxvYXQgbTsKKworICAgICAgbS52YWx1ZSA9IE5hTiAoKTsKKyAgICAgIC8qIFNldCB0aGUgYml0cyBiZWxvdyB0aGUgZXhwb25lbnQgdG8gMDExMTEuLi4xMTEuICAqLworICAgICAgbS53b3JkWzBdICY9IC0xVSA8PCBGTFRfRVhQQklUMF9CSVQ7CisgICAgICBtLndvcmRbMF0gfD0gMVUgPDwgKEZMVF9FWFBCSVQwX0JJVCAtIDEpIC0gMTsKKyAgICAgIGlmICghaXNuYW5mIChtLnZhbHVlKSkKKyAgICAgICAgcmVzdWx0IHw9IDQ7CisgICAgfQorI2VuZGlmCisKKyAgcmV0dXJuIHJlc3VsdDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfaXNuYW5mX3dvcmtzPXllcworZWxzZQorICBnbF9jdl9mdW5jX2lzbmFuZl93b3Jrcz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19pc25hbmZfd29ya3MiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2lzbmFuZl93b3JrcyIgPiY2OyB9CisKKyAgICBMSUJTPSIkc2F2ZV9MSUJTIgorICAgIGNhc2UgIiRnbF9jdl9mdW5jX2lzbmFuZl93b3JrcyIgaW4KKyAgICAgICp5ZXMpIGdsX2Z1bmNfaXNuYW5mPXllcyA7OworICAgICAgKikgICAgZ2xfZnVuY19pc25hbmY9bm87IElTTkFORl9MSUJNPSA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGdsX2Z1bmNfaXNuYW5mPW5vCisgIGZpCisgIGlmIHRlc3QgJGdsX2Z1bmNfaXNuYW5mICE9IHllczsgdGhlbgorICAgIEhBVkVfSVNOQU5GPTAKKyAgZmkKKworCisKKworCisgIGlmIHRlc3QgJEhBVkVfSVNOQU5GID0gMCB8fCB0ZXN0ICRSRVBMQUNFX0lTTkFOID0gMTsgdGhlbgorCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgaXNuYW5mLiRhY19vYmpleHQiCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hlcmUgdG8gZmluZCB0aGUgZXhwb25lbnQgaW4gYSAnZmxvYXQnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXJlIHRvIGZpbmQgdGhlIGV4cG9uZW50IGluIGEgJ2Zsb2F0Jy4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9jY19mbG9hdF9leHBiaXQwKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBnbF9jdl9jY19mbG9hdF9leHBiaXQwPSJ3b3JkIDAgYml0IDIzIgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZGVmaW5lIE5XT1JEUyBcCisgICgoc2l6ZW9mIChmbG9hdCkgKyBzaXplb2YgKHVuc2lnbmVkIGludCkgLSAxKSAvIHNpemVvZiAodW5zaWduZWQgaW50KSkKK3R5cGVkZWYgdW5pb24geyBmbG9hdCB2YWx1ZTsgdW5zaWduZWQgaW50IHdvcmRbTldPUkRTXTsgfSBtZW1vcnlfZmxvYXQ7CitzdGF0aWMgdW5zaWduZWQgaW50IG9yZWRfd29yZHNbTldPUkRTXTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYW5kZWRfd29yZHNbTldPUkRTXTsKK3N0YXRpYyB2b2lkIGFkZF90b19vcmVkX3dvcmRzIChmbG9hdCB4KQoreworICBtZW1vcnlfZmxvYXQgbTsKKyAgc2l6ZV90IGk7CisgIC8qIENsZWFyIGl0IGZpcnN0LCBpbiBjYXNlCisgICAgIHNpemVvZiAoZmxvYXQpIDwgc2l6ZW9mIChtZW1vcnlfZmxvYXQpLiAgKi8KKyAgbWVtc2V0ICgmbSwgMCwgc2l6ZW9mIChtZW1vcnlfZmxvYXQpKTsKKyAgbS52YWx1ZSA9IHg7CisgIGZvciAoaSA9IDA7IGkgPCBOV09SRFM7IGkrKykKKyAgICB7CisgICAgICBvcmVkX3dvcmRzW2ldIHw9IG0ud29yZFtpXTsKKyAgICAgIGFuZGVkX3dvcmRzW2ldICY9IG0ud29yZFtpXTsKKyAgICB9Cit9CitpbnQgbWFpbiAoKQoreworICBzaXplX3QgajsKKyAgRklMRSAqZnAgPSBmb3BlbiAoImNvbmZ0ZXN0Lm91dCIsICJ3Iik7CisgIGlmIChmcCA9PSBOVUxMKQorICAgIHJldHVybiAxOworICBmb3IgKGogPSAwOyBqIDwgTldPUkRTOyBqKyspCisgICAgYW5kZWRfd29yZHNbal0gPSB+ICh1bnNpZ25lZCBpbnQpIDA7CisgIGFkZF90b19vcmVkX3dvcmRzICgwLjI1Zik7CisgIGFkZF90b19vcmVkX3dvcmRzICgwLjVmKTsKKyAgYWRkX3RvX29yZWRfd29yZHMgKDEuMGYpOworICBhZGRfdG9fb3JlZF93b3JkcyAoMi4wZik7CisgIGFkZF90b19vcmVkX3dvcmRzICg0LjBmKTsKKyAgLyogUmVtb3ZlIGJpdHMgdGhhdCBhcmUgY29tbW9uIChlLmcuIGlmIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmaXJzdCBtYW50aXNzYQorICAgICBiaXQgaXMgZXhwbGljaXQpLiAgKi8KKyAgZm9yIChqID0gMDsgaiA8IE5XT1JEUzsgaisrKQorICAgIG9yZWRfd29yZHNbal0gJj0gfmFuZGVkX3dvcmRzW2pdOworICAvKiBOb3cgZmluZCB0aGUgbm9uemVybyB3b3JkLiAgKi8KKyAgZm9yIChqID0gMDsgaiA8IE5XT1JEUzsgaisrKQorICAgIGlmIChvcmVkX3dvcmRzW2pdICE9IDApCisgICAgICBicmVhazsKKyAgaWYgKGogPCBOV09SRFMpCisgICAgeworICAgICAgc2l6ZV90IGk7CisgICAgICBmb3IgKGkgPSBqICsgMTsgaSA8IE5XT1JEUzsgaSsrKQorICAgICAgICBpZiAob3JlZF93b3Jkc1tpXSAhPSAwKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGZwcmludGYgKGZwLCAidW5rbm93biIpOworICAgICAgICAgICAgcmV0dXJuIChmY2xvc2UgKGZwKSAhPSAwKTsKKyAgICAgICAgICB9CisgICAgICBmb3IgKGkgPSAwOyA7IGkrKykKKyAgICAgICAgaWYgKChvcmVkX3dvcmRzW2pdID4+IGkpICYgMSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBmcHJpbnRmIChmcCwgIndvcmQgJWQgYml0ICVkIiwgKGludCkgaiwgKGludCkgaSk7CisgICAgICAgICAgICByZXR1cm4gKGZjbG9zZSAoZnApICE9IDApOworICAgICAgICAgIH0KKyAgICB9CisgIGZwcmludGYgKGZwLCAidW5rbm93biIpOworICByZXR1cm4gKGZjbG9zZSAoZnApICE9IDApOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9jY19mbG9hdF9leHBiaXQwPWBjYXQgY29uZnRlc3Qub3V0YAorZWxzZQorICBnbF9jdl9jY19mbG9hdF9leHBiaXQwPSJ1bmtub3duIgorZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgICAgIHJtIC1mIGNvbmZ0ZXN0Lm91dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9jY19mbG9hdF9leHBiaXQwIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfY2NfZmxvYXRfZXhwYml0MCIgPiY2OyB9CisgIGNhc2UgIiRnbF9jdl9jY19mbG9hdF9leHBiaXQwIiBpbgorICAgIHdvcmQqYml0KikKKyAgICAgIHdvcmQ9YGVjaG8gIiRnbF9jdl9jY19mbG9hdF9leHBiaXQwIiB8IHNlZCAtZSAncy93b3JkIC8vJyAtZSAncy8gYml0LiovLydgCisgICAgICBiaXQ9YGVjaG8gIiRnbF9jdl9jY19mbG9hdF9leHBiaXQwIiB8IHNlZCAtZSAncy93b3JkLipiaXQgLy8nYAorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEZMVF9FWFBCSVQwX1dPUkQgJHdvcmQKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgRkxUX0VYUEJJVDBfQklUICRiaXQKK19BQ0VPRgorCisgICAgICA7OworICBlc2FjCisKKworICBmaQorCisKKworCisKKyAgICAgICAgICBHTlVMSUJfSVNOQU5GPTEKKworCisKKworCiskYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9JU05BTkYgMSIgPj5jb25mZGVmcy5oCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgaXNuYW4oZmxvYXQpIGNhbiBiZSB1c2VkIHdpdGhvdXQgbGlua2luZyB3aXRoIGxpYm0iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBpc25hbihmbG9hdCkgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibS4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX2lzbmFuZl9ub19saWJtKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPG1hdGguaD4KKyAgICAgICAgICAgICAjaWYgX19HTlVDX18gPj0gNAorICAgICAgICAgICAgICMgdW5kZWYgaXNuYW5mCisgICAgICAgICAgICAgIyBkZWZpbmUgaXNuYW5mKHgpIF9fYnVpbHRpbl9pc25hbmYgKChmbG9hdCkoeCkpCisgICAgICAgICAgICAgI2VsaWYgZGVmaW5lZCBpc25hbgorICAgICAgICAgICAgICMgdW5kZWYgaXNuYW5mCisgICAgICAgICAgICAgIyBkZWZpbmUgaXNuYW5mKHgpIGlzbmFuICgoZmxvYXQpKHgpKQorICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgIGZsb2F0IHg7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBpc25hbmYgKHgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfaXNuYW5mX25vX2xpYm09eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfaXNuYW5mX25vX2xpYm09bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2lzbmFuZl9ub19saWJtIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19pc25hbmZfbm9fbGlibSIgPiY2OyB9CisKKyAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19pc25hbmZfbm9fbGlibSA9IHllczsgdGhlbgorCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgaXNuYW4oZmxvYXQpIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgaXNuYW4oZmxvYXQpIHdvcmtzLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfaXNuYW5mX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgaXJpeCogfCBzb2xhcmlzKikgZ2xfY3ZfZnVuY19pc25hbmZfd29ya3M9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICopICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfaXNuYW5mX3dvcmtzPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgIGVzYWMKKworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaWYgX19HTlVDX18gPj0gNAorIyB1bmRlZiBpc25hbmYKKyMgZGVmaW5lIGlzbmFuZih4KSBfX2J1aWx0aW5faXNuYW5mICgoZmxvYXQpKHgpKQorI2VsaWYgZGVmaW5lZCBpc25hbgorIyB1bmRlZiBpc25hbmYKKyMgZGVmaW5lIGlzbmFuZih4KSBpc25hbiAoKGZsb2F0KSh4KSkKKyNlbmRpZgorLyogVGhlIENvbXBhcSAoZXgtREVDKSBDIDYuNCBjb21waWxlciBjaG9rZXMgb24gdGhlIGV4cHJlc3Npb24gMC4wIC8gMC4wLiAgKi8KKyNpZmRlZiBfX0RFQ0MKK3N0YXRpYyBmbG9hdAorTmFOICgpCit7CisgIHN0YXRpYyBmbG9hdCB6ZXJvID0gMC4wZjsKKyAgcmV0dXJuIHplcm8gLyB6ZXJvOworfQorI2Vsc2UKKyMgZGVmaW5lIE5hTigpICgwLjBmIC8gMC4wZikKKyNlbmRpZgorI2RlZmluZSBOV09SRFMgXAorICAoKHNpemVvZiAoZmxvYXQpICsgc2l6ZW9mICh1bnNpZ25lZCBpbnQpIC0gMSkgLyBzaXplb2YgKHVuc2lnbmVkIGludCkpCit0eXBlZGVmIHVuaW9uIHsgdW5zaWduZWQgaW50IHdvcmRbTldPUkRTXTsgZmxvYXQgdmFsdWU7IH0gbWVtb3J5X2Zsb2F0OworaW50IG1haW4oKQoreworICBpbnQgcmVzdWx0ID0gMDsKKworICBpZiAoaXNuYW5mICgxLjBmIC8gMC4wZikpCisgICAgcmVzdWx0IHw9IDE7CisKKyAgaWYgKCFpc25hbmYgKE5hTiAoKSkpCisgICAgcmVzdWx0IHw9IDI7CisKKyNpZiBkZWZpbmVkIEZMVF9FWFBCSVQwX1dPUkQgJiYgZGVmaW5lZCBGTFRfRVhQQklUMF9CSVQKKyAgLyogVGhlIGlzbmFuZiBmdW5jdGlvbiBzaG91bGQgYmUgaW1tdW5lIGFnYWluc3QgY2hhbmdlcyBpbiB0aGUgc2lnbiBiaXQgYW5kCisgICAgIGluIHRoZSBtYW50aXNzYSBiaXRzLiAgVGhlIHhvciBvcGVyYXRpb24gdHdpZGRsZXMgYSBiaXQgdGhhdCBjYW4gb25seSBiZQorICAgICBhIHNpZ24gYml0IG9yIGEgbWFudGlzc2EgYml0LiAgKi8KKyAgaWYgKEZMVF9FWFBCSVQwX1dPUkQgPT0gMCAmJiBGTFRfRVhQQklUMF9CSVQgPiAwKQorICAgIHsKKyAgICAgIG1lbW9yeV9mbG9hdCBtOworCisgICAgICBtLnZhbHVlID0gTmFOICgpOworICAgICAgLyogU2V0IHRoZSBiaXRzIGJlbG93IHRoZSBleHBvbmVudCB0byAwMTExMS4uLjExMS4gICovCisgICAgICBtLndvcmRbMF0gJj0gLTFVIDw8IEZMVF9FWFBCSVQwX0JJVDsKKyAgICAgIG0ud29yZFswXSB8PSAxVSA8PCAoRkxUX0VYUEJJVDBfQklUIC0gMSkgLSAxOworICAgICAgaWYgKCFpc25hbmYgKG0udmFsdWUpKQorICAgICAgICByZXN1bHQgfD0gNDsKKyAgICB9CisjZW5kaWYKKworICByZXR1cm4gcmVzdWx0OworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19pc25hbmZfd29ya3M9eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfaXNuYW5mX3dvcmtzPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2lzbmFuZl93b3JrcyIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfaXNuYW5mX3dvcmtzIiA+JjY7IH0KKworICBmaQorICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2lzbmFuZl9ub19saWJtID0geWVzIFwKKyAgICAgJiYgeyBjYXNlICIkZ2xfY3ZfZnVuY19pc25hbmZfd29ya3MiIGluCisgICAgICAgICAgICAqeWVzKSB0cnVlOzsKKyAgICAgICAgICAgICopIGZhbHNlOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgIH07IHRoZW4KKyAgICBnbF9mdW5jX2lzbmFuZl9ub19saWJtPXllcworCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0lTTkFORl9JTl9MSUJDIDEiID4+Y29uZmRlZnMuaAorCisgIGVsc2UKKyAgICBnbF9mdW5jX2lzbmFuZl9ub19saWJtPW5vCisgIGZpCisKKyAgaWYgdGVzdCAkZ2xfZnVuY19pc25hbmZfbm9fbGlibSAhPSB5ZXM7IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGlzbmFuZi4kYWNfb2JqZXh0IgorCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXJlIHRvIGZpbmQgdGhlIGV4cG9uZW50IGluIGEgJ2Zsb2F0JyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGVyZSB0byBmaW5kIHRoZSBleHBvbmVudCBpbiBhICdmbG9hdCcuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfY2NfZmxvYXRfZXhwYml0MCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgZ2xfY3ZfY2NfZmxvYXRfZXhwYml0MD0id29yZCAwIGJpdCAyMyIKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2RlZmluZSBOV09SRFMgXAorICAoKHNpemVvZiAoZmxvYXQpICsgc2l6ZW9mICh1bnNpZ25lZCBpbnQpIC0gMSkgLyBzaXplb2YgKHVuc2lnbmVkIGludCkpCit0eXBlZGVmIHVuaW9uIHsgZmxvYXQgdmFsdWU7IHVuc2lnbmVkIGludCB3b3JkW05XT1JEU107IH0gbWVtb3J5X2Zsb2F0Oworc3RhdGljIHVuc2lnbmVkIGludCBvcmVkX3dvcmRzW05XT1JEU107CitzdGF0aWMgdW5zaWduZWQgaW50IGFuZGVkX3dvcmRzW05XT1JEU107CitzdGF0aWMgdm9pZCBhZGRfdG9fb3JlZF93b3JkcyAoZmxvYXQgeCkKK3sKKyAgbWVtb3J5X2Zsb2F0IG07CisgIHNpemVfdCBpOworICAvKiBDbGVhciBpdCBmaXJzdCwgaW4gY2FzZQorICAgICBzaXplb2YgKGZsb2F0KSA8IHNpemVvZiAobWVtb3J5X2Zsb2F0KS4gICovCisgIG1lbXNldCAoJm0sIDAsIHNpemVvZiAobWVtb3J5X2Zsb2F0KSk7CisgIG0udmFsdWUgPSB4OworICBmb3IgKGkgPSAwOyBpIDwgTldPUkRTOyBpKyspCisgICAgeworICAgICAgb3JlZF93b3Jkc1tpXSB8PSBtLndvcmRbaV07CisgICAgICBhbmRlZF93b3Jkc1tpXSAmPSBtLndvcmRbaV07CisgICAgfQorfQoraW50IG1haW4gKCkKK3sKKyAgc2l6ZV90IGo7CisgIEZJTEUgKmZwID0gZm9wZW4gKCJjb25mdGVzdC5vdXQiLCAidyIpOworICBpZiAoZnAgPT0gTlVMTCkKKyAgICByZXR1cm4gMTsKKyAgZm9yIChqID0gMDsgaiA8IE5XT1JEUzsgaisrKQorICAgIGFuZGVkX3dvcmRzW2pdID0gfiAodW5zaWduZWQgaW50KSAwOworICBhZGRfdG9fb3JlZF93b3JkcyAoMC4yNWYpOworICBhZGRfdG9fb3JlZF93b3JkcyAoMC41Zik7CisgIGFkZF90b19vcmVkX3dvcmRzICgxLjBmKTsKKyAgYWRkX3RvX29yZWRfd29yZHMgKDIuMGYpOworICBhZGRfdG9fb3JlZF93b3JkcyAoNC4wZik7CisgIC8qIFJlbW92ZSBiaXRzIHRoYXQgYXJlIGNvbW1vbiAoZS5nLiBpZiByZXByZXNlbnRhdGlvbiBvZiB0aGUgZmlyc3QgbWFudGlzc2EKKyAgICAgYml0IGlzIGV4cGxpY2l0KS4gICovCisgIGZvciAoaiA9IDA7IGogPCBOV09SRFM7IGorKykKKyAgICBvcmVkX3dvcmRzW2pdICY9IH5hbmRlZF93b3Jkc1tqXTsKKyAgLyogTm93IGZpbmQgdGhlIG5vbnplcm8gd29yZC4gICovCisgIGZvciAoaiA9IDA7IGogPCBOV09SRFM7IGorKykKKyAgICBpZiAob3JlZF93b3Jkc1tqXSAhPSAwKQorICAgICAgYnJlYWs7CisgIGlmIChqIDwgTldPUkRTKQorICAgIHsKKyAgICAgIHNpemVfdCBpOworICAgICAgZm9yIChpID0gaiArIDE7IGkgPCBOV09SRFM7IGkrKykKKyAgICAgICAgaWYgKG9yZWRfd29yZHNbaV0gIT0gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBmcHJpbnRmIChmcCwgInVua25vd24iKTsKKyAgICAgICAgICAgIHJldHVybiAoZmNsb3NlIChmcCkgIT0gMCk7CisgICAgICAgICAgfQorICAgICAgZm9yIChpID0gMDsgOyBpKyspCisgICAgICAgIGlmICgob3JlZF93b3Jkc1tqXSA+PiBpKSAmIDEpCisgICAgICAgICAgeworICAgICAgICAgICAgZnByaW50ZiAoZnAsICJ3b3JkICVkIGJpdCAlZCIsIChpbnQpIGosIChpbnQpIGkpOworICAgICAgICAgICAgcmV0dXJuIChmY2xvc2UgKGZwKSAhPSAwKTsKKyAgICAgICAgICB9CisgICAgfQorICBmcHJpbnRmIChmcCwgInVua25vd24iKTsKKyAgcmV0dXJuIChmY2xvc2UgKGZwKSAhPSAwKTsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfY2NfZmxvYXRfZXhwYml0MD1gY2F0IGNvbmZ0ZXN0Lm91dGAKK2Vsc2UKKyAgZ2xfY3ZfY2NfZmxvYXRfZXhwYml0MD0idW5rbm93biIKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgICAgICBybSAtZiBjb25mdGVzdC5vdXQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfY2NfZmxvYXRfZXhwYml0MCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2NjX2Zsb2F0X2V4cGJpdDAiID4mNjsgfQorICBjYXNlICIkZ2xfY3ZfY2NfZmxvYXRfZXhwYml0MCIgaW4KKyAgICB3b3JkKmJpdCopCisgICAgICB3b3JkPWBlY2hvICIkZ2xfY3ZfY2NfZmxvYXRfZXhwYml0MCIgfCBzZWQgLWUgJ3Mvd29yZCAvLycgLWUgJ3MvIGJpdC4qLy8nYAorICAgICAgYml0PWBlY2hvICIkZ2xfY3ZfY2NfZmxvYXRfZXhwYml0MCIgfCBzZWQgLWUgJ3Mvd29yZC4qYml0IC8vJ2AKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBGTFRfRVhQQklUMF9XT1JEICR3b3JkCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEZMVF9FWFBCSVQwX0JJVCAkYml0CitfQUNFT0YKKworICAgICAgOzsKKyAgZXNhYworCisKKyAgZmkKKworCisgIElTTkFOTF9MSUJNPQorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBpc25hbihsb25nIGRvdWJsZSkgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGlzbmFuKGxvbmcgZG91YmxlKSBjYW4gYmUgdXNlZCB3aXRob3V0IGxpbmtpbmcgd2l0aCBsaWJtLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfaXNuYW5sX25vX2xpYm0rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bWF0aC5oPgorICAgICAgICAgICAgICNpZiBfX0dOVUNfXyA+PSA0CisgICAgICAgICAgICAgIyB1bmRlZiBpc25hbmwKKyAgICAgICAgICAgICAjIGRlZmluZSBpc25hbmwoeCkgX19idWlsdGluX2lzbmFubCAoKGxvbmcgZG91YmxlKSh4KSkKKyAgICAgICAgICAgICAjZWxpZiBkZWZpbmVkIGlzbmFuCisgICAgICAgICAgICAgIyB1bmRlZiBpc25hbmwKKyAgICAgICAgICAgICAjIGRlZmluZSBpc25hbmwoeCkgaXNuYW4gKChsb25nIGRvdWJsZSkoeCkpCisgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgbG9uZyBkb3VibGUgeDsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGlzbmFubCAoeCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19pc25hbmxfbm9fbGlibT15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19pc25hbmxfbm9fbGlibT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfaXNuYW5sX25vX2xpYm0iID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2lzbmFubF9ub19saWJtIiA+JjY7IH0KKworICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2lzbmFubF9ub19saWJtID0gbm87IHRoZW4KKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgaXNuYW4obG9uZyBkb3VibGUpIGNhbiBiZSB1c2VkIHdpdGggbGlibSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGlzbmFuKGxvbmcgZG91YmxlKSBjYW4gYmUgdXNlZCB3aXRoIGxpYm0uLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19pc25hbmxfaW5fbGlibSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgICBMSUJTPSIkTElCUyAtbG0iCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bWF0aC5oPgorICAgICAgICAgICAgICNpZiBfX0dOVUNfXyA+PSA0CisgICAgICAgICAgICAgIyB1bmRlZiBpc25hbmwKKyAgICAgICAgICAgICAjIGRlZmluZSBpc25hbmwoeCkgX19idWlsdGluX2lzbmFubCAoKGxvbmcgZG91YmxlKSh4KSkKKyAgICAgICAgICAgICAjZWxpZiBkZWZpbmVkIGlzbmFuCisgICAgICAgICAgICAgIyB1bmRlZiBpc25hbmwKKyAgICAgICAgICAgICAjIGRlZmluZSBpc25hbmwoeCkgaXNuYW4gKChsb25nIGRvdWJsZSkoeCkpCisgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgbG9uZyBkb3VibGUgeDsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGlzbmFubCAoeCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19pc25hbmxfaW5fbGlibT15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19pc25hbmxfaW5fbGlibT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICBMSUJTPSIkc2F2ZV9MSUJTIgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2lzbmFubF9pbl9saWJtIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19pc25hbmxfaW5fbGlibSIgPiY2OyB9CisKKyAgICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2lzbmFubF9pbl9saWJtID0geWVzOyB0aGVuCisgICAgICBJU05BTkxfTElCTT0tbG0KKyAgICBmaQorICBmaQorICAgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfaXNuYW5sX25vX2xpYm0gPSB5ZXMgXAorICAgICB8fCB0ZXN0ICRnbF9jdl9mdW5jX2lzbmFubF9pbl9saWJtID0geWVzOyB0aGVuCisgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICBMSUJTPSIkTElCUyAkSVNOQU5MX0xJQk0iCisKKworCisKKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGlzbmFubCB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGlzbmFubCB3b3Jrcy4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX2lzbmFubF93b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgY2FzZSAiJGhvc3RfY3B1IiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyBubyBvbiBpYTY0LCB4ODZfNjQsIGkzODYuCisgICAgICAgICAgIGlhNjQgfCB4ODZfNjQgfCBpKjg2KSBnbF9jdl9mdW5jX2lzbmFubF93b3Jrcz0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgKikKKyAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgIG5ldGJzZCopIGdsX2N2X2Z1bmNfaXNuYW5sX3dvcmtzPSJndWVzc2luZyBubyI7OworICAgICAgICAgICAgICAgKikgICAgICAgZ2xfY3ZfZnVuY19pc25hbmxfd29ya3M9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICA7OworICAgICAgICAgZXNhYworCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2lmIF9fR05VQ19fID49IDQKKyMgdW5kZWYgaXNuYW5sCisjIGRlZmluZSBpc25hbmwoeCkgX19idWlsdGluX2lzbmFubCAoKGxvbmcgZG91YmxlKSh4KSkKKyNlbGlmIGRlZmluZWQgaXNuYW4KKyMgdW5kZWYgaXNuYW5sCisjIGRlZmluZSBpc25hbmwoeCkgaXNuYW4gKChsb25nIGRvdWJsZSkoeCkpCisjZW5kaWYKKyNkZWZpbmUgTldPUkRTIFwKKyAgKChzaXplb2YgKGxvbmcgZG91YmxlKSArIHNpemVvZiAodW5zaWduZWQgaW50KSAtIDEpIC8gc2l6ZW9mICh1bnNpZ25lZCBpbnQpKQordHlwZWRlZiB1bmlvbiB7IHVuc2lnbmVkIGludCB3b3JkW05XT1JEU107IGxvbmcgZG91YmxlIHZhbHVlOyB9CisgICAgICAgIG1lbW9yeV9sb25nX2RvdWJsZTsKKy8qIE9uIElyaXggNi41LCBnY2MgMy40LjMgY2FuJ3QgY29tcHV0ZSBjb21waWxlLXRpbWUgTmFOLCBhbmQgbmVlZHMgdGhlCisgICBydW50aW1lIHR5cGUgY29udmVyc2lvbi4gICovCisjaWZkZWYgX19zZ2kKK3N0YXRpYyBsb25nIGRvdWJsZSBOYU5sICgpCit7CisgIGRvdWJsZSB6ZXJvID0gMC4wOworICByZXR1cm4gemVybyAvIHplcm87Cit9CisjZWxzZQorIyBkZWZpbmUgTmFObCgpICgwLjBMIC8gMC4wTCkKKyNlbmRpZgoraW50IG1haW4gKCkKK3sKKyAgaW50IHJlc3VsdCA9IDA7CisKKyAgaWYgKCFpc25hbmwgKE5hTmwgKCkpKQorICAgIHJlc3VsdCB8PSAxOworCisgIHsKKyAgICBtZW1vcnlfbG9uZ19kb3VibGUgbTsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIC8qIFRoZSBpc25hbmwgZnVuY3Rpb24gc2hvdWxkIGJlIGltbXVuZSBhZ2FpbnN0IGNoYW5nZXMgaW4gdGhlIHNpZ24gYml0IGFuZAorICAgICAgIGluIHRoZSBtYW50aXNzYSBiaXRzLiAgVGhlIHhvciBvcGVyYXRpb24gdHdpZGRsZXMgYSBiaXQgdGhhdCBjYW4gb25seSBiZQorICAgICAgIGEgc2lnbiBiaXQgb3IgYSBtYW50aXNzYSBiaXQgKHNpbmNlIHRoZSBleHBvbmVudCBuZXZlciBleHRlbmRzIHRvCisgICAgICAgYml0IDMxKS4gICovCisgICAgbS52YWx1ZSA9IE5hTmwgKCk7CisgICAgbS53b3JkW05XT1JEUyAvIDJdIF49ICh1bnNpZ25lZCBpbnQpIDEgPDwgKHNpemVvZiAodW5zaWduZWQgaW50KSAqIENIQVJfQklUIC0gMSk7CisgICAgZm9yIChpID0gMDsgaSA8IE5XT1JEUzsgaSsrKQorICAgICAgbS53b3JkW2ldIHw9IDE7CisgICAgaWYgKCFpc25hbmwgKG0udmFsdWUpKQorICAgICAgcmVzdWx0IHw9IDE7CisgIH0KKworI2lmICgoZGVmaW5lZCBfX2lhNjQgJiYgTERCTF9NQU5UX0RJRyA9PSA2NCkgfHwgKGRlZmluZWQgX194ODZfNjRfXyB8fCBkZWZpbmVkIF9fYW1kNjRfXykgfHwgKGRlZmluZWQgX19pMzg2IHx8IGRlZmluZWQgX19pMzg2X18gfHwgZGVmaW5lZCBfSTM4NiB8fCBkZWZpbmVkIF9NX0lYODYgfHwgZGVmaW5lZCBfWDg2XykpICYmICFIQVZFX1NBTUVfTE9OR19ET1VCTEVfQVNfRE9VQkxFCisvKiBSZXByZXNlbnRhdGlvbiBvZiBhbiA4MC1iaXQgJ2xvbmcgZG91YmxlJyBhcyBhbiBpbml0aWFsaXplciBmb3IgYSBzZXF1ZW5jZQorICAgb2YgJ3Vuc2lnbmVkIGludCcgd29yZHMuICAqLworIyBpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyMgIGRlZmluZSBMREJMODBfV09SRFMoZXhwb25lbnQsbWFudGhpLG1hbnRsbykgXAorICAgICB7ICgodW5zaWduZWQgaW50KSAoZXhwb25lbnQpIDw8IDE2KSB8ICgodW5zaWduZWQgaW50KSAobWFudGhpKSA+PiAxNiksIFwKKyAgICAgICAoKHVuc2lnbmVkIGludCkgKG1hbnRoaSkgPDwgMTYpIHwgKHVuc2lnbmVkIGludCkgKG1hbnRsbykgPj4gMTYpLCAgICBcCisgICAgICAgKHVuc2lnbmVkIGludCkgKG1hbnRsbykgPDwgMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9CisjIGVsc2UKKyMgIGRlZmluZSBMREJMODBfV09SRFMoZXhwb25lbnQsbWFudGhpLG1hbnRsbykgXAorICAgICB7IG1hbnRsbywgbWFudGhpLCBleHBvbmVudCB9CisjIGVuZGlmCisgIHsgLyogUXVpZXQgTmFOLiAgKi8KKyAgICBzdGF0aWMgbWVtb3J5X2xvbmdfZG91YmxlIHggPQorICAgICAgeyBMREJMODBfV09SRFMgKDB4RkZGRiwgMHhDMzMzMzMzMywgMHgwMDAwMDAwMCkgfTsKKyAgICBpZiAoIWlzbmFubCAoeC52YWx1ZSkpCisgICAgICByZXN1bHQgfD0gMjsKKyAgfQorICB7CisgICAgLyogU2lnbmFsbGluZyBOYU4uICAqLworICAgIHN0YXRpYyBtZW1vcnlfbG9uZ19kb3VibGUgeCA9CisgICAgICB7IExEQkw4MF9XT1JEUyAoMHhGRkZGLCAweDgzMzMzMzMzLCAweDAwMDAwMDAwKSB9OworICAgIGlmICghaXNuYW5sICh4LnZhbHVlKSkKKyAgICAgIHJlc3VsdCB8PSAyOworICB9CisgIC8qIFRoZSBpc25hbmwgZnVuY3Rpb24gc2hvdWxkIHJlY29nbml6ZSBQc2V1ZG8tTmFOcywgUHNldWRvLUluZmluaXRpZXMsCisgICAgIFBzZXVkby1aZXJvZXMsIFVubm9ybWFsaXplZCBOdW1iZXJzLCBhbmQgUHNldWRvLURlbm9ybWFscywgYXMgZGVmaW5lZCBpbgorICAgICAgIEludGVsIElBLTY0IEFyY2hpdGVjdHVyZSBTb2Z0d2FyZSBEZXZlbG9wZXIncyBNYW51YWwsIFZvbHVtZSAxOgorICAgICAgIEFwcGxpY2F0aW9uIEFyY2hpdGVjdHVyZS4KKyAgICAgICBUYWJsZSA1LTIgIkZsb2F0aW5nLVBvaW50IFJlZ2lzdGVyIEVuY29kaW5ncyIKKyAgICAgICBGaWd1cmUgNS02ICJNZW1vcnkgdG8gRmxvYXRpbmctUG9pbnQgUmVnaXN0ZXIgRGF0YSBUcmFuc2xhdGlvbiIKKyAgICovCisgIHsgLyogUHNldWRvLU5hTi4gICovCisgICAgc3RhdGljIG1lbW9yeV9sb25nX2RvdWJsZSB4ID0KKyAgICAgIHsgTERCTDgwX1dPUkRTICgweEZGRkYsIDB4NDAwMDAwMDEsIDB4MDAwMDAwMDApIH07CisgICAgaWYgKCFpc25hbmwgKHgudmFsdWUpKQorICAgICAgcmVzdWx0IHw9IDQ7CisgIH0KKyAgeyAvKiBQc2V1ZG8tSW5maW5pdHkuICAqLworICAgIHN0YXRpYyBtZW1vcnlfbG9uZ19kb3VibGUgeCA9CisgICAgICB7IExEQkw4MF9XT1JEUyAoMHhGRkZGLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwKSB9OworICAgIGlmICghaXNuYW5sICh4LnZhbHVlKSkKKyAgICAgIHJlc3VsdCB8PSA4OworICB9CisgIHsgLyogUHNldWRvLVplcm8uICAqLworICAgIHN0YXRpYyBtZW1vcnlfbG9uZ19kb3VibGUgeCA9CisgICAgICB7IExEQkw4MF9XT1JEUyAoMHg0MDA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwKSB9OworICAgIGlmICghaXNuYW5sICh4LnZhbHVlKSkKKyAgICAgIHJlc3VsdCB8PSAxNjsKKyAgfQorICB7IC8qIFVubm9ybWFsaXplZCBudW1iZXIuICAqLworICAgIHN0YXRpYyBtZW1vcnlfbG9uZ19kb3VibGUgeCA9CisgICAgICB7IExEQkw4MF9XT1JEUyAoMHg0MDAwLCAweDYzMzMzMzMzLCAweDAwMDAwMDAwKSB9OworICAgIGlmICghaXNuYW5sICh4LnZhbHVlKSkKKyAgICAgIHJlc3VsdCB8PSAzMjsKKyAgfQorICB7IC8qIFBzZXVkby1EZW5vcm1hbC4gICovCisgICAgc3RhdGljIG1lbW9yeV9sb25nX2RvdWJsZSB4ID0KKyAgICAgIHsgTERCTDgwX1dPUkRTICgweDAwMDAsIDB4ODMzMzMzMzMsIDB4MDAwMDAwMDApIH07CisgICAgaWYgKCFpc25hbmwgKHgudmFsdWUpKQorICAgICAgcmVzdWx0IHw9IDY0OworICB9CisjZW5kaWYKKworICByZXR1cm4gcmVzdWx0OworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19pc25hbmxfd29ya3M9eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfaXNuYW5sX3dvcmtzPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2lzbmFubF93b3JrcyIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfaXNuYW5sX3dvcmtzIiA+JjY7IH0KKworICAgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgY2FzZSAiJGdsX2N2X2Z1bmNfaXNuYW5sX3dvcmtzIiBpbgorICAgICAgKnllcykgZ2xfZnVuY19pc25hbmw9eWVzIDs7CisgICAgICAqKSAgICBnbF9mdW5jX2lzbmFubD1ubzsgSVNOQU5MX0xJQk09IDs7CisgICAgZXNhYworICBlbHNlCisgICAgZ2xfZnVuY19pc25hbmw9bm8KKyAgZmkKKyAgaWYgdGVzdCAkZ2xfZnVuY19pc25hbmwgIT0geWVzOyB0aGVuCisgICAgSEFWRV9JU05BTkw9MAorICBmaQorCisKKworCisKKyAgaWYgdGVzdCAkSEFWRV9JU05BTkwgPSAwIHx8IHRlc3QgJFJFUExBQ0VfSVNOQU4gPSAxOyB0aGVuCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBpc25hbmwuJGFjX29iamV4dCIKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXJlIHRvIGZpbmQgdGhlIGV4cG9uZW50IGluIGEgJ2xvbmcgZG91YmxlJyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGVyZSB0byBmaW5kIHRoZSBleHBvbmVudCBpbiBhICdsb25nIGRvdWJsZScuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfY2NfbG9uZ19kb3VibGVfZXhwYml0MCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfY2NfbG9uZ19kb3VibGVfZXhwYml0MD0idW5rbm93biIKKworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZGVmaW5lIE5XT1JEUyBcCisgICgoc2l6ZW9mIChsb25nIGRvdWJsZSkgKyBzaXplb2YgKHVuc2lnbmVkIGludCkgLSAxKSAvIHNpemVvZiAodW5zaWduZWQgaW50KSkKK3R5cGVkZWYgdW5pb24geyBsb25nIGRvdWJsZSB2YWx1ZTsgdW5zaWduZWQgaW50IHdvcmRbTldPUkRTXTsgfQorICAgICAgICBtZW1vcnlfbG9uZ19kb3VibGU7CitzdGF0aWMgdW5zaWduZWQgaW50IG9yZWRfd29yZHNbTldPUkRTXTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYW5kZWRfd29yZHNbTldPUkRTXTsKK3N0YXRpYyB2b2lkIGFkZF90b19vcmVkX3dvcmRzIChsb25nIGRvdWJsZSB4KQoreworICBtZW1vcnlfbG9uZ19kb3VibGUgbTsKKyAgc2l6ZV90IGk7CisgIC8qIENsZWFyIGl0IGZpcnN0LCBpbiBjYXNlCisgICAgIHNpemVvZiAobG9uZyBkb3VibGUpIDwgc2l6ZW9mIChtZW1vcnlfbG9uZ19kb3VibGUpLiAgKi8KKyAgbWVtc2V0ICgmbSwgMCwgc2l6ZW9mIChtZW1vcnlfbG9uZ19kb3VibGUpKTsKKyAgbS52YWx1ZSA9IHg7CisgIGZvciAoaSA9IDA7IGkgPCBOV09SRFM7IGkrKykKKyAgICB7CisgICAgICBvcmVkX3dvcmRzW2ldIHw9IG0ud29yZFtpXTsKKyAgICAgIGFuZGVkX3dvcmRzW2ldICY9IG0ud29yZFtpXTsKKyAgICB9Cit9CitpbnQgbWFpbiAoKQoreworICBzaXplX3QgajsKKyAgRklMRSAqZnAgPSBmb3BlbiAoImNvbmZ0ZXN0Lm91dCIsICJ3Iik7CisgIGlmIChmcCA9PSBOVUxMKQorICAgIHJldHVybiAxOworICBmb3IgKGogPSAwOyBqIDwgTldPUkRTOyBqKyspCisgICAgYW5kZWRfd29yZHNbal0gPSB+ICh1bnNpZ25lZCBpbnQpIDA7CisgIGFkZF90b19vcmVkX3dvcmRzICgwLjI1TCk7CisgIGFkZF90b19vcmVkX3dvcmRzICgwLjVMKTsKKyAgYWRkX3RvX29yZWRfd29yZHMgKDEuMEwpOworICBhZGRfdG9fb3JlZF93b3JkcyAoMi4wTCk7CisgIGFkZF90b19vcmVkX3dvcmRzICg0LjBMKTsKKyAgLyogUmVtb3ZlIGJpdHMgdGhhdCBhcmUgY29tbW9uIChlLmcuIGlmIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmaXJzdCBtYW50aXNzYQorICAgICBiaXQgaXMgZXhwbGljaXQpLiAgKi8KKyAgZm9yIChqID0gMDsgaiA8IE5XT1JEUzsgaisrKQorICAgIG9yZWRfd29yZHNbal0gJj0gfmFuZGVkX3dvcmRzW2pdOworICAvKiBOb3cgZmluZCB0aGUgbm9uemVybyB3b3JkLiAgKi8KKyAgZm9yIChqID0gMDsgaiA8IE5XT1JEUzsgaisrKQorICAgIGlmIChvcmVkX3dvcmRzW2pdICE9IDApCisgICAgICBicmVhazsKKyAgaWYgKGogPCBOV09SRFMpCisgICAgeworICAgICAgc2l6ZV90IGk7CisgICAgICBmb3IgKGkgPSBqICsgMTsgaSA8IE5XT1JEUzsgaSsrKQorICAgICAgICBpZiAob3JlZF93b3Jkc1tpXSAhPSAwKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGZwcmludGYgKGZwLCAidW5rbm93biIpOworICAgICAgICAgICAgcmV0dXJuIChmY2xvc2UgKGZwKSAhPSAwKTsKKyAgICAgICAgICB9CisgICAgICBmb3IgKGkgPSAwOyA7IGkrKykKKyAgICAgICAgaWYgKChvcmVkX3dvcmRzW2pdID4+IGkpICYgMSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBmcHJpbnRmIChmcCwgIndvcmQgJWQgYml0ICVkIiwgKGludCkgaiwgKGludCkgaSk7CisgICAgICAgICAgICByZXR1cm4gKGZjbG9zZSAoZnApICE9IDApOworICAgICAgICAgIH0KKyAgICB9CisgIGZwcmludGYgKGZwLCAidW5rbm93biIpOworICByZXR1cm4gKGZjbG9zZSAoZnApICE9IDApOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9jY19sb25nX2RvdWJsZV9leHBiaXQwPWBjYXQgY29uZnRlc3Qub3V0YAorZWxzZQorICBnbF9jdl9jY19sb25nX2RvdWJsZV9leHBiaXQwPSJ1bmtub3duIgorZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgICAgIHJtIC1mIGNvbmZ0ZXN0Lm91dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9jY19sb25nX2RvdWJsZV9leHBiaXQwIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfY2NfbG9uZ19kb3VibGVfZXhwYml0MCIgPiY2OyB9CisgIGNhc2UgIiRnbF9jdl9jY19sb25nX2RvdWJsZV9leHBiaXQwIiBpbgorICAgIHdvcmQqYml0KikKKyAgICAgIHdvcmQ9YGVjaG8gIiRnbF9jdl9jY19sb25nX2RvdWJsZV9leHBiaXQwIiB8IHNlZCAtZSAncy93b3JkIC8vJyAtZSAncy8gYml0LiovLydgCisgICAgICBiaXQ9YGVjaG8gIiRnbF9jdl9jY19sb25nX2RvdWJsZV9leHBiaXQwIiB8IHNlZCAtZSAncy93b3JkLipiaXQgLy8nYAorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIExEQkxfRVhQQklUMF9XT1JEICR3b3JkCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIExEQkxfRVhQQklUMF9CSVQgJGJpdAorX0FDRU9GCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKKyAgZmkKKworCisKKworCisgICAgICAgICAgR05VTElCX0lTTkFOTD0xCisKKworCisKKworJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfSVNOQU5MIDEiID4+Y29uZmRlZnMuaAorCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGlzbmFuKGxvbmcgZG91YmxlKSBjYW4gYmUgdXNlZCB3aXRob3V0IGxpbmtpbmcgd2l0aCBsaWJtIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgaXNuYW4obG9uZyBkb3VibGUpIGNhbiBiZSB1c2VkIHdpdGhvdXQgbGlua2luZyB3aXRoIGxpYm0uLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19pc25hbmxfbm9fbGlibSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxtYXRoLmg+CisgICAgICAgICAgICAgI2lmIF9fR05VQ19fID49IDQKKyAgICAgICAgICAgICAjIHVuZGVmIGlzbmFubAorICAgICAgICAgICAgICMgZGVmaW5lIGlzbmFubCh4KSBfX2J1aWx0aW5faXNuYW5sICgobG9uZyBkb3VibGUpKHgpKQorICAgICAgICAgICAgICNlbGlmIGRlZmluZWQgaXNuYW4KKyAgICAgICAgICAgICAjIHVuZGVmIGlzbmFubAorICAgICAgICAgICAgICMgZGVmaW5lIGlzbmFubCh4KSBpc25hbiAoKGxvbmcgZG91YmxlKSh4KSkKKyAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICBsb25nIGRvdWJsZSB4OworaW50CittYWluICgpCit7CityZXR1cm4gaXNuYW5sICh4KTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX2lzbmFubF9ub19saWJtPXllcworZWxzZQorICBnbF9jdl9mdW5jX2lzbmFubF9ub19saWJtPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19pc25hbmxfbm9fbGlibSIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfaXNuYW5sX25vX2xpYm0iID4mNjsgfQorCisgIGdsX2Z1bmNfaXNuYW5sX25vX2xpYm09JGdsX2N2X2Z1bmNfaXNuYW5sX25vX2xpYm0KKyAgaWYgdGVzdCAkZ2xfZnVuY19pc25hbmxfbm9fbGlibSA9IHllczsgdGhlbgorCisKKworCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBpc25hbmwgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBpc25hbmwgd29ya3MuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19pc25hbmxfd29ya3MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGNhc2UgIiRob3N0X2NwdSIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3Mgbm8gb24gaWE2NCwgeDg2XzY0LCBpMzg2LgorICAgICAgICAgICBpYTY0IHwgeDg2XzY0IHwgaSo4NikgZ2xfY3ZfZnVuY19pc25hbmxfd29ya3M9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICopCisgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICBuZXRic2QqKSBnbF9jdl9mdW5jX2lzbmFubF93b3Jrcz0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgICAgICopICAgICAgIGdsX2N2X2Z1bmNfaXNuYW5sX3dvcmtzPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgOzsKKyAgICAgICAgIGVzYWMKKworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpZiBfX0dOVUNfXyA+PSA0CisjIHVuZGVmIGlzbmFubAorIyBkZWZpbmUgaXNuYW5sKHgpIF9fYnVpbHRpbl9pc25hbmwgKChsb25nIGRvdWJsZSkoeCkpCisjZWxpZiBkZWZpbmVkIGlzbmFuCisjIHVuZGVmIGlzbmFubAorIyBkZWZpbmUgaXNuYW5sKHgpIGlzbmFuICgobG9uZyBkb3VibGUpKHgpKQorI2VuZGlmCisjZGVmaW5lIE5XT1JEUyBcCisgICgoc2l6ZW9mIChsb25nIGRvdWJsZSkgKyBzaXplb2YgKHVuc2lnbmVkIGludCkgLSAxKSAvIHNpemVvZiAodW5zaWduZWQgaW50KSkKK3R5cGVkZWYgdW5pb24geyB1bnNpZ25lZCBpbnQgd29yZFtOV09SRFNdOyBsb25nIGRvdWJsZSB2YWx1ZTsgfQorICAgICAgICBtZW1vcnlfbG9uZ19kb3VibGU7CisvKiBPbiBJcml4IDYuNSwgZ2NjIDMuNC4zIGNhbid0IGNvbXB1dGUgY29tcGlsZS10aW1lIE5hTiwgYW5kIG5lZWRzIHRoZQorICAgcnVudGltZSB0eXBlIGNvbnZlcnNpb24uICAqLworI2lmZGVmIF9fc2dpCitzdGF0aWMgbG9uZyBkb3VibGUgTmFObCAoKQoreworICBkb3VibGUgemVybyA9IDAuMDsKKyAgcmV0dXJuIHplcm8gLyB6ZXJvOworfQorI2Vsc2UKKyMgZGVmaW5lIE5hTmwoKSAoMC4wTCAvIDAuMEwpCisjZW5kaWYKK2ludCBtYWluICgpCit7CisgIGludCByZXN1bHQgPSAwOworCisgIGlmICghaXNuYW5sIChOYU5sICgpKSkKKyAgICByZXN1bHQgfD0gMTsKKworICB7CisgICAgbWVtb3J5X2xvbmdfZG91YmxlIG07CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICAvKiBUaGUgaXNuYW5sIGZ1bmN0aW9uIHNob3VsZCBiZSBpbW11bmUgYWdhaW5zdCBjaGFuZ2VzIGluIHRoZSBzaWduIGJpdCBhbmQKKyAgICAgICBpbiB0aGUgbWFudGlzc2EgYml0cy4gIFRoZSB4b3Igb3BlcmF0aW9uIHR3aWRkbGVzIGEgYml0IHRoYXQgY2FuIG9ubHkgYmUKKyAgICAgICBhIHNpZ24gYml0IG9yIGEgbWFudGlzc2EgYml0IChzaW5jZSB0aGUgZXhwb25lbnQgbmV2ZXIgZXh0ZW5kcyB0bworICAgICAgIGJpdCAzMSkuICAqLworICAgIG0udmFsdWUgPSBOYU5sICgpOworICAgIG0ud29yZFtOV09SRFMgLyAyXSBePSAodW5zaWduZWQgaW50KSAxIDw8IChzaXplb2YgKHVuc2lnbmVkIGludCkgKiBDSEFSX0JJVCAtIDEpOworICAgIGZvciAoaSA9IDA7IGkgPCBOV09SRFM7IGkrKykKKyAgICAgIG0ud29yZFtpXSB8PSAxOworICAgIGlmICghaXNuYW5sIChtLnZhbHVlKSkKKyAgICAgIHJlc3VsdCB8PSAxOworICB9CisKKyNpZiAoKGRlZmluZWQgX19pYTY0ICYmIExEQkxfTUFOVF9ESUcgPT0gNjQpIHx8IChkZWZpbmVkIF9feDg2XzY0X18gfHwgZGVmaW5lZCBfX2FtZDY0X18pIHx8IChkZWZpbmVkIF9faTM4NiB8fCBkZWZpbmVkIF9faTM4Nl9fIHx8IGRlZmluZWQgX0kzODYgfHwgZGVmaW5lZCBfTV9JWDg2IHx8IGRlZmluZWQgX1g4Nl8pKSAmJiAhSEFWRV9TQU1FX0xPTkdfRE9VQkxFX0FTX0RPVUJMRQorLyogUmVwcmVzZW50YXRpb24gb2YgYW4gODAtYml0ICdsb25nIGRvdWJsZScgYXMgYW4gaW5pdGlhbGl6ZXIgZm9yIGEgc2VxdWVuY2UKKyAgIG9mICd1bnNpZ25lZCBpbnQnIHdvcmRzLiAgKi8KKyMgaWZkZWYgV09SRFNfQklHRU5ESUFOCisjICBkZWZpbmUgTERCTDgwX1dPUkRTKGV4cG9uZW50LG1hbnRoaSxtYW50bG8pIFwKKyAgICAgeyAoKHVuc2lnbmVkIGludCkgKGV4cG9uZW50KSA8PCAxNikgfCAoKHVuc2lnbmVkIGludCkgKG1hbnRoaSkgPj4gMTYpLCBcCisgICAgICAgKCh1bnNpZ25lZCBpbnQpIChtYW50aGkpIDw8IDE2KSB8ICh1bnNpZ25lZCBpbnQpIChtYW50bG8pID4+IDE2KSwgICAgXAorICAgICAgICh1bnNpZ25lZCBpbnQpIChtYW50bG8pIDw8IDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfQorIyBlbHNlCisjICBkZWZpbmUgTERCTDgwX1dPUkRTKGV4cG9uZW50LG1hbnRoaSxtYW50bG8pIFwKKyAgICAgeyBtYW50bG8sIG1hbnRoaSwgZXhwb25lbnQgfQorIyBlbmRpZgorICB7IC8qIFF1aWV0IE5hTi4gICovCisgICAgc3RhdGljIG1lbW9yeV9sb25nX2RvdWJsZSB4ID0KKyAgICAgIHsgTERCTDgwX1dPUkRTICgweEZGRkYsIDB4QzMzMzMzMzMsIDB4MDAwMDAwMDApIH07CisgICAgaWYgKCFpc25hbmwgKHgudmFsdWUpKQorICAgICAgcmVzdWx0IHw9IDI7CisgIH0KKyAgeworICAgIC8qIFNpZ25hbGxpbmcgTmFOLiAgKi8KKyAgICBzdGF0aWMgbWVtb3J5X2xvbmdfZG91YmxlIHggPQorICAgICAgeyBMREJMODBfV09SRFMgKDB4RkZGRiwgMHg4MzMzMzMzMywgMHgwMDAwMDAwMCkgfTsKKyAgICBpZiAoIWlzbmFubCAoeC52YWx1ZSkpCisgICAgICByZXN1bHQgfD0gMjsKKyAgfQorICAvKiBUaGUgaXNuYW5sIGZ1bmN0aW9uIHNob3VsZCByZWNvZ25pemUgUHNldWRvLU5hTnMsIFBzZXVkby1JbmZpbml0aWVzLAorICAgICBQc2V1ZG8tWmVyb2VzLCBVbm5vcm1hbGl6ZWQgTnVtYmVycywgYW5kIFBzZXVkby1EZW5vcm1hbHMsIGFzIGRlZmluZWQgaW4KKyAgICAgICBJbnRlbCBJQS02NCBBcmNoaXRlY3R1cmUgU29mdHdhcmUgRGV2ZWxvcGVyJ3MgTWFudWFsLCBWb2x1bWUgMToKKyAgICAgICBBcHBsaWNhdGlvbiBBcmNoaXRlY3R1cmUuCisgICAgICAgVGFibGUgNS0yICJGbG9hdGluZy1Qb2ludCBSZWdpc3RlciBFbmNvZGluZ3MiCisgICAgICAgRmlndXJlIDUtNiAiTWVtb3J5IHRvIEZsb2F0aW5nLVBvaW50IFJlZ2lzdGVyIERhdGEgVHJhbnNsYXRpb24iCisgICAqLworICB7IC8qIFBzZXVkby1OYU4uICAqLworICAgIHN0YXRpYyBtZW1vcnlfbG9uZ19kb3VibGUgeCA9CisgICAgICB7IExEQkw4MF9XT1JEUyAoMHhGRkZGLCAweDQwMDAwMDAxLCAweDAwMDAwMDAwKSB9OworICAgIGlmICghaXNuYW5sICh4LnZhbHVlKSkKKyAgICAgIHJlc3VsdCB8PSA0OworICB9CisgIHsgLyogUHNldWRvLUluZmluaXR5LiAgKi8KKyAgICBzdGF0aWMgbWVtb3J5X2xvbmdfZG91YmxlIHggPQorICAgICAgeyBMREJMODBfV09SRFMgKDB4RkZGRiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCkgfTsKKyAgICBpZiAoIWlzbmFubCAoeC52YWx1ZSkpCisgICAgICByZXN1bHQgfD0gODsKKyAgfQorICB7IC8qIFBzZXVkby1aZXJvLiAgKi8KKyAgICBzdGF0aWMgbWVtb3J5X2xvbmdfZG91YmxlIHggPQorICAgICAgeyBMREJMODBfV09SRFMgKDB4NDAwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCkgfTsKKyAgICBpZiAoIWlzbmFubCAoeC52YWx1ZSkpCisgICAgICByZXN1bHQgfD0gMTY7CisgIH0KKyAgeyAvKiBVbm5vcm1hbGl6ZWQgbnVtYmVyLiAgKi8KKyAgICBzdGF0aWMgbWVtb3J5X2xvbmdfZG91YmxlIHggPQorICAgICAgeyBMREJMODBfV09SRFMgKDB4NDAwMCwgMHg2MzMzMzMzMywgMHgwMDAwMDAwMCkgfTsKKyAgICBpZiAoIWlzbmFubCAoeC52YWx1ZSkpCisgICAgICByZXN1bHQgfD0gMzI7CisgIH0KKyAgeyAvKiBQc2V1ZG8tRGVub3JtYWwuICAqLworICAgIHN0YXRpYyBtZW1vcnlfbG9uZ19kb3VibGUgeCA9CisgICAgICB7IExEQkw4MF9XT1JEUyAoMHgwMDAwLCAweDgzMzMzMzMzLCAweDAwMDAwMDAwKSB9OworICAgIGlmICghaXNuYW5sICh4LnZhbHVlKSkKKyAgICAgIHJlc3VsdCB8PSA2NDsKKyAgfQorI2VuZGlmCisKKyAgcmV0dXJuIHJlc3VsdDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfaXNuYW5sX3dvcmtzPXllcworZWxzZQorICBnbF9jdl9mdW5jX2lzbmFubF93b3Jrcz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19pc25hbmxfd29ya3MiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2lzbmFubF93b3JrcyIgPiY2OyB9CisKKyAgICBjYXNlICIkZ2xfY3ZfZnVuY19pc25hbmxfd29ya3MiIGluCisgICAgICAqeWVzKSA7OworICAgICAgKikgICAgZ2xfZnVuY19pc25hbmxfbm9fbGlibT1ubyA7OworICAgIGVzYWMKKyAgZmkKKyAgaWYgdGVzdCAkZ2xfZnVuY19pc25hbmxfbm9fbGlibSA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0lTTkFOTF9JTl9MSUJDIDEiID4+Y29uZmRlZnMuaAorCisgIGZpCisKKyAgaWYgdGVzdCAkZ2xfZnVuY19pc25hbmxfbm9fbGlibSAhPSB5ZXM7IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGlzbmFubC4kYWNfb2JqZXh0IgorCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hlcmUgdG8gZmluZCB0aGUgZXhwb25lbnQgaW4gYSAnbG9uZyBkb3VibGUnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXJlIHRvIGZpbmQgdGhlIGV4cG9uZW50IGluIGEgJ2xvbmcgZG91YmxlJy4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9jY19sb25nX2RvdWJsZV9leHBiaXQwKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9jY19sb25nX2RvdWJsZV9leHBiaXQwPSJ1bmtub3duIgorCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNkZWZpbmUgTldPUkRTIFwKKyAgKChzaXplb2YgKGxvbmcgZG91YmxlKSArIHNpemVvZiAodW5zaWduZWQgaW50KSAtIDEpIC8gc2l6ZW9mICh1bnNpZ25lZCBpbnQpKQordHlwZWRlZiB1bmlvbiB7IGxvbmcgZG91YmxlIHZhbHVlOyB1bnNpZ25lZCBpbnQgd29yZFtOV09SRFNdOyB9CisgICAgICAgIG1lbW9yeV9sb25nX2RvdWJsZTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb3JlZF93b3Jkc1tOV09SRFNdOworc3RhdGljIHVuc2lnbmVkIGludCBhbmRlZF93b3Jkc1tOV09SRFNdOworc3RhdGljIHZvaWQgYWRkX3RvX29yZWRfd29yZHMgKGxvbmcgZG91YmxlIHgpCit7CisgIG1lbW9yeV9sb25nX2RvdWJsZSBtOworICBzaXplX3QgaTsKKyAgLyogQ2xlYXIgaXQgZmlyc3QsIGluIGNhc2UKKyAgICAgc2l6ZW9mIChsb25nIGRvdWJsZSkgPCBzaXplb2YgKG1lbW9yeV9sb25nX2RvdWJsZSkuICAqLworICBtZW1zZXQgKCZtLCAwLCBzaXplb2YgKG1lbW9yeV9sb25nX2RvdWJsZSkpOworICBtLnZhbHVlID0geDsKKyAgZm9yIChpID0gMDsgaSA8IE5XT1JEUzsgaSsrKQorICAgIHsKKyAgICAgIG9yZWRfd29yZHNbaV0gfD0gbS53b3JkW2ldOworICAgICAgYW5kZWRfd29yZHNbaV0gJj0gbS53b3JkW2ldOworICAgIH0KK30KK2ludCBtYWluICgpCit7CisgIHNpemVfdCBqOworICBGSUxFICpmcCA9IGZvcGVuICgiY29uZnRlc3Qub3V0IiwgInciKTsKKyAgaWYgKGZwID09IE5VTEwpCisgICAgcmV0dXJuIDE7CisgIGZvciAoaiA9IDA7IGogPCBOV09SRFM7IGorKykKKyAgICBhbmRlZF93b3Jkc1tqXSA9IH4gKHVuc2lnbmVkIGludCkgMDsKKyAgYWRkX3RvX29yZWRfd29yZHMgKDAuMjVMKTsKKyAgYWRkX3RvX29yZWRfd29yZHMgKDAuNUwpOworICBhZGRfdG9fb3JlZF93b3JkcyAoMS4wTCk7CisgIGFkZF90b19vcmVkX3dvcmRzICgyLjBMKTsKKyAgYWRkX3RvX29yZWRfd29yZHMgKDQuMEwpOworICAvKiBSZW1vdmUgYml0cyB0aGF0IGFyZSBjb21tb24gKGUuZy4gaWYgcmVwcmVzZW50YXRpb24gb2YgdGhlIGZpcnN0IG1hbnRpc3NhCisgICAgIGJpdCBpcyBleHBsaWNpdCkuICAqLworICBmb3IgKGogPSAwOyBqIDwgTldPUkRTOyBqKyspCisgICAgb3JlZF93b3Jkc1tqXSAmPSB+YW5kZWRfd29yZHNbal07CisgIC8qIE5vdyBmaW5kIHRoZSBub256ZXJvIHdvcmQuICAqLworICBmb3IgKGogPSAwOyBqIDwgTldPUkRTOyBqKyspCisgICAgaWYgKG9yZWRfd29yZHNbal0gIT0gMCkKKyAgICAgIGJyZWFrOworICBpZiAoaiA8IE5XT1JEUykKKyAgICB7CisgICAgICBzaXplX3QgaTsKKyAgICAgIGZvciAoaSA9IGogKyAxOyBpIDwgTldPUkRTOyBpKyspCisgICAgICAgIGlmIChvcmVkX3dvcmRzW2ldICE9IDApCisgICAgICAgICAgeworICAgICAgICAgICAgZnByaW50ZiAoZnAsICJ1bmtub3duIik7CisgICAgICAgICAgICByZXR1cm4gKGZjbG9zZSAoZnApICE9IDApOworICAgICAgICAgIH0KKyAgICAgIGZvciAoaSA9IDA7IDsgaSsrKQorICAgICAgICBpZiAoKG9yZWRfd29yZHNbal0gPj4gaSkgJiAxKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGZwcmludGYgKGZwLCAid29yZCAlZCBiaXQgJWQiLCAoaW50KSBqLCAoaW50KSBpKTsKKyAgICAgICAgICAgIHJldHVybiAoZmNsb3NlIChmcCkgIT0gMCk7CisgICAgICAgICAgfQorICAgIH0KKyAgZnByaW50ZiAoZnAsICJ1bmtub3duIik7CisgIHJldHVybiAoZmNsb3NlIChmcCkgIT0gMCk7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2NjX2xvbmdfZG91YmxlX2V4cGJpdDA9YGNhdCBjb25mdGVzdC5vdXRgCitlbHNlCisgIGdsX2N2X2NjX2xvbmdfZG91YmxlX2V4cGJpdDA9InVua25vd24iCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworICAgICAgcm0gLWYgY29uZnRlc3Qub3V0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2NjX2xvbmdfZG91YmxlX2V4cGJpdDAiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9jY19sb25nX2RvdWJsZV9leHBiaXQwIiA+JjY7IH0KKyAgY2FzZSAiJGdsX2N2X2NjX2xvbmdfZG91YmxlX2V4cGJpdDAiIGluCisgICAgd29yZCpiaXQqKQorICAgICAgd29yZD1gZWNobyAiJGdsX2N2X2NjX2xvbmdfZG91YmxlX2V4cGJpdDAiIHwgc2VkIC1lICdzL3dvcmQgLy8nIC1lICdzLyBiaXQuKi8vJ2AKKyAgICAgIGJpdD1gZWNobyAiJGdsX2N2X2NjX2xvbmdfZG91YmxlX2V4cGJpdDAiIHwgc2VkIC1lICdzL3dvcmQuKmJpdCAvLydgCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTERCTF9FWFBCSVQwX1dPUkQgJHdvcmQKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTERCTF9FWFBCSVQwX0JJVCAkYml0CitfQUNFT0YKKworICAgICAgOzsKKyAgZXNhYworCisKKworICBmaQorCisKKworCisKKyAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiaXN3YmxhbmsiICJhY19jdl9oYXZlX2RlY2xfaXN3YmxhbmsiICIKKy8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUKKyAgIDx3Y2hhci5oPi4KKyAgIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZSBpbmNsdWRlZAorICAgYmVmb3JlIDx3Y2hhci5oPi4gICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlIDx3Y3R5cGUuaD4KKworIgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfaXN3YmxhbmsiID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCitlbHNlCisgIGFjX2hhdmVfZGVjbD0wCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9JU1dCTEFOSyAkYWNfaGF2ZV9kZWNsCitfQUNFT0YKKworICBpZiB0ZXN0ICRhY19jdl9mdW5jX2lzd2JsYW5rID0gbm87IHRoZW4KKyAgICBIQVZFX0lTV0JMQU5LPTAKKyAgICBpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfaXN3YmxhbmsgPSB5ZXM7IHRoZW4KKyAgICAgIFJFUExBQ0VfSVNXQkxBTks9MQorICAgIGZpCisgIGZpCisgIGlmIHRlc3QgJEhBVkVfSVNXQ05UUkwgPSAwIHx8IHRlc3QgJFJFUExBQ0VfSVNXQ05UUkwgPSAxOyB0aGVuCisgICAgICAgIDoKKyAgZWxzZQorICAgIGlmIHRlc3QgJEhBVkVfSVNXQkxBTksgPSAwIHx8IHRlc3QgJFJFUExBQ0VfSVNXQkxBTksgPSAxOyB0aGVuCisgICAgICAgICAgICA6CisgICAgZmkKKyAgZmkKKworCisgIGlmIHRlc3QgJEhBVkVfSVNXQ05UUkwgPSAwIHx8IHRlc3QgJFJFUExBQ0VfSVNXQ05UUkwgPSAxOyB0aGVuCisgICAgOgorICBlbHNlCisgICAgaWYgdGVzdCAkSEFWRV9JU1dCTEFOSyA9IDAgfHwgdGVzdCAkUkVQTEFDRV9JU1dCTEFOSyA9IDE7IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGlzd2JsYW5rLiRhY19vYmpleHQiCisKKyAgICBmaQorICBmaQorCisKKworCisKKyAgICAgICAgICBHTlVMSUJfSVNXQkxBTks9MQorCisKKworCisKKyRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX0lTV0JMQU5LIDEiID4+Y29uZmRlZnMuaAorCisKKworICAjIFlvdSBuZWVkIHRvIGludm9rZSBndF9KQVZBQ09NUCB5b3Vyc2VsZiwgcG9zc2libHkgd2l0aCBhcmd1bWVudHMuCisgIGFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBqYXZhY29tcC5zaDpidWlsZC1hdXgvamF2YWNvbXAuc2guaW4iCisKKyAgIyBZb3UgbmVlZCB0byBpbnZva2UgZ3RfSkFWQUVYRUMgeW91cnNlbGYsIHBvc3NpYmx5IHdpdGggYXJndW1lbnRzLgorICBhY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgamF2YWV4ZWMuc2g6YnVpbGQtYXV4L2phdmFleGVjLnNoLmluIgorCisKKworCisgIExERVhQX0xJQk09CisgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfbGRleHBfbm9fbGlibSA9IG5vOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGxkZXhwKCkgY2FuIGJlIHVzZWQgd2l0aCBsaWJtIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbGRleHAoKSBjYW4gYmUgdXNlZCB3aXRoIGxpYm0uLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19sZGV4cF9pbl9saWJtKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgICBzYXZlX0xJQlM9IiRMSUJTIgorICAgICAgICBMSUJTPSIkTElCUyAtbG0iCisgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZm5kZWYgX19OT19NQVRIX0lOTElORVMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkZWZpbmUgX19OT19NQVRIX0lOTElORVMgMSAvKiBmb3IgZ2xpYmMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNpbmNsdWRlIDxtYXRoLmg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAoKmZ1bmNwdHIpIChkb3VibGUsIGludCkgPSBsZGV4cDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHg7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBsZGV4cCAoeCwgLTEpID4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX2xkZXhwX2luX2xpYm09eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfbGRleHBfaW5fbGlibT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgIExJQlM9IiRzYXZlX0xJQlMiCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfbGRleHBfaW5fbGlibSIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfbGRleHBfaW5fbGlibSIgPiY2OyB9CisgICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19sZGV4cF9pbl9saWJtID0geWVzOyB0aGVuCisgICAgICBMREVYUF9MSUJNPS1sbQorICAgIGZpCisgIGZpCisKKworCisKKworCisKKworICAgICAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAibGRleHBsIiAiYWNfY3ZfaGF2ZV9kZWNsX2xkZXhwbCIgIiNpbmNsdWRlIDxtYXRoLmg+CisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9sZGV4cGwiID0geHllczsgdGhlbiA6CisKK2Vsc2UKKyAgSEFWRV9ERUNMX0xERVhQTD0wCitmaQorCisKKyAgTERFWFBMX0xJQk09CisgIGlmIHRlc3QgJEhBVkVfREVDTF9MREVYUEwgPSAxOyB0aGVuCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGxkZXhwbCgpIGNhbiBiZSB1c2VkIHdpdGhvdXQgbGlua2luZyB3aXRoIGxpYm0iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBsZGV4cGwoKSBjYW4gYmUgdXNlZCB3aXRob3V0IGxpbmtpbmcgd2l0aCBsaWJtLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfbGRleHBsX25vX2xpYm0rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bWF0aC5oPgorICAgICAgICAgICAgIGxvbmcgZG91YmxlIHg7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBsZGV4cGwgKHgsIC0xKSA+IDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19sZGV4cGxfbm9fbGlibT15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19sZGV4cGxfbm9fbGlibT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfbGRleHBsX25vX2xpYm0iID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2xkZXhwbF9ub19saWJtIiA+JjY7IH0KKworICAgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfbGRleHBsX25vX2xpYm0gPSBubzsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGxkZXhwbCgpIGNhbiBiZSB1c2VkIHdpdGggbGlibSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGxkZXhwbCgpIGNhbiBiZSB1c2VkIHdpdGggbGlibS4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX2xkZXhwbF9pbl9saWJtKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgICAgICAgTElCUz0iJExJQlMgLWxtIgorICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxtYXRoLmg+CisgICAgICAgICAgICAgICAgIGxvbmcgZG91YmxlIHg7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBsZGV4cGwgKHgsIC0xKSA+IDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19sZGV4cGxfaW5fbGlibT15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19sZGV4cGxfaW5fbGlibT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgTElCUz0iJHNhdmVfTElCUyIKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19sZGV4cGxfaW5fbGlibSIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfbGRleHBsX2luX2xpYm0iID4mNjsgfQorICAgICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19sZGV4cGxfaW5fbGlibSA9IHllczsgdGhlbgorICAgICAgICBMREVYUExfTElCTT0tbG0KKyAgICAgIGZpCisgICAgZmkKKyAgICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2xkZXhwbF9ub19saWJtID0geWVzIFwKKyAgICAgICB8fCB0ZXN0ICRnbF9jdl9mdW5jX2xkZXhwbF9pbl9saWJtID0geWVzOyB0aGVuCisgICAgICBzYXZlX0xJQlM9IiRMSUJTIgorICAgICAgTElCUz0iJExJQlMgJExERVhQTF9MSUJNIgorCisKKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGxkZXhwbCB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGxkZXhwbCB3b3Jrcy4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX2xkZXhwbF93b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKworICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgIGFpeCB8IGFpeFszLTZdKikgZ2xfY3ZfZnVuY19sZGV4cGxfd29ya3M9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICopICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19sZGV4cGxfd29ya3M9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgZXNhYworCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPG1hdGguaD4KK2V4dGVybgorI2lmZGVmIF9fY3BsdXNwbHVzCisiQyIKKyNlbmRpZgorbG9uZyBkb3VibGUgbGRleHBsIChsb25nIGRvdWJsZSwgaW50KTsKK2ludCBtYWluKCkKK3sKKyAgaW50IHJlc3VsdCA9IDA7CisgIHsKKyAgICB2b2xhdGlsZSBsb25nIGRvdWJsZSB4ID0gMS4wOworICAgIHZvbGF0aWxlIGxvbmcgZG91YmxlIHkgPSBsZGV4cGwgKHgsIC0xKTsKKyAgICBpZiAoeSAhPSAwLjVMKQorICAgICAgcmVzdWx0IHw9IDE7CisgIH0KKyAgeworICAgIHZvbGF0aWxlIGxvbmcgZG91YmxlIHggPSAxLjczMjA1TDsKKyAgICB2b2xhdGlsZSBsb25nIGRvdWJsZSB5ID0gbGRleHBsICh4LCAwKTsKKyAgICBpZiAoeSAhPSB4KQorICAgICAgcmVzdWx0IHw9IDI7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfbGRleHBsX3dvcmtzPXllcworZWxzZQorICBnbF9jdl9mdW5jX2xkZXhwbF93b3Jrcz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19sZGV4cGxfd29ya3MiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2xkZXhwbF93b3JrcyIgPiY2OyB9CisKKyAgICAgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19sZGV4cGxfd29ya3MiIGluCisgICAgICAgICp5ZXMpIGdsX2Z1bmNfbGRleHBsPXllcyA7OworICAgICAgICAqKSAgICBnbF9mdW5jX2xkZXhwbD1ubzsgUkVQTEFDRV9MREVYUEw9MSA7OworICAgICAgZXNhYworICAgIGVsc2UKKyAgICAgIGdsX2Z1bmNfbGRleHBsPW5vCisgICAgZmkKKyAgICBpZiB0ZXN0ICRnbF9mdW5jX2xkZXhwbCA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xERVhQTCAxIiA+PmNvbmZkZWZzLmgKKworICAgIGZpCisgIGZpCisgIGlmIHRlc3QgJEhBVkVfREVDTF9MREVYUEwgPSAwIHx8IHRlc3QgJGdsX2Z1bmNfbGRleHBsID0gbm87IHRoZW4KKyAgICAgICAgaWYgdGVzdCAkSEFWRV9TQU1FX0xPTkdfRE9VQkxFX0FTX0RPVUJMRSA9IDE7IHRoZW4KKworICAgICAgTERFWFBMX0xJQk09IiRMREVYUF9MSUJNIgorICAgIGVsc2UKKyAgICAgIExERVhQTF9MSUJNPSIkSVNOQU5MX0xJQk0iCisgICAgZmkKKyAgZmkKKworCisgIGlmIHRlc3QgJEhBVkVfREVDTF9MREVYUEwgPSAwIHx8IHRlc3QgJGdsX2Z1bmNfbGRleHBsID0gbm87IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGxkZXhwbC4kYWNfb2JqZXh0IgorCisgIGZpCisKKworCisKKworICAgICAgICAgIEdOVUxJQl9MREVYUEw9MQorCisKKworCisKKyRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX0xERVhQTCAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCisKKworCisKKworCisgIExPQ0FMQ0hBUlNFVF9URVNUU19FTlZJUk9OTUVOVD0iQ0hBUlNFVEFMSUFTRElSPVwiXCQoYWJzX3RvcF9idWlsZGRpcikvJGdsX3NvdXJjZV9iYXNlXCIiCisKKworCisgIGlmIHRlc3QgIiRnbF90aHJlYWRzX2FwaSIgPSBwb3NpeDsgdGhlbgorICAgICMgT1NGLzEgNC4wIGFuZCBNYWMgT1MgWCAxMC4xIGxhY2sgdGhlIHB0aHJlYWRfcndsb2NrX3QgdHlwZSBhbmQgdGhlCisgICAgIyBwdGhyZWFkX3J3bG9ja18qIGZ1bmN0aW9ucy4KKyAgICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJwdGhyZWFkX3J3bG9ja190IiAiYWNfY3ZfdHlwZV9wdGhyZWFkX3J3bG9ja190IiAiI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9wdGhyZWFkX3J3bG9ja190IiA9IHh5ZXM7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1BUSFJFQURfUldMT0NLIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisgICAgIyBnbGliYyBkZWZpbmVzIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFIGFzIGVudW0sIG5vdCBhcyBhIG1hY3JvLgorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgI2luY2x1ZGUgPHB0aHJlYWQuaD4KK2ludAorbWFpbiAoKQoreworCisjaWYgX19GcmVlQlNEX18gPT0gNAorZXJyb3IgIk5vLCBpbiBGcmVlQlNEIDQuMCByZWN1cnNpdmUgbXV0ZXhlcyBhY3R1YWxseSBkb24ndCB3b3JrLiIKKyNlbHNlCitpbnQgeCA9IChpbnQpUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkU7CityZXR1cm4gIXg7CisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUgMSIgPj5jb25mZGVmcy5oCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgOgorCisKKworCisKKyAgICAgIGZvciBhY19oZWFkZXIgaW4gc3RkbGliLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN0ZGxpYi5oIiAiYWNfY3ZfaGVhZGVyX3N0ZGxpYl9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zdGRsaWJfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NURExJQl9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR05VIGxpYmMgY29tcGF0aWJsZSBtYWxsb2MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdOVSBsaWJjIGNvbXBhdGlibGUgbWFsbG9jLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gcGxhdGZvcm1zIHdoZXJlIHdlIGtub3cgdGhlIHJlc3VsdC4KKyAgICAgICAgICAqLWdudSogfCBmcmVlYnNkKiB8IG5ldGJzZCogfCBvcGVuYnNkKiBcCisgICAgICAgICAgfCBocHV4KiB8IHNvbGFyaXMqIHwgY3lnd2luKiB8IG1pbmd3KikKKyAgICAgICAgICAgIGFjX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbD15ZXMgOzsKKyAgICAgICAgICAjIElmIHdlIGRvbid0IGtub3csIGFzc3VtZSB0aGUgd29yc3QuCisgICAgICAgICAgKikgYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPW5vIDs7CisgICAgICAgIGVzYWMKKworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBIQVZFX1NURExJQl9ICisgICAgICAgICAgICAjIGluY2x1ZGUgPHN0ZGxpYi5oPgorICAgICAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgIGNoYXIgKm1hbGxvYyAoKTsKKyAgICAgICAgICAgICNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3JldHVybiAhIG1hbGxvYyAoMCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbD15ZXMKK2Vsc2UKKyAgYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX21hbGxvY18wX25vbm51bGwiID4mNQorJGFzX2VjaG8gIiRhY19jdl9mdW5jX21hbGxvY18wX25vbm51bGwiID4mNjsgfQorICBpZiB0ZXN0ICRhY19jdl9mdW5jX21hbGxvY18wX25vbm51bGwgPSB5ZXM7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX01BTExPQ19HTlUgMSIgPj5jb25mZGVmcy5oCisKK2Vsc2UKKyAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9NQUxMT0NfR05VIDAiID4+Y29uZmRlZnMuaAorCisgICAgIFJFUExBQ0VfTUFMTE9DPTEKKworZmkKKworCisgIGlmIHRlc3QgJFJFUExBQ0VfTUFMTE9DID0gMTsgdGhlbgorCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgbWFsbG9jLiRhY19vYmpleHQiCisKKyAgZmkKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEdOVUxJQl9NQUxMT0NfR05VIDEKK19BQ0VPRgorCisKKworCisKKyAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19tYWxsb2NfcG9zaXggPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9NQUxMT0NfUE9TSVggMSIgPj5jb25mZGVmcy5oCisKKyAgZWxzZQorICAgIFJFUExBQ0VfTUFMTE9DPTEKKyAgZmkKKworICBpZiB0ZXN0ICRSRVBMQUNFX01BTExPQyA9IDE7IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIG1hbGxvYy4kYWNfb2JqZXh0IgorCisgIGZpCisKKworCisKKworICAgICAgICAgIEdOVUxJQl9NQUxMT0NfUE9TSVg9MQorCisKKworCisKKyRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX01BTExPQ19QT1NJWCAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCisKKworCisKKworCisKKworCisgICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzOyB0aGVuCisgICAgICAgZ2xfY3ZfbmV4dF9tYXRoX2g9JzwnbWF0aC5oJz4nCisgICAgIGVsc2UKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPG1hdGguaD4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8bWF0aC5oPi4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9uZXh0X21hdGhfaCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgICAgICAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfbWF0aF9oID0geWVzOyB0aGVuCisKKworICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPG1hdGguaD4KKworX0FDRU9GCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgYWl4KikgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAgLUMiIDs7CisgICAgICAgICAgICAgICAgICopICAgIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIiA7OworICAgICAgICAgICAgICAgZXNhYworCisgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgbWluZ3cqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2RpcnNlcF9yZWdleD0nWy9cXF0nCisgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICBnbF9kaXJzZXBfcmVnZXg9J1wvJworICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9tYWtlX2xpdGVyYWxfcmVnZXhfc2VkPSdzLFtdJF5cXC4qL1tdLFxcJixnJworCisgICAgICAgICAgICAgICBnbF9oZWFkZXJfbGl0ZXJhbF9yZWdleD1gZWNobyAnbWF0aC5oJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgIiRnbF9tYWtlX2xpdGVyYWxfcmVnZXhfc2VkImAKKyAgICAgICAgICAgICAgIGdsX2Fic29sdXRlX2hlYWRlcl9zZWQ9Ii8ke2dsX2RpcnNlcF9yZWdleH0ke2dsX2hlYWRlcl9saXRlcmFsX3JlZ2V4fS8iJ3sKKyAgICAgICAgICAgICAgICAgICBzLy4qIlwoLionIiR7Z2xfZGlyc2VwX3JlZ2V4fSR7Z2xfaGVhZGVyX2xpdGVyYWxfcmVnZXh9IidcKSIuKi9cMS8KKyAgICAgICAgICAgICAgICAgICBzfF4vW14vXXwvLyZ8CisgICAgICAgICAgICAgICAgICAgcAorICAgICAgICAgICAgICAgICAgIHEKKyAgICAgICAgICAgICAgICAgfScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X25leHRfbWF0aF9oPSciJ2AoZXZhbCAiJGdsX2Fic25hbWVfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgICAgICAgICAgICAgICAgICAgICBzZWQgLW4gIiRnbF9hYnNvbHV0ZV9oZWFkZXJfc2VkImAnIicKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICBnbF9jdl9uZXh0X21hdGhfaD0nPCdtYXRoLmgnPicKKyAgICAgICAgICAgICBmaQorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X25leHRfbWF0aF9oIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfbmV4dF9tYXRoX2giID4mNjsgfQorICAgICBmaQorICAgICBORVhUX01BVEhfSD0kZ2xfY3ZfbmV4dF9tYXRoX2gKKworICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllcyB8fCB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IGJ1Z2d5OyB0aGVuCisgICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNsdWRlX25leHQnCisgICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9JzwnbWF0aC5oJz4nCisgICAgIGVsc2UKKyAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGUnCisgICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9JGdsX2N2X25leHRfbWF0aF9oCisgICAgIGZpCisgICAgIE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX01BVEhfSD0kZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmUKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBOQU4gbWFjcm8gd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBOQU4gbWFjcm8gd29ya3MuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfaGVhZGVyX21hdGhfbmFuX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPG1hdGguaD4KK2ludAorbWFpbiAoKQoreworLyogU29sYXJpcyAxMCBoYXMgYSBicm9rZW4gZGVmaW5pdGlvbiBvZiBOQU4uICBPdGhlciBwbGF0Zm9ybXMKKyAgICAgICAgZmFpbCB0byBwcm92aWRlIE5BTiwgb3IgcHJvdmlkZSBpdCBvbmx5IGluIEM5OSBtb2RlOyB0aGlzCisgICAgICAgIHRlc3Qgb25seSBuZWVkcyB0byBmYWlsIHdoZW4gTkFOIGlzIHByb3ZpZGVkIGJ1dCB3cm9uZy4gICovCisgICAgICAgICBmbG9hdCBmID0gMS4wZjsKKyNpZmRlZiBOQU4KKyAgICAgICAgIGYgPSBOQU47CisjZW5kaWYKKyAgICAgICAgIHJldHVybiBmID09IDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfaGVhZGVyX21hdGhfbmFuX3dvcmtzPXllcworZWxzZQorICBnbF9jdl9oZWFkZXJfbWF0aF9uYW5fd29ya3M9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2hlYWRlcl9tYXRoX25hbl93b3JrcyIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2hlYWRlcl9tYXRoX25hbl93b3JrcyIgPiY2OyB9CisgIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9tYXRoX25hbl93b3JrcyA9IG5vOyB0aGVuCisgICAgUkVQTEFDRV9OQU49MQorICBmaQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgSFVHRV9WQUwgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBIVUdFX1ZBTCB3b3Jrcy4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9oZWFkZXJfbWF0aF9odWdlX3ZhbF93b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxtYXRoLmg+CitpbnQKK21haW4gKCkKK3sKKy8qIFNvbGFyaXMgMTAgaGFzIGEgYnJva2VuIGRlZmluaXRpb24gb2YgSFVHRV9WQUwuICAqLworICAgICAgICAgZG91YmxlIGQgPSBIVUdFX1ZBTDsKKyAgICAgICAgIHJldHVybiBkID09IDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfaGVhZGVyX21hdGhfaHVnZV92YWxfd29ya3M9eWVzCitlbHNlCisgIGdsX2N2X2hlYWRlcl9tYXRoX2h1Z2VfdmFsX3dvcmtzPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9oZWFkZXJfbWF0aF9odWdlX3ZhbF93b3JrcyIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2hlYWRlcl9tYXRoX2h1Z2VfdmFsX3dvcmtzIiA+JjY7IH0KKyAgaWYgdGVzdCAkZ2xfY3ZfaGVhZGVyX21hdGhfaHVnZV92YWxfd29ya3MgPSBubzsgdGhlbgorICAgIFJFUExBQ0VfSFVHRV9WQUw9MQorICBmaQorCisKKyAgICBmb3IgZ2xfZnVuYyBpbiBhY29zZiBhY29zbCBhc2luZiBhc2lubCBhdGFuZiBhdGFubCAgICAgIGNicnQgY2JydGYgY2JydGwgY2VpbGYgY2VpbGwgY29weXNpZ24gY29weXNpZ25mIGNvcHlzaWdubCBjb3NmIGNvc2wgY29zaGYgICAgICBleHBmIGV4cGwgZXhwMiBleHAyZiBleHAybCBleHBtMSBleHBtMWYgZXhwbTFsICAgICAgZmFic2YgZmFic2wgZmxvb3JmIGZsb29ybCBmbWEgZm1hZiBmbWFsICAgICAgZm1vZCBmbW9kZiBmbW9kbCBmcmV4cGYgZnJleHBsIGh5cG90ZiBoeXBvdGwgICAgICBpbG9nYiBpbG9nYmYgaWxvZ2JsICAgICAgbGRleHBmIGxkZXhwbCAgICAgIGxvZyBsb2dmIGxvZ2wgbG9nMTAgbG9nMTBmIGxvZzEwbCBsb2cxcCBsb2cxcGYgbG9nMXBsIGxvZzIgbG9nMmYgbG9nMmwgICAgICBsb2diIGxvZ2JmIGxvZ2JsICAgICAgbW9kZiBtb2RmZiBtb2RmbCBwb3dmICAgICAgcmVtYWluZGVyIHJlbWFpbmRlcmYgcmVtYWluZGVybCAgICAgIHJpbnQgcmludGYgcmludGwgcm91bmQgcm91bmRmIHJvdW5kbCBzaW5mIHNpbmwgc2luaGYgc3FydGYgc3FydGwgICAgICB0YW5mIHRhbmwgdGFuaGYgdHJ1bmMgdHJ1bmNmIHRydW5jbDsgZG8KKyAgICBhc19nbF9TeW1ib2w9YCRhc19lY2hvICJnbF9jdl9oYXZlX3Jhd19kZWNsXyRnbF9mdW5jIiB8ICRhc190cl9zaGAKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyRhc19nbF9TeW1ib2wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bWF0aC5oPgoraW50CittYWluICgpCit7CisjdW5kZWYgJGdsX2Z1bmMKKyAgKHZvaWQpICRnbF9mdW5jOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiRhc19nbF9TeW1ib2w9eWVzIgorZWxzZQorICBldmFsICIkYXNfZ2xfU3ltYm9sPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJGFzX2dsX1N5bWJvbAorCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgICAgaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19nbF9TeW1ib2wiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV9SQVdfREVDTF8kZ2xfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworICAgICAgICAgICAgICAgICAgICAgZXZhbCBhY19jdl9oYXZlX2RlY2xfJGdsX2Z1bmM9eWVzCitmaQorICAgICAgZG9uZQorCisKKworCisKKworCisKKworCisKKworCisKKworICBpZiB0ZXN0ICRhY19jdl9mdW5jX21ic2luaXQgPSB5ZXMgJiYgdGVzdCAkYWNfY3ZfZnVuY19tYnJ0b3djID0geWVzOyB0aGVuCisKKworCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBtYnJ0b3djIGhhbmRsZXMgaW5jb21wbGV0ZSBjaGFyYWN0ZXJzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbWJydG93YyBoYW5kbGVzIGluY29tcGxldGUgY2hhcmFjdGVycy4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX21icnRvd2NfaW5jb21wbGV0ZV9zdGF0ZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyBubyBvbiBBSVggYW5kIE9TRi8xLgorICAgICAgICBhaXgqIHwgb3NmKikgZ2xfY3ZfZnVuY19tYnJ0b3djX2luY29tcGxldGVfc3RhdGU9Imd1ZXNzaW5nIG5vIiA7OworICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb3RoZXJ3aXNlLgorICAgICAgICAqKSAgICAgICAgICAgZ2xfY3ZfZnVuY19tYnJ0b3djX2luY29tcGxldGVfc3RhdGU9Imd1ZXNzaW5nIHllcyIgOzsKKyAgICAgIGVzYWMKKyAgICAgIGlmIHRlc3QgJExPQ0FMRV9KQSAhPSBub25lOyB0aGVuCisgICAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgOgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKy8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUKKyAgIDx3Y2hhci5oPi4KKyAgIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZQorICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KK2ludCBtYWluICgpCit7CisgIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgIiRMT0NBTEVfSkEiKSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgaW5wdXRbXSA9ICJCXDIxN1wyNTNcMzQ0XDIxN1wyNTFcMzE2ZXIiOyAvKiAiQsO8w59lciIgKi8KKyAgICAgIG1ic3RhdGVfdCBzdGF0ZTsKKyAgICAgIHdjaGFyX3Qgd2M7CisKKyAgICAgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworICAgICAgaWYgKG1icnRvd2MgKCZ3YywgaW5wdXQgKyAxLCAxLCAmc3RhdGUpID09IChzaXplX3QpKC0yKSkKKyAgICAgICAgaWYgKG1ic2luaXQgKCZzdGF0ZSkpCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfbWJydG93Y19pbmNvbXBsZXRlX3N0YXRlPXllcworZWxzZQorICBnbF9jdl9mdW5jX21icnRvd2NfaW5jb21wbGV0ZV9zdGF0ZT1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgICAgIGZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfbWJydG93Y19pbmNvbXBsZXRlX3N0YXRlIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19tYnJ0b3djX2luY29tcGxldGVfc3RhdGUiID4mNjsgfQorCisKKworCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBtYnJ0b3djIHdvcmtzIGFzIHdlbGwgYXMgbWJ0b3djIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbWJydG93YyB3b3JrcyBhcyB3ZWxsIGFzIG1idG93Yy4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX21icnRvd2Nfc2FuaXR5Y2hlY2srOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyBubyBvbiBTb2xhcmlzIDguCisgICAgICAgIHNvbGFyaXMyLjgpIGdsX2N2X2Z1bmNfbWJydG93Y19zYW5pdHljaGVjaz0iZ3Vlc3Npbmcgbm8iIDs7CisgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG90aGVyd2lzZS4KKyAgICAgICAgKikgICAgICAgICAgZ2xfY3ZfZnVuY19tYnJ0b3djX3Nhbml0eWNoZWNrPSJndWVzc2luZyB5ZXMiIDs7CisgICAgICBlc2FjCisgICAgICBpZiB0ZXN0ICRMT0NBTEVfWkhfQ04gIT0gbm9uZTsgdGhlbgorICAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIDoKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisvKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlCisgICA8d2NoYXIuaD4uCisgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUKKyAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CitpbnQgbWFpbiAoKQoreworICAvKiBUaGlzIGZhaWxzIG9uIFNvbGFyaXMgODoKKyAgICAgbWJydG93YyByZXR1cm5zIDIsIGFuZCBzZXRzIHdjIHRvIDB4MDBGMC4KKyAgICAgbWJ0b3djIHJldHVybnMgNCAoY29ycmVjdCkgYW5kIHNldHMgd2MgdG8gMHg1RURDLiAgKi8KKyAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCAiJExPQ0FMRV9aSF9DTiIpICE9IE5VTEwpCisgICAgeworICAgICAgY2hhciBpbnB1dFtdID0gIkJcMjUwXDI3MVwyMDFcMDYwXDIxMVwwNzBlciI7IC8qICJCw7zDn2VyIiAqLworICAgICAgbWJzdGF0ZV90IHN0YXRlOworICAgICAgd2NoYXJfdCB3YzsKKworICAgICAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisgICAgICBpZiAobWJydG93YyAoJndjLCBpbnB1dCArIDMsIDYsICZzdGF0ZSkgIT0gNAorICAgICAgICAgICYmIG1idG93YyAoJndjLCBpbnB1dCArIDMsIDYpID09IDQpCisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX21icnRvd2Nfc2FuaXR5Y2hlY2s9eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfbWJydG93Y19zYW5pdHljaGVjaz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgICAgIGZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfbWJydG93Y19zYW5pdHljaGVjayIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfbWJydG93Y19zYW5pdHljaGVjayIgPiY2OyB9CisKKyAgICBSRVBMQUNFX01CU1RBVEVfVD0wCisgICAgY2FzZSAiJGdsX2N2X2Z1bmNfbWJydG93Y19pbmNvbXBsZXRlX3N0YXRlIiBpbgorICAgICAgKnllcykgOzsKKyAgICAgICopIFJFUExBQ0VfTUJTVEFURV9UPTEgOzsKKyAgICBlc2FjCisgICAgY2FzZSAiJGdsX2N2X2Z1bmNfbWJydG93Y19zYW5pdHljaGVjayIgaW4KKyAgICAgICp5ZXMpIDs7CisgICAgICAqKSBSRVBMQUNFX01CU1RBVEVfVD0xIDs7CisgICAgZXNhYworICBlbHNlCisgICAgUkVQTEFDRV9NQlNUQVRFX1Q9MQorICBmaQorCisKKworICBpZiB0ZXN0ICRhY19jdl9mdW5jX21icnRvd2MgPSBubzsgdGhlbgorICAgIEhBVkVfTUJSVE9XQz0wCisgICAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAibWJydG93YyIgImFjX2N2X2hhdmVfZGVjbF9tYnJ0b3djIiAiCisvKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlCisgICA8d2NoYXIuaD4uCisgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUKKyAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX21icnRvd2MiID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCitlbHNlCisgIGFjX2hhdmVfZGVjbD0wCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9NQlJUT1dDICRhY19oYXZlX2RlY2wKK19BQ0VPRgorCisgICAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX21icnRvd2MgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJFUExBQ0VfTUJSVE9XQz0xCisgICAgZmkKKyAgZWxzZQorICAgIGlmIHRlc3QgJFJFUExBQ0VfTUJTVEFURV9UID0gMTsgdGhlbgorICAgICAgUkVQTEFDRV9NQlJUT1dDPTEKKyAgICBlbHNlCisKKworCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBtYnJ0b3djIGhhbmRsZXMgYSBOVUxMIHB3YyBhcmd1bWVudCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIG1icnRvd2MgaGFuZGxlcyBhIE5VTEwgcHdjIGFyZ3VtZW50Li4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfbWJydG93Y19udWxsX2FyZzErOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgICMgR3Vlc3Mgbm8gb24gU29sYXJpcy4KKyAgICAgICAgc29sYXJpcyopIGdsX2N2X2Z1bmNfbWJydG93Y19udWxsX2FyZzE9Imd1ZXNzaW5nIG5vIiA7OworICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb3RoZXJ3aXNlLgorICAgICAgICAqKSAgICAgICAgZ2xfY3ZfZnVuY19tYnJ0b3djX251bGxfYXJnMT0iZ3Vlc3NpbmcgeWVzIiA7OworICAgICAgZXNhYworICAgICAgaWYgdGVzdCAkTE9DQUxFX0ZSX1VURjggIT0gbm9uZTsgdGhlbgorICAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIDoKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisvKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlCisgICA8d2NoYXIuaD4uCisgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUKKyAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CitpbnQgbWFpbiAoKQoreworICBpbnQgcmVzdWx0ID0gMDsKKworICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICIkTE9DQUxFX0ZSX1VURjgiKSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGNoYXIgaW5wdXRbXSA9ICJcMzAzXDIzN2VyIjsKKyAgICAgIG1ic3RhdGVfdCBzdGF0ZTsKKyAgICAgIHdjaGFyX3Qgd2M7CisgICAgICBzaXplX3QgcmV0OworCisgICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKyAgICAgIHdjID0gKHdjaGFyX3QpIDB4QkFERkFDRTsKKyAgICAgIHJldCA9IG1icnRvd2MgKCZ3YywgaW5wdXQsIDUsICZzdGF0ZSk7CisgICAgICBpZiAocmV0ICE9IDIpCisgICAgICAgIHJlc3VsdCB8PSAxOworICAgICAgaWYgKCFtYnNpbml0ICgmc3RhdGUpKQorICAgICAgICByZXN1bHQgfD0gMjsKKworICAgICAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisgICAgICByZXQgPSBtYnJ0b3djIChOVUxMLCBpbnB1dCwgNSwgJnN0YXRlKTsKKyAgICAgIGlmIChyZXQgIT0gMikgLyogU29sYXJpcyA3IGZhaWxzIGhlcmU6IHJldCBpcyAtMS4gICovCisgICAgICAgIHJlc3VsdCB8PSA0OworICAgICAgaWYgKCFtYnNpbml0ICgmc3RhdGUpKQorICAgICAgICByZXN1bHQgfD0gODsKKyAgICB9CisgIHJldHVybiByZXN1bHQ7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX21icnRvd2NfbnVsbF9hcmcxPXllcworZWxzZQorICBnbF9jdl9mdW5jX21icnRvd2NfbnVsbF9hcmcxPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworICAgICAgZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19tYnJ0b3djX251bGxfYXJnMSIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfbWJydG93Y19udWxsX2FyZzEiID4mNjsgfQorCisKKworCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBtYnJ0b3djIGhhbmRsZXMgYSBOVUxMIHN0cmluZyBhcmd1bWVudCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIG1icnRvd2MgaGFuZGxlcyBhIE5VTEwgc3RyaW5nIGFyZ3VtZW50Li4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfbWJydG93Y19udWxsX2FyZzIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgIyBHdWVzcyBubyBvbiBPU0YvMS4KKyAgICAgICAgb3NmKikgZ2xfY3ZfZnVuY19tYnJ0b3djX251bGxfYXJnMj0iZ3Vlc3Npbmcgbm8iIDs7CisgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG90aGVyd2lzZS4KKyAgICAgICAgKikgICAgZ2xfY3ZfZnVuY19tYnJ0b3djX251bGxfYXJnMj0iZ3Vlc3NpbmcgeWVzIiA7OworICAgICAgZXNhYworICAgICAgaWYgdGVzdCAkTE9DQUxFX0ZSX1VURjggIT0gbm9uZTsgdGhlbgorICAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIDoKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisvKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlCisgICA8d2NoYXIuaD4uCisgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUKKyAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CitpbnQgbWFpbiAoKQoreworICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICIkTE9DQUxFX0ZSX1VURjgiKSAhPSBOVUxMKQorICAgIHsKKyAgICAgIG1ic3RhdGVfdCBzdGF0ZTsKKyAgICAgIHdjaGFyX3Qgd2M7CisgICAgICBpbnQgcmV0OworCisgICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKyAgICAgIHdjID0gKHdjaGFyX3QpIDB4QkFERkFDRTsKKyAgICAgIG1icnRvd2MgKCZ3YywgTlVMTCwgNSwgJnN0YXRlKTsKKyAgICAgIC8qIENoZWNrIHRoYXQgd2Mgd2FzIG5vdCBtb2RpZmllZC4gICovCisgICAgICBpZiAod2MgIT0gKHdjaGFyX3QpIDB4QkFERkFDRSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfbWJydG93Y19udWxsX2FyZzI9eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfbWJydG93Y19udWxsX2FyZzI9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgICAgICBmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX21icnRvd2NfbnVsbF9hcmcyIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19tYnJ0b3djX251bGxfYXJnMiIgPiY2OyB9CisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBtYnJ0b3djIGhhcyBhIGNvcnJlY3QgcmV0dXJuIHZhbHVlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbWJydG93YyBoYXMgYSBjb3JyZWN0IHJldHVybiB2YWx1ZS4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX21icnRvd2NfcmV0dmFsKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3Mgbm8gb24gSFAtVVgsIFNvbGFyaXMsIG5hdGl2ZSBXaW5kb3dzLgorICAgICAgICBocHV4KiB8IHNvbGFyaXMqIHwgbWluZ3cqKSBnbF9jdl9mdW5jX21icnRvd2NfcmV0dmFsPSJndWVzc2luZyBubyIgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb3RoZXJ3aXNlLgorICAgICAgICAqKSAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX21icnRvd2NfcmV0dmFsPSJndWVzc2luZyB5ZXMiIDs7CisgICAgICBlc2FjCisgICAgICBpZiB0ZXN0ICRMT0NBTEVfRlJfVVRGOCAhPSBub25lIHx8IHRlc3QgJExPQ0FMRV9KQSAhPSBub25lIFwKKyAgICAgICAgIHx8IHsgY2FzZSAiJGhvc3Rfb3MiIGluIG1pbmd3KikgdHJ1ZTs7ICopIGZhbHNlOzsgZXNhYzsgfTsgdGhlbgorICAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIDoKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisvKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlCisgICA8d2NoYXIuaD4uCisgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUKKyAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CitpbnQgbWFpbiAoKQoreworICBpbnQgcmVzdWx0ID0gMDsKKyAgaW50IGZvdW5kX3NvbWVfbG9jYWxlID0gMDsKKyAgLyogVGhpcyBmYWlscyBvbiBTb2xhcmlzLiAgKi8KKyAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCAiJExPQ0FMRV9GUl9VVEY4IikgIT0gTlVMTCkKKyAgICB7CisgICAgICBjaGFyIGlucHV0W10gPSAiQlwzMDNcMjc0XDMwM1wyMzdlciI7IC8qICJCw7zDn2VyIiAqLworICAgICAgbWJzdGF0ZV90IHN0YXRlOworICAgICAgd2NoYXJfdCB3YzsKKworICAgICAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisgICAgICBpZiAobWJydG93YyAoJndjLCBpbnB1dCArIDEsIDEsICZzdGF0ZSkgPT0gKHNpemVfdCkoLTIpKQorICAgICAgICB7CisgICAgICAgICAgaW5wdXRbMV0gPSAnXDAnOworICAgICAgICAgIGlmIChtYnJ0b3djICgmd2MsIGlucHV0ICsgMiwgNSwgJnN0YXRlKSAhPSAxKQorICAgICAgICAgICAgcmVzdWx0IHw9IDE7CisgICAgICAgIH0KKyAgICAgIGZvdW5kX3NvbWVfbG9jYWxlID0gMTsKKyAgICB9CisgIC8qIFRoaXMgZmFpbHMgb24gSFAtVVggMTEuMTEuICAqLworICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICIkTE9DQUxFX0pBIikgIT0gTlVMTCkKKyAgICB7CisgICAgICBjaGFyIGlucHV0W10gPSAiQlwyMTdcMjUzXDM0NFwyMTdcMjUxXDMxNmVyIjsgLyogIkLDvMOfZXIiICovCisgICAgICBtYnN0YXRlX3Qgc3RhdGU7CisgICAgICB3Y2hhcl90IHdjOworCisgICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKyAgICAgIGlmIChtYnJ0b3djICgmd2MsIGlucHV0ICsgMSwgMSwgJnN0YXRlKSA9PSAoc2l6ZV90KSgtMikpCisgICAgICAgIHsKKyAgICAgICAgICBpbnB1dFsxXSA9ICdcMCc7CisgICAgICAgICAgaWYgKG1icnRvd2MgKCZ3YywgaW5wdXQgKyAyLCA1LCAmc3RhdGUpICE9IDIpCisgICAgICAgICAgICByZXN1bHQgfD0gMjsKKyAgICAgICAgfQorICAgICAgZm91bmRfc29tZV9sb2NhbGUgPSAxOworICAgIH0KKyAgLyogVGhpcyBmYWlscyBvbiBuYXRpdmUgV2luZG93cy4gICovCisgIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgIkphcGFuZXNlX0phcGFuLjkzMiIpICE9IE5VTEwpCisgICAgeworICAgICAgY2hhciBpbnB1dFtdID0gIjxcMjIzXDM3MlwyMjZcMTczXDIxNFwzNTI+IjsgLyogIjzml6XmnKzoqp4+IiAqLworICAgICAgbWJzdGF0ZV90IHN0YXRlOworICAgICAgd2NoYXJfdCB3YzsKKworICAgICAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisgICAgICBpZiAobWJydG93YyAoJndjLCBpbnB1dCArIDMsIDEsICZzdGF0ZSkgPT0gKHNpemVfdCkoLTIpKQorICAgICAgICB7CisgICAgICAgICAgaW5wdXRbM10gPSAnXDAnOworICAgICAgICAgIGlmIChtYnJ0b3djICgmd2MsIGlucHV0ICsgNCwgNCwgJnN0YXRlKSAhPSAxKQorICAgICAgICAgICAgcmVzdWx0IHw9IDQ7CisgICAgICAgIH0KKyAgICAgIGZvdW5kX3NvbWVfbG9jYWxlID0gMTsKKyAgICB9CisgIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgIkNoaW5lc2VfVGFpd2FuLjk1MCIpICE9IE5VTEwpCisgICAgeworICAgICAgY2hhciBpbnB1dFtdID0gIjxcMjQ0XDM1MVwyNDVcMjczXDI3M1wxNzE+IjsgLyogIjzml6XmnKzoqp4+IiAqLworICAgICAgbWJzdGF0ZV90IHN0YXRlOworICAgICAgd2NoYXJfdCB3YzsKKworICAgICAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisgICAgICBpZiAobWJydG93YyAoJndjLCBpbnB1dCArIDMsIDEsICZzdGF0ZSkgPT0gKHNpemVfdCkoLTIpKQorICAgICAgICB7CisgICAgICAgICAgaW5wdXRbM10gPSAnXDAnOworICAgICAgICAgIGlmIChtYnJ0b3djICgmd2MsIGlucHV0ICsgNCwgNCwgJnN0YXRlKSAhPSAxKQorICAgICAgICAgICAgcmVzdWx0IHw9IDg7CisgICAgICAgIH0KKyAgICAgIGZvdW5kX3NvbWVfbG9jYWxlID0gMTsKKyAgICB9CisgIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgIkNoaW5lc2VfQ2hpbmEuOTM2IikgIT0gTlVMTCkKKyAgICB7CisgICAgICBjaGFyIGlucHV0W10gPSAiPFwzMTBcMzI1XDI2MVwyNzZcMzI1XDEzMj4iOyAvKiAiPOaXpeacrOiqnj4iICovCisgICAgICBtYnN0YXRlX3Qgc3RhdGU7CisgICAgICB3Y2hhcl90IHdjOworCisgICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKyAgICAgIGlmIChtYnJ0b3djICgmd2MsIGlucHV0ICsgMywgMSwgJnN0YXRlKSA9PSAoc2l6ZV90KSgtMikpCisgICAgICAgIHsKKyAgICAgICAgICBpbnB1dFszXSA9ICdcMCc7CisgICAgICAgICAgaWYgKG1icnRvd2MgKCZ3YywgaW5wdXQgKyA0LCA0LCAmc3RhdGUpICE9IDEpCisgICAgICAgICAgICByZXN1bHQgfD0gMTY7CisgICAgICAgIH0KKyAgICAgIGZvdW5kX3NvbWVfbG9jYWxlID0gMTsKKyAgICB9CisgIHJldHVybiAoZm91bmRfc29tZV9sb2NhbGUgPyByZXN1bHQgOiA3Nyk7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX21icnRvd2NfcmV0dmFsPXllcworZWxzZQorICBpZiB0ZXN0ICQ/ICE9IDc3OyB0aGVuCisgICAgICAgICAgICAgZ2xfY3ZfZnVuY19tYnJ0b3djX3JldHZhbD1ubworICAgICAgICAgICBmaQorCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworICAgICAgZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19tYnJ0b3djX3JldHZhbCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfbWJydG93Y19yZXR2YWwiID4mNjsgfQorCisKKworCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBtYnJ0b3djIHJldHVybnMgMCB3aGVuIHBhcnNpbmcgYSBOVUwgY2hhcmFjdGVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbWJydG93YyByZXR1cm5zIDAgd2hlbiBwYXJzaW5nIGEgTlVMIGNoYXJhY3Rlci4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX21icnRvd2NfbnVsX3JldHZhbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIG5vIG9uIFNvbGFyaXMgOCBhbmQgOS4KKyAgICAgICAgc29sYXJpczIuWzg5XSkgZ2xfY3ZfZnVuY19tYnJ0b3djX251bF9yZXR2YWw9Imd1ZXNzaW5nIG5vIiA7OworICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvdGhlcndpc2UuCisgICAgICAgICopICAgICAgICAgICAgIGdsX2N2X2Z1bmNfbWJydG93Y19udWxfcmV0dmFsPSJndWVzc2luZyB5ZXMiIDs7CisgICAgICBlc2FjCisgICAgICBpZiB0ZXN0ICRMT0NBTEVfWkhfQ04gIT0gbm9uZTsgdGhlbgorICAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIDoKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisvKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlCisgICA8d2NoYXIuaD4uCisgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUKKyAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CitpbnQgbWFpbiAoKQoreworICAvKiBUaGlzIGZhaWxzIG9uIFNvbGFyaXMgOCBhbmQgOS4gICovCisgIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgIiRMT0NBTEVfWkhfQ04iKSAhPSBOVUxMKQorICAgIHsKKyAgICAgIG1ic3RhdGVfdCBzdGF0ZTsKKyAgICAgIHdjaGFyX3Qgd2M7CisKKyAgICAgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworICAgICAgaWYgKG1icnRvd2MgKCZ3YywgIiIsIDEsICZzdGF0ZSkgIT0gMCkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfbWJydG93Y19udWxfcmV0dmFsPXllcworZWxzZQorICBnbF9jdl9mdW5jX21icnRvd2NfbnVsX3JldHZhbD1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgICAgIGZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfbWJydG93Y19udWxfcmV0dmFsIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19tYnJ0b3djX251bF9yZXR2YWwiID4mNjsgfQorCisgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19tYnJ0b3djX251bGxfYXJnMSIgaW4KKyAgICAgICAgKnllcykgOzsKKyAgICAgICAgKikKKyRhc19lY2hvICIjZGVmaW5lIE1CUlRPV0NfTlVMTF9BUkcxX0JVRyAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICAgICBSRVBMQUNFX01CUlRPV0M9MQorICAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfbWJydG93Y19udWxsX2FyZzIiIGluCisgICAgICAgICp5ZXMpIDs7CisgICAgICAgICopCiskYXNfZWNobyAiI2RlZmluZSBNQlJUT1dDX05VTExfQVJHMl9CVUcgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgICAgUkVQTEFDRV9NQlJUT1dDPTEKKyAgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX21icnRvd2NfcmV0dmFsIiBpbgorICAgICAgICAqeWVzKSA7OworICAgICAgICAqKQorJGFzX2VjaG8gIiNkZWZpbmUgTUJSVE9XQ19SRVRWQUxfQlVHIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgICAgIFJFUExBQ0VfTUJSVE9XQz0xCisgICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19tYnJ0b3djX251bF9yZXR2YWwiIGluCisgICAgICAgICp5ZXMpIDs7CisgICAgICAgICopCiskYXNfZWNobyAiI2RlZmluZSBNQlJUT1dDX05VTF9SRVRWQUxfQlVHIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgICAgIFJFUExBQ0VfTUJSVE9XQz0xCisgICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZmkKKworICBpZiB0ZXN0ICRIQVZFX01CUlRPV0MgPSAwIHx8IHRlc3QgJFJFUExBQ0VfTUJSVE9XQyA9IDE7IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIG1icnRvd2MuJGFjX29iamV4dCIKKworCisgIDoKKworICBmaQorCisKKworCisKKyAgICAgICAgICBHTlVMSUJfTUJSVE9XQz0xCisKKworCisKKworJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfTUJSVE9XQyAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCisKKworCisgICAgICAgICAgR05VTElCX01CU0NIUj0xCisKKworCisKKworJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfTUJTQ0hSIDEiID4+Y29uZmRlZnMuaAorCisKKworCisKKworCisKKworCisKKworCisKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19tYnNpbml0ID0geWVzICYmIHRlc3QgJGFjX2N2X2Z1bmNfbWJydG93YyA9IHllczsgdGhlbgorCisKKworICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbWJydG93YyBoYW5kbGVzIGluY29tcGxldGUgY2hhcmFjdGVycyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIG1icnRvd2MgaGFuZGxlcyBpbmNvbXBsZXRlIGNoYXJhY3RlcnMuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19tYnJ0b3djX2luY29tcGxldGVfc3RhdGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3Mgbm8gb24gQUlYIGFuZCBPU0YvMS4KKyAgICAgICAgYWl4KiB8IG9zZiopIGdsX2N2X2Z1bmNfbWJydG93Y19pbmNvbXBsZXRlX3N0YXRlPSJndWVzc2luZyBubyIgOzsKKyAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG90aGVyd2lzZS4KKyAgICAgICAgKikgICAgICAgICAgIGdsX2N2X2Z1bmNfbWJydG93Y19pbmNvbXBsZXRlX3N0YXRlPSJndWVzc2luZyB5ZXMiIDs7CisgICAgICBlc2FjCisgICAgICBpZiB0ZXN0ICRMT0NBTEVfSkEgIT0gbm9uZTsgdGhlbgorICAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIDoKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisvKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlCisgICA8d2NoYXIuaD4uCisgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUKKyAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CitpbnQgbWFpbiAoKQoreworICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICIkTE9DQUxFX0pBIikgIT0gTlVMTCkKKyAgICB7CisgICAgICBjb25zdCBjaGFyIGlucHV0W10gPSAiQlwyMTdcMjUzXDM0NFwyMTdcMjUxXDMxNmVyIjsgLyogIkLDvMOfZXIiICovCisgICAgICBtYnN0YXRlX3Qgc3RhdGU7CisgICAgICB3Y2hhcl90IHdjOworCisgICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKyAgICAgIGlmIChtYnJ0b3djICgmd2MsIGlucHV0ICsgMSwgMSwgJnN0YXRlKSA9PSAoc2l6ZV90KSgtMikpCisgICAgICAgIGlmIChtYnNpbml0ICgmc3RhdGUpKQorICAgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX21icnRvd2NfaW5jb21wbGV0ZV9zdGF0ZT15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19tYnJ0b3djX2luY29tcGxldGVfc3RhdGU9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgICAgICBmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX21icnRvd2NfaW5jb21wbGV0ZV9zdGF0ZSIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfbWJydG93Y19pbmNvbXBsZXRlX3N0YXRlIiA+JjY7IH0KKworCisKKworICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbWJydG93YyB3b3JrcyBhcyB3ZWxsIGFzIG1idG93YyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIG1icnRvd2Mgd29ya3MgYXMgd2VsbCBhcyBtYnRvd2MuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19tYnJ0b3djX3Nhbml0eWNoZWNrKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgICAgICMgR3Vlc3Mgbm8gb24gU29sYXJpcyA4LgorICAgICAgICBzb2xhcmlzMi44KSBnbF9jdl9mdW5jX21icnRvd2Nfc2FuaXR5Y2hlY2s9Imd1ZXNzaW5nIG5vIiA7OworICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvdGhlcndpc2UuCisgICAgICAgICopICAgICAgICAgIGdsX2N2X2Z1bmNfbWJydG93Y19zYW5pdHljaGVjaz0iZ3Vlc3NpbmcgeWVzIiA7OworICAgICAgZXNhYworICAgICAgaWYgdGVzdCAkTE9DQUxFX1pIX0NOICE9IG5vbmU7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICA6CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPGxvY2FsZS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQorICAgPHdjaGFyLmg+LgorICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgoraW50IG1haW4gKCkKK3sKKyAgLyogVGhpcyBmYWlscyBvbiBTb2xhcmlzIDg6CisgICAgIG1icnRvd2MgcmV0dXJucyAyLCBhbmQgc2V0cyB3YyB0byAweDAwRjAuCisgICAgIG1idG93YyByZXR1cm5zIDQgKGNvcnJlY3QpIGFuZCBzZXRzIHdjIHRvIDB4NUVEQy4gICovCisgIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgIiRMT0NBTEVfWkhfQ04iKSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGNoYXIgaW5wdXRbXSA9ICJCXDI1MFwyNzFcMjAxXDA2MFwyMTFcMDcwZXIiOyAvKiAiQsO8w59lciIgKi8KKyAgICAgIG1ic3RhdGVfdCBzdGF0ZTsKKyAgICAgIHdjaGFyX3Qgd2M7CisKKyAgICAgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworICAgICAgaWYgKG1icnRvd2MgKCZ3YywgaW5wdXQgKyAzLCA2LCAmc3RhdGUpICE9IDQKKyAgICAgICAgICAmJiBtYnRvd2MgKCZ3YywgaW5wdXQgKyAzLCA2KSA9PSA0KQorICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19tYnJ0b3djX3Nhbml0eWNoZWNrPXllcworZWxzZQorICBnbF9jdl9mdW5jX21icnRvd2Nfc2FuaXR5Y2hlY2s9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgICAgICBmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX21icnRvd2Nfc2FuaXR5Y2hlY2siID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX21icnRvd2Nfc2FuaXR5Y2hlY2siID4mNjsgfQorCisgICAgUkVQTEFDRV9NQlNUQVRFX1Q9MAorICAgIGNhc2UgIiRnbF9jdl9mdW5jX21icnRvd2NfaW5jb21wbGV0ZV9zdGF0ZSIgaW4KKyAgICAgICp5ZXMpIDs7CisgICAgICAqKSBSRVBMQUNFX01CU1RBVEVfVD0xIDs7CisgICAgZXNhYworICAgIGNhc2UgIiRnbF9jdl9mdW5jX21icnRvd2Nfc2FuaXR5Y2hlY2siIGluCisgICAgICAqeWVzKSA7OworICAgICAgKikgUkVQTEFDRV9NQlNUQVRFX1Q9MSA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIFJFUExBQ0VfTUJTVEFURV9UPTEKKyAgZmkKKworCisKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19tYnNpbml0ID0gbm87IHRoZW4KKyAgICBIQVZFX01CU0lOSVQ9MAorICAgIGFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgIm1ic2luaXQiICJhY19jdl9oYXZlX2RlY2xfbWJzaW5pdCIgIgorLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQorICAgPHdjaGFyLmg+LgorICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9tYnNpbml0IiA9IHh5ZXM7IHRoZW4gOgorICBhY19oYXZlX2RlY2w9MQorZWxzZQorICBhY19oYXZlX2RlY2w9MAorZmkKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfTUJTSU5JVCAkYWNfaGF2ZV9kZWNsCitfQUNFT0YKKworICAgIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9tYnNpbml0ID0geWVzOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBSRVBMQUNFX01CU0lOSVQ9MQorICAgIGZpCisgIGVsc2UKKyAgICBpZiB0ZXN0ICRSRVBMQUNFX01CU1RBVEVfVCA9IDE7IHRoZW4KKyAgICAgIFJFUExBQ0VfTUJTSU5JVD0xCisgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgIG1pbmd3KikgUkVQTEFDRV9NQlNJTklUPTEgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorCisgIGlmIHRlc3QgJEhBVkVfTUJTSU5JVCA9IDAgfHwgdGVzdCAkUkVQTEFDRV9NQlNJTklUID0gMTsgdGhlbgorCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgbWJzaW5pdC4kYWNfb2JqZXh0IgorCisKKyAgOgorCisgIGZpCisKKworCisKKworICAgICAgICAgIEdOVUxJQl9NQlNJTklUPTEKKworCisKKworCiskYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9NQlNJTklUIDEiID4+Y29uZmRlZnMuaAorCisKKworCisKKworCisKKyAgICAgICAgICBHTlVMSUJfTUJTUkNIUj0xCisKKworCisKKworJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfTUJTUkNIUiAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCisKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIG1ic3dpZHRoIGlzIGRlY2xhcmVkIGluIDx3Y2hhci5oPiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIG1ic3dpZHRoIGlzIGRlY2xhcmVkIGluIDx3Y2hhci5oPi4uLiAiID4mNjsgfQoraWYgJHthY19jdl9oYXZlX2RlY2xfbWJzd2lkdGgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUKKyAgIDx3Y2hhci5oPi4KKyAgIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZSBpbmNsdWRlZAorICAgYmVmb3JlIDx3Y2hhci5oPi4gICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKworaW50CittYWluICgpCit7CisKKyAgY2hhciAqcCA9IChjaGFyICopIG1ic3dpZHRoOworICByZXR1cm4gIXA7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9oYXZlX2RlY2xfbWJzd2lkdGg9eWVzCitlbHNlCisgIGFjX2N2X2hhdmVfZGVjbF9tYnN3aWR0aD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX21ic3dpZHRoIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGF2ZV9kZWNsX21ic3dpZHRoIiA+JjY7IH0KKyAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX21ic3dpZHRoID0geWVzOyB0aGVuCisgICAgYWNfdmFsPTEKKyAgZWxzZQorICAgIGFjX3ZhbD0wCisgIGZpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ERUNMX01CU1dJRFRIX0lOX1dDSEFSX0ggJGFjX3ZhbAorX0FDRU9GCisKKworCisKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG1ic3RhdGVfdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbWJzdGF0ZV90Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3R5cGVfbWJzdGF0ZV90Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUKKyAgIDx3Y2hhci5oPi4KKyAgIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZQorICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KK2ludAorbWFpbiAoKQoreworbWJzdGF0ZV90IHg7IHJldHVybiBzaXplb2YgeDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl90eXBlX21ic3RhdGVfdD15ZXMKK2Vsc2UKKyAgYWNfY3ZfdHlwZV9tYnN0YXRlX3Q9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3R5cGVfbWJzdGF0ZV90IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfdHlwZV9tYnN0YXRlX3QiID4mNjsgfQorICAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9tYnN0YXRlX3QgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9NQlNUQVRFX1QgMSIgPj5jb25mZGVmcy5oCisKKyAgIGVsc2UKKworJGFzX2VjaG8gIiNkZWZpbmUgbWJzdGF0ZV90IGludCIgPj5jb25mZGVmcy5oCisKKyAgIGZpCisKKworCisKKyAgOgorCisKKyAgaWYgdGVzdCAkSEFWRV9NRU1DSFIgPSAwIHx8IHRlc3QgJFJFUExBQ0VfTUVNQ0hSID0gMTsgdGhlbgorCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgbWVtY2hyLiRhY19vYmpleHQiCisKKworICBmb3IgYWNfaGVhZGVyIGluIGJwLXN5bS5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJicC1zeW0uaCIgImFjX2N2X2hlYWRlcl9icF9zeW1faCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfYnBfc3ltX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9CUF9TWU1fSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKyAgZmkKKworCisKKworCisgICAgICAgICAgR05VTElCX01FTUNIUj0xCisKKworCisKKworJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfTUVNQ0hSIDEiID4+Y29uZmRlZnMuaAorCisKKworCisKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19fc2V0X2ludmFsaWRfcGFyYW1ldGVyX2hhbmRsZXIgPSB5ZXM7IHRoZW4KKyAgICBIQVZFX01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUj0xCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTVNWQ19JTlZBTElEX1BBUkFNRVRFUl9IQU5ETEVSIDEiID4+Y29uZmRlZnMuaAorCisgIGVsc2UKKyAgICBIQVZFX01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUj0wCisgIGZpCisKKworICBpZiB0ZXN0ICRIQVZFX01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUiA9IDE7IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIG1zdmMtaW52YWwuJGFjX29iamV4dCIKKworICBmaQorCisKKworICBpZiB0ZXN0ICRIQVZFX01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUiA9IDE7IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIG1zdmMtbm90aHJvdy4kYWNfb2JqZXh0IgorCisgIGZpCisKKworCisKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG9ic3RhY2tzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBvYnN0YWNrcy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9mdW5jX29ic3RhY2srOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorCQkgICAgICAjaW5jbHVkZSAib2JzdGFjay5oIgoraW50CittYWluICgpCit7CitzdHJ1Y3Qgb2JzdGFjayBtZW07CisJCSAgICAgICAjZGVmaW5lIG9ic3RhY2tfY2h1bmtfYWxsb2MgbWFsbG9jCisJCSAgICAgICAjZGVmaW5lIG9ic3RhY2tfY2h1bmtfZnJlZSBmcmVlCisJCSAgICAgICBvYnN0YWNrX2luaXQgKCZtZW0pOworCQkgICAgICAgb2JzdGFja19mcmVlICgmbWVtLCAwKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9mdW5jX29ic3RhY2s9eWVzCitlbHNlCisgIGFjX2N2X2Z1bmNfb2JzdGFjaz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX29ic3RhY2siID4mNQorJGFzX2VjaG8gIiRhY19jdl9mdW5jX29ic3RhY2siID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfZnVuY19vYnN0YWNrID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfT0JTVEFDSyAxIiA+PmNvbmZkZWZzLmgKKworZWxzZQorCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgb2JzdGFjay4kYWNfb2JqZXh0IgorCitmaQorCisKKworCisKKworICBpZiB0ZXN0ICRhY19jdl9mdW5jX29ic3RhY2tfcHJpbnRmID0gbm8gOyB0aGVuCisKKworICBpZiB0ZXN0ICRhY19jdl9mdW5jX29ic3RhY2tfcHJpbnRmID0geWVzOyB0aGVuCisgICAgUkVQTEFDRV9PQlNUQUNLX1BSSU5URj0xCisgIGZpCisKKyAgZmkKKworCisKKyAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX29ic3RhY2tfcHJpbnRmID0gbm87IHRoZW4KKyAgICBIQVZFX0RFQ0xfT0JTVEFDS19QUklOVEY9MAorICBmaQorCisKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19vYnN0YWNrX3ByaW50ZiA9IG5vIHx8IHRlc3QgJFJFUExBQ0VfT0JTVEFDS19QUklOVEYgPSAxOyB0aGVuCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBvYnN0YWNrX3ByaW50Zi4kYWNfb2JqZXh0IgorCisgIGZpCisKKworCisKKworICAgICAgICAgIEdOVUxJQl9PQlNUQUNLX1BSSU5URj0xCisKKworCisKKworJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfT0JTVEFDS19QUklOVEYgMSIgPj5jb25mZGVmcy5oCisKKworCisKKworICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBtaW5ndyogfCBwdyopCisgICAgICBSRVBMQUNFX09QRU49MQorICAgICAgOzsKKyAgICAqKQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgb3BlbiByZWNvZ25pemVzIGEgdHJhaWxpbmcgc2xhc2giID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBvcGVuIHJlY29nbml6ZXMgYSB0cmFpbGluZyBzbGFzaC4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX29wZW5fc2xhc2grOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAjIEFzc3VtZSB0aGF0IGlmIHdlIGhhdmUgbHN0YXQsIHdlIGNhbiBhbHNvIGNoZWNrIHN5bWxpbmtzLgorICAgICAgICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbHN0YXQgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgIHRvdWNoIGNvbmZ0ZXN0LnRtcAorICAgICAgICAgICAgbG4gLXMgY29uZnRlc3QudG1wIGNvbmZ0ZXN0LmxuaworICAgICAgICAgIGZpCisgICAgICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorCisgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICBmcmVlYnNkKiB8IGFpeCogfCBocHV4KiB8IHNvbGFyaXMyLlswLTldIHwgc29sYXJpczIuWzAtOV0uKikKKyAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19vcGVuX3NsYXNoPSJndWVzc2luZyBubyIgOzsKKyAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfb3Blbl9zbGFzaD0iZ3Vlc3NpbmcgeWVzIiA7OworICAgICAgICAgICAgIGVzYWMKKworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxmY250bC5oPgogI2lmIEhBVkVfVU5JU1REX0gKICMgaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYKLSNpZiBIQVZFX1ZGT1JLX0gKLSMgaW5jbHVkZSA8dmZvcmsuaD4KLSNlbmRpZgotLyogT24gc29tZSBzcGFyYyBzeXN0ZW1zLCBjaGFuZ2VzIGJ5IHRoZSBjaGlsZCB0byBsb2NhbCBhbmQgaW5jb21pbmcKLSAgIGFyZ3VtZW50IHJlZ2lzdGVycyBhcmUgcHJvcGFnYXRlZCBiYWNrIHRvIHRoZSBwYXJlbnQuICBUaGUgY29tcGlsZXIKLSAgIGlzIHRvbGQgYWJvdXQgdGhpcyB3aXRoICNpbmNsdWRlIDx2Zm9yay5oPiwgYnV0IHNvbWUgY29tcGlsZXJzCi0gICAoZS5nLiBnY2MgLU8pIGRvbid0IGdyb2sgPHZmb3JrLmg+LiAgVGVzdCBmb3IgdGhpcyBieSB1c2luZyBhCi0gICBzdGF0aWMgdmFyaWFibGUgd2hvc2UgYWRkcmVzcyBpcyBwdXQgaW50byBhIHJlZ2lzdGVyIHRoYXQgaXMKLSAgIGNsb2JiZXJlZCBieSB0aGUgdmZvcmsuICAqLwotc3RhdGljIHZvaWQKLSNpZmRlZiBfX2NwbHVzcGx1cwotc3BhcmNfYWRkcmVzc190ZXN0IChpbnQgYXJnKQotIyBlbHNlCi1zcGFyY19hZGRyZXNzX3Rlc3QgKGFyZykgaW50IGFyZzsKLSNlbmRpZgoraW50IG1haW4gKCkKIHsKLSAgc3RhdGljIHBpZF90IGNoaWxkOwotICBpZiAoIWNoaWxkKSB7Ci0gICAgY2hpbGQgPSB2Zm9yayAoKTsKLSAgICBpZiAoY2hpbGQgPCAwKSB7Ci0gICAgICBwZXJyb3IgKCJ2Zm9yayIpOwotICAgICAgX2V4aXQoMik7Ci0gICAgfQotICAgIGlmICghY2hpbGQpIHsKLSAgICAgIGFyZyA9IGdldHBpZCgpOwotICAgICAgd3JpdGUoLTEsICIiLCAwKTsKLSAgICAgIF9leGl0IChhcmcpOwotICAgIH0KLSAgfQorICBpbnQgcmVzdWx0ID0gMDsKKyNpZiBIQVZFX0xTVEFUCisgIGlmIChvcGVuICgiY29uZnRlc3QubG5rLyIsIE9fUkRPTkxZKSAhPSAtMSkKKyAgICByZXN1bHQgfD0gMTsKKyNlbmRpZgorICBpZiAob3BlbiAoImNvbmZ0ZXN0LnNsLyIsIE9fQ1JFQVQsIDA2MDApID49IDApCisgICAgcmVzdWx0IHw9IDI7CisgIHJldHVybiByZXN1bHQ7CiB9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX29wZW5fc2xhc2g9eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfb3Blbl9zbGFzaD1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgICAgICAgICBybSAtZiBjb25mdGVzdC5zbCBjb25mdGVzdC50bXAgY29uZnRlc3QubG5rCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfb3Blbl9zbGFzaCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfb3Blbl9zbGFzaCIgPiY2OyB9CisgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19vcGVuX3NsYXNoIiBpbgorICAgICAgICAqbm8pCisKKyRhc19lY2hvICIjZGVmaW5lIE9QRU5fVFJBSUxJTkdfU0xBU0hfQlVHIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgICAgUkVQTEFDRV9PUEVOPTEKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgZXNhYworCisKKworICBpZiB0ZXN0ICRSRVBMQUNFX09QRU4gPSAxOyB0aGVuCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBvcGVuLiRhY19vYmpleHQiCisKKworCisgIDoKKworICBmaQorCisKKworCisKKyAgICAgICAgICBHTlVMSUJfT1BFTj0xCisKKworCisKKworJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfT1BFTiAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCisKKworCisKKworCisgICAgICAgICAgaWYgdGVzdCAiJEVSUk5PX0g6JFJFUExBQ0VfU1RSRVJST1JfMCIgIT0gOjA7IHRoZW4KKyAgICAgICAgICAgIFJFUExBQ0VfUEVSUk9SPTEKKyAgZmkKKyAgY2FzZSAke2dsX2N2X2Z1bmNfc3RyZXJyb3Jfcl93b3Jrcy11bnNldH0gaW4KKyAgICB1bnNldHwqeWVzKQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHBlcnJvciBtYXRjaGVzIHN0cmVycm9yIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgcGVycm9yIG1hdGNoZXMgc3RyZXJyb3IuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19wZXJyb3Jfd29ya3MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfcGVycm9yX3dvcmtzPSJndWVzc2luZyBubyIKKworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8ZXJybm8uaD4KKyAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3RkbGliLmg+CisgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0cmluZy5oPgogCiBpbnQKIG1haW4gKCkKIHsKLSAgcGlkX3QgcGFyZW50ID0gZ2V0cGlkICgpOwotICBwaWRfdCBjaGlsZDsKK2NoYXIgKnN0ciA9IHN0cmVycm9yICgtMSk7CisgICAgICAgICAgICAgICAgaWYgKCFnZXRlbnYoIkNPTkZURVNUX09VVFBVVCIpKSByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICBpZiAoIXN0cikgc3RyID0gIiI7CisgICAgICAgICAgICAgICAgcHV0cyAoc3RyKTsKKyAgICAgICAgICAgICAgICBlcnJubyA9IC0xOworICAgICAgICAgICAgICAgIHBlcnJvciAoIiIpOworICAgICAgICAgICAgICAgIHJldHVybiAwOwogCi0gIHNwYXJjX2FkZHJlc3NfdGVzdCAoMCk7Ci0KLSAgY2hpbGQgPSB2Zm9yayAoKTsKLQotICBpZiAoY2hpbGQgPT0gMCkgewotICAgIC8qIEhlcmUgaXMgYW5vdGhlciB0ZXN0IGZvciBzcGFyYyB2Zm9yayByZWdpc3RlciBwcm9ibGVtcy4gIFRoaXMKLSAgICAgICB0ZXN0IHVzZXMgbG90cyBvZiBsb2NhbCB2YXJpYWJsZXMsIGF0IGxlYXN0IGFzIG1hbnkgbG9jYWwKLSAgICAgICB2YXJpYWJsZXMgYXMgbWFpbiBoYXMgYWxsb2NhdGVkIHNvIGZhciBpbmNsdWRpbmcgY29tcGlsZXIKLSAgICAgICB0ZW1wb3Jhcmllcy4gIDQgbG9jYWxzIGFyZSBlbm91Z2ggZm9yIGdjYyAxLjQwLjMgb24gYSBTb2xhcmlzCi0gICAgICAgNC4xLjMgc3BhcmMsIGJ1dCB3ZSB1c2UgOCB0byBiZSBzYWZlLiAgQSBidWdneSBjb21waWxlciBzaG91bGQKLSAgICAgICByZXVzZSB0aGUgcmVnaXN0ZXIgb2YgcGFyZW50IGZvciBvbmUgb2YgdGhlIGxvY2FsIHZhcmlhYmxlcywKLSAgICAgICBzaW5jZSBpdCB3aWxsIHRoaW5rIHRoYXQgcGFyZW50IGNhbid0IHBvc3NpYmx5IGJlIHVzZWQgYW55IG1vcmUKLSAgICAgICBpbiB0aGlzIHJvdXRpbmUuICBBc3NpZ25pbmcgdG8gdGhlIGxvY2FsIHZhcmlhYmxlIHdpbGwgdGh1cwotICAgICAgIG11bmdlIHBhcmVudCBpbiB0aGUgcGFyZW50IHByb2Nlc3MuICAqLwotICAgIHBpZF90Ci0gICAgICBwID0gZ2V0cGlkKCksIHAxID0gZ2V0cGlkKCksIHAyID0gZ2V0cGlkKCksIHAzID0gZ2V0cGlkKCksCi0gICAgICBwNCA9IGdldHBpZCgpLCBwNSA9IGdldHBpZCgpLCBwNiA9IGdldHBpZCgpLCBwNyA9IGdldHBpZCgpOwotICAgIC8qIENvbnZpbmNlIHRoZSBjb21waWxlciB0aGF0IHAuLnA3IGFyZSBsaXZlOyBvdGhlcndpc2UsIGl0IG1pZ2h0Ci0gICAgICAgdXNlIHRoZSBzYW1lIGhhcmR3YXJlIHJlZ2lzdGVyIGZvciBhbGwgOCBsb2NhbCB2YXJpYWJsZXMuICAqLwotICAgIGlmIChwICE9IHAxIHx8IHAgIT0gcDIgfHwgcCAhPSBwMyB8fCBwICE9IHA0Ci0JfHwgcCAhPSBwNSB8fCBwICE9IHA2IHx8IHAgIT0gcDcpCi0gICAgICBfZXhpdCgxKTsKLQotICAgIC8qIE9uIHNvbWUgc3lzdGVtcyAoZS5nLiBJUklYIDMuMyksIHZmb3JrIGRvZXNuJ3Qgc2VwYXJhdGUgcGFyZW50Ci0gICAgICAgZnJvbSBjaGlsZCBmaWxlIGRlc2NyaXB0b3JzLiAgSWYgdGhlIGNoaWxkIGNsb3NlcyBhIGRlc2NyaXB0b3IKLSAgICAgICBiZWZvcmUgaXQgZXhlY3Mgb3IgZXhpdHMsIHRoaXMgbXVuZ2VzIHRoZSBwYXJlbnQncyBkZXNjcmlwdG9yCi0gICAgICAgYXMgd2VsbC4gIFRlc3QgZm9yIHRoaXMgYnkgY2xvc2luZyBzdGRvdXQgaW4gdGhlIGNoaWxkLiAgKi8KLSAgICBfZXhpdChjbG9zZShmaWxlbm8oc3Rkb3V0KSkgIT0gMCk7Ci0gIH0gZWxzZSB7Ci0gICAgaW50IHN0YXR1czsKLSAgICBzdHJ1Y3Qgc3RhdCBzdDsKLQotICAgIHdoaWxlICh3YWl0KCZzdGF0dXMpICE9IGNoaWxkKQotICAgICAgOwotICAgIGV4aXQoCi0JIC8qIFdhcyB0aGVyZSBzb21lIHByb2JsZW0gd2l0aCB2Zm9ya2luZz8gICovCi0JIGNoaWxkIDwgMAotCi0JIC8qIERpZCB0aGUgY2hpbGQgZmFpbD8gIChUaGlzIHNob3VsZG4ndCBoYXBwZW4uKSAgKi8KLQkgfHwgc3RhdHVzCi0KLQkgLyogRGlkIHRoZSB2Zm9yay9jb21waWxlciBidWcgb2NjdXI/ICAqLwotCSB8fCBwYXJlbnQgIT0gZ2V0cGlkKCkKLQotCSAvKiBEaWQgdGhlIGZpbGUgZGVzY3JpcHRvciBidWcgb2NjdXI/ICAqLwotCSB8fCBmc3RhdChmaWxlbm8oc3Rkb3V0KSwgJnN0KSAhPSAwCi0JICk7Ci0gIH0KKyAgOworICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2Z1bmNfdmZvcmtfd29ya3M9eWVzCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgaWYgQ09ORlRFU1RfT1VUUFVUPTEgLi9jb25mdGVzdCRFWEVFWFQgPmNvbmZ0ZXN0LnR4dDEgMj5jb25mdGVzdC50eHQyIFwKKyAgICAgICAgICAgICAgICYmIGNtcCBjb25mdGVzdC50eHQxIGNvbmZ0ZXN0LnR4dDIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgICBnbF9jdl9mdW5jX3BlcnJvcl93b3Jrcz15ZXMKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wZXJyb3Jfd29ya3M9bm8KKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBybSAtcmYgY29uZnRlc3QudHh0MSBjb25mdGVzdC50eHQyCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1Ci1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0oIGV4aXQgJGFjX3N0YXR1cyApCi1hY19jdl9mdW5jX3Zmb3JrX3dvcmtzPW5vCisgIGdsX2N2X2Z1bmNfcGVycm9yX3dvcmtzPW5vCiBmaQotcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfdmZvcmtfd29ya3MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfdmZvcmtfd29ya3MiID4mNgotCi1maTsKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19mb3JrX3dvcmtzIiA9IHhjcm9zczsgdGhlbgotICBhY19jdl9mdW5jX3Zmb3JrX3dvcmtzPSRhY19jdl9mdW5jX3Zmb3JrCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHJlc3VsdCAkYWNfY3ZfZnVuY192Zm9ya193b3JrcyBndWVzc2VkIGJlY2F1c2Ugb2YgY3Jvc3MgY29tcGlsYXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiByZXN1bHQgJGFjX2N2X2Z1bmNfdmZvcmtfd29ya3MgZ3Vlc3NlZCBiZWNhdXNlIG9mIGNyb3NzIGNvbXBpbGF0aW9uIiA+JjI7fQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAogZmkKIAotaWYgdGVzdCAieCRhY19jdl9mdW5jX3Zmb3JrX3dvcmtzIiA9IHh5ZXM7IHRoZW4KIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9XT1JLSU5HX1ZGT1JLIDEKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfcGVycm9yX3dvcmtzIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19wZXJyb3Jfd29ya3MiID4mNjsgfQorICAgICAgaWYgdGVzdCAiJGdsX2N2X2Z1bmNfcGVycm9yX3dvcmtzIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgUkVQTEFDRV9QRVJST1I9MQorICAgICAgZmkKKyAgICAgIDs7CisgICAgKikKKyAgICAgICAgICAgICAgICAgIFJFUExBQ0VfUEVSUk9SPTEKKyAgICAgIDs7CisgIGVzYWMKKworICBpZiB0ZXN0ICRSRVBMQUNFX1BFUlJPUiA9IDE7IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHBlcnJvci4kYWNfb2JqZXh0IgorCisgIGZpCisKKworCisKKworICAgICAgICAgIEdOVUxJQl9QRVJST1I9MQorCisKKworCisKKyRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX1BFUlJPUiAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCisKKworCisKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19waXBlMiAhPSB5ZXM7IHRoZW4KKyAgICBIQVZFX1BJUEUyPTAKKyAgZmkKKworCisKKworCisKKyAgICAgICAgICBHTlVMSUJfUElQRTI9MQorCisKKworCisKKyRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX1BJUEUyIDEiID4+Y29uZmRlZnMuaAorCisKKworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgR05VTElCX1BJUEUyX1NBRkVSIDEKIF9BQ0VPRgogCisKKworCisKKworCisKKyAgaWYgdGVzdCAkUkVQTEFDRV9QT1NJWF9TUEFXTiA9IDE7IHRoZW4KKyAgICBSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRT0xCisgIGVsc2UKKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2Ugd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2Ugd29ya3MuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19wb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2Vfd29ya3MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgICMgR3Vlc3Mgbm8gb24gU29sYXJpcywgeWVzIG90aGVyd2lzZS4KKyAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgIHNvbGFyaXMqKSBnbF9jdl9mdW5jX3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZV93b3Jrcz0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgICopICAgICAgICBnbF9jdl9mdW5jX3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZV93b3Jrcz0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgZXNhYworCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHNwYXduLmg+CitpbnQgbWFpbiAoKQoreworICBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCBhY3Rpb25zOworICBpZiAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2luaXQgKCZhY3Rpb25zKSAhPSAwKQorICAgIHJldHVybiAxOworICBpZiAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlICgmYWN0aW9ucywgMTAwMDAwMDApID09IDApCisgICAgcmV0dXJuIDI7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19wb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2Vfd29ya3M9eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlX3dvcmtzPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZV93b3JrcyIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlX3dvcmtzIiA+JjY7IH0KKyAgICBjYXNlICIkZ2xfY3ZfZnVuY19wb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2Vfd29ya3MiIGluCisgICAgICAqeWVzKSA7OworICAgICAgKikgUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQUREQ0xPU0U9MSA7OworICAgIGVzYWMKKyAgZmkKKworICBpZiB0ZXN0ICRIQVZFX1BPU0lYX1NQQVdOID0gMCB8fCB0ZXN0ICRSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRSA9IDE7IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHNwYXduX2ZhY3Rpb25fYWRkY2xvc2UuJGFjX29iamV4dCIKKworICBmaQorCisKKworCisKKyAgICAgICAgICBHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERENMT1NFPTEKKworCisKKworCiskYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQUREQ0xPU0UgMSIgPj5jb25mZGVmcy5oCisKKworCisKKworCisKKworCisgIGlmIHRlc3QgJFJFUExBQ0VfUE9TSVhfU1BBV04gPSAxOyB0aGVuCisgICAgUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMj0xCisgIGVsc2UKKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkZHVwMiB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyIHdvcmtzLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDJfd29ya3MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgICMgR3Vlc3Mgbm8gb24gU29sYXJpcywgeWVzIG90aGVyd2lzZS4KKyAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgIHNvbGFyaXMqKSBnbF9jdl9mdW5jX3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyX3dvcmtzPSJndWVzc2luZyBubyI7OworICAgICAgICAgICAgKikgICAgICAgIGdsX2N2X2Z1bmNfcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDJfd29ya3M9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgIGVzYWMKKworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzcGF3bi5oPgoraW50IG1haW4gKCkKK3sKKyAgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgYWN0aW9uczsKKyAgaWYgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19pbml0ICgmYWN0aW9ucykgIT0gMCkKKyAgICByZXR1cm4gMTsKKyAgaWYgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyICgmYWN0aW9ucywgMTAwMDAwMDAsIDIpID09IDApCisgICAgcmV0dXJuIDI7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19wb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkZHVwMl93b3Jrcz15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19wb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkZHVwMl93b3Jrcz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19wb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkZHVwMl93b3JrcyIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDJfd29ya3MiID4mNjsgfQorICAgIGNhc2UgIiRnbF9jdl9mdW5jX3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyX3dvcmtzIiBpbgorICAgICAgKnllcykgOzsKKyAgICAgICopIFJFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDI9MSA7OworICAgIGVzYWMKKyAgZmkKKworICBpZiB0ZXN0ICRIQVZFX1BPU0lYX1NQQVdOID0gMCB8fCB0ZXN0ICRSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BREREVVAyID0gMTsgdGhlbgorCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgc3Bhd25fZmFjdGlvbl9hZGRkdXAyLiRhY19vYmpleHQiCisKKyAgZmkKKworCisKKworCisgICAgICAgICAgR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BREREVVAyPTEKKworCisKKworCiskYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMiAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCisKKworCisKKyAgaWYgdGVzdCAkUkVQTEFDRV9QT1NJWF9TUEFXTiA9IDE7IHRoZW4KKyAgICBSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERPUEVOPTEKKyAgZWxzZQorICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW4gd29ya3MuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19wb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3Blbl93b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgIyBHdWVzcyBubyBvbiBTb2xhcmlzLCB5ZXMgb3RoZXJ3aXNlLgorICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgc29sYXJpcyopIGdsX2N2X2Z1bmNfcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW5fd29ya3M9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICAqKSAgICAgICAgZ2xfY3ZfZnVuY19wb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3Blbl93b3Jrcz0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgZXNhYworCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHNwYXduLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KK2ludCBtYWluICgpCit7CisgIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190IGFjdGlvbnM7CisgIGlmIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfaW5pdCAoJmFjdGlvbnMpICE9IDApCisgICAgcmV0dXJuIDE7CisgIGlmIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3BlbiAoJmFjdGlvbnMsIDEwMDAwMDAwLCAiZm9vIiwgMCwgT19SRE9OTFkpCisgICAgICA9PSAwKQorICAgIHJldHVybiAyOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW5fd29ya3M9eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW5fd29ya3M9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW5fd29ya3MiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuX3dvcmtzIiA+JjY7IH0KKyAgICBjYXNlICIkZ2xfY3ZfZnVuY19wb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3Blbl93b3JrcyIgaW4KKyAgICAgICp5ZXMpIDs7CisgICAgICAqKSBSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERPUEVOPTEgOzsKKyAgICBlc2FjCisgIGZpCisKKyAgaWYgdGVzdCAkSEFWRV9QT1NJWF9TUEFXTiA9IDAgfHwgdGVzdCAkUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURET1BFTiA9IDE7IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHNwYXduX2ZhY3Rpb25fYWRkb3Blbi4kYWNfb2JqZXh0IgorCisgIGZpCisKKworCisKKworICAgICAgICAgIEdOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURET1BFTj0xCisKKworCisKKworJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU4gMSIgPj5jb25mZGVmcy5oCisKKworCisKKworCisgIGlmIHRlc3QgJEhBVkVfUE9TSVhfU1BBV04gPSAwIHx8IHRlc3QgJFJFUExBQ0VfUE9TSVhfU1BBV04gPSAxOyB0aGVuCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBzcGF3bl9mYWN0aW9uX2Rlc3Ryb3kuJGFjX29iamV4dCIKKworICBmaQorCisKKworCisKKyAgICAgICAgICBHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0RFU1RST1k9MQorCisKKworCisKKyRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19ERVNUUk9ZIDEiID4+Y29uZmRlZnMuaAorCisKKworCisKKworICBpZiB0ZXN0ICRIQVZFX1BPU0lYX1NQQVdOID0gMCB8fCB0ZXN0ICRSRVBMQUNFX1BPU0lYX1NQQVdOID0gMTsgdGhlbgorCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgc3Bhd25fZmFjdGlvbl9pbml0LiRhY19vYmpleHQiCisKKyAgZmkKKworCisKKworCisgICAgICAgICAgR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19JTklUPTEKKworCisKKworCiskYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfSU5JVCAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCisKKyAgaWYgdGVzdCAkSEFWRV9QT1NJWF9TUEFXTiA9IDAgfHwgdGVzdCAkUkVQTEFDRV9QT1NJWF9TUEFXTiA9IDE7IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHNwYXduYXR0cl9kZXN0cm95LiRhY19vYmpleHQiCisKKyAgZmkKKworCisKKworCisgICAgICAgICAgR05VTElCX1BPU0lYX1NQQVdOQVRUUl9ERVNUUk9ZPTEKKworCisKKworCiskYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9QT1NJWF9TUEFXTkFUVFJfREVTVFJPWSAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCisKKyAgaWYgdGVzdCAkSEFWRV9QT1NJWF9TUEFXTiA9IDAgfHwgdGVzdCAkUkVQTEFDRV9QT1NJWF9TUEFXTiA9IDE7IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHNwYXduYXR0cl9pbml0LiRhY19vYmpleHQiCisKKyAgZmkKKworCisKKworCisgICAgICAgICAgR05VTElCX1BPU0lYX1NQQVdOQVRUUl9JTklUPTEKKworCisKKworCiskYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9QT1NJWF9TUEFXTkFUVFJfSU5JVCAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCisKKyAgaWYgdGVzdCAkSEFWRV9QT1NJWF9TUEFXTiA9IDAgfHwgdGVzdCAkUkVQTEFDRV9QT1NJWF9TUEFXTiA9IDE7IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHNwYXduYXR0cl9zZXRmbGFncy4kYWNfb2JqZXh0IgorCisgIGZpCisKKworCisKKworICAgICAgICAgIEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VURkxBR1M9MQorCisKKworCisKKyRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX1BPU0lYX1NQQVdOQVRUUl9TRVRGTEFHUyAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCisKKyAgaWYgdGVzdCAkSEFWRV9QT1NJWF9TUEFXTiA9IDAgfHwgdGVzdCAkUkVQTEFDRV9QT1NJWF9TUEFXTiA9IDE7IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHNwYXduYXR0cl9zZXRzaWdtYXNrLiRhY19vYmpleHQiCisKKyAgZmkKKworCisKKworCisgICAgICAgICAgR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTSUdNQVNLPTEKKworCisKKworCiskYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9QT1NJWF9TUEFXTkFUVFJfU0VUU0lHTUFTSyAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCisKKyAgaWYgdGVzdCAkSEFWRV9QT1NJWF9TUEFXTiA9IDAgfHwgdGVzdCAkUkVQTEFDRV9QT1NJWF9TUEFXTiA9IDE7IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHNwYXducC4kYWNfb2JqZXh0IgorCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBzcGF3bmkuJGFjX29iamV4dCIKKworCisgIGZvciBhY19oZWFkZXIgaW4gcGF0aHMuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAicGF0aHMuaCIgImFjX2N2X2hlYWRlcl9wYXRoc19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9wYXRoc19oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfUEFUSFNfSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisgIGZvciBhY19mdW5jIGluIGNvbmZzdHIgc2NoZWRfc2V0cGFyYW0gc2NoZWRfc2V0c2NoZWR1bGVyIHNldGVnaWQgc2V0ZXVpZCB2Zm9yaworZG8gOgorICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKworICBmaQorCisKKworCisKKyAgICAgICAgICBHTlVMSUJfUE9TSVhfU1BBV05QPTEKKworCisKKworCiskYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9QT1NJWF9TUEFXTlAgMSIgPj5jb25mZGVmcy5oCisKKworCisKKworICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2ZyZXhwX25vX2xpYm0gPSB5ZXM7IHRoZW4KKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGZyZXhwIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgZnJleHAgd29ya3MuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19mcmV4cF93b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgIG5ldGJzZCogfCBpcml4KiB8IG1pbmd3KikgZ2xfY3ZfZnVuY19mcmV4cF93b3Jrcz0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgKikgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX2ZyZXhwX3dvcmtzPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgIGVzYWMKKworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX0FMQVJNCisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisvKiBIUCBjYyBvbiBIUC1VWCAxMC4yMCBoYXMgYSBidWcgd2l0aCB0aGUgY29uc3RhbnQgZXhwcmVzc2lvbiAtMC4wLgorICAgSUNDIDEwLjAgaGFzIGEgYnVnIHdoZW4gb3B0aW1pemluZyB0aGUgZXhwcmVzc2lvbiAtemVyby4KKyAgIFRoZSBleHByZXNzaW9uIC1EQkxfTUlOICogREJMX01JTiBkb2VzIG5vdCB3b3JrIHdoZW4gY3Jvc3MtY29tcGlsaW5nCisgICB0byBQb3dlclBDIG9uIE1hYyBPUyBYIDEwLjUuICAqLworI2lmIGRlZmluZWQgX19ocHV4IHx8IGRlZmluZWQgX19zZ2kgfHwgZGVmaW5lZCBfX0lDQworc3RhdGljIGRvdWJsZQorY29tcHV0ZV9taW51c196ZXJvICh2b2lkKQoreworICByZXR1cm4gLURCTF9NSU4gKiBEQkxfTUlOOworfQorIyBkZWZpbmUgbWludXNfemVybyBjb21wdXRlX21pbnVzX3plcm8gKCkKKyNlbHNlCitkb3VibGUgbWludXNfemVybyA9IC0wLjA7CisjZW5kaWYKK2ludCBtYWluKCkKK3sKKyAgaW50IHJlc3VsdCA9IDA7CisgIGludCBpOworICB2b2xhdGlsZSBkb3VibGUgeDsKKyAgZG91YmxlIHplcm8gPSAwLjA7CisjaWYgSEFWRV9BTEFSTQorICAvKiBOZVhUc3RlcCAzLjMgZnJleHAoKSBydW5zIGludG8gYW4gZW5kbGVzcyBsb29wIHdoZW4gY2FsbGVkIG9uIGFuIGluZmluaXRlCisgICAgIG51bWJlci4gIExldCB0aGUgdGVzdCBmYWlsIGluIHRoaXMgY2FzZS4gICovCisgIGFsYXJtICg1KTsKKyNlbmRpZgorICAvKiBUZXN0IG9uIGRlbm9ybWFsaXplZCBudW1iZXJzLiAgKi8KKyAgZm9yIChpID0gMSwgeCA9IDEuMDsgaSA+PSBEQkxfTUlOX0VYUDsgaS0tLCB4ICo9IDAuNSkKKyAgICA7CisgIGlmICh4ID4gMC4wKQorICAgIHsKKyAgICAgIGludCBleHA7CisgICAgICBkb3VibGUgeSA9IGZyZXhwICh4LCAmZXhwKTsKKyAgICAgIC8qIE9uIG1hY2hpbmVzIHdpdGggSUVFRTc1NCBhcml0aG1ldGljOiB4ID0gMS4xMTI1NGUtMzA4LCBleHAgPSAtMTAyMi4KKyAgICAgICAgIE9uIE5ldEJTRDogeSA9IDAuNzUuIENvcnJlY3Q6IHkgPSAwLjUuICAqLworICAgICAgaWYgKHkgIT0gMC41KQorICAgICAgICByZXN1bHQgfD0gMTsKKyAgICB9CisgIC8qIFRlc3Qgb24gaW5maW5pdGUgbnVtYmVycy4gICovCisgIHggPSAxLjAgLyB6ZXJvOworICB7CisgICAgaW50IGV4cDsKKyAgICBkb3VibGUgeSA9IGZyZXhwICh4LCAmZXhwKTsKKyAgICBpZiAoeSAhPSB4KQorICAgICAgcmVzdWx0IHw9IDI7CisgIH0KKyAgLyogVGVzdCBvbiBuZWdhdGl2ZSB6ZXJvLiAgKi8KKyAgeCA9IG1pbnVzX3plcm87CisgIHsKKyAgICBpbnQgZXhwOworICAgIGRvdWJsZSB5ID0gZnJleHAgKHgsICZleHApOworICAgIGlmIChtZW1jbXAgKCZ5LCAmeCwgc2l6ZW9mIHgpKQorICAgICAgcmVzdWx0IHw9IDQ7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfZnJleHBfd29ya3M9eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfZnJleHBfd29ya3M9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfZnJleHBfd29ya3MiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2ZyZXhwX3dvcmtzIiA+JjY7IH0KKworICAgIGNhc2UgIiRnbF9jdl9mdW5jX2ZyZXhwX3dvcmtzIiBpbgorICAgICAgKnllcykKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9GUkVYUF9JTl9MSUJDIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgIDs7CisgICAgZXNhYworICBmaQorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBsZGV4cCBjYW4gYmUgdXNlZCB3aXRob3V0IGxpbmtpbmcgd2l0aCBsaWJtIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbGRleHAgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibS4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX2xkZXhwX25vX2xpYm0rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bWF0aC5oPgorICAgICAgICAgICAgIGRvdWJsZSB4OworICAgICAgICAgICAgIGludCB5OworaW50CittYWluICgpCit7CityZXR1cm4gbGRleHAgKHgsIHkpIDwgMTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX2xkZXhwX25vX2xpYm09eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfbGRleHBfbm9fbGlibT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfbGRleHBfbm9fbGlibSIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfbGRleHBfbm9fbGlibSIgPiY2OyB9CisgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfbGRleHBfbm9fbGlibSA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xERVhQX0lOX0xJQkMgMSIgPj5jb25mZGVmcy5oCisKKyAgZmkKKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGZyZXhwbCgpIGNhbiBiZSB1c2VkIHdpdGhvdXQgbGlua2luZyB3aXRoIGxpYm0iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBmcmV4cGwoKSBjYW4gYmUgdXNlZCB3aXRob3V0IGxpbmtpbmcgd2l0aCBsaWJtLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfZnJleHBsX25vX2xpYm0rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bWF0aC5oPgorICAgICAgICAgICAgIGxvbmcgZG91YmxlIHg7CitpbnQKK21haW4gKCkKK3sKK2ludCBlOyByZXR1cm4gZnJleHBsICh4LCAmZSkgPiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfZnJleHBsX25vX2xpYm09eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfZnJleHBsX25vX2xpYm09bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2ZyZXhwbF9ub19saWJtIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19mcmV4cGxfbm9fbGlibSIgPiY2OyB9CisKKyAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19mcmV4cGxfbm9fbGlibSA9IHllczsgdGhlbgorCisKKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGZyZXhwbCB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGZyZXhwbCB3b3Jrcy4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX2ZyZXhwbF93b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKworICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgIGFpeCB8IGFpeFszLTZdKiB8IGJlb3MqIHwgZGFyd2luKiB8IGlyaXgqIHwgbWluZ3cqIHwgcHcqKQorICAgICAgICAgICAgICBnbF9jdl9mdW5jX2ZyZXhwbF93b3Jrcz0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgKikgZ2xfY3ZfZnVuY19mcmV4cGxfd29ya3M9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgZXNhYworCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8bWF0aC5oPgorLyogT3ZlcnJpZGUgdGhlIHZhbHVlcyBvZiA8ZmxvYXQuaD4sIGxpa2UgZG9uZSBpbiBmbG9hdC5pbi5oLiAgKi8KKyNpZiBkZWZpbmVkIF9faTM4Nl9fICYmIChkZWZpbmVkIF9fQkVPU19fIHx8IGRlZmluZWQgX19PcGVuQlNEX18pCisjIHVuZGVmIExEQkxfTUlOX0VYUAorIyBkZWZpbmUgTERCTF9NSU5fRVhQICAgICgtMTYzODEpCisjZW5kaWYKKyNpZiBkZWZpbmVkIF9faTM4Nl9fICYmIGRlZmluZWQgX19GcmVlQlNEX18KKyMgdW5kZWYgTERCTF9NSU5fRVhQCisjIGRlZmluZSBMREJMX01JTl9FWFAgICAgKC0xNjM4MSkKKyNlbmRpZgorI2lmIChkZWZpbmVkIF9BUkNIX1BQQyB8fCBkZWZpbmVkIF9QT1dFUikgJiYgZGVmaW5lZCBfQUlYICYmIChMREJMX01BTlRfRElHID09IDEwNikgJiYgZGVmaW5lZCBfX0dOVUNfXworIyB1bmRlZiBMREJMX01JTl9FWFAKKyMgZGVmaW5lIExEQkxfTUlOX0VYUCBEQkxfTUlOX0VYUAorI2VuZGlmCisjaWYgZGVmaW5lZCBfX3NnaSAmJiAoTERCTF9NQU5UX0RJRyA+PSAxMDYpCisjIGlmIGRlZmluZWQgX19HTlVDX18KKyMgIHVuZGVmIExEQkxfTUlOX0VYUAorIyAgZGVmaW5lIExEQkxfTUlOX0VYUCBEQkxfTUlOX0VYUAorIyBlbmRpZgorI2VuZGlmCitleHRlcm4KKyNpZmRlZiBfX2NwbHVzcGx1cworIkMiCisjZW5kaWYKK2xvbmcgZG91YmxlIGZyZXhwbCAobG9uZyBkb3VibGUsIGludCAqKTsKK2ludCBtYWluKCkKK3sKKyAgaW50IHJlc3VsdCA9IDA7CisgIHZvbGF0aWxlIGxvbmcgZG91YmxlIHg7CisgIC8qIFRlc3Qgb24gZmluaXRlIG51bWJlcnMgdGhhdCBmYWlscyBvbiBBSVggNS4xLiAgKi8KKyAgeCA9IDE2LjBMOworICB7CisgICAgaW50IGV4cCA9IC05OTk5OworICAgIGZyZXhwbCAoeCwgJmV4cCk7CisgICAgaWYgKGV4cCAhPSA1KQorICAgICAgcmVzdWx0IHw9IDE7CisgIH0KKyAgLyogVGVzdCBvbiBmaW5pdGUgbnVtYmVycyB0aGF0IGZhaWxzIG9uIE1hYyBPUyBYIDEwLjQsIGJlY2F1c2UgaXRzIGZyZXhwbAorICAgICBmdW5jdGlvbiByZXR1cm5zIGFuIGludmFsaWQgKGluY29ycmVjdGx5IG5vcm1hbGl6ZWQpIHZhbHVlOiBpdCByZXR1cm5zCisgICAgICAgICAgICAgICB5ID0geyAweDNmZTAyOGY1LCAweGMyOGY1YzI4LCAweDNjOWViODUxLCAweGViODUxZWI4IH0KKyAgICAgYnV0IHRoZSBjb3JyZWN0IHJlc3VsdCBpcworICAgICAgICAgIDAuNTA1TCA9IHsgMHgzZmUwMjhmNSwgMHhjMjhmNWMyOSwgMHhiYzU0N2FlMSwgMHg0N2FlMTQ4MCB9ICAqLworICB4ID0gMS4wMUw7CisgIHsKKyAgICBpbnQgZXhwID0gLTk5OTk7CisgICAgbG9uZyBkb3VibGUgeSA9IGZyZXhwbCAoeCwgJmV4cCk7CisgICAgaWYgKCEoZXhwID09IDEgJiYgeSA9PSAwLjUwNUwpKQorICAgICAgcmVzdWx0IHw9IDI7CisgIH0KKyAgLyogVGVzdCBvbiBsYXJnZSBmaW5pdGUgbnVtYmVycy4gIFRoaXMgZmFpbHMgb24gQmVPUyBhdCBpID0gMTYzMjIsIHdoaWxlCisgICAgIExEQkxfTUFYX0VYUCA9IDE2Mzg0LgorICAgICBJbiB0aGUgbG9vcCBlbmQgdGVzdCwgd2UgdGVzdCB4IGFnYWluc3QgSW5maW5pdHksIHJhdGhlciB0aGFuIGNvbXBhcmluZworICAgICBpIHdpdGggTERCTF9NQVhfRVhQLCBiZWNhdXNlIEJlT1MgPGZsb2F0Lmg+IGhhcyBhIHdyb25nIExEQkxfTUFYX0VYUC4gICovCisgIHsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAxLCB4ID0gMS4wTDsgeCAhPSB4ICsgeDsgaSsrLCB4ICo9IDIuMEwpCisgICAgICB7CisgICAgICAgIGludCBleHAgPSAtOTk5OTsKKyAgICAgICAgZnJleHBsICh4LCAmZXhwKTsKKyAgICAgICAgaWYgKGV4cCAhPSBpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCB8PSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgfQorICB9CisgIC8qIFRlc3Qgb24gZGVub3JtYWxpemVkIG51bWJlcnMuICAqLworICB7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMSwgeCA9IDEuMEw7IGkgPj0gTERCTF9NSU5fRVhQOyBpLS0sIHggKj0gMC41TCkKKyAgICAgIDsKKyAgICBpZiAoeCA+IDAuMEwpCisgICAgICB7CisgICAgICAgIGludCBleHA7CisgICAgICAgIGxvbmcgZG91YmxlIHkgPSBmcmV4cGwgKHgsICZleHApOworICAgICAgICAvKiBPbiBtYWNoaW5lcyB3aXRoIElFRUU4NTQgYXJpdGhtZXRpYzogeCA9IDEuNjgxMDVlLTQ5MzIsCisgICAgICAgICAgIGV4cCA9IC0xNjM4MiwgeSA9IDAuNS4gIE9uIE1hYyBPUyBYIDEwLjU6IGV4cCA9IC0xNjM4NCwgeSA9IDAuNS4gICovCisgICAgICAgIGlmIChleHAgIT0gTERCTF9NSU5fRVhQIC0gMSkKKyAgICAgICAgICByZXN1bHQgfD0gODsKKyAgICAgIH0KKyAgfQorICAvKiBUZXN0IG9uIGluZmluaXRlIG51bWJlcnMuICAqLworICB4ID0gMS4wTCAvIDAuMEw7CisgIHsKKyAgICBpbnQgZXhwOworICAgIGxvbmcgZG91YmxlIHkgPSBmcmV4cGwgKHgsICZleHApOworICAgIGlmICh5ICE9IHgpCisgICAgICByZXN1bHQgfD0gMTY7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfZnJleHBsX3dvcmtzPXllcworZWxzZQorICBnbF9jdl9mdW5jX2ZyZXhwbF93b3Jrcz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19mcmV4cGxfd29ya3MiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2ZyZXhwbF93b3JrcyIgPiY2OyB9CisKKyAgICBjYXNlICIkZ2xfY3ZfZnVuY19mcmV4cGxfd29ya3MiIGluCisgICAgICAqeWVzKSBnbF9mdW5jX2ZyZXhwbF9ub19saWJtPXllcyA7OworICAgICAgKikgICAgZ2xfZnVuY19mcmV4cGxfbm9fbGlibT1ubzsgUkVQTEFDRV9GUkVYUEw9MSA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGdsX2Z1bmNfZnJleHBsX25vX2xpYm09bm8KKyAgICAgICAgUkVQTEFDRV9GUkVYUEw9MQorICBmaQorICBpZiB0ZXN0ICRnbF9mdW5jX2ZyZXhwbF9ub19saWJtID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfRlJFWFBMX0lOX0xJQkMgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgICAgIGFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgImZyZXhwbCIgImFjX2N2X2hhdmVfZGVjbF9mcmV4cGwiICIjaW5jbHVkZSA8bWF0aC5oPgorIgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfZnJleHBsIiA9IHh5ZXM7IHRoZW4gOgorCitlbHNlCisgIEhBVkVfREVDTF9GUkVYUEw9MAorZmkKKworICBmaQorCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGxkZXhwbCgpIGNhbiBiZSB1c2VkIHdpdGhvdXQgbGlua2luZyB3aXRoIGxpYm0iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBsZGV4cGwoKSBjYW4gYmUgdXNlZCB3aXRob3V0IGxpbmtpbmcgd2l0aCBsaWJtLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfbGRleHBsX25vX2xpYm0rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bWF0aC5oPgorICAgICAgICAgICAgIGxvbmcgZG91YmxlIHg7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBsZGV4cGwgKHgsIC0xKSA+IDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19sZGV4cGxfbm9fbGlibT15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19sZGV4cGxfbm9fbGlibT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfbGRleHBsX25vX2xpYm0iID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2xkZXhwbF9ub19saWJtIiA+JjY7IH0KKworICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2xkZXhwbF9ub19saWJtID0geWVzOyB0aGVuCisKKworICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbGRleHBsIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbGRleHBsIHdvcmtzLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfbGRleHBsX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorCisgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgYWl4IHwgYWl4WzMtNl0qKSBnbF9jdl9mdW5jX2xkZXhwbF93b3Jrcz0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgKikgICAgICAgICAgICAgICBnbF9jdl9mdW5jX2xkZXhwbF93b3Jrcz0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICBlc2FjCisKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorZXh0ZXJuCisjaWZkZWYgX19jcGx1c3BsdXMKKyJDIgorI2VuZGlmCitsb25nIGRvdWJsZSBsZGV4cGwgKGxvbmcgZG91YmxlLCBpbnQpOworaW50IG1haW4oKQoreworICBpbnQgcmVzdWx0ID0gMDsKKyAgeworICAgIHZvbGF0aWxlIGxvbmcgZG91YmxlIHggPSAxLjA7CisgICAgdm9sYXRpbGUgbG9uZyBkb3VibGUgeSA9IGxkZXhwbCAoeCwgLTEpOworICAgIGlmICh5ICE9IDAuNUwpCisgICAgICByZXN1bHQgfD0gMTsKKyAgfQorICB7CisgICAgdm9sYXRpbGUgbG9uZyBkb3VibGUgeCA9IDEuNzMyMDVMOworICAgIHZvbGF0aWxlIGxvbmcgZG91YmxlIHkgPSBsZGV4cGwgKHgsIDApOworICAgIGlmICh5ICE9IHgpCisgICAgICByZXN1bHQgfD0gMjsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19sZGV4cGxfd29ya3M9eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfbGRleHBsX3dvcmtzPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2xkZXhwbF93b3JrcyIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfbGRleHBsX3dvcmtzIiA+JjY7IH0KKworICAgIGNhc2UgIiRnbF9jdl9mdW5jX2xkZXhwbF93b3JrcyIgaW4KKyAgICAgICp5ZXMpCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTERFWFBMX0lOX0xJQkMgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgImxkZXhwbCIgImFjX2N2X2hhdmVfZGVjbF9sZGV4cGwiICIjaW5jbHVkZSA8bWF0aC5oPgorIgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfbGRleHBsIiA9IHh5ZXM7IHRoZW4gOgorCitlbHNlCisgIEhBVkVfREVDTF9MREVYUEw9MAorZmkKKworICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKKworCisKKyAgaWYgdGVzdCAkZ2xfY3ZfZnVuY192ZnByaW50Zl9wb3NpeCA9IG5vOyB0aGVuCisKKworCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBwcmludGYuJGFjX29iamV4dCIKKworICBSRVBMQUNFX1BSSU5URj0xCisKKyRhc19lY2hvICIjZGVmaW5lIFJFUExBQ0VfUFJJTlRGX1BPU0lYIDEiID4+Y29uZmRlZnMuaAorCisgIDoKKworICBmaQorCisKKworCisKKworICAgICAgICAgIEdOVUxJQl9QUklOVEZfUE9TSVg9MQorCisKKworCisKKyRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX1BSSU5URl9QT1NJWCAxIiA+PmNvbmZkZWZzLmgKKworCisKKworICBhY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJwcm9ncmFtX2ludm9jYXRpb25fbmFtZSIgImFjX2N2X2hhdmVfZGVjbF9wcm9ncmFtX2ludm9jYXRpb25fbmFtZSIgIiNpbmNsdWRlIDxlcnJuby5oPgorIgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUiID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCitlbHNlCisgIGFjX2hhdmVfZGVjbD0wCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9QUk9HUkFNX0lOVk9DQVRJT05fTkFNRSAkYWNfaGF2ZV9kZWNsCitfQUNFT0YKKworICBhY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZSIgImFjX2N2X2hhdmVfZGVjbF9wcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZSIgIiNpbmNsdWRlIDxlcnJuby5oPgorIgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWUiID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCitlbHNlCisgIGFjX2hhdmVfZGVjbD0wCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9QUk9HUkFNX0lOVk9DQVRJT05fU0hPUlRfTkFNRSAkYWNfaGF2ZV9kZWNsCitfQUNFT0YKKworCisgICAgICA6CisKKworICA6CisKKworCisKKworICBmb3IgYWNfZnVuYyBpbiByYWlzZQorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJyYWlzZSIgImFjX2N2X2Z1bmNfcmFpc2UiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfcmFpc2UiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9SQUlTRSAxCitfQUNFT0YKKworZmkKK2RvbmUKKworICBpZiB0ZXN0ICRhY19jdl9mdW5jX3JhaXNlID0gbm87IHRoZW4KKyAgICBIQVZFX1JBSVNFPTAKKyAgZWxzZQorICAgIGlmIHRlc3QgJEhBVkVfTVNWQ19JTlZBTElEX1BBUkFNRVRFUl9IQU5ETEVSID0gMTsgdGhlbgorICAgICAgUkVQTEFDRV9SQUlTRT0xCisgICAgZmkKKworCisKKworICBpZiB0ZXN0ICRnbF9jdl90eXBlX3NpZ3NldF90ID0geWVzOyB0aGVuCisgICAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic2lncHJvY21hc2siICJhY19jdl9mdW5jX3NpZ3Byb2NtYXNrIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3NpZ3Byb2NtYXNrIiA9IHh5ZXM7IHRoZW4gOgorICBnbF9jdl9mdW5jX3NpZ3Byb2NtYXNrPTEKK2ZpCisKKyAgZmkKKyAgaWYgdGVzdCAteiAiJGdsX2N2X2Z1bmNfc2lncHJvY21hc2siOyB0aGVuCisgICAgSEFWRV9QT1NJWF9TSUdOQUxCTE9DS0lORz0wCisgIGZpCisKKyAgICAgIGlmIHRlc3QgJEhBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkcgPSAwOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGZpCisKKyAgZmkKKworICBpZiB0ZXN0ICRIQVZFX1JBSVNFID0gMCB8fCB0ZXN0ICRSRVBMQUNFX1JBSVNFID0gMTsgdGhlbgorCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgcmFpc2UuJGFjX29iamV4dCIKKworICAgIDoKKyAgZmkKKworCisKKworCisgICAgICAgICAgR05VTElCX1JBSVNFPTEKKworCisKKworCiskYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9SQUlTRSAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCisKKworICBmb3IgYWNfZnVuYyBpbiByYXdtZW1jaHIKK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAicmF3bWVtY2hyIiAiYWNfY3ZfZnVuY19yYXdtZW1jaHIiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfcmF3bWVtY2hyIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfUkFXTUVNQ0hSIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfcmF3bWVtY2hyID0gbm87IHRoZW4KKyAgICBIQVZFX1JBV01FTUNIUj0wCisgIGZpCisKKyAgaWYgdGVzdCAkSEFWRV9SQVdNRU1DSFIgPSAwOyB0aGVuCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyByYXdtZW1jaHIuJGFjX29iamV4dCIKKworICAgIDoKKyAgZmkKKworCisKKworCisgICAgICAgICAgR05VTElCX1JBV01FTUNIUj0xCisKKworCisKKworJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfUkFXTUVNQ0hSIDEiID4+Y29uZmRlZnMuaAorCisKKworCisKKworICBpZiB0ZXN0ICRnbF9jdl9mdW5jX21hbGxvY19wb3NpeCA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1JFQUxMT0NfUE9TSVggMSIgPj5jb25mZGVmcy5oCisKKyAgZWxzZQorICAgIFJFUExBQ0VfUkVBTExPQz0xCisgIGZpCisKKyAgaWYgdGVzdCAkUkVQTEFDRV9SRUFMTE9DID0gMTsgdGhlbgorCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgcmVhbGxvYy4kYWNfb2JqZXh0IgorCisgIGZpCisKKworCisKKworICAgICAgICAgIEdOVUxJQl9SRUFMTE9DX1BPU0lYPTEKKworCisKKworCiskYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9SRUFMTE9DX1BPU0lYIDEiID4+Y29uZmRlZnMuaAorCisKKworCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgICNpbmNsdWRlIDxzY2hlZC5oPgorICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSBhOworICAgICAgIGludCBiW10gPSB7IFNDSEVEX0ZJRk8sIFNDSEVEX1JSLCBTQ0hFRF9PVEhFUiB9OworICAgICAgIHBpZF90IHQxOworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIFNDSEVEX0g9JycKK2Vsc2UKKyAgU0NIRURfSD0nc2NoZWQuaCcKKworCisKKworCisKKworCisKKworICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllczsgdGhlbgorICAgICAgIGdsX2N2X25leHRfc2NoZWRfaD0nPCdzY2hlZC5oJz4nCisgICAgIGVsc2UKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHNjaGVkLmg+IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHNjaGVkLmg+Li4uICIgPiY2OyB9CitpZiAke2dsX2N2X25leHRfc2NoZWRfaCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgICAgICAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc2NoZWRfaCA9IHllczsgdGhlbgorCisKKyAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzY2hlZC5oPgorCitfQUNFT0YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICBhaXgqKSBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCAtQyIgOzsKKyAgICAgICAgICAgICAgICAgKikgICAgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAiIDs7CisgICAgICAgICAgICAgICBlc2FjCisKKyAgICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICBtaW5ndyopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZGlyc2VwX3JlZ2V4PSdbL1xcXScKKyAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgIGdsX2RpcnNlcF9yZWdleD0nXC8nCisgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX21ha2VfbGl0ZXJhbF9yZWdleF9zZWQ9J3MsW10kXlxcLiovW10sXFwmLGcnCisKKyAgICAgICAgICAgICAgIGdsX2hlYWRlcl9saXRlcmFsX3JlZ2V4PWBlY2hvICdzY2hlZC5oJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgIiRnbF9tYWtlX2xpdGVyYWxfcmVnZXhfc2VkImAKKyAgICAgICAgICAgICAgIGdsX2Fic29sdXRlX2hlYWRlcl9zZWQ9Ii8ke2dsX2RpcnNlcF9yZWdleH0ke2dsX2hlYWRlcl9saXRlcmFsX3JlZ2V4fS8iJ3sKKyAgICAgICAgICAgICAgICAgICBzLy4qIlwoLionIiR7Z2xfZGlyc2VwX3JlZ2V4fSR7Z2xfaGVhZGVyX2xpdGVyYWxfcmVnZXh9IidcKSIuKi9cMS8KKyAgICAgICAgICAgICAgICAgICBzfF4vW14vXXwvLyZ8CisgICAgICAgICAgICAgICAgICAgcAorICAgICAgICAgICAgICAgICAgIHEKKyAgICAgICAgICAgICAgICAgfScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X25leHRfc2NoZWRfaD0nIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICAgICAgICAgICAgICAgICAgICAgc2VkIC1uICIkZ2xfYWJzb2x1dGVfaGVhZGVyX3NlZCJgJyInCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgZ2xfY3ZfbmV4dF9zY2hlZF9oPSc8J3NjaGVkLmgnPicKKyAgICAgICAgICAgICBmaQorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X25leHRfc2NoZWRfaCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X25leHRfc2NoZWRfaCIgPiY2OyB9CisgICAgIGZpCisgICAgIE5FWFRfU0NIRURfSD0kZ2xfY3ZfbmV4dF9zY2hlZF9oCisKKyAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXMgfHwgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSBidWdneTsgdGhlbgorICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZV9uZXh0JworICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSc8J3NjaGVkLmgnPicKKyAgICAgZWxzZQorICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZScKKyAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0kZ2xfY3ZfbmV4dF9zY2hlZF9oCisgICAgIGZpCisgICAgIE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NDSEVEX0g9JGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlCisKKworCisKKworICAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc2NoZWRfaCA9IHllczsgdGhlbgorICAgICAgIEhBVkVfU0NIRURfSD0xCisgICAgIGVsc2UKKyAgICAgICBIQVZFX1NDSEVEX0g9MAorICAgICBmaQorCisKKyAgICAgYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAic3RydWN0IHNjaGVkX3BhcmFtIiAiYWNfY3ZfdHlwZV9zdHJ1Y3Rfc2NoZWRfcGFyYW0iICIjaW5jbHVkZSA8c2NoZWQuaD4KKyIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9zdHJ1Y3Rfc2NoZWRfcGFyYW0iID0geHllczsgdGhlbiA6CisgIEhBVkVfU1RSVUNUX1NDSEVEX1BBUkFNPTEKK2Vsc2UKKyAgSEFWRV9TVFJVQ1RfU0NIRURfUEFSQU09MAorZmkKKworCisKKworCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKKyAgIGlmIHRlc3QgLW4gIiRTQ0hFRF9IIjsgdGhlbgorICBHTF9HRU5FUkFURV9TQ0hFRF9IX1RSVUU9CisgIEdMX0dFTkVSQVRFX1NDSEVEX0hfRkFMU0U9JyMnCitlbHNlCisgIEdMX0dFTkVSQVRFX1NDSEVEX0hfVFJVRT0nIycKKyAgR0xfR0VORVJBVEVfU0NIRURfSF9GQUxTRT0KK2ZpCisKKworCisKKworICBpZiB0ZXN0ICRhY19jdl9mdW5jX3NpZ2FjdGlvbiA9IHllczsgdGhlbgorICAgIGFjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHNpZ2FjdGlvbiIgInNhX3NpZ2FjdGlvbiIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc2lnYWN0aW9uX3NhX3NpZ2FjdGlvbiIgIiNpbmNsdWRlIDxzaWduYWwuaD4KKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zaWdhY3Rpb25fc2Ffc2lnYWN0aW9uIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT04gMQorX0FDRU9GCisKKworZmkKKworICAgIGlmIHRlc3QgJGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc2lnYWN0aW9uX3NhX3NpZ2FjdGlvbiA9IG5vOyB0aGVuCisgICAgICBIQVZFX1NUUlVDVF9TSUdBQ1RJT05fU0FfU0lHQUNUSU9OPTAKKyAgICBmaQorICBlbHNlCisgICAgSEFWRV9TSUdBQ1RJT049MAorICBmaQorCisgIGlmIHRlc3QgJEhBVkVfU0lHQUNUSU9OID0gMDsgdGhlbgorCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgc2lnYWN0aW9uLiRhY19vYmpleHQiCisKKworCisKKworCisKKyAgYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAic2lnaW5mb190IiAiYWNfY3ZfdHlwZV9zaWdpbmZvX3QiICIKKyNpbmNsdWRlIDxzaWduYWwuaD4KKworIgoraWYgdGVzdCAieCRhY19jdl90eXBlX3NpZ2luZm9fdCIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NJR0lORk9fVCAxCitfQUNFT0YKKworCitmaQorCisgIGlmIHRlc3QgJGFjX2N2X3R5cGVfc2lnaW5mb190ID0gbm87IHRoZW4KKyAgICBIQVZFX1NJR0lORk9fVD0wCisgIGZpCisKKyAgZmkKKworCisKKworCisgICAgICAgICAgR05VTElCX1NJR0FDVElPTj0xCisKKworCisKKworJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfU0lHQUNUSU9OIDEiID4+Y29uZmRlZnMuaAorCisKKworCisKKworCisKKworCisKKworCisKKyAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXM7IHRoZW4KKyAgICAgICBnbF9jdl9uZXh0X3NpZ25hbF9oPSc8J3NpZ25hbC5oJz4nCisgICAgIGVsc2UKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHNpZ25hbC5oPiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxzaWduYWwuaD4uLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfbmV4dF9zaWduYWxfaCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzaWduYWwuaD4KKworX0FDRU9GCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgYWl4KikgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAgLUMiIDs7CisgICAgICAgICAgICAgICAgICopICAgIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIiA7OworICAgICAgICAgICAgICAgZXNhYworCisgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgbWluZ3cqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2RpcnNlcF9yZWdleD0nWy9cXF0nCisgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICBnbF9kaXJzZXBfcmVnZXg9J1wvJworICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9tYWtlX2xpdGVyYWxfcmVnZXhfc2VkPSdzLFtdJF5cXC4qL1tdLFxcJixnJworCisgICAgICAgICAgICAgICBnbF9oZWFkZXJfbGl0ZXJhbF9yZWdleD1gZWNobyAnc2lnbmFsLmgnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAiJGdsX21ha2VfbGl0ZXJhbF9yZWdleF9zZWQiYAorICAgICAgICAgICAgICAgZ2xfYWJzb2x1dGVfaGVhZGVyX3NlZD0iLyR7Z2xfZGlyc2VwX3JlZ2V4fSR7Z2xfaGVhZGVyX2xpdGVyYWxfcmVnZXh9LyIneworICAgICAgICAgICAgICAgICAgIHMvLioiXCguKiciJHtnbF9kaXJzZXBfcmVnZXh9JHtnbF9oZWFkZXJfbGl0ZXJhbF9yZWdleH0iJ1wpIi4qL1wxLworICAgICAgICAgICAgICAgICAgIHN8Xi9bXi9dfC8vJnwKKyAgICAgICAgICAgICAgICAgICBwCisgICAgICAgICAgICAgICAgICAgcQorICAgICAgICAgICAgICAgICB9JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfbmV4dF9zaWduYWxfaD0nIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICAgICAgICAgICAgICAgICAgICAgc2VkIC1uICIkZ2xfYWJzb2x1dGVfaGVhZGVyX3NlZCJgJyInCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfbmV4dF9zaWduYWxfaCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X25leHRfc2lnbmFsX2giID4mNjsgfQorICAgICBmaQorICAgICBORVhUX1NJR05BTF9IPSRnbF9jdl9uZXh0X3NpZ25hbF9oCisKKyAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXMgfHwgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSBidWdneTsgdGhlbgorICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZV9uZXh0JworICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSc8J3NpZ25hbC5oJz4nCisgICAgIGVsc2UKKyAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGUnCisgICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9JGdsX2N2X25leHRfc2lnbmFsX2gKKyAgICAgZmkKKyAgICAgTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU0lHTkFMX0g9JGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlCisKKworCisKKworIyBBSVggZGVjbGFyZXMgc2lnX2F0b21pY190IHRvIGFscmVhZHkgaW5jbHVkZSB2b2xhdGlsZSwgYW5kIEM4OSBjb21waWxlcnMKKyMgdGhlbiBjaG9rZSBvbiAndm9sYXRpbGUgc2lnX2F0b21pY190Jy4gIEM5OSByZXF1aXJlcyB0aGF0IGl0IGNvbXBpbGUuCisgIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInZvbGF0aWxlIHNpZ19hdG9taWNfdCIgImFjX2N2X3R5cGVfdm9sYXRpbGVfc2lnX2F0b21pY190IiAiCisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV92b2xhdGlsZV9zaWdfYXRvbWljX3QiID0geHllczsgdGhlbiA6CisKK2Vsc2UKKyAgSEFWRV9UWVBFX1ZPTEFUSUxFX1NJR19BVE9NSUNfVD0wCitmaQorCisKKworCisKKworCisgIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInNpZ2hhbmRsZXJfdCIgImFjX2N2X3R5cGVfc2lnaGFuZGxlcl90IiAiCisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9zaWdoYW5kbGVyX3QiID0geHllczsgdGhlbiA6CisKK2Vsc2UKKyAgSEFWRV9TSUdIQU5ETEVSX1Q9MAorZmkKKworCisKKyAgICBmb3IgZ2xfZnVuYyBpbiBwdGhyZWFkX3NpZ21hc2sgc2lnYWN0aW9uICAgICBzaWdhZGRzZXQgc2lnZGVsc2V0IHNpZ2VtcHR5c2V0IHNpZ2ZpbGxzZXQgc2lnaXNtZW1iZXIgICAgIHNpZ3BlbmRpbmcgc2lncHJvY21hc2s7IGRvCisgICAgYXNfZ2xfU3ltYm9sPWAkYXNfZWNobyAiZ2xfY3ZfaGF2ZV9yYXdfZGVjbF8kZ2xfZnVuYyIgfCAkYXNfdHJfc2hgCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRnbF9mdW5jIGlzIGRlY2xhcmVkIHdpdGhvdXQgYSBtYWNybyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRnbF9mdW5jIGlzIGRlY2xhcmVkIHdpdGhvdXQgYSBtYWNyby4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskYXNfZ2xfU3ltYm9sKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHNpZ25hbC5oPgorCitpbnQKK21haW4gKCkKK3sKKyN1bmRlZiAkZ2xfZnVuYworICAodm9pZCkgJGdsX2Z1bmM7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJGFzX2dsX1N5bWJvbD15ZXMiCitlbHNlCisgIGV2YWwgIiRhc19nbF9TeW1ib2w9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkYXNfZ2xfU3ltYm9sCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgICBpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2dsX1N5bWJvbCJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFX1JBV19ERUNMXyRnbF9mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCisgICAgICAgICAgICAgICAgICAgICBldmFsIGFjX2N2X2hhdmVfZGVjbF8kZ2xfZnVuYz15ZXMKK2ZpCisgICAgICBkb25lCisKKworCisKKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc2lnbmJpdCBtYWNybyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc2lnbmJpdCBtYWNyby4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX3NpZ25iaXQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIGdsaWJjIHN5c3RlbXMuCisgICAgICAgICAgICotZ251KikgZ2xfY3ZfZnVuY19zaWduYml0PSJndWVzc2luZyB5ZXMiIDs7CisgICAgICAgICAgICAgICAgICAgIyBJZiB3ZSBkb24ndCBrbm93LCBhc3N1bWUgdGhlIHdvcnN0LgorICAgICAgICAgICAqKSAgICAgIGdsX2N2X2Z1bmNfc2lnbmJpdD0iZ3Vlc3Npbmcgbm8iIDs7CisgICAgICAgICBlc2FjCisKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorLyogSWYgc2lnbmJpdCBpcyBkZWZpbmVkIGFzIGEgZnVuY3Rpb24sIGRvbid0IHVzZSBpdCwgc2luY2UgY2FsbGluZyBpdCBmb3IKKyAgICdmbG9hdCcgb3IgJ2xvbmcgZG91YmxlJyBhcmd1bWVudHMgd291bGQgaW52b2x2ZSBjb252ZXJzaW9ucy4KKyAgIElmIHNpZ25iaXQgaXMgbm90IGRlY2xhcmVkIGF0IGFsbCBidXQgZXhpc3RzIGFzIGEgbGlicmFyeSBmdW5jdGlvbiwgZG9uJ3QKKyAgIHVzZSBpdCwgc2luY2UgdGhlIHByb3RvdHlwZSBtYXkgbm90IG1hdGNoLgorICAgSWYgc2lnbmJpdCBpcyBub3QgZGVjbGFyZWQgYXQgYWxsIGJ1dCBleGlzdHMgYXMgYSBjb21waWxlciBidWlsdC1pbiwgZG9uJ3QKKyAgIHVzZSBpdCwgc2luY2UgaXQncyBwcmVmZXJhYmxlIHRvIHVzZSBfX2J1aWx0aW5fc2lnbmJpdCogKG5vIHdhcm5pbmdzLAorICAgbm8gY29udmVyc2lvbnMpLiAgKi8KKyNpZm5kZWYgc2lnbmJpdAorIyBlcnJvciAic2lnbmJpdCBzaG91bGQgYmUgYSBtYWNybyIKKyNlbmRpZgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKiBHbG9iYWwgdmFyaWFibGVzLgorICAgTmVlZGVkIGJlY2F1c2UgR0NDIDQgY29uc3RhbnQtZm9sZHMgX19idWlsdGluX3NpZ25iaXRsIChsaXRlcmFsKQorICAgYnV0IGNhbm5vdCBjb25zdGFudC1mb2xkICAgICAgICAgICAgX19idWlsdGluX3NpZ25iaXRsICh2YXJpYWJsZSkuICAqLworZmxvYXQgdmY7Citkb3VibGUgdmQ7Citsb25nIGRvdWJsZSB2bDsKK2ludCBtYWluICgpCit7CisvKiBIUCBjYyBvbiBIUC1VWCAxMC4yMCBoYXMgYSBidWcgd2l0aCB0aGUgY29uc3RhbnQgZXhwcmVzc2lvbiAtMC4wLgorICAgU28gd2UgdXNlIC1wMGYgYW5kIC1wMGQgaW5zdGVhZC4gICovCitmbG9hdCBwMGYgPSAwLjBmOworZmxvYXQgbTBmID0gLXAwZjsKK2RvdWJsZSBwMGQgPSAwLjA7Citkb3VibGUgbTBkID0gLXAwZDsKKy8qIE9uIEhQLVVYIDEwLjIwLCBuZWdhdGluZyAwLjBMIGRvZXMgbm90IHlpZWxkIC0wLjBMLgorICAgU28gd2UgdXNlIGFub3RoZXIgY29uc3RhbnQgZXhwcmVzc2lvbiBpbnN0ZWFkLgorICAgQnV0IHRoYXQgZXhwcmVzc2lvbiBkb2VzIG5vdCB3b3JrIG9uIG90aGVyIHBsYXRmb3Jtcywgc3VjaCBhcyB3aGVuCisgICBjcm9zcy1jb21waWxpbmcgdG8gUG93ZXJQQyBvbiBNYWMgT1MgWCAxMC41LiAgKi8KK2xvbmcgZG91YmxlIHAwbCA9IDAuMEw7CisjaWYgZGVmaW5lZCBfX2hwdXggfHwgZGVmaW5lZCBfX3NnaQorbG9uZyBkb3VibGUgbTBsID0gLUxEQkxfTUlOICogTERCTF9NSU47CisjZWxzZQorbG9uZyBkb3VibGUgbTBsID0gLXAwbDsKKyNlbmRpZgorICBpbnQgcmVzdWx0ID0gMDsKKyAgaWYgKHNpZ25iaXQgKHZmKSkgLyogbGluayBjaGVjayAqLworICAgIHZmKys7CisgIHsKKyAgICBmbG9hdCBwbHVzX2luZiA9IDEuMGYgLyBwMGY7CisgICAgZmxvYXQgbWludXNfaW5mID0gLTEuMGYgLyBwMGY7CisgICAgaWYgKCEoIXNpZ25iaXQgKDI1NS4wZikKKyAgICAgICAgICAmJiBzaWduYml0ICgtMjU1LjBmKQorICAgICAgICAgICYmICFzaWduYml0IChwMGYpCisgICAgICAgICAgJiYgKG1lbWNtcCAoJm0wZiwgJnAwZiwgc2l6ZW9mIChmbG9hdCkpID09IDAgfHwgc2lnbmJpdCAobTBmKSkKKyAgICAgICAgICAmJiAhc2lnbmJpdCAocGx1c19pbmYpCisgICAgICAgICAgJiYgc2lnbmJpdCAobWludXNfaW5mKSkpCisgICAgICByZXN1bHQgfD0gMTsKKyAgfQorICBpZiAoc2lnbmJpdCAodmQpKSAvKiBsaW5rIGNoZWNrICovCisgICAgdmQrKzsKKyAgeworICAgIGRvdWJsZSBwbHVzX2luZiA9IDEuMCAvIHAwZDsKKyAgICBkb3VibGUgbWludXNfaW5mID0gLTEuMCAvIHAwZDsKKyAgICBpZiAoISghc2lnbmJpdCAoMjU1LjApCisgICAgICAgICAgJiYgc2lnbmJpdCAoLTI1NS4wKQorICAgICAgICAgICYmICFzaWduYml0IChwMGQpCisgICAgICAgICAgJiYgKG1lbWNtcCAoJm0wZCwgJnAwZCwgc2l6ZW9mIChkb3VibGUpKSA9PSAwIHx8IHNpZ25iaXQgKG0wZCkpCisgICAgICAgICAgJiYgIXNpZ25iaXQgKHBsdXNfaW5mKQorICAgICAgICAgICYmIHNpZ25iaXQgKG1pbnVzX2luZikpKQorICAgICAgcmVzdWx0IHw9IDI7CisgIH0KKyAgaWYgKHNpZ25iaXQgKHZsKSkgLyogbGluayBjaGVjayAqLworICAgIHZsKys7CisgIHsKKyAgICBsb25nIGRvdWJsZSBwbHVzX2luZiA9IDEuMEwgLyBwMGw7CisgICAgbG9uZyBkb3VibGUgbWludXNfaW5mID0gLTEuMEwgLyBwMGw7CisgICAgaWYgKHNpZ25iaXQgKDI1NS4wTCkpCisgICAgICByZXN1bHQgfD0gNDsKKyAgICBpZiAoIXNpZ25iaXQgKC0yNTUuMEwpKQorICAgICAgcmVzdWx0IHw9IDQ7CisgICAgaWYgKHNpZ25iaXQgKHAwbCkpCisgICAgICByZXN1bHQgfD0gODsKKyAgICBpZiAoIShtZW1jbXAgKCZtMGwsICZwMGwsIHNpemVvZiAobG9uZyBkb3VibGUpKSA9PSAwIHx8IHNpZ25iaXQgKG0wbCkpKQorICAgICAgcmVzdWx0IHw9IDE2OworICAgIGlmIChzaWduYml0IChwbHVzX2luZikpCisgICAgICByZXN1bHQgfD0gMzI7CisgICAgaWYgKCFzaWduYml0IChtaW51c19pbmYpKQorICAgICAgcmVzdWx0IHw9IDY0OworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19zaWduYml0PXllcworZWxzZQorICBnbF9jdl9mdW5jX3NpZ25iaXQ9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfc2lnbmJpdCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfc2lnbmJpdCIgPiY2OyB9CisgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc2lnbmJpdCBjb21waWxlciBidWlsdC1pbnMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNpZ25iaXQgY29tcGlsZXIgYnVpbHQtaW5zLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfc2lnbmJpdF9nY2MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIGdsaWJjIHN5c3RlbXMuCisgICAgICAgICAgICotZ251KikgZ2xfY3ZfZnVuY19zaWduYml0X2djYz0iZ3Vlc3NpbmcgeWVzIiA7OworICAgICAgICAgICAgICAgICAgICMgSWYgd2UgZG9uJ3Qga25vdywgYXNzdW1lIHRoZSB3b3JzdC4KKyAgICAgICAgICAgKikgICAgICBnbF9jdl9mdW5jX3NpZ25iaXRfZ2NjPSJndWVzc2luZyBubyIgOzsKKyAgICAgICAgIGVzYWMKKworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpZiBfX0dOVUNfXyA+PSA0CisjIGRlZmluZSBzaWduYml0KHgpIFwKKyAgIChzaXplb2YgKHgpID09IHNpemVvZiAobG9uZyBkb3VibGUpID8gX19idWlsdGluX3NpZ25iaXRsICh4KSA6IFwKKyAgICBzaXplb2YgKHgpID09IHNpemVvZiAoZG91YmxlKSA/IF9fYnVpbHRpbl9zaWduYml0ICh4KSA6IFwKKyAgICBfX2J1aWx0aW5fc2lnbmJpdGYgKHgpKQorI2Vsc2UKKyMgZXJyb3IgInNpZ25iaXQgc2hvdWxkIGJlIHRocmVlIGNvbXBpbGVyIGJ1aWx0LWlucyIKKyNlbmRpZgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKiBHbG9iYWwgdmFyaWFibGVzLgorICAgTmVlZGVkIGJlY2F1c2UgR0NDIDQgY29uc3RhbnQtZm9sZHMgX19idWlsdGluX3NpZ25iaXRsIChsaXRlcmFsKQorICAgYnV0IGNhbm5vdCBjb25zdGFudC1mb2xkICAgICAgICAgICAgX19idWlsdGluX3NpZ25iaXRsICh2YXJpYWJsZSkuICAqLworZmxvYXQgdmY7Citkb3VibGUgdmQ7Citsb25nIGRvdWJsZSB2bDsKK2ludCBtYWluICgpCit7CisvKiBIUCBjYyBvbiBIUC1VWCAxMC4yMCBoYXMgYSBidWcgd2l0aCB0aGUgY29uc3RhbnQgZXhwcmVzc2lvbiAtMC4wLgorICAgU28gd2UgdXNlIC1wMGYgYW5kIC1wMGQgaW5zdGVhZC4gICovCitmbG9hdCBwMGYgPSAwLjBmOworZmxvYXQgbTBmID0gLXAwZjsKK2RvdWJsZSBwMGQgPSAwLjA7Citkb3VibGUgbTBkID0gLXAwZDsKKy8qIE9uIEhQLVVYIDEwLjIwLCBuZWdhdGluZyAwLjBMIGRvZXMgbm90IHlpZWxkIC0wLjBMLgorICAgU28gd2UgdXNlIGFub3RoZXIgY29uc3RhbnQgZXhwcmVzc2lvbiBpbnN0ZWFkLgorICAgQnV0IHRoYXQgZXhwcmVzc2lvbiBkb2VzIG5vdCB3b3JrIG9uIG90aGVyIHBsYXRmb3Jtcywgc3VjaCBhcyB3aGVuCisgICBjcm9zcy1jb21waWxpbmcgdG8gUG93ZXJQQyBvbiBNYWMgT1MgWCAxMC41LiAgKi8KK2xvbmcgZG91YmxlIHAwbCA9IDAuMEw7CisjaWYgZGVmaW5lZCBfX2hwdXggfHwgZGVmaW5lZCBfX3NnaQorbG9uZyBkb3VibGUgbTBsID0gLUxEQkxfTUlOICogTERCTF9NSU47CisjZWxzZQorbG9uZyBkb3VibGUgbTBsID0gLXAwbDsKKyNlbmRpZgorICBpbnQgcmVzdWx0ID0gMDsKKyAgaWYgKHNpZ25iaXQgKHZmKSkgLyogbGluayBjaGVjayAqLworICAgIHZmKys7CisgIHsKKyAgICBmbG9hdCBwbHVzX2luZiA9IDEuMGYgLyBwMGY7CisgICAgZmxvYXQgbWludXNfaW5mID0gLTEuMGYgLyBwMGY7CisgICAgaWYgKCEoIXNpZ25iaXQgKDI1NS4wZikKKyAgICAgICAgICAmJiBzaWduYml0ICgtMjU1LjBmKQorICAgICAgICAgICYmICFzaWduYml0IChwMGYpCisgICAgICAgICAgJiYgKG1lbWNtcCAoJm0wZiwgJnAwZiwgc2l6ZW9mIChmbG9hdCkpID09IDAgfHwgc2lnbmJpdCAobTBmKSkKKyAgICAgICAgICAmJiAhc2lnbmJpdCAocGx1c19pbmYpCisgICAgICAgICAgJiYgc2lnbmJpdCAobWludXNfaW5mKSkpCisgICAgICByZXN1bHQgfD0gMTsKKyAgfQorICBpZiAoc2lnbmJpdCAodmQpKSAvKiBsaW5rIGNoZWNrICovCisgICAgdmQrKzsKKyAgeworICAgIGRvdWJsZSBwbHVzX2luZiA9IDEuMCAvIHAwZDsKKyAgICBkb3VibGUgbWludXNfaW5mID0gLTEuMCAvIHAwZDsKKyAgICBpZiAoISghc2lnbmJpdCAoMjU1LjApCisgICAgICAgICAgJiYgc2lnbmJpdCAoLTI1NS4wKQorICAgICAgICAgICYmICFzaWduYml0IChwMGQpCisgICAgICAgICAgJiYgKG1lbWNtcCAoJm0wZCwgJnAwZCwgc2l6ZW9mIChkb3VibGUpKSA9PSAwIHx8IHNpZ25iaXQgKG0wZCkpCisgICAgICAgICAgJiYgIXNpZ25iaXQgKHBsdXNfaW5mKQorICAgICAgICAgICYmIHNpZ25iaXQgKG1pbnVzX2luZikpKQorICAgICAgcmVzdWx0IHw9IDI7CisgIH0KKyAgaWYgKHNpZ25iaXQgKHZsKSkgLyogbGluayBjaGVjayAqLworICAgIHZsKys7CisgIHsKKyAgICBsb25nIGRvdWJsZSBwbHVzX2luZiA9IDEuMEwgLyBwMGw7CisgICAgbG9uZyBkb3VibGUgbWludXNfaW5mID0gLTEuMEwgLyBwMGw7CisgICAgaWYgKHNpZ25iaXQgKDI1NS4wTCkpCisgICAgICByZXN1bHQgfD0gNDsKKyAgICBpZiAoIXNpZ25iaXQgKC0yNTUuMEwpKQorICAgICAgcmVzdWx0IHw9IDQ7CisgICAgaWYgKHNpZ25iaXQgKHAwbCkpCisgICAgICByZXN1bHQgfD0gODsKKyAgICBpZiAoIShtZW1jbXAgKCZtMGwsICZwMGwsIHNpemVvZiAobG9uZyBkb3VibGUpKSA9PSAwIHx8IHNpZ25iaXQgKG0wbCkpKQorICAgICAgcmVzdWx0IHw9IDE2OworICAgIGlmIChzaWduYml0IChwbHVzX2luZikpCisgICAgICByZXN1bHQgfD0gMzI7CisgICAgaWYgKCFzaWduYml0IChtaW51c19pbmYpKQorICAgICAgcmVzdWx0IHw9IDY0OworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19zaWduYml0X2djYz15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19zaWduYml0X2djYz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19zaWduYml0X2djYyIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfc2lnbmJpdF9nY2MiID4mNjsgfQorICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfc2lnbmJpdF9nY2MiIGluCisgICAgKnllcykKKyAgICAgIFJFUExBQ0VfU0lHTkJJVF9VU0lOR19HQ0M9MQorICAgICAgOzsKKyAgICAqKQorICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfc2lnbmJpdCIgaW4KKyAgICAgICAgKnllcykgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgUkVQTEFDRV9TSUdOQklUPTEKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hlcmUgdG8gZmluZCB0aGUgc2lnbiBiaXQgaW4gYSAnZmxvYXQnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXJlIHRvIGZpbmQgdGhlIHNpZ24gYml0IGluIGEgJ2Zsb2F0Jy4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9jY19mbG9hdF9zaWduYml0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9jY19mbG9hdF9zaWduYml0PSJ1bmtub3duIgorCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIE5XT1JEUyBcCisgICgoc2l6ZW9mIChmbG9hdCkgKyBzaXplb2YgKHVuc2lnbmVkIGludCkgLSAxKSAvIHNpemVvZiAodW5zaWduZWQgaW50KSkKK3R5cGVkZWYgdW5pb24geyBmbG9hdCB2YWx1ZTsgdW5zaWduZWQgaW50IHdvcmRbTldPUkRTXTsgfQorICAgICAgICBtZW1vcnlfZmxvYXQ7CitzdGF0aWMgbWVtb3J5X2Zsb2F0IHBsdXMgPSB7IDEuMGYgfTsKK3N0YXRpYyBtZW1vcnlfZmxvYXQgbWludXMgPSB7IC0xLjBmIH07CitpbnQgbWFpbiAoKQoreworICBzaXplX3QgaiwgaywgaTsKKyAgdW5zaWduZWQgaW50IG07CisgIEZJTEUgKmZwID0gZm9wZW4gKCJjb25mdGVzdC5vdXQiLCAidyIpOworICBpZiAoZnAgPT0gTlVMTCkKKyAgICByZXR1cm4gMTsKKyAgLyogRmluZCB0aGUgZGlmZmVyZW50IGJpdC4gICovCisgIGsgPSAwOyBtID0gMDsKKyAgZm9yIChqID0gMDsgaiA8IE5XT1JEUzsgaisrKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCB4ID0gcGx1cy53b3JkW2pdIF4gbWludXMud29yZFtqXTsKKyAgICAgIGlmICgoeCAmICh4IC0gMSkpIHx8ICh4ICYmIG0pKQorICAgICAgICB7CisgICAgICAgICAgLyogTW9yZSB0aGFuIG9uZSBiaXQgZGlmZmVyZW5jZS4gICovCisgICAgICAgICAgZnByaW50ZiAoZnAsICJ1bmtub3duIik7CisgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIH0KKyAgICAgIGlmICh4KQorICAgICAgICB7CisgICAgICAgICAgayA9IGo7CisgICAgICAgICAgbSA9IHg7CisgICAgICAgIH0KKyAgICB9CisgIGlmIChtID09IDApCisgICAgeworICAgICAgLyogTm8gZGlmZmVyZW5jZS4gICovCisgICAgICBmcHJpbnRmIChmcCwgInVua25vd24iKTsKKyAgICAgIHJldHVybiAzOworICAgIH0KKyAgLyogTm93IG0gPSBwbHVzLndvcmRba10gXiB+bWludXMud29yZFtrXS4gICovCisgIGlmIChwbHVzLndvcmRba10gJiB+bWludXMud29yZFtrXSkKKyAgICB7CisgICAgICAvKiBPaD8gVGhlIHNpZ24gYml0IGlzIHNldCBpbiB0aGUgcG9zaXRpdmUgYW5kIGNsZWFyZWQgaW4gdGhlIG5lZ2F0aXZlCisgICAgICAgICBudW1iZXJzPyAgKi8KKyAgICAgIGZwcmludGYgKGZwLCAidW5rbm93biIpOworICAgICAgcmV0dXJuIDQ7CisgICAgfQorICBmb3IgKGkgPSAwOyA7IGkrKykKKyAgICBpZiAoKG0gPj4gaSkgJiAxKQorICAgICAgYnJlYWs7CisgIGZwcmludGYgKGZwLCAid29yZCAlZCBiaXQgJWQiLCAoaW50KSBrLCAoaW50KSBpKTsKKyAgaWYgKGZjbG9zZSAoZnApICE9IDApCisgICAgcmV0dXJuIDU7CisgIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9jY19mbG9hdF9zaWduYml0PWBjYXQgY29uZnRlc3Qub3V0YAorZWxzZQorICBnbF9jdl9jY19mbG9hdF9zaWduYml0PSJ1bmtub3duIgorZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgICAgIHJtIC1mIGNvbmZ0ZXN0Lm91dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9jY19mbG9hdF9zaWduYml0IiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfY2NfZmxvYXRfc2lnbmJpdCIgPiY2OyB9CisgIGNhc2UgIiRnbF9jdl9jY19mbG9hdF9zaWduYml0IiBpbgorICAgIHdvcmQqYml0KikKKyAgICAgIHdvcmQ9YGVjaG8gIiRnbF9jdl9jY19mbG9hdF9zaWduYml0IiB8IHNlZCAtZSAncy93b3JkIC8vJyAtZSAncy8gYml0LiovLydgCisgICAgICBiaXQ9YGVjaG8gIiRnbF9jdl9jY19mbG9hdF9zaWduYml0IiB8IHNlZCAtZSAncy93b3JkLipiaXQgLy8nYAorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEZMVF9TSUdOQklUX1dPUkQgJHdvcmQKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgRkxUX1NJR05CSVRfQklUICRiaXQKK19BQ0VPRgorCisgICAgICA7OworICBlc2FjCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGVyZSB0byBmaW5kIHRoZSBzaWduIGJpdCBpbiBhICdkb3VibGUnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXJlIHRvIGZpbmQgdGhlIHNpZ24gYml0IGluIGEgJ2RvdWJsZScuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfY2NfZG91YmxlX3NpZ25iaXQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X2NjX2RvdWJsZV9zaWduYml0PSJ1bmtub3duIgorCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIE5XT1JEUyBcCisgICgoc2l6ZW9mIChkb3VibGUpICsgc2l6ZW9mICh1bnNpZ25lZCBpbnQpIC0gMSkgLyBzaXplb2YgKHVuc2lnbmVkIGludCkpCit0eXBlZGVmIHVuaW9uIHsgZG91YmxlIHZhbHVlOyB1bnNpZ25lZCBpbnQgd29yZFtOV09SRFNdOyB9CisgICAgICAgIG1lbW9yeV9mbG9hdDsKK3N0YXRpYyBtZW1vcnlfZmxvYXQgcGx1cyA9IHsgMS4wIH07CitzdGF0aWMgbWVtb3J5X2Zsb2F0IG1pbnVzID0geyAtMS4wIH07CitpbnQgbWFpbiAoKQoreworICBzaXplX3QgaiwgaywgaTsKKyAgdW5zaWduZWQgaW50IG07CisgIEZJTEUgKmZwID0gZm9wZW4gKCJjb25mdGVzdC5vdXQiLCAidyIpOworICBpZiAoZnAgPT0gTlVMTCkKKyAgICByZXR1cm4gMTsKKyAgLyogRmluZCB0aGUgZGlmZmVyZW50IGJpdC4gICovCisgIGsgPSAwOyBtID0gMDsKKyAgZm9yIChqID0gMDsgaiA8IE5XT1JEUzsgaisrKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCB4ID0gcGx1cy53b3JkW2pdIF4gbWludXMud29yZFtqXTsKKyAgICAgIGlmICgoeCAmICh4IC0gMSkpIHx8ICh4ICYmIG0pKQorICAgICAgICB7CisgICAgICAgICAgLyogTW9yZSB0aGFuIG9uZSBiaXQgZGlmZmVyZW5jZS4gICovCisgICAgICAgICAgZnByaW50ZiAoZnAsICJ1bmtub3duIik7CisgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIH0KKyAgICAgIGlmICh4KQorICAgICAgICB7CisgICAgICAgICAgayA9IGo7CisgICAgICAgICAgbSA9IHg7CisgICAgICAgIH0KKyAgICB9CisgIGlmIChtID09IDApCisgICAgeworICAgICAgLyogTm8gZGlmZmVyZW5jZS4gICovCisgICAgICBmcHJpbnRmIChmcCwgInVua25vd24iKTsKKyAgICAgIHJldHVybiAzOworICAgIH0KKyAgLyogTm93IG0gPSBwbHVzLndvcmRba10gXiB+bWludXMud29yZFtrXS4gICovCisgIGlmIChwbHVzLndvcmRba10gJiB+bWludXMud29yZFtrXSkKKyAgICB7CisgICAgICAvKiBPaD8gVGhlIHNpZ24gYml0IGlzIHNldCBpbiB0aGUgcG9zaXRpdmUgYW5kIGNsZWFyZWQgaW4gdGhlIG5lZ2F0aXZlCisgICAgICAgICBudW1iZXJzPyAgKi8KKyAgICAgIGZwcmludGYgKGZwLCAidW5rbm93biIpOworICAgICAgcmV0dXJuIDQ7CisgICAgfQorICBmb3IgKGkgPSAwOyA7IGkrKykKKyAgICBpZiAoKG0gPj4gaSkgJiAxKQorICAgICAgYnJlYWs7CisgIGZwcmludGYgKGZwLCAid29yZCAlZCBiaXQgJWQiLCAoaW50KSBrLCAoaW50KSBpKTsKKyAgaWYgKGZjbG9zZSAoZnApICE9IDApCisgICAgcmV0dXJuIDU7CisgIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9jY19kb3VibGVfc2lnbmJpdD1gY2F0IGNvbmZ0ZXN0Lm91dGAKK2Vsc2UKKyAgZ2xfY3ZfY2NfZG91YmxlX3NpZ25iaXQ9InVua25vd24iCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworICAgICAgcm0gLWYgY29uZnRlc3Qub3V0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2NjX2RvdWJsZV9zaWduYml0IiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfY2NfZG91YmxlX3NpZ25iaXQiID4mNjsgfQorICBjYXNlICIkZ2xfY3ZfY2NfZG91YmxlX3NpZ25iaXQiIGluCisgICAgd29yZCpiaXQqKQorICAgICAgd29yZD1gZWNobyAiJGdsX2N2X2NjX2RvdWJsZV9zaWduYml0IiB8IHNlZCAtZSAncy93b3JkIC8vJyAtZSAncy8gYml0LiovLydgCisgICAgICBiaXQ9YGVjaG8gIiRnbF9jdl9jY19kb3VibGVfc2lnbmJpdCIgfCBzZWQgLWUgJ3Mvd29yZC4qYml0IC8vJ2AKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBEQkxfU0lHTkJJVF9XT1JEICR3b3JkCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIERCTF9TSUdOQklUX0JJVCAkYml0CitfQUNFT0YKKworICAgICAgOzsKKyAgZXNhYworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hlcmUgdG8gZmluZCB0aGUgc2lnbiBiaXQgaW4gYSAnbG9uZyBkb3VibGUnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXJlIHRvIGZpbmQgdGhlIHNpZ24gYml0IGluIGEgJ2xvbmcgZG91YmxlJy4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9jY19sb25nX2RvdWJsZV9zaWduYml0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9jY19sb25nX2RvdWJsZV9zaWduYml0PSJ1bmtub3duIgorCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIE5XT1JEUyBcCisgICgoc2l6ZW9mIChsb25nIGRvdWJsZSkgKyBzaXplb2YgKHVuc2lnbmVkIGludCkgLSAxKSAvIHNpemVvZiAodW5zaWduZWQgaW50KSkKK3R5cGVkZWYgdW5pb24geyBsb25nIGRvdWJsZSB2YWx1ZTsgdW5zaWduZWQgaW50IHdvcmRbTldPUkRTXTsgfQorICAgICAgICBtZW1vcnlfZmxvYXQ7CitzdGF0aWMgbWVtb3J5X2Zsb2F0IHBsdXMgPSB7IDEuMEwgfTsKK3N0YXRpYyBtZW1vcnlfZmxvYXQgbWludXMgPSB7IC0xLjBMIH07CitpbnQgbWFpbiAoKQoreworICBzaXplX3QgaiwgaywgaTsKKyAgdW5zaWduZWQgaW50IG07CisgIEZJTEUgKmZwID0gZm9wZW4gKCJjb25mdGVzdC5vdXQiLCAidyIpOworICBpZiAoZnAgPT0gTlVMTCkKKyAgICByZXR1cm4gMTsKKyAgLyogRmluZCB0aGUgZGlmZmVyZW50IGJpdC4gICovCisgIGsgPSAwOyBtID0gMDsKKyAgZm9yIChqID0gMDsgaiA8IE5XT1JEUzsgaisrKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCB4ID0gcGx1cy53b3JkW2pdIF4gbWludXMud29yZFtqXTsKKyAgICAgIGlmICgoeCAmICh4IC0gMSkpIHx8ICh4ICYmIG0pKQorICAgICAgICB7CisgICAgICAgICAgLyogTW9yZSB0aGFuIG9uZSBiaXQgZGlmZmVyZW5jZS4gICovCisgICAgICAgICAgZnByaW50ZiAoZnAsICJ1bmtub3duIik7CisgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIH0KKyAgICAgIGlmICh4KQorICAgICAgICB7CisgICAgICAgICAgayA9IGo7CisgICAgICAgICAgbSA9IHg7CisgICAgICAgIH0KKyAgICB9CisgIGlmIChtID09IDApCisgICAgeworICAgICAgLyogTm8gZGlmZmVyZW5jZS4gICovCisgICAgICBmcHJpbnRmIChmcCwgInVua25vd24iKTsKKyAgICAgIHJldHVybiAzOworICAgIH0KKyAgLyogTm93IG0gPSBwbHVzLndvcmRba10gXiB+bWludXMud29yZFtrXS4gICovCisgIGlmIChwbHVzLndvcmRba10gJiB+bWludXMud29yZFtrXSkKKyAgICB7CisgICAgICAvKiBPaD8gVGhlIHNpZ24gYml0IGlzIHNldCBpbiB0aGUgcG9zaXRpdmUgYW5kIGNsZWFyZWQgaW4gdGhlIG5lZ2F0aXZlCisgICAgICAgICBudW1iZXJzPyAgKi8KKyAgICAgIGZwcmludGYgKGZwLCAidW5rbm93biIpOworICAgICAgcmV0dXJuIDQ7CisgICAgfQorICBmb3IgKGkgPSAwOyA7IGkrKykKKyAgICBpZiAoKG0gPj4gaSkgJiAxKQorICAgICAgYnJlYWs7CisgIGZwcmludGYgKGZwLCAid29yZCAlZCBiaXQgJWQiLCAoaW50KSBrLCAoaW50KSBpKTsKKyAgaWYgKGZjbG9zZSAoZnApICE9IDApCisgICAgcmV0dXJuIDU7CisgIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9jY19sb25nX2RvdWJsZV9zaWduYml0PWBjYXQgY29uZnRlc3Qub3V0YAorZWxzZQorICBnbF9jdl9jY19sb25nX2RvdWJsZV9zaWduYml0PSJ1bmtub3duIgorZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgICAgIHJtIC1mIGNvbmZ0ZXN0Lm91dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9jY19sb25nX2RvdWJsZV9zaWduYml0IiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfY2NfbG9uZ19kb3VibGVfc2lnbmJpdCIgPiY2OyB9CisgIGNhc2UgIiRnbF9jdl9jY19sb25nX2RvdWJsZV9zaWduYml0IiBpbgorICAgIHdvcmQqYml0KikKKyAgICAgIHdvcmQ9YGVjaG8gIiRnbF9jdl9jY19sb25nX2RvdWJsZV9zaWduYml0IiB8IHNlZCAtZSAncy93b3JkIC8vJyAtZSAncy8gYml0LiovLydgCisgICAgICBiaXQ9YGVjaG8gIiRnbF9jdl9jY19sb25nX2RvdWJsZV9zaWduYml0IiB8IHNlZCAtZSAncy93b3JkLipiaXQgLy8nYAorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIExEQkxfU0lHTkJJVF9XT1JEICR3b3JkCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIExEQkxfU0lHTkJJVF9CSVQgJGJpdAorX0FDRU9GCisKKyAgICAgIDs7CisgIGVzYWMKKworCisgICAgICAgICAgaWYgdGVzdCAiJGdsX2N2X2NjX2Zsb2F0X3NpZ25iaXQiID0gdW5rbm93bjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiY29weXNpZ25mIiAiYWNfY3ZfaGF2ZV9kZWNsX2NvcHlzaWduZiIgIiNpbmNsdWRlIDxtYXRoLmg+CisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9jb3B5c2lnbmYiID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCitlbHNlCisgIGFjX2hhdmVfZGVjbD0wCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9DT1BZU0lHTkYgJGFjX2hhdmVfZGVjbAorX0FDRU9GCisKKyAgICAgICAgICAgIGlmIHRlc3QgIiRhY19jdl9oYXZlX2RlY2xfY29weXNpZ25mIiA9IHllczsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBjb3B5c2lnbmYgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGNvcHlzaWduZiBjYW4gYmUgdXNlZCB3aXRob3V0IGxpbmtpbmcgd2l0aCBsaWJtLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfY29weXNpZ25mX25vX2xpYm0rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bWF0aC5oPgorICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHgsIHk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBjb3B5c2lnbmYgKHgsIHkpIDwgMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX2NvcHlzaWduZl9ub19saWJtPXllcworZWxzZQorICBnbF9jdl9mdW5jX2NvcHlzaWduZl9ub19saWJtPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19jb3B5c2lnbmZfbm9fbGlibSIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfY29weXNpZ25mX25vX2xpYm0iID4mNjsgfQorICAgICAgICAgICAgICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2NvcHlzaWduZl9ub19saWJtID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ09QWVNJR05GX0lOX0xJQkMgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgICBpZiB0ZXN0ICIkZ2xfY3ZfY2NfZG91YmxlX3NpZ25iaXQiID0gdW5rbm93bjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiY29weXNpZ24iICJhY19jdl9oYXZlX2RlY2xfY29weXNpZ24iICIjaW5jbHVkZSA8bWF0aC5oPgorIgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfY29weXNpZ24iID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCitlbHNlCisgIGFjX2hhdmVfZGVjbD0wCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9DT1BZU0lHTiAkYWNfaGF2ZV9kZWNsCitfQUNFT0YKKworICAgICAgICAgICAgaWYgdGVzdCAiJGFjX2N2X2hhdmVfZGVjbF9jb3B5c2lnbiIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgY29weXNpZ24gY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGNvcHlzaWduIGNhbiBiZSB1c2VkIHdpdGhvdXQgbGlua2luZyB3aXRoIGxpYm0uLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19jb3B5c2lnbl9ub19saWJtKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPG1hdGguaD4KKyAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgeCwgeTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGNvcHlzaWduICh4LCB5KSA8IDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19jb3B5c2lnbl9ub19saWJtPXllcworZWxzZQorICBnbF9jdl9mdW5jX2NvcHlzaWduX25vX2xpYm09bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2NvcHlzaWduX25vX2xpYm0iID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2NvcHlzaWduX25vX2xpYm0iID4mNjsgfQorICAgICAgICAgICAgICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2NvcHlzaWduX25vX2xpYm0gPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DT1BZU0lHTl9JTl9MSUJDIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgICAgaWYgdGVzdCAiJGdsX2N2X2NjX2xvbmdfZG91YmxlX3NpZ25iaXQiID0gdW5rbm93bjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiY29weXNpZ25sIiAiYWNfY3ZfaGF2ZV9kZWNsX2NvcHlzaWdubCIgIiNpbmNsdWRlIDxtYXRoLmg+CisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9jb3B5c2lnbmwiID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCitlbHNlCisgIGFjX2hhdmVfZGVjbD0wCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9DT1BZU0lHTkwgJGFjX2hhdmVfZGVjbAorX0FDRU9GCisKKyAgICAgICAgICAgIGlmIHRlc3QgIiRhY19jdl9oYXZlX2RlY2xfY29weXNpZ25sIiA9IHllczsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBjb3B5c2lnbmwgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGNvcHlzaWdubCBjYW4gYmUgdXNlZCB3aXRob3V0IGxpbmtpbmcgd2l0aCBsaWJtLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfY29weXNpZ25sX25vX2xpYm0rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bWF0aC5oPgorICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZG91YmxlIHgsIHk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBjb3B5c2lnbmwgKHgsIHkpIDwgMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX2NvcHlzaWdubF9ub19saWJtPXllcworZWxzZQorICBnbF9jdl9mdW5jX2NvcHlzaWdubF9ub19saWJtPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19jb3B5c2lnbmxfbm9fbGlibSIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfY29weXNpZ25sX25vX2xpYm0iID4mNjsgfQorICAgICAgICAgICAgICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2NvcHlzaWdubF9ub19saWJtID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ09QWVNJR05MX0lOX0xJQkMgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgZXNhYworCisgIGlmIHRlc3QgJFJFUExBQ0VfU0lHTkJJVCA9IDE7IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHNpZ25iaXRmLiRhY19vYmpleHQiCisKKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHNpZ25iaXRkLiRhY19vYmpleHQiCisKKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHNpZ25iaXRsLiRhY19vYmpleHQiCisKKyAgZmkKKworCisKKworCisgICAgICAgICAgR05VTElCX1NJR05CSVQ9MQorCisKKworCisKKyRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX1NJR05CSVQgMSIgPj5jb25mZGVmcy5oCisKKworCisKKworCisgIGlmIHRlc3QgJGdsX2N2X3R5cGVfc2lnc2V0X3QgPSB5ZXM7IHRoZW4KKyAgICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzaWdwcm9jbWFzayIgImFjX2N2X2Z1bmNfc2lncHJvY21hc2siCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc2lncHJvY21hc2siID0geHllczsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfc2lncHJvY21hc2s9MQorZmkKKworICBmaQorICBpZiB0ZXN0IC16ICIkZ2xfY3ZfZnVuY19zaWdwcm9jbWFzayI7IHRoZW4KKyAgICBIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HPTAKKyAgZmkKKworICBpZiB0ZXN0ICRIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HID0gMDsgdGhlbgorCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgc2lncHJvY21hc2suJGFjX29iamV4dCIKKworICAgIDoKKyAgZmkKKworCisKKworCisgICAgICAgICAgR05VTElCX1NJR1BST0NNQVNLPTEKKworCisKKworCiskYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9TSUdQUk9DTUFTSyAxIiA+PmNvbmZkZWZzLmgKKworCisKKworICBmb3IgYWNfaGVhZGVyIGluIHN0ZGludC5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJzdGRpbnQuaCIgImFjX2N2X2hlYWRlcl9zdGRpbnRfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3RkaW50X2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVERJTlRfSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgU0laRV9NQVgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFNJWkVfTUFYLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X3NpemVfbWF4Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgIGdsX2N2X3NpemVfbWF4PQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2lmIEhBVkVfU1RESU5UX0gKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorI2lmZGVmIFNJWkVfTUFYCitGb3VuZCBpdAorI2VuZGlmCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIkZvdW5kIGl0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBnbF9jdl9zaXplX21heD15ZXMKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICAgIGlmIHRlc3QgLXogIiRnbF9jdl9zaXplX21heCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICJzaXplb2YgKHNpemVfdCkgKiBDSEFSX0JJVCAtIDEiICJzaXplX3RfYml0c19taW51c18xIiAgICAgICAgIiNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4iOyB0aGVuIDoKKworZWxzZQorICBzaXplX3RfYml0c19taW51c18xPQorZmkKKworICAgICAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgInNpemVvZiAoc2l6ZV90KSA8PSBzaXplb2YgKHVuc2lnbmVkIGludCkiICJmaXRzX2luX3VpbnQiICAgICAgICAiI2luY2x1ZGUgPHN0ZGRlZi5oPiI7IHRoZW4gOgorCitlbHNlCisgIGZpdHNfaW5fdWludD0KK2ZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRzaXplX3RfYml0c19taW51c18xIiAmJiB0ZXN0IC1uICIkZml0c19pbl91aW50IjsgdGhlbgorICAgICAgICBpZiB0ZXN0ICRmaXRzX2luX3VpbnQgPSAxOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisgICAgICAgICAgICAgICAgIGV4dGVybiBzaXplX3QgZm9vOworICAgICAgICAgICAgICAgICBleHRlcm4gdW5zaWduZWQgbG9uZyBmb287CisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZml0c19pbl91aW50PTAKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAkZml0c19pbl91aW50ID0gMTsgdGhlbgorICAgICAgICAgIGdsX2N2X3NpemVfbWF4PSIoKCgxVSA8PCAkc2l6ZV90X2JpdHNfbWludXNfMSkgLSAxKSAqIDIgKyAxKSIKKyAgICAgICAgZWxzZQorICAgICAgICAgIGdsX2N2X3NpemVfbWF4PSIoKCgxVUwgPDwgJHNpemVfdF9iaXRzX21pbnVzXzEpIC0gMSkgKiAyICsgMSkiCisgICAgICAgIGZpCisgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ2xfY3Zfc2l6ZV9tYXg9Jygoc2l6ZV90KX4oc2l6ZV90KTApJworICAgICAgZmkKKyAgICBmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9zaXplX21heCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X3NpemVfbWF4IiA+JjY7IH0KKyAgaWYgdGVzdCAiJGdsX2N2X3NpemVfbWF4IiAhPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTSVpFX01BWCAkZ2xfY3Zfc2l6ZV9tYXgKK19BQ0VPRgorCisgIGZpCisKKworCisKKyAgZ2xfY3ZfZnVuY19zbnByaW50Zl91c2FibGU9bm8KKyAgZm9yIGFjX2Z1bmMgaW4gc25wcmludGYKK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic25wcmludGYiICJhY19jdl9mdW5jX3NucHJpbnRmIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3NucHJpbnRmIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU05QUklOVEYgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zbnByaW50ZiA9IHllczsgdGhlbgorCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc25wcmludGYgcmVzcGVjdHMgYSBzaXplIG9mIDEiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBzbnByaW50ZiByZXNwZWN0cyBhIHNpemUgb2YgMS4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX3NucHJpbnRmX3NpemUxKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBnbF9jdl9mdW5jX3NucHJpbnRmX3NpemUxPSJndWVzc2luZyB5ZXMiCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgSEFWRV9TTlBSSU5URgorIyBkZWZpbmUgbXlfc25wcmludGYgc25wcmludGYKKyNlbHNlCisjIGluY2x1ZGUgPHN0ZGFyZy5oPgorc3RhdGljIGludCBteV9zbnByaW50ZiAoY2hhciAqYnVmLCBpbnQgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaW50IHJldDsKKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisgIHJldCA9IHZzbnByaW50ZiAoYnVmLCBzaXplLCBmb3JtYXQsIGFyZ3MpOworICB2YV9lbmQgKGFyZ3MpOworICByZXR1cm4gcmV0OworfQorI2VuZGlmCitpbnQgbWFpbigpCit7CisgIHN0YXRpYyBjaGFyIGJ1Zls4XSA9IHsgJ0QnLCAnRScsICdBJywgJ0QnLCAnQicsICdFJywgJ0UnLCAnRicgfTsKKyAgbXlfc25wcmludGYgKGJ1ZiwgMSwgIiVkIiwgMTIzNDUpOworICByZXR1cm4gYnVmWzFdICE9ICdFJzsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfc25wcmludGZfc2l6ZTE9eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfc25wcmludGZfc2l6ZTE9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfc25wcmludGZfc2l6ZTEiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX3NucHJpbnRmX3NpemUxIiA+JjY7IH0KKworICAgIGNhc2UgIiRnbF9jdl9mdW5jX3NucHJpbnRmX3NpemUxIiBpbgorICAgICAgKnllcykKKworICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19zbnByaW50Zl9yZXR2YWxfYzk5IiBpbgorICAgICAgICAgICp5ZXMpCisKKworICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgcHJpbnRmIHN1cHBvcnRzIFBPU0lYL1hTSSBmb3JtYXQgc3RyaW5ncyB3aXRoIHBvc2l0aW9ucyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHByaW50ZiBzdXBwb3J0cyBQT1NJWC9YU0kgZm9ybWF0IHN0cmluZ3Mgd2l0aCBwb3NpdGlvbnMuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19wcmludGZfcG9zaXRpb25zKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorCisgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgbmV0YnNkWzEtM10qIHwgbmV0YnNkZWxmWzEtM10qIHwgbmV0YnNkYW91dFsxLTNdKiB8IG5ldGJzZGNvZmZbMS0zXSopCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfcG9zaXRpb25zPSJndWVzc2luZyBubyI7OworICAgICAgICAgICBiZW9zKikgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX3Bvc2l0aW9ucz0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgbWluZ3cqIHwgcHcqKSBnbF9jdl9mdW5jX3ByaW50Zl9wb3NpdGlvbnM9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICopICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfcG9zaXRpb25zPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgIGVzYWMKKworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorLyogVGhlIHN0cmluZyAiJTIkZCAlMSRkIiwgd2l0aCBkb2xsYXIgY2hhcmFjdGVycyBwcm90ZWN0ZWQgZnJvbSB0aGUgc2hlbGwncworICAgZG9sbGFyIGV4cGFuc2lvbiAocG9zc2libHkgYW4gYXV0b2NvbmYgYnVnKS4gICovCitzdGF0aWMgY2hhciBmb3JtYXRbXSA9IHsgJyUnLCAnMicsICckJywgJ2QnLCAnICcsICclJywgJzEnLCAnJCcsICdkJywgJ1wwJyB9Oworc3RhdGljIGNoYXIgYnVmWzEwMF07CitpbnQgbWFpbiAoKQoreworICBzcHJpbnRmIChidWYsIGZvcm1hdCwgMzMsIDU1KTsKKyAgcmV0dXJuIChzdHJjbXAgKGJ1ZiwgIjU1IDMzIikgIT0gMCk7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX3ByaW50Zl9wb3NpdGlvbnM9eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfcHJpbnRmX3Bvc2l0aW9ucz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19wcmludGZfcG9zaXRpb25zIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19wcmludGZfcG9zaXRpb25zIiA+JjY7IH0KKworICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX3Bvc2l0aW9ucyIgaW4KKyAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3VzYWJsZT15ZXMKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19zbnByaW50Zl91c2FibGUgPSBubzsgdGhlbgorCisKKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHNucHJpbnRmLiRhY19vYmpleHQiCisKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zbnByaW50ZiA9IHllczsgdGhlbgorICAgIFJFUExBQ0VfU05QUklOVEY9MQorICBmaQorICA6CisKKyAgZmkKKworICBpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfc25wcmludGYgPSBubzsgdGhlbgorICAgIEhBVkVfREVDTF9TTlBSSU5URj0wCisgIGZpCisKKworCisKKworCisgICAgICAgICAgR05VTElCX1NOUFJJTlRGPTEKKworCisKKworCiskYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9TTlBSSU5URiAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEdOVUxJQl9TTlBSSU5URiAxCitfQUNFT0YKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgIGdsX2N2X2Z1bmNfc25wcmludGZfcG9zaXg9bm8KKyAgZm9yIGFjX2Z1bmMgaW4gc25wcmludGYKK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic25wcmludGYiICJhY19jdl9mdW5jX3NucHJpbnRmIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3NucHJpbnRmIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU05QUklOVEYgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zbnByaW50ZiA9IHllczsgdGhlbgorCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc25wcmludGYgdHJ1bmNhdGVzIHRoZSByZXN1bHQgYXMgaW4gQzk5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgc25wcmludGYgdHJ1bmNhdGVzIHRoZSByZXN1bHQgYXMgaW4gQzk5Li4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfc25wcmludGZfdHJ1bmNhdGlvbl9jOTkrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisKKyAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gZ2xpYmMgc3lzdGVtcy4KKyAgICAgICAgICAgKi1nbnUqKSAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfdHJ1bmNhdGlvbl9jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gRnJlZUJTRCA+PSA1LgorICAgICAgICAgICBmcmVlYnNkWzEtNF0qKSAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgZnJlZWJzZCogfCBrZnJlZWJzZCopIGdsX2N2X2Z1bmNfc25wcmludGZfdHJ1bmNhdGlvbl9jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gTWFjIE9TIFggPj0gMTAuMy4KKyAgICAgICAgICAgZGFyd2luWzEtNl0uKikgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfdHJ1bmNhdGlvbl9jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIGRhcndpbiopICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3RydW5jYXRpb25fYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIE9wZW5CU0QgPj0gMy45LgorICAgICAgICAgICBvcGVuYnNkWzEtMl0uKiB8IG9wZW5ic2QzLlswLThdIHwgb3BlbmJzZDMuWzAtOF0uKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfdHJ1bmNhdGlvbl9jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIG9wZW5ic2QqKSAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3RydW5jYXRpb25fYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIFNvbGFyaXMgPj0gMi42LgorICAgICAgICAgICBzb2xhcmlzMi5bMC01XSB8IHNvbGFyaXMyLlswLTVdLiopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3RydW5jYXRpb25fYzk5PSJndWVzc2luZyBubyI7OworICAgICAgICAgICBzb2xhcmlzKikgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBBSVggPj0gNC4KKyAgICAgICAgICAgYWl4WzEtM10qKSAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfdHJ1bmNhdGlvbl9jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIGFpeCopICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3RydW5jYXRpb25fYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIEhQLVVYID49IDExLgorICAgICAgICAgICBocHV4WzctOV0qIHwgaHB1eDEwKikgZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgaHB1eCopICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfdHJ1bmNhdGlvbl9jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gSVJJWCA+PSA2LjUuCisgICAgICAgICAgIGlyaXg2LjUpICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3RydW5jYXRpb25fYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIE9TRi8xID49IDUuCisgICAgICAgICAgIG9zZlszLTRdKikgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3RydW5jYXRpb25fYzk5PSJndWVzc2luZyBubyI7OworICAgICAgICAgICBvc2YqKSAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBOZXRCU0QgPj0gMy4KKyAgICAgICAgICAgbmV0YnNkWzEtMl0qIHwgbmV0YnNkZWxmWzEtMl0qIHwgbmV0YnNkYW91dFsxLTJdKiB8IG5ldGJzZGNvZmZbMS0yXSopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3RydW5jYXRpb25fYzk5PSJndWVzc2luZyBubyI7OworICAgICAgICAgICBuZXRic2QqKSAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBCZU9TLgorICAgICAgICAgICBiZW9zKikgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIHdlIGRvbid0IGtub3csIGFzc3VtZSB0aGUgd29yc3QuCisgICAgICAgICAgICopICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3RydW5jYXRpb25fYzk5PSJndWVzc2luZyBubyI7OworICAgICAgICAgZXNhYworCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9TTlBSSU5URgorIyBkZWZpbmUgbXlfc25wcmludGYgc25wcmludGYKKyNlbHNlCisjIGluY2x1ZGUgPHN0ZGFyZy5oPgorc3RhdGljIGludCBteV9zbnByaW50ZiAoY2hhciAqYnVmLCBpbnQgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaW50IHJldDsKKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisgIHJldCA9IHZzbnByaW50ZiAoYnVmLCBzaXplLCBmb3JtYXQsIGFyZ3MpOworICB2YV9lbmQgKGFyZ3MpOworICByZXR1cm4gcmV0OworfQorI2VuZGlmCitzdGF0aWMgY2hhciBidWZbMTAwXTsKK2ludCBtYWluICgpCit7CisgIHN0cmNweSAoYnVmLCAiQUJDREVGIik7CisgIG15X3NucHJpbnRmIChidWYsIDMsICIlZCAlZCIsIDQ1NjcsIDg5KTsKKyAgaWYgKG1lbWNtcCAoYnVmLCAiNDVcMERFRiIsIDYpICE9IDApCisgICAgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OT15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OT1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OSIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfc25wcmludGZfdHJ1bmNhdGlvbl9jOTkiID4mNjsgfQorCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHNucHJpbnRmIGZ1bGx5IHN1cHBvcnRzIHRoZSAnbicgZGlyZWN0aXZlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgc25wcmludGYgZnVsbHkgc3VwcG9ydHMgdGhlICduJyBkaXJlY3RpdmUuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKworICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBnbGliYyBzeXN0ZW1zLgorICAgICAgICAgICAqLWdudSopICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbj0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBGcmVlQlNEID49IDUuCisgICAgICAgICAgIGZyZWVic2RbMS00XSopICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX2RpcmVjdGl2ZV9uPSJndWVzc2luZyBubyI7OworICAgICAgICAgICBmcmVlYnNkKiB8IGtmcmVlYnNkKikgZ2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbj0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBNYWMgT1MgWCA+PSAxMC4zLgorICAgICAgICAgICBkYXJ3aW5bMS02XS4qKSAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbj0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgZGFyd2luKikgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfZGlyZWN0aXZlX249Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gU29sYXJpcyA+PSAyLjYuCisgICAgICAgICAgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfZGlyZWN0aXZlX249Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIHNvbGFyaXMqKSAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX2RpcmVjdGl2ZV9uPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIEFJWCA+PSA0LgorICAgICAgICAgICBhaXhbMS0zXSopICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbj0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgYWl4KikgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfZGlyZWN0aXZlX249Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gSVJJWCA+PSA2LjUuCisgICAgICAgICAgIGlyaXg2LjUpICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX2RpcmVjdGl2ZV9uPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIE9TRi8xID49IDUuCisgICAgICAgICAgIG9zZlszLTRdKikgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX2RpcmVjdGl2ZV9uPSJndWVzc2luZyBubyI7OworICAgICAgICAgICBvc2YqKSAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbj0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBOZXRCU0QgPj0gMy4KKyAgICAgICAgICAgbmV0YnNkWzEtMl0qIHwgbmV0YnNkZWxmWzEtMl0qIHwgbmV0YnNkYW91dFsxLTJdKiB8IG5ldGJzZGNvZmZbMS0yXSopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX2RpcmVjdGl2ZV9uPSJndWVzc2luZyBubyI7OworICAgICAgICAgICBuZXRic2QqKSAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbj0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBCZU9TLgorICAgICAgICAgICBiZW9zKikgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbj0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIHdlIGRvbid0IGtub3csIGFzc3VtZSB0aGUgd29yc3QuCisgICAgICAgICAgICopICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX2RpcmVjdGl2ZV9uPSJndWVzc2luZyBubyI7OworICAgICAgICAgZXNhYworCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9TTlBSSU5URgorIyBkZWZpbmUgbXlfc25wcmludGYgc25wcmludGYKKyNlbHNlCisjIGluY2x1ZGUgPHN0ZGFyZy5oPgorc3RhdGljIGludCBteV9zbnByaW50ZiAoY2hhciAqYnVmLCBpbnQgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaW50IHJldDsKKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisgIHJldCA9IHZzbnByaW50ZiAoYnVmLCBzaXplLCBmb3JtYXQsIGFyZ3MpOworICB2YV9lbmQgKGFyZ3MpOworICByZXR1cm4gcmV0OworfQorI2VuZGlmCitzdGF0aWMgY2hhciBmbXRzdHJpbmdbMTBdOworc3RhdGljIGNoYXIgYnVmWzEwMF07CitpbnQgbWFpbiAoKQoreworICBpbnQgY291bnQgPSAtMTsKKyAgLyogQ29weSB0aGUgZm9ybWF0IHN0cmluZy4gIFNvbWUgc3lzdGVtcyAoZ2xpYmMgd2l0aCBfRk9SVElGWV9TT1VSQ0U9MikKKyAgICAgc3VwcG9ydCAlbiBpbiBmb3JtYXQgc3RyaW5ncyBpbiByZWFkLW9ubHkgbWVtb3J5IGJ1dCBub3QgaW4gd3JpdGFibGUKKyAgICAgbWVtb3J5LiAgKi8KKyAgc3RyY3B5IChmbXRzdHJpbmcsICIlZCAlbiIpOworICBteV9zbnByaW50ZiAoYnVmLCA0LCBmbXRzdHJpbmcsIDEyMzQ1LCAmY291bnQsIDMzLCA0NCwgNTUpOworICBpZiAoY291bnQgIT0gNikKKyAgICByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX3NucHJpbnRmX2RpcmVjdGl2ZV9uPXllcworZWxzZQorICBnbF9jdl9mdW5jX3NucHJpbnRmX2RpcmVjdGl2ZV9uPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3NucHJpbnRmX2RpcmVjdGl2ZV9uIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbiIgPiY2OyB9CisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHNucHJpbnRmIHJlc3BlY3RzIGEgc2l6ZSBvZiAxIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgc25wcmludGYgcmVzcGVjdHMgYSBzaXplIG9mIDEuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19zbnByaW50Zl9zaXplMSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19zbnByaW50Zl9zaXplMT0iZ3Vlc3NpbmcgeWVzIgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIEhBVkVfU05QUklOVEYKKyMgZGVmaW5lIG15X3NucHJpbnRmIHNucHJpbnRmCisjZWxzZQorIyBpbmNsdWRlIDxzdGRhcmcuaD4KK3N0YXRpYyBpbnQgbXlfc25wcmludGYgKGNoYXIgKmJ1ZiwgaW50IHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ3M7CisgIGludCByZXQ7CisgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworICByZXQgPSB2c25wcmludGYgKGJ1Ziwgc2l6ZSwgZm9ybWF0LCBhcmdzKTsKKyAgdmFfZW5kIChhcmdzKTsKKyAgcmV0dXJuIHJldDsKK30KKyNlbmRpZgoraW50IG1haW4oKQoreworICBzdGF0aWMgY2hhciBidWZbOF0gPSB7ICdEJywgJ0UnLCAnQScsICdEJywgJ0InLCAnRScsICdFJywgJ0YnIH07CisgIG15X3NucHJpbnRmIChidWYsIDEsICIlZCIsIDEyMzQ1KTsKKyAgcmV0dXJuIGJ1ZlsxXSAhPSAnRSc7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX3NucHJpbnRmX3NpemUxPXllcworZWxzZQorICBnbF9jdl9mdW5jX3NucHJpbnRmX3NpemUxPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3NucHJpbnRmX3NpemUxIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19zbnByaW50Zl9zaXplMSIgPiY2OyB9CisKKworCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB2c25wcmludGYgcmVzcGVjdHMgYSB6ZXJvIHNpemUgYXMgaW4gQzk5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdnNucHJpbnRmIHJlc3BlY3RzIGEgemVybyBzaXplIGFzIGluIEM5OS4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX3ZzbnByaW50Zl96ZXJvc2l6ZV9jOTkrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisKKyAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gZ2xpYmMgc3lzdGVtcy4KKyAgICAgICAgICAgKi1nbnUqKSAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBGcmVlQlNEID49IDUuCisgICAgICAgICAgIGZyZWVic2RbMS00XSopICAgICAgICBnbF9jdl9mdW5jX3ZzbnByaW50Zl96ZXJvc2l6ZV9jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIGZyZWVic2QqIHwga2ZyZWVic2QqKSBnbF9jdl9mdW5jX3ZzbnByaW50Zl96ZXJvc2l6ZV9jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gTWFjIE9TIFggPj0gMTAuMy4KKyAgICAgICAgICAgZGFyd2luWzEtNl0uKikgICAgICAgIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgZGFyd2luKikgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBDeWd3aW4uCisgICAgICAgICAgIGN5Z3dpbiopICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ZzbnByaW50Zl96ZXJvc2l6ZV9jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gU29sYXJpcyA+PSAyLjYuCisgICAgICAgICAgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgc29sYXJpcyopICAgICAgICAgICAgIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBBSVggPj0gNC4KKyAgICAgICAgICAgYWl4WzEtM10qKSAgICAgICAgICAgIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgYWl4KikgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBJUklYID49IDYuNS4KKyAgICAgICAgICAgaXJpeDYuNSkgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBOZXRCU0QgPj0gMy4KKyAgICAgICAgICAgbmV0YnNkWzEtMl0qIHwgbmV0YnNkZWxmWzEtMl0qIHwgbmV0YnNkYW91dFsxLTJdKiB8IG5ldGJzZGNvZmZbMS0yXSopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ZzbnByaW50Zl96ZXJvc2l6ZV9jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIG5ldGJzZCopICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ZzbnByaW50Zl96ZXJvc2l6ZV9jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gQmVPUy4KKyAgICAgICAgICAgYmVvcyopICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBtaW5ndy4KKyAgICAgICAgICAgbWluZ3cqIHwgcHcqKSAgICAgICAgIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIHdlIGRvbid0IGtub3csIGFzc3VtZSB0aGUgd29yc3QuCisgICAgICAgICAgICopICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ZzbnByaW50Zl96ZXJvc2l6ZV9jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICBlc2FjCisKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KK3N0YXRpYyBpbnQgbXlfc25wcmludGYgKGNoYXIgKmJ1ZiwgaW50IHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ3M7CisgIGludCByZXQ7CisgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworICByZXQgPSB2c25wcmludGYgKGJ1Ziwgc2l6ZSwgZm9ybWF0LCBhcmdzKTsKKyAgdmFfZW5kIChhcmdzKTsKKyAgcmV0dXJuIHJldDsKK30KK2ludCBtYWluKCkKK3sKKyAgc3RhdGljIGNoYXIgYnVmWzhdID0geyAnRCcsICdFJywgJ0EnLCAnRCcsICdCJywgJ0UnLCAnRScsICdGJyB9OworICBteV9zbnByaW50ZiAoYnVmLCAwLCAiJWQiLCAxMjM0NSk7CisgIHJldHVybiBidWZbMF0gIT0gJ0QnOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY192c25wcmludGZfemVyb3NpemVfYzk5PXllcworZWxzZQorICBnbF9jdl9mdW5jX3ZzbnByaW50Zl96ZXJvc2l6ZV9jOTk9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OSIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OSIgPiY2OyB9CisKKyAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfc2l6ZXNfYzk5IiBpbgorICAgICAgKnllcykKKyAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2xvbmdfZG91YmxlIiBpbgorICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGUiIGluCisgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlX2xvbmdfZG91YmxlIiBpbgorICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9hIiBpbgorICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2YiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9uIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9scyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX3Bvc2l0aW9ucyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19ncm91cGluZyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2xlZnRhZGp1c3QiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX3plcm8iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX3ByZWNpc2lvbiIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9lbm9tZW0iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3NucHJpbnRmX3RydW5jYXRpb25fYzk5IiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3NucHJpbnRmX3JldHZhbF9jOTkiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbiIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfc25wcmludGZfc2l6ZTEiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OSIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc25wcmludGYgZXhpc3RzIGFuZCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFscmVhZHkgUE9TSVggY29tcGxpYW50LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3Bvc2l4PXllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19zbnByaW50Zl9wb3NpeCA9IG5vOyB0aGVuCisKKworCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZSIgaW4KKyAgICAqeWVzKQorICAgICAgOzsKKyAgICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9JTkZJTklURV9ET1VCTEUgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKKworICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfbG9uZ19kb3VibGUiIGluCisgICAgKnllcykKKyAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZV9sb25nX2RvdWJsZSIgaW4KKyAgICAgICAgKnllcykKKyAgICAgICAgICA7OworICAgICAgICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9JTkZJTklURV9MT05HX0RPVUJMRSAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICBlc2FjCisKKworCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfYSIgaW4KKyAgICAqeWVzKQorICAgICAgOzsKKyAgICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9ESVJFQ1RJVkVfQSAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgZm9yIGFjX2Z1bmMgaW4gbmxfbGFuZ2luZm8KK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAibmxfbGFuZ2luZm8iICJhY19jdl9mdW5jX25sX2xhbmdpbmZvIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX25sX2xhbmdpbmZvIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTkxfTEFOR0lORk8gMQorX0FDRU9GCisKK2ZpCitkb25lCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9mIiBpbgorICAgICp5ZXMpCisgICAgICA7OworICAgICopCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0RJUkVDVElWRV9GIDEiID4+Y29uZmRlZnMuaAorCisgICAgICA7OworICBlc2FjCisKKworCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbHMiIGluCisgICAgKnllcykKKyAgICAgIDs7CisgICAgKikKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfRElSRUNUSVZFX0xTIDEiID4+Y29uZmRlZnMuaAorCisgICAgICA7OworICBlc2FjCisKKworCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2dyb3VwaW5nIiBpbgorICAgICp5ZXMpCisgICAgICA7OworICAgICopCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0ZMQUdfR1JPVVBJTkcgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfbGVmdGFkanVzdCIgaW4KKyAgICAqeWVzKQorICAgICAgOzsKKyAgICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9GTEFHX0xFRlRBREpVU1QgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfemVybyIgaW4KKyAgICAqeWVzKQorICAgICAgOzsKKyAgICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9GTEFHX1pFUk8gMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX3ByZWNpc2lvbiIgaW4KKyAgICAqeWVzKQorICAgICAgOzsKKyAgICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9VTkJPVU5ERURfUFJFQ0lTSU9OIDEiID4+Y29uZmRlZnMuaAorCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0RPVUJMRSAxIiA+PmNvbmZkZWZzLmgKKworCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9MT05HX0RPVUJMRSAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgOzsKKyAgZXNhYworCisKKworICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtIiBpbgorICAgICp5ZXMpCisgICAgICA7OworICAgICopCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0VOT01FTSAxIiA+PmNvbmZkZWZzLmgKKworCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9ET1VCTEUgMSIgPj5jb25mZGVmcy5oCisKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfTE9OR19ET1VCTEUgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHZhc25wcmludGYuJGFjX29iamV4dCIKKworCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgcHJpbnRmLWFyZ3MuJGFjX29iamV4dCIKKworCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgcHJpbnRmLXBhcnNlLiRhY19vYmpleHQiCisKKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGFzbnByaW50Zi4kYWNfb2JqZXh0IgorCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfdmFzbnByaW50ZiA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBSRVBMQUNFX1ZBU05QUklOVEYgMSIgPj5jb25mZGVmcy5oCisKKyAgZmkKKworCisKKworCisKKworCisKKworCisgIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInB0cmRpZmZfdCIgImFjX2N2X3R5cGVfcHRyZGlmZl90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfcHRyZGlmZl90IiA9IHh5ZXM7IHRoZW4gOgorCiBlbHNlCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIHZmb3JrIGZvcmsKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgcHRyZGlmZl90IGxvbmciID4+Y29uZmRlZnMuaAogCi1maQotaWYgdGVzdCAieCRhY19jdl9mdW5jX2Zvcmtfd29ya3MiID0geHllczsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX1dPUktJTkdfRk9SSyAxCi1fQUNFT0YKIAogZmkKIAogCiAKIAotZm9yIGFjX2hlYWRlciBpbiBzeXMvdGltZS5oIHN5cy90aW1lcy5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKKworCisKKworCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBzbnByaW50Zi4kYWNfb2JqZXh0IgorCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfc25wcmludGYgPSB5ZXM7IHRoZW4KKyAgICBSRVBMQUNFX1NOUFJJTlRGPTEKKyAgZmkKKyAgOgorCisgIGZpCisKKworCisKKworCisKKworCisKKworCisKKyAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXM7IHRoZW4KKyAgICAgICBnbF9jdl9uZXh0X3NwYXduX2g9Jzwnc3Bhd24uaCc+JworICAgICBlbHNlCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxzcGF3bi5oPiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxzcGF3bi5oPi4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9uZXh0X3NwYXduX2grOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KKworICAgICAgICAgICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zcGF3bl9oID0geWVzOyB0aGVuCisKKworICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHNwYXduLmg+CisKIF9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgYWl4KikgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAgLUMiIDs7CisgICAgICAgICAgICAgICAgICopICAgIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIiA7OworICAgICAgICAgICAgICAgZXNhYworCisgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgbWluZ3cqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2RpcnNlcF9yZWdleD0nWy9cXF0nCisgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICBnbF9kaXJzZXBfcmVnZXg9J1wvJworICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9tYWtlX2xpdGVyYWxfcmVnZXhfc2VkPSdzLFtdJF5cXC4qL1tdLFxcJixnJworCisgICAgICAgICAgICAgICBnbF9oZWFkZXJfbGl0ZXJhbF9yZWdleD1gZWNobyAnc3Bhd24uaCcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICIkZ2xfbWFrZV9saXRlcmFsX3JlZ2V4X3NlZCJgCisgICAgICAgICAgICAgICBnbF9hYnNvbHV0ZV9oZWFkZXJfc2VkPSIvJHtnbF9kaXJzZXBfcmVnZXh9JHtnbF9oZWFkZXJfbGl0ZXJhbF9yZWdleH0vIid7CisgICAgICAgICAgICAgICAgICAgcy8uKiJcKC4qJyIke2dsX2RpcnNlcF9yZWdleH0ke2dsX2hlYWRlcl9saXRlcmFsX3JlZ2V4fSInXCkiLiovXDEvCisgICAgICAgICAgICAgICAgICAgc3xeL1teL118Ly8mfAorICAgICAgICAgICAgICAgICAgIHAKKyAgICAgICAgICAgICAgICAgICBxCisgICAgICAgICAgICAgICAgIH0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9uZXh0X3NwYXduX2g9JyInYChldmFsICIkZ2xfYWJzbmFtZV9jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAgICAgICAgICAgICAgICAgICAgIHNlZCAtbiAiJGdsX2Fic29sdXRlX2hlYWRlcl9zZWQiYCciJworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIGdsX2N2X25leHRfc3Bhd25faD0nPCdzcGF3bi5oJz4nCisgICAgICAgICAgICAgZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9uZXh0X3NwYXduX2giID4mNQorJGFzX2VjaG8gIiRnbF9jdl9uZXh0X3NwYXduX2giID4mNjsgfQorICAgICBmaQorICAgICBORVhUX1NQQVdOX0g9JGdsX2N2X25leHRfc3Bhd25faAorCisgICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzIHx8IHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0gYnVnZ3k7IHRoZW4KKyAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGVfbmV4dCcKKyAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0nPCdzcGF3bi5oJz4nCisgICAgIGVsc2UKKyAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGUnCisgICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9JGdsX2N2X25leHRfc3Bhd25faAorICAgICBmaQorICAgICBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TUEFXTl9IPSRnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZQorCisKKworCisKKyAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3NwYXduX2ggPSB5ZXM7IHRoZW4KKyAgICBIQVZFX1NQQVdOX0g9MQorICAgIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInBvc2l4X3NwYXduYXR0cl90IiAiYWNfY3ZfdHlwZV9wb3NpeF9zcGF3bmF0dHJfdCIgIgorI2luY2x1ZGUgPHNwYXduLmg+CisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9wb3NpeF9zcGF3bmF0dHJfdCIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1BPU0lYX1NQQVdOQVRUUl9UIDEKK19BQ0VPRgorCisKK2Vsc2UKKyAgSEFWRV9QT1NJWF9TUEFXTkFUVFJfVD0wCitmaQorCisgICAgYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAicG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QiICJhY19jdl90eXBlX3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190IiAiCisjaW5jbHVkZSA8c3Bhd24uaD4KKworIgoraWYgdGVzdCAieCRhY19jdl90eXBlX3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190IiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX1QgMQorX0FDRU9GCisKKworZWxzZQorICBIQVZFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19UPTAKK2ZpCisKKyAgZWxzZQorICAgIEhBVkVfU1BBV05fSD0wCisgICAgSEFWRV9QT1NJWF9TUEFXTkFUVFJfVD0wCisgICAgSEFWRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfVD0wCisgIGZpCisKKworCisKKworCisKKworCisKKworICAgIGZvciBnbF9mdW5jIGluIHBvc2l4X3NwYXduIHBvc2l4X3NwYXducCBwb3NpeF9zcGF3bmF0dHJfaW5pdCBwb3NpeF9zcGF3bmF0dHJfZGVzdHJveSAgICAgcG9zaXhfc3Bhd25hdHRyX2dldHNpZ2RlZmF1bHQgcG9zaXhfc3Bhd25hdHRyX3NldHNpZ2RlZmF1bHQgICAgIHBvc2l4X3NwYXduYXR0cl9nZXRzaWdtYXNrIHBvc2l4X3NwYXduYXR0cl9zZXRzaWdtYXNrICAgICBwb3NpeF9zcGF3bmF0dHJfZ2V0ZmxhZ3MgcG9zaXhfc3Bhd25hdHRyX3NldGZsYWdzICAgICBwb3NpeF9zcGF3bmF0dHJfZ2V0cGdyb3VwIHBvc2l4X3NwYXduYXR0cl9zZXRwZ3JvdXAgICAgIHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBvbGljeSBwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwb2xpY3kgICAgIHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBhcmFtIHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBhcmFtICAgICBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfaW5pdCBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfZGVzdHJveSAgICAgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW4gcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlICAgICBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkZHVwMjsgZG8KKyAgICBhc19nbF9TeW1ib2w9YCRhc19lY2hvICJnbF9jdl9oYXZlX3Jhd19kZWNsXyRnbF9mdW5jIiB8ICRhc190cl9zaGAKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyRhc19nbF9TeW1ib2wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3Bhd24uaD4KKworaW50CittYWluICgpCit7CisjdW5kZWYgJGdsX2Z1bmMKKyAgKHZvaWQpICRnbF9mdW5jOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiRhc19nbF9TeW1ib2w9eWVzIgorZWxzZQorICBldmFsICIkYXNfZ2xfU3ltYm9sPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJGFzX2dsX1N5bWJvbAorCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgICAgaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19nbF9TeW1ib2wiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV9SQVdfREVDTF8kZ2xfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworICAgICAgICAgICAgICAgICAgICAgZXZhbCBhY19jdl9oYXZlX2RlY2xfJGdsX2Z1bmM9eWVzCitmaQorICAgICAgZG9uZQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgZ2xfY3ZfZnVuY19zcHJpbnRmX3Bvc2l4PW5vCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9zaXplc19jOTkiIGluCisgICAgKnllcykKKyAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9sb25nX2RvdWJsZSIgaW4KKyAgICAgICAgKnllcykKKyAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGUiIGluCisgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGVfbG9uZ19kb3VibGUiIGluCisgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfYSIgaW4KKyAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2YiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX24iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbHMiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX3Bvc2l0aW9ucyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2dyb3VwaW5nIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19sZWZ0YWRqdXN0IiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX3plcm8iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfcHJlY2lzaW9uIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3ByaW50ZiBleGlzdHMgYW5kIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbHJlYWR5IFBPU0lYIGNvbXBsaWFudC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NwcmludGZfcG9zaXg9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgIGVzYWMKKyAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19zcHJpbnRmX3Bvc2l4ID0gbm87IHRoZW4KKworCisKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlIiBpbgorICAgICp5ZXMpCisgICAgICA7OworICAgICopCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0lORklOSVRFX0RPVUJMRSAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgOzsKKyAgZXNhYworCisKKworCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9sb25nX2RvdWJsZSIgaW4KKyAgICAqeWVzKQorICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlX2xvbmdfZG91YmxlIiBpbgorICAgICAgICAqeWVzKQorICAgICAgICAgIDs7CisgICAgICAgICopCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0lORklOSVRFX0xPTkdfRE9VQkxFIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgIGVzYWMKKworCisKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9hIiBpbgorICAgICp5ZXMpCisgICAgICA7OworICAgICopCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0RJUkVDVElWRV9BIDEiID4+Y29uZmRlZnMuaAorCisgICAgICBmb3IgYWNfZnVuYyBpbiBubF9sYW5naW5mbworZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJubF9sYW5naW5mbyIgImFjX2N2X2Z1bmNfbmxfbGFuZ2luZm8iCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfbmxfbGFuZ2luZm8iID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9OTF9MQU5HSU5GTyAxCitfQUNFT0YKKworZmkKK2RvbmUKKworICAgICAgOzsKKyAgZXNhYworCisKKworICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2YiIGluCisgICAgKnllcykKKyAgICAgIDs7CisgICAgKikKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfRElSRUNUSVZFX0YgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9scyIgaW4KKyAgICAqeWVzKQorICAgICAgOzsKKyAgICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9ESVJFQ1RJVkVfTFMgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfZ3JvdXBpbmciIGluCisgICAgKnllcykKKyAgICAgIDs7CisgICAgKikKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfRkxBR19HUk9VUElORyAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgOzsKKyAgZXNhYworCisKKworICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19sZWZ0YWRqdXN0IiBpbgorICAgICp5ZXMpCisgICAgICA7OworICAgICopCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0ZMQUdfTEVGVEFESlVTVCAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgOzsKKyAgZXNhYworCisKKworICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZmxhZ196ZXJvIiBpbgorICAgICp5ZXMpCisgICAgICA7OworICAgICopCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0ZMQUdfWkVSTyAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgOzsKKyAgZXNhYworCisKKworICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfcHJlY2lzaW9uIiBpbgorICAgICp5ZXMpCisgICAgICA7OworICAgICopCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX1VOQk9VTkRFRF9QUkVDSVNJT04gMSIgPj5jb25mZGVmcy5oCisKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfRE9VQkxFIDEiID4+Y29uZmRlZnMuaAorCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0xPTkdfRE9VQkxFIDEiID4+Y29uZmRlZnMuaAorCisgICAgICA7OworICBlc2FjCisKKworCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9lbm9tZW0iIGluCisgICAgKnllcykKKyAgICAgIDs7CisgICAgKikKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfRU5PTUVNIDEiID4+Y29uZmRlZnMuaAorCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0RPVUJMRSAxIiA+PmNvbmZkZWZzLmgKKworCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9MT05HX0RPVUJMRSAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgOzsKKyAgZXNhYworCisKKworCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgdmFzbnByaW50Zi4kYWNfb2JqZXh0IgorCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBwcmludGYtYXJncy4kYWNfb2JqZXh0IgorCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBwcmludGYtcGFyc2UuJGFjX29iamV4dCIKKworCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgYXNucHJpbnRmLiRhY19vYmpleHQiCisKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY192YXNucHJpbnRmID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFJFUExBQ0VfVkFTTlBSSU5URiAxIiA+PmNvbmZkZWZzLmgKKworICBmaQorCisKKworCisKKworCisKKworCisKKyAgYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAicHRyZGlmZl90IiAiYWNfY3ZfdHlwZV9wdHJkaWZmX3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9wdHJkaWZmX3QiID0geHllczsgdGhlbiA6CisKK2Vsc2UKKworJGFzX2VjaG8gIiNkZWZpbmUgcHRyZGlmZl90IGxvbmciID4+Y29uZmRlZnMuaAorCisKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBzcHJpbnRmLiRhY19vYmpleHQiCisKKyAgUkVQTEFDRV9TUFJJTlRGPTEKKyAgOgorCisgIGZpCisKKworCisKKworCisgICAgICAgICAgR05VTElCX1NQUklOVEZfUE9TSVg9MQorCisKKworCisKKyRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX1NQUklOVEZfUE9TSVggMSIgPj5jb25mZGVmcy5oCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3NpemVfdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3NpemVfdC4uLiAiID4mNjsgfQoraWYgJHtndF9jdl9zc2l6ZV90Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgoraW50CittYWluICgpCit7CitpbnQgeCA9IHNpemVvZiAoc3NpemVfdCAqKSArIHNpemVvZiAoc3NpemVfdCk7CisgICAgICAgICAgICByZXR1cm4gIXg7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ3RfY3Zfc3NpemVfdD15ZXMKK2Vsc2UKKyAgZ3RfY3Zfc3NpemVfdD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3Zfc3NpemVfdCIgPiY1CiskYXNfZWNobyAiJGd0X2N2X3NzaXplX3QiID4mNjsgfQorICBpZiB0ZXN0ICRndF9jdl9zc2l6ZV90ID0gbm87IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgc3NpemVfdCBpbnQiID4+Y29uZmRlZnMuaAorCisgIGZpCisKKworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc3RhdCBoYW5kbGVzIHRyYWlsaW5nIHNsYXNoZXMgb24gZGlyZWN0b3JpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBzdGF0IGhhbmRsZXMgdHJhaWxpbmcgc2xhc2hlcyBvbiBkaXJlY3Rvcmllcy4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX3N0YXRfZGlyX3NsYXNoKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBjYXNlICRob3N0X29zIGluCisgICAgICAgICAgICBtaW5ndyopIGdsX2N2X2Z1bmNfc3RhdF9kaXJfc2xhc2g9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICAqKSBnbF9jdl9mdW5jX3N0YXRfZGlyX3NsYXNoPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICBlc2FjCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCitpbnQKK21haW4gKCkKK3sKK3N0cnVjdCBzdGF0IHN0OyByZXR1cm4gc3RhdCAoIi4iLCAmc3QpICE9IHN0YXQgKCIuLyIsICZzdCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX3N0YXRfZGlyX3NsYXNoPXllcworZWxzZQorICBnbF9jdl9mdW5jX3N0YXRfZGlyX3NsYXNoPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19zdGF0X2Rpcl9zbGFzaCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfc3RhdF9kaXJfc2xhc2giID4mNjsgfQorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc3RhdCBoYW5kbGVzIHRyYWlsaW5nIHNsYXNoZXMgb24gZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBzdGF0IGhhbmRsZXMgdHJhaWxpbmcgc2xhc2hlcyBvbiBmaWxlcy4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX3N0YXRfZmlsZV9zbGFzaCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHRvdWNoIGNvbmZ0ZXN0LnRtcAorICAgICAgICMgQXNzdW1lIHRoYXQgaWYgd2UgaGF2ZSBsc3RhdCwgd2UgY2FuIGFsc28gY2hlY2sgc3ltbGlua3MuCisgICAgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19sc3RhdCA9IHllczsgdGhlbgorICAgICAgICAgbG4gLXMgY29uZnRlc3QudG1wIGNvbmZ0ZXN0LmxuaworICAgICAgIGZpCisgICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gZ2xpYmMgc3lzdGVtcy4KKyAgICAgICAgICAgICotZ251KikgZ2xfY3ZfZnVuY19zdGF0X2ZpbGVfc2xhc2g9Imd1ZXNzaW5nIHllcyIgOzsKKyAgICAgICAgICAgICAgICAgICAgIyBJZiB3ZSBkb24ndCBrbm93LCBhc3N1bWUgdGhlIHdvcnN0LgorICAgICAgICAgICAgKikgICAgICBnbF9jdl9mdW5jX3N0YXRfZmlsZV9zbGFzaD0iZ3Vlc3Npbmcgbm8iIDs7CisgICAgICAgICAgZXNhYworCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCitpbnQKK21haW4gKCkKK3sKK2ludCByZXN1bHQgPSAwOworICAgICAgc3RydWN0IHN0YXQgc3Q7CisgICAgICBpZiAoIXN0YXQgKCJjb25mdGVzdC50bXAvIiwgJnN0KSkKKyAgICAgICAgcmVzdWx0IHw9IDE7CisjaWYgSEFWRV9MU1RBVAorICAgICAgaWYgKCFzdGF0ICgiY29uZnRlc3QubG5rLyIsICZzdCkpCisgICAgICAgIHJlc3VsdCB8PSAyOworI2VuZGlmCisgICAgICByZXR1cm4gcmVzdWx0OworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX3N0YXRfZmlsZV9zbGFzaD15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19zdGF0X2ZpbGVfc2xhc2g9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgICAgICAgcm0gLWYgY29uZnRlc3QudG1wIGNvbmZ0ZXN0LmxuaworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19zdGF0X2ZpbGVfc2xhc2giID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX3N0YXRfZmlsZV9zbGFzaCIgPiY2OyB9CisgIGNhc2UgJGdsX2N2X2Z1bmNfc3RhdF9kaXJfc2xhc2ggaW4KKyAgICAqbm8pIFJFUExBQ0VfU1RBVD0xCisKKyRhc19lY2hvICIjZGVmaW5lIFJFUExBQ0VfRlVOQ19TVEFUX0RJUiAxIiA+PmNvbmZkZWZzLmgKKzs7CisgIGVzYWMKKyAgY2FzZSAkZ2xfY3ZfZnVuY19zdGF0X2ZpbGVfc2xhc2ggaW4KKyAgICAqbm8pIFJFUExBQ0VfU1RBVD0xCisKKyRhc19lY2hvICIjZGVmaW5lIFJFUExBQ0VfRlVOQ19TVEFUX0ZJTEUgMSIgPj5jb25mZGVmcy5oCis7OworICBlc2FjCisKKyAgaWYgdGVzdCAkUkVQTEFDRV9TVEFUID0gMTsgdGhlbgorCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgc3RhdC4kYWNfb2JqZXh0IgorCisgICAgOgorICBmaQorCisKKworCisKKyAgICAgICAgICBHTlVMSUJfU1RBVD0xCisKKworCisKKworJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfU1RBVCAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCisKKyAgIyBEZWZpbmUgdHdvIGFkZGl0aW9uYWwgdmFyaWFibGVzIHVzZWQgaW4gdGhlIE1ha2VmaWxlIHN1YnN0aXR1dGlvbi4KKworICBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPSB5ZXM7IHRoZW4KKyAgICBTVERCT09MX0g9JycKKyAgZWxzZQorICAgIFNUREJPT0xfSD0nc3RkYm9vbC5oJworICBmaQorCisgICBpZiB0ZXN0IC1uICIkU1REQk9PTF9IIjsgdGhlbgorICBHTF9HRU5FUkFURV9TVERCT09MX0hfVFJVRT0KKyAgR0xfR0VORVJBVEVfU1REQk9PTF9IX0ZBTFNFPScjJworZWxzZQorICBHTF9HRU5FUkFURV9TVERCT09MX0hfVFJVRT0nIycKKyAgR0xfR0VORVJBVEVfU1REQk9PTF9IX0ZBTFNFPQorZmkKKworCisgIGlmIHRlc3QgIiRhY19jdl90eXBlX19Cb29sIiA9IHllczsgdGhlbgorICAgIEhBVkVfX0JPT0w9MQorICBlbHNlCisgICAgSEFWRV9fQk9PTD0wCisgIGZpCisKKworCisKKworICBTVERERUZfSD0KKyAgaWYgdGVzdCAkZ3RfY3ZfY193Y2hhcl90ID0gbm87IHRoZW4KKyAgICBIQVZFX1dDSEFSX1Q9MAorICAgIFNURERFRl9IPXN0ZGRlZi5oCisgIGZpCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBOVUxMIGNhbiBiZSB1c2VkIGluIGFyYml0cmFyeSBleHByZXNzaW9ucyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIE5VTEwgY2FuIGJlIHVzZWQgaW4gYXJiaXRyYXJ5IGV4cHJlc3Npb25zLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2RlY2xfbnVsbF93b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgICAgIGludCB0ZXN0WzIgKiAoc2l6ZW9mIE5VTEwgPT0gc2l6ZW9mICh2b2lkICopKSAtMV07CisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZGVjbF9udWxsX3dvcmtzPXllcworZWxzZQorICBnbF9jdl9kZWNsX251bGxfd29ya3M9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2RlY2xfbnVsbF93b3JrcyIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2RlY2xfbnVsbF93b3JrcyIgPiY2OyB9CisgIGlmIHRlc3QgJGdsX2N2X2RlY2xfbnVsbF93b3JrcyA9IG5vOyB0aGVuCisgICAgUkVQTEFDRV9OVUxMPTEKKyAgICBTVERERUZfSD1zdGRkZWYuaAorICBmaQorCisgICBpZiB0ZXN0IC1uICIkU1REREVGX0giOyB0aGVuCisgIEdMX0dFTkVSQVRFX1NURERFRl9IX1RSVUU9CisgIEdMX0dFTkVSQVRFX1NURERFRl9IX0ZBTFNFPScjJworZWxzZQorICBHTF9HRU5FUkFURV9TVERERUZfSF9UUlVFPScjJworICBHTF9HRU5FUkFURV9TVERERUZfSF9GQUxTRT0KK2ZpCisKKyAgaWYgdGVzdCAtbiAiJFNURERFRl9IIjsgdGhlbgorCisKKworCisKKworCisKKyAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXM7IHRoZW4KKyAgICAgICBnbF9jdl9uZXh0X3N0ZGRlZl9oPSc8J3N0ZGRlZi5oJz4nCisgICAgIGVsc2UKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHN0ZGRlZi5oPiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxzdGRkZWYuaD4uLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfbmV4dF9zdGRkZWZfaCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworX0FDRU9GCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgYWl4KikgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAgLUMiIDs7CisgICAgICAgICAgICAgICAgICopICAgIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIiA7OworICAgICAgICAgICAgICAgZXNhYworCisgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgbWluZ3cqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2RpcnNlcF9yZWdleD0nWy9cXF0nCisgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICBnbF9kaXJzZXBfcmVnZXg9J1wvJworICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9tYWtlX2xpdGVyYWxfcmVnZXhfc2VkPSdzLFtdJF5cXC4qL1tdLFxcJixnJworCisgICAgICAgICAgICAgICBnbF9oZWFkZXJfbGl0ZXJhbF9yZWdleD1gZWNobyAnc3RkZGVmLmgnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAiJGdsX21ha2VfbGl0ZXJhbF9yZWdleF9zZWQiYAorICAgICAgICAgICAgICAgZ2xfYWJzb2x1dGVfaGVhZGVyX3NlZD0iLyR7Z2xfZGlyc2VwX3JlZ2V4fSR7Z2xfaGVhZGVyX2xpdGVyYWxfcmVnZXh9LyIneworICAgICAgICAgICAgICAgICAgIHMvLioiXCguKiciJHtnbF9kaXJzZXBfcmVnZXh9JHtnbF9oZWFkZXJfbGl0ZXJhbF9yZWdleH0iJ1wpIi4qL1wxLworICAgICAgICAgICAgICAgICAgIHN8Xi9bXi9dfC8vJnwKKyAgICAgICAgICAgICAgICAgICBwCisgICAgICAgICAgICAgICAgICAgcQorICAgICAgICAgICAgICAgICB9JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfbmV4dF9zdGRkZWZfaD0nIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICAgICAgICAgICAgICAgICAgICAgc2VkIC1uICIkZ2xfYWJzb2x1dGVfaGVhZGVyX3NlZCJgJyInCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfbmV4dF9zdGRkZWZfaCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X25leHRfc3RkZGVmX2giID4mNjsgfQorICAgICBmaQorICAgICBORVhUX1NURERFRl9IPSRnbF9jdl9uZXh0X3N0ZGRlZl9oCisKKyAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXMgfHwgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSBidWdneTsgdGhlbgorICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZV9uZXh0JworICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSc8J3N0ZGRlZi5oJz4nCisgICAgIGVsc2UKKyAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGUnCisgICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9JGdsX2N2X25leHRfc3RkZGVmX2gKKyAgICAgZmkKKyAgICAgTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1REREVGX0g9JGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlCisKKworCisKKyAgZmkKKworCisKKworCisKKworCisKKworCisKKyAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXM7IHRoZW4KKyAgICAgICBnbF9jdl9uZXh0X3N0ZGlvX2g9Jzwnc3RkaW8uaCc+JworICAgICBlbHNlCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxzdGRpby5oPiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxzdGRpby5oPi4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9uZXh0X3N0ZGlvX2grOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKworX0FDRU9GCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgYWl4KikgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAgLUMiIDs7CisgICAgICAgICAgICAgICAgICopICAgIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIiA7OworICAgICAgICAgICAgICAgZXNhYworCisgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgbWluZ3cqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2RpcnNlcF9yZWdleD0nWy9cXF0nCisgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICBnbF9kaXJzZXBfcmVnZXg9J1wvJworICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9tYWtlX2xpdGVyYWxfcmVnZXhfc2VkPSdzLFtdJF5cXC4qL1tdLFxcJixnJworCisgICAgICAgICAgICAgICBnbF9oZWFkZXJfbGl0ZXJhbF9yZWdleD1gZWNobyAnc3RkaW8uaCcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICIkZ2xfbWFrZV9saXRlcmFsX3JlZ2V4X3NlZCJgCisgICAgICAgICAgICAgICBnbF9hYnNvbHV0ZV9oZWFkZXJfc2VkPSIvJHtnbF9kaXJzZXBfcmVnZXh9JHtnbF9oZWFkZXJfbGl0ZXJhbF9yZWdleH0vIid7CisgICAgICAgICAgICAgICAgICAgcy8uKiJcKC4qJyIke2dsX2RpcnNlcF9yZWdleH0ke2dsX2hlYWRlcl9saXRlcmFsX3JlZ2V4fSInXCkiLiovXDEvCisgICAgICAgICAgICAgICAgICAgc3xeL1teL118Ly8mfAorICAgICAgICAgICAgICAgICAgIHAKKyAgICAgICAgICAgICAgICAgICBxCisgICAgICAgICAgICAgICAgIH0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9uZXh0X3N0ZGlvX2g9JyInYChldmFsICIkZ2xfYWJzbmFtZV9jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAgICAgICAgICAgICAgICAgICAgIHNlZCAtbiAiJGdsX2Fic29sdXRlX2hlYWRlcl9zZWQiYCciJworCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X25leHRfc3RkaW9faCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X25leHRfc3RkaW9faCIgPiY2OyB9CisgICAgIGZpCisgICAgIE5FWFRfU1RESU9fSD0kZ2xfY3ZfbmV4dF9zdGRpb19oCisKKyAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXMgfHwgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSBidWdneTsgdGhlbgorICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZV9uZXh0JworICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSc8J3N0ZGlvLmgnPicKKyAgICAgZWxzZQorICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZScKKyAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0kZ2xfY3ZfbmV4dF9zdGRpb19oCisgICAgIGZpCisgICAgIE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURElPX0g9JGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlCisKKworCisKKworICAgICAgR05VTElCX0ZTQ0FORj0xCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBHTlVMSUJfRlNDQU5GIDEKK19BQ0VPRgorCisKKyAgR05VTElCX1NDQU5GPTEKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEdOVUxJQl9TQ0FORiAxCitfQUNFT0YKKworCisgIEdOVUxJQl9GR0VUQz0xCisgIEdOVUxJQl9HRVRDPTEKKyAgR05VTElCX0dFVENIQVI9MQorICBHTlVMSUJfRkdFVFM9MQorICBHTlVMSUJfRlJFQUQ9MQorCisKKyAgICAgIEdOVUxJQl9GUFJJTlRGPTEKKyAgR05VTElCX1BSSU5URj0xCisgIEdOVUxJQl9WRlBSSU5URj0xCisgIEdOVUxJQl9WUFJJTlRGPTEKKyAgR05VTElCX0ZQVVRDPTEKKyAgR05VTElCX1BVVEM9MQorICBHTlVMSUJfUFVUQ0hBUj0xCisgIEdOVUxJQl9GUFVUUz0xCisgIEdOVUxJQl9QVVRTPTEKKyAgR05VTElCX0ZXUklURT0xCisKKworCisKKyAgICBmb3IgZ2xfZnVuYyBpbiBkcHJpbnRmIGZwdXJnZSBmc2Vla28gZnRlbGxvIGdldGRlbGltIGdldGxpbmUgZ2V0cyBwY2xvc2UgcG9wZW4gICAgIHJlbmFtZWF0IHNucHJpbnRmIHRtcGZpbGUgdmRwcmludGYgdnNucHJpbnRmOyBkbworICAgIGFzX2dsX1N5bWJvbD1gJGFzX2VjaG8gImdsX2N2X2hhdmVfcmF3X2RlY2xfJGdsX2Z1bmMiIHwgJGFzX3RyX3NoYAorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNsYXJlZCB3aXRob3V0IGEgbWFjcm8iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNsYXJlZCB3aXRob3V0IGEgbWFjcm8uLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JGFzX2dsX1N5bWJvbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQKK21haW4gKCkKK3sKKyN1bmRlZiAkZ2xfZnVuYworICAodm9pZCkgJGdsX2Z1bmM7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJGFzX2dsX1N5bWJvbD15ZXMiCitlbHNlCisgIGV2YWwgIiRhc19nbF9TeW1ib2w9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkYXNfZ2xfU3ltYm9sCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgICBpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2dsX1N5bWJvbCJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFX1JBV19ERUNMXyRnbF9mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCisgICAgICAgICAgICAgICAgICAgICBldmFsIGFjX2N2X2hhdmVfZGVjbF8kZ2xfZnVuYz15ZXMKK2ZpCisgICAgICBkb25lCisKKworCisKKworCisKKworCisKKworCisgICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzOyB0aGVuCisgICAgICAgZ2xfY3ZfbmV4dF9zdGRsaWJfaD0nPCdzdGRsaWIuaCc+JworICAgICBlbHNlCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxzdGRsaWIuaD4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8c3RkbGliLmg+Li4uICIgPiY2OyB9CitpZiAke2dsX2N2X25leHRfc3RkbGliX2grOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK19BQ0VPRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgIGFpeCopIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIC1DIiA7OworICAgICAgICAgICAgICAgICAqKSAgICBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCIgOzsKKyAgICAgICAgICAgICAgIGVzYWMKKworICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgIG1pbmd3KikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kaXJzZXBfcmVnZXg9J1svXFxdJworICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgZ2xfZGlyc2VwX3JlZ2V4PSdcLycKKyAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfbWFrZV9saXRlcmFsX3JlZ2V4X3NlZD0ncyxbXSReXFwuKi9bXSxcXCYsZycKKworICAgICAgICAgICAgICAgZ2xfaGVhZGVyX2xpdGVyYWxfcmVnZXg9YGVjaG8gJ3N0ZGxpYi5oJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgIiRnbF9tYWtlX2xpdGVyYWxfcmVnZXhfc2VkImAKKyAgICAgICAgICAgICAgIGdsX2Fic29sdXRlX2hlYWRlcl9zZWQ9Ii8ke2dsX2RpcnNlcF9yZWdleH0ke2dsX2hlYWRlcl9saXRlcmFsX3JlZ2V4fS8iJ3sKKyAgICAgICAgICAgICAgICAgICBzLy4qIlwoLionIiR7Z2xfZGlyc2VwX3JlZ2V4fSR7Z2xfaGVhZGVyX2xpdGVyYWxfcmVnZXh9IidcKSIuKi9cMS8KKyAgICAgICAgICAgICAgICAgICBzfF4vW14vXXwvLyZ8CisgICAgICAgICAgICAgICAgICAgcAorICAgICAgICAgICAgICAgICAgIHEKKyAgICAgICAgICAgICAgICAgfScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X25leHRfc3RkbGliX2g9JyInYChldmFsICIkZ2xfYWJzbmFtZV9jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAgICAgICAgICAgICAgICAgICAgIHNlZCAtbiAiJGdsX2Fic29sdXRlX2hlYWRlcl9zZWQiYCciJworCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X25leHRfc3RkbGliX2giID4mNQorJGFzX2VjaG8gIiRnbF9jdl9uZXh0X3N0ZGxpYl9oIiA+JjY7IH0KKyAgICAgZmkKKyAgICAgTkVYVF9TVERMSUJfSD0kZ2xfY3ZfbmV4dF9zdGRsaWJfaAorCisgICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzIHx8IHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0gYnVnZ3k7IHRoZW4KKyAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGVfbmV4dCcKKyAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0nPCdzdGRsaWIuaCc+JworICAgICBlbHNlCisgICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNsdWRlJworICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSRnbF9jdl9uZXh0X3N0ZGxpYl9oCisgICAgIGZpCisgICAgIE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURExJQl9IPSRnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZQorCisKKworCisKKworICAgIGZvciBnbF9mdW5jIGluIF9FeGl0IGF0b2xsIGNhbm9uaWNhbGl6ZV9maWxlX25hbWUgZ2V0bG9hZGF2ZyBnZXRzdWJvcHQgZ3JhbnRwdCAgICAgaW5pdHN0YXRlIGluaXRzdGF0ZV9yIG1rZHRlbXAgbWtvc3RlbXAgbWtvc3RlbXBzIG1rc3RlbXAgbWtzdGVtcHMgICAgIHBvc2l4X29wZW5wdCBwdHNuYW1lIHB0c25hbWVfciByYW5kb20gcmFuZG9tX3IgcmVhbHBhdGggcnBtYXRjaCAgICAgc2V0ZW52IHNldHN0YXRlIHNldHN0YXRlX3Igc3JhbmRvbSBzcmFuZG9tX3IgICAgIHN0cnRvZCBzdHJ0b2xsIHN0cnRvdWxsIHVubG9ja3B0IHVuc2V0ZW52OyBkbworICAgIGFzX2dsX1N5bWJvbD1gJGFzX2VjaG8gImdsX2N2X2hhdmVfcmF3X2RlY2xfJGdsX2Z1bmMiIHwgJGFzX3RyX3NoYAorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNsYXJlZCB3aXRob3V0IGEgbWFjcm8iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNsYXJlZCB3aXRob3V0IGEgbWFjcm8uLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JGFzX2dsX1N5bWJvbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZiBIQVZFX1NZU19MT0FEQVZHX0gKKyMgaW5jbHVkZSA8c3lzL2xvYWRhdmcuaD4KKyNlbmRpZgorI2lmIEhBVkVfUkFORE9NX0gKKyMgaW5jbHVkZSA8cmFuZG9tLmg+CisjZW5kaWYKKworaW50CittYWluICgpCit7CisjdW5kZWYgJGdsX2Z1bmMKKyAgKHZvaWQpICRnbF9mdW5jOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiRhc19nbF9TeW1ib2w9eWVzIgorZWxzZQorICBldmFsICIkYXNfZ2xfU3ltYm9sPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJGFzX2dsX1N5bWJvbAorCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgICAgaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19nbF9TeW1ib2wiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV9SQVdfREVDTF8kZ2xfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworICAgICAgICAgICAgICAgICAgICAgZXZhbCBhY19jdl9oYXZlX2RlY2xfJGdsX2Z1bmM9eWVzCitmaQorICAgICAgZG9uZQorCisKKworCisKKworCisKKyAgZm9yIGFjX2Z1bmMgaW4gc3RwY3B5CitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInN0cGNweSIgImFjX2N2X2Z1bmNfc3RwY3B5IgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3N0cGNweSIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUENQWSAxCitfQUNFT0YKKworZmkKK2RvbmUKKworICBpZiB0ZXN0ICRhY19jdl9mdW5jX3N0cGNweSA9IG5vOyB0aGVuCisgICAgSEFWRV9TVFBDUFk9MAorICBmaQorCisgIGlmIHRlc3QgJEhBVkVfU1RQQ1BZID0gMDsgdGhlbgorCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgc3RwY3B5LiRhY19vYmpleHQiCisKKworICA6CisKKyAgZmkKKworCisKKworCisgICAgICAgICAgR05VTElCX1NUUENQWT0xCisKKworCisKKworJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfU1RQQ1BZIDEiID4+Y29uZmRlZnMuaAorCisKKworCisKKworCisgIGZvciBhY19mdW5jIGluIHN0cmNocm51bAorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzdHJjaHJudWwiICJhY19jdl9mdW5jX3N0cmNocm51bCIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19zdHJjaHJudWwiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJDSFJOVUwgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zdHJjaHJudWwgPSBubzsgdGhlbgorICAgIEhBVkVfU1RSQ0hSTlVMPTAKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBzdHJjaHJudWwgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBzdHJjaHJudWwgd29ya3MuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19zdHJjaHJudWxfd29ya3MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2lmIGRlZmluZWQgX19DWUdXSU5fXworICNpbmNsdWRlIDxjeWd3aW4vdmVyc2lvbi5oPgorICNpZiBDWUdXSU5fVkVSU0lPTl9ETExfQ09NQklORUQgPiBDWUdXSU5fVkVSU0lPTl9ETExfTUFLRV9DT01CSU5FRCAoMTAwNywgOSkKKyAgTHVja3kgdXNlcgorICNlbmRpZgorI2Vsc2UKKyAgTHVja3kgdXNlcgorI2VuZGlmCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIkx1Y2t5IHVzZXIiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfc3RyY2hybnVsX3dvcmtzPSJndWVzc2luZyB5ZXMiCitlbHNlCisgIGdsX2N2X2Z1bmNfc3RyY2hybnVsX3dvcmtzPSJndWVzc2luZyBubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKKworCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPiAvKiBmb3Igc3RyY2hybnVsICovCisKK2ludAorbWFpbiAoKQoreworY29uc3QgY2hhciAqYnVmID0gImEiOworICAgICAgcmV0dXJuIHN0cmNocm51bCAoYnVmLCAnYicpICE9IGJ1ZiArIDE7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfc3RyY2hybnVsX3dvcmtzPXllcworZWxzZQorICBnbF9jdl9mdW5jX3N0cmNocm51bF93b3Jrcz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19zdHJjaHJudWxfd29ya3MiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX3N0cmNocm51bF93b3JrcyIgPiY2OyB9CisgICAgY2FzZSAiJGdsX2N2X2Z1bmNfc3RyY2hybnVsX3dvcmtzIiBpbgorICAgICAgKnllcykgOzsKKyAgICAgICopIFJFUExBQ0VfU1RSQ0hSTlVMPTEgOzsKKyAgICBlc2FjCisgIGZpCisKKyAgaWYgdGVzdCAkSEFWRV9TVFJDSFJOVUwgPSAwIHx8IHRlc3QgJFJFUExBQ0VfU1RSQ0hSTlVMID0gMTsgdGhlbgorCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgc3RyY2hybnVsLiRhY19vYmpleHQiCisKKyAgICA6CisgIGZpCisKKworCisKKworICAgICAgICAgIEdOVUxJQl9TVFJDSFJOVUw9MQorCisKKworCisKKyRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX1NUUkNIUk5VTCAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCisKKworICBpZiB0ZXN0ICRhY19jdl9mdW5jX3N0cmR1cCA9IHllczsgdGhlbgorICAgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfbWFsbG9jX3Bvc2l4ICE9IHllczsgdGhlbgorICAgICAgUkVQTEFDRV9TVFJEVVA9MQorICAgIGZpCisgIGZpCisKKyAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3N0cmR1cCA9IG5vOyB0aGVuCisgICAgSEFWRV9ERUNMX1NUUkRVUD0wCisgIGZpCisKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zdHJkdXAgPSBubyB8fCB0ZXN0ICRSRVBMQUNFX1NUUkRVUCA9IDE7IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHN0cmR1cC4kYWNfb2JqZXh0IgorCisgICAgOgorICBmaQorCisKKworCisKKyAgICAgICAgICBHTlVMSUJfU1RSRFVQPTEKKworCisKKworCiskYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9TVFJEVVAgMSIgPj5jb25mZGVmcy5oCisKKworCisKKworCisKKworCisKKyAgaWYgdGVzdCAiJEVSUk5PX0g6JFJFUExBQ0VfU1RSRVJST1JfMCIgPSA6MDsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdvcmtpbmcgc3RyZXJyb3IgZnVuY3Rpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgc3RyZXJyb3IgZnVuY3Rpb24uLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY193b3JraW5nX3N0cmVycm9yKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBnbGliYyBzeXN0ZW1zLgorICAgICAgICAgICAqLWdudSopIGdsX2N2X2Z1bmNfd29ya2luZ19zdHJlcnJvcj0iZ3Vlc3NpbmcgeWVzIiA7OworICAgICAgICAgICAgICAgICAgICMgSWYgd2UgZG9uJ3Qga25vdywgYXNzdW1lIHRoZSB3b3JzdC4KKyAgICAgICAgICAgKikgICAgICBnbF9jdl9mdW5jX3dvcmtpbmdfc3RyZXJyb3I9Imd1ZXNzaW5nIG5vIiA7OworICAgICAgICAgZXNhYworCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworaW50CittYWluICgpCit7CitpZiAoISpzdHJlcnJvciAoLTIpKSByZXR1cm4gMTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfd29ya2luZ19zdHJlcnJvcj15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY193b3JraW5nX3N0cmVycm9yPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3dvcmtpbmdfc3RyZXJyb3IiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX3dvcmtpbmdfc3RyZXJyb3IiID4mNjsgfQorICAgIGNhc2UgIiRnbF9jdl9mdW5jX3dvcmtpbmdfc3RyZXJyb3IiIGluCisgICAgICAqeWVzKSA7OworICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFUExBQ0VfU1RSRVJST1I9MQorICAgICAgICA7OworICAgIGVzYWMKKworICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfc3RyZXJyb3Jfcl93b3JrcyIgaW4KKyAgICAgICAgKm5vKSBSRVBMQUNFX1NUUkVSUk9SPTEgOzsKKyAgICAgIGVzYWMKKworICBlbHNlCisgICAgICAgICAgICBSRVBMQUNFX1NUUkVSUk9SPTEKKyAgZmkKKworICBpZiB0ZXN0ICRSRVBMQUNFX1NUUkVSUk9SID0gMTsgdGhlbgorCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgc3RyZXJyb3IuJGFjX29iamV4dCIKKworICBmaQorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgR05VTElCX1NUUkVSUk9SIDEKK19BQ0VPRgorCisKKworCisKKworCisgICAgICAgICAgR05VTElCX1NUUkVSUk9SPTEKKworCisKKworCiskYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9TVFJFUlJPUiAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCisgIGlmIHRlc3QgLW4gIiRFUlJOT19IIiB8fCB0ZXN0ICRSRVBMQUNFX1NUUkVSUk9SXzAgPSAxOyB0aGVuCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBzdHJlcnJvci1vdmVycmlkZS4kYWNfb2JqZXh0IgorCisKKworCisKKyAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaCAhPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZm9yIGFjX2hlYWRlciBpbiB3aW5zb2NrMi5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJ3aW5zb2NrMi5oIiAiYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9XSU5TT0NLMl9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKyAgZmkKKyAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oIiA9IHllczsgdGhlbgorICAgIEhBVkVfV0lOU09DSzJfSD0xCisgICAgVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IPTEKKyAgICBTWVNfSU9DVExfSF9IQVZFX1dJTlNPQ0syX0g9MQorICBlbHNlCisgICAgSEFWRV9XSU5TT0NLMl9IPTAKKyAgZmkKKworCisgIGZpCisKKworCisKKworCisKKyAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3N0cmVycm9yX3IgPSBubzsgdGhlbgorICAgIEhBVkVfREVDTF9TVFJFUlJPUl9SPTAKKyAgZmkKKworICBpZiB0ZXN0ICRhY19jdl9mdW5jX3N0cmVycm9yX3IgPSB5ZXM7IHRoZW4KKyAgICBpZiB0ZXN0ICIkRVJSTk9fSDokUkVQTEFDRV9TVFJFUlJPUl8wIiA9IDowOyB0aGVuCisgICAgICBpZiB0ZXN0ICRnbF9jdl9mdW5jX3N0cmVycm9yX3JfcG9zaXhfc2lnbmF0dXJlID0geWVzOyB0aGVuCisgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3N0cmVycm9yX3Jfd29ya3MiIGluCisgICAgICAgICAgICAgICAgICAgICpubykgUkVQTEFDRV9TVFJFUlJPUl9SPTEgOzsKKyAgICAgICAgZXNhYworICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFJFUExBQ0VfU1RSRVJST1JfUj0xCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIFJFUExBQ0VfU1RSRVJST1JfUj0xCisgICAgZmkKKyAgZmkKKworICBpZiB0ZXN0ICRIQVZFX0RFQ0xfU1RSRVJST1JfUiA9IDAgfHwgdGVzdCAkUkVQTEFDRV9TVFJFUlJPUl9SID0gMTsgdGhlbgorCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgc3RyZXJyb3Jfci4kYWNfb2JqZXh0IgorCisKKworCisKKworICBmaQorCisKKworCisKKyAgICAgICAgICBHTlVMSUJfU1RSRVJST1JfUj0xCisKKworCisKKworJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfU1RSRVJST1JfUiAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCisKKworCisKKworCisKKyAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3N0cm5kdXAgPSBubzsgdGhlbgorICAgIEhBVkVfREVDTF9TVFJORFVQPTAKKyAgZmkKKworICBpZiB0ZXN0ICRhY19jdl9mdW5jX3N0cm5kdXAgPSB5ZXM7IHRoZW4KKyAgICBIQVZFX1NUUk5EVVA9MQorICAgICMgQUlYIDQuMy4zLCBBSVggNS4xIGhhdmUgYSBmdW5jdGlvbiB0aGF0IGZhaWxzIHRvIGFkZCB0aGUgdGVybWluYXRpbmcgJ1wwJy4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIHN0cm5kdXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgc3RybmR1cC4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX3N0cm5kdXBfd29ya3MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisKKyAgICAgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICAgICAgICBhaXggfCBhaXhbMy02XSopIGdsX2N2X2Z1bmNfc3RybmR1cF93b3Jrcz0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgICopICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zdHJuZHVwX3dvcmtzPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICBlc2FjCisKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgICAgICAjaW5jbHVkZSA8c3RyaW5nLmg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3RkbGliLmg+CitpbnQKK21haW4gKCkKK3sKKworI2lmICFIQVZFX0RFQ0xfU1RSTkRVUAorICBleHRlcm4KKyAgI2lmZGVmIF9fY3BsdXNwbHVzCisgICJDIgorICAjZW5kaWYKKyAgY2hhciAqc3RybmR1cCAoY29uc3QgY2hhciAqLCBzaXplX3QpOworI2VuZGlmCisgIGNoYXIgKnM7CisgIHMgPSBzdHJuZHVwICgic29tZSBsb25nZXIgc3RyaW5nIiwgMTUpOworICBmcmVlIChzKTsKKyAgcyA9IHN0cm5kdXAgKCJzaG9ydGVyIHN0cmluZyIsIDEzKTsKKyAgcmV0dXJuIHNbMTNdICE9ICdcMCc7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX3N0cm5kdXBfd29ya3M9eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfc3RybmR1cF93b3Jrcz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfc3RybmR1cF93b3JrcyIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfc3RybmR1cF93b3JrcyIgPiY2OyB9CisgICAgY2FzZSAkZ2xfY3ZfZnVuY19zdHJuZHVwX3dvcmtzIGluCisgICAgICAqbm8pIFJFUExBQ0VfU1RSTkRVUD0xIDs7CisgICAgZXNhYworICBlbHNlCisgICAgSEFWRV9TVFJORFVQPTAKKyAgZmkKKworICBpZiB0ZXN0ICRIQVZFX1NUUk5EVVAgPSAwIHx8IHRlc3QgJFJFUExBQ0VfU1RSTkRVUCA9IDE7IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHN0cm5kdXAuJGFjX29iamV4dCIKKworICBmaQorCisKKworCisKKyAgICAgICAgICBHTlVMSUJfU1RSTkRVUD0xCisKKworCisKKworJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfU1RSTkRVUCAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCisKKworCisKKyAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3N0cm5sZW4gPSBubzsgdGhlbgorICAgIEhBVkVfREVDTF9TVFJOTEVOPTAKKyAgZWxzZQorCisgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIHN0cm5sZW4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgc3Rybmxlbi4uLiAiID4mNjsgfQoraWYgJHthY19jdl9mdW5jX3N0cm5sZW5fd29ya2luZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgIyBHdWVzcyBubyBvbiBBSVggc3lzdGVtcywgeWVzIG90aGVyd2lzZS4KKwkJY2FzZSAiJGhvc3Rfb3MiIGluCisJCSAgYWl4KikgYWNfY3ZfZnVuY19zdHJubGVuX3dvcmtpbmc9bm87OworCQkgICopICAgIGFjX2N2X2Z1bmNfc3Rybmxlbl93b3JraW5nPXllczs7CisJCWVzYWMKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgoraW50CittYWluICgpCit7CisKKyNkZWZpbmUgUyAiZm9vYmFyIgorI2RlZmluZSBTX0xFTiAoc2l6ZW9mIFMgLSAxKQorCisgIC8qIEF0IGxlYXN0IG9uZSBpbXBsZW1lbnRhdGlvbiBpcyBidWdneTogdGhhdCBvZiBBSVggNC4zIHdvdWxkCisgICAgIGdpdmUgc3RybmxlbiAoUywgMSkgPT0gMy4gICovCisKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCBTX0xFTiArIDE7ICsraSkKKyAgICB7CisgICAgICBpbnQgZXhwZWN0ZWQgPSBpIDw9IFNfTEVOID8gaSA6IFNfTEVOOworICAgICAgaWYgKHN0cm5sZW4gKFMsIGkpICE9IGV4cGVjdGVkKQorCXJldHVybiAxOworICAgIH0KKyAgcmV0dXJuIDA7CisKKyAgOworICByZXR1cm4gMDsKK30KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2Z1bmNfc3Rybmxlbl93b3JraW5nPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KKyAgYWNfY3ZfZnVuY19zdHJubGVuX3dvcmtpbmc9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKIAotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZnVuY19zdHJubGVuX3dvcmtpbmciID4mNQorJGFzX2VjaG8gIiRhY19jdl9mdW5jX3N0cm5sZW5fd29ya2luZyIgPiY2OyB9Cit0ZXN0ICRhY19jdl9mdW5jX3N0cm5sZW5fd29ya2luZyA9IG5vICYmIDoKKworCisgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zdHJubGVuX3dvcmtpbmcgPSBubzsgdGhlbgorICAgICAgUkVQTEFDRV9TVFJOTEVOPTEKKyAgICBmaQogICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAotICBhY19oZWFkZXJfcHJlcHJvYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAgaWYgdGVzdCAkSEFWRV9ERUNMX1NUUk5MRU4gPSAwIHx8IHRlc3QgJFJFUExBQ0VfU1RSTkxFTiA9IDE7IHRoZW4KIAotIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/Ci1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCi0gIHllczpubzogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQotICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotICAgIDs7Ci0gIG5vOnllczoqICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBSZXBvcnQgdGhpcyB0byBidWctYmlzb25AZ251Lm9yZyAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgogCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBzdHJubGVuLiRhY19vYmpleHQiCisKKyAgICA6CisgIGZpCisKKworCisKKworICAgICAgICAgIEdOVUxJQl9TVFJOTEVOPTEKKworCisKKworCiskYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9TVFJOTEVOIDEiID4+Y29uZmRlZnMuaAorCisKKworCisgIGZvciBhY19mdW5jIGluIHN0cnRvdWwKK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic3RydG91bCIgImFjX2N2X2Z1bmNfc3RydG91bCIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19zdHJ0b3VsIiA9IHh5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorI2RlZmluZSBIQVZFX1NUUlRPVUwgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKworICBpZiB0ZXN0ICRhY19jdl9mdW5jX3N0cnRvdWwgPSBubzsgdGhlbgorCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgc3RydG91bC4kYWNfb2JqZXh0IgorCisgIGZpCisKKworCisKKyAgZm9yIGFjX2Z1bmMgaW4gc3RydmVyc2NtcAorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzdHJ2ZXJzY21wIiAiYWNfY3ZfZnVuY19zdHJ2ZXJzY21wIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3N0cnZlcnNjbXAiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJWRVJTQ01QIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfc3RydmVyc2NtcCA9IG5vOyB0aGVuCisgICAgSEFWRV9TVFJWRVJTQ01QPTAKKyAgZmkKKworICBpZiB0ZXN0ICRIQVZFX1NUUlZFUlNDTVAgPSAwOyB0aGVuCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBzdHJ2ZXJzY21wLiRhY19vYmpleHQiCisKKworICA6CisKKyAgZmkKKworCisKKworCisgICAgICAgICAgR05VTElCX1NUUlZFUlNDTVA9MQorCisKKworCisKKyRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX1NUUlZFUlNDTVAgMSIgPj5jb25mZGVmcy5oCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllczsgdGhlbgorICAgICAgIGdsX2N2X25leHRfc3lzX3N0YXRfaD0nPCdzeXMvc3RhdC5oJz4nCisgICAgIGVsc2UKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHN5cy9zdGF0Lmg+IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHN5cy9zdGF0Lmg+Li4uICIgPiY2OyB9CitpZiAke2dsX2N2X25leHRfc3lzX3N0YXRfaCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgICAgICAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3N0YXRfaCA9IHllczsgdGhlbgorCisKKyAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCitfQUNFT0YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICBhaXgqKSBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCAtQyIgOzsKKyAgICAgICAgICAgICAgICAgKikgICAgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAiIDs7CisgICAgICAgICAgICAgICBlc2FjCisKKyAgICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICBtaW5ndyopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZGlyc2VwX3JlZ2V4PSdbL1xcXScKKyAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgIGdsX2RpcnNlcF9yZWdleD0nXC8nCisgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX21ha2VfbGl0ZXJhbF9yZWdleF9zZWQ9J3MsW10kXlxcLiovW10sXFwmLGcnCisKKyAgICAgICAgICAgICAgIGdsX2hlYWRlcl9saXRlcmFsX3JlZ2V4PWBlY2hvICdzeXMvc3RhdC5oJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgIiRnbF9tYWtlX2xpdGVyYWxfcmVnZXhfc2VkImAKKyAgICAgICAgICAgICAgIGdsX2Fic29sdXRlX2hlYWRlcl9zZWQ9Ii8ke2dsX2RpcnNlcF9yZWdleH0ke2dsX2hlYWRlcl9saXRlcmFsX3JlZ2V4fS8iJ3sKKyAgICAgICAgICAgICAgICAgICBzLy4qIlwoLionIiR7Z2xfZGlyc2VwX3JlZ2V4fSR7Z2xfaGVhZGVyX2xpdGVyYWxfcmVnZXh9IidcKSIuKi9cMS8KKyAgICAgICAgICAgICAgICAgICBzfF4vW14vXXwvLyZ8CisgICAgICAgICAgICAgICAgICAgcAorICAgICAgICAgICAgICAgICAgIHEKKyAgICAgICAgICAgICAgICAgfScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X25leHRfc3lzX3N0YXRfaD0nIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICAgICAgICAgICAgICAgICAgICAgc2VkIC1uICIkZ2xfYWJzb2x1dGVfaGVhZGVyX3NlZCJgJyInCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgZ2xfY3ZfbmV4dF9zeXNfc3RhdF9oPSc8J3N5cy9zdGF0LmgnPicKKyAgICAgICAgICAgICBmaQorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X25leHRfc3lzX3N0YXRfaCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X25leHRfc3lzX3N0YXRfaCIgPiY2OyB9CisgICAgIGZpCisgICAgIE5FWFRfU1lTX1NUQVRfSD0kZ2xfY3ZfbmV4dF9zeXNfc3RhdF9oCisKKyAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXMgfHwgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSBidWdneTsgdGhlbgorICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZV9uZXh0JworICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSc8J3N5cy9zdGF0LmgnPicKKyAgICAgZWxzZQorICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZScKKyAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0kZ2xfY3ZfbmV4dF9zeXNfc3RhdF9oCisgICAgIGZpCisgICAgIE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19TVEFUX0g9JGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlCisKKworCisKKworCisKKworCisKKworICBpZiB0ZXN0ICRXSU5ET1dTXzY0X0JJVF9TVF9TSVpFID0gMTsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBfR0xfV0lORE9XU182NF9CSVRfU1RfU0laRSAxIiA+PmNvbmZkZWZzLmgKKworICBmaQorCisgICAgICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJubGlua190IiAiYWNfY3ZfdHlwZV9ubGlua190IiAiI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgICAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9ubGlua190IiA9IHh5ZXM7IHRoZW4gOgorCitlbHNlCisKKyRhc19lY2hvICIjZGVmaW5lIG5saW5rX3QgaW50IiA+PmNvbmZkZWZzLmgKKworZmkKKworCisKKyAgICBmb3IgZ2xfZnVuYyBpbiBmY2htb2RhdCBmc3RhdCBmc3RhdGF0IGZ1dGltZW5zIGxjaG1vZCBsc3RhdCBta2RpcmF0IG1rZmlmbyBta2ZpZm9hdCAgICAgbWtub2QgbWtub2RhdCBzdGF0IHV0aW1lbnNhdDsgZG8KKyAgICBhc19nbF9TeW1ib2w9YCRhc19lY2hvICJnbF9jdl9oYXZlX3Jhd19kZWNsXyRnbF9mdW5jIiB8ICRhc190cl9zaGAKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyRhc19nbF9TeW1ib2wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworaW50CittYWluICgpCit7CisjdW5kZWYgJGdsX2Z1bmMKKyAgKHZvaWQpICRnbF9mdW5jOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiRhc19nbF9TeW1ib2w9eWVzIgorZWxzZQorICBldmFsICIkYXNfZ2xfU3ltYm9sPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJGFzX2dsX1N5bWJvbAorCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgICAgaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19nbF9TeW1ib2wiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV9SQVdfREVDTF8kZ2xfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworICAgICAgICAgICAgICAgICAgICAgZXZhbCBhY19jdl9oYXZlX2RlY2xfJGdsX2Z1bmM9eWVzCitmaQorICAgICAgZG9uZQorCisKKworCisKKworCisKKworCisKKworCisgICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzOyB0aGVuCisgICAgICAgZ2xfY3ZfbmV4dF9zeXNfdHlwZXNfaD0nPCdzeXMvdHlwZXMuaCc+JworICAgICBlbHNlCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxzeXMvdHlwZXMuaD4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8c3lzL3R5cGVzLmg+Li4uICIgPiY2OyB9CitpZiAke2dsX2N2X25leHRfc3lzX3R5cGVzX2grOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK19BQ0VPRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgIGFpeCopIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIC1DIiA7OworICAgICAgICAgICAgICAgICAqKSAgICBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCIgOzsKKyAgICAgICAgICAgICAgIGVzYWMKKworICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgIG1pbmd3KikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kaXJzZXBfcmVnZXg9J1svXFxdJworICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgZ2xfZGlyc2VwX3JlZ2V4PSdcLycKKyAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfbWFrZV9saXRlcmFsX3JlZ2V4X3NlZD0ncyxbXSReXFwuKi9bXSxcXCYsZycKKworICAgICAgICAgICAgICAgZ2xfaGVhZGVyX2xpdGVyYWxfcmVnZXg9YGVjaG8gJ3N5cy90eXBlcy5oJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgIiRnbF9tYWtlX2xpdGVyYWxfcmVnZXhfc2VkImAKKyAgICAgICAgICAgICAgIGdsX2Fic29sdXRlX2hlYWRlcl9zZWQ9Ii8ke2dsX2RpcnNlcF9yZWdleH0ke2dsX2hlYWRlcl9saXRlcmFsX3JlZ2V4fS8iJ3sKKyAgICAgICAgICAgICAgICAgICBzLy4qIlwoLionIiR7Z2xfZGlyc2VwX3JlZ2V4fSR7Z2xfaGVhZGVyX2xpdGVyYWxfcmVnZXh9IidcKSIuKi9cMS8KKyAgICAgICAgICAgICAgICAgICBzfF4vW14vXXwvLyZ8CisgICAgICAgICAgICAgICAgICAgcAorICAgICAgICAgICAgICAgICAgIHEKKyAgICAgICAgICAgICAgICAgfScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X25leHRfc3lzX3R5cGVzX2g9JyInYChldmFsICIkZ2xfYWJzbmFtZV9jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAgICAgICAgICAgICAgICAgICAgIHNlZCAtbiAiJGdsX2Fic29sdXRlX2hlYWRlcl9zZWQiYCciJworCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X25leHRfc3lzX3R5cGVzX2giID4mNQorJGFzX2VjaG8gIiRnbF9jdl9uZXh0X3N5c190eXBlc19oIiA+JjY7IH0KKyAgICAgZmkKKyAgICAgTkVYVF9TWVNfVFlQRVNfSD0kZ2xfY3ZfbmV4dF9zeXNfdHlwZXNfaAorCisgICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzIHx8IHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0gYnVnZ3k7IHRoZW4KKyAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGVfbmV4dCcKKyAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0nPCdzeXMvdHlwZXMuaCc+JworICAgICBlbHNlCisgICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNsdWRlJworICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSRnbF9jdl9uZXh0X3N5c190eXBlc19oCisgICAgIGZpCisgICAgIE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19UWVBFU19IPSRnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllczsgdGhlbgorICAgICAgIGdsX2N2X25leHRfc3lzX3dhaXRfaD0nPCdzeXMvd2FpdC5oJz4nCisgICAgIGVsc2UKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHN5cy93YWl0Lmg+IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHN5cy93YWl0Lmg+Li4uICIgPiY2OyB9CitpZiAke2dsX2N2X25leHRfc3lzX3dhaXRfaCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgICAgICAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3dhaXRfaCA9IHllczsgdGhlbgorCisKKyAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorCitfQUNFT0YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICBhaXgqKSBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCAtQyIgOzsKKyAgICAgICAgICAgICAgICAgKikgICAgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAiIDs7CisgICAgICAgICAgICAgICBlc2FjCisKKyAgICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICBtaW5ndyopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZGlyc2VwX3JlZ2V4PSdbL1xcXScKKyAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgIGdsX2RpcnNlcF9yZWdleD0nXC8nCisgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX21ha2VfbGl0ZXJhbF9yZWdleF9zZWQ9J3MsW10kXlxcLiovW10sXFwmLGcnCisKKyAgICAgICAgICAgICAgIGdsX2hlYWRlcl9saXRlcmFsX3JlZ2V4PWBlY2hvICdzeXMvd2FpdC5oJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgIiRnbF9tYWtlX2xpdGVyYWxfcmVnZXhfc2VkImAKKyAgICAgICAgICAgICAgIGdsX2Fic29sdXRlX2hlYWRlcl9zZWQ9Ii8ke2dsX2RpcnNlcF9yZWdleH0ke2dsX2hlYWRlcl9saXRlcmFsX3JlZ2V4fS8iJ3sKKyAgICAgICAgICAgICAgICAgICBzLy4qIlwoLionIiR7Z2xfZGlyc2VwX3JlZ2V4fSR7Z2xfaGVhZGVyX2xpdGVyYWxfcmVnZXh9IidcKSIuKi9cMS8KKyAgICAgICAgICAgICAgICAgICBzfF4vW14vXXwvLyZ8CisgICAgICAgICAgICAgICAgICAgcAorICAgICAgICAgICAgICAgICAgIHEKKyAgICAgICAgICAgICAgICAgfScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X25leHRfc3lzX3dhaXRfaD0nIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICAgICAgICAgICAgICAgICAgICAgc2VkIC1uICIkZ2xfYWJzb2x1dGVfaGVhZGVyX3NlZCJgJyInCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgZ2xfY3ZfbmV4dF9zeXNfd2FpdF9oPSc8J3N5cy93YWl0LmgnPicKKyAgICAgICAgICAgICBmaQorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X25leHRfc3lzX3dhaXRfaCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X25leHRfc3lzX3dhaXRfaCIgPiY2OyB9CisgICAgIGZpCisgICAgIE5FWFRfU1lTX1dBSVRfSD0kZ2xfY3ZfbmV4dF9zeXNfd2FpdF9oCisKKyAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXMgfHwgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSBidWdneTsgdGhlbgorICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZV9uZXh0JworICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSc8J3N5cy93YWl0LmgnPicKKyAgICAgZWxzZQorICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZScKKyAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0kZ2xfY3ZfbmV4dF9zeXNfd2FpdF9oCisgICAgIGZpCisgICAgIE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19XQUlUX0g9JGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlCisKKworCisKKworCisKKworICAgIGZvciBnbF9mdW5jIGluIHdhaXRwaWQ7IGRvCisgICAgYXNfZ2xfU3ltYm9sPWAkYXNfZWNobyAiZ2xfY3ZfaGF2ZV9yYXdfZGVjbF8kZ2xfZnVuYyIgfCAkYXNfdHJfc2hgCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRnbF9mdW5jIGlzIGRlY2xhcmVkIHdpdGhvdXQgYSBtYWNybyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRnbF9mdW5jIGlzIGRlY2xhcmVkIHdpdGhvdXQgYSBtYWNyby4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskYXNfZ2xfU3ltYm9sKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy93YWl0Lmg+CitpbnQKK21haW4gKCkKK3sKKyN1bmRlZiAkZ2xfZnVuYworICAodm9pZCkgJGdsX2Z1bmM7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJGFzX2dsX1N5bWJvbD15ZXMiCitlbHNlCisgIGV2YWwgIiRhc19nbF9TeW1ib2w9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkYXNfZ2xfU3ltYm9sCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgICBpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2dsX1N5bWJvbCJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFX1JBV19ERUNMXyRnbF9mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCisgICAgICAgICAgICAgICAgICAgICBldmFsIGFjX2N2X2hhdmVfZGVjbF8kZ2xfZnVuYz15ZXMKK2ZpCisgICAgICBkb25lCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXM7IHRoZW4KKyAgICAgICBnbF9jdl9uZXh0X3VuaXN0ZF9oPSc8J3VuaXN0ZC5oJz4nCisgICAgIGVsc2UKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHVuaXN0ZC5oPiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDx1bmlzdGQuaD4uLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfbmV4dF91bmlzdGRfaCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgICAgICAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfdW5pc3RkX2ggPSB5ZXM7IHRoZW4KKworCisgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK19BQ0VPRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgIGFpeCopIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIC1DIiA7OworICAgICAgICAgICAgICAgICAqKSAgICBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCIgOzsKKyAgICAgICAgICAgICAgIGVzYWMKKworICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgIG1pbmd3KikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kaXJzZXBfcmVnZXg9J1svXFxdJworICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgZ2xfZGlyc2VwX3JlZ2V4PSdcLycKKyAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfbWFrZV9saXRlcmFsX3JlZ2V4X3NlZD0ncyxbXSReXFwuKi9bXSxcXCYsZycKKworICAgICAgICAgICAgICAgZ2xfaGVhZGVyX2xpdGVyYWxfcmVnZXg9YGVjaG8gJ3VuaXN0ZC5oJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgIiRnbF9tYWtlX2xpdGVyYWxfcmVnZXhfc2VkImAKKyAgICAgICAgICAgICAgIGdsX2Fic29sdXRlX2hlYWRlcl9zZWQ9Ii8ke2dsX2RpcnNlcF9yZWdleH0ke2dsX2hlYWRlcl9saXRlcmFsX3JlZ2V4fS8iJ3sKKyAgICAgICAgICAgICAgICAgICBzLy4qIlwoLionIiR7Z2xfZGlyc2VwX3JlZ2V4fSR7Z2xfaGVhZGVyX2xpdGVyYWxfcmVnZXh9IidcKSIuKi9cMS8KKyAgICAgICAgICAgICAgICAgICBzfF4vW14vXXwvLyZ8CisgICAgICAgICAgICAgICAgICAgcAorICAgICAgICAgICAgICAgICAgIHEKKyAgICAgICAgICAgICAgICAgfScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X25leHRfdW5pc3RkX2g9JyInYChldmFsICIkZ2xfYWJzbmFtZV9jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAgICAgICAgICAgICAgICAgICAgIHNlZCAtbiAiJGdsX2Fic29sdXRlX2hlYWRlcl9zZWQiYCciJworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIGdsX2N2X25leHRfdW5pc3RkX2g9JzwndW5pc3RkLmgnPicKKyAgICAgICAgICAgICBmaQorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X25leHRfdW5pc3RkX2giID4mNQorJGFzX2VjaG8gIiRnbF9jdl9uZXh0X3VuaXN0ZF9oIiA+JjY7IH0KKyAgICAgZmkKKyAgICAgTkVYVF9VTklTVERfSD0kZ2xfY3ZfbmV4dF91bmlzdGRfaAorCisgICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzIHx8IHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0gYnVnZ3k7IHRoZW4KKyAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGVfbmV4dCcKKyAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0nPCd1bmlzdGQuaCc+JworICAgICBlbHNlCisgICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNsdWRlJworICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSRnbF9jdl9uZXh0X3VuaXN0ZF9oCisgICAgIGZpCisgICAgIE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1VOSVNURF9IPSRnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZQorCisKKworCisgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl91bmlzdGRfaCA9IHllczsgdGhlbgorICAgIEhBVkVfVU5JU1REX0g9MQorICBlbHNlCisgICAgSEFWRV9VTklTVERfSD0wCisgIGZpCisKKworCisKKworCisKKyAgICBmb3IgZ2xfZnVuYyBpbiBjaGRpciBjaG93biBkdXAgZHVwMiBkdXAzIGVudmlyb24gZXVpZGFjY2VzcyBmYWNjZXNzYXQgZmNoZGlyIGZjaG93bmF0ICAgICBmZGF0YXN5bmMgZnN5bmMgZnRydW5jYXRlIGdldGN3ZCBnZXRkb21haW5uYW1lIGdldGR0YWJsZXNpemUgZ2V0Z3JvdXBzICAgICBnZXRob3N0bmFtZSBnZXRsb2dpbiBnZXRsb2dpbl9yIGdldHBhZ2VzaXplICAgICBnZXR1c2Vyc2hlbGwgc2V0dXNlcnNoZWxsIGVuZHVzZXJzaGVsbCAgICAgZ3JvdXBfbWVtYmVyIGlzYXR0eSBsY2hvd24gbGluayBsaW5rYXQgbHNlZWsgcGlwZSBwaXBlMiBwcmVhZCBwd3JpdGUgICAgIHJlYWRsaW5rIHJlYWRsaW5rYXQgcm1kaXIgc2V0aG9zdG5hbWUgc2xlZXAgc3ltbGluayBzeW1saW5rYXQgdHR5bmFtZV9yICAgICB1bmxpbmsgdW5saW5rYXQgdXNsZWVwOyBkbworICAgIGFzX2dsX1N5bWJvbD1gJGFzX2VjaG8gImdsX2N2X2hhdmVfcmF3X2RlY2xfJGdsX2Z1bmMiIHwgJGFzX3RyX3NoYAorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNsYXJlZCB3aXRob3V0IGEgbWFjcm8iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNsYXJlZCB3aXRob3V0IGEgbWFjcm8uLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JGFzX2dsX1N5bWJvbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2lmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKy8qIFNvbWUgc3lzdGVtcyBkZWNsYXJlIHZhcmlvdXMgaXRlbXMgaW4gdGhlIHdyb25nIGhlYWRlcnMuICAqLworI2lmICEoZGVmaW5lZCBfX0dMSUJDX18gJiYgIWRlZmluZWQgX19VQ0xJQkNfXykKKyMgaW5jbHVkZSA8ZmNudGwuaD4KKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyMgaW5jbHVkZSA8c3RkbGliLmg+CisjIGlmIChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgISBkZWZpbmVkIF9fQ1lHV0lOX18KKyMgIGluY2x1ZGUgPGlvLmg+CisjIGVuZGlmCisjZW5kaWYKKworaW50CittYWluICgpCit7CisjdW5kZWYgJGdsX2Z1bmMKKyAgKHZvaWQpICRnbF9mdW5jOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiRhc19nbF9TeW1ib2w9eWVzIgorZWxzZQorICBldmFsICIkYXNfZ2xfU3ltYm9sPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJGFzX2dsX1N5bWJvbAorCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgICAgaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19nbF9TeW1ib2wiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV9SQVdfREVDTF8kZ2xfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworICAgICAgICAgICAgICAgICAgICAgZXZhbCBhY19jdl9oYXZlX2RlY2xfJGdsX2Z1bmM9eWVzCitmaQorICAgICAgZG9uZQorCisKKworCisKKworCisgICAgICBpZiAgeyB0ZXN0ICIkSEFWRV9MSUJVTklTVFJJTkciICE9IHllcyBcCisgICAgfHwgeworCisKKworICAgICAgICAgICAgdGVzdCAkTElCVU5JU1RSSU5HX1ZFUlNJT05fTUFKT1IgLWx0IDAgXAorICAgICAgICAgICAgfHwgeyB0ZXN0ICRMSUJVTklTVFJJTkdfVkVSU0lPTl9NQUpPUiAtZXEgMCBcCisgICAgICAgICAgICAgICAgICYmIHsgdGVzdCAkTElCVU5JU1RSSU5HX1ZFUlNJT05fTUlOT1IgLWx0IDkgXAorICAgICAgICAgICAgICAgICAgICAgIHx8IHsgdGVzdCAkTElCVU5JU1RSSU5HX1ZFUlNJT05fTUlOT1IgLWVxIDkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGVzdCAkTElCVU5JU1RSSU5HX1ZFUlNJT05fU1VCTUlOT1IgLWx0IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIH0KKworCisKKworICAgICAgIH0KKyAgfTsgdGhlbgorICAgIExJQlVOSVNUUklOR19VTklUWVBFU19IPSd1bml0eXBlcy5oJworICBlbHNlCisgICAgTElCVU5JU1RSSU5HX1VOSVRZUEVTX0g9CisgIGZpCisKKworCisKKyAgICAgIGlmICB7IHRlc3QgIiRIQVZFX0xJQlVOSVNUUklORyIgIT0geWVzIFwKKyAgICB8fCB7CisKKworCisgICAgICAgICAgICB0ZXN0ICRMSUJVTklTVFJJTkdfVkVSU0lPTl9NQUpPUiAtbHQgMCBcCisgICAgICAgICAgICB8fCB7IHRlc3QgJExJQlVOSVNUUklOR19WRVJTSU9OX01BSk9SIC1lcSAwIFwKKyAgICAgICAgICAgICAgICAgJiYgeyB0ZXN0ICRMSUJVTklTVFJJTkdfVkVSU0lPTl9NSU5PUiAtbHQgOSBcCisgICAgICAgICAgICAgICAgICAgICAgfHwgeyB0ZXN0ICRMSUJVTklTVFJJTkdfVkVSU0lPTl9NSU5PUiAtZXEgOSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB0ZXN0ICRMSUJVTklTVFJJTkdfVkVSU0lPTl9TVUJNSU5PUiAtbHQgMAorICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgfQorCisKKworCisgICAgICAgfQorICB9OyB0aGVuCisgICAgTElCVU5JU1RSSU5HX1VOSVdJRFRIX0g9J3VuaXdpZHRoLmgnCisgIGVsc2UKKyAgICBMSUJVTklTVFJJTkdfVU5JV0lEVEhfSD0KKyAgZmkKKworCisKKworICAgICAgIGlmICB7IHRlc3QgIiRIQVZFX0xJQlVOSVNUUklORyIgIT0geWVzIFwKKyAgICB8fCB7CisKKworCisgICAgICAgICAgICB0ZXN0ICRMSUJVTklTVFJJTkdfVkVSU0lPTl9NQUpPUiAtbHQgMCBcCisgICAgICAgICAgICB8fCB7IHRlc3QgJExJQlVOSVNUUklOR19WRVJTSU9OX01BSk9SIC1lcSAwIFwKKyAgICAgICAgICAgICAgICAgJiYgeyB0ZXN0ICRMSUJVTklTVFJJTkdfVkVSU0lPTl9NSU5PUiAtbHQgOSBcCisgICAgICAgICAgICAgICAgICAgICAgfHwgeyB0ZXN0ICRMSUJVTklTVFJJTkdfVkVSU0lPTl9NSU5PUiAtZXEgOSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB0ZXN0ICRMSUJVTklTVFJJTkdfVkVSU0lPTl9TVUJNSU5PUiAtbHQgNAorICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgfQorCisKKworCisgICAgICAgfQorICB9OyB0aGVuCisgIExJQlVOSVNUUklOR19DT01QSUxFX1VOSVdJRFRIX1dJRFRIX1RSVUU9CisgIExJQlVOSVNUUklOR19DT01QSUxFX1VOSVdJRFRIX1dJRFRIX0ZBTFNFPScjJworZWxzZQorICBMSUJVTklTVFJJTkdfQ09NUElMRV9VTklXSURUSF9XSURUSF9UUlVFPScjJworICBMSUJVTklTVFJJTkdfQ09NUElMRV9VTklXSURUSF9XSURUSF9GQUxTRT0KK2ZpCisKKworCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9VTkxPQ0tFRF9JTyAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3Vuc2V0ZW52ID0gbm87IHRoZW4KKyAgICBIQVZFX0RFQ0xfVU5TRVRFTlY9MAorICBmaQorICBmb3IgYWNfZnVuYyBpbiB1bnNldGVudgorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJ1bnNldGVudiIgImFjX2N2X2Z1bmNfdW5zZXRlbnYiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfdW5zZXRlbnYiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9VTlNFVEVOViAxCitfQUNFT0YKKworZmkKK2RvbmUKKworICBpZiB0ZXN0ICRhY19jdl9mdW5jX3Vuc2V0ZW52ID0gbm87IHRoZW4KKyAgICBIQVZFX1VOU0VURU5WPTAKKyAgZWxzZQorICAgIEhBVkVfVU5TRVRFTlY9MQorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB1bnNldGVudigpIHJldHVybiB0eXBlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB1bnNldGVudigpIHJldHVybiB0eXBlLi4uICIgPiY2OyB9CitpZiAke2d0X2N2X2Z1bmNfdW5zZXRlbnZfcmV0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjdW5kZWYgX0JTRAorI2RlZmluZSBfQlNEIDEgLyogdW5oaWRlIHVuc2V0ZW52IGRlY2xhcmF0aW9uIGluIE9TRi8xIDUuMSA8c3RkbGliLmg+ICovCisjaW5jbHVkZSA8c3RkbGliLmg+CitleHRlcm4KKyNpZmRlZiBfX2NwbHVzcGx1cworIkMiCisjZW5kaWYKK2ludCB1bnNldGVudiAoY29uc3QgY2hhciAqbmFtZSk7CisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ3RfY3ZfZnVuY191bnNldGVudl9yZXQ9J2ludCcKK2Vsc2UKKyAgZ3RfY3ZfZnVuY191bnNldGVudl9yZXQ9J3ZvaWQnCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRndF9jdl9mdW5jX3Vuc2V0ZW52X3JldCIgPiY1CiskYXNfZWNobyAiJGd0X2N2X2Z1bmNfdW5zZXRlbnZfcmV0IiA+JjY7IH0KKyAgICBpZiB0ZXN0ICRndF9jdl9mdW5jX3Vuc2V0ZW52X3JldCA9ICd2b2lkJzsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBWT0lEX1VOU0VURU5WIDEiID4+Y29uZmRlZnMuaAorCisgICAgICBSRVBMQUNFX1VOU0VURU5WPTEKKyAgICBmaQorCisgICAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHVuc2V0ZW52IG9iZXlzIFBPU0lYIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdW5zZXRlbnYgb2JleXMgUE9TSVguLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY191bnNldGVudl93b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIGdsaWJjIHN5c3RlbXMuCisgICAgICAgICAqLWdudSopIGdsX2N2X2Z1bmNfdW5zZXRlbnZfd29ya3M9Imd1ZXNzaW5nIHllcyIgOzsKKyAgICAgICAgICAgICAgICAgIyBJZiB3ZSBkb24ndCBrbm93LCBhc3N1bWUgdGhlIHdvcnN0LgorICAgICAgICAgKikgICAgICBnbF9jdl9mdW5jX3Vuc2V0ZW52X3dvcmtzPSJndWVzc2luZyBubyIgOzsKKyAgICAgICBlc2FjCisKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAgICAgICNpbmNsdWRlIDxlcnJuby5oPgorICAgICAgIGV4dGVybiBjaGFyICoqZW52aXJvbjsKKworaW50CittYWluICgpCit7CisKKyAgICAgICBjaGFyIGVudHJ5MVtdID0gImE9MSI7CisgICAgICAgY2hhciBlbnRyeTJbXSA9ICJiPTIiOworICAgICAgIGNoYXIgKmVudltdID0geyBlbnRyeTEsIGVudHJ5MiwgTlVMTCB9OworICAgICAgIGlmIChwdXRlbnYgKChjaGFyICopICJhPTEiKSkgcmV0dXJuIDE7CisgICAgICAgaWYgKHB1dGVudiAoZW50cnkyKSkgcmV0dXJuIDI7CisgICAgICAgZW50cnkyWzBdID0gJ2EnOworICAgICAgIHVuc2V0ZW52ICgiYSIpOworICAgICAgIGlmIChnZXRlbnYgKCJhIikpIHJldHVybiAzOworICAgICAgIGlmICghdW5zZXRlbnYgKCIiKSB8fCBlcnJubyAhPSBFSU5WQUwpIHJldHVybiA0OworICAgICAgIGVudHJ5MlswXSA9ICdiJzsKKyAgICAgICBlbnZpcm9uID0gZW52OworICAgICAgIGlmICghZ2V0ZW52ICgiYSIpKSByZXR1cm4gNTsKKyAgICAgICBlbnRyeTJbMF0gPSAnYSc7CisgICAgICAgdW5zZXRlbnYgKCJhIik7CisgICAgICAgaWYgKGdldGVudiAoImEiKSkgcmV0dXJuIDY7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfdW5zZXRlbnZfd29ya3M9eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfdW5zZXRlbnZfd29ya3M9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3Vuc2V0ZW52X3dvcmtzIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY191bnNldGVudl93b3JrcyIgPiY2OyB9CisgICAgY2FzZSAiJGdsX2N2X2Z1bmNfdW5zZXRlbnZfd29ya3MiIGluCisgICAgICAqeWVzKSA7OworICAgICAgKikKKyAgICAgICAgUkVQTEFDRV9VTlNFVEVOVj0xCisgICAgICAgIDs7CisgICAgZXNhYworICBmaQorCisgIGlmIHRlc3QgJEhBVkVfVU5TRVRFTlYgPSAwIHx8IHRlc3QgJFJFUExBQ0VfVU5TRVRFTlYgPSAxOyB0aGVuCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyB1bnNldGVudi4kYWNfb2JqZXh0IgorCisKKworCisKKyAgZmkKKworCisKKworCisgICAgICAgICAgR05VTElCX1VOU0VURU5WPTEKKworCisKKworCiskYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9VTlNFVEVOViAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfdmFzbnByaW50ZiA9IG5vOyB0aGVuCisKKworCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgdmFzbnByaW50Zi4kYWNfb2JqZXh0IgorCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBwcmludGYtYXJncy4kYWNfb2JqZXh0IgorCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBwcmludGYtcGFyc2UuJGFjX29iamV4dCIKKworCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgYXNucHJpbnRmLiRhY19vYmpleHQiCisKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY192YXNucHJpbnRmID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFJFUExBQ0VfVkFTTlBSSU5URiAxIiA+PmNvbmZkZWZzLmgKKworICBmaQorCisKKworCisKKworCisKKworCisKKyAgYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAicHRyZGlmZl90IiAiYWNfY3ZfdHlwZV9wdHJkaWZmX3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9wdHJkaWZmX3QiID0geHllczsgdGhlbiA6CisKK2Vsc2UKKworJGFzX2VjaG8gIiNkZWZpbmUgcHRyZGlmZl90IGxvbmciID4+Y29uZmRlZnMuaAorCisKK2ZpCisKKworCisKKworCisKKyAgZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworICBnbF9jdl9mdW5jX3ZmcHJpbnRmX3Bvc2l4PW5vCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9zaXplc19jOTkiIGluCisgICAgKnllcykKKyAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9sb25nX2RvdWJsZSIgaW4KKyAgICAgICAgKnllcykKKyAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGUiIGluCisgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGVfbG9uZ19kb3VibGUiIGluCisgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfYSIgaW4KKyAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2YiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX24iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbHMiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX3Bvc2l0aW9ucyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2dyb3VwaW5nIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19sZWZ0YWRqdXN0IiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX3plcm8iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfcHJlY2lzaW9uIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdmZwcmludGYgZXhpc3RzIGFuZCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWxyZWFkeSBQT1NJWCBjb21wbGlhbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY192ZnByaW50Zl9wb3NpeD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgZXNhYworICBpZiB0ZXN0ICRnbF9jdl9mdW5jX3ZmcHJpbnRmX3Bvc2l4ID0gbm87IHRoZW4KKworCisKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlIiBpbgorICAgICp5ZXMpCisgICAgICA7OworICAgICopCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0lORklOSVRFX0RPVUJMRSAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgOzsKKyAgZXNhYworCisKKworCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9sb25nX2RvdWJsZSIgaW4KKyAgICAqeWVzKQorICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlX2xvbmdfZG91YmxlIiBpbgorICAgICAgICAqeWVzKQorICAgICAgICAgIDs7CisgICAgICAgICopCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0lORklOSVRFX0xPTkdfRE9VQkxFIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgIGVzYWMKKworCisKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9hIiBpbgorICAgICp5ZXMpCisgICAgICA7OworICAgICopCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0RJUkVDVElWRV9BIDEiID4+Y29uZmRlZnMuaAorCisgICAgICBmb3IgYWNfZnVuYyBpbiBubF9sYW5naW5mbworZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJubF9sYW5naW5mbyIgImFjX2N2X2Z1bmNfbmxfbGFuZ2luZm8iCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfbmxfbGFuZ2luZm8iID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9OTF9MQU5HSU5GTyAxCitfQUNFT0YKKworZmkKK2RvbmUKKworICAgICAgOzsKKyAgZXNhYworCisKKworICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2YiIGluCisgICAgKnllcykKKyAgICAgIDs7CisgICAgKikKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfRElSRUNUSVZFX0YgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9scyIgaW4KKyAgICAqeWVzKQorICAgICAgOzsKKyAgICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9ESVJFQ1RJVkVfTFMgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfZ3JvdXBpbmciIGluCisgICAgKnllcykKKyAgICAgIDs7CisgICAgKikKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfRkxBR19HUk9VUElORyAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgOzsKKyAgZXNhYworCisKKworICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19sZWZ0YWRqdXN0IiBpbgorICAgICp5ZXMpCisgICAgICA7OworICAgICopCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0ZMQUdfTEVGVEFESlVTVCAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgOzsKKyAgZXNhYworCisKKworICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZmxhZ196ZXJvIiBpbgorICAgICp5ZXMpCisgICAgICA7OworICAgICopCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0ZMQUdfWkVSTyAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgOzsKKyAgZXNhYworCisKKworICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfcHJlY2lzaW9uIiBpbgorICAgICp5ZXMpCisgICAgICA7OworICAgICopCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX1VOQk9VTkRFRF9QUkVDSVNJT04gMSIgPj5jb25mZGVmcy5oCisKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfRE9VQkxFIDEiID4+Y29uZmRlZnMuaAorCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0xPTkdfRE9VQkxFIDEiID4+Y29uZmRlZnMuaAorCisgICAgICA7OworICBlc2FjCisKKworCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9lbm9tZW0iIGluCisgICAgKnllcykKKyAgICAgIDs7CisgICAgKikKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfRU5PTUVNIDEiID4+Y29uZmRlZnMuaAorCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0RPVUJMRSAxIiA+PmNvbmZkZWZzLmgKKworCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9MT05HX0RPVUJMRSAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgOzsKKyAgZXNhYworCisKKworCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgdmFzbnByaW50Zi4kYWNfb2JqZXh0IgorCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBwcmludGYtYXJncy4kYWNfb2JqZXh0IgorCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBwcmludGYtcGFyc2UuJGFjX29iamV4dCIKKworCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgYXNucHJpbnRmLiRhY19vYmpleHQiCisKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY192YXNucHJpbnRmID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFJFUExBQ0VfVkFTTlBSSU5URiAxIiA+PmNvbmZkZWZzLmgKKworICBmaQorCisKKworCisKKworCisKKworCisKKyAgYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAicHRyZGlmZl90IiAiYWNfY3ZfdHlwZV9wdHJkaWZmX3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9wdHJkaWZmX3QiID0geHllczsgdGhlbiA6CisKK2Vsc2UKKworJGFzX2VjaG8gIiNkZWZpbmUgcHRyZGlmZl90IGxvbmciID4+Y29uZmRlZnMuaAorCisKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyB2ZnByaW50Zi4kYWNfb2JqZXh0IgorCisgIFJFUExBQ0VfVkZQUklOVEY9MQorCiskYXNfZWNobyAiI2RlZmluZSBSRVBMQUNFX1ZGUFJJTlRGX1BPU0lYIDEiID4+Y29uZmRlZnMuaAorCisgIDoKKworICBmaQorCisKKworCisKKworICAgICAgICAgIEdOVUxJQl9WRlBSSU5URl9QT1NJWD0xCisKKworCisKKworJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfVkZQUklOVEZfUE9TSVggMSIgPj5jb25mZGVmcy5oCisKKworCisKKworICBnbF9jdl9mdW5jX3ZzbnByaW50Zl91c2FibGU9bm8KKyAgZm9yIGFjX2Z1bmMgaW4gdnNucHJpbnRmCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInZzbnByaW50ZiIgImFjX2N2X2Z1bmNfdnNucHJpbnRmIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3ZzbnByaW50ZiIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1ZTTlBSSU5URiAxCitfQUNFT0YKKworZmkKK2RvbmUKKworICBpZiB0ZXN0ICRhY19jdl9mdW5jX3ZzbnByaW50ZiA9IHllczsgdGhlbgorCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc25wcmludGYgcmVzcGVjdHMgYSBzaXplIG9mIDEiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBzbnByaW50ZiByZXNwZWN0cyBhIHNpemUgb2YgMS4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX3NucHJpbnRmX3NpemUxKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBnbF9jdl9mdW5jX3NucHJpbnRmX3NpemUxPSJndWVzc2luZyB5ZXMiCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgSEFWRV9TTlBSSU5URgorIyBkZWZpbmUgbXlfc25wcmludGYgc25wcmludGYKKyNlbHNlCisjIGluY2x1ZGUgPHN0ZGFyZy5oPgorc3RhdGljIGludCBteV9zbnByaW50ZiAoY2hhciAqYnVmLCBpbnQgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaW50IHJldDsKKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisgIHJldCA9IHZzbnByaW50ZiAoYnVmLCBzaXplLCBmb3JtYXQsIGFyZ3MpOworICB2YV9lbmQgKGFyZ3MpOworICByZXR1cm4gcmV0OworfQorI2VuZGlmCitpbnQgbWFpbigpCit7CisgIHN0YXRpYyBjaGFyIGJ1Zls4XSA9IHsgJ0QnLCAnRScsICdBJywgJ0QnLCAnQicsICdFJywgJ0UnLCAnRicgfTsKKyAgbXlfc25wcmludGYgKGJ1ZiwgMSwgIiVkIiwgMTIzNDUpOworICByZXR1cm4gYnVmWzFdICE9ICdFJzsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2Z1bmNfc25wcmludGZfc2l6ZTE9eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfc25wcmludGZfc2l6ZTE9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfc25wcmludGZfc2l6ZTEiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9mdW5jX3NucHJpbnRmX3NpemUxIiA+JjY7IH0KKworICAgIGNhc2UgIiRnbF9jdl9mdW5jX3NucHJpbnRmX3NpemUxIiBpbgorICAgICAgKnllcykKKworICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19zbnByaW50Zl9yZXR2YWxfYzk5IiBpbgorICAgICAgICAgICp5ZXMpCisKKworICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgcHJpbnRmIHN1cHBvcnRzIFBPU0lYL1hTSSBmb3JtYXQgc3RyaW5ncyB3aXRoIHBvc2l0aW9ucyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHByaW50ZiBzdXBwb3J0cyBQT1NJWC9YU0kgZm9ybWF0IHN0cmluZ3Mgd2l0aCBwb3NpdGlvbnMuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19wcmludGZfcG9zaXRpb25zKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorCisgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgbmV0YnNkWzEtM10qIHwgbmV0YnNkZWxmWzEtM10qIHwgbmV0YnNkYW91dFsxLTNdKiB8IG5ldGJzZGNvZmZbMS0zXSopCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfcG9zaXRpb25zPSJndWVzc2luZyBubyI7OworICAgICAgICAgICBiZW9zKikgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX3Bvc2l0aW9ucz0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgbWluZ3cqIHwgcHcqKSBnbF9jdl9mdW5jX3ByaW50Zl9wb3NpdGlvbnM9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICopICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfcG9zaXRpb25zPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgIGVzYWMKKworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorLyogVGhlIHN0cmluZyAiJTIkZCAlMSRkIiwgd2l0aCBkb2xsYXIgY2hhcmFjdGVycyBwcm90ZWN0ZWQgZnJvbSB0aGUgc2hlbGwncworICAgZG9sbGFyIGV4cGFuc2lvbiAocG9zc2libHkgYW4gYXV0b2NvbmYgYnVnKS4gICovCitzdGF0aWMgY2hhciBmb3JtYXRbXSA9IHsgJyUnLCAnMicsICckJywgJ2QnLCAnICcsICclJywgJzEnLCAnJCcsICdkJywgJ1wwJyB9Oworc3RhdGljIGNoYXIgYnVmWzEwMF07CitpbnQgbWFpbiAoKQoreworICBzcHJpbnRmIChidWYsIGZvcm1hdCwgMzMsIDU1KTsKKyAgcmV0dXJuIChzdHJjbXAgKGJ1ZiwgIjU1IDMzIikgIT0gMCk7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX3ByaW50Zl9wb3NpdGlvbnM9eWVzCitlbHNlCisgIGdsX2N2X2Z1bmNfcHJpbnRmX3Bvc2l0aW9ucz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19wcmludGZfcG9zaXRpb25zIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19wcmludGZfcG9zaXRpb25zIiA+JjY7IH0KKworICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX3Bvc2l0aW9ucyIgaW4KKyAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ZzbnByaW50Zl91c2FibGU9eWVzCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfdnNucHJpbnRmX3VzYWJsZSA9IG5vOyB0aGVuCisKKworCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgdnNucHJpbnRmLiRhY19vYmpleHQiCisKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY192c25wcmludGYgPSB5ZXM7IHRoZW4KKyAgICBSRVBMQUNFX1ZTTlBSSU5URj0xCisgIGZpCisgIDoKKworICBmaQorCisgIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF92c25wcmludGYgPSBubzsgdGhlbgorICAgIEhBVkVfREVDTF9WU05QUklOVEY9MAorICBmaQorCisKKworCisKKworICAgICAgICAgIEdOVUxJQl9WU05QUklOVEY9MQorCisKKworCisKKyRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX1ZTTlBSSU5URiAxIiA+PmNvbmZkZWZzLmgKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgZ2xfY3ZfZnVuY192c25wcmludGZfcG9zaXg9bm8KKyAgZm9yIGFjX2Z1bmMgaW4gdnNucHJpbnRmCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInZzbnByaW50ZiIgImFjX2N2X2Z1bmNfdnNucHJpbnRmIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3ZzbnByaW50ZiIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1ZTTlBSSU5URiAxCitfQUNFT0YKKworZmkKK2RvbmUKKworICBpZiB0ZXN0ICRhY19jdl9mdW5jX3ZzbnByaW50ZiA9IHllczsgdGhlbgorCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc25wcmludGYgdHJ1bmNhdGVzIHRoZSByZXN1bHQgYXMgaW4gQzk5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgc25wcmludGYgdHJ1bmNhdGVzIHRoZSByZXN1bHQgYXMgaW4gQzk5Li4uICIgPiY2OyB9CitpZiAke2dsX2N2X2Z1bmNfc25wcmludGZfdHJ1bmNhdGlvbl9jOTkrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisKKyAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gZ2xpYmMgc3lzdGVtcy4KKyAgICAgICAgICAgKi1nbnUqKSAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfdHJ1bmNhdGlvbl9jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gRnJlZUJTRCA+PSA1LgorICAgICAgICAgICBmcmVlYnNkWzEtNF0qKSAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgZnJlZWJzZCogfCBrZnJlZWJzZCopIGdsX2N2X2Z1bmNfc25wcmludGZfdHJ1bmNhdGlvbl9jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gTWFjIE9TIFggPj0gMTAuMy4KKyAgICAgICAgICAgZGFyd2luWzEtNl0uKikgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfdHJ1bmNhdGlvbl9jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIGRhcndpbiopICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3RydW5jYXRpb25fYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIE9wZW5CU0QgPj0gMy45LgorICAgICAgICAgICBvcGVuYnNkWzEtMl0uKiB8IG9wZW5ic2QzLlswLThdIHwgb3BlbmJzZDMuWzAtOF0uKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfdHJ1bmNhdGlvbl9jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIG9wZW5ic2QqKSAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3RydW5jYXRpb25fYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIFNvbGFyaXMgPj0gMi42LgorICAgICAgICAgICBzb2xhcmlzMi5bMC01XSB8IHNvbGFyaXMyLlswLTVdLiopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3RydW5jYXRpb25fYzk5PSJndWVzc2luZyBubyI7OworICAgICAgICAgICBzb2xhcmlzKikgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBBSVggPj0gNC4KKyAgICAgICAgICAgYWl4WzEtM10qKSAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfdHJ1bmNhdGlvbl9jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIGFpeCopICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3RydW5jYXRpb25fYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIEhQLVVYID49IDExLgorICAgICAgICAgICBocHV4WzctOV0qIHwgaHB1eDEwKikgZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgaHB1eCopICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfdHJ1bmNhdGlvbl9jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gSVJJWCA+PSA2LjUuCisgICAgICAgICAgIGlyaXg2LjUpICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3RydW5jYXRpb25fYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIE9TRi8xID49IDUuCisgICAgICAgICAgIG9zZlszLTRdKikgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3RydW5jYXRpb25fYzk5PSJndWVzc2luZyBubyI7OworICAgICAgICAgICBvc2YqKSAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBOZXRCU0QgPj0gMy4KKyAgICAgICAgICAgbmV0YnNkWzEtMl0qIHwgbmV0YnNkZWxmWzEtMl0qIHwgbmV0YnNkYW91dFsxLTJdKiB8IG5ldGJzZGNvZmZbMS0yXSopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3RydW5jYXRpb25fYzk5PSJndWVzc2luZyBubyI7OworICAgICAgICAgICBuZXRic2QqKSAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBCZU9TLgorICAgICAgICAgICBiZW9zKikgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIHdlIGRvbid0IGtub3csIGFzc3VtZSB0aGUgd29yc3QuCisgICAgICAgICAgICopICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3RydW5jYXRpb25fYzk5PSJndWVzc2luZyBubyI7OworICAgICAgICAgZXNhYworCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9TTlBSSU5URgorIyBkZWZpbmUgbXlfc25wcmludGYgc25wcmludGYKKyNlbHNlCisjIGluY2x1ZGUgPHN0ZGFyZy5oPgorc3RhdGljIGludCBteV9zbnByaW50ZiAoY2hhciAqYnVmLCBpbnQgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaW50IHJldDsKKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisgIHJldCA9IHZzbnByaW50ZiAoYnVmLCBzaXplLCBmb3JtYXQsIGFyZ3MpOworICB2YV9lbmQgKGFyZ3MpOworICByZXR1cm4gcmV0OworfQorI2VuZGlmCitzdGF0aWMgY2hhciBidWZbMTAwXTsKK2ludCBtYWluICgpCit7CisgIHN0cmNweSAoYnVmLCAiQUJDREVGIik7CisgIG15X3NucHJpbnRmIChidWYsIDMsICIlZCAlZCIsIDQ1NjcsIDg5KTsKKyAgaWYgKG1lbWNtcCAoYnVmLCAiNDVcMERFRiIsIDYpICE9IDApCisgICAgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OT15ZXMKK2Vsc2UKKyAgZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OT1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OSIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfc25wcmludGZfdHJ1bmNhdGlvbl9jOTkiID4mNjsgfQorCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHNucHJpbnRmIGZ1bGx5IHN1cHBvcnRzIHRoZSAnbicgZGlyZWN0aXZlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgc25wcmludGYgZnVsbHkgc3VwcG9ydHMgdGhlICduJyBkaXJlY3RpdmUuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKworICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBnbGliYyBzeXN0ZW1zLgorICAgICAgICAgICAqLWdudSopICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbj0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBGcmVlQlNEID49IDUuCisgICAgICAgICAgIGZyZWVic2RbMS00XSopICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX2RpcmVjdGl2ZV9uPSJndWVzc2luZyBubyI7OworICAgICAgICAgICBmcmVlYnNkKiB8IGtmcmVlYnNkKikgZ2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbj0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBNYWMgT1MgWCA+PSAxMC4zLgorICAgICAgICAgICBkYXJ3aW5bMS02XS4qKSAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbj0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgZGFyd2luKikgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfZGlyZWN0aXZlX249Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gU29sYXJpcyA+PSAyLjYuCisgICAgICAgICAgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfZGlyZWN0aXZlX249Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIHNvbGFyaXMqKSAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX2RpcmVjdGl2ZV9uPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIEFJWCA+PSA0LgorICAgICAgICAgICBhaXhbMS0zXSopICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbj0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgYWl4KikgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfZGlyZWN0aXZlX249Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gSVJJWCA+PSA2LjUuCisgICAgICAgICAgIGlyaXg2LjUpICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX2RpcmVjdGl2ZV9uPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIE9TRi8xID49IDUuCisgICAgICAgICAgIG9zZlszLTRdKikgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX2RpcmVjdGl2ZV9uPSJndWVzc2luZyBubyI7OworICAgICAgICAgICBvc2YqKSAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbj0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBOZXRCU0QgPj0gMy4KKyAgICAgICAgICAgbmV0YnNkWzEtMl0qIHwgbmV0YnNkZWxmWzEtMl0qIHwgbmV0YnNkYW91dFsxLTJdKiB8IG5ldGJzZGNvZmZbMS0yXSopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX2RpcmVjdGl2ZV9uPSJndWVzc2luZyBubyI7OworICAgICAgICAgICBuZXRic2QqKSAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbj0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBCZU9TLgorICAgICAgICAgICBiZW9zKikgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbj0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIHdlIGRvbid0IGtub3csIGFzc3VtZSB0aGUgd29yc3QuCisgICAgICAgICAgICopICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX2RpcmVjdGl2ZV9uPSJndWVzc2luZyBubyI7OworICAgICAgICAgZXNhYworCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9TTlBSSU5URgorIyBkZWZpbmUgbXlfc25wcmludGYgc25wcmludGYKKyNlbHNlCisjIGluY2x1ZGUgPHN0ZGFyZy5oPgorc3RhdGljIGludCBteV9zbnByaW50ZiAoY2hhciAqYnVmLCBpbnQgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaW50IHJldDsKKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisgIHJldCA9IHZzbnByaW50ZiAoYnVmLCBzaXplLCBmb3JtYXQsIGFyZ3MpOworICB2YV9lbmQgKGFyZ3MpOworICByZXR1cm4gcmV0OworfQorI2VuZGlmCitzdGF0aWMgY2hhciBmbXRzdHJpbmdbMTBdOworc3RhdGljIGNoYXIgYnVmWzEwMF07CitpbnQgbWFpbiAoKQoreworICBpbnQgY291bnQgPSAtMTsKKyAgLyogQ29weSB0aGUgZm9ybWF0IHN0cmluZy4gIFNvbWUgc3lzdGVtcyAoZ2xpYmMgd2l0aCBfRk9SVElGWV9TT1VSQ0U9MikKKyAgICAgc3VwcG9ydCAlbiBpbiBmb3JtYXQgc3RyaW5ncyBpbiByZWFkLW9ubHkgbWVtb3J5IGJ1dCBub3QgaW4gd3JpdGFibGUKKyAgICAgbWVtb3J5LiAgKi8KKyAgc3RyY3B5IChmbXRzdHJpbmcsICIlZCAlbiIpOworICBteV9zbnByaW50ZiAoYnVmLCA0LCBmbXRzdHJpbmcsIDEyMzQ1LCAmY291bnQsIDMzLCA0NCwgNTUpOworICBpZiAoY291bnQgIT0gNikKKyAgICByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX3NucHJpbnRmX2RpcmVjdGl2ZV9uPXllcworZWxzZQorICBnbF9jdl9mdW5jX3NucHJpbnRmX2RpcmVjdGl2ZV9uPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3NucHJpbnRmX2RpcmVjdGl2ZV9uIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbiIgPiY2OyB9CisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHNucHJpbnRmIHJlc3BlY3RzIGEgc2l6ZSBvZiAxIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgc25wcmludGYgcmVzcGVjdHMgYSBzaXplIG9mIDEuLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfZnVuY19zbnByaW50Zl9zaXplMSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY19zbnByaW50Zl9zaXplMT0iZ3Vlc3NpbmcgeWVzIgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIEhBVkVfU05QUklOVEYKKyMgZGVmaW5lIG15X3NucHJpbnRmIHNucHJpbnRmCisjZWxzZQorIyBpbmNsdWRlIDxzdGRhcmcuaD4KK3N0YXRpYyBpbnQgbXlfc25wcmludGYgKGNoYXIgKmJ1ZiwgaW50IHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ3M7CisgIGludCByZXQ7CisgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworICByZXQgPSB2c25wcmludGYgKGJ1Ziwgc2l6ZSwgZm9ybWF0LCBhcmdzKTsKKyAgdmFfZW5kIChhcmdzKTsKKyAgcmV0dXJuIHJldDsKK30KKyNlbmRpZgoraW50IG1haW4oKQoreworICBzdGF0aWMgY2hhciBidWZbOF0gPSB7ICdEJywgJ0UnLCAnQScsICdEJywgJ0InLCAnRScsICdFJywgJ0YnIH07CisgIG15X3NucHJpbnRmIChidWYsIDEsICIlZCIsIDEyMzQ1KTsKKyAgcmV0dXJuIGJ1ZlsxXSAhPSAnRSc7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX3NucHJpbnRmX3NpemUxPXllcworZWxzZQorICBnbF9jdl9mdW5jX3NucHJpbnRmX3NpemUxPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3NucHJpbnRmX3NpemUxIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19zbnByaW50Zl9zaXplMSIgPiY2OyB9CisKKworCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB2c25wcmludGYgcmVzcGVjdHMgYSB6ZXJvIHNpemUgYXMgaW4gQzk5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdnNucHJpbnRmIHJlc3BlY3RzIGEgemVybyBzaXplIGFzIGluIEM5OS4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX3ZzbnByaW50Zl96ZXJvc2l6ZV9jOTkrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisKKyAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gZ2xpYmMgc3lzdGVtcy4KKyAgICAgICAgICAgKi1nbnUqKSAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBGcmVlQlNEID49IDUuCisgICAgICAgICAgIGZyZWVic2RbMS00XSopICAgICAgICBnbF9jdl9mdW5jX3ZzbnByaW50Zl96ZXJvc2l6ZV9jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIGZyZWVic2QqIHwga2ZyZWVic2QqKSBnbF9jdl9mdW5jX3ZzbnByaW50Zl96ZXJvc2l6ZV9jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gTWFjIE9TIFggPj0gMTAuMy4KKyAgICAgICAgICAgZGFyd2luWzEtNl0uKikgICAgICAgIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgZGFyd2luKikgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBDeWd3aW4uCisgICAgICAgICAgIGN5Z3dpbiopICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ZzbnByaW50Zl96ZXJvc2l6ZV9jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gU29sYXJpcyA+PSAyLjYuCisgICAgICAgICAgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgc29sYXJpcyopICAgICAgICAgICAgIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBBSVggPj0gNC4KKyAgICAgICAgICAgYWl4WzEtM10qKSAgICAgICAgICAgIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgYWl4KikgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBJUklYID49IDYuNS4KKyAgICAgICAgICAgaXJpeDYuNSkgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBOZXRCU0QgPj0gMy4KKyAgICAgICAgICAgbmV0YnNkWzEtMl0qIHwgbmV0YnNkZWxmWzEtMl0qIHwgbmV0YnNkYW91dFsxLTJdKiB8IG5ldGJzZGNvZmZbMS0yXSopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ZzbnByaW50Zl96ZXJvc2l6ZV9jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIG5ldGJzZCopICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ZzbnByaW50Zl96ZXJvc2l6ZV9jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gQmVPUy4KKyAgICAgICAgICAgYmVvcyopICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBtaW5ndy4KKyAgICAgICAgICAgbWluZ3cqIHwgcHcqKSAgICAgICAgIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIHdlIGRvbid0IGtub3csIGFzc3VtZSB0aGUgd29yc3QuCisgICAgICAgICAgICopICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ZzbnByaW50Zl96ZXJvc2l6ZV9jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICBlc2FjCisKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KK3N0YXRpYyBpbnQgbXlfc25wcmludGYgKGNoYXIgKmJ1ZiwgaW50IHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ3M7CisgIGludCByZXQ7CisgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworICByZXQgPSB2c25wcmludGYgKGJ1Ziwgc2l6ZSwgZm9ybWF0LCBhcmdzKTsKKyAgdmFfZW5kIChhcmdzKTsKKyAgcmV0dXJuIHJldDsKK30KK2ludCBtYWluKCkKK3sKKyAgc3RhdGljIGNoYXIgYnVmWzhdID0geyAnRCcsICdFJywgJ0EnLCAnRCcsICdCJywgJ0UnLCAnRScsICdGJyB9OworICBteV9zbnByaW50ZiAoYnVmLCAwLCAiJWQiLCAxMjM0NSk7CisgIHJldHVybiBidWZbMF0gIT0gJ0QnOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY192c25wcmludGZfemVyb3NpemVfYzk5PXllcworZWxzZQorICBnbF9jdl9mdW5jX3ZzbnByaW50Zl96ZXJvc2l6ZV9jOTk9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OSIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OSIgPiY2OyB9CisKKyAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfc2l6ZXNfYzk5IiBpbgorICAgICAgKnllcykKKyAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2xvbmdfZG91YmxlIiBpbgorICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGUiIGluCisgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlX2xvbmdfZG91YmxlIiBpbgorICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9hIiBpbgorICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2YiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9uIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9scyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX3Bvc2l0aW9ucyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19ncm91cGluZyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2xlZnRhZGp1c3QiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX3plcm8iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX3ByZWNpc2lvbiIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9lbm9tZW0iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3NucHJpbnRmX3RydW5jYXRpb25fYzk5IiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3NucHJpbnRmX3JldHZhbF9jOTkiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbiIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfc25wcmludGZfc2l6ZTEiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OSIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdnNucHJpbnRmIGV4aXN0cyBhbmQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbHJlYWR5IFBPU0lYIGNvbXBsaWFudC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY192c25wcmludGZfcG9zaXg9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisgICAgZXNhYworICBmaQorICBpZiB0ZXN0ICRnbF9jdl9mdW5jX3ZzbnByaW50Zl9wb3NpeCA9IG5vOyB0aGVuCisKKworCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZSIgaW4KKyAgICAqeWVzKQorICAgICAgOzsKKyAgICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9JTkZJTklURV9ET1VCTEUgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKKworICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfbG9uZ19kb3VibGUiIGluCisgICAgKnllcykKKyAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZV9sb25nX2RvdWJsZSIgaW4KKyAgICAgICAgKnllcykKKyAgICAgICAgICA7OworICAgICAgICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9JTkZJTklURV9MT05HX0RPVUJMRSAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICBlc2FjCisKKworCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfYSIgaW4KKyAgICAqeWVzKQorICAgICAgOzsKKyAgICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9ESVJFQ1RJVkVfQSAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgZm9yIGFjX2Z1bmMgaW4gbmxfbGFuZ2luZm8KK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAibmxfbGFuZ2luZm8iICJhY19jdl9mdW5jX25sX2xhbmdpbmZvIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX25sX2xhbmdpbmZvIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTkxfTEFOR0lORk8gMQorX0FDRU9GCisKK2ZpCitkb25lCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9mIiBpbgorICAgICp5ZXMpCisgICAgICA7OworICAgICopCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0RJUkVDVElWRV9GIDEiID4+Y29uZmRlZnMuaAorCisgICAgICA7OworICBlc2FjCisKKworCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbHMiIGluCisgICAgKnllcykKKyAgICAgIDs7CisgICAgKikKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfRElSRUNUSVZFX0xTIDEiID4+Y29uZmRlZnMuaAorCisgICAgICA7OworICBlc2FjCisKKworCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2dyb3VwaW5nIiBpbgorICAgICp5ZXMpCisgICAgICA7OworICAgICopCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0ZMQUdfR1JPVVBJTkcgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfbGVmdGFkanVzdCIgaW4KKyAgICAqeWVzKQorICAgICAgOzsKKyAgICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9GTEFHX0xFRlRBREpVU1QgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfemVybyIgaW4KKyAgICAqeWVzKQorICAgICAgOzsKKyAgICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9GTEFHX1pFUk8gMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX3ByZWNpc2lvbiIgaW4KKyAgICAqeWVzKQorICAgICAgOzsKKyAgICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9VTkJPVU5ERURfUFJFQ0lTSU9OIDEiID4+Y29uZmRlZnMuaAorCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0RPVUJMRSAxIiA+PmNvbmZkZWZzLmgKKworCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9MT05HX0RPVUJMRSAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgOzsKKyAgZXNhYworCisKKworICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtIiBpbgorICAgICp5ZXMpCisgICAgICA7OworICAgICopCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0VOT01FTSAxIiA+PmNvbmZkZWZzLmgKKworCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9ET1VCTEUgMSIgPj5jb25mZGVmcy5oCisKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfTE9OR19ET1VCTEUgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHZhc25wcmludGYuJGFjX29iamV4dCIKKworCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgcHJpbnRmLWFyZ3MuJGFjX29iamV4dCIKKworCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgcHJpbnRmLXBhcnNlLiRhY19vYmpleHQiCisKKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGFzbnByaW50Zi4kYWNfb2JqZXh0IgorCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfdmFzbnByaW50ZiA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBSRVBMQUNFX1ZBU05QUklOVEYgMSIgPj5jb25mZGVmcy5oCisKKyAgZmkKKworCisKKworCisKKworCisKKworCisgIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInB0cmRpZmZfdCIgImFjX2N2X3R5cGVfcHRyZGlmZl90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfcHRyZGlmZl90IiA9IHh5ZXM7IHRoZW4gOgorCitlbHNlCisKKyRhc19lY2hvICIjZGVmaW5lIHB0cmRpZmZfdCBsb25nIiA+PmNvbmZkZWZzLmgKKworCitmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgdnNucHJpbnRmLiRhY19vYmpleHQiCisKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY192c25wcmludGYgPSB5ZXM7IHRoZW4KKyAgICBSRVBMQUNFX1ZTTlBSSU5URj0xCisgIGZpCisgIDoKKworICBmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisgIGdsX2N2X2Z1bmNfdnNwcmludGZfcG9zaXg9bm8KKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX3NpemVzX2M5OSIgaW4KKyAgICAqeWVzKQorICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2xvbmdfZG91YmxlIiBpbgorICAgICAgICAqeWVzKQorICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZSIgaW4KKyAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZV9sb25nX2RvdWJsZSIgaW4KKyAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9hIiBpbgorICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfZiIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbiIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9scyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfcG9zaXRpb25zIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfZ3JvdXBpbmciIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2xlZnRhZGp1c3QiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfemVybyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9wcmVjaXNpb24iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9lbm9tZW0iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB2c3ByaW50ZiBleGlzdHMgYW5kIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbHJlYWR5IFBPU0lYIGNvbXBsaWFudC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ZzcHJpbnRmX3Bvc2l4PXllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICBlc2FjCisgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfdnNwcmludGZfcG9zaXggPSBubzsgdGhlbgorCisKKworICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGUiIGluCisgICAgKnllcykKKyAgICAgIDs7CisgICAgKikKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfSU5GSU5JVEVfRE9VQkxFIDEiID4+Y29uZmRlZnMuaAorCisgICAgICA7OworICBlc2FjCisKKworCisKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2xvbmdfZG91YmxlIiBpbgorICAgICp5ZXMpCisgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGVfbG9uZ19kb3VibGUiIGluCisgICAgICAgICp5ZXMpCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfSU5GSU5JVEVfTE9OR19ET1VCTEUgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgZXNhYworCisKKworICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2EiIGluCisgICAgKnllcykKKyAgICAgIDs7CisgICAgKikKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfRElSRUNUSVZFX0EgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIGZvciBhY19mdW5jIGluIG5sX2xhbmdpbmZvCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIm5sX2xhbmdpbmZvIiAiYWNfY3ZfZnVuY19ubF9sYW5naW5mbyIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19ubF9sYW5naW5mbyIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX05MX0xBTkdJTkZPIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisgICAgICA7OworICBlc2FjCisKKworCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfZiIgaW4KKyAgICAqeWVzKQorICAgICAgOzsKKyAgICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9ESVJFQ1RJVkVfRiAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgOzsKKyAgZXNhYworCisKKworICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2xzIiBpbgorICAgICp5ZXMpCisgICAgICA7OworICAgICopCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0RJUkVDVElWRV9MUyAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgOzsKKyAgZXNhYworCisKKworICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19ncm91cGluZyIgaW4KKyAgICAqeWVzKQorICAgICAgOzsKKyAgICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9GTEFHX0dST1VQSU5HIDEiID4+Y29uZmRlZnMuaAorCisgICAgICA7OworICBlc2FjCisKKworCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2xlZnRhZGp1c3QiIGluCisgICAgKnllcykKKyAgICAgIDs7CisgICAgKikKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfRkxBR19MRUZUQURKVVNUIDEiID4+Y29uZmRlZnMuaAorCisgICAgICA7OworICBlc2FjCisKKworCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX3plcm8iIGluCisgICAgKnllcykKKyAgICAgIDs7CisgICAgKikKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfRkxBR19aRVJPIDEiID4+Y29uZmRlZnMuaAorCisgICAgICA7OworICBlc2FjCisKKworCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9wcmVjaXNpb24iIGluCisgICAgKnllcykKKyAgICAgIDs7CisgICAgKikKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfVU5CT1VOREVEX1BSRUNJU0lPTiAxIiA+PmNvbmZkZWZzLmgKKworCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9ET1VCTEUgMSIgPj5jb25mZGVmcy5oCisKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfTE9OR19ET1VCTEUgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2Vub21lbSIgaW4KKyAgICAqeWVzKQorICAgICAgOzsKKyAgICAqKQorCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9FTk9NRU0gMSIgPj5jb25mZGVmcy5oCisKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfRE9VQkxFIDEiID4+Y29uZmRlZnMuaAorCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0xPTkdfRE9VQkxFIDEiID4+Y29uZmRlZnMuaAorCisgICAgICA7OworICBlc2FjCisKKworCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyB2YXNucHJpbnRmLiRhY19vYmpleHQiCisKKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHByaW50Zi1hcmdzLiRhY19vYmpleHQiCisKKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHByaW50Zi1wYXJzZS4kYWNfb2JqZXh0IgorCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBhc25wcmludGYuJGFjX29iamV4dCIKKworICBpZiB0ZXN0ICRhY19jdl9mdW5jX3Zhc25wcmludGYgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgUkVQTEFDRV9WQVNOUFJJTlRGIDEiID4+Y29uZmRlZnMuaAorCisgIGZpCisKKworCisKKworCisKKworCisKKworICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJwdHJkaWZmX3QiICJhY19jdl90eXBlX3B0cmRpZmZfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX3B0cmRpZmZfdCIgPSB4eWVzOyB0aGVuIDoKKworZWxzZQorCiskYXNfZWNobyAiI2RlZmluZSBwdHJkaWZmX3QgbG9uZyIgPj5jb25mZGVmcy5oCisKKworZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHZzcHJpbnRmLiRhY19vYmpleHQiCisKKyAgUkVQTEFDRV9WU1BSSU5URj0xCisgIDoKKworICBmaQorCisKKworCisKKworICAgICAgICAgIEdOVUxJQl9WU1BSSU5URl9QT1NJWD0xCisKKworCisKKworJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfVlNQUklOVEZfUE9TSVggMSIgPj5jb25mZGVmcy5oCisKKworCisKKworICBmb3IgYWNfZnVuYyBpbiB3YWl0aWQKK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAid2FpdGlkIiAiYWNfY3ZfZnVuY193YWl0aWQiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfd2FpdGlkIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfV0FJVElEIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisKKworCisgIEhBVkVfV0FJVFBJRD0xCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBtaW5ndyopIEhBVkVfV0FJVFBJRD0wIDs7CisgIGVzYWMKKworICBpZiB0ZXN0ICRIQVZFX1dBSVRQSUQgPSAwOyB0aGVuCisKKworCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyB3YWl0cGlkLiRhY19vYmpleHQiCisKKyAgZmkKKworCisKKworCisgICAgICAgICAgR05VTElCX1dBSVRQSUQ9MQorCisKKworCisKKyRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX1dBSVRQSUQgMSIgPj5jb25mZGVmcy5oCisKKworCisKKworCisKKworCisKKworCisKKworCisgICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzOyB0aGVuCisgICAgICAgZ2xfY3ZfbmV4dF93Y2hhcl9oPSc8J3djaGFyLmgnPicKKyAgICAgZWxzZQorICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8d2NoYXIuaD4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8d2NoYXIuaD4uLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfbmV4dF93Y2hhcl9oKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgICAgICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl93Y2hhcl9oID0geWVzOyB0aGVuCisKKworICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHdjaGFyLmg+CisKK19BQ0VPRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgIGFpeCopIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIC1DIiA7OworICAgICAgICAgICAgICAgICAqKSAgICBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCIgOzsKKyAgICAgICAgICAgICAgIGVzYWMKKworICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgIG1pbmd3KikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kaXJzZXBfcmVnZXg9J1svXFxdJworICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgZ2xfZGlyc2VwX3JlZ2V4PSdcLycKKyAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfbWFrZV9saXRlcmFsX3JlZ2V4X3NlZD0ncyxbXSReXFwuKi9bXSxcXCYsZycKKworICAgICAgICAgICAgICAgZ2xfaGVhZGVyX2xpdGVyYWxfcmVnZXg9YGVjaG8gJ3djaGFyLmgnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAiJGdsX21ha2VfbGl0ZXJhbF9yZWdleF9zZWQiYAorICAgICAgICAgICAgICAgZ2xfYWJzb2x1dGVfaGVhZGVyX3NlZD0iLyR7Z2xfZGlyc2VwX3JlZ2V4fSR7Z2xfaGVhZGVyX2xpdGVyYWxfcmVnZXh9LyIneworICAgICAgICAgICAgICAgICAgIHMvLioiXCguKiciJHtnbF9kaXJzZXBfcmVnZXh9JHtnbF9oZWFkZXJfbGl0ZXJhbF9yZWdleH0iJ1wpIi4qL1wxLworICAgICAgICAgICAgICAgICAgIHN8Xi9bXi9dfC8vJnwKKyAgICAgICAgICAgICAgICAgICBwCisgICAgICAgICAgICAgICAgICAgcQorICAgICAgICAgICAgICAgICB9JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfbmV4dF93Y2hhcl9oPSciJ2AoZXZhbCAiJGdsX2Fic25hbWVfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgICAgICAgICAgICAgICAgICAgICBzZWQgLW4gIiRnbF9hYnNvbHV0ZV9oZWFkZXJfc2VkImAnIicKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICBnbF9jdl9uZXh0X3djaGFyX2g9Jzwnd2NoYXIuaCc+JworICAgICAgICAgICAgIGZpCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfbmV4dF93Y2hhcl9oIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfbmV4dF93Y2hhcl9oIiA+JjY7IH0KKyAgICAgZmkKKyAgICAgTkVYVF9XQ0hBUl9IPSRnbF9jdl9uZXh0X3djaGFyX2gKKworICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllcyB8fCB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IGJ1Z2d5OyB0aGVuCisgICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNsdWRlX25leHQnCisgICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9Jzwnd2NoYXIuaCc+JworICAgICBlbHNlCisgICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNsdWRlJworICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSRnbF9jdl9uZXh0X3djaGFyX2gKKyAgICAgZmkKKyAgICAgTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfV0NIQVJfSD0kZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmUKKworCisKKworICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfd2NoYXJfaCA9IHllczsgdGhlbgorICAgIEhBVkVfV0NIQVJfSD0xCisgIGVsc2UKKyAgICBIQVZFX1dDSEFSX0g9MAorICBmaQorCisKKworCisKKyAgaWYgdGVzdCAkZ3RfY3ZfY193aW50X3QgPSB5ZXM7IHRoZW4KKyAgICBIQVZFX1dJTlRfVD0xCisgIGVsc2UKKyAgICBIQVZFX1dJTlRfVD0wCisgIGZpCisKKworCisgICAgZm9yIGdsX2Z1bmMgaW4gYnRvd2Mgd2N0b2IgbWJzaW5pdCBtYnJ0b3djIG1icmxlbiBtYnNydG93Y3MgbWJzbnJ0b3djcyB3Y3J0b21iICAgICAgd2NzcnRvbWJzIHdjc25ydG9tYnMgd2N3aWR0aCB3bWVtY2hyIHdtZW1jbXAgd21lbWNweSB3bWVtbW92ZSB3bWVtc2V0ICAgICAgd2NzbGVuIHdjc25sZW4gd2NzY3B5IHdjcGNweSB3Y3NuY3B5IHdjcG5jcHkgd2NzY2F0IHdjc25jYXQgd2NzY21wICAgICAgd2NzbmNtcCB3Y3NjYXNlY21wIHdjc25jYXNlY21wIHdjc2NvbGwgd2NzeGZybSB3Y3NkdXAgd2NzY2hyIHdjc3JjaHIgICAgICB3Y3Njc3BuIHdjc3NwbiB3Y3NwYnJrIHdjc3N0ciB3Y3N0b2sgd2Nzd2lkdGggICAgIDsgZG8KKyAgICBhc19nbF9TeW1ib2w9YCRhc19lY2hvICJnbF9jdl9oYXZlX3Jhd19kZWNsXyRnbF9mdW5jIiB8ICRhc190cl9zaGAKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyRhc19nbF9TeW1ib2wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUKKyAgIDx3Y2hhci5oPi4KKyAgIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZQorICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovCisjaWYgIShkZWZpbmVkIF9fR0xJQkNfXyAmJiAhZGVmaW5lZCBfX1VDTElCQ19fKQorIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyMgaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisjaW5jbHVkZSA8d2NoYXIuaD4KKworaW50CittYWluICgpCit7CisjdW5kZWYgJGdsX2Z1bmMKKyAgKHZvaWQpICRnbF9mdW5jOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiRhc19nbF9TeW1ib2w9eWVzIgorZWxzZQorICBldmFsICIkYXNfZ2xfU3ltYm9sPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJGFzX2dsX1N5bWJvbAorCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgICAgaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19nbF9TeW1ib2wiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV9SQVdfREVDTF8kZ2xfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworICAgICAgICAgICAgICAgICAgICAgZXZhbCBhY19jdl9oYXZlX2RlY2xfJGdsX2Z1bmM9eWVzCitmaQorICAgICAgZG9uZQorCisKKworCisKKworCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfaXN3Y250cmwgPSB5ZXM7IHRoZW4KKyAgICBIQVZFX0lTV0NOVFJMPTEKKyAgZWxzZQorICAgIEhBVkVfSVNXQ05UUkw9MAorICBmaQorCisKKworICBpZiB0ZXN0ICRndF9jdl9jX3dpbnRfdCA9IHllczsgdGhlbgorICAgIEhBVkVfV0lOVF9UPTEKKyAgZWxzZQorICAgIEhBVkVfV0lOVF9UPTAKKyAgZmkKKworCisKKworCisKKworCisKKworCisgICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzOyB0aGVuCisgICAgICAgZ2xfY3ZfbmV4dF93Y3R5cGVfaD0nPCd3Y3R5cGUuaCc+JworICAgICBlbHNlCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDx3Y3R5cGUuaD4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8d2N0eXBlLmg+Li4uICIgPiY2OyB9CitpZiAke2dsX2N2X25leHRfd2N0eXBlX2grOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICAgICAgICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3djdHlwZV9oID0geWVzOyB0aGVuCisKKworICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHdjdHlwZS5oPgorCitfQUNFT0YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICBhaXgqKSBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCAtQyIgOzsKKyAgICAgICAgICAgICAgICAgKikgICAgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAiIDs7CisgICAgICAgICAgICAgICBlc2FjCisKKyAgICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICBtaW5ndyopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZGlyc2VwX3JlZ2V4PSdbL1xcXScKKyAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgIGdsX2RpcnNlcF9yZWdleD0nXC8nCisgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX21ha2VfbGl0ZXJhbF9yZWdleF9zZWQ9J3MsW10kXlxcLiovW10sXFwmLGcnCisKKyAgICAgICAgICAgICAgIGdsX2hlYWRlcl9saXRlcmFsX3JlZ2V4PWBlY2hvICd3Y3R5cGUuaCcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICIkZ2xfbWFrZV9saXRlcmFsX3JlZ2V4X3NlZCJgCisgICAgICAgICAgICAgICBnbF9hYnNvbHV0ZV9oZWFkZXJfc2VkPSIvJHtnbF9kaXJzZXBfcmVnZXh9JHtnbF9oZWFkZXJfbGl0ZXJhbF9yZWdleH0vIid7CisgICAgICAgICAgICAgICAgICAgcy8uKiJcKC4qJyIke2dsX2RpcnNlcF9yZWdleH0ke2dsX2hlYWRlcl9saXRlcmFsX3JlZ2V4fSInXCkiLiovXDEvCisgICAgICAgICAgICAgICAgICAgc3xeL1teL118Ly8mfAorICAgICAgICAgICAgICAgICAgIHAKKyAgICAgICAgICAgICAgICAgICBxCisgICAgICAgICAgICAgICAgIH0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9uZXh0X3djdHlwZV9oPSciJ2AoZXZhbCAiJGdsX2Fic25hbWVfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgICAgICAgICAgICAgICAgICAgICBzZWQgLW4gIiRnbF9hYnNvbHV0ZV9oZWFkZXJfc2VkImAnIicKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICBnbF9jdl9uZXh0X3djdHlwZV9oPSc8J3djdHlwZS5oJz4nCisgICAgICAgICAgICAgZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9uZXh0X3djdHlwZV9oIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfbmV4dF93Y3R5cGVfaCIgPiY2OyB9CisgICAgIGZpCisgICAgIE5FWFRfV0NUWVBFX0g9JGdsX2N2X25leHRfd2N0eXBlX2gKKworICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllcyB8fCB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IGJ1Z2d5OyB0aGVuCisgICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNsdWRlX25leHQnCisgICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9Jzwnd2N0eXBlLmgnPicKKyAgICAgZWxzZQorICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZScKKyAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0kZ2xfY3ZfbmV4dF93Y3R5cGVfaAorICAgICBmaQorICAgICBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9XQ1RZUEVfSD0kZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmUKKworCisKKworICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfd2N0eXBlX2ggPSB5ZXM7IHRoZW4KKyAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2lzd2NudHJsID0geWVzOyB0aGVuCisgICAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgaXN3Y250cmwgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBpc3djbnRybCB3b3Jrcy4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX2lzd2NudHJsX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAgICAgICAgICAgICAgICAgICAgICAgICAjaWYgX19HTlVfTElCUkFSWV9fID09IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTGludXggbGliYzUgaTE4biBpcyBicm9rZW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgoraW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX2lzd2NudHJsX3dvcmtzPSJndWVzc2luZyB5ZXMiCitlbHNlCisgIGdsX2N2X2Z1bmNfaXN3Y250cmxfd29ya3M9Imd1ZXNzaW5nIG5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgICAgICAgICAgLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlCisgICAgICAgICAgICAgICAgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LgorICAgICAgICAgICAgICAgICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPgorICAgICAgICAgICAgICAgICAgbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyAgICAgICAgICAgICAgICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgICAgICAgICAgICAgICNpbmNsdWRlIDxzdGRpby5oPgorICAgICAgICAgICAgICAgI2luY2x1ZGUgPHRpbWUuaD4KKyAgICAgICAgICAgICAgICNpbmNsdWRlIDx3Y2hhci5oPgorICAgICAgICAgICAgICAgI2luY2x1ZGUgPHdjdHlwZS5oPgorICAgICAgICAgICAgICAgaW50IG1haW4gKCkgeyByZXR1cm4gaXN3cHJpbnQgKCd4JykgPT0gMDsgfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9mdW5jX2lzd2NudHJsX3dvcmtzPXllcworZWxzZQorICBnbF9jdl9mdW5jX2lzd2NudHJsX3dvcmtzPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2lzd2NudHJsX3dvcmtzIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfZnVuY19pc3djbnRybF93b3JrcyIgPiY2OyB9CisgICAgZmkKKyAgICBIQVZFX1dDVFlQRV9IPTEKKyAgZWxzZQorICAgIEhBVkVfV0NUWVBFX0g9MAorICBmaQorCisKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfaXN3Y250cmxfd29ya3MiIGluCisgICAgKnllcykgUkVQTEFDRV9JU1dDTlRSTD0wIDs7CisgICAgKikgICAgUkVQTEFDRV9JU1dDTlRSTD0xIDs7CisgIGVzYWMKKworCisgIGlmIHRlc3QgJEhBVkVfSVNXQ05UUkwgPSAwIHx8IHRlc3QgJFJFUExBQ0VfSVNXQ05UUkwgPSAxOyB0aGVuCisgICAgICAgIDoKKyAgZmkKKworICBpZiB0ZXN0ICRSRVBMQUNFX0lTV0NOVFJMID0gMTsgdGhlbgorICAgIFJFUExBQ0VfVE9XTE9XRVI9MQorICBlbHNlCisgICAgZm9yIGFjX2Z1bmMgaW4gdG93bG93ZXIKK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAidG93bG93ZXIiICJhY19jdl9mdW5jX3Rvd2xvd2VyIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3Rvd2xvd2VyIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfVE9XTE9XRVIgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKyAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX3Rvd2xvd2VyID0geWVzOyB0aGVuCisgICAgICBSRVBMQUNFX1RPV0xPV0VSPTAKKyAgICBlbHNlCisgICAgICBhY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJ0b3dsb3dlciIgImFjX2N2X2hhdmVfZGVjbF90b3dsb3dlciIgIi8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZQorICAgICAgICAgICAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uCisgICAgICAgICAgICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPgorICAgICAgICAgICAgIG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovCisgICAgICAgICAgI2luY2x1ZGUgPHN0ZGRlZi5oPgorICAgICAgICAgICNpbmNsdWRlIDxzdGRpby5oPgorICAgICAgICAgICNpbmNsdWRlIDx0aW1lLmg+CisgICAgICAgICAgI2luY2x1ZGUgPHdjaGFyLmg+CisgICAgICAgICAgI2lmIEhBVkVfV0NUWVBFX0gKKyAgICAgICAgICAjIGluY2x1ZGUgPHdjdHlwZS5oPgorICAgICAgICAgICNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF90b3dsb3dlciIgPSB4eWVzOyB0aGVuIDoKKyAgYWNfaGF2ZV9kZWNsPTEKK2Vsc2UKKyAgYWNfaGF2ZV9kZWNsPTAKK2ZpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ERUNMX1RPV0xPV0VSICRhY19oYXZlX2RlY2wKK19BQ0VPRgorCisgICAgICBpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfdG93bG93ZXIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVQTEFDRV9UT1dMT1dFUj0xCisgICAgICBlbHNlCisgICAgICAgIFJFUExBQ0VfVE9XTE9XRVI9MAorICAgICAgZmkKKyAgICBmaQorICBmaQorCisKKyAgaWYgdGVzdCAkSEFWRV9JU1dDTlRSTCA9IDAgfHwgdGVzdCAkUkVQTEFDRV9UT1dMT1dFUiA9IDE7IHRoZW4KKyAgICAgICAgOgorICBmaQorCisgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd2N0eXBlX3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdjdHlwZV90Li4uICIgPiY2OyB9CitpZiAke2dsX2N2X3R5cGVfd2N0eXBlX3QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisvKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUKKyAgICAgICAgICAgICAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uCisgICAgICAgICAgICAgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+CisgICAgICAgICAgICAgICBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLworICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGRlZi5oPgorICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICAgICAgICAgICAjaW5jbHVkZSA8dGltZS5oPgorICAgICAgICAgICAgI2luY2x1ZGUgPHdjaGFyLmg+CisgICAgICAgICAgICAjaWYgSEFWRV9XQ1RZUEVfSAorICAgICAgICAgICAgIyBpbmNsdWRlIDx3Y3R5cGUuaD4KKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgd2N0eXBlX3QgYTsKKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl90eXBlX3djdHlwZV90PXllcworZWxzZQorICBnbF9jdl90eXBlX3djdHlwZV90PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X3R5cGVfd2N0eXBlX3QiID4mNQorJGFzX2VjaG8gIiRnbF9jdl90eXBlX3djdHlwZV90IiA+JjY7IH0KKyAgaWYgdGVzdCAkZ2xfY3ZfdHlwZV93Y3R5cGVfdCA9IG5vOyB0aGVuCisgICAgSEFWRV9XQ1RZUEVfVD0wCisgIGZpCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdjdHJhbnNfdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igd2N0cmFuc190Li4uICIgPiY2OyB9CitpZiAke2dsX2N2X3R5cGVfd2N0cmFuc190Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlCisgICAgICAgICAgICAgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LgorICAgICAgICAgICAgICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPgorICAgICAgICAgICAgICAgbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyAgICAgICAgICAgICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgICAgICAgICAgICNpbmNsdWRlIDxzdGRpby5oPgorICAgICAgICAgICAgI2luY2x1ZGUgPHRpbWUuaD4KKyAgICAgICAgICAgICNpbmNsdWRlIDx3Y2hhci5oPgorICAgICAgICAgICAgI2luY2x1ZGUgPHdjdHlwZS5oPgorICAgICAgICAgICAgd2N0cmFuc190IGE7CisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfdHlwZV93Y3RyYW5zX3Q9eWVzCitlbHNlCisgIGdsX2N2X3R5cGVfd2N0cmFuc190PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X3R5cGVfd2N0cmFuc190IiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfdHlwZV93Y3RyYW5zX3QiID4mNjsgfQorICBpZiB0ZXN0ICRnbF9jdl90eXBlX3djdHJhbnNfdCA9IG5vOyB0aGVuCisgICAgSEFWRV9XQ1RSQU5TX1Q9MAorICBmaQorCisKKyAgICBmb3IgZ2xfZnVuYyBpbiB3Y3R5cGUgaXN3Y3R5cGUgd2N0cmFucyB0b3djdHJhbnMgICAgIDsgZG8KKyAgICBhc19nbF9TeW1ib2w9YCRhc19lY2hvICJnbF9jdl9oYXZlX3Jhd19kZWNsXyRnbF9mdW5jIiB8ICRhc190cl9zaGAKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyRhc19nbF9TeW1ib2wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUKKyAgIDx3Y2hhci5oPi4KKyAgIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZQorICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovCisjaWYgIShkZWZpbmVkIF9fR0xJQkNfXyAmJiAhZGVmaW5lZCBfX1VDTElCQ19fKQorIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyMgaW5jbHVkZSA8dGltZS5oPgorIyBpbmNsdWRlIDx3Y2hhci5oPgorI2VuZGlmCisjaW5jbHVkZSA8d2N0eXBlLmg+CisKK2ludAorbWFpbiAoKQoreworI3VuZGVmICRnbF9mdW5jCisgICh2b2lkKSAkZ2xfZnVuYzsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkYXNfZ2xfU3ltYm9sPXllcyIKK2Vsc2UKKyAgZXZhbCAiJGFzX2dsX1N5bWJvbD1ubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCRhc19nbF9TeW1ib2wKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICAgIGlmIGV2YWwgdGVzdCBcInhcJCIkYXNfZ2xfU3ltYm9sIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfUkFXX0RFQ0xfJGdsX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKKyAgICAgICAgICAgICAgICAgICAgIGV2YWwgYWNfY3ZfaGF2ZV9kZWNsXyRnbF9mdW5jPXllcworZmkKKyAgICAgIGRvbmUKKworCisKKworCisKKworCisKKworCisKKworICBhY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJ3Y3dpZHRoIiAiYWNfY3ZfaGF2ZV9kZWNsX3djd2lkdGgiICIKKy8qIEFJWCAzLjIuNSBkZWNsYXJlcyB3Y3dpZHRoIGluIDxzdHJpbmcuaD4uICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisvKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlCisgICA8d2NoYXIuaD4uCisgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUgaW5jbHVkZWQKKyAgIGJlZm9yZSA8d2NoYXIuaD4uICAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX3djd2lkdGgiID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCitlbHNlCisgIGFjX2hhdmVfZGVjbD0wCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9XQ1dJRFRIICRhY19oYXZlX2RlY2wKK19BQ0VPRgorCisgIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF93Y3dpZHRoICE9IHllczsgdGhlbgorICAgIEhBVkVfREVDTF9XQ1dJRFRIPTAKKyAgZmkKKworICBpZiB0ZXN0ICRhY19jdl9mdW5jX3djd2lkdGggPSB5ZXM7IHRoZW4KKyAgICBIQVZFX1dDV0lEVEg9MQorICAgICAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2N3aWR0aCB3b3JrcyByZWFzb25hYmx5IGluIFVURi04IGxvY2FsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3Y3dpZHRoIHdvcmtzIHJlYXNvbmFibHkgaW4gVVRGLTggbG9jYWxlcy4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9mdW5jX3djd2lkdGhfd29ya3MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKworICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIGdsaWJjIGFuZCBBSVggNyBzeXN0ZW1zLgorICAgICAgICAgICAgICotZ251KiB8IGFpeFs3LTldKikgZ2xfY3ZfZnVuY193Y3dpZHRoX3dvcmtzPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAqKSAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfd2N3aWR0aF93b3Jrcz0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgZXNhYworCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPGxvY2FsZS5oPgorLyogQUlYIDMuMi41IGRlY2xhcmVzIHdjd2lkdGggaW4gPHN0cmluZy5oPi4gKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKy8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUKKyAgIDx3Y2hhci5oPi4KKyAgIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZSBpbmNsdWRlZAorICAgYmVmb3JlIDx3Y2hhci5oPi4gICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpZiAhSEFWRV9ERUNMX1dDV0lEVEgKK2V4dGVybgorIyBpZmRlZiBfX2NwbHVzcGx1cworIkMiCisjIGVuZGlmCitpbnQgd2N3aWR0aCAoaW50KTsKKyNlbmRpZgoraW50IG1haW4gKCkKK3sKKyAgaW50IHJlc3VsdCA9IDA7CisgIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgImZyX0ZSLlVURi04IikgIT0gTlVMTCkKKyAgICB7CisgICAgICBpZiAod2N3aWR0aCAoMHgwMzAxKSA+IDApCisgICAgICAgIHJlc3VsdCB8PSAxOworICAgICAgaWYgKHdjd2lkdGggKDB4MDVCMCkgPiAwKQorICAgICAgICByZXN1bHQgfD0gMjsKKyAgICAgIGlmICh3Y3dpZHRoICgweDIwMEIpID4gMCkKKyAgICAgICAgcmVzdWx0IHw9IDQ7CisgICAgfQorICByZXR1cm4gcmVzdWx0OworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfZnVuY193Y3dpZHRoX3dvcmtzPXllcworZWxzZQorICBnbF9jdl9mdW5jX3djd2lkdGhfd29ya3M9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfd2N3aWR0aF93b3JrcyIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2Z1bmNfd2N3aWR0aF93b3JrcyIgPiY2OyB9CisgICAgY2FzZSAiJGdsX2N2X2Z1bmNfd2N3aWR0aF93b3JrcyIgaW4KKyAgICAgICp5ZXMpIDs7CisgICAgICAqbm8pIFJFUExBQ0VfV0NXSURUSD0xIDs7CisgICAgZXNhYworICBlbHNlCisgICAgSEFWRV9XQ1dJRFRIPTAKKyAgZmkKKworICBpZiB0ZXN0ICRIQVZFX1dDV0lEVEggPSAwIHx8IHRlc3QgJFJFUExBQ0VfV0NXSURUSCA9IDE7IHRoZW4KKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHdjd2lkdGguJGFjX29iamV4dCIKKworICBmaQorCisKKworCisKKyAgICAgICAgICBHTlVMSUJfV0NXSURUSD0xCisKKworCisKKworJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfV0NXSURUSCAxIiA+PmNvbmZkZWZzLmgKKworCisKKyAgOgorCisKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgeG1lbWR1cDAuJGFjX29iamV4dCIKKworCisKKyAgZm9yIGFjX2hlYWRlciBpbiBzdGRpbnQuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3RkaW50LmgiICJhY19jdl9oZWFkZXJfc3RkaW50X2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N0ZGludF9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RESU5UX0ggMQogX0FDRU9GCiAKIGZpCkBAIC04MDQ5LDIxICszNDMxOSw5NCBAQAogZG9uZQogCiAKLWZvciBhY19oZWFkZXIgaW4gc3lzL3Jlc291cmNlLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorCisKKyAgOgorCisKKyAgIyBFbmQgb2YgY29kZSBmcm9tIG1vZHVsZXMKKworCisKKworCisKKworCisKKyAgZ2x0ZXN0c19saWJkZXBzPQorICBnbHRlc3RzX2x0bGliZGVwcz0KKworCisKKworCisKKworCisKKyAgZ2xfc291cmNlX2Jhc2U9J3Rlc3RzJworICBnbHRlc3RzX1dJVE5FU1M9SU5fYGVjaG8gIiR7UEFDS0FHRS0kUEFDS0FHRV9UQVJOQU1FfSIgfCBMQ19BTEw9QyB0ciBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiB8IExDX0FMTD1DIHNlZCAtZSAncy9bXkEtWjAtOV9dL18vZydgX0dOVUxJQl9URVNUUworCisgIGdsX21vZHVsZV9pbmRpY2F0b3JfY29uZGl0aW9uPSRnbHRlc3RzX1dJVE5FU1MKKworCisKKworCisKKworCisKKyAgTElCQklTT05fTElCREVQUz0iJGdsX2xpYmRlcHMiCisKKyAgTElCQklTT05fTFRMSUJERVBTPSIkZ2xfbHRsaWJkZXBzIgorCisKKworIyBDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zLgorCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBtYWxsb2MgZGVidWdnaW5nIGlzIHdhbnRlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBtYWxsb2MgZGVidWdnaW5nIGlzIHdhbnRlZC4uLiAiID4mNjsgfQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWRtYWxsb2Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2RtYWxsb2Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2RtYWxsb2M7IGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCiskYXNfZWNobyAiI2RlZmluZSBXSVRIX0RNQUxMT0MgMSIgPj5jb25mZGVmcy5oCisKKyAgTElCUz0iJExJQlMgLWxkbWFsbG9jIgorICBMREZMQUdTPSIkTERGTEFHUyAtZyIKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZm9yIGFjX2hlYWRlciBpbiBzeXMvdGltZS5oIHN5cy90aW1lcy5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKIF9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAorCitmaQorCitkb25lCisKKyBmb3IgYWNfaGVhZGVyIGluIHN5cy9yZXNvdXJjZS5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJzeXMvcmVzb3VyY2UuaCIgImFjX2N2X2hlYWRlcl9zeXNfcmVzb3VyY2VfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0CiAjaWYgSEFWRV9TWVNfVElNRV9ICiAjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjZW5kaWYKQEAgLTgwNzEsMTY0ICszNDQxNCwyOSBAQAogIyBpbmNsdWRlIDxzeXMvdGltZXMuaD4KICNlbmRpZgogCi0KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorIgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX3Jlc291cmNlX2giID0geHllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCisjZGVmaW5lIEhBVkVfU1lTX1JFU09VUkNFX0ggMQogX0FDRU9GCiAKIGZpCiAKIGRvbmUKIAotCiBmb3IgYWNfZnVuYyBpbiB0aW1lcwotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJ0aW1lcyIgImFjX2N2X2Z1bmNfdGltZXMiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfdGltZXMiID0geHllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorI2RlZmluZSBIQVZFX1RJTUVTIDEKIF9BQ0VPRgogCiBmaQogZG9uZQogCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGdldHJ1c2FnZSBpcyBkZWNsYXJlZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgZ2V0cnVzYWdlIGlzIGRlY2xhcmVkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9oYXZlX2RlY2xfZ2V0cnVzYWdlK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2FjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgImdldHJ1c2FnZSIgImFjX2N2X2hhdmVfZGVjbF9nZXRydXNhZ2UiICIkYWNfaW5jbHVkZXNfZGVmYXVsdAogI2lmIEhBVkVfU1lTX1RJTUVfSAogIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogI2VuZGlmCkBAIC04MjM5LDc2ICszNDQ0NywxNyBAQAogIyBpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KICNlbmRpZgogCi0KLWludAotbWFpbiAoKQotewotI2lmbmRlZiBnZXRydXNhZ2UKLSAgY2hhciAqcCA9IChjaGFyICopIGdldHJ1c2FnZTsKLSNlbmRpZgotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2hhdmVfZGVjbF9nZXRydXNhZ2U9eWVzCisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9nZXRydXNhZ2UiID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2hhdmVfZGVjbF9nZXRydXNhZ2U9bm8KKyAgYWNfaGF2ZV9kZWNsPTAKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9nZXRydXNhZ2UiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9nZXRydXNhZ2UiID4mNgotaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX2dldHJ1c2FnZSA9IHllczsgdGhlbgogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfREVDTF9HRVRSVVNBR0UgMQorI2RlZmluZSBIQVZFX0RFQ0xfR0VUUlVTQUdFICRhY19oYXZlX2RlY2wKIF9BQ0VPRgotCi0KLWVsc2UKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0RFQ0xfR0VUUlVTQUdFIDAKLV9BQ0VPRgotCi0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aW1lcyBpcyBkZWNsYXJlZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGltZXMgaXMgZGVjbGFyZWQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hhdmVfZGVjbF90aW1lcytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0CithY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJ0aW1lcyIgImFjX2N2X2hhdmVfZGVjbF90aW1lcyIgIiRhY19pbmNsdWRlc19kZWZhdWx0CiAjaWYgSEFWRV9TWVNfVElNRV9ICiAjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjZW5kaWYKQEAgLTgzMTksNzYgKzM0NDY4LDE3IEBACiAjIGluY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgogI2VuZGlmCiAKLQotaW50Ci1tYWluICgpCi17Ci0jaWZuZGVmIHRpbWVzCi0gIGNoYXIgKnAgPSAoY2hhciAqKSB0aW1lczsKLSNlbmRpZgotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2hhdmVfZGVjbF90aW1lcz15ZXMKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX3RpbWVzIiA9IHh5ZXM7IHRoZW4gOgorICBhY19oYXZlX2RlY2w9MQogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9oYXZlX2RlY2xfdGltZXM9bm8KKyAgYWNfaGF2ZV9kZWNsPTAKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF90aW1lcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX3RpbWVzIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF90aW1lcyA9IHllczsgdGhlbgogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfREVDTF9USU1FUyAxCisjZGVmaW5lIEhBVkVfREVDTF9USU1FUyAkYWNfaGF2ZV9kZWNsCiBfQUNFT0YKLQotCi1lbHNlCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ERUNMX1RJTUVTIDAKLV9BQ0VPRgotCi0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBjbG9jayBpcyBkZWNsYXJlZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgY2xvY2sgaXMgZGVjbGFyZWQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hhdmVfZGVjbF9jbG9jaytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0CithY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJjbG9jayIgImFjX2N2X2hhdmVfZGVjbF9jbG9jayIgIiRhY19pbmNsdWRlc19kZWZhdWx0CiAjaWYgSEFWRV9TWVNfVElNRV9ICiAjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjZW5kaWYKQEAgLTgzOTksNzYgKzM0NDg5LDE3IEBACiAjIGluY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgogI2VuZGlmCiAKLQotaW50Ci1tYWluICgpCi17Ci0jaWZuZGVmIGNsb2NrCi0gIGNoYXIgKnAgPSAoY2hhciAqKSBjbG9jazsKLSNlbmRpZgotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2hhdmVfZGVjbF9jbG9jaz15ZXMKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2Nsb2NrIiA9IHh5ZXM7IHRoZW4gOgorICBhY19oYXZlX2RlY2w9MQogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9oYXZlX2RlY2xfY2xvY2s9bm8KKyAgYWNfaGF2ZV9kZWNsPTAKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9jbG9jayIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2Nsb2NrIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9jbG9jayA9IHllczsgdGhlbgogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfREVDTF9DTE9DSyAxCisjZGVmaW5lIEhBVkVfREVDTF9DTE9DSyAkYWNfaGF2ZV9kZWNsCiBfQUNFT0YKLQotCi1lbHNlCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ERUNMX0NMT0NLIDAKLV9BQ0VPRgotCi0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBzeXNjb25mIGlzIGRlY2xhcmVkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBzeXNjb25mIGlzIGRlY2xhcmVkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9oYXZlX2RlY2xfc3lzY29uZitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0CithY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJzeXNjb25mIiAiYWNfY3ZfaGF2ZV9kZWNsX3N5c2NvbmYiICIkYWNfaW5jbHVkZXNfZGVmYXVsdAogI2lmIEhBVkVfU1lTX1RJTUVfSAogIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogI2VuZGlmCkBAIC04NDc5LDc5ICszNDUxMCwxOSBAQAogIyBpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KICNlbmRpZgogCi0KLWludAotbWFpbiAoKQotewotI2lmbmRlZiBzeXNjb25mCi0gIGNoYXIgKnAgPSAoY2hhciAqKSBzeXNjb25mOwotI2VuZGlmCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfaGF2ZV9kZWNsX3N5c2NvbmY9eWVzCisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9zeXNjb25mIiA9IHh5ZXM7IHRoZW4gOgorICBhY19oYXZlX2RlY2w9MQogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9oYXZlX2RlY2xfc3lzY29uZj1ubworICBhY19oYXZlX2RlY2w9MAogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX3N5c2NvbmYiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9zeXNjb25mIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9zeXNjb25mID0geWVzOyB0aGVuCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ERUNMX1NZU0NPTkYgMQorI2RlZmluZSBIQVZFX0RFQ0xfU1lTQ09ORiAkYWNfaGF2ZV9kZWNsCiBfQUNFT0YKIAogCi1lbHNlCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ERUNMX1NZU0NPTkYgMAotX0FDRU9GCi0KLQotZmkKLQotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgY2xvY2tfdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBjbG9ja190Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX2Nsb2NrX3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAorYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAiY2xvY2tfdCIgImFjX2N2X3R5cGVfY2xvY2tfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0CiAjaWYgSEFWRV9TWVNfVElNRV9ICiAjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjZW5kaWYKQEAgLTg1NjIsNTEgKzM0NTMzLDggQEAKICMgaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CiAjZW5kaWYKIAotCi1pbnQKLW1haW4gKCkKLXsKLWlmICgoY2xvY2tfdCAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKGNsb2NrX3QpKQotICByZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV9jbG9ja190PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl90eXBlX2Nsb2NrX3Q9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfY2xvY2tfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9jbG9ja190IiA+JjYKLWlmIHRlc3QgJGFjX2N2X3R5cGVfY2xvY2tfdCA9IHllczsgdGhlbgorIgoraWYgdGVzdCAieCRhY19jdl90eXBlX2Nsb2NrX3QiID0geHllczsgdGhlbiA6CiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9DTE9DS19UIDEKQEAgLTg2MTQsMTggKzM0NTQyLDcgQEAKIAogCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdHJ1Y3QgdG1zIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0cnVjdCB0bXMuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfc3RydWN0X3RtcytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0CithY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJzdHJ1Y3QgdG1zIiAiYWNfY3ZfdHlwZV9zdHJ1Y3RfdG1zIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKICNpZiBIQVZFX1NZU19USU1FX0gKICMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICNlbmRpZgpAQCAtODYzNiw1MSArMzQ1NTMsOCBAQAogIyBpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KICNlbmRpZgogCi0KLWludAotbWFpbiAoKQotewotaWYgKChzdHJ1Y3QgdG1zICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAoc3RydWN0IHRtcykpCi0gIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX3N0cnVjdF90bXM9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X3R5cGVfc3RydWN0X3Rtcz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9zdHJ1Y3RfdG1zIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3N0cnVjdF90bXMiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV9zdHJ1Y3RfdG1zID0geWVzOyB0aGVuCisiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfc3RydWN0X3RtcyIgPSB4eWVzOyB0aGVuIDoKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX1NUUlVDVF9UTVMgMQpAQCAtODY5MSw5NDEgKzM0NTY1LDQ4IEBACiAKIAogCi0jIGdudWxpYiBhbmQgZ2V0dGV4dC4KKyMgR2V0dGV4dC4KKyMgV2UgdXNlIGdudWxpYiwgd2hpY2ggaXMgb25seSBndWFyYW50ZWVkIHRvIHdvcmsgcHJvcGVybHkgd2l0aCB0aGUKKyMgbGF0ZXN0IEdldHRleHQuCiAKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBzeXN0ZW0gaXMgV2luZG93cyBvciBNU0RPUyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgc3lzdGVtIGlzIFdpbmRvd3Mgb3IgTVNET1MuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3dpbl9vcl9kb3Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotICAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0jaWYgIWRlZmluZWQgX1dJTjMyICYmICFkZWZpbmVkIF9fV0lOMzJfXyAmJiAhZGVmaW5lZCBfX01TRE9TX18gJiYgIWRlZmluZWQgX19DWUdXSU5fXwotbmVpdGhlciBNU0RPUyBub3IgV2luZG93cwotI2VuZGlmCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3dpbl9vcl9kb3M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X3dpbl9vcl9kb3M9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfd2luX29yX2RvcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3Zfd2luX29yX2RvcyIgPiY2Ci0KLSAgICBpZiB0ZXN0IHgiJGFjX2N2X3dpbl9vcl9kb3MiID0geHllczsgdGhlbgotICAgICAgYWNfZnNfYWNjZXB0c19kcml2ZV9sZXR0ZXJfcHJlZml4PTEKLSAgICAgIGFjX2ZzX2JhY2tzbGFzaF9pc19maWxlX25hbWVfc2VwYXJhdG9yPTEKLSAgICBlbHNlCi0gICAgICBhY19mc19hY2NlcHRzX2RyaXZlX2xldHRlcl9wcmVmaXg9MAotICAgICAgYWNfZnNfYmFja3NsYXNoX2lzX2ZpbGVfbmFtZV9zZXBhcmF0b3I9MAotICAgIGZpCi0KLQotCi0KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBGSUxFX1NZU1RFTV9BQ0NFUFRTX0RSSVZFX0xFVFRFUl9QUkVGSVggJGFjX2ZzX2FjY2VwdHNfZHJpdmVfbGV0dGVyX3ByZWZpeAotX0FDRU9GCi0KLQotCi0KLQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEZJTEVfU1lTVEVNX0JBQ0tTTEFTSF9JU19GSUxFX05BTUVfU0VQQVJBVE9SICRhY19mc19iYWNrc2xhc2hfaXNfZmlsZV9uYW1lX3NlcGFyYXRvcgotX0FDRU9GCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgc3RyZXJyb3JfciBpcyBkZWNsYXJlZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgc3RyZXJyb3JfciBpcyBkZWNsYXJlZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGF2ZV9kZWNsX3N0cmVycm9yX3Irc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci0jaWZuZGVmIHN0cmVycm9yX3IKLSAgY2hhciAqcCA9IChjaGFyICopIHN0cmVycm9yX3I7Ci0jZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9oYXZlX2RlY2xfc3RyZXJyb3Jfcj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfaGF2ZV9kZWNsX3N0cmVycm9yX3I9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9zdHJlcnJvcl9yIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfc3RyZXJyb3JfciIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfc3RyZXJyb3JfciA9IHllczsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfREVDTF9TVFJFUlJPUl9SIDEKLV9BQ0VPRgotCi0KLWVsc2UKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0RFQ0xfU1RSRVJST1JfUiAwCi1fQUNFT0YKLQotCi1maQotCi0KLQotZm9yIGFjX2Z1bmMgaW4gc3RyZXJyb3JfcgotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBzdHJlcnJvcl9yIHJldHVybnMgY2hhciAqIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBzdHJlcnJvcl9yIHJldHVybnMgY2hhciAqLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9mdW5jX3N0cmVycm9yX3JfY2hhcl9wK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLSAgICBhY19jdl9mdW5jX3N0cmVycm9yX3JfY2hhcl9wPW5vCi0gICAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3N0cmVycm9yX3IgPSB5ZXM7IHRoZW4KLSAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotCi0JICBjaGFyIGJ1ZlsxMDBdOwotCSAgY2hhciB4ID0gKnN0cmVycm9yX3IgKDAsIGJ1Ziwgc2l6ZW9mIGJ1Zik7Ci0JICBjaGFyICpwID0gc3RyZXJyb3JfciAoMCwgYnVmLCBzaXplb2YgYnVmKTsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9mdW5jX3N0cmVycm9yX3JfY2hhcl9wPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICAgIGVsc2UKLSAgICAgICMgc3RyZXJyb3JfciBpcyBub3QgZGVjbGFyZWQuICBDaG9vc2UgYmV0d2VlbgotICAgICAgIyBzeXN0ZW1zIHRoYXQgaGF2ZSByZWxhdGl2ZWx5IGluYWNjZXNzaWJsZSBkZWNsYXJhdGlvbnMgZm9yIHRoZQotICAgICAgIyBmdW5jdGlvbi4gIEJlT1MgYW5kIERFQyBVTklYIDQuMCBmYWxsIGluIHRoaXMgY2F0ZWdvcnksIGJ1dCB0aGUKLSAgICAgICMgZm9ybWVyIGhhcyBhIHN0cmVycm9yX3IgdGhhdCByZXR1cm5zIGNoYXIqLCB3aGlsZSB0aGUgbGF0dGVyCi0gICAgICAjIGhhcyBhIHN0cmVycm9yX3IgdGhhdCByZXR1cm5zIGBpbnQnLgotICAgICAgIyBUaGlzIHRlc3Qgc2hvdWxkIHNlZ2ZhdWx0IG9uIHRoZSBERUMgc3lzdGVtLgotICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KLSAgOgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0JZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLWNoYXIgYnVmWzEwMF07Ci0JICBjaGFyIHggPSAqc3RyZXJyb3JfciAoMCwgYnVmLCBzaXplb2YgYnVmKTsKLQkgIGV4aXQgKCFpc2FscGhhICh4KSk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9mdW5jX3N0cmVycm9yX3JfY2hhcl9wPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQotZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotICAgIGZpCi0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19zdHJlcnJvcl9yX2NoYXJfcCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19zdHJlcnJvcl9yX2NoYXJfcCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9mdW5jX3N0cmVycm9yX3JfY2hhcl9wID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIFNUUkVSUk9SX1JfQ0hBUl9QIDEKLV9BQ0VPRgotCi1maQotCi0KLSAgaWYgdGVzdCAteiAiJEdFVE9QVF9IIjsgdGhlbgotCi1mb3IgYWNfaGVhZGVyIGluIGdldG9wdC5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2hlYWRlcl9jb21waWxlcj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2Ci0KLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2Ci0KLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPwotY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgotICB5ZXM6bm86ICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLSAgICA7OwotICBubzp5ZXM6KiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KLSAgICAoCi0gICAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWJpc29uQGdudS5vcmcgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgICApIHwKLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgotICAgIDs7Citta2Rpcl9wPSIkTUtESVJfUCIKK2Nhc2UgJG1rZGlyX3AgaW4KKyAgW1xcLyRdKiB8ID86W1xcL10qKSA7OworICAqLyopIG1rZGlyX3A9IlwkKHRvcF9idWlsZGRpcikvJG1rZGlyX3AiIDs7CiBlc2FjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLQotZmkKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1lbHNlCi0gIEdFVE9QVF9IPWdldG9wdC5oCi1maQotCi1kb25lCi0KLSAgZmkKLQotICBpZiB0ZXN0IC16ICIkR0VUT1BUX0giOyB0aGVuCi0KLWZvciBhY19mdW5jIGluIGdldG9wdF9sb25nX29ubHkKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZWxzZQotICBHRVRPUFRfSD1nZXRvcHQuaAotZmkKLWRvbmUKLQotICBmaQotCi0gICAgICBpZiB0ZXN0IC16ICIkR0VUT1BUX0giOyB0aGVuCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgb3B0cmVzZXQgaXMgZGVjbGFyZWQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIG9wdHJlc2V0IGlzIGRlY2xhcmVkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9oYXZlX2RlY2xfb3B0cmVzZXQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8Z2V0b3B0Lmg+Ci0KLWludAotbWFpbiAoKQotewotI2lmbmRlZiBvcHRyZXNldAotICBjaGFyICpwID0gKGNoYXIgKikgb3B0cmVzZXQ7Ci0jZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9oYXZlX2RlY2xfb3B0cmVzZXQ9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2hhdmVfZGVjbF9vcHRyZXNldD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX29wdHJlc2V0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfb3B0cmVzZXQiID4mNgotaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX29wdHJlc2V0ID0geWVzOyB0aGVuCi0gIEdFVE9QVF9IPWdldG9wdC5oCi1maQotCi0gIGZpCi0KLSAgICAgIGlmIHRlc3QgLXogIiRHRVRPUFRfSCI7IHRoZW4KLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHdvcmtpbmcgR05VIGdldG9wdCBmdW5jdGlvbiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB3b3JraW5nIEdOVSBnZXRvcHQgZnVuY3Rpb24uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2dsX2N2X2Z1bmNfZ251X2dldG9wdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgotICAJIAkgCSBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBnZXRvcHRfY2xpcCBpcyBkZWNsYXJlZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgZ2V0b3B0X2NsaXAgaXMgZGVjbGFyZWQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hhdmVfZGVjbF9nZXRvcHRfY2xpcCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxnZXRvcHQuaD4KLQotaW50Ci1tYWluICgpCi17Ci0jaWZuZGVmIGdldG9wdF9jbGlwCi0gIGNoYXIgKnAgPSAoY2hhciAqKSBnZXRvcHRfY2xpcDsKLSNlbmRpZgotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2hhdmVfZGVjbF9nZXRvcHRfY2xpcD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfaGF2ZV9kZWNsX2dldG9wdF9jbGlwPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZ2V0b3B0X2NsaXAiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9nZXRvcHRfY2xpcCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfZ2V0b3B0X2NsaXAgPSB5ZXM7IHRoZW4KLSAgZ2xfY3ZfZnVuY19nbnVfZ2V0b3B0PW5vCi1lbHNlCi0gIGdsX2N2X2Z1bmNfZ251X2dldG9wdD15ZXMKLWZpCi0KLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8Z2V0b3B0Lmg+Ci1pbnQKLW1haW4gKCkKLXsKLQotCSAgICAgY2hhciAqbXlhcmd2WzNdOwotCSAgICAgbXlhcmd2WzBdID0gImNvbmZ0ZXN0IjsKLQkgICAgIG15YXJndlsxXSA9ICItKyI7Ci0JICAgICBteWFyZ3ZbMl0gPSAwOwotCSAgICAgcmV0dXJuIGdldG9wdCAoMiwgbXlhcmd2LCAiK2EiKSAhPSAnPyc7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGdsX2N2X2Z1bmNfZ251X2dldG9wdD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKLWVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSggZXhpdCAkYWNfc3RhdHVzICkKLWdsX2N2X2Z1bmNfZ251X2dldG9wdD1ubwotZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRnbF9jdl9mdW5jX2dudV9nZXRvcHQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGdsX2N2X2Z1bmNfZ251X2dldG9wdCIgPiY2Ci0gICAgaWYgdGVzdCAiJGdsX2N2X2Z1bmNfZ251X2dldG9wdCIgPSAibm8iOyB0aGVuCi0gICAgICBHRVRPUFRfSD1nZXRvcHQuaAotICAgIGZpCi0gIGZpCiAKIAotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgZ2V0ZW52IGlzIGRlY2xhcmVkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBnZXRlbnYgaXMgZGVjbGFyZWQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hhdmVfZGVjbF9nZXRlbnYrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci0jaWZuZGVmIGdldGVudgotICBjaGFyICpwID0gKGNoYXIgKikgZ2V0ZW52OwotI2VuZGlmCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfaGF2ZV9kZWNsX2dldGVudj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfaGF2ZV9kZWNsX2dldGVudj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2dldGVudiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2dldGVudiIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfZ2V0ZW52ID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ERUNMX0dFVEVOViAxCi1fQUNFT0YKLQotCi1lbHNlCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ERUNMX0dFVEVOViAwCi1fQUNFT0YKLQotCi1maQotCi0KLQotCi0KLSAgICAgICAgTUtJTlNUQUxMRElSUz0KLSAgaWYgdGVzdCAtbiAiJGFjX2F1eF9kaXIiOyB0aGVuCi0gICAgY2FzZSAiJGFjX2F1eF9kaXIiIGluCi0gICAgICAvKikgTUtJTlNUQUxMRElSUz0iJGFjX2F1eF9kaXIvbWtpbnN0YWxsZGlycyIgOzsKLSAgICAgICopIE1LSU5TVEFMTERJUlM9IlwkKHRvcF9idWlsZGRpcikvJGFjX2F1eF9kaXIvbWtpbnN0YWxsZGlycyIgOzsKLSAgICBlc2FjCi0gIGZpCi0gIGlmIHRlc3QgLXogIiRNS0lOU1RBTExESVJTIjsgdGhlbgotICAgIE1LSU5TVEFMTERJUlM9IlwkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMiCi0gIGZpCi0KLQotCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIE5MUyBpcyByZXF1ZXN0ZWQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIE5MUyBpcyByZXF1ZXN0ZWQuLi4gJEVDSE9fQyIgPiY2Ci0gICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW5scyBvciAtLWRpc2FibGUtbmxzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX25scytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfbmxzIgotICBVU0VfTkxTPSRlbmFibGV2YWwKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIE5MUyBpcyByZXF1ZXN0ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBOTFMgaXMgcmVxdWVzdGVkLi4uICIgPiY2OyB9CisgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW5scyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9ubHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9ubHM7IFVTRV9OTFM9JGVuYWJsZXZhbAogZWxzZQogICBVU0VfTkxTPXllcwotZmk7Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRVU0VfTkxTIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRVU0VfTkxTIiA+JjYKK2ZpCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRVU0VfTkxTIiA+JjUKKyRhc19lY2hvICIkVVNFX05MUyIgPiY2OyB9CiAKIAogCiAKKyAgICAgIEdFVFRFWFRfTUFDUk9fVkVSU0lPTj0wLjE4CisKKwogCiAKICMgUHJlcGFyZSBQQVRIX1NFUEFSQVRPUi4KICMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgogaWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KLSAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAotICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCi0gIGNobW9kICt4IGNvbmYkJC5zaAotICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgIFBBVEhfU0VQQVJBVE9SPSc7JwotICBlbHNlCi0gICAgUEFUSF9TRVBBUkFUT1I9OgotICBmaQotICBybSAtZiBjb25mJCQuc2gKKyAgIyBEZXRlcm1pbmUgUEFUSF9TRVBBUkFUT1IgYnkgdHJ5aW5nIHRvIGZpbmQgL2Jpbi9zaCBpbiBhIFBBVEggd2hpY2gKKyAgIyBjb250YWlucyBvbmx5IC9iaW4uIE5vdGUgdGhhdCBrc2ggbG9va3MgYWxzbyBhdCB0aGUgRlBBVEggdmFyaWFibGUsCisgICMgc28gd2UgaGF2ZSB0byBzZXQgdGhhdCBhcyB3ZWxsIGZvciB0aGUgdGVzdC4KKyAgUEFUSF9TRVBBUkFUT1I9OgorICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSBcCisgICAgJiYgeyAoUEFUSD0nL2JpbjovYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSBcCisgICAgICAgICAgIHx8IFBBVEhfU0VQQVJBVE9SPSc7JworICAgICAgIH0KIGZpCiAKICMgRmluZCBvdXQgaG93IHRvIHRlc3QgZm9yIGV4ZWN1dGFibGUgZmlsZXMuIERvbid0IHVzZSBhIHplcm8tYnl0ZSBmaWxlLApAQCAtOTY0NCwxMCArMzQ2MjUsMTAgQEAKIAogIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtc2dmbXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgogc2V0IGR1bW15IG1zZ2ZtdDsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9NU0dGTVQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX01TR0ZNVCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGNhc2UgIiRNU0dGTVQiIGluCiAgIFtcXC9dKiB8ID86W1xcL10qKQpAQCAtOTY3NiwxOSArMzQ2NTcsMTkgQEAKIGZpCiBNU0dGTVQ9IiRhY19jdl9wYXRoX01TR0ZNVCIKIGlmIHRlc3QgIiRNU0dGTVQiICE9ICI6IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTVNHRk1UIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRNU0dGTVQiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1TR0ZNVCIgPiY1CiskYXNfZWNobyAiJE1TR0ZNVCIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCiAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ21zZ2ZtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgZ21zZ2ZtdDsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9HTVNHRk1UK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9HTVNHRk1UKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgY2FzZSAkR01TR0ZNVCBpbgogICBbXFwvXSogfCA/OltcXC9dKikKQEAgLTk3MDAsNDMgKzM0NjgxLDU0IEBACiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCiAgICAgYWNfY3ZfcGF0aF9HTVNHRk1UPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAogICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9HTVNHRk1UIiAmJiBhY19jdl9wYXRoX0dNU0dGTVQ9IiRNU0dGTVQiCiAgIDs7CiBlc2FjCiBmaQogR01TR0ZNVD0kYWNfY3ZfcGF0aF9HTVNHRk1UCi0KIGlmIHRlc3QgLW4gIiRHTVNHRk1UIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkR01TR0ZNVCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kR01TR0ZNVCIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkR01TR0ZNVCIgPiY1CiskYXNfZWNobyAiJEdNU0dGTVQiID4mNjsgfQogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAogCiAKKyAgICBjYXNlIGAkTVNHRk1UIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4KKyAgICAnJyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC00XSB8IDAuMVswLTRdLiopIE1TR0ZNVF8wMTU9OiA7OworICAgICopIE1TR0ZNVF8wMTU9JE1TR0ZNVCA7OworICBlc2FjCisKKyAgY2FzZSBgJEdNU0dGTVQgLS12ZXJzaW9uIHwgc2VkIDFxIHwgc2VkIC1lICdzLF5bXjAtOV0qLCwnYCBpbgorICAgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTRdIHwgMC4xWzAtNF0uKikgR01TR0ZNVF8wMTU9OiA7OworICAgICopIEdNU0dGTVRfMDE1PSRHTVNHRk1UIDs7CisgIGVzYWMKKworCisKICMgUHJlcGFyZSBQQVRIX1NFUEFSQVRPUi4KICMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgogaWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KLSAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAotICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCi0gIGNobW9kICt4IGNvbmYkJC5zaAotICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgIFBBVEhfU0VQQVJBVE9SPSc7JwotICBlbHNlCi0gICAgUEFUSF9TRVBBUkFUT1I9OgotICBmaQotICBybSAtZiBjb25mJCQuc2gKKyAgIyBEZXRlcm1pbmUgUEFUSF9TRVBBUkFUT1IgYnkgdHJ5aW5nIHRvIGZpbmQgL2Jpbi9zaCBpbiBhIFBBVEggd2hpY2gKKyAgIyBjb250YWlucyBvbmx5IC9iaW4uIE5vdGUgdGhhdCBrc2ggbG9va3MgYWxzbyBhdCB0aGUgRlBBVEggdmFyaWFibGUsCisgICMgc28gd2UgaGF2ZSB0byBzZXQgdGhhdCBhcyB3ZWxsIGZvciB0aGUgdGVzdC4KKyAgUEFUSF9TRVBBUkFUT1I9OgorICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSBcCisgICAgJiYgeyAoUEFUSD0nL2JpbjovYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSBcCisgICAgICAgICAgIHx8IFBBVEhfU0VQQVJBVE9SPSc7JworICAgICAgIH0KIGZpCiAKICMgRmluZCBvdXQgaG93IHRvIHRlc3QgZm9yIGV4ZWN1dGFibGUgZmlsZXMuIERvbid0IHVzZSBhIHplcm8tYnl0ZSBmaWxlLApAQCAtOTc1NSwxMCArMzQ3NDcsMTAgQEAKIAogIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJ4Z2V0dGV4dCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgeGdldHRleHQ7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfWEdFVFRFWFQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX1hHRVRURVhUKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgY2FzZSAiJFhHRVRURVhUIiBpbgogICBbXFwvXSogfCA/OltcXC9dKikKQEAgLTk3ODcsMjggKzM0Nzc5LDMzIEBACiBmaQogWEdFVFRFWFQ9IiRhY19jdl9wYXRoX1hHRVRURVhUIgogaWYgdGVzdCAiJFhHRVRURVhUIiAhPSAiOiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFhHRVRURVhUIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRYR0VUVEVYVCIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkWEdFVFRFWFQiID4mNQorJGFzX2VjaG8gIiRYR0VUVEVYVCIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCiAgICAgcm0gLWYgbWVzc2FnZXMucG8KIAorICAgIGNhc2UgYCRYR0VUVEVYVCAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluCisgICAgJycgfCAwLlswLTldIHwgMC5bMC05XS4qIHwgMC4xWzAtNF0gfCAwLjFbMC00XS4qKSBYR0VUVEVYVF8wMTU9OiA7OworICAgICopIFhHRVRURVhUXzAxNT0kWEdFVFRFWFQgOzsKKyAgZXNhYworCisKIAogIyBQcmVwYXJlIFBBVEhfU0VQQVJBVE9SLgogIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCiBpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgotICBlY2hvICIjISAvYmluL3NoIiA+Y29uZiQkLnNoCi0gIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKLSAgY2htb2QgK3ggY29uZiQkLnNoCi0gIGlmIChQQVRIPSIvbm9uZXhpc3RlbnQ7LiI7IGNvbmYkJC5zaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgUEFUSF9TRVBBUkFUT1I9JzsnCi0gIGVsc2UKLSAgICBQQVRIX1NFUEFSQVRPUj06Ci0gIGZpCi0gIHJtIC1mIGNvbmYkJC5zaAorICAjIERldGVybWluZSBQQVRIX1NFUEFSQVRPUiBieSB0cnlpbmcgdG8gZmluZCAvYmluL3NoIGluIGEgUEFUSCB3aGljaAorICAjIGNvbnRhaW5zIG9ubHkgL2Jpbi4gTm90ZSB0aGF0IGtzaCBsb29rcyBhbHNvIGF0IHRoZSBGUEFUSCB2YXJpYWJsZSwKKyAgIyBzbyB3ZSBoYXZlIHRvIHNldCB0aGF0IGFzIHdlbGwgZm9yIHRoZSB0ZXN0LgorICBQQVRIX1NFUEFSQVRPUj06CisgIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICAmJiB7IChQQVRIPScvYmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICAgICAgICAgfHwgUEFUSF9TRVBBUkFUT1I9JzsnCisgICAgICAgfQogZmkKIAogIyBGaW5kIG91dCBob3cgdG8gdGVzdCBmb3IgZXhlY3V0YWJsZSBmaWxlcy4gRG9uJ3QgdXNlIGEgemVyby1ieXRlIGZpbGUsCkBAIC05ODI3LDEwICszNDgyNCwxMCBAQAogCiAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm1zZ21lcmdlIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSBtc2dtZXJnZTsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9NU0dNRVJHRStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfTVNHTUVSR0UrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXNlICIkTVNHTUVSR0UiIGluCiAgIFtcXC9dKiB8ID86W1xcL10qKQpAQCAtOTg1OCwyNzYgKzM0ODU1LDI2IEBACiBmaQogTVNHTUVSR0U9IiRhY19jdl9wYXRoX01TR01FUkdFIgogaWYgdGVzdCAiJE1TR01FUkdFIiAhPSAiOiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJE1TR01FUkdFIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRNU0dNRVJHRSIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTVNHTUVSR0UiID4mNQorJGFzX2VjaG8gIiRNU0dNRVJHRSIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCiAKLSAgICAgIGlmIHRlc3QgIiRHTVNHRk1UIiAhPSAiOiI7IHRoZW4KLSAgICAgICAgICAgIGlmICRHTVNHRk1UIC0tc3RhdGlzdGljcyAvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxICYmCi0gICAgICAgKGlmICRHTVNHRk1UIC0tc3RhdGlzdGljcyAvZGV2L251bGwgMj4mMSA+L2Rldi9udWxsIHwgZ3JlcCB1c2FnZSA+L2Rldi9udWxsOyB0aGVuIGV4aXQgMTsgZWxzZSBleGl0IDA7IGZpKTsgdGhlbgotICAgICAgOiA7Ci0gICAgZWxzZQotICAgICAgR01TR0ZNVD1gZWNobyAiJEdNU0dGTVQiIHwgc2VkIC1lICdzLF4uKi8sLCdgCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBmb3VuZCAkR01TR0ZNVCBwcm9ncmFtIGlzIG5vdCBHTlUgbXNnZm10OyBpZ25vcmUgaXQiID4mNQotZWNobyAiJHtFQ0hPX1R9Zm91bmQgJEdNU0dGTVQgcHJvZ3JhbSBpcyBub3QgR05VIG1zZ2ZtdDsgaWdub3JlIGl0IiA+JjYKLSAgICAgIEdNU0dGTVQ9IjoiCi0gICAgZmkKLSAgZmkKLQotICAgICAgaWYgdGVzdCAiJFhHRVRURVhUIiAhPSAiOiI7IHRoZW4KLSAgICAgICAgICAgIGlmICRYR0VUVEVYVCAtLW9taXQtaGVhZGVyIC0tY29weXJpZ2h0LWhvbGRlcj0gLS1tc2dpZC1idWdzLWFkZHJlc3M9IC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICAoaWYgJFhHRVRURVhUIC0tb21pdC1oZWFkZXIgLS1jb3B5cmlnaHQtaG9sZGVyPSAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0gL2Rldi9udWxsIDI+JjEgPi9kZXYvbnVsbCB8IGdyZXAgdXNhZ2UgPi9kZXYvbnVsbDsgdGhlbiBleGl0IDE7IGVsc2UgZXhpdCAwOyBmaSk7IHRoZW4KLSAgICAgIDogOwotICAgIGVsc2UKLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGZvdW5kIHhnZXR0ZXh0IHByb2dyYW0gaXMgbm90IEdOVSB4Z2V0dGV4dDsgaWdub3JlIGl0IiA+JjUKLWVjaG8gIiR7RUNIT19UfWZvdW5kIHhnZXR0ZXh0IHByb2dyYW0gaXMgbm90IEdOVSB4Z2V0dGV4dDsgaWdub3JlIGl0IiA+JjYKLSAgICAgIFhHRVRURVhUPSI6IgotICAgIGZpCi0gICAgICAgIHJtIC1mIG1lc3NhZ2VzLnBvCi0gIGZpCi0KLSAgICAgICAgICAgIGFjX2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyBkZWZhdWx0LTEiCisgICAgICAgIHRlc3QgLW4gIiRsb2NhbGVkaXIiIHx8IGxvY2FsZWRpcj0nJHtkYXRhZGlyfS9sb2NhbGUnCiAKIAotCi0gICAgICBpZiB0ZXN0ICJYJHByZWZpeCIgPSAiWE5PTkUiOyB0aGVuCi0gICAgYWNsX2ZpbmFsX3ByZWZpeD0iJGFjX2RlZmF1bHRfcHJlZml4IgotICBlbHNlCi0gICAgYWNsX2ZpbmFsX3ByZWZpeD0iJHByZWZpeCIKLSAgZmkKLSAgaWYgdGVzdCAiWCRleGVjX3ByZWZpeCIgPSAiWE5PTkUiOyB0aGVuCi0gICAgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PScke3ByZWZpeH0nCi0gIGVsc2UKLSAgICBhY2xfZmluYWxfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKLSAgZmkKLSAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgotICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgotICBldmFsIGFjbF9maW5hbF9leGVjX3ByZWZpeD1cIiRhY2xfZmluYWxfZXhlY19wcmVmaXhcIgotICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCi0KLSMgTWFrZSBzdXJlIHdlIGNhbiBydW4gY29uZmlnLnN1Yi4KLSRhY19jb25maWdfc3ViIHN1bjQgPi9kZXYvbnVsbCAyPiYxIHx8Ci0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBydW4gJGFjX2NvbmZpZ19zdWIiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IHJ1biAkYWNfY29uZmlnX3N1YiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfYnVpbGQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY3ZfYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCi10ZXN0IC16ICIkYWNfY3ZfYnVpbGRfYWxpYXMiICYmCi0gIGFjX2N2X2J1aWxkX2FsaWFzPWAkYWNfY29uZmlnX2d1ZXNzYAotdGVzdCAteiAiJGFjX2N2X2J1aWxkX2FsaWFzIiAmJgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZ3Vlc3MgYnVpbGQgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1hY19jdl9idWlsZD1gJGFjX2NvbmZpZ19zdWIgJGFjX2N2X2J1aWxkX2FsaWFzYCB8fAotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfYnVpbGRfYWxpYXMgZmFpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICRhY19jb25maWdfc3ViICRhY19jdl9idWlsZF9hbGlhcyBmYWlsZWQiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9idWlsZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfYnVpbGQiID4mNgotYnVpbGQ9JGFjX2N2X2J1aWxkCi1idWlsZF9jcHU9YGVjaG8gJGFjX2N2X2J1aWxkIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDEvJ2AKLWJ1aWxkX3ZlbmRvcj1gZWNobyAkYWNfY3ZfYnVpbGQgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYAotYnVpbGRfb3M9YGVjaG8gJGFjX2N2X2J1aWxkIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKKyAgICB0ZXN0IC1uICIke1hHRVRURVhUX0VYVFJBX09QVElPTlMrc2V0fSIgfHwgWEdFVFRFWFRfRVhUUkFfT1BUSU9OUz0KIAogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hvc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY3ZfaG9zdF9hbGlhcz0kaG9zdF9hbGlhcwotdGVzdCAteiAiJGFjX2N2X2hvc3RfYWxpYXMiICYmCi0gIGFjX2N2X2hvc3RfYWxpYXM9JGFjX2N2X2J1aWxkX2FsaWFzCi1hY19jdl9ob3N0PWAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfaG9zdF9hbGlhc2AgfHwKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogJGFjX2NvbmZpZ19zdWIgJGFjX2N2X2hvc3RfYWxpYXMgZmFpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICRhY19jb25maWdfc3ViICRhY19jdl9ob3N0X2FsaWFzIGZhaWxlZCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hvc3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hvc3QiID4mNgotaG9zdD0kYWNfY3ZfaG9zdAotaG9zdF9jcHU9YGVjaG8gJGFjX2N2X2hvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMS8nYAotaG9zdF92ZW5kb3I9YGVjaG8gJGFjX2N2X2hvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYAotaG9zdF9vcz1gZWNobyAkYWNfY3ZfaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCi0KLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWdudS1sZCBvciAtLXdpdGhvdXQtZ251LWxkIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfZ251X2xkIgotICB0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMKLWVsc2UKLSAgd2l0aF9nbnVfbGQ9bm8KLWZpOwotIyBQcmVwYXJlIFBBVEhfU0VQQVJBVE9SLgotIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCi1pZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgotICBlY2hvICIjISAvYmluL3NoIiA+Y29uZiQkLnNoCi0gIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKLSAgY2htb2QgK3ggY29uZiQkLnNoCi0gIGlmIChQQVRIPSIvbm9uZXhpc3RlbnQ7LiI7IGNvbmYkJC5zaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgUEFUSF9TRVBBUkFUT1I9JzsnCi0gIGVsc2UKLSAgICBQQVRIX1NFUEFSQVRPUj06Ci0gIGZpCi0gIHJtIC1mIGNvbmYkJC5zaAotZmkKLWFjX3Byb2c9bGQKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgR0NDIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgR0NDLi4uICRFQ0hPX0MiID4mNgotICBjYXNlICRob3N0IGluCi0gICotKi1taW5ndyopCi0gICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuIHdoaWNoIHVwc2V0cyBtaW5ndwotICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKLSAgKikKLSAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7Ci0gIGVzYWMKLSAgY2FzZSAkYWNfcHJvZyBpbgotICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgotICAgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikKLSAgICAgIHJlX2RpcmVsdD0nL1teL11bXi9dKi9cLlwuLycKLSAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRoIG9mIGxkCi0gICAgICBhY19wcm9nPWBlY2hvICRhY19wcm9nfCBzZWQgJ3MlXFxcXCUvJWcnYAotICAgICAgd2hpbGUgZWNobyAkYWNfcHJvZyB8IGdyZXAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCi0JYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgc2VkICJzJSRyZV9kaXJlbHQlLyUiYAotICAgICAgZG9uZQotICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCi0gICAgICA7OwotICAiIikKLSAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KLSAgICBhY19wcm9nPWxkCi0gICAgOzsKLSAgKikKLSAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCi0gICAgd2l0aF9nbnVfbGQ9dW5rbm93bgotICAgIDs7Ci0gIGVzYWMKLWVsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBHTlUgbGQuLi4gJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igbm9uLUdOVSBsZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBub24tR05VIGxkLi4uICRFQ0hPX0MiID4mNgotZmkKLWlmIHRlc3QgIiR7YWNsX2N2X3BhdGhfTEQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAteiAiJExEIjsgdGhlbgotICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30ke1BBVEhfU0VQQVJBVE9SLTp9IgotICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbwotICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCi0gICAgICBhY2xfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKLSAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKLSAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGQncyBvbmx5IGFjY2VwdCAtdi4KLSAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgotICAgICAgY2FzZSBgIiRhY2xfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8IC9kZXYvbnVsbGAgaW4KLSAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQotCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsgOzsKLSAgICAgICopCi0JdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsgOzsKLSAgICAgIGVzYWMKLSAgICBmaQotICBkb25lCi0gIElGUz0iJGFjX3NhdmVfaWZzIgotZWxzZQotICBhY2xfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLWZpCi1maQotCi1MRD0iJGFjbF9jdl9wYXRoX0xEIgotaWYgdGVzdCAtbiAiJExEIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTEQiID4mNQotZWNobyAiJHtFQ0hPX1R9JExEIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLXRlc3QgLXogIiRMRCIgJiYgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY2xfY3ZfcHJvZ19nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGQncyBvbmx5IGFjY2VwdCAtdi4KLWNhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCi0qR05VKiB8ICond2l0aCBCRkQnKikKLSAgYWNsX2N2X3Byb2dfZ251X2xkPXllcyA7OwotKikKLSAgYWNsX2N2X3Byb2dfZ251X2xkPW5vIDs7Ci1lc2FjCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjbF9jdl9wcm9nX2dudV9sZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNsX2N2X3Byb2dfZ251X2xkIiA+JjYKLXdpdGhfZ251X2xkPSRhY2xfY3ZfcHJvZ19nbnVfbGQKKyAgYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIHBvLWRpcmVjdG9yaWVzIgogCiAKIAogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNoYXJlZCBsaWJyYXJ5IHJ1biBwYXRoIG9yaWdpbiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzaGFyZWQgbGlicmFyeSBydW4gcGF0aCBvcmlnaW4uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjbF9jdl9ycGF0aCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQogCi0gICAgQ0M9IiRDQyIgR0NDPSIkR0NDIiBMREZMQUdTPSIkTERGTEFHUyIgTEQ9IiRMRCIgd2l0aF9nbnVfbGQ9IiR3aXRoX2dudV9sZCIgXAotICAgICR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICIkYWNfYXV4X2Rpci9jb25maWcucnBhdGgiICIkaG9zdCIgPiBjb25mdGVzdC5zaAotICAgIC4gLi9jb25mdGVzdC5zaAotICAgIHJtIC1mIC4vY29uZnRlc3Quc2gKLSAgICBhY2xfY3ZfcnBhdGg9ZG9uZQotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjbF9jdl9ycGF0aCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNsX2N2X3JwYXRoIiA+JjYKLSAgd2w9IiRhY2xfY3Zfd2wiCi0gIGxpYmV4dD0iJGFjbF9jdl9saWJleHQiCi0gIHNobGliZXh0PSIkYWNsX2N2X3NobGliZXh0IgotICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkYWNsX2N2X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiCi0gIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKLSAgaGFyZGNvZGVfZGlyZWN0PSIkYWNsX2N2X2hhcmRjb2RlX2RpcmVjdCIKLSAgaGFyZGNvZGVfbWludXNfTD0iJGFjbF9jdl9oYXJkY29kZV9taW51c19MIgotICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ycGF0aCBvciAtLWRpc2FibGUtcnBhdGggd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfcnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3JwYXRoIgotICA6Ci1lbHNlCi0gIGVuYWJsZV9ycGF0aD15ZXMKLWZpOwotCi0KLSAgICAgICAgICAgICAgICAgIGFjbF9saWJkaXJzdGVtPWxpYgotICBzZWFyY2hwYXRoPWAoTENfQUxMPUMgJENDIC1wcmludC1zZWFyY2gtZGlycykgMj4vZGV2L251bGwgfCBzZWQgLW4gLWUgJ3MsXmxpYnJhcmllczogLCxwJyB8IHNlZCAtZSAncyxePSwsJ2AKLSAgaWYgdGVzdCAtbiAiJHNlYXJjaHBhdGgiOyB0aGVuCi0gICAgYWNsX3NhdmVfSUZTPSIke0lGUz0gCX0iOyBJRlM9IjoiCi0gICAgZm9yIHNlYXJjaGRpciBpbiAkc2VhcmNocGF0aDsgZG8KLSAgICAgIGlmIHRlc3QgLWQgIiRzZWFyY2hkaXIiOyB0aGVuCi0gICAgICAgIGNhc2UgIiRzZWFyY2hkaXIiIGluCi0gICAgICAgICAgKi9saWI2NC8gfCAqL2xpYjY0ICkgYWNsX2xpYmRpcnN0ZW09bGliNjQgOzsKLSAgICAgICAgICAqKSBzZWFyY2hkaXI9YGNkICIkc2VhcmNoZGlyIiAmJiBwd2RgCi0gICAgICAgICAgICAgY2FzZSAiJHNlYXJjaGRpciIgaW4KLSAgICAgICAgICAgICAgICovbGliNjQgKSBhY2xfbGliZGlyc3RlbT1saWI2NCA7OwotICAgICAgICAgICAgIGVzYWMgOzsKLSAgICAgICAgZXNhYwotICAgICAgZmkKLSAgICBkb25lCi0gICAgSUZTPSIkYWNsX3NhdmVfSUZTIgotICBmaQogCiAKIApAQCAtMTAxNTAsMTAgKzM0ODk3LDkgQEAKICAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgogCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGliaWNvbnYtcHJlZml4IG9yIC0td2l0aG91dC1saWJpY29udi1wcmVmaXggd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2xpYmljb252X3ByZWZpeCtzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9saWJpY29udl9wcmVmaXgiCi0KKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGliaWNvbnYtcHJlZml4IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9saWJpY29udl9wcmVmaXgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2xpYmljb252X3ByZWZpeDsKICAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlhubyI7IHRoZW4KICAgICAgIHVzZV9hZGRpdGlvbmFsPW5vCiAgICAgZWxzZQpAQCAtMTAxNzMsMTMgKzM0OTE5LDIwIEBACiAgICAgICBlbHNlCiAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJHdpdGh2YWwvaW5jbHVkZSIKICAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9IiR3aXRodmFsLyRhY2xfbGliZGlyc3RlbSIKKyAgICAgICAgaWYgdGVzdCAiJGFjbF9saWJkaXJzdGVtMiIgIT0gIiRhY2xfbGliZGlyc3RlbSIgXAorICAgICAgICAgICAmJiAhIHRlc3QgLWQgIiR3aXRodmFsLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KKyAgICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvJGFjbF9saWJkaXJzdGVtMiIKKyAgICAgICAgZmkKICAgICAgIGZpCiAgICAgZmkKIAotZmk7CitmaQorCiAgICAgICBMSUJJQ09OVj0KICAgTFRMSUJJQ09OVj0KICAgSU5DSUNPTlY9CisgIExJQklDT05WX1BSRUZJWD0KKyAgICAgIEhBVkVfTElCSUNPTlY9CiAgIHJwYXRoZGlycz0KICAgbHRycGF0aGRpcnM9CiAgIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0KQEAgLTEwMTk3LDcgKzM0OTUwLDcgQEAKICAgICAgIGRvbmUKICAgICAgIGlmIHRlc3QgLXogIiRhbHJlYWR5X2hhbmRsZWQiOyB0aGVuCiAgICAgICAgIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0iJG5hbWVzX2FscmVhZHlfaGFuZGxlZCAkbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVybmFtZT1gZWNobyAiJG5hbWUiIHwgc2VkIC1lICd5fGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tfEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19ffCdgCisgICAgICAgICAgICAgICAgICAgICAgICB1cHBlcm5hbWU9YGVjaG8gIiRuYW1lIiB8IHNlZCAtZSAneXxhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vKy18QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19ffCdgCiAgICAgICAgIGV2YWwgdmFsdWU9XCJcJEhBVkVfTElCJHVwcGVybmFtZVwiCiAgICAgICAgIGlmIHRlc3QgLW4gIiR2YWx1ZSI7IHRoZW4KICAgICAgICAgICBpZiB0ZXN0ICIkdmFsdWUiID0geWVzOyB0aGVuCkBAIC0xMDIxMywyMiArMzQ5NjYsNTIgQEAKICAgICAgICAgICBmb3VuZF9sYT0KICAgICAgICAgICBmb3VuZF9zbz0KICAgICAgICAgICBmb3VuZF9hPQorICAgICAgICAgIGV2YWwgbGlibmFtZT1cIiRhY2xfbGlibmFtZV9zcGVjXCIgICAgIyB0eXBpY2FsbHk6IGxpYm5hbWU9bGliJG5hbWUKKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgorICAgICAgICAgICAgc2hyZXh0PSIuJGFjbF9zaGxpYmV4dCIgICAgICAgICAgICAgIyB0eXBpY2FsbHk6IHNocmV4dD0uc28KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBzaHJleHQ9CisgICAgICAgICAgZmkKICAgICAgICAgICBpZiB0ZXN0ICR1c2VfYWRkaXRpb25hbCA9IHllczsgdGhlbgotICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHNobGliZXh0IiAmJiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJHNobGliZXh0IjsgdGhlbgotICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKLSAgICAgICAgICAgICAgZm91bmRfc289IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kc2hsaWJleHQiCi0gICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5sYSI7IHRoZW4KLSAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIgotICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJGxpYmV4dCI7IHRoZW4KLSAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKLSAgICAgICAgICAgICAgICBmb3VuZF9hPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJGxpYmV4dCIKLSAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiOyB0aGVuCi0gICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIgorICAgICAgICAgICAgZGlyPSIkYWRkaXRpb25hbF9saWJkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0IgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWMiID0gJyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnOyB0aGVuCisgICAgICAgICAgICAgICAgICB2ZXI9YChjZCAiJGRpciIgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gIiRsaWJuYW1lJHNocmV4dCIuKjsgZG8gZWNobyAiJGYiOyBkb25lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICJzLF4kbGlibmFtZSRzaHJleHRcXFxcLiwsIiBcCisgICAgICAgICAgICAgICAgICAgICAgICB8IHNvcnQgLXQgJy4nIC1uIC1yIC1rMSwxIC1rMiwyIC1rMywzIC1rNCw0IC1rNSw1IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIDFxICkgMj4vZGV2L251bGxgCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkdmVyIiAmJiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIgorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBldmFsIGxpYnJhcnlfbmFtZXM9XCIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlY1wiCisgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kZiI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGYiCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGRvbmUKICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbgorICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS5sYSI7IHRoZW4KKyAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci8kbGlibmFtZS5sYSIKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCiAgICAgICAgICAgZmkKICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMVExJQklDT05WOyBkbwpAQCAtMTAyNDQsMjEgKzM1MDI3LDQ0IEBACiAgICAgICAgICAgICAgIGNhc2UgIiR4IiBpbgogICAgICAgICAgICAgICAgIC1MKikKICAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCR4IiB8IHNlZCAtZSAncy9eWC1MLy8nYAotICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHNobGliZXh0IiAmJiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgotICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci9saWIkbmFtZS4kc2hsaWJleHQiCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUubGEiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvbGliJG5hbWUubGEiCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUuJGxpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0IjsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKLSAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyL2xpYiRuYW1lLiRsaWJleHQiCi0gICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS5sYSI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyL2xpYiRuYW1lLmxhIgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dCIKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjIiA9ICckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgdmVyPWAoY2QgIiRkaXIiICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICIkbGlibmFtZSRzaHJleHQiLio7IGRvIGVjaG8gIiRmIjsgZG9uZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAicyxeJGxpYm5hbWUkc2hyZXh0XFxcXC4sLCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzb3J0IC10ICcuJyAtbiAtciAtazEsMSAtazIsMiAtazMsMyAtazQsNCAtazUsNSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAxcSApIDI+L2Rldi9udWxsYAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHZlciIgJiYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWNcIgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gJGxpYnJhcnlfbmFtZXM7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGYiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRmIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBkb25lCiAgICAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUubGEiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvJGxpYm5hbWUubGEiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgZXNhYwogICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCkBAIC0xMDI2OSw3ICszNTA3NSw5IEBACiAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgTFRMSUJJQ09OVj0iJHtMVExJQklDT05WfSR7TFRMSUJJQ09OVjorIH0tTCRmb3VuZF9kaXIgLWwkbmFtZSIKICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfc28iICE9ICJYIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiA9IG5vIHx8IHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiID0gbm8gXAorICAgICAgICAgICAgICAgICB8fCB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIiBcCisgICAgICAgICAgICAgICAgIHx8IHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0yIjsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSRmb3VuZF9zbyIKICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CkBAIC0xMDI4MiwxMCArMzUwOTAsMTAgQEAKICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgogICAgICAgICAgICAgICAgICAgbHRycGF0aGRpcnM9IiRsdHJwYXRoZGlycyAkZm91bmRfZGlyIgogICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfaGFyZGNvZGVfZGlyZWN0IiA9IHllczsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0kZm91bmRfc28iCiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiICYmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IG5vOyB0aGVuCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiICYmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0kZm91bmRfc28iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CiAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRycGF0aGRpcnM7IGRvCkBAIC0xMDMxNyw3ICszNTEyNSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0tTCRmb3VuZF9kaXIiCiAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiAhPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wiICE9IG5vOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0kZm91bmRfc28iCiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0tbCRuYW1lIgpAQCAtMTAzMzYsNiArMzUxNDQsMTYgQEAKICAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9kaXIiIGluCiAgICAgICAgICAgICAgICovJGFjbF9saWJkaXJzdGVtIHwgKi8kYWNsX2xpYmRpcnN0ZW0vKQogICAgICAgICAgICAgICAgIGJhc2VkaXI9YGVjaG8gIlgkZm91bmRfZGlyIiB8IHNlZCAtZSAncyxeWCwsJyAtZSAicywvJGFjbF9saWJkaXJzdGVtLyInKiQsLCdgCisgICAgICAgICAgICAgICAgaWYgdGVzdCAiJG5hbWUiID0gJ2ljb252JzsgdGhlbgorICAgICAgICAgICAgICAgICAgTElCSUNPTlZfUFJFRklYPSIkYmFzZWRpciIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJGJhc2VkaXIvaW5jbHVkZSIKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAqLyRhY2xfbGliZGlyc3RlbTIgfCAqLyRhY2xfbGliZGlyc3RlbTIvKQorICAgICAgICAgICAgICAgIGJhc2VkaXI9YGVjaG8gIlgkZm91bmRfZGlyIiB8IHNlZCAtZSAncyxeWCwsJyAtZSAicywvJGFjbF9saWJkaXJzdGVtMi8iJyokLCwnYAorICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRuYW1lIiA9ICdpY29udic7IHRoZW4KKyAgICAgICAgICAgICAgICAgIExJQklDT05WX1BSRUZJWD0iJGJhc2VkaXIiCisgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiRiYXNlZGlyL2luY2x1ZGUiCiAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgIGVzYWMKQEAgLTEwMzg0LDkgKzM1MjAyLDExIEBACiAgICAgICAgICAgICAgICAgY2FzZSAiJGRlcCIgaW4KICAgICAgICAgICAgICAgICAgIC1MKikKICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9YGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1MLy8nYAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgIT0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbSIgXAorICAgICAgICAgICAgICAgICAgICAgICAmJiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtMiI7IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgPSAiWC91c3IvbG9jYWwvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiID0gIlgvdXNyL2xvY2FsLyRhY2xfbGliZGlyc3RlbSIgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiID0gIlgvdXNyL2xvY2FsLyRhY2xfbGliZGlyc3RlbTIiOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGludXgqIHwgZ251KiB8IGsqYnNkKi1nbnUpIGhhdmVpdD15ZXM7OwpAQCAtMTA0ODYsMjEgKzM1MzA2LDIxIEBACiAgICAgZG9uZQogICBkb25lCiAgIGlmIHRlc3QgIlgkcnBhdGhkaXJzIiAhPSAiWCI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICBhbGxkaXJzPQogICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbwotICAgICAgICBhbGxkaXJzPSIke2FsbGRpcnN9JHthbGxkaXJzOiskaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcn0kZm91bmRfZGlyIgorICAgICAgICBhbGxkaXJzPSIke2FsbGRpcnN9JHthbGxkaXJzOiskYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3J9JGZvdW5kX2RpciIKICAgICAgIGRvbmUKICAgICAgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKICAgICAgIGxpYmRpcj0iJGFsbGRpcnMiCi0gICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgogICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgogICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0kZmxhZyIKICAgICBlbHNlCiAgICAgICAgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCiAgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKICAgICAgICAgbGliZGlyPSIkZm91bmRfZGlyIgotICAgICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICAgIGV2YWwgZmxhZz1cIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCiAgICAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0kZmxhZyIKICAgICAgIGRvbmUKQEAgLTEwNTQyLDE1NjIgKzM1MzYyLDE2IEBACiAKIAogCi0KLQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGludHR5cGVzLmgiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaW50dHlwZXMuaC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7Z2xfY3ZfaGVhZGVyX2ludHR5cGVzX2grc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlLi4uICIgPiY2OyB9CitpZiAke2d0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBndF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBMSUJTPSIkTElCUyAtV2wsLWZyYW1ld29yayAtV2wsQ29yZUZvdW5kYXRpb24iCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotaW50Ci1tYWluICgpCi17Ci11aW50bWF4X3QgaSA9ICh1aW50bWF4X3QpIC0xOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBnbF9jdl9oZWFkZXJfaW50dHlwZXNfaD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZ2xfY3ZfaGVhZGVyX2ludHR5cGVzX2g9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGdsX2N2X2hlYWRlcl9pbnR0eXBlc19oIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRnbF9jdl9oZWFkZXJfaW50dHlwZXNfaCIgPiY2Ci0gIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWCAxCi1fQUNFT0YKLQotICBmaQotCi0KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdGRpbnQuaCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdGRpbnQuaC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7Z2xfY3ZfaGVhZGVyX3N0ZGludF9oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotaW50Ci1tYWluICgpCi17Ci11aW50bWF4X3QgaSA9ICh1aW50bWF4X3QpIC0xOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBnbF9jdl9oZWFkZXJfc3RkaW50X2g9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWdsX2N2X2hlYWRlcl9zdGRpbnRfaD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZ2xfY3ZfaGVhZGVyX3N0ZGludF9oIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRnbF9jdl9oZWFkZXJfc3RkaW50X2giID4mNgotICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfc3RkaW50X2ggPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCAxCi1fQUNFT0YKLQotICBmaQotCi0KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1bnNpZ25lZCBsb25nIGxvbmciID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdW5zaWduZWQgbG9uZyBsb25nLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLXVuc2lnbmVkIGxvbmcgbG9uZyB1bGwgPSAxVUxMOyBpbnQgaSA9IDYzOwotaW50Ci1tYWluICgpCi17Ci11bnNpZ25lZCBsb25nIGxvbmcgdWxsbWF4ID0gKHVuc2lnbmVkIGxvbmcgbG9uZykgLTE7Ci0gICAgIHJldHVybiB1bGwgPDwgaSB8IHVsbCA+PiBpIHwgdWxsbWF4IC8gdWxsIHwgdWxsbWF4ICUgdWxsOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmc9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmciID4mNgotICBpZiB0ZXN0ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZyA9IHllczsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX1VOU0lHTkVEX0xPTkdfTE9ORyAxCi1fQUNFT0YKLQotICBmaQotCi0KLQotCi0gIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9pbnR0eXBlc19oID0gbm8gJiYgdGVzdCAkZ2xfY3ZfaGVhZGVyX3N0ZGludF9oID0gbm87IHRoZW4KLQotICAgIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nID0geWVzIFwKLSAgICAgICYmIGFjX3R5cGU9J3Vuc2lnbmVkIGxvbmcgbG9uZycgXAotICAgICAgfHwgYWNfdHlwZT0ndW5zaWduZWQgbG9uZycKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSB1aW50bWF4X3QgJGFjX3R5cGUKLV9BQ0VPRgotCi0gIGVsc2UKLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9VSU5UTUFYX1QgMQotX0FDRU9GCi0KLSAgZmkKLQotCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBzdHJkdXAgaXMgZGVjbGFyZWQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHN0cmR1cCBpcyBkZWNsYXJlZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGF2ZV9kZWNsX3N0cmR1cCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLSNpZm5kZWYgc3RyZHVwCi0gIGNoYXIgKnAgPSAoY2hhciAqKSBzdHJkdXA7Ci0jZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9oYXZlX2RlY2xfc3RyZHVwPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9oYXZlX2RlY2xfc3RyZHVwPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfc3RyZHVwIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfc3RyZHVwIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9zdHJkdXAgPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0RFQ0xfU1RSRFVQIDEKLV9BQ0VPRgotCi0KLWVsc2UKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0RFQ0xfU1RSRFVQIDAKLV9BQ0VPRgotCi0KLWZpCi0KLQotCi0KLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHN0cm5kdXAgaXMgZGVjbGFyZWQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHN0cm5kdXAgaXMgZGVjbGFyZWQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hhdmVfZGVjbF9zdHJuZHVwK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotI2lmbmRlZiBzdHJuZHVwCi0gIGNoYXIgKnAgPSAoY2hhciAqKSBzdHJuZHVwOwotI2VuZGlmCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfaGF2ZV9kZWNsX3N0cm5kdXA9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2hhdmVfZGVjbF9zdHJuZHVwPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfc3RybmR1cCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX3N0cm5kdXAiID4mNgotaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3N0cm5kdXAgPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0RFQ0xfU1RSTkRVUCAxCi1fQUNFT0YKLQotCi1lbHNlCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ERUNMX1NUUk5EVVAgMAotX0FDRU9GCi0KLQotZmkKLQotCi0KLQotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgc3RybmxlbiBpcyBkZWNsYXJlZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgc3RybmxlbiBpcyBkZWNsYXJlZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGF2ZV9kZWNsX3N0cm5sZW4rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci0jaWZuZGVmIHN0cm5sZW4KLSAgY2hhciAqcCA9IChjaGFyICopIHN0cm5sZW47Ci0jZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9oYXZlX2RlY2xfc3Rybmxlbj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfaGF2ZV9kZWNsX3N0cm5sZW49bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9zdHJubGVuIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfc3RybmxlbiIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfc3RybmxlbiA9IHllczsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfREVDTF9TVFJOTEVOIDEKLV9BQ0VPRgotCi0KLWVsc2UKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0RFQ0xfU1RSTkxFTiAwCi1fQUNFT0YKLQotCi1maQotCi0KLQotCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBjbGVhcmVycl91bmxvY2tlZCBpcyBkZWNsYXJlZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgY2xlYXJlcnJfdW5sb2NrZWQgaXMgZGVjbGFyZWQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hhdmVfZGVjbF9jbGVhcmVycl91bmxvY2tlZCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLSNpZm5kZWYgY2xlYXJlcnJfdW5sb2NrZWQKLSAgY2hhciAqcCA9IChjaGFyICopIGNsZWFyZXJyX3VubG9ja2VkOwotI2VuZGlmCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfaGF2ZV9kZWNsX2NsZWFyZXJyX3VubG9ja2VkPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9oYXZlX2RlY2xfY2xlYXJlcnJfdW5sb2NrZWQ9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9jbGVhcmVycl91bmxvY2tlZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2NsZWFyZXJyX3VubG9ja2VkIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9jbGVhcmVycl91bmxvY2tlZCA9IHllczsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfREVDTF9DTEVBUkVSUl9VTkxPQ0tFRCAxCi1fQUNFT0YKLQotCi1lbHNlCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ERUNMX0NMRUFSRVJSX1VOTE9DS0VEIDAKLV9BQ0VPRgotCi0KLWZpCi0KLQotCi0KLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGZlb2ZfdW5sb2NrZWQgaXMgZGVjbGFyZWQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGZlb2ZfdW5sb2NrZWQgaXMgZGVjbGFyZWQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hhdmVfZGVjbF9mZW9mX3VubG9ja2VkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotI2lmbmRlZiBmZW9mX3VubG9ja2VkCi0gIGNoYXIgKnAgPSAoY2hhciAqKSBmZW9mX3VubG9ja2VkOwotI2VuZGlmCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfaGF2ZV9kZWNsX2Zlb2ZfdW5sb2NrZWQ9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2hhdmVfZGVjbF9mZW9mX3VubG9ja2VkPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZmVvZl91bmxvY2tlZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2Zlb2ZfdW5sb2NrZWQiID4mNgotaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX2Zlb2ZfdW5sb2NrZWQgPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0RFQ0xfRkVPRl9VTkxPQ0tFRCAxCi1fQUNFT0YKLQotCi1lbHNlCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ERUNMX0ZFT0ZfVU5MT0NLRUQgMAotX0FDRU9GCi0KLQotZmkKLQotCi0KLQotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgZmVycm9yX3VubG9ja2VkIGlzIGRlY2xhcmVkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBmZXJyb3JfdW5sb2NrZWQgaXMgZGVjbGFyZWQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hhdmVfZGVjbF9mZXJyb3JfdW5sb2NrZWQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci0jaWZuZGVmIGZlcnJvcl91bmxvY2tlZAotICBjaGFyICpwID0gKGNoYXIgKikgZmVycm9yX3VubG9ja2VkOwotI2VuZGlmCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfaGF2ZV9kZWNsX2ZlcnJvcl91bmxvY2tlZD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfaGF2ZV9kZWNsX2ZlcnJvcl91bmxvY2tlZD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2ZlcnJvcl91bmxvY2tlZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2ZlcnJvcl91bmxvY2tlZCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfZmVycm9yX3VubG9ja2VkID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ERUNMX0ZFUlJPUl9VTkxPQ0tFRCAxCi1fQUNFT0YKLQotCi1lbHNlCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ERUNMX0ZFUlJPUl9VTkxPQ0tFRCAwCi1fQUNFT0YKLQotCi1maQotCi0KLQotCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBmZmx1c2hfdW5sb2NrZWQgaXMgZGVjbGFyZWQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGZmbHVzaF91bmxvY2tlZCBpcyBkZWNsYXJlZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGF2ZV9kZWNsX2ZmbHVzaF91bmxvY2tlZCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLSNpZm5kZWYgZmZsdXNoX3VubG9ja2VkCi0gIGNoYXIgKnAgPSAoY2hhciAqKSBmZmx1c2hfdW5sb2NrZWQ7Ci0jZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9oYXZlX2RlY2xfZmZsdXNoX3VubG9ja2VkPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9oYXZlX2RlY2xfZmZsdXNoX3VubG9ja2VkPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZmZsdXNoX3VubG9ja2VkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZmZsdXNoX3VubG9ja2VkIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9mZmx1c2hfdW5sb2NrZWQgPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0RFQ0xfRkZMVVNIX1VOTE9DS0VEIDEKLV9BQ0VPRgotCi0KLWVsc2UKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0RFQ0xfRkZMVVNIX1VOTE9DS0VEIDAKLV9BQ0VPRgotCi0KLWZpCi0KLQotCi0KLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGZnZXRzX3VubG9ja2VkIGlzIGRlY2xhcmVkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBmZ2V0c191bmxvY2tlZCBpcyBkZWNsYXJlZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGF2ZV9kZWNsX2ZnZXRzX3VubG9ja2VkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotI2lmbmRlZiBmZ2V0c191bmxvY2tlZAotICBjaGFyICpwID0gKGNoYXIgKikgZmdldHNfdW5sb2NrZWQ7Ci0jZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9oYXZlX2RlY2xfZmdldHNfdW5sb2NrZWQ9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2hhdmVfZGVjbF9mZ2V0c191bmxvY2tlZD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2ZnZXRzX3VubG9ja2VkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZmdldHNfdW5sb2NrZWQiID4mNgotaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX2ZnZXRzX3VubG9ja2VkID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ERUNMX0ZHRVRTX1VOTE9DS0VEIDEKLV9BQ0VPRgotCi0KLWVsc2UKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0RFQ0xfRkdFVFNfVU5MT0NLRUQgMAotX0FDRU9GCi0KLQotZmkKLQotCi0KLQotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgZnB1dGNfdW5sb2NrZWQgaXMgZGVjbGFyZWQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGZwdXRjX3VubG9ja2VkIGlzIGRlY2xhcmVkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9oYXZlX2RlY2xfZnB1dGNfdW5sb2NrZWQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci0jaWZuZGVmIGZwdXRjX3VubG9ja2VkCi0gIGNoYXIgKnAgPSAoY2hhciAqKSBmcHV0Y191bmxvY2tlZDsKLSNlbmRpZgotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2hhdmVfZGVjbF9mcHV0Y191bmxvY2tlZD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfaGF2ZV9kZWNsX2ZwdXRjX3VubG9ja2VkPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZnB1dGNfdW5sb2NrZWQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9mcHV0Y191bmxvY2tlZCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfZnB1dGNfdW5sb2NrZWQgPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0RFQ0xfRlBVVENfVU5MT0NLRUQgMQotX0FDRU9GCi0KLQotZWxzZQotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfREVDTF9GUFVUQ19VTkxPQ0tFRCAwCi1fQUNFT0YKLQotCi1maQotCi0KLQotCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBmcHV0c191bmxvY2tlZCBpcyBkZWNsYXJlZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgZnB1dHNfdW5sb2NrZWQgaXMgZGVjbGFyZWQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hhdmVfZGVjbF9mcHV0c191bmxvY2tlZCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLSNpZm5kZWYgZnB1dHNfdW5sb2NrZWQKLSAgY2hhciAqcCA9IChjaGFyICopIGZwdXRzX3VubG9ja2VkOwotI2VuZGlmCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfaGF2ZV9kZWNsX2ZwdXRzX3VubG9ja2VkPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9oYXZlX2RlY2xfZnB1dHNfdW5sb2NrZWQ9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9mcHV0c191bmxvY2tlZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2ZwdXRzX3VubG9ja2VkIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9mcHV0c191bmxvY2tlZCA9IHllczsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfREVDTF9GUFVUU19VTkxPQ0tFRCAxCi1fQUNFT0YKLQotCi1lbHNlCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ERUNMX0ZQVVRTX1VOTE9DS0VEIDAKLV9BQ0VPRgotCi0KLWZpCi0KLQotCi0KLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGZyZWFkX3VubG9ja2VkIGlzIGRlY2xhcmVkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBmcmVhZF91bmxvY2tlZCBpcyBkZWNsYXJlZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGF2ZV9kZWNsX2ZyZWFkX3VubG9ja2VkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotI2lmbmRlZiBmcmVhZF91bmxvY2tlZAotICBjaGFyICpwID0gKGNoYXIgKikgZnJlYWRfdW5sb2NrZWQ7Ci0jZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9oYXZlX2RlY2xfZnJlYWRfdW5sb2NrZWQ9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2hhdmVfZGVjbF9mcmVhZF91bmxvY2tlZD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2ZyZWFkX3VubG9ja2VkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZnJlYWRfdW5sb2NrZWQiID4mNgotaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX2ZyZWFkX3VubG9ja2VkID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ERUNMX0ZSRUFEX1VOTE9DS0VEIDEKLV9BQ0VPRgotCi0KLWVsc2UKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0RFQ0xfRlJFQURfVU5MT0NLRUQgMAotX0FDRU9GCi0KLQotZmkKLQotCi0KLQotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgZndyaXRlX3VubG9ja2VkIGlzIGRlY2xhcmVkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBmd3JpdGVfdW5sb2NrZWQgaXMgZGVjbGFyZWQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hhdmVfZGVjbF9md3JpdGVfdW5sb2NrZWQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci0jaWZuZGVmIGZ3cml0ZV91bmxvY2tlZAotICBjaGFyICpwID0gKGNoYXIgKikgZndyaXRlX3VubG9ja2VkOwotI2VuZGlmCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfaGF2ZV9kZWNsX2Z3cml0ZV91bmxvY2tlZD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfaGF2ZV9kZWNsX2Z3cml0ZV91bmxvY2tlZD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2Z3cml0ZV91bmxvY2tlZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2Z3cml0ZV91bmxvY2tlZCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfZndyaXRlX3VubG9ja2VkID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ERUNMX0ZXUklURV9VTkxPQ0tFRCAxCi1fQUNFT0YKLQotCi1lbHNlCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ERUNMX0ZXUklURV9VTkxPQ0tFRCAwCi1fQUNFT0YKLQotCi1maQotCi0KLQotCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBnZXRjX3VubG9ja2VkIGlzIGRlY2xhcmVkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBnZXRjX3VubG9ja2VkIGlzIGRlY2xhcmVkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9oYXZlX2RlY2xfZ2V0Y191bmxvY2tlZCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLSNpZm5kZWYgZ2V0Y191bmxvY2tlZAotICBjaGFyICpwID0gKGNoYXIgKikgZ2V0Y191bmxvY2tlZDsKLSNlbmRpZgotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2hhdmVfZGVjbF9nZXRjX3VubG9ja2VkPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9oYXZlX2RlY2xfZ2V0Y191bmxvY2tlZD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2dldGNfdW5sb2NrZWQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9nZXRjX3VubG9ja2VkIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9nZXRjX3VubG9ja2VkID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ERUNMX0dFVENfVU5MT0NLRUQgMQotX0FDRU9GCi0KLQotZWxzZQotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfREVDTF9HRVRDX1VOTE9DS0VEIDAKLV9BQ0VPRgotCi0KLWZpCi0KLQotCi0KLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGdldGNoYXJfdW5sb2NrZWQgaXMgZGVjbGFyZWQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGdldGNoYXJfdW5sb2NrZWQgaXMgZGVjbGFyZWQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hhdmVfZGVjbF9nZXRjaGFyX3VubG9ja2VkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotI2lmbmRlZiBnZXRjaGFyX3VubG9ja2VkCi0gIGNoYXIgKnAgPSAoY2hhciAqKSBnZXRjaGFyX3VubG9ja2VkOwotI2VuZGlmCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfaGF2ZV9kZWNsX2dldGNoYXJfdW5sb2NrZWQ9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2hhdmVfZGVjbF9nZXRjaGFyX3VubG9ja2VkPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZ2V0Y2hhcl91bmxvY2tlZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2dldGNoYXJfdW5sb2NrZWQiID4mNgotaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX2dldGNoYXJfdW5sb2NrZWQgPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0RFQ0xfR0VUQ0hBUl9VTkxPQ0tFRCAxCi1fQUNFT0YKLQotCi1lbHNlCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ERUNMX0dFVENIQVJfVU5MT0NLRUQgMAotX0FDRU9GCi0KLQotZmkKLQotCi0KLQotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgcHV0Y191bmxvY2tlZCBpcyBkZWNsYXJlZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgcHV0Y191bmxvY2tlZCBpcyBkZWNsYXJlZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGF2ZV9kZWNsX3B1dGNfdW5sb2NrZWQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci0jaWZuZGVmIHB1dGNfdW5sb2NrZWQKLSAgY2hhciAqcCA9IChjaGFyICopIHB1dGNfdW5sb2NrZWQ7Ci0jZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9oYXZlX2RlY2xfcHV0Y191bmxvY2tlZD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfaGF2ZV9kZWNsX3B1dGNfdW5sb2NrZWQ9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9wdXRjX3VubG9ja2VkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfcHV0Y191bmxvY2tlZCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfcHV0Y191bmxvY2tlZCA9IHllczsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfREVDTF9QVVRDX1VOTE9DS0VEIDEKLV9BQ0VPRgotCi0KLWVsc2UKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0RFQ0xfUFVUQ19VTkxPQ0tFRCAwCi1fQUNFT0YKLQotCi1maQotCi0KLQotCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBwdXRjaGFyX3VubG9ja2VkIGlzIGRlY2xhcmVkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBwdXRjaGFyX3VubG9ja2VkIGlzIGRlY2xhcmVkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9oYXZlX2RlY2xfcHV0Y2hhcl91bmxvY2tlZCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLSNpZm5kZWYgcHV0Y2hhcl91bmxvY2tlZAotICBjaGFyICpwID0gKGNoYXIgKikgcHV0Y2hhcl91bmxvY2tlZDsKLSNlbmRpZgotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2hhdmVfZGVjbF9wdXRjaGFyX3VubG9ja2VkPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9oYXZlX2RlY2xfcHV0Y2hhcl91bmxvY2tlZD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX3B1dGNoYXJfdW5sb2NrZWQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9wdXRjaGFyX3VubG9ja2VkIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9wdXRjaGFyX3VubG9ja2VkID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ERUNMX1BVVENIQVJfVU5MT0NLRUQgMQotX0FDRU9GCi0KLQotZWxzZQotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfREVDTF9QVVRDSEFSX1VOTE9DS0VEIDAKLV9BQ0VPRgotCi0KLWZpCi0KLQotCi0KLQotCi0KLSAgY2FzZSAkTElCT0JKUyBpbgotICAgICJkaXJuYW1lLiRhY19vYmpleHQiICAgfCBcCi0gICoiIGRpcm5hbWUuJGFjX29iamV4dCIgICB8IFwKLSAgICAiZGlybmFtZS4kYWNfb2JqZXh0ICIqIHwgXAotICAqIiBkaXJuYW1lLiRhY19vYmpleHQgIiogKSA7OwotICAqKSBMSUJPQkpTPSIkTElCT0JKUyBkaXJuYW1lLiRhY19vYmpleHQiIDs7Ci1lc2FjCi0KLQotCi0KLQotCi0KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBlcnJvcl9hdF9saW5lIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGVycm9yX2F0X2xpbmUuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9lcnJvcl9hdF9saW5lK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotZXJyb3JfYXRfbGluZSAoMCwgMCwgIiIsIDAsICIiKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmU9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9lcnJvcl9hdF9saW5lPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9lcnJvcl9hdF9saW5lIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9lcnJvcl9hdF9saW5lID0gbm87IHRoZW4KLSAgY2FzZSAkTElCT0JKUyBpbgotICAgICJlcnJvci4kYWNfb2JqZXh0IiAgIHwgXAotICAqIiBlcnJvci4kYWNfb2JqZXh0IiAgIHwgXAotICAgICJlcnJvci4kYWNfb2JqZXh0ICIqIHwgXAotICAqIiBlcnJvci4kYWNfb2JqZXh0ICIqICkgOzsKLSAgKikgTElCT0JKUz0iJExJQk9CSlMgZXJyb3IuJGFjX29iamV4dCIgOzsKLWVzYWMKLQotZmkKLQotCi0KLSAgOgotCi0KLQotCi0KLQotICBjYXNlICRMSUJPQkpTIGluCi0gICAgImV4aXRmYWlsLiRhY19vYmpleHQiICAgfCBcCi0gICoiIGV4aXRmYWlsLiRhY19vYmpleHQiICAgfCBcCi0gICAgImV4aXRmYWlsLiRhY19vYmpleHQgIiogfCBcCi0gICoiIGV4aXRmYWlsLiRhY19vYmpleHQgIiogKSA7OwotICAqKSBMSUJPQkpTPSIkTElCT0JKUyBleGl0ZmFpbC4kYWNfb2JqZXh0IiA7OwotZXNhYwotCi0KLSAgICA6Ci0KLQotCi0KLQotICBpZiB0ZXN0IC1uICIkR0VUT1BUX0giOyB0aGVuCi0KLSAgY2FzZSAkTElCT0JKUyBpbgotICAgICJnZXRvcHQuJGFjX29iamV4dCIgICB8IFwKLSAgKiIgZ2V0b3B0LiRhY19vYmpleHQiICAgfCBcCi0gICAgImdldG9wdC4kYWNfb2JqZXh0ICIqIHwgXAotICAqIiBnZXRvcHQuJGFjX29iamV4dCAiKiApIDs7Ci0gICopIExJQk9CSlM9IiRMSUJPQkpTIGdldG9wdC4kYWNfb2JqZXh0IiA7OwotZXNhYwotCi0gIGNhc2UgJExJQk9CSlMgaW4KLSAgICAiZ2V0b3B0MS4kYWNfb2JqZXh0IiAgIHwgXAotICAqIiBnZXRvcHQxLiRhY19vYmpleHQiICAgfCBcCi0gICAgImdldG9wdDEuJGFjX29iamV4dCAiKiB8IFwKLSAgKiIgZ2V0b3B0MS4kYWNfb2JqZXh0ICIqICkgOzsKLSAgKikgTElCT0JKUz0iJExJQk9CSlMgZ2V0b3B0MS4kYWNfb2JqZXh0IiA7OwotZXNhYwotCi0KLSAgR0VUT1BUX0g9Z2V0b3B0LmgKLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgX19HRVRPUFRfUFJFRklYIHJwbF8KLV9BQ0VPRgotCi0KLQotCi0KLSAgOgotCi0KLQotCi0KLQotCi1maQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIENGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2d0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBndF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCi0gICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlRm91bmRhdGlvbi5mcmFtZXdvcmsvSGVhZGVycyIKLSAgICAgZ3Rfc2F2ZV9MSUJTPSIkTElCUyIKLSAgICAgTElCUz0iJExJQlMgLWZyYW1ld29yayBDb3JlRm91bmRhdGlvbiIKLSAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8Q0ZQcmVmZXJlbmNlcy5oPgorI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGUHJlZmVyZW5jZXMuaD4KIGludAogbWFpbiAoKQogewpAQCAtMTIxMDYsNjQgKzM1MzgwLDMyIEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWU9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZT1ubworICBndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWU9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotICAgICBDUFBGTEFHUz0iJGd0X3NhdmVfQ1BQRkxBR1MiCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogICAgICBMSUJTPSIkZ3Rfc2F2ZV9MSUJTIgogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSIgPiY1CiskYXNfZWNobyAiJGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSIgPiY2OyB9CiAgIGlmIHRlc3QgJGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSA9IHllczsgdGhlbgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0NGUFJFRkVSRU5DRVNDT1BZQVBQVkFMVUUgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0NGUFJFRkVSRU5DRVNDT1BZQVBQVkFMVUUgMSIgPj5jb25mZGVmcy5oCiAKICAgZmkKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIENGTG9jYWxlQ29weUN1cnJlbnQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQ0ZMb2NhbGVDb3B5Q3VycmVudC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7Z3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQ0ZMb2NhbGVDb3B5Q3VycmVudCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQ0ZMb2NhbGVDb3B5Q3VycmVudC4uLiAiID4mNjsgfQoraWYgJHtndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBndF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCi0gICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlRm91bmRhdGlvbi5mcmFtZXdvcmsvSGVhZGVycyIKLSAgICAgZ3Rfc2F2ZV9MSUJTPSIkTElCUyIKLSAgICAgTElCUz0iJExJQlMgLWZyYW1ld29yayBDb3JlRm91bmRhdGlvbiIKLSAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGd0X3NhdmVfTElCUz0iJExJQlMiCisgICAgIExJQlM9IiRMSUJTIC1XbCwtZnJhbWV3b3JrIC1XbCxDb3JlRm91bmRhdGlvbiIKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPENGTG9jYWxlLmg+CisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZMb2NhbGUuaD4KIGludAogbWFpbiAoKQogewpAQCAtMTIxNzIsNDYgKzM1NDE0LDIwIEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQ9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudD1ubworICBndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQ9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotICAgICBDUFBGTEFHUz0iJGd0X3NhdmVfQ1BQRkxBR1MiCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogICAgICBMSUJTPSIkZ3Rfc2F2ZV9MSUJTIgogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCIgPiY1CiskYXNfZWNobyAiJGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCIgPiY2OyB9CiAgIGlmIHRlc3QgJGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCA9IHllczsgdGhlbgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0NGTE9DQUxFQ09QWUNVUlJFTlQgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0NGTE9DQUxFQ09QWUNVUlJFTlQgMSIgPj5jb25mZGVmcy5oCiAKICAgZmkKICAgSU5UTF9NQUNPU1hfTElCUz0KQEAgLTEyMjIyLDkxICszNTQzOCw3NyBAQAogCiAKIAotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBOTFMgaXMgcmVxdWVzdGVkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBOTFMgaXMgcmVxdWVzdGVkLi4uICRFQ0hPX0MiID4mNgotICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ubHMgb3IgLS1kaXNhYmxlLW5scyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9ubHMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX25scyIKLSAgVVNFX05MUz0kZW5hYmxldmFsCi1lbHNlCi0gIFVTRV9OTFM9eWVzCi1maTsKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFVTRV9OTFMiID4mNQotZWNobyAiJHtFQ0hPX1R9JFVTRV9OTFMiID4mNgotCi0KIAogCiAgIExJQklOVEw9CiAgIExUTElCSU5UTD0KICAgUE9TVUI9CiAKKyAgICBjYXNlICIgJGd0X25lZWRzICIgaW4KKyAgICAqIiBuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3MgIiopIGd0X2FwaV92ZXJzaW9uPTMgOzsKKyAgICAqIiBuZWVkLW5nZXR0ZXh0ICIqKSBndF9hcGlfdmVyc2lvbj0yIDs7CisgICAgKikgZ3RfYXBpX3ZlcnNpb249MSA7OworICBlc2FjCisgIGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjPSJndF9jdl9mdW5jX2dudWdldHRleHQke2d0X2FwaV92ZXJzaW9ufV9saWJjIgorICBndF9mdW5jX2dudWdldHRleHRfbGliaW50bD0iZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0JHtndF9hcGlfdmVyc2lvbn1fbGliaW50bCIKKwogICAgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCiAgICAgZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0PW5vCiAKIAorICAgICAgICBpZiB0ZXN0ICRndF9hcGlfdmVyc2lvbiAtZ2UgMzsgdGhlbgorICAgICAgICAgIGd0X3JldmlzaW9uX3Rlc3RfY29kZT0nCisjaWZuZGVmIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OCisjZGVmaW5lIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKG1ham9yKSAoKG1ham9yKSA9PSAwID8gMCA6IC0xKQorI2VuZGlmCit0eXBlZGVmIGludCBhcnJheSBbMiAqIChfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTigwKSA+PSAxKSAtIDFdOworJworICAgICAgICBlbHNlCisgICAgICAgICAgZ3RfcmV2aXNpb25fdGVzdF9jb2RlPQorICAgICAgICBmaQorICAgICAgICBpZiB0ZXN0ICRndF9hcGlfdmVyc2lvbiAtZ2UgMjsgdGhlbgorICAgICAgICAgIGd0X2V4cHJlc3Npb25fdGVzdF9jb2RlPScgKyAqIG5nZXR0ZXh0ICgiIiwgIiIsIDApJworICAgICAgICBlbHNlCisgICAgICAgICAgZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGU9CisgICAgICAgIGZpCiAKLQotCi0KLSAgICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBHTlUgZ2V0dGV4dCBpbiBsaWJjIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEdOVSBnZXR0ZXh0IGluIGxpYmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2d0X2N2X2Z1bmNfZ251Z2V0dGV4dDFfbGliYytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHTlUgZ2V0dGV4dCBpbiBsaWJjIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBHTlUgZ2V0dGV4dCBpbiBsaWJjLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyRndF9mdW5jX2dudWdldHRleHRfbGliYys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCisKICNpbmNsdWRlIDxsaWJpbnRsLmg+CiskZ3RfcmV2aXNpb25fdGVzdF9jb2RlCiBleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CiBleHRlcm4gaW50ICpfbmxfZG9tYWluX2JpbmRpbmdzOworCiBpbnQKIG1haW4gKCkKIHsKKwogYmluZHRleHRkb21haW4gKCIiLCAiIik7Ci1yZXR1cm4gKiBnZXR0ZXh0ICgiIikgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9kb21haW5fYmluZGluZ3MKK3JldHVybiAqIGdldHRleHQgKCIiKSRndF9leHByZXNzaW9uX3Rlc3RfY29kZSArIF9ubF9tc2dfY2F0X2NudHIgKyAqX25sX2RvbWFpbl9iaW5kaW5ncworCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGd0X2N2X2Z1bmNfZ251Z2V0dGV4dDFfbGliYz15ZXMKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjPXllcyIKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0MV9saWJjPW5vCisgIGV2YWwgIiRndF9mdW5jX2dudWdldHRleHRfbGliYz1ubyIKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0MV9saWJjIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRndF9jdl9mdW5jX2dudWdldHRleHQxX2xpYmMiID4mNgorZXZhbCBhY19yZXM9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQogCi0gICAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2dudWdldHRleHQxX2xpYmMiICE9ICJ5ZXMiOyB0aGVuCisgICAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjIjsgdGVzdCAiJGd0X3ZhbCIgIT0gInllcyI7IH07IHRoZW4KIAogCiAKQEAgLTEyMzM3LDEzMCArMzU1MzksMjE4IEBACiAgIGRvbmUKIAogCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaWNvbnYiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaWNvbnYuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FtX2N2X2Z1bmNfaWNvbnYrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgaWNvbnYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGljb252Li4uICIgPiY2OyB9CitpZiAke2FtX2N2X2Z1bmNfaWNvbnYrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogCiAgICAgYW1fY3ZfZnVuY19pY29udj0ibm8sIGNvbnNpZGVyIGluc3RhbGxpbmcgR05VIGxpYmljb252IgogICAgIGFtX2N2X2xpYl9pY29udj1ubwotICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKwogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPGljb252Lmg+CisKIGludAogbWFpbiAoKQogewogaWNvbnZfdCBjZCA9IGljb252X29wZW4oIiIsIiIpOwotICAgICAgIGljb252KGNkLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgICAgIGljb252X2Nsb3NlKGNkKTsKKyAgICAgICAgICAgaWNvbnYoY2QsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgICAgICAgIGljb252X2Nsb3NlKGNkKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYW1fY3ZfZnVuY19pY29udj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogICAgIGlmIHRlc3QgIiRhbV9jdl9mdW5jX2ljb252IiAhPSB5ZXM7IHRoZW4KICAgICAgIGFtX3NhdmVfTElCUz0iJExJQlMiCiAgICAgICBMSUJTPSIkTElCUyAkTElCSUNPTlYiCi0gICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKwogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPGljb252Lmg+CisKIGludAogbWFpbiAoKQogewogaWNvbnZfdCBjZCA9IGljb252X29wZW4oIiIsIiIpOwotICAgICAgICAgaWNvbnYoY2QsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAgICAgICBpY29udl9jbG9zZShjZCk7CisgICAgICAgICAgICAgaWNvbnYoY2QsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgICAgICAgICAgaWNvbnZfY2xvc2UoY2QpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhbV9jdl9saWJfaWNvbnY9eWVzCiAgICAgICAgIGFtX2N2X2Z1bmNfaWNvbnY9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKICAgICAgIExJQlM9IiRhbV9zYXZlX0xJQlMiCiAgICAgZmkKIAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhbV9jdl9mdW5jX2ljb252IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhbV9jdl9mdW5jX2ljb252IiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfZnVuY19pY29udiIgPiY1CiskYXNfZWNobyAiJGFtX2N2X2Z1bmNfaWNvbnYiID4mNjsgfQogICBpZiB0ZXN0ICIkYW1fY3ZfZnVuY19pY29udiIgPSB5ZXM7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIGljb252IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB3b3JraW5nIGljb252Li4uICIgPiY2OyB9CitpZiAke2FtX2N2X2Z1bmNfaWNvbnZfd29ya3MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0lDT05WIDEKKyAgICAgICAgICAgICAgICAgIGFtX3NhdmVfTElCUz0iJExJQlMiCisgICAgICBpZiB0ZXN0ICRhbV9jdl9saWJfaWNvbnYgPSB5ZXM7IHRoZW4KKyAgICAgICAgTElCUz0iJExJQlMgJExJQklDT05WIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKworICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgIGFpeCogfCBocHV4KikgYW1fY3ZfZnVuY19pY29udl93b3Jrcz0iZ3Vlc3Npbmcgbm8iIDs7CisgICAgICAgICAgICopICAgICAgICAgICAgYW1fY3ZfZnVuY19pY29udl93b3Jrcz0iZ3Vlc3NpbmcgeWVzIiA7OworICAgICAgICAgZXNhYworCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPGljb252Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CitpbnQgbWFpbiAoKQoreworICBpbnQgcmVzdWx0ID0gMDsKKyAgLyogVGVzdCBhZ2FpbnN0IEFJWCA1LjEgYnVnOiBGYWlsdXJlcyBhcmUgbm90IGRpc3Rpbmd1aXNoYWJsZSBmcm9tIHN1Y2Nlc3NmdWwKKyAgICAgcmV0dXJucy4gICovCisgIHsKKyAgICBpY29udl90IGNkX3V0ZjhfdG9fODg1OTEgPSBpY29udl9vcGVuICgiSVNPODg1OS0xIiwgIlVURi04Iik7CisgICAgaWYgKGNkX3V0ZjhfdG9fODg1OTEgIT0gKGljb252X3QpKC0xKSkKKyAgICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgaW5wdXRbXSA9ICJcMzQyXDIwMlwyNTQiOyAvKiBFVVJPIFNJR04gKi8KKyAgICAgICAgY2hhciBidWZbMTBdOworICAgICAgICBjb25zdCBjaGFyICppbnB0ciA9IGlucHV0OworICAgICAgICBzaXplX3QgaW5ieXRlc2xlZnQgPSBzdHJsZW4gKGlucHV0KTsKKyAgICAgICAgY2hhciAqb3V0cHRyID0gYnVmOworICAgICAgICBzaXplX3Qgb3V0Ynl0ZXNsZWZ0ID0gc2l6ZW9mIChidWYpOworICAgICAgICBzaXplX3QgcmVzID0gaWNvbnYgKGNkX3V0ZjhfdG9fODg1OTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopICZpbnB0ciwgJmluYnl0ZXNsZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRwdHIsICZvdXRieXRlc2xlZnQpOworICAgICAgICBpZiAocmVzID09IDApCisgICAgICAgICAgcmVzdWx0IHw9IDE7CisgICAgICAgIGljb252X2Nsb3NlIChjZF91dGY4X3RvXzg4NTkxKTsKKyAgICAgIH0KKyAgfQorICAvKiBUZXN0IGFnYWluc3QgU29sYXJpcyAxMCBidWc6IEZhaWx1cmVzIGFyZSBub3QgZGlzdGluZ3Vpc2hhYmxlIGZyb20KKyAgICAgc3VjY2Vzc2Z1bCByZXR1cm5zLiAgKi8KKyAgeworICAgIGljb252X3QgY2RfYXNjaWlfdG9fODg1OTEgPSBpY29udl9vcGVuICgiSVNPODg1OS0xIiwgIjY0NiIpOworICAgIGlmIChjZF9hc2NpaV90b184ODU5MSAhPSAoaWNvbnZfdCkoLTEpKQorICAgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBpbnB1dFtdID0gIlwyNjMiOworICAgICAgICBjaGFyIGJ1ZlsxMF07CisgICAgICAgIGNvbnN0IGNoYXIgKmlucHRyID0gaW5wdXQ7CisgICAgICAgIHNpemVfdCBpbmJ5dGVzbGVmdCA9IHN0cmxlbiAoaW5wdXQpOworICAgICAgICBjaGFyICpvdXRwdHIgPSBidWY7CisgICAgICAgIHNpemVfdCBvdXRieXRlc2xlZnQgPSBzaXplb2YgKGJ1Zik7CisgICAgICAgIHNpemVfdCByZXMgPSBpY29udiAoY2RfYXNjaWlfdG9fODg1OTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopICZpbnB0ciwgJmluYnl0ZXNsZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRwdHIsICZvdXRieXRlc2xlZnQpOworICAgICAgICBpZiAocmVzID09IDApCisgICAgICAgICAgcmVzdWx0IHw9IDI7CisgICAgICAgIGljb252X2Nsb3NlIChjZF9hc2NpaV90b184ODU5MSk7CisgICAgICB9CisgIH0KKyAgLyogVGVzdCBhZ2FpbnN0IEFJWCA2LjEuLjcuMSBidWc6IEJ1ZmZlciBvdmVycnVuLiAgKi8KKyAgeworICAgIGljb252X3QgY2RfODg1OTFfdG9fdXRmOCA9IGljb252X29wZW4gKCJVVEYtOCIsICJJU08tODg1OS0xIik7CisgICAgaWYgKGNkXzg4NTkxX3RvX3V0ZjggIT0gKGljb252X3QpKC0xKSkKKyAgICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgaW5wdXRbXSA9ICJcMzA0IjsKKyAgICAgICAgc3RhdGljIGNoYXIgYnVmWzJdID0geyAoY2hhcikweERFLCAoY2hhcikweEFEIH07CisgICAgICAgIGNvbnN0IGNoYXIgKmlucHRyID0gaW5wdXQ7CisgICAgICAgIHNpemVfdCBpbmJ5dGVzbGVmdCA9IDE7CisgICAgICAgIGNoYXIgKm91dHB0ciA9IGJ1ZjsKKyAgICAgICAgc2l6ZV90IG91dGJ5dGVzbGVmdCA9IDE7CisgICAgICAgIHNpemVfdCByZXMgPSBpY29udiAoY2RfODg1OTFfdG9fdXRmOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikgJmlucHRyLCAmaW5ieXRlc2xlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dHB0ciwgJm91dGJ5dGVzbGVmdCk7CisgICAgICAgIGlmIChyZXMgIT0gKHNpemVfdCkoLTEpIHx8IG91dHB0ciAtIGJ1ZiA+IDEgfHwgYnVmWzFdICE9IChjaGFyKTB4QUQpCisgICAgICAgICAgcmVzdWx0IHw9IDQ7CisgICAgICAgIGljb252X2Nsb3NlIChjZF84ODU5MV90b191dGY4KTsKKyAgICAgIH0KKyAgfQorI2lmIDAgLyogVGhpcyBidWcgY291bGQgYmUgd29ya2VkIGFyb3VuZCBieSB0aGUgY2FsbGVyLiAgKi8KKyAgLyogVGVzdCBhZ2FpbnN0IEhQLVVYIDExLjExIGJ1ZzogUG9zaXRpdmUgcmV0dXJuIHZhbHVlIGluc3RlYWQgb2YgMC4gICovCisgIHsKKyAgICBpY29udl90IGNkXzg4NTkxX3RvX3V0ZjggPSBpY29udl9vcGVuICgidXRmOCIsICJpc284ODU5MSIpOworICAgIGlmIChjZF84ODU5MV90b191dGY4ICE9IChpY29udl90KSgtMSkpCisgICAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGlucHV0W10gPSAiXDMwNHJnZXIgbWl0IGJcMzY2c2VuIEJcMzc0YmNoZW4gb2huZSBBdWdlbm1hXDMzNyI7CisgICAgICAgIGNoYXIgYnVmWzUwXTsKKyAgICAgICAgY29uc3QgY2hhciAqaW5wdHIgPSBpbnB1dDsKKyAgICAgICAgc2l6ZV90IGluYnl0ZXNsZWZ0ID0gc3RybGVuIChpbnB1dCk7CisgICAgICAgIGNoYXIgKm91dHB0ciA9IGJ1ZjsKKyAgICAgICAgc2l6ZV90IG91dGJ5dGVzbGVmdCA9IHNpemVvZiAoYnVmKTsKKyAgICAgICAgc2l6ZV90IHJlcyA9IGljb252IChjZF84ODU5MV90b191dGY4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICoqKSAmaW5wdHIsICZpbmJ5dGVzbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0cHRyLCAmb3V0Ynl0ZXNsZWZ0KTsKKyAgICAgICAgaWYgKChpbnQpcmVzID4gMCkKKyAgICAgICAgICByZXN1bHQgfD0gODsKKyAgICAgICAgaWNvbnZfY2xvc2UgKGNkXzg4NTkxX3RvX3V0ZjgpOworICAgICAgfQorICB9CisjZW5kaWYKKyAgLyogVGVzdCBhZ2FpbnN0IEhQLVVYIDExLjExIGJ1ZzogTm8gY29udmVydGVyIGZyb20gRVVDLUpQIHRvIFVURi04IGlzCisgICAgIHByb3ZpZGVkLiAgKi8KKyAgaWYgKC8qIFRyeSBzdGFuZGFyZGl6ZWQgbmFtZXMuICAqLworICAgICAgaWNvbnZfb3BlbiAoIlVURi04IiwgIkVVQy1KUCIpID09IChpY29udl90KSgtMSkKKyAgICAgIC8qIFRyeSBJUklYLCBPU0YvMSBuYW1lcy4gICovCisgICAgICAmJiBpY29udl9vcGVuICgiVVRGLTgiLCAiZXVjSlAiKSA9PSAoaWNvbnZfdCkoLTEpCisgICAgICAvKiBUcnkgQUlYIG5hbWVzLiAgKi8KKyAgICAgICYmIGljb252X29wZW4gKCJVVEYtOCIsICJJQk0tZXVjSlAiKSA9PSAoaWNvbnZfdCkoLTEpCisgICAgICAvKiBUcnkgSFAtVVggbmFtZXMuICAqLworICAgICAgJiYgaWNvbnZfb3BlbiAoInV0ZjgiLCAiZXVjSlAiKSA9PSAoaWNvbnZfdCkoLTEpKQorICAgIHJlc3VsdCB8PSAxNjsKKyAgcmV0dXJuIHJlc3VsdDsKK30KIF9BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGFtX2N2X2Z1bmNfaWNvbnZfd29ya3M9eWVzCitlbHNlCisgIGFtX2N2X2Z1bmNfaWNvbnZfd29ya3M9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgICAgICBMSUJTPSIkYW1fc2F2ZV9MSUJTIgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9mdW5jX2ljb252X3dvcmtzIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfZnVuY19pY29udl93b3JrcyIgPiY2OyB9CisgICAgY2FzZSAiJGFtX2N2X2Z1bmNfaWNvbnZfd29ya3MiIGluCisgICAgICAqbm8pIGFtX2Z1bmNfaWNvbnY9bm8gYW1fY3ZfbGliX2ljb252PW5vIDs7CisgICAgICAqKSAgIGFtX2Z1bmNfaWNvbnY9eWVzIDs7CisgICAgZXNhYworICBlbHNlCisgICAgYW1fZnVuY19pY29udj1ubyBhbV9jdl9saWJfaWNvbnY9bm8KKyAgZmkKKyAgaWYgdGVzdCAiJGFtX2Z1bmNfaWNvbnYiID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfSUNPTlYgMSIgPj5jb25mZGVmcy5oCiAKICAgZmkKICAgaWYgdGVzdCAiJGFtX2N2X2xpYl9pY29udiIgPSB5ZXM7IHRoZW4KLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIGxpbmsgd2l0aCBsaWJpY29udiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byBsaW5rIHdpdGggbGliaWNvbnYuLi4gJEVDSE9fQyIgPiY2Ci0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJExJQklDT05WIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRMSUJJQ09OViIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gbGluayB3aXRoIGxpYmljb252IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBsaW5rIHdpdGggbGliaWNvbnYuLi4gIiA+JjY7IH0KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExJQklDT05WIiA+JjUKKyRhc19lY2hvICIkTElCSUNPTlYiID4mNjsgfQogICBlbHNlCiAgICAgICAgICAgICBDUFBGTEFHUz0iJGFtX3NhdmVfQ1BQRkxBR1MiCiAgICAgTElCSUNPTlY9CkBAIC0xMjQ3Myw2ICszNTc2MywxMCBAQAogCiAKIAorCisKKworCiAgICAgdXNlX2FkZGl0aW9uYWw9eWVzCiAKICAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgpAQCAtMTI0ODcsMTAgKzM1NzgxLDkgQEAKICAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgogCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGliaW50bC1wcmVmaXggb3IgLS13aXRob3V0LWxpYmludGwtcHJlZml4IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9saWJpbnRsX3ByZWZpeCtzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9saWJpbnRsX3ByZWZpeCIKLQorIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJpbnRsLXByZWZpeCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbGliaW50bF9wcmVmaXgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2xpYmludGxfcHJlZml4OwogICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgogICAgICAgdXNlX2FkZGl0aW9uYWw9bm8KICAgICBlbHNlCkBAIC0xMjUxMCwxMyArMzU4MDMsMjAgQEAKICAgICAgIGVsc2UKICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkd2l0aHZhbC9pbmNsdWRlIgogICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvJGFjbF9saWJkaXJzdGVtIgorICAgICAgICBpZiB0ZXN0ICIkYWNsX2xpYmRpcnN0ZW0yIiAhPSAiJGFjbF9saWJkaXJzdGVtIiBcCisgICAgICAgICAgICYmICEgdGVzdCAtZCAiJHdpdGh2YWwvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgorICAgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPSIkd2l0aHZhbC8kYWNsX2xpYmRpcnN0ZW0yIgorICAgICAgICBmaQogICAgICAgZmkKICAgICBmaQogCi1maTsKK2ZpCisKICAgICAgIExJQklOVEw9CiAgIExUTElCSU5UTD0KICAgSU5DSU5UTD0KKyAgTElCSU5UTF9QUkVGSVg9CisgICAgICBIQVZFX0xJQklOVEw9CiAgIHJwYXRoZGlycz0KICAgbHRycGF0aGRpcnM9CiAgIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0KQEAgLTEyNTM0LDcgKzM1ODM0LDcgQEAKICAgICAgIGRvbmUKICAgICAgIGlmIHRlc3QgLXogIiRhbHJlYWR5X2hhbmRsZWQiOyB0aGVuCiAgICAgICAgIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0iJG5hbWVzX2FscmVhZHlfaGFuZGxlZCAkbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVybmFtZT1gZWNobyAiJG5hbWUiIHwgc2VkIC1lICd5fGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tfEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19ffCdgCisgICAgICAgICAgICAgICAgICAgICAgICB1cHBlcm5hbWU9YGVjaG8gIiRuYW1lIiB8IHNlZCAtZSAneXxhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vKy18QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19ffCdgCiAgICAgICAgIGV2YWwgdmFsdWU9XCJcJEhBVkVfTElCJHVwcGVybmFtZVwiCiAgICAgICAgIGlmIHRlc3QgLW4gIiR2YWx1ZSI7IHRoZW4KICAgICAgICAgICBpZiB0ZXN0ICIkdmFsdWUiID0geWVzOyB0aGVuCkBAIC0xMjU1MCwyMiArMzU4NTAsNTIgQEAKICAgICAgICAgICBmb3VuZF9sYT0KICAgICAgICAgICBmb3VuZF9zbz0KICAgICAgICAgICBmb3VuZF9hPQorICAgICAgICAgIGV2YWwgbGlibmFtZT1cIiRhY2xfbGlibmFtZV9zcGVjXCIgICAgIyB0eXBpY2FsbHk6IGxpYm5hbWU9bGliJG5hbWUKKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgorICAgICAgICAgICAgc2hyZXh0PSIuJGFjbF9zaGxpYmV4dCIgICAgICAgICAgICAgIyB0eXBpY2FsbHk6IHNocmV4dD0uc28KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBzaHJleHQ9CisgICAgICAgICAgZmkKICAgICAgICAgICBpZiB0ZXN0ICR1c2VfYWRkaXRpb25hbCA9IHllczsgdGhlbgotICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHNobGliZXh0IiAmJiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJHNobGliZXh0IjsgdGhlbgotICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKLSAgICAgICAgICAgICAgZm91bmRfc289IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kc2hsaWJleHQiCi0gICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5sYSI7IHRoZW4KLSAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIgotICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJGxpYmV4dCI7IHRoZW4KLSAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKLSAgICAgICAgICAgICAgICBmb3VuZF9hPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJGxpYmV4dCIKLSAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiOyB0aGVuCi0gICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIgorICAgICAgICAgICAgZGlyPSIkYWRkaXRpb25hbF9saWJkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0IgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWMiID0gJyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnOyB0aGVuCisgICAgICAgICAgICAgICAgICB2ZXI9YChjZCAiJGRpciIgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gIiRsaWJuYW1lJHNocmV4dCIuKjsgZG8gZWNobyAiJGYiOyBkb25lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICJzLF4kbGlibmFtZSRzaHJleHRcXFxcLiwsIiBcCisgICAgICAgICAgICAgICAgICAgICAgICB8IHNvcnQgLXQgJy4nIC1uIC1yIC1rMSwxIC1rMiwyIC1rMywzIC1rNCw0IC1rNSw1IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIDFxICkgMj4vZGV2L251bGxgCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkdmVyIiAmJiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIgorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBldmFsIGxpYnJhcnlfbmFtZXM9XCIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlY1wiCisgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kZiI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGYiCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGRvbmUKICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbgorICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS5sYSI7IHRoZW4KKyAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci8kbGlibmFtZS5sYSIKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCiAgICAgICAgICAgZmkKICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMVExJQklOVEw7IGRvCkBAIC0xMjU4MSwyMSArMzU5MTEsNDQgQEAKICAgICAgICAgICAgICAgY2FzZSAiJHgiIGluCiAgICAgICAgICAgICAgICAgLUwqKQogICAgICAgICAgICAgICAgICAgZGlyPWBlY2hvICJYJHgiIHwgc2VkIC1lICdzL15YLUwvLydgCi0gICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJleHQiICYmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUuJHNobGliZXh0IjsgdGhlbgotICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCIKLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS5sYSI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci9saWIkbmFtZS5sYSIKLSAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS4kbGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9zaGxpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQiOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgotICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRkaXIvbGliJG5hbWUuJGxpYmV4dCIKLSAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvbGliJG5hbWUubGEiCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0IgorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWMiID0gJyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICB2ZXI9YChjZCAiJGRpciIgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gIiRsaWJuYW1lJHNocmV4dCIuKjsgZG8gZWNobyAiJGYiOyBkb25lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICJzLF4kbGlibmFtZSRzaHJleHRcXFxcLiwsIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNvcnQgLXQgJy4nIC1uIC1yIC1rMSwxIC1rMiwyIC1rMywzIC1rNCw0IC1rNSw1IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIDFxICkgMj4vZGV2L251bGxgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkdmVyIiAmJiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIgorICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBldmFsIGxpYnJhcnlfbmFtZXM9XCIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlY1wiCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kZiI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKICAgICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS5sYSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci8kbGlibmFtZS5sYSIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICBlc2FjCiAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KQEAgLTEyNjA2LDcgKzM1OTU5LDkgQEAKICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICBMVExJQklOVEw9IiR7TFRMSUJJTlRMfSR7TFRMSUJJTlRMOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgogICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9zbyIgIT0gIlgiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiID0gbm8gfHwgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIgPSBubyBcCisgICAgICAgICAgICAgICAgIHx8IHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iIFwKKyAgICAgICAgICAgICAgICAgfHwgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbTIiOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9JGZvdW5kX3NvIgogICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KQEAgLTEyNjE5LDEwICszNTk3NCwxMCBAQAogICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCiAgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRmb3VuZF9kaXIiCiAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9oYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfSRmb3VuZF9zbyIKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgJiYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgJiYgdGVzdCAiJGFjbF9oYXJkY29kZV9taW51c19MIiA9IG5vOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfSRmb3VuZF9zbyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJHJwYXRoZGlyczsgZG8KQEAgLTEyNjU0LDcgKzM2MDA5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfS1MJGZvdW5kX2RpciIKICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiICE9IG5vOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfSRmb3VuZF9zbyIKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfS1sJG5hbWUiCkBAIC0xMjY3Myw2ICszNjAyOCwxNiBAQAogICAgICAgICAgICAgY2FzZSAiJGZvdW5kX2RpciIgaW4KICAgICAgICAgICAgICAgKi8kYWNsX2xpYmRpcnN0ZW0gfCAqLyRhY2xfbGliZGlyc3RlbS8pCiAgICAgICAgICAgICAgICAgYmFzZWRpcj1gZWNobyAiWCRmb3VuZF9kaXIiIHwgc2VkIC1lICdzLF5YLCwnIC1lICJzLC8kYWNsX2xpYmRpcnN0ZW0vIicqJCwsJ2AKKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkbmFtZSIgPSAnaW50bCc7IHRoZW4KKyAgICAgICAgICAgICAgICAgIExJQklOVExfUFJFRklYPSIkYmFzZWRpciIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJGJhc2VkaXIvaW5jbHVkZSIKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAqLyRhY2xfbGliZGlyc3RlbTIgfCAqLyRhY2xfbGliZGlyc3RlbTIvKQorICAgICAgICAgICAgICAgIGJhc2VkaXI9YGVjaG8gIlgkZm91bmRfZGlyIiB8IHNlZCAtZSAncyxeWCwsJyAtZSAicywvJGFjbF9saWJkaXJzdGVtMi8iJyokLCwnYAorICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRuYW1lIiA9ICdpbnRsJzsgdGhlbgorICAgICAgICAgICAgICAgICAgTElCSU5UTF9QUkVGSVg9IiRiYXNlZGlyIgorICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkYmFzZWRpci9pbmNsdWRlIgogICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICBlc2FjCkBAIC0xMjcyMSw5ICszNjA4NiwxMSBAQAogICAgICAgICAgICAgICAgIGNhc2UgIiRkZXAiIGluCiAgICAgICAgICAgICAgICAgICAtTCopCiAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPWBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgIT0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbTIiOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQotICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiID0gIlgvdXNyL2xvY2FsLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC8kYWNsX2xpYmRpcnN0ZW0iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC8kYWNsX2xpYmRpcnN0ZW0yIjsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbnV4KiB8IGdudSogfCBrKmJzZCotZ251KSBoYXZlaXQ9eWVzOzsKQEAgLTEyODIzLDIxICszNjE5MCwyMSBAQAogICAgIGRvbmUKICAgZG9uZQogICBpZiB0ZXN0ICJYJHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgYWxsZGlycz0KICAgICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8KLSAgICAgICAgYWxsZGlycz0iJHthbGxkaXJzfSR7YWxsZGlyczorJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3J9JGZvdW5kX2RpciIKKyAgICAgICAgYWxsZGlycz0iJHthbGxkaXJzfSR7YWxsZGlyczorJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yfSRmb3VuZF9kaXIiCiAgICAgICBkb25lCiAgICAgICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCiAgICAgICBsaWJkaXI9IiRhbGxkaXJzIgotICAgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgZXZhbCBmbGFnPVwiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKICAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9JGZsYWciCiAgICAgZWxzZQogICAgICAgICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbwogICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCiAgICAgICAgIGxpYmRpcj0iJGZvdW5kX2RpciIKLSAgICAgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgogICAgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCiAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9JGZsYWciCiAgICAgICBkb25lCkBAIC0xMjg0OSwxMzMgKzM2MjE2LDk0IEBACiAgICAgZG9uZQogICBmaQogCi0gICAgICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBHTlUgZ2V0dGV4dCBpbiBsaWJpbnRsIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEdOVSBnZXR0ZXh0IGluIGxpYmludGwuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2d0X2N2X2Z1bmNfZ251Z2V0dGV4dDFfbGliaW50bCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorCisKKworCisKKyAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHTlUgZ2V0dGV4dCBpbiBsaWJpbnRsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBHTlUgZ2V0dGV4dCBpbiBsaWJpbnRsLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyRndF9mdW5jX2dudWdldHRleHRfbGliaW50bCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGd0X3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKICAgICAgICAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJElOQ0lOVEwiCiAgICAgICAgICAgICBndF9zYXZlX0xJQlM9IiRMSUJTIgogICAgICAgICAgICAgTElCUz0iJExJQlMgJExJQklOVEwiCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKwogI2luY2x1ZGUgPGxpYmludGwuaD4KKyRndF9yZXZpc2lvbl90ZXN0X2NvZGUKIGV4dGVybiBpbnQgX25sX21zZ19jYXRfY250cjsKIGV4dGVybgogI2lmZGVmIF9fY3BsdXNwbHVzCiAiQyIKICNlbmRpZgogY29uc3QgY2hhciAqX25sX2V4cGFuZF9hbGlhcyAoY29uc3QgY2hhciAqKTsKKwogaW50CiBtYWluICgpCiB7CisKIGJpbmR0ZXh0ZG9tYWluICgiIiwgIiIpOwotcmV0dXJuICogZ2V0dGV4dCAoIiIpICsgX25sX21zZ19jYXRfY250ciArICpfbmxfZXhwYW5kX2FsaWFzICgiIikKK3JldHVybiAqIGdldHRleHQgKCIiKSRndF9leHByZXNzaW9uX3Rlc3RfY29kZSArIF9ubF9tc2dfY2F0X2NudHIgKyAqX25sX2V4cGFuZF9hbGlhcyAoIiIpCisKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0MV9saWJpbnRsPXllcworaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGw9eWVzIgogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ndF9jdl9mdW5jX2dudWdldHRleHQxX2xpYmludGw9bm8KKyAgZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsPW5vIgogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0MV9saWJpbnRsIiAhPSB5ZXMgJiYgdGVzdCAtbiAiJExJQklDT05WIjsgdGhlbgorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIjsgdGVzdCAiJGd0X3ZhbCIgIT0geWVzOyB9ICYmIHRlc3QgLW4gIiRMSUJJQ09OViI7IHRoZW4KICAgICAgICAgICAgICAgTElCUz0iJExJQlMgJExJQklDT05WIgotICAgICAgICAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLworCiAjaW5jbHVkZSA8bGliaW50bC5oPgorJGd0X3JldmlzaW9uX3Rlc3RfY29kZQogZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOwogZXh0ZXJuCiAjaWZkZWYgX19jcGx1c3BsdXMKICJDIgogI2VuZGlmCiBjb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzIChjb25zdCBjaGFyICopOworCiBpbnQKIG1haW4gKCkKIHsKKwogYmluZHRleHRkb21haW4gKCIiLCAiIik7Ci1yZXR1cm4gKiBnZXR0ZXh0ICgiIikgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9leHBhbmRfYWxpYXMgKCIiKQorcmV0dXJuICogZ2V0dGV4dCAoIiIpJGd0X2V4cHJlc3Npb25fdGVzdF9jb2RlICsgX25sX21zZ19jYXRfY250ciArICpfbmxfZXhwYW5kX2FsaWFzICgiIikKKwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBMSUJJTlRMPSIkTElCSU5UTCAkTElCSUNPTlYiCi0gICAgICAgICAgICAgICAgTFRMSUJJTlRMPSIkTFRMSUJJTlRMICRMVExJQklDT05WIgotICAgICAgICAgICAgICAgIGd0X2N2X2Z1bmNfZ251Z2V0dGV4dDFfbGliaW50bD15ZXMKLQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorICAgICAgICAgICAgICAgICBMVExJQklOVEw9IiRMVExJQklOVEwgJExUTElCSUNPTlYiCisgICAgICAgICAgICAgICAgIGV2YWwgIiRndF9mdW5jX2dudWdldHRleHRfbGliaW50bD15ZXMiCiAKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICBDUFBGTEFHUz0iJGd0X3NhdmVfQ1BQRkxBR1MiCiAgICAgICAgICAgICBMSUJTPSIkZ3Rfc2F2ZV9MSUJTIgogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRndF9jdl9mdW5jX2dudWdldHRleHQxX2xpYmludGwiID4mNQotZWNobyAiJHtFQ0hPX1R9JGd0X2N2X2Z1bmNfZ251Z2V0dGV4dDFfbGliaW50bCIgPiY2CitldmFsIGFjX3Jlcz1cJCRndF9mdW5jX2dudWdldHRleHRfbGliaW50bAorCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CiAgICAgICAgIGZpCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0MV9saWJjIiA9ICJ5ZXMiIFwKLSAgICAgICAgICAgfHwgeyB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0MV9saWJpbnRsIiA9ICJ5ZXMiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliYyI7IHRlc3QgIiRndF92YWwiID0gInllcyI7IH0gXAorICAgICAgICAgICB8fCB7IHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIjsgdGVzdCAiJGd0X3ZhbCIgPSAieWVzIjsgfSBcCiAgICAgICAgICAgICAgICAgJiYgdGVzdCAiJFBBQ0tBR0UiICE9IGdldHRleHQtcnVudGltZSBcCiAgICAgICAgICAgICAgICAgJiYgdGVzdCAiJFBBQ0tBR0UiICE9IGdldHRleHQtdG9vbHM7IH07IHRoZW4KICAgICAgICAgICBndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQ9eWVzCkBAIC0xMjk5OCwyNCArMzYzMjYsMjIgQEAKICAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiIFwKICAgICAgICB8fCB0ZXN0ICIkbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dCIgPSAieWVzIjsgdGhlbgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBFTkFCTEVfTkxTIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX05MUyAxIiA+PmNvbmZkZWZzLmgKIAogICAgIGVsc2UKICAgICAgIFVTRV9OTFM9bm8KICAgICBmaQogICBmaQogCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIHVzZSBOTFMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIHVzZSBOTFMuLi4gJEVDSE9fQyIgPiY2Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRVU0VfTkxTIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRVU0VfTkxTIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIHVzZSBOTFMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byB1c2UgTkxTLi4uICIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkVVNFX05MUyIgPiY1CiskYXNfZWNobyAiJFVTRV9OTFMiID4mNjsgfQogICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGVyZSB0aGUgZ2V0dGV4dCBmdW5jdGlvbiBjb21lcyBmcm9tIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hlcmUgdGhlIGdldHRleHQgZnVuY3Rpb24gY29tZXMgZnJvbS4uLiAkRUNIT19DIiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXJlIHRoZSBnZXR0ZXh0IGZ1bmN0aW9uIGNvbWVzIGZyb20iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hlcmUgdGhlIGdldHRleHQgZnVuY3Rpb24gY29tZXMgZnJvbS4uLiAiID4mNjsgfQogICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyI7IHRoZW4KLSAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2dudWdldHRleHQxX2xpYmludGwiID0gInllcyI7IHRoZW4KKyAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIjsgdGVzdCAiJGd0X3ZhbCIgPSAieWVzIjsgfTsgdGhlbgogICAgICAgICBndF9zb3VyY2U9ImV4dGVybmFsIGxpYmludGwiCiAgICAgICBlbHNlCiAgICAgICAgIGd0X3NvdXJjZT0ibGliYyIKQEAgLTEzMDIzLDE4ICszNjM0OSwxOCBAQAogICAgIGVsc2UKICAgICAgIGd0X3NvdXJjZT0iaW5jbHVkZWQgaW50bCBkaXJlY3RvcnkiCiAgICAgZmkKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZ3Rfc291cmNlIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRndF9zb3VyY2UiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3Rfc291cmNlIiA+JjUKKyRhc19lY2hvICIkZ3Rfc291cmNlIiA+JjY7IH0KICAgZmkKIAogICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgogCiAgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgPSAieWVzIjsgdGhlbgotICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZ251Z2V0dGV4dDFfbGliaW50bCIgPSAieWVzIjsgdGhlbgotICAgICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIGxpbmsgd2l0aCBsaWJpbnRsIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIGxpbmsgd2l0aCBsaWJpbnRsLi4uICRFQ0hPX0MiID4mNgotICAgICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTElCSU5UTCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kTElCSU5UTCIgPiY2CisgICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliaW50bCI7IHRlc3QgIiRndF92YWwiID0gInllcyI7IH07IHRoZW4KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gbGluayB3aXRoIGxpYmludGwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGxpbmsgd2l0aCBsaWJpbnRsLi4uICIgPiY2OyB9CisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTElCSU5UTCIgPiY1CiskYXNfZWNobyAiJExJQklOVEwiID4mNjsgfQogCiAgIGZvciBlbGVtZW50IGluICRJTkNJTlRMOyBkbwogICAgIGhhdmVpdD0KQEAgLTEzMDYxLDE0ICszNjM4NywxMCBAQAogICAgICAgZmkKIAogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0dFVFRFWFQgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0dFVFRFWFQgMSIgPj5jb25mZGVmcy5oCiAKIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9EQ0dFVFRFWFQgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0RDR0VUVEVYVCAxIiA+PmNvbmZkZWZzLmgKIAogICAgIGZpCiAKQEAgLTEzMDg2LDIzMDcgKzM2NDA4LDU3IEBACiAKIAogCi0KLQotCi0gIGNhc2UgJExJQk9CSlMgaW4KLSAgICAiaGFyZC1sb2NhbGUuJGFjX29iamV4dCIgICB8IFwKLSAgKiIgaGFyZC1sb2NhbGUuJGFjX29iamV4dCIgICB8IFwKLSAgICAiaGFyZC1sb2NhbGUuJGFjX29iamV4dCAiKiB8IFwKLSAgKiIgaGFyZC1sb2NhbGUuJGFjX29iamV4dCAiKiApIDs7Ci0gICopIExJQk9CSlM9IiRMSUJPQkpTIGhhcmQtbG9jYWxlLiRhY19vYmpleHQiIDs7Ci1lc2FjCi0KLQotCi0KLQotICBjYXNlICRMSUJPQkpTIGluCi0gICAgImhhc2guJGFjX29iamV4dCIgICB8IFwKLSAgKiIgaGFzaC4kYWNfb2JqZXh0IiAgIHwgXAotICAgICJoYXNoLiRhY19vYmpleHQgIiogfCBcCi0gICoiIGhhc2guJGFjX29iamV4dCAiKiApIDs7Ci0gICopIExJQk9CSlM9IiRMSUJPQkpTIGhhc2guJGFjX29iamV4dCIgOzsKLWVzYWMKLQotCi0KLQotCi0KLQotZm9yIGFjX2hlYWRlciBpbiBzdGRsaWIuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci1lbHNlCi0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1iaXNvbkBnbnUub3JnICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEdOVSBsaWJjIGNvbXBhdGlibGUgbWFsbG9jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEdOVSBsaWJjIGNvbXBhdGlibGUgbWFsbG9jLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9mdW5jX21hbGxvY18wX25vbm51bGwrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KLSAgYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPW5vCi1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2lmIFNURENfSEVBREVSUyB8fCBIQVZFX1NURExJQl9ICi0jIGluY2x1ZGUgPHN0ZGxpYi5oPgotI2Vsc2UKLWNoYXIgKm1hbGxvYyAoKTsKLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLWV4aXQgKG1hbGxvYyAoMCkgPyAwIDogMSk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9mdW5jX21hbGxvY18wX25vbm51bGw9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1Ci1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0oIGV4aXQgJGFjX3N0YXR1cyApCi1hY19jdl9mdW5jX21hbGxvY18wX25vbm51bGw9bm8KLWZpCi1ybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX21hbGxvY18wX25vbm51bGwiID4mNgotaWYgdGVzdCAkYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfTUFMTE9DIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfTUFMTE9DIDAKLV9BQ0VPRgotCi0gICBjYXNlICRMSUJPQkpTIGluCi0gICAgIm1hbGxvYy4kYWNfb2JqZXh0IiAgIHwgXAotICAqIiBtYWxsb2MuJGFjX29iamV4dCIgICB8IFwKLSAgICAibWFsbG9jLiRhY19vYmpleHQgIiogfCBcCi0gICoiIG1hbGxvYy4kYWNfb2JqZXh0ICIqICkgOzsKLSAgKikgTElCT0JKUz0iJExJQk9CSlMgbWFsbG9jLiRhY19vYmpleHQiIDs7Ci1lc2FjCi0KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgbWFsbG9jIHJwbF9tYWxsb2MKLV9BQ0VPRgotCi1maQotCi0KLQotCi0KLQotICA6Ci0KLQotCi0KLQotCi0KLQotCi0gIDoKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotZm9yIGFjX2Z1bmMgaW4gaXN3Y250cmwgd2N3aWR0aAotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0KLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBtYnJ0b3djIGFuZCBtYnN0YXRlX3QgYXJlIHByb3Blcmx5IGRlY2xhcmVkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBtYnJ0b3djIGFuZCBtYnN0YXRlX3QgYXJlIHByb3Blcmx5IGRlY2xhcmVkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtnbF9jdl9mdW5jX21icnRvd2Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8d2NoYXIuaD4KLWludAotbWFpbiAoKQotewotd2NoYXJfdCB3YzsKLSAgICAgICAgICAgICAgY2hhciBjb25zdCBzW10gPSAiIjsKLSAgICAgICAgICAgICAgc2l6ZV90IG4gPSAxOwotICAgICAgICAgICAgICBtYnN0YXRlX3Qgc3RhdGU7Ci0gICAgICAgICAgICAgIHJldHVybiAhIChzaXplb2Ygc3RhdGUgJiYgKG1icnRvd2MpICgmd2MsIHMsIG4sICZzdGF0ZSkpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBnbF9jdl9mdW5jX21icnRvd2M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWdsX2N2X2Z1bmNfbWJydG93Yz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGdsX2N2X2Z1bmNfbWJydG93YyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kZ2xfY3ZfZnVuY19tYnJ0b3djIiA+JjYKLSAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19tYnJ0b3djID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfTUJSVE9XQyAxCi1fQUNFT0YKLQotICBmaQotCi0KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2N3aWR0aCBpcyBkZWNsYXJlZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgd2N3aWR0aCBpcyBkZWNsYXJlZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGF2ZV9kZWNsX3djd2lkdGgrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIEFJWCAzLjIuNSBkZWNsYXJlcyB3Y3dpZHRoIGluIDxzdHJpbmcuaD4uICovCi0jaWYgSEFWRV9TVFJJTkdfSAotIyBpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbmRpZgotI2lmIEhBVkVfV0NIQVJfSAotIyBpbmNsdWRlIDx3Y2hhci5oPgotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotCi0jaWZuZGVmIHdjd2lkdGgKLSAgY2hhciAqcCA9IChjaGFyICopIHdjd2lkdGg7Ci0jZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9oYXZlX2RlY2xfd2N3aWR0aD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfaGF2ZV9kZWNsX3djd2lkdGg9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF93Y3dpZHRoIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfd2N3aWR0aCIgPiY2Ci0gIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF93Y3dpZHRoID0geWVzOyB0aGVuCi0gICAgYWNfdmFsPTEKLSAgZWxzZQotICAgIGFjX3ZhbD0wCi0gIGZpCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ERUNMX1dDV0lEVEggJGFjX3ZhbAotX0FDRU9GCi0KLQotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgbWJzd2lkdGggaXMgZGVjbGFyZWQgaW4gPHdjaGFyLmg+IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBtYnN3aWR0aCBpcyBkZWNsYXJlZCBpbiA8d2NoYXIuaD4uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hhdmVfZGVjbF9tYnN3aWR0aCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotI2lmIEhBVkVfV0NIQVJfSAotIyBpbmNsdWRlIDx3Y2hhci5oPgotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotCi0gIGNoYXIgKnAgPSAoY2hhciAqKSBtYnN3aWR0aDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9oYXZlX2RlY2xfbWJzd2lkdGg9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2hhdmVfZGVjbF9tYnN3aWR0aD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX21ic3dpZHRoIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfbWJzd2lkdGgiID4mNgotICBpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfbWJzd2lkdGggPSB5ZXM7IHRoZW4KLSAgICBhY192YWw9MQotICBlbHNlCi0gICAgYWNfdmFsPTAKLSAgZmkKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0RFQ0xfTUJTV0lEVEhfSU5fV0NIQVJfSCAkYWNfdmFsCi1fQUNFT0YKLQotCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbWJzdGF0ZV90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG1ic3RhdGVfdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9tYnN0YXRlX3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotIwkgICAgaW5jbHVkZSA8d2NoYXIuaD4KLWludAotbWFpbiAoKQotewotbWJzdGF0ZV90IHg7IHJldHVybiBzaXplb2YgeDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV9tYnN0YXRlX3Q9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X3R5cGVfbWJzdGF0ZV90PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX21ic3RhdGVfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9tYnN0YXRlX3QiID4mNgotICAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9tYnN0YXRlX3QgPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9NQlNUQVRFX1QgMQotX0FDRU9GCi0KLSAgIGVsc2UKLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgbWJzdGF0ZV90IGludAotX0FDRU9GCi0KLSAgIGZpCi0KLQotCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igb2JzdGFja3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igb2JzdGFja3MuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfb2JzdGFjaytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlICJvYnN0YWNrLmgiCi1pbnQKLW1haW4gKCkKLXsKLXN0cnVjdCBvYnN0YWNrICptZW07IG9ic3RhY2tfZnJlZShtZW0sKGNoYXIgKikgMCkKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfZnVuY19vYnN0YWNrPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9mdW5jX29ic3RhY2s9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX29ic3RhY2siID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfb2JzdGFjayIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9mdW5jX29ic3RhY2sgPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9PQlNUQUNLIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGNhc2UgJExJQk9CSlMgaW4KLSAgICAib2JzdGFjay4kYWNfb2JqZXh0IiAgIHwgXAotICAqIiBvYnN0YWNrLiRhY19vYmpleHQiICAgfCBcCi0gICAgIm9ic3RhY2suJGFjX29iamV4dCAiKiB8IFwKLSAgKiIgb2JzdGFjay4kYWNfb2JqZXh0ICIqICkgOzsKLSAgKikgTElCT0JKUz0iJExJQk9CSlMgb2JzdGFjay4kYWNfb2JqZXh0IiA7OwotZXNhYwotCi1maQotCi0gICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19vYnN0YWNrID0gbm87IHRoZW4KLQotCi0KLQotICA6Ci0KLSAgZmkKLQotCi0KLQotICBjYXNlICRMSUJPQkpTIGluCi0gICAgInF1b3RlLiRhY19vYmpleHQiICAgfCBcCi0gICoiIHF1b3RlLiRhY19vYmpleHQiICAgfCBcCi0gICAgInF1b3RlLiRhY19vYmpleHQgIiogfCBcCi0gICoiIHF1b3RlLiRhY19vYmpleHQgIiogKSA7OwotICAqKSBMSUJPQkpTPSIkTElCT0JKUyBxdW90ZS4kYWNfb2JqZXh0IiA7OwotZXNhYwotCi0KLQotCi0KLQotICBjYXNlICRMSUJPQkpTIGluCi0gICAgInF1b3RlYXJnLiRhY19vYmpleHQiICAgfCBcCi0gICoiIHF1b3RlYXJnLiRhY19vYmpleHQiICAgfCBcCi0gICAgInF1b3RlYXJnLiRhY19vYmpleHQgIiogfCBcCi0gICoiIHF1b3RlYXJnLiRhY19vYmpleHQgIiogKSA7OwotICAqKSBMSUJPQkpTPSIkTElCT0JKUyBxdW90ZWFyZy4kYWNfb2JqZXh0IiA7OwotZXNhYwotCi0KLQotICA6Ci0KLQotCi0KLQotCi0KLQotCi0gIDoKLQotCi0KLQotCi0KLQotCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbWJzdGF0ZV90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG1ic3RhdGVfdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9tYnN0YXRlX3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotIwkgICAgaW5jbHVkZSA8d2NoYXIuaD4KLWludAotbWFpbiAoKQotewotbWJzdGF0ZV90IHg7IHJldHVybiBzaXplb2YgeDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV9tYnN0YXRlX3Q9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X3R5cGVfbWJzdGF0ZV90PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX21ic3RhdGVfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9tYnN0YXRlX3QiID4mNgotICAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9tYnN0YXRlX3QgPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9NQlNUQVRFX1QgMQotX0FDRU9GCi0KLSAgIGVsc2UKLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgbWJzdGF0ZV90IGludAotX0FDRU9GCi0KLSAgIGZpCi0KLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBtYnJ0b3djIGFuZCBtYnN0YXRlX3QgYXJlIHByb3Blcmx5IGRlY2xhcmVkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBtYnJ0b3djIGFuZCBtYnN0YXRlX3QgYXJlIHByb3Blcmx5IGRlY2xhcmVkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtnbF9jdl9mdW5jX21icnRvd2Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8d2NoYXIuaD4KLWludAotbWFpbiAoKQotewotd2NoYXJfdCB3YzsKLSAgICAgICAgICAgICAgY2hhciBjb25zdCBzW10gPSAiIjsKLSAgICAgICAgICAgICAgc2l6ZV90IG4gPSAxOwotICAgICAgICAgICAgICBtYnN0YXRlX3Qgc3RhdGU7Ci0gICAgICAgICAgICAgIHJldHVybiAhIChzaXplb2Ygc3RhdGUgJiYgKG1icnRvd2MpICgmd2MsIHMsIG4sICZzdGF0ZSkpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBnbF9jdl9mdW5jX21icnRvd2M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWdsX2N2X2Z1bmNfbWJydG93Yz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGdsX2N2X2Z1bmNfbWJydG93YyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kZ2xfY3ZfZnVuY19tYnJ0b3djIiA+JjYKLSAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19tYnJ0b3djID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfTUJSVE9XQyAxCi1fQUNFT0YKLQotICBmaQotCi0KLQotCi0KLQotICAjIERlZmluZSB0d28gYWRkaXRpb25hbCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgTWFrZWZpbGUgc3Vic3RpdHV0aW9uLgotCi0gIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfc3RkYm9vbF9oIiA9IHllczsgdGhlbgotICAgIFNUREJPT0xfSD0nJwotICBlbHNlCi0gICAgU1REQk9PTF9IPSdzdGRib29sLmgnCi0gIGZpCi0KLQotICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9fQm9vbCIgPSB5ZXM7IHRoZW4KLSAgICBIQVZFX19CT09MPTEKLSAgZWxzZQotICAgIEhBVkVfX0JPT0w9MAotICBmaQotCi0KLQotCi0KLSAgY2FzZSAkTElCT0JKUyBpbgotICAgICJmb3Blbi1zYWZlci4kYWNfb2JqZXh0IiAgIHwgXAotICAqIiBmb3Blbi1zYWZlci4kYWNfb2JqZXh0IiAgIHwgXAotICAgICJmb3Blbi1zYWZlci4kYWNfb2JqZXh0ICIqIHwgXAotICAqIiBmb3Blbi1zYWZlci4kYWNfb2JqZXh0ICIqICkgOzsKLSAgKikgTElCT0JKUz0iJExJQk9CSlMgZm9wZW4tc2FmZXIuJGFjX29iamV4dCIgOzsKLWVzYWMKLQotCi0KLQotCi0KLQotZm9yIGFjX2Z1bmMgaW4gc3RwY3B5Ci1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWVsc2UKLSAgY2FzZSAkTElCT0JKUyBpbgotICAgICIkYWNfZnVuYy4kYWNfb2JqZXh0IiAgIHwgXAotICAqIiAkYWNfZnVuYy4kYWNfb2JqZXh0IiAgIHwgXAotICAgICIkYWNfZnVuYy4kYWNfb2JqZXh0ICIqIHwgXAotICAqIiAkYWNfZnVuYy4kYWNfb2JqZXh0ICIqICkgOzsKLSAgKikgTElCT0JKUz0iJExJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCIgOzsKLWVzYWMKLQotZmkKLWRvbmUKLQotCi0gIGlmIHRlc3QgJGFjX2N2X2Z1bmNfc3RwY3B5ID0gbm87IHRoZW4KLQotICA6Ci0KLSAgZmkKLQotCi0KLQotCi0KLWZvciBhY19mdW5jIGluIHN0cmR1cAotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGNhc2UgJExJQk9CSlMgaW4KLSAgICAiJGFjX2Z1bmMuJGFjX29iamV4dCIgICB8IFwKLSAgKiIgJGFjX2Z1bmMuJGFjX29iamV4dCIgICB8IFwKLSAgICAiJGFjX2Z1bmMuJGFjX29iamV4dCAiKiB8IFwKLSAgKiIgJGFjX2Z1bmMuJGFjX29iamV4dCAiKiApIDs7Ci0gICopIExJQk9CSlM9IiRMSUJPQkpTICRhY19mdW5jLiRhY19vYmpleHQiIDs7Ci1lc2FjCi0KLWZpCi1kb25lCi0KLQotCi0gIDoKLQotCi0KLQotCi0gIDoKLQotCi0KLQotZm9yIGFjX2Z1bmMgaW4gc3RyZXJyb3IKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZWxzZQotICBjYXNlICRMSUJPQkpTIGluCi0gICAgIiRhY19mdW5jLiRhY19vYmpleHQiICAgfCBcCi0gICoiICRhY19mdW5jLiRhY19vYmpleHQiICAgfCBcCi0gICAgIiRhY19mdW5jLiRhY19vYmpleHQgIiogfCBcCi0gICoiICRhY19mdW5jLiRhY19vYmpleHQgIiogKSA7OwotICAqKSBMSUJPQkpTPSIkTElCT0JKUyAkYWNfZnVuYy4kYWNfb2JqZXh0IiA7OwotZXNhYwotCi1maQotZG9uZQotCi0KLSAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zdHJlcnJvciA9IG5vOyB0aGVuCi0KLSAgOgotCi0gIGZpCi0KLQotCi0KLQotCi0KLQotICA6Ci0KLQotCi0KLQotCi0gICMgQUlYIDQuMy4zLCBBSVggNS4xIGhhdmUgYSBmdW5jdGlvbiB0aGF0IGZhaWxzIHRvIGFkZCB0aGUgdGVybWluYXRpbmcgJ1wwJy4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB3b3JraW5nIHN0cm5kdXAiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igd29ya2luZyBzdHJuZHVwLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtnbF9jdl9mdW5jX3N0cm5kdXArc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSNpZmRlZiBfQUlYCi0gICAgICAgICAgICB0b28gcmlza3kKLSNlbmRpZgotCi1fQUNFT0YKLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJ0b28gcmlza3kiID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBnbF9jdl9mdW5jX3N0cm5kdXA9bm8KLWVsc2UKLSAgZ2xfY3ZfZnVuY19zdHJuZHVwPXllcwotZmkKLXJtIC1mIGNvbmZ0ZXN0KgotCi1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotCi0gICAgICAgLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0cmluZy5oPgotaW50Ci1tYWluICgpCi17Ci0KLSNpZm5kZWYgSEFWRV9ERUNMX1NUUk5EVVAKLSAgZXh0ZXJuIGNoYXIgKnN0cm5kdXAgKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKLSNlbmRpZgotICBjaGFyICpzOwotICBzID0gc3RybmR1cCAoInNvbWUgbG9uZ2VyIHN0cmluZyIsIDE1KTsKLSAgZnJlZSAocyk7Ci0gIHMgPSBzdHJuZHVwICgic2hvcnRlciBzdHJpbmciLCAxMyk7Ci0gIHJldHVybiBzWzEzXSAhPSAnXDAnOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZ2xfY3ZfZnVuY19zdHJuZHVwPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQotZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotKCBleGl0ICRhY19zdGF0dXMgKQotZ2xfY3ZfZnVuY19zdHJuZHVwPW5vCi1maQotcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGdsX2N2X2Z1bmNfc3RybmR1cCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kZ2xfY3ZfZnVuY19zdHJuZHVwIiA+JjYKLSAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19zdHJuZHVwID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfU1RSTkRVUCAxCi1fQUNFT0YKLQotICBlbHNlCi0gICAgY2FzZSAkTElCT0JKUyBpbgotICAgICJzdHJuZHVwLiRhY19vYmpleHQiICAgfCBcCi0gICoiIHN0cm5kdXAuJGFjX29iamV4dCIgICB8IFwKLSAgICAic3RybmR1cC4kYWNfb2JqZXh0ICIqIHwgXAotICAqIiBzdHJuZHVwLiRhY19vYmpleHQgIiogKSA7OwotICAqKSBMSUJPQkpTPSIkTElCT0JKUyBzdHJuZHVwLiRhY19vYmpleHQiIDs7Ci1lc2FjCi0KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgc3RybmR1cCBycGxfc3RybmR1cAotX0FDRU9GCi0KLSAgICA6Ci0gIGZpCi0KLQotCi0KLQotCi0KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB3b3JraW5nIHN0cm5sZW4iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igd29ya2luZyBzdHJubGVuLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9mdW5jX3N0cm5sZW5fd29ya2luZytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgotICBhY19jdl9mdW5jX3N0cm5sZW5fd29ya2luZz1ubwotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLQotI2RlZmluZSBTICJmb29iYXIiCi0jZGVmaW5lIFNfTEVOIChzaXplb2YgUyAtIDEpCi0KLSAgLyogQXQgbGVhc3Qgb25lIGltcGxlbWVudGF0aW9uIGlzIGJ1Z2d5OiB0aGF0IG9mIEFJWCA0LjMgd291bGQKLSAgICAgZ2l2ZSBzdHJubGVuIChTLCAxKSA9PSAzLiAgKi8KLQotICBpbnQgaTsKLSAgZm9yIChpID0gMDsgaSA8IFNfTEVOICsgMTsgKytpKQotICAgIHsKLSAgICAgIGludCBleHBlY3RlZCA9IGkgPD0gU19MRU4gPyBpIDogU19MRU47Ci0gICAgICBpZiAoc3RybmxlbiAoUywgaSkgIT0gZXhwZWN0ZWQpCi0JZXhpdCAoMSk7Ci0gICAgfQotICBleGl0ICgwKTsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfZnVuY19zdHJubGVuX3dvcmtpbmc9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1Ci1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0oIGV4aXQgJGFjX3N0YXR1cyApCi1hY19jdl9mdW5jX3N0cm5sZW5fd29ya2luZz1ubwotZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX3N0cm5sZW5fd29ya2luZyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19zdHJubGVuX3dvcmtpbmciID4mNgotdGVzdCAkYWNfY3ZfZnVuY19zdHJubGVuX3dvcmtpbmcgPSBubyAmJiBjYXNlICRMSUJPQkpTIGluCi0gICAgInN0cm5sZW4uJGFjX29iamV4dCIgICB8IFwKLSAgKiIgc3Rybmxlbi4kYWNfb2JqZXh0IiAgIHwgXAotICAgICJzdHJubGVuLiRhY19vYmpleHQgIiogfCBcCi0gICoiIHN0cm5sZW4uJGFjX29iamV4dCAiKiApIDs7Ci0gICopIExJQk9CSlM9IiRMSUJPQkpTIHN0cm5sZW4uJGFjX29iamV4dCIgOzsKLWVzYWMKLQotCi0gIGlmIHRlc3QgJGFjX2N2X2Z1bmNfc3Rybmxlbl93b3JraW5nID0gbm87IHRoZW4KLSAgICAjIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYXV0b21ha2UtMS42LjEgZG9lbnMndCB1bmRlcnN0YW5kCi0gICAgIyB0aGF0IHRoZSBhYm92ZSB1c2Ugb2YgQUNfRlVOQ19TVFJOTEVOIG1lYW5zIHdlIG1heSBoYXZlIHRvIHVzZQotICAgICMgbGliL3N0cm5sZW4uYy4KLSAgICAjQUNfTElCT0JKKHN0cm5sZW4pCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIHN0cm5sZW4gcnBsX3N0cm5sZW4KLV9BQ0VPRgotCi0KLQotICA6Ci0KLQotCi0KLQotCi0gIGZpCi0KLQotCi0KLWZvciBhY19mdW5jIGluIHN0cnRvbAotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGNhc2UgJExJQk9CSlMgaW4KLSAgICAiJGFjX2Z1bmMuJGFjX29iamV4dCIgICB8IFwKLSAgKiIgJGFjX2Z1bmMuJGFjX29iamV4dCIgICB8IFwKLSAgICAiJGFjX2Z1bmMuJGFjX29iamV4dCAiKiB8IFwKLSAgKiIgJGFjX2Z1bmMuJGFjX29iamV4dCAiKiApIDs7Ci0gICopIExJQk9CSlM9IiRMSUJPQkpTICRhY19mdW5jLiRhY19vYmpleHQiIDs7Ci1lc2FjCi0KLWZpCi1kb25lCi0KLQotICBpZiB0ZXN0ICRhY19jdl9mdW5jX3N0cnRvbCA9IG5vOyB0aGVuCi0KLQotCi0gIDoKLQotCi0KLQotCi0KLSAgZmkKLQotCi0KLQotZm9yIGFjX2Z1bmMgaW4gc3RydG91bAotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGNhc2UgJExJQk9CSlMgaW4KLSAgICAiJGFjX2Z1bmMuJGFjX29iamV4dCIgICB8IFwKLSAgKiIgJGFjX2Z1bmMuJGFjX29iamV4dCIgICB8IFwKLSAgICAiJGFjX2Z1bmMuJGFjX29iamV4dCAiKiB8IFwKLSAgKiIgJGFjX2Z1bmMuJGFjX29iamV4dCAiKiApIDs7Ci0gICopIExJQk9CSlM9IiRMSUJPQkpTICRhY19mdW5jLiRhY19vYmpleHQiIDs7Ci1lc2FjCi0KLWZpCi1kb25lCi0KLQotICBpZiB0ZXN0ICRhY19jdl9mdW5jX3N0cnRvdWwgPSBubzsgdGhlbgotCi0KLQotCi0gIDoKLQotCi0KLQotCi0KLQotICBmaQotCi0KLQotCi0KLQotCi0KLWZvciBhY19mdW5jIGluIHN0cnZlcnNjbXAKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZWxzZQotICBjYXNlICRMSUJPQkpTIGluCi0gICAgIiRhY19mdW5jLiRhY19vYmpleHQiICAgfCBcCi0gICoiICRhY19mdW5jLiRhY19vYmpleHQiICAgfCBcCi0gICAgIiRhY19mdW5jLiRhY19vYmpleHQgIiogfCBcCi0gICoiICRhY19mdW5jLiRhY19vYmpleHQgIiogKSA7OwotICAqKSBMSUJPQkpTPSIkTElCT0JKUyAkYWNfZnVuYy4kYWNfb2JqZXh0IiA7OwotZXNhYwotCi1maQotZG9uZQotCi0KLSAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zdHJ2ZXJzY21wID0gbm87IHRoZW4KLQotICA6Ci0KLSAgZmkKLQotCi0KLQotZm9yIGFjX2hlYWRlciBpbiB1bmlzdGQuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci1lbHNlCi0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1iaXNvbkBnbnUub3JnICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotICAgIFVOSVNURF9IPScnCi0KLWVsc2UKLQotICAgIFVOSVNURF9IPSd1bmlzdGQuaCcKLQotZmkKLQotZG9uZQotCi0KLQotCi0KLQotICBjYXNlICRMSUJPQkpTIGluCi0gICAgImR1cC1zYWZlci4kYWNfb2JqZXh0IiAgIHwgXAotICAqIiBkdXAtc2FmZXIuJGFjX29iamV4dCIgICB8IFwKLSAgICAiZHVwLXNhZmVyLiRhY19vYmpleHQgIiogfCBcCi0gICoiIGR1cC1zYWZlci4kYWNfb2JqZXh0ICIqICkgOzsKLSAgKikgTElCT0JKUz0iJExJQk9CSlMgZHVwLXNhZmVyLiRhY19vYmpleHQiIDs7Ci1lc2FjCi0KLSAgY2FzZSAkTElCT0JKUyBpbgotICAgICJmZC1zYWZlci4kYWNfb2JqZXh0IiAgIHwgXAotICAqIiBmZC1zYWZlci4kYWNfb2JqZXh0IiAgIHwgXAotICAgICJmZC1zYWZlci4kYWNfb2JqZXh0ICIqIHwgXAotICAqIiBmZC1zYWZlci4kYWNfb2JqZXh0ICIqICkgOzsKLSAgKikgTElCT0JKUz0iJExJQk9CSlMgZmQtc2FmZXIuJGFjX29iamV4dCIgOzsKLWVzYWMKLQotICBjYXNlICRMSUJPQkpTIGluCi0gICAgInBpcGUtc2FmZXIuJGFjX29iamV4dCIgICB8IFwKLSAgKiIgcGlwZS1zYWZlci4kYWNfb2JqZXh0IiAgIHwgXAotICAgICJwaXBlLXNhZmVyLiRhY19vYmpleHQgIiogfCBcCi0gICoiIHBpcGUtc2FmZXIuJGFjX29iamV4dCAiKiApIDs7Ci0gICopIExJQk9CSlM9IiRMSUJPQkpTIHBpcGUtc2FmZXIuJGFjX29iamV4dCIgOzsKLWVzYWMKLQotCi0KLQotCi0KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgVVNFX1VOTE9DS0VEX0lPIDEKLV9BQ0VPRgotCi0KLQotCi0KLSAgOgotCi0KLQotCi0KLQotICA6Ci0KLQotCi0KLQotCi0gIDoKLQotCi0KLQotCi0KLSAgOgotCi0KLQotCi0KLQotICA6Ci0KLQotCi0KLQotCi0gIDoKLQotCi0KLQotCi0KLSAgOgotCi0KLQotCi0KLQotICA6Ci0KLQotCi0KLQotCi0gIDoKLQotCi0KLQotCi0KLSAgOgotCi0KLQotCi0KLQotICA6Ci0KLQotCi0KLQotCi0gIDoKLQotCi0KLQotCi0KLSAgOgotCi0KLQotCi0KLQotCi0KLQotCi0gIGNhc2UgJExJQk9CSlMgaW4KLSAgICAieG1hbGxvYy4kYWNfb2JqZXh0IiAgIHwgXAotICAqIiB4bWFsbG9jLiRhY19vYmpleHQiICAgfCBcCi0gICAgInhtYWxsb2MuJGFjX29iamV4dCAiKiB8IFwKLSAgKiIgeG1hbGxvYy4kYWNfb2JqZXh0ICIqICkgOzsKLSAgKikgTElCT0JKUz0iJExJQk9CSlMgeG1hbGxvYy4kYWNfb2JqZXh0IiA7OwotZXNhYwotCi0KLQotICA6Ci0KLQotCi0gIDoKLQotCi0KLQotCi0KLSAgOgotCi0KLQotCi0jIFdlIHVzZSBwby9NYWtldmFycywgc28gd2UgbmVlZCBhdCBsZWFzdCBnZXR0ZXh0IDAuMTIuCi0KLQogICBpZiB0ZXN0IC16ICIkVVNFX05MUyI7IHRoZW4KICAgICBlY2hvICJUaGUgQklTT04tSTE4TiBtYWNybyBpcyB1c2VkIHdpdGhvdXQgYmVpbmcgcHJlY2VkZWQgYnkgQU0tR05VLUdFVFRFWFQuIiAxPiYyCiAgICAgZXhpdCAxCiAgIGZpCiAgIEJJU09OX0xPQ0FMRURJUj0KKyAgQklTT05fVVNFX05MUz1ubwogICBpZiB0ZXN0ICIkVVNFX05MUyIgPSB5ZXM7IHRoZW4KLSAgICAgICAgaWYgdGVzdCAtbiAiJFlBQ0MiOyB0aGVuCi0gICAgICBjYXNlICIkWUFDQyIgaW4KLSAgICAgICAgKmJpc29uKikKLSAgICAgICAgICBpZiAoJFlBQ0MgLS1wcmludC1sb2NhbGVkaXIpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgICAgICAgQklTT05fTE9DQUxFRElSPWAkWUFDQyAtLXByaW50LWxvY2FsZWRpcmAKLSAgICAgICAgICBmaQotICAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgZWxzZQotICAgICAgaWYgdGVzdCAtbiAiJEJJU09OIjsgdGhlbgotICAgICAgICBpZiB0ZXN0ICIkQklTT04iICE9ICI6IjsgdGhlbgotICAgICAgICAgIGlmICgkQklTT04gLS1wcmludC1sb2NhbGVkaXIpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgICAgICAgQklTT05fTE9DQUxFRElSPWAkQklTT04gLS1wcmludC1sb2NhbGVkaXJgCi0gICAgICAgICAgZmkKLSAgICAgICAgZmkKLSAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHtZQUNDLSR7QklTT04tOn19IC0tcHJpbnQtbG9jYWxlZGlyKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIEJJU09OX0xPQ0FMRURJUj1gJHtZQUNDLSR7QklTT04tOn19IC0tcHJpbnQtbG9jYWxlZGlyYAogICAgIGZpCiAKICAgICBpZiB0ZXN0IC1uICIkQklTT05fTE9DQUxFRElSIjsgdGhlbgotICAgICAgVVNFUl9MSU5HVUFTPSIke0xJTkdVQVMtJVVOU0VUJX0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0VSX0xJTkdVQVM9IiR7TElOR1VBUy0lVU5TRVQlfSIKICAgICAgIGlmIHRlc3QgLW4gIiRVU0VSX0xJTkdVQVMiOyB0aGVuCiAgICAgICAgIEJJU09OX1VTRV9OTFM9eWVzCi0gICAgICBlbHNlCi0gICAgICAgIEJJU09OX1VTRV9OTFM9bm8KICAgICAgIGZpCi0gICAgZWxzZQotICAgICAgQklTT05fVVNFX05MUz1ubwogICAgIGZpCi0gIGVsc2UKLSAgICBCSVNPTl9VU0VfTkxTPW5vCiAgIGZpCiAgIGlmIHRlc3QgJEJJU09OX1VTRV9OTFMgPSB5ZXM7IHRoZW4KIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgWVlFTkFCTEVfTkxTIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgWVlFTkFCTEVfTkxTIDEiID4+Y29uZmRlZnMuaAogCiAgIGZpCiAKIAogIyBJbnRlcm5hdGlvbmFsaXplZCBwYXJzZXJzLgotICAgICAgICAgIGFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBydW50aW1lLXBvL01ha2VmaWxlLmluIgorYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIHJ1bnRpbWUtcG8vTWFrZWZpbGUuaW4iCiAKICMgQXV0b2NvbmYgbWFjcm9zIGZvciBwYWNrYWdlcyB1c2luZyBpbnRlcm5hdGlvbmFsaXplZCBwYXJzZXJzLgogYWNsb2NhbGRpcj0nJHtkYXRhZGlyfS9hY2xvY2FsJwogCiAKKyMgQ3JlYXRlIHRoZSBiZW5jaG1hcmsgc2NyaXB0LgorYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIGV0Yy9iZW5jaC5wbCIKKworCiAjIEluaXRpYWxpemUgdGhlIHRlc3Qgc3VpdGUuCi0gICAgICAgICAgYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIHRlc3RzL2F0Y29uZmlnIgorYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIHRlc3RzL2F0Y29uZmlnIgogCithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgdGVzdHMvTWFrZWZpbGUgdGVzdHMvYXRsb2NhbCIKIAotICAgICAgICAgICAgICAgICAgICBhY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgdGVzdHMvTWFrZWZpbGUgdGVzdHMvYXRsb2NhbCIKLQotICAgICAgICAgIGFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyB0ZXN0cy9iaXNvbiIKK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyB0ZXN0cy9iaXNvbiIKIAogZm9yIGFjX3Byb2cgaW4gdmFsZ3JpbmQKIGRvCiAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgogc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX1ZBTEdSSU5EK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19WQUxHUklORCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiRWQUxHUklORCI7IHRoZW4KICAgYWNfY3ZfcHJvZ19WQUxHUklORD0iJFZBTEdSSU5EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KQEAgLTE1Mzk2LDYyMCArMzY0NjgsMTA0OSBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgogICAgIGFjX2N2X3Byb2dfVkFMR1JJTkQ9IiRhY19wcm9nIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAogZmkKIGZpCiBWQUxHUklORD0kYWNfY3ZfcHJvZ19WQUxHUklORAogaWYgdGVzdCAtbiAiJFZBTEdSSU5EIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkVkFMR1JJTkQiID4mNQotZWNobyAiJHtFQ0hPX1R9JFZBTEdSSU5EIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRWQUxHUklORCIgPiY1CiskYXNfZWNobyAiJFZBTEdSSU5EIiA+JjY7IH0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKKwogICB0ZXN0IC1uICIkVkFMR1JJTkQiICYmIGJyZWFrCiBkb25lCiAKLWFjX2V4dD1jYwotYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKLWlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgZm9yIGFjX3Byb2cgaW4gJENDQyBnKysgYysrIGdwcCBhQ0MgQ0MgY3h4IGNjKysgY2wgRkNDIEtDQyBSQ0MgeGxDX3IgeGxDCi0gIGRvCi0gICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1hYK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCi0gIGFjX2N2X3Byb2dfQ1hYPSIkQ1hYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19DWFg9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLWZpCi1maQotQ1hYPSRhY19jdl9wcm9nX0NYWAotaWYgdGVzdCAtbiAiJENYWCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENYWCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQ1hYIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotICAgIHRlc3QgLW4gIiRDWFgiICYmIGJyZWFrCi0gIGRvbmUKLWZpCi1pZiB0ZXN0IC16ICIkQ1hYIjsgdGhlbgotICBhY19jdF9DWFg9JENYWAotICBmb3IgYWNfcHJvZyBpbiAkQ0NDIGcrKyBjKysgZ3BwIGFDQyBDQyBjeHggY2MrKyBjbCBGQ0MgS0NDIFJDQyB4bENfciB4bEMKLWRvCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NYWCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfQ1hYIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X0NYWD0iJGFjX2N0X0NYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfQ1hYPSIkYWNfcHJvZyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLWFjX2N0X0NYWD0kYWNfY3ZfcHJvZ19hY19jdF9DWFgKLWlmIHRlc3QgLW4gIiRhY19jdF9DWFgiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DWFgiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0NYWCIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSAgdGVzdCAtbiAiJGFjX2N0X0NYWCIgJiYgYnJlYWsKLWRvbmUKLXRlc3QgLW4gIiRhY19jdF9DWFgiIHx8IGFjX2N0X0NYWD0iZysrIgotCi0gIENYWD0kYWNfY3RfQ1hYCi1maQotCi0KLSMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KLWVjaG8gIiRhc19tZTokTElORU5POiIgXAotICAgICAiY2hlY2tpbmcgZm9yIEMrKyBjb21waWxlciB2ZXJzaW9uIiA+JjUKLWFjX2NvbXBpbGVyPWBzZXQgWCAkYWNfY29tcGlsZTsgZWNobyAkMmAKLXsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA8L2Rldi9udWxsID4mNVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlciAtLXZlcnNpb24gPC9kZXYvbnVsbCA+JjUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLXsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVyIC12IDwvZGV2L251bGwgPiY1XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGVyIC12IDwvZGV2L251bGwgPiY1KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci17IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlciAtViA8L2Rldi9udWxsID4mNVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlciAtViA8L2Rldi9udWxsID4mNSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDKysgY29tcGlsZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMrKyBjb21waWxlci4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfY3h4X2NvbXBpbGVyX2dudStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0jaWZuZGVmIF9fR05VQ19fCi0gICAgICAgY2hva2UgbWUKLSNlbmRpZgotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY29tcGlsZXJfZ251PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jb21waWxlcl9nbnU9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1hY19jdl9jeHhfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jeHhfY29tcGlsZXJfZ251IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9jeHhfY29tcGlsZXJfZ251IiA+JjYKLUdYWD1gdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzICYmIGVjaG8geWVzYAotYWNfdGVzdF9DWFhGTEFHUz0ke0NYWEZMQUdTK3NldH0KLWFjX3NhdmVfQ1hYRkxBR1M9JENYWEZMQUdTCi1DWFhGTEFHUz0iLWciCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkQ1hYIGFjY2VwdHMgLWciID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICRDWFggYWNjZXB0cyAtZy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jeHhfZytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9wcm9nX2N4eF9nPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9wcm9nX2N4eF9nPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2N4eF9nIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2N4eF9nIiA+JjYKLWlmIHRlc3QgIiRhY190ZXN0X0NYWEZMQUdTIiA9IHNldDsgdGhlbgotICBDWFhGTEFHUz0kYWNfc2F2ZV9DWFhGTEFHUwotZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2N4eF9nID0geWVzOyB0aGVuCi0gIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gICAgQ1hYRkxBR1M9Ii1nIC1PMiIKLSAgZWxzZQotICAgIENYWEZMQUdTPSItZyIKLSAgZmkKLWVsc2UKLSAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgICBDWFhGTEFHUz0iLU8yIgotICBlbHNlCi0gICAgQ1hYRkxBR1M9Ci0gIGZpCi1maQotZm9yIGFjX2RlY2xhcmF0aW9uIGluIFwKLSAgICcnIFwKLSAgICdleHRlcm4gIkMiIHZvaWQgc3RkOjpleGl0IChpbnQpIHRocm93ICgpOyB1c2luZyBzdGQ6OmV4aXQ7JyBcCi0gICAnZXh0ZXJuICJDIiB2b2lkIHN0ZDo6ZXhpdCAoaW50KTsgdXNpbmcgc3RkOjpleGl0OycgXAotICAgJ2V4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpIHRocm93ICgpOycgXAotICAgJ2V4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpOycgXAotICAgJ3ZvaWQgZXhpdCAoaW50KTsnCi1kbwotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19kZWNsYXJhdGlvbgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotaW50Ci1tYWluICgpCi17Ci1leGl0ICg0Mik7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgOgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1jb250aW51ZQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfZGVjbGFyYXRpb24KLWludAotbWFpbiAoKQotewotZXhpdCAoNDIpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1kb25lCi1ybSAtZiBjb25mdGVzdCoKLWlmIHRlc3QgLW4gIiRhY19kZWNsYXJhdGlvbiI7IHRoZW4KLSAgZWNobyAnI2lmZGVmIF9fY3BsdXNwbHVzJyA+PmNvbmZkZWZzLmgKLSAgZWNobyAkYWNfZGVjbGFyYXRpb24gICAgICA+PmNvbmZkZWZzLmgKLSAgZWNobyAnI2VuZGlmJyAgICAgICAgICAgICA+PmNvbmZkZWZzLmgKLWZpCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotZGVwY2M9IiRDWFgiICBhbV9jb21waWxlcl9saXN0PQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KLSAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAotICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgotICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAotICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgYEQnIC0tIGJlY2F1c2UgYC1NRCcgbWVhbnMgYHB1dCB0aGUgb3V0cHV0Ci0gICMgaW4gRCcuCi0gIG1rZGlyIGNvbmZ0ZXN0LmRpcgotICAjIENvcHkgZGVwY29tcCB0byBzdWJkaXIgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd29uJ3QgZmluZCBpdCBpZiB3ZSdyZQotICAjIHVzaW5nIGEgcmVsYXRpdmUgZGlyZWN0b3J5LgotICBjcCAiJGFtX2RlcGNvbXAiIGNvbmZ0ZXN0LmRpcgotICBjZCBjb25mdGVzdC5kaXIKLSAgIyBXZSB3aWxsIGJ1aWxkIG9iamVjdHMgYW5kIGRlcGVuZGVuY2llcyBpbiBhIHN1YmRpcmVjdG9yeSBiZWNhdXNlCi0gICMgaXQgaGVscHMgdG8gZGV0ZWN0IGluYXBwbGljYWJsZSBkZXBlbmRlbmN5IG1vZGVzLiAgRm9yIGluc3RhbmNlCi0gICMgYm90aCBUcnU2NCdzIGNjIGFuZCBJQ0Mgc3VwcG9ydCAtTUQgdG8gb3V0cHV0IGRlcGVuZGVuY2llcyBhcyBhCi0gICMgc2lkZSBlZmZlY3Qgb2YgY29tcGlsYXRpb24sIGJ1dCBJQ0Mgd2lsbCBwdXQgdGhlIGRlcGVuZGVuY2llcyBpbgotICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGlsZSBUcnU2NCB3aWxsIHB1dCB0aGVtIGluIHRoZSBvYmplY3QKLSAgIyBkaXJlY3RvcnkuCi0gIG1rZGlyIHN1YgotCi0gIGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCi0gIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCi0gICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiAncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCcgPCAuL2RlcGNvbXBgCi0gIGZpCi0gIGZvciBkZXBtb2RlIGluICRhbV9jb21waWxlcl9saXN0OyBkbwotICAgICMgU2V0dXAgYSBzb3VyY2Ugd2l0aCBtYW55IGRlcGVuZGVuY2llcywgYmVjYXVzZSBzb21lIGNvbXBpbGVycwotICAgICMgbGlrZSB0byB3cmFwIGxhcmdlIGRlcGVuZGVuY3kgbGlzdHMgb24gY29sdW1uIDgwICh3aXRoIFwpLCBhbmQKLSAgICAjIHdlIHNob3VsZCBub3QgY2hvb3NlIGEgZGVwY29tcCBtb2RlIHdoaWNoIGlzIGNvbmZ1c2VkIGJ5IHRoaXMuCi0gICAgIwotICAgICMgV2UgbmVlZCB0byByZWNyZWF0ZSB0aGVzZSBmaWxlcyBmb3IgZWFjaCB0ZXN0LCBhcyB0aGUgY29tcGlsZXIgbWF5Ci0gICAgIyBvdmVyd3JpdGUgc29tZSBvZiB0aGVtIHdoZW4gdGVzdGluZyB3aXRoIG9ic2N1cmUgY29tbWFuZCBsaW5lcy4KLSAgICAjIFRoaXMgaGFwcGVucyBhdCBsZWFzdCB3aXRoIHRoZSBBSVggQyBjb21waWxlci4KLSAgICA6ID4gc3ViL2NvbmZ0ZXN0LmMKLSAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNjsgZG8KLSAgICAgIGVjaG8gJyNpbmNsdWRlICJjb25mdHN0JyRpJy5oIicgPj4gc3ViL2NvbmZ0ZXN0LmMKLSAgICAgICMgVXNpbmcgYDogPiBzdWIvY29uZnRzdCRpLmgnIGNyZWF0ZXMgb25seSBzdWIvY29uZnRzdDEuaCB3aXRoCi0gICAgICAjIFNvbGFyaXMgOCdzIHsvdXNyLH0vYmluL3NoLgotICAgICAgdG91Y2ggc3ViL2NvbmZ0c3QkaS5oCi0gICAgZG9uZQotICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKLQotICAgIGNhc2UgJGRlcG1vZGUgaW4KLSAgICBub3NpZGVlZmZlY3QpCi0gICAgICAjIGFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKLSAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQKLSAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciID0geHllczsgdGhlbgotCWNvbnRpbnVlCi0gICAgICBlbHNlCi0JYnJlYWsKLSAgICAgIGZpCi0gICAgICA7OwotICAgIG5vbmUpIGJyZWFrIDs7Ci0gICAgZXNhYwotICAgICMgV2UgY2hlY2sgd2l0aCBgLWMnIGFuZCBgLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgotICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5Ci0gICAgIyBoYW5kbGUgYC1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuCi0gICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCi0gICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gXAotICAgICAgIGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlBvIHRtcGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlRQbyBcCi0gICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgLW8gc3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IHN1Yi9jb25mdGVzdC5jIFwKLSAgICAgICAgID4vZGV2L251bGwgMj5jb25mdGVzdC5lcnIgJiYKLSAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCi0gICAgICAgZ3JlcCBzdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKLSAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCi0gICAgICAjIHRoYXQgc2F5cyBhbiBvcHRpb24gd2FzIGlnbm9yZWQgb3Igbm90IHN1cHBvcnRlZC4KLSAgICAgICMgV2hlbiBnaXZlbiAtTVAsIGljYyA3LjAgYW5kIDcuMSBjb21wbGFpbiB0aHVzbHk6Ci0gICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgd2FybmluZzogaWdub3Jpbmcgb3B0aW9uICctTSc7IG5vIGFyZ3VtZW50IHJlcXVpcmVkCi0gICAgICAjIFRoZSBkaWFnbm9zaXMgY2hhbmdlZCBpbiBpY2MgOC4wOgotICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHJlbWFyazogb3B0aW9uICctTVAnIG5vdCBzdXBwb3J0ZWQKLSAgICAgIGlmIChncmVwICdpZ25vcmluZyBvcHRpb24nIGNvbmZ0ZXN0LmVyciB8fAotICAgICAgICAgIGdyZXAgJ25vdCBzdXBwb3J0ZWQnIGNvbmZ0ZXN0LmVycikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKLSAgICAgICAgYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPSRkZXBtb2RlCi0gICAgICAgIGJyZWFrCi0gICAgICBmaQotICAgIGZpCi0gIGRvbmUKLQotICBjZCAuLgotICBybSAtcmYgY29uZnRlc3QuZGlyCi1lbHNlCi0gIGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCi1maQotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjYKLUNYWERFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlCi0KLQotCi1pZgotICB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm8gXAotICAmJiB0ZXN0ICIkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA9IGdjYzM7IHRoZW4KLSAgYW1fX2Zhc3RkZXBDWFhfVFJVRT0KLSAgYW1fX2Zhc3RkZXBDWFhfRkFMU0U9JyMnCi1lbHNlCi0gIGFtX19mYXN0ZGVwQ1hYX1RSVUU9JyMnCi0gIGFtX19mYXN0ZGVwQ1hYX0ZBTFNFPQotZmkKLQotCi0KLQotIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICRDWFggYnVpbGRzIGV4ZWN1dGFibGVzIHRoYXQgd29yayIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJENYWCBidWlsZHMgZXhlY3V0YWJsZXMgdGhhdCB3b3JrLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtiaXNvbl9jdl9jeHhfd29ya3Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfZXh0PWNjCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotCi0gICAgYmlzb25fY3ZfY3h4X3dvcmtzPW5vCi0gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8Y3N0ZGxpYj4KLQkgICNpbmNsdWRlIDxpb3N0cmVhbT4KLQkgICNpbmNsdWRlIDxtYXA+Ci0JICAjaW5jbHVkZSA8c3RyaW5nPgotCSAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLWludAotbWFpbiAoKQotewotc3RkOjpjZXJyIDw8ICIiOwotICAgICAgICAgIGNvdXQgPDwgIiI7Ci0JICB0eXBlZGVmIHN0ZDo6cGFpcjx1bnNpZ25lZCBpbnQsIGludD4gdWlwYWlyOwotCSAgc3RkOjptYXA8dW5zaWduZWQgaW50LCBpbnQ+IG07Ci0JICBzdGQ6Om1hcDx1bnNpZ25lZCBpbnQsIGludD46Oml0ZXJhdG9yIGk7Ci0JICBtLmluc2VydCAodWlwYWlyICg0LCAtNCkpOwotCSAgZm9yIChpID0gbS5iZWdpbiAoKTsgaSAhPSBtLmVuZCAoKTsgKytpKQotCSAgICBpZiAoaS0+Zmlyc3QgIT0gNCkKLQkgICAgICByZXR1cm4gMTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBpZiB7IGFjX3RyeT0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfb2JqZXh0ICRMSUJTID4mNScKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgotICBiaXNvbl9jdl9jeHhfd29ya3M9Y3Jvc3MKLWVsc2UKLSAgaWYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGJpc29uX2N2X2N4eF93b3Jrcz15ZXMKLWZpCi0KLWZpCi0KLWZpCi0KLSAgICAgICBybSAtZiBjb25mdGVzdCRhY19leGVleHQKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgICBhY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYmlzb25fY3ZfY3h4X3dvcmtzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRiaXNvbl9jdl9jeHhfd29ya3MiID4mNgotCi0gY2FzZSAkYmlzb25fY3ZfY3h4X3dvcmtzIGluCi0geWVzKQotICAgIEJJU09OX0NYWF9XT1JLUz0nOic7OwotIG5vIHwgY3Jvc3MpCi0gICAgQklTT05fQ1hYX1dPUktTPSdleGl0IDc3Jzs7Ci0gZXNhYwotCi0KLQotCi1pZiB0ZXN0ICRiaXNvbl9jdl9jeHhfd29ya3MgPSB5ZXM7IHRoZW4KLSAgQklTT05fQ1hYX1dPUktTX1RSVUU9Ci0gIEJJU09OX0NYWF9XT1JLU19GQUxTRT0nIycKLWVsc2UKLSAgQklTT05fQ1hYX1dPUktTX1RSVUU9JyMnCi0gIEJJU09OX0NYWF9XT1JLU19GQUxTRT0KLWZpCi0KK2Nhc2UgJFZBTEdSSU5EOiRob3N0X29zIGluCisgICcnOiopIDs7CisgICo6ZGFyd2luKikKKyAgICAjIFNlZSBSRUFETUUtaGFja2luZy4KKyAgICAjIFZBTEdSSU5EKz0nIC0tc3VwcHJlc3Npb25zPSQoYWJzX3RvcF9zcmNkaXIpL2J1aWxkLWF1eC9kYXJ3aW4xMS40LjAudmFsZ3JpbmQnCisgICAgVkFMR1JJTkQ9OzsKKyAgKjoqKQorICAgIFZBTEdSSU5EX1BSRUJJU09OPSIkVkFMR1JJTkQgLXEiCis7OworZXNhYwogCiAKIEFVVE9NNFRFPSR7QVVUT000VEUtIiR7YW1fbWlzc2luZ19ydW59YXV0b200dGUifQogCiAjIE5lZWRlZCBieSB0ZXN0cy9hdGxvY2FsLmluLgogCi1PMENGTEFHUz1gZWNobyAkQ0ZMQUdTIHwgc2VkICdzLy1PWzAtOV0gKi8vJ2AKLQotTzBDWFhGTEFHUz1gZWNobyAkQ1hYRkxBR1MgfCBzZWQgJ3MvLU9bMC05XSAqLy8nYAogCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBNYWtlZmlsZSBidWlsZC1hdXgvTWFrZWZpbGUgcG8vTWFrZWZpbGUuaW4gZGF0YS9NYWtlZmlsZSBleGFtcGxlcy9NYWtlZmlsZSBleGFtcGxlcy9jYWxjKysvTWFrZWZpbGUgbGliL01ha2VmaWxlIHNyYy9NYWtlZmlsZSBkb2MvTWFrZWZpbGUiCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEphdmEgdmlydHVhbCBtYWNoaW5lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBKYXZhIHZpcnR1YWwgbWFjaGluZS4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXyB8fCBkZWZpbmVkIF9fQ1lHV0lOX18gfHwgZGVmaW5lZCBfX0VNWF9fIHx8IGRlZmluZWQgX19ESkdQUF9fCisgIHllcworI2VuZGlmCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgQ0xBU1NQQVRIX1NFUEFSQVRPUj0nOycKK2Vsc2UKKyAgQ0xBU1NQQVRIX1NFUEFSQVRPUj0nOicKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBDT05GX0pBVkE9CisgIEhBVkVfSkFWQV9FTlZWQVI9CisgIEhBVkVfR0lKPQorICBIQVZFX0pBVkE9CisgIEhBVkVfSlJFPQorICBIQVZFX0pWSUVXPQorICBIQVZFX0pBVkFFWEVDPTEKKyAgaWYgdGVzdCAtbiAiJEpBVkEiOyB0aGVuCisgICAgSEFWRV9KQVZBX0VOVlZBUj0xCisgICAgQ09ORl9KQVZBPSIkSkFWQSIKKyAgZWxzZQorICAgICAgICAgICAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2lqIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBnaWo7IGFjX3dvcmQ9JDIKKzoKK2lmICR7YWNfY3ZfcHJvZ19IQVZFX0dJSl9JTl9QQVRIKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEhBVkVfR0lKX0lOX1BBVEgiOyB0aGVuCisgIGFjX2N2X3Byb2dfSEFWRV9HSUpfSU5fUEFUSD0iJEhBVkVfR0lKX0lOX1BBVEgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19IQVZFX0dJSl9JTl9QQVRIPSJ5ZXMiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorSEFWRV9HSUpfSU5fUEFUSD0kYWNfY3ZfcHJvZ19IQVZFX0dJSl9JTl9QQVRICitpZiB0ZXN0IC1uICIkSEFWRV9HSUpfSU5fUEFUSCI7IHRoZW4KKyAgOgorZWxzZQorICA6CitmaQorCisKKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImphdmEiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGphdmE7IGFjX3dvcmQ9JDIKKzoKK2lmICR7YWNfY3ZfcHJvZ19IQVZFX0pBVkFfSU5fUEFUSCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRIQVZFX0pBVkFfSU5fUEFUSCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19IQVZFX0pBVkFfSU5fUEFUSD0iJEhBVkVfSkFWQV9JTl9QQVRIIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfSEFWRV9KQVZBX0lOX1BBVEg9InllcyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitIQVZFX0pBVkFfSU5fUEFUSD0kYWNfY3ZfcHJvZ19IQVZFX0pBVkFfSU5fUEFUSAoraWYgdGVzdCAtbiAiJEhBVkVfSkFWQV9JTl9QQVRIIjsgdGhlbgorICA6CitlbHNlCisgIDoKK2ZpCisKKworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAianJlIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBqcmU7IGFjX3dvcmQ9JDIKKzoKK2lmICR7YWNfY3ZfcHJvZ19IQVZFX0pSRV9JTl9QQVRIKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEhBVkVfSlJFX0lOX1BBVEgiOyB0aGVuCisgIGFjX2N2X3Byb2dfSEFWRV9KUkVfSU5fUEFUSD0iJEhBVkVfSlJFX0lOX1BBVEgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19IQVZFX0pSRV9JTl9QQVRIPSJ5ZXMiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorSEFWRV9KUkVfSU5fUEFUSD0kYWNfY3ZfcHJvZ19IQVZFX0pSRV9JTl9QQVRICitpZiB0ZXN0IC1uICIkSEFWRV9KUkVfSU5fUEFUSCI7IHRoZW4KKyAgOgorZWxzZQorICA6CitmaQorCisKKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImp2aWV3Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBqdmlldzsgYWNfd29yZD0kMgorOgoraWYgJHthY19jdl9wcm9nX0hBVkVfSlZJRVdfSU5fUEFUSCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRIQVZFX0pWSUVXX0lOX1BBVEgiOyB0aGVuCisgIGFjX2N2X3Byb2dfSEFWRV9KVklFV19JTl9QQVRIPSIkSEFWRV9KVklFV19JTl9QQVRIIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfSEFWRV9KVklFV19JTl9QQVRIPSJ5ZXMiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorSEFWRV9KVklFV19JTl9QQVRIPSRhY19jdl9wcm9nX0hBVkVfSlZJRVdfSU5fUEFUSAoraWYgdGVzdCAtbiAiJEhBVkVfSlZJRVdfSU5fUEFUSCI7IHRoZW4KKyAgOgorZWxzZQorICA6CitmaQorCisKKworICAgIGV4cG9ydCBDTEFTU1BBVEgKKyAgICBpZiB0ZXN0IC1uICIkSEFWRV9HSUpfSU5fUEFUSCIgXAorICAgICAgICYmIGdpaiAtLXZlcnNpb24gPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCBcCisgICAgICAgOyB0aGVuCisgICAgICBIQVZFX0dJSj0xCisgICAgICBDT05GX0pBVkE9ImdpaiIKKyAgICBlbHNlCisgICAgICBpZiB0ZXN0IC1uICIkSEFWRV9KQVZBX0lOX1BBVEgiIFwKKyAgICAgICAgICYmIGphdmEgLXZlcnNpb24gPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCBcCisgICAgICAgICA7IHRoZW4KKyAgICAgICAgSEFWRV9KQVZBPTEKKyAgICAgICAgQ09ORl9KQVZBPSJqYXZhIgorICAgICAgZWxzZQorICAgICAgICBpZiB0ZXN0IC1uICIkSEFWRV9KUkVfSU5fUEFUSCIgXAorICAgICAgICAgICAmJiAoanJlID4vZGV2L251bGwgMj4vZGV2L251bGwgfHwgdGVzdCAkPyA9IDEpIFwKKyAgICAgICAgICAgOyB0aGVuCisgICAgICAgICAgSEFWRV9KUkU9MQorICAgICAgICAgIENPTkZfSkFWQT0ianJlIgorICAgICAgICBlbHNlCisgICAgICAgICAgaWYgdGVzdCAtbiAiJEhBVkVfSlZJRVdfSU5fUEFUSCIgXAorICAgICAgICAgICAgICYmIChqdmlldyAtPyA+L2Rldi9udWxsIDI+L2Rldi9udWxsIHx8IHRlc3QgJD8gPSAxKSBcCisgICAgICAgICAgICAgOyB0aGVuCisgICAgICAgICAgICBIQVZFX0pWSUVXPTEKKyAgICAgICAgICAgIENPTkZfSkFWQT0ianZpZXciCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgSEFWRV9KQVZBRVhFQz0KKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorCisgIGZpCisgIGlmIHRlc3QgLW4gIiRIQVZFX0pBVkFFWEVDIjsgdGhlbgorICAgIGFjX3Jlc3VsdD0iJENPTkZfSkFWQSIKKyAgZWxzZQorICAgIGFjX3Jlc3VsdD0ibm8iCisgIGZpCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzdWx0IiA+JjUKKyRhc19lY2hvICIkYWNfcmVzdWx0IiA+JjY7IH0KKworCisKKworCisKKworCisKKworCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fIHx8IGRlZmluZWQgX19DWUdXSU5fXyB8fCBkZWZpbmVkIF9fRU1YX18gfHwgZGVmaW5lZCBfX0RKR1BQX18KKyAgeWVzCisjZW5kaWYKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBDTEFTU1BBVEhfU0VQQVJBVE9SPSc7JworZWxzZQorICBDTEFTU1BBVEhfU0VQQVJBVE9SPSc6JworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIHNvdXJjZV92ZXJzaW9uPTEuMworICB0ZXN0IC1uICIkc291cmNlX3ZlcnNpb24iIHx8IHsKKyAgICBhc19mbl9lcnJvciAkPyAibWlzc2luZyBzb3VyY2UtdmVyc2lvbiBhcmd1bWVudCB0byBndF9KQVZBQ09NUCIgIiRMSU5FTk8iIDUKKyAgfQorICBpZiB0ZXN0IC1uICIkSEFWRV9KQVZBRVhFQyI7IHRoZW4KKyAgICAgICAgICAgICAgY2F0ID4gY29uZnRlc3R2ZXIuamF2YSA8PEVPRgorcHVibGljIGNsYXNzIGNvbmZ0ZXN0dmVyIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLnNwZWNpZmljYXRpb24udmVyc2lvbiIpKTsKKyAgfQorfQorRU9GCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAneXp3eCEkIUkhRCwhKSEzKyE0ITUqITYsITQhNywhOCE5KSE6KSE7IiEoTWVpZW5OIiEkRkdXIiElT2phYiIhMlFlaWJSb2haYmxWWVpnYiIhJWhZZWkiITlGWFFmWXBZS2dZaWRLVW5sZWlkTEdXIiEsVWpvbF9iUGVnYiIhM19qaWNuYm1ucGJsSmZZcFkvISohKykhPC8hPSE+IiE9ZllwWUpta2JfZWNlX1luZWppSnBibG1lamkvIT8hQCkhQS8hQiFDIiEuX2ppY25ibW5wYmwiITNmWXBZS2dZaWRLU1pmYl9uIiEzZllwWUtnWWlkS1VxbW5iaCIhJGpvbiIhOFFmWXBZS2VqS1RsZWluVW5sYlloTCIhLmRiblRsamtibG5xIiFFRlFmWXBZS2dZaWRLVW5sZWlkTEdRZllwWUtnWWlkS1VubGVpZEwiITZmWXBZS2VqS1RsZWluVW5sYlloIiEpa2xlaW5naSIhOEZRZllwWUtnWWlkS1VubGVpZExHVyFEISghKSEhISEhIyEiISohKyEiISwhISFAISIhIiEhISZIdSEiciEhISIhLiEhISghIiEhISIhKyEvITAhIiEsISEhRiEjISIhISEvcyEjNSR2ISV0ISZyISEhIiEuISEhLCEjISEhJCEuISUhIiExISEhIyEyJyBcCisgICAgICAgICB8IHRyIC1kICdcMDEyXDAxNScgXAorICAgICAgICAgfCB0ciAnISIjJCUmKCkqKywuLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hKS0xNTk9QUVJTVFVWV1hZWl9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekknICdcMDAwXDAwMVwwMDJcMDAzXDAwNFwwMDVcMDA2XDAwN1wwMTBcMDExXDAxMlwwMTNcMDE0XDAxNVwwMTZcMDE3XDAyMFwwMjFcMDIyXDAyM1wwMjRcMDI1XDAyNlwwMjdcMDMwXDAzMVwwMzJcMDMzXDAzNFwwMzVcMDM2XDAzN1wwNDBcMDQxXDA0NlwwNTBcMDUxXDA1MlwwNTZcMDU3XDA3M1wwNzRcMDc2XDEwM1wxMDZcMTE0XDExNlwxMTdcMTIwXDEyM1wxMjRcMTI2XDEzM1wxNDFcMTQyXDE0M1wxNDRcMTQ1XDE0NlwxNDdcMTUxXDE1MlwxNTRcMTU1XDE1NlwxNTdcMTYwXDE2MlwxNjNcMTY0XDE2NVwxNjZcMTcxXDI2MVwyNjJcMjY2XDI2N1wyNzBcMjcyXDI3NlwzMTJcMzc2XDA1NScgXAorICAgICAgICAgPiBjb25mdGVzdHZlci5jbGFzcworICAgICAgIHRhcmdldF92ZXJzaW9uPWB7CisgICAgICAgICB1bnNldCBKQVZBX0hPTUUKKyAgICAgICAgIGVjaG8gIiRhc19tZTozNjc2NDogQ0xBU1NQQVRIPS4ke0NMQVNTUEFUSDorJENMQVNTUEFUSF9TRVBBUkFUT1IkQ0xBU1NQQVRIfSAkQ09ORl9KQVZBIGNvbmZ0ZXN0dmVyIiA+JjUKKyAgICAgICAgIENMQVNTUEFUSD0uJHtDTEFTU1BBVEg6KyRDTEFTU1BBVEhfU0VQQVJBVE9SJENMQVNTUEFUSH0gJENPTkZfSkFWQSBjb25mdGVzdHZlciAyPiY1CisgICAgICAgfWAKKyAgICAgICBjYXNlICIkdGFyZ2V0X3ZlcnNpb24iIGluCisgICAgICAgICAxLjEgfCAxLjIgfCAxLjMgfCAxLjQgfCAxLjUgfCAxLjYpIDs7CisgICAgICAgICBudWxsKQorICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF92ZXJzaW9uPTEuMSA7OworICAgICAgICAgKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1bmtub3duIHRhcmdldC12ZXJzaW9uICR0YXJnZXRfdmVyc2lvbiwgcGxlYXNlIHVwZGF0ZSBndF9KQVZBQ09NUCBtYWNybyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1bmtub3duIHRhcmdldC12ZXJzaW9uICR0YXJnZXRfdmVyc2lvbiwgcGxlYXNlIHVwZGF0ZSBndF9KQVZBQ09NUCBtYWNybyIgPiYyO30KKyAgICAgICAgICAgIHRhcmdldF92ZXJzaW9uPTEuMSA7OworICAgICAgIGVzYWMKKyAgICAgZWxzZQorICAgICAgIHRhcmdldF92ZXJzaW9uPSIxLjEiCisgICAgIGZpCisKKyAgY2FzZSAiJHNvdXJjZV92ZXJzaW9uIiBpbgorICAgIDEuMykgZ29vZGNvZGU9J2NsYXNzIGNvbmZ0ZXN0IHt9JworICAgICAgICAgZmFpbGNvZGU9J2NsYXNzIGNvbmZ0ZXN0ZmFpbCB7IHN0YXRpYyB7IGFzc2VydCh0cnVlKTsgfSB9JyA7OworICAgIDEuNCkgZ29vZGNvZGU9J2NsYXNzIGNvbmZ0ZXN0ICAgICB7IHN0YXRpYyB7IGFzc2VydCh0cnVlKTsgfSB9JworICAgICAgICAgZmFpbGNvZGU9J2NsYXNzIGNvbmZ0ZXN0ZmFpbDxUPiB7IFQgZm9vKCkgeyByZXR1cm4gbnVsbDsgfSB9JyA7OworICAgIDEuNSkgZ29vZGNvZGU9J2NsYXNzIGNvbmZ0ZXN0PFQ+ICAgICB7IFQgZm9vKCkgeyByZXR1cm4gbnVsbDsgfSB9JworICAgICAgICAgZmFpbGNvZGU9J2NsYXNzIGNvbmZ0ZXN0ZmFpbCBzeW50YXggZXJyb3InIDs7CisgICAgKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgc291cmNlLXZlcnNpb24gYXJndW1lbnQgdG8gZ3RfSkFWQUNPTVA6ICRzb3VyY2VfdmVyc2lvbiIgIiRMSU5FTk8iIDUgOzsKKyAgZXNhYworICBjYXNlICIkdGFyZ2V0X3ZlcnNpb24iIGluCisgICAgMS4xKSBjZnZlcnNpb249NDUgOzsKKyAgICAxLjIpIGNmdmVyc2lvbj00NiA7OworICAgIDEuMykgY2Z2ZXJzaW9uPTQ3IDs7CisgICAgMS40KSBjZnZlcnNpb249NDggOzsKKyAgICAxLjUpIGNmdmVyc2lvbj00OSA7OworICAgIDEuNikgY2Z2ZXJzaW9uPTUwIDs7CisgICAgKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdGFyZ2V0LXZlcnNpb24gYXJndW1lbnQgdG8gZ3RfSkFWQUNPTVA6ICR0YXJnZXRfdmVyc2lvbiIgIiRMSU5FTk8iIDUgOzsKKyAgZXNhYworICAjIEZ1bmN0aW9uIHRvIG91dHB1dCB0aGUgY2xhc3NmaWxlIHZlcnNpb24gb2YgYSBmaWxlICg4dGggYnl0ZSkgaW4gZGVjaW1hbC4KKyAgaWYgb2QgLUEgeCA8IC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisgICAgIyBVc2UgUE9TSVggb2QuCisgICAgZnVuY19jbGFzc2ZpbGVfdmVyc2lvbiAoKQorICAgIHsKKyAgICAgIG9kIC1BIG4gLXQgZDEgLWogNyAtTiAxICIkMSIKKyAgICB9CisgIGVsc2UKKyAgICAjIFVzZSBCU0QgaGV4ZHVtcC4KKyAgICBmdW5jX2NsYXNzZmlsZV92ZXJzaW9uICgpCisgICAgeworICAgICAgZGQgaWY9IiQxIiBicz0xIGNvdW50PTEgc2tpcD03IDI+L2Rldi9udWxsIHwgaGV4ZHVtcCAtZSAnMS8xICIlM2QgIicKKyAgICAgIGVjaG8KKyAgICB9CisgIGZpCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEphdmEgY29tcGlsZXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEphdmEgY29tcGlsZXIuLi4gIiA+JjY7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05GX0pBVkFDPQorICBIQVZFX0pBVkFDX0VOVlZBUj0KKyAgSEFWRV9HQ0pfQz0KKyAgSEFWRV9KQVZBQz0KKyAgSEFWRV9KSUtFUz0KKyAgSEFWRV9KQVZBQ09NUD0KKyAgY2F0ID4gY29uZnRlc3RsaWIuamF2YSA8PEVPRgorcHVibGljIGNsYXNzIGNvbmZ0ZXN0bGliIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKKyAgfQorfQorRU9GCisgIGVjaG8gIiRnb29kY29kZSIgPiBjb25mdGVzdC5qYXZhCisgIGVjaG8gIiRmYWlsY29kZSIgPiBjb25mdGVzdGZhaWwuamF2YQorICAgICAgICBpZiB0ZXN0IC1uICIkSkFWQUMiOyB0aGVuCisgICAgICAgIGlmICRKQVZBQyAtLXZlcnNpb24gMj4vZGV2L251bGwgfCBzZWQgLWUgMXEgfCBncmVwIGdjaiA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgaWYgJEpBVkFDIC0tdmVyc2lvbiAyPi9kZXYvbnVsbCB8IHNlZCAtZSAncyxeW14wLTldKiwsJyAtZSAxcSB8IHNlZCAtZSAnL140XC5bMDEyXS9kJyB8IGdyZXAgJ15bNC05XScgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgcm0gLWYgY29uZnRlc3QuY2xhc3MKKyAgICAgICAgaWYgeyBlY2hvICIkYXNfbWU6MzY4MzI6ICRKQVZBQyAtZCAuIGNvbmZ0ZXN0LmphdmEiID4mNQorICAgICAgICAgICAgICRKQVZBQyAtZCAuIGNvbmZ0ZXN0LmphdmEgPiY1IDI+JjEKKyAgICAgICAgICAgfSBcCisgICAgICAgICAgICYmIHRlc3QgLWYgY29uZnRlc3QuY2xhc3MgXAorICAgICAgICAgICAmJiBleHByIGBmdW5jX2NsYXNzZmlsZV92ZXJzaW9uIGNvbmZ0ZXN0LmNsYXNzYCAnPD0nICRjZnZlcnNpb24gPi9kZXYvbnVsbCAyPiY1OyB0aGVuCisgICAgICAgICAgICAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmNsYXNzCisgICAgICAgICAgcm0gLWYgY29uZnRlc3RmYWlsLmNsYXNzCisgICAgICAgICAgaWYgeyBlY2hvICIkYXNfbWU6MzY4Mzk6ICRKQVZBQyAtZnNvdXJjZT0kc291cmNlX3ZlcnNpb24gLWQgLiBjb25mdGVzdC5qYXZhIiA+JjUKKyAgICAgICAgICAgICAgICRKQVZBQyAtZnNvdXJjZT0iJHNvdXJjZV92ZXJzaW9uIiAtZCAuIGNvbmZ0ZXN0LmphdmEgPiY1IDI+JjEKKyAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAmJiB0ZXN0IC1mIGNvbmZ0ZXN0LmNsYXNzIFwKKyAgICAgICAgICAgICAmJiBleHByIGBmdW5jX2NsYXNzZmlsZV92ZXJzaW9uIGNvbmZ0ZXN0LmNsYXNzYCAnPD0nICRjZnZlcnNpb24gPi9kZXYvbnVsbCAyPiY1IFwKKyAgICAgICAgICAgICAmJiB7IGVjaG8gIiRhc19tZTozNjg0NDogJEpBVkFDIC1kIC4gY29uZnRlc3RmYWlsLmphdmEiID4mNQorICAgICAgICAgICAgICAgICAgJEpBVkFDIC1kIC4gY29uZnRlc3RmYWlsLmphdmEgPiY1IDI+JjEKKyAgICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAmJiB0ZXN0IC1mIGNvbmZ0ZXN0ZmFpbC5jbGFzcyBcCisgICAgICAgICAgICAgJiYgISB7IGVjaG8gIiRhc19tZTozNjg0ODogJEpBVkFDIC1mc291cmNlPSRzb3VyY2VfdmVyc2lvbiAtZCAuIGNvbmZ0ZXN0ZmFpbC5qYXZhIiA+JjUKKyAgICAgICAgICAgICAgICAgICAgJEpBVkFDIC1mc291cmNlPSIkc291cmNlX3ZlcnNpb24iIC1kIC4gY29uZnRlc3RmYWlsLmphdmEgPiY1IDI+JjEKKyAgICAgICAgICAgICAgICAgIH07IHRoZW4KKyAgICAgICAgICAgIENPTkZfSkFWQUM9IiRKQVZBQyAtZnNvdXJjZT0kc291cmNlX3ZlcnNpb24iCisgICAgICAgICAgICBIQVZFX0pBVkFDX0VOVlZBUj0xCisgICAgICAgICAgICBIQVZFX0pBVkFDT01QPTEKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBDT05GX0pBVkFDPSIkSkFWQUMiCisgICAgICAgICAgICBIQVZFX0pBVkFDX0VOVlZBUj0xCisgICAgICAgICAgICBIQVZFX0pBVkFDT01QPTEKKyAgICAgICAgICBmaQorICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmNsYXNzCisgICAgICAgICAgcm0gLWYgY29uZnRlc3RmYWlsLmNsYXNzCisgICAgICAgICAgaWYgeyBlY2hvICIkYXNfbWU6MzY4NjI6ICRKQVZBQyAtZnNvdXJjZT0kc291cmNlX3ZlcnNpb24gLWZ0YXJnZXQ9JHRhcmdldF92ZXJzaW9uIC1kIC4gY29uZnRlc3QuamF2YSIgPiY1CisgICAgICAgICAgICAgICAkSkFWQUMgLWZzb3VyY2U9IiRzb3VyY2VfdmVyc2lvbiIgLWZ0YXJnZXQ9IiR0YXJnZXRfdmVyc2lvbiIgLWQgLiBjb25mdGVzdC5qYXZhID4mNSAyPiYxCisgICAgICAgICAgICAgfSBcCisgICAgICAgICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdC5jbGFzcyBcCisgICAgICAgICAgICAgJiYgZXhwciBgZnVuY19jbGFzc2ZpbGVfdmVyc2lvbiBjb25mdGVzdC5jbGFzc2AgJzw9JyAkY2Z2ZXJzaW9uID4vZGV2L251bGwgMj4mNTsgdGhlbgorICAgICAgICAgICAgQ09ORl9KQVZBQz0iJEpBVkFDIC1mc291cmNlPSRzb3VyY2VfdmVyc2lvbiAtZnRhcmdldD0kdGFyZ2V0X3ZlcnNpb24iCisgICAgICAgICAgICBIQVZFX0pBVkFDX0VOVlZBUj0xCisgICAgICAgICAgICBIQVZFX0pBVkFDT01QPTEKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmIHRlc3QgIiR0YXJnZXRfdmVyc2lvbiIgPSAxLjQgJiYgdGVzdCAiJHNvdXJjZV92ZXJzaW9uIiA9IDEuNDsgdGhlbgorICAgICAgICAgICAgICAgICAgICBybSAtZiBjb25mdGVzdC5jbGFzcworICAgICAgICAgIGlmIHsgZWNobyAiJGFzX21lOjM2ODc1OiAkSkFWQUMgLWQgLiBjb25mdGVzdC5qYXZhIiA+JjUKKyAgICAgICAgICAgICAgICRKQVZBQyAtZCAuIGNvbmZ0ZXN0LmphdmEgPiY1IDI+JjEKKyAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAmJiB0ZXN0IC1mIGNvbmZ0ZXN0LmNsYXNzOyB0aGVuCisgICAgICAgICAgICBDT05GX0pBVkFDPSIkSkFWQUMiCisgICAgICAgICAgICBIQVZFX0pBVkFDX0VOVlZBUj0xCisgICAgICAgICAgICBIQVZFX0pBVkFDT01QPTEKKyAgICAgICAgICBmaQorICAgICAgICBlbHNlCisgICAgICAgICAgaWYgdGVzdCAiJHRhcmdldF92ZXJzaW9uIiA9IDEuNCAmJiB0ZXN0ICIkc291cmNlX3ZlcnNpb24iID0gMS4zOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhY193b3Jrcz0KKyAgICAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmNsYXNzCisgICAgICAgICAgICBpZiB7IGVjaG8gIiRhc19tZTozNjg4NzogJEpBVkFDIC1kIC4gY29uZnRlc3QuamF2YSIgPiY1CisgICAgICAgICAgICAgICAgICRKQVZBQyAtZCAuIGNvbmZ0ZXN0LmphdmEgPiY1IDI+JjEKKyAgICAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdC5jbGFzczsgdGhlbgorICAgICAgICAgICAgICBqYXZhY193b3Jrcz0xCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgamF2YWNfbm9hc3NlcnRfd29ya3M9CisgICAgICAgICAgICBybSAtZiBjb25mdGVzdC5jbGFzcworICAgICAgICAgICAgaWYgeyBlY2hvICIkYXNfbWU6MzY4OTU6ICRKQVZBQyAtZm5vLWFzc2VydCAtZCAuIGNvbmZ0ZXN0LmphdmEiID4mNQorICAgICAgICAgICAgICAgICAkSkFWQUMgLWZuby1hc3NlcnQgLWQgLiBjb25mdGVzdC5qYXZhID4mNSAyPiYxCisgICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAgICYmIHRlc3QgLWYgY29uZnRlc3QuY2xhc3M7IHRoZW4KKyAgICAgICAgICAgICAgamF2YWNfbm9hc3NlcnRfd29ya3M9MQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRqYXZhY193b3JrcyIgJiYgdGVzdCAtbiAiJGphdmFjX25vYXNzZXJ0X3dvcmtzIjsgdGhlbgorICAgICAgICAgICAgICBybSAtZiBjb25mdGVzdGZhaWwuY2xhc3MKKyAgICAgICAgICAgICAgaWYgeyBlY2hvICIkYXNfbWU6MzY5MDM6ICRKQVZBQyAtZCAuIGNvbmZ0ZXN0ZmFpbC5qYXZhIiA+JjUKKyAgICAgICAgICAgICAgICAgICAkSkFWQUMgLWQgLiBjb25mdGVzdGZhaWwuamF2YSA+JjUgMj4mMQorICAgICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdGZhaWwuY2xhc3MgXAorICAgICAgICAgICAgICAgICAmJiAhIHsgZWNobyAiJGFzX21lOjM2OTA3OiAkSkFWQUMgLWZuby1hc3NlcnQgLWQgLiBjb25mdGVzdGZhaWwuamF2YSIgPiY1CisgICAgICAgICAgICAgICAgICAgICAgICAkSkFWQUMgLWZuby1hc3NlcnQgLWQgLiBjb25mdGVzdGZhaWwuamF2YSA+JjUgMj4mMQorICAgICAgICAgICAgICAgICAgICAgIH07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YWNfd29ya3M9CisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGphdmFjX3dvcmtzIjsgdGhlbgorICAgICAgICAgICAgICBDT05GX0pBVkFDPSIkSkFWQUMiCisgICAgICAgICAgICAgIEhBVkVfSkFWQUNfRU5WVkFSPTEKKyAgICAgICAgICAgICAgSEFWRV9KQVZBQ09NUD0xCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRqYXZhY19ub2Fzc2VydF93b3JrcyI7IHRoZW4KKyAgICAgICAgICAgICAgICBDT05GX0pBVkFDPSIkSkFWQUMgLWZuby1hc3NlcnQiCisgICAgICAgICAgICAgICAgSEFWRV9KQVZBQ19FTlZWQVI9MQorICAgICAgICAgICAgICAgIEhBVkVfSkFWQUNPTVA9MQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBlbHNlCisgICAgICAgICAgICAgICAgICBybSAtZiBjb25mdGVzdC5jbGFzcworICAgICAgaWYgeyBlY2hvICIkYXNfbWU6MzY5Mjk6ICRKQVZBQyAtZCAuIGNvbmZ0ZXN0LmphdmEiID4mNQorICAgICAgICAgICAkSkFWQUMgLWQgLiBjb25mdGVzdC5qYXZhID4mNSAyPiYxCisgICAgICAgICB9IFwKKyAgICAgICAgICYmIHRlc3QgLWYgY29uZnRlc3QuY2xhc3MgXAorICAgICAgICAgJiYgZXhwciBgZnVuY19jbGFzc2ZpbGVfdmVyc2lvbiBjb25mdGVzdC5jbGFzc2AgJzw9JyAkY2Z2ZXJzaW9uID4vZGV2L251bGwgMj4mNTsgdGhlbgorICAgICAgICAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmNsYXNzCisgICAgICAgIHJtIC1mIGNvbmZ0ZXN0ZmFpbC5jbGFzcworICAgICAgICBpZiB7IGVjaG8gIiRhc19tZTozNjkzNjogJEpBVkFDIC1zb3VyY2UgJHNvdXJjZV92ZXJzaW9uIC1kIC4gY29uZnRlc3QuamF2YSIgPiY1CisgICAgICAgICAgICAgJEpBVkFDIC1zb3VyY2UgIiRzb3VyY2VfdmVyc2lvbiIgLWQgLiBjb25mdGVzdC5qYXZhID4mNSAyPiYxCisgICAgICAgICAgIH0gXAorICAgICAgICAgICAmJiB0ZXN0IC1mIGNvbmZ0ZXN0LmNsYXNzIFwKKyAgICAgICAgICAgJiYgZXhwciBgZnVuY19jbGFzc2ZpbGVfdmVyc2lvbiBjb25mdGVzdC5jbGFzc2AgJzw9JyAkY2Z2ZXJzaW9uID4vZGV2L251bGwgMj4mNSBcCisgICAgICAgICAgICYmIHsgZWNobyAiJGFzX21lOjM2OTQxOiAkSkFWQUMgLWQgLiBjb25mdGVzdGZhaWwuamF2YSIgPiY1CisgICAgICAgICAgICAgICAgJEpBVkFDIC1kIC4gY29uZnRlc3RmYWlsLmphdmEgPiY1IDI+JjEKKyAgICAgICAgICAgICAgfSBcCisgICAgICAgICAgICYmIHRlc3QgLWYgY29uZnRlc3RmYWlsLmNsYXNzIFwKKyAgICAgICAgICAgJiYgISB7IGVjaG8gIiRhc19tZTozNjk0NTogJEpBVkFDIC1zb3VyY2UgJHNvdXJjZV92ZXJzaW9uIC1kIC4gY29uZnRlc3RmYWlsLmphdmEiID4mNQorICAgICAgICAgICAgICAgICAgJEpBVkFDIC1zb3VyY2UgIiRzb3VyY2VfdmVyc2lvbiIgLWQgLiBjb25mdGVzdGZhaWwuamF2YSA+JjUgMj4mMQorICAgICAgICAgICAgICAgIH07IHRoZW4KKyAgICAgICAgICBDT05GX0pBVkFDPSIkSkFWQUMgLXNvdXJjZSAkc291cmNlX3ZlcnNpb24iCisgICAgICAgICAgSEFWRV9KQVZBQ19FTlZWQVI9MQorICAgICAgICAgIEhBVkVfSkFWQUNPTVA9MQorICAgICAgICBlbHNlCisgICAgICAgICAgQ09ORl9KQVZBQz0iJEpBVkFDIgorICAgICAgICAgIEhBVkVfSkFWQUNfRU5WVkFSPTEKKyAgICAgICAgICBIQVZFX0pBVkFDT01QPTEKKyAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmNsYXNzCisgICAgICAgIGlmIHsgZWNobyAiJGFzX21lOjM2OTU4OiAkSkFWQUMgLXRhcmdldCAkdGFyZ2V0X3ZlcnNpb24gLWQgLiBjb25mdGVzdC5qYXZhIiA+JjUKKyAgICAgICAgICAgICAkSkFWQUMgLXRhcmdldCAiJHRhcmdldF92ZXJzaW9uIiAtZCAuIGNvbmZ0ZXN0LmphdmEgPiY1IDI+JjEKKyAgICAgICAgICAgfSBcCisgICAgICAgICAgICYmIHRlc3QgLWYgY29uZnRlc3QuY2xhc3MgXAorICAgICAgICAgICAmJiBleHByIGBmdW5jX2NsYXNzZmlsZV92ZXJzaW9uIGNvbmZ0ZXN0LmNsYXNzYCAnPD0nICRjZnZlcnNpb24gPi9kZXYvbnVsbCAyPiY1OyB0aGVuCisgICAgICAgICAgICAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmNsYXNzCisgICAgICAgICAgcm0gLWYgY29uZnRlc3RmYWlsLmNsYXNzCisgICAgICAgICAgaWYgeyBlY2hvICIkYXNfbWU6MzY5NjU6ICRKQVZBQyAtdGFyZ2V0ICR0YXJnZXRfdmVyc2lvbiAtc291cmNlICRzb3VyY2VfdmVyc2lvbiAtZCAuIGNvbmZ0ZXN0LmphdmEiID4mNQorICAgICAgICAgICAgICAgJEpBVkFDIC10YXJnZXQgIiR0YXJnZXRfdmVyc2lvbiIgLXNvdXJjZSAiJHNvdXJjZV92ZXJzaW9uIiAtZCAuIGNvbmZ0ZXN0LmphdmEgPiY1IDI+JjEKKyAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAmJiB0ZXN0IC1mIGNvbmZ0ZXN0LmNsYXNzIFwKKyAgICAgICAgICAgICAmJiBleHByIGBmdW5jX2NsYXNzZmlsZV92ZXJzaW9uIGNvbmZ0ZXN0LmNsYXNzYCAnPD0nICRjZnZlcnNpb24gPi9kZXYvbnVsbCAyPiY1IFwKKyAgICAgICAgICAgICAmJiB7IGVjaG8gIiRhc19tZTozNjk3MDogJEpBVkFDIC10YXJnZXQgJHRhcmdldF92ZXJzaW9uIC1kIC4gY29uZnRlc3RmYWlsLmphdmEiID4mNQorICAgICAgICAgICAgICAgICAgJEpBVkFDIC10YXJnZXQgIiR0YXJnZXRfdmVyc2lvbiIgLWQgLiBjb25mdGVzdGZhaWwuamF2YSA+JjUgMj4mMQorICAgICAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgICYmIHRlc3QgLWYgY29uZnRlc3RmYWlsLmNsYXNzIFwKKyAgICAgICAgICAgICAmJiAhIHsgZWNobyAiJGFzX21lOjM2OTc0OiAkSkFWQUMgLXRhcmdldCAkdGFyZ2V0X3ZlcnNpb24gLXNvdXJjZSAkc291cmNlX3ZlcnNpb24gLWQgLiBjb25mdGVzdGZhaWwuamF2YSIgPiY1CisgICAgICAgICAgICAgICAgICAgICRKQVZBQyAtdGFyZ2V0ICIkdGFyZ2V0X3ZlcnNpb24iIC1zb3VyY2UgIiRzb3VyY2VfdmVyc2lvbiIgLWQgLiBjb25mdGVzdGZhaWwuamF2YSA+JjUgMj4mMQorICAgICAgICAgICAgICAgICAgfTsgdGhlbgorICAgICAgICAgICAgQ09ORl9KQVZBQz0iJEpBVkFDIC10YXJnZXQgJHRhcmdldF92ZXJzaW9uIC1zb3VyY2UgJHNvdXJjZV92ZXJzaW9uIgorICAgICAgICAgICAgSEFWRV9KQVZBQ19FTlZWQVI9MQorICAgICAgICAgICAgSEFWRV9KQVZBQ09NUD0xCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgQ09ORl9KQVZBQz0iJEpBVkFDIC10YXJnZXQgJHRhcmdldF92ZXJzaW9uIgorICAgICAgICAgICAgSEFWRV9KQVZBQ19FTlZWQVI9MQorICAgICAgICAgICAgSEFWRV9KQVZBQ09NUD0xCisgICAgICAgICAgZmkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmNsYXNzCisgICAgICAgICAgaWYgeyBlY2hvICIkYXNfbWU6MzY5ODc6ICRKQVZBQyAtdGFyZ2V0ICR0YXJnZXRfdmVyc2lvbiAtc291cmNlICRzb3VyY2VfdmVyc2lvbiAtZCAuIGNvbmZ0ZXN0LmphdmEiID4mNQorICAgICAgICAgICAgICAgJEpBVkFDIC10YXJnZXQgIiR0YXJnZXRfdmVyc2lvbiIgLXNvdXJjZSAiJHNvdXJjZV92ZXJzaW9uIiAtZCAuIGNvbmZ0ZXN0LmphdmEgPiY1IDI+JjEKKyAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAmJiB0ZXN0IC1mIGNvbmZ0ZXN0LmNsYXNzIFwKKyAgICAgICAgICAgICAmJiBleHByIGBmdW5jX2NsYXNzZmlsZV92ZXJzaW9uIGNvbmZ0ZXN0LmNsYXNzYCAnPD0nICRjZnZlcnNpb24gPi9kZXYvbnVsbCAyPiY1OyB0aGVuCisgICAgICAgICAgICBDT05GX0pBVkFDPSIkSkFWQUMgLXRhcmdldCAkdGFyZ2V0X3ZlcnNpb24gLXNvdXJjZSAkc291cmNlX3ZlcnNpb24iCisgICAgICAgICAgICBIQVZFX0pBVkFDX0VOVlZBUj0xCisgICAgICAgICAgICBIQVZFX0pBVkFDT01QPTEKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorICBmaQorICBpZiB0ZXN0IC16ICIkSEFWRV9KQVZBQ09NUCI7IHRoZW4KKyAgICAgICAgICAgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImdjaiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZ2NqOyBhY193b3JkPSQyCis6CitpZiAke2FjX2N2X3Byb2dfSEFWRV9HQ0pfSU5fUEFUSCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRIQVZFX0dDSl9JTl9QQVRIIjsgdGhlbgorICBhY19jdl9wcm9nX0hBVkVfR0NKX0lOX1BBVEg9IiRIQVZFX0dDSl9JTl9QQVRIIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfSEFWRV9HQ0pfSU5fUEFUSD0ieWVzIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0hBVkVfR0NKX0lOX1BBVEg9JGFjX2N2X3Byb2dfSEFWRV9HQ0pfSU5fUEFUSAoraWYgdGVzdCAtbiAiJEhBVkVfR0NKX0lOX1BBVEgiOyB0aGVuCisgIDoKK2Vsc2UKKyAgOgorZmkKKworCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJqYXZhYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgamF2YWM7IGFjX3dvcmQ9JDIKKzoKK2lmICR7YWNfY3ZfcHJvZ19IQVZFX0pBVkFDX0lOX1BBVEgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkSEFWRV9KQVZBQ19JTl9QQVRIIjsgdGhlbgorICBhY19jdl9wcm9nX0hBVkVfSkFWQUNfSU5fUEFUSD0iJEhBVkVfSkFWQUNfSU5fUEFUSCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0hBVkVfSkFWQUNfSU5fUEFUSD0ieWVzIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0hBVkVfSkFWQUNfSU5fUEFUSD0kYWNfY3ZfcHJvZ19IQVZFX0pBVkFDX0lOX1BBVEgKK2lmIHRlc3QgLW4gIiRIQVZFX0pBVkFDX0lOX1BBVEgiOyB0aGVuCisgIDoKK2Vsc2UKKyAgOgorZmkKKworCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJqaWtlcyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgamlrZXM7IGFjX3dvcmQ9JDIKKzoKK2lmICR7YWNfY3ZfcHJvZ19IQVZFX0pJS0VTX0lOX1BBVEgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkSEFWRV9KSUtFU19JTl9QQVRIIjsgdGhlbgorICBhY19jdl9wcm9nX0hBVkVfSklLRVNfSU5fUEFUSD0iJEhBVkVfSklLRVNfSU5fUEFUSCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0hBVkVfSklLRVNfSU5fUEFUSD0ieWVzIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0hBVkVfSklLRVNfSU5fUEFUSD0kYWNfY3ZfcHJvZ19IQVZFX0pJS0VTX0lOX1BBVEgKK2lmIHRlc3QgLW4gIiRIQVZFX0pJS0VTX0lOX1BBVEgiOyB0aGVuCisgIDoKK2Vsc2UKKyAgOgorZmkKKworCisgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJEhBVkVfSkFWQUNPTVAiICYmIHRlc3QgLW4gIiRIQVZFX0dDSl9JTl9QQVRIIjsgdGhlbgorICAgICAgICAgICAgaWYgZ2NqIC0tdmVyc2lvbiAyPi9kZXYvbnVsbCB8IHNlZCAtZSAncyxeW14wLTldKiwsJyAtZSAxcSB8IHNlZCAtZSAnL14zXC5bMDFdL2QnIHwgZ3JlcCAnXlszLTldJyA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICAgICAgaWYgeyBlY2hvICIkYXNfbWU6MzcxMDU6IGdjaiAtQyAtZCAuIGNvbmZ0ZXN0bGliLmphdmEiID4mNQorICAgICAgICAgICAgIGdjaiAtQyAtZCAuIGNvbmZ0ZXN0bGliLmphdmEgPiY1IDI+JjEKKyAgICAgICAgICAgfTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBpZiBnY2ogLS12ZXJzaW9uIDI+L2Rldi9udWxsIHwgc2VkIC1lICdzLF5bXjAtOV0qLCwnIC1lIDFxIHwgc2VkIC1lICcvXjRcLlswMTJdL2QnIHwgZ3JlcCAnXls0LTldJyA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybSAtZiBjb25mdGVzdC5jbGFzcworICAgICAgICAgICAgaWYgeyBlY2hvICIkYXNfbWU6MzcxMTA6IGdjaiAtQyAtZCAuIGNvbmZ0ZXN0LmphdmEiID4mNQorICAgICAgICAgICAgICAgICBnY2ogLUMgLWQgLiBjb25mdGVzdC5qYXZhID4mNSAyPiYxCisgICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAgICYmIHRlc3QgLWYgY29uZnRlc3QuY2xhc3MgXAorICAgICAgICAgICAgICAgJiYgZXhwciBgZnVuY19jbGFzc2ZpbGVfdmVyc2lvbiBjb25mdGVzdC5jbGFzc2AgJzw9JyAkY2Z2ZXJzaW9uID4vZGV2L251bGwgMj4mNTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmNsYXNzCisgICAgICAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0ZmFpbC5jbGFzcworICAgICAgICAgICAgICBpZiB7IGVjaG8gIiRhc19tZTozNzExNzogZ2NqIC1DIC1mc291cmNlPSRzb3VyY2VfdmVyc2lvbiAtZCAuIGNvbmZ0ZXN0LmphdmEiID4mNQorICAgICAgICAgICAgICAgICAgIGdjaiAtQyAtZnNvdXJjZT0iJHNvdXJjZV92ZXJzaW9uIiAtZCAuIGNvbmZ0ZXN0LmphdmEgPiY1IDI+JjEKKyAgICAgICAgICAgICAgICAgfSBcCisgICAgICAgICAgICAgICAgICYmIHRlc3QgLWYgY29uZnRlc3QuY2xhc3MgXAorICAgICAgICAgICAgICAgICAmJiBleHByIGBmdW5jX2NsYXNzZmlsZV92ZXJzaW9uIGNvbmZ0ZXN0LmNsYXNzYCAnPD0nICRjZnZlcnNpb24gPi9kZXYvbnVsbCAyPiY1IFwKKyAgICAgICAgICAgICAgICAgJiYgeyBlY2hvICIkYXNfbWU6MzcxMjI6IGdjaiAtQyAtZCAuIGNvbmZ0ZXN0ZmFpbC5qYXZhIiA+JjUKKyAgICAgICAgICAgICAgICAgICAgICBnY2ogLUMgLWQgLiBjb25mdGVzdGZhaWwuamF2YSA+JjUgMj4mMQorICAgICAgICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdGZhaWwuY2xhc3MgXAorICAgICAgICAgICAgICAgICAmJiAhIHsgZWNobyAiJGFzX21lOjM3MTI2OiBnY2ogLUMgLWZzb3VyY2U9JHNvdXJjZV92ZXJzaW9uIC1kIC4gY29uZnRlc3RmYWlsLmphdmEiID4mNQorICAgICAgICAgICAgICAgICAgICAgICAgZ2NqIC1DIC1mc291cmNlPSIkc291cmNlX3ZlcnNpb24iIC1kIC4gY29uZnRlc3RmYWlsLmphdmEgPiY1IDI+JjEKKyAgICAgICAgICAgICAgICAgICAgICB9OyB0aGVuCisgICAgICAgICAgICAgICAgQ09ORl9KQVZBQz0iZ2NqIC1DIC1mc291cmNlPSRzb3VyY2VfdmVyc2lvbiIKKyAgICAgICAgICAgICAgICBIQVZFX0pBVkFDX0VOVlZBUj0xCisgICAgICAgICAgICAgICAgSEFWRV9KQVZBQ09NUD0xCisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBDT05GX0pBVkFDPSJnY2ogLUMiCisgICAgICAgICAgICAgICAgSEFWRV9KQVZBQ19FTlZWQVI9MQorICAgICAgICAgICAgICAgIEhBVkVfSkFWQUNPTVA9MQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmNsYXNzCisgICAgICAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0ZmFpbC5jbGFzcworICAgICAgICAgICAgICBpZiB7IGVjaG8gIiRhc19tZTozNzE0MDogZ2NqIC1DIC1mc291cmNlPSRzb3VyY2VfdmVyc2lvbiAtZnRhcmdldD0kdGFyZ2V0X3ZlcnNpb24gLWQgLiBjb25mdGVzdC5qYXZhIiA+JjUKKyAgICAgICAgICAgICAgICAgICBnY2ogLUMgLWZzb3VyY2U9IiRzb3VyY2VfdmVyc2lvbiIgLWZ0YXJnZXQ9IiR0YXJnZXRfdmVyc2lvbiIgLWQgLiBjb25mdGVzdC5qYXZhID4mNSAyPiYxCisgICAgICAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgICAgICAmJiB0ZXN0IC1mIGNvbmZ0ZXN0LmNsYXNzIFwKKyAgICAgICAgICAgICAgICAgJiYgZXhwciBgZnVuY19jbGFzc2ZpbGVfdmVyc2lvbiBjb25mdGVzdC5jbGFzc2AgJzw9JyAkY2Z2ZXJzaW9uID4vZGV2L251bGwgMj4mNTsgdGhlbgorICAgICAgICAgICAgICAgIENPTkZfSkFWQUM9ImdjaiAtQyAtZnNvdXJjZT0kc291cmNlX3ZlcnNpb24gLWZ0YXJnZXQ9JHRhcmdldF92ZXJzaW9uIgorICAgICAgICAgICAgICAgIEhBVkVfSkFWQUNfRU5WVkFSPTEKKyAgICAgICAgICAgICAgICBIQVZFX0pBVkFDT01QPTEKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJHRhcmdldF92ZXJzaW9uIiA9IDEuNCAmJiB0ZXN0ICIkc291cmNlX3ZlcnNpb24iID0gMS40OyB0aGVuCisgICAgICAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmNsYXNzCisgICAgICAgICAgICAgIGlmIHsgZWNobyAiJGFzX21lOjM3MTUzOiBnY2ogLUMgLWQgLiBjb25mdGVzdC5qYXZhIiA+JjUKKyAgICAgICAgICAgICAgICAgICBnY2ogLUMgLWQgLiBjb25mdGVzdC5qYXZhID4mNSAyPiYxCisgICAgICAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgICAgICAmJiB0ZXN0IC1mIGNvbmZ0ZXN0LmNsYXNzOyB0aGVuCisgICAgICAgICAgICAgICAgQ09ORl9KQVZBQz0iZ2NqIC1DIgorICAgICAgICAgICAgICAgIEhBVkVfR0NKX0M9MQorICAgICAgICAgICAgICAgIEhBVkVfSkFWQUNPTVA9MQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBpZiB0ZXN0ICIkdGFyZ2V0X3ZlcnNpb24iID0gMS40ICYmIHRlc3QgIiRzb3VyY2VfdmVyc2lvbiIgPSAxLjM7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmNsYXNzCisgICAgICAgICAgICAgICAgaWYgeyBlY2hvICIkYXNfbWU6MzcxNjQ6IGdjaiAtQyAtZm5vLWFzc2VydCAtZCAuIGNvbmZ0ZXN0LmphdmEiID4mNQorICAgICAgICAgICAgICAgICAgICAgZ2NqIC1DIC1mbm8tYXNzZXJ0IC1kIC4gY29uZnRlc3QuamF2YSA+JjUgMj4mMQorICAgICAgICAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgICAgICAgICYmIHRlc3QgLWYgY29uZnRlc3QuY2xhc3M7IHRoZW4KKyAgICAgICAgICAgICAgICAgIENPTkZfSkFWQUM9ImdjaiAtQyAtZm5vLWFzc2VydCIKKyAgICAgICAgICAgICAgICAgIEhBVkVfR0NKX0M9MQorICAgICAgICAgICAgICAgICAgSEFWRV9KQVZBQ09NUD0xCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgcm0gLWYgY29uZnRlc3QuY2xhc3MKKyAgICAgICAgICAgICAgICAgIGlmIHsgZWNobyAiJGFzX21lOjM3MTczOiBnY2ogLUMgLWQgLiBjb25mdGVzdC5qYXZhIiA+JjUKKyAgICAgICAgICAgICAgICAgICAgICAgZ2NqIC1DIC1kIC4gY29uZnRlc3QuamF2YSA+JjUgMj4mMQorICAgICAgICAgICAgICAgICAgICAgfSBcCisgICAgICAgICAgICAgICAgICAgICAmJiB0ZXN0IC1mIGNvbmZ0ZXN0LmNsYXNzOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIENPTkZfSkFWQUM9ImdjaiAtQyIKKyAgICAgICAgICAgICAgICAgICAgSEFWRV9HQ0pfQz0xCisgICAgICAgICAgICAgICAgICAgIEhBVkVfSkFWQUNPTVA9MQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorICAgIGlmIHRlc3QgLXogIiRIQVZFX0pBVkFDT01QIiAmJiB0ZXN0IC1uICIkSEFWRV9KQVZBQ19JTl9QQVRIIjsgdGhlbgorICAgICAgICAgICAgaWYgeyBqYXZhYyAtdmVyc2lvbiA+L2Rldi9udWxsIDI+L2Rldi9udWxsIHx8IHRlc3QgJD8gLWxlIDI7IH0gXAorICAgICAgICAgJiYgKCBpZiBqYXZhYyAtaGVscCAyPiYxID4vZGV2L251bGwgfCBncmVwIGF0LmRtcy5ramMuTWFpbiA+L2Rldi9udWxsICYmIGphdmFjIC1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAncmVsZWFzZWQuKjIwMDAnID4vZGV2L251bGwgOyB0aGVuIGV4aXQgMTsgZWxzZSBleGl0IDA7IGZpICk7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm0gLWYgY29uZnRlc3QuY2xhc3MKKyAgICAgICAgaWYgeyBlY2hvICIkYXNfbWU6MzcxOTI6IGphdmFjIC1kIC4gY29uZnRlc3QuamF2YSIgPiY1CisgICAgICAgICAgICAgamF2YWMgLWQgLiBjb25mdGVzdC5qYXZhID4mNSAyPiYxCisgICAgICAgICAgIH0gXAorICAgICAgICAgICAmJiB0ZXN0IC1mIGNvbmZ0ZXN0LmNsYXNzIFwKKyAgICAgICAgICAgJiYgZXhwciBgZnVuY19jbGFzc2ZpbGVfdmVyc2lvbiBjb25mdGVzdC5jbGFzc2AgJzw9JyAkY2Z2ZXJzaW9uID4vZGV2L251bGwgMj4mNTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBybSAtZiBjb25mdGVzdC5jbGFzcworICAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0ZmFpbC5jbGFzcworICAgICAgICAgIGlmIHsgZWNobyAiJGFzX21lOjM3MTk5OiBqYXZhYyAtc291cmNlICRzb3VyY2VfdmVyc2lvbiAtZCAuIGNvbmZ0ZXN0LmphdmEiID4mNQorICAgICAgICAgICAgICAgamF2YWMgLXNvdXJjZSAiJHNvdXJjZV92ZXJzaW9uIiAtZCAuIGNvbmZ0ZXN0LmphdmEgPiY1IDI+JjEKKyAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAmJiB0ZXN0IC1mIGNvbmZ0ZXN0LmNsYXNzIFwKKyAgICAgICAgICAgICAmJiBleHByIGBmdW5jX2NsYXNzZmlsZV92ZXJzaW9uIGNvbmZ0ZXN0LmNsYXNzYCAnPD0nICRjZnZlcnNpb24gPi9kZXYvbnVsbCAyPiY1IFwKKyAgICAgICAgICAgICAmJiB7IGVjaG8gIiRhc19tZTozNzIwNDogamF2YWMgLWQgLiBjb25mdGVzdGZhaWwuamF2YSIgPiY1CisgICAgICAgICAgICAgICAgICBqYXZhYyAtZCAuIGNvbmZ0ZXN0ZmFpbC5qYXZhID4mNSAyPiYxCisgICAgICAgICAgICAgICAgfSBcCisgICAgICAgICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdGZhaWwuY2xhc3MgXAorICAgICAgICAgICAgICYmICEgeyBlY2hvICIkYXNfbWU6MzcyMDg6IGphdmFjIC1zb3VyY2UgJHNvdXJjZV92ZXJzaW9uIC1kIC4gY29uZnRlc3RmYWlsLmphdmEiID4mNQorICAgICAgICAgICAgICAgICAgICBqYXZhYyAtc291cmNlICIkc291cmNlX3ZlcnNpb24iIC1kIC4gY29uZnRlc3RmYWlsLmphdmEgPiY1IDI+JjEKKyAgICAgICAgICAgICAgICAgIH07IHRoZW4KKyAgICAgICAgICAgIENPTkZfSkFWQUM9ImphdmFjIC1zb3VyY2UgJHNvdXJjZV92ZXJzaW9uIgorICAgICAgICAgICAgSEFWRV9KQVZBQz0xCisgICAgICAgICAgICBIQVZFX0pBVkFDT01QPTEKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBDT05GX0pBVkFDPSJqYXZhYyIKKyAgICAgICAgICAgIEhBVkVfSkFWQUM9MQorICAgICAgICAgICAgSEFWRV9KQVZBQ09NUD0xCisgICAgICAgICAgZmkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm0gLWYgY29uZnRlc3QuY2xhc3MKKyAgICAgICAgICBpZiB7IGVjaG8gIiRhc19tZTozNzIyMTogamF2YWMgLXRhcmdldCAkdGFyZ2V0X3ZlcnNpb24gLWQgLiBjb25mdGVzdC5qYXZhIiA+JjUKKyAgICAgICAgICAgICAgIGphdmFjIC10YXJnZXQgIiR0YXJnZXRfdmVyc2lvbiIgLWQgLiBjb25mdGVzdC5qYXZhID4mNSAyPiYxCisgICAgICAgICAgICAgfSBcCisgICAgICAgICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdC5jbGFzcyBcCisgICAgICAgICAgICAgJiYgZXhwciBgZnVuY19jbGFzc2ZpbGVfdmVyc2lvbiBjb25mdGVzdC5jbGFzc2AgJzw9JyAkY2Z2ZXJzaW9uID4vZGV2L251bGwgMj4mNTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgcm0gLWYgY29uZnRlc3QuY2xhc3MKKyAgICAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0ZmFpbC5jbGFzcworICAgICAgICAgICAgaWYgeyBlY2hvICIkYXNfbWU6MzcyMjg6IGphdmFjIC10YXJnZXQgJHRhcmdldF92ZXJzaW9uIC1zb3VyY2UgJHNvdXJjZV92ZXJzaW9uIC1kIC4gY29uZnRlc3QuamF2YSIgPiY1CisgICAgICAgICAgICAgICAgIGphdmFjIC10YXJnZXQgIiR0YXJnZXRfdmVyc2lvbiIgLXNvdXJjZSAiJHNvdXJjZV92ZXJzaW9uIiAtZCAuIGNvbmZ0ZXN0LmphdmEgPiY1IDI+JjEKKyAgICAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdC5jbGFzcyBcCisgICAgICAgICAgICAgICAmJiBleHByIGBmdW5jX2NsYXNzZmlsZV92ZXJzaW9uIGNvbmZ0ZXN0LmNsYXNzYCAnPD0nICRjZnZlcnNpb24gPi9kZXYvbnVsbCAyPiY1IFwKKyAgICAgICAgICAgICAgICYmIHsgZWNobyAiJGFzX21lOjM3MjMzOiBqYXZhYyAtdGFyZ2V0ICR0YXJnZXRfdmVyc2lvbiAtZCAuIGNvbmZ0ZXN0ZmFpbC5qYXZhIiA+JjUKKyAgICAgICAgICAgICAgICAgICAgamF2YWMgLXRhcmdldCAiJHRhcmdldF92ZXJzaW9uIiAtZCAuIGNvbmZ0ZXN0ZmFpbC5qYXZhID4mNSAyPiYxCisgICAgICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAgICYmIHRlc3QgLWYgY29uZnRlc3RmYWlsLmNsYXNzIFwKKyAgICAgICAgICAgICAgICYmICEgeyBlY2hvICIkYXNfbWU6MzcyMzc6IGphdmFjIC10YXJnZXQgJHRhcmdldF92ZXJzaW9uIC1zb3VyY2UgJHNvdXJjZV92ZXJzaW9uIC1kIC4gY29uZnRlc3RmYWlsLmphdmEiID4mNQorICAgICAgICAgICAgICAgICAgICAgIGphdmFjIC10YXJnZXQgIiR0YXJnZXRfdmVyc2lvbiIgLXNvdXJjZSAiJHNvdXJjZV92ZXJzaW9uIiAtZCAuIGNvbmZ0ZXN0ZmFpbC5qYXZhID4mNSAyPiYxCisgICAgICAgICAgICAgICAgICAgIH07IHRoZW4KKyAgICAgICAgICAgICAgQ09ORl9KQVZBQz0iamF2YWMgLXRhcmdldCAkdGFyZ2V0X3ZlcnNpb24gLXNvdXJjZSAkc291cmNlX3ZlcnNpb24iCisgICAgICAgICAgICAgIEhBVkVfSkFWQUM9MQorICAgICAgICAgICAgICBIQVZFX0pBVkFDT01QPTEKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgQ09ORl9KQVZBQz0iamF2YWMgLXRhcmdldCAkdGFyZ2V0X3ZlcnNpb24iCisgICAgICAgICAgICAgIEhBVkVfSkFWQUM9MQorICAgICAgICAgICAgICBIQVZFX0pBVkFDT01QPTEKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm0gLWYgY29uZnRlc3QuY2xhc3MKKyAgICAgICAgICAgIGlmIHsgZWNobyAiJGFzX21lOjM3MjUwOiBqYXZhYyAtdGFyZ2V0ICR0YXJnZXRfdmVyc2lvbiAtc291cmNlICRzb3VyY2VfdmVyc2lvbiAtZCAuIGNvbmZ0ZXN0LmphdmEiID4mNQorICAgICAgICAgICAgICAgICBqYXZhYyAtdGFyZ2V0ICIkdGFyZ2V0X3ZlcnNpb24iIC1zb3VyY2UgIiRzb3VyY2VfdmVyc2lvbiIgLWQgLiBjb25mdGVzdC5qYXZhID4mNSAyPiYxCisgICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAgICYmIHRlc3QgLWYgY29uZnRlc3QuY2xhc3MgXAorICAgICAgICAgICAgICAgJiYgZXhwciBgZnVuY19jbGFzc2ZpbGVfdmVyc2lvbiBjb25mdGVzdC5jbGFzc2AgJzw9JyAkY2Z2ZXJzaW9uID4vZGV2L251bGwgMj4mNTsgdGhlbgorICAgICAgICAgICAgICBDT05GX0pBVkFDPSJqYXZhYyAtdGFyZ2V0ICR0YXJnZXRfdmVyc2lvbiAtc291cmNlICRzb3VyY2VfdmVyc2lvbiIKKyAgICAgICAgICAgICAgSEFWRV9KQVZBQz0xCisgICAgICAgICAgICAgIEhBVkVfSkFWQUNPTVA9MQorICAgICAgICAgICAgZmkKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorICAgIGlmIHRlc3QgLXogIiRIQVZFX0pBVkFDT01QIiAmJiB0ZXN0IC1uICIkSEFWRV9KSUtFU19JTl9QQVRIIjsgdGhlbgorICAgICAgICAgICAgaWYgeyBqaWtlcyA+L2Rldi9udWxsIDI+L2Rldi9udWxsIHx8IHRlc3QgJD8gPSAxOyB9IFwKKyAgICAgICAgICYmICgKKyAgICAgICAgICAgICAgIyBTZWUgaWYgdGhlIGV4aXN0aW5nIENMQVNTUEFUSCBpcyBzdWZmaWNpZW50IHRvIG1ha2UgamlrZXMgd29yay4KKyAgICAgICAgICAgICAgdW5zZXQgSkFWQV9IT01FCisgICAgICAgICAgICAgIGppa2VzIGNvbmZ0ZXN0bGliLmphdmEgPiY1IDI+JjEKKyAgICAgICAgICAgICAgZXJyb3I9JD8KKyAgICAgICAgICAgICAgcm0gLWYgY29uZnRlc3RsaWIuY2xhc3MKKyAgICAgICAgICAgICAgZXhpdCAkZXJyb3IKKyAgICAgICAgICAgICk7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJHNvdXJjZV92ZXJzaW9uIiA9IDEuMzsgdGhlbgorICAgICAgICAgIENPTkZfSkFWQUM9Imppa2VzIgorICAgICAgICAgIEhBVkVfSklLRVM9MQorICAgICAgICAgIEhBVkVfSkFWQUNPTVA9MQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorICBmaQorICBybSAtZiBjb25mdGVzdCouamF2YSBjb25mdGVzdCouY2xhc3MKKyAgaWYgdGVzdCAtbiAiJEhBVkVfSkFWQUNPTVAiOyB0aGVuCisgICAgYWNfcmVzdWx0PSIkQ09ORl9KQVZBQyIKKyAgZWxzZQorICAgIGFjX3Jlc3VsdD0ibm8iCisgIGZpCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzdWx0IiA+JjUKKyRhc19lY2hvICIkYWNfcmVzdWx0IiA+JjY7IH0KKworCisKKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgSmF2YSB2aXJ0dWFsIG1hY2hpbmUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEphdmEgdmlydHVhbCBtYWNoaW5lLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fIHx8IGRlZmluZWQgX19DWUdXSU5fXyB8fCBkZWZpbmVkIF9fRU1YX18gfHwgZGVmaW5lZCBfX0RKR1BQX18KKyAgeWVzCisjZW5kaWYKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBDTEFTU1BBVEhfU0VQQVJBVE9SPSc7JworZWxzZQorICBDTEFTU1BBVEhfU0VQQVJBVE9SPSc6JworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIENPTkZfSkFWQT0KKyAgSEFWRV9KQVZBX0VOVlZBUj0KKyAgSEFWRV9HSUo9CisgIEhBVkVfSkFWQT0KKyAgSEFWRV9KUkU9CisgIEhBVkVfSlZJRVc9CisgIEhBVkVfSkFWQUVYRUM9MQorICBpZiB0ZXN0IC1uICIkSkFWQSI7IHRoZW4KKyAgICBIQVZFX0pBVkFfRU5WVkFSPTEKKyAgICBDT05GX0pBVkE9IiRKQVZBIgorICBlbHNlCisgICAgICAgICAgICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnaWoiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGdpajsgYWNfd29yZD0kMgorOgoraWYgJHthY19jdl9wcm9nX0hBVkVfR0lKX0lOX1BBVEgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkSEFWRV9HSUpfSU5fUEFUSCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19IQVZFX0dJSl9JTl9QQVRIPSIkSEFWRV9HSUpfSU5fUEFUSCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0hBVkVfR0lKX0lOX1BBVEg9InllcyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitIQVZFX0dJSl9JTl9QQVRIPSRhY19jdl9wcm9nX0hBVkVfR0lKX0lOX1BBVEgKK2lmIHRlc3QgLW4gIiRIQVZFX0dJSl9JTl9QQVRIIjsgdGhlbgorICA6CitlbHNlCisgIDoKK2ZpCisKKworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiamF2YSIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgamF2YTsgYWNfd29yZD0kMgorOgoraWYgJHthY19jdl9wcm9nX0hBVkVfSkFWQV9JTl9QQVRIKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEhBVkVfSkFWQV9JTl9QQVRIIjsgdGhlbgorICBhY19jdl9wcm9nX0hBVkVfSkFWQV9JTl9QQVRIPSIkSEFWRV9KQVZBX0lOX1BBVEgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19IQVZFX0pBVkFfSU5fUEFUSD0ieWVzIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0hBVkVfSkFWQV9JTl9QQVRIPSRhY19jdl9wcm9nX0hBVkVfSkFWQV9JTl9QQVRICitpZiB0ZXN0IC1uICIkSEFWRV9KQVZBX0lOX1BBVEgiOyB0aGVuCisgIDoKK2Vsc2UKKyAgOgorZmkKKworCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJqcmUiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGpyZTsgYWNfd29yZD0kMgorOgoraWYgJHthY19jdl9wcm9nX0hBVkVfSlJFX0lOX1BBVEgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkSEFWRV9KUkVfSU5fUEFUSCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19IQVZFX0pSRV9JTl9QQVRIPSIkSEFWRV9KUkVfSU5fUEFUSCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0hBVkVfSlJFX0lOX1BBVEg9InllcyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitIQVZFX0pSRV9JTl9QQVRIPSRhY19jdl9wcm9nX0hBVkVfSlJFX0lOX1BBVEgKK2lmIHRlc3QgLW4gIiRIQVZFX0pSRV9JTl9QQVRIIjsgdGhlbgorICA6CitlbHNlCisgIDoKK2ZpCisKKworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAianZpZXciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGp2aWV3OyBhY193b3JkPSQyCis6CitpZiAke2FjX2N2X3Byb2dfSEFWRV9KVklFV19JTl9QQVRIKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEhBVkVfSlZJRVdfSU5fUEFUSCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19IQVZFX0pWSUVXX0lOX1BBVEg9IiRIQVZFX0pWSUVXX0lOX1BBVEgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19IQVZFX0pWSUVXX0lOX1BBVEg9InllcyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitIQVZFX0pWSUVXX0lOX1BBVEg9JGFjX2N2X3Byb2dfSEFWRV9KVklFV19JTl9QQVRICitpZiB0ZXN0IC1uICIkSEFWRV9KVklFV19JTl9QQVRIIjsgdGhlbgorICA6CitlbHNlCisgIDoKK2ZpCisKKworCisgICAgZXhwb3J0IENMQVNTUEFUSAorICAgIGlmIHRlc3QgLW4gIiRIQVZFX0dJSl9JTl9QQVRIIiBcCisgICAgICAgJiYgZ2lqIC0tdmVyc2lvbiA+L2Rldi9udWxsIDI+L2Rldi9udWxsIFwKKyAgICAgICA7IHRoZW4KKyAgICAgIEhBVkVfR0lKPTEKKyAgICAgIENPTkZfSkFWQT0iZ2lqIgorICAgIGVsc2UKKyAgICAgIGlmIHRlc3QgLW4gIiRIQVZFX0pBVkFfSU5fUEFUSCIgXAorICAgICAgICAgJiYgamF2YSAtdmVyc2lvbiA+L2Rldi9udWxsIDI+L2Rldi9udWxsIFwKKyAgICAgICAgIDsgdGhlbgorICAgICAgICBIQVZFX0pBVkE9MQorICAgICAgICBDT05GX0pBVkE9ImphdmEiCisgICAgICBlbHNlCisgICAgICAgIGlmIHRlc3QgLW4gIiRIQVZFX0pSRV9JTl9QQVRIIiBcCisgICAgICAgICAgICYmIChqcmUgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCB8fCB0ZXN0ICQ/ID0gMSkgXAorICAgICAgICAgICA7IHRoZW4KKyAgICAgICAgICBIQVZFX0pSRT0xCisgICAgICAgICAgQ09ORl9KQVZBPSJqcmUiCisgICAgICAgIGVsc2UKKyAgICAgICAgICBpZiB0ZXN0IC1uICIkSEFWRV9KVklFV19JTl9QQVRIIiBcCisgICAgICAgICAgICAgJiYgKGp2aWV3IC0/ID4vZGV2L251bGwgMj4vZGV2L251bGwgfHwgdGVzdCAkPyA9IDEpIFwKKyAgICAgICAgICAgICA7IHRoZW4KKyAgICAgICAgICAgIEhBVkVfSlZJRVc9MQorICAgICAgICAgICAgQ09ORl9KQVZBPSJqdmlldyIKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBIQVZFX0pBVkFFWEVDPQorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGZpCisKKyAgZmkKKyAgaWYgdGVzdCAtbiAiJEhBVkVfSkFWQUVYRUMiOyB0aGVuCisgICAgYWNfcmVzdWx0PSIkQ09ORl9KQVZBIgorICBlbHNlCisgICAgYWNfcmVzdWx0PSJubyIKKyAgZmkKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXN1bHQiID4mNQorJGFzX2VjaG8gIiRhY19yZXN1bHQiID4mNjsgfQorCisKKworCisKKworCisKKworCithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgTWFrZWZpbGUgYnVpbGQtYXV4L01ha2VmaWxlIHBvL01ha2VmaWxlLmluIGRhdGEvTWFrZWZpbGUgZXRjL01ha2VmaWxlIGV4YW1wbGVzL01ha2VmaWxlIGV4YW1wbGVzL2NhbGMrKy9NYWtlZmlsZSBsaWIvTWFrZWZpbGUgc3JjL01ha2VmaWxlIGRvYy9NYWtlZmlsZSBkb2MveWFjYy4xIgogCiBjYXQgPmNvbmZjYWNoZSA8PFxfQUNFT0YKICMgVGhpcyBmaWxlIGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGNvbmZpZ3VyZQpAQCAtMTYwMjksMzkgKzM3NTMwLDcwIEBACiAKICMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCiAjIGJ1dCB3ZSBrbm93IG9mIG5vIHdvcmthcm91bmQgdGhhdCBpcyBzaW1wbGUsIHBvcnRhYmxlLCBhbmQgZWZmaWNpZW50LgotIyBTbywgZG9uJ3QgcHV0IG5ld2xpbmVzIGluIGNhY2hlIHZhcmlhYmxlcycgdmFsdWVzLgorIyBTbywgd2Uga2lsbCB2YXJpYWJsZXMgY29udGFpbmluZyBuZXdsaW5lcy4KICMgVWx0cml4IHNoIHNldCB3cml0ZXMgdG8gc3RkZXJyIGFuZCBjYW4ndCBiZSByZWRpcmVjdGVkIGRpcmVjdGx5LAogIyBhbmQgc2V0cyB0aGUgaGlnaCBiaXQgaW4gdGhlIGNhY2hlIGZpbGUgdW5sZXNzIHdlIGFzc2lnbiB0byB0aGUgdmFycy4KLXsKKygKKyAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdgOyBkbworICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAorICAgICoke2FzX25sfSopCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgICpfY3ZfKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiYyO30gOzsKKyAgICAgIGVzYWMKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAorICAgICAgQkFTSF9BUkdWIHwgQkFTSF9TT1VSQ0UpIGV2YWwgJGFjX3Zhcj0gOzsgIygKKyAgICAgICopIHsgZXZhbCAkYWNfdmFyPTsgdW5zZXQgJGFjX3Zhcjt9IDs7CisgICAgICBlc2FjIDs7CisgICAgZXNhYworICBkb25lCisKICAgKHNldCkgMj4mMSB8Ci0gICAgY2FzZSBgKGFjX3NwYWNlPScgJzsgc2V0IHwgZ3JlcCBhY19zcGFjZSkgMj4mMWAgaW4KLSAgICAqYWNfc3BhY2U9XCAqKQotICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXMgKGRvdWJsZS1xdW90ZQotICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXCkuCisgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPScgJzsgc2V0KSAyPiYxYCBpbiAjKAorICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKKyAgICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzOiBkb3VibGUtcXVvdGUKKyAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwuCiAgICAgICBzZWQgLW4gXAogCSJzLycvJ1xcXFwnJy9nOwogCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgotICAgICAgOzsKKyAgICAgIDs7ICMoCiAgICAgKikKICAgICAgICMgYHNldCcgcXVvdGVzIGNvcnJlY3RseSBhcyByZXF1aXJlZCBieSBQT1NJWCwgc28gZG8gbm90IGFkZCBxdW90ZXMuCi0gICAgICBzZWQgLW4gXAotCSJzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPVxcMi9wIgorICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKICAgICAgIDs7Ci0gICAgZXNhYzsKLX0gfAorICAgIGVzYWMgfAorICAgIHNvcnQKKykgfAogICBzZWQgJworICAgICAvXmFjX2N2X2Vudl8vYiBlbmQKICAgICAgdCBjbGVhcgotICAgICA6IGNsZWFyCisgICAgIDpjbGVhcgogICAgICBzL15cKFtePV0qXCk9XCguKlt7fV0uKlwpJC90ZXN0ICIke1wxK3NldH0iID0gc2V0IHx8ICYvCiAgICAgIHQgZW5kCi0gICAgIC9eYWNfY3ZfZW52LyFzL15cKFtePV0qXCk9XCguKlwpJC9cMT0ke1wxPVwyfS8KLSAgICAgOiBlbmQnID4+Y29uZmNhY2hlCi1pZiBkaWZmICRjYWNoZV9maWxlIGNvbmZjYWNoZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQotICBpZiB0ZXN0IC13ICRjYWNoZV9maWxlOyB0aGVuCi0gICAgdGVzdCAieCRjYWNoZV9maWxlIiAhPSAieC9kZXYvbnVsbCIgJiYgZWNobyAidXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiCi0gICAgY2F0IGNvbmZjYWNoZSA+JGNhY2hlX2ZpbGUKKyAgICAgcy9eXChbXj1dKlwpPVwoLipcKSQvXDE9JHtcMT1cMn0vCisgICAgIDplbmQnID4+Y29uZmNhY2hlCitpZiBkaWZmICIkY2FjaGVfZmlsZSIgY29uZmNhY2hlID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgIGlmIHRlc3QgLXcgIiRjYWNoZV9maWxlIjsgdGhlbgorICAgIGlmIHRlc3QgIngkY2FjaGVfZmlsZSIgIT0gIngvZGV2L251bGwiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICAgICAgaWYgdGVzdCAhIC1mICIkY2FjaGVfZmlsZSIgfHwgdGVzdCAtaCAiJGNhY2hlX2ZpbGUiOyB0aGVuCisJY2F0IGNvbmZjYWNoZSA+IiRjYWNoZV9maWxlIgorICAgICAgZWxzZQorICAgICAgICBjYXNlICRjYWNoZV9maWxlIGluICMoCisgICAgICAgICovKiB8ID86KikKKwkgIG12IC1mIGNvbmZjYWNoZSAiJGNhY2hlX2ZpbGUiJCQgJiYKKwkgIG12IC1mICIkY2FjaGVfZmlsZSIkJCAiJGNhY2hlX2ZpbGUiIDs7ICMoCisgICAgICAgICopCisJICBtdiAtZiBjb25mY2FjaGUgIiRjYWNoZV9maWxlIiA7OworCWVzYWMKKyAgICAgIGZpCisgICAgZmkKICAgZWxzZQotICAgIGVjaG8gIm5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CiAgIGZpCiBmaQogcm0gLWYgY29uZmNhY2hlCkBAIC0xNjA3MCw4NyArMzc2MDIsMTM5IEBACiAjIExldCBtYWtlIGV4cGFuZCBleGVjX3ByZWZpeC4KIHRlc3QgIngkZXhlY19wcmVmaXgiID0geE5PTkUgJiYgZXhlY19wcmVmaXg9JyR7cHJlZml4fScKIAotIyBWUEFUSCBtYXkgY2F1c2UgdHJvdWJsZSB3aXRoIHNvbWUgbWFrZXMsIHNvIHdlIHJlbW92ZSAkKHNyY2RpciksCi0jICR7c3JjZGlyfSBhbmQgQHNyY2RpckAgZnJvbSBWUEFUSCBpZiBzcmNkaXIgaXMgIi4iLCBzdHJpcCBsZWFkaW5nIGFuZAotIyB0cmFpbGluZyBjb2xvbnMgYW5kIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBsaW5lIGlmIFZQQVRIIGJlY29tZXMgZW1wdHkKLSMgKGFjdHVhbGx5IHdlIGxlYXZlIGFuIGVtcHR5IGxpbmUgdG8gcHJlc2VydmUgbGluZSBudW1iZXJzKS4KLWlmIHRlc3QgIngkc3JjZGlyIiA9IHguOyB0aGVuCi0gIGFjX3Zwc3ViPScvXlsJIF0qVlBBVEhbCSBdKj0vewotcy86KlwkKHNyY2Rpcik6Ki86LzsKLXMvOipcJHtzcmNkaXJ9OiovOi87Ci1zLzoqQHNyY2RpckA6Ki86LzsKLXMvXlwoW149XSo9WwkgXSpcKToqL1wxLzsKLXMvOiokLy87Ci1zL15bXj1dKj1bCSBdKiQvLzsKLX0nCi1maQotCiBERUZTPS1ESEFWRV9DT05GSUdfSAogCiBhY19saWJvYmpzPQogYWNfbHRsaWJvYmpzPQorVT0KIGZvciBhY19pIGluIDogJExJQk9CSlM7IGRvIHRlc3QgIngkYWNfaSIgPSB4OiAmJiBjb250aW51ZQogICAjIDEuIFJlbW92ZSB0aGUgZXh0ZW5zaW9uLCBhbmQgJFUgaWYgYWxyZWFkeSBpbnN0YWxsZWQuCi0gIGFjX2k9YGVjaG8gIiRhY19pIiB8Ci0JIHNlZCAncy9cJFVcLi8uLztzL1wubyQvLztzL1wub2JqJC8vJ2AKLSAgIyAyLiBBZGQgdGhlbS4KLSAgYWNfbGlib2Jqcz0iJGFjX2xpYm9ianMgJGFjX2lcJFUuJGFjX29iamV4dCIKLSAgYWNfbHRsaWJvYmpzPSIkYWNfbHRsaWJvYmpzICRhY19pIickVS5sbycKKyAgYWNfc2NyaXB0PSdzL1wkVVwuLy4vO3MvXC5vJC8vO3MvXC5vYmokLy8nCisgIGFjX2k9YCRhc19lY2hvICIkYWNfaSIgfCBzZWQgIiRhY19zY3JpcHQiYAorICAjIDIuIFByZXBlbmQgTElCT0JKRElSLiAgV2hlbiB1c2VkIHdpdGggYXV0b21ha2U+PTEuMTAgTElCT0JKRElSCisgICMgICAgd2lsbCBiZSBzZXQgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSBMSUJPQkpTIG9iamVjdHMgYXJlIGJ1aWx0LgorICBhc19mbl9hcHBlbmQgYWNfbGlib2JqcyAiIFwke0xJQk9CSkRJUn0kYWNfaVwkVS4kYWNfb2JqZXh0IgorICBhc19mbl9hcHBlbmQgYWNfbHRsaWJvYmpzICIgXCR7TElCT0JKRElSfSRhY19pIickVS5sbycKIGRvbmUKIExJQk9CSlM9JGFjX2xpYm9ianMKIAogTFRMSUJPQkpTPSRhY19sdGxpYm9ianMKIAogCi1pZiB0ZXN0IC16ICIke0FNREVQX1RSVUV9IiAmJiB0ZXN0IC16ICIke0FNREVQX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJBTURFUFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiQU1ERVBcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ19UUlVFfSIgJiYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENDXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENDXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NfVFJVRX0iICYmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ19GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDQ1wiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDQ1wiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDX1RSVUV9IiAmJiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NfRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ0NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ0NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDWFhfVFJVRX0iICYmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDWFhfRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ1hYXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENYWFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtCSVNPTl9DWFhfV09SS1NfVFJVRX0iICYmIHRlc3QgLXogIiR7QklTT05fQ1hYX1dPUktTX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJCSVNPTl9DWFhfV09SS1NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIkJJU09OX0NYWF9XT1JLU1wiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRoYXQgZ2VuZXJhdGVkIGZpbGVzIGFyZSBuZXdlciB0aGFuIGNvbmZpZ3VyZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB0aGF0IGdlbmVyYXRlZCBmaWxlcyBhcmUgbmV3ZXIgdGhhbiBjb25maWd1cmUuLi4gIiA+JjY7IH0KKyAgIGlmIHRlc3QgLW4gIiRhbV9zbGVlcF9waWQiOyB0aGVuCisgICAgICMgSGlkZSB3YXJuaW5ncyBhYm91dCByZXVzZWQgUElEcy4KKyAgICAgd2FpdCAkYW1fc2xlZXBfcGlkIDI+L2Rldi9udWxsCisgICBmaQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGRvbmUiID4mNQorJGFzX2VjaG8gImRvbmUiID4mNjsgfQorIGlmIHRlc3QgLW4gIiRFWEVFWFQiOyB0aGVuCisgIGFtX19FWEVFWFRfVFJVRT0KKyAgYW1fX0VYRUVYVF9GQUxTRT0nIycKK2Vsc2UKKyAgYW1fX0VYRUVYVF9UUlVFPScjJworICBhbV9fRVhFRVhUX0ZBTFNFPQogZmkKIAotOiAke0NPTkZJR19TVEFUVVM9Li9jb25maWcuc3RhdHVzfQoraWYgdGVzdCAteiAiJHtBTURFUF9UUlVFfSIgJiYgdGVzdCAteiAiJHtBTURFUF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkFNREVQXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDX1RSVUV9IiAmJiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENDXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENYWF9UUlVFfSIgJiYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENYWF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ1hYXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtCSVNPTl9DWFhfV09SS1NfVFJVRX0iICYmIHRlc3QgLXogIiR7QklTT05fQ1hYX1dPUktTX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiQklTT05fQ1hYX1dPUktTXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtHTF9DT05EX0xJQlRPT0xfVFJVRX0iICYmIHRlc3QgLXogIiR7R0xfQ09ORF9MSUJUT09MX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiR0xfQ09ORF9MSUJUT09MXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtHTF9HRU5FUkFURV9BTExPQ0FfSF9UUlVFfSIgJiYgdGVzdCAteiAiJHtHTF9HRU5FUkFURV9BTExPQ0FfSF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkdMX0dFTkVSQVRFX0FMTE9DQV9IXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQordGVzdCAiWCRERUZTIiA9IFgtREhBVkVfQ09ORklHX0ggJiYgREVGUz0KK2lmIHRlc3QgLXogIiR7R0xfR0VORVJBVEVfRVJSTk9fSF9UUlVFfSIgJiYgdGVzdCAteiAiJHtHTF9HRU5FUkFURV9FUlJOT19IX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiR0xfR0VORVJBVEVfRVJSTk9fSFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7R0xfR0VORVJBVEVfRkxPQVRfSF9UUlVFfSIgJiYgdGVzdCAteiAiJHtHTF9HRU5FUkFURV9GTE9BVF9IX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiR0xfR0VORVJBVEVfRkxPQVRfSFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKKworCitpZiB0ZXN0IC16ICIke0dMX0dFTkVSQVRFX1NURElOVF9IX1RSVUV9IiAmJiB0ZXN0IC16ICIke0dMX0dFTkVSQVRFX1NURElOVF9IX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiR0xfR0VORVJBVEVfU1RESU5UX0hcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitDT05GSUdfSU5DTFVERT1saWIvY29uZmlnLmgKKworaWYgdGVzdCAteiAiJHtHTF9HRU5FUkFURV9TQ0hFRF9IX1RSVUV9IiAmJiB0ZXN0IC16ICIke0dMX0dFTkVSQVRFX1NDSEVEX0hfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJHTF9HRU5FUkFURV9TQ0hFRF9IXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtHTF9HRU5FUkFURV9TVERCT09MX0hfVFJVRX0iICYmIHRlc3QgLXogIiR7R0xfR0VORVJBVEVfU1REQk9PTF9IX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiR0xfR0VORVJBVEVfU1REQk9PTF9IXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtHTF9HRU5FUkFURV9TVERERUZfSF9UUlVFfSIgJiYgdGVzdCAteiAiJHtHTF9HRU5FUkFURV9TVERERUZfSF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkdMX0dFTkVSQVRFX1NURERFRl9IXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtMSUJVTklTVFJJTkdfQ09NUElMRV9VTklXSURUSF9XSURUSF9UUlVFfSIgJiYgdGVzdCAteiAiJHtMSUJVTklTVFJJTkdfQ09NUElMRV9VTklXSURUSF9XSURUSF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkxJQlVOSVNUUklOR19DT01QSUxFX1VOSVdJRFRIX1dJRFRIXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQorCisgICAgZ2xfbGlib2Jqcz0KKyAgICBnbF9sdGxpYm9ianM9CisgICAgaWYgdGVzdCAtbiAiJGdsX0xJQk9CSlMiOyB0aGVuCisgICAgICAjIFJlbW92ZSB0aGUgZXh0ZW5zaW9uLgorICAgICAgc2VkX2Ryb3Bfb2JqZXh0PSdzL1wubyQvLztzL1wub2JqJC8vJworICAgICAgZm9yIGkgaW4gYGZvciBpIGluICRnbF9MSUJPQkpTOyBkbyBlY2hvICIkaSI7IGRvbmUgfCBzZWQgLWUgIiRzZWRfZHJvcF9vYmpleHQiIHwgc29ydCB8IHVuaXFgOyBkbworICAgICAgICBnbF9saWJvYmpzPSIkZ2xfbGlib2JqcyAkaS4kYWNfb2JqZXh0IgorICAgICAgICBnbF9sdGxpYm9ianM9IiRnbF9sdGxpYm9ianMgJGkubG8iCisgICAgICBkb25lCisgICAgZmkKKyAgICBnbF9MSUJPQkpTPSRnbF9saWJvYmpzCisKKyAgICBnbF9MVExJQk9CSlM9JGdsX2x0bGlib2JqcworCisKKworICAgIGdsdGVzdHNfbGlib2Jqcz0KKyAgICBnbHRlc3RzX2x0bGlib2Jqcz0KKyAgICBpZiB0ZXN0IC1uICIkZ2x0ZXN0c19MSUJPQkpTIjsgdGhlbgorICAgICAgIyBSZW1vdmUgdGhlIGV4dGVuc2lvbi4KKyAgICAgIHNlZF9kcm9wX29iamV4dD0ncy9cLm8kLy87cy9cLm9iaiQvLycKKyAgICAgIGZvciBpIGluIGBmb3IgaSBpbiAkZ2x0ZXN0c19MSUJPQkpTOyBkbyBlY2hvICIkaSI7IGRvbmUgfCBzZWQgLWUgIiRzZWRfZHJvcF9vYmpleHQiIHwgc29ydCB8IHVuaXFgOyBkbworICAgICAgICBnbHRlc3RzX2xpYm9ianM9IiRnbHRlc3RzX2xpYm9ianMgJGkuJGFjX29iamV4dCIKKyAgICAgICAgZ2x0ZXN0c19sdGxpYm9ianM9IiRnbHRlc3RzX2x0bGlib2JqcyAkaS5sbyIKKyAgICAgIGRvbmUKKyAgICBmaQorICAgIGdsdGVzdHNfTElCT0JKUz0kZ2x0ZXN0c19saWJvYmpzCisKKyAgICBnbHRlc3RzX0xUTElCT0JKUz0kZ2x0ZXN0c19sdGxpYm9ianMKKworCisKKzogIiR7Q09ORklHX1NUQVRVUz0uL2NvbmZpZy5zdGF0dXN9IgorYWNfd3JpdGVfZmFpbD0wCiBhY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcwogYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyAkQ09ORklHX1NUQVRVUyIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjUKLWVjaG8gIiRhc19tZTogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNjt9Ci1jYXQgPiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjY7fQorYXNfd3JpdGVfZmFpbD0wCitjYXQgPiRDT05GSUdfU1RBVFVTIDw8X0FTRU9GIHx8IGFzX3dyaXRlX2ZhaWw9MQogIyEgJFNIRUxMCiAjIEdlbmVyYXRlZCBieSAkYXNfbWUuCiAjIFJ1biB0aGlzIGZpbGUgdG8gcmVjcmVhdGUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KQEAgLTE2MTYwLDgxICszNzc0NCwyNTMgQEAKIGRlYnVnPWZhbHNlCiBhY19jc19yZWNoZWNrPWZhbHNlCiBhY19jc19zaWxlbnQ9ZmFsc2UKKwogU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KLV9BQ0VPRgorZXhwb3J0IFNIRUxMCitfQVNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BU0VPRiB8fCBhc193cml0ZV9mYWlsPTEKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNNHNoIEluaXRpYWxpemF0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKIAotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIE00c2ggSW5pdGlhbGl6YXRpb24uICAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0KLSMgQmUgQm91cm5lIGNvbXBhdGlibGUKLWlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCitEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgogICBlbXVsYXRlIHNoCiAgIE5VTExDTUQ9OgotICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAogICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgogICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKLWVsaWYgdGVzdCAtbiAiJHtCQVNIX1ZFUlNJT04rc2V0fSIgJiYgKHNldCAtbyBwb3NpeCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIHNldCAtbyBwb3NpeAotZmkKLURVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKLQotIyBTdXBwb3J0IHVuc2V0IHdoZW4gcG9zc2libGUuCi1pZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYXNfdW5zZXQ9dW5zZXQKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKIGVsc2UKLSAgYXNfdW5zZXQ9ZmFsc2UKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYwogZmkKIAogCi0jIFdvcmsgYXJvdW5kIGJ1Z3MgaW4gcHJlLTMuMCBVV0lOIGtzaC4KLSRhc191bnNldCBFTlYgTUFJTCBNQUlMUEFUSAorYXNfbmw9JworJworZXhwb3J0IGFzX25sCisjIFByaW50aW5nIGEgbG9uZyBzdHJpbmcgY3Jhc2hlcyBTb2xhcmlzIDcgL3Vzci9iaW4vcHJpbnRmLgorYXNfZWNobz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KKyMgUHJlZmVyIGEga3NoIHNoZWxsIGJ1aWx0aW4gb3ZlciBhbiBleHRlcm5hbCBwcmludGYgcHJvZ3JhbSBvbiBTb2xhcmlzLAorIyBidXQgd2l0aG91dCB3YXN0aW5nIGZvcmtzIGZvciBiYXNoIG9yIHpzaC4KK2lmIHRlc3QgLXogIiRCQVNIX1ZFUlNJT04kWlNIX1ZFUlNJT04iIFwKKyAgICAmJiAodGVzdCAiWGBwcmludCAtciAtLSAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50IC1yIC0tJworICBhc19lY2hvX249J3ByaW50IC1ybiAtLScKK2VsaWYgKHRlc3QgIlhgcHJpbnRmICVzICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnRmICVzXG4nCisgIGFzX2VjaG9fbj0ncHJpbnRmICVzJworZWxzZQorICBpZiB0ZXN0ICJYYCgvdXNyL3VjYi9lY2hvIC1uIC1uICRhc19lY2hvKSAyPi9kZXYvbnVsbGAiID0gIlgtbiAkYXNfZWNobyI7IHRoZW4KKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgL3Vzci91Y2IvZWNobyAtbiAiJDEkYXNfbmwiJworICAgIGFzX2VjaG9fbj0nL3Vzci91Y2IvZWNobyAtbicKKyAgZWxzZQorICAgIGFzX2VjaG9fYm9keT0nZXZhbCBleHByICJYJDEiIDogIlhcXCguKlxcKSInCisgICAgYXNfZWNob19uX2JvZHk9J2V2YWwKKyAgICAgIGFyZz0kMTsKKyAgICAgIGNhc2UgJGFyZyBpbiAjKAorICAgICAgKiIkYXNfbmwiKikKKwlleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpJGFzX25sIjsKKwlhcmc9YGV4cHIgIlgkYXJnIiA6ICIuKiRhc19ubFxcKC4qXFwpImA7OworICAgICAgZXNhYzsKKyAgICAgIGV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkiIHwgdHIgLWQgIiRhc19ubCIKKyAgICAnCisgICAgZXhwb3J0IGFzX2VjaG9fbl9ib2R5CisgICAgYXNfZWNob19uPSdzaCAtYyAkYXNfZWNob19uX2JvZHkgYXNfZWNobycKKyAgZmkKKyAgZXhwb3J0IGFzX2VjaG9fYm9keQorICBhc19lY2hvPSdzaCAtYyAkYXNfZWNob19ib2R5IGFzX2VjaG8nCitmaQorCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgIFBBVEhfU0VQQVJBVE9SPToKKyAgKFBBVEg9Jy9iaW47L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgJiYgeworICAgIChQQVRIPScvYmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIHx8CisgICAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgfQorZmkKKworCisjIElGUworIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4gIFF1b3RpbmcgaXMKKyMgdGhlcmUgdG8gcHJldmVudCBlZGl0b3JzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgc3BhY2UtdGFiLgorIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkCisjIHNwbGl0dGluZyBieSBzZXR0aW5nIElGUyB0byBlbXB0eSB2YWx1ZS4pCitJRlM9IiAiIgkkYXNfbmwiCisKKyMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIGRpcmVjdG9yeSBzZXBhcmF0b3IuCithc19teXNlbGY9CitjYXNlICQwIGluICMoKAorICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7CisgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhaworICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgICAgOzsKK2VzYWMKKyMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKyMgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbm90IHRvIGJlIGZvdW5kIGluIHRoZSBwYXRoLgoraWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgorICBhc19teXNlbGY9JDAKK2ZpCitpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCisgICRhc19lY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCisgIGV4aXQgMQorZmkKKworIyBVbnNldCB2YXJpYWJsZXMgdGhhdCB3ZSBkbyBub3QgbmVlZCBhbmQgd2hpY2ggY2F1c2UgYnVncyAoZS5nLiBpbgorIyBwcmUtMy4wIFVXSU4ga3NoKS4gIEJ1dCBkbyBub3QgY2F1c2UgYnVncyBpbiBiYXNoIDIuMDE7IHRoZSAifHwgZXhpdCAxIgorIyBzdXBwcmVzc2VzIGFueSAiU2VnbWVudGF0aW9uIGZhdWx0IiBtZXNzYWdlIHRoZXJlLiAgJygoJyBjb3VsZAorIyB0cmlnZ2VyIGEgYnVnIGluIHBka3NoIDUuMi4xNC4KK2ZvciBhc192YXIgaW4gQkFTSF9FTlYgRU5WIE1BSUwgTUFJTFBBVEgKK2RvIGV2YWwgdGVzdCB4XCR7JGFzX3ZhcitzZXR9ID0geHNldCBcCisgICYmICggKHVuc2V0ICRhc192YXIpIHx8IGV4aXQgMSkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0ICRhc192YXIgfHwgOgorZG9uZQogUFMxPSckICcKIFBTMj0nPiAnCiBQUzQ9JysgJwogCiAjIE5MUyBudWlzYW5jZXMuCi1mb3IgYXNfdmFyIGluIFwKLSAgTEFORyBMQU5HVUFHRSBMQ19BRERSRVNTIExDX0FMTCBMQ19DT0xMQVRFIExDX0NUWVBFIExDX0lERU5USUZJQ0FUSU9OIFwKLSAgTENfTUVBU1VSRU1FTlQgTENfTUVTU0FHRVMgTENfTU9ORVRBUlkgTENfTkFNRSBMQ19OVU1FUklDIExDX1BBUEVSIFwKLSAgTENfVEVMRVBIT05FIExDX1RJTUUKLWRvCi0gIGlmIChzZXQgK3g7IHRlc3QgLXogImAoZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyKSAyPiYxYCIpOyB0aGVuCi0gICAgZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyCi0gIGVsc2UKLSAgICAkYXNfdW5zZXQgJGFzX3ZhcgotICBmaQotZG9uZQorTENfQUxMPUMKK2V4cG9ydCBMQ19BTEwKK0xBTkdVQUdFPUMKK2V4cG9ydCBMQU5HVUFHRQogCi0jIFJlcXVpcmVkIHRvIHVzZSBiYXNlbmFtZS4KLWlmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisjIENEUEFUSC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworCisjIGFzX2ZuX2Vycm9yIFNUQVRVUyBFUlJPUiBbTElORU5PIExPR19GRF0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPdXRwdXQgImBiYXNlbmFtZSAkMGA6IGVycm9yOiBFUlJPUiIgdG8gc3RkZXJyLiBJZiBMSU5FTk8gYW5kIExPR19GRCBhcmUKKyMgcHJvdmlkZWQsIGFsc28gb3V0cHV0IHRoZSBlcnJvciB0byBMT0dfRkQsIHJlZmVyZW5jaW5nIExJTkVOTy4gVGhlbiBleGl0IHRoZQorIyBzY3JpcHQgd2l0aCBTVEFUVVMsIHVzaW5nIDEgaWYgdGhhdCB3YXMgMC4KK2FzX2ZuX2Vycm9yICgpCit7CisgIGFzX3N0YXR1cz0kMTsgdGVzdCAkYXNfc3RhdHVzIC1lcSAwICYmIGFzX3N0YXR1cz0xCisgIGlmIHRlc3QgIiQ0IjsgdGhlbgorICAgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDMifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogJDIiID4mJDQKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6ICQyIiA+JjIKKyAgYXNfZm5fZXhpdCAkYXNfc3RhdHVzCit9ICMgYXNfZm5fZXJyb3IKKworCisjIGFzX2ZuX3NldF9zdGF0dXMgU1RBVFVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCAkPyB0byBTVEFUVVMsIHdpdGhvdXQgZm9ya2luZy4KK2FzX2ZuX3NldF9zdGF0dXMgKCkKK3sKKyAgcmV0dXJuICQxCit9ICMgYXNfZm5fc2V0X3N0YXR1cworCisjIGFzX2ZuX2V4aXQgU1RBVFVTCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIEV4aXQgdGhlIHNoZWxsIHdpdGggU1RBVFVTLCBldmVuIGluIGEgInRyYXAgMCIgb3IgInNldCAtZSIgY29udGV4dC4KK2FzX2ZuX2V4aXQgKCkKK3sKKyAgc2V0ICtlCisgIGFzX2ZuX3NldF9zdGF0dXMgJDEKKyAgZXhpdCAkMQorfSAjIGFzX2ZuX2V4aXQKKworIyBhc19mbl91bnNldCBWQVIKKyMgLS0tLS0tLS0tLS0tLS0tCisjIFBvcnRhYmx5IHVuc2V0IFZBUi4KK2FzX2ZuX3Vuc2V0ICgpCit7CisgIHsgZXZhbCAkMT07IHVuc2V0ICQxO30KK30KK2FzX3Vuc2V0PWFzX2ZuX3Vuc2V0CisjIGFzX2ZuX2FwcGVuZCBWQVIgVkFMVUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgdGhlIHRleHQgaW4gVkFMVUUgdG8gdGhlIGVuZCBvZiB0aGUgZGVmaW5pdGlvbiBjb250YWluZWQgaW4gVkFSLiBUYWtlCisjIGFkdmFudGFnZSBvZiBhbnkgc2hlbGwgb3B0aW1pemF0aW9ucyB0aGF0IGFsbG93IGFtb3J0aXplZCBsaW5lYXIgZ3Jvd3RoIG92ZXIKKyMgcmVwZWF0ZWQgYXBwZW5kcywgaW5zdGVhZCBvZiB0aGUgdHlwaWNhbCBxdWFkcmF0aWMgZ3Jvd3RoIHByZXNlbnQgaW4gbmFpdmUKKyMgaW1wbGVtZW50YXRpb25zLgoraWYgKGV2YWwgImFzX3Zhcj0xOyBhc192YXIrPTI7IHRlc3QgeFwkYXNfdmFyID0geDEyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDErPVwkMgorICB9JworZWxzZQorICBhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDE9XCQkMVwkMgorICB9CitmaSAjIGFzX2ZuX2FwcGVuZAorCisjIGFzX2ZuX2FyaXRoIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGVyZm9ybSBhcml0aG1ldGljIGV2YWx1YXRpb24gb24gdGhlIEFSR3MsIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIHRoZQorIyBnbG9iYWwgJGFzX3ZhbC4gVGFrZSBhZHZhbnRhZ2Ugb2Ygc2hlbGxzIHRoYXQgY2FuIGF2b2lkIGZvcmtzLiBUaGUgYXJndW1lbnRzCisjIG11c3QgYmUgcG9ydGFibGUgYWNyb3NzICQoKCkpIGFuZCBleHByLgoraWYgKGV2YWwgInRlc3QgXCQoKCAxICsgMSApKSA9IDIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGV2YWwgJ2FzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9JCgoICQqICkpCisgIH0nCitlbHNlCisgIGFzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9YGV4cHIgIiRAIiB8fCB0ZXN0ICQ/IC1lcSAxYAorICB9CitmaSAjIGFzX2ZuX2FyaXRoCisKKworaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKKyAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCiAgIGFzX2V4cHI9ZXhwcgogZWxzZQogICBhc19leHByPWZhbHNlCiBmaQogCi1pZiAoYmFzZW5hbWUgLykgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgIlhgYmFzZW5hbWUgLyAyPiYxYCIgPSAiWC8iOyB0aGVuCitpZiAoYmFzZW5hbWUgLS0gLykgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgIlhgYmFzZW5hbWUgLS0gLyAyPiYxYCIgPSAiWC8iOyB0aGVuCiAgIGFzX2Jhc2VuYW1lPWJhc2VuYW1lCiBlbHNlCiAgIGFzX2Jhc2VuYW1lPWZhbHNlCiBmaQogCitpZiAoYXNfZGlyPWBkaXJuYW1lIC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfZGlybmFtZT1kaXJuYW1lCitlbHNlCisgIGFzX2Rpcm5hbWU9ZmFsc2UKK2ZpCiAKLSMgTmFtZSBvZiB0aGUgZXhlY3V0YWJsZS4KLWFzX21lPWAkYXNfYmFzZW5hbWUgIiQwIiB8fAorYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8CiAkYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8qJCcgXHwgXAogCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiQwIiA6ICdYXCgvXCkkJyBcfCBcCi0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAotZWNobyBYLyIkMCIgfAotICAgIHNlZCAnL14uKlwvXChbXi9dW14vXSpcKVwvKiQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXC9cKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXC9cKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKKwkgWCIkMCIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYLyIkMCIgfAorICAgIHNlZCAnL14uKlwvXChbXi9dW14vXSpcKVwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXC9cKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXC9cKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKIAotCi0jIFBBVEggbmVlZHMgQ1IsIGFuZCBMSU5FTk8gbmVlZHMgQ1IgYW5kIFBBVEguCiAjIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCiBhc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKIGFzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJwpAQCAtMTYyNDIsMTQ4ICszNzk5OCwxMTEgQEAKIGFzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKIGFzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cwogCi0jIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KLWlmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCi0gIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKLSAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAotICBjaG1vZCAreCBjb25mJCQuc2gKLSAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICBQQVRIX1NFUEFSQVRPUj0nOycKLSAgZWxzZQotICAgIFBBVEhfU0VQQVJBVE9SPToKLSAgZmkKLSAgcm0gLWYgY29uZiQkLnNoCi1maQotCi0KLSAgYXNfbGluZW5vXzE9JExJTkVOTwotICBhc19saW5lbm9fMj0kTElORU5PCi0gIGFzX2xpbmVub18zPWAoZXhwciAkYXNfbGluZW5vXzEgKyAxKSAyPi9kZXYvbnVsbGAKLSAgdGVzdCAieCRhc19saW5lbm9fMSIgIT0gIngkYXNfbGluZW5vXzIiICYmCi0gIHRlc3QgIngkYXNfbGluZW5vXzMiICA9ICJ4JGFzX2xpbmVub18yIiAgfHwgewotICAjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBwYXRoIGF0IGFsbAotICAjIHJlbGF0aXZlIG9yIG5vdC4KLSAgY2FzZSAkMCBpbgotICAgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKLSAgICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCi1kb25lCi0KLSAgICAgICA7OwotICBlc2FjCi0gICMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKLSAgIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCi0gIGlmIHRlc3QgIngkYXNfbXlzZWxmIiA9IHg7IHRoZW4KLSAgICBhc19teXNlbGY9JDAKLSAgZmkKLSAgaWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBwYXRoIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBwYXRoIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gIGZpCi0gIGNhc2UgJENPTkZJR19TSEVMTCBpbgotICAnJykKLSAgICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluIC9iaW4kUEFUSF9TRVBBUkFUT1IvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhc19iYXNlIGluIHNoIGJhc2gga3NoIHNoNTsgZG8KLQkgY2FzZSAkYXNfZGlyIGluCi0JIC8qKQotCSAgIGlmICgiJGFzX2Rpci8kYXNfYmFzZSIgLWMgJwotICBhc19saW5lbm9fMT0kTElORU5PCi0gIGFzX2xpbmVub18yPSRMSU5FTk8KLSAgYXNfbGluZW5vXzM9YChleHByICRhc19saW5lbm9fMSArIDEpIDI+L2Rldi9udWxsYAotICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKLSAgdGVzdCAieCRhc19saW5lbm9fMyIgID0gIngkYXNfbGluZW5vXzIiICcpIDI+L2Rldi9udWxsOyB0aGVuCi0JICAgICAkYXNfdW5zZXQgQkFTSF9FTlYgfHwgdGVzdCAiJHtCQVNIX0VOVitzZXR9IiAhPSBzZXQgfHwgeyBCQVNIX0VOVj07IGV4cG9ydCBCQVNIX0VOVjsgfQotCSAgICAgJGFzX3Vuc2V0IEVOViB8fCB0ZXN0ICIke0VOVitzZXR9IiAhPSBzZXQgfHwgeyBFTlY9OyBleHBvcnQgRU5WOyB9Ci0JICAgICBDT05GSUdfU0hFTEw9JGFzX2Rpci8kYXNfYmFzZQotCSAgICAgZXhwb3J0IENPTkZJR19TSEVMTAotCSAgICAgZXhlYyAiJENPTkZJR19TSEVMTCIgIiQwIiAkezErIiRAIn0KLQkgICBmaTs7Ci0JIGVzYWMKLSAgICAgICBkb25lCi1kb25lCi07OwotICBlc2FjCi0KLSAgIyBDcmVhdGUgJGFzX21lLmxpbmVubyBhcyBhIGNvcHkgb2YgJGFzX215c2VsZiwgYnV0IHdpdGggJExJTkVOTwotICAjIHVuaWZvcm1seSByZXBsYWNlZCBieSB0aGUgbGluZSBudW1iZXIuICBUaGUgZmlyc3QgJ3NlZCcgaW5zZXJ0cyBhCi0gICMgbGluZS1udW1iZXIgbGluZSBiZWZvcmUgZWFjaCBsaW5lOyB0aGUgc2Vjb25kICdzZWQnIGRvZXMgdGhlIHJlYWwKLSAgIyB3b3JrLiAgVGhlIHNlY29uZCBzY3JpcHQgdXNlcyAnTicgdG8gcGFpciBlYWNoIGxpbmUtbnVtYmVyIGxpbmUKLSAgIyB3aXRoIHRoZSBudW1iZXJlZCBsaW5lLCBhbmQgYXBwZW5kcyB0cmFpbGluZyAnLScgZHVyaW5nCi0gICMgc3Vic3RpdHV0aW9uIHNvIHRoYXQgJExJTkVOTyBpcyBub3QgYSBzcGVjaWFsIGNhc2UgYXQgbGluZSBlbmQuCi0gICMgKFJhamEgUiBIYXJpbmF0aCBzdWdnZXN0ZWQgc2VkICc9JywgYW5kIFBhdWwgRWdnZXJ0IHdyb3RlIHRoZQotICAjIHNlY29uZCAnc2VkJyBzY3JpcHQuICBCbGFtZSBMZWUgRS4gTWNNYWhvbiBmb3Igc2VkJ3Mgc3ludGF4LiAgOi0pCi0gIHNlZCAnPScgPCRhc19teXNlbGYgfAotICAgIHNlZCAnCi0gICAgICBOCi0gICAgICBzLCQsLSwKLSAgICAgIDogbG9vcAotICAgICAgcyxeXChbJyRhc19jcl9kaWdpdHMnXSpcKVwoLipcKVskXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dXCksXDFcMlwxXDMsCi0gICAgICB0IGxvb3AKLSAgICAgIHMsLSQsLAotICAgICAgcyxeWyckYXNfY3JfZGlnaXRzJ10qXG4sLAotICAgICcgPiRhc19tZS5saW5lbm8gJiYKLSAgY2htb2QgK3ggJGFzX21lLmxpbmVubyB8fAotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0KLSAgIyBEb24ndCB0cnkgdG8gZXhlYyBhcyBpdCBjaGFuZ2VzICRbMF0sIGNhdXNpbmcgYWxsIHNvcnQgb2YgcHJvYmxlbXMKLSAgIyAodGhlIGRpcm5hbWUgb2YgJFswXSBpcyBub3QgdGhlIHBsYWNlIHdoZXJlIHdlIG1pZ2h0IGZpbmQgdGhlCi0gICMgb3JpZ2luYWwgYW5kIHNvIG9uLiAgQXV0b2NvbmYgaXMgZXNwZWNpYWxseSBzZW5zaWJsZSB0byB0aGlzKS4KLSAgLiAuLyRhc19tZS5saW5lbm8KLSAgIyBFeGl0IHN0YXR1cyBpcyB0aGF0IG9mIHRoZSBsYXN0IGNvbW1hbmQuCi0gIGV4aXQKLX0KLQotCi1jYXNlIGBlY2hvICJ0ZXN0aW5nXGMiOyBlY2hvIDEsMiwzYCxgZWNobyAtbiB0ZXN0aW5nOyBlY2hvIDEsMiwzYCBpbgotICAqYyosLW4qKSBFQ0hPX049IEVDSE9fQz0nCi0nIEVDSE9fVD0nCScgOzsKLSAgKmMqLCogICkgRUNIT19OPS1uIEVDSE9fQz0gRUNIT19UPSA7OwotICAqKSAgICAgICBFQ0hPX049IEVDSE9fQz0nXGMnIEVDSE9fVD0gOzsKK0VDSE9fQz0gRUNIT19OPSBFQ0hPX1Q9CitjYXNlIGBlY2hvIC1uIHhgIGluICMoKCgoKAorLW4qKQorICBjYXNlIGBlY2hvICd4eVxjJ2AgaW4KKyAgKmMqKSBFQ0hPX1Q9JwknOzsJIyBFQ0hPX1QgaXMgc2luZ2xlIHRhYiBjaGFyYWN0ZXIuCisgIHh5KSAgRUNIT19DPSdcYyc7OworICAqKSAgIGVjaG8gYGVjaG8ga3NoODggYnVnIG9uIEFJWCA2LjFgID4gL2Rldi9udWxsCisgICAgICAgRUNIT19UPScJJzs7CisgIGVzYWM7OworKikKKyAgRUNIT19OPSctbic7OwogZXNhYwogCi1pZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhc19leHByPWV4cHIKLWVsc2UKLSAgYXNfZXhwcj1mYWxzZQotZmkKLQogcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKLWVjaG8gPmNvbmYkJC5maWxlCi1pZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KLSAgIyBXZSBjb3VsZCBqdXN0IGNoZWNrIGZvciBESkdQUDsgYnV0IHRoaXMgdGVzdCBhKSB3b3JrcyBiKSBpcyBtb3JlIGdlbmVyaWMKLSAgIyBhbmQgYykgd2lsbCByZW1haW4gdmFsaWQgb25jZSBESkdQUCBzdXBwb3J0cyBzeW1saW5rcyAoREpHUFAgMi4wNCkuCi0gIGlmIHRlc3QgLWYgY29uZiQkLmV4ZTsgdGhlbgotICAgICMgRG9uJ3QgdXNlIGxuIGF0IGFsbDsgd2UgZG9uJ3QgaGF2ZSBhbnkgbGlua3MKLSAgICBhc19sbl9zPSdjcCAtcCcKLSAgZWxzZQoraWYgdGVzdCAtZCBjb25mJCQuZGlyOyB0aGVuCisgIHJtIC1mIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUKK2Vsc2UKKyAgcm0gLWYgY29uZiQkLmRpcgorICBta2RpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCitmaQoraWYgKGVjaG8gPmNvbmYkJC5maWxlKSAyPi9kZXYvbnVsbDsgdGhlbgorICBpZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KICAgICBhc19sbl9zPSdsbiAtcycKKyAgICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgorICAgICMgMSkgT24gTVNZUywgYm90aCBgbG4gLXMgZmlsZSBkaXInIGFuZCBgbG4gZmlsZSBkaXInIGZhaWwuCisgICAgIyAyKSBESkdQUCA8IDIuMDQgaGFzIG5vIHN5bWxpbmtzOyBgbG4gLXMnIGNyZWF0ZXMgYSB3cmFwcGVyIGV4ZWN1dGFibGUuCisgICAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wUicuCisgICAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAorICAgICAgYXNfbG5fcz0nY3AgLXBSJworICBlbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFzX2xuX3M9bG4KKyAgZWxzZQorICAgIGFzX2xuX3M9J2NwIC1wUicKICAgZmkKLWVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCi0gIGFzX2xuX3M9bG4KIGVsc2UKLSAgYXNfbG5fcz0nY3AgLXAnCisgIGFzX2xuX3M9J2NwIC1wUicKIGZpCi1ybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQorcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmRpci9jb25mJCQuZmlsZSBjb25mJCQuZmlsZQorcm1kaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAogCisKKyMgYXNfZm5fbWtkaXJfcAorIyAtLS0tLS0tLS0tLS0tCisjIENyZWF0ZSAiJGFzX2RpciIgYXMgYSBkaXJlY3RvcnksIGluY2x1ZGluZyBwYXJlbnRzIGlmIG5lY2Vzc2FyeS4KK2FzX2ZuX21rZGlyX3AgKCkKK3sKKworICBjYXNlICRhc19kaXIgaW4gIygKKyAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OworICBlc2FjCisgIHRlc3QgLWQgIiRhc19kaXIiIHx8IGV2YWwgJGFzX21rZGlyX3AgfHwgeworICAgIGFzX2RpcnM9CisgICAgd2hpbGUgOjsgZG8KKyAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAorICAgICAgKlwnKikgYXNfcWRpcj1gJGFzX2VjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIycoCisgICAgICAqKSBhc19xZGlyPSRhc19kaXI7OworICAgICAgZXNhYworICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19kaXIiIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCisgICAgZG9uZQorICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKyAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIKKworCit9ICMgYXNfZm5fbWtkaXJfcAogaWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgotICBhc19ta2Rpcl9wPToKKyAgYXNfbWtkaXJfcD0nbWtkaXIgLXAgIiRhc19kaXIiJwogZWxzZQogICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAogICBhc19ta2Rpcl9wPWZhbHNlCiBmaQogCi1hc19leGVjdXRhYmxlX3A9InRlc3QgLWYiCisKKyMgYXNfZm5fZXhlY3V0YWJsZV9wIEZJTEUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdCBpZiBGSUxFIGlzIGFuIGV4ZWN1dGFibGUgcmVndWxhciBmaWxlLgorYXNfZm5fZXhlY3V0YWJsZV9wICgpCit7CisgIHRlc3QgLWYgIiQxIiAmJiB0ZXN0IC14ICIkMSIKK30gIyBhc19mbl9leGVjdXRhYmxlX3AKK2FzX3Rlc3RfeD0ndGVzdCAteCcKK2FzX2V4ZWN1dGFibGVfcD1hc19mbl9leGVjdXRhYmxlX3AKIAogIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgogYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKQEAgLTE2MzkyLDMxICszODExMSwyMCBAQAogYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKIAogCi0jIElGUwotIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4KLWFzX25sPScKLScKLUlGUz0iIAkkYXNfbmwiCi0KLSMgQ0RQQVRILgotJGFzX3Vuc2V0IENEUEFUSAotCiBleGVjIDY+JjEKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNYWluIGJvZHkgb2YgJENPTkZJR19TVEFUVVMgc2NyaXB0LiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK19BU0VPRgordGVzdCAkYXNfd3JpdGVfZmFpbCA9IDAgJiYgY2htb2QgK3ggJENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCiAKLSMgT3BlbiB0aGUgbG9nIHJlYWwgc29vbiwgdG8ga2VlcCBcJFswXSBhbmQgc28gb24gbWVhbmluZ2Z1bCwgYW5kIHRvCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIFNhdmUgdGhlIGxvZyBtZXNzYWdlLCB0byBrZWVwICQwIGFuZCBzbyBvbiBtZWFuaW5nZnVsLCBhbmQgdG8KICMgcmVwb3J0IGFjdHVhbCBpbnB1dCB2YWx1ZXMgb2YgQ09ORklHX0ZJTEVTIGV0Yy4gaW5zdGVhZCBvZiB0aGVpcgotIyB2YWx1ZXMgYWZ0ZXIgb3B0aW9ucyBoYW5kbGluZy4gIExvZ2dpbmcgLS12ZXJzaW9uIGV0Yy4gaXMgT0suCi1leGVjIDU+PmNvbmZpZy5sb2cKLXsKLSAgZWNobwotICBzZWQgJ2g7cy8uLy0vZztzL14uLi4vIyMgLztzLy4uLiQvICMjLztwO3g7cDt4JyA8PF9BU0JPWAotIyMgUnVubmluZyAkYXNfbWUuICMjCi1fQVNCT1gKLX0gPiY1Ci1jYXQgPiY1IDw8X0NTRU9GCi0KLVRoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgR05VIEJpc29uICRhc19tZSAyLjMsIHdoaWNoIHdhcwotZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisjIHZhbHVlcyBhZnRlciBvcHRpb25zIGhhbmRsaW5nLgorYWNfbG9nPSIKK1RoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgR05VIEJpc29uICRhc19tZSAyLjcsIHdoaWNoIHdhcworZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCiAKICAgQ09ORklHX0ZJTEVTICAgID0gJENPTkZJR19GSUxFUwogICBDT05GSUdfSEVBREVSUyAgPSAkQ09ORklHX0hFQURFUlMKQEAgLTE2NDI0LDQ1ICszODEzMiw0OCBAQAogICBDT05GSUdfQ09NTUFORFMgPSAkQ09ORklHX0NPTU1BTkRTCiAgICQgJDAgJEAKIAotX0NTRU9GCi1lY2hvICJvbiBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAiID4mNQotZWNobyA+JjUKK29uIGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorIgorCiBfQUNFT0YKIAorY2FzZSAkYWNfY29uZmlnX2ZpbGVzIGluICoiCisiKikgc2V0IHggJGFjX2NvbmZpZ19maWxlczsgc2hpZnQ7IGFjX2NvbmZpZ19maWxlcz0kKjs7Citlc2FjCisKK2Nhc2UgJGFjX2NvbmZpZ19oZWFkZXJzIGluICoiCisiKikgc2V0IHggJGFjX2NvbmZpZ19oZWFkZXJzOyBzaGlmdDsgYWNfY29uZmlnX2hlYWRlcnM9JCo7OworZXNhYworCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogIyBGaWxlcyB0aGF0IGNvbmZpZy5zdGF0dXMgd2FzIG1hZGUgZm9yLgotaWYgdGVzdCAtbiAiJGFjX2NvbmZpZ19maWxlcyI7IHRoZW4KLSAgZWNobyAiY29uZmlnX2ZpbGVzPVwiJGFjX2NvbmZpZ19maWxlc1wiIiA+PiRDT05GSUdfU1RBVFVTCi1maQorY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIgorY29uZmlnX2hlYWRlcnM9IiRhY19jb25maWdfaGVhZGVycyIKK2NvbmZpZ19saW5rcz0iJGFjX2NvbmZpZ19saW5rcyIKK2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyIKIAotaWYgdGVzdCAtbiAiJGFjX2NvbmZpZ19oZWFkZXJzIjsgdGhlbgotICBlY2hvICJjb25maWdfaGVhZGVycz1cIiRhY19jb25maWdfaGVhZGVyc1wiIiA+PiRDT05GSUdfU1RBVFVTCi1maQorX0FDRU9GCiAKLWlmIHRlc3QgLW4gIiRhY19jb25maWdfbGlua3MiOyB0aGVuCi0gIGVjaG8gImNvbmZpZ19saW5rcz1cIiRhY19jb25maWdfbGlua3NcIiIgPj4kQ09ORklHX1NUQVRVUwotZmkKLQotaWYgdGVzdCAtbiAiJGFjX2NvbmZpZ19jb21tYW5kcyI7IHRoZW4KLSAgZWNobyAiY29uZmlnX2NvbW1hbmRzPVwiJGFjX2NvbmZpZ19jb21tYW5kc1wiIiA+PiRDT05GSUdfU1RBVFVTCi1maQotCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKLQorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogYWNfY3NfdXNhZ2U9IlwKLVxgJGFzX21lJyBpbnN0YW50aWF0ZXMgZmlsZXMgZnJvbSB0ZW1wbGF0ZXMgYWNjb3JkaW5nIHRvIHRoZQotY3VycmVudCBjb25maWd1cmF0aW9uLgorXGAkYXNfbWUnIGluc3RhbnRpYXRlcyBmaWxlcyBhbmQgb3RoZXIgY29uZmlndXJhdGlvbiBhY3Rpb25zCitmcm9tIHRlbXBsYXRlcyBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gIFVubGVzcyB0aGUgZmlsZXMKK2FuZCBhY3Rpb25zIGFyZSBzcGVjaWZpZWQgYXMgVEFHcywgYWxsIGFyZSBpbnN0YW50aWF0ZWQgYnkgZGVmYXVsdC4KIAotVXNhZ2U6ICQwIFtPUFRJT05TXSBbRklMRV0uLi4KK1VzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVEFHXS4uLgogCiAgIC1oLCAtLWhlbHAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKLSAgLVYsIC0tdmVyc2lvbiAgICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0Ci0gIC1xLCAtLXF1aWV0ICAgICAgZG8gbm90IHByaW50IHByb2dyZXNzIG1lc3NhZ2VzCisgIC1WLCAtLXZlcnNpb24gICAgcHJpbnQgdmVyc2lvbiBudW1iZXIgYW5kIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsIHRoZW4gZXhpdAorICAgICAgLS1jb25maWcgICAgIHByaW50IGNvbmZpZ3VyYXRpb24sIHRoZW4gZXhpdAorICAtcSwgLS1xdWlldCwgLS1zaWxlbnQKKyAgICAgICAgICAgICAgICAgICBkbyBub3QgcHJpbnQgcHJvZ3Jlc3MgbWVzc2FnZXMKICAgLWQsIC0tZGVidWcgICAgICBkb24ndCByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCiAgICAgICAtLXJlY2hlY2sgICAgdXBkYXRlICRhc19tZSBieSByZWNvbmZpZ3VyaW5nIGluIHRoZSBzYW1lIGNvbmRpdGlvbnMKLSAgLS1maWxlPUZJTEVbOlRFTVBMQVRFXQotCQkgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIEZJTEUKLSAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCi0JCSAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGhlYWRlciBGSUxFCisgICAgICAtLWZpbGU9RklMRVs6VEVNUExBVEVdCisgICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBGSUxFCisgICAgICAtLWhlYWRlcj1GSUxFWzpURU1QTEFURV0KKyAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBoZWFkZXIgRklMRQogCiBDb25maWd1cmF0aW9uIGZpbGVzOgogJGNvbmZpZ19maWxlcwpAQCAtMTY0NzAsODcgKzM4MTgxLDEwMCBAQAogQ29uZmlndXJhdGlvbiBoZWFkZXJzOgogJGNvbmZpZ19oZWFkZXJzCiAKK0NvbmZpZ3VyYXRpb24gbGlua3M6CiskY29uZmlnX2xpbmtzCisKIENvbmZpZ3VyYXRpb24gY29tbWFuZHM6CiAkY29uZmlnX2NvbW1hbmRzCiAKLVJlcG9ydCBidWdzIHRvIDxidWctYXV0b2NvbmZAZ251Lm9yZz4uIgorUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1iaXNvbkBnbnUub3JnPi4KK0dOVSBCaXNvbiBob21lIHBhZ2U6IDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYmlzb24vPi4KK0dlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LiIKKwogX0FDRU9GCi0KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2FjX2NzX2NvbmZpZz0iYCRhc19lY2hvICIkYWNfY29uZmlndXJlX2FyZ3MiIHwgc2VkICdzL14gLy87IHMvW1xcIiJcYFwkXS9cXFxcJi9nJ2AiCiBhY19jc192ZXJzaW9uPSJcXAotR05VIEJpc29uIGNvbmZpZy5zdGF0dXMgMi4zCi1jb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTksCi0gIHdpdGggb3B0aW9ucyBcXCJgZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9bXFwiIlxgXCRdL1xcXFwmL2cnYFxcIgorR05VIEJpc29uIGNvbmZpZy5zdGF0dXMgMi43Citjb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjksCisgIHdpdGggb3B0aW9ucyBcXCJcJGFjX2NzX2NvbmZpZ1xcIgogCi1Db3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitDb3B5cmlnaHQgKEMpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiBUaGlzIGNvbmZpZy5zdGF0dXMgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCi1zcmNkaXI9JHNyY2RpcgotSU5TVEFMTD0iJElOU1RBTEwiCisKK2FjX3B3ZD0nJGFjX3B3ZCcKK3NyY2Rpcj0nJHNyY2RpcicKK0lOU1RBTEw9JyRJTlNUQUxMJworTUtESVJfUD0nJE1LRElSX1AnCitBV0s9JyRBV0snCit0ZXN0IC1uICJcJEFXSyIgfHwgQVdLPWF3awogX0FDRU9GCiAKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgotIyBJZiBubyBmaWxlIGFyZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIsIHRoZW4gd2UgbmVlZCB0byBwcm92aWRlIGRlZmF1bHQKLSMgdmFsdWUuICBCeSB3ZSBuZWVkIHRvIGtub3cgaWYgZmlsZXMgd2VyZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIFRoZSBkZWZhdWx0IGxpc3RzIGFwcGx5IGlmIHRoZSB1c2VyIGRvZXMgbm90IHNwZWNpZnkgYW55IGZpbGUuCiBhY19uZWVkX2RlZmF1bHRzPToKIHdoaWxlIHRlc3QgJCMgIT0gMAogZG8KICAgY2FzZSAkMSBpbgotICAtLSo9KikKLSAgICBhY19vcHRpb249YGV4cHIgIngkMSIgOiAneFwoW149XSpcKT0nYAotICAgIGFjX29wdGFyZz1gZXhwciAieCQxIiA6ICd4W149XSo9XCguKlwpJ2AKKyAgLS0qPT8qKQorICAgIGFjX29wdGlvbj1gZXhwciAiWCQxIiA6ICdYXChbXj1dKlwpPSdgCisgICAgYWNfb3B0YXJnPWBleHByICJYJDEiIDogJ1hbXj1dKj1cKC4qXCknYAogICAgIGFjX3NoaWZ0PToKICAgICA7OwotICAtKikKKyAgLS0qPSkKKyAgICBhY19vcHRpb249YGV4cHIgIlgkMSIgOiAnWFwoW149XSpcKT0nYAorICAgIGFjX29wdGFyZz0KKyAgICBhY19zaGlmdD06CisgICAgOzsKKyAgKikKICAgICBhY19vcHRpb249JDEKICAgICBhY19vcHRhcmc9JDIKICAgICBhY19zaGlmdD1zaGlmdAogICAgIDs7Ci0gICopICMgVGhpcyBpcyBub3QgYW4gb3B0aW9uLCBzbyB0aGUgdXNlciBoYXMgcHJvYmFibHkgZ2l2ZW4gZXhwbGljaXQKLSAgICAgIyBhcmd1bWVudHMuCi0gICAgIGFjX29wdGlvbj0kMQotICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKICAgZXNhYwogCiAgIGNhc2UgJGFjX29wdGlvbiBpbgogICAjIEhhbmRsaW5nIG9mIHRoZSBvcHRpb25zLgotX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKICAgLXJlY2hlY2sgfCAtLXJlY2hlY2sgfCAtLXJlY2hlYyB8IC0tcmVjaGUgfCAtLXJlY2ggfCAtLXJlYyB8IC0tcmUgfCAtLXIpCiAgICAgYWNfY3NfcmVjaGVjaz06IDs7Ci0gIC0tdmVyc2lvbiB8IC0tdmVycyogfCAtViApCi0gICAgZWNobyAiJGFjX2NzX3ZlcnNpb24iOyBleGl0IDAgOzsKLSAgLS1oZSB8IC0taCkKLSAgICAjIENvbmZsaWN0IGJldHdlZW4gLS1oZWxwIGFuZCAtLWhlYWRlcgotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGFtYmlndW91cyBvcHRpb246ICQxCi1UcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBhbWJpZ3VvdXMgb3B0aW9uOiAkMQotVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OwotICAtLWhlbHAgfCAtLWhlbCB8IC1oICkKLSAgICBlY2hvICIkYWNfY3NfdXNhZ2UiOyBleGl0IDAgOzsKLSAgLS1kZWJ1ZyB8IC0tZCogfCAtZCApCisgIC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC0tdmVyIHwgLS12ZSB8IC0tdiB8IC1WICkKKyAgICAkYXNfZWNobyAiJGFjX2NzX3ZlcnNpb24iOyBleGl0IDs7CisgIC0tY29uZmlnIHwgLS1jb25maSB8IC0tY29uZiB8IC0tY29uIHwgLS1jbyB8IC0tYyApCisgICAgJGFzX2VjaG8gIiRhY19jc19jb25maWciOyBleGl0IDs7CisgIC0tZGVidWcgfCAtLWRlYnUgfCAtLWRlYiB8IC0tZGUgfCAtLWQgfCAtZCApCiAgICAgZGVidWc9OiA7OwogICAtLWZpbGUgfCAtLWZpbCB8IC0tZmkgfCAtLWYgKQogICAgICRhY19zaGlmdAotICAgIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyAkYWNfb3B0YXJnIgorICAgIGNhc2UgJGFjX29wdGFyZyBpbgorICAgICpcJyopIGFjX29wdGFyZz1gJGFzX2VjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgJycpIGFzX2ZuX2Vycm9yICQ/ICJtaXNzaW5nIGZpbGUgYXJndW1lbnQiIDs7CisgICAgZXNhYworICAgIGFzX2ZuX2FwcGVuZCBDT05GSUdfRklMRVMgIiAnJGFjX29wdGFyZyciCiAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7CiAgIC0taGVhZGVyIHwgLS1oZWFkZSB8IC0taGVhZCB8IC0taGVhICkKICAgICAkYWNfc2hpZnQKLSAgICBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTICRhY19vcHRhcmciCisgICAgY2FzZSAkYWNfb3B0YXJnIGluCisgICAgKlwnKikgYWNfb3B0YXJnPWAkYXNfZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICBlc2FjCisgICAgYXNfZm5fYXBwZW5kIENPTkZJR19IRUFERVJTICIgJyRhY19vcHRhcmcnIgogICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworICAtLWhlIHwgLS1oKQorICAgICMgQ29uZmxpY3QgYmV0d2VlbiAtLWhlbHAgYW5kIC0taGVhZGVyCisgICAgYXNfZm5fZXJyb3IgJD8gImFtYmlndW91cyBvcHRpb246IFxgJDEnCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiI7OworICAtLWhlbHAgfCAtLWhlbCB8IC1oICkKKyAgICAkYXNfZWNobyAiJGFjX2NzX3VzYWdlIjsgZXhpdCA7OwogICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAogICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCB8IC0tc2kgfCAtLXMpCiAgICAgYWNfY3Nfc2lsZW50PTogOzsKIAogICAjIFRoaXMgaXMgYW4gZXJyb3IuCi0gIC0qKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uOiAkMQotVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogdW5yZWNvZ25pemVkIG9wdGlvbjogJDEKLVRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CisgIC0qKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVkIG9wdGlvbjogXGAkMScKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA7OwogCi0gICopIGFjX2NvbmZpZ190YXJnZXRzPSIkYWNfY29uZmlnX3RhcmdldHMgJDEiIDs7CisgICopIGFzX2ZuX2FwcGVuZCBhY19jb25maWdfdGFyZ2V0cyAiICQxIgorICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlIDs7CiAKICAgZXNhYwogICBzaGlmdApAQCAtMTY1NjQsNjAgKzM4Mjg4LDgwIEBACiBmaQogCiBfQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKIGlmIFwkYWNfY3NfcmVjaGVjazsgdGhlbgotICBlY2hvICJydW5uaW5nICRTSEVMTCAkMCAiICRhY19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzICIgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24iID4mNgotICBleGVjICRTSEVMTCAkMCAkYWNfY29uZmlndXJlX2FyZ3MgXCRhY19jb25maWd1cmVfZXh0cmFfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbgorICBzZXQgWCAkU0hFTEwgJyQwJyAkYWNfY29uZmlndXJlX2FyZ3MgXCRhY19jb25maWd1cmVfZXh0cmFfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbgorICBzaGlmdAorICBcJGFzX2VjaG8gInJ1bm5pbmcgQ09ORklHX1NIRUxMPSRTSEVMTCBcJCoiID4mNgorICBDT05GSUdfU0hFTEw9JyRTSEVMTCcKKyAgZXhwb3J0IENPTkZJR19TSEVMTAorICBleGVjICJcJEAiCiBmaQogCiBfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2V4ZWMgNT4+Y29uZmlnLmxvZworeworICBlY2hvCisgIHNlZCAnaDtzLy4vLS9nO3MvXi4uLi8jIyAvO3MvLi4uJC8gIyMvO3A7eDtwO3gnIDw8X0FTQk9YCisjIyBSdW5uaW5nICRhc19tZS4gIyMKK19BU0JPWAorICAkYXNfZWNobyAiJGFjX2xvZyIKK30gPiY1CiAKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogIwotIyBJTklULUNPTU1BTkRTIHNlY3Rpb24uCisjIElOSVQtQ09NTUFORFMKICMKLQogQU1ERVBfVFJVRT0iJEFNREVQX1RSVUUiIGFjX2F1eF9kaXI9IiRhY19hdXhfZGlyIgorR05VbWFrZWZpbGU9JEdOVW1ha2VmaWxlCiAjIENhcHR1cmUgdGhlIHZhbHVlIG9mIG9ic29sZXRlIEFMTF9MSU5HVUFTIGJlY2F1c2Ugd2UgbmVlZCBpdCB0byBjb21wdXRlCiAgICAgIyBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTLCBDQVRBTE9HUy4gQnV0IGhpZGUgaXQKLSAgICAjIGZyb20gYXV0b21ha2UuCisgICAgIyBmcm9tIGF1dG9tYWtlIDwgMS41LgogICAgIGV2YWwgJ09CU09MRVRFX0FMTF9MSU5HVUFTJyc9IiRBTExfTElOR1VBUyInCiAgICAgIyBDYXB0dXJlIHRoZSB2YWx1ZSBvZiBMSU5HVUFTIGJlY2F1c2Ugd2UgbmVlZCBpdCB0byBjb21wdXRlIENBVEFMT0dTLgogICAgIExJTkdVQVM9IiR7TElOR1VBUy0lVU5TRVQlfSIKIAogCisKIF9BQ0VPRgogCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCiAKLQotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisjIEhhbmRsaW5nIG9mIGFyZ3VtZW50cy4KIGZvciBhY19jb25maWdfdGFyZ2V0IGluICRhY19jb25maWdfdGFyZ2V0cwogZG8KLSAgY2FzZSAiJGFjX2NvbmZpZ190YXJnZXQiIGluCi0gICMgSGFuZGxpbmcgb2YgYXJndW1lbnRzLgotICAicnVudGltZS1wby9NYWtlZmlsZS5pbiIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcnVudGltZS1wby9NYWtlZmlsZS5pbiIgOzsKLSAgInRlc3RzL01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0cy9NYWtlZmlsZSIgOzsKLSAgInRlc3RzL2F0bG9jYWwiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RzL2F0bG9jYWwiIDs7Ci0gICJ0ZXN0cy9iaXNvbiIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdHMvYmlzb24iIDs7Ci0gICJNYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWFrZWZpbGUiIDs7Ci0gICJidWlsZC1hdXgvTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGJ1aWxkLWF1eC9NYWtlZmlsZSIgOzsKLSAgInBvL01ha2VmaWxlLmluIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBwby9NYWtlZmlsZS5pbiIgOzsKLSAgImRhdGEvTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRhdGEvTWFrZWZpbGUiIDs7Ci0gICJleGFtcGxlcy9NYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZXhhbXBsZXMvTWFrZWZpbGUiIDs7Ci0gICJleGFtcGxlcy9jYWxjKysvTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGV4YW1wbGVzL2NhbGMrKy9NYWtlZmlsZSIgOzsKLSAgImxpYi9NYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGliL01ha2VmaWxlIiA7OwotICAic3JjL01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBzcmMvTWFrZWZpbGUiIDs7Ci0gICJkb2MvTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRvYy9NYWtlZmlsZSIgOzsKLSAgImRlcGZpbGVzIiApIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBkZXBmaWxlcyIgOzsKLSAgImRlZmF1bHQtMSIgKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgZGVmYXVsdC0xIiA7OwotICAidGVzdHMvYXRjb25maWciICkgQ09ORklHX0NPTU1BTkRTPSIkQ09ORklHX0NPTU1BTkRTIHRlc3RzL2F0Y29uZmlnIiA7OwotICAiY29uZmlnLmgiICkgQ09ORklHX0hFQURFUlM9IiRDT05GSUdfSEVBREVSUyBjb25maWcuaDpjb25maWcuaGluIiA7OwotICAqKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbnZhbGlkIGFyZ3VtZW50OiAkYWNfY29uZmlnX3RhcmdldCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIGFyZ3VtZW50OiAkYWNfY29uZmlnX3RhcmdldCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisgIGNhc2UgJGFjX2NvbmZpZ190YXJnZXQgaW4KKyAgICAibGliL2NvbmZpZy5oIikgQ09ORklHX0hFQURFUlM9IiRDT05GSUdfSEVBREVSUyBsaWIvY29uZmlnLmg6bGliL2NvbmZpZy5pbi5oIiA7OworICAgICJkZXBmaWxlcyIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBkZXBmaWxlcyIgOzsKKyAgICAiJEdOVW1ha2VmaWxlIikgQ09ORklHX0xJTktTPSIkQ09ORklHX0xJTktTICRHTlVtYWtlZmlsZTokR05VbWFrZWZpbGUiIDs7CisgICAgImphdmFjb21wLnNoIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGphdmFjb21wLnNoOmJ1aWxkLWF1eC9qYXZhY29tcC5zaC5pbiIgOzsKKyAgICAiamF2YWV4ZWMuc2giKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgamF2YWV4ZWMuc2g6YnVpbGQtYXV4L2phdmFleGVjLnNoLmluIiA7OworICAgICJwby1kaXJlY3RvcmllcyIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBwby1kaXJlY3RvcmllcyIgOzsKKyAgICAicnVudGltZS1wby9NYWtlZmlsZS5pbiIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBydW50aW1lLXBvL01ha2VmaWxlLmluIiA7OworICAgICJldGMvYmVuY2gucGwiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZXRjL2JlbmNoLnBsIiA7OworICAgICJ0ZXN0cy9hdGNvbmZpZyIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyB0ZXN0cy9hdGNvbmZpZyIgOzsKKyAgICAidGVzdHMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdHMvTWFrZWZpbGUiIDs7CisgICAgInRlc3RzL2F0bG9jYWwiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdHMvYXRsb2NhbCIgOzsKKyAgICAidGVzdHMvYmlzb24iKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdHMvYmlzb24iIDs7CisgICAgIk1ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1ha2VmaWxlIiA7OworICAgICJidWlsZC1hdXgvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgYnVpbGQtYXV4L01ha2VmaWxlIiA7OworICAgICJwby9NYWtlZmlsZS5pbiIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBwby9NYWtlZmlsZS5pbiIgOzsKKyAgICAiZGF0YS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkYXRhL01ha2VmaWxlIiA7OworICAgICJldGMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZXRjL01ha2VmaWxlIiA7OworICAgICJleGFtcGxlcy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBleGFtcGxlcy9NYWtlZmlsZSIgOzsKKyAgICAiZXhhbXBsZXMvY2FsYysrL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGV4YW1wbGVzL2NhbGMrKy9NYWtlZmlsZSIgOzsKKyAgICAibGliL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYi9NYWtlZmlsZSIgOzsKKyAgICAic3JjL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHNyYy9NYWtlZmlsZSIgOzsKKyAgICAiZG9jL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRvYy9NYWtlZmlsZSIgOzsKKyAgICAiZG9jL3lhY2MuMSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkb2MveWFjYy4xIiA7OworCisgICopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGFyZ3VtZW50OiBcYCRhY19jb25maWdfdGFyZ2V0JyIgIiRMSU5FTk8iIDU7OwogICBlc2FjCiBkb25lCiAKKwogIyBJZiB0aGUgdXNlciBkaWQgbm90IHVzZSB0aGUgYXJndW1lbnRzIHRvIHNwZWNpZnkgdGhlIGl0ZW1zIHRvIGluc3RhbnRpYXRlLAogIyB0aGVuIHRoZSBlbnZ2YXIgaW50ZXJmYWNlIGlzIHVzZWQuICBTZXQgb25seSB0aG9zZSB0aGF0IGFyZSBub3QuCiAjIFdlIHVzZSB0aGUgbG9uZyBmb3JtIGZvciB0aGUgZGVmYXVsdCBhc3NpZ25tZW50IGJlY2F1c2Ugb2YgYW4gZXh0cmVtZWx5CkBAIC0xNjYyNSw4NjEgKzM4MzY5LDcxNCBAQAogaWYgJGFjX25lZWRfZGVmYXVsdHM7IHRoZW4KICAgdGVzdCAiJHtDT05GSUdfRklMRVMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0ZJTEVTPSRjb25maWdfZmlsZXMKICAgdGVzdCAiJHtDT05GSUdfSEVBREVSUytzZXR9IiA9IHNldCB8fCBDT05GSUdfSEVBREVSUz0kY29uZmlnX2hlYWRlcnMKKyAgdGVzdCAiJHtDT05GSUdfTElOS1Mrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0xJTktTPSRjb25maWdfbGlua3MKICAgdGVzdCAiJHtDT05GSUdfQ09NTUFORFMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0NPTU1BTkRTPSRjb25maWdfY29tbWFuZHMKIGZpCiAKICMgSGF2ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgZm9yIGNvbnZlbmllbmNlLiAgTWFrZSBpdCBpbiB0aGUgYnVpbGQgdHJlZQotIyBzaW1wbHkgYmVjYXVzZSB0aGVyZSBpcyBubyByZWFzb24gdG8gcHV0IGl0IGhlcmUsIGFuZCBpbiBhZGRpdGlvbiwKKyMgc2ltcGx5IGJlY2F1c2UgdGhlcmUgaXMgbm8gcmVhc29uIGFnYWluc3QgaGF2aW5nIGl0IGhlcmUsIGFuZCBpbiBhZGRpdGlvbiwKICMgY3JlYXRpbmcgYW5kIG1vdmluZyBmaWxlcyBmcm9tIC90bXAgY2FuIHNvbWV0aW1lcyBjYXVzZSBwcm9ibGVtcy4KLSMgQ3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSwgYW5kIGhvb2sgZm9yIGl0cyByZW1vdmFsIHVubGVzcyBkZWJ1Z2dpbmcuCisjIEhvb2sgZm9yIGl0cyByZW1vdmFsIHVubGVzcyBkZWJ1Z2dpbmcuCisjIE5vdGUgdGhhdCB0aGVyZSBpcyBhIHNtYWxsIHdpbmRvdyBpbiB3aGljaCB0aGUgZGlyZWN0b3J5IHdpbGwgbm90IGJlIGNsZWFuZWQ6CisjIGFmdGVyIGl0cyBjcmVhdGlvbiBidXQgYmVmb3JlIGl0cyBuYW1lIGhhcyBiZWVuIGFzc2lnbmVkIHRvIGAkdG1wJy4KICRkZWJ1ZyB8fAogewotICB0cmFwICdleGl0X3N0YXR1cz0kPzsgcm0gLXJmICR0bXAgJiYgZXhpdCAkZXhpdF9zdGF0dXMnIDAKLSAgdHJhcCAneyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAxIDIgMTMgMTUKKyAgdG1wPSBhY190bXA9CisgIHRyYXAgJ2V4aXRfc3RhdHVzPSQ/CisgIDogIiR7YWNfdG1wOj0kdG1wfSIKKyAgeyB0ZXN0ICEgLWQgIiRhY190bXAiIHx8IHJtIC1mciAiJGFjX3RtcCI7IH0gJiYgZXhpdCAkZXhpdF9zdGF0dXMKKycgMAorICB0cmFwICdhc19mbl9leGl0IDEnIDEgMiAxMyAxNQogfQotCiAjIENyZWF0ZSBhIChzZWN1cmUpIHRtcCBkaXJlY3RvcnkgZm9yIHRtcCBmaWxlcy4KIAogewotICB0bXA9YCh1bWFzayAwNzcgJiYgbWt0ZW1wIC1kIC1xICIuL2NvbmZzdGF0WFhYWFhYIikgMj4vZGV2L251bGxgICYmCi0gIHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiCisgIHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIi4vY29uZlhYWFhYWCIpIDI+L2Rldi9udWxsYCAmJgorICB0ZXN0IC1kICIkdG1wIgogfSAgfHwKIHsKLSAgdG1wPS4vY29uZnN0YXQkJC0kUkFORE9NCi0gICh1bWFzayAwNzcgJiYgbWtkaXIgJHRtcCkKLX0gfHwKKyAgdG1wPS4vY29uZiQkLSRSQU5ET00KKyAgKHVtYXNrIDA3NyAmJiBta2RpciAiJHRtcCIpCit9IHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAuIiAiJExJTkVOTyIgNQorYWNfdG1wPSR0bXAKKworIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19GSUxFUyBzZWN0aW9uLgorIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZW0gaWYgdGhlcmUgYXJlIG5vIENPTkZJR19GSUxFUy4KKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgnLgoraWYgdGVzdCAtbiAiJENPTkZJR19GSUxFUyI7IHRoZW4KKworCithY19jcj1gZWNobyBYIHwgdHIgWCAnXDAxNSdgCisjIE9uIGN5Z3dpbiwgYmFzaCBjYW4gZWF0IFxyIGluc2lkZSBgYCBpZiB0aGUgdXNlciByZXF1ZXN0ZWQgaWduY3IuCisjIEJ1dCB3ZSBrbm93IG9mIG5vIG90aGVyIHNoZWxsIHdoZXJlIGFjX2NyIHdvdWxkIGJlIGVtcHR5IGF0IHRoaXMKKyMgcG9pbnQsIHNvIHdlIGNhbiB1c2UgYSBiYXNoaXNtIGFzIGEgZmFsbGJhY2suCitpZiB0ZXN0ICJ4JGFjX2NyIiA9IHg7IHRoZW4KKyAgZXZhbCBhY19jcj1cJFwnXFxyXCcKK2ZpCithY19jc19hd2tfY3I9YCRBV0sgJ0JFR0lOIHsgcHJpbnQgImFccmIiIH0nIDwvZGV2L251bGwgMj4vZGV2L251bGxgCitpZiB0ZXN0ICIkYWNfY3NfYXdrX2NyIiA9ICJhJHthY19jcn1iIjsgdGhlbgorICBhY19jc19hd2tfY3I9J1xccicKK2Vsc2UKKyAgYWNfY3NfYXdrX2NyPSRhY19jcgorZmkKKworZWNobyAnQkVHSU4geycgPiIkYWNfdG1wL3N1YnMxLmF3ayIgJiYKK19BQ0VPRgorCisKIHsKLSAgIGVjaG8gIiRtZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gLiIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH0KKyAgZWNobyAiY2F0ID5jb25mJCRzdWJzLmF3ayA8PF9BQ0VPRiIgJiYKKyAgZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgc2VkICdzLy4qLyYhJCYkYWNfZGVsaW0vJyAmJgorICBlY2hvICJfQUNFT0YiCit9ID5jb25mJCRzdWJzLnNoIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKK2FjX2RlbGltX251bT1gZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgZ3JlcCAtYyAnXidgCithY19kZWxpbT0nJSFfISMgJworZm9yIGFjX2xhc3RfdHJ5IGluIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIDo7IGRvCisgIC4gLi9jb25mJCRzdWJzLnNoIHx8CisgICAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorCisgIGFjX2RlbGltX249YHNlZCAtbiAicy8uKiRhY19kZWxpbVwkL1gvcCIgY29uZiQkc3Vicy5hd2sgfCBncmVwIC1jIFhgCisgIGlmIHRlc3QgJGFjX2RlbGltX24gPSAkYWNfZGVsaW1fbnVtOyB0aGVuCisgICAgYnJlYWsKKyAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CisgIGVsc2UKKyAgICBhY19kZWxpbT0iJGFjX2RlbGltISRhY19kZWxpbSBfJGFjX2RlbGltISEgIgorICBmaQorZG9uZQorcm0gLWYgY29uZiQkc3Vicy5zaAorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2NhdCA+PiJcJGFjX3RtcC9zdWJzMS5hd2siIDw8XFxfQUNBV0sgJiYKK19BQ0VPRgorc2VkIC1uICcKK2gKK3MvXi9TWyIvOyBzLyEuKi8iXT0vCitwCitnCitzL15bXiFdKiEvLworOnJlcGwKK3QgcmVwbAorcy8nIiRhY19kZWxpbSInJC8vCit0IGRlbGltCis6bmwKK2gKK3MvXCguXHsxNDhcfVwpLi4qL1wxLwordCBtb3JlMQorcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxuIlxcLworcAorbgorYiByZXBsCis6bW9yZTEKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyJcXC8KK3AKK2cKK3MvLlx7MTQ4XH0vLwordCBubAorOmRlbGltCitoCitzL1woLlx7MTQ4XH1cKS4uKi9cMS8KK3QgbW9yZTIKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyIvCitwCitiCis6bW9yZTIKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyJcXC8KK3AKK2cKK3MvLlx7MTQ4XH0vLwordCBkZWxpbQorJyA8Y29uZiQkc3Vicy5hd2sgfCBzZWQgJworL15bXiIiXS97CisgIE4KKyAgcy9cbi8vCit9CisnID4+JENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCitybSAtZiBjb25mJCRzdWJzLmF3aworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitfQUNBV0sKK2NhdCA+PiJcJGFjX3RtcC9zdWJzMS5hd2siIDw8X0FDQVdLICYmCisgIGZvciAoa2V5IGluIFMpIFNfaXNfc2V0W2tleV0gPSAxCisgIEZTID0gIgciCisKK30KK3sKKyAgbGluZSA9ICQgMAorICBuZmllbGRzID0gc3BsaXQobGluZSwgZmllbGQsICJAIikKKyAgc3Vic3RlZCA9IDAKKyAgbGVuID0gbGVuZ3RoKGZpZWxkWzFdKQorICBmb3IgKGkgPSAyOyBpIDwgbmZpZWxkczsgaSsrKSB7CisgICAga2V5ID0gZmllbGRbaV0KKyAgICBrZXlsZW4gPSBsZW5ndGgoa2V5KQorICAgIGlmIChTX2lzX3NldFtrZXldKSB7CisgICAgICB2YWx1ZSA9IFNba2V5XQorICAgICAgbGluZSA9IHN1YnN0cihsaW5lLCAxLCBsZW4pICIiIHZhbHVlICIiIHN1YnN0cihsaW5lLCBsZW4gKyBrZXlsZW4gKyAzKQorICAgICAgbGVuICs9IGxlbmd0aCh2YWx1ZSkgKyBsZW5ndGgoZmllbGRbKytpXSkKKyAgICAgIHN1YnN0ZWQgPSAxCisgICAgfSBlbHNlCisgICAgICBsZW4gKz0gMSArIGtleWxlbgorICB9CisKKyAgcHJpbnQgbGluZQogfQogCitfQUNBV0sKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQoraWYgc2VkICJzLyRhY19jci8vIiA8IC9kZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIHNlZCAicy8kYWNfY3JcJC8vOyBzLyRhY19jci8kYWNfY3NfYXdrX2NyL2ciCitlbHNlCisgIGNhdAorZmkgPCAiJGFjX3RtcC9zdWJzMS5hd2siID4gIiRhY190bXAvc3Vicy5hd2siIFwKKyAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBzZXR1cCBjb25maWcgZmlsZXMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQogX0FDRU9GCiAKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisjIFZQQVRIIG1heSBjYXVzZSB0cm91YmxlIHdpdGggc29tZSBtYWtlcywgc28gd2UgcmVtb3ZlIHNvbGUgJChzcmNkaXIpLAorIyAke3NyY2Rpcn0gYW5kIEBzcmNkaXJAIGVudHJpZXMgZnJvbSBWUEFUSCBpZiBzcmNkaXIgaXMgIi4iLCBzdHJpcCBsZWFkaW5nIGFuZAorIyB0cmFpbGluZyBjb2xvbnMgYW5kIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBsaW5lIGlmIFZQQVRIIGJlY29tZXMgZW1wdHkKKyMgKGFjdHVhbGx5IHdlIGxlYXZlIGFuIGVtcHR5IGxpbmUgdG8gcHJlc2VydmUgbGluZSBudW1iZXJzKS4KK2lmIHRlc3QgIngkc3JjZGlyIiA9IHguOyB0aGVuCisgIGFjX3Zwc3ViPScvXlsJIF0qVlBBVEhbCSBdKj1bCSBdKi97CitoCitzLy8vCitzL14vOi8KK3MvWwkgXSokLzovCitzLzpcJChzcmNkaXIpOi86L2cKK3MvOlwke3NyY2Rpcn06LzovZworcy86QHNyY2RpckA6LzovZworcy9eOiovLworcy86KiQvLworeAorcy9cKD1bCSBdKlwpLiovXDEvCitHCitzL1xuLy8KK3MvXltePV0qPVsJIF0qJC8vCit9JworZmkKIAotIwotIyBDT05GSUdfRklMRVMgc2VjdGlvbi4KLSMKLQotIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZSBzY3JpcHRzIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfRklMRVMuCi0jIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2hlbiAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgKLWlmIHRlc3QgLW4gIlwkQ09ORklHX0ZJTEVTIjsgdGhlbgotICAjIFByb3RlY3QgYWdhaW5zdCBiZWluZyBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhIHNlZCBzdWJzdCBpbiBjb25maWcuc3RhdHVzLgotICBzZWQgJ3MvLEAvQEAvOyBzL0AsL0BALzsgcy8sO3QgdFwkL0A7dCB0LzsgL0A7dCB0XCQvcy9bXFxcXCYsXS9cXFxcJi9nOwotICAgcy9AQC8sQC87IHMvQEAvQCwvOyBzL0A7dCB0XCQvLDt0IHQvJyA+XCR0bXAvc3Vicy5zZWQgPDxcXENFT0YKLXMsQFNIRUxMQCwkU0hFTEwsO3QgdAotcyxAUEFUSF9TRVBBUkFUT1JALCRQQVRIX1NFUEFSQVRPUiw7dCB0Ci1zLEBQQUNLQUdFX05BTUVALCRQQUNLQUdFX05BTUUsO3QgdAotcyxAUEFDS0FHRV9UQVJOQU1FQCwkUEFDS0FHRV9UQVJOQU1FLDt0IHQKLXMsQFBBQ0tBR0VfVkVSU0lPTkAsJFBBQ0tBR0VfVkVSU0lPTiw7dCB0Ci1zLEBQQUNLQUdFX1NUUklOR0AsJFBBQ0tBR0VfU1RSSU5HLDt0IHQKLXMsQFBBQ0tBR0VfQlVHUkVQT1JUQCwkUEFDS0FHRV9CVUdSRVBPUlQsO3QgdAotcyxAZXhlY19wcmVmaXhALCRleGVjX3ByZWZpeCw7dCB0Ci1zLEBwcmVmaXhALCRwcmVmaXgsO3QgdAotcyxAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAsJHByb2dyYW1fdHJhbnNmb3JtX25hbWUsO3QgdAotcyxAYmluZGlyQCwkYmluZGlyLDt0IHQKLXMsQHNiaW5kaXJALCRzYmluZGlyLDt0IHQKLXMsQGxpYmV4ZWNkaXJALCRsaWJleGVjZGlyLDt0IHQKLXMsQGRhdGFkaXJALCRkYXRhZGlyLDt0IHQKLXMsQHN5c2NvbmZkaXJALCRzeXNjb25mZGlyLDt0IHQKLXMsQHNoYXJlZHN0YXRlZGlyQCwkc2hhcmVkc3RhdGVkaXIsO3QgdAotcyxAbG9jYWxzdGF0ZWRpckAsJGxvY2Fsc3RhdGVkaXIsO3QgdAotcyxAbGliZGlyQCwkbGliZGlyLDt0IHQKLXMsQGluY2x1ZGVkaXJALCRpbmNsdWRlZGlyLDt0IHQKLXMsQG9sZGluY2x1ZGVkaXJALCRvbGRpbmNsdWRlZGlyLDt0IHQKLXMsQGluZm9kaXJALCRpbmZvZGlyLDt0IHQKLXMsQG1hbmRpckAsJG1hbmRpciw7dCB0Ci1zLEBidWlsZF9hbGlhc0AsJGJ1aWxkX2FsaWFzLDt0IHQKLXMsQGhvc3RfYWxpYXNALCRob3N0X2FsaWFzLDt0IHQKLXMsQHRhcmdldF9hbGlhc0AsJHRhcmdldF9hbGlhcyw7dCB0Ci1zLEBERUZTQCwkREVGUyw7dCB0Ci1zLEBFQ0hPX0NALCRFQ0hPX0MsO3QgdAotcyxARUNIT19OQCwkRUNIT19OLDt0IHQKLXMsQEVDSE9fVEAsJEVDSE9fVCw7dCB0Ci1zLEBMSUJTQCwkTElCUyw7dCB0Ci1zLEBJTlNUQUxMX1BST0dSQU1ALCRJTlNUQUxMX1BST0dSQU0sO3QgdAotcyxASU5TVEFMTF9TQ1JJUFRALCRJTlNUQUxMX1NDUklQVCw7dCB0Ci1zLEBJTlNUQUxMX0RBVEFALCRJTlNUQUxMX0RBVEEsO3QgdAotcyxAQ1lHUEFUSF9XQCwkQ1lHUEFUSF9XLDt0IHQKLXMsQFBBQ0tBR0VALCRQQUNLQUdFLDt0IHQKLXMsQFZFUlNJT05ALCRWRVJTSU9OLDt0IHQKLXMsQEFDTE9DQUxALCRBQ0xPQ0FMLDt0IHQKLXMsQEFVVE9DT05GQCwkQVVUT0NPTkYsO3QgdAotcyxAQVVUT01BS0VALCRBVVRPTUFLRSw7dCB0Ci1zLEBBVVRPSEVBREVSQCwkQVVUT0hFQURFUiw7dCB0Ci1zLEBNQUtFSU5GT0AsJE1BS0VJTkZPLDt0IHQKLXMsQGluc3RhbGxfc2hALCRpbnN0YWxsX3NoLDt0IHQKLXMsQFNUUklQQCwkU1RSSVAsO3QgdAotcyxAYWNfY3RfU1RSSVBALCRhY19jdF9TVFJJUCw7dCB0Ci1zLEBJTlNUQUxMX1NUUklQX1BST0dSQU1ALCRJTlNUQUxMX1NUUklQX1BST0dSQU0sO3QgdAotcyxAbWtkaXJfcEAsJG1rZGlyX3AsO3QgdAotcyxAQVdLQCwkQVdLLDt0IHQKLXMsQFNFVF9NQUtFQCwkU0VUX01BS0UsO3QgdAotcyxAYW1fX2xlYWRpbmdfZG90QCwkYW1fX2xlYWRpbmdfZG90LDt0IHQKLXMsQEFNVEFSQCwkQU1UQVIsO3QgdAotcyxAYW1fX3RhckAsJGFtX190YXIsO3QgdAotcyxAYW1fX3VudGFyQCwkYW1fX3VudGFyLDt0IHQKLXMsQENDQCwkQ0MsO3QgdAotcyxAQ0ZMQUdTQCwkQ0ZMQUdTLDt0IHQKLXMsQExERkxBR1NALCRMREZMQUdTLDt0IHQKLXMsQENQUEZMQUdTQCwkQ1BQRkxBR1MsO3QgdAotcyxAYWNfY3RfQ0NALCRhY19jdF9DQyw7dCB0Ci1zLEBFWEVFWFRALCRFWEVFWFQsO3QgdAotcyxAT0JKRVhUQCwkT0JKRVhULDt0IHQKLXMsQERFUERJUkAsJERFUERJUiw7dCB0Ci1zLEBhbV9faW5jbHVkZUAsJGFtX19pbmNsdWRlLDt0IHQKLXMsQGFtX19xdW90ZUAsJGFtX19xdW90ZSw7dCB0Ci1zLEBBTURFUF9UUlVFQCwkQU1ERVBfVFJVRSw7dCB0Ci1zLEBBTURFUF9GQUxTRUAsJEFNREVQX0ZBTFNFLDt0IHQKLXMsQEFNREVQQkFDS1NMQVNIQCwkQU1ERVBCQUNLU0xBU0gsO3QgdAotcyxAQ0NERVBNT0RFQCwkQ0NERVBNT0RFLDt0IHQKLXMsQGFtX19mYXN0ZGVwQ0NfVFJVRUAsJGFtX19mYXN0ZGVwQ0NfVFJVRSw7dCB0Ci1zLEBhbV9fZmFzdGRlcENDX0ZBTFNFQCwkYW1fX2Zhc3RkZXBDQ19GQUxTRSw7dCB0Ci1zLEBDUFBALCRDUFAsO3QgdAotcyxARUdSRVBALCRFR1JFUCw7dCB0Ci1zLEBXQVJOSU5HX0NGTEFHU0AsJFdBUk5JTkdfQ0ZMQUdTLDt0IHQKLXMsQFdFUlJPUl9DRkxBR1NALCRXRVJST1JfQ0ZMQUdTLDt0IHQKLXMsQFdBUk5JTkdfQ1hYRkxBR1NALCRXQVJOSU5HX0NYWEZMQUdTLDt0IHQKLXMsQFlBQ0NfU0NSSVBUQCwkWUFDQ19TQ1JJUFQsO3QgdAotcyxAWUFDQ19MSUJSQVJZQCwkWUFDQ19MSUJSQVJZLDt0IHQKLXMsQExFWEAsJExFWCw7dCB0Ci1zLEBMRVhMSUJALCRMRVhMSUIsO3QgdAotcyxATEVYX09VVFBVVF9ST09UQCwkTEVYX09VVFBVVF9ST09ULDt0IHQKLXMsQFlBQ0NALCRZQUNDLDt0IHQKLXMsQFJBTkxJQkAsJFJBTkxJQiw7dCB0Ci1zLEBhY19jdF9SQU5MSUJALCRhY19jdF9SQU5MSUIsO3QgdAotcyxATTRALCRNNCw7dCB0Ci1zLEBTVERCT09MX0hALCRTVERCT09MX0gsO3QgdAotcyxASEFWRV9fQk9PTEAsJEhBVkVfX0JPT0wsO3QgdAotcyxATElCT0JKU0AsJExJQk9CSlMsO3QgdAotcyxAR0VUT1BUX0hALCRHRVRPUFRfSCw7dCB0Ci1zLEBNS0lOU1RBTExESVJTQCwkTUtJTlNUQUxMRElSUyw7dCB0Ci1zLEBVU0VfTkxTQCwkVVNFX05MUyw7dCB0Ci1zLEBNU0dGTVRALCRNU0dGTVQsO3QgdAotcyxAR01TR0ZNVEAsJEdNU0dGTVQsO3QgdAotcyxAWEdFVFRFWFRALCRYR0VUVEVYVCw7dCB0Ci1zLEBNU0dNRVJHRUAsJE1TR01FUkdFLDt0IHQKLXMsQGJ1aWxkQCwkYnVpbGQsO3QgdAotcyxAYnVpbGRfY3B1QCwkYnVpbGRfY3B1LDt0IHQKLXMsQGJ1aWxkX3ZlbmRvckAsJGJ1aWxkX3ZlbmRvciw7dCB0Ci1zLEBidWlsZF9vc0AsJGJ1aWxkX29zLDt0IHQKLXMsQGhvc3RALCRob3N0LDt0IHQKLXMsQGhvc3RfY3B1QCwkaG9zdF9jcHUsO3QgdAotcyxAaG9zdF92ZW5kb3JALCRob3N0X3ZlbmRvciw7dCB0Ci1zLEBob3N0X29zQCwkaG9zdF9vcyw7dCB0Ci1zLEBJTlRMX01BQ09TWF9MSUJTQCwkSU5UTF9NQUNPU1hfTElCUyw7dCB0Ci1zLEBMSUJJQ09OVkAsJExJQklDT05WLDt0IHQKLXMsQExUTElCSUNPTlZALCRMVExJQklDT05WLDt0IHQKLXMsQElOVExMSUJTQCwkSU5UTExJQlMsO3QgdAotcyxATElCSU5UTEAsJExJQklOVEwsO3QgdAotcyxATFRMSUJJTlRMQCwkTFRMSUJJTlRMLDt0IHQKLXMsQFBPU1VCQCwkUE9TVUIsO3QgdAotcyxAVU5JU1REX0hALCRVTklTVERfSCw7dCB0Ci1zLEBCSVNPTl9MT0NBTEVESVJALCRCSVNPTl9MT0NBTEVESVIsO3QgdAotcyxAYWNsb2NhbGRpckAsJGFjbG9jYWxkaXIsO3QgdAotcyxAVkFMR1JJTkRALCRWQUxHUklORCw7dCB0Ci1zLEBDWFhALCRDWFgsO3QgdAotcyxAQ1hYRkxBR1NALCRDWFhGTEFHUyw7dCB0Ci1zLEBhY19jdF9DWFhALCRhY19jdF9DWFgsO3QgdAotcyxAQ1hYREVQTU9ERUAsJENYWERFUE1PREUsO3QgdAotcyxAYW1fX2Zhc3RkZXBDWFhfVFJVRUAsJGFtX19mYXN0ZGVwQ1hYX1RSVUUsO3QgdAotcyxAYW1fX2Zhc3RkZXBDWFhfRkFMU0VALCRhbV9fZmFzdGRlcENYWF9GQUxTRSw7dCB0Ci1zLEBCSVNPTl9DWFhfV09SS1NALCRCSVNPTl9DWFhfV09SS1MsO3QgdAotcyxAQklTT05fQ1hYX1dPUktTX1RSVUVALCRCSVNPTl9DWFhfV09SS1NfVFJVRSw7dCB0Ci1zLEBCSVNPTl9DWFhfV09SS1NfRkFMU0VALCRCSVNPTl9DWFhfV09SS1NfRkFMU0UsO3QgdAotcyxAQVVUT000VEVALCRBVVRPTTRURSw7dCB0Ci1zLEBHQ0NALCRHQ0MsO3QgdAotcyxATzBDRkxBR1NALCRPMENGTEFHUyw7dCB0Ci1zLEBPMENYWEZMQUdTQCwkTzBDWFhGTEFHUyw7dCB0Ci1zLEBMVExJQk9CSlNALCRMVExJQk9CSlMsO3QgdAotQ0VPRgotCi1fQUNFT0YKLQotICBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKLSAgIyBTcGxpdCB0aGUgc3Vic3RpdHV0aW9ucyBpbnRvIGJpdGUtc2l6ZWQgcGllY2VzIGZvciBzZWRzIHdpdGgKLSAgIyBzbWFsbCBjb21tYW5kIG51bWJlciBsaW1pdHMsIGxpa2Ugb24gRGlnaXRhbCBPU0YvMSBhbmQgSFAtVVguCi0gIGFjX21heF9zZWRfbGluZXM9NDgKLSAgYWNfc2VkX2ZyYWc9MSAjIE51bWJlciBvZiBjdXJyZW50IGZpbGUuCi0gIGFjX2JlZz0xICMgRmlyc3QgbGluZSBmb3IgY3VycmVudCBmaWxlLgotICBhY19lbmQ9JGFjX21heF9zZWRfbGluZXMgIyBMaW5lIGFmdGVyIGxhc3QgbGluZSBmb3IgY3VycmVudCBmaWxlLgotICBhY19tb3JlX2xpbmVzPToKLSAgYWNfc2VkX2NtZHM9Ci0gIHdoaWxlICRhY19tb3JlX2xpbmVzOyBkbwotICAgIGlmIHRlc3QgJGFjX2JlZyAtZ3QgMTsgdGhlbgotICAgICAgc2VkICIxLCR7YWNfYmVnfWQ7ICR7YWNfZW5kfXEiICR0bXAvc3Vicy5zZWQgPiR0bXAvc3Vicy5mcmFnCi0gICAgZWxzZQotICAgICAgc2VkICIke2FjX2VuZH1xIiAkdG1wL3N1YnMuc2VkID4kdG1wL3N1YnMuZnJhZwotICAgIGZpCi0gICAgaWYgdGVzdCAhIC1zICR0bXAvc3Vicy5mcmFnOyB0aGVuCi0gICAgICBhY19tb3JlX2xpbmVzPWZhbHNlCi0gICAgZWxzZQotICAgICAgIyBUaGUgcHVycG9zZSBvZiB0aGUgbGFiZWwgYW5kIG9mIHRoZSBicmFuY2hpbmcgY29uZGl0aW9uIGlzIHRvCi0gICAgICAjIHNwZWVkIHVwIHRoZSBzZWQgcHJvY2Vzc2luZyAoaWYgdGhlcmUgYXJlIG5vIGBAJyBhdCBhbGwsIHRoZXJlCi0gICAgICAjIGlzIG5vIG5lZWQgdG8gYnJvd3NlIGFueSBvZiB0aGUgc3Vic3RpdHV0aW9ucykuCi0gICAgICAjIFRoZXNlIGFyZSB0aGUgdHdvIGV4dHJhIHNlZCBjb21tYW5kcyBtZW50aW9uZWQgYWJvdmUuCi0gICAgICAoZWNobyAnOnQKLSAgL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYicgJiYgY2F0ICR0bXAvc3Vicy5mcmFnKSA+JHRtcC9zdWJzLSRhY19zZWRfZnJhZy5zZWQKLSAgICAgIGlmIHRlc3QgLXogIiRhY19zZWRfY21kcyI7IHRoZW4KLQlhY19zZWRfY21kcz0ic2VkIC1mICR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkIgotICAgICAgZWxzZQotCWFjX3NlZF9jbWRzPSIkYWNfc2VkX2NtZHMgfCBzZWQgLWYgJHRtcC9zdWJzLSRhY19zZWRfZnJhZy5zZWQiCi0gICAgICBmaQotICAgICAgYWNfc2VkX2ZyYWc9YGV4cHIgJGFjX3NlZF9mcmFnICsgMWAKLSAgICAgIGFjX2JlZz0kYWNfZW5kCi0gICAgICBhY19lbmQ9YGV4cHIgJGFjX2VuZCArICRhY19tYXhfc2VkX2xpbmVzYAotICAgIGZpCi0gIGRvbmUKLSAgaWYgdGVzdCAteiAiJGFjX3NlZF9jbWRzIjsgdGhlbgotICAgIGFjX3NlZF9jbWRzPWNhdAotICBmaQorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogZmkgIyB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIgogCisjIFNldCB1cCB0aGUgc2NyaXB0cyBmb3IgQ09ORklHX0hFQURFUlMgc2VjdGlvbi4KKyMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGVtIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfSEVBREVSUy4KKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgTWFrZWZpbGUnLgoraWYgdGVzdCAtbiAiJENPTkZJR19IRUFERVJTIjsgdGhlbgorY2F0ID4iJGFjX3RtcC9kZWZpbmVzLmF3ayIgPDxcX0FDQVdLIHx8CitCRUdJTiB7CiBfQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgotZm9yIGFjX2ZpbGUgaW4gOiAkQ09ORklHX0ZJTEVTOyBkbyB0ZXN0ICJ4JGFjX2ZpbGUiID0geDogJiYgY29udGludWUKLSAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIiwgZGVmYXVsdGluZyBpbmZpbGU9Im91dGZpbGUuaW4iLgotICBjYXNlICRhY19maWxlIGluCi0gIC0gfCAqOi0gfCAqOi06KiApICMgaW5wdXQgZnJvbSBzdGRpbgotCWNhdCA+JHRtcC9zdGRpbgotCWFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCi0JYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKLSAgKjoqICkgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKLQlhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OwotICAqICkgICBhY19maWxlX2luPSRhY19maWxlLmluIDs7CisKKyMgVHJhbnNmb3JtIGNvbmZkZWZzLmggaW50byBhbiBhd2sgc2NyaXB0IGBkZWZpbmVzLmF3aycsIGVtYmVkZGVkIGFzCisjIGhlcmUtZG9jdW1lbnQgaW4gY29uZmlnLnN0YXR1cywgdGhhdCBzdWJzdGl0dXRlcyB0aGUgcHJvcGVyIHZhbHVlcyBpbnRvCisjIGNvbmZpZy5oLmluIHRvIHByb2R1Y2UgY29uZmlnLmguCisKKyMgQ3JlYXRlIGEgZGVsaW1pdGVyIHN0cmluZyB0aGF0IGRvZXMgbm90IGV4aXN0IGluIGNvbmZkZWZzLmgsIHRvIGVhc2UKKyMgaGFuZGxpbmcgb2YgbG9uZyBsaW5lcy4KK2FjX2RlbGltPSclIV8hIyAnCitmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgOjsgZG8KKyAgYWNfdHQ9YHNlZCAtbiAiLyRhY19kZWxpbS9wIiBjb25mZGVmcy5oYAorICBpZiB0ZXN0IC16ICIkYWNfdHQiOyB0aGVuCisgICAgYnJlYWsKKyAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19IRUFERVJTIiAiJExJTkVOTyIgNQorICBlbHNlCisgICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKKyAgZmkKK2RvbmUKKworIyBGb3IgdGhlIGF3ayBzY3JpcHQsIEQgaXMgYW4gYXJyYXkgb2YgbWFjcm8gdmFsdWVzIGtleWVkIGJ5IG5hbWUsCisjIGxpa2V3aXNlIFAgY29udGFpbnMgbWFjcm8gcGFyYW1ldGVycyBpZiBhbnkuICBQcmVzZXJ2ZSBiYWNrc2xhc2gKKyMgbmV3bGluZSBzZXF1ZW5jZXMuCisKK2FjX3dvcmRfcmU9W18kYXNfY3JfTGV0dGVyc11bXyRhc19jcl9hbG51bV0qCitzZWQgLW4gJworcy8uXHsxNDhcfS8mJyIkYWNfZGVsaW0iJy9nCit0IHJzZXQKKzpyc2V0CitzL15bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKi8gLwordCBkZWYKK2QKKzpkZWYKK3MvXFwkLy8KK3QgYnNubAorcy9bIlxcXS9cXCYvZworcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCitEWyJcMSJdPSIgXDMiL3AKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpWwkgXSpcKC4qXCkvRFsiXDEiXT0iIFwyIi9wCitkCis6YnNubAorcy9bIlxcXS9cXCYvZworcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCitEWyJcMSJdPSIgXDNcXFxcXFxuIlxcL3AKK3QgY29udAorcy9eIFwoJyIkYWNfd29yZF9yZSInXClbCSBdKlwoLipcKS9EWyJcMSJdPSIgXDJcXFxcXFxuIlxcL3AKK3QgY29udAorZAorOmNvbnQKK24KK3MvLlx7MTQ4XH0vJiciJGFjX2RlbGltIicvZwordCBjbGVhcgorOmNsZWFyCitzL1xcJC8vCit0IGJzbmxjCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iL3AKK2QKKzpic25sYworcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxcXFxcbiJcXC9wCitiIGNvbnQKKycgPGNvbmZkZWZzLmggfCBzZWQgJworcy8nIiRhY19kZWxpbSInLyJcXFwKKyIvZycgPj4kQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGZvciAoa2V5IGluIEQpIERfaXNfc2V0W2tleV0gPSAxCisgIEZTID0gIgciCit9CisvXltcdCBdKiNbXHQgXSooZGVmaW5lfHVuZGVmKVtcdCBdKyRhY193b3JkX3JlKFtcdCAoXXxcJCkvIHsKKyAgbGluZSA9IFwkIDAKKyAgc3BsaXQobGluZSwgYXJnLCAiICIpCisgIGlmIChhcmdbMV0gPT0gIiMiKSB7CisgICAgZGVmdW5kZWYgPSBhcmdbMl0KKyAgICBtYWMxID0gYXJnWzNdCisgIH0gZWxzZSB7CisgICAgZGVmdW5kZWYgPSBzdWJzdHIoYXJnWzFdLCAyKQorICAgIG1hYzEgPSBhcmdbMl0KKyAgfQorICBzcGxpdChtYWMxLCBtYWMyLCAiKCIpICMpCisgIG1hY3JvID0gbWFjMlsxXQorICBwcmVmaXggPSBzdWJzdHIobGluZSwgMSwgaW5kZXgobGluZSwgZGVmdW5kZWYpIC0gMSkKKyAgaWYgKERfaXNfc2V0W21hY3JvXSkgeworICAgICMgUHJlc2VydmUgdGhlIHdoaXRlIHNwYWNlIHN1cnJvdW5kaW5nIHRoZSAiIyIuCisgICAgcHJpbnQgcHJlZml4ICJkZWZpbmUiLCBtYWNybyBQW21hY3JvXSBEW21hY3JvXQorICAgIG5leHQKKyAgfSBlbHNlIHsKKyAgICAjIFJlcGxhY2UgI3VuZGVmIHdpdGggY29tbWVudHMuICBUaGlzIGlzIG5lY2Vzc2FyeSwgZm9yIGV4YW1wbGUsCisgICAgIyBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAorICAgICMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgorICAgIGlmIChkZWZ1bmRlZiA9PSAidW5kZWYiKSB7CisgICAgICBwcmludCAiLyoiLCBwcmVmaXggZGVmdW5kZWYsIG1hY3JvLCAiKi8iCisgICAgICBuZXh0CisgICAgfQorICB9Cit9Cit7IHByaW50IH0KK19BQ0FXSworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGhlYWRlcnMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQorZmkgIyB0ZXN0IC1uICIkQ09ORklHX0hFQURFUlMiCisKKworZXZhbCBzZXQgWCAiICA6RiAkQ09ORklHX0ZJTEVTICA6SCAkQ09ORklHX0hFQURFUlMgIDpMICRDT05GSUdfTElOS1MgIDpDICRDT05GSUdfQ09NTUFORFMiCitzaGlmdAorZm9yIGFjX3RhZworZG8KKyAgY2FzZSAkYWNfdGFnIGluCisgIDpbRkhMQ10pIGFjX21vZGU9JGFjX3RhZzsgY29udGludWU7OworICBlc2FjCisgIGNhc2UgJGFjX21vZGUkYWNfdGFnIGluCisgIDpbRkhMXSo6Kik7OworICA6TCogfCA6Qyo6KikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdGFnIFxgJGFjX3RhZyciICIkTElORU5PIiA1OzsKKyAgOltGSF0tKSBhY190YWc9LTotOzsKKyAgOltGSF0qKSBhY190YWc9JGFjX3RhZzokYWNfdGFnLmluOzsKKyAgZXNhYworICBhY19zYXZlX0lGUz0kSUZTCisgIElGUz06CisgIHNldCB4ICRhY190YWcKKyAgSUZTPSRhY19zYXZlX0lGUworICBzaGlmdAorICBhY19maWxlPSQxCisgIHNoaWZ0CisKKyAgY2FzZSAkYWNfbW9kZSBpbgorICA6TCkgYWNfc291cmNlPSQxOzsKKyAgOltGSF0pCisgICAgYWNfZmlsZV9pbnB1dHM9CisgICAgZm9yIGFjX2YKKyAgICBkbworICAgICAgY2FzZSAkYWNfZiBpbgorICAgICAgLSkgYWNfZj0iJGFjX3RtcC9zdGRpbiI7OworICAgICAgKikgIyBMb29rIGZvciB0aGUgZmlsZSBmaXJzdCBpbiB0aGUgYnVpbGQgdHJlZSwgdGhlbiBpbiB0aGUgc291cmNlIHRyZWUKKwkgIyAoaWYgdGhlIHBhdGggaXMgbm90IGFic29sdXRlKS4gIFRoZSBhYnNvbHV0ZSBwYXRoIGNhbm5vdCBiZSBET1Mtc3R5bGUsCisJICMgYmVjYXVzZSAkYWNfZiBjYW5ub3QgY29udGFpbiBgOicuCisJIHRlc3QgLWYgIiRhY19mIiB8fAorCSAgIGNhc2UgJGFjX2YgaW4KKwkgICBbXFwvJF0qKSBmYWxzZTs7CisJICAgKikgdGVzdCAtZiAiJHNyY2Rpci8kYWNfZiIgJiYgYWNfZj0iJHNyY2Rpci8kYWNfZiI7OworCSAgIGVzYWMgfHwKKwkgICBhc19mbl9lcnJvciAxICJjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiBcYCRhY19mJyIgIiRMSU5FTk8iIDU7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfZiBpbiAqXCcqKSBhY19mPWAkYXNfZWNobyAiJGFjX2YiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgZXNhYworICAgICAgYXNfZm5fYXBwZW5kIGFjX2ZpbGVfaW5wdXRzICIgJyRhY19mJyIKKyAgICBkb25lCisKKyAgICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAorICAgICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKKyAgICAjICAgIC8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZy5zdGF0dXMuICAqLworICAgIGNvbmZpZ3VyZV9pbnB1dD0nR2VuZXJhdGVkIGZyb20gJ2AKKwkgICRhc19lY2hvICIkKiIgfCBzZWQgJ3N8XlteOl0qL3x8O3N8OlteOl0qL3wsIHxnJworCWAnIGJ5IGNvbmZpZ3VyZS4nCisgICAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorICAgICAgY29uZmlndXJlX2lucHV0PSIkYWNfZmlsZS4gICRjb25maWd1cmVfaW5wdXQiCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nICRhY19maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQorICAgIGZpCisgICAgIyBOZXV0cmFsaXplIHNwZWNpYWwgY2hhcmFjdGVycyBpbnRlcnByZXRlZCBieSBzZWQgaW4gcmVwbGFjZW1lbnQgc3RyaW5ncy4KKyAgICBjYXNlICRjb25maWd1cmVfaW5wdXQgaW4gIygKKyAgICAqXCYqIHwgKlx8KiB8ICpcXCogKQorICAgICAgIGFjX3NlZF9jb25mX2lucHV0PWAkYXNfZWNobyAiJGNvbmZpZ3VyZV9pbnB1dCIgfAorICAgICAgIHNlZCAncy9bXFxcXCZ8XS9cXFxcJi9nJ2A7OyAjKAorICAgICopIGFjX3NlZF9jb25mX2lucHV0PSRjb25maWd1cmVfaW5wdXQ7OworICAgIGVzYWMKKworICAgIGNhc2UgJGFjX3RhZyBpbgorICAgICo6LToqIHwgKjotKSBjYXQgPiIkYWNfdG1wL3N0ZGluIiBcCisgICAgICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUgOzsKKyAgICBlc2FjCisgICAgOzsKICAgZXNhYwogCi0gICMgQ29tcHV0ZSBAc3JjZGlyQCwgQHRvcF9zcmNkaXJALCBhbmQgQElOU1RBTExAIGZvciBzdWJkaXJlY3Rvcmllcy4KLSAgYWNfZGlyPWAoZGlybmFtZSAiJGFjX2ZpbGUiKSAyPi9kZXYvbnVsbCB8fAorICBhY19kaXI9YCRhc19kaXJuYW1lIC0tICIkYWNfZmlsZSIgfHwKICRhc19leHByIFgiJGFjX2ZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCiAJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCiAJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgXAotCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkYWNfZmlsZSIgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KLSAgCSAgcy8uKi8uLzsgcSdgCi0gIHsgaWYgJGFzX21rZGlyX3A7IHRoZW4KLSAgICBta2RpciAtcCAiJGFjX2RpciIKLSAgZWxzZQotICAgIGFzX2Rpcj0iJGFjX2RpciIKLSAgICBhc19kaXJzPQotICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCi0gICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgotICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8Ci0kYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAotCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkYXNfZGlyIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKLSAgICBkb25lCi0gICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKLSAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KLQorCSBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJGFjX2ZpbGUiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICBhc19kaXI9IiRhY19kaXIiOyBhc19mbl9ta2Rpcl9wCiAgIGFjX2J1aWxkZGlyPS4KIAotaWYgdGVzdCAiJGFjX2RpciIgIT0gLjsgdGhlbgotICBhY19kaXJfc3VmZml4PS9gZWNobyAiJGFjX2RpciIgfCBzZWQgJ3MsXlwuW1xcL10sLCdgCi0gICMgQSAiLi4vIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCi0gIGFjX3RvcF9idWlsZGRpcj1gZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzLC9bXlxcL10qLC4uLyxnJ2AKLWVsc2UKLSAgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyPQotZmkKK2Nhc2UgIiRhY19kaXIiIGluCisuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyopCisgIGFjX2Rpcl9zdWZmaXg9L2AkYXNfZWNobyAiJGFjX2RpciIgfCBzZWQgJ3N8XlwuW1xcL118fCdgCisgICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKyAgYWNfdG9wX2J1aWxkZGlyX3N1Yj1gJGFzX2VjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAnc3wvW15cXC9dKnwvLi58ZztzfC98fCdgCisgIGNhc2UgJGFjX3RvcF9idWlsZGRpcl9zdWIgaW4KKyAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworICAqKSAgYWNfdG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1Yi8gOzsKKyAgZXNhYyA7OworZXNhYworYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfcHdkCithY19hYnNfYnVpbGRkaXI9JGFjX3B3ZCRhY19kaXJfc3VmZml4CisjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorYWNfdG9wX2J1aWxkZGlyPSRhY190b3BfYnVpbGRfcHJlZml4CiAKIGNhc2UgJHNyY2RpciBpbgotICAuKSAgIyBObyAtLXNyY2RpciBvcHRpb24uICBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisgIC4pICAjIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KICAgICBhY19zcmNkaXI9LgotICAgIGlmIHRlc3QgLXogIiRhY190b3BfYnVpbGRkaXIiOyB0aGVuCi0gICAgICAgYWNfdG9wX3NyY2Rpcj0uCi0gICAgZWxzZQotICAgICAgIGFjX3RvcF9zcmNkaXI9YGVjaG8gJGFjX3RvcF9idWlsZGRpciB8IHNlZCAncywvJCwsJ2AKLSAgICBmaSA7OwotICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIHBhdGguCisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyX3N1YgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBuYW1lLgogICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7Ci0gICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7Ci0gICopICMgUmVsYXRpdmUgcGF0aC4KLSAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIkYWNfZGlyX3N1ZmZpeAotICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIgOzsKKyAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7CisgICopICMgUmVsYXRpdmUgbmFtZS4KKyAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QvJHNyY2RpciA7OwogZXNhYworYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAogCi0jIERvIG5vdCB1c2UgYGNkIGZvbyAmJiBwd2RgIHRvIGNvbXB1dGUgYWJzb2x1dGUgcGF0aHMsIGJlY2F1c2UKLSMgdGhlIGRpcmVjdG9yaWVzIG1heSBub3QgZXhpc3QuCi1jYXNlIGBwd2RgIGluCi0uKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKLSopCi0gIGNhc2UgIiRhY19kaXIiIGluCi0gIC4pIGFjX2Fic19idWlsZGRpcj1gcHdkYDs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7Ci0gICopIGFjX2Fic19idWlsZGRpcj1gcHdkYC8iJGFjX2RpciI7OwotICBlc2FjOzsKLWVzYWMKLWNhc2UgJGFjX2Fic19idWlsZGRpciBpbgotLikgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKLSopCi0gIGNhc2UgJHthY190b3BfYnVpbGRkaXJ9LiBpbgotICAuKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXI7OwotICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7Ci0gICopIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpci8ke2FjX3RvcF9idWlsZGRpcn0uOzsKLSAgZXNhYzs7Ci1lc2FjCi1jYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KLS4pIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7Ci0qKQotICBjYXNlICRhY19zcmNkaXIgaW4KLSAgLikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OwotICAqKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3NyY2Rpcjs7Ci0gIGVzYWM7OwotZXNhYwotY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCi0uKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7Ci0qKQotICBjYXNlICRhY190b3Bfc3JjZGlyIGluCi0gIC4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OwotICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKLSAgKikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfdG9wX3NyY2Rpcjs7Ci0gIGVzYWM7OwotZXNhYwogCisgIGNhc2UgJGFjX21vZGUgaW4KKyAgOkYpCisgICMKKyAgIyBDT05GSUdfRklMRQorICAjCiAKICAgY2FzZSAkSU5TVEFMTCBpbgogICBbXFwvJF0qIHwgPzpbXFwvXSogKSBhY19JTlNUQUxMPSRJTlNUQUxMIDs7Ci0gICopIGFjX0lOU1RBTEw9JGFjX3RvcF9idWlsZGRpciRJTlNUQUxMIDs7CisgICopIGFjX0lOU1RBTEw9JGFjX3RvcF9idWlsZF9wcmVmaXgkSU5TVEFMTCA7OwogICBlc2FjCi0KLSAgIyBMZXQncyBzdGlsbCBwcmV0ZW5kIGl0IGlzIGBjb25maWd1cmUnIHdoaWNoIGluc3RhbnRpYXRlcyAoaS5lLiwgZG9uJ3QKLSAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byByZWFkOgotICAjICAgIC8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZy5zdGF0dXMuICAqLwotICBpZiB0ZXN0IHgiJGFjX2ZpbGUiID0geC07IHRoZW4KLSAgICBjb25maWd1cmVfaW5wdXQ9Ci0gIGVsc2UKLSAgICBjb25maWd1cmVfaW5wdXQ9IiRhY19maWxlLiAgIgotICBmaQotICBjb25maWd1cmVfaW5wdXQ9JGNvbmZpZ3VyZV9pbnB1dCJHZW5lcmF0ZWQgZnJvbSBgZWNobyAkYWNfZmlsZV9pbiB8Ci0JCQkJICAgICBzZWQgJ3MsLiovLCwnYCBieSBjb25maWd1cmUuIgotCi0gICMgRmlyc3QgbG9vayBmb3IgdGhlIGlucHV0IGZpbGVzIGluIHRoZSBidWlsZCB0cmVlLCBvdGhlcndpc2UgaW4gdGhlCi0gICMgc3JjIHRyZWUuCi0gIGFjX2ZpbGVfaW5wdXRzPWBJRlM9OgotICAgIGZvciBmIGluICRhY19maWxlX2luOyBkbwotICAgICAgY2FzZSAkZiBpbgotICAgICAgLSkgZWNobyAkdG1wL3N0ZGluIDs7Ci0gICAgICBbXFwvJF0qKQotCSAjIEFic29sdXRlIChjYW4ndCBiZSBET1Mtc3R5bGUsIGFzIElGUz06KQotCSB0ZXN0IC1mICIkZiIgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLQkgZWNobyAiJGYiOzsKLSAgICAgICopICMgUmVsYXRpdmUKLQkgaWYgdGVzdCAtZiAiJGYiOyB0aGVuCi0JICAgIyBCdWlsZCB0cmVlCi0JICAgZWNobyAiJGYiCi0JIGVsaWYgdGVzdCAtZiAiJHNyY2Rpci8kZiI7IHRoZW4KLQkgICAjIFNvdXJjZSB0cmVlCi0JICAgZWNobyAiJHNyY2Rpci8kZiIKLQkgZWxzZQotCSAgICMgL2Rldi9udWxsIHRyZWUKLQkgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotCSBmaTs7Ci0gICAgICBlc2FjCi0gICAgZG9uZWAgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9Ci0KLSAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRhY19maWxlIiA+JjUKLWVjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9Ci0gICAgcm0gLWYgIiRhY19maWxlIgotICBmaQorICBhY19NS0RJUl9QPSRNS0RJUl9QCisgIGNhc2UgJE1LRElSX1AgaW4KKyAgW1xcLyRdKiB8ID86W1xcL10qICkgOzsKKyAgKi8qKSBhY19NS0RJUl9QPSRhY190b3BfYnVpbGRfcHJlZml4JE1LRElSX1AgOzsKKyAgZXNhYwogX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgotICBzZWQgIiRhY192cHN1YgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIElmIHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBrbm93IGFib3V0IGRhdGFyb290ZGlyLCBleHBhbmQgaXQuCisjIEZJWE1FOiBUaGlzIGhhY2sgc2hvdWxkIGJlIHJlbW92ZWQgYSBmZXcgeWVhcnMgYWZ0ZXIgMi42MC4KK2FjX2RhdGFyb290ZGlyX2hhY2s9OyBhY19kYXRhcm9vdGRpcl9zZWVuPQorYWNfc2VkX2RhdGFyb290PScKKy9kYXRhcm9vdGRpci8geworICBwCisgIHEKK30KKy9AZGF0YWRpckAvcAorL0Bkb2NkaXJAL3AKKy9AaW5mb2RpckAvcAorL0Bsb2NhbGVkaXJAL3AKKy9AbWFuZGlyQC9wJworY2FzZSBgZXZhbCAic2VkIC1uIFwiXCRhY19zZWRfZGF0YXJvb3RcIiAkYWNfZmlsZV9pbnB1dHMiYCBpbgorKmRhdGFyb290ZGlyKikgYWNfZGF0YXJvb3RkaXJfc2Vlbj15ZXM7OworKkBkYXRhZGlyQCp8KkBkb2NkaXJAKnwqQGluZm9kaXJAKnwqQGxvY2FsZWRpckAqfCpAbWFuZGlyQCopCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlX2lucHV0cyBzZWVtcyB0byBpZ25vcmUgdGhlIC0tZGF0YXJvb3RkaXIgc2V0dGluZyIgPiYyO30KK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGFjX2RhdGFyb290ZGlyX2hhY2s9JworICBzJkBkYXRhZGlyQCYkZGF0YWRpciZnCisgIHMmQGRvY2RpckAmJGRvY2RpciZnCisgIHMmQGluZm9kaXJAJiRpbmZvZGlyJmcKKyAgcyZAbG9jYWxlZGlyQCYkbG9jYWxlZGlyJmcKKyAgcyZAbWFuZGlyQCYkbWFuZGlyJmcKKyAgcyZcXFwke2RhdGFyb290ZGlyfSYkZGF0YXJvb3RkaXImZycgOzsKK2VzYWMKK19BQ0VPRgorCisjIE5ldXRyYWxpemUgVlBBVEggd2hlbiBgJHNyY2RpcicgPSBgLicuCisjIFNoZWxsIGNvZGUgaW4gY29uZmlndXJlLmFjIG1pZ2h0IHNldCBleHRyYXN1Yi4KKyMgRklYTUU6IGRvIHdlIHJlYWxseSB3YW50IHRvIG1haW50YWluIHRoaXMgZmVhdHVyZT8KK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorYWNfc2VkX2V4dHJhPSIkYWNfdnBzdWIKICRleHRyYXN1YgogX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKIDp0CiAvQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiCi1zLEBjb25maWd1cmVfaW5wdXRALCRjb25maWd1cmVfaW5wdXQsO3QgdAotcyxAc3JjZGlyQCwkYWNfc3JjZGlyLDt0IHQKLXMsQGFic19zcmNkaXJALCRhY19hYnNfc3JjZGlyLDt0IHQKLXMsQHRvcF9zcmNkaXJALCRhY190b3Bfc3JjZGlyLDt0IHQKLXMsQGFic190b3Bfc3JjZGlyQCwkYWNfYWJzX3RvcF9zcmNkaXIsO3QgdAotcyxAYnVpbGRkaXJALCRhY19idWlsZGRpciw7dCB0Ci1zLEBhYnNfYnVpbGRkaXJALCRhY19hYnNfYnVpbGRkaXIsO3QgdAotcyxAdG9wX2J1aWxkZGlyQCwkYWNfdG9wX2J1aWxkZGlyLDt0IHQKLXMsQGFic190b3BfYnVpbGRkaXJALCRhY19hYnNfdG9wX2J1aWxkZGlyLDt0IHQKLXMsQElOU1RBTExALCRhY19JTlNUQUxMLDt0IHQKLSIgJGFjX2ZpbGVfaW5wdXRzIHwgKGV2YWwgIiRhY19zZWRfY21kcyIpID4kdG1wL291dAotICBybSAtZiAkdG1wL3N0ZGluCi0gIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KLSAgICBtdiAkdG1wL291dCAkYWNfZmlsZQotICBlbHNlCi0gICAgY2F0ICR0bXAvb3V0Ci0gICAgcm0gLWYgJHRtcC9vdXQKLSAgZmkKK3N8QGNvbmZpZ3VyZV9pbnB1dEB8JGFjX3NlZF9jb25mX2lucHV0fDt0IHQKK3MmQHRvcF9idWlsZGRpckAmJGFjX3RvcF9idWlsZGRpcl9zdWImO3QgdAorcyZAdG9wX2J1aWxkX3ByZWZpeEAmJGFjX3RvcF9idWlsZF9wcmVmaXgmO3QgdAorcyZAc3JjZGlyQCYkYWNfc3JjZGlyJjt0IHQKK3MmQGFic19zcmNkaXJAJiRhY19hYnNfc3JjZGlyJjt0IHQKK3MmQHRvcF9zcmNkaXJAJiRhY190b3Bfc3JjZGlyJjt0IHQKK3MmQGFic190b3Bfc3JjZGlyQCYkYWNfYWJzX3RvcF9zcmNkaXImO3QgdAorcyZAYnVpbGRkaXJAJiRhY19idWlsZGRpciY7dCB0CitzJkBhYnNfYnVpbGRkaXJAJiRhY19hYnNfYnVpbGRkaXImO3QgdAorcyZAYWJzX3RvcF9idWlsZGRpckAmJGFjX2Fic190b3BfYnVpbGRkaXImO3QgdAorcyZASU5TVEFMTEAmJGFjX0lOU1RBTEwmO3QgdAorcyZATUtESVJfUEAmJGFjX01LRElSX1AmO3QgdAorJGFjX2RhdGFyb290ZGlyX2hhY2sKKyIKK2V2YWwgc2VkIFwiXCRhY19zZWRfZXh0cmFcIiAiJGFjX2ZpbGVfaW5wdXRzIiB8ICRBV0sgLWYgIiRhY190bXAvc3Vicy5hd2siIFwKKyAgPiRhY190bXAvb3V0IHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQogCi0gICMgUnVuIHRoZSBjb21tYW5kcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuCit0ZXN0IC16ICIkYWNfZGF0YXJvb3RkaXJfaGFjayRhY19kYXRhcm9vdGRpcl9zZWVuIiAmJgorICB7IGFjX291dD1gc2VkIC1uICcvXCR7ZGF0YXJvb3RkaXJ9L3AnICIkYWNfdG1wL291dCJgOyB0ZXN0IC1uICIkYWNfb3V0IjsgfSAmJgorICB7IGFjX291dD1gc2VkIC1uICcvXlsJIF0qZGF0YXJvb3RkaXJbCSBdKjoqPS9wJyBcCisgICAgICAiJGFjX3RtcC9vdXQiYDsgdGVzdCAteiAiJGFjX291dCI7IH0gJiYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkYWNfZmlsZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgXGBkYXRhcm9vdGRpcicKK3doaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgXGBkYXRhcm9vdGRpcicKK3doaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZCIgPiYyO30KKworICBybSAtZiAiJGFjX3RtcC9zdGRpbiIKICAgY2FzZSAkYWNfZmlsZSBpbgotICAgIHRlc3RzL2Jpc29uICkgY2htb2QgK3ggdGVzdHMvYmlzb24gOzsKLSAgZXNhYwotZG9uZQotX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKLQotIwotIyBDT05GSUdfSEVBREVSIHNlY3Rpb24uCi0jCi0KLSMgVGhlc2Ugc2VkIGNvbW1hbmRzIGFyZSBwYXNzZWQgdG8gc2VkIGFzICJBIE5BTUUgQiBOQU1FIEMgVkFMVUUgRCIsIHdoZXJlCi0jIE5BTUUgaXMgdGhlIGNwcCBtYWNybyBiZWluZyBkZWZpbmVkIGFuZCBWQUxVRSBpcyB0aGUgdmFsdWUgaXQgaXMgYmVpbmcgZ2l2ZW4uCi0jCi0jIGFjX2Qgc2V0cyB0aGUgdmFsdWUgaW4gIiNkZWZpbmUgTkFNRSBWQUxVRSIgbGluZXMuCi1hY19kQT0ncyxeXChbCSBdKlwpI1woWwkgXSpkZWZpbmVbCSBdWwkgXSpcKScKLWFjX2RCPSdbCSBdLiokLFwxI1wyJwotYWNfZEM9JyAnCi1hY19kRD0nLDt0JwotIyBhY191IHR1cm5zICIjdW5kZWYgTkFNRSIgd2l0aG91dCB0cmFpbGluZyBibGFua3MgaW50byAiI2RlZmluZSBOQU1FIFZBTFVFIi4KLWFjX3VBPSdzLF5cKFsJIF0qXCkjXChbCSBdKlwpdW5kZWZcKFsJIF1bCSBdKlwpJwotYWNfdUI9JyQsXDEjXDJkZWZpbmVcMycKLWFjX3VDPScgJwotYWNfdUQ9Jyw7dCcKLQotZm9yIGFjX2ZpbGUgaW4gOiAkQ09ORklHX0hFQURFUlM7IGRvIHRlc3QgIngkYWNfZmlsZSIgPSB4OiAmJiBjb250aW51ZQotICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iLCBkZWZhdWx0aW5nIGluZmlsZT0ib3V0ZmlsZS5pbiIuCi0gIGNhc2UgJGFjX2ZpbGUgaW4KLSAgLSB8ICo6LSB8ICo6LToqICkgIyBpbnB1dCBmcm9tIHN0ZGluCi0JY2F0ID4kdG1wL3N0ZGluCi0JYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKLQlhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OwotICAqOiogKSBhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAotCWFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7Ci0gICogKSAgIGFjX2ZpbGVfaW49JGFjX2ZpbGUuaW4gOzsKLSAgZXNhYwotCi0gIHRlc3QgeCIkYWNfZmlsZSIgIT0geC0gJiYgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQotZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZmlsZSIgPiY2O30KLQotICAjIEZpcnN0IGxvb2sgZm9yIHRoZSBpbnB1dCBmaWxlcyBpbiB0aGUgYnVpbGQgdHJlZSwgb3RoZXJ3aXNlIGluIHRoZQotICAjIHNyYyB0cmVlLgotICBhY19maWxlX2lucHV0cz1gSUZTPToKLSAgICBmb3IgZiBpbiAkYWNfZmlsZV9pbjsgZG8KLSAgICAgIGNhc2UgJGYgaW4KLSAgICAgIC0pIGVjaG8gJHRtcC9zdGRpbiA7OwotICAgICAgW1xcLyRdKikKLQkgIyBBYnNvbHV0ZSAoY2FuJ3QgYmUgRE9TLXN0eWxlLCBhcyBJRlM9OikKLQkgdGVzdCAtZiAiJGYiIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0JICMgRG8gcXVvdGUgJGYsIHRvIHByZXZlbnQgRE9TIHBhdGhzIGZyb20gYmVpbmcgSUZTJ2QuCi0JIGVjaG8gIiRmIjs7Ci0gICAgICAqKSAjIFJlbGF0aXZlCi0JIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgotCSAgICMgQnVpbGQgdHJlZQotCSAgIGVjaG8gIiRmIgotCSBlbGlmIHRlc3QgLWYgIiRzcmNkaXIvJGYiOyB0aGVuCi0JICAgIyBTb3VyY2UgdHJlZQotCSAgIGVjaG8gIiRzcmNkaXIvJGYiCi0JIGVsc2UKLQkgICAjIC9kZXYvbnVsbCB0cmVlCi0JICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLQkgZmk7OwotICAgICAgZXNhYwotICAgIGRvbmVgIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQotICAjIFJlbW92ZSB0aGUgdHJhaWxpbmcgc3BhY2VzLgotICBzZWQgJ3MvWwkgXSokLy8nICRhY19maWxlX2lucHV0cyA+JHRtcC9pbgotCi1fQUNFT0YKLQotIyBUcmFuc2Zvcm0gY29uZmRlZnMuaCBpbnRvIHR3byBzZWQgc2NyaXB0cywgYGNvbmZ0ZXN0LmRlZmluZXMnIGFuZAotIyBgY29uZnRlc3QudW5kZWZzJywgdGhhdCBzdWJzdGl0dXRlcyB0aGUgcHJvcGVyIHZhbHVlcyBpbnRvCi0jIGNvbmZpZy5oLmluIHRvIHByb2R1Y2UgY29uZmlnLmguICBUaGUgZmlyc3QgaGFuZGxlcyBgI2RlZmluZScKLSMgdGVtcGxhdGVzLCBhbmQgdGhlIHNlY29uZCBgI3VuZGVmJyB0ZW1wbGF0ZXMuCi0jIEFuZCBmaXJzdDogUHJvdGVjdCBhZ2FpbnN0IGJlaW5nIG9uIHRoZSByaWdodCBzaWRlIG9mIGEgc2VkIHN1YnN0IGluCi0jIGNvbmZpZy5zdGF0dXMuICBQcm90ZWN0IGFnYWluc3QgYmVpbmcgaW4gYW4gdW5xdW90ZWQgaGVyZSBkb2N1bWVudAotIyBpbiBjb25maWcuc3RhdHVzLgotcm0gLWYgY29uZnRlc3QuZGVmaW5lcyBjb25mdGVzdC51bmRlZnMKLSMgVXNpbmcgYSBoZXJlIGRvY3VtZW50IGluc3RlYWQgb2YgYSBzdHJpbmcgcmVkdWNlcyB0aGUgcXVvdGluZyBuaWdodG1hcmUuCi0jIFB1dHRpbmcgY29tbWVudHMgaW4gc2VkIHNjcmlwdHMgaXMgbm90IHBvcnRhYmxlLgotIwotIyBgZW5kJyBpcyB1c2VkIHRvIGF2b2lkIHRoYXQgdGhlIHNlY29uZCBtYWluIHNlZCBjb21tYW5kIChtZWFudCBmb3IKLSMgMC1hcnkgQ1BQIG1hY3JvcykgYXBwbGllcyB0byBuLWFyeSBtYWNybyBkZWZpbml0aW9ucy4KLSMgU2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIGZvciBgY2xlYXInLgotY2F0ID5jb25mZGVmMnNlZC5zZWQgPDxcX0FDRU9GCi1zL1tcXCYsXS9cXCYvZwotcyxbXFwkYF0sXFwmLGcKLXQgY2xlYXIKLTogY2xlYXIKLXMsXlsJIF0qI1sJIF0qZGVmaW5lWwkgXVsJIF0qXChbXgkgKF1bXgkgKF0qXClcKChbXildKilcKVsJIF0qXCguKlwpJCwke2FjX2RBfVwxJHthY19kQn1cMVwyJHthY19kQ31cMyR7YWNfZER9LGdwCi10IGVuZAotcyxeWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSpcKFteCSBdW14JIF0qXClbCSBdKlwoLipcKSQsJHthY19kQX1cMSR7YWNfZEJ9XDEke2FjX2RDfVwyJHthY19kRH0sZ3AKLTogZW5kCi1fQUNFT0YKLSMgSWYgc29tZSBtYWNyb3Mgd2VyZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyB0aGVyZSBtaWdodCBiZSBzZXZlcmFsIHRpbWVzCi0jIHRoZSBzYW1lICNkZWZpbmVzLCB3aGljaCBpcyB1c2VsZXNzLiAgTmV2ZXJ0aGVsZXNzLCB3ZSBtYXkgbm90IHdhbnQgdG8KLSMgc29ydCB0aGVtLCBzaW5jZSB3ZSB3YW50IHRoZSAqbGFzdCogQUMtREVGSU5FIHRvIGJlIGhvbm9yZWQuCi11bmlxIGNvbmZkZWZzLmggfCBzZWQgLW4gLWYgY29uZmRlZjJzZWQuc2VkID5jb25mdGVzdC5kZWZpbmVzCi1zZWQgJ3MvYWNfZC9hY191L2cnIGNvbmZ0ZXN0LmRlZmluZXMgPmNvbmZ0ZXN0LnVuZGVmcwotcm0gLWYgY29uZmRlZjJzZWQuc2VkCi0KLSMgVGhpcyBzZWQgY29tbWFuZCByZXBsYWNlcyAjdW5kZWYgd2l0aCBjb21tZW50cy4gIFRoaXMgaXMgbmVjZXNzYXJ5LCBmb3IKLSMgZXhhbXBsZSwgaW4gdGhlIGNhc2Ugb2YgX1BPU0lYX1NPVVJDRSwgd2hpY2ggaXMgcHJlZGVmaW5lZCBhbmQgcmVxdWlyZWQKLSMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgotY2F0ID4+Y29uZnRlc3QudW5kZWZzIDw8XF9BQ0VPRgotcyxeWwkgXSojWwkgXSp1bmRlZlsJIF1bCSBdKlthLXpBLVpfXVthLXpBLVpfMC05XSosLyogJiAqLywKLV9BQ0VPRgotCi0jIEJyZWFrIHVwIGNvbmZ0ZXN0LmRlZmluZXMgYmVjYXVzZSBzb21lIHNoZWxscyBoYXZlIGEgbGltaXQgb24gdGhlIHNpemUKLSMgb2YgaGVyZSBkb2N1bWVudHMsIGFuZCBvbGQgc2VkcyBoYXZlIHNtYWxsIGxpbWl0cyB0b28gKDEwMCBjbWRzKS4KLWVjaG8gJyAgIyBIYW5kbGUgYWxsIHRoZSAjZGVmaW5lIHRlbXBsYXRlcyBvbmx5IGlmIG5lY2Vzc2FyeS4nID4+JENPTkZJR19TVEFUVVMKLWVjaG8gJyAgaWYgZ3JlcCAiXlsJIF0qI1sJIF0qZGVmaW5lIiAkdG1wL2luID4vZGV2L251bGw7IHRoZW4nID4+JENPTkZJR19TVEFUVVMKLWVjaG8gJyAgIyBJZiB0aGVyZSBhcmUgbm8gZGVmaW5lcywgd2UgbWF5IGhhdmUgYW4gZW1wdHkgaWYvZmknID4+JENPTkZJR19TVEFUVVMKLWVjaG8gJyAgOicgPj4kQ09ORklHX1NUQVRVUwotcm0gLWYgY29uZnRlc3QudGFpbAotd2hpbGUgZ3JlcCAuIGNvbmZ0ZXN0LmRlZmluZXMgPi9kZXYvbnVsbAotZG8KLSAgIyBXcml0ZSBhIGxpbWl0ZWQtc2l6ZSBoZXJlIGRvY3VtZW50IHRvICR0bXAvZGVmaW5lcy5zZWQuCi0gIGVjaG8gJyAgY2F0ID4kdG1wL2RlZmluZXMuc2VkIDw8Q0VPRicgPj4kQ09ORklHX1NUQVRVUwotICAjIFNwZWVkIHVwOiBkb24ndCBjb25zaWRlciB0aGUgbm9uIGAjZGVmaW5lJyBsaW5lcy4KLSAgZWNobyAnL15bCSBdKiNbCSBdKmRlZmluZS8hYicgPj4kQ09ORklHX1NUQVRVUwotICAjIFdvcmsgYXJvdW5kIHRoZSBmb3JnZXQtdG8tcmVzZXQtdGhlLWZsYWcgYnVnLgotICBlY2hvICd0IGNscicgPj4kQ09ORklHX1NUQVRVUwotICBlY2hvICc6IGNscicgPj4kQ09ORklHX1NUQVRVUwotICBzZWQgJHthY19tYXhfaGVyZV9saW5lc31xIGNvbmZ0ZXN0LmRlZmluZXMgPj4kQ09ORklHX1NUQVRVUwotICBlY2hvICdDRU9GCi0gIHNlZCAtZiAkdG1wL2RlZmluZXMuc2VkICR0bXAvaW4gPiR0bXAvb3V0Ci0gIHJtIC1mICR0bXAvaW4KLSAgbXYgJHRtcC9vdXQgJHRtcC9pbgotJyA+PiRDT05GSUdfU1RBVFVTCi0gIHNlZCAxLCR7YWNfbWF4X2hlcmVfbGluZXN9ZCBjb25mdGVzdC5kZWZpbmVzID5jb25mdGVzdC50YWlsCi0gIHJtIC1mIGNvbmZ0ZXN0LmRlZmluZXMKLSAgbXYgY29uZnRlc3QudGFpbCBjb25mdGVzdC5kZWZpbmVzCi1kb25lCi1ybSAtZiBjb25mdGVzdC5kZWZpbmVzCi1lY2hvICcgIGZpICMgZ3JlcCcgPj4kQ09ORklHX1NUQVRVUwotZWNobyA+PiRDT05GSUdfU1RBVFVTCi0KLSMgQnJlYWsgdXAgY29uZnRlc3QudW5kZWZzIGJlY2F1c2Ugc29tZSBzaGVsbHMgaGF2ZSBhIGxpbWl0IG9uIHRoZSBzaXplCi0jIG9mIGhlcmUgZG9jdW1lbnRzLCBhbmQgb2xkIHNlZHMgaGF2ZSBzbWFsbCBsaW1pdHMgdG9vICgxMDAgY21kcykuCi1lY2hvICcgICMgSGFuZGxlIGFsbCB0aGUgI3VuZGVmIHRlbXBsYXRlcycgPj4kQ09ORklHX1NUQVRVUwotcm0gLWYgY29uZnRlc3QudGFpbAotd2hpbGUgZ3JlcCAuIGNvbmZ0ZXN0LnVuZGVmcyA+L2Rldi9udWxsCi1kbwotICAjIFdyaXRlIGEgbGltaXRlZC1zaXplIGhlcmUgZG9jdW1lbnQgdG8gJHRtcC91bmRlZnMuc2VkLgotICBlY2hvICcgIGNhdCA+JHRtcC91bmRlZnMuc2VkIDw8Q0VPRicgPj4kQ09ORklHX1NUQVRVUwotICAjIFNwZWVkIHVwOiBkb24ndCBjb25zaWRlciB0aGUgbm9uIGAjdW5kZWYnCi0gIGVjaG8gJy9eWwkgXSojWwkgXSp1bmRlZi8hYicgPj4kQ09ORklHX1NUQVRVUwotICAjIFdvcmsgYXJvdW5kIHRoZSBmb3JnZXQtdG8tcmVzZXQtdGhlLWZsYWcgYnVnLgotICBlY2hvICd0IGNscicgPj4kQ09ORklHX1NUQVRVUwotICBlY2hvICc6IGNscicgPj4kQ09ORklHX1NUQVRVUwotICBzZWQgJHthY19tYXhfaGVyZV9saW5lc31xIGNvbmZ0ZXN0LnVuZGVmcyA+PiRDT05GSUdfU1RBVFVTCi0gIGVjaG8gJ0NFT0YKLSAgc2VkIC1mICR0bXAvdW5kZWZzLnNlZCAkdG1wL2luID4kdG1wL291dAotICBybSAtZiAkdG1wL2luCi0gIG12ICR0bXAvb3V0ICR0bXAvaW4KLScgPj4kQ09ORklHX1NUQVRVUwotICBzZWQgMSwke2FjX21heF9oZXJlX2xpbmVzfWQgY29uZnRlc3QudW5kZWZzID5jb25mdGVzdC50YWlsCi0gIHJtIC1mIGNvbmZ0ZXN0LnVuZGVmcwotICBtdiBjb25mdGVzdC50YWlsIGNvbmZ0ZXN0LnVuZGVmcwotZG9uZQotcm0gLWYgY29uZnRlc3QudW5kZWZzCi0KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgotICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAotICAjIHVzZSAkYXNfbWUpLCBwZW9wbGUgd291bGQgYmUgc3VycHJpc2VkIHRvIHJlYWQ6Ci0gICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCi0gIGlmIHRlc3QgeCIkYWNfZmlsZSIgPSB4LTsgdGhlbgotICAgIGVjaG8gIi8qIEdlbmVyYXRlZCBieSBjb25maWd1cmUuICAqLyIgPiR0bXAvY29uZmlnLmgKLSAgZWxzZQotICAgIGVjaG8gIi8qICRhY19maWxlLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gICovIiA+JHRtcC9jb25maWcuaAotICBmaQotICBjYXQgJHRtcC9pbiA+PiR0bXAvY29uZmlnLmgKLSAgcm0gLWYgJHRtcC9pbgorICAtKSBjYXQgIiRhY190bXAvb3V0IiAmJiBybSAtZiAiJGFjX3RtcC9vdXQiOzsKKyAgKikgcm0gLWYgIiRhY19maWxlIiAmJiBtdiAiJGFjX3RtcC9vdXQiICIkYWNfZmlsZSI7OworICBlc2FjIFwKKyAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisgOzsKKyAgOkgpCisgICMKKyAgIyBDT05GSUdfSEVBREVSCisgICMKICAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgotICAgIGlmIGRpZmYgJGFjX2ZpbGUgJHRtcC9jb25maWcuaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY1Ci1lY2hvICIkYXNfbWU6ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY2O30KKyAgICB7CisgICAgICAkYXNfZWNobyAiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iIFwKKyAgICAgICYmIGV2YWwgJyRBV0sgLWYgIiRhY190bXAvZGVmaW5lcy5hd2siJyAiJGFjX2ZpbGVfaW5wdXRzIgorICAgIH0gPiIkYWNfdG1wL2NvbmZpZy5oIiBcCisgICAgICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyAgICBpZiBkaWZmICIkYWNfZmlsZSIgIiRhY190bXAvY29uZmlnLmgiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjY7fQogICAgIGVsc2UKLSAgICAgIGFjX2Rpcj1gKGRpcm5hbWUgIiRhY19maWxlIikgMj4vZGV2L251bGwgfHwKLSRhc19leHByIFgiJGFjX2ZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgXAotCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkYWNfZmlsZSIgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KLSAgCSAgcy8uKi8uLzsgcSdgCi0gICAgICB7IGlmICRhc19ta2Rpcl9wOyB0aGVuCi0gICAgbWtkaXIgLXAgIiRhY19kaXIiCi0gIGVsc2UKLSAgICBhc19kaXI9IiRhY19kaXIiCi0gICAgYXNfZGlycz0KLSAgICB3aGlsZSB0ZXN0ICEgLWQgIiRhc19kaXIiOyBkbwotICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKLSAgICAgIGFzX2Rpcj1gKGRpcm5hbWUgIiRhc19kaXIiKSAyPi9kZXYvbnVsbCB8fAotJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgiJGFzX2RpciIgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KLSAgCSAgcy8uKi8uLzsgcSdgCi0gICAgZG9uZQotICAgIHRlc3QgISAtbiAiJGFzX2RpcnMiIHx8IG1rZGlyICRhc19kaXJzCi0gIGZpIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IFwiJGFjX2RpclwiIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IFwiJGFjX2RpclwiIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9Ci0KLSAgICAgIHJtIC1mICRhY19maWxlCi0gICAgICBtdiAkdG1wL2NvbmZpZy5oICRhY19maWxlCisgICAgICBybSAtZiAiJGFjX2ZpbGUiCisgICAgICBtdiAiJGFjX3RtcC9jb25maWcuaCIgIiRhY19maWxlIiBcCisJfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CiAgICAgZmkKICAgZWxzZQotICAgIGNhdCAkdG1wL2NvbmZpZy5oCi0gICAgcm0gLWYgJHRtcC9jb25maWcuaAorICAgICRhc19lY2hvICIvKiAkY29uZmlndXJlX2lucHV0ICAqLyIgXAorICAgICAgJiYgZXZhbCAnJEFXSyAtZiAiJGFjX3RtcC9kZWZpbmVzLmF3ayInICIkYWNfZmlsZV9pbnB1dHMiIFwKKyAgICAgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlIC0iICIkTElORU5PIiA1CiAgIGZpCi0jIENvbXB1dGUgJGFjX2ZpbGUncyBpbmRleCBpbiAkY29uZmlnX2hlYWRlcnMuCisjIENvbXB1dGUgIiRhY19maWxlIidzIGluZGV4IGluICRjb25maWdfaGVhZGVycy4KK19hbV9hcmc9IiRhY19maWxlIgogX2FtX3N0YW1wX2NvdW50PTEKIGZvciBfYW1faGVhZGVyIGluICRjb25maWdfaGVhZGVycyA6OyBkbwogICBjYXNlICRfYW1faGVhZGVyIGluCi0gICAgJGFjX2ZpbGUgfCAkYWNfZmlsZToqICkKKyAgICAkX2FtX2FyZyB8ICRfYW1fYXJnOiogKQogICAgICAgYnJlYWsgOzsKICAgICAqICkKICAgICAgIF9hbV9zdGFtcF9jb3VudD1gZXhwciAkX2FtX3N0YW1wX2NvdW50ICsgMWAgOzsKICAgZXNhYwogZG9uZQotZWNobyAidGltZXN0YW1wIGZvciAkYWNfZmlsZSIgPmAoZGlybmFtZSAkYWNfZmlsZSkgMj4vZGV2L251bGwgfHwKLSRhc19leHByIFgkYWNfZmlsZSA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAotCSBYJGFjX2ZpbGUgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCRhY19maWxlIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgkYWNfZmlsZSA6ICdYXCgvXCknIFx8IFwKLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgkYWNfZmlsZSB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2Avc3RhbXAtaCRfYW1fc3RhbXBfY291bnQKLWRvbmUKLV9BQ0VPRgotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCitlY2hvICJ0aW1lc3RhbXAgZm9yICRfYW1fYXJnIiA+YCRhc19kaXJuYW1lIC0tICIkX2FtX2FyZyIgfHwKKyRhc19leHByIFgiJF9hbV9hcmciIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJF9hbV9hcmciIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJF9hbV9hcmciIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJF9hbV9hcmciIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkX2FtX2FyZyIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgL3N0YW1wLWgkX2FtX3N0YW1wX2NvdW50CisgOzsKKyAgOkwpCisgICMKKyAgIyBDT05GSUdfTElOSworICAjCiAKLSMKLSMgQ09ORklHX0NPTU1BTkRTIHNlY3Rpb24uCi0jCi1mb3IgYWNfZmlsZSBpbiA6ICRDT05GSUdfQ09NTUFORFM7IGRvIHRlc3QgIngkYWNfZmlsZSIgPSB4OiAmJiBjb250aW51ZQotICBhY19kZXN0PWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYAotICBhY19zb3VyY2U9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCi0gIGFjX2Rpcj1gKGRpcm5hbWUgIiRhY19kZXN0IikgMj4vZGV2L251bGwgfHwKLSRhc19leHByIFgiJGFjX2Rlc3QiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJGFjX2Rlc3QiIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgiJGFjX2Rlc3QiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJGFjX2Rlc3QiIDogJ1hcKC9cKScgXHwgXAotCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkYWNfZGVzdCIgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KLSAgCSAgcy8uKi8uLzsgcSdgCi0gIHsgaWYgJGFzX21rZGlyX3A7IHRoZW4KLSAgICBta2RpciAtcCAiJGFjX2RpciIKKyAgaWYgdGVzdCAiJGFjX3NvdXJjZSIgPSAiJGFjX2ZpbGUiICYmIHRlc3QgIiRzcmNkaXIiID0gJy4nOyB0aGVuCisgICAgOgogICBlbHNlCi0gICAgYXNfZGlyPSIkYWNfZGlyIgotICAgIGFzX2RpcnM9Ci0gICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KLSAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCi0gICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKLSRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCi0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiRhc19kaXIiIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIHMvLiovLi87IHEnYAotICAgIGRvbmUKLSAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycwotICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorICAgICMgUHJlZmVyIHRoZSBmaWxlIGZyb20gdGhlIHNvdXJjZSB0cmVlIGlmIG5hbWVzIGFyZSBpZGVudGljYWwuCisgICAgaWYgdGVzdCAiJGFjX3NvdXJjZSIgPSAiJGFjX2ZpbGUiIHx8IHRlc3QgISAtciAiJGFjX3NvdXJjZSI7IHRoZW4KKyAgICAgIGFjX3NvdXJjZT0kc3JjZGlyLyRhY19zb3VyY2UKKyAgICBmaQogCi0gIGFjX2J1aWxkZGlyPS4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGxpbmtpbmcgJGFjX3NvdXJjZSB0byAkYWNfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBsaW5raW5nICRhY19zb3VyY2UgdG8gJGFjX2ZpbGUiID4mNjt9CiAKLWlmIHRlc3QgIiRhY19kaXIiICE9IC47IHRoZW4KLSAgYWNfZGlyX3N1ZmZpeD0vYGVjaG8gIiRhY19kaXIiIHwgc2VkICdzLF5cLltcXC9dLCwnYAotICAjIEEgIi4uLyIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgotICBhY190b3BfYnVpbGRkaXI9YGVjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAncywvW15cXC9dKiwuLi8sZydgCi1lbHNlCi0gIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcj0KLWZpCisgICAgaWYgdGVzdCAhIC1yICIkYWNfc291cmNlIjsgdGhlbgorICAgICAgYXNfZm5fZXJyb3IgJD8gIiRhY19zb3VyY2U6IGZpbGUgbm90IGZvdW5kIiAiJExJTkVOTyIgNQorICAgIGZpCisgICAgcm0gLWYgIiRhY19maWxlIgogCi1jYXNlICRzcmNkaXIgaW4KLSAgLikgICMgTm8gLS1zcmNkaXIgb3B0aW9uLiAgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgotICAgIGFjX3NyY2Rpcj0uCi0gICAgaWYgdGVzdCAteiAiJGFjX3RvcF9idWlsZGRpciI7IHRoZW4KLSAgICAgICBhY190b3Bfc3JjZGlyPS4KLSAgICBlbHNlCi0gICAgICAgYWNfdG9wX3NyY2Rpcj1gZWNobyAkYWNfdG9wX2J1aWxkZGlyIHwgc2VkICdzLC8kLCwnYAotICAgIGZpIDs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgcGF0aC4KLSAgICBhY19zcmNkaXI9JHNyY2RpciRhY19kaXJfc3VmZml4OwotICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpciA7OwotICAqKSAjIFJlbGF0aXZlIHBhdGguCi0gICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRkaXIkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKLSAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXIkc3JjZGlyIDs7Ci1lc2FjCi0KLSMgRG8gbm90IHVzZSBgY2QgZm9vICYmIHB3ZGAgdG8gY29tcHV0ZSBhYnNvbHV0ZSBwYXRocywgYmVjYXVzZQotIyB0aGUgZGlyZWN0b3JpZXMgbWF5IG5vdCBleGlzdC4KLWNhc2UgYHB3ZGAgaW4KLS4pIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OwotKikKLSAgY2FzZSAiJGFjX2RpciIgaW4KLSAgLikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKLSAgKikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgLyIkYWNfZGlyIjs7Ci0gIGVzYWM7OwotZXNhYwotY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCi0uKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OwotKikKLSAgY2FzZSAke2FjX3RvcF9idWlsZGRpcn0uIGluCi0gIC4pIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpcjs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKLSAgKikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyLyR7YWNfdG9wX2J1aWxkZGlyfS47OwotICBlc2FjOzsKLWVzYWMKLWNhc2UgJGFjX2Fic19idWlsZGRpciBpbgotLikgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKLSopCi0gIGNhc2UgJGFjX3NyY2RpciBpbgotICAuKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OwotICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7Ci0gICopIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfc3JjZGlyOzsKLSAgZXNhYzs7Ci1lc2FjCi1jYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KLS4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKLSopCi0gIGNhc2UgJGFjX3RvcF9zcmNkaXIgaW4KLSAgLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OwotICAqKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY190b3Bfc3JjZGlyOzsKLSAgZXNhYzs7Ci1lc2FjCisgICAgIyBUcnkgYSByZWxhdGl2ZSBzeW1saW5rLCB0aGVuIGEgaGFyZCBsaW5rLCB0aGVuIGEgY29weS4KKyAgICBjYXNlICRhY19zb3VyY2UgaW4KKyAgICBbXFwvJF0qIHwgPzpbXFwvXSogKSBhY19yZWxfc291cmNlPSRhY19zb3VyY2UgOzsKKwkqKSBhY19yZWxfc291cmNlPSRhY190b3BfYnVpbGRfcHJlZml4JGFjX3NvdXJjZSA7OworICAgIGVzYWMKKyAgICBsbiAtcyAiJGFjX3JlbF9zb3VyY2UiICIkYWNfZmlsZSIgMj4vZGV2L251bGwgfHwKKyAgICAgIGxuICIkYWNfc291cmNlIiAiJGFjX2ZpbGUiIDI+L2Rldi9udWxsIHx8CisgICAgICBjcCAtcCAiJGFjX3NvdXJjZSIgIiRhY19maWxlIiB8fAorICAgICAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBsaW5rIG9yIGNvcHkgJGFjX3NvdXJjZSB0byAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyAgZmkKKyA7OworICA6QykgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXhlY3V0aW5nICRhY19maWxlIGNvbW1hbmRzIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGV4ZWN1dGluZyAkYWNfZmlsZSBjb21tYW5kcyIgPiY2O30KKyA7OworICBlc2FjCiAKIAotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBleGVjdXRpbmcgJGFjX2Rlc3QgY29tbWFuZHMiID4mNQotZWNobyAiJGFzX21lOiBleGVjdXRpbmcgJGFjX2Rlc3QgY29tbWFuZHMiID4mNjt9Ci0gIGNhc2UgJGFjX2Rlc3QgaW4KLSAgICBkZXBmaWxlcyApIHRlc3QgeCIkQU1ERVBfVFJVRSIgIT0geCIiIHx8IGZvciBtZiBpbiAkQ09ORklHX0ZJTEVTOyBkbwotICAjIFN0cmlwIE1GIHNvIHdlIGVuZCB1cCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgotICBtZj1gZWNobyAiJG1mIiB8IHNlZCAtZSAncy86LiokLy8nYAotICAjIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiBBdXRvbWFrZSBnZW5lcmF0ZWQgTWFrZWZpbGUgb3Igbm90LgotICAjIFdlIHVzZWQgdG8gbWF0Y2ggb25seSB0aGUgZmlsZXMgbmFtZWQgYE1ha2VmaWxlLmluJywgYnV0Ci0gICMgc29tZSBwZW9wbGUgcmVuYW1lIHRoZW07IHNvIGluc3RlYWQgd2UgbG9vayBhdCB0aGUgZmlsZSBjb250ZW50LgotICAjIEdyZXAnaW5nIHRoZSBmaXJzdCBsaW5lIGlzIG5vdCBlbm91Z2g6IHNvbWUgcGVvcGxlIHBvc3QtcHJvY2VzcwotICAjIGVhY2ggTWFrZWZpbGUuaW4gYW5kIGFkZCBhIG5ldyBsaW5lIG9uIHRvcCBvZiBlYWNoIGZpbGUgdG8gc2F5IHNvLgotICAjIFNvIGxldCdzIGdyZXAgd2hvbGUgZmlsZS4KLSAgaWYgZ3JlcCAnXiMuKmdlbmVyYXRlZCBieSBhdXRvbWFrZScgJG1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICBkaXJwYXJ0PWAoZGlybmFtZSAiJG1mIikgMj4vZGV2L251bGwgfHwKKyAgY2FzZSAkYWNfZmlsZSRhY19tb2RlIGluCisgICAgImRlcGZpbGVzIjpDKSB0ZXN0IHgiJEFNREVQX1RSVUUiICE9IHgiIiB8fCB7CisgICMgQXV0b2NvbmYgMi42MiBxdW90ZXMgLS1maWxlIGFyZ3VtZW50cyBmb3IgZXZhbCwgYnV0IG5vdCB3aGVuIGZpbGVzCisgICMgYXJlIGxpc3RlZCB3aXRob3V0IC0tZmlsZS4gIExldCdzIHBsYXkgc2FmZSBhbmQgb25seSBlbmFibGUgdGhlIGV2YWwKKyAgIyBpZiB3ZSBkZXRlY3QgdGhlIHF1b3RpbmcuCisgIGNhc2UgJENPTkZJR19GSUxFUyBpbgorICAqXCcqKSBldmFsIHNldCB4ICIkQ09ORklHX0ZJTEVTIiA7OworICAqKSAgIHNldCB4ICRDT05GSUdfRklMRVMgOzsKKyAgZXNhYworICBzaGlmdAorICBmb3IgbWYKKyAgZG8KKyAgICAjIFN0cmlwIE1GIHNvIHdlIGVuZCB1cCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgorICAgIG1mPWBlY2hvICIkbWYiIHwgc2VkIC1lICdzLzouKiQvLydgCisgICAgIyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYW4gQXV0b21ha2UgZ2VuZXJhdGVkIE1ha2VmaWxlIG9yIG5vdC4KKyAgICAjIFdlIHVzZWQgdG8gbWF0Y2ggb25seSB0aGUgZmlsZXMgbmFtZWQgJ01ha2VmaWxlLmluJywgYnV0CisgICAgIyBzb21lIHBlb3BsZSByZW5hbWUgdGhlbTsgc28gaW5zdGVhZCB3ZSBsb29rIGF0IHRoZSBmaWxlIGNvbnRlbnQuCisgICAgIyBHcmVwJ2luZyB0aGUgZmlyc3QgbGluZSBpcyBub3QgZW5vdWdoOiBzb21lIHBlb3BsZSBwb3N0LXByb2Nlc3MKKyAgICAjIGVhY2ggTWFrZWZpbGUuaW4gYW5kIGFkZCBhIG5ldyBsaW5lIG9uIHRvcCBvZiBlYWNoIGZpbGUgdG8gc2F5IHNvLgorICAgICMgR3JlcCdpbmcgdGhlIHdob2xlIGZpbGUgaXMgbm90IGdvb2QgZWl0aGVyOiBBSVggZ3JlcCBoYXMgYSBsaW5lCisgICAgIyBsaW1pdCBvZiAyMDQ4LCBidXQgYWxsIHNlZCdzIHdlIGtub3cgaGF2ZSB1bmRlcnN0YW5kIGF0IGxlYXN0IDQwMDAuCisgICAgaWYgc2VkIC1uICdzLF4jLipnZW5lcmF0ZWQgYnkgYXV0b21ha2UuKixYLHAnICIkbWYiIHwgZ3JlcCBYID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgZGlycGFydD1gJGFzX2Rpcm5hbWUgLS0gIiRtZiIgfHwKICRhc19leHByIFgiJG1mIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAogCSBYIiRtZiIgOiAnWFwoLy9cKVteL10nIFx8IFwKIAkgWCIkbWYiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJG1mIiA6ICdYXCgvXCknIFx8IFwKLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgiJG1mIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKLSAgZWxzZQotICAgIGNvbnRpbnVlCi0gIGZpCi0gICMgRXh0cmFjdCB0aGUgZGVmaW5pdGlvbiBvZiBERVBESVIsIGFtX19pbmNsdWRlLCBhbmQgYW1fX3F1b3RlCi0gICMgZnJvbSB0aGUgTWFrZWZpbGUgd2l0aG91dCBydW5uaW5nIGBtYWtlJy4KLSAgREVQRElSPWBzZWQgLW4gJ3MvXkRFUERJUiA9IC8vcCcgPCAiJG1mImAKLSAgdGVzdCAteiAiJERFUERJUiIgJiYgY29udGludWUKLSAgYW1fX2luY2x1ZGU9YHNlZCAtbiAncy9eYW1fX2luY2x1ZGUgPSAvL3AnIDwgIiRtZiJgCi0gIHRlc3QgLXogImFtX19pbmNsdWRlIiAmJiBjb250aW51ZQotICBhbV9fcXVvdGU9YHNlZCAtbiAncy9eYW1fX3F1b3RlID0gLy9wJyA8ICIkbWYiYAotICAjIFdoZW4gdXNpbmcgYW5zaTJrbnIsIFUgbWF5IGJlIGVtcHR5IG9yIGFuIHVuZGVyc2NvcmU7IGV4cGFuZCBpdAotICBVPWBzZWQgLW4gJ3MvXlUgPSAvL3AnIDwgIiRtZiJgCi0gICMgRmluZCBhbGwgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZXMsIHRoZXkgYXJlIGluY2x1ZGVkIGZpbGVzIHdpdGgKLSAgIyAkKERFUERJUikgaW4gdGhlaXIgbmFtZXMuICBXZSBpbnZva2Ugc2VkIHR3aWNlIGJlY2F1c2UgaXQgaXMgdGhlCi0gICMgc2ltcGxlc3QgYXBwcm9hY2ggdG8gY2hhbmdpbmcgJChERVBESVIpIHRvIGl0cyBhY3R1YWwgdmFsdWUgaW4gdGhlCi0gICMgZXhwYW5zaW9uLgotICBmb3IgZmlsZSBpbiBgc2VkIC1uICIKLSAgICBzL14kYW1fX2luY2x1ZGUgJGFtX19xdW90ZVwoLiooREVQRElSKS4qXCkkYW1fX3F1b3RlIickL1wxL3AnIDwiJG1mIiB8IFwKLSAgICAgICBzZWQgLWUgJ3MvXCQoREVQRElSKS8nIiRERVBESVIiJy9nJyAtZSAncy9cJFUvJyIkVSInL2cnYDsgZG8KLSAgICAjIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGV4aXN0cy4KLSAgICB0ZXN0IC1mICIkZGlycGFydC8kZmlsZSIgJiYgY29udGludWUKLSAgICBmZGlyPWAoZGlybmFtZSAiJGZpbGUiKSAyPi9kZXYvbnVsbCB8fAorCSBYIiRtZiIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRtZiIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgICAgZWxzZQorICAgICAgY29udGludWUKKyAgICBmaQorICAgICMgRXh0cmFjdCB0aGUgZGVmaW5pdGlvbiBvZiBERVBESVIsIGFtX19pbmNsdWRlLCBhbmQgYW1fX3F1b3RlCisgICAgIyBmcm9tIHRoZSBNYWtlZmlsZSB3aXRob3V0IHJ1bm5pbmcgJ21ha2UnLgorICAgIERFUERJUj1gc2VkIC1uICdzL15ERVBESVIgPSAvL3AnIDwgIiRtZiJgCisgICAgdGVzdCAteiAiJERFUERJUiIgJiYgY29udGludWUKKyAgICBhbV9faW5jbHVkZT1gc2VkIC1uICdzL15hbV9faW5jbHVkZSA9IC8vcCcgPCAiJG1mImAKKyAgICB0ZXN0IC16ICJhbV9faW5jbHVkZSIgJiYgY29udGludWUKKyAgICBhbV9fcXVvdGU9YHNlZCAtbiAncy9eYW1fX3F1b3RlID0gLy9wJyA8ICIkbWYiYAorICAgICMgRmluZCBhbGwgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZXMsIHRoZXkgYXJlIGluY2x1ZGVkIGZpbGVzIHdpdGgKKyAgICAjICQoREVQRElSKSBpbiB0aGVpciBuYW1lcy4gIFdlIGludm9rZSBzZWQgdHdpY2UgYmVjYXVzZSBpdCBpcyB0aGUKKyAgICAjIHNpbXBsZXN0IGFwcHJvYWNoIHRvIGNoYW5naW5nICQoREVQRElSKSB0byBpdHMgYWN0dWFsIHZhbHVlIGluIHRoZQorICAgICMgZXhwYW5zaW9uLgorICAgIGZvciBmaWxlIGluIGBzZWQgLW4gIgorICAgICAgcy9eJGFtX19pbmNsdWRlICRhbV9fcXVvdGVcKC4qKERFUERJUikuKlwpJGFtX19xdW90ZSInJC9cMS9wJyA8IiRtZiIgfCBcCisJIHNlZCAtZSAncy9cJChERVBESVIpLyciJERFUERJUiInL2cnYDsgZG8KKyAgICAgICMgTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzLgorICAgICAgdGVzdCAtZiAiJGRpcnBhcnQvJGZpbGUiICYmIGNvbnRpbnVlCisgICAgICBmZGlyPWAkYXNfZGlybmFtZSAtLSAiJGZpbGUiIHx8CiAkYXNfZXhwciBYIiRmaWxlIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAogCSBYIiRmaWxlIiA6ICdYXCgvL1wpW14vXScgXHwgXAogCSBYIiRmaWxlIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiRmaWxlIiA6ICdYXCgvXCknIFx8IFwKLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgiJGZpbGUiIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIHMvLiovLi87IHEnYAotICAgIHsgaWYgJGFzX21rZGlyX3A7IHRoZW4KLSAgICBta2RpciAtcCAkZGlycGFydC8kZmRpcgotICBlbHNlCi0gICAgYXNfZGlyPSRkaXJwYXJ0LyRmZGlyCi0gICAgYXNfZGlycz0KLSAgICB3aGlsZSB0ZXN0ICEgLWQgIiRhc19kaXIiOyBkbwotICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKLSAgICAgIGFzX2Rpcj1gKGRpcm5hbWUgIiRhc19kaXIiKSAyPi9kZXYvbnVsbCB8fAotJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgiJGFzX2RpciIgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KLSAgCSAgcy8uKi8uLzsgcSdgCisJIFgiJGZpbGUiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkZmlsZSIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgICAgICBhc19kaXI9JGRpcnBhcnQvJGZkaXI7IGFzX2ZuX21rZGlyX3AKKyAgICAgICMgZWNobyAiY3JlYXRpbmcgJGRpcnBhcnQvJGZpbGUiCisgICAgICBlY2hvICcjIGR1bW15JyA+ICIkZGlycGFydC8kZmlsZSIKICAgICBkb25lCi0gICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKLSAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGRpcnBhcnQvJGZkaXIiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGRpcnBhcnQvJGZkaXIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KLQotICAgICMgZWNobyAiY3JlYXRpbmcgJGRpcnBhcnQvJGZpbGUiCi0gICAgZWNobyAnIyBkdW1teScgPiAiJGRpcnBhcnQvJGZpbGUiCiAgIGRvbmUKLWRvbmUKK30KICA7OwotICAgIGRlZmF1bHQtMSApCisgICAgInBvLWRpcmVjdG9yaWVzIjpDKQogICAgIGZvciBhY19maWxlIGluICRDT05GSUdfRklMRVM7IGRvCiAgICAgICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iCiAgICAgICBjYXNlICIkYWNfZmlsZSIgaW4KQEAgLTE3NTA1LDcgKzM5MTAyLDggQEAKICAgICAgICAgaWYgdGVzdCAtZiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL1BPVEZJTEVTLmluIjsgdGhlbgogICAgICAgICAgIHJtIC1mICIkYWNfZGlyL1BPVEZJTEVTIgogICAgICAgICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZGlyL1BPVEZJTEVTIiB8fCBlY2hvICJjcmVhdGluZyAkYWNfZGlyL1BPVEZJTEVTIgotICAgICAgICAgIGNhdCAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL1BPVEZJTEVTLmluIiB8IHNlZCAtZSAiL14jL2QiIC1lICIvXlsgCV0qXCQvZCIgLWUgInMsLiosICAgICAkdG9wX3NyY2Rpci8mIFxcXFwsIiB8IHNlZCAtZSAiXCRzL1woLipcKSBcXFxcL1wxLyIgPiAiJGFjX2Rpci9QT1RGSUxFUyIKKyAgICAgICAgICBndF90YWI9YHByaW50ZiAnXHQnYAorICAgICAgICAgIGNhdCAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL1BPVEZJTEVTLmluIiB8IHNlZCAtZSAiL14jL2QiIC1lICIvXlsgJHtndF90YWJ9XSpcJC9kIiAtZSAicywuKiwgICAgICR0b3Bfc3JjZGlyLyYgXFxcXCwiIHwgc2VkIC1lICJcJHMvXCguKlwpIFxcXFwvXDEvIiA+ICIkYWNfZGlyL1BPVEZJTEVTIgogICAgICAgICAgIFBPTUFLRUZJTEVERVBTPSJQT1RGSUxFUy5pbiIKICAgICAgICAgICAjIEFMTF9MSU5HVUFTLCBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTIGRlcGVuZAogICAgICAgICAgICMgb24gJGFjX2RpciBidXQgZG9uJ3QgZGVwZW5kIG9uIHVzZXItc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24KQEAgLTE3NTE2LDExICszOTExNCwxMiBAQAogICAgICAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogc2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiIHx8IGVjaG8gInNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIgogICAgICAgICAgICAgZmkKICAgICAgICAgICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgLWUgInMvIy4qLy8iICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyJgCi0gICAgICAgICAgICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbWVudCBmcm9tIGF1dG9tYWtlLgorICAgICAgICAgICAgIyBIaWRlIHRoZSBBTExfTElOR1VBUyBhc3NpZ25tZW50IGZyb20gYXV0b21ha2UgPCAxLjUuCiAgICAgICAgICAgICBldmFsICdBTExfTElOR1VBUycnPSRBTExfTElOR1VBU18nCiAgICAgICAgICAgICBQT01BS0VGSUxFREVQUz0iJFBPTUFLRUZJTEVERVBTIExJTkdVQVMiCiAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIyBUaGUgc2V0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMgd2FzIGdpdmVuIGluIGNvbmZpZ3VyZS5pbi4KKyAgICAgICAgICAgICMgSGlkZSB0aGUgQUxMX0xJTkdVQVMgYXNzaWdubWVudCBmcm9tIGF1dG9tYWtlIDwgMS41LgogICAgICAgICAgICAgZXZhbCAnQUxMX0xJTkdVQVMnJz0kT0JTT0xFVEVfQUxMX0xJTkdVQVMnCiAgICAgICAgICAgZmkKICAgICAgICAgICAjIENvbXB1dGUgUE9GSUxFUwpAQCAtMTc1OTEsMTAgKzM5MTkwLDExIEBACiAgICAgICAgIDs7CiAgICAgICBlc2FjCiAgICAgZG9uZSA7OwotICAgIHRlc3RzL2F0Y29uZmlnICkgY2F0ID50ZXN0cy9hdGNvbmZpZyA8PEFURU9GCisgICAgImV0Yy9iZW5jaC5wbCI6RikgY2htb2QgK3ggZXRjL2JlbmNoLnBsIDs7CisgICAgInRlc3RzL2F0Y29uZmlnIjpDKSBjYXQgPnRlc3RzL2F0Y29uZmlnIDw8QVRFT0YKICMgQ29uZmlndXJhYmxlIHZhcmlhYmxlIHZhbHVlcyBmb3IgYnVpbGRpbmcgdGVzdCBzdWl0ZXMuCiAjIEdlbmVyYXRlZCBieSAkMC4KLSMgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICMgVGhlIHRlc3Qgc3VpdGUgd2lsbCBkZWZpbmUgdG9wX3NyY2Rpcj0kYXRfdG9wX3NyY2Rpci8uLi8uLiBldGMuCiBhdF90ZXN0ZGlyPSd0ZXN0cycKQEAgLTE3NjAzLDI1ICszOTIwMywzMCBAQAogYWJzX3NyY2Rpcj0nJGFjX2Fic19zcmNkaXInCiBhdF90b3Bfc3JjZGlyPSckYWNfdG9wX3NyY2RpcicKIGFic190b3Bfc3JjZGlyPSckYWNfYWJzX3RvcF9zcmNkaXInCi1hdF90b3BfYnVpbGRkaXI9JyRhY190b3BfYnVpbGRkaXInCithdF90b3BfYnVpbGRfcHJlZml4PSckYWNfdG9wX2J1aWxkX3ByZWZpeCcKIGFic190b3BfYnVpbGRkaXI9JyRhY19hYnNfdG9wX2J1aWxkZGlyJwogCisjIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBBdXRvdGVzdCA8PSAyLjU5YjoKK2F0X3RvcF9idWlsZGRpcj1cJGF0X3RvcF9idWlsZF9wcmVmaXgKKwogQVVUT1RFU1RfUEFUSD0ndGVzdHMnCiAKIFNIRUxMPVwke0NPTkZJR19TSEVMTC0nJFNIRUxMJ30KIEFURU9GCiAgOzsKKyAgICAidGVzdHMvYmlzb24iOkYpIGNobW9kICt4IHRlc3RzL2Jpc29uIDs7CisKICAgZXNhYwotZG9uZQotX0FDRU9GCitkb25lICMgZm9yIGFjX3RhZwogCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKIAoteyAoZXhpdCAwKTsgZXhpdCAwOyB9Cithc19mbl9leGl0IDAKIF9BQ0VPRgotY2htb2QgK3ggJENPTkZJR19TVEFUVVMKIGFjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCiAKK3Rlc3QgJGFjX3dyaXRlX2ZhaWwgPSAwIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJ3cml0ZSBmYWlsdXJlIGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorCiAKICMgY29uZmlndXJlIGlzIHdyaXRpbmcgdG8gY29uZmlnLmxvZywgYW5kIHRoZW4gY2FsbHMgY29uZmlnLnN0YXR1cy4KICMgY29uZmlnLnN0YXR1cyBkb2VzIGl0cyBvd24gcmVkaXJlY3Rpb24sIGFwcGVuZGluZyB0byBjb25maWcubG9nLgpAQCAtMTc2NDEsNiArMzkyNDYsMTAgQEAKICAgZXhlYyA1Pj5jb25maWcubG9nCiAgICMgVXNlIHx8LCBub3QgJiYsIHRvIGF2b2lkIGV4aXRpbmcgZnJvbSB0aGUgaWYgd2l0aCAkPyA9IDEsIHdoaWNoCiAgICMgd291bGQgbWFrZSBjb25maWd1cmUgZmFpbCBpZiB0aGlzIGlzIHRoZSBsYXN0IGluc3RydWN0aW9uLgotICAkYWNfY3Nfc3VjY2VzcyB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKyAgJGFjX2NzX3N1Y2Nlc3MgfHwgYXNfZm5fZXhpdCAxCitmaQoraWYgdGVzdCAtbiAiJGFjX3VucmVjb2duaXplZF9vcHRzIiAmJiB0ZXN0ICIkZW5hYmxlX29wdGlvbl9jaGVja2luZyIgIT0gbm87IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mMjt9CiBmaQogCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggNzgwNGIwMi4uZTY0MDNmNCAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMSwxMSArMSwxMCBAQAogIyBDb25maWd1cmUgdGVtcGxhdGUgZm9yIEdOVSBCaXNvbi4gICAgICAgICAgICAgICAgICAgLSotQXV0b2NvbmYtKi0KICMKLSMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKICMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICMKICMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCkBAIC0xNCw1NyArMTMsMTMxIEBACiAjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAjCiAjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSMgMDIxMTAtMTMwMSAgVVNBCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCi0jIFRoaXMgZmlsZSB1c2VzIEFDX0NPTkZJR19NQUNST19ESVIsIHNvIHdlIG5lZWQgQXV0b2NvbmYgMi41OCBvciBiZXR0ZXIuCi0jIEJ1dCBBdXRvY29uZiAyLjU4IGhhcyBhIGJ1ZyBpbiB0aGUgd2F5IHRoYXQgaXQgZ2VuZXJhdGVzIHRlc3RzOiBpdAotIyBwdXRzIHRoZSB3cm9uZyBhYnNvbHV0ZSBwYXRoIG5hbWVzIGluIHRoZSB0ZXN0cy4gIFNvIHdlIG5lZWQgYXQKLSMgbGVhc3QgQXV0b2NvbmYgMi41OS4KLUFDX1BSRVJFUSgyLjU5KQorIyBJbiBvcmRlciBmb3Igc29tZSB2ZXJzaW9ucyBvZiBTdW4gU3R1ZGlvIHRvIGNvbXBpbGUgb3VyIEMrKyB0ZXN0IGNhc2VzCisjIGNvcnJlY3RseSwgd2UgbmVlZCBBdXRvY29uZiAyLjY0IG9yIGJldHRlciB0byBoYW5kbGUgdGhlIHJlc3RyaWN0CisjIGtleXdvcmQgaW4gYXQgbGVhc3Qgc3RyaW5nLmggZnJvbSBnbnVsaWIuICBXZSBuZWVkIEF1dG9jb25mIDIuNjggb3IKKyMgYmV0dGVyIHRvIGF2b2lkIGEgdHlwbyBpbiB0aGUgYGNvbmZpZ3VyZSAtLWhlbHAnIGVudHJ5IGZvciB0aGUgWUFDQworIyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KK0FDX1BSRVJFUShbMi42OF0pCittNF9wYXR0ZXJuX2ZvcmJpZChbXmdsX1tBLVpdXSkKIAotQUNfSU5JVChbR05VIEJpc29uXSwgWzIuM10sIFtidWctYmlzb25AZ251Lm9yZ10pCitBQ19JTklUKFtHTlUgQmlzb25dLAorICAgICAgICBtNF9lc3lzY21kKFtidWlsZC1hdXgvZ2l0LXZlcnNpb24tZ2VuIC50YXJiYWxsLXZlcnNpb25dKSwKKyAgICAgICAgW2J1Zy1iaXNvbkBnbnUub3JnXSkKK0FDX1NVQlNUKFtQQUNLQUdFX0NPUFlSSUdIVF9ZRUFSXSwgWzIwMTJdKQorQUNfREVGSU5FX1VOUVVPVEVEKFtQQUNLQUdFX0NPUFlSSUdIVF9ZRUFSXSwgWyRQQUNLQUdFX0NPUFlSSUdIVF9ZRUFSXSwKKyAgICAgICAgICAgICAgICAgICBbVGhlIGNvcHlyaWdodCB5ZWFyIGZvciB0aGlzIHBhY2thZ2VdKQorCiBBQ19DT05GSUdfQVVYX0RJUihbYnVpbGQtYXV4XSkKIEFDX0NPTkZJR19NQUNST19ESVIoW200XSkKIAotIyBXZSBkb24ndCBoYXZlIGEgZmlsZSBtNC9NYWtlZmlsZS5hbSwgc28gd2UgbmVlZCBBdXRvbWFrZSAxLjggb3IgbGF0ZXIuCi1BTV9JTklUX0FVVE9NQUtFKFsxLjggY2hlY2stbmV3cyByZWFkbWUtYWxwaGEgZGlzdC1iemlwMl0pCi1BQ19DT05GSUdfSEVBREVSUyhbY29uZmlnLmg6Y29uZmlnLmhpbl0pCi0KLWdsX1VTRV9TWVNURU1fRVhURU5TSU9OUworIyBBdXRvbWFrZSAxLjEwLjMgYW5kIDEuMTEuMSBmaXggYSBzZWN1cml0eSBmbGF3IGRpc2N1c3NlZCBoZXJlOgorIworIyAgIGh0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmNvbXAuc3lzdXRpbHMuYXV0b3Rvb2xzLmFubm91bmNlLzEzMQorIworIyBUbyBhdm9pZCAxLjExLCB3ZSBtYWtlIDEuMTEuMSB0aGUgbWluaW11bSB2ZXJzaW9uLgorIworIyBXZSB3YW50IGduaXRzIHN0cmljdG5lc3Mgb25seSB3aGVuIHJvbGxpbmcgYSBzdGFibGUgcmVsZWFzZS4gIEZvcgorIyByZWxlYXNlIGNhbmRpZGF0ZXMsIHdlIHVzZSB2ZXJzaW9uIHN0cmluZ3MgbGlrZSAyLjQuM19yYzEsIGJ1dCBnbml0cworIyBkb2Vzbid0IGxpa2UgdGhhdCwgc28gd2UgbGV0IHRoZSB1bmRlcnNjb3JlIGRpc2FibGUgZ25pdHMuICBCZXR3ZWVuCisjIHJlbGVhc2VzLCB3ZSB3YW50IHRvIGJlIGFibGUgcnVuIG1ha2UgZGlzdCB3aXRob3V0IGJlaW5nIHJlcXVpcmVkIHRvCisjIGFkZCBhIGJvZ3VzIE5FV1MgZW50cnkuICBJbiB0aGF0IGNhc2UsIHRoZSB2ZXJzaW9uIHN0cmluZworIyBhdXRvbWF0aWNhbGx5IGNvbnRhaW5zIGEgZGFzaCwgd2hpY2ggd2UgYWxzbyBsZXQgZGlzYWJsZSBnbml0cy4KK0FNX0lOSVRfQVVUT01BS0UoWzEuMTEuMSBkaXN0LXh6IHNpbGVudC1ydWxlc10KKyAgICAgICAgICAgICAgICAgbTRfYm1hdGNoKG00X2RlZm4oW0FDX1BBQ0tBR0VfVkVSU0lPTl0pLCBbWy1fXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ251XSwgW2duaXRzXSkpCitBTV9TSUxFTlRfUlVMRVMoW3llc10pCitBQ19DT05GSUdfSEVBREVSUyhbbGliL2NvbmZpZy5oOmxpYi9jb25maWcuaW4uaF0pCiAKICMgQ2hlY2tzIGZvciB0aGUgY29tcGlsZXIuCi1BQ19QUk9HX0NDCi1BTV9QUk9HX0NDX1NUREMKLUFDX0FSR19FTkFCTEUoZ2NjLXdhcm5pbmdzLAorQUNfUFJPR19DQ19TVERDCitBQ19QUk9HX0NYWAorCisjIEdudWxpYiAoZWFybHkgY2hlY2tzKS4KK2dsX0VBUkxZCisKKyMgR251bGliIHVzZXMgJyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaCcgdG8gc2lsZW5jZSBzb21lCisjIHdhcm5pbmdzLCBidXQgb2xkZXIgZ2NjIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzLgorQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2ggd29ya3NdLAorICBbbHZfY3ZfZ2NjX3ByYWdtYV9wdXNoX3dvcmtzXSwgWworICBzYXZlX0NGTEFHUz0kQ0ZMQUdTCisgIENGTEFHUz0nLVd1bmtub3duLXByYWdtYXMgLVdlcnJvcicKKyAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworICAgICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorICAgICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisgIF1dKV0sCisgIFtsdl9jdl9nY2NfcHJhZ21hX3B1c2hfd29ya3M9eWVzXSwKKyAgW2x2X2N2X2djY19wcmFnbWFfcHVzaF93b3Jrcz1ub10pCisgIENGTEFHUz0kc2F2ZV9DRkxBR1NdKQorCitBQ19BUkdfRU5BQkxFKFtnY2Mtd2FybmluZ3NdLAogWyAgLS1lbmFibGUtZ2NjLXdhcm5pbmdzICAgdHVybiBvbiBsb3RzIG9mIEdDQyB3YXJuaW5ncyAobm90IHJlY29tbWVuZGVkKV0sCi1bY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorW2Nhc2UgJGVuYWJsZV9nY2Nfd2FybmluZ3MgaW4KICAgIHllc3xubykgOzsKLSAgICopICAgICAgQUNfTVNHX0VSUk9SKFtiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciBnY2Mtd2FybmluZ3Mgb3B0aW9uXSkgOzsKKyAgICopICBBQ19NU0dfRVJST1IoW2ludmFsaWQgdmFsdWUgZm9yIC0tZ2NjLXdhcm5pbmdzOiAkZW5hYmxlX2djY193YXJuaW5nc10pOzsKICBlc2FjXSwKLSAgICAgICAgICAgICAgW2VuYWJsZXZhbD1ub10pCi1pZiB0ZXN0ICIke2VuYWJsZXZhbH0iID0geWVzOyB0aGVuCi0gIEJJU09OX1dBUk5JTkcoLVdlcnJvcikKLSAgQUNfU1VCU1QoW1dFUlJPUl9DRkxBR1NdLCBbJFdBUk5JTkdfQ0ZMQUdTXSkKLSAgV0FSTklOR19DRkxBR1M9Ci0gIEJJU09OX1dBUk5JTkcoLVcpCi0gIEJJU09OX1dBUk5JTkcoLVdhbGwpCi0gIEJJU09OX1dBUk5JTkcoLVdjYXN0LWFsaWduKQotICBCSVNPTl9XQVJOSU5HKC1XY2FzdC1xdWFsKQotICBCSVNPTl9XQVJOSU5HKC1XZm9ybWF0KQotICBCSVNPTl9XQVJOSU5HKC1Xd3JpdGUtc3RyaW5ncykKLSAgQUNfU1VCU1QoW1dBUk5JTkdfQ1hYRkxBR1NdLCBbJFdBUk5JTkdfQ0ZMQUdTXSkKLSAgIyBUaGUgZm9sbG93aW5nIHdhcm5pbmdzIGFyZSBub3Qgc3VpdGFibGUgZm9yIEMrKy4KLSAgQklTT05fV0FSTklORygtV2JhZC1mdW5jdGlvbi1jYXN0KQotICBCSVNPTl9XQVJOSU5HKC1XbWlzc2luZy1kZWNsYXJhdGlvbnMpCi0gIEJJU09OX1dBUk5JTkcoLVdtaXNzaW5nLXByb3RvdHlwZXMpCi0gIEJJU09OX1dBUk5JTkcoLVdzaGFkb3cpCi0gIEJJU09OX1dBUk5JTkcoLVdzdHJpY3QtcHJvdG90eXBlcykKLSAgQUNfREVGSU5FKFtsaW50XSwgMSwgW0RlZmluZSB0byAxIGlmIHRoZSBjb21waWxlciBpcyBjaGVja2luZyBmb3IgbGludC5dKQorICAgICAgICAgICAgICBbZW5hYmxlX2djY193YXJuaW5ncz1ub10pCitpZiB0ZXN0ICIkZW5hYmxlX2djY193YXJuaW5ncyIgPSB5ZXM7IHRoZW4KKyAgd2Fybl9jb21tb249Jy1XYWxsIC1XZXh0cmEgLVduby1zaWduLWNvbXBhcmUgLVdjYXN0LWFsaWduCisgICAgLVdmb3JtYXQgLVdwb2ludGVyLWFyaXRoIC1Xd3JpdGUtc3RyaW5ncycKKyAgd2Fybl9jPSctV2JhZC1mdW5jdGlvbi1jYXN0IC1Xc2hhZG93IC1Xc3RyaWN0LXByb3RvdHlwZXMnCisgIHdhcm5fY3h4PSctV25vZXhjZXB0JworICBBQ19MQU5HX1BVU0goW0NdKQorICAjIENsYW5nIHN1cHBvcnRzIG1hbnkgb2YgR0NDJ3MgLVcgb3B0aW9ucywgYnV0IG9ubHkgaXNzdWVzIHdhcm5pbmdzCisgICMgb24gdGhlIG9uZXMgaXQgZG9lcyBub3QgcmVjb2duaXplLiAgSW4gdGhhdCBjYXNlLCBnbF9XQVJOX0FERAorICAjIHRoaW5rcyB0aGUgb3B0aW9uIGlzIHN1cHBvcnRlZCwgYW5kIHVua25vd24gb3B0aW9ucyBhcmUgdGhlbiBhZGRlZAorICAjIHRvIENGTEFHUy4gIEJ1dCB0aGVuLCB3aGVuIC1XZXJyb3IgaXMgYWRkZWQgaW4gdGhlIHRlc3Qgc3VpdGUgZm9yCisgICMgaW5zdGFuY2UsIHRoZSB3YXJuaW5nIGFib3V0IHRoZSB1bmtub3duIG9wdGlvbiB0dXJucyBpbnRvIGFuCisgICMgZXJyb3IuCisgICMKKyAgIyBUaGlzIHNob3VsZCBiZSBhZGRyZXNzZWQgYnkgZ251bGliJ3MgZ2xfV0FSTl9BREQsIGJ1dCBpbiB0aGUKKyAgIyBtZWFud2hpbGUsIHR1cm4gd2FybmluZ3MgYWJvdXQgdW5rbm93biBvcHRpb25zIGludG8gZXJyb3JzIGluCisgICMgQ0ZMQUdTLCBhbmQgcmVzdG9yZSBDRkxBR1MgYWZ0ZXIgdGhlIHRlc3RzLgorICBzYXZlX0NGTEFHUz0kQ0ZMQUdTCisgIGdsX1dBUk5fQUREKFstV2Vycm9yPXVua25vd24td2FybmluZy1vcHRpb25dLCBbQ0ZMQUdTXSkKKyAgZm9yIGkgaW4gJHdhcm5fY29tbW9uICR3YXJuX2M7CisgIGRvCisgICAgZ2xfV0FSTl9BREQoWyRpXSwgW1dBUk5fQ0ZMQUdTXSkKKyAgZG9uZQorICBnbF9XQVJOX0FERChbLVdlcnJvcl0sIFtXRVJST1JfQ0ZMQUdTXSkKKworICAjIFdhcm5pbmdzIGZvciB0aGUgdGVzdCBzdWl0ZSwgYW5kIG1heWJlIGZvciBiaXNvbiBpZiBHQ0MgaXMgbW9kZXJuCisgICMgZW5vdWdoLgorICBnbF9XQVJOX0FERChbLVdtaXNzaW5nLWRlY2xhcmF0aW9uc10sIFtXQVJOX0NGTEFHU19URVNUXSkKKyAgZ2xfV0FSTl9BREQoWy1XbWlzc2luZy1wcm90b3R5cGVzXSwgW1dBUk5fQ0ZMQUdTX1RFU1RdKQorICB0ZXN0ICRsdl9jdl9nY2NfcHJhZ21hX3B1c2hfd29ya3MgPSB5ZXMgJiYKKyAgICBBU19WQVJfQVBQRU5EKFtXQVJOX0NGTEFHU10sIFsiICRXQVJOX0NGTEFHU19URVNUIl0pCisKKyAgIyBXYXJuaW5ncyBmb3IgdGhlIHRlc3Qgc3VpdGUgb25seS4KKyAgZ2xfV0FSTl9BREQoWy1XdW5kZWZdLCBbV0FSTl9DRkxBR1NfVEVTVF0pCisgIGdsX1dBUk5fQUREKFstcGVkYW50aWNdLCBbV0FSTl9DRkxBR1NfVEVTVF0pCisgIENGTEFHUz0kc2F2ZV9DRkxBR1MKKyAgQUNfTEFOR19QT1AoW0NdKQorCisKKyAgQUNfTEFOR19QVVNIKFtDKytdKQorICBzYXZlX0NYWEZMQUdTPSRDWFhGTEFHUworICBnbF9XQVJOX0FERChbLVdlcnJvcj11bmtub3duLXdhcm5pbmctb3B0aW9uXSwgW0NYWEZMQUdTXSkKKyAgZm9yIGkgaW4gJHdhcm5fY29tbW9uICR3YXJuX2N4eDsKKyAgZG8KKyAgICBnbF9XQVJOX0FERChbJGldLCBbV0FSTl9DWFhGTEFHU10pCisgIGRvbmUKKyAgZ2xfV0FSTl9BREQoWy1XemVyby1hcy1udWxsLXBvaW50ZXItY29uc3RhbnRdLCBbV0FSTl9DWFhGTEFHU10sCisgICAgICAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oW10sIFtudWxscHRyXSldKQorICBnbF9XQVJOX0FERChbLVdlcnJvcl0sIFtXRVJST1JfQ1hYRkxBR1NdKQorICAjIFdhcm5pbmdzIGZvciB0aGUgdGVzdCBzdWl0ZSBvbmx5LgorICBnbF9XQVJOX0FERChbLVd1bmRlZl0sIFtXQVJOX0NYWEZMQUdTX1RFU1RdKQorICBnbF9XQVJOX0FERChbLXBlZGFudGljXSwgW1dBUk5fQ1hYRkxBR1NfVEVTVF0pCisgIENYWEZMQUdTPSRzYXZlX0NYWEZMQUdTCisgIEFDX0xBTkdfUE9QKFtDKytdKQogZmkKIAogQklTT05fVEVTVF9GT1JfV09SS0lOR19DX0NPTVBJTEVSCitCSVNPTl9DX0NPTVBJTEVSX1BPU0lYTFlfQ09SUkVDVAorQklTT05fVEVTVF9GT1JfV09SS0lOR19DWFhfQ09NUElMRVIKK0JJU09OX0NYWF9DT01QSUxFUl9QT1NJWExZX0NPUlJFQ1QKIAogQUNfQVJHX0VOQUJMRShbeWFjY10sCiAgIFtBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXlhY2NdLApAQCAtODIsMzUgKzE1NSw0MyBAQAogQUNfU1VCU1QoW1lBQ0NfTElCUkFSWV0pCiAKICMgQ2hlY2tzIGZvciBwcm9ncmFtcy4KK0FNX01JU1NJTkdfUFJPRyhbRE9UXSwgW2RvdF0pCiBBQ19QUk9HX0xFWAorJExFWF9JU19GTEVYIHx8IEFDX01TR19FUlJPUihbRmxleCBpcyByZXF1aXJlZF0pCiBBQ19QUk9HX1lBQ0MKIEFDX1BST0dfUkFOTElCCi1CSVNPTl9QUk9HX0dOVV9NNAotaWYgdGVzdCB4IiRhY19jdl9wcm9nX2dudV9tNCIgIT0geHllczsgdGhlbgotICBBQ19NU0dfRVJST1IoW0dOVSBNNCAxLjQgaXMgcmVxdWlyZWRdKQotZmkKK0FDX1BST0dfR05VX000CiBBQ19ERUZJTkVfVU5RVU9URUQoW000XSwgWyIkTTQiXSwgW0RlZmluZSB0byB0aGUgR05VIE00IGV4ZWN1dGFibGUgbmFtZS5dKQorQUNfREVGSU5FX1VOUVVPVEVEKFtNNF9HTlVfT1BUSU9OXSwgWyIkTTRfR05VIl0sIFtEZWZpbmUgdG8gIi1nIiBpZiBHTlUgTTQKK3N1cHBvcnRzIC1nLCBvdGhlcndpc2UgdG8gIiIuXSkKK0FDX1BBVEhfUFJPRyhbUEVSTF0sIFtwZXJsXSkKK2lmIHRlc3QgLXogIiRQRVJMIjsgdGhlbgorICAgQUNfTVNHX0VSUk9SKFtwZXJsIG5vdCBmb3VuZF0pCitmaQorQU1fTUlTU0lOR19QUk9HKFtIRUxQMk1BTl0sIFtoZWxwMm1hbl0pCitBQ19QQVRIX1BST0coW1hTTFRQUk9DXSwgW3hzbHRwcm9jXSkKK0FDX1NVQlNUKFtYU0xUUFJPQ10pCiAKICMgQ2hlY2tzIGZvciBoZWFkZXIgZmlsZXMuCiBBQ19DSEVDS19IRUFERVJTX09OQ0UoW2xvY2FsZS5oXSkKLUFNX1NUREJPT0xfSAogCiAjIENoZWNrcyBmb3IgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgogQUNfQ19JTkxJTkUKIAotIyBDaGVja3MgZm9yIHR5cGVzLgotQUNfQ0hFQ0tfVFlQRVMoW3VpbnRwdHJfdF0pCisjIEdudWxpYiAobGF0ZXIgY2hlY2tzKS4gIFB1dHRpbmcgdGhlbSBoZXJlIHJhdGhlciB0aGFuIHJpZ2h0IGFmdGVyCisjIGdsX0VBUkxZIGF2b2lkcyBzb21lIHJlZHVuZGFudCBjaGVja3MuCitnbF9JTklUCiAKICMgQ2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucy4KIEFDX0NIRUNLX0ZVTkNTX09OQ0UoW3NldGxvY2FsZV0pCiBBTV9XSVRIX0RNQUxMT0MKLUJJU09OX1BSRVJFUV9TVUJQSVBFCiBCSVNPTl9QUkVSRVFfVElNRVZBUgogCi0jIGdudWxpYiBhbmQgZ2V0dGV4dC4KLUdOVUxJQl9BVVRPQ09ORl9TTklQUEVUCi0jIFdlIHVzZSBwby9NYWtldmFycywgc28gd2UgbmVlZCBhdCBsZWFzdCBnZXR0ZXh0IDAuMTIuCi1BTV9HTlVfR0VUVEVYVF9WRVJTSU9OKFswLjEyXSkKKyMgR2V0dGV4dC4KKyMgV2UgdXNlIGdudWxpYiwgd2hpY2ggaXMgb25seSBndWFyYW50ZWVkIHRvIHdvcmsgcHJvcGVybHkgd2l0aCB0aGUKKyMgbGF0ZXN0IEdldHRleHQuCitBTV9HTlVfR0VUVEVYVChbZXh0ZXJuYWxdLCBbbmVlZC1uZ2V0dGV4dF0pCitBTV9HTlVfR0VUVEVYVF9WRVJTSU9OKFswLjE4XSkKIEJJU09OX0kxOE4KIAogIyBJbnRlcm5hdGlvbmFsaXplZCBwYXJzZXJzLgpAQCAtMTE5LDI2ICsyMDAsMzkgQEAKIGFjbG9jYWxkaXI9JyR7ZGF0YWRpcn0vYWNsb2NhbCcKIEFDX1NVQlNUKFthY2xvY2FsZGlyXSkKIAorIyBDcmVhdGUgdGhlIGJlbmNobWFyayBzY3JpcHQuCitBQ19DT05GSUdfRklMRVMoW2V0Yy9iZW5jaC5wbF0sIFtjaG1vZCAreCBldGMvYmVuY2gucGxdKQorCiAjIEluaXRpYWxpemUgdGhlIHRlc3Qgc3VpdGUuCiBBQ19DT05GSUdfVEVTVERJUih0ZXN0cykKIEFDX0NPTkZJR19GSUxFUyhbdGVzdHMvTWFrZWZpbGUgdGVzdHMvYXRsb2NhbF0pCiBBQ19DT05GSUdfRklMRVMoW3Rlc3RzL2Jpc29uXSwgW2NobW9kICt4IHRlc3RzL2Jpc29uXSkKIEFDX0NIRUNLX1BST0dTKFtWQUxHUklORF0sIFt2YWxncmluZF0pCi1BQ19QUk9HX0NYWAotQklTT05fVEVTVF9GT1JfV09SS0lOR19DWFhfQ09NUElMRVIKK2Nhc2UgJFZBTEdSSU5EOiRob3N0X29zIGluCisgICcnOiopIDs7CisgICo6ZGFyd2luKikKKyAgICAjIFNlZSBSRUFETUUtaGFja2luZy4KKyAgICAjIFZBTEdSSU5EKz0nIC0tc3VwcHJlc3Npb25zPSQoYWJzX3RvcF9zcmNkaXIpL2J1aWxkLWF1eC9kYXJ3aW4xMS40LjAudmFsZ3JpbmQnCisgICAgVkFMR1JJTkQ9OzsKKyAgKjoqKQorICAgIEFDX1NVQlNUKFtWQUxHUklORF9QUkVCSVNPTl0sIFsiJFZBTEdSSU5EIC1xIl0pOzsKK2VzYWMKKwogQU1fTUlTU0lOR19QUk9HKFtBVVRPTTRURV0sIFthdXRvbTR0ZV0pCiAjIE5lZWRlZCBieSB0ZXN0cy9hdGxvY2FsLmluLgogQUNfU1VCU1QoW0dDQ10pCi1PMENGTEFHUz1gZWNobyAkQ0ZMQUdTIHwgc2VkICdzLy1PW1swLTldXSAqLy8nYAotQUNfU1VCU1QoW08wQ0ZMQUdTXSkKLU8wQ1hYRkxBR1M9YGVjaG8gJENYWEZMQUdTIHwgc2VkICdzLy1PW1swLTldXSAqLy8nYAotQUNfU1VCU1QoW08wQ1hYRkxBR1NdKQorCitndF9KQVZBQ09NUChbMS4zXSkKK2d0X0pBVkFFWEVDCiAKIEFDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGUKLSAgICAgICAgICAgICAgICAgYnVpbGQtYXV4L01ha2VmaWxlCi0gICAgICAgICAgICAgICAgIHBvL01ha2VmaWxlLmluCi0gICAgICAgICAgICAgICAgIGRhdGEvTWFrZWZpbGUKKwkJIGJ1aWxkLWF1eC9NYWtlZmlsZQorCQkgcG8vTWFrZWZpbGUuaW4KKwkJIGRhdGEvTWFrZWZpbGUKKwkJIGV0Yy9NYWtlZmlsZQogCQkgZXhhbXBsZXMvTWFrZWZpbGUKIAkJICAgIGV4YW1wbGVzL2NhbGMrKy9NYWtlZmlsZQotICAgICAgICAgICAgICAgICBsaWIvTWFrZWZpbGUgc3JjL01ha2VmaWxlIGRvYy9NYWtlZmlsZV0pCisJCSBsaWIvTWFrZWZpbGUgc3JjL01ha2VmaWxlCisJCSBkb2MvTWFrZWZpbGUKKwkJICAgZG9jL3lhY2MuMV0pCiBBQ19PVVRQVVQKZGlmZiAtLWdpdCBhL2Rhcndpbi1saWIvYWxsb2NhLmggYi9kYXJ3aW4tbGliL2FsbG9jYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZDYxOGIKLS0tIC9kZXYvbnVsbAorKysgYi9kYXJ3aW4tbGliL2FsbG9jYS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8KKy8qIE1lbW9yeSBhbGxvY2F0aW9uIG9uIHRoZSBzdGFjay4KKworICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk5LCAyMDAxLTIwMDQsIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAgKi8KKworLyogQXZvaWQgdXNpbmcgdGhlIHN5bWJvbCBfQUxMT0NBX0ggaGVyZSwgYXMgQmlzb24gYXNzdW1lcyBfQUxMT0NBX0gKKyAgIG1lYW5zIHRoZXJlIGlzIGEgcmVhbCBhbGxvY2EgZnVuY3Rpb24uICAqLworI2lmbmRlZiBfR0xfQUxMT0NBX0gKKyNkZWZpbmUgX0dMX0FMTE9DQV9ICisKKy8qIGFsbG9jYSAoTikgcmV0dXJucyBhIHBvaW50ZXIgdG8gTiBieXRlcyBvZiBtZW1vcnkKKyAgIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2ssIHdoaWNoIHdpbGwgbGFzdCB1bnRpbCB0aGUgZnVuY3Rpb24gcmV0dXJucy4KKyAgIFVzZSBvZiBhbGxvY2Egc2hvdWxkIGJlIGF2b2lkZWQ6CisgICAgIC0gaW5zaWRlIGFyZ3VtZW50cyBvZiBmdW5jdGlvbiBjYWxscyAtIHVuZGVmaW5lZCBiZWhhdmlvdXIsCisgICAgIC0gaW4gaW5saW5lIGZ1bmN0aW9ucyAtIHRoZSBhbGxvY2F0aW9uIG1heSBhY3R1YWxseSBsYXN0IHVudGlsIHRoZQorICAgICAgIGNhbGxpbmcgZnVuY3Rpb24gcmV0dXJucywKKyAgICAgLSBmb3IgaHVnZSBOIChzYXksIE4gPj0gNjU1MzYpIC0geW91IG5ldmVyIGtub3cgaG93IGxhcmdlIChvciBzbWFsbCkKKyAgICAgICB0aGUgc3RhY2sgaXMsIGFuZCB3aGVuIHRoZSBzdGFjayBjYW5ub3QgZnVsZmlsbCB0aGUgbWVtb3J5IGFsbG9jYXRpb24KKyAgICAgICByZXF1ZXN0LCB0aGUgcHJvZ3JhbSBqdXN0IGNyYXNoZXMuCisgKi8KKworI2lmbmRlZiBhbGxvY2EKKyMgaWZkZWYgX19HTlVDX18KKyMgIGRlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorIyBlbGlmIGRlZmluZWQgX0FJWAorIyAgZGVmaW5lIGFsbG9jYSBfX2FsbG9jYQorIyBlbGlmIGRlZmluZWQgX01TQ19WRVIKKyMgIGluY2x1ZGUgPG1hbGxvYy5oPgorIyAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisjIGVsaWYgZGVmaW5lZCBfX0RFQ0MgJiYgZGVmaW5lZCBfX1ZNUworIyAgZGVmaW5lIGFsbG9jYSBfX0FMTE9DQQorIyBlbGlmIGRlZmluZWQgX19UQU5ERU0gJiYgZGVmaW5lZCBfVE5TX0VfVEFSR0VUCisjICBpZmRlZiAgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyMgIGVuZGlmCit2b2lkICpfYWxsb2NhICh1bnNpZ25lZCBzaG9ydCk7CisjICBwcmFnbWEgaW50cmluc2ljIChfYWxsb2NhKQorIyAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisjIGVsc2UKKyMgIGluY2x1ZGUgPHN0ZGRlZi5oPgorIyAgaWZkZWYgIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjICBlbmRpZgordm9pZCAqYWxsb2NhIChzaXplX3QpOworIyBlbmRpZgorI2VuZGlmCisKKyNlbmRpZiAvKiBfR0xfQUxMT0NBX0ggKi8KZGlmZiAtLWdpdCBhL2Rhcndpbi1saWIvYXJnLW5vbm51bGwuaCBiL2Rhcndpbi1saWIvYXJnLW5vbm51bGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGRiYWM3Ci0tLSAvZGV2L251bGwKKysrIGIvZGFyd2luLWxpYi9hcmctbm9ubnVsbC5oCkBAIC0wLDAgKzEsMTAgQEAKKy8qIF9HTF9BUkdfTk9OTlVMTCgobiwuLi4sbSkpIHRlbGxzIHRoZSBjb21waWxlciBhbmQgc3RhdGljIGFuYWx5emVyIHRvb2xzCisgICB0aGF0IHRoZSB2YWx1ZXMgcGFzc2VkIGFzIGFyZ3VtZW50cyBuLCAuLi4sIG0gbXVzdCBiZSBub24tTlVMTCBwb2ludGVycy4KKyAgIG4gPSAxIHN0YW5kcyBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50LCBuID0gMiBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCBldGMuICAqLworI2lmbmRlZiBfR0xfQVJHX05PTk5VTEwKKyMgaWYgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gMykgfHwgX19HTlVDX18gPiAzCisjICBkZWZpbmUgX0dMX0FSR19OT05OVUxMKHBhcmFtcykgX19hdHRyaWJ1dGVfXyAoKF9fbm9ubnVsbF9fIHBhcmFtcykpCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKQorIyBlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9kYXJ3aW4tbGliL2MrK2RlZnMuaCBiL2Rhcndpbi1saWIvYysrZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZDYzMjIKLS0tIC9kZXYvbnVsbAorKysgYi9kYXJ3aW4tbGliL2MrK2RlZnMuaApAQCAtMCwwICsxLDI1NSBAQAorI2lmbmRlZiBfR0xfQ1hYREVGU19ICisjZGVmaW5lIF9HTF9DWFhERUZTX0gKKworLyogVGhlIHRocmVlIG1vc3QgZnJlcXVlbnQgdXNlIGNhc2VzIG9mIHRoZXNlIG1hY3JvcyBhcmU6CisKKyAgICogRm9yIHByb3ZpZGluZyBhIHN1YnN0aXR1dGUgZm9yIGEgZnVuY3Rpb24gdGhhdCBpcyBtaXNzaW5nIG9uIHNvbWUKKyAgICAgcGxhdGZvcm1zLCBidXQgaXMgZGVjbGFyZWQgYW5kIHdvcmtzIGZpbmUgb24gdGhlIHBsYXRmb3JtcyBvbiB3aGljaAorICAgICBpdCBleGlzdHM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiAhQEhBVkVfRk9PQAorICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorCisgICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBhbGwgcGxhdGZvcm1zLAorICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBwbGF0Zm9ybXM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACisgICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyAgICAgICAjICAgdW5kZWYgZm9vCisgICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKyAgICAgICAjIGVsc2UKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorCisgICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBzb21lIHBsYXRmb3JtcworICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBvZiB0aGVtIGFuZAorICAgICBpcyBhZGRpdGlvbmFsbHkgZWl0aGVyIG1pc3Npbmcgb3IgdW5kZWNsYXJlZCBvbiBzb21lIG90aGVyIHBsYXRmb3JtczoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorICAgICAgICMgICB1bmRlZiBmb28KKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworICAgICAgICMgZWxzZQorICAgICAgICMgIGlmICFASEFWRV9GT09AICAgb3IgICBpZiAhQEhBVkVfREVDTF9GT09ACisgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKyovCisKKy8qIF9HTF9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cworIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybiAiQyIKKyNlbHNlCisjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuCisjZW5kaWYKKworLyogX0dMX0ZVTkNERUNMX1JQTCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBkZWNsYXJlcyBhIHJlcGxhY2VtZW50IGZ1bmN0aW9uLCBuYW1lZCBycGxfZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCisgICBFeGFtcGxlOgorICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyAqLworI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9GVU5DREVDTF9SUExfMSAocnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykKKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1JQTF8xKHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICBfR0xfRVhURVJOX0MgcmV0dHlwZSBycGxfZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisKKy8qIF9HTF9GVU5DREVDTF9TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgZGVjbGFyZXMgdGhlIHN5c3RlbSBmdW5jdGlvbiwgbmFtZWQgZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCisgICBFeGFtcGxlOgorICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyAqLworI2RlZmluZSBfR0xfRlVOQ0RFQ0xfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9FWFRFUk5fQyByZXR0eXBlIGZ1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworCisvKiBfR0xfQ1hYQUxJQVNfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCisgICB0aGF0IHJlZGlyZWN0cyB0byBycGxfZnVuYywgaWYgR05VTElCX05BTUVTUEFDRSBpcyBkZWZpbmVkLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0NYWEFMSUFTX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CisgKi8KKyNkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpycGxfZnVuYzsgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xIChmdW5jLCBycGxfZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIHJwbF9mdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50CisgICBkZWNsYXJhdGlvbi4gIEEgY2FzdCBpcyB1c2VkIHRvIHNpbGVuY2UgdGhlICJpbnZhbGlkIGNvbnZlcnNpb24iIGVycm9yCisgICB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6cnBsX2Z1bmMpOyAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCisgICB0aGF0IHJlZGlyZWN0cyB0byB0aGUgc3lzdGVtIHByb3ZpZGVkIGZ1bmN0aW9uIGZ1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UKKyAgIGlzIGRlZmluZWQuCisgICBFeGFtcGxlOgorICAgICBfR0xfQ1hYQUxJQVNfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKyAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisgIC8qIElmIHdlIHdlcmUgdG8gd3JpdGUKKyAgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsKKyAgICAgbGlrZSBhYm92ZSBpbiBfR0xfQ1hYQUxJQVNfUlBMXzEsIHRoZSBjb21waWxlciBjb3VsZCBvcHRpbWl6ZSBjYWxscworICAgICBiZXR0ZXIgKHJlbW92ZSBhbiBpbmRpcmVjdGlvbiB0aHJvdWdoIGEgJ3N0YXRpYycgcG9pbnRlciB2YXJpYWJsZSksCisgICAgIGJ1dCB0aGVuIHRoZSBfR0xfQ1hYQUxJQVNXQVJOIG1hY3JvIGJlbG93IHdvdWxkIGNhdXNlIGEgd2FybmluZyBub3Qgb25seQorICAgICBmb3IgdXNlcyBvZiA6OmZ1bmMgYnV0IGFsc28gZm9yIHVzZXMgb2YgR05VTElCX05BTUVTUEFDRTo6ZnVuYy4gICovCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7ICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBmdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGRlY2xhcmF0aW9uLgorICAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IgdGhhdCB3b3VsZAorICAgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6ZnVuYyk7IFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzLCByZXR0eXBlMiwgcGFyYW1ldGVyczIpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBpcyBwaWNrZWQgYW1vbmcgYSBzZXQgb2Ygb3ZlcmxvYWRlZCBmdW5jdGlvbnMsCisgICBuYW1lbHkgdGhlIG9uZSB3aXRoIHJldHR5cGUyIGFuZCBwYXJhbWV0ZXJzMi4gIFR3byBjb25zZWN1dGl2ZSBjYXN0cworICAgYXJlIHVzZWQgdG8gc2lsZW5jZSB0aGUgImNhbm5vdCBmaW5kIGEgbWF0Y2giIGFuZCAiaW52YWxpZCBjb252ZXJzaW9uIgorICAgZXJyb3JzIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorICAvKiBUaGUgb3V0ZXIgY2FzdCBtdXN0IGJlIGEgcmVpbnRlcnByZXRfY2FzdC4KKyAgICAgVGhlIGlubmVyIGNhc3Q6IFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzZXQgb2Ygb3ZlcmxvYWRlZAorICAgICBmdW5jdGlvbnMsIGl0IHdvcmtzIGFzIGEgc3RhdGljX2Nhc3Q8PiwgY2hvb3NpbmcgdGhlIGRlc2lnbmF0ZWQgdmFyaWFudC4KKyAgICAgV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNpbmdsZSB2YXJpYW50LCBpdCB3b3JrcyBhcyBhCisgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Pi4gVGhlIHBhcmVudGhlc2l6ZWQgY2FzdCBzeW50YXggd29ya3MgYm90aCB3YXlzLiAgKi8KKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAocmV0dHlwZTIoKilwYXJhbWV0ZXJzMikoOjpmdW5jKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU1dBUk4gKGZ1bmMpOworICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gOjpmdW5jIGlzIHVzZWQgYnV0IG5vdCB3aGVuCisgICBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICBmdW5jIG11c3QgYmUgZGVmaW5lZCB3aXRob3V0IG92ZXJsb2FkZWQKKyAgIHZhcmlhbnRzLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOXzEgKGZ1bmMsIEdOVUxJQl9OQU1FU1BBQ0UpCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzEoZnVuYyxuYW1lc3BhY2UpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk5fMiAoZnVuYywgbmFtZXNwYWNlKQorLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKyMgaWYgIV9fT1BUSU1JWkVfXworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgIF9HTF9XQVJOX09OX1VTRSAoZnVuYywgXAorICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAorICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKyAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTV0FSTjEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gdGhlIGdpdmVuIG92ZXJsb2FkZWQgdmFyaWFudCBvZiA6OmZ1bmMKKyAgIGlzIHVzZWQgYnV0IG5vdCB3aGVuIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOMV8xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBHTlVMSUJfTkFNRVNQQUNFKQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk4xXzIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIG5hbWVzcGFjZSkKKy8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAorICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCisjIGlmICFfX09QVElNSVpFX18KKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworIyBlbHNlCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworI2VuZGlmIC8qIF9HTF9DWFhERUZTX0ggKi8KZGlmZiAtLWdpdCBhL2Rhcndpbi1saWIvY29uZmlnLmggYi9kYXJ3aW4tbGliL2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YjI0ODAKLS0tIC9kZXYvbnVsbAorKysgYi9kYXJ3aW4tbGliL2NvbmZpZy5oCkBAIC0wLDAgKzEsMjI2OCBAQAorLyogbGliL2NvbmZpZy5oLiAgR2VuZXJhdGVkIGZyb20gY29uZmlnLmluLmggYnkgY29uZmlndXJlLiAgKi8KKy8qIGxpYi9jb25maWcuaW4uaC4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5hYyBieSBhdXRvaGVhZGVyLiAgKi8KKworLyogRGVmaW5lIGlmIGJ1aWxkaW5nIHVuaXZlcnNhbCAoaW50ZXJuYWwgaGVscGVyIG1hY3JvKSAqLworLyogI3VuZGVmIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRCAqLworCisvKiBEZWZpbmUgdG8gdGhlIG51bWJlciBvZiBiaXRzIGluIHR5cGUgJ3B0cmRpZmZfdCcuICovCisjZGVmaW5lIEJJVFNJWkVPRl9QVFJESUZGX1QgNjQKKworLyogRGVmaW5lIHRvIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0eXBlICdzaWdfYXRvbWljX3QnLiAqLworI2RlZmluZSBCSVRTSVpFT0ZfU0lHX0FUT01JQ19UIDMyCisKKy8qIERlZmluZSB0byB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gdHlwZSAnc2l6ZV90Jy4gKi8KKyNkZWZpbmUgQklUU0laRU9GX1NJWkVfVCA2NAorCisvKiBEZWZpbmUgdG8gdGhlIG51bWJlciBvZiBiaXRzIGluIHR5cGUgJ3djaGFyX3QnLiAqLworI2RlZmluZSBCSVRTSVpFT0ZfV0NIQVJfVCAzMgorCisvKiBEZWZpbmUgdG8gdGhlIG51bWJlciBvZiBiaXRzIGluIHR5cGUgJ3dpbnRfdCcuICovCisjZGVmaW5lIEJJVFNJWkVPRl9XSU5UX1QgMzIKKworLyogRGVmaW5lIGlmIHlvdSB3aXNoICpwcmludGYoKSBmdW5jdGlvbnMgdGhhdCBoYXZlIGEgc2FmZSBoYW5kbGluZyBvZgorICAgbm9uLUlFRUUtNzU0ICdsb25nIGRvdWJsZScgdmFsdWVzLiAqLworI2RlZmluZSBDSEVDS19QUklOVEZfU0FGRSAxCisKKy8qIERlZmluZSB0byBvbmUgb2YgYF9nZXRiNjcnLCBgR0VUQjY3JywgYGdldGI2NycgZm9yIENyYXktMiBhbmQgQ3JheS1ZTVAKKyAgIHN5c3RlbXMuIFRoaXMgZnVuY3Rpb24gaXMgcmVxdWlyZWQgZm9yIGBhbGxvY2EuYycgc3VwcG9ydCBvbiB0aG9zZSBzeXN0ZW1zLgorICAgKi8KKy8qICN1bmRlZiBDUkFZX1NUQUNLU0VHX0VORCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB1c2luZyBgYWxsb2NhLmMnLiAqLworLyogI3VuZGVmIENfQUxMT0NBICovCisKKy8qIERlZmluZSBhcyB0aGUgYml0IGluZGV4IGluIHRoZSB3b3JkIHdoZXJlIHRvIGZpbmQgYml0IDAgb2YgdGhlIGV4cG9uZW50IG9mCisgICAnZG91YmxlJy4gKi8KKyNkZWZpbmUgREJMX0VYUEJJVDBfQklUIDIwCisKKy8qIERlZmluZSBhcyB0aGUgd29yZCBpbmRleCB3aGVyZSB0byBmaW5kIHRoZSBleHBvbmVudCBvZiAnZG91YmxlJy4gKi8KKyNkZWZpbmUgREJMX0VYUEJJVDBfV09SRCAxCisKKy8qIERlZmluZSBhcyB0aGUgYml0IGluZGV4IGluIHRoZSB3b3JkIHdoZXJlIHRvIGZpbmQgdGhlIHNpZ24gb2YgJ2RvdWJsZScuICovCisvKiAjdW5kZWYgREJMX1NJR05CSVRfQklUICovCisKKy8qIERlZmluZSBhcyB0aGUgd29yZCBpbmRleCB3aGVyZSB0byBmaW5kIHRoZSBzaWduIG9mICdkb3VibGUnLiAqLworLyogI3VuZGVmIERCTF9TSUdOQklUX1dPUkQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgLy8gaXMgYSBmaWxlIHN5c3RlbSByb290IGRpc3RpbmN0IGZyb20gLy4gKi8KKy8qICN1bmRlZiBET1VCTEVfU0xBU0hfSVNfRElTVElOQ1RfUk9PVCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB0cmFuc2xhdGlvbiBvZiBwcm9ncmFtIG1lc3NhZ2VzIHRvIHRoZSB1c2VyJ3MgbmF0aXZlCisgICBsYW5ndWFnZSBpcyByZXF1ZXN0ZWQuICovCisvKiAjdW5kZWYgRU5BQkxFX05MUyAqLworCisvKiBEZWZpbmUgdGhpcyB0byAxIGlmIEZfRFVQRkQgYmVoYXZpb3IgZG9lcyBub3QgbWF0Y2ggUE9TSVggKi8KKy8qICN1bmRlZiBGQ05UTF9EVVBGRF9CVUdHWSAqLworCisvKiBEZWZpbmUgYXMgdGhlIGJpdCBpbmRleCBpbiB0aGUgd29yZCB3aGVyZSB0byBmaW5kIGJpdCAwIG9mIHRoZSBleHBvbmVudCBvZgorICAgJ2Zsb2F0Jy4gKi8KKyNkZWZpbmUgRkxUX0VYUEJJVDBfQklUIDIzCisKKy8qIERlZmluZSBhcyB0aGUgd29yZCBpbmRleCB3aGVyZSB0byBmaW5kIHRoZSBleHBvbmVudCBvZiAnZmxvYXQnLiAqLworI2RlZmluZSBGTFRfRVhQQklUMF9XT1JEIDAKKworLyogRGVmaW5lIGFzIHRoZSBiaXQgaW5kZXggaW4gdGhlIHdvcmQgd2hlcmUgdG8gZmluZCB0aGUgc2lnbiBvZiAnZmxvYXQnLiAqLworLyogI3VuZGVmIEZMVF9TSUdOQklUX0JJVCAqLworCisvKiBEZWZpbmUgYXMgdGhlIHdvcmQgaW5kZXggd2hlcmUgdG8gZmluZCB0aGUgc2lnbiBvZiAnZmxvYXQnLiAqLworLyogI3VuZGVmIEZMVF9TSUdOQklUX1dPUkQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgZm9wZW4oKSBmYWlscyB0byByZWNvZ25pemUgYSB0cmFpbGluZyBzbGFzaC4gKi8KKy8qICN1bmRlZiBGT1BFTl9UUkFJTElOR19TTEFTSF9CVUcgKi8KKworLyogRGVmaW5lIHRvIGEgQyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byAxIG9yIDAsIGRlcGVuZGluZworICAgd2hldGhlciB0aGUgZ251bGliIG1vZHVsZSBjbG9zZS1zdHJlYW0gc2hhbGwgYmUgY29uc2lkZXJlZCBwcmVzZW50LiAqLworI2RlZmluZSBHTlVMSUJfQ0xPU0VfU1RSRUFNIDEKKworLyogRGVmaW5lIHRvIGEgQyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byAxIG9yIDAsIGRlcGVuZGluZworICAgd2hldGhlciB0aGUgZ251bGliIG1vZHVsZSBkaXJuYW1lIHNoYWxsIGJlIGNvbnNpZGVyZWQgcHJlc2VudC4gKi8KKyNkZWZpbmUgR05VTElCX0RJUk5BTUUgMQorCisvKiBEZWZpbmUgdG8gYSBDIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIDEgb3IgMCwgZGVwZW5kaW5nCisgICB3aGV0aGVyIHRoZSBnbnVsaWIgbW9kdWxlIGZkLXNhZmVyLWZsYWcgc2hhbGwgYmUgY29uc2lkZXJlZCBwcmVzZW50LiAqLworI2RlZmluZSBHTlVMSUJfRkRfU0FGRVJfRkxBRyAxCisKKy8qIERlZmluZSB0byBhIEMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gMSBvciAwLCBkZXBlbmRpbmcKKyAgIHdoZXRoZXIgdGhlIGdudWxpYiBtb2R1bGUgZm9wZW4tc2FmZXIgc2hhbGwgYmUgY29uc2lkZXJlZCBwcmVzZW50LiAqLworI2RlZmluZSBHTlVMSUJfRk9QRU5fU0FGRVIgMQorCisvKiBEZWZpbmUgdG8gYSBDIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIDEgb3IgMCwgZGVwZW5kaW5nCisgICB3aGV0aGVyIHRoZSBnbnVsaWIgbW9kdWxlIGZzY2FuZiBzaGFsbCBiZSBjb25zaWRlcmVkIHByZXNlbnQuICovCisjZGVmaW5lIEdOVUxJQl9GU0NBTkYgMQorCisvKiBEZWZpbmUgdG8gYSBDIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIDEgb3IgMCwgZGVwZW5kaW5nCisgICB3aGV0aGVyIHRoZSBnbnVsaWIgbW9kdWxlIG1hbGxvYy1nbnUgc2hhbGwgYmUgY29uc2lkZXJlZCBwcmVzZW50LiAqLworI2RlZmluZSBHTlVMSUJfTUFMTE9DX0dOVSAxCisKKy8qIERlZmluZSB0byBhIEMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gMSBvciAwLCBkZXBlbmRpbmcKKyAgIHdoZXRoZXIgdGhlIGdudWxpYiBtb2R1bGUgcGlwZTItc2FmZXIgc2hhbGwgYmUgY29uc2lkZXJlZCBwcmVzZW50LiAqLworI2RlZmluZSBHTlVMSUJfUElQRTJfU0FGRVIgMQorCisvKiBEZWZpbmUgdG8gYSBDIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIDEgb3IgMCwgZGVwZW5kaW5nCisgICB3aGV0aGVyIHRoZSBnbnVsaWIgbW9kdWxlIHNjYW5mIHNoYWxsIGJlIGNvbnNpZGVyZWQgcHJlc2VudC4gKi8KKyNkZWZpbmUgR05VTElCX1NDQU5GIDEKKworLyogRGVmaW5lIHRvIGEgQyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byAxIG9yIDAsIGRlcGVuZGluZworICAgd2hldGhlciB0aGUgZ251bGliIG1vZHVsZSBzbnByaW50ZiBzaGFsbCBiZSBjb25zaWRlcmVkIHByZXNlbnQuICovCisjZGVmaW5lIEdOVUxJQl9TTlBSSU5URiAxCisKKy8qIERlZmluZSB0byBhIEMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gMSBvciAwLCBkZXBlbmRpbmcKKyAgIHdoZXRoZXIgdGhlIGdudWxpYiBtb2R1bGUgc3RyZXJyb3Igc2hhbGwgYmUgY29uc2lkZXJlZCBwcmVzZW50LiAqLworI2RlZmluZSBHTlVMSUJfU1RSRVJST1IgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIGNhbGxvYy1wb3NpeCBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9DQUxMT0NfUE9TSVggMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIGNsb2V4ZWMgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfQ0xPRVhFQyAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgY2xvc2Ugc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfQ0xPU0UgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIGR1cDIgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfRFVQMiAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgZW52aXJvbiBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9FTlZJUk9OIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBmY250bCBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9GQ05UTCAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgZm9wZW4gc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfRk9QRU4gMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIGZwcmludGYtcG9zaXggc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfRlBSSU5URl9QT1NJWCAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgZnJleHAgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfRlJFWFAgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIGZyZXhwbCBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9GUkVYUEwgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIGZzdGF0IHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX0ZTVEFUIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBnZXRkZWxpbSBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9HRVRERUxJTSAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgZ2V0ZHRhYmxlc2l6ZSBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9HRVREVEFCTEVTSVpFIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBnZXRsaW5lIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX0dFVExJTkUgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIGdldG9wdC1nbnUgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfR0VUT1BUX0dOVSAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgaXNuYW4gc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfSVNOQU4gMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIGlzbmFuZCBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9JU05BTkQgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIGlzbmFuZiBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9JU05BTkYgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIGlzbmFubCBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9JU05BTkwgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIGlzd2JsYW5rIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX0lTV0JMQU5LIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBsZGV4cGwgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfTERFWFBMIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBtYWxsb2MtcG9zaXggc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfTUFMTE9DX1BPU0lYIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBtYnJ0b3djIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX01CUlRPV0MgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIG1ic2NociBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9NQlNDSFIgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIG1ic2luaXQgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfTUJTSU5JVCAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgbWJzcmNociBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9NQlNSQ0hSIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBtZW1jaHIgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfTUVNQ0hSIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBvYnN0YWNrLXByaW50ZiBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9PQlNUQUNLX1BSSU5URiAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgb3BlbiBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9PUEVOIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBwZXJyb3Igc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfUEVSUk9SIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBwaXBlMiBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9QSVBFMiAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25hdHRyX2Rlc3Ryb3kgc2hvdWxkIGJlCisgICB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX1BPU0lYX1NQQVdOQVRUUl9ERVNUUk9ZIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bmF0dHJfaW5pdCBzaG91bGQgYmUgdGVzdGVkLgorICAgKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfUE9TSVhfU1BBV05BVFRSX0lOSVQgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9zZXRmbGFncyBzaG91bGQgYmUKKyAgIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfUE9TSVhfU1BBV05BVFRSX1NFVEZMQUdTIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bmF0dHJfc2V0c2lnbWFzayBzaG91bGQgYmUKKyAgIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfUE9TSVhfU1BBV05BVFRSX1NFVFNJR01BU0sgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXducCBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9QT1NJWF9TUEFXTlAgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZSBzaG91bGQKKyAgIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERENMT1NFIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkZHVwMiBzaG91bGQKKyAgIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDIgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuIHNob3VsZAorICAgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURET1BFTiAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3kgc2hvdWxkCisgICBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19ERVNUUk9ZIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfaW5pdCBzaG91bGQgYmUKKyAgIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0lOSVQgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHByaW50Zi1wb3NpeCBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9QUklOVEZfUE9TSVggMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHJhaXNlIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX1JBSVNFIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSByYXdtZW1jaHIgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfUkFXTUVNQ0hSIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSByZWFsbG9jLXBvc2l4IHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX1JFQUxMT0NfUE9TSVggMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHNpZ2FjdGlvbiBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9TSUdBQ1RJT04gMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHNpZ25iaXQgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfU0lHTkJJVCAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgc2lncHJvY21hc2sgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfU0lHUFJPQ01BU0sgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHNucHJpbnRmIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX1NOUFJJTlRGIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBzcHJpbnRmLXBvc2l4IHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX1NQUklOVEZfUE9TSVggMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHN0YXQgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfU1RBVCAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgc3RwY3B5IHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX1NUUENQWSAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgc3RyY2hybnVsIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX1NUUkNIUk5VTCAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgc3RyZHVwIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX1NUUkRVUCAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgc3RyZXJyb3Igc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfU1RSRVJST1IgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHN0cmVycm9yX3Igc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfU1RSRVJST1JfUiAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgc3RybmR1cCBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9TVFJORFVQIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBzdHJubGVuIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX1NUUk5MRU4gMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHN0cnZlcnNjbXAgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfU1RSVkVSU0NNUCAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgdW5zZXRlbnYgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfVU5TRVRFTlYgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHZmcHJpbnRmLXBvc2l4IHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX1ZGUFJJTlRGX1BPU0lYIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSB2c25wcmludGYgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfVlNOUFJJTlRGIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSB2c3ByaW50Zi1wb3NpeCBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9WU1BSSU5URl9QT1NJWCAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgd2FpdHBpZCBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9XQUlUUElEIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSB3Y3dpZHRoIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX1dDV0lEVEggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGFsYXJtJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9BTEFSTSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlICdhbGxvY2EnIGFmdGVyIGluY2x1ZGluZyA8YWxsb2NhLmg+LCBhIGhlYWRlciB0aGF0CisgICBtYXkgYmUgc3VwcGxpZWQgYnkgdGhpcyBkaXN0cmlidXRpb24uICovCisjZGVmaW5lIEhBVkVfQUxMT0NBIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgPGFsbG9jYS5oPiBhbmQgaXQgc2hvdWxkIGJlIHVzZWQgKG5vdCBvbiBVbHRyaXgpLgorICAgKi8KKyNkZWZpbmUgSEFWRV9BTExPQ0FfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YnAtc3ltLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfQlBfU1lNX0ggKi8KKworLyogRGVmaW5lIGlmIHRoZSAnY2FsbG9jJyBmdW5jdGlvbiBpcyBQT1NJWCBjb21wbGlhbnQuICovCisjZGVmaW5lIEhBVkVfQ0FMTE9DX1BPU0lYIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjYXRnZXRzJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9DQVRHRVRTIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIE1hYyBPUyBYIGZ1bmN0aW9uIENGTG9jYWxlQ29weUN1cnJlbnQgaW4gdGhlCisgICBDb3JlRm91bmRhdGlvbiBmcmFtZXdvcmsuICovCisjZGVmaW5lIEhBVkVfQ0ZMT0NBTEVDT1BZQ1VSUkVOVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBNYWMgT1MgWCBmdW5jdGlvbiBDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlIGluCisgICB0aGUgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLiAqLworI2RlZmluZSBIQVZFX0NGUFJFRkVSRU5DRVNDT1BZQVBQVkFMVUUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgY2xvY2tfdCcuICovCisjZGVmaW5lIEhBVkVfQ0xPQ0tfVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY29uZnN0cicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9DT05GU1RSICovCisKKy8qIERlZmluZSBpZiB0aGUgY29weXNpZ25mIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGluIDxtYXRoLmg+IGFuZCBhdmFpbGFibGUgaW4KKyAgIGxpYmMuICovCisvKiAjdW5kZWYgSEFWRV9DT1BZU0lHTkZfSU5fTElCQyAqLworCisvKiBEZWZpbmUgaWYgdGhlIGNvcHlzaWdubCBmdW5jdGlvbiBpcyBkZWNsYXJlZCBpbiA8bWF0aC5oPiBhbmQgYXZhaWxhYmxlIGluCisgICBsaWJjLiAqLworLyogI3VuZGVmIEhBVkVfQ09QWVNJR05MX0lOX0xJQkMgKi8KKworLyogRGVmaW5lIGlmIHRoZSBjb3B5c2lnbiBmdW5jdGlvbiBpcyBkZWNsYXJlZCBpbiA8bWF0aC5oPiBhbmQgYXZhaWxhYmxlIGluCisgICBsaWJjLiAqLworLyogI3VuZGVmIEhBVkVfQ09QWVNJR05fSU5fTElCQyAqLworCisvKiBEZWZpbmUgaWYgdGhlIEdOVSBkY2dldHRleHQoKSBmdW5jdGlvbiBpcyBhbHJlYWR5IHByZXNlbnQgb3IgcHJlaW5zdGFsbGVkLgorICAgKi8KKy8qICN1bmRlZiBIQVZFX0RDR0VUVEVYVCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGNsZWFyZXJyX3VubG9ja2VkJywgYW5kIHRvIDAgaWYKKyAgIHlvdSBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX0NMRUFSRVJSX1VOTE9DS0VEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBjbG9jaycsIGFuZCB0byAwIGlmIHlvdSBkb24ndC4KKyAgICovCisjZGVmaW5lIEhBVkVfREVDTF9DTE9DSyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgY29weXNpZ24nLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworLyogI3VuZGVmIEhBVkVfREVDTF9DT1BZU0lHTiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGNvcHlzaWduZicsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisvKiAjdW5kZWYgSEFWRV9ERUNMX0NPUFlTSUdORiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGNvcHlzaWdubCcsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisvKiAjdW5kZWYgSEFWRV9ERUNMX0NPUFlTSUdOTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGZlb2ZfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfRkVPRl9VTkxPQ0tFRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZmVycm9yX3VubG9ja2VkJywgYW5kIHRvIDAgaWYKKyAgIHlvdSBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX0ZFUlJPUl9VTkxPQ0tFRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZmZsdXNoX3VubG9ja2VkJywgYW5kIHRvIDAgaWYKKyAgIHlvdSBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX0ZGTFVTSF9VTkxPQ0tFRCAwCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZmdldHNfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZgorICAgeW91IGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfRkdFVFNfVU5MT0NLRUQgMAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGZwdXRjX3VubG9ja2VkJywgYW5kIHRvIDAgaWYKKyAgIHlvdSBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX0ZQVVRDX1VOTE9DS0VEIDAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBmcHV0c191bmxvY2tlZCcsIGFuZCB0byAwIGlmCisgICB5b3UgZG9uJ3QuICovCisjZGVmaW5lIEhBVkVfREVDTF9GUFVUU19VTkxPQ0tFRCAwCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZnJlYWRfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZgorICAgeW91IGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfRlJFQURfVU5MT0NLRUQgMAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGZ3cml0ZV91bmxvY2tlZCcsIGFuZCB0byAwIGlmCisgICB5b3UgZG9uJ3QuICovCisjZGVmaW5lIEhBVkVfREVDTF9GV1JJVEVfVU5MT0NLRUQgMAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGdldGNoYXJfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZgorICAgeW91IGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfR0VUQ0hBUl9VTkxPQ0tFRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZ2V0Y191bmxvY2tlZCcsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjZGVmaW5lIEhBVkVfREVDTF9HRVRDX1VOTE9DS0VEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBnZXRkZWxpbScsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjZGVmaW5lIEhBVkVfREVDTF9HRVRERUxJTSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZ2V0ZW52JywgYW5kIHRvIDAgaWYgeW91IGRvbid0LgorICAgKi8KKyNkZWZpbmUgSEFWRV9ERUNMX0dFVEVOViAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZ2V0bGluZScsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjZGVmaW5lIEhBVkVfREVDTF9HRVRMSU5FIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBnZXRydXNhZ2UnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfR0VUUlVTQUdFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBpc3dibGFuaycsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjZGVmaW5lIEhBVkVfREVDTF9JU1dCTEFOSyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgbWJydG93YycsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisvKiAjdW5kZWYgSEFWRV9ERUNMX01CUlRPV0MgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBtYnNpbml0JywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKy8qICN1bmRlZiBIQVZFX0RFQ0xfTUJTSU5JVCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIGRlY2xhcmF0aW9uIG9mIG1ic3dpZHRoKCkgaW4gPHdjaGFyLmg+LCBhbmQgdG8gMAorICAgb3RoZXJ3aXNlLiAqLworI2RlZmluZSBIQVZFX0RFQ0xfTUJTV0lEVEhfSU5fV0NIQVJfSCAwCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgb2JzdGFja19wcmludGYnLCBhbmQgdG8gMCBpZgorICAgeW91IGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfT0JTVEFDS19QUklOVEYgMAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHByb2dyYW1faW52b2NhdGlvbl9uYW1lJywgYW5kCisgICB0byAwIGlmIHlvdSBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX1BST0dSQU1fSU5WT0NBVElPTl9OQU1FIDAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZScsCisgICBhbmQgdG8gMCBpZiB5b3UgZG9uJ3QuICovCisjZGVmaW5lIEhBVkVfREVDTF9QUk9HUkFNX0lOVk9DQVRJT05fU0hPUlRfTkFNRSAwCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgcHV0Y2hhcl91bmxvY2tlZCcsIGFuZCB0byAwIGlmCisgICB5b3UgZG9uJ3QuICovCisjZGVmaW5lIEhBVkVfREVDTF9QVVRDSEFSX1VOTE9DS0VEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBwdXRjX3VubG9ja2VkJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX1BVVENfVU5MT0NLRUQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHNucHJpbnRmJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX1NOUFJJTlRGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBzdHJkdXAnLCBhbmQgdG8gMCBpZiB5b3UgZG9uJ3QuCisgICAqLworI2RlZmluZSBIQVZFX0RFQ0xfU1RSRFVQIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBzdHJlcnJvcl9yJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX1NUUkVSUk9SX1IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHN0cm5kdXAnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfU1RSTkRVUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgc3RybmxlbicsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjZGVmaW5lIEhBVkVfREVDTF9TVFJOTEVOIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBzeXNjb25mJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX1NZU0NPTkYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHRpbWVzJywgYW5kIHRvIDAgaWYgeW91IGRvbid0LgorICAgKi8KKyNkZWZpbmUgSEFWRV9ERUNMX1RJTUVTIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGB0b3dsb3dlcicsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisvKiAjdW5kZWYgSEFWRV9ERUNMX1RPV0xPV0VSICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgdW5zZXRlbnYnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfVU5TRVRFTlYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHZzbnByaW50ZicsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjZGVmaW5lIEhBVkVfREVDTF9WU05QUklOVEYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHdjd2lkdGgnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfV0NXSURUSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgX3NucHJpbnRmJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX19TTlBSSU5URiAwCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgX19mcGVuZGluZycsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjZGVmaW5lIEhBVkVfREVDTF9fX0ZQRU5ESU5HIDAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlICdkdXAyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9EVVAyIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBlbnZpcm9uLiAqLworLyogI3VuZGVmIEhBVkVfRU5WSVJPTl9ERUNMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmNudGwnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZDTlRMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxmZWF0dXJlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0ZFQVRVUkVTX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmbG9ja2ZpbGUnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfRkxPQ0tGSUxFICovCisKKy8qIERlZmluZSBpZiB0aGUgZnJleHBsIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBpbiBsaWJjLiAqLworI2RlZmluZSBIQVZFX0ZSRVhQTF9JTl9MSUJDIDEKKworLyogRGVmaW5lIGlmIHRoZSBmcmV4cCBmdW5jdGlvbiBpcyBhdmFpbGFibGUgaW4gbGliYy4gKi8KKyNkZWZpbmUgSEFWRV9GUkVYUF9JTl9MSUJDIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmdW5sb2NrZmlsZScgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9GVU5MT0NLRklMRSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGRlbGltJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRERUxJTSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0ZHRhYmxlc2l6ZScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VURFRBQkxFU0laRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Z2V0b3B0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0dFVE9QVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRvcHRfbG9uZ19vbmx5JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRPUFRfTE9OR19PTkxZIDEKKworLyogRGVmaW5lIGlmIHRoZSBHTlUgZ2V0dGV4dCgpIGZ1bmN0aW9uIGlzIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQuICovCisvKiAjdW5kZWYgSEFWRV9HRVRURVhUICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgaWNvbnYoKSBmdW5jdGlvbiBhbmQgaXQgd29ya3MuICovCisjZGVmaW5lIEhBVkVfSUNPTlYgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdpbnRtYXhfdCcgdHlwZSBpbiA8c3RkaW50Lmg+IG9yIDxpbnR0eXBlcy5oPi4gKi8KKyNkZWZpbmUgSEFWRV9JTlRNQVhfVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAxCisKKy8qIERlZmluZSBpZiA8aW50dHlwZXMuaD4gZXhpc3RzLCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwgYW5kCisgICBkZWNsYXJlcyB1aW50bWF4X3QuICovCisjZGVmaW5lIEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlzYXNjaWknIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0lTQVNDSUkgMQorCisvKiBEZWZpbmUgaWYgdGhlIGlzbmFuKGRvdWJsZSkgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGluIGxpYmMuICovCisjZGVmaW5lIEhBVkVfSVNOQU5EX0lOX0xJQkMgMQorCisvKiBEZWZpbmUgaWYgdGhlIGlzbmFuKGZsb2F0KSBmdW5jdGlvbiBpcyBhdmFpbGFibGUgaW4gbGliYy4gKi8KKyNkZWZpbmUgSEFWRV9JU05BTkZfSU5fTElCQyAxCisKKy8qIERlZmluZSBpZiB0aGUgaXNuYW4obG9uZyBkb3VibGUpIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBpbiBsaWJjLiAqLworLyogI3VuZGVmIEhBVkVfSVNOQU5MX0lOX0xJQkMgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpc3dibGFuaycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfSVNXQkxBTksgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlzd2NudHJsJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JU1dDTlRSTCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSA8bGFuZ2luZm8uaD4gYW5kIG5sX2xhbmdpbmZvKENPREVTRVQpLiAqLworI2RlZmluZSBIQVZFX0xBTkdJTkZPX0NPREVTRVQgMQorCisvKiBEZWZpbmUgaWYgdGhlIGxkZXhwbCgpIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZS4gKi8KKyNkZWZpbmUgSEFWRV9MREVYUEwgMQorCisvKiBEZWZpbmUgaWYgdGhlIGxkZXhwbCBmdW5jdGlvbiBpcyBhdmFpbGFibGUgaW4gbGliYy4gKi8KKyNkZWZpbmUgSEFWRV9MREVYUExfSU5fTElCQyAxCisKKy8qIERlZmluZSBpZiB0aGUgbGRleHAgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGluIGxpYmMuICovCisjZGVmaW5lIEhBVkVfTERFWFBfSU5fTElCQyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bG9jYWxlLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0xPQ0FMRV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgJ2xvbmcgbG9uZyBpbnQnLiAqLworI2RlZmluZSBIQVZFX0xPTkdfTE9OR19JTlQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxzdGF0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9MU1RBVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdXIgc3lzdGVtIGhhcyBhIEdOVSBsaWJjIGNvbXBhdGlibGUgJ21hbGxvYycgZnVuY3Rpb24sIGFuZAorICAgdG8gMCBvdGhlcndpc2UuICovCisjZGVmaW5lIEhBVkVfTUFMTE9DX0dOVSAxCisKKy8qIERlZmluZSBpZiB0aGUgJ21hbGxvYycgZnVuY3Rpb24gaXMgUE9TSVggY29tcGxpYW50LiAqLworI2RlZmluZSBIQVZFX01BTExPQ19QT1NJWCAxCisKKy8qIERlZmluZSB0byAxIGlmIG1tYXAoKSdzIE1BUF9BTk9OWU1PVVMgZmxhZyBpcyBhdmFpbGFibGUgYWZ0ZXIgaW5jbHVkaW5nCisgICBjb25maWcuaCBhbmQgPHN5cy9tbWFuLmg+LiAqLworI2RlZmluZSBIQVZFX01BUF9BTk9OWU1PVVMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1hdGguaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTUFUSF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtYnJ0b3djJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9NQlJUT1dDIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtYnNpbml0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9NQlNJTklUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgPHdjaGFyLmg+IGRlY2xhcmVzIG1ic3RhdGVfdC4gKi8KKyNkZWZpbmUgSEFWRV9NQlNUQVRFX1QgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9NRU1PUllfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbXByb3RlY3QnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX01QUk9URUNUIDEKKworLyogRGVmaW5lIHRvIDEgb24gTVNWQyBwbGF0Zm9ybXMgdGhhdCBoYXZlIHRoZSAiaW52YWxpZCBwYXJhbWV0ZXIgaGFuZGxlciIKKyAgIGNvbmNlcHQuICovCisvKiAjdW5kZWYgSEFWRV9NU1ZDX0lOVkFMSURfUEFSQU1FVEVSX0hBTkRMRVIgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBubF9sYW5naW5mbycgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9OTF9MQU5HSU5GTyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBsaWJjIGluY2x1ZGVzIG9ic3RhY2tzLiAqLworLyogI3VuZGVmIEhBVkVfT0JTVEFDSyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG9ic3RhY2tfcHJpbnRmJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX09CU1RBQ0tfUFJJTlRGICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cGF0aHMuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9QQVRIU19IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcGlwZScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUElQRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcGlwZTInIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfUElQRTIgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwb3NpeF9zcGF3bicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUE9TSVhfU1BBV04gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgcG9zaXhfc3Bhd25hdHRyX3QnLiAqLworI2RlZmluZSBIQVZFX1BPU0lYX1NQQVdOQVRUUl9UIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190Jy4gKi8KKyNkZWZpbmUgSEFWRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfVCAxCisKKy8qIERlZmluZSBpZiB0aGUgPHB0aHJlYWQuaD4gZGVmaW5lcyBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRS4gKi8KKyNkZWZpbmUgSEFWRV9QVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSAxCisKKy8qIERlZmluZSBpZiB0aGUgUE9TSVggbXVsdGl0aHJlYWRpbmcgbGlicmFyeSBoYXMgcmVhZC93cml0ZSBsb2Nrcy4gKi8KKyNkZWZpbmUgSEFWRV9QVEhSRUFEX1JXTE9DSyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmFpc2UnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1JBSVNFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByYXdtZW1jaHInIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfUkFXTUVNQ0hSICovCisKKy8qIERlZmluZSB0byAxIGlmIGFjb3NmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfQUNPU0YgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBhY29zbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0FDT1NMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgYXNpbmYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9BU0lORiAxCisKKy8qIERlZmluZSB0byAxIGlmIGFzaW5sIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfQVNJTkwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBhdGFuZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0FUQU5GIDEKKworLyogRGVmaW5lIHRvIDEgaWYgYXRhbmwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9BVEFOTCAxCisKKy8qIERlZmluZSB0byAxIGlmIGF0b2xsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfQVRPTEwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBidG93YyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0JUT1dDIDEKKworLyogRGVmaW5lIHRvIDEgaWYgY2Fub25pY2FsaXplX2ZpbGVfbmFtZSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcKKyAgIG1hY3Jvcy4gKi8KKy8qICN1bmRlZiBIQVZFX1JBV19ERUNMX0NBTk9OSUNBTElaRV9GSUxFX05BTUUgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgY2JydCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0NCUlQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBjYnJ0ZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0NCUlRGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgY2JydGwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9DQlJUTCAxCisKKy8qIERlZmluZSB0byAxIGlmIGNlaWxmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfQ0VJTEYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBjZWlsbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0NFSUxMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgY2hkaXIgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9DSERJUiAxCisKKy8qIERlZmluZSB0byAxIGlmIGNob3duIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfQ0hPV04gMQorCisvKiBEZWZpbmUgdG8gMSBpZiBjb3B5c2lnbiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0NPUFlTSUdOIDEKKworLyogRGVmaW5lIHRvIDEgaWYgY29weXNpZ25mIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfQ09QWVNJR05GIDEKKworLyogRGVmaW5lIHRvIDEgaWYgY29weXNpZ25sIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfQ09QWVNJR05MIDEKKworLyogRGVmaW5lIHRvIDEgaWYgY29zZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0NPU0YgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBjb3NoZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0NPU0hGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgY29zbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0NPU0wgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBkcHJpbnRmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfRFBSSU5URiAxCisKKy8qIERlZmluZSB0byAxIGlmIGR1cCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0RVUCAxCisKKy8qIERlZmluZSB0byAxIGlmIGR1cDIgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9EVVAyIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZHVwMyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworLyogI3VuZGVmIEhBVkVfUkFXX0RFQ0xfRFVQMyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBlbmR1c2Vyc2hlbGwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9FTkRVU0VSU0hFTEwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBlbnZpcm9uIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisvKiAjdW5kZWYgSEFWRV9SQVdfREVDTF9FTlZJUk9OICovCisKKy8qIERlZmluZSB0byAxIGlmIGV1aWRhY2Nlc3MgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKy8qICN1bmRlZiBIQVZFX1JBV19ERUNMX0VVSURBQ0NFU1MgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgZXhwMiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0VYUDIgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBleHAyZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0VYUDJGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZXhwMmwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9FWFAyTCAxCisKKy8qIERlZmluZSB0byAxIGlmIGV4cGYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9FWFBGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZXhwbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0VYUEwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBleHBtMSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0VYUE0xIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZXhwbTFmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfRVhQTTFGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZXhwbTFsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfRVhQTTFMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZmFic2YgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9GQUJTRiAxCisKKy8qIERlZmluZSB0byAxIGlmIGZhYnNsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfRkFCU0wgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBmYWNjZXNzYXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKy8qICN1bmRlZiBIQVZFX1JBV19ERUNMX0ZBQ0NFU1NBVCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBmY2hkaXIgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9GQ0hESVIgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBmY2htb2RhdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworLyogI3VuZGVmIEhBVkVfUkFXX0RFQ0xfRkNITU9EQVQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgZmNob3duYXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKy8qICN1bmRlZiBIQVZFX1JBV19ERUNMX0ZDSE9XTkFUICovCisKKy8qIERlZmluZSB0byAxIGlmIGZjbnRsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfRkNOVEwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBmZGF0YXN5bmMgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKy8qICN1bmRlZiBIQVZFX1JBV19ERUNMX0ZEQVRBU1lOQyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBmZnNsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfRkZTTCAxCisKKy8qIERlZmluZSB0byAxIGlmIGZmc2xsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisvKiAjdW5kZWYgSEFWRV9SQVdfREVDTF9GRlNMTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBmbG9vcmYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9GTE9PUkYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBmbG9vcmwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9GTE9PUkwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBmbWEgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9GTUEgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBmbWFmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfRk1BRiAxCisKKy8qIERlZmluZSB0byAxIGlmIGZtYWwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9GTUFMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZm1vZCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0ZNT0QgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBmbW9kZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0ZNT0RGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZm1vZGwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9GTU9ETCAxCisKKy8qIERlZmluZSB0byAxIGlmIGZwdXJnZSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0ZQVVJHRSAxCisKKy8qIERlZmluZSB0byAxIGlmIGZyZXhwZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0ZSRVhQRiAxCisKKy8qIERlZmluZSB0byAxIGlmIGZyZXhwbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0ZSRVhQTCAxCisKKy8qIERlZmluZSB0byAxIGlmIGZzZWVrbyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0ZTRUVLTyAxCisKKy8qIERlZmluZSB0byAxIGlmIGZzdGF0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfRlNUQVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBmc3RhdGF0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisvKiAjdW5kZWYgSEFWRV9SQVdfREVDTF9GU1RBVEFUICovCisKKy8qIERlZmluZSB0byAxIGlmIGZzeW5jIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfRlNZTkMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBmdGVsbG8gaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9GVEVMTE8gMQorCisvKiBEZWZpbmUgdG8gMSBpZiBmdHJ1bmNhdGUgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9GVFJVTkNBVEUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBmdXRpbWVucyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworLyogI3VuZGVmIEhBVkVfUkFXX0RFQ0xfRlVUSU1FTlMgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgZ2V0Y3dkIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfR0VUQ1dEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZ2V0ZGVsaW0gaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9HRVRERUxJTSAxCisKKy8qIERlZmluZSB0byAxIGlmIGdldGRvbWFpbm5hbWUgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9HRVRET01BSU5OQU1FIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZ2V0ZHRhYmxlc2l6ZSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0dFVERUQUJMRVNJWkUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBnZXRncm91cHMgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9HRVRHUk9VUFMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBnZXRob3N0bmFtZSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0dFVEhPU1ROQU1FIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZ2V0bGluZSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0dFVExJTkUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBnZXRsb2FkYXZnIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfR0VUTE9BREFWRyAxCisKKy8qIERlZmluZSB0byAxIGlmIGdldGxvZ2luIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfR0VUTE9HSU4gMQorCisvKiBEZWZpbmUgdG8gMSBpZiBnZXRsb2dpbl9yIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfR0VUTE9HSU5fUiAxCisKKy8qIERlZmluZSB0byAxIGlmIGdldHBhZ2VzaXplIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfR0VUUEFHRVNJWkUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBnZXRzIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfR0VUUyAxCisKKy8qIERlZmluZSB0byAxIGlmIGdldHN1Ym9wdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0dFVFNVQk9QVCAxCisKKy8qIERlZmluZSB0byAxIGlmIGdldHVzZXJzaGVsbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0dFVFVTRVJTSEVMTCAxCisKKy8qIERlZmluZSB0byAxIGlmIGdyYW50cHQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9HUkFOVFBUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZ3JvdXBfbWVtYmVyIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisvKiAjdW5kZWYgSEFWRV9SQVdfREVDTF9HUk9VUF9NRU1CRVIgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgaHlwb3RmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfSFlQT1RGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgaHlwb3RsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfSFlQT1RMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgaWxvZ2IgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9JTE9HQiAxCisKKy8qIERlZmluZSB0byAxIGlmIGlsb2diZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0lMT0dCRiAxCisKKy8qIERlZmluZSB0byAxIGlmIGlsb2dibCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0lMT0dCTCAxCisKKy8qIERlZmluZSB0byAxIGlmIGltYXhhYnMgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9JTUFYQUJTIDEKKworLyogRGVmaW5lIHRvIDEgaWYgaW1heGRpdiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0lNQVhESVYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBpbml0c3RhdGUgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9JTklUU1RBVEUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBpbml0c3RhdGVfciBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworLyogI3VuZGVmIEhBVkVfUkFXX0RFQ0xfSU5JVFNUQVRFX1IgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgaXNhdHR5IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfSVNBVFRZIDEKKworLyogRGVmaW5lIHRvIDEgaWYgaXN3Y3R5cGUgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9JU1dDVFlQRSAxCisKKy8qIERlZmluZSB0byAxIGlmIGxjaG1vZCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0xDSE1PRCAxCisKKy8qIERlZmluZSB0byAxIGlmIGxjaG93biBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0xDSE9XTiAxCisKKy8qIERlZmluZSB0byAxIGlmIGxkZXhwZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0xERVhQRiAxCisKKy8qIERlZmluZSB0byAxIGlmIGxkZXhwbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0xERVhQTCAxCisKKy8qIERlZmluZSB0byAxIGlmIGxpbmsgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9MSU5LIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbGlua2F0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisvKiAjdW5kZWYgSEFWRV9SQVdfREVDTF9MSU5LQVQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgbG9nIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTE9HIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbG9nMTAgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9MT0cxMCAxCisKKy8qIERlZmluZSB0byAxIGlmIGxvZzEwZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0xPRzEwRiAxCisKKy8qIERlZmluZSB0byAxIGlmIGxvZzEwbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0xPRzEwTCAxCisKKy8qIERlZmluZSB0byAxIGlmIGxvZzFwIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTE9HMVAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBsb2cxcGYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9MT0cxUEYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBsb2cxcGwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9MT0cxUEwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBsb2cyIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTE9HMiAxCisKKy8qIERlZmluZSB0byAxIGlmIGxvZzJmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTE9HMkYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBsb2cybCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0xPRzJMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbG9nYiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0xPR0IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBsb2diZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0xPR0JGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbG9nYmwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9MT0dCTCAxCisKKy8qIERlZmluZSB0byAxIGlmIGxvZ2YgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9MT0dGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbG9nbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0xPR0wgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBsc2VlayBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0xTRUVLIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbHN0YXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9MU1RBVCAxCisKKy8qIERlZmluZSB0byAxIGlmIG1icmxlbiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX01CUkxFTiAxCisKKy8qIERlZmluZSB0byAxIGlmIG1icnRvd2MgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9NQlJUT1dDIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbWJzaW5pdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX01CU0lOSVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBtYnNucnRvd2NzIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTUJTTlJUT1dDUyAxCisKKy8qIERlZmluZSB0byAxIGlmIG1ic3J0b3djcyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX01CU1JUT1dDUyAxCisKKy8qIERlZmluZSB0byAxIGlmIG1lbW1lbSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX01FTU1FTSAxCisKKy8qIERlZmluZSB0byAxIGlmIG1lbXBjcHkgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKy8qICN1bmRlZiBIQVZFX1JBV19ERUNMX01FTVBDUFkgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgbWVtcmNociBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworLyogI3VuZGVmIEhBVkVfUkFXX0RFQ0xfTUVNUkNIUiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBta2RpcmF0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisvKiAjdW5kZWYgSEFWRV9SQVdfREVDTF9NS0RJUkFUICovCisKKy8qIERlZmluZSB0byAxIGlmIG1rZHRlbXAgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKy8qICN1bmRlZiBIQVZFX1JBV19ERUNMX01LRFRFTVAgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgbWtmaWZvIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTUtGSUZPIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbWtmaWZvYXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKy8qICN1bmRlZiBIQVZFX1JBV19ERUNMX01LRklGT0FUICovCisKKy8qIERlZmluZSB0byAxIGlmIG1rbm9kIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTUtOT0QgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBta25vZGF0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisvKiAjdW5kZWYgSEFWRV9SQVdfREVDTF9NS05PREFUICovCisKKy8qIERlZmluZSB0byAxIGlmIG1rb3N0ZW1wIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisvKiAjdW5kZWYgSEFWRV9SQVdfREVDTF9NS09TVEVNUCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBta29zdGVtcHMgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKy8qICN1bmRlZiBIQVZFX1JBV19ERUNMX01LT1NURU1QUyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBta3N0ZW1wIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTUtTVEVNUCAxCisKKy8qIERlZmluZSB0byAxIGlmIG1rc3RlbXBzIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisvKiAjdW5kZWYgSEFWRV9SQVdfREVDTF9NS1NURU1QUyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBtb2RmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTU9ERiAxCisKKy8qIERlZmluZSB0byAxIGlmIG1vZGZmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTU9ERkYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBtb2RmbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX01PREZMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgb3BlbmF0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisvKiAjdW5kZWYgSEFWRV9SQVdfREVDTF9PUEVOQVQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgcGNsb3NlIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfUENMT1NFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcGlwZSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1BJUEUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBwaXBlMiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworLyogI3VuZGVmIEhBVkVfUkFXX0RFQ0xfUElQRTIgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgcG9wZW4gaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9QT1BFTiAxCisKKy8qIERlZmluZSB0byAxIGlmIHBvc2l4X29wZW5wdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1BPU0lYX09QRU5QVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHBvc2l4X3NwYXduIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV04gMQorCisvKiBEZWZpbmUgdG8gMSBpZiBwb3NpeF9zcGF3bmF0dHJfZGVzdHJveSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcKKyAgIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfREVTVFJPWSAxCisKKy8qIERlZmluZSB0byAxIGlmIHBvc2l4X3NwYXduYXR0cl9nZXRmbGFncyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcKKyAgIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfR0VURkxBR1MgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBwb3NpeF9zcGF3bmF0dHJfZ2V0cGdyb3VwIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZworICAgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9HRVRQR1JPVVAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwYXJhbSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyCisgICB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKy8qICN1bmRlZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBBUkFNICovCisKKy8qIERlZmluZSB0byAxIGlmIHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBvbGljeSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyCisgICB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKy8qICN1bmRlZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBPTElDWSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBwb3NpeF9zcGF3bmF0dHJfZ2V0c2lnZGVmYXVsdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyCisgICB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfR0VUU0lHREVGQVVMVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHBvc2l4X3NwYXduYXR0cl9nZXRzaWdtYXNrIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZworICAgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdNQVNLIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcG9zaXhfc3Bhd25hdHRyX2luaXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nCisgICBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05BVFRSX0lOSVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBwb3NpeF9zcGF3bmF0dHJfc2V0ZmxhZ3MgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nCisgICBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05BVFRSX1NFVEZMQUdTIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcG9zaXhfc3Bhd25hdHRyX3NldHBncm91cCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcKKyAgIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfU0VUUEdST1VQIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcGFyYW0gaXMgZGVjbGFyZWQgZXZlbiBhZnRlcgorICAgdW5kZWZpbmluZyBtYWNyb3MuICovCisvKiAjdW5kZWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQQVJBTSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwb2xpY3kgaXMgZGVjbGFyZWQgZXZlbiBhZnRlcgorICAgdW5kZWZpbmluZyBtYWNyb3MuICovCisvKiAjdW5kZWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQT0xJQ1kgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgcG9zaXhfc3Bhd25hdHRyX3NldHNpZ2RlZmF1bHQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlcgorICAgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05BVFRSX1NFVFNJR0RFRkFVTFQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBwb3NpeF9zcGF3bmF0dHJfc2V0c2lnbWFzayBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcKKyAgIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfU0VUU0lHTUFTSyAxCisKKy8qIERlZmluZSB0byAxIGlmIHBvc2l4X3NwYXducCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyCisgICB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQUREQ0xPU0UgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkZHVwMiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyCisgICB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMiAxCisKKy8qIERlZmluZSB0byAxIGlmIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIKKyAgIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERPUEVOIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3kgaXMgZGVjbGFyZWQgZXZlbiBhZnRlcgorICAgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0RFU1RST1kgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfaW5pdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyCisgICB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfSU5JVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHBvd2YgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9QT1dGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcHJlYWQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9QUkVBRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHB0aHJlYWRfc2lnbWFzayBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1BUSFJFQURfU0lHTUFTSyAxCisKKy8qIERlZmluZSB0byAxIGlmIHB0c25hbWUgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9QVFNOQU1FIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcHRzbmFtZV9yIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisvKiAjdW5kZWYgSEFWRV9SQVdfREVDTF9QVFNOQU1FX1IgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgcHdyaXRlIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfUFdSSVRFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcmFuZG9tIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfUkFORE9NIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcmFuZG9tX3IgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKy8qICN1bmRlZiBIQVZFX1JBV19ERUNMX1JBTkRPTV9SICovCisKKy8qIERlZmluZSB0byAxIGlmIHJhd21lbWNociBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworLyogI3VuZGVmIEhBVkVfUkFXX0RFQ0xfUkFXTUVNQ0hSICovCisKKy8qIERlZmluZSB0byAxIGlmIHJlYWRsaW5rIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfUkVBRExJTksgMQorCisvKiBEZWZpbmUgdG8gMSBpZiByZWFkbGlua2F0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisvKiAjdW5kZWYgSEFWRV9SQVdfREVDTF9SRUFETElOS0FUICovCisKKy8qIERlZmluZSB0byAxIGlmIHJlYWxwYXRoIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfUkVBTFBBVEggMQorCisvKiBEZWZpbmUgdG8gMSBpZiByZW1haW5kZXIgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9SRU1BSU5ERVIgMQorCisvKiBEZWZpbmUgdG8gMSBpZiByZW1haW5kZXJmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfUkVNQUlOREVSRiAxCisKKy8qIERlZmluZSB0byAxIGlmIHJlbWFpbmRlcmwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9SRU1BSU5ERVJMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcmVuYW1lYXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKy8qICN1bmRlZiBIQVZFX1JBV19ERUNMX1JFTkFNRUFUICovCisKKy8qIERlZmluZSB0byAxIGlmIHJpbnQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9SSU5UIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcmludGYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9SSU5URiAxCisKKy8qIERlZmluZSB0byAxIGlmIHJpbnRsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfUklOVEwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBybWRpciBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1JNRElSIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcm91bmQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9ST1VORCAxCisKKy8qIERlZmluZSB0byAxIGlmIHJvdW5kZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1JPVU5ERiAxCisKKy8qIERlZmluZSB0byAxIGlmIHJvdW5kbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1JPVU5ETCAxCisKKy8qIERlZmluZSB0byAxIGlmIHJwbWF0Y2ggaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKy8qICN1bmRlZiBIQVZFX1JBV19ERUNMX1JQTUFUQ0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgc2V0ZW52IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU0VURU5WIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc2V0aG9zdG5hbWUgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TRVRIT1NUTkFNRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHNldHN0YXRlIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU0VUU1RBVEUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzZXRzdGF0ZV9yIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisvKiAjdW5kZWYgSEFWRV9SQVdfREVDTF9TRVRTVEFURV9SICovCisKKy8qIERlZmluZSB0byAxIGlmIHNldHVzZXJzaGVsbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1NFVFVTRVJTSEVMTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHNpZ2FjdGlvbiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1NJR0FDVElPTiAxCisKKy8qIERlZmluZSB0byAxIGlmIHNpZ2FkZHNldCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1NJR0FERFNFVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHNpZ2RlbHNldCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1NJR0RFTFNFVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHNpZ2VtcHR5c2V0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU0lHRU1QVFlTRVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzaWdmaWxsc2V0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU0lHRklMTFNFVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHNpZ2lzbWVtYmVyIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU0lHSVNNRU1CRVIgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzaWdwZW5kaW5nIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU0lHUEVORElORyAxCisKKy8qIERlZmluZSB0byAxIGlmIHNpZ3Byb2NtYXNrIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU0lHUFJPQ01BU0sgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzaW5mIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU0lORiAxCisKKy8qIERlZmluZSB0byAxIGlmIHNpbmhmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU0lOSEYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzaW5sIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU0lOTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHNsZWVwIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU0xFRVAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzbnByaW50ZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1NOUFJJTlRGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc3FydGYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TUVJURiAxCisKKy8qIERlZmluZSB0byAxIGlmIHNxcnRsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU1FSVEwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzcmFuZG9tIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU1JBTkRPTSAxCisKKy8qIERlZmluZSB0byAxIGlmIHNyYW5kb21fciBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworLyogI3VuZGVmIEhBVkVfUkFXX0RFQ0xfU1JBTkRPTV9SICovCisKKy8qIERlZmluZSB0byAxIGlmIHN0YXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TVEFUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc3RwY3B5IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU1RQQ1BZIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc3RwbmNweSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1NUUE5DUFkgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJjYXNlc3RyIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU1RSQ0FTRVNUUiAxCisKKy8qIERlZmluZSB0byAxIGlmIHN0cmNocm51bCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworLyogI3VuZGVmIEhBVkVfUkFXX0RFQ0xfU1RSQ0hSTlVMICovCisKKy8qIERlZmluZSB0byAxIGlmIHN0cmR1cCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1NUUkRVUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHN0cmVycm9yX3IgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TVFJFUlJPUl9SIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc3RybmNhdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1NUUk5DQVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJuZHVwIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU1RSTkRVUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHN0cm5sZW4gaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TVFJOTEVOIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc3RycGJyayBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1NUUlBCUksgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJzZXAgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TVFJTRVAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJzaWduYWwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TVFJTSUdOQUwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJ0b2QgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TVFJUT0QgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJ0b2ltYXggaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TVFJUT0lNQVggMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJ0b2tfciBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1NUUlRPS19SIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc3RydG9sbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1NUUlRPTEwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJ0b3VsbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1NUUlRPVUxMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc3RydG91bWF4IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU1RSVE9VTUFYIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc3RydmVyc2NtcCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworLyogI3VuZGVmIEhBVkVfUkFXX0RFQ0xfU1RSVkVSU0NNUCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBzeW1saW5rIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU1lNTElOSyAxCisKKy8qIERlZmluZSB0byAxIGlmIHN5bWxpbmthdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworLyogI3VuZGVmIEhBVkVfUkFXX0RFQ0xfU1lNTElOS0FUICovCisKKy8qIERlZmluZSB0byAxIGlmIHRhbmYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9UQU5GIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdGFuaGYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9UQU5IRiAxCisKKy8qIERlZmluZSB0byAxIGlmIHRhbmwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9UQU5MIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdG1wZmlsZSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1RNUEZJTEUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0b3djdHJhbnMgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9UT1dDVFJBTlMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0cnVuYyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1RSVU5DIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdHJ1bmNmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfVFJVTkNGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdHJ1bmNsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfVFJVTkNMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdHR5bmFtZV9yIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfVFRZTkFNRV9SIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdW5saW5rIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfVU5MSU5LIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdW5saW5rYXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKy8qICN1bmRlZiBIQVZFX1JBV19ERUNMX1VOTElOS0FUICovCisKKy8qIERlZmluZSB0byAxIGlmIHVubG9ja3B0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfVU5MT0NLUFQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB1bnNldGVudiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1VOU0VURU5WIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdXNsZWVwIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfVVNMRUVQIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdXRpbWVuc2F0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisvKiAjdW5kZWYgSEFWRV9SQVdfREVDTF9VVElNRU5TQVQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgdmRwcmludGYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9WRFBSSU5URiAxCisKKy8qIERlZmluZSB0byAxIGlmIHZzbnByaW50ZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1ZTTlBSSU5URiAxCisKKy8qIERlZmluZSB0byAxIGlmIHdhaXRwaWQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9XQUlUUElEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd2NwY3B5IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV0NQQ1BZIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd2NwbmNweSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1dDUE5DUFkgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB3Y3J0b21iIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV0NSVE9NQiAxCisKKy8qIERlZmluZSB0byAxIGlmIHdjc2Nhc2VjbXAgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9XQ1NDQVNFQ01QIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd2NzY2F0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV0NTQ0FUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd2NzY2hyIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV0NTQ0hSIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd2NzY21wIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV0NTQ01QIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd2NzY29sbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1dDU0NPTEwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB3Y3NjcHkgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9XQ1NDUFkgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB3Y3Njc3BuIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV0NTQ1NQTiAxCisKKy8qIERlZmluZSB0byAxIGlmIHdjc2R1cCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1dDU0RVUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHdjc2xlbiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1dDU0xFTiAxCisKKy8qIERlZmluZSB0byAxIGlmIHdjc25jYXNlY21wIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV0NTTkNBU0VDTVAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB3Y3NuY2F0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV0NTTkNBVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHdjc25jbXAgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9XQ1NOQ01QIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd2NzbmNweSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1dDU05DUFkgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB3Y3NubGVuIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV0NTTkxFTiAxCisKKy8qIERlZmluZSB0byAxIGlmIHdjc25ydG9tYnMgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9XQ1NOUlRPTUJTIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd2NzcGJyayBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1dDU1BCUksgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB3Y3NyY2hyIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV0NTUkNIUiAxCisKKy8qIERlZmluZSB0byAxIGlmIHdjc3J0b21icyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1dDU1JUT01CUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHdjc3NwbiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1dDU1NQTiAxCisKKy8qIERlZmluZSB0byAxIGlmIHdjc3N0ciBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1dDU1NUUiAxCisKKy8qIERlZmluZSB0byAxIGlmIHdjc3RvayBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1dDU1RPSyAxCisKKy8qIERlZmluZSB0byAxIGlmIHdjc3dpZHRoIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV0NTV0lEVEggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB3Y3N4ZnJtIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV0NTWEZSTSAxCisKKy8qIERlZmluZSB0byAxIGlmIHdjdG9iIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV0NUT0IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB3Y3RyYW5zIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV0NUUkFOUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHdjdHlwZSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1dDVFlQRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHdjd2lkdGggaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9XQ1dJRFRIIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd21lbWNociBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1dNRU1DSFIgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB3bWVtY21wIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV01FTUNNUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHdtZW1jcHkgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9XTUVNQ1BZIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd21lbW1vdmUgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9XTUVNTU9WRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHdtZW1zZXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9XTUVNU0VUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgX0V4aXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9fRVhJVCAxCisKKy8qIERlZmluZSBpZiB0aGUgJ3JlYWxsb2MnIGZ1bmN0aW9uIGlzIFBPU0lYIGNvbXBsaWFudC4gKi8KKyNkZWZpbmUgSEFWRV9SRUFMTE9DX1BPU0lYIDEKKworLyogRGVmaW5lIHRvIDEgaWYgJ2xvbmcgZG91YmxlJyBhbmQgJ2RvdWJsZScgaGF2ZSB0aGUgc2FtZSByZXByZXNlbnRhdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX1NBTUVfTE9OR19ET1VCTEVfQVNfRE9VQkxFICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c2NoZWQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU0NIRURfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2NoZWRfc2V0cGFyYW0nIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfU0NIRURfU0VUUEFSQU0gKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzY2hlZF9zZXRzY2hlZHVsZXInIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfU0NIRURfU0VUU0NIRURVTEVSICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0ZWdpZCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9TRVRFR0lEICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0ZXVpZCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9TRVRFVUlEICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0bG9jYWxlJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRVRMT0NBTEUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ2FjdGlvbicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0lHQUNUSU9OIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzaWdhbHRzdGFjaycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0lHQUxUU1RBQ0sgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgc2lnaW5mb190Jy4gKi8KKy8qICN1bmRlZiBIQVZFX1NJR0lORk9fVCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ2ludGVycnVwdCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0lHSU5URVJSVVBUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgJ3NpZ19hdG9taWNfdCcgaXMgYSBzaWduZWQgaW50ZWdlciB0eXBlLiAqLworI2RlZmluZSBIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1QgMQorCisvKiBEZWZpbmUgdG8gMSBpZiAnd2NoYXJfdCcgaXMgYSBzaWduZWQgaW50ZWdlciB0eXBlLiAqLworI2RlZmluZSBIQVZFX1NJR05FRF9XQ0hBUl9UIDEKKworLyogRGVmaW5lIHRvIDEgaWYgJ3dpbnRfdCcgaXMgYSBzaWduZWQgaW50ZWdlciB0eXBlLiAqLworI2RlZmluZSBIQVZFX1NJR05FRF9XSU5UX1QgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgc2lnc2V0X3QnLiAqLworI2RlZmluZSBIQVZFX1NJR1NFVF9UIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHNpZ19hdG9taWNfdCcuICovCisjZGVmaW5lIEhBVkVfU0lHX0FUT01JQ19UIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzbnByaW50ZicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU05QUklOVEYgMQorCisvKiBEZWZpbmUgaWYgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgc25wcmludGYgZnVuY3Rpb24gaXMgdGhlIG51bWJlciBvZiBvZgorICAgYnl0ZXMgKGV4Y2x1ZGluZyB0aGUgdGVybWluYXRpbmcgTlVMKSB0aGF0IHdvdWxkIGhhdmUgYmVlbiBwcm9kdWNlZCBpZiB0aGUKKyAgIGJ1ZmZlciBoYWQgYmVlbiBsYXJnZSBlbm91Z2guICovCisjZGVmaW5lIEhBVkVfU05QUklOVEZfUkVUVkFMX0M5OSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3Bhd24uaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1BBV05fSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NURElOVF9IIDEKKworLyogRGVmaW5lIGlmIDxzdGRpbnQuaD4gZXhpc3RzLCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwgYW5kIGRlY2xhcmVzCisgICB1aW50bWF4X3QuICovCisjZGVmaW5lIEhBVkVfU1RESU5UX0hfV0lUSF9VSU5UTUFYIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpb19leHQuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TVERJT19FWFRfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVERMSUJfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RwY3B5JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFBDUFkgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmNocm51bCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9TVFJDSFJOVUwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJkdXAnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NUUkRVUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyZXJyb3JfcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSRVJST1JfUiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5ncy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVFJJTkdTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVFJJTkdfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RybmR1cCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSTkRVUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RybmxlbicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSTkxFTiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RydG91bCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSVE9VTCAxCisKKy8qIERlZmluZSB0byAxIGlmIGBzYV9zaWdhY3Rpb24nIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qgc2lnYWN0aW9uJy4gKi8KKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU0lHQUNUSU9OX1NBX1NJR0FDVElPTiAxCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBzdHJ1Y3QgdG1zJy4gKi8KKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVE1TIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJ2ZXJzY21wJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX1NUUlZFUlNDTVAgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzeW1saW5rJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TWU1MSU5LIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvYml0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1NZU19CSVRZUEVTX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvaW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfSU5UVFlQRVNfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9tbWFuLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19NTUFOX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9wYXJhbS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfUEFSQU1fSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Jlc291cmNlLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19SRVNPVVJDRV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2V0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19TT0NLRVRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWVzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19USU1FU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfVElNRV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy93YWl0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19XQUlUX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHRpbWVzJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9USU1FUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdG93bG93ZXInIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1RPV0xPV0VSIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHVuc2V0ZW52JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9VTlNFVEVOViAxCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlICd1bnNpZ25lZCBsb25nIGxvbmcgaW50Jy4gKi8KKyNkZWZpbmUgSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB2YXNucHJpbnRmJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX1ZBU05QUklOVEYgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB2Zm9yaycgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9WRk9SSyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHZzbnByaW50ZicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfVlNOUFJJTlRGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB3YWl0aWQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1dBSVRJRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d2NoYXIuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfV0NIQVJfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3djaGFyX3QnIHR5cGUuICovCisjZGVmaW5lIEhBVkVfV0NIQVJfVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd2NydG9tYicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfV0NSVE9NQiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd2NzbGVuJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9XQ1NMRU4gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHdjc25sZW4nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1dDU05MRU4gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHdjdHlwZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9XQ1RZUEVfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd2N3aWR0aCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfV0NXSURUSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d2luc29jazIuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9XSU5TT0NLMl9IICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3dpbnRfdCcgdHlwZS4gKi8KKyNkZWZpbmUgSEFWRV9XSU5UX1QgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBPX05PQVRJTUUgd29ya3MuICovCisjZGVmaW5lIEhBVkVfV09SS0lOR19PX05PQVRJTUUgMAorCisvKiBEZWZpbmUgdG8gMSBpZiBPX05PRk9MTE9XIHdvcmtzLiAqLworI2RlZmluZSBIQVZFX1dPUktJTkdfT19OT0ZPTExPVyAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgcG9zaXhfc3Bhd24gYW5kIHBvc2l4X3NwYXducCBmdW5jdGlvbnMgYW5kIHRoZXkKKyAgIHdvcmsuICovCisjZGVmaW5lIEhBVkVfV09SS0lOR19QT1NJWF9TUEFXTiAxCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBfQm9vbCcuICovCisjZGVmaW5lIEhBVkVfX0JPT0wgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9zZXRfaW52YWxpZF9wYXJhbWV0ZXJfaGFuZGxlcicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9fU0VUX0lOVkFMSURfUEFSQU1FVEVSX0hBTkRMRVIgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfX2ZwZW5kaW5nJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX19fRlBFTkRJTkcgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfX2ZzZXRlcnInIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfX19GU0VURVJSICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX194cGdfc3RyZXJyb3JfcicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9fX1hQR19TVFJFUlJPUl9SICovCisKKy8qIERlZmluZSBhcyB0aGUgYml0IGluZGV4IGluIHRoZSB3b3JkIHdoZXJlIHRvIGZpbmQgYml0IDAgb2YgdGhlIGV4cG9uZW50IG9mCisgICAnbG9uZyBkb3VibGUnLiAqLworI2RlZmluZSBMREJMX0VYUEJJVDBfQklUIDAKKworLyogRGVmaW5lIGFzIHRoZSB3b3JkIGluZGV4IHdoZXJlIHRvIGZpbmQgdGhlIGV4cG9uZW50IG9mICdsb25nIGRvdWJsZScuICovCisjZGVmaW5lIExEQkxfRVhQQklUMF9XT1JEIDIKKworLyogRGVmaW5lIGFzIHRoZSBiaXQgaW5kZXggaW4gdGhlIHdvcmQgd2hlcmUgdG8gZmluZCB0aGUgc2lnbiBvZiAnbG9uZworICAgZG91YmxlJy4gKi8KKy8qICN1bmRlZiBMREJMX1NJR05CSVRfQklUICovCisKKy8qIERlZmluZSBhcyB0aGUgd29yZCBpbmRleCB3aGVyZSB0byBmaW5kIHRoZSBzaWduIG9mICdsb25nIGRvdWJsZScuICovCisvKiAjdW5kZWYgTERCTF9TSUdOQklUX1dPUkQgKi8KKworLyogRGVmaW5lIHRvIHRoZSBHTlUgTTQgZXhlY3V0YWJsZSBuYW1lLiAqLworI2RlZmluZSBNNCAiL3Vzci9iaW4vbTQiCisKKy8qIERlZmluZSB0byAiLWciIGlmIEdOVSBNNCBzdXBwb3J0cyAtZywgb3RoZXJ3aXNlIHRvICIiLiAqLworI2RlZmluZSBNNF9HTlVfT1BUSU9OICIiCisKKy8qIERlZmluZSB0byBhIHN1YnN0aXR1dGUgdmFsdWUgZm9yIG1tYXAoKSdzIE1BUF9BTk9OWU1PVVMgZmxhZy4gKi8KKyNkZWZpbmUgTUFQX0FOT05ZTU9VUyBNQVBfQU5PTgorCisvKiBEZWZpbmUgaWYgdGhlIG1icnRvd2MgZnVuY3Rpb24gaGFzIHRoZSBOVUxMIHB3YyBhcmd1bWVudCBidWcuICovCisvKiAjdW5kZWYgTUJSVE9XQ19OVUxMX0FSRzFfQlVHICovCisKKy8qIERlZmluZSBpZiB0aGUgbWJydG93YyBmdW5jdGlvbiBoYXMgdGhlIE5VTEwgc3RyaW5nIGFyZ3VtZW50IGJ1Zy4gKi8KKy8qICN1bmRlZiBNQlJUT1dDX05VTExfQVJHMl9CVUcgKi8KKworLyogRGVmaW5lIGlmIHRoZSBtYnJ0b3djIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiAwIGZvciBhIE5VTCBjaGFyYWN0ZXIuICovCisvKiAjdW5kZWYgTUJSVE9XQ19OVUxfUkVUVkFMX0JVRyAqLworCisvKiBEZWZpbmUgaWYgdGhlIG1icnRvd2MgZnVuY3Rpb24gcmV0dXJucyBhIHdyb25nIHJldHVybiB2YWx1ZS4gKi8KKy8qICN1bmRlZiBNQlJUT1dDX1JFVFZBTF9CVUcgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgYXNzZXJ0aW9ucyBzaG91bGQgYmUgZGlzYWJsZWQuICovCisvKiAjdW5kZWYgTkRFQlVHICovCisKKy8qIERlZmluZSBpZiB0aGUgdmFzbnByaW50ZiBpbXBsZW1lbnRhdGlvbiBuZWVkcyBzcGVjaWFsIGNvZGUgZm9yIHRoZSAnYScgYW5kCisgICAnQScgZGlyZWN0aXZlcy4gKi8KKy8qICN1bmRlZiBORUVEX1BSSU5URl9ESVJFQ1RJVkVfQSAqLworCisvKiBEZWZpbmUgaWYgdGhlIHZhc25wcmludGYgaW1wbGVtZW50YXRpb24gbmVlZHMgc3BlY2lhbCBjb2RlIGZvciB0aGUgJ0YnCisgICBkaXJlY3RpdmUuICovCisvKiAjdW5kZWYgTkVFRF9QUklOVEZfRElSRUNUSVZFX0YgKi8KKworLyogRGVmaW5lIGlmIHRoZSB2YXNucHJpbnRmIGltcGxlbWVudGF0aW9uIG5lZWRzIHNwZWNpYWwgY29kZSBmb3IgdGhlICdscycKKyAgIGRpcmVjdGl2ZS4gKi8KKy8qICN1bmRlZiBORUVEX1BSSU5URl9ESVJFQ1RJVkVfTFMgKi8KKworLyogRGVmaW5lIGlmIHRoZSB2YXNucHJpbnRmIGltcGxlbWVudGF0aW9uIG5lZWRzIHNwZWNpYWwgY29kZSBmb3IgJ2RvdWJsZScKKyAgIGFyZ3VtZW50cy4gKi8KKy8qICN1bmRlZiBORUVEX1BSSU5URl9ET1VCTEUgKi8KKworLyogRGVmaW5lIGlmIHRoZSB2YXNucHJpbnRmIGltcGxlbWVudGF0aW9uIG5lZWRzIHNwZWNpYWwgY29kZSBmb3Igc3Vydml2aW5nCisgICBvdXQtb2YtbWVtb3J5IGNvbmRpdGlvbnMuICovCisvKiAjdW5kZWYgTkVFRF9QUklOVEZfRU5PTUVNICovCisKKy8qIERlZmluZSBpZiB0aGUgdmFzbnByaW50ZiBpbXBsZW1lbnRhdGlvbiBuZWVkcyBzcGVjaWFsIGNvZGUgZm9yIHRoZSAnIGZsYWcuCisgICAqLworLyogI3VuZGVmIE5FRURfUFJJTlRGX0ZMQUdfR1JPVVBJTkcgKi8KKworLyogRGVmaW5lIGlmIHRoZSB2YXNucHJpbnRmIGltcGxlbWVudGF0aW9uIG5lZWRzIHNwZWNpYWwgY29kZSBmb3IgdGhlICctJworICAgZmxhZy4gKi8KKy8qICN1bmRlZiBORUVEX1BSSU5URl9GTEFHX0xFRlRBREpVU1QgKi8KKworLyogRGVmaW5lIGlmIHRoZSB2YXNucHJpbnRmIGltcGxlbWVudGF0aW9uIG5lZWRzIHNwZWNpYWwgY29kZSBmb3IgdGhlIDAgZmxhZy4KKyAgICovCisvKiAjdW5kZWYgTkVFRF9QUklOVEZfRkxBR19aRVJPICovCisKKy8qIERlZmluZSBpZiB0aGUgdmFzbnByaW50ZiBpbXBsZW1lbnRhdGlvbiBuZWVkcyBzcGVjaWFsIGNvZGUgZm9yIGluZmluaXRlCisgICAnZG91YmxlJyBhcmd1bWVudHMuICovCisvKiAjdW5kZWYgTkVFRF9QUklOVEZfSU5GSU5JVEVfRE9VQkxFICovCisKKy8qIERlZmluZSBpZiB0aGUgdmFzbnByaW50ZiBpbXBsZW1lbnRhdGlvbiBuZWVkcyBzcGVjaWFsIGNvZGUgZm9yIGluZmluaXRlCisgICAnbG9uZyBkb3VibGUnIGFyZ3VtZW50cy4gKi8KKyNkZWZpbmUgTkVFRF9QUklOVEZfSU5GSU5JVEVfTE9OR19ET1VCTEUgMQorCisvKiBEZWZpbmUgaWYgdGhlIHZhc25wcmludGYgaW1wbGVtZW50YXRpb24gbmVlZHMgc3BlY2lhbCBjb2RlIGZvciAnbG9uZworICAgZG91YmxlJyBhcmd1bWVudHMuICovCisvKiAjdW5kZWYgTkVFRF9QUklOVEZfTE9OR19ET1VCTEUgKi8KKworLyogRGVmaW5lIGlmIHRoZSB2YXNucHJpbnRmIGltcGxlbWVudGF0aW9uIG5lZWRzIHNwZWNpYWwgY29kZSBmb3Igc3VwcG9ydGluZworICAgbGFyZ2UgcHJlY2lzaW9ucyB3aXRob3V0IGFyYml0cmFyeSBib3VuZHMuICovCisvKiAjdW5kZWYgTkVFRF9QUklOVEZfVU5CT1VOREVEX1BSRUNJU0lPTiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3VyIEMgY29tcGlsZXIgZG9lc24ndCBhY2NlcHQgLWMgYW5kIC1vIHRvZ2V0aGVyLiAqLworLyogI3VuZGVmIE5PX01JTlVTX0NfTUlOVVNfTyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBvcGVuKCkgZmFpbHMgdG8gcmVjb2duaXplIGEgdHJhaWxpbmcgc2xhc2guICovCisjZGVmaW5lIE9QRU5fVFJBSUxJTkdfU0xBU0hfQlVHIDEKKworLyogTmFtZSBvZiBwYWNrYWdlICovCisjZGVmaW5lIFBBQ0tBR0UgImJpc29uIgorCisvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KKyNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgImJ1Zy1iaXNvbkBnbnUub3JnIgorCisvKiBUaGUgY29weXJpZ2h0IHllYXIgZm9yIHRoaXMgcGFja2FnZSAqLworI2RlZmluZSBQQUNLQUdFX0NPUFlSSUdIVF9ZRUFSIDIwMTIKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX05BTUUgIkdOVSBCaXNvbiIKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1NUUklORyAiR05VIEJpc29uIDIuNyIKKworLyogRGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgImJpc29uIgorCisvKiBEZWZpbmUgdG8gdGhlIGhvbWUgcGFnZSBmb3IgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1VSTCAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2Jpc29uLyIKKworLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIyLjciCisKKy8qIHRoZSBudW1iZXIgb2YgcGVuZGluZyBvdXRwdXQgYnl0ZXMgb24gc3RyZWFtICdmcCcgKi8KKyNkZWZpbmUgUEVORElOR19PVVRQVVRfTl9CWVRFUyBmcC0+X3AgLSBmcC0+X2JmLl9iYXNlCisKKy8qIERlZmluZSBpZiA8aW50dHlwZXMuaD4gZXhpc3RzIGFuZCBkZWZpbmVzIHVudXNhYmxlIFBSSSogbWFjcm9zLiAqLworLyogI3VuZGVmIFBSSV9NQUNST1NfQlJPS0VOICovCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSB0aGF0IGlzIHRoZSByZXN1bHQgb2YgZGVmYXVsdCBhcmd1bWVudCBwcm9tb3Rpb25zIG9mCisgICB0eXBlIG1vZGVfdC4gKi8KKyNkZWZpbmUgUFJPTU9URURfTU9ERV9UIGludAorCisvKiBEZWZpbmUgaWYgdGhlIHB0aHJlYWRfaW5fdXNlKCkgZGV0ZWN0aW9uIGlzIGhhcmQuICovCisvKiAjdW5kZWYgUFRIUkVBRF9JTl9VU0VfREVURUNUSU9OX0hBUkQgKi8KKworLyogRGVmaW5lIHRvIGwsIGxsLCB1LCB1bCwgdWxsLCBldGMuLCBhcyBzdWl0YWJsZSBmb3IgY29uc3RhbnRzIG9mIHR5cGUKKyAgICdwdHJkaWZmX3QnLiAqLworI2RlZmluZSBQVFJESUZGX1RfU1VGRklYIGwKKworLyogRGVmaW5lIGlmIGZwcmludGYgaXMgb3ZlcnJpZGRlbiBieSBhIFBPU0lYIGNvbXBsaWFudCBnbnVsaWIgaW1wbGVtZW50YXRpb24uCisgICAqLworI2RlZmluZSBSRVBMQUNFX0ZQUklOVEZfUE9TSVggMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzdGF0IG5lZWRzIGhlbHAgd2hlbiBwYXNzZWQgYSBkaXJlY3RvcnkgbmFtZSB3aXRoIGEgdHJhaWxpbmcKKyAgIHNsYXNoICovCisvKiAjdW5kZWYgUkVQTEFDRV9GVU5DX1NUQVRfRElSICovCisKKy8qIERlZmluZSB0byAxIGlmIHN0YXQgbmVlZHMgaGVscCB3aGVuIHBhc3NlZCBhIGZpbGUgbmFtZSB3aXRoIGEgdHJhaWxpbmcKKyAgIHNsYXNoICovCisjZGVmaW5lIFJFUExBQ0VfRlVOQ19TVEFUX0ZJTEUgMQorCisvKiBEZWZpbmUgaWYgcHJpbnRmIGlzIG92ZXJyaWRkZW4gYnkgYSBQT1NJWCBjb21wbGlhbnQgZ251bGliIGltcGxlbWVudGF0aW9uLgorICAgKi8KKyNkZWZpbmUgUkVQTEFDRV9QUklOVEZfUE9TSVggMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJlcnJvcigwKSBkb2VzIG5vdCByZXR1cm4gYSBtZXNzYWdlIGltcGx5aW5nIHN1Y2Nlc3MuICovCisjZGVmaW5lIFJFUExBQ0VfU1RSRVJST1JfMCAxCisKKy8qIERlZmluZSBpZiB2YXNucHJpbnRmIGV4aXN0cyBidXQgaXMgb3ZlcnJpZGRlbiBieSBnbnVsaWIuICovCisvKiAjdW5kZWYgUkVQTEFDRV9WQVNOUFJJTlRGICovCisKKy8qIERlZmluZSBpZiB2ZnByaW50ZiBpcyBvdmVycmlkZGVuIGJ5IGEgUE9TSVggY29tcGxpYW50IGdudWxpYgorICAgaW1wbGVtZW50YXRpb24uICovCisjZGVmaW5lIFJFUExBQ0VfVkZQUklOVEZfUE9TSVggMQorCisvKiBEZWZpbmUgdG8gbCwgbGwsIHUsIHVsLCB1bGwsIGV0Yy4sIGFzIHN1aXRhYmxlIGZvciBjb25zdGFudHMgb2YgdHlwZQorICAgJ3NpZ19hdG9taWNfdCcuICovCisjZGVmaW5lIFNJR19BVE9NSUNfVF9TVUZGSVggCisKKy8qIERlZmluZSBhcyB0aGUgbWF4aW11bSB2YWx1ZSBvZiB0eXBlICdzaXplX3QnLCBpZiB0aGUgc3lzdGVtIGRvZXNuJ3QgZGVmaW5lCisgICBpdC4gKi8KKyNpZm5kZWYgU0laRV9NQVgKKy8qICMgdW5kZWYgU0laRV9NQVggKi8KKyNlbmRpZgorCisvKiBEZWZpbmUgdG8gbCwgbGwsIHUsIHVsLCB1bGwsIGV0Yy4sIGFzIHN1aXRhYmxlIGZvciBjb25zdGFudHMgb2YgdHlwZQorICAgJ3NpemVfdCcuICovCisjZGVmaW5lIFNJWkVfVF9TVUZGSVggdWwKKworLyogSWYgdXNpbmcgdGhlIEMgaW1wbGVtZW50YXRpb24gb2YgYWxsb2NhLCBkZWZpbmUgaWYgeW91IGtub3cgdGhlCisgICBkaXJlY3Rpb24gb2Ygc3RhY2sgZ3Jvd3RoIGZvciB5b3VyIHN5c3RlbTsgb3RoZXJ3aXNlIGl0IHdpbGwgYmUKKyAgIGF1dG9tYXRpY2FsbHkgZGVkdWNlZCBhdCBydW50aW1lLgorCVNUQUNLX0RJUkVDVElPTiA+IDAgPT4gZ3Jvd3MgdG93YXJkIGhpZ2hlciBhZGRyZXNzZXMKKwlTVEFDS19ESVJFQ1RJT04gPCAwID0+IGdyb3dzIHRvd2FyZCBsb3dlciBhZGRyZXNzZXMKKwlTVEFDS19ESVJFQ1RJT04gPSAwID0+IGRpcmVjdGlvbiBvZiBncm93dGggdW5rbm93biAqLworLyogI3VuZGVmIFNUQUNLX0RJUkVDVElPTiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgYFNfSVMqJyBtYWNyb3MgaW4gPHN5cy9zdGF0Lmg+IGRvIG5vdCB3b3JrIHByb3Blcmx5LiAqLworLyogI3VuZGVmIFNUQVRfTUFDUk9TX0JST0tFTiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KKyNkZWZpbmUgU1REQ19IRUFERVJTIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc3RyZXJyb3JfciByZXR1cm5zIGNoYXIgKi4gKi8KKy8qICN1bmRlZiBTVFJFUlJPUl9SX0NIQVJfUCAqLworCisvKiBEZWZpbmUgdG8gdGhlIHByZWZpeCBvZiBDIHN5bWJvbHMgYXQgdGhlIGFzc2VtYmxlciBhbmQgbGlua2VyIGxldmVsLCBlaXRoZXIKKyAgIGFuIHVuZGVyc2NvcmUgb3IgZW1wdHkuICovCisjZGVmaW5lIFVTRVJfTEFCRUxfUFJFRklYIF8KKworLyogRGVmaW5lIGlmIHRoZSBQT1NJWCBtdWx0aXRocmVhZGluZyBsaWJyYXJ5IGNhbiBiZSB1c2VkLiAqLworI2RlZmluZSBVU0VfUE9TSVhfVEhSRUFEUyAxCisKKy8qIERlZmluZSBpZiByZWZlcmVuY2VzIHRvIHRoZSBQT1NJWCBtdWx0aXRocmVhZGluZyBsaWJyYXJ5IHNob3VsZCBiZSBtYWRlCisgICB3ZWFrLiAqLworLyogI3VuZGVmIFVTRV9QT1NJWF9USFJFQURTX1dFQUsgKi8KKworLyogRGVmaW5lIGlmIHRoZSBHTlUgUHRoIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgY2FuIGJlIHVzZWQuICovCisvKiAjdW5kZWYgVVNFX1BUSF9USFJFQURTICovCisKKy8qIERlZmluZSBpZiByZWZlcmVuY2VzIHRvIHRoZSBHTlUgUHRoIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgc2hvdWxkIGJlIG1hZGUKKyAgIHdlYWsuICovCisvKiAjdW5kZWYgVVNFX1BUSF9USFJFQURTX1dFQUsgKi8KKworLyogRGVmaW5lIGlmIHRoZSBvbGQgU29sYXJpcyBtdWx0aXRocmVhZGluZyBsaWJyYXJ5IGNhbiBiZSB1c2VkLiAqLworLyogI3VuZGVmIFVTRV9TT0xBUklTX1RIUkVBRFMgKi8KKworLyogRGVmaW5lIGlmIHJlZmVyZW5jZXMgdG8gdGhlIG9sZCBTb2xhcmlzIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgc2hvdWxkIGJlCisgICBtYWRlIHdlYWsuICovCisvKiAjdW5kZWYgVVNFX1NPTEFSSVNfVEhSRUFEU19XRUFLICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSB3YW50IGdldGMgZXRjLiB0byB1c2UgdW5sb2NrZWQgSS9PIGlmIGF2YWlsYWJsZS4KKyAgIFVubG9ja2VkIEkvTyBjYW4gaW1wcm92ZSBwZXJmb3JtYW5jZSBpbiB1bml0aHJlYWRlZCBhcHBzLCBidXQgaXQgaXMgbm90CisgICBzYWZlIGZvciBtdWx0aXRocmVhZGVkIGFwcHMuICovCisjZGVmaW5lIFVTRV9VTkxPQ0tFRF9JTyAxCisKKy8qIERlZmluZSBpZiB0aGUgbmF0aXZlIFdpbmRvd3MgbXVsdGl0aHJlYWRpbmcgQVBJIGNhbiBiZSB1c2VkLiAqLworLyogI3VuZGVmIFVTRV9XSU5ET1dTX1RIUkVBRFMgKi8KKworLyogVmVyc2lvbiBudW1iZXIgb2YgcGFja2FnZSAqLworI2RlZmluZSBWRVJTSU9OICIyLjciCisKKy8qIERlZmluZSB0byAxIGlmIHVuc2V0ZW52IHJldHVybnMgdm9pZCBpbnN0ZWFkIG9mIGludC4gKi8KKy8qICN1bmRlZiBWT0lEX1VOU0VURU5WICovCisKKy8qIERlZmluZSB0byBsLCBsbCwgdSwgdWwsIHVsbCwgZXRjLiwgYXMgc3VpdGFibGUgZm9yIGNvbnN0YW50cyBvZiB0eXBlCisgICAnd2NoYXJfdCcuICovCisjZGVmaW5lIFdDSEFSX1RfU1VGRklYIAorCisvKiBEZWZpbmUgdG8gbCwgbGwsIHUsIHVsLCB1bGwsIGV0Yy4sIGFzIHN1aXRhYmxlIGZvciBjb25zdGFudHMgb2YgdHlwZQorICAgJ3dpbnRfdCcuICovCisjZGVmaW5lIFdJTlRfVF9TVUZGSVggCisKKy8qIERlZmluZSBpZiB1c2luZyB0aGUgZG1hbGxvYyBkZWJ1Z2dpbmcgbWFsbG9jIHBhY2thZ2UgKi8KKy8qICN1bmRlZiBXSVRIX0RNQUxMT0MgKi8KKworLyogRGVmaW5lIFdPUkRTX0JJR0VORElBTiB0byAxIGlmIHlvdXIgcHJvY2Vzc29yIHN0b3JlcyB3b3JkcyB3aXRoIHRoZSBtb3N0CisgICBzaWduaWZpY2FudCBieXRlIGZpcnN0IChsaWtlIE1vdG9yb2xhIGFuZCBTUEFSQywgdW5saWtlIEludGVsKS4gKi8KKyNpZiBkZWZpbmVkIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRAorIyBpZiBkZWZpbmVkIF9fQklHX0VORElBTl9fCisjICBkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEKKyMgZW5kaWYKKyNlbHNlCisjIGlmbmRlZiBXT1JEU19CSUdFTkRJQU4KKy8qICMgIHVuZGVmIFdPUkRTX0JJR0VORElBTiAqLworIyBlbmRpZgorI2VuZGlmCisKKy8qIERlZmluZSB0byAxIHRvIGludGVybmF0aW9uYWxpemUgYmlzb24gcnVudGltZSBtZXNzYWdlcy4gKi8KKy8qICN1bmRlZiBZWUVOQUJMRV9OTFMgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgYGxleCcgZGVjbGFyZXMgYHl5dGV4dCcgYXMgYSBgY2hhciAqJyBieSBkZWZhdWx0LCBub3QgYQorICAgYGNoYXJbXScuICovCisjZGVmaW5lIFlZVEVYVF9QT0lOVEVSIDEKKworLyogRW5hYmxlIGxhcmdlIGlub2RlIG51bWJlcnMgb24gTWFjIE9TIFggMTAuNS4gICovCisjaWZuZGVmIF9EQVJXSU5fVVNFXzY0X0JJVF9JTk9ERQorIyBkZWZpbmUgX0RBUldJTl9VU0VfNjRfQklUX0lOT0RFIDEKKyNlbmRpZgorCisvKiBOdW1iZXIgb2YgYml0cyBpbiBhIGZpbGUgb2Zmc2V0LCBvbiBob3N0cyB3aGVyZSB0aGlzIGlzIHNldHRhYmxlLiAqLworLyogI3VuZGVmIF9GSUxFX09GRlNFVF9CSVRTICovCisKKy8qIERlZmluZSB0byAxIGlmIEdudWxpYiBvdmVycmlkZXMgJ3N0cnVjdCBzdGF0JyBvbiBXaW5kb3dzIHNvIHRoYXQgc3RydWN0CisgICBzdGF0LnN0X3NpemUgYmVjb21lcyA2NC1iaXQuICovCisvKiAjdW5kZWYgX0dMX1dJTkRPV1NfNjRfQklUX1NUX1NJWkUgKi8KKworLyogRGVmaW5lIGZvciBsYXJnZSBmaWxlcywgb24gQUlYLXN0eWxlIGhvc3RzLiAqLworLyogI3VuZGVmIF9MQVJHRV9GSUxFUyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBvbiBNSU5JWC4gKi8KKy8qICN1bmRlZiBfTUlOSVggKi8KKworLyogVGhlIF9Ob3JldHVybiBrZXl3b3JkIG9mIEMxMS4gICovCisjaWYgISAoZGVmaW5lZCBfTm9yZXR1cm4gXAorICAgICAgIHx8IChkZWZpbmVkIF9fU1REQ19WRVJTSU9OX18gJiYgMjAxMTEyIDw9IF9fU1REQ19WRVJTSU9OX18pKQorIyBpZiAoMyA8PSBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gMiAmJiA4IDw9IF9fR05VQ19NSU5PUl9fKSBcCisgICAgICB8fCAweDUxMTAgPD0gX19TVU5QUk9fQykKKyMgIGRlZmluZSBfTm9yZXR1cm4gX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpCisjIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUiAmJiAxMjAwIDw9IF9NU0NfVkVSCisjICBkZWZpbmUgX05vcmV0dXJuIF9fZGVjbHNwZWMgKG5vcmV0dXJuKQorIyBlbHNlCisjICBkZWZpbmUgX05vcmV0dXJuCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMiBpZiB0aGUgc3lzdGVtIGRvZXMgbm90IHByb3ZpZGUgUE9TSVguMSBmZWF0dXJlcyBleGNlcHQgd2l0aAorICAgdGhpcyBkZWZpbmVkLiAqLworLyogI3VuZGVmIF9QT1NJWF8xX1NPVVJDRSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgbmVlZCB0byBpbiBvcmRlciBmb3IgJ3N0YXQnIGFuZCBvdGhlciB0aGluZ3MgdG8gd29yay4gKi8KKy8qICN1bmRlZiBfUE9TSVhfU09VUkNFICovCisKKy8qIERlZmluZSB0byA1MDAgb25seSBvbiBIUC1VWC4gKi8KKy8qICN1bmRlZiBfWE9QRU5fU09VUkNFICovCisKKy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIEFJWCAzLCBJbnRlcml4LiAgKi8KKyNpZm5kZWYgX0FMTF9TT1VSQ0UKKyMgZGVmaW5lIF9BTExfU09VUkNFIDEKKyNlbmRpZgorLyogRW5hYmxlIGdlbmVyYWwgZXh0ZW5zaW9ucyBvbiBNYWMgT1MgWC4gICovCisjaWZuZGVmIF9EQVJXSU5fQ19TT1VSQ0UKKyMgZGVmaW5lIF9EQVJXSU5fQ19TT1VSQ0UgMQorI2VuZGlmCisvKiBFbmFibGUgR05VIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IGhhdmUgdGhlbS4gICovCisjaWZuZGVmIF9HTlVfU09VUkNFCisjIGRlZmluZSBfR05VX1NPVVJDRSAxCisjZW5kaWYKKy8qIEVuYWJsZSB0aHJlYWRpbmcgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKyNpZm5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisjIGRlZmluZSBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MgMQorI2VuZGlmCisvKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBIUCBOb25TdG9wLiAgKi8KKyNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKyMgZGVmaW5lIF9UQU5ERU1fU09VUkNFIDEKKyNlbmRpZgorLyogRW5hYmxlIGdlbmVyYWwgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKyNpZm5kZWYgX19FWFRFTlNJT05TX18KKyMgZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byBycGxfIGlmIHRoZSBnZXRvcHQgcmVwbGFjZW1lbnQgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgc2hvdWxkIGJlCisgICB1c2VkLiAqLworI2RlZmluZSBfX0dFVE9QVF9QUkVGSVggcnBsXworCisvKiBfR0xfSU5MSU5FIGlzIGEgcG9ydGFibGUgYWx0ZXJuYXRpdmUgdG8gSVNPIEM5OSBwbGFpbiAnaW5saW5lJy4KKyAgIF9HTF9FWFRFUk5fSU5MSU5FIGlzIGEgcG9ydGFibGUgYWx0ZXJuYXRpdmUgdG8gJ2V4dGVybiBpbmxpbmUnLgorICAgX0dMX0lOTElORV9IRUFERVJfQkVHSU4gY29udGFpbnMgdXNlZnVsIHN0dWZmIHRvIHB1dAorICAgICBpbiBhbiBpbmNsdWRlIGZpbGUsIGJlZm9yZSB1c2VzIG9mIF9HTF9JTkxJTkUuCisgICAgIEl0IHN1cHByZXNzZXMgR0NDJ3MgYm9ndXMgIm5vIHByZXZpb3VzIHByb3RvdHlwZSBmb3IgJ0ZPTyciIGRpYWdub3N0aWMsCisgICAgIHdoZW4gRk9PIGlzIGFuIGlubGluZSBmdW5jdGlvbiBpbiB0aGUgaGVhZGVyOyBzZWUKKyAgICAgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTQxMTM+LgorICAgX0dMX0lOTElORV9IRUFERVJfRU5EIGNvbnRhaW5zIHVzZWZ1bCBzdHVmZiB0byBwdXQKKyAgICAgaW4gdGhlIHNhbWUgaW5jbHVkZSBmaWxlLCBhZnRlciB1c2VzIG9mIF9HTF9JTkxJTkUuCisKKyAgIFN1cHByZXNzIHRoZSB1c2Ugb2YgZXh0ZXJuIGlubGluZSBvbiBBcHBsZSdzIHBsYXRmb3JtcywKKyAgIGFzIExpYmMtODI1LjI1ICgyMDEyLTA5LTE5KSBpcyBpbmNvbXBhdGlibGUgd2l0aCBpdDsgc2VlCisgICA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1nbnVsaWIvMjAxMi0xMi9tc2cwMDAyMy5odG1sPi4KKyAgIFBlcmhhcHMgQXBwbGUgd2lsbCBmaXggdGhpcyBzb21lIGRheS4gICovCisjaWYgKChfX0dOVUNfXyBcCisgICAgICA/IGRlZmluZWQgX19HTlVDX1NURENfSU5MSU5FX18gJiYgX19HTlVDX1NURENfSU5MSU5FX18gXAorICAgICAgOiAxOTk5MDFMIDw9IF9fU1REQ19WRVJTSU9OX18pIFwKKyAgICAgJiYgIWRlZmluZWQgX19BUFBMRV9fKQorIyBkZWZpbmUgX0dMX0lOTElORSBpbmxpbmUKKyMgZGVmaW5lIF9HTF9FWFRFUk5fSU5MSU5FIGV4dGVybiBpbmxpbmUKKyNlbGlmIDIgPCBfX0dOVUNfXyArICg3IDw9IF9fR05VQ19NSU5PUl9fKSAmJiAhZGVmaW5lZCBfX0FQUExFX18KKyMgaWYgX19HTlVDX0dOVV9JTkxJTkVfXworICAgLyogX19nbnVfaW5saW5lX18gc3VwcHJlc3NlcyBhIEdDQyA0LjIgZGlhZ25vc3RpYy4gICovCisjICBkZWZpbmUgX0dMX0lOTElORSBleHRlcm4gaW5saW5lIF9fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXykpCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfSU5MSU5FIGV4dGVybiBpbmxpbmUKKyMgZW5kaWYKKyMgZGVmaW5lIF9HTF9FWFRFUk5fSU5MSU5FIGV4dGVybgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9JTkxJTkUgc3RhdGljIF9HTF9VTlVTRUQKKyMgZGVmaW5lIF9HTF9FWFRFUk5fSU5MSU5FIHN0YXRpYyBfR0xfVU5VU0VECisjZW5kaWYKKworI2lmIDQgPCBfX0dOVUNfXyArICg2IDw9IF9fR05VQ19NSU5PUl9fKQorIyBpZiBkZWZpbmVkIF9fR05VQ19TVERDX0lOTElORV9fICYmIF9fR05VQ19TVERDX0lOTElORV9fCisjICBkZWZpbmUgX0dMX0lOTElORV9IRUFERVJfQ09OU1RfUFJBR01BCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfSU5MSU5FX0hFQURFUl9DT05TVF9QUkFHTUEgXAorICAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1Xc3VnZ2VzdC1hdHRyaWJ1dGU9Y29uc3RcIiIpCisjIGVuZGlmCisjIGRlZmluZSBfR0xfSU5MSU5FX0hFQURFUl9CRUdJTiBcCisgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIHB1c2giKSBcCisgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV21pc3NpbmctcHJvdG90eXBlc1wiIikgXAorICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdtaXNzaW5nLWRlY2xhcmF0aW9uc1wiIikgXAorICAgIF9HTF9JTkxJTkVfSEVBREVSX0NPTlNUX1BSQUdNQQorIyBkZWZpbmUgX0dMX0lOTElORV9IRUFERVJfRU5EIFwKKyAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgcG9wIikKKyNlbHNlCisjIGRlZmluZSBfR0xfSU5MSU5FX0hFQURFUl9CRUdJTgorIyBkZWZpbmUgX0dMX0lOTElORV9IRUFERVJfRU5ECisjZW5kaWYKKworLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lc24ndCBkZWZpbmUuICovCisvKiAjdW5kZWYgZ2lkX3QgKi8KKworLyogRGVmaW5lIHRvIGBfX2lubGluZV9fJyBvciBgX19pbmxpbmUnIGlmIHRoYXQncyB3aGF0IHRoZSBDIGNvbXBpbGVyCisgICBjYWxscyBpdCwgb3IgdG8gbm90aGluZyBpZiAnaW5saW5lJyBpcyBub3Qgc3VwcG9ydGVkIHVuZGVyIGFueSBuYW1lLiAgKi8KKyNpZm5kZWYgX19jcGx1c3BsdXMKKy8qICN1bmRlZiBpbmxpbmUgKi8KKyNlbmRpZgorCisvKiBEZWZpbmUgdG8gbG9uZyBvciBsb25nIGxvbmcgaWYgPHN0ZGludC5oPiBhbmQgPGludHR5cGVzLmg+IGRvbid0IGRlZmluZS4gKi8KKy8qICN1bmRlZiBpbnRtYXhfdCAqLworCisvKiBXb3JrIGFyb3VuZCBhIGJ1ZyBpbiBBcHBsZSBHQ0MgNC4wLjEgYnVpbGQgNTQ2NTogSW4gQzk5IG1vZGUsIGl0IHN1cHBvcnRzCisgICB0aGUgSVNPIEMgOTkgc2VtYW50aWNzIG9mICdleHRlcm4gaW5saW5lJyAodW5saWtlIHRoZSBHTlUgQyBzZW1hbnRpY3Mgb2YKKyAgIGVhcmxpZXIgdmVyc2lvbnMpLCBidXQgZG9lcyBub3QgZGlzcGxheSBpdCBieSBzZXR0aW5nIF9fR05VQ19TVERDX0lOTElORV9fLgorICAgX19BUFBMRV9fICYmIF9fTUFDSF9fIHRlc3QgZm9yIE1hYyBPUyBYLgorICAgX19BUFBMRV9DQ19fIHRlc3RzIGZvciB0aGUgQXBwbGUgY29tcGlsZXIgYW5kIGl0cyB2ZXJzaW9uLgorICAgX19TVERDX1ZFUlNJT05fXyB0ZXN0cyBmb3IgdGhlIEM5OSBtb2RlLiAgKi8KKyNpZiBkZWZpbmVkIF9fQVBQTEVfXyAmJiBkZWZpbmVkIF9fTUFDSF9fICYmIF9fQVBQTEVfQ0NfXyA+PSA1NDY1ICYmICFkZWZpbmVkIF9fY3BsdXNwbHVzICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCAmJiAhZGVmaW5lZCBfX0dOVUNfU1REQ19JTkxJTkVfXworIyBkZWZpbmUgX19HTlVDX1NURENfSU5MSU5FX18gMQorI2VuZGlmCisKKy8qIERlZmluZSB0byBhIHR5cGUgaWYgPHdjaGFyLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KKy8qICN1bmRlZiBtYnN0YXRlX3QgKi8KKworLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworLyogI3VuZGVmIG1vZGVfdCAqLworCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2Ygc3RfbmxpbmsgaW4gc3RydWN0IHN0YXQsIG9yIGEgc3VwZXJ0eXBlLiAqLworLyogI3VuZGVmIG5saW5rX3QgKi8KKworLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworLyogI3VuZGVmIHBpZF90ICovCisKKy8qIERlZmluZSBhcyB0aGUgdHlwZSBvZiB0aGUgcmVzdWx0IG9mIHN1YnRyYWN0aW5nIHR3byBwb2ludGVycywgaWYgdGhlIHN5c3RlbQorICAgZG9lc24ndCBkZWZpbmUgaXQuICovCisvKiAjdW5kZWYgcHRyZGlmZl90ICovCisKKy8qIERlZmluZSB0byB0aGUgZXF1aXZhbGVudCBvZiB0aGUgQzk5ICdyZXN0cmljdCcga2V5d29yZCwgb3IgdG8KKyAgIG5vdGhpbmcgaWYgdGhpcyBpcyBub3Qgc3VwcG9ydGVkLiAgRG8gbm90IGRlZmluZSBpZiByZXN0cmljdCBpcworICAgc3VwcG9ydGVkIGRpcmVjdGx5LiAgKi8KKyNkZWZpbmUgcmVzdHJpY3QgX19yZXN0cmljdAorLyogV29yayBhcm91bmQgYSBidWcgaW4gU3VuIEMrKzogaXQgZG9lcyBub3Qgc3VwcG9ydCBfUmVzdHJpY3Qgb3IKKyAgIF9fcmVzdHJpY3RfXywgZXZlbiB0aG91Z2ggdGhlIGNvcnJlc3BvbmRpbmcgU3VuIEMgY29tcGlsZXIgZW5kcyB1cCB3aXRoCisgICAiI2RlZmluZSByZXN0cmljdCBfUmVzdHJpY3QiIG9yICIjZGVmaW5lIHJlc3RyaWN0IF9fcmVzdHJpY3RfXyIgaW4gdGhlCisgICBwcmV2aW91cyBsaW5lLiAgUGVyaGFwcyBzb21lIGZ1dHVyZSB2ZXJzaW9uIG9mIFN1biBDKysgd2lsbCB3b3JrIHdpdGgKKyAgIHJlc3RyaWN0OyBpZiBzbywgaG9wZWZ1bGx5IGl0IGRlZmluZXMgX19SRVNUUklDVCBsaWtlIFN1biBDIGRvZXMuICAqLworI2lmIGRlZmluZWQgX19TVU5QUk9fQ0MgJiYgIWRlZmluZWQgX19SRVNUUklDVAorIyBkZWZpbmUgX1Jlc3RyaWN0CisjIGRlZmluZSBfX3Jlc3RyaWN0X18KKyNlbmRpZgorCisvKiBEZWZpbmUgYXMgYW4gaW50ZWdlciB0eXBlIHN1aXRhYmxlIGZvciBtZW1vcnkgbG9jYXRpb25zIHRoYXQgY2FuIGJlCisgICBhY2Nlc3NlZCBhdG9taWNhbGx5IGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mIGFzeW5jaHJvbm91cyBzaWduYWxzLiAqLworLyogI3VuZGVmIHNpZ19hdG9taWNfdCAqLworCisvKiBEZWZpbmUgdG8gYHVuc2lnbmVkIGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisvKiAjdW5kZWYgc2l6ZV90ICovCisKKy8qIERlZmluZSBhcyBhIHNpZ25lZCB0eXBlIG9mIHRoZSBzYW1lIHNpemUgYXMgc2l6ZV90LiAqLworLyogI3VuZGVmIHNzaXplX3QgKi8KKworLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lc24ndCBkZWZpbmUuICovCisvKiAjdW5kZWYgdWlkX3QgKi8KKworLyogRGVmaW5lIGFzIGEgbWFya2VyIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIGRlY2xhcmF0aW9ucyB0aGF0IG1pZ2h0IG5vdAorICAgIGJlIHVzZWQuICBUaGlzIGhlbHBzIHRvIHJlZHVjZSB3YXJuaW5ncywgc3VjaCBhcyBmcm9tCisgICAgR0NDIC1XdW51c2VkLXBhcmFtZXRlci4gICovCisjaWYgX19HTlVDX18gPj0gMyB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA3KQorIyBkZWZpbmUgX0dMX1VOVVNFRCBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCisjZWxzZQorIyBkZWZpbmUgX0dMX1VOVVNFRAorI2VuZGlmCisvKiBUaGUgbmFtZSBfVU5VU0VEX1BBUkFNRVRFUl8gaXMgYW4gZWFybGllciBzcGVsbGluZywgYWx0aG91Z2ggdGhlIG5hbWUKKyAgIGlzIGEgbWlzbm9tZXIgb3V0c2lkZSBvZiBwYXJhbWV0ZXIgbGlzdHMuICAqLworI2RlZmluZSBfVU5VU0VEX1BBUkFNRVRFUl8gX0dMX1VOVVNFRAorCisvKiBUaGUgX19wdXJlX18gYXR0cmlidXRlIHdhcyBhZGRlZCBpbiBnY2MgMi45Ni4gICovCisjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk2KQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9QVVJFIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpCisjZWxzZQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9QVVJFIC8qIGVtcHR5ICovCisjZW5kaWYKKworLyogVGhlIF9fY29uc3RfXyBhdHRyaWJ1dGUgd2FzIGFkZGVkIGluIGdjYyAyLjk1LiAgKi8KKyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTUpCisjIGRlZmluZSBfR0xfQVRUUklCVVRFX0NPTlNUIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfQ09OU1QgLyogZW1wdHkgKi8KKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kYXJ3aW4tbGliL2NvbmZpZ21ha2UuaCBiL2Rhcndpbi1saWIvY29uZmlnbWFrZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMzI5MzEKLS0tIC9kZXYvbnVsbAorKysgYi9kYXJ3aW4tbGliL2NvbmZpZ21ha2UuaApAQCAtMCwwICsxLDI4IEBACisvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovCisjZGVmaW5lIFBSRUZJWCAiL3Vzci9sb2NhbCIKKyNkZWZpbmUgRVhFQ19QUkVGSVggIi91c3IvbG9jYWwiCisjZGVmaW5lIEJJTkRJUiAiL3Vzci9sb2NhbC9iaW4iCisjZGVmaW5lIFNCSU5ESVIgIi91c3IvbG9jYWwvc2JpbiIKKyNkZWZpbmUgTElCRVhFQ0RJUiAiL3Vzci9sb2NhbC9saWJleGVjIgorI2RlZmluZSBEQVRBUk9PVERJUiAiL3Vzci9sb2NhbC9zaGFyZSIKKyNkZWZpbmUgREFUQURJUiAiL3Vzci9sb2NhbC9zaGFyZSIKKyNkZWZpbmUgU1lTQ09ORkRJUiAiL3Vzci9sb2NhbC9ldGMiCisjZGVmaW5lIFNIQVJFRFNUQVRFRElSICIvdXNyL2xvY2FsL2NvbSIKKyNkZWZpbmUgTE9DQUxTVEFURURJUiAiL3Vzci9sb2NhbC92YXIiCisjZGVmaW5lIElOQ0xVREVESVIgIi91c3IvbG9jYWwvaW5jbHVkZSIKKyNkZWZpbmUgT0xESU5DTFVERURJUiAiL3Vzci9pbmNsdWRlIgorI2RlZmluZSBET0NESVIgIi91c3IvbG9jYWwvc2hhcmUvZG9jL2Jpc29uIgorI2RlZmluZSBJTkZPRElSICIvdXNyL2xvY2FsL3NoYXJlL2luZm8iCisjZGVmaW5lIEhUTUxESVIgIi91c3IvbG9jYWwvc2hhcmUvZG9jL2Jpc29uIgorI2RlZmluZSBEVklESVIgIi91c3IvbG9jYWwvc2hhcmUvZG9jL2Jpc29uIgorI2RlZmluZSBQREZESVIgIi91c3IvbG9jYWwvc2hhcmUvZG9jL2Jpc29uIgorI2RlZmluZSBQU0RJUiAiL3Vzci9sb2NhbC9zaGFyZS9kb2MvYmlzb24iCisjZGVmaW5lIExJQkRJUiAiL3Vzci9sb2NhbC9saWIiCisjZGVmaW5lIExJU1BESVIgIi91c3IvbG9jYWwvc2hhcmUvZW1hY3Mvc2l0ZS1saXNwIgorI2RlZmluZSBMT0NBTEVESVIgIi91c3IvbG9jYWwvc2hhcmUvbG9jYWxlIgorI2RlZmluZSBNQU5ESVIgIi91c3IvbG9jYWwvc2hhcmUvbWFuIgorLy8gUEtHREFUQURJUiBpcyBub3cgcGFzc2VkIGluIGZyb20gdGhlIGJ1aWxkIHN5c3RlbS4KKy8vI2RlZmluZSBQS0dEQVRBRElSICIvdXNyL2xvY2FsL3NoYXJlL2Jpc29uIgorI2RlZmluZSBQS0dJTkNMVURFRElSICIvdXNyL2xvY2FsL2luY2x1ZGUvYmlzb24iCisjZGVmaW5lIFBLR0xJQkRJUiAiL3Vzci9sb2NhbC9saWIvYmlzb24iCisjZGVmaW5lIFBLR0xJQkVYRUNESVIgIi91c3IvbG9jYWwvbGliZXhlYy9iaXNvbiIKZGlmZiAtLWdpdCBhL2Rhcndpbi1saWIvZmNudGwuaCBiL2Rhcndpbi1saWIvZmNudGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTEzZjNlCi0tLSAvZGV2L251bGwKKysrIGIvZGFyd2luLWxpYi9mY250bC5oCkBAIC0wLDAgKzEsNjU5IEBACisvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovCisvKiBMaWtlIDxmY250bC5oPiwgYnV0IHdpdGggbm9uLXdvcmtpbmcgZmxhZ3MgZGVmaW5lZCB0byAwLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogd3JpdHRlbiBieSBQYXVsIEVnZ2VydCAqLworCisjaWYgX19HTlVDX18gPj0gMworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorI2VuZGlmCisKKworI2lmIGRlZmluZWQgX19uZWVkX3N5c3RlbV9mY250bF9oCisvKiBTcGVjaWFsIGludm9jYXRpb24gY29udmVudGlvbi4gICovCisKKy8qIE5lZWRlZCBiZWZvcmUgPHN5cy9zdGF0Lmg+LgorICAgTWF5IGFsc28gZGVmaW5lIG9mZl90IHRvIGEgNjQtYml0IHR5cGUgb24gbmF0aXZlIFdpbmRvd3MuICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLyogT24gc29tZSBzeXN0ZW1zIG90aGVyIHRoYW4gZ2xpYmMsIDxzeXMvc3RhdC5oPiBpcyBhIHByZXJlcXVpc2l0ZSBvZgorICAgPGZjbnRsLmg+LiAgT24gZ2xpYmMgc3lzdGVtcywgd2Ugd291bGQgbGlrZSB0byBhdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9uLgorICAgQnV0IG9uIGdsaWJjIHN5c3RlbXMsIDxmY250bC5oPiBpbmNsdWRlcyA8c3lzL3N0YXQuaD4gaW5zaWRlIGFuCisgICBleHRlcm4gIkMiIHsgLi4uIH0gYmxvY2ssIHdoaWNoIGxlYWRzIHRvIGVycm9ycyBpbiBDKysgbW9kZSB3aXRoIHRoZQorICAgb3ZlcnJpZGRlbiA8c3lzL3N0YXQuaD4gZnJvbSBnbnVsaWIuICBUaGVzZSBlcnJvcnMgYXJlIGtub3duIHRvIGJlIGdvbmUKKyAgIHdpdGggZysrIHZlcnNpb24gPj0gNC4zLiAgKi8KKyNpZiAhKGRlZmluZWQgX19HTElCQ19fIHx8IGRlZmluZWQgX19VQ0xJQkNfXykgfHwgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFICYmICEoX19HTlVDX18gPiA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDMpKSkKKyMgaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2luY2x1ZGVfbmV4dCA8ZmNudGwuaD4KKworI2Vsc2UKKy8qIE5vcm1hbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24uICAqLworCisjaWZuZGVmIF9HTF9GQ05UTF9ICisKKy8qIE5lZWRlZCBiZWZvcmUgPHN5cy9zdGF0Lmg+LgorICAgTWF5IGFsc28gZGVmaW5lIG9mZl90IHRvIGEgNjQtYml0IHR5cGUgb24gbmF0aXZlIFdpbmRvd3MuICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLyogT24gc29tZSBzeXN0ZW1zIG90aGVyIHRoYW4gZ2xpYmMsIDxzeXMvc3RhdC5oPiBpcyBhIHByZXJlcXVpc2l0ZSBvZgorICAgPGZjbnRsLmg+LiAgT24gZ2xpYmMgc3lzdGVtcywgd2Ugd291bGQgbGlrZSB0byBhdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9uLgorICAgQnV0IG9uIGdsaWJjIHN5c3RlbXMsIDxmY250bC5oPiBpbmNsdWRlcyA8c3lzL3N0YXQuaD4gaW5zaWRlIGFuCisgICBleHRlcm4gIkMiIHsgLi4uIH0gYmxvY2ssIHdoaWNoIGxlYWRzIHRvIGVycm9ycyBpbiBDKysgbW9kZSB3aXRoIHRoZQorICAgb3ZlcnJpZGRlbiA8c3lzL3N0YXQuaD4gZnJvbSBnbnVsaWIuICBUaGVzZSBlcnJvcnMgYXJlIGtub3duIHRvIGJlIGdvbmUKKyAgIHdpdGggZysrIHZlcnNpb24gPj0gNC4zLiAgKi8KKyNpZiAhKGRlZmluZWQgX19HTElCQ19fIHx8IGRlZmluZWQgX19VQ0xJQkNfXykgfHwgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFICYmICEoX19HTlVDX18gPiA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDMpKSkKKyMgaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworI2luY2x1ZGVfbmV4dCA8ZmNudGwuaD4KKworI2lmbmRlZiBfR0xfRkNOVExfSAorI2RlZmluZSBfR0xfRkNOVExfSAorCisjaWZuZGVmIF9fR0xJQkNfXyAvKiBBdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9uIG9uIGdsaWJjIHN5c3RlbXMuICAqLworIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisvKiBOYXRpdmUgV2luZG93cyBwbGF0Zm9ybXMgZGVjbGFyZSBvcGVuKCksIGNyZWF0KCkgaW4gPGlvLmg+LiAgKi8KKyNpZiAoMSB8fCBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLKSBcCisgICAgJiYgKChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgISBkZWZpbmVkIF9fQ1lHV0lOX18pCisjIGluY2x1ZGUgPGlvLmg+CisjZW5kaWYKKworCisvKiBUaGUgZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTCBldGMuIGFyZSBjb3BpZWQgaGVyZS4gICovCisjaWZuZGVmIF9HTF9DWFhERUZTX0gKKyNkZWZpbmUgX0dMX0NYWERFRlNfSAorCisvKiBUaGUgdGhyZWUgbW9zdCBmcmVxdWVudCB1c2UgY2FzZXMgb2YgdGhlc2UgbWFjcm9zIGFyZToKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgc3Vic3RpdHV0ZSBmb3IgYSBmdW5jdGlvbiB0aGF0IGlzIG1pc3Npbmcgb24gc29tZQorICAgICBwbGF0Zm9ybXMsIGJ1dCBpcyBkZWNsYXJlZCBhbmQgd29ya3MgZmluZSBvbiB0aGUgcGxhdGZvcm1zIG9uIHdoaWNoCisgICAgIGl0IGV4aXN0czoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmICFASEFWRV9GT09ACisgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIGFsbCBwbGF0Zm9ybXMsCisgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIHBsYXRmb3JtczoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorICAgICAgICMgICB1bmRlZiBmb28KKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworICAgICAgICMgZWxzZQorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIHNvbWUgcGxhdGZvcm1zCisgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIG9mIHRoZW0gYW5kCisgICAgIGlzIGFkZGl0aW9uYWxseSBlaXRoZXIgbWlzc2luZyBvciB1bmRlY2xhcmVkIG9uIHNvbWUgb3RoZXIgcGxhdGZvcm1zOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisgICAgICAgIyAgIHVuZGVmIGZvbworICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CisgICAgICAgIyBlbHNlCisgICAgICAgIyAgaWYgIUBIQVZFX0ZPT0AgICBvciAgIGlmICFASEFWRV9ERUNMX0ZPT0AKKyAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorKi8KKworLyogX0dMX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuICJDIgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4KKyNlbmRpZgorCisvKiBfR0xfRlVOQ0RFQ0xfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGRlY2xhcmVzIGEgcmVwbGFjZW1lbnQgZnVuY3Rpb24sIG5hbWVkIHJwbF9mdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9GVU5DREVDTF9SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICovCisjZGVmaW5lIF9HTF9GVU5DREVDTF9SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0ZVTkNERUNMX1JQTF8xIChycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKQorI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMXzEocnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9FWFRFUk5fQyByZXR0eXBlIHJwbF9mdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKworLyogX0dMX0ZVTkNERUNMX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBkZWNsYXJlcyB0aGUgc3lzdGVtIGZ1bmN0aW9uLCBuYW1lZCBmdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9GVU5DREVDTF9TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICovCisjZGVmaW5lIF9HTF9GVU5DREVDTF9TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0VYVEVSTl9DIHJldHR5cGUgZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisKKy8qIF9HTF9DWFhBTElBU19SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHJwbF9mdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFIGlzIGRlZmluZWQuCisgICBFeGFtcGxlOgorICAgICBfR0xfQ1hYQUxJQVNfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKyAqLworI2RlZmluZSBfR0xfQ1hYQUxJQVNfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycykKKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OnJwbF9mdW5jOyAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gcnBsX2Z1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQKKyAgIGRlY2xhcmF0aW9uLiAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IKKyAgIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpycGxfZnVuYyk7ICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHRoZSBzeXN0ZW0gcHJvdmlkZWQgZnVuY3Rpb24gZnVuYywgaWYgR05VTElCX05BTUVTUEFDRQorICAgaXMgZGVmaW5lZC4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9DWFhBTElBU19TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyAgLyogSWYgd2Ugd2VyZSB0byB3cml0ZQorICAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOworICAgICBsaWtlIGFib3ZlIGluIF9HTF9DWFhBTElBU19SUExfMSwgdGhlIGNvbXBpbGVyIGNvdWxkIG9wdGltaXplIGNhbGxzCisgICAgIGJldHRlciAocmVtb3ZlIGFuIGluZGlyZWN0aW9uIHRocm91Z2ggYSAnc3RhdGljJyBwb2ludGVyIHZhcmlhYmxlKSwKKyAgICAgYnV0IHRoZW4gdGhlIF9HTF9DWFhBTElBU1dBUk4gbWFjcm8gYmVsb3cgd291bGQgY2F1c2UgYSB3YXJuaW5nIG5vdCBvbmx5CisgICAgIGZvciB1c2VzIG9mIDo6ZnVuYyBidXQgYWxzbyBmb3IgdXNlcyBvZiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jLiAgKi8KKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGZ1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgZGVjbGFyYXRpb24uCisgICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvciB0aGF0IHdvdWxkCisgICBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpmdW5jKTsgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMsIHJldHR5cGUyLCBwYXJhbWV0ZXJzMik7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGlzIHBpY2tlZCBhbW9uZyBhIHNldCBvZiBvdmVybG9hZGVkIGZ1bmN0aW9ucywKKyAgIG5hbWVseSB0aGUgb25lIHdpdGggcmV0dHlwZTIgYW5kIHBhcmFtZXRlcnMyLiAgVHdvIGNvbnNlY3V0aXZlIGNhc3RzCisgICBhcmUgdXNlZCB0byBzaWxlbmNlIHRoZSAiY2Fubm90IGZpbmQgYSBtYXRjaCIgYW5kICJpbnZhbGlkIGNvbnZlcnNpb24iCisgICBlcnJvcnMgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisgIC8qIFRoZSBvdXRlciBjYXN0IG11c3QgYmUgYSByZWludGVycHJldF9jYXN0LgorICAgICBUaGUgaW5uZXIgY2FzdDogV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNldCBvZiBvdmVybG9hZGVkCisgICAgIGZ1bmN0aW9ucywgaXQgd29ya3MgYXMgYSBzdGF0aWNfY2FzdDw+LCBjaG9vc2luZyB0aGUgZGVzaWduYXRlZCB2YXJpYW50LgorICAgICBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2luZ2xlIHZhcmlhbnQsIGl0IHdvcmtzIGFzIGEKKyAgICAgcmVpbnRlcnByZXRfY2FzdDw+LiBUaGUgcGFyZW50aGVzaXplZCBjYXN0IHN5bnRheCB3b3JrcyBib3RoIHdheXMuICAqLworIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChyZXR0eXBlMigqKXBhcmFtZXRlcnMyKSg6OmZ1bmMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTV0FSTiAoZnVuYyk7CisgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiA6OmZ1bmMgaXMgdXNlZCBidXQgbm90IHdoZW4KKyAgIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gIGZ1bmMgbXVzdCBiZSBkZWZpbmVkIHdpdGhvdXQgb3ZlcmxvYWRlZAorICAgdmFyaWFudHMuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk5fMSAoZnVuYywgR05VTElCX05BTUVTUEFDRSkKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMShmdW5jLG5hbWVzcGFjZSkgXAorICAgX0dMX0NYWEFMSUFTV0FSTl8yIChmdW5jLCBuYW1lc3BhY2UpCisvKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKyAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworIyBpZiAhX19PUFRJTUlaRV9fCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgX0dMX1dBUk5fT05fVVNFIChmdW5jLCBcCisgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworIyBlbHNlCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNXQVJOMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiB0aGUgZ2l2ZW4gb3ZlcmxvYWRlZCB2YXJpYW50IG9mIDo6ZnVuYworICAgaXMgdXNlZCBidXQgbm90IHdoZW4gR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk4xXzEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdOVUxJQl9OQU1FU1BBQ0UpCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgX0dMX0NYWEFMSUFTV0FSTjFfMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgbmFtZXNwYWNlKQorLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKyMgaWYgIV9fT1BUSU1JWkVfXworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisjZW5kaWYgLyogX0dMX0NYWERFRlNfSCAqLworCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwgaXMgY29waWVkIGhlcmUuICAqLworLyogX0dMX0FSR19OT05OVUxMKChuLC4uLixtKSkgdGVsbHMgdGhlIGNvbXBpbGVyIGFuZCBzdGF0aWMgYW5hbHl6ZXIgdG9vbHMKKyAgIHRoYXQgdGhlIHZhbHVlcyBwYXNzZWQgYXMgYXJndW1lbnRzIG4sIC4uLiwgbSBtdXN0IGJlIG5vbi1OVUxMIHBvaW50ZXJzLgorICAgbiA9IDEgc3RhbmRzIGZvciB0aGUgZmlyc3QgYXJndW1lbnQsIG4gPSAyIGZvciB0aGUgc2Vjb25kIGFyZ3VtZW50IGV0Yy4gICovCisjaWZuZGVmIF9HTF9BUkdfTk9OTlVMTAorIyBpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSB8fCBfX0dOVUNfXyA+IDMKKyMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKSBfX2F0dHJpYnV0ZV9fICgoX19ub25udWxsX18gcGFyYW1zKSkKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpCisjIGVuZGlmCisjZW5kaWYKKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFCisKKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCisvKiBBIGNvbXBpbGVyIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDQuMy4wIGFuZCBsYXRlci4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobWVzc2FnZSkpKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24KKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisjIGVuZGlmCisjZW5kaWYKKworLyogX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuY3Rpb24sIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsICJzdHJpbmciKQorICAgaXMgbGlrZSBfR0xfV0FSTl9PTl9VU0UgKGZ1bmN0aW9uLCAic3RyaW5nIiksIGV4Y2VwdCB0aGF0IHRoZSBmdW5jdGlvbiBpcworICAgZGVjbGFyZWQgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLCBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLAorICAgYW5kIGF0dHJpYnV0ZXMuCisgICBUaGlzIHZhcmlhbnQgaXMgdXNlZnVsIGZvciBvdmVybG9hZGVkIGZ1bmN0aW9ucyBpbiBDKysuIF9HTF9XQVJOX09OX1VTRSBkb2VzCisgICBub3Qgd29yayBpbiB0aGlzIGNhc2UuICAqLworI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0VfQ1hYCisjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyBcCisgICAgIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobXNnKSkpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisvKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBfR0xfV0FSTl9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX0VYVEVSTl9DCisjIGlmIGRlZmluZWQgX19jcGx1c3BsdXMKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4gIkMiCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4KKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIERlY2xhcmUgb3ZlcnJpZGRlbiBmdW5jdGlvbnMuICAqLworCisjaWYgMQorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZjbnRsCisjICAgZGVmaW5lIGZjbnRsIHJwbF9mY250bAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZjbnRsLCBpbnQsIChpbnQgZmQsIGludCBhY3Rpb24sIC4uLikpOworX0dMX0NYWEFMSUFTX1JQTCAoZmNudGwsIGludCwgKGludCBmZCwgaW50IGFjdGlvbiwgLi4uKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChmY250bCwgaW50LCAoaW50IGZkLCBpbnQgYWN0aW9uLCAuLi4pKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmY250bCwgaW50LCAoaW50IGZkLCBpbnQgYWN0aW9uLCAuLi4pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZjbnRsKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZmNudGwKKyMgaWYgSEFWRV9SQVdfREVDTF9GQ05UTAorX0dMX1dBUk5fT05fVVNFIChmY250bCwgImZjbnRsIGlzIG5vdCBhbHdheXMgUE9TSVggY29tcGxpYW50IC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZmNudGwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDEKKyMgaWYgMQorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBvcGVuCisjICAgZGVmaW5lIG9wZW4gcnBsX29wZW4KKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CisjIGVuZGlmCisvKiBPbiBIUC1VWCAxMSwgaW4gQysrIG1vZGUsIG9wZW4oKSBpcyBkZWZpbmVkIGFzIGFuIGlubGluZSBmdW5jdGlvbiB3aXRoIGEKKyAgIGRlZmF1bHQgYXJndW1lbnQuICBfR0xfQ1hYQUxJQVNXQVJOIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBjYXNlLiAgKi8KKyMgaWYgIWRlZmluZWQgX19ocHV4CitfR0xfQ1hYQUxJQVNXQVJOIChvcGVuKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgb3BlbgorLyogQXNzdW1lIG9wZW4gaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAob3BlbiwgIm9wZW4gaXMgbm90IGFsd2F5cyBQT1NJWCBjb21wbGlhbnQgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBvcGVuIGZvciBwb3J0YWJpbGl0eSIpOworI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgb3BlbmF0CisjICAgZGVmaW5lIG9wZW5hdCBycGxfb3BlbmF0CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAob3BlbmF0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlLCBpbnQgZmxhZ3MsIC8qIG1vZGVfdCBtb2RlICovIC4uLikKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChvcGVuYXQsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGUsIGludCBmbGFncywgLyogbW9kZV90IG1vZGUgKi8gLi4uKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChvcGVuYXQsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGUsIGludCBmbGFncywgLyogbW9kZV90IG1vZGUgKi8gLi4uKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChvcGVuYXQsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGUsIGludCBmbGFncywgLyogbW9kZV90IG1vZGUgKi8gLi4uKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChvcGVuYXQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBvcGVuYXQKKyMgaWYgSEFWRV9SQVdfREVDTF9PUEVOQVQKK19HTF9XQVJOX09OX1VTRSAob3BlbmF0LCAib3BlbmF0IGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG9wZW5hdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIEZpeCB1cCB0aGUgRkRfKiBtYWNyb3MsIG9ubHkga25vd24gdG8gYmUgbWlzc2luZyBvbiBtaW5ndy4gICovCisKKyNpZm5kZWYgRkRfQ0xPRVhFQworIyBkZWZpbmUgRkRfQ0xPRVhFQyAxCisjZW5kaWYKKworLyogRml4IHVwIHRoZSBzdXBwb3J0ZWQgRl8qIG1hY3Jvcy4gIEludGVudGlvbmFsbHkgbGVhdmUgb3RoZXIgRl8qCisgICBtYWNyb3MgdW5kZWZpbmVkLiAgT25seSBrbm93biB0byBiZSBtaXNzaW5nIG9uIG1pbmd3LiAgKi8KKworI2lmbmRlZiBGX0RVUEZEX0NMT0VYRUMKKyMgZGVmaW5lIEZfRFVQRkRfQ0xPRVhFQyAweDQwMDAwMDAwCisvKiBXaXRuZXNzIHZhcmlhYmxlOiAxIGlmIGdudWxpYiBkZWZpbmVkIEZfRFVQRkRfQ0xPRVhFQywgMCBvdGhlcndpc2UuICAqLworIyBkZWZpbmUgR05VTElCX2RlZmluZWRfRl9EVVBGRF9DTE9FWEVDIDEKKyNlbHNlCisjIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9GX0RVUEZEX0NMT0VYRUMgMAorI2VuZGlmCisKKyNpZm5kZWYgRl9EVVBGRAorIyBkZWZpbmUgRl9EVVBGRCAxCisjZW5kaWYKKworI2lmbmRlZiBGX0dFVEZECisjIGRlZmluZSBGX0dFVEZEIDIKKyNlbmRpZgorCisvKiBGaXggdXAgdGhlIE9fKiBtYWNyb3MuICAqLworCisjaWYgIWRlZmluZWQgT19ESVJFQ1QgJiYgZGVmaW5lZCBPX0RJUkVDVElPCisvKiBUcnU2NCBzcGVsbHMgaXQgJ09fRElSRUNUSU8nLiAgKi8KKyMgZGVmaW5lIE9fRElSRUNUIE9fRElSRUNUSU8KKyNlbmRpZgorCisjaWYgIWRlZmluZWQgT19DTE9FWEVDICYmIGRlZmluZWQgT19OT0lOSEVSSVQKKy8qIE1pbmd3IHNwZWxscyBpdCAnT19OT0lOSEVSSVQnLiAgKi8KKyMgZGVmaW5lIE9fQ0xPRVhFQyBPX05PSU5IRVJJVAorI2VuZGlmCisKKyNpZm5kZWYgT19DTE9FWEVDCisjIGRlZmluZSBPX0NMT0VYRUMgMAorI2VuZGlmCisKKyNpZm5kZWYgT19ESVJFQ1QKKyMgZGVmaW5lIE9fRElSRUNUIDAKKyNlbmRpZgorCisjaWZuZGVmIE9fRElSRUNUT1JZCisjIGRlZmluZSBPX0RJUkVDVE9SWSAwCisjZW5kaWYKKworI2lmbmRlZiBPX0RTWU5DCisjIGRlZmluZSBPX0RTWU5DIDAKKyNlbmRpZgorCisjaWZuZGVmIE9fRVhFQworIyBkZWZpbmUgT19FWEVDIE9fUkRPTkxZIC8qIFRoaXMgaXMgb2Z0ZW4gY2xvc2UgZW5vdWdoIGluIG9sZGVyIHN5c3RlbXMuICAqLworI2VuZGlmCisKKyNpZm5kZWYgT19JR05PUkVfQ1RUWQorIyBkZWZpbmUgT19JR05PUkVfQ1RUWSAwCisjZW5kaWYKKworI2lmbmRlZiBPX05ERUxBWQorIyBkZWZpbmUgT19OREVMQVkgMAorI2VuZGlmCisKKyNpZm5kZWYgT19OT0FUSU1FCisjIGRlZmluZSBPX05PQVRJTUUgMAorI2VuZGlmCisKKyNpZm5kZWYgT19OT05CTE9DSworIyBkZWZpbmUgT19OT05CTE9DSyBPX05ERUxBWQorI2VuZGlmCisKKy8qIElmIHRoZSBnbnVsaWIgbW9kdWxlICdub25ibG9ja2luZycgaXMgaW4gdXNlLCBndWFyYW50ZWUgYSB3b3JraW5nIG5vbi16ZXJvCisgICB2YWx1ZSBvZiBPX05PTkJMT0NLLiAgT3RoZXJ3aXNlLCBPX05PTkJMT0NLIGlzIGRlZmluZWQgKGFib3ZlKSB0byBPX05ERUxBWQorICAgb3IgdG8gMCBhcyBmYWxsYmFjay4gICovCisjaWYgMAorIyBpZiBPX05PTkJMT0NLCisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfT19OT05CTE9DSyAwCisjIGVsc2UKKyMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9PX05PTkJMT0NLIDEKKyMgIHVuZGVmIE9fTk9OQkxPQ0sKKyMgIGRlZmluZSBPX05PTkJMT0NLIDB4NDAwMDAwMDAKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIE9fTk9DVFRZCisjIGRlZmluZSBPX05PQ1RUWSAwCisjZW5kaWYKKworI2lmbmRlZiBPX05PRk9MTE9XCisjIGRlZmluZSBPX05PRk9MTE9XIDAKKyNlbmRpZgorCisjaWZuZGVmIE9fTk9MSU5LCisjIGRlZmluZSBPX05PTElOSyAwCisjZW5kaWYKKworI2lmbmRlZiBPX05PTElOS1MKKyMgZGVmaW5lIE9fTk9MSU5LUyAwCisjZW5kaWYKKworI2lmbmRlZiBPX05PVFJBTlMKKyMgZGVmaW5lIE9fTk9UUkFOUyAwCisjZW5kaWYKKworI2lmbmRlZiBPX1JTWU5DCisjIGRlZmluZSBPX1JTWU5DIDAKKyNlbmRpZgorCisjaWZuZGVmIE9fU0VBUkNICisjIGRlZmluZSBPX1NFQVJDSCBPX1JET05MWSAvKiBUaGlzIGlzIG9mdGVuIGNsb3NlIGVub3VnaCBpbiBvbGRlciBzeXN0ZW1zLiAgKi8KKyNlbmRpZgorCisjaWZuZGVmIE9fU1lOQworIyBkZWZpbmUgT19TWU5DIDAKKyNlbmRpZgorCisjaWZuZGVmIE9fVFRZX0lOSVQKKyMgZGVmaW5lIE9fVFRZX0lOSVQgMAorI2VuZGlmCisKKyNpZiB+T19BQ0NNT0RFICYgKE9fUkRPTkxZIHwgT19XUk9OTFkgfCBPX1JEV1IgfCBPX0VYRUMgfCBPX1NFQVJDSCkKKyMgdW5kZWYgT19BQ0NNT0RFCisjIGRlZmluZSBPX0FDQ01PREUgKE9fUkRPTkxZIHwgT19XUk9OTFkgfCBPX1JEV1IgfCBPX0VYRUMgfCBPX1NFQVJDSCkKKyNlbmRpZgorCisvKiBGb3Igc3lzdGVtcyB0aGF0IGRpc3Rpbmd1aXNoIGJldHdlZW4gdGV4dCBhbmQgYmluYXJ5IEkvTy4KKyAgIE9fQklOQVJZIGlzIHVzdWFsbHkgZGVjbGFyZWQgaW4gZmNudGwuaCAgKi8KKyNpZiAhZGVmaW5lZCBPX0JJTkFSWSAmJiBkZWZpbmVkIF9PX0JJTkFSWQorICAvKiBGb3IgTVNDLWNvbXBhdGlibGUgY29tcGlsZXJzLiAgKi8KKyMgZGVmaW5lIE9fQklOQVJZIF9PX0JJTkFSWQorIyBkZWZpbmUgT19URVhUIF9PX1RFWFQKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfX0JFT1NfXyB8fCBkZWZpbmVkIF9fSEFJS1VfXworICAvKiBCZU9TIDUgYW5kIEhhaWt1IGhhdmUgT19CSU5BUlkgYW5kIE9fVEVYVCwgYnV0IHRoZXkgaGF2ZSBubyBlZmZlY3QuICAqLworIyB1bmRlZiBPX0JJTkFSWQorIyB1bmRlZiBPX1RFWFQKKyNlbmRpZgorCisjaWZuZGVmIE9fQklOQVJZCisjIGRlZmluZSBPX0JJTkFSWSAwCisjIGRlZmluZSBPX1RFWFQgMAorI2VuZGlmCisKKy8qIEZpeCB1cCB0aGUgQVRfKiBtYWNyb3MuICAqLworCisvKiBXb3JrIGFyb3VuZCBhIGJ1ZyBpbiBTb2xhcmlzIDkgYW5kIDEwOiBBVF9GRENXRCBpcyBwb3NpdGl2ZS4gIEl0cworICAgdmFsdWUgZXhjZWVkcyBJTlRfTUFYLCBzbyBpdHMgdXNlIGFzIGFuIGludCBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlCisgICBDIHN0YW5kYXJkLCBhbmQgR0NDIGFuZCBTdW4gQyBjb21wbGFpbiBpbiBzb21lIGNhc2VzLiAgSWYgdGhlIGJ1ZworICAgaXMgcHJlc2VudCwgdW5kZWYgQVRfRkRDV0QgaGVyZSwgc28gaXQgY2FuIGJlIHJlZGVmaW5lZCBiZWxvdy4gICovCisjaWYgMCA8IEFUX0ZEQ1dEICYmIEFUX0ZEQ1dEID09IDB4ZmZkMTk1NTMKKyMgdW5kZWYgQVRfRkRDV0QKKyNlbmRpZgorCisvKiBVc2UgdGhlIHNhbWUgYml0IHBhdHRlcm4gYXMgU29sYXJpcyA5LCBidXQgd2l0aCB0aGUgcHJvcGVyCisgICBzaWduZWRuZXNzLiAgVGhlIGJpdCBwYXR0ZXJuIGlzIGltcG9ydGFudCwgaW4gY2FzZSB0aGlzIGFjdHVhbGx5IGlzCisgICBTb2xhcmlzIHdpdGggdGhlIGFib3ZlIHdvcmthcm91bmQuICAqLworI2lmbmRlZiBBVF9GRENXRAorIyBkZWZpbmUgQVRfRkRDV0QgKC0zMDQxOTY1KQorI2VuZGlmCisKKy8qIFVzZSB0aGUgc2FtZSB2YWx1ZXMgYXMgU29sYXJpcyA5LiAgVGhpcyBzaG91bGRuJ3QgbWF0dGVyLCBidXQKKyAgIHRoZXJlJ3Mgbm8gcmVhbCByZWFzb24gdG8gZGlmZmVyLiAgKi8KKyNpZm5kZWYgQVRfU1lNTElOS19OT0ZPTExPVworIyBkZWZpbmUgQVRfU1lNTElOS19OT0ZPTExPVyA0MDk2CisjZW5kaWYKKworI2lmbmRlZiBBVF9SRU1PVkVESVIKKyMgZGVmaW5lIEFUX1JFTU9WRURJUiAxCisjZW5kaWYKKworLyogU29sYXJpcyA5IGxhY2tzIHRoZXNlIHR3bywgc28ganVzdCBwaWNrIHVuaXF1ZSB2YWx1ZXMuICAqLworI2lmbmRlZiBBVF9TWU1MSU5LX0ZPTExPVworIyBkZWZpbmUgQVRfU1lNTElOS19GT0xMT1cgMgorI2VuZGlmCisKKyNpZm5kZWYgQVRfRUFDQ0VTUworIyBkZWZpbmUgQVRfRUFDQ0VTUyA0CisjZW5kaWYKKworCisjZW5kaWYgLyogX0dMX0ZDTlRMX0ggKi8KKyNlbmRpZiAvKiBfR0xfRkNOVExfSCAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9kYXJ3aW4tbGliL2dldG9wdC5oIGIvZGFyd2luLWxpYi9nZXRvcHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGRhODA5Ci0tLSAvZGV2L251bGwKKysrIGIvZGFyd2luLWxpYi9nZXRvcHQuaApAQCAtMCwwICsxLDI2NCBAQAorLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLworLyogRGVjbGFyYXRpb25zIGZvciBnZXRvcHQuCisgICBDb3B5cmlnaHQgKEMpIDE5ODktMTk5NCwgMTk5Ni0xOTk5LCAyMDAxLCAyMDAzLTIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBfR0xfR0VUT1BUX0gKKworI2lmIF9fR05VQ19fID49IDMKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKyNlbmRpZgorCisKKy8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgV2UgbXVzdAorICAgYWxzbyBpbmZvcm0gdGhlIHJlcGxhY2VtZW50IHVuaXN0ZC5oIHRvIG5vdCByZWN1cnNpdmVseSB1c2UKKyAgIDxnZXRvcHQuaD47IG91ciBkZWZpbml0aW9ucyB3aWxsIGJlIHByZXNlbnQgc29vbiBlbm91Z2guICAqLworI2lmIDEKKyMgZGVmaW5lIF9HTF9TWVNURU1fR0VUT1BUCisjIGluY2x1ZGVfbmV4dCA8Z2V0b3B0Lmg+CisjIHVuZGVmIF9HTF9TWVNURU1fR0VUT1BUCisjZW5kaWYKKworI2lmbmRlZiBfR0xfR0VUT1BUX0gKKworI2lmbmRlZiBfX25lZWRfZ2V0b3B0CisjIGRlZmluZSBfR0xfR0VUT1BUX0ggMQorI2VuZGlmCisKKy8qIFN0YW5kYWxvbmUgYXBwbGljYXRpb25zIHNob3VsZCAjZGVmaW5lIF9fR0VUT1BUX1BSRUZJWCB0byBhbgorICAgaWRlbnRpZmllciB0aGF0IHByZWZpeGVzIHRoZSBleHRlcm5hbCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcworICAgZGVmaW5lZCBpbiB0aGlzIGhlYWRlci4gIFdoZW4gdGhpcyBoYXBwZW5zLCBpbmNsdWRlIHRoZQorICAgaGVhZGVycyB0aGF0IG1pZ2h0IGRlY2xhcmUgZ2V0b3B0IHNvIHRoYXQgdGhleSB3aWxsIG5vdCBjYXVzZQorICAgY29uZnVzaW9uIGlmIGluY2x1ZGVkIGFmdGVyIHRoaXMgZmlsZSAoaWYgdGhlIHN5c3RlbSBoYWQgPGdldG9wdC5oPiwKKyAgIHdlIGhhdmUgYWxyZWFkeSBpbmNsdWRlZCBpdCkuICBUaGVuIHN5c3RlbWF0aWNhbGx5IHJlbmFtZQorICAgaWRlbnRpZmllcnMgc28gdGhhdCB0aGV5IGRvIG5vdCBjb2xsaWRlIHdpdGggdGhlIHN5c3RlbSBmdW5jdGlvbnMKKyAgIGFuZCB2YXJpYWJsZXMuICBSZW5hbWluZyBhdm9pZHMgcHJvYmxlbXMgd2l0aCBzb21lIGNvbXBpbGVycyBhbmQKKyAgIGxpbmtlcnMuICAqLworI2lmIGRlZmluZWQgX19HRVRPUFRfUFJFRklYICYmICFkZWZpbmVkIF9fbmVlZF9nZXRvcHQKKyMgaWYgITEKKyMgIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyAgaW5jbHVkZSA8c3RkaW8uaD4KKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPgorIyBlbmRpZgorIyB1bmRlZiBfX25lZWRfZ2V0b3B0CisjIHVuZGVmIGdldG9wdAorIyB1bmRlZiBnZXRvcHRfbG9uZworIyB1bmRlZiBnZXRvcHRfbG9uZ19vbmx5CisjIHVuZGVmIG9wdGFyZworIyB1bmRlZiBvcHRlcnIKKyMgdW5kZWYgb3B0aW5kCisjIHVuZGVmIG9wdG9wdAorIyB1bmRlZiBvcHRpb24KKyMgZGVmaW5lIF9fR0VUT1BUX0NPTkNBVCh4LCB5KSB4ICMjIHkKKyMgZGVmaW5lIF9fR0VUT1BUX1hDT05DQVQoeCwgeSkgX19HRVRPUFRfQ09OQ0FUICh4LCB5KQorIyBkZWZpbmUgX19HRVRPUFRfSUQoeSkgX19HRVRPUFRfWENPTkNBVCAoX19HRVRPUFRfUFJFRklYLCB5KQorIyBkZWZpbmUgZ2V0b3B0IF9fR0VUT1BUX0lEIChnZXRvcHQpCisjIGRlZmluZSBnZXRvcHRfbG9uZyBfX0dFVE9QVF9JRCAoZ2V0b3B0X2xvbmcpCisjIGRlZmluZSBnZXRvcHRfbG9uZ19vbmx5IF9fR0VUT1BUX0lEIChnZXRvcHRfbG9uZ19vbmx5KQorIyBkZWZpbmUgb3B0YXJnIF9fR0VUT1BUX0lEIChvcHRhcmcpCisjIGRlZmluZSBvcHRlcnIgX19HRVRPUFRfSUQgKG9wdGVycikKKyMgZGVmaW5lIG9wdGluZCBfX0dFVE9QVF9JRCAob3B0aW5kKQorIyBkZWZpbmUgb3B0b3B0IF9fR0VUT1BUX0lEIChvcHRvcHQpCisjIGRlZmluZSBvcHRpb24gX19HRVRPUFRfSUQgKG9wdGlvbikKKyMgZGVmaW5lIF9nZXRvcHRfaW50ZXJuYWwgX19HRVRPUFRfSUQgKGdldG9wdF9pbnRlcm5hbCkKKyNlbmRpZgorCisvKiBTdGFuZGFsb25lIGFwcGxpY2F0aW9ucyBnZXQgY29ycmVjdCBwcm90b3R5cGVzIGZvciBnZXRvcHRfbG9uZyBhbmQKKyAgIGdldG9wdF9sb25nX29ubHk7IHRoZXkgZGVjbGFyZSAiY2hhciAqKmFyZ3YiLiAgbGliYyB1c2VzIHByb3RvdHlwZXMKKyAgIHdpdGggImNoYXIgKmNvbnN0ICphcmd2IiB0aGF0IGFyZSBpbmNvcnJlY3QgYmVjYXVzZSBnZXRvcHRfbG9uZyBhbmQKKyAgIGdldG9wdF9sb25nX29ubHkgY2FuIHBlcm11dGUgYXJndjsgdGhpcyBpcyByZXF1aXJlZCBmb3IgYmFja3dhcmQKKyAgIGNvbXBhdGliaWxpdHkgKGUuZy4sIGZvciBMU0IgMi4wLjEpLgorCisgICBUaGlzIHVzZWQgdG8gYmUgJyNpZiBkZWZpbmVkIF9fR0VUT1BUX1BSRUZJWCAmJiAhZGVmaW5lZCBfX25lZWRfZ2V0b3B0JywKKyAgIGJ1dCBpdCBjYXVzZWQgcmVkZWZpbml0aW9uIHdhcm5pbmdzIGlmIGJvdGggdW5pc3RkLmggYW5kIGdldG9wdC5oIHdlcmUKKyAgIGluY2x1ZGVkLCBzaW5jZSB1bmlzdGQuaCBpbmNsdWRlcyBnZXRvcHQuaCBoYXZpbmcgcHJldmlvdXNseSBkZWZpbmVkCisgICBfX25lZWRfZ2V0b3B0LgorCisgICBUaGUgb25seSBwbGFjZSB3aGVyZSBfX2dldG9wdF9hcmd2X2NvbnN0IGlzIHVzZWQgaXMgaW4gZGVmaW5pdGlvbnMKKyAgIG9mIGdldG9wdF9sb25nIGFuZCBnZXRvcHRfbG9uZ19vbmx5IGJlbG93LCBidXQgdGhlc2UgYXJlIHZpc2libGUKKyAgIG9ubHkgaWYgX19uZWVkX2dldG9wdCBpcyBub3QgZGVmaW5lZCwgc28gaXQgaXMgcXVpdGUgc2FmZSB0byByZXdyaXRlCisgICB0aGUgY29uZGl0aW9uYWwgYXMgZm9sbG93czoKKyovCisjaWYgIWRlZmluZWQgX19uZWVkX2dldG9wdAorIyBpZiBkZWZpbmVkIF9fR0VUT1BUX1BSRUZJWAorIyAgZGVmaW5lIF9fZ2V0b3B0X2FyZ3ZfY29uc3QgLyogZW1wdHkgKi8KKyMgZWxzZQorIyAgZGVmaW5lIF9fZ2V0b3B0X2FyZ3ZfY29uc3QgY29uc3QKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBJZiBfX0dOVV9MSUJSQVJZX18gaXMgbm90IGFscmVhZHkgZGVmaW5lZCwgZWl0aGVyIHdlIGFyZSBiZWluZyB1c2VkCisgICBzdGFuZGFsb25lLCBvciB0aGlzIGlzIHRoZSBmaXJzdCBoZWFkZXIgaW5jbHVkZWQgaW4gdGhlIHNvdXJjZSBmaWxlLgorICAgSWYgd2UgYXJlIGJlaW5nIHVzZWQgd2l0aCBnbGliYywgd2UgbmVlZCB0byBpbmNsdWRlIDxmZWF0dXJlcy5oPiwgYnV0CisgICB0aGF0IGRvZXMgbm90IGV4aXN0IGlmIHdlIGFyZSBzdGFuZGFsb25lLiAgU286IGlmIF9fR05VX0xJQlJBUllfXyBpcworICAgbm90IGRlZmluZWQsIGluY2x1ZGUgPGN0eXBlLmg+LCB3aGljaCB3aWxsIHB1bGwgaW4gPGZlYXR1cmVzLmg+IGZvciB1cworICAgaWYgaXQncyBmcm9tIGdsaWJjLiAgKFdoeSBjdHlwZS5oPyAgSXQncyBndWFyYW50ZWVkIHRvIGV4aXN0IGFuZCBpdAorICAgZG9lc24ndCBmbG9vZCB0aGUgbmFtZXNwYWNlIHdpdGggc3R1ZmYgdGhlIHdheSBzb21lIG90aGVyIGhlYWRlcnMgZG8uKSAgKi8KKyNpZiAhZGVmaW5lZCBfX0dOVV9MSUJSQVJZX18KKyMgaW5jbHVkZSA8Y3R5cGUuaD4KKyNlbmRpZgorCisjaWZuZGVmIF9fVEhST1cKKyMgaWZuZGVmIF9fR05VQ19QUkVSRVEKKyMgIGRlZmluZSBfX0dOVUNfUFJFUkVRKG1haiwgbWluKSAoMCkKKyMgZW5kaWYKKyMgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBfX0dOVUNfUFJFUkVRICgyLDgpCisjICBkZWZpbmUgX19USFJPVyAgICAgICB0aHJvdyAoKQorIyBlbHNlCisjICBkZWZpbmUgX19USFJPVworIyBlbmRpZgorI2VuZGlmCisKKy8qIFRoZSBkZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVMTCBpcyBjb3BpZWQgaGVyZS4gICovCisvKiBfR0xfQVJHX05PTk5VTEwoKG4sLi4uLG0pKSB0ZWxscyB0aGUgY29tcGlsZXIgYW5kIHN0YXRpYyBhbmFseXplciB0b29scworICAgdGhhdCB0aGUgdmFsdWVzIHBhc3NlZCBhcyBhcmd1bWVudHMgbiwgLi4uLCBtIG11c3QgYmUgbm9uLU5VTEwgcG9pbnRlcnMuCisgICBuID0gMSBzdGFuZHMgZm9yIHRoZSBmaXJzdCBhcmd1bWVudCwgbiA9IDIgZm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgZXRjLiAgKi8KKyNpZm5kZWYgX0dMX0FSR19OT05OVUxMCisjIGlmIChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID49IDMpIHx8IF9fR05VQ19fID4gMworIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpIF9fYXR0cmlidXRlX18gKChfX25vbm51bGxfXyBwYXJhbXMpKQorIyBlbHNlCisjICBkZWZpbmUgX0dMX0FSR19OT05OVUxMKHBhcmFtcykKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIEZvciBjb21tdW5pY2F0aW9uIGZyb20gJ2dldG9wdCcgdG8gdGhlIGNhbGxlci4KKyAgIFdoZW4gJ2dldG9wdCcgZmluZHMgYW4gb3B0aW9uIHRoYXQgdGFrZXMgYW4gYXJndW1lbnQsCisgICB0aGUgYXJndW1lbnQgdmFsdWUgaXMgcmV0dXJuZWQgaGVyZS4KKyAgIEFsc28sIHdoZW4gJ29yZGVyaW5nJyBpcyBSRVRVUk5fSU5fT1JERVIsCisgICBlYWNoIG5vbi1vcHRpb24gQVJHVi1lbGVtZW50IGlzIHJldHVybmVkIGhlcmUuICAqLworCitleHRlcm4gY2hhciAqb3B0YXJnOworCisvKiBJbmRleCBpbiBBUkdWIG9mIHRoZSBuZXh0IGVsZW1lbnQgdG8gYmUgc2Nhbm5lZC4KKyAgIFRoaXMgaXMgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiB0byBhbmQgZnJvbSB0aGUgY2FsbGVyCisgICBhbmQgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiBzdWNjZXNzaXZlIGNhbGxzIHRvICdnZXRvcHQnLgorCisgICBPbiBlbnRyeSB0byAnZ2V0b3B0JywgemVybyBtZWFucyB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsOyBpbml0aWFsaXplLgorCisgICBXaGVuICdnZXRvcHQnIHJldHVybnMgLTEsIHRoaXMgaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvZiB0aGUKKyAgIG5vbi1vcHRpb24gZWxlbWVudHMgdGhhdCB0aGUgY2FsbGVyIHNob3VsZCBpdHNlbGYgc2Nhbi4KKworICAgT3RoZXJ3aXNlLCAnb3B0aW5kJyBjb21tdW5pY2F0ZXMgZnJvbSBvbmUgY2FsbCB0byB0aGUgbmV4dAorICAgaG93IG11Y2ggb2YgQVJHViBoYXMgYmVlbiBzY2FubmVkIHNvIGZhci4gICovCisKK2V4dGVybiBpbnQgb3B0aW5kOworCisvKiBDYWxsZXJzIHN0b3JlIHplcm8gaGVyZSB0byBpbmhpYml0IHRoZSBlcnJvciBtZXNzYWdlICdnZXRvcHQnIHByaW50cworICAgZm9yIHVucmVjb2duaXplZCBvcHRpb25zLiAgKi8KKworZXh0ZXJuIGludCBvcHRlcnI7CisKKy8qIFNldCB0byBhbiBvcHRpb24gY2hhcmFjdGVyIHdoaWNoIHdhcyB1bnJlY29nbml6ZWQuICAqLworCitleHRlcm4gaW50IG9wdG9wdDsKKworI2lmbmRlZiBfX25lZWRfZ2V0b3B0CisvKiBEZXNjcmliZSB0aGUgbG9uZy1uYW1lZCBvcHRpb25zIHJlcXVlc3RlZCBieSB0aGUgYXBwbGljYXRpb24uCisgICBUaGUgTE9OR19PUFRJT05TIGFyZ3VtZW50IHRvIGdldG9wdF9sb25nIG9yIGdldG9wdF9sb25nX29ubHkgaXMgYSB2ZWN0b3IKKyAgIG9mICdzdHJ1Y3Qgb3B0aW9uJyB0ZXJtaW5hdGVkIGJ5IGFuIGVsZW1lbnQgY29udGFpbmluZyBhIG5hbWUgd2hpY2ggaXMKKyAgIHplcm8uCisKKyAgIFRoZSBmaWVsZCAnaGFzX2FyZycgaXM6CisgICBub19hcmd1bWVudCAgICAgICAgICAob3IgMCkgaWYgdGhlIG9wdGlvbiBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50LAorICAgcmVxdWlyZWRfYXJndW1lbnQgICAgKG9yIDEpIGlmIHRoZSBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQsCisgICBvcHRpb25hbF9hcmd1bWVudCAgICAob3IgMikgaWYgdGhlIG9wdGlvbiB0YWtlcyBhbiBvcHRpb25hbCBhcmd1bWVudC4KKworICAgSWYgdGhlIGZpZWxkICdmbGFnJyBpcyBub3QgTlVMTCwgaXQgcG9pbnRzIHRvIGEgdmFyaWFibGUgdGhhdCBpcyBzZXQKKyAgIHRvIHRoZSB2YWx1ZSBnaXZlbiBpbiB0aGUgZmllbGQgJ3ZhbCcgd2hlbiB0aGUgb3B0aW9uIGlzIGZvdW5kLCBidXQKKyAgIGxlZnQgdW5jaGFuZ2VkIGlmIHRoZSBvcHRpb24gaXMgbm90IGZvdW5kLgorCisgICBUbyBoYXZlIGEgbG9uZy1uYW1lZCBvcHRpb24gZG8gc29tZXRoaW5nIG90aGVyIHRoYW4gc2V0IGFuICdpbnQnIHRvCisgICBhIGNvbXBpbGVkLWluIGNvbnN0YW50LCBzdWNoIGFzIHNldCBhIHZhbHVlIGZyb20gJ29wdGFyZycsIHNldCB0aGUKKyAgIG9wdGlvbidzICdmbGFnJyBmaWVsZCB0byB6ZXJvIGFuZCBpdHMgJ3ZhbCcgZmllbGQgdG8gYSBub256ZXJvCisgICB2YWx1ZSAodGhlIGVxdWl2YWxlbnQgc2luZ2xlLWxldHRlciBvcHRpb24gY2hhcmFjdGVyLCBpZiB0aGVyZSBpcworICAgb25lKS4gIEZvciBsb25nIG9wdGlvbnMgdGhhdCBoYXZlIGEgemVybyAnZmxhZycgZmllbGQsICdnZXRvcHQnCisgICByZXR1cm5zIHRoZSBjb250ZW50cyBvZiB0aGUgJ3ZhbCcgZmllbGQuICAqLworCisjIGlmICFHTlVMSUJfZGVmaW5lZF9zdHJ1Y3Rfb3B0aW9uCitzdHJ1Y3Qgb3B0aW9uCit7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIC8qIGhhc19hcmcgY2FuJ3QgYmUgYW4gZW51bSBiZWNhdXNlIHNvbWUgY29tcGlsZXJzIGNvbXBsYWluIGFib3V0CisgICAgIHR5cGUgbWlzbWF0Y2hlcyBpbiBhbGwgdGhlIGNvZGUgdGhhdCBhc3N1bWVzIGl0IGlzIGFuIGludC4gICovCisgIGludCBoYXNfYXJnOworICBpbnQgKmZsYWc7CisgIGludCB2YWw7Cit9OworIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX3N0cnVjdF9vcHRpb24gMQorIyBlbmRpZgorCisvKiBOYW1lcyBmb3IgdGhlIHZhbHVlcyBvZiB0aGUgJ2hhc19hcmcnIGZpZWxkIG9mICdzdHJ1Y3Qgb3B0aW9uJy4gICovCisKKyMgZGVmaW5lIG5vX2FyZ3VtZW50ICAgICAgICAgICAgMAorIyBkZWZpbmUgcmVxdWlyZWRfYXJndW1lbnQgICAgICAxCisjIGRlZmluZSBvcHRpb25hbF9hcmd1bWVudCAgICAgIDIKKyNlbmRpZiAgLyogbmVlZCBnZXRvcHQgKi8KKworCisvKiBHZXQgZGVmaW5pdGlvbnMgYW5kIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyB0byBwcm9jZXNzIHRoZQorICAgYXJndW1lbnRzIGluIEFSR1YgKEFSR0Mgb2YgdGhlbSwgbWludXMgdGhlIHByb2dyYW0gbmFtZSkgZm9yCisgICBvcHRpb25zIGdpdmVuIGluIE9QVFMuCisKKyAgIFJldHVybiB0aGUgb3B0aW9uIGNoYXJhY3RlciBmcm9tIE9QVFMganVzdCByZWFkLiAgUmV0dXJuIC0xIHdoZW4KKyAgIHRoZXJlIGFyZSBubyBtb3JlIG9wdGlvbnMuICBGb3IgdW5yZWNvZ25pemVkIG9wdGlvbnMsIG9yIG9wdGlvbnMKKyAgIG1pc3NpbmcgYXJndW1lbnRzLCAnb3B0b3B0JyBpcyBzZXQgdG8gdGhlIG9wdGlvbiBsZXR0ZXIsIGFuZCAnPycgaXMKKyAgIHJldHVybmVkLgorCisgICBUaGUgT1BUUyBzdHJpbmcgaXMgYSBsaXN0IG9mIGNoYXJhY3RlcnMgd2hpY2ggYXJlIHJlY29nbml6ZWQgb3B0aW9uCisgICBsZXR0ZXJzLCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGNvbG9ucywgc3BlY2lmeWluZyB0aGF0IHRoYXQgbGV0dGVyCisgICB0YWtlcyBhbiBhcmd1bWVudCwgdG8gYmUgcGxhY2VkIGluICdvcHRhcmcnLgorCisgICBJZiBhIGxldHRlciBpbiBPUFRTIGlzIGZvbGxvd2VkIGJ5IHR3byBjb2xvbnMsIGl0cyBhcmd1bWVudCBpcworICAgb3B0aW9uYWwuICBUaGlzIGJlaGF2aW9yIGlzIHNwZWNpZmljIHRvIHRoZSBHTlUgJ2dldG9wdCcuCisKKyAgIFRoZSBhcmd1bWVudCAnLS0nIGNhdXNlcyBwcmVtYXR1cmUgdGVybWluYXRpb24gb2YgYXJndW1lbnQKKyAgIHNjYW5uaW5nLCBleHBsaWNpdGx5IHRlbGxpbmcgJ2dldG9wdCcgdGhhdCB0aGVyZSBhcmUgbm8gbW9yZQorICAgb3B0aW9ucy4KKworICAgSWYgT1BUUyBiZWdpbnMgd2l0aCAnLScsIHRoZW4gbm9uLW9wdGlvbiBhcmd1bWVudHMgYXJlIHRyZWF0ZWQgYXMKKyAgIGFyZ3VtZW50cyB0byB0aGUgb3B0aW9uICdcMScuICBUaGlzIGJlaGF2aW9yIGlzIHNwZWNpZmljIHRvIHRoZSBHTlUKKyAgICdnZXRvcHQnLiAgSWYgT1BUUyBiZWdpbnMgd2l0aCAnKycsIG9yIFBPU0lYTFlfQ09SUkVDVCBpcyBzZXQgaW4KKyAgIHRoZSBlbnZpcm9ubWVudCwgdGhlbiBkbyBub3QgcGVybXV0ZSBhcmd1bWVudHMuICAqLworCitleHRlcm4gaW50IGdldG9wdCAoaW50IF9fX2FyZ2MsIGNoYXIgKmNvbnN0ICpfX19hcmd2LCBjb25zdCBjaGFyICpfX3Nob3J0b3B0cykKKyAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDIsIDMpKTsKKworI2lmbmRlZiBfX25lZWRfZ2V0b3B0CitleHRlcm4gaW50IGdldG9wdF9sb25nIChpbnQgX19fYXJnYywgY2hhciAqX19nZXRvcHRfYXJndl9jb25zdCAqX19fYXJndiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9fc2hvcnRvcHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqX19sb25nb3B0cywgaW50ICpfX2xvbmdpbmQpCisgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgyLCAzKSk7CitleHRlcm4gaW50IGdldG9wdF9sb25nX29ubHkgKGludCBfX19hcmdjLCBjaGFyICpfX2dldG9wdF9hcmd2X2NvbnN0ICpfX19hcmd2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX3Nob3J0b3B0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqX19sb25nb3B0cywgaW50ICpfX2xvbmdpbmQpCisgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgyLCAzKSk7CisKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisvKiBNYWtlIHN1cmUgd2UgbGF0ZXIgY2FuIGdldCBhbGwgdGhlIGRlZmluaXRpb25zIGFuZCBkZWNsYXJhdGlvbnMuICAqLworI3VuZGVmIF9fbmVlZF9nZXRvcHQKKworI2VuZGlmIC8qIF9HTF9HRVRPUFRfSCAqLworI2VuZGlmIC8qIF9HTF9HRVRPUFRfSCAqLwpkaWZmIC0tZ2l0IGEvZGFyd2luLWxpYi9pbnR0eXBlcy5oIGIvZGFyd2luLWxpYi9pbnR0eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNTNkYmEKLS0tIC9kZXYvbnVsbAorKysgYi9kYXJ3aW4tbGliL2ludHR5cGVzLmgKQEAgLTAsMCArMSwxNDQyIEBACisvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovCisvKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQsIEJydW5vIEhhaWJsZSwgRGVyZWsgUHJpY2UuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBnbnVsaWIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qCisgKiBJU08gQyA5OSA8aW50dHlwZXMuaD4gZm9yIHBsYXRmb3JtcyB0aGF0IGxhY2sgaXQuCisgKiA8aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3N1c3YzeGJkL2ludHR5cGVzLmguaHRtbD4KKyAqLworCisjaWYgX19HTlVDX18gPj0gMworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorI2VuZGlmCisKKworLyogSW5jbHVkZSB0aGUgb3JpZ2luYWwgPGludHR5cGVzLmg+IGlmIGl0IGV4aXN0cywgYW5kIGlmIHRoaXMgZmlsZQorICAgaGFzIG5vdCBiZWVuIGluY2x1ZGVkIHlldCBvciBpZiB0aGlzIGZpbGUgaW5jbHVkZXMgZ251bGliIHN0ZGludC5oCisgICB3aGljaCBpbiB0dXJuIGluY2x1ZGVzIHRoaXMgZmlsZS4KKyAgIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyNpZiAhIGRlZmluZWQgSU5UVFlQRVNfSCB8fCBkZWZpbmVkIF9HTF9KVVNUX0lOQ0xVREVfU1lTVEVNX0lOVFRZUEVTX0gKKyMgaWYgMQorCisgICAvKiBTb21lIHByZS1DKysxMSA8c3RkaW50Lmg+IGltcGxlbWVudGF0aW9ucyBuZWVkIHRoaXMuICAqLworIyAgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiAhIGRlZmluZWQgX19TVERDX0ZPUk1BVF9NQUNST1MKKyMgICBkZWZpbmUgX19TVERDX0ZPUk1BVF9NQUNST1MgMQorIyAgZW5kaWYKKworIyAgaW5jbHVkZV9uZXh0IDxpbnR0eXBlcy5oPgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiAhIGRlZmluZWQgSU5UVFlQRVNfSCAmJiAhIGRlZmluZWQgX0dMX0pVU1RfSU5DTFVERV9TWVNURU1fSU5UVFlQRVNfSAorI2RlZmluZSBJTlRUWVBFU19ICisKKy8qIEluY2x1ZGUgPHN0ZGludC5oPiBvciB0aGUgZ251bGliIHJlcGxhY2VtZW50LgorICAgQnV0IGF2b2lkIG5hbWVzcGFjZSBwb2xsdXRpb24gb24gZ2xpYmMgc3lzdGVtcy4gICovCisjaWZuZGVmIF9fR0xJQkNfXworIyBpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorLyogR2V0IENIQVJfQklULiAgKi8KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2lmICEoSU5UX01JTiA9PSBJTlQzMl9NSU4gJiYgSU5UX01BWCA9PSBJTlQzMl9NQVgpCisjIGVycm9yICJUaGlzIGZpbGUgYXNzdW1lcyB0aGF0ICdpbnQnIGhhcyBleGFjdGx5IDMyIGJpdHMuIFBsZWFzZSByZXBvcnQgeW91ciBwbGF0Zm9ybSBhbmQgY29tcGlsZXIgdG8gPGJ1Zy1nbnVsaWJAZ251Lm9yZz4uIgorI2VuZGlmCisKKy8qIFRoZSBkZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBMIGV0Yy4gYXJlIGNvcGllZCBoZXJlLiAgKi8KKyNpZm5kZWYgX0dMX0NYWERFRlNfSAorI2RlZmluZSBfR0xfQ1hYREVGU19ICisKKy8qIFRoZSB0aHJlZSBtb3N0IGZyZXF1ZW50IHVzZSBjYXNlcyBvZiB0aGVzZSBtYWNyb3MgYXJlOgorCisgICAqIEZvciBwcm92aWRpbmcgYSBzdWJzdGl0dXRlIGZvciBhIGZ1bmN0aW9uIHRoYXQgaXMgbWlzc2luZyBvbiBzb21lCisgICAgIHBsYXRmb3JtcywgYnV0IGlzIGRlY2xhcmVkIGFuZCB3b3JrcyBmaW5lIG9uIHRoZSBwbGF0Zm9ybXMgb24gd2hpY2gKKyAgICAgaXQgZXhpc3RzOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgIUBIQVZFX0ZPT0AKKyAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgcmVwbGFjZW1lbnQgZm9yIGEgZnVuY3Rpb24gdGhhdCBleGlzdHMgb24gYWxsIHBsYXRmb3JtcywKKyAgICAgYnV0IGlzIGJyb2tlbi9pbnN1ZmZpY2llbnQgYW5kIG5lZWRzIHRvIGJlIHJlcGxhY2VkIG9uIHNvbWUgcGxhdGZvcm1zOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisgICAgICAgIyAgIHVuZGVmIGZvbworICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CisgICAgICAgIyBlbHNlCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgcmVwbGFjZW1lbnQgZm9yIGEgZnVuY3Rpb24gdGhhdCBleGlzdHMgb24gc29tZSBwbGF0Zm9ybXMKKyAgICAgYnV0IGlzIGJyb2tlbi9pbnN1ZmZpY2llbnQgYW5kIG5lZWRzIHRvIGJlIHJlcGxhY2VkIG9uIHNvbWUgb2YgdGhlbSBhbmQKKyAgICAgaXMgYWRkaXRpb25hbGx5IGVpdGhlciBtaXNzaW5nIG9yIHVuZGVjbGFyZWQgb24gc29tZSBvdGhlciBwbGF0Zm9ybXM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACisgICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyAgICAgICAjICAgdW5kZWYgZm9vCisgICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKyAgICAgICAjIGVsc2UKKyAgICAgICAjICBpZiAhQEhBVkVfRk9PQCAgIG9yICAgaWYgIUBIQVZFX0RFQ0xfRk9PQAorICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisqLworCisvKiBfR0xfRVhURVJOX0MgZGVjbGFyYXRpb247CisgICBwZXJmb3JtcyB0aGUgZGVjbGFyYXRpb24gd2l0aCBDIGxpbmthZ2UuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMKKyMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4gIkMiCisjZWxzZQorIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybgorI2VuZGlmCisKKy8qIF9HTF9GVU5DREVDTF9SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgZGVjbGFyZXMgYSByZXBsYWNlbWVudCBmdW5jdGlvbiwgbmFtZWQgcnBsX2Z1bmMsIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwKKyAgIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsIGFuZCBhdHRyaWJ1dGVzLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0ZVTkNERUNMX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisgKi8KKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICBfR0xfRlVOQ0RFQ0xfUlBMXzEgKHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpCisjZGVmaW5lIF9HTF9GVU5DREVDTF9SUExfMShycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0VYVEVSTl9DIHJldHR5cGUgcnBsX2Z1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworCisvKiBfR0xfRlVOQ0RFQ0xfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGRlY2xhcmVzIHRoZSBzeXN0ZW0gZnVuY3Rpb24sIG5hbWVkIGZ1bmMsIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwKKyAgIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsIGFuZCBhdHRyaWJ1dGVzLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0ZVTkNERUNMX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisgKi8KKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICBfR0xfRVhURVJOX0MgcmV0dHlwZSBmdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKworLyogX0dMX0NYWEFMSUFTX1JQTCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBkZWNsYXJlcyBhIEMrKyBhbGlhcyBjYWxsZWQgR05VTElCX05BTUVTUEFDRTo6ZnVuYworICAgdGhhdCByZWRpcmVjdHMgdG8gcnBsX2Z1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UgaXMgZGVmaW5lZC4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9DWFhBTElBU19SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworICovCisjZGVmaW5lIF9HTF9DWFhBTElBU19SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgX0dMX0NYWEFMSUFTX1JQTF8xIChmdW5jLCBycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKQorI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9IDo6cnBsX2Z1bmM7ICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1JQTF8xIChmdW5jLCBycGxfZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBycGxfZnVuYyBtYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudAorICAgZGVjbGFyYXRpb24uICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvcgorICAgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPig6OnJwbF9mdW5jKTsgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBkZWNsYXJlcyBhIEMrKyBhbGlhcyBjYWxsZWQgR05VTElCX05BTUVTUEFDRTo6ZnVuYworICAgdGhhdCByZWRpcmVjdHMgdG8gdGhlIHN5c3RlbSBwcm92aWRlZCBmdW5jdGlvbiBmdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFCisgICBpcyBkZWZpbmVkLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0NYWEFMSUFTX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CisgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorICAvKiBJZiB3ZSB3ZXJlIHRvIHdyaXRlCisgICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7CisgICAgIGxpa2UgYWJvdmUgaW4gX0dMX0NYWEFMSUFTX1JQTF8xLCB0aGUgY29tcGlsZXIgY291bGQgb3B0aW1pemUgY2FsbHMKKyAgICAgYmV0dGVyIChyZW1vdmUgYW4gaW5kaXJlY3Rpb24gdGhyb3VnaCBhICdzdGF0aWMnIHBvaW50ZXIgdmFyaWFibGUpLAorICAgICBidXQgdGhlbiB0aGUgX0dMX0NYWEFMSUFTV0FSTiBtYWNybyBiZWxvdyB3b3VsZCBjYXVzZSBhIHdhcm5pbmcgbm90IG9ubHkKKyAgICAgZm9yIHVzZXMgb2YgOjpmdW5jIGJ1dCBhbHNvIGZvciB1c2VzIG9mIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMuICAqLworIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOyAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1NZU19DQVNUIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gZnVuYyBtYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudCBkZWNsYXJhdGlvbi4KKyAgIEEgY2FzdCBpcyB1c2VkIHRvIHNpbGVuY2UgdGhlICJpbnZhbGlkIGNvbnZlcnNpb24iIGVycm9yIHRoYXQgd291bGQKKyAgIG90aGVyd2lzZSBvY2N1ci4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPig6OmZ1bmMpOyBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1NZU19DQVNUMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycywgcmV0dHlwZTIsIHBhcmFtZXRlcnMyKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gaXMgcGlja2VkIGFtb25nIGEgc2V0IG9mIG92ZXJsb2FkZWQgZnVuY3Rpb25zLAorICAgbmFtZWx5IHRoZSBvbmUgd2l0aCByZXR0eXBlMiBhbmQgcGFyYW1ldGVyczIuICBUd28gY29uc2VjdXRpdmUgY2FzdHMKKyAgIGFyZSB1c2VkIHRvIHNpbGVuY2UgdGhlICJjYW5ub3QgZmluZCBhIG1hdGNoIiBhbmQgImludmFsaWQgY29udmVyc2lvbiIKKyAgIGVycm9ycyB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyAgLyogVGhlIG91dGVyIGNhc3QgbXVzdCBiZSBhIHJlaW50ZXJwcmV0X2Nhc3QuCisgICAgIFRoZSBpbm5lciBjYXN0OiBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2V0IG9mIG92ZXJsb2FkZWQKKyAgICAgZnVuY3Rpb25zLCBpdCB3b3JrcyBhcyBhIHN0YXRpY19jYXN0PD4sIGNob29zaW5nIHRoZSBkZXNpZ25hdGVkIHZhcmlhbnQuCisgICAgIFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzaW5nbGUgdmFyaWFudCwgaXQgd29ya3MgYXMgYQorICAgICByZWludGVycHJldF9jYXN0PD4uIFRoZSBwYXJlbnRoZXNpemVkIGNhc3Qgc3ludGF4IHdvcmtzIGJvdGggd2F5cy4gICovCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzLHJldHR5cGUyLHBhcmFtZXRlcnMyKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKHJldHR5cGUyKCopcGFyYW1ldGVyczIpKDo6ZnVuYykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzLHJldHR5cGUyLHBhcmFtZXRlcnMyKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNXQVJOIChmdW5jKTsKKyAgIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZW1pdHRlZCB3aGVuIDo6ZnVuYyBpcyB1c2VkIGJ1dCBub3Qgd2hlbgorICAgR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgZnVuYyBtdXN0IGJlIGRlZmluZWQgd2l0aG91dCBvdmVybG9hZGVkCisgICB2YXJpYW50cy4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAorICAgX0dMX0NYWEFMSUFTV0FSTl8xIChmdW5jLCBHTlVMSUJfTkFNRVNQQUNFKQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8xKGZ1bmMsbmFtZXNwYWNlKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOXzIgKGZ1bmMsIG5hbWVzcGFjZSkKKy8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAorICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCisjIGlmICFfX09QVElNSVpFX18KKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKyAgICBfR0xfV0FSTl9PTl9VU0UgKGZ1bmMsIFwKKyAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICJVc2UgIiAjbmFtZXNwYWNlICI6OiIgI2Z1bmMgIiBpbnN0ZWFkLiIpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKyAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU1dBUk4xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZW1pdHRlZCB3aGVuIHRoZSBnaXZlbiBvdmVybG9hZGVkIHZhcmlhbnQgb2YgOjpmdW5jCisgICBpcyB1c2VkIGJ1dCBub3Qgd2hlbiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICAgX0dMX0NYWEFMSUFTV0FSTjFfMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgR05VTElCX05BTUVTUEFDRSkKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOMV8yIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBuYW1lc3BhY2UpCisvKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKyAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworIyBpZiAhX19PUFRJTUlaRV9fCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgICBfR0xfV0FSTl9PTl9VU0VfQ1hYIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJVc2UgIiAjbmFtZXNwYWNlICI6OiIgI2Z1bmMgIiBpbnN0ZWFkLiIpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKyNlbmRpZiAvKiBfR0xfQ1hYREVGU19IICovCisKKy8qIFRoZSBkZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVMTCBpcyBjb3BpZWQgaGVyZS4gICovCisvKiBfR0xfQVJHX05PTk5VTEwoKG4sLi4uLG0pKSB0ZWxscyB0aGUgY29tcGlsZXIgYW5kIHN0YXRpYyBhbmFseXplciB0b29scworICAgdGhhdCB0aGUgdmFsdWVzIHBhc3NlZCBhcyBhcmd1bWVudHMgbiwgLi4uLCBtIG11c3QgYmUgbm9uLU5VTEwgcG9pbnRlcnMuCisgICBuID0gMSBzdGFuZHMgZm9yIHRoZSBmaXJzdCBhcmd1bWVudCwgbiA9IDIgZm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgZXRjLiAgKi8KKyNpZm5kZWYgX0dMX0FSR19OT05OVUxMCisjIGlmIChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID49IDMpIHx8IF9fR05VQ19fID4gMworIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpIF9fYXR0cmlidXRlX18gKChfX25vbm51bGxfXyBwYXJhbXMpKQorIyBlbHNlCisjICBkZWZpbmUgX0dMX0FSR19OT05OVUxMKHBhcmFtcykKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UgaXMgY29waWVkIGhlcmUuICAqLworI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0UKKworIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKy8qIEEgY29tcGlsZXIgYXR0cmlidXRlIGlzIGF2YWlsYWJsZSBpbiBnY2MgdmVyc2lvbnMgNC4zLjAgYW5kIGxhdGVyLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24gX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtZXNzYWdlKSkpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisvKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmN0aW9uKSBmdW5jdGlvbgorIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBfR0xfV0FSTl9PTl9VU0VfQ1hYIChmdW5jdGlvbiwgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgInN0cmluZyIpCisgICBpcyBsaWtlIF9HTF9XQVJOX09OX1VTRSAoZnVuY3Rpb24sICJzdHJpbmciKSwgZXhjZXB0IHRoYXQgdGhlIGZ1bmN0aW9uIGlzCisgICBkZWNsYXJlZCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsCisgICBhbmQgYXR0cmlidXRlcy4KKyAgIFRoaXMgdmFyaWFudCBpcyB1c2VmdWwgZm9yIG92ZXJsb2FkZWQgZnVuY3Rpb25zIGluIEMrKy4gX0dMX1dBUk5fT05fVVNFIGRvZXMKKyAgIG5vdCB3b3JrIGluIHRoaXMgY2FzZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX09OX1VTRV9DWFgKKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCitleHRlcm4gcmV0dHlwZSBmdW5jdGlvbiBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzIFwKKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtc2cpKSkKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKy8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCitleHRlcm4gcmV0dHlwZSBmdW5jdGlvbiBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisjIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorX0dMX1dBUk5fRVhURVJOX0MgaW50IF9nbF93YXJuX29uX3VzZQorIyBlbmRpZgorI2VuZGlmCisKKy8qIF9HTF9XQVJOX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fRVhURVJOX0MKKyMgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cworIyAgZGVmaW5lIF9HTF9XQVJOX0VYVEVSTl9DIGV4dGVybiAiQyIKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9XQVJOX0VYVEVSTl9DIGV4dGVybgorIyBlbmRpZgorI2VuZGlmCisKKy8qIDcuOC4xIE1hY3JvcyBmb3IgZm9ybWF0IHNwZWNpZmllcnMgKi8KKworI2lmIGRlZmluZWQgX1ROU19SX1RBUkdFVAorICAgLyogVGFuZGVtIE5vblN0b3AgUiBzZXJpZXMgYW5kIGNvbXBhdGlibGUgcGxhdGZvcm1zIHJlbGVhc2VkIGJlZm9yZQorICAgICAgSnVseSAyMDA1IHN1cHBvcnQgJUxkIGJ1dCBub3QgJWxsZC4gICovCisjIGRlZmluZSBfTE9OR19MT05HX0ZPUk1BVF9QUkVGSVggIkwiCisjZWxzZQorIyBkZWZpbmUgX0xPTkdfTE9OR19GT1JNQVRfUFJFRklYICJsbCIKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgUFJJZDggfHwgMAorIyB1bmRlZiBQUklkOAorIyBpZmRlZiBJTlQ4X01BWAorIyAgZGVmaW5lIFBSSWQ4ICJkIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJaTggfHwgMAorIyB1bmRlZiBQUklpOAorIyBpZmRlZiBJTlQ4X01BWAorIyAgZGVmaW5lIFBSSWk4ICJpIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJbzggfHwgMAorIyB1bmRlZiBQUklvOAorIyBpZmRlZiBVSU5UOF9NQVgKKyMgIGRlZmluZSBQUklvOCAibyIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXU4IHx8IDAKKyMgdW5kZWYgUFJJdTgKKyMgaWZkZWYgVUlOVDhfTUFYCisjICBkZWZpbmUgUFJJdTggInUiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUkl4OCB8fCAwCisjIHVuZGVmIFBSSXg4CisjIGlmZGVmIFVJTlQ4X01BWAorIyAgZGVmaW5lIFBSSXg4ICJ4IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJWDggfHwgMAorIyB1bmRlZiBQUklYOAorIyBpZmRlZiBVSU5UOF9NQVgKKyMgIGRlZmluZSBQUklYOCAiWCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWQxNiB8fCAwCisjIHVuZGVmIFBSSWQxNgorIyBpZmRlZiBJTlQxNl9NQVgKKyMgIGRlZmluZSBQUklkMTYgImQiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklpMTYgfHwgMAorIyB1bmRlZiBQUklpMTYKKyMgaWZkZWYgSU5UMTZfTUFYCisjICBkZWZpbmUgUFJJaTE2ICJpIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJbzE2IHx8IDAKKyMgdW5kZWYgUFJJbzE2CisjIGlmZGVmIFVJTlQxNl9NQVgKKyMgIGRlZmluZSBQUklvMTYgIm8iCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUkl1MTYgfHwgMAorIyB1bmRlZiBQUkl1MTYKKyMgaWZkZWYgVUlOVDE2X01BWAorIyAgZGVmaW5lIFBSSXUxNiAidSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXgxNiB8fCAwCisjIHVuZGVmIFBSSXgxNgorIyBpZmRlZiBVSU5UMTZfTUFYCisjICBkZWZpbmUgUFJJeDE2ICJ4IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJWDE2IHx8IDAKKyMgdW5kZWYgUFJJWDE2CisjIGlmZGVmIFVJTlQxNl9NQVgKKyMgIGRlZmluZSBQUklYMTYgIlgiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklkMzIgfHwgMAorIyB1bmRlZiBQUklkMzIKKyMgaWZkZWYgSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJZDMyICJkIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJaTMyIHx8IDAKKyMgdW5kZWYgUFJJaTMyCisjIGlmZGVmIElOVDMyX01BWAorIyAgZGVmaW5lIFBSSWkzMiAiaSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSW8zMiB8fCAwCisjIHVuZGVmIFBSSW8zMgorIyBpZmRlZiBVSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJbzMyICJvIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJdTMyIHx8IDAKKyMgdW5kZWYgUFJJdTMyCisjIGlmZGVmIFVJTlQzMl9NQVgKKyMgIGRlZmluZSBQUkl1MzIgInUiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUkl4MzIgfHwgMAorIyB1bmRlZiBQUkl4MzIKKyMgaWZkZWYgVUlOVDMyX01BWAorIyAgZGVmaW5lIFBSSXgzMiAieCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSVgzMiB8fCAwCisjIHVuZGVmIFBSSVgzMgorIyBpZmRlZiBVSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJWDMyICJYIgorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgSU5UNjRfTUFYCisjIGlmICgwID8gZGVmaW5lZCBfTFA2NCA6IDEpCisjICBkZWZpbmUgX1BSSTY0X1BSRUZJWCAibCIKKyMgZWxpZiBkZWZpbmVkIF9NU0NfVkVSIHx8IGRlZmluZWQgX19NSU5HVzMyX18KKyMgIGRlZmluZSBfUFJJNjRfUFJFRklYICJJNjQiCisjIGVsaWYgMSAmJiBMT05HX01BWCA+PiAzMCA9PSAxCisjICBkZWZpbmUgX1BSSTY0X1BSRUZJWCBfTE9OR19MT05HX0ZPUk1BVF9QUkVGSVgKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJZDY0IHx8IDAKKyMgIHVuZGVmIFBSSWQ2NAorIyAgZGVmaW5lIFBSSWQ2NCBfUFJJNjRfUFJFRklYICJkIgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUklpNjQgfHwgMAorIyAgdW5kZWYgUFJJaTY0CisjICBkZWZpbmUgUFJJaTY0IF9QUkk2NF9QUkVGSVggImkiCisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBVSU5UNjRfTUFYCisjIGlmICgwID8gZGVmaW5lZCBfTFA2NCA6IDEpCisjICBkZWZpbmUgX1BSSXU2NF9QUkVGSVggImwiCisjIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUiB8fCBkZWZpbmVkIF9fTUlOR1czMl9fCisjICBkZWZpbmUgX1BSSXU2NF9QUkVGSVggIkk2NCIKKyMgZWxpZiAxICYmIFVMT05HX01BWCA+PiAzMSA9PSAxCisjICBkZWZpbmUgX1BSSXU2NF9QUkVGSVggX0xPTkdfTE9OR19GT1JNQVRfUFJFRklYCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSW82NCB8fCAwCisjICB1bmRlZiBQUklvNjQKKyMgIGRlZmluZSBQUklvNjQgX1BSSXU2NF9QUkVGSVggIm8iCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSXU2NCB8fCAwCisjICB1bmRlZiBQUkl1NjQKKyMgIGRlZmluZSBQUkl1NjQgX1BSSXU2NF9QUkVGSVggInUiCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSXg2NCB8fCAwCisjICB1bmRlZiBQUkl4NjQKKyMgIGRlZmluZSBQUkl4NjQgX1BSSXU2NF9QUkVGSVggIngiCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSVg2NCB8fCAwCisjICB1bmRlZiBQUklYNjQKKyMgIGRlZmluZSBQUklYNjQgX1BSSXU2NF9QUkVGSVggIlgiCisjIGVuZGlmCisjZW5kaWYKKworI2lmICFkZWZpbmVkIFBSSWRMRUFTVDggfHwgMAorIyB1bmRlZiBQUklkTEVBU1Q4CisjIGRlZmluZSBQUklkTEVBU1Q4ICJkIgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJaUxFQVNUOCB8fCAwCisjIHVuZGVmIFBSSWlMRUFTVDgKKyMgZGVmaW5lIFBSSWlMRUFTVDggImkiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklvTEVBU1Q4IHx8IDAKKyMgdW5kZWYgUFJJb0xFQVNUOAorIyBkZWZpbmUgUFJJb0xFQVNUOCAibyIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXVMRUFTVDggfHwgMAorIyB1bmRlZiBQUkl1TEVBU1Q4CisjIGRlZmluZSBQUkl1TEVBU1Q4ICJ1IgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJeExFQVNUOCB8fCAwCisjIHVuZGVmIFBSSXhMRUFTVDgKKyMgZGVmaW5lIFBSSXhMRUFTVDggIngiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklYTEVBU1Q4IHx8IDAKKyMgdW5kZWYgUFJJWExFQVNUOAorIyBkZWZpbmUgUFJJWExFQVNUOCAiWCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWRMRUFTVDE2IHx8IDAKKyMgdW5kZWYgUFJJZExFQVNUMTYKKyMgZGVmaW5lIFBSSWRMRUFTVDE2ICJkIgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJaUxFQVNUMTYgfHwgMAorIyB1bmRlZiBQUklpTEVBU1QxNgorIyBkZWZpbmUgUFJJaUxFQVNUMTYgImkiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklvTEVBU1QxNiB8fCAwCisjIHVuZGVmIFBSSW9MRUFTVDE2CisjIGRlZmluZSBQUklvTEVBU1QxNiAibyIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXVMRUFTVDE2IHx8IDAKKyMgdW5kZWYgUFJJdUxFQVNUMTYKKyMgZGVmaW5lIFBSSXVMRUFTVDE2ICJ1IgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJeExFQVNUMTYgfHwgMAorIyB1bmRlZiBQUkl4TEVBU1QxNgorIyBkZWZpbmUgUFJJeExFQVNUMTYgIngiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklYTEVBU1QxNiB8fCAwCisjIHVuZGVmIFBSSVhMRUFTVDE2CisjIGRlZmluZSBQUklYTEVBU1QxNiAiWCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWRMRUFTVDMyIHx8IDAKKyMgdW5kZWYgUFJJZExFQVNUMzIKKyMgZGVmaW5lIFBSSWRMRUFTVDMyICJkIgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJaUxFQVNUMzIgfHwgMAorIyB1bmRlZiBQUklpTEVBU1QzMgorIyBkZWZpbmUgUFJJaUxFQVNUMzIgImkiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklvTEVBU1QzMiB8fCAwCisjIHVuZGVmIFBSSW9MRUFTVDMyCisjIGRlZmluZSBQUklvTEVBU1QzMiAibyIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXVMRUFTVDMyIHx8IDAKKyMgdW5kZWYgUFJJdUxFQVNUMzIKKyMgZGVmaW5lIFBSSXVMRUFTVDMyICJ1IgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJeExFQVNUMzIgfHwgMAorIyB1bmRlZiBQUkl4TEVBU1QzMgorIyBkZWZpbmUgUFJJeExFQVNUMzIgIngiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklYTEVBU1QzMiB8fCAwCisjIHVuZGVmIFBSSVhMRUFTVDMyCisjIGRlZmluZSBQUklYTEVBU1QzMiAiWCIKKyNlbmRpZgorI2lmZGVmIElOVDY0X01BWAorIyBpZiAhZGVmaW5lZCBQUklkTEVBU1Q2NCB8fCAwCisjICB1bmRlZiBQUklkTEVBU1Q2NAorIyAgZGVmaW5lIFBSSWRMRUFTVDY0IFBSSWQ2NAorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUklpTEVBU1Q2NCB8fCAwCisjICB1bmRlZiBQUklpTEVBU1Q2NAorIyAgZGVmaW5lIFBSSWlMRUFTVDY0IFBSSWk2NAorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgVUlOVDY0X01BWAorIyBpZiAhZGVmaW5lZCBQUklvTEVBU1Q2NCB8fCAwCisjICB1bmRlZiBQUklvTEVBU1Q2NAorIyAgZGVmaW5lIFBSSW9MRUFTVDY0IFBSSW82NAorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUkl1TEVBU1Q2NCB8fCAwCisjICB1bmRlZiBQUkl1TEVBU1Q2NAorIyAgZGVmaW5lIFBSSXVMRUFTVDY0IFBSSXU2NAorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUkl4TEVBU1Q2NCB8fCAwCisjICB1bmRlZiBQUkl4TEVBU1Q2NAorIyAgZGVmaW5lIFBSSXhMRUFTVDY0IFBSSXg2NAorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUklYTEVBU1Q2NCB8fCAwCisjICB1bmRlZiBQUklYTEVBU1Q2NAorIyAgZGVmaW5lIFBSSVhMRUFTVDY0IFBSSVg2NAorIyBlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCBQUklkRkFTVDggfHwgMAorIyB1bmRlZiBQUklkRkFTVDgKKyMgaWYgSU5UX0ZBU1Q4X01BWCA+IElOVDMyX01BWAorIyAgZGVmaW5lIFBSSWRGQVNUOCBQUklkNjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSWRGQVNUOCAiZCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWlGQVNUOCB8fCAwCisjIHVuZGVmIFBSSWlGQVNUOAorIyBpZiBJTlRfRkFTVDhfTUFYID4gSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJaUZBU1Q4IFBSSWk2NAorIyBlbHNlCisjICBkZWZpbmUgUFJJaUZBU1Q4ICJpIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJb0ZBU1Q4IHx8IDAKKyMgdW5kZWYgUFJJb0ZBU1Q4CisjIGlmIFVJTlRfRkFTVDhfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFBSSW9GQVNUOCBQUklvNjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSW9GQVNUOCAibyIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXVGQVNUOCB8fCAwCisjIHVuZGVmIFBSSXVGQVNUOAorIyBpZiBVSU5UX0ZBU1Q4X01BWCA+IFVJTlQzMl9NQVgKKyMgIGRlZmluZSBQUkl1RkFTVDggUFJJdTY0CisjIGVsc2UKKyMgIGRlZmluZSBQUkl1RkFTVDggInUiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUkl4RkFTVDggfHwgMAorIyB1bmRlZiBQUkl4RkFTVDgKKyMgaWYgVUlOVF9GQVNUOF9NQVggPiBVSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJeEZBU1Q4IFBSSXg2NAorIyBlbHNlCisjICBkZWZpbmUgUFJJeEZBU1Q4ICJ4IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJWEZBU1Q4IHx8IDAKKyMgdW5kZWYgUFJJWEZBU1Q4CisjIGlmIFVJTlRfRkFTVDhfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFBSSVhGQVNUOCBQUklYNjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSVhGQVNUOCAiWCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWRGQVNUMTYgfHwgMAorIyB1bmRlZiBQUklkRkFTVDE2CisjIGlmIElOVF9GQVNUMTZfTUFYID4gSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJZEZBU1QxNiBQUklkNjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSWRGQVNUMTYgImQiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklpRkFTVDE2IHx8IDAKKyMgdW5kZWYgUFJJaUZBU1QxNgorIyBpZiBJTlRfRkFTVDE2X01BWCA+IElOVDMyX01BWAorIyAgZGVmaW5lIFBSSWlGQVNUMTYgUFJJaTY0CisjIGVsc2UKKyMgIGRlZmluZSBQUklpRkFTVDE2ICJpIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJb0ZBU1QxNiB8fCAwCisjIHVuZGVmIFBSSW9GQVNUMTYKKyMgaWYgVUlOVF9GQVNUMTZfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFBSSW9GQVNUMTYgUFJJbzY0CisjIGVsc2UKKyMgIGRlZmluZSBQUklvRkFTVDE2ICJvIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJdUZBU1QxNiB8fCAwCisjIHVuZGVmIFBSSXVGQVNUMTYKKyMgaWYgVUlOVF9GQVNUMTZfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFBSSXVGQVNUMTYgUFJJdTY0CisjIGVsc2UKKyMgIGRlZmluZSBQUkl1RkFTVDE2ICJ1IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJeEZBU1QxNiB8fCAwCisjIHVuZGVmIFBSSXhGQVNUMTYKKyMgaWYgVUlOVF9GQVNUMTZfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFBSSXhGQVNUMTYgUFJJeDY0CisjIGVsc2UKKyMgIGRlZmluZSBQUkl4RkFTVDE2ICJ4IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJWEZBU1QxNiB8fCAwCisjIHVuZGVmIFBSSVhGQVNUMTYKKyMgaWYgVUlOVF9GQVNUMTZfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFBSSVhGQVNUMTYgUFJJWDY0CisjIGVsc2UKKyMgIGRlZmluZSBQUklYRkFTVDE2ICJYIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJZEZBU1QzMiB8fCAwCisjIHVuZGVmIFBSSWRGQVNUMzIKKyMgaWYgSU5UX0ZBU1QzMl9NQVggPiBJTlQzMl9NQVgKKyMgIGRlZmluZSBQUklkRkFTVDMyIFBSSWQ2NAorIyBlbHNlCisjICBkZWZpbmUgUFJJZEZBU1QzMiAiZCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWlGQVNUMzIgfHwgMAorIyB1bmRlZiBQUklpRkFTVDMyCisjIGlmIElOVF9GQVNUMzJfTUFYID4gSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJaUZBU1QzMiBQUklpNjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSWlGQVNUMzIgImkiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklvRkFTVDMyIHx8IDAKKyMgdW5kZWYgUFJJb0ZBU1QzMgorIyBpZiBVSU5UX0ZBU1QzMl9NQVggPiBVSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJb0ZBU1QzMiBQUklvNjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSW9GQVNUMzIgIm8iCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUkl1RkFTVDMyIHx8IDAKKyMgdW5kZWYgUFJJdUZBU1QzMgorIyBpZiBVSU5UX0ZBU1QzMl9NQVggPiBVSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJdUZBU1QzMiBQUkl1NjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSXVGQVNUMzIgInUiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUkl4RkFTVDMyIHx8IDAKKyMgdW5kZWYgUFJJeEZBU1QzMgorIyBpZiBVSU5UX0ZBU1QzMl9NQVggPiBVSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJeEZBU1QzMiBQUkl4NjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSXhGQVNUMzIgIngiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklYRkFTVDMyIHx8IDAKKyMgdW5kZWYgUFJJWEZBU1QzMgorIyBpZiBVSU5UX0ZBU1QzMl9NQVggPiBVSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJWEZBU1QzMiBQUklYNjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSVhGQVNUMzIgIlgiCisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBJTlQ2NF9NQVgKKyMgaWYgIWRlZmluZWQgUFJJZEZBU1Q2NCB8fCAwCisjICB1bmRlZiBQUklkRkFTVDY0CisjICBkZWZpbmUgUFJJZEZBU1Q2NCBQUklkNjQKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJaUZBU1Q2NCB8fCAwCisjICB1bmRlZiBQUklpRkFTVDY0CisjICBkZWZpbmUgUFJJaUZBU1Q2NCBQUklpNjQKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIFVJTlQ2NF9NQVgKKyMgaWYgIWRlZmluZWQgUFJJb0ZBU1Q2NCB8fCAwCisjICB1bmRlZiBQUklvRkFTVDY0CisjICBkZWZpbmUgUFJJb0ZBU1Q2NCBQUklvNjQKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJdUZBU1Q2NCB8fCAwCisjICB1bmRlZiBQUkl1RkFTVDY0CisjICBkZWZpbmUgUFJJdUZBU1Q2NCBQUkl1NjQKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJeEZBU1Q2NCB8fCAwCisjICB1bmRlZiBQUkl4RkFTVDY0CisjICBkZWZpbmUgUFJJeEZBU1Q2NCBQUkl4NjQKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJWEZBU1Q2NCB8fCAwCisjICB1bmRlZiBQUklYRkFTVDY0CisjICBkZWZpbmUgUFJJWEZBU1Q2NCBQUklYNjQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgUFJJZE1BWCB8fCAwCisjIHVuZGVmIFBSSWRNQVgKKyMgaWYgMQorIyAgZGVmaW5lIFBSSWRNQVggUFJJZDY0CisjIGVsc2UKKyMgIGRlZmluZSBQUklkTUFYICJsZCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWlNQVggfHwgMAorIyB1bmRlZiBQUklpTUFYCisjIGlmIDEKKyMgIGRlZmluZSBQUklpTUFYIFBSSWk2NAorIyBlbHNlCisjICBkZWZpbmUgUFJJaU1BWCAibGkiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklvTUFYIHx8IDAKKyMgdW5kZWYgUFJJb01BWAorIyBpZiAxCisjICBkZWZpbmUgUFJJb01BWCBQUklvNjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSW9NQVggImxvIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJdU1BWCB8fCAwCisjIHVuZGVmIFBSSXVNQVgKKyMgaWYgMQorIyAgZGVmaW5lIFBSSXVNQVggUFJJdTY0CisjIGVsc2UKKyMgIGRlZmluZSBQUkl1TUFYICJsdSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXhNQVggfHwgMAorIyB1bmRlZiBQUkl4TUFYCisjIGlmIDEKKyMgIGRlZmluZSBQUkl4TUFYIFBSSXg2NAorIyBlbHNlCisjICBkZWZpbmUgUFJJeE1BWCAibHgiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklYTUFYIHx8IDAKKyMgdW5kZWYgUFJJWE1BWAorIyBpZiAxCisjICBkZWZpbmUgUFJJWE1BWCBQUklYNjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSVhNQVggImxYIgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCBQUklkUFRSIHx8IDAKKyMgdW5kZWYgUFJJZFBUUgorIyBpZmRlZiBJTlRQVFJfTUFYCisjICBkZWZpbmUgUFJJZFBUUiAibCIgImQiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklpUFRSIHx8IDAKKyMgdW5kZWYgUFJJaVBUUgorIyBpZmRlZiBJTlRQVFJfTUFYCisjICBkZWZpbmUgUFJJaVBUUiAibCIgImkiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklvUFRSIHx8IDAKKyMgdW5kZWYgUFJJb1BUUgorIyBpZmRlZiBVSU5UUFRSX01BWAorIyAgZGVmaW5lIFBSSW9QVFIgImwiICJvIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJdVBUUiB8fCAwCisjIHVuZGVmIFBSSXVQVFIKKyMgaWZkZWYgVUlOVFBUUl9NQVgKKyMgIGRlZmluZSBQUkl1UFRSICJsIiAidSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXhQVFIgfHwgMAorIyB1bmRlZiBQUkl4UFRSCisjIGlmZGVmIFVJTlRQVFJfTUFYCisjICBkZWZpbmUgUFJJeFBUUiAibCIgIngiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklYUFRSIHx8IDAKKyMgdW5kZWYgUFJJWFBUUgorIyBpZmRlZiBVSU5UUFRSX01BWAorIyAgZGVmaW5lIFBSSVhQVFIgImwiICJYIgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCBTQ05kOCB8fCAwCisjIHVuZGVmIFNDTmQ4CisjIGlmZGVmIElOVDhfTUFYCisjICBkZWZpbmUgU0NOZDggImhoZCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTmk4IHx8IDAKKyMgdW5kZWYgU0NOaTgKKyMgaWZkZWYgSU5UOF9NQVgKKyMgIGRlZmluZSBTQ05pOCAiaGhpIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NObzggfHwgMAorIyB1bmRlZiBTQ05vOAorIyBpZmRlZiBVSU5UOF9NQVgKKyMgIGRlZmluZSBTQ05vOCAiaGhvIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOdTggfHwgMAorIyB1bmRlZiBTQ051OAorIyBpZmRlZiBVSU5UOF9NQVgKKyMgIGRlZmluZSBTQ051OCAiaGh1IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOeDggfHwgMAorIyB1bmRlZiBTQ054OAorIyBpZmRlZiBVSU5UOF9NQVgKKyMgIGRlZmluZSBTQ054OCAiaGh4IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOZDE2IHx8IDAKKyMgdW5kZWYgU0NOZDE2CisjIGlmZGVmIElOVDE2X01BWAorIyAgZGVmaW5lIFNDTmQxNiAiaGQiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05pMTYgfHwgMAorIyB1bmRlZiBTQ05pMTYKKyMgaWZkZWYgSU5UMTZfTUFYCisjICBkZWZpbmUgU0NOaTE2ICJoaSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTm8xNiB8fCAwCisjIHVuZGVmIFNDTm8xNgorIyBpZmRlZiBVSU5UMTZfTUFYCisjICBkZWZpbmUgU0NObzE2ICJobyIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTnUxNiB8fCAwCisjIHVuZGVmIFNDTnUxNgorIyBpZmRlZiBVSU5UMTZfTUFYCisjICBkZWZpbmUgU0NOdTE2ICJodSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTngxNiB8fCAwCisjIHVuZGVmIFNDTngxNgorIyBpZmRlZiBVSU5UMTZfTUFYCisjICBkZWZpbmUgU0NOeDE2ICJoeCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTmQzMiB8fCAwCisjIHVuZGVmIFNDTmQzMgorIyBpZmRlZiBJTlQzMl9NQVgKKyMgIGRlZmluZSBTQ05kMzIgImQiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05pMzIgfHwgMAorIyB1bmRlZiBTQ05pMzIKKyMgaWZkZWYgSU5UMzJfTUFYCisjICBkZWZpbmUgU0NOaTMyICJpIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NObzMyIHx8IDAKKyMgdW5kZWYgU0NObzMyCisjIGlmZGVmIFVJTlQzMl9NQVgKKyMgIGRlZmluZSBTQ05vMzIgIm8iCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ051MzIgfHwgMAorIyB1bmRlZiBTQ051MzIKKyMgaWZkZWYgVUlOVDMyX01BWAorIyAgZGVmaW5lIFNDTnUzMiAidSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTngzMiB8fCAwCisjIHVuZGVmIFNDTngzMgorIyBpZmRlZiBVSU5UMzJfTUFYCisjICBkZWZpbmUgU0NOeDMyICJ4IgorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgSU5UNjRfTUFYCisjIGlmICgwID8gZGVmaW5lZCBfTFA2NCA6IDEpCisjICBkZWZpbmUgX1NDTjY0X1BSRUZJWCAibCIKKyMgZWxpZiBkZWZpbmVkIF9NU0NfVkVSIHx8IGRlZmluZWQgX19NSU5HVzMyX18KKyMgIGRlZmluZSBfU0NONjRfUFJFRklYICJJNjQiCisjIGVsaWYgMSAmJiBMT05HX01BWCA+PiAzMCA9PSAxCisjICBkZWZpbmUgX1NDTjY0X1BSRUZJWCBfTE9OR19MT05HX0ZPUk1BVF9QUkVGSVgKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgU0NOZDY0IHx8IDAKKyMgIHVuZGVmIFNDTmQ2NAorIyAgZGVmaW5lIFNDTmQ2NCBfU0NONjRfUFJFRklYICJkIgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ05pNjQgfHwgMAorIyAgdW5kZWYgU0NOaTY0CisjICBkZWZpbmUgU0NOaTY0IF9TQ042NF9QUkVGSVggImkiCisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBVSU5UNjRfTUFYCisjIGlmICgwID8gZGVmaW5lZCBfTFA2NCA6IDEpCisjICBkZWZpbmUgX1NDTnU2NF9QUkVGSVggImwiCisjIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUiB8fCBkZWZpbmVkIF9fTUlOR1czMl9fCisjICBkZWZpbmUgX1NDTnU2NF9QUkVGSVggIkk2NCIKKyMgZWxpZiAxICYmIFVMT05HX01BWCA+PiAzMSA9PSAxCisjICBkZWZpbmUgX1NDTnU2NF9QUkVGSVggX0xPTkdfTE9OR19GT1JNQVRfUFJFRklYCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTm82NCB8fCAwCisjICB1bmRlZiBTQ05vNjQKKyMgIGRlZmluZSBTQ05vNjQgX1NDTnU2NF9QUkVGSVggIm8iCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTnU2NCB8fCAwCisjICB1bmRlZiBTQ051NjQKKyMgIGRlZmluZSBTQ051NjQgX1NDTnU2NF9QUkVGSVggInUiCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTng2NCB8fCAwCisjICB1bmRlZiBTQ054NjQKKyMgIGRlZmluZSBTQ054NjQgX1NDTnU2NF9QUkVGSVggIngiCisjIGVuZGlmCisjZW5kaWYKKworI2lmICFkZWZpbmVkIFNDTmRMRUFTVDggfHwgMAorIyB1bmRlZiBTQ05kTEVBU1Q4CisjIGRlZmluZSBTQ05kTEVBU1Q4ICJoaGQiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05pTEVBU1Q4IHx8IDAKKyMgdW5kZWYgU0NOaUxFQVNUOAorIyBkZWZpbmUgU0NOaUxFQVNUOCAiaGhpIgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOb0xFQVNUOCB8fCAwCisjIHVuZGVmIFNDTm9MRUFTVDgKKyMgZGVmaW5lIFNDTm9MRUFTVDggImhobyIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTnVMRUFTVDggfHwgMAorIyB1bmRlZiBTQ051TEVBU1Q4CisjIGRlZmluZSBTQ051TEVBU1Q4ICJoaHUiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ054TEVBU1Q4IHx8IDAKKyMgdW5kZWYgU0NOeExFQVNUOAorIyBkZWZpbmUgU0NOeExFQVNUOCAiaGh4IgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOZExFQVNUMTYgfHwgMAorIyB1bmRlZiBTQ05kTEVBU1QxNgorIyBkZWZpbmUgU0NOZExFQVNUMTYgImhkIgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOaUxFQVNUMTYgfHwgMAorIyB1bmRlZiBTQ05pTEVBU1QxNgorIyBkZWZpbmUgU0NOaUxFQVNUMTYgImhpIgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOb0xFQVNUMTYgfHwgMAorIyB1bmRlZiBTQ05vTEVBU1QxNgorIyBkZWZpbmUgU0NOb0xFQVNUMTYgImhvIgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOdUxFQVNUMTYgfHwgMAorIyB1bmRlZiBTQ051TEVBU1QxNgorIyBkZWZpbmUgU0NOdUxFQVNUMTYgImh1IgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOeExFQVNUMTYgfHwgMAorIyB1bmRlZiBTQ054TEVBU1QxNgorIyBkZWZpbmUgU0NOeExFQVNUMTYgImh4IgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOZExFQVNUMzIgfHwgMAorIyB1bmRlZiBTQ05kTEVBU1QzMgorIyBkZWZpbmUgU0NOZExFQVNUMzIgImQiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05pTEVBU1QzMiB8fCAwCisjIHVuZGVmIFNDTmlMRUFTVDMyCisjIGRlZmluZSBTQ05pTEVBU1QzMiAiaSIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTm9MRUFTVDMyIHx8IDAKKyMgdW5kZWYgU0NOb0xFQVNUMzIKKyMgZGVmaW5lIFNDTm9MRUFTVDMyICJvIgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOdUxFQVNUMzIgfHwgMAorIyB1bmRlZiBTQ051TEVBU1QzMgorIyBkZWZpbmUgU0NOdUxFQVNUMzIgInUiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ054TEVBU1QzMiB8fCAwCisjIHVuZGVmIFNDTnhMRUFTVDMyCisjIGRlZmluZSBTQ054TEVBU1QzMiAieCIKKyNlbmRpZgorI2lmZGVmIElOVDY0X01BWAorIyBpZiAhZGVmaW5lZCBTQ05kTEVBU1Q2NCB8fCAwCisjICB1bmRlZiBTQ05kTEVBU1Q2NAorIyAgZGVmaW5lIFNDTmRMRUFTVDY0IFNDTmQ2NAorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ05pTEVBU1Q2NCB8fCAwCisjICB1bmRlZiBTQ05pTEVBU1Q2NAorIyAgZGVmaW5lIFNDTmlMRUFTVDY0IFNDTmk2NAorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgVUlOVDY0X01BWAorIyBpZiAhZGVmaW5lZCBTQ05vTEVBU1Q2NCB8fCAwCisjICB1bmRlZiBTQ05vTEVBU1Q2NAorIyAgZGVmaW5lIFNDTm9MRUFTVDY0IFNDTm82NAorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ051TEVBU1Q2NCB8fCAwCisjICB1bmRlZiBTQ051TEVBU1Q2NAorIyAgZGVmaW5lIFNDTnVMRUFTVDY0IFNDTnU2NAorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ054TEVBU1Q2NCB8fCAwCisjICB1bmRlZiBTQ054TEVBU1Q2NAorIyAgZGVmaW5lIFNDTnhMRUFTVDY0IFNDTng2NAorIyBlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCBTQ05kRkFTVDggfHwgMAorIyB1bmRlZiBTQ05kRkFTVDgKKyMgaWYgSU5UX0ZBU1Q4X01BWCA+IElOVDMyX01BWAorIyAgZGVmaW5lIFNDTmRGQVNUOCBTQ05kNjQKKyMgZWxpZiBJTlRfRkFTVDhfTUFYID09IDB4N2ZmZgorIyAgZGVmaW5lIFNDTmRGQVNUOCAiaGQiCisjIGVsaWYgSU5UX0ZBU1Q4X01BWCA9PSAweDdmCisjICBkZWZpbmUgU0NOZEZBU1Q4ICJoaGQiCisjIGVsc2UKKyMgIGRlZmluZSBTQ05kRkFTVDggImQiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05pRkFTVDggfHwgMAorIyB1bmRlZiBTQ05pRkFTVDgKKyMgaWYgSU5UX0ZBU1Q4X01BWCA+IElOVDMyX01BWAorIyAgZGVmaW5lIFNDTmlGQVNUOCBTQ05pNjQKKyMgZWxpZiBJTlRfRkFTVDhfTUFYID09IDB4N2ZmZgorIyAgZGVmaW5lIFNDTmlGQVNUOCAiaGkiCisjIGVsaWYgSU5UX0ZBU1Q4X01BWCA9PSAweDdmCisjICBkZWZpbmUgU0NOaUZBU1Q4ICJoaGkiCisjIGVsc2UKKyMgIGRlZmluZSBTQ05pRkFTVDggImkiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05vRkFTVDggfHwgMAorIyB1bmRlZiBTQ05vRkFTVDgKKyMgaWYgVUlOVF9GQVNUOF9NQVggPiBVSU5UMzJfTUFYCisjICBkZWZpbmUgU0NOb0ZBU1Q4IFNDTm82NAorIyBlbGlmIFVJTlRfRkFTVDhfTUFYID09IDB4ZmZmZgorIyAgZGVmaW5lIFNDTm9GQVNUOCAiaG8iCisjIGVsaWYgVUlOVF9GQVNUOF9NQVggPT0gMHhmZgorIyAgZGVmaW5lIFNDTm9GQVNUOCAiaGhvIgorIyBlbHNlCisjICBkZWZpbmUgU0NOb0ZBU1Q4ICJvIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOdUZBU1Q4IHx8IDAKKyMgdW5kZWYgU0NOdUZBU1Q4CisjIGlmIFVJTlRfRkFTVDhfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFNDTnVGQVNUOCBTQ051NjQKKyMgZWxpZiBVSU5UX0ZBU1Q4X01BWCA9PSAweGZmZmYKKyMgIGRlZmluZSBTQ051RkFTVDggImh1IgorIyBlbGlmIFVJTlRfRkFTVDhfTUFYID09IDB4ZmYKKyMgIGRlZmluZSBTQ051RkFTVDggImhodSIKKyMgZWxzZQorIyAgZGVmaW5lIFNDTnVGQVNUOCAidSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTnhGQVNUOCB8fCAwCisjIHVuZGVmIFNDTnhGQVNUOAorIyBpZiBVSU5UX0ZBU1Q4X01BWCA+IFVJTlQzMl9NQVgKKyMgIGRlZmluZSBTQ054RkFTVDggU0NOeDY0CisjIGVsaWYgVUlOVF9GQVNUOF9NQVggPT0gMHhmZmZmCisjICBkZWZpbmUgU0NOeEZBU1Q4ICJoeCIKKyMgZWxpZiBVSU5UX0ZBU1Q4X01BWCA9PSAweGZmCisjICBkZWZpbmUgU0NOeEZBU1Q4ICJoaHgiCisjIGVsc2UKKyMgIGRlZmluZSBTQ054RkFTVDggIngiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05kRkFTVDE2IHx8IDAKKyMgdW5kZWYgU0NOZEZBU1QxNgorIyBpZiBJTlRfRkFTVDE2X01BWCA+IElOVDMyX01BWAorIyAgZGVmaW5lIFNDTmRGQVNUMTYgU0NOZDY0CisjIGVsaWYgSU5UX0ZBU1QxNl9NQVggPT0gMHg3ZmZmCisjICBkZWZpbmUgU0NOZEZBU1QxNiAiaGQiCisjIGVsc2UKKyMgIGRlZmluZSBTQ05kRkFTVDE2ICJkIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOaUZBU1QxNiB8fCAwCisjIHVuZGVmIFNDTmlGQVNUMTYKKyMgaWYgSU5UX0ZBU1QxNl9NQVggPiBJTlQzMl9NQVgKKyMgIGRlZmluZSBTQ05pRkFTVDE2IFNDTmk2NAorIyBlbGlmIElOVF9GQVNUMTZfTUFYID09IDB4N2ZmZgorIyAgZGVmaW5lIFNDTmlGQVNUMTYgImhpIgorIyBlbHNlCisjICBkZWZpbmUgU0NOaUZBU1QxNiAiaSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTm9GQVNUMTYgfHwgMAorIyB1bmRlZiBTQ05vRkFTVDE2CisjIGlmIFVJTlRfRkFTVDE2X01BWCA+IFVJTlQzMl9NQVgKKyMgIGRlZmluZSBTQ05vRkFTVDE2IFNDTm82NAorIyBlbGlmIFVJTlRfRkFTVDE2X01BWCA9PSAweGZmZmYKKyMgIGRlZmluZSBTQ05vRkFTVDE2ICJobyIKKyMgZWxzZQorIyAgZGVmaW5lIFNDTm9GQVNUMTYgIm8iCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ051RkFTVDE2IHx8IDAKKyMgdW5kZWYgU0NOdUZBU1QxNgorIyBpZiBVSU5UX0ZBU1QxNl9NQVggPiBVSU5UMzJfTUFYCisjICBkZWZpbmUgU0NOdUZBU1QxNiBTQ051NjQKKyMgZWxpZiBVSU5UX0ZBU1QxNl9NQVggPT0gMHhmZmZmCisjICBkZWZpbmUgU0NOdUZBU1QxNiAiaHUiCisjIGVsc2UKKyMgIGRlZmluZSBTQ051RkFTVDE2ICJ1IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOeEZBU1QxNiB8fCAwCisjIHVuZGVmIFNDTnhGQVNUMTYKKyMgaWYgVUlOVF9GQVNUMTZfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFNDTnhGQVNUMTYgU0NOeDY0CisjIGVsaWYgVUlOVF9GQVNUMTZfTUFYID09IDB4ZmZmZgorIyAgZGVmaW5lIFNDTnhGQVNUMTYgImh4IgorIyBlbHNlCisjICBkZWZpbmUgU0NOeEZBU1QxNiAieCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTmRGQVNUMzIgfHwgMAorIyB1bmRlZiBTQ05kRkFTVDMyCisjIGlmIElOVF9GQVNUMzJfTUFYID4gSU5UMzJfTUFYCisjICBkZWZpbmUgU0NOZEZBU1QzMiBTQ05kNjQKKyMgZWxzZQorIyAgZGVmaW5lIFNDTmRGQVNUMzIgImQiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05pRkFTVDMyIHx8IDAKKyMgdW5kZWYgU0NOaUZBU1QzMgorIyBpZiBJTlRfRkFTVDMyX01BWCA+IElOVDMyX01BWAorIyAgZGVmaW5lIFNDTmlGQVNUMzIgU0NOaTY0CisjIGVsc2UKKyMgIGRlZmluZSBTQ05pRkFTVDMyICJpIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOb0ZBU1QzMiB8fCAwCisjIHVuZGVmIFNDTm9GQVNUMzIKKyMgaWYgVUlOVF9GQVNUMzJfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFNDTm9GQVNUMzIgU0NObzY0CisjIGVsc2UKKyMgIGRlZmluZSBTQ05vRkFTVDMyICJvIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOdUZBU1QzMiB8fCAwCisjIHVuZGVmIFNDTnVGQVNUMzIKKyMgaWYgVUlOVF9GQVNUMzJfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFNDTnVGQVNUMzIgU0NOdTY0CisjIGVsc2UKKyMgIGRlZmluZSBTQ051RkFTVDMyICJ1IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOeEZBU1QzMiB8fCAwCisjIHVuZGVmIFNDTnhGQVNUMzIKKyMgaWYgVUlOVF9GQVNUMzJfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFNDTnhGQVNUMzIgU0NOeDY0CisjIGVsc2UKKyMgIGRlZmluZSBTQ054RkFTVDMyICJ4IgorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgSU5UNjRfTUFYCisjIGlmICFkZWZpbmVkIFNDTmRGQVNUNjQgfHwgMAorIyAgdW5kZWYgU0NOZEZBU1Q2NAorIyAgZGVmaW5lIFNDTmRGQVNUNjQgU0NOZDY0CisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTmlGQVNUNjQgfHwgMAorIyAgdW5kZWYgU0NOaUZBU1Q2NAorIyAgZGVmaW5lIFNDTmlGQVNUNjQgU0NOaTY0CisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBVSU5UNjRfTUFYCisjIGlmICFkZWZpbmVkIFNDTm9GQVNUNjQgfHwgMAorIyAgdW5kZWYgU0NOb0ZBU1Q2NAorIyAgZGVmaW5lIFNDTm9GQVNUNjQgU0NObzY0CisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTnVGQVNUNjQgfHwgMAorIyAgdW5kZWYgU0NOdUZBU1Q2NAorIyAgZGVmaW5lIFNDTnVGQVNUNjQgU0NOdTY0CisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTnhGQVNUNjQgfHwgMAorIyAgdW5kZWYgU0NOeEZBU1Q2NAorIyAgZGVmaW5lIFNDTnhGQVNUNjQgU0NOeDY0CisjIGVuZGlmCisjZW5kaWYKKworI2lmICFkZWZpbmVkIFNDTmRNQVggfHwgMAorIyB1bmRlZiBTQ05kTUFYCisjIGlmIDEKKyMgIGRlZmluZSBTQ05kTUFYIFNDTmQ2NAorIyBlbHNlCisjICBkZWZpbmUgU0NOZE1BWCAibGQiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05pTUFYIHx8IDAKKyMgdW5kZWYgU0NOaU1BWAorIyBpZiAxCisjICBkZWZpbmUgU0NOaU1BWCBTQ05pNjQKKyMgZWxzZQorIyAgZGVmaW5lIFNDTmlNQVggImxpIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOb01BWCB8fCAwCisjIHVuZGVmIFNDTm9NQVgKKyMgaWYgMQorIyAgZGVmaW5lIFNDTm9NQVggU0NObzY0CisjIGVsc2UKKyMgIGRlZmluZSBTQ05vTUFYICJsbyIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTnVNQVggfHwgMAorIyB1bmRlZiBTQ051TUFYCisjIGlmIDEKKyMgIGRlZmluZSBTQ051TUFYIFNDTnU2NAorIyBlbHNlCisjICBkZWZpbmUgU0NOdU1BWCAibHUiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ054TUFYIHx8IDAKKyMgdW5kZWYgU0NOeE1BWAorIyBpZiAxCisjICBkZWZpbmUgU0NOeE1BWCBTQ054NjQKKyMgZWxzZQorIyAgZGVmaW5lIFNDTnhNQVggImx4IgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCBTQ05kUFRSIHx8IDAKKyMgdW5kZWYgU0NOZFBUUgorIyBpZmRlZiBJTlRQVFJfTUFYCisjICBkZWZpbmUgU0NOZFBUUiAibCIgImQiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05pUFRSIHx8IDAKKyMgdW5kZWYgU0NOaVBUUgorIyBpZmRlZiBJTlRQVFJfTUFYCisjICBkZWZpbmUgU0NOaVBUUiAibCIgImkiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05vUFRSIHx8IDAKKyMgdW5kZWYgU0NOb1BUUgorIyBpZmRlZiBVSU5UUFRSX01BWAorIyAgZGVmaW5lIFNDTm9QVFIgImwiICJvIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOdVBUUiB8fCAwCisjIHVuZGVmIFNDTnVQVFIKKyMgaWZkZWYgVUlOVFBUUl9NQVgKKyMgIGRlZmluZSBTQ051UFRSICJsIiAidSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTnhQVFIgfHwgMAorIyB1bmRlZiBTQ054UFRSCisjIGlmZGVmIFVJTlRQVFJfTUFYCisjICBkZWZpbmUgU0NOeFBUUiAibCIgIngiCisjIGVuZGlmCisjZW5kaWYKKworLyogNy44LjIgRnVuY3Rpb25zIGZvciBncmVhdGVzdC13aWR0aCBpbnRlZ2VyIHR5cGVzICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIDAKKyMgaWYgITEKK2V4dGVybiBpbnRtYXhfdCBpbWF4YWJzIChpbnRtYXhfdCk7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGltYXhhYnMKKyMgaWYgSEFWRV9SQVdfREVDTF9JTUFYQUJTCitfR0xfV0FSTl9PTl9VU0UgKGltYXhhYnMsICJpbWF4YWJzIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBpbWF4YWJzIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmICExCisjICBpZiAhR05VTElCX2RlZmluZWRfaW1heGRpdl90Cit0eXBlZGVmIHN0cnVjdCB7IGludG1heF90IHF1b3Q7IGludG1heF90IHJlbTsgfSBpbWF4ZGl2X3Q7CisjICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX2ltYXhkaXZfdCAxCisjICBlbmRpZgorZXh0ZXJuIGltYXhkaXZfdCBpbWF4ZGl2IChpbnRtYXhfdCwgaW50bWF4X3QpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBpbWF4ZGl2CisjIGlmIEhBVkVfUkFXX0RFQ0xfSU1BWERJVgorX0dMX1dBUk5fT05fVVNFIChpbWF4ZGl2LCAiaW1heGRpdiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgaW1heGRpdiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHN0cnRvaW1heAorIyAgIGRlZmluZSBzdHJ0b2ltYXggcnBsX3N0cnRvaW1heAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHN0cnRvaW1heCwgaW50bWF4X3QsCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzdHJ0b2ltYXgsIGludG1heF90LCAoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpKTsKKyMgZWxzZQorIyAgaWYgITEKKyMgICB1bmRlZiBzdHJ0b2ltYXgKK19HTF9GVU5DREVDTF9TWVMgKHN0cnRvaW1heCwgaW50bWF4X3QsCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc3RydG9pbWF4LCBpbnRtYXhfdCwgKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzdHJ0b2ltYXgpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJ0b2ltYXgKKyMgaWYgSEFWRV9SQVdfREVDTF9TVFJUT0lNQVgKK19HTF9XQVJOX09OX1VTRSAoc3RydG9pbWF4LCAic3RydG9pbWF4IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHJ0b2ltYXggZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgITEKKyMgIHVuZGVmIHN0cnRvdW1heAorX0dMX0ZVTkNERUNMX1NZUyAoc3RydG91bWF4LCB1aW50bWF4X3QsCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzdHJ0b3VtYXgsIHVpbnRtYXhfdCwgKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChzdHJ0b3VtYXgpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJ0b3VtYXgKKyMgaWYgSEFWRV9SQVdfREVDTF9TVFJUT1VNQVgKK19HTF9XQVJOX09OX1VTRSAoc3RydG91bWF4LCAic3RydG91bWF4IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHJ0b3VtYXggZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworLyogRG9uJ3QgYm90aGVyIGRlZmluaW5nIG9yIGRlY2xhcmluZyB3Y3N0b2ltYXggYW5kIHdjc3RvdW1heCwgc2luY2UKKyAgIHdpZGUtY2hhcmFjdGVyIGZ1bmN0aW9ucyBsaWtlIHRoaXMgYXJlIGhhcmRseSBldmVyIHVzZWZ1bC4gICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiAhZGVmaW5lZCBJTlRUWVBFU19IICYmICFkZWZpbmVkIF9HTF9KVVNUX0lOQ0xVREVfU1lTVEVNX0lOVFRZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2Rhcndpbi1saWIvbWF0aC5oIGIvZGFyd2luLWxpYi9tYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc5ZTlkNwotLS0gL2Rldi9udWxsCisrKyBiL2Rhcndpbi1saWIvbWF0aC5oCkBAIC0wLDAgKzEsMjU4NyBAQAorLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLworLyogQSBHTlUtbGlrZSA8bWF0aC5oPi4KKworICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMsIDIwMDctMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBfR0xfTUFUSF9ICisKKyNpZiBfX0dOVUNfXyA+PSAzCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisjZW5kaWYKKworCisvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisjaW5jbHVkZV9uZXh0IDxtYXRoLmg+CisKKyNpZm5kZWYgX0dMX01BVEhfSAorI2RlZmluZSBfR0xfTUFUSF9ICisKK19HTF9JTkxJTkVfSEVBREVSX0JFR0lOCisjaWZuZGVmIF9HTF9NQVRIX0lOTElORQorIyBkZWZpbmUgX0dMX01BVEhfSU5MSU5FIF9HTF9JTkxJTkUKKyNlbmRpZgorCisvKiBUaGUgZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTCBldGMuIGFyZSBjb3BpZWQgaGVyZS4gICovCisjaWZuZGVmIF9HTF9DWFhERUZTX0gKKyNkZWZpbmUgX0dMX0NYWERFRlNfSAorCisvKiBUaGUgdGhyZWUgbW9zdCBmcmVxdWVudCB1c2UgY2FzZXMgb2YgdGhlc2UgbWFjcm9zIGFyZToKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgc3Vic3RpdHV0ZSBmb3IgYSBmdW5jdGlvbiB0aGF0IGlzIG1pc3Npbmcgb24gc29tZQorICAgICBwbGF0Zm9ybXMsIGJ1dCBpcyBkZWNsYXJlZCBhbmQgd29ya3MgZmluZSBvbiB0aGUgcGxhdGZvcm1zIG9uIHdoaWNoCisgICAgIGl0IGV4aXN0czoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmICFASEFWRV9GT09ACisgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIGFsbCBwbGF0Zm9ybXMsCisgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIHBsYXRmb3JtczoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorICAgICAgICMgICB1bmRlZiBmb28KKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworICAgICAgICMgZWxzZQorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIHNvbWUgcGxhdGZvcm1zCisgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIG9mIHRoZW0gYW5kCisgICAgIGlzIGFkZGl0aW9uYWxseSBlaXRoZXIgbWlzc2luZyBvciB1bmRlY2xhcmVkIG9uIHNvbWUgb3RoZXIgcGxhdGZvcm1zOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisgICAgICAgIyAgIHVuZGVmIGZvbworICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CisgICAgICAgIyBlbHNlCisgICAgICAgIyAgaWYgIUBIQVZFX0ZPT0AgICBvciAgIGlmICFASEFWRV9ERUNMX0ZPT0AKKyAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorKi8KKworLyogX0dMX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuICJDIgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4KKyNlbmRpZgorCisvKiBfR0xfRlVOQ0RFQ0xfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGRlY2xhcmVzIGEgcmVwbGFjZW1lbnQgZnVuY3Rpb24sIG5hbWVkIHJwbF9mdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9GVU5DREVDTF9SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICovCisjZGVmaW5lIF9HTF9GVU5DREVDTF9SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0ZVTkNERUNMX1JQTF8xIChycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKQorI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMXzEocnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9FWFRFUk5fQyByZXR0eXBlIHJwbF9mdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKworLyogX0dMX0ZVTkNERUNMX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBkZWNsYXJlcyB0aGUgc3lzdGVtIGZ1bmN0aW9uLCBuYW1lZCBmdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9GVU5DREVDTF9TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICovCisjZGVmaW5lIF9HTF9GVU5DREVDTF9TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0VYVEVSTl9DIHJldHR5cGUgZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisKKy8qIF9HTF9DWFhBTElBU19SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHJwbF9mdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFIGlzIGRlZmluZWQuCisgICBFeGFtcGxlOgorICAgICBfR0xfQ1hYQUxJQVNfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKyAqLworI2RlZmluZSBfR0xfQ1hYQUxJQVNfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycykKKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OnJwbF9mdW5jOyAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gcnBsX2Z1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQKKyAgIGRlY2xhcmF0aW9uLiAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IKKyAgIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpycGxfZnVuYyk7ICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHRoZSBzeXN0ZW0gcHJvdmlkZWQgZnVuY3Rpb24gZnVuYywgaWYgR05VTElCX05BTUVTUEFDRQorICAgaXMgZGVmaW5lZC4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9DWFhBTElBU19TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyAgLyogSWYgd2Ugd2VyZSB0byB3cml0ZQorICAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOworICAgICBsaWtlIGFib3ZlIGluIF9HTF9DWFhBTElBU19SUExfMSwgdGhlIGNvbXBpbGVyIGNvdWxkIG9wdGltaXplIGNhbGxzCisgICAgIGJldHRlciAocmVtb3ZlIGFuIGluZGlyZWN0aW9uIHRocm91Z2ggYSAnc3RhdGljJyBwb2ludGVyIHZhcmlhYmxlKSwKKyAgICAgYnV0IHRoZW4gdGhlIF9HTF9DWFhBTElBU1dBUk4gbWFjcm8gYmVsb3cgd291bGQgY2F1c2UgYSB3YXJuaW5nIG5vdCBvbmx5CisgICAgIGZvciB1c2VzIG9mIDo6ZnVuYyBidXQgYWxzbyBmb3IgdXNlcyBvZiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jLiAgKi8KKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGZ1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgZGVjbGFyYXRpb24uCisgICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvciB0aGF0IHdvdWxkCisgICBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpmdW5jKTsgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMsIHJldHR5cGUyLCBwYXJhbWV0ZXJzMik7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGlzIHBpY2tlZCBhbW9uZyBhIHNldCBvZiBvdmVybG9hZGVkIGZ1bmN0aW9ucywKKyAgIG5hbWVseSB0aGUgb25lIHdpdGggcmV0dHlwZTIgYW5kIHBhcmFtZXRlcnMyLiAgVHdvIGNvbnNlY3V0aXZlIGNhc3RzCisgICBhcmUgdXNlZCB0byBzaWxlbmNlIHRoZSAiY2Fubm90IGZpbmQgYSBtYXRjaCIgYW5kICJpbnZhbGlkIGNvbnZlcnNpb24iCisgICBlcnJvcnMgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisgIC8qIFRoZSBvdXRlciBjYXN0IG11c3QgYmUgYSByZWludGVycHJldF9jYXN0LgorICAgICBUaGUgaW5uZXIgY2FzdDogV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNldCBvZiBvdmVybG9hZGVkCisgICAgIGZ1bmN0aW9ucywgaXQgd29ya3MgYXMgYSBzdGF0aWNfY2FzdDw+LCBjaG9vc2luZyB0aGUgZGVzaWduYXRlZCB2YXJpYW50LgorICAgICBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2luZ2xlIHZhcmlhbnQsIGl0IHdvcmtzIGFzIGEKKyAgICAgcmVpbnRlcnByZXRfY2FzdDw+LiBUaGUgcGFyZW50aGVzaXplZCBjYXN0IHN5bnRheCB3b3JrcyBib3RoIHdheXMuICAqLworIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChyZXR0eXBlMigqKXBhcmFtZXRlcnMyKSg6OmZ1bmMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTV0FSTiAoZnVuYyk7CisgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiA6OmZ1bmMgaXMgdXNlZCBidXQgbm90IHdoZW4KKyAgIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gIGZ1bmMgbXVzdCBiZSBkZWZpbmVkIHdpdGhvdXQgb3ZlcmxvYWRlZAorICAgdmFyaWFudHMuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk5fMSAoZnVuYywgR05VTElCX05BTUVTUEFDRSkKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMShmdW5jLG5hbWVzcGFjZSkgXAorICAgX0dMX0NYWEFMSUFTV0FSTl8yIChmdW5jLCBuYW1lc3BhY2UpCisvKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKyAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworIyBpZiAhX19PUFRJTUlaRV9fCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgX0dMX1dBUk5fT05fVVNFIChmdW5jLCBcCisgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworIyBlbHNlCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNXQVJOMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiB0aGUgZ2l2ZW4gb3ZlcmxvYWRlZCB2YXJpYW50IG9mIDo6ZnVuYworICAgaXMgdXNlZCBidXQgbm90IHdoZW4gR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk4xXzEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdOVUxJQl9OQU1FU1BBQ0UpCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgX0dMX0NYWEFMSUFTV0FSTjFfMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgbmFtZXNwYWNlKQorLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKyMgaWYgIV9fT1BUSU1JWkVfXworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisjZW5kaWYgLyogX0dMX0NYWERFRlNfSCAqLworCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwgaXMgY29waWVkIGhlcmUuICAqLworLyogX0dMX0FSR19OT05OVUxMKChuLC4uLixtKSkgdGVsbHMgdGhlIGNvbXBpbGVyIGFuZCBzdGF0aWMgYW5hbHl6ZXIgdG9vbHMKKyAgIHRoYXQgdGhlIHZhbHVlcyBwYXNzZWQgYXMgYXJndW1lbnRzIG4sIC4uLiwgbSBtdXN0IGJlIG5vbi1OVUxMIHBvaW50ZXJzLgorICAgbiA9IDEgc3RhbmRzIGZvciB0aGUgZmlyc3QgYXJndW1lbnQsIG4gPSAyIGZvciB0aGUgc2Vjb25kIGFyZ3VtZW50IGV0Yy4gICovCisjaWZuZGVmIF9HTF9BUkdfTk9OTlVMTAorIyBpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSB8fCBfX0dOVUNfXyA+IDMKKyMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKSBfX2F0dHJpYnV0ZV9fICgoX19ub25udWxsX18gcGFyYW1zKSkKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpCisjIGVuZGlmCisjZW5kaWYKKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFCisKKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCisvKiBBIGNvbXBpbGVyIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDQuMy4wIGFuZCBsYXRlci4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobWVzc2FnZSkpKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24KKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisjIGVuZGlmCisjZW5kaWYKKworLyogX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuY3Rpb24sIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsICJzdHJpbmciKQorICAgaXMgbGlrZSBfR0xfV0FSTl9PTl9VU0UgKGZ1bmN0aW9uLCAic3RyaW5nIiksIGV4Y2VwdCB0aGF0IHRoZSBmdW5jdGlvbiBpcworICAgZGVjbGFyZWQgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLCBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLAorICAgYW5kIGF0dHJpYnV0ZXMuCisgICBUaGlzIHZhcmlhbnQgaXMgdXNlZnVsIGZvciBvdmVybG9hZGVkIGZ1bmN0aW9ucyBpbiBDKysuIF9HTF9XQVJOX09OX1VTRSBkb2VzCisgICBub3Qgd29yayBpbiB0aGlzIGNhc2UuICAqLworI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0VfQ1hYCisjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyBcCisgICAgIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobXNnKSkpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisvKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBfR0xfV0FSTl9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX0VYVEVSTl9DCisjIGlmIGRlZmluZWQgX19jcGx1c3BsdXMKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4gIkMiCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4KKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKKy8qIEhlbHBlciBtYWNyb3MgdG8gZGVmaW5lIHR5cGUtZ2VuZXJpYyBmdW5jdGlvbiBGVU5DIGFzIG92ZXJsb2FkZWQgZnVuY3Rpb25zLAorICAgcmF0aGVyIHRoYW4gYXMgbWFjcm9zIGxpa2UgaW4gQy4gIFBPU0lYIGRlY2xhcmVzIHRoZXNlIHdpdGggYW4gYXJndW1lbnQgb2YKKyAgIHJlYWwtZmxvYXRpbmcgKHRoYXQgaXMsIG9uZSBvZiBmbG9hdCwgZG91YmxlLCBvciBsb25nIGRvdWJsZSkuICAqLworIyBkZWZpbmUgX0dMX01BVEhfQ1hYX1JFQUxfRkxPQVRJTkdfREVDTF8xKGZ1bmMpIFwKK3N0YXRpYyBpbmxpbmUgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorX2dsX2N4eF8gIyMgZnVuYyAjIyBmIChmbG9hdCBmKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcmV0dXJuIGZ1bmMgKGYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitzdGF0aWMgaW5saW5lIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK19nbF9jeHhfICMjIGZ1bmMgIyMgZCAoZG91YmxlIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHJldHVybiBmdW5jIChkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3RhdGljIGlubGluZSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitfZ2xfY3h4XyAjIyBmdW5jICMjIGwgKGxvbmcgZG91YmxlIGwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICByZXR1cm4gZnVuYyAobCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisjIGRlZmluZSBfR0xfTUFUSF9DWFhfUkVBTF9GTE9BVElOR19ERUNMXzIoZnVuYykgXAoraW5saW5lIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitmdW5jIChmbG9hdCBmKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICByZXR1cm4gX2dsX2N4eF8gIyMgZnVuYyAjIyBmIChmKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2lubGluZSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZnVuYyAoZG91YmxlIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcmV0dXJuIF9nbF9jeHhfICMjIGZ1bmMgIyMgZCAoZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitpbmxpbmUgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2Z1bmMgKGxvbmcgZG91YmxlIGwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHJldHVybiBfZ2xfY3h4XyAjIyBmdW5jICMjIGwgKGwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKyNlbmRpZgorCisvKiBIZWxwZXIgbWFjcm9zIHRvIGRlZmluZSBhIHBvcnRhYmlsaXR5IHdhcm5pbmcgZm9yIHRoZQorICAgY2xhc3NpZmljYXRpb24gbWFjcm8gRlVOQyBjYWxsZWQgd2l0aCBWQUxVRS4gIFBPU0lYIGRlY2xhcmVzIHRoZQorICAgY2xhc3NpZmljYXRpb24gbWFjcm9zIHdpdGggYW4gYXJndW1lbnQgb2YgcmVhbC1mbG9hdGluZyAodGhhdCBpcywKKyAgIG9uZSBvZiBmbG9hdCwgZG91YmxlLCBvciBsb25nIGRvdWJsZSkuICAqLworI2RlZmluZSBfR0xfV0FSTl9SRUFMX0ZMT0FUSU5HX0RFQ0woZnVuYykgXAorX0dMX01BVEhfSU5MSU5FIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitycGxfICMjIGZ1bmMgIyMgZiAoZmxvYXQgZikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICByZXR1cm4gZnVuYyAoZik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK19HTF9NQVRIX0lOTElORSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorcnBsXyAjIyBmdW5jICMjIGQgKGRvdWJsZSBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcmV0dXJuIGZ1bmMgKGQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitfR0xfTUFUSF9JTkxJTkUgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3JwbF8gIyMgZnVuYyAjIyBsIChsb25nIGRvdWJsZSBsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHJldHVybiBmdW5jIChsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorX0dMX1dBUk5fT05fVVNFIChycGxfICMjIGZ1bmMgIyMgZiwgI2Z1bmMgIiBpcyB1bnBvcnRhYmxlIC0gIiAgICAgICBcCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSAiICNmdW5jICIgZm9yIHBvcnRhYmlsaXR5Iik7ICAgIFwKK19HTF9XQVJOX09OX1VTRSAocnBsXyAjIyBmdW5jICMjIGQsICNmdW5jICIgaXMgdW5wb3J0YWJsZSAtICIgICAgICAgXAorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgIiAjZnVuYyAiIGZvciBwb3J0YWJpbGl0eSIpOyAgICBcCitfR0xfV0FSTl9PTl9VU0UgKHJwbF8gIyMgZnVuYyAjIyBsLCAjZnVuYyAiIGlzIHVucG9ydGFibGUgLSAiICAgICAgIFwKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlICIgI2Z1bmMgIiBmb3IgcG9ydGFiaWxpdHkiKQorI2RlZmluZSBfR0xfV0FSTl9SRUFMX0ZMT0FUSU5HX0lNUEwoZnVuYywgdmFsdWUpIFwKKyAgKHNpemVvZiAodmFsdWUpID09IHNpemVvZiAoZmxvYXQpID8gcnBsXyAjIyBmdW5jICMjIGYgKHZhbHVlKSAgICAgXAorICAgOiBzaXplb2YgKHZhbHVlKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBycGxfICMjIGZ1bmMgIyMgZCAodmFsdWUpICBcCisgICA6IHJwbF8gIyMgZnVuYyAjIyBsICh2YWx1ZSkpCisKKworI2lmIDAKKy8qIFB1bGwgaW4gYSBmdW5jdGlvbiB0aGF0IGZpeGVzIHRoZSAnaW50JyB0byAnbG9uZyBkb3VibGUnIGNvbnZlcnNpb24KKyAgIG9mIGdsaWJjIDIuNy4gICovCitfR0xfRVhURVJOX0Mgdm9pZCBfUXBfaXRvcSAobG9uZyBkb3VibGUgKiwgaW50KTsKK3N0YXRpYyB2b2lkICgqX2dsX21hdGhfZml4X2l0b2xkKSAobG9uZyBkb3VibGUgKiwgaW50KSA9IF9RcF9pdG9xOworI2VuZGlmCisKKworLyogUE9TSVggYWxsb3dzIHBsYXRmb3JtcyB0aGF0IGRvbid0IHN1cHBvcnQgTkFOLiAgQnV0IGFsbCBtYWpvcgorICAgbWFjaGluZXMgaW4gdGhlIHBhc3QgMTUgeWVhcnMgaGF2ZSBzdXBwb3J0ZWQgc29tZXRoaW5nIGNsb3NlIHRvCisgICBJRUVFIE5hTiwgc28gd2UgZGVmaW5lIHRoaXMgdW5jb25kaXRpb25hbGx5LiAgV2UgYWxzbyBtdXN0IGRlZmluZQorICAgaXQgb24gcGxhdGZvcm1zIGxpa2UgU29sYXJpcyAxMCwgd2hlcmUgTkFOIGlzIHByZXNlbnQgYnV0IGRlZmluZWQKKyAgIGFzIGEgZnVuY3Rpb24gcG9pbnRlciByYXRoZXIgdGhhbiBhIGZsb2F0aW5nIHBvaW50IGNvbnN0YW50LiAgKi8KKyNpZiAhZGVmaW5lZCBOQU4gfHwgMAorIyBpZiAhR05VTElCX2RlZmluZWRfTkFOCisjICB1bmRlZiBOQU4KKyAgLyogVGhlIENvbXBhcSAoZXgtREVDKSBDIDYuNCBjb21waWxlciBhbmQgdGhlIE1pY3Jvc29mdCBNU1ZDIDkgY29tcGlsZXIKKyAgICAgY2hva2Ugb24gdGhlIGV4cHJlc3Npb24gMC4wIC8gMC4wLiAgKi8KKyMgIGlmIGRlZmluZWQgX19ERUNDIHx8IGRlZmluZWQgX01TQ19WRVIKK19HTF9NQVRIX0lOTElORSBmbG9hdAorX05hTiAoKQoreworICBzdGF0aWMgZmxvYXQgemVybyA9IDAuMGY7CisgIHJldHVybiB6ZXJvIC8gemVybzsKK30KKyMgICBkZWZpbmUgTkFOIChfTmFOKCkpCisjICBlbHNlCisjICAgZGVmaW5lIE5BTiAoMC4wZiAvIDAuMGYpCisjICBlbmRpZgorIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX05BTiAxCisjIGVuZGlmCisjZW5kaWYKKworLyogU29sYXJpcyAxMCBkZWZpbmVzIEhVR0VfVkFMLCBidXQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHJhdGhlcgorICAgdGhhbiBhIGZsb2F0aW5nIHBvaW50IGNvbnN0YW50LiAgKi8KKyNpZiAwCisjIHVuZGVmIEhVR0VfVkFMRgorIyBkZWZpbmUgSFVHRV9WQUxGICgxLjBmIC8gMC4wZikKKyMgdW5kZWYgSFVHRV9WQUwKKyMgZGVmaW5lIEhVR0VfVkFMICgxLjAgLyAwLjApCisjIHVuZGVmIEhVR0VfVkFMTAorIyBkZWZpbmUgSFVHRV9WQUxMICgxLjBMIC8gMC4wTCkKKyNlbmRpZgorCisvKiBIVUdFX1ZBTEYgaXMgYSAnZmxvYXQnIEluZmluaXR5LiAgKi8KKyNpZm5kZWYgSFVHRV9WQUxGCisjIGlmIGRlZmluZWQgX01TQ19WRVIKKy8qIFRoZSBNaWNyb3NvZnQgTVNWQyA5IGNvbXBpbGVyIGNob2tlcyBvbiB0aGUgZXhwcmVzc2lvbiAxLjBmIC8gMC4wZi4gICovCisjICBkZWZpbmUgSFVHRV9WQUxGICgxZTI1ZiAqIDFlMjVmKQorIyBlbHNlCisjICBkZWZpbmUgSFVHRV9WQUxGICgxLjBmIC8gMC4wZikKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBIVUdFX1ZBTCBpcyBhICdkb3VibGUnIEluZmluaXR5LiAgKi8KKyNpZm5kZWYgSFVHRV9WQUwKKyMgaWYgZGVmaW5lZCBfTVNDX1ZFUgorLyogVGhlIE1pY3Jvc29mdCBNU1ZDIDkgY29tcGlsZXIgY2hva2VzIG9uIHRoZSBleHByZXNzaW9uIDEuMCAvIDAuMC4gICovCisjICBkZWZpbmUgSFVHRV9WQUwgKDFlMjUwICogMWUyNTApCisjIGVsc2UKKyMgIGRlZmluZSBIVUdFX1ZBTCAoMS4wIC8gMC4wKQorIyBlbmRpZgorI2VuZGlmCisKKy8qIEhVR0VfVkFMTCBpcyBhICdsb25nIGRvdWJsZScgSW5maW5pdHkuICAqLworI2lmbmRlZiBIVUdFX1ZBTEwKKyMgaWYgZGVmaW5lZCBfTVNDX1ZFUgorLyogVGhlIE1pY3Jvc29mdCBNU1ZDIDkgY29tcGlsZXIgY2hva2VzIG9uIHRoZSBleHByZXNzaW9uIDEuMEwgLyAwLjBMLiAgKi8KKyMgIGRlZmluZSBIVUdFX1ZBTEwgKDFlMjUwTCAqIDFlMjUwTCkKKyMgZWxzZQorIyAgZGVmaW5lIEhVR0VfVkFMTCAoMS4wTCAvIDAuMEwpCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBFbnN1cmUgRlBfSUxPR0IwIGFuZCBGUF9JTE9HQk5BTiBhcmUgZGVmaW5lZC4gICovCisjaWYgIShkZWZpbmVkIEZQX0lMT0dCMCAmJiBkZWZpbmVkIEZQX0lMT0dCTkFOKQorIyBpZiBkZWZpbmVkIF9fTmV0QlNEX18gfHwgZGVmaW5lZCBfX3NnaQorICAvKiBOZXRCU0QsIElSSVggNi41OiBtYXRjaCB3aGF0IGlsb2diKCkgZG9lcyAqLworIyAgZGVmaW5lIEZQX0lMT0dCMCAgICgtIDIxNDc0ODM2NDcgLSAxKSAvKiBJTlRfTUlOICovCisjICBkZWZpbmUgRlBfSUxPR0JOQU4gKC0gMjE0NzQ4MzY0NyAtIDEpIC8qIElOVF9NSU4gKi8KKyMgZWxpZiBkZWZpbmVkIF9BSVgKKyAgLyogQUlYIDUuMTogbWF0Y2ggd2hhdCBpbG9nYigpIGRvZXMgaW4gQUlYID49IDUuMiAqLworIyAgZGVmaW5lIEZQX0lMT0dCMCAgICgtIDIxNDc0ODM2NDcgLSAxKSAvKiBJTlRfTUlOICovCisjICBkZWZpbmUgRlBfSUxPR0JOQU4gMjE0NzQ4MzY0NyAvKiBJTlRfTUFYICovCisjIGVsaWYgZGVmaW5lZCBfX3N1bgorICAvKiBTb2xhcmlzIDk6IG1hdGNoIHdoYXQgaWxvZ2IoKSBkb2VzICovCisjICBkZWZpbmUgRlBfSUxPR0IwICAgKC0gMjE0NzQ4MzY0NykgLyogLSBJTlRfTUFYICovCisjICBkZWZpbmUgRlBfSUxPR0JOQU4gMjE0NzQ4MzY0NyAvKiBJTlRfTUFYICovCisjIGVsc2UKKyAgLyogR251bGliIGRlZmluZWQgdmFsdWVzLiAgKi8KKyMgIGRlZmluZSBGUF9JTE9HQjAgICAoLSAyMTQ3NDgzNjQ3KSAvKiAtIElOVF9NQVggKi8KKyMgIGRlZmluZSBGUF9JTE9HQk5BTiAoLSAyMTQ3NDgzNjQ3IC0gMSkgLyogSU5UX01JTiAqLworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgITEKKyMgIHVuZGVmIGFjb3NmCitfR0xfRlVOQ0RFQ0xfU1lTIChhY29zZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChhY29zZiwgZmxvYXQsIChmbG9hdCB4KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChhY29zZik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGFjb3NmCisjIGlmIEhBVkVfUkFXX0RFQ0xfQUNPU0YKK19HTF9XQVJOX09OX1VTRSAoYWNvc2YsICJhY29zZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgYWNvc2YgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgITEgfHwgITEKKyMgIHVuZGVmIGFjb3NsCitfR0xfRlVOQ0RFQ0xfU1lTIChhY29zbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChhY29zbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChhY29zbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGFjb3NsCisjIGlmIEhBVkVfUkFXX0RFQ0xfQUNPU0wKK19HTF9XQVJOX09OX1VTRSAoYWNvc2wsICJhY29zbCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgYWNvc2wgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAhMQorIyAgdW5kZWYgYXNpbmYKK19HTF9GVU5DREVDTF9TWVMgKGFzaW5mLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGFzaW5mLCBmbG9hdCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKGFzaW5mKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgYXNpbmYKKyMgaWYgSEFWRV9SQVdfREVDTF9BU0lORgorX0dMX1dBUk5fT05fVVNFIChhc2luZiwgImFzaW5mIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBhc2luZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAhMSB8fCAhMQorIyAgdW5kZWYgYXNpbmwKK19HTF9GVU5DREVDTF9TWVMgKGFzaW5sLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGFzaW5sLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKGFzaW5sKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgYXNpbmwKKyMgaWYgSEFWRV9SQVdfREVDTF9BU0lOTAorX0dMX1dBUk5fT05fVVNFIChhc2lubCwgImFzaW5sIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBhc2lubCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmICExCisjICB1bmRlZiBhdGFuZgorX0dMX0ZVTkNERUNMX1NZUyAoYXRhbmYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoYXRhbmYsIGZsb2F0LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAoYXRhbmYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBhdGFuZgorIyBpZiBIQVZFX1JBV19ERUNMX0FUQU5GCitfR0xfV0FSTl9PTl9VU0UgKGF0YW5mLCAiYXRhbmYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGF0YW5mIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmICExIHx8ICExCisjICB1bmRlZiBhdGFubAorX0dMX0ZVTkNERUNMX1NZUyAoYXRhbmwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoYXRhbmwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAoYXRhbmwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBhdGFubAorIyBpZiBIQVZFX1JBV19ERUNMX0FUQU5MCitfR0xfV0FSTl9PTl9VU0UgKGF0YW5sLCAiYXRhbmwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGF0YW5sIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgITEKKyMgIHVuZGVmIGF0YW4yZgorX0dMX0ZVTkNERUNMX1NZUyAoYXRhbjJmLCBmbG9hdCwgKGZsb2F0IHksIGZsb2F0IHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGF0YW4yZiwgZmxvYXQsIChmbG9hdCB5LCBmbG9hdCB4KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChhdGFuMmYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBhdGFuMmYKKyMgaWYgSEFWRV9SQVdfREVDTF9BVEFOMkYKK19HTF9XQVJOX09OX1VTRSAoYXRhbjJmLCAiYXRhbjJmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBhdGFuMmYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGNicnRmCisjICAgZGVmaW5lIGNicnRmIHJwbF9jYnJ0ZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGNicnRmLCBmbG9hdCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGNicnRmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGNicnRmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChjYnJ0ZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChjYnJ0Zik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGNicnRmCisjIGlmIEhBVkVfUkFXX0RFQ0xfQ0JSVEYKK19HTF9XQVJOX09OX1VTRSAoY2JydGYsICJjYnJ0ZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgY2JydGYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGNicnQsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChjYnJ0LCBkb3VibGUsIChkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAoY2JydCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGNicnQKKyMgaWYgSEFWRV9SQVdfREVDTF9DQlJUCitfR0xfV0FSTl9PTl9VU0UgKGNicnQsICJjYnJ0IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBjYnJ0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgY2JydGwKKyMgICBkZWZpbmUgY2JydGwgcnBsX2NicnRsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoY2JydGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAoY2JydGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoY2JydGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGNicnRsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGNicnRsKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgY2JydGwKKyMgaWYgSEFWRV9SQVdfREVDTF9DQlJUTAorX0dMX1dBUk5fT05fVVNFIChjYnJ0bCwgImNicnRsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBjYnJ0bCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgY2VpbGYKKyMgICBkZWZpbmUgY2VpbGYgcnBsX2NlaWxmCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoY2VpbGYsIGZsb2F0LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAoY2VpbGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbHNlCisjICBpZiAhMQorIyAgIHVuZGVmIGNlaWxmCitfR0xfRlVOQ0RFQ0xfU1lTIChjZWlsZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoY2VpbGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoY2VpbGYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBjZWlsZgorIyBpZiBIQVZFX1JBV19ERUNMX0NFSUxGCitfR0xfV0FSTl9PTl9VU0UgKGNlaWxmLCAiY2VpbGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGNlaWxmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGNlaWwgcnBsX2NlaWwKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChjZWlsLCBkb3VibGUsIChkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAoY2VpbCwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoY2VpbCwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGNlaWwpOworI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgY2VpbGwKKyMgICBkZWZpbmUgY2VpbGwgcnBsX2NlaWxsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoY2VpbGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAoY2VpbGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbHNlCisjICBpZiAhMQorIyAgIHVuZGVmIGNlaWxsCitfR0xfRlVOQ0RFQ0xfU1lTIChjZWlsbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoY2VpbGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoY2VpbGwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBjZWlsbAorIyBpZiBIQVZFX1JBV19ERUNMX0NFSUxMCitfR0xfV0FSTl9PTl9VU0UgKGNlaWxsLCAiY2VpbGwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGNlaWxsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGNvcHlzaWduZiwgZmxvYXQsIChmbG9hdCB4LCBmbG9hdCB5KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChjb3B5c2lnbmYsIGZsb2F0LCAoZmxvYXQgeCwgZmxvYXQgeSkpOworX0dMX0NYWEFMSUFTV0FSTiAoY29weXNpZ25mKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgY29weXNpZ25mCisjIGlmIEhBVkVfUkFXX0RFQ0xfQ09QWVNJR05GCitfR0xfV0FSTl9PTl9VU0UgKGNvcHlzaWduZiwgImNvcHlzaWduZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgY29weXNpZ25mIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChjb3B5c2lnbiwgZG91YmxlLCAoZG91YmxlIHgsIGRvdWJsZSB5KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChjb3B5c2lnbiwgZG91YmxlLCAoZG91YmxlIHgsIGRvdWJsZSB5KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChjb3B5c2lnbik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGNvcHlzaWduCisjIGlmIEhBVkVfUkFXX0RFQ0xfQ09QWVNJR04KK19HTF9XQVJOX09OX1VTRSAoY29weXNpZ24sICJjb3B5c2lnbiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgY29weXNpZ24gZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGNvcHlzaWdubCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChjb3B5c2lnbmwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkpOworX0dMX0NYWEFMSUFTV0FSTiAoY29weXNpZ25sKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgY29weXNpZ25sCisjIGlmIEhBVkVfUkFXX0RFQ0xfQ09QWVNJR05MCitfR0xfV0FSTl9PTl9VU0UgKGNvcHlzaWduLCAiY29weXNpZ25sIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBjb3B5c2lnbmwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAhMQorIyAgdW5kZWYgY29zZgorX0dMX0ZVTkNERUNMX1NZUyAoY29zZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChjb3NmLCBmbG9hdCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKGNvc2YpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBjb3NmCisjIGlmIEhBVkVfUkFXX0RFQ0xfQ09TRgorX0dMX1dBUk5fT05fVVNFIChjb3NmLCAiY29zZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgY29zZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAhMSB8fCAhMQorIyAgdW5kZWYgY29zbAorX0dMX0ZVTkNERUNMX1NZUyAoY29zbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChjb3NsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKGNvc2wpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBjb3NsCisjIGlmIEhBVkVfUkFXX0RFQ0xfQ09TTAorX0dMX1dBUk5fT05fVVNFIChjb3NsLCAiY29zbCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgY29zbCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmICExCisjICB1bmRlZiBjb3NoZgorX0dMX0ZVTkNERUNMX1NZUyAoY29zaGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoY29zaGYsIGZsb2F0LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAoY29zaGYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBjb3NoZgorIyBpZiBIQVZFX1JBV19ERUNMX0NPU0hGCitfR0xfV0FSTl9PTl9VU0UgKGNvc2hmLCAiY29zaGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGNvc2hmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgITEKKyMgIHVuZGVmIGV4cGYKK19HTF9GVU5DREVDTF9TWVMgKGV4cGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZXhwZiwgZmxvYXQsIChmbG9hdCB4KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChleHBmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZXhwZgorIyBpZiBIQVZFX1JBV19ERUNMX0VYUEYKK19HTF9XQVJOX09OX1VTRSAoZXhwZiwgImV4cGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGV4cGYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgITEgfHwgITEKKyMgIHVuZGVmIGV4cGwKK19HTF9GVU5DREVDTF9TWVMgKGV4cGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZXhwbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChleHBsKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZXhwbAorIyBpZiBIQVZFX1JBV19ERUNMX0VYUEwKK19HTF9XQVJOX09OX1VTRSAoZXhwbCwgImV4cGwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGV4cGwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoZXhwMmYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZXhwMmYsIGZsb2F0LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAoZXhwMmYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBleHAyZgorIyBpZiBIQVZFX1JBV19ERUNMX0VYUDJGCitfR0xfV0FSTl9PTl9VU0UgKGV4cDJmLCAiZXhwMmYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGV4cDJmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZXhwMgorIyAgIGRlZmluZSBleHAyIHJwbF9leHAyCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZXhwMiwgZG91YmxlLCAoZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGV4cDIsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChleHAyLCBkb3VibGUsIChkb3VibGUgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGV4cDIsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChleHAyKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZXhwMgorIyBpZiBIQVZFX1JBV19ERUNMX0VYUDIKK19HTF9XQVJOX09OX1VTRSAoZXhwMiwgImV4cDIgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGV4cDIgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBleHAybAorIyAgIGRlZmluZSBleHAybCBycGxfZXhwMmwKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChleHAybCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChleHAybCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVsc2UKKyMgIGlmICExCisjICAgdW5kZWYgZXhwMmwKK19HTF9GVU5DREVDTF9TWVMgKGV4cDJsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChleHAybCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChleHAybCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGV4cDJsCisjIGlmIEhBVkVfUkFXX0RFQ0xfRVhQMkwKK19HTF9XQVJOX09OX1VTRSAoZXhwMmwsICJleHAybCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZXhwMmwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGV4cG0xZgorIyAgIGRlZmluZSBleHBtMWYgcnBsX2V4cG0xZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGV4cG0xZiwgZmxvYXQsIChmbG9hdCB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChleHBtMWYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoZXhwbTFmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChleHBtMWYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZXhwbTFmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZXhwbTFmCisjIGlmIEhBVkVfUkFXX0RFQ0xfRVhQTTFGCitfR0xfV0FSTl9PTl9VU0UgKGV4cG0xZiwgImV4cG0xZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZXhwbTFmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZXhwbTEKKyMgICBkZWZpbmUgZXhwbTEgcnBsX2V4cG0xCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZXhwbTEsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChleHBtMSwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGV4cG0xLCBkb3VibGUsIChkb3VibGUgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGV4cG0xLCBkb3VibGUsIChkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZXhwbTEpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBleHBtMQorIyBpZiBIQVZFX1JBV19ERUNMX0VYUE0xCitfR0xfV0FSTl9PTl9VU0UgKGV4cG0xLCAiZXhwbTEgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGV4cG0xIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmICExCisjICB1bmRlZiBleHBtMWwKK19HTF9GVU5DREVDTF9TWVMgKGV4cG0xbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChleHBtMWwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAoZXhwbTFsKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZXhwbTFsCisjIGlmIEhBVkVfUkFXX0RFQ0xfRVhQTTFMCitfR0xfV0FSTl9PTl9VU0UgKGV4cG0xbCwgImV4cG0xbCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZXhwbTFsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgITEKKyMgIHVuZGVmIGZhYnNmCitfR0xfRlVOQ0RFQ0xfU1lTIChmYWJzZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmYWJzZiwgZmxvYXQsIChmbG9hdCB4KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChmYWJzZik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZhYnNmCisjIGlmIEhBVkVfUkFXX0RFQ0xfRkFCU0YKK19HTF9XQVJOX09OX1VTRSAoZmFic2YsICJmYWJzZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZmFic2YgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmYWJzbAorIyAgIGRlZmluZSBmYWJzbCBycGxfZmFic2wKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmYWJzbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmYWJzbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVsc2UKKyMgIGlmICExCisjICAgdW5kZWYgZmFic2wKK19HTF9GVU5DREVDTF9TWVMgKGZhYnNsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmYWJzbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmYWJzbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZhYnNsCisjIGlmIEhBVkVfUkFXX0RFQ0xfRkFCU0wKK19HTF9XQVJOX09OX1VTRSAoZmFic2wsICJmYWJzbCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZmFic2wgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZsb29yZgorIyAgIGRlZmluZSBmbG9vcmYgcnBsX2Zsb29yZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZsb29yZiwgZmxvYXQsIChmbG9hdCB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmbG9vcmYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbHNlCisjICBpZiAhMQorIyAgIHVuZGVmIGZsb29yZgorX0dMX0ZVTkNERUNMX1NZUyAoZmxvb3JmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmbG9vcmYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZmxvb3JmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZmxvb3JmCisjIGlmIEhBVkVfUkFXX0RFQ0xfRkxPT1JGCitfR0xfV0FSTl9PTl9VU0UgKGZsb29yZiwgImZsb29yZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZmxvb3JmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGZsb29yIHJwbF9mbG9vcgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZsb29yLCBkb3VibGUsIChkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAoZmxvb3IsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZsb29yLCBkb3VibGUsIChkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZmxvb3IpOworI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZmxvb3JsCisjICAgZGVmaW5lIGZsb29ybCBycGxfZmxvb3JsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZmxvb3JsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGZsb29ybCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVsc2UKKyMgIGlmICExCisjICAgdW5kZWYgZmxvb3JsCitfR0xfRlVOQ0RFQ0xfU1lTIChmbG9vcmwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZsb29ybCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmbG9vcmwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmbG9vcmwKKyMgaWYgSEFWRV9SQVdfREVDTF9GTE9PUkwKK19HTF9XQVJOX09OX1VTRSAoZmxvb3JsLCAiZmxvb3JsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmbG9vcmwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZtYWYKKyMgICBkZWZpbmUgZm1hZiBycGxfZm1hZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZtYWYsIGZsb2F0LCAoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikpOworX0dMX0NYWEFMSUFTX1JQTCAoZm1hZiwgZmxvYXQsIChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChmbWFmLCBmbG9hdCwgKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmbWFmLCBmbG9hdCwgKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZtYWYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmbWFmCisjIGlmIEhBVkVfUkFXX0RFQ0xfRk1BRgorX0dMX1dBUk5fT05fVVNFIChmbWFmLCAiZm1hZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZm1hZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZtYQorIyAgIGRlZmluZSBmbWEgcnBsX2ZtYQorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZtYSwgZG91YmxlLCAoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeikpOworX0dMX0NYWEFMSUFTX1JQTCAoZm1hLCBkb3VibGUsIChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6KSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChmbWEsIGRvdWJsZSwgKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHopKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmbWEsIGRvdWJsZSwgKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHopKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZtYSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZtYQorIyBpZiBIQVZFX1JBV19ERUNMX0ZNQQorX0dMX1dBUk5fT05fVVNFIChmbWEsICJmbWEgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZtYSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZtYWwKKyMgICBkZWZpbmUgZm1hbCBycGxfZm1hbAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZtYWwsIGxvbmcgZG91YmxlLAorICAgICAgICAgICAgICAgICAgKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHksIGxvbmcgZG91YmxlIHopKTsKK19HTF9DWFhBTElBU19SUEwgKGZtYWwsIGxvbmcgZG91YmxlLAorICAgICAgICAgICAgICAgICAgKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHksIGxvbmcgZG91YmxlIHopKTsKKyMgZWxzZQorIyAgaWYgITEKKyMgICB1bmRlZiBmbWFsCitfR0xfRlVOQ0RFQ0xfU1lTIChmbWFsLCBsb25nIGRvdWJsZSwKKyAgICAgICAgICAgICAgICAgIChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5LCBsb25nIGRvdWJsZSB6KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZm1hbCwgbG9uZyBkb3VibGUsCisgICAgICAgICAgICAgICAgICAobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSwgbG9uZyBkb3VibGUgeikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZm1hbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZtYWwKKyMgaWYgSEFWRV9SQVdfREVDTF9GTUFMCitfR0xfV0FSTl9PTl9VU0UgKGZtYWwsICJmbWFsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmbWFsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmbW9kZgorIyAgIGRlZmluZSBmbW9kZiBycGxfZm1vZGYKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmbW9kZiwgZmxvYXQsIChmbG9hdCB4LCBmbG9hdCB5KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmbW9kZiwgZmxvYXQsIChmbG9hdCB4LCBmbG9hdCB5KSk7CisjIGVsc2UKKyMgIGlmICExCisjICAgdW5kZWYgZm1vZGYKK19HTF9GVU5DREVDTF9TWVMgKGZtb2RmLCBmbG9hdCwgKGZsb2F0IHgsIGZsb2F0IHkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmbW9kZiwgZmxvYXQsIChmbG9hdCB4LCBmbG9hdCB5KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmbW9kZik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZtb2RmCisjIGlmIEhBVkVfUkFXX0RFQ0xfRk1PREYKK19HTF9XQVJOX09OX1VTRSAoZm1vZGYsICJmbW9kZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZm1vZGYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmbW9kCisjICAgZGVmaW5lIGZtb2QgcnBsX2Ztb2QKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmbW9kLCBkb3VibGUsIChkb3VibGUgeCwgZG91YmxlIHkpKTsKK19HTF9DWFhBTElBU19SUEwgKGZtb2QsIGRvdWJsZSwgKGRvdWJsZSB4LCBkb3VibGUgeSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChmbW9kLCBkb3VibGUsIChkb3VibGUgeCwgZG91YmxlIHkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZtb2QpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmbW9kCisjIGlmIEhBVkVfUkFXX0RFQ0xfRk1PRAorX0dMX1dBUk5fT05fVVNFIChmbW9kLCAiZm1vZCBoYXMgcG9ydGFiaWxpdHkgcHJvYmxlbXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmbW9kIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZm1vZGwKKyMgICBkZWZpbmUgZm1vZGwgcnBsX2Ztb2RsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZm1vZGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZm1vZGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkpOworIyBlbHNlCisjICBpZiAhMQorIyAgIHVuZGVmIGZtb2RsCitfR0xfRlVOQ0RFQ0xfU1lTIChmbW9kbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZm1vZGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZm1vZGwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmbW9kbAorIyBpZiBIQVZFX1JBV19ERUNMX0ZNT0RMCitfR0xfV0FSTl9PTl9VU0UgKGZtb2RsLCAiZm1vZGwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZtb2RsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogV3JpdGUgeCBhcworICAgICB4ID0gbWFudGlzc2EgKiAyXmV4cAorICAgd2hlcmUKKyAgICAgSWYgeCBmaW5pdGUgYW5kIG5vbnplcm86IDAuNSA8PSB8bWFudGlzc2F8IDwgMS4wLgorICAgICBJZiB4IGlzIHplcm86IG1hbnRpc3NhID0geCwgZXhwID0gMC4KKyAgICAgSWYgeCBpcyBpbmZpbml0ZSBvciBOYU46IG1hbnRpc3NhID0geCwgZXhwIHVuc3BlY2lmaWVkLgorICAgU3RvcmUgZXhwIGluICpFWFBQVFIgYW5kIHJldHVybiBtYW50aXNzYS4gICovCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZyZXhwZgorIyAgIGRlZmluZSBmcmV4cGYgcnBsX2ZyZXhwZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZyZXhwZiwgZmxvYXQsIChmbG9hdCB4LCBpbnQgKmV4cHB0cikgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKGZyZXhwZiwgZmxvYXQsIChmbG9hdCB4LCBpbnQgKmV4cHB0cikpOworIyBlbHNlCisjICBpZiAhMQorIyAgIHVuZGVmIGZyZXhwZgorX0dMX0ZVTkNERUNMX1NZUyAoZnJleHBmLCBmbG9hdCwgKGZsb2F0IHgsIGludCAqZXhwcHRyKSBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZyZXhwZiwgZmxvYXQsIChmbG9hdCB4LCBpbnQgKmV4cHB0cikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZnJleHBmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZnJleHBmCisjIGlmIEhBVkVfUkFXX0RFQ0xfRlJFWFBGCitfR0xfV0FSTl9PTl9VU0UgKGZyZXhwZiwgImZyZXhwZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZnJleHBmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIFdyaXRlIHggYXMKKyAgICAgeCA9IG1hbnRpc3NhICogMl5leHAKKyAgIHdoZXJlCisgICAgIElmIHggZmluaXRlIGFuZCBub256ZXJvOiAwLjUgPD0gfG1hbnRpc3NhfCA8IDEuMC4KKyAgICAgSWYgeCBpcyB6ZXJvOiBtYW50aXNzYSA9IHgsIGV4cCA9IDAuCisgICAgIElmIHggaXMgaW5maW5pdGUgb3IgTmFOOiBtYW50aXNzYSA9IHgsIGV4cCB1bnNwZWNpZmllZC4KKyAgIFN0b3JlIGV4cCBpbiAqRVhQUFRSIGFuZCByZXR1cm4gbWFudGlzc2EuICAqLworI2lmIDEKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgZnJleHAgcnBsX2ZyZXhwCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZnJleHAsIGRvdWJsZSwgKGRvdWJsZSB4LCBpbnQgKmV4cHB0cikgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKGZyZXhwLCBkb3VibGUsIChkb3VibGUgeCwgaW50ICpleHBwdHIpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoZnJleHAsIGRvdWJsZSwgKGRvdWJsZSB4LCBpbnQgKmV4cHB0cikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZnJleHApOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmcmV4cAorLyogQXNzdW1lIGZyZXhwIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKGZyZXhwLCAiZnJleHAgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZyZXhwIGZvciBwb3J0YWJpbGl0eSIpOworI2VuZGlmCisKKy8qIFdyaXRlIHggYXMKKyAgICAgeCA9IG1hbnRpc3NhICogMl5leHAKKyAgIHdoZXJlCisgICAgIElmIHggZmluaXRlIGFuZCBub256ZXJvOiAwLjUgPD0gfG1hbnRpc3NhfCA8IDEuMC4KKyAgICAgSWYgeCBpcyB6ZXJvOiBtYW50aXNzYSA9IHgsIGV4cCA9IDAuCisgICAgIElmIHggaXMgaW5maW5pdGUgb3IgTmFOOiBtYW50aXNzYSA9IHgsIGV4cCB1bnNwZWNpZmllZC4KKyAgIFN0b3JlIGV4cCBpbiAqRVhQUFRSIGFuZCByZXR1cm4gbWFudGlzc2EuICAqLworI2lmIDEgJiYgMAorIyBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgdW5kZWYgZnJleHBsCisjICBkZWZpbmUgZnJleHBsIHJwbF9mcmV4cGwKKyMgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZyZXhwbCwgbG9uZyBkb3VibGUsCisgICAgICAgICAgICAgICAgICAobG9uZyBkb3VibGUgeCwgaW50ICpleHBwdHIpIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmcmV4cGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCwgaW50ICpleHBwdHIpKTsKKyNlbHNlCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChmcmV4cGwsIGxvbmcgZG91YmxlLAorICAgICAgICAgICAgICAgICAgKGxvbmcgZG91YmxlIHgsIGludCAqZXhwcHRyKSBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyBlbmRpZgorIyBpZiAxCitfR0xfQ1hYQUxJQVNfU1lTIChmcmV4cGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCwgaW50ICpleHBwdHIpKTsKKyMgZW5kaWYKKyNlbmRpZgorI2lmIDEgJiYgISgwICYmICExKQorX0dMX0NYWEFMSUFTV0FSTiAoZnJleHBsKTsKKyNlbmRpZgorI2lmICExICYmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZnJleHBsCisjIGlmIEhBVkVfUkFXX0RFQ0xfRlJFWFBMCitfR0xfV0FSTl9PTl9VU0UgKGZyZXhwbCwgImZyZXhwbCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZnJleHBsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogUmV0dXJuIHNxcnQoeF4yK3leMikuICAqLworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBoeXBvdGYKKyMgICBkZWZpbmUgaHlwb3RmIHJwbF9oeXBvdGYKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChoeXBvdGYsIGZsb2F0LCAoZmxvYXQgeCwgZmxvYXQgeSkpOworX0dMX0NYWEFMSUFTX1JQTCAoaHlwb3RmLCBmbG9hdCwgKGZsb2F0IHgsIGZsb2F0IHkpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGh5cG90ZiwgZmxvYXQsIChmbG9hdCB4LCBmbG9hdCB5KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoaHlwb3RmLCBmbG9hdCwgKGZsb2F0IHgsIGZsb2F0IHkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGh5cG90Zik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGh5cG90ZgorIyBpZiBIQVZFX1JBV19ERUNMX0hZUE9URgorX0dMX1dBUk5fT05fVVNFIChoeXBvdGYsICJoeXBvdGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGh5cG90ZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBSZXR1cm4gc3FydCh4XjIreV4yKS4gICovCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGh5cG90CisjICAgZGVmaW5lIGh5cG90IHJwbF9oeXBvdAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGh5cG90LCBkb3VibGUsIChkb3VibGUgeCwgZG91YmxlIHkpKTsKK19HTF9DWFhBTElBU19SUEwgKGh5cG90LCBkb3VibGUsIChkb3VibGUgeCwgZG91YmxlIHkpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoaHlwb3QsIGRvdWJsZSwgKGRvdWJsZSB4LCBkb3VibGUgeSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoaHlwb3QpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBoeXBvdAorIyBpZiBIQVZFX1JBV19ERUNMX0hZUE9UCitfR0xfV0FSTl9PTl9VU0UgKGh5cG90ZiwgImh5cG90IGhhcyBwb3J0YWJpbGl0eSBwcm9ibGVtcyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGh5cG90IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIFJldHVybiBzcXJ0KHheMit5XjIpLiAgKi8KKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgaHlwb3RsCisjICAgZGVmaW5lIGh5cG90bCBycGxfaHlwb3RsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoaHlwb3RsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHkpKTsKK19HTF9DWFhBTElBU19SUEwgKGh5cG90bCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChoeXBvdGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGh5cG90bCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChoeXBvdGwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBoeXBvdGwKKyMgaWYgSEFWRV9SQVdfREVDTF9IWVBPVEwKK19HTF9XQVJOX09OX1VTRSAoaHlwb3RsLCAiaHlwb3RsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBoeXBvdGwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGlsb2diZgorIyAgIGRlZmluZSBpbG9nYmYgcnBsX2lsb2diZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGlsb2diZiwgaW50LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAoaWxvZ2JmLCBpbnQsIChmbG9hdCB4KSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChpbG9nYmYsIGludCwgKGZsb2F0IHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChpbG9nYmYsIGludCwgKGZsb2F0IHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGlsb2diZik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGlsb2diZgorIyBpZiBIQVZFX1JBV19ERUNMX0lMT0dCRgorX0dMX1dBUk5fT05fVVNFIChpbG9nYmYsICJpbG9nYmYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGlsb2diZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGlsb2diCisjICAgZGVmaW5lIGlsb2diIHJwbF9pbG9nYgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGlsb2diLCBpbnQsIChkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAoaWxvZ2IsIGludCwgKGRvdWJsZSB4KSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChpbG9nYiwgaW50LCAoZG91YmxlIHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChpbG9nYiwgaW50LCAoZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGlsb2diKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgaWxvZ2IKKyMgaWYgSEFWRV9SQVdfREVDTF9JTE9HQgorX0dMX1dBUk5fT05fVVNFIChpbG9nYiwgImlsb2diIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBpbG9nYiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoaWxvZ2JsLCBpbnQsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChpbG9nYmwsIGludCwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKGlsb2dibCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGlsb2dibAorIyBpZiBIQVZFX1JBV19ERUNMX0lMT0dCTAorX0dMX1dBUk5fT05fVVNFIChpbG9nYmwsICJpbG9nYmwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGlsb2dibCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIFJldHVybiB4ICogMl5leHAuICAqLworI2lmIDAKKyMgaWYgITEKKyMgIHVuZGVmIGxkZXhwZgorX0dMX0ZVTkNERUNMX1NZUyAobGRleHBmLCBmbG9hdCwgKGZsb2F0IHgsIGludCBleHApKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGxkZXhwZiwgZmxvYXQsIChmbG9hdCB4LCBpbnQgZXhwKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChsZGV4cGYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBsZGV4cGYKKyMgaWYgSEFWRV9SQVdfREVDTF9MREVYUEYKK19HTF9XQVJOX09OX1VTRSAobGRleHBmLCAibGRleHBmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBsZGV4cGYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworLyogUmV0dXJuIHggKiAyXmV4cC4gICovCisjaWYgMSAmJiAwCisjIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICB1bmRlZiBsZGV4cGwKKyMgIGRlZmluZSBsZGV4cGwgcnBsX2xkZXhwbAorIyBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobGRleHBsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgsIGludCBleHApKTsKK19HTF9DWFhBTElBU19SUEwgKGxkZXhwbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4LCBpbnQgZXhwKSk7CisjZWxzZQorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAobGRleHBsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgsIGludCBleHApKTsKKyMgZW5kaWYKKyMgaWYgMQorX0dMX0NYWEFMSUFTX1NZUyAobGRleHBsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgsIGludCBleHApKTsKKyMgZW5kaWYKKyNlbmRpZgorI2lmIDEKK19HTF9DWFhBTElBU1dBUk4gKGxkZXhwbCk7CisjZW5kaWYKKyNpZiAhMSAmJiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGxkZXhwbAorIyBpZiBIQVZFX1JBV19ERUNMX0xERVhQTAorX0dMX1dBUk5fT05fVVNFIChsZGV4cGwsICJsZGV4cGwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGxkZXhwbCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbG9nZgorIyAgIGRlZmluZSBsb2dmIHJwbF9sb2dmCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobG9nZiwgZmxvYXQsIChmbG9hdCB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChsb2dmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZWxzZQorIyAgaWYgITEKKyMgICB1bmRlZiBsb2dmCitfR0xfRlVOQ0RFQ0xfU1lTIChsb2dmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChsb2dmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGxvZ2YpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBsb2dmCisjIGlmIEhBVkVfUkFXX0RFQ0xfTE9HRgorX0dMX1dBUk5fT05fVVNFIChsb2dmLCAibG9nZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbG9nZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGxvZworIyAgIGRlZmluZSBsb2cgcnBsX2xvZworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGxvZywgZG91YmxlLCAoZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGxvZywgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAobG9nLCBkb3VibGUsIChkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobG9nKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbG9nCisjIGlmIEhBVkVfUkFXX0RFQ0xfTE9HCitfR0xfV0FSTl9PTl9VU0UgKGxvZywgImxvZyBoYXMgcG9ydGFiaWxpdHkgcHJvYmxlbXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBsb2cgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBsb2dsCisjICAgZGVmaW5lIGxvZ2wgcnBsX2xvZ2wKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChsb2dsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGxvZ2wsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbHNlCisjICBpZiAhMSB8fCAhMQorIyAgIHVuZGVmIGxvZ2wKK19HTF9GVU5DREVDTF9TWVMgKGxvZ2wsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGxvZ2wsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobG9nbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGxvZ2wKKyMgaWYgSEFWRV9SQVdfREVDTF9MT0dMCitfR0xfV0FSTl9PTl9VU0UgKGxvZ2wsICJsb2dsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBsb2dsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBsb2cxMGYKKyMgICBkZWZpbmUgbG9nMTBmIHJwbF9sb2cxMGYKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChsb2cxMGYsIGZsb2F0LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAobG9nMTBmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZWxzZQorIyAgaWYgITEKKyMgICB1bmRlZiBsb2cxMGYKK19HTF9GVU5DREVDTF9TWVMgKGxvZzEwZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobG9nMTBmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGxvZzEwZik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGxvZzEwZgorIyBpZiBIQVZFX1JBV19ERUNMX0xPRzEwRgorX0dMX1dBUk5fT05fVVNFIChsb2cxMGYsICJsb2cxMGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGxvZzEwZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGxvZzEwCisjICAgZGVmaW5lIGxvZzEwIHJwbF9sb2cxMAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGxvZzEwLCBkb3VibGUsIChkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAobG9nMTAsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGxvZzEwLCBkb3VibGUsIChkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobG9nMTApOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBsb2cxMAorIyBpZiBIQVZFX1JBV19ERUNMX0xPRzEwCitfR0xfV0FSTl9PTl9VU0UgKGxvZzEwLCAibG9nMTAgaGFzIHBvcnRhYmlsaXR5IHByb2JsZW1zIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbG9nMTAgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBsb2cxMGwKKyMgICBkZWZpbmUgbG9nMTBsIHJwbF9sb2cxMGwKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChsb2cxMGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAobG9nMTBsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZWxzZQorIyAgaWYgITEgfHwgITEKKyMgICB1bmRlZiBsb2cxMGwKK19HTF9GVU5DREVDTF9TWVMgKGxvZzEwbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobG9nMTBsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGxvZzEwbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGxvZzEwbAorIyBpZiBIQVZFX1JBV19ERUNMX0xPRzEwTAorX0dMX1dBUk5fT05fVVNFIChsb2cxMGwsICJsb2cxMGwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGxvZzEwbCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbG9nMXBmCisjICAgZGVmaW5lIGxvZzFwZiBycGxfbG9nMXBmCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobG9nMXBmLCBmbG9hdCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGxvZzFwZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChsb2cxcGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGxvZzFwZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChsb2cxcGYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBsb2cxcGYKKyMgaWYgSEFWRV9SQVdfREVDTF9MT0cxUEYKK19HTF9XQVJOX09OX1VTRSAobG9nMXBmLCAibG9nMXBmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBsb2cxcGYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBsb2cxcAorIyAgIGRlZmluZSBsb2cxcCBycGxfbG9nMXAKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChsb2cxcCwgZG91YmxlLCAoZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGxvZzFwLCBkb3VibGUsIChkb3VibGUgeCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAobG9nMXAsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobG9nMXAsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChsb2cxcCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGxvZzFwCisjIGlmIEhBVkVfUkFXX0RFQ0xfTE9HMVAKK19HTF9XQVJOX09OX1VTRSAobG9nMXAsICJsb2cxcCBoYXMgcG9ydGFiaWxpdHkgcHJvYmxlbXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBsb2cxcCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGxvZzFwbAorIyAgIGRlZmluZSBsb2cxcGwgcnBsX2xvZzFwbAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGxvZzFwbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChsb2cxcGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAobG9nMXBsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChsb2cxcGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobG9nMXBsKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbG9nMXBsCisjIGlmIEhBVkVfUkFXX0RFQ0xfTE9HMVBMCitfR0xfV0FSTl9PTl9VU0UgKGxvZzFwbCwgImxvZzFwbCBoYXMgcG9ydGFiaWxpdHkgcHJvYmxlbXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBsb2cxcGwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGxvZzJmCisjICAgZGVmaW5lIGxvZzJmIHJwbF9sb2cyZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGxvZzJmLCBmbG9hdCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGxvZzJmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZWxzZQorIyAgaWYgITEKKyMgICB1bmRlZiBsb2cyZgorX0dMX0ZVTkNERUNMX1NZUyAobG9nMmYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGxvZzJmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGxvZzJmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbG9nMmYKKyMgaWYgSEFWRV9SQVdfREVDTF9MT0cyRgorX0dMX1dBUk5fT05fVVNFIChsb2cyZiwgImxvZzJmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBsb2cyZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGxvZzIKKyMgICBkZWZpbmUgbG9nMiBycGxfbG9nMgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGxvZzIsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChsb2cyLCBkb3VibGUsIChkb3VibGUgeCkpOworIyBlbHNlCisjICBpZiAhMQorIyAgIHVuZGVmIGxvZzIKK19HTF9GVU5DREVDTF9TWVMgKGxvZzIsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobG9nMiwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGxvZzIpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBsb2cyCisjIGlmIEhBVkVfUkFXX0RFQ0xfTE9HMgorX0dMX1dBUk5fT05fVVNFIChsb2cyLCAibG9nMiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbG9nMiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGxvZzJsCisjICAgZGVmaW5lIGxvZzJsIHJwbF9sb2cybAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGxvZzJsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGxvZzJsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGxvZzJsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChsb2cybCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChsb2cybCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGxvZzJsCisjIGlmIEhBVkVfUkFXX0RFQ0xfTE9HMkwKK19HTF9XQVJOX09OX1VTRSAobG9nMmwsICJsb2cybCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbG9nMmwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGxvZ2JmCisjICAgZGVmaW5lIGxvZ2JmIHJwbF9sb2diZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGxvZ2JmLCBmbG9hdCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGxvZ2JmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGxvZ2JmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChsb2diZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChsb2diZik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGxvZ2JmCisjIGlmIEhBVkVfUkFXX0RFQ0xfTE9HQkYKK19HTF9XQVJOX09OX1VTRSAobG9nYmYsICJsb2diZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbG9nYmYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBsb2diCisjICAgZGVmaW5lIGxvZ2IgcnBsX2xvZ2IKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChsb2diLCBkb3VibGUsIChkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAobG9nYiwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGxvZ2IsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobG9nYiwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGxvZ2IpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBsb2diCisjIGlmIEhBVkVfUkFXX0RFQ0xfTE9HQgorX0dMX1dBUk5fT05fVVNFIChsb2diLCAibG9nYiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbG9nYiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGxvZ2JsCisjICAgZGVmaW5lIGxvZ2JsIHJwbF9sb2dibAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGxvZ2JsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGxvZ2JsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGxvZ2JsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChsb2dibCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChsb2dibCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGxvZ2JsCisjIGlmIEhBVkVfUkFXX0RFQ0xfTE9HQkwKK19HTF9XQVJOX09OX1VTRSAobG9nYmwsICJsb2dibCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbG9nYmwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIG1vZGZmCisjICAgZGVmaW5lIG1vZGZmIHJwbF9tb2RmZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG1vZGZmLCBmbG9hdCwgKGZsb2F0IHgsIGZsb2F0ICppcHRyKSBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAobW9kZmYsIGZsb2F0LCAoZmxvYXQgeCwgZmxvYXQgKmlwdHIpKTsKKyMgZWxzZQorIyAgaWYgITEKKyMgICB1bmRlZiBtb2RmZgorX0dMX0ZVTkNERUNMX1NZUyAobW9kZmYsIGZsb2F0LCAoZmxvYXQgeCwgZmxvYXQgKmlwdHIpIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobW9kZmYsIGZsb2F0LCAoZmxvYXQgeCwgZmxvYXQgKmlwdHIpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG1vZGZmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbW9kZmYKKyMgaWYgSEFWRV9SQVdfREVDTF9NT0RGRgorX0dMX1dBUk5fT05fVVNFIChtb2RmZiwgIm1vZGZmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBtb2RmZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIG1vZGYKKyMgICBkZWZpbmUgbW9kZiBycGxfbW9kZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG1vZGYsIGRvdWJsZSwgKGRvdWJsZSB4LCBkb3VibGUgKmlwdHIpIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChtb2RmLCBkb3VibGUsIChkb3VibGUgeCwgZG91YmxlICppcHRyKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKG1vZGYsIGRvdWJsZSwgKGRvdWJsZSB4LCBkb3VibGUgKmlwdHIpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG1vZGYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBtb2RmCisjIGlmIEhBVkVfUkFXX0RFQ0xfTU9ERgorX0dMX1dBUk5fT05fVVNFIChtb2RmLCAibW9kZiBoYXMgcG9ydGFiaWxpdHkgcHJvYmxlbXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBtb2RmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbW9kZmwKKyMgICBkZWZpbmUgbW9kZmwgcnBsX21vZGZsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobW9kZmwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgKmlwdHIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChtb2RmbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSAqaXB0cikpOworIyBlbHNlCisjICBpZiAhMQorIyAgIHVuZGVmIG1vZGZsCitfR0xfRlVOQ0RFQ0xfU1lTIChtb2RmbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSAqaXB0cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChtb2RmbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSAqaXB0cikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobW9kZmwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBtb2RmbAorIyBpZiBIQVZFX1JBV19ERUNMX01PREZMCitfR0xfV0FSTl9PTl9VU0UgKG1vZGZsLCAibW9kZmwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG1vZGZsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgITEKKyMgIHVuZGVmIHBvd2YKK19HTF9GVU5DREVDTF9TWVMgKHBvd2YsIGZsb2F0LCAoZmxvYXQgeCwgZmxvYXQgeSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocG93ZiwgZmxvYXQsIChmbG9hdCB4LCBmbG9hdCB5KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChwb3dmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcG93ZgorIyBpZiBIQVZFX1JBV19ERUNMX1BPV0YKK19HTF9XQVJOX09OX1VTRSAocG93ZiwgInBvd2YgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvd2YgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHJlbWFpbmRlcmYKKyMgICBkZWZpbmUgcmVtYWluZGVyZiBycGxfcmVtYWluZGVyZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHJlbWFpbmRlcmYsIGZsb2F0LCAoZmxvYXQgeCwgZmxvYXQgeSkpOworX0dMX0NYWEFMSUFTX1JQTCAocmVtYWluZGVyZiwgZmxvYXQsIChmbG9hdCB4LCBmbG9hdCB5KSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChyZW1haW5kZXJmLCBmbG9hdCwgKGZsb2F0IHgsIGZsb2F0IHkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChyZW1haW5kZXJmLCBmbG9hdCwgKGZsb2F0IHgsIGZsb2F0IHkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHJlbWFpbmRlcmYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiByZW1haW5kZXJmCisjIGlmIEhBVkVfUkFXX0RFQ0xfUkVNQUlOREVSRgorX0dMX1dBUk5fT05fVVNFIChyZW1haW5kZXJmLCAicmVtYWluZGVyZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmVtYWluZGVyZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHJlbWFpbmRlcgorIyAgIGRlZmluZSByZW1haW5kZXIgcnBsX3JlbWFpbmRlcgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHJlbWFpbmRlciwgZG91YmxlLCAoZG91YmxlIHgsIGRvdWJsZSB5KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChyZW1haW5kZXIsIGRvdWJsZSwgKGRvdWJsZSB4LCBkb3VibGUgeSkpOworIyBlbHNlCisjICBpZiAhMSB8fCAhMQorX0dMX0ZVTkNERUNMX1NZUyAocmVtYWluZGVyLCBkb3VibGUsIChkb3VibGUgeCwgZG91YmxlIHkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChyZW1haW5kZXIsIGRvdWJsZSwgKGRvdWJsZSB4LCBkb3VibGUgeSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocmVtYWluZGVyKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcmVtYWluZGVyCisjIGlmIEhBVkVfUkFXX0RFQ0xfUkVNQUlOREVSCitfR0xfV0FSTl9PTl9VU0UgKHJlbWFpbmRlciwgInJlbWFpbmRlciBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmVtYWluZGVyIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcmVtYWluZGVybAorIyAgIGRlZmluZSByZW1haW5kZXJsIHJwbF9yZW1haW5kZXJsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocmVtYWluZGVybCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChyZW1haW5kZXJsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHkpKTsKKyMgZWxzZQorIyAgaWYgITEKKyMgICB1bmRlZiByZW1haW5kZXJsCitfR0xfRlVOQ0RFQ0xfU1lTIChyZW1haW5kZXJsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChyZW1haW5kZXJsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHJlbWFpbmRlcmwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiByZW1haW5kZXJsCisjIGlmIEhBVkVfUkFXX0RFQ0xfUkVNQUlOREVSTAorX0dMX1dBUk5fT05fVVNFIChyZW1haW5kZXJsLCAicmVtYWluZGVybCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmVtYWluZGVybCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChyaW50ZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChyaW50ZiwgZmxvYXQsIChmbG9hdCB4KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChyaW50Zik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHJpbnRmCisjIGlmIEhBVkVfUkFXX0RFQ0xfUklOVEYKK19HTF9XQVJOX09OX1VTRSAocmludGYsICJyaW50ZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmludGYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHJpbnQsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChyaW50LCBkb3VibGUsIChkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAocmludCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHJpbnQKKyMgaWYgSEFWRV9SQVdfREVDTF9SSU5UCitfR0xfV0FSTl9PTl9VU0UgKHJpbnQsICJyaW50IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSByaW50IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChyaW50bCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChyaW50bCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChyaW50bCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHJpbnRsCisjIGlmIEhBVkVfUkFXX0RFQ0xfUklOVEwKK19HTF9XQVJOX09OX1VTRSAocmludGwsICJyaW50bCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmludGwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHJvdW5kZgorIyAgIGRlZmluZSByb3VuZGYgcnBsX3JvdW5kZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHJvdW5kZiwgZmxvYXQsIChmbG9hdCB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChyb3VuZGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocm91bmRmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChyb3VuZGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocm91bmRmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcm91bmRmCisjIGlmIEhBVkVfUkFXX0RFQ0xfUk9VTkRGCitfR0xfV0FSTl9PTl9VU0UgKHJvdW5kZiwgInJvdW5kZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcm91bmRmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcm91bmQKKyMgICBkZWZpbmUgcm91bmQgcnBsX3JvdW5kCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocm91bmQsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChyb3VuZCwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHJvdW5kLCBkb3VibGUsIChkb3VibGUgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHJvdW5kLCBkb3VibGUsIChkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocm91bmQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiByb3VuZAorIyBpZiBIQVZFX1JBV19ERUNMX1JPVU5ECitfR0xfV0FSTl9PTl9VU0UgKHJvdW5kLCAicm91bmQgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHJvdW5kIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcm91bmRsCisjICAgZGVmaW5lIHJvdW5kbCBycGxfcm91bmRsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocm91bmRsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKHJvdW5kbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVsc2UKKyMgIGlmICExCisjICAgdW5kZWYgcm91bmRsCitfR0xfRlVOQ0RFQ0xfU1lTIChyb3VuZGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHJvdW5kbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChyb3VuZGwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiByb3VuZGwKKyMgaWYgSEFWRV9SQVdfREVDTF9ST1VOREwKK19HTF9XQVJOX09OX1VTRSAocm91bmRsLCAicm91bmRsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSByb3VuZGwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAhMQorIyAgdW5kZWYgc2luZgorX0dMX0ZVTkNERUNMX1NZUyAoc2luZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzaW5mLCBmbG9hdCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKHNpbmYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzaW5mCisjIGlmIEhBVkVfUkFXX0RFQ0xfU0lORgorX0dMX1dBUk5fT05fVVNFIChzaW5mLCAic2luZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc2luZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAhMSB8fCAhMQorIyAgdW5kZWYgc2lubAorX0dMX0ZVTkNERUNMX1NZUyAoc2lubCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzaW5sLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKHNpbmwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzaW5sCisjIGlmIEhBVkVfUkFXX0RFQ0xfU0lOTAorX0dMX1dBUk5fT05fVVNFIChzaW5sLCAic2lubCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc2lubCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmICExCisjICB1bmRlZiBzaW5oZgorX0dMX0ZVTkNERUNMX1NZUyAoc2luaGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc2luaGYsIGZsb2F0LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAoc2luaGYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzaW5oZgorIyBpZiBIQVZFX1JBV19ERUNMX1NJTkhGCitfR0xfV0FSTl9PTl9VU0UgKHNpbmhmLCAic2luaGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHNpbmhmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgITEKKyMgIHVuZGVmIHNxcnRmCitfR0xfRlVOQ0RFQ0xfU1lTIChzcXJ0ZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzcXJ0ZiwgZmxvYXQsIChmbG9hdCB4KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChzcXJ0Zik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHNxcnRmCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1FSVEYKK19HTF9XQVJOX09OX1VTRSAoc3FydGYsICJzcXJ0ZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3FydGYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBzcXJ0bAorIyAgIGRlZmluZSBzcXJ0bCBycGxfc3FydGwKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChzcXJ0bCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzcXJ0bCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVsc2UKKyMgIGlmICExIHx8ICExCisjICAgdW5kZWYgc3FydGwKK19HTF9GVU5DREVDTF9TWVMgKHNxcnRsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzcXJ0bCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzcXJ0bCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHNxcnRsCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1FSVEwKK19HTF9XQVJOX09OX1VTRSAoc3FydGwsICJzcXJ0bCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3FydGwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAhMQorIyAgdW5kZWYgdGFuZgorX0dMX0ZVTkNERUNMX1NZUyAodGFuZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh0YW5mLCBmbG9hdCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKHRhbmYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB0YW5mCisjIGlmIEhBVkVfUkFXX0RFQ0xfVEFORgorX0dMX1dBUk5fT05fVVNFICh0YW5mLCAidGFuZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgdGFuZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAhMSB8fCAhMQorIyAgdW5kZWYgdGFubAorX0dMX0ZVTkNERUNMX1NZUyAodGFubCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh0YW5sLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKHRhbmwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB0YW5sCisjIGlmIEhBVkVfUkFXX0RFQ0xfVEFOTAorX0dMX1dBUk5fT05fVVNFICh0YW5sLCAidGFubCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgdGFubCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmICExCisjICB1bmRlZiB0YW5oZgorX0dMX0ZVTkNERUNMX1NZUyAodGFuaGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAodGFuaGYsIGZsb2F0LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAodGFuaGYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB0YW5oZgorIyBpZiBIQVZFX1JBV19ERUNMX1RBTkhGCitfR0xfV0FSTl9PTl9VU0UgKHRhbmhmLCAidGFuaGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHRhbmhmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgdHJ1bmNmIHJwbF90cnVuY2YKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh0cnVuY2YsIGZsb2F0LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAodHJ1bmNmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHRydW5jZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAodHJ1bmNmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHRydW5jZik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHRydW5jZgorIyBpZiBIQVZFX1JBV19ERUNMX1RSVU5DRgorX0dMX1dBUk5fT05fVVNFICh0cnVuY2YsICJ0cnVuY2YgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHRydW5jZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSB0cnVuYyBycGxfdHJ1bmMKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh0cnVuYywgZG91YmxlLCAoZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKHRydW5jLCBkb3VibGUsIChkb3VibGUgeCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAodHJ1bmMsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAodHJ1bmMsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOICh0cnVuYyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHRydW5jCisjIGlmIEhBVkVfUkFXX0RFQ0xfVFJVTkMKK19HTF9XQVJOX09OX1VTRSAodHJ1bmMsICJ0cnVuYyBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgdHJ1bmMgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiB0cnVuY2wKKyMgICBkZWZpbmUgdHJ1bmNsIHJwbF90cnVuY2wKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh0cnVuY2wsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAodHJ1bmNsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHRydW5jbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAodHJ1bmNsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHRydW5jbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHRydW5jbAorIyBpZiBIQVZFX1JBV19ERUNMX1RSVU5DTAorX0dMX1dBUk5fT05fVVNFICh0cnVuY2wsICJ0cnVuY2wgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHRydW5jbCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIERlZmluaXRpb25zIG9mIGZ1bmN0aW9uLWxpa2UgbWFjcm9zIGNvbWUgaGVyZSwgYWZ0ZXIgdGhlIGZ1bmN0aW9uCisgICBkZWNsYXJhdGlvbnMuICAqLworCisKKyNpZiAwCisjIGlmIDAKK19HTF9FWFRFUk5fQyBpbnQgZ2xfaXNmaW5pdGVmIChmbG9hdCB4KTsKK19HTF9FWFRFUk5fQyBpbnQgZ2xfaXNmaW5pdGVkIChkb3VibGUgeCk7CitfR0xfRVhURVJOX0MgaW50IGdsX2lzZmluaXRlbCAobG9uZyBkb3VibGUgeCk7CisjICB1bmRlZiBpc2Zpbml0ZQorIyAgZGVmaW5lIGlzZmluaXRlKHgpIFwKKyAgIChzaXplb2YgKHgpID09IHNpemVvZiAobG9uZyBkb3VibGUpID8gZ2xfaXNmaW5pdGVsICh4KSA6IFwKKyAgICBzaXplb2YgKHgpID09IHNpemVvZiAoZG91YmxlKSA/IGdsX2lzZmluaXRlZCAoeCkgOiBcCisgICAgZ2xfaXNmaW5pdGVmICh4KSkKKyMgZW5kaWYKKyMgaWZkZWYgX19jcGx1c3BsdXMKKyMgIGlmZGVmIGlzZmluaXRlCitfR0xfTUFUSF9DWFhfUkVBTF9GTE9BVElOR19ERUNMXzEgKGlzZmluaXRlKQorIyAgIHVuZGVmIGlzZmluaXRlCitfR0xfTUFUSF9DWFhfUkVBTF9GTE9BVElOR19ERUNMXzIgKGlzZmluaXRlKQorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgaWYgZGVmaW5lZCBpc2Zpbml0ZQorX0dMX1dBUk5fUkVBTF9GTE9BVElOR19ERUNMIChpc2Zpbml0ZSk7CisjICB1bmRlZiBpc2Zpbml0ZQorIyAgZGVmaW5lIGlzZmluaXRlKHgpIF9HTF9XQVJOX1JFQUxfRkxPQVRJTkdfSU1QTCAoaXNmaW5pdGUsIHgpCisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCitfR0xfRVhURVJOX0MgaW50IGdsX2lzaW5mZiAoZmxvYXQgeCk7CitfR0xfRVhURVJOX0MgaW50IGdsX2lzaW5mZCAoZG91YmxlIHgpOworX0dMX0VYVEVSTl9DIGludCBnbF9pc2luZmwgKGxvbmcgZG91YmxlIHgpOworIyAgdW5kZWYgaXNpbmYKKyMgIGRlZmluZSBpc2luZih4KSBcCisgICAoc2l6ZW9mICh4KSA9PSBzaXplb2YgKGxvbmcgZG91YmxlKSA/IGdsX2lzaW5mbCAoeCkgOiBcCisgICAgc2l6ZW9mICh4KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBnbF9pc2luZmQgKHgpIDogXAorICAgIGdsX2lzaW5mZiAoeCkpCisjIGVuZGlmCisjIGlmZGVmIF9fY3BsdXNwbHVzCisjICBpZmRlZiBpc2luZgorX0dMX01BVEhfQ1hYX1JFQUxfRkxPQVRJTkdfREVDTF8xIChpc2luZikKKyMgICB1bmRlZiBpc2luZgorX0dMX01BVEhfQ1hYX1JFQUxfRkxPQVRJTkdfREVDTF8yIChpc2luZikKKyMgIGVuZGlmCisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIGlmIGRlZmluZWQgaXNpbmYKK19HTF9XQVJOX1JFQUxfRkxPQVRJTkdfREVDTCAoaXNpbmYpOworIyAgdW5kZWYgaXNpbmYKKyMgIGRlZmluZSBpc2luZih4KSBfR0xfV0FSTl9SRUFMX0ZMT0FUSU5HX0lNUEwgKGlzaW5mLCB4KQorIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDEKKy8qIFRlc3QgZm9yIE5hTiBmb3IgJ2Zsb2F0JyBudW1iZXJzLiAgKi8KKyMgaWYgMQorLyogVGhlIG9yaWdpbmFsIDxtYXRoLmg+IGluY2x1ZGVkIGFib3ZlIHByb3ZpZGVzIGEgZGVjbGFyYXRpb24gb2YgaXNuYW4gbWFjcm8KKyAgIG9yIChvbGRlcikgaXNuYW5mIGZ1bmN0aW9uLiAgKi8KKyMgIGlmIF9fR05VQ19fID49IDQKKyAgICAvKiBHQ0MgNC4wIGFuZCBuZXdlciBwcm92aWRlcyB0aHJlZSBidWlsdC1pbnMgZm9yIGlzbmFuLiAgKi8KKyMgICB1bmRlZiBpc25hbmYKKyMgICBkZWZpbmUgaXNuYW5mKHgpIF9fYnVpbHRpbl9pc25hbmYgKChmbG9hdCkoeCkpCisjICBlbGlmIGRlZmluZWQgaXNuYW4KKyMgICB1bmRlZiBpc25hbmYKKyMgICBkZWZpbmUgaXNuYW5mKHgpIGlzbmFuICgoZmxvYXQpKHgpKQorIyAgZW5kaWYKKyMgZWxzZQorLyogVGVzdCB3aGV0aGVyIFggaXMgYSBOYU4uICAqLworIyAgdW5kZWYgaXNuYW5mCisjICBkZWZpbmUgaXNuYW5mIHJwbF9pc25hbmYKK19HTF9FWFRFUk5fQyBpbnQgaXNuYW5mIChmbG9hdCB4KTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMQorLyogVGVzdCBmb3IgTmFOIGZvciAnZG91YmxlJyBudW1iZXJzLgorICAgVGhpcyBmdW5jdGlvbiBpcyBhIGdudWxpYiBleHRlbnNpb24sIHVubGlrZSBpc25hbigpIHdoaWNoIGFwcGxpZWQgb25seQorICAgdG8gJ2RvdWJsZScgbnVtYmVycyBlYXJsaWVyIGJ1dCBub3cgaXMgYSB0eXBlLWdlbmVyaWMgbWFjcm8uICAqLworIyBpZiAxCisvKiBUaGUgb3JpZ2luYWwgPG1hdGguaD4gaW5jbHVkZWQgYWJvdmUgcHJvdmlkZXMgYSBkZWNsYXJhdGlvbiBvZiBpc25hbgorICAgbWFjcm8uICAqLworIyAgaWYgX19HTlVDX18gPj0gNAorICAgIC8qIEdDQyA0LjAgYW5kIG5ld2VyIHByb3ZpZGVzIHRocmVlIGJ1aWx0LWlucyBmb3IgaXNuYW4uICAqLworIyAgIHVuZGVmIGlzbmFuZAorIyAgIGRlZmluZSBpc25hbmQoeCkgX19idWlsdGluX2lzbmFuICgoZG91YmxlKSh4KSkKKyMgIGVsc2UKKyMgICB1bmRlZiBpc25hbmQKKyMgICBkZWZpbmUgaXNuYW5kKHgpIGlzbmFuICgoZG91YmxlKSh4KSkKKyMgIGVuZGlmCisjIGVsc2UKKy8qIFRlc3Qgd2hldGhlciBYIGlzIGEgTmFOLiAgKi8KKyMgIHVuZGVmIGlzbmFuZAorIyAgZGVmaW5lIGlzbmFuZCBycGxfaXNuYW5kCitfR0xfRVhURVJOX0MgaW50IGlzbmFuZCAoZG91YmxlIHgpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAxCisvKiBUZXN0IGZvciBOYU4gZm9yICdsb25nIGRvdWJsZScgbnVtYmVycy4gICovCisjIGlmIDAKKy8qIFRoZSBvcmlnaW5hbCA8bWF0aC5oPiBpbmNsdWRlZCBhYm92ZSBwcm92aWRlcyBhIGRlY2xhcmF0aW9uIG9mIGlzbmFuCisgICBtYWNybyBvciAob2xkZXIpIGlzbmFubCBmdW5jdGlvbi4gICovCisjICBpZiBfX0dOVUNfXyA+PSA0CisgICAgLyogR0NDIDQuMCBhbmQgbmV3ZXIgcHJvdmlkZXMgdGhyZWUgYnVpbHQtaW5zIGZvciBpc25hbi4gICovCisjICAgdW5kZWYgaXNuYW5sCisjICAgZGVmaW5lIGlzbmFubCh4KSBfX2J1aWx0aW5faXNuYW5sICgobG9uZyBkb3VibGUpKHgpKQorIyAgZWxpZiBkZWZpbmVkIGlzbmFuCisjICAgdW5kZWYgaXNuYW5sCisjICAgZGVmaW5lIGlzbmFubCh4KSBpc25hbiAoKGxvbmcgZG91YmxlKSh4KSkKKyMgIGVuZGlmCisjIGVsc2UKKy8qIFRlc3Qgd2hldGhlciBYIGlzIGEgTmFOLiAgKi8KKyMgIHVuZGVmIGlzbmFubAorIyAgZGVmaW5lIGlzbmFubCBycGxfaXNuYW5sCitfR0xfRVhURVJOX0MgaW50IGlzbmFubCAobG9uZyBkb3VibGUgeCkgX0dMX0FUVFJJQlVURV9DT05TVDsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBUaGlzIG11c3QgY29tZSAqYWZ0ZXIqIHRoZSBzbmlwcGV0cyBmb3IgR05VTElCX0lTTkFORiBhbmQgR05VTElCX0lTTkFOTCEgICovCisjaWYgMQorIyBpZiAxCisvKiBXZSBjYW4ndCBqdXN0IHVzZSB0aGUgaXNuYW5mIG1hY3JvIChlLmcuKSBhcyBleHBvc2VkIGJ5CisgICBpc25hbmYuaCAoZS5nLikgaGVyZSwgYmVjYXVzZSB0aG9zZSBtYXkgZW5kIHVwIGJlaW5nIG1hY3JvcworICAgdGhhdCByZWN1cnNpdmVseSBleHBhbmQgYmFjayB0byBpc25hbi4gIFNvIHVzZSB0aGUgZ251bGliCisgICByZXBsYWNlbWVudHMgZm9yIHRoZW0gZGlyZWN0bHkuICovCisjICBpZiAxICYmIF9fR05VQ19fID49IDQKKyMgICBkZWZpbmUgZ2xfaXNuYW5fZih4KSBfX2J1aWx0aW5faXNuYW5mICgoZmxvYXQpKHgpKQorIyAgZWxzZQorX0dMX0VYVEVSTl9DIGludCBycGxfaXNuYW5mIChmbG9hdCB4KTsKKyMgICBkZWZpbmUgZ2xfaXNuYW5fZih4KSBycGxfaXNuYW5mICh4KQorIyAgZW5kaWYKKyMgIGlmIDEgJiYgX19HTlVDX18gPj0gNAorIyAgIGRlZmluZSBnbF9pc25hbl9kKHgpIF9fYnVpbHRpbl9pc25hbiAoKGRvdWJsZSkoeCkpCisjICBlbHNlCitfR0xfRVhURVJOX0MgaW50IHJwbF9pc25hbmQgKGRvdWJsZSB4KTsKKyMgICBkZWZpbmUgZ2xfaXNuYW5fZCh4KSBycGxfaXNuYW5kICh4KQorIyAgZW5kaWYKKyMgIGlmIDAgJiYgX19HTlVDX18gPj0gNAorIyAgIGRlZmluZSBnbF9pc25hbl9sKHgpIF9fYnVpbHRpbl9pc25hbmwgKChsb25nIGRvdWJsZSkoeCkpCisjICBlbHNlCitfR0xfRVhURVJOX0MgaW50IHJwbF9pc25hbmwgKGxvbmcgZG91YmxlIHgpIF9HTF9BVFRSSUJVVEVfQ09OU1Q7CisjICAgZGVmaW5lIGdsX2lzbmFuX2woeCkgcnBsX2lzbmFubCAoeCkKKyMgIGVuZGlmCisjICB1bmRlZiBpc25hbgorIyAgZGVmaW5lIGlzbmFuKHgpIFwKKyAgIChzaXplb2YgKHgpID09IHNpemVvZiAobG9uZyBkb3VibGUpID8gZ2xfaXNuYW5fbCAoeCkgOiBcCisgICAgc2l6ZW9mICh4KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBnbF9pc25hbl9kICh4KSA6IFwKKyAgICBnbF9pc25hbl9mICh4KSkKKyMgZWxpZiBfX0dOVUNfXyA+PSA0CisjICB1bmRlZiBpc25hbgorIyAgZGVmaW5lIGlzbmFuKHgpIFwKKyAgIChzaXplb2YgKHgpID09IHNpemVvZiAobG9uZyBkb3VibGUpID8gX19idWlsdGluX2lzbmFubCAoKGxvbmcgZG91YmxlKSh4KSkgOiBcCisgICAgc2l6ZW9mICh4KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2J1aWx0aW5faXNuYW4gKChkb3VibGUpKHgpKSA6IFwKKyAgICBfX2J1aWx0aW5faXNuYW5mICgoZmxvYXQpKHgpKSkKKyMgZW5kaWYKKyMgaWZkZWYgX19jcGx1c3BsdXMKKyMgIGlmZGVmIGlzbmFuCitfR0xfTUFUSF9DWFhfUkVBTF9GTE9BVElOR19ERUNMXzEgKGlzbmFuKQorIyAgIHVuZGVmIGlzbmFuCitfR0xfTUFUSF9DWFhfUkVBTF9GTE9BVElOR19ERUNMXzIgKGlzbmFuKQorIyAgZW5kaWYKKyMgZWxzZQorLyogRW5zdXJlIGlzbmFuIGlzIGEgbWFjcm8uICAqLworIyAgaWZuZGVmIGlzbmFuCisjICAgZGVmaW5lIGlzbmFuIGlzbmFuCisjICBlbmRpZgorIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyBpZiBkZWZpbmVkIGlzbmFuCitfR0xfV0FSTl9SRUFMX0ZMT0FUSU5HX0RFQ0wgKGlzbmFuKTsKKyMgIHVuZGVmIGlzbmFuCisjICBkZWZpbmUgaXNuYW4oeCkgX0dMX1dBUk5fUkVBTF9GTE9BVElOR19JTVBMIChpc25hbiwgeCkKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAxCisjIGlmIDAKKyMgIHVuZGVmIHNpZ25iaXQKKyAgIC8qIEdDQyA0LjAgYW5kIG5ld2VyIHByb3ZpZGVzIHRocmVlIGJ1aWx0LWlucyBmb3Igc2lnbmJpdC4gICovCisjICBkZWZpbmUgc2lnbmJpdCh4KSBcCisgICAoc2l6ZW9mICh4KSA9PSBzaXplb2YgKGxvbmcgZG91YmxlKSA/IF9fYnVpbHRpbl9zaWduYml0bCAoeCkgOiBcCisgICAgc2l6ZW9mICh4KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2J1aWx0aW5fc2lnbmJpdCAoeCkgOiBcCisgICAgX19idWlsdGluX3NpZ25iaXRmICh4KSkKKyMgZW5kaWYKKyMgaWYgMAorIyAgdW5kZWYgc2lnbmJpdAorX0dMX0VYVEVSTl9DIGludCBnbF9zaWduYml0ZiAoZmxvYXQgYXJnKTsKK19HTF9FWFRFUk5fQyBpbnQgZ2xfc2lnbmJpdGQgKGRvdWJsZSBhcmcpOworX0dMX0VYVEVSTl9DIGludCBnbF9zaWduYml0bCAobG9uZyBkb3VibGUgYXJnKTsKKyMgIGlmIF9fR05VQ19fID49IDIgJiYgIWRlZmluZWQgX19TVFJJQ1RfQU5TSV9fCisjICAgZGVmaW5lIF9HTF9OVU1fVUlOVF9XT1JEUyh0eXBlKSBcCisgICAgICAoKHNpemVvZiAodHlwZSkgKyBzaXplb2YgKHVuc2lnbmVkIGludCkgLSAxKSAvIHNpemVvZiAodW5zaWduZWQgaW50KSkKKyMgICBpZiBkZWZpbmVkIEZMVF9TSUdOQklUX1dPUkQgJiYgZGVmaW5lZCBGTFRfU0lHTkJJVF9CSVQgJiYgIWRlZmluZWQgZ2xfc2lnbmJpdGYKKyMgICAgZGVmaW5lIGdsX3NpZ25iaXRmX09QVElNSVpFRF9NQUNSTworIyAgICBkZWZpbmUgZ2xfc2lnbmJpdGYoYXJnKSBcCisgICAgICAgKHsgdW5pb24geyBmbG9hdCBfdmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX3dvcmRbX0dMX05VTV9VSU5UX1dPUkRTIChmbG9hdCldOyAgICAgICBcCisgICAgICAgICAgICAgICAgfSBfbTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgX20uX3ZhbHVlID0gKGFyZyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKF9tLl93b3JkW0ZMVF9TSUdOQklUX1dPUkRdID4+IEZMVF9TSUdOQklUX0JJVCkgJiAxOyAgICAgICAgICBcCisgICAgICAgIH0pCisjICAgZW5kaWYKKyMgICBpZiBkZWZpbmVkIERCTF9TSUdOQklUX1dPUkQgJiYgZGVmaW5lZCBEQkxfU0lHTkJJVF9CSVQgJiYgIWRlZmluZWQgZ2xfc2lnbmJpdGQKKyMgICAgZGVmaW5lIGdsX3NpZ25iaXRkX09QVElNSVpFRF9NQUNSTworIyAgICBkZWZpbmUgZ2xfc2lnbmJpdGQoYXJnKSBcCisgICAgICAgKHsgdW5pb24geyBkb3VibGUgX3ZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX3dvcmRbX0dMX05VTV9VSU5UX1dPUkRTIChkb3VibGUpXTsgICAgICBcCisgICAgICAgICAgICAgICAgfSBfbTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgX20uX3ZhbHVlID0gKGFyZyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKF9tLl93b3JkW0RCTF9TSUdOQklUX1dPUkRdID4+IERCTF9TSUdOQklUX0JJVCkgJiAxOyAgICAgICAgICBcCisgICAgICAgIH0pCisjICAgZW5kaWYKKyMgICBpZiBkZWZpbmVkIExEQkxfU0lHTkJJVF9XT1JEICYmIGRlZmluZWQgTERCTF9TSUdOQklUX0JJVCAmJiAhZGVmaW5lZCBnbF9zaWduYml0bAorIyAgICBkZWZpbmUgZ2xfc2lnbmJpdGxfT1BUSU1JWkVEX01BQ1JPCisjICAgIGRlZmluZSBnbF9zaWduYml0bChhcmcpIFwKKyAgICAgICAoeyB1bmlvbiB7IGxvbmcgZG91YmxlIF92YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfd29yZFtfR0xfTlVNX1VJTlRfV09SRFMgKGxvbmcgZG91YmxlKV07IFwKKyAgICAgICAgICAgICAgICB9IF9tOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBfbS5fdmFsdWUgPSAoYXJnKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoX20uX3dvcmRbTERCTF9TSUdOQklUX1dPUkRdID4+IExEQkxfU0lHTkJJVF9CSVQpICYgMTsgICAgICAgIFwKKyAgICAgICAgfSkKKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgIGRlZmluZSBzaWduYml0KHgpIFwKKyAgIChzaXplb2YgKHgpID09IHNpemVvZiAobG9uZyBkb3VibGUpID8gZ2xfc2lnbmJpdGwgKHgpIDogXAorICAgIHNpemVvZiAoeCkgPT0gc2l6ZW9mIChkb3VibGUpID8gZ2xfc2lnbmJpdGQgKHgpIDogXAorICAgIGdsX3NpZ25iaXRmICh4KSkKKyMgZW5kaWYKKyMgaWZkZWYgX19jcGx1c3BsdXMKKyMgIGlmZGVmIHNpZ25iaXQKK19HTF9NQVRIX0NYWF9SRUFMX0ZMT0FUSU5HX0RFQ0xfMSAoc2lnbmJpdCkKKyMgICB1bmRlZiBzaWduYml0CitfR0xfTUFUSF9DWFhfUkVBTF9GTE9BVElOR19ERUNMXzIgKHNpZ25iaXQpCisjICBlbmRpZgorIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyBpZiBkZWZpbmVkIHNpZ25iaXQKK19HTF9XQVJOX1JFQUxfRkxPQVRJTkdfREVDTCAoc2lnbmJpdCk7CisjICB1bmRlZiBzaWduYml0CisjICBkZWZpbmUgc2lnbmJpdCh4KSBfR0xfV0FSTl9SRUFMX0ZMT0FUSU5HX0lNUEwgKHNpZ25iaXQsIHgpCisjIGVuZGlmCisjZW5kaWYKKworX0dMX0lOTElORV9IRUFERVJfRU5ECisKKyNlbmRpZiAvKiBfR0xfTUFUSF9IICovCisjZW5kaWYgLyogX0dMX01BVEhfSCAqLwpkaWZmIC0tZ2l0IGEvZGFyd2luLWxpYi9zY2hlZC5oIGIvZGFyd2luLWxpYi9zY2hlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2N2RlOWEKLS0tIC9kZXYvbnVsbAorKysgYi9kYXJ3aW4tbGliL3NjaGVkLmgKQEAgLTAsMCArMSw1OCBAQAorLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLworLyogUmVwbGFjZW1lbnQgPHNjaGVkLmg+IGZvciBwbGF0Zm9ybXMgdGhhdCBsYWNrIGl0LgorICAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX0dMX1NDSEVEX0gKKworI2lmIF9fR05VQ19fID49IDMKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKyNlbmRpZgorCisKKy8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyNpZiAxCisjIGluY2x1ZGVfbmV4dCA8c2NoZWQuaD4KKyNlbmRpZgorCisjaWZuZGVmIF9HTF9TQ0hFRF9ICisjZGVmaW5lIF9HTF9TQ0hFRF9ICisKKy8qIEdldCBwaWRfdC4KKyAgIFRoaXMgaXMgbmVlZGVkIG9uIGdsaWJjIDIuMTEgKHNlZQorICAgZ2xpYmMgYnVnIDxodHRwOi8vc291cmNld2FyZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTEzMTk4PikKKyAgIGFuZCBNYWMgT1MgWCAxMC41LiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2lmICExCisKKyMgaWYgIUdOVUxJQl9kZWZpbmVkX3N0cnVjdF9zY2hlZF9wYXJhbQorc3RydWN0IHNjaGVkX3BhcmFtCit7CisgIGludCBzY2hlZF9wcmlvcml0eTsKK307CisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfc3RydWN0X3NjaGVkX3BhcmFtIDEKKyMgZW5kaWYKKworI2VuZGlmCisKKyNpZiAhKGRlZmluZWQgU0NIRURfRklGTyAmJiBkZWZpbmVkIFNDSEVEX1JSICYmIGRlZmluZWQgU0NIRURfT1RIRVIpCisjIGRlZmluZSBTQ0hFRF9GSUZPICAgMQorIyBkZWZpbmUgU0NIRURfUlIgICAgIDIKKyMgZGVmaW5lIFNDSEVEX09USEVSICAwCisjZW5kaWYKKworI2VuZGlmIC8qIF9HTF9TQ0hFRF9IICovCisjZW5kaWYgLyogX0dMX1NDSEVEX0ggKi8KZGlmZiAtLWdpdCBhL2Rhcndpbi1saWIvc2lnbmFsLmggYi9kYXJ3aW4tbGliL3NpZ25hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzOTM4M2YKLS0tIC9kZXYvbnVsbAorKysgYi9kYXJ3aW4tbGliL3NpZ25hbC5oCkBAIC0wLDAgKzEsNzU5IEBACisvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovCisvKiBBIEdOVS1saWtlIDxzaWduYWwuaD4uCisKKyAgIENvcHlyaWdodCAoQykgMjAwNi0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWYgX19HTlVDX18gPj0gMworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorI2VuZGlmCisKKworI2lmIGRlZmluZWQgX19uZWVkX3NpZ19hdG9taWNfdCB8fCBkZWZpbmVkIF9fbmVlZF9zaWdzZXRfdCB8fCBkZWZpbmVkIF9HTF9BTFJFQURZX0lOQ0xVRElOR19TSUdOQUxfSCB8fCAoZGVmaW5lZCBfU0lHTkFMX0ggJiYgIWRlZmluZWQgX19TSVpFT0ZfUFRIUkVBRF9NVVRFWF9UKQorLyogU3BlY2lhbCBpbnZvY2F0aW9uIGNvbnZlbnRpb246CisgICAtIEluc2lkZSBnbGliYyBoZWFkZXIgZmlsZXMuCisgICAtIE9uIGdsaWJjIHN5c3RlbXMgd2UgaGF2ZSBhIHNlcXVlbmNlIG9mIG5lc3RlZCBpbmNsdWRlcworICAgICA8c2lnbmFsLmg+IC0+IDx1Y29udGV4dC5oPiAtPiA8c2lnbmFsLmg+LgorICAgICBJbiB0aGlzIHNpdHVhdGlvbiwgdGhlIGZ1bmN0aW9ucyBhcmUgbm90IHlldCBkZWNsYXJlZCwgdGhlcmVmb3JlIHdlIGNhbm5vdAorICAgICBwcm92aWRlIHRoZSBDKysgYWxpYXNlcy4KKyAgIC0gT24gZ2xpYmMgc3lzdGVtcyB3aXRoIEdDQyA0LjMgd2UgaGF2ZSBhIHNlcXVlbmNlIG9mIG5lc3RlZCBpbmNsdWRlcworICAgICA8Y3NpZ25hbD4gLT4gPC91c3IvaW5jbHVkZS9zaWduYWwuaD4gLT4gPHN5cy91Y29udGV4dC5oPiAtPiA8c2lnbmFsLmg+LgorICAgICBJbiB0aGlzIHNpdHVhdGlvbiwgc29tZSBvZiB0aGUgZnVuY3Rpb25zIGFyZSBub3QgeWV0IGRlY2xhcmVkLCB0aGVyZWZvcmUKKyAgICAgd2UgY2Fubm90IHByb3ZpZGUgdGhlIEMrKyBhbGlhc2VzLiAgKi8KKworIyBpbmNsdWRlX25leHQgPHNpZ25hbC5oPgorCisjZWxzZQorLyogTm9ybWFsIGludm9jYXRpb24gY29udmVudGlvbi4gICovCisKKyNpZm5kZWYgX0dMX1NJR05BTF9ICisKKyNkZWZpbmUgX0dMX0FMUkVBRFlfSU5DTFVESU5HX1NJR05BTF9ICisKKy8qIERlZmluZSBwaWRfdCwgdWlkX3QuCisgICBBbHNvLCBtaW5ndyBkZWZpbmVzIHNpZ3NldF90IG5vdCBpbiA8c2lnbmFsLmg+LCBidXQgaW4gPHN5cy90eXBlcy5oPi4KKyAgIE9uIFNvbGFyaXMgMTAsIDxzaWduYWwuaD4gaW5jbHVkZXMgPHN5cy90eXBlcy5oPiwgd2hpY2ggZXZlbnR1YWxseSBpbmNsdWRlcworICAgdXM7IHNvIGluY2x1ZGUgPHN5cy90eXBlcy5oPiBub3csIGJlZm9yZSB0aGUgc2Vjb25kIGluY2x1c2lvbiBndWFyZC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKy8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyNpbmNsdWRlX25leHQgPHNpZ25hbC5oPgorCisjdW5kZWYgX0dMX0FMUkVBRFlfSU5DTFVESU5HX1NJR05BTF9ICisKKyNpZm5kZWYgX0dMX1NJR05BTF9ICisjZGVmaW5lIF9HTF9TSUdOQUxfSAorCisvKiBNYWMgT1MgWCAxMC4zLCBGcmVlQlNEIDYuNCwgT3BlbkJTRCAzLjgsIE9TRi8xIDQuMCwgU29sYXJpcyAyLjYgZGVjbGFyZQorICAgcHRocmVhZF9zaWdtYXNrIGluIDxwdGhyZWFkLmg+LCBub3QgaW4gPHNpZ25hbC5oPi4KKyAgIEJ1dCBhdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9uIG9uIGdsaWJjIHN5c3RlbXMuKi8KKyNpZiAoMCB8fCBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLKSBcCisgICAgJiYgKChkZWZpbmVkIF9fQVBQTEVfXyAmJiBkZWZpbmVkIF9fTUFDSF9fKSB8fCBkZWZpbmVkIF9fRnJlZUJTRF9fIHx8IGRlZmluZWQgX19PcGVuQlNEX18gfHwgZGVmaW5lZCBfX29zZl9fIHx8IGRlZmluZWQgX19zdW4pIFwKKyAgICAmJiAhIGRlZmluZWQgX19HTElCQ19fCisjIGluY2x1ZGUgPHB0aHJlYWQuaD4KKyNlbmRpZgorCisvKiBUaGUgZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTCBldGMuIGFyZSBjb3BpZWQgaGVyZS4gICovCisjaWZuZGVmIF9HTF9DWFhERUZTX0gKKyNkZWZpbmUgX0dMX0NYWERFRlNfSAorCisvKiBUaGUgdGhyZWUgbW9zdCBmcmVxdWVudCB1c2UgY2FzZXMgb2YgdGhlc2UgbWFjcm9zIGFyZToKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgc3Vic3RpdHV0ZSBmb3IgYSBmdW5jdGlvbiB0aGF0IGlzIG1pc3Npbmcgb24gc29tZQorICAgICBwbGF0Zm9ybXMsIGJ1dCBpcyBkZWNsYXJlZCBhbmQgd29ya3MgZmluZSBvbiB0aGUgcGxhdGZvcm1zIG9uIHdoaWNoCisgICAgIGl0IGV4aXN0czoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmICFASEFWRV9GT09ACisgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIGFsbCBwbGF0Zm9ybXMsCisgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIHBsYXRmb3JtczoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorICAgICAgICMgICB1bmRlZiBmb28KKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworICAgICAgICMgZWxzZQorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIHNvbWUgcGxhdGZvcm1zCisgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIG9mIHRoZW0gYW5kCisgICAgIGlzIGFkZGl0aW9uYWxseSBlaXRoZXIgbWlzc2luZyBvciB1bmRlY2xhcmVkIG9uIHNvbWUgb3RoZXIgcGxhdGZvcm1zOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisgICAgICAgIyAgIHVuZGVmIGZvbworICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CisgICAgICAgIyBlbHNlCisgICAgICAgIyAgaWYgIUBIQVZFX0ZPT0AgICBvciAgIGlmICFASEFWRV9ERUNMX0ZPT0AKKyAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorKi8KKworLyogX0dMX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuICJDIgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4KKyNlbmRpZgorCisvKiBfR0xfRlVOQ0RFQ0xfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGRlY2xhcmVzIGEgcmVwbGFjZW1lbnQgZnVuY3Rpb24sIG5hbWVkIHJwbF9mdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9GVU5DREVDTF9SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICovCisjZGVmaW5lIF9HTF9GVU5DREVDTF9SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0ZVTkNERUNMX1JQTF8xIChycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKQorI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMXzEocnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9FWFRFUk5fQyByZXR0eXBlIHJwbF9mdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKworLyogX0dMX0ZVTkNERUNMX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBkZWNsYXJlcyB0aGUgc3lzdGVtIGZ1bmN0aW9uLCBuYW1lZCBmdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9GVU5DREVDTF9TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICovCisjZGVmaW5lIF9HTF9GVU5DREVDTF9TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0VYVEVSTl9DIHJldHR5cGUgZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisKKy8qIF9HTF9DWFhBTElBU19SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHJwbF9mdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFIGlzIGRlZmluZWQuCisgICBFeGFtcGxlOgorICAgICBfR0xfQ1hYQUxJQVNfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKyAqLworI2RlZmluZSBfR0xfQ1hYQUxJQVNfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycykKKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OnJwbF9mdW5jOyAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gcnBsX2Z1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQKKyAgIGRlY2xhcmF0aW9uLiAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IKKyAgIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpycGxfZnVuYyk7ICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHRoZSBzeXN0ZW0gcHJvdmlkZWQgZnVuY3Rpb24gZnVuYywgaWYgR05VTElCX05BTUVTUEFDRQorICAgaXMgZGVmaW5lZC4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9DWFhBTElBU19TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyAgLyogSWYgd2Ugd2VyZSB0byB3cml0ZQorICAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOworICAgICBsaWtlIGFib3ZlIGluIF9HTF9DWFhBTElBU19SUExfMSwgdGhlIGNvbXBpbGVyIGNvdWxkIG9wdGltaXplIGNhbGxzCisgICAgIGJldHRlciAocmVtb3ZlIGFuIGluZGlyZWN0aW9uIHRocm91Z2ggYSAnc3RhdGljJyBwb2ludGVyIHZhcmlhYmxlKSwKKyAgICAgYnV0IHRoZW4gdGhlIF9HTF9DWFhBTElBU1dBUk4gbWFjcm8gYmVsb3cgd291bGQgY2F1c2UgYSB3YXJuaW5nIG5vdCBvbmx5CisgICAgIGZvciB1c2VzIG9mIDo6ZnVuYyBidXQgYWxzbyBmb3IgdXNlcyBvZiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jLiAgKi8KKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGZ1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgZGVjbGFyYXRpb24uCisgICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvciB0aGF0IHdvdWxkCisgICBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpmdW5jKTsgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMsIHJldHR5cGUyLCBwYXJhbWV0ZXJzMik7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGlzIHBpY2tlZCBhbW9uZyBhIHNldCBvZiBvdmVybG9hZGVkIGZ1bmN0aW9ucywKKyAgIG5hbWVseSB0aGUgb25lIHdpdGggcmV0dHlwZTIgYW5kIHBhcmFtZXRlcnMyLiAgVHdvIGNvbnNlY3V0aXZlIGNhc3RzCisgICBhcmUgdXNlZCB0byBzaWxlbmNlIHRoZSAiY2Fubm90IGZpbmQgYSBtYXRjaCIgYW5kICJpbnZhbGlkIGNvbnZlcnNpb24iCisgICBlcnJvcnMgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisgIC8qIFRoZSBvdXRlciBjYXN0IG11c3QgYmUgYSByZWludGVycHJldF9jYXN0LgorICAgICBUaGUgaW5uZXIgY2FzdDogV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNldCBvZiBvdmVybG9hZGVkCisgICAgIGZ1bmN0aW9ucywgaXQgd29ya3MgYXMgYSBzdGF0aWNfY2FzdDw+LCBjaG9vc2luZyB0aGUgZGVzaWduYXRlZCB2YXJpYW50LgorICAgICBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2luZ2xlIHZhcmlhbnQsIGl0IHdvcmtzIGFzIGEKKyAgICAgcmVpbnRlcnByZXRfY2FzdDw+LiBUaGUgcGFyZW50aGVzaXplZCBjYXN0IHN5bnRheCB3b3JrcyBib3RoIHdheXMuICAqLworIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChyZXR0eXBlMigqKXBhcmFtZXRlcnMyKSg6OmZ1bmMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTV0FSTiAoZnVuYyk7CisgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiA6OmZ1bmMgaXMgdXNlZCBidXQgbm90IHdoZW4KKyAgIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gIGZ1bmMgbXVzdCBiZSBkZWZpbmVkIHdpdGhvdXQgb3ZlcmxvYWRlZAorICAgdmFyaWFudHMuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk5fMSAoZnVuYywgR05VTElCX05BTUVTUEFDRSkKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMShmdW5jLG5hbWVzcGFjZSkgXAorICAgX0dMX0NYWEFMSUFTV0FSTl8yIChmdW5jLCBuYW1lc3BhY2UpCisvKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKyAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworIyBpZiAhX19PUFRJTUlaRV9fCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgX0dMX1dBUk5fT05fVVNFIChmdW5jLCBcCisgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworIyBlbHNlCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNXQVJOMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiB0aGUgZ2l2ZW4gb3ZlcmxvYWRlZCB2YXJpYW50IG9mIDo6ZnVuYworICAgaXMgdXNlZCBidXQgbm90IHdoZW4gR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk4xXzEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdOVUxJQl9OQU1FU1BBQ0UpCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgX0dMX0NYWEFMSUFTV0FSTjFfMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgbmFtZXNwYWNlKQorLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKyMgaWYgIV9fT1BUSU1JWkVfXworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisjZW5kaWYgLyogX0dMX0NYWERFRlNfSCAqLworCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwgaXMgY29waWVkIGhlcmUuICAqLworLyogX0dMX0FSR19OT05OVUxMKChuLC4uLixtKSkgdGVsbHMgdGhlIGNvbXBpbGVyIGFuZCBzdGF0aWMgYW5hbHl6ZXIgdG9vbHMKKyAgIHRoYXQgdGhlIHZhbHVlcyBwYXNzZWQgYXMgYXJndW1lbnRzIG4sIC4uLiwgbSBtdXN0IGJlIG5vbi1OVUxMIHBvaW50ZXJzLgorICAgbiA9IDEgc3RhbmRzIGZvciB0aGUgZmlyc3QgYXJndW1lbnQsIG4gPSAyIGZvciB0aGUgc2Vjb25kIGFyZ3VtZW50IGV0Yy4gICovCisjaWZuZGVmIF9HTF9BUkdfTk9OTlVMTAorIyBpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSB8fCBfX0dOVUNfXyA+IDMKKyMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKSBfX2F0dHJpYnV0ZV9fICgoX19ub25udWxsX18gcGFyYW1zKSkKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpCisjIGVuZGlmCisjZW5kaWYKKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFCisKKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCisvKiBBIGNvbXBpbGVyIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDQuMy4wIGFuZCBsYXRlci4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobWVzc2FnZSkpKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24KKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisjIGVuZGlmCisjZW5kaWYKKworLyogX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuY3Rpb24sIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsICJzdHJpbmciKQorICAgaXMgbGlrZSBfR0xfV0FSTl9PTl9VU0UgKGZ1bmN0aW9uLCAic3RyaW5nIiksIGV4Y2VwdCB0aGF0IHRoZSBmdW5jdGlvbiBpcworICAgZGVjbGFyZWQgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLCBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLAorICAgYW5kIGF0dHJpYnV0ZXMuCisgICBUaGlzIHZhcmlhbnQgaXMgdXNlZnVsIGZvciBvdmVybG9hZGVkIGZ1bmN0aW9ucyBpbiBDKysuIF9HTF9XQVJOX09OX1VTRSBkb2VzCisgICBub3Qgd29yayBpbiB0aGlzIGNhc2UuICAqLworI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0VfQ1hYCisjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyBcCisgICAgIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobXNnKSkpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisvKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBfR0xfV0FSTl9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX0VYVEVSTl9DCisjIGlmIGRlZmluZWQgX19jcGx1c3BsdXMKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4gIkMiCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4KKyMgZW5kaWYKKyNlbmRpZgorCisvKiBPbiBBSVgsIHNpZ19hdG9taWNfdCBhbHJlYWR5IGluY2x1ZGVzIHZvbGF0aWxlLiAgQzk5IHJlcXVpcmVzIHRoYXQKKyAgICd2b2xhdGlsZSBzaWdfYXRvbWljX3QnIGlnbm9yZSB0aGUgZXh0cmEgbW9kaWZpZXIsIGJ1dCBDODkgZGlkIG5vdC4KKyAgIEhlbmNlLCByZWRlZmluZSB0aGlzIHRvIGEgbm9uLXZvbGF0aWxlIHR5cGUgYXMgbmVlZGVkLiAgKi8KKyNpZiAhIDEKKyMgaWYgIUdOVUxJQl9kZWZpbmVkX3NpZ19hdG9taWNfdAordHlwZWRlZiBpbnQgcnBsX3NpZ19hdG9taWNfdDsKKyMgIHVuZGVmIHNpZ19hdG9taWNfdAorIyAgZGVmaW5lIHNpZ19hdG9taWNfdCBycGxfc2lnX2F0b21pY190CisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfc2lnX2F0b21pY190IDEKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBBIHNldCBvciBtYXNrIG9mIHNpZ25hbHMuICAqLworI2lmICExCisjIGlmICFHTlVMSUJfZGVmaW5lZF9zaWdzZXRfdAordHlwZWRlZiB1bnNpZ25lZCBpbnQgc2lnc2V0X3Q7CisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfc2lnc2V0X3QgMQorIyBlbmRpZgorI2VuZGlmCisKKy8qIERlZmluZSBzaWdoYW5kbGVyX3QsIHRoZSB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycy4gIEEgR05VIGV4dGVuc2lvbi4gICovCisjaWYgITAKKyMgaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworIyBlbmRpZgorIyBpZiAhR05VTElCX2RlZmluZWRfc2lnaGFuZGxlcl90Cit0eXBlZGVmIHZvaWQgKCpzaWdoYW5kbGVyX3QpIChpbnQpOworIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX3NpZ2hhbmRsZXJfdCAxCisjIGVuZGlmCisjIGlmZGVmIF9fY3BsdXNwbHVzCit9CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZm5kZWYgU0lHUElQRQorLyogRGVmaW5lIFNJR1BJUEUgdG8gYSB2YWx1ZSB0aGF0IGRvZXMgbm90IG92ZXJsYXAgd2l0aCBvdGhlciBzaWduYWxzLiAgKi8KKyMgIGRlZmluZSBTSUdQSVBFIDEzCisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfU0lHUElQRSAxCisvKiBUbyBhY3R1YWxseSB1c2UgU0lHUElQRSwgeW91IGFsc28gbmVlZCB0aGUgZ251bGliIG1vZHVsZXMgJ3NpZ3Byb2NtYXNrJywKKyAgICd3cml0ZScsICdzdGRpbycuICAqLworIyBlbmRpZgorI2VuZGlmCisKKworLyogTWF4aW11bSBzaWduYWwgbnVtYmVyICsgMS4gICovCisjaWZuZGVmIE5TSUcKKyMgaWYgZGVmaW5lZCBfX1RBTkRFTQorIyAgZGVmaW5lIE5TSUcgMzIKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcHRocmVhZF9zaWdtYXNrCisjICAgZGVmaW5lIHB0aHJlYWRfc2lnbWFzayBycGxfcHRocmVhZF9zaWdtYXNrCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocHRocmVhZF9zaWdtYXNrLCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGhvdywgY29uc3Qgc2lnc2V0X3QgKm5ld19tYXNrLCBzaWdzZXRfdCAqb2xkX21hc2spKTsKK19HTF9DWFhBTElBU19SUEwgKHB0aHJlYWRfc2lnbWFzaywgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBob3csIGNvbnN0IHNpZ3NldF90ICpuZXdfbWFzaywgc2lnc2V0X3QgKm9sZF9tYXNrKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChwdGhyZWFkX3NpZ21hc2ssIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgaG93LCBjb25zdCBzaWdzZXRfdCAqbmV3X21hc2ssIHNpZ3NldF90ICpvbGRfbWFzaykpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHB0aHJlYWRfc2lnbWFzaywgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBob3csIGNvbnN0IHNpZ3NldF90ICpuZXdfbWFzaywgc2lnc2V0X3QgKm9sZF9tYXNrKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwdGhyZWFkX3NpZ21hc2spOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwdGhyZWFkX3NpZ21hc2sKKyMgaWYgSEFWRV9SQVdfREVDTF9QVEhSRUFEX1NJR01BU0sKK19HTF9XQVJOX09OX1VTRSAocHRocmVhZF9zaWdtYXNrLCAicHRocmVhZF9zaWdtYXNrIGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHB0aHJlYWRfc2lnbWFzayBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAxCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcmFpc2UKKyMgICBkZWZpbmUgcmFpc2UgcnBsX3JhaXNlCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocmFpc2UsIGludCwgKGludCBzaWcpKTsKK19HTF9DWFhBTElBU19SUEwgKHJhaXNlLCBpbnQsIChpbnQgc2lnKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChyYWlzZSwgaW50LCAoaW50IHNpZykpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHJhaXNlLCBpbnQsIChpbnQgc2lnKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChyYWlzZSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHJhaXNlCisvKiBBc3N1bWUgcmFpc2UgaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAocmFpc2UsICJyYWlzZSBjYW4gY3Jhc2ggb24gbmF0aXZlIFdpbmRvd3MgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSByYWlzZSBmb3IgcG9ydGFiaWxpdHkiKTsKKyNlbmRpZgorCisKKyNpZiAxCisjIGlmICExCisKKyMgIGlmbmRlZiBHTlVMSUJfZGVmaW5lZF9zaWduYWxfYmxvY2tpbmcKKyMgICBkZWZpbmUgR05VTElCX2RlZmluZWRfc2lnbmFsX2Jsb2NraW5nIDEKKyMgIGVuZGlmCisKKy8qIE1heGltdW0gc2lnbmFsIG51bWJlciArIDEuICAqLworIyAgaWZuZGVmIE5TSUcKKyMgICBkZWZpbmUgTlNJRyAzMgorIyAgZW5kaWYKKworLyogVGhpcyBjb2RlIHN1cHBvcnRzIG9ubHkgMzIgc2lnbmFscy4gICovCisjICBpZiAhR05VTElCX2RlZmluZWRfdmVyaWZ5X05TSUdfY29uc3RyYWludAordHlwZWRlZiBpbnQgdmVyaWZ5X05TSUdfY29uc3RyYWludFtOU0lHIDw9IDMyID8gMSA6IC0xXTsKKyMgICBkZWZpbmUgR05VTElCX2RlZmluZWRfdmVyaWZ5X05TSUdfY29uc3RyYWludCAxCisjICBlbmRpZgorCisjIGVuZGlmCisKKy8qIFRlc3Qgd2hldGhlciBhIGdpdmVuIHNpZ25hbCBpcyBjb250YWluZWQgaW4gYSBzaWduYWwgc2V0LiAgKi8KKyMgaWYgMQorLyogVGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgbWFjcm8gb24gTWFjIE9TIFguICAqLworIyAgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgICB1bmRlZiBzaWdpc21lbWJlcgorIyAgZW5kaWYKKyMgZWxzZQorX0dMX0ZVTkNERUNMX1NZUyAoc2lnaXNtZW1iZXIsIGludCwgKGNvbnN0IHNpZ3NldF90ICpzZXQsIGludCBzaWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc2lnaXNtZW1iZXIsIGludCwgKGNvbnN0IHNpZ3NldF90ICpzZXQsIGludCBzaWcpKTsKK19HTF9DWFhBTElBU1dBUk4gKHNpZ2lzbWVtYmVyKTsKKworLyogSW5pdGlhbGl6ZSBhIHNpZ25hbCBzZXQgdG8gdGhlIGVtcHR5IHNldC4gICovCisjIGlmIDEKKy8qIFRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIG1hY3JvIG9uIE1hYyBPUyBYLiAgKi8KKyMgIGlmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjICAgdW5kZWYgc2lnZW1wdHlzZXQKKyMgIGVuZGlmCisjIGVsc2UKK19HTF9GVU5DREVDTF9TWVMgKHNpZ2VtcHR5c2V0LCBpbnQsIChzaWdzZXRfdCAqc2V0KSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc2lnZW1wdHlzZXQsIGludCwgKHNpZ3NldF90ICpzZXQpKTsKK19HTF9DWFhBTElBU1dBUk4gKHNpZ2VtcHR5c2V0KTsKKworLyogQWRkIGEgc2lnbmFsIHRvIGEgc2lnbmFsIHNldC4gICovCisjIGlmIDEKKy8qIFRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIG1hY3JvIG9uIE1hYyBPUyBYLiAgKi8KKyMgIGlmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjICAgdW5kZWYgc2lnYWRkc2V0CisjICBlbmRpZgorIyBlbHNlCitfR0xfRlVOQ0RFQ0xfU1lTIChzaWdhZGRzZXQsIGludCwgKHNpZ3NldF90ICpzZXQsIGludCBzaWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHNpZ2FkZHNldCwgaW50LCAoc2lnc2V0X3QgKnNldCwgaW50IHNpZykpOworX0dMX0NYWEFMSUFTV0FSTiAoc2lnYWRkc2V0KTsKKworLyogUmVtb3ZlIGEgc2lnbmFsIGZyb20gYSBzaWduYWwgc2V0LiAgKi8KKyMgaWYgMQorLyogVGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgbWFjcm8gb24gTWFjIE9TIFguICAqLworIyAgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgICB1bmRlZiBzaWdkZWxzZXQKKyMgIGVuZGlmCisjIGVsc2UKK19HTF9GVU5DREVDTF9TWVMgKHNpZ2RlbHNldCwgaW50LCAoc2lnc2V0X3QgKnNldCwgaW50IHNpZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc2lnZGVsc2V0LCBpbnQsIChzaWdzZXRfdCAqc2V0LCBpbnQgc2lnKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChzaWdkZWxzZXQpOworCisvKiBGaWxsIGEgc2lnbmFsIHNldCB3aXRoIGFsbCBwb3NzaWJsZSBzaWduYWxzLiAgKi8KKyMgaWYgMQorLyogVGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgbWFjcm8gb24gTWFjIE9TIFguICAqLworIyAgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgICB1bmRlZiBzaWdmaWxsc2V0CisjICBlbmRpZgorIyBlbHNlCitfR0xfRlVOQ0RFQ0xfU1lTIChzaWdmaWxsc2V0LCBpbnQsIChzaWdzZXRfdCAqc2V0KSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc2lnZmlsbHNldCwgaW50LCAoc2lnc2V0X3QgKnNldCkpOworX0dMX0NYWEFMSUFTV0FSTiAoc2lnZmlsbHNldCk7CisKKy8qIFJldHVybiB0aGUgc2V0IG9mIHRob3NlIGJsb2NrZWQgc2lnbmFscyB0aGF0IGFyZSBwZW5kaW5nLiAgKi8KKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHNpZ3BlbmRpbmcsIGludCwgKHNpZ3NldF90ICpzZXQpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzaWdwZW5kaW5nLCBpbnQsIChzaWdzZXRfdCAqc2V0KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChzaWdwZW5kaW5nKTsKKworLyogSWYgT0xEX1NFVCBpcyBub3QgTlVMTCwgcHV0IHRoZSBjdXJyZW50IHNldCBvZiBibG9ja2VkIHNpZ25hbHMgaW4gKk9MRF9TRVQuCisgICBUaGVuLCBpZiBTRVQgaXMgbm90IE5VTEwsIGFmZmVjdCB0aGUgY3VycmVudCBzZXQgb2YgYmxvY2tlZCBzaWduYWxzIGJ5CisgICBjb21iaW5pbmcgaXQgd2l0aCAqU0VUIGFzIGluZGljYXRlZCBpbiBPUEVSQVRJT04uCisgICBJbiB0aGlzIGltcGxlbWVudGF0aW9uLCB5b3UgYXJlIG5vdCBhbGxvd2VkIHRvIGNoYW5nZSBhIHNpZ25hbCBoYW5kbGVyCisgICB3aGlsZSB0aGUgc2lnbmFsIGlzIGJsb2NrZWQuICAqLworIyBpZiAhMQorIyAgZGVmaW5lIFNJR19CTE9DSyAgIDAgIC8qIGJsb2NrZWRfc2V0ID0gYmxvY2tlZF9zZXQgfCAqc2V0OyAqLworIyAgZGVmaW5lIFNJR19TRVRNQVNLIDEgIC8qIGJsb2NrZWRfc2V0ID0gKnNldDsgKi8KKyMgIGRlZmluZSBTSUdfVU5CTE9DSyAyICAvKiBibG9ja2VkX3NldCA9IGJsb2NrZWRfc2V0ICYgfipzZXQ7ICovCitfR0xfRlVOQ0RFQ0xfU1lTIChzaWdwcm9jbWFzaywgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBvcGVyYXRpb24sIGNvbnN0IHNpZ3NldF90ICpzZXQsIHNpZ3NldF90ICpvbGRfc2V0KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzaWdwcm9jbWFzaywgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBvcGVyYXRpb24sIGNvbnN0IHNpZ3NldF90ICpzZXQsIHNpZ3NldF90ICpvbGRfc2V0KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChzaWdwcm9jbWFzayk7CisKKy8qIEluc3RhbGwgdGhlIGhhbmRsZXIgRlVOQyBmb3Igc2lnbmFsIFNJRywgYW5kIHJldHVybiB0aGUgcHJldmlvdXMKKyAgIGhhbmRsZXIuICAqLworIyBpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjIGVuZGlmCisjIGlmICFHTlVMSUJfZGVmaW5lZF9mdW5jdGlvbl90YWtpbmdfaW50X3JldHVybmluZ192b2lkX3QKK3R5cGVkZWYgdm9pZCAoKl9nbF9mdW5jdGlvbl90YWtpbmdfaW50X3JldHVybmluZ192b2lkX3QpIChpbnQpOworIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX2Z1bmN0aW9uX3Rha2luZ19pbnRfcmV0dXJuaW5nX3ZvaWRfdCAxCisjIGVuZGlmCisjIGlmZGVmIF9fY3BsdXNwbHVzCit9CisjIGVuZGlmCisjIGlmICExCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBzaWduYWwgcnBsX3NpZ25hbAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHNpZ25hbCwgX2dsX2Z1bmN0aW9uX3Rha2luZ19pbnRfcmV0dXJuaW5nX3ZvaWRfdCwKKyAgICAgICAgICAgICAgICAgIChpbnQgc2lnLCBfZ2xfZnVuY3Rpb25fdGFraW5nX2ludF9yZXR1cm5pbmdfdm9pZF90IGZ1bmMpKTsKK19HTF9DWFhBTElBU19SUEwgKHNpZ25hbCwgX2dsX2Z1bmN0aW9uX3Rha2luZ19pbnRfcmV0dXJuaW5nX3ZvaWRfdCwKKyAgICAgICAgICAgICAgICAgIChpbnQgc2lnLCBfZ2xfZnVuY3Rpb25fdGFraW5nX2ludF9yZXR1cm5pbmdfdm9pZF90IGZ1bmMpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoc2lnbmFsLCBfZ2xfZnVuY3Rpb25fdGFraW5nX2ludF9yZXR1cm5pbmdfdm9pZF90LAorICAgICAgICAgICAgICAgICAgKGludCBzaWcsIF9nbF9mdW5jdGlvbl90YWtpbmdfaW50X3JldHVybmluZ192b2lkX3QgZnVuYykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoc2lnbmFsKTsKKworIyBpZiAhMSAmJiBHTlVMSUJfZGVmaW5lZF9TSUdQSVBFCisvKiBSYWlzZSBzaWduYWwgU0lHUElQRS4gICovCitfR0xfRVhURVJOX0MgaW50IF9nbF9yYWlzZV9TSUdQSVBFICh2b2lkKTsKKyMgZW5kaWYKKworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzaWdhZGRzZXQKKyMgaWYgSEFWRV9SQVdfREVDTF9TSUdBRERTRVQKK19HTF9XQVJOX09OX1VTRSAoc2lnYWRkc2V0LCAic2lnYWRkc2V0IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgdGhlIGdudWxpYiBtb2R1bGUgc2lncHJvY21hc2sgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjIHVuZGVmIHNpZ2RlbHNldAorIyBpZiBIQVZFX1JBV19ERUNMX1NJR0RFTFNFVAorX0dMX1dBUk5fT05fVVNFIChzaWdkZWxzZXQsICJzaWdkZWxzZXQgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSB0aGUgZ251bGliIG1vZHVsZSBzaWdwcm9jbWFzayBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyMgdW5kZWYgc2lnZW1wdHlzZXQKKyMgaWYgSEFWRV9SQVdfREVDTF9TSUdFTVBUWVNFVAorX0dMX1dBUk5fT05fVVNFIChzaWdlbXB0eXNldCwgInNpZ2VtcHR5c2V0IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgdGhlIGdudWxpYiBtb2R1bGUgc2lncHJvY21hc2sgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjIHVuZGVmIHNpZ2ZpbGxzZXQKKyMgaWYgSEFWRV9SQVdfREVDTF9TSUdGSUxMU0VUCitfR0xfV0FSTl9PTl9VU0UgKHNpZ2ZpbGxzZXQsICJzaWdmaWxsc2V0IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgdGhlIGdudWxpYiBtb2R1bGUgc2lncHJvY21hc2sgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjIHVuZGVmIHNpZ2lzbWVtYmVyCisjIGlmIEhBVkVfUkFXX0RFQ0xfU0lHSVNNRU1CRVIKK19HTF9XQVJOX09OX1VTRSAoc2lnaXNtZW1iZXIsICJzaWdpc21lbWJlciBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIHRoZSBnbnVsaWIgbW9kdWxlIHNpZ3Byb2NtYXNrIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorIyB1bmRlZiBzaWdwZW5kaW5nCisjIGlmIEhBVkVfUkFXX0RFQ0xfU0lHUEVORElORworX0dMX1dBUk5fT05fVVNFIChzaWdwZW5kaW5nLCAic2lncGVuZGluZyBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIHRoZSBnbnVsaWIgbW9kdWxlIHNpZ3Byb2NtYXNrIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorIyB1bmRlZiBzaWdwcm9jbWFzaworIyBpZiBIQVZFX1JBV19ERUNMX1NJR1BST0NNQVNLCitfR0xfV0FSTl9PTl9VU0UgKHNpZ3Byb2NtYXNrLCAic2lncHJvY21hc2sgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSB0aGUgZ251bGliIG1vZHVsZSBzaWdwcm9jbWFzayBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZiAvKiAxICovCisKKworI2lmIDEKKyMgaWYgITEKKworIyAgaWYgITEKKworIyAgIGlmICFHTlVMSUJfZGVmaW5lZF9zaWdpbmZvX3R5cGVzCisKKy8qIFByZXNlbnQgdG8gYWxsb3cgY29tcGlsYXRpb24sIGJ1dCB1bnN1cHBvcnRlZCBieSBnbnVsaWIuICAqLwordW5pb24gc2lndmFsCit7CisgIGludCBzaXZhbF9pbnQ7CisgIHZvaWQgKnNpdmFsX3B0cjsKK307CisKKy8qIFByZXNlbnQgdG8gYWxsb3cgY29tcGlsYXRpb24sIGJ1dCB1bnN1cHBvcnRlZCBieSBnbnVsaWIuICAqLworc3RydWN0IHNpZ2luZm9fdAoreworICBpbnQgc2lfc2lnbm87CisgIGludCBzaV9jb2RlOworICBpbnQgc2lfZXJybm87CisgIHBpZF90IHNpX3BpZDsKKyAgdWlkX3Qgc2lfdWlkOworICB2b2lkICpzaV9hZGRyOworICBpbnQgc2lfc3RhdHVzOworICBsb25nIHNpX2JhbmQ7CisgIHVuaW9uIHNpZ3ZhbCBzaV92YWx1ZTsKK307Cit0eXBlZGVmIHN0cnVjdCBzaWdpbmZvX3Qgc2lnaW5mb190OworCisjICAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9zaWdpbmZvX3R5cGVzIDEKKyMgICBlbmRpZgorCisjICBlbmRpZiAvKiAhMSAqLworCisvKiBXZSBhc3N1bWUgdGhhdCBwbGF0Zm9ybXMgd2hpY2ggbGFjayB0aGUgc2lnYWN0aW9uKCkgZnVuY3Rpb24gYWxzbyBsYWNrCisgICB0aGUgJ3N0cnVjdCBzaWdhY3Rpb24nIHR5cGUsIGFuZCB2aWNlIHZlcnNhLiAgKi8KKworIyAgaWYgIUdOVUxJQl9kZWZpbmVkX3N0cnVjdF9zaWdhY3Rpb24KKworc3RydWN0IHNpZ2FjdGlvbgoreworICB1bmlvbgorICB7CisgICAgdm9pZCAoKl9zYV9oYW5kbGVyKSAoaW50KTsKKyAgICAvKiBQcmVzZW50IHRvIGFsbG93IGNvbXBpbGF0aW9uLCBidXQgdW5zdXBwb3J0ZWQgYnkgZ251bGliLiAgUE9TSVgKKyAgICAgICBzYXlzIHRoYXQgaW1wbGVtZW50YXRpb25zIG1heSwgYnV0IG5vdCBtdXN0LCBtYWtlIHNhX3NpZ2FjdGlvbgorICAgICAgIG92ZXJsYXAgd2l0aCBzYV9oYW5kbGVyLCBidXQgd2Uga25vdyBvZiBubyBpbXBsZW1lbnRhdGlvbiB3aGVyZQorICAgICAgIHRoZXkgZG8gbm90IG92ZXJsYXAuICAqLworICAgIHZvaWQgKCpfc2Ffc2lnYWN0aW9uKSAoaW50LCBzaWdpbmZvX3QgKiwgdm9pZCAqKTsKKyAgfSBfc2FfZnVuYzsKKyAgc2lnc2V0X3Qgc2FfbWFzazsKKyAgLyogTm90IGFsbCBQT1NJWCBmbGFncyBhcmUgc3VwcG9ydGVkLiAgKi8KKyAgaW50IHNhX2ZsYWdzOworfTsKKyMgICBkZWZpbmUgc2FfaGFuZGxlciBfc2FfZnVuYy5fc2FfaGFuZGxlcgorIyAgIGRlZmluZSBzYV9zaWdhY3Rpb24gX3NhX2Z1bmMuX3NhX3NpZ2FjdGlvbgorLyogVW5zdXBwb3J0ZWQgZmxhZ3MgYXJlIG5vdCBwcmVzZW50LiAgKi8KKyMgICBkZWZpbmUgU0FfUkVTRVRIQU5EIDEKKyMgICBkZWZpbmUgU0FfTk9ERUZFUiAyCisjICAgZGVmaW5lIFNBX1JFU1RBUlQgNAorCisjICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX3N0cnVjdF9zaWdhY3Rpb24gMQorIyAgZW5kaWYKKworX0dMX0ZVTkNERUNMX1NZUyAoc2lnYWN0aW9uLCBpbnQsIChpbnQsIGNvbnN0IHN0cnVjdCBzaWdhY3Rpb24gKnJlc3RyaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uICpyZXN0cmljdCkpOworCisjIGVsaWYgITEKKworIyAgZGVmaW5lIHNhX3NpZ2FjdGlvbiBzYV9oYW5kbGVyCisKKyMgZW5kaWYgLyogITEsICExICovCisKK19HTF9DWFhBTElBU19TWVMgKHNpZ2FjdGlvbiwgaW50LCAoaW50LCBjb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uICpyZXN0cmljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiAqcmVzdHJpY3QpKTsKK19HTF9DWFhBTElBU1dBUk4gKHNpZ2FjdGlvbik7CisKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc2lnYWN0aW9uCisjIGlmIEhBVkVfUkFXX0RFQ0xfU0lHQUNUSU9OCitfR0xfV0FSTl9PTl9VU0UgKHNpZ2FjdGlvbiwgInNpZ2FjdGlvbiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIHRoZSBnbnVsaWIgbW9kdWxlIHNpZ2FjdGlvbiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBTb21lIHN5c3RlbXMgZG9uJ3QgaGF2ZSBTQV9OT0RFRkVSLiAgKi8KKyNpZm5kZWYgU0FfTk9ERUZFUgorIyBkZWZpbmUgU0FfTk9ERUZFUiAwCisjZW5kaWYKKworCisjZW5kaWYgLyogX0dMX1NJR05BTF9IICovCisjZW5kaWYgLyogX0dMX1NJR05BTF9IICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2Rhcndpbi1saWIvc3Bhd24uaCBiL2Rhcndpbi1saWIvc3Bhd24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTgyZWQyCi0tLSAvZGV2L251bGwKKysrIGIvZGFyd2luLWxpYi9zcGF3bi5oCkBAIC0wLDAgKzEsMTE5MyBAQAorLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLworLyogRGVmaW5pdGlvbnMgZm9yIFBPU0lYIHNwYXduIGludGVyZmFjZS4KKyAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMy0yMDA0LCAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBfR0xfU1BBV05fSAorCisjaWYgX19HTlVDX18gPj0gMworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorI2VuZGlmCisKKworLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworI2lmIDEKKyMgaW5jbHVkZV9uZXh0IDxzcGF3bi5oPgorI2VuZGlmCisKKyNpZm5kZWYgX0dMX1NQQVdOX0gKKyNkZWZpbmUgX0dMX1NQQVdOX0gKKworLyogR2V0IGRlZmluaXRpb25zIG9mICdzdHJ1Y3Qgc2NoZWRfcGFyYW0nIGFuZCAnc2lnc2V0X3QnLgorICAgQnV0IGF2b2lkIG5hbWVzcGFjZSBwb2xsdXRpb24gb24gZ2xpYmMgc3lzdGVtcy4gICovCisjaWYgIShkZWZpbmVkIF9fR0xJQkNfXyAmJiAhZGVmaW5lZCBfX1VDTElCQ19fKQorIyBpbmNsdWRlIDxzY2hlZC5oPgorIyBpbmNsdWRlIDxzaWduYWwuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpZm5kZWYgX19USFJPVworIyBkZWZpbmUgX19USFJPVworI2VuZGlmCisKKy8qIEdDQyAyLjk1IGFuZCBsYXRlciBoYXZlICJfX3Jlc3RyaWN0IjsgQzk5IGNvbXBpbGVycyBoYXZlCisgICAicmVzdHJpY3QiLCBhbmQgImNvbmZpZ3VyZSIgbWF5IGhhdmUgZGVmaW5lZCAicmVzdHJpY3QiLgorICAgT3RoZXIgY29tcGlsZXJzIHVzZSBfX3Jlc3RyaWN0LCBfX3Jlc3RyaWN0X18sIGFuZCBfUmVzdHJpY3QsIGFuZAorICAgJ2NvbmZpZ3VyZScgbWlnaHQgI2RlZmluZSAncmVzdHJpY3QnIHRvIHRob3NlIHdvcmRzLCBzbyBwaWNrIGEKKyAgIGRpZmZlcmVudCBuYW1lLiAgKi8KKyNpZm5kZWYgX1Jlc3RyaWN0XworIyBpZiAxOTk5MDFMIDw9IF9fU1REQ19WRVJTSU9OX18KKyMgIGRlZmluZSBfUmVzdHJpY3RfIHJlc3RyaWN0CisjIGVsaWYgMiA8IF9fR05VQ19fIHx8ICgyID09IF9fR05VQ19fICYmIDk1IDw9IF9fR05VQ19NSU5PUl9fKQorIyAgZGVmaW5lIF9SZXN0cmljdF8gX19yZXN0cmljdAorIyBlbHNlCisjICBkZWZpbmUgX1Jlc3RyaWN0XworIyBlbmRpZgorI2VuZGlmCisvKiBnY2MgMy4xIGFuZCB1cCBzdXBwb3J0IHRoZSBbcmVzdHJpY3RdIHN5bnRheC4gIERvbid0IHRydXN0CisgICBzeXMvY2RlZnMuaCdzIGRlZmluaXRpb24gb2YgX19yZXN0cmljdF9hcnIsIHRob3VnaCwgYXMgaXQKKyAgIG1pc2hhbmRsZXMgZ2NjIC1hbnNpIC1wZWRhbnRpYy4gICovCisjaWZuZGVmIF9SZXN0cmljdF9hcnJfCisjIGlmICgoMTk5OTAxTCA8PSBfX1NURENfVkVSU0lPTl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgfHwgKCgzIDwgX19HTlVDX18gfHwgKDMgPT0gX19HTlVDX18gJiYgMSA8PSBfX0dOVUNfTUlOT1JfXykpICAgICBcCisgICAgICAgICAgICYmICFkZWZpbmVkIF9fU1RSSUNUX0FOU0lfXykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICYmICFkZWZpbmVkIF9fR05VR19fKQorIyAgZGVmaW5lIF9SZXN0cmljdF9hcnJfIF9SZXN0cmljdF8KKyMgZWxzZQorIyAgZGVmaW5lIF9SZXN0cmljdF9hcnJfCisjIGVuZGlmCisjZW5kaWYKKworLyogVGhlIGRlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwgZXRjLiBhcmUgY29waWVkIGhlcmUuICAqLworI2lmbmRlZiBfR0xfQ1hYREVGU19ICisjZGVmaW5lIF9HTF9DWFhERUZTX0gKKworLyogVGhlIHRocmVlIG1vc3QgZnJlcXVlbnQgdXNlIGNhc2VzIG9mIHRoZXNlIG1hY3JvcyBhcmU6CisKKyAgICogRm9yIHByb3ZpZGluZyBhIHN1YnN0aXR1dGUgZm9yIGEgZnVuY3Rpb24gdGhhdCBpcyBtaXNzaW5nIG9uIHNvbWUKKyAgICAgcGxhdGZvcm1zLCBidXQgaXMgZGVjbGFyZWQgYW5kIHdvcmtzIGZpbmUgb24gdGhlIHBsYXRmb3JtcyBvbiB3aGljaAorICAgICBpdCBleGlzdHM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiAhQEhBVkVfRk9PQAorICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorCisgICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBhbGwgcGxhdGZvcm1zLAorICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBwbGF0Zm9ybXM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACisgICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyAgICAgICAjICAgdW5kZWYgZm9vCisgICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKyAgICAgICAjIGVsc2UKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorCisgICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBzb21lIHBsYXRmb3JtcworICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBvZiB0aGVtIGFuZAorICAgICBpcyBhZGRpdGlvbmFsbHkgZWl0aGVyIG1pc3Npbmcgb3IgdW5kZWNsYXJlZCBvbiBzb21lIG90aGVyIHBsYXRmb3JtczoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorICAgICAgICMgICB1bmRlZiBmb28KKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworICAgICAgICMgZWxzZQorICAgICAgICMgIGlmICFASEFWRV9GT09AICAgb3IgICBpZiAhQEhBVkVfREVDTF9GT09ACisgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKyovCisKKy8qIF9HTF9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cworIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybiAiQyIKKyNlbHNlCisjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuCisjZW5kaWYKKworLyogX0dMX0ZVTkNERUNMX1JQTCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBkZWNsYXJlcyBhIHJlcGxhY2VtZW50IGZ1bmN0aW9uLCBuYW1lZCBycGxfZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCisgICBFeGFtcGxlOgorICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyAqLworI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9GVU5DREVDTF9SUExfMSAocnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykKKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1JQTF8xKHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICBfR0xfRVhURVJOX0MgcmV0dHlwZSBycGxfZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisKKy8qIF9HTF9GVU5DREVDTF9TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgZGVjbGFyZXMgdGhlIHN5c3RlbSBmdW5jdGlvbiwgbmFtZWQgZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCisgICBFeGFtcGxlOgorICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyAqLworI2RlZmluZSBfR0xfRlVOQ0RFQ0xfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9FWFRFUk5fQyByZXR0eXBlIGZ1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworCisvKiBfR0xfQ1hYQUxJQVNfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCisgICB0aGF0IHJlZGlyZWN0cyB0byBycGxfZnVuYywgaWYgR05VTElCX05BTUVTUEFDRSBpcyBkZWZpbmVkLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0NYWEFMSUFTX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CisgKi8KKyNkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpycGxfZnVuYzsgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xIChmdW5jLCBycGxfZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIHJwbF9mdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50CisgICBkZWNsYXJhdGlvbi4gIEEgY2FzdCBpcyB1c2VkIHRvIHNpbGVuY2UgdGhlICJpbnZhbGlkIGNvbnZlcnNpb24iIGVycm9yCisgICB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6cnBsX2Z1bmMpOyAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCisgICB0aGF0IHJlZGlyZWN0cyB0byB0aGUgc3lzdGVtIHByb3ZpZGVkIGZ1bmN0aW9uIGZ1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UKKyAgIGlzIGRlZmluZWQuCisgICBFeGFtcGxlOgorICAgICBfR0xfQ1hYQUxJQVNfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKyAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisgIC8qIElmIHdlIHdlcmUgdG8gd3JpdGUKKyAgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsKKyAgICAgbGlrZSBhYm92ZSBpbiBfR0xfQ1hYQUxJQVNfUlBMXzEsIHRoZSBjb21waWxlciBjb3VsZCBvcHRpbWl6ZSBjYWxscworICAgICBiZXR0ZXIgKHJlbW92ZSBhbiBpbmRpcmVjdGlvbiB0aHJvdWdoIGEgJ3N0YXRpYycgcG9pbnRlciB2YXJpYWJsZSksCisgICAgIGJ1dCB0aGVuIHRoZSBfR0xfQ1hYQUxJQVNXQVJOIG1hY3JvIGJlbG93IHdvdWxkIGNhdXNlIGEgd2FybmluZyBub3Qgb25seQorICAgICBmb3IgdXNlcyBvZiA6OmZ1bmMgYnV0IGFsc28gZm9yIHVzZXMgb2YgR05VTElCX05BTUVTUEFDRTo6ZnVuYy4gICovCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7ICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBmdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGRlY2xhcmF0aW9uLgorICAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IgdGhhdCB3b3VsZAorICAgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6ZnVuYyk7IFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzLCByZXR0eXBlMiwgcGFyYW1ldGVyczIpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBpcyBwaWNrZWQgYW1vbmcgYSBzZXQgb2Ygb3ZlcmxvYWRlZCBmdW5jdGlvbnMsCisgICBuYW1lbHkgdGhlIG9uZSB3aXRoIHJldHR5cGUyIGFuZCBwYXJhbWV0ZXJzMi4gIFR3byBjb25zZWN1dGl2ZSBjYXN0cworICAgYXJlIHVzZWQgdG8gc2lsZW5jZSB0aGUgImNhbm5vdCBmaW5kIGEgbWF0Y2giIGFuZCAiaW52YWxpZCBjb252ZXJzaW9uIgorICAgZXJyb3JzIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorICAvKiBUaGUgb3V0ZXIgY2FzdCBtdXN0IGJlIGEgcmVpbnRlcnByZXRfY2FzdC4KKyAgICAgVGhlIGlubmVyIGNhc3Q6IFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzZXQgb2Ygb3ZlcmxvYWRlZAorICAgICBmdW5jdGlvbnMsIGl0IHdvcmtzIGFzIGEgc3RhdGljX2Nhc3Q8PiwgY2hvb3NpbmcgdGhlIGRlc2lnbmF0ZWQgdmFyaWFudC4KKyAgICAgV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNpbmdsZSB2YXJpYW50LCBpdCB3b3JrcyBhcyBhCisgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Pi4gVGhlIHBhcmVudGhlc2l6ZWQgY2FzdCBzeW50YXggd29ya3MgYm90aCB3YXlzLiAgKi8KKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAocmV0dHlwZTIoKilwYXJhbWV0ZXJzMikoOjpmdW5jKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU1dBUk4gKGZ1bmMpOworICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gOjpmdW5jIGlzIHVzZWQgYnV0IG5vdCB3aGVuCisgICBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICBmdW5jIG11c3QgYmUgZGVmaW5lZCB3aXRob3V0IG92ZXJsb2FkZWQKKyAgIHZhcmlhbnRzLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOXzEgKGZ1bmMsIEdOVUxJQl9OQU1FU1BBQ0UpCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzEoZnVuYyxuYW1lc3BhY2UpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk5fMiAoZnVuYywgbmFtZXNwYWNlKQorLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKyMgaWYgIV9fT1BUSU1JWkVfXworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgIF9HTF9XQVJOX09OX1VTRSAoZnVuYywgXAorICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAorICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKyAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTV0FSTjEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gdGhlIGdpdmVuIG92ZXJsb2FkZWQgdmFyaWFudCBvZiA6OmZ1bmMKKyAgIGlzIHVzZWQgYnV0IG5vdCB3aGVuIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOMV8xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBHTlVMSUJfTkFNRVNQQUNFKQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk4xXzIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIG5hbWVzcGFjZSkKKy8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAorICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCisjIGlmICFfX09QVElNSVpFX18KKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworIyBlbHNlCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworI2VuZGlmIC8qIF9HTF9DWFhERUZTX0ggKi8KKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxMIGlzIGNvcGllZCBoZXJlLiAgKi8KKy8qIF9HTF9BUkdfTk9OTlVMTCgobiwuLi4sbSkpIHRlbGxzIHRoZSBjb21waWxlciBhbmQgc3RhdGljIGFuYWx5emVyIHRvb2xzCisgICB0aGF0IHRoZSB2YWx1ZXMgcGFzc2VkIGFzIGFyZ3VtZW50cyBuLCAuLi4sIG0gbXVzdCBiZSBub24tTlVMTCBwb2ludGVycy4KKyAgIG4gPSAxIHN0YW5kcyBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50LCBuID0gMiBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCBldGMuICAqLworI2lmbmRlZiBfR0xfQVJHX05PTk5VTEwKKyMgaWYgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gMykgfHwgX19HTlVDX18gPiAzCisjICBkZWZpbmUgX0dMX0FSR19OT05OVUxMKHBhcmFtcykgX19hdHRyaWJ1dGVfXyAoKF9fbm9ubnVsbF9fIHBhcmFtcykpCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKQorIyBlbmRpZgorI2VuZGlmCisKKy8qIFRoZSBkZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRSBpcyBjb3BpZWQgaGVyZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX09OX1VTRQorCisjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorLyogQSBjb21waWxlciBhdHRyaWJ1dGUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyA0LjMuMCBhbmQgbGF0ZXIuICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmN0aW9uKSBmdW5jdGlvbiBfX2F0dHJpYnV0ZV9fICgoX193YXJuaW5nX18gKG1lc3NhZ2UpKSkKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKy8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uCisjIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorX0dMX1dBUk5fRVhURVJOX0MgaW50IF9nbF93YXJuX29uX3VzZQorIyBlbmRpZgorI2VuZGlmCisKKy8qIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmN0aW9uLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCAic3RyaW5nIikKKyAgIGlzIGxpa2UgX0dMX1dBUk5fT05fVVNFIChmdW5jdGlvbiwgInN0cmluZyIpLCBleGNlcHQgdGhhdCB0aGUgZnVuY3Rpb24gaXMKKyAgIGRlY2xhcmVkIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywKKyAgIGFuZCBhdHRyaWJ1dGVzLgorICAgVGhpcyB2YXJpYW50IGlzIHVzZWZ1bCBmb3Igb3ZlcmxvYWRlZCBmdW5jdGlvbnMgaW4gQysrLiBfR0xfV0FSTl9PTl9VU0UgZG9lcworICAgbm90IHdvcmsgaW4gdGhpcyBjYXNlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFX0NYWAorIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK2V4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMgXAorICAgICBfX2F0dHJpYnV0ZV9fICgoX193YXJuaW5nX18gKG1zZykpKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK2V4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCitfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisjIGVuZGlmCisjZW5kaWYKKworLyogX0dMX1dBUk5fRVhURVJOX0MgZGVjbGFyYXRpb247CisgICBwZXJmb3JtcyB0aGUgZGVjbGFyYXRpb24gd2l0aCBDIGxpbmthZ2UuICAqLworI2lmbmRlZiBfR0xfV0FSTl9FWFRFUk5fQworIyBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisjICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuICJDIgorIyBlbHNlCisjICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBEYXRhIHN0cnVjdHVyZSB0byBjb250YWluIGF0dHJpYnV0ZXMgZm9yIHRocmVhZCBjcmVhdGlvbi4gICovCisjaWYgMAorIyBkZWZpbmUgcG9zaXhfc3Bhd25hdHRyX3QgcnBsX3Bvc2l4X3NwYXduYXR0cl90CisjZW5kaWYKKyNpZiAwIHx8ICExCisjIGlmICFHTlVMSUJfZGVmaW5lZF9wb3NpeF9zcGF3bmF0dHJfdAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgc2hvcnQgaW50IF9mbGFnczsKKyAgcGlkX3QgX3BncnA7CisgIHNpZ3NldF90IF9zZDsKKyAgc2lnc2V0X3QgX3NzOworICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gX3NwOworICBpbnQgX3BvbGljeTsKKyAgaW50IF9fcGFkWzE2XTsKK30gcG9zaXhfc3Bhd25hdHRyX3Q7CisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfcG9zaXhfc3Bhd25hdHRyX3QgMQorIyBlbmRpZgorI2VuZGlmCisKKworLyogRGF0YSBzdHJ1Y3R1cmUgdG8gY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWN0aW9ucyB0byBiZQorICAgcGVyZm9ybWVkIGluIHRoZSBuZXcgcHJvY2VzcyB3aXRoIHJlc3BlY3QgdG8gZmlsZSBkZXNjcmlwdG9ycy4gICovCisjaWYgMAorIyBkZWZpbmUgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgcnBsX3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190CisjZW5kaWYKKyNpZiAwIHx8ICExCisjIGlmICFHTlVMSUJfZGVmaW5lZF9wb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgaW50IF9hbGxvY2F0ZWQ7CisgIGludCBfdXNlZDsKKyAgc3RydWN0IF9fc3Bhd25fYWN0aW9uICpfYWN0aW9uczsKKyAgaW50IF9fcGFkWzE2XTsKK30gcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3Q7CisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgMQorIyBlbmRpZgorI2VuZGlmCisKKworLyogRmxhZ3MgdG8gYmUgc2V0IGluIHRoZSAncG9zaXhfc3Bhd25hdHRyX3QnLiAgKi8KKyNpZiAxCisvKiBVc2UgdGhlIHZhbHVlcyBmcm9tIHRoZSBzeXN0ZW0sIGJ1dCBwcm92aWRlIHRoZSBtaXNzaW5nIG9uZXMuICAqLworIyBpZm5kZWYgUE9TSVhfU1BBV05fU0VUU0NIRURQQVJBTQorIyAgZGVmaW5lIFBPU0lYX1NQQVdOX1NFVFNDSEVEUEFSQU0gMAorIyBlbmRpZgorIyBpZm5kZWYgUE9TSVhfU1BBV05fU0VUU0NIRURVTEVSCisjICBkZWZpbmUgUE9TSVhfU1BBV05fU0VUU0NIRURVTEVSIDAKKyMgZW5kaWYKKyNlbHNlCisjIGlmIDAKKy8qIFVzZSB0aGUgdmFsdWVzIGZyb20gdGhlIHN5c3RlbSwgZm9yIGJldHRlciBjb21wYXRpYmlsaXR5LiAgKi8KKy8qIEJ1dCB0aGlzIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHN1cHBvcnQgQUlYIGV4dGVuc2lvbnMuICAqLworIyAgdW5kZWYgUE9TSVhfU1BBV05fRk9SS19IQU5ETEVSUworIyBlbHNlCisjICBkZWZpbmUgUE9TSVhfU1BBV05fUkVTRVRJRFMgICAgICAgICAgIDB4MDEKKyMgIGRlZmluZSBQT1NJWF9TUEFXTl9TRVRQR1JPVVAgICAgICAgICAgMHgwMgorIyAgZGVmaW5lIFBPU0lYX1NQQVdOX1NFVFNJR0RFRiAgICAgICAgICAweDA0CisjICBkZWZpbmUgUE9TSVhfU1BBV05fU0VUU0lHTUFTSyAgICAgICAgIDB4MDgKKyMgIGRlZmluZSBQT1NJWF9TUEFXTl9TRVRTQ0hFRFBBUkFNICAgICAgMHgxMAorIyAgZGVmaW5lIFBPU0lYX1NQQVdOX1NFVFNDSEVEVUxFUiAgICAgICAweDIwCisjIGVuZGlmCisjZW5kaWYKKy8qIEEgR05VIGV4dGVuc2lvbi4gIFVzZSB0aGUgbmV4dCBmcmVlIGJpdCBwb3NpdGlvbi4gICovCisjZGVmaW5lIFBPU0lYX1NQQVdOX1VTRVZGT1JLIFwKKyAgKChQT1NJWF9TUEFXTl9SRVNFVElEUyB8IChQT1NJWF9TUEFXTl9SRVNFVElEUyAtIDEpICAgICAgICAgICAgICAgICAgICAgXAorICAgIHwgUE9TSVhfU1BBV05fU0VUUEdST1VQIHwgKFBPU0lYX1NQQVdOX1NFVFBHUk9VUCAtIDEpICAgICAgICAgICAgICAgICBcCisgICAgfCBQT1NJWF9TUEFXTl9TRVRTSUdERUYgfCAoUE9TSVhfU1BBV05fU0VUU0lHREVGIC0gMSkgICAgICAgICAgICAgICAgIFwKKyAgICB8IFBPU0lYX1NQQVdOX1NFVFNJR01BU0sgfCAoUE9TSVhfU1BBV05fU0VUU0lHTUFTSyAtIDEpICAgICAgICAgICAgICAgXAorICAgIHwgUE9TSVhfU1BBV05fU0VUU0NIRURQQVJBTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfCAoUE9TSVhfU1BBV05fU0VUU0NIRURQQVJBTSA+IDAgPyBQT1NJWF9TUEFXTl9TRVRTQ0hFRFBBUkFNIC0gMSA6IDApIFwKKyAgICB8IFBPU0lYX1NQQVdOX1NFVFNDSEVEVUxFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHwgKFBPU0lYX1NQQVdOX1NFVFNDSEVEVUxFUiA+IDAgPyBQT1NJWF9TUEFXTl9TRVRTQ0hFRFVMRVIgLSAxIDogMCkpICBcCisgICArIDEpCisjaWYgIUdOVUxJQl9kZWZpbmVkX3ZlcmlmeV9QT1NJWF9TUEFXTl9VU0VWRk9SS19ub19vdmVybGFwCit0eXBlZGVmIGludCB2ZXJpZnlfUE9TSVhfU1BBV05fVVNFVkZPUktfbm9fb3ZlcmxhcAorICAgICAgICAgICAgWygoKFBPU0lYX1NQQVdOX1JFU0VUSURTIHwgUE9TSVhfU1BBV05fU0VUUEdST1VQCisgICAgICAgICAgICAgICAgfCBQT1NJWF9TUEFXTl9TRVRTSUdERUYgfCBQT1NJWF9TUEFXTl9TRVRTSUdNQVNLCisgICAgICAgICAgICAgICAgfCBQT1NJWF9TUEFXTl9TRVRTQ0hFRFBBUkFNIHwgUE9TSVhfU1BBV05fU0VUU0NIRURVTEVSKQorICAgICAgICAgICAgICAgJiBQT1NJWF9TUEFXTl9VU0VWRk9SSykKKyAgICAgICAgICAgICAgPT0gMCkKKyAgICAgICAgICAgICA/IDEgOiAtMV07CisjIGRlZmluZSBHTlVMSUJfZGVmaW5lZF92ZXJpZnlfUE9TSVhfU1BBV05fVVNFVkZPUktfbm9fb3ZlcmxhcCAxCisjZW5kaWYKKworCisjaWYgMAorLyogU3Bhd24gYSBuZXcgcHJvY2VzcyBleGVjdXRpbmcgUEFUSCB3aXRoIHRoZSBhdHRyaWJ1dGVzIGRlc2NyaWJlcyBpbiAqQVRUUlAuCisgICBCZWZvcmUgcnVubmluZyB0aGUgcHJvY2VzcyBwZXJmb3JtIHRoZSBhY3Rpb25zIGRlc2NyaWJlZCBpbiBGSUxFLUFDVElPTlMuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnRzIGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBwb3NpeF9zcGF3biBycGxfcG9zaXhfc3Bhd24KKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwb3NpeF9zcGF3biwgaW50LAorICAgICAgICAgICAgICAgICAgKHBpZF90ICpfUmVzdHJpY3RfIF9fcGlkLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9SZXN0cmljdF8gX19wYXRoLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfUmVzdHJpY3RfIF9fZmlsZV9hY3Rpb25zLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0cnAsCisgICAgICAgICAgICAgICAgICAgY2hhciAqY29uc3QgYXJndltfUmVzdHJpY3RfYXJyX10sCisgICAgICAgICAgICAgICAgICAgY2hhciAqY29uc3QgZW52cFtfUmVzdHJpY3RfYXJyX10pCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyLCA1LCA2KSkpOworX0dMX0NYWEFMSUFTX1JQTCAocG9zaXhfc3Bhd24sIGludCwKKyAgICAgICAgICAgICAgICAgIChwaWRfdCAqX1Jlc3RyaWN0XyBfX3BpZCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfUmVzdHJpY3RfIF9fcGF0aCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqX1Jlc3RyaWN0XyBfX2ZpbGVfYWN0aW9ucywKKyAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHJwLAorICAgICAgICAgICAgICAgICAgIGNoYXIgKmNvbnN0IGFyZ3ZbX1Jlc3RyaWN0X2Fycl9dLAorICAgICAgICAgICAgICAgICAgIGNoYXIgKmNvbnN0IGVudnBbX1Jlc3RyaWN0X2Fycl9dKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChwb3NpeF9zcGF3biwgaW50LAorICAgICAgICAgICAgICAgICAgKHBpZF90ICpfUmVzdHJpY3RfIF9fcGlkLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9SZXN0cmljdF8gX19wYXRoLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfUmVzdHJpY3RfIF9fZmlsZV9hY3Rpb25zLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0cnAsCisgICAgICAgICAgICAgICAgICAgY2hhciAqY29uc3QgYXJndltfUmVzdHJpY3RfYXJyX10sCisgICAgICAgICAgICAgICAgICAgY2hhciAqY29uc3QgZW52cFtfUmVzdHJpY3RfYXJyX10pCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyLCA1LCA2KSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X3NwYXduLCBpbnQsCisgICAgICAgICAgICAgICAgICAocGlkX3QgKl9SZXN0cmljdF8gX19waWQsCisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX1Jlc3RyaWN0XyBfX3BhdGgsCisgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9SZXN0cmljdF8gX19maWxlX2FjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRycCwKKyAgICAgICAgICAgICAgICAgICBjaGFyICpjb25zdCBhcmd2W19SZXN0cmljdF9hcnJfXSwKKyAgICAgICAgICAgICAgICAgICBjaGFyICpjb25zdCBlbnZwW19SZXN0cmljdF9hcnJfXSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocG9zaXhfc3Bhd24pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bgorIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOCitfR0xfV0FSTl9PTl9VU0UgKHBvc2l4X3NwYXduLCAicG9zaXhfc3Bhd24gaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAxCisvKiBTaW1pbGFyIHRvICdwb3NpeF9zcGF3bicgYnV0IHNlYXJjaCBmb3IgRklMRSBpbiB0aGUgUEFUSC4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludHMgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBwb3NpeF9zcGF3bnAgcnBsX3Bvc2l4X3NwYXducAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHBvc2l4X3NwYXducCwgaW50LAorICAgICAgICAgICAgICAgICAgKHBpZF90ICpfX3BpZCwgY29uc3QgY2hhciAqX19maWxlLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfX2ZpbGVfYWN0aW9ucywKKyAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX19hdHRycCwKKyAgICAgICAgICAgICAgICAgICBjaGFyICpjb25zdCBhcmd2W10sIGNoYXIgKmNvbnN0IGVudnBbXSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIsIDUsIDYpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwb3NpeF9zcGF3bnAsIGludCwKKyAgICAgICAgICAgICAgICAgIChwaWRfdCAqX19waWQsIGNvbnN0IGNoYXIgKl9fZmlsZSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqX19maWxlX2FjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9fYXR0cnAsCisgICAgICAgICAgICAgICAgICAgY2hhciAqY29uc3QgYXJndltdLCBjaGFyICpjb25zdCBlbnZwW10pKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXducCwgaW50LAorICAgICAgICAgICAgICAgICAgKHBpZF90ICpfX3BpZCwgY29uc3QgY2hhciAqX19maWxlLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfX2ZpbGVfYWN0aW9ucywKKyAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX19hdHRycCwKKyAgICAgICAgICAgICAgICAgICBjaGFyICpjb25zdCBhcmd2W10sIGNoYXIgKmNvbnN0IGVudnBbXSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIsIDUsIDYpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocG9zaXhfc3Bhd25wLCBpbnQsCisgICAgICAgICAgICAgICAgICAocGlkX3QgKl9fcGlkLCBjb25zdCBjaGFyICpfX2ZpbGUsCisgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9fZmlsZV9hY3Rpb25zLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHJwLAorICAgICAgICAgICAgICAgICAgIGNoYXIgKmNvbnN0IGFyZ3ZbXSwgY2hhciAqY29uc3QgZW52cFtdKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwb3NpeF9zcGF3bnApOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bnAKKyMgaWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTlAKK19HTF9XQVJOX09OX1VTRSAocG9zaXhfc3Bhd25wLCAicG9zaXhfc3Bhd25wIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bnAgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMQorLyogSW5pdGlhbGl6ZSBkYXRhIHN0cnVjdHVyZSB3aXRoIGF0dHJpYnV0ZXMgZm9yICdzcGF3bicgdG8gZGVmYXVsdCB2YWx1ZXMuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBwb3NpeF9zcGF3bmF0dHJfaW5pdCBycGxfcG9zaXhfc3Bhd25hdHRyX2luaXQKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwb3NpeF9zcGF3bmF0dHJfaW5pdCwgaW50LCAocG9zaXhfc3Bhd25hdHRyX3QgKl9fYXR0cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHBvc2l4X3NwYXduYXR0cl9pbml0LCBpbnQsIChwb3NpeF9zcGF3bmF0dHJfdCAqX19hdHRyKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChwb3NpeF9zcGF3bmF0dHJfaW5pdCwgaW50LCAocG9zaXhfc3Bhd25hdHRyX3QgKl9fYXR0cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwb3NpeF9zcGF3bmF0dHJfaW5pdCwgaW50LCAocG9zaXhfc3Bhd25hdHRyX3QgKl9fYXR0cikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocG9zaXhfc3Bhd25hdHRyX2luaXQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bmF0dHJfaW5pdAorIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9JTklUCitfR0xfV0FSTl9PTl9VU0UgKHBvc2l4X3NwYXduYXR0cl9pbml0LCAicG9zaXhfc3Bhd25hdHRyX2luaXQgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9pbml0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAxCisvKiBGcmVlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggQVRUUi4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHBvc2l4X3NwYXduYXR0cl9kZXN0cm95IHJwbF9wb3NpeF9zcGF3bmF0dHJfZGVzdHJveQorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHBvc2l4X3NwYXduYXR0cl9kZXN0cm95LCBpbnQsIChwb3NpeF9zcGF3bmF0dHJfdCAqX19hdHRyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocG9zaXhfc3Bhd25hdHRyX2Rlc3Ryb3ksIGludCwgKHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHIpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduYXR0cl9kZXN0cm95LCBpbnQsIChwb3NpeF9zcGF3bmF0dHJfdCAqX19hdHRyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X3NwYXduYXR0cl9kZXN0cm95LCBpbnQsIChwb3NpeF9zcGF3bmF0dHJfdCAqX19hdHRyKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwb3NpeF9zcGF3bmF0dHJfZGVzdHJveSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHBvc2l4X3NwYXduYXR0cl9kZXN0cm95CisjIGlmIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05BVFRSX0RFU1RST1kKK19HTF9XQVJOX09OX1VTRSAocG9zaXhfc3Bhd25hdHRyX2Rlc3Ryb3ksCisgICAgICAgICAgICAgICAgICJwb3NpeF9zcGF3bmF0dHJfZGVzdHJveSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25hdHRyX2Rlc3Ryb3kgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKy8qIFN0b3JlIHNpZ25hbCBtYXNrIGZvciBzaWduYWxzIHdpdGggZGVmYXVsdCBoYW5kbGluZyBmcm9tIEFUVFIgaW4KKyAgIFNJR0RFRkFVTFQuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBwb3NpeF9zcGF3bmF0dHJfZ2V0c2lnZGVmYXVsdCBycGxfcG9zaXhfc3Bhd25hdHRyX2dldHNpZ2RlZmF1bHQKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwb3NpeF9zcGF3bmF0dHJfZ2V0c2lnZGVmYXVsdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBzaWdzZXRfdCAqX1Jlc3RyaWN0XyBfX3NpZ2RlZmF1bHQpCisgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwb3NpeF9zcGF3bmF0dHJfZ2V0c2lnZGVmYXVsdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBzaWdzZXRfdCAqX1Jlc3RyaWN0XyBfX3NpZ2RlZmF1bHQpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduYXR0cl9nZXRzaWdkZWZhdWx0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIHNpZ3NldF90ICpfUmVzdHJpY3RfIF9fc2lnZGVmYXVsdCkKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwb3NpeF9zcGF3bmF0dHJfZ2V0c2lnZGVmYXVsdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBzaWdzZXRfdCAqX1Jlc3RyaWN0XyBfX3NpZ2RlZmF1bHQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHBvc2l4X3NwYXduYXR0cl9nZXRzaWdkZWZhdWx0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcG9zaXhfc3Bhd25hdHRyX2dldHNpZ2RlZmF1bHQKKyMgaWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfR0VUU0lHREVGQVVMVAorX0dMX1dBUk5fT05fVVNFIChwb3NpeF9zcGF3bmF0dHJfZ2V0c2lnZGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgInBvc2l4X3NwYXduYXR0cl9nZXRzaWdkZWZhdWx0IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bmF0dHJfZ2V0c2lnZGVmYXVsdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorLyogU2V0IHNpZ25hbCBtYXNrIGZvciBzaWduYWxzIHdpdGggZGVmYXVsdCBoYW5kbGluZyBpbiBBVFRSIHRvIFNJR0RFRkFVTFQuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBwb3NpeF9zcGF3bmF0dHJfc2V0c2lnZGVmYXVsdCBycGxfcG9zaXhfc3Bhd25hdHRyX3NldHNpZ2RlZmF1bHQKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwb3NpeF9zcGF3bmF0dHJfc2V0c2lnZGVmYXVsdCwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzaWdzZXRfdCAqX1Jlc3RyaWN0XyBfX3NpZ2RlZmF1bHQpCisgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwb3NpeF9zcGF3bmF0dHJfc2V0c2lnZGVmYXVsdCwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzaWdzZXRfdCAqX1Jlc3RyaWN0XyBfX3NpZ2RlZmF1bHQpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduYXR0cl9zZXRzaWdkZWZhdWx0LCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ3NldF90ICpfUmVzdHJpY3RfIF9fc2lnZGVmYXVsdCkKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwb3NpeF9zcGF3bmF0dHJfc2V0c2lnZGVmYXVsdCwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzaWdzZXRfdCAqX1Jlc3RyaWN0XyBfX3NpZ2RlZmF1bHQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHBvc2l4X3NwYXduYXR0cl9zZXRzaWdkZWZhdWx0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcG9zaXhfc3Bhd25hdHRyX3NldHNpZ2RlZmF1bHQKKyMgaWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfU0VUU0lHREVGQVVMVAorX0dMX1dBUk5fT05fVVNFIChwb3NpeF9zcGF3bmF0dHJfc2V0c2lnZGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgInBvc2l4X3NwYXduYXR0cl9zZXRzaWdkZWZhdWx0IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bmF0dHJfc2V0c2lnZGVmYXVsdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorLyogU3RvcmUgc2lnbmFsIG1hc2sgZm9yIHRoZSBuZXcgcHJvY2VzcyBmcm9tIEFUVFIgaW4gU0lHTUFTSy4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHBvc2l4X3NwYXduYXR0cl9nZXRzaWdtYXNrIHJwbF9wb3NpeF9zcGF3bmF0dHJfZ2V0c2lnbWFzaworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHBvc2l4X3NwYXduYXR0cl9nZXRzaWdtYXNrLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIHNpZ3NldF90ICpfUmVzdHJpY3RfIF9fc2lnbWFzaykKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHBvc2l4X3NwYXduYXR0cl9nZXRzaWdtYXNrLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIHNpZ3NldF90ICpfUmVzdHJpY3RfIF9fc2lnbWFzaykpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocG9zaXhfc3Bhd25hdHRyX2dldHNpZ21hc2ssIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgc2lnc2V0X3QgKl9SZXN0cmljdF8gX19zaWdtYXNrKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X3NwYXduYXR0cl9nZXRzaWdtYXNrLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIHNpZ3NldF90ICpfUmVzdHJpY3RfIF9fc2lnbWFzaykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocG9zaXhfc3Bhd25hdHRyX2dldHNpZ21hc2spOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bmF0dHJfZ2V0c2lnbWFzaworIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdNQVNLCitfR0xfV0FSTl9PTl9VU0UgKHBvc2l4X3NwYXduYXR0cl9nZXRzaWdtYXNrLAorICAgICAgICAgICAgICAgICAicG9zaXhfc3Bhd25hdHRyX2dldHNpZ21hc2sgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9nZXRzaWdtYXNrIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAxCisvKiBTZXQgc2lnbmFsIG1hc2sgZm9yIHRoZSBuZXcgcHJvY2VzcyBpbiBBVFRSIHRvIFNJR01BU0suICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBwb3NpeF9zcGF3bmF0dHJfc2V0c2lnbWFzayBycGxfcG9zaXhfc3Bhd25hdHRyX3NldHNpZ21hc2sKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwb3NpeF9zcGF3bmF0dHJfc2V0c2lnbWFzaywgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzaWdzZXRfdCAqX1Jlc3RyaWN0XyBfX3NpZ21hc2spCisgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwb3NpeF9zcGF3bmF0dHJfc2V0c2lnbWFzaywgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzaWdzZXRfdCAqX1Jlc3RyaWN0XyBfX3NpZ21hc2spKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduYXR0cl9zZXRzaWdtYXNrLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ3NldF90ICpfUmVzdHJpY3RfIF9fc2lnbWFzaykKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwb3NpeF9zcGF3bmF0dHJfc2V0c2lnbWFzaywgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzaWdzZXRfdCAqX1Jlc3RyaWN0XyBfX3NpZ21hc2spKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHBvc2l4X3NwYXduYXR0cl9zZXRzaWdtYXNrKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcG9zaXhfc3Bhd25hdHRyX3NldHNpZ21hc2sKKyMgaWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfU0VUU0lHTUFTSworX0dMX1dBUk5fT05fVVNFIChwb3NpeF9zcGF3bmF0dHJfc2V0c2lnbWFzaywKKyAgICAgICAgICAgICAgICAgInBvc2l4X3NwYXduYXR0cl9zZXRzaWdtYXNrIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bmF0dHJfc2V0c2lnbWFzayBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorLyogR2V0IGZsYWcgd29yZCBmcm9tIHRoZSBhdHRyaWJ1dGUgc3RydWN0dXJlLiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgcG9zaXhfc3Bhd25hdHRyX2dldGZsYWdzIHJwbF9wb3NpeF9zcGF3bmF0dHJfZ2V0ZmxhZ3MKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwb3NpeF9zcGF3bmF0dHJfZ2V0ZmxhZ3MsIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgc2hvcnQgaW50ICpfUmVzdHJpY3RfIF9fZmxhZ3MpCisgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwb3NpeF9zcGF3bmF0dHJfZ2V0ZmxhZ3MsIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgc2hvcnQgaW50ICpfUmVzdHJpY3RfIF9fZmxhZ3MpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduYXR0cl9nZXRmbGFncywgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBzaG9ydCBpbnQgKl9SZXN0cmljdF8gX19mbGFncykKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwb3NpeF9zcGF3bmF0dHJfZ2V0ZmxhZ3MsIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgc2hvcnQgaW50ICpfUmVzdHJpY3RfIF9fZmxhZ3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHBvc2l4X3NwYXduYXR0cl9nZXRmbGFncyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHBvc2l4X3NwYXduYXR0cl9nZXRmbGFncworIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9HRVRGTEFHUworX0dMX1dBUk5fT05fVVNFIChwb3NpeF9zcGF3bmF0dHJfZ2V0ZmxhZ3MsCisgICAgICAgICAgICAgICAgICJwb3NpeF9zcGF3bmF0dHJfZ2V0ZmxhZ3MgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9nZXRmbGFncyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMQorLyogU3RvcmUgZmxhZ3MgaW4gdGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBwb3NpeF9zcGF3bmF0dHJfc2V0ZmxhZ3MgcnBsX3Bvc2l4X3NwYXduYXR0cl9zZXRmbGFncworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHBvc2l4X3NwYXduYXR0cl9zZXRmbGFncywgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHIsIHNob3J0IGludCBfX2ZsYWdzKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocG9zaXhfc3Bhd25hdHRyX3NldGZsYWdzLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25hdHRyX3QgKl9fYXR0ciwgc2hvcnQgaW50IF9fZmxhZ3MpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduYXR0cl9zZXRmbGFncywgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHIsIHNob3J0IGludCBfX2ZsYWdzKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X3NwYXduYXR0cl9zZXRmbGFncywgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHIsIHNob3J0IGludCBfX2ZsYWdzKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwb3NpeF9zcGF3bmF0dHJfc2V0ZmxhZ3MpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bmF0dHJfc2V0ZmxhZ3MKKyMgaWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfU0VURkxBR1MKK19HTF9XQVJOX09OX1VTRSAocG9zaXhfc3Bhd25hdHRyX3NldGZsYWdzLAorICAgICAgICAgICAgICAgICAicG9zaXhfc3Bhd25hdHRyX3NldGZsYWdzIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bmF0dHJfc2V0ZmxhZ3MgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKy8qIEdldCBwcm9jZXNzIGdyb3VwIElEIGZyb20gdGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBwb3NpeF9zcGF3bmF0dHJfZ2V0cGdyb3VwIHJwbF9wb3NpeF9zcGF3bmF0dHJfZ2V0cGdyb3VwCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocG9zaXhfc3Bhd25hdHRyX2dldHBncm91cCwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBwaWRfdCAqX1Jlc3RyaWN0XyBfX3Bncm91cCkKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHBvc2l4X3NwYXduYXR0cl9nZXRwZ3JvdXAsIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgcGlkX3QgKl9SZXN0cmljdF8gX19wZ3JvdXApKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduYXR0cl9nZXRwZ3JvdXAsIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgcGlkX3QgKl9SZXN0cmljdF8gX19wZ3JvdXApCisgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocG9zaXhfc3Bhd25hdHRyX2dldHBncm91cCwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBwaWRfdCAqX1Jlc3RyaWN0XyBfX3Bncm91cCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocG9zaXhfc3Bhd25hdHRyX2dldHBncm91cCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHBvc2l4X3NwYXduYXR0cl9nZXRwZ3JvdXAKKyMgaWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfR0VUUEdST1VQCitfR0xfV0FSTl9PTl9VU0UgKHBvc2l4X3NwYXduYXR0cl9nZXRwZ3JvdXAsCisgICAgICAgICAgICAgICAgICJwb3NpeF9zcGF3bmF0dHJfZ2V0cGdyb3VwIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bmF0dHJfZ2V0cGdyb3VwIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisvKiBTdG9yZSBwcm9jZXNzIGdyb3VwIElEIGluIHRoZSBhdHRyaWJ1dGUgc3RydWN0dXJlLiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgcG9zaXhfc3Bhd25hdHRyX3NldHBncm91cCBycGxfcG9zaXhfc3Bhd25hdHRyX3NldHBncm91cAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHBvc2l4X3NwYXduYXR0cl9zZXRwZ3JvdXAsIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bmF0dHJfdCAqX19hdHRyLCBwaWRfdCBfX3Bncm91cCkKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHBvc2l4X3NwYXduYXR0cl9zZXRwZ3JvdXAsIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bmF0dHJfdCAqX19hdHRyLCBwaWRfdCBfX3Bncm91cCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocG9zaXhfc3Bhd25hdHRyX3NldHBncm91cCwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHIsIHBpZF90IF9fcGdyb3VwKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X3NwYXduYXR0cl9zZXRwZ3JvdXAsIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bmF0dHJfdCAqX19hdHRyLCBwaWRfdCBfX3Bncm91cCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocG9zaXhfc3Bhd25hdHRyX3NldHBncm91cCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHBvc2l4X3NwYXduYXR0cl9zZXRwZ3JvdXAKKyMgaWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfU0VUUEdST1VQCitfR0xfV0FSTl9PTl9VU0UgKHBvc2l4X3NwYXduYXR0cl9zZXRwZ3JvdXAsCisgICAgICAgICAgICAgICAgICJwb3NpeF9zcGF3bmF0dHJfc2V0cGdyb3VwIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bmF0dHJfc2V0cGdyb3VwIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisvKiBHZXQgc2NoZWR1bGluZyBwb2xpY3kgZnJvbSB0aGUgYXR0cmlidXRlIHN0cnVjdHVyZS4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBvbGljeSBycGxfcG9zaXhfc3Bhd25hdHRyX2dldHNjaGVkcG9saWN5CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocG9zaXhfc3Bhd25hdHRyX2dldHNjaGVkcG9saWN5LCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIGludCAqX1Jlc3RyaWN0XyBfX3NjaGVkcG9saWN5KQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocG9zaXhfc3Bhd25hdHRyX2dldHNjaGVkcG9saWN5LCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIGludCAqX1Jlc3RyaWN0XyBfX3NjaGVkcG9saWN5KSk7CisjIGVsc2UKKyMgIGlmICExIHx8IFBPU0lYX1NQQVdOX1NFVFNDSEVEVUxFUiA9PSAwCitfR0xfRlVOQ0RFQ0xfU1lTIChwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwb2xpY3ksIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgaW50ICpfUmVzdHJpY3RfIF9fc2NoZWRwb2xpY3kpCisgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocG9zaXhfc3Bhd25hdHRyX2dldHNjaGVkcG9saWN5LCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIGludCAqX1Jlc3RyaWN0XyBfX3NjaGVkcG9saWN5KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwb2xpY3kpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwb2xpY3kKKyMgaWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfR0VUU0NIRURQT0xJQ1kKK19HTF9XQVJOX09OX1VTRSAocG9zaXhfc3Bhd25hdHRyX2dldHNjaGVkcG9saWN5LAorICAgICAgICAgICAgICAgICAicG9zaXhfc3Bhd25hdHRyX2dldHNjaGVkcG9saWN5IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwb2xpY3kgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKy8qIFN0b3JlIHNjaGVkdWxpbmcgcG9saWN5IGluIHRoZSBhdHRyaWJ1dGUgc3RydWN0dXJlLiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgcG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcG9saWN5IHJwbF9wb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwb2xpY3kKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwb2xpY3ksIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bmF0dHJfdCAqX19hdHRyLCBpbnQgX19zY2hlZHBvbGljeSkKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBvbGljeSwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHIsIGludCBfX3NjaGVkcG9saWN5KSk7CisjIGVsc2UKKyMgIGlmICExIHx8IFBPU0lYX1NQQVdOX1NFVFNDSEVEVUxFUiA9PSAwCitfR0xfRlVOQ0RFQ0xfU1lTIChwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwb2xpY3ksIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bmF0dHJfdCAqX19hdHRyLCBpbnQgX19zY2hlZHBvbGljeSkKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwb2xpY3ksIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bmF0dHJfdCAqX19hdHRyLCBpbnQgX19zY2hlZHBvbGljeSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcG9saWN5KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcG9saWN5CisjIGlmIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05BVFRSX1NFVFNDSEVEUE9MSUNZCitfR0xfV0FSTl9PTl9VU0UgKHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBvbGljeSwKKyAgICAgICAgICAgICAgICAgInBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBvbGljeSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcG9saWN5IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisvKiBHZXQgc2NoZWR1bGluZyBwYXJhbWV0ZXJzIGZyb20gdGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwYXJhbSBycGxfcG9zaXhfc3Bhd25hdHRyX2dldHNjaGVkcGFyYW0KKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwYXJhbSwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9SZXN0cmljdF8gX19zY2hlZHBhcmFtKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocG9zaXhfc3Bhd25hdHRyX2dldHNjaGVkcGFyYW0sIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICpfUmVzdHJpY3RfIF9fc2NoZWRwYXJhbSkpOworIyBlbHNlCisjICBpZiAhMSB8fCBQT1NJWF9TUEFXTl9TRVRTQ0hFRFBBUkFNID09IDAKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBhcmFtLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX1Jlc3RyaWN0XyBfX3NjaGVkcGFyYW0pCisgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocG9zaXhfc3Bhd25hdHRyX2dldHNjaGVkcGFyYW0sIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICpfUmVzdHJpY3RfIF9fc2NoZWRwYXJhbSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocG9zaXhfc3Bhd25hdHRyX2dldHNjaGVkcGFyYW0pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwYXJhbQorIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBBUkFNCitfR0xfV0FSTl9PTl9VU0UgKHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBhcmFtLAorICAgICAgICAgICAgICAgICAicG9zaXhfc3Bhd25hdHRyX2dldHNjaGVkcGFyYW0gaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBhcmFtIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisvKiBTdG9yZSBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgaW4gdGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwYXJhbSBycGxfcG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcGFyYW0KKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwYXJhbSwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9SZXN0cmljdF8gX19zY2hlZHBhcmFtKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcGFyYW0sIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfUmVzdHJpY3RfIF9fc2NoZWRwYXJhbSkpOworIyBlbHNlCisjICBpZiAhMSB8fCBQT1NJWF9TUEFXTl9TRVRTQ0hFRFBBUkFNID09IDAKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBhcmFtLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX1Jlc3RyaWN0XyBfX3NjaGVkcGFyYW0pCisgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcGFyYW0sIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfUmVzdHJpY3RfIF9fc2NoZWRwYXJhbSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcGFyYW0pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwYXJhbQorIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9TRVRTQ0hFRFBBUkFNCitfR0xfV0FSTl9PTl9VU0UgKHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBhcmFtLAorICAgICAgICAgICAgICAgICAicG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcGFyYW0gaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBhcmFtIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDEKKy8qIEluaXRpYWxpemUgZGF0YSBzdHJ1Y3R1cmUgZm9yIGZpbGUgYXR0cmlidXRlIGZvciAnc3Bhd24nIGNhbGwuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfaW5pdCBycGxfcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2luaXQKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfaW5pdCwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfX2ZpbGVfYWN0aW9ucykKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19pbml0LCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9fZmlsZV9hY3Rpb25zKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfaW5pdCwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfX2ZpbGVfYWN0aW9ucykKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfaW5pdCwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfX2ZpbGVfYWN0aW9ucykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2luaXQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfaW5pdAorIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19JTklUCitfR0xfV0FSTl9PTl9VU0UgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19pbml0LAorICAgICAgICAgICAgICAgICAicG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2luaXQgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19pbml0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAxCisvKiBGcmVlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggRklMRS1BQ1RJT05TLiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3kgcnBsX3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19kZXN0cm95CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3ksIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqX19maWxlX2FjdGlvbnMpCisgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfZGVzdHJveSwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfX2ZpbGVfYWN0aW9ucykpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3ksIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqX19maWxlX2FjdGlvbnMpCisgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3ksIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqX19maWxlX2FjdGlvbnMpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19kZXN0cm95KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3kKKyMgaWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfREVTVFJPWQorX0dMX1dBUk5fT05fVVNFIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfZGVzdHJveSwKKyAgICAgICAgICAgICAgICAgInBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19kZXN0cm95IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfZGVzdHJveSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMQorLyogQWRkIGFuIGFjdGlvbiB0byBGSUxFLUFDVElPTlMgd2hpY2ggdGVsbHMgdGhlIGltcGxlbWVudGF0aW9uIHRvIGNhbGwKKyAgICdvcGVuJyBmb3IgdGhlIGdpdmVuIGZpbGUgZHVyaW5nIHRoZSAnc3Bhd24nIGNhbGwuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3BlbiBycGxfcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW4KKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3BlbiwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfUmVzdHJpY3RfIF9fZmlsZV9hY3Rpb25zLAorICAgICAgICAgICAgICAgICAgIGludCBfX2ZkLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9SZXN0cmljdF8gX19wYXRoLCBpbnQgX19vZmxhZywgbW9kZV90IF9fbW9kZSkKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSwgMykpKTsKK19HTF9DWFhBTElBU19SUEwgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9SZXN0cmljdF8gX19maWxlX2FjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgaW50IF9fZmQsCisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX1Jlc3RyaWN0XyBfX3BhdGgsIGludCBfX29mbGFnLCBtb2RlX3QgX19tb2RlKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3BlbiwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfUmVzdHJpY3RfIF9fZmlsZV9hY3Rpb25zLAorICAgICAgICAgICAgICAgICAgIGludCBfX2ZkLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9SZXN0cmljdF8gX19wYXRoLCBpbnQgX19vZmxhZywgbW9kZV90IF9fbW9kZSkKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSwgMykpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3BlbiwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfUmVzdHJpY3RfIF9fZmlsZV9hY3Rpb25zLAorICAgICAgICAgICAgICAgICAgIGludCBfX2ZkLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9SZXN0cmljdF8gX19wYXRoLCBpbnQgX19vZmxhZywgbW9kZV90IF9fbW9kZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW4pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3BlbgorIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERPUEVOCitfR0xfV0FSTl9PTl9VU0UgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuLAorICAgICAgICAgICAgICAgICAicG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW4gaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAxCisvKiBBZGQgYW4gYWN0aW9uIHRvIEZJTEUtQUNUSU9OUyB3aGljaCB0ZWxscyB0aGUgaW1wbGVtZW50YXRpb24gdG8gY2FsbAorICAgJ2Nsb3NlJyBmb3IgdGhlIGdpdmVuIGZpbGUgZGVzY3JpcHRvciBkdXJpbmcgdGhlICdzcGF3bicgY2FsbC4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZSBycGxfcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9fZmlsZV9hY3Rpb25zLCBpbnQgX19mZCkKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZSwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfX2ZpbGVfYWN0aW9ucywgaW50IF9fZmQpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZSwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfX2ZpbGVfYWN0aW9ucywgaW50IF9fZmQpCisgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9fZmlsZV9hY3Rpb25zLCBpbnQgX19mZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlCisjIGlmIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERENMT1NFCitfR0xfV0FSTl9PTl9VU0UgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZSwKKyAgICAgICAgICAgICAgICAgInBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAxCisvKiBBZGQgYW4gYWN0aW9uIHRvIEZJTEUtQUNUSU9OUyB3aGljaCB0ZWxscyB0aGUgaW1wbGVtZW50YXRpb24gdG8gY2FsbAorICAgJ2R1cDInIGZvciB0aGUgZ2l2ZW4gZmlsZSBkZXNjcmlwdG9ycyBkdXJpbmcgdGhlICdzcGF3bicgY2FsbC4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyIHJwbF9wb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkZHVwMgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9fZmlsZV9hY3Rpb25zLAorICAgICAgICAgICAgICAgICAgIGludCBfX2ZkLCBpbnQgX19uZXdmZCkKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9fZmlsZV9hY3Rpb25zLAorICAgICAgICAgICAgICAgICAgIGludCBfX2ZkLCBpbnQgX19uZXdmZCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDIsIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqX19maWxlX2FjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgaW50IF9fZmQsIGludCBfX25ld2ZkKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9fZmlsZV9hY3Rpb25zLAorICAgICAgICAgICAgICAgICAgIGludCBfX2ZkLCBpbnQgX19uZXdmZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDIpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkZHVwMgorIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BREREVVAyCitfR0xfV0FSTl9PTl9VU0UgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyLAorICAgICAgICAgICAgICAgICAicG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDIgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2VuZGlmIC8qIF9HTF9TUEFXTl9IICovCisjZW5kaWYgLyogX0dMX1NQQVdOX0ggKi8KZGlmZiAtLWdpdCBhL2Rhcndpbi1saWIvc3RkaW50LmggYi9kYXJ3aW4tbGliL3N0ZGludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNmY1NTYKLS0tIC9kZXYvbnVsbAorKysgYi9kYXJ3aW4tbGliL3N0ZGludC5oCkBAIC0wLDAgKzEsNjM3IEBACisvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovCisvKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgMjAwNC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBQYXVsIEVnZ2VydCwgQnJ1bm8gSGFpYmxlLCBTYW0gU3RlaW5nb2xkLCBQZXRlciBCdXJ3b29kLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgZ251bGliLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qCisgKiBJU08gQyA5OSA8c3RkaW50Lmg+IGZvciBwbGF0Zm9ybXMgdGhhdCBsYWNrIGl0LgorICogPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hiZC9zdGRpbnQuaC5odG1sPgorICovCisKKyNpZm5kZWYgX0dMX1NURElOVF9ICisKKyNpZiBfX0dOVUNfXyA+PSAzCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisjZW5kaWYKKworCisvKiBXaGVuIGluY2x1ZGluZyBhIHN5c3RlbSBmaWxlIHRoYXQgaW4gdHVybiBpbmNsdWRlcyA8aW50dHlwZXMuaD4sCisgICB1c2UgdGhlIHN5c3RlbSA8aW50dHlwZXMuaD4sIG5vdCBvdXIgc3Vic3RpdHV0ZS4gIFRoaXMgYXZvaWRzCisgICBwcm9ibGVtcyB3aXRoIChmb3IgZXhhbXBsZSkgVk1TLCB3aG9zZSA8c3lzL2JpdHlwZXMuaD4gaW5jbHVkZXMKKyAgIDxpbnR0eXBlcy5oPi4gICovCisjZGVmaW5lIF9HTF9KVVNUX0lOQ0xVREVfU1lTVEVNX0lOVFRZUEVTX0gKKworLyogT24gQW5kcm9pZCAoQmlvbmljIGxpYmMpLCA8c3lzL3R5cGVzLmg+IGluY2x1ZGVzIHRoaXMgZmlsZSBiZWZvcmUKKyAgIGhhdmluZyBkZWZpbmVkICd0aW1lX3QnLiAgVGhlcmVmb3JlIGluIHRoaXMgY2FzZSBhdm9pZCBpbmNsdWRpbmcKKyAgIG90aGVyIHN5c3RlbSBoZWFkZXIgZmlsZXM7IGp1c3QgaW5jbHVkZSB0aGUgc3lzdGVtJ3MgPHN0ZGludC5oPi4KKyAgIElkZWFsbHkgd2Ugc2hvdWxkIHRlc3QgX19CSU9OSUNfXyBoZXJlLCBidXQgaXQgaXMgb25seSBkZWZpbmVkIGFmdGVyCisgICA8c3lzL2NkZWZzLmg+IGhhcyBiZWVuIGluY2x1ZGVkOyBoZW5jZSB0ZXN0IF9fQU5EUk9JRF9fIGluc3RlYWQuICAqLworI2lmIGRlZmluZWQgX19BTkRST0lEX18gXAorICAgICYmIGRlZmluZWQgX1NZU19UWVBFU19IXyAmJiAhZGVmaW5lZCBfU1NJWkVfVF9ERUZJTkVEXworIyBpbmNsdWRlX25leHQgPHN0ZGludC5oPgorI2Vsc2UKKworLyogR2V0IHRob3NlIHR5cGVzIHRoYXQgYXJlIGFscmVhZHkgZGVmaW5lZCBpbiBvdGhlciBzeXN0ZW0gaW5jbHVkZQorICAgZmlsZXMsIHNvIHRoYXQgd2UgY2FuICIjZGVmaW5lIGludDhfdCBzaWduZWQgY2hhciIgYmVsb3cgd2l0aG91dAorICAgd29ycnlpbmcgYWJvdXQgYSBsYXRlciBzeXN0ZW0gaW5jbHVkZSBmaWxlIGNvbnRhaW5pbmcgYSAidHlwZWRlZgorICAgc2lnbmVkIGNoYXIgaW50OF90OyIgdGhhdCB3aWxsIGdldCBtZXNzZWQgdXAgYnkgb3VyIG1hY3JvLiAgT3VyCisgICBtYWNyb3Mgc2hvdWxkIGFsbCBiZSBjb25zaXN0ZW50IHdpdGggdGhlIHN5c3RlbSB2ZXJzaW9ucywgZXhjZXB0CisgICBmb3IgdGhlICJmYXN0IiB0eXBlcyBhbmQgbWFjcm9zLCB3aGljaCB3ZSByZWNvbW1lbmQgYWdhaW5zdCB1c2luZworICAgaW4gcHVibGljIGludGVyZmFjZXMgZHVlIHRvIGNvbXBpbGVyIGRpZmZlcmVuY2VzLiAgKi8KKworI2lmIDEKKyMgaWYgZGVmaW5lZCBfX3NnaSAmJiAhIGRlZmluZWQgX19jOTkKKyAgIC8qIEJ5cGFzcyBJUklYJ3MgPHN0ZGludC5oPiBpZiBpbiBDODkgbW9kZSwgc2luY2UgaXQgbWVyZWx5IGFubm95cyB1c2VycworICAgICAgd2l0aCAiVGhpcyBoZWFkZXIgZmlsZSBpcyB0byBiZSB1c2VkIG9ubHkgZm9yIGM5OSBtb2RlIGNvbXBpbGF0aW9ucyIKKyAgICAgIGRpYWdub3N0aWNzLiAgKi8KKyMgIGRlZmluZSBfX1NURElOVF9IX18KKyMgZW5kaWYKKworICAvKiBTb21lIHByZS1DKysxMSA8c3RkaW50Lmg+IGltcGxlbWVudGF0aW9ucyBuZWVkIHRoaXMuICAqLworIyBpZmRlZiBfX2NwbHVzcGx1cworIyAgaWZuZGVmIF9fU1REQ19DT05TVEFOVF9NQUNST1MKKyMgICBkZWZpbmUgX19TVERDX0NPTlNUQU5UX01BQ1JPUyAxCisjICBlbmRpZgorIyAgaWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKKyMgICBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyAxCisjICBlbmRpZgorIyBlbmRpZgorCisgIC8qIE90aGVyIHN5c3RlbXMgbWF5IGhhdmUgYW4gaW5jb21wbGV0ZSBvciBidWdneSA8c3RkaW50Lmg+LgorICAgICBJbmNsdWRlIGl0IGJlZm9yZSA8aW50dHlwZXMuaD4sIHNpbmNlIGFueSAiI2luY2x1ZGUgPHN0ZGludC5oPiIKKyAgICAgaW4gPGludHR5cGVzLmg+IHdvdWxkIHJlaW5jbHVkZSB1cywgc2tpcHBpbmcgb3VyIGNvbnRlbnRzIGJlY2F1c2UKKyAgICAgX0dMX1NURElOVF9IIGlzIGRlZmluZWQuCisgICAgIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyMgaW5jbHVkZV9uZXh0IDxzdGRpbnQuaD4KKyNlbmRpZgorCisjaWYgISBkZWZpbmVkIF9HTF9TVERJTlRfSCAmJiAhIGRlZmluZWQgX0dMX0pVU1RfSU5DTFVERV9TWVNURU1fU1RESU5UX0gKKyNkZWZpbmUgX0dMX1NURElOVF9ICisKKy8qIDxzeXMvdHlwZXMuaD4gZGVmaW5lcyBzb21lIG9mIHRoZSBzdGRpbnQuaCB0eXBlcyBhcyB3ZWxsLCBvbiBnbGliYywKKyAgIElSSVggNi41LCBhbmQgT3BlbkJTRCAzLjggKHZpYSA8bWFjaGluZS90eXBlcy5oPikuCisgICBBSVggNS4yIDxzeXMvdHlwZXMuaD4gaXNuJ3QgbmVlZGVkIGFuZCBjYXVzZXMgdHJvdWJsZXMuCisgICBNYWMgT1MgWCAxMC40LjYgPHN5cy90eXBlcy5oPiBpbmNsdWRlcyA8c3RkaW50Lmg+ICh3aGljaCBpcyB1cyksIGJ1dAorICAgcmVsaWVzIG9uIHRoZSBzeXN0ZW0gPHN0ZGludC5oPiBkZWZpbml0aW9ucywgc28gaW5jbHVkZQorICAgPHN5cy90eXBlcy5oPiBhZnRlciA8c3RkaW50Lmg+LiAgKi8KKyNpZiAxICYmICEgZGVmaW5lZCBfQUlYCisjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKy8qIEdldCBTQ0hBUl9NSU4sIFNDSEFSX01BWCwgVUNIQVJfTUFYLCBJTlRfTUlOLCBJTlRfTUFYLAorICAgTE9OR19NSU4sIExPTkdfTUFYLCBVTE9OR19NQVguICAqLworI2luY2x1ZGUgPGxpbWl0cy5oPgorCisjaWYgMQorICAvKiBJbiBPcGVuQlNEIDMuOCwgPGludHR5cGVzLmg+IGluY2x1ZGVzIDxtYWNoaW5lL3R5cGVzLmg+LCB3aGljaCBkZWZpbmVzCisgICAgIGludHs4LDE2LDMyLDY0fV90LCB1aW50ezgsMTYsMzIsNjR9X3QgYW5kIF9fQklUX1RZUEVTX0RFRklORURfXy4KKyAgICAgPGludHR5cGVzLmg+IGFsc28gZGVmaW5lcyBpbnRwdHJfdCBhbmQgdWludHB0cl90LiAgKi8KKyMgaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbGlmIDAKKyAgLyogU29sYXJpcyA3IDxzeXMvaW50dHlwZXMuaD4gaGFzIHRoZSB0eXBlcyBleGNlcHQgdGhlICpfZmFzdCpfdCB0eXBlcywgYW5kCisgICAgIHRoZSBtYWNyb3MgZXhjZXB0IGZvciAqX0ZBU1QqXyosIElOVFBUUl9NSU4sIFBUUkRJRkZfTUlOLCBQVFJESUZGX01BWC4gICovCisjIGluY2x1ZGUgPHN5cy9pbnR0eXBlcy5oPgorI2VuZGlmCisKKyNpZiAwICYmICEgZGVmaW5lZCBfX0JJVF9UWVBFU19ERUZJTkVEX18KKyAgLyogTGludXggbGliYzQgPj0gNC42LjcgYW5kIGxpYmM1IGhhdmUgYSA8c3lzL2JpdHlwZXMuaD4gdGhhdCBkZWZpbmVzCisgICAgIGludHs4LDE2LDMyLDY0fV90IGFuZCBfX0JJVF9UWVBFU19ERUZJTkVEX18uICBJbiBsaWJjNSA+PSA1LjIuMiBpdCBpcworICAgICBpbmNsdWRlZCBieSA8c3lzL3R5cGVzLmg+LiAgKi8KKyMgaW5jbHVkZSA8c3lzL2JpdHlwZXMuaD4KKyNlbmRpZgorCisjdW5kZWYgX0dMX0pVU1RfSU5DTFVERV9TWVNURU1fSU5UVFlQRVNfSAorCisvKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBmb3IgYW4gaW50ZWdlciB0eXBlIHVuZGVyIHRoZSB1c3VhbCBhc3N1bXB0aW9uLgorICAgUmV0dXJuIGFuIHVuc3BlY2lmaWVkIHZhbHVlIGlmIEJJVFMgPT0gMCwgYWRkaW5nIGEgY2hlY2sgdG8gcGFjaWZ5CisgICBwaWNreSBjb21waWxlcnMuICAqLworCisjZGVmaW5lIF9TVERJTlRfTUlOKHNpZ25lZCwgYml0cywgemVybykgXAorICAoKHNpZ25lZCkgPyAoLSAoKHplcm8pICsgMSkgPDwgKChiaXRzKSA/IChiaXRzKSAtIDEgOiAwKSkgOiAoemVybykpCisKKyNkZWZpbmUgX1NURElOVF9NQVgoc2lnbmVkLCBiaXRzLCB6ZXJvKSBcCisgICgoc2lnbmVkKSBcCisgICA/IH4gX1NURElOVF9NSU4gKHNpZ25lZCwgYml0cywgemVybykgXAorICAgOiAvKiBUaGUgZXhwcmVzc2lvbiBmb3IgdGhlIHVuc2lnbmVkIGNhc2UuICBUaGUgc3VidHJhY3Rpb24gb2YgKHNpZ25lZCkgXAorICAgICAgICBpcyBhIG5vcCBpbiB0aGUgdW5zaWduZWQgY2FzZSBhbmQgYXZvaWRzICJzaWduZWQgaW50ZWdlciBvdmVyZmxvdyIgXAorICAgICAgICB3YXJuaW5ncyBpbiB0aGUgc2lnbmVkIGNhc2UuICAqLyBcCisgICAgICgoKCh6ZXJvKSArIDEpIDw8ICgoYml0cykgPyAoYml0cykgLSAxIC0gKHNpZ25lZCkgOiAwKSkgLSAxKSAqIDIgKyAxKQorCisjaWYgIUdOVUxJQl9kZWZpbmVkX3N0ZGludF90eXBlcworCisvKiA3LjE4LjEuMS4gRXhhY3Qtd2lkdGggaW50ZWdlciB0eXBlcyAqLworCisvKiBIZXJlIHdlIGFzc3VtZSBhIHN0YW5kYXJkIGFyY2hpdGVjdHVyZSB3aGVyZSB0aGUgaGFyZHdhcmUgaW50ZWdlcgorICAgdHlwZXMgaGF2ZSA4LCAxNiwgMzIsIG9wdGlvbmFsbHkgNjQgYml0cy4gICovCisKKyN1bmRlZiBpbnQ4X3QKKyN1bmRlZiB1aW50OF90Cit0eXBlZGVmIHNpZ25lZCBjaGFyIGdsX2ludDhfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBnbF91aW50OF90OworI2RlZmluZSBpbnQ4X3QgZ2xfaW50OF90CisjZGVmaW5lIHVpbnQ4X3QgZ2xfdWludDhfdAorCisjdW5kZWYgaW50MTZfdAorI3VuZGVmIHVpbnQxNl90Cit0eXBlZGVmIHNob3J0IGludCBnbF9pbnQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgZ2xfdWludDE2X3Q7CisjZGVmaW5lIGludDE2X3QgZ2xfaW50MTZfdAorI2RlZmluZSB1aW50MTZfdCBnbF91aW50MTZfdAorCisjdW5kZWYgaW50MzJfdAorI3VuZGVmIHVpbnQzMl90Cit0eXBlZGVmIGludCBnbF9pbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgZ2xfdWludDMyX3Q7CisjZGVmaW5lIGludDMyX3QgZ2xfaW50MzJfdAorI2RlZmluZSB1aW50MzJfdCBnbF91aW50MzJfdAorCisvKiBJZiB0aGUgc3lzdGVtIGRlZmluZXMgSU5UNjRfTUFYLCBhc3N1bWUgaW50NjRfdCB3b3Jrcy4gIFRoYXQgd2F5LAorICAgaWYgdGhlIHVuZGVybHlpbmcgcGxhdGZvcm0gZGVmaW5lcyBpbnQ2NF90IHRvIGJlIGEgNjQtYml0IGxvbmcgbG9uZworICAgaW50LCB0aGUgY29kZSBiZWxvdyB3b24ndCBtaXN0YWtlbmx5IGRlZmluZSBpdCB0byBiZSBhIDY0LWJpdCBsb25nCisgICBpbnQsIHdoaWNoIHdvdWxkIG1lc3MgdXAgQysrIG5hbWUgbWFuZ2xpbmcuICBXZSBtdXN0IHVzZSAjaWZkZWYKKyAgIHJhdGhlciB0aGFuICNpZiwgdG8gYXZvaWQgYW4gZXJyb3Igd2l0aCBIUC1VWCAxMC4yMCBjYy4gICovCisKKyNpZmRlZiBJTlQ2NF9NQVgKKyMgZGVmaW5lIEdMX0lOVDY0X1QKKyNlbHNlCisvKiBEbyBub3QgdW5kZWZpbmUgaW50NjRfdCBpZiBnbnVsaWIgaXMgbm90IGJlaW5nIHVzZWQgd2l0aCA2NC1iaXQKKyAgIHR5cGVzLCBzaW5jZSBvdGhlcndpc2UgaXQgYnJlYWtzIHBsYXRmb3JtcyBsaWtlIFRhbmRlbS9OU0suICAqLworIyBpZiBMT05HX01BWCA+PiAzMSA+PiAzMSA9PSAxCisjICB1bmRlZiBpbnQ2NF90Cit0eXBlZGVmIGxvbmcgaW50IGdsX2ludDY0X3Q7CisjICBkZWZpbmUgaW50NjRfdCBnbF9pbnQ2NF90CisjICBkZWZpbmUgR0xfSU5UNjRfVAorIyBlbGlmIGRlZmluZWQgX01TQ19WRVIKKyMgIHVuZGVmIGludDY0X3QKK3R5cGVkZWYgX19pbnQ2NCBnbF9pbnQ2NF90OworIyAgZGVmaW5lIGludDY0X3QgZ2xfaW50NjRfdAorIyAgZGVmaW5lIEdMX0lOVDY0X1QKKyMgZWxpZiAxCisjICB1bmRlZiBpbnQ2NF90Cit0eXBlZGVmIGxvbmcgbG9uZyBpbnQgZ2xfaW50NjRfdDsKKyMgIGRlZmluZSBpbnQ2NF90IGdsX2ludDY0X3QKKyMgIGRlZmluZSBHTF9JTlQ2NF9UCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIFVJTlQ2NF9NQVgKKyMgZGVmaW5lIEdMX1VJTlQ2NF9UCisjZWxzZQorIyBpZiBVTE9OR19NQVggPj4gMzEgPj4gMzEgPj4gMSA9PSAxCisjICB1bmRlZiB1aW50NjRfdAordHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBnbF91aW50NjRfdDsKKyMgIGRlZmluZSB1aW50NjRfdCBnbF91aW50NjRfdAorIyAgZGVmaW5lIEdMX1VJTlQ2NF9UCisjIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUgorIyAgdW5kZWYgdWludDY0X3QKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCBnbF91aW50NjRfdDsKKyMgIGRlZmluZSB1aW50NjRfdCBnbF91aW50NjRfdAorIyAgZGVmaW5lIEdMX1VJTlQ2NF9UCisjIGVsaWYgMQorIyAgdW5kZWYgdWludDY0X3QKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBnbF91aW50NjRfdDsKKyMgIGRlZmluZSB1aW50NjRfdCBnbF91aW50NjRfdAorIyAgZGVmaW5lIEdMX1VJTlQ2NF9UCisjIGVuZGlmCisjZW5kaWYKKworLyogQXZvaWQgY29sbGlzaW9uIHdpdGggU29sYXJpcyAyLjUuMSA8cHRocmVhZC5oPiBldGMuICAqLworI2RlZmluZSBfVUlOVDhfVAorI2RlZmluZSBfVUlOVDMyX1QKKyNkZWZpbmUgX1VJTlQ2NF9UCisKKworLyogNy4xOC4xLjIuIE1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcyAqLworCisvKiBIZXJlIHdlIGFzc3VtZSBhIHN0YW5kYXJkIGFyY2hpdGVjdHVyZSB3aGVyZSB0aGUgaGFyZHdhcmUgaW50ZWdlcgorICAgdHlwZXMgaGF2ZSA4LCAxNiwgMzIsIG9wdGlvbmFsbHkgNjQgYml0cy4gVGhlcmVmb3JlIHRoZSBsZWFzdE5fdCB0eXBlcworICAgYXJlIHRoZSBzYW1lIGFzIHRoZSBjb3JyZXNwb25kaW5nIE5fdCB0eXBlcy4gICovCisKKyN1bmRlZiBpbnRfbGVhc3Q4X3QKKyN1bmRlZiB1aW50X2xlYXN0OF90CisjdW5kZWYgaW50X2xlYXN0MTZfdAorI3VuZGVmIHVpbnRfbGVhc3QxNl90CisjdW5kZWYgaW50X2xlYXN0MzJfdAorI3VuZGVmIHVpbnRfbGVhc3QzMl90CisjdW5kZWYgaW50X2xlYXN0NjRfdAorI3VuZGVmIHVpbnRfbGVhc3Q2NF90CisjZGVmaW5lIGludF9sZWFzdDhfdCBpbnQ4X3QKKyNkZWZpbmUgdWludF9sZWFzdDhfdCB1aW50OF90CisjZGVmaW5lIGludF9sZWFzdDE2X3QgaW50MTZfdAorI2RlZmluZSB1aW50X2xlYXN0MTZfdCB1aW50MTZfdAorI2RlZmluZSBpbnRfbGVhc3QzMl90IGludDMyX3QKKyNkZWZpbmUgdWludF9sZWFzdDMyX3QgdWludDMyX3QKKyNpZmRlZiBHTF9JTlQ2NF9UCisjIGRlZmluZSBpbnRfbGVhc3Q2NF90IGludDY0X3QKKyNlbmRpZgorI2lmZGVmIEdMX1VJTlQ2NF9UCisjIGRlZmluZSB1aW50X2xlYXN0NjRfdCB1aW50NjRfdAorI2VuZGlmCisKKy8qIDcuMTguMS4zLiBGYXN0ZXN0IG1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcyAqLworCisvKiBOb3RlOiBPdGhlciA8c3RkaW50Lmg+IHN1YnN0aXR1dGVzIG1heSBkZWZpbmUgdGhlc2UgdHlwZXMgZGlmZmVyZW50bHkuCisgICBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gdXNlIHRoZXNlIHR5cGVzIGluIHB1YmxpYyBoZWFkZXIgZmlsZXMuICovCisKKy8qIEhlcmUgd2UgYXNzdW1lIGEgc3RhbmRhcmQgYXJjaGl0ZWN0dXJlIHdoZXJlIHRoZSBoYXJkd2FyZSBpbnRlZ2VyCisgICB0eXBlcyBoYXZlIDgsIDE2LCAzMiwgb3B0aW9uYWxseSA2NCBiaXRzLiBUaGVyZWZvcmUgdGhlIGZhc3ROX3QgdHlwZXMKKyAgIGFyZSB0YWtlbiBmcm9tIHRoZSBzYW1lIGxpc3Qgb2YgdHlwZXMuICBUaGUgZm9sbG93aW5nIGNvZGUgbm9ybWFsbHkKKyAgIHVzZXMgdHlwZXMgY29uc2lzdGVudCB3aXRoIGdsaWJjLCBhcyB0aGF0IGxlc3NlbnMgdGhlIGNoYW5jZSBvZgorICAgaW5jb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgR05VIGhvc3RzLiAgKi8KKworI3VuZGVmIGludF9mYXN0OF90CisjdW5kZWYgdWludF9mYXN0OF90CisjdW5kZWYgaW50X2Zhc3QxNl90CisjdW5kZWYgdWludF9mYXN0MTZfdAorI3VuZGVmIGludF9mYXN0MzJfdAorI3VuZGVmIHVpbnRfZmFzdDMyX3QKKyN1bmRlZiBpbnRfZmFzdDY0X3QKKyN1bmRlZiB1aW50X2Zhc3Q2NF90Cit0eXBlZGVmIHNpZ25lZCBjaGFyIGdsX2ludF9mYXN0OF90OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIGdsX3VpbnRfZmFzdDhfdDsKKworI2lmZGVmIF9fc3VuCisvKiBEZWZpbmUgdHlwZXMgY29tcGF0aWJsZSB3aXRoIFN1bk9TIDUuMTAsIHNvIHRoYXQgY29kZSBjb21waWxlZCB1bmRlcgorICAgZWFybGllciBTdW5PUyB2ZXJzaW9ucyB3b3JrcyB3aXRoIGNvZGUgY29tcGlsZWQgdW5kZXIgU3VuT1MgNS4xMC4gICovCit0eXBlZGVmIGludCBnbF9pbnRfZmFzdDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBnbF91aW50X2Zhc3QzMl90OworI2Vsc2UKK3R5cGVkZWYgbG9uZyBpbnQgZ2xfaW50X2Zhc3QzMl90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBnbF91aW50X2Zhc3QzMl90OworI2VuZGlmCit0eXBlZGVmIGdsX2ludF9mYXN0MzJfdCBnbF9pbnRfZmFzdDE2X3Q7Cit0eXBlZGVmIGdsX3VpbnRfZmFzdDMyX3QgZ2xfdWludF9mYXN0MTZfdDsKKworI2RlZmluZSBpbnRfZmFzdDhfdCBnbF9pbnRfZmFzdDhfdAorI2RlZmluZSB1aW50X2Zhc3Q4X3QgZ2xfdWludF9mYXN0OF90CisjZGVmaW5lIGludF9mYXN0MTZfdCBnbF9pbnRfZmFzdDE2X3QKKyNkZWZpbmUgdWludF9mYXN0MTZfdCBnbF91aW50X2Zhc3QxNl90CisjZGVmaW5lIGludF9mYXN0MzJfdCBnbF9pbnRfZmFzdDMyX3QKKyNkZWZpbmUgdWludF9mYXN0MzJfdCBnbF91aW50X2Zhc3QzMl90CisjaWZkZWYgR0xfSU5UNjRfVAorIyBkZWZpbmUgaW50X2Zhc3Q2NF90IGludDY0X3QKKyNlbmRpZgorI2lmZGVmIEdMX1VJTlQ2NF9UCisjIGRlZmluZSB1aW50X2Zhc3Q2NF90IHVpbnQ2NF90CisjZW5kaWYKKworLyogNy4xOC4xLjQuIEludGVnZXIgdHlwZXMgY2FwYWJsZSBvZiBob2xkaW5nIG9iamVjdCBwb2ludGVycyAqLworCisjdW5kZWYgaW50cHRyX3QKKyN1bmRlZiB1aW50cHRyX3QKK3R5cGVkZWYgbG9uZyBpbnQgZ2xfaW50cHRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IGdsX3VpbnRwdHJfdDsKKyNkZWZpbmUgaW50cHRyX3QgZ2xfaW50cHRyX3QKKyNkZWZpbmUgdWludHB0cl90IGdsX3VpbnRwdHJfdAorCisvKiA3LjE4LjEuNS4gR3JlYXRlc3Qtd2lkdGggaW50ZWdlciB0eXBlcyAqLworCisvKiBOb3RlOiBUaGVzZSB0eXBlcyBhcmUgY29tcGlsZXIgZGVwZW5kZW50LiBJdCBtYXkgYmUgdW53aXNlIHRvIHVzZSB0aGVtIGluCisgICBwdWJsaWMgaGVhZGVyIGZpbGVzLiAqLworCisvKiBJZiB0aGUgc3lzdGVtIGRlZmluZXMgSU5UTUFYX01BWCwgYXNzdW1lIHRoYXQgaW50bWF4X3Qgd29ya3MsIGFuZAorICAgc2ltaWxhcmx5IGZvciBVSU5UTUFYX01BWCBhbmQgdWludG1heF90LiAgVGhpcyBhdm9pZHMgcHJvYmxlbXMgd2l0aAorICAgYXNzdW1pbmcgb25lIHR5cGUgd2hlcmUgYW5vdGhlciBpcyB1c2VkIGJ5IHRoZSBzeXN0ZW0uICAqLworCisjaWZuZGVmIElOVE1BWF9NQVgKKyMgdW5kZWYgSU5UTUFYX0MKKyMgdW5kZWYgaW50bWF4X3QKKyMgaWYgMSAmJiBMT05HX01BWCA+PiAzMCA9PSAxCit0eXBlZGVmIGxvbmcgbG9uZyBpbnQgZ2xfaW50bWF4X3Q7CisjICBkZWZpbmUgaW50bWF4X3QgZ2xfaW50bWF4X3QKKyMgZWxpZiBkZWZpbmVkIEdMX0lOVDY0X1QKKyMgIGRlZmluZSBpbnRtYXhfdCBpbnQ2NF90CisjIGVsc2UKK3R5cGVkZWYgbG9uZyBpbnQgZ2xfaW50bWF4X3Q7CisjICBkZWZpbmUgaW50bWF4X3QgZ2xfaW50bWF4X3QKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFVJTlRNQVhfTUFYCisjIHVuZGVmIFVJTlRNQVhfQworIyB1bmRlZiB1aW50bWF4X3QKKyMgaWYgMSAmJiBVTE9OR19NQVggPj4gMzEgPT0gMQordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IGdsX3VpbnRtYXhfdDsKKyMgIGRlZmluZSB1aW50bWF4X3QgZ2xfdWludG1heF90CisjIGVsaWYgZGVmaW5lZCBHTF9VSU5UNjRfVAorIyAgZGVmaW5lIHVpbnRtYXhfdCB1aW50NjRfdAorIyBlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IGdsX3VpbnRtYXhfdDsKKyMgIGRlZmluZSB1aW50bWF4X3QgZ2xfdWludG1heF90CisjIGVuZGlmCisjZW5kaWYKKworLyogVmVyaWZ5IHRoYXQgaW50bWF4X3QgYW5kIHVpbnRtYXhfdCBoYXZlIHRoZSBzYW1lIHNpemUuICBUb28gbXVjaCBjb2RlCisgICBicmVha3MgaWYgdGhpcyBpcyBub3QgdGhlIGNhc2UuICBJZiB0aGlzIGNoZWNrIGZhaWxzLCB0aGUgcmVhc29uIGlzIGxpa2VseQorICAgdG8gYmUgZm91bmQgaW4gdGhlIGF1dG9jb25mIG1hY3Jvcy4gICovCit0eXBlZGVmIGludCBfdmVyaWZ5X2ludG1heF9zaXplW3NpemVvZiAoaW50bWF4X3QpID09IHNpemVvZiAodWludG1heF90KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDEgOiAtMV07CisKKyNkZWZpbmUgR05VTElCX2RlZmluZWRfc3RkaW50X3R5cGVzIDEKKyNlbmRpZiAvKiAhR05VTElCX2RlZmluZWRfc3RkaW50X3R5cGVzICovCisKKy8qIDcuMTguMi4gTGltaXRzIG9mIHNwZWNpZmllZC13aWR0aCBpbnRlZ2VyIHR5cGVzICovCisKKy8qIDcuMTguMi4xLiBMaW1pdHMgb2YgZXhhY3Qtd2lkdGggaW50ZWdlciB0eXBlcyAqLworCisvKiBIZXJlIHdlIGFzc3VtZSBhIHN0YW5kYXJkIGFyY2hpdGVjdHVyZSB3aGVyZSB0aGUgaGFyZHdhcmUgaW50ZWdlcgorICAgdHlwZXMgaGF2ZSA4LCAxNiwgMzIsIG9wdGlvbmFsbHkgNjQgYml0cy4gICovCisKKyN1bmRlZiBJTlQ4X01JTgorI3VuZGVmIElOVDhfTUFYCisjdW5kZWYgVUlOVDhfTUFYCisjZGVmaW5lIElOVDhfTUlOICAofiBJTlQ4X01BWCkKKyNkZWZpbmUgSU5UOF9NQVggIDEyNworI2RlZmluZSBVSU5UOF9NQVggIDI1NQorCisjdW5kZWYgSU5UMTZfTUlOCisjdW5kZWYgSU5UMTZfTUFYCisjdW5kZWYgVUlOVDE2X01BWAorI2RlZmluZSBJTlQxNl9NSU4gICh+IElOVDE2X01BWCkKKyNkZWZpbmUgSU5UMTZfTUFYICAzMjc2NworI2RlZmluZSBVSU5UMTZfTUFYICA2NTUzNQorCisjdW5kZWYgSU5UMzJfTUlOCisjdW5kZWYgSU5UMzJfTUFYCisjdW5kZWYgVUlOVDMyX01BWAorI2RlZmluZSBJTlQzMl9NSU4gICh+IElOVDMyX01BWCkKKyNkZWZpbmUgSU5UMzJfTUFYICAyMTQ3NDgzNjQ3CisjZGVmaW5lIFVJTlQzMl9NQVggIDQyOTQ5NjcyOTVVCisKKyNpZiBkZWZpbmVkIEdMX0lOVDY0X1QgJiYgISBkZWZpbmVkIElOVDY0X01BWAorLyogUHJlZmVyICgtIElOVE1BWF9DICgxKSA8PCA2Mykgb3ZlciAofiBJTlQ2NF9NQVgpIGJlY2F1c2UgU3VuUFJPIEMgNS4wCisgICBldmFsdWF0ZXMgdGhlIGxhdHRlciBpbmNvcnJlY3RseSBpbiBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbnMuICAqLworIyBkZWZpbmUgSU5UNjRfTUlOICAoLSBJTlRNQVhfQyAoMSkgPDwgNjMpCisjIGRlZmluZSBJTlQ2NF9NQVggIElOVE1BWF9DICg5MjIzMzcyMDM2ODU0Nzc1ODA3KQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIEdMX1VJTlQ2NF9UICYmICEgZGVmaW5lZCBVSU5UNjRfTUFYCisjIGRlZmluZSBVSU5UNjRfTUFYICBVSU5UTUFYX0MgKDE4NDQ2NzQ0MDczNzA5NTUxNjE1KQorI2VuZGlmCisKKy8qIDcuMTguMi4yLiBMaW1pdHMgb2YgbWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVzICovCisKKy8qIEhlcmUgd2UgYXNzdW1lIGEgc3RhbmRhcmQgYXJjaGl0ZWN0dXJlIHdoZXJlIHRoZSBoYXJkd2FyZSBpbnRlZ2VyCisgICB0eXBlcyBoYXZlIDgsIDE2LCAzMiwgb3B0aW9uYWxseSA2NCBiaXRzLiBUaGVyZWZvcmUgdGhlIGxlYXN0Tl90IHR5cGVzCisgICBhcmUgdGhlIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgTl90IHR5cGVzLiAgKi8KKworI3VuZGVmIElOVF9MRUFTVDhfTUlOCisjdW5kZWYgSU5UX0xFQVNUOF9NQVgKKyN1bmRlZiBVSU5UX0xFQVNUOF9NQVgKKyNkZWZpbmUgSU5UX0xFQVNUOF9NSU4gIElOVDhfTUlOCisjZGVmaW5lIElOVF9MRUFTVDhfTUFYICBJTlQ4X01BWAorI2RlZmluZSBVSU5UX0xFQVNUOF9NQVggIFVJTlQ4X01BWAorCisjdW5kZWYgSU5UX0xFQVNUMTZfTUlOCisjdW5kZWYgSU5UX0xFQVNUMTZfTUFYCisjdW5kZWYgVUlOVF9MRUFTVDE2X01BWAorI2RlZmluZSBJTlRfTEVBU1QxNl9NSU4gIElOVDE2X01JTgorI2RlZmluZSBJTlRfTEVBU1QxNl9NQVggIElOVDE2X01BWAorI2RlZmluZSBVSU5UX0xFQVNUMTZfTUFYICBVSU5UMTZfTUFYCisKKyN1bmRlZiBJTlRfTEVBU1QzMl9NSU4KKyN1bmRlZiBJTlRfTEVBU1QzMl9NQVgKKyN1bmRlZiBVSU5UX0xFQVNUMzJfTUFYCisjZGVmaW5lIElOVF9MRUFTVDMyX01JTiAgSU5UMzJfTUlOCisjZGVmaW5lIElOVF9MRUFTVDMyX01BWCAgSU5UMzJfTUFYCisjZGVmaW5lIFVJTlRfTEVBU1QzMl9NQVggIFVJTlQzMl9NQVgKKworI3VuZGVmIElOVF9MRUFTVDY0X01JTgorI3VuZGVmIElOVF9MRUFTVDY0X01BWAorI2lmZGVmIEdMX0lOVDY0X1QKKyMgZGVmaW5lIElOVF9MRUFTVDY0X01JTiAgSU5UNjRfTUlOCisjIGRlZmluZSBJTlRfTEVBU1Q2NF9NQVggIElOVDY0X01BWAorI2VuZGlmCisKKyN1bmRlZiBVSU5UX0xFQVNUNjRfTUFYCisjaWZkZWYgR0xfVUlOVDY0X1QKKyMgZGVmaW5lIFVJTlRfTEVBU1Q2NF9NQVggIFVJTlQ2NF9NQVgKKyNlbmRpZgorCisvKiA3LjE4LjIuMy4gTGltaXRzIG9mIGZhc3Rlc3QgbWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVzICovCisKKy8qIEhlcmUgd2UgYXNzdW1lIGEgc3RhbmRhcmQgYXJjaGl0ZWN0dXJlIHdoZXJlIHRoZSBoYXJkd2FyZSBpbnRlZ2VyCisgICB0eXBlcyBoYXZlIDgsIDE2LCAzMiwgb3B0aW9uYWxseSA2NCBiaXRzLiBUaGVyZWZvcmUgdGhlIGZhc3ROX3QgdHlwZXMKKyAgIGFyZSB0YWtlbiBmcm9tIHRoZSBzYW1lIGxpc3Qgb2YgdHlwZXMuICAqLworCisjdW5kZWYgSU5UX0ZBU1Q4X01JTgorI3VuZGVmIElOVF9GQVNUOF9NQVgKKyN1bmRlZiBVSU5UX0ZBU1Q4X01BWAorI2RlZmluZSBJTlRfRkFTVDhfTUlOICBTQ0hBUl9NSU4KKyNkZWZpbmUgSU5UX0ZBU1Q4X01BWCAgU0NIQVJfTUFYCisjZGVmaW5lIFVJTlRfRkFTVDhfTUFYICBVQ0hBUl9NQVgKKworI3VuZGVmIElOVF9GQVNUMTZfTUlOCisjdW5kZWYgSU5UX0ZBU1QxNl9NQVgKKyN1bmRlZiBVSU5UX0ZBU1QxNl9NQVgKKyNkZWZpbmUgSU5UX0ZBU1QxNl9NSU4gIElOVF9GQVNUMzJfTUlOCisjZGVmaW5lIElOVF9GQVNUMTZfTUFYICBJTlRfRkFTVDMyX01BWAorI2RlZmluZSBVSU5UX0ZBU1QxNl9NQVggIFVJTlRfRkFTVDMyX01BWAorCisjdW5kZWYgSU5UX0ZBU1QzMl9NSU4KKyN1bmRlZiBJTlRfRkFTVDMyX01BWAorI3VuZGVmIFVJTlRfRkFTVDMyX01BWAorI2lmZGVmIF9fc3VuCisjIGRlZmluZSBJTlRfRkFTVDMyX01JTiAgSU5UX01JTgorIyBkZWZpbmUgSU5UX0ZBU1QzMl9NQVggIElOVF9NQVgKKyMgZGVmaW5lIFVJTlRfRkFTVDMyX01BWCAgVUlOVF9NQVgKKyNlbHNlCisjIGRlZmluZSBJTlRfRkFTVDMyX01JTiAgTE9OR19NSU4KKyMgZGVmaW5lIElOVF9GQVNUMzJfTUFYICBMT05HX01BWAorIyBkZWZpbmUgVUlOVF9GQVNUMzJfTUFYICBVTE9OR19NQVgKKyNlbmRpZgorCisjdW5kZWYgSU5UX0ZBU1Q2NF9NSU4KKyN1bmRlZiBJTlRfRkFTVDY0X01BWAorI2lmZGVmIEdMX0lOVDY0X1QKKyMgZGVmaW5lIElOVF9GQVNUNjRfTUlOICBJTlQ2NF9NSU4KKyMgZGVmaW5lIElOVF9GQVNUNjRfTUFYICBJTlQ2NF9NQVgKKyNlbmRpZgorCisjdW5kZWYgVUlOVF9GQVNUNjRfTUFYCisjaWZkZWYgR0xfVUlOVDY0X1QKKyMgZGVmaW5lIFVJTlRfRkFTVDY0X01BWCAgVUlOVDY0X01BWAorI2VuZGlmCisKKy8qIDcuMTguMi40LiBMaW1pdHMgb2YgaW50ZWdlciB0eXBlcyBjYXBhYmxlIG9mIGhvbGRpbmcgb2JqZWN0IHBvaW50ZXJzICovCisKKyN1bmRlZiBJTlRQVFJfTUlOCisjdW5kZWYgSU5UUFRSX01BWAorI3VuZGVmIFVJTlRQVFJfTUFYCisjZGVmaW5lIElOVFBUUl9NSU4gIExPTkdfTUlOCisjZGVmaW5lIElOVFBUUl9NQVggIExPTkdfTUFYCisjZGVmaW5lIFVJTlRQVFJfTUFYICBVTE9OR19NQVgKKworLyogNy4xOC4yLjUuIExpbWl0cyBvZiBncmVhdGVzdC13aWR0aCBpbnRlZ2VyIHR5cGVzICovCisKKyNpZm5kZWYgSU5UTUFYX01BWAorIyB1bmRlZiBJTlRNQVhfTUlOCisjIGlmZGVmIElOVDY0X01BWAorIyAgZGVmaW5lIElOVE1BWF9NSU4gIElOVDY0X01JTgorIyAgZGVmaW5lIElOVE1BWF9NQVggIElOVDY0X01BWAorIyBlbHNlCisjICBkZWZpbmUgSU5UTUFYX01JTiAgSU5UMzJfTUlOCisjICBkZWZpbmUgSU5UTUFYX01BWCAgSU5UMzJfTUFYCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBVSU5UTUFYX01BWAorIyBpZmRlZiBVSU5UNjRfTUFYCisjICBkZWZpbmUgVUlOVE1BWF9NQVggIFVJTlQ2NF9NQVgKKyMgZWxzZQorIyAgZGVmaW5lIFVJTlRNQVhfTUFYICBVSU5UMzJfTUFYCisjIGVuZGlmCisjZW5kaWYKKworLyogNy4xOC4zLiBMaW1pdHMgb2Ygb3RoZXIgaW50ZWdlciB0eXBlcyAqLworCisvKiBwdHJkaWZmX3QgbGltaXRzICovCisjdW5kZWYgUFRSRElGRl9NSU4KKyN1bmRlZiBQVFJESUZGX01BWAorI2lmIDAKKyMgaWZkZWYgX0xQNjQKKyMgIGRlZmluZSBQVFJESUZGX01JTiAgX1NURElOVF9NSU4gKDEsIDY0LCAwbCkKKyMgIGRlZmluZSBQVFJESUZGX01BWCAgX1NURElOVF9NQVggKDEsIDY0LCAwbCkKKyMgZWxzZQorIyAgZGVmaW5lIFBUUkRJRkZfTUlOICBfU1RESU5UX01JTiAoMSwgMzIsIDApCisjICBkZWZpbmUgUFRSRElGRl9NQVggIF9TVERJTlRfTUFYICgxLCAzMiwgMCkKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBQVFJESUZGX01JTiAgXAorICAgIF9TVERJTlRfTUlOICgxLCA2NCwgMGwpCisjIGRlZmluZSBQVFJESUZGX01BWCAgXAorICAgIF9TVERJTlRfTUFYICgxLCA2NCwgMGwpCisjZW5kaWYKKworLyogc2lnX2F0b21pY190IGxpbWl0cyAqLworI3VuZGVmIFNJR19BVE9NSUNfTUlOCisjdW5kZWYgU0lHX0FUT01JQ19NQVgKKyNkZWZpbmUgU0lHX0FUT01JQ19NSU4gIFwKKyAgIF9TVERJTlRfTUlOICgxLCAzMiwgXAorICAgICAgICAgICAgICAgIDApCisjZGVmaW5lIFNJR19BVE9NSUNfTUFYICBcCisgICBfU1RESU5UX01BWCAoMSwgMzIsIFwKKyAgICAgICAgICAgICAgICAwKQorCisKKy8qIHNpemVfdCBsaW1pdCAqLworI3VuZGVmIFNJWkVfTUFYCisjaWYgMAorIyBpZmRlZiBfTFA2NAorIyAgZGVmaW5lIFNJWkVfTUFYICBfU1RESU5UX01BWCAoMCwgNjQsIDB1bCkKKyMgZWxzZQorIyAgZGVmaW5lIFNJWkVfTUFYICBfU1RESU5UX01BWCAoMCwgMzIsIDB1bCkKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBTSVpFX01BWCAgX1NURElOVF9NQVggKDAsIDY0LCAwdWwpCisjZW5kaWYKKworLyogd2NoYXJfdCBsaW1pdHMgKi8KKy8qIEdldCBXQ0hBUl9NSU4sIFdDSEFSX01BWC4KKyAgIFRoaXMgaW5jbHVkZSBpcyBub3Qgb24gdGhlIHRvcCwgYWJvdmUsIGJlY2F1c2Ugb24gT1NGLzEgNC4wIHdlIGhhdmUgYQorICAgc2VxdWVuY2Ugb2YgbmVzdGVkIGluY2x1ZGVzCisgICA8d2NoYXIuaD4gLT4gPHN0ZGlvLmg+IC0+IDxnZXRvcHQuaD4gLT4gPHN0ZGxpYi5oPiwgYW5kIHRoZSBsYXR0ZXIgaW5jbHVkZXMKKyAgIDxzdGRpbnQuaD4gYW5kIGFzc3VtZXMgaXRzIHR5cGVzIGFyZSBhbHJlYWR5IGRlZmluZWQuICAqLworI2lmIDEgJiYgISAoZGVmaW5lZCBXQ0hBUl9NSU4gJiYgZGVmaW5lZCBXQ0hBUl9NQVgpCisgIC8qIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZQorICAgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisjIGluY2x1ZGUgPHN0ZGlvLmg+CisjIGluY2x1ZGUgPHRpbWUuaD4KKyMgZGVmaW5lIF9HTF9KVVNUX0lOQ0xVREVfU1lTVEVNX1dDSEFSX0gKKyMgaW5jbHVkZSA8d2NoYXIuaD4KKyMgdW5kZWYgX0dMX0pVU1RfSU5DTFVERV9TWVNURU1fV0NIQVJfSAorI2VuZGlmCisjdW5kZWYgV0NIQVJfTUlOCisjdW5kZWYgV0NIQVJfTUFYCisjZGVmaW5lIFdDSEFSX01JTiAgXAorICAgX1NURElOVF9NSU4gKDEsIDMyLCAwKQorI2RlZmluZSBXQ0hBUl9NQVggIFwKKyAgIF9TVERJTlRfTUFYICgxLCAzMiwgMCkKKworLyogd2ludF90IGxpbWl0cyAqLworI3VuZGVmIFdJTlRfTUlOCisjdW5kZWYgV0lOVF9NQVgKKyNkZWZpbmUgV0lOVF9NSU4gIFwKKyAgIF9TVERJTlRfTUlOICgxLCAzMiwgMCkKKyNkZWZpbmUgV0lOVF9NQVggIFwKKyAgIF9TVERJTlRfTUFYICgxLCAzMiwgMCkKKworLyogNy4xOC40LiBNYWNyb3MgZm9yIGludGVnZXIgY29uc3RhbnRzICovCisKKy8qIDcuMTguNC4xLiBNYWNyb3MgZm9yIG1pbmltdW0td2lkdGggaW50ZWdlciBjb25zdGFudHMgKi8KKy8qIEFjY29yZGluZyB0byBJU08gQyA5OSBUZWNobmljYWwgQ29ycmlnZW5kdW0gMSAqLworCisvKiBIZXJlIHdlIGFzc3VtZSBhIHN0YW5kYXJkIGFyY2hpdGVjdHVyZSB3aGVyZSB0aGUgaGFyZHdhcmUgaW50ZWdlcgorICAgdHlwZXMgaGF2ZSA4LCAxNiwgMzIsIG9wdGlvbmFsbHkgNjQgYml0cywgYW5kIGludCBpcyAzMiBiaXRzLiAgKi8KKworI3VuZGVmIElOVDhfQworI3VuZGVmIFVJTlQ4X0MKKyNkZWZpbmUgSU5UOF9DKHgpIHgKKyNkZWZpbmUgVUlOVDhfQyh4KSB4CisKKyN1bmRlZiBJTlQxNl9DCisjdW5kZWYgVUlOVDE2X0MKKyNkZWZpbmUgSU5UMTZfQyh4KSB4CisjZGVmaW5lIFVJTlQxNl9DKHgpIHgKKworI3VuZGVmIElOVDMyX0MKKyN1bmRlZiBVSU5UMzJfQworI2RlZmluZSBJTlQzMl9DKHgpIHgKKyNkZWZpbmUgVUlOVDMyX0MoeCkgeCAjIyBVCisKKyN1bmRlZiBJTlQ2NF9DCisjdW5kZWYgVUlOVDY0X0MKKyNpZiBMT05HX01BWCA+PiAzMSA+PiAzMSA9PSAxCisjIGRlZmluZSBJTlQ2NF9DKHgpIHgjI0wKKyNlbGlmIGRlZmluZWQgX01TQ19WRVIKKyMgZGVmaW5lIElOVDY0X0MoeCkgeCMjaTY0CisjZWxpZiAxCisjIGRlZmluZSBJTlQ2NF9DKHgpIHgjI0xMCisjZW5kaWYKKyNpZiBVTE9OR19NQVggPj4gMzEgPj4gMzEgPj4gMSA9PSAxCisjIGRlZmluZSBVSU5UNjRfQyh4KSB4IyNVTAorI2VsaWYgZGVmaW5lZCBfTVNDX1ZFUgorIyBkZWZpbmUgVUlOVDY0X0MoeCkgeCMjdWk2NAorI2VsaWYgMQorIyBkZWZpbmUgVUlOVDY0X0MoeCkgeCMjVUxMCisjZW5kaWYKKworLyogNy4xOC40LjIuIE1hY3JvcyBmb3IgZ3JlYXRlc3Qtd2lkdGggaW50ZWdlciBjb25zdGFudHMgKi8KKworI2lmbmRlZiBJTlRNQVhfQworIyBpZiAxICYmIExPTkdfTUFYID4+IDMwID09IDEKKyMgIGRlZmluZSBJTlRNQVhfQyh4KSAgIHgjI0xMCisjIGVsaWYgZGVmaW5lZCBHTF9JTlQ2NF9UCisjICBkZWZpbmUgSU5UTUFYX0MoeCkgICBJTlQ2NF9DKHgpCisjIGVsc2UKKyMgIGRlZmluZSBJTlRNQVhfQyh4KSAgIHgjI0wKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFVJTlRNQVhfQworIyBpZiAxICYmIFVMT05HX01BWCA+PiAzMSA9PSAxCisjICBkZWZpbmUgVUlOVE1BWF9DKHgpICB4IyNVTEwKKyMgZWxpZiBkZWZpbmVkIEdMX1VJTlQ2NF9UCisjICBkZWZpbmUgVUlOVE1BWF9DKHgpICBVSU5UNjRfQyh4KQorIyBlbHNlCisjICBkZWZpbmUgVUlOVE1BWF9DKHgpICB4IyNVTAorIyBlbmRpZgorI2VuZGlmCisKKyNlbmRpZiAvKiBfR0xfU1RESU5UX0ggKi8KKyNlbmRpZiAvKiAhKGRlZmluZWQgX19BTkRST0lEX18gJiYgLi4uKSAqLworI2VuZGlmIC8qICFkZWZpbmVkIF9HTF9TVERJTlRfSCAmJiAhZGVmaW5lZCBfR0xfSlVTVF9JTkNMVURFX1NZU1RFTV9TVERJTlRfSCAqLwpkaWZmIC0tZ2l0IGEvZGFyd2luLWxpYi9zdGRpby5oIGIvZGFyd2luLWxpYi9zdGRpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViOGMwNzQKLS0tIC9kZXYvbnVsbAorKysgYi9kYXJ3aW4tbGliL3N0ZGlvLmgKQEAgLTAsMCArMSwxNjU3IEBACisvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovCisvKiBBIEdOVS1saWtlIDxzdGRpby5oPi4KKworICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmIF9fR05VQ19fID49IDMKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkIF9fbmVlZF9GSUxFIHx8IGRlZmluZWQgX19uZWVkX19fRklMRSB8fCBkZWZpbmVkIF9HTF9BTFJFQURZX0lOQ0xVRElOR19TVERJT19ICisvKiBTcGVjaWFsIGludm9jYXRpb24gY29udmVudGlvbjoKKyAgIC0gSW5zaWRlIGdsaWJjIGhlYWRlciBmaWxlcy4KKyAgIC0gT24gT1NGLzEgNS4xIHdlIGhhdmUgYSBzZXF1ZW5jZSBvZiBuZXN0ZWQgaW5jbHVkZXMKKyAgICAgPHN0ZGlvLmg+IC0+IDxnZXRvcHQuaD4gLT4gPGN0eXBlLmg+IC0+IDxzeXMvbG9jYWxlZGVmLmg+IC0+CisgICAgIDxzeXMvbGNfY29yZS5oPiAtPiA8bmxfdHlwZXMuaD4gLT4gPG1lc2cuaD4gLT4gPHN0ZGlvLmg+LgorICAgICBJbiB0aGlzIHNpdHVhdGlvbiwgdGhlIGZ1bmN0aW9ucyBhcmUgbm90IHlldCBkZWNsYXJlZCwgdGhlcmVmb3JlIHdlIGNhbm5vdAorICAgICBwcm92aWRlIHRoZSBDKysgYWxpYXNlcy4gICovCisKKyNpbmNsdWRlX25leHQgPHN0ZGlvLmg+CisKKyNlbHNlCisvKiBOb3JtYWwgaW52b2NhdGlvbiBjb252ZW50aW9uLiAgKi8KKworI2lmbmRlZiBfR0xfU1RESU9fSAorCisjZGVmaW5lIF9HTF9BTFJFQURZX0lOQ0xVRElOR19TVERJT19ICisKKy8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyNpbmNsdWRlX25leHQgPHN0ZGlvLmg+CisKKyN1bmRlZiBfR0xfQUxSRUFEWV9JTkNMVURJTkdfU1RESU9fSAorCisjaWZuZGVmIF9HTF9TVERJT19ICisjZGVmaW5lIF9HTF9TVERJT19ICisKK19HTF9JTkxJTkVfSEVBREVSX0JFR0lOCisjaWZuZGVmIF9HTF9TVERJT19JTkxJTkUKKyMgZGVmaW5lIF9HTF9TVERJT19JTkxJTkUgX0dMX0lOTElORQorI2VuZGlmCisKKy8qIEdldCB2YV9saXN0LiAgTmVlZGVkIG9uIG1hbnkgc3lzdGVtcywgaW5jbHVkaW5nIGdsaWJjIDIuOC4gICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLyogR2V0IG9mZl90IGFuZCBzc2l6ZV90LiAgTmVlZGVkIG9uIG1hbnkgc3lzdGVtcywgaW5jbHVkaW5nIGdsaWJjIDIuOAorICAgYW5kIGVnbGliYyAyLjExLjIuCisgICBNYXkgYWxzbyBkZWZpbmUgb2ZmX3QgdG8gYSA2NC1iaXQgdHlwZSBvbiBuYXRpdmUgV2luZG93cy4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKy8qIFRoZSBfX2F0dHJpYnV0ZV9fIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLgorICAgVGhlIF9fLXByb3RlY3RlZCB2YXJpYW50cyBvZiB0aGUgYXR0cmlidXRlcyAnZm9ybWF0JyBhbmQgJ3ByaW50ZicgYXJlCisgICBhY2NlcHRlZCBieSBnY2MgdmVyc2lvbnMgMi42LjQgKGVmZmVjdGl2ZWx5IDIuNykgYW5kIGxhdGVyLgorICAgV2UgZW5hYmxlIF9HTF9BVFRSSUJVVEVfRk9STUFUIG9ubHkgaWYgdGhlc2UgYXJlIHN1cHBvcnRlZCB0b28sIGJlY2F1c2UKKyAgIGdudWxpYiBhbmQgbGliaW50bCBkbyAnI2RlZmluZSBwcmludGYgX19wcmludGZfXycgd2hlbiB0aGV5IG92ZXJyaWRlCisgICB0aGUgJ3ByaW50ZicgZnVuY3Rpb24uICAqLworI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA3KQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9GT1JNQVQoc3BlYykgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gc3BlYykpCisjZWxzZQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9GT1JNQVQoc3BlYykgLyogZW1wdHkgKi8KKyNlbmRpZgorCisvKiBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEYKKyAgIGluZGljYXRlcyB0byBHQ0MgdGhhdCB0aGUgZnVuY3Rpb24gdGFrZXMgYSBmb3JtYXQgc3RyaW5nIGFuZCBhcmd1bWVudHMsCisgICB3aGVyZSB0aGUgZm9ybWF0IHN0cmluZyBkaXJlY3RpdmVzIGFyZSB0aGUgb25lcyBzdGFuZGFyZGl6ZWQgYnkgSVNPIEM5OQorICAgYW5kIFBPU0lYLiAgKi8KKyNpZiBfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNCkKKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URihmb3JtYXRzdHJpbmdfcGFyYW1ldGVyLCBmaXJzdF9hcmd1bWVudCkgXAorICAgX0dMX0FUVFJJQlVURV9GT1JNQVQgKChfX2dudV9wcmludGZfXywgZm9ybWF0c3RyaW5nX3BhcmFtZXRlciwgZmlyc3RfYXJndW1lbnQpKQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URihmb3JtYXRzdHJpbmdfcGFyYW1ldGVyLCBmaXJzdF9hcmd1bWVudCkgXAorICAgX0dMX0FUVFJJQlVURV9GT1JNQVQgKChfX3ByaW50Zl9fLCBmb3JtYXRzdHJpbmdfcGFyYW1ldGVyLCBmaXJzdF9hcmd1bWVudCkpCisjZW5kaWYKKworLyogX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGX1NZU1RFTSBpcyBsaWtlIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URiwKKyAgIGV4Y2VwdCB0aGF0IGl0IGluZGljYXRlcyB0byBHQ0MgdGhhdCB0aGUgc3VwcG9ydGVkIGZvcm1hdCBzdHJpbmcgZGlyZWN0aXZlcworICAgYXJlIHRoZSBvbmVzIG9mIHRoZSBzeXN0ZW0gcHJpbnRmKCksIHJhdGhlciB0aGFuIHRoZSBvbmVzIHN0YW5kYXJkaXplZCBieQorICAgSVNPIEM5OSBhbmQgUE9TSVguICAqLworI2RlZmluZSBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEZfU1lTVEVNKGZvcm1hdHN0cmluZ19wYXJhbWV0ZXIsIGZpcnN0X2FyZ3VtZW50KSBcCisgIF9HTF9BVFRSSUJVVEVfRk9STUFUICgoX19wcmludGZfXywgZm9ybWF0c3RyaW5nX3BhcmFtZXRlciwgZmlyc3RfYXJndW1lbnQpKQorCisvKiBfR0xfQVRUUklCVVRFX0ZPUk1BVF9TQ0FORgorICAgaW5kaWNhdGVzIHRvIEdDQyB0aGF0IHRoZSBmdW5jdGlvbiB0YWtlcyBhIGZvcm1hdCBzdHJpbmcgYW5kIGFyZ3VtZW50cywKKyAgIHdoZXJlIHRoZSBmb3JtYXQgc3RyaW5nIGRpcmVjdGl2ZXMgYXJlIHRoZSBvbmVzIHN0YW5kYXJkaXplZCBieSBJU08gQzk5CisgICBhbmQgUE9TSVguICAqLworI2lmIF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0KQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9GT1JNQVRfU0NBTkYoZm9ybWF0c3RyaW5nX3BhcmFtZXRlciwgZmlyc3RfYXJndW1lbnQpIFwKKyAgIF9HTF9BVFRSSUJVVEVfRk9STUFUICgoX19nbnVfc2NhbmZfXywgZm9ybWF0c3RyaW5nX3BhcmFtZXRlciwgZmlyc3RfYXJndW1lbnQpKQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfRk9STUFUX1NDQU5GKGZvcm1hdHN0cmluZ19wYXJhbWV0ZXIsIGZpcnN0X2FyZ3VtZW50KSBcCisgICBfR0xfQVRUUklCVVRFX0ZPUk1BVCAoKF9fc2NhbmZfXywgZm9ybWF0c3RyaW5nX3BhcmFtZXRlciwgZmlyc3RfYXJndW1lbnQpKQorI2VuZGlmCisKKy8qIF9HTF9BVFRSSUJVVEVfRk9STUFUX1NDQU5GX1NZU1RFTSBpcyBsaWtlIF9HTF9BVFRSSUJVVEVfRk9STUFUX1NDQU5GLAorICAgZXhjZXB0IHRoYXQgaXQgaW5kaWNhdGVzIHRvIEdDQyB0aGF0IHRoZSBzdXBwb3J0ZWQgZm9ybWF0IHN0cmluZyBkaXJlY3RpdmVzCisgICBhcmUgdGhlIG9uZXMgb2YgdGhlIHN5c3RlbSBzY2FuZigpLCByYXRoZXIgdGhhbiB0aGUgb25lcyBzdGFuZGFyZGl6ZWQgYnkKKyAgIElTTyBDOTkgYW5kIFBPU0lYLiAgKi8KKyNkZWZpbmUgX0dMX0FUVFJJQlVURV9GT1JNQVRfU0NBTkZfU1lTVEVNKGZvcm1hdHN0cmluZ19wYXJhbWV0ZXIsIGZpcnN0X2FyZ3VtZW50KSBcCisgIF9HTF9BVFRSSUJVVEVfRk9STUFUICgoX19zY2FuZl9fLCBmb3JtYXRzdHJpbmdfcGFyYW1ldGVyLCBmaXJzdF9hcmd1bWVudCkpCisKKy8qIFNvbGFyaXMgMTAgZGVjbGFyZXMgcmVuYW1lYXQgaW4gPHVuaXN0ZC5oPiwgbm90IGluIDxzdGRpby5oPi4gICovCisvKiBCdXQgaW4gYW55IGNhc2UgYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zLiAgKi8KKyNpZiAoMCB8fCBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLKSAmJiBkZWZpbmVkIF9fc3VuIFwKKyAgICAmJiAhIGRlZmluZWQgX19HTElCQ19fCisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKworLyogVGhlIGRlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwgZXRjLiBhcmUgY29waWVkIGhlcmUuICAqLworI2lmbmRlZiBfR0xfQ1hYREVGU19ICisjZGVmaW5lIF9HTF9DWFhERUZTX0gKKworLyogVGhlIHRocmVlIG1vc3QgZnJlcXVlbnQgdXNlIGNhc2VzIG9mIHRoZXNlIG1hY3JvcyBhcmU6CisKKyAgICogRm9yIHByb3ZpZGluZyBhIHN1YnN0aXR1dGUgZm9yIGEgZnVuY3Rpb24gdGhhdCBpcyBtaXNzaW5nIG9uIHNvbWUKKyAgICAgcGxhdGZvcm1zLCBidXQgaXMgZGVjbGFyZWQgYW5kIHdvcmtzIGZpbmUgb24gdGhlIHBsYXRmb3JtcyBvbiB3aGljaAorICAgICBpdCBleGlzdHM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiAhQEhBVkVfRk9PQAorICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorCisgICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBhbGwgcGxhdGZvcm1zLAorICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBwbGF0Zm9ybXM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACisgICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyAgICAgICAjICAgdW5kZWYgZm9vCisgICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKyAgICAgICAjIGVsc2UKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorCisgICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBzb21lIHBsYXRmb3JtcworICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBvZiB0aGVtIGFuZAorICAgICBpcyBhZGRpdGlvbmFsbHkgZWl0aGVyIG1pc3Npbmcgb3IgdW5kZWNsYXJlZCBvbiBzb21lIG90aGVyIHBsYXRmb3JtczoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorICAgICAgICMgICB1bmRlZiBmb28KKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworICAgICAgICMgZWxzZQorICAgICAgICMgIGlmICFASEFWRV9GT09AICAgb3IgICBpZiAhQEhBVkVfREVDTF9GT09ACisgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKyovCisKKy8qIF9HTF9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cworIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybiAiQyIKKyNlbHNlCisjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuCisjZW5kaWYKKworLyogX0dMX0ZVTkNERUNMX1JQTCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBkZWNsYXJlcyBhIHJlcGxhY2VtZW50IGZ1bmN0aW9uLCBuYW1lZCBycGxfZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCisgICBFeGFtcGxlOgorICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyAqLworI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9GVU5DREVDTF9SUExfMSAocnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykKKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1JQTF8xKHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICBfR0xfRVhURVJOX0MgcmV0dHlwZSBycGxfZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisKKy8qIF9HTF9GVU5DREVDTF9TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgZGVjbGFyZXMgdGhlIHN5c3RlbSBmdW5jdGlvbiwgbmFtZWQgZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCisgICBFeGFtcGxlOgorICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyAqLworI2RlZmluZSBfR0xfRlVOQ0RFQ0xfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9FWFRFUk5fQyByZXR0eXBlIGZ1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworCisvKiBfR0xfQ1hYQUxJQVNfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCisgICB0aGF0IHJlZGlyZWN0cyB0byBycGxfZnVuYywgaWYgR05VTElCX05BTUVTUEFDRSBpcyBkZWZpbmVkLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0NYWEFMSUFTX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CisgKi8KKyNkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpycGxfZnVuYzsgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xIChmdW5jLCBycGxfZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIHJwbF9mdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50CisgICBkZWNsYXJhdGlvbi4gIEEgY2FzdCBpcyB1c2VkIHRvIHNpbGVuY2UgdGhlICJpbnZhbGlkIGNvbnZlcnNpb24iIGVycm9yCisgICB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6cnBsX2Z1bmMpOyAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCisgICB0aGF0IHJlZGlyZWN0cyB0byB0aGUgc3lzdGVtIHByb3ZpZGVkIGZ1bmN0aW9uIGZ1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UKKyAgIGlzIGRlZmluZWQuCisgICBFeGFtcGxlOgorICAgICBfR0xfQ1hYQUxJQVNfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKyAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisgIC8qIElmIHdlIHdlcmUgdG8gd3JpdGUKKyAgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsKKyAgICAgbGlrZSBhYm92ZSBpbiBfR0xfQ1hYQUxJQVNfUlBMXzEsIHRoZSBjb21waWxlciBjb3VsZCBvcHRpbWl6ZSBjYWxscworICAgICBiZXR0ZXIgKHJlbW92ZSBhbiBpbmRpcmVjdGlvbiB0aHJvdWdoIGEgJ3N0YXRpYycgcG9pbnRlciB2YXJpYWJsZSksCisgICAgIGJ1dCB0aGVuIHRoZSBfR0xfQ1hYQUxJQVNXQVJOIG1hY3JvIGJlbG93IHdvdWxkIGNhdXNlIGEgd2FybmluZyBub3Qgb25seQorICAgICBmb3IgdXNlcyBvZiA6OmZ1bmMgYnV0IGFsc28gZm9yIHVzZXMgb2YgR05VTElCX05BTUVTUEFDRTo6ZnVuYy4gICovCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7ICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBmdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGRlY2xhcmF0aW9uLgorICAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IgdGhhdCB3b3VsZAorICAgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6ZnVuYyk7IFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzLCByZXR0eXBlMiwgcGFyYW1ldGVyczIpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBpcyBwaWNrZWQgYW1vbmcgYSBzZXQgb2Ygb3ZlcmxvYWRlZCBmdW5jdGlvbnMsCisgICBuYW1lbHkgdGhlIG9uZSB3aXRoIHJldHR5cGUyIGFuZCBwYXJhbWV0ZXJzMi4gIFR3byBjb25zZWN1dGl2ZSBjYXN0cworICAgYXJlIHVzZWQgdG8gc2lsZW5jZSB0aGUgImNhbm5vdCBmaW5kIGEgbWF0Y2giIGFuZCAiaW52YWxpZCBjb252ZXJzaW9uIgorICAgZXJyb3JzIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorICAvKiBUaGUgb3V0ZXIgY2FzdCBtdXN0IGJlIGEgcmVpbnRlcnByZXRfY2FzdC4KKyAgICAgVGhlIGlubmVyIGNhc3Q6IFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzZXQgb2Ygb3ZlcmxvYWRlZAorICAgICBmdW5jdGlvbnMsIGl0IHdvcmtzIGFzIGEgc3RhdGljX2Nhc3Q8PiwgY2hvb3NpbmcgdGhlIGRlc2lnbmF0ZWQgdmFyaWFudC4KKyAgICAgV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNpbmdsZSB2YXJpYW50LCBpdCB3b3JrcyBhcyBhCisgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Pi4gVGhlIHBhcmVudGhlc2l6ZWQgY2FzdCBzeW50YXggd29ya3MgYm90aCB3YXlzLiAgKi8KKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAocmV0dHlwZTIoKilwYXJhbWV0ZXJzMikoOjpmdW5jKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU1dBUk4gKGZ1bmMpOworICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gOjpmdW5jIGlzIHVzZWQgYnV0IG5vdCB3aGVuCisgICBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICBmdW5jIG11c3QgYmUgZGVmaW5lZCB3aXRob3V0IG92ZXJsb2FkZWQKKyAgIHZhcmlhbnRzLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOXzEgKGZ1bmMsIEdOVUxJQl9OQU1FU1BBQ0UpCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzEoZnVuYyxuYW1lc3BhY2UpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk5fMiAoZnVuYywgbmFtZXNwYWNlKQorLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKyMgaWYgIV9fT1BUSU1JWkVfXworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgIF9HTF9XQVJOX09OX1VTRSAoZnVuYywgXAorICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAorICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKyAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTV0FSTjEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gdGhlIGdpdmVuIG92ZXJsb2FkZWQgdmFyaWFudCBvZiA6OmZ1bmMKKyAgIGlzIHVzZWQgYnV0IG5vdCB3aGVuIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOMV8xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBHTlVMSUJfTkFNRVNQQUNFKQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk4xXzIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIG5hbWVzcGFjZSkKKy8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAorICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCisjIGlmICFfX09QVElNSVpFX18KKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworIyBlbHNlCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworI2VuZGlmIC8qIF9HTF9DWFhERUZTX0ggKi8KKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxMIGlzIGNvcGllZCBoZXJlLiAgKi8KKy8qIF9HTF9BUkdfTk9OTlVMTCgobiwuLi4sbSkpIHRlbGxzIHRoZSBjb21waWxlciBhbmQgc3RhdGljIGFuYWx5emVyIHRvb2xzCisgICB0aGF0IHRoZSB2YWx1ZXMgcGFzc2VkIGFzIGFyZ3VtZW50cyBuLCAuLi4sIG0gbXVzdCBiZSBub24tTlVMTCBwb2ludGVycy4KKyAgIG4gPSAxIHN0YW5kcyBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50LCBuID0gMiBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCBldGMuICAqLworI2lmbmRlZiBfR0xfQVJHX05PTk5VTEwKKyMgaWYgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gMykgfHwgX19HTlVDX18gPiAzCisjICBkZWZpbmUgX0dMX0FSR19OT05OVUxMKHBhcmFtcykgX19hdHRyaWJ1dGVfXyAoKF9fbm9ubnVsbF9fIHBhcmFtcykpCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKQorIyBlbmRpZgorI2VuZGlmCisKKy8qIFRoZSBkZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRSBpcyBjb3BpZWQgaGVyZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX09OX1VTRQorCisjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorLyogQSBjb21waWxlciBhdHRyaWJ1dGUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyA0LjMuMCBhbmQgbGF0ZXIuICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmN0aW9uKSBmdW5jdGlvbiBfX2F0dHJpYnV0ZV9fICgoX193YXJuaW5nX18gKG1lc3NhZ2UpKSkKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKy8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uCisjIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorX0dMX1dBUk5fRVhURVJOX0MgaW50IF9nbF93YXJuX29uX3VzZQorIyBlbmRpZgorI2VuZGlmCisKKy8qIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmN0aW9uLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCAic3RyaW5nIikKKyAgIGlzIGxpa2UgX0dMX1dBUk5fT05fVVNFIChmdW5jdGlvbiwgInN0cmluZyIpLCBleGNlcHQgdGhhdCB0aGUgZnVuY3Rpb24gaXMKKyAgIGRlY2xhcmVkIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywKKyAgIGFuZCBhdHRyaWJ1dGVzLgorICAgVGhpcyB2YXJpYW50IGlzIHVzZWZ1bCBmb3Igb3ZlcmxvYWRlZCBmdW5jdGlvbnMgaW4gQysrLiBfR0xfV0FSTl9PTl9VU0UgZG9lcworICAgbm90IHdvcmsgaW4gdGhpcyBjYXNlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFX0NYWAorIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK2V4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMgXAorICAgICBfX2F0dHJpYnV0ZV9fICgoX193YXJuaW5nX18gKG1zZykpKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK2V4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCitfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisjIGVuZGlmCisjZW5kaWYKKworLyogX0dMX1dBUk5fRVhURVJOX0MgZGVjbGFyYXRpb247CisgICBwZXJmb3JtcyB0aGUgZGVjbGFyYXRpb24gd2l0aCBDIGxpbmthZ2UuICAqLworI2lmbmRlZiBfR0xfV0FSTl9FWFRFUk5fQworIyBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisjICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuICJDIgorIyBlbHNlCisjICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuCisjIGVuZGlmCisjZW5kaWYKKworLyogTWFjcm9zIGZvciBzdHJpbmdpZmljYXRpb24uICAqLworI2RlZmluZSBfR0xfU1RESU9fU1RSSU5HSVpFKHRva2VuKSAjdG9rZW4KKyNkZWZpbmUgX0dMX1NURElPX01BQ1JPRVhQQU5EX0FORF9TVFJJTkdJWkUodG9rZW4pIF9HTF9TVERJT19TVFJJTkdJWkUodG9rZW4pCisKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgZHByaW50ZiBycGxfZHByaW50ZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGRwcmludGYsIGludCwgKGludCBmZCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URiAoMiwgMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKGRwcmludGYsIGludCwgKGludCBmZCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGRwcmludGYsIGludCwgKGludCBmZCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URiAoMiwgMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChkcHJpbnRmLCBpbnQsIChpbnQgZmQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChkcHJpbnRmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZHByaW50ZgorIyBpZiBIQVZFX1JBV19ERUNMX0RQUklOVEYKK19HTF9XQVJOX09OX1VTRSAoZHByaW50ZiwgImRwcmludGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGRwcmludGYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKy8qIENsb3NlIFNUUkVBTSBhbmQgaXRzIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yLiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgZmNsb3NlIHJwbF9mY2xvc2UKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmY2xvc2UsIGludCwgKEZJTEUgKnN0cmVhbSkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKGZjbG9zZSwgaW50LCAoRklMRSAqc3RyZWFtKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZjbG9zZSwgaW50LCAoRklMRSAqc3RyZWFtKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmY2xvc2UpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmY2xvc2UKKy8qIEFzc3VtZSBmY2xvc2UgaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAoZmNsb3NlLCAiZmNsb3NlIGlzIG5vdCBhbHdheXMgUE9TSVggY29tcGxpYW50IC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZmNsb3NlIGZvciBwb3J0YWJsZSBQT1NJWCBjb21wbGlhbmNlIik7CisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmZG9wZW4KKyMgICBkZWZpbmUgZmRvcGVuIHJwbF9mZG9wZW4KKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmZG9wZW4sIEZJTEUgKiwgKGludCBmZCwgY29uc3QgY2hhciAqbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZmRvcGVuLCBGSUxFICosIChpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoZmRvcGVuLCBGSUxFICosIChpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZkb3Blbik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZkb3BlbgorLyogQXNzdW1lIGZkb3BlbiBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFIChmZG9wZW4sICJmZG9wZW4gb24gbmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zIGlzIG5vdCBQT1NJWCBjb21wbGlhbnQgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmZG9wZW4gZm9yIHBvcnRhYmlsaXR5Iik7CisjZW5kaWYKKworI2lmIDAKKy8qIEZsdXNoIGFsbCBwZW5kaW5nIGRhdGEgb24gU1RSRUFNIGFjY29yZGluZyB0byBQT1NJWCBydWxlcy4gIEJvdGgKKyAgIG91dHB1dCBhbmQgc2Vla2FibGUgaW5wdXQgc3RyZWFtcyBhcmUgc3VwcG9ydGVkLgorICAgTm90ZSEgTE9TUyBPRiBEQVRBIGNhbiBvY2N1ciBpZiBmZmx1c2ggaXMgYXBwbGllZCBvbiBhbiBpbnB1dCBzdHJlYW0KKyAgIHRoYXQgaXMgX25vdF9zZWVrYWJsZV8gb3Igb24gYW4gdXBkYXRlIHN0cmVhbSB0aGF0IGlzIF9ub3Rfc2Vla2FibGVfCisgICBhbmQgaW4gd2hpY2ggdGhlIG1vc3QgcmVjZW50IG9wZXJhdGlvbiB3YXMgaW5wdXQuICBTZWVrYWJpbGl0eSBjYW4KKyAgIGJlIHRlc3RlZCB3aXRoIGxzZWVrKGZpbGVubyhmcCksMCxTRUVLX0NVUikuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBmZmx1c2ggcnBsX2ZmbHVzaAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZmbHVzaCwgaW50LCAoRklMRSAqZ2xfc3RyZWFtKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmZmx1c2gsIGludCwgKEZJTEUgKmdsX3N0cmVhbSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChmZmx1c2gsIGludCwgKEZJTEUgKmdsX3N0cmVhbSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZmZsdXNoKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZmZsdXNoCisvKiBBc3N1bWUgZmZsdXNoIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKGZmbHVzaCwgImZmbHVzaCBpcyBub3QgYWx3YXlzIFBPU0lYIGNvbXBsaWFudCAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZmbHVzaCBmb3IgcG9ydGFibGUgUE9TSVggY29tcGxpYW5jZSIpOworI2VuZGlmCisKKyNpZiAxCisjIGlmIDAgJiYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmZ2V0YworIyAgIGRlZmluZSBmZ2V0YyBycGxfZmdldGMKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmZ2V0YywgaW50LCAoRklMRSAqc3RyZWFtKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZmdldGMsIGludCwgKEZJTEUgKnN0cmVhbSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChmZ2V0YywgaW50LCAoRklMRSAqc3RyZWFtKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmZ2V0Yyk7CisjZW5kaWYKKworI2lmIDEKKyMgaWYgMCAmJiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZnZXRzCisjICAgZGVmaW5lIGZnZXRzIHJwbF9mZ2V0cworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZnZXRzLCBjaGFyICosIChjaGFyICpzLCBpbnQgbiwgRklMRSAqc3RyZWFtKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMykpKTsKK19HTF9DWFhBTElBU19SUEwgKGZnZXRzLCBjaGFyICosIChjaGFyICpzLCBpbnQgbiwgRklMRSAqc3RyZWFtKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZnZXRzLCBjaGFyICosIChjaGFyICpzLCBpbnQgbiwgRklMRSAqc3RyZWFtKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmZ2V0cyk7CisjZW5kaWYKKworI2lmIDEKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmb3BlbgorIyAgIGRlZmluZSBmb3BlbiBycGxfZm9wZW4KKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmb3BlbiwgRklMRSAqLCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZm9wZW4sIEZJTEUgKiwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICptb2RlKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZvcGVuLCBGSUxFICosIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZm9wZW4pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmb3BlbgorLyogQXNzdW1lIGZvcGVuIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKGZvcGVuLCAiZm9wZW4gb24gbmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zIGlzIG5vdCBQT1NJWCBjb21wbGlhbnQgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmb3BlbiBmb3IgcG9ydGFiaWxpdHkiKTsKKyNlbmRpZgorCisjaWYgMSB8fCAxCisjIGlmICgxICYmIDEpIFwKKyAgICAgfHwgKDEgJiYgMCAmJiAoMCB8fCAwKSkKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGZwcmludGYgcnBsX2ZwcmludGYKKyMgIGVuZGlmCisjICBkZWZpbmUgR05VTElCX292ZXJyaWRlc19mcHJpbnRmIDEKKyMgIGlmIDEgfHwgMQorX0dMX0ZVTkNERUNMX1JQTCAoZnByaW50ZiwgaW50LCAoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEYgKDIsIDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbHNlCitfR0xfRlVOQ0RFQ0xfUlBMIChmcHJpbnRmLCBpbnQsIChGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URl9TWVNURU0gKDIsIDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1JQTCAoZnByaW50ZiwgaW50LCAoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZwcmludGYsIGludCwgKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZnByaW50Zik7CisjZW5kaWYKKyNpZiAhMSAmJiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIGlmICFHTlVMSUJfb3ZlcnJpZGVzX2ZwcmludGYKKyMgIHVuZGVmIGZwcmludGYKKyMgZW5kaWYKKy8qIEFzc3VtZSBmcHJpbnRmIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKGZwcmludGYsICJmcHJpbnRmIGlzIG5vdCBhbHdheXMgUE9TSVggY29tcGxpYW50IC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZnByaW50Zi1wb3NpeCBmb3IgcG9ydGFibGUgIgorICAgICAgICAgICAgICAgICAiUE9TSVggY29tcGxpYW5jZSIpOworI2VuZGlmCisKKyNpZiAwCisvKiBEaXNjYXJkIGFsbCBwZW5kaW5nIGJ1ZmZlcmVkIEkvTyBkYXRhIG9uIFNUUkVBTS4KKyAgIFNUUkVBTSBtdXN0IG5vdCBiZSB3aWRlLWNoYXJhY3RlciBvcmllbnRlZC4KKyAgIFdoZW4gZGlzY2FyZGluZyBwZW5kaW5nIG91dHB1dCwgdGhlIGZpbGUgcG9zaXRpb24gaXMgc2V0IGJhY2sgdG8gd2hlcmUgaXQKKyAgIHdhcyBiZWZvcmUgdGhlIHdyaXRlIGNhbGxzLiAgV2hlbiBkaXNjYXJkaW5nIHBlbmRpbmcgaW5wdXQsIHRoZSBmaWxlCisgICBwb3NpdGlvbiBpcyBhZHZhbmNlZCB0byBtYXRjaCB0aGUgZW5kIG9mIHRoZSBwcmV2aW91c2x5IHJlYWQgaW5wdXQuCisgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLiAgVXBvbiBlcnJvciwgcmV0dXJuIC0xIGFuZCBzZXQgZXJybm8uICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBmcHVyZ2UgcnBsX2ZwdXJnZQorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZwdXJnZSwgaW50LCAoRklMRSAqZ2xfc3RyZWFtKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZnB1cmdlLCBpbnQsIChGSUxFICpnbF9zdHJlYW0pKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGZwdXJnZSwgaW50LCAoRklMRSAqZ2xfc3RyZWFtKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZwdXJnZSwgaW50LCAoRklMRSAqZ2xfc3RyZWFtKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmcHVyZ2UpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmcHVyZ2UKKyMgaWYgSEFWRV9SQVdfREVDTF9GUFVSR0UKK19HTF9XQVJOX09OX1VTRSAoZnB1cmdlLCAiZnB1cmdlIGlzIG5vdCBhbHdheXMgcHJlc2VudCAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZwdXJnZSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMQorIyBpZiAwICYmICgwIHx8IDApCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZwdXRjCisjICAgZGVmaW5lIGZwdXRjIHJwbF9mcHV0YworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZwdXRjLCBpbnQsIChpbnQgYywgRklMRSAqc3RyZWFtKSBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZnB1dGMsIGludCwgKGludCBjLCBGSUxFICpzdHJlYW0pKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoZnB1dGMsIGludCwgKGludCBjLCBGSUxFICpzdHJlYW0pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZwdXRjKTsKKyNlbmRpZgorCisjaWYgMQorIyBpZiAwICYmICgwIHx8IDApCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZwdXRzCisjICAgZGVmaW5lIGZwdXRzIHJwbF9mcHV0cworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZwdXRzLCBpbnQsIChjb25zdCBjaGFyICpzdHJpbmcsIEZJTEUgKnN0cmVhbSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmcHV0cywgaW50LCAoY29uc3QgY2hhciAqc3RyaW5nLCBGSUxFICpzdHJlYW0pKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoZnB1dHMsIGludCwgKGNvbnN0IGNoYXIgKnN0cmluZywgRklMRSAqc3RyZWFtKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmcHV0cyk7CisjZW5kaWYKKworI2lmIDEKKyMgaWYgMCAmJiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZyZWFkCisjICAgZGVmaW5lIGZyZWFkIHJwbF9mcmVhZAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZyZWFkLCBzaXplX3QsICh2b2lkICpwdHIsIHNpemVfdCBzLCBzaXplX3QgbiwgRklMRSAqc3RyZWFtKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoNCkpKTsKK19HTF9DWFhBTElBU19SUEwgKGZyZWFkLCBzaXplX3QsICh2b2lkICpwdHIsIHNpemVfdCBzLCBzaXplX3QgbiwgRklMRSAqc3RyZWFtKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZyZWFkLCBzaXplX3QsICh2b2lkICpwdHIsIHNpemVfdCBzLCBzaXplX3QgbiwgRklMRSAqc3RyZWFtKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmcmVhZCk7CisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmcmVvcGVuCisjICAgZGVmaW5lIGZyZW9wZW4gcnBsX2ZyZW9wZW4KKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmcmVvcGVuLCBGSUxFICosCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUsIEZJTEUgKnN0cmVhbSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIsIDMpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmcmVvcGVuLCBGSUxFICosCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUsIEZJTEUgKnN0cmVhbSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChmcmVvcGVuLCBGSUxFICosCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUsIEZJTEUgKnN0cmVhbSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZnJlb3Blbik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZyZW9wZW4KKy8qIEFzc3VtZSBmcmVvcGVuIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKGZyZW9wZW4sCisgICAgICAgICAgICAgICAgICJmcmVvcGVuIG9uIG5hdGl2ZSBXaW5kb3dzIHBsYXRmb3JtcyBpcyBub3QgUE9TSVggY29tcGxpYW50IC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZnJlb3BlbiBmb3IgcG9ydGFiaWxpdHkiKTsKKyNlbmRpZgorCisjaWYgMQorIyBpZiAwICYmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZnNjYW5mCisjICAgZGVmaW5lIGZzY2FuZiBycGxfZnNjYW5mCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZnNjYW5mLCBpbnQsIChGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1NDQU5GX1NZU1RFTSAoMiwgMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZnNjYW5mLCBpbnQsIChGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZzY2FuZiwgaW50LCAoRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZnNjYW5mKTsKKyNlbmRpZgorCisKKy8qIFNldCB1cCB0aGUgZm9sbG93aW5nIHdhcm5pbmdzLCBiYXNlZCBvbiB3aGljaCBtb2R1bGVzIGFyZSBpbiB1c2UuCisgICBHTlUgQ29kaW5nIFN0YW5kYXJkcyBkaXNjb3VyYWdlIHRoZSB1c2Ugb2YgZnNlZWssIHNpbmNlIGl0IGltcG9zZXMKKyAgIGFuIGFyYml0cmFyeSBsaW1pdGF0aW9uIG9uIHNvbWUgMzItYml0IGhvc3RzLiAgUmVtZW1iZXIgdGhhdCB0aGUKKyAgIGZzZWVrIG1vZHVsZSBkZXBlbmRzIG9uIHRoZSBmc2Vla28gbW9kdWxlLCBzbyB3ZSBvbmx5IGhhdmUgdGhyZWUKKyAgIGNhc2VzIHRvIGNvbnNpZGVyOgorCisgICAxLiBUaGUgZGV2ZWxvcGVyIGlzIG5vdCB1c2luZyBlaXRoZXIgbW9kdWxlLiAgSXNzdWUgYSB3YXJuaW5nIHVuZGVyCisgICBHTlVMSUJfUE9TSVhDSEVDSyBmb3IgYm90aCBmdW5jdGlvbnMsIHRvIHJlbWluZCB0aGVtIHRoYXQgYm90aAorICAgZnVuY3Rpb25zIGhhdmUgYnVncyBvbiBzb21lIHN5c3RlbXMuICBfR0xfTk9fTEFSR0VfRklMRVMgaGFzIG5vCisgICBpbXBhY3Qgb24gdGhpcyB3YXJuaW5nLgorCisgICAyLiBUaGUgZGV2ZWxvcGVyIGlzIHVzaW5nIGJvdGggbW9kdWxlcy4gIFRoZXkgbWF5IGJlIHVuYXdhcmUgb2YgdGhlCisgICBhcmJpdHJhcnkgbGltaXRhdGlvbnMgb2YgZnNlZWssIHNvIGlzc3VlIGEgd2FybmluZyB1bmRlcgorICAgR05VTElCX1BPU0lYQ0hFQ0suICBPbiB0aGUgb3RoZXIgaGFuZCwgdGhleSBtYXkgYmUgdXNpbmcgYm90aAorICAgbW9kdWxlcyBpbnRlbnRpb25hbGx5LCBzbyB0aGUgZGV2ZWxvcGVyIGNhbiBkZWZpbmUKKyAgIF9HTF9OT19MQVJHRV9GSUxFUyBpbiB0aGUgY29tcGlsYXRpb24gdW5pdHMgd2hlcmUgdGhlIHVzZSBvZiBmc2VlaworICAgaXMgc2FmZSwgdG8gc2lsZW5jZSB0aGUgd2FybmluZy4KKworICAgMy4gVGhlIGRldmVsb3BlciBpcyB1c2luZyB0aGUgZnNlZWtvIG1vZHVsZSwgYnV0IG5vdCBmc2Vlay4gIEdudWxpYgorICAgZ3VhcmFudGVlcyB0aGF0IGZzZWVrIHdpbGwgc3RpbGwgd29yayBhcm91bmQgcGxhdGZvcm0gYnVncyBpbiB0aGF0CisgICBjYXNlLCBidXQgd2UgcHJlc3VtZSB0aGF0IHRoZSBkZXZlbG9wZXIgaXMgYXdhcmUgb2YgdGhlIHBpdGZhbGxzIG9mCisgICBmc2VlayBhbmQgd2FzIHRyeWluZyB0byBhdm9pZCBpdCwgc28gaXNzdWUgYSB3YXJuaW5nIGV2ZW4gd2hlbgorICAgR05VTElCX1BPU0lYQ0hFQ0sgaXMgdW5kZWZpbmVkLiAgQWdhaW4sIF9HTF9OT19MQVJHRV9GSUxFUyBjYW4gYmUKKyAgIGRlZmluZWQgdG8gc2lsZW5jZSB0aGUgd2FybmluZyBpbiBwYXJ0aWN1bGFyIGNvbXBpbGF0aW9uIHVuaXRzLgorICAgSW4gQysrIGNvbXBpbGF0aW9ucyB3aXRoIEdOVUxJQl9OQU1FU1BBQ0UsIGluIG9yZGVyIHRvIGF2b2lkIHRoYXQKKyAgIGZzZWVrIGdldHMgZGVmaW5lZCBhcyBhIG1hY3JvLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoZSBkZXZlbG9wZXIKKyAgIHVzZXMgdGhlIGZzZWVrIG1vZHVsZSwgZXZlbiBpZiBoZSBpcyBub3QgY2FsbGluZyB0aGUgZnNlZWsgZnVuY3Rpb24uCisKKyAgIE1vc3QgZ251bGliIGNsaWVudHMgdGhhdCBwZXJmb3JtIHN0cmVhbSBvcGVyYXRpb25zIHNob3VsZCBmYWxsIGludG8KKyAgIGNhdGVnb3J5IDMuICAqLworCisjaWYgMAorIyBpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLICYmICFkZWZpbmVkIF9HTF9OT19MQVJHRV9GSUxFUworIyAgZGVmaW5lIF9HTF9GU0VFS19XQVJOIC8qIENhdGVnb3J5IDIsIGFib3ZlLiAgKi8KKyMgIHVuZGVmIGZzZWVrCisjIGVuZGlmCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZnNlZWsKKyMgICBkZWZpbmUgZnNlZWsgcnBsX2ZzZWVrCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZnNlZWssIGludCwgKEZJTEUgKmZwLCBsb25nIG9mZnNldCwgaW50IHdoZW5jZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmc2VlaywgaW50LCAoRklMRSAqZnAsIGxvbmcgb2Zmc2V0LCBpbnQgd2hlbmNlKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZzZWVrLCBpbnQsIChGSUxFICpmcCwgbG9uZyBvZmZzZXQsIGludCB3aGVuY2UpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZzZWVrKTsKKyNlbmRpZgorCisjaWYgMAorIyBpZiAhMCAmJiAhZGVmaW5lZCBfR0xfTk9fTEFSR0VfRklMRVMKKyMgIGRlZmluZSBfR0xfRlNFRUtfV0FSTiAvKiBDYXRlZ29yeSAzLCBhYm92ZS4gICovCisjICB1bmRlZiBmc2VlaworIyBlbmRpZgorIyBpZiAwCisvKiBQcm92aWRlIGFuIGZzZWVrbyBmdW5jdGlvbiB0aGF0IGlzIGF3YXJlIG9mIGEgcHJlY2VkaW5nIGZmbHVzaCgpLCBhbmQgd2hpY2gKKyAgIGRldGVjdHMgcGlwZXMuICAqLworIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmc2Vla28KKyMgICBkZWZpbmUgZnNlZWtvIHJwbF9mc2Vla28KKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmc2Vla28sIGludCwgKEZJTEUgKmZwLCBvZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKGZzZWVrbywgaW50LCAoRklMRSAqZnAsIG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSkpOworIyBlbHNlCisjICBpZiAhIDEKK19HTF9GVU5DREVDTF9TWVMgKGZzZWVrbywgaW50LCAoRklMRSAqZnAsIG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZzZWVrbywgaW50LCAoRklMRSAqZnAsIG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZnNlZWtvKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgZGVmaW5lIF9HTF9GU0VFS19XQVJOIC8qIENhdGVnb3J5IDEsIGFib3ZlLiAgKi8KKyMgdW5kZWYgZnNlZWsKKyMgdW5kZWYgZnNlZWtvCisjIGlmIEhBVkVfUkFXX0RFQ0xfRlNFRUtPCitfR0xfV0FSTl9PTl9VU0UgKGZzZWVrbywgImZzZWVrbyBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZnNlZWtvIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfR0xfRlNFRUtfV0FSTgorIyB1bmRlZiBfR0xfRlNFRUtfV0FSTgorLyogSGVyZSwgZWl0aGVyIGZzZWVrIGlzIHVuZGVmaW5lZCAoYnV0IEM4OSBndWFyYW50ZWVzIHRoYXQgaXQgaXMKKyAgIGRlY2xhcmVkKSwgb3IgaXQgaXMgZGVmaW5lZCBhcyBycGxfZnNlZWsgKGRlY2xhcmVkIGFib3ZlKS4gICovCitfR0xfV0FSTl9PTl9VU0UgKGZzZWVrLCAiZnNlZWsgY2Fubm90IGhhbmRsZSBmaWxlcyBsYXJnZXIgdGhhbiA0IEdCICIKKyAgICAgICAgICAgICAgICAgIm9uIDMyLWJpdCBwbGF0Zm9ybXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZnNlZWtvIGZ1bmN0aW9uIGZvciBoYW5kbGluZyBvZiBsYXJnZSBmaWxlcyIpOworI2VuZGlmCisKKworLyogZnRlbGwsIGZ0ZWxsby4gIFNlZSB0aGUgY29tbWVudHMgb24gZnNlZWsvZnNlZWtvLiAgKi8KKworI2lmIDAKKyMgaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSyAmJiAhZGVmaW5lZCBfR0xfTk9fTEFSR0VfRklMRVMKKyMgIGRlZmluZSBfR0xfRlRFTExfV0FSTiAvKiBDYXRlZ29yeSAyLCBhYm92ZS4gICovCisjICB1bmRlZiBmdGVsbAorIyBlbmRpZgorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZ0ZWxsCisjICAgZGVmaW5lIGZ0ZWxsIHJwbF9mdGVsbAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZ0ZWxsLCBsb25nLCAoRklMRSAqZnApIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmdGVsbCwgbG9uZywgKEZJTEUgKmZwKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZ0ZWxsLCBsb25nLCAoRklMRSAqZnApKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZ0ZWxsKTsKKyNlbmRpZgorCisjaWYgMAorIyBpZiAhMCAmJiAhZGVmaW5lZCBfR0xfTk9fTEFSR0VfRklMRVMKKyMgIGRlZmluZSBfR0xfRlRFTExfV0FSTiAvKiBDYXRlZ29yeSAzLCBhYm92ZS4gICovCisjICB1bmRlZiBmdGVsbAorIyBlbmRpZgorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZ0ZWxsbworIyAgIGRlZmluZSBmdGVsbG8gcnBsX2Z0ZWxsbworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZ0ZWxsbywgb2ZmX3QsIChGSUxFICpmcCkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKGZ0ZWxsbywgb2ZmX3QsIChGSUxFICpmcCkpOworIyBlbHNlCisjICBpZiAhIDEKK19HTF9GVU5DREVDTF9TWVMgKGZ0ZWxsbywgb2ZmX3QsIChGSUxFICpmcCkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmdGVsbG8sIG9mZl90LCAoRklMRSAqZnApKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZ0ZWxsbyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIGRlZmluZSBfR0xfRlRFTExfV0FSTiAvKiBDYXRlZ29yeSAxLCBhYm92ZS4gICovCisjIHVuZGVmIGZ0ZWxsCisjIHVuZGVmIGZ0ZWxsbworIyBpZiBIQVZFX1JBV19ERUNMX0ZURUxMTworX0dMX1dBUk5fT05fVVNFIChmdGVsbG8sICJmdGVsbG8gaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZ0ZWxsbyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX0dMX0ZURUxMX1dBUk4KKyMgdW5kZWYgX0dMX0ZURUxMX1dBUk4KKy8qIEhlcmUsIGVpdGhlciBmdGVsbCBpcyB1bmRlZmluZWQgKGJ1dCBDODkgZ3VhcmFudGVlcyB0aGF0IGl0IGlzCisgICBkZWNsYXJlZCksIG9yIGl0IGlzIGRlZmluZWQgYXMgcnBsX2Z0ZWxsIChkZWNsYXJlZCBhYm92ZSkuICAqLworX0dMX1dBUk5fT05fVVNFIChmdGVsbCwgImZ0ZWxsIGNhbm5vdCBoYW5kbGUgZmlsZXMgbGFyZ2VyIHRoYW4gNCBHQiAiCisgICAgICAgICAgICAgICAgICJvbiAzMi1iaXQgcGxhdGZvcm1zIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGZ0ZWxsbyBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgb2YgbGFyZ2UgZmlsZXMiKTsKKyNlbmRpZgorCisKKyNpZiAxCisjIGlmIDAgJiYgKDAgfHwgMCkKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZndyaXRlCisjICAgZGVmaW5lIGZ3cml0ZSBycGxfZndyaXRlCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZndyaXRlLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgcywgc2l6ZV90IG4sIEZJTEUgKnN0cmVhbSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDQpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmd3JpdGUsIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzLCBzaXplX3QgbiwgRklMRSAqc3RyZWFtKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZ3cml0ZSwgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHMsIHNpemVfdCBuLCBGSUxFICpzdHJlYW0pKTsKKworLyogV29yayBhcm91bmQgZ2xpYmMgYnVnIDExOTU5CisgICA8aHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTE5NTk+LAorICAgd2hpY2ggc29tZXRpbWVzIGNhdXNlcyBhbiB1bndhbnRlZCBkaWFnbm9zdGljIGZvciBmd3JpdGUgY2FsbHMuCisgICBUaGlzIGFmZmVjdHMgb25seSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBhdHRyaWJ1dGVzLCBzbyBpdCdzIG5vdAorICAgbmVlZGVkIGZvciBDKysuICAqLworIyAgaWYgIWRlZmluZWQgX19jcGx1c3BsdXMgJiYgMCA8IF9fVVNFX0ZPUlRJRllfTEVWRUwKK19HTF9TVERJT19JTkxJTkUgc2l6ZV90IF9HTF9BUkdfTk9OTlVMTCAoKDEsIDQpKQorcnBsX2Z3cml0ZSAoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgcywgc2l6ZV90IG4sIEZJTEUgKnN0cmVhbSkKK3sKKyAgc2l6ZV90IHIgPSBmd3JpdGUgKHB0ciwgcywgbiwgc3RyZWFtKTsKKyAgKHZvaWQpIHI7CisgIHJldHVybiByOworfQorIyAgIHVuZGVmIGZ3cml0ZQorIyAgIGRlZmluZSBmd3JpdGUgcnBsX2Z3cml0ZQorIyAgZW5kaWYKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZ3cml0ZSk7CisjZW5kaWYKKworI2lmIDEKKyMgaWYgMCAmJiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGdldGMKKyMgICBkZWZpbmUgZ2V0YyBycGxfZmdldGMKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmZ2V0YywgaW50LCAoRklMRSAqc3RyZWFtKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTF8xIChnZXRjLCBycGxfZmdldGMsIGludCwgKEZJTEUgKnN0cmVhbSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChnZXRjLCBpbnQsIChGSUxFICpzdHJlYW0pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGdldGMpOworI2VuZGlmCisKKyNpZiAxCisjIGlmIDAgJiYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBnZXRjaGFyCisjICAgZGVmaW5lIGdldGNoYXIgcnBsX2dldGNoYXIKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChnZXRjaGFyLCBpbnQsICh2b2lkKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChnZXRjaGFyLCBpbnQsICh2b2lkKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGdldGNoYXIsIGludCwgKHZvaWQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGdldGNoYXIpOworI2VuZGlmCisKKyNpZiAxCisvKiBSZWFkIGlucHV0LCB1cCB0byAoYW5kIGluY2x1ZGluZykgdGhlIG5leHQgb2NjdXJyZW5jZSBvZiBERUxJTUlURVIsIGZyb20KKyAgIFNUUkVBTSwgc3RvcmUgaXQgaW4gKkxJTkVQVFIgKGFuZCBOVUwtdGVybWluYXRlIGl0KS4KKyAgICpMSU5FUFRSIGlzIGEgcG9pbnRlciByZXR1cm5lZCBmcm9tIG1hbGxvYyAob3IgTlVMTCksIHBvaW50aW5nIHRvICpMSU5FU0laRQorICAgYnl0ZXMgb2Ygc3BhY2UuICBJdCBpcyByZWFsbG9jJ2QgYXMgbmVjZXNzYXJ5LgorICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBhbmQgc3RvcmVkIGF0ICpMSU5FUFRSIChub3QgaW5jbHVkaW5nIHRoZQorICAgTlVMIHRlcm1pbmF0b3IpLCBvciAtMSBvbiBlcnJvciBvciBFT0YuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGdldGRlbGltCisjICAgZGVmaW5lIGdldGRlbGltIHJwbF9nZXRkZWxpbQorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGdldGRlbGltLCBzc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKipsaW5lcHRyLCBzaXplX3QgKmxpbmVzaXplLCBpbnQgZGVsaW1pdGVyLAorICAgICAgICAgICAgICAgICAgIEZJTEUgKnN0cmVhbSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIsIDQpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChnZXRkZWxpbSwgc3NpemVfdCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqbGluZXB0ciwgc2l6ZV90ICpsaW5lc2l6ZSwgaW50IGRlbGltaXRlciwKKyAgICAgICAgICAgICAgICAgICBGSUxFICpzdHJlYW0pKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGdldGRlbGltLCBzc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKipsaW5lcHRyLCBzaXplX3QgKmxpbmVzaXplLCBpbnQgZGVsaW1pdGVyLAorICAgICAgICAgICAgICAgICAgIEZJTEUgKnN0cmVhbSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIsIDQpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZ2V0ZGVsaW0sIHNzaXplX3QsCisgICAgICAgICAgICAgICAgICAoY2hhciAqKmxpbmVwdHIsIHNpemVfdCAqbGluZXNpemUsIGludCBkZWxpbWl0ZXIsCisgICAgICAgICAgICAgICAgICAgRklMRSAqc3RyZWFtKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChnZXRkZWxpbSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGdldGRlbGltCisjIGlmIEhBVkVfUkFXX0RFQ0xfR0VUREVMSU0KK19HTF9XQVJOX09OX1VTRSAoZ2V0ZGVsaW0sICJnZXRkZWxpbSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZ2V0ZGVsaW0gZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDEKKy8qIFJlYWQgYSBsaW5lLCB1cCB0byAoYW5kIGluY2x1ZGluZykgdGhlIG5leHQgbmV3bGluZSwgZnJvbSBTVFJFQU0sIHN0b3JlIGl0CisgICBpbiAqTElORVBUUiAoYW5kIE5VTC10ZXJtaW5hdGUgaXQpLgorICAgKkxJTkVQVFIgaXMgYSBwb2ludGVyIHJldHVybmVkIGZyb20gbWFsbG9jIChvciBOVUxMKSwgcG9pbnRpbmcgdG8gKkxJTkVTSVpFCisgICBieXRlcyBvZiBzcGFjZS4gIEl0IGlzIHJlYWxsb2MnZCBhcyBuZWNlc3NhcnkuCisgICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyByZWFkIGFuZCBzdG9yZWQgYXQgKkxJTkVQVFIgKG5vdCBpbmNsdWRpbmcgdGhlCisgICBOVUwgdGVybWluYXRvciksIG9yIC0xIG9uIGVycm9yIG9yIEVPRi4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZ2V0bGluZQorIyAgIGRlZmluZSBnZXRsaW5lIHJwbF9nZXRsaW5lCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZ2V0bGluZSwgc3NpemVfdCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqbGluZXB0ciwgc2l6ZV90ICpsaW5lc2l6ZSwgRklMRSAqc3RyZWFtKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMiwgMykpKTsKK19HTF9DWFhBTElBU19SUEwgKGdldGxpbmUsIHNzaXplX3QsCisgICAgICAgICAgICAgICAgICAoY2hhciAqKmxpbmVwdHIsIHNpemVfdCAqbGluZXNpemUsIEZJTEUgKnN0cmVhbSkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoZ2V0bGluZSwgc3NpemVfdCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqbGluZXB0ciwgc2l6ZV90ICpsaW5lc2l6ZSwgRklMRSAqc3RyZWFtKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMiwgMykpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChnZXRsaW5lLCBzc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKipsaW5lcHRyLCBzaXplX3QgKmxpbmVzaXplLCBGSUxFICpzdHJlYW0pKTsKKyMgZW5kaWYKKyMgaWYgMQorX0dMX0NYWEFMSUFTV0FSTiAoZ2V0bGluZSk7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGdldGxpbmUKKyMgaWYgSEFWRV9SQVdfREVDTF9HRVRMSU5FCitfR0xfV0FSTl9PTl9VU0UgKGdldGxpbmUsICJnZXRsaW5lIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBnZXRsaW5lIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIEl0IGlzIHZlcnkgcmFyZSB0aGF0IHRoZSBkZXZlbG9wZXIgZXZlciBoYXMgZnVsbCBjb250cm9sIG9mIHN0ZGluLAorICAgc28gYW55IHVzZSBvZiBnZXRzIHdhcnJhbnRzIGFuIHVuY29uZGl0aW9uYWwgd2FybmluZzsgYmVzaWRlcywgQzExCisgICByZW1vdmVkIGl0LiAgKi8KKyN1bmRlZiBnZXRzCisjaWYgSEFWRV9SQVdfREVDTF9HRVRTCitfR0xfV0FSTl9PTl9VU0UgKGdldHMsICJnZXRzIGlzIGEgc2VjdXJpdHkgaG9sZSAtIHVzZSBmZ2V0cyBpbnN0ZWFkIik7CisjZW5kaWYKKworCisjaWYgMSB8fCAwCitzdHJ1Y3Qgb2JzdGFjazsKKy8qIEdyb3cgYW4gb2JzdGFjayB3aXRoIGZvcm1hdHRlZCBvdXRwdXQuICBSZXR1cm4gdGhlIG51bWJlciBvZgorICAgYnl0ZXMgYWRkZWQgdG8gT0JTLiAgTm8gdHJhaWxpbmcgbnVsIGJ5dGUgaXMgYWRkZWQsIGFuZCB0aGUKKyAgIG9iamVjdCBzaG91bGQgYmUgY2xvc2VkIHdpdGggb2JzdGFja19maW5pc2ggYmVmb3JlIHVzZS4gIFVwb24KKyAgIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yLCBjYWxsIG9ic3RhY2tfYWxsb2NfZmFpbGVkX2hhbmRsZXIuICBVcG9uCisgICBvdGhlciBlcnJvciwgcmV0dXJuIC0xLiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgb2JzdGFja19wcmludGYgcnBsX29ic3RhY2tfcHJpbnRmCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAob2JzdGFja19wcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgb2JzdGFjayAqb2JzLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URiAoMiwgMykKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChvYnN0YWNrX3ByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKHN0cnVjdCBvYnN0YWNrICpvYnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisjIGVsc2UKKyMgIGlmICEwCitfR0xfRlVOQ0RFQ0xfU1lTIChvYnN0YWNrX3ByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKHN0cnVjdCBvYnN0YWNrICpvYnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgyLCAzKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChvYnN0YWNrX3ByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKHN0cnVjdCBvYnN0YWNrICpvYnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChvYnN0YWNrX3ByaW50Zik7CisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIG9ic3RhY2tfdnByaW50ZiBycGxfb2JzdGFja192cHJpbnRmCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAob2JzdGFja192cHJpbnRmLCBpbnQsCisgICAgICAgICAgICAgICAgICAoc3RydWN0IG9ic3RhY2sgKm9icywgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEYgKDIsIDApCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAob2JzdGFja192cHJpbnRmLCBpbnQsCisgICAgICAgICAgICAgICAgICAoc3RydWN0IG9ic3RhY2sgKm9icywgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZWxzZQorIyAgaWYgITAKK19HTF9GVU5DREVDTF9TWVMgKG9ic3RhY2tfdnByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKHN0cnVjdCBvYnN0YWNrICpvYnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgyLCAwKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChvYnN0YWNrX3ZwcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgb2JzdGFjayAqb2JzLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAob2JzdGFja192cHJpbnRmKTsKKyNlbmRpZgorCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocGNsb3NlLCBpbnQsIChGSUxFICpzdHJlYW0pIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwY2xvc2UsIGludCwgKEZJTEUgKnN0cmVhbSkpOworX0dMX0NYWEFMSUFTV0FSTiAocGNsb3NlKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcGNsb3NlCisjIGlmIEhBVkVfUkFXX0RFQ0xfUENMT1NFCitfR0xfV0FSTl9PTl9VU0UgKHBjbG9zZSwgInBjbG9zZSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcGNsb3NlIGZvciBtb3JlIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDEKKy8qIFByaW50IGEgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgZGVzY3JpYmluZyB0aGUgdmFsdWUgb2YgRVJSTk8sCisgICAoaWYgU1RSSU5HIGlzIG5vdCBOVUxMIGFuZCBub3QgZW1wdHkpIHByZWZpeGVkIHdpdGggU1RSSU5HIGFuZCAiOiAiLAorICAgYW5kIHRlcm1pbmF0ZWQgd2l0aCBhIG5ld2xpbmUuICAqLworIyBpZiAxCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBwZXJyb3IgcnBsX3BlcnJvcgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHBlcnJvciwgdm9pZCwgKGNvbnN0IGNoYXIgKnN0cmluZykpOworX0dMX0NYWEFMSUFTX1JQTCAocGVycm9yLCB2b2lkLCAoY29uc3QgY2hhciAqc3RyaW5nKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKHBlcnJvciwgdm9pZCwgKGNvbnN0IGNoYXIgKnN0cmluZykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocGVycm9yKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcGVycm9yCisvKiBBc3N1bWUgcGVycm9yIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKHBlcnJvciwgInBlcnJvciBpcyBub3QgYWx3YXlzIFBPU0lYIGNvbXBsaWFudCAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBlcnJvciBmb3IgcG9ydGFiaWxpdHkiKTsKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHBvcGVuCisjICAgZGVmaW5lIHBvcGVuIHJwbF9wb3BlbgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHBvcGVuLCBGSUxFICosIChjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKm1vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocG9wZW4sIEZJTEUgKiwgKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqbW9kZSkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocG9wZW4sIEZJTEUgKiwgKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocG9wZW4sIEZJTEUgKiwgKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqbW9kZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocG9wZW4pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3BlbgorIyBpZiBIQVZFX1JBV19ERUNMX1BPUEVOCitfR0xfV0FSTl9PTl9VU0UgKHBvcGVuLCAicG9wZW4gaXMgYnVnZ3kgb24gc29tZSBwbGF0Zm9ybXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwb3BlbiBvciBwaXBlIGZvciBtb3JlIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDEgfHwgMQorIyBpZiAoMSAmJiAxKSBcCisgICAgIHx8ICgxICYmIDAgJiYgKDAgfHwgMCkpCisjICBpZiBkZWZpbmVkIF9fR05VQ19fCisjICAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKy8qIERvbid0IGJyZWFrIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsTSxOKSkpLiAgKi8KKyMgICAgZGVmaW5lIHByaW50ZiBfX3ByaW50Zl9fCisjICAgZW5kaWYKKyMgICBpZiAxIHx8IDEKK19HTF9GVU5DREVDTF9SUExfMSAoX19wcmludGZfXywgaW50LAorICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gKCJfIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfU1RESU9fTUFDUk9FWFBBTkRfQU5EX1NUUklOR0laRShycGxfcHJpbnRmKSkKKyAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgxLCAyKQorICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgIGVsc2UKK19HTF9GVU5DREVDTF9SUExfMSAoX19wcmludGZfXywgaW50LAorICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gKCJfIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfU1RESU9fTUFDUk9FWFBBTkRfQU5EX1NUUklOR0laRShycGxfcHJpbnRmKSkKKyAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGX1NZU1RFTSAoMSwgMikKKyAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgICBlbmRpZgorX0dMX0NYWEFMSUFTX1JQTF8xIChwcmludGYsIF9fcHJpbnRmX18sIGludCwgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisjICBlbHNlCisjICAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICAgZGVmaW5lIHByaW50ZiBycGxfcHJpbnRmCisjICAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgxLCAyKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHByaW50ZiwgaW50LCAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKTsKKyMgIGVuZGlmCisjICBkZWZpbmUgR05VTElCX292ZXJyaWRlc19wcmludGYgMQorIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChwcmludGYsIGludCwgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwcmludGYpOworI2VuZGlmCisjaWYgITEgJiYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyBpZiAhR05VTElCX292ZXJyaWRlc19wcmludGYKKyMgIHVuZGVmIHByaW50ZgorIyBlbmRpZgorLyogQXNzdW1lIHByaW50ZiBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFIChwcmludGYsICJwcmludGYgaXMgbm90IGFsd2F5cyBQT1NJWCBjb21wbGlhbnQgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwcmludGYtcG9zaXggZm9yIHBvcnRhYmxlICIKKyAgICAgICAgICAgICAgICAgIlBPU0lYIGNvbXBsaWFuY2UiKTsKKyNlbmRpZgorCisjaWYgMQorIyBpZiAwICYmICgwIHx8IDApCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHB1dGMKKyMgICBkZWZpbmUgcHV0YyBycGxfZnB1dGMKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmcHV0YywgaW50LCAoaW50IGMsIEZJTEUgKnN0cmVhbSkgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUExfMSAocHV0YywgcnBsX2ZwdXRjLCBpbnQsIChpbnQgYywgRklMRSAqc3RyZWFtKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKHB1dGMsIGludCwgKGludCBjLCBGSUxFICpzdHJlYW0pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHB1dGMpOworI2VuZGlmCisKKyNpZiAxCisjIGlmIDAgJiYgKDAgfHwgMCkKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcHV0Y2hhcgorIyAgIGRlZmluZSBwdXRjaGFyIHJwbF9wdXRjaGFyCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocHV0Y2hhciwgaW50LCAoaW50IGMpKTsKK19HTF9DWFhBTElBU19SUEwgKHB1dGNoYXIsIGludCwgKGludCBjKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKHB1dGNoYXIsIGludCwgKGludCBjKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwdXRjaGFyKTsKKyNlbmRpZgorCisjaWYgMQorIyBpZiAwICYmICgwIHx8IDApCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHB1dHMKKyMgICBkZWZpbmUgcHV0cyBycGxfcHV0cworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHB1dHMsIGludCwgKGNvbnN0IGNoYXIgKnN0cmluZykgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHB1dHMsIGludCwgKGNvbnN0IGNoYXIgKnN0cmluZykpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChwdXRzLCBpbnQsIChjb25zdCBjaGFyICpzdHJpbmcpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHB1dHMpOworI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcmVtb3ZlCisjICAgZGVmaW5lIHJlbW92ZSBycGxfcmVtb3ZlCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocmVtb3ZlLCBpbnQsIChjb25zdCBjaGFyICpuYW1lKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocmVtb3ZlLCBpbnQsIChjb25zdCBjaGFyICpuYW1lKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKHJlbW92ZSwgaW50LCAoY29uc3QgY2hhciAqbmFtZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocmVtb3ZlKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcmVtb3ZlCisvKiBBc3N1bWUgcmVtb3ZlIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKHJlbW92ZSwgInJlbW92ZSBjYW5ub3QgaGFuZGxlIGRpcmVjdG9yaWVzIG9uIHNvbWUgcGxhdGZvcm1zIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmVtb3ZlIGZvciBtb3JlIHBvcnRhYmlsaXR5Iik7CisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiByZW5hbWUKKyMgICBkZWZpbmUgcmVuYW1lIHJwbF9yZW5hbWUKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChyZW5hbWUsIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpvbGRfZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm5ld19maWxlbmFtZSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChyZW5hbWUsIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpvbGRfZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm5ld19maWxlbmFtZSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChyZW5hbWUsIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpvbGRfZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm5ld19maWxlbmFtZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocmVuYW1lKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcmVuYW1lCisvKiBBc3N1bWUgcmVuYW1lIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKHJlbmFtZSwgInJlbmFtZSBpcyBidWdneSBvbiBzb21lIHBsYXRmb3JtcyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHJlbmFtZSBmb3IgbW9yZSBwb3J0YWJpbGl0eSIpOworI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcmVuYW1lYXQKKyMgICBkZWZpbmUgcmVuYW1lYXQgcnBsX3JlbmFtZWF0CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocmVuYW1lYXQsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQxLCBjaGFyIGNvbnN0ICpmaWxlMSwgaW50IGZkMiwgY2hhciBjb25zdCAqZmlsZTIpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyLCA0KSkpOworX0dMX0NYWEFMSUFTX1JQTCAocmVuYW1lYXQsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQxLCBjaGFyIGNvbnN0ICpmaWxlMSwgaW50IGZkMiwgY2hhciBjb25zdCAqZmlsZTIpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHJlbmFtZWF0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkMSwgY2hhciBjb25zdCAqZmlsZTEsIGludCBmZDIsIGNoYXIgY29uc3QgKmZpbGUyKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMiwgNCkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChyZW5hbWVhdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZDEsIGNoYXIgY29uc3QgKmZpbGUxLCBpbnQgZmQyLCBjaGFyIGNvbnN0ICpmaWxlMikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocmVuYW1lYXQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiByZW5hbWVhdAorIyBpZiBIQVZFX1JBV19ERUNMX1JFTkFNRUFUCitfR0xfV0FSTl9PTl9VU0UgKHJlbmFtZWF0LCAicmVuYW1lYXQgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmVuYW1lYXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDEKKyMgaWYgMCAmJiAwCisjICBpZiBkZWZpbmVkIF9fR05VQ19fCisjICAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICAgdW5kZWYgc2NhbmYKKy8qIERvbid0IGJyZWFrIF9fYXR0cmlidXRlX18oKGZvcm1hdChzY2FuZixNLE4pKSkuICAqLworIyAgICBkZWZpbmUgc2NhbmYgX19zY2FuZl9fCisjICAgZW5kaWYKK19HTF9GVU5DREVDTF9SUExfMSAoX19zY2FuZl9fLCBpbnQsCisgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgX19hc21fXyAoIl8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9TVERJT19NQUNST0VYUEFORF9BTkRfU1RSSU5HSVpFKHJwbF9zY2FuZikpCisgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1NDQU5GX1NZU1RFTSAoMSwgMikKKyAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUExfMSAoc2NhbmYsIF9fc2NhbmZfXywgaW50LCAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKTsKKyMgIGVsc2UKKyMgICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgICB1bmRlZiBzY2FuZgorIyAgICBkZWZpbmUgc2NhbmYgcnBsX3NjYW5mCisjICAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHNjYW5mLCBpbnQsIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1NDQU5GX1NZU1RFTSAoMSwgMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzY2FuZiwgaW50LCAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKTsKKyMgIGVuZGlmCisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKHNjYW5mLCBpbnQsIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoc2NhbmYpOworI2VuZGlmCisKKyNpZiAxCisjIGlmIDEKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHNucHJpbnRmIHJwbF9zbnByaW50ZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHNucHJpbnRmLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY2hhciAqc3RyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEYgKDMsIDQpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgzKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoc25wcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpzdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoc25wcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpzdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URiAoMywgNCkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDMpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc25wcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpzdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoc25wcmludGYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzbnByaW50ZgorIyBpZiBIQVZFX1JBV19ERUNMX1NOUFJJTlRGCitfR0xfV0FSTl9PTl9VU0UgKHNucHJpbnRmLCAic25wcmludGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHNucHJpbnRmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIFNvbWUgcGVvcGxlIHdvdWxkIGFyZ3VlIHRoYXQgYWxsIHNwcmludGYgdXNlcyBzaG91bGQgYmUgd2FybmVkIGFib3V0CisgICAoZm9yIGV4YW1wbGUsIE9wZW5CU0QgaXNzdWVzIGEgbGluayB3YXJuaW5nIGZvciBpdCksCisgICBzaW5jZSBpdCBjYW4gY2F1c2Ugc2VjdXJpdHkgaG9sZXMgZHVlIHRvIGJ1ZmZlciBvdmVycnVucy4KKyAgIEhvd2V2ZXIsIHdlIGJlbGlldmUgdGhhdCBzcHJpbnRmIGNhbiBiZSB1c2VkIHNhZmVseSwgYW5kIGlzIG1vcmUKKyAgIGVmZmljaWVudCB0aGFuIHNucHJpbnRmIGluIHRob3NlIHNhZmUgY2FzZXM7IGFuZCBhcyBwcm9vZiBvZiBvdXIKKyAgIGJlbGllZiwgd2UgdXNlIHNwcmludGYgaW4gc2V2ZXJhbCBnbnVsaWIgbW9kdWxlcy4gIFNvIHRoaXMgaGVhZGVyCisgICBpbnRlbnRpb25hbGx5IGF2b2lkcyBhZGRpbmcgYSB3YXJuaW5nIHRvIHNwcmludGYgZXhjZXB0IHdoZW4KKyAgIEdOVUxJQl9QT1NJWENIRUNLIGlzIGRlZmluZWQuICAqLworCisjaWYgMQorIyBpZiAxCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBzcHJpbnRmIHJwbF9zcHJpbnRmCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc3ByaW50ZiwgaW50LCAoY2hhciAqc3RyLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgyLCAzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoc3ByaW50ZiwgaW50LCAoY2hhciAqc3RyLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChzcHJpbnRmLCBpbnQsIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzcHJpbnRmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc3ByaW50ZgorLyogQXNzdW1lIHNwcmludGYgaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAoc3ByaW50ZiwgInNwcmludGYgaXMgbm90IGFsd2F5cyBQT1NJWCBjb21wbGlhbnQgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzcHJpbnRmLXBvc2l4IGZvciBwb3J0YWJsZSAiCisgICAgICAgICAgICAgICAgICJQT1NJWCBjb21wbGlhbmNlIik7CisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgdG1wZmlsZSBycGxfdG1wZmlsZQorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHRtcGZpbGUsIEZJTEUgKiwgKHZvaWQpKTsKK19HTF9DWFhBTElBU19SUEwgKHRtcGZpbGUsIEZJTEUgKiwgKHZvaWQpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAodG1wZmlsZSwgRklMRSAqLCAodm9pZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAodG1wZmlsZSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHRtcGZpbGUKKyMgaWYgSEFWRV9SQVdfREVDTF9UTVBGSUxFCitfR0xfV0FSTl9PTl9VU0UgKHRtcGZpbGUsICJ0bXBmaWxlIGlzIG5vdCB1c2FibGUgb24gbWluZ3cgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB0bXBmaWxlIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisvKiBXcml0ZSBmb3JtYXR0ZWQgb3V0cHV0IHRvIGEgc3RyaW5nIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB3aXRoIG1hbGxvYygpLgorICAgSWYgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHN1Y2NlZWRzLCBzdG9yZSB0aGUgYWRkcmVzcyBvZiB0aGUgc3RyaW5nIGluCisgICAqUkVTVUxUIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiByZXN1bHRpbmcgYnl0ZXMsIGV4Y2x1ZGluZyB0aGUgdHJhaWxpbmcKKyAgIE5VTC4gIFVwb24gbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IsIG9yIHNvbWUgb3RoZXIgZXJyb3IsIHJldHVybiAtMS4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGFzcHJpbnRmIHJwbF9hc3ByaW50ZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGFzcHJpbnRmLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY2hhciAqKnJlc3VsdCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEYgKDIsIDMpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoYXNwcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqcmVzdWx0LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoYXNwcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqcmVzdWx0LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URiAoMiwgMykKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoYXNwcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqcmVzdWx0LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoYXNwcmludGYpOworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSB2YXNwcmludGYgcnBsX3Zhc3ByaW50ZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHZhc3ByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKipyZXN1bHQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgyLCAwKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHZhc3ByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKipyZXN1bHQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh2YXNwcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqcmVzdWx0LCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URiAoMiwgMCkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAodmFzcHJpbnRmLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY2hhciAqKnJlc3VsdCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHZhc3ByaW50Zik7CisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgdmRwcmludGYgcnBsX3ZkcHJpbnRmCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAodmRwcmludGYsIGludCwgKGludCBmZCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEYgKDIsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAodmRwcmludGYsIGludCwgKGludCBmZCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHZkcHJpbnRmLCBpbnQsIChpbnQgZmQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgyLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKKyMgIGVuZGlmCisvKiBOZWVkIHRvIGNhc3QsIGJlY2F1c2Ugb24gU29sYXJpcywgdGhlIHRoaXJkIHBhcmFtZXRlciB3aWxsIGxpa2VseSBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFfbGlzdCBhcmdzLiAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVCAodmRwcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgKGludCBmZCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHZkcHJpbnRmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgdmRwcmludGYKKyMgaWYgSEFWRV9SQVdfREVDTF9WRFBSSU5URgorX0dMX1dBUk5fT05fVVNFICh2ZHByaW50ZiwgInZkcHJpbnRmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB2ZHByaW50ZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMSB8fCAxCisjIGlmICgxICYmIDEpIFwKKyAgICAgfHwgKDEgJiYgMCAmJiAoMCB8fCAwKSkKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHZmcHJpbnRmIHJwbF92ZnByaW50ZgorIyAgZW5kaWYKKyMgIGRlZmluZSBHTlVMSUJfb3ZlcnJpZGVzX3ZmcHJpbnRmIDEKKyMgIGlmIDEKK19HTF9GVU5DREVDTF9SUEwgKHZmcHJpbnRmLCBpbnQsIChGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEYgKDIsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyAgZWxzZQorX0dMX0ZVTkNERUNMX1JQTCAodmZwcmludGYsIGludCwgKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URl9TWVNURU0gKDIsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19SUEwgKHZmcHJpbnRmLCBpbnQsIChGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZWxzZQorLyogTmVlZCB0byBjYXN0LCBiZWNhdXNlIG9uIFNvbGFyaXMsIHRoZSB0aGlyZCBwYXJhbWV0ZXIgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFfbGlzdCBhcmdzCisgICBhbmQgR0NDJ3MgZml4aW5jbHVkZXMgZGlkIG5vdCBjaGFuZ2UgdGhpcyB0byBfX2dudWNfdmFfbGlzdC4gICovCitfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKHZmcHJpbnRmLCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgIChGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHZmcHJpbnRmKTsKKyNlbmRpZgorI2lmICExICYmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgaWYgIUdOVUxJQl9vdmVycmlkZXNfdmZwcmludGYKKyMgIHVuZGVmIHZmcHJpbnRmCisjIGVuZGlmCisvKiBBc3N1bWUgdmZwcmludGYgaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAodmZwcmludGYsICJ2ZnByaW50ZiBpcyBub3QgYWx3YXlzIFBPU0lYIGNvbXBsaWFudCAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHZmcHJpbnRmLXBvc2l4IGZvciBwb3J0YWJsZSAiCisgICAgICAgICAgICAgICAgICAgICAgIlBPU0lYIGNvbXBsaWFuY2UiKTsKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwICYmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgdmZzY2FuZgorIyAgIGRlZmluZSB2ZnNjYW5mIHJwbF92ZnNjYW5mCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAodmZzY2FuZiwgaW50LAorICAgICAgICAgICAgICAgICAgKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9TQ0FORl9TWVNURU0gKDIsIDApCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAodmZzY2FuZiwgaW50LAorICAgICAgICAgICAgICAgICAgKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAodmZzY2FuZiwgaW50LAorICAgICAgICAgICAgICAgICAgKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHZmc2NhbmYpOworI2VuZGlmCisKKyNpZiAwIHx8IDEKKyMgaWYgKDAgJiYgMCkgXAorICAgICB8fCAoMSAmJiAwICYmICgwIHx8IDApKQorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgdnByaW50ZiBycGxfdnByaW50ZgorIyAgZW5kaWYKKyMgIGRlZmluZSBHTlVMSUJfb3ZlcnJpZGVzX3ZwcmludGYgMQorIyAgaWYgMCB8fCAxCitfR0xfRlVOQ0RFQ0xfUlBMICh2cHJpbnRmLCBpbnQsIChjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgxLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZWxzZQorX0dMX0ZVTkNERUNMX1JQTCAodnByaW50ZiwgaW50LCAoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URl9TWVNURU0gKDEsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1JQTCAodnByaW50ZiwgaW50LCAoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZWxzZQorLyogTmVlZCB0byBjYXN0LCBiZWNhdXNlIG9uIFNvbGFyaXMsIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YV9saXN0IGFyZ3MKKyAgIGFuZCBHQ0MncyBmaXhpbmNsdWRlcyBkaWQgbm90IGNoYW5nZSB0aGlzIHRvIF9fZ251Y192YV9saXN0LiAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVCAodnByaW50ZiwgaW50LCAoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHZwcmludGYpOworI2VuZGlmCisjaWYgITAgJiYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyBpZiAhR05VTElCX292ZXJyaWRlc192cHJpbnRmCisjICB1bmRlZiB2cHJpbnRmCisjIGVuZGlmCisvKiBBc3N1bWUgdnByaW50ZiBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFICh2cHJpbnRmLCAidnByaW50ZiBpcyBub3QgYWx3YXlzIFBPU0lYIGNvbXBsaWFudCAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHZwcmludGYtcG9zaXggZm9yIHBvcnRhYmxlICIKKyAgICAgICAgICAgICAgICAgIlBPU0lYIGNvbXBsaWFuY2UiKTsKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwICYmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgdnNjYW5mCisjICAgZGVmaW5lIHZzY2FuZiBycGxfdnNjYW5mCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAodnNjYW5mLCBpbnQsIChjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9TQ0FORl9TWVNURU0gKDEsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHZzY2FuZiwgaW50LCAoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAodnNjYW5mLCBpbnQsIChjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAodnNjYW5mKTsKKyNlbmRpZgorCisjaWYgMQorIyBpZiAxCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSB2c25wcmludGYgcnBsX3ZzbnByaW50ZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHZzbnByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKnN0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgzLCAwKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMykpKTsKK19HTF9DWFhBTElBU19SUEwgKHZzbnByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKnN0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh2c25wcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpzdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URiAoMywgMCkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDMpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAodnNucHJpbnRmLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY2hhciAqc3RyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHZzbnByaW50Zik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHZzbnByaW50ZgorIyBpZiBIQVZFX1JBV19ERUNMX1ZTTlBSSU5URgorX0dMX1dBUk5fT05fVVNFICh2c25wcmludGYsICJ2c25wcmludGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHZzbnByaW50ZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMQorIyBpZiAxCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSB2c3ByaW50ZiBycGxfdnNwcmludGYKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh2c3ByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEYgKDIsIDApCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAodnNwcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKSk7CisjIGVsc2UKKy8qIE5lZWQgdG8gY2FzdCwgYmVjYXVzZSBvbiBTb2xhcmlzLCB0aGUgdGhpcmQgcGFyYW1ldGVyIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YV9saXN0IGFyZ3MKKyAgIGFuZCBHQ0MncyBmaXhpbmNsdWRlcyBkaWQgbm90IGNoYW5nZSB0aGlzIHRvIF9fZ251Y192YV9saXN0LiAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVCAodnNwcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHZzcHJpbnRmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgdnNwcmludGYKKy8qIEFzc3VtZSB2c3ByaW50ZiBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFICh2c3ByaW50ZiwgInZzcHJpbnRmIGlzIG5vdCBhbHdheXMgUE9TSVggY29tcGxpYW50IC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgdnNwcmludGYtcG9zaXggZm9yIHBvcnRhYmxlICIKKyAgICAgICAgICAgICAgICAgICAgICAiUE9TSVggY29tcGxpYW5jZSIpOworI2VuZGlmCisKK19HTF9JTkxJTkVfSEVBREVSX0VORAorCisjZW5kaWYgLyogX0dMX1NURElPX0ggKi8KKyNlbmRpZiAvKiBfR0xfU1RESU9fSCAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9kYXJ3aW4tbGliL3N0ZGxpYi5oIGIvZGFyd2luLWxpYi9zdGRsaWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmM5YWMxCi0tLSAvZGV2L251bGwKKysrIGIvZGFyd2luLWxpYi9zdGRsaWIuaApAQCAtMCwwICsxLDEyNTkgQEAKKy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8KKy8qIEEgR05VLWxpa2UgPHN0ZGxpYi5oPi4KKworICAgQ29weXJpZ2h0IChDKSAxOTk1LCAyMDAxLTIwMDQsIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmIF9fR05VQ19fID49IDMKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkIF9fbmVlZF9tYWxsb2NfYW5kX2NhbGxvYworLyogU3BlY2lhbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24gaW5zaWRlIGdsaWJjIGhlYWRlciBmaWxlcy4gICovCisKKyNpbmNsdWRlX25leHQgPHN0ZGxpYi5oPgorCisjZWxzZQorLyogTm9ybWFsIGludm9jYXRpb24gY29udmVudGlvbi4gICovCisKKyNpZm5kZWYgX0dMX1NURExJQl9ICisKKy8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyNpbmNsdWRlX25leHQgPHN0ZGxpYi5oPgorCisjaWZuZGVmIF9HTF9TVERMSUJfSAorI2RlZmluZSBfR0xfU1RETElCX0gKKworLyogTmV0QlNEIDUuMCBtaXMtZGVmaW5lcyBOVUxMLiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLyogTWlyQlNEIDEwIGRlZmluZXMgV0VYSVRTVEFUVVMgaW4gPHN5cy93YWl0Lmg+LCBub3QgaW4gPHN0ZGxpYi5oPi4gICovCisjaWYgMCAmJiAhZGVmaW5lZCBXRVhJVFNUQVRVUworIyBpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2VuZGlmCisKKy8qIFNvbGFyaXMgZGVjbGFyZXMgZ2V0bG9hZGF2ZygpIGluIDxzeXMvbG9hZGF2Zy5oPi4gICovCisjaWYgKDAgfHwgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSykgJiYgMAorIyBpbmNsdWRlIDxzeXMvbG9hZGF2Zy5oPgorI2VuZGlmCisKKy8qIE5hdGl2ZSBXaW5kb3dzIHBsYXRmb3JtcyBkZWNsYXJlIG1rdGVtcCgpIGluIDxpby5oPi4gICovCisjaWYgMCAmJiAoKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXykKKyMgaW5jbHVkZSA8aW8uaD4KKyNlbmRpZgorCisjaWYgMAorCisvKiBPU0YvMSA1LjEgZGVjbGFyZXMgJ3N0cnVjdCByYW5kb21fZGF0YScgaW4gPHJhbmRvbS5oPiwgd2hpY2ggaXMgaW5jbHVkZWQKKyAgIGZyb20gPHN0ZGxpYi5oPiBpZiBfUkVFTlRSQU5UIGlzIGRlZmluZWQuICBJbmNsdWRlIGl0IHdoZW5ldmVyIHdlIG5lZWQKKyAgICdzdHJ1Y3QgcmFuZG9tX2RhdGEnLiAgKi8KKyMgaWYgMQorIyAgaW5jbHVkZSA8cmFuZG9tLmg+CisjIGVuZGlmCisKKyMgaWYgITEgfHwgMCB8fCAhMQorIyAgaW5jbHVkZSA8c3RkaW50Lmg+CisjIGVuZGlmCisKKyMgaWYgITEKKy8qIERlZmluZSAnc3RydWN0IHJhbmRvbV9kYXRhJy4KKyAgIEJ1dCBhbGxvdyBtdWx0aXBsZSBnbnVsaWIgZ2VuZXJhdGVkIDxzdGRsaWIuaD4gcmVwbGFjZW1lbnRzIHRvIGNvZXhpc3QuICAqLworIyAgaWYgIUdOVUxJQl9kZWZpbmVkX3N0cnVjdF9yYW5kb21fZGF0YQorc3RydWN0IHJhbmRvbV9kYXRhCit7CisgIGludDMyX3QgKmZwdHI7ICAgICAgICAgICAgICAgIC8qIEZyb250IHBvaW50ZXIuICAqLworICBpbnQzMl90ICpycHRyOyAgICAgICAgICAgICAgICAvKiBSZWFyIHBvaW50ZXIuICAqLworICBpbnQzMl90ICpzdGF0ZTsgICAgICAgICAgICAgICAvKiBBcnJheSBvZiBzdGF0ZSB2YWx1ZXMuICAqLworICBpbnQgcmFuZF90eXBlOyAgICAgICAgICAgICAgICAvKiBUeXBlIG9mIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLiAgKi8KKyAgaW50IHJhbmRfZGVnOyAgICAgICAgICAgICAgICAgLyogRGVncmVlIG9mIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLiAgKi8KKyAgaW50IHJhbmRfc2VwOyAgICAgICAgICAgICAgICAgLyogRGlzdGFuY2UgYmV0d2VlbiBmcm9udCBhbmQgcmVhci4gICovCisgIGludDMyX3QgKmVuZF9wdHI7ICAgICAgICAgICAgIC8qIFBvaW50ZXIgYmVoaW5kIHN0YXRlIHRhYmxlLiAgKi8KK307CisjICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX3N0cnVjdF9yYW5kb21fZGF0YSAxCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiAoMCB8fCAwIHx8IDAgfHwgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSykgJiYgISBkZWZpbmVkIF9fR0xJQkNfXyAmJiAhKChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgISBkZWZpbmVkIF9fQ1lHV0lOX18pCisvKiBPbiBNYWMgT1MgWCAxMC4zLCBvbmx5IDx1bmlzdGQuaD4gZGVjbGFyZXMgbWtzdGVtcC4gICovCisvKiBPbiBNYWMgT1MgWCAxMC41LCBvbmx5IDx1bmlzdGQuaD4gZGVjbGFyZXMgbWtzdGVtcHMuICAqLworLyogT24gQ3lnd2luIDEuNy4xLCBvbmx5IDx1bmlzdGQuaD4gZGVjbGFyZXMgZ2V0c3Vib3B0LiAgKi8KKy8qIEJ1dCBhdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9uIG9uIGdsaWJjIHN5c3RlbXMgYW5kIG5hdGl2ZSBXaW5kb3dzLiAgKi8KKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworLyogVGhlIF9fYXR0cmlidXRlX18gZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDIuNSBhbmQgbGF0ZXIuCisgICBUaGUgYXR0cmlidXRlIF9fcHVyZV9fIHdhcyBhZGRlZCBpbiBnY2MgMi45Ni4gICovCisjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk2KQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9QVVJFIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpCisjZWxzZQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9QVVJFIC8qIGVtcHR5ICovCisjZW5kaWYKKworLyogVGhlIGRlZmluaXRpb24gb2YgX05vcmV0dXJuIGlzIGNvcGllZCBoZXJlLiAgKi8KKyNpZiAhZGVmaW5lZCBfTm9yZXR1cm4gJiYgX19TVERDX1ZFUlNJT05fXyA8IDIwMTExMgorIyBpZiAoMyA8PSBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gMiAmJiA4IDw9IF9fR05VQ19NSU5PUl9fKSBcCisgICAgICB8fCAweDUxMTAgPD0gX19TVU5QUk9fQykKKyMgIGRlZmluZSBfTm9yZXR1cm4gX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpCisjIGVsaWYgMTIwMCA8PSBfTVNDX1ZFUgorIyAgZGVmaW5lIF9Ob3JldHVybiBfX2RlY2xzcGVjIChub3JldHVybikKKyMgZWxzZQorIyAgZGVmaW5lIF9Ob3JldHVybgorIyBlbmRpZgorI2VuZGlmCisKKy8qIFRoZSBkZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBMIGV0Yy4gYXJlIGNvcGllZCBoZXJlLiAgKi8KKyNpZm5kZWYgX0dMX0NYWERFRlNfSAorI2RlZmluZSBfR0xfQ1hYREVGU19ICisKKy8qIFRoZSB0aHJlZSBtb3N0IGZyZXF1ZW50IHVzZSBjYXNlcyBvZiB0aGVzZSBtYWNyb3MgYXJlOgorCisgICAqIEZvciBwcm92aWRpbmcgYSBzdWJzdGl0dXRlIGZvciBhIGZ1bmN0aW9uIHRoYXQgaXMgbWlzc2luZyBvbiBzb21lCisgICAgIHBsYXRmb3JtcywgYnV0IGlzIGRlY2xhcmVkIGFuZCB3b3JrcyBmaW5lIG9uIHRoZSBwbGF0Zm9ybXMgb24gd2hpY2gKKyAgICAgaXQgZXhpc3RzOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgIUBIQVZFX0ZPT0AKKyAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgcmVwbGFjZW1lbnQgZm9yIGEgZnVuY3Rpb24gdGhhdCBleGlzdHMgb24gYWxsIHBsYXRmb3JtcywKKyAgICAgYnV0IGlzIGJyb2tlbi9pbnN1ZmZpY2llbnQgYW5kIG5lZWRzIHRvIGJlIHJlcGxhY2VkIG9uIHNvbWUgcGxhdGZvcm1zOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisgICAgICAgIyAgIHVuZGVmIGZvbworICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CisgICAgICAgIyBlbHNlCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgcmVwbGFjZW1lbnQgZm9yIGEgZnVuY3Rpb24gdGhhdCBleGlzdHMgb24gc29tZSBwbGF0Zm9ybXMKKyAgICAgYnV0IGlzIGJyb2tlbi9pbnN1ZmZpY2llbnQgYW5kIG5lZWRzIHRvIGJlIHJlcGxhY2VkIG9uIHNvbWUgb2YgdGhlbSBhbmQKKyAgICAgaXMgYWRkaXRpb25hbGx5IGVpdGhlciBtaXNzaW5nIG9yIHVuZGVjbGFyZWQgb24gc29tZSBvdGhlciBwbGF0Zm9ybXM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACisgICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyAgICAgICAjICAgdW5kZWYgZm9vCisgICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKyAgICAgICAjIGVsc2UKKyAgICAgICAjICBpZiAhQEhBVkVfRk9PQCAgIG9yICAgaWYgIUBIQVZFX0RFQ0xfRk9PQAorICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisqLworCisvKiBfR0xfRVhURVJOX0MgZGVjbGFyYXRpb247CisgICBwZXJmb3JtcyB0aGUgZGVjbGFyYXRpb24gd2l0aCBDIGxpbmthZ2UuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMKKyMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4gIkMiCisjZWxzZQorIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybgorI2VuZGlmCisKKy8qIF9HTF9GVU5DREVDTF9SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgZGVjbGFyZXMgYSByZXBsYWNlbWVudCBmdW5jdGlvbiwgbmFtZWQgcnBsX2Z1bmMsIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwKKyAgIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsIGFuZCBhdHRyaWJ1dGVzLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0ZVTkNERUNMX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisgKi8KKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICBfR0xfRlVOQ0RFQ0xfUlBMXzEgKHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpCisjZGVmaW5lIF9HTF9GVU5DREVDTF9SUExfMShycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0VYVEVSTl9DIHJldHR5cGUgcnBsX2Z1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworCisvKiBfR0xfRlVOQ0RFQ0xfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGRlY2xhcmVzIHRoZSBzeXN0ZW0gZnVuY3Rpb24sIG5hbWVkIGZ1bmMsIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwKKyAgIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsIGFuZCBhdHRyaWJ1dGVzLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0ZVTkNERUNMX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisgKi8KKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICBfR0xfRVhURVJOX0MgcmV0dHlwZSBmdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKworLyogX0dMX0NYWEFMSUFTX1JQTCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBkZWNsYXJlcyBhIEMrKyBhbGlhcyBjYWxsZWQgR05VTElCX05BTUVTUEFDRTo6ZnVuYworICAgdGhhdCByZWRpcmVjdHMgdG8gcnBsX2Z1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UgaXMgZGVmaW5lZC4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9DWFhBTElBU19SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworICovCisjZGVmaW5lIF9HTF9DWFhBTElBU19SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgX0dMX0NYWEFMSUFTX1JQTF8xIChmdW5jLCBycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKQorI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9IDo6cnBsX2Z1bmM7ICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1JQTF8xIChmdW5jLCBycGxfZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBycGxfZnVuYyBtYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudAorICAgZGVjbGFyYXRpb24uICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvcgorICAgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPig6OnJwbF9mdW5jKTsgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBkZWNsYXJlcyBhIEMrKyBhbGlhcyBjYWxsZWQgR05VTElCX05BTUVTUEFDRTo6ZnVuYworICAgdGhhdCByZWRpcmVjdHMgdG8gdGhlIHN5c3RlbSBwcm92aWRlZCBmdW5jdGlvbiBmdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFCisgICBpcyBkZWZpbmVkLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0NYWEFMSUFTX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CisgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorICAvKiBJZiB3ZSB3ZXJlIHRvIHdyaXRlCisgICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7CisgICAgIGxpa2UgYWJvdmUgaW4gX0dMX0NYWEFMSUFTX1JQTF8xLCB0aGUgY29tcGlsZXIgY291bGQgb3B0aW1pemUgY2FsbHMKKyAgICAgYmV0dGVyIChyZW1vdmUgYW4gaW5kaXJlY3Rpb24gdGhyb3VnaCBhICdzdGF0aWMnIHBvaW50ZXIgdmFyaWFibGUpLAorICAgICBidXQgdGhlbiB0aGUgX0dMX0NYWEFMSUFTV0FSTiBtYWNybyBiZWxvdyB3b3VsZCBjYXVzZSBhIHdhcm5pbmcgbm90IG9ubHkKKyAgICAgZm9yIHVzZXMgb2YgOjpmdW5jIGJ1dCBhbHNvIGZvciB1c2VzIG9mIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMuICAqLworIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOyAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1NZU19DQVNUIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gZnVuYyBtYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudCBkZWNsYXJhdGlvbi4KKyAgIEEgY2FzdCBpcyB1c2VkIHRvIHNpbGVuY2UgdGhlICJpbnZhbGlkIGNvbnZlcnNpb24iIGVycm9yIHRoYXQgd291bGQKKyAgIG90aGVyd2lzZSBvY2N1ci4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPig6OmZ1bmMpOyBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1NZU19DQVNUMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycywgcmV0dHlwZTIsIHBhcmFtZXRlcnMyKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gaXMgcGlja2VkIGFtb25nIGEgc2V0IG9mIG92ZXJsb2FkZWQgZnVuY3Rpb25zLAorICAgbmFtZWx5IHRoZSBvbmUgd2l0aCByZXR0eXBlMiBhbmQgcGFyYW1ldGVyczIuICBUd28gY29uc2VjdXRpdmUgY2FzdHMKKyAgIGFyZSB1c2VkIHRvIHNpbGVuY2UgdGhlICJjYW5ub3QgZmluZCBhIG1hdGNoIiBhbmQgImludmFsaWQgY29udmVyc2lvbiIKKyAgIGVycm9ycyB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyAgLyogVGhlIG91dGVyIGNhc3QgbXVzdCBiZSBhIHJlaW50ZXJwcmV0X2Nhc3QuCisgICAgIFRoZSBpbm5lciBjYXN0OiBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2V0IG9mIG92ZXJsb2FkZWQKKyAgICAgZnVuY3Rpb25zLCBpdCB3b3JrcyBhcyBhIHN0YXRpY19jYXN0PD4sIGNob29zaW5nIHRoZSBkZXNpZ25hdGVkIHZhcmlhbnQuCisgICAgIFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzaW5nbGUgdmFyaWFudCwgaXQgd29ya3MgYXMgYQorICAgICByZWludGVycHJldF9jYXN0PD4uIFRoZSBwYXJlbnRoZXNpemVkIGNhc3Qgc3ludGF4IHdvcmtzIGJvdGggd2F5cy4gICovCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzLHJldHR5cGUyLHBhcmFtZXRlcnMyKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKHJldHR5cGUyKCopcGFyYW1ldGVyczIpKDo6ZnVuYykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzLHJldHR5cGUyLHBhcmFtZXRlcnMyKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNXQVJOIChmdW5jKTsKKyAgIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZW1pdHRlZCB3aGVuIDo6ZnVuYyBpcyB1c2VkIGJ1dCBub3Qgd2hlbgorICAgR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgZnVuYyBtdXN0IGJlIGRlZmluZWQgd2l0aG91dCBvdmVybG9hZGVkCisgICB2YXJpYW50cy4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAorICAgX0dMX0NYWEFMSUFTV0FSTl8xIChmdW5jLCBHTlVMSUJfTkFNRVNQQUNFKQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8xKGZ1bmMsbmFtZXNwYWNlKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOXzIgKGZ1bmMsIG5hbWVzcGFjZSkKKy8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAorICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCisjIGlmICFfX09QVElNSVpFX18KKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKyAgICBfR0xfV0FSTl9PTl9VU0UgKGZ1bmMsIFwKKyAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICJVc2UgIiAjbmFtZXNwYWNlICI6OiIgI2Z1bmMgIiBpbnN0ZWFkLiIpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKyAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU1dBUk4xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZW1pdHRlZCB3aGVuIHRoZSBnaXZlbiBvdmVybG9hZGVkIHZhcmlhbnQgb2YgOjpmdW5jCisgICBpcyB1c2VkIGJ1dCBub3Qgd2hlbiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICAgX0dMX0NYWEFMSUFTV0FSTjFfMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgR05VTElCX05BTUVTUEFDRSkKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOMV8yIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBuYW1lc3BhY2UpCisvKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKyAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworIyBpZiAhX19PUFRJTUlaRV9fCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgICBfR0xfV0FSTl9PTl9VU0VfQ1hYIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJVc2UgIiAjbmFtZXNwYWNlICI6OiIgI2Z1bmMgIiBpbnN0ZWFkLiIpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKyNlbmRpZiAvKiBfR0xfQ1hYREVGU19IICovCisKKy8qIFRoZSBkZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVMTCBpcyBjb3BpZWQgaGVyZS4gICovCisvKiBfR0xfQVJHX05PTk5VTEwoKG4sLi4uLG0pKSB0ZWxscyB0aGUgY29tcGlsZXIgYW5kIHN0YXRpYyBhbmFseXplciB0b29scworICAgdGhhdCB0aGUgdmFsdWVzIHBhc3NlZCBhcyBhcmd1bWVudHMgbiwgLi4uLCBtIG11c3QgYmUgbm9uLU5VTEwgcG9pbnRlcnMuCisgICBuID0gMSBzdGFuZHMgZm9yIHRoZSBmaXJzdCBhcmd1bWVudCwgbiA9IDIgZm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgZXRjLiAgKi8KKyNpZm5kZWYgX0dMX0FSR19OT05OVUxMCisjIGlmIChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID49IDMpIHx8IF9fR05VQ19fID4gMworIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpIF9fYXR0cmlidXRlX18gKChfX25vbm51bGxfXyBwYXJhbXMpKQorIyBlbHNlCisjICBkZWZpbmUgX0dMX0FSR19OT05OVUxMKHBhcmFtcykKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UgaXMgY29waWVkIGhlcmUuICAqLworI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0UKKworIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKy8qIEEgY29tcGlsZXIgYXR0cmlidXRlIGlzIGF2YWlsYWJsZSBpbiBnY2MgdmVyc2lvbnMgNC4zLjAgYW5kIGxhdGVyLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24gX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtZXNzYWdlKSkpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisvKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmN0aW9uKSBmdW5jdGlvbgorIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBfR0xfV0FSTl9PTl9VU0VfQ1hYIChmdW5jdGlvbiwgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgInN0cmluZyIpCisgICBpcyBsaWtlIF9HTF9XQVJOX09OX1VTRSAoZnVuY3Rpb24sICJzdHJpbmciKSwgZXhjZXB0IHRoYXQgdGhlIGZ1bmN0aW9uIGlzCisgICBkZWNsYXJlZCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsCisgICBhbmQgYXR0cmlidXRlcy4KKyAgIFRoaXMgdmFyaWFudCBpcyB1c2VmdWwgZm9yIG92ZXJsb2FkZWQgZnVuY3Rpb25zIGluIEMrKy4gX0dMX1dBUk5fT05fVVNFIGRvZXMKKyAgIG5vdCB3b3JrIGluIHRoaXMgY2FzZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX09OX1VTRV9DWFgKKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCitleHRlcm4gcmV0dHlwZSBmdW5jdGlvbiBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzIFwKKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtc2cpKSkKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKy8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCitleHRlcm4gcmV0dHlwZSBmdW5jdGlvbiBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisjIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorX0dMX1dBUk5fRVhURVJOX0MgaW50IF9nbF93YXJuX29uX3VzZQorIyBlbmRpZgorI2VuZGlmCisKKy8qIF9HTF9XQVJOX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fRVhURVJOX0MKKyMgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cworIyAgZGVmaW5lIF9HTF9XQVJOX0VYVEVSTl9DIGV4dGVybiAiQyIKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9XQVJOX0VYVEVSTl9DIGV4dGVybgorIyBlbmRpZgorI2VuZGlmCisKKworLyogU29tZSBzeXN0ZW1zIGRvIG5vdCBkZWZpbmUgRVhJVF8qLCBkZXNwaXRlIG90aGVyd2lzZSBzdXBwb3J0aW5nIEM4OS4gICovCisjaWZuZGVmIEVYSVRfU1VDQ0VTUworIyBkZWZpbmUgRVhJVF9TVUNDRVNTIDAKKyNlbmRpZgorLyogVGFuZGVtL05TSyBhbmQgb3RoZXIgcGxhdGZvcm1zIHRoYXQgZGVmaW5lIEVYSVRfRkFJTFVSRSBhcyAtMSBpbnRlcmZlcmUKKyAgIHdpdGggcHJvcGVyIG9wZXJhdGlvbiBvZiB4YXJncy4gICovCisjaWZuZGVmIEVYSVRfRkFJTFVSRQorIyBkZWZpbmUgRVhJVF9GQUlMVVJFIDEKKyNlbGlmIEVYSVRfRkFJTFVSRSAhPSAxCisjIHVuZGVmIEVYSVRfRkFJTFVSRQorIyBkZWZpbmUgRVhJVF9GQUlMVVJFIDEKKyNlbmRpZgorCisKKyNpZiAwCisvKiBUZXJtaW5hdGUgdGhlIGN1cnJlbnQgcHJvY2VzcyB3aXRoIHRoZSBnaXZlbiByZXR1cm4gY29kZSwgd2l0aG91dCBydW5uaW5nCisgICB0aGUgJ2F0ZXhpdCcgaGFuZGxlcnMuICAqLworIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoX0V4aXQsIF9Ob3JldHVybiB2b2lkLCAoaW50IHN0YXR1cykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoX0V4aXQsIHZvaWQsIChpbnQgc3RhdHVzKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChfRXhpdCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIF9FeGl0CisjIGlmIEhBVkVfUkFXX0RFQ0xfX0VYSVQKK19HTF9XQVJOX09OX1VTRSAoX0V4aXQsICJfRXhpdCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgX0V4aXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorLyogUGFyc2UgYSBzaWduZWQgZGVjaW1hbCBpbnRlZ2VyLgorICAgUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGludGVnZXIuICBFcnJvcnMgYXJlIG5vdCBkZXRlY3RlZC4gICovCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChhdG9sbCwgbG9uZyBsb25nLCAoY29uc3QgY2hhciAqc3RyaW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoYXRvbGwsIGxvbmcgbG9uZywgKGNvbnN0IGNoYXIgKnN0cmluZykpOworX0dMX0NYWEFMSUFTV0FSTiAoYXRvbGwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBhdG9sbAorIyBpZiBIQVZFX1JBV19ERUNMX0FUT0xMCitfR0xfV0FSTl9PTl9VU0UgKGF0b2xsLCAiYXRvbGwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGF0b2xsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAxCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgY2FsbG9jCisjICAgZGVmaW5lIGNhbGxvYyBycGxfY2FsbG9jCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoY2FsbG9jLCB2b2lkICosIChzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChjYWxsb2MsIHZvaWQgKiwgKHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoY2FsbG9jLCB2b2lkICosIChzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChjYWxsb2MpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBjYWxsb2MKKy8qIEFzc3VtZSBjYWxsb2MgaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAoY2FsbG9jLCAiY2FsbG9jIGlzIG5vdCBQT1NJWCBjb21wbGlhbnQgZXZlcnl3aGVyZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGNhbGxvYy1wb3NpeCBmb3IgcG9ydGFiaWxpdHkiKTsKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBjYW5vbmljYWxpemVfZmlsZV9uYW1lIHJwbF9jYW5vbmljYWxpemVfZmlsZV9uYW1lCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoY2Fub25pY2FsaXplX2ZpbGVfbmFtZSwgY2hhciAqLCAoY29uc3QgY2hhciAqbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKGNhbm9uaWNhbGl6ZV9maWxlX25hbWUsIGNoYXIgKiwgKGNvbnN0IGNoYXIgKm5hbWUpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGNhbm9uaWNhbGl6ZV9maWxlX25hbWUsIGNoYXIgKiwgKGNvbnN0IGNoYXIgKm5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoY2Fub25pY2FsaXplX2ZpbGVfbmFtZSwgY2hhciAqLCAoY29uc3QgY2hhciAqbmFtZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoY2Fub25pY2FsaXplX2ZpbGVfbmFtZSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGNhbm9uaWNhbGl6ZV9maWxlX25hbWUKKyMgaWYgSEFWRV9SQVdfREVDTF9DQU5PTklDQUxJWkVfRklMRV9OQU1FCitfR0xfV0FSTl9PTl9VU0UgKGNhbm9uaWNhbGl6ZV9maWxlX25hbWUsCisgICAgICAgICAgICAgICAgICJjYW5vbmljYWxpemVfZmlsZV9uYW1lIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBjYW5vbmljYWxpemUtbGdwbCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorLyogU3RvcmUgbWF4KE5FTEVNLDMpIGxvYWQgYXZlcmFnZSBudW1iZXJzIGluIExPQURBVkdbXS4KKyAgIFRoZSB0aHJlZSBudW1iZXJzIGFyZSB0aGUgbG9hZCBhdmVyYWdlIG9mIHRoZSBsYXN0IDEgbWludXRlLCB0aGUgbGFzdCA1CisgICBtaW51dGVzLCBhbmQgdGhlIGxhc3QgMTUgbWludXRlcywgcmVzcGVjdGl2ZWx5LgorICAgTE9BREFWRyBpcyBhbiBhcnJheSBvZiBORUxFTSBudW1iZXJzLiAgKi8KKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGdldGxvYWRhdmcsIGludCwgKGRvdWJsZSBsb2FkYXZnW10sIGludCBuZWxlbSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGdldGxvYWRhdmcsIGludCwgKGRvdWJsZSBsb2FkYXZnW10sIGludCBuZWxlbSkpOworX0dMX0NYWEFMSUFTV0FSTiAoZ2V0bG9hZGF2Zyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGdldGxvYWRhdmcKKyMgaWYgSEFWRV9SQVdfREVDTF9HRVRMT0FEQVZHCitfR0xfV0FSTl9PTl9VU0UgKGdldGxvYWRhdmcsICJnZXRsb2FkYXZnIGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGdldGxvYWRhdmcgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKy8qIEFzc3VtaW5nICpPUFRJT05QIGlzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZWxlbWVudHMgb2YgdGhlIGZvcm0KKyAgICJ0b2tlbiIgb3IgInRva2VuPXZhbHVlIiwgZ2V0c3Vib3B0IHBhcnNlcyB0aGUgZmlyc3Qgb2YgdGhlc2UgZWxlbWVudHMuCisgICBJZiB0aGUgZmlyc3QgZWxlbWVudCByZWZlcnMgdG8gYSAidG9rZW4iIHRoYXQgaXMgbWVtYmVyIG9mIHRoZSBnaXZlbgorICAgTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIHRva2VuczoKKyAgICAgLSBJdCByZXBsYWNlcyB0aGUgY29tbWEgd2l0aCBhIE5VTCBieXRlLCB1cGRhdGVzICpPUFRJT05QIHRvIHBvaW50IHBhc3QKKyAgICAgICB0aGUgZmlyc3Qgb3B0aW9uIGFuZCB0aGUgY29tbWEsIHNldHMgKlZBTFVFUCB0byB0aGUgdmFsdWUgb2YgdGhlCisgICAgICAgZWxlbWVudCAob3IgTlVMTCBpZiBpdCBkb2Vzbid0IGNvbnRhaW4gYW4gIj0iIHNpZ24pLAorICAgICAtIEl0IHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSAidG9rZW4iIGluIHRoZSBnaXZlbiBhcnJheSBvZiB0b2tlbnMuCisgICBPdGhlcndpc2UgaXQgcmV0dXJucyAtMSwgYW5kICpPUFRJT05QIGFuZCAqVkFMVUVQIGFyZSB1bmRlZmluZWQuCisgICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgUE9TSVg6MjAwMSBzcGVjaWZpY2F0aW9uLgorICAgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3N1c3YzeHNoL2dldHN1Ym9wdC5odG1sICovCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChnZXRzdWJvcHQsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqb3B0aW9ucCwgY2hhciAqY29uc3QgKnRva2VucywgY2hhciAqKnZhbHVlcCkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIsIDMpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChnZXRzdWJvcHQsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqb3B0aW9ucCwgY2hhciAqY29uc3QgKnRva2VucywgY2hhciAqKnZhbHVlcCkpOworX0dMX0NYWEFMSUFTV0FSTiAoZ2V0c3Vib3B0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZ2V0c3Vib3B0CisjIGlmIEhBVkVfUkFXX0RFQ0xfR0VUU1VCT1BUCitfR0xfV0FSTl9PTl9VU0UgKGdldHN1Ym9wdCwgImdldHN1Ym9wdCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZ2V0c3Vib3B0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisvKiBDaGFuZ2UgdGhlIG93bmVyc2hpcCBhbmQgYWNjZXNzIHBlcm1pc3Npb24gb2YgdGhlIHNsYXZlIHNpZGUgb2YgdGhlCisgICBwc2V1ZG8tdGVybWluYWwgd2hvc2UgbWFzdGVyIHNpZGUgaXMgc3BlY2lmaWVkIGJ5IEZELiAgKi8KKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGdyYW50cHQsIGludCwgKGludCBmZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZ3JhbnRwdCwgaW50LCAoaW50IGZkKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChncmFudHB0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZ3JhbnRwdAorIyBpZiBIQVZFX1JBV19ERUNMX0dSQU5UUFQKK19HTF9XQVJOX09OX1VTRSAoZ3JhbnRwdCwgImdyYW50cHQgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZ3JhbnRwdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBJZiBfR0xfVVNFX1NURExJQl9BTExPQyBpcyBub256ZXJvLCB0aGUgaW5jbHVkaW5nIG1vZHVsZSBkb2VzIG5vdAorICAgcmVseSBvbiBHTlUgb3IgUE9TSVggc2VtYW50aWNzIGZvciBtYWxsb2MgYW5kIHJlYWxsb2MgKGZvciBleGFtcGxlLAorICAgYnkgbmV2ZXIgc3BlY2lmeWluZyBhIHplcm8gc2l6ZSksIHNvIGl0IGRvZXMgbm90IG5lZWQgbWFsbG9jIG9yCisgICByZWFsbG9jIHRvIGJlIHJlZGVmaW5lZC4gICovCisjaWYgMQorIyBpZiAwCisjICBpZiAhKChkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkgXAorICAgICAgICB8fCBfR0xfVVNFX1NURExJQl9BTExPQykKKyMgICB1bmRlZiBtYWxsb2MKKyMgICBkZWZpbmUgbWFsbG9jIHJwbF9tYWxsb2MKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChtYWxsb2MsIHZvaWQgKiwgKHNpemVfdCBzaXplKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChtYWxsb2MsIHZvaWQgKiwgKHNpemVfdCBzaXplKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKG1hbGxvYywgdm9pZCAqLCAoc2l6ZV90IHNpemUpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG1hbGxvYyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLICYmICFfR0xfVVNFX1NURExJQl9BTExPQworIyB1bmRlZiBtYWxsb2MKKy8qIEFzc3VtZSBtYWxsb2MgaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAobWFsbG9jLCAibWFsbG9jIGlzIG5vdCBQT1NJWCBjb21wbGlhbnQgZXZlcnl3aGVyZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG1hbGxvYy1wb3NpeCBmb3IgcG9ydGFiaWxpdHkiKTsKKyNlbmRpZgorCisvKiBDb252ZXJ0IGEgbXVsdGlieXRlIGNoYXJhY3RlciB0byBhIHdpZGUgY2hhcmFjdGVyLiAgKi8KKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbWJ0b3djCisjICAgZGVmaW5lIG1idG93YyBycGxfbWJ0b3djCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobWJ0b3djLCBpbnQsICh3Y2hhcl90ICpwd2MsIGNvbnN0IGNoYXIgKnMsIHNpemVfdCBuKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChtYnRvd2MsIGludCwgKHdjaGFyX3QgKnB3YywgY29uc3QgY2hhciAqcywgc2l6ZV90IG4pKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAobWJ0b3djLCBpbnQsICh3Y2hhcl90ICpwd2MsIGNvbnN0IGNoYXIgKnMsIHNpemVfdCBuKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChtYnRvd2MpOworI2VuZGlmCisKKyNpZiAwCisvKiBDcmVhdGUgYSB1bmlxdWUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmcm9tIFRFTVBMQVRFLgorICAgVGhlIGxhc3Qgc2l4IGNoYXJhY3RlcnMgb2YgVEVNUExBVEUgbXVzdCBiZSAiWFhYWFhYIjsKKyAgIHRoZXkgYXJlIHJlcGxhY2VkIHdpdGggYSBzdHJpbmcgdGhhdCBtYWtlcyB0aGUgZGlyZWN0b3J5IG5hbWUgdW5pcXVlLgorICAgUmV0dXJucyBURU1QTEFURSwgb3IgYSBudWxsIHBvaW50ZXIgaWYgaXQgY2Fubm90IGdldCBhIHVuaXF1ZSBuYW1lLgorICAgVGhlIGRpcmVjdG9yeSBpcyBjcmVhdGVkIG1vZGUgNzAwLiAgKi8KKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKG1rZHRlbXAsIGNoYXIgKiwgKGNoYXIgKiAvKnRlbXBsYXRlKi8pIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChta2R0ZW1wLCBjaGFyICosIChjaGFyICogLyp0ZW1wbGF0ZSovKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChta2R0ZW1wKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbWtkdGVtcAorIyBpZiBIQVZFX1JBV19ERUNMX01LRFRFTVAKK19HTF9XQVJOX09OX1VTRSAobWtkdGVtcCwgIm1rZHRlbXAgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG1rZHRlbXAgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKy8qIENyZWF0ZSBhIHVuaXF1ZSB0ZW1wb3JhcnkgZmlsZSBmcm9tIFRFTVBMQVRFLgorICAgVGhlIGxhc3Qgc2l4IGNoYXJhY3RlcnMgb2YgVEVNUExBVEUgbXVzdCBiZSAiWFhYWFhYIjsKKyAgIHRoZXkgYXJlIHJlcGxhY2VkIHdpdGggYSBzdHJpbmcgdGhhdCBtYWtlcyB0aGUgZmlsZSBuYW1lIHVuaXF1ZS4KKyAgIFRoZSBmbGFncyBhcmUgYSBiaXRtYXNrLCBwb3NzaWJseSBpbmNsdWRpbmcgT19DTE9FWEVDIChkZWZpbmVkIGluIDxmY250bC5oPikKKyAgIGFuZCBPX1RFWFQsIE9fQklOQVJZIChkZWZpbmVkIGluICJiaW5hcnktaW8uaCIpLgorICAgVGhlIGZpbGUgaXMgdGhlbiBjcmVhdGVkLCB3aXRoIHRoZSBzcGVjaWZpZWQgZmxhZ3MsIGVuc3VyaW5nIGl0IGRpZG4ndCBleGlzdAorICAgYmVmb3JlLgorICAgVGhlIGZpbGUgaXMgY3JlYXRlZCByZWFkLXdyaXRlIChtYXNrIGF0IGxlYXN0IDA2MDAgJiB+dW1hc2spLCBidXQgaXQgbWF5IGJlCisgICB3b3JsZC1yZWFkYWJsZSBhbmQgd29ybGQtd3JpdGFibGUgKG1hc2sgMDY2NiAmIH51bWFzayksIGRlcGVuZGluZyBvbiB0aGUKKyAgIGltcGxlbWVudGF0aW9uLgorICAgUmV0dXJucyB0aGUgb3BlbiBmaWxlIGRlc2NyaXB0b3IgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIC0xIGFuZCBlcnJubworICAgc2V0LiAgKi8KKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKG1rb3N0ZW1wLCBpbnQsIChjaGFyICogLyp0ZW1wbGF0ZSovLCBpbnQgLypmbGFncyovKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKG1rb3N0ZW1wLCBpbnQsIChjaGFyICogLyp0ZW1wbGF0ZSovLCBpbnQgLypmbGFncyovKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChta29zdGVtcCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG1rb3N0ZW1wCisjIGlmIEhBVkVfUkFXX0RFQ0xfTUtPU1RFTVAKK19HTF9XQVJOX09OX1VTRSAobWtvc3RlbXAsICJta29zdGVtcCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWtvc3RlbXAgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKy8qIENyZWF0ZSBhIHVuaXF1ZSB0ZW1wb3JhcnkgZmlsZSBmcm9tIFRFTVBMQVRFLgorICAgVGhlIGxhc3Qgc2l4IGNoYXJhY3RlcnMgb2YgVEVNUExBVEUgYmVmb3JlIGEgc3VmZml4IG9mIGxlbmd0aAorICAgU1VGRklYTEVOIG11c3QgYmUgIlhYWFhYWCI7CisgICB0aGV5IGFyZSByZXBsYWNlZCB3aXRoIGEgc3RyaW5nIHRoYXQgbWFrZXMgdGhlIGZpbGUgbmFtZSB1bmlxdWUuCisgICBUaGUgZmxhZ3MgYXJlIGEgYml0bWFzaywgcG9zc2libHkgaW5jbHVkaW5nIE9fQ0xPRVhFQyAoZGVmaW5lZCBpbiA8ZmNudGwuaD4pCisgICBhbmQgT19URVhULCBPX0JJTkFSWSAoZGVmaW5lZCBpbiAiYmluYXJ5LWlvLmgiKS4KKyAgIFRoZSBmaWxlIGlzIHRoZW4gY3JlYXRlZCwgd2l0aCB0aGUgc3BlY2lmaWVkIGZsYWdzLCBlbnN1cmluZyBpdCBkaWRuJ3QgZXhpc3QKKyAgIGJlZm9yZS4KKyAgIFRoZSBmaWxlIGlzIGNyZWF0ZWQgcmVhZC13cml0ZSAobWFzayBhdCBsZWFzdCAwNjAwICYgfnVtYXNrKSwgYnV0IGl0IG1heSBiZQorICAgd29ybGQtcmVhZGFibGUgYW5kIHdvcmxkLXdyaXRhYmxlIChtYXNrIDA2NjYgJiB+dW1hc2spLCBkZXBlbmRpbmcgb24gdGhlCisgICBpbXBsZW1lbnRhdGlvbi4KKyAgIFJldHVybnMgdGhlIG9wZW4gZmlsZSBkZXNjcmlwdG9yIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSAtMSBhbmQgZXJybm8KKyAgIHNldC4gICovCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChta29zdGVtcHMsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICogLyp0ZW1wbGF0ZSovLCBpbnQgLypzdWZmaXhsZW4qLywgaW50IC8qZmxhZ3MqLykKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChta29zdGVtcHMsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICogLyp0ZW1wbGF0ZSovLCBpbnQgLypzdWZmaXhsZW4qLywgaW50IC8qZmxhZ3MqLykpOworX0dMX0NYWEFMSUFTV0FSTiAobWtvc3RlbXBzKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbWtvc3RlbXBzCisjIGlmIEhBVkVfUkFXX0RFQ0xfTUtPU1RFTVBTCitfR0xfV0FSTl9PTl9VU0UgKG1rb3N0ZW1wcywgIm1rb3N0ZW1wcyBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWtvc3RlbXBzIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisvKiBDcmVhdGUgYSB1bmlxdWUgdGVtcG9yYXJ5IGZpbGUgZnJvbSBURU1QTEFURS4KKyAgIFRoZSBsYXN0IHNpeCBjaGFyYWN0ZXJzIG9mIFRFTVBMQVRFIG11c3QgYmUgIlhYWFhYWCI7CisgICB0aGV5IGFyZSByZXBsYWNlZCB3aXRoIGEgc3RyaW5nIHRoYXQgbWFrZXMgdGhlIGZpbGUgbmFtZSB1bmlxdWUuCisgICBUaGUgZmlsZSBpcyB0aGVuIGNyZWF0ZWQsIGVuc3VyaW5nIGl0IGRpZG4ndCBleGlzdCBiZWZvcmUuCisgICBUaGUgZmlsZSBpcyBjcmVhdGVkIHJlYWQtd3JpdGUgKG1hc2sgYXQgbGVhc3QgMDYwMCAmIH51bWFzayksIGJ1dCBpdCBtYXkgYmUKKyAgIHdvcmxkLXJlYWRhYmxlIGFuZCB3b3JsZC13cml0YWJsZSAobWFzayAwNjY2ICYgfnVtYXNrKSwgZGVwZW5kaW5nIG9uIHRoZQorICAgaW1wbGVtZW50YXRpb24uCisgICBSZXR1cm5zIHRoZSBvcGVuIGZpbGUgZGVzY3JpcHRvciBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgLTEgYW5kIGVycm5vCisgICBzZXQuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBta3N0ZW1wIHJwbF9ta3N0ZW1wCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobWtzdGVtcCwgaW50LCAoY2hhciAqIC8qdGVtcGxhdGUqLykgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKG1rc3RlbXAsIGludCwgKGNoYXIgKiAvKnRlbXBsYXRlKi8pKTsKKyMgZWxzZQorIyAgaWYgISAxCitfR0xfRlVOQ0RFQ0xfU1lTIChta3N0ZW1wLCBpbnQsIChjaGFyICogLyp0ZW1wbGF0ZSovKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKG1rc3RlbXAsIGludCwgKGNoYXIgKiAvKnRlbXBsYXRlKi8pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG1rc3RlbXApOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBta3N0ZW1wCisjIGlmIEhBVkVfUkFXX0RFQ0xfTUtTVEVNUAorX0dMX1dBUk5fT05fVVNFIChta3N0ZW1wLCAibWtzdGVtcCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWtzdGVtcCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorLyogQ3JlYXRlIGEgdW5pcXVlIHRlbXBvcmFyeSBmaWxlIGZyb20gVEVNUExBVEUuCisgICBUaGUgbGFzdCBzaXggY2hhcmFjdGVycyBvZiBURU1QTEFURSBwcmlvciB0byBhIHN1ZmZpeCBvZiBsZW5ndGgKKyAgIFNVRkZJWExFTiBtdXN0IGJlICJYWFhYWFgiOworICAgdGhleSBhcmUgcmVwbGFjZWQgd2l0aCBhIHN0cmluZyB0aGF0IG1ha2VzIHRoZSBmaWxlIG5hbWUgdW5pcXVlLgorICAgVGhlIGZpbGUgaXMgdGhlbiBjcmVhdGVkLCBlbnN1cmluZyBpdCBkaWRuJ3QgZXhpc3QgYmVmb3JlLgorICAgVGhlIGZpbGUgaXMgY3JlYXRlZCByZWFkLXdyaXRlIChtYXNrIGF0IGxlYXN0IDA2MDAgJiB+dW1hc2spLCBidXQgaXQgbWF5IGJlCisgICB3b3JsZC1yZWFkYWJsZSBhbmQgd29ybGQtd3JpdGFibGUgKG1hc2sgMDY2NiAmIH51bWFzayksIGRlcGVuZGluZyBvbiB0aGUKKyAgIGltcGxlbWVudGF0aW9uLgorICAgUmV0dXJucyB0aGUgb3BlbiBmaWxlIGRlc2NyaXB0b3IgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIC0xIGFuZCBlcnJubworICAgc2V0LiAgKi8KKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKG1rc3RlbXBzLCBpbnQsIChjaGFyICogLyp0ZW1wbGF0ZSovLCBpbnQgLypzdWZmaXhsZW4qLykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChta3N0ZW1wcywgaW50LCAoY2hhciAqIC8qdGVtcGxhdGUqLywgaW50IC8qc3VmZml4bGVuKi8pKTsKK19HTF9DWFhBTElBU1dBUk4gKG1rc3RlbXBzKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbWtzdGVtcHMKKyMgaWYgSEFWRV9SQVdfREVDTF9NS1NURU1QUworX0dMX1dBUk5fT05fVVNFIChta3N0ZW1wcywgIm1rc3RlbXBzIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBta3N0ZW1wcyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorLyogUmV0dXJuIGFuIEZEIG9wZW4gdG8gdGhlIG1hc3RlciBzaWRlIG9mIGEgcHNldWRvLXRlcm1pbmFsLiAgRmxhZ3Mgc2hvdWxkCisgICBpbmNsdWRlIE9fUkRXUiwgYW5kIG1heSBhbHNvIGluY2x1ZGUgT19OT0NUVFkuICAqLworIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocG9zaXhfb3BlbnB0LCBpbnQsIChpbnQgZmxhZ3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X29wZW5wdCwgaW50LCAoaW50IGZsYWdzKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChwb3NpeF9vcGVucHQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9vcGVucHQKKyMgaWYgSEFWRV9SQVdfREVDTF9QT1NJWF9PUEVOUFQKK19HTF9XQVJOX09OX1VTRSAocG9zaXhfb3BlbnB0LCAicG9zaXhfb3BlbnB0IGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X29wZW5wdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorLyogUmV0dXJuIHRoZSBwYXRobmFtZSBvZiB0aGUgcHNldWRvLXRlcm1pbmFsIHNsYXZlIGFzc29jaWF0ZWQgd2l0aAorICAgdGhlIG1hc3RlciBGRCBpcyBvcGVuIG9uLCBvciBOVUxMIG9uIGVycm9ycy4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcHRzbmFtZQorIyAgIGRlZmluZSBwdHNuYW1lIHJwbF9wdHNuYW1lCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocHRzbmFtZSwgY2hhciAqLCAoaW50IGZkKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwdHNuYW1lLCBjaGFyICosIChpbnQgZmQpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHB0c25hbWUsIGNoYXIgKiwgKGludCBmZCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHB0c25hbWUsIGNoYXIgKiwgKGludCBmZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocHRzbmFtZSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHB0c25hbWUKKyMgaWYgSEFWRV9SQVdfREVDTF9QVFNOQU1FCitfR0xfV0FSTl9PTl9VU0UgKHB0c25hbWUsICJwdHNuYW1lIGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHB0c25hbWUgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKy8qIFNldCB0aGUgcGF0aG5hbWUgb2YgdGhlIHBzZXVkby10ZXJtaW5hbCBzbGF2ZSBhc3NvY2lhdGVkIHdpdGgKKyAgIHRoZSBtYXN0ZXIgRkQgaXMgb3BlbiBvbiBhbmQgcmV0dXJuIDAsIG9yIHNldCBlcnJubyBhbmQgcmV0dXJuCisgICBub24temVybyBvbiBlcnJvcnMuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHB0c25hbWVfcgorIyAgIGRlZmluZSBwdHNuYW1lX3IgcnBsX3B0c25hbWVfcgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHB0c25hbWVfciwgaW50LCAoaW50IGZkLCBjaGFyICpidWYsIHNpemVfdCBsZW4pKTsKK19HTF9DWFhBTElBU19SUEwgKHB0c25hbWVfciwgaW50LCAoaW50IGZkLCBjaGFyICpidWYsIHNpemVfdCBsZW4pKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHB0c25hbWVfciwgaW50LCAoaW50IGZkLCBjaGFyICpidWYsIHNpemVfdCBsZW4pKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwdHNuYW1lX3IsIGludCwgKGludCBmZCwgY2hhciAqYnVmLCBzaXplX3QgbGVuKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwdHNuYW1lX3IpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwdHNuYW1lX3IKKyMgaWYgSEFWRV9SQVdfREVDTF9QVFNOQU1FX1IKK19HTF9XQVJOX09OX1VTRSAocHRzbmFtZV9yLCAicHRzbmFtZV9yIGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHB0c25hbWVfciBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHB1dGVudgorIyAgIGRlZmluZSBwdXRlbnYgcnBsX3B1dGVudgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHB1dGVudiwgaW50LCAoY2hhciAqc3RyaW5nKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocHV0ZW52LCBpbnQsIChjaGFyICpzdHJpbmcpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAocHV0ZW52LCBpbnQsIChjaGFyICpzdHJpbmcpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHB1dGVudik7CisjZW5kaWYKKworCisjaWYgMAorIyBpZiAhMQorIyAgaWZuZGVmIFJBTkRfTUFYCisjICAgZGVmaW5lIFJBTkRfTUFYIDIxNDc0ODM2NDcKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocmFuZG9tLCBsb25nLCAodm9pZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocmFuZG9tLCBsb25nLCAodm9pZCkpOworX0dMX0NYWEFMSUFTV0FSTiAocmFuZG9tKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcmFuZG9tCisjIGlmIEhBVkVfUkFXX0RFQ0xfUkFORE9NCitfR0xfV0FSTl9PTl9VU0UgKHJhbmRvbSwgInJhbmRvbSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmFuZG9tIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChzcmFuZG9tLCB2b2lkLCAodW5zaWduZWQgaW50IHNlZWQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHNyYW5kb20sIHZvaWQsICh1bnNpZ25lZCBpbnQgc2VlZCkpOworX0dMX0NYWEFMSUFTV0FSTiAoc3JhbmRvbSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHNyYW5kb20KKyMgaWYgSEFWRV9SQVdfREVDTF9TUkFORE9NCitfR0xfV0FSTl9PTl9VU0UgKHNyYW5kb20sICJzcmFuZG9tIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSByYW5kb20gZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGluaXRzdGF0ZSwgY2hhciAqLAorICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCBzZWVkLCBjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChpbml0c3RhdGUsIGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQgc2VlZCwgY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUpKTsKK19HTF9DWFhBTElBU1dBUk4gKGluaXRzdGF0ZSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGluaXRzdGF0ZQorIyBpZiBIQVZFX1JBV19ERUNMX0lOSVRTVEFURV9SCitfR0xfV0FSTl9PTl9VU0UgKGluaXRzdGF0ZSwgImluaXRzdGF0ZSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmFuZG9tIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChzZXRzdGF0ZSwgY2hhciAqLCAoY2hhciAqYXJnX3N0YXRlKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc2V0c3RhdGUsIGNoYXIgKiwgKGNoYXIgKmFyZ19zdGF0ZSkpOworX0dMX0NYWEFMSUFTV0FSTiAoc2V0c3RhdGUpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzZXRzdGF0ZQorIyBpZiBIQVZFX1JBV19ERUNMX1NFVFNUQVRFX1IKK19HTF9XQVJOX09OX1VTRSAoc2V0c3RhdGUsICJzZXRzdGF0ZSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmFuZG9tIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiByYW5kb21fcgorIyAgIGRlZmluZSByYW5kb21fciBycGxfcmFuZG9tX3IKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChyYW5kb21fciwgaW50LCAoc3RydWN0IHJhbmRvbV9kYXRhICpidWYsIGludDMyX3QgKnJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChyYW5kb21fciwgaW50LCAoc3RydWN0IHJhbmRvbV9kYXRhICpidWYsIGludDMyX3QgKnJlc3VsdCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocmFuZG9tX3IsIGludCwgKHN0cnVjdCByYW5kb21fZGF0YSAqYnVmLCBpbnQzMl90ICpyZXN1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHJhbmRvbV9yLCBpbnQsIChzdHJ1Y3QgcmFuZG9tX2RhdGEgKmJ1ZiwgaW50MzJfdCAqcmVzdWx0KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChyYW5kb21fcik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHJhbmRvbV9yCisjIGlmIEhBVkVfUkFXX0RFQ0xfUkFORE9NX1IKK19HTF9XQVJOX09OX1VTRSAocmFuZG9tX3IsICJyYW5kb21fciBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmFuZG9tX3IgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBzcmFuZG9tX3IKKyMgICBkZWZpbmUgc3JhbmRvbV9yIHJwbF9zcmFuZG9tX3IKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChzcmFuZG9tX3IsIGludCwKKyAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQgc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpyYW5kX3N0YXRlKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHNyYW5kb21fciwgaW50LAorICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCBzZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKnJhbmRfc3RhdGUpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHNyYW5kb21fciwgaW50LAorICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCBzZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKnJhbmRfc3RhdGUpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHNyYW5kb21fciwgaW50LAorICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCBzZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKnJhbmRfc3RhdGUpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHNyYW5kb21fcik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHNyYW5kb21fcgorIyBpZiBIQVZFX1JBV19ERUNMX1NSQU5ET01fUgorX0dMX1dBUk5fT05fVVNFIChzcmFuZG9tX3IsICJzcmFuZG9tX3IgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHJhbmRvbV9yIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgaW5pdHN0YXRlX3IKKyMgICBkZWZpbmUgaW5pdHN0YXRlX3IgcnBsX2luaXRzdGF0ZV9yCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoaW5pdHN0YXRlX3IsIGludCwKKyAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQgc2VlZCwgY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsCisgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpyYW5kX3N0YXRlKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMiwgNCkpKTsKK19HTF9DWFhBTElBU19SUEwgKGluaXRzdGF0ZV9yLCBpbnQsCisgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50IHNlZWQsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLAorICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqcmFuZF9zdGF0ZSkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoaW5pdHN0YXRlX3IsIGludCwKKyAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQgc2VlZCwgY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsCisgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpyYW5kX3N0YXRlKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMiwgNCkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChpbml0c3RhdGVfciwgaW50LAorICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCBzZWVkLCBjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKnJhbmRfc3RhdGUpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGluaXRzdGF0ZV9yKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgaW5pdHN0YXRlX3IKKyMgaWYgSEFWRV9SQVdfREVDTF9JTklUU1RBVEVfUgorX0dMX1dBUk5fT05fVVNFIChpbml0c3RhdGVfciwgImluaXRzdGF0ZV9yIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSByYW5kb21fciBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHNldHN0YXRlX3IKKyMgICBkZWZpbmUgc2V0c3RhdGVfciBycGxfc2V0c3RhdGVfcgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHNldHN0YXRlX3IsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICphcmdfc3RhdGUsIHN0cnVjdCByYW5kb21fZGF0YSAqcmFuZF9zdGF0ZSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzZXRzdGF0ZV9yLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY2hhciAqYXJnX3N0YXRlLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKnJhbmRfc3RhdGUpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHNldHN0YXRlX3IsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICphcmdfc3RhdGUsIHN0cnVjdCByYW5kb21fZGF0YSAqcmFuZF9zdGF0ZSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc2V0c3RhdGVfciwgaW50LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKmFyZ19zdGF0ZSwgc3RydWN0IHJhbmRvbV9kYXRhICpyYW5kX3N0YXRlKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzZXRzdGF0ZV9yKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc2V0c3RhdGVfcgorIyBpZiBIQVZFX1JBV19ERUNMX1NFVFNUQVRFX1IKK19HTF9XQVJOX09OX1VTRSAoc2V0c3RhdGVfciwgInNldHN0YXRlX3IgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHJhbmRvbV9yIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDEKKyMgaWYgMAorIyAgaWYgISgoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpIFwKKyAgICAgICAgfHwgX0dMX1VTRV9TVERMSUJfQUxMT0MpCisjICAgdW5kZWYgcmVhbGxvYworIyAgIGRlZmluZSByZWFsbG9jIHJwbF9yZWFsbG9jCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocmVhbGxvYywgdm9pZCAqLCAodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkpOworX0dMX0NYWEFMSUFTX1JQTCAocmVhbGxvYywgdm9pZCAqLCAodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChyZWFsbG9jLCB2b2lkICosICh2b2lkICpwdHIsIHNpemVfdCBzaXplKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChyZWFsbG9jKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sgJiYgIV9HTF9VU0VfU1RETElCX0FMTE9DCisjIHVuZGVmIHJlYWxsb2MKKy8qIEFzc3VtZSByZWFsbG9jIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKHJlYWxsb2MsICJyZWFsbG9jIGlzIG5vdCBQT1NJWCBjb21wbGlhbnQgZXZlcnl3aGVyZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHJlYWxsb2MtcG9zaXggZm9yIHBvcnRhYmlsaXR5Iik7CisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgcmVhbHBhdGggcnBsX3JlYWxwYXRoCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocmVhbHBhdGgsIGNoYXIgKiwgKGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnJlc29sdmVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHJlYWxwYXRoLCBjaGFyICosIChjb25zdCBjaGFyICpuYW1lLCBjaGFyICpyZXNvbHZlZCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocmVhbHBhdGgsIGNoYXIgKiwgKGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnJlc29sdmVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChyZWFscGF0aCwgY2hhciAqLCAoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqcmVzb2x2ZWQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHJlYWxwYXRoKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcmVhbHBhdGgKKyMgaWYgSEFWRV9SQVdfREVDTF9SRUFMUEFUSAorX0dMX1dBUk5fT05fVVNFIChyZWFscGF0aCwgInJlYWxwYXRoIGlzIHVucG9ydGFibGUgLSB1c2UgZ251bGliIG1vZHVsZSAiCisgICAgICAgICAgICAgICAgICJjYW5vbmljYWxpemUgb3IgY2Fub25pY2FsaXplLWxncGwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKy8qIFRlc3QgYSB1c2VyIHJlc3BvbnNlIHRvIGEgcXVlc3Rpb24uCisgICBSZXR1cm4gMSBpZiBpdCBpcyBhZmZpcm1hdGl2ZSwgMCBpZiBpdCBpcyBuZWdhdGl2ZSwgb3IgLTEgaWYgbm90IGNsZWFyLiAgKi8KKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHJwbWF0Y2gsIGludCwgKGNvbnN0IGNoYXIgKnJlc3BvbnNlKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocnBtYXRjaCwgaW50LCAoY29uc3QgY2hhciAqcmVzcG9uc2UpKTsKK19HTF9DWFhBTElBU1dBUk4gKHJwbWF0Y2gpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBycG1hdGNoCisjIGlmIEhBVkVfUkFXX0RFQ0xfUlBNQVRDSAorX0dMX1dBUk5fT05fVVNFIChycG1hdGNoLCAicnBtYXRjaCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcnBtYXRjaCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorLyogU2V0IE5BTUUgdG8gVkFMVUUgaW4gdGhlIGVudmlyb25tZW50LgorICAgSWYgUkVQTEFDRSBpcyBub256ZXJvLCBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgdmFsdWUuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHNldGVudgorIyAgIGRlZmluZSBzZXRlbnYgcnBsX3NldGVudgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHNldGVudiwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgcmVwbGFjZSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzZXRlbnYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwgaW50IHJlcGxhY2UpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHNldGVudiwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgcmVwbGFjZSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc2V0ZW52LCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsIGludCByZXBsYWNlKSk7CisjIGVuZGlmCisjIGlmICEoMCAmJiAhMSkKK19HTF9DWFhBTElBU1dBUk4gKHNldGVudik7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHNldGVudgorIyBpZiBIQVZFX1JBV19ERUNMX1NFVEVOVgorX0dMX1dBUk5fT05fVVNFIChzZXRlbnYsICJzZXRlbnYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHNldGVudiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIC8qIFBhcnNlIGEgZG91YmxlIGZyb20gU1RSSU5HLCB1cGRhdGluZyBFTkRQIGlmIGFwcHJvcHJpYXRlLiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgc3RydG9kIHJwbF9zdHJ0b2QKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChzdHJ0b2QsIGRvdWJsZSwgKGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKmVuZHApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHN0cnRvZCwgZG91YmxlLCAoY29uc3QgY2hhciAqc3RyLCBjaGFyICoqZW5kcCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoc3RydG9kLCBkb3VibGUsIChjb25zdCBjaGFyICpzdHIsIGNoYXIgKiplbmRwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc3RydG9kLCBkb3VibGUsIChjb25zdCBjaGFyICpzdHIsIGNoYXIgKiplbmRwKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzdHJ0b2QpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJ0b2QKKyMgaWYgSEFWRV9SQVdfREVDTF9TVFJUT0QKK19HTF9XQVJOX09OX1VTRSAoc3RydG9kLCAic3RydG9kIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHJ0b2QgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKy8qIFBhcnNlIGEgc2lnbmVkIGludGVnZXIgd2hvc2UgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBzdGFydHMgYXQgU1RSSU5HLgorICAgVGhlIGludGVnZXIgaXMgZXhwZWN0ZWQgdG8gYmUgaW4gYmFzZSBCQVNFICgyIDw9IEJBU0UgPD0gMzYpOyBpZiBCQVNFID09IDAsCisgICBpdCBtYXkgYmUgZGVjaW1hbCBvciBvY3RhbCAod2l0aCBwcmVmaXggIjAiKSBvciBoZXhhZGVjaW1hbCAod2l0aCBwcmVmaXgKKyAgICIweCIpLgorICAgSWYgRU5EUFRSIGlzIG5vdCBOVUxMLCB0aGUgYWRkcmVzcyBvZiB0aGUgZmlyc3QgYnl0ZSBhZnRlciB0aGUgaW50ZWdlciBpcworICAgc3RvcmVkIGluICpFTkRQVFIuCisgICBVcG9uIG92ZXJmbG93LCB0aGUgcmV0dXJuIHZhbHVlIGlzIExMT05HX01BWCBvciBMTE9OR19NSU4sIGFuZCBlcnJubyBpcyBzZXQKKyAgIHRvIEVSQU5HRS4gICovCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChzdHJ0b2xsLCBsb25nIGxvbmcsCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqc3RyaW5nLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzdHJ0b2xsLCBsb25nIGxvbmcsCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqc3RyaW5nLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkpOworX0dMX0NYWEFMSUFTV0FSTiAoc3RydG9sbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHN0cnRvbGwKKyMgaWYgSEFWRV9SQVdfREVDTF9TVFJUT0xMCitfR0xfV0FSTl9PTl9VU0UgKHN0cnRvbGwsICJzdHJ0b2xsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHJ0b2xsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisvKiBQYXJzZSBhbiB1bnNpZ25lZCBpbnRlZ2VyIHdob3NlIHRleHR1YWwgcmVwcmVzZW50YXRpb24gc3RhcnRzIGF0IFNUUklORy4KKyAgIFRoZSBpbnRlZ2VyIGlzIGV4cGVjdGVkIHRvIGJlIGluIGJhc2UgQkFTRSAoMiA8PSBCQVNFIDw9IDM2KTsgaWYgQkFTRSA9PSAwLAorICAgaXQgbWF5IGJlIGRlY2ltYWwgb3Igb2N0YWwgKHdpdGggcHJlZml4ICIwIikgb3IgaGV4YWRlY2ltYWwgKHdpdGggcHJlZml4CisgICAiMHgiKS4KKyAgIElmIEVORFBUUiBpcyBub3QgTlVMTCwgdGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGJ5dGUgYWZ0ZXIgdGhlIGludGVnZXIgaXMKKyAgIHN0b3JlZCBpbiAqRU5EUFRSLgorICAgVXBvbiBvdmVyZmxvdywgdGhlIHJldHVybiB2YWx1ZSBpcyBVTExPTkdfTUFYLCBhbmQgZXJybm8gaXMgc2V0IHRvCisgICBFUkFOR0UuICAqLworIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoc3RydG91bGwsIHVuc2lnbmVkIGxvbmcgbG9uZywKKyAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpzdHJpbmcsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHN0cnRvdWxsLCB1bnNpZ25lZCBsb25nIGxvbmcsCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqc3RyaW5nLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkpOworX0dMX0NYWEFMSUFTV0FSTiAoc3RydG91bGwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJ0b3VsbAorIyBpZiBIQVZFX1JBV19ERUNMX1NUUlRPVUxMCitfR0xfV0FSTl9PTl9VU0UgKHN0cnRvdWxsLCAic3RydG91bGwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHN0cnRvdWxsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisvKiBVbmxvY2sgdGhlIHNsYXZlIHNpZGUgb2YgdGhlIHBzZXVkby10ZXJtaW5hbCB3aG9zZSBtYXN0ZXIgc2lkZSBpcyBzcGVjaWZpZWQKKyAgIGJ5IEZELCBzbyB0aGF0IGl0IGNhbiBiZSBvcGVuZWQuICAqLworIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAodW5sb2NrcHQsIGludCwgKGludCBmZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAodW5sb2NrcHQsIGludCwgKGludCBmZCkpOworX0dMX0NYWEFMSUFTV0FSTiAodW5sb2NrcHQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB1bmxvY2twdAorIyBpZiBIQVZFX1JBV19ERUNMX1VOTE9DS1BUCitfR0xfV0FSTl9PTl9VU0UgKHVubG9ja3B0LCAidW5sb2NrcHQgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgdW5sb2NrcHQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDEKKy8qIFJlbW92ZSB0aGUgdmFyaWFibGUgTkFNRSBmcm9tIHRoZSBlbnZpcm9ubWVudC4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgdW5zZXRlbnYKKyMgICBkZWZpbmUgdW5zZXRlbnYgcnBsX3Vuc2V0ZW52CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAodW5zZXRlbnYsIGludCwgKGNvbnN0IGNoYXIgKm5hbWUpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMICh1bnNldGVudiwgaW50LCAoY29uc3QgY2hhciAqbmFtZSkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAodW5zZXRlbnYsIGludCwgKGNvbnN0IGNoYXIgKm5hbWUpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAodW5zZXRlbnYsIGludCwgKGNvbnN0IGNoYXIgKm5hbWUpKTsKKyMgZW5kaWYKKyMgaWYgISgwICYmICExKQorX0dMX0NYWEFMSUFTV0FSTiAodW5zZXRlbnYpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB1bnNldGVudgorIyBpZiBIQVZFX1JBV19ERUNMX1VOU0VURU5WCitfR0xfV0FSTl9PTl9VU0UgKHVuc2V0ZW52LCAidW5zZXRlbnYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHVuc2V0ZW52IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIENvbnZlcnQgYSB3aWRlIGNoYXJhY3RlciB0byBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIuICAqLworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiB3Y3RvbWIKKyMgICBkZWZpbmUgd2N0b21iIHJwbF93Y3RvbWIKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh3Y3RvbWIsIGludCwgKGNoYXIgKnMsIHdjaGFyX3Qgd2MpKTsKK19HTF9DWFhBTElBU19SUEwgKHdjdG9tYiwgaW50LCAoY2hhciAqcywgd2NoYXJfdCB3YykpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3RvbWIsIGludCwgKGNoYXIgKnMsIHdjaGFyX3Qgd2MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHdjdG9tYik7CisjZW5kaWYKKworCisjZW5kaWYgLyogX0dMX1NURExJQl9IICovCisjZW5kaWYgLyogX0dMX1NURExJQl9IICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2Rhcndpbi1saWIvc3RyaW5nLmggYi9kYXJ3aW4tbGliL3N0cmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NWM4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9kYXJ3aW4tbGliL3N0cmluZy5oCkBAIC0wLDAgKzEsMTM0MSBAQAorLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLworLyogQSBHTlUtbGlrZSA8c3RyaW5nLmg+LgorCisgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NiwgMjAwMS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX0dMX1NUUklOR19ICisKKyNpZiBfX0dOVUNfXyA+PSAzCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisjZW5kaWYKKworCisvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisjaW5jbHVkZV9uZXh0IDxzdHJpbmcuaD4KKworI2lmbmRlZiBfR0xfU1RSSU5HX0gKKyNkZWZpbmUgX0dMX1NUUklOR19ICisKKy8qIE5ldEJTRCA1LjAgbWlzLWRlZmluZXMgTlVMTC4gICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8qIE1pckJTRCBkZWZpbmVzIG1ic2xlbiBhcyBhIG1hY3JvLiAgKi8KKyNpZiAwICYmIGRlZmluZWQgX19NaXJCU0RfXworIyBpbmNsdWRlIDx3Y2hhci5oPgorI2VuZGlmCisKKy8qIFRoZSBfX2F0dHJpYnV0ZV9fIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLgorICAgVGhlIGF0dHJpYnV0ZSBfX3B1cmVfXyB3YXMgYWRkZWQgaW4gZ2NjIDIuOTYuICAqLworI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NikKKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfUFVSRSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfUFVSRSAvKiBlbXB0eSAqLworI2VuZGlmCisKKy8qIE5ldEJTRCA1LjAgZGVjbGFyZXMgc3Ryc2lnbmFsIGluIDx1bmlzdGQuaD4sIG5vdCBpbiA8c3RyaW5nLmg+LiAgKi8KKy8qIEJ1dCBpbiBhbnkgY2FzZSBhdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9uIG9uIGdsaWJjIHN5c3RlbXMuICAqLworI2lmICgwIHx8IGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0spICYmIGRlZmluZWQgX19OZXRCU0RfXyBcCisgICAgJiYgISBkZWZpbmVkIF9fR0xJQkNfXworIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisvKiBUaGUgZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTCBldGMuIGFyZSBjb3BpZWQgaGVyZS4gICovCisjaWZuZGVmIF9HTF9DWFhERUZTX0gKKyNkZWZpbmUgX0dMX0NYWERFRlNfSAorCisvKiBUaGUgdGhyZWUgbW9zdCBmcmVxdWVudCB1c2UgY2FzZXMgb2YgdGhlc2UgbWFjcm9zIGFyZToKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgc3Vic3RpdHV0ZSBmb3IgYSBmdW5jdGlvbiB0aGF0IGlzIG1pc3Npbmcgb24gc29tZQorICAgICBwbGF0Zm9ybXMsIGJ1dCBpcyBkZWNsYXJlZCBhbmQgd29ya3MgZmluZSBvbiB0aGUgcGxhdGZvcm1zIG9uIHdoaWNoCisgICAgIGl0IGV4aXN0czoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmICFASEFWRV9GT09ACisgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIGFsbCBwbGF0Zm9ybXMsCisgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIHBsYXRmb3JtczoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorICAgICAgICMgICB1bmRlZiBmb28KKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworICAgICAgICMgZWxzZQorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIHNvbWUgcGxhdGZvcm1zCisgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIG9mIHRoZW0gYW5kCisgICAgIGlzIGFkZGl0aW9uYWxseSBlaXRoZXIgbWlzc2luZyBvciB1bmRlY2xhcmVkIG9uIHNvbWUgb3RoZXIgcGxhdGZvcm1zOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisgICAgICAgIyAgIHVuZGVmIGZvbworICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CisgICAgICAgIyBlbHNlCisgICAgICAgIyAgaWYgIUBIQVZFX0ZPT0AgICBvciAgIGlmICFASEFWRV9ERUNMX0ZPT0AKKyAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorKi8KKworLyogX0dMX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuICJDIgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4KKyNlbmRpZgorCisvKiBfR0xfRlVOQ0RFQ0xfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGRlY2xhcmVzIGEgcmVwbGFjZW1lbnQgZnVuY3Rpb24sIG5hbWVkIHJwbF9mdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9GVU5DREVDTF9SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICovCisjZGVmaW5lIF9HTF9GVU5DREVDTF9SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0ZVTkNERUNMX1JQTF8xIChycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKQorI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMXzEocnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9FWFRFUk5fQyByZXR0eXBlIHJwbF9mdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKworLyogX0dMX0ZVTkNERUNMX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBkZWNsYXJlcyB0aGUgc3lzdGVtIGZ1bmN0aW9uLCBuYW1lZCBmdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9GVU5DREVDTF9TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICovCisjZGVmaW5lIF9HTF9GVU5DREVDTF9TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0VYVEVSTl9DIHJldHR5cGUgZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisKKy8qIF9HTF9DWFhBTElBU19SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHJwbF9mdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFIGlzIGRlZmluZWQuCisgICBFeGFtcGxlOgorICAgICBfR0xfQ1hYQUxJQVNfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKyAqLworI2RlZmluZSBfR0xfQ1hYQUxJQVNfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycykKKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OnJwbF9mdW5jOyAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gcnBsX2Z1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQKKyAgIGRlY2xhcmF0aW9uLiAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IKKyAgIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpycGxfZnVuYyk7ICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHRoZSBzeXN0ZW0gcHJvdmlkZWQgZnVuY3Rpb24gZnVuYywgaWYgR05VTElCX05BTUVTUEFDRQorICAgaXMgZGVmaW5lZC4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9DWFhBTElBU19TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyAgLyogSWYgd2Ugd2VyZSB0byB3cml0ZQorICAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOworICAgICBsaWtlIGFib3ZlIGluIF9HTF9DWFhBTElBU19SUExfMSwgdGhlIGNvbXBpbGVyIGNvdWxkIG9wdGltaXplIGNhbGxzCisgICAgIGJldHRlciAocmVtb3ZlIGFuIGluZGlyZWN0aW9uIHRocm91Z2ggYSAnc3RhdGljJyBwb2ludGVyIHZhcmlhYmxlKSwKKyAgICAgYnV0IHRoZW4gdGhlIF9HTF9DWFhBTElBU1dBUk4gbWFjcm8gYmVsb3cgd291bGQgY2F1c2UgYSB3YXJuaW5nIG5vdCBvbmx5CisgICAgIGZvciB1c2VzIG9mIDo6ZnVuYyBidXQgYWxzbyBmb3IgdXNlcyBvZiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jLiAgKi8KKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGZ1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgZGVjbGFyYXRpb24uCisgICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvciB0aGF0IHdvdWxkCisgICBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpmdW5jKTsgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMsIHJldHR5cGUyLCBwYXJhbWV0ZXJzMik7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGlzIHBpY2tlZCBhbW9uZyBhIHNldCBvZiBvdmVybG9hZGVkIGZ1bmN0aW9ucywKKyAgIG5hbWVseSB0aGUgb25lIHdpdGggcmV0dHlwZTIgYW5kIHBhcmFtZXRlcnMyLiAgVHdvIGNvbnNlY3V0aXZlIGNhc3RzCisgICBhcmUgdXNlZCB0byBzaWxlbmNlIHRoZSAiY2Fubm90IGZpbmQgYSBtYXRjaCIgYW5kICJpbnZhbGlkIGNvbnZlcnNpb24iCisgICBlcnJvcnMgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisgIC8qIFRoZSBvdXRlciBjYXN0IG11c3QgYmUgYSByZWludGVycHJldF9jYXN0LgorICAgICBUaGUgaW5uZXIgY2FzdDogV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNldCBvZiBvdmVybG9hZGVkCisgICAgIGZ1bmN0aW9ucywgaXQgd29ya3MgYXMgYSBzdGF0aWNfY2FzdDw+LCBjaG9vc2luZyB0aGUgZGVzaWduYXRlZCB2YXJpYW50LgorICAgICBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2luZ2xlIHZhcmlhbnQsIGl0IHdvcmtzIGFzIGEKKyAgICAgcmVpbnRlcnByZXRfY2FzdDw+LiBUaGUgcGFyZW50aGVzaXplZCBjYXN0IHN5bnRheCB3b3JrcyBib3RoIHdheXMuICAqLworIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChyZXR0eXBlMigqKXBhcmFtZXRlcnMyKSg6OmZ1bmMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTV0FSTiAoZnVuYyk7CisgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiA6OmZ1bmMgaXMgdXNlZCBidXQgbm90IHdoZW4KKyAgIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gIGZ1bmMgbXVzdCBiZSBkZWZpbmVkIHdpdGhvdXQgb3ZlcmxvYWRlZAorICAgdmFyaWFudHMuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk5fMSAoZnVuYywgR05VTElCX05BTUVTUEFDRSkKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMShmdW5jLG5hbWVzcGFjZSkgXAorICAgX0dMX0NYWEFMSUFTV0FSTl8yIChmdW5jLCBuYW1lc3BhY2UpCisvKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKyAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworIyBpZiAhX19PUFRJTUlaRV9fCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgX0dMX1dBUk5fT05fVVNFIChmdW5jLCBcCisgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworIyBlbHNlCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNXQVJOMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiB0aGUgZ2l2ZW4gb3ZlcmxvYWRlZCB2YXJpYW50IG9mIDo6ZnVuYworICAgaXMgdXNlZCBidXQgbm90IHdoZW4gR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk4xXzEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdOVUxJQl9OQU1FU1BBQ0UpCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgX0dMX0NYWEFMSUFTV0FSTjFfMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgbmFtZXNwYWNlKQorLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKyMgaWYgIV9fT1BUSU1JWkVfXworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisjZW5kaWYgLyogX0dMX0NYWERFRlNfSCAqLworCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwgaXMgY29waWVkIGhlcmUuICAqLworLyogX0dMX0FSR19OT05OVUxMKChuLC4uLixtKSkgdGVsbHMgdGhlIGNvbXBpbGVyIGFuZCBzdGF0aWMgYW5hbHl6ZXIgdG9vbHMKKyAgIHRoYXQgdGhlIHZhbHVlcyBwYXNzZWQgYXMgYXJndW1lbnRzIG4sIC4uLiwgbSBtdXN0IGJlIG5vbi1OVUxMIHBvaW50ZXJzLgorICAgbiA9IDEgc3RhbmRzIGZvciB0aGUgZmlyc3QgYXJndW1lbnQsIG4gPSAyIGZvciB0aGUgc2Vjb25kIGFyZ3VtZW50IGV0Yy4gICovCisjaWZuZGVmIF9HTF9BUkdfTk9OTlVMTAorIyBpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSB8fCBfX0dOVUNfXyA+IDMKKyMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKSBfX2F0dHJpYnV0ZV9fICgoX19ub25udWxsX18gcGFyYW1zKSkKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpCisjIGVuZGlmCisjZW5kaWYKKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFCisKKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCisvKiBBIGNvbXBpbGVyIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDQuMy4wIGFuZCBsYXRlci4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobWVzc2FnZSkpKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24KKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisjIGVuZGlmCisjZW5kaWYKKworLyogX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuY3Rpb24sIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsICJzdHJpbmciKQorICAgaXMgbGlrZSBfR0xfV0FSTl9PTl9VU0UgKGZ1bmN0aW9uLCAic3RyaW5nIiksIGV4Y2VwdCB0aGF0IHRoZSBmdW5jdGlvbiBpcworICAgZGVjbGFyZWQgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLCBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLAorICAgYW5kIGF0dHJpYnV0ZXMuCisgICBUaGlzIHZhcmlhbnQgaXMgdXNlZnVsIGZvciBvdmVybG9hZGVkIGZ1bmN0aW9ucyBpbiBDKysuIF9HTF9XQVJOX09OX1VTRSBkb2VzCisgICBub3Qgd29yayBpbiB0aGlzIGNhc2UuICAqLworI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0VfQ1hYCisjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyBcCisgICAgIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobXNnKSkpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisvKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBfR0xfV0FSTl9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX0VYVEVSTl9DCisjIGlmIGRlZmluZWQgX19jcGx1c3BsdXMKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4gIkMiCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4KKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIEZpbmQgdGhlIGluZGV4IG9mIHRoZSBsZWFzdC1zaWduaWZpY2FudCBzZXQgYml0LiAgKi8KKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChmZnNsLCBpbnQsIChsb25nIGludCBpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmZnNsLCBpbnQsIChsb25nIGludCBpKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChmZnNsKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZmZzbAorIyBpZiBIQVZFX1JBV19ERUNMX0ZGU0wKK19HTF9XQVJOX09OX1VTRSAoZmZzbCwgImZmc2wgaXMgbm90IHBvcnRhYmxlIC0gdXNlIHRoZSBmZnNsIG1vZHVsZSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogRmluZCB0aGUgaW5kZXggb2YgdGhlIGxlYXN0LXNpZ25pZmljYW50IHNldCBiaXQuICAqLworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGZmc2xsLCBpbnQsIChsb25nIGxvbmcgaW50IGkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZmc2xsLCBpbnQsIChsb25nIGxvbmcgaW50IGkpKTsKK19HTF9DWFhBTElBU1dBUk4gKGZmc2xsKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZmZzbGwKKyMgaWYgSEFWRV9SQVdfREVDTF9GRlNMTAorX0dMX1dBUk5fT05fVVNFIChmZnNsbCwgImZmc2xsIGlzIG5vdCBwb3J0YWJsZSAtIHVzZSB0aGUgZmZzbGwgbW9kdWxlIik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBSZXR1cm4gdGhlIGZpcnN0IGluc3RhbmNlIG9mIEMgd2l0aGluIE4gYnl0ZXMgb2YgUywgb3IgTlVMTC4gICovCisjaWYgMQorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBtZW1jaHIgcnBsX21lbWNocgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG1lbWNociwgdm9pZCAqLCAodm9pZCBjb25zdCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChtZW1jaHIsIHZvaWQgKiwgKHZvaWQgY29uc3QgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikpOworIyBlbHNlCisjICBpZiAhIDEKK19HTF9GVU5DREVDTF9TWVMgKG1lbWNociwgdm9pZCAqLCAodm9pZCBjb25zdCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorICAvKiBPbiBzb21lIHN5c3RlbXMsIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhbiBvdmVybG9hZGVkIGZ1bmN0aW9uOgorICAgICAgIGV4dGVybiAiQyIgeyBjb25zdCB2b2lkICogc3RkOjptZW1jaHIgKGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOyB9CisgICAgICAgZXh0ZXJuICJDKysiIHsgdm9pZCAqIHN0ZDo6bWVtY2hyICh2b2lkICosIGludCwgc2l6ZV90KTsgfSAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVDIgKG1lbWNociwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiwgKHZvaWQgY29uc3QgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbiksCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIGNvbnN0ICosICh2b2lkIGNvbnN0ICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pKTsKKyMgZW5kaWYKKyMgaWYgKChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMTApICYmICFkZWZpbmVkIF9fVUNMSUJDX18pIFwKKyAgICAgJiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0KSkKK19HTF9DWFhBTElBU1dBUk4xIChtZW1jaHIsIHZvaWQgKiwgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikpOworX0dMX0NYWEFMSUFTV0FSTjEgKG1lbWNociwgdm9pZCBjb25zdCAqLAorICAgICAgICAgICAgICAgICAgICh2b2lkIGNvbnN0ICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTV0FSTiAobWVtY2hyKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbWVtY2hyCisvKiBBc3N1bWUgbWVtY2hyIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKG1lbWNociwgIm1lbWNociBoYXMgcGxhdGZvcm0tc3BlY2lmaWMgYnVncyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG1lbWNociBmb3IgcG9ydGFiaWxpdHkiICk7CisjZW5kaWYKKworLyogUmV0dXJuIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIE5FRURMRSBpbiBIQVlTVEFDSy4gICovCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBtZW1tZW0gcnBsX21lbW1lbQorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG1lbW1lbSwgdm9pZCAqLAorICAgICAgICAgICAgICAgICAgKHZvaWQgY29uc3QgKl9faGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrX2xlbiwKKyAgICAgICAgICAgICAgICAgICB2b2lkIGNvbnN0ICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlX2xlbikKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMykpKTsKK19HTF9DWFhBTElBU19SUEwgKG1lbW1lbSwgdm9pZCAqLAorICAgICAgICAgICAgICAgICAgKHZvaWQgY29uc3QgKl9faGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrX2xlbiwKKyAgICAgICAgICAgICAgICAgICB2b2lkIGNvbnN0ICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlX2xlbikpOworIyBlbHNlCisjICBpZiAhIDEKK19HTF9GVU5DREVDTF9TWVMgKG1lbW1lbSwgdm9pZCAqLAorICAgICAgICAgICAgICAgICAgKHZvaWQgY29uc3QgKl9faGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrX2xlbiwKKyAgICAgICAgICAgICAgICAgICB2b2lkIGNvbnN0ICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlX2xlbikKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMykpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChtZW1tZW0sIHZvaWQgKiwKKyAgICAgICAgICAgICAgICAgICh2b2lkIGNvbnN0ICpfX2hheXN0YWNrLCBzaXplX3QgX19oYXlzdGFja19sZW4sCisgICAgICAgICAgICAgICAgICAgdm9pZCBjb25zdCAqX19uZWVkbGUsIHNpemVfdCBfX25lZWRsZV9sZW4pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG1lbW1lbSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG1lbW1lbQorIyBpZiBIQVZFX1JBV19ERUNMX01FTU1FTQorX0dMX1dBUk5fT05fVVNFIChtZW1tZW0sICJtZW1tZW0gaXMgdW5wb3J0YWJsZSBhbmQgb2Z0ZW4gcXVhZHJhdGljIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWVtbWVtLXNpbXBsZSBmb3IgcG9ydGFiaWxpdHksICIKKyAgICAgICAgICAgICAgICAgImFuZCBtb2R1bGUgbWVtbWVtIGZvciBzcGVlZCIgKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBDb3B5IE4gYnl0ZXMgb2YgU1JDIHRvIERFU1QsIHJldHVybiBwb2ludGVyIHRvIGJ5dGVzIGFmdGVyIHRoZQorICAgbGFzdCB3cml0dGVuIGJ5dGUuICAqLworI2lmIDAKKyMgaWYgISAxCitfR0xfRlVOQ0RFQ0xfU1lTIChtZW1wY3B5LCB2b2lkICosCisgICAgICAgICAgICAgICAgICAodm9pZCAqcmVzdHJpY3QgX19kZXN0LCB2b2lkIGNvbnN0ICpyZXN0cmljdCBfX3NyYywKKyAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKG1lbXBjcHksIHZvaWQgKiwKKyAgICAgICAgICAgICAgICAgICh2b2lkICpyZXN0cmljdCBfX2Rlc3QsIHZvaWQgY29uc3QgKnJlc3RyaWN0IF9fc3JjLAorICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pKTsKK19HTF9DWFhBTElBU1dBUk4gKG1lbXBjcHkpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBtZW1wY3B5CisjIGlmIEhBVkVfUkFXX0RFQ0xfTUVNUENQWQorX0dMX1dBUk5fT05fVVNFIChtZW1wY3B5LCAibWVtcGNweSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWVtcGNweSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBTZWFyY2ggYmFja3dhcmRzIHRocm91Z2ggYSBibG9jayBmb3IgYSBieXRlIChzcGVjaWZpZWQgYXMgYW4gaW50KS4gICovCisjaWYgMAorIyBpZiAhIDEKK19HTF9GVU5DREVDTF9TWVMgKG1lbXJjaHIsIHZvaWQgKiwgKHZvaWQgY29uc3QgKiwgaW50LCBzaXplX3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorICAvKiBPbiBzb21lIHN5c3RlbXMsIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhbiBvdmVybG9hZGVkIGZ1bmN0aW9uOgorICAgICAgIGV4dGVybiAiQysrIiB7IGNvbnN0IHZvaWQgKiBzdGQ6Om1lbXJjaHIgKGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOyB9CisgICAgICAgZXh0ZXJuICJDKysiIHsgdm9pZCAqIHN0ZDo6bWVtcmNociAodm9pZCAqLCBpbnQsIHNpemVfdCk7IH0gICovCitfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyIChtZW1yY2hyLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqLCAodm9pZCBjb25zdCAqLCBpbnQsIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIGNvbnN0ICosICh2b2lkIGNvbnN0ICosIGludCwgc2l6ZV90KSk7CisjIGlmICgoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEwKSAmJiAhZGVmaW5lZCBfX1VDTElCQ19fKSBcCisgICAgICYmIChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNCkpCitfR0xfQ1hYQUxJQVNXQVJOMSAobWVtcmNociwgdm9pZCAqLCAodm9pZCAqLCBpbnQsIHNpemVfdCkpOworX0dMX0NYWEFMSUFTV0FSTjEgKG1lbXJjaHIsIHZvaWQgY29uc3QgKiwgKHZvaWQgY29uc3QgKiwgaW50LCBzaXplX3QpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTV0FSTiAobWVtcmNocik7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG1lbXJjaHIKKyMgaWYgSEFWRV9SQVdfREVDTF9NRU1SQ0hSCitfR0xfV0FSTl9PTl9VU0UgKG1lbXJjaHIsICJtZW1yY2hyIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBtZW1yY2hyIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgQyBpbiBTLiAgTW9yZSBlZmZpY2llbnQgdGhhbgorICAgbWVtY2hyKFMsQyxOKSwgYXQgdGhlIGV4cGVuc2Ugb2YgdW5kZWZpbmVkIGJlaGF2aW9yIGlmIEMgZG9lcyBub3QKKyAgIG9jY3VyIHdpdGhpbiBOIGJ5dGVzLiAgKi8KKyNpZiAxCisjIGlmICEgMAorX0dMX0ZVTkNERUNMX1NZUyAocmF3bWVtY2hyLCB2b2lkICosICh2b2lkIGNvbnN0ICpfX3MsIGludCBfX2NfaW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgZW5kaWYKKyAgLyogT24gc29tZSBzeXN0ZW1zLCB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYW4gb3ZlcmxvYWRlZCBmdW5jdGlvbjoKKyAgICAgICBleHRlcm4gIkMrKyIgeyBjb25zdCB2b2lkICogc3RkOjpyYXdtZW1jaHIgKGNvbnN0IHZvaWQgKiwgaW50KTsgfQorICAgICAgIGV4dGVybiAiQysrIiB7IHZvaWQgKiBzdGQ6OnJhd21lbWNociAodm9pZCAqLCBpbnQpOyB9ICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUMiAocmF3bWVtY2hyLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqLCAodm9pZCBjb25zdCAqX19zLCBpbnQgX19jX2luKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgY29uc3QgKiwgKHZvaWQgY29uc3QgKl9fcywgaW50IF9fY19pbikpOworIyBpZiAoKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxMCkgJiYgIWRlZmluZWQgX19VQ0xJQkNfXykgXAorICAgICAmJiAoX19HTlVDX18gPiA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDQpKQorX0dMX0NYWEFMSUFTV0FSTjEgKHJhd21lbWNociwgdm9pZCAqLCAodm9pZCAqX19zLCBpbnQgX19jX2luKSk7CitfR0xfQ1hYQUxJQVNXQVJOMSAocmF3bWVtY2hyLCB2b2lkIGNvbnN0ICosICh2b2lkIGNvbnN0ICpfX3MsIGludCBfX2NfaW4pKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTV0FSTiAocmF3bWVtY2hyKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcmF3bWVtY2hyCisjIGlmIEhBVkVfUkFXX0RFQ0xfUkFXTUVNQ0hSCitfR0xfV0FSTl9PTl9VU0UgKHJhd21lbWNociwgInJhd21lbWNociBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmF3bWVtY2hyIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIENvcHkgU1JDIHRvIERTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyAnXDAnIGluIERTVC4gICovCisjaWYgMQorIyBpZiAhIDEKK19HTF9GVU5DREVDTF9TWVMgKHN0cGNweSwgY2hhciAqLAorICAgICAgICAgICAgICAgICAgKGNoYXIgKnJlc3RyaWN0IF9fZHN0LCBjaGFyIGNvbnN0ICpyZXN0cmljdCBfX3NyYykKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzdHBjcHksIGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpyZXN0cmljdCBfX2RzdCwgY2hhciBjb25zdCAqcmVzdHJpY3QgX19zcmMpKTsKK19HTF9DWFhBTElBU1dBUk4gKHN0cGNweSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHN0cGNweQorIyBpZiBIQVZFX1JBV19ERUNMX1NUUENQWQorX0dMX1dBUk5fT05fVVNFIChzdHBjcHksICJzdHBjcHkgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHN0cGNweSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBDb3B5IG5vIG1vcmUgdGhhbiBOIGJ5dGVzIG9mIFNSQyB0byBEU1QsIHJldHVybmluZyBhIHBvaW50ZXIgcGFzdCB0aGUKKyAgIGxhc3Qgbm9uLU5VTCBieXRlIHdyaXR0ZW4gaW50byBEU1QuICAqLworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBzdHBuY3B5CisjICAgZGVmaW5lIHN0cG5jcHkgcnBsX3N0cG5jcHkKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChzdHBuY3B5LCBjaGFyICosCisgICAgICAgICAgICAgICAgICAoY2hhciAqcmVzdHJpY3QgX19kc3QsIGNoYXIgY29uc3QgKnJlc3RyaWN0IF9fc3JjLAorICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoc3RwbmNweSwgY2hhciAqLAorICAgICAgICAgICAgICAgICAgKGNoYXIgKnJlc3RyaWN0IF9fZHN0LCBjaGFyIGNvbnN0ICpyZXN0cmljdCBfX3NyYywKKyAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSk7CisjIGVsc2UKKyMgIGlmICEgMQorX0dMX0ZVTkNERUNMX1NZUyAoc3RwbmNweSwgY2hhciAqLAorICAgICAgICAgICAgICAgICAgKGNoYXIgKnJlc3RyaWN0IF9fZHN0LCBjaGFyIGNvbnN0ICpyZXN0cmljdCBfX3NyYywKKyAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzdHBuY3B5LCBjaGFyICosCisgICAgICAgICAgICAgICAgICAoY2hhciAqcmVzdHJpY3QgX19kc3QsIGNoYXIgY29uc3QgKnJlc3RyaWN0IF9fc3JjLAorICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHN0cG5jcHkpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHBuY3B5CisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RQTkNQWQorX0dMX1dBUk5fT05fVVNFIChzdHBuY3B5LCAic3RwbmNweSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RwbmNweSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLyogc3RyY2hyKCkgZG9lcyBub3Qgd29yayB3aXRoIG11bHRpYnl0ZSBzdHJpbmdzIGlmIHRoZSBsb2NhbGUgZW5jb2RpbmcgaXMKKyAgIEdCMTgwMzAgYW5kIHRoZSBjaGFyYWN0ZXIgdG8gYmUgc2VhcmNoZWQgaXMgYSBkaWdpdC4gICovCisjIHVuZGVmIHN0cmNocgorLyogQXNzdW1lIHN0cmNociBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFIChzdHJjaHIsICJzdHJjaHIgY2Fubm90IHdvcmsgY29ycmVjdGx5IG9uIGNoYXJhY3RlciBzdHJpbmdzICIKKyAgICAgICAgICAgICAgICAgImluIHNvbWUgbXVsdGlieXRlIGxvY2FsZXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgbWJzY2hyIGlmIHlvdSBjYXJlIGFib3V0IGludGVybmF0aW9uYWxpemF0aW9uIik7CisjZW5kaWYKKworLyogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBDIGluIFMgb3IgdGhlIGZpbmFsIE5VTCBieXRlLiAgKi8KKyNpZiAxCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHN0cmNocm51bCBycGxfc3RyY2hybnVsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc3RyY2hybnVsLCBjaGFyICosIChjb25zdCBjaGFyICpfX3MsIGludCBfX2NfaW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHN0cmNocm51bCwgY2hhciAqLAorICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKnN0ciwgaW50IGNoKSk7CisjIGVsc2UKKyMgIGlmICEgMAorX0dMX0ZVTkNERUNMX1NZUyAoc3RyY2hybnVsLCBjaGFyICosIChjaGFyIGNvbnN0ICpfX3MsIGludCBfX2NfaW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgIGVuZGlmCisgIC8qIE9uIHNvbWUgc3lzdGVtcywgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGFuIG92ZXJsb2FkZWQgZnVuY3Rpb246CisgICAgICAgZXh0ZXJuICJDKysiIHsgY29uc3QgY2hhciAqIHN0ZDo6c3RyY2hybnVsIChjb25zdCBjaGFyICosIGludCk7IH0KKyAgICAgICBleHRlcm4gIkMrKyIgeyBjaGFyICogc3RkOjpzdHJjaHJudWwgKGNoYXIgKiwgaW50KTsgfSAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVDIgKHN0cmNocm51bCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgKGNoYXIgY29uc3QgKl9fcywgaW50IF9fY19pbiksCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICosIChjaGFyIGNvbnN0ICpfX3MsIGludCBfX2NfaW4pKTsKKyMgZW5kaWYKKyMgaWYgKChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMTApICYmICFkZWZpbmVkIF9fVUNMSUJDX18pIFwKKyAgICAgJiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0KSkKK19HTF9DWFhBTElBU1dBUk4xIChzdHJjaHJudWwsIGNoYXIgKiwgKGNoYXIgKl9fcywgaW50IF9fY19pbikpOworX0dMX0NYWEFMSUFTV0FSTjEgKHN0cmNocm51bCwgY2hhciBjb25zdCAqLCAoY2hhciBjb25zdCAqX19zLCBpbnQgX19jX2luKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU1dBUk4gKHN0cmNocm51bCk7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHN0cmNocm51bAorIyBpZiBIQVZFX1JBV19ERUNMX1NUUkNIUk5VTAorX0dMX1dBUk5fT05fVVNFIChzdHJjaHJudWwsICJzdHJjaHJudWwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHN0cmNocm51bCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBEdXBsaWNhdGUgUywgcmV0dXJuaW5nIGFuIGlkZW50aWNhbCBtYWxsb2MnZCBzdHJpbmcuICAqLworI2lmIDEKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBzdHJkdXAKKyMgICBkZWZpbmUgc3RyZHVwIHJwbF9zdHJkdXAKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChzdHJkdXAsIGNoYXIgKiwgKGNoYXIgY29uc3QgKl9fcykgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHN0cmR1cCwgY2hhciAqLCAoY2hhciBjb25zdCAqX19zKSk7CisjIGVsc2UKKyMgIGlmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFICYmIGRlZmluZWQgc3RyZHVwCisgICAgLyogc3RyZHVwIGV4aXN0cyBhcyBhIGZ1bmN0aW9uIGFuZCBhcyBhIG1hY3JvLiAgR2V0IHJpZCBvZiB0aGUgbWFjcm8uICAqLworIyAgIHVuZGVmIHN0cmR1cAorIyAgZW5kaWYKKyMgIGlmICEoMSB8fCBkZWZpbmVkIHN0cmR1cCkKK19HTF9GVU5DREVDTF9TWVMgKHN0cmR1cCwgY2hhciAqLCAoY2hhciBjb25zdCAqX19zKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHN0cmR1cCwgY2hhciAqLCAoY2hhciBjb25zdCAqX19zKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzdHJkdXApOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJkdXAKKyMgaWYgSEFWRV9SQVdfREVDTF9TVFJEVVAKK19HTF9XQVJOX09OX1VTRSAoc3RyZHVwLCAic3RyZHVwIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHJkdXAgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworLyogQXBwZW5kIG5vIG1vcmUgdGhhbiBOIGNoYXJhY3RlcnMgZnJvbSBTUkMgb250byBERVNULiAgKi8KKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgc3RybmNhdAorIyAgIGRlZmluZSBzdHJuY2F0IHJwbF9zdHJuY2F0CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc3RybmNhdCwgY2hhciAqLCAoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHN0cm5jYXQsIGNoYXIgKiwgKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IG4pKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoc3RybmNhdCwgY2hhciAqLCAoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoc3RybmNhdCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHN0cm5jYXQKKyMgaWYgSEFWRV9SQVdfREVDTF9TVFJOQ0FUCitfR0xfV0FSTl9PTl9VU0UgKHN0cm5jYXQsICJzdHJuY2F0IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHJuY2F0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIFJldHVybiBhIG5ld2x5IGFsbG9jYXRlZCBjb3B5IG9mIGF0IG1vc3QgTiBieXRlcyBvZiBTVFJJTkcuICAqLworI2lmIDEKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBzdHJuZHVwCisjICAgZGVmaW5lIHN0cm5kdXAgcnBsX3N0cm5kdXAKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChzdHJuZHVwLCBjaGFyICosIChjaGFyIGNvbnN0ICpfX3N0cmluZywgc2l6ZV90IF9fbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHN0cm5kdXAsIGNoYXIgKiwgKGNoYXIgY29uc3QgKl9fc3RyaW5nLCBzaXplX3QgX19uKSk7CisjIGVsc2UKKyMgIGlmICEgMQorX0dMX0ZVTkNERUNMX1NZUyAoc3RybmR1cCwgY2hhciAqLCAoY2hhciBjb25zdCAqX19zdHJpbmcsIHNpemVfdCBfX24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc3RybmR1cCwgY2hhciAqLCAoY2hhciBjb25zdCAqX19zdHJpbmcsIHNpemVfdCBfX24pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHN0cm5kdXApOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJuZHVwCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RSTkRVUAorX0dMX1dBUk5fT05fVVNFIChzdHJuZHVwLCAic3RybmR1cCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RybmR1cCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBGaW5kIHRoZSBsZW5ndGggKG51bWJlciBvZiBieXRlcykgb2YgU1RSSU5HLCBidXQgc2NhbiBhdCBtb3N0CisgICBNQVhMRU4gYnl0ZXMuICBJZiBubyAnXDAnIHRlcm1pbmF0b3IgaXMgZm91bmQgaW4gdGhhdCBtYW55IGJ5dGVzLAorICAgcmV0dXJuIE1BWExFTi4gICovCisjaWYgMQorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHN0cm5sZW4KKyMgICBkZWZpbmUgc3RybmxlbiBycGxfc3RybmxlbgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHN0cm5sZW4sIHNpemVfdCwgKGNoYXIgY29uc3QgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoc3Rybmxlbiwgc2l6ZV90LCAoY2hhciBjb25zdCAqX19zdHJpbmcsIHNpemVfdCBfX21heGxlbikpOworIyBlbHNlCisjICBpZiAhIDEKK19HTF9GVU5DREVDTF9TWVMgKHN0cm5sZW4sIHNpemVfdCwgKGNoYXIgY29uc3QgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHN0cm5sZW4sIHNpemVfdCwgKGNoYXIgY29uc3QgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHN0cm5sZW4pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJubGVuCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RSTkxFTgorX0dMX1dBUk5fT05fVVNFIChzdHJubGVuLCAic3RybmxlbiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RybmxlbiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLyogc3RyY3NwbigpIGFzc3VtZXMgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBhIGxpc3Qgb2Ygc2luZ2xlLWJ5dGUgY2hhcmFjdGVycy4KKyAgIEV2ZW4gaW4gdGhpcyBzaW1wbGUgY2FzZSwgaXQgZG9lcyBub3Qgd29yayB3aXRoIG11bHRpYnl0ZSBzdHJpbmdzIGlmIHRoZQorICAgbG9jYWxlIGVuY29kaW5nIGlzIEdCMTgwMzAgYW5kIG9uZSBvZiB0aGUgY2hhcmFjdGVycyB0byBiZSBzZWFyY2hlZCBpcyBhCisgICBkaWdpdC4gICovCisjIHVuZGVmIHN0cmNzcG4KKy8qIEFzc3VtZSBzdHJjc3BuIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKHN0cmNzcG4sICJzdHJjc3BuIGNhbm5vdCB3b3JrIGNvcnJlY3RseSBvbiBjaGFyYWN0ZXIgc3RyaW5ncyAiCisgICAgICAgICAgICAgICAgICJpbiBtdWx0aWJ5dGUgbG9jYWxlcyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBtYnNjc3BuIGlmIHlvdSBjYXJlIGFib3V0IGludGVybmF0aW9uYWxpemF0aW9uIik7CisjZW5kaWYKKworLyogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBpbiBTIG9mIGFueSBjaGFyYWN0ZXIgaW4gQUNDRVBULiAgKi8KKyNpZiAwCisjIGlmICEgMQorX0dMX0ZVTkNERUNMX1NZUyAoc3RycGJyaywgY2hhciAqLCAoY2hhciBjb25zdCAqX19zLCBjaGFyIGNvbnN0ICpfX2FjY2VwdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjIGVuZGlmCisgIC8qIE9uIHNvbWUgc3lzdGVtcywgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGFuIG92ZXJsb2FkZWQgZnVuY3Rpb246CisgICAgICAgZXh0ZXJuICJDIiB7IGNvbnN0IGNoYXIgKiBzdHJwYnJrIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7IH0KKyAgICAgICBleHRlcm4gIkMrKyIgeyBjaGFyICogc3RycGJyayAoY2hhciAqLCBjb25zdCBjaGFyICopOyB9ICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUMiAoc3RycGJyaywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgKGNoYXIgY29uc3QgKl9fcywgY2hhciBjb25zdCAqX19hY2NlcHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCAoY2hhciBjb25zdCAqX19zLCBjaGFyIGNvbnN0ICpfX2FjY2VwdCkpOworIyBpZiAoKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxMCkgJiYgIWRlZmluZWQgX19VQ0xJQkNfXykgXAorICAgICAmJiAoX19HTlVDX18gPiA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDQpKQorX0dMX0NYWEFMSUFTV0FSTjEgKHN0cnBicmssIGNoYXIgKiwgKGNoYXIgKl9fcywgY2hhciBjb25zdCAqX19hY2NlcHQpKTsKK19HTF9DWFhBTElBU1dBUk4xIChzdHJwYnJrLCBjaGFyIGNvbnN0ICosCisgICAgICAgICAgICAgICAgICAgKGNoYXIgY29uc3QgKl9fcywgY2hhciBjb25zdCAqX19hY2NlcHQpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTV0FSTiAoc3RycGJyayk7CisjIGVuZGlmCisjIGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy8qIHN0cnBicmsoKSBhc3N1bWVzIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBsaXN0IG9mIHNpbmdsZS1ieXRlIGNoYXJhY3RlcnMuCisgICBFdmVuIGluIHRoaXMgc2ltcGxlIGNhc2UsIGl0IGRvZXMgbm90IHdvcmsgd2l0aCBtdWx0aWJ5dGUgc3RyaW5ncyBpZiB0aGUKKyAgIGxvY2FsZSBlbmNvZGluZyBpcyBHQjE4MDMwIGFuZCBvbmUgb2YgdGhlIGNoYXJhY3RlcnMgdG8gYmUgc2VhcmNoZWQgaXMgYQorICAgZGlnaXQuICAqLworIyAgdW5kZWYgc3RycGJyaworX0dMX1dBUk5fT05fVVNFIChzdHJwYnJrLCAic3RycGJyayBjYW5ub3Qgd29yayBjb3JyZWN0bHkgb24gY2hhcmFjdGVyIHN0cmluZ3MgIgorICAgICAgICAgICAgICAgICAiaW4gbXVsdGlieXRlIGxvY2FsZXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgbWJzcGJyayBpZiB5b3UgY2FyZSBhYm91dCBpbnRlcm5hdGlvbmFsaXphdGlvbiIpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJwYnJrCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RSUEJSSworX0dMX1dBUk5fT05fVVNFIChzdHJwYnJrLCAic3RycGJyayBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RycGJyayBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLyogc3Ryc3BuKCkgYXNzdW1lcyB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGEgbGlzdCBvZiBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXJzLgorICAgRXZlbiBpbiB0aGlzIHNpbXBsZSBjYXNlLCBpdCBjYW5ub3Qgd29yayB3aXRoIG11bHRpYnl0ZSBzdHJpbmdzLiAgKi8KKyMgdW5kZWYgc3Ryc3BuCisvKiBBc3N1bWUgc3Ryc3BuIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKHN0cnNwbiwgInN0cnNwbiBjYW5ub3Qgd29yayBjb3JyZWN0bHkgb24gY2hhcmFjdGVyIHN0cmluZ3MgIgorICAgICAgICAgICAgICAgICAiaW4gbXVsdGlieXRlIGxvY2FsZXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgbWJzc3BuIGlmIHlvdSBjYXJlIGFib3V0IGludGVybmF0aW9uYWxpemF0aW9uIik7CisjZW5kaWYKKworI2lmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy8qIHN0cnJjaHIoKSBkb2VzIG5vdCB3b3JrIHdpdGggbXVsdGlieXRlIHN0cmluZ3MgaWYgdGhlIGxvY2FsZSBlbmNvZGluZyBpcworICAgR0IxODAzMCBhbmQgdGhlIGNoYXJhY3RlciB0byBiZSBzZWFyY2hlZCBpcyBhIGRpZ2l0LiAgKi8KKyMgdW5kZWYgc3RycmNocgorLyogQXNzdW1lIHN0cnJjaHIgaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAoc3RycmNociwgInN0cnJjaHIgY2Fubm90IHdvcmsgY29ycmVjdGx5IG9uIGNoYXJhY3RlciBzdHJpbmdzICIKKyAgICAgICAgICAgICAgICAgImluIHNvbWUgbXVsdGlieXRlIGxvY2FsZXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgbWJzcmNociBpZiB5b3UgY2FyZSBhYm91dCBpbnRlcm5hdGlvbmFsaXphdGlvbiIpOworI2VuZGlmCisKKy8qIFNlYXJjaCB0aGUgbmV4dCBkZWxpbWl0ZXIgKGNoYXIgbGlzdGVkIGluIERFTElNKSBzdGFydGluZyBhdCAqU1RSSU5HUC4KKyAgIElmIG9uZSBpcyBmb3VuZCwgb3ZlcndyaXRlIGl0IHdpdGggYSBOVUwsIGFuZCBhZHZhbmNlICpTVFJJTkdQCisgICB0byBwb2ludCB0byB0aGUgbmV4dCBjaGFyIGFmdGVyIGl0LiAgT3RoZXJ3aXNlLCBzZXQgKlNUUklOR1AgdG8gTlVMTC4KKyAgIElmICpTVFJJTkdQIHdhcyBhbHJlYWR5IE5VTEwsIG5vdGhpbmcgaGFwcGVucy4KKyAgIFJldHVybiB0aGUgb2xkIHZhbHVlIG9mICpTVFJJTkdQLgorCisgICBUaGlzIGlzIGEgdmFyaWFudCBvZiBzdHJ0b2soKSB0aGF0IGlzIG11bHRpdGhyZWFkLXNhZmUgYW5kIHN1cHBvcnRzCisgICBlbXB0eSBmaWVsZHMuCisKKyAgIENhdmVhdDogSXQgbW9kaWZpZXMgdGhlIG9yaWdpbmFsIHN0cmluZy4KKyAgIENhdmVhdDogVGhlc2UgZnVuY3Rpb25zIGNhbm5vdCBiZSB1c2VkIG9uIGNvbnN0YW50IHN0cmluZ3MuCisgICBDYXZlYXQ6IFRoZSBpZGVudGl0eSBvZiB0aGUgZGVsaW1pdGluZyBjaGFyYWN0ZXIgaXMgbG9zdC4KKyAgIENhdmVhdDogSXQgZG9lc24ndCB3b3JrIHdpdGggbXVsdGlieXRlIHN0cmluZ3MgdW5sZXNzIGFsbCBvZiB0aGUgZGVsaW1pdGVyCisgICAgICAgICAgIGNoYXJhY3RlcnMgYXJlIEFTQ0lJIGNoYXJhY3RlcnMgPCAweDMwLgorCisgICBTZWUgYWxzbyBzdHJ0b2tfcigpLiAgKi8KKyNpZiAwCisjIGlmICEgMQorX0dMX0ZVTkNERUNMX1NZUyAoc3Ryc2VwLCBjaGFyICosCisgICAgICAgICAgICAgICAgICAoY2hhciAqKnJlc3RyaWN0IF9fc3RyaW5ncCwgY2hhciBjb25zdCAqcmVzdHJpY3QgX19kZWxpbSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzdHJzZXAsIGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqcmVzdHJpY3QgX19zdHJpbmdwLCBjaGFyIGNvbnN0ICpyZXN0cmljdCBfX2RlbGltKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChzdHJzZXApOworIyBpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjICB1bmRlZiBzdHJzZXAKK19HTF9XQVJOX09OX1VTRSAoc3Ryc2VwLCAic3Ryc2VwIGNhbm5vdCB3b3JrIGNvcnJlY3RseSBvbiBjaGFyYWN0ZXIgc3RyaW5ncyAiCisgICAgICAgICAgICAgICAgICJpbiBtdWx0aWJ5dGUgbG9jYWxlcyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBtYnNzZXAgaWYgeW91IGNhcmUgYWJvdXQgaW50ZXJuYXRpb25hbGl6YXRpb24iKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc3Ryc2VwCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RSU0VQCitfR0xfV0FSTl9PTl9VU0UgKHN0cnNlcCwgInN0cnNlcCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3Ryc2VwIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHN0cnN0ciBycGxfc3Ryc3RyCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc3Ryc3RyLCBjaGFyICosIChjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzdHJzdHIsIGNoYXIgKiwgKGNvbnN0IGNoYXIgKmhheXN0YWNrLCBjb25zdCBjaGFyICpuZWVkbGUpKTsKKyMgZWxzZQorICAvKiBPbiBzb21lIHN5c3RlbXMsIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhbiBvdmVybG9hZGVkIGZ1bmN0aW9uOgorICAgICAgIGV4dGVybiAiQysrIiB7IGNvbnN0IGNoYXIgKiBzdHJzdHIgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsgfQorICAgICAgIGV4dGVybiAiQysrIiB7IGNoYXIgKiBzdHJzdHIgKGNoYXIgKiwgY29uc3QgY2hhciAqKTsgfSAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVDIgKHN0cnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgKGNvbnN0IGNoYXIgKmhheXN0YWNrLCBjb25zdCBjaGFyICpuZWVkbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCAoY29uc3QgY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSkpOworIyBlbmRpZgorIyBpZiAoKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxMCkgJiYgIWRlZmluZWQgX19VQ0xJQkNfXykgXAorICAgICAmJiAoX19HTlVDX18gPiA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDQpKQorX0dMX0NYWEFMSUFTV0FSTjEgKHN0cnN0ciwgY2hhciAqLCAoY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSkpOworX0dMX0NYWEFMSUFTV0FSTjEgKHN0cnN0ciwgY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU1dBUk4gKHN0cnN0cik7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisvKiBzdHJzdHIoKSBkb2VzIG5vdCB3b3JrIHdpdGggbXVsdGlieXRlIHN0cmluZ3MgaWYgdGhlIGxvY2FsZSBlbmNvZGluZyBpcworICAgZGlmZmVyZW50IGZyb20gVVRGLTg6CisgICBQT1NJWCBzYXlzIHRoYXQgaXQgb3BlcmF0ZXMgb24gInN0cmluZ3MiLCBhbmQgInN0cmluZyIgaW4gUE9TSVggaXMgZGVmaW5lZAorICAgYXMgYSBzZXF1ZW5jZSBvZiBieXRlcywgbm90IG9mIGNoYXJhY3RlcnMuICAqLworIyB1bmRlZiBzdHJzdHIKKy8qIEFzc3VtZSBzdHJzdHIgaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAoc3Ryc3RyLCAic3Ryc3RyIGlzIHF1YWRyYXRpYyBvbiBtYW55IHN5c3RlbXMsIGFuZCBjYW5ub3QgIgorICAgICAgICAgICAgICAgICAid29yayBjb3JyZWN0bHkgb24gY2hhcmFjdGVyIHN0cmluZ3MgaW4gbW9zdCAiCisgICAgICAgICAgICAgICAgICJtdWx0aWJ5dGUgbG9jYWxlcyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBtYnNzdHIgaWYgeW91IGNhcmUgYWJvdXQgaW50ZXJuYXRpb25hbGl6YXRpb24sICIKKyAgICAgICAgICAgICAgICAgIm9yIHVzZSBzdHJzdHIgaWYgeW91IGNhcmUgYWJvdXQgc3BlZWQiKTsKKyNlbmRpZgorCisvKiBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIE5FRURMRSBpbiBIQVlTVEFDSywgdXNpbmcgY2FzZS1pbnNlbnNpdGl2ZQorICAgY29tcGFyaXNvbi4gICovCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBzdHJjYXNlc3RyIHJwbF9zdHJjYXNlc3RyCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc3RyY2FzZXN0ciwgY2hhciAqLAorICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKmhheXN0YWNrLCBjb25zdCBjaGFyICpuZWVkbGUpCisgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzdHJjYXNlc3RyLCBjaGFyICosCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSkpOworIyBlbHNlCisjICBpZiAhIDEKK19HTF9GVU5DREVDTF9TWVMgKHN0cmNhc2VzdHIsIGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKQorICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyAgZW5kaWYKKyAgLyogT24gc29tZSBzeXN0ZW1zLCB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYW4gb3ZlcmxvYWRlZCBmdW5jdGlvbjoKKyAgICAgICBleHRlcm4gIkMrKyIgeyBjb25zdCBjaGFyICogc3RyY2FzZXN0ciAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOyB9CisgICAgICAgZXh0ZXJuICJDKysiIHsgY2hhciAqIHN0cmNhc2VzdHIgKGNoYXIgKiwgY29uc3QgY2hhciAqKTsgfSAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVDIgKHN0cmNhc2VzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIChjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgKGNvbnN0IGNoYXIgKmhheXN0YWNrLCBjb25zdCBjaGFyICpuZWVkbGUpKTsKKyMgZW5kaWYKKyMgaWYgKChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMTApICYmICFkZWZpbmVkIF9fVUNMSUJDX18pIFwKKyAgICAgJiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0KSkKK19HTF9DWFhBTElBU1dBUk4xIChzdHJjYXNlc3RyLCBjaGFyICosIChjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKSk7CitfR0xfQ1hYQUxJQVNXQVJOMSAoc3RyY2FzZXN0ciwgY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU1dBUk4gKHN0cmNhc2VzdHIpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLyogc3RyY2FzZXN0cigpIGRvZXMgbm90IHdvcmsgd2l0aCBtdWx0aWJ5dGUgc3RyaW5nczoKKyAgIEl0IGlzIGEgZ2xpYmMgZXh0ZW5zaW9uLCBhbmQgZ2xpYmMgaW1wbGVtZW50cyBpdCBvbmx5IGZvciB1bmlieXRlCisgICBsb2NhbGVzLiAgKi8KKyMgdW5kZWYgc3RyY2FzZXN0cgorIyBpZiBIQVZFX1JBV19ERUNMX1NUUkNBU0VTVFIKK19HTF9XQVJOX09OX1VTRSAoc3RyY2FzZXN0ciwgInN0cmNhc2VzdHIgZG9lcyB3b3JrIGNvcnJlY3RseSBvbiBjaGFyYWN0ZXIgIgorICAgICAgICAgICAgICAgICAic3RyaW5ncyBpbiBtdWx0aWJ5dGUgbG9jYWxlcyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBtYnNjYXNlc3RyIGlmIHlvdSBjYXJlIGFib3V0ICIKKyAgICAgICAgICAgICAgICAgImludGVybmF0aW9uYWxpemF0aW9uLCBvciB1c2UgYy1zdHJjYXNlc3RyIGlmIHlvdSB3YW50ICIKKyAgICAgICAgICAgICAgICAgImEgbG9jYWxlIGluZGVwZW5kZW50IGZ1bmN0aW9uIik7CisjIGVuZGlmCisjZW5kaWYKKworLyogUGFyc2UgUyBpbnRvIHRva2VucyBzZXBhcmF0ZWQgYnkgY2hhcmFjdGVycyBpbiBERUxJTS4KKyAgIElmIFMgaXMgTlVMTCwgdGhlIHNhdmVkIHBvaW50ZXIgaW4gU0FWRV9QVFIgaXMgdXNlZCBhcworICAgdGhlIG5leHQgc3RhcnRpbmcgcG9pbnQuICBGb3IgZXhhbXBsZToKKyAgICAgICAgY2hhciBzW10gPSAiLWFiYy09LWRlZiI7CisgICAgICAgIGNoYXIgKnNwOworICAgICAgICB4ID0gc3RydG9rX3IocywgIi0iLCAmc3ApOyAgICAgIC8vIHggPSAiYWJjIiwgc3AgPSAiPS1kZWYiCisgICAgICAgIHggPSBzdHJ0b2tfcihOVUxMLCAiLT0iLCAmc3ApOyAgLy8geCA9ICJkZWYiLCBzcCA9IE5VTEwKKyAgICAgICAgeCA9IHN0cnRva19yKE5VTEwsICI9IiwgJnNwKTsgICAvLyB4ID0gTlVMTAorICAgICAgICAgICAgICAgIC8vIHMgPSAiYWJjXDAtZGVmXDAiCisKKyAgIFRoaXMgaXMgYSB2YXJpYW50IG9mIHN0cnRvaygpIHRoYXQgaXMgbXVsdGl0aHJlYWQtc2FmZS4KKworICAgRm9yIHRoZSBQT1NJWCBkb2N1bWVudGF0aW9uIGZvciB0aGlzIGZ1bmN0aW9uLCBzZWU6CisgICBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjN4c2gvc3RydG9rLmh0bWwKKworICAgQ2F2ZWF0OiBJdCBtb2RpZmllcyB0aGUgb3JpZ2luYWwgc3RyaW5nLgorICAgQ2F2ZWF0OiBUaGVzZSBmdW5jdGlvbnMgY2Fubm90IGJlIHVzZWQgb24gY29uc3RhbnQgc3RyaW5ncy4KKyAgIENhdmVhdDogVGhlIGlkZW50aXR5IG9mIHRoZSBkZWxpbWl0aW5nIGNoYXJhY3RlciBpcyBsb3N0LgorICAgQ2F2ZWF0OiBJdCBkb2Vzbid0IHdvcmsgd2l0aCBtdWx0aWJ5dGUgc3RyaW5ncyB1bmxlc3MgYWxsIG9mIHRoZSBkZWxpbWl0ZXIKKyAgICAgICAgICAgY2hhcmFjdGVycyBhcmUgQVNDSUkgY2hhcmFjdGVycyA8IDB4MzAuCisKKyAgIFNlZSBhbHNvIHN0cnNlcCgpLiAgKi8KKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgc3RydG9rX3IKKyMgICBkZWZpbmUgc3RydG9rX3IgcnBsX3N0cnRva19yCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc3RydG9rX3IsIGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpyZXN0cmljdCBzLCBjaGFyIGNvbnN0ICpyZXN0cmljdCBkZWxpbSwKKyAgICAgICAgICAgICAgICAgICBjaGFyICoqcmVzdHJpY3Qgc2F2ZV9wdHIpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyLCAzKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoc3RydG9rX3IsIGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpyZXN0cmljdCBzLCBjaGFyIGNvbnN0ICpyZXN0cmljdCBkZWxpbSwKKyAgICAgICAgICAgICAgICAgICBjaGFyICoqcmVzdHJpY3Qgc2F2ZV9wdHIpKTsKKyMgZWxzZQorIyAgaWYgMCB8fCBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjICAgdW5kZWYgc3RydG9rX3IKKyMgIGVuZGlmCisjICBpZiAhIDEKK19HTF9GVU5DREVDTF9TWVMgKHN0cnRva19yLCBjaGFyICosCisgICAgICAgICAgICAgICAgICAoY2hhciAqcmVzdHJpY3QgcywgY2hhciBjb25zdCAqcmVzdHJpY3QgZGVsaW0sCisgICAgICAgICAgICAgICAgICAgY2hhciAqKnJlc3RyaWN0IHNhdmVfcHRyKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMiwgMykpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzdHJ0b2tfciwgY2hhciAqLAorICAgICAgICAgICAgICAgICAgKGNoYXIgKnJlc3RyaWN0IHMsIGNoYXIgY29uc3QgKnJlc3RyaWN0IGRlbGltLAorICAgICAgICAgICAgICAgICAgIGNoYXIgKipyZXN0cmljdCBzYXZlX3B0cikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoc3RydG9rX3IpOworIyBpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCitfR0xfV0FSTl9PTl9VU0UgKHN0cnRva19yLCAic3RydG9rX3IgY2Fubm90IHdvcmsgY29ycmVjdGx5IG9uIGNoYXJhY3RlciAiCisgICAgICAgICAgICAgICAgICJzdHJpbmdzIGluIG11bHRpYnl0ZSBsb2NhbGVzIC0gIgorICAgICAgICAgICAgICAgICAidXNlIG1ic3Rva19yIGlmIHlvdSBjYXJlIGFib3V0IGludGVybmF0aW9uYWxpemF0aW9uIik7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHN0cnRva19yCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RSVE9LX1IKK19HTF9XQVJOX09OX1VTRSAoc3RydG9rX3IsICJzdHJ0b2tfciBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RydG9rX3IgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgbm90IHNwZWNpZmllZCBieSBQT1NJWC4gIFRoZXkgYXJlIGdudWxpYgorICAgZXh0ZW5zaW9ucy4gICovCisKKyNpZiAwCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBtdWx0aWJ5dGUgY2hhcmFjdGVycyBpbiB0aGUgY2hhcmFjdGVyIHN0cmluZyBTVFJJTkcuCisgICBUaGlzIGNvbnNpZGVycyBtdWx0aWJ5dGUgY2hhcmFjdGVycywgdW5saWtlIHN0cmxlbiwgd2hpY2ggY291bnRzIGJ5dGVzLiAgKi8KKyMgaWZkZWYgX19NaXJCU0RfXyAgLyogTWlyQlNEIGRlZmluZXMgbWJzbGVuIGFzIGEgbWFjcm8uICBPdmVycmlkZSBpdC4gICovCisjICB1bmRlZiBtYnNsZW4KKyMgZW5kaWYKKyMgaWYgMCAgLyogQUlYLCBPU0YvMSwgTWlyQlNEIGRlZmluZSBtYnNsZW4gYWxyZWFkeSBpbiBsaWJjLiAgKi8KKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIG1ic2xlbiBycGxfbWJzbGVuCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobWJzbGVuLCBzaXplX3QsIChjb25zdCBjaGFyICpzdHJpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKG1ic2xlbiwgc2l6ZV90LCAoY29uc3QgY2hhciAqc3RyaW5nKSk7CisjIGVsc2UKK19HTF9GVU5DREVDTF9TWVMgKG1ic2xlbiwgc2l6ZV90LCAoY29uc3QgY2hhciAqc3RyaW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfU1lTIChtYnNsZW4sIHNpemVfdCwgKGNvbnN0IGNoYXIgKnN0cmluZykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobWJzbGVuKTsKKyNlbmRpZgorCisjaWYgMAorLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgbXVsdGlieXRlIGNoYXJhY3RlcnMgaW4gdGhlIGNoYXJhY3RlciBzdHJpbmcgc3RhcnRpbmcKKyAgIGF0IFNUUklORyBhbmQgZW5kaW5nIGF0IFNUUklORyArIExFTi4gICovCitfR0xfRVhURVJOX0Mgc2l6ZV90IG1ic25sZW4gKGNvbnN0IGNoYXIgKnN0cmluZywgc2l6ZV90IGxlbikKKyAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKTsKKyNlbmRpZgorCisjaWYgMQorLyogTG9jYXRlIHRoZSBmaXJzdCBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXIgQyBpbiB0aGUgY2hhcmFjdGVyIHN0cmluZyBTVFJJTkcsCisgICBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byBpdC4gIFJldHVybiBOVUxMIGlmIEMgaXMgbm90IGZvdW5kIGluIFNUUklORy4KKyAgIFVubGlrZSBzdHJjaHIoKSwgdGhpcyBmdW5jdGlvbiB3b3JrcyBjb3JyZWN0bHkgaW4gbXVsdGlieXRlIGxvY2FsZXMgd2l0aAorICAgZW5jb2RpbmdzIHN1Y2ggYXMgR0IxODAzMC4gICovCisjIGlmIGRlZmluZWQgX19ocHV4CisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBtYnNjaHIgcnBsX21ic2NociAvKiBhdm9pZCBjb2xsaXNpb24gd2l0aCBIUC1VWCBmdW5jdGlvbiAqLworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG1ic2NociwgY2hhciAqLCAoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAobWJzY2hyLCBjaGFyICosIChjb25zdCBjaGFyICpzdHJpbmcsIGludCBjKSk7CisjIGVsc2UKK19HTF9GVU5DREVDTF9TWVMgKG1ic2NociwgY2hhciAqLCAoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1NZUyAobWJzY2hyLCBjaGFyICosIChjb25zdCBjaGFyICpzdHJpbmcsIGludCBjKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChtYnNjaHIpOworI2VuZGlmCisKKyNpZiAxCisvKiBMb2NhdGUgdGhlIGxhc3Qgc2luZ2xlLWJ5dGUgY2hhcmFjdGVyIEMgaW4gdGhlIGNoYXJhY3RlciBzdHJpbmcgU1RSSU5HLAorICAgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gaXQuICBSZXR1cm4gTlVMTCBpZiBDIGlzIG5vdCBmb3VuZCBpbiBTVFJJTkcuCisgICBVbmxpa2Ugc3RycmNocigpLCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGNvcnJlY3RseSBpbiBtdWx0aWJ5dGUgbG9jYWxlcyB3aXRoCisgICBlbmNvZGluZ3Mgc3VjaCBhcyBHQjE4MDMwLiAgKi8KKyMgaWYgZGVmaW5lZCBfX2hwdXggfHwgZGVmaW5lZCBfX0lOVEVSSVgKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIG1ic3JjaHIgcnBsX21ic3JjaHIgLyogYXZvaWQgY29sbGlzaW9uIHdpdGggc3lzdGVtIGZ1bmN0aW9uICovCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobWJzcmNociwgY2hhciAqLCAoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChtYnNyY2hyLCBjaGFyICosIChjb25zdCBjaGFyICpzdHJpbmcsIGludCBjKSk7CisjIGVsc2UKK19HTF9GVU5DREVDTF9TWVMgKG1ic3JjaHIsIGNoYXIgKiwgKGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1NZUyAobWJzcmNociwgY2hhciAqLCAoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgYykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobWJzcmNocik7CisjZW5kaWYKKworI2lmIDAKKy8qIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGNoYXJhY3RlciBzdHJpbmcgTkVFRExFIGluIHRoZSBjaGFyYWN0ZXIKKyAgIHN0cmluZyBIQVlTVEFDSy4gIFJldHVybiBOVUxMIGlmIE5FRURMRSBpcyBub3QgZm91bmQgaW4gSEFZU1RBQ0suCisgICBVbmxpa2Ugc3Ryc3RyKCksIHRoaXMgZnVuY3Rpb24gd29ya3MgY29ycmVjdGx5IGluIG11bHRpYnl0ZSBsb2NhbGVzIHdpdGgKKyAgIGVuY29kaW5ncyBkaWZmZXJlbnQgZnJvbSBVVEYtOC4gICovCitfR0xfRVhURVJOX0MgY2hhciAqIG1ic3N0ciAoY29uc3QgY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSkKKyAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKTsKKyNlbmRpZgorCisjaWYgMAorLyogQ29tcGFyZSB0aGUgY2hhcmFjdGVyIHN0cmluZ3MgUzEgYW5kIFMyLCBpZ25vcmluZyBjYXNlLCByZXR1cm5pbmcgbGVzcyB0aGFuLAorICAgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIHplcm8gaWYgUzEgaXMgbGV4aWNvZ3JhcGhpY2FsbHkgbGVzcyB0aGFuLCBlcXVhbCB0bworICAgb3IgZ3JlYXRlciB0aGFuIFMyLgorICAgTm90ZTogVGhpcyBmdW5jdGlvbiBtYXksIGluIG11bHRpYnl0ZSBsb2NhbGVzLCByZXR1cm4gMCBmb3Igc3RyaW5ncyBvZgorICAgZGlmZmVyZW50IGxlbmd0aHMhCisgICBVbmxpa2Ugc3RyY2FzZWNtcCgpLCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGNvcnJlY3RseSBpbiBtdWx0aWJ5dGUgbG9jYWxlcy4gICovCitfR0xfRVhURVJOX0MgaW50IG1ic2Nhc2VjbXAgKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMikKKyAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKTsKKyNlbmRpZgorCisjaWYgMAorLyogQ29tcGFyZSB0aGUgaW5pdGlhbCBzZWdtZW50IG9mIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIFMxIGNvbnNpc3Rpbmcgb2YgYXQgbW9zdAorICAgTiBjaGFyYWN0ZXJzIHdpdGggdGhlIGluaXRpYWwgc2VnbWVudCBvZiB0aGUgY2hhcmFjdGVyIHN0cmluZyBTMiBjb25zaXN0aW5nCisgICBvZiBhdCBtb3N0IE4gY2hhcmFjdGVycywgaWdub3JpbmcgY2FzZSwgcmV0dXJuaW5nIGxlc3MgdGhhbiwgZXF1YWwgdG8gb3IKKyAgIGdyZWF0ZXIgdGhhbiB6ZXJvIGlmIHRoZSBpbml0aWFsIHNlZ21lbnQgb2YgUzEgaXMgbGV4aWNvZ3JhcGhpY2FsbHkgbGVzcworICAgdGhhbiwgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIHRoZSBpbml0aWFsIHNlZ21lbnQgb2YgUzIuCisgICBOb3RlOiBUaGlzIGZ1bmN0aW9uIG1heSwgaW4gbXVsdGlieXRlIGxvY2FsZXMsIHJldHVybiAwIGZvciBpbml0aWFsIHNlZ21lbnRzCisgICBvZiBkaWZmZXJlbnQgbGVuZ3RocyEKKyAgIFVubGlrZSBzdHJuY2FzZWNtcCgpLCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGNvcnJlY3RseSBpbiBtdWx0aWJ5dGUgbG9jYWxlcy4KKyAgIEJ1dCBiZXdhcmUgdGhhdCBOIGlzIG5vdCBhIGJ5dGUgY291bnQgYnV0IGEgY2hhcmFjdGVyIGNvdW50ISAgKi8KK19HTF9FWFRFUk5fQyBpbnQgbWJzbmNhc2VjbXAgKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IG4pCisgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSk7CisjZW5kaWYKKworI2lmIDAKKy8qIENvbXBhcmUgdGhlIGluaXRpYWwgc2VnbWVudCBvZiB0aGUgY2hhcmFjdGVyIHN0cmluZyBTVFJJTkcgY29uc2lzdGluZyBvZgorICAgYXQgbW9zdCBtYnNsZW4gKFBSRUZJWCkgY2hhcmFjdGVycyB3aXRoIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIFBSRUZJWCwKKyAgIGlnbm9yaW5nIGNhc2UuICBJZiB0aGUgdHdvIG1hdGNoLCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBieXRlCisgICBhZnRlciB0aGlzIHByZWZpeCBpbiBTVFJJTkcuICBPdGhlcndpc2UsIHJldHVybiBOVUxMLgorICAgTm90ZTogVGhpcyBmdW5jdGlvbiBtYXksIGluIG11bHRpYnl0ZSBsb2NhbGVzLCByZXR1cm4gbm9uLU5VTEwgaWYgU1RSSU5HCisgICBpcyBvZiBzbWFsbGVyIGxlbmd0aCB0aGFuIFBSRUZJWCEKKyAgIFVubGlrZSBzdHJuY2FzZWNtcCgpLCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGNvcnJlY3RseSBpbiBtdWx0aWJ5dGUKKyAgIGxvY2FsZXMuICAqLworX0dMX0VYVEVSTl9DIGNoYXIgKiBtYnNwY2FzZWNtcCAoY29uc3QgY2hhciAqc3RyaW5nLCBjb25zdCBjaGFyICpwcmVmaXgpCisgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSk7CisjZW5kaWYKKworI2lmIDAKKy8qIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGNoYXJhY3RlciBzdHJpbmcgTkVFRExFIGluIHRoZSBjaGFyYWN0ZXIKKyAgIHN0cmluZyBIQVlTVEFDSywgdXNpbmcgY2FzZS1pbnNlbnNpdGl2ZSBjb21wYXJpc29uLgorICAgTm90ZTogVGhpcyBmdW5jdGlvbiBtYXksIGluIG11bHRpYnl0ZSBsb2NhbGVzLCByZXR1cm4gc3VjY2VzcyBldmVuIGlmCisgICBzdHJsZW4gKGhheXN0YWNrKSA8IHN0cmxlbiAobmVlZGxlKSAhCisgICBVbmxpa2Ugc3RyY2FzZXN0cigpLCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGNvcnJlY3RseSBpbiBtdWx0aWJ5dGUgbG9jYWxlcy4gICovCitfR0xfRVhURVJOX0MgY2hhciAqIG1ic2Nhc2VzdHIgKGNvbnN0IGNoYXIgKmhheXN0YWNrLCBjb25zdCBjaGFyICpuZWVkbGUpCisgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSk7CisjZW5kaWYKKworI2lmIDAKKy8qIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2UgaW4gdGhlIGNoYXJhY3RlciBzdHJpbmcgU1RSSU5HIG9mIGFueSBjaGFyYWN0ZXIKKyAgIGluIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIEFDQ0VQVC4gIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlCisgICBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZyB0byB0aGlzIG9jY3VycmVuY2UsIG9yIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmluZworICAgaWYgbm9uZSBleGlzdHMuCisgICBVbmxpa2Ugc3RyY3NwbigpLCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGNvcnJlY3RseSBpbiBtdWx0aWJ5dGUgbG9jYWxlcy4gICovCitfR0xfRVhURVJOX0Mgc2l6ZV90IG1ic2NzcG4gKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqYWNjZXB0KQorICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpOworI2VuZGlmCisKKyNpZiAwCisvKiBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIGluIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIFNUUklORyBvZiBhbnkgY2hhcmFjdGVyCisgICBpbiB0aGUgY2hhcmFjdGVyIHN0cmluZyBBQ0NFUFQuICBSZXR1cm4gdGhlIHBvaW50ZXIgdG8gaXQsIG9yIE5VTEwgaWYgbm9uZQorICAgZXhpc3RzLgorICAgVW5saWtlIHN0cnBicmsoKSwgdGhpcyBmdW5jdGlvbiB3b3JrcyBjb3JyZWN0bHkgaW4gbXVsdGlieXRlIGxvY2FsZXMuICAqLworIyBpZiBkZWZpbmVkIF9faHB1eAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgbWJzcGJyayBycGxfbWJzcGJyayAvKiBhdm9pZCBjb2xsaXNpb24gd2l0aCBIUC1VWCBmdW5jdGlvbiAqLworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG1ic3BicmssIGNoYXIgKiwgKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqYWNjZXB0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKG1ic3BicmssIGNoYXIgKiwgKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqYWNjZXB0KSk7CisjIGVsc2UKK19HTF9GVU5DREVDTF9TWVMgKG1ic3BicmssIGNoYXIgKiwgKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqYWNjZXB0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19TWVMgKG1ic3BicmssIGNoYXIgKiwgKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqYWNjZXB0KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChtYnNwYnJrKTsKKyNlbmRpZgorCisjaWYgMAorLyogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBpbiB0aGUgY2hhcmFjdGVyIHN0cmluZyBTVFJJTkcgb2YgYW55IGNoYXJhY3RlcgorICAgbm90IGluIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIFJFSkVDVC4gIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlCisgICBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZyB0byB0aGlzIG9jY3VycmVuY2UsIG9yIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmluZworICAgaWYgbm9uZSBleGlzdHMuCisgICBVbmxpa2Ugc3Ryc3BuKCksIHRoaXMgZnVuY3Rpb24gd29ya3MgY29ycmVjdGx5IGluIG11bHRpYnl0ZSBsb2NhbGVzLiAgKi8KK19HTF9FWFRFUk5fQyBzaXplX3QgbWJzc3BuIChjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKnJlamVjdCkKKyAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKTsKKyNlbmRpZgorCisjaWYgMAorLyogU2VhcmNoIHRoZSBuZXh0IGRlbGltaXRlciAobXVsdGlieXRlIGNoYXJhY3RlciBsaXN0ZWQgaW4gdGhlIGNoYXJhY3RlcgorICAgc3RyaW5nIERFTElNKSBzdGFydGluZyBhdCB0aGUgY2hhcmFjdGVyIHN0cmluZyAqU1RSSU5HUC4KKyAgIElmIG9uZSBpcyBmb3VuZCwgb3ZlcndyaXRlIGl0IHdpdGggYSBOVUwsIGFuZCBhZHZhbmNlICpTVFJJTkdQIHRvIHBvaW50CisgICB0byB0aGUgbmV4dCBtdWx0aWJ5dGUgY2hhcmFjdGVyIGFmdGVyIGl0LiAgT3RoZXJ3aXNlLCBzZXQgKlNUUklOR1AgdG8gTlVMTC4KKyAgIElmICpTVFJJTkdQIHdhcyBhbHJlYWR5IE5VTEwsIG5vdGhpbmcgaGFwcGVucy4KKyAgIFJldHVybiB0aGUgb2xkIHZhbHVlIG9mICpTVFJJTkdQLgorCisgICBUaGlzIGlzIGEgdmFyaWFudCBvZiBtYnN0b2tfcigpIHRoYXQgc3VwcG9ydHMgZW1wdHkgZmllbGRzLgorCisgICBDYXZlYXQ6IEl0IG1vZGlmaWVzIHRoZSBvcmlnaW5hbCBzdHJpbmcuCisgICBDYXZlYXQ6IFRoZXNlIGZ1bmN0aW9ucyBjYW5ub3QgYmUgdXNlZCBvbiBjb25zdGFudCBzdHJpbmdzLgorICAgQ2F2ZWF0OiBUaGUgaWRlbnRpdHkgb2YgdGhlIGRlbGltaXRpbmcgY2hhcmFjdGVyIGlzIGxvc3QuCisKKyAgIFNlZSBhbHNvIG1ic3Rva19yKCkuICAqLworX0dMX0VYVEVSTl9DIGNoYXIgKiBtYnNzZXAgKGNoYXIgKipzdHJpbmdwLCBjb25zdCBjaGFyICpkZWxpbSkKKyAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpOworI2VuZGlmCisKKyNpZiAwCisvKiBQYXJzZSB0aGUgY2hhcmFjdGVyIHN0cmluZyBTVFJJTkcgaW50byB0b2tlbnMgc2VwYXJhdGVkIGJ5IGNoYXJhY3RlcnMgaW4KKyAgIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIERFTElNLgorICAgSWYgU1RSSU5HIGlzIE5VTEwsIHRoZSBzYXZlZCBwb2ludGVyIGluIFNBVkVfUFRSIGlzIHVzZWQgYXMKKyAgIHRoZSBuZXh0IHN0YXJ0aW5nIHBvaW50LiAgRm9yIGV4YW1wbGU6CisgICAgICAgIGNoYXIgc1tdID0gIi1hYmMtPS1kZWYiOworICAgICAgICBjaGFyICpzcDsKKyAgICAgICAgeCA9IG1ic3Rva19yKHMsICItIiwgJnNwKTsgICAgICAvLyB4ID0gImFiYyIsIHNwID0gIj0tZGVmIgorICAgICAgICB4ID0gbWJzdG9rX3IoTlVMTCwgIi09IiwgJnNwKTsgIC8vIHggPSAiZGVmIiwgc3AgPSBOVUxMCisgICAgICAgIHggPSBtYnN0b2tfcihOVUxMLCAiPSIsICZzcCk7ICAgLy8geCA9IE5VTEwKKyAgICAgICAgICAgICAgICAvLyBzID0gImFiY1wwLWRlZlwwIgorCisgICBDYXZlYXQ6IEl0IG1vZGlmaWVzIHRoZSBvcmlnaW5hbCBzdHJpbmcuCisgICBDYXZlYXQ6IFRoZXNlIGZ1bmN0aW9ucyBjYW5ub3QgYmUgdXNlZCBvbiBjb25zdGFudCBzdHJpbmdzLgorICAgQ2F2ZWF0OiBUaGUgaWRlbnRpdHkgb2YgdGhlIGRlbGltaXRpbmcgY2hhcmFjdGVyIGlzIGxvc3QuCisKKyAgIFNlZSBhbHNvIG1ic3NlcCgpLiAgKi8KK19HTF9FWFRFUk5fQyBjaGFyICogbWJzdG9rX3IgKGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqZGVsaW0sIGNoYXIgKipzYXZlX3B0cikKKyAgICAgX0dMX0FSR19OT05OVUxMICgoMiwgMykpOworI2VuZGlmCisKKy8qIE1hcCBhbnkgaW50LCB0eXBpY2FsbHkgZnJvbSBlcnJubywgaW50byBhbiBlcnJvciBtZXNzYWdlLiAgKi8KKyNpZiAxCisjIGlmIDEKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgc3RyZXJyb3IKKyMgICBkZWZpbmUgc3RyZXJyb3IgcnBsX3N0cmVycm9yCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc3RyZXJyb3IsIGNoYXIgKiwgKGludCkpOworX0dMX0NYWEFMSUFTX1JQTCAoc3RyZXJyb3IsIGNoYXIgKiwgKGludCkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChzdHJlcnJvciwgY2hhciAqLCAoaW50KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzdHJlcnJvcik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHN0cmVycm9yCisvKiBBc3N1bWUgc3RyZXJyb3IgaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAoc3RyZXJyb3IsICJzdHJlcnJvciBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RyZXJyb3IgdG8gZ3VhcmFudGVlIG5vbi1OVUxMIHJlc3VsdCIpOworI2VuZGlmCisKKy8qIE1hcCBhbnkgaW50LCB0eXBpY2FsbHkgZnJvbSBlcnJubywgaW50byBhbiBlcnJvciBtZXNzYWdlLiAgTXVsdGl0aHJlYWQtc2FmZS4KKyAgIFVzZXMgdGhlIFBPU0lYIGRlY2xhcmF0aW9uLCBub3QgdGhlIGdsaWJjIGRlY2xhcmF0aW9uLiAgKi8KKyNpZiAxCisjIGlmIDEKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgc3RyZXJyb3JfcgorIyAgIGRlZmluZSBzdHJlcnJvcl9yIHJwbF9zdHJlcnJvcl9yCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc3RyZXJyb3JfciwgaW50LCAoaW50IGVycm51bSwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoc3RyZXJyb3JfciwgaW50LCAoaW50IGVycm51bSwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChzdHJlcnJvcl9yLCBpbnQsIChpbnQgZXJybnVtLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc3RyZXJyb3JfciwgaW50LCAoaW50IGVycm51bSwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKSk7CisjIGVuZGlmCisjIGlmIDEKK19HTF9DWFhBTElBU1dBUk4gKHN0cmVycm9yX3IpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJlcnJvcl9yCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RSRVJST1JfUgorX0dMX1dBUk5fT05fVVNFIChzdHJlcnJvcl9yLCAic3RyZXJyb3JfciBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RyZXJyb3Jfci1wb3NpeCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBzdHJzaWduYWwgcnBsX3N0cnNpZ25hbAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHN0cnNpZ25hbCwgY2hhciAqLCAoaW50IF9fc2lnKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzdHJzaWduYWwsIGNoYXIgKiwgKGludCBfX3NpZykpOworIyBlbHNlCisjICBpZiAhIDEKK19HTF9GVU5DREVDTF9TWVMgKHN0cnNpZ25hbCwgY2hhciAqLCAoaW50IF9fc2lnKSk7CisjICBlbmRpZgorLyogTmVlZCB0byBjYXN0LCBiZWNhdXNlIG9uIEN5Z3dpbiAxLjUueCBzeXN0ZW1zLCB0aGUgcmV0dXJuIHR5cGUgaXMKKyAgICdjb25zdCBjaGFyIConLiAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVCAoc3Ryc2lnbmFsLCBjaGFyICosIChpbnQgX19zaWcpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHN0cnNpZ25hbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHN0cnNpZ25hbAorIyBpZiBIQVZFX1JBV19ERUNMX1NUUlNJR05BTAorX0dMX1dBUk5fT05fVVNFIChzdHJzaWduYWwsICJzdHJzaWduYWwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHN0cnNpZ25hbCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMQorIyBpZiAhMAorX0dMX0ZVTkNERUNMX1NZUyAoc3RydmVyc2NtcCwgaW50LCAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc3RydmVyc2NtcCwgaW50LCAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopKTsKK19HTF9DWFhBTElBU1dBUk4gKHN0cnZlcnNjbXApOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJ2ZXJzY21wCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RSVkVSU0NNUAorX0dMX1dBUk5fT05fVVNFIChzdHJ2ZXJzY21wLCAic3RydmVyc2NtcCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RydmVyc2NtcCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNlbmRpZiAvKiBfR0xfU1RSSU5HX0ggKi8KKyNlbmRpZiAvKiBfR0xfU1RSSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2Rhcndpbi1saWIvc3lzL3N0YXQuaCBiL2Rhcndpbi1saWIvc3lzL3N0YXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGIxNjlhCi0tLSAvZGV2L251bGwKKysrIGIvZGFyd2luLWxpYi9zeXMvc3RhdC5oCkBAIC0wLDAgKzEsMTA0MCBAQAorLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLworLyogUHJvdmlkZSBhIG1vcmUgY29tcGxldGUgc3lzL3N0YXQgaGVhZGVyIGZpbGUuCisgICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBXcml0dGVuIGJ5IEVyaWMgQmxha2UsIFBhdWwgRWdnZXJ0LCBhbmQgSmltIE1leWVyaW5nLiAgKi8KKworLyogVGhpcyBmaWxlIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgb24gcGxhdGZvcm1zIHdoZXJlIDxzeXMvc3RhdC5oPiBpcworICAgaW5jb21wbGV0ZS4gIEl0IGlzIGludGVuZGVkIHRvIHByb3ZpZGUgZGVmaW5pdGlvbnMgYW5kIHByb3RvdHlwZXMKKyAgIG5lZWRlZCBieSBhbiBhcHBsaWNhdGlvbi4gIFN0YXJ0IHdpdGggd2hhdCB0aGUgc3lzdGVtIHByb3ZpZGVzLiAgKi8KKworI2lmIF9fR05VQ19fID49IDMKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkIF9fbmVlZF9zeXN0ZW1fc3lzX3N0YXRfaAorLyogU3BlY2lhbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24uICAqLworCisjaW5jbHVkZV9uZXh0IDxzeXMvc3RhdC5oPgorCisjZWxzZQorLyogTm9ybWFsIGludm9jYXRpb24gY29udmVudGlvbi4gICovCisKKyNpZm5kZWYgX0dMX1NZU19TVEFUX0gKKworLyogR2V0IG5saW5rX3QuCisgICBNYXkgYWxzbyBkZWZpbmUgb2ZmX3QgdG8gYSA2NC1iaXQgdHlwZSBvbiBuYXRpdmUgV2luZG93cy4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKy8qIEdldCBzdHJ1Y3QgdGltZXNwZWMuICAqLworI2luY2x1ZGUgPHRpbWUuaD4KKworLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworI2luY2x1ZGVfbmV4dCA8c3lzL3N0YXQuaD4KKworI2lmbmRlZiBfR0xfU1lTX1NUQVRfSAorI2RlZmluZSBfR0xfU1lTX1NUQVRfSAorCisvKiBUaGUgZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTCBldGMuIGFyZSBjb3BpZWQgaGVyZS4gICovCisjaWZuZGVmIF9HTF9DWFhERUZTX0gKKyNkZWZpbmUgX0dMX0NYWERFRlNfSAorCisvKiBUaGUgdGhyZWUgbW9zdCBmcmVxdWVudCB1c2UgY2FzZXMgb2YgdGhlc2UgbWFjcm9zIGFyZToKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgc3Vic3RpdHV0ZSBmb3IgYSBmdW5jdGlvbiB0aGF0IGlzIG1pc3Npbmcgb24gc29tZQorICAgICBwbGF0Zm9ybXMsIGJ1dCBpcyBkZWNsYXJlZCBhbmQgd29ya3MgZmluZSBvbiB0aGUgcGxhdGZvcm1zIG9uIHdoaWNoCisgICAgIGl0IGV4aXN0czoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmICFASEFWRV9GT09ACisgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIGFsbCBwbGF0Zm9ybXMsCisgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIHBsYXRmb3JtczoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorICAgICAgICMgICB1bmRlZiBmb28KKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworICAgICAgICMgZWxzZQorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIHNvbWUgcGxhdGZvcm1zCisgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIG9mIHRoZW0gYW5kCisgICAgIGlzIGFkZGl0aW9uYWxseSBlaXRoZXIgbWlzc2luZyBvciB1bmRlY2xhcmVkIG9uIHNvbWUgb3RoZXIgcGxhdGZvcm1zOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisgICAgICAgIyAgIHVuZGVmIGZvbworICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CisgICAgICAgIyBlbHNlCisgICAgICAgIyAgaWYgIUBIQVZFX0ZPT0AgICBvciAgIGlmICFASEFWRV9ERUNMX0ZPT0AKKyAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorKi8KKworLyogX0dMX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuICJDIgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4KKyNlbmRpZgorCisvKiBfR0xfRlVOQ0RFQ0xfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGRlY2xhcmVzIGEgcmVwbGFjZW1lbnQgZnVuY3Rpb24sIG5hbWVkIHJwbF9mdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9GVU5DREVDTF9SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICovCisjZGVmaW5lIF9HTF9GVU5DREVDTF9SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0ZVTkNERUNMX1JQTF8xIChycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKQorI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMXzEocnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9FWFRFUk5fQyByZXR0eXBlIHJwbF9mdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKworLyogX0dMX0ZVTkNERUNMX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBkZWNsYXJlcyB0aGUgc3lzdGVtIGZ1bmN0aW9uLCBuYW1lZCBmdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9GVU5DREVDTF9TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICovCisjZGVmaW5lIF9HTF9GVU5DREVDTF9TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0VYVEVSTl9DIHJldHR5cGUgZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisKKy8qIF9HTF9DWFhBTElBU19SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHJwbF9mdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFIGlzIGRlZmluZWQuCisgICBFeGFtcGxlOgorICAgICBfR0xfQ1hYQUxJQVNfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKyAqLworI2RlZmluZSBfR0xfQ1hYQUxJQVNfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycykKKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OnJwbF9mdW5jOyAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gcnBsX2Z1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQKKyAgIGRlY2xhcmF0aW9uLiAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IKKyAgIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpycGxfZnVuYyk7ICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHRoZSBzeXN0ZW0gcHJvdmlkZWQgZnVuY3Rpb24gZnVuYywgaWYgR05VTElCX05BTUVTUEFDRQorICAgaXMgZGVmaW5lZC4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9DWFhBTElBU19TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyAgLyogSWYgd2Ugd2VyZSB0byB3cml0ZQorICAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOworICAgICBsaWtlIGFib3ZlIGluIF9HTF9DWFhBTElBU19SUExfMSwgdGhlIGNvbXBpbGVyIGNvdWxkIG9wdGltaXplIGNhbGxzCisgICAgIGJldHRlciAocmVtb3ZlIGFuIGluZGlyZWN0aW9uIHRocm91Z2ggYSAnc3RhdGljJyBwb2ludGVyIHZhcmlhYmxlKSwKKyAgICAgYnV0IHRoZW4gdGhlIF9HTF9DWFhBTElBU1dBUk4gbWFjcm8gYmVsb3cgd291bGQgY2F1c2UgYSB3YXJuaW5nIG5vdCBvbmx5CisgICAgIGZvciB1c2VzIG9mIDo6ZnVuYyBidXQgYWxzbyBmb3IgdXNlcyBvZiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jLiAgKi8KKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGZ1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgZGVjbGFyYXRpb24uCisgICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvciB0aGF0IHdvdWxkCisgICBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpmdW5jKTsgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMsIHJldHR5cGUyLCBwYXJhbWV0ZXJzMik7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGlzIHBpY2tlZCBhbW9uZyBhIHNldCBvZiBvdmVybG9hZGVkIGZ1bmN0aW9ucywKKyAgIG5hbWVseSB0aGUgb25lIHdpdGggcmV0dHlwZTIgYW5kIHBhcmFtZXRlcnMyLiAgVHdvIGNvbnNlY3V0aXZlIGNhc3RzCisgICBhcmUgdXNlZCB0byBzaWxlbmNlIHRoZSAiY2Fubm90IGZpbmQgYSBtYXRjaCIgYW5kICJpbnZhbGlkIGNvbnZlcnNpb24iCisgICBlcnJvcnMgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisgIC8qIFRoZSBvdXRlciBjYXN0IG11c3QgYmUgYSByZWludGVycHJldF9jYXN0LgorICAgICBUaGUgaW5uZXIgY2FzdDogV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNldCBvZiBvdmVybG9hZGVkCisgICAgIGZ1bmN0aW9ucywgaXQgd29ya3MgYXMgYSBzdGF0aWNfY2FzdDw+LCBjaG9vc2luZyB0aGUgZGVzaWduYXRlZCB2YXJpYW50LgorICAgICBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2luZ2xlIHZhcmlhbnQsIGl0IHdvcmtzIGFzIGEKKyAgICAgcmVpbnRlcnByZXRfY2FzdDw+LiBUaGUgcGFyZW50aGVzaXplZCBjYXN0IHN5bnRheCB3b3JrcyBib3RoIHdheXMuICAqLworIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChyZXR0eXBlMigqKXBhcmFtZXRlcnMyKSg6OmZ1bmMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTV0FSTiAoZnVuYyk7CisgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiA6OmZ1bmMgaXMgdXNlZCBidXQgbm90IHdoZW4KKyAgIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gIGZ1bmMgbXVzdCBiZSBkZWZpbmVkIHdpdGhvdXQgb3ZlcmxvYWRlZAorICAgdmFyaWFudHMuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk5fMSAoZnVuYywgR05VTElCX05BTUVTUEFDRSkKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMShmdW5jLG5hbWVzcGFjZSkgXAorICAgX0dMX0NYWEFMSUFTV0FSTl8yIChmdW5jLCBuYW1lc3BhY2UpCisvKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKyAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworIyBpZiAhX19PUFRJTUlaRV9fCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgX0dMX1dBUk5fT05fVVNFIChmdW5jLCBcCisgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworIyBlbHNlCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNXQVJOMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiB0aGUgZ2l2ZW4gb3ZlcmxvYWRlZCB2YXJpYW50IG9mIDo6ZnVuYworICAgaXMgdXNlZCBidXQgbm90IHdoZW4gR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk4xXzEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdOVUxJQl9OQU1FU1BBQ0UpCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgX0dMX0NYWEFMSUFTV0FSTjFfMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgbmFtZXNwYWNlKQorLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKyMgaWYgIV9fT1BUSU1JWkVfXworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisjZW5kaWYgLyogX0dMX0NYWERFRlNfSCAqLworCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwgaXMgY29waWVkIGhlcmUuICAqLworLyogX0dMX0FSR19OT05OVUxMKChuLC4uLixtKSkgdGVsbHMgdGhlIGNvbXBpbGVyIGFuZCBzdGF0aWMgYW5hbHl6ZXIgdG9vbHMKKyAgIHRoYXQgdGhlIHZhbHVlcyBwYXNzZWQgYXMgYXJndW1lbnRzIG4sIC4uLiwgbSBtdXN0IGJlIG5vbi1OVUxMIHBvaW50ZXJzLgorICAgbiA9IDEgc3RhbmRzIGZvciB0aGUgZmlyc3QgYXJndW1lbnQsIG4gPSAyIGZvciB0aGUgc2Vjb25kIGFyZ3VtZW50IGV0Yy4gICovCisjaWZuZGVmIF9HTF9BUkdfTk9OTlVMTAorIyBpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSB8fCBfX0dOVUNfXyA+IDMKKyMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKSBfX2F0dHJpYnV0ZV9fICgoX19ub25udWxsX18gcGFyYW1zKSkKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpCisjIGVuZGlmCisjZW5kaWYKKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFCisKKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCisvKiBBIGNvbXBpbGVyIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDQuMy4wIGFuZCBsYXRlci4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobWVzc2FnZSkpKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24KKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisjIGVuZGlmCisjZW5kaWYKKworLyogX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuY3Rpb24sIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsICJzdHJpbmciKQorICAgaXMgbGlrZSBfR0xfV0FSTl9PTl9VU0UgKGZ1bmN0aW9uLCAic3RyaW5nIiksIGV4Y2VwdCB0aGF0IHRoZSBmdW5jdGlvbiBpcworICAgZGVjbGFyZWQgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLCBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLAorICAgYW5kIGF0dHJpYnV0ZXMuCisgICBUaGlzIHZhcmlhbnQgaXMgdXNlZnVsIGZvciBvdmVybG9hZGVkIGZ1bmN0aW9ucyBpbiBDKysuIF9HTF9XQVJOX09OX1VTRSBkb2VzCisgICBub3Qgd29yayBpbiB0aGlzIGNhc2UuICAqLworI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0VfQ1hYCisjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyBcCisgICAgIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobXNnKSkpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisvKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBfR0xfV0FSTl9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX0VYVEVSTl9DCisjIGlmIGRlZmluZWQgX19jcGx1c3BsdXMKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4gIkMiCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4KKyMgZW5kaWYKKyNlbmRpZgorCisvKiBCZWZvcmUgZG9pbmcgIiNkZWZpbmUgbWtkaXIgcnBsX21rZGlyIiBiZWxvdywgd2UgbmVlZCB0byBpbmNsdWRlIGFsbAorICAgaGVhZGVycyB0aGF0IG1heSBkZWNsYXJlIG1rZGlyKCkuICBOYXRpdmUgV2luZG93cyBwbGF0Zm9ybXMgZGVjbGFyZSBta2RpcgorICAgaW4gPGlvLmg+IGFuZC9vciA8ZGlyZWN0Lmg+LCBub3QgaW4gPHVuaXN0ZC5oPi4gICovCisjaWYgKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXworIyBpbmNsdWRlIDxpby5oPiAgICAgLyogbWluZ3czMiwgbWluZ3c2NCAqLworIyBpbmNsdWRlIDxkaXJlY3QuaD4gLyogbWluZ3c2NCwgTVNWQyA5ICovCisjZW5kaWYKKworLyogTmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zIGRlY2xhcmUgdW1hc2soKSBpbiA8aW8uaD4uICAqLworI2lmIDAgJiYgKChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgISBkZWZpbmVkIF9fQ1lHV0lOX18pCisjIGluY2x1ZGUgPGlvLmg+CisjZW5kaWYKKworLyogTGFyZ2UgRmlsZSBTdXBwb3J0IG9uIG5hdGl2ZSBXaW5kb3dzLiAgKi8KKyNpZiAwCisjIGRlZmluZSBzdGF0IF9zdGF0aTY0CisjZW5kaWYKKworI2lmbmRlZiBTX0lGSUZPCisjIGlmZGVmIF9TX0lGSUZPCisjICBkZWZpbmUgU19JRklGTyBfU19JRklGTworIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgU19JRk1UCisjIGRlZmluZSBTX0lGTVQgMDE3MDAwMAorI2VuZGlmCisKKyNpZiBTVEFUX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgU19JU0JMSworIyB1bmRlZiBTX0lTQ0hSCisjIHVuZGVmIFNfSVNESVIKKyMgdW5kZWYgU19JU0ZJRk8KKyMgdW5kZWYgU19JU0xOSworIyB1bmRlZiBTX0lTTkFNCisjIHVuZGVmIFNfSVNNUEIKKyMgdW5kZWYgU19JU01QQworIyB1bmRlZiBTX0lTTldLCisjIHVuZGVmIFNfSVNSRUcKKyMgdW5kZWYgU19JU1NPQ0sKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNCTEsKKyMgaWZkZWYgU19JRkJMSworIyAgZGVmaW5lIFNfSVNCTEsobSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZCTEspCisjIGVsc2UKKyMgIGRlZmluZSBTX0lTQkxLKG0pIDAKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNDSFIKKyMgaWZkZWYgU19JRkNIUgorIyAgZGVmaW5lIFNfSVNDSFIobSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZDSFIpCisjIGVsc2UKKyMgIGRlZmluZSBTX0lTQ0hSKG0pIDAKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNESVIKKyMgaWZkZWYgU19JRkRJUgorIyAgZGVmaW5lIFNfSVNESVIobSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZESVIpCisjIGVsc2UKKyMgIGRlZmluZSBTX0lTRElSKG0pIDAKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNET09SIC8qIFNvbGFyaXMgMi41IGFuZCB1cCAqLworIyBkZWZpbmUgU19JU0RPT1IobSkgMAorI2VuZGlmCisKKyNpZm5kZWYgU19JU0ZJRk8KKyMgaWZkZWYgU19JRklGTworIyAgZGVmaW5lIFNfSVNGSUZPKG0pICgoKG0pICYgU19JRk1UKSA9PSBTX0lGSUZPKQorIyBlbHNlCisjICBkZWZpbmUgU19JU0ZJRk8obSkgMAorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgU19JU0xOSworIyBpZmRlZiBTX0lGTE5LCisjICBkZWZpbmUgU19JU0xOSyhtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRkxOSykKKyMgZWxzZQorIyAgZGVmaW5lIFNfSVNMTksobSkgMAorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgU19JU01QQiAvKiBWNyAqLworIyBpZmRlZiBTX0lGTVBCCisjICBkZWZpbmUgU19JU01QQihtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRk1QQikKKyMgIGRlZmluZSBTX0lTTVBDKG0pICgoKG0pICYgU19JRk1UKSA9PSBTX0lGTVBDKQorIyBlbHNlCisjICBkZWZpbmUgU19JU01QQihtKSAwCisjICBkZWZpbmUgU19JU01QQyhtKSAwCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBTX0lTTkFNIC8qIFhlbml4ICovCisjIGlmZGVmIFNfSUZOQU0KKyMgIGRlZmluZSBTX0lTTkFNKG0pICgoKG0pICYgU19JRk1UKSA9PSBTX0lGTkFNKQorIyBlbHNlCisjICBkZWZpbmUgU19JU05BTShtKSAwCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBTX0lTTldLIC8qIEhQL1VYICovCisjIGlmZGVmIFNfSUZOV0sKKyMgIGRlZmluZSBTX0lTTldLKG0pICgoKG0pICYgU19JRk1UKSA9PSBTX0lGTldLKQorIyBlbHNlCisjICBkZWZpbmUgU19JU05XSyhtKSAwCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBTX0lTUE9SVCAvKiBTb2xhcmlzIDEwIGFuZCB1cCAqLworIyBkZWZpbmUgU19JU1BPUlQobSkgMAorI2VuZGlmCisKKyNpZm5kZWYgU19JU1JFRworIyBpZmRlZiBTX0lGUkVHCisjICBkZWZpbmUgU19JU1JFRyhtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRlJFRykKKyMgZWxzZQorIyAgZGVmaW5lIFNfSVNSRUcobSkgMAorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgU19JU1NPQ0sKKyMgaWZkZWYgU19JRlNPQ0sKKyMgIGRlZmluZSBTX0lTU09DSyhtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRlNPQ0spCisjIGVsc2UKKyMgIGRlZmluZSBTX0lTU09DSyhtKSAwCisjIGVuZGlmCisjZW5kaWYKKworCisjaWZuZGVmIFNfVFlQRUlTTVEKKyMgZGVmaW5lIFNfVFlQRUlTTVEocCkgMAorI2VuZGlmCisKKyNpZm5kZWYgU19UWVBFSVNUTU8KKyMgZGVmaW5lIFNfVFlQRUlTVE1PKHApIDAKKyNlbmRpZgorCisKKyNpZm5kZWYgU19UWVBFSVNTRU0KKyMgaWZkZWYgU19JTlNFTQorIyAgZGVmaW5lIFNfVFlQRUlTU0VNKHApIChTX0lTTkFNICgocCktPnN0X21vZGUpICYmIChwKS0+c3RfcmRldiA9PSBTX0lOU0VNKQorIyBlbHNlCisjICBkZWZpbmUgU19UWVBFSVNTRU0ocCkgMAorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgU19UWVBFSVNTSE0KKyMgaWZkZWYgU19JTlNIRAorIyAgZGVmaW5lIFNfVFlQRUlTU0hNKHApIChTX0lTTkFNICgocCktPnN0X21vZGUpICYmIChwKS0+c3RfcmRldiA9PSBTX0lOU0hEKQorIyBlbHNlCisjICBkZWZpbmUgU19UWVBFSVNTSE0ocCkgMAorIyBlbmRpZgorI2VuZGlmCisKKy8qIGhpZ2ggcGVyZm9ybWFuY2UgKCJjb250aWd1b3VzIGRhdGEiKSAqLworI2lmbmRlZiBTX0lTQ1RHCisjIGRlZmluZSBTX0lTQ1RHKHApIDAKKyNlbmRpZgorCisvKiBDcmF5IERNRiAoZGF0YSBtaWdyYXRpb24gZmFjaWxpdHkpOiBvZmYgbGluZSwgd2l0aCBkYXRhICAqLworI2lmbmRlZiBTX0lTT0ZECisjIGRlZmluZSBTX0lTT0ZEKHApIDAKKyNlbmRpZgorCisvKiBDcmF5IERNRiAoZGF0YSBtaWdyYXRpb24gZmFjaWxpdHkpOiBvZmYgbGluZSwgd2l0aCBubyBkYXRhICAqLworI2lmbmRlZiBTX0lTT0ZMCisjIGRlZmluZSBTX0lTT0ZMKHApIDAKKyNlbmRpZgorCisvKiA0LjRCU0Qgd2hpdGVvdXQgKi8KKyNpZm5kZWYgU19JU1dIVAorIyBkZWZpbmUgU19JU1dIVChtKSAwCisjZW5kaWYKKworLyogSWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgYXJlIHVuZGVmaW5lZCwKKyAgIGRlZmluZSB0aGVtIHRvIHRoZWlyIGRlIGZhY3RvIHN0YW5kYXJkIHZhbHVlcy4gICovCisjaWYgIVNfSVNVSUQKKyMgZGVmaW5lIFNfSVNVSUQgMDQwMDAKKyNlbmRpZgorI2lmICFTX0lTR0lECisjIGRlZmluZSBTX0lTR0lEIDAyMDAwCisjZW5kaWYKKworLyogU19JU1ZUWCBpcyBhIGNvbW1vbiBleHRlbnNpb24gdG8gUE9TSVguICAqLworI2lmbmRlZiBTX0lTVlRYCisjIGRlZmluZSBTX0lTVlRYIDAxMDAwCisjZW5kaWYKKworI2lmICFTX0lSVVNSICYmIFNfSVJFQUQKKyMgZGVmaW5lIFNfSVJVU1IgU19JUkVBRAorI2VuZGlmCisjaWYgIVNfSVJVU1IKKyMgZGVmaW5lIFNfSVJVU1IgMDA0MDAKKyNlbmRpZgorI2lmICFTX0lSR1JQCisjIGRlZmluZSBTX0lSR1JQIChTX0lSVVNSID4+IDMpCisjZW5kaWYKKyNpZiAhU19JUk9USAorIyBkZWZpbmUgU19JUk9USCAoU19JUlVTUiA+PiA2KQorI2VuZGlmCisKKyNpZiAhU19JV1VTUiAmJiBTX0lXUklURQorIyBkZWZpbmUgU19JV1VTUiBTX0lXUklURQorI2VuZGlmCisjaWYgIVNfSVdVU1IKKyMgZGVmaW5lIFNfSVdVU1IgMDAyMDAKKyNlbmRpZgorI2lmICFTX0lXR1JQCisjIGRlZmluZSBTX0lXR1JQIChTX0lXVVNSID4+IDMpCisjZW5kaWYKKyNpZiAhU19JV09USAorIyBkZWZpbmUgU19JV09USCAoU19JV1VTUiA+PiA2KQorI2VuZGlmCisKKyNpZiAhU19JWFVTUiAmJiBTX0lFWEVDCisjIGRlZmluZSBTX0lYVVNSIFNfSUVYRUMKKyNlbmRpZgorI2lmICFTX0lYVVNSCisjIGRlZmluZSBTX0lYVVNSIDAwMTAwCisjZW5kaWYKKyNpZiAhU19JWEdSUAorIyBkZWZpbmUgU19JWEdSUCAoU19JWFVTUiA+PiAzKQorI2VuZGlmCisjaWYgIVNfSVhPVEgKKyMgZGVmaW5lIFNfSVhPVEggKFNfSVhVU1IgPj4gNikKKyNlbmRpZgorCisjaWYgIVNfSVJXWFUKKyMgZGVmaW5lIFNfSVJXWFUgKFNfSVJVU1IgfCBTX0lXVVNSIHwgU19JWFVTUikKKyNlbmRpZgorI2lmICFTX0lSV1hHCisjIGRlZmluZSBTX0lSV1hHIChTX0lSR1JQIHwgU19JV0dSUCB8IFNfSVhHUlApCisjZW5kaWYKKyNpZiAhU19JUldYTworIyBkZWZpbmUgU19JUldYTyAoU19JUk9USCB8IFNfSVdPVEggfCBTX0lYT1RIKQorI2VuZGlmCisKKy8qIFNfSVhVR08gaXMgYSBjb21tb24gZXh0ZW5zaW9uIHRvIFBPU0lYLiAgKi8KKyNpZiAhU19JWFVHTworIyBkZWZpbmUgU19JWFVHTyAoU19JWFVTUiB8IFNfSVhHUlAgfCBTX0lYT1RIKQorI2VuZGlmCisKKyNpZm5kZWYgU19JUldYVUdPCisjIGRlZmluZSBTX0lSV1hVR08gKFNfSVJXWFUgfCBTX0lSV1hHIHwgU19JUldYTykKKyNlbmRpZgorCisvKiBNYWNyb3MgZm9yIGZ1dGltZW5zIGFuZCB1dGltZW5zYXQuICAqLworI2lmbmRlZiBVVElNRV9OT1cKKyMgZGVmaW5lIFVUSU1FX05PVyAoLTEpCisjIGRlZmluZSBVVElNRV9PTUlUICgtMikKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChmY2htb2RhdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgbW9kZV90IG1vZGUsIGludCBmbGFnKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZjaG1vZGF0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlLCBtb2RlX3QgbW9kZSwgaW50IGZsYWcpKTsKK19HTF9DWFhBTElBU1dBUk4gKGZjaG1vZGF0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZmNobW9kYXQKKyMgaWYgSEFWRV9SQVdfREVDTF9GQ0hNT0RBVAorX0dMX1dBUk5fT05fVVNFIChmY2htb2RhdCwgImZjaG1vZGF0IGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG9wZW5hdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAxCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZnN0YXQKKyMgICBkZWZpbmUgZnN0YXQgcnBsX2ZzdGF0CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZnN0YXQsIGludCwgKGludCBmZCwgc3RydWN0IHN0YXQgKmJ1ZikgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKGZzdGF0LCBpbnQsIChpbnQgZmQsIHN0cnVjdCBzdGF0ICpidWYpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoZnN0YXQsIGludCwgKGludCBmZCwgc3RydWN0IHN0YXQgKmJ1ZikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZnN0YXQpOworI2VsaWYgMAorLyogQWJvdmUsIHdlIGRlZmluZSBzdGF0IHRvIF9zdGF0aTY0LiAgKi8KKyMgZGVmaW5lIGZzdGF0IF9mc3RhdGk2NAorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmc3RhdAorIyBpZiBIQVZFX1JBV19ERUNMX0ZTVEFUCitfR0xfV0FSTl9PTl9VU0UgKGZzdGF0LCAiZnN0YXQgaGFzIHBvcnRhYmlsaXR5IHByb2JsZW1zIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZnN0YXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZzdGF0YXQKKyMgICBkZWZpbmUgZnN0YXRhdCBycGxfZnN0YXRhdAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZzdGF0YXQsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQsIGNoYXIgY29uc3QgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCwgaW50IGZsYWdzKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMiwgMykpKTsKK19HTF9DWFhBTElBU19SUEwgKGZzdGF0YXQsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQsIGNoYXIgY29uc3QgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCwgaW50IGZsYWdzKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChmc3RhdGF0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCBjaGFyIGNvbnN0ICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QsIGludCBmbGFncykKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIsIDMpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZnN0YXRhdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgY2hhciBjb25zdCAqbmFtZSwgc3RydWN0IHN0YXQgKnN0LCBpbnQgZmxhZ3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZzdGF0YXQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmc3RhdGF0CisjIGlmIEhBVkVfUkFXX0RFQ0xfRlNUQVRBVAorX0dMX1dBUk5fT05fVVNFIChmc3RhdGF0LCAiZnN0YXRhdCBpcyBub3QgcG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBvcGVuYXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorLyogVXNlIHRoZSBycGxfIHByZWZpeCBhbHNvIG9uIFNvbGFyaXMgPD0gOSwgYmVjYXVzZSBvbiBTb2xhcmlzIDkgb3VyIGZ1dGltZW5zCisgICBpbXBsZW1lbnRhdGlvbiByZWxpZXMgb24gZnV0aW1lc2F0LCB3aGljaCBvbiBTb2xhcmlzIDEwIG1ha2VzIGFuIGludm9jYXRpb24KKyAgIHRvIGZ1dGltZW5zIHRoYXQgaXMgbWVhbnQgdG8gaW52b2tlIHRoZSBsaWJjJ3MgZnV0aW1lbnMoKSwgbm90IGdudWxpYidzCisgICBmdXRpbWVucygpLiAgKi8KKyMgaWYgMCB8fCAoITEgJiYgZGVmaW5lZCBfX3N1bikKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZnV0aW1lbnMKKyMgICBkZWZpbmUgZnV0aW1lbnMgcnBsX2Z1dGltZW5zCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZnV0aW1lbnMsIGludCwgKGludCBmZCwgc3RydWN0IHRpbWVzcGVjIGNvbnN0IHRpbWVzWzJdKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmdXRpbWVucywgaW50LCAoaW50IGZkLCBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgdGltZXNbMl0pKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGZ1dGltZW5zLCBpbnQsIChpbnQgZmQsIHN0cnVjdCB0aW1lc3BlYyBjb25zdCB0aW1lc1syXSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZ1dGltZW5zLCBpbnQsIChpbnQgZmQsIHN0cnVjdCB0aW1lc3BlYyBjb25zdCB0aW1lc1syXSkpOworIyBlbmRpZgorIyBpZiAxCitfR0xfQ1hYQUxJQVNXQVJOIChmdXRpbWVucyk7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZ1dGltZW5zCisjIGlmIEhBVkVfUkFXX0RFQ0xfRlVUSU1FTlMKK19HTF9XQVJOX09OX1VTRSAoZnV0aW1lbnMsICJmdXRpbWVucyBpcyBub3QgcG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmdXRpbWVucyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisvKiBDaGFuZ2UgdGhlIG1vZGUgb2YgRklMRU5BTUUgdG8gTU9ERSwgd2l0aG91dCBkZXJlZmVyZW5jaW5nIGl0IGlmIEZJTEVOQU1FCisgICBkZW5vdGVzIGEgc3ltYm9saWMgbGluay4gICovCisjIGlmICExCisvKiBUaGUgbGNobW9kIHJlcGxhY2VtZW50IGZvbGxvd3Mgc3ltYm9saWMgbGlua3MuICBDYWxsZXJzIHNob3VsZCB0YWtlCisgICB0aGlzIGludG8gYWNjb3VudDsgbGNobW9kIHNob3VsZCBiZSBhcHBsaWVkIG9ubHkgdG8gYXJndW1lbnRzIHRoYXQKKyAgIGFyZSBrbm93biB0byBub3QgYmUgc3ltYm9saWMgbGlua3MuICBPbiBob3N0cyB0aGF0IGxhY2sgbGNobW9kLAorICAgdGhpcyBjYW4gbGVhZCB0byByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiB0aGUgY2hlY2sgYW5kIHRoZQorICAgaW52b2NhdGlvbiBvZiBsY2htb2QsIGJ1dCB3ZSBrbm93IG9mIG5vIHdvcmthcm91bmRzIHRoYXQgYXJlCisgICByZWxpYWJsZSBpbiBnZW5lcmFsLiAgWW91IG1pZ2h0IHRyeSByZXF1ZXN0aW5nIHN1cHBvcnQgZm9yIGxjaG1vZAorICAgZnJvbSB5b3VyIG9wZXJhdGluZyBzeXN0ZW0gc3VwcGxpZXIuICAqLworIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgbGNobW9kIGNobW9kCisjICBlbmRpZgorLyogTmVlZCB0byBjYXN0LCBiZWNhdXNlIG9uIG1pbmd3LCB0aGUgc2Vjb25kIHBhcmFtZXRlciBvZiBjaG1vZCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUuICAqLworX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEgKGxjaG1vZCwgY2htb2QsIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqZmlsZW5hbWUsIG1vZGVfdCBtb2RlKSk7CisjIGVsc2UKKyMgIGlmIDAgLyogYXNzdW1lIGFscmVhZHkgZGVjbGFyZWQgKi8KK19HTF9GVU5DREVDTF9TWVMgKGxjaG1vZCwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIG1vZGVfdCBtb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobGNobW9kLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgbW9kZV90IG1vZGUpKTsKKyMgZW5kaWYKKyMgaWYgMQorX0dMX0NYWEFMSUFTV0FSTiAobGNobW9kKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbGNobW9kCisjIGlmIEhBVkVfUkFXX0RFQ0xfTENITU9ECitfR0xfV0FSTl9PTl9VU0UgKGxjaG1vZCwgImxjaG1vZCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbGNobW9kIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgISAxCisvKiBtaW5ndyBkb2VzIG5vdCBzdXBwb3J0IHN5bWxpbmtzLCB0aGVyZWZvcmUgaXQgZG9lcyBub3QgaGF2ZSBsc3RhdC4gIEJ1dAorICAgd2l0aG91dCBsaW5rcywgc3RhdCBkb2VzIGp1c3QgZmluZS4gICovCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBsc3RhdCBzdGF0CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1JQTF8xIChsc3RhdCwgc3RhdCwgaW50LCAoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKmJ1ZikpOworIyBlbGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbHN0YXQKKyMgICBkZWZpbmUgbHN0YXQgcnBsX2xzdGF0CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobHN0YXQsIGludCwgKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpidWYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAobHN0YXQsIGludCwgKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpidWYpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAobHN0YXQsIGludCwgKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpidWYpKTsKKyMgZW5kaWYKKyMgaWYgMQorX0dMX0NYWEFMSUFTV0FSTiAobHN0YXQpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBsc3RhdAorIyBpZiBIQVZFX1JBV19ERUNMX0xTVEFUCitfR0xfV0FSTl9PTl9VU0UgKGxzdGF0LCAibHN0YXQgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGxzdGF0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgIHVuZGVmIG1rZGlyCisjICBkZWZpbmUgbWtkaXIgcnBsX21rZGlyCisjIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChta2RpciwgaW50LCAoY2hhciBjb25zdCAqbmFtZSwgbW9kZV90IG1vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAobWtkaXIsIGludCwgKGNoYXIgY29uc3QgKm5hbWUsIG1vZGVfdCBtb2RlKSk7CisjZWxzZQorLyogbWluZ3cncyBfbWtkaXIoKSBmdW5jdGlvbiBoYXMgMSBhcmd1bWVudCwgYnV0IHdlIHBhc3MgMiBhcmd1bWVudHMuCisgICBBZGRpdGlvbmFsbHksIGl0IGRlY2xhcmVzIF9ta2RpciAoYW5kIGRlcGVuZGluZyBvbiBjb21waWxlIGZsYWdzLCBhbgorICAgYWxpYXMgbWtkaXIpLCBvbmx5IGluIHRoZSBub25zdGFuZGFyZCBpbmNsdWRlcyA8ZGlyZWN0Lmg+IGFuZCA8aW8uaD4sCisgICB3aGljaCBhcmUgaW5jbHVkZWQgYWJvdmUuICAqLworIyBpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCisKKyMgIGlmICFHTlVMSUJfZGVmaW5lZF9ycGxfbWtkaXIKK3N0YXRpYyBpbnQKK3JwbF9ta2RpciAoY2hhciBjb25zdCAqbmFtZSwgbW9kZV90IG1vZGUpCit7CisgIHJldHVybiBfbWtkaXIgKG5hbWUpOworfQorIyAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9ycGxfbWtkaXIgMQorIyAgZW5kaWYKKworIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgbWtkaXIgcnBsX21rZGlyCisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1JQTCAobWtkaXIsIGludCwgKGNoYXIgY29uc3QgKm5hbWUsIG1vZGVfdCBtb2RlKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKG1rZGlyLCBpbnQsIChjaGFyIGNvbnN0ICpuYW1lLCBtb2RlX3QgbW9kZSkpOworIyBlbmRpZgorI2VuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChta2Rpcik7CisKKworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKG1rZGlyYXQsIGludCwgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgbW9kZV90IG1vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChta2RpcmF0LCBpbnQsIChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGUsIG1vZGVfdCBtb2RlKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChta2RpcmF0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbWtkaXJhdAorIyBpZiBIQVZFX1JBV19ERUNMX01LRElSQVQKK19HTF9XQVJOX09OX1VTRSAobWtkaXJhdCwgIm1rZGlyYXQgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgb3BlbmF0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBta2ZpZm8KKyMgICBkZWZpbmUgbWtmaWZvIHJwbF9ta2ZpZm8KKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChta2ZpZm8sIGludCwgKGNoYXIgY29uc3QgKmZpbGUsIG1vZGVfdCBtb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChta2ZpZm8sIGludCwgKGNoYXIgY29uc3QgKmZpbGUsIG1vZGVfdCBtb2RlKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChta2ZpZm8sIGludCwgKGNoYXIgY29uc3QgKmZpbGUsIG1vZGVfdCBtb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobWtmaWZvLCBpbnQsIChjaGFyIGNvbnN0ICpmaWxlLCBtb2RlX3QgbW9kZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobWtmaWZvKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbWtmaWZvCisjIGlmIEhBVkVfUkFXX0RFQ0xfTUtGSUZPCitfR0xfV0FSTl9PTl9VU0UgKG1rZmlmbywgIm1rZmlmbyBpcyBub3QgcG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBta2ZpZm8gZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAobWtmaWZvYXQsIGludCwgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgbW9kZV90IG1vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobWtmaWZvYXQsIGludCwgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgbW9kZV90IG1vZGUpKTsKK19HTF9DWFhBTElBU1dBUk4gKG1rZmlmb2F0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbWtmaWZvYXQKKyMgaWYgSEFWRV9SQVdfREVDTF9NS0ZJRk9BVAorX0dMX1dBUk5fT05fVVNFIChta2ZpZm9hdCwgIm1rZmlmb2F0IGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG1rZmlmb2F0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBta25vZAorIyAgIGRlZmluZSBta25vZCBycGxfbWtub2QKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChta25vZCwgaW50LCAoY2hhciBjb25zdCAqZmlsZSwgbW9kZV90IG1vZGUsIGRldl90IGRldikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChta25vZCwgaW50LCAoY2hhciBjb25zdCAqZmlsZSwgbW9kZV90IG1vZGUsIGRldl90IGRldikpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAobWtub2QsIGludCwgKGNoYXIgY29uc3QgKmZpbGUsIG1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKKy8qIE5lZWQgdG8gY2FzdCwgYmVjYXVzZSBvbiBPU0YvMSA1LjEsIHRoZSB0aGlyZCBwYXJhbWV0ZXIgaXMgJy4uLicuICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUIChta25vZCwgaW50LCAoY2hhciBjb25zdCAqZmlsZSwgbW9kZV90IG1vZGUsIGRldl90IGRldikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobWtub2QpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBta25vZAorIyBpZiBIQVZFX1JBV19ERUNMX01LTk9ECitfR0xfV0FSTl9PTl9VU0UgKG1rbm9kLCAibWtub2QgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWtub2QgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAobWtub2RhdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgbW9kZV90IG1vZGUsIGRldl90IGRldikKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChta25vZGF0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlLCBtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChta25vZGF0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbWtub2RhdAorIyBpZiBIQVZFX1JBV19ERUNMX01LTk9EQVQKK19HTF9XQVJOX09OX1VTRSAobWtub2RhdCwgIm1rbm9kYXQgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWtmaWZvYXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMQorIyBpZiAxCisvKiBXZSBjYW4ndCB1c2UgdGhlIG9iamVjdC1saWtlICNkZWZpbmUgc3RhdCBycGxfc3RhdCwgYmVjYXVzZSBvZgorICAgc3RydWN0IHN0YXQuICBUaGlzIG1lYW5zIHRoYXQgcnBsX3N0YXQgd2lsbCBub3QgYmUgdXNlZCBpZiB0aGUgdXNlcgorICAgZG9lcyAoc3RhdCkoYSxiKS4gIE9oIHdlbGwuICAqLworIyAgaWYgZGVmaW5lZCBfQUlYICYmIGRlZmluZWQgc3RhdCAmJiBkZWZpbmVkIF9MQVJHRV9GSUxFUworICAgIC8qIFdpdGggX0xBUkdFX0ZJTEVTIGRlZmluZWQsIEFJWCAob25seSkgZGVmaW5lcyBzdGF0IHRvIHN0YXQ2NCwKKyAgICAgICBzbyB3ZSBoYXZlIHRvIHJlcGxhY2Ugc3RhdDY0KCkgaW5zdGVhZCBvZiBzdGF0KCkuICovCisjICAgdW5kZWYgc3RhdDY0CisjICAgZGVmaW5lIHN0YXQ2NChuYW1lLCBzdCkgcnBsX3N0YXQgKG5hbWUsIHN0KQorIyAgZWxpZiAwCisgICAgLyogQWJvdmUsIHdlIGRlZmluZSBzdGF0IHRvIF9zdGF0aTY0LiAgKi8KKyMgICBpZiBkZWZpbmVkIF9fTUlOR1czMl9fICYmIGRlZmluZWQgX3N0YXRpNjQKKyMgICAgaWZuZGVmIF9VU0VfMzJCSVRfVElNRV9UCisgICAgICAvKiBUaGUgc3lzdGVtIGhlYWRlcnMgZGVmaW5lIF9zdGF0aTY0IHRvIF9zdGF0NjQuICAqLworIyAgICAgdW5kZWYgX3N0YXQ2NAorIyAgICAgZGVmaW5lIF9zdGF0NjQobmFtZSwgc3QpIHJwbF9zdGF0IChuYW1lLCBzdCkKKyMgICAgZW5kaWYKKyMgICBlbGlmIGRlZmluZWQgX01TQ19WRVIgJiYgZGVmaW5lZCBfc3RhdGk2NAorIyAgICBpZmRlZiBfVVNFXzMyQklUX1RJTUVfVAorICAgICAgLyogVGhlIHN5c3RlbSBoZWFkZXJzIGRlZmluZSBfc3RhdGk2NCB0byBfc3RhdDMyaTY0LiAgKi8KKyMgICAgIHVuZGVmIF9zdGF0MzJpNjQKKyMgICAgIGRlZmluZSBfc3RhdDMyaTY0KG5hbWUsIHN0KSBycGxfc3RhdCAobmFtZSwgc3QpCisjICAgIGVsc2UKKyAgICAgIC8qIFRoZSBzeXN0ZW0gaGVhZGVycyBkZWZpbmUgX3N0YXRpNjQgdG8gX3N0YXQ2NC4gICovCisjICAgICB1bmRlZiBfc3RhdDY0CisjICAgICBkZWZpbmUgX3N0YXQ2NChuYW1lLCBzdCkgcnBsX3N0YXQgKG5hbWUsIHN0KQorIyAgICBlbmRpZgorIyAgIGVsc2UKKyMgICAgdW5kZWYgX3N0YXRpNjQKKyMgICAgZGVmaW5lIF9zdGF0aTY0KG5hbWUsIHN0KSBycGxfc3RhdCAobmFtZSwgc3QpCisjICAgZW5kaWYKKyMgIGVsaWYgZGVmaW5lZCBfX01JTkdXMzJfXyAmJiBkZWZpbmVkIHN0YXQKKyMgICBpZmRlZiBfVVNFXzMyQklUX1RJTUVfVAorICAgICAvKiBUaGUgc3lzdGVtIGhlYWRlcnMgZGVmaW5lIHN0YXQgdG8gX3N0YXQzMmk2NC4gICovCisjICAgIHVuZGVmIF9zdGF0MzJpNjQKKyMgICAgZGVmaW5lIF9zdGF0MzJpNjQobmFtZSwgc3QpIHJwbF9zdGF0IChuYW1lLCBzdCkKKyMgICBlbHNlCisgICAgIC8qIFRoZSBzeXN0ZW0gaGVhZGVycyBkZWZpbmUgc3RhdCB0byBfc3RhdDY0LiAgKi8KKyMgICAgdW5kZWYgX3N0YXQ2NAorIyAgICBkZWZpbmUgX3N0YXQ2NChuYW1lLCBzdCkgcnBsX3N0YXQgKG5hbWUsIHN0KQorIyAgIGVuZGlmCisjICBlbGlmIGRlZmluZWQgX01TQ19WRVIgJiYgZGVmaW5lZCBzdGF0CisjICAgaWZkZWYgX1VTRV8zMkJJVF9USU1FX1QKKyAgICAgLyogVGhlIHN5c3RlbSBoZWFkZXJzIGRlZmluZSBzdGF0IHRvIF9zdGF0MzIuICAqLworIyAgICB1bmRlZiBfc3RhdDMyCisjICAgIGRlZmluZSBfc3RhdDMyKG5hbWUsIHN0KSBycGxfc3RhdCAobmFtZSwgc3QpCisjICAgZWxzZQorICAgICAvKiBUaGUgc3lzdGVtIGhlYWRlcnMgZGVmaW5lIHN0YXQgdG8gX3N0YXQ2NGkzMi4gICovCisjICAgIHVuZGVmIF9zdGF0NjRpMzIKKyMgICAgZGVmaW5lIF9zdGF0NjRpMzIobmFtZSwgc3QpIHJwbF9zdGF0IChuYW1lLCBzdCkKKyMgICBlbmRpZgorIyAgZWxzZSAvKiAhKF9BSVggfHxfX01JTkdXMzJfXyB8fCAgX01TQ19WRVIpICovCisjICAgdW5kZWYgc3RhdAorIyAgIGRlZmluZSBzdGF0KG5hbWUsIHN0KSBycGxfc3RhdCAobmFtZSwgc3QpCisjICBlbmRpZiAvKiAhX0xBUkdFX0ZJTEVTICovCitfR0xfRVhURVJOX0MgaW50IHN0YXQgKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpidWYpCisgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdGF0CisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RBVAorX0dMX1dBUk5fT05fVVNFIChzdGF0LCAic3RhdCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RhdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisvKiBVc2UgdGhlIHJwbF8gcHJlZml4IGFsc28gb24gU29sYXJpcyA8PSA5LCBiZWNhdXNlIG9uIFNvbGFyaXMgOSBvdXIgdXRpbWVuc2F0CisgICBpbXBsZW1lbnRhdGlvbiByZWxpZXMgb24gZnV0aW1lc2F0LCB3aGljaCBvbiBTb2xhcmlzIDEwIG1ha2VzIGFuIGludm9jYXRpb24KKyAgIHRvIHV0aW1lbnNhdCB0aGF0IGlzIG1lYW50IHRvIGludm9rZSB0aGUgbGliYydzIHV0aW1lbnNhdCgpLCBub3QgZ251bGliJ3MKKyAgIHV0aW1lbnNhdCgpLiAgKi8KKyMgaWYgMCB8fCAoITEgJiYgZGVmaW5lZCBfX3N1bikKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgdXRpbWVuc2F0CisjICAgZGVmaW5lIHV0aW1lbnNhdCBycGxfdXRpbWVuc2F0CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAodXRpbWVuc2F0LCBpbnQsIChpbnQgZmQsIGNoYXIgY29uc3QgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyBjb25zdCB0aW1lc1syXSwgaW50IGZsYWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHV0aW1lbnNhdCwgaW50LCAoaW50IGZkLCBjaGFyIGNvbnN0ICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgdGltZXNbMl0sIGludCBmbGFnKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh1dGltZW5zYXQsIGludCwgKGludCBmZCwgY2hhciBjb25zdCAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjIGNvbnN0IHRpbWVzWzJdLCBpbnQgZmxhZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHV0aW1lbnNhdCwgaW50LCAoaW50IGZkLCBjaGFyIGNvbnN0ICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgdGltZXNbMl0sIGludCBmbGFnKSk7CisjIGVuZGlmCisjIGlmIDEKK19HTF9DWFhBTElBU1dBUk4gKHV0aW1lbnNhdCk7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHV0aW1lbnNhdAorIyBpZiBIQVZFX1JBV19ERUNMX1VUSU1FTlNBVAorX0dMX1dBUk5fT05fVVNFICh1dGltZW5zYXQsICJ1dGltZW5zYXQgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgdXRpbWVuc2F0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2VuZGlmIC8qIF9HTF9TWVNfU1RBVF9IICovCisjZW5kaWYgLyogX0dMX1NZU19TVEFUX0ggKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZGFyd2luLWxpYi9zeXMvdHlwZXMuaCBiL2Rhcndpbi1saWIvc3lzL3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA1MTkwMgotLS0gL2Rldi9udWxsCisrKyBiL2Rhcndpbi1saWIvc3lzL3R5cGVzLmgKQEAgLTAsMCArMSw1MiBAQAorLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLworLyogUHJvdmlkZSBhIG1vcmUgY29tcGxldGUgc3lzL3R5cGVzLmguCisKKyAgIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZiBfX0dOVUNfXyA+PSAzCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisjZW5kaWYKKworCisjaWZuZGVmIF9HTF9TWVNfVFlQRVNfSAorCisvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisjaW5jbHVkZV9uZXh0IDxzeXMvdHlwZXMuaD4KKworI2lmbmRlZiBfR0xfU1lTX1RZUEVTX0gKKyNkZWZpbmUgX0dMX1NZU19UWVBFU19ICisKKy8qIE92ZXJyaWRlIG9mZl90IGlmIExhcmdlIEZpbGUgU3VwcG9ydCBpcyByZXF1ZXN0ZWQgb24gbmF0aXZlIFdpbmRvd3MuICAqLworI2lmIDAKKy8qIFNhbWUgYXMgaW50NjRfdCBpbiA8c3RkaW50Lmg+LiAgKi8KKyMgaWYgZGVmaW5lZCBfTVNDX1ZFUgorIyAgZGVmaW5lIG9mZl90IF9faW50NjQKKyMgZWxzZQorIyAgZGVmaW5lIG9mZl90IGxvbmcgbG9uZyBpbnQKKyMgZW5kaWYKKy8qIEluZGljYXRvciwgZm9yIGdudWxpYiBpbnRlcm5hbCBwdXJwb3Nlcy4gICovCisjIGRlZmluZSBfR0xfV0lORE9XU182NF9CSVRfT0ZGX1QgMQorI2VuZGlmCisKKy8qIE1TVkMgOSBkZWZpbmVzIHNpemVfdCBpbiA8c3RkZGVmLmg+LCBub3QgaW4gPHN5cy90eXBlcy5oPi4gICovCisvKiBCdXQgYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zLiAgKi8KKyNpZiAoKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXykgXAorICAgICYmICEgZGVmaW5lZCBfX0dMSUJDX18KKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisjZW5kaWYKKworI2VuZGlmIC8qIF9HTF9TWVNfVFlQRVNfSCAqLworI2VuZGlmIC8qIF9HTF9TWVNfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvZGFyd2luLWxpYi9zeXMvd2FpdC5oIGIvZGFyd2luLWxpYi9zeXMvd2FpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YzYzZjMKLS0tIC9kZXYvbnVsbAorKysgYi9kYXJ3aW4tbGliL3N5cy93YWl0LmgKQEAgLTAsMCArMSw0MzEgQEAKKy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8KKy8qIEEgUE9TSVgtbGlrZSA8c3lzL3dhaXQuaD4uCisgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMywgMjAwNS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKworI2lmbmRlZiBfR0xfU1lTX1dBSVRfSAorCisjaWYgX19HTlVDX18gPj0gMworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorI2VuZGlmCisKKworLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworI2lmICEoKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXykKKyMgaW5jbHVkZV9uZXh0IDxzeXMvd2FpdC5oPgorI2VuZGlmCisKKyNpZm5kZWYgX0dMX1NZU19XQUlUX0gKKyNkZWZpbmUgX0dMX1NZU19XQUlUX0gKKworLyogR2V0IHBpZF90LiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworCisvKiBUaGUgZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTCBldGMuIGFyZSBjb3BpZWQgaGVyZS4gICovCisjaWZuZGVmIF9HTF9DWFhERUZTX0gKKyNkZWZpbmUgX0dMX0NYWERFRlNfSAorCisvKiBUaGUgdGhyZWUgbW9zdCBmcmVxdWVudCB1c2UgY2FzZXMgb2YgdGhlc2UgbWFjcm9zIGFyZToKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgc3Vic3RpdHV0ZSBmb3IgYSBmdW5jdGlvbiB0aGF0IGlzIG1pc3Npbmcgb24gc29tZQorICAgICBwbGF0Zm9ybXMsIGJ1dCBpcyBkZWNsYXJlZCBhbmQgd29ya3MgZmluZSBvbiB0aGUgcGxhdGZvcm1zIG9uIHdoaWNoCisgICAgIGl0IGV4aXN0czoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmICFASEFWRV9GT09ACisgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIGFsbCBwbGF0Zm9ybXMsCisgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIHBsYXRmb3JtczoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorICAgICAgICMgICB1bmRlZiBmb28KKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworICAgICAgICMgZWxzZQorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIHNvbWUgcGxhdGZvcm1zCisgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIG9mIHRoZW0gYW5kCisgICAgIGlzIGFkZGl0aW9uYWxseSBlaXRoZXIgbWlzc2luZyBvciB1bmRlY2xhcmVkIG9uIHNvbWUgb3RoZXIgcGxhdGZvcm1zOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisgICAgICAgIyAgIHVuZGVmIGZvbworICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CisgICAgICAgIyBlbHNlCisgICAgICAgIyAgaWYgIUBIQVZFX0ZPT0AgICBvciAgIGlmICFASEFWRV9ERUNMX0ZPT0AKKyAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorKi8KKworLyogX0dMX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuICJDIgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4KKyNlbmRpZgorCisvKiBfR0xfRlVOQ0RFQ0xfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGRlY2xhcmVzIGEgcmVwbGFjZW1lbnQgZnVuY3Rpb24sIG5hbWVkIHJwbF9mdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9GVU5DREVDTF9SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICovCisjZGVmaW5lIF9HTF9GVU5DREVDTF9SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0ZVTkNERUNMX1JQTF8xIChycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKQorI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMXzEocnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9FWFRFUk5fQyByZXR0eXBlIHJwbF9mdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKworLyogX0dMX0ZVTkNERUNMX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBkZWNsYXJlcyB0aGUgc3lzdGVtIGZ1bmN0aW9uLCBuYW1lZCBmdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9GVU5DREVDTF9TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICovCisjZGVmaW5lIF9HTF9GVU5DREVDTF9TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0VYVEVSTl9DIHJldHR5cGUgZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisKKy8qIF9HTF9DWFhBTElBU19SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHJwbF9mdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFIGlzIGRlZmluZWQuCisgICBFeGFtcGxlOgorICAgICBfR0xfQ1hYQUxJQVNfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKyAqLworI2RlZmluZSBfR0xfQ1hYQUxJQVNfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycykKKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OnJwbF9mdW5jOyAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gcnBsX2Z1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQKKyAgIGRlY2xhcmF0aW9uLiAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IKKyAgIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpycGxfZnVuYyk7ICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHRoZSBzeXN0ZW0gcHJvdmlkZWQgZnVuY3Rpb24gZnVuYywgaWYgR05VTElCX05BTUVTUEFDRQorICAgaXMgZGVmaW5lZC4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9DWFhBTElBU19TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyAgLyogSWYgd2Ugd2VyZSB0byB3cml0ZQorICAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOworICAgICBsaWtlIGFib3ZlIGluIF9HTF9DWFhBTElBU19SUExfMSwgdGhlIGNvbXBpbGVyIGNvdWxkIG9wdGltaXplIGNhbGxzCisgICAgIGJldHRlciAocmVtb3ZlIGFuIGluZGlyZWN0aW9uIHRocm91Z2ggYSAnc3RhdGljJyBwb2ludGVyIHZhcmlhYmxlKSwKKyAgICAgYnV0IHRoZW4gdGhlIF9HTF9DWFhBTElBU1dBUk4gbWFjcm8gYmVsb3cgd291bGQgY2F1c2UgYSB3YXJuaW5nIG5vdCBvbmx5CisgICAgIGZvciB1c2VzIG9mIDo6ZnVuYyBidXQgYWxzbyBmb3IgdXNlcyBvZiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jLiAgKi8KKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGZ1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgZGVjbGFyYXRpb24uCisgICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvciB0aGF0IHdvdWxkCisgICBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpmdW5jKTsgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMsIHJldHR5cGUyLCBwYXJhbWV0ZXJzMik7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGlzIHBpY2tlZCBhbW9uZyBhIHNldCBvZiBvdmVybG9hZGVkIGZ1bmN0aW9ucywKKyAgIG5hbWVseSB0aGUgb25lIHdpdGggcmV0dHlwZTIgYW5kIHBhcmFtZXRlcnMyLiAgVHdvIGNvbnNlY3V0aXZlIGNhc3RzCisgICBhcmUgdXNlZCB0byBzaWxlbmNlIHRoZSAiY2Fubm90IGZpbmQgYSBtYXRjaCIgYW5kICJpbnZhbGlkIGNvbnZlcnNpb24iCisgICBlcnJvcnMgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisgIC8qIFRoZSBvdXRlciBjYXN0IG11c3QgYmUgYSByZWludGVycHJldF9jYXN0LgorICAgICBUaGUgaW5uZXIgY2FzdDogV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNldCBvZiBvdmVybG9hZGVkCisgICAgIGZ1bmN0aW9ucywgaXQgd29ya3MgYXMgYSBzdGF0aWNfY2FzdDw+LCBjaG9vc2luZyB0aGUgZGVzaWduYXRlZCB2YXJpYW50LgorICAgICBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2luZ2xlIHZhcmlhbnQsIGl0IHdvcmtzIGFzIGEKKyAgICAgcmVpbnRlcnByZXRfY2FzdDw+LiBUaGUgcGFyZW50aGVzaXplZCBjYXN0IHN5bnRheCB3b3JrcyBib3RoIHdheXMuICAqLworIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChyZXR0eXBlMigqKXBhcmFtZXRlcnMyKSg6OmZ1bmMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTV0FSTiAoZnVuYyk7CisgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiA6OmZ1bmMgaXMgdXNlZCBidXQgbm90IHdoZW4KKyAgIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gIGZ1bmMgbXVzdCBiZSBkZWZpbmVkIHdpdGhvdXQgb3ZlcmxvYWRlZAorICAgdmFyaWFudHMuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk5fMSAoZnVuYywgR05VTElCX05BTUVTUEFDRSkKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMShmdW5jLG5hbWVzcGFjZSkgXAorICAgX0dMX0NYWEFMSUFTV0FSTl8yIChmdW5jLCBuYW1lc3BhY2UpCisvKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKyAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworIyBpZiAhX19PUFRJTUlaRV9fCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgX0dMX1dBUk5fT05fVVNFIChmdW5jLCBcCisgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworIyBlbHNlCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNXQVJOMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiB0aGUgZ2l2ZW4gb3ZlcmxvYWRlZCB2YXJpYW50IG9mIDo6ZnVuYworICAgaXMgdXNlZCBidXQgbm90IHdoZW4gR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk4xXzEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdOVUxJQl9OQU1FU1BBQ0UpCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgX0dMX0NYWEFMSUFTV0FSTjFfMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgbmFtZXNwYWNlKQorLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKyMgaWYgIV9fT1BUSU1JWkVfXworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisjZW5kaWYgLyogX0dMX0NYWERFRlNfSCAqLworCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UgaXMgY29waWVkIGhlcmUuICAqLworI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0UKKworIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKy8qIEEgY29tcGlsZXIgYXR0cmlidXRlIGlzIGF2YWlsYWJsZSBpbiBnY2MgdmVyc2lvbnMgNC4zLjAgYW5kIGxhdGVyLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24gX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtZXNzYWdlKSkpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisvKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmN0aW9uKSBmdW5jdGlvbgorIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBfR0xfV0FSTl9PTl9VU0VfQ1hYIChmdW5jdGlvbiwgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgInN0cmluZyIpCisgICBpcyBsaWtlIF9HTF9XQVJOX09OX1VTRSAoZnVuY3Rpb24sICJzdHJpbmciKSwgZXhjZXB0IHRoYXQgdGhlIGZ1bmN0aW9uIGlzCisgICBkZWNsYXJlZCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsCisgICBhbmQgYXR0cmlidXRlcy4KKyAgIFRoaXMgdmFyaWFudCBpcyB1c2VmdWwgZm9yIG92ZXJsb2FkZWQgZnVuY3Rpb25zIGluIEMrKy4gX0dMX1dBUk5fT05fVVNFIGRvZXMKKyAgIG5vdCB3b3JrIGluIHRoaXMgY2FzZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX09OX1VTRV9DWFgKKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCitleHRlcm4gcmV0dHlwZSBmdW5jdGlvbiBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzIFwKKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtc2cpKSkKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKy8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCitleHRlcm4gcmV0dHlwZSBmdW5jdGlvbiBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisjIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorX0dMX1dBUk5fRVhURVJOX0MgaW50IF9nbF93YXJuX29uX3VzZQorIyBlbmRpZgorI2VuZGlmCisKKy8qIF9HTF9XQVJOX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fRVhURVJOX0MKKyMgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cworIyAgZGVmaW5lIF9HTF9XQVJOX0VYVEVSTl9DIGV4dGVybiAiQyIKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9XQVJOX0VYVEVSTl9DIGV4dGVybgorIyBlbmRpZgorI2VuZGlmCisKKworI2lmICEoKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXykKKy8qIFVuaXggQVBJLiAgKi8KKworLyogVGhlIGZvbGxvd2luZyBtYWNyb3MgYXBwbHkgdG8gYW4gYXJndW1lbnQgeCwgdGhhdCBpcyBhIHN0YXR1cyBvZiBhIHByb2Nlc3MsCisgICBhcyByZXR1cm5lZCBieSB3YWl0cGlkKCkuCisgICBPbiBuZWFybHkgYWxsIHN5c3RlbXMsIGluY2x1ZGluZyBMaW51eC94ODYsIFdFWElUU1RBVFVTIGFyZSBiaXRzIDE1Li44IGFuZAorICAgV1RFUk1TSUcgYXJlIGJpdHMgNy4uMCwgd2hpbGUgQmVPUyB1c2VzIHRoZSBvcHBvc2l0ZS4gIFRoZXJlZm9yZSBwcm9ncmFtcworICAgaGF2ZSB0byB1c2UgdGhlIGFic3RyYWN0IG1hY3Jvcy4gICovCisKKy8qIEZvciB2YWxpZCB4LCBleGFjdGx5IG9uZSBvZiBXSUZTSUdOQUxFRCh4KSwgV0lGRVhJVEVEKHgpLCBXSUZTVE9QUEVEKHgpCisgICBpcyB0cnVlLiAgKi8KKyMgaWZuZGVmIFdJRlNJR05BTEVECisjICBkZWZpbmUgV0lGU0lHTkFMRUQoeCkgKFdURVJNU0lHICh4KSAhPSAwICYmIFdURVJNU0lHKHgpICE9IDB4N2YpCisjIGVuZGlmCisjIGlmbmRlZiBXSUZFWElURUQKKyMgIGRlZmluZSBXSUZFWElURUQoeCkgKFdURVJNU0lHICh4KSA9PSAwKQorIyBlbmRpZgorIyBpZm5kZWYgV0lGU1RPUFBFRAorIyAgZGVmaW5lIFdJRlNUT1BQRUQoeCkgKFdURVJNU0lHICh4KSA9PSAweDdmKQorIyBlbmRpZgorCisvKiBUaGUgdGVybWluYXRpb24gc2lnbmFsLiBPbmx5IHRvIGJlIGFjY2Vzc2VkIGlmIFdJRlNJR05BTEVEKHgpIGlzIHRydWUuICAqLworIyBpZm5kZWYgV1RFUk1TSUcKKyMgIGRlZmluZSBXVEVSTVNJRyh4KSAoKHgpICYgMHg3ZikKKyMgZW5kaWYKKworLyogVGhlIGV4aXQgc3RhdHVzLiBPbmx5IHRvIGJlIGFjY2Vzc2VkIGlmIFdJRkVYSVRFRCh4KSBpcyB0cnVlLiAgKi8KKyMgaWZuZGVmIFdFWElUU1RBVFVTCisjICBkZWZpbmUgV0VYSVRTVEFUVVMoeCkgKCgoeCkgPj4gOCkgJiAweGZmKQorIyBlbmRpZgorCisvKiBUaGUgc3RvcHBpbmcgc2lnbmFsLiBPbmx5IHRvIGJlIGFjY2Vzc2VkIGlmIFdJRlNUT1BQRUQoeCkgaXMgdHJ1ZS4gICovCisjIGlmbmRlZiBXU1RPUFNJRworIyAgZGVmaW5lIFdTVE9QU0lHKHgpICgoKHgpID4+IDgpICYgMHg3ZikKKyMgZW5kaWYKKworLyogVHJ1ZSBpZiB0aGUgcHJvY2VzcyBkdW1wZWQgY29yZS4gIE5vdCBzdGFuZGFyZGl6ZWQgYnkgUE9TSVguICAqLworIyBpZm5kZWYgV0NPUkVEVU1QCisjICBkZWZpbmUgV0NPUkVEVU1QKHgpICgoeCkgJiAweDgwKQorIyBlbmRpZgorCisjZWxzZQorLyogTmF0aXZlIFdpbmRvd3MgQVBJLiAgKi8KKworIyBpbmNsdWRlIDxzaWduYWwuaD4gLyogZm9yIFNJR1RFUk0gKi8KKworLyogVGhlIGZvbGxvd2luZyBtYWNyb3MgYXBwbHkgdG8gYW4gYXJndW1lbnQgeCwgdGhhdCBpcyBhIHN0YXR1cyBvZiBhIHByb2Nlc3MsCisgICBhcyByZXR1cm5lZCBieSB3YWl0cGlkKCkgb3IsIGVxdWl2YWxlbnRseSwgX2N3YWl0KCkgb3IgR2V0RXhpdENvZGVQcm9jZXNzKCkuCisgICBUaGlzIHZhbHVlIGlzIHNpbXBseSBhbiAnaW50Jywgbm90IGNvbXBvc2VkIG9mIGJpdCBmaWVsZHMuICAqLworCisvKiBXaGVuIGFuIHVuaGFuZGxlZCBmYXRhbCBzaWduYWwgdGVybWluYXRlcyBhIHByb2Nlc3MsIHRoZSBleGl0IGNvZGUgaXMgMy4gICovCisjIGRlZmluZSBXSUZTSUdOQUxFRCh4KSAoKHgpID09IDMpCisjIGRlZmluZSBXSUZFWElURUQoeCkgKCh4KSAhPSAzKQorIyBkZWZpbmUgV0lGU1RPUFBFRCh4KSAwCisKKy8qIFRoZSBzaWduYWwgdGhhdCB0ZXJtaW5hdGVkIGEgcHJvY2VzcyBpcyBub3Qga25vd24gcG9zdGh1bS4gICovCisjIGRlZmluZSBXVEVSTVNJRyh4KSBTSUdURVJNCisKKyMgZGVmaW5lIFdFWElUU1RBVFVTKHgpICh4KQorCisvKiBUaGVyZSBhcmUgbm8gc3RvcHBpbmcgc2lnbmFscy4gICovCisjIGRlZmluZSBXU1RPUFNJRyh4KSAwCisKKy8qIFRoZXJlIGFyZSBubyBjb3JlIGR1bXBzLiAgKi8KKyMgZGVmaW5lIFdDT1JFRFVNUCh4KSAwCisKKyNlbmRpZgorCisKKy8qIERlY2xhcmF0aW9ucyBvZiBmdW5jdGlvbnMuICAqLworCisjaWYgMQorIyBpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCitfR0xfRlVOQ0RFQ0xfU1lTICh3YWl0cGlkLCBwaWRfdCwgKHBpZF90IHBpZCwgaW50ICpzdGF0dXNwLCBpbnQgb3B0aW9ucykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod2FpdHBpZCwgcGlkX3QsIChwaWRfdCBwaWQsIGludCAqc3RhdHVzcCwgaW50IG9wdGlvbnMpKTsKK19HTF9DWFhBTElBU1dBUk4gKHdhaXRwaWQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3YWl0cGlkCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0FJVFBJRAorX0dMX1dBUk5fT05fVVNFICh3YWl0cGlkLCAid2FpdHBpZCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3lzX3dhaXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjZW5kaWYgLyogX0dMX1NZU19XQUlUX0ggKi8KKyNlbmRpZiAvKiBfR0xfU1lTX1dBSVRfSCAqLwpkaWZmIC0tZ2l0IGEvZGFyd2luLWxpYi90aW1lLmggYi9kYXJ3aW4tbGliL3RpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmIwMTg4Ci0tLSAvZGV2L251bGwKKysrIGIvZGFyd2luLWxpYi90aW1lLmgKQEAgLTAsMCArMSw1NjAgQEAKKy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8KKy8qIEEgbW9yZS1zdGFuZGFyZCA8dGltZS5oPi4KKworICAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmIF9fR05VQ19fID49IDMKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKyNlbmRpZgorCisKKy8qIERvbid0IGdldCBpbiB0aGUgd2F5IG9mIGdsaWJjIHdoZW4gaXQgaW5jbHVkZXMgdGltZS5oIG1lcmVseSB0bworICAgZGVjbGFyZSBhIGZldyBzdGFuZGFyZCBzeW1ib2xzLCByYXRoZXIgdGhhbiB0byBkZWNsYXJlIGFsbCB0aGUKKyAgIHN5bWJvbHMuICBBbHNvLCBTb2xhcmlzIDggPHRpbWUuaD4gZXZlbnR1YWxseSBpbmNsdWRlcyBpdHNlbGYKKyAgIHJlY3Vyc2l2ZWx5OyBpZiB0aGF0IGlzIGhhcHBlbmluZywganVzdCBpbmNsdWRlIHRoZSBzeXN0ZW0gPHRpbWUuaD4KKyAgIHdpdGhvdXQgYWRkaW5nIG91ciBvd24gZGVjbGFyYXRpb25zLiAgKi8KKyNpZiAoZGVmaW5lZCBfX25lZWRfdGltZV90IHx8IGRlZmluZWQgX19uZWVkX2Nsb2NrX3QgXAorICAgICB8fCBkZWZpbmVkIF9fbmVlZF90aW1lc3BlYyBcCisgICAgIHx8IGRlZmluZWQgX0dMX1RJTUVfSCkKKworIyBpbmNsdWRlX25leHQgPHRpbWUuaD4KKworI2Vsc2UKKworIyBkZWZpbmUgX0dMX1RJTUVfSAorCisjIGluY2x1ZGVfbmV4dCA8dGltZS5oPgorCisvKiBOZXRCU0QgNS4wIG1pcy1kZWZpbmVzIE5VTEwuICAqLworIyBpbmNsdWRlIDxzdGRkZWYuaD4KKworLyogVGhlIGRlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwgZXRjLiBhcmUgY29waWVkIGhlcmUuICAqLworI2lmbmRlZiBfR0xfQ1hYREVGU19ICisjZGVmaW5lIF9HTF9DWFhERUZTX0gKKworLyogVGhlIHRocmVlIG1vc3QgZnJlcXVlbnQgdXNlIGNhc2VzIG9mIHRoZXNlIG1hY3JvcyBhcmU6CisKKyAgICogRm9yIHByb3ZpZGluZyBhIHN1YnN0aXR1dGUgZm9yIGEgZnVuY3Rpb24gdGhhdCBpcyBtaXNzaW5nIG9uIHNvbWUKKyAgICAgcGxhdGZvcm1zLCBidXQgaXMgZGVjbGFyZWQgYW5kIHdvcmtzIGZpbmUgb24gdGhlIHBsYXRmb3JtcyBvbiB3aGljaAorICAgICBpdCBleGlzdHM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiAhQEhBVkVfRk9PQAorICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorCisgICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBhbGwgcGxhdGZvcm1zLAorICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBwbGF0Zm9ybXM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACisgICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyAgICAgICAjICAgdW5kZWYgZm9vCisgICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKyAgICAgICAjIGVsc2UKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorCisgICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBzb21lIHBsYXRmb3JtcworICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBvZiB0aGVtIGFuZAorICAgICBpcyBhZGRpdGlvbmFsbHkgZWl0aGVyIG1pc3Npbmcgb3IgdW5kZWNsYXJlZCBvbiBzb21lIG90aGVyIHBsYXRmb3JtczoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorICAgICAgICMgICB1bmRlZiBmb28KKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworICAgICAgICMgZWxzZQorICAgICAgICMgIGlmICFASEFWRV9GT09AICAgb3IgICBpZiAhQEhBVkVfREVDTF9GT09ACisgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKyovCisKKy8qIF9HTF9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cworIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybiAiQyIKKyNlbHNlCisjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuCisjZW5kaWYKKworLyogX0dMX0ZVTkNERUNMX1JQTCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBkZWNsYXJlcyBhIHJlcGxhY2VtZW50IGZ1bmN0aW9uLCBuYW1lZCBycGxfZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCisgICBFeGFtcGxlOgorICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyAqLworI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9GVU5DREVDTF9SUExfMSAocnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykKKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1JQTF8xKHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICBfR0xfRVhURVJOX0MgcmV0dHlwZSBycGxfZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisKKy8qIF9HTF9GVU5DREVDTF9TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgZGVjbGFyZXMgdGhlIHN5c3RlbSBmdW5jdGlvbiwgbmFtZWQgZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCisgICBFeGFtcGxlOgorICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyAqLworI2RlZmluZSBfR0xfRlVOQ0RFQ0xfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9FWFRFUk5fQyByZXR0eXBlIGZ1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworCisvKiBfR0xfQ1hYQUxJQVNfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCisgICB0aGF0IHJlZGlyZWN0cyB0byBycGxfZnVuYywgaWYgR05VTElCX05BTUVTUEFDRSBpcyBkZWZpbmVkLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0NYWEFMSUFTX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CisgKi8KKyNkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpycGxfZnVuYzsgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xIChmdW5jLCBycGxfZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIHJwbF9mdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50CisgICBkZWNsYXJhdGlvbi4gIEEgY2FzdCBpcyB1c2VkIHRvIHNpbGVuY2UgdGhlICJpbnZhbGlkIGNvbnZlcnNpb24iIGVycm9yCisgICB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6cnBsX2Z1bmMpOyAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCisgICB0aGF0IHJlZGlyZWN0cyB0byB0aGUgc3lzdGVtIHByb3ZpZGVkIGZ1bmN0aW9uIGZ1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UKKyAgIGlzIGRlZmluZWQuCisgICBFeGFtcGxlOgorICAgICBfR0xfQ1hYQUxJQVNfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKyAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisgIC8qIElmIHdlIHdlcmUgdG8gd3JpdGUKKyAgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsKKyAgICAgbGlrZSBhYm92ZSBpbiBfR0xfQ1hYQUxJQVNfUlBMXzEsIHRoZSBjb21waWxlciBjb3VsZCBvcHRpbWl6ZSBjYWxscworICAgICBiZXR0ZXIgKHJlbW92ZSBhbiBpbmRpcmVjdGlvbiB0aHJvdWdoIGEgJ3N0YXRpYycgcG9pbnRlciB2YXJpYWJsZSksCisgICAgIGJ1dCB0aGVuIHRoZSBfR0xfQ1hYQUxJQVNXQVJOIG1hY3JvIGJlbG93IHdvdWxkIGNhdXNlIGEgd2FybmluZyBub3Qgb25seQorICAgICBmb3IgdXNlcyBvZiA6OmZ1bmMgYnV0IGFsc28gZm9yIHVzZXMgb2YgR05VTElCX05BTUVTUEFDRTo6ZnVuYy4gICovCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7ICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBmdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGRlY2xhcmF0aW9uLgorICAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IgdGhhdCB3b3VsZAorICAgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6ZnVuYyk7IFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzLCByZXR0eXBlMiwgcGFyYW1ldGVyczIpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBpcyBwaWNrZWQgYW1vbmcgYSBzZXQgb2Ygb3ZlcmxvYWRlZCBmdW5jdGlvbnMsCisgICBuYW1lbHkgdGhlIG9uZSB3aXRoIHJldHR5cGUyIGFuZCBwYXJhbWV0ZXJzMi4gIFR3byBjb25zZWN1dGl2ZSBjYXN0cworICAgYXJlIHVzZWQgdG8gc2lsZW5jZSB0aGUgImNhbm5vdCBmaW5kIGEgbWF0Y2giIGFuZCAiaW52YWxpZCBjb252ZXJzaW9uIgorICAgZXJyb3JzIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorICAvKiBUaGUgb3V0ZXIgY2FzdCBtdXN0IGJlIGEgcmVpbnRlcnByZXRfY2FzdC4KKyAgICAgVGhlIGlubmVyIGNhc3Q6IFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzZXQgb2Ygb3ZlcmxvYWRlZAorICAgICBmdW5jdGlvbnMsIGl0IHdvcmtzIGFzIGEgc3RhdGljX2Nhc3Q8PiwgY2hvb3NpbmcgdGhlIGRlc2lnbmF0ZWQgdmFyaWFudC4KKyAgICAgV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNpbmdsZSB2YXJpYW50LCBpdCB3b3JrcyBhcyBhCisgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Pi4gVGhlIHBhcmVudGhlc2l6ZWQgY2FzdCBzeW50YXggd29ya3MgYm90aCB3YXlzLiAgKi8KKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAocmV0dHlwZTIoKilwYXJhbWV0ZXJzMikoOjpmdW5jKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU1dBUk4gKGZ1bmMpOworICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gOjpmdW5jIGlzIHVzZWQgYnV0IG5vdCB3aGVuCisgICBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICBmdW5jIG11c3QgYmUgZGVmaW5lZCB3aXRob3V0IG92ZXJsb2FkZWQKKyAgIHZhcmlhbnRzLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOXzEgKGZ1bmMsIEdOVUxJQl9OQU1FU1BBQ0UpCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzEoZnVuYyxuYW1lc3BhY2UpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk5fMiAoZnVuYywgbmFtZXNwYWNlKQorLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKyMgaWYgIV9fT1BUSU1JWkVfXworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgIF9HTF9XQVJOX09OX1VTRSAoZnVuYywgXAorICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAorICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKyAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTV0FSTjEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gdGhlIGdpdmVuIG92ZXJsb2FkZWQgdmFyaWFudCBvZiA6OmZ1bmMKKyAgIGlzIHVzZWQgYnV0IG5vdCB3aGVuIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOMV8xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBHTlVMSUJfTkFNRVNQQUNFKQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk4xXzIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIG5hbWVzcGFjZSkKKy8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAorICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCisjIGlmICFfX09QVElNSVpFX18KKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworIyBlbHNlCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworI2VuZGlmIC8qIF9HTF9DWFhERUZTX0ggKi8KKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxMIGlzIGNvcGllZCBoZXJlLiAgKi8KKy8qIF9HTF9BUkdfTk9OTlVMTCgobiwuLi4sbSkpIHRlbGxzIHRoZSBjb21waWxlciBhbmQgc3RhdGljIGFuYWx5emVyIHRvb2xzCisgICB0aGF0IHRoZSB2YWx1ZXMgcGFzc2VkIGFzIGFyZ3VtZW50cyBuLCAuLi4sIG0gbXVzdCBiZSBub24tTlVMTCBwb2ludGVycy4KKyAgIG4gPSAxIHN0YW5kcyBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50LCBuID0gMiBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCBldGMuICAqLworI2lmbmRlZiBfR0xfQVJHX05PTk5VTEwKKyMgaWYgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gMykgfHwgX19HTlVDX18gPiAzCisjICBkZWZpbmUgX0dMX0FSR19OT05OVUxMKHBhcmFtcykgX19hdHRyaWJ1dGVfXyAoKF9fbm9ubnVsbF9fIHBhcmFtcykpCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKQorIyBlbmRpZgorI2VuZGlmCisKKy8qIFRoZSBkZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRSBpcyBjb3BpZWQgaGVyZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX09OX1VTRQorCisjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorLyogQSBjb21waWxlciBhdHRyaWJ1dGUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyA0LjMuMCBhbmQgbGF0ZXIuICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmN0aW9uKSBmdW5jdGlvbiBfX2F0dHJpYnV0ZV9fICgoX193YXJuaW5nX18gKG1lc3NhZ2UpKSkKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKy8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uCisjIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorX0dMX1dBUk5fRVhURVJOX0MgaW50IF9nbF93YXJuX29uX3VzZQorIyBlbmRpZgorI2VuZGlmCisKKy8qIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmN0aW9uLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCAic3RyaW5nIikKKyAgIGlzIGxpa2UgX0dMX1dBUk5fT05fVVNFIChmdW5jdGlvbiwgInN0cmluZyIpLCBleGNlcHQgdGhhdCB0aGUgZnVuY3Rpb24gaXMKKyAgIGRlY2xhcmVkIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywKKyAgIGFuZCBhdHRyaWJ1dGVzLgorICAgVGhpcyB2YXJpYW50IGlzIHVzZWZ1bCBmb3Igb3ZlcmxvYWRlZCBmdW5jdGlvbnMgaW4gQysrLiBfR0xfV0FSTl9PTl9VU0UgZG9lcworICAgbm90IHdvcmsgaW4gdGhpcyBjYXNlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFX0NYWAorIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK2V4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMgXAorICAgICBfX2F0dHJpYnV0ZV9fICgoX193YXJuaW5nX18gKG1zZykpKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK2V4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCitfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisjIGVuZGlmCisjZW5kaWYKKworLyogX0dMX1dBUk5fRVhURVJOX0MgZGVjbGFyYXRpb247CisgICBwZXJmb3JtcyB0aGUgZGVjbGFyYXRpb24gd2l0aCBDIGxpbmthZ2UuICAqLworI2lmbmRlZiBfR0xfV0FSTl9FWFRFUk5fQworIyBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisjICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuICJDIgorIyBlbHNlCisjICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuCisjIGVuZGlmCisjZW5kaWYKKworLyogU29tZSBzeXN0ZW1zIGRvbid0IGRlZmluZSBzdHJ1Y3QgdGltZXNwZWMgKGUuZy4sIEFJWCA0LjEsIFVsdHJpeCA0LjMpLgorICAgT3IgdGhleSBkZWZpbmUgaXQgd2l0aCB0aGUgd3JvbmcgbWVtYmVyIG5hbWVzIG9yIGRlZmluZSBpdCBpbiA8c3lzL3RpbWUuaD4KKyAgIChlLmcuLCBGcmVlQlNEIGNpcmNhIDE5OTcpLiAgU3RvY2sgTWluZ3cgZG9lcyBub3QgZGVmaW5lIGl0LCBidXQgdGhlCisgICBwdGhyZWFkcy13aW4zMiBsaWJyYXJ5IGRlZmluZXMgaXQgaW4gPHB0aHJlYWQuaD4uICAqLworIyBpZiAhIDEKKyMgIGlmIDAKKyMgICBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyAgZWxpZiAwCisjICAgaW5jbHVkZSA8cHRocmVhZC5oPgorLyogVGhlIHB0aHJlYWRzLXdpbjMyIDxwdGhyZWFkLmg+IGFsc28gZGVmaW5lcyBhIGNvdXBsZSBvZiBicm9rZW4gbWFjcm9zLiAgKi8KKyMgICB1bmRlZiBhc2N0aW1lX3IKKyMgICB1bmRlZiBjdGltZV9yCisjICAgdW5kZWYgZ210aW1lX3IKKyMgICB1bmRlZiBsb2NhbHRpbWVfcgorIyAgIHVuZGVmIHJhbmRfcgorIyAgIHVuZGVmIHN0cnRva19yCisjICBlbHNlCisKKyMgICBpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjICAgZW5kaWYKKworIyAgIGlmICFHTlVMSUJfZGVmaW5lZF9zdHJ1Y3RfdGltZXNwZWMKKyMgICAgdW5kZWYgdGltZXNwZWMKKyMgICAgZGVmaW5lIHRpbWVzcGVjIHJwbF90aW1lc3BlYworc3RydWN0IHRpbWVzcGVjCit7CisgIHRpbWVfdCB0dl9zZWM7CisgIGxvbmcgaW50IHR2X25zZWM7Cit9OworIyAgICBkZWZpbmUgR05VTElCX2RlZmluZWRfc3RydWN0X3RpbWVzcGVjIDEKKyMgICBlbmRpZgorCisjICAgaWZkZWYgX19jcGx1c3BsdXMKK30KKyMgICBlbmRpZgorCisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmICFHTlVMSUJfZGVmaW5lZF9zdHJ1Y3RfdGltZV90X211c3RfYmVfaW50ZWdyYWwKKy8qIFBlciBodHRwOi8vYXVzdGluZ3JvdXBidWdzLm5ldC92aWV3LnBocD9pZD0zMjcsIFBPU0lYIHJlcXVpcmVzCisgICB0aW1lX3QgdG8gYmUgYW4gaW50ZWdlciB0eXBlLCBldmVuIHRob3VnaCBDOTkgcGVybWl0cyBmbG9hdGluZworICAgcG9pbnQuICBXZSBkb24ndCBrbm93IG9mIGFueSBpbXBsZW1lbnRhdGlvbiB0aGF0IHVzZXMgZmxvYXRpbmcKKyAgIHBvaW50LCBhbmQgaXQgaXMgbXVjaCBlYXNpZXIgdG8gd3JpdGUgY29kZSB0aGF0IGRvZXNuJ3QgaGF2ZSB0bworICAgd29ycnkgYWJvdXQgdGhhdCBjb3JuZXIgY2FzZSwgc28gd2UgZm9yY2UgdGhlIGlzc3VlLiAgKi8KK3N0cnVjdCBfX3RpbWVfdF9tdXN0X2JlX2ludGVncmFsIHsKKyAgdW5zaWduZWQgaW50IF9fZmxvYXRpbmdfdGltZV90X3Vuc3VwcG9ydGVkIDogKHRpbWVfdCkgMTsKK307CisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfc3RydWN0X3RpbWVfdF9tdXN0X2JlX2ludGVncmFsIDEKKyMgZW5kaWYKKworLyogU2xlZXAgZm9yIGF0IGxlYXN0IFJRVFAgc2Vjb25kcyB1bmxlc3MgaW50ZXJydXB0ZWQsICBJZiBpbnRlcnJ1cHRlZCwKKyAgIHJldHVybiAtMSBhbmQgc3RvcmUgdGhlIHJlbWFpbmluZyB0aW1lIGludG8gUk1UUC4gIFNlZQorICAgPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hzaC9uYW5vc2xlZXAuaHRtbD4uICAqLworIyBpZiAwCisjICBpZiBHTlVMSUJfUE9SVENIRUNLCisjICAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICAgZGVmaW5lIG5hbm9zbGVlcCBycGxfbmFub3NsZWVwCisjICAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG5hbm9zbGVlcCwgaW50LAorICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1lc3BlYyBjb25zdCAqX19ycXRwLCBzdHJ1Y3QgdGltZXNwZWMgKl9fcm10cCkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChuYW5vc2xlZXAsIGludCwKKyAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXNwZWMgY29uc3QgKl9fcnF0cCwgc3RydWN0IHRpbWVzcGVjICpfX3JtdHApKTsKKyMgIGVsc2UKKyMgICBpZiAhIDEKK19HTF9GVU5DREVDTF9TWVMgKG5hbm9zbGVlcCwgaW50LAorICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1lc3BlYyBjb25zdCAqX19ycXRwLCBzdHJ1Y3QgdGltZXNwZWMgKl9fcm10cCkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKG5hbm9zbGVlcCwgaW50LAorICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1lc3BlYyBjb25zdCAqX19ycXRwLCBzdHJ1Y3QgdGltZXNwZWMgKl9fcm10cCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG5hbm9zbGVlcCk7CisjIGVuZGlmCisKKy8qIFJldHVybiB0aGUgJ3RpbWVfdCcgcmVwcmVzZW50YXRpb24gb2YgVFAgYW5kIG5vcm1hbGl6ZSBUUC4gICovCisjIGlmIDAKKyMgIGlmIEdOVUxJQl9QT1JUQ0hFQ0sKKyMgICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgICBkZWZpbmUgbWt0aW1lIHJwbF9ta3RpbWUKKyMgICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobWt0aW1lLCB0aW1lX3QsIChzdHJ1Y3QgdG0gKl9fdHApIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChta3RpbWUsIHRpbWVfdCwgKHN0cnVjdCB0bSAqX190cCkpOworIyAgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAobWt0aW1lLCB0aW1lX3QsIChzdHJ1Y3QgdG0gKl9fdHApKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChta3RpbWUpOworIyBlbmRpZgorCisvKiBDb252ZXJ0IFRJTUVSIHRvIFJFU1VMVCwgYXNzdW1pbmcgbG9jYWwgdGltZSBhbmQgVVRDIHJlc3BlY3RpdmVseS4gIFNlZQorICAgPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hzaC9sb2NhbHRpbWVfci5odG1sPiBhbmQKKyAgIDxodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjN4c2gvZ210aW1lX3IuaHRtbD4uICAqLworIyBpZiAwCisjICBpZiBHTlVMSUJfUE9SVENIRUNLCisjICAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICAgdW5kZWYgbG9jYWx0aW1lX3IKKyMgICAgZGVmaW5lIGxvY2FsdGltZV9yIHJwbF9sb2NhbHRpbWVfcgorIyAgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChsb2NhbHRpbWVfciwgc3RydWN0IHRtICosICh0aW1lX3QgY29uc3QgKnJlc3RyaWN0IF9fdGltZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKnJlc3RyaWN0IF9fcmVzdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAobG9jYWx0aW1lX3IsIHN0cnVjdCB0bSAqLCAodGltZV90IGNvbnN0ICpyZXN0cmljdCBfX3RpbWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpyZXN0cmljdCBfX3Jlc3VsdCkpOworIyAgZWxzZQorIyAgIGlmICEgMQorX0dMX0ZVTkNERUNMX1NZUyAobG9jYWx0aW1lX3IsIHN0cnVjdCB0bSAqLCAodGltZV90IGNvbnN0ICpyZXN0cmljdCBfX3RpbWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpyZXN0cmljdCBfX3Jlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobG9jYWx0aW1lX3IsIHN0cnVjdCB0bSAqLCAodGltZV90IGNvbnN0ICpyZXN0cmljdCBfX3RpbWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpyZXN0cmljdCBfX3Jlc3VsdCkpOworIyAgZW5kaWYKKyMgIGlmIDEKK19HTF9DWFhBTElBU1dBUk4gKGxvY2FsdGltZV9yKTsKKyMgIGVuZGlmCisjICBpZiBHTlVMSUJfUE9SVENIRUNLCisjICAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICAgdW5kZWYgZ210aW1lX3IKKyMgICAgZGVmaW5lIGdtdGltZV9yIHJwbF9nbXRpbWVfcgorIyAgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChnbXRpbWVfciwgc3RydWN0IHRtICosICh0aW1lX3QgY29uc3QgKnJlc3RyaWN0IF9fdGltZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKnJlc3RyaWN0IF9fcmVzdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZ210aW1lX3IsIHN0cnVjdCB0bSAqLCAodGltZV90IGNvbnN0ICpyZXN0cmljdCBfX3RpbWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpyZXN0cmljdCBfX3Jlc3VsdCkpOworIyAgZWxzZQorIyAgIGlmICEgMQorX0dMX0ZVTkNERUNMX1NZUyAoZ210aW1lX3IsIHN0cnVjdCB0bSAqLCAodGltZV90IGNvbnN0ICpyZXN0cmljdCBfX3RpbWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpyZXN0cmljdCBfX3Jlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZ210aW1lX3IsIHN0cnVjdCB0bSAqLCAodGltZV90IGNvbnN0ICpyZXN0cmljdCBfX3RpbWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpyZXN0cmljdCBfX3Jlc3VsdCkpOworIyAgZW5kaWYKKyMgIGlmIDEKK19HTF9DWFhBTElBU1dBUk4gKGdtdGltZV9yKTsKKyMgIGVuZGlmCisjIGVuZGlmCisKKy8qIFBhcnNlIEJVRiBhcyBhIHRpbWUgc3RhbXAsIGFzc3VtaW5nIEZPUk1BVCBzcGVjaWZpZXMgaXRzIGxheW91dCwgYW5kIHN0b3JlCisgICB0aGUgcmVzdWx0aW5nIGJyb2tlbi1kb3duIHRpbWUgaW50byBUTS4gIFNlZQorICAgPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hzaC9zdHJwdGltZS5odG1sPi4gICovCisjIGlmIDAKKyMgIGlmICEgMQorX0dMX0ZVTkNERUNMX1NZUyAoc3RycHRpbWUsIGNoYXIgKiwgKGNoYXIgY29uc3QgKnJlc3RyaWN0IF9fYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKnJlc3RyaWN0IF9fZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqcmVzdHJpY3QgX190bSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIsIDMpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc3RycHRpbWUsIGNoYXIgKiwgKGNoYXIgY29uc3QgKnJlc3RyaWN0IF9fYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKnJlc3RyaWN0IF9fZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqcmVzdHJpY3QgX190bSkpOworX0dMX0NYWEFMSUFTV0FSTiAoc3RycHRpbWUpOworIyBlbmRpZgorCisvKiBDb252ZXJ0IFRNIHRvIGEgdGltZV90IHZhbHVlLCBhc3N1bWluZyBVVEMuICAqLworIyBpZiAwCisjICBpZiBHTlVMSUJfUE9SVENIRUNLCisjICAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICAgdW5kZWYgdGltZWdtCisjICAgIGRlZmluZSB0aW1lZ20gcnBsX3RpbWVnbQorIyAgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh0aW1lZ20sIHRpbWVfdCwgKHN0cnVjdCB0bSAqX190bSkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHRpbWVnbSwgdGltZV90LCAoc3RydWN0IHRtICpfX3RtKSk7CisjICBlbHNlCisjICAgaWYgISAxCitfR0xfRlVOQ0RFQ0xfU1lTICh0aW1lZ20sIHRpbWVfdCwgKHN0cnVjdCB0bSAqX190bSkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAodGltZWdtLCB0aW1lX3QsIChzdHJ1Y3QgdG0gKl9fdG0pKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOICh0aW1lZ20pOworIyBlbmRpZgorCisvKiBFbmNvdXJhZ2UgYXBwbGljYXRpb25zIHRvIGF2b2lkIHVuc2FmZSBmdW5jdGlvbnMgdGhhdCBjYW4gb3ZlcnJ1bgorICAgYnVmZmVycyB3aGVuIGdpdmVuIG91dGxhbmRpc2ggc3RydWN0IHRtIHZhbHVlcy4gIFBvcnRhYmxlCisgICBhcHBsaWNhdGlvbnMgc2hvdWxkIHVzZSBzdHJmdGltZSAob3IgZXZlbiBzcHJpbnRmKSBpbnN0ZWFkLiAgKi8KKyMgaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyAgdW5kZWYgYXNjdGltZQorX0dMX1dBUk5fT05fVVNFIChhc2N0aW1lLCAiYXNjdGltZSBjYW4gb3ZlcnJ1biBidWZmZXJzIGluIHNvbWUgY2FzZXMgLSAiCisgICAgICAgICAgICAgICAgICJiZXR0ZXIgdXNlIHN0cmZ0aW1lIChvciBldmVuIHNwcmludGYpIGluc3RlYWQiKTsKKyMgZW5kaWYKKyMgaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyAgdW5kZWYgYXNjdGltZV9yCitfR0xfV0FSTl9PTl9VU0UgKGFzY3RpbWUsICJhc2N0aW1lX3IgY2FuIG92ZXJydW4gYnVmZmVycyBpbiBzb21lIGNhc2VzIC0gIgorICAgICAgICAgICAgICAgICAiYmV0dGVyIHVzZSBzdHJmdGltZSAob3IgZXZlbiBzcHJpbnRmKSBpbnN0ZWFkIik7CisjIGVuZGlmCisjIGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgIHVuZGVmIGN0aW1lCitfR0xfV0FSTl9PTl9VU0UgKGFzY3RpbWUsICJjdGltZSBjYW4gb3ZlcnJ1biBidWZmZXJzIGluIHNvbWUgY2FzZXMgLSAiCisgICAgICAgICAgICAgICAgICJiZXR0ZXIgdXNlIHN0cmZ0aW1lIChvciBldmVuIHNwcmludGYpIGluc3RlYWQiKTsKKyMgZW5kaWYKKyMgaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyAgdW5kZWYgY3RpbWVfcgorX0dMX1dBUk5fT05fVVNFIChhc2N0aW1lLCAiY3RpbWVfciBjYW4gb3ZlcnJ1biBidWZmZXJzIGluIHNvbWUgY2FzZXMgLSAiCisgICAgICAgICAgICAgICAgICJiZXR0ZXIgdXNlIHN0cmZ0aW1lIChvciBldmVuIHNwcmludGYpIGluc3RlYWQiKTsKKyMgZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kYXJ3aW4tbGliL3VuaXN0ZC5oIGIvZGFyd2luLWxpYi91bmlzdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzRlMjhkCi0tLSAvZGV2L251bGwKKysrIGIvZGFyd2luLWxpYi91bmlzdGQuaApAQCAtMCwwICsxLDE4NTMgQEAKKy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8KKy8qIFN1YnN0aXR1dGUgZm9yIGFuZCB3cmFwcGVyIGFyb3VuZCA8dW5pc3RkLmg+LgorICAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmIF9fR05VQ19fID49IDMKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKyNlbmRpZgorCisKKy8qIFNwZWNpYWwgaW52b2NhdGlvbiBjb252ZW50aW9uOgorICAgLSBPbiBtaW5ndywgc2V2ZXJhbCBoZWFkZXJzLCBpbmNsdWRpbmcgPHdpbnNvY2syLmg+LCBpbmNsdWRlIDx1bmlzdGQuaD4sCisgICAgIGJ1dCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGJvdGggdGhlIHN5c3RlbSA8dW5pc3RkLmg+IGFuZCA8d2luc29jazIuaD4KKyAgICAgYXJlIGNvbXBsZXRlbHkgaW5jbHVkZWQgYmVmb3JlIHdlIHJlcGxhY2UgZ2V0aG9zdG5hbWUuICAqLworI2lmIDAgJiYgMCBcCisgICYmICFkZWZpbmVkIF9HTF9XSU5TT0NLMl9IX1dJVE5FU1MgJiYgZGVmaW5lZCBfV0lOU09DSzJfSAorLyogPHVuaXN0ZC5oPiBpcyBiZWluZyBpbmRpcmVjdGx5IGluY2x1ZGVkIGZvciB0aGUgZmlyc3QgdGltZSBmcm9tCisgICA8d2luc29jazIuaD47IGF2b2lkIGRlY2xhcmluZyBhbnkgb3ZlcnJpZGVzLiAgKi8KKyMgaWYgMQorIyAgaW5jbHVkZV9uZXh0IDx1bmlzdGQuaD4KKyMgZWxzZQorIyAgZXJyb3IgdW5leHBlY3RlZDsgcmVwb3J0IHRoaXMgdG8gYnVnLWdudWxpYkBnbnUub3JnCisjIGVuZGlmCisjIGRlZmluZSBfR0xfV0lOU09DSzJfSF9XSVRORVNTCisKKy8qIE5vcm1hbCBpbnZvY2F0aW9uLiAgKi8KKyNlbGlmICFkZWZpbmVkIF9HTF9VTklTVERfSAorCisvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisjaWYgMQorIyBpbmNsdWRlX25leHQgPHVuaXN0ZC5oPgorI2VuZGlmCisKKy8qIEdldCBhbGwgcG9zc2libGUgZGVjbGFyYXRpb25zIG9mIGdldGhvc3RuYW1lKCkuICAqLworI2lmIDAgJiYgMCBcCisgICYmICFkZWZpbmVkIF9HTF9JTkNMVURJTkdfV0lOU09DSzJfSAorIyBkZWZpbmUgX0dMX0lOQ0xVRElOR19XSU5TT0NLMl9ICisjIGluY2x1ZGUgPHdpbnNvY2syLmg+CisjIHVuZGVmIF9HTF9JTkNMVURJTkdfV0lOU09DSzJfSAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCBfR0xfVU5JU1REX0ggJiYgIWRlZmluZWQgX0dMX0lOQ0xVRElOR19XSU5TT0NLMl9ICisjZGVmaW5lIF9HTF9VTklTVERfSAorCisvKiBOZXRCU0QgNS4wIG1pcy1kZWZpbmVzIE5VTEwuICBBbHNvIGdldCBzaXplX3QuICAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisvKiBtaW5ndyBkb2Vzbid0IGRlZmluZSB0aGUgU0VFS18qIG9yICpfRklMRU5PIG1hY3JvcyBpbiA8dW5pc3RkLmg+LiAgKi8KKy8qIEN5Z3dpbiAxLjcuMSBkZWNsYXJlcyBzeW1saW5rYXQgaW4gPHN0ZGlvLmg+LCBub3QgaW4gPHVuaXN0ZC5oPi4gICovCisvKiBCdXQgYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zLiAgKi8KKyNpZiAoIShkZWZpbmVkIFNFRUtfQ1VSICYmIGRlZmluZWQgU0VFS19FTkQgJiYgZGVmaW5lZCBTRUVLX1NFVCkgXAorICAgICB8fCAoKDAgfHwgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSykgXAorICAgICAgICAgJiYgZGVmaW5lZCBfX0NZR1dJTl9fKSkgXAorICAgICYmICEgZGVmaW5lZCBfX0dMSUJDX18KKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyNlbmRpZgorCisvKiBDeWd3aW4gMS43LjEgZGVjbGFyZXMgdW5saW5rYXQgaW4gPGZjbnRsLmg+LCBub3QgaW4gPHVuaXN0ZC5oPi4gICovCisvKiBCdXQgYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zLiAgKi8KKyNpZiAoMCB8fCBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLKSAmJiBkZWZpbmVkIF9fQ1lHV0lOX18gXAorICAgICYmICEgZGVmaW5lZCBfX0dMSUJDX18KKyMgaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorCisvKiBtaW5ndyBmYWlscyB0byBkZWNsYXJlIF9leGl0IGluIDx1bmlzdGQuaD4uICAqLworLyogbWluZ3csIE1TVkMsIEJlT1MsIEhhaWt1IGRlY2xhcmUgZW52aXJvbiBpbiA8c3RkbGliLmg+LCBub3QgaW4KKyAgIDx1bmlzdGQuaD4uICAqLworLyogU29sYXJpcyBkZWNsYXJlcyBnZXRjd2Qgbm90IG9ubHkgaW4gPHVuaXN0ZC5oPiBidXQgYWxzbyBpbiA8c3RkbGliLmg+LiAgKi8KKy8qIEJ1dCBhdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9uIG9uIGdsaWJjIHN5c3RlbXMuICAqLworI2lmbmRlZiBfX0dMSUJDX18KKyMgaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKworLyogTmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zIGRlY2xhcmUgY2hkaXIsIGdldGN3ZCwgcm1kaXIgaW4KKyAgIDxpby5oPiBhbmQvb3IgPGRpcmVjdC5oPiwgbm90IGluIDx1bmlzdGQuaD4uCisgICBUaGV5IGFsc28gZGVjbGFyZSBhY2Nlc3MoKSwgY2htb2QoKSwgY2xvc2UoKSwgZHVwKCksIGR1cDIoKSwgaXNhdHR5KCksCisgICBsc2VlaygpLCByZWFkKCksIHVubGluaygpLCB3cml0ZSgpIGluIDxpby5oPi4gICovCisjaWYgKCgwIHx8IDAgfHwgMCBcCisgICAgICB8fCBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLKSBcCisgICAgICYmICgoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fKSkKKyMgaW5jbHVkZSA8aW8uaD4gICAgIC8qIG1pbmd3MzIsIG1pbmd3NjQgKi8KKyMgaW5jbHVkZSA8ZGlyZWN0Lmg+IC8qIG1pbmd3NjQsIE1TVkMgOSAqLworI2VsaWYgKDEgfHwgMCB8fCAxIHx8IDAgXAorICAgICAgIHx8IDAgfHwgMCB8fCAwIHx8IDAgXAorICAgICAgIHx8IGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0spIFwKKyAgICAgICYmICgoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fKQorIyBpbmNsdWRlIDxpby5oPgorI2VuZGlmCisKKy8qIEFJWCBhbmQgT1NGLzEgNS4xIGRlY2xhcmUgZ2V0ZG9tYWlubmFtZSBpbiA8bmV0ZGIuaD4sIG5vdCBpbiA8dW5pc3RkLmg+LgorICAgTm9uU3RvcCBLZXJuZWwgZGVjbGFyZXMgZ2V0aG9zdG5hbWUgaW4gPG5ldGRiLmg+LCBub3QgaW4gPHVuaXN0ZC5oPi4gICovCisvKiBCdXQgYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zLiAgKi8KKyNpZiAoKDAgJiYgKGRlZmluZWQgX0FJWCB8fCBkZWZpbmVkIF9fb3NmX18pKSBcCisgICAgIHx8ICgwICYmIGRlZmluZWQgX19UQU5ERU0pKSBcCisgICAgJiYgIWRlZmluZWQgX19HTElCQ19fCisjIGluY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKworLyogTVNWQyBkZWZpbmVzIG9mZl90IGluIDxzeXMvdHlwZXMuaD4uCisgICBNYXkgYWxzbyBkZWZpbmUgb2ZmX3QgdG8gYSA2NC1iaXQgdHlwZSBvbiBuYXRpdmUgV2luZG93cy4gICovCisjaWYgITEgfHwgMAorLyogR2V0IG9mZl90LiAgKi8KKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2lmICgwIHx8IDAgXAorICAgICB8fCAwIHx8IDAgXAorICAgICB8fCAwIHx8IDAgfHwgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSykKKy8qIEdldCBzc2l6ZV90LiAgKi8KKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworLyogR2V0IGdldG9wdCgpLCBvcHRhcmcsIG9wdGluZCwgb3B0ZXJyLCBvcHRvcHQuCisgICBCdXQgYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zLiAgKi8KKyNpZiAwMSAmJiAhZGVmaW5lZCBfX0dMSUJDX18gJiYgIWRlZmluZWQgX0dMX1NZU1RFTV9HRVRPUFQKKyMgaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZW5kaWYKKworX0dMX0lOTElORV9IRUFERVJfQkVHSU4KKyNpZm5kZWYgX0dMX1VOSVNURF9JTkxJTkUKKyMgZGVmaW5lIF9HTF9VTklTVERfSU5MSU5FIF9HTF9JTkxJTkUKKyNlbmRpZgorCisvKiBUaGUgZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTCBldGMuIGFyZSBjb3BpZWQgaGVyZS4gICovCisjaWZuZGVmIF9HTF9DWFhERUZTX0gKKyNkZWZpbmUgX0dMX0NYWERFRlNfSAorCisvKiBUaGUgdGhyZWUgbW9zdCBmcmVxdWVudCB1c2UgY2FzZXMgb2YgdGhlc2UgbWFjcm9zIGFyZToKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgc3Vic3RpdHV0ZSBmb3IgYSBmdW5jdGlvbiB0aGF0IGlzIG1pc3Npbmcgb24gc29tZQorICAgICBwbGF0Zm9ybXMsIGJ1dCBpcyBkZWNsYXJlZCBhbmQgd29ya3MgZmluZSBvbiB0aGUgcGxhdGZvcm1zIG9uIHdoaWNoCisgICAgIGl0IGV4aXN0czoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmICFASEFWRV9GT09ACisgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIGFsbCBwbGF0Zm9ybXMsCisgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIHBsYXRmb3JtczoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorICAgICAgICMgICB1bmRlZiBmb28KKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworICAgICAgICMgZWxzZQorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIHNvbWUgcGxhdGZvcm1zCisgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIG9mIHRoZW0gYW5kCisgICAgIGlzIGFkZGl0aW9uYWxseSBlaXRoZXIgbWlzc2luZyBvciB1bmRlY2xhcmVkIG9uIHNvbWUgb3RoZXIgcGxhdGZvcm1zOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisgICAgICAgIyAgIHVuZGVmIGZvbworICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CisgICAgICAgIyBlbHNlCisgICAgICAgIyAgaWYgIUBIQVZFX0ZPT0AgICBvciAgIGlmICFASEFWRV9ERUNMX0ZPT0AKKyAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorKi8KKworLyogX0dMX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuICJDIgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4KKyNlbmRpZgorCisvKiBfR0xfRlVOQ0RFQ0xfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGRlY2xhcmVzIGEgcmVwbGFjZW1lbnQgZnVuY3Rpb24sIG5hbWVkIHJwbF9mdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9GVU5DREVDTF9SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICovCisjZGVmaW5lIF9HTF9GVU5DREVDTF9SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0ZVTkNERUNMX1JQTF8xIChycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKQorI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMXzEocnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9FWFRFUk5fQyByZXR0eXBlIHJwbF9mdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKworLyogX0dMX0ZVTkNERUNMX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBkZWNsYXJlcyB0aGUgc3lzdGVtIGZ1bmN0aW9uLCBuYW1lZCBmdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9GVU5DREVDTF9TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICovCisjZGVmaW5lIF9HTF9GVU5DREVDTF9TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0VYVEVSTl9DIHJldHR5cGUgZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisKKy8qIF9HTF9DWFhBTElBU19SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHJwbF9mdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFIGlzIGRlZmluZWQuCisgICBFeGFtcGxlOgorICAgICBfR0xfQ1hYQUxJQVNfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKyAqLworI2RlZmluZSBfR0xfQ1hYQUxJQVNfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycykKKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OnJwbF9mdW5jOyAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gcnBsX2Z1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQKKyAgIGRlY2xhcmF0aW9uLiAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IKKyAgIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpycGxfZnVuYyk7ICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHRoZSBzeXN0ZW0gcHJvdmlkZWQgZnVuY3Rpb24gZnVuYywgaWYgR05VTElCX05BTUVTUEFDRQorICAgaXMgZGVmaW5lZC4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9DWFhBTElBU19TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyAgLyogSWYgd2Ugd2VyZSB0byB3cml0ZQorICAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOworICAgICBsaWtlIGFib3ZlIGluIF9HTF9DWFhBTElBU19SUExfMSwgdGhlIGNvbXBpbGVyIGNvdWxkIG9wdGltaXplIGNhbGxzCisgICAgIGJldHRlciAocmVtb3ZlIGFuIGluZGlyZWN0aW9uIHRocm91Z2ggYSAnc3RhdGljJyBwb2ludGVyIHZhcmlhYmxlKSwKKyAgICAgYnV0IHRoZW4gdGhlIF9HTF9DWFhBTElBU1dBUk4gbWFjcm8gYmVsb3cgd291bGQgY2F1c2UgYSB3YXJuaW5nIG5vdCBvbmx5CisgICAgIGZvciB1c2VzIG9mIDo6ZnVuYyBidXQgYWxzbyBmb3IgdXNlcyBvZiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jLiAgKi8KKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGZ1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgZGVjbGFyYXRpb24uCisgICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvciB0aGF0IHdvdWxkCisgICBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpmdW5jKTsgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMsIHJldHR5cGUyLCBwYXJhbWV0ZXJzMik7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGlzIHBpY2tlZCBhbW9uZyBhIHNldCBvZiBvdmVybG9hZGVkIGZ1bmN0aW9ucywKKyAgIG5hbWVseSB0aGUgb25lIHdpdGggcmV0dHlwZTIgYW5kIHBhcmFtZXRlcnMyLiAgVHdvIGNvbnNlY3V0aXZlIGNhc3RzCisgICBhcmUgdXNlZCB0byBzaWxlbmNlIHRoZSAiY2Fubm90IGZpbmQgYSBtYXRjaCIgYW5kICJpbnZhbGlkIGNvbnZlcnNpb24iCisgICBlcnJvcnMgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisgIC8qIFRoZSBvdXRlciBjYXN0IG11c3QgYmUgYSByZWludGVycHJldF9jYXN0LgorICAgICBUaGUgaW5uZXIgY2FzdDogV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNldCBvZiBvdmVybG9hZGVkCisgICAgIGZ1bmN0aW9ucywgaXQgd29ya3MgYXMgYSBzdGF0aWNfY2FzdDw+LCBjaG9vc2luZyB0aGUgZGVzaWduYXRlZCB2YXJpYW50LgorICAgICBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2luZ2xlIHZhcmlhbnQsIGl0IHdvcmtzIGFzIGEKKyAgICAgcmVpbnRlcnByZXRfY2FzdDw+LiBUaGUgcGFyZW50aGVzaXplZCBjYXN0IHN5bnRheCB3b3JrcyBib3RoIHdheXMuICAqLworIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChyZXR0eXBlMigqKXBhcmFtZXRlcnMyKSg6OmZ1bmMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTV0FSTiAoZnVuYyk7CisgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiA6OmZ1bmMgaXMgdXNlZCBidXQgbm90IHdoZW4KKyAgIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gIGZ1bmMgbXVzdCBiZSBkZWZpbmVkIHdpdGhvdXQgb3ZlcmxvYWRlZAorICAgdmFyaWFudHMuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk5fMSAoZnVuYywgR05VTElCX05BTUVTUEFDRSkKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMShmdW5jLG5hbWVzcGFjZSkgXAorICAgX0dMX0NYWEFMSUFTV0FSTl8yIChmdW5jLCBuYW1lc3BhY2UpCisvKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKyAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworIyBpZiAhX19PUFRJTUlaRV9fCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgX0dMX1dBUk5fT05fVVNFIChmdW5jLCBcCisgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworIyBlbHNlCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNXQVJOMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiB0aGUgZ2l2ZW4gb3ZlcmxvYWRlZCB2YXJpYW50IG9mIDo6ZnVuYworICAgaXMgdXNlZCBidXQgbm90IHdoZW4gR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk4xXzEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdOVUxJQl9OQU1FU1BBQ0UpCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgX0dMX0NYWEFMSUFTV0FSTjFfMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgbmFtZXNwYWNlKQorLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKyMgaWYgIV9fT1BUSU1JWkVfXworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisjZW5kaWYgLyogX0dMX0NYWERFRlNfSCAqLworCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwgaXMgY29waWVkIGhlcmUuICAqLworLyogX0dMX0FSR19OT05OVUxMKChuLC4uLixtKSkgdGVsbHMgdGhlIGNvbXBpbGVyIGFuZCBzdGF0aWMgYW5hbHl6ZXIgdG9vbHMKKyAgIHRoYXQgdGhlIHZhbHVlcyBwYXNzZWQgYXMgYXJndW1lbnRzIG4sIC4uLiwgbSBtdXN0IGJlIG5vbi1OVUxMIHBvaW50ZXJzLgorICAgbiA9IDEgc3RhbmRzIGZvciB0aGUgZmlyc3QgYXJndW1lbnQsIG4gPSAyIGZvciB0aGUgc2Vjb25kIGFyZ3VtZW50IGV0Yy4gICovCisjaWZuZGVmIF9HTF9BUkdfTk9OTlVMTAorIyBpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSB8fCBfX0dOVUNfXyA+IDMKKyMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKSBfX2F0dHJpYnV0ZV9fICgoX19ub25udWxsX18gcGFyYW1zKSkKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpCisjIGVuZGlmCisjZW5kaWYKKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFCisKKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCisvKiBBIGNvbXBpbGVyIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDQuMy4wIGFuZCBsYXRlci4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobWVzc2FnZSkpKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24KKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisjIGVuZGlmCisjZW5kaWYKKworLyogX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuY3Rpb24sIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsICJzdHJpbmciKQorICAgaXMgbGlrZSBfR0xfV0FSTl9PTl9VU0UgKGZ1bmN0aW9uLCAic3RyaW5nIiksIGV4Y2VwdCB0aGF0IHRoZSBmdW5jdGlvbiBpcworICAgZGVjbGFyZWQgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLCBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLAorICAgYW5kIGF0dHJpYnV0ZXMuCisgICBUaGlzIHZhcmlhbnQgaXMgdXNlZnVsIGZvciBvdmVybG9hZGVkIGZ1bmN0aW9ucyBpbiBDKysuIF9HTF9XQVJOX09OX1VTRSBkb2VzCisgICBub3Qgd29yayBpbiB0aGlzIGNhc2UuICAqLworI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0VfQ1hYCisjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyBcCisgICAgIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobXNnKSkpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisvKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBfR0xfV0FSTl9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX0VYVEVSTl9DCisjIGlmIGRlZmluZWQgX19jcGx1c3BsdXMKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4gIkMiCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4KKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIEhpZGUgc29tZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgZnJvbSA8d2luc29jazIuaD4uICAqLworCisjaWYgMCAmJiAwCisjIGlmICFkZWZpbmVkIF9HTF9TWVNfU09DS0VUX0gKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgc29ja2V0CisjICAgZGVmaW5lIHNvY2tldCAgICAgICAgICAgICAgc29ja2V0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisjICAgdW5kZWYgY29ubmVjdAorIyAgIGRlZmluZSBjb25uZWN0ICAgICAgICAgICAgIGNvbm5lY3RfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKyMgICB1bmRlZiBhY2NlcHQKKyMgICBkZWZpbmUgYWNjZXB0ICAgICAgICAgICAgICBhY2NlcHRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKyMgICB1bmRlZiBiaW5kCisjICAgZGVmaW5lIGJpbmQgICAgICAgICAgICAgICAgYmluZF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorIyAgIHVuZGVmIGdldHBlZXJuYW1lCisjICAgZGVmaW5lIGdldHBlZXJuYW1lICAgICAgICAgZ2V0cGVlcm5hbWVfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKyMgICB1bmRlZiBnZXRzb2NrbmFtZQorIyAgIGRlZmluZSBnZXRzb2NrbmFtZSAgICAgICAgIGdldHNvY2tuYW1lX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisjICAgdW5kZWYgZ2V0c29ja29wdAorIyAgIGRlZmluZSBnZXRzb2Nrb3B0ICAgICAgICAgIGdldHNvY2tvcHRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKyMgICB1bmRlZiBsaXN0ZW4KKyMgICBkZWZpbmUgbGlzdGVuICAgICAgICAgICAgICBsaXN0ZW5fdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKyMgICB1bmRlZiByZWN2CisjICAgZGVmaW5lIHJlY3YgICAgICAgICAgICAgICAgcmVjdl91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorIyAgIHVuZGVmIHNlbmQKKyMgICBkZWZpbmUgc2VuZCAgICAgICAgICAgICAgICBzZW5kX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisjICAgdW5kZWYgcmVjdmZyb20KKyMgICBkZWZpbmUgcmVjdmZyb20gICAgICAgICAgICByZWN2ZnJvbV91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorIyAgIHVuZGVmIHNlbmR0bworIyAgIGRlZmluZSBzZW5kdG8gICAgICAgICAgICAgIHNlbmR0b191c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorIyAgIHVuZGVmIHNldHNvY2tvcHQKKyMgICBkZWZpbmUgc2V0c29ja29wdCAgICAgICAgICBzZXRzb2Nrb3B0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisjICAgdW5kZWYgc2h1dGRvd24KKyMgICBkZWZpbmUgc2h1dGRvd24gICAgICAgICAgICBzaHV0ZG93bl91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorIyAgZWxzZQorICAgIF9HTF9XQVJOX09OX1VTRSAoc29ja2V0LAorICAgICAgICAgICAgICAgICAgICAgInNvY2tldCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKyAgICBfR0xfV0FSTl9PTl9VU0UgKGNvbm5lY3QsCisgICAgICAgICAgICAgICAgICAgICAiY29ubmVjdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKyAgICBfR0xfV0FSTl9PTl9VU0UgKGFjY2VwdCwKKyAgICAgICAgICAgICAgICAgICAgICJhY2NlcHQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisgICAgX0dMX1dBUk5fT05fVVNFIChiaW5kLAorICAgICAgICAgICAgICAgICAgICAgImJpbmQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisgICAgX0dMX1dBUk5fT05fVVNFIChnZXRwZWVybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICJnZXRwZWVybmFtZSgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKyAgICBfR0xfV0FSTl9PTl9VU0UgKGdldHNvY2tuYW1lLAorICAgICAgICAgICAgICAgICAgICAgImdldHNvY2tuYW1lKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworICAgIF9HTF9XQVJOX09OX1VTRSAoZ2V0c29ja29wdCwKKyAgICAgICAgICAgICAgICAgICAgICJnZXRzb2Nrb3B0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworICAgIF9HTF9XQVJOX09OX1VTRSAobGlzdGVuLAorICAgICAgICAgICAgICAgICAgICAgImxpc3RlbigpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKyAgICBfR0xfV0FSTl9PTl9VU0UgKHJlY3YsCisgICAgICAgICAgICAgICAgICAgICAicmVjdigpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKyAgICBfR0xfV0FSTl9PTl9VU0UgKHNlbmQsCisgICAgICAgICAgICAgICAgICAgICAic2VuZCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKyAgICBfR0xfV0FSTl9PTl9VU0UgKHJlY3Zmcm9tLAorICAgICAgICAgICAgICAgICAgICAgInJlY3Zmcm9tKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworICAgIF9HTF9XQVJOX09OX1VTRSAoc2VuZHRvLAorICAgICAgICAgICAgICAgICAgICAgInNlbmR0bygpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKyAgICBfR0xfV0FSTl9PTl9VU0UgKHNldHNvY2tvcHQsCisgICAgICAgICAgICAgICAgICAgICAic2V0c29ja29wdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKyAgICBfR0xfV0FSTl9PTl9VU0UgKHNodXRkb3duLAorICAgICAgICAgICAgICAgICAgICAgInNodXRkb3duKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgX0dMX1NZU19TRUxFQ1RfSAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBzZWxlY3QKKyMgICBkZWZpbmUgc2VsZWN0ICAgICAgICAgICAgICBzZWxlY3RfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc2VsZWN0X2gKKyMgIGVsc2UKKyAgICBfR0xfV0FSTl9PTl9VU0UgKHNlbGVjdCwKKyAgICAgICAgICAgICAgICAgICAgICJzZWxlY3QoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc2VsZWN0Lmg+Iik7CisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKworLyogT1MvMiBFTVggbGFja3MgdGhlc2UgbWFjcm9zLiAgKi8KKyNpZm5kZWYgU1RESU5fRklMRU5PCisjIGRlZmluZSBTVERJTl9GSUxFTk8gMAorI2VuZGlmCisjaWZuZGVmIFNURE9VVF9GSUxFTk8KKyMgZGVmaW5lIFNURE9VVF9GSUxFTk8gMQorI2VuZGlmCisjaWZuZGVmIFNUREVSUl9GSUxFTk8KKyMgZGVmaW5lIFNUREVSUl9GSUxFTk8gMgorI2VuZGlmCisKKy8qIEVuc3VyZSAqX09LIG1hY3JvcyBleGlzdC4gICovCisjaWZuZGVmIEZfT0sKKyMgZGVmaW5lIEZfT0sgMAorIyBkZWZpbmUgWF9PSyAxCisjIGRlZmluZSBXX09LIDIKKyMgZGVmaW5lIFJfT0sgNAorI2VuZGlmCisKKworLyogRGVjbGFyZSBvdmVycmlkZGVuIGZ1bmN0aW9ucy4gICovCisKKworI2lmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy8qIFRoZSBhY2Nlc3MoKSBmdW5jdGlvbiBpcyBhIHNlY3VyaXR5IHJpc2suICAqLworX0dMX1dBUk5fT05fVVNFIChhY2Nlc3MsICJ0aGUgYWNjZXNzIGZ1bmN0aW9uIGlzIGEgc2VjdXJpdHkgcmlzayAtICIKKyAgICAgICAgICAgICAgICAgInVzZSB0aGUgZ251bGliIG1vZHVsZSBmYWNjZXNzYXQgaW5zdGVhZCIpOworI2VuZGlmCisKKworI2lmIDAKK19HTF9DWFhBTElBU19TWVMgKGNoZGlyLCBpbnQsIChjb25zdCBjaGFyICpmaWxlKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTV0FSTiAoY2hkaXIpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBjaGRpcgorIyBpZiBIQVZFX1JBV19ERUNMX0NIRElSCitfR0xfV0FSTl9PTl9VU0UgKGNob3duLCAiY2hkaXIgaXMgbm90IGFsd2F5cyBpbiA8dW5pc3RkLmg+IC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgY2hkaXIgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorLyogQ2hhbmdlIHRoZSBvd25lciBvZiBGSUxFIHRvIFVJRCAoaWYgVUlEIGlzIG5vdCAtMSkgYW5kIHRoZSBncm91cCBvZiBGSUxFCisgICB0byBHSUQgKGlmIEdJRCBpcyBub3QgLTEpLiAgRm9sbG93IHN5bWJvbGljIGxpbmtzLgorICAgUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIC0xIGFuZCBlcnJubyBzZXQuCisgICBTZWUgdGhlIFBPU0lYOjIwMDggc3BlY2lmaWNhdGlvbgorICAgPGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Z1bmN0aW9ucy9jaG93bi5odG1sLiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBjaG93bgorIyAgIGRlZmluZSBjaG93biBycGxfY2hvd24KKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChjaG93biwgaW50LCAoY29uc3QgY2hhciAqZmlsZSwgdWlkX3QgdWlkLCBnaWRfdCBnaWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoY2hvd24sIGludCwgKGNvbnN0IGNoYXIgKmZpbGUsIHVpZF90IHVpZCwgZ2lkX3QgZ2lkKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChjaG93biwgaW50LCAoY29uc3QgY2hhciAqZmlsZSwgdWlkX3QgdWlkLCBnaWRfdCBnaWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGNob3duLCBpbnQsIChjb25zdCBjaGFyICpmaWxlLCB1aWRfdCB1aWQsIGdpZF90IGdpZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoY2hvd24pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBjaG93bgorIyBpZiBIQVZFX1JBV19ERUNMX0NIT1dOCitfR0xfV0FSTl9PTl9VU0UgKGNob3duLCAiY2hvd24gZmFpbHMgdG8gZm9sbG93IHN5bWxpbmtzIG9uIHNvbWUgc3lzdGVtcyBhbmQgIgorICAgICAgICAgICAgICAgICAiZG9lc24ndCB0cmVhdCBhIHVpZCBvciBnaWQgb2YgLTEgb24gc29tZSBzeXN0ZW1zIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgY2hvd24gZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMQorIyBpZiAwCisvKiBBdXRvbWF0aWNhbGx5IGluY2x1ZGVkIGJ5IG1vZHVsZXMgdGhhdCBuZWVkIGEgcmVwbGFjZW1lbnQgZm9yIGNsb3NlLiAgKi8KKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgY2xvc2UKKyMgICBkZWZpbmUgY2xvc2UgcnBsX2Nsb3NlCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoY2xvc2UsIGludCwgKGludCBmZCkpOworX0dMX0NYWEFMSUFTX1JQTCAoY2xvc2UsIGludCwgKGludCBmZCkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChjbG9zZSwgaW50LCAoaW50IGZkKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChjbG9zZSk7CisjZWxpZiAwCisjIHVuZGVmIGNsb3NlCisjIGRlZmluZSBjbG9zZSBjbG9zZV91c2VkX3dpdGhvdXRfcmVxdWVzdGluZ19nbnVsaWJfbW9kdWxlX2Nsb3NlCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGNsb3NlCisvKiBBc3N1bWUgY2xvc2UgaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAoY2xvc2UsICJjbG9zZSBkb2VzIG5vdCBwb3J0YWJseSB3b3JrIG9uIHNvY2tldHMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBjbG9zZSBmb3IgcG9ydGFiaWxpdHkiKTsKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGR1cCBycGxfZHVwCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZHVwLCBpbnQsIChpbnQgb2xkZmQpKTsKK19HTF9DWFhBTElBU19SUEwgKGR1cCwgaW50LCAoaW50IG9sZGZkKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGR1cCwgaW50LCAoaW50IG9sZGZkKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChkdXApOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBkdXAKKyMgaWYgSEFWRV9SQVdfREVDTF9EVVAKK19HTF9XQVJOX09OX1VTRSAoZHVwLCAiZHVwIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBkdXAgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMQorLyogQ29weSB0aGUgZmlsZSBkZXNjcmlwdG9yIE9MREZEIGludG8gZmlsZSBkZXNjcmlwdG9yIE5FV0ZELiAgRG8gbm90aGluZyBpZgorICAgTkVXRkQgPSBPTERGRCwgb3RoZXJ3aXNlIGNsb3NlIE5FV0ZEIGZpcnN0IGlmIGl0IGlzIG9wZW4uCisgICBSZXR1cm4gbmV3ZmQgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIC0xIGFuZCBlcnJubyBzZXQuCisgICBTZWUgdGhlIFBPU0lYOjIwMDggc3BlY2lmaWNhdGlvbgorICAgPGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Z1bmN0aW9ucy9kdXAyLmh0bWw+LiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgZHVwMiBycGxfZHVwMgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGR1cDIsIGludCwgKGludCBvbGRmZCwgaW50IG5ld2ZkKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChkdXAyLCBpbnQsIChpbnQgb2xkZmQsIGludCBuZXdmZCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoZHVwMiwgaW50LCAoaW50IG9sZGZkLCBpbnQgbmV3ZmQpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChkdXAyLCBpbnQsIChpbnQgb2xkZmQsIGludCBuZXdmZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZHVwMik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGR1cDIKKyMgaWYgSEFWRV9SQVdfREVDTF9EVVAyCitfR0xfV0FSTl9PTl9VU0UgKGR1cDIsICJkdXAyIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBkdXAyIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKy8qIENvcHkgdGhlIGZpbGUgZGVzY3JpcHRvciBPTERGRCBpbnRvIGZpbGUgZGVzY3JpcHRvciBORVdGRCwgd2l0aCB0aGUKKyAgIHNwZWNpZmllZCBmbGFncy4KKyAgIFRoZSBmbGFncyBhcmUgYSBiaXRtYXNrLCBwb3NzaWJseSBpbmNsdWRpbmcgT19DTE9FWEVDIChkZWZpbmVkIGluIDxmY250bC5oPikKKyAgIGFuZCBPX1RFWFQsIE9fQklOQVJZIChkZWZpbmVkIGluICJiaW5hcnktaW8uaCIpLgorICAgQ2xvc2UgTkVXRkQgZmlyc3QgaWYgaXQgaXMgb3Blbi4KKyAgIFJldHVybiBuZXdmZCBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgLTEgYW5kIGVycm5vIHNldC4KKyAgIFNlZSB0aGUgTGludXggbWFuIHBhZ2UgYXQKKyAgIDxodHRwOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL21hbi1wYWdlcy9vbmxpbmUvcGFnZXMvbWFuMi9kdXAzLjIuaHRtbD4uICAqLworIyBpZiAxCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBkdXAzIHJwbF9kdXAzCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZHVwMywgaW50LCAoaW50IG9sZGZkLCBpbnQgbmV3ZmQsIGludCBmbGFncykpOworX0dMX0NYWEFMSUFTX1JQTCAoZHVwMywgaW50LCAoaW50IG9sZGZkLCBpbnQgbmV3ZmQsIGludCBmbGFncykpOworIyBlbHNlCitfR0xfRlVOQ0RFQ0xfU1lTIChkdXAzLCBpbnQsIChpbnQgb2xkZmQsIGludCBuZXdmZCwgaW50IGZsYWdzKSk7CitfR0xfQ1hYQUxJQVNfU1lTIChkdXAzLCBpbnQsIChpbnQgb2xkZmQsIGludCBuZXdmZCwgaW50IGZsYWdzKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChkdXAzKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZHVwMworIyBpZiBIQVZFX1JBV19ERUNMX0RVUDMKK19HTF9XQVJOX09OX1VTRSAoZHVwMywgImR1cDMgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGR1cDMgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMQorIyBpZiAhMAorLyogU2V0IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgdmFsdWVzLiAgQW4gYXJyYXkgb2Ygc3RyaW5ncyBvZiB0aGUgZm9ybQorICAgIlZBUklBQkxFPVZBTFVFIiwgdGVybWluYXRlZCB3aXRoIGEgTlVMTC4gICovCisjICBpZiBkZWZpbmVkIF9fQVBQTEVfXyAmJiBkZWZpbmVkIF9fTUFDSF9fCisjICAgaW5jbHVkZSA8Y3J0X2V4dGVybnMuaD4KKyMgICBkZWZpbmUgZW52aXJvbiAoKl9OU0dldEVudmlyb24gKCkpCisjICBlbHNlCisjICAgaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworIyAgIGVuZGlmCitleHRlcm4gY2hhciAqKmVudmlyb247CisjICAgaWZkZWYgX19jcGx1c3BsdXMKK30KKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgaWYgSEFWRV9SQVdfREVDTF9FTlZJUk9OCitfR0xfVU5JU1REX0lOTElORSBjaGFyICoqKgorcnBsX2Vudmlyb24gKHZvaWQpCit7CisgIHJldHVybiAmZW52aXJvbjsKK30KK19HTF9XQVJOX09OX1VTRSAocnBsX2Vudmlyb24sICJlbnZpcm9uIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBlbnZpcm9uIGZvciBwb3J0YWJpbGl0eSIpOworIyAgdW5kZWYgZW52aXJvbgorIyAgZGVmaW5lIGVudmlyb24gKCpycGxfZW52aXJvbiAoKSkKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisvKiBMaWtlIGFjY2VzcygpLCBleGNlcHQgdGhhdCBpdCB1c2VzIHRoZSBlZmZlY3RpdmUgdXNlciBpZCBhbmQgZ3JvdXAgaWQgb2YKKyAgIHRoZSBjdXJyZW50IHByb2Nlc3MuICAqLworIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoZXVpZGFjY2VzcywgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBtb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZXVpZGFjY2VzcywgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBtb2RlKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChldWlkYWNjZXNzKTsKKyMgaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLyogTGlrZSBhY2Nlc3MoKSwgdGhpcyBmdW5jdGlvbiBpcyBhIHNlY3VyaXR5IHJpc2suICAqLworX0dMX1dBUk5fT05fVVNFIChldWlkYWNjZXNzLCAidGhlIGV1aWRhY2Nlc3MgZnVuY3Rpb24gaXMgYSBzZWN1cml0eSByaXNrIC0gIgorICAgICAgICAgICAgICAgICAidXNlIHRoZSBnbnVsaWIgbW9kdWxlIGZhY2Nlc3NhdCBpbnN0ZWFkIik7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGV1aWRhY2Nlc3MKKyMgaWYgSEFWRV9SQVdfREVDTF9FVUlEQUNDRVNTCitfR0xfV0FSTl9PTl9VU0UgKGV1aWRhY2Nlc3MsICJldWlkYWNjZXNzIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBldWlkYWNjZXNzIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGZhY2Nlc3NhdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgaW50IG1vZGUsIGludCBmbGFnKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZhY2Nlc3NhdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgaW50IG1vZGUsIGludCBmbGFnKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChmYWNjZXNzYXQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmYWNjZXNzYXQKKyMgaWYgSEFWRV9SQVdfREVDTF9GQUNDRVNTQVQKK19HTF9XQVJOX09OX1VTRSAoZmFjY2Vzc2F0LCAiZmFjY2Vzc2F0IGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZhY2Nlc3NhdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisvKiBDaGFuZ2UgdGhlIHByb2Nlc3MnIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIGRpcmVjdG9yeSBvbiB3aGljaAorICAgdGhlIGdpdmVuIGZpbGUgZGVzY3JpcHRvciBpcyBvcGVuLgorICAgUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIC0xIGFuZCBlcnJubyBzZXQuCisgICBTZWUgdGhlIFBPU0lYOjIwMDggc3BlY2lmaWNhdGlvbgorICAgPGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Z1bmN0aW9ucy9mY2hkaXIuaHRtbD4uICAqLworIyBpZiAhIDEKK19HTF9GVU5DREVDTF9TWVMgKGZjaGRpciwgaW50LCAoaW50IC8qZmQqLykpOworCisvKiBHbnVsaWIgaW50ZXJuYWwgaG9va3MgbmVlZGVkIHRvIG1haW50YWluIHRoZSBmY2hkaXIgbWV0YWRhdGEuICAqLworX0dMX0VYVEVSTl9DIGludCBfZ2xfcmVnaXN0ZXJfZmQgKGludCBmZCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCisgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKTsKK19HTF9FWFRFUk5fQyB2b2lkIF9nbF91bnJlZ2lzdGVyX2ZkIChpbnQgZmQpOworX0dMX0VYVEVSTl9DIGludCBfZ2xfcmVnaXN0ZXJfZHVwIChpbnQgb2xkZmQsIGludCBuZXdmZCk7CitfR0xfRVhURVJOX0MgY29uc3QgY2hhciAqX2dsX2RpcmVjdG9yeV9uYW1lIChpbnQgZmQpOworCisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChmY2hkaXIsIGludCwgKGludCAvKmZkKi8pKTsKKyMgIGVuZGlmCisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmY2hkaXIsIGludCwgKGludCAvKmZkKi8pKTsKK19HTF9DWFhBTElBU1dBUk4gKGZjaGRpcik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZjaGRpcgorIyBpZiBIQVZFX1JBV19ERUNMX0ZDSERJUgorX0dMX1dBUk5fT05fVVNFIChmY2hkaXIsICJmY2hkaXIgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZjaGRpciBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZmNob3duYXQKKyMgICBkZWZpbmUgZmNob3duYXQgcnBsX2ZjaG93bmF0CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZmNob3duYXQsIGludCwgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWRfdCBvd25lciwgZ2lkX3QgZ3JvdXAsIGludCBmbGFnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKGZjaG93bmF0LCBpbnQsIChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkX3Qgb3duZXIsIGdpZF90IGdyb3VwLCBpbnQgZmxhZykpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoZmNob3duYXQsIGludCwgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWRfdCBvd25lciwgZ2lkX3QgZ3JvdXAsIGludCBmbGFnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmY2hvd25hdCwgaW50LCAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZF90IG93bmVyLCBnaWRfdCBncm91cCwgaW50IGZsYWcpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZjaG93bmF0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZmNob3duYXQKKyMgaWYgSEFWRV9SQVdfREVDTF9GQ0hPV05BVAorX0dMX1dBUk5fT05fVVNFIChmY2hvd25hdCwgImZjaG93bmF0IGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG9wZW5hdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisvKiBTeW5jaHJvbml6ZSBjaGFuZ2VzIHRvIGEgZmlsZS4KKyAgIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSAtMSBhbmQgZXJybm8gc2V0LgorICAgU2VlIFBPU0lYOjIwMDggc3BlY2lmaWNhdGlvbgorICAgPGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Z1bmN0aW9ucy9mZGF0YXN5bmMuaHRtbD4uICAqLworIyBpZiAhMSB8fCAhMQorX0dMX0ZVTkNERUNMX1NZUyAoZmRhdGFzeW5jLCBpbnQsIChpbnQgZmQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZkYXRhc3luYywgaW50LCAoaW50IGZkKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChmZGF0YXN5bmMpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmZGF0YXN5bmMKKyMgaWYgSEFWRV9SQVdfREVDTF9GREFUQVNZTkMKK19HTF9XQVJOX09OX1VTRSAoZmRhdGFzeW5jLCAiZmRhdGFzeW5jIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmZGF0YXN5bmMgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorLyogU3luY2hyb25pemUgY2hhbmdlcywgaW5jbHVkaW5nIG1ldGFkYXRhLCB0byBhIGZpbGUuCisgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgLTEgYW5kIGVycm5vIHNldC4KKyAgIFNlZSBQT1NJWDoyMDA4IHNwZWNpZmljYXRpb24KKyAgIDxodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9mdW5jdGlvbnMvZnN5bmMuaHRtbD4uICAqLworIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoZnN5bmMsIGludCwgKGludCBmZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZnN5bmMsIGludCwgKGludCBmZCkpOworX0dMX0NYWEFMSUFTV0FSTiAoZnN5bmMpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmc3luYworIyBpZiBIQVZFX1JBV19ERUNMX0ZTWU5DCitfR0xfV0FSTl9PTl9VU0UgKGZzeW5jLCAiZnN5bmMgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZzeW5jIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKy8qIENoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZmlsZSB0byB3aGljaCBGRCBpcyBvcGVuZWQgdG8gYmVjb21lIGVxdWFsIHRvIExFTkdUSC4KKyAgIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSAtMSBhbmQgZXJybm8gc2V0LgorICAgU2VlIHRoZSBQT1NJWDoyMDA4IHNwZWNpZmljYXRpb24KKyAgIDxodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9mdW5jdGlvbnMvZnRydW5jYXRlLmh0bWw+LiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmdHJ1bmNhdGUKKyMgICBkZWZpbmUgZnRydW5jYXRlIHJwbF9mdHJ1bmNhdGUKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmdHJ1bmNhdGUsIGludCwgKGludCBmZCwgb2ZmX3QgbGVuZ3RoKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmdHJ1bmNhdGUsIGludCwgKGludCBmZCwgb2ZmX3QgbGVuZ3RoKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChmdHJ1bmNhdGUsIGludCwgKGludCBmZCwgb2ZmX3QgbGVuZ3RoKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZnRydW5jYXRlLCBpbnQsIChpbnQgZmQsIG9mZl90IGxlbmd0aCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZnRydW5jYXRlKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZnRydW5jYXRlCisjIGlmIEhBVkVfUkFXX0RFQ0xfRlRSVU5DQVRFCitfR0xfV0FSTl9PTl9VU0UgKGZ0cnVuY2F0ZSwgImZ0cnVuY2F0ZSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZnRydW5jYXRlIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKy8qIEdldCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSwgYW5kIHB1dCBpdCBpbiBTSVpFIGJ5dGVzCisgICBvZiBCVUYuCisgICBSZXR1cm4gQlVGIGlmIHN1Y2Nlc3NmdWwsIG9yIE5VTEwgaWYgdGhlIGRpcmVjdG9yeSBjb3VsZG4ndCBiZSBkZXRlcm1pbmVkCisgICBvciBTSVpFIHdhcyB0b28gc21hbGwuCisgICBTZWUgdGhlIFBPU0lYOjIwMDggc3BlY2lmaWNhdGlvbgorICAgPGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Z1bmN0aW9ucy9nZXRjd2QuaHRtbD4uCisgICBBZGRpdGlvbmFsbHksIHRoZSBnbnVsaWIgbW9kdWxlICdnZXRjd2QnIGd1YXJhbnRlZXMgdGhlIGZvbGxvd2luZyBHTlUKKyAgIGV4dGVuc2lvbjogSWYgQlVGIGlzIE5VTEwsIGFuIGFycmF5IGlzIGFsbG9jYXRlZCB3aXRoICdtYWxsb2MnOyB0aGUgYXJyYXkKKyAgIGlzIFNJWkUgYnl0ZXMgbG9uZywgdW5sZXNzIFNJWkUgPT0gMCwgaW4gd2hpY2ggY2FzZSBpdCBpcyBhcyBiaWcgYXMKKyAgIG5lY2Vzc2FyeS4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGdldGN3ZCBycGxfZ2V0Y3dkCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZ2V0Y3dkLCBjaGFyICosIChjaGFyICpidWYsIHNpemVfdCBzaXplKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChnZXRjd2QsIGNoYXIgKiwgKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpKTsKKyMgZWxzZQorLyogTmVlZCB0byBjYXN0LCBiZWNhdXNlIG9uIG1pbmd3LCB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUuICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUIChnZXRjd2QsIGNoYXIgKiwgKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGdldGN3ZCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGdldGN3ZAorIyBpZiBIQVZFX1JBV19ERUNMX0dFVENXRAorX0dMX1dBUk5fT05fVVNFIChnZXRjd2QsICJnZXRjd2QgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGdldGN3ZCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisvKiBSZXR1cm4gdGhlIE5JUyBkb21haW4gbmFtZSBvZiB0aGUgbWFjaGluZS4KKyAgIFdBUk5JTkchIFRoZSBOSVMgZG9tYWluIG5hbWUgaXMgdW5yZWxhdGVkIHRvIHRoZSBmdWxseSBxdWFsaWZpZWQgaG9zdCBuYW1lCisgICAgICAgICAgICBvZiB0aGUgbWFjaGluZS4gIEl0IGlzIGFsc28gdW5yZWxhdGVkIHRvIGVtYWlsIGFkZHJlc3Nlcy4KKyAgIFdBUk5JTkchIFRoZSBOSVMgZG9tYWluIG5hbWUgaXMgdXN1YWxseSB0aGUgZW1wdHkgc3RyaW5nIG9yICIobm9uZSkiIHdoZW4KKyAgICAgICAgICAgIG5vdCB1c2luZyBOSVMuCisKKyAgIFB1dCB1cCB0byBMRU4gYnl0ZXMgb2YgdGhlIE5JUyBkb21haW4gbmFtZSBpbnRvIE5BTUUuCisgICBOdWxsIHRlcm1pbmF0ZSBpdCBpZiB0aGUgbmFtZSBpcyBzaG9ydGVyIHRoYW4gTEVOLgorICAgSWYgdGhlIE5JUyBkb21haW4gbmFtZSBpcyBsb25nZXIgdGhhbiBMRU4sIHNldCBlcnJubyA9IEVJTlZBTCBhbmQgcmV0dXJuIC0xLgorICAgUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIHNldCBlcnJubyBhbmQgcmV0dXJuIC0xLiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBnZXRkb21haW5uYW1lCisjICAgZGVmaW5lIGdldGRvbWFpbm5hbWUgcnBsX2dldGRvbWFpbm5hbWUKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChnZXRkb21haW5uYW1lLCBpbnQsIChjaGFyICpuYW1lLCBzaXplX3QgbGVuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZ2V0ZG9tYWlubmFtZSwgaW50LCAoY2hhciAqbmFtZSwgc2l6ZV90IGxlbikpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoZ2V0ZG9tYWlubmFtZSwgaW50LCAoY2hhciAqbmFtZSwgc2l6ZV90IGxlbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChnZXRkb21haW5uYW1lLCBpbnQsIChjaGFyICpuYW1lLCBzaXplX3QgbGVuKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChnZXRkb21haW5uYW1lKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZ2V0ZG9tYWlubmFtZQorIyBpZiBIQVZFX1JBV19ERUNMX0dFVERPTUFJTk5BTUUKK19HTF9XQVJOX09OX1VTRSAoZ2V0ZG9tYWlubmFtZSwgImdldGRvbWFpbm5hbWUgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGdldGRvbWFpbm5hbWUgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMQorLyogUmV0dXJuIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmaWxlIGRlc2NyaXB0b3JzIGluIHRoZSBjdXJyZW50IHByb2Nlc3MuCisgICBJbiBQT1NJWCwgdGhpcyBpcyBzYW1lIGFzIHN5c2NvbmYgKF9TQ19PUEVOX01BWCkuICAqLworIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoZ2V0ZHRhYmxlc2l6ZSwgaW50LCAodm9pZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZ2V0ZHRhYmxlc2l6ZSwgaW50LCAodm9pZCkpOworX0dMX0NYWEFMSUFTV0FSTiAoZ2V0ZHRhYmxlc2l6ZSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGdldGR0YWJsZXNpemUKKyMgaWYgSEFWRV9SQVdfREVDTF9HRVREVEFCTEVTSVpFCitfR0xfV0FSTl9PTl9VU0UgKGdldGR0YWJsZXNpemUsICJnZXRkdGFibGVzaXplIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBnZXRkdGFibGVzaXplIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKy8qIFJldHVybiB0aGUgc3VwcGxlbWVudGFsIGdyb3VwcyB0aGF0IHRoZSBjdXJyZW50IHByb2Nlc3MgYmVsb25ncyB0by4KKyAgIEl0IGlzIHVuc3BlY2lmaWVkIHdoZXRoZXIgdGhlIGVmZmVjdGl2ZSBncm91cCBpZCBpcyBpbiB0aGUgbGlzdC4KKyAgIElmIE4gaXMgMCwgcmV0dXJuIHRoZSBncm91cCBjb3VudDsgb3RoZXJ3aXNlLCBOIGRlc2NyaWJlcyBob3cgbWFueQorICAgZW50cmllcyBhcmUgYXZhaWxhYmxlIGluIEdST1VQUy4gIFJldHVybiAtMSBhbmQgc2V0IGVycm5vIGlmIE4gaXMKKyAgIG5vdCAwIGFuZCBub3QgbGFyZ2UgZW5vdWdoLiAgRmFpbHMgd2l0aCBFTk9TWVMgb24gc29tZSBzeXN0ZW1zLiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBnZXRncm91cHMKKyMgICBkZWZpbmUgZ2V0Z3JvdXBzIHJwbF9nZXRncm91cHMKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChnZXRncm91cHMsIGludCwgKGludCBuLCBnaWRfdCAqZ3JvdXBzKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChnZXRncm91cHMsIGludCwgKGludCBuLCBnaWRfdCAqZ3JvdXBzKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChnZXRncm91cHMsIGludCwgKGludCBuLCBnaWRfdCAqZ3JvdXBzKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZ2V0Z3JvdXBzLCBpbnQsIChpbnQgbiwgZ2lkX3QgKmdyb3VwcykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZ2V0Z3JvdXBzKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZ2V0Z3JvdXBzCisjIGlmIEhBVkVfUkFXX0RFQ0xfR0VUR1JPVVBTCitfR0xfV0FSTl9PTl9VU0UgKGdldGdyb3VwcywgImdldGdyb3VwcyBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZ2V0Z3JvdXBzIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKy8qIFJldHVybiB0aGUgc3RhbmRhcmQgaG9zdCBuYW1lIG9mIHRoZSBtYWNoaW5lLgorICAgV0FSTklORyEgVGhlIGhvc3QgbmFtZSBtYXkgb3IgbWF5IG5vdCBiZSBmdWxseSBxdWFsaWZpZWQuCisKKyAgIFB1dCB1cCB0byBMRU4gYnl0ZXMgb2YgdGhlIGhvc3QgbmFtZSBpbnRvIE5BTUUuCisgICBOdWxsIHRlcm1pbmF0ZSBpdCBpZiB0aGUgbmFtZSBpcyBzaG9ydGVyIHRoYW4gTEVOLgorICAgSWYgdGhlIGhvc3QgbmFtZSBpcyBsb25nZXIgdGhhbiBMRU4sIHNldCBlcnJubyA9IEVJTlZBTCBhbmQgcmV0dXJuIC0xLgorICAgUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIHNldCBlcnJubyBhbmQgcmV0dXJuIC0xLiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBnZXRob3N0bmFtZQorIyAgIGRlZmluZSBnZXRob3N0bmFtZSBycGxfZ2V0aG9zdG5hbWUKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChnZXRob3N0bmFtZSwgaW50LCAoY2hhciAqbmFtZSwgc2l6ZV90IGxlbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChnZXRob3N0bmFtZSwgaW50LCAoY2hhciAqbmFtZSwgc2l6ZV90IGxlbikpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoZ2V0aG9zdG5hbWUsIGludCwgKGNoYXIgKm5hbWUsIHNpemVfdCBsZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKKy8qIE5lZWQgdG8gY2FzdCwgYmVjYXVzZSBvbiBTb2xhcmlzIDEwIGFuZCBPU0YvMSA1LjEgc3lzdGVtcywgdGhlIHNlY29uZAorICAgcGFyYW1ldGVyIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuLiAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVCAoZ2V0aG9zdG5hbWUsIGludCwgKGNoYXIgKm5hbWUsIHNpemVfdCBsZW4pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGdldGhvc3RuYW1lKTsKKyNlbGlmIDAKKyMgdW5kZWYgZ2V0aG9zdG5hbWUKKyMgZGVmaW5lIGdldGhvc3RuYW1lIGdldGhvc3RuYW1lX3VzZWRfd2l0aG91dF9yZXF1ZXN0aW5nX2dudWxpYl9tb2R1bGVfZ2V0aG9zdG5hbWUKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZ2V0aG9zdG5hbWUKKyMgaWYgSEFWRV9SQVdfREVDTF9HRVRIT1NUTkFNRQorX0dMX1dBUk5fT05fVVNFIChnZXRob3N0bmFtZSwgImdldGhvc3RuYW1lIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBnZXRob3N0bmFtZSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisvKiBSZXR1cm5zIHRoZSB1c2VyJ3MgbG9naW4gbmFtZSwgb3IgTlVMTCBpZiBpdCBjYW5ub3QgYmUgZm91bmQuICBVcG9uIGVycm9yLAorICAgcmV0dXJucyBOVUxMIHdpdGggZXJybm8gc2V0LgorCisgICBTZWUgPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hzaC9nZXRsb2dpbi5odG1sPi4KKworICAgTW9zdCBwcm9ncmFtcyBkb24ndCBuZWVkIHRvIHVzZSB0aGlzIGZ1bmN0aW9uLCBiZWNhdXNlIHRoZSBpbmZvcm1hdGlvbiBpcworICAgYXZhaWxhYmxlIHRocm91Z2ggZW52aXJvbm1lbnQgdmFyaWFibGVzOgorICAgICAke0xPR05BTUUtJFVTRVJ9ICAgICAgICBvbiBVbml4IHBsYXRmb3JtcywKKyAgICAgJFVTRVJOQU1FICAgICAgICAgICAgICAgb24gbmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zLgorICovCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChnZXRsb2dpbiwgY2hhciAqLCAodm9pZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZ2V0bG9naW4sIGNoYXIgKiwgKHZvaWQpKTsKK19HTF9DWFhBTElBU1dBUk4gKGdldGxvZ2luKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZ2V0bG9naW4KKyMgaWYgSEFWRV9SQVdfREVDTF9HRVRMT0dJTgorX0dMX1dBUk5fT05fVVNFIChnZXRsb2dpbiwgImdldGxvZ2luIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBnZXRsb2dpbiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisvKiBDb3BpZXMgdGhlIHVzZXIncyBsb2dpbiBuYW1lIHRvIE5BTUUuCisgICBUaGUgYXJyYXkgcG9pbnRlZCB0byBieSBOQU1FIGhhcyByb29tIGZvciBTSVpFIGJ5dGVzLgorCisgICBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bC4gIFVwb24gZXJyb3IsIGFuIGVycm9yIG51bWJlciBpcyByZXR1cm5lZCwgb3IgLTEgaW4KKyAgIHRoZSBjYXNlIHRoYXQgdGhlIGxvZ2luIG5hbWUgY2Fubm90IGJlIGZvdW5kIGJ1dCBubyBzcGVjaWZpYyBlcnJvciBpcworICAgcHJvdmlkZWQgKHRoaXMgY2FzZSBpcyBob3BlZnVsbHkgcmFyZSBidXQgaXMgbGVmdCBvcGVuIGJ5IHRoZSBQT1NJWCBzcGVjKS4KKworICAgU2VlIDxodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjN4c2gvZ2V0bG9naW4uaHRtbD4uCisKKyAgIE1vc3QgcHJvZ3JhbXMgZG9uJ3QgbmVlZCB0byB1c2UgdGhpcyBmdW5jdGlvbiwgYmVjYXVzZSB0aGUgaW5mb3JtYXRpb24gaXMKKyAgIGF2YWlsYWJsZSB0aHJvdWdoIGVudmlyb25tZW50IHZhcmlhYmxlczoKKyAgICAgJHtMT0dOQU1FLSRVU0VSfSAgICAgICAgb24gVW5peCBwbGF0Zm9ybXMsCisgICAgICRVU0VSTkFNRSAgICAgICAgICAgICAgIG9uIG5hdGl2ZSBXaW5kb3dzIHBsYXRmb3Jtcy4KKyAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBnZXRsb2dpbl9yIHJwbF9nZXRsb2dpbl9yCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZ2V0bG9naW5fciwgaW50LCAoY2hhciAqbmFtZSwgc2l6ZV90IHNpemUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChnZXRsb2dpbl9yLCBpbnQsIChjaGFyICpuYW1lLCBzaXplX3Qgc2l6ZSkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoZ2V0bG9naW5fciwgaW50LCAoY2hhciAqbmFtZSwgc2l6ZV90IHNpemUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorLyogTmVlZCB0byBjYXN0LCBiZWNhdXNlIG9uIFNvbGFyaXMgMTAgc3lzdGVtcywgdGhlIHNlY29uZCBhcmd1bWVudCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZS4gICovCitfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKGdldGxvZ2luX3IsIGludCwgKGNoYXIgKm5hbWUsIHNpemVfdCBzaXplKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChnZXRsb2dpbl9yKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZ2V0bG9naW5fcgorIyBpZiBIQVZFX1JBV19ERUNMX0dFVExPR0lOX1IKK19HTF9XQVJOX09OX1VTRSAoZ2V0bG9naW5fciwgImdldGxvZ2luX3IgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGdldGxvZ2luX3IgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBnZXRwYWdlc2l6ZSBycGxfZ2V0cGFnZXNpemUKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChnZXRwYWdlc2l6ZSwgaW50LCAodm9pZCkpOworX0dMX0NYWEFMSUFTX1JQTCAoZ2V0cGFnZXNpemUsIGludCwgKHZvaWQpKTsKKyMgZWxzZQorIyAgaWYgITEKKyMgICBpZiAhZGVmaW5lZCBnZXRwYWdlc2l6ZQorLyogVGhpcyBpcyBmb3IgUE9TSVggc3lzdGVtcy4gICovCisjICAgIGlmICFkZWZpbmVkIF9nbF9nZXRwYWdlc2l6ZSAmJiBkZWZpbmVkIF9TQ19QQUdFU0laRQorIyAgICAgaWYgISAoZGVmaW5lZCBfX1ZNUyAmJiBfX1ZNU19WRVIgPCA3MDAwMDAwMCkKKyMgICAgICBkZWZpbmUgX2dsX2dldHBhZ2VzaXplKCkgc3lzY29uZiAoX1NDX1BBR0VTSVpFKQorIyAgICAgZW5kaWYKKyMgICAgZW5kaWYKKy8qIFRoaXMgaXMgZm9yIG9sZGVyIFZNUy4gICovCisjICAgIGlmICFkZWZpbmVkIF9nbF9nZXRwYWdlc2l6ZSAmJiBkZWZpbmVkIF9fVk1TCisjICAgICBpZmRlZiBfX0FMUEhBCisjICAgICAgZGVmaW5lIF9nbF9nZXRwYWdlc2l6ZSgpIDgxOTIKKyMgICAgIGVsc2UKKyMgICAgICBkZWZpbmUgX2dsX2dldHBhZ2VzaXplKCkgNTEyCisjICAgICBlbmRpZgorIyAgICBlbmRpZgorLyogVGhpcyBpcyBmb3IgQmVPUy4gICovCisjICAgIGlmICFkZWZpbmVkIF9nbF9nZXRwYWdlc2l6ZSAmJiAwCisjICAgICBpbmNsdWRlIDxPUy5oPgorIyAgICAgaWYgZGVmaW5lZCBCX1BBR0VfU0laRQorIyAgICAgIGRlZmluZSBfZ2xfZ2V0cGFnZXNpemUoKSBCX1BBR0VfU0laRQorIyAgICAgZW5kaWYKKyMgICAgZW5kaWYKKy8qIFRoaXMgaXMgZm9yIEFtaWdhT1M0LjAuICAqLworIyAgICBpZiAhZGVmaW5lZCBfZ2xfZ2V0cGFnZXNpemUgJiYgZGVmaW5lZCBfX2FtaWdhb3M0X18KKyMgICAgIGRlZmluZSBfZ2xfZ2V0cGFnZXNpemUoKSAyMDQ4CisjICAgIGVuZGlmCisvKiBUaGlzIGlzIGZvciBvbGRlciBVbml4IHN5c3RlbXMuICAqLworIyAgICBpZiAhZGVmaW5lZCBfZ2xfZ2V0cGFnZXNpemUgJiYgMAorIyAgICAgaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjICAgICBpZmRlZiBFWEVDX1BBR0VTSVpFCisjICAgICAgZGVmaW5lIF9nbF9nZXRwYWdlc2l6ZSgpIEVYRUNfUEFHRVNJWkUKKyMgICAgIGVsc2UKKyMgICAgICBpZmRlZiBOQlBHCisjICAgICAgIGlmbmRlZiBDTFNJWkUKKyMgICAgICAgIGRlZmluZSBDTFNJWkUgMQorIyAgICAgICBlbmRpZgorIyAgICAgICBkZWZpbmUgX2dsX2dldHBhZ2VzaXplKCkgKE5CUEcgKiBDTFNJWkUpCisjICAgICAgZWxzZQorIyAgICAgICBpZmRlZiBOQlBDCisjICAgICAgICBkZWZpbmUgX2dsX2dldHBhZ2VzaXplKCkgTkJQQworIyAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgICAgZGVmaW5lIGdldHBhZ2VzaXplKCkgX2dsX2dldHBhZ2VzaXplICgpCisjICAgIGVsc2UKKyMgICAgIGlmICFHTlVMSUJfZGVmaW5lZF9nZXRwYWdlc2l6ZV9mdW5jdGlvbgorX0dMX1VOSVNURF9JTkxJTkUgaW50CitnZXRwYWdlc2l6ZSAoKQoreworICByZXR1cm4gX2dsX2dldHBhZ2VzaXplICgpOworfQorIyAgICAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9nZXRwYWdlc2l6ZV9mdW5jdGlvbiAxCisjICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgIGVuZGlmCisjICBlbmRpZgorLyogTmVlZCB0byBjYXN0LCBiZWNhdXNlIG9uIEN5Z3dpbiAxLjUueCBzeXN0ZW1zLCB0aGUgcmV0dXJuIHR5cGUgaXMgc2l6ZV90LiAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVCAoZ2V0cGFnZXNpemUsIGludCwgKHZvaWQpKTsKKyMgZW5kaWYKKyMgaWYgMQorX0dMX0NYWEFMSUFTV0FSTiAoZ2V0cGFnZXNpemUpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBnZXRwYWdlc2l6ZQorIyBpZiBIQVZFX1JBV19ERUNMX0dFVFBBR0VTSVpFCitfR0xfV0FSTl9PTl9VU0UgKGdldHBhZ2VzaXplLCAiZ2V0cGFnZXNpemUgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGdldHBhZ2VzaXplIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKy8qIFJldHVybiB0aGUgbmV4dCB2YWxpZCBsb2dpbiBzaGVsbCBvbiB0aGUgc3lzdGVtLCBvciBOVUxMIHdoZW4gdGhlIGVuZCBvZgorICAgdGhlIGxpc3QgaGFzIGJlZW4gcmVhY2hlZC4gICovCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChnZXR1c2Vyc2hlbGwsIGNoYXIgKiwgKHZvaWQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGdldHVzZXJzaGVsbCwgY2hhciAqLCAodm9pZCkpOworX0dMX0NYWEFMSUFTV0FSTiAoZ2V0dXNlcnNoZWxsKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZ2V0dXNlcnNoZWxsCisjIGlmIEhBVkVfUkFXX0RFQ0xfR0VUVVNFUlNIRUxMCitfR0xfV0FSTl9PTl9VU0UgKGdldHVzZXJzaGVsbCwgImdldHVzZXJzaGVsbCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZ2V0dXNlcnNoZWxsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisvKiBSZXdpbmQgdG8gcG9pbnRlciB0aGF0IGlzIGFkdmFuY2VkIGF0IGVhY2ggZ2V0dXNlcnNoZWxsKCkgY2FsbC4gICovCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChzZXR1c2Vyc2hlbGwsIHZvaWQsICh2b2lkKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzZXR1c2Vyc2hlbGwsIHZvaWQsICh2b2lkKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChzZXR1c2Vyc2hlbGwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzZXR1c2Vyc2hlbGwKKyMgaWYgSEFWRV9SQVdfREVDTF9TRVRVU0VSU0hFTEwKK19HTF9XQVJOX09OX1VTRSAoc2V0dXNlcnNoZWxsLCAic2V0dXNlcnNoZWxsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBnZXR1c2Vyc2hlbGwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKy8qIEZyZWUgdGhlIHBvaW50ZXIgdGhhdCBpcyBhZHZhbmNlZCBhdCBlYWNoIGdldHVzZXJzaGVsbCgpIGNhbGwgYW5kCisgICBhc3NvY2lhdGVkIHJlc291cmNlcy4gICovCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChlbmR1c2Vyc2hlbGwsIHZvaWQsICh2b2lkKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChlbmR1c2Vyc2hlbGwsIHZvaWQsICh2b2lkKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChlbmR1c2Vyc2hlbGwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBlbmR1c2Vyc2hlbGwKKyMgaWYgSEFWRV9SQVdfREVDTF9FTkRVU0VSU0hFTEwKK19HTF9XQVJOX09OX1VTRSAoZW5kdXNlcnNoZWxsLCAiZW5kdXNlcnNoZWxsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBnZXR1c2Vyc2hlbGwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorLyogRGV0ZXJtaW5lIHdoZXRoZXIgZ3JvdXAgaWQgaXMgaW4gY2FsbGluZyB1c2VyJ3MgZ3JvdXAgbGlzdC4gICovCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChncm91cF9tZW1iZXIsIGludCwgKGdpZF90IGdpZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZ3JvdXBfbWVtYmVyLCBpbnQsIChnaWRfdCBnaWQpKTsKK19HTF9DWFhBTElBU1dBUk4gKGdyb3VwX21lbWJlcik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGdyb3VwX21lbWJlcgorIyBpZiBIQVZFX1JBV19ERUNMX0dST1VQX01FTUJFUgorX0dMX1dBUk5fT05fVVNFIChncm91cF9tZW1iZXIsICJncm91cF9tZW1iZXIgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGdyb3VwLW1lbWJlciBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgaXNhdHR5CisjICAgZGVmaW5lIGlzYXR0eSBycGxfaXNhdHR5CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoaXNhdHR5LCBpbnQsIChpbnQgZmQpKTsKK19HTF9DWFhBTElBU19SUEwgKGlzYXR0eSwgaW50LCAoaW50IGZkKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGlzYXR0eSwgaW50LCAoaW50IGZkKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChpc2F0dHkpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBpc2F0dHkKKyMgaWYgSEFWRV9SQVdfREVDTF9JU0FUVFkKK19HTF9XQVJOX09OX1VTRSAoaXNhdHR5LCAiaXNhdHR5IGhhcyBwb3J0YWJpbGl0eSBwcm9ibGVtcyBvbiBuYXRpdmUgV2luZG93cyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGlzYXR0eSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisvKiBDaGFuZ2UgdGhlIG93bmVyIG9mIEZJTEUgdG8gVUlEIChpZiBVSUQgaXMgbm90IC0xKSBhbmQgdGhlIGdyb3VwIG9mIEZJTEUKKyAgIHRvIEdJRCAoaWYgR0lEIGlzIG5vdCAtMSkuICBEbyBub3QgZm9sbG93IHN5bWJvbGljIGxpbmtzLgorICAgUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIC0xIGFuZCBlcnJubyBzZXQuCisgICBTZWUgdGhlIFBPU0lYOjIwMDggc3BlY2lmaWNhdGlvbgorICAgPGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Z1bmN0aW9ucy9sY2hvd24uaHRtbD4uICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGxjaG93bgorIyAgIGRlZmluZSBsY2hvd24gcnBsX2xjaG93bgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGxjaG93biwgaW50LCAoY2hhciBjb25zdCAqZmlsZSwgdWlkX3Qgb3duZXIsIGdpZF90IGdyb3VwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChsY2hvd24sIGludCwgKGNoYXIgY29uc3QgKmZpbGUsIHVpZF90IG93bmVyLCBnaWRfdCBncm91cCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAobGNob3duLCBpbnQsIChjaGFyIGNvbnN0ICpmaWxlLCB1aWRfdCBvd25lciwgZ2lkX3QgZ3JvdXApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChsY2hvd24sIGludCwgKGNoYXIgY29uc3QgKmZpbGUsIHVpZF90IG93bmVyLCBnaWRfdCBncm91cCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobGNob3duKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbGNob3duCisjIGlmIEhBVkVfUkFXX0RFQ0xfTENIT1dOCitfR0xfV0FSTl9PTl9VU0UgKGxjaG93biwgImxjaG93biBpcyB1bnBvcnRhYmxlIHRvIHByZS1QT1NJWC4xLTIwMDEgc3lzdGVtcyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGxjaG93biBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisvKiBDcmVhdGUgYSBuZXcgaGFyZCBsaW5rIGZvciBhbiBleGlzdGluZyBmaWxlLgorICAgUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIC0xIGFuZCBlcnJubyBzZXQuCisgICBTZWUgUE9TSVg6MjAwOCBzcGVjaWZpY2F0aW9uCisgICA8aHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvZnVuY3Rpb25zL2xpbmsuaHRtbD4uICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBsaW5rIHJwbF9saW5rCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobGluaywgaW50LCAoY29uc3QgY2hhciAqcGF0aDEsIGNvbnN0IGNoYXIgKnBhdGgyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAobGluaywgaW50LCAoY29uc3QgY2hhciAqcGF0aDEsIGNvbnN0IGNoYXIgKnBhdGgyKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChsaW5rLCBpbnQsIChjb25zdCBjaGFyICpwYXRoMSwgY29uc3QgY2hhciAqcGF0aDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobGluaywgaW50LCAoY29uc3QgY2hhciAqcGF0aDEsIGNvbnN0IGNoYXIgKnBhdGgyKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChsaW5rKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbGluaworIyBpZiBIQVZFX1JBV19ERUNMX0xJTksKK19HTF9XQVJOX09OX1VTRSAobGluaywgImxpbmsgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGxpbmsgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorLyogQ3JlYXRlIGEgbmV3IGhhcmQgbGluayBmb3IgYW4gZXhpc3RpbmcgZmlsZSwgcmVsYXRpdmUgdG8gdHdvCisgICBkaXJlY3Rvcmllcy4gIEZMQUcgY29udHJvbHMgd2hldGhlciBzeW1saW5rcyBhcmUgZm9sbG93ZWQuCisgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgLTEgYW5kIGVycm5vIHNldC4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbGlua2F0CisjICAgZGVmaW5lIGxpbmthdCBycGxfbGlua2F0CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobGlua2F0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkMSwgY29uc3QgY2hhciAqcGF0aDEsIGludCBmZDIsIGNvbnN0IGNoYXIgKnBhdGgyLAorICAgICAgICAgICAgICAgICAgIGludCBmbGFnKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMiwgNCkpKTsKK19HTF9DWFhBTElBU19SUEwgKGxpbmthdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZDEsIGNvbnN0IGNoYXIgKnBhdGgxLCBpbnQgZmQyLCBjb25zdCBjaGFyICpwYXRoMiwKKyAgICAgICAgICAgICAgICAgICBpbnQgZmxhZykpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAobGlua2F0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkMSwgY29uc3QgY2hhciAqcGF0aDEsIGludCBmZDIsIGNvbnN0IGNoYXIgKnBhdGgyLAorICAgICAgICAgICAgICAgICAgIGludCBmbGFnKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMiwgNCkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChsaW5rYXQsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQxLCBjb25zdCBjaGFyICpwYXRoMSwgaW50IGZkMiwgY29uc3QgY2hhciAqcGF0aDIsCisgICAgICAgICAgICAgICAgICAgaW50IGZsYWcpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGxpbmthdCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGxpbmthdAorIyBpZiBIQVZFX1JBV19ERUNMX0xJTktBVAorX0dMX1dBUk5fT05fVVNFIChsaW5rYXQsICJsaW5rYXQgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGxpbmthdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisvKiBTZXQgdGhlIG9mZnNldCBvZiBGRCByZWxhdGl2ZSB0byBTRUVLX1NFVCwgU0VFS19DVVIsIG9yIFNFRUtfRU5ELgorICAgUmV0dXJuIHRoZSBuZXcgb2Zmc2V0IGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSAtMSBhbmQgZXJybm8gc2V0LgorICAgU2VlIHRoZSBQT1NJWDoyMDA4IHNwZWNpZmljYXRpb24KKyAgIDxodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9mdW5jdGlvbnMvbHNlZWsuaHRtbD4uICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBsc2VlayBycGxfbHNlZWsKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChsc2Vlaywgb2ZmX3QsIChpbnQgZmQsIG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSkpOworX0dMX0NYWEFMSUFTX1JQTCAobHNlZWssIG9mZl90LCAoaW50IGZkLCBvZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAobHNlZWssIG9mZl90LCAoaW50IGZkLCBvZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGxzZWVrKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbHNlZWsKKyMgaWYgSEFWRV9SQVdfREVDTF9MU0VFSworX0dMX1dBUk5fT05fVVNFIChsc2VlaywgImxzZWVrIGRvZXMgbm90IGZhaWwgd2l0aCBFU1BJUEUgb24gcGlwZXMgb24gc29tZSAiCisgICAgICAgICAgICAgICAgICJzeXN0ZW1zIC0gdXNlIGdudWxpYiBtb2R1bGUgbHNlZWsgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorLyogQ3JlYXRlIGEgcGlwZSwgZGVmYXVsdGluZyB0byBPX0JJTkFSWSBtb2RlLgorICAgU3RvcmUgdGhlIHJlYWQtZW5kIGFzIGZkWzBdIGFuZCB0aGUgd3JpdGUtZW5kIGFzIGZkWzFdLgorICAgUmV0dXJuIDAgdXBvbiBzdWNjZXNzLCBvciAtMSB3aXRoIGVycm5vIHNldCB1cG9uIGZhaWx1cmUuICAqLworIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocGlwZSwgaW50LCAoaW50IGZkWzJdKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocGlwZSwgaW50LCAoaW50IGZkWzJdKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChwaXBlKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcGlwZQorIyBpZiBIQVZFX1JBV19ERUNMX1BJUEUKK19HTF9XQVJOX09OX1VTRSAocGlwZSwgInBpcGUgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBpcGUtcG9zaXggZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMQorLyogQ3JlYXRlIGEgcGlwZSwgYXBwbHlpbmcgdGhlIGdpdmVuIGZsYWdzIHdoZW4gb3BlbmluZyB0aGUgcmVhZC1lbmQgb2YgdGhlCisgICBwaXBlIGFuZCB0aGUgd3JpdGUtZW5kIG9mIHRoZSBwaXBlLgorICAgVGhlIGZsYWdzIGFyZSBhIGJpdG1hc2ssIHBvc3NpYmx5IGluY2x1ZGluZyBPX0NMT0VYRUMgKGRlZmluZWQgaW4gPGZjbnRsLmg+KQorICAgYW5kIE9fVEVYVCwgT19CSU5BUlkgKGRlZmluZWQgaW4gImJpbmFyeS1pby5oIikuCisgICBTdG9yZSB0aGUgcmVhZC1lbmQgYXMgZmRbMF0gYW5kIHRoZSB3cml0ZS1lbmQgYXMgZmRbMV0uCisgICBSZXR1cm4gMCB1cG9uIHN1Y2Nlc3MsIG9yIC0xIHdpdGggZXJybm8gc2V0IHVwb24gZmFpbHVyZS4KKyAgIFNlZSBhbHNvIHRoZSBMaW51eCBtYW4gcGFnZSBhdAorICAgPGh0dHA6Ly93d3cua2VybmVsLm9yZy9kb2MvbWFuLXBhZ2VzL29ubGluZS9wYWdlcy9tYW4yL3BpcGUyLjIuaHRtbD4uICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBwaXBlMiBycGxfcGlwZTIKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwaXBlMiwgaW50LCAoaW50IGZkWzJdLCBpbnQgZmxhZ3MpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwaXBlMiwgaW50LCAoaW50IGZkWzJdLCBpbnQgZmxhZ3MpKTsKKyMgZWxzZQorX0dMX0ZVTkNERUNMX1NZUyAocGlwZTIsIGludCwgKGludCBmZFsyXSwgaW50IGZsYWdzKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1NZUyAocGlwZTIsIGludCwgKGludCBmZFsyXSwgaW50IGZsYWdzKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwaXBlMik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHBpcGUyCisjIGlmIEhBVkVfUkFXX0RFQ0xfUElQRTIKK19HTF9XQVJOX09OX1VTRSAocGlwZTIsICJwaXBlMiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcGlwZTIgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorLyogUmVhZCBhdCBtb3N0IEJVRlNJWkUgYnl0ZXMgZnJvbSBGRCBpbnRvIEJVRiwgc3RhcnRpbmcgYXQgT0ZGU0VULgorICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgcGxhY2VkIGludG8gQlVGIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZQorICAgc2V0IGVycm5vIGFuZCByZXR1cm4gLTEuICAwIGluZGljYXRlcyBFT0YuCisgICBTZWUgdGhlIFBPU0lYOjIwMDggc3BlY2lmaWNhdGlvbgorICAgPGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Z1bmN0aW9ucy9wcmVhZC5odG1sPi4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcHJlYWQKKyMgICBkZWZpbmUgcHJlYWQgcnBsX3ByZWFkCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocHJlYWQsIHNzaXplX3QsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBidWZzaXplLCBvZmZfdCBvZmZzZXQpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocHJlYWQsIHNzaXplX3QsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBidWZzaXplLCBvZmZfdCBvZmZzZXQpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHByZWFkLCBzc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgYnVmc2l6ZSwgb2ZmX3Qgb2Zmc2V0KQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwcmVhZCwgc3NpemVfdCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUsIG9mZl90IG9mZnNldCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocHJlYWQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwcmVhZAorIyBpZiBIQVZFX1JBV19ERUNMX1BSRUFECitfR0xfV0FSTl9PTl9VU0UgKHByZWFkLCAicHJlYWQgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHByZWFkIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKy8qIFdyaXRlIGF0IG1vc3QgQlVGU0laRSBieXRlcyBmcm9tIEJVRiBpbnRvIEZELCBzdGFydGluZyBhdCBPRkZTRVQuCisgICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZQorICAgc2V0IGVycm5vIGFuZCByZXR1cm4gLTEuICAwIGluZGljYXRlcyBub3RoaW5nIHdyaXR0ZW4uICBTZWUgdGhlCisgICBQT1NJWDoyMDA4IHNwZWNpZmljYXRpb24KKyAgIDxodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9mdW5jdGlvbnMvcHdyaXRlLmh0bWw+LiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBwd3JpdGUKKyMgICBkZWZpbmUgcHdyaXRlIHJwbF9wd3JpdGUKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwd3JpdGUsIHNzaXplX3QsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBidWZzaXplLCBvZmZfdCBvZmZzZXQpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocHdyaXRlLCBzc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgYnVmc2l6ZSwgb2ZmX3Qgb2Zmc2V0KSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChwd3JpdGUsIHNzaXplX3QsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBidWZzaXplLCBvZmZfdCBvZmZzZXQpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHB3cml0ZSwgc3NpemVfdCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUsIG9mZl90IG9mZnNldCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocHdyaXRlKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcHdyaXRlCisjIGlmIEhBVkVfUkFXX0RFQ0xfUFdSSVRFCitfR0xfV0FSTl9PTl9VU0UgKHB3cml0ZSwgInB3cml0ZSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcHdyaXRlIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKy8qIFJlYWQgdXAgdG8gQ09VTlQgYnl0ZXMgZnJvbSBmaWxlIGRlc2NyaXB0b3IgRkQgaW50byB0aGUgYnVmZmVyIHN0YXJ0aW5nCisgICBhdCBCVUYuICBTZWUgdGhlIFBPU0lYOjIwMDggc3BlY2lmaWNhdGlvbgorICAgPGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Z1bmN0aW9ucy9yZWFkLmh0bWw+LiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiByZWFkCisjICAgZGVmaW5lIHJlYWQgcnBsX3JlYWQKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChyZWFkLCBzc2l6ZV90LCAoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChyZWFkLCBzc2l6ZV90LCAoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkpOworIyBlbHNlCisvKiBOZWVkIHRvIGNhc3QsIGJlY2F1c2Ugb24gbWluZ3csIHRoZSB0aGlyZCBwYXJhbWV0ZXIgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQKKyAgIGFuZCB0aGUgcmV0dXJuIHR5cGUgaXMgJ2ludCcuICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUIChyZWFkLCBzc2l6ZV90LCAoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocmVhZCk7CisjZW5kaWYKKworCisjaWYgMAorLyogUmVhZCB0aGUgY29udGVudHMgb2YgdGhlIHN5bWJvbGljIGxpbmsgRklMRSBhbmQgcGxhY2UgdGhlIGZpcnN0IEJVRlNJWkUKKyAgIGJ5dGVzIG9mIGl0IGludG8gQlVGLiAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgcGxhY2VkIGludG8gQlVGIGlmCisgICBzdWNjZXNzZnVsLCBvdGhlcndpc2UgLTEgYW5kIGVycm5vIHNldC4KKyAgIFNlZSB0aGUgUE9TSVg6MjAwOCBzcGVjaWZpY2F0aW9uCisgICA8aHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvZnVuY3Rpb25zL3JlYWRsaW5rLmh0bWw+LiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgcmVhZGxpbmsgcnBsX3JlYWRsaW5rCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocmVhZGxpbmssIHNzaXplX3QsCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6ZSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChyZWFkbGluaywgc3NpemVfdCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBidWZzaXplKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChyZWFkbGluaywgc3NpemVfdCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBidWZzaXplKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChyZWFkbGluaywgc3NpemVfdCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBidWZzaXplKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChyZWFkbGluayk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHJlYWRsaW5rCisjIGlmIEhBVkVfUkFXX0RFQ0xfUkVBRExJTksKK19HTF9XQVJOX09OX1VTRSAocmVhZGxpbmssICJyZWFkbGluayBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmVhZGxpbmsgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocmVhZGxpbmthdCwgc3NpemVfdCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIsIDMpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChyZWFkbGlua2F0LCBzc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3QgbGVuKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChyZWFkbGlua2F0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcmVhZGxpbmthdAorIyBpZiBIQVZFX1JBV19ERUNMX1JFQURMSU5LQVQKK19HTF9XQVJOX09OX1VTRSAocmVhZGxpbmthdCwgInJlYWRsaW5rYXQgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmVhZGxpbmthdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisvKiBSZW1vdmUgdGhlIGRpcmVjdG9yeSBESVIuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBybWRpciBycGxfcm1kaXIKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChybWRpciwgaW50LCAoY2hhciBjb25zdCAqbmFtZSkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHJtZGlyLCBpbnQsIChjaGFyIGNvbnN0ICpuYW1lKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKHJtZGlyLCBpbnQsIChjaGFyIGNvbnN0ICpuYW1lKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChybWRpcik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHJtZGlyCisjIGlmIEhBVkVfUkFXX0RFQ0xfUk1ESVIKK19HTF9XQVJOX09OX1VTRSAocm1kaXIsICJybWRpciBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcm1kaXIgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorLyogU2V0IHRoZSBob3N0IG5hbWUgb2YgdGhlIG1hY2hpbmUuCisgICBUaGUgaG9zdCBuYW1lIG1heSBvciBtYXkgbm90IGJlIGZ1bGx5IHF1YWxpZmllZC4KKworICAgUHV0IExFTiBieXRlcyBvZiBOQU1FIGludG8gdGhlIGhvc3QgbmFtZS4KKyAgIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSwgc2V0IGVycm5vIGFuZCByZXR1cm4gLTEuCisKKyAgIFBsYXRmb3JtcyB3aXRoIG5vIGFiaWxpdHkgdG8gc2V0IHRoZSBob3N0bmFtZSByZXR1cm4gLTEgYW5kIHNldAorICAgZXJybm8gPSBFTk9TWVMuICAqLworIyBpZiAhMSB8fCAhMQorX0dMX0ZVTkNERUNMX1NZUyAoc2V0aG9zdG5hbWUsIGludCwgKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBsZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorLyogTmVlZCB0byBjYXN0LCBiZWNhdXNlIG9uIFNvbGFyaXMgMTEgMjAxMS0xMCwgTWFjIE9TIFggMTAuNSwgSVJJWCA2LjUKKyAgIGFuZCBGcmVlQlNEIDYuNCB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyBpbnQuICBPbiBTb2xhcmlzIDExCisgICAyMDExLTEwLCB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIG5vdCBjb25zdC4gICovCitfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKHNldGhvc3RuYW1lLCBpbnQsIChjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbGVuKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChzZXRob3N0bmFtZSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHNldGhvc3RuYW1lCisjIGlmIEhBVkVfUkFXX0RFQ0xfU0VUSE9TVE5BTUUKK19HTF9XQVJOX09OX1VTRSAoc2V0aG9zdG5hbWUsICJzZXRob3N0bmFtZSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc2V0aG9zdG5hbWUgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorLyogUGF1c2UgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgY3VycmVudCB0aHJlYWQgZm9yIE4gc2Vjb25kcy4KKyAgIFJldHVybnMgdGhlIG51bWJlciBvZiBzZWNvbmRzIGxlZnQgdG8gc2xlZXAuCisgICBTZWUgdGhlIFBPU0lYOjIwMDggc3BlY2lmaWNhdGlvbgorICAgPGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Z1bmN0aW9ucy9zbGVlcC5odG1sPi4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgc2xlZXAKKyMgICBkZWZpbmUgc2xlZXAgcnBsX3NsZWVwCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc2xlZXAsIHVuc2lnbmVkIGludCwgKHVuc2lnbmVkIGludCBuKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzbGVlcCwgdW5zaWduZWQgaW50LCAodW5zaWduZWQgaW50IG4pKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHNsZWVwLCB1bnNpZ25lZCBpbnQsICh1bnNpZ25lZCBpbnQgbikpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHNsZWVwLCB1bnNpZ25lZCBpbnQsICh1bnNpZ25lZCBpbnQgbikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoc2xlZXApOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzbGVlcAorIyBpZiBIQVZFX1JBV19ERUNMX1NMRUVQCitfR0xfV0FSTl9PTl9VU0UgKHNsZWVwLCAic2xlZXAgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHNsZWVwIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBzeW1saW5rCisjICAgZGVmaW5lIHN5bWxpbmsgcnBsX3N5bWxpbmsKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChzeW1saW5rLCBpbnQsIChjaGFyIGNvbnN0ICpjb250ZW50cywgY2hhciBjb25zdCAqZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHN5bWxpbmssIGludCwgKGNoYXIgY29uc3QgKmNvbnRlbnRzLCBjaGFyIGNvbnN0ICpmaWxlKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChzeW1saW5rLCBpbnQsIChjaGFyIGNvbnN0ICpjb250ZW50cywgY2hhciBjb25zdCAqZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzeW1saW5rLCBpbnQsIChjaGFyIGNvbnN0ICpjb250ZW50cywgY2hhciBjb25zdCAqZmlsZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoc3ltbGluayk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHN5bWxpbmsKKyMgaWYgSEFWRV9SQVdfREVDTF9TWU1MSU5LCitfR0xfV0FSTl9PTl9VU0UgKHN5bWxpbmssICJzeW1saW5rIGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHN5bWxpbmsgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoc3ltbGlua2F0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoY2hhciBjb25zdCAqY29udGVudHMsIGludCBmZCwgY2hhciBjb25zdCAqZmlsZSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDMpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzeW1saW5rYXQsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyIGNvbnN0ICpjb250ZW50cywgaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChzeW1saW5rYXQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzeW1saW5rYXQKKyMgaWYgSEFWRV9SQVdfREVDTF9TWU1MSU5LQVQKK19HTF9XQVJOX09OX1VTRSAoc3ltbGlua2F0LCAic3ltbGlua2F0IGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHN5bWxpbmthdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisvKiBTdG9yZSBhdCBtb3N0IEJVRkxFTiBjaGFyYWN0ZXJzIG9mIHRoZSBwYXRobmFtZSBvZiB0aGUgdGVybWluYWwgRkQgaXMKKyAgIG9wZW4gb24gaW4gQlVGLiAgUmV0dXJuIDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIGFuIGVycm9yIG51bWJlci4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgdHR5bmFtZV9yCisjICAgZGVmaW5lIHR0eW5hbWVfciBycGxfdHR5bmFtZV9yCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAodHR5bmFtZV9yLCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMICh0dHluYW1lX3IsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAodHR5bmFtZV9yLCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAodHR5bmFtZV9yLCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHR0eW5hbWVfcik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHR0eW5hbWVfcgorIyBpZiBIQVZFX1JBV19ERUNMX1RUWU5BTUVfUgorX0dMX1dBUk5fT05fVVNFICh0dHluYW1lX3IsICJ0dHluYW1lX3IgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgdHR5bmFtZV9yIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiB1bmxpbmsKKyMgICBkZWZpbmUgdW5saW5rIHJwbF91bmxpbmsKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh1bmxpbmssIGludCwgKGNoYXIgY29uc3QgKmZpbGUpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMICh1bmxpbmssIGludCwgKGNoYXIgY29uc3QgKmZpbGUpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAodW5saW5rLCBpbnQsIChjaGFyIGNvbnN0ICpmaWxlKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOICh1bmxpbmspOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB1bmxpbmsKKyMgaWYgSEFWRV9SQVdfREVDTF9VTkxJTksKK19HTF9XQVJOX09OX1VTRSAodW5saW5rLCAidW5saW5rIGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHVubGluayBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgdW5saW5rYXQKKyMgICBkZWZpbmUgdW5saW5rYXQgcnBsX3VubGlua2F0CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAodW5saW5rYXQsIGludCwgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgaW50IGZsYWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAodW5saW5rYXQsIGludCwgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgaW50IGZsYWcpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHVubGlua2F0LCBpbnQsIChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGUsIGludCBmbGFnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh1bmxpbmthdCwgaW50LCAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlLCBpbnQgZmxhZykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAodW5saW5rYXQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB1bmxpbmthdAorIyBpZiBIQVZFX1JBV19ERUNMX1VOTElOS0FUCitfR0xfV0FSTl9PTl9VU0UgKHVubGlua2F0LCAidW5saW5rYXQgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgb3BlbmF0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKy8qIFBhdXNlIHRoZSBleGVjdXRpb24gb2YgdGhlIGN1cnJlbnQgdGhyZWFkIGZvciBOIG1pY3Jvc2Vjb25kcy4KKyAgIFJldHVybnMgMCBvbiBjb21wbGV0aW9uLCBvciAtMSBvbiByYW5nZSBlcnJvci4KKyAgIFNlZSB0aGUgUE9TSVg6MjAwMSBzcGVjaWZpY2F0aW9uCisgICA8aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3N1c3YzeHNoL3VzbGVlcC5odG1sPi4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgdXNsZWVwCisjICAgZGVmaW5lIHVzbGVlcCBycGxfdXNsZWVwCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAodXNsZWVwLCBpbnQsICh1c2Vjb25kc190IG4pKTsKK19HTF9DWFhBTElBU19SUEwgKHVzbGVlcCwgaW50LCAodXNlY29uZHNfdCBuKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh1c2xlZXAsIGludCwgKHVzZWNvbmRzX3QgbikpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHVzbGVlcCwgaW50LCAodXNlY29uZHNfdCBuKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOICh1c2xlZXApOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB1c2xlZXAKKyMgaWYgSEFWRV9SQVdfREVDTF9VU0xFRVAKK19HTF9XQVJOX09OX1VTRSAodXNsZWVwLCAidXNsZWVwIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB1c2xlZXAgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorLyogV3JpdGUgdXAgdG8gQ09VTlQgYnl0ZXMgc3RhcnRpbmcgYXQgQlVGIHRvIGZpbGUgZGVzY3JpcHRvciBGRC4KKyAgIFNlZSB0aGUgUE9TSVg6MjAwOCBzcGVjaWZpY2F0aW9uCisgICA8aHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvZnVuY3Rpb25zL3dyaXRlLmh0bWw+LiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiB3cml0ZQorIyAgIGRlZmluZSB3cml0ZSBycGxfd3JpdGUKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh3cml0ZSwgc3NpemVfdCwgKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHdyaXRlLCBzc2l6ZV90LCAoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkpOworIyBlbHNlCisvKiBOZWVkIHRvIGNhc3QsIGJlY2F1c2Ugb24gbWluZ3csIHRoZSB0aGlyZCBwYXJhbWV0ZXIgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQKKyAgIGFuZCB0aGUgcmV0dXJuIHR5cGUgaXMgJ2ludCcuICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUICh3cml0ZSwgc3NpemVfdCwgKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHdyaXRlKTsKKyNlbmRpZgorCitfR0xfSU5MSU5FX0hFQURFUl9FTkQKKworI2VuZGlmIC8qIF9HTF9VTklTVERfSCAqLworI2VuZGlmIC8qIF9HTF9VTklTVERfSCAqLwpkaWZmIC0tZ2l0IGEvZGFyd2luLWxpYi91bml0eXBlcy5oIGIvZGFyd2luLWxpYi91bml0eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NWIwN2EKLS0tIC9kZXYvbnVsbAorKysgYi9kYXJ3aW4tbGliL3VuaXR5cGVzLmgKQEAgLTAsMCArMSw0NyBAQAorLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLworLyogRWxlbWVudGFyeSB0eXBlcyBhbmQgbWFjcm9zIGZvciB0aGUgR05VIFVuaVN0cmluZyBsaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA1LTIwMDYsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBfVU5JVFlQRVNfSAorI2RlZmluZSBfVU5JVFlQRVNfSAorCisvKiBHZXQgdWludDhfdCwgdWludDE2X3QsIHVpbnQzMl90LiAgKi8KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworLyogVHlwZSByZXByZXNlbnRpbmcgYSBVbmljb2RlIGNoYXJhY3Rlci4gICovCit0eXBlZGVmIHVpbnQzMl90IHVjczRfdDsKKworLyogQXR0cmlidXRlIG9mIGEgZnVuY3Rpb24gd2hvc2UgcmVzdWx0IGRlcGVuZHMgb25seSBvbiB0aGUgYXJndW1lbnRzCisgICAobm90IHBvaW50ZXJzISkgYW5kIHdoaWNoIGhhcyBubyBzaWRlIGVmZmVjdHMuICAqLworI2lmbmRlZiBfVUNfQVRUUklCVVRFX0NPTlNUCisjIGlmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NSkKKyMgIGRlZmluZSBfVUNfQVRUUklCVVRFX0NPTlNUIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKQorIyBlbHNlCisjICBkZWZpbmUgX1VDX0FUVFJJQlVURV9DT05TVAorIyBlbmRpZgorI2VuZGlmCisKKy8qIEF0dHJpYnV0ZSBvZiBhIGZ1bmN0aW9uIHdob3NlIHJlc3VsdCBkZXBlbmRzIG9ubHkgb24gdGhlIGFyZ3VtZW50cworICAgKHBvc3NpYmx5IHBvaW50ZXJzKSBhbmQgZ2xvYmFsIG1lbW9yeSwgYW5kIHdoaWNoIGhhcyBubyBzaWRlIGVmZmVjdHMuICAqLworI2lmbmRlZiBfVUNfQVRUUklCVVRFX1BVUkUKKyMgaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk2KQorIyAgZGVmaW5lIF9VQ19BVFRSSUJVVEVfUFVSRSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorIyBlbHNlCisjICBkZWZpbmUgX1VDX0FUVFJJQlVURV9QVVJFCisjIGVuZGlmCisjZW5kaWYKKworI2VuZGlmIC8qIF9VTklUWVBFU19IICovCmRpZmYgLS1naXQgYS9kYXJ3aW4tbGliL3VuaXdpZHRoLmggYi9kYXJ3aW4tbGliL3VuaXdpZHRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY0NjZiMgotLS0gL2Rldi9udWxsCisrKyBiL2Rhcndpbi1saWIvdW5pd2lkdGguaApAQCAtMCwwICsxLDczIEBACisvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovCisvKiBEaXNwbGF5IHdpZHRoIGZ1bmN0aW9ucy4KKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCAyMDA1LCAyMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIF9VTklXSURUSF9ICisjZGVmaW5lIF9VTklXSURUSF9ICisKKyNpbmNsdWRlICJ1bml0eXBlcy5oIgorCisvKiBHZXQgc2l6ZV90LiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLyogR2V0IGxvY2FsZV9jaGFyc2V0KCkgZGVjbGFyYXRpb24uICAqLworI2luY2x1ZGUgImxvY2FsY2hhcnNldC5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworLyogRGlzcGxheSB3aWR0aC4gICovCisKKy8qIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbG9jYWxlIGRlcGVuZGVudC4gIFRoZSBlbmNvZGluZyBhcmd1bWVudCBpZGVudGlmaWVzCisgICB0aGUgZW5jb2RpbmcgKGUuZy4gIklTTy04ODU5LTIiIGZvciBQb2xpc2gpLiAgKi8KKworLyogRGV0ZXJtaW5lIG51bWJlciBvZiBjb2x1bW4gcG9zaXRpb25zIHJlcXVpcmVkIGZvciBVQy4gICovCitleHRlcm4gaW50CisgICAgICAgdWNfd2lkdGggKHVjczRfdCB1YywgY29uc3QgY2hhciAqZW5jb2RpbmcpCisgICAgICAgX1VDX0FUVFJJQlVURV9QVVJFOworCisvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIGNvbHVtbiBwb3NpdGlvbnMgcmVxdWlyZWQgZm9yIGZpcnN0IE4gdW5pdHMKKyAgIChvciBmZXdlciBpZiBTIGVuZHMgYmVmb3JlIHRoaXMpIGluIFMuICAqLworZXh0ZXJuIGludAorICAgICAgIHU4X3dpZHRoIChjb25zdCB1aW50OF90ICpzLCBzaXplX3QgbiwgY29uc3QgY2hhciAqZW5jb2RpbmcpCisgICAgICAgX1VDX0FUVFJJQlVURV9QVVJFOworZXh0ZXJuIGludAorICAgICAgIHUxNl93aWR0aCAoY29uc3QgdWludDE2X3QgKnMsIHNpemVfdCBuLCBjb25zdCBjaGFyICplbmNvZGluZykKKyAgICAgICBfVUNfQVRUUklCVVRFX1BVUkU7CitleHRlcm4gaW50CisgICAgICAgdTMyX3dpZHRoIChjb25zdCB1aW50MzJfdCAqcywgc2l6ZV90IG4sIGNvbnN0IGNoYXIgKmVuY29kaW5nKQorICAgICAgIF9VQ19BVFRSSUJVVEVfUFVSRTsKKworLyogRGV0ZXJtaW5lIG51bWJlciBvZiBjb2x1bW4gcG9zaXRpb25zIHJlcXVpcmVkIGZvciBTLiAgKi8KK2V4dGVybiBpbnQKKyAgICAgICB1OF9zdHJ3aWR0aCAoY29uc3QgdWludDhfdCAqcywgY29uc3QgY2hhciAqZW5jb2RpbmcpCisgICAgICAgX1VDX0FUVFJJQlVURV9QVVJFOworZXh0ZXJuIGludAorICAgICAgIHUxNl9zdHJ3aWR0aCAoY29uc3QgdWludDE2X3QgKnMsIGNvbnN0IGNoYXIgKmVuY29kaW5nKQorICAgICAgIF9VQ19BVFRSSUJVVEVfUFVSRTsKK2V4dGVybiBpbnQKKyAgICAgICB1MzJfc3Ryd2lkdGggKGNvbnN0IHVpbnQzMl90ICpzLCBjb25zdCBjaGFyICplbmNvZGluZykKKyAgICAgICBfVUNfQVRUUklCVVRFX1BVUkU7CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9VTklXSURUSF9IICovCmRpZmYgLS1naXQgYS9kYXJ3aW4tbGliL3dhcm4tb24tdXNlLmggYi9kYXJ3aW4tbGliL3dhcm4tb24tdXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFlYmRhNAotLS0gL2Rldi9udWxsCisrKyBiL2Rhcndpbi1saWIvd2Fybi1vbi11c2UuaApAQCAtMCwwICsxLDQ2IEBACisjaWZuZGVmIF9HTF9XQVJOX09OX1VTRQorCisjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorLyogQSBjb21waWxlciBhdHRyaWJ1dGUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyA0LjMuMCBhbmQgbGF0ZXIuICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmN0aW9uKSBmdW5jdGlvbiBfX2F0dHJpYnV0ZV9fICgoX193YXJuaW5nX18gKG1lc3NhZ2UpKSkKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKy8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uCisjIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorX0dMX1dBUk5fRVhURVJOX0MgaW50IF9nbF93YXJuX29uX3VzZQorIyBlbmRpZgorI2VuZGlmCisKKy8qIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmN0aW9uLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCAic3RyaW5nIikKKyAgIGlzIGxpa2UgX0dMX1dBUk5fT05fVVNFIChmdW5jdGlvbiwgInN0cmluZyIpLCBleGNlcHQgdGhhdCB0aGUgZnVuY3Rpb24gaXMKKyAgIGRlY2xhcmVkIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywKKyAgIGFuZCBhdHRyaWJ1dGVzLgorICAgVGhpcyB2YXJpYW50IGlzIHVzZWZ1bCBmb3Igb3ZlcmxvYWRlZCBmdW5jdGlvbnMgaW4gQysrLiBfR0xfV0FSTl9PTl9VU0UgZG9lcworICAgbm90IHdvcmsgaW4gdGhpcyBjYXNlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFX0NYWAorIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK2V4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMgXAorICAgICBfX2F0dHJpYnV0ZV9fICgoX193YXJuaW5nX18gKG1zZykpKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK2V4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCitfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisjIGVuZGlmCisjZW5kaWYKKworLyogX0dMX1dBUk5fRVhURVJOX0MgZGVjbGFyYXRpb247CisgICBwZXJmb3JtcyB0aGUgZGVjbGFyYXRpb24gd2l0aCBDIGxpbmthZ2UuICAqLworI2lmbmRlZiBfR0xfV0FSTl9FWFRFUk5fQworIyBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisjICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuICJDIgorIyBlbHNlCisjICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuCisjIGVuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2Rhcndpbi1saWIvd2NoYXIuaCBiL2Rhcndpbi1saWIvd2NoYXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjExMzUxCi0tLSAvZGV2L251bGwKKysrIGIvZGFyd2luLWxpYi93Y2hhci5oCkBAIC0wLDAgKzEsMTM0MCBAQAorLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLworLyogQSBzdWJzdGl0dXRlIGZvciBJU08gQzk5IDx3Y2hhci5oPiwgZm9yIHBsYXRmb3JtcyB0aGF0IGhhdmUgaXNzdWVzLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBXcml0dGVuIGJ5IEVyaWMgQmxha2UuICAqLworCisvKgorICogSVNPIEMgOTkgPHdjaGFyLmg+IGZvciBwbGF0Zm9ybXMgdGhhdCBoYXZlIGlzc3Vlcy4KKyAqIDxodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjN4YmQvd2NoYXIuaC5odG1sPgorICoKKyAqIEZvciBub3csIHRoaXMganVzdCBlbnN1cmVzIHByb3BlciBwcmVyZXF1aXNpdGUgaW5jbHVzaW9uIG9yZGVyIGFuZAorICogdGhlIGRlY2xhcmF0aW9uIG9mIHdjd2lkdGgoKS4KKyAqLworCisjaWYgX19HTlVDX18gPj0gMworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorI2VuZGlmCisKKworI2lmIGRlZmluZWQgX19uZWVkX21ic3RhdGVfdCB8fCBkZWZpbmVkIF9fbmVlZF93aW50X3QgfHwgKGRlZmluZWQgX19ocHV4ICYmICgoZGVmaW5lZCBfSU5UVFlQRVNfSU5DTFVERUQgJiYgIWRlZmluZWQgc3RydG9pbWF4KSB8fCBkZWZpbmVkIF9HTF9KVVNUX0lOQ0xVREVfU1lTVEVNX1dDSEFSX0gpKSB8fCBkZWZpbmVkIF9HTF9BTFJFQURZX0lOQ0xVRElOR19XQ0hBUl9ICisvKiBTcGVjaWFsIGludm9jYXRpb24gY29udmVudGlvbjoKKyAgIC0gSW5zaWRlIGdsaWJjIGFuZCB1Q2xpYmMgaGVhZGVyIGZpbGVzLgorICAgLSBPbiBIUC1VWCAxMS4wMCB3ZSBoYXZlIGEgc2VxdWVuY2Ugb2YgbmVzdGVkIGluY2x1ZGVzCisgICAgIDx3Y2hhci5oPiAtPiA8c3RkbGliLmg+IC0+IDxzdGRpbnQuaD4sIGFuZCB0aGUgbGF0dGVyIGluY2x1ZGVzIDx3Y2hhci5oPiwKKyAgICAgb25jZSBpbmRpcmVjdGx5IDxzdGRpbnQuaD4gLT4gPHN5cy90eXBlcy5oPiAtPiA8aW50dHlwZXMuaD4gLT4gPHdjaGFyLmg+CisgICAgIGFuZCBvbmNlIGRpcmVjdGx5LiAgSW4gYm90aCBzaXR1YXRpb25zICd3aW50X3QnIGlzIG5vdCB5ZXQgZGVmaW5lZCwKKyAgICAgdGhlcmVmb3JlIHdlIGNhbm5vdCBwcm92aWRlIHRoZSBmdW5jdGlvbiBvdmVycmlkZXM7IGluc3RlYWQgaW5jbHVkZSBvbmx5CisgICAgIHRoZSBzeXN0ZW0ncyA8d2NoYXIuaD4uCisgICAtIE9uIElSSVggNi41LCBzaW1pbGFybHksIHdlIGhhdmUgYW4gaW5jbHVkZSA8d2NoYXIuaD4gLT4gPHdjdHlwZS5oPiwgYW5kCisgICAgIHRoZSBsYXR0ZXIgaW5jbHVkZXMgPHdjaGFyLmg+LiAgQnV0IGhlcmUsIHdlIGhhdmUgbm8gd2F5IHRvIGRldGVjdCB3aGV0aGVyCisgICAgIDx3Y3R5cGUuaD4gaXMgY29tcGxldGVseSBpbmNsdWRlZCBvciBpcyBzdGlsbCBiZWluZyBpbmNsdWRlZC4gICovCisKKyNpbmNsdWRlX25leHQgPHdjaGFyLmg+CisKKyNlbHNlCisvKiBOb3JtYWwgaW52b2NhdGlvbiBjb252ZW50aW9uLiAgKi8KKworI2lmbmRlZiBfR0xfV0NIQVJfSAorCisjZGVmaW5lIF9HTF9BTFJFQURZX0lOQ0xVRElOR19XQ0hBUl9ICisKKyNpZiAwCisjIGluY2x1ZGUgPGZlYXR1cmVzLmg+IC8qIGZvciBfX0dMSUJDX18gKi8KKyNlbmRpZgorCisvKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlCisgICA8d2NoYXIuaD4uCisgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUKKyAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uCisgICBJbiBzb21lIGJ1aWxkcyBvZiB1Q2xpYmMsIDx3Y2hhci5oPiBpcyBub25leGlzdGVudCBhbmQgd2NoYXJfdCBpcyBkZWZpbmVkCisgICBieSA8c3RkZGVmLmg+LgorICAgQnV0IGF2b2lkIG5hbWVzcGFjZSBwb2xsdXRpb24gb24gZ2xpYmMgc3lzdGVtcy4gICovCisjaWYgIShkZWZpbmVkIF9fR0xJQkNfXyAmJiAhZGVmaW5lZCBfX1VDTElCQ19fKQorIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbmRpZgorI2lmbmRlZiBfX0dMSUJDX18KKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyMgaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisKKy8qIEluY2x1ZGUgdGhlIG9yaWdpbmFsIDx3Y2hhci5oPiBpZiBpdCBleGlzdHMuCisgICBTb21lIGJ1aWxkcyBvZiB1Q2xpYmMgbGFjayBpdC4gICovCisvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisjaWYgMQorIyBpbmNsdWRlX25leHQgPHdjaGFyLmg+CisjZW5kaWYKKworI3VuZGVmIF9HTF9BTFJFQURZX0lOQ0xVRElOR19XQ0hBUl9ICisKKyNpZm5kZWYgX0dMX1dDSEFSX0gKKyNkZWZpbmUgX0dMX1dDSEFSX0gKKworLyogVGhlIF9fYXR0cmlidXRlX18gZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDIuNSBhbmQgbGF0ZXIuCisgICBUaGUgYXR0cmlidXRlIF9fcHVyZV9fIHdhcyBhZGRlZCBpbiBnY2MgMi45Ni4gICovCisjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk2KQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9QVVJFIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpCisjZWxzZQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9QVVJFIC8qIGVtcHR5ICovCisjZW5kaWYKKworLyogVGhlIGRlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwgZXRjLiBhcmUgY29waWVkIGhlcmUuICAqLworI2lmbmRlZiBfR0xfQ1hYREVGU19ICisjZGVmaW5lIF9HTF9DWFhERUZTX0gKKworLyogVGhlIHRocmVlIG1vc3QgZnJlcXVlbnQgdXNlIGNhc2VzIG9mIHRoZXNlIG1hY3JvcyBhcmU6CisKKyAgICogRm9yIHByb3ZpZGluZyBhIHN1YnN0aXR1dGUgZm9yIGEgZnVuY3Rpb24gdGhhdCBpcyBtaXNzaW5nIG9uIHNvbWUKKyAgICAgcGxhdGZvcm1zLCBidXQgaXMgZGVjbGFyZWQgYW5kIHdvcmtzIGZpbmUgb24gdGhlIHBsYXRmb3JtcyBvbiB3aGljaAorICAgICBpdCBleGlzdHM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiAhQEhBVkVfRk9PQAorICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorCisgICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBhbGwgcGxhdGZvcm1zLAorICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBwbGF0Zm9ybXM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACisgICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyAgICAgICAjICAgdW5kZWYgZm9vCisgICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKyAgICAgICAjIGVsc2UKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorCisgICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBzb21lIHBsYXRmb3JtcworICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBvZiB0aGVtIGFuZAorICAgICBpcyBhZGRpdGlvbmFsbHkgZWl0aGVyIG1pc3Npbmcgb3IgdW5kZWNsYXJlZCBvbiBzb21lIG90aGVyIHBsYXRmb3JtczoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorICAgICAgICMgICB1bmRlZiBmb28KKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworICAgICAgICMgZWxzZQorICAgICAgICMgIGlmICFASEFWRV9GT09AICAgb3IgICBpZiAhQEhBVkVfREVDTF9GT09ACisgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKyovCisKKy8qIF9HTF9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cworIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybiAiQyIKKyNlbHNlCisjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuCisjZW5kaWYKKworLyogX0dMX0ZVTkNERUNMX1JQTCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBkZWNsYXJlcyBhIHJlcGxhY2VtZW50IGZ1bmN0aW9uLCBuYW1lZCBycGxfZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCisgICBFeGFtcGxlOgorICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyAqLworI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9GVU5DREVDTF9SUExfMSAocnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykKKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1JQTF8xKHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICBfR0xfRVhURVJOX0MgcmV0dHlwZSBycGxfZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisKKy8qIF9HTF9GVU5DREVDTF9TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgZGVjbGFyZXMgdGhlIHN5c3RlbSBmdW5jdGlvbiwgbmFtZWQgZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCisgICBFeGFtcGxlOgorICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyAqLworI2RlZmluZSBfR0xfRlVOQ0RFQ0xfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9FWFRFUk5fQyByZXR0eXBlIGZ1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworCisvKiBfR0xfQ1hYQUxJQVNfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCisgICB0aGF0IHJlZGlyZWN0cyB0byBycGxfZnVuYywgaWYgR05VTElCX05BTUVTUEFDRSBpcyBkZWZpbmVkLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0NYWEFMSUFTX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CisgKi8KKyNkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpycGxfZnVuYzsgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xIChmdW5jLCBycGxfZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIHJwbF9mdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50CisgICBkZWNsYXJhdGlvbi4gIEEgY2FzdCBpcyB1c2VkIHRvIHNpbGVuY2UgdGhlICJpbnZhbGlkIGNvbnZlcnNpb24iIGVycm9yCisgICB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6cnBsX2Z1bmMpOyAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCisgICB0aGF0IHJlZGlyZWN0cyB0byB0aGUgc3lzdGVtIHByb3ZpZGVkIGZ1bmN0aW9uIGZ1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UKKyAgIGlzIGRlZmluZWQuCisgICBFeGFtcGxlOgorICAgICBfR0xfQ1hYQUxJQVNfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKyAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisgIC8qIElmIHdlIHdlcmUgdG8gd3JpdGUKKyAgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsKKyAgICAgbGlrZSBhYm92ZSBpbiBfR0xfQ1hYQUxJQVNfUlBMXzEsIHRoZSBjb21waWxlciBjb3VsZCBvcHRpbWl6ZSBjYWxscworICAgICBiZXR0ZXIgKHJlbW92ZSBhbiBpbmRpcmVjdGlvbiB0aHJvdWdoIGEgJ3N0YXRpYycgcG9pbnRlciB2YXJpYWJsZSksCisgICAgIGJ1dCB0aGVuIHRoZSBfR0xfQ1hYQUxJQVNXQVJOIG1hY3JvIGJlbG93IHdvdWxkIGNhdXNlIGEgd2FybmluZyBub3Qgb25seQorICAgICBmb3IgdXNlcyBvZiA6OmZ1bmMgYnV0IGFsc28gZm9yIHVzZXMgb2YgR05VTElCX05BTUVTUEFDRTo6ZnVuYy4gICovCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7ICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBmdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGRlY2xhcmF0aW9uLgorICAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IgdGhhdCB3b3VsZAorICAgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6ZnVuYyk7IFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzLCByZXR0eXBlMiwgcGFyYW1ldGVyczIpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBpcyBwaWNrZWQgYW1vbmcgYSBzZXQgb2Ygb3ZlcmxvYWRlZCBmdW5jdGlvbnMsCisgICBuYW1lbHkgdGhlIG9uZSB3aXRoIHJldHR5cGUyIGFuZCBwYXJhbWV0ZXJzMi4gIFR3byBjb25zZWN1dGl2ZSBjYXN0cworICAgYXJlIHVzZWQgdG8gc2lsZW5jZSB0aGUgImNhbm5vdCBmaW5kIGEgbWF0Y2giIGFuZCAiaW52YWxpZCBjb252ZXJzaW9uIgorICAgZXJyb3JzIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorICAvKiBUaGUgb3V0ZXIgY2FzdCBtdXN0IGJlIGEgcmVpbnRlcnByZXRfY2FzdC4KKyAgICAgVGhlIGlubmVyIGNhc3Q6IFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzZXQgb2Ygb3ZlcmxvYWRlZAorICAgICBmdW5jdGlvbnMsIGl0IHdvcmtzIGFzIGEgc3RhdGljX2Nhc3Q8PiwgY2hvb3NpbmcgdGhlIGRlc2lnbmF0ZWQgdmFyaWFudC4KKyAgICAgV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNpbmdsZSB2YXJpYW50LCBpdCB3b3JrcyBhcyBhCisgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Pi4gVGhlIHBhcmVudGhlc2l6ZWQgY2FzdCBzeW50YXggd29ya3MgYm90aCB3YXlzLiAgKi8KKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAocmV0dHlwZTIoKilwYXJhbWV0ZXJzMikoOjpmdW5jKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU1dBUk4gKGZ1bmMpOworICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gOjpmdW5jIGlzIHVzZWQgYnV0IG5vdCB3aGVuCisgICBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICBmdW5jIG11c3QgYmUgZGVmaW5lZCB3aXRob3V0IG92ZXJsb2FkZWQKKyAgIHZhcmlhbnRzLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOXzEgKGZ1bmMsIEdOVUxJQl9OQU1FU1BBQ0UpCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzEoZnVuYyxuYW1lc3BhY2UpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk5fMiAoZnVuYywgbmFtZXNwYWNlKQorLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKyMgaWYgIV9fT1BUSU1JWkVfXworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgIF9HTF9XQVJOX09OX1VTRSAoZnVuYywgXAorICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAorICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKyAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTV0FSTjEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gdGhlIGdpdmVuIG92ZXJsb2FkZWQgdmFyaWFudCBvZiA6OmZ1bmMKKyAgIGlzIHVzZWQgYnV0IG5vdCB3aGVuIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOMV8xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBHTlVMSUJfTkFNRVNQQUNFKQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk4xXzIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIG5hbWVzcGFjZSkKKy8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAorICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCisjIGlmICFfX09QVElNSVpFX18KKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworIyBlbHNlCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworI2VuZGlmIC8qIF9HTF9DWFhERUZTX0ggKi8KKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxMIGlzIGNvcGllZCBoZXJlLiAgKi8KKy8qIF9HTF9BUkdfTk9OTlVMTCgobiwuLi4sbSkpIHRlbGxzIHRoZSBjb21waWxlciBhbmQgc3RhdGljIGFuYWx5emVyIHRvb2xzCisgICB0aGF0IHRoZSB2YWx1ZXMgcGFzc2VkIGFzIGFyZ3VtZW50cyBuLCAuLi4sIG0gbXVzdCBiZSBub24tTlVMTCBwb2ludGVycy4KKyAgIG4gPSAxIHN0YW5kcyBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50LCBuID0gMiBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCBldGMuICAqLworI2lmbmRlZiBfR0xfQVJHX05PTk5VTEwKKyMgaWYgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gMykgfHwgX19HTlVDX18gPiAzCisjICBkZWZpbmUgX0dMX0FSR19OT05OVUxMKHBhcmFtcykgX19hdHRyaWJ1dGVfXyAoKF9fbm9ubnVsbF9fIHBhcmFtcykpCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKQorIyBlbmRpZgorI2VuZGlmCisKKy8qIFRoZSBkZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRSBpcyBjb3BpZWQgaGVyZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX09OX1VTRQorCisjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorLyogQSBjb21waWxlciBhdHRyaWJ1dGUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyA0LjMuMCBhbmQgbGF0ZXIuICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmN0aW9uKSBmdW5jdGlvbiBfX2F0dHJpYnV0ZV9fICgoX193YXJuaW5nX18gKG1lc3NhZ2UpKSkKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKy8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uCisjIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorX0dMX1dBUk5fRVhURVJOX0MgaW50IF9nbF93YXJuX29uX3VzZQorIyBlbmRpZgorI2VuZGlmCisKKy8qIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmN0aW9uLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCAic3RyaW5nIikKKyAgIGlzIGxpa2UgX0dMX1dBUk5fT05fVVNFIChmdW5jdGlvbiwgInN0cmluZyIpLCBleGNlcHQgdGhhdCB0aGUgZnVuY3Rpb24gaXMKKyAgIGRlY2xhcmVkIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywKKyAgIGFuZCBhdHRyaWJ1dGVzLgorICAgVGhpcyB2YXJpYW50IGlzIHVzZWZ1bCBmb3Igb3ZlcmxvYWRlZCBmdW5jdGlvbnMgaW4gQysrLiBfR0xfV0FSTl9PTl9VU0UgZG9lcworICAgbm90IHdvcmsgaW4gdGhpcyBjYXNlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFX0NYWAorIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK2V4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMgXAorICAgICBfX2F0dHJpYnV0ZV9fICgoX193YXJuaW5nX18gKG1zZykpKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK2V4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCitfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisjIGVuZGlmCisjZW5kaWYKKworLyogX0dMX1dBUk5fRVhURVJOX0MgZGVjbGFyYXRpb247CisgICBwZXJmb3JtcyB0aGUgZGVjbGFyYXRpb24gd2l0aCBDIGxpbmthZ2UuICAqLworI2lmbmRlZiBfR0xfV0FSTl9FWFRFUk5fQworIyBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisjICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuICJDIgorIyBlbHNlCisjICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBEZWZpbmUgd2ludF90IGFuZCBXRU9GLiAgKEFsc28gZG9uZSBpbiB3Y3R5cGUuaW4uaC4pICAqLworI2lmICExICYmICFkZWZpbmVkIHdpbnRfdAorIyBkZWZpbmUgd2ludF90IGludAorIyBpZm5kZWYgV0VPRgorIyAgZGVmaW5lIFdFT0YgLTEKKyMgZW5kaWYKKyNlbHNlCisvKiBNU1ZDIGRlZmluZXMgd2ludF90IGFzICd1bnNpZ25lZCBzaG9ydCcgaW4gPGNydGRlZnMuaD4uCisgICBUaGlzIGlzIHRvbyBzbWFsbDogSVNPIEMgOTkgc2VjdGlvbiA3LjI0LjEuKDIpIHNheXMgdGhhdCB3aW50X3QgbXVzdCBiZQorICAgInVuY2hhbmdlZCBieSBkZWZhdWx0IGFyZ3VtZW50IHByb21vdGlvbnMiLiAgT3ZlcnJpZGUgaXQuICAqLworIyBpZiBkZWZpbmVkIF9NU0NfVkVSCisjICBpZiAhR05VTElCX2RlZmluZWRfd2ludF90CisjICAgaW5jbHVkZSA8Y3J0ZGVmcy5oPgordHlwZWRlZiB1bnNpZ25lZCBpbnQgcnBsX3dpbnRfdDsKKyMgICB1bmRlZiB3aW50X3QKKyMgICBkZWZpbmUgd2ludF90IHJwbF93aW50X3QKKyMgICBkZWZpbmUgR05VTElCX2RlZmluZWRfd2ludF90IDEKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmbmRlZiBXRU9GCisjICBkZWZpbmUgV0VPRiAoKHdpbnRfdCkgLTEpCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBPdmVycmlkZSBtYnN0YXRlX3QgaWYgaXQgaXMgdG9vIHNtYWxsLgorICAgT24gSVJJWCA2LjUsIHNpemVvZiAobWJzdGF0ZV90KSA9PSAxLCB3aGljaCBpcyBub3Qgc3VmZmljaWVudCBmb3IKKyAgIGltcGxlbWVudGluZyBtYnJ0b3djIGZvciBlbmNvZGluZ3MgbGlrZSBVVEYtOC4gICovCisjaWYgISgxICYmIDEpIHx8IDAKKyMgaWYgIUdOVUxJQl9kZWZpbmVkX21ic3RhdGVfdAordHlwZWRlZiBpbnQgcnBsX21ic3RhdGVfdDsKKyMgIHVuZGVmIG1ic3RhdGVfdAorIyAgZGVmaW5lIG1ic3RhdGVfdCBycGxfbWJzdGF0ZV90CisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfbWJzdGF0ZV90IDEKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIENvbnZlcnQgYSBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXIgdG8gYSB3aWRlIGNoYXJhY3Rlci4gICovCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGJ0b3djCisjICAgZGVmaW5lIGJ0b3djIHJwbF9idG93YworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGJ0b3djLCB3aW50X3QsIChpbnQgYykgX0dMX0FUVFJJQlVURV9QVVJFKTsKK19HTF9DWFhBTElBU19SUEwgKGJ0b3djLCB3aW50X3QsIChpbnQgYykpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoYnRvd2MsIHdpbnRfdCwgKGludCBjKSBfR0xfQVRUUklCVVRFX1BVUkUpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGJ0b3djLCB3aW50X3QsIChpbnQgYykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoYnRvd2MpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBidG93YworIyBpZiBIQVZFX1JBV19ERUNMX0JUT1dDCitfR0xfV0FSTl9PTl9VU0UgKGJ0b3djLCAiYnRvd2MgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGJ0b3djIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogQ29udmVydCBhIHdpZGUgY2hhcmFjdGVyIHRvIGEgc2luZ2xlLWJ5dGUgY2hhcmFjdGVyLiAgKi8KKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgd2N0b2IKKyMgICBkZWZpbmUgd2N0b2IgcnBsX3djdG9iCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAod2N0b2IsIGludCwgKHdpbnRfdCB3YykgX0dMX0FUVFJJQlVURV9QVVJFKTsKK19HTF9DWFhBTElBU19SUEwgKHdjdG9iLCBpbnQsICh3aW50X3Qgd2MpKTsKKyMgZWxzZQorIyAgaWYgIWRlZmluZWQgd2N0b2IgJiYgITEKKy8qIHdjdG9iIGlzIHByb3ZpZGVkIGJ5IGdudWxpYiwgb3Igd2N0b2IgZXhpc3RzIGJ1dCBpcyBub3QgZGVjbGFyZWQuICAqLworX0dMX0ZVTkNERUNMX1NZUyAod2N0b2IsIGludCwgKHdpbnRfdCB3YykgX0dMX0FUVFJJQlVURV9QVVJFKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3RvYiwgaW50LCAod2ludF90IHdjKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOICh3Y3RvYik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjdG9iCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NUT0IKK19HTF9XQVJOX09OX1VTRSAod2N0b2IsICJ3Y3RvYiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2N0b2IgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBUZXN0IHdoZXRoZXIgKlBTIGlzIGluIHRoZSBpbml0aWFsIHN0YXRlLiAgKi8KKyNpZiAxCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbWJzaW5pdAorIyAgIGRlZmluZSBtYnNpbml0IHJwbF9tYnNpbml0CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobWJzaW5pdCwgaW50LCAoY29uc3QgbWJzdGF0ZV90ICpwcykpOworX0dMX0NYWEFMSUFTX1JQTCAobWJzaW5pdCwgaW50LCAoY29uc3QgbWJzdGF0ZV90ICpwcykpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAobWJzaW5pdCwgaW50LCAoY29uc3QgbWJzdGF0ZV90ICpwcykpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKG1ic2luaXQsIGludCwgKGNvbnN0IG1ic3RhdGVfdCAqcHMpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG1ic2luaXQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBtYnNpbml0CisjIGlmIEhBVkVfUkFXX0RFQ0xfTUJTSU5JVAorX0dMX1dBUk5fT05fVVNFIChtYnNpbml0LCAibWJzaW5pdCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWJzaW5pdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIENvbnZlcnQgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyIHRvIGEgd2lkZSBjaGFyYWN0ZXIuICAqLworI2lmIDEKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBtYnJ0b3djCisjICAgZGVmaW5lIG1icnRvd2MgcnBsX21icnRvd2MKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChtYnJ0b3djLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqcHdjLCBjb25zdCBjaGFyICpzLCBzaXplX3QgbiwgbWJzdGF0ZV90ICpwcykpOworX0dMX0NYWEFMSUFTX1JQTCAobWJydG93Yywgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKnB3YywgY29uc3QgY2hhciAqcywgc2l6ZV90IG4sIG1ic3RhdGVfdCAqcHMpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKG1icnRvd2MsIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICh3Y2hhcl90ICpwd2MsIGNvbnN0IGNoYXIgKnMsIHNpemVfdCBuLCBtYnN0YXRlX3QgKnBzKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobWJydG93Yywgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKnB3YywgY29uc3QgY2hhciAqcywgc2l6ZV90IG4sIG1ic3RhdGVfdCAqcHMpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG1icnRvd2MpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBtYnJ0b3djCisjIGlmIEhBVkVfUkFXX0RFQ0xfTUJSVE9XQworX0dMX1dBUk5fT05fVVNFIChtYnJ0b3djLCAibWJydG93YyBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWJydG93YyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIFJlY29nbml6ZSBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIuICAqLworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBtYnJsZW4KKyMgICBkZWZpbmUgbWJybGVuIHJwbF9tYnJsZW4KKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChtYnJsZW4sIHNpemVfdCwgKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBuLCBtYnN0YXRlX3QgKnBzKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChtYnJsZW4sIHNpemVfdCwgKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBuLCBtYnN0YXRlX3QgKnBzKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChtYnJsZW4sIHNpemVfdCwgKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBuLCBtYnN0YXRlX3QgKnBzKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobWJybGVuLCBzaXplX3QsIChjb25zdCBjaGFyICpzLCBzaXplX3QgbiwgbWJzdGF0ZV90ICpwcykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobWJybGVuKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbWJybGVuCisjIGlmIEhBVkVfUkFXX0RFQ0xfTUJSTEVOCitfR0xfV0FSTl9PTl9VU0UgKG1icmxlbiwgIm1icmxlbiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWJybGVuIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogQ29udmVydCBhIHN0cmluZyB0byBhIHdpZGUgc3RyaW5nLiAgKi8KKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbWJzcnRvd2NzCisjICAgZGVmaW5lIG1ic3J0b3djcyBycGxfbWJzcnRvd2NzCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobWJzcnRvd2NzLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqZGVzdCwgY29uc3QgY2hhciAqKnNyY3AsIHNpemVfdCBsZW4sIG1ic3RhdGVfdCAqcHMpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAobWJzcnRvd2NzLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqZGVzdCwgY29uc3QgY2hhciAqKnNyY3AsIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpwcykpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAobWJzcnRvd2NzLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqZGVzdCwgY29uc3QgY2hhciAqKnNyY3AsIHNpemVfdCBsZW4sIG1ic3RhdGVfdCAqcHMpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKG1ic3J0b3djcywgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKmRlc3QsIGNvbnN0IGNoYXIgKipzcmNwLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqcHMpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG1ic3J0b3djcyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG1ic3J0b3djcworIyBpZiBIQVZFX1JBV19ERUNMX01CU1JUT1dDUworX0dMX1dBUk5fT05fVVNFIChtYnNydG93Y3MsICJtYnNydG93Y3MgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG1ic3J0b3djcyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIENvbnZlcnQgYSBzdHJpbmcgdG8gYSB3aWRlIHN0cmluZy4gICovCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIG1ic25ydG93Y3MKKyMgICBkZWZpbmUgbWJzbnJ0b3djcyBycGxfbWJzbnJ0b3djcworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG1ic25ydG93Y3MsIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICh3Y2hhcl90ICpkZXN0LCBjb25zdCBjaGFyICoqc3JjcCwgc2l6ZV90IHNyY2xlbiwgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKnBzKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKG1ic25ydG93Y3MsIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICh3Y2hhcl90ICpkZXN0LCBjb25zdCBjaGFyICoqc3JjcCwgc2l6ZV90IHNyY2xlbiwgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKnBzKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChtYnNucnRvd2NzLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqZGVzdCwgY29uc3QgY2hhciAqKnNyY3AsIHNpemVfdCBzcmNsZW4sIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpwcykKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobWJzbnJ0b3djcywgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKmRlc3QsIGNvbnN0IGNoYXIgKipzcmNwLCBzaXplX3Qgc3JjbGVuLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqcHMpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG1ic25ydG93Y3MpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBtYnNucnRvd2NzCisjIGlmIEhBVkVfUkFXX0RFQ0xfTUJTTlJUT1dDUworX0dMX1dBUk5fT05fVVNFIChtYnNucnRvd2NzLCAibWJzbnJ0b3djcyBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWJzbnJ0b3djcyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIENvbnZlcnQgYSB3aWRlIGNoYXJhY3RlciB0byBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIuICAqLworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiB3Y3J0b21iCisjICAgZGVmaW5lIHdjcnRvbWIgcnBsX3djcnRvbWIKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh3Y3J0b21iLCBzaXplX3QsIChjaGFyICpzLCB3Y2hhcl90IHdjLCBtYnN0YXRlX3QgKnBzKSk7CitfR0xfQ1hYQUxJQVNfUlBMICh3Y3J0b21iLCBzaXplX3QsIChjaGFyICpzLCB3Y2hhcl90IHdjLCBtYnN0YXRlX3QgKnBzKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3J0b21iLCBzaXplX3QsIChjaGFyICpzLCB3Y2hhcl90IHdjLCBtYnN0YXRlX3QgKnBzKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod2NydG9tYiwgc2l6ZV90LCAoY2hhciAqcywgd2NoYXJfdCB3YywgbWJzdGF0ZV90ICpwcykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAod2NydG9tYik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjcnRvbWIKKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1JUT01CCitfR0xfV0FSTl9PTl9VU0UgKHdjcnRvbWIsICJ3Y3J0b21iIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3J0b21iIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogQ29udmVydCBhIHdpZGUgc3RyaW5nIHRvIGEgc3RyaW5nLiAgKi8KKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgd2NzcnRvbWJzCisjICAgZGVmaW5lIHdjc3J0b21icyBycGxfd2NzcnRvbWJzCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAod2NzcnRvbWJzLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAoY2hhciAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqKnNyY3AsIHNpemVfdCBsZW4sIG1ic3RhdGVfdCAqcHMpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAod2NzcnRvbWJzLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAoY2hhciAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqKnNyY3AsIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpwcykpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAod2NzcnRvbWJzLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAoY2hhciAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqKnNyY3AsIHNpemVfdCBsZW4sIG1ic3RhdGVfdCAqcHMpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjc3J0b21icywgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKmRlc3QsIGNvbnN0IHdjaGFyX3QgKipzcmNwLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqcHMpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHdjc3J0b21icyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc3J0b21icworIyBpZiBIQVZFX1JBV19ERUNMX1dDU1JUT01CUworX0dMX1dBUk5fT05fVVNFICh3Y3NydG9tYnMsICJ3Y3NydG9tYnMgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdjc3J0b21icyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIENvbnZlcnQgYSB3aWRlIHN0cmluZyB0byBhIHN0cmluZy4gICovCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHdjc25ydG9tYnMKKyMgICBkZWZpbmUgd2NzbnJ0b21icyBycGxfd2NzbnJ0b21icworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHdjc25ydG9tYnMsIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpkZXN0LCBjb25zdCB3Y2hhcl90ICoqc3JjcCwgc2l6ZV90IHNyY2xlbiwgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKnBzKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHdjc25ydG9tYnMsIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpkZXN0LCBjb25zdCB3Y2hhcl90ICoqc3JjcCwgc2l6ZV90IHNyY2xlbiwgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKnBzKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3NucnRvbWJzLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAoY2hhciAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqKnNyY3AsIHNpemVfdCBzcmNsZW4sIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpwcykKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod2NzbnJ0b21icywgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKmRlc3QsIGNvbnN0IHdjaGFyX3QgKipzcmNwLCBzaXplX3Qgc3JjbGVuLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqcHMpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHdjc25ydG9tYnMpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3NucnRvbWJzCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NTTlJUT01CUworX0dMX1dBUk5fT05fVVNFICh3Y3NucnRvbWJzLCAid2NzbnJ0b21icyBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NzbnJ0b21icyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIHNjcmVlbiBjb2x1bW5zIG5lZWRlZCBmb3IgV0MuICAqLworI2lmIDEKKyMgaWYgMQorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiB3Y3dpZHRoCisjICAgZGVmaW5lIHdjd2lkdGggcnBsX3djd2lkdGgKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh3Y3dpZHRoLCBpbnQsICh3Y2hhcl90KSBfR0xfQVRUUklCVVRFX1BVUkUpOworX0dMX0NYWEFMSUFTX1JQTCAod2N3aWR0aCwgaW50LCAod2NoYXJfdCkpOworIyBlbHNlCisjICBpZiAhMQorLyogd2N3aWR0aCBleGlzdHMgYnV0IGlzIG5vdCBkZWNsYXJlZC4gICovCitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3dpZHRoLCBpbnQsICh3Y2hhcl90KSBfR0xfQVRUUklCVVRFX1BVUkUpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjd2lkdGgsIGludCwgKHdjaGFyX3QpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHdjd2lkdGgpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3dpZHRoCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NXSURUSAorX0dMX1dBUk5fT05fVVNFICh3Y3dpZHRoLCAid2N3aWR0aCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2N3aWR0aCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIFNlYXJjaCBOIHdpZGUgY2hhcmFjdGVycyBvZiBTIGZvciBDLiAgKi8KKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh3bWVtY2hyLCB3Y2hhcl90ICosIChjb25zdCB3Y2hhcl90ICpzLCB3Y2hhcl90IGMsIHNpemVfdCBuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUpOworIyBlbmRpZgorICAvKiBPbiBzb21lIHN5c3RlbXMsIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhbiBvdmVybG9hZGVkIGZ1bmN0aW9uOgorICAgICAgIGV4dGVybiAiQysrIiB7CisgICAgICAgICBjb25zdCB3Y2hhcl90ICogc3RkOjp3bWVtY2hyIChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QsIHNpemVfdCk7CisgICAgICAgICB3Y2hhcl90ICogc3RkOjp3bWVtY2hyICh3Y2hhcl90ICosIHdjaGFyX3QsIHNpemVfdCk7CisgICAgICAgfSAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVDIgKHdtZW1jaHIsCisgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICosIChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QsIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICosIChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QsIHNpemVfdCkpOworIyBpZiAoKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxMCkgJiYgIWRlZmluZWQgX19VQ0xJQkNfXykgXAorICAgICAmJiAoX19HTlVDX18gPiA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDQpKQorX0dMX0NYWEFMSUFTV0FSTjEgKHdtZW1jaHIsIHdjaGFyX3QgKiwgKHdjaGFyX3QgKnMsIHdjaGFyX3QgYywgc2l6ZV90IG4pKTsKK19HTF9DWFhBTElBU1dBUk4xICh3bWVtY2hyLCBjb25zdCB3Y2hhcl90ICosCisgICAgICAgICAgICAgICAgICAgKGNvbnN0IHdjaGFyX3QgKnMsIHdjaGFyX3QgYywgc2l6ZV90IG4pKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTV0FSTiAod21lbWNocik7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdtZW1jaHIKKyMgaWYgSEFWRV9SQVdfREVDTF9XTUVNQ0hSCitfR0xfV0FSTl9PTl9VU0UgKHdtZW1jaHIsICJ3bWVtY2hyIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3bWVtY2hyIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogQ29tcGFyZSBOIHdpZGUgY2hhcmFjdGVycyBvZiBTMSBhbmQgUzIuICAqLworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHdtZW1jbXAsIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCB3Y2hhcl90ICpzMSwgY29uc3Qgd2NoYXJfdCAqczIsIHNpemVfdCBuKQorICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdtZW1jbXAsIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCB3Y2hhcl90ICpzMSwgY29uc3Qgd2NoYXJfdCAqczIsIHNpemVfdCBuKSk7CitfR0xfQ1hYQUxJQVNXQVJOICh3bWVtY21wKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd21lbWNtcAorIyBpZiBIQVZFX1JBV19ERUNMX1dNRU1DTVAKK19HTF9XQVJOX09OX1VTRSAod21lbWNtcCwgIndtZW1jbXAgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdtZW1jbXAgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBDb3B5IE4gd2lkZSBjaGFyYWN0ZXJzIG9mIFNSQyB0byBERVNULiAgKi8KKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh3bWVtY3B5LCB3Y2hhcl90ICosCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqc3JjLCBzaXplX3QgbikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod21lbWNweSwgd2NoYXJfdCAqLAorICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKmRlc3QsIGNvbnN0IHdjaGFyX3QgKnNyYywgc2l6ZV90IG4pKTsKK19HTF9DWFhBTElBU1dBUk4gKHdtZW1jcHkpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3bWVtY3B5CisjIGlmIEhBVkVfUkFXX0RFQ0xfV01FTUNQWQorX0dMX1dBUk5fT05fVVNFICh3bWVtY3B5LCAid21lbWNweSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd21lbWNweSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIENvcHkgTiB3aWRlIGNoYXJhY3RlcnMgb2YgU1JDIHRvIERFU1QsIGd1YXJhbnRlZWluZyBjb3JyZWN0IGJlaGF2aW9yIGZvcgorICAgb3ZlcmxhcHBpbmcgbWVtb3J5IGFyZWFzLiAgKi8KKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh3bWVtbW92ZSwgd2NoYXJfdCAqLAorICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKmRlc3QsIGNvbnN0IHdjaGFyX3QgKnNyYywgc2l6ZV90IG4pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdtZW1tb3ZlLCB3Y2hhcl90ICosCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqc3JjLCBzaXplX3QgbikpOworX0dMX0NYWEFMSUFTV0FSTiAod21lbW1vdmUpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3bWVtbW92ZQorIyBpZiBIQVZFX1JBV19ERUNMX1dNRU1NT1ZFCitfR0xfV0FSTl9PTl9VU0UgKHdtZW1tb3ZlLCAid21lbW1vdmUgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdtZW1tb3ZlIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogU2V0IE4gd2lkZSBjaGFyYWN0ZXJzIG9mIFMgdG8gQy4gICovCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAod21lbXNldCwgd2NoYXJfdCAqLCAod2NoYXJfdCAqcywgd2NoYXJfdCBjLCBzaXplX3QgbikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod21lbXNldCwgd2NoYXJfdCAqLCAod2NoYXJfdCAqcywgd2NoYXJfdCBjLCBzaXplX3QgbikpOworX0dMX0NYWEFMSUFTV0FSTiAod21lbXNldCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdtZW1zZXQKKyMgaWYgSEFWRV9SQVdfREVDTF9XTUVNU0VUCitfR0xfV0FSTl9PTl9VU0UgKHdtZW1zZXQsICJ3bWVtc2V0IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3bWVtc2V0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2Ygd2lkZSBjaGFyYWN0ZXJzIGluIFMuICAqLworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHdjc2xlbiwgc2l6ZV90LCAoY29uc3Qgd2NoYXJfdCAqcykgX0dMX0FUVFJJQlVURV9QVVJFKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjc2xlbiwgc2l6ZV90LCAoY29uc3Qgd2NoYXJfdCAqcykpOworX0dMX0NYWEFMSUFTV0FSTiAod2NzbGVuKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2NzbGVuCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NTTEVOCitfR0xfV0FSTl9PTl9VU0UgKHdjc2xlbiwgIndjc2xlbiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NzbGVuIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2Ygd2lkZSBjaGFyYWN0ZXJzIGluIFMsIGJ1dCBhdCBtb3N0IE1BWExFTi4gICovCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAod2Nzbmxlbiwgc2l6ZV90LCAoY29uc3Qgd2NoYXJfdCAqcywgc2l6ZV90IG1heGxlbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjc25sZW4sIHNpemVfdCwgKGNvbnN0IHdjaGFyX3QgKnMsIHNpemVfdCBtYXhsZW4pKTsKK19HTF9DWFhBTElBU1dBUk4gKHdjc25sZW4pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3NubGVuCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NTTkxFTgorX0dMX1dBUk5fT05fVVNFICh3Y3NubGVuLCAid2NzbmxlbiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NzbmxlbiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIENvcHkgU1JDIHRvIERFU1QuICAqLworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHdjc2NweSwgd2NoYXJfdCAqLCAod2NoYXJfdCAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqc3JjKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3NjcHksIHdjaGFyX3QgKiwgKHdjaGFyX3QgKmRlc3QsIGNvbnN0IHdjaGFyX3QgKnNyYykpOworX0dMX0NYWEFMSUFTV0FSTiAod2NzY3B5KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2NzY3B5CisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NTQ1BZCitfR0xfV0FSTl9PTl9VU0UgKHdjc2NweSwgIndjc2NweSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NzY3B5IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogQ29weSBTUkMgdG8gREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyBMJ1wwJyBpbiBERVNULiAgKi8KKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3BjcHksIHdjaGFyX3QgKiwgKHdjaGFyX3QgKmRlc3QsIGNvbnN0IHdjaGFyX3QgKnNyYykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod2NwY3B5LCB3Y2hhcl90ICosICh3Y2hhcl90ICpkZXN0LCBjb25zdCB3Y2hhcl90ICpzcmMpKTsKK19HTF9DWFhBTElBU1dBUk4gKHdjcGNweSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjcGNweQorIyBpZiBIQVZFX1JBV19ERUNMX1dDUENQWQorX0dMX1dBUk5fT05fVVNFICh3Y3BjcHksICJ3Y3BjcHkgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdjcGNweSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIENvcHkgbm8gbW9yZSB0aGFuIE4gd2lkZSBjaGFyYWN0ZXJzIG9mIFNSQyB0byBERVNULiAgKi8KKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3NuY3B5LCB3Y2hhcl90ICosCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqc3JjLCBzaXplX3QgbikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod2NzbmNweSwgd2NoYXJfdCAqLAorICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKmRlc3QsIGNvbnN0IHdjaGFyX3QgKnNyYywgc2l6ZV90IG4pKTsKK19HTF9DWFhBTElBU1dBUk4gKHdjc25jcHkpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3NuY3B5CisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NTTkNQWQorX0dMX1dBUk5fT05fVVNFICh3Y3NuY3B5LCAid2NzbmNweSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NzbmNweSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIENvcHkgbm8gbW9yZSB0aGFuIE4gY2hhcmFjdGVycyBvZiBTUkMgdG8gREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mCisgICB0aGUgbGFzdCBjaGFyYWN0ZXIgd3JpdHRlbiBpbnRvIERFU1QuICAqLworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHdjcG5jcHksIHdjaGFyX3QgKiwKKyAgICAgICAgICAgICAgICAgICh3Y2hhcl90ICpkZXN0LCBjb25zdCB3Y2hhcl90ICpzcmMsIHNpemVfdCBuKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3BuY3B5LCB3Y2hhcl90ICosCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqc3JjLCBzaXplX3QgbikpOworX0dMX0NYWEFMSUFTV0FSTiAod2NwbmNweSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjcG5jcHkKKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1BOQ1BZCitfR0xfV0FSTl9PTl9VU0UgKHdjcG5jcHksICJ3Y3BuY3B5IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3BuY3B5IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogQXBwZW5kIFNSQyBvbnRvIERFU1QuICAqLworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHdjc2NhdCwgd2NoYXJfdCAqLCAod2NoYXJfdCAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqc3JjKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3NjYXQsIHdjaGFyX3QgKiwgKHdjaGFyX3QgKmRlc3QsIGNvbnN0IHdjaGFyX3QgKnNyYykpOworX0dMX0NYWEFMSUFTV0FSTiAod2NzY2F0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2NzY2F0CisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NTQ0FUCitfR0xfV0FSTl9PTl9VU0UgKHdjc2NhdCwgIndjc2NhdCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NzY2F0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogQXBwZW5kIG5vIG1vcmUgdGhhbiBOIHdpZGUgY2hhcmFjdGVycyBvZiBTUkMgb250byBERVNULiAgKi8KKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3NuY2F0LCB3Y2hhcl90ICosCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqc3JjLCBzaXplX3QgbikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod2NzbmNhdCwgd2NoYXJfdCAqLAorICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKmRlc3QsIGNvbnN0IHdjaGFyX3QgKnNyYywgc2l6ZV90IG4pKTsKK19HTF9DWFhBTElBU1dBUk4gKHdjc25jYXQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3NuY2F0CisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NTTkNBVAorX0dMX1dBUk5fT05fVVNFICh3Y3NuY2F0LCAid2NzbmNhdCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NzbmNhdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIENvbXBhcmUgUzEgYW5kIFMyLiAgKi8KKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3NjbXAsIGludCwgKGNvbnN0IHdjaGFyX3QgKnMxLCBjb25zdCB3Y2hhcl90ICpzMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod2NzY21wLCBpbnQsIChjb25zdCB3Y2hhcl90ICpzMSwgY29uc3Qgd2NoYXJfdCAqczIpKTsKK19HTF9DWFhBTElBU1dBUk4gKHdjc2NtcCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc2NtcAorIyBpZiBIQVZFX1JBV19ERUNMX1dDU0NNUAorX0dMX1dBUk5fT05fVVNFICh3Y3NjbXAsICJ3Y3NjbXAgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdjc2NtcCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIENvbXBhcmUgbm8gbW9yZSB0aGFuIE4gd2lkZSBjaGFyYWN0ZXJzIG9mIFMxIGFuZCBTMi4gICovCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAod2NzbmNtcCwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHdjaGFyX3QgKnMxLCBjb25zdCB3Y2hhcl90ICpzMiwgc2l6ZV90IG4pCisgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod2NzbmNtcCwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHdjaGFyX3QgKnMxLCBjb25zdCB3Y2hhcl90ICpzMiwgc2l6ZV90IG4pKTsKK19HTF9DWFhBTElBU1dBUk4gKHdjc25jbXApOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3NuY21wCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NTTkNNUAorX0dMX1dBUk5fT05fVVNFICh3Y3NuY21wLCAid2NzbmNtcCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NzbmNtcCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIENvbXBhcmUgUzEgYW5kIFMyLCBpZ25vcmluZyBjYXNlLiAgKi8KKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3NjYXNlY21wLCBpbnQsIChjb25zdCB3Y2hhcl90ICpzMSwgY29uc3Qgd2NoYXJfdCAqczIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3NjYXNlY21wLCBpbnQsIChjb25zdCB3Y2hhcl90ICpzMSwgY29uc3Qgd2NoYXJfdCAqczIpKTsKK19HTF9DWFhBTElBU1dBUk4gKHdjc2Nhc2VjbXApOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3NjYXNlY21wCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NTQ0FTRUNNUAorX0dMX1dBUk5fT05fVVNFICh3Y3NjYXNlY21wLCAid2NzY2FzZWNtcCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NzY2FzZWNtcCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIENvbXBhcmUgbm8gbW9yZSB0aGFuIE4gY2hhcnMgb2YgUzEgYW5kIFMyLCBpZ25vcmluZyBjYXNlLiAgKi8KKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3NuY2FzZWNtcCwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHdjaGFyX3QgKnMxLCBjb25zdCB3Y2hhcl90ICpzMiwgc2l6ZV90IG4pCisgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod2NzbmNhc2VjbXAsIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCB3Y2hhcl90ICpzMSwgY29uc3Qgd2NoYXJfdCAqczIsIHNpemVfdCBuKSk7CitfR0xfQ1hYQUxJQVNXQVJOICh3Y3NuY2FzZWNtcCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc25jYXNlY21wCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NTTkNBU0VDTVAKK19HTF9XQVJOX09OX1VTRSAod2NzbmNhc2VjbXAsICJ3Y3NuY2FzZWNtcCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NzbmNhc2VjbXAgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBDb21wYXJlIFMxIGFuZCBTMiwgYm90aCBpbnRlcnByZXRlZCBhcyBhcHByb3ByaWF0ZSB0byB0aGUgTENfQ09MTEFURQorICAgY2F0ZWdvcnkgb2YgdGhlIGN1cnJlbnQgbG9jYWxlLiAgKi8KKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3Njb2xsLCBpbnQsIChjb25zdCB3Y2hhcl90ICpzMSwgY29uc3Qgd2NoYXJfdCAqczIpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjc2NvbGwsIGludCwgKGNvbnN0IHdjaGFyX3QgKnMxLCBjb25zdCB3Y2hhcl90ICpzMikpOworX0dMX0NYWEFMSUFTV0FSTiAod2NzY29sbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc2NvbGwKKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1NDT0xMCitfR0xfV0FSTl9PTl9VU0UgKHdjc2NvbGwsICJ3Y3Njb2xsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3Njb2xsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogVHJhbnNmb3JtIFMyIGludG8gYXJyYXkgcG9pbnRlZCB0byBieSBTMSBzdWNoIHRoYXQgaWYgd2NzY21wIGlzIGFwcGxpZWQKKyAgIHRvIHR3byB0cmFuc2Zvcm1lZCBzdHJpbmdzIHRoZSByZXN1bHQgaXMgdGhlIGFzIGFwcGx5aW5nICd3Y3Njb2xsJyB0byB0aGUKKyAgIG9yaWdpbmFsIHN0cmluZ3MuICAqLworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHdjc3hmcm0sIHNpemVfdCwgKHdjaGFyX3QgKnMxLCBjb25zdCB3Y2hhcl90ICpzMiwgc2l6ZV90IG4pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjc3hmcm0sIHNpemVfdCwgKHdjaGFyX3QgKnMxLCBjb25zdCB3Y2hhcl90ICpzMiwgc2l6ZV90IG4pKTsKK19HTF9DWFhBTElBU1dBUk4gKHdjc3hmcm0pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3N4ZnJtCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NTWEZSTQorX0dMX1dBUk5fT05fVVNFICh3Y3N4ZnJtLCAid2NzeGZybSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NzeGZybSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIER1cGxpY2F0ZSBTLCByZXR1cm5pbmcgYW4gaWRlbnRpY2FsIG1hbGxvYydkIHN0cmluZy4gICovCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAod2NzZHVwLCB3Y2hhcl90ICosIChjb25zdCB3Y2hhcl90ICpzKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3NkdXAsIHdjaGFyX3QgKiwgKGNvbnN0IHdjaGFyX3QgKnMpKTsKK19HTF9DWFhBTElBU1dBUk4gKHdjc2R1cCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc2R1cAorIyBpZiBIQVZFX1JBV19ERUNMX1dDU0RVUAorX0dMX1dBUk5fT05fVVNFICh3Y3NkdXAsICJ3Y3NkdXAgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdjc2R1cCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgV0MgaW4gV0NTLiAgKi8KKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3NjaHIsIHdjaGFyX3QgKiwgKGNvbnN0IHdjaGFyX3QgKndjcywgd2NoYXJfdCB3YykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUpOworIyBlbmRpZgorICAvKiBPbiBzb21lIHN5c3RlbXMsIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhbiBvdmVybG9hZGVkIGZ1bmN0aW9uOgorICAgICAgIGV4dGVybiAiQysrIiB7CisgICAgICAgICBjb25zdCB3Y2hhcl90ICogc3RkOjp3Y3NjaHIgKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCk7CisgICAgICAgICB3Y2hhcl90ICogc3RkOjp3Y3NjaHIgKHdjaGFyX3QgKiwgd2NoYXJfdCk7CisgICAgICAgfSAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVDIgKHdjc2NociwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKiwgKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCksCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICosIChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QpKTsKKyMgaWYgKChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMTApICYmICFkZWZpbmVkIF9fVUNMSUJDX18pIFwKKyAgICAgJiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0KSkKK19HTF9DWFhBTElBU1dBUk4xICh3Y3NjaHIsIHdjaGFyX3QgKiwgKHdjaGFyX3QgKndjcywgd2NoYXJfdCB3YykpOworX0dMX0NYWEFMSUFTV0FSTjEgKHdjc2NociwgY29uc3Qgd2NoYXJfdCAqLCAoY29uc3Qgd2NoYXJfdCAqd2NzLCB3Y2hhcl90IHdjKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU1dBUk4gKHdjc2Nocik7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc2NocgorIyBpZiBIQVZFX1JBV19ERUNMX1dDU0NIUgorX0dMX1dBUk5fT05fVVNFICh3Y3NjaHIsICJ3Y3NjaHIgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdjc2NociBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIEZpbmQgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBXQyBpbiBXQ1MuICAqLworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHdjc3JjaHIsIHdjaGFyX3QgKiwgKGNvbnN0IHdjaGFyX3QgKndjcywgd2NoYXJfdCB3YykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFKTsKKyMgZW5kaWYKKyAgLyogT24gc29tZSBzeXN0ZW1zLCB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYW4gb3ZlcmxvYWRlZCBmdW5jdGlvbjoKKyAgICAgICBleHRlcm4gIkMrKyIgeworICAgICAgICAgY29uc3Qgd2NoYXJfdCAqIHN0ZDo6d2NzcmNociAoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90KTsKKyAgICAgICAgIHdjaGFyX3QgKiBzdGQ6Ondjc3JjaHIgKHdjaGFyX3QgKiwgd2NoYXJfdCk7CisgICAgICAgfSAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVDIgKHdjc3JjaHIsCisgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICosIChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqLCAoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90KSk7CisjIGlmICgoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEwKSAmJiAhZGVmaW5lZCBfX1VDTElCQ19fKSBcCisgICAgICYmIChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNCkpCitfR0xfQ1hYQUxJQVNXQVJOMSAod2NzcmNociwgd2NoYXJfdCAqLCAod2NoYXJfdCAqd2NzLCB3Y2hhcl90IHdjKSk7CitfR0xfQ1hYQUxJQVNXQVJOMSAod2NzcmNociwgY29uc3Qgd2NoYXJfdCAqLCAoY29uc3Qgd2NoYXJfdCAqd2NzLCB3Y2hhcl90IHdjKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU1dBUk4gKHdjc3JjaHIpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3NyY2hyCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NTUkNIUgorX0dMX1dBUk5fT05fVVNFICh3Y3NyY2hyLCAid2NzcmNociBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NzcmNociBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbml0aWFsIHNlZ21ldCBvZiBXQ1Mgd2hpY2ggY29uc2lzdHMgZW50aXJlbHkKKyAgIG9mIHdpZGUgY2hhcmFjdGVycyBub3QgaW4gUkVKRUNULiAgKi8KKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3Njc3BuLCBzaXplX3QsIChjb25zdCB3Y2hhcl90ICp3Y3MsIGNvbnN0IHdjaGFyX3QgKnJlamVjdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjc2NzcG4sIHNpemVfdCwgKGNvbnN0IHdjaGFyX3QgKndjcywgY29uc3Qgd2NoYXJfdCAqcmVqZWN0KSk7CitfR0xfQ1hYQUxJQVNXQVJOICh3Y3Njc3BuKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2NzY3NwbgorIyBpZiBIQVZFX1JBV19ERUNMX1dDU0NTUE4KK19HTF9XQVJOX09OX1VTRSAod2NzY3NwbiwgIndjc2NzcG4gaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdjc2NzcG4gZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgaW5pdGlhbCBzZWdtZXQgb2YgV0NTIHdoaWNoIGNvbnNpc3RzIGVudGlyZWx5CisgICBvZiB3aWRlIGNoYXJhY3RlcnMgaW4gQUNDRVBULiAgKi8KKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3NzcG4sIHNpemVfdCwgKGNvbnN0IHdjaGFyX3QgKndjcywgY29uc3Qgd2NoYXJfdCAqYWNjZXB0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3NzcG4sIHNpemVfdCwgKGNvbnN0IHdjaGFyX3QgKndjcywgY29uc3Qgd2NoYXJfdCAqYWNjZXB0KSk7CitfR0xfQ1hYQUxJQVNXQVJOICh3Y3NzcG4pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3NzcG4KKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1NTUE4KK19HTF9XQVJOX09OX1VTRSAod2Nzc3BuLCAid2Nzc3BuIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3NzcG4gZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIGluIFdDUyBvZiBhbnkgY2hhcmFjdGVyIGluIEFDQ0VQVC4gICovCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAod2NzcGJyaywgd2NoYXJfdCAqLAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHdjaGFyX3QgKndjcywgY29uc3Qgd2NoYXJfdCAqYWNjZXB0KQorICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFKTsKKyMgZW5kaWYKKyAgLyogT24gc29tZSBzeXN0ZW1zLCB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYW4gb3ZlcmxvYWRlZCBmdW5jdGlvbjoKKyAgICAgICBleHRlcm4gIkMrKyIgeworICAgICAgICAgY29uc3Qgd2NoYXJfdCAqIHN0ZDo6d2NzcGJyayAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOworICAgICAgICAgd2NoYXJfdCAqIHN0ZDo6d2NzcGJyayAod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOworICAgICAgIH0gICovCitfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyICh3Y3NwYnJrLAorICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqLCAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqLCAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopKTsKKyMgaWYgKChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMTApICYmICFkZWZpbmVkIF9fVUNMSUJDX18pIFwKKyAgICAgJiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0KSkKK19HTF9DWFhBTElBU1dBUk4xICh3Y3NwYnJrLCB3Y2hhcl90ICosCisgICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKndjcywgY29uc3Qgd2NoYXJfdCAqYWNjZXB0KSk7CitfR0xfQ1hYQUxJQVNXQVJOMSAod2NzcGJyaywgY29uc3Qgd2NoYXJfdCAqLAorICAgICAgICAgICAgICAgICAgIChjb25zdCB3Y2hhcl90ICp3Y3MsIGNvbnN0IHdjaGFyX3QgKmFjY2VwdCkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNXQVJOICh3Y3NwYnJrKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2NzcGJyaworIyBpZiBIQVZFX1JBV19ERUNMX1dDU1BCUksKK19HTF9XQVJOX09OX1VTRSAod2NzcGJyaywgIndjc3BicmsgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdjc3BicmsgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIE5FRURMRSBpbiBIQVlTVEFDSy4gICovCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAod2Nzc3RyLCB3Y2hhcl90ICosCisgICAgICAgICAgICAgICAgICAoY29uc3Qgd2NoYXJfdCAqaGF5c3RhY2ssIGNvbnN0IHdjaGFyX3QgKm5lZWRsZSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRSk7CisjIGVuZGlmCisgIC8qIE9uIHNvbWUgc3lzdGVtcywgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGFuIG92ZXJsb2FkZWQgZnVuY3Rpb246CisgICAgICAgZXh0ZXJuICJDKysiIHsKKyAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiBzdGQ6Ondjc3N0ciAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOworICAgICAgICAgd2NoYXJfdCAqIHN0ZDo6d2Nzc3RyICh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CisgICAgICAgfSAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVDIgKHdjc3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKiwgKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiwgKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKSk7CisjIGlmICgoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEwKSAmJiAhZGVmaW5lZCBfX1VDTElCQ19fKSBcCisgICAgICYmIChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNCkpCitfR0xfQ1hYQUxJQVNXQVJOMSAod2Nzc3RyLCB3Y2hhcl90ICosCisgICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKmhheXN0YWNrLCBjb25zdCB3Y2hhcl90ICpuZWVkbGUpKTsKK19HTF9DWFhBTElBU1dBUk4xICh3Y3NzdHIsIGNvbnN0IHdjaGFyX3QgKiwKKyAgICAgICAgICAgICAgICAgICAoY29uc3Qgd2NoYXJfdCAqaGF5c3RhY2ssIGNvbnN0IHdjaGFyX3QgKm5lZWRsZSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNXQVJOICh3Y3NzdHIpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3NzdHIKKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1NTVFIKK19HTF9XQVJOX09OX1VTRSAod2Nzc3RyLCAid2Nzc3RyIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3NzdHIgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBEaXZpZGUgV0NTIGludG8gdG9rZW5zIHNlcGFyYXRlZCBieSBjaGFyYWN0ZXJzIGluIERFTElNLiAgKi8KKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3N0b2ssIHdjaGFyX3QgKiwKKyAgICAgICAgICAgICAgICAgICh3Y2hhcl90ICp3Y3MsIGNvbnN0IHdjaGFyX3QgKmRlbGltLCB3Y2hhcl90ICoqcHRyKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3N0b2ssIHdjaGFyX3QgKiwKKyAgICAgICAgICAgICAgICAgICh3Y2hhcl90ICp3Y3MsIGNvbnN0IHdjaGFyX3QgKmRlbGltLCB3Y2hhcl90ICoqcHRyKSk7CitfR0xfQ1hYQUxJQVNXQVJOICh3Y3N0b2spOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3N0b2sKKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1NUT0sKK19HTF9XQVJOX09OX1VTRSAod2NzdG9rLCAid2NzdG9rIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3N0b2sgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIGNvbHVtbiBwb3NpdGlvbnMgcmVxdWlyZWQgZm9yIGZpcnN0IE4gd2lkZQorICAgY2hhcmFjdGVycyAob3IgZmV3ZXIgaWYgUyBlbmRzIGJlZm9yZSB0aGlzKSBpbiBTLiAgKi8KKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgd2Nzd2lkdGgKKyMgICBkZWZpbmUgd2Nzd2lkdGggcnBsX3djc3dpZHRoCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAod2Nzd2lkdGgsIGludCwgKGNvbnN0IHdjaGFyX3QgKnMsIHNpemVfdCBuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFKTsKK19HTF9DWFhBTElBU19SUEwgKHdjc3dpZHRoLCBpbnQsIChjb25zdCB3Y2hhcl90ICpzLCBzaXplX3QgbikpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAod2Nzd2lkdGgsIGludCwgKGNvbnN0IHdjaGFyX3QgKnMsIHNpemVfdCBuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3N3aWR0aCwgaW50LCAoY29uc3Qgd2NoYXJfdCAqcywgc2l6ZV90IG4pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHdjc3dpZHRoKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2Nzd2lkdGgKKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1NXSURUSAorX0dMX1dBUk5fT05fVVNFICh3Y3N3aWR0aCwgIndjc3dpZHRoIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3N3aWR0aCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNlbmRpZiAvKiBfR0xfV0NIQVJfSCAqLworI2VuZGlmIC8qIF9HTF9XQ0hBUl9IICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2Rhcndpbi1saWIvd2N0eXBlLmggYi9kYXJ3aW4tbGliL3djdHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NmU0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kYXJ3aW4tbGliL3djdHlwZS5oCkBAIC0wLDAgKzEsODA2IEBACisvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovCisvKiBBIHN1YnN0aXR1dGUgZm9yIElTTyBDOTkgPHdjdHlwZS5oPiwgZm9yIHBsYXRmb3JtcyB0aGF0IGxhY2sgaXQuCisKKyAgIENvcHlyaWdodCAoQykgMjAwNi0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIGFuZCBQYXVsIEVnZ2VydC4gICovCisKKy8qCisgKiBJU08gQyA5OSA8d2N0eXBlLmg+IGZvciBwbGF0Zm9ybXMgdGhhdCBsYWNrIGl0LgorICogPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hiZC93Y3R5cGUuaC5odG1sPgorICoKKyAqIGlzd2N0eXBlLCB0b3djdHJhbnMsIHRvd2xvd2VyLCB0b3d1cHBlciwgd2N0cmFucywgd2N0eXBlLAorICogd2N0cmFuc190LCBhbmQgd2N0eXBlX3QgYXJlIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisgKi8KKworI2lmbmRlZiBfR0xfV0NUWVBFX0gKKworI2lmIF9fR05VQ19fID49IDMKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKyNlbmRpZgorCisKKyNpZiAxCisvKiBTb2xhcmlzIDIuNSBoYXMgYSBidWc6IDx3Y2hhci5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSA8d2N0eXBlLmg+LgorICAgVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQorICAgPHdjaGFyLmg+LgorICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisjIGluY2x1ZGUgPHN0ZGlvLmg+CisjIGluY2x1ZGUgPHRpbWUuaD4KKyMgaW5jbHVkZSA8d2NoYXIuaD4KKyNlbmRpZgorCisvKiBJbmNsdWRlIHRoZSBvcmlnaW5hbCA8d2N0eXBlLmg+IGlmIGl0IGV4aXN0cy4KKyAgIEJlT1MgNSBoYXMgdGhlIGZ1bmN0aW9ucyBidXQgbm8gPHdjdHlwZS5oPi4gICovCisvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisjaWYgMQorIyBpbmNsdWRlX25leHQgPHdjdHlwZS5oPgorI2VuZGlmCisKKyNpZm5kZWYgX0dMX1dDVFlQRV9ICisjZGVmaW5lIF9HTF9XQ1RZUEVfSAorCitfR0xfSU5MSU5FX0hFQURFUl9CRUdJTgorI2lmbmRlZiBfR0xfV0NUWVBFX0lOTElORQorIyBkZWZpbmUgX0dMX1dDVFlQRV9JTkxJTkUgX0dMX0lOTElORQorI2VuZGlmCisKKy8qIFRoZSBkZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBMIGV0Yy4gYXJlIGNvcGllZCBoZXJlLiAgKi8KKyNpZm5kZWYgX0dMX0NYWERFRlNfSAorI2RlZmluZSBfR0xfQ1hYREVGU19ICisKKy8qIFRoZSB0aHJlZSBtb3N0IGZyZXF1ZW50IHVzZSBjYXNlcyBvZiB0aGVzZSBtYWNyb3MgYXJlOgorCisgICAqIEZvciBwcm92aWRpbmcgYSBzdWJzdGl0dXRlIGZvciBhIGZ1bmN0aW9uIHRoYXQgaXMgbWlzc2luZyBvbiBzb21lCisgICAgIHBsYXRmb3JtcywgYnV0IGlzIGRlY2xhcmVkIGFuZCB3b3JrcyBmaW5lIG9uIHRoZSBwbGF0Zm9ybXMgb24gd2hpY2gKKyAgICAgaXQgZXhpc3RzOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgIUBIQVZFX0ZPT0AKKyAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgcmVwbGFjZW1lbnQgZm9yIGEgZnVuY3Rpb24gdGhhdCBleGlzdHMgb24gYWxsIHBsYXRmb3JtcywKKyAgICAgYnV0IGlzIGJyb2tlbi9pbnN1ZmZpY2llbnQgYW5kIG5lZWRzIHRvIGJlIHJlcGxhY2VkIG9uIHNvbWUgcGxhdGZvcm1zOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisgICAgICAgIyAgIHVuZGVmIGZvbworICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CisgICAgICAgIyBlbHNlCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgcmVwbGFjZW1lbnQgZm9yIGEgZnVuY3Rpb24gdGhhdCBleGlzdHMgb24gc29tZSBwbGF0Zm9ybXMKKyAgICAgYnV0IGlzIGJyb2tlbi9pbnN1ZmZpY2llbnQgYW5kIG5lZWRzIHRvIGJlIHJlcGxhY2VkIG9uIHNvbWUgb2YgdGhlbSBhbmQKKyAgICAgaXMgYWRkaXRpb25hbGx5IGVpdGhlciBtaXNzaW5nIG9yIHVuZGVjbGFyZWQgb24gc29tZSBvdGhlciBwbGF0Zm9ybXM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACisgICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyAgICAgICAjICAgdW5kZWYgZm9vCisgICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKyAgICAgICAjIGVsc2UKKyAgICAgICAjICBpZiAhQEhBVkVfRk9PQCAgIG9yICAgaWYgIUBIQVZFX0RFQ0xfRk9PQAorICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisqLworCisvKiBfR0xfRVhURVJOX0MgZGVjbGFyYXRpb247CisgICBwZXJmb3JtcyB0aGUgZGVjbGFyYXRpb24gd2l0aCBDIGxpbmthZ2UuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMKKyMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4gIkMiCisjZWxzZQorIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybgorI2VuZGlmCisKKy8qIF9HTF9GVU5DREVDTF9SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgZGVjbGFyZXMgYSByZXBsYWNlbWVudCBmdW5jdGlvbiwgbmFtZWQgcnBsX2Z1bmMsIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwKKyAgIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsIGFuZCBhdHRyaWJ1dGVzLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0ZVTkNERUNMX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisgKi8KKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICBfR0xfRlVOQ0RFQ0xfUlBMXzEgKHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpCisjZGVmaW5lIF9HTF9GVU5DREVDTF9SUExfMShycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0VYVEVSTl9DIHJldHR5cGUgcnBsX2Z1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworCisvKiBfR0xfRlVOQ0RFQ0xfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGRlY2xhcmVzIHRoZSBzeXN0ZW0gZnVuY3Rpb24sIG5hbWVkIGZ1bmMsIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwKKyAgIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsIGFuZCBhdHRyaWJ1dGVzLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0ZVTkNERUNMX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisgKi8KKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICBfR0xfRVhURVJOX0MgcmV0dHlwZSBmdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKworLyogX0dMX0NYWEFMSUFTX1JQTCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBkZWNsYXJlcyBhIEMrKyBhbGlhcyBjYWxsZWQgR05VTElCX05BTUVTUEFDRTo6ZnVuYworICAgdGhhdCByZWRpcmVjdHMgdG8gcnBsX2Z1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UgaXMgZGVmaW5lZC4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9DWFhBTElBU19SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworICovCisjZGVmaW5lIF9HTF9DWFhBTElBU19SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgX0dMX0NYWEFMSUFTX1JQTF8xIChmdW5jLCBycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKQorI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9IDo6cnBsX2Z1bmM7ICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1JQTF8xIChmdW5jLCBycGxfZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBycGxfZnVuYyBtYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudAorICAgZGVjbGFyYXRpb24uICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvcgorICAgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPig6OnJwbF9mdW5jKTsgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBkZWNsYXJlcyBhIEMrKyBhbGlhcyBjYWxsZWQgR05VTElCX05BTUVTUEFDRTo6ZnVuYworICAgdGhhdCByZWRpcmVjdHMgdG8gdGhlIHN5c3RlbSBwcm92aWRlZCBmdW5jdGlvbiBmdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFCisgICBpcyBkZWZpbmVkLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0NYWEFMSUFTX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CisgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorICAvKiBJZiB3ZSB3ZXJlIHRvIHdyaXRlCisgICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7CisgICAgIGxpa2UgYWJvdmUgaW4gX0dMX0NYWEFMSUFTX1JQTF8xLCB0aGUgY29tcGlsZXIgY291bGQgb3B0aW1pemUgY2FsbHMKKyAgICAgYmV0dGVyIChyZW1vdmUgYW4gaW5kaXJlY3Rpb24gdGhyb3VnaCBhICdzdGF0aWMnIHBvaW50ZXIgdmFyaWFibGUpLAorICAgICBidXQgdGhlbiB0aGUgX0dMX0NYWEFMSUFTV0FSTiBtYWNybyBiZWxvdyB3b3VsZCBjYXVzZSBhIHdhcm5pbmcgbm90IG9ubHkKKyAgICAgZm9yIHVzZXMgb2YgOjpmdW5jIGJ1dCBhbHNvIGZvciB1c2VzIG9mIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMuICAqLworIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOyAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1NZU19DQVNUIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gZnVuYyBtYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudCBkZWNsYXJhdGlvbi4KKyAgIEEgY2FzdCBpcyB1c2VkIHRvIHNpbGVuY2UgdGhlICJpbnZhbGlkIGNvbnZlcnNpb24iIGVycm9yIHRoYXQgd291bGQKKyAgIG90aGVyd2lzZSBvY2N1ci4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPig6OmZ1bmMpOyBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1NZU19DQVNUMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycywgcmV0dHlwZTIsIHBhcmFtZXRlcnMyKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gaXMgcGlja2VkIGFtb25nIGEgc2V0IG9mIG92ZXJsb2FkZWQgZnVuY3Rpb25zLAorICAgbmFtZWx5IHRoZSBvbmUgd2l0aCByZXR0eXBlMiBhbmQgcGFyYW1ldGVyczIuICBUd28gY29uc2VjdXRpdmUgY2FzdHMKKyAgIGFyZSB1c2VkIHRvIHNpbGVuY2UgdGhlICJjYW5ub3QgZmluZCBhIG1hdGNoIiBhbmQgImludmFsaWQgY29udmVyc2lvbiIKKyAgIGVycm9ycyB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyAgLyogVGhlIG91dGVyIGNhc3QgbXVzdCBiZSBhIHJlaW50ZXJwcmV0X2Nhc3QuCisgICAgIFRoZSBpbm5lciBjYXN0OiBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2V0IG9mIG92ZXJsb2FkZWQKKyAgICAgZnVuY3Rpb25zLCBpdCB3b3JrcyBhcyBhIHN0YXRpY19jYXN0PD4sIGNob29zaW5nIHRoZSBkZXNpZ25hdGVkIHZhcmlhbnQuCisgICAgIFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzaW5nbGUgdmFyaWFudCwgaXQgd29ya3MgYXMgYQorICAgICByZWludGVycHJldF9jYXN0PD4uIFRoZSBwYXJlbnRoZXNpemVkIGNhc3Qgc3ludGF4IHdvcmtzIGJvdGggd2F5cy4gICovCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzLHJldHR5cGUyLHBhcmFtZXRlcnMyKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKHJldHR5cGUyKCopcGFyYW1ldGVyczIpKDo6ZnVuYykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzLHJldHR5cGUyLHBhcmFtZXRlcnMyKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNXQVJOIChmdW5jKTsKKyAgIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZW1pdHRlZCB3aGVuIDo6ZnVuYyBpcyB1c2VkIGJ1dCBub3Qgd2hlbgorICAgR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgZnVuYyBtdXN0IGJlIGRlZmluZWQgd2l0aG91dCBvdmVybG9hZGVkCisgICB2YXJpYW50cy4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAorICAgX0dMX0NYWEFMSUFTV0FSTl8xIChmdW5jLCBHTlVMSUJfTkFNRVNQQUNFKQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8xKGZ1bmMsbmFtZXNwYWNlKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOXzIgKGZ1bmMsIG5hbWVzcGFjZSkKKy8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAorICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCisjIGlmICFfX09QVElNSVpFX18KKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKyAgICBfR0xfV0FSTl9PTl9VU0UgKGZ1bmMsIFwKKyAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICJVc2UgIiAjbmFtZXNwYWNlICI6OiIgI2Z1bmMgIiBpbnN0ZWFkLiIpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKyAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU1dBUk4xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZW1pdHRlZCB3aGVuIHRoZSBnaXZlbiBvdmVybG9hZGVkIHZhcmlhbnQgb2YgOjpmdW5jCisgICBpcyB1c2VkIGJ1dCBub3Qgd2hlbiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICAgX0dMX0NYWEFMSUFTV0FSTjFfMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgR05VTElCX05BTUVTUEFDRSkKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOMV8yIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBuYW1lc3BhY2UpCisvKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKyAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworIyBpZiAhX19PUFRJTUlaRV9fCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgICBfR0xfV0FSTl9PTl9VU0VfQ1hYIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJVc2UgIiAjbmFtZXNwYWNlICI6OiIgI2Z1bmMgIiBpbnN0ZWFkLiIpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKyNlbmRpZiAvKiBfR0xfQ1hYREVGU19IICovCisKKy8qIFRoZSBkZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRSBpcyBjb3BpZWQgaGVyZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX09OX1VTRQorCisjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorLyogQSBjb21waWxlciBhdHRyaWJ1dGUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyA0LjMuMCBhbmQgbGF0ZXIuICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmN0aW9uKSBmdW5jdGlvbiBfX2F0dHJpYnV0ZV9fICgoX193YXJuaW5nX18gKG1lc3NhZ2UpKSkKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKy8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uCisjIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorX0dMX1dBUk5fRVhURVJOX0MgaW50IF9nbF93YXJuX29uX3VzZQorIyBlbmRpZgorI2VuZGlmCisKKy8qIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmN0aW9uLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCAic3RyaW5nIikKKyAgIGlzIGxpa2UgX0dMX1dBUk5fT05fVVNFIChmdW5jdGlvbiwgInN0cmluZyIpLCBleGNlcHQgdGhhdCB0aGUgZnVuY3Rpb24gaXMKKyAgIGRlY2xhcmVkIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywKKyAgIGFuZCBhdHRyaWJ1dGVzLgorICAgVGhpcyB2YXJpYW50IGlzIHVzZWZ1bCBmb3Igb3ZlcmxvYWRlZCBmdW5jdGlvbnMgaW4gQysrLiBfR0xfV0FSTl9PTl9VU0UgZG9lcworICAgbm90IHdvcmsgaW4gdGhpcyBjYXNlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFX0NYWAorIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK2V4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMgXAorICAgICBfX2F0dHJpYnV0ZV9fICgoX193YXJuaW5nX18gKG1zZykpKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK2V4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCitfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisjIGVuZGlmCisjZW5kaWYKKworLyogX0dMX1dBUk5fRVhURVJOX0MgZGVjbGFyYXRpb247CisgICBwZXJmb3JtcyB0aGUgZGVjbGFyYXRpb24gd2l0aCBDIGxpbmthZ2UuICAqLworI2lmbmRlZiBfR0xfV0FSTl9FWFRFUk5fQworIyBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisjICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuICJDIgorIyBlbHNlCisjICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuCisjIGVuZGlmCisjZW5kaWYKKworLyogU29sYXJpcyAyLjYgPHdjdHlwZS5oPiBpbmNsdWRlcyA8d2lkZWMuaD4gd2hpY2ggaW5jbHVkZXMgPGV1Yy5oPiB3aGljaAorICAgI2RlZmluZXMgYSBudW1iZXIgb2YgaWRlbnRpZmllcnMgaW4gdGhlIGFwcGxpY2F0aW9uIG5hbWVzcGFjZS4gIFJldmVydAorICAgdGhlc2UgI2RlZmluZXMuICAqLworI2lmZGVmIF9fc3VuCisjIHVuZGVmIG11bHRpYnl0ZQorIyB1bmRlZiBldWN3MQorIyB1bmRlZiBldWN3MgorIyB1bmRlZiBldWN3MworIyB1bmRlZiBzY3J3MQorIyB1bmRlZiBzY3J3MgorIyB1bmRlZiBzY3J3MworI2VuZGlmCisKKy8qIERlZmluZSB3aW50X3QgYW5kIFdFT0YuICAoQWxzbyBkb25lIGluIHdjaGFyLmluLmguKSAgKi8KKyNpZiAhMSAmJiAhZGVmaW5lZCB3aW50X3QKKyMgZGVmaW5lIHdpbnRfdCBpbnQKKyMgaWZuZGVmIFdFT0YKKyMgIGRlZmluZSBXRU9GIC0xCisjIGVuZGlmCisjZWxzZQorLyogTVNWQyBkZWZpbmVzIHdpbnRfdCBhcyAndW5zaWduZWQgc2hvcnQnIGluIDxjcnRkZWZzLmg+LgorICAgVGhpcyBpcyB0b28gc21hbGw6IElTTyBDIDk5IHNlY3Rpb24gNy4yNC4xLigyKSBzYXlzIHRoYXQgd2ludF90IG11c3QgYmUKKyAgICJ1bmNoYW5nZWQgYnkgZGVmYXVsdCBhcmd1bWVudCBwcm9tb3Rpb25zIi4gIE92ZXJyaWRlIGl0LiAgKi8KKyMgaWYgZGVmaW5lZCBfTVNDX1ZFUgorIyAgaWYgIUdOVUxJQl9kZWZpbmVkX3dpbnRfdAorIyAgIGluY2x1ZGUgPGNydGRlZnMuaD4KK3R5cGVkZWYgdW5zaWduZWQgaW50IHJwbF93aW50X3Q7CisjICAgdW5kZWYgd2ludF90CisjICAgZGVmaW5lIHdpbnRfdCBycGxfd2ludF90CisjICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX3dpbnRfdCAxCisjICBlbmRpZgorIyBlbmRpZgorIyBpZm5kZWYgV0VPRgorIyAgZGVmaW5lIFdFT0YgKCh3aW50X3QpIC0xKQorIyBlbmRpZgorI2VuZGlmCisKKworI2lmICFHTlVMSUJfZGVmaW5lZF93Y3R5cGVfZnVuY3Rpb25zCisKKy8qIEZyZWVCU0QgNC40IHRvIDQuMTEgaGFzIDx3Y3R5cGUuaD4gYnV0IGxhY2tzIHRoZSBmdW5jdGlvbnMuCisgICBMaW51eCBsaWJjNSBoYXMgPHdjdHlwZS5oPiBhbmQgdGhlIGZ1bmN0aW9ucyBidXQgdGhleSBhcmUgYnJva2VuLgorICAgQXNzdW1lIGFsbCAxMSBmdW5jdGlvbnMgKGFsbCBpc3cqIGV4Y2VwdCBpc3dibGFuaykgYXJlIGltcGxlbWVudGVkIHRoZQorICAgc2FtZSB3YXksIG9yIG5vdCBhdCBhbGwuICAqLworIyBpZiAhIDEgfHwgMAorCisvKiBJUklYIDUuMyBoYXMgbWFjcm9zIGJ1dCBubyBmdW5jdGlvbnMsIGl0cyBpc3cqIG1hY3JvcyByZWZlciB0byBhbgorICAgdW5kZWZpbmVkIHZhcmlhYmxlIF9jdG1wXyBhbmQgdG8gPGN0eXBlLmg+IG1hY3JvcyBsaWtlIF9QLCBhbmQgdGhleQorICAgcmVmZXIgdG8gc3lzdGVtIGZ1bmN0aW9ucyBsaWtlIF9pc3djdHlwZSB0aGF0IGFyZSBub3QgaW4gdGhlCisgICBzdGFuZGFyZCBDIGxpYnJhcnkuICBSYXRoZXIgdGhhbiB0cnkgdG8gZ2V0IGFuY2llbnQgYnVnZ3kKKyAgIGltcGxlbWVudGF0aW9ucyBsaWtlIHRoaXMgdG8gd29yaywganVzdCBkaXNhYmxlIHRoZW0uICAqLworIyAgdW5kZWYgaXN3YWxudW0KKyMgIHVuZGVmIGlzd2FscGhhCisjICB1bmRlZiBpc3dibGFuaworIyAgdW5kZWYgaXN3Y250cmwKKyMgIHVuZGVmIGlzd2RpZ2l0CisjICB1bmRlZiBpc3dncmFwaAorIyAgdW5kZWYgaXN3bG93ZXIKKyMgIHVuZGVmIGlzd3ByaW50CisjICB1bmRlZiBpc3dwdW5jdAorIyAgdW5kZWYgaXN3c3BhY2UKKyMgIHVuZGVmIGlzd3VwcGVyCisjICB1bmRlZiBpc3d4ZGlnaXQKKyMgIHVuZGVmIHRvd2xvd2VyCisjICB1bmRlZiB0b3d1cHBlcgorCisvKiBMaW51eCBsaWJjNSBoYXMgPHdjdHlwZS5oPiBhbmQgdGhlIGZ1bmN0aW9ucyBidXQgdGhleSBhcmUgYnJva2VuLiAgKi8KKyMgIGlmIDAKKyMgICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgICBkZWZpbmUgaXN3YWxudW0gcnBsX2lzd2FsbnVtCisjICAgIGRlZmluZSBpc3dhbHBoYSBycGxfaXN3YWxwaGEKKyMgICAgZGVmaW5lIGlzd2JsYW5rIHJwbF9pc3dibGFuaworIyAgICBkZWZpbmUgaXN3Y250cmwgcnBsX2lzd2NudHJsCisjICAgIGRlZmluZSBpc3dkaWdpdCBycGxfaXN3ZGlnaXQKKyMgICAgZGVmaW5lIGlzd2dyYXBoIHJwbF9pc3dncmFwaAorIyAgICBkZWZpbmUgaXN3bG93ZXIgcnBsX2lzd2xvd2VyCisjICAgIGRlZmluZSBpc3dwcmludCBycGxfaXN3cHJpbnQKKyMgICAgZGVmaW5lIGlzd3B1bmN0IHJwbF9pc3dwdW5jdAorIyAgICBkZWZpbmUgaXN3c3BhY2UgcnBsX2lzd3NwYWNlCisjICAgIGRlZmluZSBpc3d1cHBlciBycGxfaXN3dXBwZXIKKyMgICAgZGVmaW5lIGlzd3hkaWdpdCBycGxfaXN3eGRpZ2l0CisjICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZiAwCisjICAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICAgZGVmaW5lIHRvd2xvd2VyIHJwbF90b3dsb3dlcgorIyAgICBkZWZpbmUgdG93dXBwZXIgcnBsX3Rvd3VwcGVyCisjICAgZW5kaWYKKyMgIGVuZGlmCisKK19HTF9XQ1RZUEVfSU5MSU5FIGludAorIyAgaWYgMAorcnBsX2lzd2FsbnVtCisjICBlbHNlCitpc3dhbG51bQorIyAgZW5kaWYKKyAgICAgICAgICh3aW50X3Qgd2MpCit7CisgIHJldHVybiAoKHdjID49ICcwJyAmJiB3YyA8PSAnOScpCisgICAgICAgICAgfHwgKCh3YyAmIH4weDIwKSA+PSAnQScgJiYgKHdjICYgfjB4MjApIDw9ICdaJykpOworfQorCitfR0xfV0NUWVBFX0lOTElORSBpbnQKKyMgIGlmIDAKK3JwbF9pc3dhbHBoYQorIyAgZWxzZQoraXN3YWxwaGEKKyMgIGVuZGlmCisgICAgICAgICAod2ludF90IHdjKQoreworICByZXR1cm4gKHdjICYgfjB4MjApID49ICdBJyAmJiAod2MgJiB+MHgyMCkgPD0gJ1onOworfQorCitfR0xfV0NUWVBFX0lOTElORSBpbnQKKyMgIGlmIDAKK3JwbF9pc3dibGFuaworIyAgZWxzZQoraXN3YmxhbmsKKyMgIGVuZGlmCisgICAgICAgICAod2ludF90IHdjKQoreworICByZXR1cm4gd2MgPT0gJyAnIHx8IHdjID09ICdcdCc7Cit9CisKK19HTF9XQ1RZUEVfSU5MSU5FIGludAorIyAgaWYgMAorcnBsX2lzd2NudHJsCisjICBlbHNlCitpc3djbnRybAorIyAgZW5kaWYKKyAgICAgICAgKHdpbnRfdCB3YykKK3sKKyAgcmV0dXJuICh3YyAmIH4weDFmKSA9PSAwIHx8IHdjID09IDB4N2Y7Cit9CisKK19HTF9XQ1RZUEVfSU5MSU5FIGludAorIyAgaWYgMAorcnBsX2lzd2RpZ2l0CisjICBlbHNlCitpc3dkaWdpdAorIyAgZW5kaWYKKyAgICAgICAgICh3aW50X3Qgd2MpCit7CisgIHJldHVybiB3YyA+PSAnMCcgJiYgd2MgPD0gJzknOworfQorCitfR0xfV0NUWVBFX0lOTElORSBpbnQKKyMgIGlmIDAKK3JwbF9pc3dncmFwaAorIyAgZWxzZQoraXN3Z3JhcGgKKyMgIGVuZGlmCisgICAgICAgICAod2ludF90IHdjKQoreworICByZXR1cm4gd2MgPj0gJyEnICYmIHdjIDw9ICd+JzsKK30KKworX0dMX1dDVFlQRV9JTkxJTkUgaW50CisjICBpZiAwCitycGxfaXN3bG93ZXIKKyMgIGVsc2UKK2lzd2xvd2VyCisjICBlbmRpZgorICAgICAgICAgKHdpbnRfdCB3YykKK3sKKyAgcmV0dXJuIHdjID49ICdhJyAmJiB3YyA8PSAneic7Cit9CisKK19HTF9XQ1RZUEVfSU5MSU5FIGludAorIyAgaWYgMAorcnBsX2lzd3ByaW50CisjICBlbHNlCitpc3dwcmludAorIyAgZW5kaWYKKyAgICAgICAgICh3aW50X3Qgd2MpCit7CisgIHJldHVybiB3YyA+PSAnICcgJiYgd2MgPD0gJ34nOworfQorCitfR0xfV0NUWVBFX0lOTElORSBpbnQKKyMgIGlmIDAKK3JwbF9pc3dwdW5jdAorIyAgZWxzZQoraXN3cHVuY3QKKyMgIGVuZGlmCisgICAgICAgICAod2ludF90IHdjKQoreworICByZXR1cm4gKHdjID49ICchJyAmJiB3YyA8PSAnficKKyAgICAgICAgICAmJiAhKCh3YyA+PSAnMCcgJiYgd2MgPD0gJzknKQorICAgICAgICAgICAgICAgfHwgKCh3YyAmIH4weDIwKSA+PSAnQScgJiYgKHdjICYgfjB4MjApIDw9ICdaJykpKTsKK30KKworX0dMX1dDVFlQRV9JTkxJTkUgaW50CisjICBpZiAwCitycGxfaXN3c3BhY2UKKyMgIGVsc2UKK2lzd3NwYWNlCisjICBlbmRpZgorICAgICAgICAgKHdpbnRfdCB3YykKK3sKKyAgcmV0dXJuICh3YyA9PSAnICcgfHwgd2MgPT0gJ1x0JworICAgICAgICAgIHx8IHdjID09ICdcbicgfHwgd2MgPT0gJ1x2JyB8fCB3YyA9PSAnXGYnIHx8IHdjID09ICdccicpOworfQorCitfR0xfV0NUWVBFX0lOTElORSBpbnQKKyMgIGlmIDAKK3JwbF9pc3d1cHBlcgorIyAgZWxzZQoraXN3dXBwZXIKKyMgIGVuZGlmCisgICAgICAgICAod2ludF90IHdjKQoreworICByZXR1cm4gd2MgPj0gJ0EnICYmIHdjIDw9ICdaJzsKK30KKworX0dMX1dDVFlQRV9JTkxJTkUgaW50CisjICBpZiAwCitycGxfaXN3eGRpZ2l0CisjICBlbHNlCitpc3d4ZGlnaXQKKyMgIGVuZGlmCisgICAgICAgICAgKHdpbnRfdCB3YykKK3sKKyAgcmV0dXJuICgod2MgPj0gJzAnICYmIHdjIDw9ICc5JykKKyAgICAgICAgICB8fCAoKHdjICYgfjB4MjApID49ICdBJyAmJiAod2MgJiB+MHgyMCkgPD0gJ0YnKSk7Cit9CisKK19HTF9XQ1RZUEVfSU5MSU5FIHdpbnRfdAorIyAgaWYgMAorcnBsX3Rvd2xvd2VyCisjICBlbHNlCit0b3dsb3dlcgorIyAgZW5kaWYKKyAgICAgICAgICh3aW50X3Qgd2MpCit7CisgIHJldHVybiAod2MgPj0gJ0EnICYmIHdjIDw9ICdaJyA/IHdjIC0gJ0EnICsgJ2EnIDogd2MpOworfQorCitfR0xfV0NUWVBFX0lOTElORSB3aW50X3QKKyMgIGlmIDAKK3JwbF90b3d1cHBlcgorIyAgZWxzZQordG93dXBwZXIKKyMgIGVuZGlmCisgICAgICAgICAod2ludF90IHdjKQoreworICByZXR1cm4gKHdjID49ICdhJyAmJiB3YyA8PSAneicgPyB3YyAtICdhJyArICdBJyA6IHdjKTsKK30KKworIyBlbGlmIDEgJiYgKCEgMSB8fCAwKQorLyogT25seSB0aGUgaXN3YmxhbmsgZnVuY3Rpb24gaXMgbWlzc2luZy4gICovCisKKyMgIGlmIDAKKyMgICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgICBkZWZpbmUgaXN3YmxhbmsgcnBsX2lzd2JsYW5rCisjICAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGlzd2JsYW5rLCBpbnQsICh3aW50X3Qgd2MpKTsKKyMgIGVsc2UKK19HTF9GVU5DREVDTF9TWVMgKGlzd2JsYW5rLCBpbnQsICh3aW50X3Qgd2MpKTsKKyMgIGVuZGlmCisKKyMgZW5kaWYKKworIyBpZiBkZWZpbmVkIF9fTUlOR1czMl9fCisKKy8qIE9uIG5hdGl2ZSBXaW5kb3dzLCB3Y2hhcl90IGlzIHVpbnQxNl90LCBhbmQgd2ludF90IGlzIHVpbnQzMl90LgorICAgVGhlIGZ1bmN0aW9ucyB0b3dsb3dlciBhbmQgdG93dXBwZXIgYXJlIGltcGxlbWVudGVkIGluIHRoZSBNU1ZDUlQgbGlicmFyeQorICAgdG8gdGFrZSBhIHdjaGFyX3QgYXJndW1lbnQgYW5kIHJldHVybiBhIHdjaGFyX3QgcmVzdWx0LiAgbWluZ3cgZGVjbGFyZXMKKyAgIHRoZXNlIGZ1bmN0aW9ucyB0byB0YWtlIGEgd2ludF90IGFyZ3VtZW50IGFuZCByZXR1cm4gYSB3aW50X3QgcmVzdWx0LgorICAgVGhpcyBtZWFucyB0aGF0OgorICAgMS4gV2hlbiB0aGUgdXNlciBwYXNzZXMgYW4gYXJndW1lbnQgb3V0c2lkZSB0aGUgcmFuZ2UgMHgwMDAwLi4weEZGRkYsIHRoZQorICAgICAgZnVuY3Rpb24gd2lsbCBsb29rIG9ubHkgYXQgdGhlIGxvd2VyIDE2IGJpdHMuICBUaGlzIGlzIGFsbG93ZWQgYWNjb3JkaW5nCisgICAgICB0byBQT1NJWC4KKyAgIDIuIFRoZSByZXR1cm4gdmFsdWUgaXMgcmV0dXJuZWQgaW4gdGhlIGxvd2VyIDE2IGJpdHMgb2YgdGhlIHJlc3VsdCByZWdpc3Rlci4KKyAgICAgIFRoZSB1cHBlciAxNiBiaXRzIGFyZSByYW5kb206IHdoYXRldmVyIGhhcHBlbmVkIHRvIGJlIGluIHRoYXQgcGFydCBvZiB0aGUKKyAgICAgIHJlc3VsdCByZWdpc3Rlci4gIFdlIG5lZWQgdG8gZml4IHRoaXMgYnkgYWRkaW5nIGEgemVyby1leHRlbmQgZnJvbQorICAgICAgd2NoYXJfdCB0byB3aW50X3QgYWZ0ZXIgdGhlIGNhbGwuICAqLworCitfR0xfV0NUWVBFX0lOTElORSB3aW50X3QKK3JwbF90b3dsb3dlciAod2ludF90IHdjKQoreworICByZXR1cm4gKHdpbnRfdCkgKHdjaGFyX3QpIHRvd2xvd2VyICh3Yyk7Cit9CisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSB0b3dsb3dlciBycGxfdG93bG93ZXIKKyMgIGVuZGlmCisKK19HTF9XQ1RZUEVfSU5MSU5FIHdpbnRfdAorcnBsX3Rvd3VwcGVyICh3aW50X3Qgd2MpCit7CisgIHJldHVybiAod2ludF90KSAod2NoYXJfdCkgdG93dXBwZXIgKHdjKTsKK30KKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHRvd3VwcGVyIHJwbF90b3d1cHBlcgorIyAgZW5kaWYKKworIyBlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCisjIGRlZmluZSBHTlVMSUJfZGVmaW5lZF93Y3R5cGVfZnVuY3Rpb25zIDEKKyNlbmRpZgorCisjaWYgMAorX0dMX0NYWEFMSUFTX1JQTCAoaXN3YWxudW0sIGludCwgKHdpbnRfdCB3YykpOworX0dMX0NYWEFMSUFTX1JQTCAoaXN3YWxwaGEsIGludCwgKHdpbnRfdCB3YykpOworX0dMX0NYWEFMSUFTX1JQTCAoaXN3Y250cmwsIGludCwgKHdpbnRfdCB3YykpOworX0dMX0NYWEFMSUFTX1JQTCAoaXN3ZGlnaXQsIGludCwgKHdpbnRfdCB3YykpOworX0dMX0NYWEFMSUFTX1JQTCAoaXN3Z3JhcGgsIGludCwgKHdpbnRfdCB3YykpOworX0dMX0NYWEFMSUFTX1JQTCAoaXN3bG93ZXIsIGludCwgKHdpbnRfdCB3YykpOworX0dMX0NYWEFMSUFTX1JQTCAoaXN3cHJpbnQsIGludCwgKHdpbnRfdCB3YykpOworX0dMX0NYWEFMSUFTX1JQTCAoaXN3cHVuY3QsIGludCwgKHdpbnRfdCB3YykpOworX0dMX0NYWEFMSUFTX1JQTCAoaXN3c3BhY2UsIGludCwgKHdpbnRfdCB3YykpOworX0dMX0NYWEFMSUFTX1JQTCAoaXN3dXBwZXIsIGludCwgKHdpbnRfdCB3YykpOworX0dMX0NYWEFMSUFTX1JQTCAoaXN3eGRpZ2l0LCBpbnQsICh3aW50X3Qgd2MpKTsKKyNlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChpc3dhbG51bSwgaW50LCAod2ludF90IHdjKSk7CitfR0xfQ1hYQUxJQVNfU1lTIChpc3dhbHBoYSwgaW50LCAod2ludF90IHdjKSk7CitfR0xfQ1hYQUxJQVNfU1lTIChpc3djbnRybCwgaW50LCAod2ludF90IHdjKSk7CitfR0xfQ1hYQUxJQVNfU1lTIChpc3dkaWdpdCwgaW50LCAod2ludF90IHdjKSk7CitfR0xfQ1hYQUxJQVNfU1lTIChpc3dncmFwaCwgaW50LCAod2ludF90IHdjKSk7CitfR0xfQ1hYQUxJQVNfU1lTIChpc3dsb3dlciwgaW50LCAod2ludF90IHdjKSk7CitfR0xfQ1hYQUxJQVNfU1lTIChpc3dwcmludCwgaW50LCAod2ludF90IHdjKSk7CitfR0xfQ1hYQUxJQVNfU1lTIChpc3dwdW5jdCwgaW50LCAod2ludF90IHdjKSk7CitfR0xfQ1hYQUxJQVNfU1lTIChpc3dzcGFjZSwgaW50LCAod2ludF90IHdjKSk7CitfR0xfQ1hYQUxJQVNfU1lTIChpc3d1cHBlciwgaW50LCAod2ludF90IHdjKSk7CitfR0xfQ1hYQUxJQVNfU1lTIChpc3d4ZGlnaXQsIGludCwgKHdpbnRfdCB3YykpOworI2VuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChpc3dhbG51bSk7CitfR0xfQ1hYQUxJQVNXQVJOIChpc3dhbHBoYSk7CitfR0xfQ1hYQUxJQVNXQVJOIChpc3djbnRybCk7CitfR0xfQ1hYQUxJQVNXQVJOIChpc3dkaWdpdCk7CitfR0xfQ1hYQUxJQVNXQVJOIChpc3dncmFwaCk7CitfR0xfQ1hYQUxJQVNXQVJOIChpc3dsb3dlcik7CitfR0xfQ1hYQUxJQVNXQVJOIChpc3dwcmludCk7CitfR0xfQ1hYQUxJQVNXQVJOIChpc3dwdW5jdCk7CitfR0xfQ1hYQUxJQVNXQVJOIChpc3dzcGFjZSk7CitfR0xfQ1hYQUxJQVNXQVJOIChpc3d1cHBlcik7CitfR0xfQ1hYQUxJQVNXQVJOIChpc3d4ZGlnaXQpOworCisjaWYgMQorIyBpZiAwIHx8IDAKK19HTF9DWFhBTElBU19SUEwgKGlzd2JsYW5rLCBpbnQsICh3aW50X3Qgd2MpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoaXN3YmxhbmssIGludCwgKHdpbnRfdCB3YykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoaXN3YmxhbmspOworI2VuZGlmCisKKyNpZiAhMQorIyBpZiAhR05VTElCX2RlZmluZWRfd2N0eXBlX3QKK3R5cGVkZWYgdm9pZCAqIHdjdHlwZV90OworIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX3djdHlwZV90IDEKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBHZXQgYSBkZXNjcmlwdG9yIGZvciBhIHdpZGUgY2hhcmFjdGVyIHByb3BlcnR5LiAgKi8KKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3R5cGUsIHdjdHlwZV90LCAoY29uc3QgY2hhciAqbmFtZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod2N0eXBlLCB3Y3R5cGVfdCwgKGNvbnN0IGNoYXIgKm5hbWUpKTsKK19HTF9DWFhBTElBU1dBUk4gKHdjdHlwZSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjdHlwZQorIyBpZiBIQVZFX1JBV19ERUNMX1dDVFlQRQorX0dMX1dBUk5fT05fVVNFICh3Y3R5cGUsICJ3Y3R5cGUgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdjdHlwZSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBUZXN0IHdoZXRoZXIgYSB3aWRlIGNoYXJhY3RlciBoYXMgYSBnaXZlbiBwcm9wZXJ0eS4KKyAgIFRoZSBhcmd1bWVudCBXQyBtdXN0IGJlIGVpdGhlciBhIHdjaGFyX3QgdmFsdWUgb3IgV0VPRi4KKyAgIFRoZSBhcmd1bWVudCBERVNDIG11c3QgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IHRoZSB3Y3R5cGUoKSBmdW5jdGlvbi4gICovCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoaXN3Y3R5cGUsIGludCwgKHdpbnRfdCB3Yywgd2N0eXBlX3QgZGVzYykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoaXN3Y3R5cGUsIGludCwgKHdpbnRfdCB3Yywgd2N0eXBlX3QgZGVzYykpOworX0dMX0NYWEFMSUFTV0FSTiAoaXN3Y3R5cGUpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBpc3djdHlwZQorIyBpZiBIQVZFX1JBV19ERUNMX0lTV0NUWVBFCitfR0xfV0FSTl9PTl9VU0UgKGlzd2N0eXBlLCAiaXN3Y3R5cGUgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGlzd2N0eXBlIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwIHx8IGRlZmluZWQgX19NSU5HVzMyX18KK19HTF9DWFhBTElBU19SUEwgKHRvd2xvd2VyLCB3aW50X3QsICh3aW50X3Qgd2MpKTsKK19HTF9DWFhBTElBU19SUEwgKHRvd3VwcGVyLCB3aW50X3QsICh3aW50X3Qgd2MpKTsKKyNlbHNlCitfR0xfQ1hYQUxJQVNfU1lTICh0b3dsb3dlciwgd2ludF90LCAod2ludF90IHdjKSk7CitfR0xfQ1hYQUxJQVNfU1lTICh0b3d1cHBlciwgd2ludF90LCAod2ludF90IHdjKSk7CisjZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHRvd2xvd2VyKTsKK19HTF9DWFhBTElBU1dBUk4gKHRvd3VwcGVyKTsKKworI2lmICExCisjIGlmICFHTlVMSUJfZGVmaW5lZF93Y3RyYW5zX3QKK3R5cGVkZWYgdm9pZCAqIHdjdHJhbnNfdDsKKyMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF93Y3RyYW5zX3QgMQorIyBlbmRpZgorI2VuZGlmCisKKy8qIEdldCBhIGRlc2NyaXB0b3IgZm9yIGEgd2lkZSBjaGFyYWN0ZXIgY2FzZSBjb252ZXJzaW9uLiAgKi8KKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3RyYW5zLCB3Y3RyYW5zX3QsIChjb25zdCBjaGFyICpuYW1lKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3RyYW5zLCB3Y3RyYW5zX3QsIChjb25zdCBjaGFyICpuYW1lKSk7CitfR0xfQ1hYQUxJQVNXQVJOICh3Y3RyYW5zKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2N0cmFucworIyBpZiBIQVZFX1JBV19ERUNMX1dDVFJBTlMKK19HTF9XQVJOX09OX1VTRSAod2N0cmFucywgIndjdHJhbnMgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdjdHJhbnMgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworLyogUGVyZm9ybSBhIGdpdmVuIGNhc2UgY29udmVyc2lvbiBvbiBhIHdpZGUgY2hhcmFjdGVyLgorICAgVGhlIGFyZ3VtZW50IFdDIG11c3QgYmUgZWl0aGVyIGEgd2NoYXJfdCB2YWx1ZSBvciBXRU9GLgorICAgVGhlIGFyZ3VtZW50IERFU0MgbXVzdCBoYXZlIGJlZW4gcmV0dXJuZWQgYnkgdGhlIHdjdHJhbnMoKSBmdW5jdGlvbi4gICovCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAodG93Y3RyYW5zLCB3aW50X3QsICh3aW50X3Qgd2MsIHdjdHJhbnNfdCBkZXNjKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh0b3djdHJhbnMsIHdpbnRfdCwgKHdpbnRfdCB3Yywgd2N0cmFuc190IGRlc2MpKTsKK19HTF9DWFhBTElBU1dBUk4gKHRvd2N0cmFucyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHRvd2N0cmFucworIyBpZiBIQVZFX1JBV19ERUNMX1RPV0NUUkFOUworX0dMX1dBUk5fT05fVVNFICh0b3djdHJhbnMsICJ0b3djdHJhbnMgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHRvd2N0cmFucyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCitfR0xfSU5MSU5FX0hFQURFUl9FTkQKKworI2VuZGlmIC8qIF9HTF9XQ1RZUEVfSCAqLworI2VuZGlmIC8qIF9HTF9XQ1RZUEVfSCAqLwpkaWZmIC0tZ2l0IGEvZGF0YS9NYWtlZmlsZSBiL2RhdGEvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2OTIzNmQuLjAwMDAwMDAKLS0tIGEvZGF0YS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDQxMiArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjkuNiBmcm9tIE1ha2VmaWxlLmFtLgotIyBkYXRhL01ha2VmaWxlLiAgR2VuZXJhdGVkIGZyb20gTWFrZWZpbGUuaW4gYnkgY29uZmlndXJlLgotCi0jIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKLSMgMjAwMywgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi0KLQotc3JjZGlyID0gLgotdG9wX3NyY2RpciA9IC4uCi0KLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL2Jpc29uCi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvYmlzb24KLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL2Jpc29uCi10b3BfYnVpbGRkaXIgPSAuLgotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotSU5TVEFMTCA9IC91c3IvYmluL2luc3RhbGwgLWMKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSB4ODZfNjQtdW5rbm93bi1saW51eC1nbnUKLWhvc3RfdHJpcGxldCA9IHg4Nl82NC11bmtub3duLWxpbnV4LWdudQotc3ViZGlyID0gZGF0YQotRElTVF9DT01NT04gPSBSRUFETUUgJChkaXN0X200c3VnYXJfREFUQSkgJChkaXN0X3BrZ2RhdGFfREFUQSkgXAotCSQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2Jpc29uLWkxOG4ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYy13b3JraW5nLm00ICQodG9wX3NyY2RpcikvbTQvY3h4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2Rpcm5hbWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9kbWFsbG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2Rvcy5tNCAkKHRvcF9zcmNkaXIpL200L2Vycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2V4aXRmYWlsLm00ICQodG9wX3NyY2RpcikvbTQvZXh0ZW5zaW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nZXRvcHQubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0X2dsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dudWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2hhcmQtbG9jYWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2hhc2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlc19oX2dsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1sZF9nbC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXhfZ2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9tNC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9tYnJ0b3djLm00ICQodG9wX3NyY2RpcikvbTQvbWJzdGF0ZV90Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L21ic3dpZHRoLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L29ic3RhY2subTQgJCh0b3Bfc3JjZGlyKS9tNC9vbmNlb25seS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wb19nbC5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3F1b3RlLm00ICQodG9wX3NyY2RpcikvbTQvcXVvdGVhcmcubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RkYm9vbC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludF9oX2dsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3N0ZGlvLXNhZmVyLm00ICQodG9wX3NyY2RpcikvbTQvc3RwY3B5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3N0cmR1cC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cmVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3N0cm5kdXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJubGVuLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3N0cnRvbC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cnRvdWwubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RydmVyc2NtcC5tNCAkKHRvcF9zcmNkaXIpL200L3N1YnBpcGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvdGltZXZhci5tNCAkKHRvcF9zcmNkaXIpL200L3VpbnRtYXhfdF9nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC91bG9uZ2xvbmdfZ2wubTQgXAotCSQodG9wX3NyY2RpcikvbTQvdW5pc3RkLXNhZmVyLm00ICQodG9wX3NyY2RpcikvbTQvdW5pc3RkX2gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvdW5sb2NrZWQtaW8ubTQgJCh0b3Bfc3JjZGlyKS9tNC93YXJuaW5nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3hhbGxvYy5tNCAkKHRvcF9zcmNkaXIpL200L3hzdHJuZHVwLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvbWtpbnN0YWxsZGlycwotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLVNPVVJDRVMgPQotRElTVF9TT1VSQ0VTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChtNHN1Z2FyZGlyKSIgIiQoREVTVERJUikkKHBrZ2RhdGFkaXIpIgotZGlzdF9tNHN1Z2FyREFUQV9JTlNUQUxMID0gJChJTlNUQUxMX0RBVEEpCi1kaXN0X3BrZ2RhdGFEQVRBX0lOU1RBTEwgPSAkKElOU1RBTExfREFUQSkKLURBVEEgPSAkKGRpc3RfbTRzdWdhcl9EQVRBKSAkKGRpc3RfcGtnZGF0YV9EQVRBKQotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFDTE9DQUwgPSAke1NIRUxMfSAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL2Jpc29uLTIuMy9idWlsZC1hdXgvbWlzc2luZyAtLXJ1biBhY2xvY2FsLTEuOQotQU1ERVBfRkFMU0UgPSAjCi1BTURFUF9UUlVFID0gCi1BTVRBUiA9ICR7U0hFTEx9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9taXNzaW5nIC0tcnVuIHRhcgotQVVUT0NPTkYgPSAke1NIRUxMfSAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL2Jpc29uLTIuMy9idWlsZC1hdXgvbWlzc2luZyAtLXJ1biBhdXRvY29uZgotQVVUT0hFQURFUiA9ICR7U0hFTEx9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9taXNzaW5nIC0tcnVuIGF1dG9oZWFkZXIKLUFVVE9NNFRFID0gJHtTSEVMTH0gL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC90b29scy9iaXNvbi0yLjMvYnVpbGQtYXV4L21pc3NpbmcgLS1ydW4gYXV0b200dGUKLUFVVE9NQUtFID0gJHtTSEVMTH0gL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC90b29scy9iaXNvbi0yLjMvYnVpbGQtYXV4L21pc3NpbmcgLS1ydW4gYXV0b21ha2UtMS45Ci1BV0sgPSBnYXdrCi1CSVNPTl9DWFhfV09SS1MgPSA6Ci1CSVNPTl9DWFhfV09SS1NfRkFMU0UgPSAjCi1CSVNPTl9DWFhfV09SS1NfVFJVRSA9IAotQklTT05fTE9DQUxFRElSID0gL3Vzci9zaGFyZS9sb2NhbGUKLUNDID0gZ2NjCi1DQ0RFUE1PREUgPSBkZXBtb2RlPWdjYzMKLUNGTEFHUyA9IC1nIC1PMgotQ1BQID0gZ2NjIC1FCi1DUFBGTEFHUyA9IAotQ1hYID0gZysrCi1DWFhERVBNT0RFID0gZGVwbW9kZT1nY2MzCi1DWFhGTEFHUyA9IC1nIC1PMgotQ1lHUEFUSF9XID0gZWNobwotREVGUyA9IC1ESEFWRV9DT05GSUdfSAotREVQRElSID0gLmRlcHMKLUVDSE9fQyA9IAotRUNIT19OID0gLW4KLUVDSE9fVCA9IAotRUdSRVAgPSBncmVwIC1FCi1FWEVFWFQgPSAKLUdDQyA9IHllcwotR0VUT1BUX0ggPSAKLUdNU0dGTVQgPSAvdXNyL2Jpbi9tc2dmbXQKLUhBVkVfX0JPT0wgPSAxCi1JTlNUQUxMX0RBVEEgPSAke0lOU1RBTEx9IC1tIDY0NAotSU5TVEFMTF9QUk9HUkFNID0gJHtJTlNUQUxMfQotSU5TVEFMTF9TQ1JJUFQgPSAke0lOU1RBTEx9Ci1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSAke1NIRUxMfSAkKGluc3RhbGxfc2gpIC1jIC1zCi1JTlRMTElCUyA9IAotSU5UTF9NQUNPU1hfTElCUyA9IAotTERGTEFHUyA9IAotTEVYID0gZmxleAotTEVYTElCID0gLWxmbAotTEVYX09VVFBVVF9ST09UID0gbGV4Lnl5Ci1MSUJJQ09OViA9IC1saWNvbnYKLUxJQklOVEwgPSAKLUxJQk9CSlMgPSAgZGlybmFtZSRVLm8gZXhpdGZhaWwkVS5vIGhhcmQtbG9jYWxlJFUubyBoYXNoJFUubyBxdW90ZSRVLm8gcXVvdGVhcmckVS5vIGZvcGVuLXNhZmVyJFUubyBkdXAtc2FmZXIkVS5vIGZkLXNhZmVyJFUubyBwaXBlLXNhZmVyJFUubyB4bWFsbG9jJFUubwotTElCUyA9IAotTFRMSUJJQ09OViA9IC1saWNvbnYKLUxUTElCSU5UTCA9IAotTFRMSUJPQkpTID0gIGRpcm5hbWUkVS5sbyBleGl0ZmFpbCRVLmxvIGhhcmQtbG9jYWxlJFUubG8gaGFzaCRVLmxvIHF1b3RlJFUubG8gcXVvdGVhcmckVS5sbyBmb3Blbi1zYWZlciRVLmxvIGR1cC1zYWZlciRVLmxvIGZkLXNhZmVyJFUubG8gcGlwZS1zYWZlciRVLmxvIHhtYWxsb2MkVS5sbwotTTQgPSAvdXNyL2Jpbi9tNAotTUFLRUlORk8gPSAke1NIRUxMfSAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL2Jpc29uLTIuMy9idWlsZC1hdXgvbWlzc2luZyAtLXJ1biBtYWtlaW5mbwotTUtJTlNUQUxMRElSUyA9ICQodG9wX2J1aWxkZGlyKS9idWlsZC1hdXgvbWtpbnN0YWxsZGlycwotTVNHRk1UID0gL3Vzci9iaW4vbXNnZm10Ci1NU0dNRVJHRSA9IC91c3IvYmluL21zZ21lcmdlCi1PMENGTEFHUyA9IC1nIAotTzBDWFhGTEFHUyA9IC1nIAotT0JKRVhUID0gbwotUEFDS0FHRSA9IGJpc29uCi1QQUNLQUdFX0JVR1JFUE9SVCA9IGJ1Zy1iaXNvbkBnbnUub3JnCi1QQUNLQUdFX05BTUUgPSBHTlUgQmlzb24KLVBBQ0tBR0VfU1RSSU5HID0gR05VIEJpc29uIDIuMwotUEFDS0FHRV9UQVJOQU1FID0gYmlzb24KLVBBQ0tBR0VfVkVSU0lPTiA9IDIuMwotUEFUSF9TRVBBUkFUT1IgPSA6Ci1QT1NVQiA9IHBvCi1SQU5MSUIgPSByYW5saWIKLVNFVF9NQUtFID0gCi1TSEVMTCA9IC9iaW4vc2gKLVNUREJPT0xfSCA9IAotU1RSSVAgPSAKLVVOSVNURF9IID0gCi1VU0VfTkxTID0geWVzCi1WQUxHUklORCA9IAotVkVSU0lPTiA9IDIuMwotV0FSTklOR19DRkxBR1MgPSAKLVdBUk5JTkdfQ1hYRkxBR1MgPSAKLVdFUlJPUl9DRkxBR1MgPSAKLVhHRVRURVhUID0gL3Vzci9iaW4veGdldHRleHQKLVlBQ0MgPSBiaXNvbiAteQotWUFDQ19MSUJSQVJZID0gbGlieS5hCi1ZQUNDX1NDUklQVCA9IHlhY2MKLWFjX2N0X0NDID0gZ2NjCi1hY19jdF9DWFggPSBnKysKLWFjX2N0X1JBTkxJQiA9IHJhbmxpYgotYWNfY3RfU1RSSVAgPSAKLWFjbG9jYWxkaXIgPSAke2RhdGFkaXJ9L2FjbG9jYWwKLWFtX19mYXN0ZGVwQ0NfRkFMU0UgPSAjCi1hbV9fZmFzdGRlcENDX1RSVUUgPSAKLWFtX19mYXN0ZGVwQ1hYX0ZBTFNFID0gIwotYW1fX2Zhc3RkZXBDWFhfVFJVRSA9IAotYW1fX2luY2x1ZGUgPSBpbmNsdWRlCi1hbV9fbGVhZGluZ19kb3QgPSAuCi1hbV9fcXVvdGUgPSAKLWFtX190YXIgPSAke0FNVEFSfSBjaG9mIC0gIiQkdGFyZGlyIgotYW1fX3VudGFyID0gJHtBTVRBUn0geGYgLQotYmluZGlyID0gJHtleGVjX3ByZWZpeH0vYmluCi1idWlsZCA9IHg4Nl82NC11bmtub3duLWxpbnV4LWdudQotYnVpbGRfYWxpYXMgPSAKLWJ1aWxkX2NwdSA9IHg4Nl82NAotYnVpbGRfb3MgPSBsaW51eC1nbnUKLWJ1aWxkX3ZlbmRvciA9IHVua25vd24KLWRhdGFkaXIgPSAke3ByZWZpeH0vc2hhcmUKLWV4ZWNfcHJlZml4ID0gJHtwcmVmaXh9Ci1ob3N0ID0geDg2XzY0LXVua25vd24tbGludXgtZ251Ci1ob3N0X2FsaWFzID0gCi1ob3N0X2NwdSA9IHg4Nl82NAotaG9zdF9vcyA9IGxpbnV4LWdudQotaG9zdF92ZW5kb3IgPSB1bmtub3duCi1pbmNsdWRlZGlyID0gJHtwcmVmaXh9L2luY2x1ZGUKLWluZm9kaXIgPSAke3ByZWZpeH0vaW5mbwotaW5zdGFsbF9zaCA9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9pbnN0YWxsLXNoCi1saWJkaXIgPSAke2V4ZWNfcHJlZml4fS9saWIKLWxpYmV4ZWNkaXIgPSAke2V4ZWNfcHJlZml4fS9saWJleGVjCi1sb2NhbHN0YXRlZGlyID0gJHtwcmVmaXh9L3ZhcgotbWFuZGlyID0gJHtwcmVmaXh9L21hbgotbWtkaXJfcCA9IG1rZGlyIC1wIC0tCi1vbGRpbmNsdWRlZGlyID0gL3Vzci9pbmNsdWRlCi1wcmVmaXggPSAvaG9tZS9waGFubmEvc3JjL2Jpc29uCi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gcyx4LHgsCi1zYmluZGlyID0gJHtleGVjX3ByZWZpeH0vc2Jpbgotc2hhcmVkc3RhdGVkaXIgPSAke3ByZWZpeH0vY29tCi1zeXNjb25mZGlyID0gJHtwcmVmaXh9L2V0YwotdGFyZ2V0X2FsaWFzID0gCi1kaXN0X3BrZ2RhdGFfREFUQSA9IFJFQURNRSBcCi0gICBjLm00IHlhY2MuYyBnbHIuYyBcCi0gICBjKysubTQgbG9jYXRpb24uY2MgbGFscjEuY2MgZ2xyLmNjCi0KLW00c3VnYXJkaXIgPSAkKHBrZ2RhdGFkaXIpL200c3VnYXIKLWRpc3RfbTRzdWdhcl9EQVRBID0gbTRzdWdhci9tNHN1Z2FyLm00Ci1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0kKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCi0JCSYmIGV4aXQgMDsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgIGRhdGEvTWFrZWZpbGUnOyBcCi0JY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSAgZGF0YS9NYWtlZmlsZQotLlBSRUNJT1VTOiBNYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLXVuaW5zdGFsbC1pbmZvLWFtOgotaW5zdGFsbC1kaXN0X200c3VnYXJEQVRBOiAkKGRpc3RfbTRzdWdhcl9EQVRBKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCXRlc3QgLXogIiQobTRzdWdhcmRpcikiIHx8ICQobWtkaXJfcCkgIiQoREVTVERJUikkKG00c3VnYXJkaXIpIgotCUBsaXN0PSckKGRpc3RfbTRzdWdhcl9EQVRBKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKLQkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChkaXN0X200c3VnYXJEQVRBX0lOU1RBTEwpICckJGQkJHAnICckKERFU1RESVIpJChtNHN1Z2FyZGlyKS8kJGYnIjsgXAotCSAgJChkaXN0X200c3VnYXJEQVRBX0lOU1RBTEwpICIkJGQkJHAiICIkKERFU1RESVIpJChtNHN1Z2FyZGlyKS8kJGYiOyBcCi0JZG9uZQotCi11bmluc3RhbGwtZGlzdF9tNHN1Z2FyREFUQToKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKGRpc3RfbTRzdWdhcl9EQVRBKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgZj0kKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiBybSAtZiAnJChERVNURElSKSQobTRzdWdhcmRpcikvJCRmJyI7IFwKLQkgIHJtIC1mICIkKERFU1RESVIpJChtNHN1Z2FyZGlyKS8kJGYiOyBcCi0JZG9uZQotaW5zdGFsbC1kaXN0X3BrZ2RhdGFEQVRBOiAkKGRpc3RfcGtnZGF0YV9EQVRBKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCXRlc3QgLXogIiQocGtnZGF0YWRpcikiIHx8ICQobWtkaXJfcCkgIiQoREVTVERJUikkKHBrZ2RhdGFkaXIpIgotCUBsaXN0PSckKGRpc3RfcGtnZGF0YV9EQVRBKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKLQkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChkaXN0X3BrZ2RhdGFEQVRBX0lOU1RBTEwpICckJGQkJHAnICckKERFU1RESVIpJChwa2dkYXRhZGlyKS8kJGYnIjsgXAotCSAgJChkaXN0X3BrZ2RhdGFEQVRBX0lOU1RBTEwpICIkJGQkJHAiICIkKERFU1RESVIpJChwa2dkYXRhZGlyKS8kJGYiOyBcCi0JZG9uZQotCi11bmluc3RhbGwtZGlzdF9wa2dkYXRhREFUQToKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKGRpc3RfcGtnZGF0YV9EQVRBKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgZj0kKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiBybSAtZiAnJChERVNURElSKSQocGtnZGF0YWRpcikvJCRmJyI7IFwKLQkgIHJtIC1mICIkKERFU1RESVIpJChwa2dkYXRhZGlyKS8kJGYiOyBcCi0JZG9uZQotdGFnczogVEFHUwotVEFHUzoKLQotY3RhZ3M6IENUQUdTCi1DVEFHUzoKLQotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQkkKG1rZGlyX3ApICQoZGlzdGRpcikvbTRzdWdhcgotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGNhc2UgJCRmaWxlIGluIFwKLQkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLQkgICAgJCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAotCSAgZXNhYzsgXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAotCSAgICBkaXI9Ii8kJGRpciI7IFwKLQkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAotCSAgZWxzZSBcCi0JICAgIGRpcj0nJzsgXAotCSAgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKERBVEEpCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChtNHN1Z2FyZGlyKSIgIiQoREVTVERJUikkKHBrZ2RhdGFkaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQobWtkaXJfcCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCi0JICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWRpc3RfbTRzdWdhckRBVEEgaW5zdGFsbC1kaXN0X3BrZ2RhdGFEQVRBCi0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWRpc3RfbTRzdWdhckRBVEEgdW5pbnN0YWxsLWRpc3RfcGtnZGF0YURBVEEgXAotCXVuaW5zdGFsbC1pbmZvLWFtCi0KLS5QSE9OWTogYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGRpc3RjbGVhbiBcCi0JZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAotCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIFwKLQlpbnN0YWxsLWRpc3RfbTRzdWdhckRBVEEgaW5zdGFsbC1kaXN0X3BrZ2RhdGFEQVRBIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAotCW1vc3RseWNsZWFuLWdlbmVyaWMgcGRmIHBkZi1hbSBwcyBwcy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKLQl1bmluc3RhbGwtZGlzdF9tNHN1Z2FyREFUQSB1bmluc3RhbGwtZGlzdF9wa2dkYXRhREFUQSBcCi0JdW5pbnN0YWxsLWluZm8tYW0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZGF0YS9NYWtlZmlsZS5hbSBiL2RhdGEvTWFrZWZpbGUuYW0KaW5kZXggN2M0Y2NmOS4uMWZkMTBiNCAxMDA2NDQKLS0tIGEvZGF0YS9NYWtlZmlsZS5hbQorKysgYi9kYXRhL01ha2VmaWxlLmFtCkBAIC0xLDIzICsxLDMwIEBACi0jIyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotIyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotIyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAKLSMjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotIyMgMDIxMTAtMTMwMSAgVVNBCi0KLWRpc3RfcGtnZGF0YV9EQVRBID0gUkVBRE1FIFwKLSAgIGMubTQgeWFjYy5jIGdsci5jIFwKLSAgIGMrKy5tNCBsb2NhdGlvbi5jYyBsYWxyMS5jYyBnbHIuY2MKK2Rpc3RfcGtnZGF0YV9EQVRBID0gUkVBRE1FIGJpc29uLm00IFwKKyAgIGMtbGlrZS5tNCBcCisgICBjLXNrZWwubTQgYy5tNCB5YWNjLmMgZ2xyLmMgXAorICAgYysrLXNrZWwubTQgYysrLm00IGxvY2F0aW9uLmNjIGxhbHIxLmNjIGdsci5jYyBzdGFjay5oaCBcCisgICBqYXZhLXNrZWwubTQgamF2YS5tNCBsYWxyMS5qYXZhCiAKIG00c3VnYXJkaXIgPSAkKHBrZ2RhdGFkaXIpL200c3VnYXIKLWRpc3RfbTRzdWdhcl9EQVRBID0gbTRzdWdhci9tNHN1Z2FyLm00CitkaXN0X200c3VnYXJfREFUQSA9IG00c3VnYXIvbTRzdWdhci5tNCBtNHN1Z2FyL2ZvcmVhY2gubTQKKworeHNsdGRpciA9ICQocGtnZGF0YWRpcikveHNsdAorZGlzdF94c2x0X0RBVEEgPQkJCQlcCisgICB4c2x0L2Jpc29uLnhzbAkJCQlcCisgICB4c2x0L3htbDJkb3QueHNsCQkJCVwKKyAgIHhzbHQveG1sMnRleHQueHNsCQkJCVwKKyAgIHhzbHQveG1sMnhodG1sLnhzbApkaWZmIC0tZ2l0IGEvZGF0YS9NYWtlZmlsZS5pbiBiL2RhdGEvTWFrZWZpbGUuaW4KaW5kZXggM2E1ZjU2MS4uYWFlODMyNiAxMDA2NDQKLS0tIGEvZGF0YS9NYWtlZmlsZS5pbgorKysgYi9kYXRhL01ha2VmaWxlLmluCkBAIC0xLDggKzEsOCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjYgZnJvbSBNYWtlZmlsZS5hbS4KKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTIuNSBmcm9tIE1ha2VmaWxlLmFtLgogIyBAY29uZmlndXJlX2lucHV0QAogCi0jIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKLSMgMjAwMywgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMTk5NC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCiAjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCkBAIC0xNCwxNSArMTQsNDEgQEAKIAogQFNFVF9NQUtFQAogCi1zcmNkaXIgPSBAc3JjZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKwogVlBBVEggPSBAc3JjZGlyQAorYW1fX21ha2VfZHJ5cnVuID0gXAorICB7IFwKKyAgICBhbV9fZHJ5PW5vOyBcCisgICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCisgICAgICAqXFxbXCBcCV0qKSBcCisgICAgICAgIGVjaG8gJ2FtLS1lY2hvOiA7IEBlY2hvICJBTSIgIE9LJyB8ICQoTUFLRSkgLWYgLSAyPi9kZXYvbnVsbCBcCisgICAgICAgICAgfCBncmVwICdeQU0gT0skJCcgPi9kZXYvbnVsbCB8fCBhbV9fZHJ5PXllczs7IFwKKyAgICAgICopIFwKKyAgICAgICAgZm9yIGFtX19mbGcgaW4gJCRNQUtFRkxBR1M7IGRvIFwKKyAgICAgICAgICBjYXNlICQkYW1fX2ZsZyBpbiBcCisgICAgICAgICAgICAqPSp8LS0qKSA7OyBcCisgICAgICAgICAgICAqbiopIGFtX19kcnk9eWVzOyBicmVhazs7IFwKKyAgICAgICAgICBlc2FjOyBcCisgICAgICAgIGRvbmU7OyBcCisgICAgZXNhYzsgXAorICAgIHRlc3QgJCRhbV9fZHJ5ID0geWVzOyBcCisgIH0KIHBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAogcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi10b3BfYnVpbGRkaXIgPSAuLgorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAogYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotSU5TVEFMTCA9IEBJTlNUQUxMQAogaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKIGluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKIGluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwpAQCAtMzgsMTQ1ICs2NCwxMjUzIEBACiBob3N0X3RyaXBsZXQgPSBAaG9zdEAKIHN1YmRpciA9IGRhdGEKIERJU1RfQ09NTU9OID0gUkVBRE1FICQoZGlzdF9tNHN1Z2FyX0RBVEEpICQoZGlzdF9wa2dkYXRhX0RBVEEpIFwKLQkkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCisJJChkaXN0X3hzbHRfREFUQSkgJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgogQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYmlzb24taTE4bi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jLXdvcmtpbmcubTQgJCh0b3Bfc3JjZGlyKS9tNC9jeHgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZGlybmFtZS5tNCAkKHRvcF9zcmNkaXIpL200L2RtYWxsb2MubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZG9zLm00ICQodG9wX3NyY2RpcikvbTQvZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZXhpdGZhaWwubTQgJCh0b3Bfc3JjZGlyKS9tNC9leHRlbnNpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dldG9wdC5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHRfZ2wubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ251bGliLm00ICQodG9wX3NyY2RpcikvbTQvaGFyZC1sb2NhbGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaGFzaC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzX2hfZ2wubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxkX2dsLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeF9nbC5tNCAkKHRvcF9zcmNkaXIpL200L200Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L21icnRvd2MubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYnN0YXRlX3QubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbWJzd2lkdGgubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvb2JzdGFjay5tNCAkKHRvcF9zcmNkaXIpL200L29uY2Vvbmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvX2dsLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvMDBnbnVsaWIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYWxsb2NhLm00ICQodG9wX3NyY2RpcikvbTQvYXNtLXVuZGVyc2NvcmUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYXNzZXJ0Lm00ICQodG9wX3NyY2RpcikvbTQvYmlzb24taTE4bi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jLXdvcmtpbmcubTQgJCh0b3Bfc3JjZGlyKS9tNC9jYWxsb2MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2xvc2Utc3RyZWFtLm00ICQodG9wX3NyY2RpcikvbTQvY2xvc2UubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2xvc2VvdXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9jb2Rlc2V0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvbmZpZy1oLm00ICQodG9wX3NyY2RpcikvbTQvY29uZmlnbWFrZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jeHgubTQgJCh0b3Bfc3JjZGlyKS9tNC9kaXJuYW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2RtYWxsb2MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZG91YmxlLXNsYXNoLXJvb3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9kdXAyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Vudmlyb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9lcnJub19oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Vycm9yLm00ICQodG9wX3NyY2RpcikvbTQvZXhwb25lbnRkLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2V4cG9uZW50Zi5tNCAkKHRvcF9zcmNkaXIpL200L2V4cG9uZW50bC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHRlbnNpb25zLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2V4dGVybi1pbmxpbmUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZmF0YWwtc2lnbmFsLm00ICQodG9wX3NyY2RpcikvbTQvZmNudGwtby5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mY250bC5tNCAkKHRvcF9zcmNkaXIpL200L2ZjbnRsX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZmxleC5tNCAkKHRvcF9zcmNkaXIpL200L2Zsb2F0X2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZm9wZW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9mcGVuZGluZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mcGllZWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9mcHJpbnRmLXBvc2l4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZyZXhwLm00ICQodG9wX3NyY2RpcikvbTQvZnJleHBsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZzZXRlcnIubTQgJCh0b3Bfc3JjZGlyKS9tNC9mc3RhdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nZXRkZWxpbS5tNCAkKHRvcF9zcmNkaXIpL200L2dldGR0YWJsZXNpemUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ2V0bGluZS5tNCAkKHRvcF9zcmNkaXIpL200L2dldG9wdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00ICQodG9wX3NyY2RpcikvbTQvZ2xpYmMyMS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWItY29tbW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dudWxpYi1jb21wLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW5jbHVkZV9uZXh0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRtYXhfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlcy1wcmkubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlc19oLm00ICQodG9wX3NyY2RpcikvbTQvaXNuYW4ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaXNuYW5kLm00ICQodG9wX3NyY2RpcikvbTQvaXNuYW5mLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2lzbmFubC5tNCAkKHRvcF9zcmNkaXIpL200L2lzd2JsYW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2phdmFjb21wLm00ICQodG9wX3NyY2RpcikvbTQvamF2YWV4ZWMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGFyZ2VmaWxlLm00ICQodG9wX3NyY2RpcikvbTQvbGRleHAubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGRleHBsLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWJ1bmlzdHJpbmctYmFzZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sb2NhbGNoYXJzZXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb2NhbGUtZnIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9jYWxlLWphLm00ICQodG9wX3NyY2RpcikvbTQvbG9jYWxlLXpoLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvY2subTQgJCh0b3Bfc3JjZGlyKS9tNC9sb25nbG9uZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tNC5tNCAkKHRvcF9zcmNkaXIpL200L21hbGxvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYXRoX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYmNoYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWJpdGVyLm00ICQodG9wX3NyY2RpcikvbTQvbWJydG93Yy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYnNpbml0Lm00ICQodG9wX3NyY2RpcikvbTQvbWJzdGF0ZV90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21ic3dpZHRoLm00ICQodG9wX3NyY2RpcikvbTQvbWVtY2hyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21tYXAtYW5vbi5tNCAkKHRvcF9zcmNkaXIpL200L21vZGVfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tc3ZjLWludmFsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21zdmMtbm90aHJvdy5tNCAkKHRvcF9zcmNkaXIpL200L211bHRpYXJjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9ub2NyYXNoLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L29ic3RhY2stcHJpbnRmLm00ICQodG9wX3NyY2RpcikvbTQvb2ZmX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvb3Blbi5tNCAkKHRvcF9zcmNkaXIpL200L3BhdGhtYXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcGVycm9yLm00ICQodG9wX3NyY2RpcikvbTQvcGlwZTIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wb3NpeF9zcGF3bi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcmludGYtZnJleHAubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJpbnRmLWZyZXhwbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcmludGYtcG9zaXgtcnBsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ByaW50Zi5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKIAkkKHRvcF9zcmNkaXIpL200L3F1b3RlLm00ICQodG9wX3NyY2RpcikvbTQvcXVvdGVhcmcubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RkYm9vbC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludF9oX2dsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3N0ZGlvLXNhZmVyLm00ICQodG9wX3NyY2RpcikvbTQvc3RwY3B5Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3JhaXNlLm00ICQodG9wX3NyY2RpcikvbTQvcmF3bWVtY2hyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3JlYWxsb2MubTQgJCh0b3Bfc3JjZGlyKS9tNC9zY2hlZF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NldGVudi5tNCAkKHRvcF9zcmNkaXIpL200L3NpZ19hdG9taWNfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zaWdhY3Rpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zaWduYWxfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zaWduYWxibG9ja2luZy5tNCAkKHRvcF9zcmNkaXIpL200L3NpZ25iaXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc2l6ZV9tYXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc25wcmludGYtcG9zaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc25wcmludGYubTQgJCh0b3Bfc3JjZGlyKS9tNC9zcGF3bi1waXBlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NwYXduX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zcHJpbnRmLXBvc2l4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NzaXplX3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGF0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGJvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRkZWZfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnQubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRpb19oLm00ICQodG9wX3NyY2RpcikvbTQvc3RkbGliX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RwY3B5Lm00ICQodG9wX3NyY2RpcikvbTQvc3RyY2hybnVsLm00IFwKIAkkKHRvcF9zcmNkaXIpL200L3N0cmR1cC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cmVycm9yLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cmVycm9yX3IubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJpbmdfaC5tNCBcCiAJJCh0b3Bfc3JjZGlyKS9tNC9zdHJuZHVwLm00ICQodG9wX3NyY2RpcikvbTQvc3Rybmxlbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b3VsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3N0cnZlcnNjbXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdWJwaXBlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3RpbWV2YXIubTQgJCh0b3Bfc3JjZGlyKS9tNC91aW50bWF4X3RfZ2wubTQgXAotCSQodG9wX3NyY2RpcikvbTQvdWxvbmdsb25nX2dsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cnRvdWwubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJ2ZXJzY21wLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N5c19zb2NrZXRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zeXNfc3RhdF9oLm00ICQodG9wX3NyY2RpcikvbTQvc3lzX3R5cGVzX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3lzX3dhaXRfaC5tNCAkKHRvcF9zcmNkaXIpL200L3RocmVhZGxpYi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC90aW1lX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC90aW1ldmFyLm00IFwKIAkkKHRvcF9zcmNkaXIpL200L3VuaXN0ZC1zYWZlci5tNCAkKHRvcF9zcmNkaXIpL200L3VuaXN0ZF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3VubG9ja2VkLWlvLm00ICQodG9wX3NyY2RpcikvbTQvd2FybmluZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC94YWxsb2MubTQgJCh0b3Bfc3JjZGlyKS9tNC94c3RybmR1cC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC91bmxvY2tlZC1pby5tNCAkKHRvcF9zcmNkaXIpL200L3Zhc25wcmludGYubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdmZwcmludGYtcG9zaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdnNucHJpbnRmLXBvc2l4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ZzbnByaW50Zi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC92c3ByaW50Zi1wb3NpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93YWl0LXByb2Nlc3MubTQgJCh0b3Bfc3JjZGlyKS9tNC93YWl0cGlkLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3dhcm4tb24tdXNlLm00ICQodG9wX3NyY2RpcikvbTQvd2FybmluZ3MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2NoYXJfaC5tNCAkKHRvcF9zcmNkaXIpL200L3djaGFyX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2N0eXBlX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC93Y3dpZHRoLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3dpbnRfdC5tNCAkKHRvcF9zcmNkaXIpL200L3hhbGxvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC94c2l6ZS5tNCAkKHRvcF9zcmNkaXIpL200L3hzdHJuZHVwLm00IFwKIAkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwogYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKIAkkKEFDTE9DQUxfTTQpCi1ta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvbWtpbnN0YWxsZGlycwotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oCiBDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK0FNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCithbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKK2FtX192X1BfMCA9IGZhbHNlCithbV9fdl9QXzEgPSA6CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOworYW1fX3ZfR0VOXzEgPSAKK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9hdF8wID0gQAorYW1fX3ZfYXRfMSA9IAogU09VUkNFUyA9CiBESVNUX1NPVVJDRVMgPQorYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCisgIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAorICAgIG58bm98Tk8pIGZhbHNlOzsgXAorICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCisgIGVzYWMKIGFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwogYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKICAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAogICAgICopIGY9JCRwOzsgXAogICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChtNHN1Z2FyZGlyKSIgIiQoREVTVERJUikkKHBrZ2RhdGFkaXIpIgotZGlzdF9tNHN1Z2FyREFUQV9JTlNUQUxMID0gJChJTlNUQUxMX0RBVEEpCi1kaXN0X3BrZ2RhdGFEQVRBX0lOU1RBTEwgPSAkKElOU1RBTExfREFUQSkKLURBVEEgPSAkKGRpc3RfbTRzdWdhcl9EQVRBKSAkKGRpc3RfcGtnZGF0YV9EQVRBKQorYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxfbWF4ID0gNDAKK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisgIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKK2FtX19ub2Jhc2Vfc3RyaXAgPSBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCisgICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAorICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKK2FtX19iYXNlX2xpc3QgPSBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKK2FtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKKyAgdGVzdCAteiAiJCRmaWxlcyIgXAorICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAorICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKyAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKKyAgfQorYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKG00c3VnYXJkaXIpIiAiJChERVNURElSKSQocGtnZGF0YWRpcikiIFwKKwkiJChERVNURElSKSQoeHNsdGRpcikiCitEQVRBID0gJChkaXN0X200c3VnYXJfREFUQSkgJChkaXN0X3BrZ2RhdGFfREFUQSkgJChkaXN0X3hzbHRfREFUQSkKIERJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitwa2dsaWJleGVjZGlyID0gQHBrZ2xpYmV4ZWNkaXJACiBBQ0xPQ0FMID0gQEFDTE9DQUxACi1BTURFUF9GQUxTRSA9IEBBTURFUF9GQUxTRUAKLUFNREVQX1RSVUUgPSBAQU1ERVBfVFJVRUAKK0FMTE9DQSA9IEBBTExPQ0FACitBTExPQ0FfSCA9IEBBTExPQ0FfSEAKIEFNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUFBMRV9VTklWRVJTQUxfQlVJTEQgPSBAQVBQTEVfVU5JVkVSU0FMX0JVSUxEQAorQVIgPSBAQVJACitBUkZMQUdTID0gQEFSRkxBR1NACitBU01fU1lNQk9MX1BSRUZJWCA9IEBBU01fU1lNQk9MX1BSRUZJWEAKIEFVVE9DT05GID0gQEFVVE9DT05GQAogQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAogQVVUT000VEUgPSBAQVVUT000VEVACiBBVVRPTUFLRSA9IEBBVVRPTUFLRUAKIEFXSyA9IEBBV0tACiBCSVNPTl9DWFhfV09SS1MgPSBAQklTT05fQ1hYX1dPUktTQAotQklTT05fQ1hYX1dPUktTX0ZBTFNFID0gQEJJU09OX0NYWF9XT1JLU19GQUxTRUAKLUJJU09OX0NYWF9XT1JLU19UUlVFID0gQEJJU09OX0NYWF9XT1JLU19UUlVFQAorQklTT05fQ19XT1JLUyA9IEBCSVNPTl9DX1dPUktTQAogQklTT05fTE9DQUxFRElSID0gQEJJU09OX0xPQ0FMRURJUkAKK0JJVFNJWkVPRl9QVFJESUZGX1QgPSBAQklUU0laRU9GX1BUUkRJRkZfVEAKK0JJVFNJWkVPRl9TSUdfQVRPTUlDX1QgPSBAQklUU0laRU9GX1NJR19BVE9NSUNfVEAKK0JJVFNJWkVPRl9TSVpFX1QgPSBAQklUU0laRU9GX1NJWkVfVEAKK0JJVFNJWkVPRl9XQ0hBUl9UID0gQEJJVFNJWkVPRl9XQ0hBUl9UQAorQklUU0laRU9GX1dJTlRfVCA9IEBCSVRTSVpFT0ZfV0lOVF9UQAogQ0MgPSBAQ0NACiBDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAogQ0ZMQUdTID0gQENGTEFHU0AKK0NMQVNTUEFUSCA9IEBDTEFTU1BBVEhACitDTEFTU1BBVEhfU0VQQVJBVE9SID0gQENMQVNTUEFUSF9TRVBBUkFUT1JACitDT05GSUdfSU5DTFVERSA9IEBDT05GSUdfSU5DTFVERUAKK0NPTkZfSkFWQSA9IEBDT05GX0pBVkFACitDT05GX0pBVkFDID0gQENPTkZfSkFWQUNACiBDUFAgPSBAQ1BQQAogQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACiBDWFggPSBAQ1hYQAogQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAogQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWFhfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUID0gQENYWF9DT01QSUxFUl9QT1NJWExZX0NPUlJFQ1RACiBDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorQ19DT01QSUxFUl9QT1NJWExZX0NPUlJFQ1QgPSBAQ19DT01QSUxFUl9QT1NJWExZX0NPUlJFQ1RACiBERUZTID0gQERFRlNACiBERVBESVIgPSBAREVQRElSQAorRE9UID0gQERPVEAKIEVDSE9fQyA9IEBFQ0hPX0NACiBFQ0hPX04gPSBARUNIT19OQAogRUNIT19UID0gQEVDSE9fVEAKIEVHUkVQID0gQEVHUkVQQAorRU1VTFRJSE9QX0hJRERFTiA9IEBFTVVMVElIT1BfSElEREVOQAorRU1VTFRJSE9QX1ZBTFVFID0gQEVNVUxUSUhPUF9WQUxVRUAKK0VOT0xJTktfSElEREVOID0gQEVOT0xJTktfSElEREVOQAorRU5PTElOS19WQUxVRSA9IEBFTk9MSU5LX1ZBTFVFQAorRU9WRVJGTE9XX0hJRERFTiA9IEBFT1ZFUkZMT1dfSElEREVOQAorRU9WRVJGTE9XX1ZBTFVFID0gQEVPVkVSRkxPV19WQUxVRUAKK0VSUk5PX0ggPSBARVJSTk9fSEAKIEVYRUVYVCA9IEBFWEVFWFRACitGTE9BVF9IID0gQEZMT0FUX0hACiBHQ0MgPSBAR0NDQAogR0VUT1BUX0ggPSBAR0VUT1BUX0hACitHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAorR0xJQkMyMSA9IEBHTElCQzIxQAogR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHTlVMSUJfQUNPU0YgPSBAR05VTElCX0FDT1NGQAorR05VTElCX0FDT1NMID0gQEdOVUxJQl9BQ09TTEAKK0dOVUxJQl9BU0lORiA9IEBHTlVMSUJfQVNJTkZACitHTlVMSUJfQVNJTkwgPSBAR05VTElCX0FTSU5MQAorR05VTElCX0FUQU4yRiA9IEBHTlVMSUJfQVRBTjJGQAorR05VTElCX0FUQU5GID0gQEdOVUxJQl9BVEFORkAKK0dOVUxJQl9BVEFOTCA9IEBHTlVMSUJfQVRBTkxACitHTlVMSUJfQVRPTEwgPSBAR05VTElCX0FUT0xMQAorR05VTElCX0JUT1dDID0gQEdOVUxJQl9CVE9XQ0AKK0dOVUxJQl9DQUxMT0NfUE9TSVggPSBAR05VTElCX0NBTExPQ19QT1NJWEAKK0dOVUxJQl9DQU5PTklDQUxJWkVfRklMRV9OQU1FID0gQEdOVUxJQl9DQU5PTklDQUxJWkVfRklMRV9OQU1FQAorR05VTElCX0NCUlQgPSBAR05VTElCX0NCUlRACitHTlVMSUJfQ0JSVEYgPSBAR05VTElCX0NCUlRGQAorR05VTElCX0NCUlRMID0gQEdOVUxJQl9DQlJUTEAKK0dOVUxJQl9DRUlMID0gQEdOVUxJQl9DRUlMQAorR05VTElCX0NFSUxGID0gQEdOVUxJQl9DRUlMRkAKK0dOVUxJQl9DRUlMTCA9IEBHTlVMSUJfQ0VJTExACitHTlVMSUJfQ0hESVIgPSBAR05VTElCX0NIRElSQAorR05VTElCX0NIT1dOID0gQEdOVUxJQl9DSE9XTkAKK0dOVUxJQl9DTE9TRSA9IEBHTlVMSUJfQ0xPU0VACitHTlVMSUJfQ09QWVNJR04gPSBAR05VTElCX0NPUFlTSUdOQAorR05VTElCX0NPUFlTSUdORiA9IEBHTlVMSUJfQ09QWVNJR05GQAorR05VTElCX0NPUFlTSUdOTCA9IEBHTlVMSUJfQ09QWVNJR05MQAorR05VTElCX0NPU0YgPSBAR05VTElCX0NPU0ZACitHTlVMSUJfQ09TSEYgPSBAR05VTElCX0NPU0hGQAorR05VTElCX0NPU0wgPSBAR05VTElCX0NPU0xACitHTlVMSUJfRFBSSU5URiA9IEBHTlVMSUJfRFBSSU5URkAKK0dOVUxJQl9EVVAgPSBAR05VTElCX0RVUEAKK0dOVUxJQl9EVVAyID0gQEdOVUxJQl9EVVAyQAorR05VTElCX0RVUDMgPSBAR05VTElCX0RVUDNACitHTlVMSUJfRU5WSVJPTiA9IEBHTlVMSUJfRU5WSVJPTkAKK0dOVUxJQl9FVUlEQUNDRVNTID0gQEdOVUxJQl9FVUlEQUNDRVNTQAorR05VTElCX0VYUDIgPSBAR05VTElCX0VYUDJACitHTlVMSUJfRVhQMkYgPSBAR05VTElCX0VYUDJGQAorR05VTElCX0VYUDJMID0gQEdOVUxJQl9FWFAyTEAKK0dOVUxJQl9FWFBGID0gQEdOVUxJQl9FWFBGQAorR05VTElCX0VYUEwgPSBAR05VTElCX0VYUExACitHTlVMSUJfRVhQTTEgPSBAR05VTElCX0VYUE0xQAorR05VTElCX0VYUE0xRiA9IEBHTlVMSUJfRVhQTTFGQAorR05VTElCX0VYUE0xTCA9IEBHTlVMSUJfRVhQTTFMQAorR05VTElCX0ZBQlNGID0gQEdOVUxJQl9GQUJTRkAKK0dOVUxJQl9GQUJTTCA9IEBHTlVMSUJfRkFCU0xACitHTlVMSUJfRkFDQ0VTU0FUID0gQEdOVUxJQl9GQUNDRVNTQVRACitHTlVMSUJfRkNIRElSID0gQEdOVUxJQl9GQ0hESVJACitHTlVMSUJfRkNITU9EQVQgPSBAR05VTElCX0ZDSE1PREFUQAorR05VTElCX0ZDSE9XTkFUID0gQEdOVUxJQl9GQ0hPV05BVEAKK0dOVUxJQl9GQ0xPU0UgPSBAR05VTElCX0ZDTE9TRUAKK0dOVUxJQl9GQ05UTCA9IEBHTlVMSUJfRkNOVExACitHTlVMSUJfRkRBVEFTWU5DID0gQEdOVUxJQl9GREFUQVNZTkNACitHTlVMSUJfRkRPUEVOID0gQEdOVUxJQl9GRE9QRU5ACitHTlVMSUJfRkZMVVNIID0gQEdOVUxJQl9GRkxVU0hACitHTlVMSUJfRkZTTCA9IEBHTlVMSUJfRkZTTEAKK0dOVUxJQl9GRlNMTCA9IEBHTlVMSUJfRkZTTExACitHTlVMSUJfRkdFVEMgPSBAR05VTElCX0ZHRVRDQAorR05VTElCX0ZHRVRTID0gQEdOVUxJQl9GR0VUU0AKK0dOVUxJQl9GTE9PUiA9IEBHTlVMSUJfRkxPT1JACitHTlVMSUJfRkxPT1JGID0gQEdOVUxJQl9GTE9PUkZACitHTlVMSUJfRkxPT1JMID0gQEdOVUxJQl9GTE9PUkxACitHTlVMSUJfRk1BID0gQEdOVUxJQl9GTUFACitHTlVMSUJfRk1BRiA9IEBHTlVMSUJfRk1BRkAKK0dOVUxJQl9GTUFMID0gQEdOVUxJQl9GTUFMQAorR05VTElCX0ZNT0QgPSBAR05VTElCX0ZNT0RACitHTlVMSUJfRk1PREYgPSBAR05VTElCX0ZNT0RGQAorR05VTElCX0ZNT0RMID0gQEdOVUxJQl9GTU9ETEAKK0dOVUxJQl9GT1BFTiA9IEBHTlVMSUJfRk9QRU5ACitHTlVMSUJfRlBSSU5URiA9IEBHTlVMSUJfRlBSSU5URkAKK0dOVUxJQl9GUFJJTlRGX1BPU0lYID0gQEdOVUxJQl9GUFJJTlRGX1BPU0lYQAorR05VTElCX0ZQVVJHRSA9IEBHTlVMSUJfRlBVUkdFQAorR05VTElCX0ZQVVRDID0gQEdOVUxJQl9GUFVUQ0AKK0dOVUxJQl9GUFVUUyA9IEBHTlVMSUJfRlBVVFNACitHTlVMSUJfRlJFQUQgPSBAR05VTElCX0ZSRUFEQAorR05VTElCX0ZSRU9QRU4gPSBAR05VTElCX0ZSRU9QRU5ACitHTlVMSUJfRlJFWFAgPSBAR05VTElCX0ZSRVhQQAorR05VTElCX0ZSRVhQRiA9IEBHTlVMSUJfRlJFWFBGQAorR05VTElCX0ZSRVhQTCA9IEBHTlVMSUJfRlJFWFBMQAorR05VTElCX0ZTQ0FORiA9IEBHTlVMSUJfRlNDQU5GQAorR05VTElCX0ZTRUVLID0gQEdOVUxJQl9GU0VFS0AKK0dOVUxJQl9GU0VFS08gPSBAR05VTElCX0ZTRUVLT0AKK0dOVUxJQl9GU1RBVCA9IEBHTlVMSUJfRlNUQVRACitHTlVMSUJfRlNUQVRBVCA9IEBHTlVMSUJfRlNUQVRBVEAKK0dOVUxJQl9GU1lOQyA9IEBHTlVMSUJfRlNZTkNACitHTlVMSUJfRlRFTEwgPSBAR05VTElCX0ZURUxMQAorR05VTElCX0ZURUxMTyA9IEBHTlVMSUJfRlRFTExPQAorR05VTElCX0ZUUlVOQ0FURSA9IEBHTlVMSUJfRlRSVU5DQVRFQAorR05VTElCX0ZVVElNRU5TID0gQEdOVUxJQl9GVVRJTUVOU0AKK0dOVUxJQl9GV1JJVEUgPSBAR05VTElCX0ZXUklURUAKK0dOVUxJQl9HRVRDID0gQEdOVUxJQl9HRVRDQAorR05VTElCX0dFVENIQVIgPSBAR05VTElCX0dFVENIQVJACitHTlVMSUJfR0VUQ1dEID0gQEdOVUxJQl9HRVRDV0RACitHTlVMSUJfR0VUREVMSU0gPSBAR05VTElCX0dFVERFTElNQAorR05VTElCX0dFVERPTUFJTk5BTUUgPSBAR05VTElCX0dFVERPTUFJTk5BTUVACitHTlVMSUJfR0VURFRBQkxFU0laRSA9IEBHTlVMSUJfR0VURFRBQkxFU0laRUAKK0dOVUxJQl9HRVRHUk9VUFMgPSBAR05VTElCX0dFVEdST1VQU0AKK0dOVUxJQl9HRVRIT1NUTkFNRSA9IEBHTlVMSUJfR0VUSE9TVE5BTUVACitHTlVMSUJfR0VUTElORSA9IEBHTlVMSUJfR0VUTElORUAKK0dOVUxJQl9HRVRMT0FEQVZHID0gQEdOVUxJQl9HRVRMT0FEQVZHQAorR05VTElCX0dFVExPR0lOID0gQEdOVUxJQl9HRVRMT0dJTkAKK0dOVUxJQl9HRVRMT0dJTl9SID0gQEdOVUxJQl9HRVRMT0dJTl9SQAorR05VTElCX0dFVFBBR0VTSVpFID0gQEdOVUxJQl9HRVRQQUdFU0laRUAKK0dOVUxJQl9HRVRTVUJPUFQgPSBAR05VTElCX0dFVFNVQk9QVEAKK0dOVUxJQl9HRVRVU0VSU0hFTEwgPSBAR05VTElCX0dFVFVTRVJTSEVMTEAKK0dOVUxJQl9HTF9VTklTVERfSF9HRVRPUFQgPSBAR05VTElCX0dMX1VOSVNURF9IX0dFVE9QVEAKK0dOVUxJQl9HUkFOVFBUID0gQEdOVUxJQl9HUkFOVFBUQAorR05VTElCX0dST1VQX01FTUJFUiA9IEBHTlVMSUJfR1JPVVBfTUVNQkVSQAorR05VTElCX0hZUE9UID0gQEdOVUxJQl9IWVBPVEAKK0dOVUxJQl9IWVBPVEYgPSBAR05VTElCX0hZUE9URkAKK0dOVUxJQl9IWVBPVEwgPSBAR05VTElCX0hZUE9UTEAKK0dOVUxJQl9JTE9HQiA9IEBHTlVMSUJfSUxPR0JACitHTlVMSUJfSUxPR0JGID0gQEdOVUxJQl9JTE9HQkZACitHTlVMSUJfSUxPR0JMID0gQEdOVUxJQl9JTE9HQkxACitHTlVMSUJfSU1BWEFCUyA9IEBHTlVMSUJfSU1BWEFCU0AKK0dOVUxJQl9JTUFYRElWID0gQEdOVUxJQl9JTUFYRElWQAorR05VTElCX0lTQVRUWSA9IEBHTlVMSUJfSVNBVFRZQAorR05VTElCX0lTRklOSVRFID0gQEdOVUxJQl9JU0ZJTklURUAKK0dOVUxJQl9JU0lORiA9IEBHTlVMSUJfSVNJTkZACitHTlVMSUJfSVNOQU4gPSBAR05VTElCX0lTTkFOQAorR05VTElCX0lTTkFORCA9IEBHTlVMSUJfSVNOQU5EQAorR05VTElCX0lTTkFORiA9IEBHTlVMSUJfSVNOQU5GQAorR05VTElCX0lTTkFOTCA9IEBHTlVMSUJfSVNOQU5MQAorR05VTElCX0lTV0JMQU5LID0gQEdOVUxJQl9JU1dCTEFOS0AKK0dOVUxJQl9JU1dDVFlQRSA9IEBHTlVMSUJfSVNXQ1RZUEVACitHTlVMSUJfTENITU9EID0gQEdOVUxJQl9MQ0hNT0RACitHTlVMSUJfTENIT1dOID0gQEdOVUxJQl9MQ0hPV05ACitHTlVMSUJfTERFWFBGID0gQEdOVUxJQl9MREVYUEZACitHTlVMSUJfTERFWFBMID0gQEdOVUxJQl9MREVYUExACitHTlVMSUJfTElOSyA9IEBHTlVMSUJfTElOS0AKK0dOVUxJQl9MSU5LQVQgPSBAR05VTElCX0xJTktBVEAKK0dOVUxJQl9MT0cgPSBAR05VTElCX0xPR0AKK0dOVUxJQl9MT0cxMCA9IEBHTlVMSUJfTE9HMTBACitHTlVMSUJfTE9HMTBGID0gQEdOVUxJQl9MT0cxMEZACitHTlVMSUJfTE9HMTBMID0gQEdOVUxJQl9MT0cxMExACitHTlVMSUJfTE9HMVAgPSBAR05VTElCX0xPRzFQQAorR05VTElCX0xPRzFQRiA9IEBHTlVMSUJfTE9HMVBGQAorR05VTElCX0xPRzFQTCA9IEBHTlVMSUJfTE9HMVBMQAorR05VTElCX0xPRzIgPSBAR05VTElCX0xPRzJACitHTlVMSUJfTE9HMkYgPSBAR05VTElCX0xPRzJGQAorR05VTElCX0xPRzJMID0gQEdOVUxJQl9MT0cyTEAKK0dOVUxJQl9MT0dCID0gQEdOVUxJQl9MT0dCQAorR05VTElCX0xPR0JGID0gQEdOVUxJQl9MT0dCRkAKK0dOVUxJQl9MT0dCTCA9IEBHTlVMSUJfTE9HQkxACitHTlVMSUJfTE9HRiA9IEBHTlVMSUJfTE9HRkAKK0dOVUxJQl9MT0dMID0gQEdOVUxJQl9MT0dMQAorR05VTElCX0xTRUVLID0gQEdOVUxJQl9MU0VFS0AKK0dOVUxJQl9MU1RBVCA9IEBHTlVMSUJfTFNUQVRACitHTlVMSUJfTUFMTE9DX1BPU0lYID0gQEdOVUxJQl9NQUxMT0NfUE9TSVhACitHTlVMSUJfTUJSTEVOID0gQEdOVUxJQl9NQlJMRU5ACitHTlVMSUJfTUJSVE9XQyA9IEBHTlVMSUJfTUJSVE9XQ0AKK0dOVUxJQl9NQlNDQVNFQ01QID0gQEdOVUxJQl9NQlNDQVNFQ01QQAorR05VTElCX01CU0NBU0VTVFIgPSBAR05VTElCX01CU0NBU0VTVFJACitHTlVMSUJfTUJTQ0hSID0gQEdOVUxJQl9NQlNDSFJACitHTlVMSUJfTUJTQ1NQTiA9IEBHTlVMSUJfTUJTQ1NQTkAKK0dOVUxJQl9NQlNJTklUID0gQEdOVUxJQl9NQlNJTklUQAorR05VTElCX01CU0xFTiA9IEBHTlVMSUJfTUJTTEVOQAorR05VTElCX01CU05DQVNFQ01QID0gQEdOVUxJQl9NQlNOQ0FTRUNNUEAKK0dOVUxJQl9NQlNOTEVOID0gQEdOVUxJQl9NQlNOTEVOQAorR05VTElCX01CU05SVE9XQ1MgPSBAR05VTElCX01CU05SVE9XQ1NACitHTlVMSUJfTUJTUEJSSyA9IEBHTlVMSUJfTUJTUEJSS0AKK0dOVUxJQl9NQlNQQ0FTRUNNUCA9IEBHTlVMSUJfTUJTUENBU0VDTVBACitHTlVMSUJfTUJTUkNIUiA9IEBHTlVMSUJfTUJTUkNIUkAKK0dOVUxJQl9NQlNSVE9XQ1MgPSBAR05VTElCX01CU1JUT1dDU0AKK0dOVUxJQl9NQlNTRVAgPSBAR05VTElCX01CU1NFUEAKK0dOVUxJQl9NQlNTUE4gPSBAR05VTElCX01CU1NQTkAKK0dOVUxJQl9NQlNTVFIgPSBAR05VTElCX01CU1NUUkAKK0dOVUxJQl9NQlNUT0tfUiA9IEBHTlVMSUJfTUJTVE9LX1JACitHTlVMSUJfTUJUT1dDID0gQEdOVUxJQl9NQlRPV0NACitHTlVMSUJfTUVNQ0hSID0gQEdOVUxJQl9NRU1DSFJACitHTlVMSUJfTUVNTUVNID0gQEdOVUxJQl9NRU1NRU1ACitHTlVMSUJfTUVNUENQWSA9IEBHTlVMSUJfTUVNUENQWUAKK0dOVUxJQl9NRU1SQ0hSID0gQEdOVUxJQl9NRU1SQ0hSQAorR05VTElCX01LRElSQVQgPSBAR05VTElCX01LRElSQVRACitHTlVMSUJfTUtEVEVNUCA9IEBHTlVMSUJfTUtEVEVNUEAKK0dOVUxJQl9NS0ZJRk8gPSBAR05VTElCX01LRklGT0AKK0dOVUxJQl9NS0ZJRk9BVCA9IEBHTlVMSUJfTUtGSUZPQVRACitHTlVMSUJfTUtOT0QgPSBAR05VTElCX01LTk9EQAorR05VTElCX01LTk9EQVQgPSBAR05VTElCX01LTk9EQVRACitHTlVMSUJfTUtPU1RFTVAgPSBAR05VTElCX01LT1NURU1QQAorR05VTElCX01LT1NURU1QUyA9IEBHTlVMSUJfTUtPU1RFTVBTQAorR05VTElCX01LU1RFTVAgPSBAR05VTElCX01LU1RFTVBACitHTlVMSUJfTUtTVEVNUFMgPSBAR05VTElCX01LU1RFTVBTQAorR05VTElCX01LVElNRSA9IEBHTlVMSUJfTUtUSU1FQAorR05VTElCX01PREYgPSBAR05VTElCX01PREZACitHTlVMSUJfTU9ERkYgPSBAR05VTElCX01PREZGQAorR05VTElCX01PREZMID0gQEdOVUxJQl9NT0RGTEAKK0dOVUxJQl9OQU5PU0xFRVAgPSBAR05VTElCX05BTk9TTEVFUEAKK0dOVUxJQl9OT05CTE9DS0lORyA9IEBHTlVMSUJfTk9OQkxPQ0tJTkdACitHTlVMSUJfT0JTVEFDS19QUklOVEYgPSBAR05VTElCX09CU1RBQ0tfUFJJTlRGQAorR05VTElCX09CU1RBQ0tfUFJJTlRGX1BPU0lYID0gQEdOVUxJQl9PQlNUQUNLX1BSSU5URl9QT1NJWEAKK0dOVUxJQl9PUEVOID0gQEdOVUxJQl9PUEVOQAorR05VTElCX09QRU5BVCA9IEBHTlVMSUJfT1BFTkFUQAorR05VTElCX1BDTE9TRSA9IEBHTlVMSUJfUENMT1NFQAorR05VTElCX1BFUlJPUiA9IEBHTlVMSUJfUEVSUk9SQAorR05VTElCX1BJUEUgPSBAR05VTElCX1BJUEVACitHTlVMSUJfUElQRTIgPSBAR05VTElCX1BJUEUyQAorR05VTElCX1BPUEVOID0gQEdOVUxJQl9QT1BFTkAKK0dOVUxJQl9QT1NJWF9PUEVOUFQgPSBAR05VTElCX1BPU0lYX09QRU5QVEAKK0dOVUxJQl9QT1NJWF9TUEFXTiA9IEBHTlVMSUJfUE9TSVhfU1BBV05ACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0RFU1RST1kgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9ERVNUUk9ZQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRGTEFHUyA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVEZMQUdTQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRQR1JPVVAgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRQR1JPVVBACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNDSEVEUEFSQU0gPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBBUkFNQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBPTElDWSA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNDSEVEUE9MSUNZQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdERUZBVUxUID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0lHREVGQVVMVEAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0lHTUFTSyA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNJR01BU0tACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0lOSVQgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9JTklUQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRGTEFHUyA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVEZMQUdTQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRQR1JPVVAgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRQR1JPVVBACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNDSEVEUEFSQU0gPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTQ0hFRFBBUkFNQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTQ0hFRFBPTElDWSA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNDSEVEUE9MSUNZQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTSUdERUZBVUxUID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0lHREVGQVVMVEAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0lHTUFTSyA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNJR01BU0tACitHTlVMSUJfUE9TSVhfU1BBV05QID0gQEdOVUxJQl9QT1NJWF9TUEFXTlBACitHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERENMT1NFID0gQEdOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQUREQ0xPU0VACitHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDIgPSBAR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BREREVVAyQAorR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERPUEVOID0gQEdOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURET1BFTkAKK0dOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfREVTVFJPWSA9IEBHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0RFU1RST1lACitHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0lOSVQgPSBAR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19JTklUQAorR05VTElCX1BPV0YgPSBAR05VTElCX1BPV0ZACitHTlVMSUJfUFJFQUQgPSBAR05VTElCX1BSRUFEQAorR05VTElCX1BSSU5URiA9IEBHTlVMSUJfUFJJTlRGQAorR05VTElCX1BSSU5URl9QT1NJWCA9IEBHTlVMSUJfUFJJTlRGX1BPU0lYQAorR05VTElCX1BUSFJFQURfU0lHTUFTSyA9IEBHTlVMSUJfUFRIUkVBRF9TSUdNQVNLQAorR05VTElCX1BUU05BTUUgPSBAR05VTElCX1BUU05BTUVACitHTlVMSUJfUFRTTkFNRV9SID0gQEdOVUxJQl9QVFNOQU1FX1JACitHTlVMSUJfUFVUQyA9IEBHTlVMSUJfUFVUQ0AKK0dOVUxJQl9QVVRDSEFSID0gQEdOVUxJQl9QVVRDSEFSQAorR05VTElCX1BVVEVOViA9IEBHTlVMSUJfUFVURU5WQAorR05VTElCX1BVVFMgPSBAR05VTElCX1BVVFNACitHTlVMSUJfUFdSSVRFID0gQEdOVUxJQl9QV1JJVEVACitHTlVMSUJfUkFJU0UgPSBAR05VTElCX1JBSVNFQAorR05VTElCX1JBTkRPTSA9IEBHTlVMSUJfUkFORE9NQAorR05VTElCX1JBTkRPTV9SID0gQEdOVUxJQl9SQU5ET01fUkAKK0dOVUxJQl9SQVdNRU1DSFIgPSBAR05VTElCX1JBV01FTUNIUkAKK0dOVUxJQl9SRUFEID0gQEdOVUxJQl9SRUFEQAorR05VTElCX1JFQURMSU5LID0gQEdOVUxJQl9SRUFETElOS0AKK0dOVUxJQl9SRUFETElOS0FUID0gQEdOVUxJQl9SRUFETElOS0FUQAorR05VTElCX1JFQUxMT0NfUE9TSVggPSBAR05VTElCX1JFQUxMT0NfUE9TSVhACitHTlVMSUJfUkVBTFBBVEggPSBAR05VTElCX1JFQUxQQVRIQAorR05VTElCX1JFTUFJTkRFUiA9IEBHTlVMSUJfUkVNQUlOREVSQAorR05VTElCX1JFTUFJTkRFUkYgPSBAR05VTElCX1JFTUFJTkRFUkZACitHTlVMSUJfUkVNQUlOREVSTCA9IEBHTlVMSUJfUkVNQUlOREVSTEAKK0dOVUxJQl9SRU1PVkUgPSBAR05VTElCX1JFTU9WRUAKK0dOVUxJQl9SRU5BTUUgPSBAR05VTElCX1JFTkFNRUAKK0dOVUxJQl9SRU5BTUVBVCA9IEBHTlVMSUJfUkVOQU1FQVRACitHTlVMSUJfUklOVCA9IEBHTlVMSUJfUklOVEAKK0dOVUxJQl9SSU5URiA9IEBHTlVMSUJfUklOVEZACitHTlVMSUJfUklOVEwgPSBAR05VTElCX1JJTlRMQAorR05VTElCX1JNRElSID0gQEdOVUxJQl9STURJUkAKK0dOVUxJQl9ST1VORCA9IEBHTlVMSUJfUk9VTkRACitHTlVMSUJfUk9VTkRGID0gQEdOVUxJQl9ST1VOREZACitHTlVMSUJfUk9VTkRMID0gQEdOVUxJQl9ST1VORExACitHTlVMSUJfUlBNQVRDSCA9IEBHTlVMSUJfUlBNQVRDSEAKK0dOVUxJQl9TQ0FORiA9IEBHTlVMSUJfU0NBTkZACitHTlVMSUJfU0VURU5WID0gQEdOVUxJQl9TRVRFTlZACitHTlVMSUJfU0VUSE9TVE5BTUUgPSBAR05VTElCX1NFVEhPU1ROQU1FQAorR05VTElCX1NJR0FDVElPTiA9IEBHTlVMSUJfU0lHQUNUSU9OQAorR05VTElCX1NJR05BTF9IX1NJR1BJUEUgPSBAR05VTElCX1NJR05BTF9IX1NJR1BJUEVACitHTlVMSUJfU0lHTkJJVCA9IEBHTlVMSUJfU0lHTkJJVEAKK0dOVUxJQl9TSUdQUk9DTUFTSyA9IEBHTlVMSUJfU0lHUFJPQ01BU0tACitHTlVMSUJfU0lORiA9IEBHTlVMSUJfU0lORkAKK0dOVUxJQl9TSU5IRiA9IEBHTlVMSUJfU0lOSEZACitHTlVMSUJfU0lOTCA9IEBHTlVMSUJfU0lOTEAKK0dOVUxJQl9TTEVFUCA9IEBHTlVMSUJfU0xFRVBACitHTlVMSUJfU05QUklOVEYgPSBAR05VTElCX1NOUFJJTlRGQAorR05VTElCX1NQUklOVEZfUE9TSVggPSBAR05VTElCX1NQUklOVEZfUE9TSVhACitHTlVMSUJfU1FSVEYgPSBAR05VTElCX1NRUlRGQAorR05VTElCX1NRUlRMID0gQEdOVUxJQl9TUVJUTEAKK0dOVUxJQl9TVEFUID0gQEdOVUxJQl9TVEFUQAorR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkcgPSBAR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkdACitHTlVMSUJfU1RESU9fSF9TSUdQSVBFID0gQEdOVUxJQl9TVERJT19IX1NJR1BJUEVACitHTlVMSUJfU1RQQ1BZID0gQEdOVUxJQl9TVFBDUFlACitHTlVMSUJfU1RQTkNQWSA9IEBHTlVMSUJfU1RQTkNQWUAKK0dOVUxJQl9TVFJDQVNFU1RSID0gQEdOVUxJQl9TVFJDQVNFU1RSQAorR05VTElCX1NUUkNIUk5VTCA9IEBHTlVMSUJfU1RSQ0hSTlVMQAorR05VTElCX1NUUkRVUCA9IEBHTlVMSUJfU1RSRFVQQAorR05VTElCX1NUUkVSUk9SID0gQEdOVUxJQl9TVFJFUlJPUkAKK0dOVUxJQl9TVFJFUlJPUl9SID0gQEdOVUxJQl9TVFJFUlJPUl9SQAorR05VTElCX1NUUk5DQVQgPSBAR05VTElCX1NUUk5DQVRACitHTlVMSUJfU1RSTkRVUCA9IEBHTlVMSUJfU1RSTkRVUEAKK0dOVUxJQl9TVFJOTEVOID0gQEdOVUxJQl9TVFJOTEVOQAorR05VTElCX1NUUlBCUksgPSBAR05VTElCX1NUUlBCUktACitHTlVMSUJfU1RSUFRJTUUgPSBAR05VTElCX1NUUlBUSU1FQAorR05VTElCX1NUUlNFUCA9IEBHTlVMSUJfU1RSU0VQQAorR05VTElCX1NUUlNJR05BTCA9IEBHTlVMSUJfU1RSU0lHTkFMQAorR05VTElCX1NUUlNUUiA9IEBHTlVMSUJfU1RSU1RSQAorR05VTElCX1NUUlRPRCA9IEBHTlVMSUJfU1RSVE9EQAorR05VTElCX1NUUlRPSU1BWCA9IEBHTlVMSUJfU1RSVE9JTUFYQAorR05VTElCX1NUUlRPS19SID0gQEdOVUxJQl9TVFJUT0tfUkAKK0dOVUxJQl9TVFJUT0xMID0gQEdOVUxJQl9TVFJUT0xMQAorR05VTElCX1NUUlRPVUxMID0gQEdOVUxJQl9TVFJUT1VMTEAKK0dOVUxJQl9TVFJUT1VNQVggPSBAR05VTElCX1NUUlRPVU1BWEAKK0dOVUxJQl9TVFJWRVJTQ01QID0gQEdOVUxJQl9TVFJWRVJTQ01QQAorR05VTElCX1NZTUxJTksgPSBAR05VTElCX1NZTUxJTktACitHTlVMSUJfU1lNTElOS0FUID0gQEdOVUxJQl9TWU1MSU5LQVRACitHTlVMSUJfU1lTVEVNX1BPU0lYID0gQEdOVUxJQl9TWVNURU1fUE9TSVhACitHTlVMSUJfVEFORiA9IEBHTlVMSUJfVEFORkAKK0dOVUxJQl9UQU5IRiA9IEBHTlVMSUJfVEFOSEZACitHTlVMSUJfVEFOTCA9IEBHTlVMSUJfVEFOTEAKK0dOVUxJQl9USU1FR00gPSBAR05VTElCX1RJTUVHTUAKK0dOVUxJQl9USU1FX1IgPSBAR05VTElCX1RJTUVfUkAKK0dOVUxJQl9UTVBGSUxFID0gQEdOVUxJQl9UTVBGSUxFQAorR05VTElCX1RPV0NUUkFOUyA9IEBHTlVMSUJfVE9XQ1RSQU5TQAorR05VTElCX1RSVU5DID0gQEdOVUxJQl9UUlVOQ0AKK0dOVUxJQl9UUlVOQ0YgPSBAR05VTElCX1RSVU5DRkAKK0dOVUxJQl9UUlVOQ0wgPSBAR05VTElCX1RSVU5DTEAKK0dOVUxJQl9UVFlOQU1FX1IgPSBAR05VTElCX1RUWU5BTUVfUkAKK0dOVUxJQl9VTklTVERfSF9OT05CTE9DS0lORyA9IEBHTlVMSUJfVU5JU1REX0hfTk9OQkxPQ0tJTkdACitHTlVMSUJfVU5JU1REX0hfU0lHUElQRSA9IEBHTlVMSUJfVU5JU1REX0hfU0lHUElQRUAKK0dOVUxJQl9VTkxJTksgPSBAR05VTElCX1VOTElOS0AKK0dOVUxJQl9VTkxJTktBVCA9IEBHTlVMSUJfVU5MSU5LQVRACitHTlVMSUJfVU5MT0NLUFQgPSBAR05VTElCX1VOTE9DS1BUQAorR05VTElCX1VOU0VURU5WID0gQEdOVUxJQl9VTlNFVEVOVkAKK0dOVUxJQl9VU0xFRVAgPSBAR05VTElCX1VTTEVFUEAKK0dOVUxJQl9VVElNRU5TQVQgPSBAR05VTElCX1VUSU1FTlNBVEAKK0dOVUxJQl9WQVNQUklOVEYgPSBAR05VTElCX1ZBU1BSSU5URkAKK0dOVUxJQl9WRFBSSU5URiA9IEBHTlVMSUJfVkRQUklOVEZACitHTlVMSUJfVkZQUklOVEYgPSBAR05VTElCX1ZGUFJJTlRGQAorR05VTElCX1ZGUFJJTlRGX1BPU0lYID0gQEdOVUxJQl9WRlBSSU5URl9QT1NJWEAKK0dOVUxJQl9WRlNDQU5GID0gQEdOVUxJQl9WRlNDQU5GQAorR05VTElCX1ZQUklOVEYgPSBAR05VTElCX1ZQUklOVEZACitHTlVMSUJfVlBSSU5URl9QT1NJWCA9IEBHTlVMSUJfVlBSSU5URl9QT1NJWEAKK0dOVUxJQl9WU0NBTkYgPSBAR05VTElCX1ZTQ0FORkAKK0dOVUxJQl9WU05QUklOVEYgPSBAR05VTElCX1ZTTlBSSU5URkAKK0dOVUxJQl9WU1BSSU5URl9QT1NJWCA9IEBHTlVMSUJfVlNQUklOVEZfUE9TSVhACitHTlVMSUJfV0FJVFBJRCA9IEBHTlVMSUJfV0FJVFBJREAKK0dOVUxJQl9XQ1BDUFkgPSBAR05VTElCX1dDUENQWUAKK0dOVUxJQl9XQ1BOQ1BZID0gQEdOVUxJQl9XQ1BOQ1BZQAorR05VTElCX1dDUlRPTUIgPSBAR05VTElCX1dDUlRPTUJACitHTlVMSUJfV0NTQ0FTRUNNUCA9IEBHTlVMSUJfV0NTQ0FTRUNNUEAKK0dOVUxJQl9XQ1NDQVQgPSBAR05VTElCX1dDU0NBVEAKK0dOVUxJQl9XQ1NDSFIgPSBAR05VTElCX1dDU0NIUkAKK0dOVUxJQl9XQ1NDTVAgPSBAR05VTElCX1dDU0NNUEAKK0dOVUxJQl9XQ1NDT0xMID0gQEdOVUxJQl9XQ1NDT0xMQAorR05VTElCX1dDU0NQWSA9IEBHTlVMSUJfV0NTQ1BZQAorR05VTElCX1dDU0NTUE4gPSBAR05VTElCX1dDU0NTUE5ACitHTlVMSUJfV0NTRFVQID0gQEdOVUxJQl9XQ1NEVVBACitHTlVMSUJfV0NTTEVOID0gQEdOVUxJQl9XQ1NMRU5ACitHTlVMSUJfV0NTTkNBU0VDTVAgPSBAR05VTElCX1dDU05DQVNFQ01QQAorR05VTElCX1dDU05DQVQgPSBAR05VTElCX1dDU05DQVRACitHTlVMSUJfV0NTTkNNUCA9IEBHTlVMSUJfV0NTTkNNUEAKK0dOVUxJQl9XQ1NOQ1BZID0gQEdOVUxJQl9XQ1NOQ1BZQAorR05VTElCX1dDU05MRU4gPSBAR05VTElCX1dDU05MRU5ACitHTlVMSUJfV0NTTlJUT01CUyA9IEBHTlVMSUJfV0NTTlJUT01CU0AKK0dOVUxJQl9XQ1NQQlJLID0gQEdOVUxJQl9XQ1NQQlJLQAorR05VTElCX1dDU1JDSFIgPSBAR05VTElCX1dDU1JDSFJACitHTlVMSUJfV0NTUlRPTUJTID0gQEdOVUxJQl9XQ1NSVE9NQlNACitHTlVMSUJfV0NTU1BOID0gQEdOVUxJQl9XQ1NTUE5ACitHTlVMSUJfV0NTU1RSID0gQEdOVUxJQl9XQ1NTVFJACitHTlVMSUJfV0NTVE9LID0gQEdOVUxJQl9XQ1NUT0tACitHTlVMSUJfV0NTV0lEVEggPSBAR05VTElCX1dDU1dJRFRIQAorR05VTElCX1dDU1hGUk0gPSBAR05VTElCX1dDU1hGUk1ACitHTlVMSUJfV0NUT0IgPSBAR05VTElCX1dDVE9CQAorR05VTElCX1dDVE9NQiA9IEBHTlVMSUJfV0NUT01CQAorR05VTElCX1dDVFJBTlMgPSBAR05VTElCX1dDVFJBTlNACitHTlVMSUJfV0NUWVBFID0gQEdOVUxJQl9XQ1RZUEVACitHTlVMSUJfV0NXSURUSCA9IEBHTlVMSUJfV0NXSURUSEAKK0dOVUxJQl9XTUVNQ0hSID0gQEdOVUxJQl9XTUVNQ0hSQAorR05VTElCX1dNRU1DTVAgPSBAR05VTElCX1dNRU1DTVBACitHTlVMSUJfV01FTUNQWSA9IEBHTlVMSUJfV01FTUNQWUAKK0dOVUxJQl9XTUVNTU9WRSA9IEBHTlVMSUJfV01FTU1PVkVACitHTlVMSUJfV01FTVNFVCA9IEBHTlVMSUJfV01FTVNFVEAKK0dOVUxJQl9XUklURSA9IEBHTlVMSUJfV1JJVEVACitHTlVMSUJfX0VYSVQgPSBAR05VTElCX19FWElUQAorR1JFUCA9IEBHUkVQQAorSEFWRV9BQ09TRiA9IEBIQVZFX0FDT1NGQAorSEFWRV9BQ09TTCA9IEBIQVZFX0FDT1NMQAorSEFWRV9BU0lORiA9IEBIQVZFX0FTSU5GQAorSEFWRV9BU0lOTCA9IEBIQVZFX0FTSU5MQAorSEFWRV9BVEFOMkYgPSBASEFWRV9BVEFOMkZACitIQVZFX0FUQU5GID0gQEhBVkVfQVRBTkZACitIQVZFX0FUQU5MID0gQEhBVkVfQVRBTkxACitIQVZFX0FUT0xMID0gQEhBVkVfQVRPTExACitIQVZFX0JUT1dDID0gQEhBVkVfQlRPV0NACitIQVZFX0NBTk9OSUNBTElaRV9GSUxFX05BTUUgPSBASEFWRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FQAorSEFWRV9DQlJUID0gQEhBVkVfQ0JSVEAKK0hBVkVfQ0JSVEYgPSBASEFWRV9DQlJURkAKK0hBVkVfQ0JSVEwgPSBASEFWRV9DQlJUTEAKK0hBVkVfQ0hPV04gPSBASEFWRV9DSE9XTkAKK0hBVkVfQ09QWVNJR04gPSBASEFWRV9DT1BZU0lHTkAKK0hBVkVfQ09QWVNJR05MID0gQEhBVkVfQ09QWVNJR05MQAorSEFWRV9DT1NGID0gQEhBVkVfQ09TRkAKK0hBVkVfQ09TSEYgPSBASEFWRV9DT1NIRkAKK0hBVkVfQ09TTCA9IEBIQVZFX0NPU0xACitIQVZFX0RFQ0xfQUNPU0wgPSBASEFWRV9ERUNMX0FDT1NMQAorSEFWRV9ERUNMX0FTSU5MID0gQEhBVkVfREVDTF9BU0lOTEAKK0hBVkVfREVDTF9BVEFOTCA9IEBIQVZFX0RFQ0xfQVRBTkxACitIQVZFX0RFQ0xfQ0JSVEYgPSBASEFWRV9ERUNMX0NCUlRGQAorSEFWRV9ERUNMX0NCUlRMID0gQEhBVkVfREVDTF9DQlJUTEAKK0hBVkVfREVDTF9DRUlMRiA9IEBIQVZFX0RFQ0xfQ0VJTEZACitIQVZFX0RFQ0xfQ0VJTEwgPSBASEFWRV9ERUNMX0NFSUxMQAorSEFWRV9ERUNMX0NPUFlTSUdORiA9IEBIQVZFX0RFQ0xfQ09QWVNJR05GQAorSEFWRV9ERUNMX0NPU0wgPSBASEFWRV9ERUNMX0NPU0xACitIQVZFX0RFQ0xfRU5WSVJPTiA9IEBIQVZFX0RFQ0xfRU5WSVJPTkAKK0hBVkVfREVDTF9FWFAyID0gQEhBVkVfREVDTF9FWFAyQAorSEFWRV9ERUNMX0VYUDJGID0gQEhBVkVfREVDTF9FWFAyRkAKK0hBVkVfREVDTF9FWFAyTCA9IEBIQVZFX0RFQ0xfRVhQMkxACitIQVZFX0RFQ0xfRVhQTCA9IEBIQVZFX0RFQ0xfRVhQTEAKK0hBVkVfREVDTF9FWFBNMUwgPSBASEFWRV9ERUNMX0VYUE0xTEAKK0hBVkVfREVDTF9GQ0hESVIgPSBASEFWRV9ERUNMX0ZDSERJUkAKK0hBVkVfREVDTF9GREFUQVNZTkMgPSBASEFWRV9ERUNMX0ZEQVRBU1lOQ0AKK0hBVkVfREVDTF9GTE9PUkYgPSBASEFWRV9ERUNMX0ZMT09SRkAKK0hBVkVfREVDTF9GTE9PUkwgPSBASEFWRV9ERUNMX0ZMT09STEAKK0hBVkVfREVDTF9GUFVSR0UgPSBASEFWRV9ERUNMX0ZQVVJHRUAKK0hBVkVfREVDTF9GUkVYUEwgPSBASEFWRV9ERUNMX0ZSRVhQTEAKK0hBVkVfREVDTF9GU0VFS08gPSBASEFWRV9ERUNMX0ZTRUVLT0AKK0hBVkVfREVDTF9GVEVMTE8gPSBASEFWRV9ERUNMX0ZURUxMT0AKK0hBVkVfREVDTF9HRVRERUxJTSA9IEBIQVZFX0RFQ0xfR0VUREVMSU1ACitIQVZFX0RFQ0xfR0VURE9NQUlOTkFNRSA9IEBIQVZFX0RFQ0xfR0VURE9NQUlOTkFNRUAKK0hBVkVfREVDTF9HRVRMSU5FID0gQEhBVkVfREVDTF9HRVRMSU5FQAorSEFWRV9ERUNMX0dFVExPQURBVkcgPSBASEFWRV9ERUNMX0dFVExPQURBVkdACitIQVZFX0RFQ0xfR0VUTE9HSU5fUiA9IEBIQVZFX0RFQ0xfR0VUTE9HSU5fUkAKK0hBVkVfREVDTF9HRVRQQUdFU0laRSA9IEBIQVZFX0RFQ0xfR0VUUEFHRVNJWkVACitIQVZFX0RFQ0xfR0VUVVNFUlNIRUxMID0gQEhBVkVfREVDTF9HRVRVU0VSU0hFTExACitIQVZFX0RFQ0xfSU1BWEFCUyA9IEBIQVZFX0RFQ0xfSU1BWEFCU0AKK0hBVkVfREVDTF9JTUFYRElWID0gQEhBVkVfREVDTF9JTUFYRElWQAorSEFWRV9ERUNMX0xERVhQTCA9IEBIQVZFX0RFQ0xfTERFWFBMQAorSEFWRV9ERUNMX0xPQ0FMVElNRV9SID0gQEhBVkVfREVDTF9MT0NBTFRJTUVfUkAKK0hBVkVfREVDTF9MT0cxMEwgPSBASEFWRV9ERUNMX0xPRzEwTEAKK0hBVkVfREVDTF9MT0cyID0gQEhBVkVfREVDTF9MT0cyQAorSEFWRV9ERUNMX0xPRzJGID0gQEhBVkVfREVDTF9MT0cyRkAKK0hBVkVfREVDTF9MT0cyTCA9IEBIQVZFX0RFQ0xfTE9HMkxACitIQVZFX0RFQ0xfTE9HQiA9IEBIQVZFX0RFQ0xfTE9HQkAKK0hBVkVfREVDTF9MT0dMID0gQEhBVkVfREVDTF9MT0dMQAorSEFWRV9ERUNMX01FTU1FTSA9IEBIQVZFX0RFQ0xfTUVNTUVNQAorSEFWRV9ERUNMX01FTVJDSFIgPSBASEFWRV9ERUNMX01FTVJDSFJACitIQVZFX0RFQ0xfT0JTVEFDS19QUklOVEYgPSBASEFWRV9ERUNMX09CU1RBQ0tfUFJJTlRGQAorSEFWRV9ERUNMX1JFTUFJTkRFUiA9IEBIQVZFX0RFQ0xfUkVNQUlOREVSQAorSEFWRV9ERUNMX1JFTUFJTkRFUkwgPSBASEFWRV9ERUNMX1JFTUFJTkRFUkxACitIQVZFX0RFQ0xfUklOVEYgPSBASEFWRV9ERUNMX1JJTlRGQAorSEFWRV9ERUNMX1JPVU5EID0gQEhBVkVfREVDTF9ST1VOREAKK0hBVkVfREVDTF9ST1VOREYgPSBASEFWRV9ERUNMX1JPVU5ERkAKK0hBVkVfREVDTF9ST1VOREwgPSBASEFWRV9ERUNMX1JPVU5ETEAKK0hBVkVfREVDTF9TRVRFTlYgPSBASEFWRV9ERUNMX1NFVEVOVkAKK0hBVkVfREVDTF9TRVRIT1NUTkFNRSA9IEBIQVZFX0RFQ0xfU0VUSE9TVE5BTUVACitIQVZFX0RFQ0xfU0lOTCA9IEBIQVZFX0RFQ0xfU0lOTEAKK0hBVkVfREVDTF9TTlBSSU5URiA9IEBIQVZFX0RFQ0xfU05QUklOVEZACitIQVZFX0RFQ0xfU1FSVEwgPSBASEFWRV9ERUNMX1NRUlRMQAorSEFWRV9ERUNMX1NUUkRVUCA9IEBIQVZFX0RFQ0xfU1RSRFVQQAorSEFWRV9ERUNMX1NUUkVSUk9SX1IgPSBASEFWRV9ERUNMX1NUUkVSUk9SX1JACitIQVZFX0RFQ0xfU1RSTkRVUCA9IEBIQVZFX0RFQ0xfU1RSTkRVUEAKK0hBVkVfREVDTF9TVFJOTEVOID0gQEhBVkVfREVDTF9TVFJOTEVOQAorSEFWRV9ERUNMX1NUUlNJR05BTCA9IEBIQVZFX0RFQ0xfU1RSU0lHTkFMQAorSEFWRV9ERUNMX1NUUlRPSU1BWCA9IEBIQVZFX0RFQ0xfU1RSVE9JTUFYQAorSEFWRV9ERUNMX1NUUlRPS19SID0gQEhBVkVfREVDTF9TVFJUT0tfUkAKK0hBVkVfREVDTF9TVFJUT1VNQVggPSBASEFWRV9ERUNMX1NUUlRPVU1BWEAKK0hBVkVfREVDTF9UQU5MID0gQEhBVkVfREVDTF9UQU5MQAorSEFWRV9ERUNMX1RSVU5DID0gQEhBVkVfREVDTF9UUlVOQ0AKK0hBVkVfREVDTF9UUlVOQ0YgPSBASEFWRV9ERUNMX1RSVU5DRkAKK0hBVkVfREVDTF9UUlVOQ0wgPSBASEFWRV9ERUNMX1RSVU5DTEAKK0hBVkVfREVDTF9UVFlOQU1FX1IgPSBASEFWRV9ERUNMX1RUWU5BTUVfUkAKK0hBVkVfREVDTF9VTlNFVEVOViA9IEBIQVZFX0RFQ0xfVU5TRVRFTlZACitIQVZFX0RFQ0xfVlNOUFJJTlRGID0gQEhBVkVfREVDTF9WU05QUklOVEZACitIQVZFX0RFQ0xfV0NUT0IgPSBASEFWRV9ERUNMX1dDVE9CQAorSEFWRV9ERUNMX1dDV0lEVEggPSBASEFWRV9ERUNMX1dDV0lEVEhACitIQVZFX0RQUklOVEYgPSBASEFWRV9EUFJJTlRGQAorSEFWRV9EVVAyID0gQEhBVkVfRFVQMkAKK0hBVkVfRFVQMyA9IEBIQVZFX0RVUDNACitIQVZFX0VVSURBQ0NFU1MgPSBASEFWRV9FVUlEQUNDRVNTQAorSEFWRV9FWFBGID0gQEhBVkVfRVhQRkAKK0hBVkVfRVhQTCA9IEBIQVZFX0VYUExACitIQVZFX0VYUE0xID0gQEhBVkVfRVhQTTFACitIQVZFX0VYUE0xRiA9IEBIQVZFX0VYUE0xRkAKK0hBVkVfRkFCU0YgPSBASEFWRV9GQUJTRkAKK0hBVkVfRkFCU0wgPSBASEFWRV9GQUJTTEAKK0hBVkVfRkFDQ0VTU0FUID0gQEhBVkVfRkFDQ0VTU0FUQAorSEFWRV9GQ0hESVIgPSBASEFWRV9GQ0hESVJACitIQVZFX0ZDSE1PREFUID0gQEhBVkVfRkNITU9EQVRACitIQVZFX0ZDSE9XTkFUID0gQEhBVkVfRkNIT1dOQVRACitIQVZFX0ZDTlRMID0gQEhBVkVfRkNOVExACitIQVZFX0ZEQVRBU1lOQyA9IEBIQVZFX0ZEQVRBU1lOQ0AKK0hBVkVfRkVBVFVSRVNfSCA9IEBIQVZFX0ZFQVRVUkVTX0hACitIQVZFX0ZGU0wgPSBASEFWRV9GRlNMQAorSEFWRV9GRlNMTCA9IEBIQVZFX0ZGU0xMQAorSEFWRV9GTUEgPSBASEFWRV9GTUFACitIQVZFX0ZNQUYgPSBASEFWRV9GTUFGQAorSEFWRV9GTUFMID0gQEhBVkVfRk1BTEAKK0hBVkVfRk1PREYgPSBASEFWRV9GTU9ERkAKK0hBVkVfRk1PREwgPSBASEFWRV9GTU9ETEAKK0hBVkVfRlJFWFBGID0gQEhBVkVfRlJFWFBGQAorSEFWRV9GU0VFS08gPSBASEFWRV9GU0VFS09ACitIQVZFX0ZTVEFUQVQgPSBASEFWRV9GU1RBVEFUQAorSEFWRV9GU1lOQyA9IEBIQVZFX0ZTWU5DQAorSEFWRV9GVEVMTE8gPSBASEFWRV9GVEVMTE9ACitIQVZFX0ZUUlVOQ0FURSA9IEBIQVZFX0ZUUlVOQ0FURUAKK0hBVkVfRlVUSU1FTlMgPSBASEFWRV9GVVRJTUVOU0AKK0hBVkVfR0NKX0MgPSBASEFWRV9HQ0pfQ0AKK0hBVkVfR0NKX0lOX1BBVEggPSBASEFWRV9HQ0pfSU5fUEFUSEAKK0hBVkVfR0VURFRBQkxFU0laRSA9IEBIQVZFX0dFVERUQUJMRVNJWkVACitIQVZFX0dFVEdST1VQUyA9IEBIQVZFX0dFVEdST1VQU0AKK0hBVkVfR0VUSE9TVE5BTUUgPSBASEFWRV9HRVRIT1NUTkFNRUAKK0hBVkVfR0VUTE9HSU4gPSBASEFWRV9HRVRMT0dJTkAKK0hBVkVfR0VUT1BUX0ggPSBASEFWRV9HRVRPUFRfSEAKK0hBVkVfR0VUUEFHRVNJWkUgPSBASEFWRV9HRVRQQUdFU0laRUAKK0hBVkVfR0VUU1VCT1BUID0gQEhBVkVfR0VUU1VCT1BUQAorSEFWRV9HSUogPSBASEFWRV9HSUpACitIQVZFX0dJSl9JTl9QQVRIID0gQEhBVkVfR0lKX0lOX1BBVEhACitIQVZFX0dSQU5UUFQgPSBASEFWRV9HUkFOVFBUQAorSEFWRV9HUk9VUF9NRU1CRVIgPSBASEFWRV9HUk9VUF9NRU1CRVJACitIQVZFX0hZUE9URiA9IEBIQVZFX0hZUE9URkAKK0hBVkVfSFlQT1RMID0gQEhBVkVfSFlQT1RMQAorSEFWRV9JTE9HQiA9IEBIQVZFX0lMT0dCQAorSEFWRV9JTE9HQkYgPSBASEFWRV9JTE9HQkZACitIQVZFX0lMT0dCTCA9IEBIQVZFX0lMT0dCTEAKK0hBVkVfSU5UVFlQRVNfSCA9IEBIQVZFX0lOVFRZUEVTX0hACitIQVZFX0lTTkFORCA9IEBIQVZFX0lTTkFOREAKK0hBVkVfSVNOQU5GID0gQEhBVkVfSVNOQU5GQAorSEFWRV9JU05BTkwgPSBASEFWRV9JU05BTkxACitIQVZFX0lTV0JMQU5LID0gQEhBVkVfSVNXQkxBTktACitIQVZFX0lTV0NOVFJMID0gQEhBVkVfSVNXQ05UUkxACitIQVZFX0pBVkEgPSBASEFWRV9KQVZBQAorSEFWRV9KQVZBQyA9IEBIQVZFX0pBVkFDQAorSEFWRV9KQVZBQ19FTlZWQVIgPSBASEFWRV9KQVZBQ19FTlZWQVJACitIQVZFX0pBVkFDX0lOX1BBVEggPSBASEFWRV9KQVZBQ19JTl9QQVRIQAorSEFWRV9KQVZBX0VOVlZBUiA9IEBIQVZFX0pBVkFfRU5WVkFSQAorSEFWRV9KQVZBX0lOX1BBVEggPSBASEFWRV9KQVZBX0lOX1BBVEhACitIQVZFX0pJS0VTID0gQEhBVkVfSklLRVNACitIQVZFX0pJS0VTX0lOX1BBVEggPSBASEFWRV9KSUtFU19JTl9QQVRIQAorSEFWRV9KUkUgPSBASEFWRV9KUkVACitIQVZFX0pSRV9JTl9QQVRIID0gQEhBVkVfSlJFX0lOX1BBVEhACitIQVZFX0pWSUVXID0gQEhBVkVfSlZJRVdACitIQVZFX0pWSUVXX0lOX1BBVEggPSBASEFWRV9KVklFV19JTl9QQVRIQAorSEFWRV9MQ0hNT0QgPSBASEFWRV9MQ0hNT0RACitIQVZFX0xDSE9XTiA9IEBIQVZFX0xDSE9XTkAKK0hBVkVfTERFWFBGID0gQEhBVkVfTERFWFBGQAorSEFWRV9MSU5LID0gQEhBVkVfTElOS0AKK0hBVkVfTElOS0FUID0gQEhBVkVfTElOS0FUQAorSEFWRV9MT0cxMEYgPSBASEFWRV9MT0cxMEZACitIQVZFX0xPRzEwTCA9IEBIQVZFX0xPRzEwTEAKK0hBVkVfTE9HMVAgPSBASEFWRV9MT0cxUEAKK0hBVkVfTE9HMVBGID0gQEhBVkVfTE9HMVBGQAorSEFWRV9MT0cxUEwgPSBASEFWRV9MT0cxUExACitIQVZFX0xPR0JGID0gQEhBVkVfTE9HQkZACitIQVZFX0xPR0JMID0gQEhBVkVfTE9HQkxACitIQVZFX0xPR0YgPSBASEFWRV9MT0dGQAorSEFWRV9MT0dMID0gQEhBVkVfTE9HTEAKK0hBVkVfTE9OR19MT05HX0lOVCA9IEBIQVZFX0xPTkdfTE9OR19JTlRACitIQVZFX0xTVEFUID0gQEhBVkVfTFNUQVRACitIQVZFX01CUkxFTiA9IEBIQVZFX01CUkxFTkAKK0hBVkVfTUJSVE9XQyA9IEBIQVZFX01CUlRPV0NACitIQVZFX01CU0lOSVQgPSBASEFWRV9NQlNJTklUQAorSEFWRV9NQlNMRU4gPSBASEFWRV9NQlNMRU5ACitIQVZFX01CU05SVE9XQ1MgPSBASEFWRV9NQlNOUlRPV0NTQAorSEFWRV9NQlNSVE9XQ1MgPSBASEFWRV9NQlNSVE9XQ1NACitIQVZFX01FTUNIUiA9IEBIQVZFX01FTUNIUkAKK0hBVkVfTUVNUENQWSA9IEBIQVZFX01FTVBDUFlACitIQVZFX01LRElSQVQgPSBASEFWRV9NS0RJUkFUQAorSEFWRV9NS0RURU1QID0gQEhBVkVfTUtEVEVNUEAKK0hBVkVfTUtGSUZPID0gQEhBVkVfTUtGSUZPQAorSEFWRV9NS0ZJRk9BVCA9IEBIQVZFX01LRklGT0FUQAorSEFWRV9NS05PRCA9IEBIQVZFX01LTk9EQAorSEFWRV9NS05PREFUID0gQEhBVkVfTUtOT0RBVEAKK0hBVkVfTUtPU1RFTVAgPSBASEFWRV9NS09TVEVNUEAKK0hBVkVfTUtPU1RFTVBTID0gQEhBVkVfTUtPU1RFTVBTQAorSEFWRV9NS1NURU1QID0gQEhBVkVfTUtTVEVNUEAKK0hBVkVfTUtTVEVNUFMgPSBASEFWRV9NS1NURU1QU0AKK0hBVkVfTU9ERkYgPSBASEFWRV9NT0RGRkAKK0hBVkVfTU9ERkwgPSBASEFWRV9NT0RGTEAKK0hBVkVfTVNWQ19JTlZBTElEX1BBUkFNRVRFUl9IQU5ETEVSID0gQEhBVkVfTVNWQ19JTlZBTElEX1BBUkFNRVRFUl9IQU5ETEVSQAorSEFWRV9OQU5PU0xFRVAgPSBASEFWRV9OQU5PU0xFRVBACitIQVZFX09QRU5BVCA9IEBIQVZFX09QRU5BVEAKK0hBVkVfT1NfSCA9IEBIQVZFX09TX0hACitIQVZFX1BDTE9TRSA9IEBIQVZFX1BDTE9TRUAKK0hBVkVfUElQRSA9IEBIQVZFX1BJUEVACitIQVZFX1BJUEUyID0gQEhBVkVfUElQRTJACitIQVZFX1BPUEVOID0gQEhBVkVfUE9QRU5ACitIQVZFX1BPU0lYX09QRU5QVCA9IEBIQVZFX1BPU0lYX09QRU5QVEAKK0hBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkcgPSBASEFWRV9QT1NJWF9TSUdOQUxCTE9DS0lOR0AKK0hBVkVfUE9TSVhfU1BBV04gPSBASEFWRV9QT1NJWF9TUEFXTkAKK0hBVkVfUE9TSVhfU1BBV05BVFRSX1QgPSBASEFWRV9QT1NJWF9TUEFXTkFUVFJfVEAKK0hBVkVfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX1QgPSBASEFWRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfVEAKK0hBVkVfUE9XRiA9IEBIQVZFX1BPV0ZACitIQVZFX1BSRUFEID0gQEhBVkVfUFJFQURACitIQVZFX1BUSFJFQURfU0lHTUFTSyA9IEBIQVZFX1BUSFJFQURfU0lHTUFTS0AKK0hBVkVfUFRTTkFNRSA9IEBIQVZFX1BUU05BTUVACitIQVZFX1BUU05BTUVfUiA9IEBIQVZFX1BUU05BTUVfUkAKK0hBVkVfUFdSSVRFID0gQEhBVkVfUFdSSVRFQAorSEFWRV9SQUlTRSA9IEBIQVZFX1JBSVNFQAorSEFWRV9SQU5ET00gPSBASEFWRV9SQU5ET01ACitIQVZFX1JBTkRPTV9IID0gQEhBVkVfUkFORE9NX0hACitIQVZFX1JBTkRPTV9SID0gQEhBVkVfUkFORE9NX1JACitIQVZFX1JBV01FTUNIUiA9IEBIQVZFX1JBV01FTUNIUkAKK0hBVkVfUkVBRExJTksgPSBASEFWRV9SRUFETElOS0AKK0hBVkVfUkVBRExJTktBVCA9IEBIQVZFX1JFQURMSU5LQVRACitIQVZFX1JFQUxQQVRIID0gQEhBVkVfUkVBTFBBVEhACitIQVZFX1JFTUFJTkRFUiA9IEBIQVZFX1JFTUFJTkRFUkAKK0hBVkVfUkVNQUlOREVSRiA9IEBIQVZFX1JFTUFJTkRFUkZACitIQVZFX1JFTkFNRUFUID0gQEhBVkVfUkVOQU1FQVRACitIQVZFX1JJTlQgPSBASEFWRV9SSU5UQAorSEFWRV9SSU5UTCA9IEBIQVZFX1JJTlRMQAorSEFWRV9SUE1BVENIID0gQEhBVkVfUlBNQVRDSEAKK0hBVkVfU0FNRV9MT05HX0RPVUJMRV9BU19ET1VCTEUgPSBASEFWRV9TQU1FX0xPTkdfRE9VQkxFX0FTX0RPVUJMRUAKK0hBVkVfU0NIRURfSCA9IEBIQVZFX1NDSEVEX0hACitIQVZFX1NFVEVOViA9IEBIQVZFX1NFVEVOVkAKK0hBVkVfU0VUSE9TVE5BTUUgPSBASEFWRV9TRVRIT1NUTkFNRUAKK0hBVkVfU0lHQUNUSU9OID0gQEhBVkVfU0lHQUNUSU9OQAorSEFWRV9TSUdIQU5ETEVSX1QgPSBASEFWRV9TSUdIQU5ETEVSX1RACitIQVZFX1NJR0lORk9fVCA9IEBIQVZFX1NJR0lORk9fVEAKK0hBVkVfU0lHTkVEX1NJR19BVE9NSUNfVCA9IEBIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1RACitIQVZFX1NJR05FRF9XQ0hBUl9UID0gQEhBVkVfU0lHTkVEX1dDSEFSX1RACitIQVZFX1NJR05FRF9XSU5UX1QgPSBASEFWRV9TSUdORURfV0lOVF9UQAorSEFWRV9TSUdTRVRfVCA9IEBIQVZFX1NJR1NFVF9UQAorSEFWRV9TSU5GID0gQEhBVkVfU0lORkAKK0hBVkVfU0lOSEYgPSBASEFWRV9TSU5IRkAKK0hBVkVfU0lOTCA9IEBIQVZFX1NJTkxACitIQVZFX1NMRUVQID0gQEhBVkVfU0xFRVBACitIQVZFX1NQQVdOX0ggPSBASEFWRV9TUEFXTl9IQAorSEFWRV9TUVJURiA9IEBIQVZFX1NRUlRGQAorSEFWRV9TUVJUTCA9IEBIQVZFX1NRUlRMQAorSEFWRV9TVERJTlRfSCA9IEBIQVZFX1NURElOVF9IQAorSEFWRV9TVFBDUFkgPSBASEFWRV9TVFBDUFlACitIQVZFX1NUUE5DUFkgPSBASEFWRV9TVFBOQ1BZQAorSEFWRV9TVFJDQVNFU1RSID0gQEhBVkVfU1RSQ0FTRVNUUkAKK0hBVkVfU1RSQ0hSTlVMID0gQEhBVkVfU1RSQ0hSTlVMQAorSEFWRV9TVFJQQlJLID0gQEhBVkVfU1RSUEJSS0AKK0hBVkVfU1RSUFRJTUUgPSBASEFWRV9TVFJQVElNRUAKK0hBVkVfU1RSU0VQID0gQEhBVkVfU1RSU0VQQAorSEFWRV9TVFJUT0QgPSBASEFWRV9TVFJUT0RACitIQVZFX1NUUlRPTEwgPSBASEFWRV9TVFJUT0xMQAorSEFWRV9TVFJUT1VMTCA9IEBIQVZFX1NUUlRPVUxMQAorSEFWRV9TVFJVQ1RfUkFORE9NX0RBVEEgPSBASEFWRV9TVFJVQ1RfUkFORE9NX0RBVEFACitIQVZFX1NUUlVDVF9TQ0hFRF9QQVJBTSA9IEBIQVZFX1NUUlVDVF9TQ0hFRF9QQVJBTUAKK0hBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT04gPSBASEFWRV9TVFJVQ1RfU0lHQUNUSU9OX1NBX1NJR0FDVElPTkAKK0hBVkVfU1RSVkVSU0NNUCA9IEBIQVZFX1NUUlZFUlNDTVBACitIQVZFX1NZTUxJTksgPSBASEFWRV9TWU1MSU5LQAorSEFWRV9TWU1MSU5LQVQgPSBASEFWRV9TWU1MSU5LQVRACitIQVZFX1NZU19CSVRZUEVTX0ggPSBASEFWRV9TWVNfQklUWVBFU19IQAorSEFWRV9TWVNfSU5UVFlQRVNfSCA9IEBIQVZFX1NZU19JTlRUWVBFU19IQAorSEFWRV9TWVNfTE9BREFWR19IID0gQEhBVkVfU1lTX0xPQURBVkdfSEAKK0hBVkVfU1lTX1BBUkFNX0ggPSBASEFWRV9TWVNfUEFSQU1fSEAKK0hBVkVfU1lTX1RZUEVTX0ggPSBASEFWRV9TWVNfVFlQRVNfSEAKK0hBVkVfVEFORiA9IEBIQVZFX1RBTkZACitIQVZFX1RBTkhGID0gQEhBVkVfVEFOSEZACitIQVZFX1RBTkwgPSBASEFWRV9UQU5MQAorSEFWRV9USU1FR00gPSBASEFWRV9USU1FR01ACitIQVZFX1RZUEVfVk9MQVRJTEVfU0lHX0FUT01JQ19UID0gQEhBVkVfVFlQRV9WT0xBVElMRV9TSUdfQVRPTUlDX1RACitIQVZFX1VOSVNURF9IID0gQEhBVkVfVU5JU1REX0hACitIQVZFX1VOTElOS0FUID0gQEhBVkVfVU5MSU5LQVRACitIQVZFX1VOTE9DS1BUID0gQEhBVkVfVU5MT0NLUFRACitIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQgPSBASEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UQAorSEFWRV9VU0xFRVAgPSBASEFWRV9VU0xFRVBACitIQVZFX1VUSU1FTlNBVCA9IEBIQVZFX1VUSU1FTlNBVEAKK0hBVkVfVkFTUFJJTlRGID0gQEhBVkVfVkFTUFJJTlRGQAorSEFWRV9WRFBSSU5URiA9IEBIQVZFX1ZEUFJJTlRGQAorSEFWRV9XQ0hBUl9IID0gQEhBVkVfV0NIQVJfSEAKK0hBVkVfV0NIQVJfVCA9IEBIQVZFX1dDSEFSX1RACitIQVZFX1dDUENQWSA9IEBIQVZFX1dDUENQWUAKK0hBVkVfV0NQTkNQWSA9IEBIQVZFX1dDUE5DUFlACitIQVZFX1dDUlRPTUIgPSBASEFWRV9XQ1JUT01CQAorSEFWRV9XQ1NDQVNFQ01QID0gQEhBVkVfV0NTQ0FTRUNNUEAKK0hBVkVfV0NTQ0FUID0gQEhBVkVfV0NTQ0FUQAorSEFWRV9XQ1NDSFIgPSBASEFWRV9XQ1NDSFJACitIQVZFX1dDU0NNUCA9IEBIQVZFX1dDU0NNUEAKK0hBVkVfV0NTQ09MTCA9IEBIQVZFX1dDU0NPTExACitIQVZFX1dDU0NQWSA9IEBIQVZFX1dDU0NQWUAKK0hBVkVfV0NTQ1NQTiA9IEBIQVZFX1dDU0NTUE5ACitIQVZFX1dDU0RVUCA9IEBIQVZFX1dDU0RVUEAKK0hBVkVfV0NTTEVOID0gQEhBVkVfV0NTTEVOQAorSEFWRV9XQ1NOQ0FTRUNNUCA9IEBIQVZFX1dDU05DQVNFQ01QQAorSEFWRV9XQ1NOQ0FUID0gQEhBVkVfV0NTTkNBVEAKK0hBVkVfV0NTTkNNUCA9IEBIQVZFX1dDU05DTVBACitIQVZFX1dDU05DUFkgPSBASEFWRV9XQ1NOQ1BZQAorSEFWRV9XQ1NOTEVOID0gQEhBVkVfV0NTTkxFTkAKK0hBVkVfV0NTTlJUT01CUyA9IEBIQVZFX1dDU05SVE9NQlNACitIQVZFX1dDU1BCUksgPSBASEFWRV9XQ1NQQlJLQAorSEFWRV9XQ1NSQ0hSID0gQEhBVkVfV0NTUkNIUkAKK0hBVkVfV0NTUlRPTUJTID0gQEhBVkVfV0NTUlRPTUJTQAorSEFWRV9XQ1NTUE4gPSBASEFWRV9XQ1NTUE5ACitIQVZFX1dDU1NUUiA9IEBIQVZFX1dDU1NUUkAKK0hBVkVfV0NTVE9LID0gQEhBVkVfV0NTVE9LQAorSEFWRV9XQ1NXSURUSCA9IEBIQVZFX1dDU1dJRFRIQAorSEFWRV9XQ1NYRlJNID0gQEhBVkVfV0NTWEZSTUAKK0hBVkVfV0NUUkFOU19UID0gQEhBVkVfV0NUUkFOU19UQAorSEFWRV9XQ1RZUEVfSCA9IEBIQVZFX1dDVFlQRV9IQAorSEFWRV9XQ1RZUEVfVCA9IEBIQVZFX1dDVFlQRV9UQAorSEFWRV9XSU5TT0NLMl9IID0gQEhBVkVfV0lOU09DSzJfSEAKK0hBVkVfV0lOVF9UID0gQEhBVkVfV0lOVF9UQAorSEFWRV9XTUVNQ0hSID0gQEhBVkVfV01FTUNIUkAKK0hBVkVfV01FTUNNUCA9IEBIQVZFX1dNRU1DTVBACitIQVZFX1dNRU1DUFkgPSBASEFWRV9XTUVNQ1BZQAorSEFWRV9XTUVNTU9WRSA9IEBIQVZFX1dNRU1NT1ZFQAorSEFWRV9XTUVNU0VUID0gQEhBVkVfV01FTVNFVEAKIEhBVkVfX0JPT0wgPSBASEFWRV9fQk9PTEAKK0hBVkVfX0VYSVQgPSBASEFWRV9fRVhJVEAKK0hFTFAyTUFOID0gQEhFTFAyTUFOQAorSU5DTFVERV9ORVhUID0gQElOQ0xVREVfTkVYVEAKK0lOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkUgPSBASU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRUAKK0lOU1RBTEwgPSBASU5TVEFMTEAKIElOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACiBJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAogSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACiBJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UMzJfTUFYX0xUX0lOVE1BWF9NQVggPSBASU5UMzJfTUFYX0xUX0lOVE1BWF9NQVhACitJTlQ2NF9NQVhfRVFfTE9OR19NQVggPSBASU5UNjRfTUFYX0VRX0xPTkdfTUFYQAogSU5UTExJQlMgPSBASU5UTExJQlNACiBJTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACitJU05BTkRfTElCTSA9IEBJU05BTkRfTElCTUAKK0lTTkFORl9MSUJNID0gQElTTkFORl9MSUJNQAorSVNOQU5MX0xJQk0gPSBASVNOQU5MX0xJQk1ACitJU05BTl9MSUJNID0gQElTTkFOX0xJQk1ACitMREVYUExfTElCTSA9IEBMREVYUExfTElCTUAKK0xERVhQX0xJQk0gPSBATERFWFBfTElCTUAKIExERkxBR1MgPSBATERGTEFHU0AKIExFWCA9IEBMRVhACiBMRVhMSUIgPSBATEVYTElCQAorTEVYX0lTX0ZMRVggPSBATEVYX0lTX0ZMRVhACiBMRVhfT1VUUFVUX1JPT1QgPSBATEVYX09VVFBVVF9ST09UQAorTElCQklTT05fTElCREVQUyA9IEBMSUJCSVNPTl9MSUJERVBTQAorTElCQklTT05fTFRMSUJERVBTID0gQExJQkJJU09OX0xUTElCREVQU0AKIExJQklDT05WID0gQExJQklDT05WQAogTElCSU5UTCA9IEBMSUJJTlRMQAorTElCTVVMVElUSFJFQUQgPSBATElCTVVMVElUSFJFQURACiBMSUJPQkpTID0gQExJQk9CSlNACitMSUJQVEggPSBATElCUFRIQAorTElCUFRIX1BSRUZJWCA9IEBMSUJQVEhfUFJFRklYQAogTElCUyA9IEBMSUJTQAorTElCVEhSRUFEID0gQExJQlRIUkVBREAKK0xJQlVOSVNUUklOR19VTklUWVBFU19IID0gQExJQlVOSVNUUklOR19VTklUWVBFU19IQAorTElCVU5JU1RSSU5HX1VOSVdJRFRIX0ggPSBATElCVU5JU1RSSU5HX1VOSVdJRFRIX0hACitMT0NBTENIQVJTRVRfVEVTVFNfRU5WSVJPTk1FTlQgPSBATE9DQUxDSEFSU0VUX1RFU1RTX0VOVklST05NRU5UQAorTE9DQUxFX0ZSX1VURjggPSBATE9DQUxFX0ZSX1VURjhACitMT0NBTEVfSkEgPSBATE9DQUxFX0pBQAorTE9DQUxFX1pIX0NOID0gQExPQ0FMRV9aSF9DTkAKIExUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKIExUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk1VTFRJVEhSRUFEID0gQExUTElCTVVMVElUSFJFQURACiBMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTFRMSUJQVEggPSBATFRMSUJQVEhACitMVExJQlRIUkVBRCA9IEBMVExJQlRIUkVBREAKIE00ID0gQE00QAorTTRfREVCVUdGSUxFID0gQE00X0RFQlVHRklMRUAKK000X0dOVSA9IEBNNF9HTlVACiBNQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1LSU5TVEFMTERJUlMgPSBATUtJTlNUQUxMRElSU0AKK01LRElSX1AgPSBATUtESVJfUEAKIE1TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACiBNU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU8wQ0ZMQUdTID0gQE8wQ0ZMQUdTQAotTzBDWFhGTEFHUyA9IEBPMENYWEZMQUdTQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRVJSTk9fSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9FUlJOT19IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRkNOVExfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9GQ05UTF9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRkxPQVRfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9GTE9BVF9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfR0VUT1BUX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfR0VUT1BUX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9JTlRUWVBFU19IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX0lOVFRZUEVTX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9NQVRIX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfTUFUSF9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU0NIRURfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TQ0hFRF9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU0lHTkFMX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU0lHTkFMX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TUEFXTl9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NQQVdOX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERERUZfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERERUZfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURElOVF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURElOVF9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RESU9fSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERJT19IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RETElCX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RETElCX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVFJJTkdfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVFJJTkdfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19TVEFUX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1lTX1NUQVRfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19UWVBFU19IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19UWVBFU19IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1lTX1dBSVRfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfV0FJVF9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfVElNRV9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1RJTUVfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1VOSVNURF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1VOSVNURF9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfV0NIQVJfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9XQ0hBUl9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfV0NUWVBFX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfV0NUWVBFX0hACitORVhUX0VSUk5PX0ggPSBATkVYVF9FUlJOT19IQAorTkVYVF9GQ05UTF9IID0gQE5FWFRfRkNOVExfSEAKK05FWFRfRkxPQVRfSCA9IEBORVhUX0ZMT0FUX0hACitORVhUX0dFVE9QVF9IID0gQE5FWFRfR0VUT1BUX0hACitORVhUX0lOVFRZUEVTX0ggPSBATkVYVF9JTlRUWVBFU19IQAorTkVYVF9NQVRIX0ggPSBATkVYVF9NQVRIX0hACitORVhUX1NDSEVEX0ggPSBATkVYVF9TQ0hFRF9IQAorTkVYVF9TSUdOQUxfSCA9IEBORVhUX1NJR05BTF9IQAorTkVYVF9TUEFXTl9IID0gQE5FWFRfU1BBV05fSEAKK05FWFRfU1REREVGX0ggPSBATkVYVF9TVERERUZfSEAKK05FWFRfU1RESU5UX0ggPSBATkVYVF9TVERJTlRfSEAKK05FWFRfU1RESU9fSCA9IEBORVhUX1NURElPX0hACitORVhUX1NURExJQl9IID0gQE5FWFRfU1RETElCX0hACitORVhUX1NUUklOR19IID0gQE5FWFRfU1RSSU5HX0hACitORVhUX1NZU19TVEFUX0ggPSBATkVYVF9TWVNfU1RBVF9IQAorTkVYVF9TWVNfVFlQRVNfSCA9IEBORVhUX1NZU19UWVBFU19IQAorTkVYVF9TWVNfV0FJVF9IID0gQE5FWFRfU1lTX1dBSVRfSEAKK05FWFRfVElNRV9IID0gQE5FWFRfVElNRV9IQAorTkVYVF9VTklTVERfSCA9IEBORVhUX1VOSVNURF9IQAorTkVYVF9XQ0hBUl9IID0gQE5FWFRfV0NIQVJfSEAKK05FWFRfV0NUWVBFX0ggPSBATkVYVF9XQ1RZUEVfSEAKIE9CSkVYVCA9IEBPQkpFWFRACiBQQUNLQUdFID0gQFBBQ0tBR0VACiBQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfQ09QWVJJR0hUX1lFQVIgPSBAUEFDS0FHRV9DT1BZUklHSFRfWUVBUkAKIFBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACiBQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKIFBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKIFBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACiBQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkwgPSBAUEVSTEAKIFBPU1VCID0gQFBPU1VCQAorUFJBR01BX0NPTFVNTlMgPSBAUFJBR01BX0NPTFVNTlNACitQUkFHTUFfU1lTVEVNX0hFQURFUiA9IEBQUkFHTUFfU1lTVEVNX0hFQURFUkAKK1BSSVBUUl9QUkVGSVggPSBAUFJJUFRSX1BSRUZJWEAKK1BSSV9NQUNST1NfQlJPS0VOID0gQFBSSV9NQUNST1NfQlJPS0VOQAorUFRIUkVBRF9IX0RFRklORVNfU1RSVUNUX1RJTUVTUEVDID0gQFBUSFJFQURfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQ0AKK1BUUkRJRkZfVF9TVUZGSVggPSBAUFRSRElGRl9UX1NVRkZJWEAKIFJBTkxJQiA9IEBSQU5MSUJACitSRVBMQUNFX0JUT1dDID0gQFJFUExBQ0VfQlRPV0NACitSRVBMQUNFX0NBTExPQyA9IEBSRVBMQUNFX0NBTExPQ0AKK1JFUExBQ0VfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRSA9IEBSRVBMQUNFX0NBTk9OSUNBTElaRV9GSUxFX05BTUVACitSRVBMQUNFX0NCUlRGID0gQFJFUExBQ0VfQ0JSVEZACitSRVBMQUNFX0NCUlRMID0gQFJFUExBQ0VfQ0JSVExACitSRVBMQUNFX0NFSUwgPSBAUkVQTEFDRV9DRUlMQAorUkVQTEFDRV9DRUlMRiA9IEBSRVBMQUNFX0NFSUxGQAorUkVQTEFDRV9DRUlMTCA9IEBSRVBMQUNFX0NFSUxMQAorUkVQTEFDRV9DSE9XTiA9IEBSRVBMQUNFX0NIT1dOQAorUkVQTEFDRV9DTE9TRSA9IEBSRVBMQUNFX0NMT1NFQAorUkVQTEFDRV9EUFJJTlRGID0gQFJFUExBQ0VfRFBSSU5URkAKK1JFUExBQ0VfRFVQID0gQFJFUExBQ0VfRFVQQAorUkVQTEFDRV9EVVAyID0gQFJFUExBQ0VfRFVQMkAKK1JFUExBQ0VfRVhQMiA9IEBSRVBMQUNFX0VYUDJACitSRVBMQUNFX0VYUDJMID0gQFJFUExBQ0VfRVhQMkxACitSRVBMQUNFX0VYUE0xID0gQFJFUExBQ0VfRVhQTTFACitSRVBMQUNFX0VYUE0xRiA9IEBSRVBMQUNFX0VYUE0xRkAKK1JFUExBQ0VfRkFCU0wgPSBAUkVQTEFDRV9GQUJTTEAKK1JFUExBQ0VfRkNIT1dOQVQgPSBAUkVQTEFDRV9GQ0hPV05BVEAKK1JFUExBQ0VfRkNMT1NFID0gQFJFUExBQ0VfRkNMT1NFQAorUkVQTEFDRV9GQ05UTCA9IEBSRVBMQUNFX0ZDTlRMQAorUkVQTEFDRV9GRE9QRU4gPSBAUkVQTEFDRV9GRE9QRU5ACitSRVBMQUNFX0ZGTFVTSCA9IEBSRVBMQUNFX0ZGTFVTSEAKK1JFUExBQ0VfRkxPT1IgPSBAUkVQTEFDRV9GTE9PUkAKK1JFUExBQ0VfRkxPT1JGID0gQFJFUExBQ0VfRkxPT1JGQAorUkVQTEFDRV9GTE9PUkwgPSBAUkVQTEFDRV9GTE9PUkxACitSRVBMQUNFX0ZNQSA9IEBSRVBMQUNFX0ZNQUAKK1JFUExBQ0VfRk1BRiA9IEBSRVBMQUNFX0ZNQUZACitSRVBMQUNFX0ZNQUwgPSBAUkVQTEFDRV9GTUFMQAorUkVQTEFDRV9GTU9EID0gQFJFUExBQ0VfRk1PREAKK1JFUExBQ0VfRk1PREYgPSBAUkVQTEFDRV9GTU9ERkAKK1JFUExBQ0VfRk1PREwgPSBAUkVQTEFDRV9GTU9ETEAKK1JFUExBQ0VfRk9QRU4gPSBAUkVQTEFDRV9GT1BFTkAKK1JFUExBQ0VfRlBSSU5URiA9IEBSRVBMQUNFX0ZQUklOVEZACitSRVBMQUNFX0ZQVVJHRSA9IEBSRVBMQUNFX0ZQVVJHRUAKK1JFUExBQ0VfRlJFT1BFTiA9IEBSRVBMQUNFX0ZSRU9QRU5ACitSRVBMQUNFX0ZSRVhQID0gQFJFUExBQ0VfRlJFWFBACitSRVBMQUNFX0ZSRVhQRiA9IEBSRVBMQUNFX0ZSRVhQRkAKK1JFUExBQ0VfRlJFWFBMID0gQFJFUExBQ0VfRlJFWFBMQAorUkVQTEFDRV9GU0VFSyA9IEBSRVBMQUNFX0ZTRUVLQAorUkVQTEFDRV9GU0VFS08gPSBAUkVQTEFDRV9GU0VFS09ACitSRVBMQUNFX0ZTVEFUID0gQFJFUExBQ0VfRlNUQVRACitSRVBMQUNFX0ZTVEFUQVQgPSBAUkVQTEFDRV9GU1RBVEFUQAorUkVQTEFDRV9GVEVMTCA9IEBSRVBMQUNFX0ZURUxMQAorUkVQTEFDRV9GVEVMTE8gPSBAUkVQTEFDRV9GVEVMTE9ACitSRVBMQUNFX0ZUUlVOQ0FURSA9IEBSRVBMQUNFX0ZUUlVOQ0FURUAKK1JFUExBQ0VfRlVUSU1FTlMgPSBAUkVQTEFDRV9GVVRJTUVOU0AKK1JFUExBQ0VfR0VUQ1dEID0gQFJFUExBQ0VfR0VUQ1dEQAorUkVQTEFDRV9HRVRERUxJTSA9IEBSRVBMQUNFX0dFVERFTElNQAorUkVQTEFDRV9HRVRET01BSU5OQU1FID0gQFJFUExBQ0VfR0VURE9NQUlOTkFNRUAKK1JFUExBQ0VfR0VUR1JPVVBTID0gQFJFUExBQ0VfR0VUR1JPVVBTQAorUkVQTEFDRV9HRVRMSU5FID0gQFJFUExBQ0VfR0VUTElORUAKK1JFUExBQ0VfR0VUTE9HSU5fUiA9IEBSRVBMQUNFX0dFVExPR0lOX1JACitSRVBMQUNFX0dFVFBBR0VTSVpFID0gQFJFUExBQ0VfR0VUUEFHRVNJWkVACitSRVBMQUNFX0hVR0VfVkFMID0gQFJFUExBQ0VfSFVHRV9WQUxACitSRVBMQUNFX0hZUE9UID0gQFJFUExBQ0VfSFlQT1RACitSRVBMQUNFX0hZUE9URiA9IEBSRVBMQUNFX0hZUE9URkAKK1JFUExBQ0VfSFlQT1RMID0gQFJFUExBQ0VfSFlQT1RMQAorUkVQTEFDRV9JTE9HQiA9IEBSRVBMQUNFX0lMT0dCQAorUkVQTEFDRV9JTE9HQkYgPSBAUkVQTEFDRV9JTE9HQkZACitSRVBMQUNFX0lTQVRUWSA9IEBSRVBMQUNFX0lTQVRUWUAKK1JFUExBQ0VfSVNGSU5JVEUgPSBAUkVQTEFDRV9JU0ZJTklURUAKK1JFUExBQ0VfSVNJTkYgPSBAUkVQTEFDRV9JU0lORkAKK1JFUExBQ0VfSVNOQU4gPSBAUkVQTEFDRV9JU05BTkAKK1JFUExBQ0VfSVNXQkxBTksgPSBAUkVQTEFDRV9JU1dCTEFOS0AKK1JFUExBQ0VfSVNXQ05UUkwgPSBAUkVQTEFDRV9JU1dDTlRSTEAKK1JFUExBQ0VfSVRPTEQgPSBAUkVQTEFDRV9JVE9MREAKK1JFUExBQ0VfTENIT1dOID0gQFJFUExBQ0VfTENIT1dOQAorUkVQTEFDRV9MREVYUEwgPSBAUkVQTEFDRV9MREVYUExACitSRVBMQUNFX0xJTksgPSBAUkVQTEFDRV9MSU5LQAorUkVQTEFDRV9MSU5LQVQgPSBAUkVQTEFDRV9MSU5LQVRACitSRVBMQUNFX0xPQ0FMVElNRV9SID0gQFJFUExBQ0VfTE9DQUxUSU1FX1JACitSRVBMQUNFX0xPRyA9IEBSRVBMQUNFX0xPR0AKK1JFUExBQ0VfTE9HMTAgPSBAUkVQTEFDRV9MT0cxMEAKK1JFUExBQ0VfTE9HMTBGID0gQFJFUExBQ0VfTE9HMTBGQAorUkVQTEFDRV9MT0cxMEwgPSBAUkVQTEFDRV9MT0cxMExACitSRVBMQUNFX0xPRzFQID0gQFJFUExBQ0VfTE9HMVBACitSRVBMQUNFX0xPRzFQRiA9IEBSRVBMQUNFX0xPRzFQRkAKK1JFUExBQ0VfTE9HMVBMID0gQFJFUExBQ0VfTE9HMVBMQAorUkVQTEFDRV9MT0cyID0gQFJFUExBQ0VfTE9HMkAKK1JFUExBQ0VfTE9HMkYgPSBAUkVQTEFDRV9MT0cyRkAKK1JFUExBQ0VfTE9HMkwgPSBAUkVQTEFDRV9MT0cyTEAKK1JFUExBQ0VfTE9HQiA9IEBSRVBMQUNFX0xPR0JACitSRVBMQUNFX0xPR0JGID0gQFJFUExBQ0VfTE9HQkZACitSRVBMQUNFX0xPR0JMID0gQFJFUExBQ0VfTE9HQkxACitSRVBMQUNFX0xPR0YgPSBAUkVQTEFDRV9MT0dGQAorUkVQTEFDRV9MT0dMID0gQFJFUExBQ0VfTE9HTEAKK1JFUExBQ0VfTFNFRUsgPSBAUkVQTEFDRV9MU0VFS0AKK1JFUExBQ0VfTFNUQVQgPSBAUkVQTEFDRV9MU1RBVEAKK1JFUExBQ0VfTUFMTE9DID0gQFJFUExBQ0VfTUFMTE9DQAorUkVQTEFDRV9NQlJMRU4gPSBAUkVQTEFDRV9NQlJMRU5ACitSRVBMQUNFX01CUlRPV0MgPSBAUkVQTEFDRV9NQlJUT1dDQAorUkVQTEFDRV9NQlNJTklUID0gQFJFUExBQ0VfTUJTSU5JVEAKK1JFUExBQ0VfTUJTTlJUT1dDUyA9IEBSRVBMQUNFX01CU05SVE9XQ1NACitSRVBMQUNFX01CU1JUT1dDUyA9IEBSRVBMQUNFX01CU1JUT1dDU0AKK1JFUExBQ0VfTUJTVEFURV9UID0gQFJFUExBQ0VfTUJTVEFURV9UQAorUkVQTEFDRV9NQlRPV0MgPSBAUkVQTEFDRV9NQlRPV0NACitSRVBMQUNFX01FTUNIUiA9IEBSRVBMQUNFX01FTUNIUkAKK1JFUExBQ0VfTUVNTUVNID0gQFJFUExBQ0VfTUVNTUVNQAorUkVQTEFDRV9NS0RJUiA9IEBSRVBMQUNFX01LRElSQAorUkVQTEFDRV9NS0ZJRk8gPSBAUkVQTEFDRV9NS0ZJRk9ACitSRVBMQUNFX01LTk9EID0gQFJFUExBQ0VfTUtOT0RACitSRVBMQUNFX01LU1RFTVAgPSBAUkVQTEFDRV9NS1NURU1QQAorUkVQTEFDRV9NS1RJTUUgPSBAUkVQTEFDRV9NS1RJTUVACitSRVBMQUNFX01PREYgPSBAUkVQTEFDRV9NT0RGQAorUkVQTEFDRV9NT0RGRiA9IEBSRVBMQUNFX01PREZGQAorUkVQTEFDRV9NT0RGTCA9IEBSRVBMQUNFX01PREZMQAorUkVQTEFDRV9OQU4gPSBAUkVQTEFDRV9OQU5ACitSRVBMQUNFX05BTk9TTEVFUCA9IEBSRVBMQUNFX05BTk9TTEVFUEAKK1JFUExBQ0VfTlVMTCA9IEBSRVBMQUNFX05VTExACitSRVBMQUNFX09CU1RBQ0tfUFJJTlRGID0gQFJFUExBQ0VfT0JTVEFDS19QUklOVEZACitSRVBMQUNFX09QRU4gPSBAUkVQTEFDRV9PUEVOQAorUkVQTEFDRV9PUEVOQVQgPSBAUkVQTEFDRV9PUEVOQVRACitSRVBMQUNFX1BFUlJPUiA9IEBSRVBMQUNFX1BFUlJPUkAKK1JFUExBQ0VfUE9QRU4gPSBAUkVQTEFDRV9QT1BFTkAKK1JFUExBQ0VfUE9TSVhfU1BBV04gPSBAUkVQTEFDRV9QT1NJWF9TUEFXTkAKK1JFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERENMT1NFID0gQFJFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERENMT1NFQAorUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMiA9IEBSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BREREVVAyQAorUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURET1BFTiA9IEBSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERPUEVOQAorUkVQTEFDRV9QUkVBRCA9IEBSRVBMQUNFX1BSRUFEQAorUkVQTEFDRV9QUklOVEYgPSBAUkVQTEFDRV9QUklOVEZACitSRVBMQUNFX1BUSFJFQURfU0lHTUFTSyA9IEBSRVBMQUNFX1BUSFJFQURfU0lHTUFTS0AKK1JFUExBQ0VfUFRTTkFNRSA9IEBSRVBMQUNFX1BUU05BTUVACitSRVBMQUNFX1BUU05BTUVfUiA9IEBSRVBMQUNFX1BUU05BTUVfUkAKK1JFUExBQ0VfUFVURU5WID0gQFJFUExBQ0VfUFVURU5WQAorUkVQTEFDRV9QV1JJVEUgPSBAUkVQTEFDRV9QV1JJVEVACitSRVBMQUNFX1JBSVNFID0gQFJFUExBQ0VfUkFJU0VACitSRVBMQUNFX1JBTkRPTV9SID0gQFJFUExBQ0VfUkFORE9NX1JACitSRVBMQUNFX1JFQUQgPSBAUkVQTEFDRV9SRUFEQAorUkVQTEFDRV9SRUFETElOSyA9IEBSRVBMQUNFX1JFQURMSU5LQAorUkVQTEFDRV9SRUFMTE9DID0gQFJFUExBQ0VfUkVBTExPQ0AKK1JFUExBQ0VfUkVBTFBBVEggPSBAUkVQTEFDRV9SRUFMUEFUSEAKK1JFUExBQ0VfUkVNQUlOREVSID0gQFJFUExBQ0VfUkVNQUlOREVSQAorUkVQTEFDRV9SRU1BSU5ERVJGID0gQFJFUExBQ0VfUkVNQUlOREVSRkAKK1JFUExBQ0VfUkVNQUlOREVSTCA9IEBSRVBMQUNFX1JFTUFJTkRFUkxACitSRVBMQUNFX1JFTU9WRSA9IEBSRVBMQUNFX1JFTU9WRUAKK1JFUExBQ0VfUkVOQU1FID0gQFJFUExBQ0VfUkVOQU1FQAorUkVQTEFDRV9SRU5BTUVBVCA9IEBSRVBMQUNFX1JFTkFNRUFUQAorUkVQTEFDRV9STURJUiA9IEBSRVBMQUNFX1JNRElSQAorUkVQTEFDRV9ST1VORCA9IEBSRVBMQUNFX1JPVU5EQAorUkVQTEFDRV9ST1VOREYgPSBAUkVQTEFDRV9ST1VOREZACitSRVBMQUNFX1JPVU5ETCA9IEBSRVBMQUNFX1JPVU5ETEAKK1JFUExBQ0VfU0VURU5WID0gQFJFUExBQ0VfU0VURU5WQAorUkVQTEFDRV9TSUdOQklUID0gQFJFUExBQ0VfU0lHTkJJVEAKK1JFUExBQ0VfU0lHTkJJVF9VU0lOR19HQ0MgPSBAUkVQTEFDRV9TSUdOQklUX1VTSU5HX0dDQ0AKK1JFUExBQ0VfU0xFRVAgPSBAUkVQTEFDRV9TTEVFUEAKK1JFUExBQ0VfU05QUklOVEYgPSBAUkVQTEFDRV9TTlBSSU5URkAKK1JFUExBQ0VfU1BSSU5URiA9IEBSRVBMQUNFX1NQUklOVEZACitSRVBMQUNFX1NRUlRMID0gQFJFUExBQ0VfU1FSVExACitSRVBMQUNFX1NUQVQgPSBAUkVQTEFDRV9TVEFUQAorUkVQTEFDRV9TVERJT19SRUFEX0ZVTkNTID0gQFJFUExBQ0VfU1RESU9fUkVBRF9GVU5DU0AKK1JFUExBQ0VfU1RESU9fV1JJVEVfRlVOQ1MgPSBAUkVQTEFDRV9TVERJT19XUklURV9GVU5DU0AKK1JFUExBQ0VfU1RQTkNQWSA9IEBSRVBMQUNFX1NUUE5DUFlACitSRVBMQUNFX1NUUkNBU0VTVFIgPSBAUkVQTEFDRV9TVFJDQVNFU1RSQAorUkVQTEFDRV9TVFJDSFJOVUwgPSBAUkVQTEFDRV9TVFJDSFJOVUxACitSRVBMQUNFX1NUUkRVUCA9IEBSRVBMQUNFX1NUUkRVUEAKK1JFUExBQ0VfU1RSRVJST1IgPSBAUkVQTEFDRV9TVFJFUlJPUkAKK1JFUExBQ0VfU1RSRVJST1JfUiA9IEBSRVBMQUNFX1NUUkVSUk9SX1JACitSRVBMQUNFX1NUUk5DQVQgPSBAUkVQTEFDRV9TVFJOQ0FUQAorUkVQTEFDRV9TVFJORFVQID0gQFJFUExBQ0VfU1RSTkRVUEAKK1JFUExBQ0VfU1RSTkxFTiA9IEBSRVBMQUNFX1NUUk5MRU5ACitSRVBMQUNFX1NUUlNJR05BTCA9IEBSRVBMQUNFX1NUUlNJR05BTEAKK1JFUExBQ0VfU1RSU1RSID0gQFJFUExBQ0VfU1RSU1RSQAorUkVQTEFDRV9TVFJUT0QgPSBAUkVQTEFDRV9TVFJUT0RACitSRVBMQUNFX1NUUlRPSU1BWCA9IEBSRVBMQUNFX1NUUlRPSU1BWEAKK1JFUExBQ0VfU1RSVE9LX1IgPSBAUkVQTEFDRV9TVFJUT0tfUkAKK1JFUExBQ0VfU1lNTElOSyA9IEBSRVBMQUNFX1NZTUxJTktACitSRVBMQUNFX1RJTUVHTSA9IEBSRVBMQUNFX1RJTUVHTUAKK1JFUExBQ0VfVE1QRklMRSA9IEBSRVBMQUNFX1RNUEZJTEVACitSRVBMQUNFX1RPV0xPV0VSID0gQFJFUExBQ0VfVE9XTE9XRVJACitSRVBMQUNFX1RSVU5DID0gQFJFUExBQ0VfVFJVTkNACitSRVBMQUNFX1RSVU5DRiA9IEBSRVBMQUNFX1RSVU5DRkAKK1JFUExBQ0VfVFJVTkNMID0gQFJFUExBQ0VfVFJVTkNMQAorUkVQTEFDRV9UVFlOQU1FX1IgPSBAUkVQTEFDRV9UVFlOQU1FX1JACitSRVBMQUNFX1VOTElOSyA9IEBSRVBMQUNFX1VOTElOS0AKK1JFUExBQ0VfVU5MSU5LQVQgPSBAUkVQTEFDRV9VTkxJTktBVEAKK1JFUExBQ0VfVU5TRVRFTlYgPSBAUkVQTEFDRV9VTlNFVEVOVkAKK1JFUExBQ0VfVVNMRUVQID0gQFJFUExBQ0VfVVNMRUVQQAorUkVQTEFDRV9VVElNRU5TQVQgPSBAUkVQTEFDRV9VVElNRU5TQVRACitSRVBMQUNFX1ZBU1BSSU5URiA9IEBSRVBMQUNFX1ZBU1BSSU5URkAKK1JFUExBQ0VfVkRQUklOVEYgPSBAUkVQTEFDRV9WRFBSSU5URkAKK1JFUExBQ0VfVkZQUklOVEYgPSBAUkVQTEFDRV9WRlBSSU5URkAKK1JFUExBQ0VfVlBSSU5URiA9IEBSRVBMQUNFX1ZQUklOVEZACitSRVBMQUNFX1ZTTlBSSU5URiA9IEBSRVBMQUNFX1ZTTlBSSU5URkAKK1JFUExBQ0VfVlNQUklOVEYgPSBAUkVQTEFDRV9WU1BSSU5URkAKK1JFUExBQ0VfV0NSVE9NQiA9IEBSRVBMQUNFX1dDUlRPTUJACitSRVBMQUNFX1dDU05SVE9NQlMgPSBAUkVQTEFDRV9XQ1NOUlRPTUJTQAorUkVQTEFDRV9XQ1NSVE9NQlMgPSBAUkVQTEFDRV9XQ1NSVE9NQlNACitSRVBMQUNFX1dDU1dJRFRIID0gQFJFUExBQ0VfV0NTV0lEVEhACitSRVBMQUNFX1dDVE9CID0gQFJFUExBQ0VfV0NUT0JACitSRVBMQUNFX1dDVE9NQiA9IEBSRVBMQUNFX1dDVE9NQkAKK1JFUExBQ0VfV0NXSURUSCA9IEBSRVBMQUNFX1dDV0lEVEhACitSRVBMQUNFX1dSSVRFID0gQFJFUExBQ0VfV1JJVEVACitTQ0hFRF9IID0gQFNDSEVEX0hACiBTRVRfTUFLRSA9IEBTRVRfTUFLRUAKIFNIRUxMID0gQFNIRUxMQAorU0lHX0FUT01JQ19UX1NVRkZJWCA9IEBTSUdfQVRPTUlDX1RfU1VGRklYQAorU0laRV9UX1NVRkZJWCA9IEBTSVpFX1RfU1VGRklYQAogU1REQk9PTF9IID0gQFNUREJPT0xfSEAKK1NURERFRl9IID0gQFNURERFRl9IQAorU1RESU5UX0ggPSBAU1RESU5UX0hACiBTVFJJUCA9IEBTVFJJUEAKLVVOSVNURF9IID0gQFVOSVNURF9IQAorU1lTX1RJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQyA9IEBTWVNfVElNRV9IX0RFRklORVNfU1RSVUNUX1RJTUVTUEVDQAorVElNRV9IX0RFRklORVNfU1RSVUNUX1RJTUVTUEVDID0gQFRJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQ0AKK1VJTlQzMl9NQVhfTFRfVUlOVE1BWF9NQVggPSBAVUlOVDMyX01BWF9MVF9VSU5UTUFYX01BWEAKK1VJTlQ2NF9NQVhfRVFfVUxPTkdfTUFYID0gQFVJTlQ2NF9NQVhfRVFfVUxPTkdfTUFYQAorVU5ERUZJTkVfU1RSVE9LX1IgPSBAVU5ERUZJTkVfU1RSVE9LX1JACitVTklTVERfSF9IQVZFX1dJTlNPQ0syX0ggPSBAVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IQAorVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IX0FORF9VU0VfU09DS0VUUyA9IEBVTklTVERfSF9IQVZFX1dJTlNPQ0syX0hfQU5EX1VTRV9TT0NLRVRTQAogVVNFX05MUyA9IEBVU0VfTkxTQAogVkFMR1JJTkQgPSBAVkFMR1JJTkRACitWQUxHUklORF9QUkVCSVNPTiA9IEBWQUxHUklORF9QUkVCSVNPTkAKIFZFUlNJT04gPSBAVkVSU0lPTkAKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAorV0FSTl9DRkxBR1MgPSBAV0FSTl9DRkxBR1NACitXQVJOX0NGTEFHU19URVNUID0gQFdBUk5fQ0ZMQUdTX1RFU1RACitXQVJOX0NYWEZMQUdTID0gQFdBUk5fQ1hYRkxBR1NACitXQVJOX0NYWEZMQUdTX1RFU1QgPSBAV0FSTl9DWFhGTEFHU19URVNUQAorV0NIQVJfVF9TVUZGSVggPSBAV0NIQVJfVF9TVUZGSVhACiBXRVJST1JfQ0ZMQUdTID0gQFdFUlJPUl9DRkxBR1NACitXRVJST1JfQ1hYRkxBR1MgPSBAV0VSUk9SX0NYWEZMQUdTQAorV0lORE9XU182NF9CSVRfT0ZGX1QgPSBAV0lORE9XU182NF9CSVRfT0ZGX1RACitXSU5ET1dTXzY0X0JJVF9TVF9TSVpFID0gQFdJTkRPV1NfNjRfQklUX1NUX1NJWkVACitXSU5UX1RfU1VGRklYID0gQFdJTlRfVF9TVUZGSVhACiBYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKIFlBQ0MgPSBAWUFDQ0AKIFlBQ0NfTElCUkFSWSA9IEBZQUNDX0xJQlJBUllACiBZQUNDX1NDUklQVCA9IEBZQUNDX1NDUklQVEAKK1lGTEFHUyA9IEBZRkxBR1NACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACiBhY19jdF9DQyA9IEBhY19jdF9DQ0AKIGFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9SQU5MSUIgPSBAYWNfY3RfUkFOTElCQAotYWNfY3RfU1RSSVAgPSBAYWNfY3RfU1RSSVBACiBhY2xvY2FsZGlyID0gQGFjbG9jYWxkaXJACi1hbV9fZmFzdGRlcENDX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ0NfRkFMU0VACi1hbV9fZmFzdGRlcENDX1RSVUUgPSBAYW1fX2Zhc3RkZXBDQ19UUlVFQAotYW1fX2Zhc3RkZXBDWFhfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACi1hbV9fZmFzdGRlcENYWF9UUlVFID0gQGFtX19mYXN0ZGVwQ1hYX1RSVUVACiBhbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKIGFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACiBhbV9fcXVvdGUgPSBAYW1fX3F1b3RlQApAQCAtMTg4LDM0ICsxMzIyLDYxIEBACiBidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAogYnVpbGRfb3MgPSBAYnVpbGRfb3NACiBidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACiBkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAogZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitnbF9MSUJPQkpTID0gQGdsX0xJQk9CSlNACitnbF9MVExJQk9CSlMgPSBAZ2xfTFRMSUJPQkpTQAorZ2x0ZXN0c19MSUJPQkpTID0gQGdsdGVzdHNfTElCT0JKU0AKK2dsdGVzdHNfTFRMSUJPQkpTID0gQGdsdGVzdHNfTFRMSUJPQkpTQAorZ2x0ZXN0c19XSVRORVNTID0gQGdsdGVzdHNfV0lUTkVTU0AKIGhvc3QgPSBAaG9zdEAKIGhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKIGhvc3RfY3B1ID0gQGhvc3RfY3B1QAogaG9zdF9vcyA9IEBob3N0X29zQAogaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACiBpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACiBpbmZvZGlyID0gQGluZm9kaXJACiBpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACiBsaWJkaXIgPSBAbGliZGlyQAogbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbGlzcGRpciA9IEBsaXNwZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKIGxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKIG1hbmRpciA9IEBtYW5kaXJACiBta2Rpcl9wID0gQG1rZGlyX3BACiBvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAogcHJlZml4ID0gQHByZWZpeEAKIHByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAogc2JpbmRpciA9IEBzYmluZGlyQAogc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAogc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAogdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLWRpc3RfcGtnZGF0YV9EQVRBID0gUkVBRE1FIFwKLSAgIGMubTQgeWFjYy5jIGdsci5jIFwKLSAgIGMrKy5tNCBsb2NhdGlvbi5jYyBsYWxyMS5jYyBnbHIuY2MKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitkaXN0X3BrZ2RhdGFfREFUQSA9IFJFQURNRSBiaXNvbi5tNCBcCisgICBjLWxpa2UubTQgXAorICAgYy1za2VsLm00IGMubTQgeWFjYy5jIGdsci5jIFwKKyAgIGMrKy1za2VsLm00IGMrKy5tNCBsb2NhdGlvbi5jYyBsYWxyMS5jYyBnbHIuY2Mgc3RhY2suaGggXAorICAgamF2YS1za2VsLm00IGphdmEubTQgbGFscjEuamF2YQogCiBtNHN1Z2FyZGlyID0gJChwa2dkYXRhZGlyKS9tNHN1Z2FyCi1kaXN0X200c3VnYXJfREFUQSA9IG00c3VnYXIvbTRzdWdhci5tNAorZGlzdF9tNHN1Z2FyX0RBVEEgPSBtNHN1Z2FyL200c3VnYXIubTQgbTRzdWdhci9mb3JlYWNoLm00Cit4c2x0ZGlyID0gJChwa2dkYXRhZGlyKS94c2x0CitkaXN0X3hzbHRfREFUQSA9IFwKKyAgIHhzbHQvYmlzb24ueHNsCQkJCVwKKyAgIHhzbHQveG1sMmRvdC54c2wJCQkJXAorICAgeHNsdC94bWwydGV4dC54c2wJCQkJXAorICAgeHNsdC94bWwyeGh0bWwueHNsCisKIGFsbDogYWxsLWFtCiAKIC5TVUZGSVhFUzoKQEAgLTIyMywxNCArMTM4NCwxNCBAQAogCUBmb3IgZGVwIGluICQ/OyBkbyBcCiAJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKIAkgICAgKiQkZGVwKikgXAotCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCi0JCSYmIGV4aXQgMDsgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKIAkgICAgICBleGl0IDE7OyBcCiAJICBlc2FjOyBcCiAJZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251ICBkYXRhL01ha2VmaWxlJzsgXAotCWNkICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgIGRhdGEvTWFrZWZpbGUKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWduaXRzIGRhdGEvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbml0cyBkYXRhL01ha2VmaWxlCiAuUFJFQ0lPVVM6IE1ha2VmaWxlCiBNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCiAJQGNhc2UgJyQ/JyBpbiBcCkBAIC0yNDgsNzMgKzE0MDksMTA2IEBACiAJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiAkKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQogCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotdW5pbnN0YWxsLWluZm8tYW06CiskKGFtX19hY2xvY2FsX200X2RlcHMpOgogaW5zdGFsbC1kaXN0X200c3VnYXJEQVRBOiAkKGRpc3RfbTRzdWdhcl9EQVRBKQogCUAkKE5PUk1BTF9JTlNUQUxMKQotCXRlc3QgLXogIiQobTRzdWdhcmRpcikiIHx8ICQobWtkaXJfcCkgIiQoREVTVERJUikkKG00c3VnYXJkaXIpIgotCUBsaXN0PSckKGRpc3RfbTRzdWdhcl9EQVRBKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCUBsaXN0PSckKGRpc3RfbTRzdWdhcl9EQVRBKSc7IHRlc3QgLW4gIiQobTRzdWdhcmRpcikiIHx8IGxpc3Q9OyBcCisJaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCisJICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQobTRzdWdhcmRpciknIjsgXAorCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQobTRzdWdhcmRpcikiIHx8IGV4aXQgMTsgXAorCWZpOyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCiAJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAotCSAgZj0kKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKGRpc3RfbTRzdWdhckRBVEFfSU5TVEFMTCkgJyQkZCQkcCcgJyQoREVTVERJUikkKG00c3VnYXJkaXIpLyQkZiciOyBcCi0JICAkKGRpc3RfbTRzdWdhckRBVEFfSU5TVEFMTCkgIiQkZCQkcCIgIiQoREVTVERJUikkKG00c3VnYXJkaXIpLyQkZiI7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKG00c3VnYXJkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChtNHN1Z2FyZGlyKSIgfHwgZXhpdCAkJD87IFwKIAlkb25lCiAKIHVuaW5zdGFsbC1kaXN0X200c3VnYXJEQVRBOgogCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQoZGlzdF9tNHN1Z2FyX0RBVEEpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBmPSQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChtNHN1Z2FyZGlyKS8kJGYnIjsgXAotCSAgcm0gLWYgIiQoREVTVERJUikkKG00c3VnYXJkaXIpLyQkZiI7IFwKLQlkb25lCisJQGxpc3Q9JyQoZGlzdF9tNHN1Z2FyX0RBVEEpJzsgdGVzdCAtbiAiJChtNHN1Z2FyZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAorCWRpcj0nJChERVNURElSKSQobTRzdWdhcmRpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCiBpbnN0YWxsLWRpc3RfcGtnZGF0YURBVEE6ICQoZGlzdF9wa2dkYXRhX0RBVEEpCiAJQCQoTk9STUFMX0lOU1RBTEwpCi0JdGVzdCAteiAiJChwa2dkYXRhZGlyKSIgfHwgJChta2Rpcl9wKSAiJChERVNURElSKSQocGtnZGF0YWRpcikiCi0JQGxpc3Q9JyQoZGlzdF9wa2dkYXRhX0RBVEEpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJQGxpc3Q9JyQoZGlzdF9wa2dkYXRhX0RBVEEpJzsgdGVzdCAtbiAiJChwa2dkYXRhZGlyKSIgfHwgbGlzdD07IFwKKwlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKKwkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwa2dkYXRhZGlyKSciOyBcCisJICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwa2dkYXRhZGlyKSIgfHwgZXhpdCAxOyBcCisJZmk7IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKIAkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCi0JICBmPSQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoZGlzdF9wa2dkYXRhREFUQV9JTlNUQUxMKSAnJCRkJCRwJyAnJChERVNURElSKSQocGtnZGF0YWRpcikvJCRmJyI7IFwKLQkgICQoZGlzdF9wa2dkYXRhREFUQV9JTlNUQUxMKSAiJCRkJCRwIiAiJChERVNURElSKSQocGtnZGF0YWRpcikvJCRmIjsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQocGtnZGF0YWRpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKHBrZ2RhdGFkaXIpIiB8fCBleGl0ICQkPzsgXAogCWRvbmUKIAogdW5pbnN0YWxsLWRpc3RfcGtnZGF0YURBVEE6CiAJQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChkaXN0X3BrZ2RhdGFfREFUQSknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgcm0gLWYgJyQoREVTVERJUikkKHBrZ2RhdGFkaXIpLyQkZiciOyBcCi0JICBybSAtZiAiJChERVNURElSKSQocGtnZGF0YWRpcikvJCRmIjsgXAorCUBsaXN0PSckKGRpc3RfcGtnZGF0YV9EQVRBKSc7IHRlc3QgLW4gIiQocGtnZGF0YWRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwlkaXI9JyQoREVTVERJUikkKHBrZ2RhdGFkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQoraW5zdGFsbC1kaXN0X3hzbHREQVRBOiAkKGRpc3RfeHNsdF9EQVRBKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCUBsaXN0PSckKGRpc3RfeHNsdF9EQVRBKSc7IHRlc3QgLW4gIiQoeHNsdGRpcikiIHx8IGxpc3Q9OyBcCisJaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCisJICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQoeHNsdGRpciknIjsgXAorCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQoeHNsdGRpcikiIHx8IGV4aXQgMTsgXAorCWZpOyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQoeHNsdGRpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKHhzbHRkaXIpIiB8fCBleGl0ICQkPzsgXAogCWRvbmUKKwordW5pbnN0YWxsLWRpc3RfeHNsdERBVEE6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChkaXN0X3hzbHRfREFUQSknOyB0ZXN0IC1uICIkKHhzbHRkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJZGlyPSckKERFU1RESVIpJCh4c2x0ZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKIHRhZ3M6IFRBR1MKIFRBR1M6CiAKIGN0YWdzOiBDVEFHUwogQ1RBR1M6CiAKK2NzY29wZSBjc2NvcGVsaXN0OgorCiAKIGRpc3RkaXI6ICQoRElTVEZJTEVTKQotCSQobWtkaXJfcCkgJChkaXN0ZGlyKS9tNHN1Z2FyCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAotCSAgY2FzZSAkJGZpbGUgaW4gXAotCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCi0JICBlc2FjOyBcCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKIAkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGRpcj1gZWNobyAiJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgIGlmIHRlc3QgIiQkZGlyIiAhPSAiJCRmaWxlIiAmJiB0ZXN0ICIkJGRpciIgIT0gIi4iOyB0aGVuIFwKLQkgICAgZGlyPSIvJCRkaXIiOyBcCi0JICAgICQobWtkaXJfcCkgIiQoZGlzdGRpcikkJGRpciI7IFwKLQkgIGVsc2UgXAotCSAgICBkaXI9Jyc7IFwKLQkgIGZpOyBcCiAJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCiAJICAgIGZpOyBcCi0JICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCiAJICBlbHNlIFwKLQkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAogCSAgICB8fCBleGl0IDE7IFwKIAkgIGZpOyBcCiAJZG9uZQpAQCAtMzIyLDggKzE1MTYsOCBAQAogY2hlY2s6IGNoZWNrLWFtCiBhbGwtYW06IE1ha2VmaWxlICQoREFUQSkKIGluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKG00c3VnYXJkaXIpIiAiJChERVNURElSKSQocGtnZGF0YWRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChta2Rpcl9wKSAiJCRkaXIiOyBcCisJZm9yIGRpciBpbiAiJChERVNURElSKSQobTRzdWdhcmRpcikiICIkKERFU1RESVIpJChwa2dkYXRhZGlyKSIgIiQoREVTVERJUikkKHhzbHRkaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAogCWRvbmUKIGluc3RhbGw6IGluc3RhbGwtYW0KIGluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCkBAIC0zMzUsMTYgKzE1MjksMjIgQEAKIAogaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KIGluc3RhbGwtc3RyaXA6Ci0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCi0JICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCisJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAgIGluc3RhbGw7IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorCWZpCiBtb3N0bHljbGVhbi1nZW5lcmljOgogCiBjbGVhbi1nZW5lcmljOgogCiBkaXN0Y2xlYW4tZ2VuZXJpYzoKIAktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKIAogbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgogCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKQEAgLTM2MywxOCArMTU2MywzOSBAQAogCiBodG1sOiBodG1sLWFtCiAKK2h0bWwtYW06CisKIGluZm86IGluZm8tYW0KIAogaW5mby1hbToKIAotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWRpc3RfbTRzdWdhckRBVEEgaW5zdGFsbC1kaXN0X3BrZ2RhdGFEQVRBCitpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtZGlzdF9tNHN1Z2FyREFUQSBpbnN0YWxsLWRpc3RfcGtnZGF0YURBVEEgXAorCWluc3RhbGwtZGlzdF94c2x0REFUQQorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CiAKIGluc3RhbGwtZXhlYy1hbToKIAoraW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCiBpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQogCitpbnN0YWxsLWluZm8tYW06CisKIGluc3RhbGwtbWFuOgogCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKwogaW5zdGFsbGNoZWNrLWFtOgogCiBtYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCkBAIC0zOTQsMTggKzE2MTUsMjQgQEAKIHBzLWFtOgogCiB1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1kaXN0X200c3VnYXJEQVRBIHVuaW5zdGFsbC1kaXN0X3BrZ2RhdGFEQVRBIFwKLQl1bmluc3RhbGwtaW5mby1hbQorCXVuaW5zdGFsbC1kaXN0X3hzbHREQVRBCisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKIAogLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuIFwKIAlkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCiAJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gXAotCWluc3RhbGwtZGlzdF9tNHN1Z2FyREFUQSBpbnN0YWxsLWRpc3RfcGtnZGF0YURBVEEgaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBwZGYgcGRmLWFtIHBzIHBzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAorCWluc3RhbGwtZGlzdF9tNHN1Z2FyREFUQSBpbnN0YWxsLWRpc3RfcGtnZGF0YURBVEEgXAorCWluc3RhbGwtZGlzdF94c2x0REFUQSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAorCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCisJaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKKwlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBwZGYgXAorCXBkZi1hbSBwcyBwcy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKIAl1bmluc3RhbGwtZGlzdF9tNHN1Z2FyREFUQSB1bmluc3RhbGwtZGlzdF9wa2dkYXRhREFUQSBcCi0JdW5pbnN0YWxsLWluZm8tYW0KKwl1bmluc3RhbGwtZGlzdF94c2x0REFUQQorCiAKICMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCiAjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KZGlmZiAtLWdpdCBhL2RhdGEvUkVBRE1FIGIvZGF0YS9SRUFETUUKaW5kZXggMjI2Nzc5MS4uZTc4YzFjZiAxMDA2NDQKLS0tIGEvZGF0YS9SRUFETUUKKysrIGIvZGF0YS9SRUFETUUKQEAgLTEsNDUgKzEsNzAgQEAKIC0qLSBvdXRsaW5lIC0qLQogCi1UaGlzIGRpcmVjdG9yeSBjb250YWlucyBCaXNvbiBza2VsZXRvbnM6IHRoZSBnZW5lcmFsIHNoYXBlcyBvZiB0aGUKLWRpZmZlcmVudCBwYXJzZXIga2luZHMsIHRoYXQgYXJlIHNwZWNpYWxpemVkIGZvciBzcGVjaWZpYyBncmFtbWFycyBieQotdGhlIGJpc29uIHByb2dyYW0uCitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBkYXRhIG5lZWRlZCBieSBCaXNvbi4KIAotQ3VycmVudGx5LCB0aGVyZSBhcmUgb25seSB0aHJlZSBzdXBwb3J0ZWQgc2tlbGV0b25zOgorKiBTa2VsZXRvbnMKK0Jpc29uIHNrZWxldG9uczogdGhlIGdlbmVyYWwgc2hhcGVzIG9mIHRoZSBkaWZmZXJlbnQgcGFyc2VyIGtpbmRzLAordGhhdCBhcmUgc3BlY2lhbGl6ZWQgZm9yIHNwZWNpZmljIGdyYW1tYXJzIGJ5IHRoZSBiaXNvbiBwcm9ncmFtLgorCitDdXJyZW50bHksIHRoZSBzdXBwb3J0ZWQgc2tlbGV0b25zIGFyZToKIAogLSB5YWNjLmMKICAgSXQgdXNlZCB0byBiZSBuYW1lZCBiaXNvbi5zaW1wbGU6IGl0IGNvcnJlc3BvbmRzIHRvIEMgWWFjYwogICBjb21wYXRpYmxlIExBTFIoMSkgcGFyc2Vycy4KIAogLSBsYWxyMS5jYwotICBQcm9kdWNlcyBhIEMrKyBwYXJzZXIgY2xhc3MuICBJdCBpcyBzdGlsbCB2ZXJ5IGV4cGVyaW1lbnRhbCwgYW5kIG5vdAotICB5ZXQgc3VwcG9ydGVkLiAgUGxlYXNlLCBzdWJzY3JpYmUgdG8gYmlzb24tcGF0Y2hlc0BnbnUub3JnLgorICBQcm9kdWNlcyBhIEMrKyBwYXJzZXIgY2xhc3MuCisKKy0gbGFscjEuamF2YQorICBQcm9kdWNlcyBhIEphdmEgcGFyc2VyIGNsYXNzLgogCiAtIGdsci5jCiAgIEEgR2VuZXJhbGl6ZWQgTFIgQyBwYXJzZXIgYmFzZWQgb24gQmlzb24ncyBMQUxSKDEpIHRhYmxlcy4KIAorLSBnbHIuY2MKKyAgQSBHZW5lcmFsaXplZCBMUiBDKysgcGFyc2VyLiAgQWN0dWFsbHkgYSBDKysgd3JhcHBlciBhcm91bmQgZ2xyLmMuCisKIFRoZXNlIHNrZWxldG9ucyBhcmUgdGhlIG9ubHkgb25lcyBzdXBwb3J0ZWQgYnkgdGhlIEJpc29uIHRlYW0uCiBCZWNhdXNlIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiBza2VsZXRvbnMgYW5kIHRoZSBiaXNvbiBwcm9ncmFtIGlzIG5vdAogZmluaXNoZWQsICp3ZSBhcmUgbm90IGJvdW5kIHRvIGl0Ki4gIEluIHBhcnRpY3VsYXIsIEJpc29uIGlzIG5vdAogbWF0dXJlIGVub3VnaCBmb3IgdXMgdG8gY29uc2lkZXIgdGhhdCBgYGZvcmVpZ24gc2tlbGV0b25zJycgYXJlCiBzdXBwb3J0ZWQuCiAKKyogbTRzdWdhcgorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgTTRzdWdhciwgc29ydCBvZiBhbiBleHRlbmRlZCBsaWJyYXJ5IGZvciBNNCwKK3doaWNoIGlzIHVzZWQgYnkgQmlzb24gdG8gaW5zdGFudGlhdGUgdGhlIHNrZWxldG9ucy4KKworKiB4c2x0CitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBYU0xUIHByb2dyYW1zIHRoYXQgdHJhbnNmb3JtIEJpc29uJ3MgWE1MIG91dHB1dAoraW50byB2YXJpb3VzIGZvcm1hdHMuCisKKy0gYmlzb24ueHNsCisgIEEgbGlicmFyeSBvZiByb3V0aW5lcyB1c2VkIGJ5IHRoZSBvdGhlciBYU0xUIHByb2dyYW1zLgorCistIHhtbDJkb3QueHNsCisgIENvbnZlcnNpb24gaW50byBHcmFwaFZpeidzIGRvdCBmb3JtYXQuCisKKy0geG1sMnRleHQueHNsCisgIENvbnZlcnNpb24gaW50byB0ZXh0LgorCistIHhtbDJ4aHRtbC54c2wKKyAgQ29udmVyc2lvbiBpbnRvIFhIVE1MLgorCiAtLS0tLQogCi1Db3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIEJpc29uLgogCi1HTlUgQmlzb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci10aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi1hbnkgbGF0ZXIgdmVyc2lvbi4KK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCi1HTlUgQmlzb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi1hbG9uZyB3aXRoIEJpc29uOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi1Cb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KK2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgpkaWZmIC0tZ2l0IGEvZGF0YS9iaXNvbi5tNCBiL2RhdGEvYmlzb24ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI0YjE2MgotLS0gL2Rldi9udWxsCisrKyBiL2RhdGEvYmlzb24ubTQKQEAgLTAsMCArMSw2MTAgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBMYW5ndWFnZS1pbmRlcGVuZGVudCBNNCBNYWNyb3MgZm9yIEJpc29uLgorCisjIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIElkZW50aWZpY2F0aW9uLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBiNF9jb3B5cmlnaHQoVElUTEUsIFlFQVJTKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtiNF9jb3B5cmlnaHRdLAorW2I0X2NvbW1lbnQoW0EgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiBiNF92ZXJzaW9uLl0pCisKK2I0X2NvbW1lbnQoWyQxCisKK200X3RleHRfd3JhcChbQ29weXJpZ2h0IChDKSAkMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5dLCBbICAgXSkKKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Ll0pCisKK2I0X2NvbW1lbnQoW0FzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucworcGFydCBvciBhbGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKK3VuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFzIHRoYXQgd29yayBpc24ndCBpdHNlbGYgYQorcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24gb3IgYSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YKK2FzIGEgcGFyc2VyIHNrZWxldG9uLiAgQWx0ZXJuYXRpdmVseSwgaWYgeW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUKK3RoZSBwYXJzZXIgc2tlbGV0b24gaXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMKK3NwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhlIHJlc3VsdGluZworQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLgorCitUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCit2ZXJzaW9uIDIuMiBvZiBCaXNvbi5dKV0pCisKKworIyMgLS0tLS0tLS0gIyMKKyMjIE91dHB1dC4gICMjCisjIyAtLS0tLS0tLSAjIworCisjIGI0X291dHB1dF9iZWdpbihGSUxFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5hYmxlIG91dHB1dCwgaS5lLiwgc2VuZCB0byBkaXZlcnNpb24gMCwgZXhwYW5kIGFmdGVyICIjIiwgYW5kCisjIGdlbmVyYXRlIHRoZSB0YWcgdG8gb3V0cHV0IGludG8gRklMRS4gIE11c3QgYmUgZm9sbG93ZWQgYnkgRU9MLgorbTRfZGVmaW5lKFtiNF9vdXRwdXRfYmVnaW5dLAorW200X2NoYW5nZWNvbSgpCittNF9kaXZlcnRfcHVzaCgwKWRubAorQG91dHB1dChtNF91bnF1b3RlKFskMV0pQClAZG5sCitdKQorCisKKyMgYjRfb3V0cHV0X2VuZCgpCisjIC0tLS0tLS0tLS0tLS0tLQorIyBPdXRwdXQgbm90aGluZywgcmVzdG9yZSAjIGFzIGNvbW1lbnQgY2hhcmFjdGVyIChubyBleHBhbnNpb25zIGFmdGVyICMpLgorbTRfZGVmaW5lKFtiNF9vdXRwdXRfZW5kXSwKK1ttNF9kaXZlcnRfcG9wKDApCittNF9jaGFuZ2Vjb20oWyNdKQorXSkKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjCisjIyBFcnJvciBoYW5kbGluZy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgVGhlIGZvbGxvd2luZyBlcnJvciBoYW5kbGluZyBtYWNyb3MgcHJpbnQgZXJyb3IgZGlyZWN0aXZlcyB0aGF0IHNob3VsZCBub3QKKyMgYmVjb21lIGFyZ3VtZW50cyBvZiBvdGhlciBtYWNybyBpbnZvY2F0aW9ucyBzaW5jZSB0aGV5IHdvdWxkIGxpa2VseSB0aGVuIGJlCisjIG1hbmdsZWQuICBUaHVzLCB0aGV5IHByaW50IHRvIHN0ZG91dCBkaXJlY3RseS4KKworIyBiNF9jYXQoVEVYVCkKKyMgLS0tLS0tLS0tLS0tCisjIFdyaXRlIFRFWFQgdG8gc3Rkb3V0LiAgUHJlY2VkZSB0aGUgZmluYWwgbmV3bGluZSB3aXRoIGFuIEAgc28gdGhhdCBpdCdzCisjIGVzY2FwZWQuICBGb3IgZXhhbXBsZToKKyMKKyMgICBiNF9jYXQoW1tAY29tcGxhaW4oaW52YWxpZCBpbnB1dEApXV0pCittNF9kZWZpbmUoW2I0X2NhdF0sCitbbTRfc3lzY21kKFtjYXQgPDwnX200ZW9mJworXW00X2JwYXRzdWJzdChtNF9kcXVvdGUoJDEpLCBbX200ZW9mXSwgW19tNEBgZW9mXSlbQAorX200ZW9mCitdKWRubAorbTRfaWYobTRfc3lzdmFsLCBbMF0sIFtdLCBbbTRfZmF0YWwoWyQwOiBjYW5ub3Qgd3JpdGUgdG8gc3Rkb3V0XSldKV0pCisKKyMgYjRfZXJyb3IoS0lORCwgRk9STUFULCBbQVJHMV0sIFtBUkcyXSwgLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFdyaXRlIEBLSU5EKEZPUk1BVEAsQVJHMUAsQVJHMkAsLi4uQCkgdG8gc3Rkb3V0LgorIworIyBGb3IgZXhhbXBsZToKKyMKKyMgICBiNF9lcnJvcihbW3dhcm5dXSwgW1tpbnZhbGlkIHZhbHVlIGZvciAnJXMnOiAlc11dLCBbW2Zvb11dLCBbWzNdXSkKK200X2RlZmluZShbYjRfZXJyb3JdLAorW2I0X2NhdChbW0BdJDFbKF0kMltdXWRubAorW200X2lmKFskI10sIFsyXSwgW10sCisgICAgICAgW200X2ZvcmVhY2goW2I0X2FyZ10sCisgICAgICAgICAgICAgICAgICAgbTRfZHF1b3RlKG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpLAorICAgICAgICAgICAgICAgICAgIFtbQCxdYjRfYXJnXSldKVtAKV1dKV0pCisKKyMgYjRfZXJyb3JfYXQoS0lORCwgU1RBUlQsIEVORCwgRk9STUFULCBbQVJHMV0sIFtBUkcyXSwgLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFdyaXRlIEBLSU5EX2F0KFNUQVJUQCxFTkRALEZPUk1BVEAsQVJHMUAsQVJHMkAsLi4uQCkgdG8gc3Rkb3V0LgorIworIyBGb3IgZXhhbXBsZToKKyMKKyMgICBiNF9lcnJvcl9hdChbW2NvbXBsYWluXV0sIFtbaW5wdXQueToyLjNdXSwgW1tpbnB1dC55OjUuNF1dLAorIyAgICAgICAgICAgICAgIFtbaW52YWxpZCAlc11dLCBbW2Zvb11dKQorbTRfZGVmaW5lKFtiNF9lcnJvcl9hdF0sCitbYjRfY2F0KFtbQF0kMVtfYXQoXSQyW0AsXSQzW0AsXSQ0W11dZG5sCitbbTRfaWYoWyQjXSwgWzRdLCBbXSwKKyAgICAgICBbbTRfZm9yZWFjaChbYjRfYXJnXSwKKyAgICAgICAgICAgICAgICAgICBtNF9kcXVvdGUobTRfc2hpZnQobTRfc2hpZnQobTRfc2hpZnQobTRfc2hpZnQoJEApKSkpKSwKKyAgICAgICAgICAgICAgICAgICBbW0AsXWI0X2FyZ10pXSlbQCldXSldKQorCisjIGI0X3dhcm4oRk9STUFULCBbQVJHMV0sIFtBUkcyXSwgLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgV3JpdGUgQHdhcm4oRk9STUFUQCxBUkcxQCxBUkcyQCwuLi5AKSB0byBzdGRvdXQuCisjCisjIEZvciBleGFtcGxlOgorIworIyAgIGI0X3dhcm4oW1tpbnZhbGlkIHZhbHVlIGZvciAnJXMnOiAlc11dLCBbW2Zvb11dLCBbWzNdXSkKKyMKKyMgQXMgYSBzaW1wbGUgdGVzdCBzdWl0ZSwgdGhpczoKKyMKKyMgICBtNF9kaXZlcnQoLTEpCisjICAgbTRfZGVmaW5lKFthc2RmXSwgW0FTREZdKQorIyAgIG00X2RlZmluZShbZnNhXSwgW0ZTQV0pCisjICAgbTRfZGVmaW5lKFtmZHNhXSwgW0ZEU0FdKQorIyAgIGI0X3dhcm4oW1tbYXNkZiksIGFzZGZdXV0sIFtbW2ZzYSksIGZzYV1dXSwgW1tbZmRzYSksIGZkc2FdXV0pCisjICAgYjRfd2FybihbW2FzZGYpLCBhc2RmXV0sIFtbZnNhKSwgZnNhXV0sIFtbZmRzYSksIGZkc2FdXSkKKyMgICBiNF93YXJuKCkKKyMgICBiNF93YXJuKDEpCisjICAgYjRfd2FybigxLCAyKQorIworIyBTaG91bGQgcHJvZHVjZSB0aGlzIHdpdGhvdXQgbmV3bGluZXM6CisjCisjICAgQHdhcm4oW2FzZGYpLCBhc2RmXUAsW2ZzYSksIGZzYV1ALFtmZHNhKSwgZmRzYV1AKQorIyAgIEB3YXJuKGFzZGYpLCBhc2RmQCxmc2EpLCBmc2FALGZkc2EpLCBmZHNhQCkKKyMgICBAd2FybihAKQorIyAgIEB3YXJuKDFAKQorIyAgIEB3YXJuKDFALDJAKQorbTRfZGVmaW5lKFtiNF93YXJuXSwKK1tiNF9lcnJvcihbW3dhcm5dXSwgJEApXSkKKworIyBiNF93YXJuX2F0KFNUQVJULCBFTkQsIEZPUk1BVCwgW0FSRzFdLCBbQVJHMl0sIC4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFdyaXRlIEB3YXJuKFNUQVJUQCxFTkRALEZPUk1BVEAsQVJHMUAsQVJHMkAsLi4uQCkgdG8gc3Rkb3V0LgorIworIyBGb3IgZXhhbXBsZToKKyMKKyMgICBiNF93YXJuX2F0KFtbaW5wdXQueToyLjNdXSwgW1tpbnB1dC55OjUuNF1dLCBbW2ludmFsaWQgJXNdXSwgW1tmb29dXSkKK200X2RlZmluZShbYjRfd2Fybl9hdF0sCitbYjRfZXJyb3JfYXQoW1t3YXJuXV0sICRAKV0pCisKKyMgYjRfY29tcGxhaW4oRk9STUFULCBbQVJHMV0sIFtBUkcyXSwgLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFdyaXRlIEBjb21wbGFpbihGT1JNQVRALEFSRzFALEFSRzJALC4uLkApIHRvIHN0ZG91dC4KKyMKKyMgU2VlIGI0X3dhcm4gZXhhbXBsZS4KK200X2RlZmluZShbYjRfY29tcGxhaW5dLAorW2I0X2Vycm9yKFtbY29tcGxhaW5dXSwgJEApXSkKKworIyBiNF9jb21wbGFpbl9hdChTVEFSVCwgRU5ELCBGT1JNQVQsIFtBUkcxXSwgW0FSRzJdLCAuLi4pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgV3JpdGUgQGNvbXBsYWluKFNUQVJUQCxFTkRALEZPUk1BVEAsQVJHMUAsQVJHMkAsLi4uQCkgdG8gc3Rkb3V0LgorIworIyBTZWUgYjRfd2Fybl9hdCBleGFtcGxlLgorbTRfZGVmaW5lKFtiNF9jb21wbGFpbl9hdF0sCitbYjRfZXJyb3JfYXQoW1tjb21wbGFpbl1dLCAkQCldKQorCisjIGI0X2ZhdGFsKEZPUk1BVCwgW0FSRzFdLCBbQVJHMl0sIC4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBXcml0ZSBAZmF0YWwoRk9STUFUQCxBUkcxQCxBUkcyQCwuLi5AKSB0byBzdGRvdXQgYW5kIGV4aXQuCisjCisjIFNlZSBiNF93YXJuIGV4YW1wbGUuCittNF9kZWZpbmUoW2I0X2ZhdGFsXSwKK1tiNF9lcnJvcihbW2ZhdGFsXV0sICRAKWRubAorbTRfZXhpdCgxKV0pCisKKyMgYjRfZmF0YWxfYXQoU1RBUlQsIEVORCwgRk9STUFULCBbQVJHMV0sIFtBUkcyXSwgLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFdyaXRlIEBmYXRhbChTVEFSVEAsRU5EQCxGT1JNQVRALEFSRzFALEFSRzJALC4uLkApIHRvIHN0ZG91dCBhbmQgZXhpdC4KKyMKKyMgU2VlIGI0X3dhcm5fYXQgZXhhbXBsZS4KK200X2RlZmluZShbYjRfZmF0YWxfYXRdLAorW2I0X2Vycm9yX2F0KFtbZmF0YWxdXSwgJEApZG5sCittNF9leGl0KDEpXSkKKworCisjIyAtLS0tLS0tLS0tLS0gIyMKKyMjIERhdGEgVHlwZXMuICAjIworIyMgLS0tLS0tLS0tLS0tICMjCisKKyMgYjRfaW50c19pbihJTlQxLCBJTlQyLCBMT1csIEhJR0gpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZXR1cm4gMSBpZmYgYm90aCBJTlQxIGFuZCBJTlQyIGFyZSBpbiBbTE9XLCBISUdIXSwgMCBvdGhlcndpc2UuCittNF9kZWZpbmUoW2I0X2ludHNfaW5dLAorW200X2V2YWwoWyQzIDw9ICQxICYmICQxIDw9ICQ0ICYmICQzIDw9ICQyICYmICQyIDw9ICQ0XSldKQorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBEZWNvZGluZyBvcHRpb25zLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIGI0X2ZsYWdfaWYoRkxBRywgSUYtVFJVRSwgSUYtRkFMU0UpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJ1biBJRi1UUlVFIGlmIGI0X0ZMQUdfZmxhZyBpcyAxLCBJRi1GQUxTRSBpZiBGTEFHIGlzIDAsIG90aGVyd2lzZSBmYWlsLgorbTRfZGVmaW5lKFtiNF9mbGFnX2lmXSwKK1ttNF9jYXNlKGI0XyQxX2ZsYWcsCisgICAgICAgICBbMF0sIFskM10sCisJIFsxXSwgWyQyXSwKKwkgW200X2ZhdGFsKFtpbnZhbGlkICQxIHZhbHVlOiBdJDEpXSldKQorCisKKyMgYjRfZGVmaW5lX2ZsYWdfaWYoRkxBRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lICJiNF9GTEFHX2lmKElGLVRSVUUsIElGLUZBTFNFKSIgdGhhdCBkZXBlbmRzIG9uIHRoZQorIyB2YWx1ZSBvZiB0aGUgQm9vbGVhbiBGTEFHLgorbTRfZGVmaW5lKFtiNF9kZWZpbmVfZmxhZ19pZl0sCitbX2I0X2RlZmluZV9mbGFnX2lmKCRbMV0sICRbMl0sIFskMV0pXSkKKworIyBfYjRfZGVmaW5lX2ZsYWdfaWYoJDEsICQyLCBGTEFHKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBXb3JrIGFyb3VuZCB0aGUgaW1wb3NzaWJpbGl0eSB0byBkZWZpbmUgbWFjcm9zIGluc2lkZSBtYWNyb3MsCisjIGJlY2F1c2UgaXNzdWluZyBgWyQxXScgaXMgbm90IHBvc3NpYmxlIGluIE00LiAgR05VIE00IHNob3VsZCBwcm92aWRlCisjICQkMSBhIGxhIE01L1RlWC4KK200X2RlZmluZShbX2I0X2RlZmluZV9mbGFnX2lmXSwKK1ttNF9pZihbJDEkMl0sICRbMV0kWzJdLCBbXSwKKyAgICAgICBbbTRfZmF0YWwoWyQwOiBJbnZhbGlkIGFyZ3VtZW50czogJEBdKV0pZG5sCittNF9kZWZpbmUoW2I0XyQzX2lmXSwKKyAgICAgICAgICBbYjRfZmxhZ19pZihbJDNdLCBbJDFdLCBbJDJdKV0pXSkKKworCisjIGI0X0ZMQUdfaWYoSUYtVFJVRSwgSUYtRkFMU0UpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4cGFuZCBJRi1UUlVFLCBpZiBGTEFHIGlzIHRydWUsIElGLUZBTFNFIG90aGVyd2lzZS4KK2I0X2RlZmluZV9mbGFnX2lmKFtkZWZpbmVzXSkgICAgICAgICAgICAjIFdoZXRoZXIgaGVhZGVycyBhcmUgcmVxdWVzdGVkLgorYjRfZGVmaW5lX2ZsYWdfaWYoW2Vycm9yX3ZlcmJvc2VdKSAgICAgICMgV2hldGhlciBlcnJvciBhcmUgdmVyYm9zZS4KK2I0X2RlZmluZV9mbGFnX2lmKFtnbHJdKSAgICAgICAgICAgICAgICAjIFdoZXRoZXIgYSBHTFIgcGFyc2VyIGlzIHJlcXVlc3RlZC4KK2I0X2RlZmluZV9mbGFnX2lmKFtsb2NhdGlvbnNdKSAgICAgICAgICAjIFdoZXRoZXIgbG9jYXRpb25zIGFyZSB0cmFja2VkLgorYjRfZGVmaW5lX2ZsYWdfaWYoW25vbmRldGVybWluaXN0aWNdKSAgICMgV2hldGhlciBjb25mbGljdHMgc2hvdWxkIGJlIGhhbmRsZWQuCitiNF9kZWZpbmVfZmxhZ19pZihbdG9rZW5fdGFibGVdKSAgICAgICAgIyBXaGV0aGVyIHl5dG9rZW5fdGFibGUgaXMgZGVtYW5kZWQuCitiNF9kZWZpbmVfZmxhZ19pZihbeWFjY10pICAgICAgICAgICAgICAgIyBXaGV0aGVyIFBPU0lYIFlhY2MgaXMgZW11bGF0ZWQuCisKKyMgeXl0b2tlbl90YWJsZSBpcyBuZWVkZWQgdG8gc3VwcG9ydCB2ZXJib3NlIGVycm9ycy4KK2I0X2Vycm9yX3ZlcmJvc2VfaWYoW200X2RlZmluZShbYjRfdG9rZW5fdGFibGVfZmxhZ10sIFsxXSldKQorCisKKworIyMgLS0tLS0tLS0tLS0gIyMKKyMjIFN5bmNsaW5lcy4gICMjCisjIyAtLS0tLS0tLS0tLSAjIworCisjIGI0X2Jhc2VuYW1lKE5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIFNpbWlsYXIgdG8gUE9TSVggYmFzZW5hbWU7IHRoZSBkaWZmZXJlbmNlcyBkb24ndCBtYXR0ZXIgaGVyZS4KKyMgQmV3YXJlIHRoYXQgTkFNRSBpcyBub3QgZXZhbHVhdGVkLgorbTRfZGVmaW5lKFtiNF9iYXNlbmFtZV0sCitbbTRfYnBhdHN1YnN0KFskMV0sIFteLiovXChbXi9dK1wpLyokXSwgW1wxXSldKQorCisKKyMgYjRfc3luY2xpbmUoTElORSwgRklMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbYjRfc3luY2xpbmVdLAorW2I0X2ZsYWdfaWYoW3N5bmNsaW5lc10sCitbYjRfc3luY19lbmQoW19fbGluZV9fXSwgW2I0X2Jhc2VuYW1lKG00X3F1b3RlKF9fZmlsZV9fKSldKQorYjRfc3luY19zdGFydChbJDFdLCBbJDJdKV0pXSkKKworbTRfZGVmaW5lKFtiNF9zeW5jX2VuZF0sIFtiNF9jb21tZW50KFtMaW5lICQxIG9mICQyXSldKQorbTRfZGVmaW5lKFtiNF9zeW5jX3N0YXJ0XSwgW2I0X2NvbW1lbnQoW0xpbmUgJDEgb2YgJDJdKV0pCisKKyMgYjRfdXNlcl9jb2RlKFVTRVItQ09ERSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW1pdCBjb2RlIGZyb20gdGhlIHVzZXIsIGVuZGluZyBpdCB3aXRoIHN5bmNsaW5lcy4KK200X2RlZmluZShbYjRfdXNlcl9jb2RlXSwKK1skMQorYjRfc3luY2xpbmUoW0BvbGluZUBdLCBbQG9maWxlQF0pXSkKKworCisjIGI0X2RlZmluZV91c2VyX2NvZGUoTUFDUk8pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZyb20gYjRfTUFDUk8sIGJ1aWxkIGI0X3VzZXJfTUFDUk8gdGhhdCBpbmNsdWRlcyB0aGUgc3luY2xpbmVzLgorbTRfZGVmaW5lKFtiNF9kZWZpbmVfdXNlcl9jb2RlXSwKK1ttNF9kZWZpbmUoW2I0X3VzZXJfJDFdLAorW2I0X3VzZXJfY29kZShbYjRfJDFdKV0pXSkKKworCisjIGI0X3VzZXJfYWN0aW9ucworIyBiNF91c2VyX2luaXRpYWxfYWN0aW9uCisjIGI0X3VzZXJfcG9zdF9wcm9sb2d1ZQorIyBiNF91c2VyX3ByZV9wcm9sb2d1ZQorIyBiNF91c2VyX3N0eXBlCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTWFjcm9zIHRoYXQgaXNzdWUgdXNlciBjb2RlLCBlbmRpbmcgd2l0aCBzeW5jbGluZXMuCitiNF9kZWZpbmVfdXNlcl9jb2RlKFthY3Rpb25zXSkKK2I0X2RlZmluZV91c2VyX2NvZGUoW2luaXRpYWxfYWN0aW9uXSkKK2I0X2RlZmluZV91c2VyX2NvZGUoW3Bvc3RfcHJvbG9ndWVdKQorYjRfZGVmaW5lX3VzZXJfY29kZShbcHJlX3Byb2xvZ3VlXSkKK2I0X2RlZmluZV91c2VyX2NvZGUoW3N0eXBlXSkKKworCisjIGI0X2NoZWNrX3VzZXJfbmFtZXMoV0hBVCwgVVNFUi1MSVNULCBCSVNPTi1OQU1FU1BBQ0UpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbXBsYWluIGlmIGFueSBuYW1lIG9mIHR5cGUgV0hBVCBpcyB1c2VkIGJ5IHRoZSB1c2VyIChhcyByZWNvcmRlZCBpbgorIyBVU0VSLUxJU1QpIGJ1dCBpcyBub3QgdXNlZCBieSBCaXNvbiAoYXMgcmVjb3JkZWQgYnkgbWFjcm9zIGluIHRoZQorIyBuYW1lc3BhY2UgQklTT04tTkFNRVNQQUNFKS4KKyMKKyMgVVNFUi1MSVNUIG11c3QgZXhwYW5kIHRvIGEgbGlzdCBzcGVjaWZ5aW5nIGFsbCB1c2VyIG9jY3VycmVuY2VzIG9mIGFsbCBuYW1lcworIyBvZiB0eXBlIFdIQVQuICAgRWFjaCBpdGVtIGluIHRoZSBsaXN0IG11c3QgYmUgYSB0cmlwbGV0IHNwZWNpZnlpbmcgb25lCisjIG9jY3VycmVuY2U6IG5hbWUsIHN0YXJ0IGJvdW5kYXJ5LCBhbmQgZW5kIGJvdW5kYXJ5LiAgRW1wdHkgc3RyaW5nIG5hbWVzIGFyZQorIyBmaW5lLiAgQW4gZW1wdHkgbGlzdCBpcyBmaW5lLgorIworIyBGb3IgZXhhbXBsZSwgdG8gZGVmaW5lIGI0X2Zvb191c2VyX25hbWVzIHRvIGJlIHVzZWQgZm9yIFVTRVItTElTVCB3aXRoIHRocmVlCisjIG5hbWUgb2NjdXJyZW5jZXMgYW5kIHdpdGggY29ycmVjdCBxdW90aW5nOgorIworIyAgIG00X2RlZmluZShbYjRfZm9vX3VzZXJfbmFtZXNdLAorIyAgICAgICAgICAgICBbW1tbW1tiYXJdXSwgW1twYXJzZXIueToxLjddXSwgW1twYXJzZXIueToxLjE2XV1dXSwKKyMgICAgICAgICAgICAgICBbW1tbYmFyXV0sIFtbcGFyc2VyLnk6NS43XV0sIFtbcGFyc2VyLnk6NS4xNl1dXV0sCisjICAgICAgICAgICAgICAgW1tbW2Jhel1dLCBbW3BhcnNlci55OjguN11dLCBbW3BhcnNlci55OjguMTZdXV1dXV0pCisjCisjIFRoZSBtYWNybyBCSVNPTi1OQU1FU1BBQ0UoYmFyKSBtdXN0IGJlIGRlZmluZWQgaWZmIHRoZSBuYW1lIGJhciBvZiB0eXBlIFdIQVQKKyMgaXMgdXNlZCBieSBCaXNvbiAoaW4gdGhlIGZyb250LWVuZCBvciBpbiB0aGUgc2tlbGV0b24pLiAgRW1wdHkgc3RyaW5nIG5hbWVzCisjIGFyZSBmaW5lLCBidXQgaXQgd291bGQgYmUgdWdseSBmb3IgQmlzb24gdG8gYWN0dWFsbHkgdXNlIG9uZS4KKyMKKyMgRm9yIGV4YW1wbGUsIHRvIHVzZSBiNF9mb29fYmlzb25fbmFtZXMgZm9yIEJJU09OLU5BTUVTUEFDRSBhbmQgZGVmaW5lIHRoYXQKKyMgdGhlIG5hbWVzIGJhciBhbmQgYmF6IGFyZSB1c2VkIGJ5IEJpc29uOgorIworIyAgIG00X2RlZmluZShbYjRfZm9vX2Jpc29uX25hbWVzKGJhcildKQorIyAgIG00X2RlZmluZShbYjRfZm9vX2Jpc29uX25hbWVzKGJheildKQorIworIyBUbyBpbnZva2UgYjRfY2hlY2tfdXNlcl9uYW1lcyB3aXRoIFRZUEUgZm9vLCB3aXRoIFVTRVItTElTVAorIyBiNF9mb29fdXNlcl9uYW1lcywgd2l0aCBCSVNPTi1OQU1FU1BBQ0UgYjRfZm9vX2Jpc29uX25hbWVzLCBhbmQgd2l0aCBjb3JyZWN0CisjIHF1b3Rpbmc6CisjCisjICAgYjRfY2hlY2tfdXNlcl9uYW1lcyhbW2Zvb11dLCBbYjRfZm9vX3VzZXJfbmFtZXNdLAorIyAgICAgICAgICAgICAgICAgICAgICAgW1tiNF9mb29fYmlzb25fbmFtZXNdXSkKK200X2RlZmluZShbYjRfY2hlY2tfdXNlcl9uYW1lc10sCitbbTRfZm9yZWFjaChbYjRfb2NjdXJyZW5jZV0sICQyLAorW200X3B1c2hkZWYoW2I0X29jY3VycmVuY2VdLCBiNF9vY2N1cnJlbmNlKWRubAorbTRfcHVzaGRlZihbYjRfdXNlcl9uYW1lXSwgbTRfY2FyKGI0X29jY3VycmVuY2UpKWRubAorbTRfcHVzaGRlZihbYjRfc3RhcnRdLCBtNF9jYXIobTRfc2hpZnQoYjRfb2NjdXJyZW5jZSkpKWRubAorbTRfcHVzaGRlZihbYjRfZW5kXSwgbTRfc2hpZnQobTRfc2hpZnQoYjRfb2NjdXJyZW5jZSkpKWRubAorbTRfaWZuZGVmKCQzWyhdbTRfcXVvdGUoYjRfdXNlcl9uYW1lKVspXSwKKyAgICAgICAgICBbYjRfY29tcGxhaW5fYXQoW2I0X3N0YXJ0XSwgW2I0X2VuZF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtbJXMgJyVzJyBpcyBub3QgdXNlZF1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbJDFdLCBbYjRfdXNlcl9uYW1lXSldKVtdZG5sCittNF9wb3BkZWYoW2I0X29jY3VycmVuY2VdKWRubAorbTRfcG9wZGVmKFtiNF91c2VyX25hbWVdKWRubAorbTRfcG9wZGVmKFtiNF9zdGFydF0pZG5sCittNF9wb3BkZWYoW2I0X2VuZF0pZG5sCitdKV0pCisKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgYjRfcGVyY2VudF9kZWZpbmVfKi4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIGI0X3BlcmNlbnRfZGVmaW5lX3VzZShWQVJJQUJMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWNsYXJlIHRoYXQgVkFSSUFCTEUgd2FzIHVzZWQuCittNF9kZWZpbmUoW2I0X3BlcmNlbnRfZGVmaW5lX3VzZV0sCitbbTRfZGVmaW5lKFtiNF9wZXJjZW50X2RlZmluZV9iaXNvbl92YXJpYWJsZXMoXSQxWyldKWRubAorXSkKKworIyBiNF9wZXJjZW50X2RlZmluZV9nZXQoVkFSSUFCTEUsIFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1pbWljIG11c2NsZV9wZXJjZW50X2RlZmluZV9nZXQgaW4gLi4vc3JjL211c2NsZS10YWIuaC4gIFRoYXQgaXMsIGlmCisjIHRoZSAlZGVmaW5lIHZhcmlhYmxlIFZBUklBQkxFIGlzIGRlZmluZWQsIGVtaXQgaXRzIHZhbHVlLiAgQ29udHJhcnkKKyMgdG8gaXRzIEMgY291bnRlcnBhcnQsIHJldHVybiBERUZBVUxUIG90aGVyd2lzZS4gIEFsc28sIHJlY29yZAorIyBCaXNvbidzIHVzYWdlIG9mIFZBUklBQkxFIGJ5IGRlZmluaW5nCisjIGI0X3BlcmNlbnRfZGVmaW5lX2Jpc29uX3ZhcmlhYmxlcyhWQVJJQUJMRSkuCisjCisjIEZvciBleGFtcGxlOgorIworIyAgIGI0X3BlcmNlbnRfZGVmaW5lX2dldChbW2Zvb11dKQorbTRfZGVmaW5lKFtiNF9wZXJjZW50X2RlZmluZV9nZXRdLAorW2I0X3BlcmNlbnRfZGVmaW5lX3VzZShbJDFdKWRubAorbTRfaWZkZWYoW2I0X3BlcmNlbnRfZGVmaW5lKF0kMVspXSwKKyAgICAgICAgIFttNF9pbmRpcihbYjRfcGVyY2VudF9kZWZpbmUoXSQxWyldKV0sCisgICAgICAgICBbJDJdKV0pCisKKworIyBiNF9wZXJjZW50X2RlZmluZV9nZXRfbG9jKFZBUklBQkxFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNaW1pYyBtdXNjbGVfcGVyY2VudF9kZWZpbmVfZ2V0X2xvYyBpbiAuLi9zcmMvbXVzY2xlLXRhYi5oIGV4YWN0bHkuICBUaGF0IGlzLAorIyBpZiB0aGUgJWRlZmluZSB2YXJpYWJsZSBWQVJJQUJMRSBpcyB1bmRlZmluZWQsIGNvbXBsYWluIGZhdGFsbHkgc2luY2UgdGhhdCdzCisjIGEgQmlzb24gb3Igc2tlbGV0b24gZXJyb3IuICBPdGhlcndpc2UsIHJldHVybiBpdHMgZGVmaW5pdGlvbiBsb2NhdGlvbiBpbiBhCisjIGZvcm0gYXBwcm9yaWF0ZSBmb3IgdGhlIGZpcnN0IHR3byBhcmd1bWVudHMgb2YgYjRfd2Fybl9hdCwgYjRfY29tcGxhaW5fYXQsIG9yCisjIGI0X2ZhdGFsX2F0LiAgRG9uJ3QgcmVjb3JkIHRoaXMgYXMgYSBCaXNvbiB1c2FnZSBvZiBWQVJJQUJMRSBhcyB0aGVyZSdzIG5vCisjIHJlYXNvbiB0byBzdXNwZWN0IHRoYXQgdGhlIHVzZXItc3VwcGxpZWQgdmFsdWUgaGFzIHlldCBpbmZsdWVuY2VkIHRoZSBvdXRwdXQuCisjCisjIEZvciBleGFtcGxlOgorIworIyAgIGI0X2NvbXBsYWluX2F0KGI0X3BlcmNlbnRfZGVmaW5lX2dldF9sb2MoW1tmb29dXSksIFtbaW52YWxpZCBmb29dXSkKK200X2RlZmluZShbYjRfcGVyY2VudF9kZWZpbmVfZ2V0X2xvY10sCitbbTRfaWZkZWYoW2I0X3BlcmNlbnRfZGVmaW5lX2xvYyhdJDFbKV0sCisgICAgICAgICAgW200X3B1c2hkZWYoW2I0X2xvY10sIG00X2luZGlyKFtiNF9wZXJjZW50X2RlZmluZV9sb2MoXSQxWyldKSlkbmwKK2I0X2xvY1tdZG5sCittNF9wb3BkZWYoW2I0X2xvY10pXSwKKyAgICAgICAgICBbYjRfZmF0YWwoW1tiNF9wZXJjZW50X2RlZmluZV9nZXRfbG9jOiB1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgJyVzJ11dLCBbJDFdKV0pXSkKKworIyBiNF9wZXJjZW50X2RlZmluZV9nZXRfc3luY2xpbmUoVkFSSUFCTEUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTWltaWMgbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2dldF9zeW5jbGluZSBpbiAuLi9zcmMvbXVzY2xlLXRhYi5oIGV4YWN0bHkuCisjIFRoYXQgaXMsIGlmIHRoZSAlZGVmaW5lIHZhcmlhYmxlIFZBUklBQkxFIGlzIHVuZGVmaW5lZCwgY29tcGxhaW4gZmF0YWxseQorIyBzaW5jZSB0aGF0J3MgYSBCaXNvbiBvciBza2VsZXRvbiBlcnJvci4gIE90aGVyd2lzZSwgcmV0dXJuIGl0cyBkZWZpbml0aW9uCisjIGxvY2F0aW9uIGFzIGEgYjRfc3luY2xpbmUgaW52b2NhdGlvbi4gIERvbid0IHJlY29yZCB0aGlzIGFzIGEgQmlzb24gdXNhZ2Ugb2YKKyMgVkFSSUFCTEUgYXMgdGhlcmUncyBubyByZWFzb24gdG8gc3VzcGVjdCB0aGF0IHRoZSB1c2VyLXN1cHBsaWVkIHZhbHVlIGhhcyB5ZXQKKyMgaW5mbHVlbmNlZCB0aGUgb3V0cHV0LgorIworIyBGb3IgZXhhbXBsZToKKyMKKyMgICBiNF9wZXJjZW50X2RlZmluZV9nZXRfc3luY2xpbmUoW1tmb29dXSkKK200X2RlZmluZShbYjRfcGVyY2VudF9kZWZpbmVfZ2V0X3N5bmNsaW5lXSwKK1ttNF9pZmRlZihbYjRfcGVyY2VudF9kZWZpbmVfc3luY2xpbmUoXSQxWyldLAorICAgICAgICAgIFttNF9pbmRpcihbYjRfcGVyY2VudF9kZWZpbmVfc3luY2xpbmUoXSQxWyldKV0sCisgICAgICAgICAgW2I0X2ZhdGFsKFtbYjRfcGVyY2VudF9kZWZpbmVfZ2V0X3N5bmNsaW5lOiB1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgJyVzJ11dLCBbJDFdKV0pXSkKKworIyBiNF9wZXJjZW50X2RlZmluZV9pZmRlZihWQVJJQUJMRSwgSUYtVFJVRSwgW0lGLUZBTFNFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1pbWljIG11c2NsZV9wZXJjZW50X2RlZmluZV9pZmRlZiBpbiAuLi9zcmMvbXVzY2xlLXRhYi5oIGV4YWN0bHkuICBUaGF0IGlzLAorIyBpZiB0aGUgJWRlZmluZSB2YXJpYWJsZSBWQVJJQUJMRSBpcyBkZWZpbmVkLCBleHBhbmQgSUYtVFJVRSwgZWxzZSBleHBhbmQKKyMgSUYtRkFMU0UuICBBbHNvLCByZWNvcmQgQmlzb24ncyB1c2FnZSBvZiBWQVJJQUJMRSBieSBkZWZpbmluZworIyBiNF9wZXJjZW50X2RlZmluZV9iaXNvbl92YXJpYWJsZXMoVkFSSUFCTEUpLgorIworIyBGb3IgZXhhbXBsZToKKyMKKyMgICBiNF9wZXJjZW50X2RlZmluZV9pZmRlZihbW2Zvb11dLCBbW2l0J3MgZGVmaW5lZF1dLCBbW2l0J3MgdW5kZWZpbmVkXV0pCittNF9kZWZpbmUoW2I0X3BlcmNlbnRfZGVmaW5lX2lmZGVmXSwKK1ttNF9pZmRlZihbYjRfcGVyY2VudF9kZWZpbmUoXSQxWyldLAorCSAgW200X2RlZmluZShbYjRfcGVyY2VudF9kZWZpbmVfYmlzb25fdmFyaWFibGVzKF0kMVspXSkkMl0sCisJICBbJDNdKV0pCisKKyMgYjRfcGVyY2VudF9kZWZpbmVfZmxhZ19pZihWQVJJQUJMRSwgSUYtVFJVRSwgW0lGLUZBTFNFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTWltaWMgbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2ZsYWdfaWYgaW4gLi4vc3JjL211c2NsZS10YWIuaCBleGFjdGx5LiAgVGhhdCBpcywKKyMgaWYgdGhlICVkZWZpbmUgdmFyaWFibGUgVkFSSUFCTEUgaXMgZGVmaW5lZCB0byAiIiBvciAidHJ1ZSIsIGV4cGFuZCBJRi1UUlVFLgorIyBJZiBpdCBpcyBkZWZpbmVkIHRvICJmYWxzZSIsIGV4cGFuZCBJRi1GQUxTRS4gIENvbXBsYWluIGlmIGl0IGlzIHVuZGVmaW5lZAorIyAoYSBCaXNvbiBvciBza2VsZXRvbiBlcnJvciBzaW5jZSB0aGUgZGVmYXVsdCB2YWx1ZSBzaG91bGQgaGF2ZSBiZWVuIHNldAorIyBhbHJlYWR5KSBvciBkZWZpbmVkIHRvIGFueSBvdGhlciB2YWx1ZSAocG9zc2libHkgYSB1c2VyIGVycm9yKS4gIEFsc28sIHJlY29yZAorIyBCaXNvbidzIHVzYWdlIG9mIFZBUklBQkxFIGJ5IGRlZmluaW5nCisjIGI0X3BlcmNlbnRfZGVmaW5lX2Jpc29uX3ZhcmlhYmxlcyhWQVJJQUJMRSkuCisjCisjIEZvciBleGFtcGxlOgorIworIyAgIGI0X3BlcmNlbnRfZGVmaW5lX2ZsYWdfaWYoW1tmb29dXSwgW1tpdCdzIHRydWVdXSwgW1tpdCdzIGZhbHNlXV0pCittNF9kZWZpbmUoW2I0X3BlcmNlbnRfZGVmaW5lX2ZsYWdfaWZdLAorW2I0X3BlcmNlbnRfZGVmaW5lX2lmZGVmKFskMV0sCisgIFttNF9jYXNlKGI0X3BlcmNlbnRfZGVmaW5lX2dldChbJDFdKSwKKyAgICAgICAgICAgW10sIFskMl0sIFt0cnVlXSwgWyQyXSwgW2ZhbHNlXSwgWyQzXSwKKyAgICAgICAgICAgW200X2V4cGFuZF9vbmNlKFtiNF9jb21wbGFpbl9hdChiNF9wZXJjZW50X2RlZmluZV9nZXRfbG9jKFskMV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbaW52YWxpZCB2YWx1ZSBmb3IgJSVkZWZpbmUgQm9vbGVhbiB2YXJpYWJsZSAnJXMnXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyQxXSldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tiNF9wZXJjZW50X2RlZmluZV9mbGFnX2lmKCQxKV1dKV0pXSwKKyAgW2I0X2ZhdGFsKFtbYjRfcGVyY2VudF9kZWZpbmVfZmxhZ19pZjogdW5kZWZpbmVkICUlZGVmaW5lIHZhcmlhYmxlICclcyddXSwgWyQxXSldKV0pCisKKyMgYjRfcGVyY2VudF9kZWZpbmVfZGVmYXVsdChWQVJJQUJMRSwgREVGQVVMVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTWltaWMgbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2RlZmF1bHQgaW4gLi4vc3JjL211c2NsZS10YWIuaCBleGFjdGx5LiAgVGhhdCBpcywKKyMgaWYgdGhlICVkZWZpbmUgdmFyaWFibGUgVkFSSUFCTEUgaXMgdW5kZWZpbmVkLCBzZXQgaXRzIHZhbHVlIHRvIERFRkFVTFQuCisjIERvbid0IHJlY29yZCB0aGlzIGFzIGEgQmlzb24gdXNhZ2Ugb2YgVkFSSUFCTEUgYXMgdGhlcmUncyBubyByZWFzb24gdG8KKyMgc3VzcGVjdCB0aGF0IHRoZSB2YWx1ZSBoYXMgeWV0IGluZmx1ZW5jZWQgdGhlIG91dHB1dC4KKyMKKyMgRm9yIGV4YW1wbGU6CisjCisjICAgYjRfcGVyY2VudF9kZWZpbmVfZGVmYXVsdChbW2Zvb11dLCBbW2RlZmF1bHQgdmFsdWVdXSkKK200X2RlZmluZShbYjRfcGVyY2VudF9kZWZpbmVfZGVmYXVsdF0sCitbbTRfaWZuZGVmKFtiNF9wZXJjZW50X2RlZmluZShdJDFbKV0sCisgICAgICAgICAgIFttNF9kZWZpbmUoW2I0X3BlcmNlbnRfZGVmaW5lKF0kMVspXSwgWyQyXSlkbmwKKyAgICAgICAgICAgIG00X2RlZmluZShbYjRfcGVyY2VudF9kZWZpbmVfbG9jKF0kMVspXSwKKyAgICAgICAgICAgICAgICAgICAgICBbW1tbPHNrZWxldG9uIGRlZmF1bHQgdmFsdWU+Oi0xLi0xXV0sCisgICAgICAgICAgICAgICAgICAgICAgICBbWzxza2VsZXRvbiBkZWZhdWx0IHZhbHVlPjotMS4tMV1dXV0pZG5sCisgICAgICAgICAgICBtNF9kZWZpbmUoW2I0X3BlcmNlbnRfZGVmaW5lX3N5bmNsaW5lKF0kMVspXSwgW1tdXSldKV0pCisKKyMgYjRfcGVyY2VudF9kZWZpbmVfY2hlY2tfdmFsdWVzKFZBTFVFUykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTWltaWMgbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2NoZWNrX3ZhbHVlcyBpbiAuLi9zcmMvbXVzY2xlLXRhYi5oIGV4YWN0bHkKKyMgZXhjZXB0IHRoYXQgdGhlIFZBTFVFUyBzdHJ1Y3R1cmUgaXMgbW9yZSBhcHByb3ByaWF0ZSBmb3IgTTQuICBUaGF0IGlzLCBWQUxVRVMKKyMgaXMgYSBsaXN0IG9mIHN1Ymxpc3RzIG9mIHN0cmluZ3MuICBGb3IgZWFjaCBzdWJsaXN0LCB0aGUgZmlyc3Qgc3RyaW5nIGlzIHRoZQorIyBuYW1lIG9mIGEgJWRlZmluZSB2YXJpYWJsZSwgYW5kIGFsbCByZW1haW5pbmcgc3RyaW5ncyBpbiB0aGF0IHN1Ymxpc3QgYXJlIHRoZQorIyB2YWxpZCB2YWx1ZXMgZm9yIHRoYXQgdmFyaWFibGUuICBDb21wbGFpbiBpZiBzdWNoIGEgdmFyaWFibGUgaXMgdW5kZWZpbmVkIChhCisjIEJpc29uIGVycm9yIHNpbmNlIHRoZSBkZWZhdWx0IHZhbHVlIHNob3VsZCBoYXZlIGJlZW4gc2V0IGFscmVhZHkpIG9yIGRlZmluZWQKKyMgdG8gYW55IG90aGVyIHZhbHVlIChwb3NzaWJseSBhIHVzZXIgZXJyb3IpLiAgRG9uJ3QgcmVjb3JkIHRoaXMgYXMgYSBCaXNvbgorIyB1c2FnZSBvZiB0aGUgdmFyaWFibGUgYXMgdGhlcmUncyBubyByZWFzb24gdG8gc3VzcGVjdCB0aGF0IHRoZSB2YWx1ZSBoYXMgeWV0CisjIGluZmx1ZW5jZWQgdGhlIG91dHB1dC4KKyMKKyMgRm9yIGV4YW1wbGU6CisjCisjICAgYjRfcGVyY2VudF9kZWZpbmVfY2hlY2tfdmFsdWVzKFtbW1tmb29dXSwgW1tmb28tdmFsdWUxXV0sIFtbZm9vLXZhbHVlMl1dXV0sCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbW1tiYXJdXSwgW1tiYXItdmFsdWUxXV1dXSkKK200X2RlZmluZShbYjRfcGVyY2VudF9kZWZpbmVfY2hlY2tfdmFsdWVzXSwKK1ttNF9mb3JlYWNoKFtiNF9zdWJsaXN0XSwgbTRfcXVvdGUoJEApLAorICAgICAgICAgICAgW19iNF9wZXJjZW50X2RlZmluZV9jaGVja192YWx1ZXMoYjRfc3VibGlzdCldKV0pCisKK200X2RlZmluZShbX2I0X3BlcmNlbnRfZGVmaW5lX2NoZWNrX3ZhbHVlc10sCitbbTRfaWZkZWYoW2I0X3BlcmNlbnRfZGVmaW5lKF0kMVspXSwKKyAgW200X3B1c2hkZWYoW2I0X2dvb2RfdmFsdWVdLCBbMF0pZG5sCisgICBtNF9pZigkIywgMSwgW10sCisgICAgICAgICBbbTRfZm9yZWFjaChbYjRfdmFsdWVdLCBtNF9kcXVvdGUobTRfc2hpZnQoJEApKSwKKyAgICAgICAgICAgICAgICAgICAgIFttNF9pZihtNF9pbmRpcihbYjRfcGVyY2VudF9kZWZpbmUoXSQxWyldKSwgYjRfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW200X2RlZmluZShbYjRfZ29vZF92YWx1ZV0sIFsxXSldKV0pXSlkbmwKKyAgIG00X2lmKGI0X2dvb2RfdmFsdWUsIFswXSwKKyAgICAgICAgIFtiNF9jb21wbGFpbl9hdChiNF9wZXJjZW50X2RlZmluZV9nZXRfbG9jKFskMV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtbaW52YWxpZCB2YWx1ZSBmb3IgJSVkZWZpbmUgdmFyaWFibGUgJyVzJzogJyVzJ11dLAorICAgICAgICAgICAgICAgICAgICAgICAgIFskMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgbTRfZHF1b3RlKG00X2luZGlyKFtiNF9wZXJjZW50X2RlZmluZShdJDFbKV0pKSkKKyAgICAgICAgICBtNF9mb3JlYWNoKFtiNF92YWx1ZV0sIG00X2RxdW90ZShtNF9zaGlmdCgkQCkpLAorICAgICAgICAgICAgICAgICAgICAgW2I0X2NvbXBsYWluX2F0KGI0X3BlcmNlbnRfZGVmaW5lX2dldF9sb2MoWyQxXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1thY2NlcHRlZCB2YWx1ZTogJyVzJ11dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG00X2RxdW90ZShiNF92YWx1ZSkpXSldKWRubAorICAgbTRfcG9wZGVmKFtiNF9nb29kX3ZhbHVlXSldLAorICBbYjRfZmF0YWwoW1tiNF9wZXJjZW50X2RlZmluZV9jaGVja192YWx1ZXM6IHVuZGVmaW5lZCAlJWRlZmluZSB2YXJpYWJsZSAnJXMnXV0sIFskMV0pXSldKQorCisjIGI0X3BlcmNlbnRfY29kZV9nZXQoW1FVQUxJRklFUl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmIGFueSAlY29kZSBibG9ja3MgZm9yIFFVQUxJRklFUiBhcmUgZGVmaW5lZCwgZW1pdCB0aGVtIGJlZ2lubmluZyB3aXRoIGEKKyMgY29tbWVudCBhbmQgZW5kaW5nIHdpdGggc3luY2xpbmVzIGFuZCBhIG5ld2xpbmUuICBJZiBRVUFMSUZJRVIgaXMgbm90CisjIHNwZWNpZmllZCBvciBlbXB0eSwgZG8gdGhpcyBmb3IgdGhlIHVucXVhbGlmaWVkICVjb2RlIGJsb2Nrcy4gIEFsc28sIHJlY29yZAorIyBCaXNvbidzIHVzYWdlIG9mIFFVQUxJRklFUiAoaWYgc3BlY2lmaWVkKSBieSBkZWZpbmluZworIyBiNF9wZXJjZW50X2NvZGVfYmlzb25fcXVhbGlmaWVycyhRVUFMSUZJRVIpLgorIworIyBGb3IgZXhhbXBsZSwgdG8gZW1pdCBhbnkgdW5xdWFsaWZpZWQgJWNvZGUgYmxvY2tzIGZvbGxvd2VkIGJ5IGFueSAlY29kZQorIyBibG9ja3MgZm9yIHRoZSBxdWFsaWZpZXIgZm9vOgorIworIyAgIGI0X3BlcmNlbnRfY29kZV9nZXQKKyMgICBiNF9wZXJjZW50X2NvZGVfZ2V0KFtbZm9vXV0pCittNF9kZWZpbmUoW2I0X3BlcmNlbnRfY29kZV9nZXRdLAorW200X3B1c2hkZWYoW2I0X21hY3JvX25hbWVdLCBbW2I0X3BlcmNlbnRfY29kZShdJDFbKV1dKWRubAorbTRfaWZ2YWwoWyQxXSwgW200X2RlZmluZShbYjRfcGVyY2VudF9jb2RlX2Jpc29uX3F1YWxpZmllcnMoXSQxWyldKV0pZG5sCittNF9pZmRlZihiNF9tYWNyb19uYW1lLAorW2I0X2NvbW1lbnQoW200X2lmKFskI10sIFswXSwgW1tVbnF1YWxpZmllZCAlY29kZV1dLAorICAgICAgICAgICAgICAgICAgIFtbIiVjb2RlIF0kMVsiXV0pWyBibG9ja3MuXV0pCitiNF91c2VyX2NvZGUoW200X2luZGlyKGI0X21hY3JvX25hbWUpXSkKK10pZG5sCittNF9wb3BkZWYoW2I0X21hY3JvX25hbWVdKV0pCisKKyMgYjRfcGVyY2VudF9jb2RlX2lmZGVmKFFVQUxJRklFUiwgSUYtVFJVRSwgW0lGLUZBTFNFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSWYgYW55ICVjb2RlIGJsb2NrcyBmb3IgUVVBTElGSUVSIChvciB1bnF1YWxpZmllZCAlY29kZSBibG9ja3MgaWYKKyMgUVVBTElGSUVSIGlzIGVtcHR5KSBhcmUgZGVmaW5lZCwgZXhwYW5kIElGLVRSVUUsIGVsc2UgZXhwYW5kIElGLUZBTFNFLgorIyBBbHNvLCByZWNvcmQgQmlzb24ncyB1c2FnZSBvZiBRVUFMSUZJRVIgKGlmIHNwZWNpZmllZCkgYnkgZGVmaW5pbmcKKyMgYjRfcGVyY2VudF9jb2RlX2Jpc29uX3F1YWxpZmllcnMoUVVBTElGSUVSKS4KK200X2RlZmluZShbYjRfcGVyY2VudF9jb2RlX2lmZGVmXSwKK1ttNF9pZmRlZihbYjRfcGVyY2VudF9jb2RlKF0kMVspXSwKKyAgICAgICAgICBbbTRfaWZ2YWwoWyQxXSwgW200X2RlZmluZShbYjRfcGVyY2VudF9jb2RlX2Jpc29uX3F1YWxpZmllcnMoXSQxWyldKV0pJDJdLAorCSAgWyQzXSldKQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBBZnRlciBwcm9jZXNzaW5nIHRoZSBza2VsZXRvbnMsIGNoZWNrIHRoYXQgYWxsIHRoZSB1c2VyJ3MgICAjIworIyMgJWRlZmluZSB2YXJpYWJsZXMgYW5kICVjb2RlIHF1YWxpZmllcnMgd2VyZSB1c2VkIGJ5IEJpc29uLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK200X2RlZmluZShbYjRfY2hlY2tfdXNlcl9uYW1lc193cmFwXSwKK1ttNF9pZmRlZihbYjRfcGVyY2VudF9dJDFbX3VzZXJfXSQyW3NdLAorICAgICAgICAgIFtiNF9jaGVja191c2VyX25hbWVzKFtbJV0kMSAkMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2I0X3BlcmNlbnRfXSQxW191c2VyX10kMltzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2I0X3BlcmNlbnRfXSQxW19iaXNvbl9dJDJbc11dKV0pXSkKKworbTRfd3JhcF9saWZvKFsKK2I0X2NoZWNrX3VzZXJfbmFtZXNfd3JhcChbW2RlZmluZV1dLCBbW3ZhcmlhYmxlXV0pCitiNF9jaGVja191c2VyX25hbWVzX3dyYXAoW1tjb2RlXV0sIFtbcXVhbGlmaWVyXV0pCitdKQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIERlZmF1bHQgdmFsdWVzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBtNF9kZWZpbmVfZGVmYXVsdChbYjRfbGV4X3BhcmFtXSwgW10pICAgZG5sIGJyZWFrcyBvdGhlciBza2VsZXRvbnMKK200X2RlZmluZV9kZWZhdWx0KFtiNF9wcmVfcHJvbG9ndWVdLCBbXSkKK200X2RlZmluZV9kZWZhdWx0KFtiNF9wb3N0X3Byb2xvZ3VlXSwgW10pCittNF9kZWZpbmVfZGVmYXVsdChbYjRfZXBpbG9ndWVdLCBbXSkKK200X2RlZmluZV9kZWZhdWx0KFtiNF9wYXJzZV9wYXJhbV0sIFtdKQorCisjIFRoZSBpbml0aWFsIGNvbHVtbiBhbmQgbGluZS4KK200X2RlZmluZV9kZWZhdWx0KFtiNF9sb2NhdGlvbl9pbml0aWFsX2NvbHVtbl0sIFsxXSkKK200X2RlZmluZV9kZWZhdWx0KFtiNF9sb2NhdGlvbl9pbml0aWFsX2xpbmVdLCAgIFsxXSkKKworIyBTYW5pdHkgY2hlY2tzLgorYjRfcGVyY2VudF9kZWZpbmVfaWZkZWYoW2FwaS5wcmVmaXhdLAorW200X2lmZGVmKFtiNF9wcmVmaXhdLAorW2I0X2NvbXBsYWluX2F0KGI0X3BlcmNlbnRfZGVmaW5lX2dldF9sb2MoW2FwaS5wcmVmaXhdKSwKKyAgICAgICAgICAgICAgICBbWyclcycgYW5kICclcycgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXJdXSwKKyAgICAgICAgICAgICAgICBbJW5hbWUtcHJlZml4XSwKKyAgICAgICAgICAgICAgICBbJWRlZmluZSBhcGkucHJlZml4XSldKV0pCmRpZmYgLS1naXQgYS9kYXRhL2MrKy1za2VsLm00IGIvZGF0YS9jKystc2tlbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDIxZDE4Ci0tLSAvZGV2L251bGwKKysrIGIvZGF0YS9jKystc2tlbC5tNApAQCAtMCwwICsxLDI2IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQysrIHNrZWxldG9uIGRpc3BhdGNoaW5nIGZvciBCaXNvbi4KKworIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitiNF9nbHJfaWYoICAgICAgICAgICAgIFttNF9kZWZpbmUoW2I0X3VzZWRfc2tlbGV0b25dLCBbYjRfcGtnZGF0YWRpci9bZ2xyLmNjXV0pXSkKK2I0X25vbmRldGVybWluaXN0aWNfaWYoW200X2RlZmluZShbYjRfdXNlZF9za2VsZXRvbl0sIFtiNF9wa2dkYXRhZGlyL1tnbHIuY2NdXSldKQorCittNF9kZWZpbmVfZGVmYXVsdChbYjRfdXNlZF9za2VsZXRvbl0sIFtiNF9wa2dkYXRhZGlyL1tsYWxyMS5jY11dKQorbTRfZGVmaW5lX2RlZmF1bHQoW2I0X3NrZWxldG9uXSwgWyJiNF9iYXNlbmFtZShiNF91c2VkX3NrZWxldG9uKSJdKQorCittNF9pbmNsdWRlKGI0X3VzZWRfc2tlbGV0b24pCmRpZmYgLS1naXQgYS9kYXRhL2MrKy5tNCBiL2RhdGEvYysrLm00CmluZGV4IDU3YWVlMGMuLjhiOThiOGMgMTAwNjQ0Ci0tLSBhL2RhdGEvYysrLm00CisrKyBiL2RhdGEvYysrLm00CkBAIC0xLDIzICsxLDIxIEBACi1tNF9kaXZlcnQoLTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCiAKICMgQysrIHNrZWxldG9uIGZvciBCaXNvbgogCi0jIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDAyLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKICMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQorIwogIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCisjCiAjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSMgMDIxMTAtMTMwMSAgVVNBCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCiBtNF9pbmNsdWRlKGI0X3BrZ2RhdGFkaXIvW2MubTRdKQogCkBAIC0yNiwxMCArMjQsNjQgQEAKICMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKIAogIyBEZWZhdWx0IHBhcnNlciBjbGFzcyBuYW1lLgotbTRfZGVmaW5lX2RlZmF1bHQoW2I0X3BhcnNlcl9jbGFzc19uYW1lXSwgW3BhcnNlcl0pCi1tNF9kZWZpbmVfZGVmYXVsdChbYjRfbG9jYXRpb25fdHlwZV0sIFtsb2NhdGlvbl0pCi1tNF9kZWZpbmVfZGVmYXVsdChbYjRfZmlsZW5hbWVfdHlwZV0sIFtzdGQ6OnN0cmluZ10pCi1tNF9kZWZpbmVfZGVmYXVsdChbYjRfbmFtZXNwYWNlXSwgbTRfZGVmbihbYjRfcHJlZml4XSkpCitiNF9wZXJjZW50X2RlZmluZV9kZWZhdWx0KFtbcGFyc2VyX2NsYXNzX25hbWVdXSwgW1twYXJzZXJdXSkKKworIyBEb24ndCBkbyB0aGF0IHNvIHRoYXQgd2UgcmVtZW1iZXIgd2hldGhlciB3ZSdyZSB1c2luZyBhIHVzZXIKKyMgcmVxdWVzdCwgb3IgdGhlIGRlZmF1bHQgdmFsdWUuCisjCisjIGI0X3BlcmNlbnRfZGVmaW5lX2RlZmF1bHQoW1thcGkubG9jYXRpb24udHlwZV1dLCBbW2xvY2F0aW9uXV0pCisKK2I0X3BlcmNlbnRfZGVmaW5lX2RlZmF1bHQoW1tmaWxlbmFtZV90eXBlXV0sIFtbc3RkOjpzdHJpbmddXSkKK2I0X3BlcmNlbnRfZGVmaW5lX2RlZmF1bHQoW1tuYW1lc3BhY2VdXSwgbTRfZGVmbihbYjRfcHJlZml4XSkpCitiNF9wZXJjZW50X2RlZmluZV9kZWZhdWx0KFtbZ2xvYmFsX3Rva2Vuc19hbmRfeXlzdHlwZV1dLCBbW2ZhbHNlXV0pCitiNF9wZXJjZW50X2RlZmluZV9kZWZhdWx0KFtbZGVmaW5lX2xvY2F0aW9uX2NvbXBhcmlzb25dXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW200X2lmKGI0X3BlcmNlbnRfZGVmaW5lX2dldChbW2ZpbGVuYW1lX3R5cGVdXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RkOjpzdHJpbmddLCBbW3RydWVdXSwgW1tmYWxzZV1dKV0pCisKKworIyMgLS0tLS0tLS0tLS0gIyMKKyMjIE5hbWVzcGFjZS4gICMjCisjIyAtLS0tLS0tLS0tLSAjIworCittNF9kZWZpbmUoW2I0X25hbWVzcGFjZV9yZWZdLCBbYjRfcGVyY2VudF9kZWZpbmVfZ2V0KFtbbmFtZXNwYWNlXV0pXSkKKworIyBEb24ndCBwZXJtaXQgYW4gZW1wdHkgYjRfbmFtZXNwYWNlX3JlZi4gIEFueSBgOjpwYXJzZXI6OmZvbycgYXBwZW5kZWQgdG8gaXQKKyMgd291bGQgY29tcGlsZSBhcyBhbiBhYnNvbHV0ZSByZWZlcmVuY2Ugd2l0aCBgcGFyc2VyJyBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZS4KKyMgYjRfbmFtZXNwYWNlX29wZW4gd291bGQgb3BlbiBhbiBhbm9ueW1vdXMgbmFtZXNwYWNlIGFuZCB0aHVzIGVzdGFibGlzaAorIyBpbnRlcm5hbCBsaW5rYWdlLiAgVGhpcyB3b3VsZCBjb21waWxlLiAgSG93ZXZlciwgaXQncyBjcnlwdGljLCBhbmQgaW50ZXJuYWwKKyMgbGlua2FnZSBmb3IgdGhlIHBhcnNlciB3b3VsZCBiZSBzcGVjaWZpZWQgaW4gYWxsIHRyYW5zbGF0aW9uIHVuaXRzIHRoYXQKKyMgaW5jbHVkZSB0aGUgaGVhZGVyLCB3aGljaCBpcyBhbHdheXMgZ2VuZXJhdGVkLiAgSWYgd2UgZXZlciBuZWVkIHRvIHBlcm1pdAorIyBpbnRlcm5hbCBsaW5rYWdlIHNvbWVob3csIHN1cmVseSB3ZSBjYW4gZmluZCBhIGNsZWFuZXIgYXBwcm9hY2guCittNF9pZihtNF9icmVnZXhwKGI0X25hbWVzcGFjZV9yZWYsIFteWwkgXSokXSksIFstMV0sIFtdLAorW2I0X2NvbXBsYWluX2F0KGI0X3BlcmNlbnRfZGVmaW5lX2dldF9sb2MoW1tuYW1lc3BhY2VdXSksCisgICAgICAgICAgICAgICAgW1tuYW1lc3BhY2UgcmVmZXJlbmNlIGlzIGVtcHR5XV0pXSkKKworIyBJbnN0ZWFkIG9mIGFzc3VtaW5nIHRoZSBDKysgY29tcGlsZXIgd2lsbCBkbyBpdCwgQmlzb24gc2hvdWxkIHJlamVjdCBhbnkKKyMgaW52YWxpZCBiNF9uYW1lcHNhY2VfcmVmIHRoYXQgd291bGQgYmUgY29udmVydGVkIHRvIGEgdmFsaWQKKyMgYjRfbmFtZXNwYWNlX29wZW4uICBUaGUgcHJvYmxlbSBpcyB0aGF0IEJpc29uIGRvZXNuJ3QgYWx3YXlzIG91dHB1dAorIyBiNF9uYW1lc3BhY2VfcmVmIHRvIHVuY29tbWVudGVkIGNvZGUgYnV0IHNob3VsZCByZXNlcnZlIHRoZSBhYmlsaXR5IHRvIGRvIHNvCisjIGluIGZ1dHVyZSByZWxlYXNlcyB3aXRob3V0IHJpc2tpbmcgYnJlYWtpbmcgYW55IGV4aXN0aW5nIHVzZXIgZ3JhbW1hcnMuCisjIFNwZWNpZmljYWxseSwgZG9uJ3QgYWxsb3cgZW1wdHkgbmFtZXMgYXMgYjRfbmFtZXNwYWNlX29wZW4gd291bGQganVzdCBjb252ZXJ0CisjIHRob3NlIGludG8gYW5vbnltb3VzIG5hbWVzcGFjZXMsIGFuZCB0aGF0IG1pZ2h0IHRlbXB0IHNvbWUgdXNlcnMuCittNF9pZihtNF9icmVnZXhwKGI0X25hbWVzcGFjZV9yZWYsIFs6OlsJIF0qOjpdKSwgWy0xXSwgW10sCitbYjRfY29tcGxhaW5fYXQoYjRfcGVyY2VudF9kZWZpbmVfZ2V0X2xvYyhbW25hbWVzcGFjZV1dKSwKKyAgICAgICAgICAgICAgICBbW25hbWVzcGFjZSByZWZlcmVuY2UgaGFzIGNvbnNlY3V0aXZlICI6OiJdXSldKQorbTRfaWYobTRfYnJlZ2V4cChiNF9uYW1lc3BhY2VfcmVmLCBbOjpbCSBdKiRdKSwgWy0xXSwgW10sCitbYjRfY29tcGxhaW5fYXQoYjRfcGVyY2VudF9kZWZpbmVfZ2V0X2xvYyhbW25hbWVzcGFjZV1dKSwKKyAgICAgICAgICAgICAgICBbW25hbWVzcGFjZSByZWZlcmVuY2UgaGFzIGEgdHJhaWxpbmcgIjo6Il1dKV0pCisKK200X2RlZmluZShbYjRfbmFtZXNwYWNlX29wZW5dLAorW2I0X3VzZXJfY29kZShbYjRfcGVyY2VudF9kZWZpbmVfZ2V0X3N5bmNsaW5lKFtbbmFtZXNwYWNlXV0pCitbbmFtZXNwYWNlIF1tNF9icGF0c3Vic3QobTRfZHF1b3RlKG00X2JwYXRzdWJzdChtNF9kcXVvdGUoYjRfbmFtZXNwYWNlX3JlZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXlwoLlwpWwkgXSo6Ol0sIFtcMV0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbOjpdLCBbIHsgbmFtZXNwYWNlIF0pWyB7XV0pXSkKKworbTRfZGVmaW5lKFtiNF9uYW1lc3BhY2VfY2xvc2VdLAorW2I0X3VzZXJfY29kZShbYjRfcGVyY2VudF9kZWZpbmVfZ2V0X3N5bmNsaW5lKFtbbmFtZXNwYWNlXV0pCittNF9icGF0c3Vic3QobTRfZHF1b3RlKG00X2JwYXRzdWJzdChtNF9kcXVvdGUoYjRfbmFtZXNwYWNlX3JlZlsgXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXlwoLlwpWwkgXSpcKDo6XCk/XChbXl1bOl1cfDpbXjpdXCkqXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcMV0pKSwKKyAgICAgICAgICAgICBbOjpcKFteXVs6XVx8OlteOl1cKSpdLCBbfSBdKVt9IC8vIF1iNF9uYW1lc3BhY2VfcmVmXSldKQogCiAKICMgYjRfdG9rZW5fZW51bXMoTElTVC1PRi1QQUlSUy1UT0tFTi1OQU1FLVRPS0VOLU5VTUJFUikKQEAgLTQ1LDYgKzk3LDggQEAKIF0pCiAKIAorCisKICMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCiAjIyBTZW1hbnRpYyBWYWx1ZXMuICAjIwogIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKQEAgLTk5LDcgKzE1Myw3IEBACiAjIEV4dHJhIGluaXRpYWxpc2F0aW9ucyBvZiB0aGUgY29uc3RydWN0b3IuCiBtNF9kZWZpbmUoW2I0X3BhcnNlX3BhcmFtX2NvbnNdLAogICAgICAgICAgIFttNF9pZnNldChbYjRfcGFyc2VfcGFyYW1dLAotCQkgICAgWywKKwkJICAgIFsKICAgICAgIGI0X2NjX2NvbnN0cnVjdG9yX2NhbGxzKGI0X3BhcnNlX3BhcmFtKV0pXSkKIG00X2RlZmluZShbYjRfY2NfY29uc3RydWN0b3JfY2FsbHNdLAogCSAgW200X21hcF9zZXAoW2I0X2NjX2NvbnN0cnVjdG9yX2NhbGxdLCBbLApAQCAtMTIwLDMgKzE3NCwzMiBAQAogXSwgWyRAXSldKQogbTRfZGVmaW5lKFtiNF9jY192YXJfZGVjbF0sCiAJICBbICAgICQxO10pCisKKworIyMgLS0tLS0tLS0tIyMKKyMjIFZhbHVlcy4gICMjCisjIyAtLS0tLS0tLS0jIworCisjIGI0X3l5bGxvY19kZWZhdWx0X2RlZmluZQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIFlZTExPQ19ERUZBVUxULgorbTRfZGVmaW5lKFtiNF95eWxsb2NfZGVmYXVsdF9kZWZpbmVdLAorW1svKiBZWUxMT0NfREVGQVVMVCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20gUkhTWzFdIHRvIFJIU1tOXS4KKyAgIElmIE4gaXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0aGUgZW1wdHkgbG9jYXRpb24gd2hpY2ggZW5kcworICAgdGhlIHByZXZpb3VzIHN5bWJvbDogUkhTWzBdIChhbHdheXMgZGVmaW5lZCkuICAqLworCisjIGlmbmRlZiBZWUxMT0NfREVGQVVMVAorIyAgZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYgKE4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChDdXJyZW50KS5iZWdpbiAgPSBZWVJIU0xPQyAoUmhzLCAxKS5iZWdpbjsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChDdXJyZW50KS5lbmQgICAgPSBZWVJIU0xPQyAoUmhzLCBOKS5lbmQ7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChDdXJyZW50KS5iZWdpbiA9IChDdXJyZW50KS5lbmQgPSBZWVJIU0xPQyAoUmhzLCAwKS5lbmQ7ICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHdoaWxlICgvKkNPTlNUQ09ORCovIGZhbHNlKQorIyBlbmRpZgorXV0pCmRpZmYgLS1naXQgYS9kYXRhL2MtbGlrZS5tNCBiL2RhdGEvYy1saWtlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYWJjZTcKLS0tIC9kZXYvbnVsbAorKysgYi9kYXRhL2MtbGlrZS5tNApAQCAtMCwwICsxLDQ0IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29tbW9uIGNvZGUgZm9yIEMtbGlrZSBsYW5ndWFnZXMgKEMsIEMrKywgSmF2YSwgZXRjLikKKworIyBDb3B5cmlnaHQgKEMpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgYjRfZG9sbGFyX2RvbGxhcl8oVkFMVUUsIEZJRUxELCBERUZBVUxULUZJRUxEKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmIEZJRUxEIChvciBERUZBVUxULUZJRUxEKSBpcyBub24tbnVsbCwgcmV0dXJuICJWQUxVRS5GSUVMRCIsCisjIG90aGVyd2lzZSBqdXN0IFZBTFVFLiAgQmUgc3VyZSB0byBwYXNzICIoVkFMVUUpIiBpcyBWQUxVRSBpcyBhCisjIHBvaW50ZXIuCittNF9kZWZpbmUoW2I0X2RvbGxhcl9kb2xsYXJfXSwKK1ttNF9pZihbJDJdLCBbW11dLAorICAgICAgIFttNF9pZnZhbChbJDNdLCBbKCQxLiQzKV0sCisgICAgICAgICAgICAgICAgIFskMV0pXSwKKyAgICAgICBbKCQxLiQyKV0pXSkKKworIyBiNF9kb2xsYXJfcHVzaGRlZihWQUxVRS1QT0lOVEVSLCBERUZBVUxULUZJRUxELCBMT0NBVElPTikKKyMgYjRfZG9sbGFyX3BvcGRlZgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIGI0X2RvbGxhcl9kb2xsYXIgZm9yIFZBTFVFIGFuZCBERUZBVUxULUZJRUxELAorIyBhbmQgYjRfYXRfZG9sbGFyIGZvciBMT0NBVElPTi4KK200X2RlZmluZShbYjRfZG9sbGFyX3B1c2hkZWZdLAorW200X3B1c2hkZWYoW2I0X2RvbGxhcl9kb2xsYXJdLAorICAgICAgICAgICAgW2I0X2RvbGxhcl9kb2xsYXJfKFskMV0sIG00X2RxdW90ZSgkXVsxKSwgWyQyXSldKWRubAorbTRfcHVzaGRlZihbYjRfYXRfZG9sbGFyXSwgWyQzXSlkbmwKK10pCittNF9kZWZpbmUoW2I0X2RvbGxhcl9wb3BkZWZdLAorW200X3BvcGRlZihbYjRfYXRfZG9sbGFyXSlkbmwKK200X3BvcGRlZihbYjRfZG9sbGFyX2RvbGxhcl0pZG5sCitdKQpkaWZmIC0tZ2l0IGEvZGF0YS9jLXNrZWwubTQgYi9kYXRhL2Mtc2tlbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmNhZTU5Ci0tLSAvZGV2L251bGwKKysrIGIvZGF0YS9jLXNrZWwubTQKQEAgLTAsMCArMSwyNiBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIEMgc2tlbGV0b24gZGlzcGF0Y2hpbmcgZm9yIEJpc29uLgorCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK2I0X2dscl9pZiggICAgICAgICAgICAgW200X2RlZmluZShbYjRfdXNlZF9za2VsZXRvbl0sIFtiNF9wa2dkYXRhZGlyL1tnbHIuY11dKV0pCitiNF9ub25kZXRlcm1pbmlzdGljX2lmKFttNF9kZWZpbmUoW2I0X3VzZWRfc2tlbGV0b25dLCBbYjRfcGtnZGF0YWRpci9bZ2xyLmNdXSldKQorCittNF9kZWZpbmVfZGVmYXVsdChbYjRfdXNlZF9za2VsZXRvbl0sIFtiNF9wa2dkYXRhZGlyL1t5YWNjLmNdXSkKK200X2RlZmluZV9kZWZhdWx0KFtiNF9za2VsZXRvbl0sIFsiYjRfYmFzZW5hbWUoYjRfdXNlZF9za2VsZXRvbikiXSkKKworbTRfaW5jbHVkZShiNF91c2VkX3NrZWxldG9uKQpkaWZmIC0tZ2l0IGEvZGF0YS9jLm00IGIvZGF0YS9jLm00CmluZGV4IGYxMGUwOTAuLmRjM2QzMDMgMTAwNjQ0Ci0tLSBhL2RhdGEvYy5tNAorKysgYi9kYXRhL2MubTQKQEAgLTEsMTAwICsxLDExNSBAQAotbTRfZGl2ZXJ0KC0xKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogCiAjIEMgTTQgTWFjcm9zIGZvciBCaXNvbi4KLSMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KKyMKICMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQorIwogIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0jIDAyMTEwLTEzMDEgIFVTQQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworbTRfaW5jbHVkZShiNF9wa2dkYXRhZGlyL1tjLWxpa2UubTRdKQorCisjIGI0X3RvY3BwKFNUUklORykKKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBDb252ZXJ0IFNUUklORyBpbnRvIGEgdmFsaWQgQyBtYWNybyBuYW1lLgorbTRfZGVmaW5lKFtiNF90b2NwcF0sCitbbTRfdG91cHBlcihtNF9icGF0c3Vic3QobTRfcXVvdGUoJDEpLCBbW15hLXpBLVowLTldK10sIFtfXSkpXSkKKworCisjIGI0X2NwcF9ndWFyZChGSUxFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgQSB2YWxpZCBDIG1hY3JvIG5hbWUgdG8gdXNlIGFzIGEgQ1BQIGhlYWRlciBndWFyZCBmb3IgRklMRS4KK200X2RlZmluZShbYjRfY3BwX2d1YXJkXSwKK1tbWVlfXWI0X3RvY3BwKG00X2RlZm4oW2I0X3ByZWZpeF0pL1skMV0pW19JTkNMVURFRF1dKQorCisKKyMgYjRfY3BwX2d1YXJkX29wZW4oRklMRSkKKyMgYjRfY3BwX2d1YXJkX2Nsb3NlKEZJTEUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJZiBGSUxFIGRvZXMgbm90IGV4cGFuZCB0byBub3RoaW5nLCBvcGVuL2Nsb3NlIENQUCBpbmNsdXNpb24gZ3VhcmRzIGZvciBGSUxFLgorbTRfZGVmaW5lKFtiNF9jcHBfZ3VhcmRfb3Blbl0sCitbbTRfaWZ2YWwobTRfcXVvdGUoJDEpLAorWyNpZm5kZWYgYjRfY3BwX2d1YXJkKFskMV0pCisjIGRlZmluZSBiNF9jcHBfZ3VhcmQoWyQxXSldKV0pCisKK200X2RlZmluZShbYjRfY3BwX2d1YXJkX2Nsb3NlXSwKK1ttNF9pZnZhbChtNF9xdW90ZSgkMSksCitbI2VuZGlmIGI0X2NvbW1lbnQoWyFiNF9jcHBfZ3VhcmQoWyQxXSldKV0pXSkKIAogCiAjIyAtLS0tLS0tLS0tLS0tLS0tICMjCiAjIyBJZGVudGlmaWNhdGlvbi4gICMjCiAjIyAtLS0tLS0tLS0tLS0tLS0tICMjCiAKLSMgYjRfY29weXJpZ2h0KFRJVExFLCBZRUFSUykKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZmluZShbYjRfY29weXJpZ2h0XSwKLVsvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gYjRfdmVyc2lvbi4gICovCi0KLS8qICQxCi0KLW00X3RleHRfd3JhcChbQ29weXJpZ2h0IChDKSAkMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5dLCBbICAgXSkKLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwotCi0vKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKLSAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCi0gICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKLSAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCi0gICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCi0gICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCi0gICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKLSAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KLQotICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgotICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqL10pCi0KKyMgYjRfY29tbWVudChURVhUKQorIyAtLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2I0X2NvbW1lbnRdLCBbLyogbTRfYnBhdHN1YnN0KFskMV0sIFsKK10sIFsKKyAgIF0pICAqL10pCiAKICMgYjRfaWRlbnRpZmljYXRpb24KICMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVwZW5kcyBvbiBpbmRpdmlkdWFsIHNrZWxldG9ucyB0byBkZWZpbmUgYjRfcHVyZV9mbGFnLCBiNF9wdXNoX2ZsYWcsIG9yCisjIGI0X3B1bGxfZmxhZyBpZiB0aGV5IHVzZSB0aGUgdmFsdWVzIG9mIHRoZSAlZGVmaW5lIHZhcmlhYmxlcyBhcGkucHVyZSBvcgorIyBhcGkucHVzaC1wdWxsLgogbTRfZGVmaW5lKFtiNF9pZGVudGlmaWNhdGlvbl0sCi1bLyogSWRlbnRpZnkgQmlzb24gb3V0cHV0LiAgKi8KLVsjXWRlZmluZSBZWUJJU09OIDEKK1tbLyogSWRlbnRpZnkgQmlzb24gb3V0cHV0LiAgKi8KKyNkZWZpbmUgWVlCSVNPTiAxCiAKIC8qIEJpc29uIHZlcnNpb24uICAqLwotWyNdZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiYjRfdmVyc2lvbiIKKyNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICJdYjRfdmVyc2lvblsiCiAKIC8qIFNrZWxldG9uIG5hbWUuICAqLwotWyNdZGVmaW5lIFlZU0tFTEVUT05fTkFNRSBiNF9za2VsZXRvbgorI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgXWI0X3NrZWxldG9uW11tNF9pZmRlZihbYjRfcHVyZV9mbGFnXSwgW1sKIAogLyogUHVyZSBwYXJzZXJzLiAgKi8KLVsjXWRlZmluZSBZWVBVUkUgYjRfcHVyZV9mbGFnCisjZGVmaW5lIFlZUFVSRSBdYjRfcHVyZV9mbGFnXSlbXW00X2lmZGVmKFtiNF9wdXNoX2ZsYWddLCBbWwogCi0vKiBVc2luZyBsb2NhdGlvbnMuICAqLwotWyNdZGVmaW5lIFlZTFNQX05FRURFRCBiNF9sb2NhdGlvbnNfZmxhZwotXSkKKy8qIFB1c2ggcGFyc2Vycy4gICovCisjZGVmaW5lIFlZUFVTSCBdYjRfcHVzaF9mbGFnXSlbXW00X2lmZGVmKFtiNF9wdWxsX2ZsYWddLCBbWwogCisvKiBQdWxsIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVTEwgXWI0X3B1bGxfZmxhZ10pWworXV0pCiAKIAogIyMgLS0tLS0tLS0tLS0tLS0tLSAjIwogIyMgRGVmYXVsdCB2YWx1ZXMuICAjIwogIyMgLS0tLS0tLS0tLS0tLS0tLSAjIwogCi1tNF9kZWZpbmVfZGVmYXVsdChbYjRfZXBpbG9ndWVdLCBbXSkKKyMgYjRfYXBpX3ByZWZpeCwgYjRfYXBpX1BSRUZJWAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvcnJlc3BvbmRzIHRvICVkZWZpbmUgYXBpLnByZWZpeAorYjRfcGVyY2VudF9kZWZpbmVfZGVmYXVsdChbW2FwaS5wcmVmaXhdXSwgW1t5eV1dKQorbTRfZGVmaW5lKFtiNF9hcGlfcHJlZml4XSwKK1tiNF9wZXJjZW50X2RlZmluZV9nZXQoW1thcGkucHJlZml4XV0pXSkKK200X2RlZmluZShbYjRfYXBpX1BSRUZJWF0sCitbbTRfdG91cHBlcihiNF9hcGlfcHJlZml4KV0pCiAKIAorIyBiNF9wcmVmaXgKKyMgLS0tLS0tLS0tCisjIElmIHRoZSAlbmFtZS1wcmVmaXggaXMgbm90IGdpdmVuLCBpdCBpcyBhcGkucHJlZml4LgorbTRfZGVmaW5lX2RlZmF1bHQoW2I0X3ByZWZpeF0sIFtiNF9hcGlfcHJlZml4XSkKKworIyBJZiB0aGUgJXVuaW9uIGlzIG5vdCBuYW1lZCwgaXRzIG5hbWUgaXMgWVlTVFlQRS4KK200X2RlZmluZV9kZWZhdWx0KFtiNF91bmlvbl9uYW1lXSwgW2I0X2FwaV9QUkVGSVhbXVNUWVBFXSkKKwogCiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKICMjIFB1cmUvaW1wdXJlIGludGVyZmFjZXMuICAjIwogIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAKLQogIyBiNF91c2VyX2FyZ3MKICMgLS0tLS0tLS0tLS0tCiBtNF9kZWZpbmUoW2I0X3VzZXJfYXJnc10sCkBAIC0xMDUsOSArMTIwLDggQEAKICMgLS0tLS0tLS0tLS0tLS0KICMgSWYgZGVmaW5lZCwgYjRfcGFyc2VfcGFyYW0gYXJyaXZlcyBkb3VibGUgcXVvdGVkLCBidXQgYmVsb3cgd2UgcHJlZmVyCiAjIGl0IHRvIGJlIHNpbmdsZSBxdW90ZWQuCi1tNF9kZWZpbmVfZGVmYXVsdChbYjRfcGFyc2VfcGFyYW1dKQogbTRfZGVmaW5lKFtiNF9wYXJzZV9wYXJhbV0sCi1iNF9wYXJzZV9wYXJhbSkpCitiNF9wYXJzZV9wYXJhbSkKIAogCiAjIGI0X3BhcnNlX3BhcmFtX2ZvcihERUNMLCBGT1JNQUwsIEJPRFkpCkBAIC0xMTYsNyArMTMwLDcgQEAKICMgdGhlIGZvcm1hbCBuYW1lIHRvIEZPUk1BTCwgYW5kIGV2YWx1YXRpbmcgdGhlIEJPRFkuCiBtNF9kZWZpbmUoW2I0X3BhcnNlX3BhcmFtX2Zvcl0sCiBbbTRfZm9yZWFjaChbJDFfJDJdLCBtNF9kZWZuKFtiNF9wYXJzZV9wYXJhbV0pLAotW200X3B1c2hkZWYoWyQxXSwgbTRfZnN0KCQxXyQyKSlkbmwKK1ttNF9wdXNoZGVmKFskMV0sIG00X3VucXVvdGUobTRfY2FyKCQxXyQyKSkpZG5sCiBtNF9wdXNoZGVmKFskMl0sIG00X3NoaWZ0KCQxXyQyKSlkbmwKICQzW11kbmwKIG00X3BvcGRlZihbJDJdKWRubApAQCAtMTMxLDE4ICsxNDUsMTEgQEAKIF0pZG5sCiBdKQogCisKICMjIC0tLS0tLS0tLS0tLSAjIwogIyMgRGF0YSBUeXBlcy4gICMjCiAjIyAtLS0tLS0tLS0tLS0gIyMKIAotCi0jIGI0X2ludHNfaW4oSU5UMSwgSU5UMiwgTE9XLCBISUdIKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUmV0dXJuIDEgaWZmIGJvdGggSU5UMSBhbmQgSU5UMiBhcmUgaW4gW0xPVywgSElHSF0sIDAgb3RoZXJ3aXNlLgotbTRfZGVmaW5lKFtiNF9pbnRzX2luXSwKLVttNF9ldmFsKFskMyA8PSAkMSAmJiAkMSA8PSAkNCAmJiAkMyA8PSAkMiAmJiAkMiA8PSAkNF0pXSkKLQotCiAjIGI0X2ludF90eXBlKE1JTiwgTUFYKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgUmV0dXJuIHRoZSBzbWFsbGVzdCBpbnQgdHlwZSBhYmxlIHRvIGhhbmRsZSBudW1iZXJzIHJhbmdpbmcgZnJvbQpAQCAtMTU2LDcgKzE2Myw3IEBACiAKICAgICAgICBtNF9ldmFsKFswIDw9ICQxXSksICAgICAgICAgICAgICAgIFsxXSwgW3Vuc2lnbmVkIGludF0sCiAKLQkJCQkJICAgICAgIFtpbnRdKV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnRdKV0pCiAKIAogIyBiNF9pbnRfdHlwZV9mb3IoTkFNRSkKQEAgLTE2Nyw0NiArMTc0LDQzIEBACiBbYjRfaW50X3R5cGUoJDFfbWluLCAkMV9tYXgpXSkKIAogCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIERlY29kaW5nIG9wdGlvbnMuICAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0KLSMgYjRfZmxhZ19pZihGTEFHLCBJRi1UUlVFLCBJRi1GQUxTRSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUnVuIElGLVRSVUUgaWYgYjRfRkxBR19mbGFnIGlzIDEsIElGLUZBTFNFIGlmIEZMQUcgaXMgMCwgb3RoZXJ3aXNlIGZhaWwuCi1tNF9kZWZpbmUoW2I0X2ZsYWdfaWZdLAotW200X2Nhc2UoYjRfJDFfZmxhZywKLSAgICAgICAgIFswXSwgWyQzXSwKLQkgWzFdLCBbJDJdLAotCSBbbTRfZmF0YWwoW2ludmFsaWQgJDEgdmFsdWU6IF0kMSldKV0pCisjIGI0X3RhYmxlX3ZhbHVlX2VxdWFscyhUQUJMRSwgVkFMVUUsIExJVEVSQUwpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFdpdGhvdXQgaW5kdWNpbmcgYSBjb21wYXJpc29uIHdhcm5pbmcgZnJvbSB0aGUgY29tcGlsZXIsIGNoZWNrIGlmIHRoZQorIyBsaXRlcmFsIHZhbHVlIExJVEVSQUwgZXF1YWxzIFZBTFVFIGZyb20gdGFibGUgVEFCTEUsIHdoaWNoIG11c3QgaGF2ZQorIyBUQUJMRV9taW4gYW5kIFRBQkxFX21heCBkZWZpbmVkLiAgWVlJRCBtdXN0IGJlIGRlZmluZWQgYXMgYW4gaWRlbnRpdHkKKyMgZnVuY3Rpb24gdGhhdCBzdXBwcmVzc2VzIHdhcm5pbmdzIGFib3V0IGNvbnN0YW50IGNvbmRpdGlvbnMuCittNF9kZWZpbmUoW2I0X3RhYmxlX3ZhbHVlX2VxdWFsc10sCitbbTRfaWYobTRfZXZhbCgkMyA8IG00X2luZGlyKFtiNF9dJDFbX21pbl0pCisgICAgICAgICAgICAgICB8fCBtNF9pbmRpcihbYjRfXSQxW19tYXhdKSA8ICQzKSwgWzFdLAorICAgICAgIFtbWVlJRCAoMCldXSwKKyAgICAgICBbKCEhKCgkMikgPT0gKCQzKSkpXSldKQogCiAKLSMgYjRfZGVmaW5lX2ZsYWdfaWYoRkxBRykKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRGVmaW5lICJiNF9GTEFHX2lmKElGLVRSVUUsIElGLUZBTFNFKSIgdGhhdCBkZXBlbmRzIG9uIHRoZQotIyB2YWx1ZSBvZiB0aGUgQm9vbGVhbiBGTEFHLgotbTRfZGVmaW5lKFtiNF9kZWZpbmVfZmxhZ19pZl0sCi1bX2I0X2RlZmluZV9mbGFnX2lmKCRbMV0sICRbMl0sIFskMV0pXSkKLQotIyBfYjRfZGVmaW5lX2ZsYWdfaWYoJDEsICQyLCBGTEFHKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUaGlzIG1hY3JvIHdvcmtzIGFyb3VuZCB0aGUgaW1wb3NzaWJpbGl0eSB0byBkZWZpbmUgbWFjcm9zCi0jIGluc2lkZSBtYWNyb3MsIGJlY2F1c2UgaXNzdWluZyBgWyQxXScgaXMgbm90IHBvc3NpYmxlIGluIE00IDooLgotIyBUaGlzIHN1Y2tzIGhhcmQsIEdOVSBNNCBzaG91bGQgcmVhbGx5IHByb3ZpZGUgTTUgbGlrZSAkJDEuCi1tNF9kZWZpbmUoW19iNF9kZWZpbmVfZmxhZ19pZl0sCi1bbTRfaWYoWyQxJDJdLCAkWzFdJFsyXSwgW10sCi0gICAgICAgW200X2ZhdGFsKFskMDogSW52YWxpZCBhcmd1bWVudHM6ICRAXSldKWRubAotbTRfZGVmaW5lKFtiNF8kM19pZl0sIAotICAgICAgICAgIFtiNF9mbGFnX2lmKFskM10sIFskMV0sIFskMl0pXSldKQorIyMgLS0tLS0tLS0tIyMKKyMjIFZhbHVlcy4gICMjCisjIyAtLS0tLS0tLS0jIwogCiAKLSMgYjRfRkxBR19pZihJRi1UUlVFLCBJRi1GQUxTRSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRXhwYW5kIElGLVRSVUUsIGlmIEZMQUcgaXMgdHJ1ZSwgSUYtRkFMU0Ugb3RoZXJ3aXNlLgotYjRfZGVmaW5lX2ZsYWdfaWYoW2RlZmluZXNdKSAgICAgICAgIyBXaGV0aGVyIGhlYWRlcnMgYXJlIHJlcXVlc3RlZC4KLWI0X2RlZmluZV9mbGFnX2lmKFtlcnJvcl92ZXJib3NlXSkgICMgV2hldGVyIGVycm9yIGFyZSB2ZXJib3NlLgotYjRfZGVmaW5lX2ZsYWdfaWYoW2xvY2F0aW9uc10pICAgICAgIyBXaGV0aGVyIGxvY2F0aW9ucyBhcmUgdHJhY2tlZC4KLWI0X2RlZmluZV9mbGFnX2lmKFtwdXJlXSkgICAgICAgICAgICMgV2hldGhlciB0aGUgaW50ZXJmYWNlIGlzIHB1cmUuCisjIGI0X251bGxfZGVmaW5lCisjIC0tLS0tLS0tLS0tLS0tCisjIFBvcnRhYmlsaXR5IGlzc3VlczogZGVmaW5lIGEgWVlfTlVMTCBhcHByb3ByaWF0ZSBmb3IgdGhlIGN1cnJlbnQKKyMgbGFuZ3VhZ2UgKEMsIEMrKzk4LCBvciBDKysxMSkuCittNF9kZWZpbmUoW2I0X251bGxfZGVmaW5lXSwKK1sjIGlmbmRlZiBZWV9OVUxMCisjICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIDIwMTEwM0wgPD0gX19jcGx1c3BsdXMKKyMgICBkZWZpbmUgWVlfTlVMTCBudWxscHRyCisjICBlbHNlCisjICAgZGVmaW5lIFlZX05VTEwgMAorIyAgZW5kaWYKKyMgZW5kaWZbXWRubAorXSkKKworCisjIGI0X251bGwKKyMgLS0tLS0tLQorIyBSZXR1cm4gYSBudWxsIHBvaW50ZXIgY29uc3RhbnQuCittNF9kZWZpbmUoW2I0X251bGxdLCBbWVlfTlVMTF0pCiAKIAogCkBAIC0yMjYsNyArMjMwLDcgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBPdXRwdXQgdGhlIGRlZmluaXRpb24gb2YgdGhlIHRva2VucyAoaWYgdGhlcmUgYXJlKSBhcyAjZGVmaW5lcy4KIG00X2RlZmluZShbYjRfdG9rZW5fZGVmaW5lc10sCi1bbTRfaWYoWyRAXSwgW1tdXSwgW10sCitbbTRfaWYoWyQjJDFdLCBbMV0sIFtdLAogWy8qIFRva2Vucy4gICovCiBtNF9tYXAoW2I0X3Rva2VuX2RlZmluZV0sIFskQF0pXSkKIF0pCkBAIC0yNDMsMjYgKzI0NywyNyBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBPdXRwdXQgdGhlIGRlZmluaXRpb24gb2YgdGhlIHRva2VucyAoaWYgdGhlcmUgYXJlKSBhcyBlbnVtcy4KIG00X2RlZmluZShbYjRfdG9rZW5fZW51bXNdLAotW200X2lmKFskQF0sIFtbXV0sIFtdLAotWy8qIFRva2Vucy4gICovCi0jaWZuZGVmIFlZVE9LRU5UWVBFCi0jIGRlZmluZSBZWVRPS0VOVFlQRQorW200X2lmKFskIyQxXSwgWzFdLCBbXSwKK1tbLyogVG9rZW5zLiAgKi8KKyNpZm5kZWYgXWI0X2FwaV9QUkVGSVhbVE9LRU5UWVBFCisjIGRlZmluZSBdYjRfYXBpX1BSRUZJWFtUT0tFTlRZUEUKICAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVnZ2VycwogICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KLSAgIGVudW0geXl0b2tlbnR5cGUgewotbTRfbWFwX3NlcChbICAgICBiNF90b2tlbl9lbnVtXSwgWywKKyAgIGVudW0gXWI0X2FwaV9wcmVmaXhbdG9rZW50eXBlIHsKK11tNF9tYXBfc2VwKFsgICAgIGI0X3Rva2VuX2VudW1dLCBbLAogXSwKLQkgICBbJEBdKQorICAgICAgICAgICBbJEBdKVsKICAgIH07CiAjZW5kaWYKLV0pXSkKK11dKV0pCiAKIAogIyBiNF90b2tlbl9lbnVtc19kZWZpbmVzKExJU1QtT0YtUEFJUlMtVE9LRU4tTkFNRS1UT0tFTi1OVU1CRVIpCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgT3V0cHV0IHRoZSBkZWZpbml0aW9uIG9mIHRoZSB0b2tlbnMgKGlmIHRoZXJlIGFyZSkgYXMgZW51bXMgYW5kICNkZWZpbmVzLgorIyBPdXRwdXQgdGhlIGRlZmluaXRpb24gb2YgdGhlIHRva2VucyAoaWYgdGhlcmUgYXJlIGFueSkgYXMgZW51bXMgYW5kLCBpZiBQT1NJWAorIyBZYWNjIGlzIGVuYWJsZWQsIGFzICNkZWZpbmVzLgogbTRfZGVmaW5lKFtiNF90b2tlbl9lbnVtc19kZWZpbmVzXSwKLVtiNF90b2tlbl9lbnVtcygkQCliNF90b2tlbl9kZWZpbmVzKCRAKQorW2I0X3Rva2VuX2VudW1zKCRAKWI0X3lhY2NfaWYoW2I0X3Rva2VuX2RlZmluZXMoJEApXSwgW10pCiBdKQogCiAKQEAgLTI5NCw4ICsyOTksOCBAQAogYjRfY19hbnNpX2Z1bmN0aW9uX2RlZigkQCkKICNlbHNlCiAkMgotJDEgKGI0X2Nfa25yX2Zvcm1hbF9uYW1lcyhtNF9zaGlmdG4oMiwgJEApKSkKLWI0X2Nfa25yX2Zvcm1hbF9kZWNscyhtNF9zaGlmdG4oMiwgJEApKQorJDEgKGI0X2Nfa25yX2Zvcm1hbF9uYW1lcyhtNF9zaGlmdDIoJEApKSkKK2I0X2Nfa25yX2Zvcm1hbF9kZWNscyhtNF9zaGlmdDIoJEApKQogI2VuZGlmW11kbmwKIF0pCiAKQEAgLTMwNSw3ICszMTAsNyBAQAogIyBEZWNsYXJlIHRoZSBmdW5jdGlvbiBOQU1FIGluIEFOU0kuCiBtNF9kZWZpbmUoW2I0X2NfYW5zaV9mdW5jdGlvbl9kZWZdLAogWyQyCi0kMSAoYjRfY19hbnNpX2Zvcm1hbHMobTRfc2hpZnRuKDIsICRAKSkpW11kbmwKKyQxIChiNF9jX2Fuc2lfZm9ybWFscyhtNF9zaGlmdDIoJEApKSlbXWRubAogXSkKIAogCkBAIC0zMTMsMTAgKzMxOCw5IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIE91dHB1dCB0aGUgYXJndW1lbnRzIEFOU0ktQyBkZWZpbml0aW9uLgogbTRfZGVmaW5lKFtiNF9jX2Fuc2lfZm9ybWFsc10sCi1bbTRfY2FzZShbJEBdLAotCSBbXSwgICBbdm9pZF0sCi0JIFtbXV0sIFt2b2lkXSwKLQkgICAgICAgW200X21hcF9zZXAoW2I0X2NfYW5zaV9mb3JtYWxdLCBbLCBdLCBbJEBdKV0pXSkKK1ttNF9pZihbJCNdLCBbMF0sIFt2b2lkXSwKKyAgICAgICBbJCMkMV0sIFsxXSwgW3ZvaWRdLAorICAgICAgICAgICAgICAgW200X21hcF9zZXAoW2I0X2NfYW5zaV9mb3JtYWxdLCBbLCBdLCBbJEBdKV0pXSkKIAogbTRfZGVmaW5lKFtiNF9jX2Fuc2lfZm9ybWFsXSwKIFskMV0pCkBAIC0zMzcsOSArMzQxLDkgQEAKICMgT3V0cHV0IHRoZSBLJlIgYXJndW1lbnQgZGVjbGFyYXRpb25zLgogbTRfZGVmaW5lKFtiNF9jX2tucl9mb3JtYWxfZGVjbHNdLAogW200X21hcF9zZXAoW2I0X2Nfa25yX2Zvcm1hbF9kZWNsXSwKLQkgICAgWworICAgICAgICAgICAgWwogXSwKLQkgICAgWyRAXSldKQorICAgICAgICAgICAgWyRAXSldKQogCiBtNF9kZWZpbmUoW2I0X2Nfa25yX2Zvcm1hbF9kZWNsXSwKIFsgICAgJDE7XSkKQEAgLTM1MSw5ICszNTUsMTggQEAKICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogCiAKKyMgYjRfY19hbnNpX2Z1bmN0aW9uX2RlY2woTkFNRSwgUkVUVVJOLVZBTFVFLCBbREVDTDEsIE5BTUUxXSwgLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlY2xhcmUgdGhlIGZ1bmN0aW9uIE5BTUUgQU5TSSBDIHN0eWxlLgorbTRfZGVmaW5lKFtiNF9jX2Fuc2lfZnVuY3Rpb25fZGVjbF0sCitbJDIgJDEgKGI0X2NfYW5zaV9mb3JtYWxzKG00X3NoaWZ0MigkQCkpKTtbXWRubAorXSkKKworCisKICMgYjRfY19mdW5jdGlvbl9kZWNsKE5BTUUsIFJFVFVSTi1WQUxVRSwgW0RFQ0wxLCBOQU1FMV0sIC4uLikKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRGVjbGFyZSB0aGUgZnVuY3Rpb24gTkFNRS4KKyMgRGVjbGFyZSB0aGUgZnVuY3Rpb24gTkFNRSBpbiBib3RoIEsmUiBhbmQgQU5TSSBDLgogbTRfZGVmaW5lKFtiNF9jX2Z1bmN0aW9uX2RlY2xdLAogWyNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKIGI0X2NfYW5zaV9mdW5jdGlvbl9kZWNsKCRAKQpAQCAtMzYzLDE1ICszNzYsNiBAQAogXSkKIAogCi0jIGI0X2NfYW5zaV9mdW5jdGlvbl9kZWNsKE5BTUUsIFJFVFVSTi1WQUxVRSwgW0RFQ0wxLCBOQU1FMV0sIC4uLikKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBEZWNsYXJlIHRoZSBmdW5jdGlvbiBOQU1FLgotbTRfZGVmaW5lKFtiNF9jX2Fuc2lfZnVuY3Rpb25fZGVjbF0sCi1bJDIgJDEgKGI0X2NfYW5zaV9mb3JtYWxzKG00X3NoaWZ0bigyLCAkQCkpKTtbXWRubAotXSkKLQotCi0KIAogIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAjIyBDYWxsaW5nIEMgZnVuY3Rpb25zLiAgIyMKQEAgLTM4Miw3ICszODYsNyBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBDYWxsIHRoZSBmdW5jdGlvbiBOQU1FIHdpdGggYXJndW1lbnRzIE5BTUUxLCBOQU1FMiBldGMuCiBtNF9kZWZpbmUoW2I0X2NfZnVuY3Rpb25fY2FsbF0sCi1bJDEgKGI0X2NfYXJncyhtNF9zaGlmdG4oMiwgJEApKSlbXWRubAorWyQxIChiNF9jX2FyZ3MobTRfc2hpZnQyKCRAKSkpW11kbmwKIF0pCiAKIApAQCAtNDAwLDMyICs0MDQsMzggQEAKICMjIFN5bmNsaW5lcy4gICMjCiAjIyAtLS0tLS0tLS0tLSAjIwogCi0jIGI0X3N5bmNsaW5lKExJTkUsIEZJTEUpCisjIGI0X3N5bmNfc3RhcnQoTElORSwgRklMRSkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZmluZShbYjRfc3luY2xpbmVdLAotW2I0X2ZsYWdfaWYoW3N5bmNsaW5lc10sIFtbI11saW5lICQxICQyXSldKQotCittNF9kZWZpbmUoW2I0X3N5bmNfc3RhcnRdLCBbWyNdbGluZSAkMSAkMl0pCiAKIAogIyMgLS0tLS0tLS0tLS0tLS0gIyMKICMjIFVzZXIgYWN0aW9ucy4gICMjCiAjIyAtLS0tLS0tLS0tLS0tLSAjIwogCisjIGI0X2Nhc2UoTEFCRUwsIFNUQVRFTUVOVFMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2I0X2Nhc2VdLAorWyAgY2FzZSAkMToKKyQyCisgICAgYnJlYWs7XSkKKwogIyBiNF9zeW1ib2xfYWN0aW9ucyhGSUxFTkFNRSwgTElORU5PLAogIyAgICAgICAgICAgICAgICAgICBTWU1CT0wtVEFHLCBTWU1CT0wtTlVNLAogIyAgICAgICAgICAgICAgICAgICBTWU1CT0wtQUNUSU9OLCBTWU1CT0wtVFlQRU5BTUUpCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSXNzdWUgdGhlIGNvZGUgZm9yIGEgc3ltYm9sIGFjdGlvbiAoZS5nLiwgJXByaW50ZXIpLgorIworIyBEZWZpbmUgYjRfZG9sbGFyX2RvbGxhcihbVFlQRS1OQU1FXSksIGFuZCBiNF9hdF9kb2xsYXIsIHdoaWNoIGFyZQorIyBpbnZva2VkIHdoZXJlICQ8VFlQRS1OQU1FPiQgYW5kIEAkIHdlcmUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgogbTRfZGVmaW5lKFtiNF9zeW1ib2xfYWN0aW9uc10sCi1bbTRfcHVzaGRlZihbYjRfZG9sbGFyX2RvbGxhcl0sCi0gICBbbTRfaWZ2YWwoWyQ2XSwgWyh5eXZhbHVlcC0+JDYpXSwgWygqeXl2YWx1ZXApXSldKWRubAotbTRfcHVzaGRlZihbYjRfYXRfZG9sbGFyXSwgWygqeXlsb2NhdGlvbnApXSlkbmwKK1tiNF9kb2xsYXJfcHVzaGRlZihbKCp5eXZhbHVlcCldLCBbJDZdLCBbKCp5eWxvY2F0aW9ucCldKWRubAogICAgICAgY2FzZSAkNDogLyogJDMgKi8KIGI0X3N5bmNsaW5lKFskMl0sIFskMV0pCi0JJDU7CisgICAgICAgICQ1OwogYjRfc3luY2xpbmUoW0BvbGluZUBdLCBbQG9maWxlQF0pCi0JYnJlYWs7Ci1tNF9wb3BkZWYoW2I0X2F0X2RvbGxhcl0pZG5sCi1tNF9wb3BkZWYoW2I0X2RvbGxhcl9kb2xsYXJdKWRubAorICAgICAgICBicmVhazsKK2I0X2RvbGxhcl9wb3BkZWZbXWRubAogXSkKIAogCkBAIC00NjEsNyArNDcxLDcgQEAKICAgICB7CiBdbTRfbWFwKFtiNF9zeW1ib2xfYWN0aW9uc10sIG00X2RlZm4oW2I0X3N5bWJvbF9kZXN0cnVjdG9yc10pKVsKICAgICAgIGRlZmF1bHQ6Ci0JYnJlYWs7CisgICAgICAgIGJyZWFrOwogICAgIH0KIH1dZG5sCiBdKQpAQCAtNDgxLDEyICs0OTEsMTQgQEAKIC8qQVJHU1VTRUQqLwogXSQxKFt5eV9zeW1ib2xfdmFsdWVfcHJpbnRdLAogICAgIFtzdGF0aWMgdm9pZF0sCi0JICAgICAgIFtbRklMRSAqeXlvdXRwdXRdLCAgICAgICAgICAgICAgICAgICAgICAgW3l5b3V0cHV0XV0sCi0JICAgICAgIFtbaW50IHl5dHlwZV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgW3l5dHlwZV1dLAotCSAgICAgICBbW1lZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcF0sICAgICAgIFt5eXZhbHVlcF1dW11kbmwKKyAgICAgICAgICAgICAgIFtbRklMRSAqeXlvdXRwdXRdLCAgICAgICAgICAgICAgICAgICAgICAgW3l5b3V0cHV0XV0sCisgICAgICAgICAgICAgICBbW2ludCB5eXR5cGVdLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFt5eXR5cGVdXSwKKyAgICAgICAgICAgICAgIFtbWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwXSwgICAgICAgW3l5dmFsdWVwXV1bXWRubAogYjRfbG9jYXRpb25zX2lmKFssIFtbWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wXSwgW3l5bG9jYXRpb25wXV1dKVtdZG5sCiBtNF9pZnNldChbYjRfcGFyc2VfcGFyYW1dLCBbLCBiNF9wYXJzZV9wYXJhbV0pKVsKIHsKKyAgRklMRSAqeXlvID0geXlvdXRwdXQ7CisgIFlZVVNFICh5eW8pOwogICBpZiAoIXl5dmFsdWVwKQogICAgIHJldHVybjsKIF1iNF9sb2NhdGlvbnNfaWYoWyAgWVlVU0UgKHl5bG9jYXRpb25wKTsKQEAgLTUwMiw3ICs1MTQsNyBAQAogICAgIHsKIF1tNF9tYXAoW2I0X3N5bWJvbF9hY3Rpb25zXSwgbTRfZGVmbihbYjRfc3ltYm9sX3ByaW50ZXJzXSkpZG5sCiBbICAgICAgZGVmYXVsdDoKLQlicmVhazsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCkBAIC01MTMsOSArNTI1LDkgQEAKIAogXSQxKFt5eV9zeW1ib2xfcHJpbnRdLAogICAgIFtzdGF0aWMgdm9pZF0sCi0JICAgICAgIFtbRklMRSAqeXlvdXRwdXRdLCAgICAgICAgICAgICAgICAgICAgICAgW3l5b3V0cHV0XV0sCi0JICAgICAgIFtbaW50IHl5dHlwZV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgW3l5dHlwZV1dLAotCSAgICAgICBbW1lZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcF0sICAgICAgIFt5eXZhbHVlcF1dW11kbmwKKyAgICAgICAgICAgICAgIFtbRklMRSAqeXlvdXRwdXRdLCAgICAgICAgICAgICAgICAgICAgICAgW3l5b3V0cHV0XV0sCisgICAgICAgICAgICAgICBbW2ludCB5eXR5cGVdLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFt5eXR5cGVdXSwKKyAgICAgICAgICAgICAgIFtbWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwXSwgICAgICAgW3l5dmFsdWVwXV1bXWRubAogYjRfbG9jYXRpb25zX2lmKFssIFtbWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wXSwgW3l5bG9jYXRpb25wXV1dKVtdZG5sCiBtNF9pZnNldChbYjRfcGFyc2VfcGFyYW1dLCBbLCBiNF9wYXJzZV9wYXJhbV0pKVsKIHsKQEAgLTUzMiwzICs1NDQsMTcxIEBACiAgIFlZRlBSSU5URiAoeXlvdXRwdXQsICIpIik7CiB9XWRubAogXSkKKworIyMgLS0tLS0tLS0tLS0tLS0gIyMKKyMjIERlY2xhcmF0aW9ucy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLSAjIworCisjIGI0X2RlY2xhcmVfeXlsc3R5cGUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWNsYXJhdGlvbnMgdGhhdCBtaWdodCBlaXRoZXIgZ28gaW50byB0aGUgaGVhZGVyIChpZiAtLWRlZmluZXMpIG9yCisjIGluIHRoZSBwYXJzZXIgYm9keS4gIERlY2xhcmUgWVlTVFlQRS9ZWUxUWVBFLCBhbmQgeXlsdmFsL3l5bGxvYy4KK200X2RlZmluZShbYjRfZGVjbGFyZV95eWxzdHlwZV0sCitbWyNpZiAhIGRlZmluZWQgXWI0X2FwaV9QUkVGSVhbU1RZUEUgJiYgISBkZWZpbmVkIF1iNF9hcGlfUFJFRklYW1NUWVBFX0lTX0RFQ0xBUkVECitdbTRfaWZkZWYoW2I0X3N0eXBlXSwKK1tbdHlwZWRlZiB1bmlvbiBdYjRfdW5pb25fbmFtZVsKK3sKK11iNF91c2VyX3N0eXBlWworfSBdYjRfYXBpX1BSRUZJWFtTVFlQRTsKKyMgZGVmaW5lIF1iNF9hcGlfUFJFRklYW1NUWVBFX0lTX1RSSVZJQUwgMV1dLAorW200X2lmKGI0X3RhZ19zZWVuX2ZsYWcsIDAsCitbW3R5cGVkZWYgaW50IF1iNF9hcGlfUFJFRklYW1NUWVBFOworIyBkZWZpbmUgXWI0X2FwaV9QUkVGSVhbU1RZUEVfSVNfVFJJVklBTCAxXV0pXSlbCisjIGRlZmluZSBdYjRfYXBpX3ByZWZpeFtzdHlwZSBdYjRfYXBpX1BSRUZJWFtTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KKyMgZGVmaW5lIF1iNF9hcGlfUFJFRklYW1NUWVBFX0lTX0RFQ0xBUkVEIDEKKyNlbmRpZl1iNF9sb2NhdGlvbnNfaWYoW1sKKworI2lmICEgZGVmaW5lZCBdYjRfYXBpX1BSRUZJWFtMVFlQRSAmJiAhIGRlZmluZWQgXWI0X2FwaV9QUkVGSVhbTFRZUEVfSVNfREVDTEFSRUQKK3R5cGVkZWYgc3RydWN0IF1iNF9hcGlfUFJFRklYW0xUWVBFCit7CisgIGludCBmaXJzdF9saW5lOworICBpbnQgZmlyc3RfY29sdW1uOworICBpbnQgbGFzdF9saW5lOworICBpbnQgbGFzdF9jb2x1bW47Cit9IF1iNF9hcGlfUFJFRklYW0xUWVBFOworIyBkZWZpbmUgXWI0X2FwaV9wcmVmaXhbbHR5cGUgXWI0X2FwaV9QUkVGSVhbTFRZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCisjIGRlZmluZSBdYjRfYXBpX1BSRUZJWFtMVFlQRV9JU19ERUNMQVJFRCAxCisjIGRlZmluZSBdYjRfYXBpX1BSRUZJWFtMVFlQRV9JU19UUklWSUFMIDEKKyNlbmRpZl1dKQorCitiNF9wdXJlX2lmKFtdLCBbW2V4dGVybiBdYjRfYXBpX1BSRUZJWFtTVFlQRSBdYjRfcHJlZml4W2x2YWw7CitdYjRfbG9jYXRpb25zX2lmKFtbZXh0ZXJuIF1iNF9hcGlfUFJFRklYW0xUWVBFIF1iNF9wcmVmaXhbbGxvYztdXSldKVtdZG5sCitdKQorCisjIGI0X1lZREVCVUdfZGVmaW5lCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtiNF9ZWURFQlVHX2RlZmluZV0sCitbWy8qIEVuYWJsaW5nIHRyYWNlcy4gICovCitdbTRfaWYoYjRfYXBpX3ByZWZpeCwgW3l5XSwKK1tbI2lmbmRlZiBZWURFQlVHCisjIGRlZmluZSBZWURFQlVHIF1iNF9kZWJ1Z19mbGFnWworI2VuZGlmXV0sCitbWyNpZm5kZWYgXWI0X2FwaV9QUkVGSVhbREVCVUcKKyMgaWYgZGVmaW5lZCBZWURFQlVHCisjICBpZiBZWURFQlVHCisjICAgZGVmaW5lIF1iNF9hcGlfUFJFRklYW0RFQlVHIDEKKyMgIGVsc2UKKyMgICBkZWZpbmUgXWI0X2FwaV9QUkVGSVhbREVCVUcgMAorIyAgZW5kaWYKKyMgZWxzZSAvKiAhIGRlZmluZWQgWVlERUJVRyAqLworIyAgZGVmaW5lIF1iNF9hcGlfUFJFRklYW0RFQlVHIF1iNF9kZWJ1Z19mbGFnWworIyBlbmRpZiAvKiAhIGRlZmluZWQgWVlERUJVRyAqLworI2VuZGlmICAvKiAhIGRlZmluZWQgXWI0X2FwaV9QUkVGSVhbREVCVUcgKi9dXSlbXWRubAorXSkKKworIyBiNF9kZWNsYXJlX3l5ZGVidWcKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2I0X2RlY2xhcmVfeXlkZWJ1Z10sCitbYjRfWVlERUJVR19kZWZpbmVbCisjaWYgXWI0X2FwaV9QUkVGSVhbREVCVUcKK2V4dGVybiBpbnQgXWI0X3ByZWZpeFtkZWJ1ZzsKKyNlbmRpZl1bXWRubAorXSkKKworIyBiNF95eWxsb2NfZGVmYXVsdF9kZWZpbmUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBZWUxMT0NfREVGQVVMVC4KK200X2RlZmluZShbYjRfeXlsbG9jX2RlZmF1bHRfZGVmaW5lXSwKK1tbLyogWVlMTE9DX0RFRkFVTFQgLS0gU2V0IENVUlJFTlQgdG8gc3BhbiBmcm9tIFJIU1sxXSB0byBSSFNbTl0uCisgICBJZiBOIGlzIDAsIHRoZW4gc2V0IENVUlJFTlQgdG8gdGhlIGVtcHR5IGxvY2F0aW9uIHdoaWNoIGVuZHMKKyAgIHRoZSBwcmV2aW91cyBzeW1ib2w6IFJIU1swXSAoYWx3YXlzIGRlZmluZWQpLiAgKi8KKworI2lmbmRlZiBZWUxMT0NfREVGQVVMVAorIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYgKFlZSUQgKE4pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChDdXJyZW50KS5maXJzdF9saW5lICAgPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9saW5lOyAgICAgICAgXAorICAgICAgICAgIChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9jb2x1bW47ICAgICAgXAorICAgICAgICAgIChDdXJyZW50KS5sYXN0X2xpbmUgICAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2xpbmU7ICAgICAgICAgXAorICAgICAgICAgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChDdXJyZW50KS5maXJzdF9saW5lICAgPSAoQ3VycmVudCkubGFzdF9saW5lICAgPSAgICAgICAgICAgICAgXAorICAgICAgICAgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9saW5lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSAoQ3VycmVudCkubGFzdF9jb2x1bW4gPSAgICAgICAgICAgICAgXAorICAgICAgICAgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9jb2x1bW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHdoaWxlIChZWUlEICgwKSkKKyNlbmRpZgorXV0pCisKKyMgYjRfeXlfbG9jYXRpb25fcHJpbnRfZGVmaW5lCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQuCittNF9kZWZpbmUoW2I0X3l5X2xvY2F0aW9uX3ByaW50X2RlZmluZV0sCitbYjRfbG9jYXRpb25zX2lmKFtbCisvKiBZWV9MT0NBVElPTl9QUklOVCAtLSBQcmludCB0aGUgbG9jYXRpb24gb24gdGhlIHN0cmVhbS4KKyAgIFRoaXMgbWFjcm8gd2FzIG5vdCBtYW5kYXRlZCBvcmlnaW5hbGx5OiBkZWZpbmUgb25seSBpZiB3ZSBrbm93CisgICB3ZSB3b24ndCBicmVhayB1c2VyIGNvZGU6IHdoZW4gdGhlc2UgYXJlIHRoZSBsb2NhdGlvbnMgd2Uga25vdy4gICovCisKKyNpZm5kZWYgWVlfTE9DQVRJT05fUFJJTlQKKyMgaWYgZGVmaW5lZCBdYjRfYXBpX1BSRUZJWFtMVFlQRV9JU19UUklWSUFMICYmIF1iNF9hcGlfUFJFRklYW0xUWVBFX0lTX1RSSVZJQUwKKworLyogUHJpbnQgKllZTE9DUCBvbiBZWU8uICBQcml2YXRlLCBkbyBub3QgcmVseSBvbiBpdHMgZXhpc3RlbmNlLiAqLworCitfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkKK11iNF9jX2Z1bmN0aW9uX2RlZihbeXlfbG9jYXRpb25fcHJpbnRfXSwKKyAgICBbc3RhdGljIHVuc2lnbmVkXSwKKyAgICAgICAgICAgICAgIFtbRklMRSAqeXlvXSwgICAgICAgICAgICAgICAgICAgIFt5eW9dXSwKKyAgICAgICAgICAgICAgIFtbWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jcF0sIFt5eWxvY3BdXSlbCit7CisgIHVuc2lnbmVkIHJlcyA9IDA7CisgIGludCBlbmRfY29sID0gMCAhPSB5eWxvY3AtPmxhc3RfY29sdW1uID8geXlsb2NwLT5sYXN0X2NvbHVtbiAtIDEgOiAwOworICBpZiAoMCA8PSB5eWxvY3AtPmZpcnN0X2xpbmUpCisgICAgeworICAgICAgcmVzICs9IGZwcmludGYgKHl5bywgIiVkIiwgeXlsb2NwLT5maXJzdF9saW5lKTsKKyAgICAgIGlmICgwIDw9IHl5bG9jcC0+Zmlyc3RfY29sdW1uKQorICAgICAgICByZXMgKz0gZnByaW50ZiAoeXlvLCAiLiVkIiwgeXlsb2NwLT5maXJzdF9jb2x1bW4pOworICAgIH0KKyAgaWYgKDAgPD0geXlsb2NwLT5sYXN0X2xpbmUpCisgICAgeworICAgICAgaWYgKHl5bG9jcC0+Zmlyc3RfbGluZSA8IHl5bG9jcC0+bGFzdF9saW5lKQorICAgICAgICB7CisgICAgICAgICAgcmVzICs9IGZwcmludGYgKHl5bywgIi0lZCIsIHl5bG9jcC0+bGFzdF9saW5lKTsKKyAgICAgICAgICBpZiAoMCA8PSBlbmRfY29sKQorICAgICAgICAgICAgcmVzICs9IGZwcmludGYgKHl5bywgIi4lZCIsIGVuZF9jb2wpOworICAgICAgICB9CisgICAgICBlbHNlIGlmICgwIDw9IGVuZF9jb2wgJiYgeXlsb2NwLT5maXJzdF9jb2x1bW4gPCBlbmRfY29sKQorICAgICAgICByZXMgKz0gZnByaW50ZiAoeXlvLCAiLSVkIiwgZW5kX2NvbCk7CisgICAgfQorICByZXR1cm4gcmVzOworIH0KKworIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykgICAgICAgICAgXAorICB5eV9sb2NhdGlvbl9wcmludF8gKEZpbGUsICYoTG9jKSkKKworIyBlbHNlCisjICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQpIDApCisjIGVuZGlmCisjZW5kaWZdXSwKK1tbLyogVGhpcyBtYWNybyBpcyBwcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gKi8KKyNpZm5kZWYgWVlfTE9DQVRJT05fUFJJTlQKKyMgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykgKCh2b2lkKSAwKQorI2VuZGlmXV0pCitdKQorCisjIGI0X3l5bG9jX2RlZmF1bHQKKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBFeHBhbmQgdG8gYSBwb3NzaWJsZSBkZWZhdWx0IHZhbHVlIGZvciB5eWxsb2MuCittNF9kZWZpbmUoW2I0X3l5bG9jX2RlZmF1bHRdLAorW1sKKyMgaWYgZGVmaW5lZCBdYjRfYXBpX1BSRUZJWFtMVFlQRV9JU19UUklWSUFMICYmIF1iNF9hcGlfUFJFRklYW0xUWVBFX0lTX1RSSVZJQUwKKyAgPSB7IF1tNF9qb2luKFssIF0sCisgICAgICAgICAgICAgICBtNF9kZWZuKFtiNF9sb2NhdGlvbl9pbml0aWFsX2xpbmVdKSwKKyAgICAgICAgICAgICAgIG00X2RlZm4oW2I0X2xvY2F0aW9uX2luaXRpYWxfY29sdW1uXSksCisgICAgICAgICAgICAgICBtNF9kZWZuKFtiNF9sb2NhdGlvbl9pbml0aWFsX2xpbmVdKSwKKyAgICAgICAgICAgICAgIG00X2RlZm4oW2I0X2xvY2F0aW9uX2luaXRpYWxfY29sdW1uXSkpWyB9CisjIGVuZGlmCitdXSkKZGlmZiAtLWdpdCBhL2RhdGEvZ2xyLmMgYi9kYXRhL2dsci5jCmluZGV4IGI4NzJiZjQuLjAyYTc2YzIgMTAwNjQ0Ci0tLSBhL2RhdGEvZ2xyLmMKKysrIGIvZGF0YS9nbHIuYwpAQCAtMSwyNSArMSwyNyBAQAotbTRfZGl2ZXJ0KC0xKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQyAtKi0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEMgLSotCiAKICMgR0xSIHNrZWxldG9uIGZvciBCaXNvbgotIyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgQ29weXJpZ2h0IChDKSAyMDAyLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKICMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQorIwogIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCisjCiAjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSMgMDIxMTAtMTMwMSAgVVNBCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCiAKLW00X2luY2x1ZGUoYjRfcGtnZGF0YWRpci9bYy5tNF0pCisjIElmIHdlIGFyZSBsb2FkZWQgYnkgZ2xyLmNjLCBkbyBub3Qgb3ZlcnJpZGUgYysrLm00IGRlZmluaXRpb25zIGJ5CisjIHRob3NlIG9mIGMubTQuCittNF9pZihiNF9za2VsZXRvbiwgWyJnbHIuYyJdLAorICAgICAgW200X2luY2x1ZGUoYjRfcGtnZGF0YWRpci9bYy5tNF0pXSkKIAogIyMgLS0tLS0tLS0tLS0tLS0tLSAjIwogIyMgRGVmYXVsdCB2YWx1ZXMuICAjIwpAQCAtMzUsNiArMzcsMTMgQEAKICMjIFB1cmUvaW1wdXJlIGludGVyZmFjZXMuICAjIwogIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAKK2I0X2RlZmluZV9mbGFnX2lmKFtwdXJlXSkKKyMgSWYgZ2xyLmNjIGlzIGluY2x1ZGluZyB0aGlzIGZpbGUgYW5kIHRodXMgaGFzIGFscmVhZHkgc2V0IGI0X3B1cmVfZmxhZywKKyMgZG8gbm90IGNoYW5nZSB0aGUgdmFsdWUgb2YgYjRfcHVyZV9mbGFnLCBhbmQgZG8gbm90IHJlY29yZCBhIHVzZSBvZiBhcGkucHVyZS4KK200X2lmbmRlZihbYjRfcHVyZV9mbGFnXSwKK1tiNF9wZXJjZW50X2RlZmluZV9kZWZhdWx0KFtbYXBpLnB1cmVdXSwgW1tmYWxzZV1dKQorIG00X2RlZmluZShbYjRfcHVyZV9mbGFnXSwKKyAgICAgICAgICAgW2I0X3BlcmNlbnRfZGVmaW5lX2ZsYWdfaWYoW1thcGkucHVyZV1dLCBbWzFdXSwgW1swXV0pXSldKQogCiAjIGI0X3VzZXJfZm9ybWFscwogIyAtLS0tLS0tLS0tLS0tLS0KQEAgLTY3LDcgKzc2LDcgQEAKIAogIyBiNF9seXllcnJvcl9hcmdzCiAjIC0tLS0tLS0tLS0tLS0tLS0KLSMgU2FtZSBhcyBhYm92ZSwgYnV0IG9uIHRoZSBsb29rLWFoZWFkLCBoZW5jZSAmeXlsbG9jIGluc3RlYWQgb2YgeXlsb2NwLgorIyBTYW1lIGFzIGFib3ZlLCBidXQgb24gdGhlIGxvb2thaGVhZCwgaGVuY2UgJnl5bGxvYyBpbnN0ZWFkIG9mIHl5bG9jcC4KIG00X2RlZmluZShbYjRfbHl5ZXJyb3JfYXJnc10sCiBbYjRfcHVyZV9pZihbYjRfbG9jYXRpb25zX2lmKFsmeXlsbG9jLCBdKV0pZG5sCiBtNF9pZnNldChbYjRfcGFyc2VfcGFyYW1dLCBbYjRfY19hcmdzKGI0X3BhcnNlX3BhcmFtKSwgXSldKQpAQCAtODIsMTggKzkxLDMyIEBACiAKICMgYjRfbHB1cmVfYXJncwogIyAtLS0tLS0tLS0tLS0tCi0jIFNhbWUgYXMgYWJvdmUsIGJ1dCBvbiB0aGUgbG9vay1haGVhZCwgaGVuY2UgJnl5bGxvYyBpbnN0ZWFkIG9mIHl5bG9jcC4KKyMgU2FtZSBhcyBhYm92ZSwgYnV0IG9uIHRoZSBsb29rYWhlYWQsIGhlbmNlICZ5eWxsb2MgaW5zdGVhZCBvZiB5eWxvY3AuCiBtNF9kZWZpbmUoW2I0X2xwdXJlX2FyZ3NdLAogW2I0X3B1cmVfaWYoW2I0X2xvY2F0aW9uc19pZihbLCAmeXlsbG9jXSldKVtdYjRfdXNlcl9hcmdzXSkKIAogCisKICMgYjRfcHVyZV9mb3JtYWxzCiAjIC0tLS0tLS0tLS0tLS0tLQotIyBBcmd1bWVudHMgcGFzc2VkIHRvIHl5ZXJyb3I6IHVzZXIgZm9ybWFscyBwbHVzIHl5bG9jcC4KKyMgQXJndW1lbnRzIHBhc3NlZCB0byB5eWVycm9yOiB1c2VyIGZvcm1hbHMgcGx1cyB5eWxvY3Agd2l0aCBsZWFkaW5nIGNvbW1hLgogbTRfZGVmaW5lKFtiNF9wdXJlX2Zvcm1hbHNdLAogW2I0X3B1cmVfaWYoW2I0X2xvY2F0aW9uc19pZihbLCBZWUxUWVBFICp5eWxvY3BdKV0pW11iNF91c2VyX2Zvcm1hbHNdKQogCiAKKyMgYjRfbG9jdXNlcl9mb3JtYWxzKExPQyA9IHl5bG9jcCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbYjRfbG9jdXNlcl9mb3JtYWxzXSwKK1tiNF9sb2NhdGlvbnNfaWYoWywgWVlMVFlQRSAqbTRfZGVmYXVsdChbJDFdLCBbeXlsb2NwXSldKVtdYjRfdXNlcl9mb3JtYWxzXSkKKworCisjIGI0X2xvY3VzZXJfYXJncyhMT0MgPSB5eWxvY3ApCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2I0X2xvY3VzZXJfYXJnc10sCitbYjRfbG9jYXRpb25zX2lmKFssIG00X2RlZmF1bHQoWyQxXSwgW3l5bG9jcF0pXSlbXWI0X3VzZXJfYXJnc10pCisKKworCiAjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIwogIyMgU2VtYW50aWMgVmFsdWVzLiAgIyMKICMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCkBAIC0xMzQsNzkgKzE1Nyw1OSBAQAogWygoKHl5R0xSU3RhY2tJdGVtIGNvbnN0ICopeXl2c3ApQHtZWUZJTEwgKCgkMikgLSAoJDEpKUB9Lnl5c3RhdGUueXlsb2MpXSkKIAogCisjIyAtLS0tLS0tLS0tLS0tLSAjIworIyMgRGVjbGFyYXRpb25zLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tICMjCisKKyMgYjRfc2hhcmVkX2RlY2xhcmF0aW9ucworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlY2xhcmF0aW9uIHRoYXQgbWlnaHQgZWl0aGVyIGdvIGludG8gdGhlIGhlYWRlciAoaWYgLS1kZWZpbmVzKQorIyBvciBvcGVuIGNvZGVkIGluIHRoZSBwYXJzZXIgYm9keS4KK200X2RlZmluZShbYjRfc2hhcmVkX2RlY2xhcmF0aW9uc10sCitbYjRfZGVjbGFyZV95eWRlYnVnWworXWI0X3BlcmNlbnRfY29kZV9nZXQoW1tyZXF1aXJlc11dKVsKK11iNF90b2tlbl9lbnVtcyhiNF90b2tlbnMpWworXWI0X2RlY2xhcmVfeXlsc3R5cGVbCitdYjRfY19hbnNpX2Z1bmN0aW9uX2RlY2woYjRfcHJlZml4W3BhcnNlXSwgW2ludF0sIGI0X3BhcnNlX3BhcmFtKVsKK11iNF9wZXJjZW50X2NvZGVfZ2V0KFtbcHJvdmlkZXNdXSlbXWRubAorXSkKKwogCiAjIyAtLS0tLS0tLS0tLS0tLSAjIwogIyMgT3V0cHV0IGZpbGVzLiAgIyMKICMjIC0tLS0tLS0tLS0tLS0tICMjCiAKLSMgV2UgZG8gd2FudCBNNCBleHBhbnNpb24gYWZ0ZXIgIyBmb3IgQ1BQIG1hY3Jvcy4KLW00X2NoYW5nZWNvbSgpCi1tNF9kaXZlcnQoMClkbmwKLUBvdXRwdXQgQG91dHB1dF9wYXJzZXJfbmFtZUAKK2I0X291dHB1dF9iZWdpbihbYjRfcGFyc2VyX2ZpbGVfbmFtZV0pCiBiNF9jb3B5cmlnaHQoW1NrZWxldG9uIGltcGxlbWVudGF0aW9uIGZvciBCaXNvbiBHTFIgcGFyc2VycyBpbiBDXSwKLSAgWzIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDZdKQotWworICAgICAgICAgICAgIFsyMDAyLTIwMTJdKVsKKwogLyogQyBHTFIgcGFyc2VyIHNrZWxldG9uIHdyaXR0ZW4gYnkgUGF1bCBIaWxmaW5nZXIuICAqLwogCiBdYjRfaWRlbnRpZmljYXRpb24KIAotbTRfaWYoYjRfcHJlZml4LCBbeXldLCBbXSwKLVsvKiBTdWJzdGl0dXRlIHRoZSB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMuICAqLwotI2RlZmluZSB5eXBhcnNlIGI0X3ByZWZpeFtdcGFyc2UKLSNkZWZpbmUgeXlsZXggICBiNF9wcmVmaXhbXWxleAotI2RlZmluZSB5eWVycm9yIGI0X3ByZWZpeFtdZXJyb3IKLSNkZWZpbmUgeXlsdmFsICBiNF9wcmVmaXhbXWx2YWwKLSNkZWZpbmUgeXljaGFyICBiNF9wcmVmaXhbXWNoYXIKLSNkZWZpbmUgeXlkZWJ1ZyBiNF9wcmVmaXhbXWRlYnVnCi0jZGVmaW5lIHl5bmVycnMgYjRfcHJlZml4W11uZXJycwotI2RlZmluZSB5eWxsb2MgIGI0X3ByZWZpeFtdbGxvY10pCi0KLWRubCAjIGI0X3NoYXJlZF9kZWNsYXJhdGlvbnMKLWRubCAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWRubCAjIERlY2xhcmF0aW9uIHRoYXQgbWlnaHQgZWl0aGVyIGdvIGludG8gdGhlIGhlYWRlciAoaWYgLS1kZWZpbmVzKQotZG5sICMgb3Igb3BlbiBjb2RlZCBpbiB0aGUgcGFyc2VyIGJvZHkuCi1tNF9kZWZpbmUoW2I0X3NoYXJlZF9kZWNsYXJhdGlvbnNdLAotW2I0X3Rva2VuX2VudW1zKGI0X3Rva2VucylbCitiNF9wZXJjZW50X2NvZGVfZ2V0KFtbdG9wXV0pWworXW00X2lmKGI0X2FwaV9wcmVmaXgsIFt5eV0sIFtdLAorW1svKiBTdWJzdGl0dXRlIHRoZSB0eXBlIG5hbWVzLiAgKi8KKyNkZWZpbmUgWVlTVFlQRSBdYjRfYXBpX1BSRUZJWFtTVFlQRV1iNF9sb2NhdGlvbnNfaWYoW1sKKyNkZWZpbmUgWVlMVFlQRSBdYjRfYXBpX1BSRUZJWFtMVFlQRV1dKV0pWworXW00X2lmKGI0X3ByZWZpeCwgW3l5XSwgW10sCitbWy8qIFN1YnN0aXR1dGUgdGhlIHZhcmlhYmxlIGFuZCBmdW5jdGlvbiBuYW1lcy4gICovCisjZGVmaW5lIHl5cGFyc2UgXWI0X3ByZWZpeFtwYXJzZQorI2RlZmluZSB5eWxleCAgIF1iNF9wcmVmaXhbbGV4CisjZGVmaW5lIHl5ZXJyb3IgXWI0X3ByZWZpeFtlcnJvcgorI2RlZmluZSB5eWx2YWwgIF1iNF9wcmVmaXhbbHZhbAorI2RlZmluZSB5eWNoYXIgIF1iNF9wcmVmaXhbY2hhcgorI2RlZmluZSB5eWRlYnVnIF1iNF9wcmVmaXhbZGVidWcKKyNkZWZpbmUgeXluZXJycyBdYjRfcHJlZml4W25lcnJzXWI0X2xvY2F0aW9uc19pZihbWworI2RlZmluZSB5eWxsb2MgIF1iNF9wcmVmaXhbbGxvY11dKV0pWwogCiAvKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KLV1iNF9wcmVfcHJvbG9ndWVbCitdYjRfdXNlcl9wcmVfcHJvbG9ndWVbCiAKLSNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAotXW00X2lmZGVmKFtiNF9zdHlwZV0sCi1bdHlwZWRlZiB1bmlvbiBtNF9icmVnZXhwKGI0X3N0eXBlLCBbXntdLCBbWVlTVFlQRSBdKQotYjRfc3R5cGUKLS8qIExpbmUgX19saW5lX18gb2YgZ2xyLmMuICAqLwotYjRfc3luY2xpbmUoW0BvbGluZUBdLCBbQG9maWxlQF0pCi0JWVlTVFlQRTtdLAotW3R5cGVkZWYgaW50IFlZU1RZUEU7XSlbCi0jIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCi0jZW5kaWYKK11iNF9udWxsX2RlZmluZVsKIAotI2lmICEgZGVmaW5lZCBZWUxUWVBFICYmICEgZGVmaW5lZCBZWUxUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHN0cnVjdCBZWUxUWVBFCi17Ci1dYjRfbG9jYXRpb25zX2lmKFsKLSAgaW50IGZpcnN0X2xpbmU7Ci0gIGludCBmaXJzdF9jb2x1bW47Ci0gIGludCBsYXN0X2xpbmU7Ci0gIGludCBsYXN0X2NvbHVtbjsKLV0sWwotICBjaGFyIHl5ZHVtbXk7Ci1dKVsKLX0gWVlMVFlQRTsKLSMgZGVmaW5lIFlZTFRZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlMVFlQRV9JU19UUklWSUFMIDEKLSNlbmRpZgotXV0pCi0KLWI0X2RlZmluZXNfaWYoWyNpbmNsdWRlIEBvdXRwdXRfaGVhZGVyX25hbWVAXSwKLQkgICAgICBbYjRfc2hhcmVkX2RlY2xhcmF0aW9uc10pWwotCi0vKiBFbmFibGluZyB0cmFjZXMuICAqLwotI2lmbmRlZiBZWURFQlVHCi0jIGRlZmluZSBZWURFQlVHIF1iNF9kZWJ1Z19mbGFnWwotI2VuZGlmCitdYjRfZGVmaW5lc19pZihbWyNpbmNsdWRlICJAYmFzZW5hbWUoXWI0X3NwZWNfZGVmaW5lc19maWxlW0ApIl1dLAorICAgICAgICAgICAgICAgW2I0X3NoYXJlZF9kZWNsYXJhdGlvbnNdKVsKIAogLyogRW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCiAjaWZkZWYgWVlFUlJPUl9WRVJCT1NFCkBAIC0yMTYsNTEgKzIxOSw0MyBAQAogIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIF1iNF9lcnJvcl92ZXJib3NlX2ZsYWdbCiAjZW5kaWYKIAotLyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KLSNpZm5kZWYgWVlUT0tFTl9UQUJMRQotIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSBdYjRfdG9rZW5fdGFibGVbCi0jZW5kaWYKLQogLyogRGVmYXVsdCAoY29uc3RhbnQpIHZhbHVlIHVzZWQgZm9yIGluaXRpYWxpemF0aW9uIGZvciBudWxsCi0gICByaWdodC1oYW5kIHNpZGVzLiAgVW5saWtlIHRoZSBzdGFuZGFyZCB5YWNjLmMgdGVtcGxhdGUsCi0gICBoZXJlIHdlIHNldCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiAkJCB0byBhIHplcm9lZC1vdXQgdmFsdWUuCi0gICBTaW5jZSB0aGUgZGVmYXVsdCB2YWx1ZSBpcyB1bmRlZmluZWQsIHRoaXMgYmVoYXZpb3IgaXMKLSAgIHRlY2huaWNhbGx5IGNvcnJlY3QuICAqLwotc3RhdGljIFlZU1RZUEUgeXl2YWxfZGVmYXVsdDsKKyAgIHJpZ2h0LWhhbmQgc2lkZXMuICBVbmxpa2UgdGhlIHN0YW5kYXJkIHlhY2MuYyB0ZW1wbGF0ZSwgaGVyZSB3ZSBzZXQKKyAgIHRoZSBkZWZhdWx0IHZhbHVlIG9mICQkIHRvIGEgemVyb2VkLW91dCB2YWx1ZS4gIFNpbmNlIHRoZSBkZWZhdWx0CisgICB2YWx1ZSBpcyB1bmRlZmluZWQsIHRoaXMgYmVoYXZpb3IgaXMgdGVjaG5pY2FsbHkgY29ycmVjdC4gICovCitzdGF0aWMgWVlTVFlQRSB5eXZhbF9kZWZhdWx0O11iNF9sb2NhdGlvbnNfaWYoW1sKK3N0YXRpYyBZWUxUWVBFIHl5bG9jX2RlZmF1bHRdW11iNF95eWxvY19kZWZhdWx0O10pWwogCiAvKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi1dYjRfcG9zdF9wcm9sb2d1ZVsKK11iNF91c2VyX3Bvc3RfcHJvbG9ndWUKK2I0X3BlcmNlbnRfY29kZV9nZXRbXWRubAogCi1dLyogTGluZSBfX2xpbmVfXyBvZiBnbHIuYy4gICovCi1iNF9zeW5jbGluZShbQG9saW5lQF0sIFtAb2ZpbGVAXSkKLVsKLSNpbmNsdWRlIDxzdGRpby5oPgorWyNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgogCiAjaWZuZGVmIFlZXwotIyBpZiBZWUVOQUJMRV9OTFMKKyMgaWYgZGVmaW5lZCBZWUVOQUJMRV9OTFMgJiYgWVlFTkFCTEVfTkxTCiAjICBpZiBFTkFCTEVfTkxTCiAjICAgaW5jbHVkZSA8bGliaW50bC5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgZGVmaW5lIFlZXyhtc2dpZCkgZGdldHRleHQgKCJiaXNvbi1ydW50aW1lIiwgbXNnaWQpCisjICAgZGVmaW5lIFlZXyhNc2dpZCkgZGdldHRleHQgKCJiaXNvbi1ydW50aW1lIiwgTXNnaWQpCiAjICBlbmRpZgogIyBlbmRpZgogIyBpZm5kZWYgWVlfCi0jICBkZWZpbmUgWVlfKG1zZ2lkKSBtc2dpZAorIyAgZGVmaW5lIFlZXyhNc2dpZCkgTXNnaWQKICMgZW5kaWYKICNlbmRpZgogCiAvKiBTdXBwcmVzcyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5nIiBFLiAgKi8KICNpZiAhIGRlZmluZWQgbGludCB8fCBkZWZpbmVkIF9fR05VQ19fCi0jIGRlZmluZSBZWVVTRShlKSAoKHZvaWQpIChlKSkKKyMgZGVmaW5lIFlZVVNFKEUpICgodm9pZCkgKEUpKQogI2Vsc2UKLSMgZGVmaW5lIFlZVVNFKGUpIC8qIGVtcHR5ICovCisjIGRlZmluZSBZWVVTRShFKSAvKiBlbXB0eSAqLwogI2VuZGlmCiAKIC8qIElkZW50aXR5IGZ1bmN0aW9uLCB1c2VkIHRvIHN1cHByZXNzIHdhcm5pbmdzIGFib3V0IGNvbnN0YW50IGNvbmRpdGlvbnMuICAqLwogI2lmbmRlZiBsaW50Ci0jIGRlZmluZSBZWUlEKG4pIChuKQorIyBkZWZpbmUgWVlJRChOKSAoTikKICNlbHNlCiBdYjRfY19mdW5jdGlvbl9kZWYoW1lZSURdLCBbc3RhdGljIGludF0sIFtbaW50IGldLCBbaV1dKVsKIHsKQEAgLTI5MSw4ICsyODYsOSBAQAogI2lmbmRlZiBZWVNFVEpNUAogIyBpbmNsdWRlIDxzZXRqbXAuaD4KICMgZGVmaW5lIFlZSk1QX0JVRiBqbXBfYnVmCi0jIGRlZmluZSBZWVNFVEpNUChlbnYpIHNldGptcCAoZW52KQotIyBkZWZpbmUgWVlMT05HSk1QKGVudiwgdmFsKSBsb25nam1wIChlbnYsIHZhbCkKKyMgZGVmaW5lIFlZU0VUSk1QKEVudikgc2V0am1wIChFbnYpCisvKiBQYWNpZnkgY2xhbmcuICAqLworIyBkZWZpbmUgWVlMT05HSk1QKEVudiwgVmFsKSAobG9uZ2ptcCAoRW52LCBWYWwpLCBZWUFTU0VSVCAoMCkpCiAjZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS4KQEAgLTMwMiwyMCArMjk4LDEzIEBACiAjaWZuZGVmIF9fYXR0cmlidXRlX18KIC8qIFRoaXMgZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDIuNSBhbmQgbGF0ZXIuICAqLwogIyBpZiAoISBkZWZpbmVkIF9fR05VQ19fIHx8IF9fR05VQ19fIDwgMiBcCi0gICAgICB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpIHx8IF9fU1RSSUNUX0FOU0lfXykKKyAgICAgIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fIDwgNSkpCiAjICBkZWZpbmUgX19hdHRyaWJ1dGVfXyhTcGVjKSAvKiBlbXB0eSAqLwogIyBlbmRpZgogI2VuZGlmCiAKLV1iNF9sb2NhdGlvbnNfaWYoWyNkZWZpbmUgWVlPUFRJT05BTF9MT0MoTmFtZSkgTmFtZV0sWwotI2lmZGVmIF9fY3BsdXNwbHVzCi0jIGRlZmluZSBZWU9QVElPTkFMX0xPQyhOYW1lKSAvKiBlbXB0eSAqLwotI2Vsc2UKLSMgZGVmaW5lIFlZT1BUSU9OQUxfTE9DKE5hbWUpIE5hbWUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQotI2VuZGlmXSlbCi0KICNpZm5kZWYgWVlBU1NFUlQKLSMgZGVmaW5lIFlZQVNTRVJUKGNvbmRpdGlvbikgKCh2b2lkKSAoKGNvbmRpdGlvbikgfHwgKGFib3J0ICgpLCAwKSkpCisjIGRlZmluZSBZWUFTU0VSVChDb25kaXRpb24pICgodm9pZCkgKChDb25kaXRpb24pIHx8IChhYm9ydCAoKSwgMCkpKQogI2VuZGlmCiAKIC8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCkBAIC0zNDEsOSArMzMwLDggQEAKICNkZWZpbmUgWVlVTkRFRlRPSyAgXWI0X3VuZGVmX3Rva2VuX251bWJlclsKICNkZWZpbmUgWVlNQVhVVE9LICAgXWI0X3VzZXJfdG9rZW5fbnVtYmVyX21heFsKIAotI2RlZmluZSBZWVRSQU5TTEFURShZWVgpCQkJCQkJXAotICAoKFlZWCA8PSAwKSA/IFlZRU9GIDoJCQkJCQkJXAotICAgKHVuc2lnbmVkIGludCkgKFlZWCkgPD0gWVlNQVhVVE9LID8geXl0cmFuc2xhdGVbWVlYXSA6IFlZVU5ERUZUT0spCisjZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgodW5zaWduZWQgaW50KSAoWVlYKSA8PSBZWU1BWFVUT0sgPyB5eXRyYW5zbGF0ZVtZWVhdIDogWVlVTkRFRlRPSykKIAogLyogWVlUUkFOU0xBVEVbWVlMRVhdIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCiBzdGF0aWMgY29uc3QgXWI0X2ludF90eXBlX2ZvcihbYjRfdHJhbnNsYXRlXSlbIHl5dHJhbnNsYXRlW10gPQpAQCAtMzUxLDcgKzMzOSw3IEBACiAgIF1iNF90cmFuc2xhdGVbCiB9OwogCi0jaWYgWVlERUJVRworI2lmIF1iNF9hcGlfUFJFRklYW0RFQlVHCiAvKiBZWVBSSFNbWVlOXSAtLSBJbmRleCBvZiB0aGUgZmlyc3QgUkhTIHN5bWJvbCBvZiBydWxlIG51bWJlciBZWU4gaW4KICAgIFlZUkhTLiAgKi8KIHN0YXRpYyBjb25zdCBdYjRfaW50X3R5cGVfZm9yKFtiNF9wcmhzXSlbIHl5cHJoc1tdID0KQEAgLTM3Miw3ICszNjAsNyBAQAogfTsKICNlbmRpZgogCi0jaWYgWVlERUJVRyB8fCBZWUVSUk9SX1ZFUkJPU0UgfHwgWVlUT0tFTl9UQUJMRQorI2lmIF1iNF9hcGlfUFJFRklYW0RFQlVHIHx8IFlZRVJST1JfVkVSQk9TRSB8fCBdYjRfdG9rZW5fdGFibGVfZmxhZ1sKIC8qIFlZVE5BTUVbU1lNQk9MLU5VTV0gLS0gU3RyaW5nIG5hbWUgb2YgdGhlIHN5bWJvbCBTWU1CT0wtTlVNLgogICAgRmlyc3QsIHRoZSB0ZXJtaW5hbHMsIHRoZW4sIHN0YXJ0aW5nIGF0IFlZTlRPS0VOUywgbm9udGVybWluYWxzLiAgKi8KIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQpAQCAtNDA1LDkgKzM5Myw5IEBACiAgIF1iNF9tZXJnZXJbCiB9OwogCi0vKiBZWURFRkFDVFtTXSAtLSBkZWZhdWx0IHJ1bGUgdG8gcmVkdWNlIHdpdGggaW4gc3RhdGUgUyB3aGVuIFlZVEFCTEUKLSAgIGRvZXNuJ3Qgc3BlY2lmeSBzb21ldGhpbmcgZWxzZSB0byBkby4gIFplcm8gbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4KLSAgIGVycm9yLiAgKi8KKy8qIFlZREVGQUNUW1NdIC0tIGRlZmF1bHQgcmVkdWN0aW9uIG51bWJlciBpbiBzdGF0ZSBTLiAgUGVyZm9ybWVkIHdoZW4KKyAgIFlZVEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRvIGRvLiAgWmVybyBtZWFucyB0aGUgZGVmYXVsdAorICAgaXMgYW4gZXJyb3IuICAqLwogc3RhdGljIGNvbnN0IF1iNF9pbnRfdHlwZV9mb3IoW2I0X2RlZmFjdF0pWyB5eWRlZmFjdFtdID0KIHsKICAgXWI0X2RlZmFjdFsKQEAgLTQzNSw4ICs0MjMsNyBAQAogCiAvKiBZWVRBQkxFW1lZUEFDVFtTVEFURS1OVU1dXS4gIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVNLiAgSWYKICAgIHBvc2l0aXZlLCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRpdmUsIHJlZHVjZSB0aGUgcnVsZSB3aGljaAotICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIHplcm8sIGRvIHdoYXQgWVlERUZBQ1Qgc2F5cy4KLSAgIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9yLiAgKi8KKyAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCiAjZGVmaW5lIFlZVEFCTEVfTklORiBdYjRfdGFibGVfbmluZlsKIHN0YXRpYyBjb25zdCBdYjRfaW50X3R5cGVfZm9yKFtiNF90YWJsZV0pWyB5eXRhYmxlW10gPQogewpAQCAtNDc0LDU3ICs0NjEsMTQgQEAKICAgXWI0X3N0b3NbCiB9OwogCi0MCi0vKiBQcmV2ZW50IHdhcm5pbmcgaWYgLVdtaXNzaW5nLXByb3RvdHlwZXMuICAqLwotXWI0X2NfYW5zaV9mdW5jdGlvbl9kZWNsKFt5eXBhcnNlXSwgW2ludF0sIGI0X3BhcnNlX3BhcmFtKVsKLQogLyogRXJyb3IgdG9rZW4gbnVtYmVyICovCiAjZGVmaW5lIFlZVEVSUk9SIDEKIAotLyogWVlMTE9DX0RFRkFVTFQgLS0gU2V0IENVUlJFTlQgdG8gc3BhbiBmcm9tIFJIU1sxXSB0byBSSFNbTl0uCi0gICBJZiBOIGlzIDAsIHRoZW4gc2V0IENVUlJFTlQgdG8gdGhlIGVtcHR5IGxvY2F0aW9uIHdoaWNoIGVuZHMKLSAgIHRoZSBwcmV2aW91cyBzeW1ib2w6IFJIU1swXSAoYWx3YXlzIGRlZmluZWQpLiAgKi8KLQogXWI0X2xvY2F0aW9uc19pZihbWwotI2RlZmluZSBZWVJIU0xPQyhSaHMsIEspICgoUmhzKVtLXS55eXN0YXRlLnl5bG9jKQotI2lmbmRlZiBZWUxMT0NfREVGQVVMVAotIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKQkJCQlcCi0gICAgZG8JCQkJCQkJCQlcCi0gICAgICBpZiAoWVlJRCAoTikpCQkJCQkJCVwKLQl7CQkJCQkJCQlcCi0JICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfbGluZTsJXAotCSAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2NvbHVtbjsJXAotCSAgKEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfbGluZTsJCVwKLQkgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsJXAotCX0JCQkJCQkJCVwKLSAgICAgIGVsc2UJCQkJCQkJCVwKLQl7CQkJCQkJCQlcCi0JICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gKEN1cnJlbnQpLmxhc3RfbGluZSAgID0JCVwKLQkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9saW5lOwkJCQlcCi0JICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gKEN1cnJlbnQpLmxhc3RfY29sdW1uID0JCVwKLQkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9jb2x1bW47CQkJCVwKLQl9CQkJCQkJCQlcCi0gICAgd2hpbGUgKFlZSUQgKDApKQotCi0vKiBZWV9MT0NBVElPTl9QUklOVCAtLSBQcmludCB0aGUgbG9jYXRpb24gb24gdGhlIHN0cmVhbS4KLSAgIFRoaXMgbWFjcm8gd2FzIG5vdCBtYW5kYXRlZCBvcmlnaW5hbGx5OiBkZWZpbmUgb25seSBpZiB3ZSBrbm93Ci0gICB3ZSB3b24ndCBicmVhayB1c2VyIGNvZGU6IHdoZW4gdGhlc2UgYXJlIHRoZSBsb2NhdGlvbnMgd2Uga25vdy4gICovCi0KLSMgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykJCQlcCi0gICAgZnByaW50ZiAoRmlsZSwgIiVkLiVkLSVkLiVkIiwJCQlcCi0JICAgICAoTG9jKS5maXJzdF9saW5lLCAoTG9jKS5maXJzdF9jb2x1bW4sCVwKLQkgICAgIChMb2MpLmxhc3RfbGluZSwgIChMb2MpLmxhc3RfY29sdW1uKQotI2VuZGlmCi1dXSxbCi0jaWZuZGVmIFlZTExPQ19ERUZBVUxUCi0jIGRlZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pICgodm9pZCkgMCkKLSNlbmRpZgotXSlbCi0KLSNpZm5kZWYgWVlfTE9DQVRJT05fUFJJTlQKLSMgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykgKCh2b2lkKSAwKQotI2VuZGlmCi0KK11iNF95eWxsb2NfZGVmYXVsdF9kZWZpbmVbCisjIGRlZmluZSBZWVJIU0xPQyhSaHMsIEspICgoUmhzKVtLXS55eXN0YXRlLnl5bG9jKQorXV0pWworXWI0X3l5X2xvY2F0aW9uX3ByaW50X2RlZmluZVsKIAogLyogWVlMRVggLS0gY2FsbGluZyBgeXlsZXgnIHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCiAjZGVmaW5lIFlZTEVYIF1iNF9jX2Z1bmN0aW9uX2NhbGwoW3l5bGV4XSwgW2ludF0sIGI0X2xleF9wYXJhbSlbCkBAIC01NDQsOSArNDg4LDggQEAKICNkZWZpbmUgYjRfcHJlZml4W11jaGFyIHl5Y2hhcgogI2RlZmluZSBiNF9wcmVmaXhbXWx2YWwgeXlsdmFsCiAjZGVmaW5lIGI0X3ByZWZpeFtdbGxvYyB5eWxsb2NdKV0sCi1bWVlTVFlQRSB5eWx2YWw7Ci0KLVlZTFRZUEUgeXlsbG9jOworW1lZU1RZUEUgeXlsdmFsO11iNF9sb2NhdGlvbnNfaWYoW1sKK1lZTFRZUEUgeXlsbG9jO11dKVsKIAogaW50IHl5bmVycnM7CiBpbnQgeXljaGFyO10pWwpAQCAtNTU2LDQ4ICs0OTksNDcgQEAKIAogdHlwZWRlZiBlbnVtIHsgeXlvaywgeXlhY2NlcHQsIHl5YWJvcnQsIHl5ZXJyIH0gWVlSRVNVTFRUQUc7CiAKLSNkZWZpbmUgWVlDSEsoWVlFKQkJCQkJCQkgICAgIFwKLSAgIGRvIHsgWVlSRVNVTFRUQUcgeXlmbGFnID0gWVlFOyBpZiAoeXlmbGFnICE9IHl5b2spIHJldHVybiB5eWZsYWc7IH0JICAgICBcCisjZGVmaW5lIFlZQ0hLKFlZRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGRvIHsgWVlSRVNVTFRUQUcgeXlmbGFnID0gWVlFOyBpZiAoeXlmbGFnICE9IHl5b2spIHJldHVybiB5eWZsYWc7IH0gICAgICAgXAogICAgd2hpbGUgKFlZSUQgKDApKQogCi0jaWYgWVlERUJVRworI2lmIF1iNF9hcGlfUFJFRklYW0RFQlVHCiAKICMgaWZuZGVmIFlZRlBSSU5URgogIyAgZGVmaW5lIFlZRlBSSU5URiBmcHJpbnRmCiAjIGVuZGlmCiAKLSMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQkJCVwKLWRvIHsJCQkJCQlcCi0gIGlmICh5eWRlYnVnKQkJCQkJXAotICAgIFlZRlBSSU5URiBBcmdzOwkJCQlcCisjIGRlZmluZSBZWURQUklOVEYoQXJncykgICAgICAgICAgICAgICAgICAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgWVlGUFJJTlRGIEFyZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9IHdoaWxlIChZWUlEICgwKSkKIAogXWI0X3l5X3N5bWJvbF9wcmludF9nZW5lcmF0ZShbYjRfY19hbnNpX2Z1bmN0aW9uX2RlZl0pWwogCi0jIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikJCQkgICAgXAotZG8gewkJCQkJCQkJCSAgICBcCi0gIGlmICh5eWRlYnVnKQkJCQkJCQkJICAgIFwKLSAgICB7CQkJCQkJCQkJICAgIFwKLSAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUpOwkJCQkJICAgIFwKLSAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCBUeXBlLAkJCQkJICAgIFwKLQkJICAgICAgIFZhbHVlXWI0X2xvY2F0aW9uc19pZihbLCBMb2NhdGlvbl0pW11iNF91c2VyX2FyZ3NbKTsgIFwKLSAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsJCQkJCQkgICAgXAotICAgIH0JCQkJCQkJCQkgICAgXAorIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pICAgICAgICAgIFwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgVHlwZSwgVmFsdWVdYjRfbG9jdXNlcl9hcmdzKFtMb2NhdGlvbl0pWyk7ICAgICAgICBcCisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0gd2hpbGUgKFlZSUQgKDApKQogCiAvKiBOb256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQgaXMgbGVmdCB1bmluaXRpYWxpemVkIHNvIHRoYXQKICAgIG11bHRpcGxlIHBhcnNlcnMgY2FuIGNvZXhpc3QuICAqLwogaW50IHl5ZGVidWc7CiAKLSNlbHNlIC8qICFZWURFQlVHICovCisjZWxzZSAvKiAhXWI0X2FwaV9QUkVGSVhbREVCVUcgKi8KIAogIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCiAjIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikKIAotI2VuZGlmIC8qICFZWURFQlVHICovCisjZW5kaWYgLyogIV1iNF9hcGlfUFJFRklYW0RFQlVHICovCiAKIC8qIFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KLSNpZm5kZWYJWVlJTklUREVQVEgKKyNpZm5kZWYgWVlJTklUREVQVEgKICMgZGVmaW5lIFlZSU5JVERFUFRIIF1iNF9zdGFja19kZXB0aF9pbml0WwogI2VuZGlmCiAKQEAgLTYyMSw4ICs1NjMsOCBAQAogCiAjaWZuZGVmIFlZU1RBQ0tFWFBBTkRBQkxFCiAjIGlmICghIGRlZmluZWQgX19jcGx1c3BsdXMgXAotICAgICAgfHwgKF1iNF9sb2NhdGlvbnNfaWYoW1tkZWZpbmVkIFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwgXAotCSAgJiYgXV0pW2RlZmluZWQgWVlTVFlQRV9JU19UUklWSUFMICYmIFlZU1RZUEVfSVNfVFJJVklBTCkpCisgICAgICB8fCAoXWI0X2xvY2F0aW9uc19pZihbW2RlZmluZWQgXWI0X2FwaV9QUkVGSVhbTFRZUEVfSVNfVFJJVklBTCAmJiBdYjRfYXBpX1BSRUZJWFtMVFlQRV9JU19UUklWSUFMIFwKKyAgICAgICAgICAmJiBdXSlbZGVmaW5lZCBdYjRfYXBpX1BSRUZJWFtTVFlQRV9JU19UUklWSUFMICYmIF1iNF9hcGlfUFJFRklYW1NUWVBFX0lTX1RSSVZJQUwpKQogIyAgZGVmaW5lIFlZU1RBQ0tFWFBBTkRBQkxFIDEKICMgZWxzZQogIyAgZGVmaW5lIFlZU1RBQ0tFWFBBTkRBQkxFIDAKQEAgLTYzMCwxNiArNTcyLDE2IEBACiAjZW5kaWYKIAogI2lmIFlZU1RBQ0tFWFBBTkRBQkxFCi0jIGRlZmluZSBZWV9SRVNFUlZFX0dMUlNUQUNLKFl5c3RhY2spCQkJXAotICBkbyB7CQkJCQkJCVwKLSAgICBpZiAoWXlzdGFjay0+eXlzcGFjZUxlZnQgPCBZWUhFQURST09NKQkJXAotICAgICAgeXlleHBhbmRHTFJTdGFjayAoWXlzdGFjayk7CQkJXAorIyBkZWZpbmUgWVlfUkVTRVJWRV9HTFJTVEFDSyhZeXN0YWNrKSAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoWXlzdGFjay0+eXlzcGFjZUxlZnQgPCBZWUhFQURST09NKSAgICAgICAgICAgICAgXAorICAgICAgeXlleHBhbmRHTFJTdGFjayAoWXlzdGFjayk7ICAgICAgICAgICAgICAgICAgICAgICBcCiAgIH0gd2hpbGUgKFlZSUQgKDApKQogI2Vsc2UKLSMgZGVmaW5lIFlZX1JFU0VSVkVfR0xSU1RBQ0soWXlzdGFjaykJCQlcCi0gIGRvIHsJCQkJCQkJXAotICAgIGlmIChZeXN0YWNrLT55eXNwYWNlTGVmdCA8IFlZSEVBRFJPT00pCQlcCi0gICAgICB5eU1lbW9yeUV4aGF1c3RlZCAoWXlzdGFjayk7CQkJXAorIyBkZWZpbmUgWVlfUkVTRVJWRV9HTFJTVEFDSyhZeXN0YWNrKSAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoWXlzdGFjay0+eXlzcGFjZUxlZnQgPCBZWUhFQURST09NKSAgICAgICAgICAgICAgXAorICAgICAgeXlNZW1vcnlFeGhhdXN0ZWQgKFl5c3RhY2spOyAgICAgICAgICAgICAgICAgICAgICBcCiAgIH0gd2hpbGUgKFlZSUQgKDApKQogI2VuZGlmCiAKQEAgLTY4MywyNyArNjI1LDI3IEBACiAgICAgICBjaGFyIGNvbnN0ICp5eXAgPSB5eXN0cjsKIAogICAgICAgZm9yICg7OykKLQlzd2l0Y2ggKCorK3l5cCkKLQkgIHsKLQkgIGNhc2UgJ1wnJzoKLQkgIGNhc2UgJywnOgotCSAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7CisgICAgICAgIHN3aXRjaCAoKisreXlwKQorICAgICAgICAgIHsKKyAgICAgICAgICBjYXNlICdcJyc6CisgICAgICAgICAgY2FzZSAnLCc6CisgICAgICAgICAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7CiAKLQkgIGNhc2UgJ1xcJzoKLQkgICAgaWYgKCorK3l5cCAhPSAnXFwnKQotCSAgICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKLQkgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KLQkgIGRlZmF1bHQ6Ci0JICAgIGlmICh5eXJlcykKLQkgICAgICB5eXJlc1t5eW5dID0gKnl5cDsKLQkgICAgeXluKys7Ci0JICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJ1xcJzoKKyAgICAgICAgICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKKyAgICAgICAgICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOworICAgICAgICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKHl5cmVzKQorICAgICAgICAgICAgICB5eXJlc1t5eW5dID0gKnl5cDsKKyAgICAgICAgICAgIHl5bisrOworICAgICAgICAgICAgYnJlYWs7CiAKLQkgIGNhc2UgJyInOgotCSAgICBpZiAoeXlyZXMpCi0JICAgICAgeXlyZXNbeXluXSA9ICdcMCc7Ci0JICAgIHJldHVybiB5eW47Ci0JICB9CisgICAgICAgICAgY2FzZSAnIic6CisgICAgICAgICAgICBpZiAoeXlyZXMpCisgICAgICAgICAgICAgIHl5cmVzW3l5bl0gPSAnXDAnOworICAgICAgICAgICAgcmV0dXJuIHl5bjsKKyAgICAgICAgICB9CiAgICAgZG9fbm90X3N0cmlwX3F1b3RlczogOwogICAgIH0KIApAQCAtNzUzLDkgKzY5NSw5IEBACiAgICAgeXlTZW1hbnRpY09wdGlvbiogeXlmaXJzdFZhbDsKICAgICAvKiogU2VtYW50aWMgdmFsdWUgZm9yIHRoaXMgc3RhdGUuICAqLwogICAgIFlZU1RZUEUgeXlzdmFsOwotICB9IHl5c2VtYW50aWNzOworICB9IHl5c2VtYW50aWNzO11iNF9sb2NhdGlvbnNfaWYoW1sKICAgLyoqIFNvdXJjZSBsb2NhdGlvbiBmb3IgdGhpcyBzdGF0ZS4gICovCi0gIFlZTFRZUEUgeXlsb2M7CisgIFlZTFRZUEUgeXlsb2M7XV0pWwogfTsKIAogc3RydWN0IHl5R0xSU3RhdGVTZXQgewpAQCAtNzc3LDggKzcxOSw4IEBACiAgIHl5R0xSU3RhdGUqIHl5c3RhdGU7CiAgIC8qKiBUaGUgbG9va2FoZWFkIGZvciB0aGlzIHJlZHVjdGlvbi4gICovCiAgIGludCB5eXJhd2NoYXI7Ci0gIFlZU1RZUEUgeXl2YWw7Ci0gIFlZTFRZUEUgeXlsb2M7CisgIFlZU1RZUEUgeXl2YWw7XWI0X2xvY2F0aW9uc19pZihbWworICBZWUxUWVBFIHl5bG9jO11dKVsKICAgLyoqIE5leHQgc2libGluZyBpbiBjaGFpbiBvZiBvcHRpb25zLiAgVG8gZmFjaWxpdGF0ZSBtZXJnaW5nLAogICAgKiAgb3B0aW9ucyBhcmUgY2hhaW5lZCBpbiBkZWNyZWFzaW5nIG9yZGVyIGJ5IGFkZHJlc3MuICAqLwogICB5eVNlbWFudGljT3B0aW9uKiB5eW5leHQ7CkBAIC03OTksOCArNzQxLDggQEAKIFsKICAgaW50IHl5ZXJyY250OwogICBpbnQgeXlyYXdjaGFyOwotICBZWVNUWVBFIHl5dmFsOwotICBZWUxUWVBFIHl5bG9jOworICBZWVNUWVBFIHl5dmFsO11iNF9sb2NhdGlvbnNfaWYoW1sKKyAgWVlMVFlQRSB5eWxvYztdXSlbCiBdKVsKICAgWVlKTVBfQlVGIHl5ZXhjZXB0aW9uX2J1ZmZlcjsKICAgeXlHTFJTdGFja0l0ZW0qIHl5aXRlbXM7CkBAIC04MjAsNyArNzYyLDcgQEAKIHN0YXRpYyB2b2lkCiB5eUZhaWwgKHl5R0xSU3RhY2sqIHl5c3RhY2twXWI0X3B1cmVfZm9ybWFsc1ssIGNvbnN0IGNoYXIqIHl5bXNnKQogewotICBpZiAoeXltc2cgIT0gTlVMTCkKKyAgaWYgKHl5bXNnICE9IFlZX05VTEwpCiAgICAgeXllcnJvciAoXWI0X3l5ZXJyb3JfYXJnc1t5eW1zZyk7CiAgIFlZTE9OR0pNUCAoeXlzdGFja3AtPnl5ZXhjZXB0aW9uX2J1ZmZlciwgMSk7CiB9CkBAIC04MzMsNyArNzc1LDcgQEAKICAgWVlMT05HSk1QICh5eXN0YWNrcC0+eXlleGNlcHRpb25fYnVmZmVyLCAyKTsKIH0KIAotI2lmIFlZREVCVUcgfHwgWVlFUlJPUl9WRVJCT1NFCisjaWYgXWI0X2FwaV9QUkVGSVhbREVCVUcgfHwgWVlFUlJPUl9WRVJCT1NFCiAvKiogQSBwcmludGFibGUgcmVwcmVzZW50YXRpb24gb2YgVE9LRU4uICAqLwogc3RhdGljIGlubGluZSBjb25zdCBjaGFyKgogeXl0b2tlbk5hbWUgKHl5U3ltYm9sIHl5dG9rZW4pCkBAIC04NTIsMTUgKzc5NCwxNCBAQAogc3RhdGljIHZvaWQKIHl5ZmlsbGluICh5eUdMUlN0YWNrSXRlbSAqeXl2c3AsIGludCB5eWxvdzAsIGludCB5eWxvdzEpCiB7Ci0gIHl5R0xSU3RhdGUqIHM7CiAgIGludCBpOwotICBzID0geXl2c3BbeXlsb3cwXS55eXN0YXRlLnl5cHJlZDsKKyAgeXlHTFJTdGF0ZSAqcyA9IHl5dnNwW3l5bG93MF0ueXlzdGF0ZS55eXByZWQ7CiAgIGZvciAoaSA9IHl5bG93MC0xOyBpID49IHl5bG93MTsgaSAtPSAxKQogICAgIHsKICAgICAgIFlZQVNTRVJUIChzLT55eXJlc29sdmVkKTsKICAgICAgIHl5dnNwW2ldLnl5c3RhdGUueXlyZXNvbHZlZCA9IHl5dHJ1ZTsKLSAgICAgIHl5dnNwW2ldLnl5c3RhdGUueXlzZW1hbnRpY3MueXlzdmFsID0gcy0+eXlzZW1hbnRpY3MueXlzdmFsOwotICAgICAgeXl2c3BbaV0ueXlzdGF0ZS55eWxvYyA9IHMtPnl5bG9jOworICAgICAgeXl2c3BbaV0ueXlzdGF0ZS55eXNlbWFudGljcy55eXN2YWwgPSBzLT55eXNlbWFudGljcy55eXN2YWw7XWI0X2xvY2F0aW9uc19pZihbWworICAgICAgeXl2c3BbaV0ueXlzdGF0ZS55eWxvYyA9IHMtPnl5bG9jO11dKVsKICAgICAgIHMgPSB5eXZzcFtpXS55eXN0YXRlLnl5cHJlZCA9IHMtPnl5cHJlZDsKICAgICB9CiB9CkBAIC04ODgsMTMgKzgyOSwxMSBAQAogICogIHl5ZXJyIGZvciBZWUVSUk9SLCB5eWFib3J0IGZvciBZWUFCT1JULiAgKi8KIC8qQVJHU1VTRUQqLyBzdGF0aWMgWVlSRVNVTFRUQUcKIHl5dXNlckFjdGlvbiAoeXlSdWxlTnVtIHl5biwgaW50IHl5cmhzbGVuLCB5eUdMUlN0YWNrSXRlbSogeXl2c3AsCi0JICAgICAgWVlTVFlQRSogeXl2YWxwLAotCSAgICAgIFlZTFRZUEUqIFlZT1BUSU9OQUxfTE9DICh5eWxvY3ApLAotCSAgICAgIHl5R0xSU3RhY2sqIHl5c3RhY2twCi0JICAgICAgXWI0X3VzZXJfZm9ybWFsc1spCisgICAgICAgICAgICAgIHl5R0xSU3RhY2sqIHl5c3RhY2twLAorICAgICAgICAgICAgICBZWVNUWVBFKiB5eXZhbHBdYjRfbG9jdXNlcl9mb3JtYWxzWykKIHsKICAgeXlib29sIHl5bm9ybWFsIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkgPQotICAgICh5eXN0YWNrcC0+eXlzcGxpdFBvaW50ID09IE5VTEwpOworICAgICh5eXN0YWNrcC0+eXlzcGxpdFBvaW50ID09IFlZX05VTEwpOwogICBpbnQgeXlsb3c7CiBdYjRfcGFyc2VfcGFyYW1fdXNlW11kbmwKIFsjIHVuZGVmIHl5ZXJyb2sKQEAgLTkxMiwyMyArODUxLDIxIEBACiAjIHVuZGVmIFlZRklMTAogIyBkZWZpbmUgWVlGSUxMKE4pIHl5ZmlsbCAoeXl2c3AsICZ5eWxvdywgTiwgeXlub3JtYWwpCiAjIHVuZGVmIFlZQkFDS1VQCi0jIGRlZmluZSBZWUJBQ0tVUChUb2tlbiwgVmFsdWUpCQkJCQkJICAgICBcCisjIGRlZmluZSBZWUJBQ0tVUChUb2tlbiwgVmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgcmV0dXJuIHl5ZXJyb3IgKF1iNF95eWVycm9yX2FyZ3NbWVlfKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIikpLCAgICAgXAotCSB5eWVycm9rLCB5eWVycgorICAgICAgICAgeXllcnJvaywgeXllcnIKIAogICB5eWxvdyA9IDE7CiAgIGlmICh5eXJoc2xlbiA9PSAwKQogICAgICp5eXZhbHAgPSB5eXZhbF9kZWZhdWx0OwogICBlbHNlCi0gICAgKnl5dmFscCA9IHl5dnNwW1lZRklMTCAoMS15eXJoc2xlbildLnl5c3RhdGUueXlzZW1hbnRpY3MueXlzdmFsOworICAgICp5eXZhbHAgPSB5eXZzcFtZWUZJTEwgKDEteXlyaHNsZW4pXS55eXN0YXRlLnl5c2VtYW50aWNzLnl5c3ZhbDtdYjRfbG9jYXRpb25zX2lmKFtbCiAgIFlZTExPQ19ERUZBVUxUICgoKnl5bG9jcCksICh5eXZzcCAtIHl5cmhzbGVuKSwgeXlyaHNsZW4pOwotXWI0X2xvY2F0aW9uc19pZihbWyAgeXlzdGFja3AtPnl5ZXJyb3JfcmFuZ2VbMV0ueXlzdGF0ZS55eWxvYyA9ICp5eWxvY3A7CisgIHl5c3RhY2twLT55eWVycm9yX3JhbmdlWzFdLnl5c3RhdGUueXlsb2MgPSAqeXlsb2NwOwogXV0pWwogICBzd2l0Y2ggKHl5bikKICAgICB7Ci0gICAgICBdYjRfYWN0aW9ucwotLyogTGluZSBfX2xpbmVfXyBvZiBnbHIuYy4gICovCi1iNF9zeW5jbGluZShbQG9saW5lQF0sIFtAb2ZpbGVAXSlbCisgICAgICBdYjRfdXNlcl9hY3Rpb25zWwogICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICAgfQogCkBAIC05NTYsNyArODkzLDcgQEAKICAgICB9CiB9CiAKLQkJCSAgICAgIC8qIEJpc29uIGdyYW1tYXItdGFibGUgbWFuaXB1bGF0aW9uLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJpc29uIGdyYW1tYXItdGFibGUgbWFuaXB1bGF0aW9uLiAgKi8KIAogXWI0X3l5ZGVzdHJ1Y3RfZ2VuZXJhdGUoW2I0X2NfYW5zaV9mdW5jdGlvbl9kZWZdKVsKIApAQCAtOTcyLDMyICs5MDksMzIgQEAKIHsKICAgaWYgKHl5cy0+eXlyZXNvbHZlZCkKICAgICB5eWRlc3RydWN0ICh5eW1zZywgeXlzdG9zW3l5cy0+eXlsclN0YXRlXSwKLQkJJnl5cy0+eXlzZW1hbnRpY3MueXlzdmFsXWI0X2xvY2F0aW9uc19pZihbLCAmeXlzLT55eWxvY10pW11iNF91c2VyX2FyZ3NbKTsKKyAgICAgICAgICAgICAgICAmeXlzLT55eXNlbWFudGljcy55eXN2YWxdYjRfbG9jdXNlcl9hcmdzKFsmeXlzLT55eWxvY10pWyk7CiAgIGVsc2UKICAgICB7Ci0jaWYgWVlERUJVRworI2lmIF1iNF9hcGlfUFJFRklYW0RFQlVHCiAgICAgICBpZiAoeXlkZWJ1ZykKLQl7Ci0JICBpZiAoeXlzLT55eXNlbWFudGljcy55eWZpcnN0VmFsKQotCSAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiVzIHVucmVzb2x2ZWQgIiwgeXltc2cpOwotCSAgZWxzZQotCSAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiVzIGluY29tcGxldGUgIiwgeXltc2cpOwotCSAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsIHl5c3Rvc1t5eXMtPnl5bHJTdGF0ZV0sCi0JCQkgICBOVUxMXWI0X2xvY2F0aW9uc19pZihbLCAmeXlzLT55eWxvY10pW11iNF91c2VyX2FyZ3NbKTsKLQkgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKLQl9CisgICAgICAgIHsKKyAgICAgICAgICBpZiAoeXlzLT55eXNlbWFudGljcy55eWZpcnN0VmFsKQorICAgICAgICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyB1bnJlc29sdmVkICIsIHl5bXNnKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiVzIGluY29tcGxldGUgIiwgeXltc2cpOworICAgICAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXN0b3NbeXlzLT55eWxyU3RhdGVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWVlfTlVMTF1iNF9sb2N1c2VyX2FyZ3MoWyZ5eXMtPnl5bG9jXSlbKTsKKyAgICAgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CisgICAgICAgIH0KICNlbmRpZgogCiAgICAgICBpZiAoeXlzLT55eXNlbWFudGljcy55eWZpcnN0VmFsKQotCXsKLQkgIHl5U2VtYW50aWNPcHRpb24gKnl5b3B0aW9uID0geXlzLT55eXNlbWFudGljcy55eWZpcnN0VmFsOwotCSAgeXlHTFJTdGF0ZSAqeXlyaDsKLQkgIGludCB5eW47Ci0JICBmb3IgKHl5cmggPSB5eW9wdGlvbi0+eXlzdGF0ZSwgeXluID0geXlyaHNMZW5ndGggKHl5b3B0aW9uLT55eXJ1bGUpOwotCSAgICAgICB5eW4gPiAwOwotCSAgICAgICB5eXJoID0geXlyaC0+eXlwcmVkLCB5eW4gLT0gMSkKLQkgICAgeXlkZXN0cm95R0xSU3RhdGUgKHl5bXNnLCB5eXJoXWI0X3VzZXJfYXJnc1spOwotCX0KKyAgICAgICAgeworICAgICAgICAgIHl5U2VtYW50aWNPcHRpb24gKnl5b3B0aW9uID0geXlzLT55eXNlbWFudGljcy55eWZpcnN0VmFsOworICAgICAgICAgIHl5R0xSU3RhdGUgKnl5cmg7CisgICAgICAgICAgaW50IHl5bjsKKyAgICAgICAgICBmb3IgKHl5cmggPSB5eW9wdGlvbi0+eXlzdGF0ZSwgeXluID0geXlyaHNMZW5ndGggKHl5b3B0aW9uLT55eXJ1bGUpOworICAgICAgICAgICAgICAgeXluID4gMDsKKyAgICAgICAgICAgICAgIHl5cmggPSB5eXJoLT55eXByZWQsIHl5biAtPSAxKQorICAgICAgICAgICAgeXlkZXN0cm95R0xSU3RhdGUgKHl5bXNnLCB5eXJoXWI0X3VzZXJfYXJnc1spOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC0xMDA4LDE3ICs5NDUsMTUgQEAKICAgcmV0dXJuIHl5cjFbeXlydWxlXTsKIH0KIAotI2RlZmluZSB5eWlzX3BhY3RfbmluZih5eXN0YXRlKSBcCi0gIF1tNF9pZihtNF9ldmFsKGI0X3BhY3RfbmluZiA8IGI0X3BhY3RfbWluKSwgWzFdLAotCSBbMF0sCi0JIFsoKHl5c3RhdGUpID09IFlZUEFDVF9OSU5GKV0pWworI2RlZmluZSB5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdChZeXN0YXRlKSBcCisgIF1iNF90YWJsZV92YWx1ZV9lcXVhbHMoW1twYWN0XV0sIFtbWXlzdGF0ZV1dLCBbYjRfcGFjdF9uaW5mXSlbCiAKIC8qKiBUcnVlIGlmZiBMUiBzdGF0ZSBTVEFURSBoYXMgb25seSBhIGRlZmF1bHQgcmVkdWN0aW9uIChyZWdhcmRsZXNzCiAgKiAgb2YgdG9rZW4pLiAgKi8KIHN0YXRpYyBpbmxpbmUgeXlib29sCiB5eWlzRGVmYXVsdGVkU3RhdGUgKHl5U3RhdGVOdW0geXlzdGF0ZSkKIHsKLSAgcmV0dXJuIHl5aXNfcGFjdF9uaW5mICh5eXBhY3RbeXlzdGF0ZV0pOworICByZXR1cm4geXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQgKHl5cGFjdFt5eXN0YXRlXSk7CiB9CiAKIC8qKiBUaGUgZGVmYXVsdCByZWR1Y3Rpb24gZm9yIFNUQVRFLCBhc3N1bWluZyBpdCBoYXMgb25lLiAgKi8KQEAgLTEwMjgsMTAgKzk2Myw4IEBACiAgIHJldHVybiB5eWRlZmFjdFt5eXN0YXRlXTsKIH0KIAotI2RlZmluZSB5eWlzX3RhYmxlX25pbmYoeXl0YWJsZV92YWx1ZSkgXAotICBdbTRfaWYobTRfZXZhbChiNF90YWJsZV9uaW5mIDwgYjRfdGFibGVfbWluKSwgWzFdLAotCSBbWVlJRCAoMCldLAotCSBbKCh5eXRhYmxlX3ZhbHVlKSA9PSBZWVRBQkxFX05JTkYpXSlbCisjZGVmaW5lIHl5dGFibGVfdmFsdWVfaXNfZXJyb3IoWXl0YWJsZV92YWx1ZSkgXAorICBdYjRfdGFibGVfdmFsdWVfZXF1YWxzKFtbdGFibGVdXSwgW1tZeXRhYmxlX3ZhbHVlXV0sIFtiNF90YWJsZV9uaW5mXSlbCiAKIC8qKiBTZXQgKllZQUNUSU9OIHRvIHRoZSBhY3Rpb24gdG8gdGFrZSBpbiBZWVNUQVRFIG9uIHNlZWluZyBZWVRPS0VOLgogICogIFJlc3VsdCBSIG1lYW5zCkBAIC0xMDQzLDE1ICs5NzYsMTYgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkCiB5eWdldExSQWN0aW9ucyAoeXlTdGF0ZU51bSB5eXN0YXRlLCBpbnQgeXl0b2tlbiwKLQkJaW50KiB5eWFjdGlvbiwgY29uc3Qgc2hvcnQgaW50KiogeXljb25mbGljdHMpCisgICAgICAgICAgICAgICAgaW50KiB5eWFjdGlvbiwgY29uc3Qgc2hvcnQgaW50KiogeXljb25mbGljdHMpCiB7CiAgIGludCB5eWluZGV4ID0geXlwYWN0W3l5c3RhdGVdICsgeXl0b2tlbjsKLSAgaWYgKHl5aW5kZXggPCAwIHx8IFlZTEFTVCA8IHl5aW5kZXggfHwgeXljaGVja1t5eWluZGV4XSAhPSB5eXRva2VuKQorICBpZiAoeXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQgKHl5cGFjdFt5eXN0YXRlXSkKKyAgICAgIHx8IHl5aW5kZXggPCAwIHx8IFlZTEFTVCA8IHl5aW5kZXggfHwgeXljaGVja1t5eWluZGV4XSAhPSB5eXRva2VuKQogICAgIHsKICAgICAgICp5eWFjdGlvbiA9IC15eWRlZmFjdFt5eXN0YXRlXTsKICAgICAgICp5eWNvbmZsaWN0cyA9IHl5Y29uZmw7CiAgICAgfQotICBlbHNlIGlmICghIHl5aXNfdGFibGVfbmluZiAoeXl0YWJsZVt5eWluZGV4XSkpCisgIGVsc2UgaWYgKCEgeXl0YWJsZV92YWx1ZV9pc19lcnJvciAoeXl0YWJsZVt5eWluZGV4XSkpCiAgICAgewogICAgICAgKnl5YWN0aW9uID0geXl0YWJsZVt5eWluZGV4XTsKICAgICAgICp5eWNvbmZsaWN0cyA9IHl5Y29uZmwgKyB5eWNvbmZscFt5eWluZGV4XTsKQEAgLTEwODYsNyArMTAyMCw3IEBACiAgIHJldHVybiB5eWFjdGlvbiA9PSAwOwogfQogCi0JCQkJLyogR0xSU3RhdGVzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdMUlN0YXRlcyAqLwogCiAvKiogUmV0dXJuIGEgZnJlc2ggR0xSU3RhY2tJdGVtLiAgQ2FsbGVycyBzaG91bGQgY2FsbAogICogWVlfUkVTRVJWRV9HTFJTVEFDSyBhZnRlcndhcmRzIHRvIG1ha2Ugc3VyZSB0aGVyZSBpcyBzdWZmaWNpZW50CkBAIC0xMTA4LDcgKzEwNDIsNyBAQAogICogIHN0YWNrICNLIG9mICpTVEFDS1AuICovCiBzdGF0aWMgdm9pZAogeXlhZGREZWZlcnJlZEFjdGlvbiAoeXlHTFJTdGFjayogeXlzdGFja3AsIHNpemVfdCB5eWssIHl5R0xSU3RhdGUqIHl5c3RhdGUsCi0JCSAgICAgeXlHTFJTdGF0ZSogcmhzLCB5eVJ1bGVOdW0geXlydWxlKQorICAgICAgICAgICAgICAgICAgICAgeXlHTFJTdGF0ZSogcmhzLCB5eVJ1bGVOdW0geXlydWxlKQogewogICB5eVNlbWFudGljT3B0aW9uKiB5eW5ld09wdGlvbiA9CiAgICAgJnl5bmV3R0xSU3RhY2tJdGVtICh5eXN0YWNrcCwgeXlmYWxzZSktPnl5b3B0aW9uOwpAQCAtMTExNyw4ICsxMDUxLDggQEAKICAgaWYgKHl5c3RhY2twLT55eXRvcHMueXlsb29rYWhlYWROZWVkc1t5eWtdKQogICAgIHsKICAgICAgIHl5bmV3T3B0aW9uLT55eXJhd2NoYXIgPSB5eWNoYXI7Ci0gICAgICB5eW5ld09wdGlvbi0+eXl2YWwgPSB5eWx2YWw7Ci0gICAgICB5eW5ld09wdGlvbi0+eXlsb2MgPSB5eWxsb2M7CisgICAgICB5eW5ld09wdGlvbi0+eXl2YWwgPSB5eWx2YWw7XWI0X2xvY2F0aW9uc19pZihbCisgICAgICB5eW5ld09wdGlvbi0+eXlsb2MgPSB5eWxsb2M7XSlbCiAgICAgfQogICBlbHNlCiAgICAgeXluZXdPcHRpb24tPnl5cmF3Y2hhciA9IFlZRU1QVFk7CkBAIC0xMTI4LDcgKzEwNjIsNyBAQAogICBZWV9SRVNFUlZFX0dMUlNUQUNLICh5eXN0YWNrcCk7CiB9CiAKLQkJCQkvKiBHTFJTdGFja3MgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR0xSU3RhY2tzICovCiAKIC8qKiBJbml0aWFsaXplIFNFVCB0byBhIHNpbmdsZXRvbiBzZXQgY29udGFpbmluZyBhbiBlbXB0eSBzdGFjay4gICovCiBzdGF0aWMgeXlib29sCkBAIC0xMTM5LDcgKzEwNzMsNyBAQAogICB5eXNldC0+eXlzdGF0ZXMgPSAoeXlHTFJTdGF0ZSoqKSBZWU1BTExPQyAoMTYgKiBzaXplb2YgeXlzZXQtPnl5c3RhdGVzWzBdKTsKICAgaWYgKCEgeXlzZXQtPnl5c3RhdGVzKQogICAgIHJldHVybiB5eWZhbHNlOwotICB5eXNldC0+eXlzdGF0ZXNbMF0gPSBOVUxMOworICB5eXNldC0+eXlzdGF0ZXNbMF0gPSBZWV9OVUxMOwogICB5eXNldC0+eXlsb29rYWhlYWROZWVkcyA9CiAgICAgKHl5Ym9vbCopIFlZTUFMTE9DICgxNiAqIHNpemVvZiB5eXNldC0+eXlsb29rYWhlYWROZWVkc1swXSk7CiAgIGlmICghIHl5c2V0LT55eWxvb2thaGVhZE5lZWRzKQpAQCAtMTE2OSw4ICsxMTAzLDggQEAKICAgaWYgKCF5eXN0YWNrcC0+eXlpdGVtcykKICAgICByZXR1cm4geXlmYWxzZTsKICAgeXlzdGFja3AtPnl5bmV4dEZyZWUgPSB5eXN0YWNrcC0+eXlpdGVtczsKLSAgeXlzdGFja3AtPnl5c3BsaXRQb2ludCA9IE5VTEw7Ci0gIHl5c3RhY2twLT55eWxhc3REZWxldGVkID0gTlVMTDsKKyAgeXlzdGFja3AtPnl5c3BsaXRQb2ludCA9IFlZX05VTEw7CisgIHl5c3RhY2twLT55eWxhc3REZWxldGVkID0gWVlfTlVMTDsKICAgcmV0dXJuIHl5aW5pdFN0YXRlU2V0ICgmeXlzdGFja3AtPnl5dG9wcyk7CiB9CiAKQEAgLTExODksOSArMTEyMyw5IEBACiB7CiAgIHl5R0xSU3RhY2tJdGVtKiB5eW5ld0l0ZW1zOwogICB5eUdMUlN0YWNrSXRlbSogeXlwMCwgKnl5cDE7Ci0gIHNpemVfdCB5eXNpemUsIHl5bmV3U2l6ZTsKKyAgc2l6ZV90IHl5bmV3U2l6ZTsKICAgc2l6ZV90IHl5bjsKLSAgeXlzaXplID0geXlzdGFja3AtPnl5bmV4dEZyZWUgLSB5eXN0YWNrcC0+eXlpdGVtczsKKyAgc2l6ZV90IHl5c2l6ZSA9IHl5c3RhY2twLT55eW5leHRGcmVlIC0geXlzdGFja3AtPnl5aXRlbXM7CiAgIGlmIChZWU1BWERFUFRIIC0gWVlIRUFEUk9PTSA8IHl5c2l6ZSkKICAgICB5eU1lbW9yeUV4aGF1c3RlZCAoeXlzdGFja3ApOwogICB5eW5ld1NpemUgPSAyKnl5c2l6ZTsKQEAgLTEyMDYsMzUgKzExNDAsMzUgQEAKICAgICB7CiAgICAgICAqeXlwMSA9ICp5eXAwOwogICAgICAgaWYgKCooeXlib29sICopIHl5cDApCi0JewotCSAgeXlHTFJTdGF0ZSogeXlzMCA9ICZ5eXAwLT55eXN0YXRlOwotCSAgeXlHTFJTdGF0ZSogeXlzMSA9ICZ5eXAxLT55eXN0YXRlOwotCSAgaWYgKHl5czAtPnl5cHJlZCAhPSBOVUxMKQotCSAgICB5eXMxLT55eXByZWQgPQotCSAgICAgIFlZUkVMT0MgKHl5cDAsIHl5cDEsIHl5czAtPnl5cHJlZCwgeXlzdGF0ZSk7Ci0JICBpZiAoISB5eXMwLT55eXJlc29sdmVkICYmIHl5czAtPnl5c2VtYW50aWNzLnl5Zmlyc3RWYWwgIT0gTlVMTCkKLQkgICAgeXlzMS0+eXlzZW1hbnRpY3MueXlmaXJzdFZhbCA9Ci0JICAgICAgWVlSRUxPQyh5eXAwLCB5eXAxLCB5eXMwLT55eXNlbWFudGljcy55eWZpcnN0VmFsLCB5eW9wdGlvbik7Ci0JfQorICAgICAgICB7CisgICAgICAgICAgeXlHTFJTdGF0ZSogeXlzMCA9ICZ5eXAwLT55eXN0YXRlOworICAgICAgICAgIHl5R0xSU3RhdGUqIHl5czEgPSAmeXlwMS0+eXlzdGF0ZTsKKyAgICAgICAgICBpZiAoeXlzMC0+eXlwcmVkICE9IFlZX05VTEwpCisgICAgICAgICAgICB5eXMxLT55eXByZWQgPQorICAgICAgICAgICAgICBZWVJFTE9DICh5eXAwLCB5eXAxLCB5eXMwLT55eXByZWQsIHl5c3RhdGUpOworICAgICAgICAgIGlmICghIHl5czAtPnl5cmVzb2x2ZWQgJiYgeXlzMC0+eXlzZW1hbnRpY3MueXlmaXJzdFZhbCAhPSBZWV9OVUxMKQorICAgICAgICAgICAgeXlzMS0+eXlzZW1hbnRpY3MueXlmaXJzdFZhbCA9CisgICAgICAgICAgICAgIFlZUkVMT0MgKHl5cDAsIHl5cDEsIHl5czAtPnl5c2VtYW50aWNzLnl5Zmlyc3RWYWwsIHl5b3B0aW9uKTsKKyAgICAgICAgfQogICAgICAgZWxzZQotCXsKLQkgIHl5U2VtYW50aWNPcHRpb24qIHl5djAgPSAmeXlwMC0+eXlvcHRpb247Ci0JICB5eVNlbWFudGljT3B0aW9uKiB5eXYxID0gJnl5cDEtPnl5b3B0aW9uOwotCSAgaWYgKHl5djAtPnl5c3RhdGUgIT0gTlVMTCkKLQkgICAgeXl2MS0+eXlzdGF0ZSA9IFlZUkVMT0MgKHl5cDAsIHl5cDEsIHl5djAtPnl5c3RhdGUsIHl5c3RhdGUpOwotCSAgaWYgKHl5djAtPnl5bmV4dCAhPSBOVUxMKQotCSAgICB5eXYxLT55eW5leHQgPSBZWVJFTE9DICh5eXAwLCB5eXAxLCB5eXYwLT55eW5leHQsIHl5b3B0aW9uKTsKLQl9CisgICAgICAgIHsKKyAgICAgICAgICB5eVNlbWFudGljT3B0aW9uKiB5eXYwID0gJnl5cDAtPnl5b3B0aW9uOworICAgICAgICAgIHl5U2VtYW50aWNPcHRpb24qIHl5djEgPSAmeXlwMS0+eXlvcHRpb247CisgICAgICAgICAgaWYgKHl5djAtPnl5c3RhdGUgIT0gWVlfTlVMTCkKKyAgICAgICAgICAgIHl5djEtPnl5c3RhdGUgPSBZWVJFTE9DICh5eXAwLCB5eXAxLCB5eXYwLT55eXN0YXRlLCB5eXN0YXRlKTsKKyAgICAgICAgICBpZiAoeXl2MC0+eXluZXh0ICE9IFlZX05VTEwpCisgICAgICAgICAgICB5eXYxLT55eW5leHQgPSBZWVJFTE9DICh5eXAwLCB5eXAxLCB5eXYwLT55eW5leHQsIHl5b3B0aW9uKTsKKyAgICAgICAgfQogICAgIH0KLSAgaWYgKHl5c3RhY2twLT55eXNwbGl0UG9pbnQgIT0gTlVMTCkKKyAgaWYgKHl5c3RhY2twLT55eXNwbGl0UG9pbnQgIT0gWVlfTlVMTCkKICAgICB5eXN0YWNrcC0+eXlzcGxpdFBvaW50ID0gWVlSRUxPQyAoeXlzdGFja3AtPnl5aXRlbXMsIHl5bmV3SXRlbXMsCi0JCQkJIHl5c3RhY2twLT55eXNwbGl0UG9pbnQsIHl5c3RhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlzdGFja3AtPnl5c3BsaXRQb2ludCwgeXlzdGF0ZSk7CiAKICAgZm9yICh5eW4gPSAwOyB5eW4gPCB5eXN0YWNrcC0+eXl0b3BzLnl5c2l6ZTsgeXluICs9IDEpCi0gICAgaWYgKHl5c3RhY2twLT55eXRvcHMueXlzdGF0ZXNbeXluXSAhPSBOVUxMKQorICAgIGlmICh5eXN0YWNrcC0+eXl0b3BzLnl5c3RhdGVzW3l5bl0gIT0gWVlfTlVMTCkKICAgICAgIHl5c3RhY2twLT55eXRvcHMueXlzdGF0ZXNbeXluXSA9Ci0JWVlSRUxPQyAoeXlzdGFja3AtPnl5aXRlbXMsIHl5bmV3SXRlbXMsCi0JCSB5eXN0YWNrcC0+eXl0b3BzLnl5c3RhdGVzW3l5bl0sIHl5c3RhdGUpOworICAgICAgICBZWVJFTE9DICh5eXN0YWNrcC0+eXlpdGVtcywgeXluZXdJdGVtcywKKyAgICAgICAgICAgICAgICAgeXlzdGFja3AtPnl5dG9wcy55eXN0YXRlc1t5eW5dLCB5eXN0YXRlKTsKICAgWVlGUkVFICh5eXN0YWNrcC0+eXlpdGVtcyk7CiAgIHl5c3RhY2twLT55eWl0ZW1zID0geXluZXdJdGVtczsKICAgeXlzdGFja3AtPnl5bmV4dEZyZWUgPSB5eW5ld0l0ZW1zICsgeXlzaXplOwpAQCAtMTI1NSw3ICsxMTg5LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogeXl1cGRhdGVTcGxpdCAoeXlHTFJTdGFjayogeXlzdGFja3AsIHl5R0xSU3RhdGUqIHl5cykKIHsKLSAgaWYgKHl5c3RhY2twLT55eXNwbGl0UG9pbnQgIT0gTlVMTCAmJiB5eXN0YWNrcC0+eXlzcGxpdFBvaW50ID4geXlzKQorICBpZiAoeXlzdGFja3AtPnl5c3BsaXRQb2ludCAhPSBZWV9OVUxMICYmIHl5c3RhY2twLT55eXNwbGl0UG9pbnQgPiB5eXMpCiAgICAgeXlzdGFja3AtPnl5c3BsaXRQb2ludCA9IHl5czsKIH0KIApAQCAtMTI2Myw5ICsxMTk3LDkgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogeXltYXJrU3RhY2tEZWxldGVkICh5eUdMUlN0YWNrKiB5eXN0YWNrcCwgc2l6ZV90IHl5aykKIHsKLSAgaWYgKHl5c3RhY2twLT55eXRvcHMueXlzdGF0ZXNbeXlrXSAhPSBOVUxMKQorICBpZiAoeXlzdGFja3AtPnl5dG9wcy55eXN0YXRlc1t5eWtdICE9IFlZX05VTEwpCiAgICAgeXlzdGFja3AtPnl5bGFzdERlbGV0ZWQgPSB5eXN0YWNrcC0+eXl0b3BzLnl5c3RhdGVzW3l5a107Ci0gIHl5c3RhY2twLT55eXRvcHMueXlzdGF0ZXNbeXlrXSA9IE5VTEw7CisgIHl5c3RhY2twLT55eXRvcHMueXlzdGF0ZXNbeXlrXSA9IFlZX05VTEw7CiB9CiAKIC8qKiBVbmRlbGV0ZSB0aGUgbGFzdCBzdGFjayB0aGF0IHdhcyBtYXJrZWQgYXMgZGVsZXRlZC4gIENhbiBvbmx5IGJlCkBAIC0xMjc0LDEyICsxMjA4LDEyIEBACiBzdGF0aWMgdm9pZAogeXl1bmRlbGV0ZUxhc3RTdGFjayAoeXlHTFJTdGFjayogeXlzdGFja3ApCiB7Ci0gIGlmICh5eXN0YWNrcC0+eXlsYXN0RGVsZXRlZCA9PSBOVUxMIHx8IHl5c3RhY2twLT55eXRvcHMueXlzaXplICE9IDApCisgIGlmICh5eXN0YWNrcC0+eXlsYXN0RGVsZXRlZCA9PSBZWV9OVUxMIHx8IHl5c3RhY2twLT55eXRvcHMueXlzaXplICE9IDApCiAgICAgcmV0dXJuOwogICB5eXN0YWNrcC0+eXl0b3BzLnl5c3RhdGVzWzBdID0geXlzdGFja3AtPnl5bGFzdERlbGV0ZWQ7CiAgIHl5c3RhY2twLT55eXRvcHMueXlzaXplID0gMTsKICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVzdG9yaW5nIGxhc3QgZGVsZXRlZCBzdGFjayBhcyBzdGFjayAjMC5cbiIpKTsKLSAgeXlzdGFja3AtPnl5bGFzdERlbGV0ZWQgPSBOVUxMOworICB5eXN0YWNrcC0+eXlsYXN0RGVsZXRlZCA9IFlZX05VTEw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtMTI4OSwzMSArMTIyMywzMSBAQAogICB5eWkgPSB5eWogPSAwOwogICB3aGlsZSAoeXlqIDwgeXlzdGFja3AtPnl5dG9wcy55eXNpemUpCiAgICAgewotICAgICAgaWYgKHl5c3RhY2twLT55eXRvcHMueXlzdGF0ZXNbeXlpXSA9PSBOVUxMKQotCXsKLQkgIGlmICh5eWkgPT0geXlqKQotCSAgICB7Ci0JICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVtb3ZpbmcgZGVhZCBzdGFja3MuXG4iKSk7Ci0JICAgIH0KLQkgIHl5c3RhY2twLT55eXRvcHMueXlzaXplIC09IDE7Ci0JfQorICAgICAgaWYgKHl5c3RhY2twLT55eXRvcHMueXlzdGF0ZXNbeXlpXSA9PSBZWV9OVUxMKQorICAgICAgICB7CisgICAgICAgICAgaWYgKHl5aSA9PSB5eWopCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlbW92aW5nIGRlYWQgc3RhY2tzLlxuIikpOworICAgICAgICAgICAgfQorICAgICAgICAgIHl5c3RhY2twLT55eXRvcHMueXlzaXplIC09IDE7CisgICAgICAgIH0KICAgICAgIGVsc2UKLQl7Ci0JICB5eXN0YWNrcC0+eXl0b3BzLnl5c3RhdGVzW3l5al0gPSB5eXN0YWNrcC0+eXl0b3BzLnl5c3RhdGVzW3l5aV07Ci0JICAvKiBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgaXQncyB1bm5lY2Vzc2FyeSB0byBjb3B5Ci0JICAgICB5eXN0YWNrcC0+eXl0b3BzLnl5bG9va2FoZWFkTmVlZHNbeXlpXSBzaW5jZSwgYWZ0ZXIKLQkgICAgIHl5cmVtb3ZlRGVsZXRlcyByZXR1cm5zLCB0aGUgcGFyc2VyIGltbWVkaWF0ZWx5IGVpdGhlciBlbnRlcnMKLQkgICAgIGRldGVybWluaXN0aWMgb3BlcmF0aW9uIG9yIHNoaWZ0cyBhIHRva2VuLiAgSG93ZXZlciwgaXQgZG9lc24ndAotCSAgICAgaHVydCwgYW5kIHRoZSBjb2RlIG1pZ2h0IGV2b2x2ZSB0byBuZWVkIGl0LiAgKi8KLQkgIHl5c3RhY2twLT55eXRvcHMueXlsb29rYWhlYWROZWVkc1t5eWpdID0KLQkgICAgeXlzdGFja3AtPnl5dG9wcy55eWxvb2thaGVhZE5lZWRzW3l5aV07Ci0JICBpZiAoeXlqICE9IHl5aSkKLQkgICAgewotCSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlbmFtZSBzdGFjayAlbHUgLT4gJWx1LlxuIiwKLQkJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eWksICh1bnNpZ25lZCBsb25nIGludCkgeXlqKSk7Ci0JICAgIH0KLQkgIHl5aiArPSAxOwotCX0KKyAgICAgICAgeworICAgICAgICAgIHl5c3RhY2twLT55eXRvcHMueXlzdGF0ZXNbeXlqXSA9IHl5c3RhY2twLT55eXRvcHMueXlzdGF0ZXNbeXlpXTsKKyAgICAgICAgICAvKiBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgaXQncyB1bm5lY2Vzc2FyeSB0byBjb3B5CisgICAgICAgICAgICAgeXlzdGFja3AtPnl5dG9wcy55eWxvb2thaGVhZE5lZWRzW3l5aV0gc2luY2UsIGFmdGVyCisgICAgICAgICAgICAgeXlyZW1vdmVEZWxldGVzIHJldHVybnMsIHRoZSBwYXJzZXIgaW1tZWRpYXRlbHkgZWl0aGVyIGVudGVycworICAgICAgICAgICAgIGRldGVybWluaXN0aWMgb3BlcmF0aW9uIG9yIHNoaWZ0cyBhIHRva2VuLiAgSG93ZXZlciwgaXQgZG9lc24ndAorICAgICAgICAgICAgIGh1cnQsIGFuZCB0aGUgY29kZSBtaWdodCBldm9sdmUgdG8gbmVlZCBpdC4gICovCisgICAgICAgICAgeXlzdGFja3AtPnl5dG9wcy55eWxvb2thaGVhZE5lZWRzW3l5al0gPQorICAgICAgICAgICAgeXlzdGFja3AtPnl5dG9wcy55eWxvb2thaGVhZE5lZWRzW3l5aV07CisgICAgICAgICAgaWYgKHl5aiAhPSB5eWkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlbmFtZSBzdGFjayAlbHUgLT4gJWx1LlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eWksICh1bnNpZ25lZCBsb25nIGludCkgeXlqKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgeXlqICs9IDE7CisgICAgICAgIH0KICAgICAgIHl5aSArPSAxOwogICAgIH0KIH0KQEAgLTEzMjIsOCArMTI1Niw4IEBACiAgKiBMUlNUQVRFLCBhdCBpbnB1dCBwb3NpdGlvbiBQT1NOLCB3aXRoIChyZXNvbHZlZCkgc2VtYW50aWMgdmFsdWUgU1ZBTC4gICovCiBzdGF0aWMgaW5saW5lIHZvaWQKIHl5Z2xyU2hpZnQgKHl5R0xSU3RhY2sqIHl5c3RhY2twLCBzaXplX3QgeXlrLCB5eVN0YXRlTnVtIHl5bHJTdGF0ZSwKLQkgICAgc2l6ZV90IHl5cG9zbiwKLQkgICAgWVlTVFlQRSogeXl2YWxwLCBZWUxUWVBFKiB5eWxvY3ApCisgICAgICAgICAgICBzaXplX3QgeXlwb3NuLAorICAgICAgICAgICAgWVlTVFlQRSogeXl2YWxwXWI0X2xvY2F0aW9uc19pZihbLCBZWUxUWVBFKiB5eWxvY3BdKVspCiB7CiAgIHl5R0xSU3RhdGUqIHl5bmV3U3RhdGUgPSAmeXluZXdHTFJTdGFja0l0ZW0gKHl5c3RhY2twLCB5eXRydWUpLT55eXN0YXRlOwogCkBAIC0xMzMxLDggKzEyNjUsOCBAQAogICB5eW5ld1N0YXRlLT55eXBvc24gPSB5eXBvc247CiAgIHl5bmV3U3RhdGUtPnl5cmVzb2x2ZWQgPSB5eXRydWU7CiAgIHl5bmV3U3RhdGUtPnl5cHJlZCA9IHl5c3RhY2twLT55eXRvcHMueXlzdGF0ZXNbeXlrXTsKLSAgeXluZXdTdGF0ZS0+eXlzZW1hbnRpY3MueXlzdmFsID0gKnl5dmFscDsKLSAgeXluZXdTdGF0ZS0+eXlsb2MgPSAqeXlsb2NwOworICB5eW5ld1N0YXRlLT55eXNlbWFudGljcy55eXN2YWwgPSAqeXl2YWxwO11iNF9sb2NhdGlvbnNfaWYoWworICB5eW5ld1N0YXRlLT55eWxvYyA9ICp5eWxvY3A7XSlbCiAgIHl5c3RhY2twLT55eXRvcHMueXlzdGF0ZXNbeXlrXSA9IHl5bmV3U3RhdGU7CiAKICAgWVlfUkVTRVJWRV9HTFJTVEFDSyAoeXlzdGFja3ApOwpAQCAtMTM0Myw3ICsxMjc3LDcgQEAKICAqICBzZW1hbnRpYyB2YWx1ZSBvZiBZWVJIUyB1bmRlciB0aGUgYWN0aW9uIGZvciBZWVJVTEUuICAqLwogc3RhdGljIGlubGluZSB2b2lkCiB5eWdsclNoaWZ0RGVmZXIgKHl5R0xSU3RhY2sqIHl5c3RhY2twLCBzaXplX3QgeXlrLCB5eVN0YXRlTnVtIHl5bHJTdGF0ZSwKLQkJIHNpemVfdCB5eXBvc24sIHl5R0xSU3RhdGUqIHJocywgeXlSdWxlTnVtIHl5cnVsZSkKKyAgICAgICAgICAgICAgICAgc2l6ZV90IHl5cG9zbiwgeXlHTFJTdGF0ZSogcmhzLCB5eVJ1bGVOdW0geXlydWxlKQogewogICB5eUdMUlN0YXRlKiB5eW5ld1N0YXRlID0gJnl5bmV3R0xSU3RhY2tJdGVtICh5eXN0YWNrcCwgeXl0cnVlKS0+eXlzdGF0ZTsKIApAQCAtMTM1MSw3ICsxMjg1LDcgQEAKICAgeXluZXdTdGF0ZS0+eXlwb3NuID0geXlwb3NuOwogICB5eW5ld1N0YXRlLT55eXJlc29sdmVkID0geXlmYWxzZTsKICAgeXluZXdTdGF0ZS0+eXlwcmVkID0geXlzdGFja3AtPnl5dG9wcy55eXN0YXRlc1t5eWtdOwotICB5eW5ld1N0YXRlLT55eXNlbWFudGljcy55eWZpcnN0VmFsID0gTlVMTDsKKyAgeXluZXdTdGF0ZS0+eXlzZW1hbnRpY3MueXlmaXJzdFZhbCA9IFlZX05VTEw7CiAgIHl5c3RhY2twLT55eXRvcHMueXlzdGF0ZXNbeXlrXSA9IHl5bmV3U3RhdGU7CiAKICAgLyogSW52b2tlcyBZWV9SRVNFUlZFX0dMUlNUQUNLLiAgKi8KQEAgLTEzNjYsMTEgKzEzMDAsMTEgQEAKICAqICBmb3IgdXNlckFjdGlvbi4gICovCiBzdGF0aWMgaW5saW5lIFlZUkVTVUxUVEFHCiB5eWRvQWN0aW9uICh5eUdMUlN0YWNrKiB5eXN0YWNrcCwgc2l6ZV90IHl5aywgeXlSdWxlTnVtIHl5cnVsZSwKLQkgICAgWVlTVFlQRSogeXl2YWxwLCBZWUxUWVBFKiB5eWxvY3BdYjRfdXNlcl9mb3JtYWxzWykKKyAgICAgICAgICAgIFlZU1RZUEUqIHl5dmFscF1iNF9sb2N1c2VyX2Zvcm1hbHNbKQogewogICBpbnQgeXlucmhzID0geXlyaHNMZW5ndGggKHl5cnVsZSk7CiAKLSAgaWYgKHl5c3RhY2twLT55eXNwbGl0UG9pbnQgPT0gTlVMTCkKKyAgaWYgKHl5c3RhY2twLT55eXNwbGl0UG9pbnQgPT0gWVlfTlVMTCkKICAgICB7CiAgICAgICAvKiBTdGFuZGFyZCBzcGVjaWFsIGNhc2U6IHNpbmdsZSBzdGFjay4gICovCiAgICAgICB5eUdMUlN0YWNrSXRlbSogcmhzID0gKHl5R0xSU3RhY2tJdGVtKikgeXlzdGFja3AtPnl5dG9wcy55eXN0YXRlc1t5eWtdOwpAQCAtMTM3OCw4ICsxMzEyLDggQEAKICAgICAgIHl5c3RhY2twLT55eW5leHRGcmVlIC09IHl5bnJoczsKICAgICAgIHl5c3RhY2twLT55eXNwYWNlTGVmdCArPSB5eW5yaHM7CiAgICAgICB5eXN0YWNrcC0+eXl0b3BzLnl5c3RhdGVzWzBdID0gJiB5eXN0YWNrcC0+eXluZXh0RnJlZVstMV0ueXlzdGF0ZTsKLSAgICAgIHJldHVybiB5eXVzZXJBY3Rpb24gKHl5cnVsZSwgeXlucmhzLCByaHMsCi0JCQkgICB5eXZhbHAsIHl5bG9jcCwgeXlzdGFja3BdYjRfdXNlcl9hcmdzWyk7CisgICAgICByZXR1cm4geXl1c2VyQWN0aW9uICh5eXJ1bGUsIHl5bnJocywgcmhzLCB5eXN0YWNrcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5dmFscF1iNF9sb2N1c2VyX2FyZ3NbKTsKICAgICB9CiAgIGVsc2UKICAgICB7CkBAIC0xMzkxLDI5ICsxMzI1LDI5IEBACiAgICAgICB5eUdMUlN0YXRlKiB5eXM7CiAgICAgICB5eUdMUlN0YWNrSXRlbSB5eXJoc1ZhbHNbWVlNQVhSSFMgKyBZWU1BWExFRlQgKyAxXTsKICAgICAgIHl5cyA9IHl5cmhzVmFsc1tZWU1BWFJIUyArIFlZTUFYTEVGVF0ueXlzdGF0ZS55eXByZWQKLQk9IHl5c3RhY2twLT55eXRvcHMueXlzdGF0ZXNbeXlrXTtdYjRfbG9jYXRpb25zX2lmKFtbCisgICAgICAgID0geXlzdGFja3AtPnl5dG9wcy55eXN0YXRlc1t5eWtdO11iNF9sb2NhdGlvbnNfaWYoW1sKICAgICAgIGlmICh5eW5yaHMgPT0gMCkKLQkvKiBTZXQgZGVmYXVsdCBsb2NhdGlvbi4gICovCi0JeXlyaHNWYWxzW1lZTUFYUkhTICsgWVlNQVhMRUZUIC0gMV0ueXlzdGF0ZS55eWxvYyA9IHl5cy0+eXlsb2M7XV0pWworICAgICAgICAvKiBTZXQgZGVmYXVsdCBsb2NhdGlvbi4gICovCisgICAgICAgIHl5cmhzVmFsc1tZWU1BWFJIUyArIFlZTUFYTEVGVCAtIDFdLnl5c3RhdGUueXlsb2MgPSB5eXMtPnl5bG9jO11dKVsKICAgICAgIGZvciAoeXlpID0gMDsgeXlpIDwgeXlucmhzOyB5eWkgKz0gMSkKLQl7Ci0JICB5eXMgPSB5eXMtPnl5cHJlZDsKLQkgIFlZQVNTRVJUICh5eXMpOwotCX0KKyAgICAgICAgeworICAgICAgICAgIHl5cyA9IHl5cy0+eXlwcmVkOworICAgICAgICAgIFlZQVNTRVJUICh5eXMpOworICAgICAgICB9CiAgICAgICB5eXVwZGF0ZVNwbGl0ICh5eXN0YWNrcCwgeXlzKTsKICAgICAgIHl5c3RhY2twLT55eXRvcHMueXlzdGF0ZXNbeXlrXSA9IHl5czsKICAgICAgIHJldHVybiB5eXVzZXJBY3Rpb24gKHl5cnVsZSwgeXlucmhzLCB5eXJoc1ZhbHMgKyBZWU1BWFJIUyArIFlZTUFYTEVGVCAtIDEsCi0JCQkgICB5eXZhbHAsIHl5bG9jcCwgeXlzdGFja3BdYjRfdXNlcl9hcmdzWyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICB5eXN0YWNrcCwgeXl2YWxwXWI0X2xvY3VzZXJfYXJnc1spOwogICAgIH0KIH0KIAotI2lmICFZWURFQlVHCisjaWYgIV1iNF9hcGlfUFJFRklYW0RFQlVHCiAjIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoQXJncykKICNlbHNlCi0jIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoQXJncykJCVwKLWRvIHsJCQkJCVwKLSAgaWYgKHl5ZGVidWcpCQkJCVwKLSAgICB5eV9yZWR1Y2VfcHJpbnQgQXJnczsJCVwKKyMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChBcmdzKSAgICAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB5eV9yZWR1Y2VfcHJpbnQgQXJnczsgICAgICAgICAgICAgICBcCiB9IHdoaWxlIChZWUlEICgwKSkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgpAQCAtMTQyMiwyOSArMTM1NiwyOSBAQAogCiAvKkFSR1NVU0VEKi8gc3RhdGljIGlubGluZSB2b2lkCiB5eV9yZWR1Y2VfcHJpbnQgKHl5R0xSU3RhY2sqIHl5c3RhY2twLCBzaXplX3QgeXlrLCB5eVJ1bGVOdW0geXlydWxlLAotCQkgWVlTVFlQRSogeXl2YWxwLCBZWUxUWVBFKiB5eWxvY3BdYjRfdXNlcl9mb3JtYWxzWykKKyAgICAgICAgICAgICAgICAgWVlTVFlQRSogeXl2YWxwXWI0X2xvY3VzZXJfZm9ybWFsc1spCiB7CiAgIGludCB5eW5yaHMgPSB5eXJoc0xlbmd0aCAoeXlydWxlKTsKICAgeXlib29sIHl5bm9ybWFsIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkgPQotICAgICh5eXN0YWNrcC0+eXlzcGxpdFBvaW50ID09IE5VTEwpOworICAgICh5eXN0YWNrcC0+eXlzcGxpdFBvaW50ID09IFlZX05VTEwpOwogICB5eUdMUlN0YWNrSXRlbSogeXl2c3AgPSAoeXlHTFJTdGFja0l0ZW0qKSB5eXN0YWNrcC0+eXl0b3BzLnl5c3RhdGVzW3l5a107CiAgIGludCB5eWxvdyA9IDE7CiAgIGludCB5eWk7Ci0gIFlZVVNFICh5eXZhbHApOwotICBZWVVTRSAoeXlsb2NwKTsKKyAgWVlVU0UgKHl5dmFscCk7XWI0X2xvY2F0aW9uc19pZihbCisgIFlZVVNFICh5eWxvY3ApO10pWwogXWI0X3BhcnNlX3BhcmFtX3VzZVtdZG5sCiBbICBZWUZQUklOVEYgKHN0ZGVyciwgIlJlZHVjaW5nIHN0YWNrICVsdSBieSBydWxlICVkIChsaW5lICVsdSk6XG4iLAotCSAgICAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eWssIHl5cnVsZSAtIDEsCi0JICAgICAodW5zaWduZWQgbG9uZyBpbnQpIHl5cmxpbmVbeXlydWxlXSk7CisgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eWssIHl5cnVsZSAtIDEsCisgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXJsaW5lW3l5cnVsZV0pOwogICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KICAgZm9yICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQogICAgIHsKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKICAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSArIHl5aV0sCi0JCSAgICAgICAmXWI0X3Joc192YWx1ZSh5eW5yaHMsIHl5aSArIDEpWwotCQkgICAgICAgXWI0X2xvY2F0aW9uc19pZihbLCAmXWI0X3Joc19sb2NhdGlvbih5eW5yaHMsIHl5aSArIDEpKVtdZG5sCi0JCSAgICAgICBiNF91c2VyX2FyZ3NbKTsKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICZdYjRfcmhzX3ZhbHVlKHl5bnJocywgeXlpICsgMSlbCisgICAgICAgICAgICAgICAgICAgICAgIF1iNF9sb2NhdGlvbnNfaWYoWywgJl1iNF9yaHNfbG9jYXRpb24oeXlucmhzLCB5eWkgKyAxKSlbXWRubAorICAgICAgICAgICAgICAgICAgICAgICBiNF91c2VyX2FyZ3NbKTsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKICAgICB9CiB9CiAjZW5kaWYKQEAgLTE0NjIsMjMgKzEzOTYsMjIgQEAKICAqLwogc3RhdGljIGlubGluZSBZWVJFU1VMVFRBRwogeXlnbHJSZWR1Y2UgKHl5R0xSU3RhY2sqIHl5c3RhY2twLCBzaXplX3QgeXlrLCB5eVJ1bGVOdW0geXlydWxlLAotCSAgICAgeXlib29sIHl5Zm9yY2VFdmFsXWI0X3VzZXJfZm9ybWFsc1spCisgICAgICAgICAgICAgeXlib29sIHl5Zm9yY2VFdmFsXWI0X3VzZXJfZm9ybWFsc1spCiB7CiAgIHNpemVfdCB5eXBvc24gPSB5eXN0YWNrcC0+eXl0b3BzLnl5c3RhdGVzW3l5a10tPnl5cG9zbjsKIAotICBpZiAoeXlmb3JjZUV2YWwgfHwgeXlzdGFja3AtPnl5c3BsaXRQb2ludCA9PSBOVUxMKQorICBpZiAoeXlmb3JjZUV2YWwgfHwgeXlzdGFja3AtPnl5c3BsaXRQb2ludCA9PSBZWV9OVUxMKQogICAgIHsKLSAgICAgIFlZU1RZUEUgeXlzdmFsOwotICAgICAgWVlMVFlQRSB5eWxvYzsKKyAgICAgIFlZU1RZUEUgeXlzdmFsO11iNF9sb2NhdGlvbnNfaWYoWworICAgICAgWVlMVFlQRSB5eWxvYztdKVsKIAotICAgICAgWVlfUkVEVUNFX1BSSU5UICgoeXlzdGFja3AsIHl5aywgeXlydWxlLCAmeXlzdmFsLCAmeXlsb2NdYjRfdXNlcl9hcmdzWykpOwotICAgICAgWVlDSEsgKHl5ZG9BY3Rpb24gKHl5c3RhY2twLCB5eWssIHl5cnVsZSwgJnl5c3ZhbCwKLQkJCSAmeXlsb2NdYjRfdXNlcl9hcmdzWykpOworICAgICAgWVlfUkVEVUNFX1BSSU5UICgoeXlzdGFja3AsIHl5aywgeXlydWxlLCAmeXlzdmFsXWI0X2xvY3VzZXJfYXJncyhbJnl5bG9jXSlbKSk7CisgICAgICBZWUNISyAoeXlkb0FjdGlvbiAoeXlzdGFja3AsIHl5aywgeXlydWxlLCAmeXlzdmFsXWI0X2xvY3VzZXJfYXJncyhbJnl5bG9jXSlbKSk7CiAgICAgICBZWV9TWU1CT0xfUFJJTlQgKCItPiAkJCA9IiwgeXlyMVt5eXJ1bGVdLCAmeXlzdmFsLCAmeXlsb2MpOwogICAgICAgeXlnbHJTaGlmdCAoeXlzdGFja3AsIHl5aywKLQkJICB5eUxSZ290b1N0YXRlICh5eXN0YWNrcC0+eXl0b3BzLnl5c3RhdGVzW3l5a10tPnl5bHJTdGF0ZSwKLQkJCQkgeXlsaHNOb250ZXJtICh5eXJ1bGUpKSwKLQkJICB5eXBvc24sICZ5eXN2YWwsICZ5eWxvYyk7CisgICAgICAgICAgICAgICAgICB5eUxSZ290b1N0YXRlICh5eXN0YWNrcC0+eXl0b3BzLnl5c3RhdGVzW3l5a10tPnl5bHJTdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5bGhzTm9udGVybSAoeXlydWxlKSksCisgICAgICAgICAgICAgICAgICB5eXBvc24sICZ5eXN2YWxdYjRfbG9jYXRpb25zX2lmKFssICZ5eWxvY10pWyk7CiAgICAgfQogICBlbHNlCiAgICAgewpAQCAtMTQ4OCwzNSArMTQyMSwzNSBAQAogICAgICAgeXlTdGF0ZU51bSB5eW5ld0xSU3RhdGU7CiAKICAgICAgIGZvciAoeXlzID0geXlzdGFja3AtPnl5dG9wcy55eXN0YXRlc1t5eWtdLCB5eW4gPSB5eXJoc0xlbmd0aCAoeXlydWxlKTsKLQkgICAwIDwgeXluOyB5eW4gLT0gMSkKLQl7Ci0JICB5eXMgPSB5eXMtPnl5cHJlZDsKLQkgIFlZQVNTRVJUICh5eXMpOwotCX0KKyAgICAgICAgICAgMCA8IHl5bjsgeXluIC09IDEpCisgICAgICAgIHsKKyAgICAgICAgICB5eXMgPSB5eXMtPnl5cHJlZDsKKyAgICAgICAgICBZWUFTU0VSVCAoeXlzKTsKKyAgICAgICAgfQogICAgICAgeXl1cGRhdGVTcGxpdCAoeXlzdGFja3AsIHl5cyk7CiAgICAgICB5eW5ld0xSU3RhdGUgPSB5eUxSZ290b1N0YXRlICh5eXMtPnl5bHJTdGF0ZSwgeXlsaHNOb250ZXJtICh5eXJ1bGUpKTsKICAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwKLQkJICAiUmVkdWNlZCBzdGFjayAlbHUgYnkgcnVsZSAjJWQ7IGFjdGlvbiBkZWZlcnJlZC4gIE5vdyBpbiBzdGF0ZSAlZC5cbiIsCi0JCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eWssIHl5cnVsZSAtIDEsIHl5bmV3TFJTdGF0ZSkpOworICAgICAgICAgICAgICAgICAgIlJlZHVjZWQgc3RhY2sgJWx1IGJ5IHJ1bGUgIyVkOyBhY3Rpb24gZGVmZXJyZWQuICBOb3cgaW4gc3RhdGUgJWQuXG4iLAorICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eWssIHl5cnVsZSAtIDEsIHl5bmV3TFJTdGF0ZSkpOwogICAgICAgZm9yICh5eWkgPSAwOyB5eWkgPCB5eXN0YWNrcC0+eXl0b3BzLnl5c2l6ZTsgeXlpICs9IDEpCi0JaWYgKHl5aSAhPSB5eWsgJiYgeXlzdGFja3AtPnl5dG9wcy55eXN0YXRlc1t5eWldICE9IE5VTEwpCi0JICB7Ci0JICAgIHl5R0xSU3RhdGUqIHl5cCwgKnl5c3BsaXQgPSB5eXN0YWNrcC0+eXlzcGxpdFBvaW50OwotCSAgICB5eXAgPSB5eXN0YWNrcC0+eXl0b3BzLnl5c3RhdGVzW3l5aV07Ci0JICAgIHdoaWxlICh5eXAgIT0geXlzICYmIHl5cCAhPSB5eXNwbGl0ICYmIHl5cC0+eXlwb3NuID49IHl5cG9zbikKLQkgICAgICB7Ci0JCWlmICh5eXAtPnl5bHJTdGF0ZSA9PSB5eW5ld0xSU3RhdGUgJiYgeXlwLT55eXByZWQgPT0geXlzKQotCQkgIHsKLQkJICAgIHl5YWRkRGVmZXJyZWRBY3Rpb24gKHl5c3RhY2twLCB5eWssIHl5cCwgeXlzMCwgeXlydWxlKTsKLQkJICAgIHl5bWFya1N0YWNrRGVsZXRlZCAoeXlzdGFja3AsIHl5ayk7Ci0JCSAgICBZWURQUklOVEYgKChzdGRlcnIsICJNZXJnaW5nIHN0YWNrICVsdSBpbnRvIHN0YWNrICVsdS5cbiIsCi0JCQkJKHVuc2lnbmVkIGxvbmcgaW50KSB5eWssCi0JCQkJKHVuc2lnbmVkIGxvbmcgaW50KSB5eWkpKTsKLQkJICAgIHJldHVybiB5eW9rOwotCQkgIH0KLQkJeXlwID0geXlwLT55eXByZWQ7Ci0JICAgICAgfQotCSAgfQorICAgICAgICBpZiAoeXlpICE9IHl5ayAmJiB5eXN0YWNrcC0+eXl0b3BzLnl5c3RhdGVzW3l5aV0gIT0gWVlfTlVMTCkKKyAgICAgICAgICB7CisgICAgICAgICAgICB5eUdMUlN0YXRlICp5eXNwbGl0ID0geXlzdGFja3AtPnl5c3BsaXRQb2ludDsKKyAgICAgICAgICAgIHl5R0xSU3RhdGUgKnl5cCA9IHl5c3RhY2twLT55eXRvcHMueXlzdGF0ZXNbeXlpXTsKKyAgICAgICAgICAgIHdoaWxlICh5eXAgIT0geXlzICYmIHl5cCAhPSB5eXNwbGl0ICYmIHl5cC0+eXlwb3NuID49IHl5cG9zbikKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICh5eXAtPnl5bHJTdGF0ZSA9PSB5eW5ld0xSU3RhdGUgJiYgeXlwLT55eXByZWQgPT0geXlzKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB5eWFkZERlZmVycmVkQWN0aW9uICh5eXN0YWNrcCwgeXlrLCB5eXAsIHl5czAsIHl5cnVsZSk7CisgICAgICAgICAgICAgICAgICAgIHl5bWFya1N0YWNrRGVsZXRlZCAoeXlzdGFja3AsIHl5ayk7CisgICAgICAgICAgICAgICAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIk1lcmdpbmcgc3RhY2sgJWx1IGludG8gc3RhY2sgJWx1LlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eWssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGludCkgeXlpKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB5eW9rOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHl5cCA9IHl5cC0+eXlwcmVkOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQogICAgICAgeXlzdGFja3AtPnl5dG9wcy55eXN0YXRlc1t5eWtdID0geXlzOwogICAgICAgeXlnbHJTaGlmdERlZmVyICh5eXN0YWNrcCwgeXlrLCB5eW5ld0xSU3RhdGUsIHl5cG9zbiwgeXlzMCwgeXlydWxlKTsKICAgICB9CkBAIC0xNTI2LDcgKzE0NTksNyBAQAogc3RhdGljIHNpemVfdAogeXlzcGxpdFN0YWNrICh5eUdMUlN0YWNrKiB5eXN0YWNrcCwgc2l6ZV90IHl5aykKIHsKLSAgaWYgKHl5c3RhY2twLT55eXNwbGl0UG9pbnQgPT0gTlVMTCkKKyAgaWYgKHl5c3RhY2twLT55eXNwbGl0UG9pbnQgPT0gWVlfTlVMTCkKICAgICB7CiAgICAgICBZWUFTU0VSVCAoeXlrID09IDApOwogICAgICAgeXlzdGFja3AtPnl5c3BsaXRQb2ludCA9IHl5c3RhY2twLT55eXRvcHMueXlzdGF0ZXNbeXlrXTsKQEAgLTE1MzYsMjcgKzE0NjksMjcgQEAKICAgICAgIHl5R0xSU3RhdGUqKiB5eW5ld1N0YXRlczsKICAgICAgIHl5Ym9vbCogeXluZXdMb29rYWhlYWROZWVkczsKIAotICAgICAgeXluZXdTdGF0ZXMgPSBOVUxMOworICAgICAgeXluZXdTdGF0ZXMgPSBZWV9OVUxMOwogCiAgICAgICBpZiAoeXlzdGFja3AtPnl5dG9wcy55eWNhcGFjaXR5Ci0JICA+IChZWVNJWkVNQVggLyAoMiAqIHNpemVvZiB5eW5ld1N0YXRlc1swXSkpKQotCXl5TWVtb3J5RXhoYXVzdGVkICh5eXN0YWNrcCk7CisgICAgICAgICAgPiAoWVlTSVpFTUFYIC8gKDIgKiBzaXplb2YgeXluZXdTdGF0ZXNbMF0pKSkKKyAgICAgICAgeXlNZW1vcnlFeGhhdXN0ZWQgKHl5c3RhY2twKTsKICAgICAgIHl5c3RhY2twLT55eXRvcHMueXljYXBhY2l0eSAqPSAyOwogCiAgICAgICB5eW5ld1N0YXRlcyA9Ci0JKHl5R0xSU3RhdGUqKikgWVlSRUFMTE9DICh5eXN0YWNrcC0+eXl0b3BzLnl5c3RhdGVzLAotCQkJCSAgKHl5c3RhY2twLT55eXRvcHMueXljYXBhY2l0eQotCQkJCSAgICogc2l6ZW9mIHl5bmV3U3RhdGVzWzBdKSk7Ci0gICAgICBpZiAoeXluZXdTdGF0ZXMgPT0gTlVMTCkKLQl5eU1lbW9yeUV4aGF1c3RlZCAoeXlzdGFja3ApOworICAgICAgICAoeXlHTFJTdGF0ZSoqKSBZWVJFQUxMT0MgKHl5c3RhY2twLT55eXRvcHMueXlzdGF0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5c3RhY2twLT55eXRvcHMueXljYXBhY2l0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpemVvZiB5eW5ld1N0YXRlc1swXSkpOworICAgICAgaWYgKHl5bmV3U3RhdGVzID09IFlZX05VTEwpCisgICAgICAgIHl5TWVtb3J5RXhoYXVzdGVkICh5eXN0YWNrcCk7CiAgICAgICB5eXN0YWNrcC0+eXl0b3BzLnl5c3RhdGVzID0geXluZXdTdGF0ZXM7CiAKICAgICAgIHl5bmV3TG9va2FoZWFkTmVlZHMgPQotCSh5eWJvb2wqKSBZWVJFQUxMT0MgKHl5c3RhY2twLT55eXRvcHMueXlsb29rYWhlYWROZWVkcywKLQkJCSAgICAgKHl5c3RhY2twLT55eXRvcHMueXljYXBhY2l0eQotCQkJICAgICAgKiBzaXplb2YgeXluZXdMb29rYWhlYWROZWVkc1swXSkpOwotICAgICAgaWYgKHl5bmV3TG9va2FoZWFkTmVlZHMgPT0gTlVMTCkKLQl5eU1lbW9yeUV4aGF1c3RlZCAoeXlzdGFja3ApOworICAgICAgICAoeXlib29sKikgWVlSRUFMTE9DICh5eXN0YWNrcC0+eXl0b3BzLnl5bG9va2FoZWFkTmVlZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eXN0YWNrcC0+eXl0b3BzLnl5Y2FwYWNpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc2l6ZW9mIHl5bmV3TG9va2FoZWFkTmVlZHNbMF0pKTsKKyAgICAgIGlmICh5eW5ld0xvb2thaGVhZE5lZWRzID09IFlZX05VTEwpCisgICAgICAgIHl5TWVtb3J5RXhoYXVzdGVkICh5eXN0YWNrcCk7CiAgICAgICB5eXN0YWNrcC0+eXl0b3BzLnl5bG9va2FoZWFkTmVlZHMgPSB5eW5ld0xvb2thaGVhZE5lZWRzOwogICAgIH0KICAgeXlzdGFja3AtPnl5dG9wcy55eXN0YXRlc1t5eXN0YWNrcC0+eXl0b3BzLnl5c2l6ZV0KQEAgLTE1NzgsMTEgKzE1MTEsMTEgQEAKICAgICAgIHl5R0xSU3RhdGUgKnl5czAsICp5eXMxOwogICAgICAgaW50IHl5bjsKICAgICAgIGZvciAoeXlzMCA9IHl5eTAtPnl5c3RhdGUsIHl5czEgPSB5eXkxLT55eXN0YXRlLAotCSAgIHl5biA9IHl5cmhzTGVuZ3RoICh5eXkwLT55eXJ1bGUpOwotCSAgIHl5biA+IDA7Ci0JICAgeXlzMCA9IHl5czAtPnl5cHJlZCwgeXlzMSA9IHl5czEtPnl5cHJlZCwgeXluIC09IDEpCi0JaWYgKHl5czAtPnl5cG9zbiAhPSB5eXMxLT55eXBvc24pCi0JICByZXR1cm4geXlmYWxzZTsKKyAgICAgICAgICAgeXluID0geXlyaHNMZW5ndGggKHl5eTAtPnl5cnVsZSk7CisgICAgICAgICAgIHl5biA+IDA7CisgICAgICAgICAgIHl5czAgPSB5eXMwLT55eXByZWQsIHl5czEgPSB5eXMxLT55eXByZWQsIHl5biAtPSAxKQorICAgICAgICBpZiAoeXlzMC0+eXlwb3NuICE9IHl5czEtPnl5cG9zbikKKyAgICAgICAgICByZXR1cm4geXlmYWxzZTsKICAgICAgIHJldHVybiB5eXRydWU7CiAgICAgfQogICBlbHNlCkBAIC0xNjAyLDQzICsxNTM1LDQxIEBACiAgICAgICAgeXlzMCA9IHl5czAtPnl5cHJlZCwgeXlzMSA9IHl5czEtPnl5cHJlZCwgeXluIC09IDEpCiAgICAgewogICAgICAgaWYgKHl5czAgPT0geXlzMSkKLQlicmVhazsKKyAgICAgICAgYnJlYWs7CiAgICAgICBlbHNlIGlmICh5eXMwLT55eXJlc29sdmVkKQotCXsKLQkgIHl5czEtPnl5cmVzb2x2ZWQgPSB5eXRydWU7Ci0JICB5eXMxLT55eXNlbWFudGljcy55eXN2YWwgPSB5eXMwLT55eXNlbWFudGljcy55eXN2YWw7Ci0JfQorICAgICAgICB7CisgICAgICAgICAgeXlzMS0+eXlyZXNvbHZlZCA9IHl5dHJ1ZTsKKyAgICAgICAgICB5eXMxLT55eXNlbWFudGljcy55eXN2YWwgPSB5eXMwLT55eXNlbWFudGljcy55eXN2YWw7CisgICAgICAgIH0KICAgICAgIGVsc2UgaWYgKHl5czEtPnl5cmVzb2x2ZWQpCi0JewotCSAgeXlzMC0+eXlyZXNvbHZlZCA9IHl5dHJ1ZTsKLQkgIHl5czAtPnl5c2VtYW50aWNzLnl5c3ZhbCA9IHl5czEtPnl5c2VtYW50aWNzLnl5c3ZhbDsKLQl9CisgICAgICAgIHsKKyAgICAgICAgICB5eXMwLT55eXJlc29sdmVkID0geXl0cnVlOworICAgICAgICAgIHl5czAtPnl5c2VtYW50aWNzLnl5c3ZhbCA9IHl5czEtPnl5c2VtYW50aWNzLnl5c3ZhbDsKKyAgICAgICAgfQogICAgICAgZWxzZQotCXsKLQkgIHl5U2VtYW50aWNPcHRpb24qKiB5eXowcDsKLQkgIHl5U2VtYW50aWNPcHRpb24qIHl5ejE7Ci0JICB5eXowcCA9ICZ5eXMwLT55eXNlbWFudGljcy55eWZpcnN0VmFsOwotCSAgeXl6MSA9IHl5czEtPnl5c2VtYW50aWNzLnl5Zmlyc3RWYWw7Ci0JICB3aGlsZSAoWVlJRCAoeXl0cnVlKSkKLQkgICAgewotCSAgICAgIGlmICh5eXoxID09ICp5eXowcCB8fCB5eXoxID09IE5VTEwpCi0JCWJyZWFrOwotCSAgICAgIGVsc2UgaWYgKCp5eXowcCA9PSBOVUxMKQotCQl7Ci0JCSAgKnl5ejBwID0geXl6MTsKLQkJICBicmVhazsKLQkJfQotCSAgICAgIGVsc2UgaWYgKCp5eXowcCA8IHl5ejEpCi0JCXsKLQkJICB5eVNlbWFudGljT3B0aW9uKiB5eXogPSAqeXl6MHA7Ci0JCSAgKnl5ejBwID0geXl6MTsKLQkJICB5eXoxID0geXl6MS0+eXluZXh0OwotCQkgICgqeXl6MHApLT55eW5leHQgPSB5eXo7Ci0JCX0KLQkgICAgICB5eXowcCA9ICYoKnl5ejBwKS0+eXluZXh0OwotCSAgICB9Ci0JICB5eXMxLT55eXNlbWFudGljcy55eWZpcnN0VmFsID0geXlzMC0+eXlzZW1hbnRpY3MueXlmaXJzdFZhbDsKLQl9CisgICAgICAgIHsKKyAgICAgICAgICB5eVNlbWFudGljT3B0aW9uKiogeXl6MHAgPSAmeXlzMC0+eXlzZW1hbnRpY3MueXlmaXJzdFZhbDsKKyAgICAgICAgICB5eVNlbWFudGljT3B0aW9uKiB5eXoxID0geXlzMS0+eXlzZW1hbnRpY3MueXlmaXJzdFZhbDsKKyAgICAgICAgICB3aGlsZSAoWVlJRCAoeXl0cnVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKHl5ejEgPT0gKnl5ejBwIHx8IHl5ejEgPT0gWVlfTlVMTCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZWxzZSBpZiAoKnl5ejBwID09IFlZX05VTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgKnl5ejBwID0geXl6MTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZSBpZiAoKnl5ejBwIDwgeXl6MSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICB5eVNlbWFudGljT3B0aW9uKiB5eXogPSAqeXl6MHA7CisgICAgICAgICAgICAgICAgICAqeXl6MHAgPSB5eXoxOworICAgICAgICAgICAgICAgICAgeXl6MSA9IHl5ejEtPnl5bmV4dDsKKyAgICAgICAgICAgICAgICAgICgqeXl6MHApLT55eW5leHQgPSB5eXo7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB5eXowcCA9ICYoKnl5ejBwKS0+eXluZXh0OworICAgICAgICAgICAgfQorICAgICAgICAgIHl5czEtPnl5c2VtYW50aWNzLnl5Zmlyc3RWYWwgPSB5eXMwLT55eXNlbWFudGljcy55eWZpcnN0VmFsOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC0xNjU0LDkgKzE1ODUsOSBAQAogICBpZiAocDAgPT0gcDEpCiAgICAgewogICAgICAgaWYgKHl5bWVyZ2VyW3IwXSA9PSAwIHx8IHl5bWVyZ2VyW3IwXSAhPSB5eW1lcmdlcltyMV0pCi0JcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAwOwogICAgICAgZWxzZQotCXJldHVybiAxOworICAgICAgICByZXR1cm4gMTsKICAgICB9CiAgIGlmIChwMCA9PSAwIHx8IHAxID09IDApCiAgICAgcmV0dXJuIDA7CkBAIC0xNjY4LDcgKzE1OTksNyBAQAogfQogCiBzdGF0aWMgWVlSRVNVTFRUQUcgeXlyZXNvbHZlVmFsdWUgKHl5R0xSU3RhdGUqIHl5cywKLQkJCQkgICB5eUdMUlN0YWNrKiB5eXN0YWNrcF1iNF91c2VyX2Zvcm1hbHNbKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlHTFJTdGFjayogeXlzdGFja3BdYjRfdXNlcl9mb3JtYWxzWyk7CiAKIAogLyoqIFJlc29sdmUgdGhlIHByZXZpb3VzIE4gc3RhdGVzIHN0YXJ0aW5nIGF0IGFuZCBpbmNsdWRpbmcgc3RhdGUgUy4gIElmIHJlc3VsdApAQCAtMTY3OCwxNCArMTYwOSwxNCBAQAogICogIGlmIG5lY2Vzc2FyeS4gICovCiBzdGF0aWMgWVlSRVNVTFRUQUcKIHl5cmVzb2x2ZVN0YXRlcyAoeXlHTFJTdGF0ZSogeXlzLCBpbnQgeXluLAotCQkgeXlHTFJTdGFjayogeXlzdGFja3BdYjRfdXNlcl9mb3JtYWxzWykKKyAgICAgICAgICAgICAgICAgeXlHTFJTdGFjayogeXlzdGFja3BdYjRfdXNlcl9mb3JtYWxzWykKIHsKICAgaWYgKDAgPCB5eW4pCiAgICAgewogICAgICAgWVlBU1NFUlQgKHl5cy0+eXlwcmVkKTsKICAgICAgIFlZQ0hLICh5eXJlc29sdmVTdGF0ZXMgKHl5cy0+eXlwcmVkLCB5eW4tMSwgeXlzdGFja3BdYjRfdXNlcl9hcmdzWykpOwogICAgICAgaWYgKCEgeXlzLT55eXJlc29sdmVkKQotCVlZQ0hLICh5eXJlc29sdmVWYWx1ZSAoeXlzLCB5eXN0YWNrcF1iNF91c2VyX2FyZ3NbKSk7CisgICAgICAgIFlZQ0hLICh5eXJlc29sdmVWYWx1ZSAoeXlzLCB5eXN0YWNrcF1iNF91c2VyX2FyZ3NbKSk7CiAgICAgfQogICByZXR1cm4geXlvazsKIH0KQEAgLTE2OTYsMjIgKzE2MjcsMTcgQEAKICAqICBzZW1hbnRpYyB2YWx1ZXMgaWYgaW52b2tlZCkuICAqLwogc3RhdGljIFlZUkVTVUxUVEFHCiB5eXJlc29sdmVBY3Rpb24gKHl5U2VtYW50aWNPcHRpb24qIHl5b3B0LCB5eUdMUlN0YWNrKiB5eXN0YWNrcCwKLQkJIFlZU1RZUEUqIHl5dmFscCwgWVlMVFlQRSogeXlsb2NwXWI0X3VzZXJfZm9ybWFsc1spCisgICAgICAgICAgICAgICAgIFlZU1RZUEUqIHl5dmFscF1iNF9sb2N1c2VyX2Zvcm1hbHNbKQogewogICB5eUdMUlN0YWNrSXRlbSB5eXJoc1ZhbHNbWVlNQVhSSFMgKyBZWU1BWExFRlQgKyAxXTsKLSAgaW50IHl5bnJoczsKLSAgaW50IHl5Y2hhcl9jdXJyZW50OwotICBZWVNUWVBFIHl5bHZhbF9jdXJyZW50OwotICBZWUxUWVBFIHl5bGxvY19jdXJyZW50OwotICBZWVJFU1VMVFRBRyB5eWZsYWc7Ci0KLSAgeXlucmhzID0geXlyaHNMZW5ndGggKHl5b3B0LT55eXJ1bGUpOwotICB5eWZsYWcgPSB5eXJlc29sdmVTdGF0ZXMgKHl5b3B0LT55eXN0YXRlLCB5eW5yaHMsIHl5c3RhY2twXWI0X3VzZXJfYXJnc1spOworICBpbnQgeXlucmhzID0geXlyaHNMZW5ndGggKHl5b3B0LT55eXJ1bGUpOworICBZWVJFU1VMVFRBRyB5eWZsYWcgPQorICAgIHl5cmVzb2x2ZVN0YXRlcyAoeXlvcHQtPnl5c3RhdGUsIHl5bnJocywgeXlzdGFja3BdYjRfdXNlcl9hcmdzWyk7CiAgIGlmICh5eWZsYWcgIT0geXlvaykKICAgICB7CiAgICAgICB5eUdMUlN0YXRlICp5eXM7CiAgICAgICBmb3IgKHl5cyA9IHl5b3B0LT55eXN0YXRlOyB5eW5yaHMgPiAwOyB5eXMgPSB5eXMtPnl5cHJlZCwgeXlucmhzIC09IDEpCi0JeXlkZXN0cm95R0xSU3RhdGUgKCJDbGVhbnVwOiBwb3BwaW5nIiwgeXlzXWI0X3VzZXJfYXJnc1spOworICAgICAgICB5eWRlc3Ryb3lHTFJTdGF0ZSAoIkNsZWFudXA6IHBvcHBpbmciLCB5eXNdYjRfdXNlcl9hcmdzWyk7CiAgICAgICByZXR1cm4geXlmbGFnOwogICAgIH0KIApAQCAtMTcxOSwyMiArMTY0NSwyNCBAQAogICBpZiAoeXlucmhzID09IDApCiAgICAgLyogU2V0IGRlZmF1bHQgbG9jYXRpb24uICAqLwogICAgIHl5cmhzVmFsc1tZWU1BWFJIUyArIFlZTUFYTEVGVCAtIDFdLnl5c3RhdGUueXlsb2MgPSB5eW9wdC0+eXlzdGF0ZS0+eXlsb2M7XV0pWwotICB5eWNoYXJfY3VycmVudCA9IHl5Y2hhcjsKLSAgeXlsdmFsX2N1cnJlbnQgPSB5eWx2YWw7Ci0gIHl5bGxvY19jdXJyZW50ID0geXlsbG9jOwotICB5eWNoYXIgPSB5eW9wdC0+eXlyYXdjaGFyOwotICB5eWx2YWwgPSB5eW9wdC0+eXl2YWw7Ci0gIHl5bGxvYyA9IHl5b3B0LT55eWxvYzsKLSAgeXlmbGFnID0geXl1c2VyQWN0aW9uICh5eW9wdC0+eXlydWxlLCB5eW5yaHMsCi0JCQkgICB5eXJoc1ZhbHMgKyBZWU1BWFJIUyArIFlZTUFYTEVGVCAtIDEsCi0JCQkgICB5eXZhbHAsIHl5bG9jcCwgeXlzdGFja3BdYjRfdXNlcl9hcmdzWyk7Ci0gIHl5Y2hhciA9IHl5Y2hhcl9jdXJyZW50OwotICB5eWx2YWwgPSB5eWx2YWxfY3VycmVudDsKLSAgeXlsbG9jID0geXlsbG9jX2N1cnJlbnQ7CisgIHsKKyAgICBpbnQgeXljaGFyX2N1cnJlbnQgPSB5eWNoYXI7CisgICAgWVlTVFlQRSB5eWx2YWxfY3VycmVudCA9IHl5bHZhbDtdYjRfbG9jYXRpb25zX2lmKFsKKyAgICBZWUxUWVBFIHl5bGxvY19jdXJyZW50ID0geXlsbG9jO10pWworICAgIHl5Y2hhciA9IHl5b3B0LT55eXJhd2NoYXI7CisgICAgeXlsdmFsID0geXlvcHQtPnl5dmFsO11iNF9sb2NhdGlvbnNfaWYoWworICAgIHl5bGxvYyA9IHl5b3B0LT55eWxvYztdKVsKKyAgICB5eWZsYWcgPSB5eXVzZXJBY3Rpb24gKHl5b3B0LT55eXJ1bGUsIHl5bnJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5cmhzVmFscyArIFlZTUFYUkhTICsgWVlNQVhMRUZUIC0gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5c3RhY2twLCB5eXZhbHBdYjRfbG9jdXNlcl9hcmdzWyk7CisgICAgeXljaGFyID0geXljaGFyX2N1cnJlbnQ7CisgICAgeXlsdmFsID0geXlsdmFsX2N1cnJlbnQ7XWI0X2xvY2F0aW9uc19pZihbCisgICAgeXlsbG9jID0geXlsbG9jX2N1cnJlbnQ7XSlbCisgIH0KICAgcmV0dXJuIHl5ZmxhZzsKIH0KIAotI2lmIFlZREVCVUcKKyNpZiBdYjRfYXBpX1BSRUZJWFtERUJVRwogc3RhdGljIHZvaWQKIHl5cmVwb3J0VHJlZSAoeXlTZW1hbnRpY09wdGlvbiogeXl4LCBpbnQgeXlpbmRlbnQpCiB7CkBAIC0xNzQ2LDcgKzE2NzQsNyBAQAogCiAgIGZvciAoeXlpID0geXlucmhzLCB5eXMgPSB5eXgtPnl5c3RhdGU7IDAgPCB5eWk7IHl5aSAtPSAxLCB5eXMgPSB5eXMtPnl5cHJlZCkKICAgICB5eXN0YXRlc1t5eWldID0geXlzOwotICBpZiAoeXlzID09IE5VTEwpCisgIGlmICh5eXMgPT0gWVlfTlVMTCkKICAgICB7CiAgICAgICB5eWxlZnRtb3N0X3N0YXRlLnl5cG9zbiA9IDA7CiAgICAgICB5eXN0YXRlc1swXSA9ICZ5eWxlZnRtb3N0X3N0YXRlOwpAQCAtMTc1Niw0MCArMTY4NCw0MCBAQAogCiAgIGlmICh5eXgtPnl5c3RhdGUtPnl5cG9zbiA8IHl5cy0+eXlwb3NuICsgMSkKICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiUqcyVzIC0+IDxSdWxlICVkLCBlbXB0eT5cbiIsCi0JICAgICAgIHl5aW5kZW50LCAiIiwgeXl0b2tlbk5hbWUgKHl5bGhzTm9udGVybSAoeXl4LT55eXJ1bGUpKSwKLQkgICAgICAgeXl4LT55eXJ1bGUgLSAxKTsKKyAgICAgICAgICAgICAgIHl5aW5kZW50LCAiIiwgeXl0b2tlbk5hbWUgKHl5bGhzTm9udGVybSAoeXl4LT55eXJ1bGUpKSwKKyAgICAgICAgICAgICAgIHl5eC0+eXlydWxlIC0gMSk7CiAgIGVsc2UKICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiUqcyVzIC0+IDxSdWxlICVkLCB0b2tlbnMgJWx1IC4uICVsdT5cbiIsCi0JICAgICAgIHl5aW5kZW50LCAiIiwgeXl0b2tlbk5hbWUgKHl5bGhzTm9udGVybSAoeXl4LT55eXJ1bGUpKSwKLQkgICAgICAgeXl4LT55eXJ1bGUgLSAxLCAodW5zaWduZWQgbG9uZyBpbnQpICh5eXMtPnl5cG9zbiArIDEpLAotCSAgICAgICAodW5zaWduZWQgbG9uZyBpbnQpIHl5eC0+eXlzdGF0ZS0+eXlwb3NuKTsKKyAgICAgICAgICAgICAgIHl5aW5kZW50LCAiIiwgeXl0b2tlbk5hbWUgKHl5bGhzTm9udGVybSAoeXl4LT55eXJ1bGUpKSwKKyAgICAgICAgICAgICAgIHl5eC0+eXlydWxlIC0gMSwgKHVuc2lnbmVkIGxvbmcgaW50KSAoeXlzLT55eXBvc24gKyAxKSwKKyAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGludCkgeXl4LT55eXN0YXRlLT55eXBvc24pOwogICBmb3IgKHl5aSA9IDE7IHl5aSA8PSB5eW5yaHM7IHl5aSArPSAxKQogICAgIHsKICAgICAgIGlmICh5eXN0YXRlc1t5eWldLT55eXJlc29sdmVkKQotCXsKLQkgIGlmICh5eXN0YXRlc1t5eWktMV0tPnl5cG9zbisxID4geXlzdGF0ZXNbeXlpXS0+eXlwb3NuKQotCSAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiUqcyVzIDxlbXB0eT5cbiIsIHl5aW5kZW50KzIsICIiLAotCQkgICAgICAgeXl0b2tlbk5hbWUgKHl5cmhzW3l5cHJoc1t5eXgtPnl5cnVsZV0reXlpLTFdKSk7Ci0JICBlbHNlCi0JICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJSpzJXMgPHRva2VucyAlbHUgLi4gJWx1PlxuIiwgeXlpbmRlbnQrMiwgIiIsCi0JCSAgICAgICB5eXRva2VuTmFtZSAoeXlyaHNbeXlwcmhzW3l5eC0+eXlydWxlXSt5eWktMV0pLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KSAoeXlzdGF0ZXNbeXlpIC0gMV0tPnl5cG9zbiArIDEpLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YXRlc1t5eWldLT55eXBvc24pOwotCX0KKyAgICAgICAgeworICAgICAgICAgIGlmICh5eXN0YXRlc1t5eWktMV0tPnl5cG9zbisxID4geXlzdGF0ZXNbeXlpXS0+eXlwb3NuKQorICAgICAgICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlKnMlcyA8ZW1wdHk+XG4iLCB5eWluZGVudCsyLCAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgeXl0b2tlbk5hbWUgKHl5cmhzW3l5cHJoc1t5eXgtPnl5cnVsZV0reXlpLTFdKSk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlKnMlcyA8dG9rZW5zICVsdSAuLiAlbHU+XG4iLCB5eWluZGVudCsyLCAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgeXl0b2tlbk5hbWUgKHl5cmhzW3l5cHJoc1t5eXgtPnl5cnVsZV0reXlpLTFdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KSAoeXlzdGF0ZXNbeXlpIC0gMV0tPnl5cG9zbiArIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhdGVzW3l5aV0tPnl5cG9zbik7CisgICAgICAgIH0KICAgICAgIGVsc2UKLQl5eXJlcG9ydFRyZWUgKHl5c3RhdGVzW3l5aV0tPnl5c2VtYW50aWNzLnl5Zmlyc3RWYWwsIHl5aW5kZW50KzIpOworICAgICAgICB5eXJlcG9ydFRyZWUgKHl5c3RhdGVzW3l5aV0tPnl5c2VtYW50aWNzLnl5Zmlyc3RWYWwsIHl5aW5kZW50KzIpOwogICAgIH0KIH0KICNlbmRpZgogCiAvKkFSR1NVU0VEKi8gc3RhdGljIFlZUkVTVUxUVEFHCiB5eXJlcG9ydEFtYmlndWl0eSAoeXlTZW1hbnRpY09wdGlvbiogeXl4MCwKLQkJICAgeXlTZW1hbnRpY09wdGlvbiogeXl4MV1iNF9wdXJlX2Zvcm1hbHNbKQorICAgICAgICAgICAgICAgICAgIHl5U2VtYW50aWNPcHRpb24qIHl5eDFdYjRfcHVyZV9mb3JtYWxzWykKIHsKICAgWVlVU0UgKHl5eDApOwogICBZWVVTRSAoeXl4MSk7CiAKLSNpZiBZWURFQlVHCisjaWYgXWI0X2FwaV9QUkVGSVhbREVCVUcKICAgWVlGUFJJTlRGIChzdGRlcnIsICJBbWJpZ3VpdHkgZGV0ZWN0ZWQuXG4iKTsKICAgWVlGUFJJTlRGIChzdGRlcnIsICJPcHRpb24gMSxcbiIpOwogICB5eXJlcG9ydFRyZWUgKHl5eDAsIDIpOwpAQCAtMTgwMCw2NSArMTcyOCw2MyBAQAogCiAgIHl5ZXJyb3IgKF1iNF95eWVycm9yX2FyZ3NbWVlfKCJzeW50YXggaXMgYW1iaWd1b3VzIikpOwogICByZXR1cm4geXlhYm9ydDsKLX0KK31dYjRfbG9jYXRpb25zX2lmKFtbCiAKIC8qKiBTdGFydGluZyBhdCBhbmQgaW5jbHVkaW5nIHN0YXRlIFMxLCByZXNvbHZlIHRoZSBsb2NhdGlvbiBmb3IgZWFjaCBvZiB0aGUKICAqICBwcmV2aW91cyBOMSBzdGF0ZXMgdGhhdCBpcyB1bnJlc29sdmVkLiAgVGhlIGZpcnN0IHNlbWFudGljIG9wdGlvbiBvZiBhIHN0YXRlCiAgKiAgaXMgYWx3YXlzIGNob3Nlbi4gICovCiBzdGF0aWMgdm9pZAogeXlyZXNvbHZlTG9jYXRpb25zICh5eUdMUlN0YXRlKiB5eXMxLCBpbnQgeXluMSwKLQkJICAgIHl5R0xSU3RhY2sgKnl5c3RhY2twXWI0X3VzZXJfZm9ybWFsc1spCisgICAgICAgICAgICAgICAgICAgIHl5R0xSU3RhY2sgKnl5c3RhY2twXWI0X3VzZXJfZm9ybWFsc1spCiB7CiAgIGlmICgwIDwgeXluMSkKICAgICB7CiAgICAgICB5eXJlc29sdmVMb2NhdGlvbnMgKHl5czEtPnl5cHJlZCwgeXluMSAtIDEsIHl5c3RhY2twXWI0X3VzZXJfYXJnc1spOwogICAgICAgaWYgKCF5eXMxLT55eXJlc29sdmVkKQotCXsKLQkgIHl5U2VtYW50aWNPcHRpb24gKnl5b3B0aW9uOwotCSAgeXlHTFJTdGFja0l0ZW0geXlyaHNsb2NbMSArIFlZTUFYUkhTXTsKLQkgIGludCB5eW5yaHM7Ci0JICBpbnQgeXljaGFyX2N1cnJlbnQ7Ci0JICBZWVNUWVBFIHl5bHZhbF9jdXJyZW50OwotCSAgWVlMVFlQRSB5eWxsb2NfY3VycmVudDsKLQkgIHl5b3B0aW9uID0geXlzMS0+eXlzZW1hbnRpY3MueXlmaXJzdFZhbDsKLQkgIFlZQVNTRVJUICh5eW9wdGlvbiAhPSBOVUxMKTsKLQkgIHl5bnJocyA9IHl5cmhzTGVuZ3RoICh5eW9wdGlvbi0+eXlydWxlKTsKLQkgIGlmICh5eW5yaHMgPiAwKQotCSAgICB7Ci0JICAgICAgeXlHTFJTdGF0ZSAqeXlzOwotCSAgICAgIGludCB5eW47Ci0JICAgICAgeXlyZXNvbHZlTG9jYXRpb25zICh5eW9wdGlvbi0+eXlzdGF0ZSwgeXlucmhzLAotCQkJCSAgeXlzdGFja3BdYjRfdXNlcl9hcmdzWyk7Ci0JICAgICAgZm9yICh5eXMgPSB5eW9wdGlvbi0+eXlzdGF0ZSwgeXluID0geXlucmhzOwotCQkgICB5eW4gPiAwOwotCQkgICB5eXMgPSB5eXMtPnl5cHJlZCwgeXluIC09IDEpCi0JCXl5cmhzbG9jW3l5bl0ueXlzdGF0ZS55eWxvYyA9IHl5cy0+eXlsb2M7Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgewotCSAgICAgIC8qIEJvdGggeXlyZXNvbHZlQWN0aW9uIGFuZCB5eXJlc29sdmVMb2NhdGlvbnMgdHJhdmVyc2UgdGhlIEdTUwotCQkgaW4gcmV2ZXJzZSByaWdodG1vc3Qgb3JkZXIuICBJdCBpcyBvbmx5IG5lY2Vzc2FyeSB0byBpbnZva2UKLQkJIHl5cmVzb2x2ZUxvY2F0aW9ucyBvbiBhIHN1YmZvcmVzdCBmb3Igd2hpY2ggeXlyZXNvbHZlQWN0aW9uCi0JCSB3b3VsZCBoYXZlIGJlZW4gaW52b2tlZCBuZXh0IGhhZCBhbiBhbWJpZ3VpdHkgbm90IGJlZW4KLQkJIGRldGVjdGVkLiAgVGh1cyB0aGUgbG9jYXRpb24gb2YgdGhlIHByZXZpb3VzIHN0YXRlIChidXQgbm90Ci0JCSBuZWNlc3NhcmlseSB0aGUgcHJldmlvdXMgc3RhdGUgaXRzZWxmKSBpcyBndWFyYW50ZWVkIHRvIGJlCi0JCSByZXNvbHZlZCBhbHJlYWR5LiAgKi8KLQkgICAgICB5eUdMUlN0YXRlICp5eXByZXZpb3VzID0geXlvcHRpb24tPnl5c3RhdGU7Ci0JICAgICAgeXlyaHNsb2NbMF0ueXlzdGF0ZS55eWxvYyA9IHl5cHJldmlvdXMtPnl5bG9jOwotCSAgICB9Ci0JICB5eWNoYXJfY3VycmVudCA9IHl5Y2hhcjsKLQkgIHl5bHZhbF9jdXJyZW50ID0geXlsdmFsOwotCSAgeXlsbG9jX2N1cnJlbnQgPSB5eWxsb2M7Ci0JICB5eWNoYXIgPSB5eW9wdGlvbi0+eXlyYXdjaGFyOwotCSAgeXlsdmFsID0geXlvcHRpb24tPnl5dmFsOwotCSAgeXlsbG9jID0geXlvcHRpb24tPnl5bG9jOwotCSAgWVlMTE9DX0RFRkFVTFQgKCh5eXMxLT55eWxvYyksIHl5cmhzbG9jLCB5eW5yaHMpOwotCSAgeXljaGFyID0geXljaGFyX2N1cnJlbnQ7Ci0JICB5eWx2YWwgPSB5eWx2YWxfY3VycmVudDsKLQkgIHl5bGxvYyA9IHl5bGxvY19jdXJyZW50OwotCX0KKyAgICAgICAgeworICAgICAgICAgIHl5R0xSU3RhY2tJdGVtIHl5cmhzbG9jWzEgKyBZWU1BWFJIU107CisgICAgICAgICAgaW50IHl5bnJoczsKKyAgICAgICAgICB5eVNlbWFudGljT3B0aW9uICp5eW9wdGlvbiA9IHl5czEtPnl5c2VtYW50aWNzLnl5Zmlyc3RWYWw7CisgICAgICAgICAgWVlBU1NFUlQgKHl5b3B0aW9uICE9IFlZX05VTEwpOworICAgICAgICAgIHl5bnJocyA9IHl5cmhzTGVuZ3RoICh5eW9wdGlvbi0+eXlydWxlKTsKKyAgICAgICAgICBpZiAoeXlucmhzID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgeXlHTFJTdGF0ZSAqeXlzOworICAgICAgICAgICAgICBpbnQgeXluOworICAgICAgICAgICAgICB5eXJlc29sdmVMb2NhdGlvbnMgKHl5b3B0aW9uLT55eXN0YXRlLCB5eW5yaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlzdGFja3BdYjRfdXNlcl9hcmdzWyk7CisgICAgICAgICAgICAgIGZvciAoeXlzID0geXlvcHRpb24tPnl5c3RhdGUsIHl5biA9IHl5bnJoczsKKyAgICAgICAgICAgICAgICAgICB5eW4gPiAwOworICAgICAgICAgICAgICAgICAgIHl5cyA9IHl5cy0+eXlwcmVkLCB5eW4gLT0gMSkKKyAgICAgICAgICAgICAgICB5eXJoc2xvY1t5eW5dLnl5c3RhdGUueXlsb2MgPSB5eXMtPnl5bG9jOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogQm90aCB5eXJlc29sdmVBY3Rpb24gYW5kIHl5cmVzb2x2ZUxvY2F0aW9ucyB0cmF2ZXJzZSB0aGUgR1NTCisgICAgICAgICAgICAgICAgIGluIHJldmVyc2UgcmlnaHRtb3N0IG9yZGVyLiAgSXQgaXMgb25seSBuZWNlc3NhcnkgdG8gaW52b2tlCisgICAgICAgICAgICAgICAgIHl5cmVzb2x2ZUxvY2F0aW9ucyBvbiBhIHN1YmZvcmVzdCBmb3Igd2hpY2ggeXlyZXNvbHZlQWN0aW9uCisgICAgICAgICAgICAgICAgIHdvdWxkIGhhdmUgYmVlbiBpbnZva2VkIG5leHQgaGFkIGFuIGFtYmlndWl0eSBub3QgYmVlbgorICAgICAgICAgICAgICAgICBkZXRlY3RlZC4gIFRodXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBwcmV2aW91cyBzdGF0ZSAoYnV0IG5vdAorICAgICAgICAgICAgICAgICBuZWNlc3NhcmlseSB0aGUgcHJldmlvdXMgc3RhdGUgaXRzZWxmKSBpcyBndWFyYW50ZWVkIHRvIGJlCisgICAgICAgICAgICAgICAgIHJlc29sdmVkIGFscmVhZHkuICAqLworICAgICAgICAgICAgICB5eUdMUlN0YXRlICp5eXByZXZpb3VzID0geXlvcHRpb24tPnl5c3RhdGU7CisgICAgICAgICAgICAgIHl5cmhzbG9jWzBdLnl5c3RhdGUueXlsb2MgPSB5eXByZXZpb3VzLT55eWxvYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB7CisgICAgICAgICAgICBpbnQgeXljaGFyX2N1cnJlbnQgPSB5eWNoYXI7CisgICAgICAgICAgICBZWVNUWVBFIHl5bHZhbF9jdXJyZW50ID0geXlsdmFsOworICAgICAgICAgICAgWVlMVFlQRSB5eWxsb2NfY3VycmVudCA9IHl5bGxvYzsKKyAgICAgICAgICAgIHl5Y2hhciA9IHl5b3B0aW9uLT55eXJhd2NoYXI7CisgICAgICAgICAgICB5eWx2YWwgPSB5eW9wdGlvbi0+eXl2YWw7CisgICAgICAgICAgICB5eWxsb2MgPSB5eW9wdGlvbi0+eXlsb2M7CisgICAgICAgICAgICBZWUxMT0NfREVGQVVMVCAoKHl5czEtPnl5bG9jKSwgeXlyaHNsb2MsIHl5bnJocyk7CisgICAgICAgICAgICB5eWNoYXIgPSB5eWNoYXJfY3VycmVudDsKKyAgICAgICAgICAgIHl5bHZhbCA9IHl5bHZhbF9jdXJyZW50OworICAgICAgICAgICAgeXlsbG9jID0geXlsbG9jX2N1cnJlbnQ7CisgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotfQorfV1dKVsKIAogLyoqIFJlc29sdmUgdGhlIGFtYmlndWl0eSByZXByZXNlbnRlZCBpbiBzdGF0ZSBTLCBwZXJmb3JtIHRoZSBpbmRpY2F0ZWQKICAqICBhY3Rpb25zLCBhbmQgc2V0IHRoZSBzZW1hbnRpYyB2YWx1ZSBvZiBTLiAgSWYgcmVzdWx0ICE9IHl5b2ssIHRoZSBjaGFpbiBvZgpAQCAtMTg3MCw3OSArMTc5Niw3NSBAQAogeXlyZXNvbHZlVmFsdWUgKHl5R0xSU3RhdGUqIHl5cywgeXlHTFJTdGFjayogeXlzdGFja3BdYjRfdXNlcl9mb3JtYWxzWykKIHsKICAgeXlTZW1hbnRpY09wdGlvbiogeXlvcHRpb25MaXN0ID0geXlzLT55eXNlbWFudGljcy55eWZpcnN0VmFsOwotICB5eVNlbWFudGljT3B0aW9uKiB5eWJlc3Q7CisgIHl5U2VtYW50aWNPcHRpb24qIHl5YmVzdCA9IHl5b3B0aW9uTGlzdDsKICAgeXlTZW1hbnRpY09wdGlvbioqIHl5cHA7Ci0gIHl5Ym9vbCB5eW1lcmdlOworICB5eWJvb2wgeXltZXJnZSA9IHl5ZmFsc2U7CiAgIFlZU1RZUEUgeXlzdmFsOwotICBZWVJFU1VMVFRBRyB5eWZsYWc7Ci0gIFlZTFRZUEUgKnl5bG9jcCA9ICZ5eXMtPnl5bG9jOworICBZWVJFU1VMVFRBRyB5eWZsYWc7XWI0X2xvY2F0aW9uc19pZihbCisgIFlZTFRZUEUgKnl5bG9jcCA9ICZ5eXMtPnl5bG9jO10pWwogCi0gIHl5YmVzdCA9IHl5b3B0aW9uTGlzdDsKLSAgeXltZXJnZSA9IHl5ZmFsc2U7Ci0gIGZvciAoeXlwcCA9ICZ5eW9wdGlvbkxpc3QtPnl5bmV4dDsgKnl5cHAgIT0gTlVMTDsgKQorICBmb3IgKHl5cHAgPSAmeXlvcHRpb25MaXN0LT55eW5leHQ7ICp5eXBwICE9IFlZX05VTEw7ICkKICAgICB7CiAgICAgICB5eVNlbWFudGljT3B0aW9uKiB5eXAgPSAqeXlwcDsKIAogICAgICAgaWYgKHl5aWRlbnRpY2FsT3B0aW9ucyAoeXliZXN0LCB5eXApKQotCXsKLQkgIHl5bWVyZ2VPcHRpb25TZXRzICh5eWJlc3QsIHl5cCk7Ci0JICAqeXlwcCA9IHl5cC0+eXluZXh0OwotCX0KKyAgICAgICAgeworICAgICAgICAgIHl5bWVyZ2VPcHRpb25TZXRzICh5eWJlc3QsIHl5cCk7CisgICAgICAgICAgKnl5cHAgPSB5eXAtPnl5bmV4dDsKKyAgICAgICAgfQogICAgICAgZWxzZQotCXsKLQkgIHN3aXRjaCAoeXlwcmVmZXJlbmNlICh5eWJlc3QsIHl5cCkpCi0JICAgIHsKLQkgICAgY2FzZSAwOgotCSAgICAgIHl5cmVzb2x2ZUxvY2F0aW9ucyAoeXlzLCAxLCB5eXN0YWNrcF1iNF91c2VyX2FyZ3NbKTsKLQkgICAgICByZXR1cm4geXlyZXBvcnRBbWJpZ3VpdHkgKHl5YmVzdCwgeXlwXWI0X3B1cmVfYXJnc1spOwotCSAgICAgIGJyZWFrOwotCSAgICBjYXNlIDE6Ci0JICAgICAgeXltZXJnZSA9IHl5dHJ1ZTsKLQkgICAgICBicmVhazsKLQkgICAgY2FzZSAyOgotCSAgICAgIGJyZWFrOwotCSAgICBjYXNlIDM6Ci0JICAgICAgeXliZXN0ID0geXlwOwotCSAgICAgIHl5bWVyZ2UgPSB5eWZhbHNlOwotCSAgICAgIGJyZWFrOwotCSAgICBkZWZhdWx0OgotCSAgICAgIC8qIFRoaXMgY2Fubm90IGhhcHBlbiBzbyBpdCBpcyBub3Qgd29ydGggYSBZWUFTU0VSVCAoeXlmYWxzZSksCi0JCSBidXQgc29tZSBjb21waWxlcnMgY29tcGxhaW4gaWYgdGhlIGRlZmF1bHQgY2FzZSBpcwotCQkgb21pdHRlZC4gICovCi0JICAgICAgYnJlYWs7Ci0JICAgIH0KLQkgIHl5cHAgPSAmeXlwLT55eW5leHQ7Ci0JfQorICAgICAgICB7CisgICAgICAgICAgc3dpdGNoICh5eXByZWZlcmVuY2UgKHl5YmVzdCwgeXlwKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgMDpdYjRfbG9jYXRpb25zX2lmKFtbCisgICAgICAgICAgICAgIHl5cmVzb2x2ZUxvY2F0aW9ucyAoeXlzLCAxLCB5eXN0YWNrcF1iNF91c2VyX2FyZ3NbKTtdXSlbCisgICAgICAgICAgICAgIHJldHVybiB5eXJlcG9ydEFtYmlndWl0eSAoeXliZXN0LCB5eXBdYjRfcHVyZV9hcmdzWyk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICB5eW1lcmdlID0geXl0cnVlOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgIHl5YmVzdCA9IHl5cDsKKyAgICAgICAgICAgICAgeXltZXJnZSA9IHl5ZmFsc2U7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgLyogVGhpcyBjYW5ub3QgaGFwcGVuIHNvIGl0IGlzIG5vdCB3b3J0aCBhIFlZQVNTRVJUICh5eWZhbHNlKSwKKyAgICAgICAgICAgICAgICAgYnV0IHNvbWUgY29tcGlsZXJzIGNvbXBsYWluIGlmIHRoZSBkZWZhdWx0IGNhc2UgaXMKKyAgICAgICAgICAgICAgICAgb21pdHRlZC4gICovCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIHl5cHAgPSAmeXlwLT55eW5leHQ7CisgICAgICAgIH0KICAgICB9CiAKICAgaWYgKHl5bWVyZ2UpCiAgICAgewogICAgICAgeXlTZW1hbnRpY09wdGlvbiogeXlwOwogICAgICAgaW50IHl5cHJlYyA9IHl5ZHByZWNbeXliZXN0LT55eXJ1bGVdOwotICAgICAgeXlmbGFnID0geXlyZXNvbHZlQWN0aW9uICh5eWJlc3QsIHl5c3RhY2twLCAmeXlzdmFsLAotCQkJCXl5bG9jcF1iNF91c2VyX2FyZ3NbKTsKKyAgICAgIHl5ZmxhZyA9IHl5cmVzb2x2ZUFjdGlvbiAoeXliZXN0LCB5eXN0YWNrcCwgJnl5c3ZhbF1iNF9sb2N1c2VyX2FyZ3NbKTsKICAgICAgIGlmICh5eWZsYWcgPT0geXlvaykKLQlmb3IgKHl5cCA9IHl5YmVzdC0+eXluZXh0OyB5eXAgIT0gTlVMTDsgeXlwID0geXlwLT55eW5leHQpCi0JICB7Ci0JICAgIGlmICh5eXByZWMgPT0geXlkcHJlY1t5eXAtPnl5cnVsZV0pCi0JICAgICAgewotCQlZWVNUWVBFIHl5c3ZhbF9vdGhlcjsKLQkJWVlMVFlQRSB5eWR1bW15OwotCQl5eWZsYWcgPSB5eXJlc29sdmVBY3Rpb24gKHl5cCwgeXlzdGFja3AsICZ5eXN2YWxfb3RoZXIsCi0JCQkJCSAgJnl5ZHVtbXldYjRfdXNlcl9hcmdzWyk7Ci0JCWlmICh5eWZsYWcgIT0geXlvaykKLQkJICB7Ci0JCSAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlzY2FyZGluZyBpbmNvbXBsZXRlbHkgbWVyZ2VkIHZhbHVlIGZvciIsCi0JCQkJeXlzdG9zW3l5cy0+eXlsclN0YXRlXSwKLQkJCQkmeXlzdmFsXWI0X2xvY2F0aW9uc19pZihbLCB5eWxvY3BdKVtdYjRfdXNlcl9hcmdzWyk7Ci0JCSAgICBicmVhazsKLQkJICB9Ci0JCXl5dXNlck1lcmdlICh5eW1lcmdlclt5eXAtPnl5cnVsZV0sICZ5eXN2YWwsICZ5eXN2YWxfb3RoZXIpOwotCSAgICAgIH0KLQkgIH0KKyAgICAgICAgZm9yICh5eXAgPSB5eWJlc3QtPnl5bmV4dDsgeXlwICE9IFlZX05VTEw7IHl5cCA9IHl5cC0+eXluZXh0KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh5eXByZWMgPT0geXlkcHJlY1t5eXAtPnl5cnVsZV0pCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBZWVNUWVBFIHl5c3ZhbF9vdGhlcjtdYjRfbG9jYXRpb25zX2lmKFsKKyAgICAgICAgICAgICAgICBZWUxUWVBFIHl5ZHVtbXk7XSlbCisgICAgICAgICAgICAgICAgeXlmbGFnID0geXlyZXNvbHZlQWN0aW9uICh5eXAsIHl5c3RhY2twLCAmeXlzdmFsX290aGVyXWI0X2xvY3VzZXJfYXJncyhbJnl5ZHVtbXldKVspOworICAgICAgICAgICAgICAgIGlmICh5eWZsYWcgIT0geXlvaykKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IGRpc2NhcmRpbmcgaW5jb21wbGV0ZWx5IG1lcmdlZCB2YWx1ZSBmb3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5eXN0b3NbeXlzLT55eWxyU3RhdGVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeXlzdmFsXWI0X2xvY3VzZXJfYXJnc1spOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB5eXVzZXJNZXJnZSAoeXltZXJnZXJbeXlwLT55eXJ1bGVdLCAmeXlzdmFsLCAmeXlzdmFsX290aGVyKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KICAgICB9CiAgIGVsc2UKLSAgICB5eWZsYWcgPSB5eXJlc29sdmVBY3Rpb24gKHl5YmVzdCwgeXlzdGFja3AsICZ5eXN2YWwsIHl5bG9jcF1iNF91c2VyX2FyZ3NbKTsKKyAgICB5eWZsYWcgPSB5eXJlc29sdmVBY3Rpb24gKHl5YmVzdCwgeXlzdGFja3AsICZ5eXN2YWxdYjRfbG9jdXNlcl9hcmdzKFt5eWxvY3BdKVspOwogCiAgIGlmICh5eWZsYWcgPT0geXlvaykKICAgICB7CkBAIC0xOTUwLDI0ICsxODcyLDI0IEBACiAgICAgICB5eXMtPnl5c2VtYW50aWNzLnl5c3ZhbCA9IHl5c3ZhbDsKICAgICB9CiAgIGVsc2UKLSAgICB5eXMtPnl5c2VtYW50aWNzLnl5Zmlyc3RWYWwgPSBOVUxMOworICAgIHl5cy0+eXlzZW1hbnRpY3MueXlmaXJzdFZhbCA9IFlZX05VTEw7CiAgIHJldHVybiB5eWZsYWc7CiB9CiAKIHN0YXRpYyBZWVJFU1VMVFRBRwogeXlyZXNvbHZlU3RhY2sgKHl5R0xSU3RhY2sqIHl5c3RhY2twXWI0X3VzZXJfZm9ybWFsc1spCiB7Ci0gIGlmICh5eXN0YWNrcC0+eXlzcGxpdFBvaW50ICE9IE5VTEwpCisgIGlmICh5eXN0YWNrcC0+eXlzcGxpdFBvaW50ICE9IFlZX05VTEwpCiAgICAgewogICAgICAgeXlHTFJTdGF0ZSogeXlzOwogICAgICAgaW50IHl5bjsKIAogICAgICAgZm9yICh5eW4gPSAwLCB5eXMgPSB5eXN0YWNrcC0+eXl0b3BzLnl5c3RhdGVzWzBdOwotCSAgIHl5cyAhPSB5eXN0YWNrcC0+eXlzcGxpdFBvaW50OwotCSAgIHl5cyA9IHl5cy0+eXlwcmVkLCB5eW4gKz0gMSkKLQljb250aW51ZTsKKyAgICAgICAgICAgeXlzICE9IHl5c3RhY2twLT55eXNwbGl0UG9pbnQ7CisgICAgICAgICAgIHl5cyA9IHl5cy0+eXlwcmVkLCB5eW4gKz0gMSkKKyAgICAgICAgY29udGludWU7CiAgICAgICBZWUNISyAoeXlyZXNvbHZlU3RhdGVzICh5eXN0YWNrcC0+eXl0b3BzLnl5c3RhdGVzWzBdLCB5eW4sIHl5c3RhY2twCi0JCQkgICAgIF1iNF91c2VyX2FyZ3NbKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1iNF91c2VyX2FyZ3NbKSk7CiAgICAgfQogICByZXR1cm4geXlvazsKIH0KQEAgLTE5NzcsMTAgKzE4OTksMTAgQEAKIHsKICAgeXlHTFJTdGF0ZSogeXlwLCAqeXlxLCAqeXlyOwogCi0gIGlmICh5eXN0YWNrcC0+eXl0b3BzLnl5c2l6ZSAhPSAxIHx8IHl5c3RhY2twLT55eXNwbGl0UG9pbnQgPT0gTlVMTCkKKyAgaWYgKHl5c3RhY2twLT55eXRvcHMueXlzaXplICE9IDEgfHwgeXlzdGFja3AtPnl5c3BsaXRQb2ludCA9PSBZWV9OVUxMKQogICAgIHJldHVybjsKIAotICBmb3IgKHl5cCA9IHl5c3RhY2twLT55eXRvcHMueXlzdGF0ZXNbMF0sIHl5cSA9IHl5cC0+eXlwcmVkLCB5eXIgPSBOVUxMOworICBmb3IgKHl5cCA9IHl5c3RhY2twLT55eXRvcHMueXlzdGF0ZXNbMF0sIHl5cSA9IHl5cC0+eXlwcmVkLCB5eXIgPSBZWV9OVUxMOwogICAgICAgIHl5cCAhPSB5eXN0YWNrcC0+eXlzcGxpdFBvaW50OwogICAgICAgIHl5ciA9IHl5cCwgeXlwID0geXlxLCB5eXEgPSB5eXAtPnl5cHJlZCkKICAgICB5eXAtPnl5cHJlZCA9IHl5cjsKQEAgLTE5ODgsMTAgKzE5MTAsMTAgQEAKICAgeXlzdGFja3AtPnl5c3BhY2VMZWZ0ICs9IHl5c3RhY2twLT55eW5leHRGcmVlIC0geXlzdGFja3AtPnl5aXRlbXM7CiAgIHl5c3RhY2twLT55eW5leHRGcmVlID0gKCh5eUdMUlN0YWNrSXRlbSopIHl5c3RhY2twLT55eXNwbGl0UG9pbnQpICsgMTsKICAgeXlzdGFja3AtPnl5c3BhY2VMZWZ0IC09IHl5c3RhY2twLT55eW5leHRGcmVlIC0geXlzdGFja3AtPnl5aXRlbXM7Ci0gIHl5c3RhY2twLT55eXNwbGl0UG9pbnQgPSBOVUxMOwotICB5eXN0YWNrcC0+eXlsYXN0RGVsZXRlZCA9IE5VTEw7CisgIHl5c3RhY2twLT55eXNwbGl0UG9pbnQgPSBZWV9OVUxMOworICB5eXN0YWNrcC0+eXlsYXN0RGVsZXRlZCA9IFlZX05VTEw7CiAKLSAgd2hpbGUgKHl5ciAhPSBOVUxMKQorICB3aGlsZSAoeXlyICE9IFlZX05VTEwpCiAgICAgewogICAgICAgeXlzdGFja3AtPnl5bmV4dEZyZWUtPnl5c3RhdGUgPSAqeXlyOwogICAgICAgeXlyID0geXlyLT55eXByZWQ7CkBAIC0yMDA0LDczICsxOTI2LDgxIEBACiAKIHN0YXRpYyBZWVJFU1VMVFRBRwogeXlwcm9jZXNzT25lU3RhY2sgKHl5R0xSU3RhY2sqIHl5c3RhY2twLCBzaXplX3QgeXlrLAotCQkgICBzaXplX3QgeXlwb3NuXWI0X3B1cmVfZm9ybWFsc1spCisgICAgICAgICAgICAgICAgICAgc2l6ZV90IHl5cG9zbl1iNF9wdXJlX2Zvcm1hbHNbKQogewogICBpbnQgeXlhY3Rpb247CiAgIGNvbnN0IHNob3J0IGludCogeXljb25mbGljdHM7CiAgIHl5UnVsZU51bSB5eXJ1bGU7CiAKLSAgd2hpbGUgKHl5c3RhY2twLT55eXRvcHMueXlzdGF0ZXNbeXlrXSAhPSBOVUxMKQorICB3aGlsZSAoeXlzdGFja3AtPnl5dG9wcy55eXN0YXRlc1t5eWtdICE9IFlZX05VTEwpCiAgICAgewogICAgICAgeXlTdGF0ZU51bSB5eXN0YXRlID0geXlzdGFja3AtPnl5dG9wcy55eXN0YXRlc1t5eWtdLT55eWxyU3RhdGU7CiAgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFjayAlbHUgRW50ZXJpbmcgc3RhdGUgJWRcbiIsCi0JCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eWssIHl5c3RhdGUpKTsKKyAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGludCkgeXlrLCB5eXN0YXRlKSk7CiAKICAgICAgIFlZQVNTRVJUICh5eXN0YXRlICE9IFlZRklOQUwpOwogCiAgICAgICBpZiAoeXlpc0RlZmF1bHRlZFN0YXRlICh5eXN0YXRlKSkKLQl7Ci0JICB5eXJ1bGUgPSB5eWRlZmF1bHRBY3Rpb24gKHl5c3RhdGUpOwotCSAgaWYgKHl5cnVsZSA9PSAwKQotCSAgICB7Ci0JICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgJWx1IGRpZXMuXG4iLAotCQkJICAodW5zaWduZWQgbG9uZyBpbnQpIHl5aykpOwotCSAgICAgIHl5bWFya1N0YWNrRGVsZXRlZCAoeXlzdGFja3AsIHl5ayk7Ci0JICAgICAgcmV0dXJuIHl5b2s7Ci0JICAgIH0KLQkgIFlZQ0hLICh5eWdsclJlZHVjZSAoeXlzdGFja3AsIHl5aywgeXlydWxlLCB5eWZhbHNlXWI0X3VzZXJfYXJnc1spKTsKLQl9CisgICAgICAgIHsKKyAgICAgICAgICB5eXJ1bGUgPSB5eWRlZmF1bHRBY3Rpb24gKHl5c3RhdGUpOworICAgICAgICAgIGlmICh5eXJ1bGUgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgJWx1IGRpZXMuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyBpbnQpIHl5aykpOworICAgICAgICAgICAgICB5eW1hcmtTdGFja0RlbGV0ZWQgKHl5c3RhY2twLCB5eWspOworICAgICAgICAgICAgICByZXR1cm4geXlvazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBZWUNISyAoeXlnbHJSZWR1Y2UgKHl5c3RhY2twLCB5eWssIHl5cnVsZSwgeXlmYWxzZV1iNF91c2VyX2FyZ3NbKSk7CisgICAgICAgIH0KICAgICAgIGVsc2UKLQl7Ci0JICB5eVN5bWJvbCB5eXRva2VuOwotCSAgeXlzdGFja3AtPnl5dG9wcy55eWxvb2thaGVhZE5lZWRzW3l5a10gPSB5eXRydWU7Ci0JICBpZiAoeXljaGFyID09IFlZRU1QVFkpCi0JICAgIHsKLQkgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpKTsKLQkgICAgICB5eWNoYXIgPSBZWUxFWDsKLQkgICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7Ci0JICAgICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKLQkgIHl5Z2V0TFJBY3Rpb25zICh5eXN0YXRlLCB5eXRva2VuLCAmeXlhY3Rpb24sICZ5eWNvbmZsaWN0cyk7CisgICAgICAgIHsKKyAgICAgICAgICB5eVN5bWJvbCB5eXRva2VuOworICAgICAgICAgIHl5c3RhY2twLT55eXRvcHMueXlsb29rYWhlYWROZWVkc1t5eWtdID0geXl0cnVlOworICAgICAgICAgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKSk7CisgICAgICAgICAgICAgIHl5Y2hhciA9IFlZTEVYOworICAgICAgICAgICAgfQogCi0JICB3aGlsZSAoKnl5Y29uZmxpY3RzICE9IDApCi0JICAgIHsKLQkgICAgICBzaXplX3QgeXluZXdTdGFjayA9IHl5c3BsaXRTdGFjayAoeXlzdGFja3AsIHl5ayk7Ci0JICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3BsaXR0aW5nIG9mZiBzdGFjayAlbHUgZnJvbSAlbHUuXG4iLAotCQkJICAodW5zaWduZWQgbG9uZyBpbnQpIHl5bmV3U3RhY2ssCi0JCQkgICh1bnNpZ25lZCBsb25nIGludCkgeXlrKSk7Ci0JICAgICAgWVlDSEsgKHl5Z2xyUmVkdWNlICh5eXN0YWNrcCwgeXluZXdTdGFjaywKLQkJCQkgICp5eWNvbmZsaWN0cywgeXlmYWxzZV1iNF91c2VyX2FyZ3NbKSk7Ci0JICAgICAgWVlDSEsgKHl5cHJvY2Vzc09uZVN0YWNrICh5eXN0YWNrcCwgeXluZXdTdGFjaywKLQkJCQkJeXlwb3NuXWI0X3B1cmVfYXJnc1spKTsKLQkgICAgICB5eWNvbmZsaWN0cyArPSAxOwotCSAgICB9CisgICAgICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgeXljaGFyID0geXl0b2tlbiA9IFlZRU9GOworICAgICAgICAgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJOb3cgYXQgZW5kIG9mIGlucHV0LlxuIikpOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOworICAgICAgICAgICAgICBZWV9TWU1CT0xfUFJJTlQgKCJOZXh0IHRva2VuIGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CisgICAgICAgICAgICB9CiAKLQkgIGlmICh5eWlzU2hpZnRBY3Rpb24gKHl5YWN0aW9uKSkKLQkgICAgYnJlYWs7Ci0JICBlbHNlIGlmICh5eWlzRXJyb3JBY3Rpb24gKHl5YWN0aW9uKSkKLQkgICAgewotCSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrICVsdSBkaWVzLlxuIiwKLQkJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eWspKTsKLQkgICAgICB5eW1hcmtTdGFja0RlbGV0ZWQgKHl5c3RhY2twLCB5eWspOwotCSAgICAgIGJyZWFrOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIFlZQ0hLICh5eWdsclJlZHVjZSAoeXlzdGFja3AsIHl5aywgLXl5YWN0aW9uLAotCQkJCXl5ZmFsc2VdYjRfdXNlcl9hcmdzWykpOwotCX0KKyAgICAgICAgICB5eWdldExSQWN0aW9ucyAoeXlzdGF0ZSwgeXl0b2tlbiwgJnl5YWN0aW9uLCAmeXljb25mbGljdHMpOworCisgICAgICAgICAgd2hpbGUgKCp5eWNvbmZsaWN0cyAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzaXplX3QgeXluZXdTdGFjayA9IHl5c3BsaXRTdGFjayAoeXlzdGFja3AsIHl5ayk7CisgICAgICAgICAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlNwbGl0dGluZyBvZmYgc3RhY2sgJWx1IGZyb20gJWx1LlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eW5ld1N0YWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyBpbnQpIHl5aykpOworICAgICAgICAgICAgICBZWUNISyAoeXlnbHJSZWR1Y2UgKHl5c3RhY2twLCB5eW5ld1N0YWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5eWNvbmZsaWN0cywgeXlmYWxzZV1iNF91c2VyX2FyZ3NbKSk7CisgICAgICAgICAgICAgIFlZQ0hLICh5eXByb2Nlc3NPbmVTdGFjayAoeXlzdGFja3AsIHl5bmV3U3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlwb3NuXWI0X3B1cmVfYXJnc1spKTsKKyAgICAgICAgICAgICAgeXljb25mbGljdHMgKz0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGlmICh5eWlzU2hpZnRBY3Rpb24gKHl5YWN0aW9uKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGVsc2UgaWYgKHl5aXNFcnJvckFjdGlvbiAoeXlhY3Rpb24pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFjayAlbHUgZGllcy5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGludCkgeXlrKSk7CisgICAgICAgICAgICAgIHl5bWFya1N0YWNrRGVsZXRlZCAoeXlzdGFja3AsIHl5ayk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFlZQ0hLICh5eWdsclJlZHVjZSAoeXlzdGFja3AsIHl5aywgLXl5YWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5eWZhbHNlXWI0X3VzZXJfYXJnc1spKTsKKyAgICAgICAgfQogICAgIH0KICAgcmV0dXJuIHl5b2s7CiB9CkBAIC0yMDc4LDEwNyArMjAwOCwxNDAgQEAKIC8qQVJHU1VTRUQqLyBzdGF0aWMgdm9pZAogeXlyZXBvcnRTeW50YXhFcnJvciAoeXlHTFJTdGFjayogeXlzdGFja3BdYjRfdXNlcl9mb3JtYWxzWykKIHsKLSAgaWYgKHl5c3RhY2twLT55eWVyclN0YXRlID09IDApCisgIGlmICh5eXN0YWNrcC0+eXllcnJTdGF0ZSAhPSAwKQorICAgIHJldHVybjsKKyNpZiAhIFlZRVJST1JfVkVSQk9TRQorICB5eWVycm9yIChdYjRfbHl5ZXJyb3JfYXJnc1tZWV8oInN5bnRheCBlcnJvciIpKTsKKyNlbHNlCisgIHsKKyAgeXlTeW1ib2wgeXl0b2tlbiA9IHl5Y2hhciA9PSBZWUVNUFRZID8gWVlFTVBUWSA6IFlZVFJBTlNMQVRFICh5eWNoYXIpOworICBzaXplX3QgeXlzaXplMCA9IHl5dG5hbWVyciAoWVlfTlVMTCwgeXl0b2tlbk5hbWUgKHl5dG9rZW4pKTsKKyAgc2l6ZV90IHl5c2l6ZSA9IHl5c2l6ZTA7CisgIHl5Ym9vbCB5eXNpemVfb3ZlcmZsb3cgPSB5eWZhbHNlOworICBjaGFyKiB5eW1zZyA9IFlZX05VTEw7CisgIGVudW0geyBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNID0gNSB9OworICAvKiBJbnRlcm5hdGlvbmFsaXplZCBmb3JtYXQgc3RyaW5nLiAqLworICBjb25zdCBjaGFyICp5eWZvcm1hdCA9IFlZX05VTEw7CisgIC8qIEFyZ3VtZW50cyBvZiB5eWZvcm1hdC4gKi8KKyAgY2hhciBjb25zdCAqeXlhcmdbWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTV07CisgIC8qIE51bWJlciBvZiByZXBvcnRlZCB0b2tlbnMgKG9uZSBmb3IgdGhlICJ1bmV4cGVjdGVkIiwgb25lIHBlcgorICAgICAiZXhwZWN0ZWQiKS4gICovCisgIGludCB5eWNvdW50ID0gMDsKKworICAvKiBUaGVyZSBhcmUgbWFueSBwb3NzaWJpbGl0aWVzIGhlcmUgdG8gY29uc2lkZXI6CisgICAgIC0gSWYgdGhpcyBzdGF0ZSBpcyBhIGNvbnNpc3RlbnQgc3RhdGUgd2l0aCBhIGRlZmF1bHQgYWN0aW9uLCB0aGVuCisgICAgICAgdGhlIG9ubHkgd2F5IHRoaXMgZnVuY3Rpb24gd2FzIGludm9rZWQgaXMgaWYgdGhlIGRlZmF1bHQgYWN0aW9uCisgICAgICAgaXMgYW4gZXJyb3IgYWN0aW9uLiAgSW4gdGhhdCBjYXNlLCBkb24ndCBjaGVjayBmb3IgZXhwZWN0ZWQKKyAgICAgICB0b2tlbnMgYmVjYXVzZSB0aGVyZSBhcmUgbm9uZS4KKyAgICAgLSBUaGUgb25seSB3YXkgdGhlcmUgY2FuIGJlIG5vIGxvb2thaGVhZCBwcmVzZW50IChpbiB5eWNoYXIpIGlzIGlmCisgICAgICAgdGhpcyBzdGF0ZSBpcyBhIGNvbnNpc3RlbnQgc3RhdGUgd2l0aCBhIGRlZmF1bHQgYWN0aW9uLiAgVGh1cywKKyAgICAgICBkZXRlY3RpbmcgdGhlIGFic2VuY2Ugb2YgYSBsb29rYWhlYWQgaXMgc3VmZmljaWVudCB0byBkZXRlcm1pbmUKKyAgICAgICB0aGF0IHRoZXJlIGlzIG5vIHVuZXhwZWN0ZWQgb3IgZXhwZWN0ZWQgdG9rZW4gdG8gcmVwb3J0LiAgSW4gdGhhdAorICAgICAgIGNhc2UsIGp1c3QgcmVwb3J0IGEgc2ltcGxlICJzeW50YXggZXJyb3IiLgorICAgICAtIERvbid0IGFzc3VtZSB0aGVyZSBpc24ndCBhIGxvb2thaGVhZCBqdXN0IGJlY2F1c2UgdGhpcyBzdGF0ZSBpcyBhCisgICAgICAgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24uICBUaGVyZSBtaWdodCBoYXZlIGJlZW4gYQorICAgICAgIHByZXZpb3VzIGluY29uc2lzdGVudCBzdGF0ZSwgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgbm9uLWRlZmF1bHQKKyAgICAgICBhY3Rpb24sIG9yIHVzZXIgc2VtYW50aWMgYWN0aW9uIHRoYXQgbWFuaXB1bGF0ZWQgeXljaGFyLgorICAgICAtIE9mIGNvdXJzZSwgdGhlIGV4cGVjdGVkIHRva2VuIGxpc3QgZGVwZW5kcyBvbiBzdGF0ZXMgdG8gaGF2ZQorICAgICAgIGNvcnJlY3QgbG9va2FoZWFkIGluZm9ybWF0aW9uLCBhbmQgaXQgZGVwZW5kcyBvbiB0aGUgcGFyc2VyIG5vdAorICAgICAgIHRvIHBlcmZvcm0gZXh0cmEgcmVkdWN0aW9ucyBhZnRlciBmZXRjaGluZyBhIGxvb2thaGVhZCBmcm9tIHRoZQorICAgICAgIHNjYW5uZXIgYW5kIGJlZm9yZSBkZXRlY3RpbmcgYSBzeW50YXggZXJyb3IuICBUaHVzLCBzdGF0ZSBtZXJnaW5nCisgICAgICAgKGZyb20gTEFMUiBvciBJRUxSKSBhbmQgZGVmYXVsdCByZWR1Y3Rpb25zIGNvcnJ1cHQgdGhlIGV4cGVjdGVkCisgICAgICAgdG9rZW4gbGlzdC4gIEhvd2V2ZXIsIHRoZSBsaXN0IGlzIGNvcnJlY3QgZm9yIGNhbm9uaWNhbCBMUiB3aXRoCisgICAgICAgb25lIGV4Y2VwdGlvbjogaXQgd2lsbCBzdGlsbCBjb250YWluIGFueSB0b2tlbiB0aGF0IHdpbGwgbm90IGJlCisgICAgICAgYWNjZXB0ZWQgZHVlIHRvIGFuIGVycm9yIGFjdGlvbiBpbiBhIGxhdGVyIHN0YXRlLgorICAqLworICBpZiAoeXl0b2tlbiAhPSBZWUVNUFRZKQogICAgIHsKLSNpZiBZWUVSUk9SX1ZFUkJPU0UKLSAgICAgIGludCB5eW47Ci0gICAgICB5eW4gPSB5eXBhY3RbeXlzdGFja3AtPnl5dG9wcy55eXN0YXRlc1swXS0+eXlsclN0YXRlXTsKLSAgICAgIGlmIChZWVBBQ1RfTklORiA8IHl5biAmJiB5eW4gPD0gWVlMQVNUKQotCXsKLQkgIHl5U3ltYm9sIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKLQkgIHNpemVfdCB5eXNpemUwID0geXl0bmFtZXJyIChOVUxMLCB5eXRva2VuTmFtZSAoeXl0b2tlbikpOwotCSAgc2l6ZV90IHl5c2l6ZSA9IHl5c2l6ZTA7Ci0JICBzaXplX3QgeXlzaXplMTsKLQkgIHl5Ym9vbCB5eXNpemVfb3ZlcmZsb3cgPSB5eWZhbHNlOwotCSAgY2hhciogeXltc2cgPSBOVUxMOwotCSAgZW51bSB7IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0gPSA1IH07Ci0JICBjaGFyIGNvbnN0ICp5eWFyZ1tZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNXTsKLQkgIGludCB5eXg7Ci0JICBjaGFyICp5eWZtdDsKLQkgIGNoYXIgY29uc3QgKnl5ZjsKLQkgIHN0YXRpYyBjaGFyIGNvbnN0IHl5dW5leHBlY3RlZFtdID0gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyI7Ci0JICBzdGF0aWMgY2hhciBjb25zdCB5eWV4cGVjdGluZ1tdID0gIiwgZXhwZWN0aW5nICVzIjsKLQkgIHN0YXRpYyBjaGFyIGNvbnN0IHl5b3JbXSA9ICIgb3IgJXMiOwotCSAgY2hhciB5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkCi0JCQkrIHNpemVvZiB5eWV4cGVjdGluZyAtIDEKLQkJCSsgKChZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNIC0gMikKLQkJCSAgICogKHNpemVvZiB5eW9yIC0gMSkpXTsKLQkgIGNoYXIgY29uc3QgKnl5cHJlZml4ID0geXlleHBlY3Rpbmc7Ci0KLQkgIC8qIFN0YXJ0IFlZWCBhdCAtWVlOIGlmIG5lZ2F0aXZlIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4KLQkgICAgIFlZQ0hFQ0suICAqLwotCSAgaW50IHl5eGJlZ2luID0geXluIDwgMCA/IC15eW4gOiAwOwotCi0JICAvKiBTdGF5IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAgKi8KLQkgIGludCB5eWNoZWNrbGltID0gWVlMQVNUIC0geXluICsgMTsKLQkgIGludCB5eXhlbmQgPSB5eWNoZWNrbGltIDwgWVlOVE9LRU5TID8geXljaGVja2xpbSA6IFlZTlRPS0VOUzsKLQkgIGludCB5eWNvdW50ID0gMTsKLQotCSAgeXlhcmdbMF0gPSB5eXRva2VuTmFtZSAoeXl0b2tlbik7Ci0JICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZvcm1hdCwgeXl1bmV4cGVjdGVkKTsKLQotCSAgZm9yICh5eXggPSB5eXhiZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5eCkKLQkgICAgaWYgKHl5Y2hlY2tbeXl4ICsgeXluXSA9PSB5eXggJiYgeXl4ICE9IFlZVEVSUk9SKQotCSAgICAgIHsKLQkJaWYgKHl5Y291bnQgPT0gWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSkKLQkJICB7Ci0JCSAgICB5eWNvdW50ID0gMTsKLQkJICAgIHl5c2l6ZSA9IHl5c2l6ZTA7Ci0JCSAgICB5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkIC0gMV0gPSAnXDAnOwotCQkgICAgYnJlYWs7Ci0JCSAgfQotCQl5eWFyZ1t5eWNvdW50KytdID0geXl0b2tlbk5hbWUgKHl5eCk7Ci0JCXl5c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKE5VTEwsIHl5dG9rZW5OYW1lICh5eXgpKTsKLQkJeXlzaXplX292ZXJmbG93IHw9IHl5c2l6ZTEgPCB5eXNpemU7Ci0JCXl5c2l6ZSA9IHl5c2l6ZTE7Ci0JCXl5Zm10ID0geXlzdHBjcHkgKHl5Zm10LCB5eXByZWZpeCk7Ci0JCXl5cHJlZml4ID0geXlvcjsKLQkgICAgICB9Ci0KLQkgIHl5ZiA9IFlZXyh5eWZvcm1hdCk7Ci0JICB5eXNpemUxID0geXlzaXplICsgc3RybGVuICh5eWYpOwotCSAgeXlzaXplX292ZXJmbG93IHw9IHl5c2l6ZTEgPCB5eXNpemU7Ci0JICB5eXNpemUgPSB5eXNpemUxOwotCi0JICBpZiAoIXl5c2l6ZV9vdmVyZmxvdykKLQkgICAgeXltc2cgPSAoY2hhciAqKSBZWU1BTExPQyAoeXlzaXplKTsKLQotCSAgaWYgKHl5bXNnKQotCSAgICB7Ci0JICAgICAgY2hhciAqeXlwID0geXltc2c7Ci0JICAgICAgaW50IHl5aSA9IDA7Ci0JICAgICAgd2hpbGUgKCgqeXlwID0gKnl5ZikpCi0JCXsKLQkJICBpZiAoKnl5cCA9PSAnJScgJiYgeXlmWzFdID09ICdzJyAmJiB5eWkgPCB5eWNvdW50KQotCQkgICAgewotCQkgICAgICB5eXAgKz0geXl0bmFtZXJyICh5eXAsIHl5YXJnW3l5aSsrXSk7Ci0JCSAgICAgIHl5ZiArPSAyOwotCQkgICAgfQotCQkgIGVsc2UKLQkJICAgIHsKLQkJICAgICAgeXlwKys7Ci0JCSAgICAgIHl5ZisrOwotCQkgICAgfQotCQl9Ci0JICAgICAgeXllcnJvciAoXWI0X2x5eWVycm9yX2FyZ3NbeXltc2cpOwotCSAgICAgIFlZRlJFRSAoeXltc2cpOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIHsKLQkgICAgICB5eWVycm9yIChdYjRfbHl5ZXJyb3JfYXJnc1tZWV8oInN5bnRheCBlcnJvciIpKTsKLQkgICAgICB5eU1lbW9yeUV4aGF1c3RlZCAoeXlzdGFja3ApOwotCSAgICB9Ci0JfQotICAgICAgZWxzZQotI2VuZGlmIC8qIFlZRVJST1JfVkVSQk9TRSAqLwotCXl5ZXJyb3IgKF1iNF9seXllcnJvcl9hcmdzW1lZXygic3ludGF4IGVycm9yIikpOwotICAgICAgeXluZXJycyArPSAxOworICAgICAgaW50IHl5biA9IHl5cGFjdFt5eXN0YWNrcC0+eXl0b3BzLnl5c3RhdGVzWzBdLT55eWxyU3RhdGVdOworICAgICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG9rZW5OYW1lICh5eXRva2VuKTsKKyAgICAgIGlmICgheXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQgKHl5bikpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBTdGFydCBZWVggYXQgLVlZTiBpZiBuZWdhdGl2ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluCisgICAgICAgICAgICAgWVlDSEVDSy4gIEluIG90aGVyIHdvcmRzLCBza2lwIHRoZSBmaXJzdCAtWVlOIGFjdGlvbnMgZm9yIHRoaXMKKyAgICAgICAgICAgICBzdGF0ZSBiZWNhdXNlIHRoZXkgYXJlIGRlZmF1bHQgYWN0aW9ucy4gICovCisgICAgICAgICAgaW50IHl5eGJlZ2luID0geXluIDwgMCA/IC15eW4gOiAwOworICAgICAgICAgIC8qIFN0YXkgd2l0aGluIGJvdW5kcyBvZiBib3RoIHl5Y2hlY2sgYW5kIHl5dG5hbWUuICAqLworICAgICAgICAgIGludCB5eWNoZWNrbGltID0gWVlMQVNUIC0geXluICsgMTsKKyAgICAgICAgICBpbnQgeXl4ZW5kID0geXljaGVja2xpbSA8IFlZTlRPS0VOUyA/IHl5Y2hlY2tsaW0gOiBZWU5UT0tFTlM7CisgICAgICAgICAgaW50IHl5eDsKKyAgICAgICAgICBmb3IgKHl5eCA9IHl5eGJlZ2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQorICAgICAgICAgICAgaWYgKHl5Y2hlY2tbeXl4ICsgeXluXSA9PSB5eXggJiYgeXl4ICE9IFlZVEVSUk9SCisgICAgICAgICAgICAgICAgJiYgIXl5dGFibGVfdmFsdWVfaXNfZXJyb3IgKHl5dGFibGVbeXl4ICsgeXluXSkpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoeXljb3VudCA9PSBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB5eWNvdW50ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgeXlzaXplID0geXlzaXplMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG9rZW5OYW1lICh5eXgpOworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHNpemVfdCB5eXN6ID0geXlzaXplICsgeXl0bmFtZXJyIChZWV9OVUxMLCB5eXRva2VuTmFtZSAoeXl4KSk7CisgICAgICAgICAgICAgICAgICB5eXNpemVfb3ZlcmZsb3cgfD0geXlzeiA8IHl5c2l6ZTsKKyAgICAgICAgICAgICAgICAgIHl5c2l6ZSA9IHl5c3o7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CisKKyAgc3dpdGNoICh5eWNvdW50KQorICAgIHsKKyNkZWZpbmUgWVlDQVNFXyhOLCBTKSAgICAgICAgICAgICAgICAgICBcCisgICAgICBjYXNlIE46ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWZvcm1hdCA9IFM7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGJyZWFrCisgICAgICBZWUNBU0VfKDAsIFlZXygic3ludGF4IGVycm9yIikpOworICAgICAgWVlDQVNFXygxLCBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIpKTsKKyAgICAgIFlZQ0FTRV8oMiwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIpKTsKKyAgICAgIFlZQ0FTRV8oMywgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpKTsKKyAgICAgIFlZQ0FTRV8oNCwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpKTsKKyAgICAgIFlZQ0FTRV8oNSwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIpKTsKKyN1bmRlZiBZWUNBU0VfCisgICAgfQorCisgIHsKKyAgICBzaXplX3QgeXlzeiA9IHl5c2l6ZSArIHN0cmxlbiAoeXlmb3JtYXQpOworICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSB5eXN6IDwgeXlzaXplOworICAgIHl5c2l6ZSA9IHl5c3o7CisgIH0KKworICBpZiAoIXl5c2l6ZV9vdmVyZmxvdykKKyAgICB5eW1zZyA9IChjaGFyICopIFlZTUFMTE9DICh5eXNpemUpOworCisgIGlmICh5eW1zZykKKyAgICB7CisgICAgICBjaGFyICp5eXAgPSB5eW1zZzsKKyAgICAgIGludCB5eWkgPSAwOworICAgICAgd2hpbGUgKCgqeXlwID0gKnl5Zm9ybWF0KSkKKyAgICAgICAgeworICAgICAgICAgIGlmICgqeXlwID09ICclJyAmJiB5eWZvcm1hdFsxXSA9PSAncycgJiYgeXlpIDwgeXljb3VudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgeXlwICs9IHl5dG5hbWVyciAoeXlwLCB5eWFyZ1t5eWkrK10pOworICAgICAgICAgICAgICB5eWZvcm1hdCArPSAyOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgeXlwKys7CisgICAgICAgICAgICAgIHl5Zm9ybWF0Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIHl5ZXJyb3IgKF1iNF9seXllcnJvcl9hcmdzW3l5bXNnKTsKKyAgICAgIFlZRlJFRSAoeXltc2cpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHl5ZXJyb3IgKF1iNF9seXllcnJvcl9hcmdzW1lZXygic3ludGF4IGVycm9yIikpOworICAgICAgeXlNZW1vcnlFeGhhdXN0ZWQgKHl5c3RhY2twKTsKKyAgICB9CisgIH0KKyNlbmRpZiAvKiBZWUVSUk9SX1ZFUkJPU0UgKi8KKyAgeXluZXJycyArPSAxOwogfQogCiAvKiBSZWNvdmVyIGZyb20gYSBzeW50YXggZXJyb3Igb24gKllZU1RBQ0tQLCBhc3N1bWluZyB0aGF0ICpZWVNUQUNLUC0+WVlUT0tFTlAsCiAgICB5eWx2YWwsIGFuZCB5eWxsb2MgYXJlIHRoZSBzeW50YWN0aWMgY2F0ZWdvcnksIHNlbWFudGljIHZhbHVlLCBhbmQgbG9jYXRpb24KLSAgIG9mIHRoZSBsb29rLWFoZWFkLiAgKi8KKyAgIG9mIHRoZSBsb29rYWhlYWQuICAqLwogLypBUkdTVVNFRCovIHN0YXRpYyB2b2lkCiB5eXJlY292ZXJTeW50YXhFcnJvciAoeXlHTFJTdGFjayogeXlzdGFja3BdYjRfdXNlcl9mb3JtYWxzWykKIHsKQEAgLTIxOTAsNDUgKzIxNTMsNTMgQEAKICAgICAgICByZWR1Y3Rpb25zLiAgU2tpcCB0b2tlbnMgdW50aWwgd2UgY2FuIHByb2NlZWQuICAqLwogICAgIHdoaWxlIChZWUlEICh5eXRydWUpKQogICAgICAgewotCXl5U3ltYm9sIHl5dG9rZW47Ci0JaWYgKHl5Y2hhciA9PSBZWUVPRikKLQkgIHl5RmFpbCAoeXlzdGFja3BdW11iNF9scHVyZV9hcmdzWywgTlVMTCk7Ci0JaWYgKHl5Y2hhciAhPSBZWUVNUFRZKQotCSAge11iNF9sb2NhdGlvbnNfaWYoW1sKLQkgICAgLyogV2UgdGhyb3cgYXdheSB0aGUgbG9va2FoZWFkLCBidXQgdGhlIGVycm9yIHJhbmdlCi0JICAgICAgIG9mIHRoZSBzaGlmdGVkIGVycm9yIHRva2VuIG11c3QgdGFrZSBpdCBpbnRvIGFjY291bnQuICAqLwotCSAgICB5eUdMUlN0YXRlICp5eXMgPSB5eXN0YWNrcC0+eXl0b3BzLnl5c3RhdGVzWzBdOwotCSAgICB5eUdMUlN0YWNrSXRlbSB5eWVycm9yX3JhbmdlWzNdOwotCSAgICB5eWVycm9yX3JhbmdlWzFdLnl5c3RhdGUueXlsb2MgPSB5eXMtPnl5bG9jOwotCSAgICB5eWVycm9yX3JhbmdlWzJdLnl5c3RhdGUueXlsb2MgPSB5eWxsb2M7Ci0JICAgIFlZTExPQ19ERUZBVUxUICgoeXlzLT55eWxvYyksIHl5ZXJyb3JfcmFuZ2UsIDIpO11dKVsKLQkgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwotCSAgICB5eWRlc3RydWN0ICgiRXJyb3I6IGRpc2NhcmRpbmciLAotCQkJeXl0b2tlbiwgJnl5bHZhbF1iNF9sb2NhdGlvbnNfaWYoWywgJnl5bGxvY10pW11iNF91c2VyX2FyZ3NbKTsKLQkgIH0KLQlZWURQUklOVEYgKChzdGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpKTsKLQl5eWNoYXIgPSBZWUxFWDsKLQl5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7Ci0JWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwotCXl5aiA9IHl5cGFjdFt5eXN0YWNrcC0+eXl0b3BzLnl5c3RhdGVzWzBdLT55eWxyU3RhdGVdOwotCWlmICh5eWlzX3BhY3RfbmluZiAoeXlqKSkKLQkgIHJldHVybjsKLQl5eWogKz0geXl0b2tlbjsKLQlpZiAoeXlqIDwgMCB8fCBZWUxBU1QgPCB5eWogfHwgeXljaGVja1t5eWpdICE9IHl5dG9rZW4pCi0JICB7Ci0JICAgIGlmICh5eWRlZmFjdFt5eXN0YWNrcC0+eXl0b3BzLnl5c3RhdGVzWzBdLT55eWxyU3RhdGVdICE9IDApCi0JICAgICAgcmV0dXJuOwotCSAgfQotCWVsc2UgaWYgKHl5dGFibGVbeXlqXSAhPSAwICYmICEgeXlpc190YWJsZV9uaW5mICh5eXRhYmxlW3l5al0pKQotCSAgcmV0dXJuOworICAgICAgICB5eVN5bWJvbCB5eXRva2VuOworICAgICAgICBpZiAoeXljaGFyID09IFlZRU9GKQorICAgICAgICAgIHl5RmFpbCAoeXlzdGFja3BdW11iNF9scHVyZV9hcmdzWywgWVlfTlVMTCk7CisgICAgICAgIGlmICh5eWNoYXIgIT0gWVlFTVBUWSkKKyAgICAgICAgICB7XWI0X2xvY2F0aW9uc19pZihbWworICAgICAgICAgICAgLyogV2UgdGhyb3cgYXdheSB0aGUgbG9va2FoZWFkLCBidXQgdGhlIGVycm9yIHJhbmdlCisgICAgICAgICAgICAgICBvZiB0aGUgc2hpZnRlZCBlcnJvciB0b2tlbiBtdXN0IHRha2UgaXQgaW50byBhY2NvdW50LiAgKi8KKyAgICAgICAgICAgIHl5R0xSU3RhdGUgKnl5cyA9IHl5c3RhY2twLT55eXRvcHMueXlzdGF0ZXNbMF07CisgICAgICAgICAgICB5eUdMUlN0YWNrSXRlbSB5eWVycm9yX3JhbmdlWzNdOworICAgICAgICAgICAgeXllcnJvcl9yYW5nZVsxXS55eXN0YXRlLnl5bG9jID0geXlzLT55eWxvYzsKKyAgICAgICAgICAgIHl5ZXJyb3JfcmFuZ2VbMl0ueXlzdGF0ZS55eWxvYyA9IHl5bGxvYzsKKyAgICAgICAgICAgIFlZTExPQ19ERUZBVUxUICgoeXlzLT55eWxvYyksIHl5ZXJyb3JfcmFuZ2UsIDIpO11dKVsKKyAgICAgICAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKKyAgICAgICAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCisgICAgICAgICAgICAgICAgICAgICAgICB5eXRva2VuLCAmeXlsdmFsXWI0X2xvY3VzZXJfYXJncyhbJnl5bGxvY10pWyk7CisgICAgICAgICAgfQorICAgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpKTsKKyAgICAgICAgeXljaGFyID0gWVlMRVg7CisgICAgICAgIGlmICh5eWNoYXIgPD0gWVlFT0YpCisgICAgICAgICAgeworICAgICAgICAgICAgeXljaGFyID0geXl0b2tlbiA9IFlZRU9GOworICAgICAgICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiTm93IGF0IGVuZCBvZiBpbnB1dC5cbiIpKTsKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CisgICAgICAgICAgICBZWV9TWU1CT0xfUFJJTlQgKCJOZXh0IHRva2VuIGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CisgICAgICAgICAgfQorICAgICAgICB5eWogPSB5eXBhY3RbeXlzdGFja3AtPnl5dG9wcy55eXN0YXRlc1swXS0+eXlsclN0YXRlXTsKKyAgICAgICAgaWYgKHl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eWopKQorICAgICAgICAgIHJldHVybjsKKyAgICAgICAgeXlqICs9IHl5dG9rZW47CisgICAgICAgIGlmICh5eWogPCAwIHx8IFlZTEFTVCA8IHl5aiB8fCB5eWNoZWNrW3l5al0gIT0geXl0b2tlbikKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoeXlkZWZhY3RbeXlzdGFja3AtPnl5dG9wcy55eXN0YXRlc1swXS0+eXlsclN0YXRlXSAhPSAwKQorICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgfQorICAgICAgICBlbHNlIGlmICghIHl5dGFibGVfdmFsdWVfaXNfZXJyb3IgKHl5dGFibGVbeXlqXSkpCisgICAgICAgICAgcmV0dXJuOwogICAgICAgfQogCiAgIC8qIFJlZHVjZSB0byBvbmUgc3RhY2suICAqLwogICBmb3IgKHl5ayA9IDA7IHl5ayA8IHl5c3RhY2twLT55eXRvcHMueXlzaXplOyB5eWsgKz0gMSkKLSAgICBpZiAoeXlzdGFja3AtPnl5dG9wcy55eXN0YXRlc1t5eWtdICE9IE5VTEwpCisgICAgaWYgKHl5c3RhY2twLT55eXRvcHMueXlzdGF0ZXNbeXlrXSAhPSBZWV9OVUxMKQogICAgICAgYnJlYWs7CiAgIGlmICh5eWsgPj0geXlzdGFja3AtPnl5dG9wcy55eXNpemUpCi0gICAgeXlGYWlsICh5eXN0YWNrcF1bXWI0X2xwdXJlX2FyZ3NbLCBOVUxMKTsKKyAgICB5eUZhaWwgKHl5c3RhY2twXVtdYjRfbHB1cmVfYXJnc1ssIFlZX05VTEwpOwogICBmb3IgKHl5ayArPSAxOyB5eWsgPCB5eXN0YWNrcC0+eXl0b3BzLnl5c2l6ZTsgeXlrICs9IDEpCiAgICAgeXltYXJrU3RhY2tEZWxldGVkICh5eXN0YWNrcCwgeXlrKTsKICAgeXlyZW1vdmVEZWxldGVzICh5eXN0YWNrcCk7CkBAIC0yMjM2LDUyICsyMjA3LDU0IEBACiAKICAgLyogTm93IHBvcCBzdGFjayB1bnRpbCB3ZSBmaW5kIGEgc3RhdGUgdGhhdCBzaGlmdHMgdGhlIGVycm9yIHRva2VuLiAgKi8KICAgeXlzdGFja3AtPnl5ZXJyU3RhdGUgPSAzOwotICB3aGlsZSAoeXlzdGFja3AtPnl5dG9wcy55eXN0YXRlc1swXSAhPSBOVUxMKQorICB3aGlsZSAoeXlzdGFja3AtPnl5dG9wcy55eXN0YXRlc1swXSAhPSBZWV9OVUxMKQogICAgIHsKICAgICAgIHl5R0xSU3RhdGUgKnl5cyA9IHl5c3RhY2twLT55eXRvcHMueXlzdGF0ZXNbMF07CiAgICAgICB5eWogPSB5eXBhY3RbeXlzLT55eWxyU3RhdGVdOwotICAgICAgaWYgKCEgeXlpc19wYWN0X25pbmYgKHl5aikpCi0JewotCSAgeXlqICs9IFlZVEVSUk9SOwotCSAgaWYgKDAgPD0geXlqICYmIHl5aiA8PSBZWUxBU1QgJiYgeXljaGVja1t5eWpdID09IFlZVEVSUk9SCi0JICAgICAgJiYgeXlpc1NoaWZ0QWN0aW9uICh5eXRhYmxlW3l5al0pKQotCSAgICB7Ci0JICAgICAgLyogU2hpZnQgdGhlIGVycm9yIHRva2VuIGhhdmluZyBhZGp1c3RlZCBpdHMgbG9jYXRpb24uICAqLwotCSAgICAgIFlZTFRZUEUgeXllcnJsb2M7XWI0X2xvY2F0aW9uc19pZihbWwotCSAgICAgIHl5c3RhY2twLT55eWVycm9yX3JhbmdlWzJdLnl5c3RhdGUueXlsb2MgPSB5eWxsb2M7Ci0JICAgICAgWVlMTE9DX0RFRkFVTFQgKHl5ZXJybG9jLCAoeXlzdGFja3AtPnl5ZXJyb3JfcmFuZ2UpLCAyKTtdXSlbCi0JICAgICAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXN0b3NbeXl0YWJsZVt5eWpdXSwKLQkJCSAgICAgICAmeXlsdmFsLCAmeXllcnJsb2MpOwotCSAgICAgIHl5Z2xyU2hpZnQgKHl5c3RhY2twLCAwLCB5eXRhYmxlW3l5al0sCi0JCQkgIHl5cy0+eXlwb3NuLCAmeXlsdmFsLCAmeXllcnJsb2MpOwotCSAgICAgIHl5cyA9IHl5c3RhY2twLT55eXRvcHMueXlzdGF0ZXNbMF07Ci0JICAgICAgYnJlYWs7Ci0JICAgIH0KLQl9Ci1dYjRfbG9jYXRpb25zX2lmKFtbICAgICAgeXlzdGFja3AtPnl5ZXJyb3JfcmFuZ2VbMV0ueXlzdGF0ZS55eWxvYyA9IHl5cy0+eXlsb2M7XV0pWwotICAgICAgeXlkZXN0cm95R0xSU3RhdGUgKCJFcnJvcjogcG9wcGluZyIsIHl5c11iNF91c2VyX2FyZ3NbKTsKKyAgICAgIGlmICghIHl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eWopKQorICAgICAgICB7CisgICAgICAgICAgeXlqICs9IFlZVEVSUk9SOworICAgICAgICAgIGlmICgwIDw9IHl5aiAmJiB5eWogPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlqXSA9PSBZWVRFUlJPUgorICAgICAgICAgICAgICAmJiB5eWlzU2hpZnRBY3Rpb24gKHl5dGFibGVbeXlqXSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIFNoaWZ0IHRoZSBlcnJvciB0b2tlbi4gICovXWI0X2xvY2F0aW9uc19pZihbWworICAgICAgICAgICAgICAvKiBGaXJzdCBhZGp1c3QgaXRzIGxvY2F0aW9uLiovCisgICAgICAgICAgICAgIFlZTFRZUEUgeXllcnJsb2M7CisgICAgICAgICAgICAgIHl5c3RhY2twLT55eWVycm9yX3JhbmdlWzJdLnl5c3RhdGUueXlsb2MgPSB5eWxsb2M7CisgICAgICAgICAgICAgIFlZTExPQ19ERUZBVUxUICh5eWVycmxvYywgKHl5c3RhY2twLT55eWVycm9yX3JhbmdlKSwgMik7XV0pWworICAgICAgICAgICAgICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5c3Rvc1t5eXRhYmxlW3l5al1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ5eWx2YWwsICZ5eWVycmxvYyk7CisgICAgICAgICAgICAgIHl5Z2xyU2hpZnQgKHl5c3RhY2twLCAwLCB5eXRhYmxlW3l5al0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHl5cy0+eXlwb3NuLCAmeXlsdmFsXWI0X2xvY2F0aW9uc19pZihbLCAmeXllcnJsb2NdKVspOworICAgICAgICAgICAgICB5eXMgPSB5eXN0YWNrcC0+eXl0b3BzLnl5c3RhdGVzWzBdOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfV1iNF9sb2NhdGlvbnNfaWYoW1sKKyAgICAgIHl5c3RhY2twLT55eWVycm9yX3JhbmdlWzFdLnl5c3RhdGUueXlsb2MgPSB5eXMtPnl5bG9jO11dKVsKKyAgICAgIGlmICh5eXMtPnl5cHJlZCAhPSBZWV9OVUxMKQorICAgICAgICB5eWRlc3Ryb3lHTFJTdGF0ZSAoIkVycm9yOiBwb3BwaW5nIiwgeXlzXWI0X3VzZXJfYXJnc1spOwogICAgICAgeXlzdGFja3AtPnl5dG9wcy55eXN0YXRlc1swXSA9IHl5cy0+eXlwcmVkOwogICAgICAgeXlzdGFja3AtPnl5bmV4dEZyZWUgLT0gMTsKICAgICAgIHl5c3RhY2twLT55eXNwYWNlTGVmdCArPSAxOwogICAgIH0KLSAgaWYgKHl5c3RhY2twLT55eXRvcHMueXlzdGF0ZXNbMF0gPT0gTlVMTCkKLSAgICB5eUZhaWwgKHl5c3RhY2twXVtdYjRfbHB1cmVfYXJnc1ssIE5VTEwpOworICBpZiAoeXlzdGFja3AtPnl5dG9wcy55eXN0YXRlc1swXSA9PSBZWV9OVUxMKQorICAgIHl5RmFpbCAoeXlzdGFja3BdW11iNF9scHVyZV9hcmdzWywgWVlfTlVMTCk7CiB9CiAKLSNkZWZpbmUgWVlDSEsxKFlZRSkJCQkJCQkJICAgICBcCi0gIGRvIHsJCQkJCQkJCQkgICAgIFwKLSAgICBzd2l0Y2ggKFlZRSkgewkJCQkJCQkgICAgIFwKLSAgICBjYXNlIHl5b2s6CQkJCQkJCQkgICAgIFwKLSAgICAgIGJyZWFrOwkJCQkJCQkJICAgICBcCi0gICAgY2FzZSB5eWFib3J0OgkJCQkJCQkgICAgIFwKLSAgICAgIGdvdG8geXlhYm9ydGxhYjsJCQkJCQkJICAgICBcCi0gICAgY2FzZSB5eWFjY2VwdDoJCQkJCQkJICAgICBcCi0gICAgICBnb3RvIHl5YWNjZXB0bGFiOwkJCQkJCQkgICAgIFwKLSAgICBjYXNlIHl5ZXJyOgkJCQkJCQkJICAgICBcCi0gICAgICBnb3RvIHl5dXNlcl9lcnJvcjsJCQkJCQkgICAgIFwKLSAgICBkZWZhdWx0OgkJCQkJCQkJICAgICBcCi0gICAgICBnb3RvIHl5YnVnbGFiOwkJCQkJCQkgICAgIFwKLSAgICB9CQkJCQkJCQkJICAgICBcCisjZGVmaW5lIFlZQ0hLMShZWUUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN3aXRjaCAoWVlFKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSB5eW9rOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgeXlhYm9ydDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBnb3RvIHl5YWJvcnRsYWI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIHl5YWNjZXB0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgZ290byB5eWFjY2VwdGxhYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSB5eWVycjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGdvdG8geXl1c2VyX2Vycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBnb3RvIHl5YnVnbGFiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICB9IHdoaWxlIChZWUlEICgwKSkKIAogCkBAIC0yMjk5LDIyICsyMjcyLDEzIEBACiAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7CiAKICAgeXljaGFyID0gWVlFTVBUWTsKLSAgeXlsdmFsID0geXl2YWxfZGVmYXVsdDsKLV1iNF9sb2NhdGlvbnNfaWYoWwotI2lmIFlZTFRZUEVfSVNfVFJJVklBTAotICB5eWxsb2MuZmlyc3RfbGluZSAgID0geXlsbG9jLmxhc3RfbGluZSAgID0gMTsKLSAgeXlsbG9jLmZpcnN0X2NvbHVtbiA9IHl5bGxvYy5sYXN0X2NvbHVtbiA9IDA7Ci0jZW5kaWYKLV0pCi1tNF9pZmRlZihbYjRfaW5pdGlhbF9hY3Rpb25dLCBbCi1tNF9wdXNoZGVmKFtiNF9hdF9kb2xsYXJdLCAgICAgW3l5bGxvY10pZG5sCi1tNF9wdXNoZGVmKFtiNF9kb2xsYXJfZG9sbGFyXSwgW3l5bHZhbF0pZG5sCi0gIC8qIFVzZXIgaW5pdGlhbGl6YXRpb24gY29kZS4gICovCi0gIGI0X2luaXRpYWxfYWN0aW9uCi1tNF9wb3BkZWYoW2I0X2RvbGxhcl9kb2xsYXJdKWRubAotbTRfcG9wZGVmKFtiNF9hdF9kb2xsYXJdKWRubAotLyogTGluZSBfX2xpbmVfXyBvZiBnbHIuYy4gICovCi1iNF9zeW5jbGluZShbQG9saW5lQF0sIFtAb2ZpbGVAXSldKWRubAorICB5eWx2YWwgPSB5eXZhbF9kZWZhdWx0O11iNF9sb2NhdGlvbnNfaWYoWworICB5eWxsb2MgPSB5eWxvY19kZWZhdWx0O10pWworXW00X2lmZGVmKFtiNF9pbml0aWFsX2FjdGlvbl0sIFsKK2I0X2RvbGxhcl9wdXNoZGVmKFt5eWx2YWxdLCBbXSwgW3l5bGxvY10pZG5sCisvKiBVc2VyIGluaXRpYWxpemF0aW9uIGNvZGUuICAqLworYjRfdXNlcl9pbml0aWFsX2FjdGlvbgorYjRfZG9sbGFyX3BvcGRlZl0pW11kbmwKIFsKICAgaWYgKCEgeXlpbml0R0xSU3RhY2sgKHl5c3RhY2twLCBZWUlOSVRERVBUSCkpCiAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKQEAgLTIzMjUsMTQ3ICsyMjg5LDE1NCBAQAogICAgIGNhc2UgMjogZ290byB5eWV4aGF1c3RlZGxhYjsKICAgICBkZWZhdWx0OiBnb3RvIHl5YnVnbGFiOwogICAgIH0KLSAgeXlnbHJTaGlmdCAoJnl5c3RhY2ssIDAsIDAsIDAsICZ5eWx2YWwsICZ5eWxsb2MpOworICB5eWdsclNoaWZ0ICgmeXlzdGFjaywgMCwgMCwgMCwgJnl5bHZhbF1iNF9sb2NhdGlvbnNfaWYoWywgJnl5bGxvY10pWyk7CiAgIHl5cG9zbiA9IDA7CiAKICAgd2hpbGUgKFlZSUQgKHl5dHJ1ZSkpCiAgICAgewogICAgICAgLyogRm9yIGVmZmljaWVuY3ksIHdlIGhhdmUgdHdvIGxvb3BzLCB0aGUgZmlyc3Qgb2Ygd2hpY2ggaXMKLQkgc3BlY2lhbGl6ZWQgdG8gZGV0ZXJtaW5pc3RpYyBvcGVyYXRpb24gKHNpbmdsZSBzdGFjaywgbm8KLQkgcG90ZW50aWFsIGFtYmlndWl0eSkuICAqLworICAgICAgICAgc3BlY2lhbGl6ZWQgdG8gZGV0ZXJtaW5pc3RpYyBvcGVyYXRpb24gKHNpbmdsZSBzdGFjaywgbm8KKyAgICAgICAgIHBvdGVudGlhbCBhbWJpZ3VpdHkpLiAgKi8KICAgICAgIC8qIFN0YW5kYXJkIG1vZGUgKi8KICAgICAgIHdoaWxlIChZWUlEICh5eXRydWUpKQotCXsKLQkgIHl5UnVsZU51bSB5eXJ1bGU7Ci0JICBpbnQgeXlhY3Rpb247Ci0JICBjb25zdCBzaG9ydCBpbnQqIHl5Y29uZmxpY3RzOworICAgICAgICB7CisgICAgICAgICAgeXlSdWxlTnVtIHl5cnVsZTsKKyAgICAgICAgICBpbnQgeXlhY3Rpb247CisgICAgICAgICAgY29uc3Qgc2hvcnQgaW50KiB5eWNvbmZsaWN0czsKIAotCSAgeXlTdGF0ZU51bSB5eXN0YXRlID0geXlzdGFjay55eXRvcHMueXlzdGF0ZXNbMF0tPnl5bHJTdGF0ZTsKLQkgIFlZRFBSSU5URiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7Ci0JICBpZiAoeXlzdGF0ZSA9PSBZWUZJTkFMKQotCSAgICBnb3RvIHl5YWNjZXB0bGFiOwotCSAgaWYgKHl5aXNEZWZhdWx0ZWRTdGF0ZSAoeXlzdGF0ZSkpCi0JICAgIHsKLQkgICAgICB5eXJ1bGUgPSB5eWRlZmF1bHRBY3Rpb24gKHl5c3RhdGUpOwotCSAgICAgIGlmICh5eXJ1bGUgPT0gMCkKLQkJewotXWI0X2xvY2F0aW9uc19pZihbWwkJICB5eXN0YWNrLnl5ZXJyb3JfcmFuZ2VbMV0ueXlzdGF0ZS55eWxvYyA9IHl5bGxvYztdXSlbCi0JCSAgeXlyZXBvcnRTeW50YXhFcnJvciAoJnl5c3RhY2tdYjRfdXNlcl9hcmdzWyk7Ci0JCSAgZ290byB5eXVzZXJfZXJyb3I7Ci0JCX0KLQkgICAgICBZWUNISzEgKHl5Z2xyUmVkdWNlICgmeXlzdGFjaywgMCwgeXlydWxlLCB5eXRydWVdYjRfdXNlcl9hcmdzWykpOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIHsKLQkgICAgICB5eVN5bWJvbCB5eXRva2VuOwotCSAgICAgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKLQkJewotCQkgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOwotCQkgIHl5Y2hhciA9IFlZTEVYOwotCQkgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKLQkJICBZWV9TWU1CT0xfUFJJTlQgKCJOZXh0IHRva2VuIGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7Ci0JCX0KLQkgICAgICBlbHNlCi0JCXl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKLQkgICAgICB5eWdldExSQWN0aW9ucyAoeXlzdGF0ZSwgeXl0b2tlbiwgJnl5YWN0aW9uLCAmeXljb25mbGljdHMpOwotCSAgICAgIGlmICgqeXljb25mbGljdHMgIT0gMCkKLQkJYnJlYWs7Ci0JICAgICAgaWYgKHl5aXNTaGlmdEFjdGlvbiAoeXlhY3Rpb24pKQotCQl7Ci0JCSAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKLQkJICBpZiAoeXljaGFyICE9IFlZRU9GKQotCQkgICAgeXljaGFyID0gWVlFTVBUWTsKLQkJICB5eXBvc24gKz0gMTsKLQkJICB5eWdsclNoaWZ0ICgmeXlzdGFjaywgMCwgeXlhY3Rpb24sIHl5cG9zbiwgJnl5bHZhbCwgJnl5bGxvYyk7Ci0JCSAgaWYgKDAgPCB5eXN0YWNrLnl5ZXJyU3RhdGUpCi0JCSAgICB5eXN0YWNrLnl5ZXJyU3RhdGUgLT0gMTsKLQkJfQotCSAgICAgIGVsc2UgaWYgKHl5aXNFcnJvckFjdGlvbiAoeXlhY3Rpb24pKQotCQl7Ci1dYjRfbG9jYXRpb25zX2lmKFtbCQkgIHl5c3RhY2sueXllcnJvcl9yYW5nZVsxXS55eXN0YXRlLnl5bG9jID0geXlsbG9jO11dKVsKLQkJICB5eXJlcG9ydFN5bnRheEVycm9yICgmeXlzdGFja11iNF91c2VyX2FyZ3NbKTsKLQkJICBnb3RvIHl5dXNlcl9lcnJvcjsKLQkJfQotCSAgICAgIGVsc2UKLQkJWVlDSEsxICh5eWdsclJlZHVjZSAoJnl5c3RhY2ssIDAsIC15eWFjdGlvbiwgeXl0cnVlXWI0X3VzZXJfYXJnc1spKTsKLQkgICAgfQotCX0KKyAgICAgICAgICB5eVN0YXRlTnVtIHl5c3RhdGUgPSB5eXN0YWNrLnl5dG9wcy55eXN0YXRlc1swXS0+eXlsclN0YXRlOworICAgICAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CisgICAgICAgICAgaWYgKHl5c3RhdGUgPT0gWVlGSU5BTCkKKyAgICAgICAgICAgIGdvdG8geXlhY2NlcHRsYWI7CisgICAgICAgICAgaWYgKHl5aXNEZWZhdWx0ZWRTdGF0ZSAoeXlzdGF0ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHl5cnVsZSA9IHl5ZGVmYXVsdEFjdGlvbiAoeXlzdGF0ZSk7CisgICAgICAgICAgICAgIGlmICh5eXJ1bGUgPT0gMCkKKyAgICAgICAgICAgICAgICB7CitdYjRfbG9jYXRpb25zX2lmKFtbICAgICAgICAgICAgICAgeXlzdGFjay55eWVycm9yX3JhbmdlWzFdLnl5c3RhdGUueXlsb2MgPSB5eWxsb2M7XV0pWworICAgICAgICAgICAgICAgICAgeXlyZXBvcnRTeW50YXhFcnJvciAoJnl5c3RhY2tdYjRfdXNlcl9hcmdzWyk7CisgICAgICAgICAgICAgICAgICBnb3RvIHl5dXNlcl9lcnJvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIFlZQ0hLMSAoeXlnbHJSZWR1Y2UgKCZ5eXN0YWNrLCAwLCB5eXJ1bGUsIHl5dHJ1ZV1iNF91c2VyX2FyZ3NbKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB5eVN5bWJvbCB5eXRva2VuOworICAgICAgICAgICAgICBpZiAoeXljaGFyID09IFlZRU1QVFkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKSk7CisgICAgICAgICAgICAgICAgICB5eWNoYXIgPSBZWUxFWDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICB5eWNoYXIgPSB5eXRva2VuID0gWVlFT0Y7CisgICAgICAgICAgICAgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJOb3cgYXQgZW5kIG9mIGlucHV0LlxuIikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKKyAgICAgICAgICAgICAgICAgIFlZX1NZTUJPTF9QUklOVCAoIk5leHQgdG9rZW4gaXMiLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgeXlnZXRMUkFjdGlvbnMgKHl5c3RhdGUsIHl5dG9rZW4sICZ5eWFjdGlvbiwgJnl5Y29uZmxpY3RzKTsKKyAgICAgICAgICAgICAgaWYgKCp5eWNvbmZsaWN0cyAhPSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBpZiAoeXlpc1NoaWZ0QWN0aW9uICh5eWFjdGlvbikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKKyAgICAgICAgICAgICAgICAgIHl5Y2hhciA9IFlZRU1QVFk7CisgICAgICAgICAgICAgICAgICB5eXBvc24gKz0gMTsKKyAgICAgICAgICAgICAgICAgIHl5Z2xyU2hpZnQgKCZ5eXN0YWNrLCAwLCB5eWFjdGlvbiwgeXlwb3NuLCAmeXlsdmFsXWI0X2xvY2F0aW9uc19pZihbLCAmeXlsbG9jXSlbKTsKKyAgICAgICAgICAgICAgICAgIGlmICgwIDwgeXlzdGFjay55eWVyclN0YXRlKQorICAgICAgICAgICAgICAgICAgICB5eXN0YWNrLnl5ZXJyU3RhdGUgLT0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UgaWYgKHl5aXNFcnJvckFjdGlvbiAoeXlhY3Rpb24pKQorICAgICAgICAgICAgICAgIHsKK11iNF9sb2NhdGlvbnNfaWYoW1sgICAgICAgICAgICAgICB5eXN0YWNrLnl5ZXJyb3JfcmFuZ2VbMV0ueXlzdGF0ZS55eWxvYyA9IHl5bGxvYztdXSlbCisgICAgICAgICAgICAgICAgICB5eXJlcG9ydFN5bnRheEVycm9yICgmeXlzdGFja11iNF91c2VyX2FyZ3NbKTsKKyAgICAgICAgICAgICAgICAgIGdvdG8geXl1c2VyX2Vycm9yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFlZQ0hLMSAoeXlnbHJSZWR1Y2UgKCZ5eXN0YWNrLCAwLCAteXlhY3Rpb24sIHl5dHJ1ZV1iNF91c2VyX2FyZ3NbKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAogICAgICAgd2hpbGUgKFlZSUQgKHl5dHJ1ZSkpCi0JewotCSAgeXlTeW1ib2wgeXl0b2tlbl90b19zaGlmdDsKLQkgIHNpemVfdCB5eXM7CisgICAgICAgIHsKKyAgICAgICAgICB5eVN5bWJvbCB5eXRva2VuX3RvX3NoaWZ0OworICAgICAgICAgIHNpemVfdCB5eXM7CiAKLQkgIGZvciAoeXlzID0gMDsgeXlzIDwgeXlzdGFjay55eXRvcHMueXlzaXplOyB5eXMgKz0gMSkKLQkgICAgeXlzdGFja3AtPnl5dG9wcy55eWxvb2thaGVhZE5lZWRzW3l5c10gPSB5eWNoYXIgIT0gWVlFTVBUWTsKKyAgICAgICAgICBmb3IgKHl5cyA9IDA7IHl5cyA8IHl5c3RhY2sueXl0b3BzLnl5c2l6ZTsgeXlzICs9IDEpCisgICAgICAgICAgICB5eXN0YWNrcC0+eXl0b3BzLnl5bG9va2FoZWFkTmVlZHNbeXlzXSA9IHl5Y2hhciAhPSBZWUVNUFRZOwogCi0JICAvKiB5eXByb2Nlc3NPbmVTdGFjayByZXR1cm5zIG9uZSBvZiB0aHJlZSB0aGluZ3M6CisgICAgICAgICAgLyogeXlwcm9jZXNzT25lU3RhY2sgcmV0dXJucyBvbmUgb2YgdGhyZWUgdGhpbmdzOgogCi0JICAgICAgLSBBbiBlcnJvciBmbGFnLiAgSWYgdGhlIGNhbGxlciBpcyB5eXByb2Nlc3NPbmVTdGFjaywgaXQKLQkJaW1tZWRpYXRlbHkgcmV0dXJucyBhcyB3ZWxsLiAgV2hlbiB0aGUgY2FsbGVyIGlzIGZpbmFsbHkKLQkJeXlwYXJzZSwgaXQganVtcHMgdG8gYW4gZXJyb3IgbGFiZWwgdmlhIFlZQ0hLMS4KKyAgICAgICAgICAgICAgLSBBbiBlcnJvciBmbGFnLiAgSWYgdGhlIGNhbGxlciBpcyB5eXByb2Nlc3NPbmVTdGFjaywgaXQKKyAgICAgICAgICAgICAgICBpbW1lZGlhdGVseSByZXR1cm5zIGFzIHdlbGwuICBXaGVuIHRoZSBjYWxsZXIgaXMgZmluYWxseQorICAgICAgICAgICAgICAgIHl5cGFyc2UsIGl0IGp1bXBzIHRvIGFuIGVycm9yIGxhYmVsIHZpYSBZWUNISzEuCiAKLQkgICAgICAtIHl5b2ssIGJ1dCB5eXByb2Nlc3NPbmVTdGFjayBoYXMgaW52b2tlZCB5eW1hcmtTdGFja0RlbGV0ZWQKLQkJKCZ5eXN0YWNrLCB5eXMpLCB3aGljaCBzZXRzIHRoZSB0b3Agc3RhdGUgb2YgeXlzIHRvIE5VTEwuICBUaHVzLAotCQl5eXBhcnNlJ3MgZm9sbG93aW5nIGludm9jYXRpb24gb2YgeXlyZW1vdmVEZWxldGVzIHdpbGwgcmVtb3ZlCi0JCXRoZSBzdGFjay4KKyAgICAgICAgICAgICAgLSB5eW9rLCBidXQgeXlwcm9jZXNzT25lU3RhY2sgaGFzIGludm9rZWQgeXltYXJrU3RhY2tEZWxldGVkCisgICAgICAgICAgICAgICAgKCZ5eXN0YWNrLCB5eXMpLCB3aGljaCBzZXRzIHRoZSB0b3Agc3RhdGUgb2YgeXlzIHRvIE5VTEwuICBUaHVzLAorICAgICAgICAgICAgICAgIHl5cGFyc2UncyBmb2xsb3dpbmcgaW52b2NhdGlvbiBvZiB5eXJlbW92ZURlbGV0ZXMgd2lsbCByZW1vdmUKKyAgICAgICAgICAgICAgICB0aGUgc3RhY2suCiAKLQkgICAgICAtIHl5b2ssIHdoZW4gcmVhZHkgdG8gc2hpZnQgYSB0b2tlbi4KKyAgICAgICAgICAgICAgLSB5eW9rLCB3aGVuIHJlYWR5IHRvIHNoaWZ0IGEgdG9rZW4uCiAKLQkgICAgIEV4Y2VwdCBpbiB0aGUgZmlyc3QgY2FzZSwgeXlwYXJzZSB3aWxsIGludm9rZSB5eXJlbW92ZURlbGV0ZXMgYW5kCi0JICAgICB0aGVuIHNoaWZ0IHRoZSBuZXh0IHRva2VuIG9udG8gYWxsIHJlbWFpbmluZyBzdGFja3MuICBUaGlzCi0JICAgICBzeW5jaHJvbml6YXRpb24gb2YgdGhlIHNoaWZ0ICh0aGF0IGlzLCBhZnRlciBhbGwgcHJlY2VkaW5nCi0JICAgICByZWR1Y3Rpb25zIG9uIGFsbCBzdGFja3MpIGhlbHBzIHByZXZlbnQgZG91YmxlIGRlc3RydWN0b3IgY2FsbHMKLQkgICAgIG9uIHl5bHZhbCBpbiB0aGUgZXZlbnQgb2YgbWVtb3J5IGV4aGF1c3Rpb24uICAqLworICAgICAgICAgICAgIEV4Y2VwdCBpbiB0aGUgZmlyc3QgY2FzZSwgeXlwYXJzZSB3aWxsIGludm9rZSB5eXJlbW92ZURlbGV0ZXMgYW5kCisgICAgICAgICAgICAgdGhlbiBzaGlmdCB0aGUgbmV4dCB0b2tlbiBvbnRvIGFsbCByZW1haW5pbmcgc3RhY2tzLiAgVGhpcworICAgICAgICAgICAgIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgc2hpZnQgKHRoYXQgaXMsIGFmdGVyIGFsbCBwcmVjZWRpbmcKKyAgICAgICAgICAgICByZWR1Y3Rpb25zIG9uIGFsbCBzdGFja3MpIGhlbHBzIHByZXZlbnQgZG91YmxlIGRlc3RydWN0b3IgY2FsbHMKKyAgICAgICAgICAgICBvbiB5eWx2YWwgaW4gdGhlIGV2ZW50IG9mIG1lbW9yeSBleGhhdXN0aW9uLiAgKi8KIAotCSAgZm9yICh5eXMgPSAwOyB5eXMgPCB5eXN0YWNrLnl5dG9wcy55eXNpemU7IHl5cyArPSAxKQotCSAgICBZWUNISzEgKHl5cHJvY2Vzc09uZVN0YWNrICgmeXlzdGFjaywgeXlzLCB5eXBvc25dYjRfbHB1cmVfYXJnc1spKTsKLQkgIHl5cmVtb3ZlRGVsZXRlcyAoJnl5c3RhY2spOwotCSAgaWYgKHl5c3RhY2sueXl0b3BzLnl5c2l6ZSA9PSAwKQotCSAgICB7Ci0JICAgICAgeXl1bmRlbGV0ZUxhc3RTdGFjayAoJnl5c3RhY2spOwotCSAgICAgIGlmICh5eXN0YWNrLnl5dG9wcy55eXNpemUgPT0gMCkKLQkJeXlGYWlsICgmeXlzdGFja11bXWI0X2xwdXJlX2FyZ3NbLCBZWV8oInN5bnRheCBlcnJvciIpKTsKLQkgICAgICBZWUNISzEgKHl5cmVzb2x2ZVN0YWNrICgmeXlzdGFja11iNF91c2VyX2FyZ3NbKSk7Ci0JICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmV0dXJuaW5nIHRvIGRldGVybWluaXN0aWMgb3BlcmF0aW9uLlxuIikpOwotXWI0X2xvY2F0aW9uc19pZihbWwkgICAgICB5eXN0YWNrLnl5ZXJyb3JfcmFuZ2VbMV0ueXlzdGF0ZS55eWxvYyA9IHl5bGxvYztdXSlbCi0JICAgICAgeXlyZXBvcnRTeW50YXhFcnJvciAoJnl5c3RhY2tdYjRfdXNlcl9hcmdzWyk7Ci0JICAgICAgZ290byB5eXVzZXJfZXJyb3I7Ci0JICAgIH0KKyAgICAgICAgICBmb3IgKHl5cyA9IDA7IHl5cyA8IHl5c3RhY2sueXl0b3BzLnl5c2l6ZTsgeXlzICs9IDEpCisgICAgICAgICAgICBZWUNISzEgKHl5cHJvY2Vzc09uZVN0YWNrICgmeXlzdGFjaywgeXlzLCB5eXBvc25dYjRfbHB1cmVfYXJnc1spKTsKKyAgICAgICAgICB5eXJlbW92ZURlbGV0ZXMgKCZ5eXN0YWNrKTsKKyAgICAgICAgICBpZiAoeXlzdGFjay55eXRvcHMueXlzaXplID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHl5dW5kZWxldGVMYXN0U3RhY2sgKCZ5eXN0YWNrKTsKKyAgICAgICAgICAgICAgaWYgKHl5c3RhY2sueXl0b3BzLnl5c2l6ZSA9PSAwKQorICAgICAgICAgICAgICAgIHl5RmFpbCAoJnl5c3RhY2tdW11iNF9scHVyZV9hcmdzWywgWVlfKCJzeW50YXggZXJyb3IiKSk7CisgICAgICAgICAgICAgIFlZQ0hLMSAoeXlyZXNvbHZlU3RhY2sgKCZ5eXN0YWNrXWI0X3VzZXJfYXJnc1spKTsKKyAgICAgICAgICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmV0dXJuaW5nIHRvIGRldGVybWluaXN0aWMgb3BlcmF0aW9uLlxuIikpOworXWI0X2xvY2F0aW9uc19pZihbWyAgICAgICAgICAgeXlzdGFjay55eWVycm9yX3JhbmdlWzFdLnl5c3RhdGUueXlsb2MgPSB5eWxsb2M7XV0pWworICAgICAgICAgICAgICB5eXJlcG9ydFN5bnRheEVycm9yICgmeXlzdGFja11iNF91c2VyX2FyZ3NbKTsKKyAgICAgICAgICAgICAgZ290byB5eXVzZXJfZXJyb3I7CisgICAgICAgICAgICB9CiAKLQkgIC8qIElmIGFueSB5eWdsclNoaWZ0IGNhbGwgZmFpbHMsIGl0IHdpbGwgZmFpbCBhZnRlciBzaGlmdGluZy4gIFRodXMsCi0JICAgICBhIGNvcHkgb2YgeXlsdmFsIHdpbGwgYWxyZWFkeSBiZSBvbiBzdGFjayAwIGluIHRoZSBldmVudCBvZiBhCi0JICAgICBmYWlsdXJlIGluIHRoZSBmb2xsb3dpbmcgbG9vcC4gIFRodXMsIHl5Y2hhciBpcyBzZXQgdG8gWVlFTVBUWQotCSAgICAgYmVmb3JlIHRoZSBsb29wIHRvIG1ha2Ugc3VyZSB0aGUgdXNlciBkZXN0cnVjdG9yIGZvciB5eWx2YWwgaXNuJ3QKLQkgICAgIGNhbGxlZCB0d2ljZS4gICovCi0JICB5eXRva2VuX3RvX3NoaWZ0ID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7Ci0JICB5eWNoYXIgPSBZWUVNUFRZOwotCSAgeXlwb3NuICs9IDE7Ci0JICBmb3IgKHl5cyA9IDA7IHl5cyA8IHl5c3RhY2sueXl0b3BzLnl5c2l6ZTsgeXlzICs9IDEpCi0JICAgIHsKLQkgICAgICBpbnQgeXlhY3Rpb247Ci0JICAgICAgY29uc3Qgc2hvcnQgaW50KiB5eWNvbmZsaWN0czsKLQkgICAgICB5eVN0YXRlTnVtIHl5c3RhdGUgPSB5eXN0YWNrLnl5dG9wcy55eXN0YXRlc1t5eXNdLT55eWxyU3RhdGU7Ci0JICAgICAgeXlnZXRMUkFjdGlvbnMgKHl5c3RhdGUsIHl5dG9rZW5fdG9fc2hpZnQsICZ5eWFjdGlvbiwKLQkJCSAgICAgICZ5eWNvbmZsaWN0cyk7Ci0JICAgICAgLyogTm90ZSB0aGF0IHl5Y29uZmxpY3RzIHdlcmUgaGFuZGxlZCBieSB5eXByb2Nlc3NPbmVTdGFjay4gICovCi0JICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiT24gc3RhY2sgJWx1LCAiLCAodW5zaWduZWQgbG9uZyBpbnQpIHl5cykpOwotCSAgICAgIFlZX1NZTUJPTF9QUklOVCAoInNoaWZ0aW5nIiwgeXl0b2tlbl90b19zaGlmdCwgJnl5bHZhbCwgJnl5bGxvYyk7Ci0JICAgICAgeXlnbHJTaGlmdCAoJnl5c3RhY2ssIHl5cywgeXlhY3Rpb24sIHl5cG9zbiwKLQkJCSAgJnl5bHZhbCwgJnl5bGxvYyk7Ci0JICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgJWx1IG5vdyBpbiBzdGF0ZSAjJWRcbiIsCi0JCQkgICh1bnNpZ25lZCBsb25nIGludCkgeXlzLAotCQkJICB5eXN0YWNrLnl5dG9wcy55eXN0YXRlc1t5eXNdLT55eWxyU3RhdGUpKTsKLQkgICAgfQorICAgICAgICAgIC8qIElmIGFueSB5eWdsclNoaWZ0IGNhbGwgZmFpbHMsIGl0IHdpbGwgZmFpbCBhZnRlciBzaGlmdGluZy4gIFRodXMsCisgICAgICAgICAgICAgYSBjb3B5IG9mIHl5bHZhbCB3aWxsIGFscmVhZHkgYmUgb24gc3RhY2sgMCBpbiB0aGUgZXZlbnQgb2YgYQorICAgICAgICAgICAgIGZhaWx1cmUgaW4gdGhlIGZvbGxvd2luZyBsb29wLiAgVGh1cywgeXljaGFyIGlzIHNldCB0byBZWUVNUFRZCisgICAgICAgICAgICAgYmVmb3JlIHRoZSBsb29wIHRvIG1ha2Ugc3VyZSB0aGUgdXNlciBkZXN0cnVjdG9yIGZvciB5eWx2YWwgaXNuJ3QKKyAgICAgICAgICAgICBjYWxsZWQgdHdpY2UuICAqLworICAgICAgICAgIHl5dG9rZW5fdG9fc2hpZnQgPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKKyAgICAgICAgICB5eWNoYXIgPSBZWUVNUFRZOworICAgICAgICAgIHl5cG9zbiArPSAxOworICAgICAgICAgIGZvciAoeXlzID0gMDsgeXlzIDwgeXlzdGFjay55eXRvcHMueXlzaXplOyB5eXMgKz0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaW50IHl5YWN0aW9uOworICAgICAgICAgICAgICBjb25zdCBzaG9ydCBpbnQqIHl5Y29uZmxpY3RzOworICAgICAgICAgICAgICB5eVN0YXRlTnVtIHl5c3RhdGUgPSB5eXN0YWNrLnl5dG9wcy55eXN0YXRlc1t5eXNdLT55eWxyU3RhdGU7CisgICAgICAgICAgICAgIHl5Z2V0TFJBY3Rpb25zICh5eXN0YXRlLCB5eXRva2VuX3RvX3NoaWZ0LCAmeXlhY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeXljb25mbGljdHMpOworICAgICAgICAgICAgICAvKiBOb3RlIHRoYXQgeXljb25mbGljdHMgd2VyZSBoYW5kbGVkIGJ5IHl5cHJvY2Vzc09uZVN0YWNrLiAgKi8KKyAgICAgICAgICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiT24gc3RhY2sgJWx1LCAiLCAodW5zaWduZWQgbG9uZyBpbnQpIHl5cykpOworICAgICAgICAgICAgICBZWV9TWU1CT0xfUFJJTlQgKCJzaGlmdGluZyIsIHl5dG9rZW5fdG9fc2hpZnQsICZ5eWx2YWwsICZ5eWxsb2MpOworICAgICAgICAgICAgICB5eWdsclNoaWZ0ICgmeXlzdGFjaywgeXlzLCB5eWFjdGlvbiwgeXlwb3NuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmeXlsdmFsXWI0X2xvY2F0aW9uc19pZihbLCAmeXlsbG9jXSlbKTsKKyAgICAgICAgICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgJWx1IG5vdyBpbiBzdGF0ZSAjJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGludCkgeXlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICB5eXN0YWNrLnl5dG9wcy55eXN0YXRlc1t5eXNdLT55eWxyU3RhdGUpKTsKKyAgICAgICAgICAgIH0KIAotCSAgaWYgKHl5c3RhY2sueXl0b3BzLnl5c2l6ZSA9PSAxKQotCSAgICB7Ci0JICAgICAgWVlDSEsxICh5eXJlc29sdmVTdGFjayAoJnl5c3RhY2tdYjRfdXNlcl9hcmdzWykpOwotCSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJldHVybmluZyB0byBkZXRlcm1pbmlzdGljIG9wZXJhdGlvbi5cbiIpKTsKLQkgICAgICB5eWNvbXByZXNzU3RhY2sgKCZ5eXN0YWNrKTsKLQkgICAgICBicmVhazsKLQkgICAgfQotCX0KKyAgICAgICAgICBpZiAoeXlzdGFjay55eXRvcHMueXlzaXplID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFlZQ0hLMSAoeXlyZXNvbHZlU3RhY2sgKCZ5eXN0YWNrXWI0X3VzZXJfYXJnc1spKTsKKyAgICAgICAgICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmV0dXJuaW5nIHRvIGRldGVybWluaXN0aWMgb3BlcmF0aW9uLlxuIikpOworICAgICAgICAgICAgICB5eWNvbXByZXNzU3RhY2sgKCZ5eXN0YWNrKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgIGNvbnRpbnVlOwogICAgIHl5dXNlcl9lcnJvcjoKICAgICAgIHl5cmVjb3ZlclN5bnRheEVycm9yICgmeXlzdGFja11iNF91c2VyX2FyZ3NbKTsKQEAgLTI0OTAsMTAgKzI0NjEsOSBAQAogICBnb3RvIHl5cmV0dXJuOwogCiAgeXlyZXR1cm46Ci0gIGlmICh5eWNoYXIgIT0gWVlFT0YgJiYgeXljaGFyICE9IFlZRU1QVFkpCisgIGlmICh5eWNoYXIgIT0gWVlFTVBUWSkKICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQiLAotCQlZWVRSQU5TTEFURSAoeXljaGFyKSwKLQkJJnl5bHZhbF1iNF9sb2NhdGlvbnNfaWYoWywgJnl5bGxvY10pW11iNF91c2VyX2FyZ3NbKTsKKyAgICAgICAgICAgICAgICBZWVRSQU5TTEFURSAoeXljaGFyKSwgJnl5bHZhbF1iNF9sb2N1c2VyX2FyZ3MoWyZ5eWxsb2NdKVspOwogCiAgIC8qIElmIHRoZSBzdGFjayBpcyB3ZWxsLWZvcm1lZCwgcG9wIHRoZSBzdGFjayB1bnRpbCBpdCBpcyBlbXB0eSwKICAgICAgZGVzdHJveWluZyBpdHMgZW50cmllcyBhcyB3ZSBnby4gIEJ1dCBmcmVlIHRoZSBzdGFjayByZWdhcmRsZXNzCkBAIC0yNTAyLDI0ICsyNDcyLDI1IEBACiAgICAgewogICAgICAgeXlHTFJTdGF0ZSoqIHl5c3RhdGVzID0geXlzdGFjay55eXRvcHMueXlzdGF0ZXM7CiAgICAgICBpZiAoeXlzdGF0ZXMpCi0JewotCSAgc2l6ZV90IHl5c2l6ZSA9IHl5c3RhY2sueXl0b3BzLnl5c2l6ZTsKLQkgIHNpemVfdCB5eWs7Ci0JICBmb3IgKHl5ayA9IDA7IHl5ayA8IHl5c2l6ZTsgeXlrICs9IDEpCi0JICAgIGlmICh5eXN0YXRlc1t5eWtdKQotCSAgICAgIHsKLQkJd2hpbGUgKHl5c3RhdGVzW3l5a10pCi0JCSAgewotCQkgICAgeXlHTFJTdGF0ZSAqeXlzID0geXlzdGF0ZXNbeXlrXTsKLV1iNF9sb2NhdGlvbnNfaWYoW1sJCSAgICB5eXN0YWNrLnl5ZXJyb3JfcmFuZ2VbMV0ueXlzdGF0ZS55eWxvYyA9IHl5cy0+eXlsb2M7XV0KLSlbCQkgICAgeXlkZXN0cm95R0xSU3RhdGUgKCJDbGVhbnVwOiBwb3BwaW5nIiwgeXlzXWI0X3VzZXJfYXJnc1spOwotCQkgICAgeXlzdGF0ZXNbeXlrXSA9IHl5cy0+eXlwcmVkOwotCQkgICAgeXlzdGFjay55eW5leHRGcmVlIC09IDE7Ci0JCSAgICB5eXN0YWNrLnl5c3BhY2VMZWZ0ICs9IDE7Ci0JCSAgfQotCQlicmVhazsKLQkgICAgICB9Ci0JfQorICAgICAgICB7CisgICAgICAgICAgc2l6ZV90IHl5c2l6ZSA9IHl5c3RhY2sueXl0b3BzLnl5c2l6ZTsKKyAgICAgICAgICBzaXplX3QgeXlrOworICAgICAgICAgIGZvciAoeXlrID0gMDsgeXlrIDwgeXlzaXplOyB5eWsgKz0gMSkKKyAgICAgICAgICAgIGlmICh5eXN0YXRlc1t5eWtdKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2hpbGUgKHl5c3RhdGVzW3l5a10pCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHl5R0xSU3RhdGUgKnl5cyA9IHl5c3RhdGVzW3l5a107CitdYjRfbG9jYXRpb25zX2lmKFtbICAgICAgICAgICAgICAgICB5eXN0YWNrLnl5ZXJyb3JfcmFuZ2VbMV0ueXlzdGF0ZS55eWxvYyA9IHl5cy0+eXlsb2M7XV0KKylbICAgICAgICAgICAgICAgICAgaWYgKHl5cy0+eXlwcmVkICE9IFlZX05VTEwpCisgICAgICAgICAgICAgICAgICAgICAgeXlkZXN0cm95R0xSU3RhdGUgKCJDbGVhbnVwOiBwb3BwaW5nIiwgeXlzXWI0X3VzZXJfYXJnc1spOworICAgICAgICAgICAgICAgICAgICB5eXN0YXRlc1t5eWtdID0geXlzLT55eXByZWQ7CisgICAgICAgICAgICAgICAgICAgIHl5c3RhY2sueXluZXh0RnJlZSAtPSAxOworICAgICAgICAgICAgICAgICAgICB5eXN0YWNrLnl5c3BhY2VMZWZ0ICs9IDE7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgeXlmcmVlR0xSU3RhY2sgKCZ5eXN0YWNrKTsKICAgICB9CiAKQEAgLTI1MjgsNyArMjQ5OSw3IEBACiB9CiAKIC8qIERFQlVHR0lORyBPTkxZICovCi0jaWZkZWYgWVlERUJVRworI2lmIF1iNF9hcGlfUFJFRklYW0RFQlVHCiBzdGF0aWMgdm9pZCB5eXBzdGFjayAoeXlHTFJTdGFjayogeXlzdGFja3AsIHNpemVfdCB5eWspCiAgIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7CiBzdGF0aWMgdm9pZCB5eXBkdW1wc3RhY2sgKHl5R0xSU3RhY2sqIHl5c3RhY2twKSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOwpAQCAtMjUzOSwxOSArMjUxMCwyMCBAQAogICBpZiAoeXlzLT55eXByZWQpCiAgICAgewogICAgICAgeXlfeXlwc3RhY2sgKHl5cy0+eXlwcmVkKTsKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAtPiAiKTsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiIC0+ICIpOwogICAgIH0KLSAgZnByaW50ZiAoc3RkZXJyLCAiJWRAQCVsdSIsIHl5cy0+eXlsclN0YXRlLCAodW5zaWduZWQgbG9uZyBpbnQpIHl5cy0+eXlwb3NuKTsKKyAgWVlGUFJJTlRGIChzdGRlcnIsICIlZEBAJWx1IiwgeXlzLT55eWxyU3RhdGUsCisgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXMtPnl5cG9zbik7CiB9CiAKIHN0YXRpYyB2b2lkCiB5eXBzdGF0ZXMgKHl5R0xSU3RhdGUqIHl5c3QpCiB7Ci0gIGlmICh5eXN0ID09IE5VTEwpCi0gICAgZnByaW50ZiAoc3RkZXJyLCAiPG51bGw+Iik7CisgIGlmICh5eXN0ID09IFlZX05VTEwpCisgICAgWVlGUFJJTlRGIChzdGRlcnIsICI8bnVsbD4iKTsKICAgZWxzZQogICAgIHl5X3l5cHN0YWNrICh5eXN0KTsKLSAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKKyAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjU2MCw4ICsyNTMyLDggQEAKICAgeXlwc3RhdGVzICh5eXN0YWNrcC0+eXl0b3BzLnl5c3RhdGVzW3l5a10pOwogfQogCi0jZGVmaW5lIFlZSU5ERVgoWVlYKQkJCQkJCQkgICAgIFwKLSAgICAoKFlZWCkgPT0gTlVMTCA/IC0xIDogKHl5R0xSU3RhY2tJdGVtKikgKFlZWCkgLSB5eXN0YWNrcC0+eXlpdGVtcykKKyNkZWZpbmUgWVlJTkRFWChZWVgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoWVlYKSA9PSBZWV9OVUxMID8gLTEgOiAoeXlHTFJTdGFja0l0ZW0qKSAoWVlYKSAtIHl5c3RhY2twLT55eWl0ZW1zKQogCiAKIHN0YXRpYyB2b2lkCkBAIC0yNTcxLDQ2ICsyNTQzLDQ3IEBACiAgIHNpemVfdCB5eWk7CiAgIGZvciAoeXlwID0geXlzdGFja3AtPnl5aXRlbXM7IHl5cCA8IHl5c3RhY2twLT55eW5leHRGcmVlOyB5eXAgKz0gMSkKICAgICB7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICIlM2x1LiAiLCAodW5zaWduZWQgbG9uZyBpbnQpICh5eXAgLSB5eXN0YWNrcC0+eXlpdGVtcykpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlM2x1LiAiLAorICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyBpbnQpICh5eXAgLSB5eXN0YWNrcC0+eXlpdGVtcykpOwogICAgICAgaWYgKCooeXlib29sICopIHl5cCkKLQl7Ci0JICBmcHJpbnRmIChzdGRlcnIsICJSZXM6ICVkLCBMUiBTdGF0ZTogJWQsIHBvc246ICVsdSwgcHJlZDogJWxkIiwKLQkJICAgeXlwLT55eXN0YXRlLnl5cmVzb2x2ZWQsIHl5cC0+eXlzdGF0ZS55eWxyU3RhdGUsCi0JCSAgICh1bnNpZ25lZCBsb25nIGludCkgeXlwLT55eXN0YXRlLnl5cG9zbiwKLQkJICAgKGxvbmcgaW50KSBZWUlOREVYICh5eXAtPnl5c3RhdGUueXlwcmVkKSk7Ci0JICBpZiAoISB5eXAtPnl5c3RhdGUueXlyZXNvbHZlZCkKLQkgICAgZnByaW50ZiAoc3RkZXJyLCAiLCBmaXJzdFZhbDogJWxkIiwKLQkJICAgICAobG9uZyBpbnQpIFlZSU5ERVggKHl5cC0+eXlzdGF0ZS55eXNlbWFudGljcy55eWZpcnN0VmFsKSk7Ci0JfQorICAgICAgICB7CisgICAgICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJSZXM6ICVkLCBMUiBTdGF0ZTogJWQsIHBvc246ICVsdSwgcHJlZDogJWxkIiwKKyAgICAgICAgICAgICAgICAgICAgIHl5cC0+eXlzdGF0ZS55eXJlc29sdmVkLCB5eXAtPnl5c3RhdGUueXlsclN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXAtPnl5c3RhdGUueXlwb3NuLAorICAgICAgICAgICAgICAgICAgICAgKGxvbmcgaW50KSBZWUlOREVYICh5eXAtPnl5c3RhdGUueXlwcmVkKSk7CisgICAgICAgICAgaWYgKCEgeXlwLT55eXN0YXRlLnl5cmVzb2x2ZWQpCisgICAgICAgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiwgZmlyc3RWYWw6ICVsZCIsCisgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGludCkgWVlJTkRFWCAoeXlwLT55eXN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAueXlzZW1hbnRpY3MueXlmaXJzdFZhbCkpOworICAgICAgICB9CiAgICAgICBlbHNlCi0JewotCSAgZnByaW50ZiAoc3RkZXJyLCAiT3B0aW9uLiBydWxlOiAlZCwgc3RhdGU6ICVsZCwgbmV4dDogJWxkIiwKLQkJICAgeXlwLT55eW9wdGlvbi55eXJ1bGUgLSAxLAotCQkgICAobG9uZyBpbnQpIFlZSU5ERVggKHl5cC0+eXlvcHRpb24ueXlzdGF0ZSksCi0JCSAgIChsb25nIGludCkgWVlJTkRFWCAoeXlwLT55eW9wdGlvbi55eW5leHQpKTsKLQl9Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworICAgICAgICB7CisgICAgICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJPcHRpb24uIHJ1bGU6ICVkLCBzdGF0ZTogJWxkLCBuZXh0OiAlbGQiLAorICAgICAgICAgICAgICAgICAgICAgeXlwLT55eW9wdGlvbi55eXJ1bGUgLSAxLAorICAgICAgICAgICAgICAgICAgICAgKGxvbmcgaW50KSBZWUlOREVYICh5eXAtPnl5b3B0aW9uLnl5c3RhdGUpLAorICAgICAgICAgICAgICAgICAgICAgKGxvbmcgaW50KSBZWUlOREVYICh5eXAtPnl5b3B0aW9uLnl5bmV4dCkpOworICAgICAgICB9CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CiAgICAgfQotICBmcHJpbnRmIChzdGRlcnIsICJUb3BzOiIpOworICBZWUZQUklOVEYgKHN0ZGVyciwgIlRvcHM6Iik7CiAgIGZvciAoeXlpID0gMDsgeXlpIDwgeXlzdGFja3AtPnl5dG9wcy55eXNpemU7IHl5aSArPSAxKQotICAgIGZwcmludGYgKHN0ZGVyciwgIiVsdTogJWxkOyAiLCAodW5zaWduZWQgbG9uZyBpbnQpIHl5aSwKLQkgICAgIChsb25nIGludCkgWVlJTkRFWCAoeXlzdGFja3AtPnl5dG9wcy55eXN0YXRlc1t5eWldKSk7Ci0gIGZwcmludGYgKHN0ZGVyciwgIlxuIik7CisgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlbHU6ICVsZDsgIiwgKHVuc2lnbmVkIGxvbmcgaW50KSB5eWksCisgICAgICAgICAgICAgICAobG9uZyBpbnQpIFlZSU5ERVggKHl5c3RhY2twLT55eXRvcHMueXlzdGF0ZXNbeXlpXSkpOworICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CiB9CiAjZW5kaWYKLV0KK11iNF9lcGlsb2d1ZVtdZG5sCitiNF9vdXRwdXRfZW5kKCkKIAotYjRfZXBpbG9ndWUKLWI0X2RlZmluZXNfaWYoCi1bQG91dHB1dCBAb3V0cHV0X2hlYWRlcl9uYW1lQAorIyBnbHIuY2MgcHJvZHVjZXMgaXRzIG93biBoZWFkZXIuCittNF9pZihiNF9za2VsZXRvbiwgWyJnbHIuYyJdLAorW2I0X2RlZmluZXNfaWYoCitbYjRfb3V0cHV0X2JlZ2luKFtiNF9zcGVjX2RlZmluZXNfZmlsZV0pCiBiNF9jb3B5cmlnaHQoW1NrZWxldG9uIGludGVyZmFjZSBmb3IgQmlzb24gR0xSIHBhcnNlcnMgaW4gQ10sCi0gIFsyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2XSkKKyAgICAgICAgICAgICBbMjAwMi0yMDEyXSlbCiAKLWI0X3NoYXJlZF9kZWNsYXJhdGlvbnMKLQotZXh0ZXJuIFlZU1RZUEUgYjRfcHJlZml4W11sdmFsOwotCi1iNF9sb2NhdGlvbnNfaWYoW2I0X3B1cmVfaWYoW10sCi1bZXh0ZXJuIFlZTFRZUEUgYjRfcHJlZml4W11sbG9jO10pCi1dKQotXSkKK11iNF9jcHBfZ3VhcmRfb3BlbihbYjRfc3BlY19kZWZpbmVzX2ZpbGVdKVsKK11iNF9zaGFyZWRfZGVjbGFyYXRpb25zWworXWI0X2NwcF9ndWFyZF9jbG9zZShbYjRfc3BlY19kZWZpbmVzX2ZpbGVdKVsKK11iNF9vdXRwdXRfZW5kKCkKK10pXSkKZGlmZiAtLWdpdCBhL2RhdGEvZ2xyLmNjIGIvZGF0YS9nbHIuY2MKaW5kZXggZDA3YjVhNC4uNDliNGZhMSAxMDA2NDQKLS0tIGEvZGF0YS9nbHIuY2MKKysrIGIvZGF0YS9nbHIuY2MKQEAgLTEsMjIgKzEsMjEgQEAKLW00X2RpdmVydCgtMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEMgLSotCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBDIC0qLQogCiAjIEMrKyBHTFIgc2tlbGV0b24gZm9yIEJpc29uCi0jIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBDb3B5cmlnaHQgKEMpIDIwMDItMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCisjCiAjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KKyMKICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotIyAwMjExMC0xMzAxICBVU0EKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAKIAogIyBUaGlzIHNrZWxldG9uIHByb2R1Y2VzIGEgQysrIGNsYXNzIHRoYXQgZW5jYXBzdWxhdGVzIGEgQyBnbHIgcGFyc2VyLgpAQCAtNTIsMTEgKzUxLDE0IEBACiAKICMgVGhlIGhlYWRlciBpcyBtYW5kYXRvcnkuCiBiNF9kZWZpbmVzX2lmKFtdLAotICAgICAgICAgICAgICBbbTRfZmF0YWwoYjRfc2tlbGV0b25bOiB1c2luZyAlZGVmaW5lcyBpcyBtYW5kYXRvcnldKV0pCisgICAgICAgICAgICAgIFtiNF9mYXRhbChbYjRfc2tlbGV0b25bOiB1c2luZyAlJWRlZmluZXMgaXMgbWFuZGF0b3J5XV0pXSkKIAogbTRfaW5jbHVkZShiNF9wa2dkYXRhZGlyL1tjKysubTRdKQotbTRfaW5jbHVkZShiNF9wa2dkYXRhZGlyL1tsb2NhdGlvbi5jY10pCitiNF9wZXJjZW50X2RlZmluZV9pZmRlZihbW2FwaS5sb2NhdGlvbi50eXBlXV0sIFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgW200X2luY2x1ZGUoYjRfcGtnZGF0YWRpci9bbG9jYXRpb24uY2NdKV0pCiAKK200X2RlZmluZShbYjRfcGFyc2VyX2NsYXNzX25hbWVdLAorICAgICAgICAgIFtiNF9wZXJjZW50X2RlZmluZV9nZXQoW1twYXJzZXJfY2xhc3NfbmFtZV1dKV0pCiAKICMgU2F2ZSB0aGUgcGFyc2UgcGFyYW1ldGVycy4KIG00X2RlZmluZShbYjRfcGFyc2VfcGFyYW1fb3JpZ10sIG00X2RlZm4oW2I0X3BhcnNlX3BhcmFtXSkpCkBAIC03Niw0MSArNzgsNDkgQEAKICAgICBbc3RhdGljIHZvaWRdLAogICAgIFtbRklMRSAqXSwgICAgICAgICAgICAgICBbXV0sCiAgICAgW1tpbnQgeXl0eXBlXSwgICAgICAgICAgIFt5eXR5cGVdXSwKLSAgICBbW2NvbnN0IGI0X25hbWVzcGFjZTo6YjRfcGFyc2VyX2NsYXNzX25hbWU6OnNlbWFudGljX3R5cGUgKnl5dmFsdWVwXSwKLQkJCSAgICAgW3l5dmFsdWVwXV0sCi0gICAgW1tjb25zdCBiNF9uYW1lc3BhY2U6OmI0X3BhcnNlcl9jbGFzc19uYW1lOjpsb2NhdGlvbl90eXBlICp5eWxvY2F0aW9ucF0sCi0JCQkgICAgIFt5eWxvY2F0aW9ucF1dLAorICAgIFtbY29uc3QgXWI0X25hbWVzcGFjZV9yZWY6OmI0X3BhcnNlcl9jbGFzc19uYW1lWzo6c2VtYW50aWNfdHlwZSAqeXl2YWx1ZXBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbeXl2YWx1ZXBdXSwKKyAgICBbW2NvbnN0IF1iNF9uYW1lc3BhY2VfcmVmOjpiNF9wYXJzZXJfY2xhc3NfbmFtZVs6OmxvY2F0aW9uX3R5cGUgKnl5bG9jYXRpb25wXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3l5bG9jYXRpb25wXV0sCiAgICAgYjRfcGFyc2VfcGFyYW0pWwogewogXWI0X3BhcnNlX3BhcmFtX3VzZVtdZG5sCiBbICB5eXBhcnNlci55eV9zeW1ib2xfcHJpbnRfICh5eXR5cGUsIHl5dmFsdWVwXWI0X2xvY2F0aW9uc19pZihbLCB5eWxvY2F0aW9ucF0pWyk7CiB9Ci1dXSkKK11dKVsKIAorIyBIaWphY2sgdGhlIGluaXRpYWwgYWN0aW9uIHRvIGluaXRpYWxpemUgdGhlIGxvY2F0aW9ucy4KK11iNF9sb2NhdGlvbnNfaWYoW2I0X3BlcmNlbnRfZGVmaW5lX2lmZGVmKFtbYXBpLmxvY2F0aW9uLnR5cGVdXSwgW10sCitbbTRfZGVmaW5lKFtiNF9pbml0aWFsX2FjdGlvbl0sCitbeXlsbG9jLmluaXRpYWxpemUgKCk7XW00X2lmZGVmKFtiNF9pbml0aWFsX2FjdGlvbl0sIFsKK200X2RlZm4oW2I0X2luaXRpYWxfYWN0aW9uXSldKSldKV0pWwogCi0jIERlY2xhcmUgeXllcnJvci4KLW00X2FwcGVuZChbYjRfcG9zdF9wcm9sb2d1ZV0sCi1bLyogTGluZSBfX2xpbmVfXyBvZiBnbHIuY2MuICAqLwotYjRfc3luY2xpbmUoW0BvbGluZUBdLCBbQG9maWxlQF0pCi0KLWI0X2NfYW5zaV9mdW5jdGlvbl9kZWNsKFt5eWVycm9yXSwKKyMgSGlqYWNrIHRoZSBwb3N0IHByb2xvZ3VlIHRvIGluc2VydCBlYXJseSBkZWZpbml0aW9uIG9mIFlZTExPQ19ERUZBVUxUCisjIGFuZCBkZWNsYXJhdGlvbiBvZiB5eWVycm9yLgorXW00X2FwcGVuZChbYjRfcG9zdF9wcm9sb2d1ZV0sCitbYjRfc3luY2xpbmUoW0BvbGluZUBdLCBbQG9maWxlQF0pWworXWI0X3l5bGxvY19kZWZhdWx0X2RlZmluZVsKKyNkZWZpbmUgWVlSSFNMT0MoUmhzLCBLKSAoKFJocylbS10ueXlzdGF0ZS55eWxvYykKK11iNF9jX2Fuc2lfZnVuY3Rpb25fZGVjbChbeXllcnJvcl0sCiAgICAgW3N0YXRpYyB2b2lkXSwKLSAgICBbW2I0X25hbWVzcGFjZTo6YjRfcGFyc2VyX2NsYXNzX25hbWU6OmxvY2F0aW9uX3R5cGUgKnl5bG9jYXRpb25wXSwgW3l5bG9jYXRpb25wXV0sCisgICAgW1tjb25zdCBdYjRfbmFtZXNwYWNlX3JlZjo6YjRfcGFyc2VyX2NsYXNzX25hbWVbOjpsb2NhdGlvbl90eXBlICp5eWxvY2F0aW9ucF0sCisgICAgICAgICAgICAgICAgICAgICAgICBbeXlsb2NhdGlvbnBdXSwKICAgICBiNF9wYXJzZV9wYXJhbSwKICAgICBbW2NvbnN0IGNoYXIqIG1zZ10sIFttc2ddXSldKQogCiAKLSMgRGVmaW5lIHl5ZXJyb3IuCisjIEhpamFjayB0aGUgZXBpbG9ndWUgdG8gZGVmaW5lIGltcGxlbWVudGF0aW9ucyAoeXllcnJvciwgcGFyc2VyIG1lbWJlcgorIyBmdW5jdGlvbnMgZXRjLikuCiBtNF9hcHBlbmQoW2I0X2VwaWxvZ3VlXSwKLVsvKiBMaW5lIF9fbGluZV9fIG9mIGdsci5jYy4gICovCi1iNF9zeW5jbGluZShbQG9saW5lQF0sIFtAb2ZpbGVAXSlbCitbYjRfc3luY2xpbmUoW0BvbGluZUBdLCBbQG9maWxlQF0pWwogLyotLS0tLS0tLS0tLS0tLS0tLS0uCiB8IFJlcG9ydCBhbiBlcnJvci4gIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBdYjRfY19hbnNpX2Z1bmN0aW9uX2RlZihbeXllcnJvcl0sCiAgICAgW3N0YXRpYyB2b2lkXSwKLSAgICBbW2I0X25hbWVzcGFjZTo6YjRfcGFyc2VyX2NsYXNzX25hbWU6OmxvY2F0aW9uX3R5cGUgKnl5bG9jYXRpb25wXSwgW3l5bG9jYXRpb25wXV0sCisgICAgW1tjb25zdCBdYjRfbmFtZXNwYWNlX3JlZjo6YjRfcGFyc2VyX2NsYXNzX25hbWVbOjpsb2NhdGlvbl90eXBlICp5eWxvY2F0aW9ucF0sCisgICAgICAgICAgICAgICAgICAgICAgICBbeXlsb2NhdGlvbnBdXSwKICAgICBiNF9wYXJzZV9wYXJhbSwKICAgICBbW2NvbnN0IGNoYXIqIG1zZ10sIFttc2ddXSlbCiB7CkBAIC0xMTksMTMgKzEyOSwxNiBAQAogfQogCiAKLW5hbWVzcGFjZSBdYjRfbmFtZXNwYWNlWwoteworXWI0X25hbWVzcGFjZV9vcGVuWwogXWRubCBJbiB0aGlzIHNlY3Rpb24sIHRoZSBwYXJzZSBwYXJhbSBhcmUgdGhlIG9yaWdpbmFsIHBhcnNlX3BhcmFtcy4KIG00X3B1c2hkZWYoW2I0X3BhcnNlX3BhcmFtXSwgbTRfZGVmbihbYjRfcGFyc2VfcGFyYW1fb3JpZ10pKWRubAogWyAgLy8vIEJ1aWxkIGEgcGFyc2VyIG9iamVjdC4KLSAgXWI0X3BhcnNlcl9jbGFzc19uYW1lOjpiNF9wYXJzZXJfY2xhc3NfbmFtZVsgKF1iNF9wYXJzZV9wYXJhbV9kZWNsWykKLSAgICA6IHl5Y2RlYnVnXyAoJnN0ZDo6Y2VycildYjRfcGFyc2VfcGFyYW1fY29uc1sKKyAgXWI0X3BhcnNlcl9jbGFzc19uYW1lOjpiNF9wYXJzZXJfY2xhc3NfbmFtZVsgKF1iNF9wYXJzZV9wYXJhbV9kZWNsWyldbTRfaWZzZXQoW2I0X3BhcnNlX3BhcmFtXSwgWworICAgIDpdKVsKKyNpZiBdYjRfYXBpX1BSRUZJWFtERUJVRworICAgIF1tNF9pZnNldChbYjRfcGFyc2VfcGFyYW1dLCBbICBdLCBbIDpdKVsKKyAgICAgIHl5Y2RlYnVnXyAoJnN0ZDo6Y2VycildbTRfaWZzZXQoW2I0X3BhcnNlX3BhcmFtXSwgWyxdKVsKKyNlbmRpZl1iNF9wYXJzZV9wYXJhbV9jb25zWwogICB7CiAgIH0KIApAQCAtMTM5LDM0ICsxNTIsMzggQEAKICAgICByZXR1cm4gOjp5eXBhcnNlICgqdGhpc11iNF91c2VyX2FyZ3NbKTsKICAgfQogCi0jaWYgWVlERUJVRworI2lmIF1iNF9hcGlfUFJFRklYW0RFQlVHCiAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiAgIHwgUHJpbnQgdGhpcyBzeW1ib2wuICB8CiAgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICAgaW5saW5lIHZvaWQKICAgXWI0X3BhcnNlcl9jbGFzc19uYW1lWzo6eXlfc3ltYm9sX3ZhbHVlX3ByaW50XyAoaW50IHl5dHlwZSwKLQkJCSAgIGNvbnN0IHNlbWFudGljX3R5cGUqIHl5dmFsdWVwLCBjb25zdCBsb2NhdGlvbl90eXBlKiB5eWxvY2F0aW9ucCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbWFudGljX3R5cGUqIHl5dmFsdWVwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9jYXRpb25fdHlwZSogeXlsb2NhdGlvbnApCiAgIHsKLSAgICAvKiBQYWNpZnkgYGB1bnVzZWQgdmFyaWFibGUnJyB3YXJuaW5ncy4gICovCi0gICAgWVlVU0UgKHl5dmFsdWVwKTsKICAgICBZWVVTRSAoeXlsb2NhdGlvbnApOworICAgIFlZVVNFICh5eXZhbHVlcCk7CisgICAgc3RkOjpvc3RyZWFtJiB5eW91dHB1dCA9IGRlYnVnX3N0cmVhbSAoKTsKKyAgICBzdGQ6Om9zdHJlYW0mIHl5byA9IHl5b3V0cHV0OworICAgIFlZVVNFICh5eW8pOwogICAgIHN3aXRjaCAoeXl0eXBlKQogICAgICAgewogICBdbTRfbWFwKFtiNF9zeW1ib2xfYWN0aW9uc10sIG00X2RlZm4oW2I0X3N5bWJvbF9wcmludGVyc10pKWRubAogWyAgICAgICAgZGVmYXVsdDoKLQkgIGJyZWFrOworICAgICAgICAgIGJyZWFrOwogICAgICAgfQogICB9CiAKIAogICB2b2lkCiAgIF1iNF9wYXJzZXJfY2xhc3NfbmFtZVs6Onl5X3N5bWJvbF9wcmludF8gKGludCB5eXR5cGUsCi0JCQkgICBjb25zdCBzZW1hbnRpY190eXBlKiB5eXZhbHVlcCwgY29uc3QgbG9jYXRpb25fdHlwZSogeXlsb2NhdGlvbnApCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZW1hbnRpY190eXBlKiB5eXZhbHVlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uX3R5cGUqIHl5bG9jYXRpb25wKQogICB7CiAgICAgKnl5Y2RlYnVnXyA8PCAoeXl0eXBlIDwgWVlOVE9LRU5TID8gInRva2VuIiA6ICJudGVybSIpCi0JICAgICAgIDw8ICcgJyA8PCB5eXRuYW1lW3l5dHlwZV0gPDwgIiAoIgotCSAgICAgICA8PCAqeXlsb2NhdGlvbnAgPDwgIjogIjsKKyAgICAgICAgICAgICAgIDw8ICcgJyA8PCB5eXRuYW1lW3l5dHlwZV0gPDwgIiAoIgorICAgICAgICAgICAgICAgPDwgKnl5bG9jYXRpb25wIDw8ICI6ICI7CiAgICAgeXlfc3ltYm9sX3ZhbHVlX3ByaW50XyAoeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnApOwogICAgICp5eWNkZWJ1Z18gPDwgJyknOwogICB9CkBAIC0xODcsMTIwICsyMDQsNzAgQEAKICAgXWI0X3BhcnNlcl9jbGFzc19uYW1lWzo6ZGVidWdfbGV2ZWxfdHlwZQogICBdYjRfcGFyc2VyX2NsYXNzX25hbWVbOjpkZWJ1Z19sZXZlbCAoKSBjb25zdAogICB7Ci0gICAgcmV0dXJuIDo6eXlkZWJ1ZzsKKyAgICByZXR1cm4geXlkZWJ1ZzsKICAgfQogCiAgIHZvaWQKICAgXWI0X3BhcnNlcl9jbGFzc19uYW1lWzo6c2V0X2RlYnVnX2xldmVsIChkZWJ1Z19sZXZlbF90eXBlIGwpCiAgIHsKLSAgICA6Onl5ZGVidWcgPSBsOworICAgIC8vIEFjdHVhbGx5LCBpdCBpcyB5eWRlYnVnIHdoaWNoIGlzIHJlYWxseSB1c2VkLgorICAgIHl5ZGVidWcgPSBsOwogICB9CiAKLSNlbmRpZiAvKiAhIFlZREVCVUcgKi8KKyNlbmRpZgogXW00X3BvcGRlZihbYjRfcGFyc2VfcGFyYW1dKWRubAotW30gLy8gbmFtZXNwYWNlIF1iNF9uYW1lc3BhY2VbCi0KLV1dKQorYjRfbmFtZXNwYWNlX2Nsb3NlXSkKIAogCiAjIExldCBnbHIuYyBiZWxpZXZlIHRoYXQgdGhlIHVzZXIgYXJndW1lbnRzIGluY2x1ZGUgdGhlIHBhcnNlciBpdHNlbGYuCiBtNF9pZnNldChbYjRfcGFyc2VfcGFyYW1dLAogW200X3B1c2hkZWYoW2I0X3BhcnNlX3BhcmFtXSwKLQkgICAgbTRfZHF1b3RlKFtbW2I0X25hbWVzcGFjZTo6YjRfcGFyc2VyX2NsYXNzX25hbWUmIHl5cGFyc2VyXSwgW1t5eXBhcnNlcl1dXSxdCi1tNF9kZWZuKFtiNF9wYXJzZV9wYXJhbV0pKSldLAorICAgICAgICAgICAgW1tiNF9uYW1lc3BhY2VfcmVmOjpiNF9wYXJzZXJfY2xhc3NfbmFtZVsmIHl5cGFyc2VyXSwgW1t5eXBhcnNlcl1dXSxdCittNF9kZWZuKFtiNF9wYXJzZV9wYXJhbV0pKV0sCiBbbTRfcHVzaGRlZihbYjRfcGFyc2VfcGFyYW1dLAotCSAgICBbW1tbYjRfbmFtZXNwYWNlOjpiNF9wYXJzZXJfY2xhc3NfbmFtZSYgeXlwYXJzZXJdLCBbW3l5cGFyc2VyXV1dXV0pCisgICAgICAgICAgICBbW2I0X25hbWVzcGFjZV9yZWY6OmI0X3BhcnNlcl9jbGFzc19uYW1lWyYgeXlwYXJzZXJdLCBbW3l5cGFyc2VyXV1dXSkKIF0pCiBtNF9pbmNsdWRlKGI0X3BrZ2RhdGFkaXIvW2dsci5jXSkKIG00X3BvcGRlZihbYjRfcGFyc2VfcGFyYW1dKQogCi0KLUBvdXRwdXQgQG91dHB1dF9oZWFkZXJfbmFtZUAKK2I0X291dHB1dF9iZWdpbihbYjRfc3BlY19kZWZpbmVzX2ZpbGVdKQogYjRfY29weXJpZ2h0KFtTa2VsZXRvbiBpbnRlcmZhY2UgZm9yIEJpc29uIEdMUiBwYXJzZXJzIGluIEMrK10sCi0gIFsyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2XSlbCisgICAgICAgICAgICAgWzIwMDItMjAwNiwgMjAwOS0yMDEyXSlbCiAKIC8qIEMrKyBHTFIgcGFyc2VyIHNrZWxldG9uIHdyaXR0ZW4gYnkgQWtpbSBEZW1haWxsZS4gICovCiAKLSNpZm5kZWYgUEFSU0VSX0hFQURFUl9ICi0jIGRlZmluZSBQQVJTRVJfSEVBREVSX0gKK11iNF9jcHBfZ3VhcmRfb3BlbihbYjRfc3BlY19kZWZpbmVzX2ZpbGVdKVsKIAotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KK11iNF9wZXJjZW50X2NvZGVfZ2V0KFtbcmVxdWlyZXNdXSlbCiAKLS8qIFVzaW5nIGxvY2F0aW9ucy4gICovCi0jZGVmaW5lIFlZTFNQX05FRURFRCBdYjRfbG9jYXRpb25zX2ZsYWdbCisjIGluY2x1ZGUgPHN0cmluZz4KKyMgaW5jbHVkZSA8aW9zdHJlYW0+CitdYjRfcGVyY2VudF9kZWZpbmVfaWZkZWYoW1thcGkubG9jYXRpb24udHlwZV1dLCBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbWyMgaW5jbHVkZSAibG9jYXRpb24uaGgiXV0pWwogCi1uYW1lc3BhY2UgXWI0X25hbWVzcGFjZVsKLXsKLSAgY2xhc3MgcG9zaXRpb247Ci0gIGNsYXNzIGxvY2F0aW9uOwotfQorXWI0X1lZREVCVUdfZGVmaW5lWwogCi0vKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KLV1iNF9wcmVfcHJvbG9ndWVbCi0KLV0vKiBMaW5lIF9fbGluZV9fIG9mIGdsci5jYy4gICovCi1iNF9zeW5jbGluZShbQG9saW5lQF0sIFtAb2ZpbGVAXSlbCi0KLSNpbmNsdWRlICJsb2NhdGlvbi5oaCIKLQotLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KLSNpZm5kZWYgWVlERUJVRwotIyBkZWZpbmUgWVlERUJVRyBdYjRfZGVidWdfZmxhZ1sKLSNlbmRpZgotCi0vKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KLSNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKLSMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQotI2Vsc2UKLSMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSBdYjRfZXJyb3JfdmVyYm9zZV9mbGFnWwotI2VuZGlmCi0KLS8qIEVuYWJsaW5nIHRoZSB0b2tlbiB0YWJsZS4gICovCi0jaWZuZGVmIFlZVE9LRU5fVEFCTEUKLSMgZGVmaW5lIFlZVE9LRU5fVEFCTEUgXWI0X3Rva2VuX3RhYmxlWwotI2VuZGlmCi0KLS8qIFlZTExPQ19ERUZBVUxUIC0tIFNldCBDVVJSRU5UIHRvIHNwYW4gZnJvbSBSSFNbMV0gdG8gUkhTW05dLgotICAgSWYgTiBpcyAwLCB0aGVuIHNldCBDVVJSRU5UIHRvIHRoZSBlbXB0eSBsb2NhdGlvbiB3aGljaCBlbmRzCi0gICB0aGUgcHJldmlvdXMgc3ltYm9sOiBSSFNbMF0gKGFsd2F5cyBkZWZpbmVkKS4gICovCi0KLSNpZm5kZWYgWVlMTE9DX0RFRkFVTFQKLSMgZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikJCQkJXAotICAgIGRvCQkJCQkJCQkJXAotICAgICAgaWYgKE4pCQkJCQkJCQlcCi0JewkJCQkJCQkJXAotCSAgKEN1cnJlbnQpLmJlZ2luICA9IFlZUkhTTE9DIChSaHMsIDEpLmJlZ2luOwkJCVwKLQkgIChDdXJyZW50KS5lbmQgICAgPSBZWVJIU0xPQyAoUmhzLCBOKS5lbmQ7CQkJXAotCX0JCQkJCQkJCVwKLSAgICAgIGVsc2UJCQkJCQkJCVwKLQl7CQkJCQkJCQlcCi0JICAoQ3VycmVudCkuYmVnaW4gPSAoQ3VycmVudCkuZW5kID0gWVlSSFNMT0MgKFJocywgMCkuZW5kOwlcCi0JfQkJCQkJCQkJXAotICAgIHdoaWxlICgvKkNPTlNUQ09ORCovIDApCi0jZW5kaWYKLQotbmFtZXNwYWNlIF1iNF9uYW1lc3BhY2VbCi17CitdYjRfbmFtZXNwYWNlX29wZW5bCiAgIC8vLyBBIEJpc29uIHBhcnNlci4KICAgY2xhc3MgXWI0X3BhcnNlcl9jbGFzc19uYW1lWwogICB7CiAgIHB1YmxpYzoKICAgICAvLy8gU3ltYm9sIHNlbWFudGljIHZhbHVlcy4KLSNpZm5kZWYgWVlTVFlQRQorIyBpZm5kZWYgXWI0X2FwaV9QUkVGSVhbU1RZUEUKIF1tNF9pZmRlZihbYjRfc3R5cGVdLAogWyAgICB1bmlvbiBzZW1hbnRpY190eXBlCi1iNF9zdHlwZQotLyogTGluZSBfX2xpbmVfXyBvZiBsYWxyMS5jYy4gICovCi1iNF9zeW5jbGluZShbQG9saW5lQF0sIFtAb2ZpbGVAXSkKLQk7XSwKLVsgICAgdHlwZWRlZiBpbnQgc2VtYW50aWNfdHlwZTtdKVsKLSNlbHNlCi0gICAgdHlwZWRlZiBZWVNUWVBFIHNlbWFudGljX3R5cGU7Ci0jZW5kaWYKKyAgICB7CitiNF91c2VyX3N0eXBlCisgICAgfTtdLAorW200X2lmKGI0X3RhZ19zZWVuX2ZsYWcsIDAsCitbWyAgICB0eXBlZGVmIGludCBzZW1hbnRpY190eXBlO11dLAorW1sgICAgdHlwZWRlZiBdYjRfYXBpX1BSRUZJWFtTVFlQRSBzZW1hbnRpY190eXBlO11dKV0pWworIyBlbHNlCisgICAgdHlwZWRlZiBdYjRfYXBpX1BSRUZJWFtTVFlQRSBzZW1hbnRpY190eXBlOworIyBlbmRpZgogICAgIC8vLyBTeW1ib2wgbG9jYXRpb25zLgotICAgIHR5cGVkZWYgXWI0X2xvY2F0aW9uX3R5cGVbIGxvY2F0aW9uX3R5cGU7CisgICAgdHlwZWRlZiBdYjRfcGVyY2VudF9kZWZpbmVfZ2V0KFtbYXBpLmxvY2F0aW9uLnR5cGVdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tsb2NhdGlvbl1dKVsgbG9jYXRpb25fdHlwZTsKICAgICAvLy8gVG9rZW5zLgogICAgIHN0cnVjdCB0b2tlbgogICAgIHsKQEAgLTMzOCw1MiArMzA1LDQyIEBACiAgICAgdmlydHVhbCB2b2lkIGVycm9yIChjb25zdCBsb2NhdGlvbl90eXBlJiBsb2MsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtc2cpOwogICBwcml2YXRlOgogCi0jaWYgWVlERUJVRworIyBpZiBdYjRfYXBpX1BSRUZJWFtERUJVRwogICBwdWJsaWM6CiAgICAgLy8vIFxicmllZiBSZXBvcnQgYSBzeW1ib2wgdmFsdWUgb24gdGhlIGRlYnVnIHN0cmVhbS4KICAgICAvLy8gXHBhcmFtIHl5dHlwZSAgICAgICBUaGUgdG9rZW4gdHlwZS4KICAgICAvLy8gXHBhcmFtIHl5dmFsdWVwICAgICBJdHMgc2VtYW50aWMgdmFsdWUuCiAgICAgLy8vIFxwYXJhbSB5eWxvY2F0aW9ucCAgSXRzIGxvY2F0aW9uLgogICAgIHZpcnR1YWwgdm9pZCB5eV9zeW1ib2xfdmFsdWVfcHJpbnRfIChpbnQgeXl0eXBlLAotCQkJCQkgY29uc3Qgc2VtYW50aWNfdHlwZSogeXl2YWx1ZXAsCi0JCQkJCSBjb25zdCBsb2NhdGlvbl90eXBlKiB5eWxvY2F0aW9ucCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbWFudGljX3R5cGUqIHl5dmFsdWVwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2NhdGlvbl90eXBlKiB5eWxvY2F0aW9ucCk7CiAgICAgLy8vIFxicmllZiBSZXBvcnQgYSBzeW1ib2wgb24gdGhlIGRlYnVnIHN0cmVhbS4KICAgICAvLy8gXHBhcmFtIHl5dHlwZSAgICAgICBUaGUgdG9rZW4gdHlwZS4KICAgICAvLy8gXHBhcmFtIHl5dmFsdWVwICAgICBJdHMgc2VtYW50aWMgdmFsdWUuCiAgICAgLy8vIFxwYXJhbSB5eWxvY2F0aW9ucCAgSXRzIGxvY2F0aW9uLgogICAgIHZpcnR1YWwgdm9pZCB5eV9zeW1ib2xfcHJpbnRfIChpbnQgeXl0eXBlLAotCQkJCSAgIGNvbnN0IHNlbWFudGljX3R5cGUqIHl5dmFsdWVwLAotCQkJCSAgIGNvbnN0IGxvY2F0aW9uX3R5cGUqIHl5bG9jYXRpb25wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VtYW50aWNfdHlwZSogeXl2YWx1ZXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uX3R5cGUqIHl5bG9jYXRpb25wKTsKICAgcHJpdmF0ZToKLSNlbmRpZiAvKiAhIFlZREVCVUcgKi8KLQotCi0gICAgLy8vIFxicmllZiBSZWNsYWltIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB0byBhIHN5bWJvbC4KLSAgICAvLy8gXHBhcmFtIHl5bXNnICAgICAgICBXaHkgdGhpcyB0b2tlbiBpcyByZWNsYWltZWQuCi0gICAgLy8vIFxwYXJhbSB5eXR5cGUgICAgICAgVGhlIHN5bWJvbCB0eXBlLgotICAgIC8vLyBccGFyYW0geXl2YWx1ZXAgICAgIEl0cyBzZW1hbnRpYyB2YWx1ZS4KLSAgICAvLy8gXHBhcmFtIHl5bG9jYXRpb25wICBJdHMgbG9jYXRpb24uCi0gICAgaW5saW5lIHZvaWQgeXlkZXN0cnVjdF8gKGNvbnN0IGNoYXIqIHl5bXNnLAotCQkJICAgICBpbnQgeXl0eXBlLAotCQkJICAgICBzZW1hbnRpY190eXBlKiB5eXZhbHVlcCwKLQkJCSAgICAgbG9jYXRpb25fdHlwZSogeXlsb2NhdGlvbnApOwotCiAgICAgLyogRGVidWdnaW5nLiAgKi8KICAgICBzdGQ6Om9zdHJlYW0qIHl5Y2RlYnVnXzsKKyMgZW5kaWYKKwogXWI0X3BhcnNlX3BhcmFtX3ZhcnNbCiAgIH07CiAKIF1kbmwgUmVkaXJlY3Rpb25zIGZvciBnbHIuYy4KLW00X2lmc2V0KFtiNF9nbG9iYWxfdG9rZW5zX2FuZF95eXN0eXBlXSwKK2I0X3BlcmNlbnRfZGVmaW5lX2ZsYWdfaWYoW1tnbG9iYWxfdG9rZW5zX2FuZF95eXN0eXBlXV0sCiBbYjRfdG9rZW5fZGVmaW5lcyhiNF90b2tlbnMpXSkKIFsKLSNpZm5kZWYgWVlTVFlQRQotIyBkZWZpbmUgWVlTVFlQRSBdYjRfbmFtZXNwYWNlWzo6XWI0X3BhcnNlcl9jbGFzc19uYW1lWzo6c2VtYW50aWNfdHlwZQorI2lmbmRlZiBdYjRfYXBpX1BSRUZJWFtTVFlQRQorIyBkZWZpbmUgXWI0X2FwaV9QUkVGSVhbU1RZUEUgXWI0X25hbWVzcGFjZV9yZWZbOjpdYjRfcGFyc2VyX2NsYXNzX25hbWVbOjpzZW1hbnRpY190eXBlCiAjZW5kaWYKLSNpZm5kZWYgWVlMVFlQRQotIyBkZWZpbmUgWVlMVFlQRSBdYjRfbmFtZXNwYWNlWzo6XWI0X3BhcnNlcl9jbGFzc19uYW1lWzo6bG9jYXRpb25fdHlwZQorI2lmbmRlZiBdYjRfYXBpX1BSRUZJWFtMVFlQRQorIyBkZWZpbmUgXWI0X2FwaV9QUkVGSVhbTFRZUEUgXWI0X25hbWVzcGFjZV9yZWZbOjpdYjRfcGFyc2VyX2NsYXNzX25hbWVbOjpsb2NhdGlvbl90eXBlCiAjZW5kaWYKIAotfQotCi0jZW5kaWYgLyogISBkZWZpbmVkIFBBUlNFUl9IRUFERVJfSCAqL10KK11iNF9uYW1lc3BhY2VfY2xvc2VbCitdYjRfcGVyY2VudF9jb2RlX2dldChbW3Byb3ZpZGVzXV0pWworXWI0X2NwcF9ndWFyZF9jbG9zZShbYjRfc3BlY19kZWZpbmVzX2ZpbGVdKVsKK11iNF9vdXRwdXRfZW5kKCkKZGlmZiAtLWdpdCBhL2RhdGEvamF2YS1za2VsLm00IGIvZGF0YS9qYXZhLXNrZWwubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFiZjAyYQotLS0gL2Rldi9udWxsCisrKyBiL2RhdGEvamF2YS1za2VsLm00CkBAIC0wLDAgKzEsMjYgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBKYXZhIHNrZWxldG9uIGRpc3BhdGNoaW5nIGZvciBCaXNvbi4KKworIyBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworYjRfZ2xyX2lmKCAgICAgICAgICAgICBbYjRfY29tcGxhaW4oWyUlZ2xyLXBhcnNlciBub3Qgc3VwcG9ydGVkIGZvciBKYXZhXSldKQorYjRfbm9uZGV0ZXJtaW5pc3RpY19pZihbYjRfY29tcGxhaW4oWyUlbm9uZGV0ZXJtaW5pc3RpYy1wYXJzZXIgbm90IHN1cHBvcnRlZCBmb3IgSmF2YV0pXSkKKworbTRfZGVmaW5lX2RlZmF1bHQoW2I0X3VzZWRfc2tlbGV0b25dLCBbYjRfcGtnZGF0YWRpci9bbGFscjEuamF2YV1dKQorbTRfZGVmaW5lX2RlZmF1bHQoW2I0X3NrZWxldG9uXSwgWyJiNF9iYXNlbmFtZShiNF91c2VkX3NrZWxldG9uKSJdKQorCittNF9pbmNsdWRlKGI0X3VzZWRfc2tlbGV0b24pCmRpZmYgLS1naXQgYS9kYXRhL2phdmEubTQgYi9kYXRhL2phdmEubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI3MDI4YgotLS0gL2Rldi9udWxsCisrKyBiL2RhdGEvamF2YS5tNApAQCAtMCwwICsxLDMwNCBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIEphdmEgbGFuZ3VhZ2Ugc3VwcG9ydCBmb3IgQmlzb24KKworIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworbTRfaW5jbHVkZShiNF9wa2dkYXRhZGlyL1tjLWxpa2UubTRdKQorCisjIGI0X2NvbW1lbnQoVEVYVCkKKyMgLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtiNF9jb21tZW50XSwgWy8qIG00X2JwYXRzdWJzdChbJDFdLCBbCitdLCBbCisgICBdKSAgKi9dKQorCisKKyMgYjRfbGlzdDIoTElTVDEsIExJU1QyKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBKb2luIHR3byBsaXN0cyB3aXRoIGEgY29tbWEgaWYgbmVjZXNzYXJ5LgorbTRfZGVmaW5lKFtiNF9saXN0Ml0sCisJICBbJDFbXW00X2lmdmFsKG00X3F1b3RlKCQxKSwgW200X2lmdmFsKG00X3F1b3RlKCQyKSwgW1ssIF1dKV0pW10kMl0pCisKKworIyBiNF9wZXJjZW50X2RlZmluZV9nZXQzKERFRiwgUFJFLCBQT1NULCBOT1QpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhwYW5kIHRvIHRoZSB2YWx1ZSBvZiBERUYgc3Vycm91bmRlZCBieSBQUkUgYW5kIFBPU1QgaWYgaXQncyAlZGVmaW5lJ2VkLAorIyBvdGhlcndpc2UgTk9ULgorbTRfZGVmaW5lKFtiNF9wZXJjZW50X2RlZmluZV9nZXQzXSwKKwkgIFttNF9pZnZhbChtNF9xdW90ZShiNF9wZXJjZW50X2RlZmluZV9nZXQoWyQxXSkpLAorCQlbJDJbXWI0X3BlcmNlbnRfZGVmaW5lX2dldChbJDFdKVtdJDNdLCBbJDRdKV0pCisKKworCisjIGI0X2ZsYWdfdmFsdWUoQk9PTEVBTi1GTEFHKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbYjRfZmxhZ192YWx1ZV0sIFtiNF9mbGFnX2lmKFskMV0sIFt0cnVlXSwgW2ZhbHNlXSldKQorCisKKyMgYjRfcHVibGljX2lmKFRSVUUsIEZBTFNFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitiNF9wZXJjZW50X2RlZmluZV9kZWZhdWx0KFtbcHVibGljXV0sIFtbZmFsc2VdXSkKK200X2RlZmluZShbYjRfcHVibGljX2lmXSwKK1tiNF9wZXJjZW50X2RlZmluZV9mbGFnX2lmKFtwdWJsaWNdLCBbJDFdLCBbJDJdKV0pCisKKworIyBiNF9hYnN0cmFjdF9pZihUUlVFLCBGQUxTRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitiNF9wZXJjZW50X2RlZmluZV9kZWZhdWx0KFtbYWJzdHJhY3RdXSwgW1tmYWxzZV1dKQorbTRfZGVmaW5lKFtiNF9hYnN0cmFjdF9pZl0sCitbYjRfcGVyY2VudF9kZWZpbmVfZmxhZ19pZihbYWJzdHJhY3RdLCBbJDFdLCBbJDJdKV0pCisKKworIyBiNF9maW5hbF9pZihUUlVFLCBGQUxTRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitiNF9wZXJjZW50X2RlZmluZV9kZWZhdWx0KFtbZmluYWxdXSwgW1tmYWxzZV1dKQorbTRfZGVmaW5lKFtiNF9maW5hbF9pZl0sCitbYjRfcGVyY2VudF9kZWZpbmVfZmxhZ19pZihbZmluYWxdLCBbJDFdLCBbJDJdKV0pCisKKworIyBiNF9zdHJpY3RmcF9pZihUUlVFLCBGQUxTRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitiNF9wZXJjZW50X2RlZmluZV9kZWZhdWx0KFtbc3RyaWN0ZnBdXSwgW1tmYWxzZV1dKQorbTRfZGVmaW5lKFtiNF9zdHJpY3RmcF9pZl0sCitbYjRfcGVyY2VudF9kZWZpbmVfZmxhZ19pZihbc3RyaWN0ZnBdLCBbJDFdLCBbJDJdKV0pCisKKworIyBiNF9sZXhlcl9pZihUUlVFLCBGQUxTRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2I0X2xleGVyX2lmXSwKK1tiNF9wZXJjZW50X2NvZGVfaWZkZWYoW1tsZXhlcl1dLCBbJDFdLCBbJDJdKV0pCisKKworIyBiNF9pZGVudGlmaWNhdGlvbgorIyAtLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtiNF9pZGVudGlmaWNhdGlvbl0sCitbICAvKiogVmVyc2lvbiBudW1iZXIgZm9yIHRoZSBCaXNvbiBleGVjdXRhYmxlIHRoYXQgZ2VuZXJhdGVkIHRoaXMgcGFyc2VyLiAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgYmlzb25WZXJzaW9uID0gImI0X3ZlcnNpb24iOworCisgIC8qKiBOYW1lIG9mIHRoZSBza2VsZXRvbiB0aGF0IGdlbmVyYXRlZCB0aGlzIHBhcnNlci4gICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGJpc29uU2tlbGV0b24gPSBiNF9za2VsZXRvbjsKK10pCisKKworIyMgLS0tLS0tLS0tLS0tICMjCisjIyBEYXRhIHR5cGVzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLSAjIworCisjIGI0X2ludF90eXBlKE1JTiwgTUFYKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmV0dXJuIHRoZSBzbWFsbGVzdCBpbnQgdHlwZSBhYmxlIHRvIGhhbmRsZSBudW1iZXJzIHJhbmdpbmcgZnJvbQorIyBNSU4gdG8gTUFYIChpbmNsdWRlZCkuCittNF9kZWZpbmUoW2I0X2ludF90eXBlXSwKK1ttNF9pZihiNF9pbnRzX2luKCRALCAgIFstMTI4XSwgICBbMTI3XSksIFsxXSwgW2J5dGVdLAorICAgICAgIGI0X2ludHNfaW4oJEAsIFstMzI3NjhdLCBbMzI3NjddKSwgWzFdLCBbc2hvcnRdLAorCQkJCQkgICAgICAgW2ludF0pXSkKKworIyBiNF9pbnRfdHlwZV9mb3IoTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJldHVybiB0aGUgc21hbGxlc3QgaW50IHR5cGUgYWJsZSB0byBoYW5kbGUgbnVtYmVycyByYW5naW5nIGZyb20KKyMgYE5BTUVfbWluJyB0byBgTkFNRV9tYXgnIChpbmNsdWRlZCkuCittNF9kZWZpbmUoW2I0X2ludF90eXBlX2Zvcl0sCitbYjRfaW50X3R5cGUoJDFfbWluLCAkMV9tYXgpXSkKKworIyBiNF9udWxsCisjIC0tLS0tLS0KK200X2RlZmluZShbYjRfbnVsbF0sIFtudWxsXSkKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBBc3NpZ25pbmcgdG9rZW4gbnVtYmVycy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgYjRfdG9rZW5fZW51bShUT0tFTi1OQU1FLCBUT0tFTi1OVU1CRVIpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPdXRwdXQgdGhlIGRlZmluaXRpb24gb2YgdGhpcyB0b2tlbiBhcyBhbiBlbnVtLgorbTRfZGVmaW5lKFtiNF90b2tlbl9lbnVtXSwKK1sgIC8qKiBUb2tlbiBudW1iZXIsIHRvIGJlIHJldHVybmVkIGJ5IHRoZSBzY2FubmVyLiAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgJDEgPSAkMjsKK10pCisKKworIyBiNF90b2tlbl9lbnVtcyhMSVNULU9GLVBBSVJTLVRPS0VOLU5BTUUtVE9LRU4tTlVNQkVSKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPdXRwdXQgdGhlIGRlZmluaXRpb24gb2YgdGhlIHRva2VucyAoaWYgdGhlcmUgYXJlKSBhcyBlbnVtcy4KK200X2RlZmluZShbYjRfdG9rZW5fZW51bXNdLAorW200X2lmKFskIyQxXSwgWzFdLCBbXSwKK1svKiBUb2tlbnMuICAqLworbTRfbWFwKFtiNF90b2tlbl9lbnVtXSwgWyRAXSldKQorXSkKKworIyBiNC1jYXNlKElELCBDT0RFKQorIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBXZSBuZWVkIHRvIGZvb2wgSmF2YSdzIHN0dXBpZCB1bnJlYWNoYWJsZSBjb2RlIGRldGVjdGlvbi4KK200X2RlZmluZShbYjRfY2FzZV0sIFsgIGNhc2UgJDE6CisgIGlmICh5eW4gPT0gJDEpCisgICAgJDI7CisgIGJyZWFrOworICAgIF0pCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRGVmYXVsdCB2YWx1ZXMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLSAjIworCittNF9kZWZpbmUoW2I0X3l5c3R5cGVdLCBbYjRfcGVyY2VudF9kZWZpbmVfZ2V0KFtbc3R5cGVdXSldKQorYjRfcGVyY2VudF9kZWZpbmVfZGVmYXVsdChbW3N0eXBlXV0sIFtbT2JqZWN0XV0pCisKKyMgJW5hbWUtcHJlZml4CittNF9kZWZpbmVfZGVmYXVsdChbYjRfcHJlZml4XSwgW1tZWV1dKQorCitiNF9wZXJjZW50X2RlZmluZV9kZWZhdWx0KFtbcGFyc2VyX2NsYXNzX25hbWVdXSwgW2I0X3ByZWZpeFtdUGFyc2VyXSkKK200X2RlZmluZShbYjRfcGFyc2VyX2NsYXNzX25hbWVdLCBbYjRfcGVyY2VudF9kZWZpbmVfZ2V0KFtbcGFyc2VyX2NsYXNzX25hbWVdXSldKQorCitiNF9wZXJjZW50X2RlZmluZV9kZWZhdWx0KFtbbGV4X3Rocm93c11dLCBbW2phdmEuaW8uSU9FeGNlcHRpb25dXSkKK200X2RlZmluZShbYjRfbGV4X3Rocm93c10sIFtiNF9wZXJjZW50X2RlZmluZV9nZXQoW1tsZXhfdGhyb3dzXV0pXSkKKworYjRfcGVyY2VudF9kZWZpbmVfZGVmYXVsdChbW3Rocm93c11dLCBbXSkKK200X2RlZmluZShbYjRfdGhyb3dzXSwgW2I0X3BlcmNlbnRfZGVmaW5lX2dldChbW3Rocm93c11dKV0pCisKK2I0X3BlcmNlbnRfZGVmaW5lX2RlZmF1bHQoW1thcGkubG9jYXRpb24udHlwZV1dLCBbTG9jYXRpb25dKQorbTRfZGVmaW5lKFtiNF9sb2NhdGlvbl90eXBlXSwgW2I0X3BlcmNlbnRfZGVmaW5lX2dldChbW2FwaS5sb2NhdGlvbi50eXBlXV0pXSkKKworYjRfcGVyY2VudF9kZWZpbmVfZGVmYXVsdChbW2FwaS5wb3NpdGlvbi50eXBlXV0sIFtQb3NpdGlvbl0pCittNF9kZWZpbmUoW2I0X3Bvc2l0aW9uX3R5cGVdLCBbYjRfcGVyY2VudF9kZWZpbmVfZ2V0KFtbYXBpLnBvc2l0aW9uLnR5cGVdXSldKQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBTZW1hbnRpYyBWYWx1ZXMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIGI0X2xoc192YWx1ZShbVFlQRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4cGFuc2lvbiBvZiAkPFRZUEU+JC4KK200X2RlZmluZShbYjRfbGhzX3ZhbHVlXSwgW3l5dmFsXSkKKworCisjIGI0X3Joc192YWx1ZShSVUxFLUxFTkdUSCwgTlVNLCBbVFlQRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4cGFuc2lvbiBvZiAkPFRZUEU+TlVNLCB3aGVyZSB0aGUgY3VycmVudCBydWxlIGhhcyBSVUxFLUxFTkdUSAorIyBzeW1ib2xzIG9uIFJIUy4KKyMKKyMgSW4gdGhpcyBzaW1wbGUgaW1wbGVtZW50YXRpb24sICV0b2tlbiBhbmQgJXR5cGUgaGF2ZSBjbGFzcyBuYW1lcworIyBiZXR3ZWVuIHRoZSBhbmdsZSBicmFja2V0cy4KK200X2RlZmluZShbYjRfcmhzX3ZhbHVlXSwKK1sobTRfaWZ2YWwoJDMsIFsoJDMpXSlbXSh5eXN0YWNrLnZhbHVlQXQgKCQxLSgkMikpKSldKQorCisjIGI0X2xoc19sb2NhdGlvbigpCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIEV4cGFuc2lvbiBvZiBAJC4KK200X2RlZmluZShbYjRfbGhzX2xvY2F0aW9uXSwKK1soeXlsb2MpXSkKKworCisjIGI0X3Joc19sb2NhdGlvbihSVUxFLUxFTkdUSCwgTlVNKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhwYW5zaW9uIG9mIEBOVU0sIHdoZXJlIHRoZSBjdXJyZW50IHJ1bGUgaGFzIFJVTEUtTEVOR1RIIHN5bWJvbHMKKyMgb24gUkhTLgorbTRfZGVmaW5lKFtiNF9yaHNfbG9jYXRpb25dLAorW3l5c3RhY2subG9jYXRpb25BdCAoJDEtKCQyKSldKQorCisKKyMgYjRfbGV4X3BhcmFtCisjIGI0X3BhcnNlX3BhcmFtCisjIC0tLS0tLS0tLS0tLS0tCisjIElmIGRlZmluZWQsIGI0X2xleF9wYXJhbSBhcnJpdmVzIGRvdWJsZSBxdW90ZWQsIGJ1dCBiZWxvdyB3ZSBwcmVmZXIKKyMgaXQgdG8gYmUgc2luZ2xlIHF1b3RlZC4gIFNhbWUgZm9yIGI0X3BhcnNlX3BhcmFtLgorCisjIFRPRE86IHNob3VsZCBiZSBpbiBiaXNvbi5tNAorbTRfZGVmaW5lX2RlZmF1bHQoW2I0X2xleF9wYXJhbV0sIFtbXV0pCittNF9kZWZpbmUoW2I0X2xleF9wYXJhbV0sIGI0X2xleF9wYXJhbSkKK200X2RlZmluZShbYjRfcGFyc2VfcGFyYW1dLCBiNF9wYXJzZV9wYXJhbSkKKworIyBiNF9sZXhfcGFyYW1fZGVjbAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4dHJhIGZvcm1hbCBhcmd1bWVudHMgb2YgdGhlIGNvbnN0cnVjdG9yLgorbTRfZGVmaW5lKFtiNF9sZXhfcGFyYW1fZGVjbF0sCitbbTRfaWZzZXQoW2I0X2xleF9wYXJhbV0sCisgICAgICAgICAgW2I0X3JlbW92ZV9jb21tYShbJDFdLAorCQkJICAgYjRfcGFyYW1fZGVjbHMoYjRfbGV4X3BhcmFtKSldLAorCSAgWyQxXSldKQorCittNF9kZWZpbmUoW2I0X3BhcmFtX2RlY2xzXSwKKwkgIFttNF9tYXAoW2I0X3BhcmFtX2RlY2xdLCBbJEBdKV0pCittNF9kZWZpbmUoW2I0X3BhcmFtX2RlY2xdLCBbLCAkMV0pCisKK200X2RlZmluZShbYjRfcmVtb3ZlX2NvbW1hXSwgW200X2lmdmFsKG00X3F1b3RlKCQxKSwgWyQxLCBdLCBbXSltNF9zaGlmdDIoJEApXSkKKworCisKKyMgYjRfcGFyc2VfcGFyYW1fZGVjbAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4dHJhIGZvcm1hbCBhcmd1bWVudHMgb2YgdGhlIGNvbnN0cnVjdG9yLgorbTRfZGVmaW5lKFtiNF9wYXJzZV9wYXJhbV9kZWNsXSwKK1ttNF9pZnNldChbYjRfcGFyc2VfcGFyYW1dLAorICAgICAgICAgIFtiNF9yZW1vdmVfY29tbWEoWyQxXSwKKwkJCSAgIGI0X3BhcmFtX2RlY2xzKGI0X3BhcnNlX3BhcmFtKSldLAorCSAgWyQxXSldKQorCisKKworIyBiNF9sZXhfcGFyYW1fY2FsbAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlbGVnYXRpbmcgdGhlIGxleGVyIHBhcmFtZXRlcnMgdG8gdGhlIGxleGVyIGNvbnN0cnVjdG9yLgorbTRfZGVmaW5lKFtiNF9sZXhfcGFyYW1fY2FsbF0sCisgICAgICAgICAgW200X2lmc2V0KFtiNF9sZXhfcGFyYW1dLAorCSAgICAgICAgICAgIFtiNF9yZW1vdmVfY29tbWEoWyQxXSwKKwkJCQkgICAgIGI0X3BhcmFtX2NhbGxzKGI0X2xleF9wYXJhbSkpXSwKKwkgICAgICAgICAgICBbJDFdKV0pCittNF9kZWZpbmUoW2I0X3BhcmFtX2NhbGxzXSwKKwkgIFttNF9tYXAoW2I0X3BhcmFtX2NhbGxdLCBbJEBdKV0pCittNF9kZWZpbmUoW2I0X3BhcmFtX2NhbGxdLCBbLCAkMl0pCisKKworCisjIGI0X3BhcnNlX3BhcmFtX2NvbnMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeHRyYSBpbml0aWFsaXNhdGlvbnMgb2YgdGhlIGNvbnN0cnVjdG9yLgorbTRfZGVmaW5lKFtiNF9wYXJzZV9wYXJhbV9jb25zXSwKKyAgICAgICAgICBbbTRfaWZzZXQoW2I0X3BhcnNlX3BhcmFtXSwKKwkJICAgIFtiNF9jb25zdHJ1Y3Rvcl9jYWxscyhiNF9wYXJzZV9wYXJhbSldKV0pCisKK200X2RlZmluZShbYjRfY29uc3RydWN0b3JfY2FsbHNdLAorCSAgW200X21hcChbYjRfY29uc3RydWN0b3JfY2FsbF0sIFskQF0pXSkKK200X2RlZmluZShbYjRfY29uc3RydWN0b3JfY2FsbF0sCisJICBbdGhpcy4kMiA9ICQyOworCSAgXSkKKworCisKKyMgYjRfcGFyc2VfcGFyYW1fdmFycworIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4dHJhIGluc3RhbmNlIHZhcmlhYmxlcy4KK200X2RlZmluZShbYjRfcGFyc2VfcGFyYW1fdmFyc10sCisgICAgICAgICAgW200X2lmc2V0KFtiNF9wYXJzZV9wYXJhbV0sCisJCSAgICBbCisgICAgLyogVXNlciBhcmd1bWVudHMuICAqLworYjRfdmFyX2RlY2xzKGI0X3BhcnNlX3BhcmFtKV0pXSkKKworbTRfZGVmaW5lKFtiNF92YXJfZGVjbHNdLAorCSAgW200X21hcF9zZXAoW2I0X3Zhcl9kZWNsXSwgWworXSwgWyRAXSldKQorbTRfZGVmaW5lKFtiNF92YXJfZGVjbF0sCisJICBbICAgIHByb3RlY3RlZCBmaW5hbCAkMTtdKQorCisKKworIyBiNF9tYXliZV90aHJvd3MoVEhST1dTKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeHBhbmQgdG8gZWl0aGVyIGFuIGVtcHR5IHN0cmluZyBvciAidGhyb3dzIFRIUk9XUyIuCittNF9kZWZpbmUoW2I0X21heWJlX3Rocm93c10sCisJICBbbTRfaWZ2YWwoJDEsIFt0aHJvd3MgJDFdKV0pCmRpZmYgLS1naXQgYS9kYXRhL2xhbHIxLmNjIGIvZGF0YS9sYWxyMS5jYwppbmRleCBhYmNkY2Q1Li4yMzdiMjQ2IDEwMDY0NAotLS0gYS9kYXRhL2xhbHIxLmNjCisrKyBiL2RhdGEvbGFscjEuY2MKQEAgLTEsMTI1ICsxLDgxIEBACi1tNF9kaXZlcnQoLTEpCi0KICMgQysrIHNrZWxldG9uIGZvciBCaXNvbgogCi0jIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDAyLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKICMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQorIwogIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCisjCiAjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSMgMDIxMTAtMTMwMSAgVVNBCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCiBtNF9pbmNsdWRlKGI0X3BrZ2RhdGFkaXIvW2MrKy5tNF0pCiAKK200X2RlZmluZShbYjRfcGFyc2VyX2NsYXNzX25hbWVdLAorICAgICAgICAgIFtiNF9wZXJjZW50X2RlZmluZV9nZXQoW1twYXJzZXJfY2xhc3NfbmFtZV1dKV0pCisKICMgVGhlIGhlYWRlciBpcyBtYW5kYXRvcnkuCiBiNF9kZWZpbmVzX2lmKFtdLAotICAgICAgICAgICAgICBbbTRfZmF0YWwoYjRfc2tlbGV0b25bOiB1c2luZyAlZGVmaW5lcyBpcyBtYW5kYXRvcnldKV0pCisgICAgICAgICAgICAgIFtiNF9mYXRhbChbYjRfc2tlbGV0b25bOiB1c2luZyAlJWRlZmluZXMgaXMgbWFuZGF0b3J5XV0pXSkKIAotIyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5LgotbTRfZGVmaW5lKFtiNF9sb2NhdGlvbl9jb25zdHJ1Y3RvcnNdKQotbTRfaW5jbHVkZShiNF9wa2dkYXRhZGlyL1tsb2NhdGlvbi5jY10pCitiNF9wZXJjZW50X2RlZmluZV9pZmRlZihbW2FwaS5sb2NhdGlvbi50eXBlXV0sIFtdLAorICBbIyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorICBtNF9kZWZpbmUoW2I0X2xvY2F0aW9uX2NvbnN0cnVjdG9yc10pCisgIG00X2luY2x1ZGUoYjRfcGtnZGF0YWRpci9bbG9jYXRpb24uY2NdKV0pCittNF9pbmNsdWRlKGI0X3BrZ2RhdGFkaXIvW3N0YWNrLmhoXSkKIAotIyBXZSBkbyB3YW50IE00IGV4cGFuc2lvbiBhZnRlciAjIGZvciBDUFAgbWFjcm9zLgotbTRfY2hhbmdlY29tKCkKLW00X2RpdmVydCgwKWRubAogYjRfZGVmaW5lc19pZigKLVtAb3V0cHV0IEBvdXRwdXRfaGVhZGVyX25hbWVACitbYjRfb3V0cHV0X2JlZ2luKFtiNF9zcGVjX2RlZmluZXNfZmlsZV0pCiBiNF9jb3B5cmlnaHQoW1NrZWxldG9uIGludGVyZmFjZSBmb3IgQmlzb24gTEFMUigxKSBwYXJzZXJzIGluIEMrK10sCi0gIFsyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2XSkKLWRubCBGSVhNRTogVGhpcyBpcyB3cm9uZywgd2Ugd2FudCBjb21wdXRlZCBoZWFkZXIgZ3VhcmRzLgorICAgICAgICAgICAgIFsyMDAyLTIwMTJdKQogWworLyoqCisgKiogXGZpbGUgXWI0X3NwZWNfZGVmaW5lc19maWxlWworICoqIERlZmluZSB0aGUgXWI0X25hbWVzcGFjZV9yZWZbOjpwYXJzZXIgY2xhc3MuCisgKi8KKwogLyogQysrIExBTFIoMSkgcGFyc2VyIHNrZWxldG9uIHdyaXR0ZW4gYnkgQWtpbSBEZW1haWxsZS4gICovCiAKLSNpZm5kZWYgUEFSU0VSX0hFQURFUl9ICi0jIGRlZmluZSBQQVJTRVJfSEVBREVSX0gKK11iNF9jcHBfZ3VhcmRfb3BlbihbYjRfc3BlY19kZWZpbmVzX2ZpbGVdKVsKKworXWI0X3BlcmNlbnRfY29kZV9nZXQoW1tyZXF1aXJlc11dKVsKIAogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDxpb3N0cmVhbT4KICNpbmNsdWRlICJzdGFjay5oaCIKK11iNF9wZXJjZW50X2RlZmluZV9pZmRlZihbW2FwaS5sb2NhdGlvbi50eXBlXV0sIFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtbI2luY2x1ZGUgImxvY2F0aW9uLmhoIl1dKVsKIAotbmFtZXNwYWNlIF1iNF9uYW1lc3BhY2VbCi17Ci0gIGNsYXNzIHBvc2l0aW9uOwotICBjbGFzcyBsb2NhdGlvbjsKLX0KK11iNF9ZWURFQlVHX2RlZmluZVsKIAotLyogRmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi1dYjRfcHJlX3Byb2xvZ3VlWwotCi1dLyogTGluZSBfX2xpbmVfXyBvZiBsYWxyMS5jYy4gICovCi1iNF9zeW5jbGluZShbQG9saW5lQF0sIFtAb2ZpbGVAXSlbCi0KLV1kbmwgSW5jbHVkZSBsb2NhdGlvbi5oaCBoZXJlOiBpdCBtaWdodCBkZXBlbmQgb24gaGVhZGVycyBpbmNsdWRlZCBhYm92ZS4KLVsjaW5jbHVkZSAibG9jYXRpb24uaGgiCi0KLS8qIEVuYWJsaW5nIHRyYWNlcy4gICovCi0jaWZuZGVmIFlZREVCVUcKLSMgZGVmaW5lIFlZREVCVUcgXWI0X2RlYnVnX2ZsYWdbCi0jZW5kaWYKLQotLyogRW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCi0jaWZkZWYgWVlFUlJPUl9WRVJCT1NFCi0jIHVuZGVmIFlZRVJST1JfVkVSQk9TRQotIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKLSNlbHNlCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgXWI0X2Vycm9yX3ZlcmJvc2VfZmxhZ1sKLSNlbmRpZgotCi0vKiBFbmFibGluZyB0aGUgdG9rZW4gdGFibGUuICAqLwotI2lmbmRlZiBZWVRPS0VOX1RBQkxFCi0jIGRlZmluZSBZWVRPS0VOX1RBQkxFIF1iNF90b2tlbl90YWJsZVsKLSNlbmRpZgotCi0vKiBZWUxMT0NfREVGQVVMVCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20gUkhTWzFdIHRvIFJIU1tOXS4KLSAgIElmIE4gaXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0aGUgZW1wdHkgbG9jYXRpb24gd2hpY2ggZW5kcwotICAgdGhlIHByZXZpb3VzIHN5bWJvbDogUkhTWzBdIChhbHdheXMgZGVmaW5lZCkuICAqLwotCi0jaWZuZGVmIFlZTExPQ19ERUZBVUxUCi0jIGRlZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pCQlcCi1kbyB7CQkJCQkJCVwKLSAgaWYgKE4pCQkJCQkJXAotICAgIHsJCQkJCQkJXAotICAgICAgKEN1cnJlbnQpLmJlZ2luID0gKFJocylbMV0uYmVnaW47CQkJXAotICAgICAgKEN1cnJlbnQpLmVuZCAgID0gKFJocylbTl0uZW5kOwkJCVwKLSAgICB9CQkJCQkJCVwKLSAgZWxzZQkJCQkJCQlcCi0gICAgewkJCQkJCQlcCi0gICAgICAoQ3VycmVudCkuYmVnaW4gPSAoQ3VycmVudCkuZW5kID0gKFJocylbMF0uZW5kOwlcCi0gICAgfQkJCQkJCQlcCi19IHdoaWxlIChmYWxzZSkKLSNlbmRpZgotCi1uYW1lc3BhY2UgXWI0X25hbWVzcGFjZVsKLXsKK11iNF9uYW1lc3BhY2Vfb3BlblsKIAogICAvLy8gQSBCaXNvbiBwYXJzZXIuCiAgIGNsYXNzIF1iNF9wYXJzZXJfY2xhc3NfbmFtZVsKICAgewogICBwdWJsaWM6CiAgICAgLy8vIFN5bWJvbCBzZW1hbnRpYyB2YWx1ZXMuCi0jaWZuZGVmIFlZU1RZUEUKKyNpZm5kZWYgXWI0X2FwaV9QUkVGSVhbU1RZUEUKIF1tNF9pZmRlZihbYjRfc3R5cGVdLAogWyAgICB1bmlvbiBzZW1hbnRpY190eXBlCi1iNF9zdHlwZQotLyogTGluZSBfX2xpbmVfXyBvZiBsYWxyMS5jYy4gICovCi1iNF9zeW5jbGluZShbQG9saW5lQF0sIFtAb2ZpbGVAXSkKLQk7XSwKLVsgICAgdHlwZWRlZiBpbnQgc2VtYW50aWNfdHlwZTtdKVsKKyAgICB7CitiNF91c2VyX3N0eXBlCisgICAgfTtdLAorW200X2lmKGI0X3RhZ19zZWVuX2ZsYWcsIDAsCitbWyAgICB0eXBlZGVmIGludCBzZW1hbnRpY190eXBlO11dLAorW1sgICAgdHlwZWRlZiBdYjRfYXBpX1BSRUZJWFtTVFlQRSBzZW1hbnRpY190eXBlO11dKV0pWwogI2Vsc2UKLSAgICB0eXBlZGVmIFlZU1RZUEUgc2VtYW50aWNfdHlwZTsKKyAgICB0eXBlZGVmIF1iNF9hcGlfUFJFRklYW1NUWVBFIHNlbWFudGljX3R5cGU7CiAjZW5kaWYKICAgICAvLy8gU3ltYm9sIGxvY2F0aW9ucy4KLSAgICB0eXBlZGVmIF1iNF9sb2NhdGlvbl90eXBlWyBsb2NhdGlvbl90eXBlOworICAgIHR5cGVkZWYgXWI0X3BlcmNlbnRfZGVmaW5lX2dldChbW2FwaS5sb2NhdGlvbi50eXBlXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbbG9jYXRpb25dXSlbIGxvY2F0aW9uX3R5cGU7CiAgICAgLy8vIFRva2Vucy4KICAgICBzdHJ1Y3QgdG9rZW4KICAgICB7CkBAIC0xMzYsNiArOTIsNyBAQAogICAgIC8vLyBccmV0dXJucyAgMCBpZmYgcGFyc2luZyBzdWNjZWVkZWQuCiAgICAgdmlydHVhbCBpbnQgcGFyc2UgKCk7CiAKKyNpZiBdYjRfYXBpX1BSRUZJWFtERUJVRwogICAgIC8vLyBUaGUgY3VycmVudCBkZWJ1Z2dpbmcgc3RyZWFtLgogICAgIHN0ZDo6b3N0cmVhbSYgZGVidWdfc3RyZWFtICgpIGNvbnN0OwogICAgIC8vLyBTZXQgdGhlIGN1cnJlbnQgZGVidWdnaW5nIHN0cmVhbS4KQEAgLTE0Nyw2ICsxMDQsNyBAQAogICAgIGRlYnVnX2xldmVsX3R5cGUgZGVidWdfbGV2ZWwgKCkgY29uc3Q7CiAgICAgLy8vIFNldCB0aGUgY3VycmVudCBkZWJ1Z2dpbmcgbGV2ZWwuCiAgICAgdm9pZCBzZXRfZGVidWdfbGV2ZWwgKGRlYnVnX2xldmVsX3R5cGUgbCk7CisjZW5kaWYKIAogICBwcml2YXRlOgogICAgIC8vLyBSZXBvcnQgYSBzeW50YXggZXJyb3IuCkBAIC0xNTYsMTEgKzExNCwxMCBAQAogCiAgICAgLy8vIEdlbmVyYXRlIGFuIGVycm9yIG1lc3NhZ2UuCiAgICAgLy8vIFxwYXJhbSBzdGF0ZSAgIHRoZSBzdGF0ZSB3aGVyZSB0aGUgZXJyb3Igb2NjdXJyZWQuCi0gICAgLy8vIFxwYXJhbSB0b2sgICAgIHRoZSBsb29rLWFoZWFkIHRva2VuLgotICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgeXlzeW50YXhfZXJyb3JfIChpbnQgeXlzdGF0ZV1kbmwKLWI0X2Vycm9yX3ZlcmJvc2VfaWYoWywgaW50IHRva10pWyk7CisgICAgLy8vIFxwYXJhbSB0b2sgICAgIHRoZSBsb29rYWhlYWQgdG9rZW4uCisgICAgdmlydHVhbCBzdGQ6OnN0cmluZyB5eXN5bnRheF9lcnJvcl8gKGludCB5eXN0YXRlLCBpbnQgdG9rKTsKIAotI2lmIFlZREVCVUcKKyNpZiBdYjRfYXBpX1BSRUZJWFtERUJVRwogICAgIC8vLyBcYnJpZWYgUmVwb3J0IGEgc3ltYm9sIHZhbHVlIG9uIHRoZSBkZWJ1ZyBzdHJlYW0uCiAgICAgLy8vIFxwYXJhbSB5eXR5cGUgICAgICAgVGhlIHRva2VuIHR5cGUuCiAgICAgLy8vIFxwYXJhbSB5eXZhbHVlcCAgICAgSXRzIHNlbWFudGljIHZhbHVlLgpAQCAtMTc1LDcgKzEzMiw3IEBACiAgICAgdmlydHVhbCB2b2lkIHl5X3N5bWJvbF9wcmludF8gKGludCB5eXR5cGUsCiAJCQkJICAgY29uc3Qgc2VtYW50aWNfdHlwZSogeXl2YWx1ZXAsCiAJCQkJICAgY29uc3QgbG9jYXRpb25fdHlwZSogeXlsb2NhdGlvbnApOwotI2VuZGlmIC8qICEgWVlERUJVRyAqLworI2VuZGlmCiAKIAogICAgIC8vLyBTdGF0ZSBudW1iZXJzLgpAQCAtMTk0LDYgKzE1MSwxNCBAQAogICAgIC8vLyBUaGUgbG9jYXRpb24gc3RhY2suCiAgICAgbG9jYXRpb25fc3RhY2tfdHlwZSB5eWxvY2F0aW9uX3N0YWNrXzsKIAorICAgIC8vLyBXaGV0aGVyIHRoZSBnaXZlbiBcYyB5eXBhY3RfIHZhbHVlIGluZGljYXRlcyBhIGRlZmF1bHRlZCBzdGF0ZS4KKyAgICAvLy8gXHBhcmFtIHl5dmFsdWUgICB0aGUgdmFsdWUgdG8gY2hlY2sKKyAgICBzdGF0aWMgYm9vbCB5eV9wYWN0X3ZhbHVlX2lzX2RlZmF1bHRfIChpbnQgeXl2YWx1ZSk7CisKKyAgICAvLy8gV2hldGhlciB0aGUgZ2l2ZW4gXGMgeXl0YWJsZV8gdmFsdWUgaW5kaWNhdGVzIGEgc3ludGF4IGVycm9yLgorICAgIC8vLyBccGFyYW0geXl2YWx1ZSAgIHRoZSB2YWx1ZSB0byBjaGVjaworICAgIHN0YXRpYyBib29sIHl5X3RhYmxlX3ZhbHVlX2lzX2Vycm9yXyAoaW50IHl5dmFsdWUpOworCiAgICAgLy8vIEludGVybmFsIHN5bWJvbCBudW1iZXJzLgogICAgIHR5cGVkZWYgXWI0X2ludF90eXBlX2ZvcihbYjRfdHJhbnNsYXRlXSlbIHRva2VuX251bWJlcl90eXBlOwogICAgIC8qIFRhYmxlcy4gICovCkBAIC0yMDEsNyArMTY2LDcgQEAKICAgICBzdGF0aWMgY29uc3QgXWI0X2ludF90eXBlX2ZvcihbYjRfcGFjdF0pWyB5eXBhY3RfW107CiAgICAgc3RhdGljIGNvbnN0IF1iNF9pbnRfdHlwZShiNF9wYWN0X25pbmYsIGI0X3BhY3RfbmluZilbIHl5cGFjdF9uaW5mXzsKIAotICAgIC8vLyBGb3IgYSBzdGF0ZSwgZGVmYXVsdCBydWxlIHRvIHJlZHVjZS4KKyAgICAvLy8gRm9yIGEgc3RhdGUsIGRlZmF1bHQgcmVkdWN0aW9uIG51bWJlci4KICAgICAvLy8gVW5sZXNzXGEgIHl5dGFibGVfIHNwZWNpZmllcyBzb21ldGhpbmcgZWxzZSB0byBkby4KICAgICAvLy8gWmVybyBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4KICAgICBzdGF0aWMgY29uc3QgXWI0X2ludF90eXBlX2ZvcihbYjRfZGVmYWN0XSlbIHl5ZGVmYWN0X1tdOwpAQCAtMjI1LDE5ICsxOTAsMTUgQEAKICAgICAvLy8gRm9yIGEgcnVsZSwgaXRzIExIUy4KICAgICBzdGF0aWMgY29uc3QgXWI0X2ludF90eXBlX2ZvcihbYjRfcjFdKVsgeXlyMV9bXTsKICAgICAvLy8gRm9yIGEgcnVsZSwgaXRzIFJIUyBsZW5ndGguCi0gICAgc3RhdGljIGNvbnN0IF1iNF9pbnRfdHlwZV9mb3IoW2I0X3IyXSlbIHl5cjJfW107CisgICAgc3RhdGljIGNvbnN0IF1iNF9pbnRfdHlwZV9mb3IoW2I0X3IyXSlbIHl5cjJfW107IF1iNF9lcnJvcl92ZXJib3NlX2lmKFsKIAotI2lmIFlZREVCVUcgfHwgWVlFUlJPUl9WRVJCT1NFIHx8IFlZVE9LRU5fVEFCTEUKKyAgICAvLy8gQ29udmVydCB0aGUgc3ltYm9sIG5hbWUgXGEgbiB0byBhIGZvcm0gc3VpdGFibGUgZm9yIGEgZGlhZ25vc3RpYy4KKyAgICBzdGF0aWMgc3RkOjpzdHJpbmcgeXl0bmFtZXJyXyAoY29uc3QgY2hhciAqbik7XSlbCisKK11iNF90b2tlbl90YWJsZV9pZihbXSwgW1sjaWYgXWI0X2FwaV9QUkVGSVhbREVCVUddXSlbCiAgICAgLy8vIEZvciBhIHN5bWJvbCwgaXRzIG5hbWUgaW4gY2xlYXIuCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHl5dG5hbWVfW107Ci0jZW5kaWYKLQotI2lmIFlZRVJST1JfVkVSQk9TRQotICAgIC8vLyBDb252ZXJ0IHRoZSBzeW1ib2wgbmFtZSBcYSBuIHRvIGEgZm9ybSBzdWl0YWJsZSBmb3IgYSBkaWFnbm9zdGljLgotICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgeXl0bmFtZXJyXyAoY29uc3QgY2hhciAqbik7Ci0jZW5kaWYKLQotI2lmIFlZREVCVUcKK11iNF90b2tlbl90YWJsZV9pZihbWyNpZiBdYjRfYXBpX1BSRUZJWFtERUJVR11dKVsKICAgICAvLy8gQSB0eXBlIHRvIHN0b3JlIHN5bWJvbCBudW1iZXJzIGFuZCAtMS4KICAgICB0eXBlZGVmIF1iNF9pbnRfdHlwZV9mb3IoW2I0X3Joc10pWyByaHNfbnVtYmVyX3R5cGU7CiAgICAgLy8vIEEgYC0xJy1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4KQEAgLTI1Miw2ICsyMTMsMTAgQEAKICAgICB2aXJ0dWFsIHZvaWQgeXlfcmVkdWNlX3ByaW50XyAoaW50IHIpOwogICAgIC8vLyBQcmludCB0aGUgc3RhdGUgc3RhY2sgb24gdGhlIGRlYnVnIHN0cmVhbS4KICAgICB2aXJ0dWFsIHZvaWQgeXlzdGFja19wcmludF8gKCk7CisKKyAgICAvKiBEZWJ1Z2dpbmcuICAqLworICAgIGludCB5eWRlYnVnXzsKKyAgICBzdGQ6Om9zdHJlYW0qIHl5Y2RlYnVnXzsKICNlbmRpZgogCiAgICAgLy8vIENvbnZlcnQgYSBzY2FubmVyIHRva2VuIG51bWJlciBcYSB0IHRvIGEgc3ltYm9sIG51bWJlci4KQEAgLTI1OSw2ICsyMjQsNyBAQAogCiAgICAgLy8vIFxicmllZiBSZWNsYWltIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB0byBhIHN5bWJvbC4KICAgICAvLy8gXHBhcmFtIHl5bXNnICAgICAgICBXaHkgdGhpcyB0b2tlbiBpcyByZWNsYWltZWQuCisgICAgLy8vICAgICAgICAgICAgICAgICAgICAgSWYgbnVsbCwgZG8gbm90IGRpc3BsYXkgdGhlIHN5bWJvbCwganVzdCBmcmVlIGl0LgogICAgIC8vLyBccGFyYW0geXl0eXBlICAgICAgIFRoZSBzeW1ib2wgdHlwZS4KICAgICAvLy8gXHBhcmFtIHl5dmFsdWVwICAgICBJdHMgc2VtYW50aWMgdmFsdWUuCiAgICAgLy8vIFxwYXJhbSB5eWxvY2F0aW9ucCAgSXRzIGxvY2F0aW9uLgpAQCAtMjgyLDQzICsyNDgsNDcgQEAKICAgICBzdGF0aWMgY29uc3QgaW50IHl5bnRva2Vuc187CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB5eXVzZXJfdG9rZW5fbnVtYmVyX21heF87CiAgICAgc3RhdGljIGNvbnN0IHRva2VuX251bWJlcl90eXBlIHl5dW5kZWZfdG9rZW5fOwotCi0gICAgLyogRGVidWdnaW5nLiAgKi8KLSAgICBpbnQgeXlkZWJ1Z187Ci0gICAgc3RkOjpvc3RyZWFtKiB5eWNkZWJ1Z187Ci0KIF1iNF9wYXJzZV9wYXJhbV92YXJzWwogICB9OwotfQorXWI0X25hbWVzcGFjZV9jbG9zZVsKIAotXW00X2lmc2V0KFtiNF9nbG9iYWxfdG9rZW5zX2FuZF95eXN0eXBlXSwKK11iNF9wZXJjZW50X2RlZmluZV9mbGFnX2lmKFtbZ2xvYmFsX3Rva2Vuc19hbmRfeXlzdHlwZV1dLAogW2I0X3Rva2VuX2RlZmluZXMoYjRfdG9rZW5zKQogCi0jaWZuZGVmIFlZU1RZUEUKKyNpZm5kZWYgXWI0X2FwaV9QUkVGSVhbU1RZUEUKICAvKiBSZWRpcmVjdGlvbiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gICovCi0jIGRlZmluZSBZWVNUWVBFIGI0X25hbWVzcGFjZTo6YjRfcGFyc2VyX2NsYXNzX25hbWU6OnNlbWFudGljX3R5cGUKKyMgZGVmaW5lIF1iNF9hcGlfUFJFRklYW1NUWVBFIGI0X25hbWVzcGFjZV9yZWY6OmI0X3BhcnNlcl9jbGFzc19uYW1lOjpzZW1hbnRpY190eXBlCiAjZW5kaWYKIF0pWwotI2VuZGlmIC8qICEgZGVmaW5lZCBQQVJTRVJfSEVBREVSX0ggKi9dCi1dKWRubAotQG91dHB1dCBAb3V0cHV0X3BhcnNlcl9uYW1lQAorXWI0X3BlcmNlbnRfY29kZV9nZXQoW1twcm92aWRlc11dKVsKK11iNF9jcHBfZ3VhcmRfY2xvc2UoW2I0X3NwZWNfZGVmaW5lc19maWxlXSkKK2I0X291dHB1dF9lbmQoKQorXSkKKworCitiNF9vdXRwdXRfYmVnaW4oW2I0X3BhcnNlcl9maWxlX25hbWVdKQogYjRfY29weXJpZ2h0KFtTa2VsZXRvbiBpbXBsZW1lbnRhdGlvbiBmb3IgQmlzb24gTEFMUigxKSBwYXJzZXJzIGluIEMrK10sCi0gIFsyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2XSkKKyAgICAgICAgICAgICBbMjAwMi0yMDEyXSkKK2I0X3BlcmNlbnRfY29kZV9nZXQoW1t0b3BdXSlbXWRubAogbTRfaWYoYjRfcHJlZml4LCBbeXldLCBbXSwKIFsKIC8vIFRha2UgdGhlIG5hbWUgcHJlZml4IGludG8gYWNjb3VudC4KLSNkZWZpbmUgeXlsZXggICBiNF9wcmVmaXhbXWxleF0pCi1iNF9kZWZpbmVzX2lmKFsKLSNpbmNsdWRlIEBvdXRwdXRfaGVhZGVyX25hbWVAXSlbCisjZGVmaW5lIHl5bGV4ICAgYjRfcHJlZml4W11sZXhdKVsKKworLyogRmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCitdYjRfdXNlcl9wcmVfcHJvbG9ndWVbCisKK11iNF9kZWZpbmVzX2lmKFtbCisjaW5jbHVkZSAiQGJhc2VuYW1lKF1iNF9zcGVjX2RlZmluZXNfZmlsZVtAKSJdXSlbCiAKIC8qIFVzZXIgaW1wbGVtZW50YXRpb24gcHJvbG9ndWUuICAqLwotXWI0X3Bvc3RfcHJvbG9ndWVbCitdYjRfdXNlcl9wb3N0X3Byb2xvZ3VlWworXWI0X3BlcmNlbnRfY29kZV9nZXRbCiAKLV0vKiBMaW5lIF9fbGluZV9fIG9mIGxhbHIxLmNjLiAgKi8KLWI0X3N5bmNsaW5lKFtAb2xpbmVAXSwgW0BvZmlsZUBdKVsKK11iNF9udWxsX2RlZmluZVsKIAogI2lmbmRlZiBZWV8KLSMgaWYgWVlFTkFCTEVfTkxTCisjIGlmIGRlZmluZWQgWVlFTkFCTEVfTkxTICYmIFlZRU5BQkxFX05MUwogIyAgaWYgRU5BQkxFX05MUwogIyAgIGluY2x1ZGUgPGxpYmludGwuaD4gLyogRklYTUU6IElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KICMgICBkZWZpbmUgWVlfKG1zZ2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRpbWUiLCBtc2dpZCkKQEAgLTMyOSwxNiArMjk5LDE3IEBACiAjIGVuZGlmCiAjZW5kaWYKIAorI2RlZmluZSBZWVJIU0xPQyhSaHMsIEspICgoUmhzKVtLXSkKK11iNF95eWxsb2NfZGVmYXVsdF9kZWZpbmVbCisKIC8qIFN1cHByZXNzIHVudXNlZC12YXJpYWJsZSB3YXJuaW5ncyBieSAidXNpbmciIEUuICAqLwogI2RlZmluZSBZWVVTRShlKSAoKHZvaWQpIChlKSkKIAotLyogQSBwc2V1ZG8gb3N0cmVhbSB0aGF0IHRha2VzIHl5ZGVidWdfIGludG8gYWNjb3VudC4gICovCi0jIGRlZmluZSBZWUNERUJVRwkJCQkJCQlcCi0gIGZvciAoYm9vbCB5eWRlYnVnY29uZF8gPSB5eWRlYnVnXzsgeXlkZWJ1Z2NvbmRfOyB5eWRlYnVnY29uZF8gPSBmYWxzZSkJXAotICAgICgqeXljZGVidWdfKQotCiAvKiBFbmFibGUgZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICovCi0jaWYgWVlERUJVRworI2lmIF1iNF9hcGlfUFJFRklYW0RFQlVHCisKKy8qIEEgcHNldWRvIG9zdHJlYW0gdGhhdCB0YWtlcyB5eWRlYnVnXyBpbnRvIGFjY291bnQuICAqLworIyBkZWZpbmUgWVlDREVCVUcgaWYgKHl5ZGVidWdfKSAoKnl5Y2RlYnVnXykKIAogIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCVwKIGRvIHsJCQkJCQkJXApAQCAtMzYyLDIxICszMzMsMjQgQEAKICAgICB5eXN0YWNrX3ByaW50XyAoKTsJCQlcCiB9IHdoaWxlIChmYWxzZSkKIAotI2Vsc2UgLyogIVlZREVCVUcgKi8KKyNlbHNlIC8qICFdYjRfYXBpX1BSRUZJWFtERUJVRyAqLwogCi0jIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikKLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQotIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoKQorIyBkZWZpbmUgWVlDREVCVUcgaWYgKGZhbHNlKSBzdGQ6OmNlcnIKKyMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKSBZWVVTRShUeXBlKQorIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpICAgICAgICBzdGF0aWNfY2FzdDx2b2lkPigwKQorIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoKSAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2b2lkPigwKQogCi0jZW5kaWYgLyogIVlZREVCVUcgKi8KKyNlbmRpZiAvKiAhXWI0X2FwaV9QUkVGSVhbREVCVUcgKi8KKworI2RlZmluZSB5eWVycm9rCQkoeXllcnJzdGF0dXNfID0gMCkKKyNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIgPSB5eWVtcHR5XykKIAogI2RlZmluZSBZWUFDQ0VQVAlnb3RvIHl5YWNjZXB0bGFiCiAjZGVmaW5lIFlZQUJPUlQJCWdvdG8geXlhYm9ydGxhYgogI2RlZmluZSBZWUVSUk9SCQlnb3RvIHl5ZXJyb3JsYWIKKyNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzXykKIAotbmFtZXNwYWNlIF1iNF9uYW1lc3BhY2VbCi17Ci0jaWYgWVlFUlJPUl9WRVJCT1NFCitdYjRfbmFtZXNwYWNlX29wZW5bXWI0X2Vycm9yX3ZlcmJvc2VfaWYoW1sKIAogICAvKiBSZXR1cm4gWVlTVFIgYWZ0ZXIgc3RyaXBwaW5nIGF3YXkgdW5uZWNlc3NhcnkgcXVvdGVzIGFuZAogICAgICBiYWNrc2xhc2hlcywgc28gdGhhdCBpdCdzIHN1aXRhYmxlIGZvciB5eWVycm9yLiAgVGhlIGhldXJpc3RpYyBpcwpAQCAtNDE0LDEzICszODgsMTUgQEAKIAogICAgIHJldHVybiB5eXN0cjsKICAgfQotCi0jZW5kaWYKK11dKVsKIAogICAvLy8gQnVpbGQgYSBwYXJzZXIgb2JqZWN0LgotICBdYjRfcGFyc2VyX2NsYXNzX25hbWU6OmI0X3BhcnNlcl9jbGFzc19uYW1lWyAoXWI0X3BhcnNlX3BhcmFtX2RlY2xbKQotICAgIDogeXlkZWJ1Z18gKGZhbHNlKSwKLSAgICAgIHl5Y2RlYnVnXyAoJnN0ZDo6Y2VycildYjRfcGFyc2VfcGFyYW1fY29uc1sKKyAgXWI0X3BhcnNlcl9jbGFzc19uYW1lOjpiNF9wYXJzZXJfY2xhc3NfbmFtZVsgKF1iNF9wYXJzZV9wYXJhbV9kZWNsWyldbTRfaWZzZXQoW2I0X3BhcnNlX3BhcmFtXSwgWworICAgIDpdKVsKKyNpZiBdYjRfYXBpX1BSRUZJWFtERUJVRworICAgIF1tNF9pZnNldChbYjRfcGFyc2VfcGFyYW1dLCBbICBdLCBbIDpdKVt5eWRlYnVnXyAoZmFsc2UpLAorICAgICAgeXljZGVidWdfICgmc3RkOjpjZXJyKV1tNF9pZnNldChbYjRfcGFyc2VfcGFyYW1dLCBbLF0pWworI2VuZGlmXWI0X3BhcnNlX3BhcmFtX2NvbnNbCiAgIHsKICAgfQogCkBAIC00MjgsNyArNDA0LDcgQEAKICAgewogICB9CiAKLSNpZiBZWURFQlVHCisjaWYgXWI0X2FwaV9QUkVGSVhbREVCVUcKICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KICAgfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKICAgYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTQzOSw2ICs0MTUsOSBAQAogICB7CiAgICAgWVlVU0UgKHl5bG9jYXRpb25wKTsKICAgICBZWVVTRSAoeXl2YWx1ZXApOworICAgIHN0ZDo6b3N0cmVhbSYgeXlvID0gZGVidWdfc3RyZWFtICgpOworICAgIHN0ZDo6b3N0cmVhbSYgeXlvdXRwdXQgPSB5eW87CisgICAgWVlVU0UgKHl5b3V0cHV0KTsKICAgICBzd2l0Y2ggKHl5dHlwZSkKICAgICAgIHsKICAgXW00X21hcChbYjRfc3ltYm9sX2FjdGlvbnNdLCBtNF9kZWZuKFtiNF9zeW1ib2xfcHJpbnRlcnNdKSlkbmwKQEAgLTQ1OCw3ICs0MzcsNyBAQAogICAgIHl5X3N5bWJvbF92YWx1ZV9wcmludF8gKHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wKTsKICAgICAqeXljZGVidWdfIDw8ICcpJzsKICAgfQotI2VuZGlmIC8qICEgWVlERUJVRyAqLworI2VuZGlmCiAKICAgdm9pZAogICBdYjRfcGFyc2VyX2NsYXNzX25hbWVbOjp5eWRlc3RydWN0XyAoY29uc3QgY2hhciogeXltc2csCkBAIC00NjgsNyArNDQ3LDggQEAKICAgICBZWVVTRSAoeXltc2cpOwogICAgIFlZVVNFICh5eXZhbHVlcCk7CiAKLSAgICBZWV9TWU1CT0xfUFJJTlQgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCk7CisgICAgaWYgKHl5bXNnKQorICAgICAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnApOwogCiAgICAgc3dpdGNoICh5eXR5cGUpCiAgICAgICB7CkBAIC00ODYsNiArNDY2LDcgQEAKICAgICB5eWxvY2F0aW9uX3N0YWNrXy5wb3AgKG4pOwogICB9CiAKKyNpZiBdYjRfYXBpX1BSRUZJWFtERUJVRwogICBzdGQ6Om9zdHJlYW0mCiAgIF1iNF9wYXJzZXJfY2xhc3NfbmFtZVs6OmRlYnVnX3N0cmVhbSAoKSBjb25zdAogICB7CkBAIC01MTAsMzAgKzQ5MSw0MyBAQAogICB7CiAgICAgeXlkZWJ1Z18gPSBsOwogICB9CisjZW5kaWYKIAorICBpbmxpbmUgYm9vbAorICBdYjRfcGFyc2VyX2NsYXNzX25hbWVbOjp5eV9wYWN0X3ZhbHVlX2lzX2RlZmF1bHRfIChpbnQgeXl2YWx1ZSkKKyAgeworICAgIHJldHVybiB5eXZhbHVlID09IHl5cGFjdF9uaW5mXzsKKyAgfQorCisgIGlubGluZSBib29sCisgIF1iNF9wYXJzZXJfY2xhc3NfbmFtZVs6Onl5X3RhYmxlX3ZhbHVlX2lzX2Vycm9yXyAoaW50IHl5dmFsdWUpCisgIHsKKyAgICByZXR1cm4geXl2YWx1ZSA9PSB5eXRhYmxlX25pbmZfOworICB9CiAKICAgaW50CiAgIF1iNF9wYXJzZXJfY2xhc3NfbmFtZVs6OnBhcnNlICgpCiAgIHsKLSAgICAvLy8gTG9vay1haGVhZCBhbmQgbG9vay1haGVhZCBpbiBpbnRlcm5hbCBmb3JtLgorICAgIC8vLyBMb29rYWhlYWQgYW5kIGxvb2thaGVhZCBpbiBpbnRlcm5hbCBmb3JtLgogICAgIGludCB5eWNoYXIgPSB5eWVtcHR5XzsKICAgICBpbnQgeXl0b2tlbiA9IDA7CiAKLSAgICAvKiBTdGF0ZS4gICovCisgICAgLy8gU3RhdGUuCiAgICAgaW50IHl5bjsKICAgICBpbnQgeXlsZW4gPSAwOwogICAgIGludCB5eXN0YXRlID0gMDsKIAotICAgIC8qIEVycm9yIGhhbmRsaW5nLiAgKi8KKyAgICAvLyBFcnJvciBoYW5kbGluZy4KICAgICBpbnQgeXluZXJyc18gPSAwOwogICAgIGludCB5eWVycnN0YXR1c18gPSAwOwogCi0gICAgLy8vIFNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rLWFoZWFkLgotICAgIHNlbWFudGljX3R5cGUgeXlsdmFsOwotICAgIC8vLyBMb2NhdGlvbiBvZiB0aGUgbG9vay1haGVhZC4KKyAgICAvLy8gU2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2thaGVhZC4KKyAgICBzdGF0aWMgc2VtYW50aWNfdHlwZSB5eXZhbF9kZWZhdWx0OworICAgIHNlbWFudGljX3R5cGUgeXlsdmFsID0geXl2YWxfZGVmYXVsdDsKKyAgICAvLy8gTG9jYXRpb24gb2YgdGhlIGxvb2thaGVhZC4KICAgICBsb2NhdGlvbl90eXBlIHl5bGxvYzsKICAgICAvLy8gVGhlIGxvY2F0aW9ucyB3aGVyZSB0aGUgZXJyb3Igc3RhcnRlZCBhbmQgZW5kZWQuCi0gICAgbG9jYXRpb24geXllcnJvcl9yYW5nZVsyXTsKKyAgICBsb2NhdGlvbl90eXBlIHl5ZXJyb3JfcmFuZ2VbM107CiAKICAgICAvLy8gJCQuCiAgICAgc2VtYW50aWNfdHlwZSB5eXZhbDsKQEAgLTU0MiwxNyArNTM2LDE3IEBACiAKICAgICBpbnQgeXlyZXN1bHQ7CiAKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91ZCBiZSBjb21wbGV0ZWx5IGluZGVudGVkLiAgSXQgaXMgbm90IHlldCB0bworICAgIC8vIGF2b2lkIGdyYXR1aXRvdXMgY29uZmxpY3RzIHdoZW4gbWVyZ2luZyBpbnRvIHRoZSBtYXN0ZXIgYnJhbmNoLgorICAgIHRyeQorICAgICAgewogICAgIFlZQ0RFQlVHIDw8ICJTdGFydGluZyBwYXJzZSIgPDwgc3RkOjplbmRsOwogCiBdbTRfaWZkZWYoW2I0X2luaXRpYWxfYWN0aW9uXSwgWwotbTRfcHVzaGRlZihbYjRfYXRfZG9sbGFyXSwgICAgIFt5eWxsb2NdKWRubAotbTRfcHVzaGRlZihbYjRfZG9sbGFyX2RvbGxhcl0sIFt5eWx2YWxdKWRubAotICAgIC8qIFVzZXIgaW5pdGlhbGl6YXRpb24gY29kZS4gICovCi0gICAgYjRfaW5pdGlhbF9hY3Rpb24KLW00X3BvcGRlZihbYjRfZG9sbGFyX2RvbGxhcl0pZG5sCi1tNF9wb3BkZWYoW2I0X2F0X2RvbGxhcl0pZG5sCi0gIC8qIExpbmUgX19saW5lX18gb2YgeWFjYy5jLiAgKi8KLWI0X3N5bmNsaW5lKFtAb2xpbmVAXSwgW0BvZmlsZUBdKV0pZG5sCitiNF9kb2xsYXJfcHVzaGRlZihbeXlsdmFsXSwgW10sIFt5eWxsb2NdKWRubAorLyogVXNlciBpbml0aWFsaXphdGlvbiBjb2RlLiAgKi8KK2I0X3VzZXJfaW5pdGlhbF9hY3Rpb24KK2I0X2RvbGxhcl9wb3BkZWZdKVtdZG5sCiAKICAgWyAgLyogSW5pdGlhbGl6ZSB0aGUgc3RhY2tzLiAgVGhlIGluaXRpYWwgc3RhdGUgd2lsbCBiZSBwdXNoZWQgaW4KICAgICAgICB5eW5ld3N0YXRlLCBzaW5jZSB0aGUgbGF0dGVyIGV4cGVjdHMgdGhlIHNlbWFudGljYWwgYW5kIHRoZQpAQCAtNTY4LDI3ICs1NjIsMzEgQEAKICAgeXluZXdzdGF0ZToKICAgICB5eXN0YXRlX3N0YWNrXy5wdXNoICh5eXN0YXRlKTsKICAgICBZWUNERUJVRyA8PCAiRW50ZXJpbmcgc3RhdGUgIiA8PCB5eXN0YXRlIDw8IHN0ZDo6ZW5kbDsKKworICAgIC8qIEFjY2VwdD8gICovCisgICAgaWYgKHl5c3RhdGUgPT0geXlmaW5hbF8pCisgICAgICBnb3RvIHl5YWNjZXB0bGFiOworCiAgICAgZ290byB5eWJhY2t1cDsKIAogICAgIC8qIEJhY2t1cC4gICovCiAgIHl5YmFja3VwOgogCi0gICAgLyogVHJ5IHRvIHRha2UgYSBkZWNpc2lvbiB3aXRob3V0IGxvb2stYWhlYWQuICAqLworICAgIC8qIFRyeSB0byB0YWtlIGEgZGVjaXNpb24gd2l0aG91dCBsb29rYWhlYWQuICAqLwogICAgIHl5biA9IHl5cGFjdF9beXlzdGF0ZV07Ci0gICAgaWYgKHl5biA9PSB5eXBhY3RfbmluZl8pCisgICAgaWYgKHl5X3BhY3RfdmFsdWVfaXNfZGVmYXVsdF8gKHl5bikpCiAgICAgICBnb3RvIHl5ZGVmYXVsdDsKIAotICAgIC8qIFJlYWQgYSBsb29rLWFoZWFkIHRva2VuLiAgKi8KKyAgICAvKiBSZWFkIGEgbG9va2FoZWFkIHRva2VuLiAgKi8KICAgICBpZiAoeXljaGFyID09IHl5ZW1wdHlfKQogICAgICAgewotCVlZQ0RFQlVHIDw8ICJSZWFkaW5nIGEgdG9rZW46ICI7Ci0JeXljaGFyID0gXWI0X2NfZnVuY3Rpb25fY2FsbChbeXlsZXhdLCBbaW50XSwKLQkJCQkgICAgIFtbWVlTVFlQRSpdLCBbJnl5bHZhbF1dW11kbmwKKyAgICAgICAgWVlDREVCVUcgPDwgIlJlYWRpbmcgYSB0b2tlbjogIjsKKyAgICAgICAgeXljaGFyID0gXWI0X2NfZnVuY3Rpb25fY2FsbChbeXlsZXhdLCBbaW50XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYjRfYXBpX1BSRUZJWFtTVFlQRSpdLCBbJnl5bHZhbF1dW11kbmwKIGI0X2xvY2F0aW9uc19pZihbLCBbW2xvY2F0aW9uKl0sIFsmeXlsbG9jXV1dKWRubAogbTRfaWZkZWYoW2I0X2xleF9wYXJhbV0sIFssIF1iNF9sZXhfcGFyYW0pKVs7CiAgICAgICB9CiAKLQogICAgIC8qIENvbnZlcnQgdG9rZW4gdG8gaW50ZXJuYWwgZm9ybS4gICovCiAgICAgaWYgKHl5Y2hhciA8PSB5eWVvZl8pCiAgICAgICB7CkBAIC02MTEsMjIgKzYwOSwxNyBAQAogICAgIHl5biA9IHl5dGFibGVfW3l5bl07CiAgICAgaWYgKHl5biA8PSAwKQogICAgICAgewotCWlmICh5eW4gPT0gMCB8fCB5eW4gPT0geXl0YWJsZV9uaW5mXykKLQlnb3RvIHl5ZXJybGFiOworCWlmICh5eV90YWJsZV92YWx1ZV9pc19lcnJvcl8gKHl5bikpCisJICBnb3RvIHl5ZXJybGFiOwogCXl5biA9IC15eW47CiAJZ290byB5eXJlZHVjZTsKICAgICAgIH0KIAotICAgIC8qIEFjY2VwdD8gICovCi0gICAgaWYgKHl5biA9PSB5eWZpbmFsXykKLSAgICAgIGdvdG8geXlhY2NlcHRsYWI7Ci0KLSAgICAvKiBTaGlmdCB0aGUgbG9vay1haGVhZCB0b2tlbi4gICovCisgICAgLyogU2hpZnQgdGhlIGxvb2thaGVhZCB0b2tlbi4gICovCiAgICAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKIAotICAgIC8qIERpc2NhcmQgdGhlIHRva2VuIGJlaW5nIHNoaWZ0ZWQgdW5sZXNzIGl0IGlzIGVvZi4gICovCi0gICAgaWYgKHl5Y2hhciAhPSB5eWVvZl8pCi0gICAgICB5eWNoYXIgPSB5eWVtcHR5XzsKKyAgICAvKiBEaXNjYXJkIHRoZSB0b2tlbiBiZWluZyBzaGlmdGVkLiAgKi8KKyAgICB5eWNoYXIgPSB5eWVtcHR5XzsKIAogICAgIHl5c2VtYW50aWNfc3RhY2tfLnB1c2ggKHl5bHZhbCk7CiAgICAgeXlsb2NhdGlvbl9zdGFja18ucHVzaCAoeXlsbG9jKTsKQEAgLTY2NCwxOCArNjU3LDMyIEBACiAgICAgZWxzZQogICAgICAgeXl2YWwgPSB5eXNlbWFudGljX3N0YWNrX1swXTsKIAorICAgIC8vIENvbXB1dGUgdGhlIGRlZmF1bHQgQEAkLgogICAgIHsKICAgICAgIHNsaWNlPGxvY2F0aW9uX3R5cGUsIGxvY2F0aW9uX3N0YWNrX3R5cGU+IHNsaWNlICh5eWxvY2F0aW9uX3N0YWNrXywgeXlsZW4pOwogICAgICAgWVlMTE9DX0RFRkFVTFQgKHl5bG9jLCBzbGljZSwgeXlsZW4pOwogICAgIH0KKworICAgIC8vIFBlcmZvcm0gdGhlIHJlZHVjdGlvbi4KICAgICBZWV9SRURVQ0VfUFJJTlQgKHl5bik7CiAgICAgc3dpdGNoICh5eW4pCiAgICAgICB7Ci0JXWI0X2FjdGlvbnMKLSAgICAvKiBMaW5lIF9fbGluZV9fIG9mIGxhbHIxLmNjLiAgKi8KLWI0X3N5bmNsaW5lKFtAb2xpbmVAXSwgW0BvZmlsZUBdKVsKLQlkZWZhdWx0OiBicmVhazsKKyAgICAgICAgXWI0X3VzZXJfYWN0aW9uc1sKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwogICAgICAgfQorCisgICAgLyogVXNlciBzZW1hbnRpYyBhY3Rpb25zIHNvbWV0aW1lcyBhbHRlciB5eWNoYXIsIGFuZCB0aGF0IHJlcXVpcmVzCisgICAgICAgdGhhdCB5eXRva2VuIGJlIHVwZGF0ZWQgd2l0aCB0aGUgbmV3IHRyYW5zbGF0aW9uLiAgV2UgdGFrZSB0aGUKKyAgICAgICBhcHByb2FjaCBvZiB0cmFuc2xhdGluZyBpbW1lZGlhdGVseSBiZWZvcmUgZXZlcnkgdXNlIG9mIHl5dG9rZW4uCisgICAgICAgT25lIGFsdGVybmF0aXZlIGlzIHRyYW5zbGF0aW5nIGhlcmUgYWZ0ZXIgZXZlcnkgc2VtYW50aWMgYWN0aW9uLAorICAgICAgIGJ1dCB0aGF0IHRyYW5zbGF0aW9uIHdvdWxkIGJlIG1pc3NlZCBpZiB0aGUgc2VtYW50aWMgYWN0aW9uCisgICAgICAgaW52b2tlcyBZWUFCT1JULCBZWUFDQ0VQVCwgb3IgWVlFUlJPUiBpbW1lZGlhdGVseSBhZnRlciBhbHRlcmluZworICAgICAgIHl5Y2hhci4gIEluIHRoZSBjYXNlIG9mIFlZQUJPUlQgb3IgWVlBQ0NFUFQsIGFuIGluY29ycmVjdAorICAgICAgIGRlc3RydWN0b3IgbWlnaHQgdGhlbiBiZSBpbnZva2VkIGltbWVkaWF0ZWx5LiAgSW4gdGhlIGNhc2Ugb2YKKyAgICAgICBZWUVSUk9SLCBzdWJzZXF1ZW50IHBhcnNlciBhY3Rpb25zIG1pZ2h0IGxlYWQgdG8gYW4gaW5jb3JyZWN0CisgICAgICAgZGVzdHJ1Y3RvciBjYWxsIG9yIHZlcmJvc2Ugc3ludGF4IGVycm9yIG1lc3NhZ2UgYmVmb3JlIHRoZQorICAgICAgIGxvb2thaGVhZCBpcyB0cmFuc2xhdGVkLiAgKi8KICAgICBZWV9TWU1CT0xfUFJJTlQgKCItPiAkJCA9IiwgeXlyMV9beXluXSwgJnl5dmFsLCAmeXlsb2MpOwogCiAgICAgeXlwb3BfICh5eWxlbik7CkBAIC02OTksMzQgKzcwNiwzOCBAQAogICB8IHl5ZXJybGFiIC0tIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9yIHwKICAgYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgIHl5ZXJybGFiOgorICAgIC8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGxhdGVzdCBsb29rYWhlYWQgdHJhbnNsYXRpb24uICBTZWUgY29tbWVudHMgYXQKKyAgICAgICB1c2VyIHNlbWFudGljIGFjdGlvbnMgZm9yIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4gICovCisgICAgeXl0b2tlbiA9IHl5dHJhbnNsYXRlXyAoeXljaGFyKTsKKwogICAgIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3IuICAqLwogICAgIGlmICgheXllcnJzdGF0dXNfKQogICAgICAgewogCSsreXluZXJyc187Ci0JZXJyb3IgKHl5bGxvYywgeXlzeW50YXhfZXJyb3JfICh5eXN0YXRlXWRubAotYjRfZXJyb3JfdmVyYm9zZV9pZihbLCB5eXRva2VuXSlbKSk7CisJaWYgKHl5Y2hhciA9PSB5eWVtcHR5XykKKwkgIHl5dG9rZW4gPSB5eWVtcHR5XzsKKwllcnJvciAoeXlsbG9jLCB5eXN5bnRheF9lcnJvcl8gKHl5c3RhdGUsIHl5dG9rZW4pKTsKICAgICAgIH0KIAotICAgIHl5ZXJyb3JfcmFuZ2VbMF0gPSB5eWxsb2M7CisgICAgeXllcnJvcl9yYW5nZVsxXSA9IHl5bGxvYzsKICAgICBpZiAoeXllcnJzdGF0dXNfID09IDMpCiAgICAgICB7Ci0JLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KLQkgZXJyb3IsIGRpc2NhcmQgaXQuICAqLwotCi0JaWYgKHl5Y2hhciA8PSB5eWVvZl8pCi0JICB7Ci0JICAvKiBSZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQuICAqLwotCSAgaWYgKHl5Y2hhciA9PSB5eWVvZl8pCi0JICAgIFlZQUJPUlQ7Ci0JICB9Ci0JZWxzZQotCSAgewotCSAgICB5eWRlc3RydWN0XyAoIkVycm9yOiBkaXNjYXJkaW5nIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7Ci0JICAgIHl5Y2hhciA9IHl5ZW1wdHlfOwotCSAgfQorICAgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIGFuCisgICAgICAgICAgIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KKyAgICAgICAgaWYgKHl5Y2hhciA8PSB5eWVvZl8pCisgICAgICAgICAgeworICAgICAgICAgICAgLyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KKyAgICAgICAgICAgIGlmICh5eWNoYXIgPT0geXllb2ZfKQorICAgICAgICAgICAgICBZWUFCT1JUOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHl5ZGVzdHJ1Y3RfICgiRXJyb3I6IGRpc2NhcmRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKKyAgICAgICAgICAgIHl5Y2hhciA9IHl5ZW1wdHlfOworICAgICAgICAgIH0KICAgICAgIH0KIAotICAgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKKyAgICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKICAgICAgICB0b2tlbi4gICovCiAgICAgZ290byB5eWVycmxhYjE7CiAKQEAgLTc0Miw3ICs3NTMsNyBAQAogICAgIGlmIChmYWxzZSkKICAgICAgIGdvdG8geXllcnJvcmxhYjsKIAotICAgIHl5ZXJyb3JfcmFuZ2VbMF0gPSB5eWxvY2F0aW9uX3N0YWNrX1t5eWxlbiAtIDFdOworICAgIHl5ZXJyb3JfcmFuZ2VbMV0gPSB5eWxvY2F0aW9uX3N0YWNrX1t5eWxlbiAtIDFdOwogICAgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKICAgICAgICB0aGlzIFlZRVJST1IuICAqLwogICAgIHl5cG9wXyAoeXlsZW4pOwpAQCAtNzU5LDcgKzc3MCw3IEBACiAgICAgZm9yICg7OykKICAgICAgIHsKIAl5eW4gPSB5eXBhY3RfW3l5c3RhdGVdOwotCWlmICh5eW4gIT0geXlwYWN0X25pbmZfKQorCWlmICgheXlfcGFjdF92YWx1ZV9pc19kZWZhdWx0XyAoeXluKSkKIAl7CiAJICB5eW4gKz0geXl0ZXJyb3JfOwogCSAgaWYgKDAgPD0geXluICYmIHl5biA8PSB5eWxhc3RfICYmIHl5Y2hlY2tfW3l5bl0gPT0geXl0ZXJyb3JfKQpAQCAtNzcyLDkgKzc4Myw5IEBACiAKIAkvKiBQb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbi4gICovCiAJaWYgKHl5c3RhdGVfc3RhY2tfLmhlaWdodCAoKSA9PSAxKQotCVlZQUJPUlQ7CisJICBZWUFCT1JUOwogCi0JeXllcnJvcl9yYW5nZVswXSA9IHl5bG9jYXRpb25fc3RhY2tfWzBdOworCXl5ZXJyb3JfcmFuZ2VbMV0gPSB5eWxvY2F0aW9uX3N0YWNrX1swXTsKIAl5eWRlc3RydWN0XyAoIkVycm9yOiBwb3BwaW5nIiwKIAkJICAgICB5eXN0b3NfW3l5c3RhdGVdLAogCQkgICAgICZ5eXNlbWFudGljX3N0YWNrX1swXSwgJnl5bG9jYXRpb25fc3RhY2tfWzBdKTsKQEAgLTc4MywxOSArNzk0LDE2IEBACiAJWVlfU1RBQ0tfUFJJTlQgKCk7CiAgICAgICB9CiAKLSAgICBpZiAoeXluID09IHl5ZmluYWxfKQotICAgICAgZ290byB5eWFjY2VwdGxhYjsKLQotICAgIHl5ZXJyb3JfcmFuZ2VbMV0gPSB5eWxsb2M7CisgICAgeXllcnJvcl9yYW5nZVsyXSA9IHl5bGxvYzsKICAgICAvLyBVc2luZyBZWUxMT0MgaXMgdGVtcHRpbmcsIGJ1dCB3b3VsZCBjaGFuZ2UgdGhlIGxvY2F0aW9uIG9mCi0gICAgLy8gdGhlIGxvb2stYWhlYWQuICBZWUxPQyBpcyBhdmFpbGFibGUgdGhvdWdoLgotICAgIFlZTExPQ19ERUZBVUxUICh5eWxvYywgKHl5ZXJyb3JfcmFuZ2UgLSAxKSwgMik7CisgICAgLy8gdGhlIGxvb2thaGVhZC4gIFlZTE9DIGlzIGF2YWlsYWJsZSB0aG91Z2guCisgICAgWVlMTE9DX0RFRkFVTFQgKHl5bG9jLCB5eWVycm9yX3JhbmdlLCAyKTsKICAgICB5eXNlbWFudGljX3N0YWNrXy5wdXNoICh5eWx2YWwpOwogICAgIHl5bG9jYXRpb25fc3RhY2tfLnB1c2ggKHl5bG9jKTsKIAogICAgIC8qIFNoaWZ0IHRoZSBlcnJvciB0b2tlbi4gICovCiAgICAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXN0b3NfW3l5bl0sCi0JCSAgICZ5eXNlbWFudGljX3N0YWNrX1swXSwgJnl5bG9jYXRpb25fc3RhY2tfWzBdKTsKKwkJICAgICAmeXlzZW1hbnRpY19zdGFja19bMF0sICZ5eWxvY2F0aW9uX3N0YWNrX1swXSk7CiAKICAgICB5eXN0YXRlID0geXluOwogICAgIGdvdG8geXluZXdzdGF0ZTsKQEAgLTgxMSw3MiArODE5LDE1MiBAQAogICAgIGdvdG8geXlyZXR1cm47CiAKICAgeXlyZXR1cm46Ci0gICAgaWYgKHl5Y2hhciAhPSB5eWVvZl8gJiYgeXljaGFyICE9IHl5ZW1wdHlfKQotICAgICAgeXlkZXN0cnVjdF8gKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOworICAgIGlmICh5eWNoYXIgIT0geXllbXB0eV8pCisgICAgICB7CisgICAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGxhdGVzdCBsb29rYWhlYWQgdHJhbnNsYXRpb24uICBTZWUgY29tbWVudHMKKyAgICAgICAgICAgYXQgdXNlciBzZW1hbnRpYyBhY3Rpb25zIGZvciB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuICAqLworICAgICAgICB5eXRva2VuID0geXl0cmFuc2xhdGVfICh5eWNoYXIpOworICAgICAgICB5eWRlc3RydWN0XyAoIkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwgeXl0b2tlbiwgJnl5bHZhbCwKKyAgICAgICAgICAgICAgICAgICAgICZ5eWxsb2MpOworICAgICAgfQogCiAgICAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAogICAgICAgIHRoaXMgWVlBQk9SVCBvciBZWUFDQ0VQVC4gICovCiAgICAgeXlwb3BfICh5eWxlbik7Ci0gICAgd2hpbGUgKHl5c3RhdGVfc3RhY2tfLmhlaWdodCAoKSAhPSAxKQorICAgIHdoaWxlICgxIDwgeXlzdGF0ZV9zdGFja18uaGVpZ2h0ICgpKQogICAgICAgewotCXl5ZGVzdHJ1Y3RfICgiQ2xlYW51cDogcG9wcGluZyIsCi0JCSAgIHl5c3Rvc19beXlzdGF0ZV9zdGFja19bMF1dLAotCQkgICAmeXlzZW1hbnRpY19zdGFja19bMF0sCi0JCSAgICZ5eWxvY2F0aW9uX3N0YWNrX1swXSk7Ci0JeXlwb3BfICgpOworICAgICAgICB5eWRlc3RydWN0XyAoIkNsZWFudXA6IHBvcHBpbmciLAorICAgICAgICAgICAgICAgICAgICAgeXlzdG9zX1t5eXN0YXRlX3N0YWNrX1swXV0sCisgICAgICAgICAgICAgICAgICAgICAmeXlzZW1hbnRpY19zdGFja19bMF0sCisgICAgICAgICAgICAgICAgICAgICAmeXlsb2NhdGlvbl9zdGFja19bMF0pOworICAgICAgICB5eXBvcF8gKCk7CiAgICAgICB9CiAKICAgICByZXR1cm4geXlyZXN1bHQ7CisgICAgfQorICAgIGNhdGNoICguLi4pCisgICAgICB7CisgICAgICAgIFlZQ0RFQlVHIDw8ICJFeGNlcHRpb24gY2F1Z2h0OiBjbGVhbmluZyBsb29rYWhlYWQgYW5kIHN0YWNrIgorICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CisgICAgICAgIC8vIERvIG5vdCB0cnkgdG8gZGlzcGxheSB0aGUgdmFsdWVzIG9mIHRoZSByZWNsYWltZWQgc3ltYm9scywKKyAgICAgICAgLy8gYXMgdGhlaXIgcHJpbnRlciBtaWdodCB0aHJvdyBhbiBleGNlcHRpb24uCisgICAgICAgIGlmICh5eWNoYXIgIT0geXllbXB0eV8pCisgICAgICAgICAgeworICAgICAgICAgICAgLyogTWFrZSBzdXJlIHdlIGhhdmUgbGF0ZXN0IGxvb2thaGVhZCB0cmFuc2xhdGlvbi4gIFNlZQorICAgICAgICAgICAgICAgY29tbWVudHMgYXQgdXNlciBzZW1hbnRpYyBhY3Rpb25zIGZvciB3aHkgdGhpcyBpcworICAgICAgICAgICAgICAgbmVjZXNzYXJ5LiAgKi8KKyAgICAgICAgICAgIHl5dG9rZW4gPSB5eXRyYW5zbGF0ZV8gKHl5Y2hhcik7CisgICAgICAgICAgICB5eWRlc3RydWN0XyAoWVlfTlVMTCwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CisgICAgICAgICAgfQorCisgICAgICAgIHdoaWxlICgxIDwgeXlzdGF0ZV9zdGFja18uaGVpZ2h0ICgpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHl5ZGVzdHJ1Y3RfIChZWV9OVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgIHl5c3Rvc19beXlzdGF0ZV9zdGFja19bMF1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICZ5eXNlbWFudGljX3N0YWNrX1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAmeXlsb2NhdGlvbl9zdGFja19bMF0pOworICAgICAgICAgICAgeXlwb3BfICgpOworICAgICAgICAgIH0KKyAgICAgICAgdGhyb3c7CisgICAgICB9CiAgIH0KIAogICAvLyBHZW5lcmF0ZSBhbiBlcnJvciBtZXNzYWdlLgogICBzdGQ6OnN0cmluZwotICBdYjRfcGFyc2VyX2NsYXNzX25hbWVbOjp5eXN5bnRheF9lcnJvcl8gKGludCB5eXN0YXRlXWRubAotYjRfZXJyb3JfdmVyYm9zZV9pZihbLCBpbnQgdG9rXSlbKQotICB7Ci0gICAgc3RkOjpzdHJpbmcgcmVzOwotICAgIFlZVVNFICh5eXN0YXRlKTsKLSNpZiBZWUVSUk9SX1ZFUkJPU0UKLSAgICBpbnQgeXluID0geXlwYWN0X1t5eXN0YXRlXTsKLSAgICBpZiAoeXlwYWN0X25pbmZfIDwgeXluICYmIHl5biA8PSB5eWxhc3RfKQorICBdYjRfcGFyc2VyX2NsYXNzX25hbWVbOjp5eXN5bnRheF9lcnJvcl8gKF1kbmwKK2I0X2Vycm9yX3ZlcmJvc2VfaWYoW2ludCB5eXN0YXRlLCBpbnQgeXl0b2tlbl0sCisgICAgICAgICAgICAgICAgICAgIFtpbnQsIGludF0pWykKKyAge11iNF9lcnJvcl92ZXJib3NlX2lmKFtbCisgICAgc3RkOjpzdHJpbmcgeXlyZXM7CisgICAgLy8gTnVtYmVyIG9mIHJlcG9ydGVkIHRva2VucyAob25lIGZvciB0aGUgInVuZXhwZWN0ZWQiLCBvbmUgcGVyCisgICAgLy8gImV4cGVjdGVkIikuCisgICAgc2l6ZV90IHl5Y291bnQgPSAwOworICAgIC8vIEl0cyBtYXhpbXVtLgorICAgIGVudW0geyBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNID0gNSB9OworICAgIC8vIEFyZ3VtZW50cyBvZiB5eWZvcm1hdC4KKyAgICBjaGFyIGNvbnN0ICp5eWFyZ1tZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNXTsKKworICAgIC8qIFRoZXJlIGFyZSBtYW55IHBvc3NpYmlsaXRpZXMgaGVyZSB0byBjb25zaWRlcjoKKyAgICAgICAtIElmIHRoaXMgc3RhdGUgaXMgYSBjb25zaXN0ZW50IHN0YXRlIHdpdGggYSBkZWZhdWx0IGFjdGlvbiwgdGhlbgorICAgICAgICAgdGhlIG9ubHkgd2F5IHRoaXMgZnVuY3Rpb24gd2FzIGludm9rZWQgaXMgaWYgdGhlIGRlZmF1bHQgYWN0aW9uCisgICAgICAgICBpcyBhbiBlcnJvciBhY3Rpb24uICBJbiB0aGF0IGNhc2UsIGRvbid0IGNoZWNrIGZvciBleHBlY3RlZAorICAgICAgICAgdG9rZW5zIGJlY2F1c2UgdGhlcmUgYXJlIG5vbmUuCisgICAgICAgLSBUaGUgb25seSB3YXkgdGhlcmUgY2FuIGJlIG5vIGxvb2thaGVhZCBwcmVzZW50IChpbiB5eXRva2VuKSBpcworICAgICAgICAgaWYgdGhpcyBzdGF0ZSBpcyBhIGNvbnNpc3RlbnQgc3RhdGUgd2l0aCBhIGRlZmF1bHQgYWN0aW9uLgorICAgICAgICAgVGh1cywgZGV0ZWN0aW5nIHRoZSBhYnNlbmNlIG9mIGEgbG9va2FoZWFkIGlzIHN1ZmZpY2llbnQgdG8KKyAgICAgICAgIGRldGVybWluZSB0aGF0IHRoZXJlIGlzIG5vIHVuZXhwZWN0ZWQgb3IgZXhwZWN0ZWQgdG9rZW4gdG8KKyAgICAgICAgIHJlcG9ydC4gIEluIHRoYXQgY2FzZSwganVzdCByZXBvcnQgYSBzaW1wbGUgInN5bnRheCBlcnJvciIuCisgICAgICAgLSBEb24ndCBhc3N1bWUgdGhlcmUgaXNuJ3QgYSBsb29rYWhlYWQganVzdCBiZWNhdXNlIHRoaXMgc3RhdGUgaXMKKyAgICAgICAgIGEgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24uICBUaGVyZSBtaWdodCBoYXZlCisgICAgICAgICBiZWVuIGEgcHJldmlvdXMgaW5jb25zaXN0ZW50IHN0YXRlLCBjb25zaXN0ZW50IHN0YXRlIHdpdGggYQorICAgICAgICAgbm9uLWRlZmF1bHQgYWN0aW9uLCBvciB1c2VyIHNlbWFudGljIGFjdGlvbiB0aGF0IG1hbmlwdWxhdGVkCisgICAgICAgICB5eWNoYXIuCisgICAgICAgLSBPZiBjb3Vyc2UsIHRoZSBleHBlY3RlZCB0b2tlbiBsaXN0IGRlcGVuZHMgb24gc3RhdGVzIHRvIGhhdmUKKyAgICAgICAgIGNvcnJlY3QgbG9va2FoZWFkIGluZm9ybWF0aW9uLCBhbmQgaXQgZGVwZW5kcyBvbiB0aGUgcGFyc2VyIG5vdAorICAgICAgICAgdG8gcGVyZm9ybSBleHRyYSByZWR1Y3Rpb25zIGFmdGVyIGZldGNoaW5nIGEgbG9va2FoZWFkIGZyb20gdGhlCisgICAgICAgICBzY2FubmVyIGFuZCBiZWZvcmUgZGV0ZWN0aW5nIGEgc3ludGF4IGVycm9yLiAgVGh1cywgc3RhdGUKKyAgICAgICAgIG1lcmdpbmcgKGZyb20gTEFMUiBvciBJRUxSKSBhbmQgZGVmYXVsdCByZWR1Y3Rpb25zIGNvcnJ1cHQgdGhlCisgICAgICAgICBleHBlY3RlZCB0b2tlbiBsaXN0LiAgSG93ZXZlciwgdGhlIGxpc3QgaXMgY29ycmVjdCBmb3IKKyAgICAgICAgIGNhbm9uaWNhbCBMUiB3aXRoIG9uZSBleGNlcHRpb246IGl0IHdpbGwgc3RpbGwgY29udGFpbiBhbnkKKyAgICAgICAgIHRva2VuIHRoYXQgd2lsbCBub3QgYmUgYWNjZXB0ZWQgZHVlIHRvIGFuIGVycm9yIGFjdGlvbiBpbiBhCisgICAgICAgICBsYXRlciBzdGF0ZS4KKyAgICAqLworICAgIGlmICh5eXRva2VuICE9IHl5ZW1wdHlfKQogICAgICAgewotCS8qIFN0YXJ0IFlZWCBhdCAtWVlOIGlmIG5lZ2F0aXZlIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4KLQkgICBZWUNIRUNLLiAgKi8KLQlpbnQgeXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5biA6IDA7Ci0KLQkvKiBTdGF5IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAgKi8KLQlpbnQgeXljaGVja2xpbSA9IHl5bGFzdF8gLSB5eW4gKyAxOwotCWludCB5eXhlbmQgPSB5eWNoZWNrbGltIDwgeXludG9rZW5zXyA/IHl5Y2hlY2tsaW0gOiB5eW50b2tlbnNfOwotCWludCBjb3VudCA9IDA7Ci0JZm9yIChpbnQgeCA9IHl5eGJlZ2luOyB4IDwgeXl4ZW5kOyArK3gpCi0JICBpZiAoeXljaGVja19beCArIHl5bl0gPT0geCAmJiB4ICE9IHl5dGVycm9yXykKLQkgICAgKytjb3VudDsKLQotCS8vIEZJWE1FOiBUaGlzIG1ldGhvZCBvZiBidWlsZGluZyB0aGUgbWVzc2FnZSBpcyBub3QgY29tcGF0aWJsZQotCS8vIHdpdGggaW50ZXJuYXRpb25hbGl6YXRpb24uICBJdCBzaG91bGQgd29yayBsaWtlIHlhY2MuYyBkb2VzIGl0LgotCS8vIFRoYXQgaXMsIGZpcnN0IGJ1aWxkIGEgc3RyaW5nIHRoYXQgbG9va3MgbGlrZSB0aGlzOgotCS8vICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMgb3IgJXMgb3IgJXMiCi0JLy8gVGhlbiwgaW52b2tlIFlZXyBvbiB0aGlzIHN0cmluZy4KLQkvLyBGaW5hbGx5LCB1c2UgdGhlIHN0cmluZyBhcyBhIGZvcm1hdCB0byBvdXRwdXQKLQkvLyB5eXRuYW1lX1t0b2tdLCBldGMuCi0JLy8gVW50aWwgdGhpcyBnZXRzIGZpeGVkLCB0aGlzIG1lc3NhZ2UgYXBwZWFycyBpbiBFbmdsaXNoIG9ubHkuCi0JcmVzID0gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAiOwotCXJlcyArPSB5eXRuYW1lcnJfICh5eXRuYW1lX1t0b2tdKTsKLQlpZiAoY291bnQgPCA1KQotCSAgewotCSAgICBjb3VudCA9IDA7Ci0JICAgIGZvciAoaW50IHggPSB5eXhiZWdpbjsgeCA8IHl5eGVuZDsgKyt4KQotCSAgICAgIGlmICh5eWNoZWNrX1t4ICsgeXluXSA9PSB4ICYmIHggIT0geXl0ZXJyb3JfKQotCQl7Ci0JCSAgcmVzICs9ICghY291bnQrKykgPyAiLCBleHBlY3RpbmcgIiA6ICIgb3IgIjsKLQkJICByZXMgKz0geXl0bmFtZXJyXyAoeXl0bmFtZV9beF0pOwotCQl9Ci0JICB9CisgICAgICAgIHl5YXJnW3l5Y291bnQrK10gPSB5eXRuYW1lX1t5eXRva2VuXTsKKyAgICAgICAgaW50IHl5biA9IHl5cGFjdF9beXlzdGF0ZV07CisgICAgICAgIGlmICgheXlfcGFjdF92YWx1ZV9pc19kZWZhdWx0XyAoeXluKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBTdGFydCBZWVggYXQgLVlZTiBpZiBuZWdhdGl2ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluCisgICAgICAgICAgICAgICBZWUNIRUNLLiAgSW4gb3RoZXIgd29yZHMsIHNraXAgdGhlIGZpcnN0IC1ZWU4gYWN0aW9ucyBmb3IKKyAgICAgICAgICAgICAgIHRoaXMgc3RhdGUgYmVjYXVzZSB0aGV5IGFyZSBkZWZhdWx0IGFjdGlvbnMuICAqLworICAgICAgICAgICAgaW50IHl5eGJlZ2luID0geXluIDwgMCA/IC15eW4gOiAwOworICAgICAgICAgICAgLyogU3RheSB3aXRoaW4gYm91bmRzIG9mIGJvdGggeXljaGVjayBhbmQgeXl0bmFtZS4gICovCisgICAgICAgICAgICBpbnQgeXljaGVja2xpbSA9IHl5bGFzdF8gLSB5eW4gKyAxOworICAgICAgICAgICAgaW50IHl5eGVuZCA9IHl5Y2hlY2tsaW0gPCB5eW50b2tlbnNfID8geXljaGVja2xpbSA6IHl5bnRva2Vuc187CisgICAgICAgICAgICBmb3IgKGludCB5eXggPSB5eXhiZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5eCkKKyAgICAgICAgICAgICAgaWYgKHl5Y2hlY2tfW3l5eCArIHl5bl0gPT0geXl4ICYmIHl5eCAhPSB5eXRlcnJvcl8KKyAgICAgICAgICAgICAgICAgICYmICF5eV90YWJsZV92YWx1ZV9pc19lcnJvcl8gKHl5dGFibGVfW3l5eCArIHl5bl0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlmICh5eWNvdW50ID09IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0pCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICB5eWNvdW50ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB5eWFyZ1t5eWNvdW50KytdID0geXl0bmFtZV9beXl4XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgfQogICAgICAgfQotICAgIGVsc2UKLSNlbmRpZgotICAgICAgcmVzID0gWVlfKCJzeW50YXggZXJyb3IiKTsKLSAgICByZXR1cm4gcmVzOworCisgICAgY2hhciBjb25zdCogeXlmb3JtYXQgPSBZWV9OVUxMOworICAgIHN3aXRjaCAoeXljb3VudCkKKyAgICAgIHsKKyNkZWZpbmUgWVlDQVNFXyhOLCBTKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGNhc2UgTjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHl5Zm9ybWF0ID0gUzsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYnJlYWsKKyAgICAgICAgWVlDQVNFXygwLCBZWV8oInN5bnRheCBlcnJvciIpKTsKKyAgICAgICAgWVlDQVNFXygxLCBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIpKTsKKyAgICAgICAgWVlDQVNFXygyLCBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIikpOworICAgICAgICBZWUNBU0VfKDMsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiKSk7CisgICAgICAgIFlZQ0FTRV8oNCwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpKTsKKyAgICAgICAgWVlDQVNFXyg1LCBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIikpOworI3VuZGVmIFlZQ0FTRV8KKyAgICAgIH0KKworICAgIC8vIEFyZ3VtZW50IG51bWJlci4KKyAgICBzaXplX3QgeXlpID0gMDsKKyAgICBmb3IgKGNoYXIgY29uc3QqIHl5cCA9IHl5Zm9ybWF0OyAqeXlwOyArK3l5cCkKKyAgICAgIGlmICh5eXBbMF0gPT0gJyUnICYmIHl5cFsxXSA9PSAncycgJiYgeXlpIDwgeXljb3VudCkKKyAgICAgICAgeworICAgICAgICAgIHl5cmVzICs9IHl5dG5hbWVycl8gKHl5YXJnW3l5aSsrXSk7CisgICAgICAgICAgKyt5eXA7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeXlyZXMgKz0gKnl5cDsKKyAgICByZXR1cm4geXlyZXM7XV0sIFtbCisgICAgcmV0dXJuIFlZXygic3ludGF4IGVycm9yIik7XV0pWwogICB9CiAKIApAQCAtODg5LDkgKzk3Nyw5IEBACiAgICAgXWI0X3BhY3RbCiAgIH07CiAKLSAgLyogWVlERUZBQ1RbU10gLS0gZGVmYXVsdCBydWxlIHRvIHJlZHVjZSB3aXRoIGluIHN0YXRlIFMgd2hlbiBZWVRBQkxFCi0gICAgIGRvZXNuJ3Qgc3BlY2lmeSBzb21ldGhpbmcgZWxzZSB0byBkby4gIFplcm8gbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4KLSAgICAgZXJyb3IuICAqLworICAvKiBZWURFRkFDVFtTXSAtLSBkZWZhdWx0IHJlZHVjdGlvbiBudW1iZXIgaW4gc3RhdGUgUy4gIFBlcmZvcm1lZCB3aGVuCisgICAgIFlZVEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRvIGRvLiAgWmVybyBtZWFucyB0aGUKKyAgICAgZGVmYXVsdCBpcyBhbiBlcnJvci4gICovCiAgIGNvbnN0IF1iNF9pbnRfdHlwZV9mb3IoW2I0X2RlZmFjdF0pWwogICBdYjRfcGFyc2VyX2NsYXNzX25hbWVbOjp5eWRlZmFjdF9bXSA9CiAgIHsKQEAgLTkxNCw3ICsxMDAyLDcgQEAKIAogICAvKiBZWVRBQkxFW1lZUEFDVFtTVEFURS1OVU1dXS4gIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVNLiAgSWYKICAgICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2ZSwgcmVkdWNlIHRoZSBydWxlIHdoaWNoCi0gICAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiB6ZXJvLCBkbyB3aGF0IFlZREVGQUNUIHNheXMuICAqLworICAgICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYgWVlUQUJMRV9OSU5GXywgc3ludGF4IGVycm9yLiAgKi8KICAgY29uc3QgXWI0X2ludF90eXBlKGI0X3RhYmxlX25pbmYsIGI0X3RhYmxlX25pbmYpIGI0X3BhcnNlcl9jbGFzc19uYW1lOjp5eXRhYmxlX25pbmZfID0gYjRfdGFibGVfbmluZls7CiAgIGNvbnN0IF1iNF9pbnRfdHlwZV9mb3IoW2I0X3RhYmxlXSlbCiAgIF1iNF9wYXJzZXJfY2xhc3NfbmFtZVs6Onl5dGFibGVfW10gPQpAQCAtOTM3LDcgKzEwMjUsNyBAQAogICAgIF1iNF9zdG9zWwogICB9OwogCi0jaWYgWVlERUJVRworI2lmIF1iNF9hcGlfUFJFRklYW0RFQlVHCiAgIC8qIFRPS0VOX05VTUJFUl9bWVlMRVgtTlVNXSAtLSBJbnRlcm5hbCBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcKICAgICAgdG8gWVlMRVgtTlVNLiAgKi8KICAgY29uc3QgXWI0X2ludF90eXBlX2ZvcihbYjRfdG9rbnVtXSlbCkBAIC05NjEsNyArMTA0OSw3IEBACiAgICAgXWI0X3IyWwogICB9OwogCi0jaWYgWVlERUJVRyB8fCBZWUVSUk9SX1ZFUkJPU0UgfHwgWVlUT0tFTl9UQUJMRQorXWI0X3Rva2VuX3RhYmxlX2lmKFtdLCBbWyNpZiBdYjRfYXBpX1BSRUZJWFtERUJVR11dKVsKICAgLyogWVlUTkFNRVtTWU1CT0wtTlVNXSAtLSBTdHJpbmcgbmFtZSBvZiB0aGUgc3ltYm9sIFNZTUJPTC1OVU0uCiAgICAgIEZpcnN0LCB0aGUgdGVybWluYWxzLCB0aGVuLCBzdGFydGluZyBhdCBcYSB5eW50b2tlbnNfLCBub250ZXJtaW5hbHMuICAqLwogICBjb25zdCBjaGFyKgpAQCAtOTY5LDkgKzEwNTcsOCBAQAogICB7CiAgICAgXWI0X3RuYW1lWwogICB9OwotI2VuZGlmCiAKLSNpZiBZWURFQlVHCitdYjRfdG9rZW5fdGFibGVfaWYoW1sjaWYgXWI0X2FwaV9QUkVGSVhbREVCVUddXSlbCiAgIC8qIFlZUkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gICovCiAgIGNvbnN0IF1iNF9wYXJzZXJfY2xhc3NfbmFtZVs6OnJoc19udW1iZXJfdHlwZQogICBdYjRfcGFyc2VyX2NsYXNzX25hbWVbOjp5eXJoc19bXSA9CkBAIC0xMDEzLDcgKzExMDAsNyBAQAogICAgIGludCB5eW5yaHMgPSB5eXIyX1t5eXJ1bGVdOwogICAgIC8qIFByaW50IHRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQsIGFuZCB0aGVpciByZXN1bHQuICAqLwogICAgICp5eWNkZWJ1Z18gPDwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgIiA8PCB5eXJ1bGUgLSAxCi0JICAgICAgIDw8ICIgKGxpbmUgIiA8PCB5eWxubyA8PCAiKSwgIjsKKwkgICAgICAgPDwgIiAobGluZSAiIDw8IHl5bG5vIDw8ICIpOiIgPDwgc3RkOjplbmRsOwogICAgIC8qIFRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQuICAqLwogICAgIGZvciAoaW50IHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspCiAgICAgICBZWV9TWU1CT0xfUFJJTlQgKCIgICAkIiA8PCB5eWkgKyAxIDw8ICIgPSIsCkBAIC0xMDIxLDcgKzExMDgsNyBAQAogCQkgICAgICAgJl1iNF9yaHNfdmFsdWUoeXlucmhzLCB5eWkgKyAxKVssCiAJCSAgICAgICAmXWI0X3Joc19sb2NhdGlvbih5eW5yaHMsIHl5aSArIDEpWyk7CiAgIH0KLSNlbmRpZiAvLyBZWURFQlVHCisjZW5kaWYgLy8gXWI0X2FwaV9QUkVGSVhbREVCVUcKIAogICAvKiBZWVRSQU5TTEFURShZWUxFWCkgLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KICAgXWI0X3BhcnNlcl9jbGFzc19uYW1lWzo6dG9rZW5fbnVtYmVyX3R5cGUKQEAgLTEwNTEsMTA3ICsxMTM4LDYgQEAKICAgY29uc3QgdW5zaWduZWQgaW50IF1iNF9wYXJzZXJfY2xhc3NfbmFtZVs6Onl5dXNlcl90b2tlbl9udW1iZXJfbWF4XyA9IF1iNF91c2VyX3Rva2VuX251bWJlcl9tYXhbOwogICBjb25zdCBdYjRfcGFyc2VyX2NsYXNzX25hbWVbOjp0b2tlbl9udW1iZXJfdHlwZSBdYjRfcGFyc2VyX2NsYXNzX25hbWVbOjp5eXVuZGVmX3Rva2VuXyA9IF1iNF91bmRlZl90b2tlbl9udW1iZXJbOwogCi19IC8vIG5hbWVzcGFjZSBdYjRfbmFtZXNwYWNlWwotCi1dYjRfZXBpbG9ndWUKLWRubAotQG91dHB1dCBiNF9kaXJfcHJlZml4W11zdGFjay5oaAotYjRfY29weXJpZ2h0KFtTdGFjayBoYW5kbGluZyBmb3IgQmlzb24gcGFyc2VycyBpbiBDKytdLAotICBbMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNl0pWwotCi0jaWZuZGVmIEJJU09OX1NUQUNLX0hICi0jIGRlZmluZSBCSVNPTl9TVEFDS19ISAotCi0jaW5jbHVkZSA8ZGVxdWU+Ci0KLW5hbWVzcGFjZSBdYjRfbmFtZXNwYWNlWwotewotICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUyA9IHN0ZDo6ZGVxdWU8VD4gPgotICBjbGFzcyBzdGFjawotICB7Ci0gIHB1YmxpYzoKLQotICAgIC8vIEhpZGUgb3VyIHJldmVyc2VkIG9yZGVyLgotICAgIHR5cGVkZWYgdHlwZW5hbWUgUzo6cmV2ZXJzZV9pdGVyYXRvciBpdGVyYXRvcjsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIFM6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7Ci0KLSAgICBzdGFjayAoKSA6IHNlcV8gKCkKLSAgICB7Ci0gICAgfQotCi0gICAgc3RhY2sgKHVuc2lnbmVkIGludCBuKSA6IHNlcV8gKG4pCi0gICAgewotICAgIH0KLQotICAgIGlubGluZQotICAgIFQmCi0gICAgb3BlcmF0b3IgW10gKHVuc2lnbmVkIGludCBpKQotICAgIHsKLSAgICAgIHJldHVybiBzZXFfW2ldOwotICAgIH0KLQotICAgIGlubGluZQotICAgIGNvbnN0IFQmCi0gICAgb3BlcmF0b3IgW10gKHVuc2lnbmVkIGludCBpKSBjb25zdAotICAgIHsKLSAgICAgIHJldHVybiBzZXFfW2ldOwotICAgIH0KLQotICAgIGlubGluZQotICAgIHZvaWQKLSAgICBwdXNoIChjb25zdCBUJiB0KQotICAgIHsKLSAgICAgIHNlcV8ucHVzaF9mcm9udCAodCk7Ci0gICAgfQotCi0gICAgaW5saW5lCi0gICAgdm9pZAotICAgIHBvcCAodW5zaWduZWQgaW50IG4gPSAxKQotICAgIHsKLSAgICAgIGZvciAoOyBuOyAtLW4pCi0Jc2VxXy5wb3BfZnJvbnQgKCk7Ci0gICAgfQotCi0gICAgaW5saW5lCi0gICAgdW5zaWduZWQgaW50Ci0gICAgaGVpZ2h0ICgpIGNvbnN0Ci0gICAgewotICAgICAgcmV0dXJuIHNlcV8uc2l6ZSAoKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3IgYmVnaW4gKCkgY29uc3QgeyByZXR1cm4gc2VxXy5yYmVnaW4gKCk7IH0KLSAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3IgZW5kICgpIGNvbnN0IHsgcmV0dXJuIHNlcV8ucmVuZCAoKTsgfQotCi0gIHByaXZhdGU6Ci0KLSAgICBTIHNlcV87Ci0gIH07Ci0KLSAgLy8vIFByZXNlbnQgYSBzbGljZSBvZiB0aGUgdG9wIG9mIGEgc3RhY2suCi0gIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBTID0gc3RhY2s8VD4gPgotICBjbGFzcyBzbGljZQotICB7Ci0gIHB1YmxpYzoKLQotICAgIHNsaWNlIChjb25zdCBTJiBzdGFjaywKLQkgICB1bnNpZ25lZCBpbnQgcmFuZ2UpIDogc3RhY2tfIChzdGFjayksCi0JCQkJIHJhbmdlXyAocmFuZ2UpCi0gICAgewotICAgIH0KLQotICAgIGlubGluZQotICAgIGNvbnN0IFQmCi0gICAgb3BlcmF0b3IgW10gKHVuc2lnbmVkIGludCBpKSBjb25zdAotICAgIHsKLSAgICAgIHJldHVybiBzdGFja19bcmFuZ2VfIC0gaV07Ci0gICAgfQotCi0gIHByaXZhdGU6Ci0KLSAgICBjb25zdCBTJiBzdGFja187Ci0gICAgdW5zaWduZWQgaW50IHJhbmdlXzsKLSAgfTsKLX0KLQotI2VuZGlmIC8vIG5vdCBCSVNPTl9TVEFDS19ISF0KLW00X2RpdmVydCgtMSkKK11iNF9uYW1lc3BhY2VfY2xvc2VbCitdYjRfZXBpbG9ndWVbXWRubAorYjRfb3V0cHV0X2VuZCgpCmRpZmYgLS1naXQgYS9kYXRhL2xhbHIxLmphdmEgYi9kYXRhL2xhbHIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk2MWZjNQotLS0gL2Rldi9udWxsCisrKyBiL2RhdGEvbGFscjEuamF2YQpAQCAtMCwwICsxLDkyNyBAQAorIyBKYXZhIHNrZWxldG9uIGZvciBCaXNvbiAtKi0gYXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK200X2luY2x1ZGUoYjRfcGtnZGF0YWRpci9bamF2YS5tNF0pCisKK2I0X2RlZmluZXNfaWYoW2I0X2ZhdGFsKFslczogJSVkZWZpbmVzIGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW4gSmF2YV0sIFtiNF9za2VsZXRvbl0pXSkKK200X2lmdmFsKG00X2RlZm4oW2I0X3N5bWJvbF9kZXN0cnVjdG9yc10pLAorICAgICAgICBbYjRfZmF0YWwoWyVzOiAlJWRlc3RydWN0b3IgZG9lcyBub3QgbWFrZSBzZW5zZSBpbiBKYXZhXSwgW2I0X3NrZWxldG9uXSldLAorICAgICAgICBbXSkKKworYjRfb3V0cHV0X2JlZ2luKFtiNF9wYXJzZXJfZmlsZV9uYW1lXSkKK2I0X2NvcHlyaWdodChbU2tlbGV0b24gaW1wbGVtZW50YXRpb24gZm9yIEJpc29uIExBTFIoMSkgcGFyc2VycyBpbiBKYXZhXSwKKyAgICAgICAgICAgICBbMjAwNy0yMDEyXSkKKworYjRfcGVyY2VudF9kZWZpbmVfaWZkZWYoW3BhY2thZ2VdLCBbcGFja2FnZSBiNF9wZXJjZW50X2RlZmluZV9nZXQoW3BhY2thZ2VdKTsKK10pWy8qIEZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworXWI0X3ByZV9wcm9sb2d1ZQorYjRfcGVyY2VudF9jb2RlX2dldChbW2ltcG9ydHNdXSkKK1svKioKKyAqIEEgQmlzb24gcGFyc2VyLCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIDx0dD5dbTRfYnBhdHN1YnN0KGI0X2ZpbGVfbmFtZSwgW14iXCguKlwpIiRdLCBbXDFdKVs8L3R0Pi4KKyAqCisgKiBAQGF1dGhvciBMQUxSICgxKSBwYXJzZXIgc2tlbGV0b24gd3JpdHRlbiBieSBQYW9sbyBCb256aW5pLgorICovCitdYjRfcHVibGljX2lmKFtwdWJsaWMgXSlkbmwKK2I0X2Fic3RyYWN0X2lmKFthYnN0cmFjdCBdKWRubAorYjRfZmluYWxfaWYoW2ZpbmFsIF0pZG5sCitiNF9zdHJpY3RmcF9pZihbc3RyaWN0ZnAgXSlkbmwKK1tjbGFzcyBdYjRfcGFyc2VyX2NsYXNzX25hbWVbXWRubAorYjRfcGVyY2VudF9kZWZpbmVfZ2V0MyhbZXh0ZW5kc10sIFsgZXh0ZW5kcyBdKWRubAorYjRfcGVyY2VudF9kZWZpbmVfZ2V0MyhbaW1wbGVtZW50c10sIFsgaW1wbGVtZW50cyBdKVsKK3sKKyAgXWI0X2lkZW50aWZpY2F0aW9uWworCisgIC8qKiBUcnVlIGlmIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMgYXJlIGVuYWJsZWQuICAqLworICBwdWJsaWMgYm9vbGVhbiBlcnJvclZlcmJvc2UgPSBdYjRfZmxhZ192YWx1ZShbZXJyb3JfdmVyYm9zZV0pOworCitiNF9sb2NhdGlvbnNfaWYoW1sKKyAgLyoqCisgICAqIEEgY2xhc3MgZGVmaW5pbmcgYSBwYWlyIG9mIHBvc2l0aW9ucy4gIFBvc2l0aW9ucywgZGVmaW5lZCBieSB0aGUKKyAgICogPGNvZGU+XWI0X3Bvc2l0aW9uX3R5cGVbPC9jb2RlPiBjbGFzcywgZGVub3RlIGEgcG9pbnQgaW4gdGhlIGlucHV0LgorICAgKiBMb2NhdGlvbnMgcmVwcmVzZW50IGEgcGFydCBvZiB0aGUgaW5wdXQgdGhyb3VnaCB0aGUgYmVnaW5uaW5nCisgICAqIGFuZCBlbmRpbmcgcG9zaXRpb25zLiAgKi8KKyAgcHVibGljIGNsYXNzIF1iNF9sb2NhdGlvbl90eXBlWyB7CisgICAgLyoqIFRoZSBmaXJzdCwgaW5jbHVzaXZlLCBwb3NpdGlvbiBpbiB0aGUgcmFuZ2UuICAqLworICAgIHB1YmxpYyBdYjRfcG9zaXRpb25fdHlwZVsgYmVnaW47CisKKyAgICAvKiogVGhlIGZpcnN0IHBvc2l0aW9uIGJleW9uZCB0aGUgcmFuZ2UuICAqLworICAgIHB1YmxpYyBdYjRfcG9zaXRpb25fdHlwZVsgZW5kOworCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgPGNvZGU+XWI0X2xvY2F0aW9uX3R5cGVbPC9jb2RlPiBkZW5vdGluZyBhbiBlbXB0eSByYW5nZSBsb2NhdGVkIGF0CisgICAgICogYSBnaXZlbiBwb2ludC4KKyAgICAgKiBAQHBhcmFtIGxvYyBUaGUgcG9zaXRpb24gYXQgd2hpY2ggdGhlIHJhbmdlIGlzIGFuY2hvcmVkLiAgKi8KKyAgICBwdWJsaWMgXWI0X2xvY2F0aW9uX3R5cGVbIChdYjRfcG9zaXRpb25fdHlwZVsgbG9jKSB7CisgICAgICB0aGlzLmJlZ2luID0gdGhpcy5lbmQgPSBsb2M7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgPGNvZGU+XWI0X2xvY2F0aW9uX3R5cGVbPC9jb2RlPiBmcm9tIHRoZSBlbmRwb2ludHMgb2YgdGhlIHJhbmdlLgorICAgICAqIEBAcGFyYW0gYmVnaW4gVGhlIGZpcnN0IHBvc2l0aW9uIGluY2x1ZGVkIGluIHRoZSByYW5nZS4KKyAgICAgKiBAQHBhcmFtIGVuZCAgIFRoZSBmaXJzdCBwb3NpdGlvbiBiZXlvbmQgdGhlIHJhbmdlLiAgKi8KKyAgICBwdWJsaWMgXWI0X2xvY2F0aW9uX3R5cGVbIChdYjRfcG9zaXRpb25fdHlwZVsgYmVnaW4sIF1iNF9wb3NpdGlvbl90eXBlWyBlbmQpIHsKKyAgICAgIHRoaXMuYmVnaW4gPSBiZWdpbjsKKyAgICAgIHRoaXMuZW5kID0gZW5kOworICAgIH0KKworICAgIC8qKgorICAgICAqIFByaW50IGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGxvY2F0aW9uLiAgRm9yIHRoaXMgdG8gYmUgY29ycmVjdCwKKyAgICAgKiA8Y29kZT5dYjRfcG9zaXRpb25fdHlwZVs8L2NvZGU+IHNob3VsZCBvdmVycmlkZSB0aGUgPGNvZGU+ZXF1YWxzPC9jb2RlPgorICAgICAqIG1ldGhvZC4gICovCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZyAoKSB7CisgICAgICBpZiAoYmVnaW4uZXF1YWxzIChlbmQpKQorICAgICAgICByZXR1cm4gYmVnaW4udG9TdHJpbmcgKCk7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBiZWdpbi50b1N0cmluZyAoKSArICItIiArIGVuZC50b1N0cmluZyAoKTsKKyAgICB9CisgIH0KKworXV0pCisKK1sgIC8qKiBUb2tlbiByZXR1cm5lZCBieSB0aGUgc2Nhbm5lciB0byBzaWduYWwgdGhlIGVuZCBvZiBpdHMgaW5wdXQuICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFT0YgPSAwO10KKworYjRfdG9rZW5fZW51bXMoYjRfdG9rZW5zKQorCisgIGI0X2xvY2F0aW9uc19pZihbWworICBwcml2YXRlIF1iNF9sb2NhdGlvbl90eXBlWyB5eWxsb2MgKFlZU3RhY2sgcmhzLCBpbnQgbikKKyAgeworICAgIGlmIChuID4gMCkKKyAgICAgIHJldHVybiBuZXcgXWI0X2xvY2F0aW9uX3R5cGVbIChyaHMubG9jYXRpb25BdCAobi0xKS5iZWdpbiwgcmhzLmxvY2F0aW9uQXQgKDApLmVuZCk7CisgICAgZWxzZQorICAgICAgcmV0dXJuIG5ldyBdYjRfbG9jYXRpb25fdHlwZVsgKHJocy5sb2NhdGlvbkF0ICgwKS5lbmQpOworICB9XV0pWworCisgIC8qKgorICAgKiBDb21tdW5pY2F0aW9uIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBzY2FubmVyIGFuZCB0aGUgQmlzb24tZ2VuZXJhdGVkCisgICAqIHBhcnNlciA8dHQ+XWI0X3BhcnNlcl9jbGFzc19uYW1lWzwvdHQ+LgorICAgKi8KKyAgcHVibGljIGludGVyZmFjZSBMZXhlciB7CisgICAgXWI0X2xvY2F0aW9uc19pZihbWy8qKgorICAgICAqIE1ldGhvZCB0byByZXRyaWV2ZSB0aGUgYmVnaW5uaW5nIHBvc2l0aW9uIG9mIHRoZSBsYXN0IHNjYW5uZWQgdG9rZW4uCisgICAgICogQEByZXR1cm4gdGhlIHBvc2l0aW9uIGF0IHdoaWNoIHRoZSBsYXN0IHNjYW5uZWQgdG9rZW4gc3RhcnRzLiAgKi8KKyAgICBdYjRfcG9zaXRpb25fdHlwZVsgZ2V0U3RhcnRQb3MgKCk7CisKKyAgICAvKioKKyAgICAgKiBNZXRob2QgdG8gcmV0cmlldmUgdGhlIGVuZGluZyBwb3NpdGlvbiBvZiB0aGUgbGFzdCBzY2FubmVkIHRva2VuLgorICAgICAqIEBAcmV0dXJuIHRoZSBmaXJzdCBwb3NpdGlvbiBiZXlvbmQgdGhlIGxhc3Qgc2Nhbm5lZCB0b2tlbi4gICovCisgICAgXWI0X3Bvc2l0aW9uX3R5cGVbIGdldEVuZFBvcyAoKTtdXSlbCisKKyAgICAvKioKKyAgICAgKiBNZXRob2QgdG8gcmV0cmlldmUgdGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsYXN0IHNjYW5uZWQgdG9rZW4uCisgICAgICogQEByZXR1cm4gdGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsYXN0IHNjYW5uZWQgdG9rZW4uICAqLworICAgIF1iNF95eXN0eXBlWyBnZXRMVmFsICgpOworCisgICAgLyoqCisgICAgICogRW50cnkgcG9pbnQgZm9yIHRoZSBzY2FubmVyLiAgUmV0dXJucyB0aGUgdG9rZW4gaWRlbnRpZmllciBjb3JyZXNwb25kaW5nCisgICAgICogdG8gdGhlIG5leHQgdG9rZW4gYW5kIHByZXBhcmVzIHRvIHJldHVybiB0aGUgc2VtYW50aWMgdmFsdWUKKyAgICAgKiBdYjRfbG9jYXRpb25zX2lmKFthbmQgYmVnaW5uaW5nL2VuZGluZyBwb3NpdGlvbnMgXSlbb2YgdGhlIHRva2VuLgorICAgICAqIEBAcmV0dXJuIHRoZSB0b2tlbiBpZGVudGlmaWVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG5leHQgdG9rZW4uICovCisgICAgaW50IHl5bGV4ICgpIF1iNF9tYXliZV90aHJvd3MoW2I0X2xleF90aHJvd3NdKVs7CisKKyAgICAvKioKKyAgICAgKiBFbnRyeSBwb2ludCBmb3IgZXJyb3IgcmVwb3J0aW5nLiAgRW1pdHMgYW4gZXJyb3IKKyAgICAgKiBdYjRfbG9jYXRpb25zX2lmKFtyZWZlcnJpbmcgdG8gdGhlIGdpdmVuIGxvY2F0aW9uIF0pW2luIGEgdXNlci1kZWZpbmVkIHdheS4KKyAgICAgKgorICAgICAqIF1iNF9sb2NhdGlvbnNfaWYoW1tAQHBhcmFtIGxvYyBUaGUgbG9jYXRpb24gb2YgdGhlIGVsZW1lbnQgdG8gd2hpY2ggdGhlCisgICAgICogICAgICAgICAgICAgICAgZXJyb3IgbWVzc2FnZSBpcyByZWxhdGVkXV0pWworICAgICAqIEBAcGFyYW0gcyBUaGUgc3RyaW5nIGZvciB0aGUgZXJyb3IgbWVzc2FnZS4gICovCisgICAgIHZvaWQgeXllcnJvciAoXWI0X2xvY2F0aW9uc19pZihbYjRfbG9jYXRpb25fdHlwZVsgbG9jLCBdXSlbU3RyaW5nIHMpO10KKyAgfQorCisgIGI0X2xleGVyX2lmKFtbcHJpdmF0ZSBjbGFzcyBZWUxleGVyIGltcGxlbWVudHMgTGV4ZXIgeworXWI0X3BlcmNlbnRfY29kZV9nZXQoW1tsZXhlcl1dKVsKKyAgfQorCisgIF1dKVsvKiogVGhlIG9iamVjdCBkb2luZyBsZXhpY2FsIGFuYWx5c2lzIGZvciB1cy4gICovCisgIHByaXZhdGUgTGV4ZXIgeXlsZXhlcjsKKyAgXQorICBiNF9wYXJzZV9wYXJhbV92YXJzCisKK2I0X2xleGVyX2lmKFtbCisgIC8qKgorICAgKiBJbnN0YW50aWF0ZXMgdGhlIEJpc29uLWdlbmVyYXRlZCBwYXJzZXIuCisgICAqLworICBwdWJsaWMgXWI0X3BhcnNlcl9jbGFzc19uYW1lIChiNF9wYXJzZV9wYXJhbV9kZWNsKFtiNF9sZXhfcGFyYW1fZGVjbF0pWykgeworICAgIHRoaXMueXlsZXhlciA9IG5ldyBZWUxleGVyKF1iNF9sZXhfcGFyYW1fY2FsbFspOworICAgIF1iNF9wYXJzZV9wYXJhbV9jb25zWworICB9CitdXSkKKworICAvKioKKyAgICogSW5zdGFudGlhdGVzIHRoZSBCaXNvbi1nZW5lcmF0ZWQgcGFyc2VyLgorICAgKiBAQHBhcmFtIHl5bGV4ZXIgVGhlIHNjYW5uZXIgdGhhdCB3aWxsIHN1cHBseSB0b2tlbnMgdG8gdGhlIHBhcnNlci4KKyAgICovCisgIGI0X2xleGVyX2lmKFtbcHJvdGVjdGVkXV0sIFtbcHVibGljXV0pIGI0X3BhcnNlcl9jbGFzc19uYW1lWyAoXWI0X3BhcnNlX3BhcmFtX2RlY2woW1tMZXhlciB5eWxleGVyXV0pWykgeworICAgIHRoaXMueXlsZXhlciA9IHl5bGV4ZXI7CisgICAgXWI0X3BhcnNlX3BhcmFtX2NvbnNbCisgIH0KKworICBwcml2YXRlIGphdmEuaW8uUHJpbnRTdHJlYW0geXlEZWJ1Z1N0cmVhbSA9IFN5c3RlbS5lcnI7CisKKyAgLyoqCisgICAqIFJldHVybiB0aGUgPHR0PlByaW50U3RyZWFtPC90dD4gb24gd2hpY2ggdGhlIGRlYnVnZ2luZyBvdXRwdXQgaXMKKyAgICogcHJpbnRlZC4KKyAgICovCisgIHB1YmxpYyBmaW5hbCBqYXZhLmlvLlByaW50U3RyZWFtIGdldERlYnVnU3RyZWFtICgpIHsgcmV0dXJuIHl5RGVidWdTdHJlYW07IH0KKworICAvKioKKyAgICogU2V0IHRoZSA8dHQ+UHJpbnRTdHJlYW08L3R0PiBvbiB3aGljaCB0aGUgZGVidWcgb3V0cHV0IGlzIHByaW50ZWQuCisgICAqIEBAcGFyYW0gcyBUaGUgc3RyZWFtIHRoYXQgaXMgdXNlZCBmb3IgZGVidWdnaW5nIG91dHB1dC4KKyAgICovCisgIHB1YmxpYyBmaW5hbCB2b2lkIHNldERlYnVnU3RyZWFtKGphdmEuaW8uUHJpbnRTdHJlYW0gcykgeyB5eURlYnVnU3RyZWFtID0gczsgfQorCisgIHByaXZhdGUgaW50IHl5ZGVidWcgPSAwOworCisgIC8qKgorICAgKiBBbnN3ZXIgdGhlIHZlcmJvc2l0eSBvZiB0aGUgZGVidWdnaW5nIG91dHB1dDsgMCBtZWFucyB0aGF0IGFsbCBraW5kcyBvZgorICAgKiBvdXRwdXQgZnJvbSB0aGUgcGFyc2VyIGFyZSBzdXBwcmVzc2VkLgorICAgKi8KKyAgcHVibGljIGZpbmFsIGludCBnZXREZWJ1Z0xldmVsKCkgeyByZXR1cm4geXlkZWJ1ZzsgfQorCisgIC8qKgorICAgKiBTZXQgdGhlIHZlcmJvc2l0eSBvZiB0aGUgZGVidWdnaW5nIG91dHB1dDsgMCBtZWFucyB0aGF0IGFsbCBraW5kcyBvZgorICAgKiBvdXRwdXQgZnJvbSB0aGUgcGFyc2VyIGFyZSBzdXBwcmVzc2VkLgorICAgKiBAQHBhcmFtIGxldmVsIFRoZSB2ZXJib3NpdHkgbGV2ZWwgZm9yIGRlYnVnZ2luZyBvdXRwdXQuCisgICAqLworICBwdWJsaWMgZmluYWwgdm9pZCBzZXREZWJ1Z0xldmVsKGludCBsZXZlbCkgeyB5eWRlYnVnID0gbGV2ZWw7IH0KKworICBwcml2YXRlIGZpbmFsIGludCB5eWxleCAoKSBdYjRfbWF5YmVfdGhyb3dzKFtiNF9sZXhfdGhyb3dzXSkgW3sKKyAgICByZXR1cm4geXlsZXhlci55eWxleCAoKTsKKyAgfQorICBwcm90ZWN0ZWQgZmluYWwgdm9pZCB5eWVycm9yIChdYjRfbG9jYXRpb25zX2lmKFtiNF9sb2NhdGlvbl90eXBlWyBsb2MsIF1dKVtTdHJpbmcgcykgeworICAgIHl5bGV4ZXIueXllcnJvciAoXWI0X2xvY2F0aW9uc19pZihbbG9jLCBdKVtzKTsKKyAgfQorCisgIF1iNF9sb2NhdGlvbnNfaWYoWworICBwcm90ZWN0ZWQgZmluYWwgdm9pZCB5eWVycm9yIChTdHJpbmcgcykgeworICAgIHl5bGV4ZXIueXllcnJvciAoKF1iNF9sb2NhdGlvbl90eXBlWyludWxsLCBzKTsKKyAgfQorICBwcm90ZWN0ZWQgZmluYWwgdm9pZCB5eWVycm9yIChdYjRfcG9zaXRpb25fdHlwZVsgbG9jLCBTdHJpbmcgcykgeworICAgIHl5bGV4ZXIueXllcnJvciAobmV3IF1iNF9sb2NhdGlvbl90eXBlWyAobG9jKSwgcyk7CisgIH1dKQorCisgIFtwcm90ZWN0ZWQgZmluYWwgdm9pZCB5eWNkZWJ1ZyAoU3RyaW5nIHMpIHsKKyAgICBpZiAoeXlkZWJ1ZyA+IDApCisgICAgICB5eURlYnVnU3RyZWFtLnByaW50bG4gKHMpOworICB9CisKKyAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBZWVN0YWNrIHsKKyAgICBwcml2YXRlIGludFtdIHN0YXRlU3RhY2sgPSBuZXcgaW50WzE2XTsKKyAgICBdYjRfbG9jYXRpb25zX2lmKFtbcHJpdmF0ZSBdYjRfbG9jYXRpb25fdHlwZVtbXSBsb2NTdGFjayA9IG5ldyBdYjRfbG9jYXRpb25fdHlwZVtbMTZdO11dKVsKKyAgICBwcml2YXRlIF1iNF95eXN0eXBlW1tdIHZhbHVlU3RhY2sgPSBuZXcgXWI0X3l5c3R5cGVbWzE2XTsKKworICAgIHB1YmxpYyBpbnQgc2l6ZSA9IDE2OworICAgIHB1YmxpYyBpbnQgaGVpZ2h0ID0gLTE7CisKKyAgICBwdWJsaWMgZmluYWwgdm9pZCBwdXNoIChpbnQgc3RhdGUsIF1iNF95eXN0eXBlWyB2YWx1ZV1kbmwKKwkJCSAgICBiNF9sb2NhdGlvbnNfaWYoWywgXWI0X2xvY2F0aW9uX3R5cGVbIGxvY10pWykgeworICAgICAgaGVpZ2h0Kys7CisgICAgICBpZiAoc2l6ZSA9PSBoZWlnaHQpCisgICAgICAgIHsKKwkgIGludFtdIG5ld1N0YXRlU3RhY2sgPSBuZXcgaW50W3NpemUgKiAyXTsKKwkgIFN5c3RlbS5hcnJheWNvcHkgKHN0YXRlU3RhY2ssIDAsIG5ld1N0YXRlU3RhY2ssIDAsIGhlaWdodCk7CisJICBzdGF0ZVN0YWNrID0gbmV3U3RhdGVTdGFjazsKKwkgIF1iNF9sb2NhdGlvbnNfaWYoW1sKKwkgIF1iNF9sb2NhdGlvbl90eXBlW1tdIG5ld0xvY1N0YWNrID0gbmV3IF1iNF9sb2NhdGlvbl90eXBlW1tzaXplICogMl07CisJICBTeXN0ZW0uYXJyYXljb3B5IChsb2NTdGFjaywgMCwgbmV3TG9jU3RhY2ssIDAsIGhlaWdodCk7CisJICBsb2NTdGFjayA9IG5ld0xvY1N0YWNrO11dKQorCisJICBiNF95eXN0eXBlW1tdIG5ld1ZhbHVlU3RhY2sgPSBuZXcgXWI0X3l5c3R5cGVbW3NpemUgKiAyXTsKKwkgIFN5c3RlbS5hcnJheWNvcHkgKHZhbHVlU3RhY2ssIDAsIG5ld1ZhbHVlU3RhY2ssIDAsIGhlaWdodCk7CisJICB2YWx1ZVN0YWNrID0gbmV3VmFsdWVTdGFjazsKKworCSAgc2l6ZSAqPSAyOworCX0KKworICAgICAgc3RhdGVTdGFja1toZWlnaHRdID0gc3RhdGU7CisgICAgICBdYjRfbG9jYXRpb25zX2lmKFtbbG9jU3RhY2tbaGVpZ2h0XSA9IGxvYztdXSlbCisgICAgICB2YWx1ZVN0YWNrW2hlaWdodF0gPSB2YWx1ZTsKKyAgICB9CisKKyAgICBwdWJsaWMgZmluYWwgdm9pZCBwb3AgKCkgeworICAgICAgcG9wICgxKTsKKyAgICB9CisKKyAgICBwdWJsaWMgZmluYWwgdm9pZCBwb3AgKGludCBudW0pIHsKKyAgICAgIC8vIEF2b2lkIG1lbW9yeSBsZWFrcy4uLiBnYXJiYWdlIGNvbGxlY3Rpb24gaXMgYSB3aGl0ZSBsaWUhCisgICAgICBpZiAobnVtID4gMCkgeworCWphdmEudXRpbC5BcnJheXMuZmlsbCAodmFsdWVTdGFjaywgaGVpZ2h0IC0gbnVtICsgMSwgaGVpZ2h0ICsgMSwgbnVsbCk7CisgICAgICAgIF1iNF9sb2NhdGlvbnNfaWYoW1tqYXZhLnV0aWwuQXJyYXlzLmZpbGwgKGxvY1N0YWNrLCBoZWlnaHQgLSBudW0gKyAxLCBoZWlnaHQgKyAxLCBudWxsKTtdXSlbCisgICAgICB9CisgICAgICBoZWlnaHQgLT0gbnVtOworICAgIH0KKworICAgIHB1YmxpYyBmaW5hbCBpbnQgc3RhdGVBdCAoaW50IGkpIHsKKyAgICAgIHJldHVybiBzdGF0ZVN0YWNrW2hlaWdodCAtIGldOworICAgIH0KKworICAgIF1iNF9sb2NhdGlvbnNfaWYoW1twdWJsaWMgZmluYWwgXWI0X2xvY2F0aW9uX3R5cGVbIGxvY2F0aW9uQXQgKGludCBpKSB7CisgICAgICByZXR1cm4gbG9jU3RhY2tbaGVpZ2h0IC0gaV07CisgICAgfQorCisgICAgXV0pW3B1YmxpYyBmaW5hbCBdYjRfeXlzdHlwZVsgdmFsdWVBdCAoaW50IGkpIHsKKyAgICAgIHJldHVybiB2YWx1ZVN0YWNrW2hlaWdodCAtIGldOworICAgIH0KKworICAgIC8vIFByaW50IHRoZSBzdGF0ZSBzdGFjayBvbiB0aGUgZGVidWcgc3RyZWFtLgorICAgIHB1YmxpYyB2b2lkIHByaW50IChqYXZhLmlvLlByaW50U3RyZWFtIG91dCkKKyAgICB7CisgICAgICBvdXQucHJpbnQgKCJTdGFjayBub3ciKTsKKworICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gaGVpZ2h0OyBpKyspCisgICAgICAgIHsKKwkgIG91dC5wcmludCAoJyAnKTsKKwkgIG91dC5wcmludCAoc3RhdGVTdGFja1tpXSk7CisgICAgICAgIH0KKyAgICAgIG91dC5wcmludGxuICgpOworICAgIH0KKyAgfQorCisgIC8qKgorICAgKiBSZXR1cm5lZCBieSBhIEJpc29uIGFjdGlvbiBpbiBvcmRlciB0byBzdG9wIHRoZSBwYXJzaW5nIHByb2Nlc3MgYW5kCisgICAqIHJldHVybiBzdWNjZXNzICg8dHQ+dHJ1ZTwvdHQ+KS4gICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFlZQUNDRVBUID0gMDsKKworICAvKioKKyAgICogUmV0dXJuZWQgYnkgYSBCaXNvbiBhY3Rpb24gaW4gb3JkZXIgdG8gc3RvcCB0aGUgcGFyc2luZyBwcm9jZXNzIGFuZAorICAgKiByZXR1cm4gZmFpbHVyZSAoPHR0PmZhbHNlPC90dD4pLiAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWVlBQk9SVCA9IDE7CisKKyAgLyoqCisgICAqIFJldHVybmVkIGJ5IGEgQmlzb24gYWN0aW9uIGluIG9yZGVyIHRvIHN0YXJ0IGVycm9yIHJlY292ZXJ5IHdpdGhvdXQKKyAgICogcHJpbnRpbmcgYW4gZXJyb3IgbWVzc2FnZS4gICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFlZRVJST1IgPSAyOworCisgIC8vIEludGVybmFsIHJldHVybiBjb2RlcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGZvciB1c2VyIHNlbWFudGljCisgIC8vIGFjdGlvbnMuCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBZWUVSUkxBQiA9IDM7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBZWU5FV1NUQVRFID0gNDsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFlZREVGQVVMVCA9IDU7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBZWVJFRFVDRSA9IDY7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBZWUVSUkxBQjEgPSA3OworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgWVlSRVRVUk4gPSA4OworCisgIHByaXZhdGUgaW50IHl5ZXJyc3RhdHVzXyA9IDA7CisKKyAgLyoqCisgICAqIFJldHVybiB3aGV0aGVyIGVycm9yIHJlY292ZXJ5IGlzIGJlaW5nIGRvbmUuICBJbiB0aGlzIHN0YXRlLCB0aGUgcGFyc2VyCisgICAqIHJlYWRzIHRva2VuIHVudGlsIGl0IHJlYWNoZXMgYSBrbm93biBzdGF0ZSwgYW5kIHRoZW4gcmVzdGFydHMgbm9ybWFsCisgICAqIG9wZXJhdGlvbi4gICovCisgIHB1YmxpYyBmaW5hbCBib29sZWFuIHJlY292ZXJpbmcgKCkKKyAgeworICAgIHJldHVybiB5eWVycnN0YXR1c18gPT0gMDsKKyAgfQorCisgIHByaXZhdGUgaW50IHl5YWN0aW9uIChpbnQgeXluLCBZWVN0YWNrIHl5c3RhY2ssIGludCB5eWxlbikgXWI0X21heWJlX3Rocm93cyhbYjRfdGhyb3dzXSlbCisgIHsKKyAgICBdYjRfeXlzdHlwZVsgeXl2YWw7CisgICAgXWI0X2xvY2F0aW9uc19pZihbYjRfbG9jYXRpb25fdHlwZVsgeXlsb2MgPSB5eWxsb2MgKHl5c3RhY2ssIHl5bGVuKTtdXSlbCisKKyAgICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoKKyAgICAgICBgJCQgPSAkMScuICBPdGhlcndpc2UsIHVzZSB0aGUgdG9wIG9mIHRoZSBzdGFjay4KKworICAgICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8gZ2FyYmFnZS4KKyAgICAgICBUaGlzIGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24KKyAgICAgICB1c2VycyBzaG91bGQgbm90IHJlbHkgdXBvbiBpdC4gICovCisgICAgaWYgKHl5bGVuID4gMCkKKyAgICAgIHl5dmFsID0geXlzdGFjay52YWx1ZUF0ICh5eWxlbiAtIDEpOworICAgIGVsc2UKKyAgICAgIHl5dmFsID0geXlzdGFjay52YWx1ZUF0ICgwKTsKKworICAgIHl5X3JlZHVjZV9wcmludCAoeXluLCB5eXN0YWNrKTsKKworICAgIHN3aXRjaCAoeXluKQorICAgICAgeworCV1iNF91c2VyX2FjdGlvbnNbCisJZGVmYXVsdDogYnJlYWs7CisgICAgICB9CisKKyAgICB5eV9zeW1ib2xfcHJpbnQgKCItPiAkJCA9IiwgeXlyMV9beXluXSwgeXl2YWxdYjRfbG9jYXRpb25zX2lmKFssIHl5bG9jXSlbKTsKKworICAgIHl5c3RhY2sucG9wICh5eWxlbik7CisgICAgeXlsZW4gPSAwOworCisgICAgLyogU2hpZnQgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgKi8KKyAgICB5eW4gPSB5eXIxX1t5eW5dOworICAgIGludCB5eXN0YXRlID0geXlwZ290b19beXluIC0geXludG9rZW5zX10gKyB5eXN0YWNrLnN0YXRlQXQgKDApOworICAgIGlmICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0ZSA8PSB5eWxhc3RfCisJJiYgeXljaGVja19beXlzdGF0ZV0gPT0geXlzdGFjay5zdGF0ZUF0ICgwKSkKKyAgICAgIHl5c3RhdGUgPSB5eXRhYmxlX1t5eXN0YXRlXTsKKyAgICBlbHNlCisgICAgICB5eXN0YXRlID0geXlkZWZnb3RvX1t5eW4gLSB5eW50b2tlbnNfXTsKKworICAgIHl5c3RhY2sucHVzaCAoeXlzdGF0ZSwgeXl2YWxdYjRfbG9jYXRpb25zX2lmKFssIHl5bG9jXSlbKTsKKyAgICByZXR1cm4gWVlORVdTVEFURTsKKyAgfQorCisgIC8qIFJldHVybiBZWVNUUiBhZnRlciBzdHJpcHBpbmcgYXdheSB1bm5lY2Vzc2FyeSBxdW90ZXMgYW5kCisgICAgIGJhY2tzbGFzaGVzLCBzbyB0aGF0IGl0J3Mgc3VpdGFibGUgZm9yIHl5ZXJyb3IuICBUaGUgaGV1cmlzdGljIGlzCisgICAgIHRoYXQgZG91YmxlLXF1b3RpbmcgaXMgdW5uZWNlc3NhcnkgdW5sZXNzIHRoZSBzdHJpbmcgY29udGFpbnMgYW4KKyAgICAgYXBvc3Ryb3BoZSwgYSBjb21tYSwgb3IgYmFja3NsYXNoIChvdGhlciB0aGFuIGJhY2tzbGFzaC1iYWNrc2xhc2gpLgorICAgICBZWVNUUiBpcyB0YWtlbiBmcm9tIHl5dG5hbWUuICAqLworICBwcml2YXRlIGZpbmFsIFN0cmluZyB5eXRuYW1lcnJfIChTdHJpbmcgeXlzdHIpCisgIHsKKyAgICBpZiAoeXlzdHIuY2hhckF0ICgwKSA9PSAnIicpCisgICAgICB7CisgICAgICAgIFN0cmluZ0J1ZmZlciB5eXIgPSBuZXcgU3RyaW5nQnVmZmVyICgpOworICAgICAgICBzdHJpcF9xdW90ZXM6IGZvciAoaW50IGkgPSAxOyBpIDwgeXlzdHIubGVuZ3RoICgpOyBpKyspCisgICAgICAgICAgc3dpdGNoICh5eXN0ci5jaGFyQXQgKGkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSAnXCcnOgorICAgICAgICAgICAgY2FzZSAnLCc6CisgICAgICAgICAgICAgIGJyZWFrIHN0cmlwX3F1b3RlczsKKworICAgICAgICAgICAgY2FzZSAnXFwnOgorCSAgICAgIGlmICh5eXN0ci5jaGFyQXQoKytpKSAhPSAnXFwnKQorICAgICAgICAgICAgICAgIGJyZWFrIHN0cmlwX3F1b3RlczsKKyAgICAgICAgICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIHl5ci5hcHBlbmQgKHl5c3RyLmNoYXJBdCAoaSkpOworICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnIic6CisgICAgICAgICAgICAgIHJldHVybiB5eXIudG9TdHJpbmcgKCk7CisgICAgICAgICAgICB9CisgICAgICB9CisgICAgZWxzZSBpZiAoeXlzdHIuZXF1YWxzICgiJGVuZCIpKQorICAgICAgcmV0dXJuICJlbmQgb2YgaW5wdXQiOworCisgICAgcmV0dXJuIHl5c3RyOworICB9CisKKyAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyAgfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKKyAgYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworICBwcml2YXRlIHZvaWQgeXlfc3ltYm9sX3ByaW50IChTdHJpbmcgcywgaW50IHl5dHlwZSwKKwkJCSAgICAgICAgIF1iNF95eXN0eXBlWyB5eXZhbHVlcF1kbmwKKwkJCQkgYjRfbG9jYXRpb25zX2lmKFssIE9iamVjdCB5eWxvY2F0aW9ucF0pWykKKyAgeworICAgIGlmICh5eWRlYnVnID4gMCkKKyAgICB5eWNkZWJ1ZyAocyArICh5eXR5cGUgPCB5eW50b2tlbnNfID8gIiB0b2tlbiAiIDogIiBudGVybSAiKQorCSAgICAgICsgeXl0bmFtZV9beXl0eXBlXSArICIgKCJdYjRfbG9jYXRpb25zX2lmKFsKKwkgICAgICArIHl5bG9jYXRpb25wICsgIjogIl0pWworCSAgICAgICsgKHl5dmFsdWVwID09IG51bGwgPyAiKG51bGwpIiA6IHl5dmFsdWVwLnRvU3RyaW5nICgpKSArICIpIik7CisgIH0KKworICAvKioKKyAgICogUGFyc2UgaW5wdXQgZnJvbSB0aGUgc2Nhbm5lciB0aGF0IHdhcyBzcGVjaWZpZWQgYXQgb2JqZWN0IGNvbnN0cnVjdGlvbgorICAgKiB0aW1lLiAgUmV0dXJuIHdoZXRoZXIgdGhlIGVuZCBvZiB0aGUgaW5wdXQgd2FzIHJlYWNoZWQgc3VjY2Vzc2Z1bGx5LgorICAgKgorICAgKiBAQHJldHVybiA8dHQ+dHJ1ZTwvdHQ+IGlmIHRoZSBwYXJzaW5nIHN1Y2NlZWRzLiAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QKKyAgICogICAgICAgICAgaW1wbHkgdGhhdCB0aGVyZSB3ZXJlIG5vIHN5bnRheCBlcnJvcnMuCisgICAqLworICBwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSBdYjRfbWF5YmVfdGhyb3dzKFtiNF9saXN0MihbYjRfbGV4X3Rocm93c10sIFtiNF90aHJvd3NdKV0pWworICB7CisgICAgLy8vIExvb2thaGVhZCBhbmQgbG9va2FoZWFkIGluIGludGVybmFsIGZvcm0uCisgICAgaW50IHl5Y2hhciA9IHl5ZW1wdHlfOworICAgIGludCB5eXRva2VuID0gMDsKKworICAgIC8qIFN0YXRlLiAgKi8KKyAgICBpbnQgeXluID0gMDsKKyAgICBpbnQgeXlsZW4gPSAwOworICAgIGludCB5eXN0YXRlID0gMDsKKworICAgIFlZU3RhY2sgeXlzdGFjayA9IG5ldyBZWVN0YWNrICgpOworCisgICAgLyogRXJyb3IgaGFuZGxpbmcuICAqLworICAgIGludCB5eW5lcnJzXyA9IDA7CisgICAgXWI0X2xvY2F0aW9uc19pZihbLy8vIFRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgZXJyb3Igc3RhcnRlZC4KKyAgICBdYjRfbG9jYXRpb25fdHlwZVsgeXllcnJsb2MgPSBudWxsOworCisgICAgLy8vIF1iNF9sb2NhdGlvbl90eXBlWyBvZiB0aGUgbG9va2FoZWFkLgorICAgIF1iNF9sb2NhdGlvbl90eXBlWyB5eWxsb2MgPSBuZXcgXWI0X2xvY2F0aW9uX3R5cGVbIChudWxsLCBudWxsKTsKKworICAgIC8vLyBAQCQuCisgICAgXWI0X2xvY2F0aW9uX3R5cGVbIHl5bG9jO10pCisKKyAgICAvLy8gU2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2thaGVhZC4KKyAgICBiNF95eXN0eXBlWyB5eWx2YWwgPSBudWxsOworCisgICAgeXljZGVidWcgKCJTdGFydGluZyBwYXJzZVxuIik7CisgICAgeXllcnJzdGF0dXNfID0gMDsKKworXW00X2lmZGVmKFtiNF9pbml0aWFsX2FjdGlvbl0sIFsKK2I0X2RvbGxhcl9wdXNoZGVmKFt5eWx2YWxdLCBbXSwgW3l5bGxvY10pZG5sCisvKiBVc2VyIGluaXRpYWxpemF0aW9uIGNvZGUuICAqLworYjRfdXNlcl9pbml0aWFsX2FjdGlvbgorYjRfZG9sbGFyX3BvcGRlZl0pW11kbmwKKworICBbICAvKiBJbml0aWFsaXplIHRoZSBzdGFjay4gICovCisgICAgeXlzdGFjay5wdXNoICh5eXN0YXRlLCB5eWx2YWxdYjRfbG9jYXRpb25zX2lmKFssIHl5bGxvY10pWyk7CisKKyAgICBpbnQgbGFiZWwgPSBZWU5FV1NUQVRFOworICAgIGZvciAoOzspCisgICAgICBzd2l0Y2ggKGxhYmVsKQorICAgICAgeworICAgICAgICAvKiBOZXcgc3RhdGUuICBVbmxpa2UgaW4gdGhlIEMvQysrIHNrZWxldG9ucywgdGhlIHN0YXRlIGlzIGFscmVhZHkKKwkgICBwdXNoZWQgd2hlbiB3ZSBjb21lIGhlcmUuICAqLworICAgICAgY2FzZSBZWU5FV1NUQVRFOgorICAgICAgICB5eWNkZWJ1ZyAoIkVudGVyaW5nIHN0YXRlICIgKyB5eXN0YXRlICsgIlxuIik7CisgICAgICAgIGlmICh5eWRlYnVnID4gMCkKKyAgICAgICAgICB5eXN0YWNrLnByaW50ICh5eURlYnVnU3RyZWFtKTsKKworICAgICAgICAvKiBBY2NlcHQ/ICAqLworICAgICAgICBpZiAoeXlzdGF0ZSA9PSB5eWZpbmFsXykKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAvKiBUYWtlIGEgZGVjaXNpb24uICBGaXJzdCB0cnkgd2l0aG91dCBsb29rYWhlYWQuICAqLworICAgICAgICB5eW4gPSB5eXBhY3RfW3l5c3RhdGVdOworICAgICAgICBpZiAoeXlfcGFjdF92YWx1ZV9pc19kZWZhdWx0XyAoeXluKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBsYWJlbCA9IFlZREVGQVVMVDsKKwkgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgIC8qIFJlYWQgYSBsb29rYWhlYWQgdG9rZW4uICAqLworICAgICAgICBpZiAoeXljaGFyID09IHl5ZW1wdHlfKQorICAgICAgICAgIHsKKwkgICAgeXljZGVidWcgKCJSZWFkaW5nIGEgdG9rZW46ICIpOworCSAgICB5eWNoYXIgPSB5eWxleCAoKTtdCisgICAgICAgICAgICBiNF9sb2NhdGlvbnNfaWYoW1sKKwkgICAgeXlsbG9jID0gbmV3IF1iNF9sb2NhdGlvbl90eXBlWyh5eWxleGVyLmdldFN0YXJ0UG9zICgpLAorCQkJCSAgICAgICAgICAgIHl5bGV4ZXIuZ2V0RW5kUG9zICgpKTtdXSkKKyAgICAgICAgICAgIHl5bHZhbCA9IHl5bGV4ZXIuZ2V0TFZhbCAoKTtbCisgICAgICAgICAgfQorCisgICAgICAgIC8qIENvbnZlcnQgdG9rZW4gdG8gaW50ZXJuYWwgZm9ybS4gICovCisgICAgICAgIGlmICh5eWNoYXIgPD0gRU9GKQorICAgICAgICAgIHsKKwkgICAgeXljaGFyID0geXl0b2tlbiA9IEVPRjsKKwkgICAgeXljZGVidWcgKCJOb3cgYXQgZW5kIG9mIGlucHV0LlxuIik7CisgICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgeworCSAgICB5eXRva2VuID0geXl0cmFuc2xhdGVfICh5eWNoYXIpOworCSAgICB5eV9zeW1ib2xfcHJpbnQgKCJOZXh0IHRva2VuIGlzIiwgeXl0b2tlbiwKKwkJCSAgICAgeXlsdmFsXWI0X2xvY2F0aW9uc19pZihbLCB5eWxsb2NdKVspOworICAgICAgICAgIH0KKworICAgICAgICAvKiBJZiB0aGUgcHJvcGVyIGFjdGlvbiBvbiBzZWVpbmcgdG9rZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KKyAgICAgICAgICAgZGV0ZWN0IGFuIGVycm9yLCB0YWtlIHRoYXQgYWN0aW9uLiAgKi8KKyAgICAgICAgeXluICs9IHl5dG9rZW47CisgICAgICAgIGlmICh5eW4gPCAwIHx8IHl5bGFzdF8gPCB5eW4gfHwgeXljaGVja19beXluXSAhPSB5eXRva2VuKQorICAgICAgICAgIGxhYmVsID0gWVlERUZBVUxUOworCisgICAgICAgIC8qIDw9IDAgbWVhbnMgcmVkdWNlIG9yIGVycm9yLiAgKi8KKyAgICAgICAgZWxzZSBpZiAoKHl5biA9IHl5dGFibGVfW3l5bl0pIDw9IDApCisgICAgICAgICAgeworCSAgICBpZiAoeXlfdGFibGVfdmFsdWVfaXNfZXJyb3JfICh5eW4pKQorCSAgICAgIGxhYmVsID0gWVlFUlJMQUI7CisJICAgIGVsc2UKKwkgICAgICB7CisJICAgICAgICB5eW4gPSAteXluOworCSAgICAgICAgbGFiZWwgPSBZWVJFRFVDRTsKKwkgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBTaGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8KKwkgICAgeXlfc3ltYm9sX3ByaW50ICgiU2hpZnRpbmciLCB5eXRva2VuLAorCQkJICAgICB5eWx2YWxdYjRfbG9jYXRpb25zX2lmKFssIHl5bGxvY10pWyk7CisKKyAgICAgICAgICAgIC8qIERpc2NhcmQgdGhlIHRva2VuIGJlaW5nIHNoaWZ0ZWQuICAqLworICAgICAgICAgICAgeXljaGFyID0geXllbXB0eV87CisKKyAgICAgICAgICAgIC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3IKKyAgICAgICAgICAgICAgIHN0YXR1cy4gICovCisgICAgICAgICAgICBpZiAoeXllcnJzdGF0dXNfID4gMCkKKyAgICAgICAgICAgICAgLS15eWVycnN0YXR1c187CisKKyAgICAgICAgICAgIHl5c3RhdGUgPSB5eW47CisgICAgICAgICAgICB5eXN0YWNrLnB1c2ggKHl5c3RhdGUsIHl5bHZhbF1iNF9sb2NhdGlvbnNfaWYoWywgeXlsbG9jXSlbKTsKKyAgICAgICAgICAgIGxhYmVsID0gWVlORVdTVEFURTsKKyAgICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorICAgICAgfCB5eWRlZmF1bHQgLS0gZG8gdGhlIGRlZmF1bHQgYWN0aW9uIGZvciB0aGUgY3VycmVudCBzdGF0ZS4gIHwKKyAgICAgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICBjYXNlIFlZREVGQVVMVDoKKyAgICAgICAgeXluID0geXlkZWZhY3RfW3l5c3RhdGVdOworICAgICAgICBpZiAoeXluID09IDApCisgICAgICAgICAgbGFiZWwgPSBZWUVSUkxBQjsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGxhYmVsID0gWVlSRURVQ0U7CisgICAgICAgIGJyZWFrOworCisgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorICAgICAgfCB5eXJlZHVjZSAtLSBEbyBhIHJlZHVjdGlvbi4gIHwKKyAgICAgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICBjYXNlIFlZUkVEVUNFOgorICAgICAgICB5eWxlbiA9IHl5cjJfW3l5bl07CisgICAgICAgIGxhYmVsID0geXlhY3Rpb24gKHl5biwgeXlzdGFjaywgeXlsZW4pOworCXl5c3RhdGUgPSB5eXN0YWNrLnN0YXRlQXQgKDApOworICAgICAgICBicmVhazsKKworICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisgICAgICB8IHl5ZXJybGFiIC0tIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9yIHwKKyAgICAgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgICAgY2FzZSBZWUVSUkxBQjoKKyAgICAgICAgLyogSWYgbm90IGFscmVhZHkgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZXBvcnQgdGhpcyBlcnJvci4gICovCisgICAgICAgIGlmICh5eWVycnN0YXR1c18gPT0gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgICArK3l5bmVycnNfOworICAgICAgICAgICAgaWYgKHl5Y2hhciA9PSB5eWVtcHR5XykKKyAgICAgICAgICAgICAgeXl0b2tlbiA9IHl5ZW1wdHlfOworICAgICAgICAgICAgeXllcnJvciAoXWI0X2xvY2F0aW9uc19pZihbeXlsbG9jLCBdKVt5eXN5bnRheF9lcnJvciAoeXlzdGF0ZSwgeXl0b2tlbikpOworICAgICAgICAgIH0KKworICAgICAgICBdYjRfbG9jYXRpb25zX2lmKFt5eWVycmxvYyA9IHl5bGxvYztdKVsKKyAgICAgICAgaWYgKHl5ZXJyc3RhdHVzXyA9PSAzKQorICAgICAgICAgIHsKKwkgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBhbgorCSAgICAgZXJyb3IsIGRpc2NhcmQgaXQuICAqLworCisJICAgIGlmICh5eWNoYXIgPD0gRU9GKQorCSAgICAgIHsKKwkgICAgICAvKiBSZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQuICAqLworCSAgICAgIGlmICh5eWNoYXIgPT0gRU9GKQorCSAgICAgICAgcmV0dXJuIGZhbHNlOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHl5Y2hhciA9IHl5ZW1wdHlfOworICAgICAgICAgIH0KKworICAgICAgICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKKyAgICAgICAgICAgdG9rZW4uICAqLworICAgICAgICBsYWJlbCA9IFlZRVJSTEFCMTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorICAgICAgfCBlcnJvcmxhYiAtLSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBZWUVSUk9SLiAgfAorICAgICAgYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICBjYXNlIFlZRVJST1I6CisKKyAgICAgICAgXWI0X2xvY2F0aW9uc19pZihbeXllcnJsb2MgPSB5eXN0YWNrLmxvY2F0aW9uQXQgKHl5bGVuIC0gMSk7XSlbCisgICAgICAgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAgICAgICAgdGhpcyBZWUVSUk9SLiAgKi8KKyAgICAgICAgeXlzdGFjay5wb3AgKHl5bGVuKTsKKyAgICAgICAgeXlsZW4gPSAwOworICAgICAgICB5eXN0YXRlID0geXlzdGFjay5zdGF0ZUF0ICgwKTsKKyAgICAgICAgbGFiZWwgPSBZWUVSUkxBQjE7CisgICAgICAgIGJyZWFrOworCisgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisgICAgICB8IHl5ZXJybGFiMSAtLSBjb21tb24gY29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJST1IuICB8CisgICAgICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICBjYXNlIFlZRVJSTEFCMToKKyAgICAgICAgeXllcnJzdGF0dXNfID0gMzsJLyogRWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KKworICAgICAgICBmb3IgKDs7KQorICAgICAgICAgIHsKKwkgICAgeXluID0geXlwYWN0X1t5eXN0YXRlXTsKKwkgICAgaWYgKCF5eV9wYWN0X3ZhbHVlX2lzX2RlZmF1bHRfICh5eW4pKQorCSAgICAgIHsKKwkgICAgICAgIHl5biArPSB5eXRlcnJvcl87CisJICAgICAgICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IHl5bGFzdF8gJiYgeXljaGVja19beXluXSA9PSB5eXRlcnJvcl8pCisJICAgICAgICAgIHsKKwkgICAgICAgICAgICB5eW4gPSB5eXRhYmxlX1t5eW5dOworCSAgICAgICAgICAgIGlmICgwIDwgeXluKQorCQkgICAgICBicmVhazsKKwkgICAgICAgICAgfQorCSAgICAgIH0KKworCSAgICAvKiBQb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbi4gICovCisJICAgIGlmICh5eXN0YWNrLmhlaWdodCA9PSAwKQorCSAgICAgIHJldHVybiBmYWxzZTsKKworCSAgICBdYjRfbG9jYXRpb25zX2lmKFt5eWVycmxvYyA9IHl5c3RhY2subG9jYXRpb25BdCAoMCk7XSlbCisJICAgIHl5c3RhY2sucG9wICgpOworCSAgICB5eXN0YXRlID0geXlzdGFjay5zdGF0ZUF0ICgwKTsKKwkgICAgaWYgKHl5ZGVidWcgPiAwKQorCSAgICAgIHl5c3RhY2sucHJpbnQgKHl5RGVidWdTdHJlYW0pOworICAgICAgICAgIH0KKworCV1iNF9sb2NhdGlvbnNfaWYoWworCS8qIE11Y2sgd2l0aCB0aGUgc3RhY2sgdG8gc2V0dXAgZm9yIHl5bGxvYy4gICovCisJeXlzdGFjay5wdXNoICgwLCBudWxsLCB5eWxsb2MpOworCXl5c3RhY2sucHVzaCAoMCwgbnVsbCwgeXllcnJsb2MpOworICAgICAgICB5eWxvYyA9IHl5bGxvYyAoeXlzdGFjaywgMik7CisJeXlzdGFjay5wb3AgKDIpO10pWworCisgICAgICAgIC8qIFNoaWZ0IHRoZSBlcnJvciB0b2tlbi4gICovCisgICAgICAgIHl5X3N5bWJvbF9wcmludCAoIlNoaWZ0aW5nIiwgeXlzdG9zX1t5eW5dLAorCQkJIHl5bHZhbF1iNF9sb2NhdGlvbnNfaWYoWywgeXlsb2NdKVspOworCisgICAgICAgIHl5c3RhdGUgPSB5eW47CisJeXlzdGFjay5wdXNoICh5eW4sIHl5bHZhbF1iNF9sb2NhdGlvbnNfaWYoWywgeXlsb2NdKVspOworICAgICAgICBsYWJlbCA9IFlZTkVXU1RBVEU7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qIEFjY2VwdC4gICovCisgICAgICBjYXNlIFlZQUNDRVBUOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAvKiBBYm9ydC4gICovCisgICAgICBjYXNlIFlZQUJPUlQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgfQorCisgIC8vIEdlbmVyYXRlIGFuIGVycm9yIG1lc3NhZ2UuCisgIHByaXZhdGUgU3RyaW5nIHl5c3ludGF4X2Vycm9yIChpbnQgeXlzdGF0ZSwgaW50IHRvaykKKyAgeworICAgIGlmIChlcnJvclZlcmJvc2UpCisgICAgICB7CisgICAgICAgIC8qIFRoZXJlIGFyZSBtYW55IHBvc3NpYmlsaXRpZXMgaGVyZSB0byBjb25zaWRlcjoKKyAgICAgICAgICAgLSBBc3N1bWUgWVlGQUlMIGlzIG5vdCB1c2VkLiAgSXQncyB0b28gZmxhd2VkIHRvIGNvbnNpZGVyLgorICAgICAgICAgICAgIFNlZQorICAgICAgICAgICAgIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA5LTEyL21zZzAwMDI0Lmh0bWw+CisgICAgICAgICAgICAgZm9yIGRldGFpbHMuICBZWUVSUk9SIGlzIGZpbmUgYXMgaXQgZG9lcyBub3QgaW52b2tlIHRoaXMKKyAgICAgICAgICAgICBmdW5jdGlvbi4KKyAgICAgICAgICAgLSBJZiB0aGlzIHN0YXRlIGlzIGEgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24sCisgICAgICAgICAgICAgdGhlbiB0aGUgb25seSB3YXkgdGhpcyBmdW5jdGlvbiB3YXMgaW52b2tlZCBpcyBpZiB0aGUKKyAgICAgICAgICAgICBkZWZhdWx0IGFjdGlvbiBpcyBhbiBlcnJvciBhY3Rpb24uICBJbiB0aGF0IGNhc2UsIGRvbid0CisgICAgICAgICAgICAgY2hlY2sgZm9yIGV4cGVjdGVkIHRva2VucyBiZWNhdXNlIHRoZXJlIGFyZSBub25lLgorICAgICAgICAgICAtIFRoZSBvbmx5IHdheSB0aGVyZSBjYW4gYmUgbm8gbG9va2FoZWFkIHByZXNlbnQgKGluIHRvaykgaXMKKyAgICAgICAgICAgICBpZiB0aGlzIHN0YXRlIGlzIGEgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24uCisgICAgICAgICAgICAgVGh1cywgZGV0ZWN0aW5nIHRoZSBhYnNlbmNlIG9mIGEgbG9va2FoZWFkIGlzIHN1ZmZpY2llbnQgdG8KKyAgICAgICAgICAgICBkZXRlcm1pbmUgdGhhdCB0aGVyZSBpcyBubyB1bmV4cGVjdGVkIG9yIGV4cGVjdGVkIHRva2VuIHRvCisgICAgICAgICAgICAgcmVwb3J0LiAgSW4gdGhhdCBjYXNlLCBqdXN0IHJlcG9ydCBhIHNpbXBsZSAic3ludGF4IGVycm9yIi4KKyAgICAgICAgICAgLSBEb24ndCBhc3N1bWUgdGhlcmUgaXNuJ3QgYSBsb29rYWhlYWQganVzdCBiZWNhdXNlIHRoaXMKKyAgICAgICAgICAgICBzdGF0ZSBpcyBhIGNvbnNpc3RlbnQgc3RhdGUgd2l0aCBhIGRlZmF1bHQgYWN0aW9uLiAgVGhlcmUKKyAgICAgICAgICAgICBtaWdodCBoYXZlIGJlZW4gYSBwcmV2aW91cyBpbmNvbnNpc3RlbnQgc3RhdGUsIGNvbnNpc3RlbnQKKyAgICAgICAgICAgICBzdGF0ZSB3aXRoIGEgbm9uLWRlZmF1bHQgYWN0aW9uLCBvciB1c2VyIHNlbWFudGljIGFjdGlvbgorICAgICAgICAgICAgIHRoYXQgbWFuaXB1bGF0ZWQgeXljaGFyLiAgKEhvd2V2ZXIsIHl5Y2hhciBpcyBjdXJyZW50bHkgb3V0CisgICAgICAgICAgICAgb2Ygc2NvcGUgZHVyaW5nIHNlbWFudGljIGFjdGlvbnMuKQorICAgICAgICAgICAtIE9mIGNvdXJzZSwgdGhlIGV4cGVjdGVkIHRva2VuIGxpc3QgZGVwZW5kcyBvbiBzdGF0ZXMgdG8KKyAgICAgICAgICAgICBoYXZlIGNvcnJlY3QgbG9va2FoZWFkIGluZm9ybWF0aW9uLCBhbmQgaXQgZGVwZW5kcyBvbiB0aGUKKyAgICAgICAgICAgICBwYXJzZXIgbm90IHRvIHBlcmZvcm0gZXh0cmEgcmVkdWN0aW9ucyBhZnRlciBmZXRjaGluZyBhCisgICAgICAgICAgICAgbG9va2FoZWFkIGZyb20gdGhlIHNjYW5uZXIgYW5kIGJlZm9yZSBkZXRlY3RpbmcgYSBzeW50YXgKKyAgICAgICAgICAgICBlcnJvci4gIFRodXMsIHN0YXRlIG1lcmdpbmcgKGZyb20gTEFMUiBvciBJRUxSKSBhbmQgZGVmYXVsdAorICAgICAgICAgICAgIHJlZHVjdGlvbnMgY29ycnVwdCB0aGUgZXhwZWN0ZWQgdG9rZW4gbGlzdC4gIEhvd2V2ZXIsIHRoZQorICAgICAgICAgICAgIGxpc3QgaXMgY29ycmVjdCBmb3IgY2Fub25pY2FsIExSIHdpdGggb25lIGV4Y2VwdGlvbjogaXQKKyAgICAgICAgICAgICB3aWxsIHN0aWxsIGNvbnRhaW4gYW55IHRva2VuIHRoYXQgd2lsbCBub3QgYmUgYWNjZXB0ZWQgZHVlCisgICAgICAgICAgICAgdG8gYW4gZXJyb3IgYWN0aW9uIGluIGEgbGF0ZXIgc3RhdGUuCisgICAgICAgICovCisgICAgICAgIGlmICh0b2sgIT0geXllbXB0eV8pCisgICAgICAgICAgeworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIG9mIGJ1aWxkaW5nIHRoZSBtZXNzYWdlIGlzIG5vdCBjb21wYXRpYmxlCisgICAgICAgICAgICAvLyB3aXRoIGludGVybmF0aW9uYWxpemF0aW9uLgorICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHJlcyA9CisgICAgICAgICAgICAgIG5ldyBTdHJpbmdCdWZmZXIgKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgIik7CisgICAgICAgICAgICByZXMuYXBwZW5kICh5eXRuYW1lcnJfICh5eXRuYW1lX1t0b2tdKSk7CisgICAgICAgICAgICBpbnQgeXluID0geXlwYWN0X1t5eXN0YXRlXTsKKyAgICAgICAgICAgIGlmICgheXlfcGFjdF92YWx1ZV9pc19kZWZhdWx0XyAoeXluKSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFN0YXJ0IFlZWCBhdCAtWVlOIGlmIG5lZ2F0aXZlIHRvIGF2b2lkIG5lZ2F0aXZlCisgICAgICAgICAgICAgICAgICAgaW5kZXhlcyBpbiBZWUNIRUNLLiAgSW4gb3RoZXIgd29yZHMsIHNraXAgdGhlIGZpcnN0CisgICAgICAgICAgICAgICAgICAgLVlZTiBhY3Rpb25zIGZvciB0aGlzIHN0YXRlIGJlY2F1c2UgdGhleSBhcmUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgIGFjdGlvbnMuICAqLworICAgICAgICAgICAgICAgIGludCB5eXhiZWdpbiA9IHl5biA8IDAgPyAteXluIDogMDsKKyAgICAgICAgICAgICAgICAvKiBTdGF5IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAgKi8KKyAgICAgICAgICAgICAgICBpbnQgeXljaGVja2xpbSA9IHl5bGFzdF8gLSB5eW4gKyAxOworICAgICAgICAgICAgICAgIGludCB5eXhlbmQgPSB5eWNoZWNrbGltIDwgeXludG9rZW5zXyA/IHl5Y2hlY2tsaW0gOiB5eW50b2tlbnNfOworICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IHl5eGJlZ2luOyB4IDwgeXl4ZW5kOyArK3gpCisgICAgICAgICAgICAgICAgICBpZiAoeXljaGVja19beCArIHl5bl0gPT0geCAmJiB4ICE9IHl5dGVycm9yXworICAgICAgICAgICAgICAgICAgICAgICYmICF5eV90YWJsZV92YWx1ZV9pc19lcnJvcl8gKHl5dGFibGVfW3ggKyB5eW5dKSkKKyAgICAgICAgICAgICAgICAgICAgKytjb3VudDsKKyAgICAgICAgICAgICAgICBpZiAoY291bnQgPCA1KQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb3VudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSB5eXhiZWdpbjsgeCA8IHl5eGVuZDsgKyt4KQorICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoZWNrX1t4ICsgeXluXSA9PSB4ICYmIHggIT0geXl0ZXJyb3JfCisgICAgICAgICAgICAgICAgICAgICAgICAgICYmICF5eV90YWJsZV92YWx1ZV9pc19lcnJvcl8gKHl5dGFibGVfW3ggKyB5eW5dKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmFwcGVuZCAoY291bnQrKyA9PSAwID8gIiwgZXhwZWN0aW5nICIgOiAiIG9yICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICByZXMuYXBwZW5kICh5eXRuYW1lcnJfICh5eXRuYW1lX1t4XSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzLnRvU3RyaW5nICgpOworICAgICAgICAgIH0KKyAgICAgIH0KKworICAgIHJldHVybiAic3ludGF4IGVycm9yIjsKKyAgfQorCisgIC8qKgorICAgKiBXaGV0aGVyIHRoZSBnaXZlbiA8Y29kZT55eXBhY3RfPC9jb2RlPiB2YWx1ZSBpbmRpY2F0ZXMgYSBkZWZhdWx0ZWQgc3RhdGUuCisgICAqIEBAcGFyYW0geXl2YWx1ZSAgIHRoZSB2YWx1ZSB0byBjaGVjaworICAgKi8KKyAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiB5eV9wYWN0X3ZhbHVlX2lzX2RlZmF1bHRfIChpbnQgeXl2YWx1ZSkKKyAgeworICAgIHJldHVybiB5eXZhbHVlID09IHl5cGFjdF9uaW5mXzsKKyAgfQorCisgIC8qKgorICAgKiBXaGV0aGVyIHRoZSBnaXZlbiA8Y29kZT55eXRhYmxlXzwvY29kZT4gdmFsdWUgaW5kaWNhdGVzIGEgc3ludGF4IGVycm9yLgorICAgKiBAQHBhcmFtIHl5dmFsdWUgICB0aGUgdmFsdWUgdG8gY2hlY2sKKyAgICovCisgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4geXlfdGFibGVfdmFsdWVfaXNfZXJyb3JfIChpbnQgeXl2YWx1ZSkKKyAgeworICAgIHJldHVybiB5eXZhbHVlID09IHl5dGFibGVfbmluZl87CisgIH0KKworICAvKiBZWVBBQ1RbU1RBVEUtTlVNXSAtLSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKKyAgICAgU1RBVEUtTlVNLiAgKi8KKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgXWI0X2ludF90eXBlX2ZvcihbYjRfcGFjdF0pWyB5eXBhY3RfbmluZl8gPSBdYjRfcGFjdF9uaW5mWzsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgXWI0X2ludF90eXBlX2ZvcihbYjRfcGFjdF0pWyB5eXBhY3RfW10gPQorICB7CisgICAgXWI0X3BhY3RbCisgIH07CisKKyAgLyogWVlERUZBQ1RbU10gLS0gZGVmYXVsdCByZWR1Y3Rpb24gbnVtYmVyIGluIHN0YXRlIFMuICBQZXJmb3JtZWQgd2hlbgorICAgICBZWVRBQkxFIGRvZXNuJ3Qgc3BlY2lmeSBzb21ldGhpbmcgZWxzZSB0byBkby4gIFplcm8gbWVhbnMgdGhlCisgICAgIGRlZmF1bHQgaXMgYW4gZXJyb3IuICAqLworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBdYjRfaW50X3R5cGVfZm9yKFtiNF9kZWZhY3RdKVsgeXlkZWZhY3RfW10gPQorICB7CisgICAgXWI0X2RlZmFjdFsKKyAgfTsKKworICAvKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBdYjRfaW50X3R5cGVfZm9yKFtiNF9wZ290b10pWyB5eXBnb3RvX1tdID0KKyAgeworICAgIF1iNF9wZ290b1sKKyAgfTsKKworICAvKiBZWURFRkdPVE9bTlRFUk0tTlVNXS4gICovCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIF1iNF9pbnRfdHlwZV9mb3IoW2I0X2RlZmdvdG9dKVsKKyAgeXlkZWZnb3RvX1tdID0KKyAgeworICAgIF1iNF9kZWZnb3RvWworICB9OworCisgIC8qIFlZVEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0ZSBTVEFURS1OVU0uICBJZgorICAgICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gKKyAgICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIFlZVEFCTEVfTklORl8sIHN5bnRheCBlcnJvci4gICovCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIF1iNF9pbnRfdHlwZV9mb3IoW2I0X3RhYmxlXSlbIHl5dGFibGVfbmluZl8gPSBdYjRfdGFibGVfbmluZls7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIF1iNF9pbnRfdHlwZV9mb3IoW2I0X3RhYmxlXSlbCisgIHl5dGFibGVfW10gPQorICB7CisgICAgXWI0X3RhYmxlWworICB9OworCisgIC8qIFlZQ0hFQ0suICAqLworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBdYjRfaW50X3R5cGVfZm9yKFtiNF9jaGVja10pWworICB5eWNoZWNrX1tdID0KKyAgeworICAgIF1iNF9jaGVja1sKKyAgfTsKKworICAvKiBTVE9TX1tTVEFURS1OVU1dIC0tIFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCisgICAgIHN5bWJvbCBvZiBzdGF0ZSBTVEFURS1OVU0uICAqLworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBdYjRfaW50X3R5cGVfZm9yKFtiNF9zdG9zXSlbCisgIHl5c3Rvc19bXSA9CisgIHsKKyAgICBdYjRfc3Rvc1sKKyAgfTsKKworICAvKiBUT0tFTl9OVU1CRVJfW1lZTEVYLU5VTV0gLS0gSW50ZXJuYWwgc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nCisgICAgIHRvIFlZTEVYLU5VTS4gICovCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIF1iNF9pbnRfdHlwZV9mb3IoW2I0X3Rva251bV0pWworICB5eXRva2VuX251bWJlcl9bXSA9CisgIHsKKyAgICBdYjRfdG9rbnVtWworICB9OworCisgIC8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2ZXMuICAqLworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBdYjRfaW50X3R5cGVfZm9yKFtiNF9yMV0pWworICB5eXIxX1tdID0KKyAgeworICAgIF1iNF9yMVsKKyAgfTsKKworICAvKiBZWVIyW1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICovCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIF1iNF9pbnRfdHlwZV9mb3IoW2I0X3IyXSlbCisgIHl5cjJfW10gPQorICB7CisgICAgXWI0X3IyWworICB9OworCisgIC8qIFlZVE5BTUVbU1lNQk9MLU5VTV0gLS0gU3RyaW5nIG5hbWUgb2YgdGhlIHN5bWJvbCBTWU1CT0wtTlVNLgorICAgICBGaXJzdCwgdGhlIHRlcm1pbmFscywgdGhlbiwgc3RhcnRpbmcgYXQgXGEgeXludG9rZW5zXywgbm9udGVybWluYWxzLiAgKi8KKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHl5dG5hbWVfW10gPQorICB7CisgICAgXWI0X3RuYW1lWworICB9OworCisgIC8qIFlZUkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gICovCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIF1iNF9pbnRfdHlwZV9mb3IoW2I0X3Joc10pWyB5eXJoc19bXSA9CisgIHsKKyAgICBdYjRfcmhzWworICB9OworCisgIC8qIFlZUFJIU1tZWU5dIC0tIEluZGV4IG9mIHRoZSBmaXJzdCBSSFMgc3ltYm9sIG9mIHJ1bGUgbnVtYmVyIFlZTiBpbgorICAgICBZWVJIUy4gICovCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIF1iNF9pbnRfdHlwZV9mb3IoW2I0X3ByaHNdKVsgeXlwcmhzX1tdID0KKyAgeworICAgIF1iNF9wcmhzWworICB9OworCisgIC8qIFlZUkxJTkVbWVlOXSAtLSBTb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAqLworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBdYjRfaW50X3R5cGVfZm9yKFtiNF9ybGluZV0pWyB5eXJsaW5lX1tdID0KKyAgeworICAgIF1iNF9ybGluZVsKKyAgfTsKKworICAvLyBSZXBvcnQgb24gdGhlIGRlYnVnIHN0cmVhbSB0aGF0IHRoZSBydWxlIHl5cnVsZSBpcyBnb2luZyB0byBiZSByZWR1Y2VkLgorICBwcml2YXRlIHZvaWQgeXlfcmVkdWNlX3ByaW50IChpbnQgeXlydWxlLCBZWVN0YWNrIHl5c3RhY2spCisgIHsKKyAgICBpZiAoeXlkZWJ1ZyA9PSAwKQorICAgICAgcmV0dXJuOworCisgICAgaW50IHl5bG5vID0geXlybGluZV9beXlydWxlXTsKKyAgICBpbnQgeXlucmhzID0geXlyMl9beXlydWxlXTsKKyAgICAvKiBQcmludCB0aGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLCBhbmQgdGhlaXIgcmVzdWx0LiAgKi8KKyAgICB5eWNkZWJ1ZyAoIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgIiArICh5eXJ1bGUgLSAxKQorCSAgICAgICsgIiAobGluZSAiICsgeXlsbm8gKyAiKSwgIik7CisKKyAgICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KKyAgICBmb3IgKGludCB5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQorICAgICAgeXlfc3ltYm9sX3ByaW50ICgiICAgJCIgKyAoeXlpICsgMSkgKyAiID0iLAorCQkgICAgICAgeXlyaHNfW3l5cHJoc19beXlydWxlXSArIHl5aV0sCisJCSAgICAgICBdYjRfcmhzX3ZhbHVlKHl5bnJocywgeXlpICsgMSliNF9sb2NhdGlvbnNfaWYoWywKKwkJICAgICAgIGI0X3Joc19sb2NhdGlvbih5eW5yaHMsIHl5aSArIDEpXSlbKTsKKyAgfQorCisgIC8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBdYjRfaW50X3R5cGVfZm9yKFtiNF90cmFuc2xhdGVdKVsgeXl0cmFuc2xhdGVfdGFibGVfW10gPQorICB7CisgICAgXWI0X3RyYW5zbGF0ZVsKKyAgfTsKKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBdYjRfaW50X3R5cGVfZm9yKFtiNF90cmFuc2xhdGVdKVsgeXl0cmFuc2xhdGVfIChpbnQgdCkKKyAgeworICAgIGlmICh0ID49IDAgJiYgdCA8PSB5eXVzZXJfdG9rZW5fbnVtYmVyX21heF8pCisgICAgICByZXR1cm4geXl0cmFuc2xhdGVfdGFibGVfW3RdOworICAgIGVsc2UKKyAgICAgIHJldHVybiB5eXVuZGVmX3Rva2VuXzsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCB5eWxhc3RfID0gXWI0X2xhc3RbOworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgeXlubnRzXyA9IF1iNF9udGVybXNfbnVtYmVyWzsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IHl5ZW1wdHlfID0gLTI7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCB5eWZpbmFsXyA9IF1iNF9maW5hbF9zdGF0ZV9udW1iZXJbOworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgeXl0ZXJyb3JfID0gMTsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IHl5ZXJyY29kZV8gPSAyNTY7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCB5eW50b2tlbnNfID0gXWI0X3Rva2Vuc19udW1iZXJbOworCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCB5eXVzZXJfdG9rZW5fbnVtYmVyX21heF8gPSBdYjRfdXNlcl90b2tlbl9udW1iZXJfbWF4WzsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IHl5dW5kZWZfdG9rZW5fID0gXWI0X3VuZGVmX3Rva2VuX251bWJlcls7CisKK10vKiBVc2VyIGltcGxlbWVudGF0aW9uIGNvZGUuICAqLworYjRfcGVyY2VudF9jb2RlX2dldFtdZG5sCisKK30KKworYjRfZXBpbG9ndWUKK2I0X291dHB1dF9lbmQoKQpkaWZmIC0tZ2l0IGEvZGF0YS9sb2NhdGlvbi5jYyBiL2RhdGEvbG9jYXRpb24uY2MKaW5kZXggODY5MzIwZS4uNDA4MmUwOSAxMDA2NDQKLS0tIGEvZGF0YS9sb2NhdGlvbi5jYworKysgYi9kYXRhL2xvY2F0aW9uLmNjCkBAIC0xLDg5ICsxLDgzIEBACi1tNF9kaXZlcnQoLTEpCi0KICMgQysrIHNrZWxldG9uIGZvciBCaXNvbgogCi0jIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCisjCiAjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KKyMKICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotIyAwMjExMC0xMzAxICBVU0EKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAKLSMgV2UgZG8gd2FudCBNNCBleHBhbnNpb24gYWZ0ZXIgIyBmb3IgQ1BQIG1hY3Jvcy4KLW00X2NoYW5nZWNvbSgpCi1tNF9kaXZlcnQoMClkbmwKLUBvdXRwdXQgYjRfZGlyX3ByZWZpeFtdcG9zaXRpb24uaGgKKworYjRfb3V0cHV0X2JlZ2luKFtiNF9kaXJfcHJlZml4W11wb3NpdGlvbi5oaF0pCiBiNF9jb3B5cmlnaHQoW1Bvc2l0aW9ucyBmb3IgQmlzb24gcGFyc2VycyBpbiBDKytdLAotICBbMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNl0pWworICAgICAgICAgICAgIFsyMDAyLTIwMDcsIDIwMDktMjAxMl0pWwogCiAvKioKLSAqKiBcZmlsZSBwb3NpdGlvbi5oaAotICoqIERlZmluZSB0aGUgXWI0X25hbWVzcGFjZVs6OnBvc2l0aW9uIGNsYXNzLgorICoqIFxmaWxlIF1iNF9kaXJfcHJlZml4W3Bvc2l0aW9uLmhoCisgKiogRGVmaW5lIHRoZSBdYjRfbmFtZXNwYWNlX3JlZls6OnBvc2l0aW9uIGNsYXNzLgogICovCiAKLSNpZm5kZWYgQklTT05fUE9TSVRJT05fSEgKLSMgZGVmaW5lIEJJU09OX1BPU0lUSU9OX0hICitdYjRfY3BwX2d1YXJkX29wZW4oW2I0X2Rpcl9wcmVmaXhbXXBvc2l0aW9uLmhoXSlbCiAKKyMgaW5jbHVkZSA8YWxnb3JpdGhtPiAvLyBzdGQ6Om1heAogIyBpbmNsdWRlIDxpb3N0cmVhbT4KICMgaW5jbHVkZSA8c3RyaW5nPgogCi1uYW1lc3BhY2UgXWI0X25hbWVzcGFjZVsKLXsKK11iNF9udWxsX2RlZmluZVsKKworXWI0X25hbWVzcGFjZV9vcGVuWwogICAvLy8gQWJzdHJhY3QgYSBwb3NpdGlvbi4KICAgY2xhc3MgcG9zaXRpb24KICAgewogICBwdWJsaWM6Ci1dbTRfaWZkZWYoW2I0X2xvY2F0aW9uX2NvbnN0cnVjdG9yc10sIFsKK11tNF9pZmRlZihbYjRfbG9jYXRpb25fY29uc3RydWN0b3JzXSwgW1sKICAgICAvLy8gQ29uc3RydWN0IGEgcG9zaXRpb24uCi0gICAgcG9zaXRpb24gKCkKLSAgICAgIDogZmlsZW5hbWUgKDApLCBsaW5lICgxKSwgY29sdW1uICgwKQorICAgIGV4cGxpY2l0IHBvc2l0aW9uIChdYjRfcGVyY2VudF9kZWZpbmVfZ2V0KFtbZmlsZW5hbWVfdHlwZV1dKVsqIGYgPSBZWV9OVUxMLAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbCA9IF1iNF9sb2NhdGlvbl9pbml0aWFsX2xpbmVbdSwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGMgPSBdYjRfbG9jYXRpb25faW5pdGlhbF9jb2x1bW5bdSkKKyAgICAgIDogZmlsZW5hbWUgKGYpCisgICAgICAsIGxpbmUgKGwpCisgICAgICAsIGNvbHVtbiAoYykKICAgICB7CiAgICAgfQogCi1dKVsKK11dKVsKICAgICAvLy8gSW5pdGlhbGl6YXRpb24uCi0gICAgaW5saW5lIHZvaWQgaW5pdGlhbGl6ZSAoXWI0X2ZpbGVuYW1lX3R5cGVbKiBmbikKKyAgICB2b2lkIGluaXRpYWxpemUgKF1iNF9wZXJjZW50X2RlZmluZV9nZXQoW1tmaWxlbmFtZV90eXBlXV0pWyogZm4gPSBZWV9OVUxMLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGwgPSBdYjRfbG9jYXRpb25faW5pdGlhbF9saW5lW3UsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYyA9IF1iNF9sb2NhdGlvbl9pbml0aWFsX2NvbHVtblt1KQogICAgIHsKICAgICAgIGZpbGVuYW1lID0gZm47Ci0gICAgICBsaW5lID0gMTsKLSAgICAgIGNvbHVtbiA9IDA7CisgICAgICBsaW5lID0gbDsKKyAgICAgIGNvbHVtbiA9IGM7CiAgICAgfQogCiAgICAgLyoqIFxuYW1lIExpbmUgYW5kIENvbHVtbiByZWxhdGVkIG1hbmlwdWxhdG9ycwogICAgICAqKiBceyAqLwotICBwdWJsaWM6CiAgICAgLy8vIChsaW5lIHJlbGF0ZWQpIEFkdmFuY2UgdG8gdGhlIENPVU5UIG5leHQgbGluZXMuCi0gICAgaW5saW5lIHZvaWQgbGluZXMgKGludCBjb3VudCA9IDEpCisgICAgdm9pZCBsaW5lcyAoaW50IGNvdW50ID0gMSkKICAgICB7Ci0gICAgICBjb2x1bW4gPSAwOworICAgICAgY29sdW1uID0gXWI0X2xvY2F0aW9uX2luaXRpYWxfY29sdW1uW3U7CiAgICAgICBsaW5lICs9IGNvdW50OwogICAgIH0KIAogICAgIC8vLyAoY29sdW1uIHJlbGF0ZWQpIEFkdmFuY2UgdG8gdGhlIENPVU5UIG5leHQgY29sdW1ucy4KLSAgICBpbmxpbmUgdm9pZCBjb2x1bW5zIChpbnQgY291bnQgPSAxKQorICAgIHZvaWQgY29sdW1ucyAoaW50IGNvdW50ID0gMSkKICAgICB7Ci0gICAgICBpbnQgbGVmdG1vc3QgPSAwOwotICAgICAgaW50IGN1cnJlbnQgID0gY29sdW1uOwotICAgICAgaWYgKGxlZnRtb3N0IDw9IGN1cnJlbnQgKyBjb3VudCkKLQljb2x1bW4gKz0gY291bnQ7Ci0gICAgICBlbHNlCi0JY29sdW1uID0gMDsKKyAgICAgIGNvbHVtbiA9IHN0ZDo6bWF4IChdYjRfbG9jYXRpb25faW5pdGlhbF9jb2x1bW5bdSwgY29sdW1uICsgY291bnQpOwogICAgIH0KICAgICAvKiogXH0gKi8KIAotICBwdWJsaWM6CiAgICAgLy8vIEZpbGUgbmFtZSB0byB3aGljaCB0aGlzIHBvc2l0aW9uIHJlZmVycy4KLSAgICBdYjRfZmlsZW5hbWVfdHlwZVsqIGZpbGVuYW1lOworICAgIF1iNF9wZXJjZW50X2RlZmluZV9nZXQoW1tmaWxlbmFtZV90eXBlXV0pWyogZmlsZW5hbWU7CiAgICAgLy8vIEN1cnJlbnQgbGluZSBudW1iZXIuCiAgICAgdW5zaWduZWQgaW50IGxpbmU7CiAgICAgLy8vIEN1cnJlbnQgY29sdW1uIG51bWJlci4KQEAgLTkxLDcgKzg1LDcgQEAKICAgfTsKIAogICAvLy8gQWRkIGFuZCBhc3NpZ24gYSBwb3NpdGlvbi4KLSAgaW5saW5lIGNvbnN0IHBvc2l0aW9uJgorICBpbmxpbmUgcG9zaXRpb24mCiAgIG9wZXJhdG9yKz0gKHBvc2l0aW9uJiByZXMsIGNvbnN0IGludCB3aWR0aCkKICAgewogICAgIHJlcy5jb2x1bW5zICh3aWR0aCk7CkBAIC0xMDcsNyArMTAxLDcgQEAKICAgfQogCiAgIC8vLyBBZGQgYW5kIGFzc2lnbiBhIHBvc2l0aW9uLgotICBpbmxpbmUgY29uc3QgcG9zaXRpb24mCisgIGlubGluZSBwb3NpdGlvbiYKICAgb3BlcmF0b3ItPSAocG9zaXRpb24mIHJlcywgY29uc3QgaW50IHdpZHRoKQogICB7CiAgICAgcmV0dXJuIHJlcyArPSAtd2lkdGg7CkBAIC0xMTksNTYgKzExMyw5MyBAQAogICB7CiAgICAgcmV0dXJuIGJlZ2luICsgLXdpZHRoOwogICB9CitdYjRfcGVyY2VudF9kZWZpbmVfZmxhZ19pZihbW2RlZmluZV9sb2NhdGlvbl9jb21wYXJpc29uXV0sIFtbCisgIC8vLyBDb21wYXJlIHR3byBwb3NpdGlvbiBvYmplY3RzLgorICBpbmxpbmUgYm9vbAorICBvcGVyYXRvcj09IChjb25zdCBwb3NpdGlvbiYgcG9zMSwgY29uc3QgcG9zaXRpb24mIHBvczIpCisgIHsKKyAgICByZXR1cm4gKHBvczEubGluZSA9PSBwb3MyLmxpbmUKKyAgICAgICAgICAgICYmIHBvczEuY29sdW1uID09IHBvczIuY29sdW1uCisgICAgICAgICAgICAmJiAocG9zMS5maWxlbmFtZSA9PSBwb3MyLmZpbGVuYW1lCisgICAgICAgICAgICAgICAgfHwgKHBvczEuZmlsZW5hbWUgJiYgcG9zMi5maWxlbmFtZQorICAgICAgICAgICAgICAgICAgICAmJiAqcG9zMS5maWxlbmFtZSA9PSAqcG9zMi5maWxlbmFtZSkpKTsKKyAgfQogCisgIC8vLyBDb21wYXJlIHR3byBwb3NpdGlvbiBvYmplY3RzLgorICBpbmxpbmUgYm9vbAorICBvcGVyYXRvciE9IChjb25zdCBwb3NpdGlvbiYgcG9zMSwgY29uc3QgcG9zaXRpb24mIHBvczIpCisgIHsKKyAgICByZXR1cm4gIShwb3MxID09IHBvczIpOworICB9CitdXSlbCiAgIC8qKiBcYnJpZWYgSW50ZXJjZXB0IG91dHB1dCBzdHJlYW0gcmVkaXJlY3Rpb24uCiAgICAqKiBccGFyYW0gb3N0ciB0aGUgZGVzdGluYXRpb24gb3V0cHV0IHN0cmVhbQogICAgKiogXHBhcmFtIHBvcyBhIHJlZmVyZW5jZSB0byB0aGUgcG9zaXRpb24gdG8gcmVkaXJlY3QKICAgICovCi0gIGlubGluZSBzdGQ6Om9zdHJlYW0mCi0gIG9wZXJhdG9yPDwgKHN0ZDo6b3N0cmVhbSYgb3N0ciwgY29uc3QgcG9zaXRpb24mIHBvcykKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFlZQ2hhcj4KKyAgaW5saW5lIHN0ZDo6YmFzaWNfb3N0cmVhbTxZWUNoYXI+JgorICBvcGVyYXRvcjw8IChzdGQ6OmJhc2ljX29zdHJlYW08WVlDaGFyPiYgb3N0ciwgY29uc3QgcG9zaXRpb24mIHBvcykKICAgewogICAgIGlmIChwb3MuZmlsZW5hbWUpCiAgICAgICBvc3RyIDw8ICpwb3MuZmlsZW5hbWUgPDwgJzonOwogICAgIHJldHVybiBvc3RyIDw8IHBvcy5saW5lIDw8ICcuJyA8PCBwb3MuY29sdW1uOwogICB9CiAKLX0KLSNlbmRpZiAvLyBub3QgQklTT05fUE9TSVRJT05fSEhdCi1Ab3V0cHV0IGI0X2Rpcl9wcmVmaXhbXWxvY2F0aW9uLmhoCitdYjRfbmFtZXNwYWNlX2Nsb3NlWworXWI0X2NwcF9ndWFyZF9jbG9zZShbYjRfZGlyX3ByZWZpeFtdcG9zaXRpb24uaGhdKQorYjRfb3V0cHV0X2VuZCgpCisKKworYjRfb3V0cHV0X2JlZ2luKFtiNF9kaXJfcHJlZml4W11sb2NhdGlvbi5oaF0pCiBiNF9jb3B5cmlnaHQoW0xvY2F0aW9ucyBmb3IgQmlzb24gcGFyc2VycyBpbiBDKytdLAotICBbMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNl0pWworICAgICAgICAgICAgIFsyMDAyLTIwMDcsIDIwMDktMjAxMl0pWwogCiAvKioKLSAqKiBcZmlsZSBsb2NhdGlvbi5oaAotICoqIERlZmluZSB0aGUgXWI0X25hbWVzcGFjZVs6OmxvY2F0aW9uIGNsYXNzLgorICoqIFxmaWxlIF1iNF9kaXJfcHJlZml4W2xvY2F0aW9uLmhoCisgKiogRGVmaW5lIHRoZSBdYjRfbmFtZXNwYWNlX3JlZls6OmxvY2F0aW9uIGNsYXNzLgogICovCiAKLSNpZm5kZWYgQklTT05fTE9DQVRJT05fSEgKLSMgZGVmaW5lIEJJU09OX0xPQ0FUSU9OX0hICitdYjRfY3BwX2d1YXJkX29wZW4oW2I0X2Rpcl9wcmVmaXhbXWxvY2F0aW9uLmhoXSlbCiAKLSMgaW5jbHVkZSA8aW9zdHJlYW0+Ci0jIGluY2x1ZGUgPHN0cmluZz4KICMgaW5jbHVkZSAicG9zaXRpb24uaGgiCiAKLW5hbWVzcGFjZSBdYjRfbmFtZXNwYWNlWwoteworXWI0X25hbWVzcGFjZV9vcGVuWwogCiAgIC8vLyBBYnN0cmFjdCBhIGxvY2F0aW9uLgogICBjbGFzcyBsb2NhdGlvbgogICB7CiAgIHB1YmxpYzoKIF1tNF9pZmRlZihbYjRfbG9jYXRpb25fY29uc3RydWN0b3JzXSwgWwotICAgIC8vLyBDb25zdHJ1Y3QgYSBsb2NhdGlvbi4KLSAgICBsb2NhdGlvbiAoKQotICAgICAgOiBiZWdpbiAoKSwgZW5kICgpCisgICAgLy8vIENvbnN0cnVjdCBhIGxvY2F0aW9uIGZyb20gXGEgYiB0byBcYSBlLgorICAgIGxvY2F0aW9uIChjb25zdCBwb3NpdGlvbiYgYiwgY29uc3QgcG9zaXRpb24mIGUpCisgICAgICA6IGJlZ2luIChiKQorICAgICAgLCBlbmQgKGUpCisgICAgeworICAgIH0KKworICAgIC8vLyBDb25zdHJ1Y3QgYSAwLXdpZHRoIGxvY2F0aW9uIGluIFxhIHAuCisgICAgZXhwbGljaXQgbG9jYXRpb24gKGNvbnN0IHBvc2l0aW9uJiBwID0gcG9zaXRpb24gKCkpCisgICAgICA6IGJlZ2luIChwKQorICAgICAgLCBlbmQgKHApCisgICAgeworICAgIH0KKworICAgIC8vLyBDb25zdHJ1Y3QgYSAwLXdpZHRoIGxvY2F0aW9uIGluIFxhIGYsIFxhIGwsIFxhIGMuCisgICAgZXhwbGljaXQgbG9jYXRpb24gKF1iNF9wZXJjZW50X2RlZmluZV9nZXQoW1tmaWxlbmFtZV90eXBlXV0pWyogZiwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGwgPSBdYjRfbG9jYXRpb25faW5pdGlhbF9saW5lW3UsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjID0gXWI0X2xvY2F0aW9uX2luaXRpYWxfY29sdW1uW3UpCisgICAgICA6IGJlZ2luIChmLCBsLCBjKQorICAgICAgLCBlbmQgKGYsIGwsIGMpCiAgICAgewogICAgIH0KIAogXSlbCiAgICAgLy8vIEluaXRpYWxpemF0aW9uLgotICAgIGlubGluZSB2b2lkIGluaXRpYWxpemUgKF1iNF9maWxlbmFtZV90eXBlWyogZm4pCisgICAgdm9pZCBpbml0aWFsaXplIChdYjRfcGVyY2VudF9kZWZpbmVfZ2V0KFtbZmlsZW5hbWVfdHlwZV1dKVsqIGYgPSBZWV9OVUxMLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGwgPSBdYjRfbG9jYXRpb25faW5pdGlhbF9saW5lW3UsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYyA9IF1iNF9sb2NhdGlvbl9pbml0aWFsX2NvbHVtblt1KQogICAgIHsKLSAgICAgIGJlZ2luLmluaXRpYWxpemUgKGZuKTsKKyAgICAgIGJlZ2luLmluaXRpYWxpemUgKGYsIGwsIGMpOwogICAgICAgZW5kID0gYmVnaW47CiAgICAgfQogCkBAIC0xNzYsMTkgKzIwNywxOSBAQAogICAgICAqKiBceyAqLwogICBwdWJsaWM6CiAgICAgLy8vIFJlc2V0IGluaXRpYWwgbG9jYXRpb24gdG8gZmluYWwgbG9jYXRpb24uCi0gICAgaW5saW5lIHZvaWQgc3RlcCAoKQorICAgIHZvaWQgc3RlcCAoKQogICAgIHsKICAgICAgIGJlZ2luID0gZW5kOwogICAgIH0KIAogICAgIC8vLyBFeHRlbmQgdGhlIGN1cnJlbnQgbG9jYXRpb24gdG8gdGhlIENPVU5UIG5leHQgY29sdW1ucy4KLSAgICBpbmxpbmUgdm9pZCBjb2x1bW5zICh1bnNpZ25lZCBpbnQgY291bnQgPSAxKQorICAgIHZvaWQgY29sdW1ucyAodW5zaWduZWQgaW50IGNvdW50ID0gMSkKICAgICB7CiAgICAgICBlbmQgKz0gY291bnQ7CiAgICAgfQogCiAgICAgLy8vIEV4dGVuZCB0aGUgY3VycmVudCBsb2NhdGlvbiB0byB0aGUgQ09VTlQgbmV4dCBsaW5lcy4KLSAgICBpbmxpbmUgdm9pZCBsaW5lcyAodW5zaWduZWQgaW50IGNvdW50ID0gMSkKKyAgICB2b2lkIGxpbmVzICh1bnNpZ25lZCBpbnQgY291bnQgPSAxKQogICAgIHsKICAgICAgIGVuZC5saW5lcyAoY291bnQpOwogICAgIH0KQEAgLTIyNCwxNCArMjU1LDMwIEBACiAgICAgcmVzLmNvbHVtbnMgKHdpZHRoKTsKICAgICByZXR1cm4gcmVzOwogICB9CitdYjRfcGVyY2VudF9kZWZpbmVfZmxhZ19pZihbW2RlZmluZV9sb2NhdGlvbl9jb21wYXJpc29uXV0sIFtbCisgIC8vLyBDb21wYXJlIHR3byBsb2NhdGlvbiBvYmplY3RzLgorICBpbmxpbmUgYm9vbAorICBvcGVyYXRvcj09IChjb25zdCBsb2NhdGlvbiYgbG9jMSwgY29uc3QgbG9jYXRpb24mIGxvYzIpCisgIHsKKyAgICByZXR1cm4gbG9jMS5iZWdpbiA9PSBsb2MyLmJlZ2luICYmIGxvYzEuZW5kID09IGxvYzIuZW5kOworICB9CiAKKyAgLy8vIENvbXBhcmUgdHdvIGxvY2F0aW9uIG9iamVjdHMuCisgIGlubGluZSBib29sCisgIG9wZXJhdG9yIT0gKGNvbnN0IGxvY2F0aW9uJiBsb2MxLCBjb25zdCBsb2NhdGlvbiYgbG9jMikKKyAgeworICAgIHJldHVybiAhKGxvYzEgPT0gbG9jMik7CisgIH0KK11dKVsKICAgLyoqIFxicmllZiBJbnRlcmNlcHQgb3V0cHV0IHN0cmVhbSByZWRpcmVjdGlvbi4KICAgICoqIFxwYXJhbSBvc3RyIHRoZSBkZXN0aW5hdGlvbiBvdXRwdXQgc3RyZWFtCiAgICAqKiBccGFyYW0gbG9jIGEgcmVmZXJlbmNlIHRvIHRoZSBsb2NhdGlvbiB0byByZWRpcmVjdAogICAgKioKICAgICoqIEF2b2lkIGR1cGxpY2F0ZSBpbmZvcm1hdGlvbi4KICAgICovCi0gIGlubGluZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwgKHN0ZDo6b3N0cmVhbSYgb3N0ciwgY29uc3QgbG9jYXRpb24mIGxvYykKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFlZQ2hhcj4KKyAgaW5saW5lIHN0ZDo6YmFzaWNfb3N0cmVhbTxZWUNoYXI+JgorICBvcGVyYXRvcjw8IChzdGQ6OmJhc2ljX29zdHJlYW08WVlDaGFyPiYgb3N0ciwgY29uc3QgbG9jYXRpb24mIGxvYykKICAgewogICAgIHBvc2l0aW9uIGxhc3QgPSBsb2MuZW5kIC0gMTsKICAgICBvc3RyIDw8IGxvYy5iZWdpbjsKQEAgLTI0Niw4ICsyOTMsNyBAQAogICAgIHJldHVybiBvc3RyOwogICB9CiAKLX0KK11iNF9uYW1lc3BhY2VfY2xvc2VbCiAKLSNlbmRpZiAvLyBub3QgQklTT05fTE9DQVRJT05fSEhdCi1tNF9kaXZlcnQoLTEpCi1tNF9jaGFuZ2Vjb20oWyNdKQorXWI0X2NwcF9ndWFyZF9jbG9zZShbYjRfZGlyX3ByZWZpeFtdbG9jYXRpb24uaGhdKQorYjRfb3V0cHV0X2VuZCgpCmRpZmYgLS1naXQgYS9kYXRhL200c3VnYXIvZm9yZWFjaC5tNCBiL2RhdGEvbTRzdWdhci9mb3JlYWNoLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYzE5MTMKLS0tIC9kZXYvbnVsbAorKysgYi9kYXRhL200c3VnYXIvZm9yZWFjaC5tNApAQCAtMCwwICsxLDM2MiBAQAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZi4KKyMgZm9yZWFjaC1iYXNlZCByZXBsYWNlbWVudHMgZm9yIHJlY3Vyc2l2ZSBmdW5jdGlvbnMuCisjIFNwZWVkcyB1cCBHTlUgTTQgMS40LnggYnkgYXZvaWRpbmcgcXVhZHJhdGljICRAIHJlY3Vyc2lvbiwgYnV0IHBlbmFsaXplcworIyBHTlUgTTQgMS42IGJ5IHJlcXVpcmluZyBtb3JlIG1lbW9yeSBhbmQgbWFjcm8gZXhwYW5zaW9ucy4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQXV0b2NvbmYuICBUaGlzIHByb2dyYW0gaXMgZnJlZQorIyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKyMgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKyMgcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBBdXRvY29uZiBDb25maWd1cmUgU2NyaXB0IEV4Y2VwdGlvbiwKKyMgdmVyc2lvbiAzLjAsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbmQgYSBjb3B5IG9mIHRoZSBBdXRvY29uZiBDb25maWd1cmUgU2NyaXB0IEV4Y2VwdGlvbiBhbG9uZyB3aXRoCisjIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlcyBDT1BZSU5HdjMgYW5kIENPUFlJTkcuRVhDRVBUSU9OCisjIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBXcml0dGVuIGJ5IEVyaWMgQmxha2UuCisKKyMgSW4gTTQgMS40LngsIGV2ZXJ5IGJ5dGUgb2YgJEAgaXMgcmVzY2FubmVkLiAgVGhpcyBtZWFucyB0aGF0IGFuCisjIGFsZ29yaXRobSBvbiBuIGFyZ3VtZW50cyB0aGF0IHJlY3Vyc2VzIHdpdGggb25lIGxlc3MgYXJndW1lbnQgZWFjaAorIyBpdGVyYXRpb24gd2lsbCBzY2FuIG4gKiAobiArIDEpIC8gMiBhcmd1bWVudHMsIGZvciBPKG5eMikgdGltZS4gIEluCisjIE00IDEuNiwgdGhpcyB3YXMgZml4ZWQgc28gdGhhdCAkQCBpcyBvbmx5IHNjYW5uZWQgb25jZSwgdGhlbgorIyBiYWNrLXJlZmVyZW5jZXMgYXJlIG1hZGUgdG8gaW5mb3JtYXRpb24gc3RvcmVkIGFib3V0IHRoZSBzY2FuLgorIyBUaHVzLCBuIGl0ZXJhdGlvbnMgbmVlZCBvbmx5IHNjYW4gbiBhcmd1bWVudHMsIGZvciBPKG4pIHRpbWUuCisjIEFkZGl0aW9uYWxseSwgaW4gTTQgMS40LngsIHJlY3Vyc2l2ZSBhbGdvcml0aG1zIGRpZCBub3QgY2xlYW4gdXAKKyMgbWVtb3J5IHZlcnkgd2VsbCwgcmVxdWlyaW5nIE8obl4yKSBtZW1vcnkgcmF0aGVyIHRoYW4gTyhuKSBmb3IgbgorIyBpdGVyYXRpb25zLgorIworIyBUaGlzIGZpbGUgaXMgZGVzaWduZWQgdG8gb3ZlcmNvbWUgdGhlIHF1YWRyYXRpYyBuYXR1cmUgb2YgJEAKKyMgcmVjdXJzaW9uIGJ5IHdyaXRpbmcgYSB2YXJpYW50IG9mIG00X2ZvcmVhY2ggdGhhdCB1c2VzIG00X2ZvciByYXRoZXIKKyMgdGhhbiAkQCByZWN1cnNpb24gdG8gb3BlcmF0ZSBvbiB0aGUgbGlzdC4gIFRoaXMgaW52b2x2ZXMgbW9yZSBtYWNybworIyBleHBhbnNpb25zLCBidXQgYXZvaWRzIHRoZSBuZWVkIHRvIHJlc2NhbiBhIHF1YWRyYXRpYyBudW1iZXIgb2YKKyMgYXJndW1lbnRzLCBtYWtpbmcgdGhlc2UgcmVwbGFjZW1lbnRzIHZlcnkgYXR0cmFjdGl2ZSBmb3IgTTQgMS40LnguCisjIE9uIHRoZSBvdGhlciBoYW5kLCBpbiBhbnkgdmVyc2lvbiBvZiBNNCwgZXhwYW5kaW5nIGFkZGl0aW9uYWwgbWFjcm9zCisjIGNvc3RzIGFkZGl0aW9uYWwgdGltZTsgdGhlcmVmb3JlLCBpbiBNNCAxLjYsIHdoZXJlICRAIHJlY3Vyc2lvbiB1c2VzCisjIGZld2VyIG1hY3JvcywgdGhlc2UgcmVwbGFjZW1lbnRzIGFjdHVhbGx5IHBlc3NpbWl6ZSBwZXJmb3JtYW5jZS4KKyMgQWRkaXRpb25hbGx5LCB0aGUgdXNlIG9mICQxMCB0byBtZWFuIHRoZSB0ZW50aCBhcmd1bWVudCB2aW9sYXRlcworIyBQT1NJWDsgYWx0aG91Z2ggYWxsIHZlcnNpb25zIG9mIG00IDEuNC54IHN1cHBvcnQgdGhpcyBtZWFuaW5nLCBhCisjIGZ1dHVyZSBtNCB2ZXJzaW9uIG1heSBzd2l0Y2ggdG8gdGFrZSBpdCBhcyB0aGUgZmlyc3QgYXJndW1lbnQKKyMgY29uY2F0ZW5hdGVkIHdpdGggYSBsaXRlcmFsIDAsIHNvIHRoZSBpbXBsZW1lbnRhdGlvbnMgaW4gdGhpcyBmaWxlCisjIGFyZSBub3QgZnV0dXJlLXByb29mLiAgVGh1cywgdGhpcyBmaWxlIGlzIGNvbmRpdGlvbmFsbHkgaW5jbHVkZWQgYXMKKyMgcGFydCBvZiBtNF9pbml0KCksIG9ubHkgd2hlbiBpdCBpcyBkZXRlY3RlZCB0aGF0IE00IHByb2JhYmx5IGhhcworIyBxdWFkcmF0aWMgYmVoYXZpb3IgKGllLiBpdCBsYWNrcyB0aGUgbWFjcm8gX19tNF92ZXJzaW9uX18pLgorIworIyBQbGVhc2Uga2VlcCB0aGlzIGZpbGUgaW4gc3luYyB3aXRoIG00c3VnYXIubTQuCisKKyMgX200X2ZvcmVhY2goUFJFLCBQT1NULCBJR05PUkVELCBBUkcuLi4pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGb3JtIHRoZSBjb21tb24gYmFzaXMgb2YgdGhlIG00X2ZvcmVhY2ggYW5kIG00X21hcCBtYWNyb3MuICBGb3IgZWFjaAorIyBBUkcsIGV4cGFuZCBQUkVbQVJHXVBPU1RbXS4gIFRoZSBJR05PUkVEIGFyZ3VtZW50IG1ha2VzIHJlY3Vyc2lvbgorIyBlYXNpZXIsIGFuZCBtdXN0IGJlIHN1cHBsaWVkIHJhdGhlciB0aGFuIGltcGxpY2l0LgorIworIyBUaGlzIHZlcnNpb24gbWluaW1pemVzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCAkQCBpcyBldmFsdWF0ZWQgYnkKKyMgdXNpbmcgbTRfZm9yIHRvIGdlbmVyYXRlIGEgYm9pbGVycGxhdGUgaW50byBfbTRfZiB0aGVuIHBhc3NpbmcgJEAgdG8KKyMgdGhhdCB0ZW1wb3JhcnkgbWFjcm8uICBUaHVzLCB0aGUgcmVjdXJzaW9uIGlzIGRvbmUgaW4gbTRfZm9yIHdpdGhvdXQKKyMgcmVwYXJzaW5nIGFueSB1c2VyIGlucHV0LCBhbmQgaXMgbm90IHF1YWRyYXRpYy4gIEZvciBhbiBpZGVhIG9mIGhvdworIyB0aGlzIHdvcmtzLCBub3RlIHRoYXQgbTRfZm9yZWFjaChpLFsxLDJdLFtpXSkgY2FsbHMKKyMgICBfbTRfZm9yZWFjaChbbTRfZGVmaW5lKFtpXSxdLFspaV0sW10sWzFdLFsyXSkKKyMgd2hpY2ggZGVmaW5lcyBfbTRfZjoKKyMgICAkMVskNF0kMltdJDFbJDVdJDJbXV9tNF9wb3BkZWYoW19tNF9mXSkKKyMgdGhlbiBjYWxscyBfbTRfZihbbTRfZGVmaW5lKFtpXSxdLFspaV0sW10sWzFdLFsyXSkgZm9yIGEgbmV0IHJlc3VsdDoKKyMgICBtNF9kZWZpbmUoW2ldLFsxXSlpW11tNF9kZWZpbmUoW2ldLFsyXSlpW11fbTRfcG9wZGVmKFtfbTRfZl0pLgorbTRfZGVmaW5lKFtfbTRfZm9yZWFjaF0sCitbbTRfaWYoWyQjXSwgWzNdLCBbXSwKKyAgICAgICBbbTRfcHVzaGRlZihbX200X2ZdLCBfbTRfZm9yKFs0XSwgWyQjXSwgWzFdLAorICAgWyQwXyhbMV0sIFsyXSxdLCBbKV0pW19tNF9wb3BkZWYoW19tNF9mXSldKV9tNF9mKCRAKV0pXSkKKworbTRfZGVmaW5lKFtfbTRfZm9yZWFjaF9dLAorW1skJDFbJCQzXSQkMltdXV0pCisKKyMgbTRfY2FzZShTV0lUQ0gsIFZBTDEsIElGLVZBTDEsIFZBTDIsIElGLVZBTDIsIC4uLiwgREVGQVVMVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZCB0aGUgZmlyc3QgVkFMIHRoYXQgU1dJVENIIG1hdGNoZXMsIGFuZCBleHBhbmQgdGhlIGNvcnJlc3BvbmRpbmcKKyMgSUYtVkFMLiAgSWYgdGhlcmUgYXJlIG5vIG1hdGNoZXMsIGV4cGFuZCBERUZBVUxULgorIworIyBVc2UgbTRfZm9yIHRvIGNyZWF0ZSBhIHRlbXBvcmFyeSBtYWNybyBpbiB0ZXJtcyBvZiBhIGJvaWxlcnBsYXRlCisjIG00X2lmIHdpdGggZmluYWwgY2xlYW51cC4gIElmICQjIGlzIGV2ZW4sIHdlIGhhdmUgREVGQVVMVDsgaWYgaXQgaXMKKyMgb2RkLCB0aGVuIHJvdW5kaW5nIHRoZSBsYXN0ICQjIHVwIGluIHRoZSB0ZW1wb3JhcnkgbWFjcm8gaXMKKyMgaGFybWxlc3MuICBGb3IgZXhhbXBsZSwgYm90aCBtNF9jYXNlKDEsMiwzLDQsNSkgYW5kCisjIG00X2Nhc2UoMSwyLDMsNCw1LDYpIHJlc3VsdCBpbiB0aGUgaW50ZXJtZWRpYXRlIF9tNF9jYXNlIGJlaW5nCisjICAgbTRfaWYoWyQxXSxbJDJdLFskM10sWyQxXSxbJDRdLFskNV0sX200X3BvcGRlZihbX200X2Nhc2VdKVskNl0pCittNF9kZWZpbmUoW200X2Nhc2VdLAorW200X2lmKG00X2V2YWwoWyQjIDw9IDJdKSwgWzFdLCBbJDJdLAorW200X3B1c2hkZWYoW18kMF0sIFttNF9pZihdX200X2ZvcihbMl0sIG00X2V2YWwoWygkIyAtIDEpIC8gMiAqIDJdKSwgWzJdLAorICAgICBbXyQwXyhdLCBbKV0pW19tNF9wb3BkZWYoCisJIFtfJDBdKV1tNF9kcXVvdGUoJG00X2V2YWwoWygkIyArIDEpICYgfjFdKSlbKV0pXyQwKCRAKV0pXSkKKworbTRfZGVmaW5lKFtfbTRfY2FzZV9dLAorWyQwXyhbMV0sIFskMV0sIG00X2luY3IoWyQxXSkpXSkKKworbTRfZGVmaW5lKFtfbTRfY2FzZV9fXSwKK1tbWyQkMV0sWyQkMl0sWyQkM10sXV0pCisKKyMgbTRfYm1hdGNoKFNXSVRDSCwgUkUxLCBWQUwxLCBSRTIsIFZBTDIsIC4uLiwgREVGQVVMVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgbTQgZXF1aXZhbGVudCBvZgorIworIyBpZiAoU1dJVENIID1+IFJFMSkKKyMgICBWQUwxOworIyBlbGlmIChTV0lUQ0ggPX4gUkUyKQorIyAgIFZBTDI7CisjIGVsaWYgLi4uCisjICAgLi4uCisjIGVsc2UKKyMgICBERUZBVUxUCisjCisjIFdlIGJ1aWxkIHRoZSB0ZW1wb3JhcnkgbWFjcm8gX200X2I6CisjICAgbTRfZGVmaW5lKFtfbTRfYl0sIF9tNF9kZWZuKFtfbTRfYm1hdGNoXSkpX200X2IoWyQxXSwgWyQyXSwgWyQzXSkuLi4KKyMgICBfbTRfYihbJDFdLCBbJG0tMV0sIFskbV0pX200X2IoW10sIFtdLCBbJG0rMV1fbTRfcG9wZGVmKFtfbTRfYl0pKQorIyB0aGVuIGludm9rZSBtNF91bnF1b3RlKF9tNF9iKCRAKSksIGZvciBjb25jYXRlbmF0aW9uIHdpdGggbGF0ZXIgdGV4dC4KK200X2RlZmluZShbbTRfYm1hdGNoXSwKK1ttNF9pZihbJCNdLCAwLCBbbTRfZmF0YWwoWyQwOiB0b28gZmV3IGFyZ3VtZW50czogJCNdKV0sCisgICAgICAgWyQjXSwgMSwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjOiAkMV0pXSwKKyAgICAgICBbJCNdLCAyLCBbJDJdLAorICAgICAgIFttNF9wdXNoZGVmKFtfbTRfYl0sIFttNF9kZWZpbmUoW19tNF9iXSwKKyAgX200X2RlZm4oW18kMF0pKV1fbTRfZm9yKFszXSwgbTRfZXZhbChbKCQjICsgMSkgLyAyICogMiAtIDFdKSwKKyAgWzJdLCBbXyQwXyhdLCBbKV0pW19tNF9iKFtdLCBbXSxdbTRfZHF1b3RlKFskXW00X2V2YWwoCisgIFsoJCMgKyAxKSAvIDIgKiAyXSkpW19tNF9wb3BkZWYoW19tNF9iXSkpXSltNF91bnF1b3RlKF9tNF9iKCRAKSldKV0pCisKK200X2RlZmluZShbX200X2JtYXRjaF0sCitbbTRfaWYobTRfYnJlZ2V4cChbJDFdLCBbJDJdKSwgWy0xXSwgW10sIFtbJDNdbTRfZGVmaW5lKFskMF0pXSldKQorCittNF9kZWZpbmUoW19tNF9ibWF0Y2hfXSwKK1skMF8oWzFdLCBtNF9kZWNyKFskMV0pLCBbJDFdKV0pCisKK200X2RlZmluZShbX200X2JtYXRjaF9fXSwKK1tbX200X2IoWyQkMV0sIFskJDJdLCBbJCQzXSldXSkKKworCisjIG00X2NvbmQoVEVTVDEsIFZBTDEsIElGLVZBTDEsIFRFU1QyLCBWQUwyLCBJRi1WQUwyLCAuLi4sIFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTaW1pbGFyIHRvIG00X2lmLCBleGNlcHQgdGhhdCBlYWNoIFRFU1QgaXMgZXhwYW5kZWQgd2hlbiBlbmNvdW50ZXJlZC4KKyMgSWYgdGhlIGV4cGFuc2lvbiBvZiBURVNUbiBtYXRjaGVzIHRoZSBzdHJpbmcgVkFMbiwgdGhlIHJlc3VsdCBpcyBJRi1WQUxuLgorIyBUaGUgcmVzdWx0IGlzIERFRkFVTFQgaWYgbm8gdGVzdHMgcGFzc2VkLiAgVGhpcyBtYWNybyBhbGxvd3MKKyMgc2hvcnQtY2lyY3VpdGluZyBvZiBleHBlbnNpdmUgdGVzdHMsIHdoZXJlIGl0IHBheXMgdG8gYXJyYW5nZSBxdWljaworIyBmaWx0ZXIgdGVzdHMgdG8gcnVuIGZpcnN0LgorIworIyBtNF9jb25kIGFscmVhZHkgZ3VhcmFudGVlcyBlaXRoZXIgMypuIG9yIDMqbiArIDEgYXJndW1lbnRzLCAxIDw9IG4uCisjIFdlIG9ubHkgaGF2ZSB0byBzcGVlZCB1cCBfbTRfY29uZCwgYnkgYnVpbGRpbmcgdGhlIHRlbXBvcmFyeSBfbTRfYzoKKyMgICBtNF9kZWZpbmUoW19tNF9jXSwgX200X2RlZm4oW200X3VucXVvdGVdKSlfbTRfYyhbbTRfaWYoKCQxKSwgWygkMildLAorIyAgIFtbJDNdbTRfZGVmaW5lKFtfbTRfY10pXSldKV9tNF9jKFttNF9pZigoJDQpLCBbKCQ1KV0sCisjICAgW1skNl1tNF9kZWZpbmUoW19tNF9jXSldKV0pLi4uX200X2MoW200X2lmKCgkbS0yKSwgWygkbS0xKV0sCisjICAgW1skbV1tNF9kZWZpbmUoW19tNF9jXSldKV0pX200X2MoW1skbSsxXV1fbTRfcG9wZGVmKFtfbTRfY10pKQorIyBXZSBpbnZva2UgbTRfdW5xdW90ZShfbTRfYygkQCkpLCBmb3IgY29uY2F0ZW5hdGlvbiB3aXRoIGxhdGVyIHRleHQuCittNF9kZWZpbmUoW19tNF9jb25kXSwKK1ttNF9wdXNoZGVmKFtfbTRfY10sIFttNF9kZWZpbmUoW19tNF9jXSwKKyAgX200X2RlZm4oW200X3VucXVvdGVdKSldX200X2ZvcihbMl0sIG00X2V2YWwoWyQjIC8gMyAqIDMgLSAxXSksIFszXSwKKyAgWyQwXyhdLCBbKV0pW19tNF9jKF1tNF9kcXVvdGUobTRfZHF1b3RlKAorICBbJF1tNF9ldmFsKFskIyAvIDMgKiAzICsgMV0pKSlbX200X3BvcGRlZihbX200X2NdKSldKW00X3VucXVvdGUoX200X2MoJEApKV0pCisKK200X2RlZmluZShbX200X2NvbmRfXSwKK1skMF8obTRfZGVjcihbJDFdKSwgWyQxXSwgbTRfaW5jcihbJDFdKSldKQorCittNF9kZWZpbmUoW19tNF9jb25kX19dLAorW1tfbTRfYyhbbTRfaWYoKCQkMSksIFsoJCQyKV0sIFtbJCQzXW00X2RlZmluZShbX200X2NdKV0pXSldXSkKKworIyBtNF9icGF0c3Vic3RzKFNUUklORywgUkUxLCBTVUJTVDEsIFJFMiwgU1VCU1QyLCAuLi4pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgbTQgZXF1aXZhbGVudCBvZgorIworIyAgICRfID0gU1RSSU5HOworIyAgIHMvUkUxL1NVQlNUMS9nOworIyAgIHMvUkUyL1NVQlNUMi9nOworIyAgIC4uLgorIworIyBtNF9icGF0c3Vic3RzIGFscmVhZHkgdmFsaWRhdGVkIGFuIG9kZCBudW1iZXIgb2YgYXJndW1lbnRzOyB3ZSBvbmx5CisjIG5lZWQgdG8gc3BlZWQgdXAgX200X2JwYXRzdWJzdHMuICBUbyBhdm9pZCBuZXN0aW5nLCB3ZSBidWlsZCB0aGUKKyMgdGVtcG9yYXJ5IF9tNF9wOgorIyAgIG00X2RlZmluZShbX200X3BdLCBbJDFdKW00X2RlZmluZShbX200X3BdLAorIyAgIG00X2JwYXRzdWJzdChtNF9kcXVvdGUoX200X2RlZm4oW19tNF9wXSkpLCBbJDJdLCBbJDNdKSltNF9kZWZpbmUoW19tNF9wXSwKKyMgICBtNF9icGF0c3Vic3QobTRfZHF1b3RlKF9tNF9kZWZuKFtfbTRfcF0pKSwgWyQ0XSwgWyQ1XSkpbTRfZGVmaW5lKFtfbTRfcF0sLi4uCisjICAgbTRfYnBhdHN1YnN0KG00X2RxdW90ZShfbTRfZGVmbihbX200X3BdKSksIFskbS0xXSwgWyRtXSkpbTRfdW5xdW90ZSgKKyMgICBfbTRfZGVmbihbX200X3BdKV9tNF9wb3BkZWYoW19tNF9wXSkpCittNF9kZWZpbmUoW19tNF9icGF0c3Vic3RzXSwKK1ttNF9wdXNoZGVmKFtfbTRfcF0sIFttNF9kZWZpbmUoW19tNF9wXSwKKyAgXW00X2RxdW90ZShbJF0xKVspXV9tNF9mb3IoWzNdLCBbJCNdLCBbMl0sIFskMF8oXSwKKyAgWyldKVttNF91bnF1b3RlKF9tNF9kZWZuKFtfbTRfcF0pX200X3BvcGRlZihbX200X3BdKSldKV9tNF9wKCRAKV0pCisKK200X2RlZmluZShbX200X2JwYXRzdWJzdHNfXSwKK1skMF8obTRfZGVjcihbJDFdKSwgWyQxXSldKQorCittNF9kZWZpbmUoW19tNF9icGF0c3Vic3RzX19dLAorW1ttNF9kZWZpbmUoW19tNF9wXSwKK200X2JwYXRzdWJzdChtNF9kcXVvdGUoX200X2RlZm4oW19tNF9wXSkpLCBbJCQxXSwgWyQkMl0pKV1dKQorCisjIG00X3NoaWZ0bihOLCAuLi4pCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIFJldHVybnMgLi4uIHNoaWZ0ZWQgTiB0aW1lcy4gIFVzZWZ1bCBmb3IgcmVjdXJzaXZlICJ2YXJhcmdzIiBjb25zdHJ1Y3RzLgorIworIyBtNF9zaGlmdG4gYWxyZWFkeSB2YWxpZGF0ZWQgYXJndW1lbnRzOyB3ZSBvbmx5IG5lZWQgdG8gc3BlZWQgdXAKKyMgX200X3NoaWZ0bi4gIElmIE4gaXMgMywgdGhlbiB3ZSBidWlsZCB0aGUgdGVtcG9yYXJ5IF9tNF9zLCBkZWZpbmVkIGFzCisjICAgLFskNV0sWyQ2XSwuLi4sWyRtXV9tNF9wb3BkZWYoW19tNF9zXSkKKyMgYmVmb3JlIGNhbGxpbmcgbTRfc2hpZnQoX200X3MoJEApKS4KK200X2RlZmluZShbX200X3NoaWZ0bl0sCitbbTRfaWYobTRfaW5jcihbJDFdKSwgWyQjXSwgW10sIFttNF9wdXNoZGVmKFtfbTRfc10sCisgIF9tNF9mb3IobTRfZXZhbChbJDEgKyAyXSksIFskI10sIFsxXSwKKyAgW1ssXW00X2RxdW90ZSgkXSwgWyldKVtfbTRfcG9wZGVmKFtfbTRfc10pXSltNF9zaGlmdChfbTRfcygkQCkpXSldKQorCisjIG00X2RvKFNUUklORywgLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhpcyBtYWNybyBpbnZva2VzIGFsbCBpdHMgYXJndW1lbnRzIChpbiBzZXF1ZW5jZSwgb2YgY291cnNlKS4gIEl0IGlzCisjIHVzZWZ1bCBmb3IgbWFraW5nIHlvdXIgbWFjcm9zIG1vcmUgc3RydWN0dXJlZCBhbmQgcmVhZGFibGUgYnkgZHJvcHBpbmcKKyMgdW5uZWNlc3NhcnkgZG5sJ3MgYW5kIGhhdmUgdGhlIG1hY3JvcyBpbmRlbnRlZCBwcm9wZXJseS4KKyMKKyMgSGVyZSwgd2UgdXNlIHRoZSB0ZW1wb3JhcnkgbWFjcm8gX200X2RvLCBkZWZpbmVkIGFzCisjICAgJDFbXSQyW10uLi5bXSRuW11fbTRfcG9wZGVmKFtfbTRfZG9dKQorbTRfZGVmaW5lKFttNF9kb10sCitbbTRfaWYoWyQjXSwgWzBdLCBbXSwKKyAgICAgICBbbTRfcHVzaGRlZihbXyQwXSwgX200X2ZvcihbMV0sIFskI10sIFsxXSwKKwkJICAgWyRdLCBbW1tdXV0pW19tNF9wb3BkZWYoW18kMF0pXSlfJDAoJEApXSldKQorCisjIG00X2RxdW90ZV9lbHQoQVJHUykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZXR1cm4gQVJHUyBhcyBhbiB1bnF1b3RlZCBsaXN0IG9mIGRvdWJsZS1xdW90ZWQgYXJndW1lbnRzLgorIworIyBfbTRfZm9yZWFjaCB0byB0aGUgcmVzY3VlLgorbTRfZGVmaW5lKFttNF9kcXVvdGVfZWx0XSwKK1ttNF9pZihbJCNdLCBbMF0sIFtdLCBbW1skMV1dX200X2ZvcmVhY2goWyxtNF9kcXVvdGUoXSwgWyldLCAkQCldKV0pCisKKyMgbTRfcmV2ZXJzZShBUkdTKQorIyAtLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCBBUkdTIGluIHJldmVyc2Ugb3JkZXIuCisjCisjIEludm9rZSBfbTRfcigkQCkgd2l0aCB0aGUgdGVtcG9yYXJ5IF9tNF9yIGJ1aWx0IGFzCisjICAgWyRtXSwgWyRtLTFdLCAuLi4sIFskMl0sIFskMV1fbTRfcG9wZGVmKFtfbTRfcl0pCittNF9kZWZpbmUoW200X3JldmVyc2VdLAorW200X2lmKFskI10sIFswXSwgW10sIFskI10sIFsxXSwgW1skMV1dLAorW200X3B1c2hkZWYoW19tNF9yXSwgW1skJCNdXV9tNF9mb3IobTRfZGVjcihbJCNdKSwgWzFdLCBbLTFdLAorICAgIFtbLCBdbTRfZHF1b3RlKCRdLCBbKV0pW19tNF9wb3BkZWYoW19tNF9yXSldKV9tNF9yKCRAKV0pXSkKKworCisjIG00X21hcF9hcmdzX3BhaXIoRVhQUkVTU0lPTiwgW0VORC1FWFBSID0gRVhQUkVTU0lPTl0sIEFSRy4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQZXJmb3JtIGEgcGFpcndpc2UgZ3JvdXBpbmcgb2YgY29uc2VjdXRpdmUgQVJHcywgYnkgZXhwYW5kaW5nCisjIEVYUFJFU1NJT04oW0FSRzFdLCBbQVJHMl0pLiAgSWYgdGhlcmUgYXJlIGFuIG9kZCBudW1iZXIgb2YgQVJHcywgdGhlCisjIGZpbmFsIGFyZ3VtZW50IGlzIGV4cGFuZGVkIHdpdGggRU5ELUVYUFIoW0FSR25dKS4KKyMKKyMgQnVpbGQgdGhlIHRlbXBvcmFyeSBtYWNybyBfbTRfbWFwX2FyZ3NfcGFpciwgd2l0aCB0aGUgJDIoWyRtKzFdKQorIyBvbmx5IG91dHB1dCBpZiAkIyBpcyBvZGQ6CisjICAgJDEoWyQzXSwgWyQ0XSlbXSQxKFskNV0sIFskNl0pW10uLi4kMShbJG0tMV0sCisjICAgWyRtXSlbXW00X2RlZmF1bHQoWyQyXSwgWyQxXSkoWyRtKzFdKVtdX200X3BvcGRlZihbX200X21hcF9hcmdzX3BhaXJdKQorbTRfZGVmaW5lKFttNF9tYXBfYXJnc19wYWlyXSwKK1ttNF9pZihbJCNdLCBbMF0sIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkI10pXSwKKyAgICAgICBbJCNdLCBbMV0sIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkIzogJDFdKV0sCisgICAgICAgWyQjXSwgWzJdLCBbXSwKKyAgICAgICBbJCNdLCBbM10sIFttNF9kZWZhdWx0KFskMl0sIFskMV0pKFskM10pW11dLAorICAgICAgIFttNF9wdXNoZGVmKFtfJDBdLCBfbTRfZm9yKFszXSwKKyAgIG00X2V2YWwoWyQjIC8gMiAqIDIgLSAxXSksIFsyXSwgW18kMF8oXSwgWyldKV8kMF9lbmQoCisgICBbMV0sIFsyXSwgWyQjXSlbX200X3BvcGRlZihbXyQwXSldKV8kMCgkQCldKV0pCisKK200X2RlZmluZShbX200X21hcF9hcmdzX3BhaXJfXSwKK1skMF8oWzFdLCBbJDFdLCBtNF9pbmNyKFskMV0pKV0pCisKK200X2RlZmluZShbX200X21hcF9hcmdzX3BhaXJfX10sCitbWyQkMShbJCQyXSwgWyQkM10pW11dXSkKKworbTRfZGVmaW5lKFtfbTRfbWFwX2FyZ3NfcGFpcl9lbmRdLAorW200X2lmKG00X2V2YWwoWyQzICYgMV0pLCBbMV0sIFtbbTRfZGVmYXVsdChbJCQyXSwgWyQkMV0pKFskJDNdKVtdXV0pXSkKKworIyBtNF9qb2luKFNFUCwgQVJHMSwgQVJHMi4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgQVJHMVNFUEFSRzIuLi5TRVBBUkduLiAgQXZvaWQgYmFjay10by1iYWNrIFNFUCB3aGVuIGEgZ2l2ZW4gQVJHCisjIGlzIHRoZSBlbXB0eSBzdHJpbmcuICBObyBleHBhbnNpb24gaXMgcGVyZm9ybWVkIG9uIFNFUCBvciBBUkdzLgorIworIyBVc2UgYSBzZWxmLW1vZGlmeWluZyBzZXBhcmF0b3IsIHNpbmNlIHdlIGRvbid0IGtub3cgaG93IG1hbnkKKyMgYXJndW1lbnRzIG1pZ2h0IGJlIHNraXBwZWQgYmVmb3JlIGEgc2VwYXJhdG9yIGlzIGZpcnN0IHByaW50ZWQsIGJ1dAorIyBiZSBjYXJlZnVsIGlmIHRoZSBzZXBhcmF0b3IgY29udGFpbnMgJC4gIF9tNF9mb3JlYWNoIHRvIHRoZSByZXNjdWUuCittNF9kZWZpbmUoW200X2pvaW5dLAorW200X3B1c2hkZWYoW19tNF9zZXBdLCBbbTRfZGVmaW5lKFtfbTRfc2VwXSwgX200X2RlZm4oW200X2VjaG9dKSldKV1kbmwKK1tfbTRfZm9yZWFjaChbXyQwKFskMV0sXSwgWyldLCAkQClfbTRfcG9wZGVmKFtfbTRfc2VwXSldKQorCittNF9kZWZpbmUoW19tNF9qb2luXSwKK1ttNF9pZihbJDJdLCBbXSwgW10sIFtfbTRfc2VwKFskMV0pWyQyXV0pXSkKKworIyBtNF9qb2luYWxsKFNFUCwgQVJHMSwgQVJHMi4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgQVJHMVNFUEFSRzIuLi5TRVBBUkduLiAgQW4gZW1wdHkgQVJHIHJlc3VsdHMgaW4gYmFjay10by1iYWNrIFNFUC4KKyMgTm8gZXhwYW5zaW9uIGlzIHBlcmZvcm1lZCBvbiBTRVAgb3IgQVJHcy4KKyMKKyMgQSBiaXQgZWFzaWVyIHRoYW4gbTRfam9pbi4gIF9tNF9mb3JlYWNoIHRvIHRoZSByZXNjdWUuCittNF9kZWZpbmUoW200X2pvaW5hbGxdLAorW1skMl1tNF9pZihtNF9ldmFsKFskIyA8PSAyXSksIFsxXSwgW10sCisJICAgW19tNF9mb3JlYWNoKFskMV0sIFtdLCBtNF9zaGlmdCgkQCkpXSldKQorCisjIG00X2xpc3RfY21wKEEsIEIpCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIENvbXBhcmUgdGhlIHR3byBsaXN0cyBvZiBpbnRlZ2VyIGV4cHJlc3Npb25zIEEgYW5kIEIuCisjCisjIG00X2xpc3RfY21wIHRha2VzIGNhcmUgb2YgYW55IHNpZGUgZWZmZWN0czsgd2Ugb25seSBvdmVycmlkZQorIyBfbTRfbGlzdF9jbXBfcmF3LCB3aGVyZSB3ZSBjYW4gc2FmZWx5IGV4cGFuZCBsaXN0cyBtdWx0aXBsZSB0aW1lcy4KKyMgRmlyc3QsIGluc2VydCBwYWRkaW5nIHNvIHRoYXQgYm90aCBsaXN0cyBhcmUgdGhlIHNhbWUgbGVuZ3RoOyB0aGUKKyMgdHJhaWxpbmcgKzAgaXMgbmVjZXNzYXJ5IHRvIGhhbmRsZSBhIG1pc3NpbmcgbGlzdC4gIE5leHQsIGNyZWF0ZSBhCisjIHRlbXBvcmFyeSBtYWNybyB0byBwZXJmb3JtIHBhaXJ3aXNlIGNvbXBhcmlzb25zIHVudGlsIGFuIGluZXF1YWxpdHkKKyMgaXMgZm91bmQuICBGb3IgZXhhbXBsZSwgbTRfbGlzdF9jbXAoWzFdLCBbMSwyXSkgY3JlYXRlcyBfbTRfY21wIGFzCisjICAgbTRfaWYobTRfZXZhbChbKCQxKSAhPSAoJDMpXSksIFsxXSwgW200X2NtcChbJDFdLCBbJDNdKV0sCisjICAgICAgICAgbTRfZXZhbChbKCQyKSAhPSAoJDQpXSksIFsxXSwgW200X2NtcChbJDJdLCBbJDRdKV0sCisjICAgICAgICAgWzBdX200X3BvcGRlZihbX200X2NtcF0pKQorIyB0aGVuIGNhbGxzIF9tNF9jbXAoWzErMF0sIFswKjJdLCBbMV0sIFsyKzBdKQorbTRfZGVmaW5lKFtfbTRfbGlzdF9jbXBfcmF3XSwKK1ttNF9pZihbJDFdLCBbJDJdLCAwLAorICAgICAgIFtfbTRfbGlzdF9jbXAoJDErMF9tNF9saXN0X3BhZChtNF9jb3VudCgkMSksIG00X2NvdW50KCQyKSksCisJCSAgICAgJDIrMF9tNF9saXN0X3BhZChtNF9jb3VudCgkMiksIG00X2NvdW50KCQxKSkpXSldKQorCittNF9kZWZpbmUoW19tNF9saXN0X3BhZF0sCitbbTRfaWYobTRfZXZhbCgkMSA8ICQyKSwgWzFdLAorICAgICAgIFtfbTRfZm9yKG00X2luY3IoWyQxXSksIFskMl0sIFsxXSwgWywwKl0pXSldKQorCittNF9kZWZpbmUoW19tNF9saXN0X2NtcF0sCitbbTRfcHVzaGRlZihbX200X2NtcF0sIFttNF9pZihdX200X2ZvcigKKyAgIFsxXSwgbTRfZXZhbChbJCMgPj4gMV0pLCBbMV0sIFskMF8oXSwgWyxdbTRfZXZhbChbJCMgPj4gMV0pWyldKVsKKyAgICAgIFswXV9tNF9wb3BkZWYoW19tNF9jbXBdKSldKV9tNF9jbXAoJEApXSkKKworbTRfZGVmaW5lKFtfbTRfbGlzdF9jbXBfXSwKK1skMF8oWyQxXSwgbTRfZXZhbChbJDEgKyAkMl0pKV0pCisKK200X2RlZmluZShbX200X2xpc3RfY21wX19dLAorW1ttNF9ldmFsKFsoJCQxKSAhPSAoJCQyKV0pLCBbMV0sIFttNF9jbXAoWyQkMV0sIFskJDJdKV0sCitdXSkKKworIyBtNF9tYXgoRVhQUiwgLi4uKQorIyBtNF9taW4oRVhQUiwgLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBSZXR1cm4gdGhlIGRlY2ltYWwgdmFsdWUgb2YgdGhlIG1heGltdW0gKG9yIG1pbmltdW0pIGluIGEgc2VyaWVzIG9mCisjIGludGVnZXIgZXhwcmVzc2lvbnMuCisjCisjIF9tNF9mb3JlYWNoIHRvIHRoZSByZXNjdWU7IHdlIG9ubHkgbmVlZCB0byByZXBsYWNlIF9tNF9taW5tYXguICBIZXJlLAorIyB3ZSBuZWVkIGEgdGVtcG9yYXJ5IG1hY3JvIHRvIHRyYWNrIHRoZSBiZXN0IGFuc3dlciBzbyBmYXIsIHNvIHRoYXQKKyMgdGhlIGZvcmVhY2ggZXhwcmVzc2lvbiBpcyB0cmFjdGFibGUuCittNF9kZWZpbmUoW19tNF9taW5tYXhdLAorW200X3B1c2hkZWYoW19tNF9iZXN0XSwgbTRfZXZhbChbJDJdKSlfbTRfZm9yZWFjaCgKKyAgW200X2RlZmluZShbX200X2Jlc3RdLCAkMShfbTRfYmVzdCxdLCBbKSldLCBtNF9zaGlmdCgkQCkpXWRubAorW19tNF9iZXN0W11fbTRfcG9wZGVmKFtfbTRfYmVzdF0pXSkKKworIyBtNF9zZXRfYWRkX2FsbChTRVQsIFZBTFVFLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBZGQgZWFjaCBWQUxVRSBpbnRvIFNFVC4gIFRoaXMgaXMgTyhuKSBpbiB0aGUgbnVtYmVyIG9mIFZBTFVFcywgYW5kCisjIGNhbiBiZSBmYXN0ZXIgdGhhbiBjYWxsaW5nIG00X3NldF9hZGQgZm9yIGVhY2ggVkFMVUUuCisjCisjIF9tNF9mb3JlYWNoIHRvIHRoZSByZXNjdWUuICBJZiBubyBkZWxldGlvbnMgaGF2ZSBvY2N1cnJlZCwgdGhlbgorIyBhdm9pZCB0aGUgc3BlZWQgcGVuYWx0eSBvZiBtNF9zZXRfYWRkLgorbTRfZGVmaW5lKFttNF9zZXRfYWRkX2FsbF0sCitbbTRfaWYoWyQjXSwgWzBdLCBbXSwgWyQjXSwgWzFdLCBbXSwKKyAgICAgICBbbTRfZGVmaW5lKFtfbTRfc2V0X3NpemUoJDEpXSwgbTRfZXZhbChtNF9zZXRfc2l6ZShbJDFdKQorCSAgKyBtNF9sZW4oX200X2ZvcmVhY2gobTRfaWZkZWYoW19tNF9zZXRfY2xlYW51cCgkMSldLAorICBbW200X3NldF9hZGRdXSwgW1tfJDBdXSlbKFskMV0sXSwgWyldLCAkQCkpKSldKV0pCisKK200X2RlZmluZShbX200X3NldF9hZGRfYWxsXSwKK1ttNF9pZmRlZihbX200X3NldChbJDFdLCQyKV0sIFtdLAorCSAgW200X2RlZmluZShbX200X3NldChbJDFdLCQyKV0sCisJCSAgICAgWzFdKW00X3B1c2hkZWYoW19tNF9zZXQoWyQxXSldLCBbJDJdKS1dKV0pCmRpZmYgLS1naXQgYS9kYXRhL200c3VnYXIvbTRzdWdhci5tNCBiL2RhdGEvbTRzdWdhci9tNHN1Z2FyLm00CmluZGV4IDIyNWI3YzcuLjEyYTlhYjcgMTAwNjQ0Ci0tLSBhL2RhdGEvbTRzdWdhci9tNHN1Z2FyLm00CisrKyBiL2RhdGEvbTRzdWdhci9tNHN1Z2FyLm00CkBAIC0zLDUzICszLDI5IEBACiAjIEJhc2UgTTQgbGF5ZXIuCiAjIFJlcXVpcmVzIEdOVSBNNC4KICMKLSMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0jIGFueSBsYXRlciB2ZXJzaW9uLgorIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZi4gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlCisjIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorIyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAjCiAjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAjCisjIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorIyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uLAorIyB2ZXJzaW9uIDMuMCwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCiAjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSMgMDIxMTAtMTMwMSwgVVNBLgotIwotIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzIHVubGltaXRlZAotIyBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSB0aGUgY29uZmlndXJlIHNjcmlwdHMgdGhhdAotIyBhcmUgdGhlIG91dHB1dCBvZiBBdXRvY29uZi4gIFlvdSBuZWVkIG5vdCBmb2xsb3cgdGhlIHRlcm1zIG9mIHRoZSBHTlUKLSMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB3aGVuIHVzaW5nIG9yIGRpc3RyaWJ1dGluZyBzdWNoIHNjcmlwdHMsIGV2ZW4KLSMgdGhvdWdoIHBvcnRpb25zIG9mIHRoZSB0ZXh0IG9mIEF1dG9jb25mIGFwcGVhciBpbiB0aGVtLiAgVGhlIEdOVQotIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIGRvZXMgZ292ZXJuIGFsbCBvdGhlciB1c2Ugb2YgdGhlIG1hdGVyaWFsCi0jIHRoYXQgY29uc3RpdHV0ZXMgdGhlIEF1dG9jb25mIHByb2dyYW0uCi0jCi0jIENlcnRhaW4gcG9ydGlvbnMgb2YgdGhlIEF1dG9jb25mIHNvdXJjZSB0ZXh0IGFyZSBkZXNpZ25lZCB0byBiZSBjb3BpZWQKLSMgKGluIGNlcnRhaW4gY2FzZXMsIGRlcGVuZGluZyBvbiB0aGUgaW5wdXQpIGludG8gdGhlIG91dHB1dCBvZgotIyBBdXRvY29uZi4gIFdlIGNhbGwgdGhlc2UgdGhlICJkYXRhIiBwb3J0aW9ucy4gIFRoZSByZXN0IG9mIHRoZSBBdXRvY29uZgotIyBzb3VyY2UgdGV4dCBjb25zaXN0cyBvZiBjb21tZW50cyBwbHVzIGV4ZWN1dGFibGUgY29kZSB0aGF0IGRlY2lkZXMgd2hpY2gKLSMgb2YgdGhlIGRhdGEgcG9ydGlvbnMgdG8gb3V0cHV0IGluIGFueSBnaXZlbiBjYXNlLiAgV2UgY2FsbCB0aGVzZQotIyBjb21tZW50cyBhbmQgZXhlY3V0YWJsZSBjb2RlIHRoZSAibm9uLWRhdGEiIHBvcnRpb25zLiAgQXV0b2NvbmYgbmV2ZXIKLSMgY29waWVzIGFueSBvZiB0aGUgbm9uLWRhdGEgcG9ydGlvbnMgaW50byBpdHMgb3V0cHV0LgotIwotIyBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwgYXBwbGllcyB0byB2ZXJzaW9ucyBvZiBBdXRvY29uZgotIyByZWxlYXNlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgV2hlbiB5b3UgbWFrZSBhbmQKLSMgZGlzdHJpYnV0ZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgQXV0b2NvbmYsIHlvdSBtYXkgZXh0ZW5kIHRoaXMgc3BlY2lhbAotIyBleGNlcHRpb24gdG8gdGhlIEdQTCB0byBhcHBseSB0byB5b3VyIG1vZGlmaWVkIHZlcnNpb24gYXMgd2VsbCwgKnVubGVzcyoKLSMgeW91ciBtb2RpZmllZCB2ZXJzaW9uIGhhcyB0aGUgcG90ZW50aWFsIHRvIGNvcHkgaW50byBpdHMgb3V0cHV0IHNvbWUKLSMgb2YgdGhlIHRleHQgdGhhdCB3YXMgdGhlIG5vbi1kYXRhIHBvcnRpb24gb2YgdGhlIHZlcnNpb24gdGhhdCB5b3Ugc3RhcnRlZAotIyB3aXRoLiAgKEluIG90aGVyIHdvcmRzLCB1bmxlc3MgeW91ciBjaGFuZ2UgbW92ZXMgb3IgY29waWVzIHRleHQgZnJvbQotIyB0aGUgbm9uLWRhdGEgcG9ydGlvbnMgdG8gdGhlIGRhdGEgcG9ydGlvbnMuKSAgSWYgeW91ciBtb2RpZmljYXRpb24gaGFzCi0jIHN1Y2ggcG90ZW50aWFsLCB5b3UgbXVzdCBkZWxldGUgYW55IG5vdGljZSBvZiB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uCi0jIHRvIHRoZSBHUEwgZnJvbSB5b3VyIG1vZGlmaWVkIHZlcnNpb24uCi0jCisjIGFuZCBhIGNvcHkgb2YgdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGVzIENPUFlJTkd2MyBhbmQgQ09QWUlORy5FWENFUFRJT04KKyMgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCiAjIFdyaXR0ZW4gYnkgQWtpbSBEZW1haWxsZS4KLSMKIAogIyBTZXQgdGhlIHF1b3Rlcywgd2hhdGV2ZXIgdGhlIGN1cnJlbnQgcXVvdGluZyBzeXN0ZW0uCiBjaGFuZ2VxdW90ZSgpCkBAIC05MCw3MSArNjYsMTE4IEBACiAjIGluIHRpbWUsIGJ1dCBiZWNhdXNlIG9mIHRoZSBzcGFjZSBjb3N0IG9mIDEsIGl0J3Mgbm90IHRoYXQgb2J2aW91cy4KICMgTmV2ZXJ0aGVsZXNzLCBvbmUgaHVnZSBkaWZmZXJlbmNlIGlzIHRoZSBoYW5kbGluZyBvZiBgJDAnLiAgSWYgYGZyb20nCiAjIHVzZXMgYCQwJywgdGhlbiB3aXRoIDEsIGB0bycncyBgJDAnIGlzIGB0bycsIHdoaWxlIGl0IGlzIGBmcm9tJyBpbiAyLgotIyBUaGUgdXNlciB3aWxsIGNlcnRhaW5seSBwcmVmZXIgdG8gc2VlIGB0bycuCisjIFRoZSB1c2VyIHdvdWxkIGNlcnRhaW5seSBwcmVmZXIgdG8gc2VlIGB0bycuCisjCisjIFRoaXMgZGVmaW5pdGlvbiBpcyBpbiBlZmZlY3QgZHVyaW5nIG00c3VnYXIgaW5pdGlhbGl6YXRpb24sIHdoZW4KKyMgdGhlcmUgYXJlIG5vIHB1c2hkZWYgc3RhY2tzOyBsYXRlciBvbiwgd2UgcmVkZWZpbmUgaXQgdG8gc29tZXRoaW5nCisjIG1vcmUgcG93ZXJmdWwgZm9yIGFsbCBvdGhlciBjbGllbnRzIHRvIHVzZS4KIG00X2RlZmluZShbbTRfY29weV0sCiBbbTRfZGVmaW5lKFskMl0sIG00X2RlZm4oWyQxXSkpXSkKIAogCiAjIG00X3JlbmFtZShTUkMsIERTVCkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBSZW5hbWUgdGhlIG1hY3JvIFNSQyBhcyBEU1QuCisjIFJlbmFtZSB0aGUgbWFjcm8gU1JDIHRvIERTVC4KIG00X2RlZmluZShbbTRfcmVuYW1lXSwKIFttNF9jb3B5KFskMV0sIFskMl0pbTRfdW5kZWZpbmUoWyQxXSldKQogCiAKICMgbTRfcmVuYW1lX200KE1BQ1JPLU5BTUUpCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBSZW5hbWUgTUFDUk8tTkFNRSBhcyBtNF9NQUNSTy1OQU1FLgorIyBSZW5hbWUgTUFDUk8tTkFNRSB0byBtNF9NQUNSTy1OQU1FLgogbTRfZGVmaW5lKFttNF9yZW5hbWVfbTRdLAogW200X3JlbmFtZShbJDFdLCBbbTRfJDFdKV0pCiAKIAogIyBtNF9jb3B5X3VubTQobTRfTUFDUk8tTkFNRSkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENvcHkgbTRfTUFDUk8tTkFNRSBhcyBNQUNSTy1OQU1FLgorIyBDb3B5IG00X01BQ1JPLU5BTUUgdG8gTUFDUk8tTkFNRS4KIG00X2RlZmluZShbbTRfY29weV91bm00XSwKIFttNF9jb3B5KFskMV0sIG00X2JwYXRzdWJzdChbJDFdLCBbXm00X1woLipcKV0sIFtbXDFdXSkpXSkKIAogCiAjIFNvbWUgbTQgaW50ZXJuYWxzIGhhdmUgbmFtZXMgY29sbGlkaW5nIHdpdGggdG9rZW5zIHdlIG1pZ2h0IHVzZS4KLSMgUmVuYW1lIHRoZW0gYWAgbGEgYG00IC0tcHJlZml4LWJ1aWx0aW5zJy4KKyMgUmVuYW1lIHRoZW0gYWAgbGEgYG00IC0tcHJlZml4LWJ1aWx0aW5zJy4gIENvbmRpdGlvbmFscyBmaXJzdCwgc2luY2UKKyMgc29tZSBzdWJzZXF1ZW50IHJlbmFtZXMgYXJlIGNvbmRpdGlvbmFsLgorbTRfcmVuYW1lX200KFtpZmRlZl0pCittNF9yZW5hbWUoW2lmZWxzZV0sIFttNF9pZl0pCisKIG00X3JlbmFtZV9tNChbYnVpbHRpbl0pCiBtNF9yZW5hbWVfbTQoW2NoYW5nZWNvbV0pCiBtNF9yZW5hbWVfbTQoW2NoYW5nZXF1b3RlXSkKK200X2lmZGVmKFtjaGFuZ2V3b3JkXSxkbmwgY29uZGl0aW9uYWxseSBhdmFpbGFibGUgaW4gMS40LngKK1ttNF91bmRlZmluZShbY2hhbmdld29yZF0pXSkKIG00X3JlbmFtZV9tNChbZGVidWdmaWxlXSkKIG00X3JlbmFtZV9tNChbZGVidWdtb2RlXSkKIG00X3JlbmFtZV9tNChbZGVjcl0pCi1tNF91bmRlZmluZShbZGl2ZXJ0XSkKIG00X3JlbmFtZV9tNChbZGl2bnVtXSkKIG00X3JlbmFtZV9tNChbZHVtcGRlZl0pCiBtNF9yZW5hbWVfbTQoW2VycnByaW50XSkKIG00X3JlbmFtZV9tNChbZXN5c2NtZF0pCiBtNF9yZW5hbWVfbTQoW2V2YWxdKQogbTRfcmVuYW1lX200KFtmb3JtYXRdKQotbTRfcmVuYW1lX200KFtpZmRlZl0pCi1tNF9yZW5hbWUoW2lmZWxzZV0sIFttNF9pZl0pCiBtNF91bmRlZmluZShbaW5jbHVkZV0pCiBtNF9yZW5hbWVfbTQoW2luY3JdKQogbTRfcmVuYW1lX200KFtpbmRleF0pCiBtNF9yZW5hbWVfbTQoW2luZGlyXSkKIG00X3JlbmFtZV9tNChbbGVuXSkKIG00X3JlbmFtZShbbTRleGl0XSwgW200X2V4aXRdKQotbTRfcmVuYW1lKFttNHdyYXBdLCBbbTRfd3JhcF0pCi1tNF9yZW5hbWVfbTQoW21ha2V0ZW1wXSkKK200X3VuZGVmaW5lKFttNHdyYXBdKQorbTRfaWZkZWYoW21rc3RlbXBdLGRubCBhZGRlZCBpbiBNNCAxLjQuOAorW200X3JlbmFtZV9tNChbbWtzdGVtcF0pCittNF9jb3B5KFttNF9ta3N0ZW1wXSwgW200X21ha2V0ZW1wXSkKK200X3VuZGVmaW5lKFttYWtldGVtcF0pXSwKK1ttNF9yZW5hbWVfbTQoW21ha2V0ZW1wXSkKK200X2NvcHkoW200X21ha2V0ZW1wXSwgW200X21rc3RlbXBdKV0pCiBtNF9yZW5hbWUoW3BhdHN1YnN0XSwgW200X2JwYXRzdWJzdF0pCi1tNF91bmRlZmluZShbcG9wZGVmXSkKK200X3JlbmFtZV9tNChbcG9wZGVmXSkKIG00X3JlbmFtZV9tNChbcHVzaGRlZl0pCiBtNF9yZW5hbWUoW3JlZ2V4cF0sIFttNF9icmVnZXhwXSkKIG00X3JlbmFtZV9tNChbc2hpZnRdKQogbTRfdW5kZWZpbmUoW3NpbmNsdWRlXSkKIG00X3JlbmFtZV9tNChbc3Vic3RyXSkKLW00X3JlbmFtZV9tNChbc3ltYm9sc10pCittNF9pZmRlZihbc3ltYm9sc10sZG5sIHByZXNlbnQgb25seSBpbiBhbHBoYS1xdWFsaXR5IDEuNG8KK1ttNF9yZW5hbWVfbTQoW3N5bWJvbHNdKV0pCiBtNF9yZW5hbWVfbTQoW3N5c2NtZF0pCiBtNF9yZW5hbWVfbTQoW3N5c3ZhbF0pCiBtNF9yZW5hbWVfbTQoW3RyYWNlb2ZmXSkKIG00X3JlbmFtZV9tNChbdHJhY2Vvbl0pCiBtNF9yZW5hbWVfbTQoW3RyYW5zbGl0XSkKLW00X3VuZGVmaW5lKFt1bmRpdmVydF0pCisKKyMgX200X2RlZm4oQVJHKQorIyAtLS0tLS0tLS0tLS0tCisjIF9tNF9kZWZuIGlzIGZvciBpbnRlcm5hbCB1c2Ugb25seSAtIGl0IGJ5cGFzc2VzIHRoZSB3cmFwcGVyLCBzbyBpdAorIyBtdXN0IG9ubHkgYmUgdXNlZCBvbiBvbmUgYXJndW1lbnQgYXQgYSB0aW1lLCBhbmQgb25seSBvbiBtYWNyb3MKKyMga25vd24gdG8gYmUgZGVmaW5lZC4gIE1ha2Ugc3VyZSB0aGlzIHN0aWxsIHdvcmtzIGlmIHRoZSB1c2VyIHJlbmFtZXMKKyMgbTRfZGVmbiBidXQgbm90IF9tNF9kZWZuLgorbTRfY29weShbbTRfZGVmbl0sIFtfbTRfZGVmbl0pCisKKyMgX200X2RpdmVydF9yYXcoTlVNKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIF9tNF9kaXZlcnRfcmF3IGlzIGZvciBpbnRlcm5hbCB1c2Ugb25seS4gIFVzZSB0aGlzIGluc3RlYWQgb2YKKyMgbTRfYnVpbHRpbihbZGl2ZXJ0XSwgTlVNKSwgc28gdGhhdCB0cmFjaW5nIGRpdmVyc2lvbiBmbG93IGlzIGVhc2llci4KK200X3JlbmFtZShbZGl2ZXJ0XSwgW19tNF9kaXZlcnRfcmF3XSkKKworIyBfbTRfcG9wZGVmKEFSRy4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIF9tNF9wb3BkZWYgaXMgZm9yIGludGVybmFsIHVzZSBvbmx5IC0gaXQgYnlwYXNzZXMgdGhlIHdyYXBwZXIsIHNvIGl0CisjIG11c3Qgb25seSBiZSB1c2VkIG9uIG1hY3JvcyBrbm93biB0byBiZSBkZWZpbmVkLiAgTWFrZSBzdXJlIHRoaXMKKyMgc3RpbGwgd29ya3MgaWYgdGhlIHVzZXIgcmVuYW1lcyBtNF9wb3BkZWYgYnV0IG5vdCBfbTRfcG9wZGVmLgorbTRfY29weShbbTRfcG9wZGVmXSwgW19tNF9wb3BkZWZdKQorCisjIF9tNF91bmRlZmluZShBUkcuLi4pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIF9tNF91bmRlZmluZSBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkgLSBpdCBieXBhc3NlcyB0aGUgd3JhcHBlciwgc28KKyMgaXQgbXVzdCBvbmx5IGJlIHVzZWQgb24gbWFjcm9zIGtub3duIHRvIGJlIGRlZmluZWQuICBNYWtlIHN1cmUgdGhpcworIyBzdGlsbCB3b3JrcyBpZiB0aGUgdXNlciByZW5hbWVzIG00X3VuZGVmaW5lIGJ1dCBub3QgX200X3VuZGVmaW5lLgorbTRfY29weShbbTRfdW5kZWZpbmVdLCBbX200X3VuZGVmaW5lXSkKKworIyBfbTRfdW5kaXZlcnQoTlVNLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBfbTRfdW5kaXZlcnQgaXMgZm9yIGludGVybmFsIHVzZSBvbmx5LCBhbmQgc2hvdWxkIGFsd2F5cyBiZSBnaXZlbgorIyBhcmd1bWVudHMuICBVc2UgdGhpcyBpbnN0ZWFkIG9mIG00X2J1aWx0aW4oW3VuZGl2ZXJ0XSwgTlVNLi4uKSwgc28KKyMgdGhhdCB0cmFjaW5nIGRpdmVyc2lvbiBmbG93IGlzIGVhc2llci4KK200X3JlbmFtZShbdW5kaXZlcnRdLCBbX200X3VuZGl2ZXJ0XSkKIAogCiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCkBAIC0xNjQsNiArMTg3LDcgQEAKIAogIyBtNF9sb2NhdGlvbgogIyAtLS0tLS0tLS0tLQorIyBPdXRwdXQgdGhlIGN1cnJlbnQgZmlsZSwgY29sb24sIGFuZCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KIG00X2RlZmluZShbbTRfbG9jYXRpb25dLAogW19fZmlsZV9fOl9fbGluZV9fXSkKIApAQCAtMTg3LDkgKzIxMSw4IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgRmF0YWwgdGhlIHVzZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOikKIG00X2RlZmluZShbbTRfZmF0YWxdLAotW200X2VycnByaW50bihtNF9sb2NhdGlvbls6IGVycm9yOiAkMV0pZG5sCi1tNF9leHBhbnNpb25fc3RhY2tfZHVtcCgpZG5sCi1tNF9leGl0KG00X2lmKFskMl0sLCAxLCBbJDJdKSldKQorW200X2VycnByaW50bihtNF9sb2NhdGlvbls6IGVycm9yOiAkMV0KK200X2V4cGFuc2lvbl9zdGFjayltNF9leGl0KG00X2lmKFskMl0sLCAxLCBbJDJdKSldKQogCiAKICMgbTRfYXNzZXJ0KEVYUFJFU1NJT04sIFtFWElULVNUQVRVUyA9IDFdKQpAQCAtMjA3LDExICsyMzAsMTUgQEAKICMjIC0tLS0tLS0tLS0tLS0gIyMKIAogCi0jIF9tNF93YXJuKENBVEVHT1JZLCBNRVNTQUdFLCBTVEFDSy1UUkFDRSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBfbTRfd2FybihDQVRFR09SWSwgTUVTU0FHRSwgW1NUQUNLLVRSQUNFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFJlcG9ydCBhIE1FU1NBR0UgdG8gdGhlIHVzZXIgaWYgdGhlIENBVEVHT1JZIG9mIHdhcm5pbmdzIGlzIGVuYWJsZWQuCiAjIFRoaXMgaXMgZm9yIHRyYWNlcyBvbmx5LgotIyBUaGUgU1RBQ0stVFJBQ0UgaXMgYSBcbi1zZXBhcmF0ZWQgbGlzdCBvZiAiTE9DQVRJT046IE1FU1NBR0UiLgorIyBJZiBwcmVzZW50LCBTVEFDSy1UUkFDRSBpcyBhIFxuLXNlcGFyYXRlZCBsaXN0IG9mICJMT0NBVElPTjogTUVTU0FHRSIsCisjIHdoZXJlIHRoZSBsYXN0IGxpbmUgKGFuZCBubyBvdGhlcikgZW5kcyB3aXRoICJ0aGUgdG9wIGxldmVsIi4KKyMKKyMgV2l0aGluIG00LCB0aGUgbWFjcm8gaXMgYSBuby1vcC4gIFRoaXMgbWFjcm8gcmVhbGx5IG1hdHRlcnMKKyMgd2hlbiBhdXRvbTR0ZSBwb3N0LXByb2Nlc3NlcyB0aGUgdHJhY2Ugb3V0cHV0LgogbTRfZGVmaW5lKFtfbTRfd2Fybl0sIFtdKQogCiAKQEAgLTIyMCwxMCArMjQ3LDcgQEAKICMgUmVwb3J0IGEgTUVTU0FHRSB0byB0aGUgdXNlciBpZiB0aGUgQ0FURUdPUlkgb2Ygd2FybmluZ3MgaXMgZW5hYmxlZC4KIG00X2RlZmluZShbbTRfd2Fybl0sCiBbX200X3dhcm4oWyQxXSwgWyQyXSwKLW00X2lmZGVmKFttNF9leHBhbnNpb25fc3RhY2tdLAotICAgICAgICAgW200X2RlZm4oW200X2V4cGFuc2lvbl9zdGFja10pCi1tNF9sb2NhdGlvbls6IHRoZSB0b3AgbGV2ZWxdXSkpZG5sCi1dKQorbTRfaWZkZWYoW19tNF9leHBhbnNpb25fc3RhY2tdLCBbbTRfZXhwYW5zaW9uX3N0YWNrXSkpXSkKIAogCiAKQEAgLTIzNCw4ICsyNTgsOCBAQAogCiAjIFdlIGFsc28gd2FudCB0byBuZXV0cmFsaXplIGluY2x1ZGUgKGFuZCBzaW5jbHVkZSBmb3Igc3ltbWV0cnkpLAogIyBidXQgd2Ugd2FudCB0byBleHRlbmQgdGhlbSBzbGlnaHRseTogd2FybiB3aGVuIGEgZmlsZSBpcyBpbmNsdWRlZAotIyBzZXZlcmFsIHRpbWVzLiAgVGhpcyBpcyBpbiBnZW5lcmFsIGEgZGFuZ2Vyb3VzIG9wZXJhdGlvbiBiZWNhdXNlCi0jIHF1aXRlIG5vYm9keSBxdW90ZXMgdGhlIGZpcnN0IGFyZ3VtZW50IG9mIG00X2RlZmluZS4KKyMgc2V2ZXJhbCB0aW1lcy4gIFRoaXMgaXMsIGluIGdlbmVyYWwsIGEgZGFuZ2Vyb3VzIG9wZXJhdGlvbiwgYmVjYXVzZQorIyB0b28gbWFueSBwZW9wbGUgZm9yZ2V0IHRvIHF1b3RlIHRoZSBmaXJzdCBhcmd1bWVudCBvZiBtNF9kZWZpbmUuCiAjCiAjIEZvciBpbnN0YW5jZSBpbiB0aGUgZm9sbG93aW5nIGNhc2U6CiAjICAgbTRfZGVmaW5lKGZvbywgW2Jhcl0pCkBAIC0yNTUsNyArMjc5LDcgQEAKIAogIyBtNF9pbmNsdWRlKEZJTEUpCiAjIC0tLS0tLS0tLS0tLS0tLS0KLSMgQXMgdGhlIGJ1aWx0aW4gaW5jbHVkZSwgYnV0IHdhcm5zIGFnYWluc3QgbXVsdGlwbGUgaW5jbHVzaW9ucy4KKyMgTGlrZSB0aGUgYnVpbHRpbiBpbmNsdWRlLCBidXQgd2FybnMgYWdhaW5zdCBtdWx0aXBsZSBpbmNsdXNpb25zLgogbTRfZGVmaW5lKFttNF9pbmNsdWRlXSwKIFttNF9pbmNsdWRlX3VuaXF1ZShbJDFdKWRubAogbTRfYnVpbHRpbihbaW5jbHVkZV0sIFskMV0pXSkKQEAgLTI2Myw3ICsyODcsNyBAQAogCiAjIG00X3NpbmNsdWRlKEZJTEUpCiAjIC0tLS0tLS0tLS0tLS0tLS0tCi0jIEFzIHRoZSBidWlsdGluIHNpbmNsdWRlLCBidXQgd2FybnMgYWdhaW5zdCBtdWx0aXBsZSBpbmNsdXNpb25zLgorIyBMaWtlIHRoZSBidWlsdGluIHNpbmNsdWRlLCBidXQgd2FybnMgYWdhaW5zdCBtdWx0aXBsZSBpbmNsdXNpb25zLgogbTRfZGVmaW5lKFttNF9zaW5jbHVkZV0sCiBbbTRfaW5jbHVkZV91bmlxdWUoWyQxXSlkbmwKIG00X2J1aWx0aW4oW3NpbmNsdWRlXSwgWyQxXSldKQpAQCAtMjc3LDE1ICszMDEsMzggQEAKICMgQm90aCBgbTRfaWZ2YWwnIGFuZCBgbTRfaWZzZXQnIHRlc3RzIGFnYWluc3QgdGhlIGVtcHR5IHN0cmluZy4gIFRoZQogIyBkaWZmZXJlbmNlIGlzIHRoYXQgYG00X2lmc2V0JyBpcyBzcGVjaWFsaXplZCBvbiBtYWNyb3MuCiAjCi0jIEluIGNhc2Ugb2YgYXJndW1lbnRzIG9mIG1hY3JvcywgZWcgJFsxXSwgaXQgbWFrZXMgbGl0dGxlIGRpZmZlcmVuY2UuCisjIEluIGNhc2Ugb2YgYXJndW1lbnRzIG9mIG1hY3JvcywgZWcuICQxLCBpdCBtYWtlcyBsaXR0bGUgZGlmZmVyZW5jZS4KICMgSW4gdGhlIGNhc2Ugb2YgYSBtYWNybyBgRk9PJywgeW91IGRvbid0IHdhbnQgdG8gY2hlY2sgYG00X2lmdmFsKEZPTywKICMgVFJVRSknLCBiZWNhdXNlIGlmIGBGT08nIGV4cGFuZHMgd2l0aCBjb21tYXMsIHRoZXJlIGlzIGEgc2hpZnRpbmcgb2YKICMgdGhlIGFyZ3VtZW50cy4gIFNvIHlvdSB3YW50IHRvIHJ1biBgbTRfaWZ2YWwoW0ZPT10pJywgYnV0IHRoZW4geW91IGp1c3QKICMgY29tcGFyZSB0aGUgKnN0cmluZyogYEZPTycgYWdhaW5zdCBgJywgd2hpY2gsIG9mIGNvdXJzZSBmYWlscy4KICMKLSMgU28geW91IHdhbnQgYSB2YXJpYXRpb24gb2YgYG00X2lmc2V0JyB0aGF0IGV4cGVjdHMgYSBtYWNybyBuYW1lIGFzICRbMV0uCisjIFNvIHlvdSB3YW50IHRoZSB2YXJpYXRpb24gYG00X2lmc2V0JyB0aGF0IGV4cGVjdHMgYSBtYWNybyBuYW1lIGFzICQxLgogIyBJZiB0aGlzIG1hY3JvIGlzIGJvdGggZGVmaW5lZCBhbmQgZGVmaW5lZCB0byBhIG5vbiBlbXB0eSB2YWx1ZSwgdGhlbgotIyBpdCBydW5zIFRSVUUgZXRjLgorIyBpdCBydW5zIFRSVUUsIGV0Yy4KKworCisjIG00X2lmYmxhbmsoQ09ORCwgW0lGLUJMQU5LXSwgW0lGLVRFWFRdKQorIyBtNF9pZm5ibGFuayhDT05ELCBbSUYtVEVYVF0sIFtJRi1CTEFOS10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSWYgQ09ORCBpcyBlbXB0eSwgb3IgY29uc2lzdHMgb25seSBvZiBibGFua3MgKHNwYWNlLCB0YWIsIG5ld2xpbmUpLAorIyB0aGVuIGV4cGFuZCBJRi1CTEFOSywgb3RoZXJ3aXNlIGV4cGFuZCBJRi1URVhULiAgVGhpcyBkaWZmZXJzIGZyb20KKyMgbTRfaWZ2YWwgb25seSBpZiBDT05EIGhhcyBqdXN0IHdoaXRlc3BhY2UsIGJ1dCBpdCBoZWxwcyBvcHRpbWl6ZSBpbgorIyBzcGl0ZSBvZiB1c2VycyB3aG8gbWlzdGFrZW5seSBsZWF2ZSB0cmFpbGluZyBzcGFjZSBhZnRlciB3aGF0IHRoZXkKKyMgdGhvdWdodCB3YXMgYW4gZW1wdHkgYXJndW1lbnQ6CisjICAgbWFjcm8oCisjICAgICAgICAgW10KKyMgICAgICAgICkKKyMKKyMgV3JpdGluZyBvbmUgbWFjcm8gaW4gdGVybXMgb2YgdGhlIG90aGVyIGNhdXNlcyBleHRyYSBvdmVyaGVhZCwgc28KKyMgd2UgaW5saW5lIGJvdGggZGVmaW5pdGlvbnMuCittNF9kZWZpbmUoW200X2lmYmxhbmtdLAorW200X2lmKG00X3RyYW5zbGl0KFtbJDFdXSwgIFsgXVsJXVsKK10pLCBbXSwgWyQyXSwgWyQzXSldKQorCittNF9kZWZpbmUoW200X2lmbmJsYW5rXSwKK1ttNF9pZihtNF90cmFuc2xpdChbWyQxXV0sICBbIF1bCV1bCitdKSwgW10sIFskM10sIFskMl0pXSkKIAogCiAjIG00X2lmdmFsKENPTkQsIFtJRi1UUlVFXSwgW0lGLUZBTFNFXSkKQEAgLTMyMiw3ICszNjksNyBAQAogIyBleHBhbmQgSUYtRkFMU0UsIG90aGVyd2lzZSBJRi1UUlVFLgogbTRfZGVmaW5lKFttNF9pZnNldF0sCiBbbTRfaWZkZWYoWyQxXSwKLQkgIFttNF9pZnZhbChtNF9kZWZuKFskMV0pLCBbJDJdLCBbJDNdKV0sCisJICBbbTRfaWZ2YWwoX200X2RlZm4oWyQxXSksIFskMl0sIFskM10pXSwKIAkgIFskM10pXSkKIAogCkBAIC0zNTAsMTIgKzM5NywxNCBAQAogIyB9LgogIyBBbGwgdGhlIHZhbHVlcyBhcmUgb3B0aW9uYWwsIGFuZCB0aGUgbWFjcm8gaXMgcm9idXN0IHRvIGFjdGl2ZQogIyBzeW1ib2xzIHByb3Blcmx5IHF1b3RlZC4KKyMKKyMgUGxlYXNlIGtlZXAgZm9yZWFjaC5tNCBpbiBzeW5jIHdpdGggYW55IGFkanVzdG1lbnRzIG1hZGUgaGVyZS4KIG00X2RlZmluZShbbTRfY2FzZV0sCiBbbTRfaWYoWyQjXSwgMCwgW10sCiAgICAgICAgWyQjXSwgMSwgW10sCiAgICAgICAgWyQjXSwgMiwgWyQyXSwKICAgICAgICBbJDFdLCBbJDJdLCBbJDNdLAotICAgICAgIFskMChbJDFdLCBtNF9zaGlmdG4oMywgJEApKV0pXSkKKyAgICAgICBbJDAoWyQxXSwgbTRfc2hpZnQzKCRAKSldKV0pCiAKIAogIyBtNF9ibWF0Y2goU1dJVENILCBSRTEsIFZBTDEsIFJFMiwgVkFMMiwgLi4uLCBERUZBVUxUKQpAQCAtMzczLDQ2ICs0MjIsOTYgQEAKICMKICMgQWxsIHRoZSB2YWx1ZXMgYXJlIG9wdGlvbmFsLCBhbmQgdGhlIG1hY3JvIGlzIHJvYnVzdCB0byBhY3RpdmUgc3ltYm9scwogIyBwcm9wZXJseSBxdW90ZWQuCisjCisjIFBsZWFzZSBrZWVwIGZvcmVhY2gubTQgaW4gc3luYyB3aXRoIGFueSBhZGp1c3RtZW50cyBtYWRlIGhlcmUuCiBtNF9kZWZpbmUoW200X2JtYXRjaF0sCiBbbTRfaWYoWyQjXSwgMCwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjXSldLAogICAgICAgIFskI10sIDEsIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkIzogJDFdKV0sCiAgICAgICAgWyQjXSwgMiwgWyQyXSwKLSAgICAgICBbbTRfaWYobTRfYnJlZ2V4cChbJDFdLCBbJDJdKSwgLTEsIFskMChbJDFdLCBtNF9zaGlmdG4oMywgJEApKV0sCisgICAgICAgW200X2lmKG00X2JyZWdleHAoWyQxXSwgWyQyXSksIC0xLCBbJDAoWyQxXSwgbTRfc2hpZnQzKCRAKSldLAogCSAgICAgIFskM10pXSldKQogCisjIG00X2FyZ24oTiwgQVJHUy4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeHRyYWN0IGFyZ3VtZW50IE4gKGdyZWF0ZXIgdGhhbiAwKSBmcm9tIEFSR1MuICBFeGFtcGxlOgorIyAgIG00X2RlZmluZShbYl0sIFtCXSkKKyMgICBtNF9hcmduKFsyXSwgW2FdLCBbYl0sIFtjXSkgPT4gYgorIworIyBSYXRoZXIgdGhhbiB1c2luZyBtNF9jYXIobTRfc2hpZnRuKFskMV0sICRAKSksIHdlIGV4cGxvaXQgdGhlIGZhY3QgdGhhdAorIyBHTlUgbTQgY2FuIGRpcmVjdGx5IHJlZmVyZW5jZSBhbnkgYXJndW1lbnQsIHRocm91Z2ggYW4gaW5kaXJlY3QgbWFjcm8uCittNF9kZWZpbmUoW200X2FyZ25dLAorW200X2Fzc2VydChbMCA8ICQxXSldZG5sCitbbTRfcHVzaGRlZihbXyQwXSwgW19tNF9wb3BkZWYoW18kMF0pXW00X2RxdW90ZShbJF1tNF9pbmNyKFskMV0pKSlfJDAoJEApXSkKIAotIyBtNF9jYXIoTElTVCkKLSMgbTRfY2RyKExJU1QpCi0jIC0tLS0tLS0tLS0tLQotIyBNYW5pcHVsYXRlIG00IGxpc3RzLgorCisjIG00X2NhcihBUkdTLi4uKQorIyBtNF9jZHIoQVJHUy4uLikKKyMgLS0tLS0tLS0tLS0tLS0tCisjIE1hbmlwdWxhdGUgbTQgbGlzdHMuICBtNF9jYXIgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQuICBtNF9jZHIKKyMgYnVuZGxlcyBhbGwgYnV0IHRoZSBmaXJzdCBhcmd1bWVudCBpbnRvIGEgcXVvdGVkIGxpc3QuICBUaGVzZSB0d28KKyMgbWFjcm9zIGFyZSBnZW5lcmFsbHkgdXNlZCB3aXRoIGxpc3QgYXJndW1lbnRzLCB3aXRoIHF1b3RpbmcgcmVtb3ZlZAorIyB0byBicmVhayB0aGUgbGlzdCBpbnRvIG11bHRpcGxlIG00IEFSR1MuCiBtNF9kZWZpbmUoW200X2Nhcl0sIFtbJDFdXSkKIG00X2RlZmluZShbbTRfY2RyXSwKIFttNF9pZihbJCNdLCAwLCBbbTRfZmF0YWwoWyQwOiBjYW5ub3QgYmUgY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzXSldLAogICAgICAgIFskI10sIDEsIFtdLAogICAgICAgIFttNF9kcXVvdGUobTRfc2hpZnQoJEApKV0pXSkKIAotCi0jIG00X21hcChNQUNSTywgTElTVCkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBJbnZva2UgTUFDUk8oJDEpLCBNQUNSTygkMikgZXRjLiB3aGVyZSAkMSwgJDIuLi4gYXJlIHRoZSBlbGVtZW50cwotIyBvZiBMSVNUICh3aGljaCBjYW4gYmUgbGlzdHMgdGhlbXNlbHZlcywgZm9yIG11bHRpcGxlIGFyZ3VtZW50cyBNQUNST3MpLgotbTRfZGVmaW5lKFttNF9mc3RdLCBbJDFdKQotbTRfZGVmaW5lKFttNF9tYXBdLAotW200X2lmKFskMl0sIFtbXV0sIFtdLAotICAgICAgIFtfbTRfbWFwKFskMV0sIFskMl0pXSldKQotbTRfZGVmaW5lKFtfbTRfbWFwXSwKLVttNF9pZnZhbChbJDJdLAotCSAgWyQxKG00X2ZzdCgkMikpW11fbTRfbWFwKFskMV0sIG00X2NkcigkMikpXSldKQorIyBfbTRfY2RyKEFSR1MuLi4pCisjIC0tLS0tLS0tLS0tLS0tLS0KKyMgTGlrZSBtNF9jZHIsIGV4Y2VwdCBpbmNsdWRlIGEgbGVhZGluZyBjb21tYSB1bmxlc3Mgb25seSBvbmUgYXJndW1lbnQKKyMgcmVtYWlucy4gIFdoeT8gIEJlY2F1c2UgY29tcGFyaW5nIGEgbGFyZ2UgbGlzdCBhZ2FpbnN0IFtdIGlzIG1vcmUKKyMgZXhwZW5zaXZlIGluIGV4cGFuc2lvbiB0aW1lIHRoYW4gY29tcGFyaW5nIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzOyBzbworIyBfbTRfY2RyIGNhbiBiZSB1c2VkIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB3aGVuIGl0IGlzIHRpbWUKKyMgdG8gZW5kIHJlY3Vyc2lvbi4KK200X2RlZmluZShbX200X2Nkcl0sCitbbTRfaWYoWyQjXSwgMSwgW10sCisgICAgICAgWywgbTRfZHF1b3RlKG00X3NoaWZ0KCRAKSldKV0pCiAKIAotIyBtNF9tYXBfc2VwKE1BQ1JPLCBTRVBBUkFUT1IsIExJU1QpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgSW52b2tlIE1BQ1JPKCQxKSwgU0VQQVJBVE9SLCBNQUNSTygkMiksIC4uLiwgTUFDUk8oJE4pIHdoZXJlICQxLCAkMi4uLiAkTgotIyBhcmUgdGhlIGVsZW1lbnRzIG9mIExJU1QgKHdoaWNoIGNhbiBiZSBsaXN0cyB0aGVtc2VsdmVzLCBmb3IgbXVsdGlwbGUKLSMgYXJndW1lbnRzIE1BQ1JPcykuCi1tNF9kZWZpbmUoW200X21hcF9zZXBdLAotW200X2lmKFskM10sIFtbXV0sIFtdLAotICAgICAgIFskMShtNF9mc3QoJDMpKVtdX200X21hcChbJDJbXSQxXSwgbTRfY2RyKCQzKSldKV0pCisKKyMgbTRfY29uZChURVNUMSwgVkFMMSwgSUYtVkFMMSwgVEVTVDIsIFZBTDIsIElGLVZBTDIsIC4uLiwgW0RFRkFVTFRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNpbWlsYXIgdG8gbTRfaWYsIGV4Y2VwdCB0aGF0IGVhY2ggVEVTVCBpcyBleHBhbmRlZCB3aGVuIGVuY291bnRlcmVkLgorIyBJZiB0aGUgZXhwYW5zaW9uIG9mIFRFU1RuIG1hdGNoZXMgdGhlIHN0cmluZyBWQUxuLCB0aGUgcmVzdWx0IGlzIElGLVZBTG4uCisjIFRoZSByZXN1bHQgaXMgREVGQVVMVCBpZiBubyB0ZXN0cyBwYXNzZWQuICBUaGlzIG1hY3JvIGFsbG93cworIyBzaG9ydC1jaXJjdWl0aW5nIG9mIGV4cGVuc2l2ZSB0ZXN0cywgd2hlcmUgaXQgcGF5cyB0byBhcnJhbmdlIHF1aWNrCisjIGZpbHRlciB0ZXN0cyB0byBydW4gZmlyc3QuCisjCisjIEZvciBhbiBleGFtcGxlLCBjb25zaWRlciBhIHByZXZpb3VzIGltcGxlbWVudGF0aW9uIG9mIF9BU19RVU9URV9JRkVMU0U6CisjCisjICAgIG00X2lmKG00X2luZGV4KFskMV0sIFtcXSksIFstMV0sIFskMl0sCisjICAgICAgICAgIG00X2V2YWwobTRfaW5kZXgoWyQxXSwgW1xcXSkgPj0gMCksIFsxXSwgWyQyXSwKKyMgICAgICAgICAgbTRfZXZhbChtNF9pbmRleChbJDFdLCBbXCRdKSA+PSAwKSwgWzFdLCBbJDJdLAorIyAgICAgICAgICBtNF9ldmFsKG00X2luZGV4KFskMV0sIFtcYF0pID49IDApLCBbMV0sIFskM10sCisjICAgICAgICAgIG00X2V2YWwobTRfaW5kZXgoWyQxXSwgW1wiXSkgPj0gMCksIFsxXSwgWyQzXSwKKyMgICAgICAgICAgWyQyXSkKKyMKKyMgSGVyZSwgbTRfaW5kZXggaXMgY29tcHV0ZWQgNSB0aW1lcywgYW5kIG00X2V2YWwgNCwgZXZlbiBpZiAkMSBjb250YWlucworIyBubyBiYWNrc2xhc2guICBJdCBpcyBtb3JlIGVmZmljaWVudCB0byBkbzoKKyMKKyMgICAgbTRfY29uZChbbTRfaW5kZXgoWyQxXSwgW1xdKV0sIFstMV0sIFskMl0sCisjICAgICAgICAgICAgW200X2V2YWwobTRfaW5kZXgoWyQxXSwgW1xcXSkgPj0gMCldLCBbMV0sIFskMl0sCisjICAgICAgICAgICAgW200X2V2YWwobTRfaW5kZXgoWyQxXSwgW1wkXSkgPj0gMCldLCBbMV0sIFskMl0sCisjICAgICAgICAgICAgW200X2V2YWwobTRfaW5kZXgoWyQxXSwgW1xgXSkgPj0gMCldLCBbMV0sIFskM10sCisjICAgICAgICAgICAgW200X2V2YWwobTRfaW5kZXgoWyQxXSwgW1wiXSkgPj0gMCldLCBbMV0sIFskM10sCisjICAgICAgICAgICAgWyQyXSkKKyMKKyMgSW4gdGhlIGNvbW1vbiBjYXNlIG9mICQxIHdpdGggbm8gYmFja3NsYXNoLCBvbmx5IG9uZSBtNF9pbmRleCBleHBhbnNpb24KKyMgb2NjdXJzLCBhbmQgbTRfZXZhbCBpcyBhdm9pZGVkIGFsdG9nZXRoZXIuCisjCisjIFBsZWFzZSBrZWVwIGZvcmVhY2gubTQgaW4gc3luYyB3aXRoIGFueSBhZGp1c3RtZW50cyBtYWRlIGhlcmUuCittNF9kZWZpbmUoW200X2NvbmRdLAorW200X2lmKFskI10sIFswXSwgW200X2ZhdGFsKFskMDogY2Fubm90IGJlIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50c10pXSwKKyAgICAgICBbJCNdLCBbMV0sIFskMV0sCisgICAgICAgbTRfZXZhbChbJCMgJSAzXSksIFsyXSwgW200X2ZhdGFsKFskMDogbWlzc2luZyBhbiBhcmd1bWVudF0pXSwKKyAgICAgICBbXyQwKCRAKV0pXSkKKworbTRfZGVmaW5lKFtfbTRfY29uZF0sCitbbTRfaWYoKCQxKSwgWygkMildLCBbJDNdLAorICAgICAgIFskI10sIFszXSwgW10sCisgICAgICAgWyQjXSwgWzRdLCBbJDRdLAorICAgICAgIFskMChtNF9zaGlmdDMoJEApKV0pXSkKIAogCiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCkBAIC00MzQsMjQgKzUzMyw1MSBAQAogIyBJIHdvdWxkIGhhdmUgbGlrZWQgdG8gbmFtZSB0aGlzIG1hY3JvIGBtNF9icGF0c3Vic3QnLCB1bmZvcnR1bmF0ZWx5LAogIyBkdWUgdG8gcXVvdGF0aW9uIHByb2JsZW1zLCBJIG5lZWQgdG8gZG91YmxlIHF1b3RlICQxIGJlbG93LCB0aGVyZWZvcmUKICMgdGhlIGFuY2hvcnMgYXJlIGJyb2tlbiA6KCAgSSBjYW4ndCBsZXQgdXNlcnMgYmUgdHJhcHBlZCBieSB0aGF0LgorIworIyBSZWNhbGwgdGhhdCBtNF9zaGlmdDMgYWx3YXlzIHJlc3VsdHMgaW4gYW4gYXJndW1lbnQuICBIZW5jZSwgd2UgbmVlZAorIyB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGEgZmluYWwgZGVsZXRpb24gdnMuIGVuZGluZyByZWN1cnNpb24uCisjCisjIFBsZWFzZSBrZWVwIGZvcmVhY2gubTQgaW4gc3luYyB3aXRoIGFueSBhZGp1c3RtZW50cyBtYWRlIGhlcmUuCiBtNF9kZWZpbmUoW200X2JwYXRzdWJzdHNdLAogW200X2lmKFskI10sIDAsIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkI10pXSwKICAgICAgICBbJCNdLCAxLCBbbTRfZmF0YWwoWyQwOiB0b28gZmV3IGFyZ3VtZW50czogJCM6ICQxXSldLAotICAgICAgIFskI10sIDIsIFttNF9idWlsdGluKFtwYXRzdWJzdF0sICRAKV0sCisgICAgICAgWyQjXSwgMiwgW200X3VucXVvdGUobTRfYnVpbHRpbihbcGF0c3Vic3RdLCBbWyQxXV0sIFskMl0pKV0sCisgICAgICAgWyQjXSwgMywgW200X3VucXVvdGUobTRfYnVpbHRpbihbcGF0c3Vic3RdLCBbWyQxXV0sIFskMl0sIFskM10pKV0sCisgICAgICAgW18kMCgkQG00X2lmKG00X2V2YWwoJCMgJiAxKSwgMCwgWyxdKSldKV0pCittNF9kZWZpbmUoW19tNF9icGF0c3Vic3RzXSwKK1ttNF9pZihbJCNdLCAyLCBbJDFdLAogICAgICAgIFskMChtNF9idWlsdGluKFtwYXRzdWJzdF0sIFtbJDFdXSwgWyQyXSwgWyQzXSksCi0JICAgbTRfc2hpZnRuKDMsICRAKSldKV0pCisJICAgbTRfc2hpZnQzKCRAKSldKV0pCiAKIAorIyBtNF9jb3B5KFNSQywgRFNUKQorIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgdGhlIHB1c2hkZWYgc3RhY2sgRFNUIGFzIGEgY29weSBvZiB0aGUgcHVzaGRlZiBzdGFjayBTUkM7CisjIGdpdmUgYW4gZXJyb3IgaWYgRFNUIGlzIGFscmVhZHkgZGVmaW5lZC4gIFRoaXMgaXMgcGFydGljdWxhcmx5IG5pY2UKKyMgZm9yIGNvcHlpbmcgc2VsZi1tb2RpZnlpbmcgcHVzaGRlZiBzdGFja3MsIHdoZXJlIHRoZSB0b3AgZGVmaW5pdGlvbgorIyBpbmNsdWRlcyBvbmUtc2hvdCBpbml0aWFsaXphdGlvbiB0aGF0IGlzIGxhdGVyIHBvcHBlZCB0byB0aGUgbm9ybWFsCisjIGRlZmluaXRpb24uICBUaGlzIHZlcnNpb24gaW50ZW50aW9uYWxseSBkb2VzIG5vdGhpbmcgaWYgU1JDIGlzCisjIHVuZGVmaW5lZC4KKyMKKyMgU29tZSBtYWNyb3Mgc2ltcGx5IGNhbid0IGJlIHJlbmFtZWQgd2l0aCB0aGlzIG1ldGhvZDogbmFtZWx5LCBhbnl0aGluZworIyBpbnZvbHZlZCBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgbTRfc3RhY2tfZm9yZWFjaF9zZXAuCittNF9kZWZpbmUoW200X2NvcHldLAorW200X2lmZGVmKFskMl0sIFttNF9mYXRhbChbJDA6IHdvbid0IG92ZXJ3cml0ZSBkZWZpbmVkIG1hY3JvOiAkMl0pXSwKKwkgIFttNF9zdGFja19mb3JlYWNoX3NlcChbJDFdLCBbbTRfcHVzaGRlZihbJDJdLF0sIFspXSldKV1kbmwKK1ttNF9pZmRlZihbbTRfbG9jYXRpb24oJDEpXSwgW200X2RlZmluZShbbTRfbG9jYXRpb24oJDIpXSwgbTRfbG9jYXRpb24pXSldKQogCi0jIG00X2RvKFNUUklORywgLi4uKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0KLSMgVGhpcyBtYWNybyBpbnZva2VzIGFsbCBpdHMgYXJndW1lbnRzIChpbiBzZXF1ZW5jZSwgb2YgY291cnNlKS4gIEl0IGlzCi0jIHVzZWZ1bCBmb3IgbWFraW5nIHlvdXIgbWFjcm9zIG1vcmUgc3RydWN0dXJlZCBhbmQgcmVhZGFibGUgYnkgZHJvcHBpbmcKLSMgdW5uZWNlc3NhcnkgZG5sJ3MgYW5kIGhhdmUgdGhlIG1hY3JvcyBpbmRlbnRlZCBwcm9wZXJseS4KLW00X2RlZmluZShbbTRfZG9dLAotW200X2lmKCQjLCAwLCBbXSwKLSAgICAgICAkIywgMSwgWyQxXSwKLSAgICAgICBbJDFbXW00X2RvKG00X3NoaWZ0KCRAKSldKV0pCisKKyMgbTRfY29weV9mb3JjZShTUkMsIERTVCkKKyMgbTRfcmVuYW1lX2ZvcmNlKFNSQywgRFNUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExpa2UgbTRfY29weS9tNF9yZW5hbWUsIGV4Y2VwdCBibGluZGx5IG92ZXJ3cml0ZSBhbnkgZXhpc3RpbmcgRFNULgorIyBOb3RlIHRoYXQgbTRfY29weV9mb3JjZSB0b2xlcmF0ZXMgdW5kZWZpbmVkIFNSQywgd2hpbGUgbTRfcmVuYW1lX2ZvcmNlCisjIGRvZXMgbm90LgorbTRfZGVmaW5lKFttNF9jb3B5X2ZvcmNlXSwKK1ttNF9pZmRlZihbJDJdLCBbX200X3VuZGVmaW5lKFskMl0pXSltNF9jb3B5KCRAKV0pCisKK200X2RlZmluZShbbTRfcmVuYW1lX2ZvcmNlXSwKK1ttNF9pZmRlZihbJDJdLCBbX200X3VuZGVmaW5lKFskMl0pXSltNF9yZW5hbWUoJEApXSkKIAogCiAjIG00X2RlZmluZV9kZWZhdWx0KE1BQ1JPLCBWQUxVRSkKQEAgLTQ2MiwxNTAgKzU4OCw0NzEgQEAKIAogCiAjIG00X2RlZmF1bHQoRVhQMSwgRVhQMikKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBSZXR1cm5zIEVYUDEgaWYgbm9uIGVtcHR5LCBvdGhlcndpc2UgRVhQMi4KKyMgbTRfZGVmYXVsdF9uYmxhbmsoRVhQMSwgRVhQMikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmV0dXJucyBFWFAxIGlmIG5vdCBlbXB0eS9ibGFuaywgb3RoZXJ3aXNlIEVYUDIuICBFeHBhbmQgdGhlIHJlc3VsdC4KKyMKKyMgbTRfZGVmYXVsdCBpcyBjYWxsZWQgb24gaG90IHBhdGhzLCBzbyBpbmxpbmUgdGhlIGNvbnRlbnRzIG9mIG00X2lmdmFsLAorIyBmb3Igb25lIGxlc3Mgcm91bmQgb2YgZXhwYW5zaW9uLgogbTRfZGVmaW5lKFttNF9kZWZhdWx0XSwKLVttNF9pZnZhbChbJDFdLCBbJDFdLCBbJDJdKV0pCitbbTRfaWYoWyQxXSwgW10sIFskMl0sIFskMV0pXSkKKworbTRfZGVmaW5lKFttNF9kZWZhdWx0X25ibGFua10sCitbbTRfaWZibGFuayhbJDFdLCBbJDJdLCBbJDFdKV0pCisKKworIyBtNF9kZWZhdWx0X3F1b3RlZChFWFAxLCBFWFAyKQorIyBtNF9kZWZhdWx0X25ibGFua19xdW90ZWQoRVhQMSwgRVhQMikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJldHVybnMgRVhQMSBpZiBub24gZW1wdHkvYmxhbmssIG90aGVyd2lzZSBFWFAyLiAgTGVhdmUgdGhlIHJlc3VsdCBxdW90ZWQuCisjCisjIEZvciBjb21wYXJpc29uOgorIyAgIG00X2RlZmluZShbYWN0aXZlXSwgW0FDVElWRV0pCisjICAgbTRfZGVmYXVsdChbYWN0aXZlXSwgW2RlZmF1bHRdKSA9PiBBQ1RJVkUKKyMgICBtNF9kZWZhdWx0KFtdLCBbYWN0aXZlXSkgPT4gQUNUSVZFCisjICAgLW00X2RlZmF1bHQoWyBdLCBbYWN0aXZlXSktID0+IC0gLQorIyAgIC1tNF9kZWZhdWx0X25ibGFuayhbIF0sIFthY3RpdmVdKS0gPT4gLUFDVElWRS0KKyMgICBtNF9kZWZhdWx0X3F1b3RlZChbYWN0aXZlXSwgW2RlZmF1bHRdKSA9PiBhY3RpdmUKKyMgICBtNF9kZWZhdWx0X3F1b3RlZChbXSwgW2FjdGl2ZV0pID0+IGFjdGl2ZQorIyAgIC1tNF9kZWZhdWx0X3F1b3RlZChbIF0sIFthY3RpdmVdKS0gPT4gLSAtCisjICAgLW00X2RlZmF1bHRfbmJsYW5rX3F1b3RlZChbIF0sIFthY3RpdmVdKS0gPT4gLWFjdGl2ZS0KKyMKKyMgbTRfZGVmYXVsdCBtYWNybyBpcyBjYWxsZWQgb24gaG90IHBhdGhzLCBzbyBpbmxpbmUgdGhlIGNvbnRlbnRzIG9mIG00X2lmdmFsLAorIyBmb3Igb25lIGxlc3Mgcm91bmQgb2YgZXhwYW5zaW9uLgorbTRfZGVmaW5lKFttNF9kZWZhdWx0X3F1b3RlZF0sCitbbTRfaWYoWyQxXSwgW10sIFtbJDJdXSwgW1skMV1dKV0pCisKK200X2RlZmluZShbbTRfZGVmYXVsdF9uYmxhbmtfcXVvdGVkXSwKK1ttNF9pZmJsYW5rKFskMV0sIFtbJDJdXSwgW1skMV1dKV0pCiAKIAogIyBtNF9kZWZuKE5BTUUpCiAjIC0tLS0tLS0tLS0tLS0KLSMgVW5saWtlIHRvIHRoZSBvcmlnaW5hbCwgZG9uJ3QgdG9sZXJhdGUgcG9wcGluZyBzb21ldGhpbmcgd2hpY2ggaXMKLSMgdW5kZWZpbmVkLgorIyBMaWtlIHRoZSBvcmlnaW5hbCwgZXhjZXB0IGd1YXJhbnRlZSBhIHdhcm5pbmcgd2hlbiB1c2luZyBzb21ldGhpbmcgd2hpY2ggaXMKKyMgdW5kZWZpbmVkICh1bmxpa2UgTTQgMS40LngpLiAgVGhpcyByZXBsYWNlbWVudCBpcyBub3QgYSBmdWxsLWZlYXR1cmVkCisjIHJlcGxhY2VtZW50OiBpZiBhbnkgb2YgdGhlIGRlZmluZWQgbWFjcm9zIGNvbnRhaW4gdW5iYWxhbmNlZCBxdW90aW5nLCBidXQKKyMgd2hlbiBwYXN0ZWQgdG9nZXRoZXIgcmVzdWx0IGluIGEgd2VsbC1xdW90ZWQgc3RyaW5nLCB0aGVuIG9ubHkgbmF0aXZlIG00CisjIHN1cHBvcnQgaXMgYWJsZSB0byBnZXQgaXQgY29ycmVjdC4gIEJ1dCB0aGF0J3Mgd2hlcmUgcXVhZHJpZ3JhcGhzIGNvbWUgaW4KKyMgaGFuZHksIGlmIHlvdSByZWFsbHkgbmVlZCB1bmJhbGFuY2VkIHF1b3RlcyBpbnNpZGUgeW91ciBtYWNyb3MuCisjCisjIFRoaXMgbWFjcm8gaXMgY2FsbGVkIGZyZXF1ZW50bHksIHNvIG1pbmltaXplIHRoZSBhbW91bnQgb2YgYWRkaXRpb25hbAorIyBleHBhbnNpb25zIGJ5IHNraXBwaW5nIG00X2lmbmRlZi4gIEJldHRlciB5ZXQsIGlmIF9fbTRfdmVyc2lvbl9fIGV4aXN0cywKKyMgKGFkZGVkIGluIE00IDEuNiksIHRoZW4gbGV0IG00IGRvIHRoZSBqb2IgZm9yIHVzIChzZWUgbTRfaW5pdCkuCiBtNF9kZWZpbmUoW200X2RlZm5dLAotW200X2lmbmRlZihbJDFdLAotCSAgIFttNF9mYXRhbChbJDA6IHVuZGVmaW5lZCBtYWNybzogJDFdKV0pZG5sCi1tNF9idWlsdGluKFtkZWZuXSwgJEApXSkKK1ttNF9pZihbJCNdLCBbMF0sIFtbJDBdXSwKKyAgICAgICBbJCNdLCBbMV0sIFttNF9pZmRlZihbJDFdLCBbX200X2RlZm4oWyQxXSldLAorCQkJICAgIFttNF9mYXRhbChbJDA6IHVuZGVmaW5lZCBtYWNybzogJDFdKV0pXSwKKyAgICAgICBbbTRfbWFwX2FyZ3MoWyQwXSwgJEApXSldKQogCiAKLSMgX200X2R1bXBkZWZzX3VwKE5BTUUpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmaW5lKFtfbTRfZHVtcGRlZnNfdXBdLAotW200X2lmZGVmKFskMV0sCi0JICBbbTRfcHVzaGRlZihbX200X2R1bXBkZWZzXSwgbTRfZGVmbihbJDFdKSlkbmwKLW00X2R1bXBkZWYoWyQxXSlkbmwKLW00X3BvcGRlZihbJDFdKWRubAotX200X2R1bXBkZWZzX3VwKFskMV0pXSldKQorIyBtNF9kdW1wZGVmKE5BTUUuLi4pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSW4gbTQgMS40LngsIGR1bXBkZWYgd3JpdGVzIHRvIHRoZSBjdXJyZW50IGRlYnVnZmlsZSwgcmF0aGVyIHRoYW4KKyMgc3RkZXJyLiAgVGhpcyBpbiB0dXJuIHJveWFsbHkgY29uZnVzZXMgYXV0b200dGU7IHNvIHdlIGZvbGxvdyB0aGUKKyMgbGVhZCBvZiBuZXdlciBtNCBhbmQgYWx3YXlzIGR1bXAgdG8gc3RkZXJyLiAgVW5saWtlIHRoZSBvcmlnaW5hbCwKKyMgdGhpcyB2ZXJzaW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50LCBzaW5jZSB0aGVyZSBpcyBubyBjb252ZW5pZW50IHdheQorIyBpbiBtNCAxLjQueCB0byBncmFiIHRoZSBuYW1lcyBvZiBhbGwgZGVmaW5lZCBtYWNyb3MuICBOZXdlciBtNAorIyBhbHdheXMgZHVtcHMgdG8gc3RkZXJyLCByZWdhcmRsZXNzIG9mIHRoZSBjdXJyZW50IGRlYnVnZmlsZTsgaXQgYWxzbworIyBwcm92aWRlcyBtNHN5bWJvbHMgYXMgYSB3YXkgdG8gZ3JhYiBhbGwgY3VycmVudCBtYWNybyBuYW1lcy4gIEJ1dAorIyBkdW1wZGVmcyBpcyBub3QgZnJlcXVlbnRseSBjYWxsZWQsIHNvIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQKKyMgY29uZGl0aW9uYWxseSB1c2luZyB0aGVzZSBuZXdlciBmZWF0dXJlcy4gIEFsc28sIHRoaXMgdmVyc2lvbgorIyBkb2Vzbid0IHNvcnQgbXVsdGlwbGUgYXJndW1lbnRzLgorIworIyBJZiB3ZSBkZXRlY3QgbTQgMS42IG9yIG5ld2VyLCB0aGVuIHByb3ZpZGUgYW4gYWx0ZXJuYXRlIGRlZmluaXRpb24sCisjIGluc3RhbGxlZCBkdXJpbmcgbTRfaW5pdCwgdGhhdCBhbGxvd3MgYnVpbHRpbnMgdGhyb3VnaC4KKyMgVW5mb3J0dW5hdGVseSwgdGhlcmUgaXMgbm8gbmljZSB3YXkgaW4gbTQgMS40LnggdG8gZHVtcCBidWlsdGlucy4KK200X2RlZmluZShbbTRfZHVtcGRlZl0sCitbbTRfaWYoWyQjXSwgWzBdLCBbbTRfZmF0YWwoWyQwOiBtaXNzaW5nIGFyZ3VtZW50XSldLAorICAgICAgIFskI10sIFsxXSwgW200X2lmZGVmKFskMV0sIFttNF9lcnJwcmludG4oCisgIFskMToJXW00X2RxdW90ZShfbTRfZGVmbihbJDFdKSkpXSwgW200X2ZhdGFsKFskMDogdW5kZWZpbmVkIG1hY3JvOiAkMV0pXSldLAorICAgICAgIFttNF9tYXBfYXJncyhbJDBdLCAkQCldKV0pCisKK200X2RlZmluZShbX200X2R1bXBkZWZdLAorW200X2lmKFskI10sIFswXSwgW200X2ZhdGFsKFskMDogbWlzc2luZyBhcmd1bWVudF0pXSwKKyAgICAgICBbJCNdLCBbMV0sIFttNF9idWlsdGluKFtkdW1wZGVmXSwgWyQxXSldLAorICAgICAgIFttNF9tYXBfYXJnc19zZXAoW200X2J1aWx0aW4oW2R1bXBkZWZdLF0sIFspXSwgW10sICRAKV0pXSkKIAogCi0jIF9tNF9kdW1wZGVmc19kb3duKE5BTUUpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZpbmUoW19tNF9kdW1wZGVmc19kb3duXSwKLVttNF9pZmRlZihbX200X2R1bXBkZWZzXSwKLQkgIFttNF9wdXNoZGVmKFskMV0sIG00X2RlZm4oW19tNF9kdW1wZGVmc10pKWRubAotbTRfcG9wZGVmKFtfbTRfZHVtcGRlZnNdKWRubAotX200X2R1bXBkZWZzX2Rvd24oWyQxXSldKV0pCi0KLQotIyBtNF9kdW1wZGVmcyhOQU1FKQotIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBtNF9kdW1wZGVmcyhOQU1FLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBTaW1pbGFyIHRvIGBtNF9kdW1wZGVmKE5BTUUpJywgYnV0IGlmIE5BTUUgd2FzIG00X3B1c2hkZWYnZWQsIGRpc3BsYXkgaXRzCi0jIHZhbHVlIHN0YWNrIChtb3N0IHJlY2VudCBkaXNwbGF5ZWQgZmlyc3QpLgorIyB2YWx1ZSBzdGFjayAobW9zdCByZWNlbnQgZGlzcGxheWVkIGZpcnN0KS4gIEFsc28sIHRoaXMgdmVyc2lvbiBzaWxlbnRseQorIyBpZ25vcmVzIHVuZGVmaW5lZCBtYWNyb3MsIHJhdGhlciB0aGFuIGVycm9yaW5nIG91dC4KKyMKKyMgVGhpcyBtYWNybyBjaGVhdHMsIGJlY2F1c2UgaXQgcmVsaWVzIG9uIHRoZSBjdXJyZW50IGRlZmluaXRpb24gb2YgTkFNRQorIyB3aGlsZSB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mIG00X3N0YWNrX2ZvcmVhY2hfbGlmbyBpcyBldmFsdWF0ZWQgKHdoaWNoCisjIHdvdWxkIGJlIHVuZGVmaW5lZCBhY2NvcmRpbmcgdG8gdGhlIEFQSSkuCiBtNF9kZWZpbmUoW200X2R1bXBkZWZzXSwKLVtfbTRfZHVtcGRlZnNfdXAoWyQxXSlkbmwKLV9tNF9kdW1wZGVmc19kb3duKFskMV0pXSkKK1ttNF9pZihbJCNdLCBbMF0sIFttNF9mYXRhbChbJDA6IG1pc3NpbmcgYXJndW1lbnRdKV0sCisgICAgICAgWyQjXSwgWzFdLCBbbTRfc3RhY2tfZm9yZWFjaF9saWZvKFskMV0sIFttNF9kdW1wZGVmKFskMV0pbTRfaWdub3JlXSldLAorICAgICAgIFttNF9tYXBfYXJncyhbJDBdLCAkQCldKV0pCisKKyMgbTRfZXN5c2NtZF9zKENPTU1BTkQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWtlIG00X2VzeXNjbWQsIGV4Y2VwdCBzdHJpcCBhbnkgdHJhaWxpbmcgbmV3bGluZXMsIHRodXMgYmVoYXZpbmcKKyMgbW9yZSBsaWtlIHNoZWxsIGNvbW1hbmQgc3Vic3RpdHV0aW9uLgorbTRfZGVmaW5lKFttNF9lc3lzY21kX3NdLAorW200X2Nob21wX2FsbChtNF9lc3lzY21kKFskMV0pKV0pCiAKIAogIyBtNF9wb3BkZWYoTkFNRSkKICMgLS0tLS0tLS0tLS0tLS0tCi0jIFVubGlrZSB0byB0aGUgb3JpZ2luYWwsIGRvbid0IHRvbGVyYXRlIHBvcHBpbmcgc29tZXRoaW5nIHdoaWNoIGlzCi0jIHVuZGVmaW5lZC4KKyMgTGlrZSB0aGUgb3JpZ2luYWwsIGV4Y2VwdCBndWFyYW50ZWUgYSB3YXJuaW5nIHdoZW4gdXNpbmcgc29tZXRoaW5nIHdoaWNoIGlzCisjIHVuZGVmaW5lZCAodW5saWtlIE00IDEuNC54KS4KKyMKKyMgVGhpcyBtYWNybyBpcyBjYWxsZWQgZnJlcXVlbnRseSwgc28gbWluaW1pemUgdGhlIGFtb3VudCBvZiBhZGRpdGlvbmFsCisjIGV4cGFuc2lvbnMgYnkgc2tpcHBpbmcgbTRfaWZuZGVmLiAgQmV0dGVyIHlldCwgaWYgX19tNF92ZXJzaW9uX18gZXhpc3RzLAorIyAoYWRkZWQgaW4gTTQgMS42KSwgdGhlbiBsZXQgbTQgZG8gdGhlIGpvYiBmb3IgdXMgKHNlZSBtNF9pbml0KS4KIG00X2RlZmluZShbbTRfcG9wZGVmXSwKLVttNF9pZm5kZWYoWyQxXSwKLQkgICBbbTRfZmF0YWwoWyQwOiB1bmRlZmluZWQgbWFjcm86ICQxXSldKWRubAotbTRfYnVpbHRpbihbcG9wZGVmXSwgJEApXSkKK1ttNF9pZihbJCNdLCBbMF0sIFtbJDBdXSwKKyAgICAgICBbJCNdLCBbMV0sIFttNF9pZmRlZihbJDFdLCBbX200X3BvcGRlZihbJDFdKV0sCisJCQkgICAgW200X2ZhdGFsKFskMDogdW5kZWZpbmVkIG1hY3JvOiAkMV0pXSldLAorICAgICAgIFttNF9tYXBfYXJncyhbJDBdLCAkQCldKV0pCisKKworIyBtNF9zaGlmdG4oTiwgLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBSZXR1cm5zIC4uLiBzaGlmdGVkIE4gdGltZXMuICBVc2VmdWwgZm9yIHJlY3Vyc2l2ZSAidmFyYXJncyIgY29uc3RydWN0cy4KKyMKKyMgQXV0b2NvbmYgZG9lcyBub3QgdXNlIHRoaXMgbWFjcm8sIGJlY2F1c2UgaXQgaXMgaW5oZXJlbnRseSBzbG93ZXIgdGhhbgorIyBjYWxsaW5nIHRoZSBjb21tb24gY2FzZXMgb2YgbTRfc2hpZnQyIG9yIG00X3NoaWZ0MyBkaXJlY3RseS4gIEJ1dCBpdAorIyBtaWdodCBhcyB3ZWxsIGJlIGZhc3QgZm9yIG90aGVyIGNsaWVudHMsIHN1Y2ggYXMgTGlidG9vbC4gIE9uZSB3YXkgdG8KKyMgZG8gdGhpcyBpcyB0byBleHBhbmQgJEAgb25seSBvbmNlIGluIF9tNF9zaGlmdG4gKG90aGVyd2lzZSwgZm9yIGxvbmcKKyMgbGlzdHMsIHRoZSBleHBhbnNpb24gb2YgbTRfaWYgdGFrZXMgdHdpY2UgYXMgbXVjaCBtZW1vcnkgYXMgd2hhdCB0aGUKKyMgbGlzdCBpdHNlbGYgb2NjdXBpZXMsIG9ubHkgdG8gdGhyb3cgYXdheSB0aGUgdW51c2VkIGJyYW5jaCkuICBUaGUgZW5kCisjIHJlc3VsdCBpcyBzdHJpY3RseSBlcXVpdmFsZW50IHRvCisjICAgbTRfaWYoWyQxXSwgMSwgW200X3NoaWZ0KCxtNF9zaGlmdChtNF9zaGlmdCgkQCkpKV0sCisjICAgICAgICAgW19tNF9zaGlmdG4obTRfZGVjcihbJDFdKSwgbTRfc2hpZnQobTRfc2hpZnQoJEApKSldKQorIyBidXQgd2l0aCB0aGUgZmluYWwgYG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpJyBzaGFyZWQgYmV0d2VlbiB0aGUgdHdvCisjIHBhdGhzLiAgVGhlIGZpcnN0IGxlZyB1c2VzIGEgbm8tb3AgbTRfc2hpZnQoLCRAKSB0byBiYWxhbmNlIG91dCB0aGUgKCkuCisjCisjIFBsZWFzZSBrZWVwIGZvcmVhY2gubTQgaW4gc3luYyB3aXRoIGFueSBhZGp1c3RtZW50cyBtYWRlIGhlcmUuCittNF9kZWZpbmUoW200X3NoaWZ0bl0sCitbbTRfYXNzZXJ0KDAgPCAkMSAmJiAkMSA8ICQjKV8kMCgkQCldKQorCittNF9kZWZpbmUoW19tNF9zaGlmdG5dLAorW200X2lmKFskMV0sIDEsIFttNF9zaGlmdChdLAorICAgICAgIFskMChtNF9kZWNyKFskMV0pXSksIG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpXSkKKworIyBtNF9zaGlmdDIoLi4uKQorIyBtNF9zaGlmdDMoLi4uKQorIyAtLS0tLS0tLS0tLS0tLQorIyBSZXR1cm5zIC4uLiBzaGlmdGVkIHR3aWNlLCBhbmQgdGhyZWUgdGltZXMuICBGYXN0ZXIgdGhhbiBtNF9zaGlmdG4uCittNF9kZWZpbmUoW200X3NoaWZ0Ml0sIFttNF9zaGlmdChtNF9zaGlmdCgkQCkpXSkKK200X2RlZmluZShbbTRfc2hpZnQzXSwgW200X3NoaWZ0KG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpXSkKKworIyBfbTRfc2hpZnQyKC4uLikKKyMgX200X3NoaWZ0MyguLi4pCisjIC0tLS0tLS0tLS0tLS0tLQorIyBMaWtlIG00X3NoaWZ0MiBvciBtNF9zaGlmdDMsIGV4Y2VwdCBpbmNsdWRlIGEgbGVhZGluZyBjb21tYSB1bmxlc3Mgc2hpZnRpbmcKKyMgY29uc3VtZXMgYWxsIGFyZ3VtZW50cy4gIFdoeT8gIEJlY2F1c2UgaW4gcmVjdXJzaW9uLCBpdCBpcyBuaWNlIHRvCisjIGRpc3Rpbmd1aXNoIGJldHdlZW4gMSBlbGVtZW50IGxlZnQgYW5kIDAgZWxlbWVudHMgbGVmdCwgYmFzZWQgb24gaG93IG1hbnkKKyMgYXJndW1lbnRzIHRoaXMgc2hpZnQgZXhwYW5kcyB0by4KK200X2RlZmluZShbX200X3NoaWZ0Ml0sCitbbTRfaWYoWyQjXSwgWzJdLCBbXSwKKyAgICAgICBbLCBtNF9zaGlmdChtNF9zaGlmdCgkQCkpXSldKQorbTRfZGVmaW5lKFtfbTRfc2hpZnQzXSwKK1ttNF9pZihbJCNdLCBbM10sIFtdLAorICAgICAgIFssIG00X3NoaWZ0KG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpXSldKQorCisKKyMgbTRfdW5kZWZpbmUoTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlrZSB0aGUgb3JpZ2luYWwsIGV4Y2VwdCBndWFyYW50ZWUgYSB3YXJuaW5nIHdoZW4gdXNpbmcgc29tZXRoaW5nIHdoaWNoIGlzCisjIHVuZGVmaW5lZCAodW5saWtlIE00IDEuNC54KS4KKyMKKyMgVGhpcyBtYWNybyBpcyBjYWxsZWQgZnJlcXVlbnRseSwgc28gbWluaW1pemUgdGhlIGFtb3VudCBvZiBhZGRpdGlvbmFsCisjIGV4cGFuc2lvbnMgYnkgc2tpcHBpbmcgbTRfaWZuZGVmLiAgQmV0dGVyIHlldCwgaWYgX19tNF92ZXJzaW9uX18gZXhpc3RzLAorIyAoYWRkZWQgaW4gTTQgMS42KSwgdGhlbiBsZXQgbTQgZG8gdGhlIGpvYiBmb3IgdXMgKHNlZSBtNF9pbml0KS4KK200X2RlZmluZShbbTRfdW5kZWZpbmVdLAorW200X2lmKFskI10sIFswXSwgW1skMF1dLAorICAgICAgIFskI10sIFsxXSwgW200X2lmZGVmKFskMV0sIFtfbTRfdW5kZWZpbmUoWyQxXSldLAorCQkJICAgIFttNF9mYXRhbChbJDA6IHVuZGVmaW5lZCBtYWNybzogJDFdKV0pXSwKKyAgICAgICBbbTRfbWFwX2FyZ3MoWyQwXSwgJEApXSldKQorCisjIF9tNF93cmFwKFBSRSwgUE9TVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBIZWxwZXIgbWFjcm8gZm9yIG00X3dyYXAgYW5kIG00X3dyYXBfbGlmby4gIEFsbG93cyBuZXN0ZWQgY2FsbHMgdG8KKyMgbTRfd3JhcCB3aXRoaW4gd3JhcHBlZCB0ZXh0LiAgVXNlIF9tNF9kZWZuIGFuZCBfbTRfcG9wZGVmIGZvciBzcGVlZC4KK200X2RlZmluZShbX200X3dyYXBdLAorW200X2lmZGVmKFskMF90ZXh0XSwKKwkgIFttNF9kZWZpbmUoWyQwX3RleHRdLCBbJDFdX200X2RlZm4oWyQwX3RleHRdKVskMl0pXSwKKwkgIFttNF9idWlsdGluKFttNHdyYXBdLCBbbTRfdW5xdW90ZSgKKyAgX200X2RlZm4oWyQwX3RleHRdKV9tNF9wb3BkZWYoWyQwX3RleHRdKSldKW00X2RlZmluZShbJDBfdGV4dF0sIFskMSQyXSldKV0pCisKKyMgbTRfd3JhcChURVhUKQorIyAtLS0tLS0tLS0tLS0tCisjIEFwcGVuZCBURVhUIHRvIHRoZSBsaXN0IG9mIGhvb2tzIHRvIGJlIGV4ZWN1dGVkIGF0IHRoZSBlbmQgb2YgaW5wdXQuCisjIFdoZXJlYXMgdGhlIG9yZGVyIG9mIHRoZSBvcmlnaW5hbCBtYXkgYmUgTElGTyBpbiB0aGUgdW5kZXJseWluZyBtNCwKKyMgdGhpcyB2ZXJzaW9uIGlzIGFsd2F5cyBGSUZPLgorbTRfZGVmaW5lKFttNF93cmFwXSwKK1tfbTRfd3JhcChbXSwgWyQxW11dKV0pCisKKyMgbTRfd3JhcF9saWZvKFRFWFQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcmVwZW5kIFRFWFQgdG8gdGhlIGxpc3Qgb2YgaG9va3MgdG8gYmUgZXhlY3V0ZWQgYXQgdGhlIGVuZCBvZiBpbnB1dC4KKyMgV2hlcmVhcyB0aGUgb3JkZXIgb2YgbTRfd3JhcCBtYXkgYmUgRklGTyBpbiB0aGUgdW5kZXJseWluZyBtNCwgdGhpcworIyB2ZXJzaW9uIGlzIGFsd2F5cyBMSUZPLgorbTRfZGVmaW5lKFttNF93cmFwX2xpZm9dLAorW19tNF93cmFwKFskMVtdXSldKQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyA3LiBRdW90aW5nIG1hbmlwdWxhdGlvbi4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBtNF9hcHBseShNQUNSTywgTElTVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEludm9rZSBNQUNSTywgd2l0aCBhcmd1bWVudHMgcHJvdmlkZWQgZnJvbSB0aGUgcXVvdGVkIGxpc3Qgb2YKKyMgY29tbWEtc2VwYXJhdGVkIHF1b3RlZCBhcmd1bWVudHMuICBJZiBMSVNUIGlzIGVtcHR5LCBpbnZva2UgTUFDUk8KKyMgd2l0aG91dCBhcmd1bWVudHMuICBUaGUgZXhwYW5zaW9uIHdpbGwgbm90IGJlIGNvbmNhdGVuYXRlZCB3aXRoCisjIHN1YnNlcXVlbnQgdGV4dC4KK200X2RlZmluZShbbTRfYXBwbHldLAorW200X2lmKFskMl0sIFtdLCBbJDFdLCBbJDEoJDIpXSlbXV0pCisKKyMgX200X2FwcGx5KE1BQ1JPLCBMSVNUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExpa2UgbTRfYXBwbHksIGV4Y2VwdCBkbyBub3RoaW5nIGlmIExJU1QgaXMgZW1wdHkuCittNF9kZWZpbmUoW19tNF9hcHBseV0sCitbbTRfaWYoWyQyXSwgW10sIFtdLCBbJDEoJDIpW11dKV0pCisKKworIyBtNF9jb3VudChBUkdTKQorIyAtLS0tLS0tLS0tLS0tLQorIyBSZXR1cm4gYSBjb3VudCBvZiBob3cgbWFueSBBUkdTIGFyZSBwcmVzZW50LgorbTRfZGVmaW5lKFttNF9jb3VudF0sIFskI10pCisKKworIyBtNF9jdXJyeShNQUNSTywgQVJHLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQZXJmb3JtIGFyZ3VtZW50IGN1cnJ5aW5nLiAgVGhlIGV4cGFuc2lvbiBvZiB0aGlzIG1hY3JvIGlzIGFub3RoZXIKKyMgbWFjcm8gdGhhdCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgYXBwZW5kcyBpdCB0byB0aGUgZW5kIG9mIHRoZQorIyBvcmlnaW5hbCBBUkcgbGlzdCwgdGhlbiBpbnZva2VzIE1BQ1JPLiAgRm9yIGV4YW1wbGU6CisjICAgbTRfY3VycnkoW200X2N1cnJ5XSwgW200X3JldmVyc2VdLCBbMV0pKFsyXSkoWzNdKSA9PiAzLCAyLCAxCisjIE5vdCBxdWl0ZSBhcyBwcmFjdGljYWwgYXMgbTRfaW5jciwgYnV0IHlvdSBjb3VsZCBhbHNvIGRvOgorIyAgIG00X2RlZmluZShbYWRkXSwgW200X2V2YWwoKFskMV0pICsgKFskMl0pKV0pCisjICAgbTRfZGVmaW5lKFthZGRfb25lXSwgW200X2N1cnJ5KFthZGRdLCBbMV0pXSkKKyMgICBhZGRfb25lKCkoWzJdKSA9PiAzCittNF9kZWZpbmUoW200X2N1cnJ5XSwgWyQxKG00X3NoaWZ0KCRALClfJDBdKQorbTRfZGVmaW5lKFtfbTRfY3VycnldLCAgICAgICAgICAgICAgIFtbJDFdKV0pCisKKworIyBtNF9kbyhTVFJJTkcsIC4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoaXMgbWFjcm8gaW52b2tlcyBhbGwgaXRzIGFyZ3VtZW50cyAoaW4gc2VxdWVuY2UsIG9mIGNvdXJzZSkuICBJdCBpcworIyB1c2VmdWwgZm9yIG1ha2luZyB5b3VyIG1hY3JvcyBtb3JlIHN0cnVjdHVyZWQgYW5kIHJlYWRhYmxlIGJ5IGRyb3BwaW5nCisjIHVubmVjZXNzYXJ5IGRubCdzIGFuZCBoYXZlIHRoZSBtYWNyb3MgaW5kZW50ZWQgcHJvcGVybHkuICBObyBjb25jYXRlbmF0aW9uCisjIG9jY3VycyBhZnRlciBhIFNUUklORzsgdXNlIG00X3VucXVvdGUobTRfam9pbigsU1RSSU5HKSkgZm9yIHRoYXQuCisjCisjIFBsZWFzZSBrZWVwIGZvcmVhY2gubTQgaW4gc3luYyB3aXRoIGFueSBhZGp1c3RtZW50cyBtYWRlIGhlcmUuCittNF9kZWZpbmUoW200X2RvXSwKK1ttNF9pZihbJCNdLCAwLCBbXSwKKyAgICAgICBbJCNdLCAxLCBbJDFbXV0sCisgICAgICAgWyQxW10kMChtNF9zaGlmdCgkQCkpXSldKQorCisKKyMgbTRfZHF1b3RlKEFSR1MpCisjIC0tLS0tLS0tLS0tLS0tLQorIyBSZXR1cm4gQVJHUyBhcyBhIHF1b3RlZCBsaXN0IG9mIHF1b3RlZCBhcmd1bWVudHMuCittNF9kZWZpbmUoW200X2RxdW90ZV0sICBbWyRAXV0pCisKKworIyBtNF9kcXVvdGVfZWx0KEFSR1MpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmV0dXJuIEFSR1MgYXMgYW4gdW5xdW90ZWQgbGlzdCBvZiBkb3VibGUtcXVvdGVkIGFyZ3VtZW50cy4KKyMKKyMgUGxlYXNlIGtlZXAgZm9yZWFjaC5tNCBpbiBzeW5jIHdpdGggYW55IGFkanVzdG1lbnRzIG1hZGUgaGVyZS4KK200X2RlZmluZShbbTRfZHF1b3RlX2VsdF0sCitbbTRfaWYoWyQjXSwgWzBdLCBbXSwKKyAgICAgICBbJCNdLCBbMV0sIFtbWyQxXV1dLAorICAgICAgIFtbWyQxXV0sJDAobTRfc2hpZnQoJEApKV0pXSkKKworCisjIG00X2VjaG8oQVJHUykKKyMgLS0tLS0tLS0tLS0tLQorIyBSZXR1cm4gdGhlIEFSR1MsIHdpdGggdGhlIHNhbWUgbGV2ZWwgb2YgcXVvdGluZy4gIFdoaXRlc3BhY2UgYWZ0ZXIKKyMgdW5xdW90ZWQgY29tbWFzIGFyZSBjb25zdW1lZC4KK200X2RlZmluZShbbTRfZWNob10sIFskQF0pCisKKworIyBtNF9leHBhbmQoQVJHKQorIyBfbTRfZXhwYW5kKEFSRykKKyMgLS0tLS0tLS0tLS0tLS0tCisjIFJldHVybiB0aGUgZXhwYW5zaW9uIG9mIEFSRyBhcyBhIHNpbmdsZSBzdHJpbmcuICBVbmxpa2UKKyMgbTRfcXVvdGUoJDEpLCB0aGlzIHByZXNlcnZlcyB3aGl0ZXNwYWNlIGZvbGxvd2luZyBzaW5nbGUtcXVvdGVkCisjIGNvbW1hcyB0aGF0IGFwcGVhciB3aXRoaW4gQVJHLiAgSXQgYWxzbyBkZWFscyB3aXRoIHNoZWxsIGNhc2UKKyMgc3RhdGVtZW50cy4KKyMKKyMgICBtNF9kZWZpbmUoW2FjdGl2ZV0sIFtBQ1QsIElWRV0pCisjICAgbTRfZGVmaW5lKFthY3RpdmUyXSwgW1tBQ1QsIElWRV1dKQorIyAgIG00X3F1b3RlKGFjdGl2ZSwgYWN0aXZlMikKKyMgICA9PiBBQ1QsSVZFLEFDVCwgSVZFCisjICAgbTRfZXhwYW5kKFthY3RpdmUsIGFjdGl2ZTJdKQorIyAgID0+IEFDVCwgSVZFLCBBQ1QsIElWRQorIworIyBVbmZvcnR1bmF0ZWx5LCBkdWUgdG8gbGltaXRhdGlvbnMgaW4gbTQsIEFSRyBtdXN0IGV4cGFuZCB0bworIyBzb21ldGhpbmcgd2l0aCBiYWxhbmNlZCBxdW90ZXMgKHVzZSBxdWFkcmlncmFwaHMgdG8gZ2V0IGFyb3VuZAorIyB0aGlzKSwgYW5kIHNob3VsZCBub3QgY29udGFpbiB0aGUgdW5saWtlbHkgZGVsaW1pdGVycyAtPTx7KCBvcgorIyApfT49LS4gIEl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgdW5iYWxhbmNlZCBxdW90ZWQgYCgnIG9yIGApJywgYXMgd2VsbAorIyBhcyB1bmJhbGFuY2VkIHVucXVvdGVkIGApJy4gIG00X2V4cGFuZCBjYW4gaGFuZGxlIHVudGVybWluYXRlZAorIyBjb21tZW50cyBvciBkbmwgb24gdGhlIGZpbmFsIGxpbmUsIGF0IHRoZSBleHBlbnNlIG9mIHNwZWVkOyBpdCBhbHNvCisjIGFpZHMgaW4gZGV0ZWN0aW5nIGF0dGVtcHRzIHRvIGluY29ycmVjdGx5IGNoYW5nZSB0aGUgY3VycmVudAorIyBkaXZlcnNpb24gaW5zaWRlIEFSRy4gIE1lYW53aGlsZSwgX200X2V4cGFuZCBpcyBmYXN0ZXIgYnV0IG11c3QgYmUKKyMgZ2l2ZW4gYSB0ZXJtaW5hdGVkIGV4cGFuc2lvbiwgYW5kIGhhcyBubyBzYWZldHkgY2hlY2tzIGZvcgorIyBtaXMtZGl2ZXJ0ZWQgdGV4dC4KKyMKKyMgRXhwbG9pdCB0aGF0IGV4dHJhIHVucXVvdGVkICgpIHdpbGwgZ3JvdXAgdW5xdW90ZWQgY29tbWFzIGFuZCB0aGUKKyMgZm9sbG93aW5nIHdoaXRlc3BhY2UuICBtNF9icGF0c3Vic3QgY2FuJ3QgaGFuZGxlIG5ld2xpbmVzIGluc2lkZSAkMSwKKyMgYW5kIG00X3N1YnN0ciBzdHJpcHMgcXVvdGluZy4gIFNvIHdlIChhYil1c2UgbTRfY2hhbmdlcXVvdGUsIHVzaW5nCisjIHRlbXBvcmFyeSBxdW90ZXMgdG8gcmVtb3ZlIHRoZSBkZWxpbWl0ZXJzIHRoYXQgY29udmVuaWVudGx5IGluY2x1ZGVkCisjIHRoZSB1bnF1b3RlZCAoKSB0aGF0IHdlcmUgYWRkZWQgcHJpb3IgdG8gdGhlIGNoYW5nZXF1b3RlLgorIworIyBUaGFua3MgdG8gc2hlbGwgY2FzZSBzdGF0ZW1lbnRzLCB0b28gbWFueSBwZW9wbGUgYXJlIHByb25lIHRvIHBhc3MKKyMgdW5kZXJxdW90ZWQgYCknLCBzbyB3ZSB0cnkgdG8gZGV0ZWN0IHRoYXQgYnkgcGFzc2luZyBhIG1hcmtlciBhcyBhCisjIGZvdXJ0aCBhcmd1bWVudDsgaWYgdGhlIG1hcmtlciBpcyBub3QgcHJlc2VudCwgdGhlbiB3ZSBhc3N1bWUgdGhhdAorIyB3ZSBlbmNvdW50ZXJlZCBhbiBlYXJseSBgKScsIGFuZCByZS1leHBhbmQgdGhlIGZpcnN0IGFyZ3VtZW50LCBidXQKKyMgdGhpcyB0aW1lIHdpdGggb25lIG1vcmUgYCgnIGluIHRoZSBzZWNvbmQgYXJndW1lbnQgYW5kIGluIHRoZQorIyBvcGVuLXF1b3RlIGRlbGltaXRlci4gIFdlIG11c3QgYWxzbyBpZ25vcmUgdGhlIHNsb3AgZnJvbSB0aGUKKyMgcHJldmlvdXMgdHJ5LiAgVGhlIGZpbmFsIG1hY3JvIGlzIHRodXMgaGFsZiBsaW5lLW5vaXNlLCBoYWxmIGFydC4KK200X2RlZmluZShbbTRfZXhwYW5kXSwKK1ttNF9wdXNoZGVmKFttNF9kaXZlcnRdLCBfbTRfZGVmbihbX200X2RpdmVydF91bnNhZmVdKSldZG5sCitbbTRfcHVzaGRlZihbbTRfZGl2ZXJ0X3B1c2hdLCBfbTRfZGVmbihbX200X2RpdmVydF91bnNhZmVdKSldZG5sCitbbTRfY2hvbXAoXyQwKFskMQorXSkpX200X3BvcGRlZihbbTRfZGl2ZXJ0XSwgW200X2RpdmVydF9wdXNoXSldKQorCittNF9kZWZpbmUoW19tNF9leHBhbmRdLCBbJDBfKFskMV0sIFsoXSwgLT08eygkMSl9Pj0tLCBbfT49LV0pXSkKKworbTRfZGVmaW5lKFtfbTRfZXhwYW5kX10sCitbbTRfaWYoWyQ0XSwgW30+PS1dLAorICAgICAgIFttNF9jaGFuZ2VxdW90ZShbLT08eyQyXSwgWyl9Pj0tXSkkM200X2NoYW5nZXF1b3RlKFssIF0pXSwKKyAgICAgICBbJDAoWyQxXSwgWygkMl0sIC09PHsoJDIkMSl9Pj0tLCBbfT49LV0pbTRfaWdub3JlJDJdKV0pCisKKworIyBtNF9pZ25vcmUoQVJHUykKKyMgLS0tLS0tLS0tLS0tLS0tCisjIEV4cGFuZHMgdG8gbm90aGluZy4gIFVzZWZ1bCBmb3IgY29uZGl0aW9uYWxseSBpZ25vcmluZyBhbiBhcmJpdHJhcnkKKyMgbnVtYmVyIG9mIGFyZ3VtZW50cyAoc2VlIF9tNF9saXN0X2NtcCBmb3IgYW4gZXhhbXBsZSkuCittNF9kZWZpbmUoW200X2lnbm9yZV0pCisKKworIyBtNF9tYWtlX2xpc3QoQVJHUykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNpbWlsYXIgdG8gbTRfZHF1b3RlLCB0aGlzIGNyZWF0ZXMgYSBxdW90ZWQgbGlzdCBvZiBxdW90ZWQgQVJHUy4gIFRoaXMKKyMgdmVyc2lvbiBpcyBsZXNzIGVmZmljaWVudCB0aGFuIG00X2RxdW90ZSwgYnV0IHNlcGFyYXRlcyBlYWNoIGFyZ3VtZW50CisjIHdpdGggYSBjb21tYSBhbmQgbmV3bGluZSwgcmF0aGVyIHRoYW4ganVzdCBjb21tYSwgZm9yIHJlYWRhYmlsaXR5LgorIyBXaGVuIGRldmVsb3BpbmcgYW4gbTRzdWdhciBhbGdvcml0aG0sIHlvdSBjb3VsZCB0ZW1wb3JhcmlseSB1c2UKKyMgICBtNF9wdXNoZGVmKFttNF9kcXVvdGVdLG00X2RlZm4oW200X21ha2VfbGlzdF0pKQorIyBhcm91bmQgeW91ciBjb2RlIHRvIG1ha2UgZGVidWdnaW5nIGVhc2llci4KK200X2RlZmluZShbbTRfbWFrZV9saXN0XSwgW200X2pvaW4oWywKK10sIG00X2RxdW90ZV9lbHQoJEApKV0pCisKKworIyBtNF9ub3F1b3RlKFNUUklORykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJldHVybiB0aGUgcmVzdWx0IG9mIGlnbm9yaW5nIGFsbCBxdW90ZXMgaW4gU1RSSU5HIGFuZCBpbnZva2luZyB0aGUKKyMgbWFjcm9zIGl0IGNvbnRhaW5zLiAgQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIGlzIHVzZWZ1bCBmb3IgZW5hYmxpbmcKKyMgbWFjcm8gaW52b2NhdGlvbnMgaW5zaWRlIHN0cmluZ3Mgd2l0aCBbXSBibG9ja3MgKGZvciBpbnN0YW5jZSByZWdleHBzCisjIGFuZCBoZWxwLXN0cmluZ3MpLiAgT24gdGhlIG90aGVyIGhhbmQsIHNpbmNlIGFsbCBxdW90ZXMgYXJlIGRpc2FibGVkLAorIyBhbnkgbWFjcm8gZXhwYW5kZWQgZHVyaW5nIHRoaXMgdGltZSB0aGF0IHJlbGllcyBvbiBuZXN0ZWQgW10gcXVvdGluZworIyB3aWxsIGxpa2VseSBjcmFzaCBhbmQgYnVybi4gIFRoaXMgbWFjcm8gaXMgc2VsZG9tIHVzZWZ1bDsgY29uc2lkZXIKKyMgbTRfdW5xdW90ZSBvciBtNF9leHBhbmQgaW5zdGVhZC4KK200X2RlZmluZShbbTRfbm9xdW90ZV0sCitbbTRfY2hhbmdlcXVvdGUoWy09PHsoXSxbKX0+PS1dKSQxLT08eygpfT49LW00X2NoYW5nZXF1b3RlKFssXSldKQogCiAKICMgbTRfcXVvdGUoQVJHUykKICMgLS0tLS0tLS0tLS0tLS0KLSMgUmV0dXJuIEFSR1MgYXMgYSBzaW5nbGUgYXJndW1lbnRzLgorIyBSZXR1cm4gQVJHUyBhcyBhIHNpbmdsZSBhcmd1bWVudC4gIEFueSB3aGl0ZXNwYWNlIGFmdGVyIHVucXVvdGVkIGNvbW1hcworIyBpcyBzdHJpcHBlZC4gIFRoZXJlIGlzIGFsd2F5cyBvdXRwdXQsIGV2ZW4gd2hlbiB0aGVyZSB3ZXJlIG5vIGFyZ3VtZW50cy4KICMKICMgSXQgaXMgaW1wb3J0YW50IHRvIHJlYWxpemUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgbTRfcXVvdGUoZXhwKScgYW5kCiAjIGBbZXhwXSc6IGluIHRoZSBmaXJzdCBjYXNlIHlvdSBvYnRhaW4gdGhlIHF1b3RlZCAqcmVzdWx0KiBvZiB0aGUKICMgZXhwYW5zaW9uIG9mIEVYUCwgd2hpbGUgaW4gdGhlIGxhdHRlciB5b3UganVzdCBvYnRhaW4gdGhlIHN0cmluZwogIyBgZXhwJy4KIG00X2RlZmluZShbbTRfcXVvdGVdLCAgW1skKl1dKQotbTRfZGVmaW5lKFttNF9kcXVvdGVdLCAgW1skQF1dKQogCiAKLSMgbTRfbm9xdW90ZShTVFJJTkcpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLQotIyBSZXR1cm4gdGhlIHJlc3VsdCBvZiBpZ25vcmluZyBhbGwgcXVvdGVzIGluIFNUUklORyBhbmQgaW52b2tpbmcgdGhlCi0jIG1hY3JvcyBpdCBjb250YWlucy4gIEFtb25nc3Qgb3RoZXIgdGhpbmdzIHVzZWZ1bCBmb3IgZW5hYmxpbmcgbWFjcm8KLSMgaW52b2NhdGlvbnMgaW5zaWRlIHN0cmluZ3Mgd2l0aCBbXSBibG9ja3MgKGZvciBpbnN0YW5jZSByZWdleHBzIGFuZAotIyBoZWxwLXN0cmluZ3MpLgotbTRfZGVmaW5lKFttNF9ub3F1b3RlXSwKLVttNF9jaGFuZ2VxdW90ZSgtPTx7LH0+PS0pJDEtPTx7fT49LW00X2NoYW5nZXF1b3RlKFssXSldKQorIyBfbTRfcXVvdGUoQVJHUykKKyMgLS0tLS0tLS0tLS0tLS0tCisjIExpa2UgbTRfcXVvdGUsIGV4Y2VwdCB0aGF0IHdoZW4gdGhlcmUgYXJlIG5vIGFyZ3VtZW50cywgdGhlcmUgaXMgbm8KKyMgb3V0cHV0LiAgRm9yIGNvbmRpdGlvbmFsIHNjZW5hcmlvcyAoc3VjaCBhcyBwYXNzaW5nIF9tNF9xdW90ZSBhcyB0aGUKKyMgbWFjcm8gbmFtZSBpbiBtNF9tYXBhbGwpLCB0aGlzIGZlYXR1cmUgY2FuIGJlIHVzZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbgorIyBvbmUgYXJndW1lbnQgb2YgdGhlIGVtcHR5IHN0cmluZyB2cy4gbm8gYXJndW1lbnRzLiAgSG93ZXZlciwgaW4gdGhlCisjIG5vcm1hbCBjYXNlIHdpdGggYXJndW1lbnRzIHByZXNlbnQsIHRoaXMgaXMgbGVzcyBlZmZpY2llbnQgdGhhbiBtNF9xdW90ZS4KK200X2RlZmluZShbX200X3F1b3RlXSwKK1ttNF9pZihbJCNdLCBbMF0sIFtdLCBbWyQqXV0pXSkKIAogCi0jIG00X3NoaWZ0bihOLCAuLi4pCi0jIC0tLS0tLS0tLS0tLS0tLS0tCi0jIFJldHVybnMgLi4uIHNoaWZ0ZWQgTiB0aW1lcy4gIFVzZWZ1bCBmb3IgcmVjdXJzaXZlICJ2YXJhcmdzIiBjb25zdHJ1Y3RzLgotbTRfZGVmaW5lKFttNF9zaGlmdG5dLAotW200X2Fzc2VydCgoJDEgPj0gMCkgJiYgKCQjID4gJDEpKWRubAotX200X3NoaWZ0bigkQCldKQotCi1tNF9kZWZpbmUoW19tNF9zaGlmdG5dLAotW200X2lmKFskMV0sIDAsCi0gICAgICAgW200X3NoaWZ0KCRAKV0sCi0gICAgICAgW19tNF9zaGlmdG4obTRfZXZhbChbJDFdLTEpLCBtNF9zaGlmdChtNF9zaGlmdCgkQCkpKV0pXSkKKyMgbTRfcmV2ZXJzZShBUkdTKQorIyAtLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCBBUkdTIGluIHJldmVyc2Ugb3JkZXIuCisjCisjIFBsZWFzZSBrZWVwIGZvcmVhY2gubTQgaW4gc3luYyB3aXRoIGFueSBhZGp1c3RtZW50cyBtYWRlIGhlcmUuCittNF9kZWZpbmUoW200X3JldmVyc2VdLAorW200X2lmKFskI10sIFswXSwgW10sIFskI10sIFsxXSwgW1skMV1dLAorICAgICAgIFskMChtNF9zaGlmdCgkQCkpLCBbJDFdXSldKQogCiAKLSMgbTRfdW5kZWZpbmUoTkFNRSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0KLSMgVW5saWtlIHRvIHRoZSBvcmlnaW5hbCwgZG9uJ3QgdG9sZXJhdGUgdW5kZWZpbmluZyBzb21ldGhpbmcgd2hpY2ggaXMKLSMgdW5kZWZpbmVkLgotbTRfZGVmaW5lKFttNF91bmRlZmluZV0sCi1bbTRfaWZuZGVmKFskMV0sCi0JICAgW200X2ZhdGFsKFskMDogdW5kZWZpbmVkIG1hY3JvOiAkMV0pXSlkbmwKLW00X2J1aWx0aW4oW3VuZGVmaW5lXSwgJEApXSkKKyMgbTRfdW5xdW90ZShBUkdTKQorIyAtLS0tLS0tLS0tLS0tLS0tCisjIFJlbW92ZSBvbmUgbGF5ZXIgb2YgcXVvdGVzIGZyb20gZWFjaCBBUkcsIHBlcmZvcm1pbmcgb25lIGxldmVsIG9mCisjIGV4cGFuc2lvbi4gIEZvciBvbmUgYXJndW1lbnQsIG00X3VucXVvdGUoW2FyZ10pIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4KKyMgbTRfZG8oW2FyZ10pLCBidXQgZm9yIG11bHRpcGxlIGFyZ3VtZW50cywgdGhlIGRpZmZlcmVuY2UgaXMgdGhhdAorIyBtNF91bnF1b3RlIHNlcGFyYXRlcyBhcmd1bWVudHMgd2l0aCBjb21tYXMgd2hpbGUgbTRfZG8gY29uY2F0ZW5hdGVzLgorIyBGb2xsb3cgdGhpcyBtYWNybyB3aXRoIFtdIGlmIGNvbmNhdGVuYXRpb24gd2l0aCBzdWJzZXF1ZW50IHRleHQgaXMKKyMgdW5kZXNpcmVkLgorbTRfZGVmaW5lKFttNF91bnF1b3RlXSwgWyQqXSkKIAogCiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgNy4gSW1wbGVtZW50aW5nIG00IGxvb3BzLiAgIyMKKyMjIDguIEltcGxlbWVudGluZyBtNCBsb29wcy4gICMjCiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogCiAKICMgbTRfZm9yKFZBUklBQkxFLCBGSVJTVCwgTEFTVCwgW1NURVAgPSArLy0xXSwgRVhQUkVTU0lPTikKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRXhwYW5kIEVYUFJFU1NJT04gZGVmaW5pbmcgVkFSSUFCTEUgdG8gRlJPTSwgRlJPTSArIDEsIC4uLiwgVE8uCi0jIEJvdGggbGltaXRzIGFyZSBpbmNsdWRlZCwgYW5kIGJvdW5kcyBhcmUgY2hlY2tlZCBmb3IgY29uc2lzdGVuY3kuCisjIEV4cGFuZCBFWFBSRVNTSU9OIGRlZmluaW5nIFZBUklBQkxFIHRvIEZST00sIEZST00gKyAxLCAuLi4sIFRPIHdpdGgKKyMgaW5jcmVtZW50cyBvZiBTVEVQLiAgQm90aCBsaW1pdHMgYXJlIGluY2x1ZGVkLCBhbmQgYm91bmRzIGFyZQorIyBjaGVja2VkIGZvciBjb25zaXN0ZW5jeS4gIFRoZSBhbGdvcml0aG0gaXMgcm9idXN0IHRvIGluZGlyZWN0CisjIFZBUklBQkxFIG5hbWVzLiAgQ2hhbmdpbmcgVkFSSUFCTEUgaW5zaWRlIEVYUFJFU1NJT04gd2lsbCBub3QgaW1wYWN0CisjIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucy4KKyMKKyMgVXNlcyBfbTRfZGVmbiBmb3Igc3BlZWQsIGFuZCBhdm9pZCBkbmwgaW4gdGhlIG1hY3JvIGJvZHkuICBGYWN0b3IKKyMgdGhlIF9tNF9mb3IgY2FsbCBzbyB0aGF0IEVYUFJFU1NJT04gaXMgb25seSBwYXJzZWQgb25jZS4KIG00X2RlZmluZShbbTRfZm9yXSwKLVttNF9jYXNlKG00X3NpZ24obTRfZXZhbCgkMyAtICQyKSksCi0JIDEsIFttNF9hc3NlcnQobTRfc2lnbihtNF9kZWZhdWx0KCQ0LCAxKSkgPT0gMSldLAotCS0xLCBbbTRfYXNzZXJ0KG00X3NpZ24obTRfZGVmYXVsdCgkNCwgLTEpKSA9PSAtMSldKWRubAotbTRfcHVzaGRlZihbJDFdLCBbJDJdKWRubAotbTRfaWYobTRfZXZhbChbJDMgPiAkMl0pLCAxLAotICAgICAgW19tNF9mb3IoWyQxXSwgWyQzXSwgbTRfZGVmYXVsdChbJDRdLCAxKSwgWyQ1XSldLAotICAgICAgW19tNF9mb3IoWyQxXSwgWyQzXSwgbTRfZGVmYXVsdChbJDRdLCAtMSksIFskNV0pXSlkbmwKLW00X3BvcGRlZihbJDFdKV0pCitbbTRfcHVzaGRlZihbJDFdLCBtNF9ldmFsKFskMl0pKV1kbmwKK1ttNF9jb25kKFttNF9ldmFsKChbJDNdKSA+IChbJDJdKSldLCAxLAorCSAgIFttNF9wdXNoZGVmKFtfbTRfc3RlcF0sIG00X2V2YWwobTRfZGVmYXVsdF9xdW90ZWQoWyQ0XSwKKwkgICAgICAxKSkpbTRfYXNzZXJ0KF9tNF9zdGVwID4gMClfJDAoX200X2RlZm4oWyQxXSksCisgIG00X2V2YWwoKChbJDNdKSAtIChbJDJdKSkgLyBfbTRfc3RlcCAqIF9tNF9zdGVwICsgKFskMl0pKSwgX200X3N0ZXAsXSwKKwkgW200X2V2YWwoKFskM10pIDwgKFskMl0pKV0sIDEsCisJICAgW200X3B1c2hkZWYoW19tNF9zdGVwXSwgbTRfZXZhbChtNF9kZWZhdWx0X3F1b3RlZChbJDRdLAorCSAgICAgIC0xKSkpbTRfYXNzZXJ0KF9tNF9zdGVwIDwgMClfJDAoX200X2RlZm4oWyQxXSksCisgIG00X2V2YWwoKChbJDJdKSAtIChbJDNdKSkgLyAtKF9tNF9zdGVwKSAqIF9tNF9zdGVwICsgKFskMl0pKSwgX200X3N0ZXAsXSwKKwkgW200X3B1c2hkZWYoW19tNF9zdGVwXSlfJDAoX200X2RlZm4oWyQxXSksIF9tNF9kZWZuKFskMV0pLCAwLF0pXWRubAorW1ttNF9kZWZpbmUoWyQxXSxdLCBbKSQ1XSltNF9wb3BkZWYoW19tNF9zdGVwXSwgWyQxXSldKQogCi0KLSMgX200X2ZvcihWQVJJQUJMRSwgRklSU1QsIExBU1QsIFNURVAsIEVYUFJFU1NJT04pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDb3JlIG9mIHRoZSBsb29wLCBubyBjb25zaXN0ZW5jeSBjaGVja3MuCisjIF9tNF9mb3IoQ09VTlQsIExBU1QsIFNURVAsIFBSRSwgUE9TVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb3JlIG9mIHRoZSBsb29wLCBubyBjb25zaXN0ZW5jeSBjaGVja3MsIGFsbCBhcmd1bWVudHMgYXJlIHBsYWluCisjIG51bWJlcnMuICBFeHBhbmQgUFJFW0NPVU5UXVBPU1QsIHRoZW4gYWx0ZXIgQ09VTlQgYnkgU1RFUCBhbmQKKyMgaXRlcmF0ZSBpZiBDT1VOVCBpcyBub3QgTEFTVC4KIG00X2RlZmluZShbX200X2Zvcl0sCi1bJDRbXWRubAotbTRfaWYoJDEsIFskMl0sIFtdLAotICAgICAgW200X2RlZmluZShbJDFdLCBtNF9ldmFsKCQxK1skM10pKV9tNF9mb3IoWyQxXSwgWyQyXSwgWyQzXSwgWyQ0XSldKV0pCitbJDRbJDFdJDVbXW00X2lmKFskMV0sIFskMl0sIFtdLAorCQkgWyQwKG00X2V2YWwoWyQxICsgJDNdKSwgWyQyXSwgWyQzXSwgWyQ0XSwgWyQ1XSldKV0pCiAKIAogIyBJbXBsZW1lbnRpbmcgYGZvcmVhY2gnIGxvb3BzIGluIG00IGlzIG11Y2ggbW9yZSB0cmlja3kgdGhhbiBpdCBtYXkKLSMgc2VlbS4gIEFjdHVhbGx5LCB0aGUgZXhhbXBsZSBvZiBhIGBmb3JlYWNoJyBsb29wIGluIHRoZSBtNAotIyBkb2N1bWVudGF0aW9uIGlzIHdyb25nOiBpdCBkb2VzIG5vdCBxdW90ZSB0aGUgYXJndW1lbnRzIHByb3Blcmx5LAotIyB3aGljaCBsZWFkcyB0byB1bmRlc2lyYWJsZSBleHBhbnNpb25zLgotIwotIyBUaGUgZXhhbXBsZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBpczoKKyMgc2VlbS4gIEZvciBleGFtcGxlLCB0aGUgb2xkIE00IDEuNC40IG1hbnVhbCBoYWQgYW4gaW5jb3JyZWN0IGV4YW1wbGUsCisjIHdoaWNoIGxvb2tlZCBsaWtlIHRoaXMgKHdoZW4gdHJhbnNsYXRlZCB0byBtNHN1Z2FyKToKICMKICMgfCAjIGZvcmVhY2goVkFSLCAoTElTVCksIFNUTVQpCiAjIHwgbTRfZGVmaW5lKFtmb3JlYWNoXSwKLSMgfCAgICAgICAgW200X3B1c2hkZWYoWyQxXSlfZm9yZWFjaChbJDFdLCBbJDJdLCBbJDNdKW00X3BvcGRlZihbJDFdKV0pCisjIHwgICBbbTRfcHVzaGRlZihbJDFdKV9mb3JlYWNoKFskMV0sIFskMl0sIFskM10pbTRfcG9wZGVmKFskMV0pXSkKICMgfCBtNF9kZWZpbmUoW19hcmcxXSwgWyQxXSkKICMgfCBtNF9kZWZpbmUoW19mb3JlYWNoXSwKLSMgfAkgICAgICAgW200X2lmKFskMl0sIFsoKV0sICwKLSMgfAkJICAgICBbbTRfZGVmaW5lKFskMV0sIF9hcmcxJDIpJDNbXV9mb3JlYWNoKFskMV0sCi0jIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaGlmdCQyKSwKLSMgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyQzXSldKV0pCisjIHwgICBbbTRfaWYoWyQyXSwgWygpXSwgLAorIyB8ICAgICBbbTRfZGVmaW5lKFskMV0sIF9hcmcxJDIpJDNbXV9mb3JlYWNoKFskMV0sIChtNF9zaGlmdCQyKSwgWyQzXSldKV0pCiAjCiAjIEJ1dCB0aGVuIGlmIHlvdSBydW4KICMKQEAgLTYzMyw5ICsxMDgwLDcgQEAKICMgfCBtNF9kZWZpbmUoW19hcmcxXSwgW1skMV1dKQogIyB8IG00X2RlZmluZShbX2ZvcmVhY2hdLAogIyB8ICBbbTRfaWYoJDIsIFsoKV0sICwKLSMgfAkgICAgIFttNF9kZWZpbmUoWyQxXSwgW19hcmcxJDJdKSQzW11fZm9yZWFjaChbJDFdLAotIyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoc2hpZnQkMildLAotIyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFskM10pXSldKQorIyB8ICAgIFttNF9kZWZpbmUoWyQxXSwgW19hcmcxJDJdKSQzW11fZm9yZWFjaChbJDFdLCBbKG00X3NoaWZ0JDIpXSwgWyQzXSldKV0pCiAjCiAjIHdoaWNoIHRoaXMgdGltZSBhbnN3ZXJzCiAjCkBAIC02NTgsMTQgKzExMDMsMjUgQEAKICMgfCBtNF9kZWZpbmUoW19hcmcxXSwgWyQxXSkKICMgfCBtNF9kZWZpbmUoW19mb3JlYWNoXSwKICMgfCAgW200X2lmKCQyLCBbXSwgLAotIyB8CSAgICAgW200X2RlZmluZShbJDFdLCBbX2FyZzEoJDIpXSkkM1tdX2ZvcmVhY2goWyQxXSwKLSMgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaGlmdCgkMildLAotIyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyQzXSldKV0pCisjIHwgICAgW200X2RlZmluZShbJDFdLCBbX2FyZzEoJDIpXSkkM1tdX2ZvcmVhY2goWyQxXSwgW200X3NoaWZ0KCQyKV0sIFskM10pXSldKQogIwogIwogIyBOb3csIGp1c3QgcmVwbGFjZSB0aGUgYCQyJyB3aXRoIGBtNF9xdW90ZSgkMiknIGluIHRoZSBvdXRlciBgbTRfaWYnCi0jIHRvIGltcHJvdmUgcm9idXN0bmVzcywgYW5kIHlvdSBjb21lIHVwIHdpdGggYSBxdWl0ZSBzYXRpc2ZhY3RvcnkKLSMgaW1wbGVtZW50YXRpb24uCisjIHRvIGltcHJvdmUgcm9idXN0bmVzcywgYW5kIHlvdSBjb21lIHVwIHdpdGggYSBuaWNlIGltcGxlbWVudGF0aW9uCisjIHRoYXQgZG9lc24ndCByZXF1aXJlIGV4dHJhIHBhcmVudGhlc2VzIGluIHRoZSB1c2VyJ3MgTElTVC4KKyMKKyMgQnV0IHdhaXQgLSAgbm93IHRoZSBhbGdvcml0aG0gaXMgcXVhZHJhdGljLCBiZWNhdXNlIGV2ZXJ5IHJlY3Vyc2lvbiBvZgorIyB0aGUgYWxnb3JpdGhtIGtlZXBzIHRoZSBlbnRpcmUgTElTVCBhbmQgbWVyZWx5IGFkZHMgYW5vdGhlciBtNF9zaGlmdCB0bworIyB0aGUgcXVvdGVkIHRleHQuICBJZiB0aGUgdXNlciBoYXMgYSBsb3Qgb2YgZWxlbWVudHMgaW4gTElTVCwgeW91IGNhbgorIyBicmluZyB0aGUgc3lzdGVtIHRvIGl0cyBrbmVlcyB3aXRoIHRoZSBtZW1vcnkgbTQgdGhlbiByZXF1aXJlcywgb3IgdHJpcAorIyB0aGUgbTQgLS1uZXN0aW5nLWxpbWl0IHJlY3Vyc2lvbiBmYWN0b3IuICBUaGUgb25seSB3YXkgdG8gYXZvaWQKKyMgcXVhZHJhdGljIGdyb3d0aCBpcyBlbnN1cmUgbTRfc2hpZnQgaXMgZXhwYW5kZWQgcHJpb3IgdG8gdGhlIHJlY3Vyc2lvbi4KKyMgSGVuY2UgdGhlIGRlc2lnbiBiZWxvdy4KKyMKKyMgVGhlIE00IG1hbnVhbCBub3cgaW5jbHVkZXMgYSBjaGFwdGVyIGRldm90ZWQgdG8gdGhpcyBpc3N1ZSwgd2l0aAorIyB0aGUgbGVzc29ucyBsZWFybmVkIGZyb20gbTRzdWdhci4gIEFuZCBzdGlsbCwgdGhpcyBkZXNpZ24gaXMgb25seQorIyBvcHRpbWFsIGZvciBNNCAxLjY7IHNlZSBmb3JlYWNoLm00IGZvciB5ZXQgbW9yZSBjb21tZW50cyBvbiB3aHkKKyMgTTQgMS40LnggdXNlcyB5ZXQgYW5vdGhlciBpbXBsZW1lbnRhdGlvbi4KIAogCiAjIG00X2ZvcmVhY2goVkFSSUFCTEUsIExJU1QsIEVYUFJFU1NJT04pCkBAIC02ODYsMTkgKzExNDIsMzYgQEAKICMKICMgICAgICB8IG00X2ZvcmVhY2goVmFyLCBbW1thY3RpdmVdXSwgW1thY3RpdmVdXV0sIFstVmFyLV0pCiAjICAgICA9PiAtYWN0aXZlLS1hY3RpdmUtCisjCisjIFRoaXMgbWFjcm8gaXMgY2FsbGVkIGZyZXF1ZW50bHksIHNvIGF2b2lkIGV4dHJhIGV4cGFuc2lvbnMgc3VjaCBhcworIyBtNF9pZnZhbCBhbmQgZG5sLiAgQWxzbywgc2luY2UgJDIgbWlnaHQgYmUgcXVpdGUgbGFyZ2UsIHRyeSB0byB1c2UgaXQKKyMgYXMgbGl0dGxlIGFzIHBvc3NpYmxlIGluIF9tNF9mb3JlYWNoOyBlYWNoIGV4dHJhIHVzZSByZXF1aXJlcyB0aGF0IG11Y2gKKyMgbW9yZSBtZW1vcnkgZm9yIGV4cGFuc2lvbi4gIFNvLCByYXRoZXIgdGhhbiBkaXJlY3RseSBjb21wYXJlICQyIGFnYWluc3QKKyMgW10gYW5kIHVzZSBtNF9jYXIvbTRfY2RyIGZvciByZWN1cnNpb24sIHdlIGluc3RlYWQgdW5ib3ggdGhlIGxpc3QgKHdoaWNoCisjIHJlcXVpcmVzIHN3YXBwaW5nIHRoZSBhcmd1bWVudCBvcmRlciBpbiB0aGUgaGVscGVyKSwgaW5zZXJ0IGFuIGlnbm9yZWQKKyMgdGhpcmQgYXJndW1lbnQsIGFuZCB1c2UgbTRfc2hpZnQzIHRvIGRldGVjdCB3aGVuIHJlY3Vyc2lvbiBpcyBjb21wbGV0ZSwKKyMgYXQgd2hpY2ggcG9pbnQgdGhpcyBsb29rcyB2ZXJ5IG11Y2ggbGlrZSBtNF9tYXBfYXJncy4KIG00X2RlZmluZShbbTRfZm9yZWFjaF0sCi1bbTRfcHVzaGRlZihbJDFdKV9tNF9mb3JlYWNoKCRAKW00X3BvcGRlZihbJDFdKV0pCitbbTRfaWYoWyQyXSwgW10sIFtdLAorICAgICAgIFttNF9wdXNoZGVmKFskMV0pXyQwKFttNF9kZWZpbmUoWyQxXSxdLCBbKSQzXSwgW10sCisgICQyKW00X3BvcGRlZihbJDFdKV0pXSkKIAorIyBfbTRfZm9yZWFjaChQUkUsIFBPU1QsIElHTk9SRUQsIEFSRy4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZvcm0gdGhlIGNvbW1vbiBiYXNpcyBvZiB0aGUgbTRfZm9yZWFjaCBhbmQgbTRfbWFwIG1hY3Jvcy4gIEZvciBlYWNoCisjIEFSRywgZXhwYW5kIFBSRVtBUkddUE9TVFtdLiAgVGhlIElHTk9SRUQgYXJndW1lbnQgbWFrZXMgcmVjdXJzaW9uCisjIGVhc2llciwgYW5kIG11c3QgYmUgc3VwcGxpZWQgcmF0aGVyIHRoYW4gaW1wbGljaXQuCisjCisjIFBsZWFzZSBrZWVwIGZvcmVhY2gubTQgaW4gc3luYyB3aXRoIGFueSBhZGp1c3RtZW50cyBtYWRlIGhlcmUuCiBtNF9kZWZpbmUoW19tNF9mb3JlYWNoXSwKLVttNF9pZnZhbChbJDJdLAotCSAgW200X2RlZmluZShbJDFdLCBtNF9jYXIoJDIpKSQzW11kbmwKLV9tNF9mb3JlYWNoKFskMV0sIG00X2NkcigkMiksIFskM10pXSldKQorW200X2lmKFskI10sIFszXSwgW10sCisgICAgICAgWyQxWyQ0XSQyW10kMChbJDFdLCBbJDJdLCBtNF9zaGlmdDMoJEApKV0pXSkKIAogCiAjIG00X2ZvcmVhY2hfdyhWQVJJQUJMRSwgTElTVCwgRVhQUkVTU0lPTikKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIwotIyBMaWtlIG00X2ZvcmVhY2gsIGJ1dCB0aGUgbGlzdCBpcyB3aGl0ZXNwYWNlIHNlcGFyYXRlZC4KKyMgTGlrZSBtNF9mb3JlYWNoLCBidXQgdGhlIGxpc3QgaXMgd2hpdGVzcGFjZSBzZXBhcmF0ZWQuICBEZXBlbmRpbmcgb24KKyMgRVhQUkVTU0lPTiwgaXQgbWF5IGJlIG1vcmUgZWZmaWNpZW50IHRvIHVzZSBtNF9tYXBfYXJnc193LgogIwogIyBUaGlzIG1hY3JvIGlzIHJvYnVzdCB0byBhY3RpdmUgc3ltYm9sczoKICMgICAgbTRfZm9yZWFjaF93KFtWYXJdLCBbIGFjdGl2ZQpAQCAtNzA2LDU0ICsxMTc5LDI1OCBAQAogIyAgICBpdmUgIF0sIFstVmFyLV0pZW5kCiAjICAgID0+IC1hY3RpdmUtLWItLWFjdGl2ZS1lbmQKICMKKyMgVGhpcyB1c2VkIHRvIHVzZSBhIHNsb3dlciBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBtNF9mb3JlYWNoOgorIyAgIG00X2ZvcmVhY2goWyQxXSwgbTRfc3BsaXQobTRfbm9ybWFsaXplKFskMl0pLCBbIF0pLCBbJDNdKQogbTRfZGVmaW5lKFttNF9mb3JlYWNoX3ddLAotW200X2ZvcmVhY2goWyQxXSwgbTRfc3BsaXQobTRfbm9ybWFsaXplKFskMl0pKSwgWyQzXSldKQorW200X3B1c2hkZWYoWyQxXSltNF9tYXBfYXJnc193KFskMl0sCisgIFttNF9kZWZpbmUoWyQxXSxdLCBbKSQzXSltNF9wb3BkZWYoWyQxXSldKQorCisKKyMgbTRfbWFwKE1BQ1JPLCBMSVNUKQorIyBtNF9tYXBhbGwoTUFDUk8sIExJU1QpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSW52b2tlIE1BQ1JPKCQxKSwgTUFDUk8oJDIpIGV0Yy4gd2hlcmUgJDEsICQyLi4uIGFyZSB0aGUgZWxlbWVudHMgb2YKKyMgTElTVC4gICQxLCAkMi4uLiBtdXN0IGluIHR1cm4gYmUgbGlzdHMsIGFwcHJvcHJpYXRlIGZvciBtNF9hcHBseS4KKyMgSWYgTElTVCBjb250YWlucyBhbiBlbXB0eSBzdWJsaXN0LCBtNF9tYXAgc2tpcHMgdGhlIGV4cGFuc2lvbiBvZgorIyBNQUNSTywgd2hpbGUgbTRfbWFwYWxsIGV4cGFuZHMgTUFDUk8gd2l0aCBubyBhcmd1bWVudHMuCisjCisjIFNpbmNlIExJU1QgbWF5IGJlIHF1aXRlIGxhcmdlLCB3ZSB3YW50IHRvIG1pbmltaXplIGhvdyBvZnRlbiBpdAorIyBhcHBlYXJzIGluIHRoZSBleHBhbnNpb24uICBSYXRoZXIgdGhhbiB1c2UgbTRfY2FyL200X2NkciBpdGVyYXRpb24sCisjIHdlIHVuYm94IHRoZSBsaXN0LCBhbmQgdXNlIF9tNF9mb3JlYWNoIGZvciBpdGVyYXRpb24uICBGb3IgbTRfbWFwLAorIyBhbiBlbXB0eSBsaXN0IGJlaGF2ZXMgbGlrZSBhbiBlbXB0eSBzdWJsaXN0IGFuZCBnZXRzIGlnbm9yZWQ7IGZvcgorIyBtNF9tYXBhbGwsIHdlIG11c3Qgc3BlY2lhbC1jYXNlIHRoZSBlbXB0eSBsaXN0LgorbTRfZGVmaW5lKFttNF9tYXBdLAorW19tNF9mb3JlYWNoKFtfbTRfYXBwbHkoWyQxXSxdLCBbKV0sIFtdLCAkMildKQorCittNF9kZWZpbmUoW200X21hcGFsbF0sCitbbTRfaWYoWyQyXSwgW10sIFtdLAorICAgICAgIFtfbTRfZm9yZWFjaChbbTRfYXBwbHkoWyQxXSxdLCBbKV0sIFtdLCAkMildKV0pCisKKworIyBtNF9tYXBfc2VwKE1BQ1JPLCBbU0VQQVJBVE9SXSwgTElTVCkKKyMgbTRfbWFwYWxsX3NlcChNQUNSTywgW1NFUEFSQVRPUl0sIExJU1QpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJbnZva2UgTUFDUk8oJDEpLCBTRVBBUkFUT1IsIE1BQ1JPKCQyKSwgLi4uLCBNQUNSTygkTikgd2hlcmUgJDEsCisjICQyLi4uICROIGFyZSB0aGUgZWxlbWVudHMgb2YgTElTVCwgYW5kIGFyZSBpbiB0dXJuIGxpc3RzIGFwcHJvcHJpYXRlCisjIGZvciBtNF9hcHBseS4gIFNFUEFSQVRPUiBpcyBleHBhbmRlZCwgaW4gb3JkZXIgdG8gYWxsb3cgdGhlIGNyZWF0aW9uCisjIG9mIGEgbGlzdCBvZiBhcmd1bWVudHMgYnkgdXNpbmcgYSBzaW5nbGUtcXVvdGVkIGNvbW1hIGFzIHRoZQorIyBzZXBhcmF0b3IuICBGb3IgZWFjaCBlbXB0eSBzdWJsaXN0LCBtNF9tYXBfc2VwIHNraXBzIHRoZSBleHBhbnNpb24KKyMgb2YgTUFDUk8gYW5kIFNFUEFSQVRPUiwgd2hpbGUgbTRfbWFwYWxsX3NlcCBleHBhbmRzIE1BQ1JPIHdpdGggbm8KKyMgYXJndW1lbnRzLgorIworIyBGb3IgbTRfbWFwYWxsX3NlcCwgbWVyZWx5IGV4cGFuZCB0aGUgZmlyc3QgaXRlcmF0aW9uIHdpdGhvdXQgdGhlCisjIHNlcGFyYXRvciwgdGhlbiBpbmNsdWRlIHNlcGFyYXRvciBhcyBwYXJ0IG9mIHN1YnNlcXVlbnQgcmVjdXJzaW9uOworIyBidXQgYXZvaWQgZXh0cmEgZXhwYW5zaW9uIG9mIExJU1QncyBzaWRlLWVmZmVjdHMgdmlhIGEgaGVscGVyIG1hY3JvLgorIyBGb3IgbTRfbWFwX3NlcCwgdGhpbmdzIGFyZSB0cmlja2llciAtIHdlIGRvbid0IGtub3cgaWYgdGhlIGZpcnN0CisjIGxpc3QgZWxlbWVudCBpcyBhbiBlbXB0eSBzdWJsaXN0LCBzbyB3ZSBtdXN0IGRlZmluZSBhIHNlbGYtbW9kaWZ5aW5nCisjIGhlbHBlciBtYWNybyBhbmQgdXNlIHRoYXQgYXMgdGhlIHNlcGFyYXRvciBpbnN0ZWFkLgorbTRfZGVmaW5lKFttNF9tYXBfc2VwXSwKK1ttNF9wdXNoZGVmKFttNF9TZXBdLCBbbTRfZGVmaW5lKFttNF9TZXBdLCBfbTRfZGVmbihbbTRfdW5xdW90ZV0pKV0pXWRubAorW19tNF9mb3JlYWNoKFtfbTRfYXBwbHkoW200X1NlcChbJDJdKVtdJDFdLF0sIFspXSwgW10sICQzKW00X3BvcGRlZihbbTRfU2VwXSldKQorCittNF9kZWZpbmUoW200X21hcGFsbF9zZXBdLAorW200X2lmKFskM10sIFtdLCBbXSwgW18kMChbJDFdLCBbJDJdLCAkMyldKV0pCisKK200X2RlZmluZShbX200X21hcGFsbF9zZXBdLAorW200X2FwcGx5KFskMV0sIFskM10pX200X2ZvcmVhY2goW200X2FwcGx5KFskMltdJDFdLF0sIFspXSwgbTRfc2hpZnQyKCRAKSldKQorCisjIG00X21hcF9hcmdzKEVYUFJFU1NJT04sIEFSRy4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeHBhbmQgRVhQUkVTU0lPTihbQVJHXSkgZm9yIGVhY2ggYXJndW1lbnQuICBNb3JlIGVmZmljaWVudCB0aGFuCisjICAgbTRfZm9yZWFjaChbdmFyXSwgW0FSRy4uLl0sIFtFWFBSRVNTSU9OKG00X2RlZm4oW3Zhcl0pKV0pCisjIFNob3J0aGFuZCBmb3IgbTRfbWFwX2FyZ3Nfc2VwKFtFWFBSRVNTSU9OKF0sIFspXSwgW10sIEFSRy4uLikuCittNF9kZWZpbmUoW200X21hcF9hcmdzXSwKK1ttNF9pZihbJCNdLCBbMF0sIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkI10pXSwKKyAgICAgICBbJCNdLCBbMV0sIFtdLAorICAgICAgIFskI10sIFsyXSwgWyQxKFskMl0pW11dLAorICAgICAgIFtfbTRfZm9yZWFjaChbJDEoXSwgWyldLCAkQCldKV0pCisKKworIyBtNF9tYXBfYXJnc19wYWlyKEVYUFJFU1NJT04sIFtFTkQtRVhQUiA9IEVYUFJFU1NJT05dLCBBUkcuLi4pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGVyZm9ybSBhIHBhaXJ3aXNlIGdyb3VwaW5nIG9mIGNvbnNlY3V0aXZlIEFSR3MsIGJ5IGV4cGFuZGluZworIyBFWFBSRVNTSU9OKFtBUkcxXSwgW0FSRzJdKS4gIElmIHRoZXJlIGFyZSBhbiBvZGQgbnVtYmVyIG9mIEFSR3MsIHRoZQorIyBmaW5hbCBhcmd1bWVudCBpcyBleHBhbmRlZCB3aXRoIEVORC1FWFBSKFtBUkduXSkuCisjCisjIEZvciBleGFtcGxlOgorIyAgIG00X2RlZmluZShbc2hvd10sIFsoJCopbTRfbmV3bGluZV0pZG5sCisjICAgbTRfbWFwX2FyZ3NfcGFpcihbc2hvd10sIFtdLCBbYV0sIFtiXSwgW2NdLCBbZF0sIFtlXSlkbmwKKyMgICA9PiAoYSxiKQorIyAgID0+IChjLGQpCisjICAgPT4gKGUpCisjCisjIFBsZWFzZSBrZWVwIGZvcmVhY2gubTQgaW4gc3luYyB3aXRoIGFueSBhZGp1c3RtZW50cyBtYWRlIGhlcmUuCittNF9kZWZpbmUoW200X21hcF9hcmdzX3BhaXJdLAorW200X2lmKFskI10sIFswXSwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjXSldLAorICAgICAgIFskI10sIFsxXSwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjOiAkMV0pXSwKKyAgICAgICBbJCNdLCBbMl0sIFtdLAorICAgICAgIFskI10sIFszXSwgW200X2RlZmF1bHQoWyQyXSwgWyQxXSkoWyQzXSlbXV0sCisgICAgICAgWyQjXSwgWzRdLCBbJDEoWyQzXSwgWyQ0XSlbXV0sCisgICAgICAgWyQxKFskM10sIFskNF0pW10kMChbJDFdLCBbJDJdLCBtNF9zaGlmdChtNF9zaGlmdDMoJEApKSldKV0pCisKKworIyBtNF9tYXBfYXJnc19zZXAoW1BSRV0sIFtQT1NUXSwgW1NFUF0sIEFSRy4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4cGFuZCBQUkVbQVJHXVBPU1QgZm9yIGVhY2ggYXJndW1lbnQsIHdpdGggU0VQIGJldHdlZW4gYXJndW1lbnRzLgorbTRfZGVmaW5lKFttNF9tYXBfYXJnc19zZXBdLAorW200X2lmKFskI10sIFswXSwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjXSldLAorICAgICAgIFskI10sIFsxXSwgW10sCisgICAgICAgWyQjXSwgWzJdLCBbXSwKKyAgICAgICBbJCNdLCBbM10sIFtdLAorICAgICAgIFskI10sIFs0XSwgWyQxWyQ0XSQyW11dLAorICAgICAgIFskMVskNF0kMltdX200X2ZvcmVhY2goWyQzW10kMV0sIFskMl0sIG00X3NoaWZ0MygkQCkpXSldKQorCisKKyMgbTRfbWFwX2FyZ3NfdyhTVFJJTkcsIFtQUkVdLCBbUE9TVF0sIFtTRVBdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gdGhlIGV4cGFuc2lvbiBvZiBQUkVbd29yZF1QT1NUW10gZm9yIGVhY2ggd29yZCBpbiBTVFJJTkcKKyMgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuICBNb3JlIGVmZmljaWVudCB0aGFuOgorIyAgIG00X2ZvcmVhY2hfdyhbdmFyXSwgW1NUUklOR10sIFtQUkVbXW00X2RlZm4oW3Zhcl0pUE9TVF0pCisjIEFkZGl0aW9uYWxseSwgZXhwYW5kIFNFUCBiZXR3ZWVuIHdvcmRzLgorIworIyBBcyBsb25nIGFzIHdlIGhhdmUgdG8gdXNlIG00X2JwYXRzdWJzdCB0byBzcGxpdCB0aGUgc3RyaW5nLCB3ZSBtaWdodAorIyBhcyB3ZWxsIG1ha2UgaXQgYWxzbyBhcHBseSBQUkUgYW5kIFBPU1Q7IHRoaXMgYXZvaWRzIGl0ZXJhdGlvbgorIyBhbHRvZ2V0aGVyLiAgQnV0IHdlIG11c3QgYmUgY2FyZWZ1bCBvZiBhbnkgXCBpbiBQUkUgb3IgUE9TVC4KKyMgX200X3N0cmlwIHJldHVybnMgYSBxdW90ZWQgc3RyaW5nLCBidXQgdGhhdCdzIG9rYXksIHNpbmNlIGl0IGFsc28KKyMgc3VwcGxpZXMgYW4gZW1wdHkgbGVhZGluZyBhbmQgdHJhaWxpbmcgYXJndW1lbnQgZHVlIHRvIG91cgorIyBpbnRlbnRpb25hbCB3aGl0ZXNwYWNlIGFyb3VuZCBTVFJJTkcuICBXZSB1c2UgbTRfc3Vic3RyIHRvIHN0cmlwIHRoZQorIyBlbXB0eSBlbGVtZW50cyBhbmQgcmVtb3ZlIHRoZSBleHRyYSBsYXllciBvZiBxdW90aW5nLgorbTRfZGVmaW5lKFttNF9tYXBfYXJnc193XSwKK1tfJDAoX200X3NwbGl0KFsgXW00X2ZsYXR0ZW4oWyQxXSlbIF0sIFtbCSBdK10sCisJICAgICAgIG00X2lmKG00X2luZGV4KFskMiQzJDRdLCBbXF0pLCBbLTFdLCBbWyQzW10kNFtdJDJdXSwKKwkJICAgICBbbTRfYnBhdHN1YnN0KFtbJDNbXSQ0W10kMl1dLCBbXFxdLCBbXFxcXF0pXSkpLAorICAgICBtNF9sZW4oW1tdJDNbXSQ0XSksIG00X2xlbihbJDRbXSQyW11dKSldKQorCittNF9kZWZpbmUoW19tNF9tYXBfYXJnc193XSwKK1ttNF9zdWJzdHIoWyQxXSwgWyQyXSwgbTRfZXZhbChtNF9sZW4oWyQxXSkgLSBbJDJdIC0gWyQzXSkpXSkKKworCisjIG00X3N0YWNrX2ZvcmVhY2goTUFDUk8sIEZVTkMpCisjIG00X3N0YWNrX2ZvcmVhY2hfbGlmbyhNQUNSTywgRlVOQykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQYXNzIGVhY2ggc3RhY2tlZCBkZWZpbml0aW9uIG9mIE1BQ1JPIHRvIHRoZSBvbmUtYXJndW1lbnQgbWFjcm8gRlVOQy4KKyMgbTRfc3RhY2tfZm9yZWFjaCBwcm9jZWVkcyBpbiBGSUZPIG9yZGVyLCB3aGlsZSBtNF9zdGFja19mb3JlYWNoX2xpZm8KKyMgcHJvY2Vzc2VzIHRoZSB0b3Btb3N0IGRlZmluaXRpb25zIGZpcnN0LiAgSW4gYWRkaXRpb24sIEZVTkMgc2hvdWxkCisjIG5vdCBwdXNoIG9yIHBvcCBkZWZpbml0aW9ucyBvZiBNQUNSTywgYW5kIHNob3VsZCBub3QgZXhwZWN0IGFueXRoaW5nIGFib3V0CisjIHRoZSBhY3RpdmUgZGVmaW5pdGlvbiBvZiBNQUNSTyAoaXQgd2lsbCBub3QgYmUgdGhlIHRvcG1vc3QsIGFuZCBtYXkgbm90CisjIGJlIHRoZSBvbmUgcGFzc2VkIHRvIEZVTkMgZWl0aGVyKS4KKyMKKyMgU29tZSBtYWNyb3Mgc2ltcGx5IGNhbid0IGJlIGV4YW1pbmVkIHdpdGggdGhpcyBtZXRob2Q6IG5hbWVseSwKKyMgYW55dGhpbmcgaW52b2x2ZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIF9tNF9zdGFja19yZXZlcnNlLgorbTRfZGVmaW5lKFttNF9zdGFja19mb3JlYWNoXSwKK1tfbTRfc3RhY2tfcmV2ZXJzZShbJDFdLCBbbTRfdG1wLSQxXSldZG5sCitbX200X3N0YWNrX3JldmVyc2UoW200X3RtcC0kMV0sIFskMV0sIFskMihfbTRfZGVmbihbbTRfdG1wLSQxXSkpXSldKQorCittNF9kZWZpbmUoW200X3N0YWNrX2ZvcmVhY2hfbGlmb10sCitbX200X3N0YWNrX3JldmVyc2UoWyQxXSwgW200X3RtcC0kMV0sIFskMihfbTRfZGVmbihbbTRfdG1wLSQxXSkpXSldZG5sCitbX200X3N0YWNrX3JldmVyc2UoW200X3RtcC0kMV0sIFskMV0pXSkKKworIyBtNF9zdGFja19mb3JlYWNoX3NlcChNQUNSTywgW1BSRV0sIFtQT1NUXSwgW1NFUF0pCisjIG00X3N0YWNrX2ZvcmVhY2hfc2VwX2xpZm8oTUFDUk8sIFtQUkVdLCBbUE9TVF0sIFtTRVBdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2ltaWxhciB0byBtNF9zdGFja19mb3JlYWNoIGFuZCBtNF9zdGFja19mb3JlYWNoX2xpZm8sIGluIHRoYXQgZXZlcnkKKyMgZGVmaW5pdGlvbiBvZiBhIHB1c2hkZWYgc3RhY2sgd2lsbCBiZSB2aXNpdGVkLiAgQnV0IHJhdGhlciB0aGFuCisjIHBhc3NpbmcgdGhlIGRlZmluaXRpb24gYXMgYSBzaW5nbGUgYXJndW1lbnQgdG8gYSBtYWNybywgdGhpcyB2YXJpYW50CisjIGV4cGFuZHMgdGhlIGNvbmNhdGVuYXRpb24gb2YgUFJFW11kZWZpbml0aW9uW11QT1NULCBhbmQgZXhwYW5kcyBTRVAKKyMgYmV0d2VlbiBjb25zZWN1dGl2ZSBleHBhbnNpb25zLiAgTm90ZSB0aGF0IG00X3N0YWNrX2ZvcmVhY2goW2FdLCBbYl0pCisjIGlzIGVxdWl2YWxlbnQgdG8gbTRfc3RhY2tfZm9yZWFjaF9zZXAoW2FdLCBbYihdLCBbKV0pLgorbTRfZGVmaW5lKFttNF9zdGFja19mb3JlYWNoX3NlcF0sCitbX200X3N0YWNrX3JldmVyc2UoWyQxXSwgW200X3RtcC0kMV0pXWRubAorW19tNF9zdGFja19yZXZlcnNlKFttNF90bXAtJDFdLCBbJDFdLCBbJDJbXV9tNF9kZWZuKFttNF90bXAtJDFdKSQzXSwgWyQ0W11dKV0pCisKK200X2RlZmluZShbbTRfc3RhY2tfZm9yZWFjaF9zZXBfbGlmb10sCitbX200X3N0YWNrX3JldmVyc2UoWyQxXSwgW200X3RtcC0kMV0sIFskMltdX200X2RlZm4oW200X3RtcC0kMV0pJDNdLCBbJDRbXV0pXWRubAorW19tNF9zdGFja19yZXZlcnNlKFttNF90bXAtJDFdLCBbJDFdKV0pCisKKworIyBfbTRfc3RhY2tfcmV2ZXJzZShPTEQsIE5FVywgW0FDVElPTl0sIFtTRVBdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBIHJlY3Vyc2l2ZSB3b3JrZXIgZm9yIHB1c2hkZWYgc3RhY2sgbWFuaXB1bGF0aW9uLiAgRGVzdHJ1Y3RpdmVseQorIyBjb3B5IHRoZSBPTEQgc3RhY2sgaW50byB0aGUgTkVXLCBhbmQgZXhwYW5kaW5nIEFDVElPTiBmb3IgZWFjaAorIyBpdGVyYXRpb24uICBBZnRlciB0aGUgZmlyc3QgaXRlcmF0aW9uLCBTRVAgaXMgcHJvbW90ZWQgdG8gdGhlIGZyb250CisjIG9mIEFDVElPTiAobm90ZSB0aGF0IFNFUCBzaG91bGQgaW5jbHVkZSBhIHRyYWlsaW5nIFtdIGlmIGl0IGlzIHRvCisjIGF2b2lkIGludGVyZmVyaW5nIHdpdGggQUNUSU9OKS4gIFRoZSBjdXJyZW50IGRlZmluaXRpb24gaXMgZXhhbWluZWQKKyMgYWZ0ZXIgdGhlIE5FVyBoYXMgYmVlbiBwdXNoZWQgYnV0IGJlZm9yZSBPTEQgaGFzIGJlZW4gcG9wcGVkOyB0aGlzCisjIG9yZGVyIGlzIGltcG9ydGFudCwgYXMgQUNUSU9OIGlzIHBlcm1pdHRlZCB0byBvcGVyYXRlIG9uIGVpdGhlcgorIyBfbTRfZGVmbihbT0xEXSkgb3IgX200X2RlZm4oW05FV10pLiAgU2luY2UgdGhlIG9wZXJhdGlvbiBpcworIyBkZXN0cnVjdGl2ZSwgdGhpcyBtYWNybyBpcyBnZW5lcmFsbHkgdXNlZCB0d2ljZSwgd2l0aCBhIHRlbXBvcmFyeQorIyBtYWNybyBuYW1lIGhvbGRpbmcgdGhlIHN3YXBwZWQgY29weS4KK200X2RlZmluZShbX200X3N0YWNrX3JldmVyc2VdLAorW200X2lmZGVmKFskMV0sIFttNF9wdXNoZGVmKFskMl0sCisgIF9tNF9kZWZuKFskMV0pKSQzW11fbTRfcG9wZGVmKFskMV0pJDAoWyQxXSwgWyQyXSwgWyQ0JDNdKV0pXSkKIAogCiAKICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgOC4gTW9yZSBkaXZlcnNpb24gc3VwcG9ydC4gICMjCisjIyA5LiBNb3JlIGRpdmVyc2lvbiBzdXBwb3J0LiAgIyMKICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogCiAKLSMgX200X2RpdmVydChESVZFUlNJT04tTkFNRSBvciBOVU1CRVIpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBtNF9jbGVhcmRpdmVydChESVZFUlNJT04tTkFNRS4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERpc2NhcmQgYW55IHRleHQgaW4gRElWRVJTSU9OLU5BTUUuCisjCisjIFRoaXMgd29ya3MgZXZlbiBpbnNpZGUgbTRfZXhwYW5kLgorbTRfZGVmaW5lKFttNF9jbGVhcmRpdmVydF0sCitbbTRfaWYoWyQjXSwgWzBdLCBbbTRfZmF0YWwoWyQwOiBtaXNzaW5nIGFyZ3VtZW50XSldLAorICAgICAgIFtfbTRfZGl2ZXJ0X3JhdyhbLTFdKW00X3VuZGl2ZXJ0KCRAKV9tNF9kaXZlcnRfcmF3KAorCSBfbTRfZGl2ZXJ0KF9tNF9kZWZuKFtfbTRfZGl2ZXJ0X2RpdmVyc2lvbl0pLCBbLV0pKV0pXSkKKworCisjIF9tNF9kaXZlcnQoRElWRVJTSU9OLU5BTUUgb3IgTlVNQkVSLCBbTk9XQVJOXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBJZiBESVZFUlNJT04tTkFNRSBpcyB0aGUgbmFtZSBvZiBhIGRpdmVyc2lvbiwgcmV0dXJuIGl0cyBudW1iZXIsCi0jIG90aGVyd2lzZSBpZiBpdCBpcyBhIE5VTUJFUiByZXR1cm4gaXQuCisjIG90aGVyd2lzZSBpZiBpdCBpcyBhIE5VTUJFUiByZXR1cm4gaXQuICBJc3N1ZSBhIHdhcm5pbmcgYWJvdXQKKyMgdGhlIHVzZSBvZiBhIG51bWJlciBpbnN0ZWFkIG9mIGEgbmFtZSwgdW5sZXNzIE5PV0FSTiBpcyBwcm92aWRlZC4KIG00X2RlZmluZShbX200X2RpdmVydF0sCiBbbTRfaWZkZWYoW19tNF9kaXZlcnQoJDEpXSwKIAkgIFttNF9pbmRpcihbX200X2RpdmVydCgkMSldKV0sCi0JICBbJDFdKV0pCisJICBbbTRfaWYoWyQyXSwgW10sIFttNF93YXJuKFtzeW50YXhdLAorCSAgICAgW3ByZWZlciBuYW1lZCBkaXZlcnNpb25zXSldKSQxXSldKQogCiAjIEtJTEwgaXMgb25seSB1c2VkIHRvIHN1cHByZXNzIG91dHB1dC4KIG00X2RlZmluZShbX200X2RpdmVydChLSUxMKV0sICAgICAgICAgICAtMSkKIAorIyBUaGUgZW1wdHkgZGl2ZXJzaW9uIG5hbWUgaXMgYSBzeW5vbnltIGZvciAwLgorbTRfZGVmaW5lKFtfbTRfZGl2ZXJ0KCldLCAgICAgICAgICAgICAgICAwKQogCi0jIF9tNF9kaXZlcnRfbl9zdGFjawotIyAtLS0tLS0tLS0tLS0tLS0tLS0KLSMgUHJpbnQgbTRfZGl2ZXJ0X3N0YWNrIHdpdGggbmV3bGluZSBwcmVwZW5kZWQsIGlmIGl0J3Mgbm9uZW1wdHkuCi1tNF9kZWZpbmUoW19tNF9kaXZlcnRfbl9zdGFja10sCi1bbTRfaWZkZWYoW200X2RpdmVydF9zdGFja10sIFsKLW00X2RlZm4oW200X2RpdmVydF9zdGFja10pXSldKQorCisjIG00X2RpdmVydF9zdGFjaworIyAtLS0tLS0tLS0tLS0tLS0KKyMgUHJpbnQgdGhlIGRpdmVyc2lvbiBzdGFjaywgaWYgaXQncyBub25lbXB0eS4gIFRoZSBjYWxsZXIgaXMKKyMgcmVzcG9uc2libGUgZm9yIGFueSBsZWFkaW5nIG9yIHRyYWlsaW5nIG5ld2xpbmUuCittNF9kZWZpbmUoW200X2RpdmVydF9zdGFja10sCitbbTRfc3RhY2tfZm9yZWFjaF9zZXBfbGlmbyhbX200X2RpdmVydF9zdGFja10sIFtdLCBbXSwgWworXSldKQorCisKKyMgbTRfZGl2ZXJ0X3N0YWNrX3B1c2goTUFDUk8tTkFNRSwgRElWRVJTSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGb3JtIGFuIGVudHJ5IG9mIHRoZSBkaXZlcnNpb24gc3RhY2sgZnJvbSBjYWxsZXIgTUFDUk8tTkFNRSBhbmQKKyMgZW50ZXJpbmcgRElWRVJTSU9OLU5BTUUgYW5kIHB1c2ggaXQuCittNF9kZWZpbmUoW200X2RpdmVydF9zdGFja19wdXNoXSwKK1ttNF9wdXNoZGVmKFtfbTRfZGl2ZXJ0X3N0YWNrXSwgbTRfbG9jYXRpb25bOiAkMTogJDJdKV0pCiAKIAogIyBtNF9kaXZlcnQoRElWRVJTSU9OLU5BTUUpCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgQ2hhbmdlIHRoZSBkaXZlcnNpb24gc3RyZWFtIHRvIERJVkVSU0lPTi1OQU1FLgogbTRfZGVmaW5lKFttNF9kaXZlcnRdLAotW200X2RlZmluZShbbTRfZGl2ZXJ0X3N0YWNrXSwgbTRfbG9jYXRpb25bOiAkMDogJDFdX200X2RpdmVydF9uX3N0YWNrKWRubAotbTRfYnVpbHRpbihbZGl2ZXJ0XSwgX200X2RpdmVydChbJDFdKSlkbmwKLV0pCitbbTRfcG9wZGVmKFtfbTRfZGl2ZXJ0X3N0YWNrXSldZG5sCitbbTRfZGVmaW5lKFtfbTRfZGl2ZXJ0X2RpdmVyc2lvbl0sIFskMV0pXWRubAorW200X2RpdmVydF9zdGFja19wdXNoKFskMF0sIFskMV0pXWRubAorW19tNF9kaXZlcnRfcmF3KF9tNF9kaXZlcnQoWyQxXSkpXSkKIAogCi0jIG00X2RpdmVydF9wdXNoKERJVkVSU0lPTi1OQU1FKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgbTRfZGl2ZXJ0X3B1c2goRElWRVJTSU9OLU5BTUUsIFtOT1dBUk5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIENoYW5nZSB0aGUgZGl2ZXJzaW9uIHN0cmVhbSB0byBESVZFUlNJT04tTkFNRSwgd2hpbGUgc3RhY2tpbmcgb2xkIHZhbHVlcy4KKyMgRm9yIGludGVybmFsIHVzZSBvbmx5OiBpZiBOT1dBUk4gaXMgbm90IGVtcHR5LCBESVZFUlNJT04tTkFNRSBjYW4gYmUgYQorIyBudW1iZXIgaW5zdGVhZCBvZiBhIG5hbWUuCiBtNF9kZWZpbmUoW200X2RpdmVydF9wdXNoXSwKLVttNF9wdXNoZGVmKFttNF9kaXZlcnRfc3RhY2tdLCBtNF9sb2NhdGlvbls6ICQwOiAkMV1fbTRfZGl2ZXJ0X25fc3RhY2spZG5sCi1tNF9wdXNoZGVmKFtfbTRfZGl2ZXJ0X2RpdmVyc2lvbl0sIFskMV0pZG5sCi1tNF9idWlsdGluKFtkaXZlcnRdLCBfbTRfZGl2ZXJ0KFskMV0pKWRubAotXSkKK1ttNF9kaXZlcnRfc3RhY2tfcHVzaChbJDBdLCBbJDFdKV1kbmwKK1ttNF9wdXNoZGVmKFtfbTRfZGl2ZXJ0X2RpdmVyc2lvbl0sIFskMV0pXWRubAorW19tNF9kaXZlcnRfcmF3KF9tNF9kaXZlcnQoWyQxXSwgWyQyXSkpXSkKIAogCiAjIG00X2RpdmVydF9wb3AoW0RJVkVSU0lPTi1OQU1FXSkKQEAgLTc2MiwxOCArMTQzOSwxNCBAQAogIyBJZiBzcGVjaWZpZWQsIHZlcmlmeSB3ZSBsZWZ0IERJVkVSU0lPTi1OQU1FLgogIyBXaGVuIHdlIHBvcCB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSBzdGFjaywgd2UgZGl2ZXJ0IHRvIC0xLgogbTRfZGVmaW5lKFttNF9kaXZlcnRfcG9wXSwKLVttNF9pZm5kZWYoW19tNF9kaXZlcnRfZGl2ZXJzaW9uXSwKLSAgICAgICAgICAgW200X2ZhdGFsKFt0b28gbWFueSBtNF9kaXZlcnRfcG9wXSldKWRubAotbTRfaWYoWyQxXSwgW10sIFtdLAotICAgICAgWyQxXSwgbTRfZGVmbihbX200X2RpdmVydF9kaXZlcnNpb25dKSwgW10sCi0gICAgICBbbTRfZmF0YWwoWyQwKCQxKTogZGl2ZXJzaW9uIG1pc21hdGNoOiBdX200X2RpdmVydF9uX3N0YWNrKV0pZG5sCi1tNF9wb3BkZWYoW200X2RpdmVydF9zdGFja10pZG5sCi1tNF9wb3BkZWYoW19tNF9kaXZlcnRfZGl2ZXJzaW9uXSlkbmwKLW00X2J1aWx0aW4oW2RpdmVydF0sCi0JICAgbTRfaWZkZWYoW19tNF9kaXZlcnRfZGl2ZXJzaW9uXSwKLQkJICAgIFtfbTRfZGl2ZXJ0KG00X2RlZm4oW19tNF9kaXZlcnRfZGl2ZXJzaW9uXSkpXSwKLQkJICAgIC0xKSlkbmwKLV0pCitbbTRfaWYoWyQxXSwgW10sIFtdLAorICAgICAgIFskMV0sIF9tNF9kZWZuKFtfbTRfZGl2ZXJ0X2RpdmVyc2lvbl0pLCBbXSwKKyAgICAgICBbbTRfZmF0YWwoWyQwKCQxKTogZGl2ZXJzaW9uIG1pc21hdGNoOgorXW00X2RpdmVydF9zdGFjayldKV1kbmwKK1tfbTRfcG9wZGVmKFtfbTRfZGl2ZXJ0X3N0YWNrXSwgW19tNF9kaXZlcnRfZGl2ZXJzaW9uXSldZG5sCitbbTRfaWZkZWYoW19tNF9kaXZlcnRfZGl2ZXJzaW9uXSwgW10sCisJICAgW200X2ZhdGFsKFt0b28gbWFueSBtNF9kaXZlcnRfcG9wXSldKV1kbmwKK1tfbTRfZGl2ZXJ0X3JhdyhfbTRfZGl2ZXJ0KF9tNF9kZWZuKFtfbTRfZGl2ZXJ0X2RpdmVyc2lvbl0pLCBbLV0pKV0pCiAKIAogIyBtNF9kaXZlcnRfdGV4dChESVZFUlNJT04tTkFNRSwgQ09OVEVOVCkKQEAgLTc4MSwzMCArMTQ1NCw0MSBAQAogIyBPdXRwdXQgQ09OVEVOVCBpbnRvIERJVkVSU0lPTi1OQU1FICh3aGljaCBtYXkgYmUgYSBudW1iZXIgYWN0dWFsbHkpLgogIyBBbiBlbmQgb2YgbGluZSBpcyBhcHBlbmRlZCBmb3IgZnJlZSB0byBDT05URU5ULgogbTRfZGVmaW5lKFttNF9kaXZlcnRfdGV4dF0sCi1bbTRfZGl2ZXJ0X3B1c2goWyQxXSlkbmwKLSQyCi1tNF9kaXZlcnRfcG9wKFskMV0pZG5sCi1dKQorW200X2RpdmVydF9wdXNoKFskMV0pJDIKK200X2RpdmVydF9wb3AoWyQxXSldKQogCiAKICMgbTRfZGl2ZXJ0X29uY2UoRElWRVJTSU9OLU5BTUUsIENPTlRFTlQpCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBPdXRwdXQgb25jZSBDT05URU5UIGludG8gRElWRVJTSU9OLU5BTUUgKHdoaWNoIG1heSBiZSBhIG51bWJlcgotIyBhY3R1YWxseSkuICBBbiBlbmQgb2YgbGluZSBpcyBhcHBlbmRlZCBmb3IgZnJlZSB0byBDT05URU5ULgorIyBPdXRwdXQgQ09OVEVOVCBpbnRvIERJVkVSU0lPTi1OQU1FIG9uY2UsIGlmIG5vdCBhbHJlYWR5IHRoZXJlLgorIyBBbiBlbmQgb2YgbGluZSBpcyBhcHBlbmRlZCBmb3IgZnJlZSB0byBDT05URU5ULgogbTRfZGVmaW5lKFttNF9kaXZlcnRfb25jZV0sCiBbbTRfZXhwYW5kX29uY2UoW200X2RpdmVydF90ZXh0KFskMV0sIFskMl0pXSldKQogCiAKLSMgbTRfdW5kaXZlcnQoRElWRVJTSU9OLU5BTUUpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBVbmRpdmVydCBESVZFUlNJT04tTkFNRS4KKyMgX200X2RpdmVydF91bnNhZmUoRElWRVJTSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJc3N1ZSBhIHdhcm5pbmcgdGhhdCB0aGUgYXR0ZW1wdCB0byBjaGFuZ2UgdGhlIGN1cnJlbnQgZGl2ZXJzaW9uIHRvCisjIERJVkVSU0lPTi1OQU1FIGlzIHVuc2FmZSwgYmVjYXVzZSB0aGlzIG1hY3JvIGlzIGJlaW5nIGV4cGFuZGVkCisjIGR1cmluZyBhcmd1bWVudCBjb2xsZWN0aW9uIG9mIG00X2V4cGFuZC4KK200X2RlZmluZShbX200X2RpdmVydF91bnNhZmVdLAorW200X2ZhdGFsKFskMDogY2Fubm90IGNoYW5nZSBkaXZlcnNpb24gdG8gYCQxJyBpbnNpZGUgbTRfZXhwYW5kXSldKQorCisKKyMgbTRfdW5kaXZlcnQoRElWRVJTSU9OLU5BTUUuLi4pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBVbmRpdmVydCBESVZFUlNJT04tTkFNRS4gIFVubGlrZSB0aGUgTTQgdmVyc2lvbiwgdGhpcyByZXF1aXJlcyBhdAorIyBsZWFzdCBvbmUgRElWRVJTSU9OLU5BTUU7IGFsc28sIGR1ZSB0byBzdXBwb3J0IGZvciBuYW1lZCBkaXZlcnNpb25zLAorIyB0aGlzIHNob3VsZCBub3QgYmUgdXNlZCB0byB1bmRpdmVydCBmaWxlcy4KIG00X2RlZmluZShbbTRfdW5kaXZlcnRdLAotW200X2J1aWx0aW4oW3VuZGl2ZXJ0XSwgX200X2RpdmVydChbJDFdKSldKQorW200X2lmKFskI10sIFswXSwgW200X2ZhdGFsKFskMDogbWlzc2luZyBhcmd1bWVudF0pXSwKKyAgICAgICBbJCNdLCBbMV0sIFtfbTRfdW5kaXZlcnQoX200X2RpdmVydChbJDFdKSldLAorICAgICAgIFttNF9tYXBfYXJncyhbJDBdLCAkQCldKV0pCiAKIAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIDguIERlZmluaW5nIG1hY3JvcyB3aXRoIGJlbGxzIGFuZCB3aGlzdGxlcy4gICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAxMC4gRGVmaW5pbmcgbWFjcm9zIHdpdGggYmVsbHMgYW5kIHdoaXN0bGVzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogCiAjIGBtNF9kZWZ1bicgaXMgYmFzaWNhbGx5IGBtNF9kZWZpbmUnIGJ1dCBpdCBlcXVpcHMgdGhlIG1hY3JvIHdpdGggdGhlCiAjIG5lZWRlZCBtYWNoaW5lcnkgZm9yIGBtNF9yZXF1aXJlJy4gIEEgbWFjcm8gbXVzdCBiZSBtNF9kZWZ1bidkIGlmCkBAIC04MTcsMTkgKzE1MDEsMjAgQEAKICMgMS4gSW1wbGVtZW50YXRpb24gb2YgbTRfcmVxdWlyZQogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjCi0jIE9mIGNvdXJzZSBtNF9kZWZ1biBBQ19QUk9WSURFJ3MgdGhlIG1hY3JvLCBzbyB0aGF0IGEgbWFjcm8gd2hpY2ggaGFzCisjIE9mIGNvdXJzZSBtNF9kZWZ1biBjYWxscyBtNF9wcm92aWRlLCBzbyB0aGF0IGEgbWFjcm8gd2hpY2ggaGFzCiAjIGJlZW4gZXhwYW5kZWQgaXMgbm90IGV4cGFuZGVkIGFnYWluIHdoZW4gbTRfcmVxdWlyZSdkLCBidXQgdGhlCiAjIGRpZmZpY3VsdCBwYXJ0IGlzIHRoZSBwcm9wZXIgZXhwYW5zaW9uIG9mIG1hY3JvcyB3aGVuIHRoZXkgYXJlCiAjIG00X3JlcXVpcmUnZC4KICMKLSMgVGhlIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIHR3byBpZGVhcywgKGkpIHVzaW5nIGRpdmVyc2lvbnMgdG8KKyMgVGhlIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIHRocmVlIGlkZWFzLCAoaSkgdXNpbmcgZGl2ZXJzaW9ucyB0bwogIyBwcmVwYXJlIHRoZSBleHBhbnNpb24gb2YgdGhlIG1hY3JvIGFuZCBpdHMgZGVwZW5kZW5jaWVzIChieSBGcmFuYyxvaXMKLSMgUGluYXJkKSwgYW5kIChpaSkgZXhwYW5kIHRoZSBtb3N0IHJlY2VudGx5IG00X3JlcXVpcmUnZCBtYWNyb3MgX2FmdGVyXwotIyB0aGUgcHJldmlvdXMgbWFjcm9zIChieSBBeGVsIFRoaW1tKS4KKyMgUGluYXJkKSwgKGlpKSBleHBhbmQgdGhlIG1vc3QgcmVjZW50bHkgbTRfcmVxdWlyZSdkIG1hY3JvcyBfYWZ0ZXJfCisjIHRoZSBwcmV2aW91cyBtYWNyb3MgKGJ5IEF4ZWwgVGhpbW0pLCBhbmQgKGlpaSkgdHJhY2sgaW5zdGFuY2VzIG9mCisjIHByb3ZpZGUgYmVmb3JlIHJlcXVpcmUgKGJ5IEVyaWMgQmxha2UpLgogIwogIwotIyBUaGUgZmlyc3QgaWRlYTogd2h5IHVzaW5nIGRpdmVyc2lvbnM/Ci0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhlIGZpcnN0IGlkZWE6IHdoeSB1c2UgZGl2ZXJzaW9ucz8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMKICMgV2hlbiBhIG1hY3JvIHJlcXVpcmVzIGFub3RoZXIsIHRoZSBvdGhlciBtYWNybyBpcyBleHBhbmRlZCBpbiBuZXcKICMgZGl2ZXJzaW9uLCBHUk9XLiAgV2hlbiB0aGUgb3V0ZXIgbWFjcm8gaXMgZnVsbHkgZXhwYW5kZWQsIHdlIGZpcnN0CkBAIC04MzcsMTIgKzE1MjIsMTIgQEAKICMgdW5kaXZlcnQgR1JPVy4gIFRvIHVuZGVyc3RhbmQgd2h5IHdlIG5lZWQgc2V2ZXJhbCBkaXZlcnNpb25zLAogIyBjb25zaWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CiAjCi0jIHwgbTRfZGVmdW4oW1RFU1QxXSwgW1Rlc3QuLi5SRVFVSVJFKFtURVNUMl0pMV0pCi0jIHwgbTRfZGVmdW4oW1RFU1QyXSwgW1Rlc3QuLi5SRVFVSVJFKFtURVNUM10pMl0pCisjIHwgbTRfZGVmdW4oW1RFU1QxXSwgW1Rlc3QuLi5tNF9yZXF1aXJlKFtURVNUMl0pMV0pCisjIHwgbTRfZGVmdW4oW1RFU1QyXSwgW1Rlc3QuLi5tNF9yZXF1aXJlKFtURVNUM10pMl0pCiAjIHwgbTRfZGVmdW4oW1RFU1QzXSwgW1Rlc3QuLi4zXSkKICMKICMgQmVjYXVzZSBtNF9yZXF1aXJlIGlzIG5vdCByZXF1aXJlZCB0byBiZSBmaXJzdCBpbiB0aGUgb3V0ZXIgbWFjcm9zLCB3ZQotIyBtdXN0IGtlZXAgdGhlIGV4cGFuc2lvbnMgb2YgdGhlIHZhcmlvdXMgbGV2ZWwgb2YgbTRfcmVxdWlyZSBzZXBhcmF0ZWQuCisjIG11c3Qga2VlcCB0aGUgZXhwYW5zaW9ucyBvZiB0aGUgdmFyaW91cyBsZXZlbHMgb2YgbTRfcmVxdWlyZSBzZXBhcmF0ZWQuCiAjIFJpZ2h0IGJlZm9yZSBleGVjdXRpbmcgdGhlIGVwaWxvZ3VlIG9mIFRFU1QxLCB3ZSBoYXZlOgogIwogIwkgICBHUk9XIC0gMjogVGVzdC4uLjMKQEAgLTg3MCwxMCArMTU1NSwxMCBAQAogIyB2ZXJ5IHN1cnByaXNpbmcgcmVzdWx0cyBpbiBzb21lIHNpdHVhdGlvbnMuICBMZXQncyBjb25zaWRlciB0aGUKICMgZm9sbG93aW5nIGV4YW1wbGUgdG8gZXhwbGFpbiB0aGUgYnVnOgogIwotIyB8IG00X2RlZnVuKFtURVNUMV0sICBbUkVRVUlSRShbVEVTVDJhXSlSRVFVSVJFKFtURVNUMmJdKV0pCisjIHwgbTRfZGVmdW4oW1RFU1QxXSwgIFttNF9yZXF1aXJlKFtURVNUMmFdKW00X3JlcXVpcmUoW1RFU1QyYl0pXSkKICMgfCBtNF9kZWZ1bihbVEVTVDJhXSwgW10pCi0jIHwgbTRfZGVmdW4oW1RFU1QyYl0sIFtSRVFVSVJFKFtURVNUM10pXSkKLSMgfCBtNF9kZWZ1bihbVEVTVDNdLCAgW1JFUVVJUkUoW1RFU1QyYV0pXSkKKyMgfCBtNF9kZWZ1bihbVEVTVDJiXSwgW200X3JlcXVpcmUoW1RFU1QzXSldKQorIyB8IG00X2RlZnVuKFtURVNUM10sICBbbTRfcmVxdWlyZShbVEVTVDJhXSldKQogIyB8CiAjIHwgQUNfSU5JVAogIyB8IFRFU1QxCkBAIC05MDUsMTQgKzE1OTAsMTQgQEAKICMgaS5lLiwgVEVTVDJhIGlzIGV4cGFuZGVkIGFmdGVyIFRFU1QzIGFsdGhvdWdoIHRoZSBsYXR0ZXIgcmVxdWlyZWQgdGhlCiAjIGZvcm1lci4KICMKLSMgU3RhcnRpbmcgZnJvbSAyLjUwLCB1c2VzIGFuIGltcGxlbWVudGF0aW9uIHByb3ZpZGVkIGJ5IEF4ZWwgVGhpbW0uCisjIFN0YXJ0aW5nIGZyb20gMi41MCwgd2UgdXNlIGFuIGltcGxlbWVudGF0aW9uIHByb3ZpZGVkIGJ5IEF4ZWwgVGhpbW0uCiAjIFRoZSBpZGVhIGlzIHNpbXBsZTogdGhlIG9yZGVyIGluIHdoaWNoIG1hY3JvcyBhcmUgZW1pdHRlZCBtdXN0IGJlIHRoZQotIyBzYW1lIGFzIHRoZSBvbmUgaW4gd2hpY2ggbWFjcm8gYXJlIGV4cGFuZGVkLiAgKFRoZSBidWcgYWJvdmUgY2FuCi0jIGluZGVlZCBiZSBkZXNjcmliZWQgYXM6IGEgbWFjcm8gaGFzIGJlZW4gQUNfUFJPVklERSdkLCBidXQgaXQgaXMKLSMgZW1pdHRlZCBhZnRlcjogdGhlIGxhY2sgb2YgY29ycmVsYXRpb24gYmV0d2VlbiBlbWlzc2lvbiBhbmQgZXhwYW5zaW9uCi0jIG9yZGVyIGlzIGd1aWx0eSkuCisjIHNhbWUgYXMgdGhlIG9uZSBpbiB3aGljaCBtYWNyb3MgYXJlIGV4cGFuZGVkLiAgKFRoZSBidWcgYWJvdmUgY2FuCisjIGluZGVlZCBiZSBkZXNjcmliZWQgYXM6IGEgbWFjcm8gaGFzIGJlZW4gbTRfcHJvdmlkZSdkIGJlZm9yZSBpdHMKKyMgZGVwZW5kZW50LCBidXQgaXQgaXMgZW1pdHRlZCBhZnRlcjogdGhlIGxhY2sgb2YgY29ycmVsYXRpb24gYmV0d2VlbgorIyBlbWlzc2lvbiBhbmQgZXhwYW5zaW9uIG9yZGVyIGlzIGd1aWx0eSkuCiAjCi0jIEhvdyB0byBkbyB0aGF0PyAgWW91IGtlZXBpbmcgdGhlIHN0YWNrIG9mIGRpdmVyc2lvbnMgdG8gZWxhYm9yYXRlIHRoZQorIyBIb3cgdG8gZG8gdGhhdD8gIFlvdSBrZWVwIHRoZSBzdGFjayBvZiBkaXZlcnNpb25zIHRvIGVsYWJvcmF0ZSB0aGUKICMgbWFjcm9zLCBidXQgZWFjaCB0aW1lIGEgbWFjcm8gaXMgZnVsbHkgZXhwYW5kZWQsIGVtaXQgaXQgaW1tZWRpYXRlbHkuCiAjCiAjIEluIHRoZSBleGFtcGxlIGFib3ZlLCB3aGVuIFRFU1QyYSBpcyBleHBhbmRlZCwgYnV0IGl0J3MgZXBpbG9ndWUgaXMKQEAgLTk1OSw4ICsxNjQ0LDggQEAKICMJICAgR1JPVzoKICMJICAgQk9EWTogICAgIFRFU1QyYTsgVEVTVDM7IFRFU1QyYjogVEVTVDEKICMKLSMgVGhlIGlkZWEgaXMgc2ltcGxlLCBidXQgdGhlIGltcGxlbWVudGF0aW9uIGlzIGEgYml0IGV2b2x2ZWQuICBJZiB5b3UKLSMgYXJlIGxpa2UgbWUsIHlvdSB3aWxsIHdhbnQgdG8gc2VlIHRoZSBhY3R1YWwgZnVuY3Rpb25pbmcgb2YgdGhpcworIyBUaGUgaWRlYSBpcyBzaW1wbGUsIGJ1dCB0aGUgaW1wbGVtZW50YXRpb24gaXMgYSBiaXQgaW52b2x2ZWQuICBJZgorIyB5b3UgYXJlIGxpa2UgbWUsIHlvdSB3aWxsIHdhbnQgdG8gc2VlIHRoZSBhY3R1YWwgZnVuY3Rpb25pbmcgb2YgdGhpcwogIyBpbXBsZW1lbnRhdGlvbiB0byBiZSBjb252aW5jZWQuICBUaGUgbmV4dCBzZWN0aW9uIGdpdmVzIHRoZSBmdWxsCiAjIGRldGFpbHMuCiAjCkBAIC05NzYsNyArMTY2MSw3IEBACiAjIFlvdSBzaG91bGQga2VlcCB0aGUgZGVmaW5pdGlvbnMgb2YgX200X2RlZnVuX3BybywgX200X2RlZnVuX2VwaSwgYW5kCiAjIG00X3JlcXVpcmUgYXQgaGFuZCB0byBmb2xsb3cgdGhlIHN0ZXBzLgogIwotIyBUaGlzIGltcGxlbWVudHMgdHJpZXMgbm90IHRvIGFzc3VtZSB0aGF0IHRoZSBjdXJyZW50IGRpdmVyc2lvbiBpcworIyBUaGlzIGltcGxlbWVudGF0aW9uIHRyaWVzIG5vdCB0byBhc3N1bWUgdGhhdCB0aGUgY3VycmVudCBkaXZlcnNpb24gaXMKICMgQk9EWSwgc28gYXMgc29vbiBhcyBhIG1hY3JvIChtNF9kZWZ1bidkKSBpcyBleHBhbmRlZCwgd2UgZmlyc3QKICMgcmVjb3JkIHRoZSBjdXJyZW50IGRpdmVyc2lvbiB1bmRlciB0aGUgbmFtZSBfbTRfZGl2ZXJ0X2R1bXAgKGRlbm90ZWQKICMgRFVNUCBiZWxvdyBmb3Igc2hvcnQpLiAgVGhpcyBpbnRyb2R1Y2VzIGFuIGltcG9ydGFudCBkaWZmZXJlbmNlIHdpdGgKQEAgLTEwMTEsNyArMTY5Niw3IEBACiAjICAgQk9EWTogICAgICAgIGVtcHR5CiAjICAgR1JPVyAtIDE6ICAgIFRFU1QyYQogIyAgIGRpdmVyc2lvbnM6ICBHUk9XIC0gMSwgR1JPVywgQk9EWSB8LQotIyBUaGFuIHRoZSBjb250ZW50IG9mIHRoZSB0ZW1wb3JhcnkgZGl2ZXJzaW9uIGlzIG1vdmVkIHRvIERVTVAgYW5kIHRoZQorIyBUaGVuIHRoZSBjb250ZW50IG9mIHRoZSB0ZW1wb3JhcnkgZGl2ZXJzaW9uIGlzIG1vdmVkIHRvIERVTVAgYW5kIHRoZQogIyB0ZW1wb3JhcnkgZGl2ZXJzaW9uIGlzIHBvcHBlZC4KICMgICBEVU1QOiAgICAgICAgQk9EWQogIyAgIEJPRFk6ICAgICAgICBURVNUMmEKQEAgLTEwMzEsNyArMTcxNiw3IEBACiAjICAgQk9EWTogICAgICAgIFRFU1QyYQogIyAgIEdST1cgLSAyOiAgICBURVNUMwogIyAgIGRpdmVyc2lvbnM6ICBHUk9XIC0gMiwgR1JPVyAtIDEsIEdST1csIEJPRFkgfC0KLSMgVGhhbiB0aGUgZGl2ZXJzaW9uIGlzIGFwcGVuZGVkIHRvIERVTVAsIGFuZCBwb3BwZWQuCisjIFRoZW4gdGhlIGRpdmVyc2lvbiBpcyBhcHBlbmRlZCB0byBEVU1QLCBhbmQgcG9wcGVkLgogIyAgIERVTVA6ICAgICAgICBCT0RZCiAjICAgQk9EWTogICAgICAgIFRFU1QyYTsgVEVTVDMKICMgICBkaXZlcnNpb25zOiAgR1JPVyAtIDEsIEdST1csIEJPRFkgfC0KQEAgLTEwNTksNiArMTc0NCw3OSBAQAogIyAgIGRpdmVyc2lvbnM6IEJPRFkgfC0KICMKICMKKyMgVGhlIHRoaXJkIGlkZWE6IHRyYWNrIG1hY3JvcyBwcm92aWRlZCBiZWZvcmUgdGhleSB3ZXJlIHJlcXVpcmVkCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBVc2luZyBqdXN0IHRoZSBmaXJzdCB0d28gaWRlYXMsIEF1dG9jb25mIDIuNTAgdGhyb3VnaCAyLjYzIHN0aWxsIGhhZAorIyBhIHN1YnRsZSBidWcgZm9yIG1vcmUgdGhhbiBzZXZlbiB5ZWFycy4gIExldCdzIGNvbnNpZGVyIHRoZQorIyBmb2xsb3dpbmcgZXhhbXBsZSB0byBleHBsYWluIHRoZSBidWc6CisjCisjIHwgbTRfZGVmdW4oW1RFU1QxXSwgWzFdKQorIyB8IG00X2RlZnVuKFtURVNUMl0sIFsyW11tNF9yZXF1aXJlKFtURVNUMV0pXSkKKyMgfCBtNF9kZWZ1bihbVEVTVDNdLCBbMyBURVNUMSBtNF9yZXF1aXJlKFtURVNUMl0pXSkKKyMgfCBURVNUMworIworIyBBZnRlciB0aGUgcHJvbG9ndWUgb2YgVEVTVDMsIHdlIGFyZSBjb2xsZWN0aW5nIHRleHQgaW4gR1JPVyB3aXRoIHRoZQorIyBpbnRlbnQgb2YgZHVtcGluZyBpdCBpbiBCT0RZIGR1cmluZyB0aGUgZXBpbG9ndWUuICBOZXh0LCB3ZQorIyBlbmNvdW50ZXIgdGhlIGRpcmVjdCBpbnZvY2F0aW9uIG9mIFRFU1QxLCB3aGljaCBwcm92aWRlcyB0aGUgbWFjcm8KKyMgaW4gcGxhY2UgaW4gR1JPVy4gIEZyb20gdGhlcmUsIHdlIGVuY291bnRlciBhIHJlcXVpcmVtZW50IGZvciBURVNUMiwKKyMgd2hpY2ggbXVzdCBiZSBjb2xsZWN0ZWQgaW4gYSBuZXcgZGl2ZXJzaW9uLiAgV2hpbGUgZXhwYW5kaW5nIFRFU1QyLAorIyB3ZSBlbmNvdW50ZXIgYSByZXF1aXJlbWVudCBmb3IgVEVTVDEsIGJ1dCBzaW5jZSBpdCBoYXMgYWxyZWFkeSBiZWVuCisjIGV4cGFuZGVkLCB0aGUgQXhlbCBUaGltbSBhbGdvcml0aG0gc3RhdGVzIHRoYXQgd2UgY2FuIHRyZWF0IGl0IGFzIGEKKyMgbm8tb3AuICBCdXQgdGhhdCB3b3VsZCBsZWFkIHRvIGFuIGVuZCByZXN1bHQgb2YgYDIgMyAxJywgbWVhbmluZworIyB0aGF0IHdlIGhhdmUgb25jZSBhZ2FpbiBvdXRwdXQgYSBtYWNybyAoVEVTVDIpIHByaW9yIHRvIGl0cworIyByZXF1aXJlbWVudHMgKFRFU1QxKS4KKyMKKyMgVGhlIHByb2JsZW0gY2FuIG9ubHkgb2NjdXIgaWYgYSBzaW5nbGUgZGVmdW4nZCBtYWNybyBmaXJzdCBwcm92aWRlcywKKyMgdGhlbiBsYXRlciBpbmRpcmVjdGx5IHJlcXVpcmVzLCB0aGUgc2FtZSBtYWNyby4gIE5vdGUgdGhhdCBkaXJlY3RseQorIyBleHBhbmRpbmcgdGhlbiByZXF1aXJpbmcgYSBtYWNybyBpcyBva2F5OiBiZWNhdXNlIHRoZSBkZXBlbmRlbmN5IHdhcworIyBtZXQsIHRoZSByZXF1aXJlIHBoYXNlIGNhbiBiZSBhIG5vLW9wLiAgRm9yIHRoYXQgbWF0dGVyLCB0aGUgb3V0ZXIKKyMgbWFjcm8gY2FuIGV2ZW4gcmVxdWlyZSB0d28gaGVscGVycywgd2hlcmUgdGhlIGZpcnN0IGhlbHBlciBleHBhbmRzCisjIHRoZSBtYWNybywgYW5kIHRoZSBzZWNvbmQgaGVscGVyIGluZGlyZWN0bHkgcmVxdWlyZXMgdGhlIG1hY3JvLgorIyBPdXQtb2Ytb3JkZXIgZXhwYW5zaW9uIGlzIG9ubHkgcHJlc2VudCBpZiB0aGUgaW5uZXIgbWFjcm8gaXMKKyMgcmVxdWlyZWQgYnkgc29tZXRoaW5nIHRoYXQgd2lsbCBiZSBob2lzdGVkIGluIGZyb250IG9mIHdoZXJlIHRoZQorIyBkaXJlY3QgZXhwYW5zaW9uIG9jY3VycmVkLiAgSW4gb3RoZXIgd29yZHMsIHdlIG11c3QgYmUgY2FyZWZ1bCBub3QKKyMgdG8gd2FybiBvbjoKKyMKKyMgfCBtNF9kZWZ1bihbVEVTVDRdLCBbNF0pCisjIHwgbTRfZGVmdW4oW1RFU1Q1XSwgWzUgVEVTVDQgbTRfcmVxdWlyZShbVEVTVDRdKV0pCisjIHwgVEVTVDUgPT4gNSA0CisjCisjIG9yIGV2ZW4gdGhlIG1vcmUgY29tcGxleDoKKyMKKyMgfCBtNF9kZWZ1bihbVEVTVDZdLCBbNl0pCisjIHwgbTRfZGVmdW4oW1RFU1Q3XSwgWzcgVEVTVDZdKQorIyB8IG00X2RlZnVuKFtURVNUOF0sIFs4IG00X3JlcXVpcmUoW1RFU1Q2XSldKQorIyB8IG00X2RlZnVuKFtURVNUOV0sIFs5IG00X3JlcXVpcmUoW1RFU1Q4XSldKQorIyB8IG00X2RlZnVuKFtURVNUMTBdLCBbMTAgbTRfcmVxdWlyZShbVEVTVDddKSBtNF9yZXF1aXJlKFtURVNUOV0pXSkKKyMgfCBURVNUMTAgPT4gNyA2IDggOSAxMAorIworIyBTbywgdG8gZGV0ZWN0IHdoZXRoZXIgYSByZXF1aXJlIHdhcyBkaXJlY3Qgb3IgaW5kaXJlY3QsIG00X2RlZnVuIGFuZAorIyBtNF9yZXF1aXJlIHRyYWNrIHRoZSBuYW1lIG9mIHRoZSBtYWNybyB0aGF0IGNhdXNlZCBhIGRpdmVyc2lvbiB0byBiZQorIyBjcmVhdGVkICh1c2luZyB0aGUgc3RhY2sgX200X2RpdmVydGluZywgY291cGxlZCB3aXRoIGFuIE8oMSkgbG9va3VwCisjIF9tNF9kaXZlcnRpbmcoW05BTUVdKSksIGFuZCBtNF9wcm92aWRlIHN0b3JlcyB0aGUgbmFtZSBhc3NvY2lhdGVkCisjIHdpdGggdGhlIGRpdmVyc2lvbiBhdCB3aGljaCBhIG1hY3JvIHdhcyBwcm92aWRlZC4gIEEgcmVxdWlyZSBjYWxsIGlzCisjIGRpcmVjdCBpZiBpdCBvY2N1cnMgd2l0aGluIHRoZSBzYW1lIGRpdmVyc2lvbiB3aGVyZSB0aGUgbWFjcm8gd2FzCisjIHByb3ZpZGVkLCBvciBpZiB0aGUgZGl2ZXJzaW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvdmlkaW5nIGNvbnRleHQKKyMgaGFzIGJlZW4gY29sbGVjdGVkLgorIworIyBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHdhcm5pbmcgaW52b2x2ZXMgdHJhY2tpbmcgdGhlIHNldCBvZgorIyBtYWNyb3Mgd2hpY2ggaGF2ZSBiZWVuIHByb3ZpZGVkIHNpbmNlIHRoZSBzdGFydCBvZiB0aGUgb3V0ZXJtb3N0CisjIGRlZnVuJ2QgbWFjcm8gKHRoZSBzZXQgaXMgbmFtZWQgX200X3Byb3ZpZGUpLiAgV2hlbiBzdGFydGluZyBhbgorIyBvdXRlcm1vc3QgbWFjcm8sIHRoZSBzZXQgaXMgZW1wdGllZDsgd2hlbiBhIG1hY3JvIGlzIHByb3ZpZGVkLCBpdCBpcworIyBhZGRlZCB0byB0aGUgc2V0OyB3aGVuIHJlcXVpcmUgZXhwYW5kcyB0aGUgYm9keSBvZiBhIG1hY3JvLCBpdCBpcworIyByZW1vdmVkIGZyb20gdGhlIHNldDsgYW5kIHdoZW4gYSBtYWNybyBpcyBpbmRpcmVjdGx5IHJlcXVpcmVkLCB0aGUKKyMgc2V0IGlzIGNoZWNrZWQuICBJZiBhIG1hY3JvIGlzIGluIHRoZSBzZXQsIHRoZW4gaXQgaGFzIGJlZW4gcHJvdmlkZWQKKyMgYmVmb3JlIGl0IHdhcyByZXF1aXJlZCwgYW5kIHdlIHNhdGlzZnkgZGVwZW5kZW5jaWVzIGJ5IGV4cGFuZGluZyB0aGUKKyMgbWFjcm8gYXMgaWYgaXQgaGFkIG5ldmVyIGJlZW4gcHJvdmlkZWQ7IGluIHRoZSBleGFtcGxlIGdpdmVuIGFib3ZlLAorIyB0aGlzIG1lYW5zIHdlIG5vdyBvdXRwdXQgYDEgMiAzIDEnLiAgTWVhbndoaWxlLCBhIHdhcm5pbmcgaXMgaXNzdWVkCisjIHRvIGluZm9ybSB0aGUgdXNlciB0aGF0IGhlciBtYWNyb3MgdHJpZ2dlciB0aGUgYnVnIGluIG9sZGVyIGF1dG9jb25mCisjIHZlcnNpb25zLCBhbmQgdGhhdCBoZXIgb3V0cHV0IGZpbGUgbm93IGNvbnRhaW5zIHJlZHVuZGFudCBjb250ZW50cworIyAoYW5kIHBvc3NpYmx5IG5ldyBwcm9ibGVtcywgaWYgdGhlIHJlcGVhdGVkIG1hY3JvIHdhcyBub3QKKyMgaWRlbXBvdGVudCkuICBNZWFud2hpbGUsIG1hY3JvcyBkZWZpbmVkIGJ5IG00X2RlZnVuX29uY2UgaW5zdGVhZCBvZgorIyBtNF9kZWZ1biBhcmUgaWRlbXBvdGVudCwgYXZvaWRpbmcgYW55IHdhcm5pbmcgb3IgZHVwbGljYXRlIG91dHB1dC4KKyMKKyMKICMgMi4gS2VlcGluZyB0cmFjayBvZiB0aGUgZXhwYW5zaW9uIHN0YWNrCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIwpAQCAtMTA3MSwzNiArMTgyOSwzNyBAQAogIyBwZXJmb3JtYW5jZSBwZW5hbHR5IHRoaXMgaXMgaW1wbGVtZW50ZWQgb25seSBmb3IgbTRfZGVmdW4nZCBtYWNyb3MsCiAjIG5vdCBmb3IgZGVmaW5lJ2QgbWFjcm9zLgogIwotIyBUaGUgc2NoZW1lIGlzIHNpbXBsaXN0aWM6IGVhY2ggdGltZSB3ZSBlbnRlciBhbiBtNF9kZWZ1bidkIG1hY3JvcywKLSMgd2UgcHJlcGVuZCBpdHMgbmFtZSBpbiBtNF9leHBhbnNpb25fc3RhY2ssIGFuZCB3aGVuIHdlIGV4aXQgdGhlCi0jIG1hY3JvLCB3ZSByZW1vdmUgaXQgKHRoYW5rcyB0byBwdXNoZGVmL3BvcGRlZikuCisjIEVhY2ggdGltZSB3ZSBlbnRlciBhbiBtNF9kZWZ1bidkIG1hY3Jvcywgd2UgYWRkIGEgZGVmaW5pdGlvbiBpbgorIyBfbTRfZXhwYW5zaW9uX3N0YWNrLCBhbmQgd2hlbiB3ZSBleGl0IHRoZSBtYWNybywgd2UgcmVtb3ZlIGl0ICh0aGFua3MKKyMgdG8gcHVzaGRlZi9wb3BkZWYpLiAgbTRfc3RhY2tfZm9yZWFjaCBpcyB1c2VkIHRvIHByaW50IHRoZSBleHBhbnNpb24KKyMgc3RhY2sgaW4gdGhlIHJhcmUgY2FzZXMgd2hlbiBpdCdzIG5lZWRlZC4KICMKICMgSW4gYWRkaXRpb24sIHdlIHdhbnQgdG8gZGV0ZWN0IGNpcmN1bGFyIG00X3JlcXVpcmUgZGVwZW5kZW5jaWVzLgogIyBFYWNoIHRpbWUgd2UgZXhwYW5kIGEgbWFjcm8gRk9PIHdlIGRlZmluZSBfbTRfZXhwYW5kaW5nKEZPTyk7IGFuZAogIyBtNF9yZXF1aXJlKEJBUikgc2ltcGx5IGNoZWNrcyB3aGV0aGVyIF9tNF9leHBhbmRpbmcoQkFSKSBpcyBkZWZpbmVkLgogCiAKLSMgbTRfZXhwYW5zaW9uX3N0YWNrX3B1c2goVEVYVCkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgbTRfZXhwYW5zaW9uX3N0YWNrCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeHBhbmRzIHRvIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGV4cGFuc2lvbiBzdGFjay4gIFRoZSBjYWxsZXIKKyMgbXVzdCBzdXBwbHkgYSB0cmFpbGluZyBuZXdsaW5lLiAgVGhpcyBtYWNybyBhbHdheXMgcHJpbnRzIGEKKyMgbG9jYXRpb247IGNoZWNrIHdoZXRoZXIgX200X2V4cGFuc2lvbl9zdGFjayBpcyBkZWZpbmVkIHRvIGZpbHRlciBvdXQKKyMgdGhlIGNhc2Ugd2hlbiBubyBkZWZ1bidkIG1hY3JvIGlzIGluIGZvcmNlLgorbTRfZGVmaW5lKFttNF9leHBhbnNpb25fc3RhY2tdLAorW200X3N0YWNrX2ZvcmVhY2hfc2VwX2xpZm8oW18kMF0sIFtfJDBfZW50cnkoXSwgWykKK10pbTRfbG9jYXRpb25bOiB0aGUgdG9wIGxldmVsXV0pCisKKyMgX200X2V4cGFuc2lvbl9zdGFja19lbnRyeShNQUNSTykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRm9ybWF0IGFuIGVudHJ5IGZvciBNQUNSTyBmb3VuZCBvbiB0aGUgZXhwYW5zaW9uIHN0YWNrLgorbTRfZGVmaW5lKFtfbTRfZXhwYW5zaW9uX3N0YWNrX2VudHJ5XSwKK1tfbTRfZGVmbihbbTRfbG9jYXRpb24oJDEpXSlbOiAkMSBpcyBleHBhbmRlZCBmcm9tLi4uXV0pCisKKyMgbTRfZXhwYW5zaW9uX3N0YWNrX3B1c2goTUFDUk8pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGb3JtIGFuIGVudHJ5IG9mIHRoZSBleHBhbnNpb24gc3RhY2sgb24gZW50cnkgdG8gTUFDUk8gYW5kIHB1c2ggaXQuCiBtNF9kZWZpbmUoW200X2V4cGFuc2lvbl9zdGFja19wdXNoXSwKLVttNF9wdXNoZGVmKFttNF9leHBhbnNpb25fc3RhY2tdLAotCSAgICBbJDFdbTRfaWZkZWYoW200X2V4cGFuc2lvbl9zdGFja10sIFsKLW00X2RlZm4oW200X2V4cGFuc2lvbl9zdGFja10pXSkpXSkKLQotCi0jIG00X2V4cGFuc2lvbl9zdGFja19wb3AKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmaW5lKFttNF9leHBhbnNpb25fc3RhY2tfcG9wXSwKLVttNF9wb3BkZWYoW200X2V4cGFuc2lvbl9zdGFja10pXSkKLQotCi0jIG00X2V4cGFuc2lvbl9zdGFja19kdW1wCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIER1bXAgdGhlIGV4cGFuc2lvbiBzdGFjay4KLW00X2RlZmluZShbbTRfZXhwYW5zaW9uX3N0YWNrX2R1bXBdLAotW200X2lmZGVmKFttNF9leHBhbnNpb25fc3RhY2tdLAotCSAgW200X2VycnByaW50bihtNF9kZWZuKFttNF9leHBhbnNpb25fc3RhY2tdKSldKWRubAotbTRfZXJycHJpbnRuKG00X2xvY2F0aW9uWzogdGhlIHRvcCBsZXZlbF0pXSkKK1ttNF9wdXNoZGVmKFtfbTRfZXhwYW5zaW9uX3N0YWNrXSwgWyQxXSldKQogCiAKICMgX200X2RpdmVydChHUk9XKQpAQCAtMTEyNSw4NCArMTg4NCwxNDIgQEAKICMgX200X2RlZnVuX3BybyhNQUNSTy1OQU1FKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFRoZSBwcm9sb2d1ZSBmb3IgQXV0b2NvbmYgbWFjcm9zLgorIworIyBUaGlzIGlzIGNhbGxlZCBmcmVxdWVudGx5LCBzbyBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIG1hY3JvIGludm9jYXRpb25zCisjIGJ5IGF2b2lkaW5nIGRubCBhbmQgbTRfZGVmbiBvdmVyaGVhZC4KIG00X2RlZmluZShbX200X2RlZnVuX3Byb10sCi1bbTRfaWZuZGVmKFttNF9leHBhbnNpb25fc3RhY2tdLCBbX200X2RlZnVuX3Byb19vdXRlcltdXSlkbmwKLW00X2V4cGFuc2lvbl9zdGFja19wdXNoKG00X2RlZm4oW200X2xvY2F0aW9uKCQxKV0pWzogJDEgaXMgZXhwYW5kZWQgZnJvbS4uLl0pZG5sCi1tNF9wdXNoZGVmKFtfbTRfZXhwYW5kaW5nKCQxKV0pZG5sCi1dKQorW200X2lmZGVmKFtfbTRfZXhwYW5zaW9uX3N0YWNrXSwgW10sIFtfbTRfZGVmdW5fcHJvX291dGVyKFskMV0pXSldZG5sCitbbTRfZXhwYW5zaW9uX3N0YWNrX3B1c2goWyQxXSltNF9wdXNoZGVmKFtfbTRfZXhwYW5kaW5nKCQxKV0pXSkKIAogbTRfZGVmaW5lKFtfbTRfZGVmdW5fcHJvX291dGVyXSwKLVttNF9jb3B5KFtfbTRfZGl2ZXJ0X2RpdmVyc2lvbl0sIFtfbTRfZGl2ZXJ0X2R1bXBdKWRubAotbTRfZGl2ZXJ0X3B1c2goW0dST1ddKWRubAotXSkKK1ttNF9zZXRfZGVsZXRlKFtfbTRfcHJvdmlkZV0pXWRubAorW200X3B1c2hkZWYoW19tNF9kaXZlcnRpbmcoWyQxXSldKW00X3B1c2hkZWYoW19tNF9kaXZlcnRpbmddLCBbJDFdKV1kbmwKK1ttNF9wdXNoZGVmKFtfbTRfZGl2ZXJ0X2R1bXBdLCBtNF9kaXZudW0pbTRfZGl2ZXJ0X3B1c2goW0dST1ddKV0pCiAKICMgX200X2RlZnVuX2VwaShNQUNSTy1OQU1FKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFRoZSBFcGlsb2d1ZSBmb3IgQXV0b2NvbmYgbWFjcm9zLiAgTUFDUk8tTkFNRSBvbmx5IGhlbHBzIHRyYWNpbmcKICMgdGhlIFBSTy9FUEkgcGFpcnMuCisjCisjIFRoaXMgaXMgY2FsbGVkIGZyZXF1ZW50bHksIHNvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgbWFjcm8gaW52b2NhdGlvbnMKKyMgYnkgYXZvaWRpbmcgZG5sIGFuZCBtNF9wb3BkZWYgb3ZlcmhlYWQuCiBtNF9kZWZpbmUoW19tNF9kZWZ1bl9lcGldLAotW200X3BvcGRlZihbX200X2V4cGFuZGluZygkMSldKWRubAotbTRfZXhwYW5zaW9uX3N0YWNrX3BvcCgpZG5sCi1tNF9pZm5kZWYoW200X2V4cGFuc2lvbl9zdGFja10sIFtfbTRfZGVmdW5fZXBpX291dGVyW11dKWRubAotbTRfcHJvdmlkZShbJDFdKWRubAotXSkKK1tfbTRfcG9wZGVmKFtfbTRfZXhwYW5kaW5nKCQxKV0sIFtfbTRfZXhwYW5zaW9uX3N0YWNrXSldZG5sCitbbTRfaWZkZWYoW19tNF9leHBhbnNpb25fc3RhY2tdLCBbXSwgW19tNF9kZWZ1bl9lcGlfb3V0ZXIoWyQxXSldKV1kbmwKK1ttNF9wcm92aWRlKFskMV0pXSkKIAogbTRfZGVmaW5lKFtfbTRfZGVmdW5fZXBpX291dGVyXSwKLVttNF91bmRlZmluZShbX200X2RpdmVydF9kdW1wXSlkbmwKLW00X2RpdmVydF9wb3AoW0dST1ddKWRubAotbTRfdW5kaXZlcnQoW0dST1ddKWRubAotXSkKK1tfbTRfcG9wZGVmKFtfbTRfZGl2ZXJ0X2R1bXBdLCBbX200X2RpdmVydGluZyhbJDFdKV0sIFtfbTRfZGl2ZXJ0aW5nXSldZG5sCitbbTRfZGl2ZXJ0X3BvcChbR1JPV10pbTRfdW5kaXZlcnQoW0dST1ddKV0pCiAKIAotIyBtNF9kZWZ1bihOQU1FLCBFWFBBTlNJT04pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRGVmaW5lIGEgbWFjcm8gd2hpY2ggYXV0b21hdGljYWxseSBwcm92aWRlcyBpdHNlbGYuICBBZGQgbWFjaGluZXJ5Ci0jIHNvIHRoZSBtYWNybyBhdXRvbWF0aWNhbGx5IHN3aXRjaGVzIGV4cGFuc2lvbiB0byB0aGUgZGl2ZXJzaW9uCi0jIHN0YWNrIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHVzaW5nIGl0LiAgSW4gdGhpcyBjYXNlLCBvbmNlIGZpbmlzaGVkLAotIyBpdCB3aWxsIGJyaW5nIGJhY2sgYWxsIHRoZSBjb2RlIGFjY3VtdWxhdGVkIGluIHRoZSBkaXZlcnNpb24gc3RhY2suCi0jIFRoaXMsIGNvbWJpbmVkIHdpdGggbTRfcmVxdWlyZSwgYWNoaWV2ZXMgdGhlIHRvcG9sb2dpY2FsIG9yZGVyaW5nIG9mCi0jIG1hY3Jvcy4gIFdlIGRvbid0IHVzZSB0aGlzIG1hY3JvIHRvIGRlZmluZSBzb21lIGZyZXF1ZW50bHkgY2FsbGVkCi0jIG1hY3JvcyB0aGF0IGFyZSBub3QgaW52b2x2ZWQgaW4gb3JkZXJpbmcgY29uc3RyYWludHMsIHRvIHNhdmUgbTQKLSMgcHJvY2Vzc2luZy4KKyMgX200X2RpdmVydF9kdW1wCisjIC0tLS0tLS0tLS0tLS0tLQorIyBJZiBibGFuaywgd2UgYXJlIG91dHNpZGUgb2YgYW55IGRlZnVuJ2QgbWFjcm8uICBPdGhlcndpc2UsIGV4cGFuZHMKKyMgdG8gdGhlIGRpdmVyc2lvbiBudW1iZXIgKG5vdCBuYW1lKSB3aGVyZSByZXF1aXJlJ2QgbWFjcm9zIHNob3VsZCBiZQorIyBtb3ZlZCBvbmNlIGNvbXBsZXRlZC4KK200X2RlZmluZShbX200X2RpdmVydF9kdW1wXSkKKworCisjIG00X2RpdmVydF9yZXF1aXJlKERJVkVSU0lPTiwgTkFNRS1UTy1DSEVDSywgW0JPRFktVE8tRVhQQU5EXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTYW1lIGFzIG00X3JlcXVpcmUsIGJ1dCBCT0RZLVRPLUVYUEFORCBnb2VzIGludG8gdGhlIG5hbWVkIERJVkVSU0lPTjsKKyMgcmVxdWlyZW1lbnRzIHN0aWxsIGdvIGluIHRoZSBjdXJyZW50IGRpdmVyc2lvbiB0aG91Z2guCisjCittNF9kZWZpbmUoW200X2RpdmVydF9yZXF1aXJlXSwKK1ttNF9pZmRlZihbX200X2V4cGFuZGluZygkMildLAorICBbbTRfZmF0YWwoWyQwOiBjaXJjdWxhciBkZXBlbmRlbmN5IG9mICQyXSldKV1kbmwKK1ttNF9pZihfbTRfZGl2ZXJ0X2R1bXAsIFtdLAorICBbbTRfZmF0YWwoWyQwKCQyKTogY2Fubm90IGJlIHVzZWQgb3V0c2lkZSBvZiBhbiBtNF9kZWZ1bidkIG1hY3JvXSldKV1kbmwKK1ttNF9wcm92aWRlX2lmKFskMl0sIFtdLAorICBbX200X3JlcXVpcmVfY2FsbChbJDJdLCBbJDNdLCBfbTRfZGl2ZXJ0KFskMV0sIFstXSkpXSldKQorCisKKyMgbTRfZGVmdW4oTkFNRSwgRVhQQU5TSU9OLCBbTUFDUk8gPSBtNF9kZWZpbmVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBhIG1hY3JvIE5BTUUgd2hpY2ggYXV0b21hdGljYWxseSBwcm92aWRlcyBpdHNlbGYuICBBZGQKKyMgbWFjaGluZXJ5IHNvIHRoZSBtYWNybyBhdXRvbWF0aWNhbGx5IHN3aXRjaGVzIGV4cGFuc2lvbiB0byB0aGUKKyMgZGl2ZXJzaW9uIHN0YWNrIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHVzaW5nIGl0LCBwcmlvciB0byBFWFBBTlNJT04uCisjIEluIHRoaXMgY2FzZSwgb25jZSBmaW5pc2hlZCwgaXQgd2lsbCBicmluZyBiYWNrIGFsbCB0aGUgY29kZQorIyBhY2N1bXVsYXRlZCBpbiB0aGUgZGl2ZXJzaW9uIHN0YWNrLiAgVGhpcywgY29tYmluZWQgd2l0aCBtNF9yZXF1aXJlLAorIyBhY2hpZXZlcyB0aGUgdG9wb2xvZ2ljYWwgb3JkZXJpbmcgb2YgbWFjcm9zLiAgV2UgZG9uJ3QgdXNlIHRoaXMKKyMgbWFjcm8gdG8gZGVmaW5lIHNvbWUgZnJlcXVlbnRseSBjYWxsZWQgbWFjcm9zIHRoYXQgYXJlIG5vdCBpbnZvbHZlZAorIyBpbiBvcmRlcmluZyBjb25zdHJhaW50cywgdG8gc2F2ZSBtNCBwcm9jZXNzaW5nLgorIworIyBNQUNSTyBpcyBhbiB1bmRvY3VtZW50ZWQgYXJndW1lbnQ7IHdoZW4gc2V0IHRvIG00X3B1c2hkZWYsIGFuZCBOQU1FCisjIGlzIGFscmVhZHkgZGVmaW5lZCwgdGhlIG5ldyBkZWZpbml0aW9uIGlzIGFkZGVkIHRvIHRoZSBwdXNoZGVmCisjIHN0YWNrLCByYXRoZXIgdGhhbiBvdmVyd3JpdGluZyB0aGUgY3VycmVudCBkZWZpbml0aW9uLiAgSXQgY2FuIHRodXMKKyMgYmUgdXNlZCB0byB3cml0ZSBzZWxmLW1vZGlmeWluZyBtYWNyb3MsIHdoaWNoIHBvcCB0aGVtc2VsdmVzIHRvIGEKKyMgcHJldmlvdXNseSBtNF9kZWZpbmUnZCBkZWZpbml0aW9uIHNvIHRoYXQgc3Vic2VxdWVudCB1c2Ugb2YgdGhlCisjIG1hY3JvIGlzIGZhc3Rlci4KIG00X2RlZmluZShbbTRfZGVmdW5dLAotW200X2RlZmluZShbbTRfbG9jYXRpb24oJDEpXSwgbTRfbG9jYXRpb24pZG5sCi1tNF9kZWZpbmUoWyQxXSwKLQkgIFtfbTRfZGVmdW5fcHJvKFskMV0pJDJbXV9tNF9kZWZ1bl9lcGkoWyQxXSldKV0pCitbbTRfZGVmaW5lKFttNF9sb2NhdGlvbigkMSldLCBtNF9sb2NhdGlvbildZG5sCitbbTRfZGVmYXVsdChbJDNdLCBbbTRfZGVmaW5lXSkoWyQxXSwKKyAgW19tNF9kZWZ1bl9wcm8oXW00X2RxdW90ZSgkWzBdKVspJDJbXV9tNF9kZWZ1bl9lcGkoXW00X2RxdW90ZSgkWzBdKVspXSldKQorCisKKyMgbTRfZGVmdW5faW5pdChOQU1FLCBJTklULCBDT01NT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWtlIG00X2RlZnVuLCBidXQgc3BsaXQgRVhQQU5TSU9OIGludG8gdHdvIHBvcnRpb25zOiBJTklUIHdoaWNoIGlzCisjIGRvbmUgb25seSB0aGUgZmlyc3QgdGltZSBOQU1FIGlzIGludm9rZWQsIGFuZCBDT01NT04gd2hpY2ggaXMKKyMgZXhwYW5kZWQgZXZlcnkgdGltZS4KKyMKKyMgRm9yIG5vdywgdGhlIENPTU1PTiBkZWZpbml0aW9uIGlzIGFsd2F5cyBtNF9kZWZpbmUnZCwgZ2l2aW5nIGFuIGV2ZW4KKyMgbGlnaHRlci13ZWlnaHQgZGVmaW5pdGlvbi4gIG00X2RlZnVuIGFsbG93cyBzZWxmLXByb3ZpZGluZywgYnV0IG9uY2UKKyMgYSBtYWNybyBpcyBwcm92aWRlZCwgbTRfcmVxdWlyZSBubyBsb25nZXIgY2FyZXMgaWYgaXQgaXMgbTRfZGVmaW5lJ2QKKyMgb3IgbTRfZGVmdW4nZC4gIG00X2RlZnVuIGFsc28gcHJvdmlkZXMgbG9jYXRpb24gdHJhY2tpbmcgdG8gaWRlbnRpZnkKKyMgZGVwZW5kZW5jeSBidWdzLCBidXQgb25jZSB0aGUgSU5JVCBoYXMgYmVlbiBleHBhbmRlZCwgd2Uga25vdyB0aGVyZQorIyBhcmUgbm8gZGVwZW5kZW5jeSBidWdzLiAgSG93ZXZlciwgaWYgYSBmdXR1cmUgdXNlIG5lZWRzIENPTU1PTiB0byBiZQorIyBtNF9kZWZ1bidkLCB3ZSBjYW4gYWRkIGEgcGFyYW1ldGVyLCBzaW1pbGFyIHRvIHRoZSB0aGlyZCBwYXJhbWV0ZXIKKyMgdG8gbTRfZGVmdW4uCittNF9kZWZpbmUoW200X2RlZnVuX2luaXRdLAorW200X2RlZmluZShbJDFdLCBbJDNbXV0pbTRfZGVmdW4oWyQxXSwKKyAgIFskMltdX200X3BvcGRlZihdbTRfZHF1b3RlKCRbMF0pWyltNF9pbmRpcihdbTRfZHF1b3RlKCRbMF0pZG5sCitbbTRfaWYoXW00X2RxdW90ZSgkWyNdKVssIFswXSwgW10sIF1tNF9kcXVvdGUoWywkXUApWykpXSwgW200X3B1c2hkZWZdKV0pCiAKIAogIyBtNF9kZWZ1bl9vbmNlKE5BTUUsIEVYUEFOU0lPTikKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEFzIG00X2RlZnVuLCBidXQgaXNzdWVzIHRoZSBFWFBBTlNJT04gb25seSBvbmNlLCBhbmQgd2FybnMgaWYgdXNlZAotIyBzZXZlcmFsIHRpbWVzLgorIyBMaWtlIG00X2RlZnVuLCBidXQgZ3VhcmFudGVlIHRoYXQgRVhQQU5TSU9OIG9ubHkgaGFwcGVucyBvbmNlCisjICh0aGVyZWFmdGVyLCB1c2luZyBOQU1FIGlzIGEgbm8tb3ApLgorIworIyBJZiBfbTRfZGl2ZXJ0X2R1bXAgaXMgZW1wdHksIHdlIGFyZSBjYWxsZWQgYXQgdGhlIHRvcCBsZXZlbDsKKyMgb3RoZXJ3aXNlLCB3ZSBtdXN0IGVuc3VyZSB0aGF0IHdlIGFyZSByZXF1aXJlZCBpbiBmcm9udCBvZiB0aGUKKyMgY3VycmVudCBkZWZ1bidkIG1hY3JvLiAgVXNlIGEgaGVscGVyIG1hY3JvIHNvIHRoYXQgRVhQQU5TSU9OIG5lZWQKKyMgb25seSBvY2N1ciBvbmNlIGluIHRoZSBkZWZpbml0aW9uIG9mIE5BTUUsIHNpbmNlIGl0IG1pZ2h0IGJlIGxhcmdlLgogbTRfZGVmaW5lKFttNF9kZWZ1bl9vbmNlXSwKLVttNF9kZWZpbmUoW200X2xvY2F0aW9uKCQxKV0sIG00X2xvY2F0aW9uKWRubAotbTRfZGVmaW5lKFskMV0sCi0JICBbbTRfcHJvdmlkZV9pZihbJDFdLAotCQkJIFttNF93YXJuKFtzeW50YXhdLCBbJDEgaW52b2tlZCBtdWx0aXBsZSB0aW1lc10pXSwKLQkJCSBbX200X2RlZnVuX3BybyhbJDFdKSQyW11fbTRfZGVmdW5fZXBpKFskMV0pXSldKV0pCitbbTRfZGVmaW5lKFttNF9sb2NhdGlvbigkMSldLCBtNF9sb2NhdGlvbildZG5sCitbbTRfZGVmaW5lKFskMV0sIFtfbTRfZGVmdW5fb25jZShbJDFdLCBbJDJdLCBtNF9pZihfbTRfZGl2ZXJ0X2R1bXAsIFtdLAorICBbW19tNF9kZWZ1bl9wcm8oWyQxXSltNF91bnF1b3RlKF0sIFspX200X2RlZnVuX2VwaShbJDFdKV1dLAorbTRfaWZkZWYoW19tNF9kaXZlcnRpbmcoWyQxXSldLCBbLV0pLCBbLV0sIFtbbTRfdW5xdW90ZShdLCBbKV1dLAorICBbW19tNF9yZXF1aXJlX2NhbGwoWyQxXSxdLCBbLCBfbTRfZGl2ZXJ0X2R1bXApXV0pKV0pXSkKKworbTRfZGVmaW5lKFtfbTRfZGVmdW5fb25jZV0sCitbbTRfcHVzaGRlZihbJDFdKSQzWyQyW11tNF9wcm92aWRlKFskMV0pXSQ0XSkKIAogCiAjIG00X3BhdHRlcm5fZm9yYmlkKEVSRSwgW1dIWV0pCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIERlY2xhcmUgdGhhdCBubyB0b2tlbiBtYXRjaGluZyB0aGUgZXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9uIEVSRQotIyBzaG91bGQgYmUgc2VlbiBpbiB0aGUgb3V0cHV0IGJ1dCBpZi4uLgorIyBEZWNsYXJlIHRoYXQgbm8gdG9rZW4gbWF0Y2hpbmcgdGhlIGZvcmJpZGRlbiBleHRlbmRlZCByZWd1bGFyCisjIGV4cHJlc3Npb24gRVJFIHNob3VsZCBiZSBzZWVuIGluIHRoZSBvdXRwdXQgdW5sZXNzLi4uCiBtNF9kZWZpbmUoW200X3BhdHRlcm5fZm9yYmlkXSwgW10pCiAKIAogIyBtNF9wYXR0ZXJuX2FsbG93KEVSRSkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIC4uLiBidXQgaWYgdGhhdCB0b2tlbiBtYXRjaGVzIHRoZSBleHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb24gRVJFLgorIyAuLi4gdGhhdCB0b2tlbiBhbHNvIG1hdGNoZXMgdGhlIGFsbG93ZWQgZXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9uIEVSRS4KICMgQm90aCB1c2VkIHZpYSB0cmFjZXMuCiBtNF9kZWZpbmUoW200X3BhdHRlcm5fYWxsb3ddLCBbXSkKIAogCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgRGVwZW5kZW5jaWVzIGJldHdlZW4gbWFjcm9zLiAgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIDExLiBEZXBlbmRlbmNpZXMgYmV0d2VlbiBtYWNyb3MuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAKIAogIyBtNF9iZWZvcmUoVEhJUy1NQUNSTy1OQU1FLCBDQUxMRUQtTUFDUk8tTkFNRSkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElzc3VlIGEgd2FybmluZyBpZiBDQUxMRUQtTUFDUk8tTkFNRSB3YXMgY2FsbGVkIGJlZm9yZSBUSElTLU1BQ1JPLU5BTUUuCiBtNF9kZWZpbmUoW200X2JlZm9yZV0sCiBbbTRfcHJvdmlkZV9pZihbJDJdLAogCSAgICAgICBbbTRfd2Fybihbc3ludGF4XSwgWyQyIHdhcyBjYWxsZWQgYmVmb3JlICQxXSldKV0pCkBAIC0xMjEyLDE4ICsyMDI5LDE5IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIElmIE5BTUUtVE8tQ0hFQ0sgaGFzIG5ldmVyIGJlZW4gZXhwYW5kZWQgKGFjdHVhbGx5LCBpZiBpdCBpcyBub3QKICMgbTRfcHJvdmlkZSdkKSwgZXhwYW5kIEJPRFktVE8tRVhQQU5EICpiZWZvcmUqIHRoZSBjdXJyZW50IG1hY3JvCi0jIGV4cGFuc2lvbi4gIE9uY2UgZXhwYW5kZWQsIGVtaXQgaXQgaW4gX200X2RpdmVydF9kdW1wLiAgS2VlcCB0cmFjawotIyBvZiB0aGUgbTRfcmVxdWlyZSBjaGFpbiBpbiBtNF9leHBhbnNpb25fc3RhY2suCisjIGV4cGFuc2lvbjsgZm9sbG93IHRoZSBleHBhbnNpb24gd2l0aCBhIG5ld2xpbmUuICBPbmNlIGV4cGFuZGVkLCBlbWl0CisjIGl0IGluIF9tNF9kaXZlcnRfZHVtcC4gIEtlZXAgdHJhY2sgb2YgdGhlIG00X3JlcXVpcmUgY2hhaW4gaW4KKyMgX200X2V4cGFuc2lvbl9zdGFjay4KICMKICMgVGhlIG5vcm1hbCBjYXNlcyBhcmU6CiAjCiAjIC0gTkFNRS1UTy1DSEVDSyA9PSBCT0RZLVRPLUVYUEFORAogIyAgIFdoaWNoIHlvdSBjYW4gdXNlIGZvciByZWd1bGFyIG1hY3JvcyB3aXRoIG9yIHdpdGhvdXQgYXJndW1lbnRzLCBlLmcuLAogIyAgICAgbTRfcmVxdWlyZShbQUNfUFJPR19DQ10sIFtBQ19QUk9HX0NDXSkKLSMgICAgIG00X3JlcXVpcmUoW0FDX0NIRUNLX0hFQURFUlMobGltaXRzLmgpXSwgW0FDX0NIRUNLX0hFQURFUlMobGltaXRzLmgpXSkKKyMgICAgIG00X3JlcXVpcmUoW0FDX0NIRUNLX0hFQURFUlModGhyZWFkcy5oKV0sIFtBQ19DSEVDS19IRUFERVJTKHRocmVhZHMuaCldKQogIyAgIHdoaWNoIGlzIGp1c3QgdGhlIHNhbWUgYXMKICMgICAgIG00X3JlcXVpcmUoW0FDX1BST0dfQ0NdKQotIyAgICAgbTRfcmVxdWlyZShbQUNfQ0hFQ0tfSEVBREVSUyhsaW1pdHMuaCldKQorIyAgICAgbTRfcmVxdWlyZShbQUNfQ0hFQ0tfSEVBREVSUyh0aHJlYWRzLmgpXSkKICMKICMgLSBCT0RZLVRPLUVYUEFORCA9PSBtNF9pbmRpcihbTkFNRS1UTy1DSEVDS10pCiAjICAgSW4gdGhlIGNhc2Ugb2YgbWFjcm9zIHdpdGggaXJyZWd1bGFyIG5hbWVzLiAgRm9yIGluc3RhbmNlOgpAQCAtMTI0MCwzMyArMjA1OCw1MSBAQAogIyAgIHN1Y2ggYXMgYEMnIHNob3VsZCBkaXNwYXRjaCB0aGUgY2FsbCB0byBgQUNfTEFOR19DT01QSUxFUihDKScuICBCdXQgdGhpcwogIyAgIGBleHRlbnNpb24nIHByZXZlbnRzIGBBQ19MQU5HX0NPTVBJTEVSJyBmcm9tIGhhdmluZyBhY3R1YWwgYXJndW1lbnRzIHRoYXQKICMgICBpdCBwYXNzZXMgdG8gYEFDX0xBTkdfQ09NUElMRVIoQyknLgorIworIyBUaGlzIGlzIGNhbGxlZCBmcmVxdWVudGx5LCBzbyBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIG1hY3JvIGludm9jYXRpb25zCisjIGJ5IGF2b2lkaW5nIGRubCBhbmQgb3RoZXIgb3ZlcmhlYWQgb24gdGhlIGNvbW1vbiBwYXRoLgogbTRfZGVmaW5lKFttNF9yZXF1aXJlXSwKIFttNF9pZmRlZihbX200X2V4cGFuZGluZygkMSldLAotCSBbbTRfZmF0YWwoWyQwOiBjaXJjdWxhciBkZXBlbmRlbmN5IG9mICQxXSldKWRubAotbTRfaWZuZGVmKFtfbTRfZGl2ZXJ0X2R1bXBdLAotCSAgW200X2ZhdGFsKFskMCgkMSk6IGNhbm5vdCBiZSB1c2VkIG91dHNpZGUgb2YgYW4gbTRfZGVmdW4nZCBtYWNyb10pXSlkbmwKLW00X3Byb3ZpZGVfaWYoWyQxXSwKLQkgICAgICBbXSwKLQkgICAgICBbX200X3JlcXVpcmVfY2FsbChbJDFdLCBbJDJdKV0pZG5sCi1dKQorICBbbTRfZmF0YWwoWyQwOiBjaXJjdWxhciBkZXBlbmRlbmN5IG9mICQxXSldKV1kbmwKK1ttNF9pZihfbTRfZGl2ZXJ0X2R1bXAsIFtdLAorICBbbTRfZmF0YWwoWyQwKCQxKTogY2Fubm90IGJlIHVzZWQgb3V0c2lkZSBvZiBhbiBdZG5sCittNF9pZihbJDBdLCBbbTRfcmVxdWlyZV0sIFtbbTRfZGVmdW5dXSwgW1tBQ19ERUZVTl1dKVsnZCBtYWNyb10pXSldZG5sCitbbTRfcHJvdmlkZV9pZihbJDFdLCBbbTRfc2V0X2NvbnRhaW5zKFtfbTRfcHJvdmlkZV0sIFskMV0sCisgICAgW19tNF9yZXF1aXJlX2NoZWNrKFskMV0sIF9tNF9kZWZuKFttNF9wcm92aWRlKCQxKV0pLCBbJDBdKV0sIFttNF9pZ25vcmVdKV0sCisgIFtfbTRfcmVxdWlyZV9jYWxsXSkoWyQxXSwgWyQyXSwgX200X2RpdmVydF9kdW1wKV0pCiAKIAotIyBfbTRfcmVxdWlyZV9jYWxsKEJPRFktVE8tRVhQQU5EKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBJZiBtNF9yZXF1aXJlIGRlY2lkZXMgdG8gZXhwYW5kIHRoZSBib2R5LCBpdCBjYWxscyB0aGlzIG1hY3JvLgorIyBfbTRfcmVxdWlyZV9jYWxsKE5BTUUtVE8tQ0hFQ0ssIFtCT0RZLVRPLUVYUEFORCA9IE5BTUUtVE8tQ0hFQ0tdLAorIyAgICAgICAgICAgICAgICAgIERJVkVSU0lPTi1OVU1CRVIpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmIG00X3JlcXVpcmUgZGVjaWRlcyB0byBleHBhbmQgdGhlIGJvZHksIGl0IGNhbGxzIHRoaXMgbWFjcm8uICBUaGUKKyMgZXhwYW5zaW9uIGlzIHBsYWNlZCBpbiBESVZFUlNJT04tTlVNQkVSLgorIworIyBUaGlzIGlzIGNhbGxlZCBmcmVxdWVudGx5LCBzbyBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIG1hY3JvIGludm9jYXRpb25zCisjIGJ5IGF2b2lkaW5nIGRubCBhbmQgb3RoZXIgb3ZlcmhlYWQgb24gdGhlIGNvbW1vbiBwYXRoLgogbTRfZGVmaW5lKFtfbTRfcmVxdWlyZV9jYWxsXSwKLVttNF9kZWZpbmUoW19tNF9kaXZlcnRfZ3Jvd10sIG00X2RlY3IoX200X2RpdmVydF9ncm93KSlkbmwKLW00X2RpdmVydF9wdXNoKF9tNF9kaXZlcnRfZ3JvdylkbmwKLW00X2RlZmF1bHQoWyQyXSwgWyQxXSkKLW00X3Byb3ZpZGVfaWYoWyQxXSwKLQkgICAgICBbXSwKLQkgICAgICBbbTRfd2Fybihbc3ludGF4XSwKLQkJICAgICAgIFskMSBpcyBtNF9yZXF1aXJlJ2QgYnV0IG5vdCBtNF9kZWZ1bidkXSldKWRubAotbTRfZGl2ZXJ0KG00X2RlZm4oW19tNF9kaXZlcnRfZHVtcF0pKWRubAotbTRfdW5kaXZlcnQoX200X2RpdmVydF9ncm93KWRubAotbTRfZGl2ZXJ0X3BvcChfbTRfZGl2ZXJ0X2dyb3cpZG5sCi1tNF9kZWZpbmUoW19tNF9kaXZlcnRfZ3Jvd10sIG00X2luY3IoX200X2RpdmVydF9ncm93KSlkbmwKLV0pCitbbTRfcHVzaGRlZihbX200X2RpdmVydF9ncm93XSwgbTRfZGVjcihfbTRfZGl2ZXJ0X2dyb3cpKV1kbmwKK1ttNF9wdXNoZGVmKFtfbTRfZGl2ZXJ0aW5nKFskMV0pXSltNF9wdXNoZGVmKFtfbTRfZGl2ZXJ0aW5nXSwgWyQxXSldZG5sCitbbTRfZGl2ZXJ0X3B1c2goX200X2RpdmVydF9ncm93LCBbLV0pXWRubAorW200X2lmKFskMl0sIFtdLCBbJDFdLCBbJDJdKQorbTRfcHJvdmlkZV9pZihbJDFdLCBbbTRfc2V0X3JlbW92ZShbX200X3Byb3ZpZGVdLCBbJDFdKV0sCisgIFttNF93YXJuKFtzeW50YXhdLCBbJDEgaXMgbTRfcmVxdWlyZSdkIGJ1dCBub3QgbTRfZGVmdW4nZF0pXSldZG5sCitbX200X2RpdmVydF9yYXcoJDMpX200X3VuZGl2ZXJ0KF9tNF9kaXZlcnRfZ3JvdyldZG5sCitbbTRfZGl2ZXJ0X3BvcChfbTRfZGl2ZXJ0X2dyb3cpX200X3BvcGRlZihbX200X2RpdmVydF9ncm93XSwKK1tfbTRfZGl2ZXJ0aW5nKFskMV0pXSwgW19tNF9kaXZlcnRpbmddKV0pCisKKworIyBfbTRfcmVxdWlyZV9jaGVjayhOQU1FLVRPLUNIRUNLLCBPV05FUiwgQ0FMTEVSKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBOQU1FLVRPLUNIRUNLIGhhcyBiZWVuIGlkZW50aWZpZWQgYXMgcHJldmlvdXNseSBleHBhbmRlZCBpbiB0aGUKKyMgZGl2ZXJzaW9uIG93bmVkIGJ5IE9XTkVSLiAgSWYgdGhpcyBpcyBhIHByb2JsZW0sIHdhcm4gb24gYmVoYWxmIG9mCisjIENBTExFUiBhbmQgcmV0dXJuIF9tNF9yZXF1aXJlX2NhbGw7IG90aGVyd2lzZSByZXR1cm4gbTRfaWdub3JlLgorbTRfZGVmaW5lKFtfbTRfcmVxdWlyZV9jaGVja10sCitbbTRfaWYoX200X2RlZm4oW19tNF9kaXZlcnRpbmddKSwgWyQyXSwgW200X2lnbm9yZV0sCisgICAgICAgbTRfaWZkZWYoW19tNF9kaXZlcnRpbmcoWyQyXSldLCBbLV0pLCBbLV0sIFttNF93YXJuKFtzeW50YXhdLAorICAgWyQzOiBgJDEnIHdhcyBleHBhbmRlZCBiZWZvcmUgaXQgd2FzIHJlcXVpcmVkCitodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYvbWFudWFsL2F1dG9jb25mLmh0bWwjRXhwYW5kZWQtQmVmb3JlLVJlcXVpcmVkXSlfbTRfcmVxdWlyZV9jYWxsXSwKKyAgICAgICBbbTRfaWdub3JlXSldKQogCiAKICMgX200X2RpdmVydF9ncm93CkBAIC0xMjgwLDE1ICsyMTE2LDE3IEBACiAjIElmIFRFWFQgaGFzIG5ldmVyIGJlZW4gZXhwYW5kZWQsIGV4cGFuZCBpdCAqaGVyZSouICBVc2UgV0lUTkVTUyBhcwogIyBhcyBhIG1lbW9yeSB0aGF0IFRFWFQgaGFzIGFscmVhZHkgYmVlbiBleHBhbmRlZC4KIG00X2RlZmluZShbbTRfZXhwYW5kX29uY2VdLAotW200X3Byb3ZpZGVfaWYobTRfaWZ2YWwoWyQyXSwgW1skMl1dLCBbWyQxXV0pLAorW200X3Byb3ZpZGVfaWYobTRfZGVmYXVsdF9xdW90ZWQoWyQyXSwgWyQxXSksCiAJICAgICAgIFtdLAotCSAgICAgICBbbTRfcHJvdmlkZShtNF9pZnZhbChbJDJdLCBbWyQyXV0sIFtbJDFdXSkpW10kMV0pXSkKKwkgICAgICAgW200X3Byb3ZpZGUobTRfZGVmYXVsdF9xdW90ZWQoWyQyXSwgWyQxXSkpW10kMV0pXSkKIAogCiAjIG00X3Byb3ZpZGUoTUFDUk8tTkFNRSkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogbTRfZGVmaW5lKFttNF9wcm92aWRlXSwKLVttNF9kZWZpbmUoW200X3Byb3ZpZGUoJDEpXSldKQorW200X2lmZGVmKFttNF9wcm92aWRlKCQxKV0sIFtdLAorW200X3NldF9hZGQoW19tNF9wcm92aWRlXSwgWyQxXSwgW200X2RlZmluZShbbTRfcHJvdmlkZSgkMSldLAorICBtNF9pZmRlZihbX200X2RpdmVydGluZ10sIFtfbTRfZGVmbihbX200X2RpdmVydGluZ10pXSkpXSldKV0pCiAKIAogIyBtNF9wcm92aWRlX2lmKE1BQ1JPLU5BTUUsIElGLVBST1ZJREVELCBJRi1OT1QtUFJPVklERUQpCkBAIC0xMzAyLDkgKzIxNDAsOSBAQAogCSAgWyQyXSwgWyQzXSldKQogCiAKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyA5LiBUZXh0IHByb2Nlc3NpbmcuICAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgMTIuIFRleHQgcHJvY2Vzc2luZy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKIAogCiAjIG00X2NyX2xldHRlcnMKQEAgLTEzMjQsOCArMjE2MiwxNyBAQAogbTRfZGVmaW5lKFttNF9jcl9kaWdpdHNdLCBbMDEyMzQ1Njc4OV0pCiAKIAotIyBtNF9jcl9zeW1ib2xzMSAmIG00X2NyX3N5bWJvbHMyCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgbTRfY3JfYWxudW0KKyMgLS0tLS0tLS0tLS0KK200X2RlZmluZShbbTRfY3JfYWxudW1dLAorbTRfZGVmbihbbTRfY3JfTGV0dGVyc10pZG5sCittNF9kZWZuKFttNF9jcl9kaWdpdHNdKWRubAorKQorCisKKyMgbTRfY3Jfc3ltYm9sczEKKyMgbTRfY3Jfc3ltYm9sczIKKyMgLS0tLS0tLS0tLS0tLS0KIG00X2RlZmluZShbbTRfY3Jfc3ltYm9sczFdLAogbTRfZGVmbihbbTRfY3JfTGV0dGVyc10pZG5sCiBfKQpAQCAtMTMzNSw2ICsyMTgyLDYzIEBACiBtNF9kZWZuKFttNF9jcl9kaWdpdHNdKWRubAogKQogCisjIG00X2NyX2FsbAorIyAtLS0tLS0tLS0KKyMgVGhlIGNoYXJhY3RlciByYW5nZSByZXByZXNlbnRpbmcgZXZlcnl0aGluZywgd2l0aCBgLScgYXMgdGhlIGxhc3QKKyMgY2hhcmFjdGVyLCBzaW5jZSBpdCBpcyBzcGVjaWFsIHRvIG00X3RyYW5zbGl0LiAgVXNlIHdpdGggY2FyZSwgYmVjYXVzZQorIyBpdCBjb250YWlucyBjaGFyYWN0ZXJzIHNwZWNpYWwgdG8gTTQgKGZvcnR1bmF0ZWx5LCBib3RoIEFTQ0lJIGFuZCBFQkNESUMKKyMgaGF2ZSBbXSBpbiBvcmRlciwgc28gbTRfZGVmbihbbTRfY3JfYWxsXSkgcmVtYWlucyBhIHZhbGlkIHN0cmluZykuICBJdAorIyBhbHNvIGNvbnRhaW5zIGNoYXJhY3RlcnMgc3BlY2lhbCB0byB0ZXJtaW5hbHMsIHNvIGl0IHNob3VsZCBuZXZlciBiZQorIyBkaXNwbGF5ZWQgaW4gYW4gZXJyb3IgbWVzc2FnZS4gIEFsc28sIGF0dGVtcHRzIHRvIG1hcCBbIGFuZCBdIHRvIG90aGVyCisjIGNoYXJhY3RlcnMgdmlhIG00X3RyYW5zbGl0IG11c3QgZGVhbCB3aXRoIHRoZSBmYWN0IHRoYXQgbTRfdHJhbnNsaXQgZG9lcworIyBub3QgYWRkIHF1b3RlcyB0byB0aGUgb3V0cHV0LgorIworIyBJbiBFQkNESUMsICQgaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgKiwgd2hpY2ggbGVhZHMgdG8gcHJvYmxlbXMKKyMgaWYgbTRfY3JfYWxsIGlzIGlubGluZWQgaW50byBhIG1hY3JvIGRlZmluaXRpb247IHNvIHN3YXAgdGhlbS4KKyMKKyMgSXQgaXMgbWFpbmx5IHVzZWZ1bCBpbiBnZW5lcmF0aW5nIGludmVydGVkIGNoYXJhY3RlciByYW5nZSBtYXBzLCBmb3IgdXNlCisjIGluIHBsYWNlcyB3aGVyZSBtNF90cmFuc2xpdCBpcyBmYXN0ZXIgdGhhbiBhbiBlcXVpdmFsZW50IG00X2JwYXRzdWJzdDsKKyMgdGhlIHJlZ2V4IGBbXmEtel0nIGlzIGVxdWl2YWxlbnQgdG86CisjICBtNF90cmFuc2xpdChtNF9kcXVvdGUobTRfZGVmbihbbTRfY3JfYWxsXSkpLCBbYS16XSkKK200X2RlZmluZShbbTRfY3JfYWxsXSwKK200X3RyYW5zbGl0KG00X2RxdW90ZShtNF9mb3JtYXQobTRfZHF1b3RlKG00X2ZvcigKKyAgLDEsMjU1LCxbWyVjXV0pKW00X2ZvcihbaV0sMSwyNTUsLFssaV0pKSksIFskKi1dLCBbKiRdKS0pCisKKworIyBfbTRfZGVmaW5lX2NyX25vdChDQVRFR09SWSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBtNF9jcl9ub3RfQ0FURUdPUlkgYXMgdGhlIGludmVyc2Ugb2YgbTRfY3JfQ0FURUdPUlkuCittNF9kZWZpbmUoW19tNF9kZWZpbmVfY3Jfbm90XSwKK1ttNF9kZWZpbmUoW200X2NyX25vdF8kMV0sCisJICAgbTRfdHJhbnNsaXQobTRfZHF1b3RlKG00X2RlZm4oW200X2NyX2FsbF0pKSwKKwkJICAgICAgIG00X2RlZm4oW200X2NyXyQxXSkpKV0pCisKKworIyBtNF9jcl9ub3RfbGV0dGVycworIyBtNF9jcl9ub3RfTEVUVEVSUworIyBtNF9jcl9ub3RfTGV0dGVycworIyBtNF9jcl9ub3RfZGlnaXRzCisjIG00X2NyX25vdF9hbG51bQorIyBtNF9jcl9ub3Rfc3ltYm9sczEKKyMgbTRfY3Jfbm90X3N5bWJvbHMyCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBJbnZlcnNlIGNoYXJhY3RlciBzZXRzCitfbTRfZGVmaW5lX2NyX25vdChbbGV0dGVyc10pCitfbTRfZGVmaW5lX2NyX25vdChbTEVUVEVSU10pCitfbTRfZGVmaW5lX2NyX25vdChbTGV0dGVyc10pCitfbTRfZGVmaW5lX2NyX25vdChbZGlnaXRzXSkKK19tNF9kZWZpbmVfY3Jfbm90KFthbG51bV0pCitfbTRfZGVmaW5lX2NyX25vdChbc3ltYm9sczFdKQorX200X2RlZmluZV9jcl9ub3QoW3N5bWJvbHMyXSkKKworCisjIG00X25ld2xpbmUoW1NUUklOR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4cGFuZHMgdG8gYSBuZXdsaW5lLCBwb3NzaWJseSBmb2xsb3dlZCBieSBTVFJJTkcuICBFeGlzdHMgbW9zdGx5IGZvcgorIyBmb3JtYXR0aW5nIHJlYXNvbnMuCittNF9kZWZpbmUoW200X25ld2xpbmVdLCBbCiskMV0pCisKIAogIyBtNF9yZV9lc2NhcGUoU1RSSU5HKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTM2NiwxNiArMjI3MCwxOSBAQAogIyBtNF90b2xvd2VyKFNUUklORykKICMgbTRfdG91cHBlcihTVFJJTkcpCiAjIC0tLS0tLS0tLS0tLS0tLS0tLQotIyBUaGVzZSBtYWNyb3MgbG93ZXJjYXNlIGFuZCB1cHBlcmNhc2Ugc3RyaW5ncy4KKyMgVGhlc2UgbWFjcm9zIGNvbnZlcnQgU1RSSU5HIHRvIGxvd2VyY2FzZSBvciB1cHBlcmNhc2UuCisjCisjIFJhdGhlciB0aGFuIGV4cGFuZCB0aGUgbTRfZGVmbiBlYWNoIHRpbWUsIHdlIGlubGluZSB0aGVtIHVwIGZyb250LgogbTRfZGVmaW5lKFttNF90b2xvd2VyXSwKLVttNF90cmFuc2xpdChbJDFdLCBtNF9kZWZuKFttNF9jcl9MRVRURVJTXSksIG00X2RlZm4oW200X2NyX2xldHRlcnNdKSldKQorW200X3RyYW5zbGl0KFtbJDFdXSwgXW00X2RxdW90ZShtNF9kZWZuKFttNF9jcl9MRVRURVJTXSkpWywKKwkJICAgICBdbTRfZHF1b3RlKG00X2RlZm4oW200X2NyX2xldHRlcnNdKSlbKV0pCiBtNF9kZWZpbmUoW200X3RvdXBwZXJdLAotW200X3RyYW5zbGl0KFskMV0sIG00X2RlZm4oW200X2NyX2xldHRlcnNdKSwgbTRfZGVmbihbbTRfY3JfTEVUVEVSU10pKV0pCitbbTRfdHJhbnNsaXQoW1skMV1dLCBdbTRfZHF1b3RlKG00X2RlZm4oW200X2NyX2xldHRlcnNdKSlbLAorCQkgICAgIF1tNF9kcXVvdGUobTRfZGVmbihbbTRfY3JfTEVUVEVSU10pKVspXSkKIAogCiAjIG00X3NwbGl0KFNUUklORywgW1JFR0VYUF0pCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jCiAjIFNwbGl0IFNUUklORyBpbnRvIGFuIG00IGxpc3Qgb2YgcXVvdGVkIGVsZW1lbnRzLiAgVGhlIGVsZW1lbnRzIGFyZQogIyBxdW90ZWQgd2l0aCBbIGFuZCBdLiAgQmVnaW5uaW5nIHNwYWNlcyBhbmQgZW5kIHNwYWNlcyAqYXJlIGtlcHQqLgogIyBVc2UgbTRfc3RyaXAgdG8gcmVtb3ZlIHRoZW0uCkBAIC0xMzg2LDMwICsyMjkzLDU2IEBACiAjCiAjIFBheSBhdHRlbnRpb24gdG8gdGhlIG00X2NoYW5nZXF1b3Rlcy4gIFdoZW4gbTQgcmVhZHMgdGhlIGRlZmluaXRpb24gb2YKICMgbTRfc3BsaXQsIGl0IHN0aWxsIGhhcyBxdW90ZXMgc2V0IHRvIFsgYW5kIF0uICBMdWNraWx5LCB0aGVzZSBhcmUgbWF0Y2hlZAotIyBpbiB0aGUgbWFjcm8gYm9keSwgc28gdGhlIGRlZmluaXRpb24gaXMgc3RvcmVkIGNvcnJlY3RseS4KKyMgaW4gdGhlIG1hY3JvIGJvZHksIHNvIHRoZSBkZWZpbml0aW9uIGlzIHN0b3JlZCBjb3JyZWN0bHkuICBVc2UgdGhlIHNhbWUKKyMgYWx0ZXJuYXRlIHF1b3RlcyBhcyBtNF9ub3F1b3RlOyBpdCBtdXN0IGJlIHVubGlrZWx5IHRvIGFwcGVhciBpbiAkMS4KICMKICMgQWxzbywgbm90aWNlIHRoYXQgJDEgaXMgcXVvdGVkIHR3aWNlLCBzaW5jZSB3ZSB3YW50IHRoZSByZXN1bHQgdG8KICMgYmUgcXVvdGVkLiAgVGhlbiB5b3Ugc2hvdWxkIHVuZGVyc3RhbmQgdGhhdCB0aGUgYXJndW1lbnQgb2YKLSMgcGF0c3Vic3QgaXMgYGBTVFJJTkcnJyAoaS5lLiwgd2l0aCBhZGRpdGlvbmFsIGBgIGFuZCAnJykuCisjIHBhdHN1YnN0IGlzIC09PHsoU1RSSU5HKX0+PS0gKGkuZS4sIHdpdGggYWRkaXRpb25hbCAtPTx7KCBhbmQgKX0+PS0pLgogIwogIyBUaGlzIG1hY3JvIGlzIHNhZmUgb24gYWN0aXZlIHN5bWJvbHMsIGkuZS46CiAjICAgbTRfZGVmaW5lKGFjdGl2ZSwgQUNUSVZFKQogIyAgIG00X3NwbGl0KFthY3RpdmUgYWN0aXZlIF0pZW5kCiAjICAgPT4gW2FjdGl2ZV0sIFthY3RpdmVdLCBbXWVuZAotCisjCisjIE9wdGltaXplIG9uIHJlZ2V4IG9mIGAgJyAoc3BhY2UpLCBzaW5jZSBtNF9mb3JlYWNoX3cgYWxyZWFkeSBndWFyYW50ZWVzCisjIHRoYXQgdGhlIGxpc3QgY29udGFpbnMgc2luZ2xlIHNwYWNlIHNlcGFyYXRvcnMsIGFuZCBhIGNvbW1vbiBjYXNlIGlzCisjIHNwbGl0dGluZyBhIHNpbmdsZS1lbGVtZW50IGxpc3QuICBUaGlzIG1hY3JvIGlzIGNhbGxlZCBmcmVxdWVudGx5LAorIyBzbyBhdm9pZCB1bm5lY2Vzc2FyeSBkbmwgaW5zaWRlIHRoZSBkZWZpbml0aW9uLgogbTRfZGVmaW5lKFttNF9zcGxpdF0sCi1bbTRfaWZ2YWwoWyQxXSwgW19tNF9zcGxpdCgkQCldKV0pCitbbTRfaWYoWyQxXSwgW10sIFtdLAorICAgICAgIFskMl0sIFsgXSwgW200X2lmKG00X2luZGV4KFskMV0sIFsgXSksIFstMV0sIFtbWyQxXV1dLAorCQkJIFtfJDAoWyQxXSwgWyQyXSwgWywgXSldKV0sCisgICAgICAgWyQyXSwgW10sIFtfJDAoWyQxXSwgW1sJIF0rXSwgWywgXSldLAorICAgICAgIFtfJDAoWyQxXSwgWyQyXSwgWywgXSldKV0pCiAKIG00X2RlZmluZShbX200X3NwbGl0XSwKLVttNF9jaGFuZ2VxdW90ZShgYCwgJycpZG5sCi1bZG5sIENhbid0IHVzZSBtNF9kZWZhdWx0IGhlcmUgaW5zdGVhZCBvZiBtNF9pZiwgYmVjYXVzZSBtNF9kZWZhdWx0IHVzZXMKLWRubCBbIGFuZCBdIGFzIHF1b3Rlcy4KLW00X2JwYXRzdWJzdChgYGBgJDEnJycnLAotCSAgICAgbTRfaWYoYGAkMicnLCwgYGBbCSBdKycnLCBgYCQyJycpLAotCSAgICAgYGBdLCBbJycpXWRubAotbTRfY2hhbmdlcXVvdGUoWywgXSldKQorW200X2NoYW5nZXF1b3RlKFstPTx7KF0sWyl9Pj0tXSldZG5sCitbW200X2JwYXRzdWJzdCgtPTx7KC09PHsoJDEpfT49LSl9Pj0tLCAtPTx7KCQyKX0+PS0sCisJICAgICAgIC09PHsoXSQzWyl9Pj0tKV1tNF9jaGFuZ2VxdW90ZShbLCBdKV0pCiAKIAorIyBtNF9jaG9tcChTVFJJTkcpCisjIG00X2Nob21wX2FsbChTVFJJTkcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJldHVybiBTVFJJTkcgcXVvdGVkLCBidXQgd2l0aG91dCBhIHRyYWlsaW5nIG5ld2xpbmUuICBtNF9jaG9tcAorIyByZW1vdmVzIGF0IG1vc3Qgb25lIG5ld2xpbmUsIHdoaWxlIG00X2Nob21wX2FsbCByZW1vdmVzIGFsbAorIyBjb25zZWN1dGl2ZSB0cmFpbGluZyBuZXdsaW5lcy4gIEVtYmVkZGVkIG5ld2xpbmVzIGFyZSBub3QgdG91Y2hlZCwKKyMgYW5kIGEgdHJhaWxpbmcgYmFja3NsYXNoLW5ld2xpbmUgbGVhdmVzIGp1c3QgYSB0cmFpbGluZyBiYWNrc2xhc2guCisjCisjIG00X2JyZWdleHAgaXMgc2xvd2VyIHRoYW4gbTRfaW5kZXgsIGFuZCB3ZSBkb24ndCBhbHdheXMgd2FudCB0bworIyByZW1vdmUgYWxsIG5ld2xpbmVzOyBoZW5jZSB0aGUgdHdvIHZhcmlhbnRzLiAgV2UgbWFzc2FnZSBjaGFyYWN0ZXJzCisjIHRvIGdpdmUgYSBuaWNlciBwYXR0ZXJuIHRvIG1hdGNoLCBwYXJ0aWN1bGFybHkgc2luY2UgbTRfYnJlZ2V4cCBpcworIyBsaW5lLW9yaWVudGVkLiAgQm90aCB2ZXJzaW9ucyBtdXN0IGd1YXJhbnRlZSBhIG1hdGNoLCB0byBhdm9pZCBidWdzCisjIHdpdGggcHJlY2lzaW9uIC0xIGluIG00X2Zvcm1hdCBpbiBvbGRlciBtNC4KK200X2RlZmluZShbbTRfY2hvbXBdLAorW200X2Zvcm1hdChbWyUuKnNdXSwgbTRfaW5kZXgobTRfdHJhbnNsaXQoW1skMV1dLCBbCisvLl0sIFsvICBdKVsuLy5dLCBbLy5dKSwgWyQxXSldKQorCittNF9kZWZpbmUoW200X2Nob21wX2FsbF0sCitbbTRfZm9ybWF0KFtbJS4qc11dLCBtNF9icmVnZXhwKG00X3RyYW5zbGl0KFtbJDFdXSwgWworL10sIFsvIF0pLCBbLyokXSksIFskMV0pXSkKKwogCiAjIG00X2ZsYXR0ZW4oU1RSSU5HKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE0MjEsMTAgKzIzNTQsMTQgQEAKICMgICAgYWN0XAogIyAgICBpdmVdKWVuZAogIyAgICA9PiBhY3RpdmUgYWN0aXZlZW5kCisjCisjIEluIG00LCBtNF9icGF0c3Vic3QgaXMgZXhwZW5zaXZlLCBzbyBmaXJzdCBjaGVjayBmb3IgYSBuZXdsaW5lLgogbTRfZGVmaW5lKFttNF9mbGF0dGVuXSwKLVttNF90cmFuc2xpdChtNF9icGF0c3Vic3QoW1tbJDFdXV0sIFtcXAorW200X2lmKG00X2luZGV4KFskMV0sIFsKK10pLCBbLTFdLCBbWyQxXV0sCisgICAgICAgW200X3RyYW5zbGl0KG00X2JwYXRzdWJzdChbW1skMV1dXSwgW1xcCiBdKSwgWwotXSwgWyBdKV0pCitdLCBbIF0pXSldKQogCiAKICMgbTRfc3RyaXAoU1RSSU5HKQpAQCAtMTQzNywxOCArMjM3NCwyMCBAQAogIyAgICBtNF9zdHJpcChbICBhY3RpdmUgPHRhYj4gPHRhYj5hY3RpdmUgXSllbmQKICMgICAgPT4gYWN0aXZlIGFjdGl2ZWVuZAogIwotIyBCZWNhdXNlIHdlIHdhbnQgdG8gcHJlc2VydmUgYWN0aXZlIHN5bWJvbHMsIFNUUklORyBtdXN0IGJlIGRvdWJsZS1xdW90ZWQuCisjIEZpcnN0LCBub3RpY2UgdGhhdCB3ZSBndWFyYW50ZWUgdHJhaWxpbmcgc3BhY2UuICBXaHk/ICBCZWNhdXNlIHJlZ3VsYXIKKyMgZXhwcmVzc2lvbnMgYXJlIGdyZWVkeSwgYW5kIGAuKiA/JyB3b3VsZCBhbHdheXMgZ3JvdXAgdGhlIHNwYWNlIGludG8gdGhlCisjIC4qIHBvcnRpb24uICBUaGUgYWxnb3JpdGhtIGlzIHNpbXBsZXIgYnkgYXZvaWRpbmcgYD8nIGF0IHRoZSBlbmQuICBUaGUKKyMgYWxnb3JpdGhtIGNvcnJlY3RseSBzdHJpcHMgZXZlcnl0aGluZyBpZiBTVFJJTkcgaXMganVzdCBgICcuCiAjCi0jIFRoZW4gbm90aWNlIHRoZSAyIGxhc3QgcGF0dGVybnM6IHRoZXkgYXJlIGluIGNoYXJnZSBvZiByZW1vdmluZyB0aGUKKyMgVGhlbiBub3RpY2UgdGhlIHNlY29uZCBwYXR0ZXJuOiBpdCBpcyBpbiBjaGFyZ2Ugb2YgcmVtb3ZpbmcgdGhlCiAjIGxlYWRpbmcvdHJhaWxpbmcgc3BhY2VzLiAgV2h5IG5vdCBqdXN0IGBbXiBdJz8gIEJlY2F1c2UgdGhleSBhcmUKLSMgYXBwbGllZCB0byBkb3VibHkgcXVvdGVkIHN0cmluZ3MsIGkuZS4gbW9yZSBvciBsZXNzIFtbU1RSSU5HXV0uICBTbwotIyBpZiB0aGVyZSBpcyBhIGxlYWRpbmcgc3BhY2UgaW4gU1RSSU5HLCB0aGVuIGl0IGlzIHRoZSAqdGhpcmQqCi0jIGNoYXJhY3Rlciwgc2luY2UgdGhlcmUgYXJlIHR3byBsZWFkaW5nIGBbJzsgZXF1YWxseSBmb3IgdGhlIGxhc3QgcGF0dGVybi4KKyMgYXBwbGllZCB0byBvdmVyLXF1b3RlZCBzdHJpbmdzLCBpLmUuIG1vcmUgb3IgbGVzcyBbU1RSSU5HXSwgZHVlCisjIHRvIHRoZSBsaW1pdGF0aW9ucyBvZiBtNF9icGF0c3Vic3RzLiAgU28gdGhlIGxlYWRpbmcgc3BhY2UgaW4gU1RSSU5HCisjIGlzIHRoZSAqc2Vjb25kKiBjaGFyYWN0ZXI7IGVxdWFsbHkgZm9yIHRoZSB0cmFpbGluZyBzcGFjZS4KIG00X2RlZmluZShbbTRfc3RyaXBdLAotW200X2JwYXRzdWJzdHMoW1skMV1dLAorW200X2JwYXRzdWJzdHMoWyQxIF0sCiAJICAgICAgIFtbCSBdK10sIFsgXSwKLQkgICAgICAgW15cKC4uXCkgXSwgICAgW1wxXSwKLQkgICAgICAgWyBcKC4uXCkkXSwgICAgW1wxXSldKQorCSAgICAgICBbXi4gP1woLipcKSAuJF0sIFtbW1wxXV1dKV0pCiAKIAogIyBtNF9ub3JtYWxpemUoU1RSSU5HKQpAQCAtMTQ3MCwxMyArMjQwOSw1NiBAQAogCiAjIG00X2pvaW4oU0VQLCBBUkcxLCBBUkcyLi4uKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUHJvZHVjZSBBUkcxU0VQQVJHMi4uLlNFUEFSR24uCi1tNF9kZWZ1bihbbTRfam9pbl0sCi1bbTRfY2FzZShbJCNdLAotCSBbMV0sIFtdLAotCSBbMl0sIFtbJDJdXSwKLQkgW1skMl1bJDFdJDAoWyQxXSwgbTRfc2hpZnRuKDIsICRAKSldKV0pCisjIFByb2R1Y2UgQVJHMVNFUEFSRzIuLi5TRVBBUkduLiAgQXZvaWQgYmFjay10by1iYWNrIFNFUCB3aGVuIGEgZ2l2ZW4gQVJHCisjIGlzIHRoZSBlbXB0eSBzdHJpbmcuICBObyBleHBhbnNpb24gaXMgcGVyZm9ybWVkIG9uIFNFUCBvciBBUkdzLgorIworIyBTaW5jZSB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBqb2luIGNhbiBiZSBhcmJpdHJhcmlseSBsb25nLCB3ZQorIyB3YW50IHRvIGF2b2lkIGhhdmluZyBtb3JlIHRoYW4gb25lICRAIGluIHRoZSBtYWNybyBkZWZpbml0aW9uOworIyBvdGhlcndpc2UsIHRoZSBleHBhbnNpb24gd291bGQgcmVxdWlyZSB0d2ljZSB0aGUgbWVtb3J5IG9mIHRoZSBhbHJlYWR5CisjIGxvbmcgbGlzdC4gIEhlbmNlLCBtNF9qb2luIG1lcmVseSBsb29rcyBmb3IgdGhlIGZpcnN0IG5vbi1lbXB0eSBlbGVtZW50LAorIyBhbmQgb3V0cHV0cyBqdXN0IHRoYXQgZWxlbWVudDsgd2hpbGUgX200X2pvaW4gbG9va3MgZm9yIGFsbCBub24tZW1wdHkKKyMgZWxlbWVudHMsIGFuZCBvdXRwdXRzIHRoZW0gZm9sbG93aW5nIGEgc2VwYXJhdG9yLiAgVGhlIGZpbmFsIHRyaWNrIHRvCisjIG5vdGUgaXMgdGhhdCB3ZSBkZWNpZGUgYmV0d2VlbiByZWN1cnNpbmcgd2l0aCAkMCBvciBfJDAgYmFzZWQgb24gdGhlCisjIG5lc3RlZCBtNF9pZiBlbmRpbmcgd2l0aCBgXycuCisjCisjIFBsZWFzZSBrZWVwIGZvcmVhY2gubTQgaW4gc3luYyB3aXRoIGFueSBhZGp1c3RtZW50cyBtYWRlIGhlcmUuCittNF9kZWZpbmUoW200X2pvaW5dLAorW200X2lmKFskI10sIFsxXSwgW10sCisgICAgICAgWyQjXSwgWzJdLCBbWyQyXV0sCisgICAgICAgW200X2lmKFskMl0sIFtdLCBbXSwgW1skMl1fXSkkMChbJDFdLCBtNF9zaGlmdDIoJEApKV0pXSkKK200X2RlZmluZShbX200X2pvaW5dLAorW200X2lmKFskIyQyXSwgWzJdLCBbXSwKKyAgICAgICBbbTRfaWYoWyQyXSwgW10sIFtdLCBbWyQxJDJdXSkkMChbJDFdLCBtNF9zaGlmdDIoJEApKV0pXSkKIAorIyBtNF9qb2luYWxsKFNFUCwgQVJHMSwgQVJHMi4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgQVJHMVNFUEFSRzIuLi5TRVBBUkduLiAgQW4gZW1wdHkgQVJHIHJlc3VsdHMgaW4gYmFjay10by1iYWNrIFNFUC4KKyMgTm8gZXhwYW5zaW9uIGlzIHBlcmZvcm1lZCBvbiBTRVAgb3IgQVJHcy4KKyMKKyMgUGxlYXNlIGtlZXAgZm9yZWFjaC5tNCBpbiBzeW5jIHdpdGggYW55IGFkanVzdG1lbnRzIG1hZGUgaGVyZS4KK200X2RlZmluZShbbTRfam9pbmFsbF0sIFtbJDJdXyQwKFskMV0sIG00X3NoaWZ0KCRAKSldKQorbTRfZGVmaW5lKFtfbTRfam9pbmFsbF0sCitbbTRfaWYoWyQjXSwgWzJdLCBbXSwgW1skMSQzXSQwKFskMV0sIG00X3NoaWZ0MigkQCkpXSldKQorCisjIG00X2NvbWJpbmUoW1NFUEFSQVRPUl0sIFBSRUZJWC1MSVNULCBbSU5GSVhdLCBTVUZGSVguLi4pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgdGhlIHBhaXJ3aXNlIGNvbWJpbmF0aW9uIG9mIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIHF1b3RlZCwKKyMgY29tbWEtc2VwYXJhdGVkIFBSRUZJWC1MSVNUIHdpdGggZXZlcnkgZWxlbWVudCBmcm9tIHRoZSBTVUZGSVggYXJndW1lbnRzLgorIyBFYWNoIHBhaXIgaXMgam9pbmVkIHdpdGggSU5GSVgsIGFuZCBwYWlycyBhcmUgc2VwYXJhdGVkIGJ5IFNFUEFSQVRPUi4KKyMgTm8gZXhwYW5zaW9uIG9jY3VycyBvbiBTRVBBUkFUT1IsIElORklYLCBvciBlbGVtZW50cyBvZiBlaXRoZXIgbGlzdC4KKyMKKyMgRm9yIGV4YW1wbGU6CisjICAgbTRfY29tYmluZShbLCBdLCBbW2FdLCBbYl0sIFtjXV0sIFstXSwgWzFdLCBbMl0sIFszXSkKKyMgICA9PiBhLTEsIGEtMiwgYS0zLCBiLTEsIGItMiwgYi0zLCBjLTEsIGMtMiwgYy0zCisjCisjIFRoaXMgZGVmaW5pdGlvbiBpcyBhIGJpdCBoYWlyeTsgdGhlIHRoaW5nIHRvIHJlYWxpemUgaXMgdGhhdCB3ZSB3YW50CisjIHRvIGNvbnN0cnVjdCBtNF9tYXBfYXJnc19zZXAoW1twcmVmaXgkM11dLCBbXSwgW1skMV1dLCBtNF9zaGlmdDMoJEApKQorIyBhcyB0aGUgaW5uZXIgbG9vcCwgdXNpbmcgZWFjaCBwcmVmaXggZ2VuZXJhdGVkIGJ5IHRoZSBvdXRlciBsb29wLAorIyBhbmQgd2l0aG91dCByZWNhbGN1bGF0aW5nIG00X3NoaWZ0MyBldmVyeSBvdXRlciBpdGVyYXRpb24uCittNF9kZWZpbmUoW200X2NvbWJpbmVdLAorW200X2lmKFskMl0sIFtdLCBbXSwgbTRfZXZhbChbJCMgPiAzXSksIFsxXSwKK1ttNF9tYXBfYXJnc19zZXAoW200X21hcF9hcmdzX3NlcChtNF9kcXVvdGUoXSwgWylbWyQzXV0sIFtdLCBbWyQxXV0sXV1dZG5sCitbbTRfZHF1b3RlKG00X2RxdW90ZShtNF9zaGlmdDMoJEApKSlbWyldLCBbWyQxXV0sICQyKV0pXSkKIAogCiAjIG00X2FwcGVuZChNQUNSTy1OQU1FLCBTVFJJTkcsIFtTRVBBUkFUT1JdKQpAQCAtMTQ4NiwxMyArMjQ2OCwxNiBAQAogIyBpbiB3aGljaCBjYXNlIG5vIFNFUEFSQVRPUiBpcyBhZGRlZC4gIEJlIGF3YXJlIHRoYXQgdGhlIGNyaXRlcmlvbiBpcwogIyBgbm90IGJlaW5nIGRlZmluZWQnLCBhbmQgbm90IGBub3QgYmVpbmcgZW1wdHknLgogIworIyBOb3RlIHRoYXQgbmVpdGhlciBTVFJJTkcgbm9yIFNFUEFSQVRPUiBhcmUgZXhwYW5kZWQgaGVyZTsgcmF0aGVyLCB3aGVuCisjIHlvdSBleHBhbmQgTUFDUk8tTkFNRSwgdGhleSB3aWxsIGJlIGV4cGFuZGVkIGF0IHRoYXQgcG9pbnQgaW4gdGltZS4KKyMKICMgVGhpcyBtYWNybyBpcyByb2J1c3QgdG8gYWN0aXZlIHN5bWJvbHMuICBJdCBjYW4gYmUgdXNlZCB0byBncm93CiAjIHN0cmluZ3MuCiAjCi0jICAgIHwgbTRfZGVmaW5lKGFjdGl2ZSwgQUNUSVZFKQotIyAgICB8IG00X2FwcGVuZChbc2VudGVuY2VdLCBbVGhpcyBpcyBhbl0pCi0jICAgIHwgbTRfYXBwZW5kKFtzZW50ZW5jZV0sIFsgYWN0aXZlIF0pCi0jICAgIHwgbTRfYXBwZW5kKFtzZW50ZW5jZV0sIFtzeW1ib2wuXSkKKyMgICAgfCBtNF9kZWZpbmUoYWN0aXZlLCBBQ1RJVkUpZG5sCisjICAgIHwgbTRfYXBwZW5kKFtzZW50ZW5jZV0sIFtUaGlzIGlzIGFuXSlkbmwKKyMgICAgfCBtNF9hcHBlbmQoW3NlbnRlbmNlXSwgWyBhY3RpdmUgXSlkbmwKKyMgICAgfCBtNF9hcHBlbmQoW3NlbnRlbmNlXSwgW3N5bWJvbC5dKWRubAogIyAgICB8IHNlbnRlbmNlCiAjICAgIHwgbTRfdW5kZWZpbmUoW2FjdGl2ZV0pZG5sCiAjICAgIHwgc2VudGVuY2UKQEAgLTE1MDEsMzUgKzI0ODYsOTggQEAKICMKICMgSXQgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGhvb2tzLgogIwotIyAgICB8IG00X2RlZmluZShhY3RpdmUsIEFDVElWRSkKLSMgICAgfCBtNF9hcHBlbmQoW2hvb2tzXSwgW200X2RlZmluZShbYWN0MV0sIFthY3QyXSldKQotIyAgICB8IG00X2FwcGVuZChbaG9va3NdLCBbbTRfZGVmaW5lKFthY3QyXSwgW2FjdGl2ZV0pXSkKLSMgICAgfCBtNF91bmRlZmluZShbYWN0aXZlXSkKKyMgICAgfCBtNF9kZWZpbmUoYWN0aXZlLCBBQ1RJVkUpZG5sCisjICAgIHwgbTRfYXBwZW5kKFtob29rc10sIFttNF9kZWZpbmUoW2FjdDFdLCBbYWN0Ml0pXSlkbmwKKyMgICAgfCBtNF9hcHBlbmQoW2hvb2tzXSwgW200X2RlZmluZShbYWN0Ml0sIFthY3RpdmVdKV0pZG5sCisjICAgIHwgbTRfdW5kZWZpbmUoW2FjdGl2ZV0pZG5sCiAjICAgIHwgYWN0MQogIyAgICB8IGhvb2tzCiAjICAgIHwgYWN0MQogIyAgICA9PiBhY3QxCiAjICAgID0+CiAjICAgID0+IGFjdGl2ZQorIworIyBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIGNyZWF0ZSBsaXN0cywgYWx0aG91Z2ggdGhpcyBwYXJ0aWN1bGFyIHVzYWdlIHdhcworIyBicm9rZW4gcHJpb3IgdG8gYXV0b2NvbmYgMi42Mi4KKyMgICAgfCBtNF9hcHBlbmQoW2xpc3RdLCBbb25lXSwgWywgXSlkbmwKKyMgICAgfCBtNF9hcHBlbmQoW2xpc3RdLCBbdHdvXSwgWywgXSlkbmwKKyMgICAgfCBtNF9hcHBlbmQoW2xpc3RdLCBbdGhyZWVdLCBbLCBdKWRubAorIyAgICB8IGxpc3QKKyMgICAgfCBtNF9kcXVvdGUobGlzdCkKKyMgICAgPT4gb25lLCB0d28sIHRocmVlCisjICAgID0+IFtvbmVdLFt0d29dLFt0aHJlZV0KKyMKKyMgTm90ZSB0aGF0IG00X2FwcGVuZCBjYW4gYmVuZWZpdCBmcm9tIGFtb3J0aXplZCBPKG4pIG00IGJlaGF2aW9yLCBpZgorIyB0aGUgdW5kZXJseWluZyBtNCBpbXBsZW1lbnRhdGlvbiBpcyBzbWFydCBlbm91Z2ggdG8gYXZvaWQgY29weWluZyBleGlzdGluZworIyBjb250ZW50cyB3aGVuIGVubGFyZ2luZyBhIG1hY3JvJ3MgZGVmaW5pdGlvbiBpbnRvIGFueSBwcmUtYWxsb2NhdGVkIHN0b3JhZ2UKKyMgKG00IDEuNC54IHVuZm9ydHVuYXRlbHkgZG9lcyBub3QgaW1wbGVtZW50IHRoaXMgb3B0aW1pemF0aW9uKS4gIFdlIGRvCisjIG5vdCBpbXBsZW1lbnQgbTRfcHJlcGVuZCwgc2luY2UgaXQgaXMgaW5oZXJlbnRseSBPKG5eMikgKHByZS1hbGxvY2F0ZWQKKyMgc3RvcmFnZSBvbmx5IG9jY3VycyBhdCB0aGUgZW5kIG9mIGEgbWFjcm8sIHNvIHRoZSBleGlzdGluZyBjb250ZW50cyBtdXN0CisjIGFsd2F5cyBiZSBtb3ZlZCkuCisjCisjIFVzZSBfbTRfZGVmbiBmb3Igc3BlZWQuCiBtNF9kZWZpbmUoW200X2FwcGVuZF0sCi1bbTRfZGVmaW5lKFskMV0sCi0JICAgbTRfaWZkZWYoWyQxXSwgW200X2RlZm4oWyQxXSkkM10pWyQyXSldKQorW200X2RlZmluZShbJDFdLCBtNF9pZmRlZihbJDFdLCBbX200X2RlZm4oWyQxXSlbJDNdXSlbJDJdKV0pCiAKLSMgbTRfcHJlcGVuZChNQUNSTy1OQU1FLCBTVFJJTkcsIFtTRVBBUkFUT1JdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFNhbWUsIGJ1dCBwcmVwZW5kLgotbTRfZGVmaW5lKFttNF9wcmVwZW5kXSwKLVttNF9kZWZpbmUoWyQxXSwKLQkgICBbJDJdbTRfaWZkZWYoWyQxXSwgWyQzW11tNF9kZWZuKFskMV0pXSkpXSkKIAotIyBtNF9hcHBlbmRfdW5pcShNQUNSTy1OQU1FLCBTVFJJTkcsIFtTRVBBUkFUT1JdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBBcyBgbTRfYXBwZW5kJywgYnV0IGFwcGVuZCBvbmx5IGlmIG5vdCB5ZXQgcHJlc2VudC4KKyMgbTRfYXBwZW5kX3VuaXEoTUFDUk8tTkFNRSwgU1RSSU5HLCBbU0VQQVJBVE9SXSwgW0lGLVVOSVFdLCBbSUYtRFVQXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlrZSBgbTRfYXBwZW5kJywgYnV0IGFwcGVuZCBvbmx5IGlmIG5vdCB5ZXQgcHJlc2VudC4gIEFkZGl0aW9uYWxseSwKKyMgZXhwYW5kIElGLVVOSVEgaWYgU1RSSU5HIHdhcyBhcHBlbmRlZCwgb3IgSUYtRFVQIGlmIFNUUklORyB3YXMgYWxyZWFkeQorIyBwcmVzZW50LiAgQWxzbywgd2FybiBpZiBTRVBBUkFUT1IgaXMgbm90IGVtcHR5IGFuZCBvY2N1cnMgd2l0aGluIFNUUklORywKKyMgYXMgdGhlIGFsZ29yaXRobSBubyBsb25nZXIgZ3VhcmFudGVlcyB1bmlxdWVuZXNzLgorIworIyBOb3RlIHRoYXQgd2hpbGUgbTRfYXBwZW5kIGNhbiBiZSBPKG4pIChkZXBlbmRpbmcgb24gdGhlIHF1YWxpdHkgb2YgdGhlCisjIHVuZGVybHlpbmcgTTQgaW1wbGVtZW50YXRpb24pLCBtNF9hcHBlbmRfdW5pcSBpcyBpbmhlcmVudGx5IE8obl4yKQorIyBiZWNhdXNlIGVhY2ggYXBwZW5kIG9wZXJhdGlvbiBzZWFyY2hlcyB0aGUgZW50aXJlIHN0cmluZy4KIG00X2RlZmluZShbbTRfYXBwZW5kX3VuaXFdLAorW200X2lmdmFsKFskM10sIFttNF9pZihtNF9pbmRleChbJDJdLCBbJDNdKSwgWy0xXSwgW10sCisJCSAgICAgICBbbTRfd2Fybihbc3ludGF4XSwKKwkJCQlbJDA6IGAkMicgY29udGFpbnMgYCQzJ10pXSldKV8kMCgkQCldKQorbTRfZGVmaW5lKFtfbTRfYXBwZW5kX3VuaXFdLAogW200X2lmZGVmKFskMV0sCi0JICBbbTRfYm1hdGNoKFskM11tNF9kZWZuKFskMV0pWyQzXSwgbTRfcmVfZXNjYXBlKFskMyQyJDNdKSwgW10sCi0JCSAgICAgW200X2FwcGVuZCgkQCldKV0sCi0JICBbbTRfYXBwZW5kKCRAKV0pXSkKKwkgIFttNF9pZihtNF9pbmRleChbJDNdX200X2RlZm4oWyQxXSlbJDNdLCBbJDMkMiQzXSksIFstMV0sCisJCSBbbTRfYXBwZW5kKFskMV0sIFskMl0sIFskM10pJDRdLCBbJDVdKV0sCisJICBbbTRfZGVmaW5lKFskMV0sIFskMl0pJDRdKV0pCisKKyMgbTRfYXBwZW5kX3VuaXFfdyhNQUNSTy1OQU1FLCBTVFJJTkdTKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZvciBlYWNoIG9mIHRoZSB3b3JkcyBpbiB0aGUgd2hpdGVzcGFjZSBzZXBhcmF0ZWQgbGlzdCBTVFJJTkdTLCBhcHBlbmQKKyMgb25seSB0aGUgdW5pcXVlIHN0cmluZ3MgdG8gdGhlIGRlZmluaXRpb24gb2YgTUFDUk8tTkFNRS4KKyMKKyMgVXNlIF9tNF9kZWZuIGZvciBzcGVlZC4KK200X2RlZmluZShbbTRfYXBwZW5kX3VuaXFfd10sCitbbTRfbWFwX2FyZ3NfdyhbJDJdLCBbX200X2FwcGVuZF91bmlxKFskMV0sXSwgWywgWyBdKV0pXSkKKworCisjIG00X2VzY2FwZShTVFJJTkcpCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCBxdW90ZWQgU1RSSU5HLCBidXQgd2l0aCBlbWJlZGRlZCAjLCAkLCBbIGFuZCBdIHR1cm5lZCBpbnRvCisjIHF1YWRyaWdyYXBocy4KKyMKKyMgSXQgaXMgZmFzdGVyIHRvIGNoZWNrIGlmIFNUUklORyBpcyBhbHJlYWR5IGdvb2QgdXNpbmcgbTRfdHJhbnNsaXQKKyMgdGhhbiB0byBibGluZGx5IHBlcmZvcm0gZm91ciBtNF9icGF0c3Vic3QuCisjCisjIEJlY2F1c2UgdGhlIHRyYW5zbGl0IGlzIHN0cmlwcGluZyBxdW90ZXMsIGl0IG11c3QgYWxzbyBuZXV0cmFsaXplCisjIGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgaW4gYSBtYWNybyBuYW1lLCBhcyB3ZWxsIGFzIGNvbW1lbnRzLCBjb21tYXMsCisjIGFuZCBwYXJlbnRoZXNlcy4gIEFsbCB0aGUgcHJvYmxlbSBjaGFyYWN0ZXJzIGFyZSB1bmlmaWVkIHNvIHRoYXQgYQorIyBzaW5nbGUgbTRfaW5kZXggY2FuIHNjYW4gdGhlIHJlc3VsdC4KKyMKKyMgUmF0aGVyIHRoYW4gZXhwYW5kIG00X2RlZm4gZXZlcnkgdGltZSBtNF9lc2NhcGUgaXMgZXhwYW5kZWQsIHdlCisjIGlubGluZSBpdHMgZXhwYW5zaW9uIHVwIGZyb250LgorbTRfZGVmaW5lKFttNF9lc2NhcGVdLAorW200X2lmKG00X2luZGV4KG00X3RyYW5zbGl0KFskMV0sCisgICBbW10jLCgpXV1tNF9kcXVvdGUobTRfZGVmbihbbTRfY3Jfc3ltYm9sczJdKSlbLCBbJCQkXSksIFskXSksCisgIFstMV0sIFttNF9lY2hvXSwgW18kMF0pKFskMV0pXSkKKworbTRfZGVmaW5lKFtfbTRfZXNjYXBlXSwKK1ttNF9jaGFuZ2VxdW90ZShbLT08eyhdLFspfT49LV0pXWRubAorW200X2JwYXRzdWJzdChtNF9icGF0c3Vic3QobTRfYnBhdHN1YnN0KG00X2JwYXRzdWJzdCgKKwkgIC09PHsoLT08eygtPTx7KC09PHsoLT08eygkMSl9Pj0tKX0+PS0pfT49LSl9Pj0tKX0+PS0sCisJLT08eygjKX0+PS0sIC09PHsoQCU6QCl9Pj0tKSwKKyAgICAgIC09PHsoXFspfT49LSwgLT08eyhAPDpAKX0+PS0pLAorICAgIC09PHsoXF0pfT49LSwgLT08eyhAOj5AKX0+PS0pLAorICAtPTx7KFwkKX0+PS0sIC09PHsoQFN8QCl9Pj0tKW00X2NoYW5nZXF1b3RlKFssXSldKQogCiAKICMgbTRfdGV4dF93cmFwKFNUUklORywgW1BSRUZJWF0sIFtGSVJTVC1QUkVGSVhdLCBbV0lEVEhdKQpAQCAtMTU0MCw2ICsyNTg4LDExIEBACiAjIGlmIHRoZSBsZW5ndGggb2YgRklSU1QtUFJFRklYIGlzIGdyZWF0ZXIgdGhhbiB0aGF0IG9mIFBSRUZJWCwgdGhlbgogIyBGSVJTVC1QUkVGSVggd2lsbCBiZSBsZWZ0IGFsb25lIG9uIHRoZSBmaXJzdCBsaW5lLgogIworIyBObyBleHBhbnNpb24gb2NjdXJzIG9uIHRoZSBjb250ZW50cyBTVFJJTkcsIFBSRUZJWCwgb3IgRklSU1QtUFJFRklYLAorIyBhbHRob3VnaCBxdWFkcmlncmFwaHMgYXJlIGNvcnJlY3RseSByZWNvZ25pemVkLiAgTW9yZSBwcmVjaXNlbHksCisjIHlvdSBtYXkgcmVkZWZpbmUgbTRfcWxlbiB0byByZWNvZ25pemUgd2hhdGV2ZXIgZXNjYXBlIHNlcXVlbmNlcyB0aGF0CisjIHlvdSB3aWxsIHBvc3QtcHJvY2Vzcy4KKyMKICMgVHlwaWNhbCBvdXRwdXRzIGFyZToKICMKICMgbTRfdGV4dF93cmFwKFtTaG9ydCBzdHJpbmcgKi9dLCBbICAgXSwgWy8qIF0sIDIwKQpAQCAtMTU2NSwxMzggKzI2MTgsMjM5IEBACiAjIHdlIHJlYWxseSB3YW50IHRvIGJvdGhlciB3aXRoIHBlb3BsZSB0cnlpbmcgZWFjaCBzaW5nbGUgY29ybmVyCiAjIG9mIGEgc29mdHdhcmU/CiAjCi0jIG1vcmUgaW1wb3J0YW50OgotIyBGSVhNRTogaGFuZGxlIHF1YWRyaWdyYXBocyBjb3JyZWN0bHksIGJvdGggaW4gVEVYVCBhbmQgaW4gRklSU1RfUFJFRklYLgorIyBUaGlzIG1hY3JvIGRvZXMgbm90IGxlYXZlIGEgdHJhaWxpbmcgc3BhY2UgYmVoaW5kIHRoZSBsYXN0IHdvcmQgb2YgYSBsaW5lLAorIyB3aGljaCBjb21wbGljYXRlcyBpdCBhIGJpdC4gIFRoZSBhbGdvcml0aG0gaXMgb3RoZXJ3aXNlIHN0dXBpZCBhbmQgc2ltcGxlOgorIyBhbGwgdGhlIHdvcmRzIGFyZSBwcmVjZWRlZCBieSBtNF9TZXBhcmF0b3Igd2hpY2ggaXMgZGVmaW5lZCB0byBlbXB0eSBmb3IKKyMgdGhlIGZpcnN0IHdvcmQsIGFuZCB0aGVuIGAgJyAoc2luZ2xlIHNwYWNlKSBmb3IgYWxsIHRoZSBvdGhlcnMuCiAjCi0jIFRoaXMgbWFjcm8gZG9lcyBub3QgbGVhdmUgYSB0cmFpbGluZyBzcGFjZSBiZWhpbmQgdGhlIGxhc3Qgd29yZCwKLSMgd2hhdCBjb21wbGljYXRlcyBpdCBhIGJpdC4gIFRoZSBhbGdvcml0aG0gaXMgc3R1cGlkIHNpbXBsZTogYWxsIHRoZQotIyB3b3JkcyBhcmUgcHJlY2VkZWQgYnkgbTRfU2VwYXJhdG9yIHdoaWNoIGlzIGRlZmluZWQgdG8gZW1wdHkgZm9yIHRoZQotIyBmaXJzdCB3b3JkLCBhbmQgdGhlbiBgICcgKHNpbmdsZSBzcGFjZSkgZm9yIGFsbCB0aGUgb3RoZXJzLgorIyBUaGUgYWxnb3JpdGhtIHVzZXMgYSBoZWxwZXIgdGhhdCB1c2VzICQyIHRocm91Z2ggJDQgZGlyZWN0bHksIHJhdGhlciB0aGFuCisjIHVzaW5nIGxvY2FsIHZhcmlhYmxlcywgdG8gYXZvaWQgbTRfZGVmbiBvdmVyaGVhZCwgb3IgZXhwYW5zaW9uIHN3YWxsb3dpbmcKKyMgYW55ICQuICBJdCBhbHNvIGJ5cGFzc2VzIG00X3BvcGRlZiBvdmVyaGVhZCB3aXRoIF9tNF9wb3BkZWYgc2luY2Ugbm8gdXNlcgorIyBtYWNybyBleHBhbnNpb24gb2NjdXJzIGluIHRoZSBtZWFudGltZS4gIEFsc28sIHRoZSBkZWZpbml0aW9uIGlzIHdyaXR0ZW4KKyMgd2l0aCBtNF9kbywgdG8gYXZvaWQgdGltZSB3YXN0ZWQgb24gZG5sIGR1cmluZyBleHBhbnNpb24gKHNpbmNlIHRoaXMgaXMKKyMgYWxyZWFkeSBhIHRpbWUtY29uc3VtaW5nIG1hY3JvKS4KIG00X2RlZmluZShbbTRfdGV4dF93cmFwXSwKLVttNF9wdXNoZGVmKFttNF9QcmVmaXhdLCBbJDJdKWRubAotbTRfcHVzaGRlZihbbTRfUHJlZml4MV0sIG00X2RlZmF1bHQoWyQzXSwgW200X1ByZWZpeF0pKWRubAotbTRfcHVzaGRlZihbbTRfV2lkdGhdLCBtNF9kZWZhdWx0KFskNF0sIDc5KSlkbmwKLW00X3B1c2hkZWYoW200X0N1cnNvcl0sIG00X2xlbihtNF9QcmVmaXgxKSlkbmwKLW00X3B1c2hkZWYoW200X1NlcGFyYXRvcl0sIFtdKWRubAotbTRfUHJlZml4MVtdZG5sCi1tNF9pZihtNF9ldmFsKG00X0N1cnNvciA+IG00X2xlbihtNF9QcmVmaXgpKSwKLSAgICAgIDEsIFttNF9kZWZpbmUoW200X0N1cnNvcl0sIG00X2xlbihtNF9QcmVmaXgpKQotbTRfUHJlZml4XSlbXWRubAotbTRfZm9yZWFjaF93KFttNF9Xb3JkXSwgWyQxXSwKLVttNF9kZWZpbmUoW200X0N1cnNvcl0sIG00X2V2YWwobTRfQ3Vyc29yICsgbTRfbGVuKG00X2RlZm4oW200X1dvcmRdKSkgKyAxKSlkbmwKLWRubCBOZXcgbGluZSBpZiB0b28gbG9uZywgZWxzZSBpbnNlcnQgYSBzcGFjZSB1bmxlc3MgaXQgaXMgdGhlIGZpcnN0Ci1kbmwgb2YgdGhlIHdvcmRzLgotbTRfaWYobTRfZXZhbChtNF9DdXJzb3IgPiBtNF9XaWR0aCksCi0gICAgICAxLCBbbTRfZGVmaW5lKFttNF9DdXJzb3JdLAotCQkgICAgbTRfZXZhbChtNF9sZW4obTRfUHJlZml4KSArIG00X2xlbihtNF9kZWZuKFttNF9Xb3JkXSkpICsgMSkpXQotbTRfUHJlZml4LAotICAgICAgIFttNF9TZXBhcmF0b3JdKVtdZG5sCi1tNF9kZWZuKFttNF9Xb3JkXSlbXWRubAotbTRfZGVmaW5lKFttNF9TZXBhcmF0b3JdLCBbIF0pXSlkbmwKLW00X3BvcGRlZihbbTRfU2VwYXJhdG9yXSlkbmwKLW00X3BvcGRlZihbbTRfQ3Vyc29yXSlkbmwKLW00X3BvcGRlZihbbTRfV2lkdGhdKWRubAotbTRfcG9wZGVmKFttNF9QcmVmaXgxXSlkbmwKLW00X3BvcGRlZihbbTRfUHJlZml4XSlkbmwKLV0pCitbXyQwKG00X2VzY2FwZShbJDFdKSwgWyQyXSwgbTRfZGVmYXVsdF9xdW90ZWQoWyQzXSwgWyQyXSksCisgICAgIG00X2RlZmF1bHRfcXVvdGVkKFskNF0sIFs3OV0pKV0pCiAKK200X2RlZmluZShbX200X3RleHRfd3JhcF0sCittNF9kbyhkbmwgc2V0IHVwIGxvY2FsIHZhcmlhYmxlcywgdG8gYXZvaWQgcmVwZWF0ZWQgY2FsY3VsYXRpb25zCitbW200X3B1c2hkZWYoW200X0luZGVudF0sIG00X3FsZW4oWyQyXSkpXV0sCitbW200X3B1c2hkZWYoW200X0N1cnNvcl0sIG00X3FsZW4oWyQzXSkpXV0sCitbW200X3B1c2hkZWYoW200X1NlcGFyYXRvcl0sIFttNF9kZWZpbmUoW200X1NlcGFyYXRvcl0sIFsgXSldKV1dLAorZG5sIGV4cGFuZCB0aGUgZmlyc3QgcHJlZml4LCB0aGVuIGNoZWNrIGl0cyBsZW5ndGggdnMuIHJlZ3VsYXIgcHJlZml4Citkbmwgc2FtZSBsZW5ndGg6IG5vdGhpbmcgc3BlY2lhbAorZG5sIHByZWZpeDEgbG9uZ2VyOiBvdXRwdXQgb24gbGluZSBieSBpdHNlbGYsIGFuZCByZXNldCBjdXJzb3IKK2RubCBwcmVmaXgxIHNob3J0ZXI6IHBhZCB0byBsZW5ndGggb2YgcHJlZml4LCBhbmQgcmVzZXQgY3Vyc29yCitbW1skM11tNF9jb25kKFttNF9DdXJzb3JdLCBtNF9JbmRlbnQsIFtdLAorCSAgICAgIFttNF9ldmFsKG00X0N1cnNvciA+IG00X0luZGVudCldLCBbMV0sIFsKK1skMl1tNF9kZWZpbmUoW200X0N1cnNvcl0sIG00X0luZGVudCldLAorCSAgICAgIFttNF9mb3JtYXQoWyUqc10sIG00X21heChbMF0sCisgIG00X2V2YWwobTRfSW5kZW50IC0gbTRfQ3Vyc29yKSksIFtdKW00X2RlZmluZShbbTRfQ3Vyc29yXSwgbTRfSW5kZW50KV0pXV0sCitkbmwgbm93LCBmb3IgZWFjaCB3b3JkLCBjb21wdXRlIHRoZSBjdXJzb3IgYWZ0ZXIgdGhlIHdvcmQgaXMgb3V0cHV0LCB0aGVuCitkbmwgY2hlY2sgaWYgdGhlIGN1cnNvciB3b3VsZCBleGNlZWQgdGhlIHdyYXAgY29sdW1uCitkbmwgaWYgc28sIHJlc2V0IGN1cnNvciwgYW5kIGluc2VydCBuZXdsaW5lIGFuZCBwcmVmaXgKK2RubCBpZiBub3QsIGluc2VydCB0aGUgc2VwYXJhdG9yICh1c3VhbGx5IGEgc3BhY2UpCitkbmwgZWl0aGVyIHdheSwgaW5zZXJ0IHRoZSB3b3JkCitbW200X21hcF9hcmdzX3coWyQxXSwgWyQwX3dvcmQoXSwgWywgWyQyXSwgWyQ0XSldKV1dLAorZG5sIGZpbmFsbHksIGNsZWFuIHVwIHRoZSBsb2NhbCB2YXJpYWJsZXMKK1tbX200X3BvcGRlZihbbTRfU2VwYXJhdG9yXSwgW200X0N1cnNvcl0sIFttNF9JbmRlbnRdKV1dKSkKKworbTRfZGVmaW5lKFtfbTRfdGV4dF93cmFwX3dvcmRdLAorW200X2RlZmluZShbbTRfQ3Vyc29yXSwgbTRfZXZhbChtNF9DdXJzb3IgKyBtNF9xbGVuKFskMV0pICsgMSkpXWRubAorW200X2lmKG00X2V2YWwobTRfQ3Vyc29yID4gKFskM10pKSwKKyAgICAgIFsxXSwgW200X2RlZmluZShbbTRfQ3Vyc29yXSwgbTRfZXZhbChtNF9JbmRlbnQgKyBtNF9xbGVuKFskMV0pICsgMSkpCitbJDJdXSwKKyAgICAgIFttNF9TZXBhcmF0b3JbXV0pWyQxXV0pCiAKICMgbTRfdGV4dF9ib3goTUVTU0FHRSwgW0ZSQU1FLUNIQVJBQ1RFUiA9IGAtJ10pCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUdXJuIE1FU1NBR0UgaW50bzoKKyMgICMjIC0tLS0tLS0gIyMKKyMgICMjIE1FU1NBR0UgIyMKKyMgICMjIC0tLS0tLS0gIyMKKyMgdXNpbmcgRlJBTUUtQ0hBUkFDVEVSIGluIHRoZSBib3JkZXIuCisjCisjIFF1YWRyaWdyYXBocyBhcmUgY29ycmVjdGx5IHJlY29nbml6ZWQuICBNb3JlIHByZWNpc2VseSwgeW91IG1heQorIyByZWRlZmluZSBtNF9xbGVuIHRvIHJlY29nbml6ZSB3aGF0ZXZlciBlc2NhcGUgc2VxdWVuY2VzIHRoYXQgeW91CisjIHdpbGwgcG9zdC1wcm9jZXNzLgogbTRfZGVmaW5lKFttNF90ZXh0X2JveF0sCi1bQCU6QEAlOkAgbTRfYnBhdHN1YnN0KFskMV0sIFsuXSwgbTRfaWYoWyQyXSwgW10sIFtbLV1dLCBbWyQyXV0pKSBAJTpAQCU6QAotQCU6QEAlOkAgJDEgQCU6QEAlOkAKLUAlOkBAJTpAIG00X2JwYXRzdWJzdChbJDFdLCBbLl0sIG00X2lmKFskMl0sIFtdLCBbWy1dXSwgW1skMl1dKSkgQCU6QEAlOkBbXWRubAotXSkKK1ttNF9wdXNoZGVmKFttNF9Cb3JkZXJdLAorCSAgICBtNF90cmFuc2xpdChtNF9mb3JtYXQoW1tbJSpzXV1dLCBtNF9kZWNyKG00X3FsZW4oX200X2V4cGFuZChbJDEKK10pKSksIFtdKSwgWyBdLCBtNF9kZWZhdWx0X3F1b3RlZChbJDJdLCBbLV0pKSldZG5sCitbWyMjXSBfbTRfZGVmbihbbTRfQm9yZGVyXSkgWyMjXQorWyMjXSAkMSBbIyNdCitbIyNdIF9tNF9kZWZuKFttNF9Cb3JkZXJdKSBbIyNdX200X3BvcGRlZihbbTRfQm9yZGVyXSldKQogCiAKICMgbTRfcWxlbihTVFJJTkcpCiAjIC0tLS0tLS0tLS0tLS0tLQogIyBFeHBhbmRzIHRvIHRoZSBsZW5ndGggb2YgU1RSSU5HIGFmdGVyIGF1dG9tNHRlIGNvbnZlcnRzIGFsbCBxdWFkcmlncmFwaHMuCi1tNF9kZWZpbmUoW200X3FsZW5dLAotW200X2xlbihtNF9icGF0c3Vic3RzKFtbJDFdXSwgW0BcKDw6XHw6Plx8U3xcfCU6XClAXSwgW1BdLCBbQCZ0QF0pKV0pCi0KLQotIyBtNF9xZGVsdGEoU1RSSU5HKQotIyAtLS0tLS0tLS0tLS0tLS0tLQotIyBFeHBhbmRzIHRvIHRoZSBuZXQgY2hhbmdlIGluIHRoZSBsZW5ndGggb2YgU1RSSU5HIGZyb20gYXV0b200dGUgY29udmVydGluZyB0aGUKLSMgcXVhZHJpZ3JhcGhzIGluIFNUUklORy4gIFRoaXMgbnVtYmVyIGlzIGFsd2F5cyBuZWdhdGl2ZSBvciB6ZXJvLgotbTRfZGVmaW5lKFttNF9xZGVsdGFdLAotW200X2V2YWwobTRfcWxlbihbJDFdKSAtIG00X2xlbihbJDFdKSldKQotCi0KLQotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIDEwLiBOdW1iZXIgcHJvY2Vzc2luZy4gICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotCi0jIG00X3NpZ24oQSkKLSMgLS0tLS0tLS0tLQogIwotIyBUaGUgc2lnbiBvZiB0aGUgaW50ZWdlciBBLgotbTRfZGVmaW5lKFttNF9zaWduXSwKLVttNF9ibWF0Y2goWyQxXSwKLQkgICBbXi1dLCAtMSwKLQkgICBbXjArXSwgMCwKLQkJICAxKV0pCisjIElmIHlvdSB1c2Ugc29tZSBvdGhlciBtZWFucyBvZiBwb3N0LXByb2Nlc3NpbmcgbTQgb3V0cHV0IHJhdGhlciB0aGFuCisjIGF1dG9tNHRlLCB0aGVuIHlvdSBtYXkgcmVkZWZpbmUgdGhpcyBtYWNybyB0byByZWNvZ25pemUgd2hhdGV2ZXIKKyMgZXNjYXBlIHNlcXVlbmNlcyB5b3VyIHBvc3QtcHJvY2Vzc29yIHdpbGwgaGFuZGxlLiAgRm9yIHRoYXQgbWF0dGVyLAorIyBtNF9kZWZpbmUoW200X3FsZW5dLCBtNF9kZWZuKFttNF9sZW5dKSkgaXMgc3VmZmljaWVudCBpZiB5b3UgZG9uJ3QKKyMgZG8gYW55IHBvc3QtcHJvY2Vzc2luZy4KKyMKKyMgQXZvaWQgYnBhdHN1YnN0cyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIG5vIHF1YWRyaWdyYXBocy4gIENhY2hlCisjIHJlc3VsdHMsIGFzIGNvbmZpZ3VyZSBzY3JpcHRzIHRlbmQgdG8gYXNrIGFib3V0IGxlbmd0aHMgb2YgY29tbW9uCisjIHN0cmluZ3MgbGlrZSBgLyonIGFuZCBgKi8nIHJhdGhlciBmcmVxdWVudGx5LiAgTWluaW1pemUgdGhlIG51bWJlcgorIyBvZiB0aW1lcyB0aGF0ICQxIG9jY3VycyBpbiBtNF9xbGVuLCBzbyB0aGVyZSBpcyBsZXNzIHRleHQgdG8gcGFyc2UKKyMgb24gYSBjYWNoZSBoaXQuCittNF9kZWZpbmUoW200X3FsZW5dLAorW200X2lmZGVmKFskMC0kMV0sIFtfbTRfZGVmbihbJDAtXV0sIFtfJDAoXSlbJDFdKV0pCittNF9kZWZpbmUoW19tNF9xbGVuXSwKK1ttNF9kZWZpbmUoW200X3FsZW4tJDFdLAorbTRfaWYobTRfaW5kZXgoWyQxXSwgW0BdKSwgWy0xXSwgW200X2xlbihbJDFdKV0sCisgICAgICBbbTRfbGVuKG00X2JwYXRzdWJzdChbWyQxXV0sCisJCQkgICBbQFwoXCg8Olx8Oj5cfFN8XHwlOlx8XHs6XHw6XH1cKVwoQFwpXHwmdEBcKV0sCisJCQkgICBbXDNdKSldKSlfbTRfZGVmbihbbTRfcWxlbi0kMV0pXSkKKworIyBtNF9jb3B5cmlnaHRfY29uZGVuc2UoVEVYVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmRlbnNlIHRoZSBjb3B5cmlnaHQgbm90aWNlIGluIFRFWFQgdG8gb25seSBkaXNwbGF5IHRoZSBmaW5hbAorIyB5ZWFyLCB3cmFwcGluZyB0aGUgcmVzdWx0cyB0byBmaXQgaW4gODAgY29sdW1ucy4KK200X2RlZmluZShbbTRfY29weXJpZ2h0X2NvbmRlbnNlXSwKK1ttNF90ZXh0X3dyYXAobTRfYnBhdHN1YnN0KG00X2ZsYXR0ZW4oW1skMV1dKSwKK1soQylbLQkgLDAtOV0qXChbMS05XVswLTldWzAtOV1bMC05XVwpXSwgWyhDKSBcMV0pKV0pCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAxMy4gTnVtYmVyIHByb2Nlc3NpbmcuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKIAogIyBtNF9jbXAoQSwgQikKICMgLS0tLS0tLS0tLS0tCi0jCi0jIENvbXBhcmUgdHdvIGludGVnZXJzLgorIyBDb21wYXJlIHR3byBpbnRlZ2VyIGV4cHJlc3Npb25zLgogIyBBIDwgQiAtPiAtMQogIyBBID0gQiAtPiAgMAogIyBBID4gQiAtPiAgMQogbTRfZGVmaW5lKFttNF9jbXBdLAotW200X3NpZ24obTRfZXZhbChbJDEgLSAkMl0pKV0pCitbbTRfZXZhbCgoKFskMV0pID4gKFskMl0pKSAtICgoWyQxXSkgPCAoWyQyXSkpKV0pCiAKIAogIyBtNF9saXN0X2NtcChBLCBCKQogIyAtLS0tLS0tLS0tLS0tLS0tLQogIwotIyBDb21wYXJlIHRoZSB0d28gbGlzdHMgb2YgaW50ZWdlcnMgQSBhbmQgQi4gIEZvciBpbnN0YW5jZToKLSMgICBtNF9saXN0X2NtcCgoMSwgMCksICAgICAoMSkpICAgIC0+ICAwCi0jICAgbTRfbGlzdF9jbXAoKDEsIDApLCAgICAgKDEsIDApKSAtPiAgMAotIyAgIG00X2xpc3RfY21wKCgxLCAyKSwgICAgICgxLCAwKSkgLT4gIDEKLSMgICBtNF9saXN0X2NtcCgoMSwgMiwgMyksICAoMSwgMikpIC0+ICAxCi0jICAgbTRfbGlzdF9jbXAoKDEsIDIsIC0zKSwgKDEsIDIpKSAtPiAtMQotIyAgIG00X2xpc3RfY21wKCgxLCAwKSwgICAgICgxLCAyKSkgLT4gLTEKLSMgICBtNF9saXN0X2NtcCgoMSksICAgICAgICAoMSwgMikpIC0+IC0xCisjIENvbXBhcmUgdGhlIHR3byBsaXN0cyBvZiBpbnRlZ2VyIGV4cHJlc3Npb25zIEEgYW5kIEIuICBGb3IgaW5zdGFuY2U6CisjICAgbTRfbGlzdF9jbXAoWzEsIDBdLCAgICAgWzFdKSAgICAtPiAgMAorIyAgIG00X2xpc3RfY21wKFsxLCAwXSwgICAgIFsxLCAwXSkgLT4gIDAKKyMgICBtNF9saXN0X2NtcChbMSwgMl0sICAgICBbMSwgMF0pIC0+ICAxCisjICAgbTRfbGlzdF9jbXAoWzEsIDIsIDNdLCAgWzEsIDJdKSAtPiAgMQorIyAgIG00X2xpc3RfY21wKFsxLCAyLCAtM10sIFsxLCAyXSkgLT4gLTEKKyMgICBtNF9saXN0X2NtcChbMSwgMF0sICAgICBbMSwgMl0pIC0+IC0xCisjICAgbTRfbGlzdF9jbXAoWzFdLCAgICAgICAgWzEsIDJdKSAtPiAtMQorIyAgIG00X2RlZmluZShbeGFdLCBbb29wc10pZG5sCisjICAgbTRfbGlzdF9jbXAoW1sweGFdXSwgICAgWzUrNV0pICAtPiAwCisjCisjIFJhdGhlciB0aGFuIGZhY2UgdGhlIG92ZXJoZWFkIG9mIG00X2Nhc2UsIHdlIHVzZSBhIGhlbHBlciBmdW5jdGlvbiB3aG9zZQorIyBleHBhbnNpb24gaW5jbHVkZXMgdGhlIG5hbWUgb2YgdGhlIG1hY3JvIHRvIGludm9rZSBvbiB0aGUgdGFpbCwgZWl0aGVyCisjIG00X2lnbm9yZSBvciBtNF91bnF1b3RlLiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIHdoZW4gY29tcGFyaW5nCisjIGxvbmcgbGlzdHMsIHNpbmNlIGxlc3MgdGV4dCBpcyBiZWluZyBleHBhbmRlZCBmb3IgZGVjaWRpbmcgd2hlbiB0byBlbmQKKyMgcmVjdXJzaW9uLiAgVGhlIHJlY3Vyc2lvbiBpcyBiZXR3ZWVuIGEgcGFpciBvZiBtYWNyb3MgdGhhdCBhbHRlcm5hdGUKKyMgd2hpY2ggbGlzdCBpcyB0cmltbWVkIGJ5IG9uZSBlbGVtZW50OyB0aGlzIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4KKyMgY2FsbGluZyBtNF9jZHIgb24gYm90aCBsaXN0cyBmcm9tIGEgc2luZ2xlIG1hY3JvLiAgR3VhcmFudGVlIGV4YWN0bHkKKyMgb25lIGV4cGFuc2lvbiBvZiBib3RoIGxpc3RzJyBzaWRlIGVmZmVjdHMuCisjCisjIFBsZWFzZSBrZWVwIGZvcmVhY2gubTQgaW4gc3luYyB3aXRoIGFueSBhZGp1c3RtZW50cyBtYWRlIGhlcmUuCiBtNF9kZWZpbmUoW200X2xpc3RfY21wXSwKLVttNF9pZihbJDEkMl0sIFsoKSgpXSwgMCwKLSAgICAgICBbJDFdLCBbKCldLCBbJDAoKDApLCBbJDJdKV0sCi0gICAgICAgWyQyXSwgWygpXSwgWyQwKFskMV0sICgwKSldLAotICAgICAgIFttNF9jYXNlKG00X2NtcChtNF9jYXIkMSwgbTRfY2FyJDIpLAotCQktMSwgLTEsCi0JCSAxLCAxLAotCQkgMCwgWyQwKChtNF9zaGlmdCQxKSwgKG00X3NoaWZ0JDIpKV0pXSldKQorW18kMF9yYXcobTRfZHF1b3RlKCQxKSwgbTRfZHF1b3RlKCQyKSldKQorCittNF9kZWZpbmUoW19tNF9saXN0X2NtcF9yYXddLAorW200X2lmKFskMV0sIFskMl0sIFswXSwgW19tNF9saXN0X2NtcF8xKFskMV0sICQyKV0pXSkKKworbTRfZGVmaW5lKFtfbTRfbGlzdF9jbXBdLAorW200X2lmKFskMV0sIFtdLCBbMG00X2lnbm9yZV0sIFskMl0sIFswXSwgW200X3VucXVvdGVdLCBbJDJtNF9pZ25vcmVdKV0pCisKK200X2RlZmluZShbX200X2xpc3RfY21wXzFdLAorW19tNF9saXN0X2NtcF8yKFskMl0sIFttNF9zaGlmdDIoJEApXSwgJDEpXSkKKworbTRfZGVmaW5lKFtfbTRfbGlzdF9jbXBfMl0sCitbX200X2xpc3RfY21wKFskMSQzXSwgbTRfY21wKFskMyswXSwgWyQxKzBdKSkoCisgIFtfbTRfbGlzdF9jbXBfMShtNF9kcXVvdGUobTRfc2hpZnQzKCRAKSksICQyKV0pXSkKKworIyBtNF9tYXgoRVhQUiwgLi4uKQorIyBtNF9taW4oRVhQUiwgLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBSZXR1cm4gdGhlIGRlY2ltYWwgdmFsdWUgb2YgdGhlIG1heGltdW0gKG9yIG1pbmltdW0pIGluIGEgc2VyaWVzIG9mCisjIGludGVnZXIgZXhwcmVzc2lvbnMuCisjCisjIE00IDEuNC54IGRvZXNuJ3QgcHJvdmlkZSA/Oi4gIEhlbmNlIHRoaXMgaHVnZSBtNF9ldmFsLiAgQXZvaWQgbTRfZXZhbAorIyBpZiBib3RoIGFyZ3VtZW50cyBhcmUgaWRlbnRpY2FsLCBidXQgYmUgYXdhcmUgb2YgbTRfbWF4KDB4YSwgMTApIChoZW5jZQorIyB0aGUgdXNlIG9mIDw9LCBub3QganVzdCA8LCBpbiB0aGUgc2Vjb25kIG11bHRpcGx5KS4KKyMKKyMgUGxlYXNlIGtlZXAgZm9yZWFjaC5tNCBpbiBzeW5jIHdpdGggYW55IGFkanVzdG1lbnRzIG1hZGUgaGVyZS4KK200X2RlZmluZShbbTRfbWF4XSwKK1ttNF9pZihbJCNdLCBbMF0sIFttNF9mYXRhbChbdG9vIGZldyBhcmd1bWVudHMgdG8gJDBdKV0sCisgICAgICAgWyQjXSwgWzFdLCBbbTRfZXZhbChbJDFdKV0sCisgICAgICAgWyQjJDFdLCBbMiQyXSwgW200X2V2YWwoWyQxXSldLAorICAgICAgIFskI10sIFsyXSwgW18kMCgkQCldLAorICAgICAgIFtfbTRfbWlubWF4KFtfJDBdLCAkQCldKV0pCisKK200X2RlZmluZShbX200X21heF0sCitbbTRfZXZhbCgoKFskMV0pID4gKFskMl0pKSAqIChbJDFdKSArICgoWyQxXSkgPD0gKFskMl0pKSAqIChbJDJdKSldKQorCittNF9kZWZpbmUoW200X21pbl0sCitbbTRfaWYoWyQjXSwgWzBdLCBbbTRfZmF0YWwoW3RvbyBmZXcgYXJndW1lbnRzIHRvICQwXSldLAorICAgICAgIFskI10sIFsxXSwgW200X2V2YWwoWyQxXSldLAorICAgICAgIFskIyQxXSwgWzIkMl0sIFttNF9ldmFsKFskMV0pXSwKKyAgICAgICBbJCNdLCBbMl0sIFtfJDAoJEApXSwKKyAgICAgICBbX200X21pbm1heChbXyQwXSwgJEApXSldKQorCittNF9kZWZpbmUoW19tNF9taW5dLAorW200X2V2YWwoKChbJDFdKSA8IChbJDJdKSkgKiAoWyQxXSkgKyAoKFskMV0pID49IChbJDJdKSkgKiAoWyQyXSkpXSkKKworIyBfbTRfbWlubWF4KE1FVEhPRCwgQVJHMSwgQVJHMi4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbW1vbiByZWN1cnNpb24gY29kZSBmb3IgbTRfbWF4IGFuZCBtNF9taW4uICBNRVRIT0QgbXVzdCBiZSBfbTRfbWF4CisjIG9yIF9tNF9taW4sIGFuZCB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IHR3byBhcmd1bWVudHMgdG8gY29tYmluZS4KKyMKKyMgUGxlYXNlIGtlZXAgZm9yZWFjaC5tNCBpbiBzeW5jIHdpdGggYW55IGFkanVzdG1lbnRzIG1hZGUgaGVyZS4KK200X2RlZmluZShbX200X21pbm1heF0sCitbbTRfaWYoWyQjXSwgWzNdLCBbJDEoWyQyXSwgWyQzXSldLAorICAgICAgIFskMChbJDFdLCAkMShbJDJdLCBbJDNdKSwgbTRfc2hpZnQzKCRAKSldKV0pCisKKworIyBtNF9zaWduKEEpCisjIC0tLS0tLS0tLS0KKyMgVGhlIHNpZ24gb2YgdGhlIGludGVnZXIgZXhwcmVzc2lvbiBBLgorbTRfZGVmaW5lKFttNF9zaWduXSwKK1ttNF9ldmFsKCgoWyQxXSkgPiAwKSAtICgoWyQxXSkgPCAwKSldKQogCiAKIAogIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyAxMS4gVmVyc2lvbiBwcm9jZXNzaW5nLiAgIyMKKyMjIDE0LiBWZXJzaW9uIHByb2Nlc3NpbmcuICAjIwogIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAKIAogIyBtNF92ZXJzaW9uX3VubGV0dGVyKFZFUlNJT04pCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgTm9ybWFsaXplIGJldGEgdmVyc2lvbiBudW1iZXJzIHdpdGggbGV0dGVycyB0byBudW1iZXJzIG9ubHkgZm9yIGNvbXBhcmlzb24uCisjIE5vcm1hbGl6ZSBiZXRhIHZlcnNpb24gbnVtYmVycyB3aXRoIGxldHRlcnMgdG8gbnVtZXJpYyBleHByZXNzaW9ucywgd2hpY2gKKyMgY2FuIHRoZW4gYmUgaGFuZGVkIHRvIG00X2V2YWwgZm9yIHRoZSBwdXJwb3NlIG9mIGNvbXBhcmlzb24uCiAjCiAjICAgTmwgLT4gKE4rMSkuLTEuKGwjKQogIwotI2kuZS4sIDIuMTRhIC0+IDIuMTUuLTEuMSwgMi4xNGIgLT4gMi4xNS4tMS4yLCBldGMuCi0jIFRoaXMgbWFjcm8gaXMgYWJzb2x1dGVseSBub3Qgcm9idXN0IHRvIGFjdGl2ZSBtYWNybywgaXQgZXhwZWN0cwotIyByZWFzb25hYmxlIHZlcnNpb24gbnVtYmVycyBhbmQgaXMgdmFsaWQgdXAgdG8gYHonLCBubyBkb3VibGUgbGV0dGVycy4KKyMgZm9yIGV4YW1wbGU6CisjICAgWzIuMTRhXSAtPiBbMCwyLDE0KzEsLTEsWzByMzY6YV1dIC0+IDIuMTUuLTEuMTAKKyMgICBbMi4xNGJdIC0+IFswLDIsMTUrMSwtMSxbMHIzNjpiXV0gLT4gMi4xNS4tMS4xMQorIyAgIFsyLjYxYWEuYl0gLT4gWzAsMi42MSwxLC0xLFswcjM2OmFhXSwrMSwtMSxbMHIzNjpiXV0gLT4gMi42Mi4tMS4zNzAuMS4tMS4xMQorIyAgIFswOF0gLT4gWzAsWzByMTA6MF04XSAtPiA4CisjCisjIFRoaXMgbWFjcm8gZXhwZWN0cyByZWFzb25hYmxlIHZlcnNpb24gbnVtYmVycywgYnV0IGNhbiBoYW5kbGUgZG91YmxlCisjIGxldHRlcnMgYW5kIGRvZXMgbm90IGV4cGFuZCBhbnkgbWFjcm9zLiAgT3JpZ2luYWwgdmVyc2lvbiBzdHJpbmdzIGNhbgorIyB1c2UgYm90aCBgLicgYW5kIGAtJyBzZXBhcmF0b3JzLgorIworIyBJbmxpbmUgY29uc3RhbnQgZXhwYW5zaW9ucywgdG8gYXZvaWQgbTRfZGVmbiBvdmVyaGVhZC4KKyMgX200X3ZlcnNpb25fdW5sZXR0ZXIgaXMgdGhlIHJlYWwgd29ya2hvcnNlIHVzZWQgYnkgbTRfdmVyc2lvbl9jb21wYXJlLAorIyBidXQgc2luY2UgWzByMzY6YV0gYW5kIGNvbW1hcyBhcmUgbGVzcyByZWFkYWJsZSB0aGFuIDEwIGFuZCBkb3RzLCB3ZQorIyBwcm92aWRlIGEgd3JhcHBlciBmb3IgaHVtYW4gdXNlLgogbTRfZGVmaW5lKFttNF92ZXJzaW9uX3VubGV0dGVyXSwKLVttNF90cmFuc2xpdChtNF9icGF0c3Vic3RzKFskMV0sCi0JCQkgICBbXChbMC05XStcKVwoW2FiY2RlZmdoaV1cKV0sCi0JCQkgICAgIFttNF9ldmFsKFwxICsgMSkuLTEuXDJdLAotCQkJICAgW1woWzAtOV0rXClcKFtqa2xtbm9wcXJzXVwpXSwKLQkJCSAgICAgW200X2V2YWwoXDEgKyAxKS4tMS4xXDJdLAotCQkJICAgW1woWzAtOV0rXClcKFt0dXZ3eHl6XVwpXSwKLQkJCSAgICAgW200X2V2YWwoXDEgKyAxKS4tMS4yXDJdKSwKLQkgICAgIFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5el0sCi0JICAgICBbMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTZdKV0pCitbbTRfc3Vic3RyKG00X21hcF9hcmdzKFsubTRfZXZhbF0sIG00X3VucXVvdGUoXyQwKFskMV0pKSksIFszXSldKQorbTRfZGVmaW5lKFtfbTRfdmVyc2lvbl91bmxldHRlcl0sCitbbTRfYnBhdHN1YnN0KG00X2JwYXRzdWJzdChtNF90cmFuc2xpdChbW1tbMCwkMV1dXV0sIFsuLV0sIFssLF0pLF1kbmwKK200X2RxdW90ZShtNF9kcXVvdGUobTRfZGVmbihbbTRfY3JfTGV0dGVyc10pKSlbWytdLAorCSAgICAgIFsrMSwtMSxbMHIzNjpcJl1dKSwgWywwXSwgWyxbMHIxMDowXV0pXSkKIAogCiAjIG00X3ZlcnNpb25fY29tcGFyZShWRVJTSU9OLTEsIFZFUlNJT04tMikKQEAgLTE3MDUsOSArMjg1OSwxMSBAQAogIyAgLTEgaWYgVkVSU0lPTi0xIDwgVkVSU0lPTi0yCiAjICAgMCBpZiAgICAgICAgICAgPQogIyAgIDEgaWYgICAgICAgICAgID4KKyMKKyMgU2luY2UgX200X3ZlcnNpb25fdW5sZXR0ZXIgZG9lcyBub3Qgb3V0cHV0IHNpZGUgZWZmZWN0cywgd2UgY2FuCisjIHNhZmVseSBieXBhc3MgdGhlIG92ZXJoZWFkIG9mIG00X3ZlcnNpb25fY21wLgogbTRfZGVmaW5lKFttNF92ZXJzaW9uX2NvbXBhcmVdLAotW200X2xpc3RfY21wKChtNF9zcGxpdChtNF92ZXJzaW9uX3VubGV0dGVyKFskMV0pLCBbXC5dKSksCi0JICAgICAobTRfc3BsaXQobTRfdmVyc2lvbl91bmxldHRlcihbJDJdKSwgW1wuXSkpKV0pCitbX200X2xpc3RfY21wX3JhdyhfbTRfdmVyc2lvbl91bmxldHRlcihbJDFdKSwgX200X3ZlcnNpb25fdW5sZXR0ZXIoWyQyXSkpXSkKIAogCiAjIG00X1BBQ0tBR0VfTkFNRQpAQCAtMTcxNiwzMCArMjg3MiwzNzEgQEAKICMgbTRfUEFDS0FHRV9TVFJJTkcKICMgbTRfUEFDS0FHRV9CVUdSRVBPUlQKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNtNF9pbmNsdWRlKFttNHN1Z2FyL3ZlcnNpb24ubTRdKSAjIFRoaXMgaXMgbmVlZGVkIGZvciBBdXRvY29uZiwgYnV0IG5vdCBCaXNvbi4KKyMgSWYgbTRzdWdhci92ZXJzaW9uLm00IGlzIHByZXNlbnQsIHRoZW4gZGVmaW5lIHZlcnNpb24gc3RyaW5ncy4gIFRoaXMKKyMgZmlsZSBpcyBvcHRpb25hbCwgcHJvdmlkZWQgYnkgQXV0b2NvbmYgYnV0IGFic2VudCBpbiBCaXNvbi4KK200X3NpbmNsdWRlKFttNHN1Z2FyL3ZlcnNpb24ubTRdKQogCiAKICMgbTRfdmVyc2lvbl9wcmVyZXEoVkVSU0lPTiwgW0lGLU9LXSwgW0lGLU5PVCA9IEZBSUxdKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIENoZWNrIHRoaXMgQXV0b2NvbmYgdmVyc2lvbiBhZ2FpbnN0IFZFUlNJT04uCiBtNF9kZWZpbmUoW200X3ZlcnNpb25fcHJlcmVxXSwKLVttNF9pZihtNF92ZXJzaW9uX2NvbXBhcmUobTRfZGVmbihbbTRfUEFDS0FHRV9WRVJTSU9OXSksIFskMV0pLCAtMSwKLSAgICAgICBbbTRfZGVmYXVsdChbJDNdLAotCQkgICBbbTRfZmF0YWwoW0F1dG9jb25mIHZlcnNpb24gJDEgb3IgaGlnaGVyIGlzIHJlcXVpcmVkXSwKLQkJCSAgICAgNjMpXSldLAotICAgICAgIFskMl0pW11kbmwKLV0pCittNF9pZmRlZihbbTRfUEFDS0FHRV9WRVJTSU9OXSwKK1tbbTRfaWYobTRfdmVyc2lvbl9jb21wYXJlKF1tNF9kcXVvdGUobTRfZGVmbihbbTRfUEFDS0FHRV9WRVJTSU9OXSkpWywgWyQxXSksCisJWy0xXSwKKwlbbTRfZGVmYXVsdChbJDNdLAorCQkgICAgW200X2ZhdGFsKFtBdXRvY29uZiB2ZXJzaW9uICQxIG9yIGhpZ2hlciBpcyByZXF1aXJlZF0sCisJCQkgICAgICBbNjNdKV0pXSwKKwlbJDJdKV1dLAorW1ttNF9mYXRhbChbbTRzdWdhci92ZXJzaW9uLm00IG5vdCBmb3VuZF0pXV0pKQogCiAKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgMTUuIFNldCBoYW5kbGluZy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBBdXRvY29uZiBsaWtlcyB0byBjcmVhdGUgYXJiaXRyYXJpbHkgbGFyZ2Ugc2V0czsgZm9yIGV4YW1wbGUsIGFzIG9mCisjIHRoaXMgd3JpdGluZywgdGhlIGNvbmZpZ3VyZS5hYyBmb3IgY29yZXV0aWxzIHRyYWNrcyBhIHNldCBvZiBtb3JlCisjIHRoYW4gNDAwIEFDX1NVQlNULiAgSG93IGRvIHdlIHRyYWNrIGFsbCBvZiB0aGVzZSBzZXQgbWVtYmVycywKKyMgd2l0aG91dCBpbnRyb2R1Y2luZyBkdXBsaWNhdGVzPyAgV2UgY291bGQgdXNlIG00X2FwcGVuZF91bmlxLCB3aXRoCisjIHRoZSBzZXQgTkFNRSByZXNpZGluZyBpbiB0aGUgY29udGVudHMgb2YgdGhlIG1hY3JvIE5BTUUuCisjIFVuZm9ydHVuYXRlbHksIG00X2FwcGVuZF91bmlxIGlzIHF1YWRyYXRpYyBmb3Igc2V0IGNyZWF0aW9uLCBiZWNhdXNlCisjIGl0IGNvc3RzIE8obikgdG8gc2VhcmNoIHRoZSBzdHJpbmcgZm9yIGVhY2ggb2YgTyhuKSBpbnNlcnRpb25zOyBub3QKKyMgdG8gbWVudGlvbiB0aGF0IHdpdGggbTQgMS40LngsIGV2ZW4gdXNpbmcgbTRfYXBwZW5kIGlzIHNsb3csIGNvc3RpbmcKKyMgTyhuKSByYXRoZXIgdGhhbiBPKDEpIHBlciBpbnNlcnRpb24uICBPdGhlciBzZXQgb3BlcmF0aW9ucywgbm90IHVzZWQKKyMgYnkgQXV0b2NvbmYgYnV0IHN0aWxsIHBvc3NpYmxlIGJ5IG1hbmlwdWxhdGlvbiBvZiB0aGUgZGVmaW5pdGlvbgorIyB0cmFja2VkIGluIG1hY3JvIE5BTUUsIGluY2x1ZGUgTyhuKSBkZWxldGlvbiBvZiBvbmUgZWxlbWVudCBhbmQgTyhuKQorIyBjb21wdXRhdGlvbiBvZiBzZXQgc2l6ZS4gIEJlY2F1c2UgdGhlIHNldCBpcyBleHBvc2VkIHRvIHRoZSB1c2VyIHZpYQorIyB0aGUgZGVmaW5pdGlvbiBvZiBhIHNpbmdsZSBtYWNybywgd2UgY2Fubm90IGNhY2hlIGFueSBkYXRhIGFib3V0IHRoZQorIyBzZXQgd2l0aG91dCByaXNraW5nIHRoZSBjYWNoZSBiZWluZyBpbnZhbGlkYXRlZCBieSB0aGUgdXNlcgorIyByZWRlZmluaW5nIE5BTUUuCisjCisjIENhbiB3ZSBkbyBiZXR0ZXI/ICBZZXMsIGJlY2F1c2UgbTQgZ2l2ZXMgdXMgYW4gTygxKSBzZWFyY2ggZnVuY3Rpb24KKyMgZm9yIGZyZWU6IGlmZGVmLiAgQWRkaXRpb25hbGx5LCBldmVuIG00IDEuNC54IGdpdmVzIHVzIGFuIE8oMSkKKyMgaW5zZXJ0IG9wZXJhdGlvbiBmb3IgZnJlZTogcHVzaGRlZi4gIEJ1dCB0byB1c2UgdGhlc2UsIHdlIG11c3QKKyMgcmVwcmVzZW50IHRoZSBzZXQgdmlhIGEgZ3JvdXAgb2YgbWFjcm9zOyB0byBrZWVwIHRoZSBzZXQgY29uc2lzdGVudCwKKyMgd2UgbXVzdCBoaWRlIHRoZSBzZXQgc28gdGhhdCB0aGUgdXNlciBjYW4gb25seSBtYW5pcHVsYXRlIGl0IHRocm91Z2gKKyMgYWNjZXNzb3IgbWFjcm9zLiAgVGhlIGNvbnRlbnRzIG9mIHRoZSBzZXQgYXJlIG1haW50YWluZWQgdGhyb3VnaCB0d28KKyMgYWNjZXNzIHBvaW50czsgX200X3NldChbbmFtZV0pIGlzIGEgcHVzaGRlZiBzdGFjayBvZiB2YWx1ZXMgaW4gdGhlCisjIHNldCwgdXNlZnVsIGZvciBPKG4pIHRyYXZlcnNhbCBvZiB0aGUgc2V0IGNvbnRlbnRzOyB3aGlsZSB0aGUKKyMgZXhpc3RlbmNlIG9mIF9tNF9zZXQoW25hbWVdLHZhbHVlKSB3aXRoIG5vIHBhcnRpY3VsYXIgdmFsdWUgaXMKKyMgdXNlZnVsIGZvciBPKDEpIHF1ZXJ5aW5nIG9mIHNldCBtZW1iZXJzaGlwLiAgQW5kIHNpbmNlIHRoZSB1c2VyCisjIGNhbm5vdCBleHRlcm5hbGx5IG1hbmlwdWxhdGUgdGhlIHNldCwgd2UgYXJlIGZyZWUgdG8gYWRkIGFkZGl0aW9uYWwKKyMgY2FjaGluZyBtYWNyb3MgZm9yIG90aGVyIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cy4gIERlbGV0aW9uIGNhbiBiZQorIyBPKDEpIHBlciBlbGVtZW50IHJhdGhlciB0aGFuIE8obiksIGJ5IHJld29ya2luZyB0aGUgZGVmaW5pdGlvbiBvZgorIyBfbTRfc2V0KFtuYW1lXSx2YWx1ZSkgdG8gYmUgMCBvciAxIGJhc2VkIG9uIGN1cnJlbnQgbWVtYmVyc2hpcCwgYW5kCisjIGFkZGluZyBfbTRfc2V0X2NsZWFudXAobmFtZSkgdG8gZGVmZXIgdGhlIE8obikgY2xlYW51cCBvZgorIyBfbTRfc2V0KFtuYW1lXSkgdW50aWwgd2UgaGF2ZSBhbm90aGVyIHJlYXNvbiB0byBkbyBhbiBPKG4pCisjIHRyYXZlcnNhbC4gIFRoZSBleGlzdGVuY2Ugb2YgX200X3NldF9jbGVhbnVwKG5hbWUpIGNhbiB0aGVuIGJlIHVzZWQKKyMgZWxzZXdoZXJlIHRvIGRldGVybWluZSBpZiB3ZSBtdXN0IGRlcmVmZXJlbmNlIF9tNF9zZXQoW25hbWVdLHZhbHVlKSwKKyMgb3IgYXNzdW1lIHRoYXQgZGVmaW5pdGlvbiBpbXBsaWVzIHNldCBtZW1iZXJzaGlwLiAgRmluYWxseSwgc2l6ZSBjYW4KKyMgYmUgdHJhY2tlZCBpbiBhbiBPKDEpIGZhc2hpb24gd2l0aCBfbTRfc2V0X3NpemUobmFtZSkuCisjCisjIFRoZSBxdW90aW5nIGluIF9tNF9zZXQoW25hbWVdLHZhbHVlKSBpcyBjaG9zZW4gc28gdGhhdCB0aGVyZSBpcyBubworIyBhbWJpZ3VpdHkgd2l0aCBhIHNldCB3aG9zZSBuYW1lIGNvbnRhaW5zIGEgY29tbWEsIGFuZCBzbyB0aGF0IHdlIGNhbgorIyBzdXBwbHkgdGhlIHZhbHVlIHZpYSBfbTRfZGVmbihbX200X3NldChbbmFtZV0pXSkgd2l0aG91dCBuZWVkaW5nIGFueQorIyBxdW90ZSBtYW5pcHVsYXRpb24uCisKKyMgbTRfc2V0X2FkZChTRVQsIFZBTFVFLCBbSUYtVU5JUV0sIFtJRi1EVVBdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFkZCBWQUxVRSBhcyBhbiBlbGVtZW50IG9mIFNFVC4gIEV4cGFuZCBJRi1VTklRIG9uIHRoZSBmaXJzdAorIyBhZGRpdGlvbiwgYW5kIElGLURVUCBpZiBpdCBpcyBhbHJlYWR5IGluIHRoZSBzZXQuICBBZGRpdGlvbiBvZiBvbmUKKyMgZWxlbWVudCBpcyBPKDEpLCBzdWNoIHRoYXQgb3ZlcmFsbCBzZXQgY3JlYXRpb24gaXMgTyhuKS4KKyMKKyMgV2UgZG8gbm90IHdhbnQgdG8gYWRkIGEgZHVwbGljYXRlIGZvciBhIHByZXZpb3VzbHkgZGVsZXRlZCBidXQKKyMgdW5wcnVuZWQgZWxlbWVudCwgYnV0IGl0IGlzIGp1c3QgYXMgZWFzeSB0byBjaGVjayBleGlzdGVuY2UgZGlyZWN0bHkKKyMgYXMgaXQgaXMgdG8gcXVlcnkgX200X3NldF9jbGVhbnVwKCQxKS4KK200X2RlZmluZShbbTRfc2V0X2FkZF0sCitbbTRfaWZkZWYoW19tNF9zZXQoWyQxXSwkMildLAorCSAgW200X2lmKG00X2luZGlyKFtfbTRfc2V0KFskMV0sJDIpXSksIFswXSwKKwkJIFttNF9kZWZpbmUoW19tNF9zZXQoWyQxXSwkMildLAorCQkJICAgIFsxXSlfbTRfc2V0X3NpemUoWyQxXSwgW200X2luY3JdKSQzXSwgWyQ0XSldLAorCSAgW200X2RlZmluZShbX200X3NldChbJDFdLCQyKV0sCisJCSAgICAgWzFdKW00X3B1c2hkZWYoW19tNF9zZXQoWyQxXSldLAorCQkJCSAgICBbJDJdKV9tNF9zZXRfc2l6ZShbJDFdLCBbbTRfaW5jcl0pJDNdKV0pCisKKyMgbTRfc2V0X2FkZF9hbGwoU0VULCBWQUxVRS4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWRkIGVhY2ggVkFMVUUgaW50byBTRVQuICBUaGlzIGlzIE8obikgaW4gdGhlIG51bWJlciBvZiBWQUxVRXMsIGFuZAorIyBjYW4gYmUgZmFzdGVyIHRoYW4gY2FsbGluZyBtNF9zZXRfYWRkIGZvciBlYWNoIFZBTFVFLgorIworIyBJbXBsZW1lbnQgdHdvIHJlY3Vyc2lvbiBoZWxwZXJzOyB0aGUgY2hlY2sgdmFyaWFudCBpcyBzbG93ZXIgYnV0CisjIGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgYW4gZWxlbWVudCBoYXMgcHJldmlvdXNseSBiZWVuIHJlbW92ZWQgYnV0CisjIG5vdCBwcnVuZWQuICBUaGUgcmVjdXJzaW9uIGhlbHBlcnMgaWdub3JlIHRoZWlyIHNlY29uZCBhcmd1bWVudCwgc28KKyMgdGhhdCB3ZSBjYW4gdXNlIHRoZSBmYXN0ZXIgbTRfc2hpZnQyIGFuZCAyIGFyZ3VtZW50cywgcmF0aGVyIHRoYW4KKyMgX200X3NoaWZ0MiBhbmQgb25lIGFyZ3VtZW50LCBhcyB0aGUgc2lnbmFsIHRvIGVuZCByZWN1cnNpb24uCisjCisjIFBsZWFzZSBrZWVwIGZvcmVhY2gubTQgaW4gc3luYyB3aXRoIGFueSBhZGp1c3RtZW50cyBtYWRlIGhlcmUuCittNF9kZWZpbmUoW200X3NldF9hZGRfYWxsXSwKK1ttNF9kZWZpbmUoW19tNF9zZXRfc2l6ZSgkMSldLCBtNF9ldmFsKG00X3NldF9zaXplKFskMV0pCisgICsgbTRfbGVuKG00X2lmZGVmKFtfbTRfc2V0X2NsZWFudXAoJDEpXSwgW18kMF9jaGVja10sIFtfJDBdKShbJDFdLCAkQCkpKSldKQorCittNF9kZWZpbmUoW19tNF9zZXRfYWRkX2FsbF0sCitbbTRfaWYoWyQjXSwgWzJdLCBbXSwKKyAgICAgICBbbTRfaWZkZWYoW19tNF9zZXQoWyQxXSwkMyldLCBbXSwKKwkJIFttNF9kZWZpbmUoW19tNF9zZXQoWyQxXSwkMyldLCBbMV0pbTRfcHVzaGRlZihbX200X3NldChbJDFdKV0sCisJICAgWyQzXSktXSkkMChbJDFdLCBtNF9zaGlmdDIoJEApKV0pXSkKKworbTRfZGVmaW5lKFtfbTRfc2V0X2FkZF9hbGxfY2hlY2tdLAorW200X2lmKFskI10sIFsyXSwgW10sCisgICAgICAgW200X3NldF9hZGQoWyQxXSwgWyQzXSkkMChbJDFdLCBtNF9zaGlmdDIoJEApKV0pXSkKKworIyBtNF9zZXRfY29udGFpbnMoU0VULCBWQUxVRSwgW0lGLVBSRVNFTlRdLCBbSUYtQUJTRU5UXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4cGFuZCBJRi1QUkVTRU5UIGlmIFNFVCBjb250YWlucyBWQUxVRSwgb3RoZXJ3aXNlIGV4cGFuZCBJRi1BQlNFTlQuCisjIFRoaXMgaXMgYWx3YXlzIE8oMSkuCittNF9kZWZpbmUoW200X3NldF9jb250YWluc10sCitbbTRfaWZkZWYoW19tNF9zZXRfY2xlYW51cCgkMSldLAorCSAgW200X2lmKG00X2lmZGVmKFtfbTRfc2V0KFskMV0sJDIpXSwKKwkJICAgIFttNF9pbmRpcihbX200X3NldChbJDFdLCQyKV0pXSwgWzBdKSwgWzFdLCBbJDNdLCBbJDRdKV0sCisJICBbbTRfaWZkZWYoW19tNF9zZXQoWyQxXSwkMildLCBbJDNdLCBbJDRdKV0pXSkKKworIyBtNF9zZXRfY29udGVudHMoU0VULCBbU0VQXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4cGFuZCB0byBhIHNpbmdsZSBzdHJpbmcgY29udGFpbmluZyBhbGwgdGhlIGVsZW1lbnRzIGluIFNFVCwKKyMgc2VwYXJhdGVkIGJ5IFNFUCwgd2l0aG91dCBtb2RpZnlpbmcgU0VULiAgTm8gcHJvdmlzaW9uIGlzIG1hZGUgZm9yCisjIGRpc2FtYmlndWF0aW5nIHNldCBlbGVtZW50cyB0aGF0IGNvbnRhaW4gbm9uLWVtcHR5IFNFUCBhcyBhCisjIHN1Yi1zdHJpbmcsIG9yIGZvciByZWNvZ25pemluZyBhIHNldCB0aGF0IGNvbnRhaW5zIG9ubHkgdGhlIGVtcHR5CisjIHN0cmluZy4gIE9yZGVyIG9mIHRoZSBvdXRwdXQgaXMgbm90IGd1YXJhbnRlZWQuICBJZiBhbnkgZWxlbWVudHMKKyMgaGF2ZSBiZWVuIHByZXZpb3VzbHkgcmVtb3ZlZCBmcm9tIHRoZSBzZXQsIHRoaXMgYWN0aW9uIHdpbGwgcHJ1bmUKKyMgdGhlIHVudXNlZCBtZW1vcnkuICBUaGlzIGlzIE8obikgaW4gdGhlIHNpemUgb2YgdGhlIHNldCBiZWZvcmUKKyMgcHJ1bmluZy4KKyMKKyMgVXNlIF9tNF9wb3BkZWYgZm9yIHNwZWVkLiAgVGhlIGV4aXN0ZW5jZSBvZiBfbTRfc2V0X2NsZWFudXAoJDEpCisjIGRldGVybWluZXMgd2hpY2ggdmVyc2lvbiBvZiBfMSBoZWxwZXIgd2UgdXNlLgorbTRfZGVmaW5lKFttNF9zZXRfY29udGVudHNdLAorW200X3NldF9tYXBfc2VwKFskMV0sIFtdLCBbXSwgW1skMl1dKV0pCisKKyMgX200X3NldF9jb250ZW50c18xKFNFVCkKKyMgX200X3NldF9jb250ZW50c18xYyhTRVQpCisjIF9tNF9zZXRfY29udGVudHNfMihTRVQsIFtQUkVdLCBbUE9TVF0sIFtTRVBdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhwYW5kIHRvIGEgbGlzdCBvZiBxdW90ZWQgZWxlbWVudHMgY3VycmVudGx5IGluIHRoZSBzZXQsIGVhY2gKKyMgc3Vycm91bmRlZCBieSBQUkUgYW5kIFBPU1QsIGFuZCBtb3ZpbmcgU0VQIGluIGZyb250IG9mIFBSRSBvbgorIyByZWN1cnNpb24uICBUbyBhdm9pZCBuZXN0aW5nIGxpbWl0IHJlc3RyaWN0aW9ucywgdGhlIGFsZ29yaXRobSBtdXN0CisjIGJlIGJyb2tlbiBpbnRvIHR3byBwYXJ0czsgXzEgZGVzdHJ1Y3RpdmVseSBjb3BpZXMgdGhlIHN0YWNrIGluCisjIHJldmVyc2UgaW50byBfbTRfc2V0XygkMSksIHByb2R1Y2luZyBubyBvdXRwdXQ7IHRoZW4gXzIKKyMgZGVzdHJ1Y3RpdmVseSBjb3BpZXMgX200X3NldF8oJDEpIGJhY2sgaW50byB0aGUgc3RhY2sgaW4gcmV2ZXJzZS4KKyMgSWYgbm8gZWxlbWVudHMgd2VyZSBkZWxldGVkLCB0aGVuIHRoaXMgdmlzaXRzIHRoZSBzZXQgaW4gdGhlIG9yZGVyCisjIHRoYXQgZWxlbWVudHMgd2VyZSBpbnNlcnRlZC4gIEJlaGF2aW9yIGlzIHVuZGVmaW5lZCBpZiBQUkUvUE9TVC9TRVAKKyMgdHJpZXMgdG8gcmVjdXJzaXZlbHkgbGlzdCBvciBtb2RpZnkgU0VUIGluIGFueSB3YXkgb3RoZXIgdGhhbgorIyBjYWxsaW5nIG00X3NldF9yZW1vdmUgb24gdGhlIGN1cnJlbnQgZWxlbWVudC4gIFVzZSBfMSBpZiBhbGwgZW50cmllcworIyBpbiB0aGUgc3RhY2sgYXJlIGd1YXJhbnRlZWQgdG8gYmUgaW4gdGhlIHNldCwgYW5kIF8xYyB0byBwcnVuZQorIyByZW1vdmVkIGVudHJpZXMuICBVc2VzIF9tNF9kZWZuIGFuZCBfbTRfcG9wZGVmIGZvciBzcGVlZC4KK200X2RlZmluZShbX200X3NldF9jb250ZW50c18xXSwKK1tfbTRfc3RhY2tfcmV2ZXJzZShbX200X3NldChbJDFdKV0sIFtfbTRfc2V0XygkMSldKV0pCisKK200X2RlZmluZShbX200X3NldF9jb250ZW50c18xY10sCitbbTRfaWZkZWYoW19tNF9zZXQoWyQxXSldLAorCSAgW200X3NldF9jb250YWlucyhbJDFdLCBfbTRfZGVmbihbX200X3NldChbJDFdKV0pLAorCQkgICBbbTRfcHVzaGRlZihbX200X3NldF8oJDEpXSwgX200X2RlZm4oW19tNF9zZXQoWyQxXSldKSldLAorCQkgICBbX200X3BvcGRlZihbX200X3NldChbJDFdLF1fbTRfZGVmbigKKyAgICAgIFtfbTRfc2V0KFskMV0pXSlbKV0pXSlfbTRfcG9wZGVmKFtfbTRfc2V0KFskMV0pXSkkMChbJDFdKV0sCisJICBbX200X3BvcGRlZihbX200X3NldF9jbGVhbnVwKCQxKV0pXSldKQorCittNF9kZWZpbmUoW19tNF9zZXRfY29udGVudHNfMl0sCitbX200X3N0YWNrX3JldmVyc2UoW19tNF9zZXRfKCQxKV0sIFtfbTRfc2V0KFskMV0pXSwKKyAgWyQyW11fbTRfZGVmbihbX200X3NldF8oJDEpXSkkM10sIFskNFtdXSldKQorCisjIG00X3NldF9kZWxldGUoU0VUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVsZXRlIGFsbCBlbGVtZW50cyBpbiBTRVQsIGFuZCByZWNsYWltIGFueSBtZW1vcnkgb2NjdXBpZWQgYnkgdGhlCisjIHNldC4gIFRoaXMgaXMgTyhuKSBpbiB0aGUgc2V0IHNpemUuCisjCisjIFVzZSBfbTRfZGVmbiBhbmQgX200X3BvcGRlZiBmb3Igc3BlZWQuCittNF9kZWZpbmUoW200X3NldF9kZWxldGVdLAorW200X2lmZGVmKFtfbTRfc2V0KFskMV0pXSwKKwkgIFtfbTRfcG9wZGVmKFtfbTRfc2V0KFskMV0sXV9tNF9kZWZuKFtfbTRfc2V0KFskMV0pXSlbKV0sCisJCSAgICAgIFtfbTRfc2V0KFskMV0pXSkkMChbJDFdKV0sCisJICBbbTRfaWZkZWYoW19tNF9zZXRfY2xlYW51cCgkMSldLAorCQkgICAgW19tNF9wb3BkZWYoW19tNF9zZXRfY2xlYW51cCgkMSldKV0pbTRfaWZkZWYoCisJCSAgICBbX200X3NldF9zaXplKCQxKV0sCisJCSAgICBbX200X3BvcGRlZihbX200X3NldF9zaXplKCQxKV0pXSldKV0pCisKKyMgbTRfc2V0X2RpZmZlcmVuY2UoU0VUMSwgU0VUMikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBhIExJU1Qgb2YgcXVvdGVkIGVsZW1lbnRzIHRoYXQgb2NjdXIgaW4gU0VUMSBidXQgbm90IFNFVDIuCisjIE91dHB1dCBhIGNvbW1hIHByaW9yIHRvIGFueSBlbGVtZW50cywgdG8gZGlzdGluZ3Vpc2ggdGhlIGVtcHR5CisjIHN0cmluZyBmcm9tIG5vIGVsZW1lbnRzLiAgVGhpcyBjYW4gYmUgZGlyZWN0bHkgdXNlZCBhcyBhIHNlcmllcyBvZgorIyBhcmd1bWVudHMsIHN1Y2ggYXMgZm9yIG00X2pvaW4sIG9yIHdyYXBwZWQgaW5zaWRlIHF1b3RlcyBmb3IgdXNlIGluCisjIG00X2ZvcmVhY2guICBPcmRlciBvZiB0aGUgb3V0cHV0IGlzIG5vdCBndWFyYW50ZWVkLgorIworIyBTaG9ydC1jaXJjdWl0IHRoZSBpZGVtcG90ZW5jZSByZWxhdGlvbi4KK200X2RlZmluZShbbTRfc2V0X2RpZmZlcmVuY2VdLAorW200X2lmKFskMV0sIFskMl0sIFtdLCBbbTRfc2V0X21hcF9zZXAoWyQxXSwgW18kMChbJDJdLF0sIFspXSldKV0pCisKK200X2RlZmluZShbX200X3NldF9kaWZmZXJlbmNlXSwKK1ttNF9zZXRfY29udGFpbnMoWyQxXSwgWyQyXSwgW10sIFssWyQyXV0pXSkKKworIyBtNF9zZXRfZHVtcChTRVQsIFtTRVBdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeHBhbmQgdG8gYSBzaW5nbGUgc3RyaW5nIGNvbnRhaW5pbmcgYWxsIHRoZSBlbGVtZW50cyBpbiBTRVQsCisjIHNlcGFyYXRlZCBieSBTRVAsIHRoZW4gZGVsZXRlIFNFVC4gIEluIGdlbmVyYWwsIGlmIHlvdSBvbmx5IG5lZWQgdG8KKyMgbGlzdCB0aGUgY29udGVudHMgb25jZSwgdGhpcyBpcyBmYXN0ZXIgdGhhbiBtNF9zZXRfY29udGVudHMuICBObworIyBwcm92aXNpb24gaXMgbWFkZSBmb3IgZGlzYW1iaWd1YXRpbmcgc2V0IGVsZW1lbnRzIHRoYXQgY29udGFpbgorIyBub24tZW1wdHkgU0VQIGFzIGEgc3ViLXN0cmluZy4gIE9yZGVyIG9mIHRoZSBvdXRwdXQgaXMgbm90CisjIGd1YXJhbnRlZWQuICBUaGlzIGlzIE8obikgaW4gdGhlIHNpemUgb2YgdGhlIHNldCBiZWZvcmUgcHJ1bmluZy4KKyMKKyMgVXNlIF9tNF9wb3BkZWYgZm9yIHNwZWVkLiAgVXNlIGV4aXN0ZW5jZSBvZiBfbTRfc2V0X2NsZWFudXAoJDEpIHRvCisjIGRlY2lkZSBpZiBtb3JlIGV4cGVuc2l2ZSByZWN1cnNpb24gaXMgbmVlZGVkLgorbTRfZGVmaW5lKFttNF9zZXRfZHVtcF0sCitbbTRfaWZkZWYoW19tNF9zZXRfc2l6ZSgkMSldLAorCSAgW19tNF9wb3BkZWYoW19tNF9zZXRfc2l6ZSgkMSldKV0pbTRfaWZkZWYoW19tNF9zZXRfY2xlYW51cCgkMSldLAorICAgIFtfJDBfY2hlY2tdLCBbXyQwXSkoWyQxXSwgW10sIFskMl0pXSkKKworIyBfbTRfc2V0X2R1bXAoU0VULCBbU0VQXSwgW1BSRVBdKQorIyBfbTRfc2V0X2R1bXBfY2hlY2soU0VULCBbU0VQXSwgW1BSRVBdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcmludCBTRVAgYW5kIHRoZSBjdXJyZW50IGVsZW1lbnQsIHRoZW4gZGVsZXRlIHRoZSBlbGVtZW50IGFuZAorIyByZWN1cnNlIHdpdGggZW1wdHkgU0VQIGNoYW5nZWQgdG8gUFJFUC4gIFRoZSBjaGVjayB2YXJpYW50IGNoZWNrcworIyB3aGV0aGVyIHRoZSBlbGVtZW50IGhhcyBiZWVuIHByZXZpb3VzbHkgcmVtb3ZlZC4gIFVzZSBfbTRfZGVmbiBhbmQKKyMgX200X3BvcGRlZiBmb3Igc3BlZWQuCittNF9kZWZpbmUoW19tNF9zZXRfZHVtcF0sCitbbTRfaWZkZWYoW19tNF9zZXQoWyQxXSldLAorCSAgW1skMl1fbTRfZGVmbihbX200X3NldChbJDFdKV0pX200X3BvcGRlZihbX200X3NldChbJDFdLF1fbTRfZGVmbigKKwkJW19tNF9zZXQoWyQxXSldKVspXSwgW19tNF9zZXQoWyQxXSldKSQwKFskMV0sIFskMiQzXSldKV0pCisKK200X2RlZmluZShbX200X3NldF9kdW1wX2NoZWNrXSwKK1ttNF9pZmRlZihbX200X3NldChbJDFdKV0sCisJICBbbTRfc2V0X2NvbnRhaW5zKFskMV0sIF9tNF9kZWZuKFtfbTRfc2V0KFskMV0pXSksCisJCQkgICBbWyQyXV9tNF9kZWZuKFtfbTRfc2V0KFskMV0pXSldKV9tNF9wb3BkZWYoCisgICAgW19tNF9zZXQoWyQxXSxdX200X2RlZm4oW19tNF9zZXQoWyQxXSldKVspXSwKKyAgICBbX200X3NldChbJDFdKV0pJDAoWyQxXSwgWyQyJDNdKV0sCisJICBbX200X3BvcGRlZihbX200X3NldF9jbGVhbnVwKCQxKV0pXSldKQorCisjIG00X3NldF9lbXB0eShTRVQsIFtJRi1FTVBUWV0sIFtJRi1FTEVNRU5UU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4cGFuZCBJRi1FTVBUWSBpZiBTRVQgaGFzIG5vIGVsZW1lbnRzLCBvdGhlcndpc2UgSUYtRUxFTUVOVFMuCittNF9kZWZpbmUoW200X3NldF9lbXB0eV0sCitbbTRfaWZkZWYoW19tNF9zZXRfc2l6ZSgkMSldLAorCSAgW200X2lmKG00X2luZGlyKFtfbTRfc2V0X3NpemUoJDEpXSksIFswXSwgWyQyXSwgWyQzXSldLCBbJDJdKV0pCisKKyMgbTRfc2V0X2ZvcmVhY2goU0VULCBWQVIsIEFDVElPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRm9yIGVhY2ggZWxlbWVudCBvZiBTRVQsIGRlZmluZSBWQVIgdG8gdGhlIGVsZW1lbnQgYW5kIGV4cGFuZAorIyBBQ1RJT04uICBBQ1RJT04gc2hvdWxkIG5vdCByZWN1cnNpdmVseSBsaXN0IFNFVCdzIGNvbnRlbnRzLCBhZGQKKyMgZWxlbWVudHMgdG8gU0VULCBub3IgZGVsZXRlIGFueSBlbGVtZW50IGZyb20gU0VUIGV4Y2VwdCB0aGUgb25lCisjIGN1cnJlbnRseSBpbiBWQVIuICBUaGUgb3JkZXIgdGhhdCB0aGUgZWxlbWVudHMgYXJlIHZpc2l0ZWQgaW4gaXMgbm90CisjIGd1YXJhbnRlZWQuICBUaGlzIGlzIGZhc3RlciB0aGFuIHRoZSBjb3JyZXNwb25kaW5nIG00X2ZvcmVhY2goW1ZBUl0sCisjICAgbTRfaW5kaXIoW200X2RxdW90ZV1tNF9zZXRfbGlzdGMoW1NFVF0pKSwgW0FDVElPTl0pCittNF9kZWZpbmUoW200X3NldF9mb3JlYWNoXSwKK1ttNF9wdXNoZGVmKFskMl0pbTRfc2V0X21hcF9zZXAoWyQxXSwgW200X2RlZmluZShbJDJdLF0sIFspJDNdKV0pCisKKyMgbTRfc2V0X2ludGVyc2VjdGlvbihTRVQxLCBTRVQyKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgYSBMSVNUIG9mIHF1b3RlZCBlbGVtZW50cyB0aGF0IG9jY3VyIGluIGJvdGggU0VUMSBvciBTRVQyLgorIyBPdXRwdXQgYSBjb21tYSBwcmlvciB0byBhbnkgZWxlbWVudHMsIHRvIGRpc3Rpbmd1aXNoIHRoZSBlbXB0eQorIyBzdHJpbmcgZnJvbSBubyBlbGVtZW50cy4gIFRoaXMgY2FuIGJlIGRpcmVjdGx5IHVzZWQgYXMgYSBzZXJpZXMgb2YKKyMgYXJndW1lbnRzLCBzdWNoIGFzIGZvciBtNF9qb2luLCBvciB3cmFwcGVkIGluc2lkZSBxdW90ZXMgZm9yIHVzZSBpbgorIyBtNF9mb3JlYWNoLiAgT3JkZXIgb2YgdGhlIG91dHB1dCBpcyBub3QgZ3VhcmFudGVlZC4KKyMKKyMgSXRlcmF0ZSBvdmVyIHRoZSBzbWFsbGVyIHNldCwgYW5kIHNob3J0LWNpcmN1aXQgdGhlIGlkZW1wb3RlbmNlCisjIHJlbGF0aW9uLgorbTRfZGVmaW5lKFttNF9zZXRfaW50ZXJzZWN0aW9uXSwKK1ttNF9pZihbJDFdLCBbJDJdLCBbbTRfc2V0X2xpc3RjKFskMV0pXSwKKyAgICAgICBtNF9ldmFsKG00X3NldF9zaXplKFskMl0pIDwgbTRfc2V0X3NpemUoWyQxXSkpLCBbMV0sIFskMChbJDJdLCBbJDFdKV0sCisgICAgICAgW200X3NldF9tYXBfc2VwKFskMV0sIFtfJDAoWyQyXSxdLCBbKV0pXSldKQorCittNF9kZWZpbmUoW19tNF9zZXRfaW50ZXJzZWN0aW9uXSwKK1ttNF9zZXRfY29udGFpbnMoWyQxXSwgWyQyXSwgWyxbJDJdXSldKQorCisjIG00X3NldF9saXN0KFNFVCkKKyMgbTRfc2V0X2xpc3RjKFNFVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBhIExJU1Qgb2YgcXVvdGVkIGVsZW1lbnRzIG9mIFNFVC4gIFRoaXMgY2FuIGJlIGRpcmVjdGx5IHVzZWQKKyMgYXMgYSBzZXJpZXMgb2YgYXJndW1lbnRzLCBzdWNoIGFzIGZvciBtNF9qb2luIG9yIG00X3NldF9hZGRfYWxsLCBvcgorIyB3cmFwcGVkIGluc2lkZSBxdW90ZXMgZm9yIHVzZSBpbiBtNF9mb3JlYWNoIG9yIG00X21hcC4gIFdpdGgKKyMgbTRfc2V0X2xpc3QsIHRoZXJlIGlzIG5vIHdheSB0byBkaXN0aW5ndWlzaCBhbiBlbXB0eSBzZXQgZnJvbSBhIHNldAorIyBjb250YWluaW5nIG9ubHkgdGhlIGVtcHR5IHN0cmluZzsgd2l0aCBtNF9zZXRfbGlzdGMsIGEgbGVhZGluZyBjb21tYQorIyBpcyBvdXRwdXQgaWYgdGhlcmUgYXJlIGFueSBlbGVtZW50cy4KK200X2RlZmluZShbbTRfc2V0X2xpc3RdLAorW200X3NldF9tYXBfc2VwKFskMV0sIFtdLCBbXSwgWyxdKV0pCisKK200X2RlZmluZShbbTRfc2V0X2xpc3RjXSwKK1ttNF9zZXRfbWFwX3NlcChbJDFdLCBbLF0pXSkKKworIyBtNF9zZXRfbWFwKFNFVCwgQUNUSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGb3IgZWFjaCBlbGVtZW50IG9mIFNFVCwgZXhwYW5kIEFDVElPTiB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50IG9mIHRoZQorIyBjdXJyZW50IGVsZW1lbnQuICBBQ1RJT04gc2hvdWxkIG5vdCByZWN1cnNpdmVseSBsaXN0IFNFVCdzIGNvbnRlbnRzLAorIyBhZGQgZWxlbWVudHMgdG8gU0VULCBub3IgZGVsZXRlIGFueSBlbGVtZW50IGZyb20gU0VUIGV4Y2VwdCB0aGUgb25lCisjIHBhc3NlZCBhcyBhbiBhcmd1bWVudC4gIFRoZSBvcmRlciB0aGF0IHRoZSBlbGVtZW50cyBhcmUgdmlzaXRlZCBpbgorIyBpcyBub3QgZ3VhcmFudGVlZC4gIFRoaXMgaXMgZmFzdGVyIHRoYW4gZWl0aGVyIG9mIHRoZSBjb3JyZXNwb25kaW5nCisjICAgbTRfbWFwX2FyZ3MoW0FDVElPTl1tNF9zZXRfbGlzdGMoW1NFVF0pKQorIyAgIG00X3NldF9mb3JlYWNoKFtTRVRdLCBbVkFSXSwgW0FDVElPTihtNF9kZWZuKFtWQVJdKSldKQorbTRfZGVmaW5lKFttNF9zZXRfbWFwXSwKK1ttNF9zZXRfbWFwX3NlcChbJDFdLCBbJDIoXSwgWyldKV0pCisKKyMgbTRfc2V0X21hcF9zZXAoU0VULCBbUFJFXSwgW1BPU1RdLCBbU0VQXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRm9yIGVhY2ggZWxlbWVudCBvZiBTRVQsIGV4cGFuZCBQUkVbdmFsdWVdUE9TVFtdLCBhbmQgZXhwYW5kIFNFUAorIyBiZXR3ZWVuIGVsZW1lbnRzLgorbTRfZGVmaW5lKFttNF9zZXRfbWFwX3NlcF0sCitbbTRfaWZkZWYoW19tNF9zZXRfY2xlYW51cCgkMSldLCBbX200X3NldF9jb250ZW50c18xY10sCisJICBbX200X3NldF9jb250ZW50c18xXSkoWyQxXSlfbTRfc2V0X2NvbnRlbnRzXzIoJEApXSkKKworIyBtNF9zZXRfcmVtb3ZlKFNFVCwgVkFMVUUsIFtJRi1QUkVTRU5UXSwgW0lGLUFCU0VOVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSWYgVkFMVUUgaXMgYW4gZWxlbWVudCBvZiBTRVQsIGRlbGV0ZSBpdCBhbmQgZXhwYW5kIElGLVBSRVNFTlQuCisjIE90aGVyd2lzZSBleHBhbmQgSUYtQUJTRU5ULiAgRGVsZXRpbmcgYSBzaW5nbGUgdmFsdWUgaXMgTygxKSwKKyMgYWx0aG91Z2ggaXQgbGVhdmVzIG1lbW9yeSBvY2N1cGllZCB1bnRpbCB0aGUgbmV4dCBPKG4pIHRyYXZlcnNhbCBvZgorIyB0aGUgc2V0IHdoaWNoIHdpbGwgY29tcGFjdCB0aGUgc2V0LgorIworIyBPcHRpbWl6ZSBpZiB0aGUgZWxlbWVudCBiZWluZyByZW1vdmVkIGlzIHRoZSBtb3N0IHJlY2VudGx5IGFkZGVkLAorIyBzaW5jZSBkZWZpbmluZyBfbTRfc2V0X2NsZWFudXAoJDEpIHNsb3dzIGRvd24gc28gbWFueSBvdGhlciBtYWNyb3MuCisjIEluIHBhcnRpY3VsYXIsIHRoaXMgcGxheXMgd2VsbCB3aXRoIG00X3NldF9mb3JlYWNoIGFuZCBtNF9zZXRfbWFwLgorbTRfZGVmaW5lKFttNF9zZXRfcmVtb3ZlXSwKK1ttNF9zZXRfY29udGFpbnMoWyQxXSwgWyQyXSwgW19tNF9zZXRfc2l6ZShbJDFdLAorICAgIFttNF9kZWNyXSltNF9pZihfbTRfZGVmbihbX200X3NldChbJDFdKV0pLCBbJDJdLAorCQkgICAgW19tNF9wb3BkZWYoW19tNF9zZXQoWyQxXSwkMildLCBbX200X3NldChbJDFdKV0pXSwKKwkJICAgIFttNF9kZWZpbmUoW19tNF9zZXRfY2xlYW51cCgkMSldKW00X2RlZmluZSgKKwkJICAgICAgW19tNF9zZXQoWyQxXSwkMildLCBbMF0pXSkkM10sIFskNF0pXSkKKworIyBtNF9zZXRfc2l6ZShTRVQpCisjIC0tLS0tLS0tLS0tLS0tLS0KKyMgRXhwYW5kIHRvIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgY3VycmVudGx5IGluIFNFVC4gIFRoaXMgb3BlcmF0aW9uCisjIGlzIE8oMSksIGFuZCB0aHVzIG1vcmUgZWZmaWNpZW50IHRoYW4gbTRfY291bnQobTRfc2V0X2xpc3QoW1NFVF0pKS4KK200X2RlZmluZShbbTRfc2V0X3NpemVdLAorW200X2lmZGVmKFtfbTRfc2V0X3NpemUoJDEpXSwgW200X2luZGlyKFtfbTRfc2V0X3NpemUoJDEpXSldLCBbMF0pXSkKKworIyBfbTRfc2V0X3NpemUoU0VULCBBQ1RJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQUNUSU9OIG11c3QgYmUgZWl0aGVyIG00X2luY3Igb3IgbTRfZGVjciwgYW5kIHRoZSBzaXplIG9mIFNFVCBpcworIyBjaGFuZ2VkIGFjY29yZGluZ2x5LiAgSWYgdGhlIHNldCBpcyBlbXB0eSwgQUNUSU9OIG11c3Qgbm90IGJlCisjIG00X2RlY3IuCittNF9kZWZpbmUoW19tNF9zZXRfc2l6ZV0sCitbbTRfZGVmaW5lKFtfbTRfc2V0X3NpemUoJDEpXSwKKwkgICBtNF9pZmRlZihbX200X3NldF9zaXplKCQxKV0sIFskMihtNF9pbmRpcihbX200X3NldF9zaXplKCQxKV0pKV0sCisJCSAgICBbMV0pKV0pCisKKyMgbTRfc2V0X3VuaW9uKFNFVDEsIFNFVDIpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9kdWNlIGEgTElTVCBvZiBkb3VibGUgcXVvdGVkIGVsZW1lbnRzIHRoYXQgb2NjdXIgaW4gZWl0aGVyIFNFVDEKKyMgb3IgU0VUMiwgd2l0aG91dCBkdXBsaWNhdGVzLiAgT3V0cHV0IGEgY29tbWEgcHJpb3IgdG8gYW55IGVsZW1lbnRzLAorIyB0byBkaXN0aW5ndWlzaCB0aGUgZW1wdHkgc3RyaW5nIGZyb20gbm8gZWxlbWVudHMuICBUaGlzIGNhbiBiZQorIyBkaXJlY3RseSB1c2VkIGFzIGEgc2VyaWVzIG9mIGFyZ3VtZW50cywgc3VjaCBhcyBmb3IgbTRfam9pbiwgb3IKKyMgd3JhcHBlZCBpbnNpZGUgcXVvdGVzIGZvciB1c2UgaW4gbTRfZm9yZWFjaC4gIE9yZGVyIG9mIHRoZSBvdXRwdXQgaXMKKyMgbm90IGd1YXJhbnRlZWQuCisjCisjIFdlIGNhbiByZWx5IG9uIHRoZSBmYWN0IHRoYXQgbTRfc2V0X2xpc3RjIHBydW5lcyBTRVQxLCBzbyB3ZSBkb24ndAorIyBuZWVkIHRvIGNoZWNrIF9tNF9zZXQoWyQxXSxlbGVtZW50KSBmb3IgMC4gIFNob3J0LWNpcmN1aXQgdGhlCisjIGlkZW1wb3RlbmNlIHJlbGF0aW9uLgorbTRfZGVmaW5lKFttNF9zZXRfdW5pb25dLAorW200X3NldF9saXN0YyhbJDFdKW00X2lmKFskMV0sIFskMl0sIFtdLAorICBbbTRfc2V0X21hcF9zZXAoWyQyXSwgW18kMChbJDFdLF0sIFspXSldKV0pCisKK200X2RlZmluZShbX200X3NldF91bmlvbl0sCitbbTRfaWZkZWYoW19tNF9zZXQoWyQxXSwkMildLCBbXSwgWyxbJDJdXSldKQorCiAKICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIDEyLiBGaWxlIGhhbmRsaW5nLiAgIyMKKyMjIDE2LiBGaWxlIGhhbmRsaW5nLiAgIyMKICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKIAogCiAjIEl0IGlzIGEgcmVhbCBwaXR5IHRoYXQgTTQgY29tZXMgd2l0aCBubyBtYWNyb3MgdG8gYmluZCBhIGRpdmVyc2lvbgogIyB0byBhIGZpbGUuICBTbyB3ZSBoYXZlIHRvIGRlYWwgd2l0aG91dCwgd2hpY2ggbWFrZXMgdXMgYSBsb3QgbW9yZQotIyBmcmFnaWxlIHRoYXQgd2Ugc2hvdWxkLgorIyBmcmFnaWxlIHRoYW4gd2Ugc2hvdWxkLgogCiAKICMgbTRfZmlsZV9hcHBlbmQoRklMRS1OQU1FLCBDT05URU5UKQpAQCAtMTc1NSwyMiArMzI1Miw1MCBAQAogCiAKICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgMTMuIFNldHRpbmcgTTRzdWdhciB1cC4gICMjCisjIyAxNy4gU2V0dGluZyBNNHN1Z2FyIHVwLiAgIyMKICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogCisjIF9tNF9kaXZlcnRfZGl2ZXJzaW9uIHNob3VsZCBiZSBkZWZpbmVkLgorbTRfZGl2ZXJ0X3B1c2goW0tJTExdKQogCiAjIG00X2luaXQKICMgLS0tLS0tLQorIyBJbml0aWFsaXplIHRoZSBtNHN1Z2FyIGxhbmd1YWdlLgogbTRfZGVmaW5lKFttNF9pbml0XSwKIFsjIEFsbCB0aGUgTTRzdWdhciBtYWNyb3Mgc3RhcnQgd2l0aCBgbTRfJywgZXhjZXB0IGBkbmwnIGtlcHQgYXMgaXMKICMgZm9yIHNha2Ugb2Ygc2ltcGxpY2l0eS4KIG00X3BhdHRlcm5fZm9yYmlkKFteXz9tNF9dKQogbTRfcGF0dGVybl9mb3JiaWQoW15kbmwkXSkKIAotIyBDaGVjayB0aGUgZGl2ZXJ0IHB1c2gvcG9wIHBlcmZlY3QgYmFsYW5jZS4KLW00X3dyYXAoW200X2lmZGVmKFtfbTRfZGl2ZXJ0X2RpdmVyc2lvbl0sCi0JICAgW200X2ZhdGFsKFskMDogdW5iYWxhbmNlZCBtNF9kaXZlcnRfcHVzaDpdX200X2RpdmVydF9uX3N0YWNrKV0pW11dKQorIyBJZiBfX200X3ZlcnNpb25fXyBpcyBkZWZpbmVkLCB3ZSBhc3N1bWUgdGhhdCB3ZSBhcmUgYmVpbmcgcnVuIGJ5IE00CisjIDEuNiBvciBuZXdlciwgdGh1cyAkQCByZWN1cnNpb24gaXMgbGluZWFyLCBhbmQgZGVidWdtb2RlKCtkbykKKyMgaXMgYXZhaWxhYmxlIGZvciBmYXN0ZXIgY2hlY2tzIG9mIGRlcmVmZXJlbmNpbmcgdW5kZWZpbmVkIG1hY3JvcworIyBhbmQgZm9yY2luZyBkdW1wZGVmIHRvIHByaW50IHRvIHN0ZGVyciByZWdhcmRsZXNzIG9mIGRlYnVnZmlsZS4KKyMgQnV0IGlmIGl0IGlzIG1pc3NpbmcsIHdlIGFzc3VtZSB3ZSBhcmUgYmVpbmcgcnVuIGJ5IE00IDEuNC54LCB0aGF0CisjICRAIHJlY3Vyc2lvbiBpcyBxdWFkcmF0aWMsIGFuZCB0aGF0IHdlIG5lZWQgZm9yZWFjaC1iYXNlZAorIyByZXBsYWNlbWVudCBtYWNyb3MuICBBbHNvLCBtNCBwcmlvciB0byAxLjQuOCBsb3NlcyB0cmFjayBvZiBsb2NhdGlvbgorIyBkdXJpbmcgbTR3cmFwIHRleHQ7IF9fbGluZV9fIHNob3VsZCBuZXZlciBiZSAwLgorIworIyBVc2UgdGhlIHJhdyBidWlsdGluIHRvIGF2b2lkIHRyaXBwaW5nIHVwIGluY2x1ZGUgdHJhY2luZy4KKyMgTWVhbndoaWxlLCBhdm9pZCBtNF9jb3B5LCBzaW5jZSBpdCB0ZW1wb3JhcmlseSB1bmRlZmluZXMgbTRfZGVmbi4KK200X2lmZGVmKFtfX200X3ZlcnNpb25fX10sCitbbTRfZGVidWdtb2RlKFsrZG9dKQorbTRfZGVmaW5lKFttNF9kZWZuXSwgX200X2RlZm4oW19tNF9kZWZuXSkpCittNF9kZWZpbmUoW200X2R1bXBkZWZdLCBfbTRfZGVmbihbX200X2R1bXBkZWZdKSkKK200X2RlZmluZShbbTRfcG9wZGVmXSwgX200X2RlZm4oW19tNF9wb3BkZWZdKSkKK200X2RlZmluZShbbTRfdW5kZWZpbmVdLCBfbTRfZGVmbihbX200X3VuZGVmaW5lXSkpXSwKK1ttNF9idWlsdGluKFtpbmNsdWRlXSwgW200c3VnYXIvZm9yZWFjaC5tNF0pCittNF93cmFwX2xpZm8oW200X2lmKF9fbGluZV9fLCBbMF0sIFttNF9wdXNoZGVmKFttNF9sb2NhdGlvbl0sCitdXW00X2RxdW90ZShtNF9kcXVvdGUobTRfZHF1b3RlKF9fZmlsZV9fOl9fbGluZV9fKSkpW1spXSldKV0pCiAKLW00X2RpdmVydF9wdXNoKFtLSUxMXSkKLW00X3dyYXAoW200X2RpdmVydF9wb3AoW0tJTExdKVtdXSkKKyMgUmV3cml0ZSB0aGUgZmlyc3QgZW50cnkgb2YgdGhlIGRpdmVyc2lvbiBzdGFjay4KK200X2RpdmVydChbS0lMTF0pCisKKyMgQ2hlY2sgdGhlIGRpdmVydCBwdXNoL3BvcCBwZXJmZWN0IGJhbGFuY2UuCisjIFNvbWUgdXNlcnMgYXJlIHByb25lIHRvIGFsc28gdXNlIG00X3dyYXAgdG8gcmVnaXN0ZXIgbGFzdC1taW51dGUKKyMgbTRfZGl2ZXJ0X3RleHQ7IHNvIGFmdGVyIG91ciBkaXZlcnNpb24gY2xlYW51cHMsIHdlIHJlc3RvcmUKKyMgS0lMTCBhcyB0aGUgYm90dG9tIG9mIHRoZSBkaXZlcnNpb24gc3RhY2suCittNF93cmFwKFttNF9wb3BkZWYoW19tNF9kaXZlcnRfZGl2ZXJzaW9uXSltNF9pZmRlZigKKyAgW19tNF9kaXZlcnRfZGl2ZXJzaW9uXSwgW200X2ZhdGFsKFskMDogdW5iYWxhbmNlZCBtNF9kaXZlcnRfcHVzaDoKK11tNF9kaXZlcnRfc3RhY2spXSlfbTRfcG9wZGVmKFtfbTRfZGl2ZXJ0X3N0YWNrXSltNF9kaXZlcnRfcHVzaChbS0lMTF0pXSkKIF0pCmRpZmYgLS1naXQgYS9kYXRhL3N0YWNrLmhoIGIvZGF0YS9zdGFjay5oaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjEwNDljCi0tLSAvZGV2L251bGwKKysrIGIvZGF0YS9zdGFjay5oaApAQCAtMCwwICsxLDEyMSBAQAorIyBDKysgc2tlbGV0b24gZm9yIEJpc29uCisKKyMgQ29weXJpZ2h0IChDKSAyMDAyLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK200X3B1c2hkZWYoW2I0X2NvcHlyaWdodF95ZWFyc10sCisgICAgICAgICAgIFsyMDAyLTIwMTJdKQorCitiNF9vdXRwdXRfYmVnaW4oW2I0X2Rpcl9wcmVmaXhbXXN0YWNrLmhoXSkKK2I0X2NvcHlyaWdodChbU3RhY2sgaGFuZGxpbmcgZm9yIEJpc29uIHBhcnNlcnMgaW4gQysrXSwKKyAgICAgICAgICAgICBbMjAwMi0yMDEyXSlbCisKKy8qKgorICoqIFxmaWxlIF1iNF9kaXJfcHJlZml4W3N0YWNrLmhoCisgKiogRGVmaW5lIHRoZSBdYjRfbmFtZXNwYWNlX3JlZls6OnN0YWNrIGNsYXNzLgorICovCisKK11iNF9jcHBfZ3VhcmRfb3BlbihbYjRfZGlyX3ByZWZpeFtdc3RhY2suaGhdKVsKKworIyBpbmNsdWRlIDxkZXF1ZT4KKworXWI0X25hbWVzcGFjZV9vcGVuWworICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUyA9IHN0ZDo6ZGVxdWU8VD4gPgorICBjbGFzcyBzdGFjaworICB7CisgIHB1YmxpYzoKKyAgICAvLyBIaWRlIG91ciByZXZlcnNlZCBvcmRlci4KKyAgICB0eXBlZGVmIHR5cGVuYW1lIFM6OnJldmVyc2VfaXRlcmF0b3IgaXRlcmF0b3I7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBTOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworCisgICAgc3RhY2sgKCkgOiBzZXFfICgpCisgICAgeworICAgIH0KKworICAgIHN0YWNrICh1bnNpZ25lZCBpbnQgbikgOiBzZXFfIChuKQorICAgIHsKKyAgICB9CisKKyAgICBpbmxpbmUKKyAgICBUJgorICAgIG9wZXJhdG9yIFtdICh1bnNpZ25lZCBpbnQgaSkKKyAgICB7CisgICAgICByZXR1cm4gc2VxX1tpXTsKKyAgICB9CisKKyAgICBpbmxpbmUKKyAgICBjb25zdCBUJgorICAgIG9wZXJhdG9yIFtdICh1bnNpZ25lZCBpbnQgaSkgY29uc3QKKyAgICB7CisgICAgICByZXR1cm4gc2VxX1tpXTsKKyAgICB9CisKKyAgICBpbmxpbmUKKyAgICB2b2lkCisgICAgcHVzaCAoY29uc3QgVCYgdCkKKyAgICB7CisgICAgICBzZXFfLnB1c2hfZnJvbnQgKHQpOworICAgIH0KKworICAgIGlubGluZQorICAgIHZvaWQKKyAgICBwb3AgKHVuc2lnbmVkIGludCBuID0gMSkKKyAgICB7CisgICAgICBmb3IgKDsgbjsgLS1uKQorICAgICAgICBzZXFfLnBvcF9mcm9udCAoKTsKKyAgICB9CisKKyAgICBpbmxpbmUKKyAgICB1bnNpZ25lZCBpbnQKKyAgICBoZWlnaHQgKCkgY29uc3QKKyAgICB7CisgICAgICByZXR1cm4gc2VxXy5zaXplICgpOworICAgIH0KKworICAgIGlubGluZSBjb25zdF9pdGVyYXRvciBiZWdpbiAoKSBjb25zdCB7IHJldHVybiBzZXFfLnJiZWdpbiAoKTsgfQorICAgIGlubGluZSBjb25zdF9pdGVyYXRvciBlbmQgKCkgY29uc3QgeyByZXR1cm4gc2VxXy5yZW5kICgpOyB9CisKKyAgcHJpdmF0ZToKKyAgICBTIHNlcV87CisgIH07CisKKyAgLy8vIFByZXNlbnQgYSBzbGljZSBvZiB0aGUgdG9wIG9mIGEgc3RhY2suCisgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBTID0gc3RhY2s8VD4gPgorICBjbGFzcyBzbGljZQorICB7CisgIHB1YmxpYzoKKyAgICBzbGljZSAoY29uc3QgUyYgc3RhY2ssIHVuc2lnbmVkIGludCByYW5nZSkKKyAgICAgIDogc3RhY2tfIChzdGFjaykKKyAgICAgICwgcmFuZ2VfIChyYW5nZSkKKyAgICB7CisgICAgfQorCisgICAgaW5saW5lCisgICAgY29uc3QgVCYKKyAgICBvcGVyYXRvciBbXSAodW5zaWduZWQgaW50IGkpIGNvbnN0CisgICAgeworICAgICAgcmV0dXJuIHN0YWNrX1tyYW5nZV8gLSBpXTsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBjb25zdCBTJiBzdGFja187CisgICAgdW5zaWduZWQgaW50IHJhbmdlXzsKKyAgfTsKK11iNF9uYW1lc3BhY2VfY2xvc2VbCisKK11iNF9jcHBfZ3VhcmRfY2xvc2UoW2I0X2Rpcl9wcmVmaXhbXXN0YWNrLmhoXSkKK2I0X291dHB1dF9lbmQoKQorCittNF9wb3BkZWYoW2I0X2NvcHlyaWdodF95ZWFyc10pCmRpZmYgLS1naXQgYS9kYXRhL3hzbHQvYmlzb24ueHNsIGIvZGF0YS94c2x0L2Jpc29uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDU3NWVmCi0tLSAvZGV2L251bGwKKysrIGIvZGF0YS94c2x0L2Jpc29uLnhzbApAQCAtMCwwICsxLDEwNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPCEtLQorICAgIGJpc29uLnhzbCAtIGNvbW1vbiB0ZW1wbGF0ZXMgZm9yIEJpc29uIFhTTFQuCisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICAtLT4KKworPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgIHhtbG5zOmJpc29uPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYmlzb24vIj4KKworPHhzbDprZXkKKyAgbmFtZT0iYmlzb246c3ltYm9sQnlOYW1lIgorICBtYXRjaD0iL2Jpc29uLXhtbC1yZXBvcnQvZ3JhbW1hci9ub250ZXJtaW5hbHMvbm9udGVybWluYWwiCisgIHVzZT0iQG5hbWUiCisvPgorPHhzbDprZXkKKyAgbmFtZT0iYmlzb246c3ltYm9sQnlOYW1lIgorICBtYXRjaD0iL2Jpc29uLXhtbC1yZXBvcnQvZ3JhbW1hci90ZXJtaW5hbHMvdGVybWluYWwiCisgIHVzZT0iQG5hbWUiCisvPgorPHhzbDprZXkKKyAgbmFtZT0iYmlzb246cnVsZUJ5TnVtYmVyIgorICBtYXRjaD0iL2Jpc29uLXhtbC1yZXBvcnQvZ3JhbW1hci9ydWxlcy9ydWxlIgorICB1c2U9IkBudW1iZXIiCisvPgorPHhzbDprZXkKKyAgbmFtZT0iYmlzb246cnVsZUJ5TGhzIgorICBtYXRjaD0iL2Jpc29uLXhtbC1yZXBvcnQvZ3JhbW1hci9ydWxlcy9ydWxlWworICAgICAgICAgQHVzZWZ1bG5lc3MgIT0gJ3VzZWxlc3MtaW4tZ3JhbW1hciddIgorICB1c2U9ImxocyIKKy8+Cis8eHNsOmtleQorICBuYW1lPSJiaXNvbjpydWxlQnlSaHMiCisgIG1hdGNoPSIvYmlzb24teG1sLXJlcG9ydC9ncmFtbWFyL3J1bGVzL3J1bGVbCisgICAgICAgICBAdXNlZnVsbmVzcyAhPSAndXNlbGVzcy1pbi1ncmFtbWFyJ10iCisgIHVzZT0icmhzL3N5bWJvbCIKKy8+CisKKzwhLS0gRm9yIHRoZSBzcGVjaWZpZWQgc3RhdGUsIG91dHB1dDogI3NyLWNvbmZsaWN0cywjcnItY29uZmxpY3RzIC0tPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3RhdGUiIG1vZGU9ImJpc29uOmNvdW50LWNvbmZsaWN0cyI+CisgIDx4c2w6dmFyaWFibGUgbmFtZT0idHJhbnNpdGlvbnMiIHNlbGVjdD0iYWN0aW9ucy90cmFuc2l0aW9ucyIvPgorICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlZHVjdGlvbnMiIHNlbGVjdD0iYWN0aW9ucy9yZWR1Y3Rpb25zIi8+CisgIDx4c2w6dmFyaWFibGUKKyAgICBuYW1lPSJ0ZXJtaW5hbHMiCisgICAgc2VsZWN0PSIKKyAgICAgICR0cmFuc2l0aW9ucy90cmFuc2l0aW9uW0B0eXBlPSdzaGlmdCddL0BzeW1ib2wKKyAgICAgIHwgJHJlZHVjdGlvbnMvcmVkdWN0aW9uL0BzeW1ib2wKKyAgICAiCisgIC8+CisgIDx4c2w6dmFyaWFibGUgbmFtZT0iY29uZmxpY3QtZGF0YSI+CisgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9IiR0ZXJtaW5hbHMiPgorICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJuYW1lIiBzZWxlY3Q9Ii4iLz4KKyAgICAgIDx4c2w6aWYgdGVzdD0iZ2VuZXJhdGUtaWQoJHRlcm1pbmFsc1suID0gJG5hbWVdWzFdKSA9IGdlbmVyYXRlLWlkKC4pIj4KKyAgICAgICAgPHhzbDp2YXJpYWJsZQorICAgICAgICAgIG5hbWU9InNoaWZ0LWNvdW50IgorICAgICAgICAgIHNlbGVjdD0iY291bnQoJHRyYW5zaXRpb25zL3RyYW5zaXRpb25bQHN5bWJvbD0kbmFtZV0pIgorICAgICAgICAvPgorICAgICAgICA8eHNsOnZhcmlhYmxlCisgICAgICAgICAgbmFtZT0icmVkdWNlLWNvdW50IgorICAgICAgICAgIHNlbGVjdD0iY291bnQoJHJlZHVjdGlvbnMvcmVkdWN0aW9uW0BzeW1ib2w9JG5hbWVdKSIKKyAgICAgICAgLz4KKyAgICAgICAgPHhzbDppZiB0ZXN0PSIkc2hpZnQtY291bnQgPiAwIGFuZCAkcmVkdWNlLWNvdW50ID4gMCI+CisgICAgICAgICAgPHhzbDp0ZXh0PnM8L3hzbDp0ZXh0PgorICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgPHhzbDppZiB0ZXN0PSIkcmVkdWNlLWNvdW50ID4gMSI+CisgICAgICAgICAgPHhzbDp0ZXh0PnI8L3hzbDp0ZXh0PgorICAgICAgICA8L3hzbDppZj4KKyAgICAgIDwveHNsOmlmPgorICAgIDwveHNsOmZvci1lYWNoPgorICA8L3hzbDp2YXJpYWJsZT4KKyAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InN0cmluZy1sZW5ndGgodHJhbnNsYXRlKCRjb25mbGljdC1kYXRhLCAncicsICcnKSkiLz4KKyAgPHhzbDp0ZXh0Piw8L3hzbDp0ZXh0PgorICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ic3RyaW5nLWxlbmd0aCh0cmFuc2xhdGUoJGNvbmZsaWN0LWRhdGEsICdzJywgJycpKSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic3BhY2UiPgorICA8eHNsOnBhcmFtIG5hbWU9InJlcGVhdCI+MDwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9ImZpbGwiIHNlbGVjdD0iJyAnIi8+CisgIDx4c2w6aWYgdGVzdD0ibnVtYmVyKCRyZXBlYXQpICZndDs9IDEiPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzcGFjZSI+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwZWF0IiBzZWxlY3Q9IiRyZXBlYXQgLSAxIi8+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iZmlsbCIgc2VsZWN0PSIkZmlsbCIvPgorICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRmaWxsIi8+CisgIDwveHNsOmlmPgorPC94c2w6dGVtcGxhdGU+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9kYXRhL3hzbHQveG1sMmRvdC54c2wgYi9kYXRhL3hzbHQveG1sMmRvdC54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNlYjhlMQotLS0gL2Rldi9udWxsCisrKyBiL2RhdGEveHNsdC94bWwyZG90LnhzbApAQCAtMCwwICsxLDM5NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPCEtLQorICAgIHhtbDJkb3QueHNsIC0gdHJhbnNmb3JtIEJpc29uIFhNTCBSZXBvcnQgaW50byBET1QuCisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisgICAgV3JpdHRlbiBieSBXb2pjaWVjaCBQb2xhayA8cG9sYWtAZ251Lm9yZz4uCisgIC0tPgorCis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyAgeG1sbnM6Ymlzb249Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iaXNvbi8iPgorCis8eHNsOmltcG9ydCBocmVmPSJiaXNvbi54c2wiLz4KKzx4c2w6b3V0cHV0IG1ldGhvZD0idGV4dCIgZW5jb2Rpbmc9IlVURi04IiBpbmRlbnQ9Im5vIi8+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImJpc29uLXhtbC1yZXBvcnQiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJiaXNvbi14bWwtcmVwb3J0Ij4KKyAgPHhzbDp0ZXh0Pi8vIEdlbmVyYXRlZCBieSBHTlUgQmlzb24gPC94c2w6dGV4dD4KKyAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB2ZXJzaW9uIi8+CisgIDx4c2w6dGV4dD4uJiMxMDs8L3hzbDp0ZXh0PgorICA8eHNsOnRleHQ+Ly8gUmVwb3J0IGJ1Z3MgdG8gJmx0OzwveHNsOnRleHQ+CisgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAYnVnLXJlcG9ydCIvPgorICA8eHNsOnRleHQ+Jmd0Oy4mIzEwOzwveHNsOnRleHQ+CisgIDx4c2w6dGV4dD4vLyBIb21lIHBhZ2U6ICZsdDs8L3hzbDp0ZXh0PgorICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHVybCIvPgorICA8eHNsOnRleHQ+Jmd0Oy4mIzEwOyYjMTA7PC94c2w6dGV4dD4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJhdXRvbWF0b24iPgorICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJmaWxlbmFtZSIgc2VsZWN0PSJmaWxlbmFtZSIvPgorICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0b21hdG9uIj4KKyAgPHhzbDpwYXJhbSBuYW1lPSJmaWxlbmFtZSIvPgorICA8eHNsOnRleHQ+ZGlncmFwaCAiPC94c2w6dGV4dD4KKyAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImVzY2FwZSI+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InN1YmplY3QiIHNlbGVjdD0iJGZpbGVuYW1lIi8+CisgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgIDx4c2w6dGV4dD4iJiMxMDt7CisgIG5vZGUgW2ZvbnRuYW1lID0gY291cmllciwgc2hhcGUgPSBib3gsIGNvbG9yc2NoZW1lID0gcGFpcmVkNl0KKyAgZWRnZSBbZm9udG5hbWUgPSBjb3VyaWVyXQorCis8L3hzbDp0ZXh0PgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9InN0YXRlIi8+CisgIDx4c2w6dGV4dD59JiMxMDs8L3hzbDp0ZXh0PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dG9tYXRvbi9zdGF0ZSI+CisgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJvdXRwdXQtbm9kZSI+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im51bWJlciIgc2VsZWN0PSJAbnVtYmVyIi8+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImxhYmVsIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iaXRlbXNldC9pdGVtIi8+CisgICAgPC94c2w6d2l0aC1wYXJhbT4KKyAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJhY3Rpb25zL3RyYW5zaXRpb25zIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iYWN0aW9ucy9yZWR1Y3Rpb25zIj4KKyAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ic3RhdGVuIj4KKyAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbnVtYmVyIi8+CisgICAgPC94c2w6d2l0aC1wYXJhbT4KKyAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFjdGlvbnMvcmVkdWN0aW9ucyI+CisgIDx4c2w6cGFyYW0gbmFtZT0ic3RhdGVuIi8+CisgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSdyZWR1Y3Rpb24nPgorICAgIDwhLS0gVGhlc2UgdmFyaWFibGVzIGFyZSBuZWVkZWQgYmVjYXVzZSB0aGUgY3VycmVudCBjb250ZXh0IGNhbid0IGJlCisgICAgICAgICByZWZlcmVkIHRvIGRpcmVjdGx5IGluIFhQYXRoIGV4cHJlc3Npb25zLiAtLT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJ1bCI+CisgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHJ1bGUiLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9ImVuYSI+CisgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGVuYWJsZWQiLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8IS0tIFRoZSBmb3JlYWNoJ3MgYm9keSBpcyBwcm90ZWN0ZWQgYnkgdGhpcywgc28gdGhhdCB3ZSBhcmUgYWN0dWFsbHkKKyAgICAgICAgIGdvaW5nIHRvIGl0ZXJhdGUgb25jZSBwZXIgcmVkdWN0aW9uIHJ1bGUsIGFuZCBub3QgcGVyIGxvb2thaGVhZC4gLS0+CisgICAgPHhzbDppZiB0ZXN0PSdub3QocHJlY2VkaW5nLXNpYmxpbmc6OipbQHJ1bGU9JHJ1bCBhbmQgQGVuYWJsZWQ9JGVuYV0pJz4KKyAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icnVsZSI+CisgICAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICAgIDwhLS0gVGhlIGFjY2VwdGF0aW9uIHN0YXRlIGlzIHJlZmVyZWQgdG8gYXMgJ2FjY2VwdCcgaW4gdGhlIFhNTCwgYnV0CisgICAgICAgICAgICAgICBqdXN0IGFzICcwJyBpbiB0aGUgRE9ULiAtLT4KKyAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iQHJ1bGU9J2FjY2VwdCciPgorICAgICAgICAgICAgPHhzbDp0ZXh0PjA8L3hzbDp0ZXh0PgorICAgICAgICAgIDwveHNsOndoZW4+CisgICAgICAgICAgPHhzbDpvdGhlcndpc2U+CisgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHJ1bGUiLz4KKyAgICAgICAgICA8L3hzbDpvdGhlcndpc2U+CisgICAgICAgIDwveHNsOmNob29zZT4KKyAgICAgIDwveHNsOnZhcmlhYmxlPgorCisgICAgICA8IS0tIFRoZSBlZGdlJ3MgYmVnaW5uaW5nIC0tPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InJlZHVjdGlvbi1lZGdlLXN0YXJ0Ij4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InN0YXRlIiBzZWxlY3Q9IiRzdGF0ZW4iLz4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InJ1bGUiIHNlbGVjdD0iJHJ1bGUiLz4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImVuYWJsZWQiIHNlbGVjdD0iQGVuYWJsZWQiLz4KKyAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisKKyAgICAgIDwhLS0gVGhlIGVkZ2UncyB0b2tlbnMgLS0+CisgICAgICA8IS0tIERvbid0IHNob3cgbGFiZWxzIGZvciB0aGUgZGVmYXVsdCBhY3Rpb24uIEluIG90aGVyIGNhc2VzLCB0aGVyZSB3aWxsCisgICAgICAgICAgIGFsd2F5cyBiZSBhdCBsZWFzdCBvbmUgdG9rZW4sIHNvICdsYWJlbD0iW10iJyB3aWxsIG5vdCBvY2N1ci4gLS0+CisgICAgICA8eHNsOmlmIHRlc3Q9JyRydWxlIT0wIGFuZCBub3QoLi4vcmVkdWN0aW9uW0BlbmFibGVkPSRlbmEgYW5kIEBydWxlPSRydWxlIGFuZCBAc3ltYm9sPSIkZGVmYXVsdCJdKSc+CisgICAgICAgIDx4c2w6dGV4dD5sYWJlbD0iWzwveHNsOnRleHQ+CisgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PScuLi9yZWR1Y3Rpb25bQGVuYWJsZWQ9JGVuYSBhbmQgQHJ1bGU9JHJ1bGVdJz4KKyAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZXNjYXBlIj4KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzdWJqZWN0IiBzZWxlY3Q9IkBzeW1ib2wiLz4KKyAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgICAgIDx4c2w6aWYgdGVzdD0icG9zaXRpb24oKSAhPSBsYXN0ICgpIj4KKyAgICAgICAgICAgIDx4c2w6dGV4dD4sIDwveHNsOnRleHQ+CisgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgIDwveHNsOmZvci1lYWNoPgorICAgICAgICA8eHNsOnRleHQ+XSIsIDwveHNsOnRleHQ+CisgICAgICA8L3hzbDppZj4KKworICAgICAgPCEtLSBUaGUgZWRnZSdzIGVuZCAtLT4KKyAgICAgIDx4c2w6dGV4dD5zdHlsZT1zb2xpZF0mIzEwOzwveHNsOnRleHQ+CisKKyAgICAgIDwhLS0gVGhlIGRpYW1vbmQgcmVwcmVzZW50aW5nIHRoZSByZWR1Y3Rpb24gLS0+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icmVkdWN0aW9uLW5vZGUiPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ic3RhdGUiIHNlbGVjdD0iJHN0YXRlbiIvPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icnVsZSIgc2VsZWN0PSIkcnVsZSIvPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iY29sb3IiPgorICAgICAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9J0BlbmFibGVkPSJ0cnVlIic+CisgICAgICAgICAgICAgIDx4c2w6dGV4dD4zPC94c2w6dGV4dD4KKyAgICAgICAgICAgIDwveHNsOndoZW4+CisgICAgICAgICAgICA8eHNsOm90aGVyd2lzZT4KKyAgICAgICAgICAgICAgPHhzbDp0ZXh0PjU8L3hzbDp0ZXh0PgorICAgICAgICAgICAgPC94c2w6b3RoZXJ3aXNlPgorICAgICAgICAgIDwveHNsOmNob29zZT4KKyAgICAgICAgPC94c2w6d2l0aC1wYXJhbT4KKyAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPC94c2w6aWY+CisgIDwveHNsOmZvci1lYWNoPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFjdGlvbnMvdHJhbnNpdGlvbnMiPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9InRyYW5zaXRpb24iLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJpdGVtIj4KKyAgPHhzbDpwYXJhbSBuYW1lPSJwcmV2LXJ1bGUtbnVtYmVyIgorICAgIHNlbGVjdD0icHJlY2VkaW5nLXNpYmxpbmc6Oml0ZW1bMV0vQHJ1bGUtbnVtYmVyIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ia2V5KCdiaXNvbjpydWxlQnlOdW1iZXInLCBAcnVsZS1udW1iZXIpIj4KKyAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icG9pbnQiIHNlbGVjdD0iQHBvaW50Ii8+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im51bSIgc2VsZWN0PSJAcnVsZS1udW1iZXIiLz4KKyAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icHJldi1saHMiCisgICAgICBzZWxlY3Q9ImtleSgnYmlzb246cnVsZUJ5TnVtYmVyJywgJHByZXYtcnVsZS1udW1iZXIpL2xoc1t0ZXh0KCldIgorICAgLz4KKyAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Imxvb2thaGVhZHMiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJydWxlIj4KKyAgPHhzbDpwYXJhbSBuYW1lPSJwb2ludCIvPgorICA8eHNsOnBhcmFtIG5hbWU9Im51bSIvPgorICA8eHNsOnBhcmFtIG5hbWU9InByZXYtbGhzIi8+CisgIDx4c2w6dGV4dD4mIzEwOzwveHNsOnRleHQ+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSIkbnVtICZsdDsgMTAiPgorICAgICAgPHhzbDp0ZXh0PiAgPC94c2w6dGV4dD4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSIkbnVtICZsdDsgMTAwIj4KKyAgICAgIDx4c2w6dGV4dD4gPC94c2w6dGV4dD4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6b3RoZXJ3aXNlPgorICAgICAgPHhzbDp0ZXh0PjwveHNsOnRleHQ+CisgICAgPC94c2w6b3RoZXJ3aXNlPgorICA8L3hzbDpjaG9vc2U+CisgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkbnVtIi8+CisgIDx4c2w6dGV4dD4gPC94c2w6dGV4dD4KKyAgPHhzbDpjaG9vc2U+CisgIDx4c2w6d2hlbiB0ZXN0PSIkcHJldi1saHMgPSBsaHNbdGV4dCgpXSI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ibHBhZCI+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzdHIiIHNlbGVjdD0iJ3wnIi8+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwYWQiIHNlbGVjdD0ibnVtYmVyKHN0cmluZy1sZW5ndGgobGhzW3RleHQoKV0pKSArIDEiLz4KKyAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOm90aGVyd2lzZT4KKyAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJsaHMiLz4KKyAgICAgIDx4c2w6dGV4dD46PC94c2w6dGV4dD4KKyAgICA8L3hzbDpvdGhlcndpc2U+CisgIDwveHNsOmNob29zZT4KKyAgPHhzbDppZiB0ZXN0PSIkcG9pbnQgPSAwIj4KKyAgICA8eHNsOnRleHQ+IC48L3hzbDp0ZXh0PgorICA8L3hzbDppZj4KKyAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9InJocy9zeW1ib2x8cmhzL2VtcHR5Ij4KKyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iLz4KKyAgICA8eHNsOmlmIHRlc3Q9IiRwb2ludCA9IHBvc2l0aW9uKCkiPgorICAgICAgPHhzbDp0ZXh0PiAuPC94c2w6dGV4dD4KKyAgICA8L3hzbDppZj4KKyAgPC94c2w6Zm9yLWVhY2g+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3ltYm9sIj4KKyAgPHhzbDp0ZXh0PiA8L3hzbDp0ZXh0PgorICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVtcHR5Ii8+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Imxvb2thaGVhZHMiPgorICA8eHNsOnRleHQ+ICBbPC94c2w6dGV4dD4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJzeW1ib2wiLz4KKyAgPHhzbDp0ZXh0Pl08L3hzbDp0ZXh0PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Imxvb2thaGVhZHMvc3ltYm9sIj4KKyAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz4KKyAgPHhzbDppZiB0ZXN0PSJwb3NpdGlvbigpICE9IGxhc3QoKSI+CisgICAgPHhzbDp0ZXh0PiwgPC94c2w6dGV4dD4KKyAgPC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJyZWR1Y3Rpb24tZWRnZS1zdGFydCI+CisgIDx4c2w6cGFyYW0gbmFtZT0ic3RhdGUiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJydWxlIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZW5hYmxlZCIvPgorCisgIDx4c2w6dGV4dD4gIDwveHNsOnRleHQ+CisgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkc3RhdGUiLz4KKyAgPHhzbDp0ZXh0PiAtPiAiPC94c2w6dGV4dD4KKyAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRzdGF0ZSIvPgorICA8eHNsOnRleHQ+UjwveHNsOnRleHQ+CisgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcnVsZSIvPgorICA8eHNsOmlmIHRlc3Q9JyRlbmFibGVkID0gImZhbHNlIic+CisgICAgPHhzbDp0ZXh0PmQ8L3hzbDp0ZXh0PgorICA8L3hzbDppZj4KKyAgPHhzbDp0ZXh0PiIgWzwveHNsOnRleHQ+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJyZWR1Y3Rpb24tbm9kZSI+CisgIDx4c2w6cGFyYW0gbmFtZT0ic3RhdGUiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJydWxlIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY29sb3IiLz4KKworICA8eHNsOnRleHQ+ICI8L3hzbDp0ZXh0PgorICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHN0YXRlIi8+CisgIDx4c2w6dGV4dD5SPC94c2w6dGV4dD4KKyAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRydWxlIi8+CisgIDx4c2w6aWYgdGVzdD0iJGNvbG9yID0gNSI+CisgICAgPHhzbDp0ZXh0PmQ8L3hzbDp0ZXh0PgorICA8L3hzbDppZj4KKyAgPHhzbDp0ZXh0PiIgW2xhYmVsPSI8L3hzbDp0ZXh0PgorICA8eHNsOmNob29zZT4KKyAgPHhzbDp3aGVuIHRlc3Q9IiRydWxlID0gMCI+CisgICAgPHhzbDp0ZXh0PkFjYyIsIGZpbGxjb2xvcj0xPC94c2w6dGV4dD4KKyAgPC94c2w6d2hlbj4KKyAgPHhzbDpvdGhlcndpc2U+CisgICAgPHhzbDp0ZXh0PlI8L3hzbDp0ZXh0PgorICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcnVsZSIvPgorICAgIDx4c2w6dGV4dD4iLCBmaWxsY29sb3I9PC94c2w6dGV4dD4KKyAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGNvbG9yIi8+CisgIDwveHNsOm90aGVyd2lzZT4KKyAgPC94c2w6Y2hvb3NlPgorICA8eHNsOnRleHQ+LCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdJiMxMDs8L3hzbDp0ZXh0PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRyYW5zaXRpb24iPgorICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ib3V0cHV0LWVkZ2UiPgorICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzcmMiIHNlbGVjdD0iLi4vLi4vLi4vQG51bWJlciIvPgorICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJkc3QiIHNlbGVjdD0iQHN0YXRlIi8+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InN0eWxlIj4KKyAgICAgIDx4c2w6Y2hvb3NlPgorCTx4c2w6d2hlbiB0ZXN0PSJAc3ltYm9sID0gJ2Vycm9yJyI+CisJICA8eHNsOnRleHQ+ZG90dGVkPC94c2w6dGV4dD4KKwk8L3hzbDp3aGVuPgorCTx4c2w6d2hlbiB0ZXN0PSJAdHlwZSA9ICdzaGlmdCciPgorCSAgPHhzbDp0ZXh0PnNvbGlkPC94c2w6dGV4dD4KKwk8L3hzbDp3aGVuPgorCTx4c2w6b3RoZXJ3aXNlPgorCSAgPHhzbDp0ZXh0PmRhc2hlZDwveHNsOnRleHQ+CisJPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOndpdGgtcGFyYW0+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImxhYmVsIj4KKyAgICAgIDx4c2w6aWYgdGVzdD0ibm90KEBzeW1ib2wgPSAnZXJyb3InKSI+CisJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBzeW1ib2wiLz4KKyAgICAgIDwveHNsOmlmPgorICAgIDwveHNsOndpdGgtcGFyYW0+CisgIDwveHNsOmNhbGwtdGVtcGxhdGU+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJvdXRwdXQtbm9kZSI+CisgIDx4c2w6cGFyYW0gbmFtZT0ibnVtYmVyIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0ibGFiZWwiLz4KKyAgPHhzbDp0ZXh0PiAgPC94c2w6dGV4dD4KKyAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRudW1iZXIiLz4KKyAgPHhzbDp0ZXh0PiBbbGFiZWw9IjwveHNsOnRleHQ+CisgIDx4c2w6dGV4dD5TdGF0ZSA8L3hzbDp0ZXh0PgorICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJG51bWJlciIvPgorICA8eHNsOnRleHQ+XG48L3hzbDp0ZXh0PgorICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZXNjYXBlIj4KKyAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ic3ViamVjdCIgc2VsZWN0PSIkbGFiZWwiLz4KKyAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgPHhzbDp0ZXh0PlxsIl0mIzEwOzwveHNsOnRleHQ+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJvdXRwdXQtZWRnZSI+CisgIDx4c2w6cGFyYW0gbmFtZT0ic3JjIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZHN0Ii8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic3R5bGUiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJsYWJlbCIvPgorICA8eHNsOnRleHQ+ICA8L3hzbDp0ZXh0PgorICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHNyYyIvPgorICA8eHNsOnRleHQ+IC0+IDwveHNsOnRleHQ+CisgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZHN0Ii8+CisgIDx4c2w6dGV4dD4gW3N0eWxlPTwveHNsOnRleHQ+CisgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkc3R5bGUiLz4KKyAgPHhzbDppZiB0ZXN0PSIkbGFiZWwgYW5kICRsYWJlbCAhPSAnJyI+CisgICAgPHhzbDp0ZXh0PiBsYWJlbD0iPC94c2w6dGV4dD4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZXNjYXBlIj4KKyAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzdWJqZWN0IiBzZWxlY3Q9IiRsYWJlbCIvPgorICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPHhzbDp0ZXh0PiI8L3hzbDp0ZXh0PgorICA8L3hzbDppZj4KKyAgPHhzbDp0ZXh0Pl0mIzEwOzwveHNsOnRleHQ+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJlc2NhcGUiPgorICA8eHNsOnBhcmFtIG5hbWU9InN1YmplY3QiLz4gPCEtLSByZXF1aXJlZCAtLT4KKyAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlIj4KKyAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ic3ViamVjdCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UiPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ic3ViamVjdCI+CisgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlIj4KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzdWJqZWN0IiBzZWxlY3Q9IiRzdWJqZWN0Ii8+CisgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ic2VhcmNoIiBzZWxlY3Q9IidcJyIvPgorICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJ1xcJyIvPgorICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICAgIDwveHNsOndpdGgtcGFyYW0+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzZWFyY2giIHNlbGVjdD0iJyZxdW90OyciLz4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJ1wmcXVvdDsnIi8+CisgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgIDwveHNsOndpdGgtcGFyYW0+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InNlYXJjaCIgc2VsZWN0PSInJiMxMDsnIi8+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJ1xsJyIvPgorICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UiPgorICA8eHNsOnBhcmFtIG5hbWU9InN1YmplY3QiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWFyY2giLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJyZXBsYWNlIi8+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucygkc3ViamVjdCwgJHNlYXJjaCkiPgorICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJiZWZvcmUiIHNlbGVjdD0ic3Vic3RyaW5nLWJlZm9yZSgkc3ViamVjdCwgJHNlYXJjaCkiLz4KKyAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0iYWZ0ZXIiIHNlbGVjdD0ic3Vic3RyaW5nLWFmdGVyKCRzdWJqZWN0LCAkc2VhcmNoKSIvPgorICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRiZWZvcmUiLz4KKyAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmVwbGFjZSIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlIj4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InN1YmplY3QiIHNlbGVjdD0iJGFmdGVyIi8+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzZWFyY2giIHNlbGVjdD0iJHNlYXJjaCIvPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSIkcmVwbGFjZSIvPgorICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6b3RoZXJ3aXNlPgorICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRzdWJqZWN0Ii8+CisgICAgPC94c2w6b3RoZXJ3aXNlPgorICA8L3hzbDpjaG9vc2U+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJscGFkIj4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzdHIiIHNlbGVjdD0iJyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJwYWQiIHNlbGVjdD0iMCIvPgorICA8eHNsOnZhcmlhYmxlIG5hbWU9ImRpZmYiIHNlbGVjdD0iJHBhZCAtIHN0cmluZy1sZW5ndGgoJHN0cikiIC8+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSIkZGlmZiAmbHQ7IDAiPgorICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRzdHIiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6b3RoZXJ3aXNlPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNwYWNlIj4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGVhdCIgc2VsZWN0PSIkZGlmZiIvPgorICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkc3RyIi8+CisgICAgPC94c2w6b3RoZXJ3aXNlPgorICA8L3hzbDpjaG9vc2U+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2RhdGEveHNsdC94bWwydGV4dC54c2wgYi9kYXRhL3hzbHQveG1sMnRleHQueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiM2Y1YWUKLS0tIC9kZXYvbnVsbAorKysgYi9kYXRhL3hzbHQveG1sMnRleHQueHNsCkBAIC0wLDAgKzEsNTY5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorCis8IS0tCisgICAgeG1sMnRleHQueHNsIC0gdHJhbnNmb3JtIEJpc29uIFhNTCBSZXBvcnQgaW50byBwbGFpbiB0ZXh0LgorCisgICAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworICAgIFdyaXR0ZW4gYnkgV29qY2llY2ggUG9sYWsgPHBvbGFrQGdudS5vcmc+LgorICAtLT4KKworPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgIHhtbG5zOmJpc29uPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYmlzb24vIj4KKworPHhzbDppbXBvcnQgaHJlZj0iYmlzb24ueHNsIi8+Cis8eHNsOm91dHB1dCBtZXRob2Q9InRleHQiIGVuY29kaW5nPSJVVEYtOCIgaW5kZW50PSJubyIvPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIvIj4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJiaXNvbi14bWwtcmVwb3J0Ii8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYmlzb24teG1sLXJlcG9ydCI+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iZ3JhbW1hciIgbW9kZT0icmVkdWN0aW9ucyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImdyYW1tYXIiIG1vZGU9InVzZWxlc3MtaW4tcGFyc2VyIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iYXV0b21hdG9uIiBtb2RlPSJjb25mbGljdHMiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJncmFtbWFyIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iYXV0b21hdG9uIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZ3JhbW1hciIgbW9kZT0icmVkdWN0aW9ucyI+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ibm9udGVybWluYWxzIiBtb2RlPSJ1c2VsZXNzLWluLWdyYW1tYXIiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJ0ZXJtaW5hbHMiIG1vZGU9InVudXNlZC1pbi1ncmFtbWFyIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0icnVsZXMiIG1vZGU9InVzZWxlc3MtaW4tZ3JhbW1hciIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im5vbnRlcm1pbmFscyIgbW9kZT0idXNlbGVzcy1pbi1ncmFtbWFyIj4KKyAgPHhzbDppZiB0ZXN0PSJub250ZXJtaW5hbFtAdXNlZnVsbmVzcz0ndXNlbGVzcy1pbi1ncmFtbWFyJ10iPgorICAgIDx4c2w6dGV4dD5Ob250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyJiMxMDsmIzEwOzwveHNsOnRleHQ+CisgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Im5vbnRlcm1pbmFsW0B1c2VmdWxuZXNzPSd1c2VsZXNzLWluLWdyYW1tYXInXSI+CisgICAgICA8eHNsOnRleHQ+ICAgPC94c2w6dGV4dD4KKyAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgorICAgICAgPHhzbDp0ZXh0PiYjMTA7PC94c2w6dGV4dD4KKyAgICA8L3hzbDpmb3ItZWFjaD4KKyAgICA8eHNsOnRleHQ+JiMxMDsmIzEwOzwveHNsOnRleHQ+CisgIDwveHNsOmlmPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRlcm1pbmFscyIgbW9kZT0idW51c2VkLWluLWdyYW1tYXIiPgorICA8eHNsOmlmIHRlc3Q9InRlcm1pbmFsW0B1c2VmdWxuZXNzPSd1bnVzZWQtaW4tZ3JhbW1hciddIj4KKyAgICA8eHNsOnRleHQ+VGVybWluYWxzIHVudXNlZCBpbiBncmFtbWFyJiMxMDsmIzEwOzwveHNsOnRleHQ+CisgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9InRlcm1pbmFsW0B1c2VmdWxuZXNzPSd1bnVzZWQtaW4tZ3JhbW1hciddIj4KKyAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBzeW1ib2wtbnVtYmVyIiBkYXRhLXR5cGU9Im51bWJlciIvPgorICAgICAgPHhzbDp0ZXh0PiAgIDwveHNsOnRleHQ+CisgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4KKyAgICAgIDx4c2w6dGV4dD4mIzEwOzwveHNsOnRleHQ+CisgICAgPC94c2w6Zm9yLWVhY2g+CisgICAgPHhzbDp0ZXh0PiYjMTA7JiMxMDs8L3hzbDp0ZXh0PgorICA8L3hzbDppZj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJydWxlcyIgbW9kZT0idXNlbGVzcy1pbi1ncmFtbWFyIj4KKyAgPHhzbDp2YXJpYWJsZSBuYW1lPSJzZXQiIHNlbGVjdD0icnVsZVtAdXNlZnVsbmVzcz0ndXNlbGVzcy1pbi1ncmFtbWFyJ10iLz4KKyAgPHhzbDppZiB0ZXN0PSIkc2V0Ij4KKyAgICA8eHNsOnRleHQ+UnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyJiMxMDs8L3hzbDp0ZXh0PgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHlsZS1ydWxlLXNldCI+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icnVsZS1zZXQiIHNlbGVjdD0iJHNldCIvPgorICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPHhzbDp0ZXh0PiYjMTA7JiMxMDs8L3hzbDp0ZXh0PgorICA8L3hzbDppZj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJncmFtbWFyIiBtb2RlPSJ1c2VsZXNzLWluLXBhcnNlciI+CisgIDx4c2w6dmFyaWFibGUKKyAgICBuYW1lPSJzZXQiIHNlbGVjdD0icnVsZXMvcnVsZVtAdXNlZnVsbmVzcz0ndXNlbGVzcy1pbi1wYXJzZXInXSIKKyAgLz4KKyAgPHhzbDppZiB0ZXN0PSIkc2V0Ij4KKyAgICA8eHNsOnRleHQ+UnVsZXMgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cyYjMTA7PC94c2w6dGV4dD4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3R5bGUtcnVsZS1zZXQiPgorICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InJ1bGUtc2V0IiBzZWxlY3Q9IiRzZXQiLz4KKyAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgIDx4c2w6dGV4dD4mIzEwOyYjMTA7PC94c2w6dGV4dD4KKyAgPC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZ3JhbW1hciI+CisgIDx4c2w6dGV4dD5HcmFtbWFyJiMxMDs8L3hzbDp0ZXh0PgorICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3R5bGUtcnVsZS1zZXQiPgorICAgIDx4c2w6d2l0aC1wYXJhbQorICAgICAgbmFtZT0icnVsZS1zZXQiIHNlbGVjdD0icnVsZXMvcnVsZVtAdXNlZnVsbmVzcyE9J3VzZWxlc3MtaW4tZ3JhbW1hciddIgorICAgIC8+CisgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgIDx4c2w6dGV4dD4mIzEwOyYjMTA7PC94c2w6dGV4dD4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJ0ZXJtaW5hbHMiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJub250ZXJtaW5hbHMiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InN0eWxlLXJ1bGUtc2V0Ij4KKyAgPHhzbDpwYXJhbSBuYW1lPSJydWxlLXNldCIvPgorICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iJHJ1bGUtc2V0Ij4KKyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iPgorICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhZCIgc2VsZWN0PSInMyciLz4KKyAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwcmV2LWxocyI+CisgICAgICAgIDx4c2w6aWYgdGVzdD0icG9zaXRpb24oKT4xIj4KKyAgICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InBvc2l0aW9uIiBzZWxlY3Q9InBvc2l0aW9uKCkiLz4KKyAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJ1bGUtc2V0WyRwb3NpdGlvbiAtIDFdL2xocyIvPgorICAgICAgICA8L3hzbDppZj4KKyAgICAgIDwveHNsOndpdGgtcGFyYW0+CisgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICA8L3hzbDpmb3ItZWFjaD4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJncmFtbWFyL3Rlcm1pbmFscyI+CisgIDx4c2w6dGV4dD5UZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXImIzEwOyYjMTA7PC94c2w6dGV4dD4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJ0ZXJtaW5hbCIvPgorICA8eHNsOnRleHQ+JiMxMDsmIzEwOzwveHNsOnRleHQ+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZ3JhbW1hci9ub250ZXJtaW5hbHMiPgorICA8eHNsOnRleHQ+Tm9udGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyJiMxMDsmIzEwOzwveHNsOnRleHQ+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ibm9udGVybWluYWxbQHVzZWZ1bG5lc3MhPSd1c2VsZXNzLWluLWdyYW1tYXInXSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRlcm1pbmFsIj4KKyAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+CisgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJsaW5lLXdyYXAiPgorICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJmaXJzdC1saW5lLWxlbmd0aCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9InN0cmluZy1sZW5ndGgoQG5hbWUpICZndDsgNjYiPjA8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4KKyAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iNjYgLSBzdHJpbmctbGVuZ3RoKEBuYW1lKSIgLz4KKyAgICAgICAgPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOndpdGgtcGFyYW0+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImxpbmUtbGVuZ3RoIiBzZWxlY3Q9IjY2IiAvPgorICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0Ij4KKyAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoJyAoJywgQHRva2VuLW51bWJlciwgJyknKSIvPgorICAgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9ImtleSgnYmlzb246cnVsZUJ5UmhzJywgQG5hbWUpIj4KKyAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvbmNhdCgnICcsIEBudW1iZXIpIi8+CisgICAgICA8L3hzbDpmb3ItZWFjaD4KKyAgICA8L3hzbDp3aXRoLXBhcmFtPgorICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im5vbnRlcm1pbmFsIj4KKyAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+CisgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoJyAoJywgQHN5bWJvbC1udW1iZXIsICcpJykiLz4KKyAgPHhzbDp0ZXh0PiYjMTA7PC94c2w6dGV4dD4KKyAgPHhzbDp2YXJpYWJsZSBuYW1lPSJvdXRwdXQiPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJsaW5lLXdyYXAiPgorICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImxpbmUtbGVuZ3RoIiBzZWxlY3Q9IjY2IiAvPgorICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiPgorICAgICAgICA8eHNsOnRleHQ+ICAgIDwveHNsOnRleHQ+CisgICAgICAgIDx4c2w6aWYgdGVzdD0ia2V5KCdiaXNvbjpydWxlQnlMaHMnLCBAbmFtZSkiPgorICAgICAgICAgIDx4c2w6dGV4dD5vbkBsZWZ0OjwveHNsOnRleHQ+CisgICAgICAgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9ImtleSgnYmlzb246cnVsZUJ5TGhzJywgQG5hbWUpIj4KKyAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoJyAnLCBAbnVtYmVyKSIvPgorICAgICAgICAgIDwveHNsOmZvci1lYWNoPgorICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgPHhzbDppZiB0ZXN0PSJrZXkoJ2Jpc29uOnJ1bGVCeVJocycsIEBuYW1lKSI+CisgICAgICAgICAgPHhzbDppZiB0ZXN0PSJrZXkoJ2Jpc29uOnJ1bGVCeUxocycsIEBuYW1lKSI+CisgICAgICAgICAgICA8eHNsOnRleHQ+LCA8L3hzbDp0ZXh0PgorICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgIDx4c2w6dGV4dD5vbkByaWdodDo8L3hzbDp0ZXh0PgorICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJrZXkoJ2Jpc29uOnJ1bGVCeVJocycsIEBuYW1lKSI+CisgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY29uY2F0KCcgJywgQG51bWJlcikiLz4KKyAgICAgICAgICA8L3hzbDpmb3ItZWFjaD4KKyAgICAgICAgPC94c2w6aWY+CisgICAgICA8L3hzbDp3aXRoLXBhcmFtPgorICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgIDwveHNsOnZhcmlhYmxlPgorICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0idHJhbnNsYXRlKCRvdXRwdXQsICdAJywgJyAnKSIgLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRvbWF0b24iIG1vZGU9ImNvbmZsaWN0cyI+CisgIDx4c2w6dmFyaWFibGUgbmFtZT0iY29uZmxpY3QtcmVwb3J0Ij4KKyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9InN0YXRlIiBtb2RlPSJjb25mbGljdHMiLz4KKyAgPC94c2w6dmFyaWFibGU+CisgIDx4c2w6aWYgdGVzdD0ic3RyaW5nLWxlbmd0aCgkY29uZmxpY3QtcmVwb3J0KSAhPSAwIj4KKyAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGNvbmZsaWN0LXJlcG9ydCIvPgorICAgIDx4c2w6dGV4dD4mIzEwOyYjMTA7PC94c2w6dGV4dD4KKyAgPC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3RhdGUiIG1vZGU9ImNvbmZsaWN0cyI+CisgIDx4c2w6dmFyaWFibGUgbmFtZT0iY29uZmxpY3QtY291bnRzIj4KKyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImJpc29uOmNvdW50LWNvbmZsaWN0cyIgLz4KKyAgPC94c2w6dmFyaWFibGU+CisgIDx4c2w6dmFyaWFibGUKKyAgICBuYW1lPSJzci1jb3VudCIgc2VsZWN0PSJzdWJzdHJpbmctYmVmb3JlKCRjb25mbGljdC1jb3VudHMsICcsJykiCisgIC8+CisgIDx4c2w6dmFyaWFibGUKKyAgICBuYW1lPSJyci1jb3VudCIgc2VsZWN0PSJzdWJzdHJpbmctYWZ0ZXIoJGNvbmZsaWN0LWNvdW50cywgJywnKSIKKyAgLz4KKyAgPHhzbDppZiB0ZXN0PSIkc3ItY291bnQgPiAwIG9yICRyci1jb3VudCA+IDAiPgorICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoJ1N0YXRlICcsIEBudW1iZXIsICcgY29uZmxpY3RzOicpIi8+CisgICAgPHhzbDppZiB0ZXN0PSIkc3ItY291bnQgPiAwIj4KKyAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoJyAnLCAkc3ItY291bnQsICcgc2hpZnQvcmVkdWNlJykiLz4KKyAgICAgIDx4c2w6aWYgdGVzdD0iJHJyLWNvdW50ID4gMCI+CisgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIoJywnKSIvPgorICAgICAgPC94c2w6aWY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDppZiB0ZXN0PSIkcnItY291bnQgPiAwIj4KKyAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoJyAnLCAkcnItY291bnQsICcgcmVkdWNlL3JlZHVjZScpIi8+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IicmIzEwOyciLz4KKyAgPC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0b21hdG9uIj4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJzdGF0ZSI+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhZCIgc2VsZWN0PSInMyciLz4KKyAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dG9tYXRvbi9zdGF0ZSI+CisgIDx4c2w6cGFyYW0gbmFtZT0icGFkIi8+CisgIDx4c2w6dGV4dD4mIzEwOyYjMTA7PC94c2w6dGV4dD4KKyAgPHhzbDp0ZXh0PlN0YXRlIDwveHNsOnRleHQ+CisgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbnVtYmVyIi8+CisgIDx4c2w6dGV4dD4mIzEwOyYjMTA7PC94c2w6dGV4dD4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJpdGVtc2V0L2l0ZW0iPgorICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwYWQiIHNlbGVjdD0iJHBhZCIvPgorICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iYWN0aW9ucy90cmFuc2l0aW9ucyI+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InR5cGUiIHNlbGVjdD0iJ3NoaWZ0JyIvPgorICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iYWN0aW9ucy9lcnJvcnMiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJhY3Rpb25zL3JlZHVjdGlvbnMiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJhY3Rpb25zL3RyYW5zaXRpb25zIj4KKyAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0idHlwZSIgc2VsZWN0PSInZ290byciLz4KKyAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9InNvbHZlZC1jb25mbGljdHMiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhY3Rpb25zL3RyYW5zaXRpb25zIj4KKyAgPHhzbDpwYXJhbSBuYW1lPSJ0eXBlIi8+CisgIDx4c2w6aWYgdGVzdD0idHJhbnNpdGlvbltAdHlwZSA9ICR0eXBlXSI+CisgICAgPHhzbDp0ZXh0PiYjMTA7PC94c2w6dGV4dD4KKyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9InRyYW5zaXRpb25bQHR5cGUgPSAkdHlwZV0iPgorICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhZCI+CisJPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9Im1heC13aWR0aC1zeW1ib2wiPgorCSAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0idHJhbnNpdGlvbltAdHlwZSA9ICR0eXBlXSIvPgorCTwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICA8L3hzbDp3aXRoLXBhcmFtPgorICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgPC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYWN0aW9ucy9lcnJvcnMiPgorICA8eHNsOmlmIHRlc3Q9ImVycm9yIj4KKyAgICA8eHNsOnRleHQ+JiMxMDs8L3hzbDp0ZXh0PgorICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iZXJyb3IiPgorICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhZCI+CisJPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9Im1heC13aWR0aC1zeW1ib2wiPgorCSAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iZXJyb3IiLz4KKwk8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgPC94c2w6d2l0aC1wYXJhbT4KKyAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+CisgIDwveHNsOmlmPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFjdGlvbnMvcmVkdWN0aW9ucyI+CisgIDx4c2w6aWYgdGVzdD0icmVkdWN0aW9uIj4KKyAgICA8eHNsOnRleHQ+JiMxMDs8L3hzbDp0ZXh0PgorICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0icmVkdWN0aW9uIj4KKyAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwYWQiPgorCTx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJtYXgtd2lkdGgtc3ltYm9sIj4KKwkgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9InJlZHVjdGlvbiIvPgorCTwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICA8L3hzbDp3aXRoLXBhcmFtPgorICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgPC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iaXRlbSI+CisgIDx4c2w6cGFyYW0gbmFtZT0icGFkIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0icHJldi1ydWxlLW51bWJlciIKKwkgICAgIHNlbGVjdD0icHJlY2VkaW5nLXNpYmxpbmc6Oml0ZW1bMV0vQHJ1bGUtbnVtYmVyIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzCisgICAgc2VsZWN0PSJrZXkoJ2Jpc29uOnJ1bGVCeU51bWJlcicsIGN1cnJlbnQoKS9AcnVsZS1udW1iZXIpIgorICA+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Iml0ZW1zZXQiIHNlbGVjdD0iJ3RydWUnIi8+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhZCIgc2VsZWN0PSIkcGFkIi8+CisgICAgPHhzbDp3aXRoLXBhcmFtCisgICAgICBuYW1lPSJwcmV2LWxocyIKKyAgICAgIHNlbGVjdD0ia2V5KCdiaXNvbjpydWxlQnlOdW1iZXInLCAkcHJldi1ydWxlLW51bWJlcikvbGhzW3RleHQoKV0iCisgICAvPgorICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwb2ludCIgc2VsZWN0PSJAcG9pbnQiLz4KKyAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibG9va2FoZWFkcyI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Imxvb2thaGVhZHMiLz4KKyAgICA8L3hzbDp3aXRoLXBhcmFtPgorICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icnVsZSI+CisgIDx4c2w6cGFyYW0gbmFtZT0iaXRlbXNldCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InBhZCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InByZXYtbGhzIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0icG9pbnQiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJsb29rYWhlYWRzIi8+CisKKyAgPHhzbDppZiB0ZXN0PSIkaXRlbXNldCAhPSAndHJ1ZScgYW5kIG5vdCgkcHJldi1saHMgPSBsaHNbdGV4dCgpXSkiPgorICAgIDx4c2w6dGV4dD4mIzEwOzwveHNsOnRleHQ+CisgIDwveHNsOmlmPgorCisgIDx4c2w6dGV4dD4gIDwveHNsOnRleHQ+CisgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJscGFkIj4KKyAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ic3RyIiBzZWxlY3Q9InN0cmluZyhAbnVtYmVyKSIvPgorICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwYWQiIHNlbGVjdD0ibnVtYmVyKCRwYWQpIi8+CisgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgIDx4c2w6dGV4dD4gPC94c2w6dGV4dD4KKworICA8IS0tIExIUyAtLT4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9IiRpdGVtc2V0ICE9ICd0cnVlJyBhbmQgJHByZXYtbGhzID0gbGhzW3RleHQoKV0iPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImxwYWQiPgorCTx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzdHIiIHNlbGVjdD0iJ3wnIi8+CisJPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhZCIgc2VsZWN0PSJudW1iZXIoc3RyaW5nLWxlbmd0aChsaHNbdGV4dCgpXSkpICsgMSIvPgorICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSIkaXRlbXNldCA9ICd0cnVlJyBhbmQgJHByZXYtbGhzID0gbGhzW3RleHQoKV0iPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImxwYWQiPgorCTx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzdHIiIHNlbGVjdD0iJ3wnIi8+CisJPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhZCIgc2VsZWN0PSJudW1iZXIoc3RyaW5nLWxlbmd0aChsaHNbdGV4dCgpXSkpICsgMSIvPgorICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6b3RoZXJ3aXNlPgorICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImxocyIvPgorICAgICAgPHhzbDp0ZXh0Pjo8L3hzbDp0ZXh0PgorICAgIDwveHNsOm90aGVyd2lzZT4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDwhLS0gUkhTIC0tPgorICA8eHNsOmZvci1lYWNoIHNlbGVjdD0icmhzLyoiPgorICAgIDx4c2w6aWYgdGVzdD0icG9zaXRpb24oKSA9ICRwb2ludCArIDEiPgorICAgICAgPHhzbDp0ZXh0PiAuPC94c2w6dGV4dD4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmlmIHRlc3Q9IiRpdGVtc2V0ID0gJ3RydWUnIGFuZCBuYW1lKC4pICE9ICdlbXB0eSciPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIi8+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDppZiB0ZXN0PSIkaXRlbXNldCAhPSAndHJ1ZSciPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIi8+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDppZiB0ZXN0PSJwb3NpdGlvbigpID0gbGFzdCgpIGFuZCBwb3NpdGlvbigpID0gJHBvaW50Ij4KKyAgICAgIDx4c2w6dGV4dD4gLjwveHNsOnRleHQ+CisgICAgPC94c2w6aWY+CisgIDwveHNsOmZvci1lYWNoPgorICA8eHNsOmlmIHRlc3Q9IiRsb29rYWhlYWRzIj4KKyAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGxvb2thaGVhZHMiLz4KKyAgPC94c2w6aWY+CisKKyAgPHhzbDp0ZXh0PiYjMTA7PC94c2w6dGV4dD4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzeW1ib2wiPgorICA8eHNsOnRleHQ+IDwveHNsOnRleHQ+CisgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZW1wdHkiPgorICA8eHNsOnRleHQ+IC8qIGVtcHR5ICovPC94c2w6dGV4dD4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJsb29rYWhlYWRzIj4KKyAgPHhzbDp0ZXh0PiAgWzwveHNsOnRleHQ+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ic3ltYm9sIi8+CisgIDx4c2w6dGV4dD5dPC94c2w6dGV4dD4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJsb29rYWhlYWRzL3N5bWJvbCI+CisgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIi8+CisgIDx4c2w6aWYgdGVzdD0icG9zaXRpb24oKSAhPSBsYXN0KCkiPgorICAgIDx4c2w6dGV4dD4sIDwveHNsOnRleHQ+CisgIDwveHNsOmlmPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRyYW5zaXRpb24iPgorICA8eHNsOnBhcmFtIG5hbWU9InBhZCIvPgorICA8eHNsOnRleHQ+ICAgIDwveHNsOnRleHQ+CisgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJycGFkIj4KKyAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ic3RyIiBzZWxlY3Q9InN0cmluZyhAc3ltYm9sKSIvPgorICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwYWQiIHNlbGVjdD0ibnVtYmVyKCRwYWQpICsgMiIvPgorICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0iQHR5cGUgPSAnc2hpZnQnIj4KKyAgICAgIDx4c2w6dGV4dD5zaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDwveHNsOnRleHQ+CisgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHN0YXRlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iQHR5cGUgPSAnZ290byciPgorICAgICAgPHhzbDp0ZXh0PmdvIHRvIHN0YXRlIDwveHNsOnRleHQ+CisgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHN0YXRlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorICA8eHNsOnRleHQ+JiMxMDs8L3hzbDp0ZXh0PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVycm9yIj4KKyAgPHhzbDpwYXJhbSBuYW1lPSJwYWQiLz4KKyAgPHhzbDp0ZXh0PiAgICA8L3hzbDp0ZXh0PgorICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icnBhZCI+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InN0ciIgc2VsZWN0PSJzdHJpbmcoQHN5bWJvbCkiLz4KKyAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icGFkIiBzZWxlY3Q9Im51bWJlcigkcGFkKSArIDIiLz4KKyAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgPHhzbDp0ZXh0PmVycm9yPC94c2w6dGV4dD4KKyAgPHhzbDp0ZXh0PiAoPC94c2w6dGV4dD4KKyAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InRleHQoKSIvPgorICA8eHNsOnRleHQ+KTwveHNsOnRleHQ+CisgIDx4c2w6dGV4dD4mIzEwOzwveHNsOnRleHQ+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmVkdWN0aW9uIj4KKyAgPHhzbDpwYXJhbSBuYW1lPSJwYWQiLz4KKyAgPHhzbDp0ZXh0PiAgICA8L3hzbDp0ZXh0PgorICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icnBhZCI+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InN0ciIgc2VsZWN0PSJzdHJpbmcoQHN5bWJvbCkiLz4KKyAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icGFkIiBzZWxlY3Q9Im51bWJlcigkcGFkKSArIDIiLz4KKyAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgPHhzbDppZiB0ZXN0PSJAZW5hYmxlZCA9ICdmYWxzZSciPgorICAgIDx4c2w6dGV4dD5bPC94c2w6dGV4dD4KKyAgPC94c2w6aWY+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJAcnVsZSA9ICdhY2NlcHQnIj4KKyAgICAgIDx4c2w6dGV4dD5hY2NlcHQ8L3hzbDp0ZXh0PgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDpvdGhlcndpc2U+CisgICAgICA8eHNsOnRleHQ+cmVkdWNlIHVzaW5nIHJ1bGUgPC94c2w6dGV4dD4KKyAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAcnVsZSIvPgorICAgICAgPHhzbDp0ZXh0PiAoPC94c2w6dGV4dD4KKyAgICAgIDx4c2w6dmFsdWUtb2YKKwkgIHNlbGVjdD0ia2V5KCdiaXNvbjpydWxlQnlOdW1iZXInLCBjdXJyZW50KCkvQHJ1bGUpL2xoc1t0ZXh0KCldIi8+CisgICAgICA8eHNsOnRleHQ+KTwveHNsOnRleHQ+CisgICAgPC94c2w6b3RoZXJ3aXNlPgorICA8L3hzbDpjaG9vc2U+CisgIDx4c2w6aWYgdGVzdD0iQGVuYWJsZWQgPSAnZmFsc2UnIj4KKyAgICA8eHNsOnRleHQ+XTwveHNsOnRleHQ+CisgIDwveHNsOmlmPgorICA8eHNsOnRleHQ+JiMxMDs8L3hzbDp0ZXh0PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InNvbHZlZC1jb25mbGljdHMiPgorICA8eHNsOmlmIHRlc3Q9InJlc29sdXRpb24iPgorICAgIDx4c2w6dGV4dD4mIzEwOzwveHNsOnRleHQ+CisgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJyZXNvbHV0aW9uIi8+CisgIDwveHNsOmlmPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJlc29sdXRpb24iPgorICA8eHNsOnRleHQ+ICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSA8L3hzbDp0ZXh0PgorICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHJ1bGUiLz4KKyAgPHhzbDp0ZXh0PiBhbmQgdG9rZW4gPC94c2w6dGV4dD4KKyAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBzeW1ib2wiLz4KKyAgPHhzbDp0ZXh0PiByZXNvbHZlZCBhcyA8L3hzbDp0ZXh0PgorICA8eHNsOmlmIHRlc3Q9IkB0eXBlID0gJ2Vycm9yJyI+CisgICAgPHhzbDp0ZXh0PmFuIDwveHNsOnRleHQ+CisgIDwveHNsOmlmPgorICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHR5cGUiLz4KKyAgPHhzbDp0ZXh0PiAoPC94c2w6dGV4dD4KKyAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz4KKyAgPHhzbDp0ZXh0PikuJiMxMDs8L3hzbDp0ZXh0PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ibWF4LXdpZHRoLXN5bWJvbCI+CisgIDx4c2w6cGFyYW0gbmFtZT0ibm9kZSIvPgorICA8eHNsOnZhcmlhYmxlIG5hbWU9Imxvbmdlc3QiPgorICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIkbm9kZSI+CisgICAgICA8eHNsOnNvcnQgZGF0YS10eXBlPSJudW1iZXIiIHNlbGVjdD0ic3RyaW5nLWxlbmd0aChAc3ltYm9sKSIKKwkJb3JkZXI9ImRlc2NlbmRpbmciLz4KKyAgICAgIDx4c2w6aWYgdGVzdD0icG9zaXRpb24oKSA9IDEiPgorCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJzdHJpbmctbGVuZ3RoKEBzeW1ib2wpIi8+CisgICAgICA8L3hzbDppZj4KKyAgICA8L3hzbDpmb3ItZWFjaD4KKyAgPC94c2w6dmFyaWFibGU+CisgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkbG9uZ2VzdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ibHBhZCI+CisgIDx4c2w6cGFyYW0gbmFtZT0ic3RyIiBzZWxlY3Q9IicnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0icGFkIiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDp2YXJpYWJsZSBuYW1lPSJkaWZmIiBzZWxlY3Q9IiRwYWQgLSBzdHJpbmctbGVuZ3RoKCRzdHIpIiAvPgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0iJGRpZmYgJmx0OyAwIj4KKyAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkc3RyIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOm90aGVyd2lzZT4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzcGFjZSI+CisJPHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGVhdCIgc2VsZWN0PSIkZGlmZiIvPgorICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkc3RyIi8+CisgICAgPC94c2w6b3RoZXJ3aXNlPgorICA8L3hzbDpjaG9vc2U+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJycGFkIj4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzdHIiIHNlbGVjdD0iJyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJwYWQiIHNlbGVjdD0iMCIvPgorICA8eHNsOnZhcmlhYmxlIG5hbWU9ImRpZmYiIHNlbGVjdD0iJHBhZCAtIHN0cmluZy1sZW5ndGgoJHN0cikiLz4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9IiRkaWZmICZsdDsgMCI+CisgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHN0ciIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDpvdGhlcndpc2U+CisgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHN0ciIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNwYWNlIj4KKwk8eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwZWF0IiBzZWxlY3Q9IiRkaWZmIi8+CisgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgIDwveHNsOm90aGVyd2lzZT4KKyAgPC94c2w6Y2hvb3NlPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ibGluZS13cmFwIj4KKyAgPHhzbDpwYXJhbSBuYW1lPSJsaW5lLWxlbmd0aCIvPiA8IS0tIHJlcXVpcmVkIC0tPgorICA8eHNsOnBhcmFtIG5hbWU9ImZpcnN0LWxpbmUtbGVuZ3RoIiBzZWxlY3Q9IiRsaW5lLWxlbmd0aCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InRleHQiLz4gPCEtLSByZXF1aXJlZCAtLT4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9Im5vcm1hbGl6ZS1zcGFjZSgkdGV4dCkgPSAnJyIgLz4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3RyaW5nLWxlbmd0aCgkdGV4dCkgJmx0Oz0gJGZpcnN0LWxpbmUtbGVuZ3RoIj4KKyAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoJHRleHQsICcmIzEwOycpIiAvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDpvdGhlcndpc2U+CisgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9ImJyZWFrLXBvcyI+CisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJ3cy1zZWFyY2giPgorICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9IiR0ZXh0IiAvPgorICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzdGFydCIgc2VsZWN0PSIkZmlyc3QtbGluZS1sZW5ndGgrMSIgLz4KKyAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgIDwveHNsOnZhcmlhYmxlPgorICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InN1YnN0cmluZygkdGV4dCwgMSwgJGJyZWFrLXBvcyAtIDEpIiAvPgorICAgICAgPHhzbDp0ZXh0PiYjMTA7PC94c2w6dGV4dD4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJsaW5lLXdyYXAiPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibGluZS1sZW5ndGgiIHNlbGVjdD0iJGxpbmUtbGVuZ3RoIiAvPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0KKyAgICAgICAgICBuYW1lPSJ0ZXh0IiBzZWxlY3Q9ImNvbmNhdCgnICAgICcsIHN1YnN0cmluZygkdGV4dCwgJGJyZWFrLXBvcysxKSkiCisgICAgICAgIC8+CisgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgIDwveHNsOm90aGVyd2lzZT4KKyAgPC94c2w6Y2hvb3NlPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0id3Mtc2VhcmNoIj4KKyAgPHhzbDpwYXJhbSBuYW1lPSJ0ZXh0Ii8+IDwhLS0gcmVxdWlyZWQgLS0+CisgIDx4c2w6cGFyYW0gbmFtZT0ic3RhcnQiLz4gPCEtLSByZXF1aXJlZCAtLT4KKyAgPHhzbDp2YXJpYWJsZSBuYW1lPSJzZWFyY2gtdGV4dCIgc2VsZWN0PSJzdWJzdHJpbmcoJHRleHQsICRzdGFydCkiIC8+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJub3QoY29udGFpbnMoJHNlYXJjaC10ZXh0LCAnICcpKSI+CisgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ic3RyaW5nLWxlbmd0aCgkdGV4dCkrMSIgLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6b3RoZXJ3aXNlPgorICAgICAgPHhzbDp2YWx1ZS1vZgorICAgICAgICBzZWxlY3Q9IiRzdGFydCArIHN0cmluZy1sZW5ndGgoc3Vic3RyaW5nLWJlZm9yZSgkc2VhcmNoLXRleHQsICcgJykpIgorICAgICAgLz4KKyAgICA8L3hzbDpvdGhlcndpc2U+CisgIDwveHNsOmNob29zZT4KKzwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvZGF0YS94c2x0L3htbDJ4aHRtbC54c2wgYi9kYXRhL3hzbHQveG1sMnhodG1sLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODEyNmNmCi0tLSAvZGV2L251bGwKKysrIGIvZGF0YS94c2x0L3htbDJ4aHRtbC54c2wKQEAgLTAsMCArMSw3NDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisKKzwhLS0KKyAgICB4bWwyaHRtbC54c2wgLSB0cmFuc2Zvcm0gQmlzb24gWE1MIFJlcG9ydCBpbnRvIFhIVE1MLgorCisgICAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworICAgIFdyaXR0ZW4gYnkgV29qY2llY2ggUG9sYWsgPHBvbGFrQGdudS5vcmc+LgorICAtLT4KKworPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgorICB4bWxuczpiaXNvbj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2Jpc29uLyI+CisKKzx4c2w6aW1wb3J0IGhyZWY9ImJpc29uLnhzbCIvPgorCis8eHNsOm91dHB1dCBtZXRob2Q9InhtbCIgZW5jb2Rpbmc9IlVURi04IgorCSAgICBkb2N0eXBlLXB1YmxpYz0iLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iCisJICAgIGRvY3R5cGUtc3lzdGVtPSJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIgorCSAgICBpbmRlbnQ9InllcyIvPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIvIj4KKyAgPGh0bWw+CisgICAgPGhlYWQ+CisgICAgICA8dGl0bGU+CisJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImJpc29uLXhtbC1yZXBvcnQvZmlsZW5hbWUiLz4KKwk8eHNsOnRleHQ+IC0gR05VIEJpc29uIFhNTCBBdXRvbWF0b24gUmVwb3J0PC94c2w6dGV4dD4KKyAgICAgIDwvdGl0bGU+CisgICAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhW0NEQVRBWworICAgICAgYm9keSB7CisgICAgICAgIGZvbnQtZmFtaWx5OiAiTmltYnVzIFNhbnMgTCIsIEFyaWFsLCBzYW5zLXNlcmlmOworCWZvbnQtc2l6ZTogOXB0OworICAgICAgfQorICAgICAgYTpsaW5rIHsKKwljb2xvcjogIzFmMDBmZjsKKwl0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgICB9CisgICAgICBhOnZpc2l0ZWQgeworCWNvbG9yOiAjMWYwMGZmOworCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICAgIH0KKyAgICAgIGE6aG92ZXIgeworCWNvbG9yOiByZWQ7CisgICAgICB9CisgICAgICAjbWVudSBhIHsKKyAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgICAgICB9CisgICAgICAuaSB7CisgICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKKyAgICAgIH0KKyAgICAgIC5wcmUgeworICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOworICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOworICAgICAgfQorICAgICAgb2wuZGVjaW1hbCB7CisgICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogZGVjaW1hbDsKKyAgICAgIH0KKyAgICAgIG9sLmxvd2VyLWFscGhhIHsKKyAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBsb3dlci1hbHBoYTsKKyAgICAgIH0KKyAgICAgIC5wb2ludCB7CisgICAgICAgIGNvbG9yOiAjY2MwMDAwOworICAgICAgfQorICAgICAgI2Zvb3RlciB7CisgICAgICAgIG1hcmdpbi10b3A6IDMuNWVtOworICAgICAgICBmb250LXNpemU6IDdwdDsKKyAgICAgIH0KKyAgICAgIF1dPjwvc3R5bGU+CisgICAgPC9oZWFkPgorICAgIDxib2R5PgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJiaXNvbi14bWwtcmVwb3J0Ii8+CisgICAgICA8eHNsOnRleHQ+JiMxMDsmIzEwOzwveHNsOnRleHQ+CisgICAgICA8ZGl2IGlkPSJmb290ZXIiPjxociAvPlRoaXMgZG9jdW1lbnQgd2FzIGdlbmVyYXRlZCB1c2luZworICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2Jpc29uLyIgdGl0bGU9IkdOVSBCaXNvbiI+CisgICAgICBHTlUgQmlzb24gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii9iaXNvbi14bWwtcmVwb3J0L0B2ZXJzaW9uIi8+PC9hPgorICAgICAgWE1MIEF1dG9tYXRvbiBSZXBvcnQuPGJyIC8+CisgICAgICA8IS0tIGRlZmF1bHQgY29weWluZyBub3RpY2UgLS0+CisgICAgICBWZXJiYXRpbSBjb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBlbnRpcmUgcGFnZSBpcworICAgICAgcGVybWl0dGVkIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC48L2Rpdj4KKyAgICA8L2JvZHk+CisgIDwvaHRtbD4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJiaXNvbi14bWwtcmVwb3J0Ij4KKyAgPGgxPkdOVSBCaXNvbiBYTUwgQXV0b21hdG9uIFJlcG9ydDwvaDE+CisgIDxwPgorICAgIGlucHV0IGdyYW1tYXI6IDxzcGFuIGNsYXNzPSJpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iZmlsZW5hbWUiLz48L3NwYW4+CisgIDwvcD4KKworICA8eHNsOnRleHQ+JiMxMDsmIzEwOzwveHNsOnRleHQ+CisgIDxoMz5UYWJsZSBvZiBDb250ZW50czwvaDM+CisgIDx1bCBpZD0ibWVudSI+CisgICAgPGxpPgorICAgICAgPGEgaHJlZj0iI3JlZHVjdGlvbnMiPlJlZHVjdGlvbnM8L2E+CisgICAgICA8dWwgY2xhc3M9Imxvd2VyLWFscGhhIj4KKwk8bGk+PGEgaHJlZj0iI25vbnRlcm1pbmFsc191c2VsZXNzX2luX2dyYW1tYXIiPk5vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXI8L2E+PC9saT4KKwk8bGk+PGEgaHJlZj0iI3Rlcm1pbmFsc191bnVzZWRfaW5fZ3JhbW1hciI+VGVybWluYWxzIHVudXNlZCBpbiBncmFtbWFyPC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9IiNydWxlc191c2VsZXNzX2luX2dyYW1tYXIiPlJ1bGVzIHVzZWxlc3MgaW4gZ3JhbW1hcjwvYT48L2xpPgorCTx4c2w6aWYgdGVzdD0iZ3JhbW1hci9ydWxlcy9ydWxlW0B1c2VmdWxuZXNzPSd1c2VsZXNzLWluLXBhcnNlciddIj4KKwkgIDxsaT48YSBocmVmPSIjcnVsZXNfdXNlbGVzc19pbl9wYXJzZXIiPlJ1bGVzIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHM8L2E+PC9saT4KKwk8L3hzbDppZj4KKyAgICAgIDwvdWw+CisgICAgPC9saT4KKyAgICA8bGk+PGEgaHJlZj0iI2NvbmZsaWN0cyI+Q29uZmxpY3RzPC9hPjwvbGk+CisgICAgPGxpPgorICAgICAgPGEgaHJlZj0iI2dyYW1tYXIiPkdyYW1tYXI8L2E+CisgICAgICA8dWwgY2xhc3M9Imxvd2VyLWFscGhhIj4KKwk8bGk+PGEgaHJlZj0iI2dyYW1tYXIiPkl0ZW1zZXQ8L2E+PC9saT4KKwk8bGk+PGEgaHJlZj0iI3Rlcm1pbmFscyI+VGVybWluYWwgc3ltYm9sczwvYT48L2xpPgorCTxsaT48YSBocmVmPSIjbm9udGVybWluYWxzIj5Ob250ZXJtaW5hbCBzeW1ib2xzPC9hPjwvbGk+CisgICAgICA8L3VsPgorICAgIDwvbGk+CisgICAgPGxpPjxhIGhyZWY9IiNhdXRvbWF0b24iPkF1dG9tYXRvbjwvYT48L2xpPgorICA8L3VsPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImdyYW1tYXIiIG1vZGU9InJlZHVjdGlvbnMiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJncmFtbWFyIiBtb2RlPSJ1c2VsZXNzLWluLXBhcnNlciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImF1dG9tYXRvbiIgbW9kZT0iY29uZmxpY3RzIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iZ3JhbW1hciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImF1dG9tYXRvbiIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImdyYW1tYXIiIG1vZGU9InJlZHVjdGlvbnMiPgorICA8aDI+CisgICAgPGEgbmFtZT0icmVkdWN0aW9ucyIvPgorICAgIDx4c2w6dGV4dD4gUmVkdWN0aW9uczwveHNsOnRleHQ+CisgIDwvaDI+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ibm9udGVybWluYWxzIiBtb2RlPSJ1c2VsZXNzLWluLWdyYW1tYXIiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJ0ZXJtaW5hbHMiIG1vZGU9InVudXNlZC1pbi1ncmFtbWFyIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0icnVsZXMiIG1vZGU9InVzZWxlc3MtaW4tZ3JhbW1hciIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im5vbnRlcm1pbmFscyIgbW9kZT0idXNlbGVzcy1pbi1ncmFtbWFyIj4KKyAgPGgzPgorICAgIDxhIG5hbWU9Im5vbnRlcm1pbmFsc191c2VsZXNzX2luX2dyYW1tYXIiLz4KKyAgICA8eHNsOnRleHQ+IE5vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXI8L3hzbDp0ZXh0PgorICA8L2gzPgorICA8eHNsOnRleHQ+JiMxMDsmIzEwOzwveHNsOnRleHQ+CisgIDx4c2w6aWYgdGVzdD0ibm9udGVybWluYWxbQHVzZWZ1bG5lc3M9J3VzZWxlc3MtaW4tZ3JhbW1hciddIj4KKyAgICA8cCBjbGFzcz0icHJlIj4KKyAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJub250ZXJtaW5hbFtAdXNlZnVsbmVzcz0ndXNlbGVzcy1pbi1ncmFtbWFyJ10iPgorCTx4c2w6dGV4dD4gICA8L3hzbDp0ZXh0PgorCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgorCTx4c2w6dGV4dD4mIzEwOzwveHNsOnRleHQ+CisgICAgICA8L3hzbDpmb3ItZWFjaD4KKyAgICAgIDx4c2w6dGV4dD4mIzEwOyYjMTA7PC94c2w6dGV4dD4KKyAgICA8L3A+CisgIDwveHNsOmlmPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRlcm1pbmFscyIgbW9kZT0idW51c2VkLWluLWdyYW1tYXIiPgorICA8aDM+CisgICAgPGEgbmFtZT0idGVybWluYWxzX3VudXNlZF9pbl9ncmFtbWFyIi8+CisgICAgPHhzbDp0ZXh0PiBUZXJtaW5hbHMgdW51c2VkIGluIGdyYW1tYXI8L3hzbDp0ZXh0PgorICA8L2gzPgorICA8eHNsOnRleHQ+JiMxMDsmIzEwOzwveHNsOnRleHQ+CisgIDx4c2w6aWYgdGVzdD0idGVybWluYWxbQHVzZWZ1bG5lc3M9J3VudXNlZC1pbi1ncmFtbWFyJ10iPgorICAgIDxwIGNsYXNzPSJwcmUiPgorICAgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9InRlcm1pbmFsW0B1c2VmdWxuZXNzPSd1bnVzZWQtaW4tZ3JhbW1hciddIj4KKyAgICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iQHN5bWJvbC1udW1iZXIiIGRhdGEtdHlwZT0ibnVtYmVyIi8+CisJPHhzbDp0ZXh0PiAgIDwveHNsOnRleHQ+CisJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+CisJPHhzbDp0ZXh0PiYjMTA7PC94c2w6dGV4dD4KKyAgICAgIDwveHNsOmZvci1lYWNoPgorICAgICAgPHhzbDp0ZXh0PiYjMTA7JiMxMDs8L3hzbDp0ZXh0PgorICAgIDwvcD4KKyAgPC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icnVsZXMiIG1vZGU9InVzZWxlc3MtaW4tZ3JhbW1hciI+CisgIDxoMz4KKyAgICA8YSBuYW1lPSJydWxlc191c2VsZXNzX2luX2dyYW1tYXIiLz4KKyAgICA8eHNsOnRleHQ+IFJ1bGVzIHVzZWxlc3MgaW4gZ3JhbW1hcjwveHNsOnRleHQ+CisgIDwvaDM+CisgIDx4c2w6dGV4dD4mIzEwOzwveHNsOnRleHQ+CisgIDx4c2w6dmFyaWFibGUgbmFtZT0ic2V0IiBzZWxlY3Q9InJ1bGVbQHVzZWZ1bG5lc3M9J3VzZWxlc3MtaW4tZ3JhbW1hciddIi8+CisgIDx4c2w6aWYgdGVzdD0iJHNldCI+CisgICAgPHAgY2xhc3M9InByZSI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3R5bGUtcnVsZS1zZXQiPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icnVsZS1zZXQiIHNlbGVjdD0iJHNldCIvPgorICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgIDx4c2w6dGV4dD4mIzEwOyYjMTA7PC94c2w6dGV4dD4KKyAgICA8L3A+CisgIDwveHNsOmlmPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImdyYW1tYXIiIG1vZGU9InVzZWxlc3MtaW4tcGFyc2VyIj4KKyAgPHhzbDp2YXJpYWJsZQorICAgIG5hbWU9InNldCIgc2VsZWN0PSJydWxlcy9ydWxlW0B1c2VmdWxuZXNzPSd1c2VsZXNzLWluLXBhcnNlciddIgorICAvPgorICA8eHNsOmlmIHRlc3Q9IiRzZXQiPgorICAgIDxoMj4KKyAgICAgIDxhIG5hbWU9InJ1bGVzX3VzZWxlc3NfaW5fcGFyc2VyIi8+CisgICAgICA8eHNsOnRleHQ+IFJ1bGVzIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHM8L3hzbDp0ZXh0PgorICAgIDwvaDI+CisgICAgPHhzbDp0ZXh0PiYjMTA7PC94c2w6dGV4dD4KKyAgICA8cCBjbGFzcz0icHJlIj4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHlsZS1ydWxlLXNldCI+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJydWxlLXNldCIgc2VsZWN0PSIkc2V0Ii8+CisgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgIDwvcD4KKyAgICA8eHNsOnRleHQ+JiMxMDsmIzEwOzwveHNsOnRleHQ+CisgIDwveHNsOmlmPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImdyYW1tYXIiPgorICA8aDI+CisgICAgPGEgbmFtZT0iZ3JhbW1hciIvPgorICAgIDx4c2w6dGV4dD4gR3JhbW1hcjwveHNsOnRleHQ+CisgIDwvaDI+CisgIDx4c2w6dGV4dD4mIzEwOzwveHNsOnRleHQ+CisgIDxwIGNsYXNzPSJwcmUiPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHlsZS1ydWxlLXNldCI+CisgICAgICA8eHNsOndpdGgtcGFyYW0KKyAgICAgICAgbmFtZT0icnVsZS1zZXQiIHNlbGVjdD0icnVsZXMvcnVsZVtAdXNlZnVsbmVzcyE9J3VzZWxlc3MtaW4tZ3JhbW1hciddIgorICAgICAgLz4KKyAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICA8L3A+CisgIDx4c2w6dGV4dD4mIzEwOyYjMTA7PC94c2w6dGV4dD4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJ0ZXJtaW5hbHMiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJub250ZXJtaW5hbHMiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InN0eWxlLXJ1bGUtc2V0Ij4KKyAgPHhzbDpwYXJhbSBuYW1lPSJydWxlLXNldCIvPgorICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iJHJ1bGUtc2V0Ij4KKyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iPgorICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhZCIgc2VsZWN0PSInMyciLz4KKyAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwcmV2LWxocyI+CisgICAgICAgIDx4c2w6aWYgdGVzdD0icG9zaXRpb24oKT4xIj4KKyAgICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InBvc2l0aW9uIiBzZWxlY3Q9InBvc2l0aW9uKCkiLz4KKyAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJ1bGUtc2V0WyRwb3NpdGlvbiAtIDFdL2xocyIvPgorICAgICAgICA8L3hzbDppZj4KKyAgICAgIDwveHNsOndpdGgtcGFyYW0+CisgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICA8L3hzbDpmb3ItZWFjaD4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRvbWF0b24iIG1vZGU9ImNvbmZsaWN0cyI+CisgIDxoMj4KKyAgICA8YSBuYW1lPSJjb25mbGljdHMiLz4KKyAgICA8eHNsOnRleHQ+IENvbmZsaWN0czwveHNsOnRleHQ+CisgIDwvaDI+CisgIDx4c2w6dGV4dD4mIzEwOyYjMTA7PC94c2w6dGV4dD4KKyAgPHhzbDp2YXJpYWJsZSBuYW1lPSJjb25mbGljdC1yZXBvcnQiPgorICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ic3RhdGUiIG1vZGU9ImNvbmZsaWN0cyIvPgorICA8L3hzbDp2YXJpYWJsZT4KKyAgPHhzbDppZiB0ZXN0PSJzdHJpbmctbGVuZ3RoKCRjb25mbGljdC1yZXBvcnQpICE9IDAiPgorICAgIDxwIGNsYXNzPSJwcmUiPgorICAgICAgPHhzbDpjb3B5LW9mIHNlbGVjdD0iJGNvbmZsaWN0LXJlcG9ydCIvPgorICAgICAgPHhzbDp0ZXh0PiYjMTA7JiMxMDs8L3hzbDp0ZXh0PgorICAgIDwvcD4KKyAgPC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3RhdGUiIG1vZGU9ImNvbmZsaWN0cyI+CisgIDx4c2w6dmFyaWFibGUgbmFtZT0iY29uZmxpY3QtY291bnRzIj4KKyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImJpc29uOmNvdW50LWNvbmZsaWN0cyIgLz4KKyAgPC94c2w6dmFyaWFibGU+CisgIDx4c2w6dmFyaWFibGUKKyAgICBuYW1lPSJzci1jb3VudCIgc2VsZWN0PSJzdWJzdHJpbmctYmVmb3JlKCRjb25mbGljdC1jb3VudHMsICcsJykiCisgIC8+CisgIDx4c2w6dmFyaWFibGUKKyAgICBuYW1lPSJyci1jb3VudCIgc2VsZWN0PSJzdWJzdHJpbmctYWZ0ZXIoJGNvbmZsaWN0LWNvdW50cywgJywnKSIKKyAgLz4KKyAgPHhzbDppZiB0ZXN0PSIkc3ItY291bnQgPiAwIG9yICRyci1jb3VudCA+IDAiPgorICAgIDxhPgorICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iaHJlZiI+CisgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoJyNzdGF0ZV8nLCBAbnVtYmVyKSIvPgorICAgICAgPC94c2w6YXR0cmlidXRlPgorICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvbmNhdCgnU3RhdGUgJywgQG51bWJlcikiLz4KKyAgICA8L2E+CisgICAgPHhzbDp0ZXh0PiBjb25mbGljdHM6PC94c2w6dGV4dD4KKyAgICA8eHNsOmlmIHRlc3Q9IiRzci1jb3VudCA+IDAiPgorICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvbmNhdCgnICcsICRzci1jb3VudCwgJyBzaGlmdC9yZWR1Y2UnKSIvPgorICAgICAgPHhzbDppZiB0ZXN0PSIkcnItY291bnQgPiAwIj4KKyAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IignLCcpIi8+CisgICAgICA8L3hzbDppZj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmlmIHRlc3Q9IiRyci1jb3VudCA+IDAiPgorICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvbmNhdCgnICcsICRyci1jb3VudCwgJyByZWR1Y2UvcmVkdWNlJykiLz4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJyYjMTA7JyIvPgorICA8L3hzbDppZj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJncmFtbWFyL3Rlcm1pbmFscyI+CisgIDxoMz4KKyAgICA8YSBuYW1lPSJ0ZXJtaW5hbHMiLz4KKyAgICA8eHNsOnRleHQ+IFRlcm1pbmFscywgd2l0aCBydWxlcyB3aGVyZSB0aGV5IGFwcGVhcjwveHNsOnRleHQ+CisgIDwvaDM+CisgIDx4c2w6dGV4dD4mIzEwOyYjMTA7PC94c2w6dGV4dD4KKyAgPHAgY2xhc3M9InByZSI+CisgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJ0ZXJtaW5hbCIvPgorICA8L3A+CisgIDx4c2w6dGV4dD4mIzEwOyYjMTA7PC94c2w6dGV4dD4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJncmFtbWFyL25vbnRlcm1pbmFscyI+CisgIDxoMz4KKyAgICA8YSBuYW1lPSJub250ZXJtaW5hbHMiLz4KKyAgICA8eHNsOnRleHQ+IE5vbnRlcm1pbmFscywgd2l0aCBydWxlcyB3aGVyZSB0aGV5IGFwcGVhcjwveHNsOnRleHQ+CisgIDwvaDM+CisgIDx4c2w6dGV4dD4mIzEwOyYjMTA7PC94c2w6dGV4dD4KKyAgPHAgY2xhc3M9InByZSI+CisgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMKKyAgICAgIHNlbGVjdD0ibm9udGVybWluYWxbQHVzZWZ1bG5lc3MhPSd1c2VsZXNzLWluLWdyYW1tYXInXSIKKyAgICAvPgorICA8L3A+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGVybWluYWwiPgorICA8Yj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz48L2I+CisgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoJyAoJywgQHRva2VuLW51bWJlciwgJyknKSIvPgorICA8eHNsOmZvci1lYWNoIHNlbGVjdD0ia2V5KCdiaXNvbjpydWxlQnlSaHMnLCBAbmFtZSkiPgorICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ibnVtYmVyLWxpbmsiLz4KKyAgPC94c2w6Zm9yLWVhY2g+CisgIDx4c2w6dGV4dD4mIzEwOzwveHNsOnRleHQ+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibm9udGVybWluYWwiPgorICA8Yj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz48L2I+CisgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoJyAoJywgQHN5bWJvbC1udW1iZXIsICcpJykiLz4KKyAgPHhzbDp0ZXh0PiYjMTA7ICAgIDwveHNsOnRleHQ+CisgIDx4c2w6aWYgdGVzdD0ia2V5KCdiaXNvbjpydWxlQnlMaHMnLCBAbmFtZSkiPgorICAgIDx4c2w6dGV4dD5vbiBsZWZ0OjwveHNsOnRleHQ+CisgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9ImtleSgnYmlzb246cnVsZUJ5TGhzJywgQG5hbWUpIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ibnVtYmVyLWxpbmsiLz4KKyAgICA8L3hzbDpmb3ItZWFjaD4KKyAgPC94c2w6aWY+CisgIDx4c2w6aWYgdGVzdD0ia2V5KCdiaXNvbjpydWxlQnlSaHMnLCBAbmFtZSkiPgorICAgIDx4c2w6aWYgdGVzdD0ia2V5KCdiaXNvbjpydWxlQnlMaHMnLCBAbmFtZSkiPgorICAgICAgPHhzbDp0ZXh0PiYjMTA7ICAgIDwveHNsOnRleHQ+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp0ZXh0Pm9uIHJpZ2h0OjwveHNsOnRleHQ+CisgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9ImtleSgnYmlzb246cnVsZUJ5UmhzJywgQG5hbWUpIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ibnVtYmVyLWxpbmsiLz4KKyAgICA8L3hzbDpmb3ItZWFjaD4KKyAgPC94c2w6aWY+CisgIDx4c2w6dGV4dD4mIzEwOzwveHNsOnRleHQ+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icnVsZSIgbW9kZT0ibnVtYmVyLWxpbmsiPgorICA8eHNsOnRleHQ+IDwveHNsOnRleHQ+CisgIDxhPgorICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImhyZWYiPgorICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvbmNhdCgnI3J1bGVfJywgQG51bWJlcikiLz4KKyAgICA8L3hzbDphdHRyaWJ1dGU+CisgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBudW1iZXIiLz4KKyAgPC9hPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dG9tYXRvbiI+CisgIDxoMj4KKyAgICA8YSBuYW1lPSJhdXRvbWF0b24iLz4KKyAgICA8eHNsOnRleHQ+IEF1dG9tYXRvbjwveHNsOnRleHQ+CisgIDwvaDI+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ic3RhdGUiPgorICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwYWQiIHNlbGVjdD0iJzMnIi8+CisgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRvbWF0b24vc3RhdGUiPgorICA8eHNsOnBhcmFtIG5hbWU9InBhZCIvPgorICA8eHNsOnRleHQ+JiMxMDsmIzEwOzwveHNsOnRleHQ+CisgIDxoMz4KKyAgICA8YT4KKyAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9Im5hbWUiPgorCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoJ3N0YXRlXycsIEBudW1iZXIpIi8+CisgICAgICA8L3hzbDphdHRyaWJ1dGU+CisgICAgPC9hPgorICAgIDx4c2w6dGV4dD5zdGF0ZSA8L3hzbDp0ZXh0PgorICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbnVtYmVyIi8+CisgIDwvaDM+CisgIDx4c2w6dGV4dD4mIzEwOyYjMTA7PC94c2w6dGV4dD4KKyAgPHAgY2xhc3M9InByZSI+CisgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJpdGVtc2V0L2l0ZW0iPgorICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhZCIgc2VsZWN0PSIkcGFkIi8+CisgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iYWN0aW9ucy90cmFuc2l0aW9ucyI+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0idHlwZSIgc2VsZWN0PSInc2hpZnQnIi8+CisgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iYWN0aW9ucy9lcnJvcnMiLz4KKyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImFjdGlvbnMvcmVkdWN0aW9ucyIvPgorICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iYWN0aW9ucy90cmFuc2l0aW9ucyI+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0idHlwZSIgc2VsZWN0PSInZ290byciLz4KKyAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+CisgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJzb2x2ZWQtY29uZmxpY3RzIi8+CisgIDwvcD4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhY3Rpb25zL3RyYW5zaXRpb25zIj4KKyAgPHhzbDpwYXJhbSBuYW1lPSJ0eXBlIi8+CisgIDx4c2w6aWYgdGVzdD0idHJhbnNpdGlvbltAdHlwZSA9ICR0eXBlXSI+CisgICAgPHhzbDp0ZXh0PiYjMTA7PC94c2w6dGV4dD4KKyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9InRyYW5zaXRpb25bQHR5cGUgPSAkdHlwZV0iPgorICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhZCI+CisJPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9Im1heC13aWR0aC1zeW1ib2wiPgorCSAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0idHJhbnNpdGlvbltAdHlwZSA9ICR0eXBlXSIvPgorCTwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICA8L3hzbDp3aXRoLXBhcmFtPgorICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgPC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYWN0aW9ucy9lcnJvcnMiPgorICA8eHNsOmlmIHRlc3Q9ImVycm9yIj4KKyAgICA8eHNsOnRleHQ+JiMxMDs8L3hzbDp0ZXh0PgorICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iZXJyb3IiPgorICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhZCI+CisJPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9Im1heC13aWR0aC1zeW1ib2wiPgorCSAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iZXJyb3IiLz4KKwk8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgPC94c2w6d2l0aC1wYXJhbT4KKyAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+CisgIDwveHNsOmlmPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFjdGlvbnMvcmVkdWN0aW9ucyI+CisgIDx4c2w6aWYgdGVzdD0icmVkdWN0aW9uIj4KKyAgICA8eHNsOnRleHQ+JiMxMDs8L3hzbDp0ZXh0PgorICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0icmVkdWN0aW9uIj4KKyAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwYWQiPgorCTx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJtYXgtd2lkdGgtc3ltYm9sIj4KKwkgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9InJlZHVjdGlvbiIvPgorCTwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICA8L3hzbDp3aXRoLXBhcmFtPgorICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgPC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iaXRlbSI+CisgIDx4c2w6cGFyYW0gbmFtZT0icGFkIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0icHJldi1ydWxlLW51bWJlciIKKwkgICAgIHNlbGVjdD0icHJlY2VkaW5nLXNpYmxpbmc6Oml0ZW1bMV0vQHJ1bGUtbnVtYmVyIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzCisgICAgc2VsZWN0PSJrZXkoJ2Jpc29uOnJ1bGVCeU51bWJlcicsIGN1cnJlbnQoKS9AcnVsZS1udW1iZXIpIgorICA+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Iml0ZW1zZXQiIHNlbGVjdD0iJ3RydWUnIi8+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhZCIgc2VsZWN0PSIkcGFkIi8+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InByZXYtbGhzIgorICAgICAgc2VsZWN0PSJrZXkoJ2Jpc29uOnJ1bGVCeU51bWJlcicsICRwcmV2LXJ1bGUtbnVtYmVyKS9saHNbdGV4dCgpXSIKKyAgIC8+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBvaW50IiBzZWxlY3Q9IkBwb2ludCIvPgorICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJsb29rYWhlYWRzIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ibG9va2FoZWFkcyIvPgorICAgIDwveHNsOndpdGgtcGFyYW0+CisgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJydWxlIj4KKyAgPHhzbDpwYXJhbSBuYW1lPSJpdGVtc2V0Ii8+CisgIDx4c2w6cGFyYW0gbmFtZT0icGFkIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0icHJldi1saHMiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJwb2ludCIvPgorICA8eHNsOnBhcmFtIG5hbWU9Imxvb2thaGVhZHMiLz4KKworICA8eHNsOmlmIHRlc3Q9IiRpdGVtc2V0ICE9ICd0cnVlJyBhbmQgbm90KCRwcmV2LWxocyA9IGxoc1t0ZXh0KCldKSI+CisgICAgPHhzbDp0ZXh0PiYjMTA7PC94c2w6dGV4dD4KKyAgPC94c2w6aWY+CisKKyAgPHhzbDppZiB0ZXN0PSIkaXRlbXNldCAhPSAndHJ1ZSciPgorICAgIDxhPgorICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0ibmFtZSI+CisJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvbmNhdCgncnVsZV8nLCBAbnVtYmVyKSIvPgorICAgICAgPC94c2w6YXR0cmlidXRlPgorICAgIDwvYT4KKyAgPC94c2w6aWY+CisgIDx4c2w6dGV4dD4gIDwveHNsOnRleHQ+CisKKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9IiRpdGVtc2V0ID0gJ3RydWUnIj4KKyAgICAgIDxhPgorCTx4c2w6YXR0cmlidXRlIG5hbWU9ImhyZWYiPgorCSAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvbmNhdCgnI3J1bGVfJywgQG51bWJlcikiLz4KKwk8L3hzbDphdHRyaWJ1dGU+CisJPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImxwYWQiPgorCSAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InN0ciIgc2VsZWN0PSJzdHJpbmcoQG51bWJlcikiLz4KKwkgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwYWQiIHNlbGVjdD0ibnVtYmVyKCRwYWQpIi8+CisJPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgIDwvYT4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6b3RoZXJ3aXNlPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImxwYWQiPgorCTx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzdHIiIHNlbGVjdD0ic3RyaW5nKEBudW1iZXIpIi8+CisJPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhZCIgc2VsZWN0PSJudW1iZXIoJHBhZCkiLz4KKyAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPC94c2w6b3RoZXJ3aXNlPgorICA8L3hzbDpjaG9vc2U+CisgIDx4c2w6dGV4dD4gPC94c2w6dGV4dD4KKworICA8IS0tIExIUyAtLT4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9IiRpdGVtc2V0ICE9ICd0cnVlJyBhbmQgJHByZXYtbGhzID0gbGhzW3RleHQoKV0iPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImxwYWQiPgorCTx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzdHIiIHNlbGVjdD0iJ3wnIi8+CisJPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhZCIgc2VsZWN0PSJudW1iZXIoc3RyaW5nLWxlbmd0aChsaHNbdGV4dCgpXSkpICsgMiIvPgorICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSIkaXRlbXNldCA9ICd0cnVlJyBhbmQgJHByZXYtbGhzID0gbGhzW3RleHQoKV0iPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImxwYWQiPgorCTx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzdHIiIHNlbGVjdD0iJ3wnIi8+CisJPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhZCIgc2VsZWN0PSJudW1iZXIoc3RyaW5nLWxlbmd0aChsaHNbdGV4dCgpXSkpICsgMiIvPgorICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6b3RoZXJ3aXNlPgorICAgICAgPHNwYW4gY2xhc3M9ImkiPgorCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJsaHMiLz4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDx4c2w6dGV4dD4gJiM4NTk0OzwveHNsOnRleHQ+CisgICAgPC94c2w6b3RoZXJ3aXNlPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPCEtLSBSSFMgLS0+CisgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJyaHMvKiI+CisgICAgPHhzbDppZiB0ZXN0PSJwb3NpdGlvbigpID0gJHBvaW50ICsgMSI+CisgICAgICA8eHNsOnRleHQ+IDwveHNsOnRleHQ+CisgICAgICA8c3BhbiBjbGFzcz0icG9pbnQiPi48L3NwYW4+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDppZiB0ZXN0PSIkaXRlbXNldCA9ICd0cnVlJyBhbmQgbmFtZSguKSAhPSAnZW1wdHknIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIvPgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6aWYgdGVzdD0iJGl0ZW1zZXQgIT0gJ3RydWUnIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIvPgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6aWYgdGVzdD0icG9zaXRpb24oKSA9IGxhc3QoKSBhbmQgcG9zaXRpb24oKSA9ICRwb2ludCI+CisgICAgICA8eHNsOnRleHQ+IDwveHNsOnRleHQ+CisgICAgICA8c3BhbiBjbGFzcz0icG9pbnQiPi48L3NwYW4+CisgICAgPC94c2w6aWY+CisgIDwveHNsOmZvci1lYWNoPgorICA8eHNsOmlmIHRlc3Q9IiRsb29rYWhlYWRzIj4KKyAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGxvb2thaGVhZHMiLz4KKyAgPC94c2w6aWY+CisKKyAgPHhzbDp0ZXh0PiYjMTA7PC94c2w6dGV4dD4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzeW1ib2wiPgorICA8eHNsOnRleHQ+IDwveHNsOnRleHQ+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJuYW1lKGtleSgnYmlzb246c3ltYm9sQnlOYW1lJywgLikpID0gJ25vbnRlcm1pbmFsJyI+CisgICAgICA8c3BhbiBjbGFzcz0iaSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz48L3NwYW4+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOm90aGVyd2lzZT4KKyAgICAgIDxiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIi8+PC9iPgorICAgIDwveHNsOm90aGVyd2lzZT4KKyAgPC94c2w6Y2hvb3NlPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVtcHR5Ij4KKyAgPHhzbDp0ZXh0PiAmIzk0OTs8L3hzbDp0ZXh0PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Imxvb2thaGVhZHMiPgorICA8eHNsOnRleHQ+ICBbPC94c2w6dGV4dD4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJzeW1ib2wiLz4KKyAgPHhzbDp0ZXh0Pl08L3hzbDp0ZXh0PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Imxvb2thaGVhZHMvc3ltYm9sIj4KKyAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz4KKyAgPHhzbDppZiB0ZXN0PSJwb3NpdGlvbigpICE9IGxhc3QoKSI+CisgICAgPHhzbDp0ZXh0PiwgPC94c2w6dGV4dD4KKyAgPC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idHJhbnNpdGlvbiI+CisgIDx4c2w6cGFyYW0gbmFtZT0icGFkIi8+CisgIDx4c2w6dGV4dD4gICAgPC94c2w6dGV4dD4KKyAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InJwYWQiPgorICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzdHIiIHNlbGVjdD0ic3RyaW5nKEBzeW1ib2wpIi8+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhZCIgc2VsZWN0PSJudW1iZXIoJHBhZCkgKyAyIi8+CisgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJAdHlwZSA9ICdzaGlmdCciPgorICAgICAgPGE+CisJPHhzbDphdHRyaWJ1dGUgbmFtZT0iaHJlZiI+CisJICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY29uY2F0KCcjc3RhdGVfJywgQHN0YXRlKSIvPgorCTwveHNsOmF0dHJpYnV0ZT4KKwk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY29uY2F0KCdzaGlmdCwgYW5kIGdvIHRvIHN0YXRlICcsIEBzdGF0ZSkiLz4KKyAgICAgIDwvYT4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJAdHlwZSA9ICdnb3RvJyI+CisgICAgICA8YT4KKwk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJocmVmIj4KKwkgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoJyNzdGF0ZV8nLCBAc3RhdGUpIi8+CisJPC94c2w6YXR0cmlidXRlPgorCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoJ2dvIHRvIHN0YXRlICcsIEBzdGF0ZSkiLz4KKyAgICAgIDwvYT4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisgIDx4c2w6dGV4dD4mIzEwOzwveHNsOnRleHQ+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZXJyb3IiPgorICA8eHNsOnBhcmFtIG5hbWU9InBhZCIvPgorICA8eHNsOnRleHQ+ICAgIDwveHNsOnRleHQ+CisgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJycGFkIj4KKyAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ic3RyIiBzZWxlY3Q9InN0cmluZyhAc3ltYm9sKSIvPgorICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwYWQiIHNlbGVjdD0ibnVtYmVyKCRwYWQpICsgMiIvPgorICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICA8eHNsOnRleHQ+ZXJyb3I8L3hzbDp0ZXh0PgorICA8eHNsOnRleHQ+ICg8L3hzbDp0ZXh0PgorICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0idGV4dCgpIi8+CisgIDx4c2w6dGV4dD4pPC94c2w6dGV4dD4KKyAgPHhzbDp0ZXh0PiYjMTA7PC94c2w6dGV4dD4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWR1Y3Rpb24iPgorICA8eHNsOnBhcmFtIG5hbWU9InBhZCIvPgorICA8eHNsOnRleHQ+ICAgIDwveHNsOnRleHQ+CisgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJycGFkIj4KKyAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ic3RyIiBzZWxlY3Q9InN0cmluZyhAc3ltYm9sKSIvPgorICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwYWQiIHNlbGVjdD0ibnVtYmVyKCRwYWQpICsgMiIvPgorICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICA8eHNsOmlmIHRlc3Q9IkBlbmFibGVkID0gJ2ZhbHNlJyI+CisgICAgPHhzbDp0ZXh0Pls8L3hzbDp0ZXh0PgorICA8L3hzbDppZj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9IkBydWxlID0gJ2FjY2VwdCciPgorICAgICAgPHhzbDp0ZXh0PmFjY2VwdDwveHNsOnRleHQ+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOm90aGVyd2lzZT4KKyAgICAgIDxhPgorCTx4c2w6YXR0cmlidXRlIG5hbWU9ImhyZWYiPgorCSAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvbmNhdCgnI3J1bGVfJywgQHJ1bGUpIi8+CisJPC94c2w6YXR0cmlidXRlPgorCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoJ3JlZHVjZSB1c2luZyBydWxlICcsIEBydWxlKSIvPgorICAgICAgPC9hPgorICAgICAgPHhzbDp0ZXh0PiAoPC94c2w6dGV4dD4KKyAgICAgIDx4c2w6dmFsdWUtb2YKKyAgICAgICAgc2VsZWN0PSJrZXkoJ2Jpc29uOnJ1bGVCeU51bWJlcicsIGN1cnJlbnQoKS9AcnVsZSkvbGhzW3RleHQoKV0iCisgICAgICAvPgorICAgICAgPHhzbDp0ZXh0Pik8L3hzbDp0ZXh0PgorICAgIDwveHNsOm90aGVyd2lzZT4KKyAgPC94c2w6Y2hvb3NlPgorICA8eHNsOmlmIHRlc3Q9IkBlbmFibGVkID0gJ2ZhbHNlJyI+CisgICAgPHhzbDp0ZXh0Pl08L3hzbDp0ZXh0PgorICA8L3hzbDppZj4KKyAgPHhzbDp0ZXh0PiYjMTA7PC94c2w6dGV4dD4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzb2x2ZWQtY29uZmxpY3RzIj4KKyAgPHhzbDppZiB0ZXN0PSJyZXNvbHV0aW9uIj4KKyAgICA8eHNsOnRleHQ+JiMxMDs8L3hzbDp0ZXh0PgorICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0icmVzb2x1dGlvbiIvPgorICA8L3hzbDppZj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXNvbHV0aW9uIj4KKyAgPHhzbDp0ZXh0PiAgICBDb25mbGljdCBiZXR3ZWVuIDwveHNsOnRleHQ+CisgIDxhPgorICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImhyZWYiPgorICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvbmNhdCgnI3J1bGVfJywgQHJ1bGUpIi8+CisgICAgPC94c2w6YXR0cmlidXRlPgorICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoJ3J1bGUgJyxAcnVsZSkiLz4KKyAgPC9hPgorICA8eHNsOnRleHQ+IGFuZCB0b2tlbiA8L3hzbDp0ZXh0PgorICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHN5bWJvbCIvPgorICA8eHNsOnRleHQ+IHJlc29sdmVkIGFzIDwveHNsOnRleHQ+CisgIDx4c2w6aWYgdGVzdD0iQHR5cGUgPSAnZXJyb3InIj4KKyAgICA8eHNsOnRleHQ+YW4gPC94c2w6dGV4dD4KKyAgPC94c2w6aWY+CisgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdHlwZSIvPgorICA8eHNsOnRleHQ+ICg8L3hzbDp0ZXh0PgorICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPgorICA8eHNsOnRleHQ+KS4mIzEwOzwveHNsOnRleHQ+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJtYXgtd2lkdGgtc3ltYm9sIj4KKyAgPHhzbDpwYXJhbSBuYW1lPSJub2RlIi8+CisgIDx4c2w6dmFyaWFibGUgbmFtZT0ibG9uZ2VzdCI+CisgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9IiRub2RlIj4KKyAgICAgIDx4c2w6c29ydCBkYXRhLXR5cGU9Im51bWJlciIgc2VsZWN0PSJzdHJpbmctbGVuZ3RoKEBzeW1ib2wpIgorCQlvcmRlcj0iZGVzY2VuZGluZyIvPgorICAgICAgPHhzbDppZiB0ZXN0PSJwb3NpdGlvbigpID0gMSI+CisJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InN0cmluZy1sZW5ndGgoQHN5bWJvbCkiLz4KKyAgICAgIDwveHNsOmlmPgorICAgIDwveHNsOmZvci1lYWNoPgorICA8L3hzbDp2YXJpYWJsZT4KKyAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRsb25nZXN0Ii8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJscGFkIj4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzdHIiIHNlbGVjdD0iJyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJwYWQiIHNlbGVjdD0iMCIvPgorICA8eHNsOnZhcmlhYmxlIG5hbWU9ImRpZmYiIHNlbGVjdD0iJHBhZCAtIHN0cmluZy1sZW5ndGgoJHN0cikiIC8+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSIkZGlmZiAmbHQ7IDAiPgorICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRzdHIiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6b3RoZXJ3aXNlPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNwYWNlIj4KKwk8eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwZWF0IiBzZWxlY3Q9IiRkaWZmIi8+CisgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRzdHIiLz4KKyAgICA8L3hzbDpvdGhlcndpc2U+CisgIDwveHNsOmNob29zZT4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InJwYWQiPgorICA8eHNsOnBhcmFtIG5hbWU9InN0ciIgc2VsZWN0PSInJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9InBhZCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6dmFyaWFibGUgbmFtZT0iZGlmZiIgc2VsZWN0PSIkcGFkIC0gc3RyaW5nLWxlbmd0aCgkc3RyKSIvPgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0iJGRpZmYgJmx0OyAwIj4KKyAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkc3RyIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOm90aGVyd2lzZT4KKyAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkc3RyIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3BhY2UiPgorCTx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBlYXQiIHNlbGVjdD0iJGRpZmYiLz4KKyAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPC94c2w6b3RoZXJ3aXNlPgorICA8L3hzbDpjaG9vc2U+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzcGFjZSI+CisgIDx4c2w6cGFyYW0gbmFtZT0icmVwZWF0Ij4wPC94c2w6cGFyYW0+CisgIDx4c2w6cGFyYW0gbmFtZT0iZmlsbCIgc2VsZWN0PSInICciLz4KKyAgPHhzbDppZiB0ZXN0PSJudW1iZXIoJHJlcGVhdCkgJmd0Oz0gMSI+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNwYWNlIj4KKyAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBlYXQiIHNlbGVjdD0iJHJlcGVhdCAtIDEiLz4KKyAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJmaWxsIiBzZWxlY3Q9IiRmaWxsIi8+CisgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGZpbGwiLz4KKyAgPC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2RhdGEveWFjYy5jIGIvZGF0YS95YWNjLmMKaW5kZXggMWU4ZmE1Ni4uYjM0NTQ5ZiAxMDA2NDQKLS0tIGEvZGF0YS95YWNjLmMKKysrIGIvZGF0YS95YWNjLmMKQEAgLTEsMjQgKzEsNTMgQEAKLW00X2RpdmVydCgtMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQyAtKi0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQyAtKi0KIAogIyBZYWNjIGNvbXBhdGlibGUgc2tlbGV0b24gZm9yIEJpc29uCiAKLSMgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2Ci0jIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgogCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KKyMKICMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQorIwogIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0jIDAyMTEwLTEzMDEgIFVTQQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBDaGVjayB0aGUgdmFsdWUgb2YgJWRlZmluZSBhcGkucHVzaC1wdWxsLgorYjRfcGVyY2VudF9kZWZpbmVfZGVmYXVsdChbW2FwaS5wdXNoLXB1bGxdXSwgW1twdWxsXV0pCitiNF9wZXJjZW50X2RlZmluZV9jaGVja192YWx1ZXMoW1tbW2FwaS5wdXNoLXB1bGxdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbcHVsbF1dLCBbW3B1c2hdXSwgW1tib3RoXV1dXSkKK2I0X2RlZmluZV9mbGFnX2lmKFtwdWxsXSkgbTRfZGVmaW5lKFtiNF9wdWxsX2ZsYWddLCBbWzFdXSkKK2I0X2RlZmluZV9mbGFnX2lmKFtwdXNoXSkgbTRfZGVmaW5lKFtiNF9wdXNoX2ZsYWddLCBbWzFdXSkKK200X2Nhc2UoYjRfcGVyY2VudF9kZWZpbmVfZ2V0KFtbYXBpLnB1c2gtcHVsbF1dKSwKKyAgICAgICAgW3B1bGxdLCBbbTRfZGVmaW5lKFtiNF9wdXNoX2ZsYWddLCBbWzBdXSldLAorICAgICAgICBbcHVzaF0sIFttNF9kZWZpbmUoW2I0X3B1bGxfZmxhZ10sIFtbMF1dKV0pCisKKyMgSGFuZGxlIEJJU09OX1VTRV9QVVNIX0ZPUl9QVUxMIGZvciB0aGUgdGVzdCBzdWl0ZS4gIFNvIHRoYXQgcHVzaCBwYXJzaW5nCisjIHRlc3RzIGZ1bmN0aW9uIGFzIHdyaXR0ZW4sIGRvIG5vdCBsZXQgQklTT05fVVNFX1BVU0hfRk9SX1BVTEwgbW9kaWZ5IHRoZQorIyBiZWhhdmlvciBvZiBCaXNvbiBhdCBhbGwgd2hlbiBwdXNoIHBhcnNpbmcgaXMgYWxyZWFkeSByZXF1ZXN0ZWQuCitiNF9kZWZpbmVfZmxhZ19pZihbdXNlX3B1c2hfZm9yX3B1bGxdKQorYjRfdXNlX3B1c2hfZm9yX3B1bGxfaWYoWworICBiNF9wdXNoX2lmKFttNF9kZWZpbmUoW2I0X3VzZV9wdXNoX2Zvcl9wdWxsX2ZsYWddLCBbWzBdXSldLAorICAgICAgICAgICAgIFttNF9kZWZpbmUoW2I0X3B1c2hfZmxhZ10sIFtbMV1dKV0pXSkKKworIyBDaGVjayB0aGUgdmFsdWUgb2YgJWRlZmluZSBwYXJzZS5sYWMgYW5kIGZyaWVuZHMsIHdoZXJlIExBQyBzdGFuZHMgZm9yCisjIGxvb2thaGVhZCBjb3JyZWN0aW9uLgorYjRfcGVyY2VudF9kZWZpbmVfZGVmYXVsdChbW3BhcnNlLmxhY11dLCBbW25vbmVdXSkKK2I0X3BlcmNlbnRfZGVmaW5lX2RlZmF1bHQoW1twYXJzZS5sYWMuZXMtY2FwYWNpdHktaW5pdGlhbF1dLCBbWzIwXV0pCitiNF9wZXJjZW50X2RlZmluZV9kZWZhdWx0KFtbcGFyc2UubGFjLm1lbW9yeS10cmFjZV1dLCBbW2ZhaWx1cmVzXV0pCitiNF9wZXJjZW50X2RlZmluZV9jaGVja192YWx1ZXMoW1tbW3BhcnNlLmxhY11dLCBbW2Z1bGxdXSwgW1tub25lXV1dXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW1tbcGFyc2UubGFjLm1lbW9yeS10cmFjZV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tmYWlsdXJlc11dLCBbW2Z1bGxdXV1dKQorYjRfZGVmaW5lX2ZsYWdfaWYoW2xhY10pCittNF9kZWZpbmUoW2I0X2xhY19mbGFnXSwKKyAgICAgICAgICBbbTRfaWYoYjRfcGVyY2VudF9kZWZpbmVfZ2V0KFtbcGFyc2UubGFjXV0pLAorICAgICAgICAgICAgICAgICBbbm9uZV0sIFtbMF1dLCBbWzFdXSldKQogCiBtNF9pbmNsdWRlKGI0X3BrZ2RhdGFkaXIvW2MubTRdKQogCkBAIC0zNSwyMSArNjQsMzcgQEAKICMjIFB1cmUvaW1wdXJlIGludGVyZmFjZXMuICAjIwogIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAKK2I0X3BlcmNlbnRfZGVmaW5lX2RlZmF1bHQoW1thcGkucHVyZV1dLCBbW2ZhbHNlXV0pCitiNF9wZXJjZW50X2RlZmluZV9jaGVja192YWx1ZXMoW1tbW2FwaS5wdXJlXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2ZhbHNlXV0sIFtbdHJ1ZV1dLCBbW11dLCBbW2Z1bGxdXV1dKQogCi0jIGI0X3lhY2NfcHVyZV9pZihJRi1UUlVFLCBJRi1GQUxTRSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFeHBhbmQgSUYtVFJVRSwgaWYgJXB1cmUtcGFyc2VyIGFuZCAlcGFyc2UtcGFyYW0sIElGLUZBTFNFIG90aGVyd2lzZS4KLW00X2RlZmluZShbYjRfeWFjY19wdXJlX2lmXSwKLVtiNF9wdXJlX2lmKFttNF9pZnNldChbYjRfcGFyc2VfcGFyYW1dLAotCQkgICAgICBbJDFdLCBbJDJdKV0sCi0JICAgIFskMl0pXSkKK200X2RlZmluZShbYjRfcHVyZV9mbGFnXSwgW1swXV0pCittNF9jYXNlKGI0X3BlcmNlbnRfZGVmaW5lX2dldChbW2FwaS5wdXJlXV0pLAorICAgICAgICBbZmFsc2VdLCBbbTRfZGVmaW5lKFtiNF9wdXJlX2ZsYWddLCBbWzBdXSldLAorICAgICAgICBbdHJ1ZV0sICBbbTRfZGVmaW5lKFtiNF9wdXJlX2ZsYWddLCBbWzFdXSldLAorICAgICAgICBbXSwgICAgICBbbTRfZGVmaW5lKFtiNF9wdXJlX2ZsYWddLCBbWzFdXSldLAorICAgICAgICBbZnVsbF0sICBbbTRfZGVmaW5lKFtiNF9wdXJlX2ZsYWddLCBbWzJdXSldKQogCittNF9kZWZpbmUoW2I0X3B1cmVfaWZdLAorW200X2Nhc2UoYjRfcHVyZV9mbGFnLAorICAgICAgICAgWzBdLCBbJDJdLAorICAgICAgICAgWzFdLCBbJDFdLAorICAgICAgICAgWzJdLCBbJDFdKV0pCisgICAgICAgICBbbTRfZmF0YWwoW2ludmFsaWQgYXBpLnB1cmUgdmFsdWU6IF0kMSldKV0pCisKKyMgYjRfeXllcnJvcl9hcmdfbG9jX2lmKEFSRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhwYW5kIEFSRyBpZmYgeXllcnJvciBpcyB0byBiZSBnaXZlbiBhIGxvY2F0aW9uIGFzIGFyZ3VtZW50LgorbTRfZGVmaW5lKFtiNF95eWVycm9yX2FyZ19sb2NfaWZdLAorW2I0X2xvY2F0aW9uc19pZihbbTRfY2FzZShiNF9wdXJlX2ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsxXSwgW200X2lmc2V0KFtiNF9wYXJzZV9wYXJhbV0sIFskMV0pXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWzJdLCBbJDFdKV0pXSkKIAogIyBiNF95eWVycm9yX2FyZ3MKICMgLS0tLS0tLS0tLS0tLS0tCiAjIEFyZ3VtZW50cyBwYXNzZWQgdG8geXllcnJvcjogdXNlciBhcmdzIHBsdXMgeXlsbG9jLgogbTRfZGVmaW5lKFtiNF95eWVycm9yX2FyZ3NdLAotW2I0X3lhY2NfcHVyZV9pZihbYjRfbG9jYXRpb25zX2lmKFsmeXlsbG9jLCBdKV0pZG5sCitbYjRfeXllcnJvcl9hcmdfbG9jX2lmKFsmeXlsbG9jLCBdKWRubAogbTRfaWZzZXQoW2I0X3BhcnNlX3BhcmFtXSwgW2I0X2NfYXJncyhiNF9wYXJzZV9wYXJhbSksIF0pXSkKIAogCkBAIC02Myw3ICsxMDgsNiBAQAogbTRfaWZkZWYoW2I0X2xleF9wYXJhbV0sIGI0X2xleF9wYXJhbSkpKQogCiAKLQogIyMgLS0tLS0tLS0tLS0tICMjCiAjIyBEYXRhIFR5cGVzLiAgIyMKICMjIC0tLS0tLS0tLS0tLSAjIwpAQCAtMTI2LDE3ICsxNzAsMTcwIEBACiBbKHl5bHNwQHsoJDIpIC0gKCQxKUB9KV0pCiAKIAorIyMgLS0tLS0tLS0tLS0tLS0gIyMKKyMjIERlY2xhcmF0aW9ucy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLSAjIwogCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIERlZmluaW5nIHN5bWJvbCBhY3Rpb25zLCBlLmcuLCBwcmludGVycyBhbmQgZGVzdHJ1Y3RvcnMuICAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIGI0X2RlY2xhcmVfc2Nhbm5lcl9jb21tdW5pY2F0aW9uX3ZhcmlhYmxlcworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVjbGFyZSB0aGUgdmFyaWFibGVzIHRoYXQgYXJlIGdsb2JhbCwgb3IgbG9jYWwgdG8gWVlQQVJTRSBpZgorIyBwdXJlLXBhcnNlci4KK200X2RlZmluZShbYjRfZGVjbGFyZV9zY2FubmVyX2NvbW11bmljYXRpb25fdmFyaWFibGVzXSwgW1sKKy8qIFRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KK2ludCB5eWNoYXI7CiAKLSMgV2UgZG8gd2FudCBNNCBleHBhbnNpb24gYWZ0ZXIgIyBmb3IgQ1BQIG1hY3Jvcy4KLW00X2NoYW5nZWNvbSgpCi1tNF9kaXZlcnQoMClkbmwKLUBvdXRwdXQgQG91dHB1dF9wYXJzZXJfbmFtZUAKLWI0X2NvcHlyaWdodChbU2tlbGV0b24gaW1wbGVtZW50YXRpb24gZm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMgaW4gQ10sZG5sICcKLSAgWzE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDZdKVsKK11iNF9wdXJlX2lmKFtbCisjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiA0MDcgPD0gX19HTlVDX18gKiAxMDAgKyBfX0dOVUNfTUlOT1JfXworLyogU3VwcHJlc3MgYW4gaW5jb3JyZWN0IGRpYWdub3N0aWMgYWJvdXQgeXlsdmFsIGJlaW5nIHVuaW5pdGlhbGl6ZWQuICAqLworIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4gXAorICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBwdXNoIikgXAorICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVd1bmluaXRpYWxpemVkXCIiKVwKKyAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XbWF5YmUtdW5pbml0aWFsaXplZFwiIikKKyMgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORCBcCisgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIHBvcCIpCisjZWxzZQorLyogRGVmYXVsdCB2YWx1ZSB1c2VkIGZvciBpbml0aWFsaXphdGlvbiwgZm9yIHBhY2lmeWluZyBvbGRlciBHQ0NzCisgICBvciBub24tR0NDIGNvbXBpbGVycy4gICovCitzdGF0aWMgWVlTVFlQRSB5eXZhbF9kZWZhdWx0OworIyBkZWZpbmUgWVlfSU5JVElBTF9WQUxVRShWYWx1ZSkgPSBWYWx1ZQorI2VuZGlmXWI0X2xvY2F0aW9uc19pZihbWworc3RhdGljIFlZTFRZUEUgeXlsb2NfZGVmYXVsdF1bXWI0X3l5bG9jX2RlZmF1bHRbO11dKV0pWworI2lmbmRlZiBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgorIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4KKyMgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORAorI2VuZGlmCisjaWZuZGVmIFlZX0lOSVRJQUxfVkFMVUUKKyMgZGVmaW5lIFlZX0lOSVRJQUxfVkFMVUUoVmFsdWUpIC8qIE5vdGhpbmcuICovCisjZW5kaWYKKworLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KK1lZU1RZUEUgeXlsdmFsIFlZX0lOSVRJQUxfVkFMVUUoeXl2YWxfZGVmYXVsdCk7XWI0X2xvY2F0aW9uc19pZihbWworCisvKiBMb2NhdGlvbiBkYXRhIGZvciB0aGUgbG9va2FoZWFkIHN5bWJvbC4gICovCitZWUxUWVBFIHl5bGxvY11iNF9wdXJlX2lmKFsgPSB5eWxvY19kZWZhdWx0XSwgW2I0X3l5bG9jX2RlZmF1bHRdKVs7CitdXSliNF9wdXJlX2lmKFtdLCBbWworCisvKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAqLworaW50IHl5bmVycnM7XV0pXSkKKworCisjIGI0X2RlY2xhcmVfcGFyc2VyX3N0YXRlX3ZhcmlhYmxlcworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVjbGFyZSBhbGwgdGhlIHZhcmlhYmxlcyB0aGF0IGFyZSBuZWVkZWQgdG8gbWFpbnRhaW4gdGhlIHBhcnNlciBzdGF0ZQorIyBiZXR3ZWVuIGNhbGxzIHRvIHl5cHVzaF9wYXJzZS4KK200X2RlZmluZShbYjRfZGVjbGFyZV9wYXJzZXJfc3RhdGVfdmFyaWFibGVzXSwgW2I0X3B1cmVfaWYoW1sKKyAgICAvKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAqLworICAgIGludCB5eW5lcnJzOworXV0pWworICAgIGludCB5eXN0YXRlOworICAgIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLworICAgIGludCB5eWVycnN0YXR1czsKKworICAgIC8qIFRoZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgorICAgICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMuCisgICAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcy5dYjRfbG9jYXRpb25zX2lmKFtbCisgICAgICAgYHl5bHMnOiByZWxhdGVkIHRvIGxvY2F0aW9ucy5dXSlbCisKKyAgICAgICBSZWZlciB0byB0aGUgc3RhY2tzIHRocm91Z2ggc2VwYXJhdGUgcG9pbnRlcnMsIHRvIGFsbG93IHl5b3ZlcmZsb3cKKyAgICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KKworICAgIC8qIFRoZSBzdGF0ZSBzdGFjay4gICovCisgICAgeXl0eXBlX2ludDE2IHl5c3NhW1lZSU5JVERFUFRIXTsKKyAgICB5eXR5cGVfaW50MTYgKnl5c3M7CisgICAgeXl0eXBlX2ludDE2ICp5eXNzcDsKKworICAgIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCisgICAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07CisgICAgWVlTVFlQRSAqeXl2czsKKyAgICBZWVNUWVBFICp5eXZzcDtdYjRfbG9jYXRpb25zX2lmKFtbCisKKyAgICAvKiBUaGUgbG9jYXRpb24gc3RhY2suICAqLworICAgIFlZTFRZUEUgeXlsc2FbWVlJTklUREVQVEhdOworICAgIFlZTFRZUEUgKnl5bHM7CisgICAgWVlMVFlQRSAqeXlsc3A7CisKKyAgICAvKiBUaGUgbG9jYXRpb25zIHdoZXJlIHRoZSBlcnJvciBzdGFydGVkIGFuZCBlbmRlZC4gICovCisgICAgWVlMVFlQRSB5eWVycm9yX3JhbmdlWzNdO11dKVsKKworICAgIFlZU0laRV9UIHl5c3RhY2tzaXplO11iNF9sYWNfaWYoW1sKKworICAgIHl5dHlwZV9pbnQxNiB5eWVzYUB7XWI0X3BlcmNlbnRfZGVmaW5lX2dldChbW3BhcnNlLmxhYy5lcy1jYXBhY2l0eS1pbml0aWFsXV0pW0B9OworICAgIHl5dHlwZV9pbnQxNiAqeXllczsKKyAgICBZWVNJWkVfVCB5eWVzX2NhcGFjaXR5O11dKV0pCisKKworIyBiNF9kZWNsYXJlX3l5cGFyc2VfcHVzaF8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlY2xhcmF0aW9uIG9mIHl5cGFyc2UgKGFuZCBkZXBlbmRlbmNpZXMpIHdoZW4gdXNpbmcgdGhlIHB1c2ggcGFyc2VyCisjIChpbmNsdWRpbmcgaW4gcHVsbCBtb2RlKS4KK200X2RlZmluZShbYjRfZGVjbGFyZV95eXBhcnNlX3B1c2hfXSwKK1tbI2lmbmRlZiBZWVBVU0hfTU9SRV9ERUZJTkVECisjIGRlZmluZSBZWVBVU0hfTU9SRV9ERUZJTkVECitlbnVtIHsgWVlQVVNIX01PUkUgPSA0IH07CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgXWI0X3ByZWZpeFtwc3RhdGUgXWI0X3ByZWZpeFtwc3RhdGU7CisKK11iNF9wdWxsX2lmKFtiNF9jX2Z1bmN0aW9uX2RlY2woW2I0X3ByZWZpeFtwYXJzZV1dLCBbW2ludF1dLCBiNF9wYXJzZV9wYXJhbSkKK10pYjRfY19mdW5jdGlvbl9kZWNsKFtiNF9wcmVmaXhbcHVzaF9wYXJzZV1dLCBbW2ludF1dLAorICBbW2I0X3ByZWZpeFtwc3RhdGUgKnBzXV0sIFtbcHNdXV1iNF9wdXJlX2lmKFssCisgIFtbW2ludCBwdXNoZWRfY2hhcl1dLCBbW3B1c2hlZF9jaGFyXV1dLAorICBbW2I0X2FwaV9QUkVGSVhbU1RZUEUgY29uc3QgKnB1c2hlZF92YWxdXSwgW1twdXNoZWRfdmFsXV1dYjRfbG9jYXRpb25zX2lmKFssCisgIFtbYjRfYXBpX1BSRUZJWFtMVFlQRSAqcHVzaGVkX2xvY11dLCBbW3B1c2hlZF9sb2NdXV1dKV0pbTRfaWZzZXQoW2I0X3BhcnNlX3BhcmFtXSwgWywKKyAgYjRfcGFyc2VfcGFyYW1dKSkKK2I0X3B1bGxfaWYoW2I0X2NfZnVuY3Rpb25fZGVjbChbYjRfcHJlZml4W3B1bGxfcGFyc2VdXSwgW1tpbnRdXSwKKyAgW1tiNF9wcmVmaXhbcHN0YXRlICpwc11dLCBbW3BzXV1dbTRfaWZzZXQoW2I0X3BhcnNlX3BhcmFtXSwgWywKKyAgYjRfcGFyc2VfcGFyYW1dKSldKQorYjRfY19mdW5jdGlvbl9kZWNsKFtiNF9wcmVmaXhbcHN0YXRlX25ld11dLCBbYjRfcHJlZml4W3BzdGF0ZSAqXV0sCisgICAgICAgICAgICAgICAgICAgIFtbW3ZvaWRdXSwgW11dKQorYjRfY19mdW5jdGlvbl9kZWNsKFtiNF9wcmVmaXhbcHN0YXRlX2RlbGV0ZV1dLCBbW3ZvaWRdXSwKKyAgICAgICAgICAgICAgICAgICBbW2I0X3ByZWZpeFtwc3RhdGUgKnBzXV0sIFtbcHNdXV0pZG5sCitdKQorCisjIGI0X2RlY2xhcmVfeXlwYXJzZV8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBXaGVuIG5vdCB0aGUgcHVzaCBwYXJzZXIuCittNF9kZWZpbmUoW2I0X2RlY2xhcmVfeXlwYXJzZV9dLAorW1sjaWZkZWYgWVlQQVJTRV9QQVJBTQorXWI0X2NfZnVuY3Rpb25fZGVjbChiNF9wcmVmaXhbcGFyc2VdLCBbaW50XSwKKyAgICAgICAgICAgICAgICAgICAgW1t2b2lkICpZWVBBUlNFX1BBUkFNXSwgW1lZUEFSU0VfUEFSQU1dXSlbCisjZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KK11iNF9jX2Z1bmN0aW9uX2RlY2woYjRfcHJlZml4W3BhcnNlXSwgW2ludF0sIGI0X3BhcnNlX3BhcmFtKVsKKyNlbmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0gKi9dZG5sCitdKQorCisKKyMgYjRfZGVjbGFyZV95eXBhcnNlCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtiNF9kZWNsYXJlX3l5cGFyc2VdLAorW2I0X3B1c2hfaWYoW2I0X2RlY2xhcmVfeXlwYXJzZV9wdXNoX10sCisgICAgICAgICAgICBbYjRfZGVjbGFyZV95eXBhcnNlX10pW11kbmwKK10pCisKKworIyBiNF9zaGFyZWRfZGVjbGFyYXRpb25zCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVjbGFyYXRpb24gdGhhdCBtaWdodCBlaXRoZXIgZ28gaW50byB0aGUgaGVhZGVyIChpZiAtLWRlZmluZXMpCisjIG9yIG9wZW4gY29kZWQgaW4gdGhlIHBhcnNlciBib2R5LgorbTRfZGVmaW5lKFtiNF9zaGFyZWRfZGVjbGFyYXRpb25zXSwKK1tiNF9jcHBfZ3VhcmRfb3BlbihbYjRfc3BlY19kZWZpbmVzX2ZpbGVdKVsKK11iNF9kZWNsYXJlX3l5ZGVidWdbCitdYjRfcGVyY2VudF9jb2RlX2dldChbW3JlcXVpcmVzXV0pWworXWI0X3Rva2VuX2VudW1zX2RlZmluZXMoYjRfdG9rZW5zKVsKK11iNF9kZWNsYXJlX3l5bHN0eXBlWworXWI0X2RlY2xhcmVfeXlwYXJzZVsKK11iNF9wZXJjZW50X2NvZGVfZ2V0KFtbcHJvdmlkZXNdXSlbCitdYjRfY3BwX2d1YXJkX2Nsb3NlKFtiNF9zcGVjX2RlZmluZXNfZmlsZV0pW11kbmwKK10pCisKKworIyMgLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE91dHB1dCBmaWxlcy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLSAjIworCitiNF9vdXRwdXRfYmVnaW4oW2I0X3BhcnNlcl9maWxlX25hbWVdKQorYjRfY29weXJpZ2h0KFtCaXNvbiBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQ10sCisgICAgICAgICAgICAgWzE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDEyXSlbCiAKIC8qIEMgTEFMUigxKSBwYXJzZXIgc2tlbGV0b24gd3JpdHRlbiBieSBSaWNoYXJkIFN0YWxsbWFuLCBieQogICAgc2ltcGxpZnlpbmcgdGhlIG9yaWdpbmFsIHNvLWNhbGxlZCAic2VtYW50aWMiIHBhcnNlci4gICovCkBAIC0xNDksMjYgKzM0NiwzMSBAQAogICAgVVNFUiBOQU1FIFNQQUNFIiBiZWxvdy4gICovCiAKIF1iNF9pZGVudGlmaWNhdGlvbgotbTRfaWYoYjRfcHJlZml4LCBbeXldLCBbXSwKLVsvKiBTdWJzdGl0dXRlIHRoZSB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMuICAqLwotI2RlZmluZSB5eXBhcnNlIGI0X3ByZWZpeFtdcGFyc2UKLSNkZWZpbmUgeXlsZXggICBiNF9wcmVmaXhbXWxleAotI2RlZmluZSB5eWVycm9yIGI0X3ByZWZpeFtdZXJyb3IKLSNkZWZpbmUgeXlsdmFsICBiNF9wcmVmaXhbXWx2YWwKLSNkZWZpbmUgeXljaGFyICBiNF9wcmVmaXhbXWNoYXIKLSNkZWZpbmUgeXlkZWJ1ZyBiNF9wcmVmaXhbXWRlYnVnCi0jZGVmaW5lIHl5bmVycnMgYjRfcHJlZml4W11uZXJycwotYjRfbG9jYXRpb25zX2lmKFsjZGVmaW5lIHl5bGxvYyBiNF9wcmVmaXhbXWxsb2NdKV0pWwotCi1dYjRfdG9rZW5fZW51bXNfZGVmaW5lcyhiNF90b2tlbnMpWworYjRfcGVyY2VudF9jb2RlX2dldChbW3RvcF1dKVtdZG5sCittNF9pZihiNF9hcGlfcHJlZml4LCBbeXldLCBbXSwKK1tbLyogU3Vic3RpdHV0ZSB0aGUgdHlwZSBuYW1lcy4gICovCisjZGVmaW5lIFlZU1RZUEUgICAgICAgICBdYjRfYXBpX1BSRUZJWFtTVFlQRV1iNF9sb2NhdGlvbnNfaWYoW1sKKyNkZWZpbmUgWVlMVFlQRSAgICAgICAgIF1iNF9hcGlfUFJFRklYW0xUWVBFXV0pXSlbCitdbTRfaWYoYjRfcHJlZml4LCBbeXldLCBbXSwKK1tbLyogU3Vic3RpdHV0ZSB0aGUgdmFyaWFibGUgYW5kIGZ1bmN0aW9uIG5hbWVzLiAgKi9dYjRfcHVsbF9pZihbWworI2RlZmluZSB5eXBhcnNlICAgICAgICAgXWI0X3ByZWZpeFtwYXJzZV1dKWI0X3B1c2hfaWYoW1sKKyNkZWZpbmUgeXlwdXNoX3BhcnNlICAgIF1iNF9wcmVmaXhbcHVzaF9wYXJzZV1iNF9wdWxsX2lmKFtbCisjZGVmaW5lIHl5cHVsbF9wYXJzZSAgICBdYjRfcHJlZml4W3B1bGxfcGFyc2VdXSlbCisjZGVmaW5lIHl5cHN0YXRlX25ldyAgICBdYjRfcHJlZml4W3BzdGF0ZV9uZXcKKyNkZWZpbmUgeXlwc3RhdGVfZGVsZXRlIF1iNF9wcmVmaXhbcHN0YXRlX2RlbGV0ZQorI2RlZmluZSB5eXBzdGF0ZSAgICAgICAgXWI0X3ByZWZpeFtwc3RhdGVdXSlbCisjZGVmaW5lIHl5bGV4ICAgICAgICAgICBdYjRfcHJlZml4W2xleAorI2RlZmluZSB5eWVycm9yICAgICAgICAgXWI0X3ByZWZpeFtlcnJvcgorI2RlZmluZSB5eWx2YWwgICAgICAgICAgXWI0X3ByZWZpeFtsdmFsCisjZGVmaW5lIHl5Y2hhciAgICAgICAgICBdYjRfcHJlZml4W2NoYXIKKyNkZWZpbmUgeXlkZWJ1ZyAgICAgICAgIF1iNF9wcmVmaXhbZGVidWcKKyNkZWZpbmUgeXluZXJycyAgICAgICAgIF1iNF9wcmVmaXhbbmVycnNdYjRfbG9jYXRpb25zX2lmKFtbCisjZGVmaW5lIHl5bGxvYyAgICAgICAgICBdYjRfcHJlZml4W2xsb2NdXSldKVsKIAogLyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi1dYjRfcHJlX3Byb2xvZ3VlWworXWI0X3VzZXJfcHJlX3Byb2xvZ3VlWwogCi0vKiBFbmFibGluZyB0cmFjZXMuICAqLwotI2lmbmRlZiBZWURFQlVHCi0jIGRlZmluZSBZWURFQlVHIF1iNF9kZWJ1Z19mbGFnWwotI2VuZGlmCitdYjRfbnVsbF9kZWZpbmVbCiAKIC8qIEVuYWJsaW5nIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMuICAqLwogI2lmZGVmIFlZRVJST1JfVkVSQk9TRQpAQCAtMTc4LDQ1ICszODAsMTcgQEAKICMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSBdYjRfZXJyb3JfdmVyYm9zZV9mbGFnWwogI2VuZGlmCiAKLS8qIEVuYWJsaW5nIHRoZSB0b2tlbiB0YWJsZS4gICovCi0jaWZuZGVmIFlZVE9LRU5fVEFCTEUKLSMgZGVmaW5lIFlZVE9LRU5fVEFCTEUgXWI0X3Rva2VuX3RhYmxlWwotI2VuZGlmCi0KLSNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAotXW00X2lmZGVmKFtiNF9zdHlwZV0sCi1bdHlwZWRlZiB1bmlvbltdbTRfYnJlZ2V4cChiNF9zdHlwZSwgW157XSwgWyBZWVNUWVBFXSkKLWI0X3N0eXBlCi0vKiBMaW5lIF9fbGluZV9fIG9mIHlhY2MuYy4gICovCi1iNF9zeW5jbGluZShbQG9saW5lQF0sIFtAb2ZpbGVAXSkKLQlZWVNUWVBFO10sCi1bdHlwZWRlZiBpbnQgWVlTVFlQRTtdKVsKLSMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KLSMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKLSNlbmRpZgotCi1dYjRfbG9jYXRpb25zX2lmKFsjaWYgISBkZWZpbmVkIFlZTFRZUEUgJiYgISBkZWZpbmVkIFlZTFRZUEVfSVNfREVDTEFSRUQKLXR5cGVkZWYgc3RydWN0IFlZTFRZUEUKLXsKLSAgaW50IGZpcnN0X2xpbmU7Ci0gIGludCBmaXJzdF9jb2x1bW47Ci0gIGludCBsYXN0X2xpbmU7Ci0gIGludCBsYXN0X2NvbHVtbjsKLX0gWVlMVFlQRTsKLSMgZGVmaW5lIHl5bHR5cGUgWVlMVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KLSMgZGVmaW5lIFlZTFRZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlMVFlQRV9JU19UUklWSUFMIDEKLSNlbmRpZgotXSlbCitdbTRfaWZ2YWwobTRfcXVvdGUoYjRfc3BlY19kZWZpbmVzX2ZpbGUpLAorW1svKiBJbiBhIGZ1dHVyZSByZWxlYXNlIG9mIEJpc29uLCB0aGlzIHNlY3Rpb24gd2lsbCBiZSByZXBsYWNlZAorICAgYnkgI2luY2x1ZGUgIkBiYXNlbmFtZShdYjRfc3BlY19kZWZpbmVzX2ZpbGVbQCkiLiAgKi8KK11dKWRubAorYjRfc2hhcmVkX2RlY2xhcmF0aW9uc1sKIAogLyogQ29weSB0aGUgc2Vjb25kIHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLwotXWI0X3Bvc3RfcHJvbG9ndWUKK11iNF91c2VyX3Bvc3RfcHJvbG9ndWUKK2I0X3BlcmNlbnRfY29kZV9nZXRbXWRubAogCi0vKiBMaW5lIF9fbGluZV9fIG9mIHlhY2MuYy4gICovCi1iNF9zeW5jbGluZShbQG9saW5lQF0sIFtAb2ZpbGVAXSlbCi0KLSNpZmRlZiBzaG9ydAorWyNpZmRlZiBzaG9ydAogIyB1bmRlZiBzaG9ydAogI2VuZGlmCiAKQEAgLTI2MiwzNyArNDM2LDM4IEBACiAjZGVmaW5lIFlZU0laRV9NQVhJTVVNICgoWVlTSVpFX1QpIC0xKQogCiAjaWZuZGVmIFlZXwotIyBpZiBZWUVOQUJMRV9OTFMKKyMgaWYgZGVmaW5lZCBZWUVOQUJMRV9OTFMgJiYgWVlFTkFCTEVfTkxTCiAjICBpZiBFTkFCTEVfTkxTCiAjICAgaW5jbHVkZSA8bGliaW50bC5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgZGVmaW5lIFlZXyhtc2dpZCkgZGdldHRleHQgKCJiaXNvbi1ydW50aW1lIiwgbXNnaWQpCisjICAgZGVmaW5lIFlZXyhNc2dpZCkgZGdldHRleHQgKCJiaXNvbi1ydW50aW1lIiwgTXNnaWQpCiAjICBlbmRpZgogIyBlbmRpZgogIyBpZm5kZWYgWVlfCi0jICBkZWZpbmUgWVlfKG1zZ2lkKSBtc2dpZAorIyAgZGVmaW5lIFlZXyhNc2dpZCkgTXNnaWQKICMgZW5kaWYKICNlbmRpZgogCiAvKiBTdXBwcmVzcyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5nIiBFLiAgKi8KICNpZiAhIGRlZmluZWQgbGludCB8fCBkZWZpbmVkIF9fR05VQ19fCi0jIGRlZmluZSBZWVVTRShlKSAoKHZvaWQpIChlKSkKKyMgZGVmaW5lIFlZVVNFKEUpICgodm9pZCkgKEUpKQogI2Vsc2UKLSMgZGVmaW5lIFlZVVNFKGUpIC8qIGVtcHR5ICovCisjIGRlZmluZSBZWVVTRShFKSAvKiBlbXB0eSAqLwogI2VuZGlmCiAKIC8qIElkZW50aXR5IGZ1bmN0aW9uLCB1c2VkIHRvIHN1cHByZXNzIHdhcm5pbmdzIGFib3V0IGNvbnN0YW50IGNvbmRpdGlvbnMuICAqLwogI2lmbmRlZiBsaW50Ci0jIGRlZmluZSBZWUlEKG4pIChuKQorIyBkZWZpbmUgWVlJRChOKSAoTikKICNlbHNlCi1dYjRfY19mdW5jdGlvbl9kZWYoW1lZSURdLCBbc3RhdGljIGludF0sIFtbaW50IGldLCBbaV1dKVsKK11iNF9jX2Z1bmN0aW9uX2RlZihbWVlJRF0sIFtzdGF0aWMgaW50XSwgW1tpbnQgeXlpXSwgW3l5aV1dKVsKIHsKLSAgcmV0dXJuIGk7CisgIHJldHVybiB5eWk7CiB9CiAjZW5kaWYKIAotI2lmICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRQorI2lmIF1iNF9sYWNfaWYoW1sxXV0sIFtbISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFXV0pWwogCi0vKiBUaGUgcGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gICovCisvKiBUaGUgcGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gICovXWRubAorYjRfcHVzaF9pZihbXSwgW2I0X2xhY19pZihbXSwgW1sKIAogIyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKICMgIGlmIFlZU1RBQ0tfVVNFX0FMTE9DQQpAQCAtMzA3LDE1ICs0ODIsMTYgQEAKICMgICAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCiAjICAgZWxzZQogIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKLSMgICAgaWYgISBkZWZpbmVkIF9BTExPQ0FfSCAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIF1iNF9jX21vZGVyblsKKyMgICAgaWYgISBkZWZpbmVkIF9BTExPQ0FfSCAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTICYmIF1iNF9jX21vZGVyblsKICMgICAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgICBpZm5kZWYgX1NURExJQl9ICi0jICAgICAgZGVmaW5lIF9TVERMSUJfSCAxCisgICAgICAvKiBVc2UgRVhJVF9TVUNDRVNTIGFzIGEgd2l0bmVzcyBmb3Igc3RkbGliLmguICAqLworIyAgICAgaWZuZGVmIEVYSVRfU1VDQ0VTUworIyAgICAgIGRlZmluZSBFWElUX1NVQ0NFU1MgMAogIyAgICAgZW5kaWYKICMgICAgZW5kaWYKICMgICBlbmRpZgogIyAgZW5kaWYKLSMgZW5kaWYKKyMgZW5kaWZdXSldKVsKIAogIyBpZmRlZiBZWVNUQUNLX0FMTE9DCiAgICAvKiBQYWNpZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5pbmcuICAqLwpAQCAtMzMzLDQzICs1MDksNDMgQEAKICMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0KICMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIFlZU0laRV9NQVhJTVVNCiAjICBlbmRpZgotIyAgaWYgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgISBkZWZpbmVkIF9TVERMSUJfSCBcCisjICBpZiAoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTIFwKICAgICAgICAmJiAhICgoZGVmaW5lZCBZWU1BTExPQyB8fCBkZWZpbmVkIG1hbGxvYykgXAogCSAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJlZSkpKQogIyAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgaWZuZGVmIF9TVERMSUJfSAotIyAgICBkZWZpbmUgX1NURExJQl9IIDEKKyMgICBpZm5kZWYgRVhJVF9TVUNDRVNTCisjICAgIGRlZmluZSBFWElUX1NVQ0NFU1MgMAogIyAgIGVuZGlmCiAjICBlbmRpZgogIyAgaWZuZGVmIFlZTUFMTE9DCiAjICAgZGVmaW5lIFlZTUFMTE9DIG1hbGxvYwotIyAgIGlmICEgZGVmaW5lZCBtYWxsb2MgJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiBdYjRfY19tb2Rlcm5bCisjICAgaWYgISBkZWZpbmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTICYmIF1iNF9jX21vZGVyblsKIHZvaWQgKm1hbGxvYyAoWVlTSVpFX1QpOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCiAjICAgZW5kaWYKICMgIGVuZGlmCiAjICBpZm5kZWYgWVlGUkVFCiAjICAgZGVmaW5lIFlZRlJFRSBmcmVlCi0jICAgaWYgISBkZWZpbmVkIGZyZWUgJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiBdYjRfY19tb2Rlcm5bCisjICAgaWYgISBkZWZpbmVkIGZyZWUgJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUyAmJiBdYjRfY19tb2Rlcm5bCiB2b2lkIGZyZWUgKHZvaWQgKik7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KICMgICBlbmRpZgogIyAgZW5kaWYKLSMgZW5kaWYKLSNlbmRpZiAvKiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UgKi8KKyMgZW5kaWZdYjRfbGFjX2lmKFtbCisjIGRlZmluZSBZWUNPUFlfTkVFREVEIDFdXSlbCisjZW5kaWZdYjRfbGFjX2lmKFtdLCBbWyAvKiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UgKi9dXSlbCiAKIAogI2lmICghIGRlZmluZWQgeXlvdmVyZmxvdyBcCiAgICAgICYmICghIGRlZmluZWQgX19jcGx1c3BsdXMgXAotCSB8fCAoXWI0X2xvY2F0aW9uc19pZihbW2RlZmluZWQgWVlMVFlQRV9JU19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTCBcCi0JICAgICAmJiBdXSlbZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkpCisJIHx8IChdYjRfbG9jYXRpb25zX2lmKFtbZGVmaW5lZCBdYjRfYXBpX1BSRUZJWFtMVFlQRV9JU19UUklWSUFMICYmIF1iNF9hcGlfUFJFRklYW0xUWVBFX0lTX1RSSVZJQUwgXAorCSAgICAgJiYgXV0pW2RlZmluZWQgXWI0X2FwaV9QUkVGSVhbU1RZUEVfSVNfVFJJVklBTCAmJiBdYjRfYXBpX1BSRUZJWFtTVFlQRV9JU19UUklWSUFMKSkpCiAKIC8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1iZXIuICAqLwogdW5pb24geXlhbGxvYwogewotICB5eXR5cGVfaW50MTYgeXlzczsKLSAgWVlTVFlQRSB5eXZzOwotICBdYjRfbG9jYXRpb25zX2lmKFsgIFlZTFRZUEUgeXlsczsKLV0pZG5sCi1bfTsKKyAgeXl0eXBlX2ludDE2IHl5c3NfYWxsb2M7CisgIFlZU1RZUEUgeXl2c19hbGxvYztdYjRfbG9jYXRpb25zX2lmKFsKKyAgWVlMVFlQRSB5eWxzX2FsbG9jO10pWworfTsKIAogLyogVGhlIHNpemUgb2YgdGhlIG1heGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8KICMgZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5pb24geXlhbGxvYykgLSAxKQpAQCAtMzg0LDM1ICs1NjAsMTkgQEAKICAgICAgKChOKSAqIChzaXplb2YgKHl5dHlwZV9pbnQxNikgKyBzaXplb2YgKFlZU1RZUEUpKSBcCiAgICAgICArIFlZU1RBQ0tfR0FQX01BWElNVU0pXSlbCiAKLS8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIEZST00gdG8gVE8uICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbwotICAgbm90IG92ZXJsYXAuICAqLwotIyBpZm5kZWYgWVlDT1BZCi0jICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEgPCBfX0dOVUNfXwotIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KSBcCi0gICAgICBfX2J1aWx0aW5fbWVtY3B5IChUbywgRnJvbSwgKENvdW50KSAqIHNpemVvZiAoKihGcm9tKSkpCi0jICBlbHNlCi0jICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpCQlcCi0gICAgICBkbwkJCQkJXAotCXsJCQkJCVwKLQkgIFlZU0laRV9UIHl5aTsJCQkJXAotCSAgZm9yICh5eWkgPSAwOyB5eWkgPCAoQ291bnQpOyB5eWkrKykJXAotCSAgICAoVG8pW3l5aV0gPSAoRnJvbSlbeXlpXTsJCVwKLQl9CQkJCQlcCi0gICAgICB3aGlsZSAoWVlJRCAoMCkpCi0jICBlbmRpZgotIyBlbmRpZgorIyBkZWZpbmUgWVlDT1BZX05FRURFRCAxCiAKIC8qIFJlbG9jYXRlIFNUQUNLIGZyb20gaXRzIG9sZCBsb2NhdGlvbiB0byB0aGUgbmV3IG9uZS4gIFRoZQogICAgbG9jYWwgdmFyaWFibGVzIFlZU0laRSBhbmQgWVlTVEFDS1NJWkUgZ2l2ZSB0aGUgb2xkIGFuZCBuZXcgbnVtYmVyIG9mCiAgICBlbGVtZW50cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZlcyB0aGUgbmV3IGxvY2F0aW9uIG9mIHRoZQogICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJvcGVybHkgYWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQKICAgIHN0YWNrLiAgKi8KLSMgZGVmaW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2spCQkJCQlcCisjIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrX2FsbG9jLCBTdGFjaykJCQkJXAogICAgIGRvCQkJCQkJCQkJXAogICAgICAgewkJCQkJCQkJCVwKIAlZWVNJWkVfVCB5eW5ld2J5dGVzOwkJCQkJCVwKLQlZWUNPUFkgKCZ5eXB0ci0+U3RhY2ssIFN0YWNrLCB5eXNpemUpOwkJCQlcCi0JU3RhY2sgPSAmeXlwdHItPlN0YWNrOwkJCQkJCVwKKwlZWUNPUFkgKCZ5eXB0ci0+U3RhY2tfYWxsb2MsIFN0YWNrLCB5eXNpemUpOwkJCVwKKwlTdGFjayA9ICZ5eXB0ci0+U3RhY2tfYWxsb2M7CQkJCQlcCiAJeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAogCXl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7CQkJCVwKICAgICAgIH0JCQkJCQkJCQlcCkBAIC00MjAsNiArNTgwLDI2IEBACiAKICNlbmRpZgogCisjaWYgZGVmaW5lZCBZWUNPUFlfTkVFREVEICYmIFlZQ09QWV9ORUVERUQKKy8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIFNSQyB0byBEU1QuICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbworICAgbm90IG92ZXJsYXAuICAqLworIyBpZm5kZWYgWVlDT1BZCisjICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEgPCBfX0dOVUNfXworIyAgIGRlZmluZSBZWUNPUFkoRHN0LCBTcmMsIENvdW50KSBcCisgICAgICBfX2J1aWx0aW5fbWVtY3B5IChEc3QsIFNyYywgKENvdW50KSAqIHNpemVvZiAoKihTcmMpKSkKKyMgIGVsc2UKKyMgICBkZWZpbmUgWVlDT1BZKERzdCwgU3JjLCBDb3VudCkgICAgICAgICAgICAgIFwKKyAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBZWVNJWkVfVCB5eWk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5aSsrKSAgIFwKKyAgICAgICAgICAgIChEc3QpW3l5aV0gPSAoU3JjKVt5eWldOyAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHdoaWxlIChZWUlEICgwKSkKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYgLyogIVlZQ09QWV9ORUVERUQgKi8KKwogLyogWVlGSU5BTCAtLSBTdGF0ZSBudW1iZXIgb2YgdGhlIHRlcm1pbmF0aW9uIHN0YXRlLiAgKi8KICNkZWZpbmUgWVlGSU5BTCAgXWI0X2ZpbmFsX3N0YXRlX251bWJlclsKIC8qIFlZTEFTVCAtLSBMYXN0IGluZGV4IGluIFlZVEFCTEUuICAqLwpAQCAtNDQ3LDcgKzYyNyw3IEBACiAgIF1iNF90cmFuc2xhdGVbCiB9OwogCi0jaWYgWVlERUJVRworI2lmIF1iNF9hcGlfUFJFRklYW0RFQlVHCiAvKiBZWVBSSFNbWVlOXSAtLSBJbmRleCBvZiB0aGUgZmlyc3QgUkhTIHN5bWJvbCBvZiBydWxlIG51bWJlciBZWU4gaW4KICAgIFlZUkhTLiAgKi8KIHN0YXRpYyBjb25zdCBdYjRfaW50X3R5cGVfZm9yKFtiNF9wcmhzXSlbIHl5cHJoc1tdID0KQEAgLTQ2OCw3ICs2NDgsNyBAQAogfTsKICNlbmRpZgogCi0jaWYgWVlERUJVRyB8fCBZWUVSUk9SX1ZFUkJPU0UgfHwgWVlUT0tFTl9UQUJMRQorI2lmIF1iNF9hcGlfUFJFRklYW0RFQlVHIHx8IFlZRVJST1JfVkVSQk9TRSB8fCBdYjRfdG9rZW5fdGFibGVfZmxhZ1sKIC8qIFlZVE5BTUVbU1lNQk9MLU5VTV0gLS0gU3RyaW5nIG5hbWUgb2YgdGhlIHN5bWJvbCBTWU1CT0wtTlVNLgogICAgRmlyc3QsIHRoZSB0ZXJtaW5hbHMsIHRoZW4sIHN0YXJ0aW5nIGF0IFlZTlRPS0VOUywgbm9udGVybWluYWxzLiAgKi8KIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQpAQCAtNDk4LDggKzY3OCw4IEBACiAgIF1iNF9yMlsKIH07CiAKLS8qIFlZREVGQUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcnVsZSB0byByZWR1Y2Ugd2l0aCBpbiBzdGF0ZQotICAgU1RBVEUtTlVNIHdoZW4gWVlUQUJMRSBkb2Vzbid0IHNwZWNpZnkgc29tZXRoaW5nIGVsc2UgdG8gZG8uICBaZXJvCisvKiBZWURFRkFDVFtTVEFURS1OQU1FXSAtLSBEZWZhdWx0IHJlZHVjdGlvbiBudW1iZXIgaW4gc3RhdGUgU1RBVEUtTlVNLgorICAgUGVyZm9ybWVkIHdoZW4gWVlUQUJMRSBkb2Vzbid0IHNwZWNpZnkgc29tZXRoaW5nIGVsc2UgdG8gZG8uICBaZXJvCiAgICBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4gICovCiBzdGF0aWMgY29uc3QgXWI0X2ludF90eXBlX2ZvcihbYjRfZGVmYWN0XSlbIHl5ZGVmYWN0W10gPQogewpAQCAtNTI4LDE0ICs3MDgsMTkgQEAKIAogLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4gIElmCiAgICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gKLSAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiB6ZXJvLCBkbyB3aGF0IFlZREVGQUNUIHNheXMuCi0gICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCisgICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYgWVlUQUJMRV9OSU5GLCBzeW50YXggZXJyb3IuICAqLwogI2RlZmluZSBZWVRBQkxFX05JTkYgXWI0X3RhYmxlX25pbmZbCiBzdGF0aWMgY29uc3QgXWI0X2ludF90eXBlX2ZvcihbYjRfdGFibGVdKVsgeXl0YWJsZVtdID0KIHsKICAgXWI0X3RhYmxlWwogfTsKIAorI2RlZmluZSB5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdChZeXN0YXRlKSBcCisgIF1iNF90YWJsZV92YWx1ZV9lcXVhbHMoW1twYWN0XV0sIFtbWXlzdGF0ZV1dLCBbYjRfcGFjdF9uaW5mXSlbCisKKyNkZWZpbmUgeXl0YWJsZV92YWx1ZV9pc19lcnJvcihZeXRhYmxlX3ZhbHVlKSBcCisgIF1iNF90YWJsZV92YWx1ZV9lcXVhbHMoW1t0YWJsZV1dLCBbW1l5dGFibGVfdmFsdWVdXSwgW2I0X3RhYmxlX25pbmZdKVsKKwogc3RhdGljIGNvbnN0IF1iNF9pbnRfdHlwZV9mb3IoW2I0X2NoZWNrXSlbIHl5Y2hlY2tbXSA9CiB7CiAgIF1iNF9jaGVja1sKQEAgLTU2MCw3OCArNzQ1LDUwIEBACiAKIC8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLiAgVGhpcyByZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkKICAgIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCi0gICBPbmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gICovCisgICBPbmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gIEhvd2V2ZXIsCisgICBZWUZBSUwgYXBwZWFycyB0byBiZSBpbiB1c2UuICBOZXZlcnRoZWxlc3MsIGl0IGlzIGZvcm1hbGx5IGRlcHJlY2F0ZWQKKyAgIGluIEJpc29uIDIuNC4yJ3MgTkVXUyBlbnRyeSwgd2hlcmUgYSBwbGFuIHRvIHBoYXNlIGl0IG91dCBpcworICAgZGlzY3Vzc2VkLiAgKi8KIAogI2RlZmluZSBZWUZBSUwJCWdvdG8geXllcnJsYWIKKyNpZiBkZWZpbmVkIFlZRkFJTAorICAvKiBUaGlzIGlzIGhlcmUgdG8gc3VwcHJlc3Mgd2FybmluZ3MgZnJvbSB0aGUgR0NDIGNwcCdzCisgICAgIC1XdW51c2VkLW1hY3Jvcy4gIE5vcm1hbGx5IHdlIGRvbid0IHdvcnJ5IGFib3V0IHRoYXQgd2FybmluZywgYnV0CisgICAgIHNvbWUgdXNlcnMgZG8sIGFuZCB3ZSB3YW50IHRvIG1ha2UgaXQgZWFzeSBmb3IgdXNlcnMgdG8gcmVtb3ZlCisgICAgIFlZRkFJTCB1c2VzLCB3aGljaCB3aWxsIHByb2R1Y2Ugd2FybmluZ3MgZnJvbSBCaXNvbiAyLjUuICAqLworI2VuZGlmCiAKICNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQogCi0jZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkJCQkJCVwKLWRvCQkJCQkJCQlcCi0gIGlmICh5eWNoYXIgPT0gWVlFTVBUWSAmJiB5eWxlbiA9PSAxKQkJCQlcCi0gICAgewkJCQkJCQkJXAotICAgICAgeXljaGFyID0gKFRva2VuKTsJCQkJCQlcCi0gICAgICB5eWx2YWwgPSAoVmFsdWUpOwkJCQkJCVwKLSAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsJCQkJXAotICAgICAgWVlQT1BTVEFDSyAoMSk7CQkJCQkJXAotICAgICAgZ290byB5eWJhY2t1cDsJCQkJCQlcCi0gICAgfQkJCQkJCQkJXAotICBlbHNlCQkJCQkJCQlcCi0gICAgewkJCQkJCQkJXAorI2RlZmluZSBZWUJBQ0tVUChUb2tlbiwgVmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2RvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHl5Y2hhciA9IChUb2tlbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB5eWx2YWwgPSAoVmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgWVlQT1BTVEFDSyAoeXlsZW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHl5c3RhdGUgPSAqeXlzc3A7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXWI0X2xhY19pZihbWworICAgICAgWVlfTEFDX0RJU0NBUkQgKCJZWUJBQ0tVUCIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxdXSlbCisgICAgICBnb3RvIHl5YmFja3VwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgeXllcnJvciAoXWI0X3l5ZXJyb3JfYXJnc1tZWV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKSk7IFwKICAgICAgIFlZRVJST1I7CQkJCQkJCVwKICAgICB9CQkJCQkJCQlcCiB3aGlsZSAoWVlJRCAoMCkpCiAKLQorLyogRXJyb3IgdG9rZW4gbnVtYmVyICovCiAjZGVmaW5lIFlZVEVSUk9SCTEKICNkZWZpbmUgWVlFUlJDT0RFCTI1NgogCi0KLS8qIFlZTExPQ19ERUZBVUxUIC0tIFNldCBDVVJSRU5UIHRvIHNwYW4gZnJvbSBSSFNbMV0gdG8gUkhTW05dLgotICAgSWYgTiBpcyAwLCB0aGVuIHNldCBDVVJSRU5UIHRvIHRoZSBlbXB0eSBsb2NhdGlvbiB3aGljaCBlbmRzCi0gICB0aGUgcHJldmlvdXMgc3ltYm9sOiBSSFNbMF0gKGFsd2F5cyBkZWZpbmVkKS4gICovCi0KK11iNF9sb2NhdGlvbnNfaWYoW1sKK11iNF95eWxsb2NfZGVmYXVsdF9kZWZpbmVbCiAjZGVmaW5lIFlZUkhTTE9DKFJocywgSykgKChSaHMpW0tdKQotI2lmbmRlZiBZWUxMT0NfREVGQVVMVAotIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKQkJCQlcCi0gICAgZG8JCQkJCQkJCQlcCi0gICAgICBpZiAoWVlJRCAoTikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl7CQkJCQkJCQlcCi0JICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfbGluZTsJXAotCSAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2NvbHVtbjsJXAotCSAgKEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfbGluZTsJCVwKLQkgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsJXAotCX0JCQkJCQkJCVwKLSAgICAgIGVsc2UJCQkJCQkJCVwKLQl7CQkJCQkJCQlcCi0JICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gKEN1cnJlbnQpLmxhc3RfbGluZSAgID0JCVwKLQkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9saW5lOwkJCQlcCi0JICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gKEN1cnJlbnQpLmxhc3RfY29sdW1uID0JCVwKLQkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9jb2x1bW47CQkJCVwKLQl9CQkJCQkJCQlcCi0gICAgd2hpbGUgKFlZSUQgKDApKQotI2VuZGlmCi0KLQotLyogWVlfTE9DQVRJT05fUFJJTlQgLS0gUHJpbnQgdGhlIGxvY2F0aW9uIG9uIHRoZSBzdHJlYW0uCi0gICBUaGlzIG1hY3JvIHdhcyBub3QgbWFuZGF0ZWQgb3JpZ2luYWxseTogZGVmaW5lIG9ubHkgaWYgd2Uga25vdwotICAgd2Ugd29uJ3QgYnJlYWsgdXNlciBjb2RlOiB3aGVuIHRoZXNlIGFyZSB0aGUgbG9jYXRpb25zIHdlIGtub3cuICAqLwotCi0jaWZuZGVmIFlZX0xPQ0FUSU9OX1BSSU5UCi0jIGlmIFlZTFRZUEVfSVNfVFJJVklBTAotIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykJCQlcCi0gICAgIGZwcmludGYgKEZpbGUsICIlZC4lZC0lZC4lZCIsCQkJXAotCSAgICAgIChMb2MpLmZpcnN0X2xpbmUsIChMb2MpLmZpcnN0X2NvbHVtbiwJXAotCSAgICAgIChMb2MpLmxhc3RfbGluZSwgIChMb2MpLmxhc3RfY29sdW1uKQotIyBlbHNlCi0jICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQpIDApCi0jIGVuZGlmCi0jZW5kaWYKLQorXV0pWworXWI0X3l5X2xvY2F0aW9uX3ByaW50X2RlZmluZVsKIAogLyogWVlMRVggLS0gY2FsbGluZyBgeXlsZXgnIHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCi0KICNpZmRlZiBZWUxFWF9QQVJBTQogIyBkZWZpbmUgWVlMRVggeXlsZXggKF1iNF9wdXJlX2lmKFsmeXlsdmFsW11iNF9sb2NhdGlvbnNfaWYoWywgJnl5bGxvY10pLCBdKVtZWUxFWF9QQVJBTSkKICNlbHNlCkBAIC02MzksNyArNzk2LDcgQEAKICNlbmRpZgogCiAvKiBFbmFibGUgZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICovCi0jaWYgWVlERUJVRworI2lmIF1iNF9hcGlfUFJFRklYW0RFQlVHCiAKICMgaWZuZGVmIFlZRlBSSU5URgogIyAgaW5jbHVkZSA8c3RkaW8uaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwpAQCAtNjcxLDEyICs4MjgsMTUgQEAKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBdYjRfY19mdW5jdGlvbl9kZWYoW3l5X3N0YWNrX3ByaW50XSwgW3N0YXRpYyB2b2lkXSwKLQkJICAgW1t5eXR5cGVfaW50MTYgKmJvdHRvbV0sIFtib3R0b21dXSwKLQkJICAgW1t5eXR5cGVfaW50MTYgKnRvcF0sICAgIFt0b3BdXSlbCisJCSAgIFtbeXl0eXBlX2ludDE2ICp5eWJvdHRvbV0sIFt5eWJvdHRvbV1dLAorCQkgICBbW3l5dHlwZV9pbnQxNiAqeXl0b3BdLCAgICBbeXl0b3BdXSlbCiB7CiAgIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7Ci0gIGZvciAoOyBib3R0b20gPD0gdG9wOyArK2JvdHRvbSkKLSAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsICpib3R0b20pOworICBmb3IgKDsgeXlib3R0b20gPD0geXl0b3A7IHl5Ym90dG9tKyspCisgICAgeworICAgICAgaW50IHl5Ym90ID0gKnl5Ym90dG9tOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCB5eWJvdCk7CisgICAgfQogICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CiB9CiAKQEAgLTY5NSw3ICs4NTUsNyBAQAogCQkgICBbW1lZU1RZUEUgKnl5dnNwXSwgW3l5dnNwXV0sCiAgICAgYjRfbG9jYXRpb25zX2lmKFtbW1lZTFRZUEUgKnl5bHNwXSwgW3l5bHNwXV0sCiAJCSAgIF0pW1tpbnQgeXlydWxlXSwgW3l5cnVsZV1dbTRfaWZzZXQoW2I0X3BhcnNlX3BhcmFtXSwgWywKLQkJICAgXSliNF9wYXJzZV9wYXJhbSlbCisJCSAgIGI0X3BhcnNlX3BhcmFtXSkpWwogewogICBpbnQgeXlucmhzID0geXlyMlt5eXJ1bGVdOwogICBpbnQgeXlpOwpAQCAtNzA1LDEyICs4NjUsMTIgQEAKICAgLyogVGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICovCiAgIGZvciAoeXlpID0gMDsgeXlpIDwgeXlucmhzOyB5eWkrKykKICAgICB7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7CiAgICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVsZV0gKyB5eWldLAogCQkgICAgICAgJl1iNF9yaHNfdmFsdWUoeXlucmhzLCB5eWkgKyAxKVsKIAkJICAgICAgIF1iNF9sb2NhdGlvbnNfaWYoWywgJl1iNF9yaHNfbG9jYXRpb24oeXlucmhzLCB5eWkgKyAxKSlbXWRubAogCQkgICAgICAgYjRfdXNlcl9hcmdzWyk7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwogICAgIH0KIH0KIApAQCAtNzIzLDEyICs4ODMsMTIgQEAKIC8qIE5vbnplcm8gbWVhbnMgcHJpbnQgcGFyc2UgdHJhY2UuICBJdCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgc28gdGhhdAogICAgbXVsdGlwbGUgcGFyc2VycyBjYW4gY29leGlzdC4gICovCiBpbnQgeXlkZWJ1ZzsKLSNlbHNlIC8qICFZWURFQlVHICovCisjZWxzZSAvKiAhXWI0X2FwaV9QUkVGSVhbREVCVUcgKi8KICMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQogIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCiAjIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkKICMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQotI2VuZGlmIC8qICFZWURFQlVHICovCisjZW5kaWYgLyogIV1iNF9hcGlfUFJFRklYW0RFQlVHICovCiAKIAogLyogWVlJTklUREVQVEggLS0gaW5pdGlhbCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFja3MuICAqLwpAQCAtNzQ1LDkgKzkwNSwyNDQgQEAKIAogI2lmbmRlZiBZWU1BWERFUFRICiAjIGRlZmluZSBZWU1BWERFUFRIIF1iNF9zdGFja19kZXB0aF9tYXhbCisjZW5kaWZdYjRfbGFjX2lmKFtbCisKKy8qIEdpdmVuIGEgc3RhdGUgc3RhY2sgc3VjaCB0aGF0ICpZWUJPVFRPTSBpcyBpdHMgYm90dG9tLCBzdWNoIHRoYXQKKyAgICpZWVRPUCBpcyBlaXRoZXIgaXRzIHRvcCBvciBpcyBZWVRPUF9FTVBUWSB0byBpbmRpY2F0ZSBhbiBlbXB0eQorICAgc3RhY2ssIGFuZCBzdWNoIHRoYXQgKllZQ0FQQUNJVFkgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIGl0CisgICBjYW4gaG9sZCB3aXRob3V0IGEgcmVhbGxvY2F0aW9uLCBtYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHJvb20gdG8KKyAgIHN0b3JlIFlZQUREIG1vcmUgZWxlbWVudHMuICBJZiBub3QsIGFsbG9jYXRlIGEgbmV3IHN0YWNrIHVzaW5nCisgICBZWVNUQUNLX0FMTE9DLCBjb3B5IHRoZSBleGlzdGluZyBlbGVtZW50cywgYW5kIGFkanVzdCAqWVlCT1RUT00sCisgICAqWVlUT1AsIGFuZCAqWVlDQVBBQ0lUWSB0byByZWZsZWN0IHRoZSBuZXcgY2FwYWNpdHkgYW5kIG1lbW9yeQorICAgbG9jYXRpb24uICBJZiAqWVlCT1RUT00gIT0gWVlCT1RUT01fTk9fRlJFRSwgdGhlbiBmcmVlIHRoZSBvbGQgc3RhY2sKKyAgIHVzaW5nIFlZU1RBQ0tfRlJFRS4gIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWwgb3IgaWYgbm8gcmVhbGxvY2F0aW9uIGlzCisgICByZXF1aXJlZC4gIFJldHVybiAxIGlmIG1lbW9yeSBpcyBleGhhdXN0ZWQuICAqLworc3RhdGljIGludAoreXlfbGFjX3N0YWNrX3JlYWxsb2MgKFlZU0laRV9UICp5eWNhcGFjaXR5LCBZWVNJWkVfVCB5eWFkZCwKKyNpZiBdYjRfYXBpX1BSRUZJWFtERUJVRworICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKnl5ZGVidWdfcHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKnl5ZGVidWdfc3VmZml4LAorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgeXl0eXBlX2ludDE2ICoqeXlib3R0b20sCisgICAgICAgICAgICAgICAgICAgICAgeXl0eXBlX2ludDE2ICp5eWJvdHRvbV9ub19mcmVlLAorICAgICAgICAgICAgICAgICAgICAgIHl5dHlwZV9pbnQxNiAqKnl5dG9wLCB5eXR5cGVfaW50MTYgKnl5dG9wX2VtcHR5KQoreworICBZWVNJWkVfVCB5eXNpemVfb2xkID0KKyAgICAqeXl0b3AgPT0geXl0b3BfZW1wdHkgPyAwIDogKnl5dG9wIC0gKnl5Ym90dG9tICsgMTsKKyAgWVlTSVpFX1QgeXlzaXplX25ldyA9IHl5c2l6ZV9vbGQgKyB5eWFkZDsKKyAgaWYgKCp5eWNhcGFjaXR5IDwgeXlzaXplX25ldykKKyAgICB7CisgICAgICBZWVNJWkVfVCB5eWFsbG9jID0gMiAqIHl5c2l6ZV9uZXc7CisgICAgICB5eXR5cGVfaW50MTYgKnl5Ym90dG9tX25ldzsKKyAgICAgIC8qIFVzZSBZWU1BWERFUFRIIGZvciBtYXhpbXVtIHN0YWNrIHNpemUgZ2l2ZW4gdGhhdCB0aGUgc3RhY2sKKyAgICAgICAgIHNob3VsZCBuZXZlciBuZWVkIHRvIGdyb3cgbGFyZ2VyIHRoYW4gdGhlIG1haW4gc3RhdGUgc3RhY2sKKyAgICAgICAgIG5lZWRzIHRvIGdyb3cgd2l0aG91dCBMQUMuICAqLworICAgICAgaWYgKFlZTUFYREVQVEggPCB5eXNpemVfbmV3KQorICAgICAgICB7CisgICAgICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiJXNtYXggc2l6ZSBleGNlZWRlZCVzIiwgeXlkZWJ1Z19wcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgeXlkZWJ1Z19zdWZmaXgpKTsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgaWYgKFlZTUFYREVQVEggPCB5eWFsbG9jKQorICAgICAgICB5eWFsbG9jID0gWVlNQVhERVBUSDsKKyAgICAgIHl5Ym90dG9tX25ldyA9CisgICAgICAgICh5eXR5cGVfaW50MTYqKSBZWVNUQUNLX0FMTE9DICh5eWFsbG9jICogc2l6ZW9mICp5eWJvdHRvbV9uZXcpOworICAgICAgaWYgKCF5eWJvdHRvbV9uZXcpCisgICAgICAgIHsKKyAgICAgICAgICBZWURQUklOVEYgKChzdGRlcnIsICIlc3JlYWxsb2MgZmFpbGVkJXMiLCB5eWRlYnVnX3ByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICB5eWRlYnVnX3N1ZmZpeCkpOworICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICBpZiAoKnl5dG9wICE9IHl5dG9wX2VtcHR5KQorICAgICAgICB7CisgICAgICAgICAgWVlDT1BZICh5eWJvdHRvbV9uZXcsICp5eWJvdHRvbSwgeXlzaXplX29sZCk7CisgICAgICAgICAgKnl5dG9wID0geXlib3R0b21fbmV3ICsgKHl5c2l6ZV9vbGQgLSAxKTsKKyAgICAgICAgfQorICAgICAgaWYgKCp5eWJvdHRvbSAhPSB5eWJvdHRvbV9ub19mcmVlKQorICAgICAgICBZWVNUQUNLX0ZSRUUgKCp5eWJvdHRvbSk7CisgICAgICAqeXlib3R0b20gPSB5eWJvdHRvbV9uZXc7CisgICAgICAqeXljYXBhY2l0eSA9IHl5YWxsb2M7XW00X2lmKGI0X3BlcmNlbnRfZGVmaW5lX2dldChbW3BhcnNlLmxhYy5tZW1vcnktdHJhY2VdXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmdWxsXSwgW1sKKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIiVzcmVhbGxvYyB0byAlbHUlcyIsIHl5ZGVidWdfcHJlZml4LAorICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eWFsbG9jLCB5eWRlYnVnX3N1ZmZpeCkpO11dKVsKKyAgICB9CisgIHJldHVybiAwOworfQorCisvKiBFc3RhYmxpc2ggdGhlIGluaXRpYWwgY29udGV4dCBmb3IgdGhlIGN1cnJlbnQgbG9va2FoZWFkIGlmIG5vIGluaXRpYWwKKyAgIGNvbnRleHQgaXMgY3VycmVudGx5IGVzdGFibGlzaGVkLgorCisgICBXZSBkZWZpbmUgYSBjb250ZXh0IGFzIGEgc25hcHNob3Qgb2YgdGhlIHBhcnNlciBzdGFja3MuICBXZSBkZWZpbmUKKyAgIHRoZSBpbml0aWFsIGNvbnRleHQgZm9yIGEgbG9va2FoZWFkIGFzIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZQorICAgcGFyc2VyIGluaXRpYWxseSBleGFtaW5lcyB0aGF0IGxvb2thaGVhZCBpbiBvcmRlciB0byBzZWxlY3QgYQorICAgc3ludGFjdGljIGFjdGlvbi4gIFRodXMsIGlmIHRoZSBsb29rYWhlYWQgZXZlbnR1YWxseSBwcm92ZXMKKyAgIHN5bnRhY3RpY2FsbHkgdW5hY2NlcHRhYmxlIChwb3NzaWJseSBpbiBhIGxhdGVyIGNvbnRleHQgcmVhY2hlZCB2aWEgYQorICAgc2VyaWVzIG9mIHJlZHVjdGlvbnMpLCB0aGUgaW5pdGlhbCBjb250ZXh0IGNhbiBiZSB1c2VkIHRvIGRldGVybWluZQorICAgdGhlIGV4YWN0IHNldCBvZiB0b2tlbnMgdGhhdCB3b3VsZCBiZSBzeW50YWN0aWNhbGx5IGFjY2VwdGFibGUgaW4gdGhlCisgICBsb29rYWhlYWQncyBwbGFjZS4gIE1vcmVvdmVyLCBpdCBpcyB0aGUgY29udGV4dCBhZnRlciB3aGljaCBhbnkKKyAgIGZ1cnRoZXIgc2VtYW50aWMgYWN0aW9ucyB3b3VsZCBiZSBlcnJvbmVvdXMgYmVjYXVzZSB0aGV5IHdvdWxkIGJlCisgICBkZXRlcm1pbmVkIGJ5IGEgc3ludGFjdGljYWxseSB1bmFjY2VwdGFibGUgdG9rZW4uCisKKyAgIFlZX0xBQ19FU1RBQkxJU0ggc2hvdWxkIGJlIGludm9rZWQgd2hlbiBhIHJlZHVjdGlvbiBpcyBhYm91dCB0byBiZQorICAgcGVyZm9ybWVkIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSAod2hpY2gsIGZvciB0aGUgcHVycG9zZXMgb2YgTEFDLAorICAgaW5jbHVkZXMgY29uc2lzdGVudCBzdGF0ZXMgdGhhdCBkb24ndCBrbm93IHRoZXkncmUgY29uc2lzdGVudCBiZWNhdXNlCisgICB0aGVpciBkZWZhdWx0IHJlZHVjdGlvbnMgaGF2ZSBiZWVuIGRpc2FibGVkKS4gIElmZiB0aGVyZSBpcyBhCisgICBsb29rYWhlYWQgdG9rZW4sIGl0IHNob3VsZCBhbHNvIGJlIGludm9rZWQgYmVmb3JlIHJlcG9ydGluZyBhIHN5bnRheAorICAgZXJyb3IuICBUaGlzIGxhdHRlciBjYXNlIGlzIGZvciB0aGUgc2FrZSBvZiB0aGUgZGVidWdnaW5nIG91dHB1dC4KKworICAgRm9yIHBhcnNlLmxhYz1mdWxsLCB0aGUgaW1wbGVtZW50YXRpb24gb2YgWVlfTEFDX0VTVEFCTElTSCBpcyBhcworICAgZm9sbG93cy4gIElmIG5vIGluaXRpYWwgY29udGV4dCBpcyBjdXJyZW50bHkgZXN0YWJsaXNoZWQgZm9yIHRoZQorICAgY3VycmVudCBsb29rYWhlYWQsIHRoZW4gY2hlY2sgaWYgdGhhdCBsb29rYWhlYWQgY2FuIGV2ZW50dWFsbHkgYmUKKyAgIHNoaWZ0ZWQgaWYgc3ludGFjdGljIGFjdGlvbnMgY29udGludWUgZnJvbSB0aGUgY3VycmVudCBjb250ZXh0LgorICAgUmVwb3J0IGEgc3ludGF4IGVycm9yIGlmIGl0IGNhbm5vdC4gICovCisjZGVmaW5lIFlZX0xBQ19FU1RBQkxJU0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAoIXl5X2xhY19lc3RhYmxpc2hlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgIkxBQzogaW5pdGlhbCBjb250ZXh0IGVzdGFibGlzaGVkIGZvciAlc1xuIiwgICBcCisgICAgICAgICAgICAgICAgICB5eXRuYW1lW3l5dG9rZW5dKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHl5X2xhY19lc3RhYmxpc2hlZCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGludCB5eV9sYWNfc3RhdHVzID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB5eV9sYWMgKHl5ZXNhLCAmeXllcywgJnl5ZXNfY2FwYWNpdHksIHl5c3NwLCB5eXRva2VuKTsgXAorICAgICAgICBpZiAoeXlfbGFjX3N0YXR1cyA9PSAyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHl5X2xhY19zdGF0dXMgPT0gMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdvdG8geXllcnJsYWI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKy8qIERpc2NhcmQgYW55IHByZXZpb3VzIGluaXRpYWwgbG9va2FoZWFkIGNvbnRleHQgYmVjYXVzZSBvZiBFdmVudCwKKyAgIHdoaWNoIG1heSBiZSBhIGxvb2thaGVhZCBjaGFuZ2Ugb3IgYW4gaW52YWxpZGF0aW9uIG9mIHRoZSBjdXJyZW50bHkKKyAgIGVzdGFibGlzaGVkIGluaXRpYWwgY29udGV4dCBmb3IgdGhlIGN1cnJlbnQgbG9va2FoZWFkLgorCisgICBUaGUgbW9zdCBjb21tb24gZXhhbXBsZSBvZiBhIGxvb2thaGVhZCBjaGFuZ2UgaXMgYSBzaGlmdC4gIEFuIGV4YW1wbGUKKyAgIG9mIGJvdGggY2FzZXMgaXMgc3ludGF4IGVycm9yIHJlY292ZXJ5LiAgVGhhdCBpcywgYSBzeW50YXggZXJyb3IKKyAgIG9jY3VycyB3aGVuIHRoZSBsb29rYWhlYWQgaXMgc3ludGFjdGljYWxseSBlcnJvbmVvdXMgZm9yIHRoZQorICAgY3VycmVudGx5IGVzdGFibGlzaGVkIGluaXRpYWwgY29udGV4dCwgc28gZXJyb3IgcmVjb3ZlcnkgbWFuaXB1bGF0ZXMKKyAgIHRoZSBwYXJzZXIgc3RhY2tzIHRvIHRyeSB0byBmaW5kIGEgbmV3IGluaXRpYWwgY29udGV4dCBpbiB3aGljaCB0aGUKKyAgIGN1cnJlbnQgbG9va2FoZWFkIGlzIHN5bnRhY3RpY2FsbHkgYWNjZXB0YWJsZS4gIElmIGl0IGZhaWxzIHRvIGZpbmQKKyAgIHN1Y2ggYSBjb250ZXh0LCBpdCBkaXNjYXJkcyB0aGUgbG9va2FoZWFkLiAgKi8KKyNpZiBdYjRfYXBpX1BSRUZJWFtERUJVRworIyBkZWZpbmUgWVlfTEFDX0RJU0NBUkQoRXZlbnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmICh5eV9sYWNfZXN0YWJsaXNoZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiTEFDOiBpbml0aWFsIGNvbnRleHQgZGlzY2FyZGVkIGR1ZSB0byAiICAgICAgXAorICAgICAgICAgICAgICAgICAgIEV2ZW50ICJcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHl5X2xhY19lc3RhYmxpc2hlZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoWVlJRCAoMCkpCisjZWxzZQorIyBkZWZpbmUgWVlfTEFDX0RJU0NBUkQoRXZlbnQpIHl5X2xhY19lc3RhYmxpc2hlZCA9IDAKICNlbmRpZgogCi0MCisvKiBHaXZlbiB0aGUgc3RhY2sgd2hvc2UgdG9wIGlzICpZWVNTUCwgcmV0dXJuIDAgaWZmIFlZVE9LRU4gY2FuCisgICBldmVudHVhbGx5IChhZnRlciBwZXJoYXBzIHNvbWUgcmVkdWN0aW9ucykgYmUgc2hpZnRlZCwgcmV0dXJuIDEgaWYKKyAgIG5vdCwgb3IgcmV0dXJuIDIgaWYgbWVtb3J5IGlzIGV4aGF1c3RlZC4gIEFzIHByZWNvbmRpdGlvbnMgYW5kCisgICBwb3N0Y29uZGl0aW9uczogKllZRVNfQ0FQQUNJVFkgaXMgdGhlIGFsbG9jYXRlZCBzaXplIG9mIHRoZSBhcnJheSB0bworICAgd2hpY2ggKllZRVMgcG9pbnRzLCBhbmQgZWl0aGVyICpZWUVTID0gWVlFU0Egb3IgKllZRVMgcG9pbnRzIHRvIGFuCisgICBhcnJheSBhbGxvY2F0ZWQgd2l0aCBZWVNUQUNLX0FMTE9DLiAgeXlfbGFjIG1heSBvdmVyd3JpdGUgdGhlCisgICBjb250ZW50cyBvZiBlaXRoZXIgYXJyYXksIGFsdGVyICpZWUVTIGFuZCAqWVlFU19DQVBBQ0lUWSwgYW5kIGZyZWUKKyAgIGFueSBvbGQgKllZRVMgb3RoZXIgdGhhbiBZWUVTQS4gICovCitzdGF0aWMgaW50Cit5eV9sYWMgKHl5dHlwZV9pbnQxNiAqeXllc2EsIHl5dHlwZV9pbnQxNiAqKnl5ZXMsCisgICAgICAgIFlZU0laRV9UICp5eWVzX2NhcGFjaXR5LCB5eXR5cGVfaW50MTYgKnl5c3NwLCBpbnQgeXl0b2tlbikKK3sKKyAgeXl0eXBlX2ludDE2ICp5eWVzX3ByZXYgPSB5eXNzcDsKKyAgeXl0eXBlX2ludDE2ICp5eWVzcCA9IHl5ZXNfcHJldjsKKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiTEFDOiBjaGVja2luZyBsb29rYWhlYWQgJXM6IiwgeXl0bmFtZVt5eXRva2VuXSkpOworICBpZiAoeXl0b2tlbiA9PSBZWVVOREVGVE9LKQorICAgIHsKKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIiBBbHdheXMgRXJyXG4iKSk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGludCB5eXJ1bGUgPSB5eXBhY3RbKnl5ZXNwXTsKKyAgICAgIGlmICh5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdCAoeXlydWxlKQorICAgICAgICAgIHx8ICh5eXJ1bGUgKz0geXl0b2tlbikgPCAwIHx8IFlZTEFTVCA8IHl5cnVsZQorICAgICAgICAgIHx8IHl5Y2hlY2tbeXlydWxlXSAhPSB5eXRva2VuKQorICAgICAgICB7CisgICAgICAgICAgeXlydWxlID0geXlkZWZhY3RbKnl5ZXNwXTsKKyAgICAgICAgICBpZiAoeXlydWxlID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIiBFcnJcbiIpKTsKKyAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHl5cnVsZSA9IHl5dGFibGVbeXlydWxlXTsKKyAgICAgICAgICBpZiAoeXl0YWJsZV92YWx1ZV9pc19lcnJvciAoeXlydWxlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiIEVyclxuIikpOworICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoMCA8IHl5cnVsZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiIFMlZFxuIiwgeXlydWxlKSk7CisgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgIHl5cnVsZSA9IC15eXJ1bGU7CisgICAgICAgIH0KKyAgICAgIHsKKyAgICAgICAgWVlTSVpFX1QgeXlsZW4gPSB5eXIyW3l5cnVsZV07CisgICAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIiBSJWQiLCB5eXJ1bGUgLSAxKSk7CisgICAgICAgIGlmICh5eWVzcCAhPSB5eWVzX3ByZXYpCisgICAgICAgICAgeworICAgICAgICAgICAgWVlTSVpFX1QgeXlzaXplID0geXllc3AgLSAqeXllcyArIDE7CisgICAgICAgICAgICBpZiAoeXlsZW4gPCB5eXNpemUpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB5eWVzcCAtPSB5eWxlbjsKKyAgICAgICAgICAgICAgICB5eWxlbiA9IDA7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHl5bGVuIC09IHl5c2l6ZTsKKyAgICAgICAgICAgICAgICB5eWVzcCA9IHl5ZXNfcHJldjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgaWYgKHl5bGVuKQorICAgICAgICAgIHl5ZXNwID0geXllc19wcmV2IC09IHl5bGVuOworICAgICAgfQorICAgICAgeworICAgICAgICBpbnQgeXlzdGF0ZTsKKyAgICAgICAgeworICAgICAgICAgIGludCB5eWxocyA9IHl5cjFbeXlydWxlXSAtIFlZTlRPS0VOUzsKKyAgICAgICAgICB5eXN0YXRlID0geXlwZ290b1t5eWxoc10gKyAqeXllc3A7CisgICAgICAgICAgaWYgKHl5c3RhdGUgPCAwIHx8IFlZTEFTVCA8IHl5c3RhdGUKKyAgICAgICAgICAgICAgfHwgeXljaGVja1t5eXN0YXRlXSAhPSAqeXllc3ApCisgICAgICAgICAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5bGhzXTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB5eXN0YXRlID0geXl0YWJsZVt5eXN0YXRlXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoeXllc3AgPT0geXllc19wcmV2KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHl5ZXNwID0gKnl5ZXM7CisgICAgICAgICAgICAqeXllc3AgPSB5eXN0YXRlOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh5eV9sYWNfc3RhY2tfcmVhbGxvYyAoeXllc19jYXBhY2l0eSwgMSwKKyNpZiBdYjRfYXBpX1BSRUZJWFtERUJVRworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICgiLCAiKSIsCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXllcywgeXllc2EsICZ5eWVzcCwgeXllc19wcmV2KSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlxuIikpOworICAgICAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAqKyt5eWVzcCA9IHl5c3RhdGU7CisgICAgICAgICAgfQorICAgICAgICBZWURQUklOVEYgKChzdGRlcnIsICIgRyVkIiwgeXlzdGF0ZSkpOworICAgICAgfQorICAgIH0KK31dXSlbCisKIAogI2lmIFlZRVJST1JfVkVSQk9TRQogCkBAIC04MzUsMTUwICsxMjMwLDI4MyBAQAogfQogIyBlbmRpZgogCi0vKiBDb3B5IGludG8gWVlSRVNVTFQgYW4gZXJyb3IgbWVzc2FnZSBhYm91dCB0aGUgdW5leHBlY3RlZCB0b2tlbgotICAgWVlDSEFSIHdoaWxlIGluIHN0YXRlIFlZU1RBVEUuICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQsCi0gICBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4gIElmIFlZUkVTVUxUIGlzIG51bGwsIGRvIG5vdAotICAgY29weSBhbnl0aGluZzsganVzdCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlCi0gICBjb3BpZWQuICBBcyBhIHNwZWNpYWwgY2FzZSwgcmV0dXJuIDAgaWYgYW4gb3JkaW5hcnkgInN5bnRheCBlcnJvciIKLSAgIG1lc3NhZ2Ugd2lsbCBkby4gIFJldHVybiBZWVNJWkVfTUFYSU1VTSBpZiBvdmVyZmxvdyBvY2N1cnMgZHVyaW5nCi0gICBzaXplIGNhbGN1bGF0aW9uLiAgKi8KLXN0YXRpYyBZWVNJWkVfVAoteXlzeW50YXhfZXJyb3IgKGNoYXIgKnl5cmVzdWx0LCBpbnQgeXlzdGF0ZSwgaW50IHl5Y2hhcikKKy8qIENvcHkgaW50byAqWVlNU0csIHdoaWNoIGlzIG9mIHNpemUgKllZTVNHX0FMTE9DLCBhbiBlcnJvciBtZXNzYWdlCisgICBhYm91dCB0aGUgdW5leHBlY3RlZCB0b2tlbiBZWVRPS0VOIGZvciB0aGUgc3RhdGUgc3RhY2sgd2hvc2UgdG9wIGlzCisgICBZWVNTUC5dYjRfbGFjX2lmKFtbICBJbiBvcmRlciB0byBzZWUgaWYgYSBwYXJ0aWN1bGFyIHRva2VuIFQgaXMgYQorICAgdmFsaWQgbG9vYWtoZWFkLCBpbnZva2UgeXlfbGFjIChZWUVTQSwgWVlFUywgWVlFU19DQVBBQ0lUWSwgWVlTU1AsIFQpLl1dKVsKKworICAgUmV0dXJuIDAgaWYgKllZTVNHIHdhcyBzdWNjZXNzZnVsbHkgd3JpdHRlbi4gIFJldHVybiAxIGlmICpZWU1TRyBpcworICAgbm90IGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBtZXNzYWdlLiAgSW4gdGhhdCBjYXNlLCBhbHNvIHNldAorICAgKllZTVNHX0FMTE9DIHRvIHRoZSByZXF1aXJlZCBudW1iZXIgb2YgYnl0ZXMuICBSZXR1cm4gMiBpZiB0aGUKKyAgIHJlcXVpcmVkIG51bWJlciBvZiBieXRlcyBpcyB0b28gbGFyZ2UgdG8gc3RvcmVdYjRfbGFjX2lmKFtbIG9yIGlmCisgICB5eV9sYWMgcmV0dXJuZWQgMl1dKVsuICAqLworc3RhdGljIGludAoreXlzeW50YXhfZXJyb3IgKFlZU0laRV9UICp5eW1zZ19hbGxvYywgY2hhciAqKnl5bXNnLAorICAgICAgICAgICAgICAgIF1iNF9sYWNfaWYoW1t5eXR5cGVfaW50MTYgKnl5ZXNhLCB5eXR5cGVfaW50MTYgKip5eWVzLAorICAgICAgICAgICAgICAgIFlZU0laRV9UICp5eWVzX2NhcGFjaXR5LCBdXSlbeXl0eXBlX2ludDE2ICp5eXNzcCwgaW50IHl5dG9rZW4pCiB7Ci0gIGludCB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgIFlZU0laRV9UIHl5c2l6ZTAgPSB5eXRuYW1lcnIgKFlZX05VTEwsIHl5dG5hbWVbeXl0b2tlbl0pOworICBZWVNJWkVfVCB5eXNpemUgPSB5eXNpemUwOworICBlbnVtIHsgWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSA9IDUgfTsKKyAgLyogSW50ZXJuYXRpb25hbGl6ZWQgZm9ybWF0IHN0cmluZy4gKi8KKyAgY29uc3QgY2hhciAqeXlmb3JtYXQgPSBZWV9OVUxMOworICAvKiBBcmd1bWVudHMgb2YgeXlmb3JtYXQuICovCisgIGNoYXIgY29uc3QgKnl5YXJnW1lZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU1dOworICAvKiBOdW1iZXIgb2YgcmVwb3J0ZWQgdG9rZW5zIChvbmUgZm9yIHRoZSAidW5leHBlY3RlZCIsIG9uZSBwZXIKKyAgICAgImV4cGVjdGVkIikuICovCisgIGludCB5eWNvdW50ID0gMDsKIAotICBpZiAoISAoWVlQQUNUX05JTkYgPCB5eW4gJiYgeXluIDw9IFlZTEFTVCkpCi0gICAgcmV0dXJuIDA7Ci0gIGVsc2UKKyAgLyogVGhlcmUgYXJlIG1hbnkgcG9zc2liaWxpdGllcyBoZXJlIHRvIGNvbnNpZGVyOgorICAgICAtIEFzc3VtZSBZWUZBSUwgaXMgbm90IHVzZWQuICBJdCdzIHRvbyBmbGF3ZWQgdG8gY29uc2lkZXIuICBTZWUKKyAgICAgICA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwOS0xMi9tc2cwMDAyNC5odG1sPgorICAgICAgIGZvciBkZXRhaWxzLiAgWVlFUlJPUiBpcyBmaW5lIGFzIGl0IGRvZXMgbm90IGludm9rZSB0aGlzCisgICAgICAgZnVuY3Rpb24uCisgICAgIC0gSWYgdGhpcyBzdGF0ZSBpcyBhIGNvbnNpc3RlbnQgc3RhdGUgd2l0aCBhIGRlZmF1bHQgYWN0aW9uLCB0aGVuCisgICAgICAgdGhlIG9ubHkgd2F5IHRoaXMgZnVuY3Rpb24gd2FzIGludm9rZWQgaXMgaWYgdGhlIGRlZmF1bHQgYWN0aW9uCisgICAgICAgaXMgYW4gZXJyb3IgYWN0aW9uLiAgSW4gdGhhdCBjYXNlLCBkb24ndCBjaGVjayBmb3IgZXhwZWN0ZWQKKyAgICAgICB0b2tlbnMgYmVjYXVzZSB0aGVyZSBhcmUgbm9uZS4KKyAgICAgLSBUaGUgb25seSB3YXkgdGhlcmUgY2FuIGJlIG5vIGxvb2thaGVhZCBwcmVzZW50IChpbiB5eWNoYXIpIGlzIGlmCisgICAgICAgdGhpcyBzdGF0ZSBpcyBhIGNvbnNpc3RlbnQgc3RhdGUgd2l0aCBhIGRlZmF1bHQgYWN0aW9uLiAgVGh1cywKKyAgICAgICBkZXRlY3RpbmcgdGhlIGFic2VuY2Ugb2YgYSBsb29rYWhlYWQgaXMgc3VmZmljaWVudCB0byBkZXRlcm1pbmUKKyAgICAgICB0aGF0IHRoZXJlIGlzIG5vIHVuZXhwZWN0ZWQgb3IgZXhwZWN0ZWQgdG9rZW4gdG8gcmVwb3J0LiAgSW4gdGhhdAorICAgICAgIGNhc2UsIGp1c3QgcmVwb3J0IGEgc2ltcGxlICJzeW50YXggZXJyb3IiLgorICAgICAtIERvbid0IGFzc3VtZSB0aGVyZSBpc24ndCBhIGxvb2thaGVhZCBqdXN0IGJlY2F1c2UgdGhpcyBzdGF0ZSBpcyBhCisgICAgICAgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24uICBUaGVyZSBtaWdodCBoYXZlIGJlZW4gYQorICAgICAgIHByZXZpb3VzIGluY29uc2lzdGVudCBzdGF0ZSwgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgbm9uLWRlZmF1bHQKKyAgICAgICBhY3Rpb24sIG9yIHVzZXIgc2VtYW50aWMgYWN0aW9uIHRoYXQgbWFuaXB1bGF0ZWQgeXljaGFyLl1iNF9sYWNfaWYoW1sKKyAgICAgICBJbiB0aGUgZmlyc3QgdHdvIGNhc2VzLCBpdCBtaWdodCBhcHBlYXIgdGhhdCB0aGUgY3VycmVudCBzeW50YXgKKyAgICAgICBlcnJvciBzaG91bGQgaGF2ZSBiZWVuIGRldGVjdGVkIGluIHRoZSBwcmV2aW91cyBzdGF0ZSB3aGVuIHl5X2xhYworICAgICAgIHdhcyBpbnZva2VkLiAgSG93ZXZlciwgYXQgdGhhdCB0aW1lLCB0aGVyZSBtaWdodCBoYXZlIGJlZW4gYQorICAgICAgIGRpZmZlcmVudCBzeW50YXggZXJyb3IgdGhhdCBkaXNjYXJkZWQgYSBkaWZmZXJlbnQgaW5pdGlhbCBjb250ZXh0CisgICAgICAgZHVyaW5nIGVycm9yIHJlY292ZXJ5LCBsZWF2aW5nIGJlaGluZCB0aGUgY3VycmVudCBsb29rYWhlYWQuXV0sIFtbCisgICAgIC0gT2YgY291cnNlLCB0aGUgZXhwZWN0ZWQgdG9rZW4gbGlzdCBkZXBlbmRzIG9uIHN0YXRlcyB0byBoYXZlCisgICAgICAgY29ycmVjdCBsb29rYWhlYWQgaW5mb3JtYXRpb24sIGFuZCBpdCBkZXBlbmRzIG9uIHRoZSBwYXJzZXIgbm90CisgICAgICAgdG8gcGVyZm9ybSBleHRyYSByZWR1Y3Rpb25zIGFmdGVyIGZldGNoaW5nIGEgbG9va2FoZWFkIGZyb20gdGhlCisgICAgICAgc2Nhbm5lciBhbmQgYmVmb3JlIGRldGVjdGluZyBhIHN5bnRheCBlcnJvci4gIFRodXMsIHN0YXRlIG1lcmdpbmcKKyAgICAgICAoZnJvbSBMQUxSIG9yIElFTFIpIGFuZCBkZWZhdWx0IHJlZHVjdGlvbnMgY29ycnVwdCB0aGUgZXhwZWN0ZWQKKyAgICAgICB0b2tlbiBsaXN0LiAgSG93ZXZlciwgdGhlIGxpc3QgaXMgY29ycmVjdCBmb3IgY2Fub25pY2FsIExSIHdpdGgKKyAgICAgICBvbmUgZXhjZXB0aW9uOiBpdCB3aWxsIHN0aWxsIGNvbnRhaW4gYW55IHRva2VuIHRoYXQgd2lsbCBub3QgYmUKKyAgICAgICBhY2NlcHRlZCBkdWUgdG8gYW4gZXJyb3IgYWN0aW9uIGluIGEgbGF0ZXIgc3RhdGUuXV0pWworICAqLworICBpZiAoeXl0b2tlbiAhPSBZWUVNUFRZKQogICAgIHsKLSAgICAgIGludCB5eXR5cGUgPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKLSAgICAgIFlZU0laRV9UIHl5c2l6ZTAgPSB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl0eXBlXSk7Ci0gICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNpemUwOwotICAgICAgWVlTSVpFX1QgeXlzaXplMTsKLSAgICAgIGludCB5eXNpemVfb3ZlcmZsb3cgPSAwOwotICAgICAgZW51bSB7IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0gPSA1IH07Ci0gICAgICBjaGFyIGNvbnN0ICp5eWFyZ1tZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNXTsKLSAgICAgIGludCB5eXg7CisgICAgICBpbnQgeXluID0geXlwYWN0Wyp5eXNzcF07XWI0X2xhY19pZihbWworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiQ29uc3RydWN0aW5nIHN5bnRheCBlcnJvciBtZXNzYWdlXG4iKSk7XV0pWworICAgICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVbeXl0b2tlbl07CisgICAgICBpZiAoIXl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQorICAgICAgICB7XWI0X2xhY19pZihbXSwgW1sKKyAgICAgICAgICAvKiBTdGFydCBZWVggYXQgLVlZTiBpZiBuZWdhdGl2ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluCisgICAgICAgICAgICAgWVlDSEVDSy4gIEluIG90aGVyIHdvcmRzLCBza2lwIHRoZSBmaXJzdCAtWVlOIGFjdGlvbnMgZm9yCisgICAgICAgICAgICAgdGhpcyBzdGF0ZSBiZWNhdXNlIHRoZXkgYXJlIGRlZmF1bHQgYWN0aW9ucy4gICovCisgICAgICAgICAgaW50IHl5eGJlZ2luID0geXluIDwgMCA/IC15eW4gOiAwOworICAgICAgICAgIC8qIFN0YXkgd2l0aGluIGJvdW5kcyBvZiBib3RoIHl5Y2hlY2sgYW5kIHl5dG5hbWUuICAqLworICAgICAgICAgIGludCB5eWNoZWNrbGltID0gWVlMQVNUIC0geXluICsgMTsKKyAgICAgICAgICBpbnQgeXl4ZW5kID0geXljaGVja2xpbSA8IFlZTlRPS0VOUyA/IHl5Y2hlY2tsaW0gOiBZWU5UT0tFTlM7XV0pWworICAgICAgICAgIGludCB5eXg7XWI0X2xhY19pZihbWwogCi0jIGlmIDAKLSAgICAgIC8qIFRoaXMgaXMgc28geGdldHRleHQgc2VlcyB0aGUgdHJhbnNsYXRhYmxlIGZvcm1hdHMgdGhhdCBhcmUKLQkgY29uc3RydWN0ZWQgb24gdGhlIGZseS4gICovCi0gICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIpOwotIyBlbmRpZgotICAgICAgY2hhciAqeXlmbXQ7Ci0gICAgICBjaGFyIGNvbnN0ICp5eWY7Ci0gICAgICBzdGF0aWMgY2hhciBjb25zdCB5eXVuZXhwZWN0ZWRbXSA9ICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiOwotICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXlleHBlY3RpbmdbXSA9ICIsIGV4cGVjdGluZyAlcyI7Ci0gICAgICBzdGF0aWMgY2hhciBjb25zdCB5eW9yW10gPSAiIG9yICVzIjsKLSAgICAgIGNoYXIgeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZAotCQkgICAgKyBzaXplb2YgeXlleHBlY3RpbmcgLSAxCi0JCSAgICArICgoWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSAtIDIpCi0JCSAgICAgICAqIChzaXplb2YgeXlvciAtIDEpKV07Ci0gICAgICBjaGFyIGNvbnN0ICp5eXByZWZpeCA9IHl5ZXhwZWN0aW5nOworICAgICAgICAgIGZvciAoeXl4ID0gMDsgeXl4IDwgWVlOVE9LRU5TOyArK3l5eCkKKyAgICAgICAgICAgIGlmICh5eXggIT0gWVlURVJST1IgJiYgeXl4ICE9IFlZVU5ERUZUT0spCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBpbnQgeXlfbGFjX3N0YXR1cyA9IHl5X2xhYyAoeXllc2EsIHl5ZXMsIHl5ZXNfY2FwYWNpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlzc3AsIHl5eCk7CisgICAgICAgICAgICAgICAgICBpZiAoeXlfbGFjX3N0YXR1cyA9PSAyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgICAgICAgICAgIGlmICh5eV9sYWNfc3RhdHVzID09IDEpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH1dXSwgW1sKIAotICAgICAgLyogU3RhcnQgWVlYIGF0IC1ZWU4gaWYgbmVnYXRpdmUgdG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbgotCSBZWUNIRUNLLiAgKi8KLSAgICAgIGludCB5eXhiZWdpbiA9IHl5biA8IDAgPyAteXluIDogMDsKLQotICAgICAgLyogU3RheSB3aXRoaW4gYm91bmRzIG9mIGJvdGggeXljaGVjayBhbmQgeXl0bmFtZS4gICovCi0gICAgICBpbnQgeXljaGVja2xpbSA9IFlZTEFTVCAtIHl5biArIDE7Ci0gICAgICBpbnQgeXl4ZW5kID0geXljaGVja2xpbSA8IFlZTlRPS0VOUyA/IHl5Y2hlY2tsaW0gOiBZWU5UT0tFTlM7Ci0gICAgICBpbnQgeXljb3VudCA9IDE7Ci0KLSAgICAgIHl5YXJnWzBdID0geXl0bmFtZVt5eXR5cGVdOwotICAgICAgeXlmbXQgPSB5eXN0cGNweSAoeXlmb3JtYXQsIHl5dW5leHBlY3RlZCk7Ci0KLSAgICAgIGZvciAoeXl4ID0geXl4YmVnaW47IHl5eCA8IHl5eGVuZDsgKyt5eXgpCi0JaWYgKHl5Y2hlY2tbeXl4ICsgeXluXSA9PSB5eXggJiYgeXl4ICE9IFlZVEVSUk9SKQotCSAgewotCSAgICBpZiAoeXljb3VudCA9PSBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNKQotCSAgICAgIHsKLQkJeXljb3VudCA9IDE7Ci0JCXl5c2l6ZSA9IHl5c2l6ZTA7Ci0JCXl5Zm9ybWF0W3NpemVvZiB5eXVuZXhwZWN0ZWQgLSAxXSA9ICdcMCc7Ci0JCWJyZWFrOwotCSAgICAgIH0KLQkgICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVbeXl4XTsKLQkgICAgeXlzaXplMSA9IHl5c2l6ZSArIHl5dG5hbWVyciAoMCwgeXl0bmFtZVt5eXhdKTsKLQkgICAgeXlzaXplX292ZXJmbG93IHw9ICh5eXNpemUxIDwgeXlzaXplKTsKLQkgICAgeXlzaXplID0geXlzaXplMTsKLQkgICAgeXlmbXQgPSB5eXN0cGNweSAoeXlmbXQsIHl5cHJlZml4KTsKLQkgICAgeXlwcmVmaXggPSB5eW9yOwotCSAgfQotCi0gICAgICB5eWYgPSBZWV8oeXlmb3JtYXQpOwotICAgICAgeXlzaXplMSA9IHl5c2l6ZSArIHl5c3RybGVuICh5eWYpOwotICAgICAgeXlzaXplX292ZXJmbG93IHw9ICh5eXNpemUxIDwgeXlzaXplKTsKLSAgICAgIHl5c2l6ZSA9IHl5c2l6ZTE7Ci0KLSAgICAgIGlmICh5eXNpemVfb3ZlcmZsb3cpCi0JcmV0dXJuIFlZU0laRV9NQVhJTVVNOwotCi0gICAgICBpZiAoeXlyZXN1bHQpCi0JewotCSAgLyogQXZvaWQgc3ByaW50ZiwgYXMgdGhhdCBpbmZyaW5nZXMgb24gdGhlIHVzZXIncyBuYW1lIHNwYWNlLgotCSAgICAgRG9uJ3QgaGF2ZSB1bmRlZmluZWQgYmVoYXZpb3IgZXZlbiBpZiB0aGUgdHJhbnNsYXRpb24KLQkgICAgIHByb2R1Y2VkIGEgc3RyaW5nIHdpdGggdGhlIHdyb25nIG51bWJlciBvZiAiJXMicy4gICovCi0JICBjaGFyICp5eXAgPSB5eXJlc3VsdDsKLQkgIGludCB5eWkgPSAwOwotCSAgd2hpbGUgKCgqeXlwID0gKnl5ZikgIT0gJ1wwJykKLQkgICAgewotCSAgICAgIGlmICgqeXlwID09ICclJyAmJiB5eWZbMV0gPT0gJ3MnICYmIHl5aSA8IHl5Y291bnQpCi0JCXsKLQkJICB5eXAgKz0geXl0bmFtZXJyICh5eXAsIHl5YXJnW3l5aSsrXSk7Ci0JCSAgeXlmICs9IDI7Ci0JCX0KLQkgICAgICBlbHNlCi0JCXsKLQkJICB5eXArKzsKLQkJICB5eWYrKzsKLQkJfQotCSAgICB9Ci0JfQotICAgICAgcmV0dXJuIHl5c2l6ZTsKKyAgICAgICAgICBmb3IgKHl5eCA9IHl5eGJlZ2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQorICAgICAgICAgICAgaWYgKHl5Y2hlY2tbeXl4ICsgeXluXSA9PSB5eXggJiYgeXl4ICE9IFlZVEVSUk9SCisgICAgICAgICAgICAgICAgJiYgIXl5dGFibGVfdmFsdWVfaXNfZXJyb3IgKHl5dGFibGVbeXl4ICsgeXluXSkpCisgICAgICAgICAgICAgIHtdXSlbCisgICAgICAgICAgICAgICAgaWYgKHl5Y291bnQgPT0gWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgeXljb3VudCA9IDE7CisgICAgICAgICAgICAgICAgICAgIHl5c2l6ZSA9IHl5c2l6ZTA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHl5YXJnW3l5Y291bnQrK10gPSB5eXRuYW1lW3l5eF07CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgWVlTSVpFX1QgeXlzaXplMSA9IHl5c2l6ZSArIHl5dG5hbWVyciAoWVlfTlVMTCwgeXl0bmFtZVt5eXhdKTsKKyAgICAgICAgICAgICAgICAgIGlmICghICh5eXNpemUgPD0geXlzaXplMQorICAgICAgICAgICAgICAgICAgICAgICAgICYmIHl5c2l6ZTEgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgICAgICAgICAgICB5eXNpemUgPSB5eXNpemUxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICB9XWI0X2xhY19pZihbWworIyBpZiBdYjRfYXBpX1BSRUZJWFtERUJVRworICAgICAgZWxzZSBpZiAoeXlkZWJ1ZykKKyAgICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJObyBleHBlY3RlZCB0b2tlbnMuXG4iKTsKKyMgZW5kaWZdXSlbCiAgICAgfQorCisgIHN3aXRjaCAoeXljb3VudCkKKyAgICB7CisjIGRlZmluZSBZWUNBU0VfKE4sIFMpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGNhc2UgTjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWZvcm1hdCA9IFM7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBicmVhaworICAgICAgWVlDQVNFXygwLCBZWV8oInN5bnRheCBlcnJvciIpKTsKKyAgICAgIFlZQ0FTRV8oMSwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiKSk7CisgICAgICBZWUNBU0VfKDIsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMiKSk7CisgICAgICBZWUNBU0VfKDMsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiKSk7CisgICAgICBZWUNBU0VfKDQsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiKSk7CisgICAgICBZWUNBU0VfKDUsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiKSk7CisjIHVuZGVmIFlZQ0FTRV8KKyAgICB9CisKKyAgeworICAgIFlZU0laRV9UIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXN0cmxlbiAoeXlmb3JtYXQpOworICAgIGlmICghICh5eXNpemUgPD0geXlzaXplMSAmJiB5eXNpemUxIDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpCisgICAgICByZXR1cm4gMjsKKyAgICB5eXNpemUgPSB5eXNpemUxOworICB9CisKKyAgaWYgKCp5eW1zZ19hbGxvYyA8IHl5c2l6ZSkKKyAgICB7CisgICAgICAqeXltc2dfYWxsb2MgPSAyICogeXlzaXplOworICAgICAgaWYgKCEgKHl5c2l6ZSA8PSAqeXltc2dfYWxsb2MKKyAgICAgICAgICAgICAmJiAqeXltc2dfYWxsb2MgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkKKyAgICAgICAgKnl5bXNnX2FsbG9jID0gWVlTVEFDS19BTExPQ19NQVhJTVVNOworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgIC8qIEF2b2lkIHNwcmludGYsIGFzIHRoYXQgaW5mcmluZ2VzIG9uIHRoZSB1c2VyJ3MgbmFtZSBzcGFjZS4KKyAgICAgRG9uJ3QgaGF2ZSB1bmRlZmluZWQgYmVoYXZpb3IgZXZlbiBpZiB0aGUgdHJhbnNsYXRpb24KKyAgICAgcHJvZHVjZWQgYSBzdHJpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mICIlcyJzLiAgKi8KKyAgeworICAgIGNoYXIgKnl5cCA9ICp5eW1zZzsKKyAgICBpbnQgeXlpID0gMDsKKyAgICB3aGlsZSAoKCp5eXAgPSAqeXlmb3JtYXQpICE9ICdcMCcpCisgICAgICBpZiAoKnl5cCA9PSAnJScgJiYgeXlmb3JtYXRbMV0gPT0gJ3MnICYmIHl5aSA8IHl5Y291bnQpCisgICAgICAgIHsKKyAgICAgICAgICB5eXAgKz0geXl0bmFtZXJyICh5eXAsIHl5YXJnW3l5aSsrXSk7CisgICAgICAgICAgeXlmb3JtYXQgKz0gMjsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgeXlwKys7CisgICAgICAgICAgeXlmb3JtYXQrKzsKKyAgICAgICAgfQorICB9CisgIHJldHVybiAwOwogfQogI2VuZGlmIC8qIFlZRVJST1JfVkVSQk9TRSAqLwotDAogCiBdYjRfeXlkZXN0cnVjdF9nZW5lcmF0ZShbYjRfY19mdW5jdGlvbl9kZWZdKVsKLQwKIAotLyogUHJldmVudCB3YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KK11iNF9wdXJlX2lmKFtdLCBbCiAKLSNpZmRlZiBZWVBBUlNFX1BBUkFNCi1dYjRfY19mdW5jdGlvbl9kZWNsKFt5eXBhcnNlXSwgW2ludF0sCi0gICBbW3ZvaWQgKllZUEFSU0VfUEFSQU1dLCBbWVlQQVJTRV9QQVJBTV1dKVsKLSNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLwotXWI0X2NfZnVuY3Rpb25fZGVjbChbeXlwYXJzZV0sIFtpbnRdLCBiNF9wYXJzZV9wYXJhbSlbCi0jZW5kaWYgLyogISBZWVBBUlNFX1BBUkFNICovCitiNF9kZWNsYXJlX3NjYW5uZXJfY29tbXVuaWNhdGlvbl92YXJpYWJsZXNdKVtdYjRfcHVzaF9pZihbWworCitzdHJ1Y3QgeXlwc3RhdGUKKyAge11iNF9kZWNsYXJlX3BhcnNlcl9zdGF0ZV92YXJpYWJsZXNbCisgICAgLyogVXNlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB0aGlzIGluc3RhbmNlIGhhcworICAgICAgIGJlZW4gdXNlZC4gICovCisgICAgaW50IHl5bmV3OworICB9O11iNF9wdXJlX2lmKFtdLCBbWworCitzdGF0aWMgY2hhciB5eXBzdGF0ZV9hbGxvY2F0ZWQgPSAwO11dKWI0X3B1bGxfaWYoWworCitiNF9jX2Z1bmN0aW9uX2RlZihbW3l5cGFyc2VdXSwgW1tpbnRdXSwgYjRfcGFyc2VfcGFyYW0pWworeworICByZXR1cm4geXlwdWxsX3BhcnNlIChZWV9OVUxMXW00X2lmc2V0KFtiNF9wYXJzZV9wYXJhbV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1ssIF1iNF9jX2FyZ3MoYjRfcGFyc2VfcGFyYW0pXSlbKTsKK30KKworXWI0X2NfZnVuY3Rpb25fZGVmKFtbeXlwdWxsX3BhcnNlXV0sIFtbaW50XV0sCisgIFtbW3l5cHN0YXRlICp5eXBzXV0sIFtbeXlwc11dXW00X2lmc2V0KFtiNF9wYXJzZV9wYXJhbV0sIFssCisgIGI0X3BhcnNlX3BhcmFtXSkpWworeworICBpbnQgeXlzdGF0dXM7CisgIHl5cHN0YXRlICp5eXBzX2xvY2FsO11iNF9wdXJlX2lmKFtbCisgIGludCB5eWNoYXI7CisgIFlZU1RZUEUgeXlsdmFsO11iNF9sb2NhdGlvbnNfaWYoW1sKKyAgc3RhdGljIFlZTFRZUEUgeXlsb2NfZGVmYXVsdF1bXWI0X3l5bG9jX2RlZmF1bHRbOworICBZWUxUWVBFIHl5bGxvYyA9IHl5bG9jX2RlZmF1bHQ7XV0pXSlbCisgIGlmICh5eXBzKQorICAgIHl5cHNfbG9jYWwgPSB5eXBzOworICBlbHNlCisgICAgeworICAgICAgeXlwc19sb2NhbCA9IHl5cHN0YXRlX25ldyAoKTsKKyAgICAgIGlmICgheXlwc19sb2NhbCkKKyAgICAgICAge11iNF9wdXJlX2lmKFtbCisgICAgICAgICAgeXllcnJvciAoXWI0X3l5ZXJyb3JfYXJnc1tZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7XV0sIFtbCisgICAgICAgICAgaWYgKCF5eXBzdGF0ZV9hbGxvY2F0ZWQpCisgICAgICAgICAgICB5eWVycm9yIChdYjRfeXllcnJvcl9hcmdzW1lZXygibWVtb3J5IGV4aGF1c3RlZCIpKTtdXSlbCisgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIH0KKyAgICB9CisgIGRvIHsKKyAgICB5eWNoYXIgPSBZWUxFWDsKKyAgICB5eXN0YXR1cyA9CisgICAgICB5eXB1c2hfcGFyc2UgKHl5cHNfbG9jYWxdYjRfcHVyZV9pZihbWywgeXljaGFyLCAmeXlsdmFsXWI0X2xvY2F0aW9uc19pZihbWywgJnl5bGxvY11dKV0pbTRfaWZzZXQoW2I0X3BhcnNlX3BhcmFtXSwgWywgYjRfY19hcmdzKGI0X3BhcnNlX3BhcmFtKV0pWyk7CisgIH0gd2hpbGUgKHl5c3RhdHVzID09IFlZUFVTSF9NT1JFKTsKKyAgaWYgKCF5eXBzKQorICAgIHl5cHN0YXRlX2RlbGV0ZSAoeXlwc19sb2NhbCk7CisgIHJldHVybiB5eXN0YXR1czsKK31dXSlbCisKKy8qIEluaXRpYWxpemUgdGhlIHBhcnNlciBkYXRhIHN0cnVjdHVyZS4gICovCitdYjRfY19mdW5jdGlvbl9kZWYoW1t5eXBzdGF0ZV9uZXddXSwgW1t5eXBzdGF0ZSAqXV0pWworeworICB5eXBzdGF0ZSAqeXlwcztdYjRfcHVyZV9pZihbXSwgW1sKKyAgaWYgKHl5cHN0YXRlX2FsbG9jYXRlZCkKKyAgICByZXR1cm4gWVlfTlVMTDtdXSlbCisgIHl5cHMgPSAoeXlwc3RhdGUgKikgbWFsbG9jIChzaXplb2YgKnl5cHMpOworICBpZiAoIXl5cHMpCisgICAgcmV0dXJuIFlZX05VTEw7CisgIHl5cHMtPnl5bmV3ID0gMTtdYjRfcHVyZV9pZihbXSwgW1sKKyAgeXlwc3RhdGVfYWxsb2NhdGVkID0gMTtdXSlbCisgIHJldHVybiB5eXBzOworfQorCitdYjRfY19mdW5jdGlvbl9kZWYoW1t5eXBzdGF0ZV9kZWxldGVdXSwgW1t2b2lkXV0sCisgICAgICAgICAgICAgICAgICAgW1tbeXlwc3RhdGUgKnl5cHNdXSwgW1t5eXBzXV1dKVsKK3sKKyNpZm5kZWYgeXlvdmVyZmxvdworICAvKiBJZiB0aGUgc3RhY2sgd2FzIHJlYWxsb2NhdGVkIGJ1dCB0aGUgcGFyc2UgZGlkIG5vdCBjb21wbGV0ZSwgdGhlbiB0aGUKKyAgICAgc3RhY2sgc3RpbGwgbmVlZHMgdG8gYmUgZnJlZWQuICAqLworICBpZiAoIXl5cHMtPnl5bmV3ICYmIHl5cHMtPnl5c3MgIT0geXlwcy0+eXlzc2EpCisgICAgWVlTVEFDS19GUkVFICh5eXBzLT55eXNzKTsKKyNlbmRpZl1iNF9sYWNfaWYoW1sKKyAgaWYgKCF5eXBzLT55eW5ldyAmJiB5eXBzLT55eWVzICE9IHl5cHMtPnl5ZXNhKQorICAgIFlZU1RBQ0tfRlJFRSAoeXlwcy0+eXllcyk7XV0pWworICBmcmVlICh5eXBzKTtdYjRfcHVyZV9pZihbXSwgW1sKKyAgeXlwc3RhdGVfYWxsb2NhdGVkID0gMDtdXSlbCit9CitdYjRfcHVyZV9pZihbWworI2RlZmluZSBdYjRfcHJlZml4W25lcnJzIHl5cHMtPl1iNF9wcmVmaXhbbmVycnNdXSlbCisjZGVmaW5lIHl5c3RhdGUgeXlwcy0+eXlzdGF0ZQorI2RlZmluZSB5eWVycnN0YXR1cyB5eXBzLT55eWVycnN0YXR1cworI2RlZmluZSB5eXNzYSB5eXBzLT55eXNzYQorI2RlZmluZSB5eXNzIHl5cHMtPnl5c3MKKyNkZWZpbmUgeXlzc3AgeXlwcy0+eXlzc3AKKyNkZWZpbmUgeXl2c2EgeXlwcy0+eXl2c2EKKyNkZWZpbmUgeXl2cyB5eXBzLT55eXZzCisjZGVmaW5lIHl5dnNwIHl5cHMtPnl5dnNwXWI0X2xvY2F0aW9uc19pZihbWworI2RlZmluZSB5eWxzYSB5eXBzLT55eWxzYQorI2RlZmluZSB5eWxzIHl5cHMtPnl5bHMKKyNkZWZpbmUgeXlsc3AgeXlwcy0+eXlsc3AKKyNkZWZpbmUgeXllcnJvcl9yYW5nZSB5eXBzLT55eWVycm9yX3JhbmdlXV0pWworI2RlZmluZSB5eXN0YWNrc2l6ZSB5eXBzLT55eXN0YWNrc2l6ZV1iNF9sYWNfaWYoW1sKKyNkZWZpbmUgeXllc2EgeXlwcy0+eXllc2EKKyNkZWZpbmUgeXllcyB5eXBzLT55eWVzCisjZGVmaW5lIHl5ZXNfY2FwYWNpdHkgeXlwcy0+eXllc19jYXBhY2l0eV1dKVsKIAogCi1dbTRfZGl2ZXJ0X3B1c2goW0tJTExdKSMgPT09PT09PT09PT09PT09PT09PT09PT09IE00IGNvZGUuCi0jIGI0X2RlY2xhcmVfcGFyc2VyX3ZhcmlhYmxlcwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRGVjbGFyZSB0aGUgdmFyaWFibGVzIHRoYXQgYXJlIGdsb2JhbCwgb3IgbG9jYWwgdG8gWVlQQVJTRSBpZgotIyBwdXJlLXBhcnNlci4KLW00X2RlZmluZShbYjRfZGVjbGFyZV9wYXJzZXJfdmFyaWFibGVzXSwKLVsvKiBUaGUgbG9vay1haGVhZCBzeW1ib2wuICAqLwotaW50IHl5Y2hhcjsKKy8qLS0tLS0tLS0tLS0tLS0tLgorfCB5eXB1c2hfcGFyc2UuICB8CitgLS0tLS0tLS0tLS0tLS0tKi8KIAotLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCi1ZWVNUWVBFIHl5bHZhbDsKLQotLyogTnVtYmVyIG9mIHN5bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KLWludCB5eW5lcnJzO2I0X2xvY2F0aW9uc19pZihbCi0vKiBMb2NhdGlvbiBkYXRhIGZvciB0aGUgbG9vay1haGVhZCBzeW1ib2wuICAqLwotWVlMVFlQRSB5eWxsb2M7XSkKLV0pCi1tNF9kaXZlcnRfcG9wKFtLSUxMXSlkbmwjID09PT09PT09PT09PT09PT09PT09PT0gRW5kIG9mIE00IGNvZGUuCi0KLWI0X3B1cmVfaWYoW10sCi0JICAgW2I0X2RlY2xhcmVfcGFyc2VyX3ZhcmlhYmxlc10pCitdYjRfY19mdW5jdGlvbl9kZWYoW1t5eXB1c2hfcGFyc2VdXSwgW1tpbnRdXSwKKyAgW1tbeXlwc3RhdGUgKnl5cHNdXSwgW1t5eXBzXV1dYjRfcHVyZV9pZihbLAorICBbW1tpbnQgeXlwdXNoZWRfY2hhcl1dLCBbW3l5cHVzaGVkX2NoYXJdXV0sCisgIFtbW1lZU1RZUEUgY29uc3QgKnl5cHVzaGVkX3ZhbF1dLCBbW3l5cHVzaGVkX3ZhbF1dXWI0X2xvY2F0aW9uc19pZihbLAorICBbW1tZWUxUWVBFICp5eXB1c2hlZF9sb2NdXSwgW1t5eXB1c2hlZF9sb2NdXV1dKV0pbTRfaWZzZXQoW2I0X3BhcnNlX3BhcmFtXSwgWywKKyAgYjRfcGFyc2VfcGFyYW1dKSldLCBbWwogCiAKIC8qLS0tLS0tLS0tLS4KQEAgLTk4NiwxOSArMTUxNCwyOSBAQAogYC0tLS0tLS0tLS0qLwogCiAjaWZkZWYgWVlQQVJTRV9QQVJBTQotYjRfY19mdW5jdGlvbl9kZWYoW3l5cGFyc2VdLCBbaW50XSwgW1t2b2lkICpZWVBBUlNFX1BBUkFNXSwgW1lZUEFSU0VfUEFSQU1dXSkKK11iNF9jX2Z1bmN0aW9uX2RlZihbeXlwYXJzZV0sIFtpbnRdLAorICAgICAgICAgICAgICAgICAgIFtbdm9pZCAqWVlQQVJTRV9QQVJBTV0sIFtZWVBBUlNFX1BBUkFNXV0pWwogI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCi1iNF9jX2Z1bmN0aW9uX2RlZihbeXlwYXJzZV0sIFtpbnRdLCBiNF9wYXJzZV9wYXJhbSkKLSNlbmRpZgote1sKLSAgXWI0X3B1cmVfaWYoW2I0X2RlY2xhcmVfcGFyc2VyX3ZhcmlhYmxlc10pWwotICBpbnQgeXlzdGF0ZTsKK11iNF9jX2Z1bmN0aW9uX2RlZihbeXlwYXJzZV0sIFtpbnRdLCBiNF9wYXJzZV9wYXJhbSlbCisjZW5kaWZdXSlbCit7XWI0X3B1cmVfaWYoW2I0X2RlY2xhcmVfc2Nhbm5lcl9jb21tdW5pY2F0aW9uX3ZhcmlhYmxlcworXSliNF9wdXNoX2lmKFtiNF9wdXJlX2lmKFtdLCBbWworICBpbnQgeXlwdXNoZWRfY2hhciA9IHl5Y2hhcjsKKyAgWVlTVFlQRSB5eXB1c2hlZF92YWwgPSB5eWx2YWw7XWI0X2xvY2F0aW9uc19pZihbWworICBZWUxUWVBFIHl5cHVzaGVkX2xvYyA9IHl5bGxvYztdXSkKK10pXSwKKyAgW2I0X2RlY2xhcmVfcGFyc2VyX3N0YXRlX3ZhcmlhYmxlcworXSliNF9sYWNfaWYoW1sKKyAgaW50IHl5X2xhY19lc3RhYmxpc2hlZCA9IDA7XV0pWwogICBpbnQgeXluOwogICBpbnQgeXlyZXN1bHQ7Ci0gIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLwotICBpbnQgeXllcnJzdGF0dXM7Ci0gIC8qIExvb2stYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlci4gICovCisgIC8qIExvb2thaGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KICAgaW50IHl5dG9rZW4gPSAwOworICAvKiBUaGUgdmFyaWFibGVzIHVzZWQgdG8gcmV0dXJuIHNlbWFudGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRoZQorICAgICBhY3Rpb24gcm91dGluZXMuICAqLworICBZWVNUWVBFIHl5dmFsO11iNF9sb2NhdGlvbnNfaWYoW1sKKyAgWVlMVFlQRSB5eWxvYztdXSlbCisKICNpZiBZWUVSUk9SX1ZFUkJPU0UKICAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywgYW5kIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovCiAgIGNoYXIgeXltc2didWZbMTI4XTsKQEAgLTEwMDYsNzkgKzE1NDQsNDMgQEAKICAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7CiAjZW5kaWYKIAotICAvKiBUaHJlZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgotICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLAotICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLAotICAgICBgeXlscyc6IHJlbGF0ZWQgdG8gbG9jYXRpb25zLgotCi0gICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdwotICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KLQotICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLwotICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOwotICB5eXR5cGVfaW50MTYgKnl5c3MgPSB5eXNzYTsKLSAgeXl0eXBlX2ludDE2ICp5eXNzcDsKLQotICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suICAqLwotICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKLSAgWVlTVFlQRSAqeXl2cyA9IHl5dnNhOwotICBZWVNUWVBFICp5eXZzcDsKLQotXWI0X2xvY2F0aW9uc19pZigKLVtbICAvKiBUaGUgbG9jYXRpb24gc3RhY2suICAqLwotICBZWUxUWVBFIHl5bHNhW1lZSU5JVERFUFRIXTsKLSAgWVlMVFlQRSAqeXlscyA9IHl5bHNhOwotICBZWUxUWVBFICp5eWxzcDsKLSAgLyogVGhlIGxvY2F0aW9ucyB3aGVyZSB0aGUgZXJyb3Igc3RhcnRlZCBhbmQgZW5kZWQuICAqLwotICBZWUxUWVBFIHl5ZXJyb3JfcmFuZ2VbMl07XV0pWwotCiAjZGVmaW5lIFlZUE9QU1RBQ0soTikgICAoeXl2c3AgLT0gKE4pLCB5eXNzcCAtPSAoTildYjRfbG9jYXRpb25zX2lmKFssIHl5bHNwIC09IChOKV0pWykKIAotICBZWVNJWkVfVCB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOwotCi0gIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9uIGZyb20gdGhlCi0gICAgIGFjdGlvbiByb3V0aW5lcy4gICovCi0gIFlZU1RZUEUgeXl2YWw7Ci1dYjRfbG9jYXRpb25zX2lmKFsgIFlZTFRZUEUgeXlsb2M7XSlbCi0KICAgLyogVGhlIG51bWJlciBvZiBzeW1ib2xzIG9uIHRoZSBSSFMgb2YgdGhlIHJlZHVjZWQgcnVsZS4KICAgICAgS2VlcCB0byB6ZXJvIHdoZW4gbm8gc3ltYm9sIHNob3VsZCBiZSBwb3BwZWQuICAqLwotICBpbnQgeXlsZW4gPSAwOworICBpbnQgeXlsZW4gPSAwO11iNF9wdXNoX2lmKFtbCisKKyAgaWYgKCF5eXBzLT55eW5ldykKKyAgICB7CisgICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgICAgICBnb3RvIHl5cmVhZF9wdXNoZWRfdG9rZW47CisgICAgfV1dKVsKKworICB5eXNzcCA9IHl5c3MgPSB5eXNzYTsKKyAgeXl2c3AgPSB5eXZzID0geXl2c2E7XWI0X2xvY2F0aW9uc19pZihbWworICB5eWxzcCA9IHl5bHMgPSB5eWxzYTtdXSlbCisgIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7XWI0X2xhY19pZihbWworCisgIHl5ZXMgPSB5eWVzYTsKKyAgeXllc19jYXBhY2l0eSA9IHNpemVvZiB5eWVzYSAvIHNpemVvZiAqeXllczsKKyAgaWYgKFlZTUFYREVQVEggPCB5eWVzX2NhcGFjaXR5KQorICAgIHl5ZXNfY2FwYWNpdHkgPSBZWU1BWERFUFRIO11dKVsKIAogICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFydGluZyBwYXJzZVxuIikpOwogCiAgIHl5c3RhdGUgPSAwOwogICB5eWVycnN0YXR1cyA9IDA7CiAgIHl5bmVycnMgPSAwOwotICB5eWNoYXIgPSBZWUVNUFRZOwkJLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KLQotICAvKiBJbml0aWFsaXplIHN0YWNrIHBvaW50ZXJzLgotICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2sKLSAgICAgc28gdGhhdCB0aGV5IHN0YXkgb24gdGhlIHNhbWUgbGV2ZWwgYXMgdGhlIHN0YXRlIHN0YWNrLgotICAgICBUaGUgd2FzdGVkIGVsZW1lbnRzIGFyZSBuZXZlciBpbml0aWFsaXplZC4gICovCi0KLSAgeXlzc3AgPSB5eXNzOwotICB5eXZzcCA9IHl5dnM7Ci1dYjRfbG9jYXRpb25zX2lmKFtbICB5eWxzcCA9IHl5bHM7Ci0jaWYgWVlMVFlQRV9JU19UUklWSUFMCi0gIC8qIEluaXRpYWxpemUgdGhlIGRlZmF1bHQgbG9jYXRpb24gYmVmb3JlIHBhcnNpbmcgc3RhcnRzLiAgKi8KLSAgeXlsbG9jLmZpcnN0X2xpbmUgICA9IHl5bGxvYy5sYXN0X2xpbmUgICA9IDE7Ci0gIHl5bGxvYy5maXJzdF9jb2x1bW4gPSB5eWxsb2MubGFzdF9jb2x1bW4gPSAwOwotI2VuZGlmCi1dXSkKLW00X2lmZGVmKFtiNF9pbml0aWFsX2FjdGlvbl0sIFsKLW00X3B1c2hkZWYoW2I0X2F0X2RvbGxhcl0sICAgICBbbTRfZGVmaW5lKFtiNF9hdF9kb2xsYXJfdXNlZF0peXlsbG9jXSlkbmwKLW00X3B1c2hkZWYoW2I0X2RvbGxhcl9kb2xsYXJdLCBbbTRfZGVmaW5lKFtiNF9kb2xsYXJfZG9sbGFyX3VzZWRdKXl5bHZhbF0pZG5sCi0gIC8qIFVzZXIgaW5pdGlhbGl6YXRpb24gY29kZS4gICovCi1iNF9pbml0aWFsX2FjdGlvbgotbTRfcG9wZGVmKFtiNF9kb2xsYXJfZG9sbGFyXSlkbmwKLW00X3BvcGRlZihbYjRfYXRfZG9sbGFyXSlkbmwKLS8qIExpbmUgX19saW5lX18gb2YgeWFjYy5jLiAgKi8KLWI0X3N5bmNsaW5lKFtAb2xpbmVAXSwgW0BvZmlsZUBdKQotXSlkbmwKKyAgeXljaGFyID0gWVlFTVBUWTsgLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KK11tNF9pZmRlZihbYjRfaW5pdGlhbF9hY3Rpb25dLCBbCitiNF9kb2xsYXJfcHVzaGRlZihbbTRfZGVmaW5lKFtiNF9kb2xsYXJfZG9sbGFyX3VzZWRdKXl5bHZhbF0sIFtdLAorICAgICAgICAgICAgICAgICAgW2I0X3B1c2hfaWYoW2I0X3B1cmVfaWYoWypdKXl5cHVzaGVkX2xvY10sIFt5eWxsb2NdKV0pZG5sCisvKiBVc2VyIGluaXRpYWxpemF0aW9uIGNvZGUuICAqLworYjRfdXNlcl9pbml0aWFsX2FjdGlvbgorYjRfZG9sbGFyX3BvcGRlZltdZG5sCiBtNF9pZmRlZihbYjRfZG9sbGFyX2RvbGxhcl91c2VkXSxbWyAgeXl2c3BbMF0gPSB5eWx2YWw7Ci1dXSlkbmwKLW00X2lmZGVmKFtiNF9hdF9kb2xsYXJfdXNlZF0sIFtbICB5eWxzcFswXSA9IHl5bGxvYzsKK11dKV0pZG5sCitiNF9sb2NhdGlvbnNfaWYoW1sgIHl5bHNwWzBdID0gXWI0X3B1c2hfaWYoW2I0X3B1cmVfaWYoWypdKXl5cHVzaGVkX2xvY10sIFt5eWxsb2NdKVs7CiBdXSlkbmwKIFsgIGdvdG8geXlzZXRzdGF0ZTsKIApAQCAtMTEwNCw4ICsxNjA2LDggQEAKIAkgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvCiAJICAgbWVtb3J5LiAgKi8KIAlZWVNUWVBFICp5eXZzMSA9IHl5dnM7Ci0JeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7Ci1dYjRfbG9jYXRpb25zX2lmKFsJWVlMVFlQRSAqeXlsczEgPSB5eWxzO10pWworCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzO11iNF9sb2NhdGlvbnNfaWYoWworCVlZTFRZUEUgKnl5bHMxID0geXlscztdKVsKIAogCS8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQogCSAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEKQEAgLTExMTMsMTAgKzE2MTUsMTEgQEAKIAkgICBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8KIAl5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwKIAkJICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAotCQkgICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCksCi1dYjRfbG9jYXRpb25zX2lmKFsJCSAgICAmeXlsczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5bHNwKSxdKVsKKwkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLF1iNF9sb2NhdGlvbnNfaWYoWworCQkgICAgJnl5bHMxLCB5eXNpemUgKiBzaXplb2YgKCp5eWxzcCksXSlbCiAJCSAgICAmeXlzdGFja3NpemUpOwotXWI0X2xvY2F0aW9uc19pZihbCXl5bHMgPSB5eWxzMTtdKVsKK11iNF9sb2NhdGlvbnNfaWYoWworCXl5bHMgPSB5eWxzMTtdKVsKIAl5eXNzID0geXlzczE7CiAJeXl2cyA9IHl5dnMxOwogICAgICAgfQpAQCAtMTEzNyw5ICsxNjQwLDkgQEAKIAkgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7CiAJaWYgKCEgeXlwdHIpCiAJICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3MpOwotCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnMpOwotXWI0X2xvY2F0aW9uc19pZihbCVlZU1RBQ0tfUkVMT0NBVEUgKHl5bHMpO10pWworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxsb2MsIHl5c3MpOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpO11iNF9sb2NhdGlvbnNfaWYoWworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5bHNfYWxsb2MsIHl5bHMpO10pWwogIyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FURQogCWlmICh5eXNzMSAhPSB5eXNzYSkKIAkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOwpAQCAtMTE0OCw4ICsxNjUxLDggQEAKICNlbmRpZiAvKiBubyB5eW92ZXJmbG93ICovCiAKICAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6ZSAtIDE7Ci0gICAgICB5eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOwotXWI0X2xvY2F0aW9uc19pZihbICAgICAgeXlsc3AgPSB5eWxzICsgeXlzaXplIC0gMTtdKVsKKyAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7XWI0X2xvY2F0aW9uc19pZihbCisgICAgICB5eWxzcCA9IHl5bHMgKyB5eXNpemUgLSAxO10pWwogCiAgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIsCiAJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOwpAQCAtMTE2MCw2ICsxNjYzLDkgQEAKIAogICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOwogCisgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisKICAgZ290byB5eWJhY2t1cDsKIAogLyotLS0tLS0tLS0tLS4KQEAgLTExNjgsMjAgKzE2NzQsMzkgQEAKIHl5YmFja3VwOgogCiAgIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICBSZWFkIGEKLSAgICAgbG9vay1haGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisgICAgIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCiAKLSAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2stYWhlYWQgdG9rZW4uICAqLworICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRva2VuLiAgKi8KICAgeXluID0geXlwYWN0W3l5c3RhdGVdOwotICBpZiAoeXluID09IFlZUEFDVF9OSU5GKQorICBpZiAoeXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQgKHl5bikpCiAgICAgZ290byB5eWRlZmF1bHQ7CiAKLSAgLyogTm90IGtub3duID0+IGdldCBhIGxvb2stYWhlYWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisgIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rYWhlYWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCiAKLSAgLyogWVlDSEFSIGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9vay1haGVhZCBzeW1ib2wuICAqLworICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29rYWhlYWQgc3ltYm9sLiAgKi8KICAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQotICAgIHsKLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOwotICAgICAgeXljaGFyID0gWVlMRVg7CisgICAge11iNF9wdXNoX2lmKFtbCisgICAgICBpZiAoIXl5cHMtPnl5bmV3KQorICAgICAgICB7XWI0X3VzZV9wdXNoX2Zvcl9wdWxsX2lmKFtdLCBbWworICAgICAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJldHVybiBmb3IgYSBuZXcgdG9rZW46XG4iKSk7XV0pWworICAgICAgICAgIHl5cmVzdWx0ID0gWVlQVVNIX01PUkU7CisgICAgICAgICAgZ290byB5eXB1c2hyZXR1cm47CisgICAgICAgIH0KKyAgICAgIHl5cHMtPnl5bmV3ID0gMDtdYjRfcHVyZV9pZihbXSwgW1sKKyAgICAgIC8qIFJlc3RvcmluZyB0aGUgcHVzaGVkIHRva2VuIGlzIG9ubHkgbmVjZXNzYXJ5IGZvciB0aGUgZmlyc3QKKyAgICAgICAgIHl5cHVzaF9wYXJzZSBpbnZvY2F0aW9uIHNpbmNlIHN1YnNlcXVlbnQgaW52b2NhdGlvbnMgZG9uJ3Qgb3ZlcndyaXRlCisgICAgICAgICBpdCBiZWZvcmUganVtcGluZyB0byB5eXJlYWRfcHVzaGVkX3Rva2VuLiAgKi8KKyAgICAgIHl5Y2hhciA9IHl5cHVzaGVkX2NoYXI7CisgICAgICB5eWx2YWwgPSB5eXB1c2hlZF92YWw7XWI0X2xvY2F0aW9uc19pZihbWworICAgICAgeXlsbG9jID0geXlwdXNoZWRfbG9jO11dKV0pWworeXlyZWFkX3B1c2hlZF90b2tlbjpdXSlbCisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpKTtdYjRfcHVzaF9pZihbYjRfcHVyZV9pZihbWworICAgICAgeXljaGFyID0geXlwdXNoZWRfY2hhcjsKKyAgICAgIGlmICh5eXB1c2hlZF92YWwpCisgICAgICAgIHl5bHZhbCA9ICp5eXB1c2hlZF92YWw7XWI0X2xvY2F0aW9uc19pZihbWworICAgICAgaWYgKHl5cHVzaGVkX2xvYykKKyAgICAgICAgeXlsbG9jID0gKnl5cHVzaGVkX2xvYztdXSldKV0sIFtbCisgICAgICB5eWNoYXIgPSBZWUxFWDtdXSlbCiAgICAgfQogCiAgIGlmICh5eWNoYXIgPD0gWVlFT0YpCkBAIC0xMTk4LDM0ICsxNzIzLDM4IEBACiAgIC8qIElmIHRoZSBwcm9wZXIgYWN0aW9uIG9uIHNlZWluZyB0b2tlbiBZWVRPS0VOIGlzIHRvIHJlZHVjZSBvciB0bwogICAgICBkZXRlY3QgYW4gZXJyb3IsIHRha2UgdGhhdCBhY3Rpb24uICAqLwogICB5eW4gKz0geXl0b2tlbjsKLSAgaWYgKHl5biA8IDAgfHwgWVlMQVNUIDwgeXluIHx8IHl5Y2hlY2tbeXluXSAhPSB5eXRva2VuKQotICAgIGdvdG8geXlkZWZhdWx0OworICBpZiAoeXluIDwgMCB8fCBZWUxBU1QgPCB5eW4gfHwgeXljaGVja1t5eW5dICE9IHl5dG9rZW4pXWI0X2xhY19pZihbWworICAgIHsKKyAgICAgIFlZX0xBQ19FU1RBQkxJU0g7CisgICAgICBnb3RvIHl5ZGVmYXVsdDsKKyAgICB9XV0sIFtbCisgICAgZ290byB5eWRlZmF1bHQ7XV0pWwogICB5eW4gPSB5eXRhYmxlW3l5bl07CiAgIGlmICh5eW4gPD0gMCkKICAgICB7Ci0gICAgICBpZiAoeXluID09IDAgfHwgeXluID09IFlZVEFCTEVfTklORikKLQlnb3RvIHl5ZXJybGFiOworICAgICAgaWYgKHl5dGFibGVfdmFsdWVfaXNfZXJyb3IgKHl5bikpCisgICAgICAgIGdvdG8geXllcnJsYWI7XWI0X2xhY19pZihbWworICAgICAgWVlfTEFDX0VTVEFCTElTSDtdXSlbCiAgICAgICB5eW4gPSAteXluOwogICAgICAgZ290byB5eXJlZHVjZTsKICAgICB9CiAKLSAgaWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCiAgIC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3IKICAgICAgc3RhdHVzLiAgKi8KICAgaWYgKHl5ZXJyc3RhdHVzKQogICAgIHl5ZXJyc3RhdHVzLS07CiAKLSAgLyogU2hpZnQgdGhlIGxvb2stYWhlYWQgdG9rZW4uICAqLworICAvKiBTaGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8KICAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKIAotICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuIHVubGVzcyBpdCBpcyBlb2YuICAqLwotICBpZiAoeXljaGFyICE9IFlZRU9GKQotICAgIHl5Y2hhciA9IFlZRU1QVFk7CisgIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4uICAqLworICB5eWNoYXIgPSBZWUVNUFRZO11iNF9sYWNfaWYoW1sKKyAgWVlfTEFDX0RJU0NBUkQgKCJzaGlmdCIpO11dKVsKIAogICB5eXN0YXRlID0geXluOworICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgogICAqKyt5eXZzcCA9IHl5bHZhbDsKKyAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5ECiBdYjRfbG9jYXRpb25zX2lmKFsgICorK3l5bHNwID0geXlsbG9jO10pWwogICBnb3RvIHl5bmV3c3RhdGU7CiAKQEAgLTEyNjAsMjIgKzE3ODksNDEgQEAKIF1iNF9sb2NhdGlvbnNfaWYoCiBbWyAgLyogRGVmYXVsdCBsb2NhdGlvbi4gICovCiAgIFlZTExPQ19ERUZBVUxUICh5eWxvYywgKHl5bHNwIC0geXlsZW4pLCB5eWxlbik7XV0pWwotICBZWV9SRURVQ0VfUFJJTlQgKHl5bik7CisgIFlZX1JFRFVDRV9QUklOVCAoeXluKTtdYjRfbGFjX2lmKFtbCisgIHsKKyAgICBpbnQgeXljaGFyX2JhY2t1cCA9IHl5Y2hhcjsKKyAgICBzd2l0Y2ggKHl5bikKKyAgICAgIHsKKyAgICAgICAgXWI0X3VzZXJfYWN0aW9uc1sKKyAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgICB9CisgICAgaWYgKHl5Y2hhcl9iYWNrdXAgIT0geXljaGFyKQorICAgICAgWVlfTEFDX0RJU0NBUkQgKCJ5eWNoYXIgY2hhbmdlIik7CisgIH1dXSwgW1sKICAgc3dpdGNoICh5eW4pCiAgICAgewotICAgICAgXWI0X2FjdGlvbnMKLS8qIExpbmUgX19saW5lX18gb2YgeWFjYy5jLiAgKi8KLWI0X3N5bmNsaW5lKFtAb2xpbmVAXSwgW0BvZmlsZUBdKVsKKyAgICAgIF1iNF91c2VyX2FjdGlvbnNbCiAgICAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9CisgICAgfV1dKVsKKyAgLyogVXNlciBzZW1hbnRpYyBhY3Rpb25zIHNvbWV0aW1lcyBhbHRlciB5eWNoYXIsIGFuZCB0aGF0IHJlcXVpcmVzCisgICAgIHRoYXQgeXl0b2tlbiBiZSB1cGRhdGVkIHdpdGggdGhlIG5ldyB0cmFuc2xhdGlvbi4gIFdlIHRha2UgdGhlCisgICAgIGFwcHJvYWNoIG9mIHRyYW5zbGF0aW5nIGltbWVkaWF0ZWx5IGJlZm9yZSBldmVyeSB1c2Ugb2YgeXl0b2tlbi4KKyAgICAgT25lIGFsdGVybmF0aXZlIGlzIHRyYW5zbGF0aW5nIGhlcmUgYWZ0ZXIgZXZlcnkgc2VtYW50aWMgYWN0aW9uLAorICAgICBidXQgdGhhdCB0cmFuc2xhdGlvbiB3b3VsZCBiZSBtaXNzZWQgaWYgdGhlIHNlbWFudGljIGFjdGlvbiBpbnZva2VzCisgICAgIFlZQUJPUlQsIFlZQUNDRVBULCBvciBZWUVSUk9SIGltbWVkaWF0ZWx5IGFmdGVyIGFsdGVyaW5nIHl5Y2hhciBvcgorICAgICBpZiBpdCBpbnZva2VzIFlZQkFDS1VQLiAgSW4gdGhlIGNhc2Ugb2YgWVlBQk9SVCBvciBZWUFDQ0VQVCwgYW4KKyAgICAgaW5jb3JyZWN0IGRlc3RydWN0b3IgbWlnaHQgdGhlbiBiZSBpbnZva2VkIGltbWVkaWF0ZWx5LiAgSW4gdGhlCisgICAgIGNhc2Ugb2YgWVlFUlJPUiBvciBZWUJBQ0tVUCwgc3Vic2VxdWVudCBwYXJzZXIgYWN0aW9ucyBtaWdodCBsZWFkCisgICAgIHRvIGFuIGluY29ycmVjdCBkZXN0cnVjdG9yIGNhbGwgb3IgdmVyYm9zZSBzeW50YXggZXJyb3IgbWVzc2FnZQorICAgICBiZWZvcmUgdGhlIGxvb2thaGVhZCBpcyB0cmFuc2xhdGVkLiAgKi8KICAgWVlfU1lNQk9MX1BSSU5UICgiLT4gJCQgPSIsIHl5cjFbeXluXSwgJnl5dmFsLCAmeXlsb2MpOwogCiAgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKICAgeXlsZW4gPSAwOwogICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwogCi0gICorK3l5dnNwID0geXl2YWw7Ci1dYjRfbG9jYXRpb25zX2lmKFsgICorK3l5bHNwID0geXlsb2M7XSlbCisgICorK3l5dnNwID0geXl2YWw7XWI0X2xvY2F0aW9uc19pZihbCisgICorK3l5bHNwID0geXlsb2M7XSlbCiAKICAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUKICAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUgc3RhdGUgd2UgcG9wcGVkIGJhY2sgdG8gYW5kIHRoZSBydWxlCkBAIC0xMjk2LDYgKzE4NDQsMTAgQEAKIHwgeXllcnJsYWIgLS0gaGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiB5eWVycmxhYjoKKyAgLyogTWFrZSBzdXJlIHdlIGhhdmUgbGF0ZXN0IGxvb2thaGVhZCB0cmFuc2xhdGlvbi4gIFNlZSBjb21tZW50cyBhdAorICAgICB1c2VyIHNlbWFudGljIGFjdGlvbnMgZm9yIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4gICovCisgIHl5dG9rZW4gPSB5eWNoYXIgPT0gWVlFTVBUWSA/IFlZRU1QVFkgOiBZWVRSQU5TTEFURSAoeXljaGFyKTsKKwogICAvKiBJZiBub3QgYWxyZWFkeSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0aGlzIGVycm9yLiAgKi8KICAgaWYgKCF5eWVycnN0YXR1cykKICAgICB7CkBAIC0xMzAzLDQ1ICsxODU1LDQ3IEBACiAjaWYgISBZWUVSUk9SX1ZFUkJPU0UKICAgICAgIHl5ZXJyb3IgKF1iNF95eWVycm9yX2FyZ3NbWVlfKCJzeW50YXggZXJyb3IiKSk7CiAjZWxzZQorIyBkZWZpbmUgWVlTWU5UQVhfRVJST1IgeXlzeW50YXhfZXJyb3IgKCZ5eW1zZ19hbGxvYywgJnl5bXNnLCBcXWI0X2xhY19pZihbWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5ZXNhLCAmeXllcywgJnl5ZXNfY2FwYWNpdHksIFxdXSlbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlzc3AsIHl5dG9rZW4pCiAgICAgICB7Ci0JWVlTSVpFX1QgeXlzaXplID0geXlzeW50YXhfZXJyb3IgKDAsIHl5c3RhdGUsIHl5Y2hhcik7Ci0JaWYgKHl5bXNnX2FsbG9jIDwgeXlzaXplICYmIHl5bXNnX2FsbG9jIDwgWVlTVEFDS19BTExPQ19NQVhJTVVNKQotCSAgewotCSAgICBZWVNJWkVfVCB5eWFsbG9jID0gMiAqIHl5c2l6ZTsKLQkgICAgaWYgKCEgKHl5c2l6ZSA8PSB5eWFsbG9jICYmIHl5YWxsb2MgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkKLQkgICAgICB5eWFsbG9jID0gWVlTVEFDS19BTExPQ19NQVhJTVVNOwotCSAgICBpZiAoeXltc2cgIT0geXltc2didWYpCi0JICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7Ci0JICAgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAoeXlhbGxvYyk7Ci0JICAgIGlmICh5eW1zZykKLQkgICAgICB5eW1zZ19hbGxvYyA9IHl5YWxsb2M7Ci0JICAgIGVsc2UKLQkgICAgICB7Ci0JCXl5bXNnID0geXltc2didWY7Ci0JCXl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOwotCSAgICAgIH0KLQkgIH0KLQotCWlmICgwIDwgeXlzaXplICYmIHl5c2l6ZSA8PSB5eW1zZ19hbGxvYykKLQkgIHsKLQkgICAgKHZvaWQpIHl5c3ludGF4X2Vycm9yICh5eW1zZywgeXlzdGF0ZSwgeXljaGFyKTsKLQkgICAgeXllcnJvciAoXWI0X3l5ZXJyb3JfYXJnc1t5eW1zZyk7Ci0JICB9Ci0JZWxzZQotCSAgewotCSAgICB5eWVycm9yIChdYjRfeXllcnJvcl9hcmdzW1lZXygic3ludGF4IGVycm9yIikpOwotCSAgICBpZiAoeXlzaXplICE9IDApCi0JICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKLQkgIH0KKyAgICAgICAgY2hhciBjb25zdCAqeXltc2dwID0gWVlfKCJzeW50YXggZXJyb3IiKTsKKyAgICAgICAgaW50IHl5c3ludGF4X2Vycm9yX3N0YXR1cztdYjRfbGFjX2lmKFtbCisgICAgICAgIGlmICh5eWNoYXIgIT0gWVlFTVBUWSkKKyAgICAgICAgICBZWV9MQUNfRVNUQUJMSVNIO11dKVsKKyAgICAgICAgeXlzeW50YXhfZXJyb3Jfc3RhdHVzID0gWVlTWU5UQVhfRVJST1I7CisgICAgICAgIGlmICh5eXN5bnRheF9lcnJvcl9zdGF0dXMgPT0gMCkKKyAgICAgICAgICB5eW1zZ3AgPSB5eW1zZzsKKyAgICAgICAgZWxzZSBpZiAoeXlzeW50YXhfZXJyb3Jfc3RhdHVzID09IDEpCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQorICAgICAgICAgICAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKKyAgICAgICAgICAgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAoeXltc2dfYWxsb2MpOworICAgICAgICAgICAgaWYgKCF5eW1zZykKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHl5bXNnID0geXltc2didWY7CisgICAgICAgICAgICAgICAgeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7CisgICAgICAgICAgICAgICAgeXlzeW50YXhfZXJyb3Jfc3RhdHVzID0gMjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgeXlzeW50YXhfZXJyb3Jfc3RhdHVzID0gWVlTWU5UQVhfRVJST1I7CisgICAgICAgICAgICAgICAgeXltc2dwID0geXltc2c7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIHl5ZXJyb3IgKF1iNF95eWVycm9yX2FyZ3NbeXltc2dwKTsKKyAgICAgICAgaWYgKHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9PSAyKQorICAgICAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7CiAgICAgICB9CisjIHVuZGVmIFlZU1lOVEFYX0VSUk9SCiAjZW5kaWYKICAgICB9CiAKLV1iNF9sb2NhdGlvbnNfaWYoW1sgIHl5ZXJyb3JfcmFuZ2VbMF0gPSB5eWxsb2M7XV0pWworXWI0X2xvY2F0aW9uc19pZihbWyAgeXllcnJvcl9yYW5nZVsxXSA9IHl5bGxvYztdXSlbCiAKICAgaWYgKHl5ZXJyc3RhdHVzID09IDMpCiAgICAgewotICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KKyAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KIAkgZXJyb3IsIGRpc2NhcmQgaXQuICAqLwogCiAgICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQpAQCAtMTM1OCw3ICsxOTEyLDcgQEAKIAl9CiAgICAgfQogCi0gIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKKyAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCiAgICAgIHRva2VuLiAgKi8KICAgZ290byB5eWVycmxhYjE7CiAKQEAgLTEzNzQsNyArMTkyOCw3IEBACiAgIGlmICgvKkNPTlNUQ09ORCovIDApCiAgICAgIGdvdG8geXllcnJvcmxhYjsKIAotXWI0X2xvY2F0aW9uc19pZihbWyAgeXllcnJvcl9yYW5nZVswXSA9IHl5bHNwWzEteXlsZW5dOworXWI0X2xvY2F0aW9uc19pZihbWyAgeXllcnJvcl9yYW5nZVsxXSA9IHl5bHNwWzEteXlsZW5dOwogXV0pWyAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAogICAgICB0aGlzIFlZRVJST1IuICAqLwogICBZWVBPUFNUQUNLICh5eWxlbik7CkBAIC0xMzkzLDcgKzE5NDcsNyBAQAogICBmb3IgKDs7KQogICAgIHsKICAgICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKLSAgICAgIGlmICh5eW4gIT0gWVlQQUNUX05JTkYpCisgICAgICBpZiAoIXl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQogCXsKIAkgIHl5biArPSBZWVRFUlJPUjsKIAkgIGlmICgwIDw9IHl5biAmJiB5eW4gPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXluXSA9PSBZWVRFUlJPUikKQEAgLTE0MDgsMjMgKzE5NjIsMjYgQEAKICAgICAgIGlmICh5eXNzcCA9PSB5eXNzKQogCVlZQUJPUlQ7CiAKLV1iNF9sb2NhdGlvbnNfaWYoW1sgICAgICB5eWVycm9yX3JhbmdlWzBdID0gKnl5bHNwO11dKVsKK11iNF9sb2NhdGlvbnNfaWYoW1sgICAgICB5eWVycm9yX3JhbmdlWzFdID0gKnl5bHNwO11dKVsKICAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogcG9wcGluZyIsCiAJCSAgeXlzdG9zW3l5c3RhdGVdLCB5eXZzcF1iNF9sb2NhdGlvbnNfaWYoWywgeXlsc3BdKVtdYjRfdXNlcl9hcmdzWyk7CiAgICAgICBZWVBPUFNUQUNLICgxKTsKICAgICAgIHl5c3RhdGUgPSAqeXlzc3A7CiAgICAgICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwotICAgIH0KKyAgICB9XWI0X2xhY19pZihbWwogCi0gIGlmICh5eW4gPT0gWVlGSU5BTCkKLSAgICBZWUFDQ0VQVDsKKyAgLyogSWYgdGhlIHN0YWNrIHBvcHBpbmcgYWJvdmUgZGlkbid0IGxvc2UgdGhlIGluaXRpYWwgY29udGV4dCBmb3IgdGhlCisgICAgIGN1cnJlbnQgbG9va2FoZWFkIHRva2VuLCB0aGUgc2hpZnQgYmVsb3cgd2lsbCBmb3Igc3VyZS4gICovCisgIFlZX0xBQ19ESVNDQVJEICgiZXJyb3IgcmVjb3ZlcnkiKTtdXSlbCiAKKyAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4KICAgKisreXl2c3AgPSB5eWx2YWw7CisgIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORAogXWI0X2xvY2F0aW9uc19pZihbWwotICB5eWVycm9yX3JhbmdlWzFdID0geXlsbG9jOworICB5eWVycm9yX3JhbmdlWzJdID0geXlsbG9jOwogICAvKiBVc2luZyBZWUxMT0MgaXMgdGVtcHRpbmcsIGJ1dCB3b3VsZCBjaGFuZ2UgdGhlIGxvY2F0aW9uIG9mCi0gICAgIHRoZSBsb29rLWFoZWFkLiAgWVlMT0MgaXMgYXZhaWxhYmxlIHRob3VnaC4gICovCi0gIFlZTExPQ19ERUZBVUxUICh5eWxvYywgKHl5ZXJyb3JfcmFuZ2UgLSAxKSwgMik7CisgICAgIHRoZSBsb29rYWhlYWQuICBZWUxPQyBpcyBhdmFpbGFibGUgdGhvdWdoLiAgKi8KKyAgWVlMTE9DX0RFRkFVTFQgKHl5bG9jLCB5eWVycm9yX3JhbmdlLCAyKTsKICAgKisreXlsc3AgPSB5eWxvYztdXSlbCiAKICAgLyogU2hpZnQgdGhlIGVycm9yIHRva2VuLiAgKi8KQEAgLTE0NDgsNyArMjAwNSw3IEBACiAgIHl5cmVzdWx0ID0gMTsKICAgZ290byB5eXJldHVybjsKIAotI2lmbmRlZiB5eW92ZXJmbG93CisjaWYgXWI0X2xhY19pZihbWzFdXSwgW1shZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRV1dKVsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgeXlleGhhdXN0ZWRsYWIgLS0gbWVtb3J5IGV4aGF1c3Rpb24gY29tZXMgaGVyZS4gIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTE0NTksOSArMjAxNiwxNCBAQAogI2VuZGlmCiAKIHl5cmV0dXJuOgotICBpZiAoeXljaGFyICE9IFlZRU9GICYmIHl5Y2hhciAhPSBZWUVNUFRZKQotICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQiLAotCQkgeXl0b2tlbiwgJnl5bHZhbF1iNF9sb2NhdGlvbnNfaWYoWywgJnl5bGxvY10pW11iNF91c2VyX2FyZ3NbKTsKKyAgaWYgKHl5Y2hhciAhPSBZWUVNUFRZKQorICAgIHsKKyAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGxhdGVzdCBsb29rYWhlYWQgdHJhbnNsYXRpb24uICBTZWUgY29tbWVudHMgYXQKKyAgICAgICAgIHVzZXIgc2VtYW50aWMgYWN0aW9ucyBmb3Igd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LiAgKi8KKyAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKKyAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsCisgICAgICAgICAgICAgICAgICB5eXRva2VuLCAmeXlsdmFsXWI0X2xvY2F0aW9uc19pZihbLCAmeXlsbG9jXSlbXWI0X3VzZXJfYXJnc1spOworICAgIH0KICAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAogICAgICB0aGlzIFlZQUJPUlQgb3IgWVlBQ0NFUFQuICAqLwogICBZWVBPUFNUQUNLICh5eWxlbik7CkBAIC0xNDc1LDU1ICsyMDM3LDI5IEBACiAjaWZuZGVmIHl5b3ZlcmZsb3cKICAgaWYgKHl5c3MgIT0geXlzc2EpCiAgICAgWVlTVEFDS19GUkVFICh5eXNzKTsKLSNlbmRpZgorI2VuZGlmXWI0X2xhY19pZihbWworICBpZiAoeXllcyAhPSB5eWVzYSkKKyAgICBZWVNUQUNLX0ZSRUUgKHl5ZXMpO11dKWI0X3B1c2hfaWYoW1sKKyAgeXlwcy0+eXluZXcgPSAxOworCit5eXB1c2hyZXR1cm46XV0pWwogI2lmIFlZRVJST1JfVkVSQk9TRQogICBpZiAoeXltc2cgIT0geXltc2didWYpCiAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7CiAjZW5kaWYKICAgLyogTWFrZSBzdXJlIFlZSUQgaXMgdXNlZC4gICovCiAgIHJldHVybiBZWUlEICh5eXJlc3VsdCk7Ci1dfQorfQogCiAKLWI0X2VwaWxvZ3VlCitdYjRfZXBpbG9ndWVbXWRubAorYjRfb3V0cHV0X2VuZCgpCisKIGI0X2RlZmluZXNfaWYoCi1bQG91dHB1dCBAb3V0cHV0X2hlYWRlcl9uYW1lQAotYjRfY29weXJpZ2h0KFtTa2VsZXRvbiBpbnRlcmZhY2UgZm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMgaW4gQ10sZG5sICcKLSAgWzE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDZdKQorW2I0X291dHB1dF9iZWdpbihbYjRfc3BlY19kZWZpbmVzX2ZpbGVdKVsKK11iNF9jb3B5cmlnaHQoW0Jpc29uIGludGVyZmFjZSBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQ10sCisgICAgICAgICAgICAgIFsxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxMl0pWwogCi1iNF90b2tlbl9lbnVtc19kZWZpbmVzKGI0X3Rva2VucykKLQotI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECi1tNF9pZmRlZihbYjRfc3R5cGVdLAotW3R5cGVkZWYgdW5pb25bXW00X2JyZWdleHAoYjRfc3R5cGUsIFtee10sIFsgWVlTVFlQRV0pCi1iNF9zdHlwZQotLyogTGluZSBfX2xpbmVfXyBvZiB5YWNjLmMuICAqLwotYjRfc3luY2xpbmUoW0BvbGluZUBdLCBbQG9maWxlQF0pCi0JWVlTVFlQRTtdLAotW3R5cGVkZWYgaW50IFlZU1RZUEU7XSkKLSMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KLSMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKLSNlbmRpZgotCi1iNF9wdXJlX2lmKFtdLAotW2V4dGVybiBZWVNUWVBFIGI0X3ByZWZpeFtdbHZhbDtdKQotCi1iNF9sb2NhdGlvbnNfaWYoCi1bI2lmICEgZGVmaW5lZCBZWUxUWVBFICYmICEgZGVmaW5lZCBZWUxUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHN0cnVjdCBZWUxUWVBFCi17Ci0gIGludCBmaXJzdF9saW5lOwotICBpbnQgZmlyc3RfY29sdW1uOwotICBpbnQgbGFzdF9saW5lOwotICBpbnQgbGFzdF9jb2x1bW47Ci19IFlZTFRZUEU7Ci0jIGRlZmluZSB5eWx0eXBlIFlZTFRZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklBTCAxCi0jZW5kaWYKLQotYjRfcHVyZV9pZihbXSwKLQkgICBbZXh0ZXJuIFlZTFRZUEUgYjRfcHJlZml4W11sbG9jO10pCi1dKWRubCBiNF9sb2NhdGlvbnNfaWYKLV0pZG5sIGI0X2RlZmluZXNfaWYKK11iNF9zaGFyZWRfZGVjbGFyYXRpb25zWworXWI0X291dHB1dF9lbmQoKQorXSkKZGlmZiAtLWdpdCBhL2RqZ3BwL01ha2VmaWxlLm1haW50IGIvZGpncHAvTWFrZWZpbGUubWFpbnQKaW5kZXggMjU2NmQxNS4uZmU2Yjk4NyAxMDA2NDQKLS0tIGEvZGpncHAvTWFrZWZpbGUubWFpbnQKKysrIGIvZGpncHAvTWFrZWZpbGUubWFpbnQKQEAgLTEsMjEgKzEsMjAgQEAKICMgREpHUFAgTWFpbnRhaW5lcidzIE1ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotTWFrZWZpbGUtKi0KICMgUmVxdWlyZXMgR05VIHNlZAogCi0jIyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotIyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0jIyBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0jIyBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAKIHRvcF9zcmNkaXIgPSAuLgogc3JjZGlyID0gLgpkaWZmIC0tZ2l0IGEvZGpncHAvUkVBRE1FLmluIGIvZGpncHAvUkVBRE1FLmluCmluZGV4IGVjMzk5MGIuLjYwZmQ5NTIgMTAwNjQ0Ci0tLSBhL2RqZ3BwL1JFQURNRS5pbgorKysgYi9kamdwcC9SRUFETUUuaW4KQEAgLTEsMTEgKzEsMTEgQEAKIFRoaXMgaXMgYSBwb3J0IG9mIEdOVSBCaXNvbiBAVkVSU0lPTkAgdG8gTVNET1MvREpHUFAuCiAKLUNvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0NvcHlyaWdodCAoQykgMjAwNS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi1UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci10aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi1hbnkgbGF0ZXIgdmVyc2lvbi4KK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCkBAIC0xMyw4ICsxMyw3IEBACiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLUluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAKIAogMS46ICAgICBESkdQUCBzcGVjaWZpYyBjaGFuZ2VzLgpAQCAtNDYsOCArNDUsMTMgQEAKIAlUaGlzIGlzIGRvbmUgYnkgZm9ya2luZyBhbmQgdXNpbmcgcGlwZXMgZm9yIHRoZSBJUEMuICBNU0RPUyBkb2VzIG5vdAogCXN1cHBvcnQgdGhpcyBmdW5jdGlvbmFsaXR5IHNvIHRoaXMgaGFzIGJlZW4gcmVwcm9kdWNlZCBpbiB0aGUgdXN1YWwKIAl3YXkgYnkgcmVkaXJlY3Rpbmcgc3RkaW4gYW5kIHN0ZG91dCBvZiBiaXNvbiBhbmQgbTQgdG8gdGVtcG9yYXJ5IGZpbGVzCi0JYW5kIHByb2Nlc3NpbmcgdGhlc2UgZmlsZXMgaW4gc2VxdWVuY2UuICBBbGwgdGhlIGNoYW5nZXMgdG8gdGhlIHNvdXJjZXMKLQlhcmUgZG9jdW1lbnRlZCBpbiB0aGUgZGpncHAvZGlmZnMgZmlsZS4KKwlhbmQgcHJvY2Vzc2luZyB0aGVzZSBmaWxlcyBpbiBzZXF1ZW5jZS4KKwlJdCBzaG91bGQgYmUgbm90aWNlZCB0aGF0IGR1ZSB0byB0aGUgZ3JlYXQgYW1vdW50IG9mIGZpbGUgbmFtZXMgdGhhdCBkbworCW5vdCBjbGVhbmx5IG1hcCB0byA4LjMgZmlsZSBuYW1lcywgeW91IHdpbGwgbmVlZCBhbiBPUyB3aXRoIExGTiBzdXBwb3J0CisJdG8gY29uZmlndXJlIGFuZCBjb21waWxlIHRoZSBzb3VyY2VzLiBPbiBXaW45OCB0aGlzIGltcGxpZXMgdGhhdCB0aGUKKwlnZW5lcmF0aW9uIG9mIG51bWVyaWMgdGFpbHMgZm9yIDguMyBmaWxlIG5hbWUgYWxpYXNlcyBtdXN0IGJlIGVuYWJsZWQKKwlvciB0aGUgY29tcGlsYXRpb24gd2lsbCBmYWlsLgorCiAKIAlQbGVhc2UgKipyZWFkKiogdGhlIGRvY3MuCiAKQEAgLTgwLDcgKzg0LDcgQEAKIAlzb21lIG1vcmUgd29yayB0byB1bnBhY2ssIGlmIExGTiBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUuICBJZiBMRk4gaXMKIAlhdmFpbGFibGUgdGhlbiB5b3UgY2FuIGV4dHJhY3QgdGhlIHNvdXJjZSBmaWxlcyBmcm9tIHRoZSBhcmNoaXZlIHdpdGgKIAlhbnkgdW56aXAgcHJvZ3JhbSBhbmQgcHJvY2VlZCB0byB0aGUgcGFyYWdyYXBoIDMuMywgYmVsb3cuICBBbnkgZmlsZQotCW5hbWUgaXNzdWUgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZSB0aGUgREpHUFAgY29uZmlndXJhdGlvbiBmaWxlcy4KKwluYW1lIGlzc3VlIHdpbGwgYmUgaGFuZGxlZCBieSB0aGUgREpHUFAgY29uZmlndXJhdGlvbiBmaWxlcy4KIAlUbyB1bnBhY2sgdGhlIHNvdXJjZSBkaXN0cmlidXRpb24gb24gU0ZOIHN5c3RlbXMsIGZpcnN0LCB5b3UgTVVTVCB1c2UKIAl0aGUgYGRqdW5wYWNrJyBiYXRjaCBmaWxlIHRvIHVuemlwIHRoZSBwYWNrYWdlLiAgVGhhdCBpcyBiZWNhdXNlIHNvbWUKIAlmaWxlIG5hbWVzIGluIHRoZSBvZmZpY2lhbCBkaXN0cmlidXRpb25zIG5lZWQgdG8gYmUgY2hhbmdlZCB0byBhdm9pZApAQCAtMTEzLDIyICsxMTcsMTkgQEAKIDMuMy46ICAgVG8gYnVpbGQgdGhlIGJpbmFyaWVzIHlvdSB3aWxsIG5lZWQgdGhlIGZvbGxvd2luZyBiaW5hcnkgcGFja2FnZXM6CiAJICBkamRldjIwMy56aXAgKG9yIGEgbGF0ZXIgYnV0IE5PVCBhIHByaW9yIHZlcnNpb24pCiAJICBic2gyMDRiLnppcCAgKG9yIGEgbGF0ZXIgYnV0IE5PVCBhIHByaW9yIHZlcnNpb24pCi0JICBnY2M0MTBiLnppcCwgZ3BwNDEwYi56aXAsIGJudTIxNjFiLnppcCwgbWFrMzc5MWIuemlwLAotCSAgZmlsNDBiLnppcCwgc2hsMjBqYi56aXAsIHR4dDIwYi56aXAsCi0JICB0eGk0OGIuemlwLCBncmVwMjRiLnppcCwgc2VkNDE1Yi56aXAsCi0JICBtNC0xNDRiLnppcC4KKyAgICAgICAgICBnY2NOTk5iLnppcCwgZ3BwTk5OLnppcCwgYm51Tk5OYi56aXAsIG1ha05OTmIuemlwLCBmaWxOTk5iLnppcCwKKyAgICAgICAgICBwZXJsTk5OYi56aXAsIHNobE5OTmIuemlwLCB0eHROTk5iLnppcCwgdHhpTk5OYi56aXAsIGdyZXBOTk5iLnppcCwKKyAgICAgICAgICBzZWROTk5iLnppcCBhbmQgbTROTk4uemlwCiAKIAlJZiB5b3Ugd2FudCB0byBydW4gdGhlIGNoZWNrIHlvdSB3aWxsIG5lZWQgYWxzbzoKLQkgIGRpZjI4N2IuemlwCisJICBkaWZOTk5iLnppcAogCi0JQWxsIHRoaXMgcGFja2FnZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB2MmdudSBkaXJlY3Rvcnkgb2YgYW55CisJTk5OIHJlcHJlc2VudHMgdGhlIGxhdGVzdCB2ZXJzaW9uIG51bWJlciBvZiB0aGUgYmluYXJ5IHBhY2thZ2VzLiBBbGwKKwl0aGlzIHBhY2thZ2VzIGNhbiBiZSBmb3VuZCBpbiB0aGUgL3YyZ251IGRpcmVjdG9yeSBvZiBhbnkKIAlmdHAuZGVsb3JpZS5jb20gbWlycm9yLgogCVlvdSB3aWxsIG5lZWQgYnNoMjA0Yi56aXAgb3IgbGF0ZXIgYW5kICpOT1QqIGEgcHJpb3IgdmVyc2lvbiBvcgogCXRoZSBidWlsZCB3aWxsIGZhaWwuICBUaGUgc2FtZSBhcHBsaWVzIHRvIGRqZGV2MjAzLnppcC4gIFBsZWFzZSBub3RlCi0JdGhhdCBCaXNvbiByZXF1aXJlcyBtNC0xNDRiLnppcCBvciBsYXRlciB0byB3b3JrIHByb3Blcmx5LiAgQWxsIHRoZQotCW90aGVyIHBhY2thZ2VzIGFyZSB0aGUgb25lcyBJIGhhdmUgdXNlZCB0byBidWlsZCB0aGUgYmluYXJpZXMKLQlmcm9tIHRoaXMgc291cmNlLiAgUHJldml1b3MgdmVyc2lvbnMgb2YgdGhpcyBwYWNrYWdlcyBtYXkgZG8gdGhlCi0Jam9iIGFzIHdlbGwgYnV0IEkgaGF2ZSBub3QgdGVzdGVkIHRoaXMuCisJdGhhdCBCaXNvbiByZXF1aXJlcyBtNC0xNDRiLnppcCBvciBsYXRlciB0byB3b3JrIHByb3Blcmx5LgogCiAzLjQuOiAgIElmIGZvciBzb21lIHJlYXNvbiB5b3Ugd2FudCB0byByZWNvbmZpZ3VyZSB0aGUgcGFja2FnZSBjZCBpbnRvIHRoZSB0b3AKIAlzcmNkaXIgKGJpc29uLUBUUkVFX1ZFUlNJT05AKSBhbmQgcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CkBAIC0xNzgsNyArMTc5LDcgQEAKIAogCVRoaXMgd2lsbCBpbnN0YWxsIHRoZSBwcm9kdWN0cyBpbnRvIHlvdXIgREpHUFAgaW5zdGFsbGF0aW9uIHRyZWUgZ2l2ZW4KIAlieSB0aGUgZGVmYXVsdCBwcmVmaXggIi9kZXYvZW52L0RKRElSIi4gIElmIHlvdSBwcmVmZXIgdG8gaW5zdGFsbCB0aGVtCi0JaW50byBzb21lIG90aGVyIGRpcmVjdG9yeSB5b3Ugd2lsbCBoYXZlIHRvIHNldCBwcmVmaXggdG8gdGhlIGFwcHJvcGlhdGUKKwlpbnRvIHNvbWUgb3RoZXIgZGlyZWN0b3J5IHlvdSB3aWxsIGhhdmUgdG8gc2V0IHByZWZpeCB0byB0aGUgYXBwcm9wcmlhdGUKIAl2YWx1ZToKIAkgIG1ha2UgaW5zdGFsbCBwcmVmaXg9ejovc29tZS9vdGhlci9wbGFjZQogCmRpZmYgLS1naXQgYS9kamdwcC9jb25maWcuYmF0IGIvZGpncHAvY29uZmlnLmJhdAppbmRleCAxZmI2ZTYxLi5hYjU2NmQ3IDEwMDY0NAotLS0gYS9kamdwcC9jb25maWcuYmF0CisrKyBiL2RqZ3BwL2NvbmZpZy5iYXQKQEAgLTQsMjEgKzQsMjAgQEAKIFJlbSBXQVJOSU5HIFdBUk5JTkcgV0FSTklORzogVGhpcyBmaWxlIG5lZWRzIHRvIGhhdmUgRE9TIENSTEYgZW5kLW9mLWxpbmUNCiBSZW0gZm9ybWF0LCBvciBlbHNlIHN0b2NrIERPUy9XaW5kb3dzIHNoZWxscyB3aWxsIHJlZnVzZSB0byBydW4gaXQuDQogDQotUmVtIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCitSZW0gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuDQogDQotUmVtIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQorUmVtIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQogUmVtIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQotUmVtIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikNCi1SZW0gYW55IGxhdGVyIHZlcnNpb24uDQotDQorUmVtIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yDQorUmVtIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorUmVtDQogUmVtIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KIFJlbSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIFJlbSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQogUmVtIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQotDQorUmVtDQogUmVtIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQotUmVtIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sDQotUmVtIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLg0KK1JlbSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4NCiANCiBlY2hvIENvbmZpZ3VyaW5nIEJpc29uIGZvciBESkdQUCB2Mi54Li4uDQogDQpAQCAtMTQzLDE3ICsxNDIsMTcgQEAKIGlmIG5vdCAiJTEiID09ICIiIGdvdG8gQXJnTG9vcA0KIA0KIFJlbSBDcmVhdGUgYW4gYXJndW1lbnRzIGZpbGUgZm9yIHRoZSBjb25maWd1cmUgc2NyaXB0Lg0KLWVjaG8gLS1zcmNkaXI9JVhTUkMlID4gYXJndW1lbnRzDQotaWYgIiVDQUNISU5HJSIgPT0gImVuYWJsZWQiICAgICAgICAgICAgICBlY2hvIC0tY2FjaGUtZmlsZT0lWFNSQyUvZGpncHAvY29uZmlnLmNhY2hlID4+IGFyZ3VtZW50cw0KLWlmICIlREVQRU5ERU5DWV9UUkFDS0lORyUiID09ICJlbmFibGVkIiAgZWNobyAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nID4+IGFyZ3VtZW50cw0KLWlmICIlREVQRU5ERU5DWV9UUkFDS0lORyUiID09ICJkaXNhYmxlZCIgZWNobyAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyA+PiBhcmd1bWVudHMNCi1pZiAiJUxJQklDT05WX1BSRUZJWCUiID09ICJlbmFibGVkIiAgICAgIGVjaG8gLS13aXRoLWxpYmljb252LXByZWZpeCA+PiBhcmd1bWVudHMNCi1pZiAiJUxJQklDT05WX1BSRUZJWCUiID09ICJkaXNhYmxlZCIgICAgIGVjaG8gLS13aXRob3V0LWxpYmljb252LXByZWZpeCA+PiBhcmd1bWVudHMNCi1pZiAiJUxJQklOVExfUFJFRklYJSIgPT0gImVuYWJsZWQiICAgICAgIGVjaG8gLS13aXRoLWxpYmludGwtcHJlZml4ID4+IGFyZ3VtZW50cw0KLWlmICIlTElCSU5UTF9QUkVGSVglIiA9PSAiZGlzYWJsZWQiICAgICAgZWNobyAtLXdpdGhvdXQtbGliaW50bC1wcmVmaXggPj4gYXJndW1lbnRzDQotaWYgIiVIVE1MJSIgPT0gImVuYWJsZWQiICAgICAgICAgICAgICAgICBlY2hvIC0tZW5hYmxlLWh0bWwgPj4gYXJndW1lbnRzDQotaWYgIiVIVE1MJSIgPT0gImRpc2FibGVkIiAgICAgICAgICAgICAgICBlY2hvIC0tZGlzYWJsZS1odG1sID4+IGFyZ3VtZW50cw0KLWlmIG5vdCAiJUFSR1MlIiA9PSAiIiAgICAgICAgICAgICAgICAgICAgZWNobyAlQVJHUyUgPj4gYXJndW1lbnRzDQorZWNobyAtLXNyY2Rpcj0lWFNSQyUgPiBhcmdzDQoraWYgIiVDQUNISU5HJSIgPT0gImVuYWJsZWQiICAgICAgICAgICAgICBlY2hvIC0tY2FjaGUtZmlsZT0lWFNSQyUvZGpncHAvY29uZmlnLmNhY2hlID4+IGFyZ3MNCitpZiAiJURFUEVOREVOQ1lfVFJBQ0tJTkclIiA9PSAiZW5hYmxlZCIgIGVjaG8gLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyA+PiBhcmdzDQoraWYgIiVERVBFTkRFTkNZX1RSQUNLSU5HJSIgPT0gImRpc2FibGVkIiBlY2hvIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nID4+IGFyZ3MNCitpZiAiJUxJQklDT05WX1BSRUZJWCUiID09ICJlbmFibGVkIiAgICAgIGVjaG8gLS13aXRoLWxpYmljb252LXByZWZpeCA+PiBhcmdzDQoraWYgIiVMSUJJQ09OVl9QUkVGSVglIiA9PSAiZGlzYWJsZWQiICAgICBlY2hvIC0td2l0aG91dC1saWJpY29udi1wcmVmaXggPj4gYXJncw0KK2lmICIlTElCSU5UTF9QUkVGSVglIiA9PSAiZW5hYmxlZCIgICAgICAgZWNobyAtLXdpdGgtbGliaW50bC1wcmVmaXggPj4gYXJncw0KK2lmICIlTElCSU5UTF9QUkVGSVglIiA9PSAiZGlzYWJsZWQiICAgICAgZWNobyAtLXdpdGhvdXQtbGliaW50bC1wcmVmaXggPj4gYXJncw0KK2lmICIlSFRNTCUiID09ICJlbmFibGVkIiAgICAgICAgICAgICAgICAgZWNobyAtLWVuYWJsZS1odG1sID4+IGFyZ3MNCitpZiAiJUhUTUwlIiA9PSAiZGlzYWJsZWQiICAgICAgICAgICAgICAgIGVjaG8gLS1kaXNhYmxlLWh0bWwgPj4gYXJncw0KK2lmIG5vdCAiJUFSR1MlIiA9PSAiIiAgICAgICAgICAgICAgICAgICAgZWNobyAlQVJHUyUgPj4gYXJncw0KIHNldCBBUkdTPQ0KIHNldCBDQUNISU5HPQ0KIHNldCBERVBFTkRFTkNZX1RSQUNLSU5HPQ0KQEAgLTE2NCwyMiArMTYzLDI2IEBACiBpZiAiJVhTUkMlIiA9PSAiLiIgZ290byBJblBsYWNlDQogDQogOk5vdEluUGxhY2UNCi1yZWRpciAtZSAvZGV2L251bGwgdXBkYXRlICVYU1JDJS9jb25maWd1cmUub3JpZyAuL2NvbmZpZ3VyZQ0KK3JlZGlyIC1lIC9kZXYvbnVsbCB1cGRhdGUgJVhTUkMlL2NvbmZpZ3VyZS5vcmcgLi9jb25maWd1cmUNCiB0ZXN0IC1mIC4vY29uZmlndXJlDQogaWYgZXJyb3JsZXZlbCAxIHVwZGF0ZSAlWFNSQyUvY29uZmlndXJlIC4vY29uZmlndXJlDQogDQogOkluUGxhY2UNCiBSZW0gVXBkYXRlIGNvbmZpZ3VyYXRpb24gZmlsZXMNCiBlY2hvIFVwZGF0aW5nIGNvbmZpZ3VyYXRpb24gc2NyaXB0cy4uLg0KLXRlc3QgLWYgLi9jb25maWd1cmUub3JpZw0KLWlmIGVycm9ybGV2ZWwgMSB1cGRhdGUgY29uZmlndXJlIGNvbmZpZ3VyZS5vcmlnDQotc2VkIC1mICVYU1JDJS9kamdwcC9jb25maWcuc2VkIGNvbmZpZ3VyZS5vcmlnID4gY29uZmlndXJlDQordGVzdCAtZiAuL2NvbmZpZ3VyZS5vcmcNCitpZiBlcnJvcmxldmVsIDEgdXBkYXRlIGNvbmZpZ3VyZSBjb25maWd1cmUub3JnDQorc2VkIC1mICVYU1JDJS9kamdwcC9jb25maWcuc2VkIGNvbmZpZ3VyZS5vcmcgPiBjb25maWd1cmUNCiBpZiBlcnJvcmxldmVsIDEgZ290byBTZWRFcnJvcg0KIA0KIFJlbSBNYWtlIHN1cmUgdGhleSBoYXZlIGEgY29uZmlnLnNpdGUgZmlsZQ0KIHNldCBDT05GSUdfU0lURT0lWFNSQyUvZGpncHAvY29uZmlnLnNpdGUNCiBpZiBub3QgIiVDT05GSUdfU0lURSUiID09ICIlWFNSQyUvZGpncHAvY29uZmlnLnNpdGUiIGdvdG8gU21hbGxFbnYNCiANCitSZW0gaW50dHlwZXNfLmggYW5kIGludHR5cGVzLmggbWFwIHRvIHRoZSBzYW1lIDguMyBhbGlhcy4NCit0ZXN0IC1mICVYU1JDJS9saWIvaW50dHlwZXNfLmgNCitpZiBub3QgZXJyb3JsZXZlbCAxIG12IC1mICVYU1JDJS9saWIvaW50dHlwZXNfLmggJVhTUkMlL2xpYi9faW50dHlwZXMuaA0KKw0KIFJlbSBNYWtlIHN1cmUgY3J1Y2lhbCBmaWxlIG5hbWVzIGFyZSBub3QgbXVuZ2VkIGJ5IHVucGFja2luZw0KIHRlc3QgLWYgJVhTUkMlL3BvL01ha2VmaWxlLmluLmluDQogaWYgbm90IGVycm9ybGV2ZWwgMSBtdiAtZiAlWFNSQyUvcG8vTWFrZWZpbGUuaW4uaW4gJVhTUkMlL3BvL01ha2VmaWxlLmluLWluDQpAQCAtMjA1LDYgKzIwOCw1MSBAQAogaWYgbm90IGVycm9ybGV2ZWwgMSBtdiAtZiAlWFNSQyUvZGF0YS9jKysubTQgJVhTUkMlL2RhdGEvY3h4Lm00DQogdGVzdCAtZiAlWFNSQyUvZGF0YS9jeHgubTQNCiBpZiBlcnJvcmxldmVsIDEgbXYgLWYgJVhTUkMlL2RhdGEvY3BwLm00ICVYU1JDJS9kYXRhL2N4eC5tNA0KK3Rlc3QgLWYgJVhTUkMlL2RhdGEvYysrLXNrZWwubTQNCitpZiBub3QgZXJyb3JsZXZlbCAxIG12IC1mICVYU1JDJS9kYXRhL2MrKy1za2VsLm00ICVYU1JDJS9kYXRhL2N4eC1za2VsLm00DQordGVzdCAtZiAlWFNSQyUvZGF0YS9jeHgtc2tlbC5tNA0KK2lmIGVycm9ybGV2ZWwgMSBtdiAtZiAlWFNSQyUvZGF0YS9jcHAtc2tlbC5tNCAlWFNSQyUvZGF0YS9jeHgtc2tlbC5tNA0KK3Rlc3QgLWYgJVhTUkMlL2J1aWxkLWF1eC9qYXZhY29tcC5zaC5pbg0KK2lmIG5vdCBlcnJvcmxldmVsIDEgbXYgLWYgJVhTUkMlL2J1aWxkLWF1eC9qYXZhY29tcC5zaC5pbiAlWFNSQyUvYnVpbGQtYXV4L2phdmFjb21wLnNoLWluDQordGVzdCAtZiAlWFNSQyUvYnVpbGQtYXV4L2phdmFjb21wLnNoLWluDQoraWYgZXJyb3JsZXZlbCAxIG12IC1mICVYU1JDJS9idWlsZC1hdXgvamF2YWNvbXAuc2ggJVhTUkMlL2J1aWxkLWF1eC9qYXZhY29tcC5zaC1pbg0KK3Rlc3QgLWYgJVhTUkMlL2J1aWxkLWF1eC9qYXZhY29tcC5zaC1pbg0KK2lmIGVycm9ybGV2ZWwgMSBtdiAtZiAlWFNSQyUvYnVpbGQtYXV4L2phdmFjb21wLnNoaW4gJVhTUkMlL2J1aWxkLWF1eC9qYXZhY29tcC5zaC1pbg0KK3Rlc3QgLWYgJVhTUkMlL2J1aWxkLWF1eC9qYXZhY29tcC5zaC1pbg0KK2lmIGVycm9ybGV2ZWwgMSBtdiAtZiAlWFNSQyUvYnVpbGQtYXV4L2phdmFjb21wLnNoX2luICVYU1JDJS9idWlsZC1hdXgvamF2YWNvbXAuc2gtaW4NCit0ZXN0IC1mICVYU1JDJS9idWlsZC1hdXgvamF2YWNvbXAuc2gtaW4NCitpZiBlcnJvcmxldmVsIDEgbXYgLWYgJVhTUkMlL2J1aWxkLWF1eC9qYXZhY29tcC5zaC5pbiAlWFNSQyUvYnVpbGQtYXV4L2phdmFjb21wLnNoLWluDQordGVzdCAtZiAlWFNSQyUvYnVpbGQtYXV4L2phdmFleGVjLnNoLmluDQoraWYgbm90IGVycm9ybGV2ZWwgMSBtdiAtZiAlWFNSQyUvYnVpbGQtYXV4L2phdmFleGVjLnNoLmluICVYU1JDJS9idWlsZC1hdXgvamF2YWV4ZWMuc2gtaW4NCit0ZXN0IC1mICVYU1JDJS9idWlsZC1hdXgvamF2YWV4ZWMuc2gtaW4NCitpZiBlcnJvcmxldmVsIDEgbXYgLWYgJVhTUkMlL2J1aWxkLWF1eC9qYXZhZXhlYy5zaCAlWFNSQyUvYnVpbGQtYXV4L2phdmFleGVjLnNoLWluDQordGVzdCAtZiAlWFNSQyUvYnVpbGQtYXV4L2phdmFleGVjLnNoLWluDQoraWYgZXJyb3JsZXZlbCAxIG12IC1mICVYU1JDJS9idWlsZC1hdXgvamF2YWV4ZWMuc2hpbiAlWFNSQyUvYnVpbGQtYXV4L2phdmFleGVjLnNoLWluDQordGVzdCAtZiAlWFNSQyUvYnVpbGQtYXV4L2phdmFleGVjLnNoLWluDQoraWYgZXJyb3JsZXZlbCAxIG12IC1mICVYU1JDJS9idWlsZC1hdXgvamF2YWV4ZWMuc2hfaW4gJVhTUkMlL2J1aWxkLWF1eC9qYXZhZXhlYy5zaC1pbg0KK3Rlc3QgLWYgJVhTUkMlL2J1aWxkLWF1eC9qYXZhZXhlYy5zaC1pbg0KK2lmIGVycm9ybGV2ZWwgMSBtdiAtZiAlWFNSQyUvYnVpbGQtYXV4L2phdmFleGVjX3NoLmluICVYU1JDJS9idWlsZC1hdXgvamF2YWV4ZWMuc2gtaW4NCit0ZXN0IC1mICVYU1JDJS9kb2MveWFjYy4xLmluDQoraWYgbm90IGVycm9ybGV2ZWwgMSBtdiAtZiAlWFNSQyUvZG9jL3lhY2MuMS5pbiAlWFNSQyUvZG9jL3lhY2MuMS1pbg0KK3Rlc3QgLWYgJVhTUkMlL2RvYy95YWNjLjEtaW4NCitpZiBlcnJvcmxldmVsIDEgbXYgLWYgJVhTUkMlL2RvYy95YWNjLjEgJVhTUkMlL2RvYy95YWNjLjEtaW4NCit0ZXN0IC1mICVYU1JDJS9kb2MveWFjYy4xLWluDQoraWYgZXJyb3JsZXZlbCAxIG12IC1mICVYU1JDJS9kb2MveWFjYy4xaW4gJVhTUkMlL2RvYy95YWNjLjEtaW4NCit0ZXN0IC1mICVYU1JDJS9kb2MveWFjYy4xLWluDQoraWYgZXJyb3JsZXZlbCAxIG12IC1mICVYU1JDJS9kb2MveWFjYy4xX2luICVYU1JDJS9kb2MveWFjYy4xLWluDQordGVzdCAtZiAlWFNSQyUvZG9jL3lhY2MuMS1pbg0KK2lmIGVycm9ybGV2ZWwgMSBtdiAtZiAlWFNSQyUvZG9jL3lhY2NfMS5pbiAlWFNSQyUvZG9jL3lhY2MuMS1pbg0KK3Rlc3QgLWYgJVhTUkMlL2V0Yy9iZW5jaC5wbC5pbg0KK2lmIG5vdCBlcnJvcmxldmVsIDEgbXYgLWYgJVhTUkMlL2V0Yy9iZW5jaC5wbC5pbiAlWFNSQyUvZXRjL2JlbmNoLnBsLWluDQordGVzdCAtZiAlWFNSQyUvZXRjL2JlbmNoLnBsLWluDQoraWYgZXJyb3JsZXZlbCAxIG12IC1mICVYU1JDJS9ldGMvYmVuY2gucGwgJVhTUkMlL2V0Yy9iZW5jaC5wbC1pbg0KK3Rlc3QgLWYgJVhTUkMlL2V0Yy9iZW5jaC5wbC1pbg0KK2lmIGVycm9ybGV2ZWwgMSBtdiAtZiAlWFNSQyUvZXRjL2JlbmNoLnBsaW4gJVhTUkMlL2V0Yy9iZW5jaC5wbC1pbg0KK3Rlc3QgLWYgJVhTUkMlL2V0Yy9iZW5jaC5wbC1pbg0KK2lmIGVycm9ybGV2ZWwgMSBtdiAtZiAlWFNSQyUvZXRjL2JlbmNoLnBsX2luICVYU1JDJS9ldGMvYmVuY2gucGwtaW4NCit0ZXN0IC1mICVYU1JDJS9ldGMvYmVuY2gucGwtaW4NCitpZiBlcnJvcmxldmVsIDEgbXYgLWYgJVhTUkMlL2V0Yy9iZW5jaF9wbC5pbiAlWFNSQyUvZXRjL2JlbmNoLnBsLWluDQorDQogOnNjYW5fZ3JhbV9jX1Rlc3QNCiB0ZXN0IC1mICVYU1JDJS9zcmMvYy1zY2FuLWdyYW0uYw0KIGlmIG5vdCBlcnJvcmxldmVsIDEgZ290byBzY2FuX3NrZWxfY19UZXN0DQpAQCAtMjIyLDI1ICsyNzAsMzYgQEAKIGlmIGVycm9ybGV2ZWwgMSBnb3RvIGxhbHIxX2NjRmlsZUVycm9yDQogbXYgLi9sYWxyMS5jYyAlWFNSQyUvZGF0YS9sYWxyMS5jYw0KIHNlZCAicy9jKytcLm00L2N4eC5tNC8iICVYU1JDJS9kYXRhL2xvY2F0aW9uLmNjID4gbG9jYXRpb24uY2MNCi1pZiBlcnJvcmxldmVsIDEgZ290byBsb2NhdGlvbi5jY0ZpbGVFcnJvcg0KK2lmIGVycm9ybGV2ZWwgMSBnb3RvIGxvY2F0aW9uX2NjRmlsZUVycm9yDQogbXYgLi9sb2NhdGlvbi5jYyAlWFNSQyUvZGF0YS9sb2NhdGlvbi5jYw0KIHNlZCAicy9jKytcLm00L2N4eC5tNC8iICVYU1JDJS9kYXRhL2dsci5jYyA+IGdsci5jYw0KLWlmIGVycm9ybGV2ZWwgMSBnb3RvIGdsci5jY0ZpbGVFcnJvcg0KK2lmIGVycm9ybGV2ZWwgMSBnb3RvIGdscl9jY0ZpbGVFcnJvcg0KIG12IC4vZ2xyLmNjICVYU1JDJS9kYXRhL2dsci5jYw0KIA0KK1JlbSBGaXggc3JjL2dldGFyZ3MuYyB0byByZWZsZWN0IHRoZSByZW5hbWluZyBvZiBjKystc2tlbC5tNA0KK3NlZCAicy9jKystc2tlbFwubTQvY3h4LXNrZWwubTQvIiAlWFNSQyUvc3JjL2dldGFyZ3MuYyA+IGdldGFyZ3MuYw0KK2lmIGVycm9ybGV2ZWwgMSBnb3RvIGdldGFyZ3NfY0ZpbGVFcnJvcg0KK212IC4vZ2V0YXJncy5jICVYU1JDJS9zcmMvZ2V0YXJncy5jDQorDQogUmVtIERlZmluZSBESkdQUCBzcGVjaWZpYyBkZWZzIGluIGNvbmZpZy5oaW4NCiBlY2hvIEVkaXRpbmcgY29uZmlnLmhpbi4uLg0KLXRlc3QgLWYgJVhTUkMlL2NvbmZpZ19oLm9yaWcNCi1pZiBlcnJvcmxldmVsIDEgdXBkYXRlICVYU1JDJS9jb25maWcuaGluICVYU1JDJS9jb25maWdfaC5vcmlnDQotc2VkIC1mICVYU1JDJS9kamdwcC9jb25maWdfaC5zZWQgJVhTUkMlL2NvbmZpZ19oLm9yaWcgPiBjb25maWcuaGluDQordGVzdCAtZiAlWFNSQyUvbGliL2NvbmZpZ19oLm9yZw0KK2lmIGVycm9ybGV2ZWwgMSB1cGRhdGUgJVhTUkMlL2xpYi9jb25maWcuaGluICVYU1JDJS9saWIvY29uZmlnX2gub3JnDQorc2VkIC1mICVYU1JDJS9kamdwcC9jb25maWdfaC5zZWQgJVhTUkMlL2xpYi9jb25maWdfaC5vcmcgPiBjb25maWcuaGluDQogaWYgZXJyb3JsZXZlbCAxIGdvdG8gU2VkRXJyb3IyDQotbXYgLWYgY29uZmlnLmhpbiAlWFNSQyUvY29uZmlnLmhpbg0KK212IC1mIGNvbmZpZy5oaW4gJVhTUkMlL2xpYi9jb25maWcuaGluDQogDQogDQogUmVtIEZpeGluZyBpbGljaXQgdGVzdHN1aXRlIGZpbGUgbmFtZS4NCiB0ZXN0IC1mICVYU1JDJS90ZXN0cy9jKysuYXQNCiBpZiBub3QgZXJyb3JsZXZlbCAxIG12IC1mICVYU1JDJS90ZXN0cy9jKysuYXQgJVhTUkMlL3Rlc3RzL2N4eC5hdA0KIA0KK3Rlc3QgLWYgJVhTUkMlL3Rlc3RzL3Rlc3RzdWl0ZS5vcmcNCitpZiBlcnJvcmxldmVsIDEgdXBkYXRlICVYU1JDJS90ZXN0cy90ZXN0c3VpdGUgJVhTUkMlL3Rlc3RzL3Rlc3RzdWl0ZS5vcmcNCitzZWQgLWYgJVhTUkMlL2RqZ3BwL3Rlc3RzdWl0ZS5zZWQgJVhTUkMlL3Rlc3RzL3Rlc3RzdWl0ZS5vcmcgPiB0ZXN0c3VpdGUudG1wDQoraWYgZXJyb3JsZXZlbCAxIGdvdG8gU2VkRXJyb3IzDQorbXYgLWYgLi90ZXN0c3VpdGUudG1wICVYU1JDJS90ZXN0cy90ZXN0c3VpdGUNCisNCiBSZW0gRml4aW5nIGlsaWNpdCBjYWxjKysgZmlsZSBuYW1lcyBpbiB0aGUgY2FsYysrIGRpcmVjdG9yeS4NCiB0ZXN0IC1kICVYU1JDJS9leGFtcGxlcy9jYWxjKysNCiBpZiBub3QgZXJyb3JsZXZlbCAxIG12IC1mICVYU1JDJS9leGFtcGxlcy9jYWxjKysgJVhTUkMlL2V4YW1wbGVzL2NhbGN4eA0KQEAgLTQxMiwyMSArNDcxLDIxIEBACiANCiBSZW0gVXBkYXRlIHRoZSBhcmd1bWVudHMgZmlsZSBmb3IgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuDQogUmVtIFdlIHByZWZlciB3aXRob3V0LWluY2x1ZGVkLWdldHRleHQgYmVjYXVzZSBsaWJpbnRsLmEgZnJvbSBnZXR0ZXh0IHBhY2thZ2UNCi1SZW0gaXMgdGhlIG9ubHkgb25lIHRoYXQgaXMgZ2FyYW50ZWVkIHRvIGhhdmUgYmVlbiBwb3J0ZWQgdG8gREpHUFAuDQotZWNobyAtLWVuYWJsZS1ubHMgLS13aXRob3V0LWluY2x1ZGVkLWdldHRleHQgPj4gYXJndW1lbnRzDQorUmVtIGlzIHRoZSBvbmx5IG9uZSB0aGF0IGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBiZWVuIHBvcnRlZCB0byBESkdQUC4NCitlY2hvIC0tZW5hYmxlLW5scyAtLXdpdGhvdXQtaW5jbHVkZWQtZ2V0dGV4dCA+PiBhcmdzDQogZ290byBDb25maWd1cmVQYWNrYWdlDQogDQogOk1pc3NpbmdOTFNUb29scw0KIGVjaG8gTmVlZGVkIGxpYnMvdG9vbHMgZm9yIE5MUyBub3QgZm91bmQuIENvbmZpZ3VyaW5nIHdpdGhvdXQgTkxTLg0KIDpXaXRob3V0TkxTDQogUmVtIFVwZGF0ZSB0aGUgYXJndW1lbnRzIGZpbGUgZm9yIHRoZSBjb25maWd1cmUgc2NyaXB0Lg0KLWVjaG8gLS1kaXNhYmxlLW5scyA+PiBhcmd1bWVudHMNCitlY2hvIC0tZGlzYWJsZS1ubHMgPj4gYXJncw0KIA0KIDpDb25maWd1cmVQYWNrYWdlDQogZWNobyBSdW5uaW5nIHRoZSAuL2NvbmZpZ3VyZSBzY3JpcHQuLi4NCi1zaCAuL2NvbmZpZ3VyZSBAYXJndW1lbnRzDQorc2ggLi9jb25maWd1cmUgQGFyZ3MNCiBpZiBlcnJvcmxldmVsIDEgZ290byBDZmdFcnJvcg0KLXJtIGFyZ3VtZW50cw0KK3JtIGFyZ3MNCiBlY2hvIERvbmUuDQogZ290byBFbmQNCiANCkBAIC00MzgsNiArNDk3LDEwIEBACiBlY2hvIC4vZGF0YS9nbHIuY2MgZmlsZSBlZGl0aW5nIGZhaWxlZCENCiBnb3RvIEVuZA0KIA0KKzpnZXRhcmdzX2NGaWxlRXJyb3INCitlY2hvIC4vc3JjL2dldGFyZ3MuYyBmaWxlIGVkaXRpbmcgZmFpbGVkIQ0KK2dvdG8gRW5kDQorDQogOmxvY2F0aW9uX2NjRmlsZUVycm9yDQogZWNobyAuL2RhdGEvbG9jYXRpb24uY2MgZmlsZSBlZGl0aW5nIGZhaWxlZCENCiBnb3RvIEVuZA0KQEAgLTQ1NSw3ICs1MTgsMTEgQEAKIGdvdG8gRW5kDQogDQogOlNlZEVycm9yMg0KLWVjaG8gLi9jb25maWcuaGluIGVkaXRpbmcgZmFpbGVkIQ0KK2VjaG8gLi9saWIvY29uZmlnLmhpbiBlZGl0aW5nIGZhaWxlZCENCitnb3RvIEVuZA0KKw0KKzpTZWRFcnJvcjMNCitlY2hvIC4vdGVzdHMvdGVzdHN1aXRlIGVkaXRpbmcgZmFpbGVkIQ0KIGdvdG8gRW5kDQogDQogOkNmZ0Vycm9yDQpkaWZmIC0tZ2l0IGEvZGpncHAvY29uZmlnLnNlZCBiL2RqZ3BwL2NvbmZpZy5zZWQKaW5kZXggMDg2OWU4Yy4uZDVhNTgwNyAxMDA2NDQKLS0tIGEvZGpncHAvY29uZmlnLnNlZAorKysgYi9kamdwcC9jb25maWcuc2VkCkBAIC0xLDc3ICsxLDk2IEBACiAjIERKR1BQIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZS4KICMgU2VkIHNjcmlwdCBmb3IgYWRkaXRpb25hbCBESkdQUCBzcGVjaWZpYyBlZGl0aW5nCi0jIG9mIHRoZSBjb25maWd1cmUgc2NyaXB0IGdlbmVyYXRlZCBieSBhdXRvY29uZiAyLjU3LgorIyBvZiB0aGUgY29uZmlndXJlIHNjcmlwdCBnZW5lcmF0ZWQgYnkgYXV0b2NvbmYgMi42Mi4KIAorIyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotIyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKICMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQorIwogIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCisjCiAjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0jIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKwogCiAjIEFkZGl0aW9uYWwgZWRpdGluZyBvZiBNYWtlZmlsZXMKLS8oZWNob1sJIF0qJzp0LyBhXAorL15ldmFsIHNlZC4qYWNfZmlsZV9pbnB1dHMuKnRtcFwvb3V0IFxcJC8geworOmxvb3AKK24KKy9eJC8hYiBsb29wCithXAorY2F0ID4gIiR0bXAvc3Vicy1kamdwcC5zZWQiIDw8IGVvZl9kamdwcFwKICMgREpHUFAgc3BlY2lmaWMgTWFrZWZpbGUgY2hhbmdlcy5cCi0gIC9eYWxpYXNwYXRoICoJKj0vcyw6LCI7IixnO3QgdFwKLSAgL1RFWElOUFVUUz0vcyw6LCI7IixnO3QgdFwKLSAgL1BBVEg9L3MsOiwiOyIsZzt0IHRcCi0gIHMsXFwuZGVwcyxfZGVwcyxnO3QgdFwKLSAgcyxcXC5uZXdcXC4sX25ldy4sZzt0IHRcCi0gIHMsXFwub2xkXFwuLF9vbGQuLGc7dCB0XAotICBzLGMrK1xcLmF0LGN4eC5hdCxnO3QgdFwKLSAgcyxjKytcXC5tNCxjeHgubTQsZzt0IHRcCi0gIHMsY2FsYysrLGNhbGN4eCxnO3QgdFwKLSAgcyxzY2FuLWdyYW0tYyxjLXNjYW4tZ3JhbSxnO3QgdFwKLSAgcyxzY2FuLXNrZWwtYyxjLXNjYW4tc2tlbCxnO3QgdFwKLSAgcyxNYWtlZmlsZVxcLmluXFwuaW4sTWFrZWZpbGUuaW4taW4sZzt0IHRcCi0gIHMsTWFrZWZpbGVcXC5hbVxcLmluLE1ha2VmaWxlLmFtLWluLGc7dCB0XAotICBzLChNQUtFSU5GT0ZMQUdTKSwmIC0tbm8tc3BsaXQsXAotICAvXmluc3RhbGwtaW5mby1hbTovLC9eJC8ge1wKLSAgICAvQGxpc3Q9LyBzLFxcXCQoSU5GT19ERVBTKSwmIGJpc29uLmksXAotICAgIC9AZm9yICpmaWxlLyBzLFxcXCQoSU5GT19ERVBTKSwmIGJpc29uLmksXAotICAgIHMsZmlsZS1cXFswLTlcXF1cXFswLTlcXF0sJiBcXCRcXCRmaWxlWzAtOV0gXFwkXFwkZmlsZVswLTldWzAtOV0sXAotICB9XAotICAvXlxcLnlcXC5jOi8sL14kLyB7XAotICAgIC9cXFwkKFlBQ0NDT01QSUxFKS8ge1wKLSAgICAgIGFcXFwKLQktQHRlc3QgLWYgeS50YWIuYyAmJiBtdiAtZiB5LnRhYi5jIHlfdGFiLmNcXFwKK3MsXFwuZGVwcyxfZGVwcyxnXAorcyxcXC5saWJzLF9saWJzLGdcCitzLFxcLm5ld1xcLixfbmV3LixnXAorcyxcXC5vbGRcXC4sX29sZC4sZ1wKK3MsXFwudGFiXFwuLF90YWIuLGdcCitzLGMrK1xcLmF0LGN4eC5hdCxnXAorcyxjKytcXC5tNCxjeHgubTQsZ1wKK3MsYysrLXNrZWxcXC5tNCxjeHgtc2tlbC5tNCxnXAorcyxjYWxjKyssY2FsY3h4LGdcCitzLHNjYW4tZ3JhbS1jLGMtc2Nhbi1ncmFtLGdcCitzLHNjYW4tc2tlbC1jLGMtc2Nhbi1za2VsLGdcCitzLGludHR5cGVzXyxfaW50dHlwZXMsZ1wKK3MsamF2YWNvbXBcXC5zaFxcLmluLGphdmFjb21wLnNoLWluLGdcCitzLGphdmFleGVjXFwuc2hcXC5pbixqYXZhZXhlYy5zaC1pbixnXAorcyx5YWNjXFwuMVxcLmluLHlhY2MuMS1pbixnXAorcyxiZW5jaFxcLnBsXFwuaW4sYmVuY2gucGwtaW4sZ1wKK3MsTWFrZWZpbGVcXC5hbVxcLmluLE1ha2VmaWxlLmFtLWluLGdcCitzLE1ha2VmaWxlXFwuaW5cXC5pbixNYWtlZmlsZS5pbi1pbixnXAorL15cXC55XFwuYzovLC9eJC8ge1wKKyAgL1xcXCQoWUFDQ0NPTVBJTEUpLyB7XAorICAgIGFcXFxcXAorCS1AdGVzdCAtZiB5LnRhYi5jICYmIG12IC1mIHkudGFiLmMgeV90YWIuY1xcXFxcCiAJLUB0ZXN0IC1mIHkudGFiLmggJiYgbXYgLWYgeS50YWIuaCB5X3RhYi5oXAotICAgIH1cCiAgIH1cCi0vXmxpYmJpc29uLmE6LyBpXFxcCi1cXCQodG9wX3NyY2RpcikvZGpncHAvc3VicGlwZS5jOiBcXCQodG9wX3NyY2RpcikvZGpncHAvc3VicGlwZS5oXFxcCi1zdWJwaXBlLm86IFxcJCh0b3Bfc3JjZGlyKS9kamdwcC9zdWJwaXBlLmMgXFwkKHRvcF9zcmNkaXIpL2RqZ3BwL3N1YnBpcGUuaFxcXAorfVwKKy9ebGliYmlzb24uYTovIGlcXFxcXAorXFwkKHRvcF9zcmNkaXIpL2RqZ3BwL3N1YnBpcGUuYzogXFwkKHRvcF9zcmNkaXIpL2RqZ3BwL3N1YnBpcGUuaFxcXFxcCitzdWJwaXBlLm86IFxcJCh0b3Bfc3JjZGlyKS9kamdwcC9zdWJwaXBlLmMgXFwkKHRvcF9zcmNkaXIpL2RqZ3BwL3N1YnBpcGUuaFxcXFxcCiAJXFwkKENPTVBJTEUpIC1jIFxcJDxcCi0vXnlhY2M6LyBpXFxcCi15YWNjLmJhdDpcXFwKKy9eeWFjYzovIGlcXFxcXAoreWFjYy5iYXQ6XFxcXFwKIAllY2hvICJiaXNvblxcJChFWEVFWFQpIC15ICUxICUyICUzICU0ICU1ICU2ICU3ICU4ICU5IiA+XFwkQFwKIC9eYmluX1NDUklQVFMgPS9zLyQvIHlhY2MuYmF0L1wKLS9eTU9TVExZQ0xFQU5GSUxFUyA9IHlhY2Mvcy8kLyB5YWNjLmJhdC8KLQorL15NT1NUTFlDTEVBTkZJTEVTID0geWFjYy9zLyQvIHlhY2MuYmF0L1wKKy9jcm9zcy1vcHRpb25zLnRleGk6LywvXiQvIHN8Ymlzb258Ji5leGV8Z1wKKy9eXFwueFxcLjE6LywvXiQvIHN8XFwkcHJvZ3JhbXwmLmV4ZXxnXAorZW9mX2RqZ3BwXAorc2VkIC1mICJcJHRtcC9zdWJzLWRqZ3BwLnNlZCIgXCR0bXAvb3V0ID4gXCR0bXAvb3V0LmRqZ3BwXAorbXYgLWYgXCR0bXAvb3V0LmRqZ3BwIFwkdG1wL291dAorfQogCiAjIE1ha2VmaWxlLmluLmluIGlzIHJlbmFtZWQgdG8gTWFrZWZpbGUuaW4taW4uCi0vYWNfY29uZmlnX2ZpbGVzPS8sL19BQ0VPRi8gewotICBzfHBvL01ha2VmaWxlXC5pbnwmOnBvL01ha2VmaWxlLmluLWlufAorL2FjX2NvbmZpZ19maWxlcz0vIHsKKyAgL3J1bnRpbWUtcG8vIXN8cG8vTWFrZWZpbGVcLmlufCY6cG8vTWFrZWZpbGUuaW4taW58CisgIHN8cnVudGltZS1wby9NYWtlZmlsZVwuaW58JjpydW50aW1lLXBvL01ha2VmaWxlLmluLWlufAorICBzfGphdmFjb21wXC5zaFwuaW58amF2YWNvbXAuc2gtaW58CisgIHN8amF2YWV4ZWNcLnNoXC5pbnxqYXZhZXhlYy5zaC1pbnwKKyAgc3xkb2MveWFjY1wuMXwmOmRvYy95YWNjLjEtaW58CisgIHN8ZXRjL2JlbmNoLnBsfCY6ZXRjL2JlbmNoLnBsLWlufAogfQotL0NPTkZJR19GSUxFUz0vIHN8cG8vTWFrZWZpbGVcLmlufCY6cG8vTWFrZWZpbGUuaW4taW58MgorCisvQ09ORklHX0ZJTEVTPS8geworICAvcnVudGltZS1wby8hc3xwby9NYWtlZmlsZVwuaW58Jjpwby9NYWtlZmlsZS5pbi1pbnwyCisgIHN8cnVudGltZS1wby9NYWtlZmlsZVwuaW58JjpydW50aW1lLXBvL01ha2VmaWxlLmluLWlufDIKKyAgc3xqYXZhY29tcFwuc2hcLmlufGphdmFjb21wLnNoLWlufAorICBzfGphdmFleGVjXC5zaFwuaW58amF2YWV4ZWMuc2gtaW58CisgIHN8ZG9jL3lhY2NcLjF8Jjpkb2MveWFjYy4xLWlufDIKKyAgc3xldGMvYmVuY2hcLnBsfCY6ZXRjL2JlbmNoLnBsLWlufDIKK30KIAogIyBXZSBhbHdheXMgdXNlIF9kZXBzIGFuZCBfbGlicyBpbnN0ZWFkIG9mIC5kZXBzIGFuZCAubGlicywgYmVjYXVzZQogIyB0aGUgbGF0dGVyIGlzIGFuIGludmFsaWQgbmFtZSBvbiA4KzMgTVMtRE9TIGZpbGUgc3lzdGVtLiAgVGhpcyBtYWtlcwogIyB0aGUgZ2VuZXJhdGVkIE1ha2VmaWxlcyBnb29kIGZvciBldmVyeSBESkdQUCBpbnN0YWxsYXRpb24sIG5vdCBvbmx5CiAjIHRoZSBvbmUgd2hlcmUgdGhlIHBhY2thZ2Ugd2FzIGNvbmZpZ3VyZWQgKHdoaWNoIGNvdWxkIGhhcHBlbiB0byBiZQogIyBhIFdpbmRvd3MgYm94LCB3aGVyZSBsZWFkaW5nIGRvdHMgaW4gZmlsZSBuYW1lcyBhcmUgYWxsb3dlZCkuCi1zLFwuZGVwcyxfZGVwcyxnCi1zLFwubGlicyxfbGlicyxnCiAvXnJtZGlyWwkgXSpcLnRzdC8gaVwKIGFtX19sZWFkaW5nX2RvdD1fCiAKQEAgLTkxLDE4ICsxMTAsNiBAQAogIyBET1Mtc3R5bGUgYWJzb2x1dGUgZmlsZSBuYW1lcyBzaG91bGQgYmUgc3VwcG9ydGVkIGFzIHdlbGwKIC9cKikgdG9wX3NyY2Rpcj0vcywvXCosW1xcXFwvXSogfCA/OltcXFxcL10qLAogCi0jIFByZXZlbnQgdGhlIHNwbGl0aW5nIG9mIHN1YnMuc2VkLgotIyBUaGUgc2VkIHNjcmlwdDogc3Vicy5zZWQgaXMgc3BsaXQgaW50byA0OCBsaW5lcyBsb25nIGZpbGVzLgotIyBUaGlzIHdpbGwgcHJvZHVjZSBzZWQgc2NyaXB0cyBjYWxsZWQgc3Vicy0kYWNfc2VkX2ZyYWcuc2VkLCB3aGVyZQotIyAkYWNfc2VkX2ZyYWcgaXMgc29tZSB1bmlxdWUgbnVtYmVyLiBUaGlzIHdpbGwgbm90IHdvcmsgaWYgdGhlIHNwbGl0ZWQKLSMgc2VkIHNjcmlwdCBjb250YWlucyBhIG11bHRpcGxlIGxpbmUgc2VkIGNvbW1hbmQgYXQgbGluZSAjNDguIEluIHRoaXMKLSMgY2FzZSB0aGUgZmlyc3QgcGFydCBvZiB0aGUgbXVsdGlwbGUgbGluZSBzZWQgY29tbWFuZCB3aWxsIGJlIHdyaXR0ZW4KLSMgYXQgdGhlIGVuZCBvZiBvbmUgcGFydGljdWxhciBzdWJzLSRhY19zZWRfZnJhZy5zZWQgYW5kIHRoZSByZXN0IG9mIHRoZQotIyBzZWQgY29tbWFuZCB3aWxsIGJlIHdyaXR0ZW4gYXQgdGhlIGJlZ2luaW5nIG9mIHRoZSBuZXh0IHN1YnMtJGFjX3NlZF9mcmFnLnNlZAotIyBtYWtpbmcgYm90aCBzZWQgc2NyaXB0IHVzZWxlc3MuCi0jIFRoaXMgbWF0Y2hlcyB0aGUgY29uZmlndXJlIHNjcmlwdCBwcm9kdWNlZCBieSBBdXRvY29uZiAyLjU3Ci0vYWNfbWF4X3NlZF9saW5lcz1bMC05XS8gcyw9LiokLD1gc2VkIC1uICIkPSIgJHRtcC9zdWJzLnNlZGAsCi0KICMgVGhlIGZvbGxvd2luZyB0d28gaXRlbXMgYXJlIGNoYW5nZXMgbmVlZGVkIGZvciBjb25maWd1cmluZwogIyBhbmQgY29tcGlsaW5nIGFjcm9zcyBwYXJ0aXRpb25zLgogIyAxKSBUaGUgZ2l2ZW4gc3JjZGlyIHZhbHVlIGlzIGFsd2F5cyB0cmFuc2xhdGVkIGZyb20gdGhlCkBAIC0xMjAsMzIgKzEyNywzMCBAQAogIyB3aGljaCB0aGUgcGFja2FnZSBoYXMgbm90IGJlZW4gY29uZmlndXJlZCBmb3IuCiAvTUlTU0lORz0vLC9eJC8gewogICAvXmZpJC8gYVwKLWFtX21pc3NpbmdfcnVuPWBlY2hvICIkYW1fbWlzc2luZ19ydW4iIHwgc2VkICdzJS9kZXYuKi9iaXNvblstXzAtOV1cXHsxLDFcXH1bLS4wLTlBLXpdKiUke3RvcF9zcmNkaXJ9JTtzJS46LiovYmlzb25bLV8wLTldXFx7MSwxXFx9Wy0uMC05QS16XSolJHt0b3Bfc3JjZGlyfSUnYAorYW1fbWlzc2luZ19ydW49YGVjaG8gIiRhbV9taXNzaW5nX3J1biIgfCBzZWQgJ3MlL2Rldi8uKi9iaXNvblstXzAtOV1cXHsxLDFcXH1bLS4wLTlBLVphLXorXSolJHt0b3Bfc3JjZGlyfSU7cyUuOi4qL2Jpc29uWy1fMC05XVxcezEsMVxcfVstLjAtOUEtWmEteitdKiUke3RvcF9zcmNkaXJ9JSdgCiB9CiAvXmluc3RhbGxfc2g9L2FcCi1pbnN0YWxsX3NoPWBlY2hvICIkaW5zdGFsbF9zaCIgfCBzZWQgJ3MlL2Rldi4qL2Jpc29uWy1fMC05XVxcezEsMVxcfVstLjAtOUEtel0qJSR7dG9wX3NyY2Rpcn0lO3MlLjouKi9iaXNvblstXzAtOV1cXHsxLDFcXH1bLS4wLTlBLXpdKiUke3RvcF9zcmNkaXJ9JSdgCitpbnN0YWxsX3NoPWBlY2hvICIkaW5zdGFsbF9zaCIgfCBzZWQgJ3MlL2Rldi8uKi9iaXNvblstXzAtOV1cXHsxLDFcXH1bLS4wLTlBLVphLXorXSolJHt0b3Bfc3JjZGlyfSU7cyUuOi4qL2Jpc29uWy1fMC05XVxcezEsMVxcfVstLjAtOUEtWmEteitdKiUke3RvcF9zcmNkaXJ9JSdgCiAKICMgVGhpcyB3aWxsIG9ubHkgd29yayBpZiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZQogIyB0ZXN0c3VpdGUgaXMgcmFuIGZyb20gdGhlIGZvbGxvd2luZyBwYXRoOgogIyAgICR7dG9wX3NyY2Rpcn0vdGVzdHMvdGVzdHN1aXRlLmRpcgogIyBob2xkcy4gVGhlIGV4cGxpY2l0IG5hbWVzIGFyZSBvZiBubyBpbXBvcnRhbmNlLgogIyAgIC4uLy4uLy4gPT0gJHt0b3Bfc3JjZGlyfQotL1wuKVsJIF0qYWNfYWJzX2J1aWxkZGlyPS8sL15lc2FjJC8gewotIC9eZXNhYyQvIGFcCi1hY19hYnNfYnVpbGRkaXI9YGVjaG8gIiRhY19hYnNfYnVpbGRkaXIiIHwgc2VkICJzJS9kZXYuKi9iaXNvblstXzAtOV1cXHsxLDFcXH1bLS4wLTlBLXpdKi9bXi9dKiUuLi8uLi8uJTtzJS46LiovYmlzb25bLV8wLTldXFx7MSwxXFx9Wy0uMC05QS16XSovW14vXSolLi4vLi4vLiUiYAotfQotL1wuKVsJIF0qYWNfYWJzX3RvcF9idWlsZGRpcj0vLC9eZXNhYyQvIHsKLSAvXmVzYWMkLyBhXAotYWNfYWJzX3RvcF9idWlsZGRpcj1gZWNobyAiJGFjX2Fic190b3BfYnVpbGRkaXIiIHwgc2VkICJzJS9kZXYuKi9iaXNvblstXzAtOV1cXHsxLDFcXH1bLS4wLTlBLXpdKi9bXi9dKiUuLi8uLi8uLi8lO3MlLjouKi9iaXNvblstXzAtOV1cXHsxLDFcXH1bLS4wLTlBLXpdKi9bXi9dKiUuLi8uLi8uLi8lImAKLX0KLS9cLilbCSBdKmFjX2Fic19zcmNkaXI9LywvXmVzYWMkLyB7Ci0gL15lc2FjJC8gYVwKLWFjX2Fic19zcmNkaXI9YGVjaG8gIiRhY19hYnNfc3JjZGlyIiB8IHNlZCAicyUvZGV2LiovYmlzb25bLV8wLTldXFx7MSwxXFx9Wy0uMC05QS16XSovW14vXSolLi4vLi4vLiU7cyUuOi4qL2Jpc29uWy1fMC05XVxcezEsMVxcfVstLjAtOUEtel0qL1teL10qJS4uLy4uLy4lImAKLX0KLS9cLilbCSBdKmFjX2Fic190b3Bfc3JjZGlyPS8sL15lc2FjJC8gewotIC9eZXNhYyQvIGFcCi1hY19hYnNfdG9wX3NyY2Rpcj1gZWNobyAiJGFjX2Fic190b3Bfc3JjZGlyIiB8IHNlZCAicyUvZGV2LiovYmlzb25bLV8wLTldXFx7MSwxXFx9Wy0uMC05QS16XSovW14vXSolLi4vLi4vLi4vJTtzJS46LiovYmlzb25bLV8wLTldXFx7MSwxXFx9Wy0uMC05QS16XSovW14vXSolLi4vLi4vLi4vJSJgCi19CisjL15lc2FjJC8sL15hY19hYnNfc3JjZGlyPS8geworL15hY19hYnNfc3JjZGlyPS8gaVwKK2FjX2Fic19idWlsZGRpcj1gZWNobyAiJGFjX2Fic19idWlsZGRpciIgfCBzZWQgInMlL2Rldi8uKi9iaXNvblstXzAtOV1cXHsxLDFcXH1bLS4wLTlBLVphLXorXSolLi4vLi4vLiU7cyUuOi4qL2Jpc29uWy1fMC05XVxcezEsMVxcfVstLjAtOUEtWmEteitdKiUuLi8uLi8uJSJgXAorYWNfYWJzX3RvcF9idWlsZGRpcj1gZWNobyAiJGFjX2Fic190b3BfYnVpbGRkaXIiIHwgc2VkICJzJS9kZXYvLiovYmlzb25bLV8wLTldXFx7MSwxXFx9Wy0uMC05QS1aYS16K10qJS4uLy4uLy4uJTtzJS46LiovYmlzb25bLV8wLTldXFx7MSwxXFx9Wy0uMC05QS1aYS16K10qJS4uLy4uLy4uJSJgXAorYWNfYWJzX3RvcF9zcmNkaXI9YGVjaG8gIiRhY19hYnNfdG9wX3NyY2RpciIgfCBzZWQgInMlL2Rldi8uKi9iaXNvblstXzAtOV1cXHsxLDFcXH1bLS4wLTlBLVphLXorXSolLi4vLi4vLi4lO3MlLjouKi9iaXNvblstXzAtOV1cXHsxLDFcXH1bLS4wLTlBLVphLXorXSolLi4vLi4vLi4lImAKKyNhY19hYnNfc3JjZGlyPWBlY2hvICIkYWNfYWJzX3NyY2RpciIgfCBzZWQgInMlL2Rldi8uKi9iaXNvblstXzAtOV1cXHsxLDFcXH1bLS4wLTlBLVphLXorXSolLi4vLi4vLiU7cyUuOi4qL2Jpc29uWy1fMC05XVxcezEsMVxcfVstLjAtOUEtWmEteitdKiUuLi8uLi8uJSJgCisvXmFjX2Fic19zcmNkaXI9LyBhXAorZm9yIGRqX2RpciBpbiAkYWNfYWJzX2J1aWxkZGlyICRhY19hYnNfdG9wX2J1aWxkZGlyICRhY19hYnNfdG9wX3NyY2RpciAkYWNfYWJzX3NyY2RpclwKK2RvXAorICBhY19hYnNfYnVpbGRkaXI9YGVjaG8gIiRhY19hYnNfYnVpbGRkaXIiIHwgc2VkICJzJS8vJS8lZyJgXAorICBhY19hYnNfdG9wX2J1aWxkZGlyPWBlY2hvICIkYWNfYWJzX3RvcF9idWlsZGRpciIgfCBzZWQgInMlLy8lLyVnImBcCisgIGFjX2Fic190b3Bfc3JjZGlyPWBlY2hvICIkYWNfYWJzX3RvcF9zcmNkaXIiIHwgc2VkICJzJS8vJS8lZyJgXAorICBhY19hYnNfc3JjZGlyPWBlY2hvICIkYWNfYWJzX3NyY2RpciIgfCBzZWQgInMlLy8lLyVnImBcCitkb25lCiAKICMgQWRkIERKR1BQIHZlcnNpb24gaW5mb3JtYXRpb24uCiAvXiNkZWZpbmUgVkVSU0lPTi8gcy9cJFZFUlNJT04vJiAgKERKR1BQIHBvcnQgKHIxKSkvCkBAIC0xNjAsNSArMTY1LDI2IEBACiBhY19kamdwcF9wYXRoPWBlY2hvICIkREpESVIiIHwgc2VkICdzJVxcXFxcXCUvJWcnIHwgdHIgJGFzX2NyX0xFVFRFUlMgJGFzX2NyX2xldHRlcnNgXAogYWNfY3ZfZmxpYnM9YGVjaG8gIiRhY19jdl9mbGlicyIgfCBzZWQgInMlLUwkYWNfZGpncHBfcGF0aCUtTC9kZXYvZW52L0RKRElSJWciYAogCisjIEF1dG9jb25mIGdlbmVyYXRlZCBjb25maWd1cmUgc2NyaXB0cyB3cml0ZSBhYnNvbHV0ZQorIyBwYXRocyBvZiBjZXJ0YWluIGhlYWRlciBmaWxlcyBpbnRvIE1ha2VmaWxlcyBtYWtpbmcKKyMgdGhlbSB1c2VsZXNzIGZvciBESkdQUCBpbnN0YWxsYXRpb25zIGZvciB3aGljaCB0aGUKKyMgcGFja2FnZSBoYXMgbm90IGJlZW4gY29uZmlndXJlZCBmb3IuCisvXi4qZWNobyAiXCRhc19tZTpcJExJTkVOTzogcmVzdWx0OiBcJGdsX2N2X2Fic29sdXRlXy4qJC8geworaAorcyxeLipcKGdsX2N2X2Fic29sdXRlX1wpXChbYS16MC05X10qXClcKF9oXCkuKiQsXDFcMlwzPWBlY2hvICRcMVwyXDMgfCBzZWQgInMlW146XTouKi9pbmNsdWRlLyUvZGV2L2Vudi9ESkRJUi9pbmNsdWRlLyUiYCwKK0cKK30KKy9eLiplY2hvICJcJGFzX21lOlwkTElORU5POiByZXN1bHQ6IFwkZ2xfY3ZfZnVsbF8uKiQvIHsKK2gKK3MsXi4qXChnbF9jdl9mdWxsX1wpXChbYS16MC05X10qXClcKF9oXCkuKiQsXDFcMlwzPWBlY2hvICRcMVwyXDMgfCBzZWQgInMlW146XTouKi9pbmNsdWRlLyUvZGV2L2Vudi9ESkRJUi9pbmNsdWRlLyUiYCwKK0cKK30KKwogIyBUaGUgZm9sbG93aW5nIGlzIG5vdCBhIHZhbGlkIERPUyBmaWxlIG5hbWUKIHMvY2FsYysrL2NhbGN4eC9nCisKKyMgVGhlIENSIHRlc3QgZm9yIGF3ayBkb2VzIG5vdCB3b3JrIGZvciBESkdQUC4KKy9eYWNfY3NfYXdrX2NyPS8sL14kLyB7CisgIC9eZmkkLyBhXAorYWNfY3NfYXdrX2NyPSRhY19jcgorfQpkaWZmIC0tZ2l0IGEvZGpncHAvY29uZmlnLnNpdGUgYi9kamdwcC9jb25maWcuc2l0ZQppbmRleCBhNTQ1MzcwLi43Y2E0MTA3IDEwMDY0NAotLS0gYS9kamdwcC9jb25maWcuc2l0ZQorKysgYi9kamdwcC9jb25maWcuc2l0ZQpAQCAtMywyMSArMywyMCBAQAogIyBUaGlzIGlzIHRoZSBjb25maWcuc2l0ZSBmaWxlIGZvciBjb25maWd1cmluZyBHTlUgcGFja2FnZXMKICMgd2hpY2ggYXJlIHRvIGJlIGJ1aWx0IHdpdGggREpHUFAgdG9vbHMuCiAKLSMgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0jIGFueSBsYXRlciB2ZXJzaW9uLgotCisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCiAjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KKyMKICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSMgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCiAKICMgSW5jbHVkZSB0aGUgZGpncHAgc3ViZGlyZWN0b3J5IGluIFBBVEgsIHNvIHRoYXQgZ2V0Y29uZiBpcyBmb3VuZApAQCAtNjgsNiArNjcsOSBAQAogIyBBIHNhbmUgZGVmYXVsdCBmb3Igc2VkLgogYWNfY3ZfcGF0aF9TRUQ9JHtTRUQ9Jy9kZXYvZW52L0RKRElSL2Jpbi9zZWQnfQogCisjIEEgc2FuZSBkZWZhdWx0IGZvciBta2Rpci4KK2FjX2N2X3BhdGhfbWtkaXI9JHtNS0RJUl9QPScvZGV2L2Vudi9ESkRJUi9iaW4vbWtkaXIgLXAnfQorCiAjIFRoZXNlIGFyZSBzZXQgaGVyZSBzbyB0aGUgZ2VuZXJhdGVkIGxpYnRvb2wgd2lsbCBiZSBnb29kCiAjIGZvciBldmVyeSBESkdQUCBpbnN0YWxsYXRpb24sIG5vdCBvbmx5IHRoZSBvbmUgd2hlcmUgdGhlCiAjIHBhY2thZ2Ugd2FzIGNvbmZpZ3VyZWQuCmRpZmYgLS1naXQgYS9kamdwcC9jb25maWdfaC5zZWQgYi9kamdwcC9jb25maWdfaC5zZWQKaW5kZXggYThlYTQ2Ny4uZjYxNmFiYyAxMDA2NDQKLS0tIGEvZGpncHAvY29uZmlnX2guc2VkCisrKyBiL2RqZ3BwL2NvbmZpZ19oLnNlZApAQCAtMSwyMCArMSwxOSBAQAogIyBzZWQgc2NyaXB0IGZvciBESkdQUCBzcGVjaWZpYyBlZGl0aW5nIG9mIGNvbmZpZy5oaW4KIAotIyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwNS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSMgYW55IGxhdGVyIHZlcnNpb24uCi0KKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKICMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQorIwogIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotIyBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAKIAogJCBhXApkaWZmIC0tZ2l0IGEvZGpncHAvZGp1bnBhY2suYmF0IGIvZGpncHAvZGp1bnBhY2suYmF0CmluZGV4IDViMDhhNzkuLmI0ZGUzYWMgMTAwNjQ0Ci0tLSBhL2RqZ3BwL2RqdW5wYWNrLmJhdAorKysgYi9kamdwcC9kanVucGFjay5iYXQKQEAgLTcsMTIgKzcsMTIgQEAKIFJlbSByZW5hbWluZyBzb21lIG9mIHRoZSBmaWxlcyB3aG9zZSBuYW1lcyBhcmUgaW52YWxpZCBvbiBET1Mgb3IgY29uZmxpY3QNCiBSZW0gd2l0aCBvdGhlciBmaWxlIG5hbWVzIGFmdGVyIHRydW5jYXRpb24gdG8gRE9TIDgrMyBuYW1lc3BhY2UuDQogUmVtDQotUmVtIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCitSZW0gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuDQogUmVtDQotUmVtIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQorUmVtIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQogUmVtIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQotUmVtIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikNCi1SZW0gYW55IGxhdGVyIHZlcnNpb24uDQorUmVtIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yDQorUmVtIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQogUmVtDQogUmVtIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KIFJlbSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KQEAgLTIwLDggKzIwLDcgQEAKIFJlbSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KIFJlbQ0KIFJlbSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KLVJlbSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLA0KLVJlbSBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4NCitSZW0gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uDQogUmVtDQogUmVtDQogUmVtIEludm9rZSBsaWtlIHRoaXM6DQpkaWZmIC0tZ2l0IGEvZGpncHAvZm5jaGFuZ2UubHN0IGIvZGpncHAvZm5jaGFuZ2UubHN0CmluZGV4IDY5YTYxZTYuLjFiNDNkOWIgMTAwNjQ0Ci0tLSBhL2RqZ3BwL2ZuY2hhbmdlLmxzdAorKysgYi9kamdwcC9mbmNoYW5nZS5sc3QKQEAgLTEsMiArMSwyNyBAQAotQFZAL3NyYy9zY2FuLWdyYW0tYy5jICBAVkAvc3JjL2Mtc2Nhbi1ncmFtLmMKLUBWQC9zcmMvc2Nhbi1za2VsLWMuYyAgQFZAL3NyYy9jLXNjYW4tc2tlbC5jCitAVkAvYnVpbGQtYXV4L2phdmFjb21wLnNoLmluICAgICAgICAgICAgICBAVkAvYnVpbGQtYXV4L2phdmFjb21wLnNoLWluCitAVkAvYnVpbGQtYXV4L2phdmFleGVjLnNoLmluICAgICAgICAgICAgICBAVkAvYnVpbGQtYXV4L2phdmFleGVjLnNoLWluCitAVkAvZGF0YS9jKystc2tlbC5tNCAgICAgICAgICAgICAgICAgICAgICBAVkAvZGF0YS9jeHgtc2tlbC5tNAorQFZAL2RhdGEvYysrLm00ICAgICAgICAgICAgICAgICAgICAgICAgICAgQFZAL2RhdGEvY3h4Lm00CitAVkAvZG9jL3lhY2MuMS5pbiAgICAgICAgICAgICAgICAgICAgICAgICBAVkAvZG9jL3lhY2MuMS1pbgorQFZAL2V0Yy9iZW5jaC5wbC5pbiAgICAgICAgICAgICAgICAgICAgICAgQFZAL2V0Yy9iZW5jaC5wbC1pbgorQFZAL2V4YW1wbGVzL2NhbGMrKy8gICAgICAgICAgICAgICAgICAgICAgQFZAL2V4YW1wbGVzL2NhbGN4eC8KK0BWQC9leGFtcGxlcy9jYWxjKysvTWFrZWZpbGUuYW0gICAgICAgICAgIEBWQC9leGFtcGxlcy9jYWxjeHgvTWFrZWZpbGUuYW0KK0BWQC9leGFtcGxlcy9jYWxjKysvTWFrZWZpbGUuaW4gICAgICAgICAgIEBWQC9leGFtcGxlcy9jYWxjeHgvTWFrZWZpbGUuaW4KK0BWQC9leGFtcGxlcy9jYWxjKysvY2FsYysrLXNjYW5uZXIuY2MgICAgIEBWQC9leGFtcGxlcy9jYWxjeHgvY2FsY3h4LXNjYW5uZXIuY2MKK0BWQC9leGFtcGxlcy9jYWxjKysvY2FsYysrLXNjYW5uZXIubGwgICAgIEBWQC9leGFtcGxlcy9jYWxjeHgvY2FsY3h4LXNjYW5uZXIubGwKK0BWQC9leGFtcGxlcy9jYWxjKysvY2FsYysrLmNjICAgICAgICAgICAgIEBWQC9leGFtcGxlcy9jYWxjeHgvY2FsY3h4LmNjCitAVkAvZXhhbXBsZXMvY2FsYysrL2NhbGMrKy1kcml2ZXIuaGggICAgICBAVkAvZXhhbXBsZXMvY2FsY3h4L2NhbGN4eC1kcml2ZXIuaGgKK0BWQC9leGFtcGxlcy9jYWxjKysvY2FsYysrLWRyaXZlci5jYyAgICAgIEBWQC9leGFtcGxlcy9jYWxjeHgvY2FsY3h4LWRyaXZlci5jYworQFZAL2V4YW1wbGVzL2NhbGMrKy9zdGFjay5oaCAgICAgICAgICAgICAgQFZAL2V4YW1wbGVzL2NhbGN4eC9zdGFjay5oaAorQFZAL2V4YW1wbGVzL2NhbGMrKy9wb3NpdGlvbi5oaCAgICAgICAgICAgQFZAL2V4YW1wbGVzL2NhbGN4eC9wb3NpdGlvbi5oaAorQFZAL2V4YW1wbGVzL2NhbGMrKy9sb2NhdGlvbi5oaCAgICAgICAgICAgQFZAL2V4YW1wbGVzL2NhbGN4eC9sb2NhdGlvbi5oaAorQFZAL2V4YW1wbGVzL2NhbGMrKy9jYWxjKystcGFyc2VyLmhoICAgICAgQFZAL2V4YW1wbGVzL2NhbGN4eC9jYWxjeHgtcGFyc2VyLmhoCitAVkAvZXhhbXBsZXMvY2FsYysrL2NhbGMrKy1wYXJzZXIuY2MgICAgICBAVkAvZXhhbXBsZXMvY2FsY3h4L2NhbGN4eC1wYXJzZXIuY2MKK0BWQC9leGFtcGxlcy9jYWxjKysvY2FsYysrLXBhcnNlci5zdGFtcCAgIEBWQC9leGFtcGxlcy9jYWxjeHgvY2FsY3h4LXBhcnNlci5zdGFtcAorQFZAL2V4YW1wbGVzL2NhbGMrKy9jYWxjKystcGFyc2VyLnl5ICAgICAgQFZAL2V4YW1wbGVzL2NhbGN4eC9jYWxjeHgtcGFyc2VyLnl5CitAVkAvZXhhbXBsZXMvY2FsYysrL3Rlc3QgICAgICAgICAgICAgICAgICBAVkAvZXhhbXBsZXMvY2FsY3h4L3Rlc3QKK0BWQC9wby9NYWtlZmlsZS5pbi5pbiAgICAgICAgICAgICAgICAgICAgIEBWQC9wby9NYWtlZmlsZS5pbi1pbgorQFZAL3J1bnRpbWUtcG8vTWFrZWZpbGUuaW4uaW4gICAgICAgICAgICAgQFZAL3J1bnRpbWUtcG8vTWFrZWZpbGUuaW4taW4KK0BWQC9zcmMvc2Nhbi1ncmFtLWMuYyAgICAgICAgICAgICAgICAgICAgIEBWQC9zcmMvYy1zY2FuLWdyYW0uYworQFZAL3NyYy9zY2FuLXNrZWwtYy5jICAgICAgICAgICAgICAgICAgICAgQFZAL3NyYy9jLXNjYW4tc2tlbC5jCitAVkAvdGVzdHMvYysrLmF0ICAgICAgICAgICAgICAgICAgICAgICAgICBAVkAvdGVzdHMvY3h4LmF0CmRpZmYgLS1naXQgYS9kamdwcC9zdWJwaXBlLmMgYi9kamdwcC9zdWJwaXBlLmMKaW5kZXggMzNlMmEzOC4uZjg1ZThmOSAxMDA2NDQKLS0tIGEvZGpncHAvc3VicGlwZS5jCisrKyBiL2RqZ3BwL3N1YnBpcGUuYwpAQCAtMSwxMSArMSwxMSBAQAogLyogU3VicHJvY2Vzc2VzIHdpdGggcGlwZXMuCiAKLSAgIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMjAwNS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCkBAIC0xMywxNSArMTMsMTIgQEAKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKIC8qIFdyaXR0ZW4gYnkgSnVhbiBNYW51ZWwgR3VlcnJlcm8gPGp1YW4uZ3VlcnJlcm9AZ214LmRlPi4gKi8KIAogCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgorI2luY2x1ZGUgPGNvbmZpZy5oPgogCiAjaW5jbHVkZSAic3VicGlwZS5oIgogCkBAIC02MywyMiArNjAsMzMgQEAKICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2xvc2UgKChmZCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmICh1bmxpbmsgKChuYW1lKSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsIF8oInJlbW92aW5nIG9mIGAlcycgZmFpbGVkIiksIChuYW1lKSk7ICBcCisgICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCBfKCJyZW1vdmluZyBvZiAnJXMnIGZhaWxlZCIpLCAobmFtZSkpOyAgXAogICB9IHdoaWxlICgwKQogCiAKIHZvaWQKIGluaXRfc3VicGlwZSh2b2lkKQogeworICBjaGFyICp0bXBkaXI7CiAgIGludCBmZDsKIAotICBzdHJjcHkodG1wX2ZpbGVfbmFtZVswXSwgIi9kZXYvZW52L1RNUERJUi9iblhYWFhYWCIpOworICB0bXBkaXIgPSBnZXRlbnYoIlRNUERJUiIpOworICBpZiAodG1wZGlyID09IE5VTEwpCisgICAgdG1wZGlyID0gZ2V0ZW52KCJUTVAiKTsKKyAgaWYgKHRtcGRpciA9PSBOVUxMKQorICAgIHRtcGRpciA9IGdldGVudigiVEVNUCIpOworICBpZiAoYWNjZXNzKHRtcGRpciwgRF9PSykpCisgICAgdG1wZGlyID0gIi4iOworCisgIHN0cmNweSh0bXBfZmlsZV9uYW1lWzBdLCB0bXBkaXIpOworICBzdHJjYXQodG1wX2ZpbGVfbmFtZVswXSwgIi9iblhYWFhYWCIpOwogICBmZCA9IG1rc3RlbXAodG1wX2ZpbGVfbmFtZVswXSk7CiAgIGlmIChmZCA8IDApCiAgICAgZXJyb3IoRVhJVF9GQUlMVVJFLCAwLCBfKCJjcmVhdGlvbiBvZiBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIpKTsKICAgY2xvc2UgKGZkKTsKIAotICBzdHJjcHkodG1wX2ZpbGVfbmFtZVsxXSwgIi9kZXYvZW52L1RNUERJUi9iblhYWFhYWCIpOworICBzdHJjcHkodG1wX2ZpbGVfbmFtZVsxXSwgdG1wZGlyKTsKKyAgc3RyY2F0KHRtcF9maWxlX25hbWVbMV0sICIvYm5YWFhYWFgiKTsKICAgZmQgPSBta3N0ZW1wKHRtcF9maWxlX25hbWVbMV0pOwogICBpZiAoZmQgPCAwKQogICAgIGVycm9yKEVYSVRfRkFJTFVSRSwgMCwgXygiY3JlYXRpb24gb2YgYSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiKSk7CkBAIC0yMjMsMTcgKzIzMSwxNyBAQAogICB7CiAgICAgcmVtb3ZlX3RtcF9maWxlKFNURElOX0ZJTEVOTywgdG1wX2ZpbGVfbmFtZVswXSk7CiAgICAgcmVtb3ZlX3RtcF9maWxlKFNURE9VVF9GSUxFTk8sIHRtcF9maWxlX25hbWVbMV0pOwotICAgIGVycm9yKEVYSVRfRkFJTFVSRSwgMCwgXygic3Vic2lkaWFyeSBwcm9ncmFtIGAlcycgaW50ZXJydXB0ZWQiKSwgcHJvZ3JhbSk7CisgICAgZXJyb3IoRVhJVF9GQUlMVVJFLCAwLCBfKCJzdWJzaWRpYXJ5IHByb2dyYW0gJyVzJyBpbnRlcnJ1cHRlZCIpLCBwcm9ncmFtKTsKICAgfQogICBpZiAoc3RhdHVzKQogICB7CiAgICAgcmVtb3ZlX3RtcF9maWxlKFNURElOX0ZJTEVOTywgdG1wX2ZpbGVfbmFtZVswXSk7CiAgICAgcmVtb3ZlX3RtcF9maWxlKFNURE9VVF9GSUxFTk8sIHRtcF9maWxlX25hbWVbMV0pOwogICAgIGVycm9yKEVYSVRfRkFJTFVSRSwgMCwgXyhlcnJubyA9PSBFTk9FTlQKLQkJCSAgICAgPyAic3Vic2lkaWFyeSBwcm9ncmFtIGAlcycgbm90IGZvdW5kIgorCQkJICAgICA/ICJzdWJzaWRpYXJ5IHByb2dyYW0gJyVzJyBub3QgZm91bmQiCiAJCQkgICAgIDogc3RhdHVzIDwgMQotCQkJICAgICA/ICJzdWJzaWRpYXJ5IHByb2dyYW0gYCVzJyBmYWlsZWQiCi0JCQkgICAgIDogInN1YnNpZGlhcnkgcHJvZ3JhbSBgJXMnIGZhaWxlZCAoc3RhdHVzPSVpLCBlcnJubz0laSkiKSwgcHJvZ3JhbSwgc3RhdHVzLCBlcnJubyk7CisJCQkgICAgID8gInN1YnNpZGlhcnkgcHJvZ3JhbSAnJXMnIGZhaWxlZCIKKwkJCSAgICAgOiAic3Vic2lkaWFyeSBwcm9ncmFtICclcycgZmFpbGVkIChzdGF0dXM9JWksIGVycm5vPSVpKSIpLCBwcm9ncmFtLCBzdGF0dXMsIGVycm5vKTsKICAgfQogCiAKQEAgLTI3NSw5ICsyODMsOSBAQAogICBmcmVlKGFyZ3VtZW50cyk7CiAKICAgaWYgKHVubGluayh0bXBfZmlsZV9uYW1lWzBdKSkKLSAgICBlcnJvcihFWElUX0ZBSUxVUkUsIDAsIF8oInJlbW92aW5nIG9mIGAlcycgZmFpbGVkIiksIHRtcF9maWxlX25hbWVbMF0pOworICAgIGVycm9yKEVYSVRfRkFJTFVSRSwgMCwgXygicmVtb3Zpbmcgb2YgJyVzJyBmYWlsZWQiKSwgdG1wX2ZpbGVfbmFtZVswXSk7CiAgIGlmICh1bmxpbmsodG1wX2ZpbGVfbmFtZVsxXSkpCi0gICAgZXJyb3IoRVhJVF9GQUlMVVJFLCAwLCBfKCJyZW1vdmluZyBvZiBgJXMnIGZhaWxlZCIpLCB0bXBfZmlsZV9uYW1lWzFdKTsKKyAgICBlcnJvcihFWElUX0ZBSUxVUkUsIDAsIF8oInJlbW92aW5nIG9mICclcycgZmFpbGVkIiksIHRtcF9maWxlX25hbWVbMV0pOwogCiAgIGlmIChkdXAyKG9sZF9zdGRpbiwgU1RESU5fRklMRU5PKSA8IDApCiAgICAgZXJyb3IoRVhJVF9GQUlMVVJFLCAwLCAicmVzdG9yZSBvZiBiaXNvbidzIHN0ZGluIGZhaWxlZCIpOwpkaWZmIC0tZ2l0IGEvZGpncHAvc3VicGlwZS5oIGIvZGpncHAvc3VicGlwZS5oCmluZGV4IGRiMmViOGMuLmQ3YTMwZGMgMTAwNjQ0Ci0tLSBhL2RqZ3BwL3N1YnBpcGUuaAorKysgYi9kamdwcC9zdWJwaXBlLmgKQEAgLTEsOSArMSwxMCBAQAogLyogU3VicHJvY2Vzc2VzIHdpdGggcGlwZXMuCi0gICBDb3B5cmlnaHQgKEMpIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLApAQCAtMTIsOCArMTMsNyBAQAogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKIC8qIFdyaXR0ZW4gYnkgSnVhbiBNYW51ZWwgR3VlcnJlcm8gPGp1YW4uZ3VlcnJlcm9AZ214LmRlPi4gKi8KIApkaWZmIC0tZ2l0IGEvZGpncHAvdGVzdHN1aXRlLnNlZCBiL2RqZ3BwL3Rlc3RzdWl0ZS5zZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ1NTFiMwotLS0gL2Rldi9udWxsCisrKyBiL2RqZ3BwL3Rlc3RzdWl0ZS5zZWQKQEAgLTAsMCArMSwyMyBAQAorIyBESkdQUCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUuDQorIyBTZWQgc2NyaXB0IGZvciBhZGRpdGlvbmFsIERKR1BQIHNwZWNpZmljIGVkaXRpbmcNCisjIG9mIHRoZSB0ZXN0c3VpdGUgc2NyaXB0IGdlbmVyYXRlZCBieSBhdXRvY29uZiAyLjYxLg0KKw0KKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuDQorDQorIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yDQorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKyMNCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorIw0KKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lg0KKw0KKw0KKyMgUmVtb3ZlIGRpc2FsbG93ZWQgY2hhcmFjdGVycyBmcm9tIGZpbGUgbmFtZXMuDQorDQorcy9+IUAjXFxcJCVeJlwqKCktPV8re31cW1xdfFxcXFw6Ozw+LCAuL34hQCNcXCQlXlwmKCktPV8re31bXTssIC4vZw0KZGlmZiAtLWdpdCBhL2RvYy9Eb3h5ZmlsZS5pbiBiL2RvYy9Eb3h5ZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzZhMWNlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL0RveHlmaWxlLmluCkBAIC0wLDAgKzEsMTA4NyBAQAorIyBEb3h5ZmlsZSAxLjMuNAkJLSotIE1ha2VmaWxlIC0qLQorCisjIFRoaXMgZmlsZSBkZXNjcmliZXMgdGhlIHNldHRpbmdzIHRvIGJlIHVzZWQgYnkgdGhlIGRvY3VtZW50YXRpb24gc3lzdGVtCisjIGRveHlnZW4gKHd3dy5kb3h5Z2VuLm9yZykgZm9yIGEgcHJvamVjdAorIworIyBBbGwgdGV4dCBhZnRlciBhIGhhc2ggKCMpIGlzIGNvbnNpZGVyZWQgYSBjb21tZW50IGFuZCB3aWxsIGJlIGlnbm9yZWQKKyMgVGhlIGZvcm1hdCBpczoKKyMgICAgICAgVEFHID0gdmFsdWUgW3ZhbHVlLCAuLi5dCisjIEZvciBsaXN0cyBpdGVtcyBjYW4gYWxzbyBiZSBhcHBlbmRlZCB1c2luZzoKKyMgICAgICAgVEFHICs9IHZhbHVlIFt2YWx1ZSwgLi4uXQorIyBWYWx1ZXMgdGhhdCBjb250YWluIHNwYWNlcyBzaG91bGQgYmUgcGxhY2VkIGJldHdlZW4gcXVvdGVzICgiICIpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvamVjdCByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFRoZSBQUk9KRUNUX05BTUUgdGFnIGlzIGEgc2luZ2xlIHdvcmQgKG9yIGEgc2VxdWVuY2Ugb2Ygd29yZHMgc3Vycm91bmRlZAorIyBieSBxdW90ZXMpIHRoYXQgc2hvdWxkIGlkZW50aWZ5IHRoZSBwcm9qZWN0LgorCitQUk9KRUNUX05BTUUgICAgICAgICAgID0gIkBQQUNLQUdFX05BTUVAIgorCisjIFRoZSBQUk9KRUNUX05VTUJFUiB0YWcgY2FuIGJlIHVzZWQgdG8gZW50ZXIgYSBwcm9qZWN0IG9yIHJldmlzaW9uIG51bWJlci4KKyMgVGhpcyBjb3VsZCBiZSBoYW5keSBmb3IgYXJjaGl2aW5nIHRoZSBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiBvcgorIyBpZiBzb21lIHZlcnNpb24gY29udHJvbCBzeXN0ZW0gaXMgdXNlZC4KKworUFJPSkVDVF9OVU1CRVIgICAgICAgICA9ICJAUEFDS0FHRV9WRVJTSU9OQCIKKworIyBUaGUgT1VUUFVUX0RJUkVDVE9SWSB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSAocmVsYXRpdmUgb3IgYWJzb2x1dGUpCisjIGJhc2UgcGF0aCB3aGVyZSB0aGUgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24gd2lsbCBiZSBwdXQuCisjIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkLCBpdCB3aWxsIGJlIHJlbGF0aXZlIHRvIHRoZSBsb2NhdGlvbgorIyB3aGVyZSBkb3h5Z2VuIHdhcyBzdGFydGVkLiBJZiBsZWZ0IGJsYW5rIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQuCisKK09VVFBVVF9ESVJFQ1RPUlkgICAgICAgPSAuCisKKyMgVGhlIE9VVFBVVF9MQU5HVUFHRSB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBsYW5ndWFnZSBpbiB3aGljaCBhbGwKKyMgZG9jdW1lbnRhdGlvbiBnZW5lcmF0ZWQgYnkgZG94eWdlbiBpcyB3cml0dGVuLiBEb3h5Z2VuIHdpbGwgdXNlIHRoaXMKKyMgaW5mb3JtYXRpb24gdG8gZ2VuZXJhdGUgYWxsIGNvbnN0YW50IG91dHB1dCBpbiB0aGUgcHJvcGVyIGxhbmd1YWdlLgorIyBUaGUgZGVmYXVsdCBsYW5ndWFnZSBpcyBFbmdsaXNoLCBvdGhlciBzdXBwb3J0ZWQgbGFuZ3VhZ2VzIGFyZToKKyMgQnJhemlsaWFuLCBDYXRhbGFuLCBDaGluZXNlLCBDaGluZXNlLVRyYWRpdGlvbmFsLCBDcm9hdGlhbiwgQ3plY2gsIERhbmlzaCwgRHV0Y2gsCisjIEZpbm5pc2gsIEZyZW5jaCwgR2VybWFuLCBHcmVlaywgSHVuZ2FyaWFuLCBJdGFsaWFuLCBKYXBhbmVzZSwgSmFwYW5lc2UtZW4KKyMgKEphcGFuZXNlIHdpdGggRW5nbGlzaCBtZXNzYWdlcyksIEtvcmVhbiwgTm9yd2VnaWFuLCBQb2xpc2gsIFBvcnR1Z3Vlc2UsCisjIFJvbWFuaWFuLCBSdXNzaWFuLCBTZXJiaWFuLCBTbG92YWssIFNsb3ZlbmUsIFNwYW5pc2gsIFN3ZWRpc2gsIGFuZCBVa3JhaW5pYW4uCisKK09VVFBVVF9MQU5HVUFHRSAgICAgICAgPSBFbmdsaXNoCisKKyMgVGhpcyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgZW5jb2RpbmcgdXNlZCBpbiB0aGUgZ2VuZXJhdGVkIG91dHB1dC4KKyMgVGhlIGVuY29kaW5nIGlzIG5vdCBhbHdheXMgZGV0ZXJtaW5lZCBieSB0aGUgbGFuZ3VhZ2UgdGhhdCBpcyBjaG9zZW4sCisjIGJ1dCBhbHNvIHdoZXRoZXIgb3Igbm90IHRoZSBvdXRwdXQgaXMgbWVhbnQgZm9yIFdpbmRvd3Mgb3Igbm9uLVdpbmRvd3MgdXNlcnMuCisjIEluIGNhc2UgdGhlcmUgaXMgYSBkaWZmZXJlbmNlLCBzZXR0aW5nIHRoZSBVU0VfV0lORE9XU19FTkNPRElORyB0YWcgdG8gWUVTCisjIGZvcmNlcyB0aGUgV2luZG93cyBlbmNvZGluZyAodGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlIFdpbmRvd3MgYmluYXJ5KSwKKyMgd2hlcmVhcyBzZXR0aW5nIHRoZSB0YWcgdG8gTk8gdXNlcyBhIFVuaXgtc3R5bGUgZW5jb2RpbmcgKHRoZSBkZWZhdWx0IGZvcgorIyBhbGwgcGxhdGZvcm1zIG90aGVyIHRoYW4gV2luZG93cykuCisKK1VTRV9XSU5ET1dTX0VOQ09ESU5HICAgPSBOTworCisjIElmIHRoZSBCUklFRl9NRU1CRVJfREVTQyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIERveHlnZW4gd2lsbAorIyBpbmNsdWRlIGJyaWVmIG1lbWJlciBkZXNjcmlwdGlvbnMgYWZ0ZXIgdGhlIG1lbWJlcnMgdGhhdCBhcmUgbGlzdGVkIGluCisjIHRoZSBmaWxlIGFuZCBjbGFzcyBkb2N1bWVudGF0aW9uIChzaW1pbGFyIHRvIEphdmFEb2MpLgorIyBTZXQgdG8gTk8gdG8gZGlzYWJsZSB0aGlzLgorCitCUklFRl9NRU1CRVJfREVTQyAgICAgID0gWUVTCisKKyMgSWYgdGhlIFJFUEVBVF9CUklFRiB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIERveHlnZW4gd2lsbCBwcmVwZW5kCisjIHRoZSBicmllZiBkZXNjcmlwdGlvbiBvZiBhIG1lbWJlciBvciBmdW5jdGlvbiBiZWZvcmUgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uLgorIyBOb3RlOiBpZiBib3RoIEhJREVfVU5ET0NfTUVNQkVSUyBhbmQgQlJJRUZfTUVNQkVSX0RFU0MgYXJlIHNldCB0byBOTywgdGhlCisjIGJyaWVmIGRlc2NyaXB0aW9ucyB3aWxsIGJlIGNvbXBsZXRlbHkgc3VwcHJlc3NlZC4KKworUkVQRUFUX0JSSUVGICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBBTFdBWVNfREVUQUlMRURfU0VDIGFuZCBSRVBFQVRfQlJJRUYgdGFncyBhcmUgYm90aCBzZXQgdG8gWUVTIHRoZW4KKyMgRG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgZGV0YWlsZWQgc2VjdGlvbiBldmVuIGlmIHRoZXJlIGlzIG9ubHkgYSBicmllZgorIyBkZXNjcmlwdGlvbi4KKworQUxXQVlTX0RFVEFJTEVEX1NFQyAgICA9IFlFUworCisjIElmIHRoZSBJTkxJTkVfSU5IRVJJVEVEX01FTUIgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBzaG93IGFsbCBpbmhlcml0ZWQKKyMgbWVtYmVycyBvZiBhIGNsYXNzIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoYXQgY2xhc3MgYXMgaWYgdGhvc2UgbWVtYmVycyB3ZXJlCisjIG9yZGluYXJ5IGNsYXNzIG1lbWJlcnMuIENvbnN0cnVjdG9ycywgZGVzdHJ1Y3RvcnMgYW5kIGFzc2lnbm1lbnQgb3BlcmF0b3JzIG9mCisjIHRoZSBiYXNlIGNsYXNzZXMgd2lsbCBub3QgYmUgc2hvd24uCisKK0lOTElORV9JTkhFUklURURfTUVNQiAgPSBZRVMKKworIyBJZiB0aGUgRlVMTF9QQVRIX05BTUVTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gRG94eWdlbiB3aWxsIHByZXBlbmQgdGhlIGZ1bGwKKyMgcGF0aCBiZWZvcmUgZmlsZXMgbmFtZSBpbiB0aGUgZmlsZSBsaXN0IGFuZCBpbiB0aGUgaGVhZGVyIGZpbGVzLiBJZiBzZXQKKyMgdG8gTk8gdGhlIHNob3J0ZXN0IHBhdGggdGhhdCBtYWtlcyB0aGUgZmlsZSBuYW1lIHVuaXF1ZSB3aWxsIGJlIHVzZWQuCisKK0ZVTExfUEFUSF9OQU1FUyAgICAgICAgPSBOTworCisjIElmIHRoZSBGVUxMX1BBVEhfTkFNRVMgdGFnIGlzIHNldCB0byBZRVMgdGhlbiB0aGUgU1RSSVBfRlJPTV9QQVRIIHRhZworIyBjYW4gYmUgdXNlZCB0byBzdHJpcCBhIHVzZXItZGVmaW5lZCBwYXJ0IG9mIHRoZSBwYXRoLiBTdHJpcHBpbmcgaXMKKyMgb25seSBkb25lIGlmIG9uZSBvZiB0aGUgc3BlY2lmaWVkIHN0cmluZ3MgbWF0Y2hlcyB0aGUgbGVmdC1oYW5kIHBhcnQgb2YKKyMgdGhlIHBhdGguIEl0IGlzIGFsbG93ZWQgdG8gdXNlIHJlbGF0aXZlIHBhdGhzIGluIHRoZSBhcmd1bWVudCBsaXN0LgorCitTVFJJUF9GUk9NX1BBVEggICAgICAgID0KKworIyBJZiB0aGUgU0hPUlRfTkFNRVMgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBtdWNoIHNob3J0ZXIKKyMgKGJ1dCBsZXNzIHJlYWRhYmxlKSBmaWxlIG5hbWVzLiBUaGlzIGNhbiBiZSB1c2VmdWwgaXMgeW91ciBmaWxlIHN5c3RlbXMKKyMgZG9lc24ndCBzdXBwb3J0IGxvbmcgbmFtZXMgbGlrZSBvbiBET1MsIE1hYywgb3IgQ0QtUk9NLgorCitTSE9SVF9OQU1FUyAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgSkFWQURPQ19BVVRPQlJJRUYgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBEb3h5Z2VuCisjIHdpbGwgaW50ZXJwcmV0IHRoZSBmaXJzdCBsaW5lICh1bnRpbCB0aGUgZmlyc3QgZG90KSBvZiBhIEphdmFEb2Mtc3R5bGUKKyMgY29tbWVudCBhcyB0aGUgYnJpZWYgZGVzY3JpcHRpb24uIElmIHNldCB0byBOTywgdGhlIEphdmFEb2MKKyMgY29tbWVudHMgd2lsbCBiZWhhdmUganVzdCBsaWtlIHRoZSBRdC1zdHlsZSBjb21tZW50cyAodGh1cyByZXF1aXJpbmcgYW4KKyMgZXhwbGljdCBAYnJpZWYgY29tbWFuZCBmb3IgYSBicmllZiBkZXNjcmlwdGlvbi4KKworSkFWQURPQ19BVVRPQlJJRUYgICAgICA9IE5PCisKKyMgVGhlIE1VTFRJTElORV9DUFBfSVNfQlJJRUYgdGFnIGNhbiBiZSBzZXQgdG8gWUVTIHRvIG1ha2UgRG94eWdlbgorIyB0cmVhdCBhIG11bHRpLWxpbmUgQysrIHNwZWNpYWwgY29tbWVudCBibG9jayAoaS5lLiBhIGJsb2NrIG9mIC8vISBvciAvLy8KKyMgY29tbWVudHMpIGFzIGEgYnJpZWYgZGVzY3JpcHRpb24uIFRoaXMgdXNlZCB0byBiZSB0aGUgZGVmYXVsdCBiZWhhdmlvdXIuCisjIFRoZSBuZXcgZGVmYXVsdCBpcyB0byB0cmVhdCBhIG11bHRpLWxpbmUgQysrIGNvbW1lbnQgYmxvY2sgYXMgYSBkZXRhaWxlZAorIyBkZXNjcmlwdGlvbi4gU2V0IHRoaXMgdGFnIHRvIFlFUyBpZiB5b3UgcHJlZmVyIHRoZSBvbGQgYmVoYXZpb3VyIGluc3RlYWQuCisKK01VTFRJTElORV9DUFBfSVNfQlJJRUYgPSBOTworCisjIElmIHRoZSBERVRBSUxTX0FUX1RPUCB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIERveHlnZW4KKyMgd2lsbCBvdXRwdXQgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG5lYXIgdGhlIHRvcCwgbGlrZSBKYXZhRG9jLgorIyBJZiBzZXQgdG8gTk8sIHRoZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBhcHBlYXJzIGFmdGVyIHRoZSBtZW1iZXIKKyMgZG9jdW1lbnRhdGlvbi4KKworREVUQUlMU19BVF9UT1AgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIElOSEVSSVRfRE9DUyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIHRoZW4gYW4gdW5kb2N1bWVudGVkCisjIG1lbWJlciBpbmhlcml0cyB0aGUgZG9jdW1lbnRhdGlvbiBmcm9tIGFueSBkb2N1bWVudGVkIG1lbWJlciB0aGF0IGl0CisjIHJlaW1wbGVtZW50cy4KKworSU5IRVJJVF9ET0NTICAgICAgICAgICA9IFlFUworCisjIElmIG1lbWJlciBncm91cGluZyBpcyB1c2VkIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZCB0aGUgRElTVFJJQlVURV9HUk9VUF9ET0MKKyMgdGFnIGlzIHNldCB0byBZRVMsIHRoZW4gZG94eWdlbiB3aWxsIHJldXNlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBmaXJzdAorIyBtZW1iZXIgaW4gdGhlIGdyb3VwIChpZiBhbnkpIGZvciB0aGUgb3RoZXIgbWVtYmVycyBvZiB0aGUgZ3JvdXAuIEJ5IGRlZmF1bHQKKyMgYWxsIG1lbWJlcnMgb2YgYSBncm91cCBtdXN0IGJlIGRvY3VtZW50ZWQgZXhwbGljaXRseS4KKworRElTVFJJQlVURV9HUk9VUF9ET0MgICA9IE5PCisKKyMgVGhlIFRBQl9TSVpFIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIG51bWJlciBvZiBzcGFjZXMgaW4gYSB0YWIuCisjIERveHlnZW4gdXNlcyB0aGlzIHZhbHVlIHRvIHJlcGxhY2UgdGFicyBieSBzcGFjZXMgaW4gY29kZSBmcmFnbWVudHMuCisKK1RBQl9TSVpFICAgICAgICAgICAgICAgPSA4CisKKyMgVGhpcyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIG51bWJlciBvZiBhbGlhc2VzIHRoYXQgYWN0cworIyBhcyBjb21tYW5kcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gQW4gYWxpYXMgaGFzIHRoZSBmb3JtICJuYW1lPXZhbHVlIi4KKyMgRm9yIGV4YW1wbGUgYWRkaW5nICJzaWRlZWZmZWN0PVxwYXIgU2lkZSBFZmZlY3RzOlxuIiB3aWxsIGFsbG93IHlvdSB0bworIyBwdXQgdGhlIGNvbW1hbmQgXHNpZGVlZmZlY3QgKG9yIEBzaWRlZWZmZWN0KSBpbiB0aGUgZG9jdW1lbnRhdGlvbiwgd2hpY2gKKyMgd2lsbCByZXN1bHQgaW4gYSB1c2VyLWRlZmluZWQgcGFyYWdyYXBoIHdpdGggaGVhZGluZyAiU2lkZSBFZmZlY3RzOiIuCisjIFlvdSBjYW4gcHV0IFxuJ3MgaW4gdGhlIHZhbHVlIHBhcnQgb2YgYW4gYWxpYXMgdG8gaW5zZXJ0IG5ld2xpbmVzLgorCitBTElBU0VTICAgICAgICAgICAgICAgID0KKworIyBTZXQgdGhlIE9QVElNSVpFX09VVFBVVF9GT1JfQyB0YWcgdG8gWUVTIGlmIHlvdXIgcHJvamVjdCBjb25zaXN0cyBvZiBDIHNvdXJjZXMKKyMgb25seS4gRG94eWdlbiB3aWxsIHRoZW4gZ2VuZXJhdGUgb3V0cHV0IHRoYXQgaXMgbW9yZSB0YWlsb3JlZCBmb3IgQy4KKyMgRm9yIGluc3RhbmNlLCBzb21lIG9mIHRoZSBuYW1lcyB0aGF0IGFyZSB1c2VkIHdpbGwgYmUgZGlmZmVyZW50LiBUaGUgbGlzdAorIyBvZiBhbGwgbWVtYmVycyB3aWxsIGJlIG9taXR0ZWQsIGV0Yy4KKworT1BUSU1JWkVfT1VUUFVUX0ZPUl9DICA9IE5PCisKKyMgU2V0IHRoZSBPUFRJTUlaRV9PVVRQVVRfSkFWQSB0YWcgdG8gWUVTIGlmIHlvdXIgcHJvamVjdCBjb25zaXN0cyBvZiBKYXZhIHNvdXJjZXMKKyMgb25seS4gRG94eWdlbiB3aWxsIHRoZW4gZ2VuZXJhdGUgb3V0cHV0IHRoYXQgaXMgbW9yZSB0YWlsb3JlZCBmb3IgSmF2YS4KKyMgRm9yIGluc3RhbmNlLCBuYW1lc3BhY2VzIHdpbGwgYmUgcHJlc2VudGVkIGFzIHBhY2thZ2VzLCBxdWFsaWZpZWQgc2NvcGVzCisjIHdpbGwgbG9vayBkaWZmZXJlbnQsIGV0Yy4KKworT1BUSU1JWkVfT1VUUFVUX0pBVkEgICA9IE5PCisKKyMgU2V0IHRoZSBTVUJHUk9VUElORyB0YWcgdG8gWUVTICh0aGUgZGVmYXVsdCkgdG8gYWxsb3cgY2xhc3MgbWVtYmVyIGdyb3VwcyBvZgorIyB0aGUgc2FtZSB0eXBlIChmb3IgaW5zdGFuY2UgYSBncm91cCBvZiBwdWJsaWMgZnVuY3Rpb25zKSB0byBiZSBwdXQgYXMgYQorIyBzdWJncm91cCBvZiB0aGF0IHR5cGUgKGUuZy4gdW5kZXIgdGhlIFB1YmxpYyBGdW5jdGlvbnMgc2VjdGlvbikuIFNldCBpdCB0bworIyBOTyB0byBwcmV2ZW50IHN1Ymdyb3VwaW5nLiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGNhbiBiZSBkb25lIHBlciBjbGFzcyB1c2luZworIyB0aGUgXG5vc3ViZ3JvdXBpbmcgY29tbWFuZC4KKworU1VCR1JPVVBJTkcgICAgICAgICAgICA9IFlFUworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEJ1aWxkIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEVYVFJBQ1RfQUxMIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBhc3N1bWUgYWxsIGVudGl0aWVzIGluCisjIGRvY3VtZW50YXRpb24gYXJlIGRvY3VtZW50ZWQsIGV2ZW4gaWYgbm8gZG9jdW1lbnRhdGlvbiB3YXMgYXZhaWxhYmxlLgorIyBQcml2YXRlIGNsYXNzIG1lbWJlcnMgYW5kIHN0YXRpYyBmaWxlIG1lbWJlcnMgd2lsbCBiZSBoaWRkZW4gdW5sZXNzCisjIHRoZSBFWFRSQUNUX1BSSVZBVEUgYW5kIEVYVFJBQ1RfU1RBVElDIHRhZ3MgYXJlIHNldCB0byBZRVMKKworRVhUUkFDVF9BTEwgICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBFWFRSQUNUX1BSSVZBVEUgdGFnIGlzIHNldCB0byBZRVMgYWxsIHByaXZhdGUgbWVtYmVycyBvZiBhIGNsYXNzCisjIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uCisKK0VYVFJBQ1RfUFJJVkFURSAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgRVhUUkFDVF9TVEFUSUMgdGFnIGlzIHNldCB0byBZRVMgYWxsIHN0YXRpYyBtZW1iZXJzIG9mIGEgZmlsZQorIyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLgorCitFWFRSQUNUX1NUQVRJQyAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEVYVFJBQ1RfTE9DQUxfQ0xBU1NFUyB0YWcgaXMgc2V0IHRvIFlFUyBjbGFzc2VzIChhbmQgc3RydWN0cykKKyMgZGVmaW5lZCBsb2NhbGx5IGluIHNvdXJjZSBmaWxlcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLgorIyBJZiBzZXQgdG8gTk8gb25seSBjbGFzc2VzIGRlZmluZWQgaW4gaGVhZGVyIGZpbGVzIGFyZSBpbmNsdWRlZC4KKworRVhUUkFDVF9MT0NBTF9DTEFTU0VTICA9IFlFUworCisjIElmIHRoZSBISURFX1VORE9DX01FTUJFUlMgdGFnIGlzIHNldCB0byBZRVMsIERveHlnZW4gd2lsbCBoaWRlIGFsbAorIyB1bmRvY3VtZW50ZWQgbWVtYmVycyBvZiBkb2N1bWVudGVkIGNsYXNzZXMsIGZpbGVzIG9yIG5hbWVzcGFjZXMuCisjIElmIHNldCB0byBOTyAodGhlIGRlZmF1bHQpIHRoZXNlIG1lbWJlcnMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUKKyMgdmFyaW91cyBvdmVydmlld3MsIGJ1dCBubyBkb2N1bWVudGF0aW9uIHNlY3Rpb24gaXMgZ2VuZXJhdGVkLgorIyBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IGlmIEVYVFJBQ1RfQUxMIGlzIGVuYWJsZWQuCisKK0hJREVfVU5ET0NfTUVNQkVSUyAgICAgPSBOTworCisjIElmIHRoZSBISURFX1VORE9DX0NMQVNTRVMgdGFnIGlzIHNldCB0byBZRVMsIERveHlnZW4gd2lsbCBoaWRlIGFsbAorIyB1bmRvY3VtZW50ZWQgY2xhc3NlcyB0aGF0IGFyZSBub3JtYWxseSB2aXNpYmxlIGluIHRoZSBjbGFzcyBoaWVyYXJjaHkuCisjIElmIHNldCB0byBOTyAodGhlIGRlZmF1bHQpIHRoZXNlIGNsYXNzZXMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgdmFyaW91cworIyBvdmVydmlld3MuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QgaWYgRVhUUkFDVF9BTEwgaXMgZW5hYmxlZC4KKworSElERV9VTkRPQ19DTEFTU0VTICAgICA9IE5PCisKKyMgSWYgdGhlIEhJREVfRlJJRU5EX0NPTVBPVU5EUyB0YWcgaXMgc2V0IHRvIFlFUywgRG94eWdlbiB3aWxsIGhpZGUgYWxsCisjIGZyaWVuZCAoY2xhc3N8c3RydWN0fHVuaW9uKSBkZWNsYXJhdGlvbnMuCisjIElmIHNldCB0byBOTyAodGhlIGRlZmF1bHQpIHRoZXNlIGRlY2xhcmF0aW9ucyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZQorIyBkb2N1bWVudGF0aW9uLgorCitISURFX0ZSSUVORF9DT01QT1VORFMgID0gTk8KKworIyBJZiB0aGUgSElERV9JTl9CT0RZX0RPQ1MgdGFnIGlzIHNldCB0byBZRVMsIERveHlnZW4gd2lsbCBoaWRlIGFueQorIyBkb2N1bWVudGF0aW9uIGJsb2NrcyBmb3VuZCBpbnNpZGUgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbi4KKyMgSWYgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkgdGhlc2UgYmxvY2tzIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlCisjIGZ1bmN0aW9uJ3MgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBibG9jay4KKworSElERV9JTl9CT0RZX0RPQ1MgICAgICA9IE5PCisKKyMgVGhlIElOVEVSTkFMX0RPQ1MgdGFnIGRldGVybWluZXMgaWYgZG9jdW1lbnRhdGlvbgorIyB0aGF0IGlzIHR5cGVkIGFmdGVyIGEgXGludGVybmFsIGNvbW1hbmQgaXMgaW5jbHVkZWQuIElmIHRoZSB0YWcgaXMgc2V0CisjIHRvIE5PICh0aGUgZGVmYXVsdCkgdGhlbiB0aGUgZG9jdW1lbnRhdGlvbiB3aWxsIGJlIGV4Y2x1ZGVkLgorIyBTZXQgaXQgdG8gWUVTIHRvIGluY2x1ZGUgdGhlIGludGVybmFsIGRvY3VtZW50YXRpb24uCisKK0lOVEVSTkFMX0RPQ1MgICAgICAgICAgPSBOTworCisjIElmIHRoZSBDQVNFX1NFTlNFX05BTUVTIHRhZyBpcyBzZXQgdG8gTk8gdGhlbiBEb3h5Z2VuIHdpbGwgb25seSBnZW5lcmF0ZQorIyBmaWxlIG5hbWVzIGluIGxvd2VyLWNhc2UgbGV0dGVycy4gSWYgc2V0IHRvIFlFUyB1cHBlci1jYXNlIGxldHRlcnMgYXJlIGFsc28KKyMgYWxsb3dlZC4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IGhhdmUgY2xhc3NlcyBvciBmaWxlcyB3aG9zZSBuYW1lcyBvbmx5IGRpZmZlcgorIyBpbiBjYXNlIGFuZCBpZiB5b3VyIGZpbGUgc3lzdGVtIHN1cHBvcnRzIGNhc2Ugc2Vuc2l0aXZlIGZpbGUgbmFtZXMuIFdpbmRvd3MKKyMgdXNlcnMgYXJlIGFkdmlzZWQgdG8gc2V0IHRoaXMgb3B0aW9uIHRvIE5PLgorCitDQVNFX1NFTlNFX05BTUVTICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEhJREVfU0NPUEVfTkFNRVMgdGFnIGlzIHNldCB0byBOTyAodGhlIGRlZmF1bHQpIHRoZW4gRG94eWdlbgorIyB3aWxsIHNob3cgbWVtYmVycyB3aXRoIHRoZWlyIGZ1bGwgY2xhc3MgYW5kIG5hbWVzcGFjZSBzY29wZXMgaW4gdGhlCisjIGRvY3VtZW50YXRpb24uIElmIHNldCB0byBZRVMgdGhlIHNjb3BlIHdpbGwgYmUgaGlkZGVuLgorCitISURFX1NDT1BFX05BTUVTICAgICAgID0gTk8KKworIyBJZiB0aGUgU0hPV19JTkNMVURFX0ZJTEVTIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgdGhlbiBEb3h5Z2VuCisjIHdpbGwgcHV0IGEgbGlzdCBvZiB0aGUgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgYnkgYSBmaWxlIGluIHRoZSBkb2N1bWVudGF0aW9uCisjIG9mIHRoYXQgZmlsZS4KKworU0hPV19JTkNMVURFX0ZJTEVTICAgICA9IFlFUworCisjIElmIHRoZSBJTkxJTkVfSU5GTyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIHRoZW4gYSB0YWcgW2lubGluZV0KKyMgaXMgaW5zZXJ0ZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yIGlubGluZSBtZW1iZXJzLgorCitJTkxJTkVfSU5GTyAgICAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIFNPUlRfTUVNQkVSX0RPQ1MgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSB0aGVuIGRveHlnZW4KKyMgd2lsbCBzb3J0IHRoZSAoZGV0YWlsZWQpIGRvY3VtZW50YXRpb24gb2YgZmlsZSBhbmQgY2xhc3MgbWVtYmVycworIyBhbHBoYWJldGljYWxseSBieSBtZW1iZXIgbmFtZS4gSWYgc2V0IHRvIE5PIHRoZSBtZW1iZXJzIHdpbGwgYXBwZWFyIGluCisjIGRlY2xhcmF0aW9uIG9yZGVyLgorCitTT1JUX01FTUJFUl9ET0NTICAgICAgID0gWUVTCisKKyMgVGhlIEdFTkVSQVRFX1RPRE9MSVNUIHRhZyBjYW4gYmUgdXNlZCB0byBlbmFibGUgKFlFUykgb3IKKyMgZGlzYWJsZSAoTk8pIHRoZSB0b2RvIGxpc3QuIFRoaXMgbGlzdCBpcyBjcmVhdGVkIGJ5IHB1dHRpbmcgXHRvZG8KKyMgY29tbWFuZHMgaW4gdGhlIGRvY3VtZW50YXRpb24uCisKK0dFTkVSQVRFX1RPRE9MSVNUICAgICAgPSBZRVMKKworIyBUaGUgR0VORVJBVEVfVEVTVExJU1QgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSAoWUVTKSBvcgorIyBkaXNhYmxlIChOTykgdGhlIHRlc3QgbGlzdC4gVGhpcyBsaXN0IGlzIGNyZWF0ZWQgYnkgcHV0dGluZyBcdGVzdAorIyBjb21tYW5kcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworR0VORVJBVEVfVEVTVExJU1QgICAgICA9IFlFUworCisjIFRoZSBHRU5FUkFURV9CVUdMSVNUIHRhZyBjYW4gYmUgdXNlZCB0byBlbmFibGUgKFlFUykgb3IKKyMgZGlzYWJsZSAoTk8pIHRoZSBidWcgbGlzdC4gVGhpcyBsaXN0IGlzIGNyZWF0ZWQgYnkgcHV0dGluZyBcYnVnCisjIGNvbW1hbmRzIGluIHRoZSBkb2N1bWVudGF0aW9uLgorCitHRU5FUkFURV9CVUdMSVNUICAgICAgID0gWUVTCisKKyMgVGhlIEdFTkVSQVRFX0RFUFJFQ0FURURMSVNUIHRhZyBjYW4gYmUgdXNlZCB0byBlbmFibGUgKFlFUykgb3IKKyMgZGlzYWJsZSAoTk8pIHRoZSBkZXByZWNhdGVkIGxpc3QuIFRoaXMgbGlzdCBpcyBjcmVhdGVkIGJ5IHB1dHRpbmcKKyMgXGRlcHJlY2F0ZWQgY29tbWFuZHMgaW4gdGhlIGRvY3VtZW50YXRpb24uCisKK0dFTkVSQVRFX0RFUFJFQ0FURURMSVNUPSBZRVMKKworIyBUaGUgRU5BQkxFRF9TRUNUSU9OUyB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIGNvbmRpdGlvbmFsCisjIGRvY3VtZW50YXRpb24gc2VjdGlvbnMsIG1hcmtlZCBieSBcaWYgc2VjdGlvbm5hbWUgLi4uIFxlbmRpZi4KKworRU5BQkxFRF9TRUNUSU9OUyAgICAgICA9CisKKyMgVGhlIE1BWF9JTklUSUFMSVpFUl9MSU5FUyB0YWcgZGV0ZXJtaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgbGluZXMKKyMgdGhlIGluaXRpYWwgdmFsdWUgb2YgYSB2YXJpYWJsZSBvciBkZWZpbmUgY29uc2lzdHMgb2YgZm9yIGl0IHRvIGFwcGVhciBpbgorIyB0aGUgZG9jdW1lbnRhdGlvbi4gSWYgdGhlIGluaXRpYWxpemVyIGNvbnNpc3RzIG9mIG1vcmUgbGluZXMgdGhhbiBzcGVjaWZpZWQKKyMgaGVyZSBpdCB3aWxsIGJlIGhpZGRlbi4gVXNlIGEgdmFsdWUgb2YgMCB0byBoaWRlIGluaXRpYWxpemVycyBjb21wbGV0ZWx5LgorIyBUaGUgYXBwZWFyYW5jZSBvZiB0aGUgaW5pdGlhbGl6ZXIgb2YgaW5kaXZpZHVhbCB2YXJpYWJsZXMgYW5kIGRlZmluZXMgaW4gdGhlCisjIGRvY3VtZW50YXRpb24gY2FuIGJlIGNvbnRyb2xsZWQgdXNpbmcgXHNob3dpbml0aWFsaXplciBvciBcaGlkZWluaXRpYWxpemVyCisjIGNvbW1hbmQgaW4gdGhlIGRvY3VtZW50YXRpb24gcmVnYXJkbGVzcyBvZiB0aGlzIHNldHRpbmcuCisKK01BWF9JTklUSUFMSVpFUl9MSU5FUyAgPSAzMAorCisjIFNldCB0aGUgU0hPV19VU0VEX0ZJTEVTIHRhZyB0byBOTyB0byBkaXNhYmxlIHRoZSBsaXN0IG9mIGZpbGVzIGdlbmVyYXRlZAorIyBhdCB0aGUgYm90dG9tIG9mIHRoZSBkb2N1bWVudGF0aW9uIG9mIGNsYXNzZXMgYW5kIHN0cnVjdHMuIElmIHNldCB0byBZRVMgdGhlCisjIGxpc3Qgd2lsbCBtZW50aW9uIHRoZSBmaWxlcyB0aGF0IHdlcmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgZG9jdW1lbnRhdGlvbi4KKworU0hPV19VU0VEX0ZJTEVTICAgICAgICA9IFlFUworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHdhcm5pbmcgYW5kIHByb2dyZXNzIG1lc3NhZ2VzCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgVGhlIFFVSUVUIHRhZyBjYW4gYmUgdXNlZCB0byB0dXJuIG9uL29mZiB0aGUgbWVzc2FnZXMgdGhhdCBhcmUgZ2VuZXJhdGVkCisjIGJ5IGRveHlnZW4uIFBvc3NpYmxlIHZhbHVlcyBhcmUgWUVTIGFuZCBOTy4gSWYgbGVmdCBibGFuayBOTyBpcyB1c2VkLgorCitRVUlFVCAgICAgICAgICAgICAgICAgID0gWUVTCisKKyMgVGhlIFdBUk5JTkdTIHRhZyBjYW4gYmUgdXNlZCB0byB0dXJuIG9uL29mZiB0aGUgd2FybmluZyBtZXNzYWdlcyB0aGF0IGFyZQorIyBnZW5lcmF0ZWQgYnkgZG94eWdlbi4gUG9zc2libGUgdmFsdWVzIGFyZSBZRVMgYW5kIE5PLiBJZiBsZWZ0IGJsYW5rCisjIE5PIGlzIHVzZWQuCisKK1dBUk5JTkdTICAgICAgICAgICAgICAgPSBZRVMKKworIyBJZiBXQVJOX0lGX1VORE9DVU1FTlRFRCBpcyBzZXQgdG8gWUVTLCB0aGVuIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSB3YXJuaW5ncworIyBmb3IgdW5kb2N1bWVudGVkIG1lbWJlcnMuIElmIEVYVFJBQ1RfQUxMIGlzIHNldCB0byBZRVMgdGhlbiB0aGlzIGZsYWcgd2lsbAorIyBhdXRvbWF0aWNhbGx5IGJlIGRpc2FibGVkLgorCitXQVJOX0lGX1VORE9DVU1FTlRFRCAgID0gWUVTCisKKyMgSWYgV0FSTl9JRl9ET0NfRVJST1IgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGdlbmVyYXRlIHdhcm5pbmdzIGZvcgorIyBwb3RlbnRpYWwgZXJyb3JzIGluIHRoZSBkb2N1bWVudGF0aW9uLCBzdWNoIGFzIG5vdCBkb2N1bWVudGluZyBzb21lCisjIHBhcmFtZXRlcnMgaW4gYSBkb2N1bWVudGVkIGZ1bmN0aW9uLCBvciBkb2N1bWVudGluZyBwYXJhbWV0ZXJzIHRoYXQKKyMgZG9uJ3QgZXhpc3Qgb3IgdXNpbmcgbWFya3VwIGNvbW1hbmRzIHdyb25nbHkuCisKK1dBUk5fSUZfRE9DX0VSUk9SICAgICAgPSBZRVMKKworIyBUaGUgV0FSTl9GT1JNQVQgdGFnIGRldGVybWluZXMgdGhlIGZvcm1hdCBvZiB0aGUgd2FybmluZyBtZXNzYWdlcyB0aGF0CisjIGRveHlnZW4gY2FuIHByb2R1Y2UuIFRoZSBzdHJpbmcgc2hvdWxkIGNvbnRhaW4gdGhlICRmaWxlLCAkbGluZSwgYW5kICR0ZXh0CisjIHRhZ3MsIHdoaWNoIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIGZpbGUgYW5kIGxpbmUgbnVtYmVyIGZyb20gd2hpY2ggdGhlCisjIHdhcm5pbmcgb3JpZ2luYXRlZCBhbmQgdGhlIHdhcm5pbmcgdGV4dC4KKworV0FSTl9GT1JNQVQgICAgICAgICAgICA9ICIkZmlsZTokbGluZTogJHRleHQiCisKKyMgVGhlIFdBUk5fTE9HRklMRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGZpbGUgdG8gd2hpY2ggd2FybmluZworIyBhbmQgZXJyb3IgbWVzc2FnZXMgc2hvdWxkIGJlIHdyaXR0ZW4uIElmIGxlZnQgYmxhbmsgdGhlIG91dHB1dCBpcyB3cml0dGVuCisjIHRvIHN0ZGVyci4KKworV0FSTl9MT0dGSUxFICAgICAgICAgICA9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGlucHV0IGZpbGVzCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgVGhlIElOUFVUIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBmaWxlcyBhbmQvb3IgZGlyZWN0b3JpZXMgdGhhdCBjb250YWluCisjIGRvY3VtZW50ZWQgc291cmNlIGZpbGVzLiBZb3UgbWF5IGVudGVyIGZpbGUgbmFtZXMgbGlrZSAibXlmaWxlLmNwcCIgb3IKKyMgZGlyZWN0b3JpZXMgbGlrZSAiL3Vzci9zcmMvbXlwcm9qZWN0Ii4gU2VwYXJhdGUgdGhlIGZpbGVzIG9yIGRpcmVjdG9yaWVzCisjIHdpdGggc3BhY2VzLgorCitJTlBVVCAgICAgICAgICAgICAgICAgID0gQHRvcF9zcmNkaXJAL3NyYyBcCisJCQkgQHRvcF9idWlsZGRpckAvc3JjCisKKyMgSWYgdGhlIHZhbHVlIG9mIHRoZSBJTlBVVCB0YWcgY29udGFpbnMgZGlyZWN0b3JpZXMsIHlvdSBjYW4gdXNlIHRoZQorIyBGSUxFX1BBVFRFUk5TIHRhZyB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIHdpbGRjYXJkIHBhdHRlcm4gKGxpa2UgKi5jcHAKKyMgYW5kICouaCkgdG8gZmlsdGVyIG91dCB0aGUgc291cmNlLWZpbGVzIGluIHRoZSBkaXJlY3Rvcmllcy4gSWYgbGVmdAorIyBibGFuayB0aGUgZm9sbG93aW5nIHBhdHRlcm5zIGFyZSB0ZXN0ZWQ6CisjICouYyAqLmNjICouY3h4ICouY3BwICouYysrICouamF2YSAqLmlpICouaXh4ICouaXBwICouaSsrICouaW5sICouaCAqLmhoICouaHh4ICouaHBwCisjICouaCsrICouaWRsICoub2RsICouY3MgKi5waHAgKi5waHAzICouaW5jCisKK0ZJTEVfUEFUVEVSTlMgICAgICAgICAgPSAqLmMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouaCBcCisJICAgICAgICAgICAgICAgICAqLmwgXAorCQkJICoueQorCisjIFRoZSBSRUNVUlNJVkUgdGFnIGNhbiBiZSB1c2VkIHRvIHR1cm4gc3BlY2lmeSB3aGV0aGVyIG9yIG5vdCBzdWJkaXJlY3RvcmllcworIyBzaG91bGQgYmUgc2VhcmNoZWQgZm9yIGlucHV0IGZpbGVzIGFzIHdlbGwuIFBvc3NpYmxlIHZhbHVlcyBhcmUgWUVTIGFuZCBOTy4KKyMgSWYgbGVmdCBibGFuayBOTyBpcyB1c2VkLgorCitSRUNVUlNJVkUgICAgICAgICAgICAgID0gWUVTCisKKyMgVGhlIEVYQ0xVREUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgZmlsZXMgYW5kL29yIGRpcmVjdG9yaWVzIHRoYXQgc2hvdWxkCisjIGV4Y2x1ZGVkIGZyb20gdGhlIElOUFVUIHNvdXJjZSBmaWxlcy4gVGhpcyB3YXkgeW91IGNhbiBlYXNpbHkgZXhjbHVkZSBhCisjIHN1YmRpcmVjdG9yeSBmcm9tIGEgZGlyZWN0b3J5IHRyZWUgd2hvc2Ugcm9vdCBpcyBzcGVjaWZpZWQgd2l0aCB0aGUgSU5QVVQgdGFnLgorCitFWENMVURFICAgICAgICAgICAgICAgID0gQHRvcF9zcmNkaXJAL3NyYy9zY2FuLWdyYW0uYyBcCisJICAgICAgICAgICAgICAgICBAdG9wX3NyY2RpckAvc3JjL3NjYW4tc2tlbC5jIFwKKwkgICAgICAgICAgICAgICAgIEB0b3BfYnVpbGRkaXJAL3NyYy9wYXJzZS0qLltjaF0KKworIyBUaGUgRVhDTFVERV9TWU1MSU5LUyB0YWcgY2FuIGJlIHVzZWQgc2VsZWN0IHdoZXRoZXIgb3Igbm90IGZpbGVzIG9yCisjIGRpcmVjdG9yaWVzIHRoYXQgYXJlIHN5bWJvbGljIGxpbmtzIChhIFVuaXggZmlsZSBzeXN0ZW0gZmVhdHVyZSkgYXJlCisjIGV4Y2x1ZGVkIGZyb20gdGhlIGlucHV0LgorCitFWENMVURFX1NZTUxJTktTICAgICAgID0gWUVTCisKKyMgSWYgdGhlIHZhbHVlIG9mIHRoZSBJTlBVVCB0YWcgY29udGFpbnMgZGlyZWN0b3JpZXMsIHlvdSBjYW4gdXNlIHRoZQorIyBFWENMVURFX1BBVFRFUk5TIHRhZyB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIHdpbGRjYXJkIHBhdHRlcm5zIHRvIGV4Y2x1ZGUKKyMgY2VydGFpbiBmaWxlcyBmcm9tIHRob3NlIGRpcmVjdG9yaWVzLgorCitFWENMVURFX1BBVFRFUk5TICAgICAgID0KKworIyBUaGUgRVhBTVBMRV9QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGZpbGVzIG9yCisjIGRpcmVjdG9yaWVzIHRoYXQgY29udGFpbiBleGFtcGxlIGNvZGUgZnJhZ21lbnRzIHRoYXQgYXJlIGluY2x1ZGVkIChzZWUKKyMgdGhlIFxpbmNsdWRlIGNvbW1hbmQpLgorCitFWEFNUExFX1BBVEggICAgICAgICAgID0KKworIyBJZiB0aGUgdmFsdWUgb2YgdGhlIEVYQU1QTEVfUEFUSCB0YWcgY29udGFpbnMgZGlyZWN0b3JpZXMsIHlvdSBjYW4gdXNlIHRoZQorIyBFWEFNUExFX1BBVFRFUk5TIHRhZyB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIHdpbGRjYXJkIHBhdHRlcm4gKGxpa2UgKi5jcHAKKyMgYW5kICouaCkgdG8gZmlsdGVyIG91dCB0aGUgc291cmNlLWZpbGVzIGluIHRoZSBkaXJlY3Rvcmllcy4gSWYgbGVmdAorIyBibGFuayBhbGwgZmlsZXMgYXJlIGluY2x1ZGVkLgorCitFWEFNUExFX1BBVFRFUk5TICAgICAgID0KKworIyBJZiB0aGUgRVhBTVBMRV9SRUNVUlNJVkUgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBzdWJkaXJlY3RvcmllcyB3aWxsIGJlCisjIHNlYXJjaGVkIGZvciBpbnB1dCBmaWxlcyB0byBiZSB1c2VkIHdpdGggdGhlIFxpbmNsdWRlIG9yIFxkb250aW5jbHVkZQorIyBjb21tYW5kcyBpcnJlc3BlY3RpdmUgb2YgdGhlIHZhbHVlIG9mIHRoZSBSRUNVUlNJVkUgdGFnLgorIyBQb3NzaWJsZSB2YWx1ZXMgYXJlIFlFUyBhbmQgTk8uIElmIGxlZnQgYmxhbmsgTk8gaXMgdXNlZC4KKworRVhBTVBMRV9SRUNVUlNJVkUgICAgICA9IE5PCisKKyMgVGhlIElNQUdFX1BBVEggdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgZmlsZXMgb3IKKyMgZGlyZWN0b3JpZXMgdGhhdCBjb250YWluIGltYWdlIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uIChzZWUKKyMgdGhlIFxpbWFnZSBjb21tYW5kKS4KKworSU1BR0VfUEFUSCAgICAgICAgICAgICA9CisKKyMgVGhlIElOUFVUX0ZJTFRFUiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHByb2dyYW0gdGhhdCBkb3h5Z2VuIHNob3VsZAorIyBpbnZva2UgdG8gZmlsdGVyIGZvciBlYWNoIGlucHV0IGZpbGUuIERveHlnZW4gd2lsbCBpbnZva2UgdGhlIGZpbHRlciBwcm9ncmFtCisjIGJ5IGV4ZWN1dGluZyAodmlhIHBvcGVuKCkpIHRoZSBjb21tYW5kIDxmaWx0ZXI+IDxpbnB1dC1maWxlPiwgd2hlcmUgPGZpbHRlcj4KKyMgaXMgdGhlIHZhbHVlIG9mIHRoZSBJTlBVVF9GSUxURVIgdGFnLCBhbmQgPGlucHV0LWZpbGU+IGlzIHRoZSBuYW1lIG9mIGFuCisjIGlucHV0IGZpbGUuIERveHlnZW4gd2lsbCB0aGVuIHVzZSB0aGUgb3V0cHV0IHRoYXQgdGhlIGZpbHRlciBwcm9ncmFtIHdyaXRlcworIyB0byBzdGFuZGFyZCBvdXRwdXQuCisKK0lOUFVUX0ZJTFRFUiAgICAgICAgICAgPQorCisjIElmIHRoZSBGSUxURVJfU09VUkNFX0ZJTEVTIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgaW5wdXQgZmlsdGVyIChpZiBzZXQgdXNpbmcKKyMgSU5QVVRfRklMVEVSKSB3aWxsIGJlIHVzZWQgdG8gZmlsdGVyIHRoZSBpbnB1dCBmaWxlcyB3aGVuIHByb2R1Y2luZyBzb3VyY2UKKyMgZmlsZXMgdG8gYnJvd3NlIChpLmUuIHdoZW4gU09VUkNFX0JST1dTRVIgaXMgc2V0IHRvIFlFUykuCisKK0ZJTFRFUl9TT1VSQ0VfRklMRVMgICAgPSBOTworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHNvdXJjZSBicm93c2luZworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBTT1VSQ0VfQlJPV1NFUiB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGEgbGlzdCBvZiBzb3VyY2UgZmlsZXMgd2lsbAorIyBiZSBnZW5lcmF0ZWQuIERvY3VtZW50ZWQgZW50aXRpZXMgd2lsbCBiZSBjcm9zcy1yZWZlcmVuY2VkIHdpdGggdGhlc2Ugc291cmNlcy4KKworU09VUkNFX0JST1dTRVIgICAgICAgICA9IE5PCisKKyMgU2V0dGluZyB0aGUgSU5MSU5FX1NPVVJDRVMgdGFnIHRvIFlFUyB3aWxsIGluY2x1ZGUgdGhlIGJvZHkKKyMgb2YgZnVuY3Rpb25zIGFuZCBjbGFzc2VzIGRpcmVjdGx5IGluIHRoZSBkb2N1bWVudGF0aW9uLgorCitJTkxJTkVfU09VUkNFUyAgICAgICAgID0gTk8KKworIyBTZXR0aW5nIHRoZSBTVFJJUF9DT0RFX0NPTU1FTlRTIHRhZyB0byBZRVMgKHRoZSBkZWZhdWx0KSB3aWxsIGluc3RydWN0CisjIGRveHlnZW4gdG8gaGlkZSBhbnkgc3BlY2lhbCBjb21tZW50IGJsb2NrcyBmcm9tIGdlbmVyYXRlZCBzb3VyY2UgY29kZQorIyBmcmFnbWVudHMuIE5vcm1hbCBDIGFuZCBDKysgY29tbWVudHMgd2lsbCBhbHdheXMgcmVtYWluIHZpc2libGUuCisKK1NUUklQX0NPREVfQ09NTUVOVFMgICAgPSBZRVMKKworIyBJZiB0aGUgUkVGRVJFTkNFRF9CWV9SRUxBVElPTiB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpCisjIHRoZW4gZm9yIGVhY2ggZG9jdW1lbnRlZCBmdW5jdGlvbiBhbGwgZG9jdW1lbnRlZAorIyBmdW5jdGlvbnMgcmVmZXJlbmNpbmcgaXQgd2lsbCBiZSBsaXN0ZWQuCisKK1JFRkVSRU5DRURfQllfUkVMQVRJT04gPSBZRVMKKworIyBJZiB0aGUgUkVGRVJFTkNFU19SRUxBVElPTiB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpCisjIHRoZW4gZm9yIGVhY2ggZG9jdW1lbnRlZCBmdW5jdGlvbiBhbGwgZG9jdW1lbnRlZCBlbnRpdGllcworIyBjYWxsZWQvdXNlZCBieSB0aGF0IGZ1bmN0aW9uIHdpbGwgYmUgbGlzdGVkLgorCitSRUZFUkVOQ0VTX1JFTEFUSU9OICAgID0gWUVTCisKKyMgSWYgdGhlIFZFUkJBVElNX0hFQURFUlMgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSB0aGVuIERveHlnZW4KKyMgd2lsbCBnZW5lcmF0ZSBhIHZlcmJhdGltIGNvcHkgb2YgdGhlIGhlYWRlciBmaWxlIGZvciBlYWNoIGNsYXNzIGZvcgorIyB3aGljaCBhbiBpbmNsdWRlIGlzIHNwZWNpZmllZC4gU2V0IHRvIE5PIHRvIGRpc2FibGUgdGhpcy4KKworVkVSQkFUSU1fSEVBREVSUyAgICAgICA9IFlFUworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBhbHBoYWJldGljYWwgY2xhc3MgaW5kZXgKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgQUxQSEFCRVRJQ0FMX0lOREVYIHRhZyBpcyBzZXQgdG8gWUVTLCBhbiBhbHBoYWJldGljYWwgaW5kZXgKKyMgb2YgYWxsIGNvbXBvdW5kcyB3aWxsIGJlIGdlbmVyYXRlZC4gRW5hYmxlIHRoaXMgaWYgdGhlIHByb2plY3QKKyMgY29udGFpbnMgYSBsb3Qgb2YgY2xhc3Nlcywgc3RydWN0cywgdW5pb25zIG9yIGludGVyZmFjZXMuCisKK0FMUEhBQkVUSUNBTF9JTkRFWCAgICAgPSBZRVMKKworIyBJZiB0aGUgYWxwaGFiZXRpY2FsIGluZGV4IGlzIGVuYWJsZWQgKHNlZSBBTFBIQUJFVElDQUxfSU5ERVgpIHRoZW4KKyMgdGhlIENPTFNfSU5fQUxQSEFfSU5ERVggdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIG51bWJlciBvZiBjb2x1bW5zCisjIGluIHdoaWNoIHRoaXMgbGlzdCB3aWxsIGJlIHNwbGl0IChjYW4gYmUgYSBudW1iZXIgaW4gdGhlIHJhbmdlIFsxLi4yMF0pCisKK0NPTFNfSU5fQUxQSEFfSU5ERVggICAgPSA1CisKKyMgSW4gY2FzZSBhbGwgY2xhc3NlcyBpbiBhIHByb2plY3Qgc3RhcnQgd2l0aCBhIGNvbW1vbiBwcmVmaXgsIGFsbAorIyBjbGFzc2VzIHdpbGwgYmUgcHV0IHVuZGVyIHRoZSBzYW1lIGhlYWRlciBpbiB0aGUgYWxwaGFiZXRpY2FsIGluZGV4LgorIyBUaGUgSUdOT1JFX1BSRUZJWCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBwcmVmaXhlcyB0aGF0CisjIHNob3VsZCBiZSBpZ25vcmVkIHdoaWxlIGdlbmVyYXRpbmcgdGhlIGluZGV4IGhlYWRlcnMuCisKK0lHTk9SRV9QUkVGSVggICAgICAgICAgPQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBIVE1MIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9IVE1MIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgRG94eWdlbiB3aWxsCisjIGdlbmVyYXRlIEhUTUwgb3V0cHV0LgorCitHRU5FUkFURV9IVE1MICAgICAgICAgID0gWUVTCisKKyMgVGhlIEhUTUxfT1VUUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUgdGhlIEhUTUwgZG9jcyB3aWxsIGJlIHB1dC4KKyMgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZQorIyBwdXQgaW4gZnJvbnQgb2YgaXQuIElmIGxlZnQgYmxhbmsgYGh0bWwnIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBwYXRoLgorCitIVE1MX09VVFBVVCAgICAgICAgICAgID0gaHRtbAorCisjIFRoZSBIVE1MX0ZJTEVfRVhURU5TSU9OIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBmaWxlIGV4dGVuc2lvbiBmb3IKKyMgZWFjaCBnZW5lcmF0ZWQgSFRNTCBwYWdlIChmb3IgZXhhbXBsZTogLmh0bSwucGhwLC5hc3ApLiBJZiBpdCBpcyBsZWZ0IGJsYW5rCisjIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBmaWxlcyB3aXRoIC5odG1sIGV4dGVuc2lvbi4KKworSFRNTF9GSUxFX0VYVEVOU0lPTiAgICA9IC5odG1sCisKKyMgVGhlIEhUTUxfSEVBREVSIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgcGVyc29uYWwgSFRNTCBoZWFkZXIgZm9yCisjIGVhY2ggZ2VuZXJhdGVkIEhUTUwgcGFnZS4gSWYgaXQgaXMgbGVmdCBibGFuayBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYQorIyBzdGFuZGFyZCBoZWFkZXIuCisKK0hUTUxfSEVBREVSICAgICAgICAgICAgPQorCisjIFRoZSBIVE1MX0ZPT1RFUiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHBlcnNvbmFsIEhUTUwgZm9vdGVyIGZvcgorIyBlYWNoIGdlbmVyYXRlZCBIVE1MIHBhZ2UuIElmIGl0IGlzIGxlZnQgYmxhbmsgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEKKyMgc3RhbmRhcmQgZm9vdGVyLgorCitIVE1MX0ZPT1RFUiAgICAgICAgICAgID0KKworIyBUaGUgSFRNTF9TVFlMRVNIRUVUIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgdXNlci1kZWZpbmVkIGNhc2NhZGluZworIyBzdHlsZSBzaGVldCB0aGF0IGlzIHVzZWQgYnkgZWFjaCBIVE1MIHBhZ2UuIEl0IGNhbiBiZSB1c2VkIHRvCisjIGZpbmUtdHVuZSB0aGUgbG9vayBvZiB0aGUgSFRNTCBvdXRwdXQuIElmIHRoZSB0YWcgaXMgbGVmdCBibGFuayBkb3h5Z2VuCisjIHdpbGwgZ2VuZXJhdGUgYSBkZWZhdWx0IHN0eWxlIHNoZWV0CisKK0hUTUxfU1RZTEVTSEVFVCAgICAgICAgPQorCisjIElmIHRoZSBIVE1MX0FMSUdOX01FTUJFUlMgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBtZW1iZXJzIG9mIGNsYXNzZXMsCisjIGZpbGVzIG9yIG5hbWVzcGFjZXMgd2lsbCBiZSBhbGlnbmVkIGluIEhUTUwgdXNpbmcgdGFibGVzLiBJZiBzZXQgdG8KKyMgTk8gYSBidWxsZXQgbGlzdCB3aWxsIGJlIHVzZWQuCisKK0hUTUxfQUxJR05fTUVNQkVSUyAgICAgPSBZRVMKKworIyBJZiB0aGUgR0VORVJBVEVfSFRNTEhFTFAgdGFnIGlzIHNldCB0byBZRVMsIGFkZGl0aW9uYWwgaW5kZXggZmlsZXMKKyMgd2lsbCBiZSBnZW5lcmF0ZWQgdGhhdCBjYW4gYmUgdXNlZCBhcyBpbnB1dCBmb3IgdG9vbHMgbGlrZSB0aGUKKyMgTWljcm9zb2Z0IEhUTUwgaGVscCB3b3Jrc2hvcCB0byBnZW5lcmF0ZSBhIGNvbXByZXNzZWQgSFRNTCBoZWxwIGZpbGUgKC5jaG0pCisjIG9mIHRoZSBnZW5lcmF0ZWQgSFRNTCBkb2N1bWVudGF0aW9uLgorCitHRU5FUkFURV9IVE1MSEVMUCAgICAgID0gTk8KKworIyBJZiB0aGUgR0VORVJBVEVfSFRNTEhFTFAgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBDSE1fRklMRSB0YWcgY2FuCisjIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgZmlsZSBuYW1lIG9mIHRoZSByZXN1bHRpbmcgLmNobSBmaWxlLiBZb3UKKyMgY2FuIGFkZCBhIHBhdGggaW4gZnJvbnQgb2YgdGhlIGZpbGUgaWYgdGhlIHJlc3VsdCBzaG91bGQgbm90IGJlCisjIHdyaXR0ZW4gdG8gdGhlIGh0bWwgb3V0cHV0IGRpci4KKworQ0hNX0ZJTEUgICAgICAgICAgICAgICA9CisKKyMgSWYgdGhlIEdFTkVSQVRFX0hUTUxIRUxQIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgSEhDX0xPQ0FUSU9OIHRhZyBjYW4KKyMgYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiAoYWJzb2x1dGUgcGF0aCBpbmNsdWRpbmcgZmlsZSBuYW1lKSBvZgorIyB0aGUgSFRNTCBoZWxwIGNvbXBpbGVyIChoaGMuZXhlKS4gSWYgbm9uLWVtcHR5IGRveHlnZW4gd2lsbCB0cnkgdG8gcnVuCisjIHRoZSBIVE1MIGhlbHAgY29tcGlsZXIgb24gdGhlIGdlbmVyYXRlZCBpbmRleC5oaHAuCisKK0hIQ19MT0NBVElPTiAgICAgICAgICAgPQorCisjIElmIHRoZSBHRU5FUkFURV9IVE1MSEVMUCB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIEdFTkVSQVRFX0NISSBmbGFnCisjIGNvbnRyb2xzIGlmIGEgc2VwYXJhdGUgLmNoaSBpbmRleCBmaWxlIGlzIGdlbmVyYXRlZCAoWUVTKSBvciB0aGF0CisjIGl0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgbWFzdGVyIC5jaG0gZmlsZSAoTk8pLgorCitHRU5FUkFURV9DSEkgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgR0VORVJBVEVfSFRNTEhFTFAgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBCSU5BUllfVE9DIGZsYWcKKyMgY29udHJvbHMgd2hldGhlciBhIGJpbmFyeSB0YWJsZSBvZiBjb250ZW50cyBpcyBnZW5lcmF0ZWQgKFlFUykgb3IgYQorIyBub3JtYWwgdGFibGUgb2YgY29udGVudHMgKE5PKSBpbiB0aGUgLmNobSBmaWxlLgorCitCSU5BUllfVE9DICAgICAgICAgICAgID0gTk8KKworIyBUaGUgVE9DX0VYUEFORCBmbGFnIGNhbiBiZSBzZXQgdG8gWUVTIHRvIGFkZCBleHRyYSBpdGVtcyBmb3IgZ3JvdXAgbWVtYmVycworIyB0byB0aGUgY29udGVudHMgb2YgdGhlIEhUTUwgaGVscCBkb2N1bWVudGF0aW9uIGFuZCB0byB0aGUgdHJlZSB2aWV3LgorCitUT0NfRVhQQU5EICAgICAgICAgICAgID0gTk8KKworIyBUaGUgRElTQUJMRV9JTkRFWCB0YWcgY2FuIGJlIHVzZWQgdG8gdHVybiBvbi9vZmYgdGhlIGNvbmRlbnNlZCBpbmRleCBhdAorIyB0b3Agb2YgZWFjaCBIVE1MIHBhZ2UuIFRoZSB2YWx1ZSBOTyAodGhlIGRlZmF1bHQpIGVuYWJsZXMgdGhlIGluZGV4IGFuZAorIyB0aGUgdmFsdWUgWUVTIGRpc2FibGVzIGl0LgorCitESVNBQkxFX0lOREVYICAgICAgICAgID0gTk8KKworIyBUaGlzIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIG51bWJlciBvZiBlbnVtIHZhbHVlcyAocmFuZ2UgWzEuLjIwXSkKKyMgdGhhdCBkb3h5Z2VuIHdpbGwgZ3JvdXAgb24gb25lIGxpbmUgaW4gdGhlIGdlbmVyYXRlZCBIVE1MIGRvY3VtZW50YXRpb24uCisKK0VOVU1fVkFMVUVTX1BFUl9MSU5FICAgPSA0CisKKyMgSWYgdGhlIEdFTkVSQVRFX1RSRUVWSUVXIHRhZyBpcyBzZXQgdG8gWUVTLCBhIHNpZGUgcGFuZWwgd2lsbCBiZQorIyBnZW5lcmF0ZWQgY29udGFpbmluZyBhIHRyZWUtbGlrZSBpbmRleCBzdHJ1Y3R1cmUgKGp1c3QgbGlrZSB0aGUgb25lIHRoYXQKKyMgaXMgZ2VuZXJhdGVkIGZvciBIVE1MIEhlbHApLiBGb3IgdGhpcyB0byB3b3JrIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzCisjIEphdmFTY3JpcHQsIERIVE1MLCBDU1MgYW5kIGZyYW1lcyBpcyByZXF1aXJlZCAoZm9yIGluc3RhbmNlIE1vemlsbGEgMS4wKywKKyMgTmV0c2NhcGUgNi4wKywgSW50ZXJuZXQgZXhwbG9yZXIgNS4wKywgb3IgS29ucXVlcm9yKS4gV2luZG93cyB1c2VycyBhcmUKKyMgcHJvYmFibHkgYmV0dGVyIG9mZiB1c2luZyB0aGUgSFRNTCBoZWxwIGZlYXR1cmUuCisKK0dFTkVSQVRFX1RSRUVWSUVXICAgICAgPSBZRVMKKworIyBJZiB0aGUgdHJlZXZpZXcgaXMgZW5hYmxlZCAoc2VlIEdFTkVSQVRFX1RSRUVWSUVXKSB0aGVuIHRoaXMgdGFnIGNhbiBiZQorIyB1c2VkIHRvIHNldCB0aGUgaW5pdGlhbCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgZnJhbWUgaW4gd2hpY2ggdGhlIHRyZWUKKyMgaXMgc2hvd24uCisKK1RSRUVWSUVXX1dJRFRIICAgICAgICAgPSAyNTAKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgTGFUZVggb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEdFTkVSQVRFX0xBVEVYIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgRG94eWdlbiB3aWxsCisjIGdlbmVyYXRlIExhdGV4IG91dHB1dC4KKworR0VORVJBVEVfTEFURVggICAgICAgICA9IE5PCisKKyMgVGhlIExBVEVYX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBMYVRlWCBkb2NzIHdpbGwgYmUgcHV0LgorIyBJZiBhIHJlbGF0aXZlIHBhdGggaXMgZW50ZXJlZCB0aGUgdmFsdWUgb2YgT1VUUFVUX0RJUkVDVE9SWSB3aWxsIGJlCisjIHB1dCBpbiBmcm9udCBvZiBpdC4gSWYgbGVmdCBibGFuayBgbGF0ZXgnIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBwYXRoLgorCitMQVRFWF9PVVRQVVQgICAgICAgICAgID0gbGF0ZXgKKworIyBUaGUgTEFURVhfQ01EX05BTUUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIExhVGVYIGNvbW1hbmQgbmFtZSB0byBiZQorIyBpbnZva2VkLiBJZiBsZWZ0IGJsYW5rIGBsYXRleCcgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IGNvbW1hbmQgbmFtZS4KKworTEFURVhfQ01EX05BTUUgICAgICAgICA9IGxhdGV4CisKKyMgVGhlIE1BS0VJTkRFWF9DTURfTkFNRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgY29tbWFuZCBuYW1lIHRvCisjIGdlbmVyYXRlIGluZGV4IGZvciBMYVRlWC4gSWYgbGVmdCBibGFuayBgbWFrZWluZGV4JyB3aWxsIGJlIHVzZWQgYXMgdGhlCisjIGRlZmF1bHQgY29tbWFuZCBuYW1lLgorCitNQUtFSU5ERVhfQ01EX05BTUUgICAgID0gbWFrZWluZGV4CisKKyMgSWYgdGhlIENPTVBBQ1RfTEFURVggdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiBnZW5lcmF0ZXMgbW9yZSBjb21wYWN0CisjIExhVGVYIGRvY3VtZW50cy4gVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBzbWFsbCBwcm9qZWN0cyBhbmQgbWF5IGhlbHAgdG8KKyMgc2F2ZSBzb21lIHRyZWVzIGluIGdlbmVyYWwuCisKK0NPTVBBQ1RfTEFURVggICAgICAgICAgPSBOTworCisjIFRoZSBQQVBFUl9UWVBFIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHBhcGVyIHR5cGUgdGhhdCBpcyB1c2VkCisjIGJ5IHRoZSBwcmludGVyLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOiBhNCwgYTR3aWRlLCBsZXR0ZXIsIGxlZ2FsIGFuZAorIyBleGVjdXRpdmUuIElmIGxlZnQgYmxhbmsgYTR3aWRlIHdpbGwgYmUgdXNlZC4KKworUEFQRVJfVFlQRSAgICAgICAgICAgICA9IGE0d2lkZQorCisjIFRoZSBFWFRSQV9QQUNLQUdFUyB0YWcgY2FuIGJlIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgbmFtZXMgb2YgTGFUZVgKKyMgcGFja2FnZXMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIExhVGVYIG91dHB1dC4KKworRVhUUkFfUEFDS0FHRVMgICAgICAgICA9CisKKyMgVGhlIExBVEVYX0hFQURFUiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHBlcnNvbmFsIExhVGVYIGhlYWRlciBmb3IKKyMgdGhlIGdlbmVyYXRlZCBsYXRleCBkb2N1bWVudC4gVGhlIGhlYWRlciBzaG91bGQgY29udGFpbiBldmVyeXRoaW5nIHVudGlsCisjIHRoZSBmaXJzdCBjaGFwdGVyLiBJZiBpdCBpcyBsZWZ0IGJsYW5rIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhCisjIHN0YW5kYXJkIGhlYWRlci4gTm90aWNlOiBvbmx5IHVzZSB0aGlzIHRhZyBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmchCisKK0xBVEVYX0hFQURFUiAgICAgICAgICAgPQorCisjIElmIHRoZSBQREZfSFlQRVJMSU5LUyB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIExhVGVYIHRoYXQgaXMgZ2VuZXJhdGVkCisjIGlzIHByZXBhcmVkIGZvciBjb252ZXJzaW9uIHRvIHBkZiAodXNpbmcgcHMycGRmKS4gVGhlIHBkZiBmaWxlIHdpbGwKKyMgY29udGFpbiBsaW5rcyAoanVzdCBsaWtlIHRoZSBIVE1MIG91dHB1dCkgaW5zdGVhZCBvZiBwYWdlIHJlZmVyZW5jZXMKKyMgVGhpcyBtYWtlcyB0aGUgb3V0cHV0IHN1aXRhYmxlIGZvciBvbmxpbmUgYnJvd3NpbmcgdXNpbmcgYSBwZGYgdmlld2VyLgorCitQREZfSFlQRVJMSU5LUyAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIFVTRV9QREZMQVRFWCB0YWcgaXMgc2V0IHRvIFlFUywgcGRmbGF0ZXggd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YKKyMgcGxhaW4gbGF0ZXggaW4gdGhlIGdlbmVyYXRlZCBNYWtlZmlsZS4gU2V0IHRoaXMgb3B0aW9uIHRvIFlFUyB0byBnZXQgYQorIyBoaWdoZXIgcXVhbGl0eSBQREYgZG9jdW1lbnRhdGlvbi4KKworVVNFX1BERkxBVEVYICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBMQVRFWF9CQVRDSE1PREUgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBhZGQgdGhlIFxcYmF0Y2htb2RlLgorIyBjb21tYW5kIHRvIHRoZSBnZW5lcmF0ZWQgTGFUZVggZmlsZXMuIFRoaXMgd2lsbCBpbnN0cnVjdCBMYVRlWCB0byBrZWVwCisjIHJ1bm5pbmcgaWYgZXJyb3JzIG9jY3VyLCBpbnN0ZWFkIG9mIGFza2luZyB0aGUgdXNlciBmb3IgaGVscC4KKyMgVGhpcyBvcHRpb24gaXMgYWxzbyB1c2VkIHdoZW4gZ2VuZXJhdGluZyBmb3JtdWxhcyBpbiBIVE1MLgorCitMQVRFWF9CQVRDSE1PREUgICAgICAgID0gWUVTCisKKyMgSWYgTEFURVhfSElERV9JTkRJQ0VTIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgbm90CisjIGluY2x1ZGUgdGhlIGluZGV4IGNoYXB0ZXJzIChzdWNoIGFzIEZpbGUgSW5kZXgsIENvbXBvdW5kIEluZGV4LCBldGMuKQorIyBpbiB0aGUgb3V0cHV0LgorCitMQVRFWF9ISURFX0lORElDRVMgICAgID0gTk8KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgUlRGIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9SVEYgdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiB3aWxsIGdlbmVyYXRlIFJURiBvdXRwdXQKKyMgVGhlIFJURiBvdXRwdXQgaXMgb3B0aW1pc2VkIGZvciBXb3JkIDk3IGFuZCBtYXkgbm90IGxvb2sgdmVyeSBwcmV0dHkgd2l0aAorIyBvdGhlciBSVEYgcmVhZGVycyBvciBlZGl0b3JzLgorCitHRU5FUkFURV9SVEYgICAgICAgICAgID0gTk8KKworIyBUaGUgUlRGX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBSVEYgZG9jcyB3aWxsIGJlIHB1dC4KKyMgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZQorIyBwdXQgaW4gZnJvbnQgb2YgaXQuIElmIGxlZnQgYmxhbmsgYHJ0Zicgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHBhdGguCisKK1JURl9PVVRQVVQgICAgICAgICAgICAgPSBydGYKKworIyBJZiB0aGUgQ09NUEFDVF9SVEYgdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiBnZW5lcmF0ZXMgbW9yZSBjb21wYWN0CisjIFJURiBkb2N1bWVudHMuIFRoaXMgbWF5IGJlIHVzZWZ1bCBmb3Igc21hbGwgcHJvamVjdHMgYW5kIG1heSBoZWxwIHRvCisjIHNhdmUgc29tZSB0cmVlcyBpbiBnZW5lcmFsLgorCitDT01QQUNUX1JURiAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgUlRGX0hZUEVSTElOS1MgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBSVEYgdGhhdCBpcyBnZW5lcmF0ZWQKKyMgd2lsbCBjb250YWluIGh5cGVybGluayBmaWVsZHMuIFRoZSBSVEYgZmlsZSB3aWxsCisjIGNvbnRhaW4gbGlua3MgKGp1c3QgbGlrZSB0aGUgSFRNTCBvdXRwdXQpIGluc3RlYWQgb2YgcGFnZSByZWZlcmVuY2VzLgorIyBUaGlzIG1ha2VzIHRoZSBvdXRwdXQgc3VpdGFibGUgZm9yIG9ubGluZSBicm93c2luZyB1c2luZyBXT1JEIG9yIG90aGVyCisjIHByb2dyYW1zIHdoaWNoIHN1cHBvcnQgdGhvc2UgZmllbGRzLgorIyBOb3RlOiB3b3JkcGFkICh3cml0ZSkgYW5kIG90aGVycyBkbyBub3Qgc3VwcG9ydCBsaW5rcy4KKworUlRGX0hZUEVSTElOS1MgICAgICAgICA9IE5PCisKKyMgTG9hZCBzdHlsZXNoZWV0IGRlZmluaXRpb25zIGZyb20gZmlsZS4gU3ludGF4IGlzIHNpbWlsYXIgdG8gZG94eWdlbidzCisjIGNvbmZpZyBmaWxlLCBpLmUuIGEgc2VyaWVzIG9mIGFzc2lnbWVudHMuIFlvdSBvbmx5IGhhdmUgdG8gcHJvdmlkZQorIyByZXBsYWNlbWVudHMsIG1pc3NpbmcgZGVmaW5pdGlvbnMgYXJlIHNldCB0byB0aGVpciBkZWZhdWx0IHZhbHVlLgorCitSVEZfU1RZTEVTSEVFVF9GSUxFICAgID0KKworIyBTZXQgb3B0aW9uYWwgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGdlbmVyYXRpb24gb2YgYW4gcnRmIGRvY3VtZW50LgorIyBTeW50YXggaXMgc2ltaWxhciB0byBkb3h5Z2VuJ3MgY29uZmlnIGZpbGUuCisKK1JURl9FWFRFTlNJT05TX0ZJTEUgICAgPQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBtYW4gcGFnZSBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfTUFOIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgRG94eWdlbiB3aWxsCisjIGdlbmVyYXRlIG1hbiBwYWdlcworCitHRU5FUkFURV9NQU4gICAgICAgICAgID0gTk8KKworIyBUaGUgTUFOX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBtYW4gcGFnZXMgd2lsbCBiZSBwdXQuCisjIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUKKyMgcHV0IGluIGZyb250IG9mIGl0LiBJZiBsZWZ0IGJsYW5rIGBtYW4nIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBwYXRoLgorCitNQU5fT1VUUFVUICAgICAgICAgICAgID0gbWFuCisKKyMgVGhlIE1BTl9FWFRFTlNJT04gdGFnIGRldGVybWluZXMgdGhlIGV4dGVuc2lvbiB0aGF0IGlzIGFkZGVkIHRvCisjIHRoZSBnZW5lcmF0ZWQgbWFuIHBhZ2VzIChkZWZhdWx0IGlzIHRoZSBzdWJyb3V0aW5lJ3Mgc2VjdGlvbiAuMykKKworTUFOX0VYVEVOU0lPTiAgICAgICAgICA9IC4zCisKKyMgSWYgdGhlIE1BTl9MSU5LUyB0YWcgaXMgc2V0IHRvIFlFUyBhbmQgRG94eWdlbiBnZW5lcmF0ZXMgbWFuIG91dHB1dCwKKyMgdGhlbiBpdCB3aWxsIGdlbmVyYXRlIG9uZSBhZGRpdGlvbmFsIG1hbiBmaWxlIGZvciBlYWNoIGVudGl0eQorIyBkb2N1bWVudGVkIGluIHRoZSByZWFsIG1hbiBwYWdlKHMpLiBUaGVzZSBhZGRpdGlvbmFsIGZpbGVzCisjIG9ubHkgc291cmNlIHRoZSByZWFsIG1hbiBwYWdlLCBidXQgd2l0aG91dCB0aGVtIHRoZSBtYW4gY29tbWFuZAorIyB3b3VsZCBiZSB1bmFibGUgdG8gZmluZCB0aGUgY29ycmVjdCBwYWdlLiBUaGUgZGVmYXVsdCBpcyBOTy4KKworTUFOX0xJTktTICAgICAgICAgICAgICA9IE5PCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIFhNTCBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfWE1MIHRhZyBpcyBzZXQgdG8gWUVTIERveHlnZW4gd2lsbAorIyBnZW5lcmF0ZSBhbiBYTUwgZmlsZSB0aGF0IGNhcHR1cmVzIHRoZSBzdHJ1Y3R1cmUgb2YKKyMgdGhlIGNvZGUgaW5jbHVkaW5nIGFsbCBkb2N1bWVudGF0aW9uLiBOb3RlIHRoYXQgdGhpcworIyBmZWF0dXJlIGlzIHN0aWxsIGV4cGVyaW1lbnRhbCBhbmQgaW5jb21wbGV0ZSBhdCB0aGUKKyMgbW9tZW50LgorCitHRU5FUkFURV9YTUwgICAgICAgICAgID0gTk8KKworIyBUaGUgWE1MX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBYTUwgcGFnZXMgd2lsbCBiZSBwdXQuCisjIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUKKyMgcHV0IGluIGZyb250IG9mIGl0LiBJZiBsZWZ0IGJsYW5rIGB4bWwnIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBwYXRoLgorCitYTUxfT1VUUFVUICAgICAgICAgICAgID0geG1sCisKKyMgVGhlIFhNTF9TQ0hFTUEgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYW4gWE1MIHNjaGVtYSwKKyMgd2hpY2ggY2FuIGJlIHVzZWQgYnkgYSB2YWxpZGF0aW5nIFhNTCBwYXJzZXIgdG8gY2hlY2sgdGhlCisjIHN5bnRheCBvZiB0aGUgWE1MIGZpbGVzLgorCitYTUxfU0NIRU1BICAgICAgICAgICAgID0KKworIyBUaGUgWE1MX0RURCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhbiBYTUwgRFRELAorIyB3aGljaCBjYW4gYmUgdXNlZCBieSBhIHZhbGlkYXRpbmcgWE1MIHBhcnNlciB0byBjaGVjayB0aGUKKyMgc3ludGF4IG9mIHRoZSBYTUwgZmlsZXMuCisKK1hNTF9EVEQgICAgICAgICAgICAgICAgPQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIEF1dG9HZW4gRGVmaW5pdGlvbnMgb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEdFTkVSQVRFX0FVVE9HRU5fREVGIHRhZyBpcyBzZXQgdG8gWUVTIERveHlnZW4gd2lsbAorIyBnZW5lcmF0ZSBhbiBBdXRvR2VuIERlZmluaXRpb25zIChzZWUgYXV0b2dlbi5zZi5uZXQpIGZpbGUKKyMgdGhhdCBjYXB0dXJlcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb2RlIGluY2x1ZGluZyBhbGwKKyMgZG9jdW1lbnRhdGlvbi4gTm90ZSB0aGF0IHRoaXMgZmVhdHVyZSBpcyBzdGlsbCBleHBlcmltZW50YWwKKyMgYW5kIGluY29tcGxldGUgYXQgdGhlIG1vbWVudC4KKworR0VORVJBVEVfQVVUT0dFTl9ERUYgICA9IE5PCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIFBlcmwgbW9kdWxlIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9QRVJMTU9EIHRhZyBpcyBzZXQgdG8gWUVTIERveHlnZW4gd2lsbAorIyBnZW5lcmF0ZSBhIFBlcmwgbW9kdWxlIGZpbGUgdGhhdCBjYXB0dXJlcyB0aGUgc3RydWN0dXJlIG9mCisjIHRoZSBjb2RlIGluY2x1ZGluZyBhbGwgZG9jdW1lbnRhdGlvbi4gTm90ZSB0aGF0IHRoaXMKKyMgZmVhdHVyZSBpcyBzdGlsbCBleHBlcmltZW50YWwgYW5kIGluY29tcGxldGUgYXQgdGhlCisjIG1vbWVudC4KKworR0VORVJBVEVfUEVSTE1PRCAgICAgICA9IE5PCisKKyMgSWYgdGhlIFBFUkxNT0RfTEFURVggdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiB3aWxsIGdlbmVyYXRlCisjIHRoZSBuZWNlc3NhcnkgTWFrZWZpbGUgcnVsZXMsIFBlcmwgc2NyaXB0cyBhbmQgTGFUZVggY29kZSB0byBiZSBhYmxlCisjIHRvIGdlbmVyYXRlIFBERiBhbmQgRFZJIG91dHB1dCBmcm9tIHRoZSBQZXJsIG1vZHVsZSBvdXRwdXQuCisKK1BFUkxNT0RfTEFURVggICAgICAgICAgPSBOTworCisjIElmIHRoZSBQRVJMTU9EX1BSRVRUWSB0YWcgaXMgc2V0IHRvIFlFUyB0aGUgUGVybCBtb2R1bGUgb3V0cHV0IHdpbGwgYmUKKyMgbmljZWx5IGZvcm1hdHRlZCBzbyBpdCBjYW4gYmUgcGFyc2VkIGJ5IGEgaHVtYW4gcmVhZGVyLiAgVGhpcyBpcyB1c2VmdWwKKyMgaWYgeW91IHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGlzIGdvaW5nIG9uLiAgT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoaXMKKyMgdGFnIGlzIHNldCB0byBOTyB0aGUgc2l6ZSBvZiB0aGUgUGVybCBtb2R1bGUgb3V0cHV0IHdpbGwgYmUgbXVjaCBzbWFsbGVyCisjIGFuZCBQZXJsIHdpbGwgcGFyc2UgaXQganVzdCB0aGUgc2FtZS4KKworUEVSTE1PRF9QUkVUVFkgICAgICAgICA9IFlFUworCisjIFRoZSBuYW1lcyBvZiB0aGUgbWFrZSB2YXJpYWJsZXMgaW4gdGhlIGdlbmVyYXRlZCBkb3h5cnVsZXMubWFrZSBmaWxlCisjIGFyZSBwcmVmaXhlZCB3aXRoIHRoZSBzdHJpbmcgY29udGFpbmVkIGluIFBFUkxNT0RfTUFLRVZBUl9QUkVGSVguCisjIFRoaXMgaXMgdXNlZnVsIHNvIGRpZmZlcmVudCBkb3h5cnVsZXMubWFrZSBmaWxlcyBpbmNsdWRlZCBieSB0aGUgc2FtZQorIyBNYWtlZmlsZSBkb24ndCBvdmVyd3JpdGUgZWFjaCBvdGhlcidzIHZhcmlhYmxlcy4KKworUEVSTE1PRF9NQUtFVkFSX1BSRUZJWCA9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIHByZXByb2Nlc3NvcgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBFTkFCTEVfUFJFUFJPQ0VTU0lORyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIERveHlnZW4gd2lsbAorIyBldmFsdWF0ZSBhbGwgQy1wcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBmb3VuZCBpbiB0aGUgc291cmNlcyBhbmQgaW5jbHVkZQorIyBmaWxlcy4KKworRU5BQkxFX1BSRVBST0NFU1NJTkcgICA9IFlFUworCisjIElmIHRoZSBNQUNST19FWFBBTlNJT04gdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiB3aWxsIGV4cGFuZCBhbGwgbWFjcm8KKyMgbmFtZXMgaW4gdGhlIHNvdXJjZSBjb2RlLiBJZiBzZXQgdG8gTk8gKHRoZSBkZWZhdWx0KSBvbmx5IGNvbmRpdGlvbmFsCisjIGNvbXBpbGF0aW9uIHdpbGwgYmUgcGVyZm9ybWVkLiBNYWNybyBleHBhbnNpb24gY2FuIGJlIGRvbmUgaW4gYSBjb250cm9sbGVkCisjIHdheSBieSBzZXR0aW5nIEVYUEFORF9PTkxZX1BSRURFRiB0byBZRVMuCisKK01BQ1JPX0VYUEFOU0lPTiAgICAgICAgPSBOTworCisjIElmIHRoZSBFWFBBTkRfT05MWV9QUkVERUYgYW5kIE1BQ1JPX0VYUEFOU0lPTiB0YWdzIGFyZSBib3RoIHNldCB0byBZRVMKKyMgdGhlbiB0aGUgbWFjcm8gZXhwYW5zaW9uIGlzIGxpbWl0ZWQgdG8gdGhlIG1hY3JvcyBzcGVjaWZpZWQgd2l0aCB0aGUKKyMgUFJFREVGSU5FRCBhbmQgRVhQQU5EX0FTX1BSRURFRklORUQgdGFncy4KKworRVhQQU5EX09OTFlfUFJFREVGICAgICA9IE5PCisKKyMgSWYgdGhlIFNFQVJDSF9JTkNMVURFUyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIHRoZSBpbmNsdWRlcyBmaWxlcworIyBpbiB0aGUgSU5DTFVERV9QQVRIIChzZWUgYmVsb3cpIHdpbGwgYmUgc2VhcmNoIGlmIGEgI2luY2x1ZGUgaXMgZm91bmQuCisKK1NFQVJDSF9JTkNMVURFUyAgICAgICAgPSBZRVMKKworIyBUaGUgSU5DTFVERV9QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGRpcmVjdG9yaWVzIHRoYXQKKyMgY29udGFpbiBpbmNsdWRlIGZpbGVzIHRoYXQgYXJlIG5vdCBpbnB1dCBmaWxlcyBidXQgc2hvdWxkIGJlIHByb2Nlc3NlZCBieQorIyB0aGUgcHJlcHJvY2Vzc29yLgorCitJTkNMVURFX1BBVEggICAgICAgICAgID0KKworIyBZb3UgY2FuIHVzZSB0aGUgSU5DTFVERV9GSUxFX1BBVFRFUk5TIHRhZyB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIHdpbGRjYXJkCisjIHBhdHRlcm5zIChsaWtlICouaCBhbmQgKi5ocHApIHRvIGZpbHRlciBvdXQgdGhlIGhlYWRlci1maWxlcyBpbiB0aGUKKyMgZGlyZWN0b3JpZXMuIElmIGxlZnQgYmxhbmssIHRoZSBwYXR0ZXJucyBzcGVjaWZpZWQgd2l0aCBGSUxFX1BBVFRFUk5TIHdpbGwKKyMgYmUgdXNlZC4KKworSU5DTFVERV9GSUxFX1BBVFRFUk5TICA9CisKKyMgVGhlIFBSRURFRklORUQgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgbWFjcm8gbmFtZXMgdGhhdAorIyBhcmUgZGVmaW5lZCBiZWZvcmUgdGhlIHByZXByb2Nlc3NvciBpcyBzdGFydGVkIChzaW1pbGFyIHRvIHRoZSAtRCBvcHRpb24gb2YKKyMgZ2NjKS4gVGhlIGFyZ3VtZW50IG9mIHRoZSB0YWcgaXMgYSBsaXN0IG9mIG1hY3JvcyBvZiB0aGUgZm9ybTogbmFtZQorIyBvciBuYW1lPWRlZmluaXRpb24gKG5vIHNwYWNlcykuIElmIHRoZSBkZWZpbml0aW9uIGFuZCB0aGUgPSBhcmUKKyMgb21pdHRlZCA9MSBpcyBhc3N1bWVkLgorCitQUkVERUZJTkVEICAgICAgICAgICAgID0KKworIyBJZiB0aGUgTUFDUk9fRVhQQU5TSU9OIGFuZCBFWFBBTkRfT05MWV9QUkVERUYgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuCisjIHRoaXMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBsaXN0IG9mIG1hY3JvIG5hbWVzIHRoYXQgc2hvdWxkIGJlIGV4cGFuZGVkLgorIyBUaGUgbWFjcm8gZGVmaW5pdGlvbiB0aGF0IGlzIGZvdW5kIGluIHRoZSBzb3VyY2VzIHdpbGwgYmUgdXNlZC4KKyMgVXNlIHRoZSBQUkVERUZJTkVEIHRhZyBpZiB5b3Ugd2FudCB0byB1c2UgYSBkaWZmZXJlbnQgbWFjcm8gZGVmaW5pdGlvbi4KKworRVhQQU5EX0FTX0RFRklORUQgICAgICA9CisKKyMgSWYgdGhlIFNLSVBfRlVOQ1RJT05fTUFDUk9TIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgdGhlbgorIyBkb3h5Z2VuJ3MgcHJlcHJvY2Vzc29yIHdpbGwgcmVtb3ZlIGFsbCBmdW5jdGlvbi1saWtlIG1hY3JvcyB0aGF0IGFyZSBhbG9uZQorIyBvbiBhIGxpbmUsIGhhdmUgYW4gYWxsIHVwcGVyY2FzZSBuYW1lLCBhbmQgZG8gbm90IGVuZCB3aXRoIGEgc2VtaWNvbG9uLiBTdWNoCisjIGZ1bmN0aW9uIG1hY3JvcyBhcmUgdHlwaWNhbGx5IHVzZWQgZm9yIGJvaWxlci1wbGF0ZSBjb2RlLCBhbmQgd2lsbCBjb25mdXNlIHRoZQorIyBwYXJzZXIgaWYgbm90IHJlbW92ZWQuCisKK1NLSVBfRlVOQ1RJT05fTUFDUk9TICAgPSBZRVMKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uOjphZGR0aW9ucyByZWxhdGVkIHRvIGV4dGVybmFsIHJlZmVyZW5jZXMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUaGUgVEFHRklMRVMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgdGFnZmlsZXMuCisjIE9wdGlvbmFsbHkgYW4gaW5pdGlhbCBsb2NhdGlvbiBvZiB0aGUgZXh0ZXJuYWwgZG9jdW1lbnRhdGlvbgorIyBjYW4gYmUgYWRkZWQgZm9yIGVhY2ggdGFnZmlsZS4gVGhlIGZvcm1hdCBvZiBhIHRhZyBmaWxlIHdpdGhvdXQKKyMgdGhpcyBsb2NhdGlvbiBpcyBhcyBmb2xsb3dzOgorIyAgIFRBR0ZJTEVTID0gZmlsZTEgZmlsZTIgLi4uCisjIEFkZGluZyBsb2NhdGlvbiBmb3IgdGhlIHRhZyBmaWxlcyBpcyBkb25lIGFzIGZvbGxvd3M6CisjICAgVEFHRklMRVMgPSBmaWxlMT1sb2MxICJmaWxlMiA9IGxvYzIiIC4uLgorIyB3aGVyZSAibG9jMSIgYW5kICJsb2MyIiBjYW4gYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUgcGF0aHMgb3IKKyMgVVJMcy4gSWYgYSBsb2NhdGlvbiBpcyBwcmVzZW50IGZvciBlYWNoIHRhZywgdGhlIGluc3RhbGxkb3ggdG9vbAorIyBkb2VzIG5vdCBoYXZlIHRvIGJlIHJ1biB0byBjb3JyZWN0IHRoZSBsaW5rcy4KKyMgTm90ZSB0aGF0IGVhY2ggdGFnIGZpbGUgbXVzdCBoYXZlIGEgdW5pcXVlIG5hbWUKKyMgKHdoZXJlIHRoZSBuYW1lIGRvZXMgTk9UIGluY2x1ZGUgdGhlIHBhdGgpCisjIElmIGEgdGFnIGZpbGUgaXMgbm90IGxvY2F0ZWQgaW4gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBkb3h5Z2VuCisjIGlzIHJ1biwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IHRoZSBwYXRoIHRvIHRoZSB0YWdmaWxlIGhlcmUuCisKK1RBR0ZJTEVTICAgICAgICAgICAgICAgPQorCisjIFdoZW4gYSBmaWxlIG5hbWUgaXMgc3BlY2lmaWVkIGFmdGVyIEdFTkVSQVRFX1RBR0ZJTEUsIGRveHlnZW4gd2lsbCBjcmVhdGUKKyMgYSB0YWcgZmlsZSB0aGF0IGlzIGJhc2VkIG9uIHRoZSBpbnB1dCBmaWxlcyBpdCByZWFkcy4KKworR0VORVJBVEVfVEFHRklMRSAgICAgICA9CisKKyMgSWYgdGhlIEFMTEVYVEVSTkFMUyB0YWcgaXMgc2V0IHRvIFlFUyBhbGwgZXh0ZXJuYWwgY2xhc3NlcyB3aWxsIGJlIGxpc3RlZAorIyBpbiB0aGUgY2xhc3MgaW5kZXguIElmIHNldCB0byBOTyBvbmx5IHRoZSBpbmhlcml0ZWQgZXh0ZXJuYWwgY2xhc3NlcworIyB3aWxsIGJlIGxpc3RlZC4KKworQUxMRVhURVJOQUxTICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEVYVEVSTkFMX0dST1VQUyB0YWcgaXMgc2V0IHRvIFlFUyBhbGwgZXh0ZXJuYWwgZ3JvdXBzIHdpbGwgYmUgbGlzdGVkCisjIGluIHRoZSBtb2R1bGVzIGluZGV4LiBJZiBzZXQgdG8gTk8sIG9ubHkgdGhlIGN1cnJlbnQgcHJvamVjdCdzIGdyb3VwcyB3aWxsCisjIGJlIGxpc3RlZC4KKworRVhURVJOQUxfR1JPVVBTICAgICAgICA9IFlFUworCisjIFRoZSBQRVJMX1BBVEggc2hvdWxkIGJlIHRoZSBhYnNvbHV0ZSBwYXRoIGFuZCBuYW1lIG9mIHRoZSBwZXJsIHNjcmlwdAorIyBpbnRlcnByZXRlciAoaS5lLiB0aGUgcmVzdWx0IG9mIGB3aGljaCBwZXJsJykuCisKK1BFUkxfUEFUSCAgICAgICAgICAgICAgPSBAUEVSTEAKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgZG90IHRvb2wKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgQ0xBU1NfRElBR1JBTVMgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwKKyMgZ2VuZXJhdGUgYSBpbmhlcml0YW5jZSBkaWFncmFtIChpbiBIVE1MLCBSVEYgYW5kIExhVGVYKSBmb3IgY2xhc3NlcyB3aXRoIGJhc2Ugb3IKKyMgc3VwZXIgY2xhc3Nlcy4gU2V0dGluZyB0aGUgdGFnIHRvIE5PIHR1cm5zIHRoZSBkaWFncmFtcyBvZmYuIE5vdGUgdGhhdCB0aGlzCisjIG9wdGlvbiBpcyBzdXBlcmNlZGVkIGJ5IHRoZSBIQVZFX0RPVCBvcHRpb24gYmVsb3cuIFRoaXMgaXMgb25seSBhIGZhbGxiYWNrLiBJdCBpcworIyByZWNvbW1lbmRlZCB0byBpbnN0YWxsIGFuZCB1c2UgZG90LCBzaW5jZSBpdCB5aWVsZHMgbW9yZSBwb3dlcmZ1bCBncmFwaHMuCisKK0NMQVNTX0RJQUdSQU1TICAgICAgICAgPSBZRVMKKworIyBJZiBzZXQgdG8gWUVTLCB0aGUgaW5oZXJpdGFuY2UgYW5kIGNvbGxhYm9yYXRpb24gZ3JhcGhzIHdpbGwgaGlkZQorIyBpbmhlcml0YW5jZSBhbmQgdXNhZ2UgcmVsYXRpb25zIGlmIHRoZSB0YXJnZXQgaXMgdW5kb2N1bWVudGVkCisjIG9yIGlzIG5vdCBhIGNsYXNzLgorCitISURFX1VORE9DX1JFTEFUSU9OUyAgID0gWUVTCisKKyMgSWYgeW91IHNldCB0aGUgSEFWRV9ET1QgdGFnIHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBhc3N1bWUgdGhlIGRvdCB0b29sIGlzCisjIGF2YWlsYWJsZSBmcm9tIHRoZSBwYXRoLiBUaGlzIHRvb2wgaXMgcGFydCBvZiBHcmFwaHZpeiwgYSBncmFwaCB2aXN1YWxpemF0aW9uCisjIHRvb2xraXQgZnJvbSBBVCZUIGFuZCBMdWNlbnQgQmVsbCBMYWJzLiBUaGUgb3RoZXIgb3B0aW9ucyBpbiB0aGlzIHNlY3Rpb24KKyMgaGF2ZSBubyBlZmZlY3QgaWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkKKworSEFWRV9ET1QgICAgICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBDTEFTU19HUkFQSCBhbmQgSEFWRV9ET1QgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4KKyMgd2lsbCBnZW5lcmF0ZSBhIGdyYXBoIGZvciBlYWNoIGRvY3VtZW50ZWQgY2xhc3Mgc2hvd2luZyB0aGUgZGlyZWN0IGFuZAorIyBpbmRpcmVjdCBpbmhlcml0YW5jZSByZWxhdGlvbnMuIFNldHRpbmcgdGhpcyB0YWcgdG8gWUVTIHdpbGwgZm9yY2UgdGhlCisjIHRoZSBDTEFTU19ESUFHUkFNUyB0YWcgdG8gTk8uCisKK0NMQVNTX0dSQVBIICAgICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgQ09MTEFCT1JBVElPTl9HUkFQSCBhbmQgSEFWRV9ET1QgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4KKyMgd2lsbCBnZW5lcmF0ZSBhIGdyYXBoIGZvciBlYWNoIGRvY3VtZW50ZWQgY2xhc3Mgc2hvd2luZyB0aGUgZGlyZWN0IGFuZAorIyBpbmRpcmVjdCBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbmNpZXMgKGluaGVyaXRhbmNlLCBjb250YWlubWVudCwgYW5kCisjIGNsYXNzIHJlZmVyZW5jZXMgdmFyaWFibGVzKSBvZiB0aGUgY2xhc3Mgd2l0aCBvdGhlciBkb2N1bWVudGVkIGNsYXNzZXMuCisKK0NPTExBQk9SQVRJT05fR1JBUEggICAgPSBZRVMKKworIyBJZiB0aGUgVU1MX0xPT0sgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGluaGVyaXRhbmNlIGFuZAorIyBjb2xsYWJvcmF0aW9uIGRpYWdyYW1zIGluIGEgc3R5bGUgc2ltaWxhciB0byB0aGUgT01HJ3MgVW5pZmllZCBNb2RlbGluZworIyBMYW5ndWFnZS4KKworVU1MX0xPT0sgICAgICAgICAgICAgICA9IE5PCisKKyMgSWYgc2V0IHRvIFlFUywgdGhlIGluaGVyaXRhbmNlIGFuZCBjb2xsYWJvcmF0aW9uIGdyYXBocyB3aWxsIHNob3cgdGhlCisjIHJlbGF0aW9ucyBiZXR3ZWVuIHRlbXBsYXRlcyBhbmQgdGhlaXIgaW5zdGFuY2VzLgorCitURU1QTEFURV9SRUxBVElPTlMgICAgID0gWUVTCisKKyMgSWYgdGhlIEVOQUJMRV9QUkVQUk9DRVNTSU5HLCBTRUFSQ0hfSU5DTFVERVMsIElOQ0xVREVfR1JBUEgsIGFuZCBIQVZFX0RPVAorIyB0YWdzIGFyZSBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgZ3JhcGggZm9yIGVhY2ggZG9jdW1lbnRlZAorIyBmaWxlIHNob3dpbmcgdGhlIGRpcmVjdCBhbmQgaW5kaXJlY3QgaW5jbHVkZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGZpbGUgd2l0aAorIyBvdGhlciBkb2N1bWVudGVkIGZpbGVzLgorCitJTkNMVURFX0dSQVBIICAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEVOQUJMRV9QUkVQUk9DRVNTSU5HLCBTRUFSQ0hfSU5DTFVERVMsIElOQ0xVREVEX0JZX0dSQVBILCBhbmQKKyMgSEFWRV9ET1QgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGdyYXBoIGZvciBlYWNoCisjIGRvY3VtZW50ZWQgaGVhZGVyIGZpbGUgc2hvd2luZyB0aGUgZG9jdW1lbnRlZCBmaWxlcyB0aGF0IGRpcmVjdGx5IG9yCisjIGluZGlyZWN0bHkgaW5jbHVkZSB0aGlzIGZpbGUuCisKK0lOQ0xVREVEX0JZX0dSQVBIICAgICAgPSBZRVMKKworIyBJZiB0aGUgQ0FMTF9HUkFQSCBhbmQgSEFWRV9ET1QgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbAorIyBnZW5lcmF0ZSBhIGNhbGwgZGVwZW5kZW5jeSBncmFwaCBmb3IgZXZlcnkgZ2xvYmFsIGZ1bmN0aW9uIG9yIGNsYXNzIG1ldGhvZC4KKyMgTm90ZSB0aGF0IGVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgc2lnbmlmaWNhbnRseSBpbmNyZWFzZSB0aGUgdGltZSBvZiBhIHJ1bi4KKyMgU28gaW4gbW9zdCBjYXNlcyBpdCB3aWxsIGJlIGJldHRlciB0byBlbmFibGUgY2FsbCBncmFwaHMgZm9yIHNlbGVjdGVkCisjIGZ1bmN0aW9ucyBvbmx5IHVzaW5nIHRoZSBcY2FsbGdyYXBoIGNvbW1hbmQuCisKK0NBTExfR1JBUEggICAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBHUkFQSElDQUxfSElFUkFSQ0hZIGFuZCBIQVZFX0RPVCB0YWdzIGFyZSBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbgorIyB3aWxsIGdyYXBoaWNhbCBoaWVyYXJjaHkgb2YgYWxsIGNsYXNzZXMgaW5zdGVhZCBvZiBhIHRleHR1YWwgb25lLgorCitHUkFQSElDQUxfSElFUkFSQ0hZICAgID0gWUVTCisKKyMgVGhlIERPVF9JTUFHRV9GT1JNQVQgdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgaW1hZ2UgZm9ybWF0IG9mIHRoZSBpbWFnZXMKKyMgZ2VuZXJhdGVkIGJ5IGRvdC4gUG9zc2libGUgdmFsdWVzIGFyZSBwbmcsIGpwZywgb3IgZ2lmCisjIElmIGxlZnQgYmxhbmsgcG5nIHdpbGwgYmUgdXNlZC4KKworRE9UX0lNQUdFX0ZPUk1BVCAgICAgICA9IHBuZworCisjIFRoZSB0YWcgRE9UX1BBVEggY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgcGF0aCB3aGVyZSB0aGUgZG90IHRvb2wgY2FuIGJlCisjIGZvdW5kLiBJZiBsZWZ0IGJsYW5rLCBpdCBpcyBhc3N1bWVkIHRoZSBkb3QgdG9vbCBjYW4gYmUgZm91bmQgb24gdGhlIHBhdGguCisKK0RPVF9QQVRIICAgICAgICAgICAgICAgPQorCisjIFRoZSBET1RGSUxFX0RJUlMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgZGlyZWN0b3JpZXMgdGhhdAorIyBjb250YWluIGRvdCBmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiAoc2VlIHRoZQorIyBcZG90ZmlsZSBjb21tYW5kKS4KKworRE9URklMRV9ESVJTICAgICAgICAgICA9CisKKyMgVGhlIE1BWF9ET1RfR1JBUEhfV0lEVEggdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgbWF4aW11bSBhbGxvd2VkIHdpZHRoCisjIChpbiBwaXhlbHMpIG9mIHRoZSBncmFwaHMgZ2VuZXJhdGVkIGJ5IGRvdC4gSWYgYSBncmFwaCBiZWNvbWVzIGxhcmdlciB0aGFuCisjIHRoaXMgdmFsdWUsIGRveHlnZW4gd2lsbCB0cnkgdG8gdHJ1bmNhdGUgdGhlIGdyYXBoLCBzbyB0aGF0IGl0IGZpdHMgd2l0aGluCisjIHRoZSBzcGVjaWZpZWQgY29uc3RyYWludC4gQmV3YXJlIHRoYXQgbW9zdCBicm93c2VycyBjYW5ub3QgY29wZSB3aXRoIHZlcnkKKyMgbGFyZ2UgaW1hZ2VzLgorCitNQVhfRE9UX0dSQVBIX1dJRFRIICAgID0gMTAyNAorCisjIFRoZSBNQVhfRE9UX0dSQVBIX0hFSUdIVCB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBtYXhpbXVtIGFsbG93cyBoZWlnaHQKKyMgKGluIHBpeGVscykgb2YgdGhlIGdyYXBocyBnZW5lcmF0ZWQgYnkgZG90LiBJZiBhIGdyYXBoIGJlY29tZXMgbGFyZ2VyIHRoYW4KKyMgdGhpcyB2YWx1ZSwgZG94eWdlbiB3aWxsIHRyeSB0byB0cnVuY2F0ZSB0aGUgZ3JhcGgsIHNvIHRoYXQgaXQgZml0cyB3aXRoaW4KKyMgdGhlIHNwZWNpZmllZCBjb25zdHJhaW50LiBCZXdhcmUgdGhhdCBtb3N0IGJyb3dzZXJzIGNhbm5vdCBjb3BlIHdpdGggdmVyeQorIyBsYXJnZSBpbWFnZXMuCisKK01BWF9ET1RfR1JBUEhfSEVJR0hUICAgPSAxMDI0CisKKyMgVGhlIE1BWF9ET1RfR1JBUEhfREVQVEggdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgbWF4aW11bSBkZXB0aCBvZgorIyB0aGUgZ3JhcGhzIGdlbmVyYXRlZCBieSBkb3QuIEEgZGVwdGggdmFsdWUgb2YgMyBtZWFucyB0aGF0IG9ubHkKKyMgbm9kZXMgcmVhY2hhYmxlIGZyb20gdGhlIHJvb3QgYnkgZm9sbG93aW5nIGEgcGF0aCB2aWEgYXQgbW9zdCAzCisjIGVkZ2VzIHdpbGwgYmUgc2hvd24uIE5vZGVzIHRoYXQgbGF5IGZ1cnRoZXIgZnJvbSB0aGUgcm9vdCBub2RlIHdpbGwKKyMgYmUgb21pdHRlZC4gTm90ZSB0aGF0IHNldHRpbmcgdGhpcyBvcHRpb24gdG8gMSBvciAyIG1heSBncmVhdGx5CisjIHJlZHVjZSB0aGUgY29tcHV0YXRpb24gdGltZSBuZWVkZWQgZm9yIGxhcmdlIGNvZGUgYmFzZXMuIEFsc28gbm90ZQorIyB0aGF0IGEgZ3JhcGggbWF5IGJlIGZ1cnRoZXIgdHJ1bmNhdGVkIGlmIHRoZSBncmFwaCdzIGltYWdlCisjIGRpbWVuc2lvbnMgYXJlIG5vdCBzdWZmaWNpZW50IHRvIGZpdCB0aGUgZ3JhcGggKHNlZQorIyBNQVhfRE9UX0dSQVBIX1dJRFRIIGFuZCBNQVhfRE9UX0dSQVBIX0hFSUdIVCkuICBJZiAwIGlzIHVzZWQgZm9yIHRoZQorIyBkZXB0aCB2YWx1ZSAodGhlIGRlZmF1bHQpLCB0aGUgZ3JhcGggaXMgbm90IGRlcHRoLWNvbnN0cmFpbmVkLgorCitNQVhfRE9UX0dSQVBIX0RFUFRIICAgID0gMAorCisjIElmIHRoZSBHRU5FUkFURV9MRUdFTkQgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwKKyMgZ2VuZXJhdGUgYSBsZWdlbmQgcGFnZSBleHBsYWluaW5nIHRoZSBtZWFuaW5nIG9mIHRoZSB2YXJpb3VzIGJveGVzIGFuZAorIyBhcnJvd3MgaW4gdGhlIGRvdCBnZW5lcmF0ZWQgZ3JhcGhzLgorCitHRU5FUkFURV9MRUdFTkQgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIERPVF9DTEVBTlVQIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgRG94eWdlbiB3aWxsCisjIHJlbW92ZSB0aGUgaW50ZXJtZWRpYXRlIGRvdCBmaWxlcyB0aGF0IGFyZSB1c2VkIHRvIGdlbmVyYXRlCisjIHRoZSB2YXJpb3VzIGdyYXBocy4KKworRE9UX0NMRUFOVVAgICAgICAgICAgICA9IFlFUworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb246OmFkZHRpb25zIHJlbGF0ZWQgdG8gdGhlIHNlYXJjaCBlbmdpbmUKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUaGUgU0VBUkNIRU5HSU5FIHRhZyBzcGVjaWZpZXMgd2hldGhlciBvciBub3QgYSBzZWFyY2ggZW5naW5lIHNob3VsZCBiZQorIyB1c2VkLiBJZiBzZXQgdG8gTk8gdGhlIHZhbHVlcyBvZiBhbGwgdGFncyBiZWxvdyB0aGlzIG9uZSB3aWxsIGJlIGlnbm9yZWQuCisKK1NFQVJDSEVOR0lORSAgICAgICAgICAgPSBOTwpkaWZmIC0tZ2l0IGEvZG9jL01ha2VmaWxlIGIvZG9jL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTM5OGNkLi4wMDAwMDAwCi0tLSBhL2RvYy9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDU5NyArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjkuNiBmcm9tIE1ha2VmaWxlLmFtLgotIyBkb2MvTWFrZWZpbGUuICBHZW5lcmF0ZWQgZnJvbSBNYWtlZmlsZS5pbiBieSBjb25maWd1cmUuCi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAotIyAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLQotc3JjZGlyID0gLgotdG9wX3NyY2RpciA9IC4uCi0KLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL2Jpc29uCi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvYmlzb24KLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL2Jpc29uCi10b3BfYnVpbGRkaXIgPSAuLgotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotSU5TVEFMTCA9IC91c3IvYmluL2luc3RhbGwgLWMKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSB4ODZfNjQtdW5rbm93bi1saW51eC1nbnUKLWhvc3RfdHJpcGxldCA9IHg4Nl82NC11bmtub3duLWxpbnV4LWdudQotc3ViZGlyID0gZG9jCi1ESVNUX0NPTU1PTiA9ICQoYmlzb25fVEVYSU5GT1MpICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCi0JJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9zdGFtcC12dGkgXAotCSQoc3JjZGlyKS92ZXJzaW9uLnRleGkKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2Jpc29uLWkxOG4ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYy13b3JraW5nLm00ICQodG9wX3NyY2RpcikvbTQvY3h4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2Rpcm5hbWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9kbWFsbG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2Rvcy5tNCAkKHRvcF9zcmNkaXIpL200L2Vycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2V4aXRmYWlsLm00ICQodG9wX3NyY2RpcikvbTQvZXh0ZW5zaW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nZXRvcHQubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0X2dsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dudWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2hhcmQtbG9jYWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2hhc2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlc19oX2dsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1sZF9nbC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXhfZ2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9tNC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9tYnJ0b3djLm00ICQodG9wX3NyY2RpcikvbTQvbWJzdGF0ZV90Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L21ic3dpZHRoLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L29ic3RhY2subTQgJCh0b3Bfc3JjZGlyKS9tNC9vbmNlb25seS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wb19nbC5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3F1b3RlLm00ICQodG9wX3NyY2RpcikvbTQvcXVvdGVhcmcubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RkYm9vbC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludF9oX2dsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3N0ZGlvLXNhZmVyLm00ICQodG9wX3NyY2RpcikvbTQvc3RwY3B5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3N0cmR1cC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cmVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3N0cm5kdXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJubGVuLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3N0cnRvbC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cnRvdWwubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RydmVyc2NtcC5tNCAkKHRvcF9zcmNkaXIpL200L3N1YnBpcGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvdGltZXZhci5tNCAkKHRvcF9zcmNkaXIpL200L3VpbnRtYXhfdF9nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC91bG9uZ2xvbmdfZ2wubTQgXAotCSQodG9wX3NyY2RpcikvbTQvdW5pc3RkLXNhZmVyLm00ICQodG9wX3NyY2RpcikvbTQvdW5pc3RkX2gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvdW5sb2NrZWQtaW8ubTQgJCh0b3Bfc3JjZGlyKS9tNC93YXJuaW5nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3hhbGxvYy5tNCAkKHRvcF9zcmNkaXIpL200L3hzdHJuZHVwLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvbWtpbnN0YWxsZGlycwotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLVNPVVJDRVMgPQotRElTVF9TT1VSQ0VTID0KLUlORk9fREVQUyA9ICQoc3JjZGlyKS9iaXNvbi5pbmZvCi1URVhJTkZPX1RFWCA9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3RleGluZm8udGV4Ci1hbV9fVEVYSU5GT19URVhfRElSID0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgKLURWSVMgPSBiaXNvbi5kdmkKLVBERlMgPSBiaXNvbi5wZGYKLVBTUyA9IGJpc29uLnBzCi1IVE1MUyA9IGJpc29uLmh0bWwKLVRFWElORk9TID0gYmlzb24udGV4aW5mbwotVEVYSTJEVkkgPSB0ZXhpMmR2aQotVEVYSTJQREYgPSAkKFRFWEkyRFZJKSAtLXBkZiAtLWJhdGNoCi1NQUtFSU5GT0hUTUwgPSAkKE1BS0VJTkZPKSAtLWh0bWwKLUFNX01BS0VJTkZPSFRNTEZMQUdTID0gJChBTV9NQUtFSU5GT0ZMQUdTKQotRFZJUFMgPSBkdmlwcwotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGluZm9kaXIpIiAiJChERVNURElSKSQobWFuMWRpcikiCi1tYW4xZGlyID0gJChtYW5kaXIpL21hbjEKLU5ST0ZGID0gbnJvZmYKLU1BTlMgPSAkKG1hbl9NQU5TKQotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFDTE9DQUwgPSAke1NIRUxMfSAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL2Jpc29uLTIuMy9idWlsZC1hdXgvbWlzc2luZyAtLXJ1biBhY2xvY2FsLTEuOQotQU1ERVBfRkFMU0UgPSAjCi1BTURFUF9UUlVFID0gCi1BTVRBUiA9ICR7U0hFTEx9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9taXNzaW5nIC0tcnVuIHRhcgotQVVUT0NPTkYgPSAke1NIRUxMfSAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL2Jpc29uLTIuMy9idWlsZC1hdXgvbWlzc2luZyAtLXJ1biBhdXRvY29uZgotQVVUT0hFQURFUiA9ICR7U0hFTEx9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9taXNzaW5nIC0tcnVuIGF1dG9oZWFkZXIKLUFVVE9NNFRFID0gJHtTSEVMTH0gL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC90b29scy9iaXNvbi0yLjMvYnVpbGQtYXV4L21pc3NpbmcgLS1ydW4gYXV0b200dGUKLUFVVE9NQUtFID0gJHtTSEVMTH0gL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC90b29scy9iaXNvbi0yLjMvYnVpbGQtYXV4L21pc3NpbmcgLS1ydW4gYXV0b21ha2UtMS45Ci1BV0sgPSBnYXdrCi1CSVNPTl9DWFhfV09SS1MgPSA6Ci1CSVNPTl9DWFhfV09SS1NfRkFMU0UgPSAjCi1CSVNPTl9DWFhfV09SS1NfVFJVRSA9IAotQklTT05fTE9DQUxFRElSID0gL3Vzci9zaGFyZS9sb2NhbGUKLUNDID0gZ2NjCi1DQ0RFUE1PREUgPSBkZXBtb2RlPWdjYzMKLUNGTEFHUyA9IC1nIC1PMgotQ1BQID0gZ2NjIC1FCi1DUFBGTEFHUyA9IAotQ1hYID0gZysrCi1DWFhERVBNT0RFID0gZGVwbW9kZT1nY2MzCi1DWFhGTEFHUyA9IC1nIC1PMgotQ1lHUEFUSF9XID0gZWNobwotREVGUyA9IC1ESEFWRV9DT05GSUdfSAotREVQRElSID0gLmRlcHMKLUVDSE9fQyA9IAotRUNIT19OID0gLW4KLUVDSE9fVCA9IAotRUdSRVAgPSBncmVwIC1FCi1FWEVFWFQgPSAKLUdDQyA9IHllcwotR0VUT1BUX0ggPSAKLUdNU0dGTVQgPSAvdXNyL2Jpbi9tc2dmbXQKLUhBVkVfX0JPT0wgPSAxCi1JTlNUQUxMX0RBVEEgPSAke0lOU1RBTEx9IC1tIDY0NAotSU5TVEFMTF9QUk9HUkFNID0gJHtJTlNUQUxMfQotSU5TVEFMTF9TQ1JJUFQgPSAke0lOU1RBTEx9Ci1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSAke1NIRUxMfSAkKGluc3RhbGxfc2gpIC1jIC1zCi1JTlRMTElCUyA9IAotSU5UTF9NQUNPU1hfTElCUyA9IAotTERGTEFHUyA9IAotTEVYID0gZmxleAotTEVYTElCID0gLWxmbAotTEVYX09VVFBVVF9ST09UID0gbGV4Lnl5Ci1MSUJJQ09OViA9IC1saWNvbnYKLUxJQklOVEwgPSAKLUxJQk9CSlMgPSAgZGlybmFtZSRVLm8gZXhpdGZhaWwkVS5vIGhhcmQtbG9jYWxlJFUubyBoYXNoJFUubyBxdW90ZSRVLm8gcXVvdGVhcmckVS5vIGZvcGVuLXNhZmVyJFUubyBkdXAtc2FmZXIkVS5vIGZkLXNhZmVyJFUubyBwaXBlLXNhZmVyJFUubyB4bWFsbG9jJFUubwotTElCUyA9IAotTFRMSUJJQ09OViA9IC1saWNvbnYKLUxUTElCSU5UTCA9IAotTFRMSUJPQkpTID0gIGRpcm5hbWUkVS5sbyBleGl0ZmFpbCRVLmxvIGhhcmQtbG9jYWxlJFUubG8gaGFzaCRVLmxvIHF1b3RlJFUubG8gcXVvdGVhcmckVS5sbyBmb3Blbi1zYWZlciRVLmxvIGR1cC1zYWZlciRVLmxvIGZkLXNhZmVyJFUubG8gcGlwZS1zYWZlciRVLmxvIHhtYWxsb2MkVS5sbwotTTQgPSAvdXNyL2Jpbi9tNAotTUFLRUlORk8gPSAke1NIRUxMfSAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL2Jpc29uLTIuMy9idWlsZC1hdXgvbWlzc2luZyAtLXJ1biBtYWtlaW5mbwotTUtJTlNUQUxMRElSUyA9ICQodG9wX2J1aWxkZGlyKS9idWlsZC1hdXgvbWtpbnN0YWxsZGlycwotTVNHRk1UID0gL3Vzci9iaW4vbXNnZm10Ci1NU0dNRVJHRSA9IC91c3IvYmluL21zZ21lcmdlCi1PMENGTEFHUyA9IC1nIAotTzBDWFhGTEFHUyA9IC1nIAotT0JKRVhUID0gbwotUEFDS0FHRSA9IGJpc29uCi1QQUNLQUdFX0JVR1JFUE9SVCA9IGJ1Zy1iaXNvbkBnbnUub3JnCi1QQUNLQUdFX05BTUUgPSBHTlUgQmlzb24KLVBBQ0tBR0VfU1RSSU5HID0gR05VIEJpc29uIDIuMwotUEFDS0FHRV9UQVJOQU1FID0gYmlzb24KLVBBQ0tBR0VfVkVSU0lPTiA9IDIuMwotUEFUSF9TRVBBUkFUT1IgPSA6Ci1QT1NVQiA9IHBvCi1SQU5MSUIgPSByYW5saWIKLVNFVF9NQUtFID0gCi1TSEVMTCA9IC9iaW4vc2gKLVNUREJPT0xfSCA9IAotU1RSSVAgPSAKLVVOSVNURF9IID0gCi1VU0VfTkxTID0geWVzCi1WQUxHUklORCA9IAotVkVSU0lPTiA9IDIuMwotV0FSTklOR19DRkxBR1MgPSAKLVdBUk5JTkdfQ1hYRkxBR1MgPSAKLVdFUlJPUl9DRkxBR1MgPSAKLVhHRVRURVhUID0gL3Vzci9iaW4veGdldHRleHQKLVlBQ0MgPSBiaXNvbiAteQotWUFDQ19MSUJSQVJZID0gbGlieS5hCi1ZQUNDX1NDUklQVCA9IHlhY2MKLWFjX2N0X0NDID0gZ2NjCi1hY19jdF9DWFggPSBnKysKLWFjX2N0X1JBTkxJQiA9IHJhbmxpYgotYWNfY3RfU1RSSVAgPSAKLWFjbG9jYWxkaXIgPSAke2RhdGFkaXJ9L2FjbG9jYWwKLWFtX19mYXN0ZGVwQ0NfRkFMU0UgPSAjCi1hbV9fZmFzdGRlcENDX1RSVUUgPSAKLWFtX19mYXN0ZGVwQ1hYX0ZBTFNFID0gIwotYW1fX2Zhc3RkZXBDWFhfVFJVRSA9IAotYW1fX2luY2x1ZGUgPSBpbmNsdWRlCi1hbV9fbGVhZGluZ19kb3QgPSAuCi1hbV9fcXVvdGUgPSAKLWFtX190YXIgPSAke0FNVEFSfSBjaG9mIC0gIiQkdGFyZGlyIgotYW1fX3VudGFyID0gJHtBTVRBUn0geGYgLQotYmluZGlyID0gJHtleGVjX3ByZWZpeH0vYmluCi1idWlsZCA9IHg4Nl82NC11bmtub3duLWxpbnV4LWdudQotYnVpbGRfYWxpYXMgPSAKLWJ1aWxkX2NwdSA9IHg4Nl82NAotYnVpbGRfb3MgPSBsaW51eC1nbnUKLWJ1aWxkX3ZlbmRvciA9IHVua25vd24KLWRhdGFkaXIgPSAke3ByZWZpeH0vc2hhcmUKLWV4ZWNfcHJlZml4ID0gJHtwcmVmaXh9Ci1ob3N0ID0geDg2XzY0LXVua25vd24tbGludXgtZ251Ci1ob3N0X2FsaWFzID0gCi1ob3N0X2NwdSA9IHg4Nl82NAotaG9zdF9vcyA9IGxpbnV4LWdudQotaG9zdF92ZW5kb3IgPSB1bmtub3duCi1pbmNsdWRlZGlyID0gJHtwcmVmaXh9L2luY2x1ZGUKLWluZm9kaXIgPSAke3ByZWZpeH0vaW5mbwotaW5zdGFsbF9zaCA9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9pbnN0YWxsLXNoCi1saWJkaXIgPSAke2V4ZWNfcHJlZml4fS9saWIKLWxpYmV4ZWNkaXIgPSAke2V4ZWNfcHJlZml4fS9saWJleGVjCi1sb2NhbHN0YXRlZGlyID0gJHtwcmVmaXh9L3ZhcgotbWFuZGlyID0gJHtwcmVmaXh9L21hbgotbWtkaXJfcCA9IG1rZGlyIC1wIC0tCi1vbGRpbmNsdWRlZGlyID0gL3Vzci9pbmNsdWRlCi1wcmVmaXggPSAvaG9tZS9waGFubmEvc3JjL2Jpc29uCi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gcyx4LHgsCi1zYmluZGlyID0gJHtleGVjX3ByZWZpeH0vc2Jpbgotc2hhcmVkc3RhdGVkaXIgPSAke3ByZWZpeH0vY29tCi1zeXNjb25mZGlyID0gJHtwcmVmaXh9L2V0YwotdGFyZ2V0X2FsaWFzID0gCi1BTV9NQUtFSU5GT0ZMQUdTID0gLS1uby1zcGxpdAotaW5mb19URVhJTkZPUyA9IGJpc29uLnRleGluZm8KLW1hbl9NQU5TID0gYmlzb24uMQotYmlzb25fVEVYSU5GT1MgPSBncGwudGV4aSBmZGwudGV4aQotRVhUUkFfRElTVCA9IGJpc29uLjEgcmVmY2FyZC50ZXgKLUNMRUFORklMRVMgPSByZWZjYXJkLmR2aSByZWZjYXJkLmxvZyByZWZjYXJkLnBzIGJpc29uLmZucwotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuZHZpIC5odG1sIC5pbmZvIC5wZGYgLnBzIC50ZXhpbmZvCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCi0JCSYmIGV4aXQgMDsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgIGRvYy9NYWtlZmlsZSc7IFwKLQljZCAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251ICBkb2MvTWFrZWZpbGUKLS5QUkVDSU9VUzogTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLS50ZXhpbmZvLmluZm86Ci0JcmVzdG9yZT06ICYmIGJhY2t1cGRpcj0iJChhbV9fbGVhZGluZ19kb3QpYW0kJCQkIiAmJiBcCi0JYW1fX2N3ZD1gcHdkYCAmJiBjZCAkKHNyY2RpcikgJiYgXAotCXJtIC1yZiAkJGJhY2t1cGRpciAmJiBta2RpciAkJGJhY2t1cGRpciAmJiBcCi0JaWYgKCQoTUFLRUlORk8pIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKLQkgIGZvciBmIGluICRAICRALVswLTldICRALVswLTldWzAtOV0gJChAOi5pbmZvPSkuaVswLTldICQoQDouaW5mbz0pLmlbMC05XVswLTldOyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgJCRmOyB0aGVuIG12ICQkZiAkJGJhY2t1cGRpcjsgcmVzdG9yZT1tdjsgZWxzZSA6OyBmaTsgXAotCSAgZG9uZTsgXAotCWVsc2UgOjsgZmkgJiYgXAotCWNkICIkJGFtX19jd2QiOyBcCi0JaWYgJChNQUtFSU5GTykgJChBTV9NQUtFSU5GT0ZMQUdTKSAkKE1BS0VJTkZPRkxBR1MpIC1JICQoc3JjZGlyKSBcCi0JIC1vICRAICQ8OyBcCi0JdGhlbiBcCi0JICByYz0wOyBcCi0JICBjZCAkKHNyY2Rpcik7IFwKLQllbHNlIFwKLQkgIHJjPSQkPzsgXAotCSAgY2QgJChzcmNkaXIpICYmIFwKLQkgICQkcmVzdG9yZSAkJGJhY2t1cGRpci8qIGBlY2hvICIuLyRAIiB8IHNlZCAnc3xbXi9dKiQkfHwnYDsgXAotCWZpOyBcCi0Jcm0gLXJmICQkYmFja3VwZGlyOyBleGl0ICQkcmMKLQotLnRleGluZm8uZHZpOgotCVRFWElOUFVUUz0iJChhbV9fVEVYSU5GT19URVhfRElSKSQoUEFUSF9TRVBBUkFUT1IpJCRURVhJTlBVVFMiIFwKLQlNQUtFSU5GTz0nJChNQUtFSU5GTykgJChBTV9NQUtFSU5GT0ZMQUdTKSAkKE1BS0VJTkZPRkxBR1MpIC1JICQoc3JjZGlyKScgXAotCSQoVEVYSTJEVkkpICQ8Ci0KLS50ZXhpbmZvLnBkZjoKLQlURVhJTlBVVFM9IiQoYW1fX1RFWElORk9fVEVYX0RJUikkKFBBVEhfU0VQQVJBVE9SKSQkVEVYSU5QVVRTIiBcCi0JTUFLRUlORk89JyQoTUFLRUlORk8pICQoQU1fTUFLRUlORk9GTEFHUykgJChNQUtFSU5GT0ZMQUdTKSAtSSAkKHNyY2RpciknIFwKLQkkKFRFWEkyUERGKSAkPAotCi0udGV4aW5mby5odG1sOgotCXJtIC1yZiAkKEA6Lmh0bWw9Lmh0cCkKLQlpZiAkKE1BS0VJTkZPSFRNTCkgJChBTV9NQUtFSU5GT0hUTUxGTEFHUykgJChNQUtFSU5GT0ZMQUdTKSAtSSAkKHNyY2RpcikgXAotCSAtbyAkKEA6Lmh0bWw9Lmh0cCkgJDw7IFwKLQl0aGVuIFwKLQkgIHJtIC1yZiAkQDsgXAotCSAgaWYgdGVzdCAhIC1kICQoQDouaHRtbD0uaHRwKSAmJiB0ZXN0IC1kICQoQDouaHRtbD0pOyB0aGVuIFwKLQkgICAgbXYgJChAOi5odG1sPSkgJEA7IGVsc2UgbXYgJChAOi5odG1sPS5odHApICRAOyBmaTsgXAotCWVsc2UgXAotCSAgaWYgdGVzdCAhIC1kICQoQDouaHRtbD0uaHRwKSAmJiB0ZXN0IC1kICQoQDouaHRtbD0pOyB0aGVuIFwKLQkgICAgcm0gLXJmICQoQDouaHRtbD0pOyBlbHNlIHJtIC1SZiAkKEA6Lmh0bWw9Lmh0cCkgJEA7IGZpOyBcCi0JICBleGl0IDE7IFwKLQlmaQotJChzcmNkaXIpL2Jpc29uLmluZm86IGJpc29uLnRleGluZm8gJChzcmNkaXIpL3ZlcnNpb24udGV4aSAkKGJpc29uX1RFWElORk9TKQotYmlzb24uZHZpOiBiaXNvbi50ZXhpbmZvICQoc3JjZGlyKS92ZXJzaW9uLnRleGkgJChiaXNvbl9URVhJTkZPUykKLWJpc29uLnBkZjogYmlzb24udGV4aW5mbyAkKHNyY2RpcikvdmVyc2lvbi50ZXhpICQoYmlzb25fVEVYSU5GT1MpCi1iaXNvbi5odG1sOiBiaXNvbi50ZXhpbmZvICQoc3JjZGlyKS92ZXJzaW9uLnRleGkgJChiaXNvbl9URVhJTkZPUykKLSQoc3JjZGlyKS92ZXJzaW9uLnRleGk6ICAkKHNyY2Rpcikvc3RhbXAtdnRpCi0kKHNyY2Rpcikvc3RhbXAtdnRpOiBiaXNvbi50ZXhpbmZvICQodG9wX3NyY2RpcikvY29uZmlndXJlCi0JQChkaXI9LjsgdGVzdCAtZiAuL2Jpc29uLnRleGluZm8gfHwgZGlyPSQoc3JjZGlyKTsgXAotCXNldCBgJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvbWRhdGUtc2ggJCRkaXIvYmlzb24udGV4aW5mb2A7IFwKLQllY2hvICJAc2V0IFVQREFURUQgJCQxICQkMiAkJDMiOyBcCi0JZWNobyAiQHNldCBVUERBVEVELU1PTlRIICQkMiAkJDMiOyBcCi0JZWNobyAiQHNldCBFRElUSU9OICQoVkVSU0lPTikiOyBcCi0JZWNobyAiQHNldCBWRVJTSU9OICQoVkVSU0lPTikiKSA+IHZ0aS50bXAKLQlAY21wIC1zIHZ0aS50bXAgJChzcmNkaXIpL3ZlcnNpb24udGV4aSBcCi0JICB8fCAoZWNobyAiVXBkYXRpbmcgJChzcmNkaXIpL3ZlcnNpb24udGV4aSI7IFwKLQkgICAgICBjcCB2dGkudG1wICQoc3JjZGlyKS92ZXJzaW9uLnRleGkpCi0JLUBybSAtZiB2dGkudG1wCi0JQGNwICQoc3JjZGlyKS92ZXJzaW9uLnRleGkgJEAKLQotbW9zdGx5Y2xlYW4tdnRpOgotCS1ybSAtZiB2dGkudG1wCi0KLW1haW50YWluZXItY2xlYW4tdnRpOgotCS1ybSAtZiAkKHNyY2Rpcikvc3RhbXAtdnRpICQoc3JjZGlyKS92ZXJzaW9uLnRleGkKLS5kdmkucHM6Ci0JVEVYSU5QVVRTPSIkKGFtX19URVhJTkZPX1RFWF9ESVIpJChQQVRIX1NFUEFSQVRPUikkJFRFWElOUFVUUyIgXAotCSQoRFZJUFMpIC1vICRAICQ8Ci0KLXVuaW5zdGFsbC1pbmZvLWFtOgotCUAkKFBSRV9VTklOU1RBTEwpCi0JQGlmIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uICYmIFwKLQkgICAgIGluc3RhbGwtaW5mbyAtLXZlcnNpb24gMj4mMSB8IHNlZCAxcSB8IGdyZXAgLWkgLXYgZGViaWFuKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAotCSAgbGlzdD0nJChJTkZPX0RFUFMpJzsgXAotCSAgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCi0JICAgIHJlbGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgJ3N8Xi4qL3x8J2A7IFwKLQkgICAgZWNobyAiIGluc3RhbGwtaW5mbyAtLWluZm8tZGlyPSckKERFU1RESVIpJChpbmZvZGlyKScgLS1yZW1vdmUgJyQoREVTVERJUikkKGluZm9kaXIpLyQkcmVsZmlsZSciOyBcCi0JICAgIGluc3RhbGwtaW5mbyAtLWluZm8tZGlyPSIkKERFU1RESVIpJChpbmZvZGlyKSIgLS1yZW1vdmUgIiQoREVTVERJUikkKGluZm9kaXIpLyQkcmVsZmlsZSI7IFwKLQkgIGRvbmU7IFwKLQllbHNlIDo7IGZpCi0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChJTkZPX0RFUFMpJzsgXAotCWZvciBmaWxlIGluICQkbGlzdDsgZG8gXAotCSAgcmVsZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAnc3xeLiovfHwnYDsgXAotCSAgcmVsZmlsZV9pPWBlY2hvICIkJHJlbGZpbGUiIHwgc2VkICdzfFwuaW5mbyQkfHw7c3wkJHwuaXwnYDsgXAotCSAgKGlmIGNkICIkKERFU1RESVIpJChpbmZvZGlyKSI7IHRoZW4gXAotCSAgICAgZWNobyAiIGNkICckKERFU1RESVIpJChpbmZvZGlyKScgJiYgcm0gLWYgJCRyZWxmaWxlICQkcmVsZmlsZS1bMC05XSAkJHJlbGZpbGUtWzAtOV1bMC05XSAkJHJlbGZpbGVfaVswLTldICQkcmVsZmlsZV9pWzAtOV1bMC05XSI7IFwKLQkgICAgIHJtIC1mICQkcmVsZmlsZSAkJHJlbGZpbGUtWzAtOV0gJCRyZWxmaWxlLVswLTldWzAtOV0gJCRyZWxmaWxlX2lbMC05XSAkJHJlbGZpbGVfaVswLTldWzAtOV07IFwKLQkgICBlbHNlIDo7IGZpKTsgXAotCWRvbmUKLQotZGlzdC1pbmZvOiAkKElORk9fREVQUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCWxpc3Q9JyQoSU5GT19ERVBTKSc7IFwKLQlmb3IgYmFzZSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGNhc2UgJCRiYXNlIGluIFwKLQkgICAgJChzcmNkaXIpLyopIGJhc2U9YGVjaG8gIiQkYmFzZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLQkgIGVzYWM7IFwKLQkgIGlmIHRlc3QgLWYgJCRiYXNlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGZvciBmaWxlIGluICQkZC8kJGJhc2UqOyBkbyBcCi0JICAgIHJlbGZpbGU9YGV4cHIgIiQkZmlsZSIgOiAiJCRkL1woLipcKSJgOyBcCi0JICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJHJlbGZpbGUgfHwgXAotCSAgICAgIGNwIC1wICQkZmlsZSAkKGRpc3RkaXIpLyQkcmVsZmlsZTsgXAotCSAgZG9uZTsgXAotCWRvbmUKLQotbW9zdGx5Y2xlYW4tYW1pbmZvOgotCS1ybSAtcmYgYmlzb24uYXV4IGJpc29uLmNwIGJpc29uLmNwcyBiaXNvbi5mbiBiaXNvbi5reSBiaXNvbi5reXMgYmlzb24ubG9nIFwKLQkgIGJpc29uLnBnIGJpc29uLnBncyBiaXNvbi50bXAgYmlzb24udG9jIGJpc29uLnRwIGJpc29uLnZyIFwKLQkgIGJpc29uLmR2aSBiaXNvbi5wZGYgYmlzb24ucHMgYmlzb24uaHRtbAotCi1tYWludGFpbmVyLWNsZWFuLWFtaW5mbzoKLQlAbGlzdD0nJChJTkZPX0RFUFMpJzsgZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpX2k9YGVjaG8gIiQkaSIgfCBzZWQgJ3N8XC5pbmZvJCR8fDtzfCQkfC5pfCdgOyBcCi0JICBlY2hvICIgcm0gLWYgJCRpICQkaS1bMC05XSAkJGktWzAtOV1bMC05XSAkJGlfaVswLTldICQkaV9pWzAtOV1bMC05XSI7IFwKLQkgIHJtIC1mICQkaSAkJGktWzAtOV0gJCRpLVswLTldWzAtOV0gJCRpX2lbMC05XSAkJGlfaVswLTldWzAtOV07IFwKLQlkb25lCi1pbnN0YWxsLW1hbjE6ICQobWFuMV9NQU5TKSAkKG1hbl9NQU5TKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCXRlc3QgLXogIiQobWFuMWRpcikiIHx8ICQobWtkaXJfcCkgIiQoREVTVERJUikkKG1hbjFkaXIpIgotCUBsaXN0PSckKG1hbjFfTUFOUykgJChkaXN0X21hbjFfTUFOUykgJChub2Rpc3RfbWFuMV9NQU5TKSc7IFwKLQlsMj0nJChtYW5fTUFOUykgJChkaXN0X21hbl9NQU5TKSAkKG5vZGlzdF9tYW5fTUFOUyknOyBcCi0JZm9yIGkgaW4gJCRsMjsgZG8gXAotCSAgY2FzZSAiJCRpIiBpbiBcCi0JICAgICouMSopIGxpc3Q9IiQkbGlzdCAkJGkiIDs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICQoc3JjZGlyKS8kJGk7IHRoZW4gZmlsZT0kKHNyY2RpcikvJCRpOyBcCi0JICBlbHNlIGZpbGU9JCRpOyBmaTsgXAotCSAgZXh0PWBlY2hvICQkaSB8IHNlZCAtZSAncy9eLipcXC4vLydgOyBcCi0JICBjYXNlICIkJGV4dCIgaW4gXAotCSAgICAxKikgOzsgXAotCSAgICAqKSBleHQ9JzEnIDs7IFwKLQkgIGVzYWM7IFwKLQkgIGluc3Q9YGVjaG8gJCRpIHwgc2VkIC1lICdzL1xcLlswLTlhLXpdKiQkLy8nYDsgXAotCSAgaW5zdD1gZWNobyAkJGluc3QgfCBzZWQgLWUgJ3MvXi4qXC8vLydgOyBcCi0JICBpbnN0PWBlY2hvICQkaW5zdCB8IHNlZCAnJCh0cmFuc2Zvcm0pJ2AuJCRleHQ7IFwKLQkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJyQkZmlsZScgJyQoREVTVERJUikkKG1hbjFkaXIpLyQkaW5zdCciOyBcCi0JICAkKElOU1RBTExfREFUQSkgIiQkZmlsZSIgIiQoREVTVERJUikkKG1hbjFkaXIpLyQkaW5zdCI7IFwKLQlkb25lCi11bmluc3RhbGwtbWFuMToKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKG1hbjFfTUFOUykgJChkaXN0X21hbjFfTUFOUykgJChub2Rpc3RfbWFuMV9NQU5TKSc7IFwKLQlsMj0nJChtYW5fTUFOUykgJChkaXN0X21hbl9NQU5TKSAkKG5vZGlzdF9tYW5fTUFOUyknOyBcCi0JZm9yIGkgaW4gJCRsMjsgZG8gXAotCSAgY2FzZSAiJCRpIiBpbiBcCi0JICAgICouMSopIGxpc3Q9IiQkbGlzdCAkJGkiIDs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBleHQ9YGVjaG8gJCRpIHwgc2VkIC1lICdzL14uKlxcLi8vJ2A7IFwKLQkgIGNhc2UgIiQkZXh0IiBpbiBcCi0JICAgIDEqKSA7OyBcCi0JICAgICopIGV4dD0nMScgOzsgXAotCSAgZXNhYzsgXAotCSAgaW5zdD1gZWNobyAkJGkgfCBzZWQgLWUgJ3MvXFwuWzAtOWEtel0qJCQvLydgOyBcCi0JICBpbnN0PWBlY2hvICQkaW5zdCB8IHNlZCAtZSAncy9eLipcLy8vJ2A7IFwKLQkgIGluc3Q9YGVjaG8gJCRpbnN0IHwgc2VkICckKHRyYW5zZm9ybSknYC4kJGV4dDsgXAotCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChtYW4xZGlyKS8kJGluc3QnIjsgXAotCSAgcm0gLWYgIiQoREVTVERJUikkKG1hbjFkaXIpLyQkaW5zdCI7IFwKLQlkb25lCi10YWdzOiBUQUdTCi1UQUdTOgotCi1jdGFnczogQ1RBR1MKLUNUQUdTOgotCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGNhc2UgJCRmaWxlIGluIFwKLQkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLQkgICAgJCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAotCSAgZXNhYzsgXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAotCSAgICBkaXI9Ii8kJGRpciI7IFwKLQkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAotCSAgZWxzZSBcCi0JICAgIGRpcj0nJzsgXAotCSAgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCi0JICB0b3BfZGlzdGRpcj0iJCh0b3BfZGlzdGRpcikiIGRpc3RkaXI9IiQoZGlzdGRpcikiIFwKLQkgIGRpc3QtaW5mbwotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoSU5GT19ERVBTKSAkKE1BTlMpCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChpbmZvZGlyKSIgIiQoREVTVERJUikkKG1hbjFkaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQobWtkaXJfcCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCi0JICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCi0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1sb2NhbCBtb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06ICQoRFZJUykKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOiAkKEhUTUxTKQotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06ICQoSU5GT19ERVBTKQotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbTogJChJTkZPX0RFUFMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JdGVzdCAteiAiJChpbmZvZGlyKSIgfHwgJChta2Rpcl9wKSAiJChERVNURElSKSQoaW5mb2RpcikiCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQlsaXN0PSckKElORk9fREVQUyknOyBcCi0JZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCi0JICBjYXNlICQkZmlsZSBpbiBcCi0JICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0JICBlc2FjOyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBmaWxlX2k9YGVjaG8gIiQkZmlsZSIgfCBzZWQgJ3N8XC5pbmZvJCR8fDtzfCQkfC5pfCdgOyBcCi0JICBmb3IgaWZpbGUgaW4gJCRkLyQkZmlsZSAkJGQvJCRmaWxlLVswLTldICQkZC8kJGZpbGUtWzAtOV1bMC05XSBcCi0gICAgICAgICAgICAgICAgICAgICAgICQkZC8kJGZpbGVfaVswLTldICQkZC8kJGZpbGVfaVswLTldWzAtOV0gOyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgJCRpZmlsZTsgdGhlbiBcCi0JICAgICAgcmVsZmlsZT1gZWNobyAiJCRpZmlsZSIgfCBzZWQgJ3N8Xi4qL3x8J2A7IFwKLQkgICAgICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICckJGlmaWxlJyAnJChERVNURElSKSQoaW5mb2RpcikvJCRyZWxmaWxlJyI7IFwKLQkgICAgICAkKElOU1RBTExfREFUQSkgIiQkaWZpbGUiICIkKERFU1RESVIpJChpbmZvZGlyKS8kJHJlbGZpbGUiOyBcCi0JICAgIGVsc2UgOiA7IGZpOyBcCi0JICBkb25lOyBcCi0JZG9uZQotCUAkKFBPU1RfSU5TVEFMTCkKLQlAaWYgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24gJiYgXAotCSAgICAgaW5zdGFsbC1pbmZvIC0tdmVyc2lvbiAyPiYxIHwgc2VkIDFxIHwgZ3JlcCAtaSAtdiBkZWJpYW4pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCi0JICBsaXN0PSckKElORk9fREVQUyknOyBcCi0JICBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgcmVsZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAnc3xeLiovfHwnYDsgXAotCSAgICBlY2hvICIgaW5zdGFsbC1pbmZvIC0taW5mby1kaXI9JyQoREVTVERJUikkKGluZm9kaXIpJyAnJChERVNURElSKSQoaW5mb2RpcikvJCRyZWxmaWxlJyI7XAotCSAgICBpbnN0YWxsLWluZm8gLS1pbmZvLWRpcj0iJChERVNURElSKSQoaW5mb2RpcikiICIkKERFU1RESVIpJChpbmZvZGlyKS8kJHJlbGZpbGUiIHx8IDo7XAotCSAgZG9uZTsgXAotCWVsc2UgOiA7IGZpCi1pbnN0YWxsLW1hbjogaW5zdGFsbC1tYW4xCi0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tYW1pbmZvIFwKLQltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbWFpbnRhaW5lci1jbGVhbi12dGkKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1hbWluZm8gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi12dGkKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOiAkKFBERlMpCi0KLXBzOiBwcy1hbQotCi1wcy1hbTogJChQU1MpCi0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWluZm8tYW0gdW5pbnN0YWxsLW1hbgotCi11bmluc3RhbGwtbWFuOiB1bmluc3RhbGwtbWFuMQotCi0uUEhPTlk6IGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1sb2NhbCBcCi0JZGlzdC1pbmZvIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1tYW4xIGluc3RhbGwtc3RyaXAgXAotCWluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCi0JbWFpbnRhaW5lci1jbGVhbi1hbWluZm8gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIFwKLQltYWludGFpbmVyLWNsZWFuLXZ0aSBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1hbWluZm8gXAotCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tdnRpIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAotCXVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWluZm8tYW0gdW5pbnN0YWxsLW1hbiBcCi0JdW5pbnN0YWxsLW1hbjEKLQotCi1jbGVhbi1sb2NhbDoKLQlybSAtcmYgKi50MmQKLQotcmVmY2FyZC5kdmk6IHJlZmNhcmQudGV4Ci0JdGV4IHJlZmNhcmQudGV4Ci0KLXJlZmNhcmQucHM6IHJlZmNhcmQuZHZpCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9kb2MvTWFrZWZpbGUuYW0gYi9kb2MvTWFrZWZpbGUuYW0KaW5kZXggMjQ2NmIyNi4uODBjNzI4NSAxMDA2NDQKLS0tIGEvZG9jL01ha2VmaWxlLmFtCisrKyBiL2RvYy9NYWtlZmlsZS5hbQpAQCAtMSwzNCArMSwxNTUgQEAKICMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbiAtKi1NYWtlZmlsZS0qLQotIyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi0jIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0jIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMsIDIwMDUtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0jIyAwMjExMC0xMzAxICBVU0EKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAKIEFNX01BS0VJTkZPRkxBR1MgPSAtLW5vLXNwbGl0Ci1pbmZvX1RFWElORk9TID0gYmlzb24udGV4aW5mbwotbWFuX01BTlMgPSBiaXNvbi4xCi1iaXNvbl9URVhJTkZPUyA9IGdwbC50ZXhpIGZkbC50ZXhpCitpbmZvX1RFWElORk9TID0gYmlzb24udGV4aQorYmlzb25fVEVYSU5GT1MgPSAkKHNyY2RpcikvY3Jvc3Mtb3B0aW9ucy50ZXhpIGdwbC0zLjAudGV4aSBmZGwudGV4aQogCi1FWFRSQV9ESVNUID0gYmlzb24uMSByZWZjYXJkLnRleAotCi1DTEVBTkZJTEVTID0gcmVmY2FyZC5kdmkgcmVmY2FyZC5sb2cgcmVmY2FyZC5wcyBiaXNvbi5mbnMKLQorQ0xFQU5GSUxFUyA9IGJpc29uLmZucworQ0xFQU5ESVJTID0gKi50MmQKIGNsZWFuLWxvY2FsOgotCXJtIC1yZiAqLnQyZAorCXJtIC1yZiAkKENMRUFORElSUykKKworQ1JPU1NfT1BUSU9OU19QTCA9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2Nyb3NzLW9wdGlvbnMucGwKKyQoc3JjZGlyKS9jcm9zcy1vcHRpb25zLnRleGk6ICQodG9wX3NyY2Rpcikvc3JjL2dldGFyZ3MuYyAkKENST1NTX09QVElPTlNfUEwpCisJJChBTV9WX0dFTiltdiAtZiAkQCAkQH4gfHwgOiA+JEB+CisJJChBTV9WX2F0KXJtIC1mICRALnRtcAorCSQoQU1fVl9hdCljZCAkKHRvcF9idWlsZGRpcikvc3JjICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGJpc29uCisJJChBTV9WX2F0KSQodG9wX2J1aWxkZGlyKS9zcmMvYmlzb24gLS1oZWxwIFwKKwkgIHwgJChQRVJMKSAkKENST1NTX09QVElPTlNfUEwpICQodG9wX3NyY2Rpcikvc3JjL3NjYW4tZ3JhbS5sID4kQC50bXAKKwkkKEFNX1ZfYXQpZGlmZiAtdSAkQH4gJEAudG1wIHx8IHRydWUKKwkkKEFNX1ZfYXQpbXYgJEAudG1wICRACitNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9ICQoc3JjZGlyKS9jcm9zcy1vcHRpb25zLnRleGkKKworIyMgLS0tLS0tLS0tLSAjIworIyMgUmVmIGNhcmQuICAjIworIyMgLS0tLS0tLS0tLSAjIworCitFWFRSQV9ESVNUID0gcmVmY2FyZC50ZXgKK0NMRUFORklMRVMgKz0gcmVmY2FyZC5kdmkgcmVmY2FyZC5sb2cgcmVmY2FyZC5wcwogCiByZWZjYXJkLmR2aTogcmVmY2FyZC50ZXgKLQl0ZXggcmVmY2FyZC50ZXgKKwkkKEFNX1ZfR0VOKXRleCByZWZjYXJkLnRleAogCiByZWZjYXJkLnBzOiByZWZjYXJkLmR2aQorCisKKyMjIC0tLS0tLS0tLS0tICMjCisjIyBNYW4gUGFnZXMuICAjIworIyMgLS0tLS0tLS0tLS0gIyMKKworZGlzdF9tYW5fTUFOUyA9ICQoc3JjZGlyKS9iaXNvbi4xCisKK0VYVFJBX0RJU1QgKz0gJChkaXN0X21hbl9NQU5TOi4xPS54KSBjb21tb24ueAorTUFJTlRBSU5FUkNMRUFORklMRVMgKz0gJChkaXN0X21hbl9NQU5TKQorCisjIERlcGVuZCBvbiBjb25maWd1cmUgdG8gZ2V0IHZlcnNpb24gbnVtYmVyIGNoYW5nZXMuCitjb21tb25fZGVwID0gJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChzcmNkaXIpL2NvbW1vbi54CitzcmNzcmNkaXIgPSAkKHRvcF9zcmNkaXIpL2JpbgorJChzcmNkaXIpL2Jpc29uLjE6ICAgICAgJChjb21tb25fZGVwKSAkKHRvcF9zcmNkaXIpL3NyYy9nZXRhcmdzLmMKKworIyBEaWZmZXJlbmNlcyB0byBpZ25vcmUgd2hlbiBjb21wYXJpbmcgdGhlIG1hbiBwYWdlICh0aGUgZGF0ZSkuCityZW1vdmVfdGltZV9zdGFtcCA9IFwKKyAgc2VkICdzL15cKFwuVEhbXiJdKiJbXiJdKiJbXiJdKlwpIlteIl0qIi9cMS8nCisKK01PU1RMWUNMRUFORklMRVMgPSAkKHNyY2RpcikvKi50CisKK1NVRkZJWEVTID0gLnggLjEKKworUFJFUEFUSCA9ICQodG9wX2J1aWxkZGlyKS9zcmMKKy54LjE6CisJJChBTV9WX0dFTilwcm9ncmFtPWBleHByICIvJCoiIDogJy4qL1woLipcKSdgICYmCQlcCisJc2F2ZV9JRlM9JElGUzsJCQkJCQkJXAorCUlGUz0kKFBBVEhfU0VQQVJBVE9SKTsJCQkJCQlcCisJZm9yIGRpciBpbiAkKFBSRVBBVEgpOyBkbwkJCQkJXAorCSAgSUZTPSRzYXZlX0lGUzsJCQkJCQlcCisJICBlY2hvIGNkICQkZGlyICcmJicgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRwcm9ncmFtICYmCVwKKwkgIChjZCAkJGRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJHByb2dyYW0pIHx8IGV4aXQ7CVwKKwlkb25lCisJJChBTV9WX2F0KVBBVEg9IiQoUFJFUEFUSCkkKFBBVEhfU0VQQVJBVE9SKSQkUEFUSCI7CQkgICAgIFwKKwlleHBvcnQgUEFUSDsJCQkJCQkJICAgICBcCisJJChIRUxQMk1BTikJCQkJCQkJICAgICBcCisJICAgIC0taW5jbHVkZT0kKi54CQkJCQkJICAgICBcCisJICAgIC0taW5jbHVkZT0kKHNyY2RpcikvY29tbW9uLngJCQkJICAgICBcCisJICAgIC0tb3V0cHV0PSRALnQgYGVjaG8gJyQqJyB8IHNlZCAncywuKi8sLCdgCisJJChBTV9WX2F0KWlmICQocmVtb3ZlX3RpbWVfc3RhbXApICRAID4kQGEudCAyPi9kZXYvbnVsbCAmJgkgICAgIFwKKwkgICAkKHJlbW92ZV90aW1lX3N0YW1wKSAkQC50IHwgY21wICRAYS50IC0gPi9kZXYvbnVsbCAyPiYxOyB0aGVuICAgICBcCisJCXRvdWNoICRAOwkJCQkJCSAgICAgXAorCWVsc2UJCQkJCQkJCSAgICAgXAorCQltdiAkQC50ICRAOwkJCQkJCSAgICAgXAorCWZpCisJJChBTV9WX2F0KXJtIC1mICRAKi50CisKK25vZGlzdF9tYW5fTUFOUyA9IHlhY2MuMQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEdyYXBodml6IGV4YW1wbGVzIGdlbmVyYXRpb24uICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0NMRUFORElSUyArPSBmaWdzCitGSUdTX0RPVCA9IGZpZ3MvZXhhbXBsZS5kb3QgZmlncy9leGFtcGxlLXJlZHVjZS5kb3QgZmlncy9leGFtcGxlLXNoaWZ0LmRvdAorRVhUUkFfRElTVCArPQkJCQkJCQkJXAorICBmaWdzL2V4YW1wbGUueQkJCQkJCQlcCisgICQoRklHU19ET1QpCQkJCQkJCQlcCisgICQoRklHU19ET1Q6LmRvdD0uZXBzKSAkKEZJR1NfRE9UOi5kb3Q9LnBkZikgJChGSUdTX0RPVDouZG90PS5wbmcpCitTVUZGSVhFUyArPSAuZG90IC5lcHMgLnBkZiAucG5nCisKK2Jpc29uLmR2aTogICQoRklHU19ET1Q6LmRvdD0uZXBzKQorYmlzb24uaHRtbDogJChGSUdTX0RPVDouZG90PS5wbmcpCitiaXNvbi5wZGY6ICAkKEZJR1NfRE9UOi5kb3Q9LnBkZikKKworLmRvdC5lcHM6CisJJChBTV9WX0dFTikgJChNS0RJUl9QKSBgZWNobyAiLi8kQCIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgCisJJChBTV9WX2F0KSAkKERPVCkgLUdtYXJnaW49MCAtVGVwcyAkPCA+JEAudG1wCisJJChBTV9WX2F0KSBtdiAkQC50bXAgJEAKKworLmRvdC5wZGY6CisJJChBTV9WX0dFTikgJChNS0RJUl9QKSBgZWNobyAiLi8kQCIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgCisJJChBTV9WX2F0KSAkKERPVCkgLUdtYXJnaW49MCAtVHBkZiAkPCA+JEAudG1wCisJJChBTV9WX2F0KSBtdiAkQC50bXAgJEAKKworLmRvdC5wbmc6CisJJChBTV9WX0dFTikgJChNS0RJUl9QKSBgZWNobyAiLi8kQCIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgCisJJChBTV9WX2F0KSAkKERPVCkgLUdtYXJnaW49MCAtVHBuZyAkPCA+JEAudG1wCisJJChBTV9WX2F0KSBtdiAkQC50bXAgJEAKKworIyMgLS0tLS0tLS0tLS0tLS0gIyMKKyMjIERveHlnZW5hdGlvbi4gICMjCisjIyAtLS0tLS0tLS0tLS0tLSAjIworCitET1hZR0VOID0gZG94eWdlbgorCisuUEhPTlk6IGRvYyBodG1sCisKK2RvYzogaHRtbAorCitodG1sLWxvY2FsOiBEb3h5ZmlsZQorCSQoRE9YWUdFTikKKworZWRpdCA9IHNlZCAtZSAncyxAUEFDS0FHRV9OQU1FXEAsJChQQUNLQUdFX05BTUUpLGcnIFwKKwkgICAtZSAncyxAUEFDS0FHRV9WRVJTSU9OXEAsJChQQUNLQUdFX1ZFUlNJT04pLGcnIFwKKwkgICAtZSAncyxAdG9wX2J1aWxkZGlyXEAsJCh0b3BfYnVpbGRkaXIpLGcnIFwKKwkgICAtZSAncyxAdG9wX3NyY2RpclxALCQodG9wX3NyY2RpciksZycKKworRVhUUkFfRElTVCArPSBEb3h5ZmlsZS5pbgorQ0xFQU5GSUxFUyArPSBEb3h5ZmlsZQorIyBTZWQgaXMgdXNlZCB0byBnZW5lcmF0ZSBEb3h5ZmlsZSBmcm9tIERveHlmaWxlLmluIGluc3RlYWQgb2YKKyMgY29uZmlndXJlLCBiZWNhdXNlIHRoZSBmb3JtZXIgaXMgd2F5IGZhc3RlciB0aGFuIHRoZSBsYXR0ZXIuCitEb3h5ZmlsZTogJChzcmNkaXIpL0RveHlmaWxlLmluCisJJChBTV9WX0dFTikkKGVkaXQpICQoc3JjZGlyKS9Eb3h5ZmlsZS5pbiA+RG94eWZpbGUKKworQ0xFQU5ESVJTICs9IGh0bWwgbGF0ZXgKZGlmZiAtLWdpdCBhL2RvYy9NYWtlZmlsZS5pbiBiL2RvYy9NYWtlZmlsZS5pbgppbmRleCA2Yzg3ZDdiLi40MzU4NWVmIDEwMDY0NAotLS0gYS9kb2MvTWFrZWZpbGUuaW4KKysrIGIvZG9jL01ha2VmaWxlLmluCkBAIC0xLDggKzEsOCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjYgZnJvbSBNYWtlZmlsZS5hbS4KKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTIuNSBmcm9tIE1ha2VmaWxlLmFtLgogIyBAY29uZmlndXJlX2lucHV0QAogCi0jIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKLSMgMjAwMywgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMTk5NC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCiAjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCkBAIC0xMywxNSArMTMsNDEgQEAKICMgUEFSVElDVUxBUiBQVVJQT1NFLgogCiBAU0VUX01BS0VACi1zcmNkaXIgPSBAc3JjZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogVlBBVEggPSBAc3JjZGlyQAorYW1fX21ha2VfZHJ5cnVuID0gXAorICB7IFwKKyAgICBhbV9fZHJ5PW5vOyBcCisgICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCisgICAgICAqXFxbXCBcCV0qKSBcCisgICAgICAgIGVjaG8gJ2FtLS1lY2hvOiA7IEBlY2hvICJBTSIgIE9LJyB8ICQoTUFLRSkgLWYgLSAyPi9kZXYvbnVsbCBcCisgICAgICAgICAgfCBncmVwICdeQU0gT0skJCcgPi9kZXYvbnVsbCB8fCBhbV9fZHJ5PXllczs7IFwKKyAgICAgICopIFwKKyAgICAgICAgZm9yIGFtX19mbGcgaW4gJCRNQUtFRkxBR1M7IGRvIFwKKyAgICAgICAgICBjYXNlICQkYW1fX2ZsZyBpbiBcCisgICAgICAgICAgICAqPSp8LS0qKSA7OyBcCisgICAgICAgICAgICAqbiopIGFtX19kcnk9eWVzOyBicmVhazs7IFwKKyAgICAgICAgICBlc2FjOyBcCisgICAgICAgIGRvbmU7OyBcCisgICAgZXNhYzsgXAorICAgIHRlc3QgJCRhbV9fZHJ5ID0geWVzOyBcCisgIH0KIHBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAogcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi10b3BfYnVpbGRkaXIgPSAuLgorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAogYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotSU5TVEFMTCA9IEBJTlNUQUxMQAogaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKIGluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKIGluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwpAQCAtMzYsNDUgKzYyLDE1NCBAQAogYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKIGhvc3RfdHJpcGxldCA9IEBob3N0QAogc3ViZGlyID0gZG9jCi1ESVNUX0NPTU1PTiA9ICQoYmlzb25fVEVYSU5GT1MpICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCitESVNUX0NPTU1PTiA9ICQoYmlzb25fVEVYSU5GT1MpICQoZGlzdF9tYW5fTUFOUykgJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKIAkkKHNyY2RpcikvTWFrZWZpbGUuaW4gJChzcmNkaXIpL3N0YW1wLXZ0aSBcCi0JJChzcmNkaXIpL3ZlcnNpb24udGV4aQorCSQoc3JjZGlyKS92ZXJzaW9uLnRleGkgJChzcmNkaXIpL3lhY2MuMS5pbiBcCisJJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvbWRhdGUtc2ggXAorCSQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3RleGluZm8udGV4CiBBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaXNvbi1pMThuLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2Mtd29ya2luZy5tNCAkKHRvcF9zcmNkaXIpL200L2N4eC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9kaXJuYW1lLm00ICQodG9wX3NyY2RpcikvbTQvZG1hbGxvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9kb3MubTQgJCh0b3Bfc3JjZGlyKS9tNC9lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9leGl0ZmFpbC5tNCAkKHRvcF9zcmNkaXIpL200L2V4dGVuc2lvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ2V0b3B0Lm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dF9nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9oYXJkLWxvY2FsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9oYXNoLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaF9nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGRfZ2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4X2dsLm00ICQodG9wX3NyY2RpcikvbTQvbTQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbWJydG93Yy5tNCAkKHRvcF9zcmNkaXIpL200L21ic3RhdGVfdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9tYnN3aWR0aC5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9vYnN0YWNrLm00ICQodG9wX3NyY2RpcikvbTQvb25jZW9ubHkubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG9fZ2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC8wMGdudWxpYi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9hbGxvY2EubTQgJCh0b3Bfc3JjZGlyKS9tNC9hc20tdW5kZXJzY29yZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9hc3NlcnQubTQgJCh0b3Bfc3JjZGlyKS9tNC9iaXNvbi1pMThuLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Mtd29ya2luZy5tNCAkKHRvcF9zcmNkaXIpL200L2NhbGxvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZS1zdHJlYW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZW91dC5tNCAkKHRvcF9zcmNkaXIpL200L2NvZGVzZXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29uZmlnLWgubTQgJCh0b3Bfc3JjZGlyKS9tNC9jb25maWdtYWtlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N4eC5tNCAkKHRvcF9zcmNkaXIpL200L2Rpcm5hbWUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZG1hbGxvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9kb3VibGUtc2xhc2gtcm9vdC5tNCAkKHRvcF9zcmNkaXIpL200L2R1cDIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZW52aXJvbi5tNCAkKHRvcF9zcmNkaXIpL200L2Vycm5vX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXJyb3IubTQgJCh0b3Bfc3JjZGlyKS9tNC9leHBvbmVudGQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXhwb25lbnRmLm00ICQodG9wX3NyY2RpcikvbTQvZXhwb25lbnRsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2V4dGVuc2lvbnMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXh0ZXJuLWlubGluZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mYXRhbC1zaWduYWwubTQgJCh0b3Bfc3JjZGlyKS9tNC9mY250bC1vLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZjbnRsLm00ICQodG9wX3NyY2RpcikvbTQvZmNudGxfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mbGV4Lm00ICQodG9wX3NyY2RpcikvbTQvZmxvYXRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mb3Blbi5tNCAkKHRvcF9zcmNkaXIpL200L2ZwZW5kaW5nLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZwaWVlZS5tNCAkKHRvcF9zcmNkaXIpL200L2ZwcmludGYtcG9zaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZnJleHAubTQgJCh0b3Bfc3JjZGlyKS9tNC9mcmV4cGwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZnNldGVyci5tNCAkKHRvcF9zcmNkaXIpL200L2ZzdGF0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dldGRlbGltLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0ZHRhYmxlc2l6ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nZXRsaW5lLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0b3B0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgJCh0b3Bfc3JjZGlyKS9tNC9nbGliYzIxLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dudWxpYi1jb21tb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ251bGliLWNvbXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbmNsdWRlX25leHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2ludG1heF90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzLXByaS5tNCAkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9pc25hbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pc25hbmQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pc25hbmYubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaXNuYW5sLm00ICQodG9wX3NyY2RpcikvbTQvaXN3YmxhbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvamF2YWNvbXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9qYXZhZXhlYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sYXJnZWZpbGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9sZGV4cC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sZGV4cGwubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYnVuaXN0cmluZy1iYXNlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvY2FsY2hhcnNldC5tNCAkKHRvcF9zcmNkaXIpL200L2xvY2FsZS1mci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sb2NhbGUtamEubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb2NhbGUtemgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9jay5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L200Lm00ICQodG9wX3NyY2RpcikvbTQvbWFsbG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21hdGhfaC5tNCAkKHRvcF9zcmNkaXIpL200L21iY2hhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYml0ZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYnJ0b3djLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21ic2luaXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYnN0YXRlX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWJzd2lkdGgubTQgJCh0b3Bfc3JjZGlyKS9tNC9tZW1jaHIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbW1hcC1hbm9uLm00ICQodG9wX3NyY2RpcikvbTQvbW9kZV90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21zdmMtaW52YWwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbXN2Yy1ub3Rocm93Lm00ICQodG9wX3NyY2RpcikvbTQvbXVsdGlhcmNoLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L25scy5tNCAkKHRvcF9zcmNkaXIpL200L25vY3Jhc2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvb2JzdGFjay1wcmludGYubTQgJCh0b3Bfc3JjZGlyKS9tNC9vZmZfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9vcGVuLm00ICQodG9wX3NyY2RpcikvbTQvcGF0aG1heC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wZXJyb3IubTQgJCh0b3Bfc3JjZGlyKS9tNC9waXBlMi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Bvc2l4X3NwYXduLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ByaW50Zi1mcmV4cC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcmludGYtZnJleHBsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ByaW50Zi1wb3NpeC1ycGwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJpbnRmLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAogCSQodG9wX3NyY2RpcikvbTQvcXVvdGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9xdW90ZWFyZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdGRib29sLm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50X2hfZ2wubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RkaW8tc2FmZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHBjcHkubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmFpc2UubTQgJCh0b3Bfc3JjZGlyKS9tNC9yYXdtZW1jaHIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmVhbGxvYy5tNCAkKHRvcF9zcmNkaXIpL200L3NjaGVkX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc2V0ZW52Lm00ICQodG9wX3NyY2RpcikvbTQvc2lnX2F0b21pY190Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NpZ2FjdGlvbi5tNCAkKHRvcF9zcmNkaXIpL200L3NpZ25hbF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NpZ25hbGJsb2NraW5nLm00ICQodG9wX3NyY2RpcikvbTQvc2lnbmJpdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zaXplX21heC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zbnByaW50Zi1wb3NpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zbnByaW50Zi5tNCAkKHRvcF9zcmNkaXIpL200L3NwYXduLXBpcGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3Bhd25faC5tNCAkKHRvcF9zcmNkaXIpL200L3NwcmludGYtcG9zaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3NpemVfdC5tNCAkKHRvcF9zcmNkaXIpL200L3N0YXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RkYm9vbC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGRlZl9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGludC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGlvX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRsaWJfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHBjcHkubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJjaHJudWwubTQgXAogCSQodG9wX3NyY2RpcikvbTQvc3RyZHVwLm00ICQodG9wX3NyY2RpcikvbTQvc3RyZXJyb3IubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RyZXJyb3Jfci5tNCAkKHRvcF9zcmNkaXIpL200L3N0cmluZ19oLm00IFwKIAkkKHRvcF9zcmNkaXIpL200L3N0cm5kdXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJubGVuLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3N0cnRvbC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cnRvdWwubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RydmVyc2NtcC5tNCAkKHRvcF9zcmNkaXIpL200L3N1YnBpcGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvdGltZXZhci5tNCAkKHRvcF9zcmNkaXIpL200L3VpbnRtYXhfdF9nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC91bG9uZ2xvbmdfZ2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RydG91bC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cnZlcnNjbXAubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3lzX3NvY2tldF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N5c19zdGF0X2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zeXNfdHlwZXNfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zeXNfd2FpdF9oLm00ICQodG9wX3NyY2RpcikvbTQvdGhyZWFkbGliLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3RpbWVfaC5tNCAkKHRvcF9zcmNkaXIpL200L3RpbWV2YXIubTQgXAogCSQodG9wX3NyY2RpcikvbTQvdW5pc3RkLXNhZmVyLm00ICQodG9wX3NyY2RpcikvbTQvdW5pc3RkX2gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvdW5sb2NrZWQtaW8ubTQgJCh0b3Bfc3JjZGlyKS9tNC93YXJuaW5nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3hhbGxvYy5tNCAkKHRvcF9zcmNkaXIpL200L3hzdHJuZHVwLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3VubG9ja2VkLWlvLm00ICQodG9wX3NyY2RpcikvbTQvdmFzbnByaW50Zi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC92ZnByaW50Zi1wb3NpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC92c25wcmludGYtcG9zaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdnNucHJpbnRmLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ZzcHJpbnRmLXBvc2l4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3dhaXQtcHJvY2Vzcy5tNCAkKHRvcF9zcmNkaXIpL200L3dhaXRwaWQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2Fybi1vbi11c2UubTQgJCh0b3Bfc3JjZGlyKS9tNC93YXJuaW5ncy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93Y2hhcl9oLm00ICQodG9wX3NyY2RpcikvbTQvd2NoYXJfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93Y3R5cGVfaC5tNCAkKHRvcF9zcmNkaXIpL200L3djd2lkdGgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2ludF90Lm00ICQodG9wX3NyY2RpcikvbTQveGFsbG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3hzaXplLm00ICQodG9wX3NyY2RpcikvbTQveHN0cm5kdXAubTQgXAogCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCiBhbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAogCSQoQUNMT0NBTF9NNCkKLW1raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9ta2luc3RhbGxkaXJzCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPSB5YWNjLjEKK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitBTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQorYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCithbV9fdl9QXzAgPSBmYWxzZQorYW1fX3ZfUF8xID0gOgorQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKK2FtX192X0dFTl8xID0gCitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK2FtX192X2F0XzEgPSAKIFNPVVJDRVMgPQogRElTVF9TT1VSQ0VTID0KK0FNX1ZfRFZJUFMgPSAkKGFtX192X0RWSVBTX0BBTV9WQCkKK2FtX192X0RWSVBTXyA9ICQoYW1fX3ZfRFZJUFNfQEFNX0RFRkFVTFRfVkApCithbV9fdl9EVklQU18wID0gQGVjaG8gIiAgRFZJUFMgICAiICRAOworYW1fX3ZfRFZJUFNfMSA9IAorQU1fVl9NQUtFSU5GTyA9ICQoYW1fX3ZfTUFLRUlORk9fQEFNX1ZAKQorYW1fX3ZfTUFLRUlORk9fID0gJChhbV9fdl9NQUtFSU5GT19AQU1fREVGQVVMVF9WQCkKK2FtX192X01BS0VJTkZPXzAgPSBAZWNobyAiICBNQUtFSU5GTyIgJEA7CithbV9fdl9NQUtFSU5GT18xID0gCitBTV9WX0lORk9IVE1MID0gJChhbV9fdl9JTkZPSFRNTF9AQU1fVkApCithbV9fdl9JTkZPSFRNTF8gPSAkKGFtX192X0lORk9IVE1MX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfSU5GT0hUTUxfMCA9IEBlY2hvICIgIElORk9IVE1MIiAkQDsKK2FtX192X0lORk9IVE1MXzEgPSAKK0FNX1ZfVEVYSTJEVkkgPSAkKGFtX192X1RFWEkyRFZJX0BBTV9WQCkKK2FtX192X1RFWEkyRFZJXyA9ICQoYW1fX3ZfVEVYSTJEVklfQEFNX0RFRkFVTFRfVkApCithbV9fdl9URVhJMkRWSV8wID0gQGVjaG8gIiAgVEVYSTJEVkkiICRAOworYW1fX3ZfVEVYSTJEVklfMSA9IAorQU1fVl9URVhJMlBERiA9ICQoYW1fX3ZfVEVYSTJQREZfQEFNX1ZAKQorYW1fX3ZfVEVYSTJQREZfID0gJChhbV9fdl9URVhJMlBERl9AQU1fREVGQVVMVF9WQCkKK2FtX192X1RFWEkyUERGXzAgPSBAZWNobyAiICBURVhJMlBERiIgJEA7CithbV9fdl9URVhJMlBERl8xID0gCitBTV9WX3RleGluZm8gPSAkKGFtX192X3RleGluZm9fQEFNX1ZAKQorYW1fX3ZfdGV4aW5mb18gPSAkKGFtX192X3RleGluZm9fQEFNX0RFRkFVTFRfVkApCithbV9fdl90ZXhpbmZvXzAgPSAtcQorYW1fX3ZfdGV4aW5mb18xID0gCitBTV9WX3RleGlkZXZudWxsID0gJChhbV9fdl90ZXhpZGV2bnVsbF9AQU1fVkApCithbV9fdl90ZXhpZGV2bnVsbF8gPSAkKGFtX192X3RleGlkZXZudWxsX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfdGV4aWRldm51bGxfMCA9ID4gL2Rldi9udWxsCithbV9fdl90ZXhpZGV2bnVsbF8xID0gCiBJTkZPX0RFUFMgPSAkKHNyY2RpcikvYmlzb24uaW5mbwogVEVYSU5GT19URVggPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC90ZXhpbmZvLnRleAogYW1fX1RFWElORk9fVEVYX0RJUiA9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4CkBAIC04MiwxMDggKzIxNywxMTQ0IEBACiBQREZTID0gYmlzb24ucGRmCiBQU1MgPSBiaXNvbi5wcwogSFRNTFMgPSBiaXNvbi5odG1sCi1URVhJTkZPUyA9IGJpc29uLnRleGluZm8KK1RFWElORk9TID0gYmlzb24udGV4aQogVEVYSTJEVkkgPSB0ZXhpMmR2aQogVEVYSTJQREYgPSAkKFRFWEkyRFZJKSAtLXBkZiAtLWJhdGNoCiBNQUtFSU5GT0hUTUwgPSAkKE1BS0VJTkZPKSAtLWh0bWwKIEFNX01BS0VJTkZPSFRNTEZMQUdTID0gJChBTV9NQUtFSU5GT0ZMQUdTKQogRFZJUFMgPSBkdmlwcworYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCisgIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAorICAgIG58bm98Tk8pIGZhbHNlOzsgXAorICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCisgIGVzYWMKIGFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChpbmZvZGlyKSIgIiQoREVTVERJUikkKG1hbjFkaXIpIgorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAorICB0ZXN0IC16ICIkJGZpbGVzIiBcCisgICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCisgICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAorICB9CiBtYW4xZGlyID0gJChtYW5kaXIpL21hbjEKIE5ST0ZGID0gbnJvZmYKLU1BTlMgPSAkKG1hbl9NQU5TKQorTUFOUyA9ICQoZGlzdF9tYW5fTUFOUykgJChub2Rpc3RfbWFuX01BTlMpCiBESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorcGtnbGliZXhlY2RpciA9IEBwa2dsaWJleGVjZGlyQAogQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQU1ERVBfRkFMU0UgPSBAQU1ERVBfRkFMU0VACi1BTURFUF9UUlVFID0gQEFNREVQX1RSVUVACitBTExPQ0EgPSBAQUxMT0NBQAorQUxMT0NBX0ggPSBAQUxMT0NBX0hACiBBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVBQTEVfVU5JVkVSU0FMX0JVSUxEID0gQEFQUExFX1VOSVZFUlNBTF9CVUlMREAKK0FSID0gQEFSQAorQVJGTEFHUyA9IEBBUkZMQUdTQAorQVNNX1NZTUJPTF9QUkVGSVggPSBAQVNNX1NZTUJPTF9QUkVGSVhACiBBVVRPQ09ORiA9IEBBVVRPQ09ORkAKIEFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKIEFVVE9NNFRFID0gQEFVVE9NNFRFQAogQVVUT01BS0UgPSBAQVVUT01BS0VACiBBV0sgPSBAQVdLQAogQklTT05fQ1hYX1dPUktTID0gQEJJU09OX0NYWF9XT1JLU0AKLUJJU09OX0NYWF9XT1JLU19GQUxTRSA9IEBCSVNPTl9DWFhfV09SS1NfRkFMU0VACi1CSVNPTl9DWFhfV09SS1NfVFJVRSA9IEBCSVNPTl9DWFhfV09SS1NfVFJVRUAKK0JJU09OX0NfV09SS1MgPSBAQklTT05fQ19XT1JLU0AKIEJJU09OX0xPQ0FMRURJUiA9IEBCSVNPTl9MT0NBTEVESVJACitCSVRTSVpFT0ZfUFRSRElGRl9UID0gQEJJVFNJWkVPRl9QVFJESUZGX1RACitCSVRTSVpFT0ZfU0lHX0FUT01JQ19UID0gQEJJVFNJWkVPRl9TSUdfQVRPTUlDX1RACitCSVRTSVpFT0ZfU0laRV9UID0gQEJJVFNJWkVPRl9TSVpFX1RACitCSVRTSVpFT0ZfV0NIQVJfVCA9IEBCSVRTSVpFT0ZfV0NIQVJfVEAKK0JJVFNJWkVPRl9XSU5UX1QgPSBAQklUU0laRU9GX1dJTlRfVEAKIENDID0gQENDQAogQ0NERVBNT0RFID0gQENDREVQTU9ERUAKIENGTEFHUyA9IEBDRkxBR1NACitDTEFTU1BBVEggPSBAQ0xBU1NQQVRIQAorQ0xBU1NQQVRIX1NFUEFSQVRPUiA9IEBDTEFTU1BBVEhfU0VQQVJBVE9SQAorQ09ORklHX0lOQ0xVREUgPSBAQ09ORklHX0lOQ0xVREVACitDT05GX0pBVkEgPSBAQ09ORl9KQVZBQAorQ09ORl9KQVZBQyA9IEBDT05GX0pBVkFDQAogQ1BQID0gQENQUEAKIENQUEZMQUdTID0gQENQUEZMQUdTQAogQ1hYID0gQENYWEAKIENYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKIENYWEZMQUdTID0gQENYWEZMQUdTQAorQ1hYX0NPTVBJTEVSX1BPU0lYTFlfQ09SUkVDVCA9IEBDWFhfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUQAogQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0NfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUID0gQENfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUQAogREVGUyA9IEBERUZTQAogREVQRElSID0gQERFUERJUkAKK0RPVCA9IEBET1RACiBFQ0hPX0MgPSBARUNIT19DQAogRUNIT19OID0gQEVDSE9fTkAKIEVDSE9fVCA9IEBFQ0hPX1RACiBFR1JFUCA9IEBFR1JFUEAKK0VNVUxUSUhPUF9ISURERU4gPSBARU1VTFRJSE9QX0hJRERFTkAKK0VNVUxUSUhPUF9WQUxVRSA9IEBFTVVMVElIT1BfVkFMVUVACitFTk9MSU5LX0hJRERFTiA9IEBFTk9MSU5LX0hJRERFTkAKK0VOT0xJTktfVkFMVUUgPSBARU5PTElOS19WQUxVRUAKK0VPVkVSRkxPV19ISURERU4gPSBARU9WRVJGTE9XX0hJRERFTkAKK0VPVkVSRkxPV19WQUxVRSA9IEBFT1ZFUkZMT1dfVkFMVUVACitFUlJOT19IID0gQEVSUk5PX0hACiBFWEVFWFQgPSBARVhFRVhUQAorRkxPQVRfSCA9IEBGTE9BVF9IQAogR0NDID0gQEdDQ0AKIEdFVE9QVF9IID0gQEdFVE9QVF9IQAorR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKK0dMSUJDMjEgPSBAR0xJQkMyMUAKIEdNU0dGTVQgPSBAR01TR0ZNVEAKK0dNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAorR05VTElCX0FDT1NGID0gQEdOVUxJQl9BQ09TRkAKK0dOVUxJQl9BQ09TTCA9IEBHTlVMSUJfQUNPU0xACitHTlVMSUJfQVNJTkYgPSBAR05VTElCX0FTSU5GQAorR05VTElCX0FTSU5MID0gQEdOVUxJQl9BU0lOTEAKK0dOVUxJQl9BVEFOMkYgPSBAR05VTElCX0FUQU4yRkAKK0dOVUxJQl9BVEFORiA9IEBHTlVMSUJfQVRBTkZACitHTlVMSUJfQVRBTkwgPSBAR05VTElCX0FUQU5MQAorR05VTElCX0FUT0xMID0gQEdOVUxJQl9BVE9MTEAKK0dOVUxJQl9CVE9XQyA9IEBHTlVMSUJfQlRPV0NACitHTlVMSUJfQ0FMTE9DX1BPU0lYID0gQEdOVUxJQl9DQUxMT0NfUE9TSVhACitHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRSA9IEBHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRUAKK0dOVUxJQl9DQlJUID0gQEdOVUxJQl9DQlJUQAorR05VTElCX0NCUlRGID0gQEdOVUxJQl9DQlJURkAKK0dOVUxJQl9DQlJUTCA9IEBHTlVMSUJfQ0JSVExACitHTlVMSUJfQ0VJTCA9IEBHTlVMSUJfQ0VJTEAKK0dOVUxJQl9DRUlMRiA9IEBHTlVMSUJfQ0VJTEZACitHTlVMSUJfQ0VJTEwgPSBAR05VTElCX0NFSUxMQAorR05VTElCX0NIRElSID0gQEdOVUxJQl9DSERJUkAKK0dOVUxJQl9DSE9XTiA9IEBHTlVMSUJfQ0hPV05ACitHTlVMSUJfQ0xPU0UgPSBAR05VTElCX0NMT1NFQAorR05VTElCX0NPUFlTSUdOID0gQEdOVUxJQl9DT1BZU0lHTkAKK0dOVUxJQl9DT1BZU0lHTkYgPSBAR05VTElCX0NPUFlTSUdORkAKK0dOVUxJQl9DT1BZU0lHTkwgPSBAR05VTElCX0NPUFlTSUdOTEAKK0dOVUxJQl9DT1NGID0gQEdOVUxJQl9DT1NGQAorR05VTElCX0NPU0hGID0gQEdOVUxJQl9DT1NIRkAKK0dOVUxJQl9DT1NMID0gQEdOVUxJQl9DT1NMQAorR05VTElCX0RQUklOVEYgPSBAR05VTElCX0RQUklOVEZACitHTlVMSUJfRFVQID0gQEdOVUxJQl9EVVBACitHTlVMSUJfRFVQMiA9IEBHTlVMSUJfRFVQMkAKK0dOVUxJQl9EVVAzID0gQEdOVUxJQl9EVVAzQAorR05VTElCX0VOVklST04gPSBAR05VTElCX0VOVklST05ACitHTlVMSUJfRVVJREFDQ0VTUyA9IEBHTlVMSUJfRVVJREFDQ0VTU0AKK0dOVUxJQl9FWFAyID0gQEdOVUxJQl9FWFAyQAorR05VTElCX0VYUDJGID0gQEdOVUxJQl9FWFAyRkAKK0dOVUxJQl9FWFAyTCA9IEBHTlVMSUJfRVhQMkxACitHTlVMSUJfRVhQRiA9IEBHTlVMSUJfRVhQRkAKK0dOVUxJQl9FWFBMID0gQEdOVUxJQl9FWFBMQAorR05VTElCX0VYUE0xID0gQEdOVUxJQl9FWFBNMUAKK0dOVUxJQl9FWFBNMUYgPSBAR05VTElCX0VYUE0xRkAKK0dOVUxJQl9FWFBNMUwgPSBAR05VTElCX0VYUE0xTEAKK0dOVUxJQl9GQUJTRiA9IEBHTlVMSUJfRkFCU0ZACitHTlVMSUJfRkFCU0wgPSBAR05VTElCX0ZBQlNMQAorR05VTElCX0ZBQ0NFU1NBVCA9IEBHTlVMSUJfRkFDQ0VTU0FUQAorR05VTElCX0ZDSERJUiA9IEBHTlVMSUJfRkNIRElSQAorR05VTElCX0ZDSE1PREFUID0gQEdOVUxJQl9GQ0hNT0RBVEAKK0dOVUxJQl9GQ0hPV05BVCA9IEBHTlVMSUJfRkNIT1dOQVRACitHTlVMSUJfRkNMT1NFID0gQEdOVUxJQl9GQ0xPU0VACitHTlVMSUJfRkNOVEwgPSBAR05VTElCX0ZDTlRMQAorR05VTElCX0ZEQVRBU1lOQyA9IEBHTlVMSUJfRkRBVEFTWU5DQAorR05VTElCX0ZET1BFTiA9IEBHTlVMSUJfRkRPUEVOQAorR05VTElCX0ZGTFVTSCA9IEBHTlVMSUJfRkZMVVNIQAorR05VTElCX0ZGU0wgPSBAR05VTElCX0ZGU0xACitHTlVMSUJfRkZTTEwgPSBAR05VTElCX0ZGU0xMQAorR05VTElCX0ZHRVRDID0gQEdOVUxJQl9GR0VUQ0AKK0dOVUxJQl9GR0VUUyA9IEBHTlVMSUJfRkdFVFNACitHTlVMSUJfRkxPT1IgPSBAR05VTElCX0ZMT09SQAorR05VTElCX0ZMT09SRiA9IEBHTlVMSUJfRkxPT1JGQAorR05VTElCX0ZMT09STCA9IEBHTlVMSUJfRkxPT1JMQAorR05VTElCX0ZNQSA9IEBHTlVMSUJfRk1BQAorR05VTElCX0ZNQUYgPSBAR05VTElCX0ZNQUZACitHTlVMSUJfRk1BTCA9IEBHTlVMSUJfRk1BTEAKK0dOVUxJQl9GTU9EID0gQEdOVUxJQl9GTU9EQAorR05VTElCX0ZNT0RGID0gQEdOVUxJQl9GTU9ERkAKK0dOVUxJQl9GTU9ETCA9IEBHTlVMSUJfRk1PRExACitHTlVMSUJfRk9QRU4gPSBAR05VTElCX0ZPUEVOQAorR05VTElCX0ZQUklOVEYgPSBAR05VTElCX0ZQUklOVEZACitHTlVMSUJfRlBSSU5URl9QT1NJWCA9IEBHTlVMSUJfRlBSSU5URl9QT1NJWEAKK0dOVUxJQl9GUFVSR0UgPSBAR05VTElCX0ZQVVJHRUAKK0dOVUxJQl9GUFVUQyA9IEBHTlVMSUJfRlBVVENACitHTlVMSUJfRlBVVFMgPSBAR05VTElCX0ZQVVRTQAorR05VTElCX0ZSRUFEID0gQEdOVUxJQl9GUkVBREAKK0dOVUxJQl9GUkVPUEVOID0gQEdOVUxJQl9GUkVPUEVOQAorR05VTElCX0ZSRVhQID0gQEdOVUxJQl9GUkVYUEAKK0dOVUxJQl9GUkVYUEYgPSBAR05VTElCX0ZSRVhQRkAKK0dOVUxJQl9GUkVYUEwgPSBAR05VTElCX0ZSRVhQTEAKK0dOVUxJQl9GU0NBTkYgPSBAR05VTElCX0ZTQ0FORkAKK0dOVUxJQl9GU0VFSyA9IEBHTlVMSUJfRlNFRUtACitHTlVMSUJfRlNFRUtPID0gQEdOVUxJQl9GU0VFS09ACitHTlVMSUJfRlNUQVQgPSBAR05VTElCX0ZTVEFUQAorR05VTElCX0ZTVEFUQVQgPSBAR05VTElCX0ZTVEFUQVRACitHTlVMSUJfRlNZTkMgPSBAR05VTElCX0ZTWU5DQAorR05VTElCX0ZURUxMID0gQEdOVUxJQl9GVEVMTEAKK0dOVUxJQl9GVEVMTE8gPSBAR05VTElCX0ZURUxMT0AKK0dOVUxJQl9GVFJVTkNBVEUgPSBAR05VTElCX0ZUUlVOQ0FURUAKK0dOVUxJQl9GVVRJTUVOUyA9IEBHTlVMSUJfRlVUSU1FTlNACitHTlVMSUJfRldSSVRFID0gQEdOVUxJQl9GV1JJVEVACitHTlVMSUJfR0VUQyA9IEBHTlVMSUJfR0VUQ0AKK0dOVUxJQl9HRVRDSEFSID0gQEdOVUxJQl9HRVRDSEFSQAorR05VTElCX0dFVENXRCA9IEBHTlVMSUJfR0VUQ1dEQAorR05VTElCX0dFVERFTElNID0gQEdOVUxJQl9HRVRERUxJTUAKK0dOVUxJQl9HRVRET01BSU5OQU1FID0gQEdOVUxJQl9HRVRET01BSU5OQU1FQAorR05VTElCX0dFVERUQUJMRVNJWkUgPSBAR05VTElCX0dFVERUQUJMRVNJWkVACitHTlVMSUJfR0VUR1JPVVBTID0gQEdOVUxJQl9HRVRHUk9VUFNACitHTlVMSUJfR0VUSE9TVE5BTUUgPSBAR05VTElCX0dFVEhPU1ROQU1FQAorR05VTElCX0dFVExJTkUgPSBAR05VTElCX0dFVExJTkVACitHTlVMSUJfR0VUTE9BREFWRyA9IEBHTlVMSUJfR0VUTE9BREFWR0AKK0dOVUxJQl9HRVRMT0dJTiA9IEBHTlVMSUJfR0VUTE9HSU5ACitHTlVMSUJfR0VUTE9HSU5fUiA9IEBHTlVMSUJfR0VUTE9HSU5fUkAKK0dOVUxJQl9HRVRQQUdFU0laRSA9IEBHTlVMSUJfR0VUUEFHRVNJWkVACitHTlVMSUJfR0VUU1VCT1BUID0gQEdOVUxJQl9HRVRTVUJPUFRACitHTlVMSUJfR0VUVVNFUlNIRUxMID0gQEdOVUxJQl9HRVRVU0VSU0hFTExACitHTlVMSUJfR0xfVU5JU1REX0hfR0VUT1BUID0gQEdOVUxJQl9HTF9VTklTVERfSF9HRVRPUFRACitHTlVMSUJfR1JBTlRQVCA9IEBHTlVMSUJfR1JBTlRQVEAKK0dOVUxJQl9HUk9VUF9NRU1CRVIgPSBAR05VTElCX0dST1VQX01FTUJFUkAKK0dOVUxJQl9IWVBPVCA9IEBHTlVMSUJfSFlQT1RACitHTlVMSUJfSFlQT1RGID0gQEdOVUxJQl9IWVBPVEZACitHTlVMSUJfSFlQT1RMID0gQEdOVUxJQl9IWVBPVExACitHTlVMSUJfSUxPR0IgPSBAR05VTElCX0lMT0dCQAorR05VTElCX0lMT0dCRiA9IEBHTlVMSUJfSUxPR0JGQAorR05VTElCX0lMT0dCTCA9IEBHTlVMSUJfSUxPR0JMQAorR05VTElCX0lNQVhBQlMgPSBAR05VTElCX0lNQVhBQlNACitHTlVMSUJfSU1BWERJViA9IEBHTlVMSUJfSU1BWERJVkAKK0dOVUxJQl9JU0FUVFkgPSBAR05VTElCX0lTQVRUWUAKK0dOVUxJQl9JU0ZJTklURSA9IEBHTlVMSUJfSVNGSU5JVEVACitHTlVMSUJfSVNJTkYgPSBAR05VTElCX0lTSU5GQAorR05VTElCX0lTTkFOID0gQEdOVUxJQl9JU05BTkAKK0dOVUxJQl9JU05BTkQgPSBAR05VTElCX0lTTkFOREAKK0dOVUxJQl9JU05BTkYgPSBAR05VTElCX0lTTkFORkAKK0dOVUxJQl9JU05BTkwgPSBAR05VTElCX0lTTkFOTEAKK0dOVUxJQl9JU1dCTEFOSyA9IEBHTlVMSUJfSVNXQkxBTktACitHTlVMSUJfSVNXQ1RZUEUgPSBAR05VTElCX0lTV0NUWVBFQAorR05VTElCX0xDSE1PRCA9IEBHTlVMSUJfTENITU9EQAorR05VTElCX0xDSE9XTiA9IEBHTlVMSUJfTENIT1dOQAorR05VTElCX0xERVhQRiA9IEBHTlVMSUJfTERFWFBGQAorR05VTElCX0xERVhQTCA9IEBHTlVMSUJfTERFWFBMQAorR05VTElCX0xJTksgPSBAR05VTElCX0xJTktACitHTlVMSUJfTElOS0FUID0gQEdOVUxJQl9MSU5LQVRACitHTlVMSUJfTE9HID0gQEdOVUxJQl9MT0dACitHTlVMSUJfTE9HMTAgPSBAR05VTElCX0xPRzEwQAorR05VTElCX0xPRzEwRiA9IEBHTlVMSUJfTE9HMTBGQAorR05VTElCX0xPRzEwTCA9IEBHTlVMSUJfTE9HMTBMQAorR05VTElCX0xPRzFQID0gQEdOVUxJQl9MT0cxUEAKK0dOVUxJQl9MT0cxUEYgPSBAR05VTElCX0xPRzFQRkAKK0dOVUxJQl9MT0cxUEwgPSBAR05VTElCX0xPRzFQTEAKK0dOVUxJQl9MT0cyID0gQEdOVUxJQl9MT0cyQAorR05VTElCX0xPRzJGID0gQEdOVUxJQl9MT0cyRkAKK0dOVUxJQl9MT0cyTCA9IEBHTlVMSUJfTE9HMkxACitHTlVMSUJfTE9HQiA9IEBHTlVMSUJfTE9HQkAKK0dOVUxJQl9MT0dCRiA9IEBHTlVMSUJfTE9HQkZACitHTlVMSUJfTE9HQkwgPSBAR05VTElCX0xPR0JMQAorR05VTElCX0xPR0YgPSBAR05VTElCX0xPR0ZACitHTlVMSUJfTE9HTCA9IEBHTlVMSUJfTE9HTEAKK0dOVUxJQl9MU0VFSyA9IEBHTlVMSUJfTFNFRUtACitHTlVMSUJfTFNUQVQgPSBAR05VTElCX0xTVEFUQAorR05VTElCX01BTExPQ19QT1NJWCA9IEBHTlVMSUJfTUFMTE9DX1BPU0lYQAorR05VTElCX01CUkxFTiA9IEBHTlVMSUJfTUJSTEVOQAorR05VTElCX01CUlRPV0MgPSBAR05VTElCX01CUlRPV0NACitHTlVMSUJfTUJTQ0FTRUNNUCA9IEBHTlVMSUJfTUJTQ0FTRUNNUEAKK0dOVUxJQl9NQlNDQVNFU1RSID0gQEdOVUxJQl9NQlNDQVNFU1RSQAorR05VTElCX01CU0NIUiA9IEBHTlVMSUJfTUJTQ0hSQAorR05VTElCX01CU0NTUE4gPSBAR05VTElCX01CU0NTUE5ACitHTlVMSUJfTUJTSU5JVCA9IEBHTlVMSUJfTUJTSU5JVEAKK0dOVUxJQl9NQlNMRU4gPSBAR05VTElCX01CU0xFTkAKK0dOVUxJQl9NQlNOQ0FTRUNNUCA9IEBHTlVMSUJfTUJTTkNBU0VDTVBACitHTlVMSUJfTUJTTkxFTiA9IEBHTlVMSUJfTUJTTkxFTkAKK0dOVUxJQl9NQlNOUlRPV0NTID0gQEdOVUxJQl9NQlNOUlRPV0NTQAorR05VTElCX01CU1BCUksgPSBAR05VTElCX01CU1BCUktACitHTlVMSUJfTUJTUENBU0VDTVAgPSBAR05VTElCX01CU1BDQVNFQ01QQAorR05VTElCX01CU1JDSFIgPSBAR05VTElCX01CU1JDSFJACitHTlVMSUJfTUJTUlRPV0NTID0gQEdOVUxJQl9NQlNSVE9XQ1NACitHTlVMSUJfTUJTU0VQID0gQEdOVUxJQl9NQlNTRVBACitHTlVMSUJfTUJTU1BOID0gQEdOVUxJQl9NQlNTUE5ACitHTlVMSUJfTUJTU1RSID0gQEdOVUxJQl9NQlNTVFJACitHTlVMSUJfTUJTVE9LX1IgPSBAR05VTElCX01CU1RPS19SQAorR05VTElCX01CVE9XQyA9IEBHTlVMSUJfTUJUT1dDQAorR05VTElCX01FTUNIUiA9IEBHTlVMSUJfTUVNQ0hSQAorR05VTElCX01FTU1FTSA9IEBHTlVMSUJfTUVNTUVNQAorR05VTElCX01FTVBDUFkgPSBAR05VTElCX01FTVBDUFlACitHTlVMSUJfTUVNUkNIUiA9IEBHTlVMSUJfTUVNUkNIUkAKK0dOVUxJQl9NS0RJUkFUID0gQEdOVUxJQl9NS0RJUkFUQAorR05VTElCX01LRFRFTVAgPSBAR05VTElCX01LRFRFTVBACitHTlVMSUJfTUtGSUZPID0gQEdOVUxJQl9NS0ZJRk9ACitHTlVMSUJfTUtGSUZPQVQgPSBAR05VTElCX01LRklGT0FUQAorR05VTElCX01LTk9EID0gQEdOVUxJQl9NS05PREAKK0dOVUxJQl9NS05PREFUID0gQEdOVUxJQl9NS05PREFUQAorR05VTElCX01LT1NURU1QID0gQEdOVUxJQl9NS09TVEVNUEAKK0dOVUxJQl9NS09TVEVNUFMgPSBAR05VTElCX01LT1NURU1QU0AKK0dOVUxJQl9NS1NURU1QID0gQEdOVUxJQl9NS1NURU1QQAorR05VTElCX01LU1RFTVBTID0gQEdOVUxJQl9NS1NURU1QU0AKK0dOVUxJQl9NS1RJTUUgPSBAR05VTElCX01LVElNRUAKK0dOVUxJQl9NT0RGID0gQEdOVUxJQl9NT0RGQAorR05VTElCX01PREZGID0gQEdOVUxJQl9NT0RGRkAKK0dOVUxJQl9NT0RGTCA9IEBHTlVMSUJfTU9ERkxACitHTlVMSUJfTkFOT1NMRUVQID0gQEdOVUxJQl9OQU5PU0xFRVBACitHTlVMSUJfTk9OQkxPQ0tJTkcgPSBAR05VTElCX05PTkJMT0NLSU5HQAorR05VTElCX09CU1RBQ0tfUFJJTlRGID0gQEdOVUxJQl9PQlNUQUNLX1BSSU5URkAKK0dOVUxJQl9PQlNUQUNLX1BSSU5URl9QT1NJWCA9IEBHTlVMSUJfT0JTVEFDS19QUklOVEZfUE9TSVhACitHTlVMSUJfT1BFTiA9IEBHTlVMSUJfT1BFTkAKK0dOVUxJQl9PUEVOQVQgPSBAR05VTElCX09QRU5BVEAKK0dOVUxJQl9QQ0xPU0UgPSBAR05VTElCX1BDTE9TRUAKK0dOVUxJQl9QRVJST1IgPSBAR05VTElCX1BFUlJPUkAKK0dOVUxJQl9QSVBFID0gQEdOVUxJQl9QSVBFQAorR05VTElCX1BJUEUyID0gQEdOVUxJQl9QSVBFMkAKK0dOVUxJQl9QT1BFTiA9IEBHTlVMSUJfUE9QRU5ACitHTlVMSUJfUE9TSVhfT1BFTlBUID0gQEdOVUxJQl9QT1NJWF9PUEVOUFRACitHTlVMSUJfUE9TSVhfU1BBV04gPSBAR05VTElCX1BPU0lYX1NQQVdOQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9ERVNUUk9ZID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfREVTVFJPWUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VURkxBR1MgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRGTEFHU0AKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUUEdST1VQID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUUEdST1VQQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBBUkFNID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0NIRURQQVJBTUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0NIRURQT0xJQ1kgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBPTElDWUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0lHREVGQVVMVCA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNJR0RFRkFVTFRACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNJR01BU0sgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdNQVNLQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9JTklUID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfSU5JVEAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VURkxBR1MgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRGTEFHU0AKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUUEdST1VQID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUUEdST1VQQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTQ0hFRFBBUkFNID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQQVJBTUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQT0xJQ1kgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTQ0hFRFBPTElDWUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0lHREVGQVVMVCA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNJR0RFRkFVTFRACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNJR01BU0sgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTSUdNQVNLQAorR05VTElCX1BPU0lYX1NQQVdOUCA9IEBHTlVMSUJfUE9TSVhfU1BBV05QQAorR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRSA9IEBHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERENMT1NFQAorR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BREREVVAyID0gQEdOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMkAKK0dOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURET1BFTiA9IEBHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU5ACitHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0RFU1RST1kgPSBAR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19ERVNUUk9ZQAorR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19JTklUID0gQEdOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfSU5JVEAKK0dOVUxJQl9QT1dGID0gQEdOVUxJQl9QT1dGQAorR05VTElCX1BSRUFEID0gQEdOVUxJQl9QUkVBREAKK0dOVUxJQl9QUklOVEYgPSBAR05VTElCX1BSSU5URkAKK0dOVUxJQl9QUklOVEZfUE9TSVggPSBAR05VTElCX1BSSU5URl9QT1NJWEAKK0dOVUxJQl9QVEhSRUFEX1NJR01BU0sgPSBAR05VTElCX1BUSFJFQURfU0lHTUFTS0AKK0dOVUxJQl9QVFNOQU1FID0gQEdOVUxJQl9QVFNOQU1FQAorR05VTElCX1BUU05BTUVfUiA9IEBHTlVMSUJfUFRTTkFNRV9SQAorR05VTElCX1BVVEMgPSBAR05VTElCX1BVVENACitHTlVMSUJfUFVUQ0hBUiA9IEBHTlVMSUJfUFVUQ0hBUkAKK0dOVUxJQl9QVVRFTlYgPSBAR05VTElCX1BVVEVOVkAKK0dOVUxJQl9QVVRTID0gQEdOVUxJQl9QVVRTQAorR05VTElCX1BXUklURSA9IEBHTlVMSUJfUFdSSVRFQAorR05VTElCX1JBSVNFID0gQEdOVUxJQl9SQUlTRUAKK0dOVUxJQl9SQU5ET00gPSBAR05VTElCX1JBTkRPTUAKK0dOVUxJQl9SQU5ET01fUiA9IEBHTlVMSUJfUkFORE9NX1JACitHTlVMSUJfUkFXTUVNQ0hSID0gQEdOVUxJQl9SQVdNRU1DSFJACitHTlVMSUJfUkVBRCA9IEBHTlVMSUJfUkVBREAKK0dOVUxJQl9SRUFETElOSyA9IEBHTlVMSUJfUkVBRExJTktACitHTlVMSUJfUkVBRExJTktBVCA9IEBHTlVMSUJfUkVBRExJTktBVEAKK0dOVUxJQl9SRUFMTE9DX1BPU0lYID0gQEdOVUxJQl9SRUFMTE9DX1BPU0lYQAorR05VTElCX1JFQUxQQVRIID0gQEdOVUxJQl9SRUFMUEFUSEAKK0dOVUxJQl9SRU1BSU5ERVIgPSBAR05VTElCX1JFTUFJTkRFUkAKK0dOVUxJQl9SRU1BSU5ERVJGID0gQEdOVUxJQl9SRU1BSU5ERVJGQAorR05VTElCX1JFTUFJTkRFUkwgPSBAR05VTElCX1JFTUFJTkRFUkxACitHTlVMSUJfUkVNT1ZFID0gQEdOVUxJQl9SRU1PVkVACitHTlVMSUJfUkVOQU1FID0gQEdOVUxJQl9SRU5BTUVACitHTlVMSUJfUkVOQU1FQVQgPSBAR05VTElCX1JFTkFNRUFUQAorR05VTElCX1JJTlQgPSBAR05VTElCX1JJTlRACitHTlVMSUJfUklOVEYgPSBAR05VTElCX1JJTlRGQAorR05VTElCX1JJTlRMID0gQEdOVUxJQl9SSU5UTEAKK0dOVUxJQl9STURJUiA9IEBHTlVMSUJfUk1ESVJACitHTlVMSUJfUk9VTkQgPSBAR05VTElCX1JPVU5EQAorR05VTElCX1JPVU5ERiA9IEBHTlVMSUJfUk9VTkRGQAorR05VTElCX1JPVU5ETCA9IEBHTlVMSUJfUk9VTkRMQAorR05VTElCX1JQTUFUQ0ggPSBAR05VTElCX1JQTUFUQ0hACitHTlVMSUJfU0NBTkYgPSBAR05VTElCX1NDQU5GQAorR05VTElCX1NFVEVOViA9IEBHTlVMSUJfU0VURU5WQAorR05VTElCX1NFVEhPU1ROQU1FID0gQEdOVUxJQl9TRVRIT1NUTkFNRUAKK0dOVUxJQl9TSUdBQ1RJT04gPSBAR05VTElCX1NJR0FDVElPTkAKK0dOVUxJQl9TSUdOQUxfSF9TSUdQSVBFID0gQEdOVUxJQl9TSUdOQUxfSF9TSUdQSVBFQAorR05VTElCX1NJR05CSVQgPSBAR05VTElCX1NJR05CSVRACitHTlVMSUJfU0lHUFJPQ01BU0sgPSBAR05VTElCX1NJR1BST0NNQVNLQAorR05VTElCX1NJTkYgPSBAR05VTElCX1NJTkZACitHTlVMSUJfU0lOSEYgPSBAR05VTElCX1NJTkhGQAorR05VTElCX1NJTkwgPSBAR05VTElCX1NJTkxACitHTlVMSUJfU0xFRVAgPSBAR05VTElCX1NMRUVQQAorR05VTElCX1NOUFJJTlRGID0gQEdOVUxJQl9TTlBSSU5URkAKK0dOVUxJQl9TUFJJTlRGX1BPU0lYID0gQEdOVUxJQl9TUFJJTlRGX1BPU0lYQAorR05VTElCX1NRUlRGID0gQEdOVUxJQl9TUVJURkAKK0dOVUxJQl9TUVJUTCA9IEBHTlVMSUJfU1FSVExACitHTlVMSUJfU1RBVCA9IEBHTlVMSUJfU1RBVEAKK0dOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HID0gQEdOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HQAorR05VTElCX1NURElPX0hfU0lHUElQRSA9IEBHTlVMSUJfU1RESU9fSF9TSUdQSVBFQAorR05VTElCX1NUUENQWSA9IEBHTlVMSUJfU1RQQ1BZQAorR05VTElCX1NUUE5DUFkgPSBAR05VTElCX1NUUE5DUFlACitHTlVMSUJfU1RSQ0FTRVNUUiA9IEBHTlVMSUJfU1RSQ0FTRVNUUkAKK0dOVUxJQl9TVFJDSFJOVUwgPSBAR05VTElCX1NUUkNIUk5VTEAKK0dOVUxJQl9TVFJEVVAgPSBAR05VTElCX1NUUkRVUEAKK0dOVUxJQl9TVFJFUlJPUiA9IEBHTlVMSUJfU1RSRVJST1JACitHTlVMSUJfU1RSRVJST1JfUiA9IEBHTlVMSUJfU1RSRVJST1JfUkAKK0dOVUxJQl9TVFJOQ0FUID0gQEdOVUxJQl9TVFJOQ0FUQAorR05VTElCX1NUUk5EVVAgPSBAR05VTElCX1NUUk5EVVBACitHTlVMSUJfU1RSTkxFTiA9IEBHTlVMSUJfU1RSTkxFTkAKK0dOVUxJQl9TVFJQQlJLID0gQEdOVUxJQl9TVFJQQlJLQAorR05VTElCX1NUUlBUSU1FID0gQEdOVUxJQl9TVFJQVElNRUAKK0dOVUxJQl9TVFJTRVAgPSBAR05VTElCX1NUUlNFUEAKK0dOVUxJQl9TVFJTSUdOQUwgPSBAR05VTElCX1NUUlNJR05BTEAKK0dOVUxJQl9TVFJTVFIgPSBAR05VTElCX1NUUlNUUkAKK0dOVUxJQl9TVFJUT0QgPSBAR05VTElCX1NUUlRPREAKK0dOVUxJQl9TVFJUT0lNQVggPSBAR05VTElCX1NUUlRPSU1BWEAKK0dOVUxJQl9TVFJUT0tfUiA9IEBHTlVMSUJfU1RSVE9LX1JACitHTlVMSUJfU1RSVE9MTCA9IEBHTlVMSUJfU1RSVE9MTEAKK0dOVUxJQl9TVFJUT1VMTCA9IEBHTlVMSUJfU1RSVE9VTExACitHTlVMSUJfU1RSVE9VTUFYID0gQEdOVUxJQl9TVFJUT1VNQVhACitHTlVMSUJfU1RSVkVSU0NNUCA9IEBHTlVMSUJfU1RSVkVSU0NNUEAKK0dOVUxJQl9TWU1MSU5LID0gQEdOVUxJQl9TWU1MSU5LQAorR05VTElCX1NZTUxJTktBVCA9IEBHTlVMSUJfU1lNTElOS0FUQAorR05VTElCX1NZU1RFTV9QT1NJWCA9IEBHTlVMSUJfU1lTVEVNX1BPU0lYQAorR05VTElCX1RBTkYgPSBAR05VTElCX1RBTkZACitHTlVMSUJfVEFOSEYgPSBAR05VTElCX1RBTkhGQAorR05VTElCX1RBTkwgPSBAR05VTElCX1RBTkxACitHTlVMSUJfVElNRUdNID0gQEdOVUxJQl9USU1FR01ACitHTlVMSUJfVElNRV9SID0gQEdOVUxJQl9USU1FX1JACitHTlVMSUJfVE1QRklMRSA9IEBHTlVMSUJfVE1QRklMRUAKK0dOVUxJQl9UT1dDVFJBTlMgPSBAR05VTElCX1RPV0NUUkFOU0AKK0dOVUxJQl9UUlVOQyA9IEBHTlVMSUJfVFJVTkNACitHTlVMSUJfVFJVTkNGID0gQEdOVUxJQl9UUlVOQ0ZACitHTlVMSUJfVFJVTkNMID0gQEdOVUxJQl9UUlVOQ0xACitHTlVMSUJfVFRZTkFNRV9SID0gQEdOVUxJQl9UVFlOQU1FX1JACitHTlVMSUJfVU5JU1REX0hfTk9OQkxPQ0tJTkcgPSBAR05VTElCX1VOSVNURF9IX05PTkJMT0NLSU5HQAorR05VTElCX1VOSVNURF9IX1NJR1BJUEUgPSBAR05VTElCX1VOSVNURF9IX1NJR1BJUEVACitHTlVMSUJfVU5MSU5LID0gQEdOVUxJQl9VTkxJTktACitHTlVMSUJfVU5MSU5LQVQgPSBAR05VTElCX1VOTElOS0FUQAorR05VTElCX1VOTE9DS1BUID0gQEdOVUxJQl9VTkxPQ0tQVEAKK0dOVUxJQl9VTlNFVEVOViA9IEBHTlVMSUJfVU5TRVRFTlZACitHTlVMSUJfVVNMRUVQID0gQEdOVUxJQl9VU0xFRVBACitHTlVMSUJfVVRJTUVOU0FUID0gQEdOVUxJQl9VVElNRU5TQVRACitHTlVMSUJfVkFTUFJJTlRGID0gQEdOVUxJQl9WQVNQUklOVEZACitHTlVMSUJfVkRQUklOVEYgPSBAR05VTElCX1ZEUFJJTlRGQAorR05VTElCX1ZGUFJJTlRGID0gQEdOVUxJQl9WRlBSSU5URkAKK0dOVUxJQl9WRlBSSU5URl9QT1NJWCA9IEBHTlVMSUJfVkZQUklOVEZfUE9TSVhACitHTlVMSUJfVkZTQ0FORiA9IEBHTlVMSUJfVkZTQ0FORkAKK0dOVUxJQl9WUFJJTlRGID0gQEdOVUxJQl9WUFJJTlRGQAorR05VTElCX1ZQUklOVEZfUE9TSVggPSBAR05VTElCX1ZQUklOVEZfUE9TSVhACitHTlVMSUJfVlNDQU5GID0gQEdOVUxJQl9WU0NBTkZACitHTlVMSUJfVlNOUFJJTlRGID0gQEdOVUxJQl9WU05QUklOVEZACitHTlVMSUJfVlNQUklOVEZfUE9TSVggPSBAR05VTElCX1ZTUFJJTlRGX1BPU0lYQAorR05VTElCX1dBSVRQSUQgPSBAR05VTElCX1dBSVRQSURACitHTlVMSUJfV0NQQ1BZID0gQEdOVUxJQl9XQ1BDUFlACitHTlVMSUJfV0NQTkNQWSA9IEBHTlVMSUJfV0NQTkNQWUAKK0dOVUxJQl9XQ1JUT01CID0gQEdOVUxJQl9XQ1JUT01CQAorR05VTElCX1dDU0NBU0VDTVAgPSBAR05VTElCX1dDU0NBU0VDTVBACitHTlVMSUJfV0NTQ0FUID0gQEdOVUxJQl9XQ1NDQVRACitHTlVMSUJfV0NTQ0hSID0gQEdOVUxJQl9XQ1NDSFJACitHTlVMSUJfV0NTQ01QID0gQEdOVUxJQl9XQ1NDTVBACitHTlVMSUJfV0NTQ09MTCA9IEBHTlVMSUJfV0NTQ09MTEAKK0dOVUxJQl9XQ1NDUFkgPSBAR05VTElCX1dDU0NQWUAKK0dOVUxJQl9XQ1NDU1BOID0gQEdOVUxJQl9XQ1NDU1BOQAorR05VTElCX1dDU0RVUCA9IEBHTlVMSUJfV0NTRFVQQAorR05VTElCX1dDU0xFTiA9IEBHTlVMSUJfV0NTTEVOQAorR05VTElCX1dDU05DQVNFQ01QID0gQEdOVUxJQl9XQ1NOQ0FTRUNNUEAKK0dOVUxJQl9XQ1NOQ0FUID0gQEdOVUxJQl9XQ1NOQ0FUQAorR05VTElCX1dDU05DTVAgPSBAR05VTElCX1dDU05DTVBACitHTlVMSUJfV0NTTkNQWSA9IEBHTlVMSUJfV0NTTkNQWUAKK0dOVUxJQl9XQ1NOTEVOID0gQEdOVUxJQl9XQ1NOTEVOQAorR05VTElCX1dDU05SVE9NQlMgPSBAR05VTElCX1dDU05SVE9NQlNACitHTlVMSUJfV0NTUEJSSyA9IEBHTlVMSUJfV0NTUEJSS0AKK0dOVUxJQl9XQ1NSQ0hSID0gQEdOVUxJQl9XQ1NSQ0hSQAorR05VTElCX1dDU1JUT01CUyA9IEBHTlVMSUJfV0NTUlRPTUJTQAorR05VTElCX1dDU1NQTiA9IEBHTlVMSUJfV0NTU1BOQAorR05VTElCX1dDU1NUUiA9IEBHTlVMSUJfV0NTU1RSQAorR05VTElCX1dDU1RPSyA9IEBHTlVMSUJfV0NTVE9LQAorR05VTElCX1dDU1dJRFRIID0gQEdOVUxJQl9XQ1NXSURUSEAKK0dOVUxJQl9XQ1NYRlJNID0gQEdOVUxJQl9XQ1NYRlJNQAorR05VTElCX1dDVE9CID0gQEdOVUxJQl9XQ1RPQkAKK0dOVUxJQl9XQ1RPTUIgPSBAR05VTElCX1dDVE9NQkAKK0dOVUxJQl9XQ1RSQU5TID0gQEdOVUxJQl9XQ1RSQU5TQAorR05VTElCX1dDVFlQRSA9IEBHTlVMSUJfV0NUWVBFQAorR05VTElCX1dDV0lEVEggPSBAR05VTElCX1dDV0lEVEhACitHTlVMSUJfV01FTUNIUiA9IEBHTlVMSUJfV01FTUNIUkAKK0dOVUxJQl9XTUVNQ01QID0gQEdOVUxJQl9XTUVNQ01QQAorR05VTElCX1dNRU1DUFkgPSBAR05VTElCX1dNRU1DUFlACitHTlVMSUJfV01FTU1PVkUgPSBAR05VTElCX1dNRU1NT1ZFQAorR05VTElCX1dNRU1TRVQgPSBAR05VTElCX1dNRU1TRVRACitHTlVMSUJfV1JJVEUgPSBAR05VTElCX1dSSVRFQAorR05VTElCX19FWElUID0gQEdOVUxJQl9fRVhJVEAKK0dSRVAgPSBAR1JFUEAKK0hBVkVfQUNPU0YgPSBASEFWRV9BQ09TRkAKK0hBVkVfQUNPU0wgPSBASEFWRV9BQ09TTEAKK0hBVkVfQVNJTkYgPSBASEFWRV9BU0lORkAKK0hBVkVfQVNJTkwgPSBASEFWRV9BU0lOTEAKK0hBVkVfQVRBTjJGID0gQEhBVkVfQVRBTjJGQAorSEFWRV9BVEFORiA9IEBIQVZFX0FUQU5GQAorSEFWRV9BVEFOTCA9IEBIQVZFX0FUQU5MQAorSEFWRV9BVE9MTCA9IEBIQVZFX0FUT0xMQAorSEFWRV9CVE9XQyA9IEBIQVZFX0JUT1dDQAorSEFWRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FID0gQEhBVkVfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRUAKK0hBVkVfQ0JSVCA9IEBIQVZFX0NCUlRACitIQVZFX0NCUlRGID0gQEhBVkVfQ0JSVEZACitIQVZFX0NCUlRMID0gQEhBVkVfQ0JSVExACitIQVZFX0NIT1dOID0gQEhBVkVfQ0hPV05ACitIQVZFX0NPUFlTSUdOID0gQEhBVkVfQ09QWVNJR05ACitIQVZFX0NPUFlTSUdOTCA9IEBIQVZFX0NPUFlTSUdOTEAKK0hBVkVfQ09TRiA9IEBIQVZFX0NPU0ZACitIQVZFX0NPU0hGID0gQEhBVkVfQ09TSEZACitIQVZFX0NPU0wgPSBASEFWRV9DT1NMQAorSEFWRV9ERUNMX0FDT1NMID0gQEhBVkVfREVDTF9BQ09TTEAKK0hBVkVfREVDTF9BU0lOTCA9IEBIQVZFX0RFQ0xfQVNJTkxACitIQVZFX0RFQ0xfQVRBTkwgPSBASEFWRV9ERUNMX0FUQU5MQAorSEFWRV9ERUNMX0NCUlRGID0gQEhBVkVfREVDTF9DQlJURkAKK0hBVkVfREVDTF9DQlJUTCA9IEBIQVZFX0RFQ0xfQ0JSVExACitIQVZFX0RFQ0xfQ0VJTEYgPSBASEFWRV9ERUNMX0NFSUxGQAorSEFWRV9ERUNMX0NFSUxMID0gQEhBVkVfREVDTF9DRUlMTEAKK0hBVkVfREVDTF9DT1BZU0lHTkYgPSBASEFWRV9ERUNMX0NPUFlTSUdORkAKK0hBVkVfREVDTF9DT1NMID0gQEhBVkVfREVDTF9DT1NMQAorSEFWRV9ERUNMX0VOVklST04gPSBASEFWRV9ERUNMX0VOVklST05ACitIQVZFX0RFQ0xfRVhQMiA9IEBIQVZFX0RFQ0xfRVhQMkAKK0hBVkVfREVDTF9FWFAyRiA9IEBIQVZFX0RFQ0xfRVhQMkZACitIQVZFX0RFQ0xfRVhQMkwgPSBASEFWRV9ERUNMX0VYUDJMQAorSEFWRV9ERUNMX0VYUEwgPSBASEFWRV9ERUNMX0VYUExACitIQVZFX0RFQ0xfRVhQTTFMID0gQEhBVkVfREVDTF9FWFBNMUxACitIQVZFX0RFQ0xfRkNIRElSID0gQEhBVkVfREVDTF9GQ0hESVJACitIQVZFX0RFQ0xfRkRBVEFTWU5DID0gQEhBVkVfREVDTF9GREFUQVNZTkNACitIQVZFX0RFQ0xfRkxPT1JGID0gQEhBVkVfREVDTF9GTE9PUkZACitIQVZFX0RFQ0xfRkxPT1JMID0gQEhBVkVfREVDTF9GTE9PUkxACitIQVZFX0RFQ0xfRlBVUkdFID0gQEhBVkVfREVDTF9GUFVSR0VACitIQVZFX0RFQ0xfRlJFWFBMID0gQEhBVkVfREVDTF9GUkVYUExACitIQVZFX0RFQ0xfRlNFRUtPID0gQEhBVkVfREVDTF9GU0VFS09ACitIQVZFX0RFQ0xfRlRFTExPID0gQEhBVkVfREVDTF9GVEVMTE9ACitIQVZFX0RFQ0xfR0VUREVMSU0gPSBASEFWRV9ERUNMX0dFVERFTElNQAorSEFWRV9ERUNMX0dFVERPTUFJTk5BTUUgPSBASEFWRV9ERUNMX0dFVERPTUFJTk5BTUVACitIQVZFX0RFQ0xfR0VUTElORSA9IEBIQVZFX0RFQ0xfR0VUTElORUAKK0hBVkVfREVDTF9HRVRMT0FEQVZHID0gQEhBVkVfREVDTF9HRVRMT0FEQVZHQAorSEFWRV9ERUNMX0dFVExPR0lOX1IgPSBASEFWRV9ERUNMX0dFVExPR0lOX1JACitIQVZFX0RFQ0xfR0VUUEFHRVNJWkUgPSBASEFWRV9ERUNMX0dFVFBBR0VTSVpFQAorSEFWRV9ERUNMX0dFVFVTRVJTSEVMTCA9IEBIQVZFX0RFQ0xfR0VUVVNFUlNIRUxMQAorSEFWRV9ERUNMX0lNQVhBQlMgPSBASEFWRV9ERUNMX0lNQVhBQlNACitIQVZFX0RFQ0xfSU1BWERJViA9IEBIQVZFX0RFQ0xfSU1BWERJVkAKK0hBVkVfREVDTF9MREVYUEwgPSBASEFWRV9ERUNMX0xERVhQTEAKK0hBVkVfREVDTF9MT0NBTFRJTUVfUiA9IEBIQVZFX0RFQ0xfTE9DQUxUSU1FX1JACitIQVZFX0RFQ0xfTE9HMTBMID0gQEhBVkVfREVDTF9MT0cxMExACitIQVZFX0RFQ0xfTE9HMiA9IEBIQVZFX0RFQ0xfTE9HMkAKK0hBVkVfREVDTF9MT0cyRiA9IEBIQVZFX0RFQ0xfTE9HMkZACitIQVZFX0RFQ0xfTE9HMkwgPSBASEFWRV9ERUNMX0xPRzJMQAorSEFWRV9ERUNMX0xPR0IgPSBASEFWRV9ERUNMX0xPR0JACitIQVZFX0RFQ0xfTE9HTCA9IEBIQVZFX0RFQ0xfTE9HTEAKK0hBVkVfREVDTF9NRU1NRU0gPSBASEFWRV9ERUNMX01FTU1FTUAKK0hBVkVfREVDTF9NRU1SQ0hSID0gQEhBVkVfREVDTF9NRU1SQ0hSQAorSEFWRV9ERUNMX09CU1RBQ0tfUFJJTlRGID0gQEhBVkVfREVDTF9PQlNUQUNLX1BSSU5URkAKK0hBVkVfREVDTF9SRU1BSU5ERVIgPSBASEFWRV9ERUNMX1JFTUFJTkRFUkAKK0hBVkVfREVDTF9SRU1BSU5ERVJMID0gQEhBVkVfREVDTF9SRU1BSU5ERVJMQAorSEFWRV9ERUNMX1JJTlRGID0gQEhBVkVfREVDTF9SSU5URkAKK0hBVkVfREVDTF9ST1VORCA9IEBIQVZFX0RFQ0xfUk9VTkRACitIQVZFX0RFQ0xfUk9VTkRGID0gQEhBVkVfREVDTF9ST1VOREZACitIQVZFX0RFQ0xfUk9VTkRMID0gQEhBVkVfREVDTF9ST1VORExACitIQVZFX0RFQ0xfU0VURU5WID0gQEhBVkVfREVDTF9TRVRFTlZACitIQVZFX0RFQ0xfU0VUSE9TVE5BTUUgPSBASEFWRV9ERUNMX1NFVEhPU1ROQU1FQAorSEFWRV9ERUNMX1NJTkwgPSBASEFWRV9ERUNMX1NJTkxACitIQVZFX0RFQ0xfU05QUklOVEYgPSBASEFWRV9ERUNMX1NOUFJJTlRGQAorSEFWRV9ERUNMX1NRUlRMID0gQEhBVkVfREVDTF9TUVJUTEAKK0hBVkVfREVDTF9TVFJEVVAgPSBASEFWRV9ERUNMX1NUUkRVUEAKK0hBVkVfREVDTF9TVFJFUlJPUl9SID0gQEhBVkVfREVDTF9TVFJFUlJPUl9SQAorSEFWRV9ERUNMX1NUUk5EVVAgPSBASEFWRV9ERUNMX1NUUk5EVVBACitIQVZFX0RFQ0xfU1RSTkxFTiA9IEBIQVZFX0RFQ0xfU1RSTkxFTkAKK0hBVkVfREVDTF9TVFJTSUdOQUwgPSBASEFWRV9ERUNMX1NUUlNJR05BTEAKK0hBVkVfREVDTF9TVFJUT0lNQVggPSBASEFWRV9ERUNMX1NUUlRPSU1BWEAKK0hBVkVfREVDTF9TVFJUT0tfUiA9IEBIQVZFX0RFQ0xfU1RSVE9LX1JACitIQVZFX0RFQ0xfU1RSVE9VTUFYID0gQEhBVkVfREVDTF9TVFJUT1VNQVhACitIQVZFX0RFQ0xfVEFOTCA9IEBIQVZFX0RFQ0xfVEFOTEAKK0hBVkVfREVDTF9UUlVOQyA9IEBIQVZFX0RFQ0xfVFJVTkNACitIQVZFX0RFQ0xfVFJVTkNGID0gQEhBVkVfREVDTF9UUlVOQ0ZACitIQVZFX0RFQ0xfVFJVTkNMID0gQEhBVkVfREVDTF9UUlVOQ0xACitIQVZFX0RFQ0xfVFRZTkFNRV9SID0gQEhBVkVfREVDTF9UVFlOQU1FX1JACitIQVZFX0RFQ0xfVU5TRVRFTlYgPSBASEFWRV9ERUNMX1VOU0VURU5WQAorSEFWRV9ERUNMX1ZTTlBSSU5URiA9IEBIQVZFX0RFQ0xfVlNOUFJJTlRGQAorSEFWRV9ERUNMX1dDVE9CID0gQEhBVkVfREVDTF9XQ1RPQkAKK0hBVkVfREVDTF9XQ1dJRFRIID0gQEhBVkVfREVDTF9XQ1dJRFRIQAorSEFWRV9EUFJJTlRGID0gQEhBVkVfRFBSSU5URkAKK0hBVkVfRFVQMiA9IEBIQVZFX0RVUDJACitIQVZFX0RVUDMgPSBASEFWRV9EVVAzQAorSEFWRV9FVUlEQUNDRVNTID0gQEhBVkVfRVVJREFDQ0VTU0AKK0hBVkVfRVhQRiA9IEBIQVZFX0VYUEZACitIQVZFX0VYUEwgPSBASEFWRV9FWFBMQAorSEFWRV9FWFBNMSA9IEBIQVZFX0VYUE0xQAorSEFWRV9FWFBNMUYgPSBASEFWRV9FWFBNMUZACitIQVZFX0ZBQlNGID0gQEhBVkVfRkFCU0ZACitIQVZFX0ZBQlNMID0gQEhBVkVfRkFCU0xACitIQVZFX0ZBQ0NFU1NBVCA9IEBIQVZFX0ZBQ0NFU1NBVEAKK0hBVkVfRkNIRElSID0gQEhBVkVfRkNIRElSQAorSEFWRV9GQ0hNT0RBVCA9IEBIQVZFX0ZDSE1PREFUQAorSEFWRV9GQ0hPV05BVCA9IEBIQVZFX0ZDSE9XTkFUQAorSEFWRV9GQ05UTCA9IEBIQVZFX0ZDTlRMQAorSEFWRV9GREFUQVNZTkMgPSBASEFWRV9GREFUQVNZTkNACitIQVZFX0ZFQVRVUkVTX0ggPSBASEFWRV9GRUFUVVJFU19IQAorSEFWRV9GRlNMID0gQEhBVkVfRkZTTEAKK0hBVkVfRkZTTEwgPSBASEFWRV9GRlNMTEAKK0hBVkVfRk1BID0gQEhBVkVfRk1BQAorSEFWRV9GTUFGID0gQEhBVkVfRk1BRkAKK0hBVkVfRk1BTCA9IEBIQVZFX0ZNQUxACitIQVZFX0ZNT0RGID0gQEhBVkVfRk1PREZACitIQVZFX0ZNT0RMID0gQEhBVkVfRk1PRExACitIQVZFX0ZSRVhQRiA9IEBIQVZFX0ZSRVhQRkAKK0hBVkVfRlNFRUtPID0gQEhBVkVfRlNFRUtPQAorSEFWRV9GU1RBVEFUID0gQEhBVkVfRlNUQVRBVEAKK0hBVkVfRlNZTkMgPSBASEFWRV9GU1lOQ0AKK0hBVkVfRlRFTExPID0gQEhBVkVfRlRFTExPQAorSEFWRV9GVFJVTkNBVEUgPSBASEFWRV9GVFJVTkNBVEVACitIQVZFX0ZVVElNRU5TID0gQEhBVkVfRlVUSU1FTlNACitIQVZFX0dDSl9DID0gQEhBVkVfR0NKX0NACitIQVZFX0dDSl9JTl9QQVRIID0gQEhBVkVfR0NKX0lOX1BBVEhACitIQVZFX0dFVERUQUJMRVNJWkUgPSBASEFWRV9HRVREVEFCTEVTSVpFQAorSEFWRV9HRVRHUk9VUFMgPSBASEFWRV9HRVRHUk9VUFNACitIQVZFX0dFVEhPU1ROQU1FID0gQEhBVkVfR0VUSE9TVE5BTUVACitIQVZFX0dFVExPR0lOID0gQEhBVkVfR0VUTE9HSU5ACitIQVZFX0dFVE9QVF9IID0gQEhBVkVfR0VUT1BUX0hACitIQVZFX0dFVFBBR0VTSVpFID0gQEhBVkVfR0VUUEFHRVNJWkVACitIQVZFX0dFVFNVQk9QVCA9IEBIQVZFX0dFVFNVQk9QVEAKK0hBVkVfR0lKID0gQEhBVkVfR0lKQAorSEFWRV9HSUpfSU5fUEFUSCA9IEBIQVZFX0dJSl9JTl9QQVRIQAorSEFWRV9HUkFOVFBUID0gQEhBVkVfR1JBTlRQVEAKK0hBVkVfR1JPVVBfTUVNQkVSID0gQEhBVkVfR1JPVVBfTUVNQkVSQAorSEFWRV9IWVBPVEYgPSBASEFWRV9IWVBPVEZACitIQVZFX0hZUE9UTCA9IEBIQVZFX0hZUE9UTEAKK0hBVkVfSUxPR0IgPSBASEFWRV9JTE9HQkAKK0hBVkVfSUxPR0JGID0gQEhBVkVfSUxPR0JGQAorSEFWRV9JTE9HQkwgPSBASEFWRV9JTE9HQkxACitIQVZFX0lOVFRZUEVTX0ggPSBASEFWRV9JTlRUWVBFU19IQAorSEFWRV9JU05BTkQgPSBASEFWRV9JU05BTkRACitIQVZFX0lTTkFORiA9IEBIQVZFX0lTTkFORkAKK0hBVkVfSVNOQU5MID0gQEhBVkVfSVNOQU5MQAorSEFWRV9JU1dCTEFOSyA9IEBIQVZFX0lTV0JMQU5LQAorSEFWRV9JU1dDTlRSTCA9IEBIQVZFX0lTV0NOVFJMQAorSEFWRV9KQVZBID0gQEhBVkVfSkFWQUAKK0hBVkVfSkFWQUMgPSBASEFWRV9KQVZBQ0AKK0hBVkVfSkFWQUNfRU5WVkFSID0gQEhBVkVfSkFWQUNfRU5WVkFSQAorSEFWRV9KQVZBQ19JTl9QQVRIID0gQEhBVkVfSkFWQUNfSU5fUEFUSEAKK0hBVkVfSkFWQV9FTlZWQVIgPSBASEFWRV9KQVZBX0VOVlZBUkAKK0hBVkVfSkFWQV9JTl9QQVRIID0gQEhBVkVfSkFWQV9JTl9QQVRIQAorSEFWRV9KSUtFUyA9IEBIQVZFX0pJS0VTQAorSEFWRV9KSUtFU19JTl9QQVRIID0gQEhBVkVfSklLRVNfSU5fUEFUSEAKK0hBVkVfSlJFID0gQEhBVkVfSlJFQAorSEFWRV9KUkVfSU5fUEFUSCA9IEBIQVZFX0pSRV9JTl9QQVRIQAorSEFWRV9KVklFVyA9IEBIQVZFX0pWSUVXQAorSEFWRV9KVklFV19JTl9QQVRIID0gQEhBVkVfSlZJRVdfSU5fUEFUSEAKK0hBVkVfTENITU9EID0gQEhBVkVfTENITU9EQAorSEFWRV9MQ0hPV04gPSBASEFWRV9MQ0hPV05ACitIQVZFX0xERVhQRiA9IEBIQVZFX0xERVhQRkAKK0hBVkVfTElOSyA9IEBIQVZFX0xJTktACitIQVZFX0xJTktBVCA9IEBIQVZFX0xJTktBVEAKK0hBVkVfTE9HMTBGID0gQEhBVkVfTE9HMTBGQAorSEFWRV9MT0cxMEwgPSBASEFWRV9MT0cxMExACitIQVZFX0xPRzFQID0gQEhBVkVfTE9HMVBACitIQVZFX0xPRzFQRiA9IEBIQVZFX0xPRzFQRkAKK0hBVkVfTE9HMVBMID0gQEhBVkVfTE9HMVBMQAorSEFWRV9MT0dCRiA9IEBIQVZFX0xPR0JGQAorSEFWRV9MT0dCTCA9IEBIQVZFX0xPR0JMQAorSEFWRV9MT0dGID0gQEhBVkVfTE9HRkAKK0hBVkVfTE9HTCA9IEBIQVZFX0xPR0xACitIQVZFX0xPTkdfTE9OR19JTlQgPSBASEFWRV9MT05HX0xPTkdfSU5UQAorSEFWRV9MU1RBVCA9IEBIQVZFX0xTVEFUQAorSEFWRV9NQlJMRU4gPSBASEFWRV9NQlJMRU5ACitIQVZFX01CUlRPV0MgPSBASEFWRV9NQlJUT1dDQAorSEFWRV9NQlNJTklUID0gQEhBVkVfTUJTSU5JVEAKK0hBVkVfTUJTTEVOID0gQEhBVkVfTUJTTEVOQAorSEFWRV9NQlNOUlRPV0NTID0gQEhBVkVfTUJTTlJUT1dDU0AKK0hBVkVfTUJTUlRPV0NTID0gQEhBVkVfTUJTUlRPV0NTQAorSEFWRV9NRU1DSFIgPSBASEFWRV9NRU1DSFJACitIQVZFX01FTVBDUFkgPSBASEFWRV9NRU1QQ1BZQAorSEFWRV9NS0RJUkFUID0gQEhBVkVfTUtESVJBVEAKK0hBVkVfTUtEVEVNUCA9IEBIQVZFX01LRFRFTVBACitIQVZFX01LRklGTyA9IEBIQVZFX01LRklGT0AKK0hBVkVfTUtGSUZPQVQgPSBASEFWRV9NS0ZJRk9BVEAKK0hBVkVfTUtOT0QgPSBASEFWRV9NS05PREAKK0hBVkVfTUtOT0RBVCA9IEBIQVZFX01LTk9EQVRACitIQVZFX01LT1NURU1QID0gQEhBVkVfTUtPU1RFTVBACitIQVZFX01LT1NURU1QUyA9IEBIQVZFX01LT1NURU1QU0AKK0hBVkVfTUtTVEVNUCA9IEBIQVZFX01LU1RFTVBACitIQVZFX01LU1RFTVBTID0gQEhBVkVfTUtTVEVNUFNACitIQVZFX01PREZGID0gQEhBVkVfTU9ERkZACitIQVZFX01PREZMID0gQEhBVkVfTU9ERkxACitIQVZFX01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUiA9IEBIQVZFX01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUkAKK0hBVkVfTkFOT1NMRUVQID0gQEhBVkVfTkFOT1NMRUVQQAorSEFWRV9PUEVOQVQgPSBASEFWRV9PUEVOQVRACitIQVZFX09TX0ggPSBASEFWRV9PU19IQAorSEFWRV9QQ0xPU0UgPSBASEFWRV9QQ0xPU0VACitIQVZFX1BJUEUgPSBASEFWRV9QSVBFQAorSEFWRV9QSVBFMiA9IEBIQVZFX1BJUEUyQAorSEFWRV9QT1BFTiA9IEBIQVZFX1BPUEVOQAorSEFWRV9QT1NJWF9PUEVOUFQgPSBASEFWRV9QT1NJWF9PUEVOUFRACitIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HID0gQEhBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkdACitIQVZFX1BPU0lYX1NQQVdOID0gQEhBVkVfUE9TSVhfU1BBV05ACitIQVZFX1BPU0lYX1NQQVdOQVRUUl9UID0gQEhBVkVfUE9TSVhfU1BBV05BVFRSX1RACitIQVZFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19UID0gQEhBVkVfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX1RACitIQVZFX1BPV0YgPSBASEFWRV9QT1dGQAorSEFWRV9QUkVBRCA9IEBIQVZFX1BSRUFEQAorSEFWRV9QVEhSRUFEX1NJR01BU0sgPSBASEFWRV9QVEhSRUFEX1NJR01BU0tACitIQVZFX1BUU05BTUUgPSBASEFWRV9QVFNOQU1FQAorSEFWRV9QVFNOQU1FX1IgPSBASEFWRV9QVFNOQU1FX1JACitIQVZFX1BXUklURSA9IEBIQVZFX1BXUklURUAKK0hBVkVfUkFJU0UgPSBASEFWRV9SQUlTRUAKK0hBVkVfUkFORE9NID0gQEhBVkVfUkFORE9NQAorSEFWRV9SQU5ET01fSCA9IEBIQVZFX1JBTkRPTV9IQAorSEFWRV9SQU5ET01fUiA9IEBIQVZFX1JBTkRPTV9SQAorSEFWRV9SQVdNRU1DSFIgPSBASEFWRV9SQVdNRU1DSFJACitIQVZFX1JFQURMSU5LID0gQEhBVkVfUkVBRExJTktACitIQVZFX1JFQURMSU5LQVQgPSBASEFWRV9SRUFETElOS0FUQAorSEFWRV9SRUFMUEFUSCA9IEBIQVZFX1JFQUxQQVRIQAorSEFWRV9SRU1BSU5ERVIgPSBASEFWRV9SRU1BSU5ERVJACitIQVZFX1JFTUFJTkRFUkYgPSBASEFWRV9SRU1BSU5ERVJGQAorSEFWRV9SRU5BTUVBVCA9IEBIQVZFX1JFTkFNRUFUQAorSEFWRV9SSU5UID0gQEhBVkVfUklOVEAKK0hBVkVfUklOVEwgPSBASEFWRV9SSU5UTEAKK0hBVkVfUlBNQVRDSCA9IEBIQVZFX1JQTUFUQ0hACitIQVZFX1NBTUVfTE9OR19ET1VCTEVfQVNfRE9VQkxFID0gQEhBVkVfU0FNRV9MT05HX0RPVUJMRV9BU19ET1VCTEVACitIQVZFX1NDSEVEX0ggPSBASEFWRV9TQ0hFRF9IQAorSEFWRV9TRVRFTlYgPSBASEFWRV9TRVRFTlZACitIQVZFX1NFVEhPU1ROQU1FID0gQEhBVkVfU0VUSE9TVE5BTUVACitIQVZFX1NJR0FDVElPTiA9IEBIQVZFX1NJR0FDVElPTkAKK0hBVkVfU0lHSEFORExFUl9UID0gQEhBVkVfU0lHSEFORExFUl9UQAorSEFWRV9TSUdJTkZPX1QgPSBASEFWRV9TSUdJTkZPX1RACitIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1QgPSBASEFWRV9TSUdORURfU0lHX0FUT01JQ19UQAorSEFWRV9TSUdORURfV0NIQVJfVCA9IEBIQVZFX1NJR05FRF9XQ0hBUl9UQAorSEFWRV9TSUdORURfV0lOVF9UID0gQEhBVkVfU0lHTkVEX1dJTlRfVEAKK0hBVkVfU0lHU0VUX1QgPSBASEFWRV9TSUdTRVRfVEAKK0hBVkVfU0lORiA9IEBIQVZFX1NJTkZACitIQVZFX1NJTkhGID0gQEhBVkVfU0lOSEZACitIQVZFX1NJTkwgPSBASEFWRV9TSU5MQAorSEFWRV9TTEVFUCA9IEBIQVZFX1NMRUVQQAorSEFWRV9TUEFXTl9IID0gQEhBVkVfU1BBV05fSEAKK0hBVkVfU1FSVEYgPSBASEFWRV9TUVJURkAKK0hBVkVfU1FSVEwgPSBASEFWRV9TUVJUTEAKK0hBVkVfU1RESU5UX0ggPSBASEFWRV9TVERJTlRfSEAKK0hBVkVfU1RQQ1BZID0gQEhBVkVfU1RQQ1BZQAorSEFWRV9TVFBOQ1BZID0gQEhBVkVfU1RQTkNQWUAKK0hBVkVfU1RSQ0FTRVNUUiA9IEBIQVZFX1NUUkNBU0VTVFJACitIQVZFX1NUUkNIUk5VTCA9IEBIQVZFX1NUUkNIUk5VTEAKK0hBVkVfU1RSUEJSSyA9IEBIQVZFX1NUUlBCUktACitIQVZFX1NUUlBUSU1FID0gQEhBVkVfU1RSUFRJTUVACitIQVZFX1NUUlNFUCA9IEBIQVZFX1NUUlNFUEAKK0hBVkVfU1RSVE9EID0gQEhBVkVfU1RSVE9EQAorSEFWRV9TVFJUT0xMID0gQEhBVkVfU1RSVE9MTEAKK0hBVkVfU1RSVE9VTEwgPSBASEFWRV9TVFJUT1VMTEAKK0hBVkVfU1RSVUNUX1JBTkRPTV9EQVRBID0gQEhBVkVfU1RSVUNUX1JBTkRPTV9EQVRBQAorSEFWRV9TVFJVQ1RfU0NIRURfUEFSQU0gPSBASEFWRV9TVFJVQ1RfU0NIRURfUEFSQU1ACitIQVZFX1NUUlVDVF9TSUdBQ1RJT05fU0FfU0lHQUNUSU9OID0gQEhBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT05ACitIQVZFX1NUUlZFUlNDTVAgPSBASEFWRV9TVFJWRVJTQ01QQAorSEFWRV9TWU1MSU5LID0gQEhBVkVfU1lNTElOS0AKK0hBVkVfU1lNTElOS0FUID0gQEhBVkVfU1lNTElOS0FUQAorSEFWRV9TWVNfQklUWVBFU19IID0gQEhBVkVfU1lTX0JJVFlQRVNfSEAKK0hBVkVfU1lTX0lOVFRZUEVTX0ggPSBASEFWRV9TWVNfSU5UVFlQRVNfSEAKK0hBVkVfU1lTX0xPQURBVkdfSCA9IEBIQVZFX1NZU19MT0FEQVZHX0hACitIQVZFX1NZU19QQVJBTV9IID0gQEhBVkVfU1lTX1BBUkFNX0hACitIQVZFX1NZU19UWVBFU19IID0gQEhBVkVfU1lTX1RZUEVTX0hACitIQVZFX1RBTkYgPSBASEFWRV9UQU5GQAorSEFWRV9UQU5IRiA9IEBIQVZFX1RBTkhGQAorSEFWRV9UQU5MID0gQEhBVkVfVEFOTEAKK0hBVkVfVElNRUdNID0gQEhBVkVfVElNRUdNQAorSEFWRV9UWVBFX1ZPTEFUSUxFX1NJR19BVE9NSUNfVCA9IEBIQVZFX1RZUEVfVk9MQVRJTEVfU0lHX0FUT01JQ19UQAorSEFWRV9VTklTVERfSCA9IEBIQVZFX1VOSVNURF9IQAorSEFWRV9VTkxJTktBVCA9IEBIQVZFX1VOTElOS0FUQAorSEFWRV9VTkxPQ0tQVCA9IEBIQVZFX1VOTE9DS1BUQAorSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UID0gQEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVEAKK0hBVkVfVVNMRUVQID0gQEhBVkVfVVNMRUVQQAorSEFWRV9VVElNRU5TQVQgPSBASEFWRV9VVElNRU5TQVRACitIQVZFX1ZBU1BSSU5URiA9IEBIQVZFX1ZBU1BSSU5URkAKK0hBVkVfVkRQUklOVEYgPSBASEFWRV9WRFBSSU5URkAKK0hBVkVfV0NIQVJfSCA9IEBIQVZFX1dDSEFSX0hACitIQVZFX1dDSEFSX1QgPSBASEFWRV9XQ0hBUl9UQAorSEFWRV9XQ1BDUFkgPSBASEFWRV9XQ1BDUFlACitIQVZFX1dDUE5DUFkgPSBASEFWRV9XQ1BOQ1BZQAorSEFWRV9XQ1JUT01CID0gQEhBVkVfV0NSVE9NQkAKK0hBVkVfV0NTQ0FTRUNNUCA9IEBIQVZFX1dDU0NBU0VDTVBACitIQVZFX1dDU0NBVCA9IEBIQVZFX1dDU0NBVEAKK0hBVkVfV0NTQ0hSID0gQEhBVkVfV0NTQ0hSQAorSEFWRV9XQ1NDTVAgPSBASEFWRV9XQ1NDTVBACitIQVZFX1dDU0NPTEwgPSBASEFWRV9XQ1NDT0xMQAorSEFWRV9XQ1NDUFkgPSBASEFWRV9XQ1NDUFlACitIQVZFX1dDU0NTUE4gPSBASEFWRV9XQ1NDU1BOQAorSEFWRV9XQ1NEVVAgPSBASEFWRV9XQ1NEVVBACitIQVZFX1dDU0xFTiA9IEBIQVZFX1dDU0xFTkAKK0hBVkVfV0NTTkNBU0VDTVAgPSBASEFWRV9XQ1NOQ0FTRUNNUEAKK0hBVkVfV0NTTkNBVCA9IEBIQVZFX1dDU05DQVRACitIQVZFX1dDU05DTVAgPSBASEFWRV9XQ1NOQ01QQAorSEFWRV9XQ1NOQ1BZID0gQEhBVkVfV0NTTkNQWUAKK0hBVkVfV0NTTkxFTiA9IEBIQVZFX1dDU05MRU5ACitIQVZFX1dDU05SVE9NQlMgPSBASEFWRV9XQ1NOUlRPTUJTQAorSEFWRV9XQ1NQQlJLID0gQEhBVkVfV0NTUEJSS0AKK0hBVkVfV0NTUkNIUiA9IEBIQVZFX1dDU1JDSFJACitIQVZFX1dDU1JUT01CUyA9IEBIQVZFX1dDU1JUT01CU0AKK0hBVkVfV0NTU1BOID0gQEhBVkVfV0NTU1BOQAorSEFWRV9XQ1NTVFIgPSBASEFWRV9XQ1NTVFJACitIQVZFX1dDU1RPSyA9IEBIQVZFX1dDU1RPS0AKK0hBVkVfV0NTV0lEVEggPSBASEFWRV9XQ1NXSURUSEAKK0hBVkVfV0NTWEZSTSA9IEBIQVZFX1dDU1hGUk1ACitIQVZFX1dDVFJBTlNfVCA9IEBIQVZFX1dDVFJBTlNfVEAKK0hBVkVfV0NUWVBFX0ggPSBASEFWRV9XQ1RZUEVfSEAKK0hBVkVfV0NUWVBFX1QgPSBASEFWRV9XQ1RZUEVfVEAKK0hBVkVfV0lOU09DSzJfSCA9IEBIQVZFX1dJTlNPQ0syX0hACitIQVZFX1dJTlRfVCA9IEBIQVZFX1dJTlRfVEAKK0hBVkVfV01FTUNIUiA9IEBIQVZFX1dNRU1DSFJACitIQVZFX1dNRU1DTVAgPSBASEFWRV9XTUVNQ01QQAorSEFWRV9XTUVNQ1BZID0gQEhBVkVfV01FTUNQWUAKK0hBVkVfV01FTU1PVkUgPSBASEFWRV9XTUVNTU9WRUAKK0hBVkVfV01FTVNFVCA9IEBIQVZFX1dNRU1TRVRACiBIQVZFX19CT09MID0gQEhBVkVfX0JPT0xACitIQVZFX19FWElUID0gQEhBVkVfX0VYSVRACitIRUxQMk1BTiA9IEBIRUxQMk1BTkAKK0lOQ0xVREVfTkVYVCA9IEBJTkNMVURFX05FWFRACitJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFID0gQElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVACitJTlNUQUxMID0gQElOU1RBTExACiBJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAogSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKIElOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAogSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVDMyX01BWF9MVF9JTlRNQVhfTUFYID0gQElOVDMyX01BWF9MVF9JTlRNQVhfTUFYQAorSU5UNjRfTUFYX0VRX0xPTkdfTUFYID0gQElOVDY0X01BWF9FUV9MT05HX01BWEAKIElOVExMSUJTID0gQElOVExMSUJTQAogSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSVNOQU5EX0xJQk0gPSBASVNOQU5EX0xJQk1ACitJU05BTkZfTElCTSA9IEBJU05BTkZfTElCTUAKK0lTTkFOTF9MSUJNID0gQElTTkFOTF9MSUJNQAorSVNOQU5fTElCTSA9IEBJU05BTl9MSUJNQAorTERFWFBMX0xJQk0gPSBATERFWFBMX0xJQk1ACitMREVYUF9MSUJNID0gQExERVhQX0xJQk1ACiBMREZMQUdTID0gQExERkxBR1NACiBMRVggPSBATEVYQAogTEVYTElCID0gQExFWExJQkAKK0xFWF9JU19GTEVYID0gQExFWF9JU19GTEVYQAogTEVYX09VVFBVVF9ST09UID0gQExFWF9PVVRQVVRfUk9PVEAKK0xJQkJJU09OX0xJQkRFUFMgPSBATElCQklTT05fTElCREVQU0AKK0xJQkJJU09OX0xUTElCREVQUyA9IEBMSUJCSVNPTl9MVExJQkRFUFNACiBMSUJJQ09OViA9IEBMSUJJQ09OVkAKIExJQklOVEwgPSBATElCSU5UTEAKK0xJQk1VTFRJVEhSRUFEID0gQExJQk1VTFRJVEhSRUFEQAogTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUFRIID0gQExJQlBUSEAKK0xJQlBUSF9QUkVGSVggPSBATElCUFRIX1BSRUZJWEAKIExJQlMgPSBATElCU0AKK0xJQlRIUkVBRCA9IEBMSUJUSFJFQURACitMSUJVTklTVFJJTkdfVU5JVFlQRVNfSCA9IEBMSUJVTklTVFJJTkdfVU5JVFlQRVNfSEAKK0xJQlVOSVNUUklOR19VTklXSURUSF9IID0gQExJQlVOSVNUUklOR19VTklXSURUSF9IQAorTE9DQUxDSEFSU0VUX1RFU1RTX0VOVklST05NRU5UID0gQExPQ0FMQ0hBUlNFVF9URVNUU19FTlZJUk9OTUVOVEAKK0xPQ0FMRV9GUl9VVEY4ID0gQExPQ0FMRV9GUl9VVEY4QAorTE9DQUxFX0pBID0gQExPQ0FMRV9KQUAKK0xPQ0FMRV9aSF9DTiA9IEBMT0NBTEVfWkhfQ05ACiBMVExJQklDT05WID0gQExUTElCSUNPTlZACiBMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJNVUxUSVRIUkVBRCA9IEBMVExJQk1VTFRJVEhSRUFEQAogTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xUTElCUFRIID0gQExUTElCUFRIQAorTFRMSUJUSFJFQUQgPSBATFRMSUJUSFJFQURACiBNNCA9IEBNNEAKK000X0RFQlVHRklMRSA9IEBNNF9ERUJVR0ZJTEVACitNNF9HTlUgPSBATTRfR05VQAogTUFLRUlORk8gPSBATUFLRUlORk9ACi1NS0lOU1RBTExESVJTID0gQE1LSU5TVEFMTERJUlNACitNS0RJUl9QID0gQE1LRElSX1BACiBNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAogTVNHTUVSR0UgPSBATVNHTUVSR0VACi1PMENGTEFHUyA9IEBPMENGTEFHU0AKLU8wQ1hYRkxBR1MgPSBATzBDWFhGTEFHU0AKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0VSUk5PX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRVJSTk9fSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0ZDTlRMX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRkNOVExfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0ZMT0FUX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRkxPQVRfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0dFVE9QVF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX0dFVE9QVF9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfSU5UVFlQRVNfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9JTlRUWVBFU19IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfTUFUSF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX01BVEhfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NDSEVEX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU0NIRURfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NJR05BTF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NJR05BTF9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1BBV05fSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TUEFXTl9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1REREVGX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1REREVGX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERJTlRfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERJTlRfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURElPX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RESU9fSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURExJQl9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURExJQl9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RSSU5HX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RSSU5HX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfU1RBVF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19TVEFUX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfVFlQRVNfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfVFlQRVNfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19XQUlUX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1lTX1dBSVRfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1RJTUVfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9USU1FX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9VTklTVERfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9VTklTVERfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDSEFSX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfV0NIQVJfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDVFlQRV9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDVFlQRV9IQAorTkVYVF9FUlJOT19IID0gQE5FWFRfRVJSTk9fSEAKK05FWFRfRkNOVExfSCA9IEBORVhUX0ZDTlRMX0hACitORVhUX0ZMT0FUX0ggPSBATkVYVF9GTE9BVF9IQAorTkVYVF9HRVRPUFRfSCA9IEBORVhUX0dFVE9QVF9IQAorTkVYVF9JTlRUWVBFU19IID0gQE5FWFRfSU5UVFlQRVNfSEAKK05FWFRfTUFUSF9IID0gQE5FWFRfTUFUSF9IQAorTkVYVF9TQ0hFRF9IID0gQE5FWFRfU0NIRURfSEAKK05FWFRfU0lHTkFMX0ggPSBATkVYVF9TSUdOQUxfSEAKK05FWFRfU1BBV05fSCA9IEBORVhUX1NQQVdOX0hACitORVhUX1NURERFRl9IID0gQE5FWFRfU1REREVGX0hACitORVhUX1NURElOVF9IID0gQE5FWFRfU1RESU5UX0hACitORVhUX1NURElPX0ggPSBATkVYVF9TVERJT19IQAorTkVYVF9TVERMSUJfSCA9IEBORVhUX1NURExJQl9IQAorTkVYVF9TVFJJTkdfSCA9IEBORVhUX1NUUklOR19IQAorTkVYVF9TWVNfU1RBVF9IID0gQE5FWFRfU1lTX1NUQVRfSEAKK05FWFRfU1lTX1RZUEVTX0ggPSBATkVYVF9TWVNfVFlQRVNfSEAKK05FWFRfU1lTX1dBSVRfSCA9IEBORVhUX1NZU19XQUlUX0hACitORVhUX1RJTUVfSCA9IEBORVhUX1RJTUVfSEAKK05FWFRfVU5JU1REX0ggPSBATkVYVF9VTklTVERfSEAKK05FWFRfV0NIQVJfSCA9IEBORVhUX1dDSEFSX0hACitORVhUX1dDVFlQRV9IID0gQE5FWFRfV0NUWVBFX0hACiBPQkpFWFQgPSBAT0JKRVhUQAogUEFDS0FHRSA9IEBQQUNLQUdFQAogUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX0NPUFlSSUdIVF9ZRUFSID0gQFBBQ0tBR0VfQ09QWVJJR0hUX1lFQVJACiBQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAogUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACiBQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACiBQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAogUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMID0gQFBFUkxACiBQT1NVQiA9IEBQT1NVQkAKK1BSQUdNQV9DT0xVTU5TID0gQFBSQUdNQV9DT0xVTU5TQAorUFJBR01BX1NZU1RFTV9IRUFERVIgPSBAUFJBR01BX1NZU1RFTV9IRUFERVJACitQUklQVFJfUFJFRklYID0gQFBSSVBUUl9QUkVGSVhACitQUklfTUFDUk9TX0JST0tFTiA9IEBQUklfTUFDUk9TX0JST0tFTkAKK1BUSFJFQURfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQyA9IEBQVEhSRUFEX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUNACitQVFJESUZGX1RfU1VGRklYID0gQFBUUkRJRkZfVF9TVUZGSVhACiBSQU5MSUIgPSBAUkFOTElCQAorUkVQTEFDRV9CVE9XQyA9IEBSRVBMQUNFX0JUT1dDQAorUkVQTEFDRV9DQUxMT0MgPSBAUkVQTEFDRV9DQUxMT0NACitSRVBMQUNFX0NBTk9OSUNBTElaRV9GSUxFX05BTUUgPSBAUkVQTEFDRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FQAorUkVQTEFDRV9DQlJURiA9IEBSRVBMQUNFX0NCUlRGQAorUkVQTEFDRV9DQlJUTCA9IEBSRVBMQUNFX0NCUlRMQAorUkVQTEFDRV9DRUlMID0gQFJFUExBQ0VfQ0VJTEAKK1JFUExBQ0VfQ0VJTEYgPSBAUkVQTEFDRV9DRUlMRkAKK1JFUExBQ0VfQ0VJTEwgPSBAUkVQTEFDRV9DRUlMTEAKK1JFUExBQ0VfQ0hPV04gPSBAUkVQTEFDRV9DSE9XTkAKK1JFUExBQ0VfQ0xPU0UgPSBAUkVQTEFDRV9DTE9TRUAKK1JFUExBQ0VfRFBSSU5URiA9IEBSRVBMQUNFX0RQUklOVEZACitSRVBMQUNFX0RVUCA9IEBSRVBMQUNFX0RVUEAKK1JFUExBQ0VfRFVQMiA9IEBSRVBMQUNFX0RVUDJACitSRVBMQUNFX0VYUDIgPSBAUkVQTEFDRV9FWFAyQAorUkVQTEFDRV9FWFAyTCA9IEBSRVBMQUNFX0VYUDJMQAorUkVQTEFDRV9FWFBNMSA9IEBSRVBMQUNFX0VYUE0xQAorUkVQTEFDRV9FWFBNMUYgPSBAUkVQTEFDRV9FWFBNMUZACitSRVBMQUNFX0ZBQlNMID0gQFJFUExBQ0VfRkFCU0xACitSRVBMQUNFX0ZDSE9XTkFUID0gQFJFUExBQ0VfRkNIT1dOQVRACitSRVBMQUNFX0ZDTE9TRSA9IEBSRVBMQUNFX0ZDTE9TRUAKK1JFUExBQ0VfRkNOVEwgPSBAUkVQTEFDRV9GQ05UTEAKK1JFUExBQ0VfRkRPUEVOID0gQFJFUExBQ0VfRkRPUEVOQAorUkVQTEFDRV9GRkxVU0ggPSBAUkVQTEFDRV9GRkxVU0hACitSRVBMQUNFX0ZMT09SID0gQFJFUExBQ0VfRkxPT1JACitSRVBMQUNFX0ZMT09SRiA9IEBSRVBMQUNFX0ZMT09SRkAKK1JFUExBQ0VfRkxPT1JMID0gQFJFUExBQ0VfRkxPT1JMQAorUkVQTEFDRV9GTUEgPSBAUkVQTEFDRV9GTUFACitSRVBMQUNFX0ZNQUYgPSBAUkVQTEFDRV9GTUFGQAorUkVQTEFDRV9GTUFMID0gQFJFUExBQ0VfRk1BTEAKK1JFUExBQ0VfRk1PRCA9IEBSRVBMQUNFX0ZNT0RACitSRVBMQUNFX0ZNT0RGID0gQFJFUExBQ0VfRk1PREZACitSRVBMQUNFX0ZNT0RMID0gQFJFUExBQ0VfRk1PRExACitSRVBMQUNFX0ZPUEVOID0gQFJFUExBQ0VfRk9QRU5ACitSRVBMQUNFX0ZQUklOVEYgPSBAUkVQTEFDRV9GUFJJTlRGQAorUkVQTEFDRV9GUFVSR0UgPSBAUkVQTEFDRV9GUFVSR0VACitSRVBMQUNFX0ZSRU9QRU4gPSBAUkVQTEFDRV9GUkVPUEVOQAorUkVQTEFDRV9GUkVYUCA9IEBSRVBMQUNFX0ZSRVhQQAorUkVQTEFDRV9GUkVYUEYgPSBAUkVQTEFDRV9GUkVYUEZACitSRVBMQUNFX0ZSRVhQTCA9IEBSRVBMQUNFX0ZSRVhQTEAKK1JFUExBQ0VfRlNFRUsgPSBAUkVQTEFDRV9GU0VFS0AKK1JFUExBQ0VfRlNFRUtPID0gQFJFUExBQ0VfRlNFRUtPQAorUkVQTEFDRV9GU1RBVCA9IEBSRVBMQUNFX0ZTVEFUQAorUkVQTEFDRV9GU1RBVEFUID0gQFJFUExBQ0VfRlNUQVRBVEAKK1JFUExBQ0VfRlRFTEwgPSBAUkVQTEFDRV9GVEVMTEAKK1JFUExBQ0VfRlRFTExPID0gQFJFUExBQ0VfRlRFTExPQAorUkVQTEFDRV9GVFJVTkNBVEUgPSBAUkVQTEFDRV9GVFJVTkNBVEVACitSRVBMQUNFX0ZVVElNRU5TID0gQFJFUExBQ0VfRlVUSU1FTlNACitSRVBMQUNFX0dFVENXRCA9IEBSRVBMQUNFX0dFVENXREAKK1JFUExBQ0VfR0VUREVMSU0gPSBAUkVQTEFDRV9HRVRERUxJTUAKK1JFUExBQ0VfR0VURE9NQUlOTkFNRSA9IEBSRVBMQUNFX0dFVERPTUFJTk5BTUVACitSRVBMQUNFX0dFVEdST1VQUyA9IEBSRVBMQUNFX0dFVEdST1VQU0AKK1JFUExBQ0VfR0VUTElORSA9IEBSRVBMQUNFX0dFVExJTkVACitSRVBMQUNFX0dFVExPR0lOX1IgPSBAUkVQTEFDRV9HRVRMT0dJTl9SQAorUkVQTEFDRV9HRVRQQUdFU0laRSA9IEBSRVBMQUNFX0dFVFBBR0VTSVpFQAorUkVQTEFDRV9IVUdFX1ZBTCA9IEBSRVBMQUNFX0hVR0VfVkFMQAorUkVQTEFDRV9IWVBPVCA9IEBSRVBMQUNFX0hZUE9UQAorUkVQTEFDRV9IWVBPVEYgPSBAUkVQTEFDRV9IWVBPVEZACitSRVBMQUNFX0hZUE9UTCA9IEBSRVBMQUNFX0hZUE9UTEAKK1JFUExBQ0VfSUxPR0IgPSBAUkVQTEFDRV9JTE9HQkAKK1JFUExBQ0VfSUxPR0JGID0gQFJFUExBQ0VfSUxPR0JGQAorUkVQTEFDRV9JU0FUVFkgPSBAUkVQTEFDRV9JU0FUVFlACitSRVBMQUNFX0lTRklOSVRFID0gQFJFUExBQ0VfSVNGSU5JVEVACitSRVBMQUNFX0lTSU5GID0gQFJFUExBQ0VfSVNJTkZACitSRVBMQUNFX0lTTkFOID0gQFJFUExBQ0VfSVNOQU5ACitSRVBMQUNFX0lTV0JMQU5LID0gQFJFUExBQ0VfSVNXQkxBTktACitSRVBMQUNFX0lTV0NOVFJMID0gQFJFUExBQ0VfSVNXQ05UUkxACitSRVBMQUNFX0lUT0xEID0gQFJFUExBQ0VfSVRPTERACitSRVBMQUNFX0xDSE9XTiA9IEBSRVBMQUNFX0xDSE9XTkAKK1JFUExBQ0VfTERFWFBMID0gQFJFUExBQ0VfTERFWFBMQAorUkVQTEFDRV9MSU5LID0gQFJFUExBQ0VfTElOS0AKK1JFUExBQ0VfTElOS0FUID0gQFJFUExBQ0VfTElOS0FUQAorUkVQTEFDRV9MT0NBTFRJTUVfUiA9IEBSRVBMQUNFX0xPQ0FMVElNRV9SQAorUkVQTEFDRV9MT0cgPSBAUkVQTEFDRV9MT0dACitSRVBMQUNFX0xPRzEwID0gQFJFUExBQ0VfTE9HMTBACitSRVBMQUNFX0xPRzEwRiA9IEBSRVBMQUNFX0xPRzEwRkAKK1JFUExBQ0VfTE9HMTBMID0gQFJFUExBQ0VfTE9HMTBMQAorUkVQTEFDRV9MT0cxUCA9IEBSRVBMQUNFX0xPRzFQQAorUkVQTEFDRV9MT0cxUEYgPSBAUkVQTEFDRV9MT0cxUEZACitSRVBMQUNFX0xPRzFQTCA9IEBSRVBMQUNFX0xPRzFQTEAKK1JFUExBQ0VfTE9HMiA9IEBSRVBMQUNFX0xPRzJACitSRVBMQUNFX0xPRzJGID0gQFJFUExBQ0VfTE9HMkZACitSRVBMQUNFX0xPRzJMID0gQFJFUExBQ0VfTE9HMkxACitSRVBMQUNFX0xPR0IgPSBAUkVQTEFDRV9MT0dCQAorUkVQTEFDRV9MT0dCRiA9IEBSRVBMQUNFX0xPR0JGQAorUkVQTEFDRV9MT0dCTCA9IEBSRVBMQUNFX0xPR0JMQAorUkVQTEFDRV9MT0dGID0gQFJFUExBQ0VfTE9HRkAKK1JFUExBQ0VfTE9HTCA9IEBSRVBMQUNFX0xPR0xACitSRVBMQUNFX0xTRUVLID0gQFJFUExBQ0VfTFNFRUtACitSRVBMQUNFX0xTVEFUID0gQFJFUExBQ0VfTFNUQVRACitSRVBMQUNFX01BTExPQyA9IEBSRVBMQUNFX01BTExPQ0AKK1JFUExBQ0VfTUJSTEVOID0gQFJFUExBQ0VfTUJSTEVOQAorUkVQTEFDRV9NQlJUT1dDID0gQFJFUExBQ0VfTUJSVE9XQ0AKK1JFUExBQ0VfTUJTSU5JVCA9IEBSRVBMQUNFX01CU0lOSVRACitSRVBMQUNFX01CU05SVE9XQ1MgPSBAUkVQTEFDRV9NQlNOUlRPV0NTQAorUkVQTEFDRV9NQlNSVE9XQ1MgPSBAUkVQTEFDRV9NQlNSVE9XQ1NACitSRVBMQUNFX01CU1RBVEVfVCA9IEBSRVBMQUNFX01CU1RBVEVfVEAKK1JFUExBQ0VfTUJUT1dDID0gQFJFUExBQ0VfTUJUT1dDQAorUkVQTEFDRV9NRU1DSFIgPSBAUkVQTEFDRV9NRU1DSFJACitSRVBMQUNFX01FTU1FTSA9IEBSRVBMQUNFX01FTU1FTUAKK1JFUExBQ0VfTUtESVIgPSBAUkVQTEFDRV9NS0RJUkAKK1JFUExBQ0VfTUtGSUZPID0gQFJFUExBQ0VfTUtGSUZPQAorUkVQTEFDRV9NS05PRCA9IEBSRVBMQUNFX01LTk9EQAorUkVQTEFDRV9NS1NURU1QID0gQFJFUExBQ0VfTUtTVEVNUEAKK1JFUExBQ0VfTUtUSU1FID0gQFJFUExBQ0VfTUtUSU1FQAorUkVQTEFDRV9NT0RGID0gQFJFUExBQ0VfTU9ERkAKK1JFUExBQ0VfTU9ERkYgPSBAUkVQTEFDRV9NT0RGRkAKK1JFUExBQ0VfTU9ERkwgPSBAUkVQTEFDRV9NT0RGTEAKK1JFUExBQ0VfTkFOID0gQFJFUExBQ0VfTkFOQAorUkVQTEFDRV9OQU5PU0xFRVAgPSBAUkVQTEFDRV9OQU5PU0xFRVBACitSRVBMQUNFX05VTEwgPSBAUkVQTEFDRV9OVUxMQAorUkVQTEFDRV9PQlNUQUNLX1BSSU5URiA9IEBSRVBMQUNFX09CU1RBQ0tfUFJJTlRGQAorUkVQTEFDRV9PUEVOID0gQFJFUExBQ0VfT1BFTkAKK1JFUExBQ0VfT1BFTkFUID0gQFJFUExBQ0VfT1BFTkFUQAorUkVQTEFDRV9QRVJST1IgPSBAUkVQTEFDRV9QRVJST1JACitSRVBMQUNFX1BPUEVOID0gQFJFUExBQ0VfUE9QRU5ACitSRVBMQUNFX1BPU0lYX1NQQVdOID0gQFJFUExBQ0VfUE9TSVhfU1BBV05ACitSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRSA9IEBSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRUAKK1JFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDIgPSBAUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMkAKK1JFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU4gPSBAUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURET1BFTkAKK1JFUExBQ0VfUFJFQUQgPSBAUkVQTEFDRV9QUkVBREAKK1JFUExBQ0VfUFJJTlRGID0gQFJFUExBQ0VfUFJJTlRGQAorUkVQTEFDRV9QVEhSRUFEX1NJR01BU0sgPSBAUkVQTEFDRV9QVEhSRUFEX1NJR01BU0tACitSRVBMQUNFX1BUU05BTUUgPSBAUkVQTEFDRV9QVFNOQU1FQAorUkVQTEFDRV9QVFNOQU1FX1IgPSBAUkVQTEFDRV9QVFNOQU1FX1JACitSRVBMQUNFX1BVVEVOViA9IEBSRVBMQUNFX1BVVEVOVkAKK1JFUExBQ0VfUFdSSVRFID0gQFJFUExBQ0VfUFdSSVRFQAorUkVQTEFDRV9SQUlTRSA9IEBSRVBMQUNFX1JBSVNFQAorUkVQTEFDRV9SQU5ET01fUiA9IEBSRVBMQUNFX1JBTkRPTV9SQAorUkVQTEFDRV9SRUFEID0gQFJFUExBQ0VfUkVBREAKK1JFUExBQ0VfUkVBRExJTksgPSBAUkVQTEFDRV9SRUFETElOS0AKK1JFUExBQ0VfUkVBTExPQyA9IEBSRVBMQUNFX1JFQUxMT0NACitSRVBMQUNFX1JFQUxQQVRIID0gQFJFUExBQ0VfUkVBTFBBVEhACitSRVBMQUNFX1JFTUFJTkRFUiA9IEBSRVBMQUNFX1JFTUFJTkRFUkAKK1JFUExBQ0VfUkVNQUlOREVSRiA9IEBSRVBMQUNFX1JFTUFJTkRFUkZACitSRVBMQUNFX1JFTUFJTkRFUkwgPSBAUkVQTEFDRV9SRU1BSU5ERVJMQAorUkVQTEFDRV9SRU1PVkUgPSBAUkVQTEFDRV9SRU1PVkVACitSRVBMQUNFX1JFTkFNRSA9IEBSRVBMQUNFX1JFTkFNRUAKK1JFUExBQ0VfUkVOQU1FQVQgPSBAUkVQTEFDRV9SRU5BTUVBVEAKK1JFUExBQ0VfUk1ESVIgPSBAUkVQTEFDRV9STURJUkAKK1JFUExBQ0VfUk9VTkQgPSBAUkVQTEFDRV9ST1VOREAKK1JFUExBQ0VfUk9VTkRGID0gQFJFUExBQ0VfUk9VTkRGQAorUkVQTEFDRV9ST1VOREwgPSBAUkVQTEFDRV9ST1VORExACitSRVBMQUNFX1NFVEVOViA9IEBSRVBMQUNFX1NFVEVOVkAKK1JFUExBQ0VfU0lHTkJJVCA9IEBSRVBMQUNFX1NJR05CSVRACitSRVBMQUNFX1NJR05CSVRfVVNJTkdfR0NDID0gQFJFUExBQ0VfU0lHTkJJVF9VU0lOR19HQ0NACitSRVBMQUNFX1NMRUVQID0gQFJFUExBQ0VfU0xFRVBACitSRVBMQUNFX1NOUFJJTlRGID0gQFJFUExBQ0VfU05QUklOVEZACitSRVBMQUNFX1NQUklOVEYgPSBAUkVQTEFDRV9TUFJJTlRGQAorUkVQTEFDRV9TUVJUTCA9IEBSRVBMQUNFX1NRUlRMQAorUkVQTEFDRV9TVEFUID0gQFJFUExBQ0VfU1RBVEAKK1JFUExBQ0VfU1RESU9fUkVBRF9GVU5DUyA9IEBSRVBMQUNFX1NURElPX1JFQURfRlVOQ1NACitSRVBMQUNFX1NURElPX1dSSVRFX0ZVTkNTID0gQFJFUExBQ0VfU1RESU9fV1JJVEVfRlVOQ1NACitSRVBMQUNFX1NUUE5DUFkgPSBAUkVQTEFDRV9TVFBOQ1BZQAorUkVQTEFDRV9TVFJDQVNFU1RSID0gQFJFUExBQ0VfU1RSQ0FTRVNUUkAKK1JFUExBQ0VfU1RSQ0hSTlVMID0gQFJFUExBQ0VfU1RSQ0hSTlVMQAorUkVQTEFDRV9TVFJEVVAgPSBAUkVQTEFDRV9TVFJEVVBACitSRVBMQUNFX1NUUkVSUk9SID0gQFJFUExBQ0VfU1RSRVJST1JACitSRVBMQUNFX1NUUkVSUk9SX1IgPSBAUkVQTEFDRV9TVFJFUlJPUl9SQAorUkVQTEFDRV9TVFJOQ0FUID0gQFJFUExBQ0VfU1RSTkNBVEAKK1JFUExBQ0VfU1RSTkRVUCA9IEBSRVBMQUNFX1NUUk5EVVBACitSRVBMQUNFX1NUUk5MRU4gPSBAUkVQTEFDRV9TVFJOTEVOQAorUkVQTEFDRV9TVFJTSUdOQUwgPSBAUkVQTEFDRV9TVFJTSUdOQUxACitSRVBMQUNFX1NUUlNUUiA9IEBSRVBMQUNFX1NUUlNUUkAKK1JFUExBQ0VfU1RSVE9EID0gQFJFUExBQ0VfU1RSVE9EQAorUkVQTEFDRV9TVFJUT0lNQVggPSBAUkVQTEFDRV9TVFJUT0lNQVhACitSRVBMQUNFX1NUUlRPS19SID0gQFJFUExBQ0VfU1RSVE9LX1JACitSRVBMQUNFX1NZTUxJTksgPSBAUkVQTEFDRV9TWU1MSU5LQAorUkVQTEFDRV9USU1FR00gPSBAUkVQTEFDRV9USU1FR01ACitSRVBMQUNFX1RNUEZJTEUgPSBAUkVQTEFDRV9UTVBGSUxFQAorUkVQTEFDRV9UT1dMT1dFUiA9IEBSRVBMQUNFX1RPV0xPV0VSQAorUkVQTEFDRV9UUlVOQyA9IEBSRVBMQUNFX1RSVU5DQAorUkVQTEFDRV9UUlVOQ0YgPSBAUkVQTEFDRV9UUlVOQ0ZACitSRVBMQUNFX1RSVU5DTCA9IEBSRVBMQUNFX1RSVU5DTEAKK1JFUExBQ0VfVFRZTkFNRV9SID0gQFJFUExBQ0VfVFRZTkFNRV9SQAorUkVQTEFDRV9VTkxJTksgPSBAUkVQTEFDRV9VTkxJTktACitSRVBMQUNFX1VOTElOS0FUID0gQFJFUExBQ0VfVU5MSU5LQVRACitSRVBMQUNFX1VOU0VURU5WID0gQFJFUExBQ0VfVU5TRVRFTlZACitSRVBMQUNFX1VTTEVFUCA9IEBSRVBMQUNFX1VTTEVFUEAKK1JFUExBQ0VfVVRJTUVOU0FUID0gQFJFUExBQ0VfVVRJTUVOU0FUQAorUkVQTEFDRV9WQVNQUklOVEYgPSBAUkVQTEFDRV9WQVNQUklOVEZACitSRVBMQUNFX1ZEUFJJTlRGID0gQFJFUExBQ0VfVkRQUklOVEZACitSRVBMQUNFX1ZGUFJJTlRGID0gQFJFUExBQ0VfVkZQUklOVEZACitSRVBMQUNFX1ZQUklOVEYgPSBAUkVQTEFDRV9WUFJJTlRGQAorUkVQTEFDRV9WU05QUklOVEYgPSBAUkVQTEFDRV9WU05QUklOVEZACitSRVBMQUNFX1ZTUFJJTlRGID0gQFJFUExBQ0VfVlNQUklOVEZACitSRVBMQUNFX1dDUlRPTUIgPSBAUkVQTEFDRV9XQ1JUT01CQAorUkVQTEFDRV9XQ1NOUlRPTUJTID0gQFJFUExBQ0VfV0NTTlJUT01CU0AKK1JFUExBQ0VfV0NTUlRPTUJTID0gQFJFUExBQ0VfV0NTUlRPTUJTQAorUkVQTEFDRV9XQ1NXSURUSCA9IEBSRVBMQUNFX1dDU1dJRFRIQAorUkVQTEFDRV9XQ1RPQiA9IEBSRVBMQUNFX1dDVE9CQAorUkVQTEFDRV9XQ1RPTUIgPSBAUkVQTEFDRV9XQ1RPTUJACitSRVBMQUNFX1dDV0lEVEggPSBAUkVQTEFDRV9XQ1dJRFRIQAorUkVQTEFDRV9XUklURSA9IEBSRVBMQUNFX1dSSVRFQAorU0NIRURfSCA9IEBTQ0hFRF9IQAogU0VUX01BS0UgPSBAU0VUX01BS0VACiBTSEVMTCA9IEBTSEVMTEAKK1NJR19BVE9NSUNfVF9TVUZGSVggPSBAU0lHX0FUT01JQ19UX1NVRkZJWEAKK1NJWkVfVF9TVUZGSVggPSBAU0laRV9UX1NVRkZJWEAKIFNUREJPT0xfSCA9IEBTVERCT09MX0hACitTVERERUZfSCA9IEBTVERERUZfSEAKK1NURElOVF9IID0gQFNURElOVF9IQAogU1RSSVAgPSBAU1RSSVBACi1VTklTVERfSCA9IEBVTklTVERfSEAKK1NZU19USU1FX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUMgPSBAU1lTX1RJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQ0AKK1RJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQyA9IEBUSU1FX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUNACitVSU5UMzJfTUFYX0xUX1VJTlRNQVhfTUFYID0gQFVJTlQzMl9NQVhfTFRfVUlOVE1BWF9NQVhACitVSU5UNjRfTUFYX0VRX1VMT05HX01BWCA9IEBVSU5UNjRfTUFYX0VRX1VMT05HX01BWEAKK1VOREVGSU5FX1NUUlRPS19SID0gQFVOREVGSU5FX1NUUlRPS19SQAorVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IID0gQFVOSVNURF9IX0hBVkVfV0lOU09DSzJfSEAKK1VOSVNURF9IX0hBVkVfV0lOU09DSzJfSF9BTkRfVVNFX1NPQ0tFVFMgPSBAVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IX0FORF9VU0VfU09DS0VUU0AKIFVTRV9OTFMgPSBAVVNFX05MU0AKIFZBTEdSSU5EID0gQFZBTEdSSU5EQAorVkFMR1JJTkRfUFJFQklTT04gPSBAVkFMR1JJTkRfUFJFQklTT05ACiBWRVJTSU9OID0gQFZFUlNJT05ACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKK1dBUk5fQ0ZMQUdTID0gQFdBUk5fQ0ZMQUdTQAorV0FSTl9DRkxBR1NfVEVTVCA9IEBXQVJOX0NGTEFHU19URVNUQAorV0FSTl9DWFhGTEFHUyA9IEBXQVJOX0NYWEZMQUdTQAorV0FSTl9DWFhGTEFHU19URVNUID0gQFdBUk5fQ1hYRkxBR1NfVEVTVEAKK1dDSEFSX1RfU1VGRklYID0gQFdDSEFSX1RfU1VGRklYQAogV0VSUk9SX0NGTEFHUyA9IEBXRVJST1JfQ0ZMQUdTQAorV0VSUk9SX0NYWEZMQUdTID0gQFdFUlJPUl9DWFhGTEFHU0AKK1dJTkRPV1NfNjRfQklUX09GRl9UID0gQFdJTkRPV1NfNjRfQklUX09GRl9UQAorV0lORE9XU182NF9CSVRfU1RfU0laRSA9IEBXSU5ET1dTXzY0X0JJVF9TVF9TSVpFQAorV0lOVF9UX1NVRkZJWCA9IEBXSU5UX1RfU1VGRklYQAogWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAorWFNMVFBST0MgPSBAWFNMVFBST0NACiBZQUNDID0gQFlBQ0NACiBZQUNDX0xJQlJBUlkgPSBAWUFDQ19MSUJSQVJZQAogWUFDQ19TQ1JJUFQgPSBAWUFDQ19TQ1JJUFRACitZRkxBR1MgPSBAWUZMQUdTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAogYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACiBhY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfUkFOTElCID0gQGFjX2N0X1JBTkxJQkAKLWFjX2N0X1NUUklQID0gQGFjX2N0X1NUUklQQAogYWNsb2NhbGRpciA9IEBhY2xvY2FsZGlyQAotYW1fX2Zhc3RkZXBDQ19GQUxTRSA9IEBhbV9fZmFzdGRlcENDX0ZBTFNFQAotYW1fX2Zhc3RkZXBDQ19UUlVFID0gQGFtX19mYXN0ZGVwQ0NfVFJVRUAKLWFtX19mYXN0ZGVwQ1hYX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAotYW1fX2Zhc3RkZXBDWFhfVFJVRSA9IEBhbV9fZmFzdGRlcENYWF9UUlVFQAogYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACiBhbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAogYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKQEAgLTE5NSw1MCArMTM2Niw5MyBAQAogYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKIGJ1aWxkX29zID0gQGJ1aWxkX29zQAogYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAogZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKIGV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorZ2xfTElCT0JKUyA9IEBnbF9MSUJPQkpTQAorZ2xfTFRMSUJPQkpTID0gQGdsX0xUTElCT0JKU0AKK2dsdGVzdHNfTElCT0JKUyA9IEBnbHRlc3RzX0xJQk9CSlNACitnbHRlc3RzX0xUTElCT0JKUyA9IEBnbHRlc3RzX0xUTElCT0JKU0AKK2dsdGVzdHNfV0lUTkVTUyA9IEBnbHRlc3RzX1dJVE5FU1NACiBob3N0ID0gQGhvc3RACiBob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACiBob3N0X2NwdSA9IEBob3N0X2NwdUAKIGhvc3Rfb3MgPSBAaG9zdF9vc0AKIGhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAogaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAogaW5mb2RpciA9IEBpbmZvZGlyQAogaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAogbGliZGlyID0gQGxpYmRpckAKIGxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xpc3BkaXIgPSBAbGlzcGRpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACiBsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACiBtYW5kaXIgPSBAbWFuZGlyQAogbWtkaXJfcCA9IEBta2Rpcl9wQAogb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKIHByZWZpeCA9IEBwcmVmaXhACiBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKIHNiaW5kaXIgPSBAc2JpbmRpckAKIHNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKIHN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKIHRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAogQU1fTUFLRUlORk9GTEFHUyA9IC0tbm8tc3BsaXQKLWluZm9fVEVYSU5GT1MgPSBiaXNvbi50ZXhpbmZvCi1tYW5fTUFOUyA9IGJpc29uLjEKLWJpc29uX1RFWElORk9TID0gZ3BsLnRleGkgZmRsLnRleGkKLUVYVFJBX0RJU1QgPSBiaXNvbi4xIHJlZmNhcmQudGV4Ci1DTEVBTkZJTEVTID0gcmVmY2FyZC5kdmkgcmVmY2FyZC5sb2cgcmVmY2FyZC5wcyBiaXNvbi5mbnMKK2luZm9fVEVYSU5GT1MgPSBiaXNvbi50ZXhpCitiaXNvbl9URVhJTkZPUyA9ICQoc3JjZGlyKS9jcm9zcy1vcHRpb25zLnRleGkgZ3BsLTMuMC50ZXhpIGZkbC50ZXhpCitDTEVBTkZJTEVTID0gYmlzb24uZm5zIHJlZmNhcmQuZHZpIHJlZmNhcmQubG9nIHJlZmNhcmQucHMgRG94eWZpbGUKK0NMRUFORElSUyA9ICoudDJkIGZpZ3MgaHRtbCBsYXRleAorQ1JPU1NfT1BUSU9OU19QTCA9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2Nyb3NzLW9wdGlvbnMucGwKK01BSU5UQUlORVJDTEVBTkZJTEVTID0gJChzcmNkaXIpL2Nyb3NzLW9wdGlvbnMudGV4aSAkKGRpc3RfbWFuX01BTlMpCitFWFRSQV9ESVNUID0gcmVmY2FyZC50ZXggJChkaXN0X21hbl9NQU5TOi4xPS54KSBjb21tb24ueCBcCisJZmlncy9leGFtcGxlLnkgJChGSUdTX0RPVCkgJChGSUdTX0RPVDouZG90PS5lcHMpIFwKKwkkKEZJR1NfRE9UOi5kb3Q9LnBkZikgJChGSUdTX0RPVDouZG90PS5wbmcpIERveHlmaWxlLmluCitkaXN0X21hbl9NQU5TID0gJChzcmNkaXIpL2Jpc29uLjEKKworIyBEZXBlbmQgb24gY29uZmlndXJlIHRvIGdldCB2ZXJzaW9uIG51bWJlciBjaGFuZ2VzLgorY29tbW9uX2RlcCA9ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoc3JjZGlyKS9jb21tb24ueAorc3Jjc3JjZGlyID0gJCh0b3Bfc3JjZGlyKS9iaW4KKworIyBEaWZmZXJlbmNlcyB0byBpZ25vcmUgd2hlbiBjb21wYXJpbmcgdGhlIG1hbiBwYWdlICh0aGUgZGF0ZSkuCityZW1vdmVfdGltZV9zdGFtcCA9IFwKKyAgc2VkICdzL15cKFwuVEhbXiJdKiJbXiJdKiJbXiJdKlwpIlteIl0qIi9cMS8nCisKK01PU1RMWUNMRUFORklMRVMgPSAkKHNyY2RpcikvKi50CitTVUZGSVhFUyA9IC54IC4xIC5kb3QgLmVwcyAucGRmIC5wbmcKK1BSRVBBVEggPSAkKHRvcF9idWlsZGRpcikvc3JjCitub2Rpc3RfbWFuX01BTlMgPSB5YWNjLjEKK0ZJR1NfRE9UID0gZmlncy9leGFtcGxlLmRvdCBmaWdzL2V4YW1wbGUtcmVkdWNlLmRvdCBmaWdzL2V4YW1wbGUtc2hpZnQuZG90CitET1hZR0VOID0gZG94eWdlbgorZWRpdCA9IHNlZCAtZSAncyxAUEFDS0FHRV9OQU1FXEAsJChQQUNLQUdFX05BTUUpLGcnIFwKKwkgICAtZSAncyxAUEFDS0FHRV9WRVJTSU9OXEAsJChQQUNLQUdFX1ZFUlNJT04pLGcnIFwKKwkgICAtZSAncyxAdG9wX2J1aWxkZGlyXEAsJCh0b3BfYnVpbGRkaXIpLGcnIFwKKwkgICAtZSAncyxAdG9wX3NyY2RpclxALCQodG9wX3NyY2RpciksZycKKwogYWxsOiBhbGwtYW0KIAogLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuZHZpIC5odG1sIC5pbmZvIC5wZGYgLnBzIC50ZXhpbmZvCisuU1VGRklYRVM6IC54IC4xIC5kb3QgLmVwcyAucGRmIC5wbmcgLmR2aSAuaHRtbCAuaW5mbyAucHMgLnRleGkKICQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCiAJQGZvciBkZXAgaW4gJD87IGRvIFwKIAkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAogCSAgICAqJCRkZXAqKSBcCi0JICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKLQkJJiYgZXhpdCAwOyBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAogCSAgICAgIGV4aXQgMTs7IFwKIAkgIGVzYWM7IFwKIAlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgIGRvYy9NYWtlZmlsZSc7IFwKLQljZCAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251ICBkb2MvTWFrZWZpbGUKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWduaXRzIGRvYy9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWduaXRzIGRvYy9NYWtlZmlsZQogLlBSRUNJT1VTOiBNYWtlZmlsZQogTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwogCUBjYXNlICckPycgaW4gXApAQCAtMjU2LDEwICsxNDcwLDEzIEBACiAJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiAkKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQogCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKK3lhY2MuMTogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL3lhY2MuMS5pbgorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRACiAKLS50ZXhpbmZvLmluZm86Ci0JcmVzdG9yZT06ICYmIGJhY2t1cGRpcj0iJChhbV9fbGVhZGluZ19kb3QpYW0kJCQkIiAmJiBcCi0JYW1fX2N3ZD1gcHdkYCAmJiBjZCAkKHNyY2RpcikgJiYgXAorLnRleGkuaW5mbzoKKwkkKEFNX1ZfTUFLRUlORk8pcmVzdG9yZT06ICYmIGJhY2t1cGRpcj0iJChhbV9fbGVhZGluZ19kb3QpYW0kJCQkIiAmJiBcCisJYW1fX2N3ZD1gcHdkYCAmJiAkKGFtX19jZCkgJChzcmNkaXIpICYmIFwKIAlybSAtcmYgJCRiYWNrdXBkaXIgJiYgbWtkaXIgJCRiYWNrdXBkaXIgJiYgXAogCWlmICgkKE1BS0VJTkZPKSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCiAJICBmb3IgZiBpbiAkQCAkQC1bMC05XSAkQC1bMC05XVswLTldICQoQDouaW5mbz0pLmlbMC05XSAkKEA6LmluZm89KS5pWzAtOV1bMC05XTsgZG8gXApAQCAtMjcxLDI3ICsxNDg4LDI3IEBACiAJIC1vICRAICQ8OyBcCiAJdGhlbiBcCiAJICByYz0wOyBcCi0JICBjZCAkKHNyY2Rpcik7IFwKKwkgICQoYW1fX2NkKSAkKHNyY2Rpcik7IFwKIAllbHNlIFwKIAkgIHJjPSQkPzsgXAotCSAgY2QgJChzcmNkaXIpICYmIFwKKwkgICQoYW1fX2NkKSAkKHNyY2RpcikgJiYgXAogCSAgJCRyZXN0b3JlICQkYmFja3VwZGlyLyogYGVjaG8gIi4vJEAiIHwgc2VkICdzfFteL10qJCR8fCdgOyBcCiAJZmk7IFwKIAlybSAtcmYgJCRiYWNrdXBkaXI7IGV4aXQgJCRyYwogCi0udGV4aW5mby5kdmk6Ci0JVEVYSU5QVVRTPSIkKGFtX19URVhJTkZPX1RFWF9ESVIpJChQQVRIX1NFUEFSQVRPUikkJFRFWElOUFVUUyIgXAorLnRleGkuZHZpOgorCSQoQU1fVl9URVhJMkRWSSlURVhJTlBVVFM9IiQoYW1fX1RFWElORk9fVEVYX0RJUikkKFBBVEhfU0VQQVJBVE9SKSQkVEVYSU5QVVRTIiBcCiAJTUFLRUlORk89JyQoTUFLRUlORk8pICQoQU1fTUFLRUlORk9GTEFHUykgJChNQUtFSU5GT0ZMQUdTKSAtSSAkKHNyY2RpciknIFwKLQkkKFRFWEkyRFZJKSAkPAorCSQoVEVYSTJEVkkpICQoQU1fVl90ZXhpbmZvKSAtLWNsZWFuICQ8ICQoQU1fVl90ZXhpZGV2bnVsbCkKIAotLnRleGluZm8ucGRmOgotCVRFWElOUFVUUz0iJChhbV9fVEVYSU5GT19URVhfRElSKSQoUEFUSF9TRVBBUkFUT1IpJCRURVhJTlBVVFMiIFwKKy50ZXhpLnBkZjoKKwkkKEFNX1ZfVEVYSTJQREYpVEVYSU5QVVRTPSIkKGFtX19URVhJTkZPX1RFWF9ESVIpJChQQVRIX1NFUEFSQVRPUikkJFRFWElOUFVUUyIgXAogCU1BS0VJTkZPPSckKE1BS0VJTkZPKSAkKEFNX01BS0VJTkZPRkxBR1MpICQoTUFLRUlORk9GTEFHUykgLUkgJChzcmNkaXIpJyBcCi0JJChURVhJMlBERikgJDwKKwkkKFRFWEkyUERGKSAkKEFNX1ZfdGV4aW5mbykgLS1jbGVhbiAkPCAkKEFNX1ZfdGV4aWRldm51bGwpCiAKLS50ZXhpbmZvLmh0bWw6Ci0Jcm0gLXJmICQoQDouaHRtbD0uaHRwKQotCWlmICQoTUFLRUlORk9IVE1MKSAkKEFNX01BS0VJTkZPSFRNTEZMQUdTKSAkKE1BS0VJTkZPRkxBR1MpIC1JICQoc3JjZGlyKSBcCisudGV4aS5odG1sOgorCSQoQU1fVl9NQUtFSU5GTylybSAtcmYgJChAOi5odG1sPS5odHApCisJJChBTV9WX2F0KWlmICQoTUFLRUlORk9IVE1MKSAkKEFNX01BS0VJTkZPSFRNTEZMQUdTKSAkKE1BS0VJTkZPRkxBR1MpIC1JICQoc3JjZGlyKSBcCiAJIC1vICQoQDouaHRtbD0uaHRwKSAkPDsgXAogCXRoZW4gXAogCSAgcm0gLXJmICRAOyBcCkBAIC0zMDIsMTQgKzE1MTksMTEgQEAKIAkgICAgcm0gLXJmICQoQDouaHRtbD0pOyBlbHNlIHJtIC1SZiAkKEA6Lmh0bWw9Lmh0cCkgJEA7IGZpOyBcCiAJICBleGl0IDE7IFwKIAlmaQotJChzcmNkaXIpL2Jpc29uLmluZm86IGJpc29uLnRleGluZm8gJChzcmNkaXIpL3ZlcnNpb24udGV4aSAkKGJpc29uX1RFWElORk9TKQotYmlzb24uZHZpOiBiaXNvbi50ZXhpbmZvICQoc3JjZGlyKS92ZXJzaW9uLnRleGkgJChiaXNvbl9URVhJTkZPUykKLWJpc29uLnBkZjogYmlzb24udGV4aW5mbyAkKHNyY2RpcikvdmVyc2lvbi50ZXhpICQoYmlzb25fVEVYSU5GT1MpCi1iaXNvbi5odG1sOiBiaXNvbi50ZXhpbmZvICQoc3JjZGlyKS92ZXJzaW9uLnRleGkgJChiaXNvbl9URVhJTkZPUykKKyQoc3JjZGlyKS9iaXNvbi5pbmZvOiBiaXNvbi50ZXhpICQoc3JjZGlyKS92ZXJzaW9uLnRleGkgJChiaXNvbl9URVhJTkZPUykKICQoc3JjZGlyKS92ZXJzaW9uLnRleGk6ICAkKHNyY2Rpcikvc3RhbXAtdnRpCi0kKHNyY2Rpcikvc3RhbXAtdnRpOiBiaXNvbi50ZXhpbmZvICQodG9wX3NyY2RpcikvY29uZmlndXJlCi0JQChkaXI9LjsgdGVzdCAtZiAuL2Jpc29uLnRleGluZm8gfHwgZGlyPSQoc3JjZGlyKTsgXAotCXNldCBgJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvbWRhdGUtc2ggJCRkaXIvYmlzb24udGV4aW5mb2A7IFwKKyQoc3JjZGlyKS9zdGFtcC12dGk6IGJpc29uLnRleGkgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUKKwlAKGRpcj0uOyB0ZXN0IC1mIC4vYmlzb24udGV4aSB8fCBkaXI9JChzcmNkaXIpOyBcCisJc2V0IGAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9tZGF0ZS1zaCAkJGRpci9iaXNvbi50ZXhpYDsgXAogCWVjaG8gIkBzZXQgVVBEQVRFRCAkJDEgJCQyICQkMyI7IFwKIAllY2hvICJAc2V0IFVQREFURUQtTU9OVEggJCQyICQkMyI7IFwKIAllY2hvICJAc2V0IEVESVRJT04gJChWRVJTSU9OKSI7IFwKQEAgLTMyNiwxOCArMTU0MCwzNiBAQAogbWFpbnRhaW5lci1jbGVhbi12dGk6CiAJLXJtIC1mICQoc3JjZGlyKS9zdGFtcC12dGkgJChzcmNkaXIpL3ZlcnNpb24udGV4aQogLmR2aS5wczoKLQlURVhJTlBVVFM9IiQoYW1fX1RFWElORk9fVEVYX0RJUikkKFBBVEhfU0VQQVJBVE9SKSQkVEVYSU5QVVRTIiBcCi0JJChEVklQUykgLW8gJEAgJDwKKwkkKEFNX1ZfRFZJUFMpVEVYSU5QVVRTPSIkKGFtX19URVhJTkZPX1RFWF9ESVIpJChQQVRIX1NFUEFSQVRPUikkJFRFWElOUFVUUyIgXAorCSQoRFZJUFMpICQoQU1fVl90ZXhpbmZvKSAtbyAkQCAkPAorCit1bmluc3RhbGwtZHZpLWFtOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoRFZJUyknOyB0ZXN0IC1uICIkKGR2aWRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICAkKGFtX19zdHJpcF9kaXIpIFwKKwkgIGVjaG8gIiBybSAtZiAnJChERVNURElSKSQoZHZpZGlyKS8kJGYnIjsgXAorCSAgcm0gLWYgIiQoREVTVERJUikkKGR2aWRpcikvJCRmIjsgXAorCWRvbmUKKwordW5pbnN0YWxsLWh0bWwtYW06CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChIVE1MUyknOyB0ZXN0IC1uICIkKGh0bWxkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgcm0gLXJmICckKERFU1RESVIpJChodG1sZGlyKS8kJGYnIjsgXAorCSAgcm0gLXJmICIkKERFU1RESVIpJChodG1sZGlyKS8kJGYiOyBcCisJZG9uZQogCiB1bmluc3RhbGwtaW5mby1hbToKIAlAJChQUkVfVU5JTlNUQUxMKQotCUBpZiAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbiAmJiBcCi0JICAgICBpbnN0YWxsLWluZm8gLS12ZXJzaW9uIDI+JjEgfCBzZWQgMXEgfCBncmVwIC1pIC12IGRlYmlhbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwlAaWYgdGVzdCAtZCAnJChERVNURElSKSQoaW5mb2RpciknICYmICQoYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8pOyB0aGVuIFwKIAkgIGxpc3Q9JyQoSU5GT19ERVBTKSc7IFwKIAkgIGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAogCSAgICByZWxmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICdzfF4uKi98fCdgOyBcCiAJICAgIGVjaG8gIiBpbnN0YWxsLWluZm8gLS1pbmZvLWRpcj0nJChERVNURElSKSQoaW5mb2RpciknIC0tcmVtb3ZlICckKERFU1RESVIpJChpbmZvZGlyKS8kJHJlbGZpbGUnIjsgXAotCSAgICBpbnN0YWxsLWluZm8gLS1pbmZvLWRpcj0iJChERVNURElSKSQoaW5mb2RpcikiIC0tcmVtb3ZlICIkKERFU1RESVIpJChpbmZvZGlyKS8kJHJlbGZpbGUiOyBcCisJICAgIGlmIGluc3RhbGwtaW5mbyAtLWluZm8tZGlyPSIkKERFU1RESVIpJChpbmZvZGlyKSIgLS1yZW1vdmUgIiQoREVTVERJUikkKGluZm9kaXIpLyQkcmVsZmlsZSI7IFwKKwkgICAgdGhlbiA6OyBlbHNlIHRlc3QgISAtZiAiJChERVNURElSKSQoaW5mb2RpcikvJCRyZWxmaWxlIiB8fCBleGl0IDE7IGZpOyBcCiAJICBkb25lOyBcCiAJZWxzZSA6OyBmaQogCUAkKE5PUk1BTF9VTklOU1RBTEwpCkBAIC0zNDUsMTIgKzE1NzcsMzAgQEAKIAlmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKIAkgIHJlbGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgJ3N8Xi4qL3x8J2A7IFwKIAkgIHJlbGZpbGVfaT1gZWNobyAiJCRyZWxmaWxlIiB8IHNlZCAnc3xcLmluZm8kJHx8O3N8JCR8Lml8J2A7IFwKLQkgIChpZiBjZCAiJChERVNURElSKSQoaW5mb2RpcikiOyB0aGVuIFwKKwkgIChpZiB0ZXN0IC1kICIkKERFU1RESVIpJChpbmZvZGlyKSIgJiYgY2QgIiQoREVTVERJUikkKGluZm9kaXIpIjsgdGhlbiBcCiAJICAgICBlY2hvICIgY2QgJyQoREVTVERJUikkKGluZm9kaXIpJyAmJiBybSAtZiAkJHJlbGZpbGUgJCRyZWxmaWxlLVswLTldICQkcmVsZmlsZS1bMC05XVswLTldICQkcmVsZmlsZV9pWzAtOV0gJCRyZWxmaWxlX2lbMC05XVswLTldIjsgXAogCSAgICAgcm0gLWYgJCRyZWxmaWxlICQkcmVsZmlsZS1bMC05XSAkJHJlbGZpbGUtWzAtOV1bMC05XSAkJHJlbGZpbGVfaVswLTldICQkcmVsZmlsZV9pWzAtOV1bMC05XTsgXAogCSAgIGVsc2UgOjsgZmkpOyBcCiAJZG9uZQogCit1bmluc3RhbGwtcGRmLWFtOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoUERGUyknOyB0ZXN0IC1uICIkKHBkZmRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICAkKGFtX19zdHJpcF9kaXIpIFwKKwkgIGVjaG8gIiBybSAtZiAnJChERVNURElSKSQocGRmZGlyKS8kJGYnIjsgXAorCSAgcm0gLWYgIiQoREVTVERJUikkKHBkZmRpcikvJCRmIjsgXAorCWRvbmUKKwordW5pbnN0YWxsLXBzLWFtOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoUFNTKSc7IHRlc3QgLW4gIiQocHNkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgcm0gLWYgJyQoREVTVERJUikkKHBzZGlyKS8kJGYnIjsgXAorCSAgcm0gLWYgIiQoREVTVERJUikkKHBzZGlyKS8kJGYiOyBcCisJZG9uZQorCiBkaXN0LWluZm86ICQoSU5GT19ERVBTKQogCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCiAJbGlzdD0nJChJTkZPX0RFUFMpJzsgXApAQCAtMzU5LDE3ICsxNjA5LDIzIEBACiAJICAgICQoc3JjZGlyKS8qKSBiYXNlPWBlY2hvICIkJGJhc2UiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCiAJICBlc2FjOyBcCiAJICBpZiB0ZXN0IC1mICQkYmFzZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBmb3IgZmlsZSBpbiAkJGQvJCRiYXNlKjsgZG8gXAotCSAgICByZWxmaWxlPWBleHByICIkJGZpbGUiIDogIiQkZC9cKC4qXCkiYDsgXAotCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRyZWxmaWxlIHx8IFwKLQkgICAgICBjcCAtcCAkJGZpbGUgJChkaXN0ZGlyKS8kJHJlbGZpbGU7IFwKKwkgIGJhc2VfaT1gZWNobyAiJCRiYXNlIiB8IHNlZCAnc3xcLmluZm8kJHx8O3N8JCR8Lml8J2A7IFwKKwkgIGZvciBmaWxlIGluICQkZC8kJGJhc2UgJCRkLyQkYmFzZS1bMC05XSAkJGQvJCRiYXNlLVswLTldWzAtOV0gJCRkLyQkYmFzZV9pWzAtOV0gJCRkLyQkYmFzZV9pWzAtOV1bMC05XTsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBcCisJICAgICAgcmVsZmlsZT1gZXhwciAiJCRmaWxlIiA6ICIkJGQvXCguKlwpImA7IFwKKwkgICAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkcmVsZmlsZSIgfHwgXAorCQljcCAtcCAkJGZpbGUgIiQoZGlzdGRpcikvJCRyZWxmaWxlIjsgXAorCSAgICBlbHNlIDo7IGZpOyBcCiAJICBkb25lOyBcCiAJZG9uZQogCiBtb3N0bHljbGVhbi1hbWluZm86CiAJLXJtIC1yZiBiaXNvbi5hdXggYmlzb24uY3AgYmlzb24uY3BzIGJpc29uLmZuIGJpc29uLmt5IGJpc29uLmt5cyBiaXNvbi5sb2cgXAotCSAgYmlzb24ucGcgYmlzb24ucGdzIGJpc29uLnRtcCBiaXNvbi50b2MgYmlzb24udHAgYmlzb24udnIgXAotCSAgYmlzb24uZHZpIGJpc29uLnBkZiBiaXNvbi5wcyBiaXNvbi5odG1sCisJICBiaXNvbi5wZyBiaXNvbi5wZ3MgYmlzb24udG1wIGJpc29uLnRvYyBiaXNvbi50cCBiaXNvbi52cgorCitjbGVhbi1hbWluZm86CisJLXRlc3QgLXogImJpc29uLmR2aSBiaXNvbi5wZGYgYmlzb24ucHMgYmlzb24uaHRtbCIgXAorCXx8IHJtIC1yZiBiaXNvbi5kdmkgYmlzb24ucGRmIGJpc29uLnBzIGJpc29uLmh0bWwKIAogbWFpbnRhaW5lci1jbGVhbi1hbWluZm86CiAJQGxpc3Q9JyQoSU5GT19ERVBTKSc7IGZvciBpIGluICQkbGlzdDsgZG8gXApAQCAtMzc3LDgyICsxNjMzLDk4IEBACiAJICBlY2hvICIgcm0gLWYgJCRpICQkaS1bMC05XSAkJGktWzAtOV1bMC05XSAkJGlfaVswLTldICQkaV9pWzAtOV1bMC05XSI7IFwKIAkgIHJtIC1mICQkaSAkJGktWzAtOV0gJCRpLVswLTldWzAtOV0gJCRpX2lbMC05XSAkJGlfaVswLTldWzAtOV07IFwKIAlkb25lCi1pbnN0YWxsLW1hbjE6ICQobWFuMV9NQU5TKSAkKG1hbl9NQU5TKQoraW5zdGFsbC1tYW4xOiAkKGRpc3RfbWFuX01BTlMpICQobm9kaXN0X21hbl9NQU5TKQogCUAkKE5PUk1BTF9JTlNUQUxMKQotCXRlc3QgLXogIiQobWFuMWRpcikiIHx8ICQobWtkaXJfcCkgIiQoREVTVERJUikkKG1hbjFkaXIpIgotCUBsaXN0PSckKG1hbjFfTUFOUykgJChkaXN0X21hbjFfTUFOUykgJChub2Rpc3RfbWFuMV9NQU5TKSc7IFwKLQlsMj0nJChtYW5fTUFOUykgJChkaXN0X21hbl9NQU5TKSAkKG5vZGlzdF9tYW5fTUFOUyknOyBcCi0JZm9yIGkgaW4gJCRsMjsgZG8gXAotCSAgY2FzZSAiJCRpIiBpbiBcCi0JICAgICouMSopIGxpc3Q9IiQkbGlzdCAkJGkiIDs7IFwKLQkgIGVzYWM7IFwKKwlAbGlzdDE9Jyc7IFwKKwlsaXN0Mj0nJChkaXN0X21hbl9NQU5TKSAkKG5vZGlzdF9tYW5fTUFOUyknOyBcCisJdGVzdCAtbiAiJChtYW4xZGlyKSIgXAorCSAgJiYgdGVzdCAtbiAiYGVjaG8gJCRsaXN0MSQkbGlzdDJgIiBcCisJICB8fCBleGl0IDA7IFwKKwllY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQobWFuMWRpciknIjsgXAorCSQoTUtESVJfUCkgIiQoREVTVERJUikkKG1hbjFkaXIpIiB8fCBleGl0IDE7IFwKKwl7IGZvciBpIGluICQkbGlzdDE7IGRvIGVjaG8gIiQkaSI7IGRvbmU7ICBcCisJaWYgdGVzdCAtbiAiJCRsaXN0MiI7IHRoZW4gXAorCSAgZm9yIGkgaW4gJCRsaXN0MjsgZG8gZWNobyAiJCRpIjsgZG9uZSBcCisJICAgIHwgc2VkIC1uICcvXC4xW2Etel0qJCQvcCc7IFwKKwlmaTsgXAorCX0gfCB3aGlsZSByZWFkIHA7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgZWNobyAiJCRwIjsgXAorCWRvbmUgfCBcCisJc2VkIC1lICduO3MsLiovLCw7cDtoO3MsLipcLiwsO3MsXlteMV1bMC05YS16XSokJCwxLDt4JyBcCisJICAgICAgLWUgJ3MsXC5bMC05YS16XSokJCwsOyQodHJhbnNmb3JtKTtHO3MsXG4sLiwnIHwgXAorCXNlZCAnTjtOO3MsXG4sICxnJyB8IHsgXAorCWxpc3Q9OyB3aGlsZSByZWFkIGZpbGUgYmFzZSBpbnN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJGJhc2UiID0gIiQkaW5zdCI7IHRoZW4gbGlzdD0iJCRsaXN0ICQkZmlsZSI7IGVsc2UgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICckJGZpbGUnICckKERFU1RESVIpJChtYW4xZGlyKS8kJGluc3QnIjsgXAorCSAgICAkKElOU1RBTExfREFUQSkgIiQkZmlsZSIgIiQoREVTVERJUikkKG1hbjFkaXIpLyQkaW5zdCIgfHwgZXhpdCAkJD87IFwKKwkgIGZpOyBcCiAJZG9uZTsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkKHNyY2RpcikvJCRpOyB0aGVuIGZpbGU9JChzcmNkaXIpLyQkaTsgXAotCSAgZWxzZSBmaWxlPSQkaTsgZmk7IFwKLQkgIGV4dD1gZWNobyAkJGkgfCBzZWQgLWUgJ3MvXi4qXFwuLy8nYDsgXAotCSAgY2FzZSAiJCRleHQiIGluIFwKLQkgICAgMSopIDs7IFwKLQkgICAgKikgZXh0PScxJyA7OyBcCi0JICBlc2FjOyBcCi0JICBpbnN0PWBlY2hvICQkaSB8IHNlZCAtZSAncy9cXC5bMC05YS16XSokJC8vJ2A7IFwKLQkgIGluc3Q9YGVjaG8gJCRpbnN0IHwgc2VkIC1lICdzL14uKlwvLy8nYDsgXAotCSAgaW5zdD1gZWNobyAkJGluc3QgfCBzZWQgJyQodHJhbnNmb3JtKSdgLiQkZXh0OyBcCi0JICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICckJGZpbGUnICckKERFU1RESVIpJChtYW4xZGlyKS8kJGluc3QnIjsgXAotCSAgJChJTlNUQUxMX0RBVEEpICIkJGZpbGUiICIkKERFU1RESVIpJChtYW4xZGlyKS8kJGluc3QiOyBcCi0JZG9uZQorCWZvciBpIGluICQkbGlzdDsgZG8gZWNobyAiJCRpIjsgZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCisJICAgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQobWFuMWRpciknIjsgXAorCSAgICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQobWFuMWRpcikiIHx8IGV4aXQgJCQ/OyB9OyBcCisJZG9uZTsgfQorCiB1bmluc3RhbGwtbWFuMToKIAlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKG1hbjFfTUFOUykgJChkaXN0X21hbjFfTUFOUykgJChub2Rpc3RfbWFuMV9NQU5TKSc7IFwKLQlsMj0nJChtYW5fTUFOUykgJChkaXN0X21hbl9NQU5TKSAkKG5vZGlzdF9tYW5fTUFOUyknOyBcCi0JZm9yIGkgaW4gJCRsMjsgZG8gXAotCSAgY2FzZSAiJCRpIiBpbiBcCi0JICAgICouMSopIGxpc3Q9IiQkbGlzdCAkJGkiIDs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBleHQ9YGVjaG8gJCRpIHwgc2VkIC1lICdzL14uKlxcLi8vJ2A7IFwKLQkgIGNhc2UgIiQkZXh0IiBpbiBcCi0JICAgIDEqKSA7OyBcCi0JICAgICopIGV4dD0nMScgOzsgXAotCSAgZXNhYzsgXAotCSAgaW5zdD1gZWNobyAkJGkgfCBzZWQgLWUgJ3MvXFwuWzAtOWEtel0qJCQvLydgOyBcCi0JICBpbnN0PWBlY2hvICQkaW5zdCB8IHNlZCAtZSAncy9eLipcLy8vJ2A7IFwKLQkgIGluc3Q9YGVjaG8gJCRpbnN0IHwgc2VkICckKHRyYW5zZm9ybSknYC4kJGV4dDsgXAotCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChtYW4xZGlyKS8kJGluc3QnIjsgXAotCSAgcm0gLWYgIiQoREVTVERJUikkKG1hbjFkaXIpLyQkaW5zdCI7IFwKLQlkb25lCisJQGxpc3Q9Jyc7IHRlc3QgLW4gIiQobWFuMWRpcikiIHx8IGV4aXQgMDsgXAorCWZpbGVzPWB7IGZvciBpIGluICQkbGlzdDsgZG8gZWNobyAiJCRpIjsgZG9uZTsgXAorCWwyPSckKGRpc3RfbWFuX01BTlMpICQobm9kaXN0X21hbl9NQU5TKSc7IGZvciBpIGluICQkbDI7IGRvIGVjaG8gIiQkaSI7IGRvbmUgfCBcCisJICBzZWQgLW4gJy9cLjFbYS16XSokJC9wJzsgXAorCX0gfCBzZWQgLWUgJ3MsLiovLCw7aDtzLC4qXC4sLDtzLF5bXjFdWzAtOWEtel0qJCQsMSw7eCcgXAorCSAgICAgIC1lICdzLFwuWzAtOWEtel0qJCQsLDskKHRyYW5zZm9ybSk7RztzLFxuLC4sJ2A7IFwKKwlkaXI9JyQoREVTVERJUikkKG1hbjFkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQogdGFnczogVEFHUwogVEFHUzoKIAogY3RhZ3M6IENUQUdTCiBDVEFHUzoKIAorY3Njb3BlIGNzY29wZWxpc3Q6CisKIAogZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAotCSAgY2FzZSAkJGZpbGUgaW4gXAotCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCi0JICBlc2FjOyBcCisJQGxpc3Q9JyQoTUFOUyknOyBpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKKwkgIGxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgICAgaWYgdGVzdCAtZiAiJCRkJCRwIjsgdGhlbiBlY2hvICIkJGQkJHAiOyBlbHNlIDo7IGZpOyBkb25lYDsgXAorCSAgaWYgdGVzdCAtbiAiJCRsaXN0IiAmJiBcCisJICAgIGdyZXAgJ2FiIGhlbHAybWFuIGlzIHJlcXVpcmVkIHRvIGdlbmVyYXRlIHRoaXMgcGFnZScgJCRsaXN0ID4vZGV2L251bGw7IHRoZW4gXAorCSAgICBlY2hvICJlcnJvcjogZm91bmQgbWFuIHBhZ2VzIGNvbnRhaW5pbmcgdGhlICdtaXNzaW5nIGhlbHAybWFuJyByZXBsYWNlbWVudCB0ZXh0OiIgPiYyOyBcCisJICAgIGdyZXAgLWwgJ2FiIGhlbHAybWFuIGlzIHJlcXVpcmVkIHRvIGdlbmVyYXRlIHRoaXMgcGFnZScgJCRsaXN0IHwgc2VkICdzL14vICAgICAgICAgLycgPiYyOyBcCisJICAgIGVjaG8gIiAgICAgICB0byBmaXggdGhlbSwgaW5zdGFsbCBoZWxwMm1hbiwgcmVtb3ZlIGFuZCByZWdlbmVyYXRlIHRoZSBtYW4gcGFnZXM7IiA+JjI7IFwKKwkgICAgZWNobyAiICAgICAgIHR5cGljYWxseSAnbWFrZSBtYWludGFpbmVyLWNsZWFuJyB3aWxsIHJlbW92ZSB0aGVtIiA+JjI7IFwKKwkgICAgZXhpdCAxOyBcCisJICBlbHNlIDo7IGZpOyBcCisJZWxzZSA6OyBmaQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCiAJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCi0JICAgIGRpcj0iLyQkZGlyIjsgXAotCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCi0JICBlbHNlIFwKLQkgICAgZGlyPScnOyBcCi0JICBmaTsgXAogCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAogCSAgICBmaTsgXAotCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAogCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKIAkgICAgfHwgZXhpdCAxOyBcCiAJICBmaTsgXAogCWRvbmUKQEAgLTQ2NCw3ICsxNzM2LDcgQEAKIGFsbC1hbTogTWFrZWZpbGUgJChJTkZPX0RFUFMpICQoTUFOUykKIGluc3RhbGxkaXJzOgogCWZvciBkaXIgaW4gIiQoREVTVERJUikkKGluZm9kaXIpIiAiJChERVNURElSKSQobWFuMWRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChta2Rpcl9wKSAiJCRkaXIiOyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCiAJZG9uZQogaW5zdGFsbDogaW5zdGFsbC1hbQogaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KQEAgLTQ3NiwyNCArMTc0OCwzMiBAQAogCiBpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQogaW5zdGFsbC1zdHJpcDoKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKLQkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKKwlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICAgaW5zdGFsbDsgXAorCWVsc2UgXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCisJZmkKIG1vc3RseWNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoTU9TVExZQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoTU9TVExZQ0xFQU5GSUxFUykKIAogY2xlYW4tZ2VuZXJpYzoKIAktdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChDTEVBTkZJTEVTKQogCiBkaXN0Y2xlYW4tZ2VuZXJpYzoKIAktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKIAogbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgogCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKIAlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCisJLXRlc3QgLXogIiQoTUFJTlRBSU5FUkNMRUFORklMRVMpIiB8fCBybSAtZiAkKE1BSU5UQUlORVJDTEVBTkZJTEVTKQogY2xlYW46IGNsZWFuLWFtCiAKLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxvY2FsIG1vc3RseWNsZWFuLWFtCitjbGVhbi1hbTogY2xlYW4tYW1pbmZvIGNsZWFuLWdlbmVyaWMgY2xlYW4tbG9jYWwgbW9zdGx5Y2xlYW4tYW0KIAogZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KIAktcm0gLWYgTWFrZWZpbGUKQEAgLTUwNSw3ICsxNzg1LDcgQEAKIAogaHRtbDogaHRtbC1hbQogCi1odG1sLWFtOiAkKEhUTUxTKQoraHRtbC1hbTogJChIVE1MUykgaHRtbC1sb2NhbAogCiBpbmZvOiBpbmZvLWFtCiAKQEAgLTUxMywxNSArMTc5Myw2MiBAQAogCiBpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbgogCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06ICQoRFZJUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwlAbGlzdD0nJChEVklTKSc7IHRlc3QgLW4gIiQoZHZpZGlyKSIgfHwgbGlzdD07IFwKKwlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKKwkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChkdmlkaXIpJyI7IFwKKwkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKGR2aWRpcikiIHx8IGV4aXQgMTsgXAorCWZpOyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQoZHZpZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQoZHZpZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCiBpbnN0YWxsLWV4ZWMtYW06CiAKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbTogJChIVE1MUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwlAbGlzdD0nJChIVE1MUyknOyBsaXN0Mj07IHRlc3QgLW4gIiQoaHRtbGRpcikiIHx8IGxpc3Q9OyBcCisJaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCisJICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQoaHRtbGRpciknIjsgXAorCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQoaHRtbGRpcikiIHx8IGV4aXQgMTsgXAorCWZpOyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiIHx8IHRlc3QgLWQgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICAkKGFtX19zdHJpcF9kaXIpIFwKKwkgIGQyPSQkZCQkcDsgXAorCSAgaWYgdGVzdCAtZCAiJCRkMiI7IHRoZW4gXAorCSAgICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQoaHRtbGRpcikvJCRmJyI7IFwKKwkgICAgJChNS0RJUl9QKSAiJChERVNURElSKSQoaHRtbGRpcikvJCRmIiB8fCBleGl0IDE7IFwKKwkgICAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAnJCRkMicvKiAnJChERVNURElSKSQoaHRtbGRpcikvJCRmJyI7IFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICIkJGQyIi8qICIkKERFU1RESVIpJChodG1sZGlyKS8kJGYiIHx8IGV4aXQgJCQ/OyBcCisJICBlbHNlIFwKKwkgICAgbGlzdDI9IiQkbGlzdDIgJCRkMiI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgZWNobyAiJCRsaXN0MiIgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQoaHRtbGRpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKGh0bWxkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmU7IH0KIGluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCiAKIGluc3RhbGwtaW5mby1hbTogJChJTkZPX0RFUFMpCiAJQCQoTk9STUFMX0lOU1RBTEwpCi0JdGVzdCAteiAiJChpbmZvZGlyKSIgfHwgJChta2Rpcl9wKSAiJChERVNURElSKSQoaW5mb2RpcikiCiAJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQlsaXN0PSckKElORk9fREVQUyknOyBcCisJbGlzdD0nJChJTkZPX0RFUFMpJzsgdGVzdCAtbiAiJChpbmZvZGlyKSIgfHwgbGlzdD07IFwKKwlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKKwkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChpbmZvZGlyKSciOyBcCisJICAkKE1LRElSX1ApICIkKERFU1RESVIpJChpbmZvZGlyKSIgfHwgZXhpdCAxOyBcCisJZmk7IFwKIAlmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKIAkgIGNhc2UgJCRmaWxlIGluIFwKIAkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKQEAgLTUyOSwxOCArMTg1NiwxOCBAQAogCSAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAogCSAgZmlsZV9pPWBlY2hvICIkJGZpbGUiIHwgc2VkICdzfFwuaW5mbyQkfHw7c3wkJHwuaXwnYDsgXAogCSAgZm9yIGlmaWxlIGluICQkZC8kJGZpbGUgJCRkLyQkZmlsZS1bMC05XSAkJGQvJCRmaWxlLVswLTldWzAtOV0gXAotICAgICAgICAgICAgICAgICAgICAgICAkJGQvJCRmaWxlX2lbMC05XSAkJGQvJCRmaWxlX2lbMC05XVswLTldIDsgZG8gXAorCSAgICAgICAgICAgICAgICQkZC8kJGZpbGVfaVswLTldICQkZC8kJGZpbGVfaVswLTldWzAtOV0gOyBkbyBcCiAJICAgIGlmIHRlc3QgLWYgJCRpZmlsZTsgdGhlbiBcCi0JICAgICAgcmVsZmlsZT1gZWNobyAiJCRpZmlsZSIgfCBzZWQgJ3N8Xi4qL3x8J2A7IFwKLQkgICAgICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICckJGlmaWxlJyAnJChERVNURElSKSQoaW5mb2RpcikvJCRyZWxmaWxlJyI7IFwKLQkgICAgICAkKElOU1RBTExfREFUQSkgIiQkaWZpbGUiICIkKERFU1RESVIpJChpbmZvZGlyKS8kJHJlbGZpbGUiOyBcCisJICAgICAgZWNobyAiJCRpZmlsZSI7IFwKIAkgICAgZWxzZSA6IDsgZmk7IFwKIAkgIGRvbmU7IFwKLQlkb25lCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChpbmZvZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQoaW5mb2RpcikiIHx8IGV4aXQgJCQ/OyBkb25lCiAJQCQoUE9TVF9JTlNUQUxMKQotCUBpZiAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbiAmJiBcCi0JICAgICBpbnN0YWxsLWluZm8gLS12ZXJzaW9uIDI+JjEgfCBzZWQgMXEgfCBncmVwIC1pIC12IGRlYmlhbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKLQkgIGxpc3Q9JyQoSU5GT19ERVBTKSc7IFwKKwlAaWYgJChhbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyk7IHRoZW4gXAorCSAgbGlzdD0nJChJTkZPX0RFUFMpJzsgdGVzdCAtbiAiJChpbmZvZGlyKSIgfHwgbGlzdD07IFwKIAkgIGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAogCSAgICByZWxmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICdzfF4uKi98fCdgOyBcCiAJICAgIGVjaG8gIiBpbnN0YWxsLWluZm8gLS1pbmZvLWRpcj0nJChERVNURElSKSQoaW5mb2RpciknICckKERFU1RESVIpJChpbmZvZGlyKS8kJHJlbGZpbGUnIjtcCkBAIC01NDksNiArMTg3NiwzOCBAQAogCWVsc2UgOiA7IGZpCiBpbnN0YWxsLW1hbjogaW5zdGFsbC1tYW4xCiAKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbTogJChQREZTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCUBsaXN0PSckKFBERlMpJzsgdGVzdCAtbiAiJChwZGZkaXIpIiB8fCBsaXN0PTsgXAorCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAorCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHBkZmRpciknIjsgXAorCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocGRmZGlyKSIgfHwgZXhpdCAxOyBcCisJZmk7IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChwZGZkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChwZGZkaXIpIiB8fCBleGl0ICQkPzsgZG9uZQoraW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOiAkKFBTUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwlAbGlzdD0nJChQU1MpJzsgdGVzdCAtbiAiJChwc2RpcikiIHx8IGxpc3Q9OyBcCisJaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCisJICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocHNkaXIpJyI7IFwKKwkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBzZGlyKSIgfHwgZXhpdCAxOyBcCisJZmk7IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChwc2RpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKHBzZGlyKSIgfHwgZXhpdCAkJD87IGRvbmUKIGluc3RhbGxjaGVjay1hbToKIAogbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQpAQCAtNTY4LDMwICsxOTI3LDk3IEBACiAKIHBzLWFtOiAkKFBTUykKIAotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaW5mby1hbSB1bmluc3RhbGwtbWFuCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1kdmktYW0gdW5pbnN0YWxsLWh0bWwtYW0gdW5pbnN0YWxsLWluZm8tYW0gXAorCXVuaW5zdGFsbC1tYW4gdW5pbnN0YWxsLXBkZi1hbSB1bmluc3RhbGwtcHMtYW0KIAogdW5pbnN0YWxsLW1hbjogdW5pbnN0YWxsLW1hbjEKIAotLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbG9jYWwgXAotCWRpc3QtaW5mbyBkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtbWFuMSBpbnN0YWxsLXN0cmlwIFwKLQlpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAotCW1haW50YWluZXItY2xlYW4tYW1pbmZvIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCi0JbWFpbnRhaW5lci1jbGVhbi12dGkgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tYW1pbmZvIFwKLQltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLXZ0aSBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKLQl1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1pbmZvLWFtIHVuaW5zdGFsbC1tYW4gXAotCXVuaW5zdGFsbC1tYW4xCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCiAKKy5QSE9OWTogYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1hbWluZm8gY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbG9jYWwgZGlzdC1pbmZvIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0ZGlyIGR2aSBcCisJZHZpLWFtIGh0bWwgaHRtbC1hbSBodG1sLWxvY2FsIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gXAorCWluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBcCisJaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLW1hbjEgXAorCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCisJaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKKwltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tYW1pbmZvIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbWFpbnRhaW5lci1jbGVhbi12dGkgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWFtaW5mbyBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLXZ0aSBwZGYgXAorCXBkZi1hbSBwcyBwcy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1kdmktYW0gXAorCXVuaW5zdGFsbC1odG1sLWFtIHVuaW5zdGFsbC1pbmZvLWFtIHVuaW5zdGFsbC1tYW4gXAorCXVuaW5zdGFsbC1tYW4xIHVuaW5zdGFsbC1wZGYtYW0gdW5pbnN0YWxsLXBzLWFtCiAKIGNsZWFuLWxvY2FsOgotCXJtIC1yZiAqLnQyZAorCXJtIC1yZiAkKENMRUFORElSUykKKyQoc3JjZGlyKS9jcm9zcy1vcHRpb25zLnRleGk6ICQodG9wX3NyY2Rpcikvc3JjL2dldGFyZ3MuYyAkKENST1NTX09QVElPTlNfUEwpCisJJChBTV9WX0dFTiltdiAtZiAkQCAkQH4gfHwgOiA+JEB+CisJJChBTV9WX2F0KXJtIC1mICRALnRtcAorCSQoQU1fVl9hdCljZCAkKHRvcF9idWlsZGRpcikvc3JjICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGJpc29uCisJJChBTV9WX2F0KSQodG9wX2J1aWxkZGlyKS9zcmMvYmlzb24gLS1oZWxwIFwKKwkgIHwgJChQRVJMKSAkKENST1NTX09QVElPTlNfUEwpICQodG9wX3NyY2Rpcikvc3JjL3NjYW4tZ3JhbS5sID4kQC50bXAKKwkkKEFNX1ZfYXQpZGlmZiAtdSAkQH4gJEAudG1wIHx8IHRydWUKKwkkKEFNX1ZfYXQpbXYgJEAudG1wICRACiAKIHJlZmNhcmQuZHZpOiByZWZjYXJkLnRleAotCXRleCByZWZjYXJkLnRleAorCSQoQU1fVl9HRU4pdGV4IHJlZmNhcmQudGV4CiAKIHJlZmNhcmQucHM6IHJlZmNhcmQuZHZpCiskKHNyY2RpcikvYmlzb24uMTogICAgICAkKGNvbW1vbl9kZXApICQodG9wX3NyY2Rpcikvc3JjL2dldGFyZ3MuYworLnguMToKKwkkKEFNX1ZfR0VOKXByb2dyYW09YGV4cHIgIi8kKiIgOiAnLiovXCguKlwpJ2AgJiYJCVwKKwlzYXZlX0lGUz0kSUZTOwkJCQkJCQlcCisJSUZTPSQoUEFUSF9TRVBBUkFUT1IpOwkJCQkJCVwKKwlmb3IgZGlyIGluICQoUFJFUEFUSCk7IGRvCQkJCQlcCisJICBJRlM9JHNhdmVfSUZTOwkJCQkJCVwKKwkgIGVjaG8gY2QgJCRkaXIgJyYmJyAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJHByb2dyYW0gJiYJXAorCSAgKGNkICQkZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkcHJvZ3JhbSkgfHwgZXhpdDsJXAorCWRvbmUKKwkkKEFNX1ZfYXQpUEFUSD0iJChQUkVQQVRIKSQoUEFUSF9TRVBBUkFUT1IpJCRQQVRIIjsJCSAgICAgXAorCWV4cG9ydCBQQVRIOwkJCQkJCQkgICAgIFwKKwkkKEhFTFAyTUFOKQkJCQkJCQkgICAgIFwKKwkgICAgLS1pbmNsdWRlPSQqLngJCQkJCQkgICAgIFwKKwkgICAgLS1pbmNsdWRlPSQoc3JjZGlyKS9jb21tb24ueAkJCQkgICAgIFwKKwkgICAgLS1vdXRwdXQ9JEAudCBgZWNobyAnJConIHwgc2VkICdzLC4qLywsJ2AKKwkkKEFNX1ZfYXQpaWYgJChyZW1vdmVfdGltZV9zdGFtcCkgJEAgPiRAYS50IDI+L2Rldi9udWxsICYmCSAgICAgXAorCSAgICQocmVtb3ZlX3RpbWVfc3RhbXApICRALnQgfCBjbXAgJEBhLnQgLSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gICAgIFwKKwkJdG91Y2ggJEA7CQkJCQkJICAgICBcCisJZWxzZQkJCQkJCQkJICAgICBcCisJCW12ICRALnQgJEA7CQkJCQkJICAgICBcCisJZmkKKwkkKEFNX1ZfYXQpcm0gLWYgJEAqLnQKKworYmlzb24uZHZpOiAgJChGSUdTX0RPVDouZG90PS5lcHMpCitiaXNvbi5odG1sOiAkKEZJR1NfRE9UOi5kb3Q9LnBuZykKK2Jpc29uLnBkZjogICQoRklHU19ET1Q6LmRvdD0ucGRmKQorCisuZG90LmVwczoKKwkkKEFNX1ZfR0VOKSAkKE1LRElSX1ApIGBlY2hvICIuLyRAIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2AKKwkkKEFNX1ZfYXQpICQoRE9UKSAtR21hcmdpbj0wIC1UZXBzICQ8ID4kQC50bXAKKwkkKEFNX1ZfYXQpIG12ICRALnRtcCAkQAorCisuZG90LnBkZjoKKwkkKEFNX1ZfR0VOKSAkKE1LRElSX1ApIGBlY2hvICIuLyRAIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2AKKwkkKEFNX1ZfYXQpICQoRE9UKSAtR21hcmdpbj0wIC1UcGRmICQ8ID4kQC50bXAKKwkkKEFNX1ZfYXQpIG12ICRALnRtcCAkQAorCisuZG90LnBuZzoKKwkkKEFNX1ZfR0VOKSAkKE1LRElSX1ApIGBlY2hvICIuLyRAIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2AKKwkkKEFNX1ZfYXQpICQoRE9UKSAtR21hcmdpbj0wIC1UcG5nICQ8ID4kQC50bXAKKwkkKEFNX1ZfYXQpIG12ICRALnRtcCAkQAorCisuUEhPTlk6IGRvYyBodG1sCisKK2RvYzogaHRtbAorCitodG1sLWxvY2FsOiBEb3h5ZmlsZQorCSQoRE9YWUdFTikKKyMgU2VkIGlzIHVzZWQgdG8gZ2VuZXJhdGUgRG94eWZpbGUgZnJvbSBEb3h5ZmlsZS5pbiBpbnN0ZWFkIG9mCisjIGNvbmZpZ3VyZSwgYmVjYXVzZSB0aGUgZm9ybWVyIGlzIHdheSBmYXN0ZXIgdGhhbiB0aGUgbGF0dGVyLgorRG94eWZpbGU6ICQoc3JjZGlyKS9Eb3h5ZmlsZS5pbgorCSQoQU1fVl9HRU4pJChlZGl0KSAkKHNyY2RpcikvRG94eWZpbGUuaW4gPkRveHlmaWxlCisKICMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCiAjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KIC5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2RvYy9iaXNvbi4xIGIvZG9jL2Jpc29uLjEKaW5kZXggNWUxZDk2Mi4uNjMwOTk3NSAxMDA2NDQKLS0tIGEvZG9jL2Jpc29uLjEKKysrIGIvZG9jL2Jpc29uLjEKQEAgLTEsNjkgKzEsMTAgQEAKLS5USCBCSVNPTiAxIGxvY2FsCisuXCIgRE8gTk9UIE1PRElGWSBUSElTIEZJTEUhICBJdCB3YXMgZ2VuZXJhdGVkIGJ5IGhlbHAybWFuIDEuNDAuMTAuCisuVEggQklTT04gIjEiICJEZWNlbWJlciAyMDEyIiAiYmlzb24gMi43IiAiVXNlciBDb21tYW5kcyIKIC5TSCBOQU1FCiBiaXNvbiBcLSBHTlUgUHJvamVjdCBwYXJzZXIgZ2VuZXJhdG9yICh5YWNjIHJlcGxhY2VtZW50KQogLlNIIFNZTk9QU0lTCiAuQiBiaXNvbgotWwotLkJJIFwtYiAgIiBmaWxlLXByZWZpeCIKLV0gWwotLkJJIFwtXC1maWxlLXByZWZpeD0gZmlsZS1wcmVmaXgKLV0gWwotLkIgXC1kCi1dIFsKLS5CSSBcLVwtZGVmaW5lcz0gZGVmaW5lcy1maWxlCi1dIFsKLS5CIFwtZwotXSBbCi0uQkkgXC1cLWdyYXBoPSBncmFwaC1maWxlCi1dIFsKLS5CIFwtawotXSBbCi0uQiBcLVwtdG9rZW4tdGFibGUKLV0gWwotLkIgXC1sCi1dIFsKLS5CIFwtXC1uby1saW5lcwotXSBbCi0uQiBcLW4KLV0gWwotLkIgXC1cLW5vLXBhcnNlcgotXSBbCi0uQkkgXC1vICIgb3V0ZmlsZSIKLV0gWwotLkJJIFwtXC1vdXRwdXQtZmlsZT0gb3V0ZmlsZQotXSBbCi0uQkkgXC1wICIgcHJlZml4IgotXSBbCi0uQkkgXC1cLW5hbWUtcHJlZml4PSBwcmVmaXgKLV0gWwotLkIgXC10Ci1dIFsKLS5CIFwtXC1kZWJ1ZwotXSBbCi0uQiBcLXYKLV0gWwotLkIgXC1cLXZlcmJvc2UKLV0gWwotLkIgXC1WCi1dIFsKLS5CIFwtXC12ZXJzaW9uCi1dIFsKLS5CIFwteQotXSBbCi0uQiBcLVwteWFjYwotXSBbCi0uQiBcLWgKLV0gWwotLkIgXC1cLWhlbHAKLV0gWwotLkIgXC1cLWZpeGVkLW91dHB1dC1maWxlcwotXQotZmlsZQotLmJyCi0uQiB5YWNjCi1bCi0uSSAic2ltaWxhciBvcHRpb25zIGFuZCBvcGVyYW5kcyIKLV0KK1tcZklPUFRJT05cZlJdLi4uIFxmSUZJTEVcZlIKIC5TSCBERVNDUklQVElPTgogLkkgQmlzb24KIGlzIGEgcGFyc2VyIGdlbmVyYXRvciBpbiB0aGUgc3R5bGUgb2YKQEAgLTExNiwyNTQgKzU3LDE4NCBAQAogLkJSIFwtXC1maWxlLXByZWZpeCAsCiBjb25uZWN0IHRoZSBvcHRpb24gbmFtZSBhbmQgdGhlIGFyZ3VtZW50IHdpdGgKIC5CUiA9IC4KLS5TUyBPUFRJT05TCisuUFAKK0dlbmVyYXRlIGEgZGV0ZXJtaW5pc3RpYyBMUiBvciBnZW5lcmFsaXplZCBMUiAoR0xSKSBwYXJzZXIgZW1wbG95aW5nCitMQUxSKDEpLCBJRUxSKDEpLCBvciBjYW5vbmljYWwgTFIoMSkgcGFyc2VyIHRhYmxlcy4gIElFTFIoMSkgYW5kCitjYW5vbmljYWwgTFIoMSkgc3VwcG9ydCBpcyBleHBlcmltZW50YWwuCisuUFAKK01hbmRhdG9yeSBhcmd1bWVudHMgdG8gbG9uZyBvcHRpb25zIGFyZSBtYW5kYXRvcnkgZm9yIHNob3J0IG9wdGlvbnMgdG9vLgorVGhlIHNhbWUgaXMgdHJ1ZSBmb3Igb3B0aW9uYWwgYXJndW1lbnRzLgorLlNTICJPcGVyYXRpb24gbW9kZXM6IgogLlRQCi0uQkkgXC1iICIgZmlsZS1wcmVmaXgiCitcZkJcLWhcZlIsIFxmQlwtXC1oZWxwXGZSCitkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAorLlRQCitcZkJcLVZcZlIsIFxmQlwtXC12ZXJzaW9uXGZSCitvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorLlRQCitcZkJcLVwtcHJpbnRcLWxvY2FsZWRpclxmUgorb3V0cHV0IGRpcmVjdG9yeSBjb250YWluaW5nIGxvY2FsZVwtZGVwZW5kZW50IGRhdGEKKy5UUAorXGZCXC1cLXByaW50XC1kYXRhZGlyXGZSCitvdXRwdXQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgc2tlbGV0b25zIGFuZCBYU0xUCisuVFAKK1xmQlwteVxmUiwgXGZCXC1cLXlhY2NcZlIKK2VtdWxhdGUgUE9TSVggWWFjYworLlRQCitcZkJcLVdcZlIsIFxmQlwtXC13YXJuaW5nc1xmUls9XGZJQ0FURUdPUllcZlJdCityZXBvcnQgdGhlIHdhcm5pbmdzIGZhbGxpbmcgaW4gQ0FURUdPUlkKKy5UUAorXGZCXC1mXGZSLCBcZkJcLVwtZmVhdHVyZVxmUls9XGZJRkVBVFVSRVxmUl0KK2FjdGl2YXRlIG1pc2NlbGxhbmVvdXMgZmVhdHVyZXMKKy5TUyAiUGFyc2VyOiIKKy5UUAorXGZCXC1MXGZSLCBcZkJcLVwtbGFuZ3VhZ2VcZlI9XGZJTEFOR1VBR0VcZlIKK3NwZWNpZnkgdGhlIG91dHB1dCBwcm9ncmFtbWluZyBsYW5ndWFnZQorLlRQCitcZkJcLVNcZlIsIFxmQlwtXC1za2VsZXRvblxmUj1cZklGSUxFXGZSCitzcGVjaWZ5IHRoZSBza2VsZXRvbiB0byB1c2UKKy5UUAorXGZCXC10XGZSLCBcZkJcLVwtZGVidWdcZlIKK2luc3RydW1lbnQgdGhlIHBhcnNlciBmb3IgZGVidWdnaW5nCisuVFAKK1xmQlwtXC1sb2NhdGlvbnNcZlIKK2VuYWJsZSBsb2NhdGlvbiBzdXBwb3J0CisuVFAKK1xmQlwtRFxmUiwgXGZCXC1cLWRlZmluZT1OQU1FXGZSWz1cZklWQUxVRVxmUl0KK3NpbWlsYXIgdG8gJyVkZWZpbmUgTkFNRSAiVkFMVUUiJworLlRQCitcZkJcLUZcZlIsIFxmQlwtXC1mb3JjZVwtZGVmaW5lPU5BTUVcZlJbPVxmSVZBTFVFXGZSXQorb3ZlcnJpZGUgJyVkZWZpbmUgTkFNRSAiVkFMVUUiJworLlRQCitcZkJcLXBcZlIsIFxmQlwtXC1uYW1lXC1wcmVmaXhcZlI9XGZJUFJFRklYXGZSCitwcmVwZW5kIFBSRUZJWCB0byB0aGUgZXh0ZXJuYWwgc3ltYm9scworZGVwcmVjYXRlZCBieSAnXC1EYXBpLnByZWZpeD1QUkVGSVgnCisuVFAKK1xmQlwtbFxmUiwgXGZCXC1cLW5vXC1saW5lc1xmUgorZG9uJ3QgZ2VuZXJhdGUgJyNsaW5lJyBkaXJlY3RpdmVzCisuVFAKK1xmQlwta1xmUiwgXGZCXC1cLXRva2VuXC10YWJsZVxmUgoraW5jbHVkZSBhIHRhYmxlIG9mIHRva2VuIG5hbWVzCisuU1MgIk91dHB1dDoiCisuVFAKK1xmQlwtXC1kZWZpbmVzXGZSWz1cZklGSUxFXGZSXQorYWxzbyBwcm9kdWNlIGEgaGVhZGVyIGZpbGUKKy5UUAorXGZCXC1kXGZSCitsaWtld2lzZSBidXQgY2Fubm90IHNwZWNpZnkgRklMRSAoZm9yIFBPU0lYIFlhY2MpCisuVFAKK1xmQlwtclxmUiwgXGZCXC1cLXJlcG9ydFxmUj1cZklUSElOR1NcZlIKK2Fsc28gcHJvZHVjZSBkZXRhaWxzIG9uIHRoZSBhdXRvbWF0b24KKy5UUAorXGZCXC1cLXJlcG9ydFwtZmlsZVxmUj1cZklGSUxFXGZSCit3cml0ZSByZXBvcnQgdG8gRklMRQorLlRQCitcZkJcLXZcZlIsIFxmQlwtXC12ZXJib3NlXGZSCitzYW1lIGFzIGBcLVwtcmVwb3J0PXN0YXRlJworLlRQCitcZkJcLWJcZlIsIFxmQlwtXC1maWxlXC1wcmVmaXhcZlI9XGZJUFJFRklYXGZSCitzcGVjaWZ5IGEgUFJFRklYIGZvciBvdXRwdXQgZmlsZXMKKy5UUAorXGZCXC1vXGZSLCBcZkJcLVwtb3V0cHV0XGZSPVxmSUZJTEVcZlIKK2xlYXZlIG91dHB1dCB0byBGSUxFCisuVFAKK1xmQlwtZ1xmUiwgXGZCXC1cLWdyYXBoXGZSWz1cZklGSUxFXGZSXQorYWxzbyBvdXRwdXQgYSBncmFwaCBvZiB0aGUgYXV0b21hdG9uCisuVFAKK1xmQlwteFxmUiwgXGZCXC1cLXhtbFxmUls9XGZJRklMRVxmUl0KK2Fsc28gb3V0cHV0IGFuIFhNTCByZXBvcnQgb2YgdGhlIGF1dG9tYXRvbgorKHRoZSBYTUwgc2NoZW1hIGlzIGV4cGVyaW1lbnRhbCkKKy5TUyAiV2FybmluZyBjYXRlZ29yaWVzIGluY2x1ZGU6IgorLlRQCitgbWlkcnVsZVwtdmFsdWVzJwordW5zZXQgb3IgdW51c2VkIG1pZHJ1bGUgdmFsdWVzCisuVFAKK2B5YWNjJworaW5jb21wYXRpYmlsaXRpZXMgd2l0aCBQT1NJWCBZYWNjCisuVFAKK2Bjb25mbGljdHNcLXNyJworUy9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KQorLlRQCitgY29uZmxpY3RzXC1ycicKK1IvUiBjb25mbGljdHMgKGVuYWJsZWQgYnkgZGVmYXVsdCkKKy5UUAorYGRlcHJlY2F0ZWQnCitvYnNvbGV0ZSBjb25zdHJ1Y3RzCisuVFAKK2BvdGhlcicKK2FsbCBvdGhlciB3YXJuaW5ncyAoZW5hYmxlZCBieSBkZWZhdWx0KQorLlRQCitgYWxsJworYWxsIHRoZSB3YXJuaW5ncworLlRQCitgbm9cLUNBVEVHT1JZJwordHVybiBvZmYgd2FybmluZ3MgaW4gQ0FURUdPUlkKKy5UUAorYG5vbmUnCit0dXJuIG9mZiBhbGwgdGhlIHdhcm5pbmdzCisuVFAKK2BlcnJvcicKK3RyZWF0IHdhcm5pbmdzIGFzIGVycm9ycworLlNTICJUSElOR1MgaXMgYSBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCB3b3JkcyB0aGF0IGNhbiBpbmNsdWRlOiIKKy5UUAorYHN0YXRlJworZGVzY3JpYmUgdGhlIHN0YXRlcworLlRQCitgaXRlbXNldCcKK2NvbXBsZXRlIHRoZSBjb3JlIGl0ZW0gc2V0cyB3aXRoIHRoZWlyIGNsb3N1cmUKKy5UUAorYGxvb2thaGVhZCcKK2V4cGxpY2l0bHkgYXNzb2NpYXRlIGxvb2thaGVhZCB0b2tlbnMgdG8gaXRlbXMKKy5UUAorYHNvbHZlZCcKK2Rlc2NyaWJlIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMgc29sdmluZworLlRQCitgYWxsJworaW5jbHVkZSBhbGwgdGhlIGFib3ZlIGluZm9ybWF0aW9uCisuVFAKK2Bub25lJworZGlzYWJsZSB0aGUgcmVwb3J0CisuU1MgIkZFQVRVUkUgaXMgYSBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCB3b3JkcyB0aGF0IGNhbiBpbmNsdWRlOiIKKy5UUAorYGNhcmV0Jworc2hvdyBlcnJvcnMgd2l0aCBjYXJldHMKKy5UUAorYGFsbCcKK2FsbCBvZiB0aGUgYWJvdmUKKy5UUAorYG5vbmUnCitkaXNhYmxlIGFsbCBvZiB0aGUgYWJvdmUKKy5TSCBBVVRIT1IKK1dyaXR0ZW4gYnkgUm9iZXJ0IENvcmJldHQgYW5kIFJpY2hhcmQgU3RhbGxtYW4uCisuU0ggIlJFUE9SVElORyBCVUdTIgorUmVwb3J0IGJ1Z3MgdG8gPGJ1Z1wtYmlzb25AZ251Lm9yZz4uCiAuYnIKLS5ucwotLlRQCi0uQkkgXC1cLWZpbGUtcHJlZml4PSBmaWxlLXByZWZpeAotU3BlY2lmeSBhIHByZWZpeCB0byB1c2UgZm9yIGFsbAotLkkgYmlzb24KLW91dHB1dCBmaWxlIG5hbWVzLiAgVGhlIG5hbWVzIGFyZQotY2hvc2VuIGFzIGlmIHRoZSBpbnB1dCBmaWxlIHdlcmUgbmFtZWQKLVxmSWZpbGUtcHJlZml4XGZQXGZCLmNcZlAuCi0uVFAKLS5CIFwtZAorR05VIEJpc29uIGhvbWUgcGFnZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iaXNvbi8+LgogLmJyCi0ubnMKLVdyaXRlIGFuIGV4dHJhIG91dHB1dCBmaWxlIGNvbnRhaW5pbmcgbWFjcm8gZGVmaW5pdGlvbnMgZm9yIHRoZSB0b2tlbgotdHlwZSBuYW1lcyBkZWZpbmVkIGluIHRoZSBncmFtbWFyIGFuZCB0aGUgc2VtYW50aWMgdmFsdWUgdHlwZQotLkJSIFlZU1RZUEUgLAotYXMgd2VsbCBhcyBhIGZldwotLkIgZXh0ZXJuCi12YXJpYWJsZSBkZWNsYXJhdGlvbnMuCi0uc3AKLUlmIHRoZSBwYXJzZXIgb3V0cHV0IGZpbGUgaXMgbmFtZWQKLS5JQiBuYW1lIC5jCi10aGVuIHRoaXMgZmlsZQotaXMgbmFtZWQKLVxmSW5hbWVcZlBcZkIuaFxmUC4KLS5zcAotVGhpcyBvdXRwdXQgZmlsZSBpcyBlc3NlbnRpYWwgaWYgeW91IHdpc2ggdG8gcHV0IHRoZSBkZWZpbml0aW9uIG9mCi0uQiB5eWxleAotaW4gYSBzZXBhcmF0ZSBzb3VyY2UgZmlsZSwgYmVjYXVzZQotLkIgeXlsZXgKLW5lZWRzIHRvIGJlIGFibGUgdG8gcmVmZXIgdG8gdG9rZW4gdHlwZSBjb2RlcyBhbmQgdGhlIHZhcmlhYmxlCi0uQlIgeXlsdmFsIC4KLS5UUAotLkJJIFwtXC1kZWZpbmVzPSBkZWZpbmVzLWZpbGUKLVRoZSBiZWhhdmlvciBvZgotLkIgXC1cLWRlZmluZXMKLWlzIHRoZSBzYW1lIHRoYW4KLS5CIFwtZAotb3B0aW9uLgotVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0IGl0IGhhcyBhbiBvcHRpb25hbCBhcmd1bWVudCB3aGljaCBpcwotdGhlIG5hbWUgb2YgdGhlIG91dHB1dCBmaWxlbmFtZS4KLS5UUAotLkJJIFwtZworR2VuZXJhbCBoZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4uCisuUFAKIC5icgotLm5zCi1PdXRwdXQgYSBWQ0cgZGVmaW5pdGlvbiBvZiB0aGUgTEFMUigxKSBncmFtbWFyIGF1dG9tYXRvbiBjb21wdXRlZCBieQotQmlzb24uICBJZiB0aGUgZ3JhbW1hciBmaWxlIGlzCi0uQlIgZm9vLnkKLSwgdGhlIFZDRyBvdXRwdXQgZmlsZSB3aWxsIGJlCi0uQlIgZm9vLnZjZyAuCi0uVFAKLS5CSSBcLVwtZ3JhcGg9IGdyYXBoLWZpbGUKLVRoZSBiZWhhdmlvciBvZgotLkJJIFwtXC1ncmFwaAotaXMgdGhlIHNhbWUgdGhhbgotLkJJIFwtZwotb3B0aW9uLiAgVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0IGl0IGhhcyBhbiBvcHRpb25hbCBhcmd1bWVudCB3aGljaAotaXMgdGhlIG5hbWUgb2YgdGhlIG91dHB1dCBncmFwaCBmaWxlbmFtZS4KLS5UUAotLkIgXC1rCitSZXBvcnQgdHJhbnNsYXRpb24gYnVncyB0byA8aHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS8+LgogLmJyCi0ubnMKLS5UUAotLkIgXC1cLXRva2VuLXRhYmxlCi1UaGlzIHN3aXRjaCBjYXVzZXMgdGhlCi0uSUIgbmFtZSAudGFiLmMKLW91dHB1dCB0byBpbmNsdWRlIGEgbGlzdCBvZgotdG9rZW4gbmFtZXMgaW4gb3JkZXIgYnkgdGhlaXIgdG9rZW4gbnVtYmVyczsgdGhpcyBpcyBkZWZpbmVkIGluIHRoZSBhcnJheQotLklSIHl5dG5hbWUgLgotQWxzbyBnZW5lcmF0ZWQKLWFyZSAjZGVmaW5lcyBmb3IKLS5JUiBZWU5UT0tFTlMgLAotLklSIFlZTk5UUyAsCi0uSVIgWVlOUlVMRVMgLAorRm9yIGNvbXBsZXRlIGRvY3VtZW50YXRpb24sIHJ1bjogaW5mbyBiaXNvbi4KKy5TSCBDT1BZUklHSFQKK0NvcHlyaWdodCBcKGNvIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisuYnIKK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKy5TSCAiU0VFIEFMU08iCisuQlIgbGV4ICgxKSwKKy5CUiBmbGV4ICgxKSwKKy5CUiB5YWNjICgxKS4KKy5QUAorVGhlIGZ1bGwgZG9jdW1lbnRhdGlvbiBmb3IKKy5CIGJpc29uCitpcyBtYWludGFpbmVkIGFzIGEgVGV4aW5mbyBtYW51YWwuICBJZiB0aGUKKy5CIGluZm8KIGFuZAotLklSIFlZTlNUQVRFUyAuCi0uVFAKLS5CIFwtbAotLmJyCi0ubnMKLS5UUAotLkIgXC1cLW5vLWxpbmVzCi1Eb24ndCBwdXQgYW55Ci0uQiAjbGluZQotcHJlcHJvY2Vzc29yIGNvbW1hbmRzIGluIHRoZSBwYXJzZXIgZmlsZS4KLU9yZGluYXJpbHkKLS5JIGJpc29uCi1wdXRzIHRoZW0gaW4gdGhlIHBhcnNlciBmaWxlIHNvIHRoYXQgdGhlIEMgY29tcGlsZXIKLWFuZCBkZWJ1Z2dlcnMgd2lsbCBhc3NvY2lhdGUgZXJyb3JzIHdpdGggeW91ciBzb3VyY2UgZmlsZSwgdGhlCi1ncmFtbWFyIGZpbGUuICBUaGlzIG9wdGlvbiBjYXVzZXMgdGhlbSB0byBhc3NvY2lhdGUgZXJyb3JzIHdpdGggdGhlCi1wYXJzZXIgZmlsZSwgdHJlYXRpbmcgaXQgYW4gaW5kZXBlbmRlbnQgc291cmNlIGZpbGUgaW4gaXRzIG93biByaWdodC4KLS5UUAotLkIgXC1uCi0uYnIKLS5ucwotLlRQCi0uQiBcLVwtbm8tcGFyc2VyCi1EbyBub3QgZ2VuZXJhdGUgdGhlIHBhcnNlciBjb2RlIGludG8gdGhlIG91dHB1dDsgZ2VuZXJhdGUgb25seQotZGVjbGFyYXRpb25zLiAgVGhlIGdlbmVyYXRlZAotLklCIG5hbWUgLnRhYi5jCi1maWxlIHdpbGwgaGF2ZSBvbmx5Ci1jb25zdGFudCBkZWNsYXJhdGlvbnMuICBJbiBhZGRpdGlvbiwgYQotLklCIG5hbWUgLmFjdAotZmlsZSBpcwotZ2VuZXJhdGVkIGNvbnRhaW5pbmcgYSBzd2l0Y2ggc3RhdGVtZW50IGJvZHkgY29udGFpbmluZyBhbGwgdGhlCi10cmFuc2xhdGVkIGFjdGlvbnMuCi0uVFAKLS5CSSBcLW8gIiBvdXRmaWxlIgotLmJyCi0ubnMKLS5UUAotLkJJIFwtXC1vdXRwdXQtZmlsZT0gb3V0ZmlsZQotU3BlY2lmeSB0aGUgbmFtZQotLkkgb3V0ZmlsZQotZm9yIHRoZSBwYXJzZXIgZmlsZS4KLS5zcAotVGhlIG90aGVyIG91dHB1dCBmaWxlcycgbmFtZXMgYXJlIGNvbnN0cnVjdGVkIGZyb20KLS5JIG91dGZpbGUKLWFzIGRlc2NyaWJlZCB1bmRlciB0aGUKLS5CIFwtdgotYW5kCi0uQiBcLWQKLXN3aXRjaGVzLgotLlRQCi0uQkkgXC1wICIgcHJlZml4IgotLmJyCi0ubnMKLS5UUAotLkJJIFwtXC1uYW1lLXByZWZpeD0gcHJlZml4Ci1SZW5hbWUgdGhlIGV4dGVybmFsIHN5bWJvbHMgdXNlZCBpbiB0aGUgcGFyc2VyIHNvIHRoYXQgdGhleSBzdGFydCB3aXRoCi0uSSBwcmVmaXgKLWluc3RlYWQgb2YKLS5CUiB5eSAuCi1UaGUgcHJlY2lzZSBsaXN0IG9mIHN5bWJvbHMgcmVuYW1lZCBpcwotLkJSIHl5cGFyc2UgLAotLkJSIHl5bGV4ICwKLS5CUiB5eWVycm9yICwKLS5CUiB5eWx2YWwgLAotLkJSIHl5Y2hhciAsCi1hbmQKLS5CUiB5eWRlYnVnIC4KLS5zcAotRm9yIGV4YW1wbGUsIGlmIHlvdSB1c2UKLS5CUiAiXC1wIGMiICwKLXRoZSBuYW1lcyBiZWNvbWUKLS5CUiBjcGFyc2UgLAotLkJSIGNsZXggLAotYW5kIHNvIG9uLgotLlRQCi0uQiBcLXQKLS5icgotLm5zCi0uVFAKLS5CIFwtXC1kZWJ1ZwotSW4gdGhlIHBhcnNlciBmaWxlLCBkZWZpbmUgdGhlIG1hY3JvCi0uQiBZWURFQlVHCi10byAxIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGRlZmluZWQsCi1zbyB0aGF0IHRoZSBkZWJ1Z2dpbmcgZmFjaWxpdGllcyBhcmUgY29tcGlsZWQuCi0uVFAKLS5CIFwtdgotLmJyCi0ubnMKLS5UUAotLkIgXC1cLXZlcmJvc2UKLVdyaXRlIGFuIGV4dHJhIG91dHB1dCBmaWxlIGNvbnRhaW5pbmcgdmVyYm9zZSBkZXNjcmlwdGlvbnMgb2YgdGhlCi1wYXJzZXIgc3RhdGVzIGFuZCB3aGF0IGlzIGRvbmUgZm9yIGVhY2ggdHlwZSBvZiBsb29rLWFoZWFkIHRva2VuIGluCi10aGF0IHN0YXRlLgotLnNwCi1UaGlzIGZpbGUgYWxzbyBkZXNjcmliZXMgYWxsIHRoZSBjb25mbGljdHMsIGJvdGggdGhvc2UgcmVzb2x2ZWQgYnkKLW9wZXJhdG9yIHByZWNlZGVuY2UgYW5kIHRoZSB1bnJlc29sdmVkIG9uZXMuCi0uc3AKLVRoZSBmaWxlJ3MgbmFtZSBpcyBtYWRlIGJ5IHJlbW92aW5nCi0uQiAudGFiLmMKLW9yCi0uQiAuYwotZnJvbSB0aGUgcGFyc2VyIG91dHB1dCBmaWxlIG5hbWUsIGFuZCBhZGRpbmcKLS5CIC5vdXRwdXQKLWluc3RlYWQuCi0uc3AKLVRoZXJlZm9yZSwgaWYgdGhlIGlucHV0IGZpbGUgaXMKLS5CUiBmb28ueSAsCi10aGVuIHRoZSBwYXJzZXIgZmlsZSBpcyBjYWxsZWQKLS5CIGZvby50YWIuYwotYnkgZGVmYXVsdC4gIEFzIGEgY29uc2VxdWVuY2UsIHRoZSB2ZXJib3NlCi1vdXRwdXQgZmlsZSBpcyBjYWxsZWQKLS5CUiBmb28ub3V0cHV0IC4KLS5UUAotLkIgXC1WCi0uYnIKLS5ucwotLlRQCi0uQiBcLVwtdmVyc2lvbgotUHJpbnQgdGhlIHZlcnNpb24gbnVtYmVyIG9mCi0uSSBiaXNvbgotYW5kIGV4aXQuCi0uVFAKLS5CIFwtaAotLmJyCi0ubnMKLS5UUAotLkIgXC1cLWhlbHAKLVByaW50IGEgc3VtbWFyeSBvZiB0aGUgb3B0aW9ucyB0bwotLkkgYmlzb24KLWFuZCBleGl0LgotLlRQCi0uQiBcLXkKLS5icgotLm5zCi0uVFAKLS5CIFwtXC15YWNjCi0uYnIKLS5ucwotLlRQCi0uQiBcLVwtZml4ZWQtb3V0cHV0LWZpbGVzCi1FcXVpdmFsZW50IHRvCi0uQlIgIlwtbyB5LnRhYi5jIiA7Ci10aGUgcGFyc2VyIG91dHB1dCBmaWxlIGlzIGNhbGxlZAotLkJSIHkudGFiLmMgLAotYW5kIHRoZSBvdGhlciBvdXRwdXRzIGFyZSBjYWxsZWQKLS5CIHkub3V0cHV0Ci1hbmQKLS5CUiB5LnRhYi5oIC4KLVRoZSBwdXJwb3NlIG9mIHRoaXMgc3dpdGNoIGlzIHRvIGltaXRhdGUKLS5JUiB5YWNjICdzCi1vdXRwdXQgZmlsZSBuYW1lIGNvbnZlbnRpb25zLgotVGh1cywgdGhlIGZvbGxvd2luZyBzaGVsbCBzY3JpcHQgY2FuIHN1YnN0aXR1dGUgZm9yCi0uSSB5YWNjCi1hbmQgaXMgb2Z0ZW4gaW5zdGFsbGVkIGFzCi0uSVIgeWFjYyA6Ci0uc3AKLS5SUwotLmZ0IEIKLWJpc29uIFwteSAiJEAiCi0uZnQgUgotLnNwCi0uUkUKLS5TSCBTRUUgQUxTTwotLklSIHlhY2MgKDEpCi0uYnIKLVRoZQotLklSICJCaXNvbiBSZWZlcmVuY2UgTWFudWFsIiAsCi1pbmNsdWRlZCBhcyB0aGUgZmlsZQotLkIgYmlzb24udGV4aW5mbwotaW4gdGhlCi0uSSBiaXNvbgotc291cmNlIGRpc3RyaWJ1dGlvbi4KLS5TSCBESUFHTk9TVElDUwotU2VsZiBleHBsYW5hdG9yeS4KKy5CIGJpc29uCitwcm9ncmFtcyBhcmUgcHJvcGVybHkgaW5zdGFsbGVkIGF0IHlvdXIgc2l0ZSwgdGhlIGNvbW1hbmQKKy5JUAorLkIgaW5mbyBiaXNvbgorLlBQCitzaG91bGQgZ2l2ZSB5b3UgYWNjZXNzIHRvIHRoZSBjb21wbGV0ZSBtYW51YWwuCmRpZmYgLS1naXQgYS9kb2MvYmlzb24uaW5mbyBiL2RvYy9iaXNvbi5pbmZvCmluZGV4IDc5MDc1MTUuLjljZGY0NTMgMTAwNjQ0Ci0tLSBhL2RvYy9iaXNvbi5pbmZvCisrKyBiL2RvYy9iaXNvbi5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9iaXNvbi50ZXhpIGIvZG9jL2Jpc29uLnRleGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUwOGI5YwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9iaXNvbi50ZXhpCkBAIC0wLDAgKzEsMTIzNjQgQEAKK1xpbnB1dCB0ZXhpbmZvIEBjIC0qLXRleGluZm8tKi0KK0Bjb21tZW50ICUqKnN0YXJ0IG9mIGhlYWRlcgorQHNldGZpbGVuYW1lIGJpc29uLmluZm8KK0BpbmNsdWRlIHZlcnNpb24udGV4aQorQHNldHRpdGxlIEJpc29uIEB2YWx1ZXtWRVJTSU9OfQorQHNldGNoYXB0ZXJuZXdwYWdlIG9kZAorCitAZmluYWxvdXQKKworQGMgU01BTEwgQk9PSyB2ZXJzaW9uCitAYyBUaGlzIGVkaXRpb24gaGFzIGJlZW4gZm9ybWF0dGVkIHNvIHRoYXQgeW91IGNhbiBmb3JtYXQgYW5kIHByaW50IGl0IGluCitAYyB0aGUgc21hbGxib29rIGZvcm1hdC4KK0BjIEBzbWFsbGJvb2sKKworQGMgU2V0IGZvbGxvd2luZyBpZiB5b3Ugd2FudCB0byBkb2N1bWVudCAlZGVmYXVsdC1wcmVjIGFuZCAlbm8tZGVmYXVsdC1wcmVjLgorQGMgVGhpcyBmZWF0dXJlIGlzIGV4cGVyaW1lbnRhbCBhbmQgbWF5IGNoYW5nZSBpbiBmdXR1cmUgQmlzb24gdmVyc2lvbnMuCitAYyBAc2V0IGRlZmF1bHRwcmVjCisKK0BpZm5vdGluZm8KK0BzeW5jb2RlaW5kZXggZm4gY3AKK0BzeW5jb2RlaW5kZXggdnIgY3AKK0BzeW5jb2RlaW5kZXggdHAgY3AKK0BlbmQgaWZub3RpbmZvCitAaWZpbmZvCitAc3luaW5kZXggZm4gY3AKK0BzeW5pbmRleCB2ciBjcAorQHN5bmluZGV4IHRwIGNwCitAZW5kIGlmaW5mbworQGNvbW1lbnQgJSoqZW5kIG9mIGhlYWRlcgorCitAY29weWluZworCitUaGlzIG1hbnVhbCAoQHZhbHVle1VQREFURUR9KSBpcyBmb3IgR05VIEJpc29uICh2ZXJzaW9uCitAdmFsdWV7VkVSU0lPTn0pLCB0aGUgR05VIHBhcnNlciBnZW5lcmF0b3IuCisKK0NvcHlyaWdodCBAY29weXJpZ2h0e30gMTk4OC0xOTkzLCAxOTk1LCAxOTk4LTIwMTIgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLgorCitAcXVvdGF0aW9uCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLAorVmVyc2lvbiAxLjMgb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uOyB3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCB0aGUgRnJvbnQtQ292ZXIgdGV4dHMKK2JlaW5nIGBgQSBHTlUgTWFudWFsLCcnIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGFzIGluCisoYSkgYmVsb3cuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLicnCisKKyhhKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOiBgYFlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGNvcHkgYW5kCittb2RpZnkgdGhpcyBHTlUgbWFudWFsLiAgQnV5aW5nIGNvcGllcyBmcm9tIHRoZSBGU0YKK3N1cHBvcnRzIGl0IGluIGRldmVsb3BpbmcgR05VIGFuZCBwcm9tb3Rpbmcgc29mdHdhcmUKK2ZyZWVkb20uJycKK0BlbmQgcXVvdGF0aW9uCitAZW5kIGNvcHlpbmcKKworQGRpcmNhdGVnb3J5IFNvZnR3YXJlIGRldmVsb3BtZW50CitAZGlyZW50cnkKKyogYmlzb246IChiaXNvbikuICAgICAgIEdOVSBwYXJzZXIgZ2VuZXJhdG9yIChZYWNjIHJlcGxhY2VtZW50KS4KK0BlbmQgZGlyZW50cnkKKworQHRpdGxlcGFnZQorQHRpdGxlIEJpc29uCitAc3VidGl0bGUgVGhlIFlhY2MtY29tcGF0aWJsZSBQYXJzZXIgR2VuZXJhdG9yCitAc3VidGl0bGUgQHZhbHVle1VQREFURUR9LCBCaXNvbiBWZXJzaW9uIEB2YWx1ZXtWRVJTSU9OfQorCitAYXV0aG9yIGJ5IENoYXJsZXMgRG9ubmVsbHkgYW5kIFJpY2hhcmQgU3RhbGxtYW4KKworQHBhZ2UKK0B2c2tpcCAwcHQgcGx1cyAxZmlsbGwKK0BpbnNlcnRjb3B5aW5nCitAc3AgMgorUHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQCoKKzUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IgQCoKK0Jvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQSBAKgorUHJpbnRlZCBjb3BpZXMgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uQCoKK0lTQk4gMS04ODIxMTQtNDQtMgorQHNwIDIKK0NvdmVyIGFydCBieSBFdGllbm5lIFN1dmFzYS4KK0BlbmQgdGl0bGVwYWdlCisKK0Bjb250ZW50cworCitAaWZub3R0ZXgKK0Bub2RlIFRvcAorQHRvcCBCaXNvbgorQGluc2VydGNvcHlpbmcKK0BlbmQgaWZub3R0ZXgKKworQG1lbnUKKyogSW50cm9kdWN0aW9uOjoKKyogQ29uZGl0aW9uczo6CisqIENvcHlpbmc6OiAgICAgICAgICAgICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugc2F5cworICAgICAgICAgICAgICAgICAgICAgICAgICBob3cgeW91IGNhbiBjb3B5IGFuZCBzaGFyZSBCaXNvbi4KKworVHV0b3JpYWwgc2VjdGlvbnM6CisqIENvbmNlcHRzOjogICAgICAgICAgICBCYXNpYyBjb25jZXB0cyBmb3IgdW5kZXJzdGFuZGluZyBCaXNvbi4KKyogRXhhbXBsZXM6OiAgICAgICAgICAgIFRocmVlIHNpbXBsZSBleHBsYWluZWQgZXhhbXBsZXMgb2YgdXNpbmcgQmlzb24uCisKK1JlZmVyZW5jZSBzZWN0aW9uczoKKyogR3JhbW1hciBGaWxlOjogICAgICAgIFdyaXRpbmcgQmlzb24gZGVjbGFyYXRpb25zIGFuZCBydWxlcy4KKyogSW50ZXJmYWNlOjogICAgICAgICAgIEMtbGFuZ3VhZ2UgaW50ZXJmYWNlIHRvIHRoZSBwYXJzZXIgZnVuY3Rpb24gQGNvZGV7eXlwYXJzZX0uCisqIEFsZ29yaXRobTo6ICAgICAgICAgICBIb3cgdGhlIEJpc29uIHBhcnNlciB3b3JrcyBhdCBydW4tdGltZS4KKyogRXJyb3IgUmVjb3Zlcnk6OiAgICAgIFdyaXRpbmcgcnVsZXMgZm9yIGVycm9yIHJlY292ZXJ5LgorKiBDb250ZXh0IERlcGVuZGVuY3k6OiAgV2hhdCB0byBkbyBpZiB5b3VyIGxhbmd1YWdlIHN5bnRheCBpcyB0b28KKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc3kgZm9yIEJpc29uIHRvIGhhbmRsZSBzdHJhaWdodGZvcndhcmRseS4KKyogRGVidWdnaW5nOjogICAgICAgICAgIFVuZGVyc3RhbmRpbmcgb3IgZGVidWdnaW5nIEJpc29uIHBhcnNlcnMuCisqIEludm9jYXRpb246OiAgICAgICAgICBIb3cgdG8gcnVuIEJpc29uICh0byBwcm9kdWNlIHRoZSBwYXJzZXIgaW1wbGVtZW50YXRpb24pLgorKiBPdGhlciBMYW5ndWFnZXM6OiAgICAgQ3JlYXRpbmcgQysrIGFuZCBKYXZhIHBhcnNlcnMuCisqIEZBUTo6ICAgICAgICAgICAgICAgICBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucworKiBUYWJsZSBvZiBTeW1ib2xzOjogICAgQWxsIHRoZSBrZXl3b3JkcyBvZiB0aGUgQmlzb24gbGFuZ3VhZ2UgYXJlIGV4cGxhaW5lZC4KKyogR2xvc3Nhcnk6OiAgICAgICAgICAgIEJhc2ljIGNvbmNlcHRzIGFyZSBleHBsYWluZWQuCisqIENvcHlpbmcgVGhpcyBNYW51YWw6OiBMaWNlbnNlIGZvciBjb3B5aW5nIHRoaXMgbWFudWFsLgorKiBCaWJsaW9ncmFwaHk6OiAgICAgICAgUHVibGljYXRpb25zIGNpdGVkIGluIHRoaXMgbWFudWFsLgorKiBJbmRleCBvZiBUZXJtczo6ICAgICAgQ3Jvc3MtcmVmZXJlbmNlcyB0byB0aGUgdGV4dC4KKworQGRldGFpbG1lbnUKKyAtLS0gVGhlIERldGFpbGVkIE5vZGUgTGlzdGluZyAtLS0KKworVGhlIENvbmNlcHRzIG9mIEJpc29uCisKKyogTGFuZ3VhZ2UgYW5kIEdyYW1tYXI6OiBMYW5ndWFnZXMgYW5kIGNvbnRleHQtZnJlZSBncmFtbWFycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIG1hdGhlbWF0aWNhbCBpZGVhcy4KKyogR3JhbW1hciBpbiBCaXNvbjo6ICAgICBIb3cgd2UgcmVwcmVzZW50IGdyYW1tYXJzIGZvciBCaXNvbidzIHNha2UuCisqIFNlbWFudGljIFZhbHVlczo6ICAgICAgRWFjaCB0b2tlbiBvciBzeW50YWN0aWMgZ3JvdXBpbmcgY2FuIGhhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgc2VtYW50aWMgdmFsdWUgKHRoZSB2YWx1ZSBvZiBhbiBpbnRlZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG5hbWUgb2YgYW4gaWRlbnRpZmllciwgZXRjLikuCisqIFNlbWFudGljIEFjdGlvbnM6OiAgICAgRWFjaCBydWxlIGNhbiBoYXZlIGFuIGFjdGlvbiBjb250YWluaW5nIEMgY29kZS4KKyogR0xSIFBhcnNlcnM6OiAgICAgICAgICBXcml0aW5nIHBhcnNlcnMgZm9yIGdlbmVyYWwgY29udGV4dC1mcmVlIGxhbmd1YWdlcy4KKyogTG9jYXRpb25zOjogICAgICAgICAgICBPdmVydmlldyBvZiBsb2NhdGlvbiB0cmFja2luZy4KKyogQmlzb24gUGFyc2VyOjogICAgICAgICBXaGF0IGFyZSBCaXNvbidzIGlucHV0IGFuZCBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBob3cgaXMgdGhlIG91dHB1dCB1c2VkPworKiBTdGFnZXM6OiAgICAgICAgICAgICAgIFN0YWdlcyBpbiB3cml0aW5nIGFuZCBydW5uaW5nIEJpc29uIGdyYW1tYXJzLgorKiBHcmFtbWFyIExheW91dDo6ICAgICAgIE92ZXJhbGwgc3RydWN0dXJlIG9mIGEgQmlzb24gZ3JhbW1hciBmaWxlLgorCitXcml0aW5nIEdMUiBQYXJzZXJzCisKKyogU2ltcGxlIEdMUiBQYXJzZXJzOjogICAgIFVzaW5nIEdMUiBwYXJzZXJzIG9uIHVuYW1iaWd1b3VzIGdyYW1tYXJzLgorKiBNZXJnaW5nIEdMUiBQYXJzZXM6OiAgICAgVXNpbmcgR0xSIHBhcnNlcnMgdG8gcmVzb2x2ZSBhbWJpZ3VpdGllcy4KKyogR0xSIFNlbWFudGljIEFjdGlvbnM6OiAgIERlZmVycmVkIHNlbWFudGljIGFjdGlvbnMgaGF2ZSBzcGVjaWFsIGNvbmNlcm5zLgorKiBDb21waWxlciBSZXF1aXJlbWVudHM6OiAgR0xSIHBhcnNlcnMgcmVxdWlyZSBhIG1vZGVybiBDIGNvbXBpbGVyLgorCitFeGFtcGxlcworCisqIFJQTiBDYWxjOjogICAgICAgICAgICAgICBSZXZlcnNlIHBvbGlzaCBub3RhdGlvbiBjYWxjdWxhdG9yOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIGZpcnN0IGV4YW1wbGUgd2l0aCBubyBvcGVyYXRvciBwcmVjZWRlbmNlLgorKiBJbmZpeCBDYWxjOjogICAgICAgICAgICAgSW5maXggKGFsZ2VicmFpYykgbm90YXRpb24gY2FsY3VsYXRvci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3IgcHJlY2VkZW5jZSBpcyBpbnRyb2R1Y2VkLgorKiBTaW1wbGUgRXJyb3IgUmVjb3Zlcnk6OiAgQ29udGludWluZyBhZnRlciBzeW50YXggZXJyb3JzLgorKiBMb2NhdGlvbiBUcmFja2luZyBDYWxjOjogRGVtb25zdHJhdGluZyB0aGUgdXNlIG9mIEBAQHZhcntufSBhbmQgQEAkLgorKiBNdWx0aS1mdW5jdGlvbiBDYWxjOjogICAgQ2FsY3VsYXRvciB3aXRoIG1lbW9yeSBhbmQgdHJpZyBmdW5jdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IHVzZXMgbXVsdGlwbGUgZGF0YS10eXBlcyBmb3Igc2VtYW50aWMgdmFsdWVzLgorKiBFeGVyY2lzZXM6OiAgICAgICAgICAgICAgSWRlYXMgZm9yIGltcHJvdmluZyB0aGUgbXVsdGktZnVuY3Rpb24gY2FsY3VsYXRvci4KKworUmV2ZXJzZSBQb2xpc2ggTm90YXRpb24gQ2FsY3VsYXRvcgorCisqIFJwY2FsYyBEZWNsYXJhdGlvbnM6OiAgICBQcm9sb2d1ZSAoZGVjbGFyYXRpb25zKSBmb3IgcnBjYWxjLgorKiBScGNhbGMgUnVsZXM6OiAgICAgICAgICAgR3JhbW1hciBSdWxlcyBmb3IgcnBjYWxjLCB3aXRoIGV4cGxhbmF0aW9uLgorKiBScGNhbGMgTGV4ZXI6OiAgICAgICAgICAgVGhlIGxleGljYWwgYW5hbHl6ZXIuCisqIFJwY2FsYyBNYWluOjogICAgICAgICAgICBUaGUgY29udHJvbGxpbmcgZnVuY3Rpb24uCisqIFJwY2FsYyBFcnJvcjo6ICAgICAgICAgICBUaGUgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLgorKiBScGNhbGMgR2VuZXJhdGU6OiAgICAgICAgUnVubmluZyBCaXNvbiBvbiB0aGUgZ3JhbW1hciBmaWxlLgorKiBScGNhbGMgQ29tcGlsZTo6ICAgICAgICAgUnVuIHRoZSBDIGNvbXBpbGVyIG9uIHRoZSBvdXRwdXQgY29kZS4KKworR3JhbW1hciBSdWxlcyBmb3IgQGNvZGV7cnBjYWxjfQorCisqIFJwY2FsYyBJbnB1dDo6CisqIFJwY2FsYyBMaW5lOjoKKyogUnBjYWxjIEV4cHI6OgorCitMb2NhdGlvbiBUcmFja2luZyBDYWxjdWxhdG9yOiBAY29kZXtsdGNhbGN9CisKKyogTHRjYWxjIERlY2xhcmF0aW9uczo6ICAgIEJpc29uIGFuZCBDIGRlY2xhcmF0aW9ucyBmb3IgbHRjYWxjLgorKiBMdGNhbGMgUnVsZXM6OiAgICAgICAgICAgR3JhbW1hciBydWxlcyBmb3IgbHRjYWxjLCB3aXRoIGV4cGxhbmF0aW9ucy4KKyogTHRjYWxjIExleGVyOjogICAgICAgICAgIFRoZSBsZXhpY2FsIGFuYWx5emVyLgorCitNdWx0aS1GdW5jdGlvbiBDYWxjdWxhdG9yOiBAY29kZXttZmNhbGN9CisKKyogTWZjYWxjIERlY2xhcmF0aW9uczo6ICAgIEJpc29uIGRlY2xhcmF0aW9ucyBmb3IgbXVsdGktZnVuY3Rpb24gY2FsY3VsYXRvci4KKyogTWZjYWxjIFJ1bGVzOjogICAgICAgICAgIEdyYW1tYXIgcnVsZXMgZm9yIHRoZSBjYWxjdWxhdG9yLgorKiBNZmNhbGMgU3ltYm9sIFRhYmxlOjogICAgU3ltYm9sIHRhYmxlIG1hbmFnZW1lbnQgc3Vicm91dGluZXMuCisKK0Jpc29uIEdyYW1tYXIgRmlsZXMKKworKiBHcmFtbWFyIE91dGxpbmU6OiAgICBPdmVyYWxsIGxheW91dCBvZiB0aGUgZ3JhbW1hciBmaWxlLgorKiBTeW1ib2xzOjogICAgICAgICAgICBUZXJtaW5hbCBhbmQgbm9udGVybWluYWwgc3ltYm9scy4KKyogUnVsZXM6OiAgICAgICAgICAgICAgSG93IHRvIHdyaXRlIGdyYW1tYXIgcnVsZXMuCisqIFJlY3Vyc2lvbjo6ICAgICAgICAgIFdyaXRpbmcgcmVjdXJzaXZlIHJ1bGVzLgorKiBTZW1hbnRpY3M6OiAgICAgICAgICBTZW1hbnRpYyB2YWx1ZXMgYW5kIGFjdGlvbnMuCisqIFRyYWNraW5nIExvY2F0aW9uczo6IExvY2F0aW9ucyBhbmQgYWN0aW9ucy4KKyogTmFtZWQgUmVmZXJlbmNlczo6ICAgVXNpbmcgbmFtZWQgcmVmZXJlbmNlcyBpbiBhY3Rpb25zLgorKiBEZWNsYXJhdGlvbnM6OiAgICAgICBBbGwga2luZHMgb2YgQmlzb24gZGVjbGFyYXRpb25zIGFyZSBkZXNjcmliZWQgaGVyZS4KKyogTXVsdGlwbGUgUGFyc2Vyczo6ICAgUHV0dGluZyBtb3JlIHRoYW4gb25lIEJpc29uIHBhcnNlciBpbiBvbmUgcHJvZ3JhbS4KKworT3V0bGluZSBvZiBhIEJpc29uIEdyYW1tYXIKKworKiBQcm9sb2d1ZTo6ICAgICAgICAgICAgICBTeW50YXggYW5kIHVzYWdlIG9mIHRoZSBwcm9sb2d1ZS4KKyogUHJvbG9ndWUgQWx0ZXJuYXRpdmVzOjogU3ludGF4IGFuZCB1c2FnZSBvZiBhbHRlcm5hdGl2ZXMgdG8gdGhlIHByb2xvZ3VlLgorKiBCaXNvbiBEZWNsYXJhdGlvbnM6OiAgICBTeW50YXggYW5kIHVzYWdlIG9mIHRoZSBCaXNvbiBkZWNsYXJhdGlvbnMgc2VjdGlvbi4KKyogR3JhbW1hciBSdWxlczo6ICAgICAgICAgU3ludGF4IGFuZCB1c2FnZSBvZiB0aGUgZ3JhbW1hciBydWxlcyBzZWN0aW9uLgorKiBFcGlsb2d1ZTo6ICAgICAgICAgICAgICBTeW50YXggYW5kIHVzYWdlIG9mIHRoZSBlcGlsb2d1ZS4KKworRGVmaW5pbmcgTGFuZ3VhZ2UgU2VtYW50aWNzCisKKyogVmFsdWUgVHlwZTo6ICAgICAgICBTcGVjaWZ5aW5nIG9uZSBkYXRhIHR5cGUgZm9yIGFsbCBzZW1hbnRpYyB2YWx1ZXMuCisqIE11bHRpcGxlIFR5cGVzOjogICAgU3BlY2lmeWluZyBzZXZlcmFsIGFsdGVybmF0aXZlIGRhdGEgdHlwZXMuCisqIEFjdGlvbnM6OiAgICAgICAgICAgQW4gYWN0aW9uIGlzIHRoZSBzZW1hbnRpYyBkZWZpbml0aW9uIG9mIGEgZ3JhbW1hciBydWxlLgorKiBBY3Rpb24gVHlwZXM6OiAgICAgIFNwZWNpZnlpbmcgZGF0YSB0eXBlcyBmb3IgYWN0aW9ucyB0byBvcGVyYXRlIG9uLgorKiBNaWQtUnVsZSBBY3Rpb25zOjogIE1vc3QgYWN0aW9ucyBnbyBhdCB0aGUgZW5kIG9mIGEgcnVsZS4KKyAgICAgICAgICAgICAgICAgICAgICBUaGlzIHNheXMgd2hlbiwgd2h5IGFuZCBob3cgdG8gdXNlIHRoZSBleGNlcHRpb25hbAorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uIGluIHRoZSBtaWRkbGUgb2YgYSBydWxlLgorCitBY3Rpb25zIGluIE1pZC1SdWxlCisKKyogVXNpbmcgTWlkLVJ1bGUgQWN0aW9uczo6ICAgICAgIFB1dHRpbmcgYW4gYWN0aW9uIGluIHRoZSBtaWRkbGUgb2YgYSBydWxlLgorKiBNaWQtUnVsZSBBY3Rpb24gVHJhbnNsYXRpb246OiAgSG93IG1pZC1ydWxlIGFjdGlvbnMgYXJlIGFjdHVhbGx5IHByb2Nlc3NlZC4KKyogTWlkLVJ1bGUgQ29uZmxpY3RzOjogICAgICAgICAgIE1pZC1ydWxlIGFjdGlvbnMgY2FuIGNhdXNlIGNvbmZsaWN0cy4KKworVHJhY2tpbmcgTG9jYXRpb25zCisKKyogTG9jYXRpb24gVHlwZTo6ICAgICAgICAgICAgICAgU3BlY2lmeWluZyBhIGRhdGEgdHlwZSBmb3IgbG9jYXRpb25zLgorKiBBY3Rpb25zIGFuZCBMb2NhdGlvbnM6OiAgICAgICBVc2luZyBsb2NhdGlvbnMgaW4gYWN0aW9ucy4KKyogTG9jYXRpb24gRGVmYXVsdCBBY3Rpb246OiAgICAgRGVmaW5pbmcgYSBnZW5lcmFsIHdheSB0byBjb21wdXRlIGxvY2F0aW9ucy4KKworQmlzb24gRGVjbGFyYXRpb25zCisKKyogUmVxdWlyZSBEZWNsOjogICAgICBSZXF1aXJpbmcgYSBCaXNvbiB2ZXJzaW9uLgorKiBUb2tlbiBEZWNsOjogICAgICAgIERlY2xhcmluZyB0ZXJtaW5hbCBzeW1ib2xzLgorKiBQcmVjZWRlbmNlIERlY2w6OiAgIERlY2xhcmluZyB0ZXJtaW5hbHMgd2l0aCBwcmVjZWRlbmNlIGFuZCBhc3NvY2lhdGl2aXR5LgorKiBVbmlvbiBEZWNsOjogICAgICAgIERlY2xhcmluZyB0aGUgc2V0IG9mIGFsbCBzZW1hbnRpYyB2YWx1ZSB0eXBlcy4KKyogVHlwZSBEZWNsOjogICAgICAgICBEZWNsYXJpbmcgdGhlIGNob2ljZSBvZiB0eXBlIGZvciBhIG5vbnRlcm1pbmFsIHN5bWJvbC4KKyogSW5pdGlhbCBBY3Rpb24gRGVjbDo6ICBDb2RlIHJ1biBiZWZvcmUgcGFyc2luZyBzdGFydHMuCisqIERlc3RydWN0b3IgRGVjbDo6ICAgRGVjbGFyaW5nIGhvdyBzeW1ib2xzIGFyZSBmcmVlZC4KKyogUHJpbnRlciBEZWNsOjogICAgICBEZWNsYXJpbmcgaG93IHN5bWJvbCB2YWx1ZXMgYXJlIGRpc3BsYXllZC4KKyogRXhwZWN0IERlY2w6OiAgICAgICBTdXBwcmVzc2luZyB3YXJuaW5ncyBhYm91dCBwYXJzaW5nIGNvbmZsaWN0cy4KKyogU3RhcnQgRGVjbDo6ICAgICAgICBTcGVjaWZ5aW5nIHRoZSBzdGFydCBzeW1ib2wuCisqIFB1cmUgRGVjbDo6ICAgICAgICAgUmVxdWVzdGluZyBhIHJlZW50cmFudCBwYXJzZXIuCisqIFB1c2ggRGVjbDo6ICAgICAgICAgUmVxdWVzdGluZyBhIHB1c2ggcGFyc2VyLgorKiBEZWNsIFN1bW1hcnk6OiAgICAgIFRhYmxlIG9mIGFsbCBCaXNvbiBkZWNsYXJhdGlvbnMuCisqICVkZWZpbmUgU3VtbWFyeTo6ICAgRGVmaW5pbmcgdmFyaWFibGVzIHRvIGFkanVzdCBCaXNvbidzIGJlaGF2aW9yLgorKiAlY29kZSBTdW1tYXJ5OjogICAgIEluc2VydGluZyBjb2RlIGludG8gdGhlIHBhcnNlciBzb3VyY2UuCisKK1BhcnNlciBDLUxhbmd1YWdlIEludGVyZmFjZQorCisqIFBhcnNlciBGdW5jdGlvbjo6ICAgICAgICAgSG93IHRvIGNhbGwgQGNvZGV7eXlwYXJzZX0gYW5kIHdoYXQgaXQgcmV0dXJucy4KKyogUHVzaCBQYXJzZXIgRnVuY3Rpb246OiAgICBIb3cgdG8gY2FsbCBAY29kZXt5eXB1c2hfcGFyc2V9IGFuZCB3aGF0IGl0IHJldHVybnMuCisqIFB1bGwgUGFyc2VyIEZ1bmN0aW9uOjogICAgSG93IHRvIGNhbGwgQGNvZGV7eXlwdWxsX3BhcnNlfSBhbmQgd2hhdCBpdCByZXR1cm5zLgorKiBQYXJzZXIgQ3JlYXRlIEZ1bmN0aW9uOjogIEhvdyB0byBjYWxsIEBjb2Rle3l5cHN0YXRlX25ld30gYW5kIHdoYXQgaXQgcmV0dXJucy4KKyogUGFyc2VyIERlbGV0ZSBGdW5jdGlvbjo6ICBIb3cgdG8gY2FsbCBAY29kZXt5eXBzdGF0ZV9kZWxldGV9IGFuZCB3aGF0IGl0IHJldHVybnMuCisqIExleGljYWw6OiAgICAgICAgICAgICAgICAgWW91IG11c3Qgc3VwcGx5IGEgZnVuY3Rpb24gQGNvZGV7eXlsZXh9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCByZWFkcyB0b2tlbnMuCisqIEVycm9yIFJlcG9ydGluZzo6ICAgICAgICAgWW91IG11c3Qgc3VwcGx5IGEgZnVuY3Rpb24gQGNvZGV7eXllcnJvcn0uCisqIEFjdGlvbiBGZWF0dXJlczo6ICAgICAgICAgU3BlY2lhbCBmZWF0dXJlcyBmb3IgdXNlIGluIGFjdGlvbnMuCisqIEludGVybmF0aW9uYWxpemF0aW9uOjogICAgSG93IHRvIGxldCB0aGUgcGFyc2VyIHNwZWFrIGluIHRoZSB1c2VyJ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZSBsYW5ndWFnZS4KKworVGhlIExleGljYWwgQW5hbHl6ZXIgRnVuY3Rpb24gQGNvZGV7eXlsZXh9CisKKyogQ2FsbGluZyBDb252ZW50aW9uOjogIEhvdyBAY29kZXt5eXBhcnNlfSBjYWxscyBAY29kZXt5eWxleH0uCisqIFRva2VuIFZhbHVlczo6ICAgICAgICBIb3cgQGNvZGV7eXlsZXh9IG11c3QgcmV0dXJuIHRoZSBzZW1hbnRpYyB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgdG9rZW4gaXQgaGFzIHJlYWQuCisqIFRva2VuIExvY2F0aW9uczo6ICAgICBIb3cgQGNvZGV7eXlsZXh9IG11c3QgcmV0dXJuIHRoZSB0ZXh0IGxvY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIG51bWJlciwgZXRjLikgb2YgdGhlIHRva2VuLCBpZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9ucyB3YW50IHRoYXQuCisqIFB1cmUgQ2FsbGluZzo6ICAgICAgICBIb3cgdGhlIGNhbGxpbmcgY29udmVudGlvbiBkaWZmZXJzIGluIGEgcHVyZSBwYXJzZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKEBweHJlZntQdXJlIERlY2wsICxBIFB1cmUgKFJlZW50cmFudCkgUGFyc2VyfSkuCisKK1RoZSBCaXNvbiBQYXJzZXIgQWxnb3JpdGhtCisKKyogTG9va2FoZWFkOjogICAgICAgICBQYXJzZXIgbG9va3Mgb25lIHRva2VuIGFoZWFkIHdoZW4gZGVjaWRpbmcgd2hhdCB0byBkby4KKyogU2hpZnQvUmVkdWNlOjogICAgICBDb25mbGljdHM6IHdoZW4gZWl0aGVyIHNoaWZ0aW5nIG9yIHJlZHVjdGlvbiBpcyB2YWxpZC4KKyogUHJlY2VkZW5jZTo6ICAgICAgICBPcGVyYXRvciBwcmVjZWRlbmNlIHdvcmtzIGJ5IHJlc29sdmluZyBjb25mbGljdHMuCisqIENvbnRleHR1YWwgUHJlY2VkZW5jZTo6ICBXaGVuIGFuIG9wZXJhdG9yJ3MgcHJlY2VkZW5jZSBkZXBlbmRzIG9uIGNvbnRleHQuCisqIFBhcnNlciBTdGF0ZXM6OiAgICAgVGhlIHBhcnNlciBpcyBhIGZpbml0ZS1zdGF0ZS1tYWNoaW5lIHdpdGggc3RhY2suCisqIFJlZHVjZS9SZWR1Y2U6OiAgICAgV2hlbiB0d28gcnVsZXMgYXJlIGFwcGxpY2FibGUgaW4gdGhlIHNhbWUgc2l0dWF0aW9uLgorKiBNeXN0ZXJpb3VzIENvbmZsaWN0czo6IENvbmZsaWN0cyB0aGF0IGxvb2sgdW5qdXN0aWZpZWQuCisqIFR1bmluZyBMUjo6ICAgICAgICAgSG93IHRvIHR1bmUgZnVuZGFtZW50YWwgYXNwZWN0cyBvZiBMUi1iYXNlZCBwYXJzaW5nLgorKiBHZW5lcmFsaXplZCBMUiBQYXJzaW5nOjogIFBhcnNpbmcgYXJiaXRyYXJ5IGNvbnRleHQtZnJlZSBncmFtbWFycy4KKyogTWVtb3J5IE1hbmFnZW1lbnQ6OiBXaGF0IGhhcHBlbnMgd2hlbiBtZW1vcnkgaXMgZXhoYXVzdGVkLiAgSG93IHRvIGF2b2lkIGl0LgorCitPcGVyYXRvciBQcmVjZWRlbmNlCisKKyogV2h5IFByZWNlZGVuY2U6OiAgICBBbiBleGFtcGxlIHNob3dpbmcgd2h5IHByZWNlZGVuY2UgaXMgbmVlZGVkLgorKiBVc2luZyBQcmVjZWRlbmNlOjogIEhvdyB0byBzcGVjaWZ5IHByZWNlZGVuY2UgaW4gQmlzb24gZ3JhbW1hcnMuCisqIFByZWNlZGVuY2UgRXhhbXBsZXM6OiAgSG93IHRoZXNlIGZlYXR1cmVzIGFyZSB1c2VkIGluIHRoZSBwcmV2aW91cyBleGFtcGxlLgorKiBIb3cgUHJlY2VkZW5jZTo6ICAgIEhvdyB0aGV5IHdvcmsuCisqIE5vbiBPcGVyYXRvcnM6OiAgICAgVXNpbmcgcHJlY2VkZW5jZSBmb3IgZ2VuZXJhbCBjb25mbGljdHMuCisKK1R1bmluZyBMUgorCisqIExSIFRhYmxlIENvbnN0cnVjdGlvbjo6IENob29zZSBhIGRpZmZlcmVudCBjb25zdHJ1Y3Rpb24gYWxnb3JpdGhtLgorKiBEZWZhdWx0IFJlZHVjdGlvbnM6OiAgICBEaXNhYmxlIGRlZmF1bHQgcmVkdWN0aW9ucy4KKyogTEFDOjogICAgICAgICAgICAgICAgICAgQ29ycmVjdCBsb29rYWhlYWQgc2V0cyBpbiB0aGUgcGFyc2VyIHN0YXRlcy4KKyogVW5yZWFjaGFibGUgU3RhdGVzOjogICAgS2VlcCB1bnJlYWNoYWJsZSBwYXJzZXIgc3RhdGVzIGZvciBkZWJ1Z2dpbmcuCisKK0hhbmRsaW5nIENvbnRleHQgRGVwZW5kZW5jaWVzCisKKyogU2VtYW50aWMgVG9rZW5zOjogICBUb2tlbiBwYXJzaW5nIGNhbiBkZXBlbmQgb24gdGhlIHNlbWFudGljIGNvbnRleHQuCisqIExleGljYWwgVGllLWluczo6ICAgVG9rZW4gcGFyc2luZyBjYW4gZGVwZW5kIG9uIHRoZSBzeW50YWN0aWMgY29udGV4dC4KKyogVGllLWluIFJlY292ZXJ5OjogICBMZXhpY2FsIHRpZS1pbnMgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGhvdworICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgcmVjb3ZlcnkgcnVsZXMgbXVzdCBiZSB3cml0dGVuLgorCitEZWJ1Z2dpbmcgWW91ciBQYXJzZXIKKworKiBVbmRlcnN0YW5kaW5nOjogICAgIFVuZGVyc3RhbmRpbmcgdGhlIHN0cnVjdHVyZSBvZiB5b3VyIHBhcnNlci4KKyogR3JhcGh2aXo6OiAgICAgICAgICBHZXR0aW5nIGEgdmlzdWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXJzZXIuCisqIFhtbDo6ICAgICAgICAgICAgICAgR2V0dGluZyBhIG1hcmt1cCByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGFyc2VyLgorKiBUcmFjaW5nOjogICAgICAgICAgIFRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBvZiB5b3VyIHBhcnNlci4KKworVHJhY2luZyBZb3VyIFBhcnNlcgorCisqIEVuYWJsaW5nIFRyYWNlczo6ICAgICAgICAgICAgIEFjdGl2YXRpbmcgcnVuLXRpbWUgdHJhY2Ugc3VwcG9ydAorKiBNZmNhbGMgVHJhY2VzOjogICAgICAgICAgICAgICBFeHRlbmRpbmcgQGNvZGV7bWZjYWxjfSB0byBzdXBwb3J0IHRyYWNlcworKiBUaGUgWVlQUklOVCBNYWNybzo6ICAgICAgICAgICBPYnNvbGV0ZSBpbnRlcmZhY2UgZm9yIHNlbWFudGljIHZhbHVlIHJlcG9ydHMKKworSW52b2tpbmcgQmlzb24KKworKiBCaXNvbiBPcHRpb25zOjogICAgIEFsbCB0aGUgb3B0aW9ucyBkZXNjcmliZWQgaW4gZGV0YWlsLAorICAgICAgICAgICAgICAgICAgICAgICAgaW4gYWxwaGFiZXRpY2FsIG9yZGVyIGJ5IHNob3J0IG9wdGlvbnMuCisqIE9wdGlvbiBDcm9zcyBLZXk6OiAgQWxwaGFiZXRpY2FsIGxpc3Qgb2YgbG9uZyBvcHRpb25zLgorKiBZYWNjIExpYnJhcnk6OiAgICAgIFlhY2MtY29tcGF0aWJsZSBAY29kZXt5eWxleH0gYW5kIEBjb2Rle21haW59LgorCitQYXJzZXJzIFdyaXR0ZW4gSW4gT3RoZXIgTGFuZ3VhZ2VzCisKKyogQysrIFBhcnNlcnM6OiAgICAgICAgICAgICAgICAgVGhlIGludGVyZmFjZSB0byBnZW5lcmF0ZSBDKysgcGFyc2VyIGNsYXNzZXMKKyogSmF2YSBQYXJzZXJzOjogICAgICAgICAgICAgICAgVGhlIGludGVyZmFjZSB0byBnZW5lcmF0ZSBKYXZhIHBhcnNlciBjbGFzc2VzCisKK0MrKyBQYXJzZXJzCisKKyogQysrIEJpc29uIEludGVyZmFjZTo6ICAgICAgICAgQXNraW5nIGZvciBDKysgcGFyc2VyIGdlbmVyYXRpb24KKyogQysrIFNlbWFudGljIFZhbHVlczo6ICAgICAgICAgJXVuaW9uIHZzLiBDKysKKyogQysrIExvY2F0aW9uIFZhbHVlczo6ICAgICAgICAgVGhlIHBvc2l0aW9uIGFuZCBsb2NhdGlvbiBjbGFzc2VzCisqIEMrKyBQYXJzZXIgSW50ZXJmYWNlOjogICAgICAgIEluc3RhbnRpYXRpbmcgYW5kIHJ1bm5pbmcgdGhlIHBhcnNlcgorKiBDKysgU2Nhbm5lciBJbnRlcmZhY2U6OiAgICAgICBFeGNoYW5nZXMgYmV0d2VlbiB5eWxleCBhbmQgcGFyc2UKKyogQSBDb21wbGV0ZSBDKysgRXhhbXBsZTo6ICAgICAgRGVtb25zdHJhdGluZyB0aGVpciB1c2UKKworQysrIExvY2F0aW9uIFZhbHVlcworCisqIEMrKyBwb3NpdGlvbjo6ICAgICAgICAgICAgICAgIE9uZSBwb2ludCBpbiB0aGUgc291cmNlIGZpbGUKKyogQysrIGxvY2F0aW9uOjogICAgICAgICAgICAgICAgVHdvIHBvaW50cyBpbiB0aGUgc291cmNlIGZpbGUKKyogVXNlciBEZWZpbmVkIExvY2F0aW9uIFR5cGU6OiAgUmVxdWlyZWQgaW50ZXJmYWNlIGZvciBsb2NhdGlvbnMKKworQSBDb21wbGV0ZSBDKysgRXhhbXBsZQorCisqIENhbGMrKyAtLS0gQysrIENhbGN1bGF0b3I6OiAgIFRoZSBzcGVjaWZpY2F0aW9ucworKiBDYWxjKysgUGFyc2luZyBEcml2ZXI6OiAgICAgICBBbiBhY3RpdmUgcGFyc2luZyBjb250ZXh0CisqIENhbGMrKyBQYXJzZXI6OiAgICAgICAgICAgICAgIEEgcGFyc2VyIGNsYXNzCisqIENhbGMrKyBTY2FubmVyOjogICAgICAgICAgICAgIEEgcHVyZSBDKysgRmxleCBzY2FubmVyCisqIENhbGMrKyBUb3AgTGV2ZWw6OiAgICAgICAgICAgIENvbmR1Y3RpbmcgdGhlIGJhbmQKKworSmF2YSBQYXJzZXJzCisKKyogSmF2YSBCaXNvbiBJbnRlcmZhY2U6OiAgICAgICAgQXNraW5nIGZvciBKYXZhIHBhcnNlciBnZW5lcmF0aW9uCisqIEphdmEgU2VtYW50aWMgVmFsdWVzOjogICAgICAgICV0eXBlIGFuZCAldG9rZW4gdnMuIEphdmEKKyogSmF2YSBMb2NhdGlvbiBWYWx1ZXM6OiAgICAgICAgVGhlIHBvc2l0aW9uIGFuZCBsb2NhdGlvbiBjbGFzc2VzCisqIEphdmEgUGFyc2VyIEludGVyZmFjZTo6ICAgICAgIEluc3RhbnRpYXRpbmcgYW5kIHJ1bm5pbmcgdGhlIHBhcnNlcgorKiBKYXZhIFNjYW5uZXIgSW50ZXJmYWNlOjogICAgICBTcGVjaWZ5aW5nIHRoZSBzY2FubmVyIGZvciB0aGUgcGFyc2VyCisqIEphdmEgQWN0aW9uIEZlYXR1cmVzOjogICAgICAgIFNwZWNpYWwgZmVhdHVyZXMgZm9yIHVzZSBpbiBhY3Rpb25zCisqIEphdmEgRGlmZmVyZW5jZXM6OiAgICAgICAgICAgIERpZmZlcmVuY2VzIGJldHdlZW4gQy9DKysgYW5kIEphdmEgR3JhbW1hcnMKKyogSmF2YSBEZWNsYXJhdGlvbnMgU3VtbWFyeTo6ICAgTGlzdCBvZiBCaXNvbiBkZWNsYXJhdGlvbnMgdXNlZCB3aXRoIEphdmEKKworRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMKKworKiBNZW1vcnkgRXhoYXVzdGVkOjogICAgICAgICAgICBCcmVha2luZyB0aGUgU3RhY2sgTGltaXRzCisqIEhvdyBDYW4gSSBSZXNldCB0aGUgUGFyc2VyOjogIEBjb2Rle3l5cGFyc2V9IEtlZXBzIHNvbWUgU3RhdGUKKyogU3RyaW5ncyBhcmUgRGVzdHJveWVkOjogICAgICAgQGNvZGV7eXlsdmFsfSBMb3NlcyBUcmFjayBvZiBTdHJpbmdzCisqIEltcGxlbWVudGluZyBHb3Rvcy9Mb29wczo6ICAgIENvbnRyb2wgRmxvdyBpbiB0aGUgQ2FsY3VsYXRvcgorKiBNdWx0aXBsZSBzdGFydC1zeW1ib2xzOjogICAgICBGYWN0b3JpbmcgY2xvc2VseSByZWxhdGVkIGdyYW1tYXJzCisqIFNlY3VyZT8gIENvbmZvcm0/OjogICAgICAgICAgIElzIEJpc29uIFBPU0lYIHNhZmU/CisqIEkgY2FuJ3QgYnVpbGQgQmlzb246OiAgICAgICAgIFRyb3VibGVzaG9vdGluZworKiBXaGVyZSBjYW4gSSBmaW5kIGhlbHA/OjogICAgICBUcm91Ymxlc2hvdXRpbmcKKyogQnVnIFJlcG9ydHM6OiAgICAgICAgICAgICAgICAgVHJvdWJsZXJlcG9ydGluZworKiBNb3JlIExhbmd1YWdlczo6ICAgICAgICAgICAgICBQYXJzZXJzIGluIEMrKywgSmF2YSwgYW5kIHNvIG9uCisqIEJldGEgVGVzdGluZzo6ICAgICAgICAgICAgICAgIEV4cGVyaW1lbnRpbmcgZGV2ZWxvcG1lbnQgdmVyc2lvbnMKKyogTWFpbGluZyBMaXN0czo6ICAgICAgICAgICAgICAgTWVldGluZyBvdGhlciBCaXNvbiB1c2VycworCitDb3B5aW5nIFRoaXMgTWFudWFsCisKKyogQ29weWluZyBUaGlzIE1hbnVhbDo6ICAgICAgICAgTGljZW5zZSBmb3IgY29weWluZyB0aGlzIG1hbnVhbC4KKworQGVuZCBkZXRhaWxtZW51CitAZW5kIG1lbnUKKworQG5vZGUgSW50cm9kdWN0aW9uCitAdW5udW1iZXJlZCBJbnRyb2R1Y3Rpb24KK0BjaW5kZXggaW50cm9kdWN0aW9uCisKK0BkZm57Qmlzb259IGlzIGEgZ2VuZXJhbC1wdXJwb3NlIHBhcnNlciBnZW5lcmF0b3IgdGhhdCBjb252ZXJ0cyBhbgorYW5ub3RhdGVkIGNvbnRleHQtZnJlZSBncmFtbWFyIGludG8gYSBkZXRlcm1pbmlzdGljIExSIG9yIGdlbmVyYWxpemVkCitMUiAoR0xSKSBwYXJzZXIgZW1wbG95aW5nIExBTFIoMSkgcGFyc2VyIHRhYmxlcy4gIEFzIGFuIGV4cGVyaW1lbnRhbAorZmVhdHVyZSwgQmlzb24gY2FuIGFsc28gZ2VuZXJhdGUgSUVMUigxKSBvciBjYW5vbmljYWwgTFIoMSkgcGFyc2VyCit0YWJsZXMuICBPbmNlIHlvdSBhcmUgcHJvZmljaWVudCB3aXRoIEJpc29uLCB5b3UgY2FuIHVzZSBpdCB0byBkZXZlbG9wCithIHdpZGUgcmFuZ2Ugb2YgbGFuZ3VhZ2UgcGFyc2VycywgZnJvbSB0aG9zZSB1c2VkIGluIHNpbXBsZSBkZXNrCitjYWxjdWxhdG9ycyB0byBjb21wbGV4IHByb2dyYW1taW5nIGxhbmd1YWdlcy4KKworQmlzb24gaXMgdXB3YXJkIGNvbXBhdGlibGUgd2l0aCBZYWNjOiBhbGwgcHJvcGVybHktd3JpdHRlbiBZYWNjCitncmFtbWFycyBvdWdodCB0byB3b3JrIHdpdGggQmlzb24gd2l0aCBubyBjaGFuZ2UuICBBbnlvbmUgZmFtaWxpYXIKK3dpdGggWWFjYyBzaG91bGQgYmUgYWJsZSB0byB1c2UgQmlzb24gd2l0aCBsaXR0bGUgdHJvdWJsZS4gIFlvdSBuZWVkCit0byBiZSBmbHVlbnQgaW4gQyBvciBDKysgcHJvZ3JhbW1pbmcgaW4gb3JkZXIgdG8gdXNlIEJpc29uIG9yIHRvCit1bmRlcnN0YW5kIHRoaXMgbWFudWFsLiAgSmF2YSBpcyBhbHNvIHN1cHBvcnRlZCBhcyBhbiBleHBlcmltZW50YWwKK2ZlYXR1cmUuCisKK1dlIGJlZ2luIHdpdGggdHV0b3JpYWwgY2hhcHRlcnMgdGhhdCBleHBsYWluIHRoZSBiYXNpYyBjb25jZXB0cyBvZgordXNpbmcgQmlzb24gYW5kIHNob3cgdGhyZWUgZXhwbGFpbmVkIGV4YW1wbGVzLCBlYWNoIGJ1aWxkaW5nIG9uIHRoZQorbGFzdC4gIElmIHlvdSBkb24ndCBrbm93IEJpc29uIG9yIFlhY2MsIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlc2UKK2NoYXB0ZXJzLiAgUmVmZXJlbmNlIGNoYXB0ZXJzIGZvbGxvdywgd2hpY2ggZGVzY3JpYmUgc3BlY2lmaWMgYXNwZWN0cworb2YgQmlzb24gaW4gZGV0YWlsLgorCitCaXNvbiB3YXMgd3JpdHRlbiBvcmlnaW5hbGx5IGJ5IFJvYmVydCBDb3JiZXR0LiAgUmljaGFyZCBTdGFsbG1hbiBtYWRlCitpdCBZYWNjLWNvbXBhdGlibGUuICBXaWxmcmVkIEhhbnNlbiBvZiBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eQorYWRkZWQgbXVsdGktY2hhcmFjdGVyIHN0cmluZyBsaXRlcmFscyBhbmQgb3RoZXIgZmVhdHVyZXMuICBTaW5jZSB0aGVuLAorQmlzb24gaGFzIGdyb3duIG1vcmUgcm9idXN0IGFuZCBldm9sdmVkIG1hbnkgb3RoZXIgbmV3IGZlYXR1cmVzIHRoYW5rcwordG8gdGhlIGhhcmQgd29yayBvZiBhIGxvbmcgbGlzdCBvZiB2b2x1bnRlZXJzLiAgRm9yIGRldGFpbHMsIHNlZSB0aGUKK0BmaWxle1RIQU5LU30gYW5kIEBmaWxle0NoYW5nZUxvZ30gZmlsZXMgaW5jbHVkZWQgaW4gdGhlIEJpc29uCitkaXN0cmlidXRpb24uCisKK1RoaXMgZWRpdGlvbiBjb3JyZXNwb25kcyB0byB2ZXJzaW9uIEB2YWx1ZXtWRVJTSU9OfSBvZiBCaXNvbi4KKworQG5vZGUgQ29uZGl0aW9ucworQHVubnVtYmVyZWQgQ29uZGl0aW9ucyBmb3IgVXNpbmcgQmlzb24KKworVGhlIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgQmlzb24tZ2VuZXJhdGVkIHBhcnNlcnMgcGVybWl0IHVzaW5nIHRoZQorcGFyc2VycyBpbiBub25mcmVlIHByb2dyYW1zLiAgQmVmb3JlIEJpc29uIHZlcnNpb24gMi4yLCB0aGVzZSBleHRyYQorcGVybWlzc2lvbnMgYXBwbGllZCBvbmx5IHdoZW4gQmlzb24gd2FzIGdlbmVyYXRpbmcgTEFMUigxKQorcGFyc2VycyBpbiBDQC4gIEFuZCBiZWZvcmUgQmlzb24gdmVyc2lvbiAxLjI0LCBCaXNvbi1nZW5lcmF0ZWQKK3BhcnNlcnMgY291bGQgYmUgdXNlZCBvbmx5IGluIHByb2dyYW1zIHRoYXQgd2VyZSBmcmVlIHNvZnR3YXJlLgorCitUaGUgb3RoZXIgR05VIHByb2dyYW1taW5nIHRvb2xzLCBzdWNoIGFzIHRoZSBHTlUgQworY29tcGlsZXIsIGhhdmUgbmV2ZXIKK2hhZCBzdWNoIGEgcmVxdWlyZW1lbnQuICBUaGV5IGNvdWxkIGFsd2F5cyBiZSB1c2VkIGZvciBub25mcmVlCitzb2Z0d2FyZS4gIFRoZSByZWFzb24gQmlzb24gd2FzIGRpZmZlcmVudCB3YXMgbm90IGR1ZSB0byBhIHNwZWNpYWwKK3BvbGljeSBkZWNpc2lvbjsgaXQgcmVzdWx0ZWQgZnJvbSBhcHBseWluZyB0aGUgdXN1YWwgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgdG8gYWxsIG9mIHRoZSBCaXNvbiBzb3VyY2UgY29kZS4KKworVGhlIG1haW4gb3V0cHV0IG9mIHRoZSBCaXNvbiB1dGlsaXR5LS0tdGhlIEJpc29uIHBhcnNlciBpbXBsZW1lbnRhdGlvbgorZmlsZS0tLWNvbnRhaW5zIGEgdmVyYmF0aW0gY29weSBvZiBhIHNpemFibGUgcGllY2Ugb2YgQmlzb24sIHdoaWNoIGlzCit0aGUgY29kZSBmb3IgdGhlIHBhcnNlcidzIGltcGxlbWVudGF0aW9uLiAgKFRoZSBhY3Rpb25zIGZyb20geW91cgorZ3JhbW1hciBhcmUgaW5zZXJ0ZWQgaW50byB0aGlzIGltcGxlbWVudGF0aW9uIGF0IG9uZSBwb2ludCwgYnV0IG1vc3QKK29mIHRoZSByZXN0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3QgY2hhbmdlZC4pICBXaGVuIHdlIGFwcGxpZWQKK3RoZSBHUEwgdGVybXMgdG8gdGhlIHNrZWxldG9uIGNvZGUgZm9yIHRoZSBwYXJzZXIncyBpbXBsZW1lbnRhdGlvbiwKK3RoZSBlZmZlY3Qgd2FzIHRvIHJlc3RyaWN0IHRoZSB1c2Ugb2YgQmlzb24gb3V0cHV0IHRvIGZyZWUgc29mdHdhcmUuCisKK1dlIGRpZG4ndCBjaGFuZ2UgdGhlIHRlcm1zIGJlY2F1c2Ugb2Ygc3ltcGF0aHkgZm9yIHBlb3BsZSB3aG8gd2FudCB0bworbWFrZSBzb2Z0d2FyZSBwcm9wcmlldGFyeS4gIEBzdHJvbmd7U29mdHdhcmUgc2hvdWxkIGJlIGZyZWUufSAgQnV0IHdlCitjb25jbHVkZWQgdGhhdCBsaW1pdGluZyBCaXNvbidzIHVzZSB0byBmcmVlIHNvZnR3YXJlIHdhcyBkb2luZyBsaXR0bGUgdG8KK2VuY291cmFnZSBwZW9wbGUgdG8gbWFrZSBvdGhlciBzb2Z0d2FyZSBmcmVlLiAgU28gd2UgZGVjaWRlZCB0byBtYWtlIHRoZQorcHJhY3RpY2FsIGNvbmRpdGlvbnMgZm9yIHVzaW5nIEJpc29uIG1hdGNoIHRoZSBwcmFjdGljYWwgY29uZGl0aW9ucyBmb3IKK3VzaW5nIHRoZSBvdGhlciBHTlUgdG9vbHMuCisKK1RoaXMgZXhjZXB0aW9uIGFwcGxpZXMgd2hlbiBCaXNvbiBpcyBnZW5lcmF0aW5nIGNvZGUgZm9yIGEgcGFyc2VyLgorWW91IGNhbiB0ZWxsIHdoZXRoZXIgdGhlIGV4Y2VwdGlvbiBhcHBsaWVzIHRvIGEgQmlzb24gb3V0cHV0IGZpbGUgYnkKK2luc3BlY3RpbmcgdGhlIGZpbGUgZm9yIHRleHQgYmVnaW5uaW5nIHdpdGggYGBBcyBhIHNwZWNpYWwKK2V4Y2VwdGlvbkBkb3Rze30nJy4gIFRoZSB0ZXh0IHNwZWxscyBvdXQgdGhlIGV4YWN0IHRlcm1zIG9mIHRoZQorZXhjZXB0aW9uLgorCitAbm9kZSBDb3B5aW5nCitAdW5udW1iZXJlZCBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorQGluY2x1ZGUgZ3BsLTMuMC50ZXhpCisKK0Bub2RlIENvbmNlcHRzCitAY2hhcHRlciBUaGUgQ29uY2VwdHMgb2YgQmlzb24KKworVGhpcyBjaGFwdGVyIGludHJvZHVjZXMgbWFueSBvZiB0aGUgYmFzaWMgY29uY2VwdHMgd2l0aG91dCB3aGljaCB0aGUKK2RldGFpbHMgb2YgQmlzb24gd2lsbCBub3QgbWFrZSBzZW5zZS4gIElmIHlvdSBkbyBub3QgYWxyZWFkeSBrbm93IGhvdyB0bwordXNlIEJpc29uIG9yIFlhY2MsIHdlIHN1Z2dlc3QgeW91IHN0YXJ0IGJ5IHJlYWRpbmcgdGhpcyBjaGFwdGVyIGNhcmVmdWxseS4KKworQG1lbnUKKyogTGFuZ3VhZ2UgYW5kIEdyYW1tYXI6OiBMYW5ndWFnZXMgYW5kIGNvbnRleHQtZnJlZSBncmFtbWFycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIG1hdGhlbWF0aWNhbCBpZGVhcy4KKyogR3JhbW1hciBpbiBCaXNvbjo6ICAgICBIb3cgd2UgcmVwcmVzZW50IGdyYW1tYXJzIGZvciBCaXNvbidzIHNha2UuCisqIFNlbWFudGljIFZhbHVlczo6ICAgICAgRWFjaCB0b2tlbiBvciBzeW50YWN0aWMgZ3JvdXBpbmcgY2FuIGhhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgc2VtYW50aWMgdmFsdWUgKHRoZSB2YWx1ZSBvZiBhbiBpbnRlZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG5hbWUgb2YgYW4gaWRlbnRpZmllciwgZXRjLikuCisqIFNlbWFudGljIEFjdGlvbnM6OiAgICAgRWFjaCBydWxlIGNhbiBoYXZlIGFuIGFjdGlvbiBjb250YWluaW5nIEMgY29kZS4KKyogR0xSIFBhcnNlcnM6OiAgICAgICAgICBXcml0aW5nIHBhcnNlcnMgZm9yIGdlbmVyYWwgY29udGV4dC1mcmVlIGxhbmd1YWdlcy4KKyogTG9jYXRpb25zOjogICAgICAgICAgICBPdmVydmlldyBvZiBsb2NhdGlvbiB0cmFja2luZy4KKyogQmlzb24gUGFyc2VyOjogICAgICAgICBXaGF0IGFyZSBCaXNvbidzIGlucHV0IGFuZCBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBob3cgaXMgdGhlIG91dHB1dCB1c2VkPworKiBTdGFnZXM6OiAgICAgICAgICAgICAgIFN0YWdlcyBpbiB3cml0aW5nIGFuZCBydW5uaW5nIEJpc29uIGdyYW1tYXJzLgorKiBHcmFtbWFyIExheW91dDo6ICAgICAgIE92ZXJhbGwgc3RydWN0dXJlIG9mIGEgQmlzb24gZ3JhbW1hciBmaWxlLgorQGVuZCBtZW51CisKK0Bub2RlIExhbmd1YWdlIGFuZCBHcmFtbWFyCitAc2VjdGlvbiBMYW5ndWFnZXMgYW5kIENvbnRleHQtRnJlZSBHcmFtbWFycworCitAY2luZGV4IGNvbnRleHQtZnJlZSBncmFtbWFyCitAY2luZGV4IGdyYW1tYXIsIGNvbnRleHQtZnJlZQorSW4gb3JkZXIgZm9yIEJpc29uIHRvIHBhcnNlIGEgbGFuZ3VhZ2UsIGl0IG11c3QgYmUgZGVzY3JpYmVkIGJ5IGEKK0BkZm57Y29udGV4dC1mcmVlIGdyYW1tYXJ9LiAgVGhpcyBtZWFucyB0aGF0IHlvdSBzcGVjaWZ5IG9uZSBvciBtb3JlCitAZGZue3N5bnRhY3RpYyBncm91cGluZ3N9IGFuZCBnaXZlIHJ1bGVzIGZvciBjb25zdHJ1Y3RpbmcgdGhlbSBmcm9tIHRoZWlyCitwYXJ0cy4gIEZvciBleGFtcGxlLCBpbiB0aGUgQyBsYW5ndWFnZSwgb25lIGtpbmQgb2YgZ3JvdXBpbmcgaXMgY2FsbGVkIGFuCitgZXhwcmVzc2lvbicuICBPbmUgcnVsZSBmb3IgbWFraW5nIGFuIGV4cHJlc3Npb24gbWlnaHQgYmUsIGBgQW4gZXhwcmVzc2lvbgorY2FuIGJlIG1hZGUgb2YgYSBtaW51cyBzaWduIGFuZCBhbm90aGVyIGV4cHJlc3Npb24nJy4gIEFub3RoZXIgd291bGQgYmUsCitgYEFuIGV4cHJlc3Npb24gY2FuIGJlIGFuIGludGVnZXInJy4gIEFzIHlvdSBjYW4gc2VlLCBydWxlcyBhcmUgb2Z0ZW4KK3JlY3Vyc2l2ZSwgYnV0IHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIHJ1bGUgd2hpY2ggbGVhZHMgb3V0IG9mIHRoZQorcmVjdXJzaW9uLgorCitAY2luZGV4IEJORgorQGNpbmRleCBCYWNrdXMtTmF1ciBmb3JtCitUaGUgbW9zdCBjb21tb24gZm9ybWFsIHN5c3RlbSBmb3IgcHJlc2VudGluZyBzdWNoIHJ1bGVzIGZvciBodW1hbnMgdG8gcmVhZAoraXMgQGRmbntCYWNrdXMtTmF1ciBGb3JtfSBvciBgYEJORicnLCB3aGljaCB3YXMgZGV2ZWxvcGVkIGluCitvcmRlciB0byBzcGVjaWZ5IHRoZSBsYW5ndWFnZSBBbGdvbCA2MC4gIEFueSBncmFtbWFyIGV4cHJlc3NlZCBpbgorQk5GIGlzIGEgY29udGV4dC1mcmVlIGdyYW1tYXIuICBUaGUgaW5wdXQgdG8gQmlzb24gaXMKK2Vzc2VudGlhbGx5IG1hY2hpbmUtcmVhZGFibGUgQk5GLgorCitAY2luZGV4IExBTFIgZ3JhbW1hcnMKK0BjaW5kZXggSUVMUiBncmFtbWFycworQGNpbmRleCBMUiBncmFtbWFycworVGhlcmUgYXJlIHZhcmlvdXMgaW1wb3J0YW50IHN1YmNsYXNzZXMgb2YgY29udGV4dC1mcmVlIGdyYW1tYXJzLiAgQWx0aG91Z2gKK2l0IGNhbiBoYW5kbGUgYWxtb3N0IGFsbCBjb250ZXh0LWZyZWUgZ3JhbW1hcnMsIEJpc29uIGlzIG9wdGltaXplZCBmb3Igd2hhdAorYXJlIGNhbGxlZCBMUigxKSBncmFtbWFycy4gIEluIGJyaWVmLCBpbiB0aGVzZSBncmFtbWFycywgaXQgbXVzdCBiZSBwb3NzaWJsZQordG8gdGVsbCBob3cgdG8gcGFyc2UgYW55IHBvcnRpb24gb2YgYW4gaW5wdXQgc3RyaW5nIHdpdGgganVzdCBhIHNpbmdsZSB0b2tlbgorb2YgbG9va2FoZWFkLiAgRm9yIGhpc3RvcmljYWwgcmVhc29ucywgQmlzb24gYnkgZGVmYXVsdCBpcyBsaW1pdGVkIGJ5IHRoZQorYWRkaXRpb25hbCByZXN0cmljdGlvbnMgb2YgTEFMUigxKSwgd2hpY2ggaXMgaGFyZCB0byBleHBsYWluIHNpbXBseS4KK0B4cmVme015c3RlcmlvdXMgQ29uZmxpY3RzfSwgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcy4gIEFzIGFuCitleHBlcmltZW50YWwgZmVhdHVyZSwgeW91IGNhbiBlc2NhcGUgdGhlc2UgYWRkaXRpb25hbCByZXN0cmljdGlvbnMgYnkKK3JlcXVlc3RpbmcgSUVMUigxKSBvciBjYW5vbmljYWwgTFIoMSkgcGFyc2VyIHRhYmxlcy4gIEB4cmVme0xSIFRhYmxlCitDb25zdHJ1Y3Rpb259LCB0byBsZWFybiBob3cuCisKK0BjaW5kZXggR0xSIHBhcnNpbmcKK0BjaW5kZXggZ2VuZXJhbGl6ZWQgTFIgKEdMUikgcGFyc2luZworQGNpbmRleCBhbWJpZ3VvdXMgZ3JhbW1hcnMKK0BjaW5kZXggbm9uZGV0ZXJtaW5pc3RpYyBwYXJzaW5nCisKK1BhcnNlcnMgZm9yIExSKDEpIGdyYW1tYXJzIGFyZSBAZGZue2RldGVybWluaXN0aWN9LCBtZWFuaW5nCityb3VnaGx5IHRoYXQgdGhlIG5leHQgZ3JhbW1hciBydWxlIHRvIGFwcGx5IGF0IGFueSBwb2ludCBpbiB0aGUgaW5wdXQgaXMKK3VuaXF1ZWx5IGRldGVybWluZWQgYnkgdGhlIHByZWNlZGluZyBpbnB1dCBhbmQgYSBmaXhlZCwgZmluaXRlIHBvcnRpb24KKyhjYWxsZWQgYSBAZGZue2xvb2thaGVhZH0pIG9mIHRoZSByZW1haW5pbmcgaW5wdXQuICBBIGNvbnRleHQtZnJlZQorZ3JhbW1hciBjYW4gYmUgQGRmbnthbWJpZ3VvdXN9LCBtZWFuaW5nIHRoYXQgdGhlcmUgYXJlIG11bHRpcGxlIHdheXMgdG8KK2FwcGx5IHRoZSBncmFtbWFyIHJ1bGVzIHRvIGdldCB0aGUgc2FtZSBpbnB1dHMuICBFdmVuIHVuYW1iaWd1b3VzCitncmFtbWFycyBjYW4gYmUgQGRmbntub25kZXRlcm1pbmlzdGljfSwgbWVhbmluZyB0aGF0IG5vIGZpeGVkCitsb29rYWhlYWQgYWx3YXlzIHN1ZmZpY2VzIHRvIGRldGVybWluZSB0aGUgbmV4dCBncmFtbWFyIHJ1bGUgdG8gYXBwbHkuCitXaXRoIHRoZSBwcm9wZXIgZGVjbGFyYXRpb25zLCBCaXNvbiBpcyBhbHNvIGFibGUgdG8gcGFyc2UgdGhlc2UgbW9yZQorZ2VuZXJhbCBjb250ZXh0LWZyZWUgZ3JhbW1hcnMsIHVzaW5nIGEgdGVjaG5pcXVlIGtub3duIGFzIEdMUgorcGFyc2luZyAoZm9yIEdlbmVyYWxpemVkIExSKS4gIEJpc29uJ3MgR0xSIHBhcnNlcnMKK2FyZSBhYmxlIHRvIGhhbmRsZSBhbnkgY29udGV4dC1mcmVlIGdyYW1tYXIgZm9yIHdoaWNoIHRoZSBudW1iZXIgb2YKK3Bvc3NpYmxlIHBhcnNlcyBvZiBhbnkgZ2l2ZW4gc3RyaW5nIGlzIGZpbml0ZS4KKworQGNpbmRleCBzeW1ib2xzIChhYnN0cmFjdCkKK0BjaW5kZXggdG9rZW4KK0BjaW5kZXggc3ludGFjdGljIGdyb3VwaW5nCitAY2luZGV4IGdyb3VwaW5nLCBzeW50YWN0aWMKK0luIHRoZSBmb3JtYWwgZ3JhbW1hdGljYWwgcnVsZXMgZm9yIGEgbGFuZ3VhZ2UsIGVhY2gga2luZCBvZiBzeW50YWN0aWMKK3VuaXQgb3IgZ3JvdXBpbmcgaXMgbmFtZWQgYnkgYSBAZGZue3N5bWJvbH0uICBUaG9zZSB3aGljaCBhcmUgYnVpbHQgYnkKK2dyb3VwaW5nIHNtYWxsZXIgY29uc3RydWN0cyBhY2NvcmRpbmcgdG8gZ3JhbW1hdGljYWwgcnVsZXMgYXJlIGNhbGxlZAorQGRmbntub250ZXJtaW5hbCBzeW1ib2xzfTsgdGhvc2Ugd2hpY2ggY2FuJ3QgYmUgc3ViZGl2aWRlZCBhcmUgY2FsbGVkCitAZGZue3Rlcm1pbmFsIHN5bWJvbHN9IG9yIEBkZm57dG9rZW4gdHlwZXN9LiAgV2UgY2FsbCBhIHBpZWNlIG9mIGlucHV0Citjb3JyZXNwb25kaW5nIHRvIGEgc2luZ2xlIHRlcm1pbmFsIHN5bWJvbCBhIEBkZm57dG9rZW59LCBhbmQgYSBwaWVjZQorY29ycmVzcG9uZGluZyB0byBhIHNpbmdsZSBub250ZXJtaW5hbCBzeW1ib2wgYSBAZGZue2dyb3VwaW5nfS4KKworV2UgY2FuIHVzZSB0aGUgQyBsYW5ndWFnZSBhcyBhbiBleGFtcGxlIG9mIHdoYXQgc3ltYm9scywgdGVybWluYWwgYW5kCitub250ZXJtaW5hbCwgbWVhbi4gIFRoZSB0b2tlbnMgb2YgQyBhcmUgaWRlbnRpZmllcnMsIGNvbnN0YW50cyAobnVtZXJpYworYW5kIHN0cmluZyksIGFuZCB0aGUgdmFyaW91cyBrZXl3b3JkcywgYXJpdGhtZXRpYyBvcGVyYXRvcnMgYW5kCitwdW5jdHVhdGlvbiBtYXJrcy4gIFNvIHRoZSB0ZXJtaW5hbCBzeW1ib2xzIG9mIGEgZ3JhbW1hciBmb3IgQyBpbmNsdWRlCitgaWRlbnRpZmllcicsIGBudW1iZXInLCBgc3RyaW5nJywgcGx1cyBvbmUgc3ltYm9sIGZvciBlYWNoIGtleXdvcmQsCitvcGVyYXRvciBvciBwdW5jdHVhdGlvbiBtYXJrOiBgaWYnLCBgcmV0dXJuJywgYGNvbnN0JywgYHN0YXRpYycsIGBpbnQnLAorYGNoYXInLCBgcGx1cy1zaWduJywgYG9wZW4tYnJhY2UnLCBgY2xvc2UtYnJhY2UnLCBgY29tbWEnIGFuZCBtYW55IG1vcmUuCisoVGhlc2UgdG9rZW5zIGNhbiBiZSBzdWJkaXZpZGVkIGludG8gY2hhcmFjdGVycywgYnV0IHRoYXQgaXMgYSBtYXR0ZXIgb2YKK2xleGljb2dyYXBoeSwgbm90IGdyYW1tYXIuKQorCitIZXJlIGlzIGEgc2ltcGxlIEMgZnVuY3Rpb24gc3ViZGl2aWRlZCBpbnRvIHRva2VuczoKKworQGV4YW1wbGUKK2ludCAgICAgICAgICAgICAvKiBAcntrZXl3b3JkIGBpbnQnfSAqLworc3F1YXJlIChpbnQgeCkgIC8qIEBye2lkZW50aWZpZXIsIG9wZW4tcGFyZW4sIGtleXdvcmQgYGludCcsfQorICAgICAgICAgICAgICAgICAgIEBye2lkZW50aWZpZXIsIGNsb3NlLXBhcmVufSAqLworQHsgICAgICAgICAgICAgICAvKiBAcntvcGVuLWJyYWNlfSAqLworICByZXR1cm4geCAqIHg7IC8qIEBye2tleXdvcmQgYHJldHVybicsIGlkZW50aWZpZXIsIGFzdGVyaXNrLH0KKyAgICAgICAgICAgICAgICAgICBAcntpZGVudGlmaWVyLCBzZW1pY29sb259ICovCitAfSAgICAgICAgICAgICAgIC8qIEBye2Nsb3NlLWJyYWNlfSAqLworQGVuZCBleGFtcGxlCisKK1RoZSBzeW50YWN0aWMgZ3JvdXBpbmdzIG9mIEMgaW5jbHVkZSB0aGUgZXhwcmVzc2lvbiwgdGhlIHN0YXRlbWVudCwgdGhlCitkZWNsYXJhdGlvbiwgYW5kIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiAgVGhlc2UgYXJlIHJlcHJlc2VudGVkIGluIHRoZQorZ3JhbW1hciBvZiBDIGJ5IG5vbnRlcm1pbmFsIHN5bWJvbHMgYGV4cHJlc3Npb24nLCBgc3RhdGVtZW50JywKK2BkZWNsYXJhdGlvbicgYW5kIGBmdW5jdGlvbiBkZWZpbml0aW9uJy4gIFRoZSBmdWxsIGdyYW1tYXIgdXNlcyBkb3plbnMgb2YKK2FkZGl0aW9uYWwgbGFuZ3VhZ2UgY29uc3RydWN0cywgZWFjaCB3aXRoIGl0cyBvd24gbm9udGVybWluYWwgc3ltYm9sLCBpbgorb3JkZXIgdG8gZXhwcmVzcyB0aGUgbWVhbmluZ3Mgb2YgdGhlc2UgZm91ci4gIFRoZSBleGFtcGxlIGFib3ZlIGlzIGEKK2Z1bmN0aW9uIGRlZmluaXRpb247IGl0IGNvbnRhaW5zIG9uZSBkZWNsYXJhdGlvbiwgYW5kIG9uZSBzdGF0ZW1lbnQuICBJbgordGhlIHN0YXRlbWVudCwgZWFjaCBAc2FtcHt4fSBpcyBhbiBleHByZXNzaW9uIGFuZCBzbyBpcyBAc2FtcHt4ICogeH0uCisKK0VhY2ggbm9udGVybWluYWwgc3ltYm9sIG11c3QgaGF2ZSBncmFtbWF0aWNhbCBydWxlcyBzaG93aW5nIGhvdyBpdCBpcyBtYWRlCitvdXQgb2Ygc2ltcGxlciBjb25zdHJ1Y3RzLiAgRm9yIGV4YW1wbGUsIG9uZSBraW5kIG9mIEMgc3RhdGVtZW50IGlzIHRoZQorQGNvZGV7cmV0dXJufSBzdGF0ZW1lbnQ7IHRoaXMgd291bGQgYmUgZGVzY3JpYmVkIHdpdGggYSBncmFtbWFyIHJ1bGUgd2hpY2gKK3JlYWRzIGluZm9ybWFsbHkgYXMgZm9sbG93czoKKworQHF1b3RhdGlvbgorQSBgc3RhdGVtZW50JyBjYW4gYmUgbWFkZSBvZiBhIGByZXR1cm4nIGtleXdvcmQsIGFuIGBleHByZXNzaW9uJyBhbmQgYQorYHNlbWljb2xvbicuCitAZW5kIHF1b3RhdGlvbgorCitAbm9pbmRlbnQKK1RoZXJlIHdvdWxkIGJlIG1hbnkgb3RoZXIgcnVsZXMgZm9yIGBzdGF0ZW1lbnQnLCBvbmUgZm9yIGVhY2gga2luZCBvZgorc3RhdGVtZW50IGluIEMuCisKK0BjaW5kZXggc3RhcnQgc3ltYm9sCitPbmUgbm9udGVybWluYWwgc3ltYm9sIG11c3QgYmUgZGlzdGluZ3Vpc2hlZCBhcyB0aGUgc3BlY2lhbCBvbmUgd2hpY2gKK2RlZmluZXMgYSBjb21wbGV0ZSB1dHRlcmFuY2UgaW4gdGhlIGxhbmd1YWdlLiAgSXQgaXMgY2FsbGVkIHRoZSBAZGZue3N0YXJ0CitzeW1ib2x9LiAgSW4gYSBjb21waWxlciwgdGhpcyBtZWFucyBhIGNvbXBsZXRlIGlucHV0IHByb2dyYW0uICBJbiB0aGUgQworbGFuZ3VhZ2UsIHRoZSBub250ZXJtaW5hbCBzeW1ib2wgYHNlcXVlbmNlIG9mIGRlZmluaXRpb25zIGFuZCBkZWNsYXJhdGlvbnMnCitwbGF5cyB0aGlzIHJvbGUuCisKK0ZvciBleGFtcGxlLCBAc2FtcHsxICsgMn0gaXMgYSB2YWxpZCBDIGV4cHJlc3Npb24tLS1hIHZhbGlkIHBhcnQgb2YgYSBDCitwcm9ncmFtLS0tYnV0IGl0IGlzIG5vdCB2YWxpZCBhcyBhbiBAZW1waHtlbnRpcmV9IEMgcHJvZ3JhbS4gIEluIHRoZQorY29udGV4dC1mcmVlIGdyYW1tYXIgb2YgQywgdGhpcyBmb2xsb3dzIGZyb20gdGhlIGZhY3QgdGhhdCBgZXhwcmVzc2lvbicgaXMKK25vdCB0aGUgc3RhcnQgc3ltYm9sLgorCitUaGUgQmlzb24gcGFyc2VyIHJlYWRzIGEgc2VxdWVuY2Ugb2YgdG9rZW5zIGFzIGl0cyBpbnB1dCwgYW5kIGdyb3VwcyB0aGUKK3Rva2VucyB1c2luZyB0aGUgZ3JhbW1hciBydWxlcy4gIElmIHRoZSBpbnB1dCBpcyB2YWxpZCwgdGhlIGVuZCByZXN1bHQgaXMKK3RoYXQgdGhlIGVudGlyZSB0b2tlbiBzZXF1ZW5jZSByZWR1Y2VzIHRvIGEgc2luZ2xlIGdyb3VwaW5nIHdob3NlIHN5bWJvbCBpcwordGhlIGdyYW1tYXIncyBzdGFydCBzeW1ib2wuICBJZiB3ZSB1c2UgYSBncmFtbWFyIGZvciBDLCB0aGUgZW50aXJlIGlucHV0CittdXN0IGJlIGEgYHNlcXVlbmNlIG9mIGRlZmluaXRpb25zIGFuZCBkZWNsYXJhdGlvbnMnLiAgSWYgbm90LCB0aGUgcGFyc2VyCityZXBvcnRzIGEgc3ludGF4IGVycm9yLgorCitAbm9kZSBHcmFtbWFyIGluIEJpc29uCitAc2VjdGlvbiBGcm9tIEZvcm1hbCBSdWxlcyB0byBCaXNvbiBJbnB1dAorQGNpbmRleCBCaXNvbiBncmFtbWFyCitAY2luZGV4IGdyYW1tYXIsIEJpc29uCitAY2luZGV4IGZvcm1hbCBncmFtbWFyCisKK0EgZm9ybWFsIGdyYW1tYXIgaXMgYSBtYXRoZW1hdGljYWwgY29uc3RydWN0LiAgVG8gZGVmaW5lIHRoZSBsYW5ndWFnZQorZm9yIEJpc29uLCB5b3UgbXVzdCB3cml0ZSBhIGZpbGUgZXhwcmVzc2luZyB0aGUgZ3JhbW1hciBpbiBCaXNvbiBzeW50YXg6CithIEBkZm57Qmlzb24gZ3JhbW1hcn0gZmlsZS4gIEB4cmVme0dyYW1tYXIgRmlsZSwgLEJpc29uIEdyYW1tYXIgRmlsZXN9LgorCitBIG5vbnRlcm1pbmFsIHN5bWJvbCBpbiB0aGUgZm9ybWFsIGdyYW1tYXIgaXMgcmVwcmVzZW50ZWQgaW4gQmlzb24gaW5wdXQKK2FzIGFuIGlkZW50aWZpZXIsIGxpa2UgYW4gaWRlbnRpZmllciBpbiBDQC4gIEJ5IGNvbnZlbnRpb24sIGl0IHNob3VsZCBiZQoraW4gbG93ZXIgY2FzZSwgc3VjaCBhcyBAY29kZXtleHByfSwgQGNvZGV7c3RtdH0gb3IgQGNvZGV7ZGVjbGFyYXRpb259LgorCitUaGUgQmlzb24gcmVwcmVzZW50YXRpb24gZm9yIGEgdGVybWluYWwgc3ltYm9sIGlzIGFsc28gY2FsbGVkIGEgQGRmbnt0b2tlbgordHlwZX0uICBUb2tlbiB0eXBlcyBhcyB3ZWxsIGNhbiBiZSByZXByZXNlbnRlZCBhcyBDLWxpa2UgaWRlbnRpZmllcnMuICBCeQorY29udmVudGlvbiwgdGhlc2UgaWRlbnRpZmllcnMgc2hvdWxkIGJlIHVwcGVyIGNhc2UgdG8gZGlzdGluZ3Vpc2ggdGhlbSBmcm9tCitub250ZXJtaW5hbHM6IGZvciBleGFtcGxlLCBAY29kZXtJTlRFR0VSfSwgQGNvZGV7SURFTlRJRklFUn0sIEBjb2Rle0lGfSBvcgorQGNvZGV7UkVUVVJOfS4gIEEgdGVybWluYWwgc3ltYm9sIHRoYXQgc3RhbmRzIGZvciBhIHBhcnRpY3VsYXIga2V5d29yZCBpbgordGhlIGxhbmd1YWdlIHNob3VsZCBiZSBuYW1lZCBhZnRlciB0aGF0IGtleXdvcmQgY29udmVydGVkIHRvIHVwcGVyIGNhc2UuCitUaGUgdGVybWluYWwgc3ltYm9sIEBjb2Rle2Vycm9yfSBpcyByZXNlcnZlZCBmb3IgZXJyb3IgcmVjb3ZlcnkuCitAeHJlZntTeW1ib2xzfS4KKworQSB0ZXJtaW5hbCBzeW1ib2wgY2FuIGFsc28gYmUgcmVwcmVzZW50ZWQgYXMgYSBjaGFyYWN0ZXIgbGl0ZXJhbCwganVzdCBsaWtlCithIEMgY2hhcmFjdGVyIGNvbnN0YW50LiAgWW91IHNob3VsZCBkbyB0aGlzIHdoZW5ldmVyIGEgdG9rZW4gaXMganVzdCBhCitzaW5nbGUgY2hhcmFjdGVyIChwYXJlbnRoZXNpcywgcGx1cy1zaWduLCBldGMuKTogdXNlIHRoYXQgc2FtZSBjaGFyYWN0ZXIgaW4KK2EgbGl0ZXJhbCBhcyB0aGUgdGVybWluYWwgc3ltYm9sIGZvciB0aGF0IHRva2VuLgorCitBIHRoaXJkIHdheSB0byByZXByZXNlbnQgYSB0ZXJtaW5hbCBzeW1ib2wgaXMgd2l0aCBhIEMgc3RyaW5nIGNvbnN0YW50Citjb250YWluaW5nIHNldmVyYWwgY2hhcmFjdGVycy4gIEB4cmVme1N5bWJvbHN9LCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworVGhlIGdyYW1tYXIgcnVsZXMgYWxzbyBoYXZlIGFuIGV4cHJlc3Npb24gaW4gQmlzb24gc3ludGF4LiAgRm9yIGV4YW1wbGUsCitoZXJlIGlzIHRoZSBCaXNvbiBydWxlIGZvciBhIEMgQGNvZGV7cmV0dXJufSBzdGF0ZW1lbnQuICBUaGUgc2VtaWNvbG9uIGluCitxdW90ZXMgaXMgYSBsaXRlcmFsIGNoYXJhY3RlciB0b2tlbiwgcmVwcmVzZW50aW5nIHBhcnQgb2YgdGhlIEMgc3ludGF4IGZvcgordGhlIHN0YXRlbWVudDsgdGhlIG5ha2VkIHNlbWljb2xvbiwgYW5kIHRoZSBjb2xvbiwgYXJlIEJpc29uIHB1bmN0dWF0aW9uCit1c2VkIGluIGV2ZXJ5IHJ1bGUuCisKK0BleGFtcGxlCitzdG10OiBSRVRVUk4gZXhwciAnOycgOworQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorQHhyZWZ7UnVsZXMsICxTeW50YXggb2YgR3JhbW1hciBSdWxlc30uCisKK0Bub2RlIFNlbWFudGljIFZhbHVlcworQHNlY3Rpb24gU2VtYW50aWMgVmFsdWVzCitAY2luZGV4IHNlbWFudGljIHZhbHVlCitAY2luZGV4IHZhbHVlLCBzZW1hbnRpYworCitBIGZvcm1hbCBncmFtbWFyIHNlbGVjdHMgdG9rZW5zIG9ubHkgYnkgdGhlaXIgY2xhc3NpZmljYXRpb25zOiBmb3IgZXhhbXBsZSwKK2lmIGEgcnVsZSBtZW50aW9ucyB0aGUgdGVybWluYWwgc3ltYm9sIGBpbnRlZ2VyIGNvbnN0YW50JywgaXQgbWVhbnMgdGhhdAorQGVtcGh7YW55fSBpbnRlZ2VyIGNvbnN0YW50IGlzIGdyYW1tYXRpY2FsbHkgdmFsaWQgaW4gdGhhdCBwb3NpdGlvbi4gIFRoZQorcHJlY2lzZSB2YWx1ZSBvZiB0aGUgY29uc3RhbnQgaXMgaXJyZWxldmFudCB0byBob3cgdG8gcGFyc2UgdGhlIGlucHV0OiBpZgorQHNhbXB7eCs0fSBpcyBncmFtbWF0aWNhbCB0aGVuIEBzYW1we3grMX0gb3IgQHNhbXB7eCszOTg5fSBpcyBlcXVhbGx5CitncmFtbWF0aWNhbC4KKworQnV0IHRoZSBwcmVjaXNlIHZhbHVlIGlzIHZlcnkgaW1wb3J0YW50IGZvciB3aGF0IHRoZSBpbnB1dCBtZWFucyBvbmNlIGl0IGlzCitwYXJzZWQuICBBIGNvbXBpbGVyIGlzIHVzZWxlc3MgaWYgaXQgZmFpbHMgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiA0LCAxIGFuZAorMzk4OSBhcyBjb25zdGFudHMgaW4gdGhlIHByb2dyYW0hICBUaGVyZWZvcmUsIGVhY2ggdG9rZW4gaW4gYSBCaXNvbiBncmFtbWFyCitoYXMgYm90aCBhIHRva2VuIHR5cGUgYW5kIGEgQGRmbntzZW1hbnRpYyB2YWx1ZX0uICBAeHJlZntTZW1hbnRpY3MsCissRGVmaW5pbmcgTGFuZ3VhZ2UgU2VtYW50aWNzfSwKK2ZvciBkZXRhaWxzLgorCitUaGUgdG9rZW4gdHlwZSBpcyBhIHRlcm1pbmFsIHN5bWJvbCBkZWZpbmVkIGluIHRoZSBncmFtbWFyLCBzdWNoIGFzCitAY29kZXtJTlRFR0VSfSwgQGNvZGV7SURFTlRJRklFUn0gb3IgQGNvZGV7JywnfS4gIEl0IHRlbGxzIGV2ZXJ5dGhpbmcKK3lvdSBuZWVkIHRvIGtub3cgdG8gZGVjaWRlIHdoZXJlIHRoZSB0b2tlbiBtYXkgdmFsaWRseSBhcHBlYXIgYW5kIGhvdyB0bworZ3JvdXAgaXQgd2l0aCBvdGhlciB0b2tlbnMuICBUaGUgZ3JhbW1hciBydWxlcyBrbm93IG5vdGhpbmcgYWJvdXQgdG9rZW5zCitleGNlcHQgdGhlaXIgdHlwZXMuCisKK1RoZSBzZW1hbnRpYyB2YWx1ZSBoYXMgYWxsIHRoZSByZXN0IG9mIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKK21lYW5pbmcgb2YgdGhlIHRva2VuLCBzdWNoIGFzIHRoZSB2YWx1ZSBvZiBhbiBpbnRlZ2VyLCBvciB0aGUgbmFtZSBvZiBhbgoraWRlbnRpZmllci4gIChBIHRva2VuIHN1Y2ggYXMgQGNvZGV7JywnfSB3aGljaCBpcyBqdXN0IHB1bmN0dWF0aW9uIGRvZXNuJ3QKK25lZWQgdG8gaGF2ZSBhbnkgc2VtYW50aWMgdmFsdWUuKQorCitGb3IgZXhhbXBsZSwgYW4gaW5wdXQgdG9rZW4gbWlnaHQgYmUgY2xhc3NpZmllZCBhcyB0b2tlbiB0eXBlCitAY29kZXtJTlRFR0VSfSBhbmQgaGF2ZSB0aGUgc2VtYW50aWMgdmFsdWUgNC4gIEFub3RoZXIgaW5wdXQgdG9rZW4gbWlnaHQKK2hhdmUgdGhlIHNhbWUgdG9rZW4gdHlwZSBAY29kZXtJTlRFR0VSfSBidXQgdmFsdWUgMzk4OS4gIFdoZW4gYSBncmFtbWFyCitydWxlIHNheXMgdGhhdCBAY29kZXtJTlRFR0VSfSBpcyBhbGxvd2VkLCBlaXRoZXIgb2YgdGhlc2UgdG9rZW5zIGlzCithY2NlcHRhYmxlIGJlY2F1c2UgZWFjaCBpcyBhbiBAY29kZXtJTlRFR0VSfS4gIFdoZW4gdGhlIHBhcnNlciBhY2NlcHRzIHRoZQordG9rZW4sIGl0IGtlZXBzIHRyYWNrIG9mIHRoZSB0b2tlbidzIHNlbWFudGljIHZhbHVlLgorCitFYWNoIGdyb3VwaW5nIGNhbiBhbHNvIGhhdmUgYSBzZW1hbnRpYyB2YWx1ZSBhcyB3ZWxsIGFzIGl0cyBub250ZXJtaW5hbAorc3ltYm9sLiAgRm9yIGV4YW1wbGUsIGluIGEgY2FsY3VsYXRvciwgYW4gZXhwcmVzc2lvbiB0eXBpY2FsbHkgaGFzIGEKK3NlbWFudGljIHZhbHVlIHRoYXQgaXMgYSBudW1iZXIuICBJbiBhIGNvbXBpbGVyIGZvciBhIHByb2dyYW1taW5nCitsYW5ndWFnZSwgYW4gZXhwcmVzc2lvbiB0eXBpY2FsbHkgaGFzIGEgc2VtYW50aWMgdmFsdWUgdGhhdCBpcyBhIHRyZWUKK3N0cnVjdHVyZSBkZXNjcmliaW5nIHRoZSBtZWFuaW5nIG9mIHRoZSBleHByZXNzaW9uLgorCitAbm9kZSBTZW1hbnRpYyBBY3Rpb25zCitAc2VjdGlvbiBTZW1hbnRpYyBBY3Rpb25zCitAY2luZGV4IHNlbWFudGljIGFjdGlvbnMKK0BjaW5kZXggYWN0aW9ucywgc2VtYW50aWMKKworSW4gb3JkZXIgdG8gYmUgdXNlZnVsLCBhIHByb2dyYW0gbXVzdCBkbyBtb3JlIHRoYW4gcGFyc2UgaW5wdXQ7IGl0IG11c3QKK2Fsc28gcHJvZHVjZSBzb21lIG91dHB1dCBiYXNlZCBvbiB0aGUgaW5wdXQuICBJbiBhIEJpc29uIGdyYW1tYXIsIGEgZ3JhbW1hcgorcnVsZSBjYW4gaGF2ZSBhbiBAZGZue2FjdGlvbn0gbWFkZSB1cCBvZiBDIHN0YXRlbWVudHMuICBFYWNoIHRpbWUgdGhlCitwYXJzZXIgcmVjb2duaXplcyBhIG1hdGNoIGZvciB0aGF0IHJ1bGUsIHRoZSBhY3Rpb24gaXMgZXhlY3V0ZWQuCitAeHJlZntBY3Rpb25zfS4KKworTW9zdCBvZiB0aGUgdGltZSwgdGhlIHB1cnBvc2Ugb2YgYW4gYWN0aW9uIGlzIHRvIGNvbXB1dGUgdGhlIHNlbWFudGljIHZhbHVlCitvZiB0aGUgd2hvbGUgY29uc3RydWN0IGZyb20gdGhlIHNlbWFudGljIHZhbHVlcyBvZiBpdHMgcGFydHMuICBGb3IgZXhhbXBsZSwKK3N1cHBvc2Ugd2UgaGF2ZSBhIHJ1bGUgd2hpY2ggc2F5cyBhbiBleHByZXNzaW9uIGNhbiBiZSB0aGUgc3VtIG9mIHR3bworZXhwcmVzc2lvbnMuICBXaGVuIHRoZSBwYXJzZXIgcmVjb2duaXplcyBzdWNoIGEgc3VtLCBlYWNoIG9mIHRoZQorc3ViZXhwcmVzc2lvbnMgaGFzIGEgc2VtYW50aWMgdmFsdWUgd2hpY2ggZGVzY3JpYmVzIGhvdyBpdCB3YXMgYnVpbHQgdXAuCitUaGUgYWN0aW9uIGZvciB0aGlzIHJ1bGUgc2hvdWxkIGNyZWF0ZSBhIHNpbWlsYXIgc29ydCBvZiB2YWx1ZSBmb3IgdGhlCituZXdseSByZWNvZ25pemVkIGxhcmdlciBleHByZXNzaW9uLgorCitGb3IgZXhhbXBsZSwgaGVyZSBpcyBhIHJ1bGUgdGhhdCBzYXlzIGFuIGV4cHJlc3Npb24gY2FuIGJlIHRoZSBzdW0gb2YKK3R3byBzdWJleHByZXNzaW9uczoKKworQGV4YW1wbGUKK2V4cHI6IGV4cHIgJysnIGV4cHIgICBAeyAkJCA9ICQxICsgJDM7IEB9IDsKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK1RoZSBhY3Rpb24gc2F5cyBob3cgdG8gcHJvZHVjZSB0aGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIHN1bSBleHByZXNzaW9uCitmcm9tIHRoZSB2YWx1ZXMgb2YgdGhlIHR3byBzdWJleHByZXNzaW9ucy4KKworQG5vZGUgR0xSIFBhcnNlcnMKK0BzZWN0aW9uIFdyaXRpbmcgR0xSIFBhcnNlcnMKK0BjaW5kZXggR0xSIHBhcnNpbmcKK0BjaW5kZXggZ2VuZXJhbGl6ZWQgTFIgKEdMUikgcGFyc2luZworQGZpbmRleCAlZ2xyLXBhcnNlcgorQGNpbmRleCBjb25mbGljdHMKK0BjaW5kZXggc2hpZnQvcmVkdWNlIGNvbmZsaWN0cworQGNpbmRleCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0cworCitJbiBzb21lIGdyYW1tYXJzLCBCaXNvbidzIGRldGVybWluaXN0aWMKK0xSKDEpIHBhcnNpbmcgYWxnb3JpdGhtIGNhbm5vdCBkZWNpZGUgd2hldGhlciB0byBhcHBseSBhCitjZXJ0YWluIGdyYW1tYXIgcnVsZSBhdCBhIGdpdmVuIHBvaW50LiAgVGhhdCBpcywgaXQgbWF5IG5vdCBiZSBhYmxlIHRvCitkZWNpZGUgKG9uIHRoZSBiYXNpcyBvZiB0aGUgaW5wdXQgcmVhZCBzbyBmYXIpIHdoaWNoIG9mIHR3byBwb3NzaWJsZQorcmVkdWN0aW9ucyAoYXBwbGljYXRpb25zIG9mIGEgZ3JhbW1hciBydWxlKSBhcHBsaWVzLCBvciB3aGV0aGVyIHRvIGFwcGx5CithIHJlZHVjdGlvbiBvciByZWFkIG1vcmUgb2YgdGhlIGlucHV0IGFuZCBhcHBseSBhIHJlZHVjdGlvbiBsYXRlciBpbiB0aGUKK2lucHV0LiAgVGhlc2UgYXJlIGtub3duIHJlc3BlY3RpdmVseSBhcyBAZGZue3JlZHVjZS9yZWR1Y2V9IGNvbmZsaWN0cworKEBweHJlZntSZWR1Y2UvUmVkdWNlfSksIGFuZCBAZGZue3NoaWZ0L3JlZHVjZX0gY29uZmxpY3RzCisoQHB4cmVme1NoaWZ0L1JlZHVjZX0pLgorCitUbyB1c2UgYSBncmFtbWFyIHRoYXQgaXMgbm90IGVhc2lseSBtb2RpZmllZCB0byBiZSBMUigxKSwgYQorbW9yZSBnZW5lcmFsIHBhcnNpbmcgYWxnb3JpdGhtIGlzIHNvbWV0aW1lcyBuZWNlc3NhcnkuICBJZiB5b3UgaW5jbHVkZQorQGNvZGV7JWdsci1wYXJzZXJ9IGFtb25nIHRoZSBCaXNvbiBkZWNsYXJhdGlvbnMgaW4geW91ciBmaWxlCisoQHB4cmVme0dyYW1tYXIgT3V0bGluZX0pLCB0aGUgcmVzdWx0IGlzIGEgR2VuZXJhbGl6ZWQgTFIKKyhHTFIpIHBhcnNlci4gIFRoZXNlIHBhcnNlcnMgaGFuZGxlIEJpc29uIGdyYW1tYXJzIHRoYXQKK2NvbnRhaW4gbm8gdW5yZXNvbHZlZCBjb25mbGljdHMgKGkuZS4sIGFmdGVyIGFwcGx5aW5nIHByZWNlZGVuY2UKK2RlY2xhcmF0aW9ucykgaWRlbnRpY2FsbHkgdG8gZGV0ZXJtaW5pc3RpYyBwYXJzZXJzLiAgSG93ZXZlciwgd2hlbgorZmFjZWQgd2l0aCB1bnJlc29sdmVkIHNoaWZ0L3JlZHVjZSBhbmQgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMsCitHTFIgcGFyc2VycyB1c2UgdGhlIHNpbXBsZSBleHBlZGllbnQgb2YgZG9pbmcgYm90aCwKK2VmZmVjdGl2ZWx5IGNsb25pbmcgdGhlIHBhcnNlciB0byBmb2xsb3cgYm90aCBwb3NzaWJpbGl0aWVzLiAgRWFjaCBvZgordGhlIHJlc3VsdGluZyBwYXJzZXJzIGNhbiBhZ2FpbiBzcGxpdCwgc28gdGhhdCBhdCBhbnkgZ2l2ZW4gdGltZSwgdGhlcmUKK2NhbiBiZSBhbnkgbnVtYmVyIG9mIHBvc3NpYmxlIHBhcnNlcyBiZWluZyBleHBsb3JlZC4gIFRoZSBwYXJzZXJzCitwcm9jZWVkIGluIGxvY2tzdGVwOyB0aGF0IGlzLCBhbGwgb2YgdGhlbSBjb25zdW1lIChzaGlmdCkgYSBnaXZlbiBpbnB1dAorc3ltYm9sIGJlZm9yZSBhbnkgb2YgdGhlbSBwcm9jZWVkIHRvIHRoZSBuZXh0LiAgRWFjaCBvZiB0aGUgY2xvbmVkCitwYXJzZXJzIGV2ZW50dWFsbHkgbWVldHMgb25lIG9mIHR3byBwb3NzaWJsZSBmYXRlczogZWl0aGVyIGl0IHJ1bnMgaW50bworYSBwYXJzaW5nIGVycm9yLCBpbiB3aGljaCBjYXNlIGl0IHNpbXBseSB2YW5pc2hlcywgb3IgaXQgbWVyZ2VzIHdpdGgKK2Fub3RoZXIgcGFyc2VyLCBiZWNhdXNlIHRoZSB0d28gb2YgdGhlbSBoYXZlIHJlZHVjZWQgdGhlIGlucHV0IHRvIGFuCitpZGVudGljYWwgc2V0IG9mIHN5bWJvbHMuCisKK0R1cmluZyB0aGUgdGltZSB0aGF0IHRoZXJlIGFyZSBtdWx0aXBsZSBwYXJzZXJzLCBzZW1hbnRpYyBhY3Rpb25zIGFyZQorcmVjb3JkZWQsIGJ1dCBub3QgcGVyZm9ybWVkLiAgV2hlbiBhIHBhcnNlciBkaXNhcHBlYXJzLCBpdHMgcmVjb3JkZWQKK3NlbWFudGljIGFjdGlvbnMgZGlzYXBwZWFyIGFzIHdlbGwsIGFuZCBhcmUgbmV2ZXIgcGVyZm9ybWVkLiAgV2hlbiBhCityZWR1Y3Rpb24gbWFrZXMgdHdvIHBhcnNlcnMgaWRlbnRpY2FsLCBjYXVzaW5nIHRoZW0gdG8gbWVyZ2UsIEJpc29uCityZWNvcmRzIGJvdGggc2V0cyBvZiBzZW1hbnRpYyBhY3Rpb25zLiAgV2hlbmV2ZXIgdGhlIGxhc3QgdHdvIHBhcnNlcnMKK21lcmdlLCByZXZlcnRpbmcgdG8gdGhlIHNpbmdsZS1wYXJzZXIgY2FzZSwgQmlzb24gcmVzb2x2ZXMgYWxsIHRoZQorb3V0c3RhbmRpbmcgYWN0aW9ucyBlaXRoZXIgYnkgcHJlY2VkZW5jZXMgZ2l2ZW4gdG8gdGhlIGdyYW1tYXIgcnVsZXMKK2ludm9sdmVkLCBvciBieSBwZXJmb3JtaW5nIGJvdGggYWN0aW9ucywgYW5kIHRoZW4gY2FsbGluZyBhIGRlc2lnbmF0ZWQKK3VzZXItZGVmaW5lZCBmdW5jdGlvbiBvbiB0aGUgcmVzdWx0aW5nIHZhbHVlcyB0byBwcm9kdWNlIGFuIGFyYml0cmFyeQorbWVyZ2VkIHJlc3VsdC4KKworQG1lbnUKKyogU2ltcGxlIEdMUiBQYXJzZXJzOjogICAgIFVzaW5nIEdMUiBwYXJzZXJzIG9uIHVuYW1iaWd1b3VzIGdyYW1tYXJzLgorKiBNZXJnaW5nIEdMUiBQYXJzZXM6OiAgICAgVXNpbmcgR0xSIHBhcnNlcnMgdG8gcmVzb2x2ZSBhbWJpZ3VpdGllcy4KKyogR0xSIFNlbWFudGljIEFjdGlvbnM6OiAgIERlZmVycmVkIHNlbWFudGljIGFjdGlvbnMgaGF2ZSBzcGVjaWFsIGNvbmNlcm5zLgorKiBDb21waWxlciBSZXF1aXJlbWVudHM6OiAgR0xSIHBhcnNlcnMgcmVxdWlyZSBhIG1vZGVybiBDIGNvbXBpbGVyLgorQGVuZCBtZW51CisKK0Bub2RlIFNpbXBsZSBHTFIgUGFyc2VycworQHN1YnNlY3Rpb24gVXNpbmcgR0xSIG9uIFVuYW1iaWd1b3VzIEdyYW1tYXJzCitAY2luZGV4IEdMUiBwYXJzaW5nLCB1bmFtYmlndW91cyBncmFtbWFycworQGNpbmRleCBnZW5lcmFsaXplZCBMUiAoR0xSKSBwYXJzaW5nLCB1bmFtYmlndW91cyBncmFtbWFycworQGZpbmRleCAlZ2xyLXBhcnNlcgorQGZpbmRleCAlZXhwZWN0LXJyCitAY2luZGV4IGNvbmZsaWN0cworQGNpbmRleCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0cworQGNpbmRleCBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzCisKK0luIHRoZSBzaW1wbGVzdCBjYXNlcywgeW91IGNhbiB1c2UgdGhlIEdMUiBhbGdvcml0aG0KK3RvIHBhcnNlIGdyYW1tYXJzIHRoYXQgYXJlIHVuYW1iaWd1b3VzIGJ1dCBmYWlsIHRvIGJlIExSKDEpLgorU3VjaCBncmFtbWFycyB0eXBpY2FsbHkgcmVxdWlyZSBtb3JlIHRoYW4gb25lIHN5bWJvbCBvZiBsb29rYWhlYWQuCisKK0NvbnNpZGVyIGEgcHJvYmxlbSB0aGF0CithcmlzZXMgaW4gdGhlIGRlY2xhcmF0aW9uIG9mIGVudW1lcmF0ZWQgYW5kIHN1YnJhbmdlIHR5cGVzIGluIHRoZQorcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgUGFzY2FsLiAgSGVyZSBhcmUgc29tZSBleGFtcGxlczoKKworQGV4YW1wbGUKK3R5cGUgc3VicmFuZ2UgPSBsbyAuLiBoaTsKK3R5cGUgZW51bSA9IChhLCBiLCBjKTsKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK1RoZSBvcmlnaW5hbCBsYW5ndWFnZSBzdGFuZGFyZCBhbGxvd3Mgb25seSBudW1lcmljCitsaXRlcmFscyBhbmQgY29uc3RhbnQgaWRlbnRpZmllcnMgZm9yIHRoZSBzdWJyYW5nZSBib3VuZHMgKEBzYW1we2xvfQorYW5kIEBzYW1we2hpfSksIGJ1dCBFeHRlbmRlZCBQYXNjYWwgKElTTy9JRUMKKzEwMjA2KSBhbmQgbWFueSBvdGhlcgorUGFzY2FsIGltcGxlbWVudGF0aW9ucyBhbGxvdyBhcmJpdHJhcnkgZXhwcmVzc2lvbnMgdGhlcmUuICBUaGlzIGdpdmVzCityaXNlIHRvIHRoZSBmb2xsb3dpbmcgc2l0dWF0aW9uLCBjb250YWluaW5nIGEgc3VwZXJmbHVvdXMgcGFpciBvZgorcGFyZW50aGVzZXM6CisKK0BleGFtcGxlCit0eXBlIHN1YnJhbmdlID0gKGEpIC4uIGI7CitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitDb21wYXJlIHRoaXMgdG8gdGhlIGZvbGxvd2luZyBkZWNsYXJhdGlvbiBvZiBhbiBlbnVtZXJhdGVkCit0eXBlIHdpdGggb25seSBvbmUgdmFsdWU6CisKK0BleGFtcGxlCit0eXBlIGVudW0gPSAoYSk7CitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CisoVGhlc2UgZGVjbGFyYXRpb25zIGFyZSBjb250cml2ZWQsIGJ1dCB0aGV5IGFyZSBzeW50YWN0aWNhbGx5Cit2YWxpZCwgYW5kIG1vcmUtY29tcGxpY2F0ZWQgY2FzZXMgY2FuIGNvbWUgdXAgaW4gcHJhY3RpY2FsIHByb2dyYW1zLikKKworVGhlc2UgdHdvIGRlY2xhcmF0aW9ucyBsb29rIGlkZW50aWNhbCB1bnRpbCB0aGUgQHNhbXB7Li59IHRva2VuLgorV2l0aCBub3JtYWwgTFIoMSkgb25lLXRva2VuIGxvb2thaGVhZCBpdCBpcyBub3QKK3Bvc3NpYmxlIHRvIGRlY2lkZSBiZXR3ZWVuIHRoZSB0d28gZm9ybXMgd2hlbiB0aGUgaWRlbnRpZmllcgorQHNhbXB7YX0gaXMgcGFyc2VkLiAgSXQgaXMsIGhvd2V2ZXIsIGRlc2lyYWJsZQorZm9yIGEgcGFyc2VyIHRvIGRlY2lkZSB0aGlzLCBzaW5jZSBpbiB0aGUgbGF0dGVyIGNhc2UKK0BzYW1we2F9IG11c3QgYmVjb21lIGEgbmV3IGlkZW50aWZpZXIgdG8gcmVwcmVzZW50IHRoZSBlbnVtZXJhdGlvbgordmFsdWUsIHdoaWxlIGluIHRoZSBmb3JtZXIgY2FzZSBAc2FtcHthfSBtdXN0IGJlIGV2YWx1YXRlZCB3aXRoIGl0cworY3VycmVudCBtZWFuaW5nLCB3aGljaCBtYXkgYmUgYSBjb25zdGFudCBvciBldmVuIGEgZnVuY3Rpb24gY2FsbC4KKworWW91IGNvdWxkIHBhcnNlIEBzYW1weyhhKX0gYXMgYW4gYGB1bnNwZWNpZmllZCBpZGVudGlmaWVyIGluIHBhcmVudGhlc2VzJycsCit0byBiZSByZXNvbHZlZCBsYXRlciwgYnV0IHRoaXMgdHlwaWNhbGx5IHJlcXVpcmVzIHN1YnN0YW50aWFsCitjb250b3J0aW9ucyBpbiBib3RoIHNlbWFudGljIGFjdGlvbnMgYW5kIGxhcmdlIHBhcnRzIG9mIHRoZQorZ3JhbW1hciwgd2hlcmUgdGhlIHBhcmVudGhlc2VzIGFyZSBuZXN0ZWQgaW4gdGhlIHJlY3Vyc2l2ZSBydWxlcyBmb3IKK2V4cHJlc3Npb25zLgorCitZb3UgbWlnaHQgdGhpbmsgb2YgdXNpbmcgdGhlIGxleGVyIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIHR3bworZm9ybXMgYnkgcmV0dXJuaW5nIGRpZmZlcmVudCB0b2tlbnMgZm9yIGN1cnJlbnRseSBkZWZpbmVkIGFuZAordW5kZWZpbmVkIGlkZW50aWZpZXJzLiAgQnV0IGlmIHRoZXNlIGRlY2xhcmF0aW9ucyBvY2N1ciBpbiBhIGxvY2FsCitzY29wZSwgYW5kIEBzYW1we2F9IGlzIGRlZmluZWQgaW4gYW4gb3V0ZXIgc2NvcGUsIHRoZW4gYm90aCBmb3JtcworYXJlIHBvc3NpYmxlLS0tZWl0aGVyIGxvY2FsbHkgcmVkZWZpbmluZyBAc2FtcHthfSwgb3IgdXNpbmcgdGhlCit2YWx1ZSBvZiBAc2FtcHthfSBmcm9tIHRoZSBvdXRlciBzY29wZS4gIFNvIHRoaXMgYXBwcm9hY2ggY2Fubm90Cit3b3JrLgorCitBIHNpbXBsZSBzb2x1dGlvbiB0byB0aGlzIHByb2JsZW0gaXMgdG8gZGVjbGFyZSB0aGUgcGFyc2VyIHRvCit1c2UgdGhlIEdMUiBhbGdvcml0aG0uCitXaGVuIHRoZSBHTFIgcGFyc2VyIHJlYWNoZXMgdGhlIGNyaXRpY2FsIHN0YXRlLCBpdAorbWVyZWx5IHNwbGl0cyBpbnRvIHR3byBicmFuY2hlcyBhbmQgcHVyc3VlcyBib3RoIHN5bnRheCBydWxlcworc2ltdWx0YW5lb3VzbHkuICBTb29uZXIgb3IgbGF0ZXIsIG9uZSBvZiB0aGVtIHJ1bnMgaW50byBhIHBhcnNpbmcKK2Vycm9yLiAgSWYgdGhlcmUgaXMgYSBAc2FtcHsuLn0gdG9rZW4gYmVmb3JlIHRoZSBuZXh0CitAc2FtcHs7fSwgdGhlIHJ1bGUgZm9yIGVudW1lcmF0ZWQgdHlwZXMgZmFpbHMgc2luY2UgaXQgY2Fubm90CithY2NlcHQgQHNhbXB7Li59IGFueXdoZXJlOyBvdGhlcndpc2UsIHRoZSBzdWJyYW5nZSB0eXBlIHJ1bGUKK2ZhaWxzIHNpbmNlIGl0IHJlcXVpcmVzIGEgQHNhbXB7Li59IHRva2VuLiAgU28gb25lIG9mIHRoZSBicmFuY2hlcworZmFpbHMgc2lsZW50bHksIGFuZCB0aGUgb3RoZXIgb25lIGNvbnRpbnVlcyBub3JtYWxseSwgcGVyZm9ybWluZworYWxsIHRoZSBpbnRlcm1lZGlhdGUgYWN0aW9ucyB0aGF0IHdlcmUgcG9zdHBvbmVkIGR1cmluZyB0aGUgc3BsaXQuCisKK0lmIHRoZSBpbnB1dCBpcyBzeW50YWN0aWNhbGx5IGluY29ycmVjdCwgYm90aCBicmFuY2hlcyBmYWlsIGFuZCB0aGUgcGFyc2VyCityZXBvcnRzIGEgc3ludGF4IGVycm9yIGFzIHVzdWFsLgorCitUaGUgZWZmZWN0IG9mIGFsbCB0aGlzIGlzIHRoYXQgdGhlIHBhcnNlciBzZWVtcyB0byBgYGd1ZXNzJycgdGhlCitjb3JyZWN0IGJyYW5jaCB0byB0YWtlLCBvciBpbiBvdGhlciB3b3JkcywgaXQgc2VlbXMgdG8gdXNlIG1vcmUKK2xvb2thaGVhZCB0aGFuIHRoZSB1bmRlcmx5aW5nIExSKDEpIGFsZ29yaXRobSBhY3R1YWxseSBhbGxvd3MKK2Zvci4gIEluIHRoaXMgZXhhbXBsZSwgTFIoMikgd291bGQgc3VmZmljZSwgYnV0IGFsc28gc29tZSBjYXNlcwordGhhdCBhcmUgbm90IExSKEBtYXRoe2t9KSBmb3IgYW55IEBtYXRoe2t9IGNhbiBiZSBoYW5kbGVkIHRoaXMgd2F5LgorCitJbiBnZW5lcmFsLCBhIEdMUiBwYXJzZXIgY2FuIHRha2UgcXVhZHJhdGljIG9yIGN1YmljIHdvcnN0LWNhc2UgdGltZSwKK2FuZCB0aGUgY3VycmVudCBCaXNvbiBwYXJzZXIgZXZlbiB0YWtlcyBleHBvbmVudGlhbCB0aW1lIGFuZCBzcGFjZQorZm9yIHNvbWUgZ3JhbW1hcnMuICBJbiBwcmFjdGljZSwgdGhpcyByYXJlbHkgaGFwcGVucywgYW5kIGZvciBtYW55CitncmFtbWFycyBpdCBpcyBwb3NzaWJsZSB0byBwcm92ZSB0aGF0IGl0IGNhbm5vdCBoYXBwZW4uCitUaGUgcHJlc2VudCBleGFtcGxlIGNvbnRhaW5zIG9ubHkgb25lIGNvbmZsaWN0IGJldHdlZW4gdHdvCitydWxlcywgYW5kIHRoZSB0eXBlLWRlY2xhcmF0aW9uIGNvbnRleHQgY29udGFpbmluZyB0aGUgY29uZmxpY3QKK2Nhbm5vdCBiZSBuZXN0ZWQuICBTbyB0aGUgbnVtYmVyIG9mCiticmFuY2hlcyB0aGF0IGNhbiBleGlzdCBhdCBhbnkgdGltZSBpcyBsaW1pdGVkIGJ5IHRoZSBjb25zdGFudCAyLAorYW5kIHRoZSBwYXJzaW5nIHRpbWUgaXMgc3RpbGwgbGluZWFyLgorCitIZXJlIGlzIGEgQmlzb24gZ3JhbW1hciBjb3JyZXNwb25kaW5nIHRvIHRoZSBleGFtcGxlIGFib3ZlLiAgSXQKK3BhcnNlcyBhIHZhc3RseSBzaW1wbGlmaWVkIGZvcm0gb2YgUGFzY2FsIHR5cGUgZGVjbGFyYXRpb25zLgorCitAZXhhbXBsZQorJXRva2VuIFRZUEUgRE9URE9UIElECisKK0Bncm91cAorJWxlZnQgJysnICctJworJWxlZnQgJyonICcvJworQGVuZCBncm91cAorCislJQorCitAZ3JvdXAKK3R5cGVfZGVjbDogVFlQRSBJRCAnPScgdHlwZSAnOycgOworQGVuZCBncm91cAorCitAZ3JvdXAKK3R5cGU6CisgICcoJyBpZF9saXN0ICcpJworfCBleHByIERPVERPVCBleHByCis7CitAZW5kIGdyb3VwCisKK0Bncm91cAoraWRfbGlzdDoKKyAgSUQKK3wgaWRfbGlzdCAnLCcgSUQKKzsKK0BlbmQgZ3JvdXAKKworQGdyb3VwCitleHByOgorICAnKCcgZXhwciAnKScKK3wgZXhwciAnKycgZXhwcgorfCBleHByICctJyBleHByCit8IGV4cHIgJyonIGV4cHIKK3wgZXhwciAnLycgZXhwcgorfCBJRAorOworQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK1doZW4gdXNlZCBhcyBhIG5vcm1hbCBMUigxKSBncmFtbWFyLCBCaXNvbiBjb3JyZWN0bHkgY29tcGxhaW5zCithYm91dCBvbmUgcmVkdWNlL3JlZHVjZSBjb25mbGljdC4gIEluIHRoZSBjb25mbGljdGluZyBzaXR1YXRpb24gdGhlCitwYXJzZXIgY2hvb3NlcyBvbmUgb2YgdGhlIGFsdGVybmF0aXZlcywgYXJiaXRyYXJpbHkgdGhlIG9uZQorZGVjbGFyZWQgZmlyc3QuICBUaGVyZWZvcmUgdGhlIGZvbGxvd2luZyBjb3JyZWN0IGlucHV0IGlzIG5vdAorcmVjb2duaXplZDoKKworQGV4YW1wbGUKK3R5cGUgdCA9IChhKSAuLiBiOworQGVuZCBleGFtcGxlCisKK1RoZSBwYXJzZXIgY2FuIGJlIHR1cm5lZCBpbnRvIGEgR0xSIHBhcnNlciwgd2hpbGUgYWxzbyB0ZWxsaW5nIEJpc29uCit0byBiZSBzaWxlbnQgYWJvdXQgdGhlIG9uZSBrbm93biByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0LCBieSBhZGRpbmcKK3RoZXNlIHR3byBkZWNsYXJhdGlvbnMgdG8gdGhlIEJpc29uIGdyYW1tYXIgZmlsZSAoYmVmb3JlIHRoZSBmaXJzdAorQHNhbXB7JSV9KToKKworQGV4YW1wbGUKKyVnbHItcGFyc2VyCislZXhwZWN0LXJyIDEKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK05vIGNoYW5nZSBpbiB0aGUgZ3JhbW1hciBpdHNlbGYgaXMgcmVxdWlyZWQuICBOb3cgdGhlCitwYXJzZXIgcmVjb2duaXplcyBhbGwgdmFsaWQgZGVjbGFyYXRpb25zLCBhY2NvcmRpbmcgdG8gdGhlCitsaW1pdGVkIHN5bnRheCBhYm92ZSwgdHJhbnNwYXJlbnRseS4gIEluIGZhY3QsIHRoZSB1c2VyIGRvZXMgbm90IGV2ZW4KK25vdGljZSB3aGVuIHRoZSBwYXJzZXIgc3BsaXRzLgorCitTbyBoZXJlIHdlIGhhdmUgYSBjYXNlIHdoZXJlIHdlIGNhbiB1c2UgdGhlIGJlbmVmaXRzIG9mIEdMUiwKK2FsbW9zdCB3aXRob3V0IGRpc2FkdmFudGFnZXMuICBFdmVuIGluIHNpbXBsZSBjYXNlcyBsaWtlIHRoaXMsIGhvd2V2ZXIsCit0aGVyZSBhcmUgYXQgbGVhc3QgdHdvIHBvdGVudGlhbCBwcm9ibGVtcyB0byBiZXdhcmUuICBGaXJzdCwgYWx3YXlzCithbmFseXplIHRoZSBjb25mbGljdHMgcmVwb3J0ZWQgYnkgQmlzb24gdG8gbWFrZSBzdXJlIHRoYXQgR0xSCitzcGxpdHRpbmcgaXMgb25seSBkb25lIHdoZXJlIGl0IGlzIGludGVuZGVkLiAgQSBHTFIgcGFyc2VyCitzcGxpdHRpbmcgaW5hZHZlcnRlbnRseSBtYXkgY2F1c2UgcHJvYmxlbXMgbGVzcyBvYnZpb3VzIHRoYW4gYW4KK0xSIHBhcnNlciBzdGF0aWNhbGx5IGNob29zaW5nIHRoZSB3cm9uZyBhbHRlcm5hdGl2ZSBpbiBhCitjb25mbGljdC4gIFNlY29uZCwgY29uc2lkZXIgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGxleGVyIChAcHhyZWZ7U2VtYW50aWMKK1Rva2Vuc30pIHdpdGggZ3JlYXQgY2FyZS4gIFNpbmNlIGEgc3BsaXQgcGFyc2VyIGNvbnN1bWVzIHRva2VucyB3aXRob3V0CitwZXJmb3JtaW5nIGFueSBhY3Rpb25zIGR1cmluZyB0aGUgc3BsaXQsIHRoZSBsZXhlciBjYW5ub3Qgb2J0YWluCitpbmZvcm1hdGlvbiB2aWEgcGFyc2VyIGFjdGlvbnMuICBTb21lIGNhc2VzIG9mIGxleGVyIGludGVyYWN0aW9ucyBjYW4gYmUKK2VsaW1pbmF0ZWQgYnkgdXNpbmcgR0xSIHRvIHNoaWZ0IHRoZSBjb21wbGljYXRpb25zIGZyb20gdGhlCitsZXhlciB0byB0aGUgcGFyc2VyLiAgWW91IG11c3QgY2hlY2sgdGhlIHJlbWFpbmluZyBjYXNlcyBmb3IKK2NvcnJlY3RuZXNzLgorCitJbiBvdXIgZXhhbXBsZSwgaXQgd291bGQgYmUgc2FmZSBmb3IgdGhlIGxleGVyIHRvIHJldHVybiB0b2tlbnMgYmFzZWQgb24KK3RoZWlyIGN1cnJlbnQgbWVhbmluZ3MgaW4gc29tZSBzeW1ib2wgdGFibGUsIGJlY2F1c2Ugbm8gbmV3IHN5bWJvbHMgYXJlCitkZWZpbmVkIGluIHRoZSBtaWRkbGUgb2YgYSB0eXBlIGRlY2xhcmF0aW9uLiAgVGhvdWdoIGl0IGlzIHBvc3NpYmxlIGZvcgorYSBwYXJzZXIgdG8gZGVmaW5lIHRoZSBlbnVtZXJhdGlvbiBjb25zdGFudHMgYXMgdGhleSBhcmUgcGFyc2VkLCBiZWZvcmUKK3RoZSB0eXBlIGRlY2xhcmF0aW9uIGlzIGNvbXBsZXRlZCwgaXQgYWN0dWFsbHkgbWFrZXMgbm8gZGlmZmVyZW5jZSBzaW5jZQordGhleSBjYW5ub3QgYmUgdXNlZCB3aXRoaW4gdGhlIHNhbWUgZW51bWVyYXRlZCB0eXBlIGRlY2xhcmF0aW9uLgorCitAbm9kZSBNZXJnaW5nIEdMUiBQYXJzZXMKK0BzdWJzZWN0aW9uIFVzaW5nIEdMUiB0byBSZXNvbHZlIEFtYmlndWl0aWVzCitAY2luZGV4IEdMUiBwYXJzaW5nLCBhbWJpZ3VvdXMgZ3JhbW1hcnMKK0BjaW5kZXggZ2VuZXJhbGl6ZWQgTFIgKEdMUikgcGFyc2luZywgYW1iaWd1b3VzIGdyYW1tYXJzCitAZmluZGV4ICVkcHJlYworQGZpbmRleCAlbWVyZ2UKK0BjaW5kZXggY29uZmxpY3RzCitAY2luZGV4IHJlZHVjZS9yZWR1Y2UgY29uZmxpY3RzCisKK0xldCdzIGNvbnNpZGVyIGFuIGV4YW1wbGUsIHZhc3RseSBzaW1wbGlmaWVkIGZyb20gYSBDKysgZ3JhbW1hci4KKworQGV4YW1wbGUKKyVAeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgI2RlZmluZSBZWVNUWVBFIGNoYXIgY29uc3QgKgorICBpbnQgeXlsZXggKHZvaWQpOworICB2b2lkIHl5ZXJyb3IgKGNoYXIgY29uc3QgKik7CislQH0KKworJXRva2VuIFRZUEVOQU1FIElECisKKyVyaWdodCAnPScKKyVsZWZ0ICcrJworCislZ2xyLXBhcnNlcgorCislJQorCitwcm9nOgorICAvKiBOb3RoaW5nLiAgKi8KK3wgcHJvZyBzdG10ICAgQHsgcHJpbnRmICgiXG4iKTsgQH0KKzsKKworc3RtdDoKKyAgZXhwciAnOycgICVkcHJlYyAxCit8IGRlY2wgICAgICAlZHByZWMgMgorOworCitleHByOgorICBJRCAgICAgICAgICAgICAgIEB7IHByaW50ZiAoIiVzICIsICQkKTsgQH0KK3wgVFlQRU5BTUUgJygnIGV4cHIgJyknCisgICAgICAgICAgICAgICAgICAgQHsgcHJpbnRmICgiJXMgPGNhc3Q+ICIsICQxKTsgQH0KK3wgZXhwciAnKycgZXhwciAgICBAeyBwcmludGYgKCIrICIpOyBAfQorfCBleHByICc9JyBleHByICAgIEB7IHByaW50ZiAoIj0gIik7IEB9Cis7CisKK2RlY2w6CisgIFRZUEVOQU1FIGRlY2xhcmF0b3IgJzsnCisgICAgICAgICAgICAgICAgICAgQHsgcHJpbnRmICgiJXMgPGRlY2xhcmU+ICIsICQxKTsgQH0KK3wgVFlQRU5BTUUgZGVjbGFyYXRvciAnPScgZXhwciAnOycKKyAgICAgICAgICAgICAgICAgICBAeyBwcmludGYgKCIlcyA8aW5pdC1kZWNsYXJlPiAiLCAkMSk7IEB9Cis7CisKK2RlY2xhcmF0b3I6CisgIElEICAgICAgICAgICAgICAgQHsgcHJpbnRmICgiXCIlc1wiICIsICQxKTsgQH0KK3wgJygnIGRlY2xhcmF0b3IgJyknCis7CitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitUaGlzIG1vZGVscyBhIHByb2JsZW1hdGljIHBhcnQgb2YgdGhlIEMrKyBncmFtbWFyLS0tdGhlIGFtYmlndWl0eSBiZXR3ZWVuCitjZXJ0YWluIGRlY2xhcmF0aW9ucyBhbmQgc3RhdGVtZW50cy4gIEZvciBleGFtcGxlLAorCitAZXhhbXBsZQorVCAoeCkgPSB5K3o7CitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitwYXJzZXMgYXMgZWl0aGVyIGFuIEBjb2Rle2V4cHJ9IG9yIGEgQGNvZGV7c3RtdH0KKyhhc3N1bWluZyB0aGF0IEBzYW1we1R9IGlzIHJlY29nbml6ZWQgYXMgYSBAY29kZXtUWVBFTkFNRX0gYW5kCitAc2FtcHt4fSBhcyBhbiBAY29kZXtJRH0pLgorQmlzb24gZGV0ZWN0cyB0aGlzIGFzIGEgcmVkdWNlL3JlZHVjZSBjb25mbGljdCBiZXR3ZWVuIHRoZSBydWxlcworQGNvZGV7ZXhwciA6IElEfSBhbmQgQGNvZGV7ZGVjbGFyYXRvciA6IElEfSwgd2hpY2ggaXQgY2Fubm90IHJlc29sdmUgYXQgdGhlCit0aW1lIGl0IGVuY291bnRlcnMgQGNvZGV7eH0gaW4gdGhlIGV4YW1wbGUgYWJvdmUuICBTaW5jZSB0aGlzIGlzIGEKK0dMUiBwYXJzZXIsIGl0IHRoZXJlZm9yZSBzcGxpdHMgdGhlIHByb2JsZW0gaW50byB0d28gcGFyc2VzLCBvbmUgZm9yCitlYWNoIGNob2ljZSBvZiByZXNvbHZpbmcgdGhlIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3QuCitVbmxpa2UgdGhlIGV4YW1wbGUgZnJvbSB0aGUgcHJldmlvdXMgc2VjdGlvbiAoQHB4cmVme1NpbXBsZSBHTFIgUGFyc2Vyc30pLAoraG93ZXZlciwgbmVpdGhlciBvZiB0aGVzZSBwYXJzZXMgYGBkaWVzLCcnIGJlY2F1c2UgdGhlIGdyYW1tYXIgYXMgaXQgc3RhbmRzIGlzCithbWJpZ3VvdXMuICBPbmUgb2YgdGhlIHBhcnNlcnMgZXZlbnR1YWxseSByZWR1Y2VzIEBjb2Rle3N0bXQgOiBleHByICc7J30gYW5kCit0aGUgb3RoZXIgcmVkdWNlcyBAY29kZXtzdG10IDogZGVjbH0sIGFmdGVyIHdoaWNoIGJvdGggcGFyc2VycyBhcmUgaW4gYW4KK2lkZW50aWNhbCBzdGF0ZTogdGhleSd2ZSBzZWVuIEBzYW1we3Byb2cgc3RtdH0gYW5kIGhhdmUgdGhlIHNhbWUgdW5wcm9jZXNzZWQKK2lucHV0IHJlbWFpbmluZy4gIFdlIHNheSB0aGF0IHRoZXNlIHBhcnNlcyBoYXZlIEBkZm57bWVyZ2VkLn0KKworQXQgdGhpcyBwb2ludCwgdGhlIEdMUiBwYXJzZXIgcmVxdWlyZXMgYSBzcGVjaWZpY2F0aW9uIGluIHRoZQorZ3JhbW1hciBvZiBob3cgdG8gY2hvb3NlIGJldHdlZW4gdGhlIGNvbXBldGluZyBwYXJzZXMuCitJbiB0aGUgZXhhbXBsZSBhYm92ZSwgdGhlIHR3byBAY29kZXslZHByZWN9CitkZWNsYXJhdGlvbnMgc3BlY2lmeSB0aGF0IEJpc29uIGlzIHRvIGdpdmUgcHJlY2VkZW5jZQordG8gdGhlIHBhcnNlIHRoYXQgaW50ZXJwcmV0cyB0aGUgZXhhbXBsZSBhcyBhCitAY29kZXtkZWNsfSwgd2hpY2ggaW1wbGllcyB0aGF0IEBjb2Rle3h9IGlzIGEgZGVjbGFyYXRvci4KK1RoZSBwYXJzZXIgdGhlcmVmb3JlIHByaW50cworCitAZXhhbXBsZQorIngiIHkgeiArIFQgPGluaXQtZGVjbGFyZT4KK0BlbmQgZXhhbXBsZQorCitUaGUgQGNvZGV7JWRwcmVjfSBkZWNsYXJhdGlvbnMgb25seSBjb21lIGludG8gcGxheSB3aGVuIG1vcmUgdGhhbiBvbmUKK3BhcnNlIHN1cnZpdmVzLiAgQ29uc2lkZXIgYSBkaWZmZXJlbnQgaW5wdXQgc3RyaW5nIGZvciB0aGlzIHBhcnNlcjoKKworQGV4YW1wbGUKK1QgKHgpICsgeTsKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK1RoaXMgaXMgYW5vdGhlciBleGFtcGxlIG9mIHVzaW5nIEdMUiB0byBwYXJzZSBhbiB1bmFtYmlndW91cworY29uc3RydWN0LCBhcyBzaG93biBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiAoQHB4cmVme1NpbXBsZSBHTFIgUGFyc2Vyc30pLgorSGVyZSwgdGhlcmUgaXMgbm8gYW1iaWd1aXR5ICh0aGlzIGNhbm5vdCBiZSBwYXJzZWQgYXMgYSBkZWNsYXJhdGlvbikuCitIb3dldmVyLCBhdCB0aGUgdGltZSB0aGUgQmlzb24gcGFyc2VyIGVuY291bnRlcnMgQGNvZGV7eH0sIGl0IGRvZXMgbm90CitoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiB0byByZXNvbHZlIHRoZSByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0IChhZ2FpbiwKK2JldHdlZW4gQGNvZGV7eH0gYXMgYW4gQGNvZGV7ZXhwcn0gb3IgYSBAY29kZXtkZWNsYXJhdG9yfSkuICBJbiB0aGlzCitjYXNlLCBubyBwcmVjZWRlbmNlIGRlY2xhcmF0aW9uIGlzIHVzZWQuICBBZ2FpbiwgdGhlIHBhcnNlciBzcGxpdHMKK2ludG8gdHdvLCBvbmUgYXNzdW1pbmcgdGhhdCBAY29kZXt4fSBpcyBhbiBAY29kZXtleHByfSwgYW5kIHRoZSBvdGhlcgorYXNzdW1pbmcgQGNvZGV7eH0gaXMgYSBAY29kZXtkZWNsYXJhdG9yfS4gIFRoZSBzZWNvbmQgb2YgdGhlc2UgcGFyc2VycwordGhlbiB2YW5pc2hlcyB3aGVuIGl0IHNlZXMgQGNvZGV7K30sIGFuZCB0aGUgcGFyc2VyIHByaW50cworCitAZXhhbXBsZQoreCBUIDxjYXN0PiB5ICsKK0BlbmQgZXhhbXBsZQorCitTdXBwb3NlIHRoYXQgaW5zdGVhZCBvZiByZXNvbHZpbmcgdGhlIGFtYmlndWl0eSwgeW91IHdhbnRlZCB0byBzZWUgYWxsCit0aGUgcG9zc2liaWxpdGllcy4gIEZvciB0aGlzIHB1cnBvc2UsIHlvdSBtdXN0IG1lcmdlIHRoZSBzZW1hbnRpYworYWN0aW9ucyBvZiB0aGUgdHdvIHBvc3NpYmxlIHBhcnNlcnMsIHJhdGhlciB0aGFuIGNob29zaW5nIG9uZSBvdmVyIHRoZQorb3RoZXIuICBUbyBkbyBzbywgeW91IGNvdWxkIGNoYW5nZSB0aGUgZGVjbGFyYXRpb24gb2YgQGNvZGV7c3RtdH0gYXMKK2ZvbGxvd3M6CisKK0BleGFtcGxlCitzdG10OgorICBleHByICc7JyAgJW1lcmdlIDxzdG10TWVyZ2U+Cit8IGRlY2wgICAgICAlbWVyZ2UgPHN0bXRNZXJnZT4KKzsKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK2FuZCBkZWZpbmUgdGhlIEBjb2Rle3N0bXRNZXJnZX0gZnVuY3Rpb24gYXM6CisKK0BleGFtcGxlCitzdGF0aWMgWVlTVFlQRQorc3RtdE1lcmdlIChZWVNUWVBFIHgwLCBZWVNUWVBFIHgxKQorQHsKKyAgcHJpbnRmICgiPE9SPiAiKTsKKyAgcmV0dXJuICIiOworQH0KK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK3dpdGggYW4gYWNjb21wYW55aW5nIGZvcndhcmQgZGVjbGFyYXRpb24KK2luIHRoZSBDIGRlY2xhcmF0aW9ucyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlOgorCitAZXhhbXBsZQorJUB7CisgICNkZWZpbmUgWVlTVFlQRSBjaGFyIGNvbnN0ICoKKyAgc3RhdGljIFlZU1RZUEUgc3RtdE1lcmdlIChZWVNUWVBFIHgwLCBZWVNUWVBFIHgxKTsKKyVAfQorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorV2l0aCB0aGVzZSBkZWNsYXJhdGlvbnMsIHRoZSByZXN1bHRpbmcgcGFyc2VyIHBhcnNlcyB0aGUgZmlyc3QgZXhhbXBsZQorYXMgYm90aCBhbiBAY29kZXtleHByfSBhbmQgYSBAY29kZXtkZWNsfSwgYW5kIHByaW50cworCitAZXhhbXBsZQorIngiIHkgeiArIFQgPGluaXQtZGVjbGFyZT4geCBUIDxjYXN0PiB5IHogKyA9IDxPUj4KK0BlbmQgZXhhbXBsZQorCitCaXNvbiByZXF1aXJlcyB0aGF0IGFsbCBvZiB0aGUKK3Byb2R1Y3Rpb25zIHRoYXQgcGFydGljaXBhdGUgaW4gYW55IHBhcnRpY3VsYXIgbWVyZ2UgaGF2ZSBpZGVudGljYWwKK0BzYW1weyVtZXJnZX0gY2xhdXNlcy4gIE90aGVyd2lzZSwgdGhlIGFtYmlndWl0eSB3b3VsZCBiZSB1bnJlc29sdmFibGUsCithbmQgdGhlIHBhcnNlciB3aWxsIHJlcG9ydCBhbiBlcnJvciBkdXJpbmcgYW55IHBhcnNlIHRoYXQgcmVzdWx0cyBpbgordGhlIG9mZmVuZGluZyBtZXJnZS4KKworQG5vZGUgR0xSIFNlbWFudGljIEFjdGlvbnMKK0BzdWJzZWN0aW9uIEdMUiBTZW1hbnRpYyBBY3Rpb25zCisKK0BjaW5kZXggZGVmZXJyZWQgc2VtYW50aWMgYWN0aW9ucworQnkgZGVmaW5pdGlvbiwgYSBkZWZlcnJlZCBzZW1hbnRpYyBhY3Rpb24gaXMgbm90IHBlcmZvcm1lZCBhdCB0aGUgc2FtZSB0aW1lIGFzCit0aGUgYXNzb2NpYXRlZCByZWR1Y3Rpb24uCitUaGlzIHJhaXNlcyBjYXZlYXRzIGZvciBzZXZlcmFsIEJpc29uIGZlYXR1cmVzIHlvdSBtaWdodCB1c2UgaW4gYSBzZW1hbnRpYworYWN0aW9uIGluIGEgR0xSIHBhcnNlci4KKworQHZpbmRleCB5eWNoYXIKK0BjaW5kZXggR0xSIHBhcnNlcnMgYW5kIEBjb2Rle3l5Y2hhcn0KK0B2aW5kZXggeXlsdmFsCitAY2luZGV4IEdMUiBwYXJzZXJzIGFuZCBAY29kZXt5eWx2YWx9CitAdmluZGV4IHl5bGxvYworQGNpbmRleCBHTFIgcGFyc2VycyBhbmQgQGNvZGV7eXlsbG9jfQorSW4gYW55IHNlbWFudGljIGFjdGlvbiwgeW91IGNhbiBleGFtaW5lIEBjb2Rle3l5Y2hhcn0gdG8gZGV0ZXJtaW5lIHRoZSB0eXBlIG9mCit0aGUgbG9va2FoZWFkIHRva2VuIHByZXNlbnQgYXQgdGhlIHRpbWUgb2YgdGhlIGFzc29jaWF0ZWQgcmVkdWN0aW9uLgorQWZ0ZXIgY2hlY2tpbmcgdGhhdCBAY29kZXt5eWNoYXJ9IGlzIG5vdCBzZXQgdG8gQGNvZGV7WVlFTVBUWX0gb3IgQGNvZGV7WVlFT0Z9LAoreW91IGNhbiB0aGVuIGV4YW1pbmUgQGNvZGV7eXlsdmFsfSBhbmQgQGNvZGV7eXlsbG9jfSB0byBkZXRlcm1pbmUgdGhlCitsb29rYWhlYWQgdG9rZW4ncyBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24sIGlmIGFueS4KK0luIGEgbm9uZGVmZXJyZWQgc2VtYW50aWMgYWN0aW9uLCB5b3UgY2FuIGFsc28gbW9kaWZ5IGFueSBvZiB0aGVzZSB2YXJpYWJsZXMgdG8KK2luZmx1ZW5jZSBzeW50YXggYW5hbHlzaXMuCitAeHJlZntMb29rYWhlYWQsICxMb29rYWhlYWQgVG9rZW5zfS4KKworQGZpbmRleCB5eWNsZWFyaW4KK0BjaW5kZXggR0xSIHBhcnNlcnMgYW5kIEBjb2Rle3l5Y2xlYXJpbn0KK0luIGEgZGVmZXJyZWQgc2VtYW50aWMgYWN0aW9uLCBpdCdzIHRvbyBsYXRlIHRvIGluZmx1ZW5jZSBzeW50YXggYW5hbHlzaXMuCitJbiB0aGlzIGNhc2UsIEBjb2Rle3l5Y2hhcn0sIEBjb2Rle3l5bHZhbH0sIGFuZCBAY29kZXt5eWxsb2N9IGFyZSBzZXQgdG8KK3NoYWxsb3cgY29waWVzIG9mIHRoZSB2YWx1ZXMgdGhleSBoYWQgYXQgdGhlIHRpbWUgb2YgdGhlIGFzc29jaWF0ZWQgcmVkdWN0aW9uLgorRm9yIHRoaXMgcmVhc29uIGFsb25lLCBtb2RpZnlpbmcgdGhlbSBpcyBkYW5nZXJvdXMuCitNb3Jlb3ZlciwgdGhlIHJlc3VsdCBvZiBtb2RpZnlpbmcgdGhlbSBpcyB1bmRlZmluZWQgYW5kIHN1YmplY3QgdG8gY2hhbmdlIHdpdGgKK2Z1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbi4KK0ZvciBleGFtcGxlLCBpZiBhIHNlbWFudGljIGFjdGlvbiBtaWdodCBiZSBkZWZlcnJlZCwgeW91IHNob3VsZCBuZXZlciB3cml0ZSBpdAordG8gaW52b2tlIEBjb2Rle3l5Y2xlYXJpbn0gKEBweHJlZntBY3Rpb24gRmVhdHVyZXN9KSBvciB0byBhdHRlbXB0IHRvIGZyZWUKK21lbW9yeSByZWZlcmVuY2VkIGJ5IEBjb2Rle3l5bHZhbH0uCisKK0BmaW5kZXggWVlFUlJPUgorQGNpbmRleCBHTFIgcGFyc2VycyBhbmQgQGNvZGV7WVlFUlJPUn0KK0Fub3RoZXIgQmlzb24gZmVhdHVyZSByZXF1aXJpbmcgc3BlY2lhbCBjb25zaWRlcmF0aW9uIGlzIEBjb2Rle1lZRVJST1J9CisoQHB4cmVme0FjdGlvbiBGZWF0dXJlc30pLCB3aGljaCB5b3UgY2FuIGludm9rZSBpbiBhIHNlbWFudGljIGFjdGlvbiB0bworaW5pdGlhdGUgZXJyb3IgcmVjb3ZlcnkuCitEdXJpbmcgZGV0ZXJtaW5pc3RpYyBHTFIgb3BlcmF0aW9uLCB0aGUgZWZmZWN0IG9mIEBjb2Rle1lZRVJST1J9IGlzCit0aGUgc2FtZSBhcyBpdHMgZWZmZWN0IGluIGEgZGV0ZXJtaW5pc3RpYyBwYXJzZXIuCitJbiBhIGRlZmVycmVkIHNlbWFudGljIGFjdGlvbiwgaXRzIGVmZmVjdCBpcyB1bmRlZmluZWQuCitAYyBUaGUgZWZmZWN0IGlzIHByb2JhYmx5IGEgc3ludGF4IGVycm9yIGF0IHRoZSBzcGxpdCBwb2ludC4KKworQWxzbywgc2VlIEByZWZ7TG9jYXRpb24gRGVmYXVsdCBBY3Rpb24sICxEZWZhdWx0IEFjdGlvbiBmb3IgTG9jYXRpb25zfSwgd2hpY2gKK2Rlc2NyaWJlcyBhIHNwZWNpYWwgdXNhZ2Ugb2YgQGNvZGV7WVlMTE9DX0RFRkFVTFR9IGluIEdMUiBwYXJzZXJzLgorCitAbm9kZSBDb21waWxlciBSZXF1aXJlbWVudHMKK0BzdWJzZWN0aW9uIENvbnNpZGVyYXRpb25zIHdoZW4gQ29tcGlsaW5nIEdMUiBQYXJzZXJzCitAY2luZGV4IEBjb2Rle2lubGluZX0KK0BjaW5kZXggR0xSIHBhcnNlcnMgYW5kIEBjb2Rle2lubGluZX0KKworVGhlIEdMUiBwYXJzZXJzIHJlcXVpcmUgYSBjb21waWxlciBmb3IgSVNPIEM4OSBvcgorbGF0ZXIuICBJbiBhZGRpdGlvbiwgdGhleSB1c2UgdGhlIEBjb2Rle2lubGluZX0ga2V5d29yZCwgd2hpY2ggaXMgbm90CitDODksIGJ1dCBpcyBDOTkgYW5kIGlzIGEgY29tbW9uIGV4dGVuc2lvbiBpbiBwcmUtQzk5IGNvbXBpbGVycy4gIEl0IGlzCit1cCB0byB0aGUgdXNlciBvZiB0aGVzZSBwYXJzZXJzIHRvIGhhbmRsZQorcG9ydGFiaWxpdHkgaXNzdWVzLiAgRm9yIGluc3RhbmNlLCBpZiB1c2luZyBBdXRvY29uZiBhbmQgdGhlIEF1dG9jb25mCittYWNybyBAY29kZXtBQ19DX0lOTElORX0sIGEgbWVyZQorCitAZXhhbXBsZQorJUB7CisgICNpbmNsdWRlIDxjb25maWcuaD4KKyVAfQorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAord2lsbCBzdWZmaWNlLiAgT3RoZXJ3aXNlLCB3ZSBzdWdnZXN0CisKK0BleGFtcGxlCislQHsKKyAgI2lmIChfX1NURENfVkVSU0lPTl9fIDwgMTk5OTAxICYmICEgZGVmaW5lZCBfX0dOVUNfXyBcCisgICAgICAgJiYgISBkZWZpbmVkIGlubGluZSkKKyAgIyBkZWZpbmUgaW5saW5lCisgICNlbmRpZgorJUB9CitAZW5kIGV4YW1wbGUKKworQG5vZGUgTG9jYXRpb25zCitAc2VjdGlvbiBMb2NhdGlvbnMKK0BjaW5kZXggbG9jYXRpb24KK0BjaW5kZXggdGV4dHVhbCBsb2NhdGlvbgorQGNpbmRleCBsb2NhdGlvbiwgdGV4dHVhbAorCitNYW55IGFwcGxpY2F0aW9ucywgbGlrZSBpbnRlcnByZXRlcnMgb3IgY29tcGlsZXJzLCBoYXZlIHRvIHByb2R1Y2UgdmVyYm9zZQorYW5kIHVzZWZ1bCBlcnJvciBtZXNzYWdlcy4gIFRvIGFjaGlldmUgdGhpcywgb25lIG11c3QgYmUgYWJsZSB0byBrZWVwIHRyYWNrIG9mCit0aGUgQGRmbnt0ZXh0dWFsIGxvY2F0aW9ufSwgb3IgQGRmbntsb2NhdGlvbn0sIG9mIGVhY2ggc3ludGFjdGljIGNvbnN0cnVjdC4KK0Jpc29uIHByb3ZpZGVzIGEgbWVjaGFuaXNtIGZvciBoYW5kbGluZyB0aGVzZSBsb2NhdGlvbnMuCisKK0VhY2ggdG9rZW4gaGFzIGEgc2VtYW50aWMgdmFsdWUuICBJbiBhIHNpbWlsYXIgZmFzaGlvbiwgZWFjaCB0b2tlbiBoYXMgYW4KK2Fzc29jaWF0ZWQgbG9jYXRpb24sIGJ1dCB0aGUgdHlwZSBvZiBsb2NhdGlvbnMgaXMgdGhlIHNhbWUgZm9yIGFsbCB0b2tlbnMKK2FuZCBncm91cGluZ3MuICBNb3Jlb3ZlciwgdGhlIG91dHB1dCBwYXJzZXIgaXMgZXF1aXBwZWQgd2l0aCBhIGRlZmF1bHQgZGF0YQorc3RydWN0dXJlIGZvciBzdG9yaW5nIGxvY2F0aW9ucyAoQHB4cmVme1RyYWNraW5nIExvY2F0aW9uc30sIGZvciBtb3JlCitkZXRhaWxzKS4KKworTGlrZSBzZW1hbnRpYyB2YWx1ZXMsIGxvY2F0aW9ucyBjYW4gYmUgcmVhY2hlZCBpbiBhY3Rpb25zIHVzaW5nIGEgZGVkaWNhdGVkCitzZXQgb2YgY29uc3RydWN0cy4gIEluIHRoZSBleGFtcGxlIGFib3ZlLCB0aGUgbG9jYXRpb24gb2YgdGhlIHdob2xlIGdyb3VwaW5nCitpcyBAY29kZXtAQCR9LCB3aGlsZSB0aGUgbG9jYXRpb25zIG9mIHRoZSBzdWJleHByZXNzaW9ucyBhcmUgQGNvZGV7QEAxfSBhbmQKK0Bjb2Rle0BAM30uCisKK1doZW4gYSBydWxlIGlzIG1hdGNoZWQsIGEgZGVmYXVsdCBhY3Rpb24gaXMgdXNlZCB0byBjb21wdXRlIHRoZSBzZW1hbnRpYyB2YWx1ZQorb2YgaXRzIGxlZnQgaGFuZCBzaWRlIChAcHhyZWZ7QWN0aW9uc30pLiAgSW4gdGhlIHNhbWUgd2F5LCBhbm90aGVyIGRlZmF1bHQKK2FjdGlvbiBpcyB1c2VkIGZvciBsb2NhdGlvbnMuICBIb3dldmVyLCB0aGUgYWN0aW9uIGZvciBsb2NhdGlvbnMgaXMgZ2VuZXJhbAorZW5vdWdoIGZvciBtb3N0IGNhc2VzLCBtZWFuaW5nIHRoZXJlIGlzIHVzdWFsbHkgbm8gbmVlZCB0byBkZXNjcmliZSBmb3IgZWFjaAorcnVsZSBob3cgQGNvZGV7QEAkfSBzaG91bGQgYmUgZm9ybWVkLiAgV2hlbiBidWlsZGluZyBhIG5ldyBsb2NhdGlvbiBmb3IgYSBnaXZlbgorZ3JvdXBpbmcsIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZSBvdXRwdXQgcGFyc2VyIGlzIHRvIHRha2UgdGhlIGJlZ2lubmluZworb2YgdGhlIGZpcnN0IHN5bWJvbCwgYW5kIHRoZSBlbmQgb2YgdGhlIGxhc3Qgc3ltYm9sLgorCitAbm9kZSBCaXNvbiBQYXJzZXIKK0BzZWN0aW9uIEJpc29uIE91dHB1dDogdGhlIFBhcnNlciBJbXBsZW1lbnRhdGlvbiBGaWxlCitAY2luZGV4IEJpc29uIHBhcnNlcgorQGNpbmRleCBCaXNvbiB1dGlsaXR5CitAY2luZGV4IGxleGljYWwgYW5hbHl6ZXIsIHB1cnBvc2UKK0BjaW5kZXggcGFyc2VyCisKK1doZW4geW91IHJ1biBCaXNvbiwgeW91IGdpdmUgaXQgYSBCaXNvbiBncmFtbWFyIGZpbGUgYXMgaW5wdXQuICBUaGUKK21vc3QgaW1wb3J0YW50IG91dHB1dCBpcyBhIEMgc291cmNlIGZpbGUgdGhhdCBpbXBsZW1lbnRzIGEgcGFyc2VyIGZvcgordGhlIGxhbmd1YWdlIGRlc2NyaWJlZCBieSB0aGUgZ3JhbW1hci4gIFRoaXMgcGFyc2VyIGlzIGNhbGxlZCBhCitAZGZue0Jpc29uIHBhcnNlcn0sIGFuZCB0aGlzIGZpbGUgaXMgY2FsbGVkIGEgQGRmbntCaXNvbiBwYXJzZXIKK2ltcGxlbWVudGF0aW9uIGZpbGV9LiAgS2VlcCBpbiBtaW5kIHRoYXQgdGhlIEJpc29uIHV0aWxpdHkgYW5kIHRoZQorQmlzb24gcGFyc2VyIGFyZSB0d28gZGlzdGluY3QgcHJvZ3JhbXM6IHRoZSBCaXNvbiB1dGlsaXR5IGlzIGEgcHJvZ3JhbQord2hvc2Ugb3V0cHV0IGlzIHRoZSBCaXNvbiBwYXJzZXIgaW1wbGVtZW50YXRpb24gZmlsZSB0aGF0IGJlY29tZXMgcGFydAorb2YgeW91ciBwcm9ncmFtLgorCitUaGUgam9iIG9mIHRoZSBCaXNvbiBwYXJzZXIgaXMgdG8gZ3JvdXAgdG9rZW5zIGludG8gZ3JvdXBpbmdzIGFjY29yZGluZyB0bwordGhlIGdyYW1tYXIgcnVsZXMtLS1mb3IgZXhhbXBsZSwgdG8gYnVpbGQgaWRlbnRpZmllcnMgYW5kIG9wZXJhdG9ycyBpbnRvCitleHByZXNzaW9ucy4gIEFzIGl0IGRvZXMgdGhpcywgaXQgcnVucyB0aGUgYWN0aW9ucyBmb3IgdGhlIGdyYW1tYXIgcnVsZXMgaXQKK3VzZXMuCisKK1RoZSB0b2tlbnMgY29tZSBmcm9tIGEgZnVuY3Rpb24gY2FsbGVkIHRoZSBAZGZue2xleGljYWwgYW5hbHl6ZXJ9IHRoYXQKK3lvdSBtdXN0IHN1cHBseSBpbiBzb21lIGZhc2hpb24gKHN1Y2ggYXMgYnkgd3JpdGluZyBpdCBpbiBDKS4gIFRoZSBCaXNvbgorcGFyc2VyIGNhbGxzIHRoZSBsZXhpY2FsIGFuYWx5emVyIGVhY2ggdGltZSBpdCB3YW50cyBhIG5ldyB0b2tlbi4gIEl0Citkb2Vzbid0IGtub3cgd2hhdCBpcyBgYGluc2lkZScnIHRoZSB0b2tlbnMgKHRob3VnaCB0aGVpciBzZW1hbnRpYyB2YWx1ZXMKK21heSByZWZsZWN0IHRoaXMpLiAgVHlwaWNhbGx5IHRoZSBsZXhpY2FsIGFuYWx5emVyIG1ha2VzIHRoZSB0b2tlbnMgYnkKK3BhcnNpbmcgY2hhcmFjdGVycyBvZiB0ZXh0LCBidXQgQmlzb24gZG9lcyBub3QgZGVwZW5kIG9uIHRoaXMuCitAeHJlZntMZXhpY2FsLCAsVGhlIExleGljYWwgQW5hbHl6ZXIgRnVuY3Rpb24gQGNvZGV7eXlsZXh9fS4KKworVGhlIEJpc29uIHBhcnNlciBpbXBsZW1lbnRhdGlvbiBmaWxlIGlzIEMgY29kZSB3aGljaCBkZWZpbmVzIGEKK2Z1bmN0aW9uIG5hbWVkIEBjb2Rle3l5cGFyc2V9IHdoaWNoIGltcGxlbWVudHMgdGhhdCBncmFtbWFyLiAgVGhpcworZnVuY3Rpb24gZG9lcyBub3QgbWFrZSBhIGNvbXBsZXRlIEMgcHJvZ3JhbTogeW91IG11c3Qgc3VwcGx5IHNvbWUKK2FkZGl0aW9uYWwgZnVuY3Rpb25zLiAgT25lIGlzIHRoZSBsZXhpY2FsIGFuYWx5emVyLiAgQW5vdGhlciBpcyBhbgorZXJyb3ItcmVwb3J0aW5nIGZ1bmN0aW9uIHdoaWNoIHRoZSBwYXJzZXIgY2FsbHMgdG8gcmVwb3J0IGFuIGVycm9yLgorSW4gYWRkaXRpb24sIGEgY29tcGxldGUgQyBwcm9ncmFtIG11c3Qgc3RhcnQgd2l0aCBhIGZ1bmN0aW9uIGNhbGxlZAorQGNvZGV7bWFpbn07IHlvdSBoYXZlIHRvIHByb3ZpZGUgdGhpcywgYW5kIGFycmFuZ2UgZm9yIGl0IHRvIGNhbGwKK0Bjb2Rle3l5cGFyc2V9IG9yIHRoZSBwYXJzZXIgd2lsbCBuZXZlciBydW4uICBAeHJlZntJbnRlcmZhY2UsICxQYXJzZXIKK0MtTGFuZ3VhZ2UgSW50ZXJmYWNlfS4KKworQXNpZGUgZnJvbSB0aGUgdG9rZW4gdHlwZSBuYW1lcyBhbmQgdGhlIHN5bWJvbHMgaW4gdGhlIGFjdGlvbnMgeW91Cit3cml0ZSwgYWxsIHN5bWJvbHMgZGVmaW5lZCBpbiB0aGUgQmlzb24gcGFyc2VyIGltcGxlbWVudGF0aW9uIGZpbGUKK2l0c2VsZiBiZWdpbiB3aXRoIEBzYW1we3l5fSBvciBAc2FtcHtZWX0uICBUaGlzIGluY2x1ZGVzIGludGVyZmFjZQorZnVuY3Rpb25zIHN1Y2ggYXMgdGhlIGxleGljYWwgYW5hbHl6ZXIgZnVuY3Rpb24gQGNvZGV7eXlsZXh9LCB0aGUKK2Vycm9yIHJlcG9ydGluZyBmdW5jdGlvbiBAY29kZXt5eWVycm9yfSBhbmQgdGhlIHBhcnNlciBmdW5jdGlvbgorQGNvZGV7eXlwYXJzZX0gaXRzZWxmLiAgVGhpcyBhbHNvIGluY2x1ZGVzIG51bWVyb3VzIGlkZW50aWZpZXJzIHVzZWQKK2ZvciBpbnRlcm5hbCBwdXJwb3Nlcy4gIFRoZXJlZm9yZSwgeW91IHNob3VsZCBhdm9pZCB1c2luZyBDCitpZGVudGlmaWVycyBzdGFydGluZyB3aXRoIEBzYW1we3l5fSBvciBAc2FtcHtZWX0gaW4gdGhlIEJpc29uIGdyYW1tYXIKK2ZpbGUgZXhjZXB0IGZvciB0aGUgb25lcyBkZWZpbmVkIGluIHRoaXMgbWFudWFsLiAgQWxzbywgeW91IHNob3VsZAorYXZvaWQgdXNpbmcgdGhlIEMgaWRlbnRpZmllcnMgQHNhbXB7bWFsbG9jfSBhbmQgQHNhbXB7ZnJlZX0gZm9yCithbnl0aGluZyBvdGhlciB0aGFuIHRoZWlyIHVzdWFsIG1lYW5pbmdzLgorCitJbiBzb21lIGNhc2VzIHRoZSBCaXNvbiBwYXJzZXIgaW1wbGVtZW50YXRpb24gZmlsZSBpbmNsdWRlcyBzeXN0ZW0KK2hlYWRlcnMsIGFuZCBpbiB0aG9zZSBjYXNlcyB5b3VyIGNvZGUgc2hvdWxkIHJlc3BlY3QgdGhlIGlkZW50aWZpZXJzCityZXNlcnZlZCBieSB0aG9zZSBoZWFkZXJzLiAgT24gc29tZSBub24tR05VIGhvc3RzLCBAY29kZXs8YWxsb2NhLmg+fSwKK0Bjb2RlezxtYWxsb2MuaD59LCBAY29kZXs8c3RkZGVmLmg+fSwgYW5kIEBjb2RlezxzdGRsaWIuaD59IGFyZQoraW5jbHVkZWQgYXMgbmVlZGVkIHRvIGRlY2xhcmUgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIHJlbGF0ZWQgdHlwZXMuCitAY29kZXs8bGliaW50bC5oPn0gaXMgaW5jbHVkZWQgaWYgbWVzc2FnZSB0cmFuc2xhdGlvbiBpcyBpbiB1c2UKKyhAcHhyZWZ7SW50ZXJuYXRpb25hbGl6YXRpb259KS4gIE90aGVyIHN5c3RlbSBoZWFkZXJzIG1heSBiZSBpbmNsdWRlZAoraWYgeW91IGRlZmluZSBAY29kZXtZWURFQlVHfSB0byBhIG5vbnplcm8gdmFsdWUgKEBweHJlZntUcmFjaW5nLAorLFRyYWNpbmcgWW91ciBQYXJzZXJ9KS4KKworQG5vZGUgU3RhZ2VzCitAc2VjdGlvbiBTdGFnZXMgaW4gVXNpbmcgQmlzb24KK0BjaW5kZXggc3RhZ2VzIGluIHVzaW5nIEJpc29uCitAY2luZGV4IHVzaW5nIEJpc29uCisKK1RoZSBhY3R1YWwgbGFuZ3VhZ2UtZGVzaWduIHByb2Nlc3MgdXNpbmcgQmlzb24sIGZyb20gZ3JhbW1hciBzcGVjaWZpY2F0aW9uCit0byBhIHdvcmtpbmcgY29tcGlsZXIgb3IgaW50ZXJwcmV0ZXIsIGhhcyB0aGVzZSBwYXJ0czoKKworQGVudW1lcmF0ZQorQGl0ZW0KK0Zvcm1hbGx5IHNwZWNpZnkgdGhlIGdyYW1tYXIgaW4gYSBmb3JtIHJlY29nbml6ZWQgYnkgQmlzb24KKyhAcHhyZWZ7R3JhbW1hciBGaWxlLCAsQmlzb24gR3JhbW1hciBGaWxlc30pLiAgRm9yIGVhY2ggZ3JhbW1hdGljYWwgcnVsZQoraW4gdGhlIGxhbmd1YWdlLCBkZXNjcmliZSB0aGUgYWN0aW9uIHRoYXQgaXMgdG8gYmUgdGFrZW4gd2hlbiBhbgoraW5zdGFuY2Ugb2YgdGhhdCBydWxlIGlzIHJlY29nbml6ZWQuICBUaGUgYWN0aW9uIGlzIGRlc2NyaWJlZCBieSBhCitzZXF1ZW5jZSBvZiBDIHN0YXRlbWVudHMuCisKK0BpdGVtCitXcml0ZSBhIGxleGljYWwgYW5hbHl6ZXIgdG8gcHJvY2VzcyBpbnB1dCBhbmQgcGFzcyB0b2tlbnMgdG8gdGhlIHBhcnNlci4KK1RoZSBsZXhpY2FsIGFuYWx5emVyIG1heSBiZSB3cml0dGVuIGJ5IGhhbmQgaW4gQyAoQHB4cmVme0xleGljYWwsICxUaGUKK0xleGljYWwgQW5hbHl6ZXIgRnVuY3Rpb24gQGNvZGV7eXlsZXh9fSkuICBJdCBjb3VsZCBhbHNvIGJlIHByb2R1Y2VkCit1c2luZyBMZXgsIGJ1dCB0aGUgdXNlIG9mIExleCBpcyBub3QgZGlzY3Vzc2VkIGluIHRoaXMgbWFudWFsLgorCitAaXRlbQorV3JpdGUgYSBjb250cm9sbGluZyBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBCaXNvbi1wcm9kdWNlZCBwYXJzZXIuCisKK0BpdGVtCitXcml0ZSBlcnJvci1yZXBvcnRpbmcgcm91dGluZXMuCitAZW5kIGVudW1lcmF0ZQorCitUbyB0dXJuIHRoaXMgc291cmNlIGNvZGUgYXMgd3JpdHRlbiBpbnRvIGEgcnVubmFibGUgcHJvZ3JhbSwgeW91CittdXN0IGZvbGxvdyB0aGVzZSBzdGVwczoKKworQGVudW1lcmF0ZQorQGl0ZW0KK1J1biBCaXNvbiBvbiB0aGUgZ3JhbW1hciB0byBwcm9kdWNlIHRoZSBwYXJzZXIuCisKK0BpdGVtCitDb21waWxlIHRoZSBjb2RlIG91dHB1dCBieSBCaXNvbiwgYXMgd2VsbCBhcyBhbnkgb3RoZXIgc291cmNlIGZpbGVzLgorCitAaXRlbQorTGluayB0aGUgb2JqZWN0IGZpbGVzIHRvIHByb2R1Y2UgdGhlIGZpbmlzaGVkIHByb2R1Y3QuCitAZW5kIGVudW1lcmF0ZQorCitAbm9kZSBHcmFtbWFyIExheW91dAorQHNlY3Rpb24gVGhlIE92ZXJhbGwgTGF5b3V0IG9mIGEgQmlzb24gR3JhbW1hcgorQGNpbmRleCBncmFtbWFyIGZpbGUKK0BjaW5kZXggZmlsZSBmb3JtYXQKK0BjaW5kZXggZm9ybWF0IG9mIGdyYW1tYXIgZmlsZQorQGNpbmRleCBsYXlvdXQgb2YgQmlzb24gZ3JhbW1hcgorCitUaGUgaW5wdXQgZmlsZSBmb3IgdGhlIEJpc29uIHV0aWxpdHkgaXMgYSBAZGZue0Jpc29uIGdyYW1tYXIgZmlsZX0uICBUaGUKK2dlbmVyYWwgZm9ybSBvZiBhIEJpc29uIGdyYW1tYXIgZmlsZSBpcyBhcyBmb2xsb3dzOgorCitAZXhhbXBsZQorJUB7CitAdmFye1Byb2xvZ3VlfQorJUB9CisKK0B2YXJ7Qmlzb24gZGVjbGFyYXRpb25zfQorCislJQorQHZhcntHcmFtbWFyIHJ1bGVzfQorJSUKK0B2YXJ7RXBpbG9ndWV9CitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitUaGUgQHNhbXB7JSV9LCBAc2FtcHslQHt9IGFuZCBAc2FtcHslQH19IGFyZSBwdW5jdHVhdGlvbiB0aGF0IGFwcGVhcnMKK2luIGV2ZXJ5IEJpc29uIGdyYW1tYXIgZmlsZSB0byBzZXBhcmF0ZSB0aGUgc2VjdGlvbnMuCisKK1RoZSBwcm9sb2d1ZSBtYXkgZGVmaW5lIHR5cGVzIGFuZCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgYWN0aW9ucy4gIFlvdSBjYW4KK2Fsc28gdXNlIHByZXByb2Nlc3NvciBjb21tYW5kcyB0byBkZWZpbmUgbWFjcm9zIHVzZWQgdGhlcmUsIGFuZCB1c2UKK0Bjb2RleyNpbmNsdWRlfSB0byBpbmNsdWRlIGhlYWRlciBmaWxlcyB0aGF0IGRvIGFueSBvZiB0aGVzZSB0aGluZ3MuCitZb3UgbmVlZCB0byBkZWNsYXJlIHRoZSBsZXhpY2FsIGFuYWx5emVyIEBjb2Rle3l5bGV4fSBhbmQgdGhlIGVycm9yCitwcmludGVyIEBjb2Rle3l5ZXJyb3J9IGhlcmUsIGFsb25nIHdpdGggYW55IG90aGVyIGdsb2JhbCBpZGVudGlmaWVycwordXNlZCBieSB0aGUgYWN0aW9ucyBpbiB0aGUgZ3JhbW1hciBydWxlcy4KKworVGhlIEJpc29uIGRlY2xhcmF0aW9ucyBkZWNsYXJlIHRoZSBuYW1lcyBvZiB0aGUgdGVybWluYWwgYW5kIG5vbnRlcm1pbmFsCitzeW1ib2xzLCBhbmQgbWF5IGFsc28gZGVzY3JpYmUgb3BlcmF0b3IgcHJlY2VkZW5jZSBhbmQgdGhlIGRhdGEgdHlwZXMgb2YKK3NlbWFudGljIHZhbHVlcyBvZiB2YXJpb3VzIHN5bWJvbHMuCisKK1RoZSBncmFtbWFyIHJ1bGVzIGRlZmluZSBob3cgdG8gY29uc3RydWN0IGVhY2ggbm9udGVybWluYWwgc3ltYm9sIGZyb20gaXRzCitwYXJ0cy4KKworVGhlIGVwaWxvZ3VlIGNhbiBjb250YWluIGFueSBjb2RlIHlvdSB3YW50IHRvIHVzZS4gIE9mdGVuIHRoZQorZGVmaW5pdGlvbnMgb2YgZnVuY3Rpb25zIGRlY2xhcmVkIGluIHRoZSBwcm9sb2d1ZSBnbyBoZXJlLiAgSW4gYQorc2ltcGxlIHByb2dyYW0sIGFsbCB0aGUgcmVzdCBvZiB0aGUgcHJvZ3JhbSBjYW4gZ28gaGVyZS4KKworQG5vZGUgRXhhbXBsZXMKK0BjaGFwdGVyIEV4YW1wbGVzCitAY2luZGV4IHNpbXBsZSBleGFtcGxlcworQGNpbmRleCBleGFtcGxlcywgc2ltcGxlCisKK05vdyB3ZSBzaG93IGFuZCBleHBsYWluIHNldmVyYWwgc2FtcGxlIHByb2dyYW1zIHdyaXR0ZW4gdXNpbmcgQmlzb246IGEKK3JldmVyc2UgcG9saXNoIG5vdGF0aW9uIGNhbGN1bGF0b3IsIGFuIGFsZ2VicmFpYyAoaW5maXgpIG5vdGF0aW9uCitjYWxjdWxhdG9yIC0tLSBsYXRlciBleHRlbmRlZCB0byB0cmFjayBgYGxvY2F0aW9ucycnIC0tLQorYW5kIGEgbXVsdGktZnVuY3Rpb24gY2FsY3VsYXRvci4gIEFsbAorcHJvZHVjZSB1c2FibGUsIHRob3VnaCBsaW1pdGVkLCBpbnRlcmFjdGl2ZSBkZXNrLXRvcCBjYWxjdWxhdG9ycy4KKworVGhlc2UgZXhhbXBsZXMgYXJlIHNpbXBsZSwgYnV0IEJpc29uIGdyYW1tYXJzIGZvciByZWFsIHByb2dyYW1taW5nCitsYW5ndWFnZXMgYXJlIHdyaXR0ZW4gdGhlIHNhbWUgd2F5LiAgWW91IGNhbiBjb3B5IHRoZXNlIGV4YW1wbGVzIGludG8gYQorc291cmNlIGZpbGUgdG8gdHJ5IHRoZW0uCisKK0BtZW51CisqIFJQTiBDYWxjOjogICAgICAgICAgICAgICBSZXZlcnNlIHBvbGlzaCBub3RhdGlvbiBjYWxjdWxhdG9yOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIGZpcnN0IGV4YW1wbGUgd2l0aCBubyBvcGVyYXRvciBwcmVjZWRlbmNlLgorKiBJbmZpeCBDYWxjOjogICAgICAgICAgICAgSW5maXggKGFsZ2VicmFpYykgbm90YXRpb24gY2FsY3VsYXRvci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3IgcHJlY2VkZW5jZSBpcyBpbnRyb2R1Y2VkLgorKiBTaW1wbGUgRXJyb3IgUmVjb3Zlcnk6OiAgQ29udGludWluZyBhZnRlciBzeW50YXggZXJyb3JzLgorKiBMb2NhdGlvbiBUcmFja2luZyBDYWxjOjogRGVtb25zdHJhdGluZyB0aGUgdXNlIG9mIEBAQHZhcntufSBhbmQgQEAkLgorKiBNdWx0aS1mdW5jdGlvbiBDYWxjOjogICAgQ2FsY3VsYXRvciB3aXRoIG1lbW9yeSBhbmQgdHJpZyBmdW5jdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IHVzZXMgbXVsdGlwbGUgZGF0YS10eXBlcyBmb3Igc2VtYW50aWMgdmFsdWVzLgorKiBFeGVyY2lzZXM6OiAgICAgICAgICAgICAgSWRlYXMgZm9yIGltcHJvdmluZyB0aGUgbXVsdGktZnVuY3Rpb24gY2FsY3VsYXRvci4KK0BlbmQgbWVudQorCitAbm9kZSBSUE4gQ2FsYworQHNlY3Rpb24gUmV2ZXJzZSBQb2xpc2ggTm90YXRpb24gQ2FsY3VsYXRvcgorQGNpbmRleCByZXZlcnNlIHBvbGlzaCBub3RhdGlvbgorQGNpbmRleCBwb2xpc2ggbm90YXRpb24gY2FsY3VsYXRvcgorQGNpbmRleCBAY29kZXtycGNhbGN9CitAY2luZGV4IGNhbGN1bGF0b3IsIHNpbXBsZQorCitUaGUgZmlyc3QgZXhhbXBsZSBpcyB0aGF0IG9mIGEgc2ltcGxlIGRvdWJsZS1wcmVjaXNpb24gQGRmbntyZXZlcnNlIHBvbGlzaAorbm90YXRpb259IGNhbGN1bGF0b3IgKGEgY2FsY3VsYXRvciB1c2luZyBwb3N0Zml4IG9wZXJhdG9ycykuICBUaGlzIGV4YW1wbGUKK3Byb3ZpZGVzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgc2luY2Ugb3BlcmF0b3IgcHJlY2VkZW5jZSBpcyBub3QgYW4gaXNzdWUuCitUaGUgc2Vjb25kIGV4YW1wbGUgd2lsbCBpbGx1c3RyYXRlIGhvdyBvcGVyYXRvciBwcmVjZWRlbmNlIGlzIGhhbmRsZWQuCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgdGhpcyBjYWxjdWxhdG9yIGlzIG5hbWVkIEBmaWxle3JwY2FsYy55fS4gIFRoZQorQHNhbXB7Lnl9IGV4dGVuc2lvbiBpcyBhIGNvbnZlbnRpb24gdXNlZCBmb3IgQmlzb24gZ3JhbW1hciBmaWxlcy4KKworQG1lbnUKKyogUnBjYWxjIERlY2xhcmF0aW9uczo6ICAgIFByb2xvZ3VlIChkZWNsYXJhdGlvbnMpIGZvciBycGNhbGMuCisqIFJwY2FsYyBSdWxlczo6ICAgICAgICAgICBHcmFtbWFyIFJ1bGVzIGZvciBycGNhbGMsIHdpdGggZXhwbGFuYXRpb24uCisqIFJwY2FsYyBMZXhlcjo6ICAgICAgICAgICBUaGUgbGV4aWNhbCBhbmFseXplci4KKyogUnBjYWxjIE1haW46OiAgICAgICAgICAgIFRoZSBjb250cm9sbGluZyBmdW5jdGlvbi4KKyogUnBjYWxjIEVycm9yOjogICAgICAgICAgIFRoZSBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uCisqIFJwY2FsYyBHZW5lcmF0ZTo6ICAgICAgICBSdW5uaW5nIEJpc29uIG9uIHRoZSBncmFtbWFyIGZpbGUuCisqIFJwY2FsYyBDb21waWxlOjogICAgICAgICBSdW4gdGhlIEMgY29tcGlsZXIgb24gdGhlIG91dHB1dCBjb2RlLgorQGVuZCBtZW51CisKK0Bub2RlIFJwY2FsYyBEZWNsYXJhdGlvbnMKK0BzdWJzZWN0aW9uIERlY2xhcmF0aW9ucyBmb3IgQGNvZGV7cnBjYWxjfQorCitIZXJlIGFyZSB0aGUgQyBhbmQgQmlzb24gZGVjbGFyYXRpb25zIGZvciB0aGUgcmV2ZXJzZSBwb2xpc2ggbm90YXRpb24KK2NhbGN1bGF0b3IuICBBcyBpbiBDLCBjb21tZW50cyBhcmUgcGxhY2VkIGJldHdlZW4gQHNhbXB7LypAZG90c3t9Ki99LgorCitAZXhhbXBsZQorLyogUmV2ZXJzZSBwb2xpc2ggbm90YXRpb24gY2FsY3VsYXRvci4gICovCisKKyVAeworICAjZGVmaW5lIFlZU1RZUEUgZG91YmxlCisgICNpbmNsdWRlIDxtYXRoLmg+CisgIGludCB5eWxleCAodm9pZCk7CisgIHZvaWQgeXllcnJvciAoY2hhciBjb25zdCAqKTsKKyVAfQorCisldG9rZW4gTlVNCisKKyUlIC8qIEdyYW1tYXIgcnVsZXMgYW5kIGFjdGlvbnMgZm9sbG93LiAgKi8KK0BlbmQgZXhhbXBsZQorCitUaGUgZGVjbGFyYXRpb25zIHNlY3Rpb24gKEBweHJlZntQcm9sb2d1ZSwgLCBUaGUgcHJvbG9ndWV9KSBjb250YWlucyB0d28KK3ByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGFuZCB0d28gZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKK1RoZSBAY29kZXsjZGVmaW5lfSBkaXJlY3RpdmUgZGVmaW5lcyB0aGUgbWFjcm8gQGNvZGV7WVlTVFlQRX0sIHRodXMKK3NwZWNpZnlpbmcgdGhlIEMgZGF0YSB0eXBlIGZvciBzZW1hbnRpYyB2YWx1ZXMgb2YgYm90aCB0b2tlbnMgYW5kCitncm91cGluZ3MgKEBweHJlZntWYWx1ZSBUeXBlLCAsRGF0YSBUeXBlcyBvZiBTZW1hbnRpYyBWYWx1ZXN9KS4gIFRoZQorQmlzb24gcGFyc2VyIHdpbGwgdXNlIHdoYXRldmVyIHR5cGUgQGNvZGV7WVlTVFlQRX0gaXMgZGVmaW5lZCBhczsgaWYgeW91Citkb24ndCBkZWZpbmUgaXQsIEBjb2Rle2ludH0gaXMgdGhlIGRlZmF1bHQuICBCZWNhdXNlIHdlIHNwZWNpZnkKK0Bjb2Rle2RvdWJsZX0sIGVhY2ggdG9rZW4gYW5kIGVhY2ggZXhwcmVzc2lvbiBoYXMgYW4gYXNzb2NpYXRlZCB2YWx1ZSwKK3doaWNoIGlzIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLgorCitUaGUgQGNvZGV7I2luY2x1ZGV9IGRpcmVjdGl2ZSBpcyB1c2VkIHRvIGRlY2xhcmUgdGhlIGV4cG9uZW50aWF0aW9uCitmdW5jdGlvbiBAY29kZXtwb3d9LgorCitUaGUgZm9yd2FyZCBkZWNsYXJhdGlvbnMgZm9yIEBjb2Rle3l5bGV4fSBhbmQgQGNvZGV7eXllcnJvcn0gYXJlCituZWVkZWQgYmVjYXVzZSB0aGUgQyBsYW5ndWFnZSByZXF1aXJlcyB0aGF0IGZ1bmN0aW9ucyBiZSBkZWNsYXJlZAorYmVmb3JlIHRoZXkgYXJlIHVzZWQuICBUaGVzZSBmdW5jdGlvbnMgd2lsbCBiZSBkZWZpbmVkIGluIHRoZQorZXBpbG9ndWUsIGJ1dCB0aGUgcGFyc2VyIGNhbGxzIHRoZW0gc28gdGhleSBtdXN0IGJlIGRlY2xhcmVkIGluIHRoZQorcHJvbG9ndWUuCisKK1RoZSBzZWNvbmQgc2VjdGlvbiwgQmlzb24gZGVjbGFyYXRpb25zLCBwcm92aWRlcyBpbmZvcm1hdGlvbiB0byBCaXNvbgorYWJvdXQgdGhlIHRva2VuIHR5cGVzIChAcHhyZWZ7Qmlzb24gRGVjbGFyYXRpb25zLCAsVGhlIEJpc29uCitEZWNsYXJhdGlvbnMgU2VjdGlvbn0pLiAgRWFjaCB0ZXJtaW5hbCBzeW1ib2wgdGhhdCBpcyBub3QgYQorc2luZ2xlLWNoYXJhY3RlciBsaXRlcmFsIG11c3QgYmUgZGVjbGFyZWQgaGVyZS4gIChTaW5nbGUtY2hhcmFjdGVyCitsaXRlcmFscyBub3JtYWxseSBkb24ndCBuZWVkIHRvIGJlIGRlY2xhcmVkLikgIEluIHRoaXMgZXhhbXBsZSwgYWxsIHRoZQorYXJpdGhtZXRpYyBvcGVyYXRvcnMgYXJlIGRlc2lnbmF0ZWQgYnkgc2luZ2xlLWNoYXJhY3RlciBsaXRlcmFscywgc28gdGhlCitvbmx5IHRlcm1pbmFsIHN5bWJvbCB0aGF0IG5lZWRzIHRvIGJlIGRlY2xhcmVkIGlzIEBjb2Rle05VTX0sIHRoZSB0b2tlbgordHlwZSBmb3IgbnVtZXJpYyBjb25zdGFudHMuCisKK0Bub2RlIFJwY2FsYyBSdWxlcworQHN1YnNlY3Rpb24gR3JhbW1hciBSdWxlcyBmb3IgQGNvZGV7cnBjYWxjfQorCitIZXJlIGFyZSB0aGUgZ3JhbW1hciBydWxlcyBmb3IgdGhlIHJldmVyc2UgcG9saXNoIG5vdGF0aW9uIGNhbGN1bGF0b3IuCisKK0BleGFtcGxlCitAZ3JvdXAKK2lucHV0OgorICAvKiBlbXB0eSAqLworfCBpbnB1dCBsaW5lCis7CitAZW5kIGdyb3VwCisKK0Bncm91cAorbGluZToKKyAgJ1xuJworfCBleHAgJ1xuJyAgICAgIEB7IHByaW50ZiAoIiUuMTBnXG4iLCAkMSk7IEB9Cis7CitAZW5kIGdyb3VwCisKK0Bncm91cAorZXhwOgorICBOVU0gICAgICAgICAgIEB7ICQkID0gJDE7ICAgICAgICAgICBAfQorfCBleHAgZXhwICcrJyAgIEB7ICQkID0gJDEgKyAkMjsgICAgICBAfQorfCBleHAgZXhwICctJyAgIEB7ICQkID0gJDEgLSAkMjsgICAgICBAfQorfCBleHAgZXhwICcqJyAgIEB7ICQkID0gJDEgKiAkMjsgICAgICBAfQorfCBleHAgZXhwICcvJyAgIEB7ICQkID0gJDEgLyAkMjsgICAgICBAfQorfCBleHAgZXhwICdeJyAgIEB7ICQkID0gcG93ICgkMSwgJDIpOyBAfSAgLyogRXhwb25lbnRpYXRpb24gKi8KK3wgZXhwICduJyAgICAgICBAeyAkJCA9IC0kMTsgICAgICAgICAgQH0gIC8qIFVuYXJ5IG1pbnVzICAgICovCis7CitAZW5kIGdyb3VwCislJQorQGVuZCBleGFtcGxlCisKK1RoZSBncm91cGluZ3Mgb2YgdGhlIHJwY2FsYyBgYGxhbmd1YWdlJycgZGVmaW5lZCBoZXJlIGFyZSB0aGUgZXhwcmVzc2lvbgorKGdpdmVuIHRoZSBuYW1lIEBjb2Rle2V4cH0pLCB0aGUgbGluZSBvZiBpbnB1dCAoQGNvZGV7bGluZX0pLCBhbmQgdGhlCitjb21wbGV0ZSBpbnB1dCB0cmFuc2NyaXB0IChAY29kZXtpbnB1dH0pLiAgRWFjaCBvZiB0aGVzZSBub250ZXJtaW5hbAorc3ltYm9scyBoYXMgc2V2ZXJhbCBhbHRlcm5hdGUgcnVsZXMsIGpvaW5lZCBieSB0aGUgdmVydGljYWwgYmFyIEBzYW1we3x9Cit3aGljaCBpcyByZWFkIGFzIGBgb3InJy4gIFRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZXhwbGFpbiB3aGF0IHRoZXNlIHJ1bGVzCittZWFuLgorCitUaGUgc2VtYW50aWNzIG9mIHRoZSBsYW5ndWFnZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBhY3Rpb25zIHRha2VuIHdoZW4gYQorZ3JvdXBpbmcgaXMgcmVjb2duaXplZC4gIFRoZSBhY3Rpb25zIGFyZSB0aGUgQyBjb2RlIHRoYXQgYXBwZWFycyBpbnNpZGUKK2JyYWNlcy4gIEB4cmVme0FjdGlvbnN9LgorCitZb3UgbXVzdCBzcGVjaWZ5IHRoZXNlIGFjdGlvbnMgaW4gQywgYnV0IEJpc29uIHByb3ZpZGVzIHRoZSBtZWFucyBmb3IKK3Bhc3Npbmcgc2VtYW50aWMgdmFsdWVzIGJldHdlZW4gdGhlIHJ1bGVzLiAgSW4gZWFjaCBhY3Rpb24sIHRoZQorcHNldWRvLXZhcmlhYmxlIEBjb2RleyQkfSBzdGFuZHMgZm9yIHRoZSBzZW1hbnRpYyB2YWx1ZSBmb3IgdGhlIGdyb3VwaW5nCit0aGF0IHRoZSBydWxlIGlzIGdvaW5nIHRvIGNvbnN0cnVjdC4gIEFzc2lnbmluZyBhIHZhbHVlIHRvIEBjb2RleyQkfSBpcyB0aGUKK21haW4gam9iIG9mIG1vc3QgYWN0aW9ucy4gIFRoZSBzZW1hbnRpYyB2YWx1ZXMgb2YgdGhlIGNvbXBvbmVudHMgb2YgdGhlCitydWxlIGFyZSByZWZlcnJlZCB0byBhcyBAY29kZXskMX0sIEBjb2RleyQyfSwgYW5kIHNvIG9uLgorCitAbWVudQorKiBScGNhbGMgSW5wdXQ6OgorKiBScGNhbGMgTGluZTo6CisqIFJwY2FsYyBFeHByOjoKK0BlbmQgbWVudQorCitAbm9kZSBScGNhbGMgSW5wdXQKK0BzdWJzdWJzZWN0aW9uIEV4cGxhbmF0aW9uIG9mIEBjb2Rle2lucHV0fQorCitDb25zaWRlciB0aGUgZGVmaW5pdGlvbiBvZiBAY29kZXtpbnB1dH06CisKK0BleGFtcGxlCitpbnB1dDoKKyAgLyogZW1wdHkgKi8KK3wgaW5wdXQgbGluZQorOworQGVuZCBleGFtcGxlCisKK1RoaXMgZGVmaW5pdGlvbiByZWFkcyBhcyBmb2xsb3dzOiBgYEEgY29tcGxldGUgaW5wdXQgaXMgZWl0aGVyIGFuIGVtcHR5CitzdHJpbmcsIG9yIGEgY29tcGxldGUgaW5wdXQgZm9sbG93ZWQgYnkgYW4gaW5wdXQgbGluZScnLiAgTm90aWNlIHRoYXQKK2BgY29tcGxldGUgaW5wdXQnJyBpcyBkZWZpbmVkIGluIHRlcm1zIG9mIGl0c2VsZi4gIFRoaXMgZGVmaW5pdGlvbiBpcyBzYWlkCit0byBiZSBAZGZue2xlZnQgcmVjdXJzaXZlfSBzaW5jZSBAY29kZXtpbnB1dH0gYXBwZWFycyBhbHdheXMgYXMgdGhlCitsZWZ0bW9zdCBzeW1ib2wgaW4gdGhlIHNlcXVlbmNlLiAgQHhyZWZ7UmVjdXJzaW9uLCAsUmVjdXJzaXZlIFJ1bGVzfS4KKworVGhlIGZpcnN0IGFsdGVybmF0aXZlIGlzIGVtcHR5IGJlY2F1c2UgdGhlcmUgYXJlIG5vIHN5bWJvbHMgYmV0d2VlbiB0aGUKK2NvbG9uIGFuZCB0aGUgZmlyc3QgQHNhbXB7fH07IHRoaXMgbWVhbnMgdGhhdCBAY29kZXtpbnB1dH0gY2FuIG1hdGNoIGFuCitlbXB0eSBzdHJpbmcgb2YgaW5wdXQgKG5vIHRva2VucykuICBXZSB3cml0ZSB0aGUgcnVsZXMgdGhpcyB3YXkgYmVjYXVzZSBpdAoraXMgbGVnaXRpbWF0ZSB0byB0eXBlIEBrYmR7Q3RybC1kfSByaWdodCBhZnRlciB5b3Ugc3RhcnQgdGhlIGNhbGN1bGF0b3IuCitJdCdzIGNvbnZlbnRpb25hbCB0byBwdXQgYW4gZW1wdHkgYWx0ZXJuYXRpdmUgZmlyc3QgYW5kIHdyaXRlIHRoZSBjb21tZW50CitAc2FtcHsvKiBlbXB0eSAqL30gaW4gaXQuCisKK1RoZSBzZWNvbmQgYWx0ZXJuYXRlIHJ1bGUgKEBjb2Rle2lucHV0IGxpbmV9KSBoYW5kbGVzIGFsbCBub250cml2aWFsIGlucHV0LgorSXQgbWVhbnMsIGBgQWZ0ZXIgcmVhZGluZyBhbnkgbnVtYmVyIG9mIGxpbmVzLCByZWFkIG9uZSBtb3JlIGxpbmUgaWYKK3Bvc3NpYmxlLicnICBUaGUgbGVmdCByZWN1cnNpb24gbWFrZXMgdGhpcyBydWxlIGludG8gYSBsb29wLiAgU2luY2UgdGhlCitmaXJzdCBhbHRlcm5hdGl2ZSBtYXRjaGVzIGVtcHR5IGlucHV0LCB0aGUgbG9vcCBjYW4gYmUgZXhlY3V0ZWQgemVybyBvcgorbW9yZSB0aW1lcy4KKworVGhlIHBhcnNlciBmdW5jdGlvbiBAY29kZXt5eXBhcnNlfSBjb250aW51ZXMgdG8gcHJvY2VzcyBpbnB1dCB1bnRpbCBhCitncmFtbWF0aWNhbCBlcnJvciBpcyBzZWVuIG9yIHRoZSBsZXhpY2FsIGFuYWx5emVyIHNheXMgdGhlcmUgYXJlIG5vIG1vcmUKK2lucHV0IHRva2Vuczsgd2Ugd2lsbCBhcnJhbmdlIGZvciB0aGUgbGF0dGVyIHRvIGhhcHBlbiBhdCBlbmQtb2YtaW5wdXQuCisKK0Bub2RlIFJwY2FsYyBMaW5lCitAc3Vic3Vic2VjdGlvbiBFeHBsYW5hdGlvbiBvZiBAY29kZXtsaW5lfQorCitOb3cgY29uc2lkZXIgdGhlIGRlZmluaXRpb24gb2YgQGNvZGV7bGluZX06CisKK0BleGFtcGxlCitsaW5lOgorICAnXG4nCit8IGV4cCAnXG4nICBAeyBwcmludGYgKCIlLjEwZ1xuIiwgJDEpOyBAfQorOworQGVuZCBleGFtcGxlCisKK1RoZSBmaXJzdCBhbHRlcm5hdGl2ZSBpcyBhIHRva2VuIHdoaWNoIGlzIGEgbmV3bGluZSBjaGFyYWN0ZXI7IHRoaXMgbWVhbnMKK3RoYXQgcnBjYWxjIGFjY2VwdHMgYSBibGFuayBsaW5lIChhbmQgaWdub3JlcyBpdCwgc2luY2UgdGhlcmUgaXMgbm8KK2FjdGlvbikuICBUaGUgc2Vjb25kIGFsdGVybmF0aXZlIGlzIGFuIGV4cHJlc3Npb24gZm9sbG93ZWQgYnkgYSBuZXdsaW5lLgorVGhpcyBpcyB0aGUgYWx0ZXJuYXRpdmUgdGhhdCBtYWtlcyBycGNhbGMgdXNlZnVsLiAgVGhlIHNlbWFudGljIHZhbHVlIG9mCit0aGUgQGNvZGV7ZXhwfSBncm91cGluZyBpcyB0aGUgdmFsdWUgb2YgQGNvZGV7JDF9IGJlY2F1c2UgdGhlIEBjb2Rle2V4cH0gaW4KK3F1ZXN0aW9uIGlzIHRoZSBmaXJzdCBzeW1ib2wgaW4gdGhlIGFsdGVybmF0aXZlLiAgVGhlIGFjdGlvbiBwcmludHMgdGhpcwordmFsdWUsIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIGNvbXB1dGF0aW9uIHRoZSB1c2VyIGFza2VkIGZvci4KKworVGhpcyBhY3Rpb24gaXMgdW51c3VhbCBiZWNhdXNlIGl0IGRvZXMgbm90IGFzc2lnbiBhIHZhbHVlIHRvIEBjb2RleyQkfS4gIEFzCithIGNvbnNlcXVlbmNlLCB0aGUgc2VtYW50aWMgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBAY29kZXtsaW5lfSBpcwordW5pbml0aWFsaXplZCAoaXRzIHZhbHVlIHdpbGwgYmUgdW5wcmVkaWN0YWJsZSkuICBUaGlzIHdvdWxkIGJlIGEgYnVnIGlmCit0aGF0IHZhbHVlIHdlcmUgZXZlciB1c2VkLCBidXQgd2UgZG9uJ3QgdXNlIGl0OiBvbmNlIHJwY2FsYyBoYXMgcHJpbnRlZCB0aGUKK3ZhbHVlIG9mIHRoZSB1c2VyJ3MgaW5wdXQgbGluZSwgdGhhdCB2YWx1ZSBpcyBubyBsb25nZXIgbmVlZGVkLgorCitAbm9kZSBScGNhbGMgRXhwcgorQHN1YnN1YnNlY3Rpb24gRXhwbGFuYXRpb24gb2YgQGNvZGV7ZXhwcn0KKworVGhlIEBjb2Rle2V4cH0gZ3JvdXBpbmcgaGFzIHNldmVyYWwgcnVsZXMsIG9uZSBmb3IgZWFjaCBraW5kIG9mIGV4cHJlc3Npb24uCitUaGUgZmlyc3QgcnVsZSBoYW5kbGVzIHRoZSBzaW1wbGVzdCBleHByZXNzaW9uczogdGhvc2UgdGhhdCBhcmUganVzdCBudW1iZXJzLgorVGhlIHNlY29uZCBoYW5kbGVzIGFuIGFkZGl0aW9uLWV4cHJlc3Npb24sIHdoaWNoIGxvb2tzIGxpa2UgdHdvIGV4cHJlc3Npb25zCitmb2xsb3dlZCBieSBhIHBsdXMtc2lnbi4gIFRoZSB0aGlyZCBoYW5kbGVzIHN1YnRyYWN0aW9uLCBhbmQgc28gb24uCisKK0BleGFtcGxlCitleHA6CisgIE5VTQorfCBleHAgZXhwICcrJyAgICAgQHsgJCQgPSAkMSArICQyOyAgICBAfQorfCBleHAgZXhwICctJyAgICAgQHsgJCQgPSAkMSAtICQyOyAgICBAfQorQGRvdHN7fQorOworQGVuZCBleGFtcGxlCisKK1dlIGhhdmUgdXNlZCBAc2FtcHt8fSB0byBqb2luIGFsbCB0aGUgcnVsZXMgZm9yIEBjb2Rle2V4cH0sIGJ1dCB3ZSBjb3VsZAorZXF1YWxseSB3ZWxsIGhhdmUgd3JpdHRlbiB0aGVtIHNlcGFyYXRlbHk6CisKK0BleGFtcGxlCitleHA6IE5VTSA7CitleHA6IGV4cCBleHAgJysnICAgICBAeyAkJCA9ICQxICsgJDI7IEB9OworZXhwOiBleHAgZXhwICctJyAgICAgQHsgJCQgPSAkMSAtICQyOyBAfTsKK0Bkb3Rze30KK0BlbmQgZXhhbXBsZQorCitNb3N0IG9mIHRoZSBydWxlcyBoYXZlIGFjdGlvbnMgdGhhdCBjb21wdXRlIHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpbgordGVybXMgb2YgdGhlIHZhbHVlIG9mIGl0cyBwYXJ0cy4gIEZvciBleGFtcGxlLCBpbiB0aGUgcnVsZSBmb3IgYWRkaXRpb24sCitAY29kZXskMX0gcmVmZXJzIHRvIHRoZSBmaXJzdCBjb21wb25lbnQgQGNvZGV7ZXhwfSBhbmQgQGNvZGV7JDJ9IHJlZmVycyB0bwordGhlIHNlY29uZCBvbmUuICBUaGUgdGhpcmQgY29tcG9uZW50LCBAY29kZXsnKyd9LCBoYXMgbm8gbWVhbmluZ2Z1bAorYXNzb2NpYXRlZCBzZW1hbnRpYyB2YWx1ZSwgYnV0IGlmIGl0IGhhZCBvbmUgeW91IGNvdWxkIHJlZmVyIHRvIGl0IGFzCitAY29kZXskM30uICBXaGVuIEBjb2Rle3l5cGFyc2V9IHJlY29nbml6ZXMgYSBzdW0gZXhwcmVzc2lvbiB1c2luZyB0aGlzCitydWxlLCB0aGUgc3VtIG9mIHRoZSB0d28gc3ViZXhwcmVzc2lvbnMnIHZhbHVlcyBpcyBwcm9kdWNlZCBhcyB0aGUgdmFsdWUgb2YKK3RoZSBlbnRpcmUgZXhwcmVzc2lvbi4gIEB4cmVme0FjdGlvbnN9LgorCitZb3UgZG9uJ3QgaGF2ZSB0byBnaXZlIGFuIGFjdGlvbiBmb3IgZXZlcnkgcnVsZS4gIFdoZW4gYSBydWxlIGhhcyBubworYWN0aW9uLCBCaXNvbiBieSBkZWZhdWx0IGNvcGllcyB0aGUgdmFsdWUgb2YgQGNvZGV7JDF9IGludG8gQGNvZGV7JCR9LgorVGhpcyBpcyB3aGF0IGhhcHBlbnMgaW4gdGhlIGZpcnN0IHJ1bGUgKHRoZSBvbmUgdGhhdCB1c2VzIEBjb2Rle05VTX0pLgorCitUaGUgZm9ybWF0dGluZyBzaG93biBoZXJlIGlzIHRoZSByZWNvbW1lbmRlZCBjb252ZW50aW9uLCBidXQgQmlzb24gZG9lcworbm90IHJlcXVpcmUgaXQuICBZb3UgY2FuIGFkZCBvciBjaGFuZ2Ugd2hpdGUgc3BhY2UgYXMgbXVjaCBhcyB5b3Ugd2lzaC4KK0ZvciBleGFtcGxlLCB0aGlzOgorCitAZXhhbXBsZQorZXhwOiBOVU0gfCBleHAgZXhwICcrJyBAeyQkID0gJDEgKyAkMjsgQH0gfCBAZG90c3t9IDsKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK21lYW5zIHRoZSBzYW1lIHRoaW5nIGFzIHRoaXM6CisKK0BleGFtcGxlCitleHA6CisgIE5VTQorfCBleHAgZXhwICcrJyAgICBAeyAkJCA9ICQxICsgJDI7IEB9Cit8IEBkb3Rze30KKzsKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK1RoZSBsYXR0ZXIsIGhvd2V2ZXIsIGlzIG11Y2ggbW9yZSByZWFkYWJsZS4KKworQG5vZGUgUnBjYWxjIExleGVyCitAc3Vic2VjdGlvbiBUaGUgQGNvZGV7cnBjYWxjfSBMZXhpY2FsIEFuYWx5emVyCitAY2luZGV4IHdyaXRpbmcgYSBsZXhpY2FsIGFuYWx5emVyCitAY2luZGV4IGxleGljYWwgYW5hbHl6ZXIsIHdyaXRpbmcKKworVGhlIGxleGljYWwgYW5hbHl6ZXIncyBqb2IgaXMgbG93LWxldmVsIHBhcnNpbmc6IGNvbnZlcnRpbmcgY2hhcmFjdGVycworb3Igc2VxdWVuY2VzIG9mIGNoYXJhY3RlcnMgaW50byB0b2tlbnMuICBUaGUgQmlzb24gcGFyc2VyIGdldHMgaXRzCit0b2tlbnMgYnkgY2FsbGluZyB0aGUgbGV4aWNhbCBhbmFseXplci4gIEB4cmVme0xleGljYWwsICxUaGUgTGV4aWNhbAorQW5hbHl6ZXIgRnVuY3Rpb24gQGNvZGV7eXlsZXh9fS4KKworT25seSBhIHNpbXBsZSBsZXhpY2FsIGFuYWx5emVyIGlzIG5lZWRlZCBmb3IgdGhlIFJQTgorY2FsY3VsYXRvci4gIFRoaXMKK2xleGljYWwgYW5hbHl6ZXIgc2tpcHMgYmxhbmtzIGFuZCB0YWJzLCB0aGVuIHJlYWRzIGluIG51bWJlcnMgYXMKK0Bjb2Rle2RvdWJsZX0gYW5kIHJldHVybnMgdGhlbSBhcyBAY29kZXtOVU19IHRva2Vucy4gIEFueSBvdGhlciBjaGFyYWN0ZXIKK3RoYXQgaXNuJ3QgcGFydCBvZiBhIG51bWJlciBpcyBhIHNlcGFyYXRlIHRva2VuLiAgTm90ZSB0aGF0IHRoZSB0b2tlbi1jb2RlCitmb3Igc3VjaCBhIHNpbmdsZS1jaGFyYWN0ZXIgdG9rZW4gaXMgdGhlIGNoYXJhY3RlciBpdHNlbGYuCisKK1RoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGxleGljYWwgYW5hbHl6ZXIgZnVuY3Rpb24gaXMgYSBudW1lcmljIGNvZGUgd2hpY2gKK3JlcHJlc2VudHMgYSB0b2tlbiB0eXBlLiAgVGhlIHNhbWUgdGV4dCB1c2VkIGluIEJpc29uIHJ1bGVzIHRvIHN0YW5kIGZvcgordGhpcyB0b2tlbiB0eXBlIGlzIGFsc28gYSBDIGV4cHJlc3Npb24gZm9yIHRoZSBudW1lcmljIGNvZGUgZm9yIHRoZSB0eXBlLgorVGhpcyB3b3JrcyBpbiB0d28gd2F5cy4gIElmIHRoZSB0b2tlbiB0eXBlIGlzIGEgY2hhcmFjdGVyIGxpdGVyYWwsIHRoZW4gaXRzCitudW1lcmljIGNvZGUgaXMgdGhhdCBvZiB0aGUgY2hhcmFjdGVyOyB5b3UgY2FuIHVzZSB0aGUgc2FtZQorY2hhcmFjdGVyIGxpdGVyYWwgaW4gdGhlIGxleGljYWwgYW5hbHl6ZXIgdG8gZXhwcmVzcyB0aGUgbnVtYmVyLiAgSWYgdGhlCit0b2tlbiB0eXBlIGlzIGFuIGlkZW50aWZpZXIsIHRoYXQgaWRlbnRpZmllciBpcyBkZWZpbmVkIGJ5IEJpc29uIGFzIGEgQworbWFjcm8gd2hvc2UgZGVmaW5pdGlvbiBpcyB0aGUgYXBwcm9wcmlhdGUgbnVtYmVyLiAgSW4gdGhpcyBleGFtcGxlLAordGhlcmVmb3JlLCBAY29kZXtOVU19IGJlY29tZXMgYSBtYWNybyBmb3IgQGNvZGV7eXlsZXh9IHRvIHVzZS4KKworVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSB0b2tlbiAoaWYgaXQgaGFzIG9uZSkgaXMgc3RvcmVkIGludG8gdGhlCitnbG9iYWwgdmFyaWFibGUgQGNvZGV7eXlsdmFsfSwgd2hpY2ggaXMgd2hlcmUgdGhlIEJpc29uIHBhcnNlciB3aWxsIGxvb2sKK2ZvciBpdC4gIChUaGUgQyBkYXRhIHR5cGUgb2YgQGNvZGV7eXlsdmFsfSBpcyBAY29kZXtZWVNUWVBFfSwgd2hpY2ggd2FzCitkZWZpbmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGdyYW1tYXI7IEBweHJlZntScGNhbGMgRGVjbGFyYXRpb25zLAorLERlY2xhcmF0aW9ucyBmb3IgQGNvZGV7cnBjYWxjfX0uKQorCitBIHRva2VuIHR5cGUgY29kZSBvZiB6ZXJvIGlzIHJldHVybmVkIGlmIHRoZSBlbmQtb2YtaW5wdXQgaXMgZW5jb3VudGVyZWQuCisoQmlzb24gcmVjb2duaXplcyBhbnkgbm9ucG9zaXRpdmUgdmFsdWUgYXMgaW5kaWNhdGluZyBlbmQtb2YtaW5wdXQuKQorCitIZXJlIGlzIHRoZSBjb2RlIGZvciB0aGUgbGV4aWNhbCBhbmFseXplcjoKKworQGV4YW1wbGUKK0Bncm91cAorLyogVGhlIGxleGljYWwgYW5hbHl6ZXIgcmV0dXJucyBhIGRvdWJsZSBmbG9hdGluZyBwb2ludAorICAgbnVtYmVyIG9uIHRoZSBzdGFjayBhbmQgdGhlIHRva2VuIE5VTSwgb3IgdGhlIG51bWVyaWMgY29kZQorICAgb2YgdGhlIGNoYXJhY3RlciByZWFkIGlmIG5vdCBhIG51bWJlci4gIEl0IHNraXBzIGFsbCBibGFua3MKKyAgIGFuZCB0YWJzLCBhbmQgcmV0dXJucyAwIGZvciBlbmQtb2YtaW5wdXQuICAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KK0BlbmQgZ3JvdXAKKworQGdyb3VwCitpbnQKK3l5bGV4ICh2b2lkKQorQHsKKyAgaW50IGM7CisKKyAgLyogU2tpcCB3aGl0ZSBzcGFjZS4gICovCisgIHdoaWxlICgoYyA9IGdldGNoYXIgKCkpID09ICcgJyB8fCBjID09ICdcdCcpCisgICAgY29udGludWU7CitAZW5kIGdyb3VwCitAZ3JvdXAKKyAgLyogUHJvY2VzcyBudW1iZXJzLiAgKi8KKyAgaWYgKGMgPT0gJy4nIHx8IGlzZGlnaXQgKGMpKQorICAgIEB7CisgICAgICB1bmdldGMgKGMsIHN0ZGluKTsKKyAgICAgIHNjYW5mICgiJWxmIiwgJnl5bHZhbCk7CisgICAgICByZXR1cm4gTlVNOworICAgIEB9CitAZW5kIGdyb3VwCitAZ3JvdXAKKyAgLyogUmV0dXJuIGVuZC1vZi1pbnB1dC4gICovCisgIGlmIChjID09IEVPRikKKyAgICByZXR1cm4gMDsKKyAgLyogUmV0dXJuIGEgc2luZ2xlIGNoYXIuICAqLworICByZXR1cm4gYzsKK0B9CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworQG5vZGUgUnBjYWxjIE1haW4KK0BzdWJzZWN0aW9uIFRoZSBDb250cm9sbGluZyBGdW5jdGlvbgorQGNpbmRleCBjb250cm9sbGluZyBmdW5jdGlvbgorQGNpbmRleCBtYWluIGZ1bmN0aW9uIGluIHNpbXBsZSBleGFtcGxlCisKK0luIGtlZXBpbmcgd2l0aCB0aGUgc3Bpcml0IG9mIHRoaXMgZXhhbXBsZSwgdGhlIGNvbnRyb2xsaW5nIGZ1bmN0aW9uIGlzCitrZXB0IHRvIHRoZSBiYXJlIG1pbmltdW0uICBUaGUgb25seSByZXF1aXJlbWVudCBpcyB0aGF0IGl0IGNhbGwKK0Bjb2Rle3l5cGFyc2V9IHRvIHN0YXJ0IHRoZSBwcm9jZXNzIG9mIHBhcnNpbmcuCisKK0BleGFtcGxlCitAZ3JvdXAKK2ludAorbWFpbiAodm9pZCkKK0B7CisgIHJldHVybiB5eXBhcnNlICgpOworQH0KK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitAbm9kZSBScGNhbGMgRXJyb3IKK0BzdWJzZWN0aW9uIFRoZSBFcnJvciBSZXBvcnRpbmcgUm91dGluZQorQGNpbmRleCBlcnJvciByZXBvcnRpbmcgcm91dGluZQorCitXaGVuIEBjb2Rle3l5cGFyc2V9IGRldGVjdHMgYSBzeW50YXggZXJyb3IsIGl0IGNhbGxzIHRoZSBlcnJvciByZXBvcnRpbmcKK2Z1bmN0aW9uIEBjb2Rle3l5ZXJyb3J9IHRvIHByaW50IGFuIGVycm9yIG1lc3NhZ2UgKHVzdWFsbHkgYnV0IG5vdAorYWx3YXlzIEBjb2RleyJzeW50YXggZXJyb3IifSkuICBJdCBpcyB1cCB0byB0aGUgcHJvZ3JhbW1lciB0byBzdXBwbHkKK0Bjb2Rle3l5ZXJyb3J9IChAcHhyZWZ7SW50ZXJmYWNlLCAsUGFyc2VyIEMtTGFuZ3VhZ2UgSW50ZXJmYWNlfSksIHNvCitoZXJlIGlzIHRoZSBkZWZpbml0aW9uIHdlIHdpbGwgdXNlOgorCitAZXhhbXBsZQorQGdyb3VwCisjaW5jbHVkZSA8c3RkaW8uaD4KK0BlbmQgZ3JvdXAKKworQGdyb3VwCisvKiBDYWxsZWQgYnkgeXlwYXJzZSBvbiBlcnJvci4gICovCit2b2lkCit5eWVycm9yIChjaGFyIGNvbnN0ICpzKQorQHsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIHMpOworQH0KK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitBZnRlciBAY29kZXt5eWVycm9yfSByZXR1cm5zLCB0aGUgQmlzb24gcGFyc2VyIG1heSByZWNvdmVyIGZyb20gdGhlIGVycm9yCithbmQgY29udGludWUgcGFyc2luZyBpZiB0aGUgZ3JhbW1hciBjb250YWlucyBhIHN1aXRhYmxlIGVycm9yIHJ1bGUKKyhAcHhyZWZ7RXJyb3IgUmVjb3Zlcnl9KS4gIE90aGVyd2lzZSwgQGNvZGV7eXlwYXJzZX0gcmV0dXJucyBub256ZXJvLiAgV2UKK2hhdmUgbm90IHdyaXR0ZW4gYW55IGVycm9yIHJ1bGVzIGluIHRoaXMgZXhhbXBsZSwgc28gYW55IGludmFsaWQgaW5wdXQgd2lsbAorY2F1c2UgdGhlIGNhbGN1bGF0b3IgcHJvZ3JhbSB0byBleGl0LiAgVGhpcyBpcyBub3QgY2xlYW4gYmVoYXZpb3IgZm9yIGEKK3JlYWwgY2FsY3VsYXRvciwgYnV0IGl0IGlzIGFkZXF1YXRlIGZvciB0aGUgZmlyc3QgZXhhbXBsZS4KKworQG5vZGUgUnBjYWxjIEdlbmVyYXRlCitAc3Vic2VjdGlvbiBSdW5uaW5nIEJpc29uIHRvIE1ha2UgdGhlIFBhcnNlcgorQGNpbmRleCBydW5uaW5nIEJpc29uIChpbnRyb2R1Y3Rpb24pCisKK0JlZm9yZSBydW5uaW5nIEJpc29uIHRvIHByb2R1Y2UgYSBwYXJzZXIsIHdlIG5lZWQgdG8gZGVjaWRlIGhvdyB0bworYXJyYW5nZSBhbGwgdGhlIHNvdXJjZSBjb2RlIGluIG9uZSBvciBtb3JlIHNvdXJjZSBmaWxlcy4gIEZvciBzdWNoIGEKK3NpbXBsZSBleGFtcGxlLCB0aGUgZWFzaWVzdCB0aGluZyBpcyB0byBwdXQgZXZlcnl0aGluZyBpbiBvbmUgZmlsZSwKK3RoZSBncmFtbWFyIGZpbGUuICBUaGUgZGVmaW5pdGlvbnMgb2YgQGNvZGV7eXlsZXh9LCBAY29kZXt5eWVycm9yfSBhbmQKK0Bjb2Rle21haW59IGdvIGF0IHRoZSBlbmQsIGluIHRoZSBlcGlsb2d1ZSBvZiB0aGUgZ3JhbW1hciBmaWxlCisoQHB4cmVme0dyYW1tYXIgTGF5b3V0LCAsVGhlIE92ZXJhbGwgTGF5b3V0IG9mIGEgQmlzb24gR3JhbW1hcn0pLgorCitGb3IgYSBsYXJnZSBwcm9qZWN0LCB5b3Ugd291bGQgcHJvYmFibHkgaGF2ZSBzZXZlcmFsIHNvdXJjZSBmaWxlcywgYW5kIHVzZQorQGNvZGV7bWFrZX0gdG8gYXJyYW5nZSB0byByZWNvbXBpbGUgdGhlbS4KKworV2l0aCBhbGwgdGhlIHNvdXJjZSBpbiB0aGUgZ3JhbW1hciBmaWxlLCB5b3UgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZAordG8gY29udmVydCBpdCBpbnRvIGEgcGFyc2VyIGltcGxlbWVudGF0aW9uIGZpbGU6CisKK0BleGFtcGxlCitiaXNvbiBAdmFye2ZpbGV9LnkKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK0luIHRoaXMgZXhhbXBsZSwgdGhlIGdyYW1tYXIgZmlsZSBpcyBjYWxsZWQgQGZpbGV7cnBjYWxjLnl9IChmb3IKK2BgUmV2ZXJzZSBQb2xpc2ggQHNje2NhbGN9dWxhdG9yJycpLiAgQmlzb24gcHJvZHVjZXMgYSBwYXJzZXIKK2ltcGxlbWVudGF0aW9uIGZpbGUgbmFtZWQgQGZpbGV7QHZhcntmaWxlfS50YWIuY30sIHJlbW92aW5nIHRoZQorQHNhbXB7Lnl9IGZyb20gdGhlIGdyYW1tYXIgZmlsZSBuYW1lLiAgVGhlIHBhcnNlciBpbXBsZW1lbnRhdGlvbiBmaWxlCitjb250YWlucyB0aGUgc291cmNlIGNvZGUgZm9yIEBjb2Rle3l5cGFyc2V9LiAgVGhlIGFkZGl0aW9uYWwgZnVuY3Rpb25zCitpbiB0aGUgZ3JhbW1hciBmaWxlIChAY29kZXt5eWxleH0sIEBjb2Rle3l5ZXJyb3J9IGFuZCBAY29kZXttYWlufSkgYXJlCitjb3BpZWQgdmVyYmF0aW0gdG8gdGhlIHBhcnNlciBpbXBsZW1lbnRhdGlvbiBmaWxlLgorCitAbm9kZSBScGNhbGMgQ29tcGlsZQorQHN1YnNlY3Rpb24gQ29tcGlsaW5nIHRoZSBQYXJzZXIgSW1wbGVtZW50YXRpb24gRmlsZQorQGNpbmRleCBjb21waWxpbmcgdGhlIHBhcnNlcgorCitIZXJlIGlzIGhvdyB0byBjb21waWxlIGFuZCBydW4gdGhlIHBhcnNlciBpbXBsZW1lbnRhdGlvbiBmaWxlOgorCitAZXhhbXBsZQorQGdyb3VwCisjIEBye0xpc3QgZmlsZXMgaW4gY3VycmVudCBkaXJlY3RvcnkufQorJCBAa2Jke2xzfQorcnBjYWxjLnRhYi5jICBycGNhbGMueQorQGVuZCBncm91cAorCitAZ3JvdXAKKyMgQHJ7Q29tcGlsZSB0aGUgQmlzb24gcGFyc2VyLn0KKyMgQHJ7QHNhbXB7LWxtfSB0ZWxscyBjb21waWxlciB0byBzZWFyY2ggbWF0aCBsaWJyYXJ5IGZvciBAY29kZXtwb3d9Ln0KKyQgQGtiZHtjYyAtbG0gLW8gcnBjYWxjIHJwY2FsYy50YWIuY30KK0BlbmQgZ3JvdXAKKworQGdyb3VwCisjIEBye0xpc3QgZmlsZXMgYWdhaW4ufQorJCBAa2Jke2xzfQorcnBjYWxjICBycGNhbGMudGFiLmMgIHJwY2FsYy55CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworVGhlIGZpbGUgQGZpbGV7cnBjYWxjfSBub3cgY29udGFpbnMgdGhlIGV4ZWN1dGFibGUgY29kZS4gIEhlcmUgaXMgYW4KK2V4YW1wbGUgc2Vzc2lvbiB1c2luZyBAY29kZXtycGNhbGN9LgorCitAZXhhbXBsZQorJCBAa2Jke3JwY2FsY30KK0BrYmR7NCA5ICt9CisxMworQGtiZHszIDcgKyAzIDQgNSAqKy19CistMTMKK0BrYmR7MyA3ICsgMyA0IDUgKiArIC0gbn0gICAgICAgICAgICAgIEBye05vdGUgdGhlIHVuYXJ5IG1pbnVzLCBAc2FtcHtufX0KKzEzCitAa2JkezUgNiAvIDQgbiArfQorLTMuMTY2NjY2NjY3CitAa2JkezMgNCBefSAgICAgICAgICAgICAgICAgICAgICAgICAgICBAcntFeHBvbmVudGlhdGlvbn0KKzgxCitAa2Jke15EfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAcntFbmQtb2YtZmlsZSBpbmRpY2F0b3J9CiskCitAZW5kIGV4YW1wbGUKKworQG5vZGUgSW5maXggQ2FsYworQHNlY3Rpb24gSW5maXggTm90YXRpb24gQ2FsY3VsYXRvcjogQGNvZGV7Y2FsY30KK0BjaW5kZXggaW5maXggbm90YXRpb24gY2FsY3VsYXRvcgorQGNpbmRleCBAY29kZXtjYWxjfQorQGNpbmRleCBjYWxjdWxhdG9yLCBpbmZpeCBub3RhdGlvbgorCitXZSBub3cgbW9kaWZ5IHJwY2FsYyB0byBoYW5kbGUgaW5maXggb3BlcmF0b3JzIGluc3RlYWQgb2YgcG9zdGZpeC4gIEluZml4Citub3RhdGlvbiBpbnZvbHZlcyB0aGUgY29uY2VwdCBvZiBvcGVyYXRvciBwcmVjZWRlbmNlIGFuZCB0aGUgbmVlZCBmb3IKK3BhcmVudGhlc2VzIG5lc3RlZCB0byBhcmJpdHJhcnkgZGVwdGguICBIZXJlIGlzIHRoZSBCaXNvbiBjb2RlIGZvcgorQGZpbGV7Y2FsYy55fSwgYW4gaW5maXggZGVzay10b3AgY2FsY3VsYXRvci4KKworQGV4YW1wbGUKKy8qIEluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3IuICAqLworCitAZ3JvdXAKKyVAeworICAjZGVmaW5lIFlZU1RZUEUgZG91YmxlCisgICNpbmNsdWRlIDxtYXRoLmg+CisgICNpbmNsdWRlIDxzdGRpby5oPgorICBpbnQgeXlsZXggKHZvaWQpOworICB2b2lkIHl5ZXJyb3IgKGNoYXIgY29uc3QgKik7CislQH0KK0BlbmQgZ3JvdXAKKworQGdyb3VwCisvKiBCaXNvbiBkZWNsYXJhdGlvbnMuICAqLworJXRva2VuIE5VTQorJWxlZnQgJy0nICcrJworJWxlZnQgJyonICcvJworJWxlZnQgTkVHICAgICAvKiBuZWdhdGlvbi0tdW5hcnkgbWludXMgKi8KKyVyaWdodCAnXicgICAgLyogZXhwb25lbnRpYXRpb24gKi8KK0BlbmQgZ3JvdXAKKworJSUgLyogVGhlIGdyYW1tYXIgZm9sbG93cy4gICovCitAZ3JvdXAKK2lucHV0OgorICAvKiBlbXB0eSAqLworfCBpbnB1dCBsaW5lCis7CitAZW5kIGdyb3VwCisKK0Bncm91cAorbGluZToKKyAgJ1xuJworfCBleHAgJ1xuJyAgQHsgcHJpbnRmICgiXHQlLjEwZ1xuIiwgJDEpOyBAfQorOworQGVuZCBncm91cAorCitAZ3JvdXAKK2V4cDoKKyAgTlVNICAgICAgICAgICAgICAgIEB7ICQkID0gJDE7ICAgICAgICAgICBAfQorfCBleHAgJysnIGV4cCAgICAgICAgQHsgJCQgPSAkMSArICQzOyAgICAgIEB9Cit8IGV4cCAnLScgZXhwICAgICAgICBAeyAkJCA9ICQxIC0gJDM7ICAgICAgQH0KK3wgZXhwICcqJyBleHAgICAgICAgIEB7ICQkID0gJDEgKiAkMzsgICAgICBAfQorfCBleHAgJy8nIGV4cCAgICAgICAgQHsgJCQgPSAkMSAvICQzOyAgICAgIEB9Cit8ICctJyBleHAgICVwcmVjIE5FRyBAeyAkJCA9IC0kMjsgICAgICAgICAgQH0KK3wgZXhwICdeJyBleHAgICAgICAgIEB7ICQkID0gcG93ICgkMSwgJDMpOyBAfQorfCAnKCcgZXhwICcpJyAgICAgICAgQHsgJCQgPSAkMjsgICAgICAgICAgIEB9Cis7CitAZW5kIGdyb3VwCislJQorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorVGhlIGZ1bmN0aW9ucyBAY29kZXt5eWxleH0sIEBjb2Rle3l5ZXJyb3J9IGFuZCBAY29kZXttYWlufSBjYW4gYmUgdGhlCitzYW1lIGFzIGJlZm9yZS4KKworVGhlcmUgYXJlIHR3byBpbXBvcnRhbnQgbmV3IGZlYXR1cmVzIHNob3duIGluIHRoaXMgY29kZS4KKworSW4gdGhlIHNlY29uZCBzZWN0aW9uIChCaXNvbiBkZWNsYXJhdGlvbnMpLCBAY29kZXslbGVmdH0gZGVjbGFyZXMgdG9rZW4KK3R5cGVzIGFuZCBzYXlzIHRoZXkgYXJlIGxlZnQtYXNzb2NpYXRpdmUgb3BlcmF0b3JzLiAgVGhlIGRlY2xhcmF0aW9ucworQGNvZGV7JWxlZnR9IGFuZCBAY29kZXslcmlnaHR9IChyaWdodCBhc3NvY2lhdGl2aXR5KSB0YWtlIHRoZSBwbGFjZSBvZgorQGNvZGV7JXRva2VufSB3aGljaCBpcyB1c2VkIHRvIGRlY2xhcmUgYSB0b2tlbiB0eXBlIG5hbWUgd2l0aG91dAorYXNzb2NpYXRpdml0eS4gIChUaGVzZSB0b2tlbnMgYXJlIHNpbmdsZS1jaGFyYWN0ZXIgbGl0ZXJhbHMsIHdoaWNoCitvcmRpbmFyaWx5IGRvbid0IG5lZWQgdG8gYmUgZGVjbGFyZWQuICBXZSBkZWNsYXJlIHRoZW0gaGVyZSB0byBzcGVjaWZ5Cit0aGUgYXNzb2NpYXRpdml0eS4pCisKK09wZXJhdG9yIHByZWNlZGVuY2UgaXMgZGV0ZXJtaW5lZCBieSB0aGUgbGluZSBvcmRlcmluZyBvZiB0aGUKK2RlY2xhcmF0aW9uczsgdGhlIGhpZ2hlciB0aGUgbGluZSBudW1iZXIgb2YgdGhlIGRlY2xhcmF0aW9uIChsb3dlciBvbgordGhlIHBhZ2Ugb3Igc2NyZWVuKSwgdGhlIGhpZ2hlciB0aGUgcHJlY2VkZW5jZS4gIEhlbmNlLCBleHBvbmVudGlhdGlvbgoraGFzIHRoZSBoaWdoZXN0IHByZWNlZGVuY2UsIHVuYXJ5IG1pbnVzIChAY29kZXtORUd9KSBpcyBuZXh0LCBmb2xsb3dlZAorYnkgQHNhbXB7Kn0gYW5kIEBzYW1wey99LCBhbmQgc28gb24uICBAeHJlZntQcmVjZWRlbmNlLCAsT3BlcmF0b3IKK1ByZWNlZGVuY2V9LgorCitUaGUgb3RoZXIgaW1wb3J0YW50IG5ldyBmZWF0dXJlIGlzIHRoZSBAY29kZXslcHJlY30gaW4gdGhlIGdyYW1tYXIKK3NlY3Rpb24gZm9yIHRoZSB1bmFyeSBtaW51cyBvcGVyYXRvci4gIFRoZSBAY29kZXslcHJlY30gc2ltcGx5IGluc3RydWN0cworQmlzb24gdGhhdCB0aGUgcnVsZSBAc2FtcHt8ICctJyBleHB9IGhhcyB0aGUgc2FtZSBwcmVjZWRlbmNlIGFzCitAY29kZXtORUd9LS0taW4gdGhpcyBjYXNlIHRoZSBuZXh0LXRvLWhpZ2hlc3QuICBAeHJlZntDb250ZXh0dWFsCitQcmVjZWRlbmNlLCAsQ29udGV4dC1EZXBlbmRlbnQgUHJlY2VkZW5jZX0uCisKK0hlcmUgaXMgYSBzYW1wbGUgcnVuIG9mIEBmaWxle2NhbGMueX06CisKK0BuZWVkIDUwMAorQGV4YW1wbGUKKyQgQGtiZHtjYWxjfQorQGtiZHs0ICsgNC41IC0gKDM0Lyg4KjMrLTMpKX0KKzYuODgwOTUyMzgxCitAa2Jkey01NiArIDJ9CistNTQKK0BrYmR7MyBeIDJ9Cis5CitAZW5kIGV4YW1wbGUKKworQG5vZGUgU2ltcGxlIEVycm9yIFJlY292ZXJ5CitAc2VjdGlvbiBTaW1wbGUgRXJyb3IgUmVjb3ZlcnkKK0BjaW5kZXggZXJyb3IgcmVjb3ZlcnksIHNpbXBsZQorCitVcCB0byB0aGlzIHBvaW50LCB0aGlzIG1hbnVhbCBoYXMgbm90IGFkZHJlc3NlZCB0aGUgaXNzdWUgb2YgQGRmbntlcnJvcgorcmVjb3Zlcnl9LS0taG93IHRvIGNvbnRpbnVlIHBhcnNpbmcgYWZ0ZXIgdGhlIHBhcnNlciBkZXRlY3RzIGEgc3ludGF4CitlcnJvci4gIEFsbCB3ZSBoYXZlIGhhbmRsZWQgaXMgZXJyb3IgcmVwb3J0aW5nIHdpdGggQGNvZGV7eXllcnJvcn0uCitSZWNhbGwgdGhhdCBieSBkZWZhdWx0IEBjb2Rle3l5cGFyc2V9IHJldHVybnMgYWZ0ZXIgY2FsbGluZworQGNvZGV7eXllcnJvcn0uICBUaGlzIG1lYW5zIHRoYXQgYW4gZXJyb25lb3VzIGlucHV0IGxpbmUgY2F1c2VzIHRoZQorY2FsY3VsYXRvciBwcm9ncmFtIHRvIGV4aXQuICBOb3cgd2Ugc2hvdyBob3cgdG8gcmVjdGlmeSB0aGlzIGRlZmljaWVuY3kuCisKK1RoZSBCaXNvbiBsYW5ndWFnZSBpdHNlbGYgaW5jbHVkZXMgdGhlIHJlc2VydmVkIHdvcmQgQGNvZGV7ZXJyb3J9LCB3aGljaAorbWF5IGJlIGluY2x1ZGVkIGluIHRoZSBncmFtbWFyIHJ1bGVzLiAgSW4gdGhlIGV4YW1wbGUgYmVsb3cgaXQgaGFzCitiZWVuIGFkZGVkIHRvIG9uZSBvZiB0aGUgYWx0ZXJuYXRpdmVzIGZvciBAY29kZXtsaW5lfToKKworQGV4YW1wbGUKK0Bncm91cAorbGluZToKKyAgJ1xuJworfCBleHAgJ1xuJyAgIEB7IHByaW50ZiAoIlx0JS4xMGdcbiIsICQxKTsgQH0KK3wgZXJyb3IgJ1xuJyBAeyB5eWVycm9rOyAgICAgICAgICAgICAgICAgIEB9Cis7CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworVGhpcyBhZGRpdGlvbiB0byB0aGUgZ3JhbW1hciBhbGxvd3MgZm9yIHNpbXBsZSBlcnJvciByZWNvdmVyeSBpbiB0aGUKK2V2ZW50IG9mIGEgc3ludGF4IGVycm9yLiAgSWYgYW4gZXhwcmVzc2lvbiB0aGF0IGNhbm5vdCBiZSBldmFsdWF0ZWQgaXMKK3JlYWQsIHRoZSBlcnJvciB3aWxsIGJlIHJlY29nbml6ZWQgYnkgdGhlIHRoaXJkIHJ1bGUgZm9yIEBjb2Rle2xpbmV9LAorYW5kIHBhcnNpbmcgd2lsbCBjb250aW51ZS4gIChUaGUgQGNvZGV7eXllcnJvcn0gZnVuY3Rpb24gaXMgc3RpbGwgY2FsbGVkCit1cG9uIHRvIHByaW50IGl0cyBtZXNzYWdlIGFzIHdlbGwuKSAgVGhlIGFjdGlvbiBleGVjdXRlcyB0aGUgc3RhdGVtZW50CitAY29kZXt5eWVycm9rfSwgYSBtYWNybyBkZWZpbmVkIGF1dG9tYXRpY2FsbHkgYnkgQmlzb247IGl0cyBtZWFuaW5nIGlzCit0aGF0IGVycm9yIHJlY292ZXJ5IGlzIGNvbXBsZXRlIChAcHhyZWZ7RXJyb3IgUmVjb3Zlcnl9KS4gIE5vdGUgdGhlCitkaWZmZXJlbmNlIGJldHdlZW4gQGNvZGV7eXllcnJva30gYW5kIEBjb2Rle3l5ZXJyb3J9OyBuZWl0aGVyIG9uZSBpcyBhCittaXNwcmludC4KKworVGhpcyBmb3JtIG9mIGVycm9yIHJlY292ZXJ5IGRlYWxzIHdpdGggc3ludGF4IGVycm9ycy4gIFRoZXJlIGFyZSBvdGhlcgora2luZHMgb2YgZXJyb3JzOyBmb3IgZXhhbXBsZSwgZGl2aXNpb24gYnkgemVybywgd2hpY2ggcmFpc2VzIGFuIGV4Y2VwdGlvbgorc2lnbmFsIHRoYXQgaXMgbm9ybWFsbHkgZmF0YWwuICBBIHJlYWwgY2FsY3VsYXRvciBwcm9ncmFtIG11c3QgaGFuZGxlIHRoaXMKK3NpZ25hbCBhbmQgdXNlIEBjb2Rle2xvbmdqbXB9IHRvIHJldHVybiB0byBAY29kZXttYWlufSBhbmQgcmVzdW1lIHBhcnNpbmcKK2lucHV0IGxpbmVzOyBpdCB3b3VsZCBhbHNvIGhhdmUgdG8gZGlzY2FyZCB0aGUgcmVzdCBvZiB0aGUgY3VycmVudCBsaW5lIG9mCitpbnB1dC4gIFdlIHdvbid0IGRpc2N1c3MgdGhpcyBpc3N1ZSBmdXJ0aGVyIGJlY2F1c2UgaXQgaXMgbm90IHNwZWNpZmljIHRvCitCaXNvbiBwcm9ncmFtcy4KKworQG5vZGUgTG9jYXRpb24gVHJhY2tpbmcgQ2FsYworQHNlY3Rpb24gTG9jYXRpb24gVHJhY2tpbmcgQ2FsY3VsYXRvcjogQGNvZGV7bHRjYWxjfQorQGNpbmRleCBsb2NhdGlvbiB0cmFja2luZyBjYWxjdWxhdG9yCitAY2luZGV4IEBjb2Rle2x0Y2FsY30KK0BjaW5kZXggY2FsY3VsYXRvciwgbG9jYXRpb24gdHJhY2tpbmcKKworVGhpcyBleGFtcGxlIGV4dGVuZHMgdGhlIGluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3Igd2l0aCBsb2NhdGlvbgordHJhY2tpbmcuICBUaGlzIGZlYXR1cmUgd2lsbCBiZSB1c2VkIHRvIGltcHJvdmUgdGhlIGVycm9yIG1lc3NhZ2VzLiAgRm9yCit0aGUgc2FrZSBvZiBjbGFyaXR5LCB0aGlzIGV4YW1wbGUgaXMgYSBzaW1wbGUgaW50ZWdlciBjYWxjdWxhdG9yLCBzaW5jZQorbW9zdCBvZiB0aGUgd29yayBuZWVkZWQgdG8gdXNlIGxvY2F0aW9ucyB3aWxsIGJlIGRvbmUgaW4gdGhlIGxleGljYWwKK2FuYWx5emVyLgorCitAbWVudQorKiBMdGNhbGMgRGVjbGFyYXRpb25zOjogICAgQmlzb24gYW5kIEMgZGVjbGFyYXRpb25zIGZvciBsdGNhbGMuCisqIEx0Y2FsYyBSdWxlczo6ICAgICAgICAgICBHcmFtbWFyIHJ1bGVzIGZvciBsdGNhbGMsIHdpdGggZXhwbGFuYXRpb25zLgorKiBMdGNhbGMgTGV4ZXI6OiAgICAgICAgICAgVGhlIGxleGljYWwgYW5hbHl6ZXIuCitAZW5kIG1lbnUKKworQG5vZGUgTHRjYWxjIERlY2xhcmF0aW9ucworQHN1YnNlY3Rpb24gRGVjbGFyYXRpb25zIGZvciBAY29kZXtsdGNhbGN9CisKK1RoZSBDIGFuZCBCaXNvbiBkZWNsYXJhdGlvbnMgZm9yIHRoZSBsb2NhdGlvbiB0cmFja2luZyBjYWxjdWxhdG9yIGFyZQordGhlIHNhbWUgYXMgdGhlIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3IuCisKK0BleGFtcGxlCisvKiBMb2NhdGlvbiB0cmFja2luZyBjYWxjdWxhdG9yLiAgKi8KKworJUB7CisgICNkZWZpbmUgWVlTVFlQRSBpbnQKKyAgI2luY2x1ZGUgPG1hdGguaD4KKyAgaW50IHl5bGV4ICh2b2lkKTsKKyAgdm9pZCB5eWVycm9yIChjaGFyIGNvbnN0ICopOworJUB9CisKKy8qIEJpc29uIGRlY2xhcmF0aW9ucy4gICovCisldG9rZW4gTlVNCisKKyVsZWZ0ICctJyAnKycKKyVsZWZ0ICcqJyAnLycKKyVsZWZ0IE5FRworJXJpZ2h0ICdeJworCislJSAvKiBUaGUgZ3JhbW1hciBmb2xsb3dzLiAgKi8KK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK05vdGUgdGhlcmUgYXJlIG5vIGRlY2xhcmF0aW9ucyBzcGVjaWZpYyB0byBsb2NhdGlvbnMuICBEZWZpbmluZyBhIGRhdGEKK3R5cGUgZm9yIHN0b3JpbmcgbG9jYXRpb25zIGlzIG5vdCBuZWVkZWQ6IHdlIHdpbGwgdXNlIHRoZSB0eXBlIHByb3ZpZGVkCitieSBkZWZhdWx0IChAcHhyZWZ7TG9jYXRpb24gVHlwZSwgLERhdGEgVHlwZXMgb2YgTG9jYXRpb25zfSksIHdoaWNoIGlzIGEKK2ZvdXIgbWVtYmVyIHN0cnVjdHVyZSB3aXRoIHRoZSBmb2xsb3dpbmcgaW50ZWdlciBmaWVsZHM6CitAY29kZXtmaXJzdF9saW5lfSwgQGNvZGV7Zmlyc3RfY29sdW1ufSwgQGNvZGV7bGFzdF9saW5lfSBhbmQKK0Bjb2Rle2xhc3RfY29sdW1ufS4gIEJ5IGNvbnZlbnRpb25zLCBhbmQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBHTlUKK0NvZGluZyBTdGFuZGFyZHMgYW5kIGNvbW1vbiBwcmFjdGljZSwgdGhlIGxpbmUgYW5kIGNvbHVtbiBjb3VudCBib3RoCitzdGFydCBhdCAxLgorCitAbm9kZSBMdGNhbGMgUnVsZXMKK0BzdWJzZWN0aW9uIEdyYW1tYXIgUnVsZXMgZm9yIEBjb2Rle2x0Y2FsY30KKworV2hldGhlciBoYW5kbGluZyBsb2NhdGlvbnMgb3Igbm90IGhhcyBubyBlZmZlY3Qgb24gdGhlIHN5bnRheCBvZiB5b3VyCitsYW5ndWFnZS4gIFRoZXJlZm9yZSwgZ3JhbW1hciBydWxlcyBmb3IgdGhpcyBleGFtcGxlIHdpbGwgYmUgdmVyeSBjbG9zZQordG8gdGhvc2Ugb2YgdGhlIHByZXZpb3VzIGV4YW1wbGU6IHdlIHdpbGwgb25seSBtb2RpZnkgdGhlbSB0byBiZW5lZml0Citmcm9tIHRoZSBuZXcgaW5mb3JtYXRpb24uCisKK0hlcmUsIHdlIHdpbGwgdXNlIGxvY2F0aW9ucyB0byByZXBvcnQgZGl2aXNpb25zIGJ5IHplcm8sIGFuZCBsb2NhdGUgdGhlCit3cm9uZyBleHByZXNzaW9ucyBvciBzdWJleHByZXNzaW9ucy4KKworQGV4YW1wbGUKK0Bncm91cAoraW5wdXQ6CisgIC8qIGVtcHR5ICovCit8IGlucHV0IGxpbmUKKzsKK0BlbmQgZ3JvdXAKKworQGdyb3VwCitsaW5lOgorICAnXG4nCit8IGV4cCAnXG4nIEB7IHByaW50ZiAoIiVkXG4iLCAkMSk7IEB9Cis7CitAZW5kIGdyb3VwCisKK0Bncm91cAorZXhwOgorICBOVU0gICAgICAgICAgIEB7ICQkID0gJDE7IEB9Cit8IGV4cCAnKycgZXhwICAgQHsgJCQgPSAkMSArICQzOyBAfQorfCBleHAgJy0nIGV4cCAgIEB7ICQkID0gJDEgLSAkMzsgQH0KK3wgZXhwICcqJyBleHAgICBAeyAkJCA9ICQxICogJDM7IEB9CitAZW5kIGdyb3VwCitAZ3JvdXAKK3wgZXhwICcvJyBleHAKKyAgICBAeworICAgICAgaWYgKCQzKQorICAgICAgICAkJCA9ICQxIC8gJDM7CisgICAgICBlbHNlCisgICAgICAgIEB7CisgICAgICAgICAgJCQgPSAxOworICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVkLiVkLSVkLiVkOiBkaXZpc2lvbiBieSB6ZXJvIiwKKyAgICAgICAgICAgICAgICAgICBAQDMuZmlyc3RfbGluZSwgQEAzLmZpcnN0X2NvbHVtbiwKKyAgICAgICAgICAgICAgICAgICBAQDMubGFzdF9saW5lLCBAQDMubGFzdF9jb2x1bW4pOworICAgICAgICBAfQorICAgIEB9CitAZW5kIGdyb3VwCitAZ3JvdXAKK3wgJy0nIGV4cCAlcHJlYyBORUcgICAgIEB7ICQkID0gLSQyOyBAfQorfCBleHAgJ14nIGV4cCAgICAgICAgICAgQHsgJCQgPSBwb3cgKCQxLCAkMyk7IEB9Cit8ICcoJyBleHAgJyknICAgICAgICAgICBAeyAkJCA9ICQyOyBAfQorQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK1RoaXMgY29kZSBzaG93cyBob3cgdG8gcmVhY2ggbG9jYXRpb25zIGluc2lkZSBvZiBzZW1hbnRpYyBhY3Rpb25zLCBieQordXNpbmcgdGhlIHBzZXVkby12YXJpYWJsZXMgQGNvZGV7QEBAdmFye259fSBmb3IgcnVsZSBjb21wb25lbnRzLCBhbmQgdGhlCitwc2V1ZG8tdmFyaWFibGUgQGNvZGV7QEAkfSBmb3IgZ3JvdXBpbmdzLgorCitXZSBkb24ndCBuZWVkIHRvIGFzc2lnbiBhIHZhbHVlIHRvIEBjb2Rle0BAJH06IHRoZSBvdXRwdXQgcGFyc2VyIGRvZXMgaXQKK2F1dG9tYXRpY2FsbHkuICBCeSBkZWZhdWx0LCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBDIGNvZGUgb2YgZWFjaCBhY3Rpb24sCitAY29kZXtAQCR9IGlzIHNldCB0byByYW5nZSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgQGNvZGV7QEAxfSB0byB0aGUgZW5kCitvZiBAY29kZXtAQEB2YXJ7bn19LCBmb3IgYSBydWxlIHdpdGggQHZhcntufSBjb21wb25lbnRzLiAgVGhpcyBiZWhhdmlvcgorY2FuIGJlIHJlZGVmaW5lZCAoQHB4cmVme0xvY2F0aW9uIERlZmF1bHQgQWN0aW9uLCAsIERlZmF1bHQgQWN0aW9uIGZvcgorTG9jYXRpb25zfSksIGFuZCBmb3IgdmVyeSBzcGVjaWZpYyBydWxlcywgQGNvZGV7QEAkfSBjYW4gYmUgY29tcHV0ZWQgYnkKK2hhbmQuCisKK0Bub2RlIEx0Y2FsYyBMZXhlcgorQHN1YnNlY3Rpb24gVGhlIEBjb2Rle2x0Y2FsY30gTGV4aWNhbCBBbmFseXplci4KKworVW50aWwgbm93LCB3ZSByZWxpZWQgb24gQmlzb24ncyBkZWZhdWx0cyB0byBlbmFibGUgbG9jYXRpb24KK3RyYWNraW5nLiAgVGhlIG5leHQgc3RlcCBpcyB0byByZXdyaXRlIHRoZSBsZXhpY2FsIGFuYWx5emVyLCBhbmQgbWFrZSBpdAorYWJsZSB0byBmZWVkIHRoZSBwYXJzZXIgd2l0aCB0aGUgdG9rZW4gbG9jYXRpb25zLCBhcyBpdCBhbHJlYWR5IGRvZXMgZm9yCitzZW1hbnRpYyB2YWx1ZXMuCisKK1RvIHRoaXMgZW5kLCB3ZSBtdXN0IHRha2UgaW50byBhY2NvdW50IGV2ZXJ5IHNpbmdsZSBjaGFyYWN0ZXIgb2YgdGhlCitpbnB1dCB0ZXh0LCB0byBhdm9pZCB0aGUgY29tcHV0ZWQgbG9jYXRpb25zIG9mIGJlaW5nIGZ1enp5IG9yIHdyb25nOgorCitAZXhhbXBsZQorQGdyb3VwCitpbnQKK3l5bGV4ICh2b2lkKQorQHsKKyAgaW50IGM7CitAZW5kIGdyb3VwCisKK0Bncm91cAorICAvKiBTa2lwIHdoaXRlIHNwYWNlLiAgKi8KKyAgd2hpbGUgKChjID0gZ2V0Y2hhciAoKSkgPT0gJyAnIHx8IGMgPT0gJ1x0JykKKyAgICArK3l5bGxvYy5sYXN0X2NvbHVtbjsKK0BlbmQgZ3JvdXAKKworQGdyb3VwCisgIC8qIFN0ZXAuICAqLworICB5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGxvYy5sYXN0X2xpbmU7CisgIHl5bGxvYy5maXJzdF9jb2x1bW4gPSB5eWxsb2MubGFzdF9jb2x1bW47CitAZW5kIGdyb3VwCisKK0Bncm91cAorICAvKiBQcm9jZXNzIG51bWJlcnMuICAqLworICBpZiAoaXNkaWdpdCAoYykpCisgICAgQHsKKyAgICAgIHl5bHZhbCA9IGMgLSAnMCc7CisgICAgICArK3l5bGxvYy5sYXN0X2NvbHVtbjsKKyAgICAgIHdoaWxlIChpc2RpZ2l0IChjID0gZ2V0Y2hhciAoKSkpCisgICAgICAgIEB7CisgICAgICAgICAgKyt5eWxsb2MubGFzdF9jb2x1bW47CisgICAgICAgICAgeXlsdmFsID0geXlsdmFsICogMTAgKyBjIC0gJzAnOworICAgICAgICBAfQorICAgICAgdW5nZXRjIChjLCBzdGRpbik7CisgICAgICByZXR1cm4gTlVNOworICAgIEB9CitAZW5kIGdyb3VwCisKKyAgLyogUmV0dXJuIGVuZC1vZi1pbnB1dC4gICovCisgIGlmIChjID09IEVPRikKKyAgICByZXR1cm4gMDsKKworQGdyb3VwCisgIC8qIFJldHVybiBhIHNpbmdsZSBjaGFyLCBhbmQgdXBkYXRlIGxvY2F0aW9uLiAgKi8KKyAgaWYgKGMgPT0gJ1xuJykKKyAgICBAeworICAgICAgKyt5eWxsb2MubGFzdF9saW5lOworICAgICAgeXlsbG9jLmxhc3RfY29sdW1uID0gMDsKKyAgICBAfQorICBlbHNlCisgICAgKyt5eWxsb2MubGFzdF9jb2x1bW47CisgIHJldHVybiBjOworQH0KK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitCYXNpY2FsbHksIHRoZSBsZXhpY2FsIGFuYWx5emVyIHBlcmZvcm1zIHRoZSBzYW1lIHByb2Nlc3NpbmcgYXMgYmVmb3JlOgoraXQgc2tpcHMgYmxhbmtzIGFuZCB0YWJzLCBhbmQgcmVhZHMgbnVtYmVycyBvciBzaW5nbGUtY2hhcmFjdGVyIHRva2Vucy4KK0luIGFkZGl0aW9uLCBpdCB1cGRhdGVzIEBjb2Rle3l5bGxvY30sIHRoZSBnbG9iYWwgdmFyaWFibGUgKG9mIHR5cGUKK0Bjb2Rle1lZTFRZUEV9KSBjb250YWluaW5nIHRoZSB0b2tlbidzIGxvY2F0aW9uLgorCitOb3csIGVhY2ggdGltZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYSB0b2tlbiwgdGhlIHBhcnNlciBoYXMgaXRzIG51bWJlcgorYXMgd2VsbCBhcyBpdHMgc2VtYW50aWMgdmFsdWUsIGFuZCBpdHMgbG9jYXRpb24gaW4gdGhlIHRleHQuICBUaGUgbGFzdAorbmVlZGVkIGNoYW5nZSBpcyB0byBpbml0aWFsaXplIEBjb2Rle3l5bGxvY30sIGZvciBleGFtcGxlIGluIHRoZQorY29udHJvbGxpbmcgZnVuY3Rpb246CisKK0BleGFtcGxlCitAZ3JvdXAKK2ludAorbWFpbiAodm9pZCkKK0B7CisgIHl5bGxvYy5maXJzdF9saW5lID0geXlsbG9jLmxhc3RfbGluZSA9IDE7CisgIHl5bGxvYy5maXJzdF9jb2x1bW4gPSB5eWxsb2MubGFzdF9jb2x1bW4gPSAwOworICByZXR1cm4geXlwYXJzZSAoKTsKK0B9CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworUmVtZW1iZXIgdGhhdCBjb21wdXRpbmcgbG9jYXRpb25zIGlzIG5vdCBhIG1hdHRlciBvZiBzeW50YXguICBFdmVyeQorY2hhcmFjdGVyIG11c3QgYmUgYXNzb2NpYXRlZCB0byBhIGxvY2F0aW9uIHVwZGF0ZSwgd2hldGhlciBpdCBpcyBpbgordmFsaWQgaW5wdXQsIGluIGNvbW1lbnRzLCBpbiBsaXRlcmFsIHN0cmluZ3MsIGFuZCBzbyBvbi4KKworQG5vZGUgTXVsdGktZnVuY3Rpb24gQ2FsYworQHNlY3Rpb24gTXVsdGktRnVuY3Rpb24gQ2FsY3VsYXRvcjogQGNvZGV7bWZjYWxjfQorQGNpbmRleCBtdWx0aS1mdW5jdGlvbiBjYWxjdWxhdG9yCitAY2luZGV4IEBjb2Rle21mY2FsY30KK0BjaW5kZXggY2FsY3VsYXRvciwgbXVsdGktZnVuY3Rpb24KKworTm93IHRoYXQgdGhlIGJhc2ljcyBvZiBCaXNvbiBoYXZlIGJlZW4gZGlzY3Vzc2VkLCBpdCBpcyB0aW1lIHRvIG1vdmUgb24gdG8KK2EgbW9yZSBhZHZhbmNlZCBwcm9ibGVtLiAgVGhlIGFib3ZlIGNhbGN1bGF0b3JzIHByb3ZpZGVkIG9ubHkgZml2ZQorZnVuY3Rpb25zLCBAc2FtcHsrfSwgQHNhbXB7LX0sIEBzYW1weyp9LCBAc2FtcHsvfSBhbmQgQHNhbXB7Xn0uICBJdCB3b3VsZAorYmUgbmljZSB0byBoYXZlIGEgY2FsY3VsYXRvciB0aGF0IHByb3ZpZGVzIG90aGVyIG1hdGhlbWF0aWNhbCBmdW5jdGlvbnMgc3VjaAorYXMgQGNvZGV7c2lufSwgQGNvZGV7Y29zfSwgZXRjLgorCitJdCBpcyBlYXN5IHRvIGFkZCBuZXcgb3BlcmF0b3JzIHRvIHRoZSBpbmZpeCBjYWxjdWxhdG9yIGFzIGxvbmcgYXMgdGhleSBhcmUKK29ubHkgc2luZ2xlLWNoYXJhY3RlciBsaXRlcmFscy4gIFRoZSBsZXhpY2FsIGFuYWx5emVyIEBjb2Rle3l5bGV4fSBwYXNzZXMKK2JhY2sgYWxsIG5vbm51bWVyaWMgY2hhcmFjdGVycyBhcyB0b2tlbnMsIHNvIG5ldyBncmFtbWFyIHJ1bGVzIHN1ZmZpY2UgZm9yCithZGRpbmcgYSBuZXcgb3BlcmF0b3IuICBCdXQgd2Ugd2FudCBzb21ldGhpbmcgbW9yZSBmbGV4aWJsZTogYnVpbHQtaW4KK2Z1bmN0aW9ucyB3aG9zZSBzeW50YXggaGFzIHRoaXMgZm9ybToKKworQGV4YW1wbGUKK0B2YXJ7ZnVuY3Rpb25fbmFtZX0gKEB2YXJ7YXJndW1lbnR9KQorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorQXQgdGhlIHNhbWUgdGltZSwgd2Ugd2lsbCBhZGQgbWVtb3J5IHRvIHRoZSBjYWxjdWxhdG9yLCBieSBhbGxvd2luZyB5b3UKK3RvIGNyZWF0ZSBuYW1lZCB2YXJpYWJsZXMsIHN0b3JlIHZhbHVlcyBpbiB0aGVtLCBhbmQgdXNlIHRoZW0gbGF0ZXIuCitIZXJlIGlzIGEgc2FtcGxlIHNlc3Npb24gd2l0aCB0aGUgbXVsdGktZnVuY3Rpb24gY2FsY3VsYXRvcjoKKworQGV4YW1wbGUKKyQgQGtiZHttZmNhbGN9CitAa2Jke3BpID0gMy4xNDE1OTI2NTM1ODl9CiszLjE0MTU5MjY1MzYKK0BrYmR7c2luKHBpKX0KKzAuMDAwMDAwMDAwMAorQGtiZHthbHBoYSA9IGJldGExID0gMi4zfQorMi4zMDAwMDAwMDAwCitAa2Jke2FscGhhfQorMi4zMDAwMDAwMDAwCitAa2Jke2xuKGFscGhhKX0KKzAuODMyOTA5MTIyOQorQGtiZHtleHAobG4oYmV0YTEpKX0KKzIuMzAwMDAwMDAwMAorJAorQGVuZCBleGFtcGxlCisKK05vdGUgdGhhdCBtdWx0aXBsZSBhc3NpZ25tZW50IGFuZCBuZXN0ZWQgZnVuY3Rpb24gY2FsbHMgYXJlIHBlcm1pdHRlZC4KKworQG1lbnUKKyogTWZjYWxjIERlY2xhcmF0aW9uczo6ICAgIEJpc29uIGRlY2xhcmF0aW9ucyBmb3IgbXVsdGktZnVuY3Rpb24gY2FsY3VsYXRvci4KKyogTWZjYWxjIFJ1bGVzOjogICAgICAgICAgIEdyYW1tYXIgcnVsZXMgZm9yIHRoZSBjYWxjdWxhdG9yLgorKiBNZmNhbGMgU3ltYm9sIFRhYmxlOjogICAgU3ltYm9sIHRhYmxlIG1hbmFnZW1lbnQgc3Vicm91dGluZXMuCitAZW5kIG1lbnUKKworQG5vZGUgTWZjYWxjIERlY2xhcmF0aW9ucworQHN1YnNlY3Rpb24gRGVjbGFyYXRpb25zIGZvciBAY29kZXttZmNhbGN9CisKK0hlcmUgYXJlIHRoZSBDIGFuZCBCaXNvbiBkZWNsYXJhdGlvbnMgZm9yIHRoZSBtdWx0aS1mdW5jdGlvbiBjYWxjdWxhdG9yLgorCitAY29tbWVudCBmaWxlOiBtZmNhbGMueTogMQorQGV4YW1wbGUKK0Bncm91cAorJUB7CisgICNpbmNsdWRlIDxtYXRoLmg+ICAvKiBGb3IgbWF0aCBmdW5jdGlvbnMsIGNvcygpLCBzaW4oKSwgZXRjLiAgKi8KKyAgI2luY2x1ZGUgImNhbGMuaCIgIC8qIENvbnRhaW5zIGRlZmluaXRpb24gb2YgYHN5bXJlYycuICAqLworICBpbnQgeXlsZXggKHZvaWQpOworICB2b2lkIHl5ZXJyb3IgKGNoYXIgY29uc3QgKik7CislQH0KK0BlbmQgZ3JvdXAKKworQGdyb3VwCisldW5pb24gQHsKKyAgZG91YmxlICAgIHZhbDsgICAvKiBGb3IgcmV0dXJuaW5nIG51bWJlcnMuICAqLworICBzeW1yZWMgICp0cHRyOyAgIC8qIEZvciByZXR1cm5pbmcgc3ltYm9sLXRhYmxlIHBvaW50ZXJzLiAgKi8KK0B9CitAZW5kIGdyb3VwCisldG9rZW4gPHZhbD4gIE5VTSAgICAgICAgLyogU2ltcGxlIGRvdWJsZSBwcmVjaXNpb24gbnVtYmVyLiAgKi8KKyV0b2tlbiA8dHB0cj4gVkFSIEZOQ1QgICAvKiBWYXJpYWJsZSBhbmQgZnVuY3Rpb24uICAqLworJXR5cGUgIDx2YWw+ICBleHAKKworQGdyb3VwCislcmlnaHQgJz0nCislbGVmdCAnLScgJysnCislbGVmdCAnKicgJy8nCislbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLworJXJpZ2h0ICdeJyAgICAvKiBleHBvbmVudGlhdGlvbiAqLworQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK1RoZSBhYm92ZSBncmFtbWFyIGludHJvZHVjZXMgb25seSB0d28gbmV3IGZlYXR1cmVzIG9mIHRoZSBCaXNvbiBsYW5ndWFnZS4KK1RoZXNlIGZlYXR1cmVzIGFsbG93IHNlbWFudGljIHZhbHVlcyB0byBoYXZlIHZhcmlvdXMgZGF0YSB0eXBlcworKEBweHJlZntNdWx0aXBsZSBUeXBlcywgLE1vcmUgVGhhbiBPbmUgVmFsdWUgVHlwZX0pLgorCitUaGUgQGNvZGV7JXVuaW9ufSBkZWNsYXJhdGlvbiBzcGVjaWZpZXMgdGhlIGVudGlyZSBsaXN0IG9mIHBvc3NpYmxlIHR5cGVzOwordGhpcyBpcyBpbnN0ZWFkIG9mIGRlZmluaW5nIEBjb2Rle1lZU1RZUEV9LiAgVGhlIGFsbG93YWJsZSB0eXBlcyBhcmUgbm93Citkb3VibGUtZmxvYXRzIChmb3IgQGNvZGV7ZXhwfSBhbmQgQGNvZGV7TlVNfSkgYW5kIHBvaW50ZXJzIHRvIGVudHJpZXMgaW4KK3RoZSBzeW1ib2wgdGFibGUuICBAeHJlZntVbmlvbiBEZWNsLCAsVGhlIENvbGxlY3Rpb24gb2YgVmFsdWUgVHlwZXN9LgorCitTaW5jZSB2YWx1ZXMgY2FuIG5vdyBoYXZlIHZhcmlvdXMgdHlwZXMsIGl0IGlzIG5lY2Vzc2FyeSB0byBhc3NvY2lhdGUgYQordHlwZSB3aXRoIGVhY2ggZ3JhbW1hciBzeW1ib2wgd2hvc2Ugc2VtYW50aWMgdmFsdWUgaXMgdXNlZC4gIFRoZXNlIHN5bWJvbHMKK2FyZSBAY29kZXtOVU19LCBAY29kZXtWQVJ9LCBAY29kZXtGTkNUfSwgYW5kIEBjb2Rle2V4cH0uICBUaGVpcgorZGVjbGFyYXRpb25zIGFyZSBhdWdtZW50ZWQgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGVpciBkYXRhIHR5cGUgKHBsYWNlZAorYmV0d2VlbiBhbmdsZSBicmFja2V0cykuCisKK1RoZSBCaXNvbiBjb25zdHJ1Y3QgQGNvZGV7JXR5cGV9IGlzIHVzZWQgZm9yIGRlY2xhcmluZyBub250ZXJtaW5hbAorc3ltYm9scywganVzdCBhcyBAY29kZXsldG9rZW59IGlzIHVzZWQgZm9yIGRlY2xhcmluZyB0b2tlbiB0eXBlcy4gIFdlCitoYXZlIG5vdCB1c2VkIEBjb2RleyV0eXBlfSBiZWZvcmUgYmVjYXVzZSBub250ZXJtaW5hbCBzeW1ib2xzIGFyZQorbm9ybWFsbHkgZGVjbGFyZWQgaW1wbGljaXRseSBieSB0aGUgcnVsZXMgdGhhdCBkZWZpbmUgdGhlbS4gIEJ1dAorQGNvZGV7ZXhwfSBtdXN0IGJlIGRlY2xhcmVkIGV4cGxpY2l0bHkgc28gd2UgY2FuIHNwZWNpZnkgaXRzIHZhbHVlIHR5cGUuCitAeHJlZntUeXBlIERlY2wsICxOb250ZXJtaW5hbCBTeW1ib2xzfS4KKworQG5vZGUgTWZjYWxjIFJ1bGVzCitAc3Vic2VjdGlvbiBHcmFtbWFyIFJ1bGVzIGZvciBAY29kZXttZmNhbGN9CisKK0hlcmUgYXJlIHRoZSBncmFtbWFyIHJ1bGVzIGZvciB0aGUgbXVsdGktZnVuY3Rpb24gY2FsY3VsYXRvci4KK01vc3Qgb2YgdGhlbSBhcmUgY29waWVkIGRpcmVjdGx5IGZyb20gQGNvZGV7Y2FsY307IHRocmVlIHJ1bGVzLAordGhvc2Ugd2hpY2ggbWVudGlvbiBAY29kZXtWQVJ9IG9yIEBjb2Rle0ZOQ1R9LCBhcmUgbmV3LgorCitAY29tbWVudCBmaWxlOiBtZmNhbGMueTogMworQGV4YW1wbGUKKyUlIC8qIFRoZSBncmFtbWFyIGZvbGxvd3MuICAqLworQGdyb3VwCitpbnB1dDoKKyAgLyogZW1wdHkgKi8KK3wgaW5wdXQgbGluZQorOworQGVuZCBncm91cAorCitAZ3JvdXAKK2xpbmU6CisgICdcbicKK3wgZXhwICdcbicgICBAeyBwcmludGYgKCIlLjEwZ1xuIiwgJDEpOyBAfQorfCBlcnJvciAnXG4nIEB7IHl5ZXJyb2s7ICAgICAgICAgICAgICAgIEB9Cis7CitAZW5kIGdyb3VwCisKK0Bncm91cAorZXhwOgorICBOVU0gICAgICAgICAgICAgICAgQHsgJCQgPSAkMTsgICAgICAgICAgICAgICAgICAgICAgICAgQH0KK3wgVkFSICAgICAgICAgICAgICAgIEB7ICQkID0gJDEtPnZhbHVlLnZhcjsgICAgICAgICAgICAgIEB9Cit8IFZBUiAnPScgZXhwICAgICAgICBAeyAkJCA9ICQzOyAkMS0+dmFsdWUudmFyID0gJDM7ICAgICBAfQorfCBGTkNUICcoJyBleHAgJyknICAgQHsgJCQgPSAoKigkMS0+dmFsdWUuZm5jdHB0cikpKCQzKTsgQH0KK3wgZXhwICcrJyBleHAgICAgICAgIEB7ICQkID0gJDEgKyAkMzsgICAgICAgICAgICAgICAgICAgIEB9Cit8IGV4cCAnLScgZXhwICAgICAgICBAeyAkJCA9ICQxIC0gJDM7ICAgICAgICAgICAgICAgICAgICBAfQorfCBleHAgJyonIGV4cCAgICAgICAgQHsgJCQgPSAkMSAqICQzOyAgICAgICAgICAgICAgICAgICAgQH0KK3wgZXhwICcvJyBleHAgICAgICAgIEB7ICQkID0gJDEgLyAkMzsgICAgICAgICAgICAgICAgICAgIEB9Cit8ICctJyBleHAgICVwcmVjIE5FRyBAeyAkJCA9IC0kMjsgICAgICAgICAgICAgICAgICAgICAgICBAfQorfCBleHAgJ14nIGV4cCAgICAgICAgQHsgJCQgPSBwb3cgKCQxLCAkMyk7ICAgICAgICAgICAgICAgQH0KK3wgJygnIGV4cCAnKScgICAgICAgIEB7ICQkID0gJDI7ICAgICAgICAgICAgICAgICAgICAgICAgIEB9Cis7CitAZW5kIGdyb3VwCisvKiBFbmQgb2YgZ3JhbW1hci4gICovCislJQorQGVuZCBleGFtcGxlCisKK0Bub2RlIE1mY2FsYyBTeW1ib2wgVGFibGUKK0BzdWJzZWN0aW9uIFRoZSBAY29kZXttZmNhbGN9IFN5bWJvbCBUYWJsZQorQGNpbmRleCBzeW1ib2wgdGFibGUgZXhhbXBsZQorCitUaGUgbXVsdGktZnVuY3Rpb24gY2FsY3VsYXRvciByZXF1aXJlcyBhIHN5bWJvbCB0YWJsZSB0byBrZWVwIHRyYWNrIG9mIHRoZQorbmFtZXMgYW5kIG1lYW5pbmdzIG9mIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zLiAgVGhpcyBkb2Vzbid0IGFmZmVjdCB0aGUKK2dyYW1tYXIgcnVsZXMgKGV4Y2VwdCBmb3IgdGhlIGFjdGlvbnMpIG9yIHRoZSBCaXNvbiBkZWNsYXJhdGlvbnMsIGJ1dCBpdAorcmVxdWlyZXMgc29tZSBhZGRpdGlvbmFsIEMgZnVuY3Rpb25zIGZvciBzdXBwb3J0LgorCitUaGUgc3ltYm9sIHRhYmxlIGl0c2VsZiBjb25zaXN0cyBvZiBhIGxpbmtlZCBsaXN0IG9mIHJlY29yZHMuICBJdHMKK2RlZmluaXRpb24sIHdoaWNoIGlzIGtlcHQgaW4gdGhlIGhlYWRlciBAZmlsZXtjYWxjLmh9LCBpcyBhcyBmb2xsb3dzLiAgSXQKK3Byb3ZpZGVzIGZvciBlaXRoZXIgZnVuY3Rpb25zIG9yIHZhcmlhYmxlcyB0byBiZSBwbGFjZWQgaW4gdGhlIHRhYmxlLgorCitAY29tbWVudCBmaWxlOiBjYWxjLmgKK0BleGFtcGxlCitAZ3JvdXAKKy8qIEZ1bmN0aW9uIHR5cGUuICAqLwordHlwZWRlZiBkb3VibGUgKCpmdW5jX3QpIChkb3VibGUpOworQGVuZCBncm91cAorCitAZ3JvdXAKKy8qIERhdGEgdHlwZSBmb3IgbGlua3MgaW4gdGhlIGNoYWluIG9mIHN5bWJvbHMuICAqLworc3RydWN0IHN5bXJlYworQHsKKyAgY2hhciAqbmFtZTsgIC8qIG5hbWUgb2Ygc3ltYm9sICovCisgIGludCB0eXBlOyAgICAvKiB0eXBlIG9mIHN5bWJvbDogZWl0aGVyIFZBUiBvciBGTkNUICovCisgIHVuaW9uCisgIEB7CisgICAgZG91YmxlIHZhcjsgICAgICAvKiB2YWx1ZSBvZiBhIFZBUiAqLworICAgIGZ1bmNfdCBmbmN0cHRyOyAgLyogdmFsdWUgb2YgYSBGTkNUICovCisgIEB9IHZhbHVlOworICBzdHJ1Y3Qgc3ltcmVjICpuZXh0OyAgLyogbGluayBmaWVsZCAqLworQH07CitAZW5kIGdyb3VwCisKK0Bncm91cAordHlwZWRlZiBzdHJ1Y3Qgc3ltcmVjIHN5bXJlYzsKKworLyogVGhlIHN5bWJvbCB0YWJsZTogYSBjaGFpbiBvZiBgc3RydWN0IHN5bXJlYycuICAqLworZXh0ZXJuIHN5bXJlYyAqc3ltX3RhYmxlOworCitzeW1yZWMgKnB1dHN5bSAoY2hhciBjb25zdCAqLCBpbnQpOworc3ltcmVjICpnZXRzeW0gKGNoYXIgY29uc3QgKik7CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworVGhlIG5ldyB2ZXJzaW9uIG9mIEBjb2Rle21haW59IGluY2x1ZGVzIGEgY2FsbCB0byBAY29kZXtpbml0X3RhYmxlfSwgYQorZnVuY3Rpb24gdGhhdCBpbml0aWFsaXplcyB0aGUgc3ltYm9sIHRhYmxlLiAgSGVyZSBpdCBpcywgYW5kCitAY29kZXtpbml0X3RhYmxlfSBhcyB3ZWxsOgorCitAY29tbWVudCBmaWxlOiBtZmNhbGMueTogMworQGV4YW1wbGUKKyNpbmNsdWRlIDxzdGRpby5oPgorCitAZ3JvdXAKKy8qIENhbGxlZCBieSB5eXBhcnNlIG9uIGVycm9yLiAgKi8KK3ZvaWQKK3l5ZXJyb3IgKGNoYXIgY29uc3QgKnMpCitAeworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgcyk7CitAfQorQGVuZCBncm91cAorCitAZ3JvdXAKK3N0cnVjdCBpbml0CitAeworICBjaGFyIGNvbnN0ICpmbmFtZTsKKyAgZG91YmxlICgqZm5jdCkgKGRvdWJsZSk7CitAfTsKK0BlbmQgZ3JvdXAKKworQGdyb3VwCitzdHJ1Y3QgaW5pdCBjb25zdCBhcml0aF9mbmN0c1tdID0KK0B7CisgICJzaW4iLCAgc2luLAorICAiY29zIiwgIGNvcywKKyAgImF0YW4iLCBhdGFuLAorICAibG4iLCAgIGxvZywKKyAgImV4cCIsICBleHAsCisgICJzcXJ0Iiwgc3FydCwKKyAgMCwgMAorQH07CitAZW5kIGdyb3VwCisKK0Bncm91cAorLyogVGhlIHN5bWJvbCB0YWJsZTogYSBjaGFpbiBvZiBgc3RydWN0IHN5bXJlYycuICAqLworc3ltcmVjICpzeW1fdGFibGU7CitAZW5kIGdyb3VwCisKK0Bncm91cAorLyogUHV0IGFyaXRobWV0aWMgZnVuY3Rpb25zIGluIHRhYmxlLiAgKi8KK3ZvaWQKK2luaXRfdGFibGUgKHZvaWQpCitAeworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgYXJpdGhfZm5jdHNbaV0uZm5hbWUgIT0gMDsgaSsrKQorICAgIEB7CisgICAgICBzeW1yZWMgKnB0ciA9IHB1dHN5bSAoYXJpdGhfZm5jdHNbaV0uZm5hbWUsIEZOQ1QpOworICAgICAgcHRyLT52YWx1ZS5mbmN0cHRyID0gYXJpdGhfZm5jdHNbaV0uZm5jdDsKKyAgICBAfQorQH0KK0BlbmQgZ3JvdXAKKworQGdyb3VwCitpbnQKK21haW4gKHZvaWQpCitAeworICBpbml0X3RhYmxlICgpOworICByZXR1cm4geXlwYXJzZSAoKTsKK0B9CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworQnkgc2ltcGx5IGVkaXRpbmcgdGhlIGluaXRpYWxpemF0aW9uIGxpc3QgYW5kIGFkZGluZyB0aGUgbmVjZXNzYXJ5IGluY2x1ZGUKK2ZpbGVzLCB5b3UgY2FuIGFkZCBhZGRpdGlvbmFsIGZ1bmN0aW9ucyB0byB0aGUgY2FsY3VsYXRvci4KKworVHdvIGltcG9ydGFudCBmdW5jdGlvbnMgYWxsb3cgbG9vay11cCBhbmQgaW5zdGFsbGF0aW9uIG9mIHN5bWJvbHMgaW4gdGhlCitzeW1ib2wgdGFibGUuICBUaGUgZnVuY3Rpb24gQGNvZGV7cHV0c3ltfSBpcyBwYXNzZWQgYSBuYW1lIGFuZCB0aGUgdHlwZQorKEBjb2Rle1ZBUn0gb3IgQGNvZGV7Rk5DVH0pIG9mIHRoZSBvYmplY3QgdG8gYmUgaW5zdGFsbGVkLiAgVGhlIG9iamVjdCBpcworbGlua2VkIHRvIHRoZSBmcm9udCBvZiB0aGUgbGlzdCwgYW5kIGEgcG9pbnRlciB0byB0aGUgb2JqZWN0IGlzIHJldHVybmVkLgorVGhlIGZ1bmN0aW9uIEBjb2Rle2dldHN5bX0gaXMgcGFzc2VkIHRoZSBuYW1lIG9mIHRoZSBzeW1ib2wgdG8gbG9vayB1cC4gIElmCitmb3VuZCwgYSBwb2ludGVyIHRvIHRoYXQgc3ltYm9sIGlzIHJldHVybmVkOyBvdGhlcndpc2UgemVybyBpcyByZXR1cm5lZC4KKworQGNvbW1lbnQgZmlsZTogbWZjYWxjLnk6IDMKK0BleGFtcGxlCisjaW5jbHVkZSA8c3RkbGliLmg+IC8qIG1hbGxvYy4gKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4gLyogc3RybGVuLiAqLworCitAZ3JvdXAKK3N5bXJlYyAqCitwdXRzeW0gKGNoYXIgY29uc3QgKnN5bV9uYW1lLCBpbnQgc3ltX3R5cGUpCitAeworICBzeW1yZWMgKnB0ciA9IChzeW1yZWMgKikgbWFsbG9jIChzaXplb2YgKHN5bXJlYykpOworICBwdHItPm5hbWUgPSAoY2hhciAqKSBtYWxsb2MgKHN0cmxlbiAoc3ltX25hbWUpICsgMSk7CisgIHN0cmNweSAocHRyLT5uYW1lLHN5bV9uYW1lKTsKKyAgcHRyLT50eXBlID0gc3ltX3R5cGU7CisgIHB0ci0+dmFsdWUudmFyID0gMDsgLyogU2V0IHZhbHVlIHRvIDAgZXZlbiBpZiBmY3RuLiAgKi8KKyAgcHRyLT5uZXh0ID0gKHN0cnVjdCBzeW1yZWMgKilzeW1fdGFibGU7CisgIHN5bV90YWJsZSA9IHB0cjsKKyAgcmV0dXJuIHB0cjsKK0B9CitAZW5kIGdyb3VwCisKK0Bncm91cAorc3ltcmVjICoKK2dldHN5bSAoY2hhciBjb25zdCAqc3ltX25hbWUpCitAeworICBzeW1yZWMgKnB0cjsKKyAgZm9yIChwdHIgPSBzeW1fdGFibGU7IHB0ciAhPSAoc3ltcmVjICopIDA7CisgICAgICAgcHRyID0gKHN5bXJlYyAqKXB0ci0+bmV4dCkKKyAgICBpZiAoc3RyY21wIChwdHItPm5hbWUsc3ltX25hbWUpID09IDApCisgICAgICByZXR1cm4gcHRyOworICByZXR1cm4gMDsKK0B9CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworVGhlIGZ1bmN0aW9uIEBjb2Rle3l5bGV4fSBtdXN0IG5vdyByZWNvZ25pemUgdmFyaWFibGVzLCBudW1lcmljIHZhbHVlcywgYW5kCit0aGUgc2luZ2xlLWNoYXJhY3RlciBhcml0aG1ldGljIG9wZXJhdG9ycy4gIFN0cmluZ3Mgb2YgYWxwaGFudW1lcmljCitjaGFyYWN0ZXJzIHdpdGggYSBsZWFkaW5nIGxldHRlciBhcmUgcmVjb2duaXplZCBhcyBlaXRoZXIgdmFyaWFibGVzIG9yCitmdW5jdGlvbnMgZGVwZW5kaW5nIG9uIHdoYXQgdGhlIHN5bWJvbCB0YWJsZSBzYXlzIGFib3V0IHRoZW0uCisKK1RoZSBzdHJpbmcgaXMgcGFzc2VkIHRvIEBjb2Rle2dldHN5bX0gZm9yIGxvb2sgdXAgaW4gdGhlIHN5bWJvbCB0YWJsZS4gIElmCit0aGUgbmFtZSBhcHBlYXJzIGluIHRoZSB0YWJsZSwgYSBwb2ludGVyIHRvIGl0cyBsb2NhdGlvbiBhbmQgaXRzIHR5cGUKKyhAY29kZXtWQVJ9IG9yIEBjb2Rle0ZOQ1R9KSBpcyByZXR1cm5lZCB0byBAY29kZXt5eXBhcnNlfS4gIElmIGl0IGlzIG5vdAorYWxyZWFkeSBpbiB0aGUgdGFibGUsIHRoZW4gaXQgaXMgaW5zdGFsbGVkIGFzIGEgQGNvZGV7VkFSfSB1c2luZworQGNvZGV7cHV0c3ltfS4gIEFnYWluLCBhIHBvaW50ZXIgYW5kIGl0cyB0eXBlICh3aGljaCBtdXN0IGJlIEBjb2Rle1ZBUn0pIGlzCityZXR1cm5lZCB0byBAY29kZXt5eXBhcnNlfS4KKworTm8gY2hhbmdlIGlzIG5lZWRlZCBpbiB0aGUgaGFuZGxpbmcgb2YgbnVtZXJpYyB2YWx1ZXMgYW5kIGFyaXRobWV0aWMKK29wZXJhdG9ycyBpbiBAY29kZXt5eWxleH0uCisKK0Bjb21tZW50IGZpbGU6IG1mY2FsYy55OiAzCitAZXhhbXBsZQorQGdyb3VwCisjaW5jbHVkZSA8Y3R5cGUuaD4KK0BlbmQgZ3JvdXAKKworQGdyb3VwCitpbnQKK3l5bGV4ICh2b2lkKQorQHsKKyAgaW50IGM7CisKKyAgLyogSWdub3JlIHdoaXRlIHNwYWNlLCBnZXQgZmlyc3Qgbm9ud2hpdGUgY2hhcmFjdGVyLiAgKi8KKyAgd2hpbGUgKChjID0gZ2V0Y2hhciAoKSkgPT0gJyAnIHx8IGMgPT0gJ1x0JykKKyAgICBjb250aW51ZTsKKworICBpZiAoYyA9PSBFT0YpCisgICAgcmV0dXJuIDA7CitAZW5kIGdyb3VwCisKK0Bncm91cAorICAvKiBDaGFyIHN0YXJ0cyBhIG51bWJlciA9PiBwYXJzZSB0aGUgbnVtYmVyLiAgICAgICAgICovCisgIGlmIChjID09ICcuJyB8fCBpc2RpZ2l0IChjKSkKKyAgICBAeworICAgICAgdW5nZXRjIChjLCBzdGRpbik7CisgICAgICBzY2FuZiAoIiVsZiIsICZ5eWx2YWwudmFsKTsKKyAgICAgIHJldHVybiBOVU07CisgICAgQH0KK0BlbmQgZ3JvdXAKKworQGdyb3VwCisgIC8qIENoYXIgc3RhcnRzIGFuIGlkZW50aWZpZXIgPT4gcmVhZCB0aGUgbmFtZS4gICAgICAgKi8KKyAgaWYgKGlzYWxwaGEgKGMpKQorICAgIEB7CisgICAgICAvKiBJbml0aWFsbHkgbWFrZSB0aGUgYnVmZmVyIGxvbmcgZW5vdWdoCisgICAgICAgICBmb3IgYSA0MC1jaGFyYWN0ZXIgc3ltYm9sIG5hbWUuICAqLworICAgICAgc3RhdGljIHNpemVfdCBsZW5ndGggPSA0MDsKKyAgICAgIHN0YXRpYyBjaGFyICpzeW1idWYgPSAwOworICAgICAgc3ltcmVjICpzOworICAgICAgaW50IGk7CitAZW5kIGdyb3VwCisKKyAgICAgIGlmICghc3ltYnVmKQorICAgICAgICBzeW1idWYgPSAoY2hhciAqKSBtYWxsb2MgKGxlbmd0aCArIDEpOworCisgICAgICBpID0gMDsKKyAgICAgIGRvCitAZ3JvdXAKKyAgICAgICAgQHsKKyAgICAgICAgICAvKiBJZiBidWZmZXIgaXMgZnVsbCwgbWFrZSBpdCBiaWdnZXIuICAgICAgICAqLworICAgICAgICAgIGlmIChpID09IGxlbmd0aCkKKyAgICAgICAgICAgIEB7CisgICAgICAgICAgICAgIGxlbmd0aCAqPSAyOworICAgICAgICAgICAgICBzeW1idWYgPSAoY2hhciAqKSByZWFsbG9jIChzeW1idWYsIGxlbmd0aCArIDEpOworICAgICAgICAgICAgQH0KKyAgICAgICAgICAvKiBBZGQgdGhpcyBjaGFyYWN0ZXIgdG8gdGhlIGJ1ZmZlci4gICAgICAgICAqLworICAgICAgICAgIHN5bWJ1ZltpKytdID0gYzsKKyAgICAgICAgICAvKiBHZXQgYW5vdGhlciBjaGFyYWN0ZXIuICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIGMgPSBnZXRjaGFyICgpOworICAgICAgICBAfQorQGVuZCBncm91cAorQGdyb3VwCisgICAgICB3aGlsZSAoaXNhbG51bSAoYykpOworCisgICAgICB1bmdldGMgKGMsIHN0ZGluKTsKKyAgICAgIHN5bWJ1ZltpXSA9ICdcMCc7CitAZW5kIGdyb3VwCisKK0Bncm91cAorICAgICAgcyA9IGdldHN5bSAoc3ltYnVmKTsKKyAgICAgIGlmIChzID09IDApCisgICAgICAgIHMgPSBwdXRzeW0gKHN5bWJ1ZiwgVkFSKTsKKyAgICAgIHl5bHZhbC50cHRyID0gczsKKyAgICAgIHJldHVybiBzLT50eXBlOworICAgIEB9CisKKyAgLyogQW55IG90aGVyIGNoYXJhY3RlciBpcyBhIHRva2VuIGJ5IGl0c2VsZi4gICAgICAgICovCisgIHJldHVybiBjOworQH0KK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitUaGUgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uIGlzIHVuY2hhbmdlZCwgYW5kIHRoZSBuZXcgdmVyc2lvbiBvZgorQGNvZGV7bWFpbn0gaW5jbHVkZXMgYSBjYWxsIHRvIEBjb2Rle2luaXRfdGFibGV9IGFuZCBzZXRzIHRoZSBAY29kZXt5eWRlYnVnfQorb24gdXNlciBkZW1hbmQgKEB4cmVme1RyYWNpbmcsICwgVHJhY2luZyBZb3VyIFBhcnNlcn0sIGZvciBkZXRhaWxzKToKKworQGNvbW1lbnQgZmlsZTogbWZjYWxjLnk6IDMKK0BleGFtcGxlCitAZ3JvdXAKKy8qIENhbGxlZCBieSB5eXBhcnNlIG9uIGVycm9yLiAgKi8KK3ZvaWQKK3l5ZXJyb3IgKGNoYXIgY29uc3QgKnMpCitAeworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgcyk7CitAfQorQGVuZCBncm91cAorCitAZ3JvdXAKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgY29uc3QqIGFyZ3ZbXSkKK0B7CisgIGludCBpOworICAvKiBFbmFibGUgcGFyc2UgdHJhY2VzIG9uIG9wdGlvbiAtcC4gICovCisgIGZvciAoaSA9IDE7IGkgPCBhcmdjOyArK2kpCisgICAgaWYgKCFzdHJjbXAoYXJndltpXSwgIi1wIikpCisgICAgICB5eWRlYnVnID0gMTsKKyAgaW5pdF90YWJsZSAoKTsKKyAgcmV0dXJuIHl5cGFyc2UgKCk7CitAfQorQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK1RoaXMgcHJvZ3JhbSBpcyBib3RoIHBvd2VyZnVsIGFuZCBmbGV4aWJsZS4gIFlvdSBtYXkgZWFzaWx5IGFkZCBuZXcKK2Z1bmN0aW9ucywgYW5kIGl0IGlzIGEgc2ltcGxlIGpvYiB0byBtb2RpZnkgdGhpcyBjb2RlIHRvIGluc3RhbGwKK3ByZWRlZmluZWQgdmFyaWFibGVzIHN1Y2ggYXMgQGNvZGV7cGl9IG9yIEBjb2Rle2V9IGFzIHdlbGwuCisKK0Bub2RlIEV4ZXJjaXNlcworQHNlY3Rpb24gRXhlcmNpc2VzCitAY2luZGV4IGV4ZXJjaXNlcworCitAZW51bWVyYXRlCitAaXRlbQorQWRkIHNvbWUgbmV3IGZ1bmN0aW9ucyBmcm9tIEBmaWxle21hdGguaH0gdG8gdGhlIGluaXRpYWxpemF0aW9uIGxpc3QuCisKK0BpdGVtCitBZGQgYW5vdGhlciBhcnJheSB0aGF0IGNvbnRhaW5zIGNvbnN0YW50cyBhbmQgdGhlaXIgdmFsdWVzLiAgVGhlbgorbW9kaWZ5IEBjb2Rle2luaXRfdGFibGV9IHRvIGFkZCB0aGVzZSBjb25zdGFudHMgdG8gdGhlIHN5bWJvbCB0YWJsZS4KK0l0IHdpbGwgYmUgZWFzaWVzdCB0byBnaXZlIHRoZSBjb25zdGFudHMgdHlwZSBAY29kZXtWQVJ9LgorCitAaXRlbQorTWFrZSB0aGUgcHJvZ3JhbSByZXBvcnQgYW4gZXJyb3IgaWYgdGhlIHVzZXIgcmVmZXJzIHRvIGFuCit1bmluaXRpYWxpemVkIHZhcmlhYmxlIGluIGFueSB3YXkgZXhjZXB0IHRvIHN0b3JlIGEgdmFsdWUgaW4gaXQuCitAZW5kIGVudW1lcmF0ZQorCitAbm9kZSBHcmFtbWFyIEZpbGUKK0BjaGFwdGVyIEJpc29uIEdyYW1tYXIgRmlsZXMKKworQmlzb24gdGFrZXMgYXMgaW5wdXQgYSBjb250ZXh0LWZyZWUgZ3JhbW1hciBzcGVjaWZpY2F0aW9uIGFuZCBwcm9kdWNlcyBhCitDLWxhbmd1YWdlIGZ1bmN0aW9uIHRoYXQgcmVjb2duaXplcyBjb3JyZWN0IGluc3RhbmNlcyBvZiB0aGUgZ3JhbW1hci4KKworVGhlIEJpc29uIGdyYW1tYXIgZmlsZSBjb252ZW50aW9uYWxseSBoYXMgYSBuYW1lIGVuZGluZyBpbiBAc2FtcHsueX0uCitAeHJlZntJbnZvY2F0aW9uLCAsSW52b2tpbmcgQmlzb259LgorCitAbWVudQorKiBHcmFtbWFyIE91dGxpbmU6OiAgICBPdmVyYWxsIGxheW91dCBvZiB0aGUgZ3JhbW1hciBmaWxlLgorKiBTeW1ib2xzOjogICAgICAgICAgICBUZXJtaW5hbCBhbmQgbm9udGVybWluYWwgc3ltYm9scy4KKyogUnVsZXM6OiAgICAgICAgICAgICAgSG93IHRvIHdyaXRlIGdyYW1tYXIgcnVsZXMuCisqIFJlY3Vyc2lvbjo6ICAgICAgICAgIFdyaXRpbmcgcmVjdXJzaXZlIHJ1bGVzLgorKiBTZW1hbnRpY3M6OiAgICAgICAgICBTZW1hbnRpYyB2YWx1ZXMgYW5kIGFjdGlvbnMuCisqIFRyYWNraW5nIExvY2F0aW9uczo6IExvY2F0aW9ucyBhbmQgYWN0aW9ucy4KKyogTmFtZWQgUmVmZXJlbmNlczo6ICAgVXNpbmcgbmFtZWQgcmVmZXJlbmNlcyBpbiBhY3Rpb25zLgorKiBEZWNsYXJhdGlvbnM6OiAgICAgICBBbGwga2luZHMgb2YgQmlzb24gZGVjbGFyYXRpb25zIGFyZSBkZXNjcmliZWQgaGVyZS4KKyogTXVsdGlwbGUgUGFyc2Vyczo6ICAgUHV0dGluZyBtb3JlIHRoYW4gb25lIEJpc29uIHBhcnNlciBpbiBvbmUgcHJvZ3JhbS4KK0BlbmQgbWVudQorCitAbm9kZSBHcmFtbWFyIE91dGxpbmUKK0BzZWN0aW9uIE91dGxpbmUgb2YgYSBCaXNvbiBHcmFtbWFyCitAY2luZGV4IGNvbW1lbnQKK0BmaW5kZXggLy8gQGRvdHN7fQorQGZpbmRleCAvKiBAZG90c3t9ICovCisKK0EgQmlzb24gZ3JhbW1hciBmaWxlIGhhcyBmb3VyIG1haW4gc2VjdGlvbnMsIHNob3duIGhlcmUgd2l0aCB0aGUKK2FwcHJvcHJpYXRlIGRlbGltaXRlcnM6CisKK0BleGFtcGxlCislQHsKKyAgQHZhcntQcm9sb2d1ZX0KKyVAfQorCitAdmFye0Jpc29uIGRlY2xhcmF0aW9uc30KKworJSUKK0B2YXJ7R3JhbW1hciBydWxlc30KKyUlCisKK0B2YXJ7RXBpbG9ndWV9CitAZW5kIGV4YW1wbGUKKworQ29tbWVudHMgZW5jbG9zZWQgaW4gQHNhbXB7LyogQGRvdHN7fSAqL30gbWF5IGFwcGVhciBpbiBhbnkgb2YgdGhlIHNlY3Rpb25zLgorQXMgYSBHTlUgZXh0ZW5zaW9uLCBAc2FtcHsvL30gaW50cm9kdWNlcyBhIGNvbW1lbnQgdGhhdCBjb250aW51ZXMgdW50aWwgZW5kCitvZiBsaW5lLgorCitAbWVudQorKiBQcm9sb2d1ZTo6ICAgICAgICAgICAgICBTeW50YXggYW5kIHVzYWdlIG9mIHRoZSBwcm9sb2d1ZS4KKyogUHJvbG9ndWUgQWx0ZXJuYXRpdmVzOjogU3ludGF4IGFuZCB1c2FnZSBvZiBhbHRlcm5hdGl2ZXMgdG8gdGhlIHByb2xvZ3VlLgorKiBCaXNvbiBEZWNsYXJhdGlvbnM6OiAgICBTeW50YXggYW5kIHVzYWdlIG9mIHRoZSBCaXNvbiBkZWNsYXJhdGlvbnMgc2VjdGlvbi4KKyogR3JhbW1hciBSdWxlczo6ICAgICAgICAgU3ludGF4IGFuZCB1c2FnZSBvZiB0aGUgZ3JhbW1hciBydWxlcyBzZWN0aW9uLgorKiBFcGlsb2d1ZTo6ICAgICAgICAgICAgICBTeW50YXggYW5kIHVzYWdlIG9mIHRoZSBlcGlsb2d1ZS4KK0BlbmQgbWVudQorCitAbm9kZSBQcm9sb2d1ZQorQHN1YnNlY3Rpb24gVGhlIHByb2xvZ3VlCitAY2luZGV4IGRlY2xhcmF0aW9ucyBzZWN0aW9uCitAY2luZGV4IFByb2xvZ3VlCitAY2luZGV4IGRlY2xhcmF0aW9ucworCitUaGUgQHZhcntQcm9sb2d1ZX0gc2VjdGlvbiBjb250YWlucyBtYWNybyBkZWZpbml0aW9ucyBhbmQgZGVjbGFyYXRpb25zCitvZiBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyB0aGF0IGFyZSB1c2VkIGluIHRoZSBhY3Rpb25zIGluIHRoZSBncmFtbWFyCitydWxlcy4gIFRoZXNlIGFyZSBjb3BpZWQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFyc2VyIGltcGxlbWVudGF0aW9uCitmaWxlIHNvIHRoYXQgdGhleSBwcmVjZWRlIHRoZSBkZWZpbml0aW9uIG9mIEBjb2Rle3l5cGFyc2V9LiAgWW91IGNhbgordXNlIEBzYW1weyNpbmNsdWRlfSB0byBnZXQgdGhlIGRlY2xhcmF0aW9ucyBmcm9tIGEgaGVhZGVyIGZpbGUuICBJZgoreW91IGRvbid0IG5lZWQgYW55IEMgZGVjbGFyYXRpb25zLCB5b3UgbWF5IG9taXQgdGhlIEBzYW1weyVAe30gYW5kCitAc2FtcHslQH19IGRlbGltaXRlcnMgdGhhdCBicmFja2V0IHRoaXMgc2VjdGlvbi4KKworVGhlIEB2YXJ7UHJvbG9ndWV9IHNlY3Rpb24gaXMgdGVybWluYXRlZCBieSB0aGUgZmlyc3Qgb2NjdXJyZW5jZQorb2YgQHNhbXB7JUB9fSB0aGF0IGlzIG91dHNpZGUgYSBjb21tZW50LCBhIHN0cmluZyBsaXRlcmFsLCBvciBhCitjaGFyYWN0ZXIgY29uc3RhbnQuCisKK1lvdSBtYXkgaGF2ZSBtb3JlIHRoYW4gb25lIEB2YXJ7UHJvbG9ndWV9IHNlY3Rpb24sIGludGVybWl4ZWQgd2l0aCB0aGUKK0B2YXJ7Qmlzb24gZGVjbGFyYXRpb25zfS4gIFRoaXMgYWxsb3dzIHlvdSB0byBoYXZlIEMgYW5kIEJpc29uCitkZWNsYXJhdGlvbnMgdGhhdCByZWZlciB0byBlYWNoIG90aGVyLiAgRm9yIGV4YW1wbGUsIHRoZSBAY29kZXsldW5pb259CitkZWNsYXJhdGlvbiBtYXkgdXNlIHR5cGVzIGRlZmluZWQgaW4gYSBoZWFkZXIgZmlsZSwgYW5kIHlvdSBtYXkgd2lzaCB0bworcHJvdG90eXBlIGZ1bmN0aW9ucyB0aGF0IHRha2UgYXJndW1lbnRzIG9mIHR5cGUgQGNvZGV7WVlTVFlQRX0uICBUaGlzCitjYW4gYmUgZG9uZSB3aXRoIHR3byBAdmFye1Byb2xvZ3VlfSBibG9ja3MsIG9uZSBiZWZvcmUgYW5kIG9uZSBhZnRlciB0aGUKK0Bjb2RleyV1bmlvbn0gZGVjbGFyYXRpb24uCisKK0BleGFtcGxlCislQHsKKyAgI2RlZmluZSBfR05VX1NPVVJDRQorICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgI2luY2x1ZGUgInB0eXBlcy5oIgorJUB9CisKKyV1bmlvbiBAeworICBsb25nIGludCBuOworICB0cmVlIHQ7ICAvKiBAcntAY29kZXt0cmVlfSBpcyBkZWZpbmVkIGluIEBmaWxle3B0eXBlcy5ofS59ICovCitAfQorCislQHsKKyAgc3RhdGljIHZvaWQgcHJpbnRfdG9rZW5fdmFsdWUgKEZJTEUgKiwgaW50LCBZWVNUWVBFKTsKKyAgI2RlZmluZSBZWVBSSU5UKEYsIE4sIEwpIHByaW50X3Rva2VuX3ZhbHVlIChGLCBOLCBMKQorJUB9CisKK0Bkb3Rze30KK0BlbmQgZXhhbXBsZQorCitXaGVuIGluIGRvdWJ0LCBpdCBpcyB1c3VhbGx5IHNhZmVyIHRvIHB1dCBwcm9sb2d1ZSBjb2RlIGJlZm9yZSBhbGwKK0Jpc29uIGRlY2xhcmF0aW9ucywgcmF0aGVyIHRoYW4gYWZ0ZXIuICBGb3IgZXhhbXBsZSwgYW55IGRlZmluaXRpb25zCitvZiBmZWF0dXJlIHRlc3QgbWFjcm9zIGxpa2UgQGNvZGV7X0dOVV9TT1VSQ0V9IG9yCitAY29kZXtfUE9TSVhfQ19TT1VSQ0V9IHNob3VsZCBhcHBlYXIgYmVmb3JlIGFsbCBCaXNvbiBkZWNsYXJhdGlvbnMsIGFzCitmZWF0dXJlIHRlc3QgbWFjcm9zIGNhbiBhZmZlY3QgdGhlIGJlaGF2aW9yIG9mIEJpc29uLWdlbmVyYXRlZAorQGNvZGV7I2luY2x1ZGV9IGRpcmVjdGl2ZXMuCisKK0Bub2RlIFByb2xvZ3VlIEFsdGVybmF0aXZlcworQHN1YnNlY3Rpb24gUHJvbG9ndWUgQWx0ZXJuYXRpdmVzCitAY2luZGV4IFByb2xvZ3VlIEFsdGVybmF0aXZlcworCitAZmluZGV4ICVjb2RlCitAZmluZGV4ICVjb2RlIHJlcXVpcmVzCitAZmluZGV4ICVjb2RlIHByb3ZpZGVzCitAZmluZGV4ICVjb2RlIHRvcAorCitUaGUgZnVuY3Rpb25hbGl0eSBvZiBAdmFye1Byb2xvZ3VlfSBzZWN0aW9ucyBjYW4gb2Z0ZW4gYmUgc3VidGxlIGFuZAoraW5mbGV4aWJsZS4gIEFzIGFuIGFsdGVybmF0aXZlLCBCaXNvbiBwcm92aWRlcyBhIEBjb2RleyVjb2RlfQorZGlyZWN0aXZlIHdpdGggYW4gZXhwbGljaXQgcXVhbGlmaWVyIGZpZWxkLCB3aGljaCBpZGVudGlmaWVzIHRoZQorcHVycG9zZSBvZiB0aGUgY29kZSBhbmQgdGh1cyB0aGUgbG9jYXRpb24ocykgd2hlcmUgQmlzb24gc2hvdWxkCitnZW5lcmF0ZSBpdC4gIEZvciBDL0MrKywgdGhlIHF1YWxpZmllciBjYW4gYmUgb21pdHRlZCBmb3IgdGhlIGRlZmF1bHQKK2xvY2F0aW9uLCBvciBpdCBjYW4gYmUgb25lIG9mIEBjb2Rle3JlcXVpcmVzfSwgQGNvZGV7cHJvdmlkZXN9LAorQGNvZGV7dG9wfS4gIEB4cmVmeyVjb2RlIFN1bW1hcnl9LgorCitMb29rIGFnYWluIGF0IHRoZSBleGFtcGxlIG9mIHRoZSBwcmV2aW91cyBzZWN0aW9uOgorCitAZXhhbXBsZQorJUB7CisgICNkZWZpbmUgX0dOVV9TT1VSQ0UKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICNpbmNsdWRlICJwdHlwZXMuaCIKKyVAfQorCisldW5pb24gQHsKKyAgbG9uZyBpbnQgbjsKKyAgdHJlZSB0OyAgLyogQHJ7QGNvZGV7dHJlZX0gaXMgZGVmaW5lZCBpbiBAZmlsZXtwdHlwZXMuaH0ufSAqLworQH0KKworJUB7CisgIHN0YXRpYyB2b2lkIHByaW50X3Rva2VuX3ZhbHVlIChGSUxFICosIGludCwgWVlTVFlQRSk7CisgICNkZWZpbmUgWVlQUklOVChGLCBOLCBMKSBwcmludF90b2tlbl92YWx1ZSAoRiwgTiwgTCkKKyVAfQorCitAZG90c3t9CitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitOb3RpY2UgdGhhdCB0aGVyZSBhcmUgdHdvIEB2YXJ7UHJvbG9ndWV9IHNlY3Rpb25zIGhlcmUsIGJ1dCB0aGVyZSdzIGEKK3N1YnRsZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZWlyIGZ1bmN0aW9uYWxpdHkuICBGb3IgZXhhbXBsZSwgaWYgeW91CitkZWNpZGUgdG8gb3ZlcnJpZGUgQmlzb24ncyBkZWZhdWx0IGRlZmluaXRpb24gZm9yIEBjb2Rle1lZTFRZUEV9LCBpbgord2hpY2ggQHZhcntQcm9sb2d1ZX0gc2VjdGlvbiBzaG91bGQgeW91IHdyaXRlIHlvdXIgbmV3IGRlZmluaXRpb24/CitZb3Ugc2hvdWxkIHdyaXRlIGl0IGluIHRoZSBmaXJzdCBzaW5jZSBCaXNvbiB3aWxsIGluc2VydCB0aGF0IGNvZGUKK2ludG8gdGhlIHBhcnNlciBpbXBsZW1lbnRhdGlvbiBmaWxlIEBlbXBoe2JlZm9yZX0gdGhlIGRlZmF1bHQKK0Bjb2Rle1lZTFRZUEV9IGRlZmluaXRpb24uICBJbiB3aGljaCBAdmFye1Byb2xvZ3VlfSBzZWN0aW9uIHNob3VsZCB5b3UKK3Byb3RvdHlwZSBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgQGNvZGV7dHJhY2VfdG9rZW59LCB0aGF0IGFjY2VwdHMKK0Bjb2Rle1lZTFRZUEV9IGFuZCBAY29kZXt5eXRva2VudHlwZX0gYXMgYXJndW1lbnRzPyAgWW91IHNob3VsZAorcHJvdG90eXBlIGl0IGluIHRoZSBzZWNvbmQgc2luY2UgQmlzb24gd2lsbCBpbnNlcnQgdGhhdCBjb2RlCitAZW1waHthZnRlcn0gdGhlIEBjb2Rle1lZTFRZUEV9IGFuZCBAY29kZXt5eXRva2VudHlwZX0gZGVmaW5pdGlvbnMuCisKK1RoaXMgZGlzdGluY3Rpb24gaW4gZnVuY3Rpb25hbGl0eSBiZXR3ZWVuIHRoZSB0d28gQHZhcntQcm9sb2d1ZX0gc2VjdGlvbnMgaXMKK2VzdGFibGlzaGVkIGJ5IHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBAY29kZXsldW5pb259IGJldHdlZW4gdGhlbS4KK1RoaXMgYmVoYXZpb3IgcmFpc2VzIGEgZmV3IHF1ZXN0aW9ucy4KK0ZpcnN0LCB3aHkgc2hvdWxkIHRoZSBwb3NpdGlvbiBvZiBhIEBjb2RleyV1bmlvbn0gYWZmZWN0IGRlZmluaXRpb25zIHJlbGF0ZWQgdG8KK0Bjb2Rle1lZTFRZUEV9IGFuZCBAY29kZXt5eXRva2VudHlwZX0/CitTZWNvbmQsIHdoYXQgaWYgdGhlcmUgaXMgbm8gQGNvZGV7JXVuaW9ufT8KK0luIHRoYXQgY2FzZSwgdGhlIHNlY29uZCBraW5kIG9mIEB2YXJ7UHJvbG9ndWV9IHNlY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4KK1RoaXMgYmVoYXZpb3IgaXMgbm90IGludHVpdGl2ZS4KKworVG8gYXZvaWQgdGhpcyBzdWJ0bGUgQGNvZGV7JXVuaW9ufSBkZXBlbmRlbmN5LCByZXdyaXRlIHRoZSBleGFtcGxlIHVzaW5nIGEKK0Bjb2RleyVjb2RlIHRvcH0gYW5kIGFuIHVucXVhbGlmaWVkIEBjb2RleyVjb2RlfS4KK0xldCdzIGdvIGFoZWFkIGFuZCBhZGQgdGhlIG5ldyBAY29kZXtZWUxUWVBFfSBkZWZpbml0aW9uIGFuZCB0aGUKK0Bjb2Rle3RyYWNlX3Rva2VufSBwcm90b3R5cGUgYXQgdGhlIHNhbWUgdGltZToKKworQGV4YW1wbGUKKyVjb2RlIHRvcCBAeworICAjZGVmaW5lIF9HTlVfU09VUkNFCisgICNpbmNsdWRlIDxzdGRpby5oPgorCisgIC8qIFdBUk5JTkc6IFRoZSBmb2xsb3dpbmcgY29kZSByZWFsbHkgYmVsb25ncworICAgKiBpbiBhIGAlY29kZSByZXF1aXJlcyc7IHNlZSBiZWxvdy4gICovCisKKyAgI2luY2x1ZGUgInB0eXBlcy5oIgorICAjZGVmaW5lIFlZTFRZUEUgWVlMVFlQRQorICB0eXBlZGVmIHN0cnVjdCBZWUxUWVBFCisgIEB7CisgICAgaW50IGZpcnN0X2xpbmU7CisgICAgaW50IGZpcnN0X2NvbHVtbjsKKyAgICBpbnQgbGFzdF9saW5lOworICAgIGludCBsYXN0X2NvbHVtbjsKKyAgICBjaGFyICpmaWxlbmFtZTsKKyAgQH0gWVlMVFlQRTsKK0B9CisKKyV1bmlvbiBAeworICBsb25nIGludCBuOworICB0cmVlIHQ7ICAvKiBAcntAY29kZXt0cmVlfSBpcyBkZWZpbmVkIGluIEBmaWxle3B0eXBlcy5ofS59ICovCitAfQorCislY29kZSBAeworICBzdGF0aWMgdm9pZCBwcmludF90b2tlbl92YWx1ZSAoRklMRSAqLCBpbnQsIFlZU1RZUEUpOworICAjZGVmaW5lIFlZUFJJTlQoRiwgTiwgTCkgcHJpbnRfdG9rZW5fdmFsdWUgKEYsIE4sIEwpCisgIHN0YXRpYyB2b2lkIHRyYWNlX3Rva2VuIChlbnVtIHl5dG9rZW50eXBlIHRva2VuLCBZWUxUWVBFIGxvYyk7CitAfQorCitAZG90c3t9CitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitJbiB0aGlzIHdheSwgQGNvZGV7JWNvZGUgdG9wfSBhbmQgdGhlIHVucXVhbGlmaWVkIEBjb2RleyVjb2RlfSBhY2hpZXZlIHRoZSBzYW1lCitmdW5jdGlvbmFsaXR5IGFzIHRoZSB0d28ga2luZHMgb2YgQHZhcntQcm9sb2d1ZX0gc2VjdGlvbnMsIGJ1dCBpdCdzIGFsd2F5cworZXhwbGljaXQgd2hpY2gga2luZCB5b3UgaW50ZW5kLgorTW9yZW92ZXIsIGJvdGgga2luZHMgYXJlIGFsd2F5cyBhdmFpbGFibGUgZXZlbiBpbiB0aGUgYWJzZW5jZSBvZiBAY29kZXsldW5pb259LgorCitUaGUgQGNvZGV7JWNvZGUgdG9wfSBibG9jayBhYm92ZSBsb2dpY2FsbHkgY29udGFpbnMgdHdvIHBhcnRzLiAgVGhlCitmaXJzdCB0d28gbGluZXMgYmVmb3JlIHRoZSB3YXJuaW5nIG5lZWQgdG8gYXBwZWFyIG5lYXIgdGhlIHRvcCBvZiB0aGUKK3BhcnNlciBpbXBsZW1lbnRhdGlvbiBmaWxlLiAgVGhlIGZpcnN0IGxpbmUgYWZ0ZXIgdGhlIHdhcm5pbmcgaXMKK3JlcXVpcmVkIGJ5IEBjb2Rle1lZU1RZUEV9IGFuZCB0aHVzIGFsc28gbmVlZHMgdG8gYXBwZWFyIGluIHRoZSBwYXJzZXIKK2ltcGxlbWVudGF0aW9uIGZpbGUuICBIb3dldmVyLCBpZiB5b3UndmUgaW5zdHJ1Y3RlZCBCaXNvbiB0byBnZW5lcmF0ZQorYSBwYXJzZXIgaGVhZGVyIGZpbGUgKEBweHJlZntEZWNsIFN1bW1hcnksICwlZGVmaW5lc30pLCB5b3UgcHJvYmFibHkKK3dhbnQgdGhhdCBsaW5lIHRvIGFwcGVhciBiZWZvcmUgdGhlIEBjb2Rle1lZU1RZUEV9IGRlZmluaXRpb24gaW4gdGhhdAoraGVhZGVyIGZpbGUgYXMgd2VsbC4gIFRoZSBAY29kZXtZWUxUWVBFfSBkZWZpbml0aW9uIHNob3VsZCBhbHNvIGFwcGVhcgoraW4gdGhlIHBhcnNlciBoZWFkZXIgZmlsZSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBAY29kZXtZWUxUWVBFfQorZGVmaW5pdGlvbiB0aGVyZS4KKworSW4gb3RoZXIgd29yZHMsIGluIHRoZSBAY29kZXslY29kZSB0b3B9IGJsb2NrIGFib3ZlLCBhbGwgYnV0IHRoZSBmaXJzdCB0d28KK2xpbmVzIGFyZSBkZXBlbmRlbmN5IGNvZGUgcmVxdWlyZWQgYnkgdGhlIEBjb2Rle1lZU1RZUEV9IGFuZCBAY29kZXtZWUxUWVBFfQorZGVmaW5pdGlvbnMuCitUaHVzLCB0aGV5IGJlbG9uZyBpbiBvbmUgb3IgbW9yZSBAY29kZXslY29kZSByZXF1aXJlc306CisKK0BleGFtcGxlCitAZ3JvdXAKKyVjb2RlIHRvcCBAeworICAjZGVmaW5lIF9HTlVfU09VUkNFCisgICNpbmNsdWRlIDxzdGRpby5oPgorQH0KK0BlbmQgZ3JvdXAKKworQGdyb3VwCislY29kZSByZXF1aXJlcyBAeworICAjaW5jbHVkZSAicHR5cGVzLmgiCitAfQorQGVuZCBncm91cAorQGdyb3VwCisldW5pb24gQHsKKyAgbG9uZyBpbnQgbjsKKyAgdHJlZSB0OyAgLyogQHJ7QGNvZGV7dHJlZX0gaXMgZGVmaW5lZCBpbiBAZmlsZXtwdHlwZXMuaH0ufSAqLworQH0KK0BlbmQgZ3JvdXAKKworQGdyb3VwCislY29kZSByZXF1aXJlcyBAeworICAjZGVmaW5lIFlZTFRZUEUgWVlMVFlQRQorICB0eXBlZGVmIHN0cnVjdCBZWUxUWVBFCisgIEB7CisgICAgaW50IGZpcnN0X2xpbmU7CisgICAgaW50IGZpcnN0X2NvbHVtbjsKKyAgICBpbnQgbGFzdF9saW5lOworICAgIGludCBsYXN0X2NvbHVtbjsKKyAgICBjaGFyICpmaWxlbmFtZTsKKyAgQH0gWVlMVFlQRTsKK0B9CitAZW5kIGdyb3VwCisKK0Bncm91cAorJWNvZGUgQHsKKyAgc3RhdGljIHZvaWQgcHJpbnRfdG9rZW5fdmFsdWUgKEZJTEUgKiwgaW50LCBZWVNUWVBFKTsKKyAgI2RlZmluZSBZWVBSSU5UKEYsIE4sIEwpIHByaW50X3Rva2VuX3ZhbHVlIChGLCBOLCBMKQorICBzdGF0aWMgdm9pZCB0cmFjZV90b2tlbiAoZW51bSB5eXRva2VudHlwZSB0b2tlbiwgWVlMVFlQRSBsb2MpOworQH0KK0BlbmQgZ3JvdXAKKworQGRvdHN7fQorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorTm93IEJpc29uIHdpbGwgaW5zZXJ0IEBjb2RleyNpbmNsdWRlICJwdHlwZXMuaCJ9IGFuZCB0aGUgbmV3CitAY29kZXtZWUxUWVBFfSBkZWZpbml0aW9uIGJlZm9yZSB0aGUgQmlzb24tZ2VuZXJhdGVkIEBjb2Rle1lZU1RZUEV9CithbmQgQGNvZGV7WVlMVFlQRX0gZGVmaW5pdGlvbnMgaW4gYm90aCB0aGUgcGFyc2VyIGltcGxlbWVudGF0aW9uIGZpbGUKK2FuZCB0aGUgcGFyc2VyIGhlYWRlciBmaWxlLiAgKEJ5IHRoZSBzYW1lIHJlYXNvbmluZywgQGNvZGV7JWNvZGUKK3JlcXVpcmVzfSB3b3VsZCBhbHNvIGJlIHRoZSBhcHByb3ByaWF0ZSBwbGFjZSB0byB3cml0ZSB5b3VyIG93bgorZGVmaW5pdGlvbiBmb3IgQGNvZGV7WVlTVFlQRX0uKQorCitXaGVuIHlvdSBhcmUgd3JpdGluZyBkZXBlbmRlbmN5IGNvZGUgZm9yIEBjb2Rle1lZU1RZUEV9IGFuZAorQGNvZGV7WVlMVFlQRX0sIHlvdSBzaG91bGQgcHJlZmVyIEBjb2RleyVjb2RlIHJlcXVpcmVzfSBvdmVyCitAY29kZXslY29kZSB0b3B9IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB5b3UgaW5zdHJ1Y3QgQmlzb24gdG8gZ2VuZXJhdGUKK2EgcGFyc2VyIGhlYWRlciBmaWxlLiAgV2hlbiB5b3UgYXJlIHdyaXRpbmcgY29kZSB0aGF0IHlvdSBuZWVkIEJpc29uCit0byBpbnNlcnQgb25seSBpbnRvIHRoZSBwYXJzZXIgaW1wbGVtZW50YXRpb24gZmlsZSBhbmQgdGhhdCBoYXMgbm8KK3NwZWNpYWwgbmVlZCB0byBhcHBlYXIgYXQgdGhlIHRvcCBvZiB0aGF0IGZpbGUsIHlvdSBzaG91bGQgcHJlZmVyIHRoZQordW5xdWFsaWZpZWQgQGNvZGV7JWNvZGV9IG92ZXIgQGNvZGV7JWNvZGUgdG9wfS4gIFRoZXNlIHByYWN0aWNlcyB3aWxsCittYWtlIHRoZSBwdXJwb3NlIG9mIGVhY2ggYmxvY2sgb2YgeW91ciBjb2RlIGV4cGxpY2l0IHRvIEJpc29uIGFuZCB0bworb3RoZXIgZGV2ZWxvcGVycyByZWFkaW5nIHlvdXIgZ3JhbW1hciBmaWxlLiAgRm9sbG93aW5nIHRoZXNlCitwcmFjdGljZXMsIHdlIGV4cGVjdCB0aGUgdW5xdWFsaWZpZWQgQGNvZGV7JWNvZGV9IGFuZCBAY29kZXslY29kZQorcmVxdWlyZXN9IHRvIGJlIHRoZSBtb3N0IGltcG9ydGFudCBvZiB0aGUgZm91ciBAdmFye1Byb2xvZ3VlfQorYWx0ZXJuYXRpdmVzLgorCitBdCBzb21lIHBvaW50IHdoaWxlIGRldmVsb3BpbmcgeW91ciBwYXJzZXIsIHlvdSBtaWdodCBkZWNpZGUgdG8KK3Byb3ZpZGUgQGNvZGV7dHJhY2VfdG9rZW59IHRvIG1vZHVsZXMgdGhhdCBhcmUgZXh0ZXJuYWwgdG8geW91cgorcGFyc2VyLiAgVGh1cywgeW91IG1pZ2h0IHdpc2ggZm9yIEJpc29uIHRvIGluc2VydCB0aGUgcHJvdG90eXBlIGludG8KK2JvdGggdGhlIHBhcnNlciBoZWFkZXIgZmlsZSBhbmQgdGhlIHBhcnNlciBpbXBsZW1lbnRhdGlvbiBmaWxlLiAgU2luY2UKK3RoaXMgZnVuY3Rpb24gaXMgbm90IGEgZGVwZW5kZW5jeSByZXF1aXJlZCBieSBAY29kZXtZWVNUWVBFfSBvcgorQGNvZGV7WVlMVFlQRX0sIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBtb3ZlIGl0cyBwcm90b3R5cGUgdG8gYQorQGNvZGV7JWNvZGUgcmVxdWlyZXN9LiAgTW9yZSBpbXBvcnRhbnRseSwgc2luY2UgaXQgZGVwZW5kcyB1cG9uCitAY29kZXtZWUxUWVBFfSBhbmQgQGNvZGV7eXl0b2tlbnR5cGV9LCBAY29kZXslY29kZSByZXF1aXJlc30gaXMgbm90CitzdWZmaWNpZW50LiAgSW5zdGVhZCwgbW92ZSBpdHMgcHJvdG90eXBlIGZyb20gdGhlIHVucXVhbGlmaWVkCitAY29kZXslY29kZX0gdG8gYSBAY29kZXslY29kZSBwcm92aWRlc306CisKK0BleGFtcGxlCitAZ3JvdXAKKyVjb2RlIHRvcCBAeworICAjZGVmaW5lIF9HTlVfU09VUkNFCisgICNpbmNsdWRlIDxzdGRpby5oPgorQH0KK0BlbmQgZ3JvdXAKKworQGdyb3VwCislY29kZSByZXF1aXJlcyBAeworICAjaW5jbHVkZSAicHR5cGVzLmgiCitAfQorQGVuZCBncm91cAorQGdyb3VwCisldW5pb24gQHsKKyAgbG9uZyBpbnQgbjsKKyAgdHJlZSB0OyAgLyogQHJ7QGNvZGV7dHJlZX0gaXMgZGVmaW5lZCBpbiBAZmlsZXtwdHlwZXMuaH0ufSAqLworQH0KK0BlbmQgZ3JvdXAKKworQGdyb3VwCislY29kZSByZXF1aXJlcyBAeworICAjZGVmaW5lIFlZTFRZUEUgWVlMVFlQRQorICB0eXBlZGVmIHN0cnVjdCBZWUxUWVBFCisgIEB7CisgICAgaW50IGZpcnN0X2xpbmU7CisgICAgaW50IGZpcnN0X2NvbHVtbjsKKyAgICBpbnQgbGFzdF9saW5lOworICAgIGludCBsYXN0X2NvbHVtbjsKKyAgICBjaGFyICpmaWxlbmFtZTsKKyAgQH0gWVlMVFlQRTsKK0B9CitAZW5kIGdyb3VwCisKK0Bncm91cAorJWNvZGUgcHJvdmlkZXMgQHsKKyAgdm9pZCB0cmFjZV90b2tlbiAoZW51bSB5eXRva2VudHlwZSB0b2tlbiwgWVlMVFlQRSBsb2MpOworQH0KK0BlbmQgZ3JvdXAKKworQGdyb3VwCislY29kZSBAeworICBzdGF0aWMgdm9pZCBwcmludF90b2tlbl92YWx1ZSAoRklMRSAqLCBpbnQsIFlZU1RZUEUpOworICAjZGVmaW5lIFlZUFJJTlQoRiwgTiwgTCkgcHJpbnRfdG9rZW5fdmFsdWUgKEYsIE4sIEwpCitAfQorQGVuZCBncm91cAorCitAZG90c3t9CitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitCaXNvbiB3aWxsIGluc2VydCB0aGUgQGNvZGV7dHJhY2VfdG9rZW59IHByb3RvdHlwZSBpbnRvIGJvdGggdGhlCitwYXJzZXIgaGVhZGVyIGZpbGUgYW5kIHRoZSBwYXJzZXIgaW1wbGVtZW50YXRpb24gZmlsZSBhZnRlciB0aGUKK2RlZmluaXRpb25zIGZvciBAY29kZXt5eXRva2VudHlwZX0sIEBjb2Rle1lZTFRZUEV9LCBhbmQKK0Bjb2Rle1lZU1RZUEV9LgorCitUaGUgYWJvdmUgZXhhbXBsZXMgYXJlIGNhcmVmdWwgdG8gd3JpdGUgZGlyZWN0aXZlcyBpbiBhbiBvcmRlciB0aGF0CityZWZsZWN0cyB0aGUgbGF5b3V0IG9mIHRoZSBnZW5lcmF0ZWQgcGFyc2VyIGltcGxlbWVudGF0aW9uIGFuZCBoZWFkZXIKK2ZpbGVzOiBAY29kZXslY29kZSB0b3B9LCBAY29kZXslY29kZSByZXF1aXJlc30sIEBjb2RleyVjb2RlIHByb3ZpZGVzfSwKK2FuZCB0aGVuIEBjb2RleyVjb2RlfS4gIFdoaWxlIHlvdXIgZ3JhbW1hciBmaWxlcyBtYXkgZ2VuZXJhbGx5IGJlCitlYXNpZXIgdG8gcmVhZCBpZiB5b3UgYWxzbyBmb2xsb3cgdGhpcyBvcmRlciwgQmlzb24gZG9lcyBub3QgcmVxdWlyZQoraXQuICBJbnN0ZWFkLCBCaXNvbiBsZXRzIHlvdSBjaG9vc2UgYW4gb3JnYW5pemF0aW9uIHRoYXQgbWFrZXMgc2Vuc2UKK3RvIHlvdS4KKworWW91IG1heSBkZWNsYXJlIGFueSBvZiB0aGVzZSBkaXJlY3RpdmVzIG11bHRpcGxlIHRpbWVzIGluIHRoZSBncmFtbWFyIGZpbGUuCitJbiB0aGF0IGNhc2UsIEJpc29uIGNvbmNhdGVuYXRlcyB0aGUgY29udGFpbmVkIGNvZGUgaW4gZGVjbGFyYXRpb24gb3JkZXIuCitUaGlzIGlzIHRoZSBvbmx5IHdheSBpbiB3aGljaCB0aGUgcG9zaXRpb24gb2Ygb25lIG9mIHRoZXNlIGRpcmVjdGl2ZXMgd2l0aGluCit0aGUgZ3JhbW1hciBmaWxlIGFmZmVjdHMgaXRzIGZ1bmN0aW9uYWxpdHkuCisKK1RoZSByZXN1bHQgb2YgdGhlIHByZXZpb3VzIHR3byBwcm9wZXJ0aWVzIGlzIGdyZWF0ZXIgZmxleGliaWxpdHkgaW4gaG93IHlvdSBtYXkKK29yZ2FuaXplIHlvdXIgZ3JhbW1hciBmaWxlLgorRm9yIGV4YW1wbGUsIHlvdSBtYXkgb3JnYW5pemUgc2VtYW50aWMtdHlwZS1yZWxhdGVkIGRpcmVjdGl2ZXMgYnkgc2VtYW50aWMKK3R5cGU6CisKK0BleGFtcGxlCitAZ3JvdXAKKyVjb2RlIHJlcXVpcmVzIEB7ICNpbmNsdWRlICJ0eXBlMS5oIiBAfQorJXVuaW9uIEB7IHR5cGUxIGZpZWxkMTsgQH0KKyVkZXN0cnVjdG9yIEB7IHR5cGUxX2ZyZWUgKCQkKTsgQH0gPGZpZWxkMT4KKyVwcmludGVyIEB7IHR5cGUxX3ByaW50ICh5eW91dHB1dCwgJCQpOyBAfSA8ZmllbGQxPgorQGVuZCBncm91cAorCitAZ3JvdXAKKyVjb2RlIHJlcXVpcmVzIEB7ICNpbmNsdWRlICJ0eXBlMi5oIiBAfQorJXVuaW9uIEB7IHR5cGUyIGZpZWxkMjsgQH0KKyVkZXN0cnVjdG9yIEB7IHR5cGUyX2ZyZWUgKCQkKTsgQH0gPGZpZWxkMj4KKyVwcmludGVyIEB7IHR5cGUyX3ByaW50ICh5eW91dHB1dCwgJCQpOyBAfSA8ZmllbGQyPgorQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorWW91IGNvdWxkIGV2ZW4gcGxhY2UgZWFjaCBvZiB0aGUgYWJvdmUgZGlyZWN0aXZlIGdyb3VwcyBpbiB0aGUgcnVsZXMgc2VjdGlvbiBvZgordGhlIGdyYW1tYXIgZmlsZSBuZXh0IHRvIHRoZSBzZXQgb2YgcnVsZXMgdGhhdCB1c2VzIHRoZSBhc3NvY2lhdGVkIHNlbWFudGljCit0eXBlLgorKEluIHRoZSBydWxlcyBzZWN0aW9uLCB5b3UgbXVzdCB0ZXJtaW5hdGUgZWFjaCBvZiB0aG9zZSBkaXJlY3RpdmVzIHdpdGggYQorc2VtaWNvbG9uLikKK0FuZCB5b3UgZG9uJ3QgaGF2ZSB0byB3b3JyeSB0aGF0IHNvbWUgZGlyZWN0aXZlIChsaWtlIGEgQGNvZGV7JXVuaW9ufSkgaW4gdGhlCitkZWZpbml0aW9ucyBzZWN0aW9uIGlzIGdvaW5nIHRvIGFkdmVyc2VseSBhZmZlY3QgdGhlaXIgZnVuY3Rpb25hbGl0eSBpbiBzb21lCitjb3VudGVyLWludHVpdGl2ZSBtYW5uZXIganVzdCBiZWNhdXNlIGl0IGNvbWVzIGZpcnN0LgorU3VjaCBhbiBvcmdhbml6YXRpb24gaXMgbm90IHBvc3NpYmxlIHVzaW5nIEB2YXJ7UHJvbG9ndWV9IHNlY3Rpb25zLgorCitUaGlzIHNlY3Rpb24gaGFzIGJlZW4gY29uY2VybmVkIHdpdGggZXhwbGFpbmluZyB0aGUgYWR2YW50YWdlcyBvZiB0aGUgZm91cgorQHZhcntQcm9sb2d1ZX0gYWx0ZXJuYXRpdmVzIG92ZXIgdGhlIG9yaWdpbmFsIFlhY2MgQHZhcntQcm9sb2d1ZX0uCitIb3dldmVyLCBpbiBtb3N0IGNhc2VzIHdoZW4gdXNpbmcgdGhlc2UgZGlyZWN0aXZlcywgeW91IHNob3VsZG4ndCBuZWVkIHRvCit0aGluayBhYm91dCBhbGwgdGhlIGxvdy1sZXZlbCBvcmRlcmluZyBpc3N1ZXMgZGlzY3Vzc2VkIGhlcmUuCitJbnN0ZWFkLCB5b3Ugc2hvdWxkIHNpbXBseSB1c2UgdGhlc2UgZGlyZWN0aXZlcyB0byBsYWJlbCBlYWNoIGJsb2NrIG9mIHlvdXIKK2NvZGUgYWNjb3JkaW5nIHRvIGl0cyBwdXJwb3NlIGFuZCBsZXQgQmlzb24gaGFuZGxlIHRoZSBvcmRlcmluZy4KK0Bjb2RleyVjb2RlfSBpcyB0aGUgbW9zdCBnZW5lcmljIGxhYmVsLgorTW92ZSBjb2RlIHRvIEBjb2RleyVjb2RlIHJlcXVpcmVzfSwgQGNvZGV7JWNvZGUgcHJvdmlkZXN9LCBvciBAY29kZXslY29kZSB0b3B9CithcyBuZWVkZWQuCisKK0Bub2RlIEJpc29uIERlY2xhcmF0aW9ucworQHN1YnNlY3Rpb24gVGhlIEJpc29uIERlY2xhcmF0aW9ucyBTZWN0aW9uCitAY2luZGV4IEJpc29uIGRlY2xhcmF0aW9ucyAoaW50cm9kdWN0aW9uKQorQGNpbmRleCBkZWNsYXJhdGlvbnMsIEJpc29uIChpbnRyb2R1Y3Rpb24pCisKK1RoZSBAdmFye0Jpc29uIGRlY2xhcmF0aW9uc30gc2VjdGlvbiBjb250YWlucyBkZWNsYXJhdGlvbnMgdGhhdCBkZWZpbmUKK3Rlcm1pbmFsIGFuZCBub250ZXJtaW5hbCBzeW1ib2xzLCBzcGVjaWZ5IHByZWNlZGVuY2UsIGFuZCBzbyBvbi4KK0luIHNvbWUgc2ltcGxlIGdyYW1tYXJzIHlvdSBtYXkgbm90IG5lZWQgYW55IGRlY2xhcmF0aW9ucy4KK0B4cmVme0RlY2xhcmF0aW9ucywgLEJpc29uIERlY2xhcmF0aW9uc30uCisKK0Bub2RlIEdyYW1tYXIgUnVsZXMKK0BzdWJzZWN0aW9uIFRoZSBHcmFtbWFyIFJ1bGVzIFNlY3Rpb24KK0BjaW5kZXggZ3JhbW1hciBydWxlcyBzZWN0aW9uCitAY2luZGV4IHJ1bGVzIHNlY3Rpb24gZm9yIGdyYW1tYXIKKworVGhlIEBkZm57Z3JhbW1hciBydWxlc30gc2VjdGlvbiBjb250YWlucyBvbmUgb3IgbW9yZSBCaXNvbiBncmFtbWFyCitydWxlcywgYW5kIG5vdGhpbmcgZWxzZS4gIEB4cmVme1J1bGVzLCAsU3ludGF4IG9mIEdyYW1tYXIgUnVsZXN9LgorCitUaGVyZSBtdXN0IGFsd2F5cyBiZSBhdCBsZWFzdCBvbmUgZ3JhbW1hciBydWxlLCBhbmQgdGhlIGZpcnN0CitAc2FtcHslJX0gKHdoaWNoIHByZWNlZGVzIHRoZSBncmFtbWFyIHJ1bGVzKSBtYXkgbmV2ZXIgYmUgb21pdHRlZCBldmVuCitpZiBpdCBpcyB0aGUgZmlyc3QgdGhpbmcgaW4gdGhlIGZpbGUuCisKK0Bub2RlIEVwaWxvZ3VlCitAc3Vic2VjdGlvbiBUaGUgZXBpbG9ndWUKK0BjaW5kZXggYWRkaXRpb25hbCBDIGNvZGUgc2VjdGlvbgorQGNpbmRleCBlcGlsb2d1ZQorQGNpbmRleCBDIGNvZGUsIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwKKworVGhlIEB2YXJ7RXBpbG9ndWV9IGlzIGNvcGllZCB2ZXJiYXRpbSB0byB0aGUgZW5kIG9mIHRoZSBwYXJzZXIKK2ltcGxlbWVudGF0aW9uIGZpbGUsIGp1c3QgYXMgdGhlIEB2YXJ7UHJvbG9ndWV9IGlzIGNvcGllZCB0byB0aGUKK2JlZ2lubmluZy4gIFRoaXMgaXMgdGhlIG1vc3QgY29udmVuaWVudCBwbGFjZSB0byBwdXQgYW55dGhpbmcgdGhhdCB5b3UKK3dhbnQgdG8gaGF2ZSBpbiB0aGUgcGFyc2VyIGltcGxlbWVudGF0aW9uIGZpbGUgYnV0IHdoaWNoIG5lZWQgbm90IGNvbWUKK2JlZm9yZSB0aGUgZGVmaW5pdGlvbiBvZiBAY29kZXt5eXBhcnNlfS4gIEZvciBleGFtcGxlLCB0aGUgZGVmaW5pdGlvbnMKK29mIEBjb2Rle3l5bGV4fSBhbmQgQGNvZGV7eXllcnJvcn0gb2Z0ZW4gZ28gaGVyZS4gIEJlY2F1c2UgQyByZXF1aXJlcworZnVuY3Rpb25zIHRvIGJlIGRlY2xhcmVkIGJlZm9yZSBiZWluZyB1c2VkLCB5b3Ugb2Z0ZW4gbmVlZCB0byBkZWNsYXJlCitmdW5jdGlvbnMgbGlrZSBAY29kZXt5eWxleH0gYW5kIEBjb2Rle3l5ZXJyb3J9IGluIHRoZSBQcm9sb2d1ZSwgZXZlbgoraWYgeW91IGRlZmluZSB0aGVtIGluIHRoZSBFcGlsb2d1ZS4gIEB4cmVme0ludGVyZmFjZSwgLFBhcnNlcgorQy1MYW5ndWFnZSBJbnRlcmZhY2V9LgorCitJZiB0aGUgbGFzdCBzZWN0aW9uIGlzIGVtcHR5LCB5b3UgbWF5IG9taXQgdGhlIEBzYW1weyUlfSB0aGF0IHNlcGFyYXRlcyBpdAorZnJvbSB0aGUgZ3JhbW1hciBydWxlcy4KKworVGhlIEJpc29uIHBhcnNlciBpdHNlbGYgY29udGFpbnMgbWFueSBtYWNyb3MgYW5kIGlkZW50aWZpZXJzIHdob3NlIG5hbWVzCitzdGFydCB3aXRoIEBzYW1we3l5fSBvciBAc2FtcHtZWX0sIHNvIGl0IGlzIGEgZ29vZCBpZGVhIHRvIGF2b2lkIHVzaW5nCithbnkgc3VjaCBuYW1lcyAoZXhjZXB0IHRob3NlIGRvY3VtZW50ZWQgaW4gdGhpcyBtYW51YWwpIGluIHRoZSBlcGlsb2d1ZQorb2YgdGhlIGdyYW1tYXIgZmlsZS4KKworQG5vZGUgU3ltYm9scworQHNlY3Rpb24gU3ltYm9scywgVGVybWluYWwgYW5kIE5vbnRlcm1pbmFsCitAY2luZGV4IG5vbnRlcm1pbmFsIHN5bWJvbAorQGNpbmRleCB0ZXJtaW5hbCBzeW1ib2wKK0BjaW5kZXggdG9rZW4gdHlwZQorQGNpbmRleCBzeW1ib2wKKworQGRmbntTeW1ib2xzfSBpbiBCaXNvbiBncmFtbWFycyByZXByZXNlbnQgdGhlIGdyYW1tYXRpY2FsIGNsYXNzaWZpY2F0aW9ucworb2YgdGhlIGxhbmd1YWdlLgorCitBIEBkZm57dGVybWluYWwgc3ltYm9sfSAoYWxzbyBrbm93biBhcyBhIEBkZm57dG9rZW4gdHlwZX0pIHJlcHJlc2VudHMgYQorY2xhc3Mgb2Ygc3ludGFjdGljYWxseSBlcXVpdmFsZW50IHRva2Vucy4gIFlvdSB1c2UgdGhlIHN5bWJvbCBpbiBncmFtbWFyCitydWxlcyB0byBtZWFuIHRoYXQgYSB0b2tlbiBpbiB0aGF0IGNsYXNzIGlzIGFsbG93ZWQuICBUaGUgc3ltYm9sIGlzCityZXByZXNlbnRlZCBpbiB0aGUgQmlzb24gcGFyc2VyIGJ5IGEgbnVtZXJpYyBjb2RlLCBhbmQgdGhlIEBjb2Rle3l5bGV4fQorZnVuY3Rpb24gcmV0dXJucyBhIHRva2VuIHR5cGUgY29kZSB0byBpbmRpY2F0ZSB3aGF0IGtpbmQgb2YgdG9rZW4gaGFzCitiZWVuIHJlYWQuICBZb3UgZG9uJ3QgbmVlZCB0byBrbm93IHdoYXQgdGhlIGNvZGUgdmFsdWUgaXM7IHlvdSBjYW4gdXNlCit0aGUgc3ltYm9sIHRvIHN0YW5kIGZvciBpdC4KKworQSBAZGZue25vbnRlcm1pbmFsIHN5bWJvbH0gc3RhbmRzIGZvciBhIGNsYXNzIG9mIHN5bnRhY3RpY2FsbHkKK2VxdWl2YWxlbnQgZ3JvdXBpbmdzLiAgVGhlIHN5bWJvbCBuYW1lIGlzIHVzZWQgaW4gd3JpdGluZyBncmFtbWFyIHJ1bGVzLgorQnkgY29udmVudGlvbiwgaXQgc2hvdWxkIGJlIGFsbCBsb3dlciBjYXNlLgorCitTeW1ib2wgbmFtZXMgY2FuIGNvbnRhaW4gbGV0dGVycywgdW5kZXJzY29yZXMsIHBlcmlvZHMsIGFuZCBub24taW5pdGlhbAorZGlnaXRzIGFuZCBkYXNoZXMuICBEYXNoZXMgaW4gc3ltYm9sIG5hbWVzIGFyZSBhIEdOVSBleHRlbnNpb24sIGluY29tcGF0aWJsZQord2l0aCBQT1NJWCBZYWNjLiAgUGVyaW9kcyBhbmQgZGFzaGVzIG1ha2Ugc3ltYm9sIG5hbWVzIGxlc3MgY29udmVuaWVudCB0bwordXNlIHdpdGggbmFtZWQgcmVmZXJlbmNlcywgd2hpY2ggcmVxdWlyZSBicmFja2V0cyBhcm91bmQgc3VjaCBuYW1lcworKEBweHJlZntOYW1lZCBSZWZlcmVuY2VzfSkuICBUZXJtaW5hbCBzeW1ib2xzIHRoYXQgY29udGFpbiBwZXJpb2RzIG9yIGRhc2hlcworbWFrZSBsaXR0bGUgc2Vuc2U6IHNpbmNlIHRoZXkgYXJlIG5vdCB2YWxpZCBzeW1ib2xzIChpbiBtb3N0IHByb2dyYW1taW5nCitsYW5ndWFnZXMpIHRoZXkgYXJlIG5vdCBleHBvcnRlZCBhcyB0b2tlbiBuYW1lcy4KKworVGhlcmUgYXJlIHRocmVlIHdheXMgb2Ygd3JpdGluZyB0ZXJtaW5hbCBzeW1ib2xzIGluIHRoZSBncmFtbWFyOgorCitAaXRlbWl6ZSBAYnVsbGV0CitAaXRlbQorQSBAZGZue25hbWVkIHRva2VuIHR5cGV9IGlzIHdyaXR0ZW4gd2l0aCBhbiBpZGVudGlmaWVyLCBsaWtlIGFuCitpZGVudGlmaWVyIGluIENALiAgQnkgY29udmVudGlvbiwgaXQgc2hvdWxkIGJlIGFsbCB1cHBlciBjYXNlLiAgRWFjaAorc3VjaCBuYW1lIG11c3QgYmUgZGVmaW5lZCB3aXRoIGEgQmlzb24gZGVjbGFyYXRpb24gc3VjaCBhcworQGNvZGV7JXRva2VufS4gIEB4cmVme1Rva2VuIERlY2wsICxUb2tlbiBUeXBlIE5hbWVzfS4KKworQGl0ZW0KK0BjaW5kZXggY2hhcmFjdGVyIHRva2VuCitAY2luZGV4IGxpdGVyYWwgdG9rZW4KK0BjaW5kZXggc2luZ2xlLWNoYXJhY3RlciBsaXRlcmFsCitBIEBkZm57Y2hhcmFjdGVyIHRva2VuIHR5cGV9IChvciBAZGZue2xpdGVyYWwgY2hhcmFjdGVyIHRva2VufSkgaXMKK3dyaXR0ZW4gaW4gdGhlIGdyYW1tYXIgdXNpbmcgdGhlIHNhbWUgc3ludGF4IHVzZWQgaW4gQyBmb3IgY2hhcmFjdGVyCitjb25zdGFudHM7IGZvciBleGFtcGxlLCBAY29kZXsnKyd9IGlzIGEgY2hhcmFjdGVyIHRva2VuIHR5cGUuICBBCitjaGFyYWN0ZXIgdG9rZW4gdHlwZSBkb2Vzbid0IG5lZWQgdG8gYmUgZGVjbGFyZWQgdW5sZXNzIHlvdSBuZWVkIHRvCitzcGVjaWZ5IGl0cyBzZW1hbnRpYyB2YWx1ZSBkYXRhIHR5cGUgKEBweHJlZntWYWx1ZSBUeXBlLCAsRGF0YSBUeXBlcyBvZgorU2VtYW50aWMgVmFsdWVzfSksIGFzc29jaWF0aXZpdHksIG9yIHByZWNlZGVuY2UgKEBweHJlZntQcmVjZWRlbmNlLAorLE9wZXJhdG9yIFByZWNlZGVuY2V9KS4KKworQnkgY29udmVudGlvbiwgYSBjaGFyYWN0ZXIgdG9rZW4gdHlwZSBpcyB1c2VkIG9ubHkgdG8gcmVwcmVzZW50IGEKK3Rva2VuIHRoYXQgY29uc2lzdHMgb2YgdGhhdCBwYXJ0aWN1bGFyIGNoYXJhY3Rlci4gIFRodXMsIHRoZSB0b2tlbgordHlwZSBAY29kZXsnKyd9IGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBjaGFyYWN0ZXIgQHNhbXB7K30gYXMgYQordG9rZW4uICBOb3RoaW5nIGVuZm9yY2VzIHRoaXMgY29udmVudGlvbiwgYnV0IGlmIHlvdSBkZXBhcnQgZnJvbSBpdCwKK3lvdXIgcHJvZ3JhbSB3aWxsIGNvbmZ1c2Ugb3RoZXIgcmVhZGVycy4KKworQWxsIHRoZSB1c3VhbCBlc2NhcGUgc2VxdWVuY2VzIHVzZWQgaW4gY2hhcmFjdGVyIGxpdGVyYWxzIGluIEMgY2FuIGJlCit1c2VkIGluIEJpc29uIGFzIHdlbGwsIGJ1dCB5b3UgbXVzdCBub3QgdXNlIHRoZSBudWxsIGNoYXJhY3RlciBhcyBhCitjaGFyYWN0ZXIgbGl0ZXJhbCBiZWNhdXNlIGl0cyBudW1lcmljIGNvZGUsIHplcm8sIHNpZ25pZmllcworZW5kLW9mLWlucHV0IChAcHhyZWZ7Q2FsbGluZyBDb252ZW50aW9uLCAsQ2FsbGluZyBDb252ZW50aW9uCitmb3IgQGNvZGV7eXlsZXh9fSkuICBBbHNvLCB1bmxpa2Ugc3RhbmRhcmQgQywgdHJpZ3JhcGhzIGhhdmUgbm8KK3NwZWNpYWwgbWVhbmluZyBpbiBCaXNvbiBjaGFyYWN0ZXIgbGl0ZXJhbHMsIG5vciBpcyBiYWNrc2xhc2gtbmV3bGluZQorYWxsb3dlZC4KKworQGl0ZW0KK0BjaW5kZXggc3RyaW5nIHRva2VuCitAY2luZGV4IGxpdGVyYWwgc3RyaW5nIHRva2VuCitAY2luZGV4IG11bHRpY2hhcmFjdGVyIGxpdGVyYWwKK0EgQGRmbntsaXRlcmFsIHN0cmluZyB0b2tlbn0gaXMgd3JpdHRlbiBsaWtlIGEgQyBzdHJpbmcgY29uc3RhbnQ7IGZvcgorZXhhbXBsZSwgQGNvZGV7Ijw9In0gaXMgYSBsaXRlcmFsIHN0cmluZyB0b2tlbi4gIEEgbGl0ZXJhbCBzdHJpbmcgdG9rZW4KK2RvZXNuJ3QgbmVlZCB0byBiZSBkZWNsYXJlZCB1bmxlc3MgeW91IG5lZWQgdG8gc3BlY2lmeSBpdHMgc2VtYW50aWMKK3ZhbHVlIGRhdGEgdHlwZSAoQHB4cmVme1ZhbHVlIFR5cGV9KSwgYXNzb2NpYXRpdml0eSwgb3IgcHJlY2VkZW5jZQorKEBweHJlZntQcmVjZWRlbmNlfSkuCisKK1lvdSBjYW4gYXNzb2NpYXRlIHRoZSBsaXRlcmFsIHN0cmluZyB0b2tlbiB3aXRoIGEgc3ltYm9saWMgbmFtZSBhcyBhbgorYWxpYXMsIHVzaW5nIHRoZSBAY29kZXsldG9rZW59IGRlY2xhcmF0aW9uIChAcHhyZWZ7VG9rZW4gRGVjbCwgLFRva2VuCitEZWNsYXJhdGlvbnN9KS4gIElmIHlvdSBkb24ndCBkbyB0aGF0LCB0aGUgbGV4aWNhbCBhbmFseXplciBoYXMgdG8KK3JldHJpZXZlIHRoZSB0b2tlbiBudW1iZXIgZm9yIHRoZSBsaXRlcmFsIHN0cmluZyB0b2tlbiBmcm9tIHRoZQorQGNvZGV7eXl0bmFtZX0gdGFibGUgKEBweHJlZntDYWxsaW5nIENvbnZlbnRpb259KS4KKworQHN0cm9uZ3tXYXJuaW5nfTogbGl0ZXJhbCBzdHJpbmcgdG9rZW5zIGRvIG5vdCB3b3JrIGluIFlhY2MuCisKK0J5IGNvbnZlbnRpb24sIGEgbGl0ZXJhbCBzdHJpbmcgdG9rZW4gaXMgdXNlZCBvbmx5IHRvIHJlcHJlc2VudCBhIHRva2VuCit0aGF0IGNvbnNpc3RzIG9mIHRoYXQgcGFydGljdWxhciBzdHJpbmcuICBUaHVzLCB5b3Ugc2hvdWxkIHVzZSB0aGUgdG9rZW4KK3R5cGUgQGNvZGV7Ijw9In0gdG8gcmVwcmVzZW50IHRoZSBzdHJpbmcgQHNhbXB7PD19IGFzIGEgdG9rZW4uICBCaXNvbgorZG9lcyBub3QgZW5mb3JjZSB0aGlzIGNvbnZlbnRpb24sIGJ1dCBpZiB5b3UgZGVwYXJ0IGZyb20gaXQsIHBlb3BsZSB3aG8KK3JlYWQgeW91ciBwcm9ncmFtIHdpbGwgYmUgY29uZnVzZWQuCisKK0FsbCB0aGUgZXNjYXBlIHNlcXVlbmNlcyB1c2VkIGluIHN0cmluZyBsaXRlcmFscyBpbiBDIGNhbiBiZSB1c2VkIGluCitCaXNvbiBhcyB3ZWxsLCBleGNlcHQgdGhhdCB5b3UgbXVzdCBub3QgdXNlIGEgbnVsbCBjaGFyYWN0ZXIgd2l0aGluIGEKK3N0cmluZyBsaXRlcmFsLiAgQWxzbywgdW5saWtlIFN0YW5kYXJkIEMsIHRyaWdyYXBocyBoYXZlIG5vIHNwZWNpYWwKK21lYW5pbmcgaW4gQmlzb24gc3RyaW5nIGxpdGVyYWxzLCBub3IgaXMgYmFja3NsYXNoLW5ld2xpbmUgYWxsb3dlZC4gIEEKK2xpdGVyYWwgc3RyaW5nIHRva2VuIG11c3QgY29udGFpbiB0d28gb3IgbW9yZSBjaGFyYWN0ZXJzOyBmb3IgYSB0b2tlbgorY29udGFpbmluZyBqdXN0IG9uZSBjaGFyYWN0ZXIsIHVzZSBhIGNoYXJhY3RlciB0b2tlbiAoc2VlIGFib3ZlKS4KK0BlbmQgaXRlbWl6ZQorCitIb3cgeW91IGNob29zZSB0byB3cml0ZSBhIHRlcm1pbmFsIHN5bWJvbCBoYXMgbm8gZWZmZWN0IG9uIGl0cworZ3JhbW1hdGljYWwgbWVhbmluZy4gIFRoYXQgZGVwZW5kcyBvbmx5IG9uIHdoZXJlIGl0IGFwcGVhcnMgaW4gcnVsZXMgYW5kCitvbiB3aGVuIHRoZSBwYXJzZXIgZnVuY3Rpb24gcmV0dXJucyB0aGF0IHN5bWJvbC4KKworVGhlIHZhbHVlIHJldHVybmVkIGJ5IEBjb2Rle3l5bGV4fSBpcyBhbHdheXMgb25lIG9mIHRoZSB0ZXJtaW5hbAorc3ltYm9scywgZXhjZXB0IHRoYXQgYSB6ZXJvIG9yIG5lZ2F0aXZlIHZhbHVlIHNpZ25pZmllcyBlbmQtb2YtaW5wdXQuCitXaGljaGV2ZXIgd2F5IHlvdSB3cml0ZSB0aGUgdG9rZW4gdHlwZSBpbiB0aGUgZ3JhbW1hciBydWxlcywgeW91IHdyaXRlCitpdCB0aGUgc2FtZSB3YXkgaW4gdGhlIGRlZmluaXRpb24gb2YgQGNvZGV7eXlsZXh9LiAgVGhlIG51bWVyaWMgY29kZQorZm9yIGEgY2hhcmFjdGVyIHRva2VuIHR5cGUgaXMgc2ltcGx5IHRoZSBwb3NpdGl2ZSBudW1lcmljIGNvZGUgb2YgdGhlCitjaGFyYWN0ZXIsIHNvIEBjb2Rle3l5bGV4fSBjYW4gdXNlIHRoZSBpZGVudGljYWwgdmFsdWUgdG8gZ2VuZXJhdGUgdGhlCityZXF1aXNpdGUgY29kZSwgdGhvdWdoIHlvdSBtYXkgbmVlZCB0byBjb252ZXJ0IGl0IHRvIEBjb2Rle3Vuc2lnbmVkCitjaGFyfSB0byBhdm9pZCBzaWduLWV4dGVuc2lvbiBvbiBob3N0cyB3aGVyZSBAY29kZXtjaGFyfSBpcyBzaWduZWQuCitFYWNoIG5hbWVkIHRva2VuIHR5cGUgYmVjb21lcyBhIEMgbWFjcm8gaW4gdGhlIHBhcnNlciBpbXBsZW1lbnRhdGlvbgorZmlsZSwgc28gQGNvZGV7eXlsZXh9IGNhbiB1c2UgdGhlIG5hbWUgdG8gc3RhbmQgZm9yIHRoZSBjb2RlLiAgKFRoaXMKK2lzIHdoeSBwZXJpb2RzIGRvbid0IG1ha2Ugc2Vuc2UgaW4gdGVybWluYWwgc3ltYm9scy4pICBAeHJlZntDYWxsaW5nCitDb252ZW50aW9uLCAsQ2FsbGluZyBDb252ZW50aW9uIGZvciBAY29kZXt5eWxleH19LgorCitJZiBAY29kZXt5eWxleH0gaXMgZGVmaW5lZCBpbiBhIHNlcGFyYXRlIGZpbGUsIHlvdSBuZWVkIHRvIGFycmFuZ2UgZm9yIHRoZQordG9rZW4tdHlwZSBtYWNybyBkZWZpbml0aW9ucyB0byBiZSBhdmFpbGFibGUgdGhlcmUuICBVc2UgdGhlIEBzYW1wey1kfQorb3B0aW9uIHdoZW4geW91IHJ1biBCaXNvbiwgc28gdGhhdCBpdCB3aWxsIHdyaXRlIHRoZXNlIG1hY3JvIGRlZmluaXRpb25zCitpbnRvIGEgc2VwYXJhdGUgaGVhZGVyIGZpbGUgQGZpbGV7QHZhcntuYW1lfS50YWIuaH0gd2hpY2ggeW91IGNhbiBpbmNsdWRlCitpbiB0aGUgb3RoZXIgc291cmNlIGZpbGVzIHRoYXQgbmVlZCBpdC4gIEB4cmVme0ludm9jYXRpb24sICxJbnZva2luZyBCaXNvbn0uCisKK0lmIHlvdSB3YW50IHRvIHdyaXRlIGEgZ3JhbW1hciB0aGF0IGlzIHBvcnRhYmxlIHRvIGFueSBTdGFuZGFyZCBDCitob3N0LCB5b3UgbXVzdCB1c2Ugb25seSBub25udWxsIGNoYXJhY3RlciB0b2tlbnMgdGFrZW4gZnJvbSB0aGUgYmFzaWMKK2V4ZWN1dGlvbiBjaGFyYWN0ZXIgc2V0IG9mIFN0YW5kYXJkIENALiAgVGhpcyBzZXQgY29uc2lzdHMgb2YgdGhlIHRlbgorZGlnaXRzLCB0aGUgNTIgbG93ZXItIGFuZCB1cHBlci1jYXNlIEVuZ2xpc2ggbGV0dGVycywgYW5kIHRoZQorY2hhcmFjdGVycyBpbiB0aGUgZm9sbG93aW5nIEMtbGFuZ3VhZ2Ugc3RyaW5nOgorCitAZXhhbXBsZQorIlxhXGJcdFxuXHZcZlxyICFcIiMlJicoKSorLC0uLzo7PD0+P1tcXF1eX0B7fEB9fiIKK0BlbmQgZXhhbXBsZQorCitUaGUgQGNvZGV7eXlsZXh9IGZ1bmN0aW9uIGFuZCBCaXNvbiBtdXN0IHVzZSBhIGNvbnNpc3RlbnQgY2hhcmFjdGVyIHNldAorYW5kIGVuY29kaW5nIGZvciBjaGFyYWN0ZXIgdG9rZW5zLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBydW4gQmlzb24gaW4gYW4KK0FTQ0lJIGVudmlyb25tZW50LCBidXQgdGhlbiBjb21waWxlIGFuZCBydW4gdGhlIHJlc3VsdGluZworcHJvZ3JhbSBpbiBhbiBlbnZpcm9ubWVudCB0aGF0IHVzZXMgYW4gaW5jb21wYXRpYmxlIGNoYXJhY3RlciBzZXQgbGlrZQorRUJDRElDLCB0aGUgcmVzdWx0aW5nIHByb2dyYW0gbWF5IG5vdCB3b3JrIGJlY2F1c2UgdGhlIHRhYmxlcworZ2VuZXJhdGVkIGJ5IEJpc29uIHdpbGwgYXNzdW1lIEFTQ0lJIG51bWVyaWMgdmFsdWVzIGZvcgorY2hhcmFjdGVyIHRva2Vucy4gIEl0IGlzIHN0YW5kYXJkIHByYWN0aWNlIGZvciBzb2Z0d2FyZSBkaXN0cmlidXRpb25zIHRvCitjb250YWluIEMgc291cmNlIGZpbGVzIHRoYXQgd2VyZSBnZW5lcmF0ZWQgYnkgQmlzb24gaW4gYW4KK0FTQ0lJIGVudmlyb25tZW50LCBzbyBpbnN0YWxsZXJzIG9uIHBsYXRmb3JtcyB0aGF0IGFyZQoraW5jb21wYXRpYmxlIHdpdGggQVNDSUkgbXVzdCByZWJ1aWxkIHRob3NlIGZpbGVzIGJlZm9yZQorY29tcGlsaW5nIHRoZW0uCisKK1RoZSBzeW1ib2wgQGNvZGV7ZXJyb3J9IGlzIGEgdGVybWluYWwgc3ltYm9sIHJlc2VydmVkIGZvciBlcnJvciByZWNvdmVyeQorKEBweHJlZntFcnJvciBSZWNvdmVyeX0pOyB5b3Ugc2hvdWxkbid0IHVzZSBpdCBmb3IgYW55IG90aGVyIHB1cnBvc2UuCitJbiBwYXJ0aWN1bGFyLCBAY29kZXt5eWxleH0gc2hvdWxkIG5ldmVyIHJldHVybiB0aGlzIHZhbHVlLiAgVGhlIGRlZmF1bHQKK3ZhbHVlIG9mIHRoZSBlcnJvciB0b2tlbiBpcyAyNTYsIHVubGVzcyB5b3UgZXhwbGljaXRseSBhc3NpZ25lZCAyNTYgdG8KK29uZSBvZiB5b3VyIHRva2VucyB3aXRoIGEgQGNvZGV7JXRva2VufSBkZWNsYXJhdGlvbi4KKworQG5vZGUgUnVsZXMKK0BzZWN0aW9uIFN5bnRheCBvZiBHcmFtbWFyIFJ1bGVzCitAY2luZGV4IHJ1bGUgc3ludGF4CitAY2luZGV4IGdyYW1tYXIgcnVsZSBzeW50YXgKK0BjaW5kZXggc3ludGF4IG9mIGdyYW1tYXIgcnVsZXMKKworQSBCaXNvbiBncmFtbWFyIHJ1bGUgaGFzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBmb3JtOgorCitAZXhhbXBsZQorQGdyb3VwCitAdmFye3Jlc3VsdH06IEB2YXJ7Y29tcG9uZW50c31AZG90c3t9OworQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAord2hlcmUgQHZhcntyZXN1bHR9IGlzIHRoZSBub250ZXJtaW5hbCBzeW1ib2wgdGhhdCB0aGlzIHJ1bGUgZGVzY3JpYmVzLAorYW5kIEB2YXJ7Y29tcG9uZW50c30gYXJlIHZhcmlvdXMgdGVybWluYWwgYW5kIG5vbnRlcm1pbmFsIHN5bWJvbHMgdGhhdAorYXJlIHB1dCB0b2dldGhlciBieSB0aGlzIHJ1bGUgKEBweHJlZntTeW1ib2xzfSkuCisKK0ZvciBleGFtcGxlLAorCitAZXhhbXBsZQorQGdyb3VwCitleHA6IGV4cCAnKycgZXhwOworQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorc2F5cyB0aGF0IHR3byBncm91cGluZ3Mgb2YgdHlwZSBAY29kZXtleHB9LCB3aXRoIGEgQHNhbXB7K30gdG9rZW4gaW4gYmV0d2VlbiwKK2NhbiBiZSBjb21iaW5lZCBpbnRvIGEgbGFyZ2VyIGdyb3VwaW5nIG9mIHR5cGUgQGNvZGV7ZXhwfS4KKworV2hpdGUgc3BhY2UgaW4gcnVsZXMgaXMgc2lnbmlmaWNhbnQgb25seSB0byBzZXBhcmF0ZSBzeW1ib2xzLiAgWW91IGNhbiBhZGQKK2V4dHJhIHdoaXRlIHNwYWNlIGFzIHlvdSB3aXNoLgorCitTY2F0dGVyZWQgYW1vbmcgdGhlIGNvbXBvbmVudHMgY2FuIGJlIEB2YXJ7YWN0aW9uc30gdGhhdCBkZXRlcm1pbmUKK3RoZSBzZW1hbnRpY3Mgb2YgdGhlIHJ1bGUuICBBbiBhY3Rpb24gbG9va3MgbGlrZSB0aGlzOgorCitAZXhhbXBsZQorQHtAdmFye0Mgc3RhdGVtZW50c31AfQorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorQGNpbmRleCBicmFjZWQgY29kZQorVGhpcyBpcyBhbiBleGFtcGxlIG9mIEBkZm57YnJhY2VkIGNvZGV9LCB0aGF0IGlzLCBDIGNvZGUgc3Vycm91bmRlZCBieQorYnJhY2VzLCBtdWNoIGxpa2UgYSBjb21wb3VuZCBzdGF0ZW1lbnQgaW4gQ0AuICBCcmFjZWQgY29kZSBjYW4gY29udGFpbgorYW55IHNlcXVlbmNlIG9mIEMgdG9rZW5zLCBzbyBsb25nIGFzIGl0cyBicmFjZXMgYXJlIGJhbGFuY2VkLiAgQmlzb24KK2RvZXMgbm90IGNoZWNrIHRoZSBicmFjZWQgY29kZSBmb3IgY29ycmVjdG5lc3MgZGlyZWN0bHk7IGl0IG1lcmVseQorY29waWVzIHRoZSBjb2RlIHRvIHRoZSBwYXJzZXIgaW1wbGVtZW50YXRpb24gZmlsZSwgd2hlcmUgdGhlIEMKK2NvbXBpbGVyIGNhbiBjaGVjayBpdC4KKworV2l0aGluIGJyYWNlZCBjb2RlLCB0aGUgYmFsYW5jZWQtYnJhY2UgY291bnQgaXMgbm90IGFmZmVjdGVkIGJ5IGJyYWNlcword2l0aGluIGNvbW1lbnRzLCBzdHJpbmcgbGl0ZXJhbHMsIG9yIGNoYXJhY3RlciBjb25zdGFudHMsIGJ1dCBpdCBpcworYWZmZWN0ZWQgYnkgdGhlIEMgZGlncmFwaHMgQHNhbXB7PCV9IGFuZCBAc2FtcHslPn0gdGhhdCByZXByZXNlbnQKK2JyYWNlcy4gIEF0IHRoZSB0b3AgbGV2ZWwgYnJhY2VkIGNvZGUgbXVzdCBiZSB0ZXJtaW5hdGVkIGJ5IEBzYW1we0B9fQorYW5kIG5vdCBieSBhIGRpZ3JhcGguICBCaXNvbiBkb2VzIG5vdCBsb29rIGZvciB0cmlncmFwaHMsIHNvIGlmIGJyYWNlZAorY29kZSB1c2VzIHRyaWdyYXBocyB5b3Ugc2hvdWxkIGVuc3VyZSB0aGF0IHRoZXkgZG8gbm90IGFmZmVjdCB0aGUKK25lc3Rpbmcgb2YgYnJhY2VzIG9yIHRoZSBib3VuZGFyaWVzIG9mIGNvbW1lbnRzLCBzdHJpbmcgbGl0ZXJhbHMsIG9yCitjaGFyYWN0ZXIgY29uc3RhbnRzLgorCitVc3VhbGx5IHRoZXJlIGlzIG9ubHkgb25lIGFjdGlvbiBhbmQgaXQgZm9sbG93cyB0aGUgY29tcG9uZW50cy4KK0B4cmVme0FjdGlvbnN9LgorCitAZmluZGV4IHwKK011bHRpcGxlIHJ1bGVzIGZvciB0aGUgc2FtZSBAdmFye3Jlc3VsdH0gY2FuIGJlIHdyaXR0ZW4gc2VwYXJhdGVseSBvciBjYW4KK2JlIGpvaW5lZCB3aXRoIHRoZSB2ZXJ0aWNhbC1iYXIgY2hhcmFjdGVyIEBzYW1we3x9IGFzIGZvbGxvd3M6CisKK0BleGFtcGxlCitAZ3JvdXAKK0B2YXJ7cmVzdWx0fToKKyAgQHZhcntydWxlMS1jb21wb25lbnRzfUBkb3Rze30KK3wgQHZhcntydWxlMi1jb21wb25lbnRzfUBkb3Rze30KK0Bkb3Rze30KKzsKK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK1RoZXkgYXJlIHN0aWxsIGNvbnNpZGVyZWQgZGlzdGluY3QgcnVsZXMgZXZlbiB3aGVuIGpvaW5lZCBpbiB0aGlzIHdheS4KKworSWYgQHZhcntjb21wb25lbnRzfSBpbiBhIHJ1bGUgaXMgZW1wdHksIGl0IG1lYW5zIHRoYXQgQHZhcntyZXN1bHR9IGNhbgorbWF0Y2ggdGhlIGVtcHR5IHN0cmluZy4gIEZvciBleGFtcGxlLCBoZXJlIGlzIGhvdyB0byBkZWZpbmUgYQorY29tbWEtc2VwYXJhdGVkIHNlcXVlbmNlIG9mIHplcm8gb3IgbW9yZSBAY29kZXtleHB9IGdyb3VwaW5nczoKKworQGV4YW1wbGUKK0Bncm91cAorZXhwc2VxOgorICAvKiBlbXB0eSAqLworfCBleHBzZXExCis7CitAZW5kIGdyb3VwCisKK0Bncm91cAorZXhwc2VxMToKKyAgZXhwCit8IGV4cHNlcTEgJywnIGV4cAorOworQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorSXQgaXMgY3VzdG9tYXJ5IHRvIHdyaXRlIGEgY29tbWVudCBAc2FtcHsvKiBlbXB0eSAqL30gaW4gZWFjaCBydWxlCit3aXRoIG5vIGNvbXBvbmVudHMuCisKK0Bub2RlIFJlY3Vyc2lvbgorQHNlY3Rpb24gUmVjdXJzaXZlIFJ1bGVzCitAY2luZGV4IHJlY3Vyc2l2ZSBydWxlCisKK0EgcnVsZSBpcyBjYWxsZWQgQGRmbntyZWN1cnNpdmV9IHdoZW4gaXRzIEB2YXJ7cmVzdWx0fSBub250ZXJtaW5hbAorYXBwZWFycyBhbHNvIG9uIGl0cyByaWdodCBoYW5kIHNpZGUuICBOZWFybHkgYWxsIEJpc29uIGdyYW1tYXJzIG5lZWQgdG8KK3VzZSByZWN1cnNpb24sIGJlY2F1c2UgdGhhdCBpcyB0aGUgb25seSB3YXkgdG8gZGVmaW5lIGEgc2VxdWVuY2Ugb2YgYW55CitudW1iZXIgb2YgYSBwYXJ0aWN1bGFyIHRoaW5nLiAgQ29uc2lkZXIgdGhpcyByZWN1cnNpdmUgZGVmaW5pdGlvbiBvZiBhCitjb21tYS1zZXBhcmF0ZWQgc2VxdWVuY2Ugb2Ygb25lIG9yIG1vcmUgZXhwcmVzc2lvbnM6CisKK0BleGFtcGxlCitAZ3JvdXAKK2V4cHNlcTE6CisgIGV4cAorfCBleHBzZXExICcsJyBleHAKKzsKK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitAY2luZGV4IGxlZnQgcmVjdXJzaW9uCitAY2luZGV4IHJpZ2h0IHJlY3Vyc2lvbgorQG5vaW5kZW50CitTaW5jZSB0aGUgcmVjdXJzaXZlIHVzZSBvZiBAY29kZXtleHBzZXExfSBpcyB0aGUgbGVmdG1vc3Qgc3ltYm9sIGluIHRoZQorcmlnaHQgaGFuZCBzaWRlLCB3ZSBjYWxsIHRoaXMgQGRmbntsZWZ0IHJlY3Vyc2lvbn0uICBCeSBjb250cmFzdCwgaGVyZQordGhlIHNhbWUgY29uc3RydWN0IGlzIGRlZmluZWQgdXNpbmcgQGRmbntyaWdodCByZWN1cnNpb259OgorCitAZXhhbXBsZQorQGdyb3VwCitleHBzZXExOgorICBleHAKK3wgZXhwICcsJyBleHBzZXExCis7CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitBbnkga2luZCBvZiBzZXF1ZW5jZSBjYW4gYmUgZGVmaW5lZCB1c2luZyBlaXRoZXIgbGVmdCByZWN1cnNpb24gb3IgcmlnaHQKK3JlY3Vyc2lvbiwgYnV0IHlvdSBzaG91bGQgYWx3YXlzIHVzZSBsZWZ0IHJlY3Vyc2lvbiwgYmVjYXVzZSBpdCBjYW4KK3BhcnNlIGEgc2VxdWVuY2Ugb2YgYW55IG51bWJlciBvZiBlbGVtZW50cyB3aXRoIGJvdW5kZWQgc3RhY2sgc3BhY2UuCitSaWdodCByZWN1cnNpb24gdXNlcyB1cCBzcGFjZSBvbiB0aGUgQmlzb24gc3RhY2sgaW4gcHJvcG9ydGlvbiB0byB0aGUKK251bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgc2VxdWVuY2UsIGJlY2F1c2UgYWxsIHRoZSBlbGVtZW50cyBtdXN0IGJlCitzaGlmdGVkIG9udG8gdGhlIHN0YWNrIGJlZm9yZSB0aGUgcnVsZSBjYW4gYmUgYXBwbGllZCBldmVuIG9uY2UuCitAeHJlZntBbGdvcml0aG0sICxUaGUgQmlzb24gUGFyc2VyIEFsZ29yaXRobX0sIGZvciBmdXJ0aGVyIGV4cGxhbmF0aW9uCitvZiB0aGlzLgorCitAY2luZGV4IG11dHVhbCByZWN1cnNpb24KK0BkZm57SW5kaXJlY3R9IG9yIEBkZm57bXV0dWFsfSByZWN1cnNpb24gb2NjdXJzIHdoZW4gdGhlIHJlc3VsdCBvZiB0aGUKK3J1bGUgZG9lcyBub3QgYXBwZWFyIGRpcmVjdGx5IG9uIGl0cyByaWdodCBoYW5kIHNpZGUsIGJ1dCBkb2VzIGFwcGVhcgoraW4gcnVsZXMgZm9yIG90aGVyIG5vbnRlcm1pbmFscyB3aGljaCBkbyBhcHBlYXIgb24gaXRzIHJpZ2h0IGhhbmQKK3NpZGUuCisKK0ZvciBleGFtcGxlOgorCitAZXhhbXBsZQorQGdyb3VwCitleHByOgorICBwcmltYXJ5Cit8IHByaW1hcnkgJysnIHByaW1hcnkKKzsKK0BlbmQgZ3JvdXAKKworQGdyb3VwCitwcmltYXJ5OgorICBjb25zdGFudAorfCAnKCcgZXhwciAnKScKKzsKK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK2RlZmluZXMgdHdvIG11dHVhbGx5LXJlY3Vyc2l2ZSBub250ZXJtaW5hbHMsIHNpbmNlIGVhY2ggcmVmZXJzIHRvIHRoZQorb3RoZXIuCisKK0Bub2RlIFNlbWFudGljcworQHNlY3Rpb24gRGVmaW5pbmcgTGFuZ3VhZ2UgU2VtYW50aWNzCitAY2luZGV4IGRlZmluaW5nIGxhbmd1YWdlIHNlbWFudGljcworQGNpbmRleCBsYW5ndWFnZSBzZW1hbnRpY3MsIGRlZmluaW5nCisKK1RoZSBncmFtbWFyIHJ1bGVzIGZvciBhIGxhbmd1YWdlIGRldGVybWluZSBvbmx5IHRoZSBzeW50YXguICBUaGUgc2VtYW50aWNzCithcmUgZGV0ZXJtaW5lZCBieSB0aGUgc2VtYW50aWMgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCB2YXJpb3VzIHRva2VucyBhbmQKK2dyb3VwaW5ncywgYW5kIGJ5IHRoZSBhY3Rpb25zIHRha2VuIHdoZW4gdmFyaW91cyBncm91cGluZ3MgYXJlIHJlY29nbml6ZWQuCisKK0ZvciBleGFtcGxlLCB0aGUgY2FsY3VsYXRvciBjYWxjdWxhdGVzIHByb3Blcmx5IGJlY2F1c2UgdGhlIHZhbHVlCithc3NvY2lhdGVkIHdpdGggZWFjaCBleHByZXNzaW9uIGlzIHRoZSBwcm9wZXIgbnVtYmVyOyBpdCBhZGRzIHByb3Blcmx5CitiZWNhdXNlIHRoZSBhY3Rpb24gZm9yIHRoZSBncm91cGluZyBAd3tAc2FtcHtAdmFye3h9ICsgQHZhcnt5fX19IGlzIHRvIGFkZAordGhlIG51bWJlcnMgYXNzb2NpYXRlZCB3aXRoIEB2YXJ7eH0gYW5kIEB2YXJ7eX0uCisKK0BtZW51CisqIFZhbHVlIFR5cGU6OiAgICAgICAgU3BlY2lmeWluZyBvbmUgZGF0YSB0eXBlIGZvciBhbGwgc2VtYW50aWMgdmFsdWVzLgorKiBNdWx0aXBsZSBUeXBlczo6ICAgIFNwZWNpZnlpbmcgc2V2ZXJhbCBhbHRlcm5hdGl2ZSBkYXRhIHR5cGVzLgorKiBBY3Rpb25zOjogICAgICAgICAgIEFuIGFjdGlvbiBpcyB0aGUgc2VtYW50aWMgZGVmaW5pdGlvbiBvZiBhIGdyYW1tYXIgcnVsZS4KKyogQWN0aW9uIFR5cGVzOjogICAgICBTcGVjaWZ5aW5nIGRhdGEgdHlwZXMgZm9yIGFjdGlvbnMgdG8gb3BlcmF0ZSBvbi4KKyogTWlkLVJ1bGUgQWN0aW9uczo6ICBNb3N0IGFjdGlvbnMgZ28gYXQgdGhlIGVuZCBvZiBhIHJ1bGUuCisgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzYXlzIHdoZW4sIHdoeSBhbmQgaG93IHRvIHVzZSB0aGUgZXhjZXB0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiBpbiB0aGUgbWlkZGxlIG9mIGEgcnVsZS4KK0BlbmQgbWVudQorCitAbm9kZSBWYWx1ZSBUeXBlCitAc3Vic2VjdGlvbiBEYXRhIFR5cGVzIG9mIFNlbWFudGljIFZhbHVlcworQGNpbmRleCBzZW1hbnRpYyB2YWx1ZSB0eXBlCitAY2luZGV4IHZhbHVlIHR5cGUsIHNlbWFudGljCitAY2luZGV4IGRhdGEgdHlwZXMgb2Ygc2VtYW50aWMgdmFsdWVzCitAY2luZGV4IGRlZmF1bHQgZGF0YSB0eXBlCisKK0luIGEgc2ltcGxlIHByb2dyYW0gaXQgbWF5IGJlIHN1ZmZpY2llbnQgdG8gdXNlIHRoZSBzYW1lIGRhdGEgdHlwZSBmb3IKK3RoZSBzZW1hbnRpYyB2YWx1ZXMgb2YgYWxsIGxhbmd1YWdlIGNvbnN0cnVjdHMuICBUaGlzIHdhcyB0cnVlIGluIHRoZQorUlBOIGFuZCBpbmZpeCBjYWxjdWxhdG9yIGV4YW1wbGVzIChAcHhyZWZ7UlBOIENhbGMsICxSZXZlcnNlIFBvbGlzaAorTm90YXRpb24gQ2FsY3VsYXRvcn0pLgorCitCaXNvbiBub3JtYWxseSB1c2VzIHRoZSB0eXBlIEBjb2Rle2ludH0gZm9yIHNlbWFudGljIHZhbHVlcyBpZiB5b3VyCitwcm9ncmFtIHVzZXMgdGhlIHNhbWUgZGF0YSB0eXBlIGZvciBhbGwgbGFuZ3VhZ2UgY29uc3RydWN0cy4gIFRvCitzcGVjaWZ5IHNvbWUgb3RoZXIgdHlwZSwgZGVmaW5lIEBjb2Rle1lZU1RZUEV9IGFzIGEgbWFjcm8sIGxpa2UgdGhpczoKKworQGV4YW1wbGUKKyNkZWZpbmUgWVlTVFlQRSBkb3VibGUKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK0Bjb2Rle1lZU1RZUEV9J3MgcmVwbGFjZW1lbnQgbGlzdCBzaG91bGQgYmUgYSB0eXBlIG5hbWUKK3RoYXQgZG9lcyBub3QgY29udGFpbiBwYXJlbnRoZXNlcyBvciBzcXVhcmUgYnJhY2tldHMuCitUaGlzIG1hY3JvIGRlZmluaXRpb24gbXVzdCBnbyBpbiB0aGUgcHJvbG9ndWUgb2YgdGhlIGdyYW1tYXIgZmlsZQorKEBweHJlZntHcmFtbWFyIE91dGxpbmUsICxPdXRsaW5lIG9mIGEgQmlzb24gR3JhbW1hcn0pLgorCitAbm9kZSBNdWx0aXBsZSBUeXBlcworQHN1YnNlY3Rpb24gTW9yZSBUaGFuIE9uZSBWYWx1ZSBUeXBlCisKK0luIG1vc3QgcHJvZ3JhbXMsIHlvdSB3aWxsIG5lZWQgZGlmZmVyZW50IGRhdGEgdHlwZXMgZm9yIGRpZmZlcmVudCBraW5kcworb2YgdG9rZW5zIGFuZCBncm91cGluZ3MuICBGb3IgZXhhbXBsZSwgYSBudW1lcmljIGNvbnN0YW50IG1heSBuZWVkIHR5cGUKK0Bjb2Rle2ludH0gb3IgQGNvZGV7bG9uZyBpbnR9LCB3aGlsZSBhIHN0cmluZyBjb25zdGFudCBuZWVkcyB0eXBlCitAY29kZXtjaGFyICp9LCBhbmQgYW4gaWRlbnRpZmllciBtaWdodCBuZWVkIGEgcG9pbnRlciB0byBhbiBlbnRyeSBpbiB0aGUKK3N5bWJvbCB0YWJsZS4KKworVG8gdXNlIG1vcmUgdGhhbiBvbmUgZGF0YSB0eXBlIGZvciBzZW1hbnRpYyB2YWx1ZXMgaW4gb25lIHBhcnNlciwgQmlzb24KK3JlcXVpcmVzIHlvdSB0byBkbyB0d28gdGhpbmdzOgorCitAaXRlbWl6ZSBAYnVsbGV0CitAaXRlbQorU3BlY2lmeSB0aGUgZW50aXJlIGNvbGxlY3Rpb24gb2YgcG9zc2libGUgZGF0YSB0eXBlcywgZWl0aGVyIGJ5IHVzaW5nIHRoZQorQGNvZGV7JXVuaW9ufSBCaXNvbiBkZWNsYXJhdGlvbiAoQHB4cmVme1VuaW9uIERlY2wsICxUaGUgQ29sbGVjdGlvbiBvZgorVmFsdWUgVHlwZXN9KSwgb3IgYnkgdXNpbmcgYSBAY29kZXt0eXBlZGVmfSBvciBhIEBjb2RleyNkZWZpbmV9IHRvCitkZWZpbmUgQGNvZGV7WVlTVFlQRX0gdG8gYmUgYSB1bmlvbiB0eXBlIHdob3NlIG1lbWJlciBuYW1lcyBhcmUKK3RoZSB0eXBlIHRhZ3MuCisKK0BpdGVtCitDaG9vc2Ugb25lIG9mIHRob3NlIHR5cGVzIGZvciBlYWNoIHN5bWJvbCAodGVybWluYWwgb3Igbm9udGVybWluYWwpIGZvcgord2hpY2ggc2VtYW50aWMgdmFsdWVzIGFyZSB1c2VkLiAgVGhpcyBpcyBkb25lIGZvciB0b2tlbnMgd2l0aCB0aGUKK0Bjb2RleyV0b2tlbn0gQmlzb24gZGVjbGFyYXRpb24gKEBweHJlZntUb2tlbiBEZWNsLCAsVG9rZW4gVHlwZSBOYW1lc30pCithbmQgZm9yIGdyb3VwaW5ncyB3aXRoIHRoZSBAY29kZXsldHlwZX0gQmlzb24gZGVjbGFyYXRpb24gKEBweHJlZntUeXBlCitEZWNsLCAsTm9udGVybWluYWwgU3ltYm9sc30pLgorQGVuZCBpdGVtaXplCisKK0Bub2RlIEFjdGlvbnMKK0BzdWJzZWN0aW9uIEFjdGlvbnMKK0BjaW5kZXggYWN0aW9uCitAdmluZGV4ICQkCitAdmluZGV4ICRAdmFye259CitAdmluZGV4ICRAdmFye25hbWV9CitAdmluZGV4ICRbQHZhcntuYW1lfV0KKworQW4gYWN0aW9uIGFjY29tcGFuaWVzIGEgc3ludGFjdGljIHJ1bGUgYW5kIGNvbnRhaW5zIEMgY29kZSB0byBiZSBleGVjdXRlZAorZWFjaCB0aW1lIGFuIGluc3RhbmNlIG9mIHRoYXQgcnVsZSBpcyByZWNvZ25pemVkLiAgVGhlIHRhc2sgb2YgbW9zdCBhY3Rpb25zCitpcyB0byBjb21wdXRlIGEgc2VtYW50aWMgdmFsdWUgZm9yIHRoZSBncm91cGluZyBidWlsdCBieSB0aGUgcnVsZSBmcm9tIHRoZQorc2VtYW50aWMgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCB0b2tlbnMgb3Igc21hbGxlciBncm91cGluZ3MuCisKK0FuIGFjdGlvbiBjb25zaXN0cyBvZiBicmFjZWQgY29kZSBjb250YWluaW5nIEMgc3RhdGVtZW50cywgYW5kIGNhbiBiZQorcGxhY2VkIGF0IGFueSBwb3NpdGlvbiBpbiB0aGUgcnVsZTsKK2l0IGlzIGV4ZWN1dGVkIGF0IHRoYXQgcG9zaXRpb24uICBNb3N0IHJ1bGVzIGhhdmUganVzdCBvbmUgYWN0aW9uIGF0IHRoZQorZW5kIG9mIHRoZSBydWxlLCBmb2xsb3dpbmcgYWxsIHRoZSBjb21wb25lbnRzLiAgQWN0aW9ucyBpbiB0aGUgbWlkZGxlIG9mCithIHJ1bGUgYXJlIHRyaWNreSBhbmQgdXNlZCBvbmx5IGZvciBzcGVjaWFsIHB1cnBvc2VzIChAcHhyZWZ7TWlkLVJ1bGUKK0FjdGlvbnMsICxBY3Rpb25zIGluIE1pZC1SdWxlfSkuCisKK1RoZSBDIGNvZGUgaW4gYW4gYWN0aW9uIGNhbiByZWZlciB0byB0aGUgc2VtYW50aWMgdmFsdWVzIG9mIHRoZQorY29tcG9uZW50cyBtYXRjaGVkIGJ5IHRoZSBydWxlIHdpdGggdGhlIGNvbnN0cnVjdCBAY29kZXskQHZhcntufX0sCit3aGljaCBzdGFuZHMgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgQHZhcntufXRoIGNvbXBvbmVudC4gIFRoZSBzZW1hbnRpYwordmFsdWUgZm9yIHRoZSBncm91cGluZyBiZWluZyBjb25zdHJ1Y3RlZCBpcyBAY29kZXskJH0uICBJbiBhZGRpdGlvbiwKK3RoZSBzZW1hbnRpYyB2YWx1ZXMgb2Ygc3ltYm9scyBjYW4gYmUgYWNjZXNzZWQgd2l0aCB0aGUgbmFtZWQKK3JlZmVyZW5jZXMgY29uc3RydWN0IEBjb2RleyRAdmFye25hbWV9fSBvciBAY29kZXskW0B2YXJ7bmFtZX1dfS4KK0Jpc29uIHRyYW5zbGF0ZXMgYm90aCBvZiB0aGVzZSBjb25zdHJ1Y3RzIGludG8gZXhwcmVzc2lvbnMgb2YgdGhlCithcHByb3ByaWF0ZSB0eXBlIHdoZW4gaXQgY29waWVzIHRoZSBhY3Rpb25zIGludG8gdGhlIHBhcnNlcgoraW1wbGVtZW50YXRpb24gZmlsZS4gIEBjb2RleyQkfSAob3IgQGNvZGV7JEB2YXJ7bmFtZX19LCB3aGVuIGl0IHN0YW5kcworZm9yIHRoZSBjdXJyZW50IGdyb3VwaW5nKSBpcyB0cmFuc2xhdGVkIHRvIGEgbW9kaWZpYWJsZSBsdmFsdWUsIHNvIGl0CitjYW4gYmUgYXNzaWduZWQgdG8uCisKK0hlcmUgaXMgYSB0eXBpY2FsIGV4YW1wbGU6CisKK0BleGFtcGxlCitAZ3JvdXAKK2V4cDoKK0Bkb3Rze30KK3wgZXhwICcrJyBleHAgICAgIEB7ICQkID0gJDEgKyAkMzsgQH0KK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitPciwgaW4gdGVybXMgb2YgbmFtZWQgcmVmZXJlbmNlczoKKworQGV4YW1wbGUKK0Bncm91cAorZXhwW3Jlc3VsdF06CitAZG90c3t9Cit8IGV4cFtsZWZ0XSAnKycgZXhwW3JpZ2h0XSAgQHsgJHJlc3VsdCA9ICRsZWZ0ICsgJHJpZ2h0OyBAfQorQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorVGhpcyBydWxlIGNvbnN0cnVjdHMgYW4gQGNvZGV7ZXhwfSBmcm9tIHR3byBzbWFsbGVyIEBjb2Rle2V4cH0gZ3JvdXBpbmdzCitjb25uZWN0ZWQgYnkgYSBwbHVzLXNpZ24gdG9rZW4uICBJbiB0aGUgYWN0aW9uLCBAY29kZXskMX0gYW5kIEBjb2RleyQzfQorKEBjb2RleyRsZWZ0fSBhbmQgQGNvZGV7JHJpZ2h0fSkKK3JlZmVyIHRvIHRoZSBzZW1hbnRpYyB2YWx1ZXMgb2YgdGhlIHR3byBjb21wb25lbnQgQGNvZGV7ZXhwfSBncm91cGluZ3MsCit3aGljaCBhcmUgdGhlIGZpcnN0IGFuZCB0aGlyZCBzeW1ib2xzIG9uIHRoZSByaWdodCBoYW5kIHNpZGUgb2YgdGhlIHJ1bGUuCitUaGUgc3VtIGlzIHN0b3JlZCBpbnRvIEBjb2RleyQkfSAoQGNvZGV7JHJlc3VsdH0pIHNvIHRoYXQgaXQgYmVjb21lcyB0aGUKK3NlbWFudGljIHZhbHVlIG9mCit0aGUgYWRkaXRpb24tZXhwcmVzc2lvbiBqdXN0IHJlY29nbml6ZWQgYnkgdGhlIHJ1bGUuICBJZiB0aGVyZSB3ZXJlIGEKK3VzZWZ1bCBzZW1hbnRpYyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIEBzYW1weyt9IHRva2VuLCBpdCBjb3VsZCBiZQorcmVmZXJyZWQgdG8gYXMgQGNvZGV7JDJ9LgorCitAeHJlZntOYW1lZCBSZWZlcmVuY2VzfSwgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgdGhlIG5hbWVkCityZWZlcmVuY2VzIGNvbnN0cnVjdC4KKworTm90ZSB0aGF0IHRoZSB2ZXJ0aWNhbC1iYXIgY2hhcmFjdGVyIEBzYW1we3x9IGlzIHJlYWxseSBhIHJ1bGUKK3NlcGFyYXRvciwgYW5kIGFjdGlvbnMgYXJlIGF0dGFjaGVkIHRvIGEgc2luZ2xlIHJ1bGUuICBUaGlzIGlzIGEKK2RpZmZlcmVuY2Ugd2l0aCB0b29scyBsaWtlIEZsZXgsIGZvciB3aGljaCBAc2FtcHt8fSBzdGFuZHMgZm9yIGVpdGhlcgorYGBvcicnLCBvciBgYHRoZSBzYW1lIGFjdGlvbiBhcyB0aGF0IG9mIHRoZSBuZXh0IHJ1bGUnJy4gIEluIHRoZQorZm9sbG93aW5nIGV4YW1wbGUsIHRoZSBhY3Rpb24gaXMgdHJpZ2dlcmVkIG9ubHkgd2hlbiBAc2FtcHtifSBpcyBmb3VuZDoKKworQGV4YW1wbGUKK0Bncm91cAorYS1vci1iOiAnYSd8J2InICAgQHsgYV9vcl9iX2ZvdW5kID0gMTsgQH07CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworQGNpbmRleCBkZWZhdWx0IGFjdGlvbgorSWYgeW91IGRvbid0IHNwZWNpZnkgYW4gYWN0aW9uIGZvciBhIHJ1bGUsIEJpc29uIHN1cHBsaWVzIGEgZGVmYXVsdDoKK0B3e0Bjb2RleyQkID0gJDF9Ln0gIFRodXMsIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3Qgc3ltYm9sIGluIHRoZSBydWxlCitiZWNvbWVzIHRoZSB2YWx1ZSBvZiB0aGUgd2hvbGUgcnVsZS4gIE9mIGNvdXJzZSwgdGhlIGRlZmF1bHQgYWN0aW9uIGlzCit2YWxpZCBvbmx5IGlmIHRoZSB0d28gZGF0YSB0eXBlcyBtYXRjaC4gIFRoZXJlIGlzIG5vIG1lYW5pbmdmdWwgZGVmYXVsdAorYWN0aW9uIGZvciBhbiBlbXB0eSBydWxlOyBldmVyeSBlbXB0eSBydWxlIG11c3QgaGF2ZSBhbiBleHBsaWNpdCBhY3Rpb24KK3VubGVzcyB0aGUgcnVsZSdzIHZhbHVlIGRvZXMgbm90IG1hdHRlci4KKworQGNvZGV7JEB2YXJ7bn19IHdpdGggQHZhcntufSB6ZXJvIG9yIG5lZ2F0aXZlIGlzIGFsbG93ZWQgZm9yIHJlZmVyZW5jZQordG8gdG9rZW5zIGFuZCBncm91cGluZ3Mgb24gdGhlIHN0YWNrIEBlbXBoe2JlZm9yZX0gdGhvc2UgdGhhdCBtYXRjaCB0aGUKK2N1cnJlbnQgcnVsZS4gIFRoaXMgaXMgYSB2ZXJ5IHJpc2t5IHByYWN0aWNlLCBhbmQgdG8gdXNlIGl0IHJlbGlhYmx5Cit5b3UgbXVzdCBiZSBjZXJ0YWluIG9mIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZSBydWxlIGlzIGFwcGxpZWQuICBIZXJlCitpcyBhIGNhc2UgaW4gd2hpY2ggeW91IGNhbiB1c2UgdGhpcyByZWxpYWJseToKKworQGV4YW1wbGUKK0Bncm91cAorZm9vOgorICBleHByIGJhciAnKycgZXhwciAgQHsgQGRvdHN7fSBAfQorfCBleHByIGJhciAnLScgZXhwciAgQHsgQGRvdHN7fSBAfQorOworQGVuZCBncm91cAorCitAZ3JvdXAKK2JhcjoKKyAgLyogZW1wdHkgKi8gICAgQHsgcHJldmlvdXNfZXhwciA9ICQwOyBAfQorOworQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK0FzIGxvbmcgYXMgQGNvZGV7YmFyfSBpcyB1c2VkIG9ubHkgaW4gdGhlIGZhc2hpb24gc2hvd24gaGVyZSwgQGNvZGV7JDB9CithbHdheXMgcmVmZXJzIHRvIHRoZSBAY29kZXtleHByfSB3aGljaCBwcmVjZWRlcyBAY29kZXtiYXJ9IGluIHRoZQorZGVmaW5pdGlvbiBvZiBAY29kZXtmb299LgorCitAdmluZGV4IHl5bHZhbAorSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBhY2Nlc3MgdGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rYWhlYWQgdG9rZW4sIGlmCithbnksIGZyb20gYSBzZW1hbnRpYyBhY3Rpb24uCitUaGlzIHNlbWFudGljIHZhbHVlIGlzIHN0b3JlZCBpbiBAY29kZXt5eWx2YWx9LgorQHhyZWZ7QWN0aW9uIEZlYXR1cmVzLCAsU3BlY2lhbCBGZWF0dXJlcyBmb3IgVXNlIGluIEFjdGlvbnN9LgorCitAbm9kZSBBY3Rpb24gVHlwZXMKK0BzdWJzZWN0aW9uIERhdGEgVHlwZXMgb2YgVmFsdWVzIGluIEFjdGlvbnMKK0BjaW5kZXggYWN0aW9uIGRhdGEgdHlwZXMKK0BjaW5kZXggZGF0YSB0eXBlcyBpbiBhY3Rpb25zCisKK0lmIHlvdSBoYXZlIGNob3NlbiBhIHNpbmdsZSBkYXRhIHR5cGUgZm9yIHNlbWFudGljIHZhbHVlcywgdGhlIEBjb2RleyQkfQorYW5kIEBjb2RleyRAdmFye259fSBjb25zdHJ1Y3RzIGFsd2F5cyBoYXZlIHRoYXQgZGF0YSB0eXBlLgorCitJZiB5b3UgaGF2ZSB1c2VkIEBjb2RleyV1bmlvbn0gdG8gc3BlY2lmeSBhIHZhcmlldHkgb2YgZGF0YSB0eXBlcywgdGhlbiB5b3UKK211c3QgZGVjbGFyZSBhIGNob2ljZSBhbW9uZyB0aGVzZSB0eXBlcyBmb3IgZWFjaCB0ZXJtaW5hbCBvciBub250ZXJtaW5hbAorc3ltYm9sIHRoYXQgY2FuIGhhdmUgYSBzZW1hbnRpYyB2YWx1ZS4gIFRoZW4gZWFjaCB0aW1lIHlvdSB1c2UgQGNvZGV7JCR9IG9yCitAY29kZXskQHZhcntufX0sIGl0cyBkYXRhIHR5cGUgaXMgZGV0ZXJtaW5lZCBieSB3aGljaCBzeW1ib2wgaXQgcmVmZXJzIHRvCitpbiB0aGUgcnVsZS4gIEluIHRoaXMgZXhhbXBsZSwKKworQGV4YW1wbGUKK0Bncm91cAorZXhwOgorICBAZG90c3t9Cit8IGV4cCAnKycgZXhwICAgIEB7ICQkID0gJDEgKyAkMzsgQH0KK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK0Bjb2RleyQxfSBhbmQgQGNvZGV7JDN9IHJlZmVyIHRvIGluc3RhbmNlcyBvZiBAY29kZXtleHB9LCBzbyB0aGV5IGFsbAoraGF2ZSB0aGUgZGF0YSB0eXBlIGRlY2xhcmVkIGZvciB0aGUgbm9udGVybWluYWwgc3ltYm9sIEBjb2Rle2V4cH0uICBJZgorQGNvZGV7JDJ9IHdlcmUgdXNlZCwgaXQgd291bGQgaGF2ZSB0aGUgZGF0YSB0eXBlIGRlY2xhcmVkIGZvciB0aGUKK3Rlcm1pbmFsIHN5bWJvbCBAY29kZXsnKyd9LCB3aGF0ZXZlciB0aGF0IG1pZ2h0IGJlLgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHNwZWNpZnkgdGhlIGRhdGEgdHlwZSB3aGVuIHlvdSByZWZlciB0byB0aGUgdmFsdWUsCitieSBpbnNlcnRpbmcgQHNhbXB7PEB2YXJ7dHlwZX0+fSBhZnRlciB0aGUgQHNhbXB7JH0gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKK3JlZmVyZW5jZS4gIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBkZWZpbmVkIHR5cGVzIGFzIHNob3duIGhlcmU6CisKK0BleGFtcGxlCitAZ3JvdXAKKyV1bmlvbiBAeworICBpbnQgaXR5cGU7CisgIGRvdWJsZSBkdHlwZTsKK0B9CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50Cit0aGVuIHlvdSBjYW4gd3JpdGUgQGNvZGV7JDxpdHlwZT4xfSB0byByZWZlciB0byB0aGUgZmlyc3Qgc3VidW5pdCBvZiB0aGUKK3J1bGUgYXMgYW4gaW50ZWdlciwgb3IgQGNvZGV7JDxkdHlwZT4xfSB0byByZWZlciB0byBpdCBhcyBhIGRvdWJsZS4KKworQG5vZGUgTWlkLVJ1bGUgQWN0aW9ucworQHN1YnNlY3Rpb24gQWN0aW9ucyBpbiBNaWQtUnVsZQorQGNpbmRleCBhY3Rpb25zIGluIG1pZC1ydWxlCitAY2luZGV4IG1pZC1ydWxlIGFjdGlvbnMKKworT2NjYXNpb25hbGx5IGl0IGlzIHVzZWZ1bCB0byBwdXQgYW4gYWN0aW9uIGluIHRoZSBtaWRkbGUgb2YgYSBydWxlLgorVGhlc2UgYWN0aW9ucyBhcmUgd3JpdHRlbiBqdXN0IGxpa2UgdXN1YWwgZW5kLW9mLXJ1bGUgYWN0aW9ucywgYnV0IHRoZXkKK2FyZSBleGVjdXRlZCBiZWZvcmUgdGhlIHBhcnNlciBldmVuIHJlY29nbml6ZXMgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzLgorCitAbWVudQorKiBVc2luZyBNaWQtUnVsZSBBY3Rpb25zOjogICAgICAgUHV0dGluZyBhbiBhY3Rpb24gaW4gdGhlIG1pZGRsZSBvZiBhIHJ1bGUuCisqIE1pZC1SdWxlIEFjdGlvbiBUcmFuc2xhdGlvbjo6ICBIb3cgbWlkLXJ1bGUgYWN0aW9ucyBhcmUgYWN0dWFsbHkgcHJvY2Vzc2VkLgorKiBNaWQtUnVsZSBDb25mbGljdHM6OiAgICAgICAgICAgTWlkLXJ1bGUgYWN0aW9ucyBjYW4gY2F1c2UgY29uZmxpY3RzLgorQGVuZCBtZW51CisKK0Bub2RlIFVzaW5nIE1pZC1SdWxlIEFjdGlvbnMKK0BzdWJzdWJzZWN0aW9uIFVzaW5nIE1pZC1SdWxlIEFjdGlvbnMKKworQSBtaWQtcnVsZSBhY3Rpb24gbWF5IHJlZmVyIHRvIHRoZSBjb21wb25lbnRzIHByZWNlZGluZyBpdCB1c2luZworQGNvZGV7JEB2YXJ7bn19LCBidXQgaXQgbWF5IG5vdCByZWZlciB0byBzdWJzZXF1ZW50IGNvbXBvbmVudHMgYmVjYXVzZQoraXQgaXMgcnVuIGJlZm9yZSB0aGV5IGFyZSBwYXJzZWQuCisKK1RoZSBtaWQtcnVsZSBhY3Rpb24gaXRzZWxmIGNvdW50cyBhcyBvbmUgb2YgdGhlIGNvbXBvbmVudHMgb2YgdGhlIHJ1bGUuCitUaGlzIG1ha2VzIGEgZGlmZmVyZW5jZSB3aGVuIHRoZXJlIGlzIGFub3RoZXIgYWN0aW9uIGxhdGVyIGluIHRoZSBzYW1lIHJ1bGUKKyhhbmQgdXN1YWxseSB0aGVyZSBpcyBhbm90aGVyIGF0IHRoZSBlbmQpOiB5b3UgaGF2ZSB0byBjb3VudCB0aGUgYWN0aW9ucworYWxvbmcgd2l0aCB0aGUgc3ltYm9scyB3aGVuIHdvcmtpbmcgb3V0IHdoaWNoIG51bWJlciBAdmFye259IHRvIHVzZSBpbgorQGNvZGV7JEB2YXJ7bn19LgorCitUaGUgbWlkLXJ1bGUgYWN0aW9uIGNhbiBhbHNvIGhhdmUgYSBzZW1hbnRpYyB2YWx1ZS4gIFRoZSBhY3Rpb24gY2FuIHNldAoraXRzIHZhbHVlIHdpdGggYW4gYXNzaWdubWVudCB0byBAY29kZXskJH0sIGFuZCBhY3Rpb25zIGxhdGVyIGluIHRoZSBydWxlCitjYW4gcmVmZXIgdG8gdGhlIHZhbHVlIHVzaW5nIEBjb2RleyRAdmFye259fS4gIFNpbmNlIHRoZXJlIGlzIG5vIHN5bWJvbAordG8gbmFtZSB0aGUgYWN0aW9uLCB0aGVyZSBpcyBubyB3YXkgdG8gZGVjbGFyZSBhIGRhdGEgdHlwZSBmb3IgdGhlIHZhbHVlCitpbiBhZHZhbmNlLCBzbyB5b3UgbXVzdCB1c2UgdGhlIEBzYW1weyQ8QGRvdHN7fT5AdmFye259fSBjb25zdHJ1Y3QgdG8KK3NwZWNpZnkgYSBkYXRhIHR5cGUgZWFjaCB0aW1lIHlvdSByZWZlciB0byB0aGlzIHZhbHVlLgorCitUaGVyZSBpcyBubyB3YXkgdG8gc2V0IHRoZSB2YWx1ZSBvZiB0aGUgZW50aXJlIHJ1bGUgd2l0aCBhIG1pZC1ydWxlCithY3Rpb24sIGJlY2F1c2UgYXNzaWdubWVudHMgdG8gQGNvZGV7JCR9IGRvIG5vdCBoYXZlIHRoYXQgZWZmZWN0LiAgVGhlCitvbmx5IHdheSB0byBzZXQgdGhlIHZhbHVlIGZvciB0aGUgZW50aXJlIHJ1bGUgaXMgd2l0aCBhbiBvcmRpbmFyeSBhY3Rpb24KK2F0IHRoZSBlbmQgb2YgdGhlIHJ1bGUuCisKK0hlcmUgaXMgYW4gZXhhbXBsZSBmcm9tIGEgaHlwb3RoZXRpY2FsIGNvbXBpbGVyLCBoYW5kbGluZyBhIEBjb2Rle2xldH0KK3N0YXRlbWVudCB0aGF0IGxvb2tzIGxpa2UgQHNhbXB7bGV0IChAdmFye3ZhcmlhYmxlfSkgQHZhcntzdGF0ZW1lbnR9fSBhbmQKK3NlcnZlcyB0byBjcmVhdGUgYSB2YXJpYWJsZSBuYW1lZCBAdmFye3ZhcmlhYmxlfSB0ZW1wb3JhcmlseSBmb3IgdGhlCitkdXJhdGlvbiBvZiBAdmFye3N0YXRlbWVudH0uICBUbyBwYXJzZSB0aGlzIGNvbnN0cnVjdCwgd2UgbXVzdCBwdXQKK0B2YXJ7dmFyaWFibGV9IGludG8gdGhlIHN5bWJvbCB0YWJsZSB3aGlsZSBAdmFye3N0YXRlbWVudH0gaXMgcGFyc2VkLCB0aGVuCityZW1vdmUgaXQgYWZ0ZXJ3YXJkLiAgSGVyZSBpcyBob3cgaXQgaXMgZG9uZToKKworQGV4YW1wbGUKK0Bncm91cAorc3RtdDoKKyAgImxldCIgJygnIHZhciAnKScKKyAgICBAeworICAgICAgJDxjb250ZXh0PiQgPSBwdXNoX2NvbnRleHQgKCk7CisgICAgICBkZWNsYXJlX3ZhcmlhYmxlICgkMyk7CisgICAgQH0KKyAgc3RtdAorICAgIEB7CisgICAgICAkJCA9ICQ2OworICAgICAgcG9wX2NvbnRleHQgKCQ8Y29udGV4dD41KTsKKyAgICBAfQorQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorQXMgc29vbiBhcyBAc2FtcHtsZXQgKEB2YXJ7dmFyaWFibGV9KX0gaGFzIGJlZW4gcmVjb2duaXplZCwgdGhlIGZpcnN0CithY3Rpb24gaXMgcnVuLiAgSXQgc2F2ZXMgYSBjb3B5IG9mIHRoZSBjdXJyZW50IHNlbWFudGljIGNvbnRleHQgKHRoZQorbGlzdCBvZiBhY2Nlc3NpYmxlIHZhcmlhYmxlcykgYXMgaXRzIHNlbWFudGljIHZhbHVlLCB1c2luZyBhbHRlcm5hdGl2ZQorQGNvZGV7Y29udGV4dH0gaW4gdGhlIGRhdGEtdHlwZSB1bmlvbi4gIFRoZW4gaXQgY2FsbHMKK0Bjb2Rle2RlY2xhcmVfdmFyaWFibGV9IHRvIGFkZCB0aGUgbmV3IHZhcmlhYmxlIHRvIHRoYXQgbGlzdC4gIE9uY2UgdGhlCitmaXJzdCBhY3Rpb24gaXMgZmluaXNoZWQsIHRoZSBlbWJlZGRlZCBzdGF0ZW1lbnQgQGNvZGV7c3RtdH0gY2FuIGJlCitwYXJzZWQuCisKK05vdGUgdGhhdCB0aGUgbWlkLXJ1bGUgYWN0aW9uIGlzIGNvbXBvbmVudCBudW1iZXIgNSwgc28gdGhlIEBzYW1we3N0bXR9IGlzCitjb21wb25lbnQgbnVtYmVyIDYuICBOYW1lZCByZWZlcmVuY2VzIGNhbiBiZSB1c2VkIHRvIGltcHJvdmUgdGhlIHJlYWRhYmlsaXR5CithbmQgbWFpbnRhaW5hYmlsaXR5IChAcHhyZWZ7TmFtZWQgUmVmZXJlbmNlc30pOgorCitAZXhhbXBsZQorQGdyb3VwCitzdG10OgorICAibGV0IiAnKCcgdmFyICcpJworICAgIEB7CisgICAgICAkPGNvbnRleHQ+bGV0ID0gcHVzaF9jb250ZXh0ICgpOworICAgICAgZGVjbGFyZV92YXJpYWJsZSAoJDMpOworICAgIEB9W2xldF0KKyAgc3RtdAorICAgIEB7CisgICAgICAkJCA9ICQ2OworICAgICAgcG9wX2NvbnRleHQgKCQ8Y29udGV4dD5sZXQpOworICAgIEB9CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworQWZ0ZXIgdGhlIGVtYmVkZGVkIHN0YXRlbWVudCBpcyBwYXJzZWQsIGl0cyBzZW1hbnRpYyB2YWx1ZSBiZWNvbWVzIHRoZQordmFsdWUgb2YgdGhlIGVudGlyZSBAY29kZXtsZXR9LXN0YXRlbWVudC4gIFRoZW4gdGhlIHNlbWFudGljIHZhbHVlIGZyb20gdGhlCitlYXJsaWVyIGFjdGlvbiBpcyB1c2VkIHRvIHJlc3RvcmUgdGhlIHByaW9yIGxpc3Qgb2YgdmFyaWFibGVzLiAgVGhpcworcmVtb3ZlcyB0aGUgdGVtcG9yYXJ5IEBjb2Rle2xldH0tdmFyaWFibGUgZnJvbSB0aGUgbGlzdCBzbyB0aGF0IGl0IHdvbid0CithcHBlYXIgdG8gZXhpc3Qgd2hpbGUgdGhlIHJlc3Qgb2YgdGhlIHByb2dyYW0gaXMgcGFyc2VkLgorCitAZmluZGV4ICVkZXN0cnVjdG9yCitAY2luZGV4IGRpc2NhcmRlZCBzeW1ib2xzLCBtaWQtcnVsZSBhY3Rpb25zCitAY2luZGV4IGVycm9yIHJlY292ZXJ5LCBtaWQtcnVsZSBhY3Rpb25zCitJbiB0aGUgYWJvdmUgZXhhbXBsZSwgaWYgdGhlIHBhcnNlciBpbml0aWF0ZXMgZXJyb3IgcmVjb3ZlcnkgKEBweHJlZntFcnJvcgorUmVjb3Zlcnl9KSB3aGlsZSBwYXJzaW5nIHRoZSB0b2tlbnMgaW4gdGhlIGVtYmVkZGVkIHN0YXRlbWVudCBAY29kZXtzdG10fSwKK2l0IG1pZ2h0IGRpc2NhcmQgdGhlIHByZXZpb3VzIHNlbWFudGljIGNvbnRleHQgQGNvZGV7JDxjb250ZXh0PjV9IHdpdGhvdXQKK3Jlc3RvcmluZyBpdC4KK1RodXMsIEBjb2RleyQ8Y29udGV4dD41fSBuZWVkcyBhIGRlc3RydWN0b3IgKEBweHJlZntEZXN0cnVjdG9yIERlY2wsICwgRnJlZWluZworRGlzY2FyZGVkIFN5bWJvbHN9KS4KK0hvd2V2ZXIsIEJpc29uIGN1cnJlbnRseSBwcm92aWRlcyBubyBtZWFucyB0byBkZWNsYXJlIGEgZGVzdHJ1Y3RvciBzcGVjaWZpYyB0bworYSBwYXJ0aWN1bGFyIG1pZC1ydWxlIGFjdGlvbidzIHNlbWFudGljIHZhbHVlLgorCitPbmUgc29sdXRpb24gaXMgdG8gYnVyeSB0aGUgbWlkLXJ1bGUgYWN0aW9uIGluc2lkZSBhIG5vbnRlcm1pbmFsIHN5bWJvbCBhbmQgdG8KK2RlY2xhcmUgYSBkZXN0cnVjdG9yIGZvciB0aGF0IHN5bWJvbDoKKworQGV4YW1wbGUKK0Bncm91cAorJXR5cGUgPGNvbnRleHQ+IGxldAorJWRlc3RydWN0b3IgQHsgcG9wX2NvbnRleHQgKCQkKTsgQH0gbGV0CisKKyUlCisKK3N0bXQ6CisgIGxldCBzdG10CisgICAgQHsKKyAgICAgICQkID0gJDI7CisgICAgICBwb3BfY29udGV4dCAoJGxldCk7CisgICAgQH07CisKK2xldDoKKyAgImxldCIgJygnIHZhciAnKScKKyAgICBAeworICAgICAgJGxldCA9IHB1c2hfY29udGV4dCAoKTsKKyAgICAgIGRlY2xhcmVfdmFyaWFibGUgKCQzKTsKKyAgICBAfTsKKworQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorTm90ZSB0aGF0IHRoZSBhY3Rpb24gaXMgbm93IGF0IHRoZSBlbmQgb2YgaXRzIHJ1bGUuCitBbnkgbWlkLXJ1bGUgYWN0aW9uIGNhbiBiZSBjb252ZXJ0ZWQgdG8gYW4gZW5kLW9mLXJ1bGUgYWN0aW9uIGluIHRoaXMgd2F5LCBhbmQKK3RoaXMgaXMgd2hhdCBCaXNvbiBhY3R1YWxseSBkb2VzIHRvIGltcGxlbWVudCBtaWQtcnVsZSBhY3Rpb25zLgorCitAbm9kZSBNaWQtUnVsZSBBY3Rpb24gVHJhbnNsYXRpb24KK0BzdWJzdWJzZWN0aW9uIE1pZC1SdWxlIEFjdGlvbiBUcmFuc2xhdGlvbgorQHZpbmRleCAkQEBAdmFye259CitAdmluZGV4IEBAQHZhcntufQorCitBcyBoaW50ZWQgZWFybGllciwgbWlkLXJ1bGUgYWN0aW9ucyBhcmUgYWN0dWFsbHkgdHJhbnNmb3JtZWQgaW50byByZWd1bGFyCitydWxlcyBhbmQgYWN0aW9ucy4gIFRoZSB2YXJpb3VzIHJlcG9ydHMgZ2VuZXJhdGVkIGJ5IEJpc29uICh0ZXh0dWFsLAorZ3JhcGhpY2FsLCBldGMuLCBzZWUgQHJlZntVbmRlcnN0YW5kaW5nLCAsIFVuZGVyc3RhbmRpbmcgWW91ciBQYXJzZXJ9KQorcmV2ZWFsIHRoaXMgdHJhbnNsYXRpb24sIGJlc3QgZXhwbGFpbmVkIGJ5IG1lYW5zIG9mIGFuIGV4YW1wbGUuICBUaGUKK2ZvbGxvd2luZyBydWxlOgorCitAZXhhbXBsZQorZXhwOiBAeyBhKCk7IEB9ICJiIiBAeyBjKCk7IEB9IEB7IGQoKTsgQH0gImUiIEB7IGYoKTsgQH07CitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitpcyB0cmFuc2xhdGVkIGludG86CisKK0BleGFtcGxlCiskQEAxOiAvKiBlbXB0eSAqLyBAeyBhKCk7IEB9OworJEBAMjogLyogZW1wdHkgKi8gQHsgYygpOyBAfTsKKyRAQDM6IC8qIGVtcHR5ICovIEB7IGQoKTsgQH07CitleHA6ICRAQDEgImIiICRAQDIgJEBAMyAiZSIgQHsgZigpOyBAfTsKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK3dpdGggbmV3IG5vbnRlcm1pbmFsIHN5bWJvbHMgQGNvZGV7JEBAQHZhcntufX0sIHdoZXJlIEB2YXJ7bn0gaXMgYSBudW1iZXIuCisKK0EgbWlkLXJ1bGUgYWN0aW9uIGlzIGV4cGVjdGVkIHRvIGdlbmVyYXRlIGEgdmFsdWUgaWYgaXQgdXNlcyBAY29kZXskJH0sIG9yCit0aGUgKGZpbmFsKSBhY3Rpb24gdXNlcyBAY29kZXskQHZhcntufX0gd2hlcmUgQHZhcntufSBkZW5vdGUgdGhlIG1pZC1ydWxlCithY3Rpb24uICBJbiB0aGF0IGNhc2UgaXRzIG5vbnRlcm1pbmFsIGlzIHJhdGhlciBuYW1lZCBAY29kZXtAQEB2YXJ7bn19OgorCitAZXhhbXBsZQorZXhwOiBAeyBhKCk7IEB9ICJiIiBAeyAkJCA9IGMoKTsgQH0gQHsgZCgpOyBAfSAiZSIgQHsgZiA9ICQxOyBAfTsKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK2lzIHRyYW5zbGF0ZWQgaW50bworCitAZXhhbXBsZQorQEAxOiAvKiBlbXB0eSAqLyBAeyBhKCk7IEB9OworQEAyOiAvKiBlbXB0eSAqLyBAeyAkJCA9IGMoKTsgQH07CiskQEAzOiAvKiBlbXB0eSAqLyBAeyBkKCk7IEB9OworZXhwOiBAQDEgImIiIEBAMiAkQEAzICJlIiBAeyBmID0gJDE7IEB9CitAZW5kIGV4YW1wbGUKKworVGhlcmUgYXJlIHByb2JhYmx5IHR3byBlcnJvcnMgaW4gdGhlIGFib3ZlIGV4YW1wbGU6IHRoZSBmaXJzdCBtaWQtcnVsZQorYWN0aW9uIGRvZXMgbm90IGdlbmVyYXRlIGEgdmFsdWUgKGl0IGRvZXMgbm90IHVzZSBAY29kZXskJH0gYWx0aG91Z2ggdGhlCitmaW5hbCBhY3Rpb24gdXNlcyBpdCksIGFuZCB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZCBvbmUgaXMgbm90IHVzZWQgKHRoZQorZmluYWwgYWN0aW9uIGRvZXMgbm90IHVzZSBAY29kZXskM30pLiAgQmlzb24gcmVwb3J0cyB0aGVzZSBlcnJvcnMgd2hlbiB0aGUKK0Bjb2Rle21pZHJ1bGUtdmFsdWV9IHdhcm5pbmdzIGFyZSBlbmFibGVkIChAcHhyZWZ7SW52b2NhdGlvbiwgLEludm9raW5nCitCaXNvbn0pOgorCitAZXhhbXBsZQorJCBiaXNvbiAtZmNhcmV0IC1XbWlkcnVsZS12YWx1ZSBtaWQueQorQGdyb3VwCittaWQueToyLjYtMTM6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkJAorIGV4cDogQHsgYSgpOyBAfSAiYiIgQHsgJCQgPSBjKCk7IEB9IEB7IGQoKTsgQH0gImUiIEB7IGYgPSAkMTsgQH07CisgICAgICBeXl5eXl5eXgorQGVuZCBncm91cAorQGdyb3VwCittaWQueToyLjE5LTMxOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQzCisgZXhwOiBAeyBhKCk7IEB9ICJiIiBAeyAkJCA9IGMoKTsgQH0gQHsgZCgpOyBAfSAiZSIgQHsgZiA9ICQxOyBAfTsKKyAgICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXl5eCitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworCitAbm9kZSBNaWQtUnVsZSBDb25mbGljdHMKK0BzdWJzdWJzZWN0aW9uIENvbmZsaWN0cyBkdWUgdG8gTWlkLVJ1bGUgQWN0aW9ucworVGFraW5nIGFjdGlvbiBiZWZvcmUgYSBydWxlIGlzIGNvbXBsZXRlbHkgcmVjb2duaXplZCBvZnRlbiBsZWFkcyB0bworY29uZmxpY3RzIHNpbmNlIHRoZSBwYXJzZXIgbXVzdCBjb21taXQgdG8gYSBwYXJzZSBpbiBvcmRlciB0byBleGVjdXRlIHRoZQorYWN0aW9uLiAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgdHdvIHJ1bGVzLCB3aXRob3V0IG1pZC1ydWxlIGFjdGlvbnMsCitjYW4gY29leGlzdCBpbiBhIHdvcmtpbmcgcGFyc2VyIGJlY2F1c2UgdGhlIHBhcnNlciBjYW4gc2hpZnQgdGhlIG9wZW4tYnJhY2UKK3Rva2VuIGFuZCBsb29rIGF0IHdoYXQgZm9sbG93cyBiZWZvcmUgZGVjaWRpbmcgd2hldGhlciB0aGVyZSBpcyBhCitkZWNsYXJhdGlvbiBvciBub3Q6CisKK0BleGFtcGxlCitAZ3JvdXAKK2NvbXBvdW5kOgorICAnQHsnIGRlY2xhcmF0aW9ucyBzdGF0ZW1lbnRzICdAfScKK3wgJ0B7JyBzdGF0ZW1lbnRzICdAfScKKzsKK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK0J1dCB3aGVuIHdlIGFkZCBhIG1pZC1ydWxlIGFjdGlvbiBhcyBmb2xsb3dzLCB0aGUgcnVsZXMgYmVjb21lIG5vbmZ1bmN0aW9uYWw6CisKK0BleGFtcGxlCitAZ3JvdXAKK2NvbXBvdW5kOgorICBAeyBwcmVwYXJlX2Zvcl9sb2NhbF92YXJpYWJsZXMgKCk7IEB9CisgICAgICdAeycgZGVjbGFyYXRpb25zIHN0YXRlbWVudHMgJ0B9JworQGVuZCBncm91cAorQGdyb3VwCit8ICAgICdAeycgc3RhdGVtZW50cyAnQH0nCis7CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitOb3cgdGhlIHBhcnNlciBpcyBmb3JjZWQgdG8gZGVjaWRlIHdoZXRoZXIgdG8gcnVuIHRoZSBtaWQtcnVsZSBhY3Rpb24KK3doZW4gaXQgaGFzIHJlYWQgbm8gZmFydGhlciB0aGFuIHRoZSBvcGVuLWJyYWNlLiAgSW4gb3RoZXIgd29yZHMsIGl0CittdXN0IGNvbW1pdCB0byB1c2luZyBvbmUgcnVsZSBvciB0aGUgb3RoZXIsIHdpdGhvdXQgc3VmZmljaWVudAoraW5mb3JtYXRpb24gdG8gZG8gaXQgY29ycmVjdGx5LiAgKFRoZSBvcGVuLWJyYWNlIHRva2VuIGlzIHdoYXQgaXMgY2FsbGVkCit0aGUgQGRmbntsb29rYWhlYWR9IHRva2VuIGF0IHRoaXMgdGltZSwgc2luY2UgdGhlIHBhcnNlciBpcyBzdGlsbAorZGVjaWRpbmcgd2hhdCB0byBkbyBhYm91dCBpdC4gIEB4cmVme0xvb2thaGVhZCwgLExvb2thaGVhZCBUb2tlbnN9LikKKworWW91IG1pZ2h0IHRoaW5rIHRoYXQgeW91IGNvdWxkIGNvcnJlY3QgdGhlIHByb2JsZW0gYnkgcHV0dGluZyBpZGVudGljYWwKK2FjdGlvbnMgaW50byB0aGUgdHdvIHJ1bGVzLCBsaWtlIHRoaXM6CisKK0BleGFtcGxlCitAZ3JvdXAKK2NvbXBvdW5kOgorICBAeyBwcmVwYXJlX2Zvcl9sb2NhbF92YXJpYWJsZXMgKCk7IEB9CisgICAgJ0B7JyBkZWNsYXJhdGlvbnMgc3RhdGVtZW50cyAnQH0nCit8IEB7IHByZXBhcmVfZm9yX2xvY2FsX3ZhcmlhYmxlcyAoKTsgQH0KKyAgICAnQHsnIHN0YXRlbWVudHMgJ0B9JworOworQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorQnV0IHRoaXMgZG9lcyBub3QgaGVscCwgYmVjYXVzZSBCaXNvbiBkb2VzIG5vdCByZWFsaXplIHRoYXQgdGhlIHR3byBhY3Rpb25zCithcmUgaWRlbnRpY2FsLiAgKEJpc29uIG5ldmVyIHRyaWVzIHRvIHVuZGVyc3RhbmQgdGhlIEMgY29kZSBpbiBhbiBhY3Rpb24uKQorCitJZiB0aGUgZ3JhbW1hciBpcyBzdWNoIHRoYXQgYSBkZWNsYXJhdGlvbiBjYW4gYmUgZGlzdGluZ3Vpc2hlZCBmcm9tIGEKK3N0YXRlbWVudCBieSB0aGUgZmlyc3QgdG9rZW4gKHdoaWNoIGlzIHRydWUgaW4gQyksIHRoZW4gb25lIHNvbHV0aW9uIHdoaWNoCitkb2VzIHdvcmsgaXMgdG8gcHV0IHRoZSBhY3Rpb24gYWZ0ZXIgdGhlIG9wZW4tYnJhY2UsIGxpa2UgdGhpczoKKworQGV4YW1wbGUKK0Bncm91cAorY29tcG91bmQ6CisgICdAeycgQHsgcHJlcGFyZV9mb3JfbG9jYWxfdmFyaWFibGVzICgpOyBAfQorICAgIGRlY2xhcmF0aW9ucyBzdGF0ZW1lbnRzICdAfScKK3wgJ0B7JyBzdGF0ZW1lbnRzICdAfScKKzsKK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK05vdyB0aGUgZmlyc3QgdG9rZW4gb2YgdGhlIGZvbGxvd2luZyBkZWNsYXJhdGlvbiBvciBzdGF0ZW1lbnQsCit3aGljaCB3b3VsZCBpbiBhbnkgY2FzZSB0ZWxsIEJpc29uIHdoaWNoIHJ1bGUgdG8gdXNlLCBjYW4gc3RpbGwgZG8gc28uCisKK0Fub3RoZXIgc29sdXRpb24gaXMgdG8gYnVyeSB0aGUgYWN0aW9uIGluc2lkZSBhIG5vbnRlcm1pbmFsIHN5bWJvbCB3aGljaAorc2VydmVzIGFzIGEgc3Vicm91dGluZToKKworQGV4YW1wbGUKK0Bncm91cAorc3Vicm91dGluZToKKyAgLyogZW1wdHkgKi8gIEB7IHByZXBhcmVfZm9yX2xvY2FsX3ZhcmlhYmxlcyAoKTsgQH0KKzsKK0BlbmQgZ3JvdXAKKworQGdyb3VwCitjb21wb3VuZDoKKyAgc3Vicm91dGluZSAnQHsnIGRlY2xhcmF0aW9ucyBzdGF0ZW1lbnRzICdAfScKK3wgc3Vicm91dGluZSAnQHsnIHN0YXRlbWVudHMgJ0B9JworOworQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorTm93IEJpc29uIGNhbiBleGVjdXRlIHRoZSBhY3Rpb24gaW4gdGhlIHJ1bGUgZm9yIEBjb2Rle3N1YnJvdXRpbmV9IHdpdGhvdXQKK2RlY2lkaW5nIHdoaWNoIHJ1bGUgZm9yIEBjb2Rle2NvbXBvdW5kfSBpdCB3aWxsIGV2ZW50dWFsbHkgdXNlLgorCisKK0Bub2RlIFRyYWNraW5nIExvY2F0aW9ucworQHNlY3Rpb24gVHJhY2tpbmcgTG9jYXRpb25zCitAY2luZGV4IGxvY2F0aW9uCitAY2luZGV4IHRleHR1YWwgbG9jYXRpb24KK0BjaW5kZXggbG9jYXRpb24sIHRleHR1YWwKKworVGhvdWdoIGdyYW1tYXIgcnVsZXMgYW5kIHNlbWFudGljIGFjdGlvbnMgYXJlIGVub3VnaCB0byB3cml0ZSBhIGZ1bGx5CitmdW5jdGlvbmFsIHBhcnNlciwgaXQgY2FuIGJlIHVzZWZ1bCB0byBwcm9jZXNzIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwKK2VzcGVjaWFsbHkgc3ltYm9sIGxvY2F0aW9ucy4KKworVGhlIHdheSBsb2NhdGlvbnMgYXJlIGhhbmRsZWQgaXMgZGVmaW5lZCBieSBwcm92aWRpbmcgYSBkYXRhIHR5cGUsIGFuZAorYWN0aW9ucyB0byB0YWtlIHdoZW4gcnVsZXMgYXJlIG1hdGNoZWQuCisKK0BtZW51CisqIExvY2F0aW9uIFR5cGU6OiAgICAgICAgICAgICAgIFNwZWNpZnlpbmcgYSBkYXRhIHR5cGUgZm9yIGxvY2F0aW9ucy4KKyogQWN0aW9ucyBhbmQgTG9jYXRpb25zOjogICAgICAgVXNpbmcgbG9jYXRpb25zIGluIGFjdGlvbnMuCisqIExvY2F0aW9uIERlZmF1bHQgQWN0aW9uOjogICAgIERlZmluaW5nIGEgZ2VuZXJhbCB3YXkgdG8gY29tcHV0ZSBsb2NhdGlvbnMuCitAZW5kIG1lbnUKKworQG5vZGUgTG9jYXRpb24gVHlwZQorQHN1YnNlY3Rpb24gRGF0YSBUeXBlIG9mIExvY2F0aW9ucworQGNpbmRleCBkYXRhIHR5cGUgb2YgbG9jYXRpb25zCitAY2luZGV4IGRlZmF1bHQgbG9jYXRpb24gdHlwZQorCitEZWZpbmluZyBhIGRhdGEgdHlwZSBmb3IgbG9jYXRpb25zIGlzIG11Y2ggc2ltcGxlciB0aGFuIGZvciBzZW1hbnRpYyB2YWx1ZXMsCitzaW5jZSBhbGwgdG9rZW5zIGFuZCBncm91cGluZ3MgYWx3YXlzIHVzZSB0aGUgc2FtZSB0eXBlLgorCitZb3UgY2FuIHNwZWNpZnkgdGhlIHR5cGUgb2YgbG9jYXRpb25zIGJ5IGRlZmluaW5nIGEgbWFjcm8gY2FsbGVkCitAY29kZXtZWUxUWVBFfSwganVzdCBhcyB5b3UgY2FuIHNwZWNpZnkgdGhlIHNlbWFudGljIHZhbHVlIHR5cGUgYnkKK2RlZmluaW5nIGEgQGNvZGV7WVlTVFlQRX0gbWFjcm8gKEBweHJlZntWYWx1ZSBUeXBlfSkuCitXaGVuIEBjb2Rle1lZTFRZUEV9IGlzIG5vdCBkZWZpbmVkLCBCaXNvbiB1c2VzIGEgZGVmYXVsdCBzdHJ1Y3R1cmUgdHlwZSB3aXRoCitmb3VyIG1lbWJlcnM6CisKK0BleGFtcGxlCit0eXBlZGVmIHN0cnVjdCBZWUxUWVBFCitAeworICBpbnQgZmlyc3RfbGluZTsKKyAgaW50IGZpcnN0X2NvbHVtbjsKKyAgaW50IGxhc3RfbGluZTsKKyAgaW50IGxhc3RfY29sdW1uOworQH0gWVlMVFlQRTsKK0BlbmQgZXhhbXBsZQorCitXaGVuIEBjb2Rle1lZTFRZUEV9IGlzIG5vdCBkZWZpbmVkLCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXJzaW5nLCBCaXNvbgoraW5pdGlhbGl6ZXMgYWxsIHRoZXNlIGZpZWxkcyB0byAxIGZvciBAY29kZXt5eWxsb2N9LiAgVG8gaW5pdGlhbGl6ZQorQGNvZGV7eXlsbG9jfSB3aXRoIGEgY3VzdG9tIGxvY2F0aW9uIHR5cGUgKG9yIHRvIGNob3NlIGEgZGlmZmVyZW50Citpbml0aWFsaXphdGlvbiksIHVzZSB0aGUgQGNvZGV7JWluaXRpYWwtYWN0aW9ufSBkaXJlY3RpdmUuICBAeHJlZntJbml0aWFsCitBY3Rpb24gRGVjbCwgLCBQZXJmb3JtaW5nIEFjdGlvbnMgYmVmb3JlIFBhcnNpbmd9LgorCitAbm9kZSBBY3Rpb25zIGFuZCBMb2NhdGlvbnMKK0BzdWJzZWN0aW9uIEFjdGlvbnMgYW5kIExvY2F0aW9ucworQGNpbmRleCBsb2NhdGlvbiBhY3Rpb25zCitAY2luZGV4IGFjdGlvbnMsIGxvY2F0aW9uCitAdmluZGV4IEBAJAorQHZpbmRleCBAQEB2YXJ7bn0KK0B2aW5kZXggQEBAdmFye25hbWV9CitAdmluZGV4IEBAW0B2YXJ7bmFtZX1dCisKK0FjdGlvbnMgYXJlIG5vdCBvbmx5IHVzZWZ1bCBmb3IgZGVmaW5pbmcgbGFuZ3VhZ2Ugc2VtYW50aWNzLCBidXQgYWxzbyBmb3IKK2Rlc2NyaWJpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBvdXRwdXQgcGFyc2VyIHdpdGggbG9jYXRpb25zLgorCitUaGUgbW9zdCBvYnZpb3VzIHdheSBmb3IgYnVpbGRpbmcgbG9jYXRpb25zIG9mIHN5bnRhY3RpYyBncm91cGluZ3MgaXMgdmVyeQorc2ltaWxhciB0byB0aGUgd2F5IHNlbWFudGljIHZhbHVlcyBhcmUgY29tcHV0ZWQuICBJbiBhIGdpdmVuIHJ1bGUsIHNldmVyYWwKK2NvbnN0cnVjdHMgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSBsb2NhdGlvbnMgb2YgdGhlIGVsZW1lbnRzIGJlaW5nIG1hdGNoZWQuCitUaGUgbG9jYXRpb24gb2YgdGhlIEB2YXJ7bn10aCBjb21wb25lbnQgb2YgdGhlIHJpZ2h0IGhhbmQgc2lkZSBpcworQGNvZGV7QEBAdmFye259fSwgd2hpbGUgdGhlIGxvY2F0aW9uIG9mIHRoZSBsZWZ0IGhhbmQgc2lkZSBncm91cGluZyBpcworQGNvZGV7QEAkfS4KKworSW4gYWRkaXRpb24sIHRoZSBuYW1lZCByZWZlcmVuY2VzIGNvbnN0cnVjdCBAY29kZXtAQEB2YXJ7bmFtZX19IGFuZAorQGNvZGV7QEBbQHZhcntuYW1lfV19IG1heSBhbHNvIGJlIHVzZWQgdG8gYWRkcmVzcyB0aGUgc3ltYm9sIGxvY2F0aW9ucy4KK0B4cmVme05hbWVkIFJlZmVyZW5jZXN9LCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyB0aGUgbmFtZWQKK3JlZmVyZW5jZXMgY29uc3RydWN0LgorCitIZXJlIGlzIGEgYmFzaWMgZXhhbXBsZSB1c2luZyB0aGUgZGVmYXVsdCBkYXRhIHR5cGUgZm9yIGxvY2F0aW9uczoKKworQGV4YW1wbGUKK0Bncm91cAorZXhwOgorICBAZG90c3t9Cit8IGV4cCAnLycgZXhwCisgICAgQHsKKyAgICAgIEBAJC5maXJzdF9jb2x1bW4gPSBAQDEuZmlyc3RfY29sdW1uOworICAgICAgQEAkLmZpcnN0X2xpbmUgPSBAQDEuZmlyc3RfbGluZTsKKyAgICAgIEBAJC5sYXN0X2NvbHVtbiA9IEBAMy5sYXN0X2NvbHVtbjsKKyAgICAgIEBAJC5sYXN0X2xpbmUgPSBAQDMubGFzdF9saW5lOworICAgICAgaWYgKCQzKQorICAgICAgICAkJCA9ICQxIC8gJDM7CisgICAgICBlbHNlCisgICAgICAgIEB7CisgICAgICAgICAgJCQgPSAxOworICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAiRGl2aXNpb24gYnkgemVybywgbCVkLGMlZC1sJWQsYyVkIiwKKyAgICAgICAgICAgICAgICAgICBAQDMuZmlyc3RfbGluZSwgQEAzLmZpcnN0X2NvbHVtbiwKKyAgICAgICAgICAgICAgICAgICBAQDMubGFzdF9saW5lLCBAQDMubGFzdF9jb2x1bW4pOworICAgICAgICBAfQorICAgIEB9CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworQXMgZm9yIHNlbWFudGljIHZhbHVlcywgdGhlcmUgaXMgYSBkZWZhdWx0IGFjdGlvbiBmb3IgbG9jYXRpb25zIHRoYXQgaXMKK3J1biBlYWNoIHRpbWUgYSBydWxlIGlzIG1hdGNoZWQuICBJdCBzZXRzIHRoZSBiZWdpbm5pbmcgb2YgQGNvZGV7QEAkfSB0byB0aGUKK2JlZ2lubmluZyBvZiB0aGUgZmlyc3Qgc3ltYm9sLCBhbmQgdGhlIGVuZCBvZiBAY29kZXtAQCR9IHRvIHRoZSBlbmQgb2YgdGhlCitsYXN0IHN5bWJvbC4KKworV2l0aCB0aGlzIGRlZmF1bHQgYWN0aW9uLCB0aGUgbG9jYXRpb24gdHJhY2tpbmcgY2FuIGJlIGZ1bGx5IGF1dG9tYXRpYy4gIFRoZQorZXhhbXBsZSBhYm92ZSBzaW1wbHkgcmV3cml0ZXMgdGhpcyB3YXk6CisKK0BleGFtcGxlCitAZ3JvdXAKK2V4cDoKKyAgQGRvdHN7fQorfCBleHAgJy8nIGV4cAorICAgIEB7CisgICAgICBpZiAoJDMpCisgICAgICAgICQkID0gJDEgLyAkMzsKKyAgICAgIGVsc2UKKyAgICAgICAgQHsKKyAgICAgICAgICAkJCA9IDE7CisgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICJEaXZpc2lvbiBieSB6ZXJvLCBsJWQsYyVkLWwlZCxjJWQiLAorICAgICAgICAgICAgICAgICAgIEBAMy5maXJzdF9saW5lLCBAQDMuZmlyc3RfY29sdW1uLAorICAgICAgICAgICAgICAgICAgIEBAMy5sYXN0X2xpbmUsIEBAMy5sYXN0X2NvbHVtbik7CisgICAgICAgIEB9CisgICAgQH0KK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitAdmluZGV4IHl5bGxvYworSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBhY2Nlc3MgdGhlIGxvY2F0aW9uIG9mIHRoZSBsb29rYWhlYWQgdG9rZW4sIGlmIGFueSwKK2Zyb20gYSBzZW1hbnRpYyBhY3Rpb24uCitUaGlzIGxvY2F0aW9uIGlzIHN0b3JlZCBpbiBAY29kZXt5eWxsb2N9LgorQHhyZWZ7QWN0aW9uIEZlYXR1cmVzLCAsU3BlY2lhbCBGZWF0dXJlcyBmb3IgVXNlIGluIEFjdGlvbnN9LgorCitAbm9kZSBMb2NhdGlvbiBEZWZhdWx0IEFjdGlvbgorQHN1YnNlY3Rpb24gRGVmYXVsdCBBY3Rpb24gZm9yIExvY2F0aW9ucworQHZpbmRleCBZWUxMT0NfREVGQVVMVAorQGNpbmRleCBHTFIgcGFyc2VycyBhbmQgQGNvZGV7WVlMTE9DX0RFRkFVTFR9CisKK0FjdHVhbGx5LCBhY3Rpb25zIGFyZSBub3QgdGhlIGJlc3QgcGxhY2UgdG8gY29tcHV0ZSBsb2NhdGlvbnMuICBTaW5jZQorbG9jYXRpb25zIGFyZSBtdWNoIG1vcmUgZ2VuZXJhbCB0aGFuIHNlbWFudGljIHZhbHVlcywgdGhlcmUgaXMgcm9vbSBpbgordGhlIG91dHB1dCBwYXJzZXIgdG8gcmVkZWZpbmUgdGhlIGRlZmF1bHQgYWN0aW9uIHRvIHRha2UgZm9yIGVhY2gKK3J1bGUuICBUaGUgQGNvZGV7WVlMTE9DX0RFRkFVTFR9IG1hY3JvIGlzIGludm9rZWQgZWFjaCB0aW1lIGEgcnVsZSBpcworbWF0Y2hlZCwgYmVmb3JlIHRoZSBhc3NvY2lhdGVkIGFjdGlvbiBpcyBydW4uICBJdCBpcyBhbHNvIGludm9rZWQKK3doaWxlIHByb2Nlc3NpbmcgYSBzeW50YXggZXJyb3IsIHRvIGNvbXB1dGUgdGhlIGVycm9yJ3MgbG9jYXRpb24uCitCZWZvcmUgcmVwb3J0aW5nIGFuIHVucmVzb2x2YWJsZSBzeW50YWN0aWMgYW1iaWd1aXR5LCBhIEdMUgorcGFyc2VyIGludm9rZXMgQGNvZGV7WVlMTE9DX0RFRkFVTFR9IHJlY3Vyc2l2ZWx5IHRvIGNvbXB1dGUgdGhlIGxvY2F0aW9uCitvZiB0aGF0IGFtYmlndWl0eS4KKworTW9zdCBvZiB0aGUgdGltZSwgdGhpcyBtYWNybyBpcyBnZW5lcmFsIGVub3VnaCB0byBzdXBwcmVzcyBsb2NhdGlvbgorZGVkaWNhdGVkIGNvZGUgZnJvbSBzZW1hbnRpYyBhY3Rpb25zLgorCitUaGUgQGNvZGV7WVlMTE9DX0RFRkFVTFR9IG1hY3JvIHRha2VzIHRocmVlIHBhcmFtZXRlcnMuICBUaGUgZmlyc3Qgb25lIGlzCit0aGUgbG9jYXRpb24gb2YgdGhlIGdyb3VwaW5nICh0aGUgcmVzdWx0IG9mIHRoZSBjb21wdXRhdGlvbikuICBXaGVuIGEKK3J1bGUgaXMgbWF0Y2hlZCwgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaWRlbnRpZmllcyBsb2NhdGlvbnMgb2YKK2FsbCByaWdodCBoYW5kIHNpZGUgZWxlbWVudHMgb2YgdGhlIHJ1bGUgYmVpbmcgbWF0Y2hlZCwgYW5kIHRoZSB0aGlyZAorcGFyYW1ldGVyIGlzIHRoZSBzaXplIG9mIHRoZSBydWxlJ3MgcmlnaHQgaGFuZCBzaWRlLgorV2hlbiBhIEdMUiBwYXJzZXIgcmVwb3J0cyBhbiBhbWJpZ3VpdHksIHdoaWNoIG9mIG11bHRpcGxlIGNhbmRpZGF0ZQorcmlnaHQgaGFuZCBzaWRlcyBpdCBwYXNzZXMgdG8gQGNvZGV7WVlMTE9DX0RFRkFVTFR9IGlzIHVuZGVmaW5lZC4KK1doZW4gcHJvY2Vzc2luZyBhIHN5bnRheCBlcnJvciwgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaWRlbnRpZmllcyBsb2NhdGlvbnMKK29mIHRoZSBzeW1ib2xzIHRoYXQgd2VyZSBkaXNjYXJkZWQgZHVyaW5nIGVycm9yIHByb2Nlc3NpbmcsIGFuZCB0aGUgdGhpcmQKK3BhcmFtZXRlciBpcyB0aGUgbnVtYmVyIG9mIGRpc2NhcmRlZCBzeW1ib2xzLgorCitCeSBkZWZhdWx0LCBAY29kZXtZWUxMT0NfREVGQVVMVH0gaXMgZGVmaW5lZCB0aGlzIHdheToKKworQGV4YW1wbGUKK0Bncm91cAorIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VyLCBSaHMsIE4pICAgICAgICAgICAgICAgICAgICAgIFwKK2RvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmIChOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAoQ3VyKS5maXJzdF9saW5lICAgPSBZWVJIU0xPQyhSaHMsIDEpLmZpcnN0X2xpbmU7ICAgXAorICAgICAgKEN1cikuZmlyc3RfY29sdW1uID0gWVlSSFNMT0MoUmhzLCAxKS5maXJzdF9jb2x1bW47IFwKKyAgICAgIChDdXIpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9DKFJocywgTikubGFzdF9saW5lOyAgICBcCisgICAgICAoQ3VyKS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xPQyhSaHMsIE4pLmxhc3RfY29sdW1uOyAgXAorICAgIEB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAoQ3VyKS5maXJzdF9saW5lICAgPSAoQ3VyKS5sYXN0X2xpbmUgICA9ICAgICAgICAgICAgXAorICAgICAgICBZWVJIU0xPQyhSaHMsIDApLmxhc3RfbGluZTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChDdXIpLmZpcnN0X2NvbHVtbiA9IChDdXIpLmxhc3RfY29sdW1uID0gICAgICAgICAgICBcCisgICAgICAgIFlZUkhTTE9DKFJocywgMCkubGFzdF9jb2x1bW47ICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit3aGlsZSAoMCkKK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK3doZXJlIEBjb2Rle1lZUkhTTE9DIChyaHMsIGspfSBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIEB2YXJ7a310aCBzeW1ib2wKK2luIEB2YXJ7cmhzfSB3aGVuIEB2YXJ7a30gaXMgcG9zaXRpdmUsIGFuZCB0aGUgbG9jYXRpb24gb2YgdGhlIHN5bWJvbAoranVzdCBiZWZvcmUgdGhlIHJlZHVjdGlvbiB3aGVuIEB2YXJ7a30gYW5kIEB2YXJ7bn0gYXJlIGJvdGggemVyby4KKworV2hlbiBkZWZpbmluZyBAY29kZXtZWUxMT0NfREVGQVVMVH0sIHlvdSBzaG91bGQgY29uc2lkZXIgdGhhdDoKKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0KK0FsbCBhcmd1bWVudHMgYXJlIGZyZWUgb2Ygc2lkZS1lZmZlY3RzLiAgSG93ZXZlciwgb25seSB0aGUgZmlyc3Qgb25lICh0aGUKK3Jlc3VsdCkgc2hvdWxkIGJlIG1vZGlmaWVkIGJ5IEBjb2Rle1lZTExPQ19ERUZBVUxUfS4KKworQGl0ZW0KK0ZvciBjb25zaXN0ZW5jeSB3aXRoIHNlbWFudGljIGFjdGlvbnMsIHZhbGlkIGluZGV4ZXMgd2l0aGluIHRoZQorcmlnaHQgaGFuZCBzaWRlIHJhbmdlIGZyb20gMSB0byBAdmFye259LiAgV2hlbiBAdmFye259IGlzIHplcm8sIG9ubHkgMCBpcyBhCit2YWxpZCBpbmRleCwgYW5kIGl0IHJlZmVycyB0byB0aGUgc3ltYm9sIGp1c3QgYmVmb3JlIHRoZSByZWR1Y3Rpb24uCitEdXJpbmcgZXJyb3IgcHJvY2Vzc2luZyBAdmFye259IGlzIGFsd2F5cyBwb3NpdGl2ZS4KKworQGl0ZW0KK1lvdXIgbWFjcm8gc2hvdWxkIHBhcmVudGhlc2l6ZSBpdHMgYXJndW1lbnRzLCBpZiBuZWVkIGJlLCBzaW5jZSB0aGUKK2FjdHVhbCBhcmd1bWVudHMgbWF5IG5vdCBiZSBzdXJyb3VuZGVkIGJ5IHBhcmVudGhlc2VzLiAgQWxzbywgeW91cgorbWFjcm8gc2hvdWxkIGV4cGFuZCB0byBzb21ldGhpbmcgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHNpbmdsZQorc3RhdGVtZW50IHdoZW4gaXQgaXMgZm9sbG93ZWQgYnkgYSBzZW1pY29sb24uCitAZW5kIGl0ZW1pemUKKworQG5vZGUgTmFtZWQgUmVmZXJlbmNlcworQHNlY3Rpb24gTmFtZWQgUmVmZXJlbmNlcworQGNpbmRleCBuYW1lZCByZWZlcmVuY2VzCisKK0FzIGRlc2NyaWJlZCBpbiB0aGUgcHJlY2VkaW5nIHNlY3Rpb25zLCB0aGUgdHJhZGl0aW9uYWwgd2F5IHRvIHJlZmVyIHRvIGFueQorc2VtYW50aWMgdmFsdWUgb3IgbG9jYXRpb24gaXMgYSBAZGZue3Bvc2l0aW9uYWwgcmVmZXJlbmNlfSwgd2hpY2ggdGFrZXMgdGhlCitmb3JtIEBjb2RleyRAdmFye259fSwgQGNvZGV7JCR9LCBAY29kZXtAQEB2YXJ7bn19LCBhbmQgQGNvZGV7QEAkfS4gIEhvd2V2ZXIsCitzdWNoIGEgcmVmZXJlbmNlIGlzIG5vdCB2ZXJ5IGRlc2NyaXB0aXZlLiAgTW9yZW92ZXIsIGlmIHlvdSBsYXRlciBkZWNpZGUgdG8KK2luc2VydCBvciByZW1vdmUgc3ltYm9scyBpbiB0aGUgcmlnaHQtaGFuZCBzaWRlIG9mIGEgZ3JhbW1hciBydWxlLCB0aGUgbmVlZAordG8gcmVudW1iZXIgc3VjaCByZWZlcmVuY2VzIGNhbiBiZSB0ZWRpb3VzIGFuZCBlcnJvci1wcm9uZS4KKworVG8gYXZvaWQgdGhlc2UgaXNzdWVzLCB5b3UgY2FuIGFsc28gcmVmZXIgdG8gYSBzZW1hbnRpYyB2YWx1ZSBvciBsb2NhdGlvbgordXNpbmcgYSBAZGZue25hbWVkIHJlZmVyZW5jZX0uICBGaXJzdCBvZiBhbGwsIG9yaWdpbmFsIHN5bWJvbCBuYW1lcyBtYXkgYmUKK3VzZWQgYXMgbmFtZWQgcmVmZXJlbmNlcy4gIEZvciBleGFtcGxlOgorCitAZXhhbXBsZQorQGdyb3VwCitpbnZvY2F0aW9uOiBvcCAnKCcgYXJncyAnKScKKyAgQHsgJGludm9jYXRpb24gPSBuZXdfaW52b2NhdGlvbiAoJG9wLCAkYXJncywgQEBpbnZvY2F0aW9uKTsgQH0KK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK1Bvc2l0aW9uYWwgYW5kIG5hbWVkIHJlZmVyZW5jZXMgY2FuIGJlIG1peGVkIGFyYml0cmFyaWx5LiAgRm9yIGV4YW1wbGU6CisKK0BleGFtcGxlCitAZ3JvdXAKK2ludm9jYXRpb246IG9wICcoJyBhcmdzICcpJworICBAeyAkJCA9IG5ld19pbnZvY2F0aW9uICgkb3AsICRhcmdzLCBAQCQpOyBAfQorQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorSG93ZXZlciwgc29tZXRpbWVzIHJlZ3VsYXIgc3ltYm9sIG5hbWVzIGFyZSBub3Qgc3VmZmljaWVudCBkdWUgdG8KK2FtYmlndWl0aWVzOgorCitAZXhhbXBsZQorQGdyb3VwCitleHA6IGV4cCAnLycgZXhwCisgIEB7ICRleHAgPSAkZXhwIC8gJGV4cDsgQH0gLy8gJGV4cCBpcyBhbWJpZ3VvdXMuCisKK2V4cDogZXhwICcvJyBleHAKKyAgQHsgJCQgPSAkMSAvICRleHA7IEB9IC8vIE9uZSB1c2FnZSBpcyBhbWJpZ3VvdXMuCisKK2V4cDogZXhwICcvJyBleHAKKyAgQHsgJCQgPSAkMSAvICQzOyBAfSAvLyBObyBlcnJvci4KK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK1doZW4gYW1iaWd1aXR5IG9jY3VycywgZXhwbGljaXRseSBkZWNsYXJlZCBuYW1lcyBtYXkgYmUgdXNlZCBmb3IgdmFsdWVzIGFuZAorbG9jYXRpb25zLiAgRXhwbGljaXQgbmFtZXMgYXJlIGRlY2xhcmVkIGFzIGEgYnJhY2tldGVkIG5hbWUgYWZ0ZXIgYSBzeW1ib2wKK2FwcGVhcmFuY2UgaW4gcnVsZSBkZWZpbml0aW9ucy4gIEZvciBleGFtcGxlOgorQGV4YW1wbGUKK0Bncm91cAorZXhwW3Jlc3VsdF06IGV4cFtsZWZ0XSAnLycgZXhwW3JpZ2h0XQorICBAeyAkcmVzdWx0ID0gJGxlZnQgLyAkcmlnaHQ7IEB9CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitJbiBvcmRlciB0byBhY2Nlc3MgYSBzZW1hbnRpYyB2YWx1ZSBnZW5lcmF0ZWQgYnkgYSBtaWQtcnVsZSBhY3Rpb24sIGFuCitleHBsaWNpdCBuYW1lIG1heSBhbHNvIGJlIGRlY2xhcmVkIGJ5IHB1dHRpbmcgYSBicmFja2V0ZWQgbmFtZSBhZnRlciB0aGUKK2Nsb3NpbmcgYnJhY2Ugb2YgdGhlIG1pZC1ydWxlIGFjdGlvbiBjb2RlOgorQGV4YW1wbGUKK0Bncm91cAorZXhwW3Jlc106IGV4cFt4XSAnKycgQHskbGVmdCA9ICR4O0B9W2xlZnRdIGV4cFtyaWdodF0KKyAgQHsgJHJlcyA9ICRsZWZ0ICsgJHJpZ2h0OyBAfQorQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorCitJbiByZWZlcmVuY2VzLCBpbiBvcmRlciB0byBzcGVjaWZ5IG5hbWVzIGNvbnRhaW5pbmcgZG90cyBhbmQgZGFzaGVzLCBhbiBleHBsaWNpdAorYnJhY2tldGVkIHN5bnRheCBAY29kZXskW25hbWVdfSBhbmQgQGNvZGV7QEBbbmFtZV19IG11c3QgYmUgdXNlZDoKK0BleGFtcGxlCitAZ3JvdXAKK2lmLXN0bXQ6ICJpZiIgJygnIGV4cHIgJyknICJ0aGVuIiB0aGVuLnN0bXQgJzsnCisgIEB7ICRbaWYtc3RtdF0gPSBuZXdfaWZfc3RtdCAoJGV4cHIsICRbdGhlbi5zdG10XSk7IEB9CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworSXQgb2Z0ZW4gaGFwcGVucyB0aGF0IG5hbWVkIHJlZmVyZW5jZXMgYXJlIGZvbGxvd2VkIGJ5IGEgZG90LCBkYXNoIG9yIG90aGVyCitDIHB1bmN0dWF0aW9uIG1hcmtzIGFuZCBvcGVyYXRvcnMuICBCeSBkZWZhdWx0LCBCaXNvbiB3aWxsIHJlYWQKK0BzYW1weyRuYW1lLnN1ZmZpeH0gYXMgYSByZWZlcmVuY2UgdG8gc3ltYm9sIHZhbHVlIEBjb2RleyRuYW1lfSBmb2xsb3dlZCBieQorQHNhbXB7LnN1ZmZpeH0sIGkuZS4sIGFuIGFjY2VzcyB0byB0aGUgQGNvZGV7c3VmZml4fSBmaWVsZCBvZiB0aGUgc2VtYW50aWMKK3ZhbHVlLiAgSW4gb3JkZXIgdG8gZm9yY2UgQmlzb24gdG8gcmVjb2duaXplIEBzYW1we25hbWUuc3VmZml4fSBpbiBpdHMKK2VudGlyZXR5IGFzIHRoZSBuYW1lIG9mIGEgc2VtYW50aWMgdmFsdWUsIHRoZSBicmFja2V0ZWQgc3ludGF4CitAc2FtcHskW25hbWUuc3VmZml4XX0gbXVzdCBiZSB1c2VkLgorCitUaGUgbmFtZWQgcmVmZXJlbmNlcyBmZWF0dXJlIGlzIGV4cGVyaW1lbnRhbC4gIE1vcmUgdXNlciBmZWVkYmFjayB3aWxsIGhlbHAKK3RvIHN0YWJpbGl6ZSBpdC4KKworQG5vZGUgRGVjbGFyYXRpb25zCitAc2VjdGlvbiBCaXNvbiBEZWNsYXJhdGlvbnMKK0BjaW5kZXggZGVjbGFyYXRpb25zLCBCaXNvbgorQGNpbmRleCBCaXNvbiBkZWNsYXJhdGlvbnMKKworVGhlIEBkZm57Qmlzb24gZGVjbGFyYXRpb25zfSBzZWN0aW9uIG9mIGEgQmlzb24gZ3JhbW1hciBkZWZpbmVzIHRoZSBzeW1ib2xzCit1c2VkIGluIGZvcm11bGF0aW5nIHRoZSBncmFtbWFyIGFuZCB0aGUgZGF0YSB0eXBlcyBvZiBzZW1hbnRpYyB2YWx1ZXMuCitAeHJlZntTeW1ib2xzfS4KKworQWxsIHRva2VuIHR5cGUgbmFtZXMgKGJ1dCBub3Qgc2luZ2xlLWNoYXJhY3RlciBsaXRlcmFsIHRva2VucyBzdWNoIGFzCitAY29kZXsnKyd9IGFuZCBAY29kZXsnKid9KSBtdXN0IGJlIGRlY2xhcmVkLiAgTm9udGVybWluYWwgc3ltYm9scyBtdXN0IGJlCitkZWNsYXJlZCBpZiB5b3UgbmVlZCB0byBzcGVjaWZ5IHdoaWNoIGRhdGEgdHlwZSB0byB1c2UgZm9yIHRoZSBzZW1hbnRpYwordmFsdWUgKEBweHJlZntNdWx0aXBsZSBUeXBlcywgLE1vcmUgVGhhbiBPbmUgVmFsdWUgVHlwZX0pLgorCitUaGUgZmlyc3QgcnVsZSBpbiB0aGUgZ3JhbW1hciBmaWxlIGFsc28gc3BlY2lmaWVzIHRoZSBzdGFydCBzeW1ib2wsIGJ5CitkZWZhdWx0LiAgSWYgeW91IHdhbnQgc29tZSBvdGhlciBzeW1ib2wgdG8gYmUgdGhlIHN0YXJ0IHN5bWJvbCwgeW91CittdXN0IGRlY2xhcmUgaXQgZXhwbGljaXRseSAoQHB4cmVme0xhbmd1YWdlIGFuZCBHcmFtbWFyLCAsTGFuZ3VhZ2VzCithbmQgQ29udGV4dC1GcmVlIEdyYW1tYXJzfSkuCisKK0BtZW51CisqIFJlcXVpcmUgRGVjbDo6ICAgICAgUmVxdWlyaW5nIGEgQmlzb24gdmVyc2lvbi4KKyogVG9rZW4gRGVjbDo6ICAgICAgICBEZWNsYXJpbmcgdGVybWluYWwgc3ltYm9scy4KKyogUHJlY2VkZW5jZSBEZWNsOjogICBEZWNsYXJpbmcgdGVybWluYWxzIHdpdGggcHJlY2VkZW5jZSBhbmQgYXNzb2NpYXRpdml0eS4KKyogVW5pb24gRGVjbDo6ICAgICAgICBEZWNsYXJpbmcgdGhlIHNldCBvZiBhbGwgc2VtYW50aWMgdmFsdWUgdHlwZXMuCisqIFR5cGUgRGVjbDo6ICAgICAgICAgRGVjbGFyaW5nIHRoZSBjaG9pY2Ugb2YgdHlwZSBmb3IgYSBub250ZXJtaW5hbCBzeW1ib2wuCisqIEluaXRpYWwgQWN0aW9uIERlY2w6OiAgQ29kZSBydW4gYmVmb3JlIHBhcnNpbmcgc3RhcnRzLgorKiBEZXN0cnVjdG9yIERlY2w6OiAgIERlY2xhcmluZyBob3cgc3ltYm9scyBhcmUgZnJlZWQuCisqIFByaW50ZXIgRGVjbDo6ICAgICAgRGVjbGFyaW5nIGhvdyBzeW1ib2wgdmFsdWVzIGFyZSBkaXNwbGF5ZWQuCisqIEV4cGVjdCBEZWNsOjogICAgICAgU3VwcHJlc3Npbmcgd2FybmluZ3MgYWJvdXQgcGFyc2luZyBjb25mbGljdHMuCisqIFN0YXJ0IERlY2w6OiAgICAgICAgU3BlY2lmeWluZyB0aGUgc3RhcnQgc3ltYm9sLgorKiBQdXJlIERlY2w6OiAgICAgICAgIFJlcXVlc3RpbmcgYSByZWVudHJhbnQgcGFyc2VyLgorKiBQdXNoIERlY2w6OiAgICAgICAgIFJlcXVlc3RpbmcgYSBwdXNoIHBhcnNlci4KKyogRGVjbCBTdW1tYXJ5OjogICAgICBUYWJsZSBvZiBhbGwgQmlzb24gZGVjbGFyYXRpb25zLgorKiAlZGVmaW5lIFN1bW1hcnk6OiAgIERlZmluaW5nIHZhcmlhYmxlcyB0byBhZGp1c3QgQmlzb24ncyBiZWhhdmlvci4KKyogJWNvZGUgU3VtbWFyeTo6ICAgICBJbnNlcnRpbmcgY29kZSBpbnRvIHRoZSBwYXJzZXIgc291cmNlLgorQGVuZCBtZW51CisKK0Bub2RlIFJlcXVpcmUgRGVjbAorQHN1YnNlY3Rpb24gUmVxdWlyZSBhIFZlcnNpb24gb2YgQmlzb24KK0BjaW5kZXggdmVyc2lvbiByZXF1aXJlbWVudAorQGNpbmRleCByZXF1aXJpbmcgYSB2ZXJzaW9uIG9mIEJpc29uCitAZmluZGV4ICVyZXF1aXJlCisKK1lvdSBtYXkgcmVxdWlyZSB0aGUgbWluaW11bSB2ZXJzaW9uIG9mIEJpc29uIHRvIHByb2Nlc3MgdGhlIGdyYW1tYXIuICBJZgordGhlIHJlcXVpcmVtZW50IGlzIG5vdCBtZXQsIEBjb21tYW5ke2Jpc29ufSBleGl0cyB3aXRoIGFuIGVycm9yIChleGl0CitzdGF0dXMgNjMpLgorCitAZXhhbXBsZQorJXJlcXVpcmUgIkB2YXJ7dmVyc2lvbn0iCitAZW5kIGV4YW1wbGUKKworQG5vZGUgVG9rZW4gRGVjbAorQHN1YnNlY3Rpb24gVG9rZW4gVHlwZSBOYW1lcworQGNpbmRleCBkZWNsYXJpbmcgdG9rZW4gdHlwZSBuYW1lcworQGNpbmRleCB0b2tlbiB0eXBlIG5hbWVzLCBkZWNsYXJpbmcKK0BjaW5kZXggZGVjbGFyaW5nIGxpdGVyYWwgc3RyaW5nIHRva2VucworQGZpbmRleCAldG9rZW4KKworVGhlIGJhc2ljIHdheSB0byBkZWNsYXJlIGEgdG9rZW4gdHlwZSBuYW1lICh0ZXJtaW5hbCBzeW1ib2wpIGlzIGFzIGZvbGxvd3M6CisKK0BleGFtcGxlCisldG9rZW4gQHZhcntuYW1lfQorQGVuZCBleGFtcGxlCisKK0Jpc29uIHdpbGwgY29udmVydCB0aGlzIGludG8gYSBAY29kZXsjZGVmaW5lfSBkaXJlY3RpdmUgaW4KK3RoZSBwYXJzZXIsIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIEBjb2Rle3l5bGV4fSAoaWYgaXQgaXMgaW4gdGhpcyBmaWxlKQorY2FuIHVzZSB0aGUgbmFtZSBAdmFye25hbWV9IHRvIHN0YW5kIGZvciB0aGlzIHRva2VuIHR5cGUncyBjb2RlLgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSBAY29kZXslbGVmdH0sIEBjb2RleyVyaWdodH0sIG9yCitAY29kZXslbm9uYXNzb2N9IGluc3RlYWQgb2YgQGNvZGV7JXRva2VufSwgaWYgeW91IHdpc2ggdG8gc3BlY2lmeQorYXNzb2NpYXRpdml0eSBhbmQgcHJlY2VkZW5jZS4gIEB4cmVme1ByZWNlZGVuY2UgRGVjbCwgLE9wZXJhdG9yCitQcmVjZWRlbmNlfS4KKworWW91IGNhbiBleHBsaWNpdGx5IHNwZWNpZnkgdGhlIG51bWVyaWMgY29kZSBmb3IgYSB0b2tlbiB0eXBlIGJ5IGFwcGVuZGluZworYSBub25uZWdhdGl2ZSBkZWNpbWFsIG9yIGhleGFkZWNpbWFsIGludGVnZXIgdmFsdWUgaW4gdGhlIGZpZWxkIGltbWVkaWF0ZWx5Citmb2xsb3dpbmcgdGhlIHRva2VuIG5hbWU6CisKK0BleGFtcGxlCisldG9rZW4gTlVNIDMwMAorJXRva2VuIFhOVU0gMHgxMmQgLy8gYSBHTlUgZXh0ZW5zaW9uCitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitJdCBpcyBnZW5lcmFsbHkgYmVzdCwgaG93ZXZlciwgdG8gbGV0IEJpc29uIGNob29zZSB0aGUgbnVtZXJpYyBjb2RlcyBmb3IKK2FsbCB0b2tlbiB0eXBlcy4gIEJpc29uIHdpbGwgYXV0b21hdGljYWxseSBzZWxlY3QgY29kZXMgdGhhdCBkb24ndCBjb25mbGljdAord2l0aCBlYWNoIG90aGVyIG9yIHdpdGggbm9ybWFsIGNoYXJhY3RlcnMuCisKK0luIHRoZSBldmVudCB0aGF0IHRoZSBzdGFjayB0eXBlIGlzIGEgdW5pb24sIHlvdSBtdXN0IGF1Z21lbnQgdGhlCitAY29kZXsldG9rZW59IG9yIG90aGVyIHRva2VuIGRlY2xhcmF0aW9uIHRvIGluY2x1ZGUgdGhlIGRhdGEgdHlwZQorYWx0ZXJuYXRpdmUgZGVsaW1pdGVkIGJ5IGFuZ2xlLWJyYWNrZXRzIChAcHhyZWZ7TXVsdGlwbGUgVHlwZXMsICxNb3JlCitUaGFuIE9uZSBWYWx1ZSBUeXBlfSkuCisKK0ZvciBleGFtcGxlOgorCitAZXhhbXBsZQorQGdyb3VwCisldW5pb24gQHsgICAgICAgICAgICAgIC8qIGRlZmluZSBzdGFjayB0eXBlICovCisgIGRvdWJsZSB2YWw7CisgIHN5bXJlYyAqdHB0cjsKK0B9CisldG9rZW4gPHZhbD4gTlVNICAgICAgLyogZGVmaW5lIHRva2VuIE5VTSBhbmQgaXRzIHR5cGUgKi8KK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitZb3UgY2FuIGFzc29jaWF0ZSBhIGxpdGVyYWwgc3RyaW5nIHRva2VuIHdpdGggYSB0b2tlbiB0eXBlIG5hbWUgYnkKK3dyaXRpbmcgdGhlIGxpdGVyYWwgc3RyaW5nIGF0IHRoZSBlbmQgb2YgYSBAY29kZXsldG9rZW59CitkZWNsYXJhdGlvbiB3aGljaCBkZWNsYXJlcyB0aGUgbmFtZS4gIEZvciBleGFtcGxlOgorCitAZXhhbXBsZQorJXRva2VuIGFycm93ICI9PiIKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK0ZvciBleGFtcGxlLCBhIGdyYW1tYXIgZm9yIHRoZSBDIGxhbmd1YWdlIG1pZ2h0IHNwZWNpZnkgdGhlc2UgbmFtZXMgd2l0aAorZXF1aXZhbGVudCBsaXRlcmFsIHN0cmluZyB0b2tlbnM6CisKK0BleGFtcGxlCisldG9rZW4gIDxvcGVyYXRvcj4gIE9SICAgICAgInx8IgorJXRva2VuICA8b3BlcmF0b3I+ICBMRSAxMzQgICI8PSIKKyVsZWZ0ICBPUiAgIjw9IgorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorT25jZSB5b3UgZXF1YXRlIHRoZSBsaXRlcmFsIHN0cmluZyBhbmQgdGhlIHRva2VuIG5hbWUsIHlvdSBjYW4gdXNlIHRoZW0KK2ludGVyY2hhbmdlYWJseSBpbiBmdXJ0aGVyIGRlY2xhcmF0aW9ucyBvciB0aGUgZ3JhbW1hciBydWxlcy4gIFRoZQorQGNvZGV7eXlsZXh9IGZ1bmN0aW9uIGNhbiB1c2UgdGhlIHRva2VuIG5hbWUgb3IgdGhlIGxpdGVyYWwgc3RyaW5nIHRvCitvYnRhaW4gdGhlIHRva2VuIHR5cGUgY29kZSBudW1iZXIgKEBweHJlZntDYWxsaW5nIENvbnZlbnRpb259KS4KK1N5bnRheCBlcnJvciBtZXNzYWdlcyBwYXNzZWQgdG8gQGNvZGV7eXllcnJvcn0gZnJvbSB0aGUgcGFyc2VyIHdpbGwgcmVmZXJlbmNlCit0aGUgbGl0ZXJhbCBzdHJpbmcgaW5zdGVhZCBvZiB0aGUgdG9rZW4gbmFtZS4KKworVGhlIHRva2VuIG51bWJlcmVkIGFzIDAgY29ycmVzcG9uZHMgdG8gZW5kIG9mIGZpbGU7IHRoZSBmb2xsb3dpbmcgbGluZQorYWxsb3dzIGZvciBuaWNlciBlcnJvciBtZXNzYWdlcyByZWZlcnJpbmcgdG8gYGBlbmQgb2YgZmlsZScnIGluc3RlYWQKK29mIGBgJGVuZCcnOgorCitAZXhhbXBsZQorJXRva2VuIEVORCAwICJlbmQgb2YgZmlsZSIKK0BlbmQgZXhhbXBsZQorCitAbm9kZSBQcmVjZWRlbmNlIERlY2wKK0BzdWJzZWN0aW9uIE9wZXJhdG9yIFByZWNlZGVuY2UKK0BjaW5kZXggcHJlY2VkZW5jZSBkZWNsYXJhdGlvbnMKK0BjaW5kZXggZGVjbGFyaW5nIG9wZXJhdG9yIHByZWNlZGVuY2UKK0BjaW5kZXggb3BlcmF0b3IgcHJlY2VkZW5jZSwgZGVjbGFyaW5nCisKK1VzZSB0aGUgQGNvZGV7JWxlZnR9LCBAY29kZXslcmlnaHR9IG9yIEBjb2RleyVub25hc3NvY30gZGVjbGFyYXRpb24gdG8KK2RlY2xhcmUgYSB0b2tlbiBhbmQgc3BlY2lmeSBpdHMgcHJlY2VkZW5jZSBhbmQgYXNzb2NpYXRpdml0eSwgYWxsIGF0CitvbmNlLiAgVGhlc2UgYXJlIGNhbGxlZCBAZGZue3ByZWNlZGVuY2UgZGVjbGFyYXRpb25zfS4KK0B4cmVme1ByZWNlZGVuY2UsICxPcGVyYXRvciBQcmVjZWRlbmNlfSwgZm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gb24KK29wZXJhdG9yIHByZWNlZGVuY2UuCisKK1RoZSBzeW50YXggb2YgYSBwcmVjZWRlbmNlIGRlY2xhcmF0aW9uIGlzIG5lYXJseSB0aGUgc2FtZSBhcyB0aGF0IG9mCitAY29kZXsldG9rZW59OiBlaXRoZXIKKworQGV4YW1wbGUKKyVsZWZ0IEB2YXJ7c3ltYm9sc31AZG90c3t9CitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitvcgorCitAZXhhbXBsZQorJWxlZnQgPEB2YXJ7dHlwZX0+IEB2YXJ7c3ltYm9sc31AZG90c3t9CitAZW5kIGV4YW1wbGUKKworQW5kIGluZGVlZCBhbnkgb2YgdGhlc2UgZGVjbGFyYXRpb25zIHNlcnZlcyB0aGUgcHVycG9zZXMgb2YgQGNvZGV7JXRva2VufS4KK0J1dCBpbiBhZGRpdGlvbiwgdGhleSBzcGVjaWZ5IHRoZSBhc3NvY2lhdGl2aXR5IGFuZCByZWxhdGl2ZSBwcmVjZWRlbmNlIGZvcgorYWxsIHRoZSBAdmFye3N5bWJvbHN9OgorCitAaXRlbWl6ZSBAYnVsbGV0CitAaXRlbQorVGhlIGFzc29jaWF0aXZpdHkgb2YgYW4gb3BlcmF0b3IgQHZhcntvcH0gZGV0ZXJtaW5lcyBob3cgcmVwZWF0ZWQgdXNlcworb2YgdGhlIG9wZXJhdG9yIG5lc3Q6IHdoZXRoZXIgQHNhbXB7QHZhcnt4fSBAdmFye29wfSBAdmFye3l9IEB2YXJ7b3B9CitAdmFye3p9fSBpcyBwYXJzZWQgYnkgZ3JvdXBpbmcgQHZhcnt4fSB3aXRoIEB2YXJ7eX0gZmlyc3Qgb3IgYnkKK2dyb3VwaW5nIEB2YXJ7eX0gd2l0aCBAdmFye3p9IGZpcnN0LiAgQGNvZGV7JWxlZnR9IHNwZWNpZmllcworbGVmdC1hc3NvY2lhdGl2aXR5IChncm91cGluZyBAdmFye3h9IHdpdGggQHZhcnt5fSBmaXJzdCkgYW5kCitAY29kZXslcmlnaHR9IHNwZWNpZmllcyByaWdodC1hc3NvY2lhdGl2aXR5IChncm91cGluZyBAdmFye3l9IHdpdGgKK0B2YXJ7en0gZmlyc3QpLiAgQGNvZGV7JW5vbmFzc29jfSBzcGVjaWZpZXMgbm8gYXNzb2NpYXRpdml0eSwgd2hpY2gKK21lYW5zIHRoYXQgQHNhbXB7QHZhcnt4fSBAdmFye29wfSBAdmFye3l9IEB2YXJ7b3B9IEB2YXJ7en19IGlzCitjb25zaWRlcmVkIGEgc3ludGF4IGVycm9yLgorCitAaXRlbQorVGhlIHByZWNlZGVuY2Ugb2YgYW4gb3BlcmF0b3IgZGV0ZXJtaW5lcyBob3cgaXQgbmVzdHMgd2l0aCBvdGhlciBvcGVyYXRvcnMuCitBbGwgdGhlIHRva2VucyBkZWNsYXJlZCBpbiBhIHNpbmdsZSBwcmVjZWRlbmNlIGRlY2xhcmF0aW9uIGhhdmUgZXF1YWwKK3ByZWNlZGVuY2UgYW5kIG5lc3QgdG9nZXRoZXIgYWNjb3JkaW5nIHRvIHRoZWlyIGFzc29jaWF0aXZpdHkuCitXaGVuIHR3byB0b2tlbnMgZGVjbGFyZWQgaW4gZGlmZmVyZW50IHByZWNlZGVuY2UgZGVjbGFyYXRpb25zIGFzc29jaWF0ZSwKK3RoZSBvbmUgZGVjbGFyZWQgbGF0ZXIgaGFzIHRoZSBoaWdoZXIgcHJlY2VkZW5jZSBhbmQgaXMgZ3JvdXBlZCBmaXJzdC4KK0BlbmQgaXRlbWl6ZQorCitGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlcmUgaXMgYSBjb25mdXNpbmcgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZQorYXJndW1lbnQgbGlzdHMgb2YgQGNvZGV7JXRva2VufSBhbmQgcHJlY2VkZW5jZSBkZWNsYXJhdGlvbnMuCitPbmx5IGEgQGNvZGV7JXRva2VufSBjYW4gYXNzb2NpYXRlIGEgbGl0ZXJhbCBzdHJpbmcgd2l0aCBhIHRva2VuIHR5cGUgbmFtZS4KK0EgcHJlY2VkZW5jZSBkZWNsYXJhdGlvbiBhbHdheXMgaW50ZXJwcmV0cyBhIGxpdGVyYWwgc3RyaW5nIGFzIGEgcmVmZXJlbmNlIHRvIGEKK3NlcGFyYXRlIHRva2VuLgorRm9yIGV4YW1wbGU6CisKK0BleGFtcGxlCislbGVmdCAgT1IgIjw9IiAgICAgICAgIC8vIERvZXMgbm90IGRlY2xhcmUgYW4gYWxpYXMuCislbGVmdCAgT1IgMTM0ICI8PSIgMTM1IC8vIERlY2xhcmVzIDEzNCBmb3IgT1IgYW5kIDEzNSBmb3IgIjw9Ii4KK0BlbmQgZXhhbXBsZQorCitAbm9kZSBVbmlvbiBEZWNsCitAc3Vic2VjdGlvbiBUaGUgQ29sbGVjdGlvbiBvZiBWYWx1ZSBUeXBlcworQGNpbmRleCBkZWNsYXJpbmcgdmFsdWUgdHlwZXMKK0BjaW5kZXggdmFsdWUgdHlwZXMsIGRlY2xhcmluZworQGZpbmRleCAldW5pb24KKworVGhlIEBjb2RleyV1bmlvbn0gZGVjbGFyYXRpb24gc3BlY2lmaWVzIHRoZSBlbnRpcmUgY29sbGVjdGlvbiBvZgorcG9zc2libGUgZGF0YSB0eXBlcyBmb3Igc2VtYW50aWMgdmFsdWVzLiAgVGhlIGtleXdvcmQgQGNvZGV7JXVuaW9ufSBpcworZm9sbG93ZWQgYnkgYnJhY2VkIGNvZGUgY29udGFpbmluZyB0aGUgc2FtZSB0aGluZyB0aGF0IGdvZXMgaW5zaWRlIGEKK0Bjb2Rle3VuaW9ufSBpbiBDQC4KKworRm9yIGV4YW1wbGU6CisKK0BleGFtcGxlCitAZ3JvdXAKKyV1bmlvbiBAeworICBkb3VibGUgdmFsOworICBzeW1yZWMgKnRwdHI7CitAfQorQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorVGhpcyBzYXlzIHRoYXQgdGhlIHR3byBhbHRlcm5hdGl2ZSB0eXBlcyBhcmUgQGNvZGV7ZG91YmxlfSBhbmQgQGNvZGV7c3ltcmVjCisqfS4gIFRoZXkgYXJlIGdpdmVuIG5hbWVzIEBjb2Rle3ZhbH0gYW5kIEBjb2Rle3RwdHJ9OyB0aGVzZSBuYW1lcyBhcmUgdXNlZAoraW4gdGhlIEBjb2RleyV0b2tlbn0gYW5kIEBjb2RleyV0eXBlfSBkZWNsYXJhdGlvbnMgdG8gcGljayBvbmUgb2YgdGhlIHR5cGVzCitmb3IgYSB0ZXJtaW5hbCBvciBub250ZXJtaW5hbCBzeW1ib2wgKEBweHJlZntUeXBlIERlY2wsICxOb250ZXJtaW5hbCBTeW1ib2xzfSkuCisKK0FzIGFuIGV4dGVuc2lvbiB0byBQT1NJWCwgYSB0YWcgaXMgYWxsb3dlZCBhZnRlciB0aGUKK0Bjb2Rle3VuaW9ufS4gIEZvciBleGFtcGxlOgorCitAZXhhbXBsZQorQGdyb3VwCisldW5pb24gdmFsdWUgQHsKKyAgZG91YmxlIHZhbDsKKyAgc3ltcmVjICp0cHRyOworQH0KK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK3NwZWNpZmllcyB0aGUgdW5pb24gdGFnIEBjb2Rle3ZhbHVlfSwgc28gdGhlIGNvcnJlc3BvbmRpbmcgQyB0eXBlIGlzCitAY29kZXt1bmlvbiB2YWx1ZX0uICBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYSB0YWcsIGl0IGRlZmF1bHRzIHRvCitAY29kZXtZWVNUWVBFfS4KKworQXMgYW5vdGhlciBleHRlbnNpb24gdG8gUE9TSVgsIHlvdSBtYXkgc3BlY2lmeSBtdWx0aXBsZQorQGNvZGV7JXVuaW9ufSBkZWNsYXJhdGlvbnM7IHRoZWlyIGNvbnRlbnRzIGFyZSBjb25jYXRlbmF0ZWQuICBIb3dldmVyLAorb25seSB0aGUgZmlyc3QgQGNvZGV7JXVuaW9ufSBkZWNsYXJhdGlvbiBjYW4gc3BlY2lmeSBhIHRhZy4KKworTm90ZSB0aGF0LCB1bmxpa2UgbWFraW5nIGEgQGNvZGV7dW5pb259IGRlY2xhcmF0aW9uIGluIEMsIHlvdSBuZWVkIG5vdCB3cml0ZQorYSBzZW1pY29sb24gYWZ0ZXIgdGhlIGNsb3NpbmcgYnJhY2UuCisKK0luc3RlYWQgb2YgQGNvZGV7JXVuaW9ufSwgeW91IGNhbiBkZWZpbmUgYW5kIHVzZSB5b3VyIG93biB1bmlvbiB0eXBlCitAY29kZXtZWVNUWVBFfSBpZiB5b3VyIGdyYW1tYXIgY29udGFpbnMgYXQgbGVhc3Qgb25lCitAc2FtcHs8QHZhcnt0eXBlfT59IHRhZy4gIEZvciBleGFtcGxlLCB5b3UgY2FuIHB1dCB0aGUgZm9sbG93aW5nIGludG8KK2EgaGVhZGVyIGZpbGUgQGZpbGV7cGFyc2VyLmh9OgorCitAZXhhbXBsZQorQGdyb3VwCit1bmlvbiBZWVNUWVBFIEB7CisgIGRvdWJsZSB2YWw7CisgIHN5bXJlYyAqdHB0cjsKK0B9OwordHlwZWRlZiB1bmlvbiBZWVNUWVBFIFlZU1RZUEU7CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CithbmQgdGhlbiB5b3VyIGdyYW1tYXIgY2FuIHVzZSB0aGUgZm9sbG93aW5nCitpbnN0ZWFkIG9mIEBjb2RleyV1bmlvbn06CisKK0BleGFtcGxlCitAZ3JvdXAKKyVAeworI2luY2x1ZGUgInBhcnNlci5oIgorJUB9CisldHlwZSA8dmFsPiBleHByCisldG9rZW4gPHRwdHI+IElECitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworQG5vZGUgVHlwZSBEZWNsCitAc3Vic2VjdGlvbiBOb250ZXJtaW5hbCBTeW1ib2xzCitAY2luZGV4IGRlY2xhcmluZyB2YWx1ZSB0eXBlcywgbm9udGVybWluYWxzCitAY2luZGV4IHZhbHVlIHR5cGVzLCBub250ZXJtaW5hbHMsIGRlY2xhcmluZworQGZpbmRleCAldHlwZQorCitAbm9pbmRlbnQKK1doZW4geW91IHVzZSBAY29kZXsldW5pb259IHRvIHNwZWNpZnkgbXVsdGlwbGUgdmFsdWUgdHlwZXMsIHlvdSBtdXN0CitkZWNsYXJlIHRoZSB2YWx1ZSB0eXBlIG9mIGVhY2ggbm9udGVybWluYWwgc3ltYm9sIGZvciB3aGljaCB2YWx1ZXMgYXJlCit1c2VkLiAgVGhpcyBpcyBkb25lIHdpdGggYSBAY29kZXsldHlwZX0gZGVjbGFyYXRpb24sIGxpa2UgdGhpczoKKworQGV4YW1wbGUKKyV0eXBlIDxAdmFye3R5cGV9PiBAdmFye25vbnRlcm1pbmFsfUBkb3Rze30KK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK0hlcmUgQHZhcntub250ZXJtaW5hbH0gaXMgdGhlIG5hbWUgb2YgYSBub250ZXJtaW5hbCBzeW1ib2wsIGFuZAorQHZhcnt0eXBlfSBpcyB0aGUgbmFtZSBnaXZlbiBpbiB0aGUgQGNvZGV7JXVuaW9ufSB0byB0aGUgYWx0ZXJuYXRpdmUKK3RoYXQgeW91IHdhbnQgKEBweHJlZntVbmlvbiBEZWNsLCAsVGhlIENvbGxlY3Rpb24gb2YgVmFsdWUgVHlwZXN9KS4gIFlvdQorY2FuIGdpdmUgYW55IG51bWJlciBvZiBub250ZXJtaW5hbCBzeW1ib2xzIGluIHRoZSBzYW1lIEBjb2RleyV0eXBlfQorZGVjbGFyYXRpb24sIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSB2YWx1ZSB0eXBlLiAgVXNlIHNwYWNlcyB0byBzZXBhcmF0ZQordGhlIHN5bWJvbCBuYW1lcy4KKworWW91IGNhbiBhbHNvIGRlY2xhcmUgdGhlIHZhbHVlIHR5cGUgb2YgYSB0ZXJtaW5hbCBzeW1ib2wuICBUbyBkbyB0aGlzLAordXNlIHRoZSBzYW1lIEBjb2RlezxAdmFye3R5cGV9Pn0gY29uc3RydWN0aW9uIGluIGEgZGVjbGFyYXRpb24gZm9yIHRoZQordGVybWluYWwgc3ltYm9sLiAgQWxsIGtpbmRzIG9mIHRva2VuIGRlY2xhcmF0aW9ucyBhbGxvdworQGNvZGV7PEB2YXJ7dHlwZX0+fS4KKworQG5vZGUgSW5pdGlhbCBBY3Rpb24gRGVjbAorQHN1YnNlY3Rpb24gUGVyZm9ybWluZyBBY3Rpb25zIGJlZm9yZSBQYXJzaW5nCitAZmluZGV4ICVpbml0aWFsLWFjdGlvbgorCitTb21ldGltZXMgeW91ciBwYXJzZXIgbmVlZHMgdG8gcGVyZm9ybSBzb21lIGluaXRpYWxpemF0aW9ucyBiZWZvcmUKK3BhcnNpbmcuICBUaGUgQGNvZGV7JWluaXRpYWwtYWN0aW9ufSBkaXJlY3RpdmUgYWxsb3dzIGZvciBzdWNoIGFyYml0cmFyeQorY29kZS4KKworQGRlZmZuIHtEaXJlY3RpdmV9ICVpbml0aWFsLWFjdGlvbiBAeyBAdmFye2NvZGV9IEB9CitAZmluZGV4ICVpbml0aWFsLWFjdGlvbgorRGVjbGFyZSB0aGF0IHRoZSBicmFjZWQgQHZhcntjb2RlfSBtdXN0IGJlIGludm9rZWQgYmVmb3JlIHBhcnNpbmcgZWFjaCB0aW1lCitAY29kZXt5eXBhcnNlfSBpcyBjYWxsZWQuICBUaGUgQHZhcntjb2RlfSBtYXkgdXNlIEBjb2RleyQkfSAob3IKK0Bjb2RleyQ8QHZhcnt0YWd9PiR9KSBhbmQgQGNvZGV7QEAkfSAtLS0gaW5pdGlhbCB2YWx1ZSBhbmQgbG9jYXRpb24gb2YgdGhlCitsb29rYWhlYWQgLS0tIGFuZCB0aGUgQGNvZGV7JXBhcnNlLXBhcmFtfS4KK0BlbmQgZGVmZm4KKworRm9yIGluc3RhbmNlLCBpZiB5b3VyIGxvY2F0aW9ucyB1c2UgYSBmaWxlIG5hbWUsIHlvdSBtYXkgdXNlCisKK0BleGFtcGxlCislcGFyc2UtcGFyYW0gQHsgY2hhciBjb25zdCAqZmlsZV9uYW1lIEB9OworJWluaXRpYWwtYWN0aW9uCitAeworICBAQCQuaW5pdGlhbGl6ZSAoZmlsZV9uYW1lKTsKK0B9OworQGVuZCBleGFtcGxlCisKKworQG5vZGUgRGVzdHJ1Y3RvciBEZWNsCitAc3Vic2VjdGlvbiBGcmVlaW5nIERpc2NhcmRlZCBTeW1ib2xzCitAY2luZGV4IGZyZWVpbmcgZGlzY2FyZGVkIHN5bWJvbHMKK0BmaW5kZXggJWRlc3RydWN0b3IKK0BmaW5kZXggPCo+CitAZmluZGV4IDw+CitEdXJpbmcgZXJyb3IgcmVjb3ZlcnkgKEBweHJlZntFcnJvciBSZWNvdmVyeX0pLCBzeW1ib2xzIGFscmVhZHkgcHVzaGVkCitvbiB0aGUgc3RhY2sgYW5kIHRva2VucyBjb21pbmcgZnJvbSB0aGUgcmVzdCBvZiB0aGUgZmlsZSBhcmUgZGlzY2FyZGVkCit1bnRpbCB0aGUgcGFyc2VyIGZhbGxzIG9uIGl0cyBmZWV0LiAgSWYgdGhlIHBhcnNlciBydW5zIG91dCBvZiBtZW1vcnksCitvciBpZiBpdCByZXR1cm5zIHZpYSBAY29kZXtZWUFCT1JUfSBvciBAY29kZXtZWUFDQ0VQVH0sIGFsbCB0aGUKK3N5bWJvbHMgb24gdGhlIHN0YWNrIG11c3QgYmUgZGlzY2FyZGVkLiAgRXZlbiBpZiB0aGUgcGFyc2VyIHN1Y2NlZWRzLCBpdAorbXVzdCBkaXNjYXJkIHRoZSBzdGFydCBzeW1ib2wuCisKK1doZW4gZGlzY2FyZGVkIHN5bWJvbHMgY29udmV5IGhlYXAgYmFzZWQgaW5mb3JtYXRpb24sIHRoaXMgbWVtb3J5IGlzCitsb3N0LiAgV2hpbGUgdGhpcyBiZWhhdmlvciBjYW4gYmUgdG9sZXJhYmxlIGZvciBiYXRjaCBwYXJzZXJzLCBzdWNoIGFzCitpbiB0cmFkaXRpb25hbCBjb21waWxlcnMsIGl0IGlzIHVuYWNjZXB0YWJsZSBmb3IgcHJvZ3JhbXMgbGlrZSBzaGVsbHMgb3IKK3Byb3RvY29sIGltcGxlbWVudGF0aW9ucyB0aGF0IG1heSBwYXJzZSBhbmQgZXhlY3V0ZSBpbmRlZmluaXRlbHkuCisKK1RoZSBAY29kZXslZGVzdHJ1Y3Rvcn0gZGlyZWN0aXZlIGRlZmluZXMgY29kZSB0aGF0IGlzIGNhbGxlZCB3aGVuIGEKK3N5bWJvbCBpcyBhdXRvbWF0aWNhbGx5IGRpc2NhcmRlZC4KKworQGRlZmZuIHtEaXJlY3RpdmV9ICVkZXN0cnVjdG9yIEB7IEB2YXJ7Y29kZX0gQH0gQHZhcntzeW1ib2xzfQorQGZpbmRleCAlZGVzdHJ1Y3RvcgorSW52b2tlIHRoZSBicmFjZWQgQHZhcntjb2RlfSB3aGVuZXZlciB0aGUgcGFyc2VyIGRpc2NhcmRzIG9uZSBvZiB0aGUKK0B2YXJ7c3ltYm9sc30uICBXaXRoaW4gQHZhcntjb2RlfSwgQGNvZGV7JCR9IChvciBAY29kZXskPEB2YXJ7dGFnfT4kfSkKK2Rlc2lnbmF0ZXMgdGhlIHNlbWFudGljIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGlzY2FyZGVkIHN5bWJvbCwgYW5kCitAY29kZXtAQCR9IGRlc2lnbmF0ZXMgaXRzIGxvY2F0aW9uLiAgVGhlIGFkZGl0aW9uYWwgcGFyc2VyIHBhcmFtZXRlcnMgYXJlCithbHNvIGF2YWlsYWJsZSAoQHB4cmVme1BhcnNlciBGdW5jdGlvbiwgLCBUaGUgUGFyc2VyIEZ1bmN0aW9uCitAY29kZXt5eXBhcnNlfX0pLgorCitXaGVuIGEgc3ltYm9sIGlzIGxpc3RlZCBhbW9uZyBAdmFye3N5bWJvbHN9LCBpdHMgQGNvZGV7JWRlc3RydWN0b3J9IGlzIGNhbGxlZCBhCitwZXItc3ltYm9sIEBjb2RleyVkZXN0cnVjdG9yfS4KK1lvdSBtYXkgYWxzbyBkZWZpbmUgYSBwZXItdHlwZSBAY29kZXslZGVzdHJ1Y3Rvcn0gYnkgbGlzdGluZyBhIHNlbWFudGljIHR5cGUKK3RhZyBhbW9uZyBAdmFye3N5bWJvbHN9LgorSW4gdGhhdCBjYXNlLCB0aGUgcGFyc2VyIHdpbGwgaW52b2tlIHRoaXMgQHZhcntjb2RlfSB3aGVuZXZlciBpdCBkaXNjYXJkcyBhbnkKK2dyYW1tYXIgc3ltYm9sIHRoYXQgaGFzIHRoYXQgc2VtYW50aWMgdHlwZSB0YWcgdW5sZXNzIHRoYXQgc3ltYm9sIGhhcyBpdHMgb3duCitwZXItc3ltYm9sIEBjb2RleyVkZXN0cnVjdG9yfS4KKworRmluYWxseSwgeW91IGNhbiBkZWZpbmUgdHdvIGRpZmZlcmVudCBraW5kcyBvZiBkZWZhdWx0IEBjb2RleyVkZXN0cnVjdG9yfXMuCisoVGhlc2UgZGVmYXVsdCBmb3JtcyBhcmUgZXhwZXJpbWVudGFsLgorTW9yZSB1c2VyIGZlZWRiYWNrIHdpbGwgaGVscCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGV5IHNob3VsZCBiZWNvbWUgcGVybWFuZW50CitmZWF0dXJlcy4pCitZb3UgY2FuIHBsYWNlIGVhY2ggb2YgQGNvZGV7PCo+fSBhbmQgQGNvZGV7PD59IGluIHRoZSBAdmFye3N5bWJvbHN9IGxpc3Qgb2YKK2V4YWN0bHkgb25lIEBjb2RleyVkZXN0cnVjdG9yfSBkZWNsYXJhdGlvbiBpbiB5b3VyIGdyYW1tYXIgZmlsZS4KK1RoZSBwYXJzZXIgd2lsbCBpbnZva2UgdGhlIEB2YXJ7Y29kZX0gYXNzb2NpYXRlZCB3aXRoIG9uZSBvZiB0aGVzZSB3aGVuZXZlciBpdAorZGlzY2FyZHMgYW55IHVzZXItZGVmaW5lZCBncmFtbWFyIHN5bWJvbCB0aGF0IGhhcyBubyBwZXItc3ltYm9sIGFuZCBubyBwZXItdHlwZQorQGNvZGV7JWRlc3RydWN0b3J9LgorVGhlIHBhcnNlciB1c2VzIHRoZSBAdmFye2NvZGV9IGZvciBAY29kZXs8Kj59IGluIHRoZSBjYXNlIG9mIHN1Y2ggYSBncmFtbWFyCitzeW1ib2wgZm9yIHdoaWNoIHlvdSBoYXZlIGZvcm1hbGx5IGRlY2xhcmVkIGEgc2VtYW50aWMgdHlwZSB0YWcgKEBjb2RleyV0eXBlfQorY291bnRzIGFzIHN1Y2ggYSBkZWNsYXJhdGlvbiwgYnV0IEBjb2RleyQ8dGFnPiR9IGRvZXMgbm90KS4KK1RoZSBwYXJzZXIgdXNlcyB0aGUgQHZhcntjb2RlfSBmb3IgQGNvZGV7PD59IGluIHRoZSBjYXNlIG9mIHN1Y2ggYSBncmFtbWFyCitzeW1ib2wgdGhhdCBoYXMgbm8gZGVjbGFyZWQgc2VtYW50aWMgdHlwZSB0YWcuCitAZW5kIGRlZmZuCisKK0Bub2luZGVudAorRm9yIGV4YW1wbGU6CisKK0BleGFtcGxlCisldW5pb24gQHsgY2hhciAqc3RyaW5nOyBAfQorJXRva2VuIDxzdHJpbmc+IFNUUklORzEKKyV0b2tlbiA8c3RyaW5nPiBTVFJJTkcyCisldHlwZSAgPHN0cmluZz4gc3RyaW5nMQorJXR5cGUgIDxzdHJpbmc+IHN0cmluZzIKKyV1bmlvbiBAeyBjaGFyIGNoYXJhY3RlcjsgQH0KKyV0b2tlbiA8Y2hhcmFjdGVyPiBDSFIKKyV0eXBlICA8Y2hhcmFjdGVyPiBjaHIKKyV0b2tlbiBUQUdMRVNTCisKKyVkZXN0cnVjdG9yIEB7IEB9IDxjaGFyYWN0ZXI+CislZGVzdHJ1Y3RvciBAeyBmcmVlICgkJCk7IEB9IDwqPgorJWRlc3RydWN0b3IgQHsgZnJlZSAoJCQpOyBwcmludGYgKCIlZCIsIEBAJC5maXJzdF9saW5lKTsgQH0gU1RSSU5HMSBzdHJpbmcxCislZGVzdHJ1Y3RvciBAeyBwcmludGYgKCJEaXNjYXJkaW5nIHRhZ2xlc3Mgc3ltYm9sLlxuIik7IEB9IDw+CitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitndWFyYW50ZWVzIHRoYXQsIHdoZW4gdGhlIHBhcnNlciBkaXNjYXJkcyBhbnkgdXNlci1kZWZpbmVkIHN5bWJvbCB0aGF0IGhhcyBhCitzZW1hbnRpYyB0eXBlIHRhZyBvdGhlciB0aGFuIEBjb2RlezxjaGFyYWN0ZXI+fSwgaXQgcGFzc2VzIGl0cyBzZW1hbnRpYyB2YWx1ZQordG8gQGNvZGV7ZnJlZX0gYnkgZGVmYXVsdC4KK0hvd2V2ZXIsIHdoZW4gdGhlIHBhcnNlciBkaXNjYXJkcyBhIEBjb2Rle1NUUklORzF9IG9yIGEgQGNvZGV7c3RyaW5nMX0sIGl0IGFsc28KK3ByaW50cyBpdHMgbGluZSBudW1iZXIgdG8gQGNvZGV7c3Rkb3V0fS4KK0l0IHBlcmZvcm1zIG9ubHkgdGhlIHNlY29uZCBAY29kZXslZGVzdHJ1Y3Rvcn0gaW4gdGhpcyBjYXNlLCBzbyBpdCBpbnZva2VzCitAY29kZXtmcmVlfSBvbmx5IG9uY2UuCitGaW5hbGx5LCB0aGUgcGFyc2VyIG1lcmVseSBwcmludHMgYSBtZXNzYWdlIHdoZW5ldmVyIGl0IGRpc2NhcmRzIGFueSBzeW1ib2wsCitzdWNoIGFzIEBjb2Rle1RBR0xFU1N9LCB0aGF0IGhhcyBubyBzZW1hbnRpYyB0eXBlIHRhZy4KKworQSBCaXNvbi1nZW5lcmF0ZWQgcGFyc2VyIGludm9rZXMgdGhlIGRlZmF1bHQgQGNvZGV7JWRlc3RydWN0b3J9cyBvbmx5IGZvcgordXNlci1kZWZpbmVkIGFzIG9wcG9zZWQgdG8gQmlzb24tZGVmaW5lZCBzeW1ib2xzLgorRm9yIGV4YW1wbGUsIHRoZSBwYXJzZXIgd2lsbCBub3QgaW52b2tlIGVpdGhlciBraW5kIG9mIGRlZmF1bHQKK0Bjb2RleyVkZXN0cnVjdG9yfSBmb3IgdGhlIHNwZWNpYWwgQmlzb24tZGVmaW5lZCBzeW1ib2xzIEBjb2RleyRhY2NlcHR9LAorQGNvZGV7JHVuZGVmaW5lZH0sIG9yIEBjb2RleyRlbmR9IChAcHhyZWZ7VGFibGUgb2YgU3ltYm9scywgLEJpc29uIFN5bWJvbHN9KSwKK25vbmUgb2Ygd2hpY2ggeW91IGNhbiByZWZlcmVuY2UgaW4geW91ciBncmFtbWFyLgorSXQgYWxzbyB3aWxsIG5vdCBpbnZva2UgZWl0aGVyIGZvciB0aGUgQGNvZGV7ZXJyb3J9IHRva2VuIChAcHhyZWZ7VGFibGUgb2YKK1N5bWJvbHMsICxlcnJvcn0pLCB3aGljaCBpcyBhbHdheXMgZGVmaW5lZCBieSBCaXNvbiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgeW91CityZWZlcmVuY2UgaXQgaW4geW91ciBncmFtbWFyLgorSG93ZXZlciwgaXQgbWF5IGludm9rZSBvbmUgb2YgdGhlbSBmb3IgdGhlIGVuZCB0b2tlbiAodG9rZW4gMCkgaWYgeW91CityZWRlZmluZSBpdCBmcm9tIEBjb2RleyRlbmR9IHRvLCBmb3IgZXhhbXBsZSwgQGNvZGV7RU5EfToKKworQGV4YW1wbGUKKyV0b2tlbiBFTkQgMAorQGVuZCBleGFtcGxlCisKK0BjaW5kZXggYWN0aW9ucyBpbiBtaWQtcnVsZQorQGNpbmRleCBtaWQtcnVsZSBhY3Rpb25zCitGaW5hbGx5LCBCaXNvbiB3aWxsIG5ldmVyIGludm9rZSBhIEBjb2RleyVkZXN0cnVjdG9yfSBmb3IgYW4gdW5yZWZlcmVuY2VkCittaWQtcnVsZSBzZW1hbnRpYyB2YWx1ZSAoQHB4cmVme01pZC1SdWxlIEFjdGlvbnMsLEFjdGlvbnMgaW4gTWlkLVJ1bGV9KS4KK1RoYXQgaXMsIEJpc29uIGRvZXMgbm90IGNvbnNpZGVyIGEgbWlkLXJ1bGUgdG8gaGF2ZSBhIHNlbWFudGljIHZhbHVlIGlmIHlvdQorZG8gbm90IHJlZmVyZW5jZSBAY29kZXskJH0gaW4gdGhlIG1pZC1ydWxlJ3MgYWN0aW9uIG9yIEBjb2RleyRAdmFye259fQorKHdoZXJlIEB2YXJ7bn0gaXMgdGhlIHJpZ2h0LWhhbmQgc2lkZSBzeW1ib2wgcG9zaXRpb24gb2YgdGhlIG1pZC1ydWxlKSBpbgorYW55IGxhdGVyIGFjdGlvbiBpbiB0aGF0IHJ1bGUuICBIb3dldmVyLCBpZiB5b3UgZG8gcmVmZXJlbmNlIGVpdGhlciwgdGhlCitCaXNvbi1nZW5lcmF0ZWQgcGFyc2VyIHdpbGwgaW52b2tlIHRoZSBAY29kZXs8Pn0gQGNvZGV7JWRlc3RydWN0b3J9IHdoZW5ldmVyCitpdCBkaXNjYXJkcyB0aGUgbWlkLXJ1bGUgc3ltYm9sLgorCitAaWdub3JlCitAbm9pbmRlbnQKK0luIHRoZSBmdXR1cmUsIGl0IG1heSBiZSBwb3NzaWJsZSB0byByZWRlZmluZSB0aGUgQGNvZGV7ZXJyb3J9IHRva2VuIGFzIGEKK25vbnRlcm1pbmFsIHRoYXQgY2FwdHVyZXMgdGhlIGRpc2NhcmRlZCBzeW1ib2xzLgorSW4gdGhhdCBjYXNlLCB0aGUgcGFyc2VyIHdpbGwgaW52b2tlIHRoZSBkZWZhdWx0IGRlc3RydWN0b3IgZm9yIGl0IGFzIHdlbGwuCitAZW5kIGlnbm9yZQorCitAc3AgMQorCitAY2luZGV4IGRpc2NhcmRlZCBzeW1ib2xzCitAZGZue0Rpc2NhcmRlZCBzeW1ib2xzfSBhcmUgdGhlIGZvbGxvd2luZzoKKworQGl0ZW1pemUKK0BpdGVtCitzdGFja2VkIHN5bWJvbHMgcG9wcGVkIGR1cmluZyB0aGUgZmlyc3QgcGhhc2Ugb2YgZXJyb3IgcmVjb3ZlcnksCitAaXRlbQoraW5jb21pbmcgdGVybWluYWxzIGR1cmluZyB0aGUgc2Vjb25kIHBoYXNlIG9mIGVycm9yIHJlY292ZXJ5LAorQGl0ZW0KK3RoZSBjdXJyZW50IGxvb2thaGVhZCBhbmQgdGhlIGVudGlyZSBzdGFjayAoZXhjZXB0IHRoZSBjdXJyZW50CityaWdodC1oYW5kIHNpZGUgc3ltYm9scykgd2hlbiB0aGUgcGFyc2VyIHJldHVybnMgaW1tZWRpYXRlbHksIGFuZAorQGl0ZW0KK3RoZSBjdXJyZW50IGxvb2thaGVhZCBhbmQgdGhlIGVudGlyZSBzdGFjayAoaW5jbHVkaW5nIHRoZSBjdXJyZW50IHJpZ2h0LWhhbmQKK3NpZGUgc3ltYm9scykgd2hlbiB0aGUgQysrIHBhcnNlciAoQGZpbGV7bGFscjEuY2N9KSBjYXRjaGVzIGFuIGV4Y2VwdGlvbiBpbgorQGNvZGV7cGFyc2V9LAorQGl0ZW0KK3RoZSBzdGFydCBzeW1ib2wsIHdoZW4gdGhlIHBhcnNlciBzdWNjZWVkcy4KK0BlbmQgaXRlbWl6ZQorCitUaGUgcGFyc2VyIGNhbiBAZGZue3JldHVybiBpbW1lZGlhdGVseX0gYmVjYXVzZSBvZiBhbiBleHBsaWNpdCBjYWxsIHRvCitAY29kZXtZWUFCT1JUfSBvciBAY29kZXtZWUFDQ0VQVH0sIG9yIGZhaWxlZCBlcnJvciByZWNvdmVyeSwgb3IgbWVtb3J5CitleGhhdXN0aW9uLgorCitSaWdodC1oYW5kIHNpZGUgc3ltYm9scyBvZiBhIHJ1bGUgdGhhdCBleHBsaWNpdGx5IHRyaWdnZXJzIGEgc3ludGF4CitlcnJvciB2aWEgQGNvZGV7WVlFUlJPUn0gYXJlIG5vdCBkaXNjYXJkZWQgYXV0b21hdGljYWxseS4gIEFzIGEgcnVsZQorb2YgdGh1bWIsIGRlc3RydWN0b3JzIGFyZSBpbnZva2VkIG9ubHkgd2hlbiB1c2VyIGFjdGlvbnMgY2Fubm90IG1hbmFnZQordGhlIG1lbW9yeS4KKworQG5vZGUgUHJpbnRlciBEZWNsCitAc3Vic2VjdGlvbiBQcmludGluZyBTZW1hbnRpYyBWYWx1ZXMKK0BjaW5kZXggcHJpbnRpbmcgc2VtYW50aWMgdmFsdWVzCitAZmluZGV4ICVwcmludGVyCitAZmluZGV4IDwqPgorQGZpbmRleCA8PgorV2hlbiBydW4tdGltZSB0cmFjZXMgYXJlIGVuYWJsZWQgKEBweHJlZntUcmFjaW5nLCAsVHJhY2luZyBZb3VyIFBhcnNlcn0pLAordGhlIHBhcnNlciByZXBvcnRzIGl0cyBhY3Rpb25zLCBzdWNoIGFzIHJlZHVjdGlvbnMuICBXaGVuIGEgc3ltYm9sIGludm9sdmVkCitpbiBhbiBhY3Rpb24gaXMgcmVwb3J0ZWQsIG9ubHkgaXRzIGtpbmQgaXMgZGlzcGxheWVkLCBhcyB0aGUgcGFyc2VyIGNhbm5vdAora25vdyBob3cgc2VtYW50aWMgdmFsdWVzIHNob3VsZCBiZSBmb3JtYXR0ZWQuCisKK1RoZSBAY29kZXslcHJpbnRlcn0gZGlyZWN0aXZlIGRlZmluZXMgY29kZSB0aGF0IGlzIGNhbGxlZCB3aGVuIGEgc3ltYm9sIGlzCityZXBvcnRlZC4gIEl0cyBzeW50YXggaXMgdGhlIHNhbWUgYXMgQGNvZGV7JWRlc3RydWN0b3J9IChAcHhyZWZ7RGVzdHJ1Y3RvcgorRGVjbCwgLCBGcmVlaW5nIERpc2NhcmRlZCBTeW1ib2xzfSkuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSAlcHJpbnRlciBAeyBAdmFye2NvZGV9IEB9IEB2YXJ7c3ltYm9sc30KK0BmaW5kZXggJXByaW50ZXIKK0B2aW5kZXggeXlvdXRwdXQKK0BjIFRoaXMgaXMgdGhlIHNhbWUgdGV4dCBhcyBmb3IgJWRlc3RydWN0b3IuCitJbnZva2UgdGhlIGJyYWNlZCBAdmFye2NvZGV9IHdoZW5ldmVyIHRoZSBwYXJzZXIgZGlzcGxheXMgb25lIG9mIHRoZQorQHZhcntzeW1ib2xzfS4gIFdpdGhpbiBAdmFye2NvZGV9LCBAY29kZXt5eW91dHB1dH0gZGVub3RlcyB0aGUgb3V0cHV0IHN0cmVhbQorKGEgQGNvZGV7RklMRSp9IGluIEMsIGFuZCBhbiBAY29kZXtzdGQ6Om9zdHJlYW0mfSBpbiBDKyspLCBAY29kZXskJH0gKG9yCitAY29kZXskPEB2YXJ7dGFnfT4kfSkgZGVzaWduYXRlcyB0aGUgc2VtYW50aWMgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZQorc3ltYm9sLCBhbmQgQGNvZGV7QEAkfSBpdHMgbG9jYXRpb24uICBUaGUgYWRkaXRpb25hbCBwYXJzZXIgcGFyYW1ldGVycyBhcmUKK2Fsc28gYXZhaWxhYmxlIChAcHhyZWZ7UGFyc2VyIEZ1bmN0aW9uLCAsIFRoZSBQYXJzZXIgRnVuY3Rpb24KK0Bjb2Rle3l5cGFyc2V9fSkuCisKK1RoZSBAdmFye3N5bWJvbHN9IGFyZSBkZWZpbmVkIGFzIGZvciBAY29kZXslZGVzdHJ1Y3Rvcn0gKEBweHJlZntEZXN0cnVjdG9yCitEZWNsLCAsIEZyZWVpbmcgRGlzY2FyZGVkIFN5bWJvbHN9Lik6IHRoZXkgY2FuIGJlIHBlci10eXBlIChlLmcuLAorQHNhbXB7PGl2YWw+fSksIHBlci1zeW1ib2wgKGUuZy4sIEBzYW1we2V4cH0sIEBzYW1we05VTX0sIEBzYW1weyJmbG9hdCJ9KSwKK3R5cGVkIHBlci1kZWZhdWx0IChpLmUuLCBAc2FtcHs8Kj59LCBvciB1bnR5cGVkIHBlci1kZWZhdWx0IChpLmUuLAorQHNhbXB7PD59KS4KK0BlbmQgZGVmZm4KKworQG5vaW5kZW50CitGb3IgZXhhbXBsZToKKworQGV4YW1wbGUKKyV1bmlvbiBAeyBjaGFyICpzdHJpbmc7IEB9CisldG9rZW4gPHN0cmluZz4gU1RSSU5HMQorJXRva2VuIDxzdHJpbmc+IFNUUklORzIKKyV0eXBlICA8c3RyaW5nPiBzdHJpbmcxCisldHlwZSAgPHN0cmluZz4gc3RyaW5nMgorJXVuaW9uIEB7IGNoYXIgY2hhcmFjdGVyOyBAfQorJXRva2VuIDxjaGFyYWN0ZXI+IENIUgorJXR5cGUgIDxjaGFyYWN0ZXI+IGNocgorJXRva2VuIFRBR0xFU1MKKworJXByaW50ZXIgQHsgZnByaW50ZiAoeXlvdXRwdXQsICInJWMnIiwgJCQpOyBAfSA8Y2hhcmFjdGVyPgorJXByaW50ZXIgQHsgZnByaW50ZiAoeXlvdXRwdXQsICImJXAiLCAkJCk7IEB9IDwqPgorJXByaW50ZXIgQHsgZnByaW50ZiAoeXlvdXRwdXQsICJcIiVzXCIiLCAkJCk7IEB9IFNUUklORzEgc3RyaW5nMQorJXByaW50ZXIgQHsgZnByaW50ZiAoeXlvdXRwdXQsICI8PiIpOyBAfSA8PgorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorZ3VhcmFudGVlcyB0aGF0LCB3aGVuIHRoZSBwYXJzZXIgcHJpbnQgYW55IHN5bWJvbCB0aGF0IGhhcyBhIHNlbWFudGljIHR5cGUKK3RhZyBvdGhlciB0aGFuIEBjb2RlezxjaGFyYWN0ZXI+fSwgaXQgZGlzcGxheSB0aGUgYWRkcmVzcyBvZiB0aGUgc2VtYW50aWMKK3ZhbHVlIGJ5IGRlZmF1bHQuICBIb3dldmVyLCB3aGVuIHRoZSBwYXJzZXIgZGlzcGxheXMgYSBAY29kZXtTVFJJTkcxfSBvciBhCitAY29kZXtzdHJpbmcxfSwgaXQgZm9ybWF0cyBpdCBhcyBhIHN0cmluZyBpbiBkb3VibGUgcXVvdGVzLiAgSXQgcGVyZm9ybXMKK29ubHkgdGhlIHNlY29uZCBAY29kZXslcHJpbnRlcn0gaW4gdGhpcyBjYXNlLCBzbyBpdCBwcmludHMgb25seSBvbmNlLgorRmluYWxseSwgdGhlIHBhcnNlciBwcmludCBAc2FtcHs8Pn0gZm9yIGFueSBzeW1ib2wsIHN1Y2ggYXMgQGNvZGV7VEFHTEVTU30sCit0aGF0IGhhcyBubyBzZW1hbnRpYyB0eXBlIHRhZy4gIFNlZSBhbHNvCisKKworQG5vZGUgRXhwZWN0IERlY2wKK0BzdWJzZWN0aW9uIFN1cHByZXNzaW5nIENvbmZsaWN0IFdhcm5pbmdzCitAY2luZGV4IHN1cHByZXNzaW5nIGNvbmZsaWN0IHdhcm5pbmdzCitAY2luZGV4IHByZXZlbnRpbmcgd2FybmluZ3MgYWJvdXQgY29uZmxpY3RzCitAY2luZGV4IHdhcm5pbmdzLCBwcmV2ZW50aW5nCitAY2luZGV4IGNvbmZsaWN0cywgc3VwcHJlc3Npbmcgd2FybmluZ3Mgb2YKK0BmaW5kZXggJWV4cGVjdAorQGZpbmRleCAlZXhwZWN0LXJyCisKK0Jpc29uIG5vcm1hbGx5IHdhcm5zIGlmIHRoZXJlIGFyZSBhbnkgY29uZmxpY3RzIGluIHRoZSBncmFtbWFyCisoQHB4cmVme1NoaWZ0L1JlZHVjZSwgLFNoaWZ0L1JlZHVjZSBDb25mbGljdHN9KSwgYnV0IG1vc3QgcmVhbCBncmFtbWFycworaGF2ZSBoYXJtbGVzcyBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIHdoaWNoIGFyZSByZXNvbHZlZCBpbiBhIHByZWRpY3RhYmxlCit3YXkgYW5kIHdvdWxkIGJlIGRpZmZpY3VsdCB0byBlbGltaW5hdGUuICBJdCBpcyBkZXNpcmFibGUgdG8gc3VwcHJlc3MKK3RoZSB3YXJuaW5nIGFib3V0IHRoZXNlIGNvbmZsaWN0cyB1bmxlc3MgdGhlIG51bWJlciBvZiBjb25mbGljdHMKK2NoYW5nZXMuICBZb3UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgQGNvZGV7JWV4cGVjdH0gZGVjbGFyYXRpb24uCisKK1RoZSBkZWNsYXJhdGlvbiBsb29rcyBsaWtlIHRoaXM6CisKK0BleGFtcGxlCislZXhwZWN0IEB2YXJ7bn0KK0BlbmQgZXhhbXBsZQorCitIZXJlIEB2YXJ7bn0gaXMgYSBkZWNpbWFsIGludGVnZXIuICBUaGUgZGVjbGFyYXRpb24gc2F5cyB0aGVyZSBzaG91bGQKK2JlIEB2YXJ7bn0gc2hpZnQvcmVkdWNlIGNvbmZsaWN0cyBhbmQgbm8gcmVkdWNlL3JlZHVjZSBjb25mbGljdHMuCitCaXNvbiByZXBvcnRzIGFuIGVycm9yIGlmIHRoZSBudW1iZXIgb2Ygc2hpZnQvcmVkdWNlIGNvbmZsaWN0cyBkaWZmZXJzCitmcm9tIEB2YXJ7bn0sIG9yIGlmIHRoZXJlIGFyZSBhbnkgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMuCisKK0ZvciBkZXRlcm1pbmlzdGljIHBhcnNlcnMsIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3RzIGFyZSBtb3JlCitzZXJpb3VzLCBhbmQgc2hvdWxkIGJlIGVsaW1pbmF0ZWQgZW50aXJlbHkuICBCaXNvbiB3aWxsIGFsd2F5cyByZXBvcnQKK3JlZHVjZS9yZWR1Y2UgY29uZmxpY3RzIGZvciB0aGVzZSBwYXJzZXJzLiAgV2l0aCBHTFIKK3BhcnNlcnMsIGhvd2V2ZXIsIGJvdGgga2luZHMgb2YgY29uZmxpY3RzIGFyZSByb3V0aW5lOyBvdGhlcndpc2UsCit0aGVyZSB3b3VsZCBiZSBubyBuZWVkIHRvIHVzZSBHTFIgcGFyc2luZy4gIFRoZXJlZm9yZSwgaXQgaXMKK2Fsc28gcG9zc2libGUgdG8gc3BlY2lmeSBhbiBleHBlY3RlZCBudW1iZXIgb2YgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMKK2luIEdMUiBwYXJzZXJzLCB1c2luZyB0aGUgZGVjbGFyYXRpb246CisKK0BleGFtcGxlCislZXhwZWN0LXJyIEB2YXJ7bn0KK0BlbmQgZXhhbXBsZQorCitJbiBnZW5lcmFsLCB1c2luZyBAY29kZXslZXhwZWN0fSBpbnZvbHZlcyB0aGVzZSBzdGVwczoKKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0KK0NvbXBpbGUgeW91ciBncmFtbWFyIHdpdGhvdXQgQGNvZGV7JWV4cGVjdH0uICBVc2UgdGhlIEBzYW1wey12fSBvcHRpb24KK3RvIGdldCBhIHZlcmJvc2UgbGlzdCBvZiB3aGVyZSB0aGUgY29uZmxpY3RzIG9jY3VyLiAgQmlzb24gd2lsbCBhbHNvCitwcmludCB0aGUgbnVtYmVyIG9mIGNvbmZsaWN0cy4KKworQGl0ZW0KK0NoZWNrIGVhY2ggb2YgdGhlIGNvbmZsaWN0cyB0byBtYWtlIHN1cmUgdGhhdCBCaXNvbidzIGRlZmF1bHQKK3Jlc29sdXRpb24gaXMgd2hhdCB5b3UgcmVhbGx5IHdhbnQuICBJZiBub3QsIHJld3JpdGUgdGhlIGdyYW1tYXIgYW5kCitnbyBiYWNrIHRvIHRoZSBiZWdpbm5pbmcuCisKK0BpdGVtCitBZGQgYW4gQGNvZGV7JWV4cGVjdH0gZGVjbGFyYXRpb24sIGNvcHlpbmcgdGhlIG51bWJlciBAdmFye259IGZyb20gdGhlCitudW1iZXIgd2hpY2ggQmlzb24gcHJpbnRlZC4gIFdpdGggR0xSIHBhcnNlcnMsIGFkZCBhbgorQGNvZGV7JWV4cGVjdC1ycn0gZGVjbGFyYXRpb24gYXMgd2VsbC4KK0BlbmQgaXRlbWl6ZQorCitOb3cgQmlzb24gd2lsbCByZXBvcnQgYW4gZXJyb3IgaWYgeW91IGludHJvZHVjZSBhbiB1bmV4cGVjdGVkIGNvbmZsaWN0LAorYnV0IHdpbGwga2VlcCBzaWxlbnQgb3RoZXJ3aXNlLgorCitAbm9kZSBTdGFydCBEZWNsCitAc3Vic2VjdGlvbiBUaGUgU3RhcnQtU3ltYm9sCitAY2luZGV4IGRlY2xhcmluZyB0aGUgc3RhcnQgc3ltYm9sCitAY2luZGV4IHN0YXJ0IHN5bWJvbCwgZGVjbGFyaW5nCitAY2luZGV4IGRlZmF1bHQgc3RhcnQgc3ltYm9sCitAZmluZGV4ICVzdGFydAorCitCaXNvbiBhc3N1bWVzIGJ5IGRlZmF1bHQgdGhhdCB0aGUgc3RhcnQgc3ltYm9sIGZvciB0aGUgZ3JhbW1hciBpcyB0aGUgZmlyc3QKK25vbnRlcm1pbmFsIHNwZWNpZmllZCBpbiB0aGUgZ3JhbW1hciBzcGVjaWZpY2F0aW9uIHNlY3Rpb24uICBUaGUgcHJvZ3JhbW1lcgorbWF5IG92ZXJyaWRlIHRoaXMgcmVzdHJpY3Rpb24gd2l0aCB0aGUgQGNvZGV7JXN0YXJ0fSBkZWNsYXJhdGlvbiBhcyBmb2xsb3dzOgorCitAZXhhbXBsZQorJXN0YXJ0IEB2YXJ7c3ltYm9sfQorQGVuZCBleGFtcGxlCisKK0Bub2RlIFB1cmUgRGVjbAorQHN1YnNlY3Rpb24gQSBQdXJlIChSZWVudHJhbnQpIFBhcnNlcgorQGNpbmRleCByZWVudHJhbnQgcGFyc2VyCitAY2luZGV4IHB1cmUgcGFyc2VyCitAZmluZGV4ICVkZWZpbmUgYXBpLnB1cmUKKworQSBAZGZue3JlZW50cmFudH0gcHJvZ3JhbSBpcyBvbmUgd2hpY2ggZG9lcyBub3QgYWx0ZXIgaW4gdGhlIGNvdXJzZSBvZgorZXhlY3V0aW9uOyBpbiBvdGhlciB3b3JkcywgaXQgY29uc2lzdHMgZW50aXJlbHkgb2YgQGRmbntwdXJlfSAocmVhZC1vbmx5KQorY29kZS4gIFJlZW50cmFuY3kgaXMgaW1wb3J0YW50IHdoZW5ldmVyIGFzeW5jaHJvbm91cyBleGVjdXRpb24gaXMgcG9zc2libGU7Citmb3IgZXhhbXBsZSwgYSBub25yZWVudHJhbnQgcHJvZ3JhbSBtYXkgbm90IGJlIHNhZmUgdG8gY2FsbCBmcm9tIGEgc2lnbmFsCitoYW5kbGVyLiAgSW4gc3lzdGVtcyB3aXRoIG11bHRpcGxlIHRocmVhZHMgb2YgY29udHJvbCwgYSBub25yZWVudHJhbnQKK3Byb2dyYW0gbXVzdCBiZSBjYWxsZWQgb25seSB3aXRoaW4gaW50ZXJsb2Nrcy4KKworTm9ybWFsbHksIEJpc29uIGdlbmVyYXRlcyBhIHBhcnNlciB3aGljaCBpcyBub3QgcmVlbnRyYW50LiAgVGhpcyBpcworc3VpdGFibGUgZm9yIG1vc3QgdXNlcywgYW5kIGl0IHBlcm1pdHMgY29tcGF0aWJpbGl0eSB3aXRoIFlhY2MuICAoVGhlCitzdGFuZGFyZCBZYWNjIGludGVyZmFjZXMgYXJlIGluaGVyZW50bHkgbm9ucmVlbnRyYW50LCBiZWNhdXNlIHRoZXkgdXNlCitzdGF0aWNhbGx5IGFsbG9jYXRlZCB2YXJpYWJsZXMgZm9yIGNvbW11bmljYXRpb24gd2l0aCBAY29kZXt5eWxleH0sCitpbmNsdWRpbmcgQGNvZGV7eXlsdmFsfSBhbmQgQGNvZGV7eXlsbG9jfS4pCisKK0FsdGVybmF0aXZlbHksIHlvdSBjYW4gZ2VuZXJhdGUgYSBwdXJlLCByZWVudHJhbnQgcGFyc2VyLiAgVGhlIEJpc29uCitkZWNsYXJhdGlvbiBAY29kZXslZGVmaW5lIGFwaS5wdXJlfSBzYXlzIHRoYXQgeW91IHdhbnQgdGhlIHBhcnNlciB0byBiZQorcmVlbnRyYW50LiAgSXQgbG9va3MgbGlrZSB0aGlzOgorCitAZXhhbXBsZQorJWRlZmluZSBhcGkucHVyZSBmdWxsCitAZW5kIGV4YW1wbGUKKworVGhlIHJlc3VsdCBpcyB0aGF0IHRoZSBjb21tdW5pY2F0aW9uIHZhcmlhYmxlcyBAY29kZXt5eWx2YWx9IGFuZAorQGNvZGV7eXlsbG9jfSBiZWNvbWUgbG9jYWwgdmFyaWFibGVzIGluIEBjb2Rle3l5cGFyc2V9LCBhbmQgYSBkaWZmZXJlbnQKK2NhbGxpbmcgY29udmVudGlvbiBpcyB1c2VkIGZvciB0aGUgbGV4aWNhbCBhbmFseXplciBmdW5jdGlvbgorQGNvZGV7eXlsZXh9LiAgQHhyZWZ7UHVyZSBDYWxsaW5nLCAsQ2FsbGluZyBDb252ZW50aW9ucyBmb3IgUHVyZQorUGFyc2Vyc30sIGZvciB0aGUgZGV0YWlscyBvZiB0aGlzLiAgVGhlIHZhcmlhYmxlIEBjb2Rle3l5bmVycnN9CitiZWNvbWVzIGxvY2FsIGluIEBjb2Rle3l5cGFyc2V9IGluIHB1bGwgbW9kZSBidXQgaXQgYmVjb21lcyBhIG1lbWJlcgorb2YgeXlwc3RhdGUgaW4gcHVzaCBtb2RlLiAgKEBweHJlZntFcnJvciBSZXBvcnRpbmcsICxUaGUgRXJyb3IKK1JlcG9ydGluZyBGdW5jdGlvbiBAY29kZXt5eWVycm9yfX0pLiAgVGhlIGNvbnZlbnRpb24gZm9yIGNhbGxpbmcKK0Bjb2Rle3l5cGFyc2V9IGl0c2VsZiBpcyB1bmNoYW5nZWQuCisKK1doZXRoZXIgdGhlIHBhcnNlciBpcyBwdXJlIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIGdyYW1tYXIgcnVsZXMuCitZb3UgY2FuIGdlbmVyYXRlIGVpdGhlciBhIHB1cmUgcGFyc2VyIG9yIGEgbm9ucmVlbnRyYW50IHBhcnNlciBmcm9tIGFueQordmFsaWQgZ3JhbW1hci4KKworQG5vZGUgUHVzaCBEZWNsCitAc3Vic2VjdGlvbiBBIFB1c2ggUGFyc2VyCitAY2luZGV4IHB1c2ggcGFyc2VyCitAY2luZGV4IHB1c2ggcGFyc2VyCitAZmluZGV4ICVkZWZpbmUgYXBpLnB1c2gtcHVsbAorCisoVGhlIGN1cnJlbnQgcHVzaCBwYXJzaW5nIGludGVyZmFjZSBpcyBleHBlcmltZW50YWwgYW5kIG1heSBldm9sdmUuCitNb3JlIHVzZXIgZmVlZGJhY2sgd2lsbCBoZWxwIHRvIHN0YWJpbGl6ZSBpdC4pCisKK0EgcHVsbCBwYXJzZXIgaXMgY2FsbGVkIG9uY2UgYW5kIGl0IHRha2VzIGNvbnRyb2wgdW50aWwgYWxsIGl0cyBpbnB1dAoraXMgY29tcGxldGVseSBwYXJzZWQuICBBIHB1c2ggcGFyc2VyLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgY2FsbGVkCitlYWNoIHRpbWUgYSBuZXcgdG9rZW4gaXMgbWFkZSBhdmFpbGFibGUuCisKK0EgcHVzaCBwYXJzZXIgaXMgdHlwaWNhbGx5IHVzZWZ1bCB3aGVuIHRoZSBwYXJzZXIgaXMgcGFydCBvZiBhCittYWluIGV2ZW50IGxvb3AgaW4gdGhlIGNsaWVudCdzIGFwcGxpY2F0aW9uLiAgVGhpcyBpcyB0eXBpY2FsbHkKK2EgcmVxdWlyZW1lbnQgb2YgYSBHVUksIHdoZW4gdGhlIG1haW4gZXZlbnQgbG9vcCBuZWVkcyB0byBiZSB0cmlnZ2VyZWQKK3dpdGhpbiBhIGNlcnRhaW4gdGltZSBwZXJpb2QuCisKK05vcm1hbGx5LCBCaXNvbiBnZW5lcmF0ZXMgYSBwdWxsIHBhcnNlci4KK1RoZSBmb2xsb3dpbmcgQmlzb24gZGVjbGFyYXRpb24gc2F5cyB0aGF0IHlvdSB3YW50IHRoZSBwYXJzZXIgdG8gYmUgYSBwdXNoCitwYXJzZXIgKEBweHJlZnslZGVmaW5lIFN1bW1hcnksLGFwaS5wdXNoLXB1bGx9KToKKworQGV4YW1wbGUKKyVkZWZpbmUgYXBpLnB1c2gtcHVsbCBwdXNoCitAZW5kIGV4YW1wbGUKKworSW4gYWxtb3N0IGFsbCBjYXNlcywgeW91IHdhbnQgdG8gZW5zdXJlIHRoYXQgeW91ciBwdXNoIHBhcnNlciBpcyBhbHNvCithIHB1cmUgcGFyc2VyIChAcHhyZWZ7UHVyZSBEZWNsLCAsQSBQdXJlIChSZWVudHJhbnQpIFBhcnNlcn0pLiAgVGhlIG9ubHkKK3RpbWUgeW91IHNob3VsZCBjcmVhdGUgYW4gaW1wdXJlIHB1c2ggcGFyc2VyIGlzIHRvIGhhdmUgYmFja3dhcmRzCitjb21wYXRpYmlsaXR5IHdpdGggdGhlIGltcHVyZSBZYWNjIHB1bGwgbW9kZSBpbnRlcmZhY2UuICBVbmxlc3MgeW91IGtub3cKK3doYXQgeW91IGFyZSBkb2luZywgeW91ciBkZWNsYXJhdGlvbnMgc2hvdWxkIGxvb2sgbGlrZSB0aGlzOgorCitAZXhhbXBsZQorJWRlZmluZSBhcGkucHVyZSBmdWxsCislZGVmaW5lIGFwaS5wdXNoLXB1bGwgcHVzaAorQGVuZCBleGFtcGxlCisKK1RoZXJlIGlzIGEgbWFqb3Igbm90YWJsZSBmdW5jdGlvbmFsIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgcHVyZSBwdXNoIHBhcnNlcgorYW5kIHRoZSBpbXB1cmUgcHVzaCBwYXJzZXIuICBJdCBpcyBhY2NlcHRhYmxlIGZvciBhIHB1cmUgcHVzaCBwYXJzZXIgdG8gaGF2ZQorbWFueSBwYXJzZXIgaW5zdGFuY2VzLCBvZiB0aGUgc2FtZSB0eXBlIG9mIHBhcnNlciwgaW4gbWVtb3J5IGF0IHRoZSBzYW1lIHRpbWUuCitBbiBpbXB1cmUgcHVzaCBwYXJzZXIgc2hvdWxkIG9ubHkgdXNlIG9uZSBwYXJzZXIgYXQgYSB0aW1lLgorCitXaGVuIGEgcHVzaCBwYXJzZXIgaXMgc2VsZWN0ZWQsIEJpc29uIHdpbGwgZ2VuZXJhdGUgc29tZSBuZXcgc3ltYm9scyBpbgordGhlIGdlbmVyYXRlZCBwYXJzZXIuICBAY29kZXt5eXBzdGF0ZX0gaXMgYSBzdHJ1Y3R1cmUgdGhhdCB0aGUgZ2VuZXJhdGVkCitwYXJzZXIgdXNlcyB0byBzdG9yZSB0aGUgcGFyc2VyJ3Mgc3RhdGUuICBAY29kZXt5eXBzdGF0ZV9uZXd9IGlzIHRoZQorZnVuY3Rpb24gdGhhdCB3aWxsIGNyZWF0ZSBhIG5ldyBwYXJzZXIgaW5zdGFuY2UuICBAY29kZXt5eXBzdGF0ZV9kZWxldGV9Cit3aWxsIGZyZWUgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgcGFyc2VyIGluc3RhbmNlLgorRmluYWxseSwgQGNvZGV7eXlwdXNoX3BhcnNlfSBpcyB0aGUgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIGEKK3Rva2VuIGlzIGF2YWlsYWJsZSB0byBwcm92aWRlIHRoZSBwYXJzZXIuICBBIHRyaXZpYWwgZXhhbXBsZQorb2YgdXNpbmcgYSBwdXJlIHB1c2ggcGFyc2VyIHdvdWxkIGxvb2sgbGlrZSB0aGlzOgorCitAZXhhbXBsZQoraW50IHN0YXR1czsKK3l5cHN0YXRlICpwcyA9IHl5cHN0YXRlX25ldyAoKTsKK2RvIEB7CisgIHN0YXR1cyA9IHl5cHVzaF9wYXJzZSAocHMsIHl5bGV4ICgpLCBOVUxMKTsKK0B9IHdoaWxlIChzdGF0dXMgPT0gWVlQVVNIX01PUkUpOworeXlwc3RhdGVfZGVsZXRlIChwcyk7CitAZW5kIGV4YW1wbGUKKworSWYgdGhlIHVzZXIgZGVjaWRlZCB0byB1c2UgYW4gaW1wdXJlIHB1c2ggcGFyc2VyLCBhIGZldyB0aGluZ3MgYWJvdXQKK3RoZSBnZW5lcmF0ZWQgcGFyc2VyIHdpbGwgY2hhbmdlLiAgVGhlIEBjb2Rle3l5Y2hhcn0gdmFyaWFibGUgYmVjb21lcworYSBnbG9iYWwgdmFyaWFibGUgaW5zdGVhZCBvZiBhIHZhcmlhYmxlIGluIHRoZSBAY29kZXt5eXB1c2hfcGFyc2V9IGZ1bmN0aW9uLgorRm9yIHRoaXMgcmVhc29uLCB0aGUgc2lnbmF0dXJlIG9mIHRoZSBAY29kZXt5eXB1c2hfcGFyc2V9IGZ1bmN0aW9uIGlzCitjaGFuZ2VkIHRvIHJlbW92ZSB0aGUgdG9rZW4gYXMgYSBwYXJhbWV0ZXIuICBBIG5vbnJlZW50cmFudCBwdXNoIHBhcnNlcgorZXhhbXBsZSB3b3VsZCB0aHVzIGxvb2sgbGlrZSB0aGlzOgorCitAZXhhbXBsZQorZXh0ZXJuIGludCB5eWNoYXI7CitpbnQgc3RhdHVzOworeXlwc3RhdGUgKnBzID0geXlwc3RhdGVfbmV3ICgpOworZG8gQHsKKyAgeXljaGFyID0geXlsZXggKCk7CisgIHN0YXR1cyA9IHl5cHVzaF9wYXJzZSAocHMpOworQH0gd2hpbGUgKHN0YXR1cyA9PSBZWVBVU0hfTU9SRSk7Cit5eXBzdGF0ZV9kZWxldGUgKHBzKTsKK0BlbmQgZXhhbXBsZQorCitUaGF0J3MgaXQuIE5vdGljZSB0aGUgbmV4dCB0b2tlbiBpcyBwdXQgaW50byB0aGUgZ2xvYmFsIHZhcmlhYmxlIEBjb2Rle3l5Y2hhcn0KK2ZvciB1c2UgYnkgdGhlIG5leHQgaW52b2NhdGlvbiBvZiB0aGUgQGNvZGV7eXlwdXNoX3BhcnNlfSBmdW5jdGlvbi4KKworQmlzb24gYWxzbyBzdXBwb3J0cyBib3RoIHRoZSBwdXNoIHBhcnNlciBpbnRlcmZhY2UgYWxvbmcgd2l0aCB0aGUgcHVsbCBwYXJzZXIKK2ludGVyZmFjZSBpbiB0aGUgc2FtZSBnZW5lcmF0ZWQgcGFyc2VyLiAgSW4gb3JkZXIgdG8gZ2V0IHRoaXMgZnVuY3Rpb25hbGl0eSwKK3lvdSBzaG91bGQgcmVwbGFjZSB0aGUgQGNvZGV7JWRlZmluZSBhcGkucHVzaC1wdWxsIHB1c2h9IGRlY2xhcmF0aW9uIHdpdGggdGhlCitAY29kZXslZGVmaW5lIGFwaS5wdXNoLXB1bGwgYm90aH0gZGVjbGFyYXRpb24uICBEb2luZyB0aGlzIHdpbGwgY3JlYXRlIGFsbCBvZgordGhlIHN5bWJvbHMgbWVudGlvbmVkIGVhcmxpZXIgYWxvbmcgd2l0aCB0aGUgdHdvIGV4dHJhIHN5bWJvbHMsIEBjb2Rle3l5cGFyc2V9CithbmQgQGNvZGV7eXlwdWxsX3BhcnNlfS4gIEBjb2Rle3l5cGFyc2V9IGNhbiBiZSB1c2VkIGV4YWN0bHkgYXMgaXQgbm9ybWFsbHkKK3dvdWxkIGJlIHVzZWQuICBIb3dldmVyLCB0aGUgdXNlciBzaG91bGQgbm90ZSB0aGF0IGl0IGlzIGltcGxlbWVudGVkIGluIHRoZQorZ2VuZXJhdGVkIHBhcnNlciBieSBjYWxsaW5nIEBjb2Rle3l5cHVsbF9wYXJzZX0uCitUaGlzIG1ha2VzIHRoZSBAY29kZXt5eXBhcnNlfSBmdW5jdGlvbiB0aGF0IGlzIGdlbmVyYXRlZCB3aXRoIHRoZQorQGNvZGV7JWRlZmluZSBhcGkucHVzaC1wdWxsIGJvdGh9IGRlY2xhcmF0aW9uIHNsb3dlciB0aGFuIHRoZSBub3JtYWwKK0Bjb2Rle3l5cGFyc2V9IGZ1bmN0aW9uLiAgSWYgdGhlIHVzZXIKK2NhbGxzIHRoZSBAY29kZXt5eXB1bGxfcGFyc2V9IGZ1bmN0aW9uIGl0IHdpbGwgcGFyc2UgdGhlIHJlc3Qgb2YgdGhlIGlucHV0CitzdHJlYW0uICBJdCBpcyBwb3NzaWJsZSB0byBAY29kZXt5eXB1c2hfcGFyc2V9IHRva2VucyB0byBzZWxlY3QgYSBzdWJncmFtbWFyCithbmQgdGhlbiBAY29kZXt5eXB1bGxfcGFyc2V9IHRoZSByZXN0IG9mIHRoZSBpbnB1dCBzdHJlYW0uICBJZiB5b3Ugd291bGQgbGlrZQordG8gc3dpdGNoIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gYmV0d2VlbiBwYXJzaW5nIHN0eWxlcywgeW91IHdvdWxkIGhhdmUgdG8KK3dyaXRlIHlvdXIgb3duIEBjb2Rle3l5cHVsbF9wYXJzZX0gZnVuY3Rpb24gdGhhdCBrbm93cyB3aGVuIHRvIHF1aXQgbG9va2luZworZm9yIGlucHV0LiAgQW4gZXhhbXBsZSBvZiB1c2luZyB0aGUgQGNvZGV7eXlwdWxsX3BhcnNlfSBmdW5jdGlvbiB3b3VsZCBsb29rCitsaWtlIHRoaXM6CisKK0BleGFtcGxlCit5eXBzdGF0ZSAqcHMgPSB5eXBzdGF0ZV9uZXcgKCk7Cit5eXB1bGxfcGFyc2UgKHBzKTsgLyogV2lsbCBjYWxsIHRoZSBsZXhlciAqLworeXlwc3RhdGVfZGVsZXRlIChwcyk7CitAZW5kIGV4YW1wbGUKKworQWRkaW5nIHRoZSBAY29kZXslZGVmaW5lIGFwaS5wdXJlIGZ1bGx9IGRlY2xhcmF0aW9uIGRvZXMgZXhhY3RseSB0aGUgc2FtZSB0aGluZwordG8gdGhlIGdlbmVyYXRlZCBwYXJzZXIgd2l0aCBAY29kZXslZGVmaW5lIGFwaS5wdXNoLXB1bGwgYm90aH0gYXMgaXQgZGlkIGZvcgorQGNvZGV7JWRlZmluZSBhcGkucHVzaC1wdWxsIHB1c2h9LgorCitAbm9kZSBEZWNsIFN1bW1hcnkKK0BzdWJzZWN0aW9uIEJpc29uIERlY2xhcmF0aW9uIFN1bW1hcnkKK0BjaW5kZXggQmlzb24gZGVjbGFyYXRpb24gc3VtbWFyeQorQGNpbmRleCBkZWNsYXJhdGlvbiBzdW1tYXJ5CitAY2luZGV4IHN1bW1hcnksIEJpc29uIGRlY2xhcmF0aW9uCisKK0hlcmUgaXMgYSBzdW1tYXJ5IG9mIHRoZSBkZWNsYXJhdGlvbnMgdXNlZCB0byBkZWZpbmUgYSBncmFtbWFyOgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gJXVuaW9uCitEZWNsYXJlIHRoZSBjb2xsZWN0aW9uIG9mIGRhdGEgdHlwZXMgdGhhdCBzZW1hbnRpYyB2YWx1ZXMgbWF5IGhhdmUKKyhAcHhyZWZ7VW5pb24gRGVjbCwgLFRoZSBDb2xsZWN0aW9uIG9mIFZhbHVlIFR5cGVzfSkuCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSAldG9rZW4KK0RlY2xhcmUgYSB0ZXJtaW5hbCBzeW1ib2wgKHRva2VuIHR5cGUgbmFtZSkgd2l0aCBubyBwcmVjZWRlbmNlCitvciBhc3NvY2lhdGl2aXR5IHNwZWNpZmllZCAoQHB4cmVme1Rva2VuIERlY2wsICxUb2tlbiBUeXBlIE5hbWVzfSkuCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSAlcmlnaHQKK0RlY2xhcmUgYSB0ZXJtaW5hbCBzeW1ib2wgKHRva2VuIHR5cGUgbmFtZSkgdGhhdCBpcyByaWdodC1hc3NvY2lhdGl2ZQorKEBweHJlZntQcmVjZWRlbmNlIERlY2wsICxPcGVyYXRvciBQcmVjZWRlbmNlfSkuCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSAlbGVmdAorRGVjbGFyZSBhIHRlcm1pbmFsIHN5bWJvbCAodG9rZW4gdHlwZSBuYW1lKSB0aGF0IGlzIGxlZnQtYXNzb2NpYXRpdmUKKyhAcHhyZWZ7UHJlY2VkZW5jZSBEZWNsLCAsT3BlcmF0b3IgUHJlY2VkZW5jZX0pLgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gJW5vbmFzc29jCitEZWNsYXJlIGEgdGVybWluYWwgc3ltYm9sICh0b2tlbiB0eXBlIG5hbWUpIHRoYXQgaXMgbm9uYXNzb2NpYXRpdmUKKyhAcHhyZWZ7UHJlY2VkZW5jZSBEZWNsLCAsT3BlcmF0b3IgUHJlY2VkZW5jZX0pLgorVXNpbmcgaXQgaW4gYSB3YXkgdGhhdCB3b3VsZCBiZSBhc3NvY2lhdGl2ZSBpcyBhIHN5bnRheCBlcnJvci4KK0BlbmQgZGVmZm4KKworQGlmc2V0IGRlZmF1bHRwcmVjCitAZGVmZm4ge0RpcmVjdGl2ZX0gJWRlZmF1bHQtcHJlYworQXNzaWduIGEgcHJlY2VkZW5jZSB0byBydWxlcyBsYWNraW5nIGFuIGV4cGxpY2l0IEBjb2RleyVwcmVjfSBtb2RpZmllcgorKEBweHJlZntDb250ZXh0dWFsIFByZWNlZGVuY2UsICxDb250ZXh0LURlcGVuZGVudCBQcmVjZWRlbmNlfSkuCitAZW5kIGRlZmZuCitAZW5kIGlmc2V0CisKK0BkZWZmbiB7RGlyZWN0aXZlfSAldHlwZQorRGVjbGFyZSB0aGUgdHlwZSBvZiBzZW1hbnRpYyB2YWx1ZXMgZm9yIGEgbm9udGVybWluYWwgc3ltYm9sCisoQHB4cmVme1R5cGUgRGVjbCwgLE5vbnRlcm1pbmFsIFN5bWJvbHN9KS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtEaXJlY3RpdmV9ICVzdGFydAorU3BlY2lmeSB0aGUgZ3JhbW1hcidzIHN0YXJ0IHN5bWJvbCAoQHB4cmVme1N0YXJ0IERlY2wsICxUaGUKK1N0YXJ0LVN5bWJvbH0pLgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gJWV4cGVjdAorRGVjbGFyZSB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIHNoaWZ0LXJlZHVjZSBjb25mbGljdHMKKyhAcHhyZWZ7RXhwZWN0IERlY2wsICxTdXBwcmVzc2luZyBDb25mbGljdCBXYXJuaW5nc30pLgorQGVuZCBkZWZmbgorCisKK0BzcCAxCitAbm9pbmRlbnQKK0luIG9yZGVyIHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgQGNvbW1hbmR7Ymlzb259LCB1c2UgdGhlIGZvbGxvd2luZworZGlyZWN0aXZlczoKKworQGRlZmZuIHtEaXJlY3RpdmV9ICVjb2RlIEB7QHZhcntjb2RlfUB9CitAZGVmZm54IHtEaXJlY3RpdmV9ICVjb2RlIEB2YXJ7cXVhbGlmaWVyfSBAe0B2YXJ7Y29kZX1AfQorQGZpbmRleCAlY29kZQorSW5zZXJ0IEB2YXJ7Y29kZX0gdmVyYmF0aW0gaW50byB0aGUgb3V0cHV0IHBhcnNlciBzb3VyY2UgYXQgdGhlCitkZWZhdWx0IGxvY2F0aW9uIG9yIGF0IHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQgYnkgQHZhcntxdWFsaWZpZXJ9LgorQHhyZWZ7JWNvZGUgU3VtbWFyeX0uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSAlZGVidWcKK0luIHRoZSBwYXJzZXIgaW1wbGVtZW50YXRpb24gZmlsZSwgZGVmaW5lIHRoZSBtYWNybyBAY29kZXtZWURFQlVHfSAob3IKK0Bjb2Rle0B2YXJ7cHJlZml4fURFQlVHfSB3aXRoIEBzYW1weyVkZWZpbmUgYXBpLnByZWZpeCBAdmFye3ByZWZpeH19LCBzZWUKK0ByZWZ7TXVsdGlwbGUgUGFyc2VycywgLE11bHRpcGxlIFBhcnNlcnMgaW4gdGhlIFNhbWUgUHJvZ3JhbX0pIHRvIDEgaWYgaXQgaXMKK25vdCBhbHJlYWR5IGRlZmluZWQsIHNvIHRoYXQgdGhlIGRlYnVnZ2luZyBmYWNpbGl0aWVzIGFyZSBjb21waWxlZC4KK0B4cmVme1RyYWNpbmcsICxUcmFjaW5nIFlvdXIgUGFyc2VyfS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtEaXJlY3RpdmV9ICVkZWZpbmUgQHZhcnt2YXJpYWJsZX0KK0BkZWZmbngge0RpcmVjdGl2ZX0gJWRlZmluZSBAdmFye3ZhcmlhYmxlfSBAdmFye3ZhbHVlfQorQGRlZmZueCB7RGlyZWN0aXZlfSAlZGVmaW5lIEB2YXJ7dmFyaWFibGV9ICJAdmFye3ZhbHVlfSIKK0RlZmluZSBhIHZhcmlhYmxlIHRvIGFkanVzdCBCaXNvbidzIGJlaGF2aW9yLiAgQHhyZWZ7JWRlZmluZSBTdW1tYXJ5fS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtEaXJlY3RpdmV9ICVkZWZpbmVzCitXcml0ZSBhIHBhcnNlciBoZWFkZXIgZmlsZSBjb250YWluaW5nIG1hY3JvIGRlZmluaXRpb25zIGZvciB0aGUgdG9rZW4KK3R5cGUgbmFtZXMgZGVmaW5lZCBpbiB0aGUgZ3JhbW1hciBhcyB3ZWxsIGFzIGEgZmV3IG90aGVyIGRlY2xhcmF0aW9ucy4KK0lmIHRoZSBwYXJzZXIgaW1wbGVtZW50YXRpb24gZmlsZSBpcyBuYW1lZCBAZmlsZXtAdmFye25hbWV9LmN9IHRoZW4KK3RoZSBwYXJzZXIgaGVhZGVyIGZpbGUgaXMgbmFtZWQgQGZpbGV7QHZhcntuYW1lfS5ofS4KKworRm9yIEMgcGFyc2VycywgdGhlIHBhcnNlciBoZWFkZXIgZmlsZSBkZWNsYXJlcyBAY29kZXtZWVNUWVBFfSB1bmxlc3MKK0Bjb2Rle1lZU1RZUEV9IGlzIGFscmVhZHkgZGVmaW5lZCBhcyBhIG1hY3JvIG9yIHlvdSBoYXZlIHVzZWQgYQorQGNvZGV7PEB2YXJ7dHlwZX0+fSB0YWcgd2l0aG91dCB1c2luZyBAY29kZXsldW5pb259LiAgVGhlcmVmb3JlLCBpZgoreW91IGFyZSB1c2luZyBhIEBjb2RleyV1bmlvbn0gKEBweHJlZntNdWx0aXBsZSBUeXBlcywgLE1vcmUgVGhhbiBPbmUKK1ZhbHVlIFR5cGV9KSB3aXRoIGNvbXBvbmVudHMgdGhhdCByZXF1aXJlIG90aGVyIGRlZmluaXRpb25zLCBvciBpZiB5b3UKK2hhdmUgZGVmaW5lZCBhIEBjb2Rle1lZU1RZUEV9IG1hY3JvIG9yIHR5cGUgZGVmaW5pdGlvbiAoQHB4cmVme1ZhbHVlCitUeXBlLCAsRGF0YSBUeXBlcyBvZiBTZW1hbnRpYyBWYWx1ZXN9KSwgeW91IG5lZWQgdG8gYXJyYW5nZSBmb3IgdGhlc2UKK2RlZmluaXRpb25zIHRvIGJlIHByb3BhZ2F0ZWQgdG8gYWxsIG1vZHVsZXMsIGUuZy4sIGJ5IHB1dHRpbmcgdGhlbSBpbgorYSBwcmVyZXF1aXNpdGUgaGVhZGVyIHRoYXQgaXMgaW5jbHVkZWQgYm90aCBieSB5b3VyIHBhcnNlciBhbmQgYnkgYW55CitvdGhlciBtb2R1bGUgdGhhdCBuZWVkcyBAY29kZXtZWVNUWVBFfS4KKworVW5sZXNzIHlvdXIgcGFyc2VyIGlzIHB1cmUsIHRoZSBwYXJzZXIgaGVhZGVyIGZpbGUgZGVjbGFyZXMKK0Bjb2Rle3l5bHZhbH0gYXMgYW4gZXh0ZXJuYWwgdmFyaWFibGUuICBAeHJlZntQdXJlIERlY2wsICxBIFB1cmUKKyhSZWVudHJhbnQpIFBhcnNlcn0uCisKK0lmIHlvdSBoYXZlIGFsc28gdXNlZCBsb2NhdGlvbnMsIHRoZSBwYXJzZXIgaGVhZGVyIGZpbGUgZGVjbGFyZXMKK0Bjb2Rle1lZTFRZUEV9IGFuZCBAY29kZXt5eWxsb2N9IHVzaW5nIGEgcHJvdG9jb2wgc2ltaWxhciB0byB0aGF0IG9mIHRoZQorQGNvZGV7WVlTVFlQRX0gbWFjcm8gYW5kIEBjb2Rle3l5bHZhbH0uICBAeHJlZntUcmFja2luZyBMb2NhdGlvbnN9LgorCitUaGlzIHBhcnNlciBoZWFkZXIgZmlsZSBpcyBub3JtYWxseSBlc3NlbnRpYWwgaWYgeW91IHdpc2ggdG8gcHV0IHRoZQorZGVmaW5pdGlvbiBvZiBAY29kZXt5eWxleH0gaW4gYSBzZXBhcmF0ZSBzb3VyY2UgZmlsZSwgYmVjYXVzZQorQGNvZGV7eXlsZXh9IHR5cGljYWxseSBuZWVkcyB0byBiZSBhYmxlIHRvIHJlZmVyIHRvIHRoZQorYWJvdmUtbWVudGlvbmVkIGRlY2xhcmF0aW9ucyBhbmQgdG8gdGhlIHRva2VuIHR5cGUgY29kZXMuICBAeHJlZntUb2tlbgorVmFsdWVzLCAsU2VtYW50aWMgVmFsdWVzIG9mIFRva2Vuc30uCisKK0BmaW5kZXggJWNvZGUgcmVxdWlyZXMKK0BmaW5kZXggJWNvZGUgcHJvdmlkZXMKK0lmIHlvdSBoYXZlIGRlY2xhcmVkIEBjb2RleyVjb2RlIHJlcXVpcmVzfSBvciBAY29kZXslY29kZSBwcm92aWRlc30sIHRoZSBvdXRwdXQKK2hlYWRlciBhbHNvIGNvbnRhaW5zIHRoZWlyIGNvZGUuCitAeHJlZnslY29kZSBTdW1tYXJ5fS4KKworQGNpbmRleCBIZWFkZXIgZ3VhcmQKK1RoZSBnZW5lcmF0ZWQgaGVhZGVyIGlzIHByb3RlY3RlZCBhZ2FpbnN0IG11bHRpcGxlIGluY2x1c2lvbnMgd2l0aCBhIEMKK3ByZXByb2Nlc3NvciBndWFyZDogQHNhbXB7WVlfQHZhcntQUkVGSVh9X0B2YXJ7RklMRX1fSU5DTFVERUR9LCB3aGVyZQorQHZhcntQUkVGSVh9IGFuZCBAdmFye0ZJTEV9IGFyZSB0aGUgcHJlZml4IChAcHhyZWZ7TXVsdGlwbGUgUGFyc2VycywKKyxNdWx0aXBsZSBQYXJzZXJzIGluIHRoZSBTYW1lIFByb2dyYW19KSBhbmQgZ2VuZXJhdGVkIGZpbGUgbmFtZSB0dXJuZWQKK3VwcGVyY2FzZSwgd2l0aCBlYWNoIHNlcmllcyBvZiBub24gYWxwaGFudW1lcmljYWwgY2hhcmFjdGVycyBjb252ZXJ0ZWQgdG8gYQorc2luZ2xlIHVuZGVyc2NvcmUuCisKK0ZvciBpbnN0YW5jZSB3aXRoIEBzYW1weyVkZWZpbmUgYXBpLnByZWZpeCAiY2FsYyJ9IGFuZCBAc2FtcHslZGVmaW5lcworImxpYi9wYXJzZS5oIn0sIHRoZSBoZWFkZXIgd2lsbCBiZSBndWFyZGVkIGFzIGZvbGxvd3MuCitAZXhhbXBsZQorI2lmbmRlZiBZWV9DQUxDX0xJQl9QQVJTRV9IX0lOQ0xVREVECisjIGRlZmluZSBZWV9DQUxDX0xJQl9QQVJTRV9IX0lOQ0xVREVECisuLi4KKyNlbmRpZiAvKiAhIFlZX0NBTENfTElCX1BBUlNFX0hfSU5DTFVERUQgKi8KK0BlbmQgZXhhbXBsZQorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gJWRlZmluZXMgQHZhcntkZWZpbmVzLWZpbGV9CitTYW1lIGFzIGFib3ZlLCBidXQgc2F2ZSBpbiB0aGUgZmlsZSBAdmFye2RlZmluZXMtZmlsZX0uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSAlZGVzdHJ1Y3RvcgorU3BlY2lmeSBob3cgdGhlIHBhcnNlciBzaG91bGQgcmVjbGFpbSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgdG8KK2Rpc2NhcmRlZCBzeW1ib2xzLiAgQHhyZWZ7RGVzdHJ1Y3RvciBEZWNsLCAsIEZyZWVpbmcgRGlzY2FyZGVkIFN5bWJvbHN9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gJWZpbGUtcHJlZml4ICJAdmFye3ByZWZpeH0iCitTcGVjaWZ5IGEgcHJlZml4IHRvIHVzZSBmb3IgYWxsIEJpc29uIG91dHB1dCBmaWxlIG5hbWVzLiAgVGhlIG5hbWVzCithcmUgY2hvc2VuIGFzIGlmIHRoZSBncmFtbWFyIGZpbGUgd2VyZSBuYW1lZCBAZmlsZXtAdmFye3ByZWZpeH0ueX0uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSAlbGFuZ3VhZ2UgIkB2YXJ7bGFuZ3VhZ2V9IgorU3BlY2lmeSB0aGUgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgZm9yIHRoZSBnZW5lcmF0ZWQgcGFyc2VyLiAgQ3VycmVudGx5CitzdXBwb3J0ZWQgbGFuZ3VhZ2VzIGluY2x1ZGUgQywgQysrLCBhbmQgSmF2YS4KK0B2YXJ7bGFuZ3VhZ2V9IGlzIGNhc2UtaW5zZW5zaXRpdmUuCisKK0BlbmQgZGVmZm4KKworQGRlZmZuIHtEaXJlY3RpdmV9ICVsb2NhdGlvbnMKK0dlbmVyYXRlIHRoZSBjb2RlIHByb2Nlc3NpbmcgdGhlIGxvY2F0aW9ucyAoQHB4cmVme0FjdGlvbiBGZWF0dXJlcywKKyxTcGVjaWFsIEZlYXR1cmVzIGZvciBVc2UgaW4gQWN0aW9uc30pLiAgVGhpcyBtb2RlIGlzIGVuYWJsZWQgYXMgc29vbiBhcwordGhlIGdyYW1tYXIgdXNlcyB0aGUgc3BlY2lhbCBAc2FtcHtAQEB2YXJ7bn19IHRva2VucywgYnV0IGlmIHlvdXIKK2dyYW1tYXIgZG9lcyBub3QgdXNlIGl0LCB1c2luZyBAc2FtcHslbG9jYXRpb25zfSBhbGxvd3MgZm9yIG1vcmUKK2FjY3VyYXRlIHN5bnRheCBlcnJvciBtZXNzYWdlcy4KK0BlbmQgZGVmZm4KKworQGlmc2V0IGRlZmF1bHRwcmVjCitAZGVmZm4ge0RpcmVjdGl2ZX0gJW5vLWRlZmF1bHQtcHJlYworRG8gbm90IGFzc2lnbiBhIHByZWNlZGVuY2UgdG8gcnVsZXMgbGFja2luZyBhbiBleHBsaWNpdCBAY29kZXslcHJlY30KK21vZGlmaWVyIChAcHhyZWZ7Q29udGV4dHVhbCBQcmVjZWRlbmNlLCAsQ29udGV4dC1EZXBlbmRlbnQKK1ByZWNlZGVuY2V9KS4KK0BlbmQgZGVmZm4KK0BlbmQgaWZzZXQKKworQGRlZmZuIHtEaXJlY3RpdmV9ICVuby1saW5lcworRG9uJ3QgZ2VuZXJhdGUgYW55IEBjb2RleyNsaW5lfSBwcmVwcm9jZXNzb3IgY29tbWFuZHMgaW4gdGhlIHBhcnNlcgoraW1wbGVtZW50YXRpb24gZmlsZS4gIE9yZGluYXJpbHkgQmlzb24gd3JpdGVzIHRoZXNlIGNvbW1hbmRzIGluIHRoZQorcGFyc2VyIGltcGxlbWVudGF0aW9uIGZpbGUgc28gdGhhdCB0aGUgQyBjb21waWxlciBhbmQgZGVidWdnZXJzIHdpbGwKK2Fzc29jaWF0ZSBlcnJvcnMgYW5kIG9iamVjdCBjb2RlIHdpdGggeW91ciBzb3VyY2UgZmlsZSAodGhlIGdyYW1tYXIKK2ZpbGUpLiAgVGhpcyBkaXJlY3RpdmUgY2F1c2VzIHRoZW0gdG8gYXNzb2NpYXRlIGVycm9ycyB3aXRoIHRoZSBwYXJzZXIKK2ltcGxlbWVudGF0aW9uIGZpbGUsIHRyZWF0aW5nIGl0IGFzIGFuIGluZGVwZW5kZW50IHNvdXJjZSBmaWxlIGluIGl0cworb3duIHJpZ2h0LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gJW91dHB1dCAiQHZhcntmaWxlfSIKK1NwZWNpZnkgQHZhcntmaWxlfSBmb3IgdGhlIHBhcnNlciBpbXBsZW1lbnRhdGlvbiBmaWxlLgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gJXB1cmUtcGFyc2VyCitEZXByZWNhdGVkIHZlcnNpb24gb2YgQGNvZGV7JWRlZmluZSBhcGkucHVyZX0gKEBweHJlZnslZGVmaW5lCitTdW1tYXJ5LCxhcGkucHVyZX0pLCBmb3Igd2hpY2ggQmlzb24gaXMgbW9yZSBjYXJlZnVsIHRvIHdhcm4gYWJvdXQKK3VucmVhc29uYWJsZSB1c2FnZS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtEaXJlY3RpdmV9ICVyZXF1aXJlICJAdmFye3ZlcnNpb259IgorUmVxdWlyZSB2ZXJzaW9uIEB2YXJ7dmVyc2lvbn0gb3IgaGlnaGVyIG9mIEJpc29uLiAgQHhyZWZ7UmVxdWlyZSBEZWNsLCAsCitSZXF1aXJlIGEgVmVyc2lvbiBvZiBCaXNvbn0uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSAlc2tlbGV0b24gIkB2YXJ7ZmlsZX0iCitTcGVjaWZ5IHRoZSBza2VsZXRvbiB0byB1c2UuCisKK0BjIFlvdSBwcm9iYWJseSBkb24ndCBuZWVkIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgYXJlIGRldmVsb3BpbmcgQmlzb24uCitAYyBZb3Ugc2hvdWxkIHVzZSBAY29kZXslbGFuZ3VhZ2V9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNrZWxldG9uIGZvciBhCitAYyBkaWZmZXJlbnQgbGFuZ3VhZ2UsIGJlY2F1c2UgaXQgaXMgY2xlYXJlciBhbmQgYmVjYXVzZSBpdCB3aWxsIGFsd2F5cyBjaG9vc2UgdGhlCitAYyBjb3JyZWN0IHNrZWxldG9uIGZvciBub24tZGV0ZXJtaW5pc3RpYyBvciBwdXNoIHBhcnNlcnMuCisKK0lmIEB2YXJ7ZmlsZX0gZG9lcyBub3QgY29udGFpbiBhIEBjb2Rley99LCBAdmFye2ZpbGV9IGlzIHRoZSBuYW1lIG9mIGEgc2tlbGV0b24KK2ZpbGUgaW4gdGhlIEJpc29uIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCitJZiBpdCBkb2VzLCBAdmFye2ZpbGV9IGlzIGFuIGFic29sdXRlIGZpbGUgbmFtZSBvciBhIGZpbGUgbmFtZSByZWxhdGl2ZSB0byB0aGUKK2RpcmVjdG9yeSBvZiB0aGUgZ3JhbW1hciBmaWxlLgorVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBtb3N0IHNoZWxscyByZXNvbHZlIGNvbW1hbmRzLgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gJXRva2VuLXRhYmxlCitHZW5lcmF0ZSBhbiBhcnJheSBvZiB0b2tlbiBuYW1lcyBpbiB0aGUgcGFyc2VyIGltcGxlbWVudGF0aW9uIGZpbGUuCitUaGUgbmFtZSBvZiB0aGUgYXJyYXkgaXMgQGNvZGV7eXl0bmFtZX07IEBjb2Rle3l5dG5hbWVbQHZhcntpfV19IGlzCit0aGUgbmFtZSBvZiB0aGUgdG9rZW4gd2hvc2UgaW50ZXJuYWwgQmlzb24gdG9rZW4gY29kZSBudW1iZXIgaXMKK0B2YXJ7aX0uICBUaGUgZmlyc3QgdGhyZWUgZWxlbWVudHMgb2YgQGNvZGV7eXl0bmFtZX0gY29ycmVzcG9uZCB0byB0aGUKK3ByZWRlZmluZWQgdG9rZW5zIEBjb2RleyIkZW5kIn0sIEBjb2RleyJlcnJvciJ9LCBhbmQKK0Bjb2RleyIkdW5kZWZpbmVkIn07IGFmdGVyIHRoZXNlIGNvbWUgdGhlIHN5bWJvbHMgZGVmaW5lZCBpbiB0aGUKK2dyYW1tYXIgZmlsZS4KKworVGhlIG5hbWUgaW4gdGhlIHRhYmxlIGluY2x1ZGVzIGFsbCB0aGUgY2hhcmFjdGVycyBuZWVkZWQgdG8gcmVwcmVzZW50Cit0aGUgdG9rZW4gaW4gQmlzb24uICBGb3Igc2luZ2xlLWNoYXJhY3RlciBsaXRlcmFscyBhbmQgbGl0ZXJhbAorc3RyaW5ncywgdGhpcyBpbmNsdWRlcyB0aGUgc3Vycm91bmRpbmcgcXVvdGluZyBjaGFyYWN0ZXJzIGFuZCBhbnkKK2VzY2FwZSBzZXF1ZW5jZXMuICBGb3IgZXhhbXBsZSwgdGhlIEJpc29uIHNpbmdsZS1jaGFyYWN0ZXIgbGl0ZXJhbAorQGNvZGV7JysnfSBjb3JyZXNwb25kcyB0byBhIHRocmVlLWNoYXJhY3RlciBuYW1lLCByZXByZXNlbnRlZCBpbiBDIGFzCitAY29kZXsiJysnIn07IGFuZCB0aGUgQmlzb24gdHdvLWNoYXJhY3RlciBsaXRlcmFsIHN0cmluZyBAY29kZXsiXFwvIn0KK2NvcnJlc3BvbmRzIHRvIGEgZml2ZS1jaGFyYWN0ZXIgbmFtZSwgcmVwcmVzZW50ZWQgaW4gQyBhcworQGNvZGV7IlwiXFxcXC9cIiJ9LgorCitXaGVuIHlvdSBzcGVjaWZ5IEBjb2RleyV0b2tlbi10YWJsZX0sIEJpc29uIGFsc28gZ2VuZXJhdGVzIG1hY3JvCitkZWZpbml0aW9ucyBmb3IgbWFjcm9zIEBjb2Rle1lZTlRPS0VOU30sIEBjb2Rle1lZTk5UU30sIGFuZAorQGNvZGV7WVlOUlVMRVN9LCBhbmQgQGNvZGV7WVlOU1RBVEVTfToKKworQHRhYmxlIEBjb2RlCitAaXRlbSBZWU5UT0tFTlMKK1RoZSBoaWdoZXN0IHRva2VuIG51bWJlciwgcGx1cyBvbmUuCitAaXRlbSBZWU5OVFMKK1RoZSBudW1iZXIgb2Ygbm9udGVybWluYWwgc3ltYm9scy4KK0BpdGVtIFlZTlJVTEVTCitUaGUgbnVtYmVyIG9mIGdyYW1tYXIgcnVsZXMsCitAaXRlbSBZWU5TVEFURVMKK1RoZSBudW1iZXIgb2YgcGFyc2VyIHN0YXRlcyAoQHB4cmVme1BhcnNlciBTdGF0ZXN9KS4KK0BlbmQgdGFibGUKK0BlbmQgZGVmZm4KKworQGRlZmZuIHtEaXJlY3RpdmV9ICV2ZXJib3NlCitXcml0ZSBhbiBleHRyYSBvdXRwdXQgZmlsZSBjb250YWluaW5nIHZlcmJvc2UgZGVzY3JpcHRpb25zIG9mIHRoZQorcGFyc2VyIHN0YXRlcyBhbmQgd2hhdCBpcyBkb25lIGZvciBlYWNoIHR5cGUgb2YgbG9va2FoZWFkIHRva2VuIGluCit0aGF0IHN0YXRlLiAgQHhyZWZ7VW5kZXJzdGFuZGluZywgLCBVbmRlcnN0YW5kaW5nIFlvdXIgUGFyc2VyfSwgZm9yIG1vcmUKK2luZm9ybWF0aW9uLgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gJXlhY2MKK1ByZXRlbmQgdGhlIG9wdGlvbiBAb3B0aW9uey0teWFjY30gd2FzIGdpdmVuLCBpLmUuLCBpbWl0YXRlIFlhY2MsCitpbmNsdWRpbmcgaXRzIG5hbWluZyBjb252ZW50aW9ucy4gIEB4cmVme0Jpc29uIE9wdGlvbnN9LCBmb3IgbW9yZS4KK0BlbmQgZGVmZm4KKworCitAbm9kZSAlZGVmaW5lIFN1bW1hcnkKK0BzdWJzZWN0aW9uICVkZWZpbmUgU3VtbWFyeQorCitUaGVyZSBhcmUgbWFueSBmZWF0dXJlcyBvZiBCaXNvbidzIGJlaGF2aW9yIHRoYXQgY2FuIGJlIGNvbnRyb2xsZWQgYnkKK2Fzc2lnbmluZyB0aGUgZmVhdHVyZSBhIHNpbmdsZSB2YWx1ZS4gIEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIHNvbWUKK3N1Y2ggZmVhdHVyZXMgYXJlIGFzc2lnbmVkIHZhbHVlcyBieSBkZWRpY2F0ZWQgZGlyZWN0aXZlcywgc3VjaCBhcworQGNvZGV7JXN0YXJ0fSwgd2hpY2ggYXNzaWducyB0aGUgc3RhcnQgc3ltYm9sLiAgSG93ZXZlciwgbmV3ZXIgc3VjaAorZmVhdHVyZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB2YXJpYWJsZXMsIHdoaWNoIGFyZSBhc3NpZ25lZCBieSB0aGUKK0Bjb2RleyVkZWZpbmV9IGRpcmVjdGl2ZToKKworQGRlZmZuIHtEaXJlY3RpdmV9ICVkZWZpbmUgQHZhcnt2YXJpYWJsZX0KK0BkZWZmbngge0RpcmVjdGl2ZX0gJWRlZmluZSBAdmFye3ZhcmlhYmxlfSBAdmFye3ZhbHVlfQorQGRlZmZueCB7RGlyZWN0aXZlfSAlZGVmaW5lIEB2YXJ7dmFyaWFibGV9ICJAdmFye3ZhbHVlfSIKK0RlZmluZSBAdmFye3ZhcmlhYmxlfSB0byBAdmFye3ZhbHVlfS4KKworQHZhcnt2YWx1ZX0gbXVzdCBiZSBwbGFjZWQgaW4gcXVvdGF0aW9uIG1hcmtzIGlmIGl0IGNvbnRhaW5zIGFueQorY2hhcmFjdGVyIG90aGVyIHRoYW4gYSBsZXR0ZXIsIHVuZGVyc2NvcmUsIHBlcmlvZCwgb3Igbm9uLWluaXRpYWwgZGFzaAorb3IgZGlnaXQuICBPbWl0dGluZyBAY29kZXsiQHZhcnt2YWx1ZX0ifSBlbnRpcmVseSBpcyBhbHdheXMgZXF1aXZhbGVudAordG8gc3BlY2lmeWluZyBAY29kZXsiIn0uCisKK0l0IGlzIGFuIGVycm9yIGlmIGEgQHZhcnt2YXJpYWJsZX0gaXMgZGVmaW5lZCBieSBAY29kZXslZGVmaW5lfQorbXVsdGlwbGUgdGltZXMsIGJ1dCBzZWUgQHJlZntCaXNvbiBPcHRpb25zLCwtRAorQHZhcntuYW1lfVs9QHZhcnt2YWx1ZX1dfS4KK0BlbmQgZGVmZm4KKworVGhlIHJlc3Qgb2YgdGhpcyBzZWN0aW9uIHN1bW1hcml6ZXMgdmFyaWFibGVzIGFuZCB2YWx1ZXMgdGhhdAorQGNvZGV7JWRlZmluZX0gYWNjZXB0cy4KKworU29tZSBAdmFye3ZhcmlhYmxlfXMgdGFrZSBCb29sZWFuIHZhbHVlcy4gIEluIHRoaXMgY2FzZSwgQmlzb24gd2lsbAorY29tcGxhaW4gaWYgdGhlIHZhcmlhYmxlIGRlZmluaXRpb24gZG9lcyBub3QgbWVldCBvbmUgb2YgdGhlIGZvbGxvd2luZworZm91ciBjb25kaXRpb25zOgorCitAZW51bWVyYXRlCitAaXRlbSBAY29kZXtAdmFye3ZhbHVlfX0gaXMgQGNvZGV7dHJ1ZX0KKworQGl0ZW0gQGNvZGV7QHZhcnt2YWx1ZX19IGlzIG9taXR0ZWQgKG9yIEBjb2RleyIifSBpcyBzcGVjaWZpZWQpLgorVGhpcyBpcyBlcXVpdmFsZW50IHRvIEBjb2Rle3RydWV9LgorCitAaXRlbSBAY29kZXtAdmFye3ZhbHVlfX0gaXMgQGNvZGV7ZmFsc2V9LgorCitAaXRlbSBAdmFye3ZhcmlhYmxlfSBpcyBuZXZlciBkZWZpbmVkLgorSW4gdGhpcyBjYXNlLCBCaXNvbiBzZWxlY3RzIGEgZGVmYXVsdCB2YWx1ZS4KK0BlbmQgZW51bWVyYXRlCisKK1doYXQgQHZhcnt2YXJpYWJsZX1zIGFyZSBhY2NlcHRlZCwgYXMgd2VsbCBhcyB0aGVpciBtZWFuaW5ncyBhbmQgZGVmYXVsdAordmFsdWVzLCBkZXBlbmQgb24gdGhlIHNlbGVjdGVkIHRhcmdldCBsYW5ndWFnZSBhbmQvb3IgdGhlIHBhcnNlcgorc2tlbGV0b24gKEBweHJlZntEZWNsIFN1bW1hcnksLCVsYW5ndWFnZX0sIEBweHJlZntEZWNsCitTdW1tYXJ5LCwlc2tlbGV0b259KS4KK1VuYWNjZXB0ZWQgQHZhcnt2YXJpYWJsZX1zIHByb2R1Y2UgYW4gZXJyb3IuCitTb21lIG9mIHRoZSBhY2NlcHRlZCBAdmFye3ZhcmlhYmxlfXMgYXJlOgorCitAaXRlbWl6ZSBAYnVsbGV0CitAYyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBhcGkubG9jYXRpb24udHlwZQorQGl0ZW0gQGNvZGV7YXBpLmxvY2F0aW9uLnR5cGV9CitAZmluZGV4ICVkZWZpbmUgYXBpLmxvY2F0aW9uLnR5cGUKKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0gTGFuZ3VhZ2Uocyk6IEMrKywgSmF2YQorCitAaXRlbSBQdXJwb3NlOiBEZWZpbmUgdGhlIGxvY2F0aW9uIHR5cGUuCitAeHJlZntVc2VyIERlZmluZWQgTG9jYXRpb24gVHlwZX0uCisKK0BpdGVtIEFjY2VwdGVkIFZhbHVlczogU3RyaW5nCisKK0BpdGVtIERlZmF1bHQgVmFsdWU6IG5vbmUKKworQGl0ZW0gSGlzdG9yeTogaW50cm9kdWNlZCBpbiBCaXNvbiAyLjcKK0BlbmQgaXRlbWl6ZQorCitAYyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBhcGkucHJlZml4CitAaXRlbSBAY29kZXthcGkucHJlZml4fQorQGZpbmRleCAlZGVmaW5lIGFwaS5wcmVmaXgKKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0gTGFuZ3VhZ2Uocyk6IEFsbAorCitAaXRlbSBQdXJwb3NlOiBSZW5hbWUgZXhwb3J0ZWQgc3ltYm9scy4KK0B4cmVme011bHRpcGxlIFBhcnNlcnMsICxNdWx0aXBsZSBQYXJzZXJzIGluIHRoZSBTYW1lIFByb2dyYW19LgorCitAaXRlbSBBY2NlcHRlZCBWYWx1ZXM6IFN0cmluZworCitAaXRlbSBEZWZhdWx0IFZhbHVlOiBAY29kZXt5eX0KKworQGl0ZW0gSGlzdG9yeTogaW50cm9kdWNlZCBpbiBCaXNvbiAyLjYKK0BlbmQgaXRlbWl6ZQorCitAYyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBhcGkucHVyZQorQGl0ZW0gQGNvZGV7YXBpLnB1cmV9CitAZmluZGV4ICVkZWZpbmUgYXBpLnB1cmUKKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0gTGFuZ3VhZ2Uocyk6IEMKKworQGl0ZW0gUHVycG9zZTogUmVxdWVzdCBhIHB1cmUgKHJlZW50cmFudCkgcGFyc2VyIHByb2dyYW0uCitAeHJlZntQdXJlIERlY2wsICxBIFB1cmUgKFJlZW50cmFudCkgUGFyc2VyfS4KKworQGl0ZW0gQWNjZXB0ZWQgVmFsdWVzOiBAY29kZXt0cnVlfSwgQGNvZGV7ZmFsc2V9LCBAY29kZXtmdWxsfQorCitUaGUgdmFsdWUgbWF5IGJlIG9taXR0ZWQ6IHRoaXMgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIEBjb2Rle3RydWV9LCBhcyBpcwordGhlIGNhc2UgZm9yIEJvb2xlYW4gdmFsdWVzLgorCitXaGVuIEBjb2RleyVkZWZpbmUgYXBpLnB1cmUgZnVsbH0gaXMgdXNlZCwgdGhlIHBhcnNlciBpcyBtYWRlIHJlZW50cmFudC4gVGhpcworY2hhbmdlcyB0aGUgc2lnbmF0dXJlIGZvciBAY29kZXt5eWxleH0gKEBweHJlZntQdXJlIENhbGxpbmd9KSwgYW5kIGFsc28gdGhhdCBvZgorQGNvZGV7eXllcnJvcn0gd2hlbiB0aGUgdHJhY2tpbmcgb2YgbG9jYXRpb25zIGhhcyBiZWVuIGFjdGl2YXRlZCwgYXMgc2hvd24KK2JlbG93LgorCitUaGUgQGNvZGV7dHJ1ZX0gdmFsdWUgaXMgdmVyeSBzaW1pbGFyIHRvIHRoZSBAY29kZXtmdWxsfSB2YWx1ZSwgdGhlIG9ubHkKK2RpZmZlcmVuY2UgaXMgaW4gdGhlIHNpZ25hdHVyZSBvZiBAY29kZXt5eWVycm9yfSBvbiBZYWNjIHBhcnNlcnMgd2l0aG91dAorQGNvZGV7JXBhcnNlLXBhcmFtfSwgZm9yIGhpc3RvcmljYWwgcmVhc29ucy4KKworSS5lLiwgaWYgQHNhbXB7JWxvY2F0aW9ucyAlZGVmaW5lIGFwaS5wdXJlfSBpcyBwYXNzZWQgdGhlbiB0aGUgcHJvdG90eXBlcyBmb3IKK0Bjb2Rle3l5ZXJyb3J9IGFyZToKKworQGV4YW1wbGUKK3ZvaWQgeXllcnJvciAoY2hhciBjb25zdCAqbXNnKTsgICAgICAgICAgICAgICAgIC8vIFlhY2MgcGFyc2Vycy4KK3ZvaWQgeXllcnJvciAoWVlMVFlQRSAqbG9jcCwgY2hhciBjb25zdCAqbXNnKTsgIC8vIEdMUiBwYXJzZXJzLgorQGVuZCBleGFtcGxlCisKK0J1dCBpZiBAc2FtcHslbG9jYXRpb25zICVkZWZpbmUgYXBpLnB1cmUgJXBhcnNlLXBhcmFtIEB7aW50ICpuYXN0aW5lc3NAfX0gaXMKK3VzZWQsIHRoZW4gYm90aCBwYXJzZXJzIGhhdmUgdGhlIHNhbWUgc2lnbmF0dXJlOgorCitAZXhhbXBsZQordm9pZCB5eWVycm9yIChZWUxUWVBFICpsbG9jcCwgaW50ICpuYXN0aW5lc3MsIGNoYXIgY29uc3QgKm1zZyk7CitAZW5kIGV4YW1wbGUKKworKEBweHJlZntFcnJvciBSZXBvcnRpbmcsICxUaGUgRXJyb3IKK1JlcG9ydGluZyBGdW5jdGlvbiBAY29kZXt5eWVycm9yfX0pCisKK0BpdGVtIERlZmF1bHQgVmFsdWU6IEBjb2Rle2ZhbHNlfQorCitAaXRlbSBIaXN0b3J5OiB0aGUgQGNvZGV7ZnVsbH0gdmFsdWUgd2FzIGludHJvZHVjZWQgaW4gQmlzb24gMi43CitAZW5kIGl0ZW1pemUKKworQGMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gYXBpLnB1c2gtcHVsbAorCitAaXRlbSBAY29kZXthcGkucHVzaC1wdWxsfQorQGZpbmRleCAlZGVmaW5lIGFwaS5wdXNoLXB1bGwKKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0gTGFuZ3VhZ2Uocyk6IEMgKGRldGVybWluaXN0aWMgcGFyc2VycyBvbmx5KQorCitAaXRlbSBQdXJwb3NlOiBSZXF1ZXN0IGEgcHVsbCBwYXJzZXIsIGEgcHVzaCBwYXJzZXIsIG9yIGJvdGguCitAeHJlZntQdXNoIERlY2wsICxBIFB1c2ggUGFyc2VyfS4KKyhUaGUgY3VycmVudCBwdXNoIHBhcnNpbmcgaW50ZXJmYWNlIGlzIGV4cGVyaW1lbnRhbCBhbmQgbWF5IGV2b2x2ZS4KK01vcmUgdXNlciBmZWVkYmFjayB3aWxsIGhlbHAgdG8gc3RhYmlsaXplIGl0LikKKworQGl0ZW0gQWNjZXB0ZWQgVmFsdWVzOiBAY29kZXtwdWxsfSwgQGNvZGV7cHVzaH0sIEBjb2Rle2JvdGh9CisKK0BpdGVtIERlZmF1bHQgVmFsdWU6IEBjb2Rle3B1bGx9CitAZW5kIGl0ZW1pemUKKworQGMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gbHIuZGVmYXVsdC1yZWR1Y3Rpb25zCisKK0BpdGVtIEBjb2Rle2xyLmRlZmF1bHQtcmVkdWN0aW9uc30KK0BmaW5kZXggJWRlZmluZSBsci5kZWZhdWx0LXJlZHVjdGlvbnMKKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0gTGFuZ3VhZ2Uocyk6IGFsbAorCitAaXRlbSBQdXJwb3NlOiBTcGVjaWZ5IHRoZSBraW5kIG9mIHN0YXRlcyB0aGF0IGFyZSBwZXJtaXR0ZWQgdG8KK2NvbnRhaW4gZGVmYXVsdCByZWR1Y3Rpb25zLiAgQHhyZWZ7RGVmYXVsdCBSZWR1Y3Rpb25zfS4gIChUaGUgYWJpbGl0eSB0bworc3BlY2lmeSB3aGVyZSBkZWZhdWx0IHJlZHVjdGlvbnMgc2hvdWxkIGJlIHVzZWQgaXMgZXhwZXJpbWVudGFsLiAgTW9yZSB1c2VyCitmZWVkYmFjayB3aWxsIGhlbHAgdG8gc3RhYmlsaXplIGl0LikKKworQGl0ZW0gQWNjZXB0ZWQgVmFsdWVzOiBAY29kZXttb3N0fSwgQGNvZGV7Y29uc2lzdGVudH0sIEBjb2Rle2FjY2VwdGluZ30KK0BpdGVtIERlZmF1bHQgVmFsdWU6CitAaXRlbWl6ZQorQGl0ZW0gQGNvZGV7YWNjZXB0aW5nfSBpZiBAY29kZXtsci50eXBlfSBpcyBAY29kZXtjYW5vbmljYWwtbHJ9LgorQGl0ZW0gQGNvZGV7bW9zdH0gb3RoZXJ3aXNlLgorQGVuZCBpdGVtaXplCitAZW5kIGl0ZW1pemUKKworQGMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gbHIua2VlcC11bnJlYWNoYWJsZS1zdGF0ZXMKKworQGl0ZW0gQGNvZGV7bHIua2VlcC11bnJlYWNoYWJsZS1zdGF0ZXN9CitAZmluZGV4ICVkZWZpbmUgbHIua2VlcC11bnJlYWNoYWJsZS1zdGF0ZXMKKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0gTGFuZ3VhZ2Uocyk6IGFsbAorQGl0ZW0gUHVycG9zZTogUmVxdWVzdCB0aGF0IEJpc29uIGFsbG93IHVucmVhY2hhYmxlIHBhcnNlciBzdGF0ZXMgdG8KK3JlbWFpbiBpbiB0aGUgcGFyc2VyIHRhYmxlcy4gIEB4cmVme1VucmVhY2hhYmxlIFN0YXRlc30uCitAaXRlbSBBY2NlcHRlZCBWYWx1ZXM6IEJvb2xlYW4KK0BpdGVtIERlZmF1bHQgVmFsdWU6IEBjb2Rle2ZhbHNlfQorQGVuZCBpdGVtaXplCisKK0BjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IGxyLnR5cGUKKworQGl0ZW0gQGNvZGV7bHIudHlwZX0KK0BmaW5kZXggJWRlZmluZSBsci50eXBlCisKK0BpdGVtaXplIEBidWxsZXQKK0BpdGVtIExhbmd1YWdlKHMpOiBhbGwKKworQGl0ZW0gUHVycG9zZTogU3BlY2lmeSB0aGUgdHlwZSBvZiBwYXJzZXIgdGFibGVzIHdpdGhpbiB0aGUKK0xSKDEpIGZhbWlseS4gIEB4cmVme0xSIFRhYmxlIENvbnN0cnVjdGlvbn0uICAoVGhpcyBmZWF0dXJlIGlzIGV4cGVyaW1lbnRhbC4KK01vcmUgdXNlciBmZWVkYmFjayB3aWxsIGhlbHAgdG8gc3RhYmlsaXplIGl0LikKKworQGl0ZW0gQWNjZXB0ZWQgVmFsdWVzOiBAY29kZXtsYWxyfSwgQGNvZGV7aWVscn0sIEBjb2Rle2Nhbm9uaWNhbC1scn0KKworQGl0ZW0gRGVmYXVsdCBWYWx1ZTogQGNvZGV7bGFscn0KK0BlbmQgaXRlbWl6ZQorCitAYyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBuYW1lc3BhY2UKKworQGl0ZW0gQGNvZGV7bmFtZXNwYWNlfQorQGZpbmRleCAlZGVmaW5lIG5hbWVzcGFjZQorCitAaXRlbWl6ZQorQGl0ZW0gTGFuZ3VhZ2VzKHMpOiBDKysKKworQGl0ZW0gUHVycG9zZTogU3BlY2lmeSB0aGUgbmFtZXNwYWNlIGZvciB0aGUgcGFyc2VyIGNsYXNzLgorRm9yIGV4YW1wbGUsIGlmIHlvdSBzcGVjaWZ5OgorCitAc21hbGxleGFtcGxlCislZGVmaW5lIG5hbWVzcGFjZSAiZm9vOjpiYXIiCitAZW5kIHNtYWxsZXhhbXBsZQorCitCaXNvbiB1c2VzIEBjb2Rle2Zvbzo6YmFyfSB2ZXJiYXRpbSBpbiByZWZlcmVuY2VzIHN1Y2ggYXM6CisKK0BzbWFsbGV4YW1wbGUKK2Zvbzo6YmFyOjpwYXJzZXI6OnNlbWFudGljX3R5cGUKK0BlbmQgc21hbGxleGFtcGxlCisKK0hvd2V2ZXIsIHRvIG9wZW4gYSBuYW1lc3BhY2UsIEJpc29uIHJlbW92ZXMgYW55IGxlYWRpbmcgQGNvZGV7Ojp9IGFuZCB0aGVuCitzcGxpdHMgb24gYW55IHJlbWFpbmluZyBvY2N1cnJlbmNlczoKKworQHNtYWxsZXhhbXBsZQorbmFtZXNwYWNlIGZvbyBAeyBuYW1lc3BhY2UgYmFyIEB7CisgIGNsYXNzIHBvc2l0aW9uOworICBjbGFzcyBsb2NhdGlvbjsKK0B9IEB9CitAZW5kIHNtYWxsZXhhbXBsZQorCitAaXRlbSBBY2NlcHRlZCBWYWx1ZXM6IEFueSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBDKysgbmFtZXNwYWNlIHJlZmVyZW5jZSB3aXRob3V0CithIHRyYWlsaW5nIEBjb2RleyI6OiJ9LgorRm9yIGV4YW1wbGUsIEBjb2RleyJmb28ifSBvciBAY29kZXsiOjpmb286OmJhciJ9LgorCitAaXRlbSBEZWZhdWx0IFZhbHVlOiBUaGUgdmFsdWUgc3BlY2lmaWVkIGJ5IEBjb2RleyVuYW1lLXByZWZpeH0sIHdoaWNoIGRlZmF1bHRzCit0byBAY29kZXt5eX0uCitUaGlzIHVzYWdlIG9mIEBjb2RleyVuYW1lLXByZWZpeH0gaXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIGNhbiBiZQorY29uZnVzaW5nIHNpbmNlIEBjb2RleyVuYW1lLXByZWZpeH0gYWxzbyBzcGVjaWZpZXMgdGhlIHRleHR1YWwgcHJlZml4IGZvciB0aGUKK2xleGljYWwgYW5hbHl6ZXIgZnVuY3Rpb24uCitUaHVzLCBpZiB5b3Ugc3BlY2lmeSBAY29kZXslbmFtZS1wcmVmaXh9LCBpdCBpcyBiZXN0IHRvIGFsc28gc3BlY2lmeQorQGNvZGV7JWRlZmluZSBuYW1lc3BhY2V9IHNvIHRoYXQgQGNvZGV7JW5hbWUtcHJlZml4fSBAZW1waHtvbmx5fSBhZmZlY3RzIHRoZQorbGV4aWNhbCBhbmFseXplciBmdW5jdGlvbi4KK0ZvciBleGFtcGxlLCBpZiB5b3Ugc3BlY2lmeToKKworQHNtYWxsZXhhbXBsZQorJWRlZmluZSBuYW1lc3BhY2UgImZvbyIKKyVuYW1lLXByZWZpeCAiYmFyOjoiCitAZW5kIHNtYWxsZXhhbXBsZQorCitUaGUgcGFyc2VyIG5hbWVzcGFjZSBpcyBAY29kZXtmb299IGFuZCBAY29kZXt5eWxleH0gaXMgcmVmZXJlbmNlZCBhcworQGNvZGV7YmFyOjpsZXh9LgorQGVuZCBpdGVtaXplCisKK0BjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IHBhcnNlLmxhYworQGl0ZW0gQGNvZGV7cGFyc2UubGFjfQorQGZpbmRleCAlZGVmaW5lIHBhcnNlLmxhYworCitAaXRlbWl6ZQorQGl0ZW0gTGFuZ3VhZ2VzKHMpOiBDIChkZXRlcm1pbmlzdGljIHBhcnNlcnMgb25seSkKKworQGl0ZW0gUHVycG9zZTogRW5hYmxlIExBQyAobG9va2FoZWFkIGNvcnJlY3Rpb24pIHRvIGltcHJvdmUKK3N5bnRheCBlcnJvciBoYW5kbGluZy4gIEB4cmVme0xBQ30uCitAaXRlbSBBY2NlcHRlZCBWYWx1ZXM6IEBjb2Rle25vbmV9LCBAY29kZXtmdWxsfQorQGl0ZW0gRGVmYXVsdCBWYWx1ZTogQGNvZGV7bm9uZX0KK0BlbmQgaXRlbWl6ZQorQGVuZCBpdGVtaXplCisKKworQG5vZGUgJWNvZGUgU3VtbWFyeQorQHN1YnNlY3Rpb24gJWNvZGUgU3VtbWFyeQorQGZpbmRleCAlY29kZQorQGNpbmRleCBQcm9sb2d1ZQorCitUaGUgQGNvZGV7JWNvZGV9IGRpcmVjdGl2ZSBpbnNlcnRzIGNvZGUgdmVyYmF0aW0gaW50byB0aGUgb3V0cHV0CitwYXJzZXIgc291cmNlIGF0IGFueSBvZiBhIHByZWRlZmluZWQgc2V0IG9mIGxvY2F0aW9ucy4gIEl0IHRodXMgc2VydmVzCithcyBhIGZsZXhpYmxlIGFuZCB1c2VyLWZyaWVuZGx5IGFsdGVybmF0aXZlIHRvIHRoZSB0cmFkaXRpb25hbCBZYWNjCitwcm9sb2d1ZSwgQGNvZGV7JUB7QHZhcntjb2RlfSVAfX0uICBUaGlzIHNlY3Rpb24gc3VtbWFyaXplcyB0aGUKK2Z1bmN0aW9uYWxpdHkgb2YgQGNvZGV7JWNvZGV9IGZvciB0aGUgdmFyaW91cyB0YXJnZXQgbGFuZ3VhZ2VzCitzdXBwb3J0ZWQgYnkgQmlzb24uICBGb3IgYSBkZXRhaWxlZCBkaXNjdXNzaW9uIG9mIGhvdyB0byB1c2UKK0Bjb2RleyVjb2RlfSBpbiBwbGFjZSBvZiBAY29kZXslQHtAdmFye2NvZGV9JUB9fSBmb3IgQy9DKysgYW5kIHdoeSBpdAoraXMgYWR2YW50YWdlb3VzIHRvIGRvIHNvLCBAcHhyZWZ7UHJvbG9ndWUgQWx0ZXJuYXRpdmVzfS4KKworQGRlZmZuIHtEaXJlY3RpdmV9ICVjb2RlIEB7QHZhcntjb2RlfUB9CitUaGlzIGlzIHRoZSB1bnF1YWxpZmllZCBmb3JtIG9mIHRoZSBAY29kZXslY29kZX0gZGlyZWN0aXZlLiAgSXQKK2luc2VydHMgQHZhcntjb2RlfSB2ZXJiYXRpbSBhdCBhIGxhbmd1YWdlLWRlcGVuZGVudCBkZWZhdWx0IGxvY2F0aW9uCitpbiB0aGUgcGFyc2VyIGltcGxlbWVudGF0aW9uLgorCitGb3IgQy9DKyssIHRoZSBkZWZhdWx0IGxvY2F0aW9uIGlzIHRoZSBwYXJzZXIgaW1wbGVtZW50YXRpb24gZmlsZQorYWZ0ZXIgdGhlIHVzdWFsIGNvbnRlbnRzIG9mIHRoZSBwYXJzZXIgaGVhZGVyIGZpbGUuICBUaHVzLCB0aGUKK3VucXVhbGlmaWVkIGZvcm0gcmVwbGFjZXMgQGNvZGV7JUB7QHZhcntjb2RlfSVAfX0gZm9yIG1vc3QgcHVycG9zZXMuCisKK0ZvciBKYXZhLCB0aGUgZGVmYXVsdCBsb2NhdGlvbiBpcyBpbnNpZGUgdGhlIHBhcnNlciBjbGFzcy4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtEaXJlY3RpdmV9ICVjb2RlIEB2YXJ7cXVhbGlmaWVyfSBAe0B2YXJ7Y29kZX1AfQorVGhpcyBpcyB0aGUgcXVhbGlmaWVkIGZvcm0gb2YgdGhlIEBjb2RleyVjb2RlfSBkaXJlY3RpdmUuCitAdmFye3F1YWxpZmllcn0gaWRlbnRpZmllcyB0aGUgcHVycG9zZSBvZiBAdmFye2NvZGV9IGFuZCB0aHVzIHRoZQorbG9jYXRpb24ocykgd2hlcmUgQmlzb24gc2hvdWxkIGluc2VydCBpdC4gIFRoYXQgaXMsIGlmIHlvdSBuZWVkIHRvCitzcGVjaWZ5IGxvY2F0aW9uLXNlbnNpdGl2ZSBAdmFye2NvZGV9IHRoYXQgZG9lcyBub3QgYmVsb25nIGF0IHRoZQorZGVmYXVsdCBsb2NhdGlvbiBzZWxlY3RlZCBieSB0aGUgdW5xdWFsaWZpZWQgQGNvZGV7JWNvZGV9IGZvcm0sIHVzZQordGhpcyBmb3JtIGluc3RlYWQuCitAZW5kIGRlZmZuCisKK0ZvciBhbnkgcGFydGljdWxhciBxdWFsaWZpZXIgb3IgZm9yIHRoZSB1bnF1YWxpZmllZCBmb3JtLCBpZiB0aGVyZSBhcmUKK211bHRpcGxlIG9jY3VycmVuY2VzIG9mIHRoZSBAY29kZXslY29kZX0gZGlyZWN0aXZlLCBCaXNvbiBjb25jYXRlbmF0ZXMKK3RoZSBzcGVjaWZpZWQgY29kZSBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggaXQgYXBwZWFycyBpbiB0aGUgZ3JhbW1hcgorZmlsZS4KKworTm90IGFsbCBxdWFsaWZpZXJzIGFyZSBhY2NlcHRlZCBmb3IgYWxsIHRhcmdldCBsYW5ndWFnZXMuICBVbmFjY2VwdGVkCitxdWFsaWZpZXJzIHByb2R1Y2UgYW4gZXJyb3IuICBTb21lIG9mIHRoZSBhY2NlcHRlZCBxdWFsaWZpZXJzIGFyZToKKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0gcmVxdWlyZXMKK0BmaW5kZXggJWNvZGUgcmVxdWlyZXMKKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0gTGFuZ3VhZ2Uocyk6IEMsIEMrKworCitAaXRlbSBQdXJwb3NlOiBUaGlzIGlzIHRoZSBiZXN0IHBsYWNlIHRvIHdyaXRlIGRlcGVuZGVuY3kgY29kZSByZXF1aXJlZCBmb3IKK0Bjb2Rle1lZU1RZUEV9IGFuZCBAY29kZXtZWUxUWVBFfS4KK0luIG90aGVyIHdvcmRzLCBpdCdzIHRoZSBiZXN0IHBsYWNlIHRvIGRlZmluZSB0eXBlcyByZWZlcmVuY2VkIGluIEBjb2RleyV1bmlvbn0KK2RpcmVjdGl2ZXMsIGFuZCBpdCdzIHRoZSBiZXN0IHBsYWNlIHRvIG92ZXJyaWRlIEJpc29uJ3MgZGVmYXVsdCBAY29kZXtZWVNUWVBFfQorYW5kIEBjb2Rle1lZTFRZUEV9IGRlZmluaXRpb25zLgorCitAaXRlbSBMb2NhdGlvbihzKTogVGhlIHBhcnNlciBoZWFkZXIgZmlsZSBhbmQgdGhlIHBhcnNlciBpbXBsZW1lbnRhdGlvbiBmaWxlCitiZWZvcmUgdGhlIEJpc29uLWdlbmVyYXRlZCBAY29kZXtZWVNUWVBFfSBhbmQgQGNvZGV7WVlMVFlQRX0KK2RlZmluaXRpb25zLgorQGVuZCBpdGVtaXplCisKK0BpdGVtIHByb3ZpZGVzCitAZmluZGV4ICVjb2RlIHByb3ZpZGVzCisKK0BpdGVtaXplIEBidWxsZXQKK0BpdGVtIExhbmd1YWdlKHMpOiBDLCBDKysKKworQGl0ZW0gUHVycG9zZTogVGhpcyBpcyB0aGUgYmVzdCBwbGFjZSB0byB3cml0ZSBhZGRpdGlvbmFsIGRlZmluaXRpb25zIGFuZAorZGVjbGFyYXRpb25zIHRoYXQgc2hvdWxkIGJlIHByb3ZpZGVkIHRvIG90aGVyIG1vZHVsZXMuCisKK0BpdGVtIExvY2F0aW9uKHMpOiBUaGUgcGFyc2VyIGhlYWRlciBmaWxlIGFuZCB0aGUgcGFyc2VyIGltcGxlbWVudGF0aW9uCitmaWxlIGFmdGVyIHRoZSBCaXNvbi1nZW5lcmF0ZWQgQGNvZGV7WVlTVFlQRX0sIEBjb2Rle1lZTFRZUEV9LCBhbmQKK3Rva2VuIGRlZmluaXRpb25zLgorQGVuZCBpdGVtaXplCisKK0BpdGVtIHRvcAorQGZpbmRleCAlY29kZSB0b3AKKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0gTGFuZ3VhZ2Uocyk6IEMsIEMrKworCitAaXRlbSBQdXJwb3NlOiBUaGUgdW5xdWFsaWZpZWQgQGNvZGV7JWNvZGV9IG9yIEBjb2RleyVjb2RlIHJlcXVpcmVzfQorc2hvdWxkIHVzdWFsbHkgYmUgbW9yZSBhcHByb3ByaWF0ZSB0aGFuIEBjb2RleyVjb2RlIHRvcH0uICBIb3dldmVyLAorb2NjYXNpb25hbGx5IGl0IGlzIG5lY2Vzc2FyeSB0byBpbnNlcnQgY29kZSBtdWNoIG5lYXJlciB0aGUgdG9wIG9mIHRoZQorcGFyc2VyIGltcGxlbWVudGF0aW9uIGZpbGUuICBGb3IgZXhhbXBsZToKKworQGV4YW1wbGUKKyVjb2RlIHRvcCBAeworICAjZGVmaW5lIF9HTlVfU09VUkNFCisgICNpbmNsdWRlIDxzdGRpby5oPgorQH0KK0BlbmQgZXhhbXBsZQorCitAaXRlbSBMb2NhdGlvbihzKTogTmVhciB0aGUgdG9wIG9mIHRoZSBwYXJzZXIgaW1wbGVtZW50YXRpb24gZmlsZS4KK0BlbmQgaXRlbWl6ZQorCitAaXRlbSBpbXBvcnRzCitAZmluZGV4ICVjb2RlIGltcG9ydHMKKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0gTGFuZ3VhZ2Uocyk6IEphdmEKKworQGl0ZW0gUHVycG9zZTogVGhpcyBpcyB0aGUgYmVzdCBwbGFjZSB0byB3cml0ZSBKYXZhIGltcG9ydCBkaXJlY3RpdmVzLgorCitAaXRlbSBMb2NhdGlvbihzKTogVGhlIHBhcnNlciBKYXZhIGZpbGUgYWZ0ZXIgYW55IEphdmEgcGFja2FnZSBkaXJlY3RpdmUgYW5kCitiZWZvcmUgYW55IGNsYXNzIGRlZmluaXRpb25zLgorQGVuZCBpdGVtaXplCitAZW5kIGl0ZW1pemUKKworVGhvdWdoIHdlIHNheSB0aGUgaW5zZXJ0aW9uIGxvY2F0aW9ucyBhcmUgbGFuZ3VhZ2UtZGVwZW5kZW50LCB0aGV5IGFyZQordGVjaG5pY2FsbHkgc2tlbGV0b24tZGVwZW5kZW50LiAgV3JpdGVycyBvZiBub24tc3RhbmRhcmQgc2tlbGV0b25zCitob3dldmVyIHNob3VsZCBjaG9vc2UgdGhlaXIgbG9jYXRpb25zIGNvbnNpc3RlbnRseSB3aXRoIHRoZSBiZWhhdmlvcgorb2YgdGhlIHN0YW5kYXJkIEJpc29uIHNrZWxldG9ucy4KKworCitAbm9kZSBNdWx0aXBsZSBQYXJzZXJzCitAc2VjdGlvbiBNdWx0aXBsZSBQYXJzZXJzIGluIHRoZSBTYW1lIFByb2dyYW0KKworTW9zdCBwcm9ncmFtcyB0aGF0IHVzZSBCaXNvbiBwYXJzZSBvbmx5IG9uZSBsYW5ndWFnZSBhbmQgdGhlcmVmb3JlIGNvbnRhaW4KK29ubHkgb25lIEJpc29uIHBhcnNlci4gIEJ1dCB3aGF0IGlmIHlvdSB3YW50IHRvIHBhcnNlIG1vcmUgdGhhbiBvbmUgbGFuZ3VhZ2UKK3dpdGggdGhlIHNhbWUgcHJvZ3JhbT8gIFRoZW4geW91IG5lZWQgdG8gYXZvaWQgbmFtZSBjb25mbGljdHMgYmV0d2VlbgorZGlmZmVyZW50IGRlZmluaXRpb25zIG9mIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIHN1Y2ggYXMgQGNvZGV7eXlwYXJzZX0sCitAY29kZXt5eWx2YWx9LiAgVG8gdXNlIGRpZmZlcmVudCBwYXJzZXJzIGZyb20gdGhlIHNhbWUgY29tcGlsYXRpb24gdW5pdCwgeW91CithbHNvIG5lZWQgdG8gYXZvaWQgY29uZmxpY3RzIG9uIHR5cGVzIGFuZCBtYWNyb3MgKGUuZy4sIEBjb2Rle1lZU1RZUEV9KQorZXhwb3J0ZWQgaW4gdGhlIGdlbmVyYXRlZCBoZWFkZXIuCisKK1RoZSBlYXN5IHdheSB0byBkbyB0aGlzIGlzIHRvIGRlZmluZSB0aGUgQGNvZGV7JWRlZmluZX0gdmFyaWFibGUKK0Bjb2Rle2FwaS5wcmVmaXh9LiAgV2l0aCBkaWZmZXJlbnQgQGNvZGV7YXBpLnByZWZpeH1zIGl0IGlzIGd1YXJhbnRlZWQgdGhhdAoraGVhZGVycyBkbyBub3QgY29uZmxpY3Qgd2hlbiBpbmNsdWRlZCB0b2dldGhlciwgYW5kIHRoYXQgY29tcGlsZWQgb2JqZWN0cworY2FuIGJlIGxpbmtlZCB0b2dldGhlciB0b28uICBTcGVjaWZ5aW5nIEBzYW1weyVkZWZpbmUgYXBpLnByZWZpeAorQHZhcntwcmVmaXh9fSAob3IgcGFzc2luZyB0aGUgb3B0aW9uIEBzYW1wey1EYXBpLnByZWZpeD1AdmFye3ByZWZpeH19LCBzZWUKK0ByZWZ7SW52b2NhdGlvbiwgLEludm9raW5nIEJpc29ufSkgcmVuYW1lcyB0aGUgaW50ZXJmYWNlIGZ1bmN0aW9ucyBhbmQKK3ZhcmlhYmxlcyBvZiB0aGUgQmlzb24gcGFyc2VyIHRvIHN0YXJ0IHdpdGggQHZhcntwcmVmaXh9IGluc3RlYWQgb2YKK0BzYW1we3l5fSwgYW5kIGFsbCB0aGUgbWFjcm9zIHRvIHN0YXJ0IGJ5IEB2YXJ7UFJFRklYfSAoaS5lLiwgQHZhcntwcmVmaXh9Cit1cHBlci1jYXNlZCkgaW5zdGVhZCBvZiBAc2FtcHtZWX0uCisKK1RoZSByZW5hbWVkIHN5bWJvbHMgaW5jbHVkZSBAY29kZXt5eXBhcnNlfSwgQGNvZGV7eXlsZXh9LCBAY29kZXt5eWVycm9yfSwKK0Bjb2Rle3l5bmVycnN9LCBAY29kZXt5eWx2YWx9LCBAY29kZXt5eWxsb2N9LCBAY29kZXt5eWNoYXJ9IGFuZAorQGNvZGV7eXlkZWJ1Z30uICBJZiB5b3UgdXNlIGEgcHVzaCBwYXJzZXIsIEBjb2Rle3l5cHVzaF9wYXJzZX0sCitAY29kZXt5eXB1bGxfcGFyc2V9LCBAY29kZXt5eXBzdGF0ZX0sIEBjb2Rle3l5cHN0YXRlX25ld30gYW5kCitAY29kZXt5eXBzdGF0ZV9kZWxldGV9IHdpbGwgYWxzbyBiZSByZW5hbWVkLiAgVGhlIHJlbmFtZWQgbWFjcm9zIGluY2x1ZGUKK0Bjb2Rle1lZU1RZUEV9LCBAY29kZXtZWUxUWVBFfSwgYW5kIEBjb2Rle1lZREVCVUd9LCB3aGljaCBpcyB0cmVhdGVkCitzcGVjaWZpY2FsbHkgLS0tIG1vcmUgYWJvdXQgdGhpcyBiZWxvdy4KKworRm9yIGV4YW1wbGUsIGlmIHlvdSB1c2UgQHNhbXB7JWRlZmluZSBhcGkucHJlZml4IGN9LCB0aGUgbmFtZXMgYmVjb21lCitAY29kZXtjcGFyc2V9LCBAY29kZXtjbGV4fSwgQGRvdHN7fSwgQGNvZGV7Q1NUWVBFfSwgQGNvZGV7Q0xUWVBFfSwgYW5kIHNvCitvbi4KKworVGhlIEBjb2RleyVkZWZpbmV9IHZhcmlhYmxlIEBjb2Rle2FwaS5wcmVmaXh9IHdvcmtzIGluIHR3byBkaWZmZXJlbnQgd2F5cy4KK0luIHRoZSBpbXBsZW1lbnRhdGlvbiBmaWxlLCBpdCB3b3JrcyBieSBhZGRpbmcgbWFjcm8gZGVmaW5pdGlvbnMgdG8gdGhlCitiZWdpbm5pbmcgb2YgdGhlIHBhcnNlciBpbXBsZW1lbnRhdGlvbiBmaWxlLCBkZWZpbmluZyBAY29kZXt5eXBhcnNlfSBhcworQGNvZGV7QHZhcntwcmVmaXh9cGFyc2V9LCBhbmQgc28gb246CisKK0BleGFtcGxlCisjZGVmaW5lIFlZU1RZUEUgQ1RZUEUKKyNkZWZpbmUgeXlwYXJzZSBjcGFyc2UKKyNkZWZpbmUgeXlsdmFsICBjbHZhbAorLi4uCitZWVNUWVBFIHl5bHZhbDsKK2ludCB5eXBhcnNlICh2b2lkKTsKK0BlbmQgZXhhbXBsZQorCitUaGlzIGVmZmVjdGl2ZWx5IHN1YnN0aXR1dGVzIG9uZSBuYW1lIGZvciB0aGUgb3RoZXIgaW4gdGhlIGVudGlyZSBwYXJzZXIKK2ltcGxlbWVudGF0aW9uIGZpbGUsIHRodXMgdGhlIGBgb3JpZ2luYWwnJyBuYW1lcyAoQGNvZGV7eXlsZXh9LAorQGNvZGV7WVlTVFlQRX0sIEBkb3Rze30pIGFyZSBhbHNvIHVzYWJsZSBpbiB0aGUgcGFyc2VyIGltcGxlbWVudGF0aW9uIGZpbGUuCisKK0hvd2V2ZXIsIGluIHRoZSBwYXJzZXIgaGVhZGVyIGZpbGUsIHRoZSBzeW1ib2xzIGFyZSBkZWZpbmVkIHJlbmFtZWQsIGZvcgoraW5zdGFuY2U6CisKK0BleGFtcGxlCitleHRlcm4gQ1NUWVBFIGNsdmFsOworaW50IGNwYXJzZSAodm9pZCk7CitAZW5kIGV4YW1wbGUKKworVGhlIG1hY3JvIEBjb2Rle1lZREVCVUd9IGlzIGNvbW1vbmx5IHVzZWQgdG8gZW5hYmxlIHRoZSB0cmFjaW5nIHN1cHBvcnQgaW4KK3BhcnNlcnMuICBUbyBjb21wbHkgd2l0aCB0aGlzIHRyYWRpdGlvbiwgd2hlbiBAY29kZXthcGkucHJlZml4fSBpcyB1c2VkLAorQGNvZGV7WVlERUJVR30gKG5vdCByZW5hbWVkKSBpcyB1c2VkIGFzIGEgZGVmYXVsdCB2YWx1ZToKKworQGV4YW1wbGUKKy8qIEVuYWJsaW5nIHRyYWNlcy4gICovCisjaWZuZGVmIENERUJVRworIyBpZiBkZWZpbmVkIFlZREVCVUcKKyMgIGlmIFlZREVCVUcKKyMgICBkZWZpbmUgQ0RFQlVHIDEKKyMgIGVsc2UKKyMgICBkZWZpbmUgQ0RFQlVHIDAKKyMgIGVuZGlmCisjIGVsc2UKKyMgIGRlZmluZSBDREVCVUcgMAorIyBlbmRpZgorI2VuZGlmCisjaWYgQ0RFQlVHCitleHRlcm4gaW50IGNkZWJ1ZzsKKyNlbmRpZgorQGVuZCBleGFtcGxlCisKK0BzcCAyCisKK1ByaW9yIHRvIEJpc29uIDIuNiwgYSBmZWF0dXJlIHNpbWlsYXIgdG8gQGNvZGV7YXBpLnByZWZpeH0gd2FzIHByb3ZpZGVkIGJ5Cit0aGUgb2Jzb2xldGUgZGlyZWN0aXZlIEBjb2RleyVuYW1lLXByZWZpeH0gKEBweHJlZntUYWJsZSBvZiBTeW1ib2xzLCAsQmlzb24KK1N5bWJvbHN9KSBhbmQgdGhlIG9wdGlvbiBAY29kZXstLW5hbWUtcHJlZml4fSAoQHB4cmVme0Jpc29uIE9wdGlvbnN9KS4KKworQG5vZGUgSW50ZXJmYWNlCitAY2hhcHRlciBQYXJzZXIgQy1MYW5ndWFnZSBJbnRlcmZhY2UKK0BjaW5kZXggQy1sYW5ndWFnZSBpbnRlcmZhY2UKK0BjaW5kZXggaW50ZXJmYWNlCisKK1RoZSBCaXNvbiBwYXJzZXIgaXMgYWN0dWFsbHkgYSBDIGZ1bmN0aW9uIG5hbWVkIEBjb2Rle3l5cGFyc2V9LiAgSGVyZSB3ZQorZGVzY3JpYmUgdGhlIGludGVyZmFjZSBjb252ZW50aW9ucyBvZiBAY29kZXt5eXBhcnNlfSBhbmQgdGhlIG90aGVyCitmdW5jdGlvbnMgdGhhdCBpdCBuZWVkcyB0byB1c2UuCisKK0tlZXAgaW4gbWluZCB0aGF0IHRoZSBwYXJzZXIgdXNlcyBtYW55IEMgaWRlbnRpZmllcnMgc3RhcnRpbmcgd2l0aAorQHNhbXB7eXl9IGFuZCBAc2FtcHtZWX0gZm9yIGludGVybmFsIHB1cnBvc2VzLiAgSWYgeW91IHVzZSBzdWNoIGFuCitpZGVudGlmaWVyIChhc2lkZSBmcm9tIHRob3NlIGluIHRoaXMgbWFudWFsKSBpbiBhbiBhY3Rpb24gb3IgaW4gZXBpbG9ndWUKK2luIHRoZSBncmFtbWFyIGZpbGUsIHlvdSBhcmUgbGlrZWx5IHRvIHJ1biBpbnRvIHRyb3VibGUuCisKK0BtZW51CisqIFBhcnNlciBGdW5jdGlvbjo6ICAgICAgICAgSG93IHRvIGNhbGwgQGNvZGV7eXlwYXJzZX0gYW5kIHdoYXQgaXQgcmV0dXJucy4KKyogUHVzaCBQYXJzZXIgRnVuY3Rpb246OiAgICBIb3cgdG8gY2FsbCBAY29kZXt5eXB1c2hfcGFyc2V9IGFuZCB3aGF0IGl0IHJldHVybnMuCisqIFB1bGwgUGFyc2VyIEZ1bmN0aW9uOjogICAgSG93IHRvIGNhbGwgQGNvZGV7eXlwdWxsX3BhcnNlfSBhbmQgd2hhdCBpdCByZXR1cm5zLgorKiBQYXJzZXIgQ3JlYXRlIEZ1bmN0aW9uOjogIEhvdyB0byBjYWxsIEBjb2Rle3l5cHN0YXRlX25ld30gYW5kIHdoYXQgaXQgcmV0dXJucy4KKyogUGFyc2VyIERlbGV0ZSBGdW5jdGlvbjo6ICBIb3cgdG8gY2FsbCBAY29kZXt5eXBzdGF0ZV9kZWxldGV9IGFuZCB3aGF0IGl0IHJldHVybnMuCisqIExleGljYWw6OiAgICAgICAgICAgICAgICAgWW91IG11c3Qgc3VwcGx5IGEgZnVuY3Rpb24gQGNvZGV7eXlsZXh9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCByZWFkcyB0b2tlbnMuCisqIEVycm9yIFJlcG9ydGluZzo6ICAgICAgICAgWW91IG11c3Qgc3VwcGx5IGEgZnVuY3Rpb24gQGNvZGV7eXllcnJvcn0uCisqIEFjdGlvbiBGZWF0dXJlczo6ICAgICAgICAgU3BlY2lhbCBmZWF0dXJlcyBmb3IgdXNlIGluIGFjdGlvbnMuCisqIEludGVybmF0aW9uYWxpemF0aW9uOjogICAgSG93IHRvIGxldCB0aGUgcGFyc2VyIHNwZWFrIGluIHRoZSB1c2VyJ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZSBsYW5ndWFnZS4KK0BlbmQgbWVudQorCitAbm9kZSBQYXJzZXIgRnVuY3Rpb24KK0BzZWN0aW9uIFRoZSBQYXJzZXIgRnVuY3Rpb24gQGNvZGV7eXlwYXJzZX0KK0BmaW5kZXggeXlwYXJzZQorCitZb3UgY2FsbCB0aGUgZnVuY3Rpb24gQGNvZGV7eXlwYXJzZX0gdG8gY2F1c2UgcGFyc2luZyB0byBvY2N1ci4gIFRoaXMKK2Z1bmN0aW9uIHJlYWRzIHRva2VucywgZXhlY3V0ZXMgYWN0aW9ucywgYW5kIHVsdGltYXRlbHkgcmV0dXJucyB3aGVuIGl0CitlbmNvdW50ZXJzIGVuZC1vZi1pbnB1dCBvciBhbiB1bnJlY292ZXJhYmxlIHN5bnRheCBlcnJvci4gIFlvdSBjYW4gYWxzbword3JpdGUgYW4gYWN0aW9uIHdoaWNoIGRpcmVjdHMgQGNvZGV7eXlwYXJzZX0gdG8gcmV0dXJuIGltbWVkaWF0ZWx5Cit3aXRob3V0IHJlYWRpbmcgZnVydGhlci4KKworCitAZGVmdHlwZWZ1biBpbnQgeXlwYXJzZSAodm9pZCkKK1RoZSB2YWx1ZSByZXR1cm5lZCBieSBAY29kZXt5eXBhcnNlfSBpcyAwIGlmIHBhcnNpbmcgd2FzIHN1Y2Nlc3NmdWwgKHJldHVybgoraXMgZHVlIHRvIGVuZC1vZi1pbnB1dCkuCisKK1RoZSB2YWx1ZSBpcyAxIGlmIHBhcnNpbmcgZmFpbGVkIGJlY2F1c2Ugb2YgaW52YWxpZCBpbnB1dCwgaS5lLiwgaW5wdXQKK3RoYXQgY29udGFpbnMgYSBzeW50YXggZXJyb3Igb3IgdGhhdCBjYXVzZXMgQGNvZGV7WVlBQk9SVH0gdG8gYmUKK2ludm9rZWQuCisKK1RoZSB2YWx1ZSBpcyAyIGlmIHBhcnNpbmcgZmFpbGVkIGR1ZSB0byBtZW1vcnkgZXhoYXVzdGlvbi4KK0BlbmQgZGVmdHlwZWZ1bgorCitJbiBhbiBhY3Rpb24sIHlvdSBjYW4gY2F1c2UgaW1tZWRpYXRlIHJldHVybiBmcm9tIEBjb2Rle3l5cGFyc2V9IGJ5IHVzaW5nCit0aGVzZSBtYWNyb3M6CisKK0BkZWZtYWMgWVlBQ0NFUFQKK0BmaW5kZXggWVlBQ0NFUFQKK1JldHVybiBpbW1lZGlhdGVseSB3aXRoIHZhbHVlIDAgKHRvIHJlcG9ydCBzdWNjZXNzKS4KK0BlbmQgZGVmbWFjCisKK0BkZWZtYWMgWVlBQk9SVAorQGZpbmRleCBZWUFCT1JUCitSZXR1cm4gaW1tZWRpYXRlbHkgd2l0aCB2YWx1ZSAxICh0byByZXBvcnQgZmFpbHVyZSkuCitAZW5kIGRlZm1hYworCitJZiB5b3UgdXNlIGEgcmVlbnRyYW50IHBhcnNlciwgeW91IGNhbiBvcHRpb25hbGx5IHBhc3MgYWRkaXRpb25hbAorcGFyYW1ldGVyIGluZm9ybWF0aW9uIHRvIGl0IGluIGEgcmVlbnRyYW50IHdheS4gIFRvIGRvIHNvLCB1c2UgdGhlCitkZWNsYXJhdGlvbiBAY29kZXslcGFyc2UtcGFyYW19OgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gJXBhcnNlLXBhcmFtIEB7QHZhcnthcmd1bWVudC1kZWNsYXJhdGlvbn1AfQorQGZpbmRleCAlcGFyc2UtcGFyYW0KK0RlY2xhcmUgdGhhdCBhbiBhcmd1bWVudCBkZWNsYXJlZCBieSB0aGUgYnJhY2VkLWNvZGUKK0B2YXJ7YXJndW1lbnQtZGVjbGFyYXRpb259IGlzIGFuIGFkZGl0aW9uYWwgQGNvZGV7eXlwYXJzZX0gYXJndW1lbnQuCitUaGUgQHZhcnthcmd1bWVudC1kZWNsYXJhdGlvbn0gaXMgdXNlZCB3aGVuIGRlY2xhcmluZworZnVuY3Rpb25zIG9yIHByb3RvdHlwZXMuICBUaGUgbGFzdCBpZGVudGlmaWVyIGluCitAdmFye2FyZ3VtZW50LWRlY2xhcmF0aW9ufSBtdXN0IGJlIHRoZSBhcmd1bWVudCBuYW1lLgorQGVuZCBkZWZmbgorCitIZXJlJ3MgYW4gZXhhbXBsZS4gIFdyaXRlIHRoaXMgaW4gdGhlIHBhcnNlcjoKKworQGV4YW1wbGUKKyVwYXJzZS1wYXJhbSBAe2ludCAqbmFzdGluZXNzQH0KKyVwYXJzZS1wYXJhbSBAe2ludCAqcmFuZG9tbmVzc0B9CitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitUaGVuIGNhbGwgdGhlIHBhcnNlciBsaWtlIHRoaXM6CisKK0BleGFtcGxlCitAeworICBpbnQgbmFzdGluZXNzLCByYW5kb21uZXNzOworICBAZG90c3t9ICAvKiBAcntTdG9yZSBwcm9wZXIgZGF0YSBpbiBAY29kZXtuYXN0aW5lc3N9IGFuZCBAY29kZXtyYW5kb21uZXNzfS59ICAqLworICB2YWx1ZSA9IHl5cGFyc2UgKCZuYXN0aW5lc3MsICZyYW5kb21uZXNzKTsKKyAgQGRvdHN7fQorQH0KK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK0luIHRoZSBncmFtbWFyIGFjdGlvbnMsIHVzZSBleHByZXNzaW9ucyBsaWtlIHRoaXMgdG8gcmVmZXIgdG8gdGhlIGRhdGE6CisKK0BleGFtcGxlCitleHA6IEBkb3Rze30gICAgQHsgQGRvdHN7fTsgKnJhbmRvbW5lc3MgKz0gMTsgQGRvdHN7fSBAfQorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorVXNpbmcgdGhlIGZvbGxvd2luZzoKK0BleGFtcGxlCislcGFyc2UtcGFyYW0gQHtpbnQgKnJhbmRvbW5lc3NAfQorQGVuZCBleGFtcGxlCisKK1Jlc3VsdHMgaW4gdGhlc2Ugc2lnbmF0dXJlczoKK0BleGFtcGxlCit2b2lkIHl5ZXJyb3IgKGludCAqcmFuZG9tbmVzcywgY29uc3QgY2hhciAqbXNnKTsKK2ludCAgeXlwYXJzZSAoaW50ICpyYW5kb21uZXNzKTsKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK09yLCBpZiBib3RoIEBjb2RleyVkZWZpbmUgYXBpLnB1cmUgZnVsbH0gKG9yIGp1c3QgQGNvZGV7JWRlZmluZSBhcGkucHVyZX0pCithbmQgQGNvZGV7JWxvY2F0aW9uc30gYXJlIHVzZWQ6CisKK0BleGFtcGxlCit2b2lkIHl5ZXJyb3IgKFlZTFRZUEUgKmxsb2NwLCBpbnQgKnJhbmRvbW5lc3MsIGNvbnN0IGNoYXIgKm1zZyk7CitpbnQgIHl5cGFyc2UgKGludCAqcmFuZG9tbmVzcyk7CitAZW5kIGV4YW1wbGUKKworQG5vZGUgUHVzaCBQYXJzZXIgRnVuY3Rpb24KK0BzZWN0aW9uIFRoZSBQdXNoIFBhcnNlciBGdW5jdGlvbiBAY29kZXt5eXB1c2hfcGFyc2V9CitAZmluZGV4IHl5cHVzaF9wYXJzZQorCisoVGhlIGN1cnJlbnQgcHVzaCBwYXJzaW5nIGludGVyZmFjZSBpcyBleHBlcmltZW50YWwgYW5kIG1heSBldm9sdmUuCitNb3JlIHVzZXIgZmVlZGJhY2sgd2lsbCBoZWxwIHRvIHN0YWJpbGl6ZSBpdC4pCisKK1lvdSBjYWxsIHRoZSBmdW5jdGlvbiBAY29kZXt5eXB1c2hfcGFyc2V9IHRvIHBhcnNlIGEgc2luZ2xlIHRva2VuLiAgVGhpcworZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGlmIGVpdGhlciB0aGUgQGNvZGV7JWRlZmluZSBhcGkucHVzaC1wdWxsIHB1c2h9IG9yCitAY29kZXslZGVmaW5lIGFwaS5wdXNoLXB1bGwgYm90aH0gZGVjbGFyYXRpb24gaXMgdXNlZC4KK0B4cmVme1B1c2ggRGVjbCwgLEEgUHVzaCBQYXJzZXJ9LgorCitAZGVmdHlwZWZ1biBpbnQgeXlwdXNoX3BhcnNlICh5eXBzdGF0ZSAqeXlwcykKK1RoZSB2YWx1ZSByZXR1cm5lZCBieSBAY29kZXt5eXB1c2hfcGFyc2V9IGlzIHRoZSBzYW1lIGFzIGZvciB5eXBhcnNlIHdpdGgKK3RoZSBmb2xsb3dpbmcgZXhjZXB0aW9uOiBpdCByZXR1cm5zIEBjb2Rle1lZUFVTSF9NT1JFfSBpZiBtb3JlIGlucHV0IGlzCityZXF1aXJlZCB0byBmaW5pc2ggcGFyc2luZyB0aGUgZ3JhbW1hci4KK0BlbmQgZGVmdHlwZWZ1bgorCitAbm9kZSBQdWxsIFBhcnNlciBGdW5jdGlvbgorQHNlY3Rpb24gVGhlIFB1bGwgUGFyc2VyIEZ1bmN0aW9uIEBjb2Rle3l5cHVsbF9wYXJzZX0KK0BmaW5kZXggeXlwdWxsX3BhcnNlCisKKyhUaGUgY3VycmVudCBwdXNoIHBhcnNpbmcgaW50ZXJmYWNlIGlzIGV4cGVyaW1lbnRhbCBhbmQgbWF5IGV2b2x2ZS4KK01vcmUgdXNlciBmZWVkYmFjayB3aWxsIGhlbHAgdG8gc3RhYmlsaXplIGl0LikKKworWW91IGNhbGwgdGhlIGZ1bmN0aW9uIEBjb2Rle3l5cHVsbF9wYXJzZX0gdG8gcGFyc2UgdGhlIHJlc3Qgb2YgdGhlIGlucHV0CitzdHJlYW0uICBUaGlzIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBpZiB0aGUgQGNvZGV7JWRlZmluZSBhcGkucHVzaC1wdWxsIGJvdGh9CitkZWNsYXJhdGlvbiBpcyB1c2VkLgorQHhyZWZ7UHVzaCBEZWNsLCAsQSBQdXNoIFBhcnNlcn0uCisKK0BkZWZ0eXBlZnVuIGludCB5eXB1bGxfcGFyc2UgKHl5cHN0YXRlICp5eXBzKQorVGhlIHZhbHVlIHJldHVybmVkIGJ5IEBjb2Rle3l5cHVsbF9wYXJzZX0gaXMgdGhlIHNhbWUgYXMgZm9yIEBjb2Rle3l5cGFyc2V9LgorQGVuZCBkZWZ0eXBlZnVuCisKK0Bub2RlIFBhcnNlciBDcmVhdGUgRnVuY3Rpb24KK0BzZWN0aW9uIFRoZSBQYXJzZXIgQ3JlYXRlIEZ1bmN0aW9uIEBjb2Rle3l5c3RhdGVfbmV3fQorQGZpbmRleCB5eXBzdGF0ZV9uZXcKKworKFRoZSBjdXJyZW50IHB1c2ggcGFyc2luZyBpbnRlcmZhY2UgaXMgZXhwZXJpbWVudGFsIGFuZCBtYXkgZXZvbHZlLgorTW9yZSB1c2VyIGZlZWRiYWNrIHdpbGwgaGVscCB0byBzdGFiaWxpemUgaXQuKQorCitZb3UgY2FsbCB0aGUgZnVuY3Rpb24gQGNvZGV7eXlwc3RhdGVfbmV3fSB0byBjcmVhdGUgYSBuZXcgcGFyc2VyIGluc3RhbmNlLgorVGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgaWYgZWl0aGVyIHRoZSBAY29kZXslZGVmaW5lIGFwaS5wdXNoLXB1bGwgcHVzaH0gb3IKK0Bjb2RleyVkZWZpbmUgYXBpLnB1c2gtcHVsbCBib3RofSBkZWNsYXJhdGlvbiBpcyB1c2VkLgorQHhyZWZ7UHVzaCBEZWNsLCAsQSBQdXNoIFBhcnNlcn0uCisKK0BkZWZ0eXBlZnVuIHt5eXBzdGF0ZSp9IHl5cHN0YXRlX25ldyAodm9pZCkKK1RoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBhIHZhbGlkIHBhcnNlciBpbnN0YW5jZSBpZiB0aGVyZSB3YXMgbWVtb3J5IGF2YWlsYWJsZQorb3IgMCBpZiBubyBtZW1vcnkgd2FzIGF2YWlsYWJsZS4KK0luIGltcHVyZSBtb2RlLCBpdCB3aWxsIGFsc28gcmV0dXJuIDAgaWYgYSBwYXJzZXIgaW5zdGFuY2UgaXMgY3VycmVudGx5CithbGxvY2F0ZWQuCitAZW5kIGRlZnR5cGVmdW4KKworQG5vZGUgUGFyc2VyIERlbGV0ZSBGdW5jdGlvbgorQHNlY3Rpb24gVGhlIFBhcnNlciBEZWxldGUgRnVuY3Rpb24gQGNvZGV7eXlzdGF0ZV9kZWxldGV9CitAZmluZGV4IHl5cHN0YXRlX2RlbGV0ZQorCisoVGhlIGN1cnJlbnQgcHVzaCBwYXJzaW5nIGludGVyZmFjZSBpcyBleHBlcmltZW50YWwgYW5kIG1heSBldm9sdmUuCitNb3JlIHVzZXIgZmVlZGJhY2sgd2lsbCBoZWxwIHRvIHN0YWJpbGl6ZSBpdC4pCisKK1lvdSBjYWxsIHRoZSBmdW5jdGlvbiBAY29kZXt5eXBzdGF0ZV9kZWxldGV9IHRvIGRlbGV0ZSBhIHBhcnNlciBpbnN0YW5jZS4KK2Z1bmN0aW9uIGlzIGF2YWlsYWJsZSBpZiBlaXRoZXIgdGhlIEBjb2RleyVkZWZpbmUgYXBpLnB1c2gtcHVsbCBwdXNofSBvcgorQGNvZGV7JWRlZmluZSBhcGkucHVzaC1wdWxsIGJvdGh9IGRlY2xhcmF0aW9uIGlzIHVzZWQuCitAeHJlZntQdXNoIERlY2wsICxBIFB1c2ggUGFyc2VyfS4KKworQGRlZnR5cGVmdW4gdm9pZCB5eXBzdGF0ZV9kZWxldGUgKHl5cHN0YXRlICp5eXBzKQorVGhpcyBmdW5jdGlvbiB3aWxsIHJlY2xhaW0gdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYSBwYXJzZXIgaW5zdGFuY2UuCitBZnRlciB0aGlzIGNhbGwsIHlvdSBzaG91bGQgbm8gbG9uZ2VyIGF0dGVtcHQgdG8gdXNlIHRoZSBwYXJzZXIgaW5zdGFuY2UuCitAZW5kIGRlZnR5cGVmdW4KKworQG5vZGUgTGV4aWNhbAorQHNlY3Rpb24gVGhlIExleGljYWwgQW5hbHl6ZXIgRnVuY3Rpb24gQGNvZGV7eXlsZXh9CitAZmluZGV4IHl5bGV4CitAY2luZGV4IGxleGljYWwgYW5hbHl6ZXIKKworVGhlIEBkZm57bGV4aWNhbCBhbmFseXplcn0gZnVuY3Rpb24sIEBjb2Rle3l5bGV4fSwgcmVjb2duaXplcyB0b2tlbnMgZnJvbQordGhlIGlucHV0IHN0cmVhbSBhbmQgcmV0dXJucyB0aGVtIHRvIHRoZSBwYXJzZXIuICBCaXNvbiBkb2VzIG5vdCBjcmVhdGUKK3RoaXMgZnVuY3Rpb24gYXV0b21hdGljYWxseTsgeW91IG11c3Qgd3JpdGUgaXQgc28gdGhhdCBAY29kZXt5eXBhcnNlfSBjYW4KK2NhbGwgaXQuICBUaGUgZnVuY3Rpb24gaXMgc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzIGEgbGV4aWNhbCBzY2FubmVyLgorCitJbiBzaW1wbGUgcHJvZ3JhbXMsIEBjb2Rle3l5bGV4fSBpcyBvZnRlbiBkZWZpbmVkIGF0IHRoZSBlbmQgb2YgdGhlCitCaXNvbiBncmFtbWFyIGZpbGUuICBJZiBAY29kZXt5eWxleH0gaXMgZGVmaW5lZCBpbiBhIHNlcGFyYXRlIHNvdXJjZQorZmlsZSwgeW91IG5lZWQgdG8gYXJyYW5nZSBmb3IgdGhlIHRva2VuLXR5cGUgbWFjcm8gZGVmaW5pdGlvbnMgdG8gYmUKK2F2YWlsYWJsZSB0aGVyZS4gIFRvIGRvIHRoaXMsIHVzZSB0aGUgQHNhbXB7LWR9IG9wdGlvbiB3aGVuIHlvdSBydW4KK0Jpc29uLCBzbyB0aGF0IGl0IHdpbGwgd3JpdGUgdGhlc2UgbWFjcm8gZGVmaW5pdGlvbnMgaW50byB0aGUgc2VwYXJhdGUKK3BhcnNlciBoZWFkZXIgZmlsZSwgQGZpbGV7QHZhcntuYW1lfS50YWIuaH0sIHdoaWNoIHlvdSBjYW4gaW5jbHVkZSBpbgordGhlIG90aGVyIHNvdXJjZSBmaWxlcyB0aGF0IG5lZWQgaXQuICBAeHJlZntJbnZvY2F0aW9uLCAsSW52b2tpbmcKK0Jpc29ufS4KKworQG1lbnUKKyogQ2FsbGluZyBDb252ZW50aW9uOjogIEhvdyBAY29kZXt5eXBhcnNlfSBjYWxscyBAY29kZXt5eWxleH0uCisqIFRva2VuIFZhbHVlczo6ICAgICAgICBIb3cgQGNvZGV7eXlsZXh9IG11c3QgcmV0dXJuIHRoZSBzZW1hbnRpYyB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgdG9rZW4gaXQgaGFzIHJlYWQuCisqIFRva2VuIExvY2F0aW9uczo6ICAgICBIb3cgQGNvZGV7eXlsZXh9IG11c3QgcmV0dXJuIHRoZSB0ZXh0IGxvY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIG51bWJlciwgZXRjLikgb2YgdGhlIHRva2VuLCBpZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9ucyB3YW50IHRoYXQuCisqIFB1cmUgQ2FsbGluZzo6ICAgICAgICBIb3cgdGhlIGNhbGxpbmcgY29udmVudGlvbiBkaWZmZXJzIGluIGEgcHVyZSBwYXJzZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKEBweHJlZntQdXJlIERlY2wsICxBIFB1cmUgKFJlZW50cmFudCkgUGFyc2VyfSkuCitAZW5kIG1lbnUKKworQG5vZGUgQ2FsbGluZyBDb252ZW50aW9uCitAc3Vic2VjdGlvbiBDYWxsaW5nIENvbnZlbnRpb24gZm9yIEBjb2Rle3l5bGV4fQorCitUaGUgdmFsdWUgdGhhdCBAY29kZXt5eWxleH0gcmV0dXJucyBtdXN0IGJlIHRoZSBwb3NpdGl2ZSBudW1lcmljIGNvZGUKK2ZvciB0aGUgdHlwZSBvZiB0b2tlbiBpdCBoYXMganVzdCBmb3VuZDsgYSB6ZXJvIG9yIG5lZ2F0aXZlIHZhbHVlCitzaWduaWZpZXMgZW5kLW9mLWlucHV0LgorCitXaGVuIGEgdG9rZW4gaXMgcmVmZXJyZWQgdG8gaW4gdGhlIGdyYW1tYXIgcnVsZXMgYnkgYSBuYW1lLCB0aGF0IG5hbWUKK2luIHRoZSBwYXJzZXIgaW1wbGVtZW50YXRpb24gZmlsZSBiZWNvbWVzIGEgQyBtYWNybyB3aG9zZSBkZWZpbml0aW9uCitpcyB0aGUgcHJvcGVyIG51bWVyaWMgY29kZSBmb3IgdGhhdCB0b2tlbiB0eXBlLiAgU28gQGNvZGV7eXlsZXh9IGNhbgordXNlIHRoZSBuYW1lIHRvIGluZGljYXRlIHRoYXQgdHlwZS4gIEB4cmVme1N5bWJvbHN9LgorCitXaGVuIGEgdG9rZW4gaXMgcmVmZXJyZWQgdG8gaW4gdGhlIGdyYW1tYXIgcnVsZXMgYnkgYSBjaGFyYWN0ZXIgbGl0ZXJhbCwKK3RoZSBudW1lcmljIGNvZGUgZm9yIHRoYXQgY2hhcmFjdGVyIGlzIGFsc28gdGhlIGNvZGUgZm9yIHRoZSB0b2tlbiB0eXBlLgorU28gQGNvZGV7eXlsZXh9IGNhbiBzaW1wbHkgcmV0dXJuIHRoYXQgY2hhcmFjdGVyIGNvZGUsIHBvc3NpYmx5IGNvbnZlcnRlZAordG8gQGNvZGV7dW5zaWduZWQgY2hhcn0gdG8gYXZvaWQgc2lnbi1leHRlbnNpb24uICBUaGUgbnVsbCBjaGFyYWN0ZXIKK211c3Qgbm90IGJlIHVzZWQgdGhpcyB3YXksIGJlY2F1c2UgaXRzIGNvZGUgaXMgemVybyBhbmQgdGhhdAorc2lnbmlmaWVzIGVuZC1vZi1pbnB1dC4KKworSGVyZSBpcyBhbiBleGFtcGxlIHNob3dpbmcgdGhlc2UgdGhpbmdzOgorCitAZXhhbXBsZQoraW50Cit5eWxleCAodm9pZCkKK0B7CisgIEBkb3Rze30KKyAgaWYgKGMgPT0gRU9GKSAgICAvKiBEZXRlY3QgZW5kLW9mLWlucHV0LiAgKi8KKyAgICByZXR1cm4gMDsKKyAgQGRvdHN7fQorICBpZiAoYyA9PSAnKycgfHwgYyA9PSAnLScpCisgICAgcmV0dXJuIGM7ICAgICAgLyogQXNzdW1lIHRva2VuIHR5cGUgZm9yIGArJyBpcyAnKycuICAqLworICBAZG90c3t9CisgIHJldHVybiBJTlQ7ICAgICAgLyogUmV0dXJuIHRoZSB0eXBlIG9mIHRoZSB0b2tlbi4gICovCisgIEBkb3Rze30KK0B9CitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitUaGlzIGludGVyZmFjZSBoYXMgYmVlbiBkZXNpZ25lZCBzbyB0aGF0IHRoZSBvdXRwdXQgZnJvbSB0aGUgQGNvZGV7bGV4fQordXRpbGl0eSBjYW4gYmUgdXNlZCB3aXRob3V0IGNoYW5nZSBhcyB0aGUgZGVmaW5pdGlvbiBvZiBAY29kZXt5eWxleH0uCisKK0lmIHRoZSBncmFtbWFyIHVzZXMgbGl0ZXJhbCBzdHJpbmcgdG9rZW5zLCB0aGVyZSBhcmUgdHdvIHdheXMgdGhhdAorQGNvZGV7eXlsZXh9IGNhbiBkZXRlcm1pbmUgdGhlIHRva2VuIHR5cGUgY29kZXMgZm9yIHRoZW06CisKK0BpdGVtaXplIEBidWxsZXQKK0BpdGVtCitJZiB0aGUgZ3JhbW1hciBkZWZpbmVzIHN5bWJvbGljIHRva2VuIG5hbWVzIGFzIGFsaWFzZXMgZm9yIHRoZQorbGl0ZXJhbCBzdHJpbmcgdG9rZW5zLCBAY29kZXt5eWxleH0gY2FuIHVzZSB0aGVzZSBzeW1ib2xpYyBuYW1lcyBsaWtlCithbGwgb3RoZXJzLiAgSW4gdGhpcyBjYXNlLCB0aGUgdXNlIG9mIHRoZSBsaXRlcmFsIHN0cmluZyB0b2tlbnMgaW4KK3RoZSBncmFtbWFyIGZpbGUgaGFzIG5vIGVmZmVjdCBvbiBAY29kZXt5eWxleH0uCisKK0BpdGVtCitAY29kZXt5eWxleH0gY2FuIGZpbmQgdGhlIG11bHRpY2hhcmFjdGVyIHRva2VuIGluIHRoZSBAY29kZXt5eXRuYW1lfQordGFibGUuICBUaGUgaW5kZXggb2YgdGhlIHRva2VuIGluIHRoZSB0YWJsZSBpcyB0aGUgdG9rZW4gdHlwZSdzIGNvZGUuCitUaGUgbmFtZSBvZiBhIG11bHRpY2hhcmFjdGVyIHRva2VuIGlzIHJlY29yZGVkIGluIEBjb2Rle3l5dG5hbWV9IHdpdGggYQorZG91YmxlLXF1b3RlLCB0aGUgdG9rZW4ncyBjaGFyYWN0ZXJzLCBhbmQgYW5vdGhlciBkb3VibGUtcXVvdGUuICBUaGUKK3Rva2VuJ3MgY2hhcmFjdGVycyBhcmUgZXNjYXBlZCBhcyBuZWNlc3NhcnkgdG8gYmUgc3VpdGFibGUgYXMgaW5wdXQKK3RvIEJpc29uLgorCitIZXJlJ3MgY29kZSBmb3IgbG9va2luZyB1cCBhIG11bHRpY2hhcmFjdGVyIHRva2VuIGluIEBjb2Rle3l5dG5hbWV9LAorYXNzdW1pbmcgdGhhdCB0aGUgY2hhcmFjdGVycyBvZiB0aGUgdG9rZW4gYXJlIHN0b3JlZCBpbgorQGNvZGV7dG9rZW5fYnVmZmVyfSwgYW5kIGFzc3VtaW5nIHRoYXQgdGhlIHRva2VuIGRvZXMgbm90IGNvbnRhaW4gYW55CitjaGFyYWN0ZXJzIGxpa2UgQHNhbXB7In0gdGhhdCByZXF1aXJlIGVzY2FwaW5nLgorCitAZXhhbXBsZQorZm9yIChpID0gMDsgaSA8IFlZTlRPS0VOUzsgaSsrKQorICBAeworICAgIGlmICh5eXRuYW1lW2ldICE9IDAKKyAgICAgICAgJiYgeXl0bmFtZVtpXVswXSA9PSAnIicKKyAgICAgICAgJiYgISBzdHJuY21wICh5eXRuYW1lW2ldICsgMSwgdG9rZW5fYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiAodG9rZW5fYnVmZmVyKSkKKyAgICAgICAgJiYgeXl0bmFtZVtpXVtzdHJsZW4gKHRva2VuX2J1ZmZlcikgKyAxXSA9PSAnIicKKyAgICAgICAgJiYgeXl0bmFtZVtpXVtzdHJsZW4gKHRva2VuX2J1ZmZlcikgKyAyXSA9PSAwKQorICAgICAgYnJlYWs7CisgIEB9CitAZW5kIGV4YW1wbGUKKworVGhlIEBjb2Rle3l5dG5hbWV9IHRhYmxlIGlzIGdlbmVyYXRlZCBvbmx5IGlmIHlvdSB1c2UgdGhlCitAY29kZXsldG9rZW4tdGFibGV9IGRlY2xhcmF0aW9uLiAgQHhyZWZ7RGVjbCBTdW1tYXJ5fS4KK0BlbmQgaXRlbWl6ZQorCitAbm9kZSBUb2tlbiBWYWx1ZXMKK0BzdWJzZWN0aW9uIFNlbWFudGljIFZhbHVlcyBvZiBUb2tlbnMKKworQHZpbmRleCB5eWx2YWwKK0luIGFuIG9yZGluYXJ5IChub25yZWVudHJhbnQpIHBhcnNlciwgdGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSB0b2tlbiBtdXN0CitiZSBzdG9yZWQgaW50byB0aGUgZ2xvYmFsIHZhcmlhYmxlIEBjb2Rle3l5bHZhbH0uICBXaGVuIHlvdSBhcmUgdXNpbmcKK2p1c3Qgb25lIGRhdGEgdHlwZSBmb3Igc2VtYW50aWMgdmFsdWVzLCBAY29kZXt5eWx2YWx9IGhhcyB0aGF0IHR5cGUuCitUaHVzLCBpZiB0aGUgdHlwZSBpcyBAY29kZXtpbnR9ICh0aGUgZGVmYXVsdCksIHlvdSBtaWdodCB3cml0ZSB0aGlzIGluCitAY29kZXt5eWxleH06CisKK0BleGFtcGxlCitAZ3JvdXAKKyAgQGRvdHN7fQorICB5eWx2YWwgPSB2YWx1ZTsgIC8qIFB1dCB2YWx1ZSBvbnRvIEJpc29uIHN0YWNrLiAgKi8KKyAgcmV0dXJuIElOVDsgICAgICAvKiBSZXR1cm4gdGhlIHR5cGUgb2YgdGhlIHRva2VuLiAgKi8KKyAgQGRvdHN7fQorQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK1doZW4geW91IGFyZSB1c2luZyBtdWx0aXBsZSBkYXRhIHR5cGVzLCBAY29kZXt5eWx2YWx9J3MgdHlwZSBpcyBhIHVuaW9uCittYWRlIGZyb20gdGhlIEBjb2RleyV1bmlvbn0gZGVjbGFyYXRpb24gKEBweHJlZntVbmlvbiBEZWNsLCAsVGhlCitDb2xsZWN0aW9uIG9mIFZhbHVlIFR5cGVzfSkuICBTbyB3aGVuIHlvdSBzdG9yZSBhIHRva2VuJ3MgdmFsdWUsIHlvdQorbXVzdCB1c2UgdGhlIHByb3BlciBtZW1iZXIgb2YgdGhlIHVuaW9uLiAgSWYgdGhlIEBjb2RleyV1bmlvbn0KK2RlY2xhcmF0aW9uIGxvb2tzIGxpa2UgdGhpczoKKworQGV4YW1wbGUKK0Bncm91cAorJXVuaW9uIEB7CisgIGludCBpbnR2YWw7CisgIGRvdWJsZSB2YWw7CisgIHN5bXJlYyAqdHB0cjsKK0B9CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50Cit0aGVuIHRoZSBjb2RlIGluIEBjb2Rle3l5bGV4fSBtaWdodCBsb29rIGxpa2UgdGhpczoKKworQGV4YW1wbGUKK0Bncm91cAorICBAZG90c3t9CisgIHl5bHZhbC5pbnR2YWwgPSB2YWx1ZTsgLyogUHV0IHZhbHVlIG9udG8gQmlzb24gc3RhY2suICAqLworICByZXR1cm4gSU5UOyAgICAgICAgICAgIC8qIFJldHVybiB0aGUgdHlwZSBvZiB0aGUgdG9rZW4uICAqLworICBAZG90c3t9CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworQG5vZGUgVG9rZW4gTG9jYXRpb25zCitAc3Vic2VjdGlvbiBUZXh0dWFsIExvY2F0aW9ucyBvZiBUb2tlbnMKKworQHZpbmRleCB5eWxsb2MKK0lmIHlvdSBhcmUgdXNpbmcgdGhlIEBzYW1we0BAQHZhcntufX0tZmVhdHVyZSAoQHB4cmVme1RyYWNraW5nIExvY2F0aW9uc30pCitpbiBhY3Rpb25zIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHRleHR1YWwgbG9jYXRpb25zIG9mIHRva2VucyBhbmQgZ3JvdXBpbmdzLAordGhlbiB5b3UgbXVzdCBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gQGNvZGV7eXlsZXh9LiAgVGhlIGZ1bmN0aW9uCitAY29kZXt5eXBhcnNlfSBleHBlY3RzIHRvIGZpbmQgdGhlIHRleHR1YWwgbG9jYXRpb24gb2YgYSB0b2tlbiBqdXN0IHBhcnNlZAoraW4gdGhlIGdsb2JhbCB2YXJpYWJsZSBAY29kZXt5eWxsb2N9LiAgU28gQGNvZGV7eXlsZXh9IG11c3Qgc3RvcmUgdGhlIHByb3BlcgorZGF0YSBpbiB0aGF0IHZhcmlhYmxlLgorCitCeSBkZWZhdWx0LCB0aGUgdmFsdWUgb2YgQGNvZGV7eXlsbG9jfSBpcyBhIHN0cnVjdHVyZSBhbmQgeW91IG5lZWQgb25seQoraW5pdGlhbGl6ZSB0aGUgbWVtYmVycyB0aGF0IGFyZSBnb2luZyB0byBiZSB1c2VkIGJ5IHRoZSBhY3Rpb25zLiAgVGhlCitmb3VyIG1lbWJlcnMgYXJlIGNhbGxlZCBAY29kZXtmaXJzdF9saW5lfSwgQGNvZGV7Zmlyc3RfY29sdW1ufSwKK0Bjb2Rle2xhc3RfbGluZX0gYW5kIEBjb2Rle2xhc3RfY29sdW1ufS4gIE5vdGUgdGhhdCB0aGUgdXNlIG9mIHRoaXMKK2ZlYXR1cmUgbWFrZXMgdGhlIHBhcnNlciBub3RpY2VhYmx5IHNsb3dlci4KKworQHRpbmRleCBZWUxUWVBFCitUaGUgZGF0YSB0eXBlIG9mIEBjb2Rle3l5bGxvY30gaGFzIHRoZSBuYW1lIEBjb2Rle1lZTFRZUEV9LgorCitAbm9kZSBQdXJlIENhbGxpbmcKK0BzdWJzZWN0aW9uIENhbGxpbmcgQ29udmVudGlvbnMgZm9yIFB1cmUgUGFyc2VycworCitXaGVuIHlvdSB1c2UgdGhlIEJpc29uIGRlY2xhcmF0aW9uIEBjb2RleyVkZWZpbmUgYXBpLnB1cmUgZnVsbH0gdG8gcmVxdWVzdCBhCitwdXJlLCByZWVudHJhbnQgcGFyc2VyLCB0aGUgZ2xvYmFsIGNvbW11bmljYXRpb24gdmFyaWFibGVzIEBjb2Rle3l5bHZhbH0KK2FuZCBAY29kZXt5eWxsb2N9IGNhbm5vdCBiZSB1c2VkLiAgKEB4cmVme1B1cmUgRGVjbCwgLEEgUHVyZSAoUmVlbnRyYW50KQorUGFyc2VyfS4pICBJbiBzdWNoIHBhcnNlcnMgdGhlIHR3byBnbG9iYWwgdmFyaWFibGVzIGFyZSByZXBsYWNlZCBieQorcG9pbnRlcnMgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byBAY29kZXt5eWxleH0uICBZb3UgbXVzdCBkZWNsYXJlIHRoZW0gYXMKK3Nob3duIGhlcmUsIGFuZCBwYXNzIHRoZSBpbmZvcm1hdGlvbiBiYWNrIGJ5IHN0b3JpbmcgaXQgdGhyb3VnaCB0aG9zZQorcG9pbnRlcnMuCisKK0BleGFtcGxlCitpbnQKK3l5bGV4IChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApCitAeworICBAZG90c3t9CisgICpsdmFscCA9IHZhbHVlOyAgLyogUHV0IHZhbHVlIG9udG8gQmlzb24gc3RhY2suICAqLworICByZXR1cm4gSU5UOyAgICAgIC8qIFJldHVybiB0aGUgdHlwZSBvZiB0aGUgdG9rZW4uICAqLworICBAZG90c3t9CitAfQorQGVuZCBleGFtcGxlCisKK0lmIHRoZSBncmFtbWFyIGZpbGUgZG9lcyBub3QgdXNlIHRoZSBAc2FtcHtAQH0gY29uc3RydWN0cyB0byByZWZlciB0bwordGV4dHVhbCBsb2NhdGlvbnMsIHRoZW4gdGhlIHR5cGUgQGNvZGV7WVlMVFlQRX0gd2lsbCBub3QgYmUgZGVmaW5lZC4gIEluCit0aGlzIGNhc2UsIG9taXQgdGhlIHNlY29uZCBhcmd1bWVudDsgQGNvZGV7eXlsZXh9IHdpbGwgYmUgY2FsbGVkIHdpdGgKK29ubHkgb25lIGFyZ3VtZW50LgorCisKK0lmIHlvdSB3aXNoIHRvIHBhc3MgdGhlIGFkZGl0aW9uYWwgcGFyYW1ldGVyIGRhdGEgdG8gQGNvZGV7eXlsZXh9LCB1c2UKK0Bjb2RleyVsZXgtcGFyYW19IGp1c3QgbGlrZSBAY29kZXslcGFyc2UtcGFyYW19IChAcHhyZWZ7UGFyc2VyCitGdW5jdGlvbn0pLgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gbGV4LXBhcmFtIEB7QHZhcnthcmd1bWVudC1kZWNsYXJhdGlvbn1AfQorQGZpbmRleCAlbGV4LXBhcmFtCitEZWNsYXJlIHRoYXQgdGhlIGJyYWNlZC1jb2RlIEB2YXJ7YXJndW1lbnQtZGVjbGFyYXRpb259IGlzIGFuCithZGRpdGlvbmFsIEBjb2Rle3l5bGV4fSBhcmd1bWVudCBkZWNsYXJhdGlvbi4KK0BlbmQgZGVmZm4KKworQG5vaW5kZW50CitGb3IgaW5zdGFuY2U6CisKK0BleGFtcGxlCislbGV4LXBhcmFtICAgQHtpbnQgKm5hc3RpbmVzc0B9CitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CityZXN1bHRzIGluIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlOgorCitAZXhhbXBsZQoraW50IHl5bGV4IChpbnQgKm5hc3RpbmVzcyk7CitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitJZiBAY29kZXslZGVmaW5lIGFwaS5wdXJlIGZ1bGx9IChvciBqdXN0IEBjb2RleyVkZWZpbmUgYXBpLnB1cmV9KSBpcyBhZGRlZDoKKworQGV4YW1wbGUKK2ludCB5eWxleCAoWVlTVFlQRSAqbHZhbHAsIGludCAqbmFzdGluZXNzKTsKK0BlbmQgZXhhbXBsZQorCitAbm9kZSBFcnJvciBSZXBvcnRpbmcKK0BzZWN0aW9uIFRoZSBFcnJvciBSZXBvcnRpbmcgRnVuY3Rpb24gQGNvZGV7eXllcnJvcn0KK0BjaW5kZXggZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uCitAZmluZGV4IHl5ZXJyb3IKK0BjaW5kZXggcGFyc2UgZXJyb3IKK0BjaW5kZXggc3ludGF4IGVycm9yCisKK1RoZSBCaXNvbiBwYXJzZXIgZGV0ZWN0cyBhIEBkZm57c3ludGF4IGVycm9yfSBvciBAZGZue3BhcnNlIGVycm9yfQord2hlbmV2ZXIgaXQgcmVhZHMgYSB0b2tlbiB3aGljaCBjYW5ub3Qgc2F0aXNmeSBhbnkgc3ludGF4IHJ1bGUuICBBbgorYWN0aW9uIGluIHRoZSBncmFtbWFyIGNhbiBhbHNvIGV4cGxpY2l0bHkgcHJvY2xhaW0gYW4gZXJyb3IsIHVzaW5nIHRoZQorbWFjcm8gQGNvZGV7WVlFUlJPUn0gKEBweHJlZntBY3Rpb24gRmVhdHVyZXMsICxTcGVjaWFsIEZlYXR1cmVzIGZvciBVc2UKK2luIEFjdGlvbnN9KS4KKworVGhlIEJpc29uIHBhcnNlciBleHBlY3RzIHRvIHJlcG9ydCB0aGUgZXJyb3IgYnkgY2FsbGluZyBhbiBlcnJvcgorcmVwb3J0aW5nIGZ1bmN0aW9uIG5hbWVkIEBjb2Rle3l5ZXJyb3J9LCB3aGljaCB5b3UgbXVzdCBzdXBwbHkuICBJdCBpcworY2FsbGVkIGJ5IEBjb2Rle3l5cGFyc2V9IHdoZW5ldmVyIGEgc3ludGF4IGVycm9yIGlzIGZvdW5kLCBhbmQgaXQKK3JlY2VpdmVzIG9uZSBhcmd1bWVudC4gIEZvciBhIHN5bnRheCBlcnJvciwgdGhlIHN0cmluZyBpcyBub3JtYWxseQorQHd7QGNvZGV7InN5bnRheCBlcnJvciJ9fS4KKworQGZpbmRleCAlZXJyb3ItdmVyYm9zZQorSWYgeW91IGludm9rZSB0aGUgZGlyZWN0aXZlIEBjb2RleyVlcnJvci12ZXJib3NlfSBpbiB0aGUgQmlzb24gZGVjbGFyYXRpb25zCitzZWN0aW9uIChAcHhyZWZ7Qmlzb24gRGVjbGFyYXRpb25zLCAsVGhlIEJpc29uIERlY2xhcmF0aW9ucyBTZWN0aW9ufSksIHRoZW4KK0Jpc29uIHByb3ZpZGVzIGEgbW9yZSB2ZXJib3NlIGFuZCBzcGVjaWZpYyBlcnJvciBtZXNzYWdlIHN0cmluZyBpbnN0ZWFkIG9mCitqdXN0IHBsYWluIEB3e0Bjb2RleyJzeW50YXggZXJyb3IifX0uICBIb3dldmVyLCB0aGF0IG1lc3NhZ2Ugc29tZXRpbWVzCitjb250YWlucyBpbmNvcnJlY3QgaW5mb3JtYXRpb24gaWYgTEFDIGlzIG5vdCBlbmFibGVkIChAcHhyZWZ7TEFDfSkuCisKK1RoZSBwYXJzZXIgY2FuIGRldGVjdCBvbmUgb3RoZXIga2luZCBvZiBlcnJvcjogbWVtb3J5IGV4aGF1c3Rpb24uICBUaGlzCitjYW4gaGFwcGVuIHdoZW4gdGhlIGlucHV0IGNvbnRhaW5zIGNvbnN0cnVjdGlvbnMgdGhhdCBhcmUgdmVyeSBkZWVwbHkKK25lc3RlZC4gIEl0IGlzbid0IGxpa2VseSB5b3Ugd2lsbCBlbmNvdW50ZXIgdGhpcywgc2luY2UgdGhlIEJpc29uCitwYXJzZXIgbm9ybWFsbHkgZXh0ZW5kcyBpdHMgc3RhY2sgYXV0b21hdGljYWxseSB1cCB0byBhIHZlcnkgbGFyZ2UgbGltaXQuICBCdXQKK2lmIG1lbW9yeSBpcyBleGhhdXN0ZWQsIEBjb2Rle3l5cGFyc2V9IGNhbGxzIEBjb2Rle3l5ZXJyb3J9IGluIHRoZSB1c3VhbAorZmFzaGlvbiwgZXhjZXB0IHRoYXQgdGhlIGFyZ3VtZW50IHN0cmluZyBpcyBAd3tAY29kZXsibWVtb3J5IGV4aGF1c3RlZCJ9fS4KKworSW4gc29tZSBjYXNlcyBkaWFnbm9zdGljcyBsaWtlIEB3e0Bjb2RleyJzeW50YXggZXJyb3IifX0gYXJlCit0cmFuc2xhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSBFbmdsaXNoIHRvIHNvbWUgb3RoZXIgbGFuZ3VhZ2UgYmVmb3JlCit0aGV5IGFyZSBwYXNzZWQgdG8gQGNvZGV7eXllcnJvcn0uICBAeHJlZntJbnRlcm5hdGlvbmFsaXphdGlvbn0uCisKK1RoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbiBzdWZmaWNlcyBpbiBzaW1wbGUgcHJvZ3JhbXM6CisKK0BleGFtcGxlCitAZ3JvdXAKK3ZvaWQKK3l5ZXJyb3IgKGNoYXIgY29uc3QgKnMpCitAeworQGVuZCBncm91cAorQGdyb3VwCisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBzKTsKK0B9CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworQWZ0ZXIgQGNvZGV7eXllcnJvcn0gcmV0dXJucyB0byBAY29kZXt5eXBhcnNlfSwgdGhlIGxhdHRlciB3aWxsIGF0dGVtcHQKK2Vycm9yIHJlY292ZXJ5IGlmIHlvdSBoYXZlIHdyaXR0ZW4gc3VpdGFibGUgZXJyb3IgcmVjb3ZlcnkgZ3JhbW1hciBydWxlcworKEBweHJlZntFcnJvciBSZWNvdmVyeX0pLiAgSWYgcmVjb3ZlcnkgaXMgaW1wb3NzaWJsZSwgQGNvZGV7eXlwYXJzZX0gd2lsbAoraW1tZWRpYXRlbHkgcmV0dXJuIDEuCisKK09idmlvdXNseSwgaW4gbG9jYXRpb24gdHJhY2tpbmcgcHVyZSBwYXJzZXJzLCBAY29kZXt5eWVycm9yfSBzaG91bGQgaGF2ZQorYW4gYWNjZXNzIHRvIHRoZSBjdXJyZW50IGxvY2F0aW9uLiBXaXRoIEBjb2RleyVkZWZpbmUgYXBpLnB1cmV9LCB0aGlzIGlzCitpbmRlZWQgdGhlIGNhc2UgZm9yIHRoZSBHTFIgcGFyc2VycywgYnV0IG5vdCBmb3IgdGhlIFlhY2MgcGFyc2VyLCBmb3IKK2hpc3RvcmljYWwgcmVhc29ucywgYW5kIHRoaXMgaXMgdGhlIHdoeSBAY29kZXslZGVmaW5lIGFwaS5wdXJlIGZ1bGx9IHNob3VsZCBiZQorcHJlZmVyZWQgb3ZlciBAY29kZXslZGVmaW5lIGFwaS5wdXJlfS4KKworV2hlbiBAY29kZXslbG9jYXRpb25zICVkZWZpbmUgYXBpLnB1cmUgZnVsbH0gaXMgdXNlZCwgQGNvZGV7eXllcnJvcn0gaGFzIHRoZQorZm9sbG93aW5nIHNpZ25hdHVyZToKKworQGV4YW1wbGUKK3ZvaWQgeXllcnJvciAoWVlMVFlQRSAqbG9jcCwgY2hhciBjb25zdCAqbXNnKTsKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK1RoZSBwcm90b3R5cGVzIGFyZSBvbmx5IGluZGljYXRpb25zIG9mIGhvdyB0aGUgY29kZSBwcm9kdWNlZCBieSBCaXNvbgordXNlcyBAY29kZXt5eWVycm9yfS4gIEJpc29uLWdlbmVyYXRlZCBjb2RlIGFsd2F5cyBpZ25vcmVzIHRoZSByZXR1cm5lZAordmFsdWUsIHNvIEBjb2Rle3l5ZXJyb3J9IGNhbiByZXR1cm4gYW55IHR5cGUsIGluY2x1ZGluZyBAY29kZXt2b2lkfS4KK0Fsc28sIEBjb2Rle3l5ZXJyb3J9IGNhbiBiZSBhIHZhcmlhZGljIGZ1bmN0aW9uOyB0aGF0IGlzIHdoeSB0aGUKK21lc3NhZ2UgaXMgYWx3YXlzIHBhc3NlZCBsYXN0LgorCitUcmFkaXRpb25hbGx5IEBjb2Rle3l5ZXJyb3J9IHJldHVybnMgYW4gQGNvZGV7aW50fSB0aGF0IGlzIGFsd2F5cworaWdub3JlZCwgYnV0IHRoaXMgaXMgcHVyZWx5IGZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGFuZCBAY29kZXt2b2lkfSBpcworcHJlZmVyYWJsZSBzaW5jZSBpdCBtb3JlIGFjY3VyYXRlbHkgZGVzY3JpYmVzIHRoZSByZXR1cm4gdHlwZSBmb3IKK0Bjb2Rle3l5ZXJyb3J9LgorCitAdmluZGV4IHl5bmVycnMKK1RoZSB2YXJpYWJsZSBAY29kZXt5eW5lcnJzfSBjb250YWlucyB0aGUgbnVtYmVyIG9mIHN5bnRheCBlcnJvcnMKK3JlcG9ydGVkIHNvIGZhci4gIE5vcm1hbGx5IHRoaXMgdmFyaWFibGUgaXMgZ2xvYmFsOyBidXQgaWYgeW91CityZXF1ZXN0IGEgcHVyZSBwYXJzZXIgKEBweHJlZntQdXJlIERlY2wsICxBIFB1cmUgKFJlZW50cmFudCkgUGFyc2VyfSkKK3RoZW4gaXQgaXMgYSBsb2NhbCB2YXJpYWJsZSB3aGljaCBvbmx5IHRoZSBhY3Rpb25zIGNhbiBhY2Nlc3MuCisKK0Bub2RlIEFjdGlvbiBGZWF0dXJlcworQHNlY3Rpb24gU3BlY2lhbCBGZWF0dXJlcyBmb3IgVXNlIGluIEFjdGlvbnMKK0BjaW5kZXggc3VtbWFyeSwgYWN0aW9uIGZlYXR1cmVzCitAY2luZGV4IGFjdGlvbiBmZWF0dXJlcyBzdW1tYXJ5CisKK0hlcmUgaXMgYSB0YWJsZSBvZiBCaXNvbiBjb25zdHJ1Y3RzLCB2YXJpYWJsZXMgYW5kIG1hY3JvcyB0aGF0CithcmUgdXNlZnVsIGluIGFjdGlvbnMuCisKK0BkZWZmbiB7VmFyaWFibGV9ICQkCitBY3RzIGxpa2UgYSB2YXJpYWJsZSB0aGF0IGNvbnRhaW5zIHRoZSBzZW1hbnRpYyB2YWx1ZSBmb3IgdGhlCitncm91cGluZyBtYWRlIGJ5IHRoZSBjdXJyZW50IHJ1bGUuICBAeHJlZntBY3Rpb25zfS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtWYXJpYWJsZX0gJEB2YXJ7bn0KK0FjdHMgbGlrZSBhIHZhcmlhYmxlIHRoYXQgY29udGFpbnMgdGhlIHNlbWFudGljIHZhbHVlIGZvciB0aGUKK0B2YXJ7bn10aCBjb21wb25lbnQgb2YgdGhlIGN1cnJlbnQgcnVsZS4gIEB4cmVme0FjdGlvbnN9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge1ZhcmlhYmxlfSAkPEB2YXJ7dHlwZWFsdH0+JAorTGlrZSBAY29kZXskJH0gYnV0IHNwZWNpZmllcyBhbHRlcm5hdGl2ZSBAdmFye3R5cGVhbHR9IGluIHRoZSB1bmlvbgorc3BlY2lmaWVkIGJ5IHRoZSBAY29kZXsldW5pb259IGRlY2xhcmF0aW9uLiAgQHhyZWZ7QWN0aW9uIFR5cGVzLCAsRGF0YQorVHlwZXMgb2YgVmFsdWVzIGluIEFjdGlvbnN9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge1ZhcmlhYmxlfSAkPEB2YXJ7dHlwZWFsdH0+QHZhcntufQorTGlrZSBAY29kZXskQHZhcntufX0gYnV0IHNwZWNpZmllcyBhbHRlcm5hdGl2ZSBAdmFye3R5cGVhbHR9IGluIHRoZQordW5pb24gc3BlY2lmaWVkIGJ5IHRoZSBAY29kZXsldW5pb259IGRlY2xhcmF0aW9uLgorQHhyZWZ7QWN0aW9uIFR5cGVzLCAsRGF0YSBUeXBlcyBvZiBWYWx1ZXMgaW4gQWN0aW9uc30uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7TWFjcm99IFlZQUJPUlQgQGNvZGV7O30KK1JldHVybiBpbW1lZGlhdGVseSBmcm9tIEBjb2Rle3l5cGFyc2V9LCBpbmRpY2F0aW5nIGZhaWx1cmUuCitAeHJlZntQYXJzZXIgRnVuY3Rpb24sICxUaGUgUGFyc2VyIEZ1bmN0aW9uIEBjb2Rle3l5cGFyc2V9fS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtNYWNyb30gWVlBQ0NFUFQgQGNvZGV7O30KK1JldHVybiBpbW1lZGlhdGVseSBmcm9tIEBjb2Rle3l5cGFyc2V9LCBpbmRpY2F0aW5nIHN1Y2Nlc3MuCitAeHJlZntQYXJzZXIgRnVuY3Rpb24sICxUaGUgUGFyc2VyIEZ1bmN0aW9uIEBjb2Rle3l5cGFyc2V9fS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtNYWNyb30gWVlCQUNLVVAgKEB2YXJ7dG9rZW59LCBAdmFye3ZhbHVlfSlAY29kZXs7fQorQGZpbmRleCBZWUJBQ0tVUAorVW5zaGlmdCBhIHRva2VuLiAgVGhpcyBtYWNybyBpcyBhbGxvd2VkIG9ubHkgZm9yIHJ1bGVzIHRoYXQgcmVkdWNlCithIHNpbmdsZSB2YWx1ZSwgYW5kIG9ubHkgd2hlbiB0aGVyZSBpcyBubyBsb29rYWhlYWQgdG9rZW4uCitJdCBpcyBhbHNvIGRpc2FsbG93ZWQgaW4gR0xSIHBhcnNlcnMuCitJdCBpbnN0YWxscyBhIGxvb2thaGVhZCB0b2tlbiB3aXRoIHRva2VuIHR5cGUgQHZhcnt0b2tlbn0gYW5kCitzZW1hbnRpYyB2YWx1ZSBAdmFye3ZhbHVlfTsgdGhlbiBpdCBkaXNjYXJkcyB0aGUgdmFsdWUgdGhhdCB3YXMKK2dvaW5nIHRvIGJlIHJlZHVjZWQgYnkgdGhpcyBydWxlLgorCitJZiB0aGUgbWFjcm8gaXMgdXNlZCB3aGVuIGl0IGlzIG5vdCB2YWxpZCwgc3VjaCBhcyB3aGVuIHRoZXJlIGlzCithIGxvb2thaGVhZCB0b2tlbiBhbHJlYWR5LCB0aGVuIGl0IHJlcG9ydHMgYSBzeW50YXggZXJyb3Igd2l0aAorYSBtZXNzYWdlIEBzYW1we2Nhbm5vdCBiYWNrIHVwfSBhbmQgcGVyZm9ybXMgb3JkaW5hcnkgZXJyb3IKK3JlY292ZXJ5LgorCitJbiBlaXRoZXIgY2FzZSwgdGhlIHJlc3Qgb2YgdGhlIGFjdGlvbiBpcyBub3QgZXhlY3V0ZWQuCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7TWFjcm99IFlZRU1QVFkKK1ZhbHVlIHN0b3JlZCBpbiBAY29kZXt5eWNoYXJ9IHdoZW4gdGhlcmUgaXMgbm8gbG9va2FoZWFkIHRva2VuLgorQGVuZCBkZWZmbgorCitAZGVmZm4ge01hY3JvfSBZWUVPRgorVmFsdWUgc3RvcmVkIGluIEBjb2Rle3l5Y2hhcn0gd2hlbiB0aGUgbG9va2FoZWFkIGlzIHRoZSBlbmQgb2YgdGhlIGlucHV0CitzdHJlYW0uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7TWFjcm99IFlZRVJST1IgQGNvZGV7O30KK0NhdXNlIGFuIGltbWVkaWF0ZSBzeW50YXggZXJyb3IuICBUaGlzIHN0YXRlbWVudCBpbml0aWF0ZXMgZXJyb3IKK3JlY292ZXJ5IGp1c3QgYXMgaWYgdGhlIHBhcnNlciBpdHNlbGYgaGFkIGRldGVjdGVkIGFuIGVycm9yOyBob3dldmVyLCBpdAorZG9lcyBub3QgY2FsbCBAY29kZXt5eWVycm9yfSwgYW5kIGRvZXMgbm90IHByaW50IGFueSBtZXNzYWdlLiAgSWYgeW91Cit3YW50IHRvIHByaW50IGFuIGVycm9yIG1lc3NhZ2UsIGNhbGwgQGNvZGV7eXllcnJvcn0gZXhwbGljaXRseSBiZWZvcmUKK3RoZSBAc2FtcHtZWUVSUk9SO30gc3RhdGVtZW50LiAgQHhyZWZ7RXJyb3IgUmVjb3Zlcnl9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge01hY3JvfSBZWVJFQ09WRVJJTkcKK0BmaW5kZXggWVlSRUNPVkVSSU5HCitUaGUgZXhwcmVzc2lvbiBAY29kZXtZWVJFQ09WRVJJTkcgKCl9IHlpZWxkcyAxIHdoZW4gdGhlIHBhcnNlcgoraXMgcmVjb3ZlcmluZyBmcm9tIGEgc3ludGF4IGVycm9yLCBhbmQgMCBvdGhlcndpc2UuCitAeHJlZntFcnJvciBSZWNvdmVyeX0uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7VmFyaWFibGV9IHl5Y2hhcgorVmFyaWFibGUgY29udGFpbmluZyBlaXRoZXIgdGhlIGxvb2thaGVhZCB0b2tlbiwgb3IgQGNvZGV7WVlFT0Z9IHdoZW4gdGhlCitsb29rYWhlYWQgaXMgdGhlIGVuZCBvZiB0aGUgaW5wdXQgc3RyZWFtLCBvciBAY29kZXtZWUVNUFRZfSB3aGVuIG5vIGxvb2thaGVhZAoraGFzIGJlZW4gcGVyZm9ybWVkIHNvIHRoZSBuZXh0IHRva2VuIGlzIG5vdCB5ZXQga25vd24uCitEbyBub3QgbW9kaWZ5IEBjb2Rle3l5Y2hhcn0gaW4gYSBkZWZlcnJlZCBzZW1hbnRpYyBhY3Rpb24gKEBweHJlZntHTFIgU2VtYW50aWMKK0FjdGlvbnN9KS4KK0B4cmVme0xvb2thaGVhZCwgLExvb2thaGVhZCBUb2tlbnN9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge01hY3JvfSB5eWNsZWFyaW4gQGNvZGV7O30KK0Rpc2NhcmQgdGhlIGN1cnJlbnQgbG9va2FoZWFkIHRva2VuLiAgVGhpcyBpcyB1c2VmdWwgcHJpbWFyaWx5IGluCitlcnJvciBydWxlcy4KK0RvIG5vdCBpbnZva2UgQGNvZGV7eXljbGVhcmlufSBpbiBhIGRlZmVycmVkIHNlbWFudGljIGFjdGlvbiAoQHB4cmVme0dMUgorU2VtYW50aWMgQWN0aW9uc30pLgorQHhyZWZ7RXJyb3IgUmVjb3Zlcnl9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge01hY3JvfSB5eWVycm9rIEBjb2Rlezt9CitSZXN1bWUgZ2VuZXJhdGluZyBlcnJvciBtZXNzYWdlcyBpbW1lZGlhdGVseSBmb3Igc3Vic2VxdWVudCBzeW50YXgKK2Vycm9ycy4gIFRoaXMgaXMgdXNlZnVsIHByaW1hcmlseSBpbiBlcnJvciBydWxlcy4KK0B4cmVme0Vycm9yIFJlY292ZXJ5fS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtWYXJpYWJsZX0geXlsbG9jCitWYXJpYWJsZSBjb250YWluaW5nIHRoZSBsb29rYWhlYWQgdG9rZW4gbG9jYXRpb24gd2hlbiBAY29kZXt5eWNoYXJ9IGlzIG5vdCBzZXQKK3RvIEBjb2Rle1lZRU1QVFl9IG9yIEBjb2Rle1lZRU9GfS4KK0RvIG5vdCBtb2RpZnkgQGNvZGV7eXlsbG9jfSBpbiBhIGRlZmVycmVkIHNlbWFudGljIGFjdGlvbiAoQHB4cmVme0dMUiBTZW1hbnRpYworQWN0aW9uc30pLgorQHhyZWZ7QWN0aW9ucyBhbmQgTG9jYXRpb25zLCAsQWN0aW9ucyBhbmQgTG9jYXRpb25zfS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtWYXJpYWJsZX0geXlsdmFsCitWYXJpYWJsZSBjb250YWluaW5nIHRoZSBsb29rYWhlYWQgdG9rZW4gc2VtYW50aWMgdmFsdWUgd2hlbiBAY29kZXt5eWNoYXJ9IGlzCitub3Qgc2V0IHRvIEBjb2Rle1lZRU1QVFl9IG9yIEBjb2Rle1lZRU9GfS4KK0RvIG5vdCBtb2RpZnkgQGNvZGV7eXlsdmFsfSBpbiBhIGRlZmVycmVkIHNlbWFudGljIGFjdGlvbiAoQHB4cmVme0dMUiBTZW1hbnRpYworQWN0aW9uc30pLgorQHhyZWZ7QWN0aW9ucywgLEFjdGlvbnN9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge1ZhbHVlfSBAQCQKK0FjdHMgbGlrZSBhIHN0cnVjdHVyZSB2YXJpYWJsZSBjb250YWluaW5nIGluZm9ybWF0aW9uIG9uIHRoZSB0ZXh0dWFsCitsb2NhdGlvbiBvZiB0aGUgZ3JvdXBpbmcgbWFkZSBieSB0aGUgY3VycmVudCBydWxlLiAgQHhyZWZ7VHJhY2tpbmcKK0xvY2F0aW9uc30uCisKK0BjIENoZWNrIGlmIHRob3NlIHBhcmFncmFwaHMgYXJlIHN0aWxsIHVzZWZ1bCBvciBub3QuCisKK0BjIEBleGFtcGxlCitAYyBzdHJ1Y3QgQHsKK0BjICAgaW50IGZpcnN0X2xpbmUsIGxhc3RfbGluZTsKK0BjICAgaW50IGZpcnN0X2NvbHVtbiwgbGFzdF9jb2x1bW47CitAYyBAfTsKK0BjIEBlbmQgZXhhbXBsZQorCitAYyBUaHVzLCB0byBnZXQgdGhlIHN0YXJ0aW5nIGxpbmUgbnVtYmVyIG9mIHRoZSB0aGlyZCBjb21wb25lbnQsIHlvdSB3b3VsZAorQGMgdXNlIEBzYW1we0BAMy5maXJzdF9saW5lfS4KKworQGMgSW4gb3JkZXIgZm9yIHRoZSBtZW1iZXJzIG9mIHRoaXMgc3RydWN0dXJlIHRvIGNvbnRhaW4gdmFsaWQgaW5mb3JtYXRpb24sCitAYyB5b3UgbXVzdCBtYWtlIEBjb2Rle3l5bGV4fSBzdXBwbHkgdGhpcyBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIHRva2VuLgorQGMgSWYgeW91IG5lZWQgb25seSBjZXJ0YWluIG1lbWJlcnMsIHRoZW4gQGNvZGV7eXlsZXh9IG5lZWQgb25seSBmaWxsIGluCitAYyB0aG9zZSBtZW1iZXJzLgorCitAYyBUaGUgdXNlIG9mIHRoaXMgZmVhdHVyZSBtYWtlcyB0aGUgcGFyc2VyIG5vdGljZWFibHkgc2xvd2VyLgorQGVuZCBkZWZmbgorCitAZGVmZm4ge1ZhbHVlfSBAQEB2YXJ7bn0KK0BmaW5kZXggQEBAdmFye259CitBY3RzIGxpa2UgYSBzdHJ1Y3R1cmUgdmFyaWFibGUgY29udGFpbmluZyBpbmZvcm1hdGlvbiBvbiB0aGUgdGV4dHVhbAorbG9jYXRpb24gb2YgdGhlIEB2YXJ7bn10aCBjb21wb25lbnQgb2YgdGhlIGN1cnJlbnQgcnVsZS4gIEB4cmVme1RyYWNraW5nCitMb2NhdGlvbnN9LgorQGVuZCBkZWZmbgorCitAbm9kZSBJbnRlcm5hdGlvbmFsaXphdGlvbgorQHNlY3Rpb24gUGFyc2VyIEludGVybmF0aW9uYWxpemF0aW9uCitAY2luZGV4IGludGVybmF0aW9uYWxpemF0aW9uCitAY2luZGV4IGkxOG4KK0BjaW5kZXggTkxTCitAY2luZGV4IGdldHRleHQKK0BjaW5kZXggYmlzb24tcG8KKworQSBCaXNvbi1nZW5lcmF0ZWQgcGFyc2VyIGNhbiBwcmludCBkaWFnbm9zdGljcywgaW5jbHVkaW5nIGVycm9yIGFuZAordHJhY2luZyBtZXNzYWdlcy4gIEJ5IGRlZmF1bHQsIHRoZXkgYXBwZWFyIGluIEVuZ2xpc2guICBIb3dldmVyLCBCaXNvbgorYWxzbyBzdXBwb3J0cyBvdXRwdXR0aW5nIGRpYWdub3N0aWNzIGluIHRoZSB1c2VyJ3MgbmF0aXZlIGxhbmd1YWdlLiAgVG8KK21ha2UgdGhpcyB3b3JrLCB0aGUgdXNlciBzaG91bGQgc2V0IHRoZSB1c3VhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCitAeHJlZntVc2VycywgLCBUaGUgVXNlcidzIFZpZXcsIGdldHRleHQsIEdOVSBAY29kZXtnZXR0ZXh0fSB1dGlsaXRpZXN9LgorRm9yIGV4YW1wbGUsIHRoZSBzaGVsbCBjb21tYW5kIEBzYW1we2V4cG9ydCBMQ19BTEw9ZnJfQ0EuVVRGLTh9IG1pZ2h0CitzZXQgdGhlIHVzZXIncyBsb2NhbGUgdG8gRnJlbmNoIENhbmFkaWFuIHVzaW5nIHRoZSBVVEYtOAorZW5jb2RpbmcuICBUaGUgZXhhY3Qgc2V0IG9mIGF2YWlsYWJsZSBsb2NhbGVzIGRlcGVuZHMgb24gdGhlIHVzZXIncworaW5zdGFsbGF0aW9uLgorCitUaGUgbWFpbnRhaW5lciBvZiBhIHBhY2thZ2UgdGhhdCB1c2VzIGEgQmlzb24tZ2VuZXJhdGVkIHBhcnNlciBlbmFibGVzCit0aGUgaW50ZXJuYXRpb25hbGl6YXRpb24gb2YgdGhlIHBhcnNlcidzIG91dHB1dCB0aHJvdWdoIHRoZSBmb2xsb3dpbmcKK3N0ZXBzLiAgSGVyZSB3ZSBhc3N1bWUgYSBwYWNrYWdlIHRoYXQgdXNlcyBHTlUgQXV0b2NvbmYgYW5kCitHTlUgQXV0b21ha2UuCisKK0BlbnVtZXJhdGUKK0BpdGVtCitAY2luZGV4IGJpc29uLWkxOG4ubTQKK0ludG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBHTlUgQXV0b2NvbmYgbWFjcm9zIHVzZWQKK2J5IHRoZSBwYWNrYWdlIC0tLW9mdGVuIGNhbGxlZCBAZmlsZXttNH0tLS0gY29weSB0aGUKK0BmaWxle2Jpc29uLWkxOG4ubTR9IGZpbGUgaW5zdGFsbGVkIGJ5IEJpc29uIHVuZGVyCitAc2FtcHtzaGFyZS9hY2xvY2FsL2Jpc29uLWkxOG4ubTR9IGluIEJpc29uJ3MgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KK0ZvciBleGFtcGxlOgorCitAZXhhbXBsZQorY3AgL3Vzci9sb2NhbC9zaGFyZS9hY2xvY2FsL2Jpc29uLWkxOG4ubTQgbTQvYmlzb24taTE4bi5tNAorQGVuZCBleGFtcGxlCisKK0BpdGVtCitAZmluZGV4IEJJU09OX0kxOE4KK0B2aW5kZXggQklTT05fTE9DQUxFRElSCitAdmluZGV4IFlZRU5BQkxFX05MUworSW4gdGhlIHRvcC1sZXZlbCBAZmlsZXtjb25maWd1cmUuYWN9LCBhZnRlciB0aGUgQGNvZGV7QU1fR05VX0dFVFRFWFR9CitpbnZvY2F0aW9uLCBhZGQgYW4gaW52b2NhdGlvbiBvZiBAY29kZXtCSVNPTl9JMThOfS4gIFRoaXMgbWFjcm8gaXMKK2RlZmluZWQgaW4gdGhlIGZpbGUgQGZpbGV7Ymlzb24taTE4bi5tNH0gdGhhdCB5b3UgY29waWVkIGVhcmxpZXIuICBJdAorY2F1c2VzIEBzYW1we2NvbmZpZ3VyZX0gdG8gZmluZCB0aGUgdmFsdWUgb2YgdGhlCitAY29kZXtCSVNPTl9MT0NBTEVESVJ9IHZhcmlhYmxlLCBhbmQgaXQgZGVmaW5lcyB0aGUgc291cmNlLWxhbmd1YWdlCitzeW1ib2wgQGNvZGV7WVlFTkFCTEVfTkxTfSB0byBlbmFibGUgdHJhbnNsYXRpb25zIGluIHRoZQorQmlzb24tZ2VuZXJhdGVkIHBhcnNlci4KKworQGl0ZW0KK0luIHRoZSBAY29kZXttYWlufSBmdW5jdGlvbiBvZiB5b3VyIHByb2dyYW0sIGRlc2lnbmF0ZSB0aGUgZGlyZWN0b3J5Citjb250YWluaW5nIEJpc29uJ3MgcnVudGltZSBtZXNzYWdlIGNhdGFsb2csIHRocm91Z2ggYSBjYWxsIHRvCitAc2FtcHtiaW5kdGV4dGRvbWFpbn0gd2l0aCBkb21haW4gbmFtZSBAc2FtcHtiaXNvbi1ydW50aW1lfS4KK0ZvciBleGFtcGxlOgorCitAZXhhbXBsZQorYmluZHRleHRkb21haW4gKCJiaXNvbi1ydW50aW1lIiwgQklTT05fTE9DQUxFRElSKTsKK0BlbmQgZXhhbXBsZQorCitUeXBpY2FsbHkgdGhpcyBhcHBlYXJzIGFmdGVyIGFueSBvdGhlciBjYWxsIEBjb2Rle2JpbmR0ZXh0ZG9tYWluCisoUEFDS0FHRSwgTE9DQUxFRElSKX0gdGhhdCB5b3VyIHBhY2thZ2UgYWxyZWFkeSBoYXMuICBIZXJlIHdlIHJlbHkgb24KK0BzYW1we0JJU09OX0xPQ0FMRURJUn0gdG8gYmUgZGVmaW5lZCBhcyBhIHN0cmluZyB0aHJvdWdoIHRoZQorQGZpbGV7TWFrZWZpbGV9LgorCitAaXRlbQorSW4gdGhlIEBmaWxle01ha2VmaWxlLmFtfSB0aGF0IGNvbnRyb2xzIHRoZSBjb21waWxhdGlvbiBvZiB0aGUgQGNvZGV7bWFpbn0KK2Z1bmN0aW9uLCBtYWtlIEBzYW1we0JJU09OX0xPQ0FMRURJUn0gYXZhaWxhYmxlIGFzIGEgQyBwcmVwcm9jZXNzb3IgbWFjcm8sCitlaXRoZXIgaW4gQHNhbXB7REVGU30gb3IgaW4gQHNhbXB7QU1fQ1BQRkxBR1N9LiAgRm9yIGV4YW1wbGU6CisKK0BleGFtcGxlCitERUZTID0gQEBERUZTQEAgLURCSVNPTl9MT0NBTEVESVI9JyIkKEJJU09OX0xPQ0FMRURJUikiJworQGVuZCBleGFtcGxlCisKK29yOgorCitAZXhhbXBsZQorQU1fQ1BQRkxBR1MgPSAtREJJU09OX0xPQ0FMRURJUj0nIiQoQklTT05fTE9DQUxFRElSKSInCitAZW5kIGV4YW1wbGUKKworQGl0ZW0KK0ZpbmFsbHksIGludm9rZSB0aGUgY29tbWFuZCBAY29tbWFuZHthdXRvcmVjb25mfSB0byBnZW5lcmF0ZSB0aGUgYnVpbGQKK2luZnJhc3RydWN0dXJlLgorQGVuZCBlbnVtZXJhdGUKKworCitAbm9kZSBBbGdvcml0aG0KK0BjaGFwdGVyIFRoZSBCaXNvbiBQYXJzZXIgQWxnb3JpdGhtCitAY2luZGV4IEJpc29uIHBhcnNlciBhbGdvcml0aG0KK0BjaW5kZXggYWxnb3JpdGhtIG9mIHBhcnNlcgorQGNpbmRleCBzaGlmdGluZworQGNpbmRleCByZWR1Y3Rpb24KK0BjaW5kZXggcGFyc2VyIHN0YWNrCitAY2luZGV4IHN0YWNrLCBwYXJzZXIKKworQXMgQmlzb24gcmVhZHMgdG9rZW5zLCBpdCBwdXNoZXMgdGhlbSBvbnRvIGEgc3RhY2sgYWxvbmcgd2l0aCB0aGVpcgorc2VtYW50aWMgdmFsdWVzLiAgVGhlIHN0YWNrIGlzIGNhbGxlZCB0aGUgQGRmbntwYXJzZXIgc3RhY2t9LiAgUHVzaGluZyBhCit0b2tlbiBpcyB0cmFkaXRpb25hbGx5IGNhbGxlZCBAZGZue3NoaWZ0aW5nfS4KKworRm9yIGV4YW1wbGUsIHN1cHBvc2UgdGhlIGluZml4IGNhbGN1bGF0b3IgaGFzIHJlYWQgQHNhbXB7MSArIDUgKn0sIHdpdGggYQorQHNhbXB7M30gdG8gY29tZS4gIFRoZSBzdGFjayB3aWxsIGhhdmUgZm91ciBlbGVtZW50cywgb25lIGZvciBlYWNoIHRva2VuCit0aGF0IHdhcyBzaGlmdGVkLgorCitCdXQgdGhlIHN0YWNrIGRvZXMgbm90IGFsd2F5cyBoYXZlIGFuIGVsZW1lbnQgZm9yIGVhY2ggdG9rZW4gcmVhZC4gIFdoZW4KK3RoZSBsYXN0IEB2YXJ7bn0gdG9rZW5zIGFuZCBncm91cGluZ3Mgc2hpZnRlZCBtYXRjaCB0aGUgY29tcG9uZW50cyBvZiBhCitncmFtbWFyIHJ1bGUsIHRoZXkgY2FuIGJlIGNvbWJpbmVkIGFjY29yZGluZyB0byB0aGF0IHJ1bGUuICBUaGlzIGlzIGNhbGxlZAorQGRmbntyZWR1Y3Rpb259LiAgVGhvc2UgdG9rZW5zIGFuZCBncm91cGluZ3MgYXJlIHJlcGxhY2VkIG9uIHRoZSBzdGFjayBieSBhCitzaW5nbGUgZ3JvdXBpbmcgd2hvc2Ugc3ltYm9sIGlzIHRoZSByZXN1bHQgKGxlZnQgaGFuZCBzaWRlKSBvZiB0aGF0IHJ1bGUuCitSdW5uaW5nIHRoZSBydWxlJ3MgYWN0aW9uIGlzIHBhcnQgb2YgdGhlIHByb2Nlc3Mgb2YgcmVkdWN0aW9uLCBiZWNhdXNlIHRoaXMKK2lzIHdoYXQgY29tcHV0ZXMgdGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSByZXN1bHRpbmcgZ3JvdXBpbmcuCisKK0ZvciBleGFtcGxlLCBpZiB0aGUgaW5maXggY2FsY3VsYXRvcidzIHBhcnNlciBzdGFjayBjb250YWlucyB0aGlzOgorCitAZXhhbXBsZQorMSArIDUgKiAzCitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CithbmQgdGhlIG5leHQgaW5wdXQgdG9rZW4gaXMgYSBuZXdsaW5lIGNoYXJhY3RlciwgdGhlbiB0aGUgbGFzdCB0aHJlZQorZWxlbWVudHMgY2FuIGJlIHJlZHVjZWQgdG8gMTUgdmlhIHRoZSBydWxlOgorCitAZXhhbXBsZQorZXhwcjogZXhwciAnKicgZXhwcjsKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK1RoZW4gdGhlIHN0YWNrIGNvbnRhaW5zIGp1c3QgdGhlc2UgdGhyZWUgZWxlbWVudHM6CisKK0BleGFtcGxlCisxICsgMTUKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK0F0IHRoaXMgcG9pbnQsIGFub3RoZXIgcmVkdWN0aW9uIGNhbiBiZSBtYWRlLCByZXN1bHRpbmcgaW4gdGhlIHNpbmdsZSB2YWx1ZQorMTYuICBUaGVuIHRoZSBuZXdsaW5lIHRva2VuIGNhbiBiZSBzaGlmdGVkLgorCitUaGUgcGFyc2VyIHRyaWVzLCBieSBzaGlmdHMgYW5kIHJlZHVjdGlvbnMsIHRvIHJlZHVjZSB0aGUgZW50aXJlIGlucHV0IGRvd24KK3RvIGEgc2luZ2xlIGdyb3VwaW5nIHdob3NlIHN5bWJvbCBpcyB0aGUgZ3JhbW1hcidzIHN0YXJ0LXN5bWJvbAorKEBweHJlZntMYW5ndWFnZSBhbmQgR3JhbW1hciwgLExhbmd1YWdlcyBhbmQgQ29udGV4dC1GcmVlIEdyYW1tYXJzfSkuCisKK1RoaXMga2luZCBvZiBwYXJzZXIgaXMga25vd24gaW4gdGhlIGxpdGVyYXR1cmUgYXMgYSBib3R0b20tdXAgcGFyc2VyLgorCitAbWVudQorKiBMb29rYWhlYWQ6OiAgICAgICAgIFBhcnNlciBsb29rcyBvbmUgdG9rZW4gYWhlYWQgd2hlbiBkZWNpZGluZyB3aGF0IHRvIGRvLgorKiBTaGlmdC9SZWR1Y2U6OiAgICAgIENvbmZsaWN0czogd2hlbiBlaXRoZXIgc2hpZnRpbmcgb3IgcmVkdWN0aW9uIGlzIHZhbGlkLgorKiBQcmVjZWRlbmNlOjogICAgICAgIE9wZXJhdG9yIHByZWNlZGVuY2Ugd29ya3MgYnkgcmVzb2x2aW5nIGNvbmZsaWN0cy4KKyogQ29udGV4dHVhbCBQcmVjZWRlbmNlOjogIFdoZW4gYW4gb3BlcmF0b3IncyBwcmVjZWRlbmNlIGRlcGVuZHMgb24gY29udGV4dC4KKyogUGFyc2VyIFN0YXRlczo6ICAgICBUaGUgcGFyc2VyIGlzIGEgZmluaXRlLXN0YXRlLW1hY2hpbmUgd2l0aCBzdGFjay4KKyogUmVkdWNlL1JlZHVjZTo6ICAgICBXaGVuIHR3byBydWxlcyBhcmUgYXBwbGljYWJsZSBpbiB0aGUgc2FtZSBzaXR1YXRpb24uCisqIE15c3RlcmlvdXMgQ29uZmxpY3RzOjogQ29uZmxpY3RzIHRoYXQgbG9vayB1bmp1c3RpZmllZC4KKyogVHVuaW5nIExSOjogICAgICAgICBIb3cgdG8gdHVuZSBmdW5kYW1lbnRhbCBhc3BlY3RzIG9mIExSLWJhc2VkIHBhcnNpbmcuCisqIEdlbmVyYWxpemVkIExSIFBhcnNpbmc6OiAgUGFyc2luZyBhcmJpdHJhcnkgY29udGV4dC1mcmVlIGdyYW1tYXJzLgorKiBNZW1vcnkgTWFuYWdlbWVudDo6IFdoYXQgaGFwcGVucyB3aGVuIG1lbW9yeSBpcyBleGhhdXN0ZWQuICBIb3cgdG8gYXZvaWQgaXQuCitAZW5kIG1lbnUKKworQG5vZGUgTG9va2FoZWFkCitAc2VjdGlvbiBMb29rYWhlYWQgVG9rZW5zCitAY2luZGV4IGxvb2thaGVhZCB0b2tlbgorCitUaGUgQmlzb24gcGFyc2VyIGRvZXMgQGVtcGh7bm90fSBhbHdheXMgcmVkdWNlIGltbWVkaWF0ZWx5IGFzIHNvb24gYXMgdGhlCitsYXN0IEB2YXJ7bn0gdG9rZW5zIGFuZCBncm91cGluZ3MgbWF0Y2ggYSBydWxlLiAgVGhpcyBpcyBiZWNhdXNlIHN1Y2ggYQorc2ltcGxlIHN0cmF0ZWd5IGlzIGluYWRlcXVhdGUgdG8gaGFuZGxlIG1vc3QgbGFuZ3VhZ2VzLiAgSW5zdGVhZCwgd2hlbiBhCityZWR1Y3Rpb24gaXMgcG9zc2libGUsIHRoZSBwYXJzZXIgc29tZXRpbWVzIGBgbG9va3MgYWhlYWQnJyBhdCB0aGUgbmV4dAordG9rZW4gaW4gb3JkZXIgdG8gZGVjaWRlIHdoYXQgdG8gZG8uCisKK1doZW4gYSB0b2tlbiBpcyByZWFkLCBpdCBpcyBub3QgaW1tZWRpYXRlbHkgc2hpZnRlZDsgZmlyc3QgaXQgYmVjb21lcyB0aGUKK0BkZm57bG9va2FoZWFkIHRva2VufSwgd2hpY2ggaXMgbm90IG9uIHRoZSBzdGFjay4gIE5vdyB0aGUgcGFyc2VyIGNhbgorcGVyZm9ybSBvbmUgb3IgbW9yZSByZWR1Y3Rpb25zIG9mIHRva2VucyBhbmQgZ3JvdXBpbmdzIG9uIHRoZSBzdGFjaywgd2hpbGUKK3RoZSBsb29rYWhlYWQgdG9rZW4gcmVtYWlucyBvZmYgdG8gdGhlIHNpZGUuICBXaGVuIG5vIG1vcmUgcmVkdWN0aW9ucworc2hvdWxkIHRha2UgcGxhY2UsIHRoZSBsb29rYWhlYWQgdG9rZW4gaXMgc2hpZnRlZCBvbnRvIHRoZSBzdGFjay4gIFRoaXMKK2RvZXMgbm90IG1lYW4gdGhhdCBhbGwgcG9zc2libGUgcmVkdWN0aW9ucyBoYXZlIGJlZW4gZG9uZTsgZGVwZW5kaW5nIG9uIHRoZQordG9rZW4gdHlwZSBvZiB0aGUgbG9va2FoZWFkIHRva2VuLCBzb21lIHJ1bGVzIG1heSBjaG9vc2UgdG8gZGVsYXkgdGhlaXIKK2FwcGxpY2F0aW9uLgorCitIZXJlIGlzIGEgc2ltcGxlIGNhc2Ugd2hlcmUgbG9va2FoZWFkIGlzIG5lZWRlZC4gIFRoZXNlIHRocmVlIHJ1bGVzIGRlZmluZQorZXhwcmVzc2lvbnMgd2hpY2ggY29udGFpbiBiaW5hcnkgYWRkaXRpb24gb3BlcmF0b3JzIGFuZCBwb3N0Zml4IHVuYXJ5CitmYWN0b3JpYWwgb3BlcmF0b3JzIChAc2FtcHshfSksIGFuZCBhbGxvdyBwYXJlbnRoZXNlcyBmb3IgZ3JvdXBpbmcuCisKK0BleGFtcGxlCitAZ3JvdXAKK2V4cHI6CisgIHRlcm0gJysnIGV4cHIKK3wgdGVybQorOworQGVuZCBncm91cAorCitAZ3JvdXAKK3Rlcm06CisgICcoJyBleHByICcpJworfCB0ZXJtICchJworfCAibnVtYmVyIgorOworQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK1N1cHBvc2UgdGhhdCB0aGUgdG9rZW5zIEB3e0BzYW1wezEgKyAyfX0gaGF2ZSBiZWVuIHJlYWQgYW5kIHNoaWZ0ZWQ7IHdoYXQKK3Nob3VsZCBiZSBkb25lPyAgSWYgdGhlIGZvbGxvd2luZyB0b2tlbiBpcyBAc2FtcHspfSwgdGhlbiB0aGUgZmlyc3QgdGhyZWUKK3Rva2VucyBtdXN0IGJlIHJlZHVjZWQgdG8gZm9ybSBhbiBAY29kZXtleHByfS4gIFRoaXMgaXMgdGhlIG9ubHkgdmFsaWQKK2NvdXJzZSwgYmVjYXVzZSBzaGlmdGluZyB0aGUgQHNhbXB7KX0gd291bGQgcHJvZHVjZSBhIHNlcXVlbmNlIG9mIHN5bWJvbHMKK0B3e0Bjb2Rle3Rlcm0gJyknfX0sIGFuZCBubyBydWxlIGFsbG93cyB0aGlzLgorCitJZiB0aGUgZm9sbG93aW5nIHRva2VuIGlzIEBzYW1weyF9LCB0aGVuIGl0IG11c3QgYmUgc2hpZnRlZCBpbW1lZGlhdGVseSBzbwordGhhdCBAd3tAc2FtcHsyICF9fSBjYW4gYmUgcmVkdWNlZCB0byBtYWtlIGEgQGNvZGV7dGVybX0uICBJZiBpbnN0ZWFkIHRoZQorcGFyc2VyIHdlcmUgdG8gcmVkdWNlIGJlZm9yZSBzaGlmdGluZywgQHd7QHNhbXB7MSArIDJ9fSB3b3VsZCBiZWNvbWUgYW4KK0Bjb2Rle2V4cHJ9LiAgSXQgd291bGQgdGhlbiBiZSBpbXBvc3NpYmxlIHRvIHNoaWZ0IHRoZSBAc2FtcHshfSBiZWNhdXNlCitkb2luZyBzbyB3b3VsZCBwcm9kdWNlIG9uIHRoZSBzdGFjayB0aGUgc2VxdWVuY2Ugb2Ygc3ltYm9scyBAY29kZXtleHByCisnISd9LiAgTm8gcnVsZSBhbGxvd3MgdGhhdCBzZXF1ZW5jZS4KKworQHZpbmRleCB5eWNoYXIKK0B2aW5kZXggeXlsdmFsCitAdmluZGV4IHl5bGxvYworVGhlIGxvb2thaGVhZCB0b2tlbiBpcyBzdG9yZWQgaW4gdGhlIHZhcmlhYmxlIEBjb2Rle3l5Y2hhcn0uCitJdHMgc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9uLCBpZiBhbnksIGFyZSBzdG9yZWQgaW4gdGhlIHZhcmlhYmxlcworQGNvZGV7eXlsdmFsfSBhbmQgQGNvZGV7eXlsbG9jfS4KK0B4cmVme0FjdGlvbiBGZWF0dXJlcywgLFNwZWNpYWwgRmVhdHVyZXMgZm9yIFVzZSBpbiBBY3Rpb25zfS4KKworQG5vZGUgU2hpZnQvUmVkdWNlCitAc2VjdGlvbiBTaGlmdC9SZWR1Y2UgQ29uZmxpY3RzCitAY2luZGV4IGNvbmZsaWN0cworQGNpbmRleCBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzCitAY2luZGV4IGRhbmdsaW5nIEBjb2Rle2Vsc2V9CitAY2luZGV4IEBjb2Rle2Vsc2V9LCBkYW5nbGluZworCitTdXBwb3NlIHdlIGFyZSBwYXJzaW5nIGEgbGFuZ3VhZ2Ugd2hpY2ggaGFzIGlmLXRoZW4gYW5kIGlmLXRoZW4tZWxzZQorc3RhdGVtZW50cywgd2l0aCBhIHBhaXIgb2YgcnVsZXMgbGlrZSB0aGlzOgorCitAZXhhbXBsZQorQGdyb3VwCitpZl9zdG10OgorICAiaWYiIGV4cHIgInRoZW4iIHN0bXQKK3wgImlmIiBleHByICJ0aGVuIiBzdG10ICJlbHNlIiBzdG10Cis7CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitIZXJlIEBjb2RleyJpZiJ9LCBAY29kZXsidGhlbiJ9IGFuZCBAY29kZXsiZWxzZSJ9IGFyZSB0ZXJtaW5hbCBzeW1ib2xzIGZvcgorc3BlY2lmaWMga2V5d29yZCB0b2tlbnMuCisKK1doZW4gdGhlIEBjb2RleyJlbHNlIn0gdG9rZW4gaXMgcmVhZCBhbmQgYmVjb21lcyB0aGUgbG9va2FoZWFkIHRva2VuLCB0aGUKK2NvbnRlbnRzIG9mIHRoZSBzdGFjayAoYXNzdW1pbmcgdGhlIGlucHV0IGlzIHZhbGlkKSBhcmUganVzdCByaWdodCBmb3IKK3JlZHVjdGlvbiBieSB0aGUgZmlyc3QgcnVsZS4gIEJ1dCBpdCBpcyBhbHNvIGxlZ2l0aW1hdGUgdG8gc2hpZnQgdGhlCitAY29kZXsiZWxzZSJ9LCBiZWNhdXNlIHRoYXQgd291bGQgbGVhZCB0byBldmVudHVhbCByZWR1Y3Rpb24gYnkgdGhlIHNlY29uZAorcnVsZS4KKworVGhpcyBzaXR1YXRpb24sIHdoZXJlIGVpdGhlciBhIHNoaWZ0IG9yIGEgcmVkdWN0aW9uIHdvdWxkIGJlIHZhbGlkLCBpcworY2FsbGVkIGEgQGRmbntzaGlmdC9yZWR1Y2UgY29uZmxpY3R9LiAgQmlzb24gaXMgZGVzaWduZWQgdG8gcmVzb2x2ZQordGhlc2UgY29uZmxpY3RzIGJ5IGNob29zaW5nIHRvIHNoaWZ0LCB1bmxlc3Mgb3RoZXJ3aXNlIGRpcmVjdGVkIGJ5CitvcGVyYXRvciBwcmVjZWRlbmNlIGRlY2xhcmF0aW9ucy4gIFRvIHNlZSB0aGUgcmVhc29uIGZvciB0aGlzLCBsZXQncworY29udHJhc3QgaXQgd2l0aCB0aGUgb3RoZXIgYWx0ZXJuYXRpdmUuCisKK1NpbmNlIHRoZSBwYXJzZXIgcHJlZmVycyB0byBzaGlmdCB0aGUgQGNvZGV7ImVsc2UifSwgdGhlIHJlc3VsdCBpcyB0byBhdHRhY2gKK3RoZSBlbHNlLWNsYXVzZSB0byB0aGUgaW5uZXJtb3N0IGlmLXN0YXRlbWVudCwgbWFraW5nIHRoZXNlIHR3byBpbnB1dHMKK2VxdWl2YWxlbnQ6CisKK0BleGFtcGxlCitpZiB4IHRoZW4gaWYgeSB0aGVuIHdpbjsgZWxzZSBsb3NlOworCitpZiB4IHRoZW4gZG87IGlmIHkgdGhlbiB3aW47IGVsc2UgbG9zZTsgZW5kOworQGVuZCBleGFtcGxlCisKK0J1dCBpZiB0aGUgcGFyc2VyIGNob3NlIHRvIHJlZHVjZSB3aGVuIHBvc3NpYmxlIHJhdGhlciB0aGFuIHNoaWZ0LCB0aGUKK3Jlc3VsdCB3b3VsZCBiZSB0byBhdHRhY2ggdGhlIGVsc2UtY2xhdXNlIHRvIHRoZSBvdXRlcm1vc3QgaWYtc3RhdGVtZW50LAorbWFraW5nIHRoZXNlIHR3byBpbnB1dHMgZXF1aXZhbGVudDoKKworQGV4YW1wbGUKK2lmIHggdGhlbiBpZiB5IHRoZW4gd2luOyBlbHNlIGxvc2U7CisKK2lmIHggdGhlbiBkbzsgaWYgeSB0aGVuIHdpbjsgZW5kOyBlbHNlIGxvc2U7CitAZW5kIGV4YW1wbGUKKworVGhlIGNvbmZsaWN0IGV4aXN0cyBiZWNhdXNlIHRoZSBncmFtbWFyIGFzIHdyaXR0ZW4gaXMgYW1iaWd1b3VzOiBlaXRoZXIKK3BhcnNpbmcgb2YgdGhlIHNpbXBsZSBuZXN0ZWQgaWYtc3RhdGVtZW50IGlzIGxlZ2l0aW1hdGUuICBUaGUgZXN0YWJsaXNoZWQKK2NvbnZlbnRpb24gaXMgdGhhdCB0aGVzZSBhbWJpZ3VpdGllcyBhcmUgcmVzb2x2ZWQgYnkgYXR0YWNoaW5nIHRoZQorZWxzZS1jbGF1c2UgdG8gdGhlIGlubmVybW9zdCBpZi1zdGF0ZW1lbnQ7IHRoaXMgaXMgd2hhdCBCaXNvbiBhY2NvbXBsaXNoZXMKK2J5IGNob29zaW5nIHRvIHNoaWZ0IHJhdGhlciB0aGFuIHJlZHVjZS4gIChJdCB3b3VsZCBpZGVhbGx5IGJlIGNsZWFuZXIgdG8KK3dyaXRlIGFuIHVuYW1iaWd1b3VzIGdyYW1tYXIsIGJ1dCB0aGF0IGlzIHZlcnkgaGFyZCB0byBkbyBpbiB0aGlzIGNhc2UuKQorVGhpcyBwYXJ0aWN1bGFyIGFtYmlndWl0eSB3YXMgZmlyc3QgZW5jb3VudGVyZWQgaW4gdGhlIHNwZWNpZmljYXRpb25zIG9mCitBbGdvbCA2MCBhbmQgaXMgY2FsbGVkIHRoZSBgYGRhbmdsaW5nIEBjb2Rle2Vsc2V9JycgYW1iaWd1aXR5LgorCitUbyBhdm9pZCB3YXJuaW5ncyBmcm9tIEJpc29uIGFib3V0IHByZWRpY3RhYmxlLCBsZWdpdGltYXRlIHNoaWZ0L3JlZHVjZQorY29uZmxpY3RzLCB5b3UgY2FuIHVzZSB0aGUgQGNvZGV7JWV4cGVjdCBAdmFye259fSBkZWNsYXJhdGlvbi4KK1RoZXJlIHdpbGwgYmUgbm8gd2FybmluZyBhcyBsb25nIGFzIHRoZSBudW1iZXIgb2Ygc2hpZnQvcmVkdWNlIGNvbmZsaWN0cworaXMgZXhhY3RseSBAdmFye259LCBhbmQgQmlzb24gd2lsbCByZXBvcnQgYW4gZXJyb3IgaWYgdGhlcmUgaXMgYQorZGlmZmVyZW50IG51bWJlci4KK0B4cmVme0V4cGVjdCBEZWNsLCAsU3VwcHJlc3NpbmcgQ29uZmxpY3QgV2FybmluZ3N9LiAgSG93ZXZlciwgd2UgZG9uJ3QKK3JlY29tbWVuZCB0aGUgdXNlIG9mIEBjb2RleyVleHBlY3R9IChleGNlcHQgQHNhbXB7JWV4cGVjdCAwfSEpLCBhcyBhbiBlcXVhbAorbnVtYmVyIG9mIGNvbmZsaWN0cyBkb2VzIG5vdCBtZWFuIHRoYXQgdGhleSBhcmUgdGhlIEBlbXBoe3NhbWV9LiAgV2hlbgorcG9zc2libGUsIHlvdSBzaG91bGQgcmF0aGVyIHVzZSBwcmVjZWRlbmNlIGRpcmVjdGl2ZXMgdG8gQGVtcGh7Zml4fSB0aGUKK2NvbmZsaWN0cyBleHBsaWNpdGx5IChAcHhyZWZ7Tm9uIE9wZXJhdG9ycywsIFVzaW5nIFByZWNlZGVuY2UgRm9yIE5vbgorT3BlcmF0b3JzfSkuCisKK1RoZSBkZWZpbml0aW9uIG9mIEBjb2Rle2lmX3N0bXR9IGFib3ZlIGlzIHNvbGVseSB0byBibGFtZSBmb3IgdGhlCitjb25mbGljdCwgYnV0IHRoZSBjb25mbGljdCBkb2VzIG5vdCBhY3R1YWxseSBhcHBlYXIgd2l0aG91dCBhZGRpdGlvbmFsCitydWxlcy4gIEhlcmUgaXMgYSBjb21wbGV0ZSBCaXNvbiBncmFtbWFyIGZpbGUgdGhhdCBhY3R1YWxseSBtYW5pZmVzdHMKK3RoZSBjb25mbGljdDoKKworQGV4YW1wbGUKK0Bncm91cAorJSUKK0BlbmQgZ3JvdXAKK0Bncm91cAorc3RtdDoKKyAgZXhwcgorfCBpZl9zdG10Cis7CitAZW5kIGdyb3VwCisKK0Bncm91cAoraWZfc3RtdDoKKyAgImlmIiBleHByICJ0aGVuIiBzdG10Cit8ICJpZiIgZXhwciAidGhlbiIgc3RtdCAiZWxzZSIgc3RtdAorOworQGVuZCBncm91cAorCitleHByOgorICAiaWRlbnRpZmllciIKKzsKK0BlbmQgZXhhbXBsZQorCitAbm9kZSBQcmVjZWRlbmNlCitAc2VjdGlvbiBPcGVyYXRvciBQcmVjZWRlbmNlCitAY2luZGV4IG9wZXJhdG9yIHByZWNlZGVuY2UKK0BjaW5kZXggcHJlY2VkZW5jZSBvZiBvcGVyYXRvcnMKKworQW5vdGhlciBzaXR1YXRpb24gd2hlcmUgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cyBhcHBlYXIgaXMgaW4gYXJpdGhtZXRpYworZXhwcmVzc2lvbnMuICBIZXJlIHNoaWZ0aW5nIGlzIG5vdCBhbHdheXMgdGhlIHByZWZlcnJlZCByZXNvbHV0aW9uOyB0aGUKK0Jpc29uIGRlY2xhcmF0aW9ucyBmb3Igb3BlcmF0b3IgcHJlY2VkZW5jZSBhbGxvdyB5b3UgdG8gc3BlY2lmeSB3aGVuIHRvCitzaGlmdCBhbmQgd2hlbiB0byByZWR1Y2UuCisKK0BtZW51CisqIFdoeSBQcmVjZWRlbmNlOjogICAgQW4gZXhhbXBsZSBzaG93aW5nIHdoeSBwcmVjZWRlbmNlIGlzIG5lZWRlZC4KKyogVXNpbmcgUHJlY2VkZW5jZTo6ICBIb3cgdG8gc3BlY2lmeSBwcmVjZWRlbmNlIGluIEJpc29uIGdyYW1tYXJzLgorKiBQcmVjZWRlbmNlIEV4YW1wbGVzOjogIEhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgdXNlZCBpbiB0aGUgcHJldmlvdXMgZXhhbXBsZS4KKyogSG93IFByZWNlZGVuY2U6OiAgICBIb3cgdGhleSB3b3JrLgorKiBOb24gT3BlcmF0b3JzOjogICAgIFVzaW5nIHByZWNlZGVuY2UgZm9yIGdlbmVyYWwgY29uZmxpY3RzLgorQGVuZCBtZW51CisKK0Bub2RlIFdoeSBQcmVjZWRlbmNlCitAc3Vic2VjdGlvbiBXaGVuIFByZWNlZGVuY2UgaXMgTmVlZGVkCisKK0NvbnNpZGVyIHRoZSBmb2xsb3dpbmcgYW1iaWd1b3VzIGdyYW1tYXIgZnJhZ21lbnQgKGFtYmlndW91cyBiZWNhdXNlIHRoZQoraW5wdXQgQHd7QHNhbXB7MSAtIDIgKiAzfX0gY2FuIGJlIHBhcnNlZCBpbiB0d28gZGlmZmVyZW50IHdheXMpOgorCitAZXhhbXBsZQorQGdyb3VwCitleHByOgorICBleHByICctJyBleHByCit8IGV4cHIgJyonIGV4cHIKK3wgZXhwciAnPCcgZXhwcgorfCAnKCcgZXhwciAnKScKK0Bkb3Rze30KKzsKK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK1N1cHBvc2UgdGhlIHBhcnNlciBoYXMgc2VlbiB0aGUgdG9rZW5zIEBzYW1wezF9LCBAc2FtcHstfSBhbmQgQHNhbXB7Mn07CitzaG91bGQgaXQgcmVkdWNlIHRoZW0gdmlhIHRoZSBydWxlIGZvciB0aGUgc3VidHJhY3Rpb24gb3BlcmF0b3I/ICBJdAorZGVwZW5kcyBvbiB0aGUgbmV4dCB0b2tlbi4gIE9mIGNvdXJzZSwgaWYgdGhlIG5leHQgdG9rZW4gaXMgQHNhbXB7KX0sIHdlCittdXN0IHJlZHVjZTsgc2hpZnRpbmcgaXMgaW52YWxpZCBiZWNhdXNlIG5vIHNpbmdsZSBydWxlIGNhbiByZWR1Y2UgdGhlCit0b2tlbiBzZXF1ZW5jZSBAd3tAc2FtcHstIDIgKX19IG9yIGFueXRoaW5nIHN0YXJ0aW5nIHdpdGggdGhhdC4gIEJ1dCBpZgordGhlIG5leHQgdG9rZW4gaXMgQHNhbXB7Kn0gb3IgQHNhbXB7PH0sIHdlIGhhdmUgYSBjaG9pY2U6IGVpdGhlcgorc2hpZnRpbmcgb3IgcmVkdWN0aW9uIHdvdWxkIGFsbG93IHRoZSBwYXJzZSB0byBjb21wbGV0ZSwgYnV0IHdpdGgKK2RpZmZlcmVudCByZXN1bHRzLgorCitUbyBkZWNpZGUgd2hpY2ggb25lIEJpc29uIHNob3VsZCBkbywgd2UgbXVzdCBjb25zaWRlciB0aGUgcmVzdWx0cy4gIElmCit0aGUgbmV4dCBvcGVyYXRvciB0b2tlbiBAdmFye29wfSBpcyBzaGlmdGVkLCB0aGVuIGl0IG11c3QgYmUgcmVkdWNlZAorZmlyc3QgaW4gb3JkZXIgdG8gcGVybWl0IGFub3RoZXIgb3Bwb3J0dW5pdHkgdG8gcmVkdWNlIHRoZSBkaWZmZXJlbmNlLgorVGhlIHJlc3VsdCBpcyAoaW4gZWZmZWN0KSBAd3tAc2FtcHsxIC0gKDIgQHZhcntvcH0gMyl9fS4gIE9uIHRoZSBvdGhlcgoraGFuZCwgaWYgdGhlIHN1YnRyYWN0aW9uIGlzIHJlZHVjZWQgYmVmb3JlIHNoaWZ0aW5nIEB2YXJ7b3B9LCB0aGUgcmVzdWx0CitpcyBAd3tAc2FtcHsoMSAtIDIpIEB2YXJ7b3B9IDN9fS4gIENsZWFybHksIHRoZW4sIHRoZSBjaG9pY2Ugb2Ygc2hpZnQgb3IKK3JlZHVjZSBzaG91bGQgZGVwZW5kIG9uIHRoZSByZWxhdGl2ZSBwcmVjZWRlbmNlIG9mIHRoZSBvcGVyYXRvcnMKK0BzYW1wey19IGFuZCBAdmFye29wfTogQHNhbXB7Kn0gc2hvdWxkIGJlIHNoaWZ0ZWQgZmlyc3QsIGJ1dCBub3QKK0BzYW1wezx9LgorCitAY2luZGV4IGFzc29jaWF0aXZpdHkKK1doYXQgYWJvdXQgaW5wdXQgc3VjaCBhcyBAd3tAc2FtcHsxIC0gMiAtIDV9fTsgc2hvdWxkIHRoaXMgYmUKK0B3e0BzYW1weygxIC0gMikgLSA1fX0gb3Igc2hvdWxkIGl0IGJlIEB3e0BzYW1wezEgLSAoMiAtIDUpfX0/ICBGb3IgbW9zdAorb3BlcmF0b3JzIHdlIHByZWZlciB0aGUgZm9ybWVyLCB3aGljaCBpcyBjYWxsZWQgQGRmbntsZWZ0IGFzc29jaWF0aW9ufS4KK1RoZSBsYXR0ZXIgYWx0ZXJuYXRpdmUsIEBkZm57cmlnaHQgYXNzb2NpYXRpb259LCBpcyBkZXNpcmFibGUgZm9yCithc3NpZ25tZW50IG9wZXJhdG9ycy4gIFRoZSBjaG9pY2Ugb2YgbGVmdCBvciByaWdodCBhc3NvY2lhdGlvbiBpcyBhCittYXR0ZXIgb2Ygd2hldGhlciB0aGUgcGFyc2VyIGNob29zZXMgdG8gc2hpZnQgb3IgcmVkdWNlIHdoZW4gdGhlIHN0YWNrCitjb250YWlucyBAd3tAc2FtcHsxIC0gMn19IGFuZCB0aGUgbG9va2FoZWFkIHRva2VuIGlzIEBzYW1wey19OiBzaGlmdGluZworbWFrZXMgcmlnaHQtYXNzb2NpYXRpdml0eS4KKworQG5vZGUgVXNpbmcgUHJlY2VkZW5jZQorQHN1YnNlY3Rpb24gU3BlY2lmeWluZyBPcGVyYXRvciBQcmVjZWRlbmNlCitAZmluZGV4ICVsZWZ0CitAZmluZGV4ICVyaWdodAorQGZpbmRleCAlbm9uYXNzb2MKKworQmlzb24gYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZXNlIGNob2ljZXMgd2l0aCB0aGUgb3BlcmF0b3IgcHJlY2VkZW5jZQorZGVjbGFyYXRpb25zIEBjb2RleyVsZWZ0fSBhbmQgQGNvZGV7JXJpZ2h0fS4gIEVhY2ggc3VjaCBkZWNsYXJhdGlvbgorY29udGFpbnMgYSBsaXN0IG9mIHRva2Vucywgd2hpY2ggYXJlIG9wZXJhdG9ycyB3aG9zZSBwcmVjZWRlbmNlIGFuZAorYXNzb2NpYXRpdml0eSBpcyBiZWluZyBkZWNsYXJlZC4gIFRoZSBAY29kZXslbGVmdH0gZGVjbGFyYXRpb24gbWFrZXMgYWxsCit0aG9zZSBvcGVyYXRvcnMgbGVmdC1hc3NvY2lhdGl2ZSBhbmQgdGhlIEBjb2RleyVyaWdodH0gZGVjbGFyYXRpb24gbWFrZXMKK3RoZW0gcmlnaHQtYXNzb2NpYXRpdmUuICBBIHRoaXJkIGFsdGVybmF0aXZlIGlzIEBjb2RleyVub25hc3NvY30sIHdoaWNoCitkZWNsYXJlcyB0aGF0IGl0IGlzIGEgc3ludGF4IGVycm9yIHRvIGZpbmQgdGhlIHNhbWUgb3BlcmF0b3IgdHdpY2UgYGBpbiBhCityb3cnJy4KKworVGhlIHJlbGF0aXZlIHByZWNlZGVuY2Ugb2YgZGlmZmVyZW50IG9wZXJhdG9ycyBpcyBjb250cm9sbGVkIGJ5IHRoZQorb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUgZGVjbGFyZWQuICBUaGUgZmlyc3QgQGNvZGV7JWxlZnR9IG9yCitAY29kZXslcmlnaHR9IGRlY2xhcmF0aW9uIGluIHRoZSBmaWxlIGRlY2xhcmVzIHRoZSBvcGVyYXRvcnMgd2hvc2UKK3ByZWNlZGVuY2UgaXMgbG93ZXN0LCB0aGUgbmV4dCBzdWNoIGRlY2xhcmF0aW9uIGRlY2xhcmVzIHRoZSBvcGVyYXRvcnMKK3dob3NlIHByZWNlZGVuY2UgaXMgYSBsaXR0bGUgaGlnaGVyLCBhbmQgc28gb24uCisKK0Bub2RlIFByZWNlZGVuY2UgRXhhbXBsZXMKK0BzdWJzZWN0aW9uIFByZWNlZGVuY2UgRXhhbXBsZXMKKworSW4gb3VyIGV4YW1wbGUsIHdlIHdvdWxkIHdhbnQgdGhlIGZvbGxvd2luZyBkZWNsYXJhdGlvbnM6CisKK0BleGFtcGxlCislbGVmdCAnPCcKKyVsZWZ0ICctJworJWxlZnQgJyonCitAZW5kIGV4YW1wbGUKKworSW4gYSBtb3JlIGNvbXBsZXRlIGV4YW1wbGUsIHdoaWNoIHN1cHBvcnRzIG90aGVyIG9wZXJhdG9ycyBhcyB3ZWxsLCB3ZQord291bGQgZGVjbGFyZSB0aGVtIGluIGdyb3VwcyBvZiBlcXVhbCBwcmVjZWRlbmNlLiAgRm9yIGV4YW1wbGUsIEBjb2RleycrJ30gaXMKK2RlY2xhcmVkIHdpdGggQGNvZGV7Jy0nfToKKworQGV4YW1wbGUKKyVsZWZ0ICc8JyAnPicgJz0nICIhPSIgIjw9IiAiPj0iCislbGVmdCAnKycgJy0nCislbGVmdCAnKicgJy8nCitAZW5kIGV4YW1wbGUKKworQG5vZGUgSG93IFByZWNlZGVuY2UKK0BzdWJzZWN0aW9uIEhvdyBQcmVjZWRlbmNlIFdvcmtzCisKK1RoZSBmaXJzdCBlZmZlY3Qgb2YgdGhlIHByZWNlZGVuY2UgZGVjbGFyYXRpb25zIGlzIHRvIGFzc2lnbiBwcmVjZWRlbmNlCitsZXZlbHMgdG8gdGhlIHRlcm1pbmFsIHN5bWJvbHMgZGVjbGFyZWQuICBUaGUgc2Vjb25kIGVmZmVjdCBpcyB0byBhc3NpZ24KK3ByZWNlZGVuY2UgbGV2ZWxzIHRvIGNlcnRhaW4gcnVsZXM6IGVhY2ggcnVsZSBnZXRzIGl0cyBwcmVjZWRlbmNlIGZyb20KK3RoZSBsYXN0IHRlcm1pbmFsIHN5bWJvbCBtZW50aW9uZWQgaW4gdGhlIGNvbXBvbmVudHMuICAoWW91IGNhbiBhbHNvCitzcGVjaWZ5IGV4cGxpY2l0bHkgdGhlIHByZWNlZGVuY2Ugb2YgYSBydWxlLiAgQHhyZWZ7Q29udGV4dHVhbAorUHJlY2VkZW5jZSwgLENvbnRleHQtRGVwZW5kZW50IFByZWNlZGVuY2V9LikKKworRmluYWxseSwgdGhlIHJlc29sdXRpb24gb2YgY29uZmxpY3RzIHdvcmtzIGJ5IGNvbXBhcmluZyB0aGUgcHJlY2VkZW5jZQorb2YgdGhlIHJ1bGUgYmVpbmcgY29uc2lkZXJlZCB3aXRoIHRoYXQgb2YgdGhlIGxvb2thaGVhZCB0b2tlbi4gIElmIHRoZQordG9rZW4ncyBwcmVjZWRlbmNlIGlzIGhpZ2hlciwgdGhlIGNob2ljZSBpcyB0byBzaGlmdC4gIElmIHRoZSBydWxlJ3MKK3ByZWNlZGVuY2UgaXMgaGlnaGVyLCB0aGUgY2hvaWNlIGlzIHRvIHJlZHVjZS4gIElmIHRoZXkgaGF2ZSBlcXVhbAorcHJlY2VkZW5jZSwgdGhlIGNob2ljZSBpcyBtYWRlIGJhc2VkIG9uIHRoZSBhc3NvY2lhdGl2aXR5IG9mIHRoYXQKK3ByZWNlZGVuY2UgbGV2ZWwuICBUaGUgdmVyYm9zZSBvdXRwdXQgZmlsZSBtYWRlIGJ5IEBzYW1wey12fQorKEBweHJlZntJbnZvY2F0aW9uLCAsSW52b2tpbmcgQmlzb259KSBzYXlzIGhvdyBlYWNoIGNvbmZsaWN0IHdhcworcmVzb2x2ZWQuCisKK05vdCBhbGwgcnVsZXMgYW5kIG5vdCBhbGwgdG9rZW5zIGhhdmUgcHJlY2VkZW5jZS4gIElmIGVpdGhlciB0aGUgcnVsZSBvcgordGhlIGxvb2thaGVhZCB0b2tlbiBoYXMgbm8gcHJlY2VkZW5jZSwgdGhlbiB0aGUgZGVmYXVsdCBpcyB0byBzaGlmdC4KKworQG5vZGUgTm9uIE9wZXJhdG9ycworQHN1YnNlY3Rpb24gVXNpbmcgUHJlY2VkZW5jZSBGb3IgTm9uIE9wZXJhdG9ycworCitVc2luZyBwcm9wZXJseSBwcmVjZWRlbmNlIGFuZCBhc3NvY2lhdGl2aXR5IGRpcmVjdGl2ZXMgY2FuIGhlbHAgZml4aW5nCitzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIHRoYXQgZG8gbm90IGludm9sdmUgYXJpdGhtZXRpY3MtbGlrZSBvcGVyYXRvcnMuICBGb3IKK2luc3RhbmNlLCB0aGUgYGBkYW5nbGluZyBAY29kZXtlbHNlfScnIHByb2JsZW0gKEBweHJlZntTaGlmdC9SZWR1Y2UsICwKK1NoaWZ0L1JlZHVjZSBDb25mbGljdHN9KSBjYW4gYmUgc29sdmVkIGVsZWdhbnRseSBpbiB0d28gZGlmZmVyZW50IHdheXMuCisKK0luIHRoZSBwcmVzZW50IGNhc2UsIHRoZSBjb25mbGljdCBpcyBiZXR3ZWVuIHRoZSB0b2tlbiBAY29kZXsiZWxzZSJ9IHdpbGxpbmcKK3RvIGJlIHNoaWZ0ZWQsIGFuZCB0aGUgcnVsZSBAc2FtcHtpZl9zdG10OiAiaWYiIGV4cHIgInRoZW4iIHN0bXR9LCBhc2tpbmcKK2ZvciByZWR1Y3Rpb24uICBCeSBkZWZhdWx0LCB0aGUgcHJlY2VkZW5jZSBvZiBhIHJ1bGUgaXMgdGhhdCBvZiBpdHMgbGFzdAordG9rZW4sIGhlcmUgQGNvZGV7InRoZW4ifSwgc28gdGhlIGNvbmZsaWN0IHdpbGwgYmUgc29sdmVkIGFwcHJvcHJpYXRlbHkKK2J5IGdpdmluZyBAY29kZXsiZWxzZSJ9IGEgcHJlY2VkZW5jZSBoaWdoZXIgdGhhbiB0aGF0IG9mIEBjb2RleyJ0aGVuIn0sIGZvcgoraW5zdGFuY2UgYXMgZm9sbG93czoKKworQGV4YW1wbGUKK0Bncm91cAorJW5vbmFzc29jICJ0aGVuIgorJW5vbmFzc29jICJlbHNlIgorQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK0FsdGVybmF0aXZlbHksIHlvdSBtYXkgZ2l2ZSBib3RoIHRva2VucyB0aGUgc2FtZSBwcmVjZWRlbmNlLCBpbiB3aGljaCBjYXNlCithc3NvY2lhdGl2aXR5IGlzIHVzZWQgdG8gc29sdmUgdGhlIGNvbmZsaWN0LiAgVG8gcHJlc2VydmUgdGhlIHNoaWZ0IGFjdGlvbiwKK3VzZSByaWdodCBhc3NvY2lhdGl2aXR5OgorCitAZXhhbXBsZQorJXJpZ2h0ICJ0aGVuIiAiZWxzZSIKK0BlbmQgZXhhbXBsZQorCitOZWl0aGVyIHNvbHV0aW9uIGlzIHBlcmZlY3QgaG93ZXZlci4gIFNpbmNlIEJpc29uIGRvZXMgbm90IHByb3ZpZGUsIHNvIGZhciwKK3N1cHBvcnQgZm9yIGBgc2NvcGVkJycgcHJlY2VkZW5jZSwgYm90aCBmb3JjZSB5b3UgdG8gZGVjbGFyZSB0aGUgcHJlY2VkZW5jZQorb2YgdGhlc2Uga2V5d29yZHMgd2l0aCByZXNwZWN0IHRvIHRoZSBvdGhlciBvcGVyYXRvcnMgeW91ciBncmFtbWFyLgorVGhlcmVmb3JlLCBpbnN0ZWFkIG9mIGJlaW5nIHdhcm5lZCBhYm91dCBuZXcgY29uZmxpY3RzIHlvdSB3b3VsZCBiZSB1bmF3YXJlCitvZiAoZS5nLiwgYSBzaGlmdC9yZWR1Y2UgY29uZmxpY3QgZHVlIHRvIEBzYW1we2lmIHRlc3QgdGhlbiAxIGVsc2UgMiArIDN9CitiZWluZyBhbWJpZ3VvdXM6IEBzYW1we2lmIHRlc3QgdGhlbiAxIGVsc2UgKDIgKyAzKX0gb3IgQHNhbXB7KGlmIHRlc3QgdGhlbiAxCitlbHNlIDIpICsgM30/KSwgdGhlIGNvbmZsaWN0IHdpbGwgYmUgYWxyZWFkeSBgYGZpeGVkJycuCisKK0Bub2RlIENvbnRleHR1YWwgUHJlY2VkZW5jZQorQHNlY3Rpb24gQ29udGV4dC1EZXBlbmRlbnQgUHJlY2VkZW5jZQorQGNpbmRleCBjb250ZXh0LWRlcGVuZGVudCBwcmVjZWRlbmNlCitAY2luZGV4IHVuYXJ5IG9wZXJhdG9yIHByZWNlZGVuY2UKK0BjaW5kZXggcHJlY2VkZW5jZSwgY29udGV4dC1kZXBlbmRlbnQKK0BjaW5kZXggcHJlY2VkZW5jZSwgdW5hcnkgb3BlcmF0b3IKK0BmaW5kZXggJXByZWMKKworT2Z0ZW4gdGhlIHByZWNlZGVuY2Ugb2YgYW4gb3BlcmF0b3IgZGVwZW5kcyBvbiB0aGUgY29udGV4dC4gIFRoaXMgc291bmRzCitvdXRsYW5kaXNoIGF0IGZpcnN0LCBidXQgaXQgaXMgcmVhbGx5IHZlcnkgY29tbW9uLiAgRm9yIGV4YW1wbGUsIGEgbWludXMKK3NpZ24gdHlwaWNhbGx5IGhhcyBhIHZlcnkgaGlnaCBwcmVjZWRlbmNlIGFzIGEgdW5hcnkgb3BlcmF0b3IsIGFuZCBhCitzb21ld2hhdCBsb3dlciBwcmVjZWRlbmNlIChsb3dlciB0aGFuIG11bHRpcGxpY2F0aW9uKSBhcyBhIGJpbmFyeSBvcGVyYXRvci4KKworVGhlIEJpc29uIHByZWNlZGVuY2UgZGVjbGFyYXRpb25zLCBAY29kZXslbGVmdH0sIEBjb2RleyVyaWdodH0gYW5kCitAY29kZXslbm9uYXNzb2N9LCBjYW4gb25seSBiZSB1c2VkIG9uY2UgZm9yIGEgZ2l2ZW4gdG9rZW47IHNvIGEgdG9rZW4gaGFzCitvbmx5IG9uZSBwcmVjZWRlbmNlIGRlY2xhcmVkIGluIHRoaXMgd2F5LiAgRm9yIGNvbnRleHQtZGVwZW5kZW50CitwcmVjZWRlbmNlLCB5b3UgbmVlZCB0byB1c2UgYW4gYWRkaXRpb25hbCBtZWNoYW5pc206IHRoZSBAY29kZXslcHJlY30KK21vZGlmaWVyIGZvciBydWxlcy4KKworVGhlIEBjb2RleyVwcmVjfSBtb2RpZmllciBkZWNsYXJlcyB0aGUgcHJlY2VkZW5jZSBvZiBhIHBhcnRpY3VsYXIgcnVsZSBieQorc3BlY2lmeWluZyBhIHRlcm1pbmFsIHN5bWJvbCB3aG9zZSBwcmVjZWRlbmNlIHNob3VsZCBiZSB1c2VkIGZvciB0aGF0IHJ1bGUuCitJdCdzIG5vdCBuZWNlc3NhcnkgZm9yIHRoYXQgc3ltYm9sIHRvIGFwcGVhciBvdGhlcndpc2UgaW4gdGhlIHJ1bGUuICBUaGUKK21vZGlmaWVyJ3Mgc3ludGF4IGlzOgorCitAZXhhbXBsZQorJXByZWMgQHZhcnt0ZXJtaW5hbC1zeW1ib2x9CitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CithbmQgaXQgaXMgd3JpdHRlbiBhZnRlciB0aGUgY29tcG9uZW50cyBvZiB0aGUgcnVsZS4gIEl0cyBlZmZlY3QgaXMgdG8KK2Fzc2lnbiB0aGUgcnVsZSB0aGUgcHJlY2VkZW5jZSBvZiBAdmFye3Rlcm1pbmFsLXN5bWJvbH0sIG92ZXJyaWRpbmcKK3RoZSBwcmVjZWRlbmNlIHRoYXQgd291bGQgYmUgZGVkdWNlZCBmb3IgaXQgaW4gdGhlIG9yZGluYXJ5IHdheS4gIFRoZQorYWx0ZXJlZCBydWxlIHByZWNlZGVuY2UgdGhlbiBhZmZlY3RzIGhvdyBjb25mbGljdHMgaW52b2x2aW5nIHRoYXQgcnVsZQorYXJlIHJlc29sdmVkIChAcHhyZWZ7UHJlY2VkZW5jZSwgLE9wZXJhdG9yIFByZWNlZGVuY2V9KS4KKworSGVyZSBpcyBob3cgQGNvZGV7JXByZWN9IHNvbHZlcyB0aGUgcHJvYmxlbSBvZiB1bmFyeSBtaW51cy4gIEZpcnN0LCBkZWNsYXJlCithIHByZWNlZGVuY2UgZm9yIGEgZmljdGl0aW91cyB0ZXJtaW5hbCBzeW1ib2wgbmFtZWQgQGNvZGV7VU1JTlVTfS4gIFRoZXJlCithcmUgbm8gdG9rZW5zIG9mIHRoaXMgdHlwZSwgYnV0IHRoZSBzeW1ib2wgc2VydmVzIHRvIHN0YW5kIGZvciBpdHMKK3ByZWNlZGVuY2U6CisKK0BleGFtcGxlCitAZG90c3t9CislbGVmdCAnKycgJy0nCislbGVmdCAnKicKKyVsZWZ0IFVNSU5VUworQGVuZCBleGFtcGxlCisKK05vdyB0aGUgcHJlY2VkZW5jZSBvZiBAY29kZXtVTUlOVVN9IGNhbiBiZSB1c2VkIGluIHNwZWNpZmljIHJ1bGVzOgorCitAZXhhbXBsZQorQGdyb3VwCitleHA6CisgIEBkb3Rze30KK3wgZXhwICctJyBleHAKKyAgQGRvdHN7fQorfCAnLScgZXhwICVwcmVjIFVNSU5VUworQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK0BpZnNldCBkZWZhdWx0cHJlYworSWYgeW91IGZvcmdldCB0byBhcHBlbmQgQGNvZGV7JXByZWMgVU1JTlVTfSB0byB0aGUgcnVsZSBmb3IgdW5hcnkKK21pbnVzLCBCaXNvbiBzaWxlbnRseSBhc3N1bWVzIHRoYXQgbWludXMgaGFzIGl0cyB1c3VhbCBwcmVjZWRlbmNlLgorVGhpcyBraW5kIG9mIHByb2JsZW0gY2FuIGJlIHRyaWNreSB0byBkZWJ1Zywgc2luY2Ugb25lIHR5cGljYWxseQorZGlzY292ZXJzIHRoZSBtaXN0YWtlIG9ubHkgYnkgdGVzdGluZyB0aGUgY29kZS4KKworVGhlIEBjb2RleyVuby1kZWZhdWx0LXByZWM7fSBkZWNsYXJhdGlvbiBtYWtlcyBpdCBlYXNpZXIgdG8gZGlzY292ZXIKK3RoaXMga2luZCBvZiBwcm9ibGVtIHN5c3RlbWF0aWNhbGx5LiAgSXQgY2F1c2VzIHJ1bGVzIHRoYXQgbGFjayBhCitAY29kZXslcHJlY30gbW9kaWZpZXIgdG8gaGF2ZSBubyBwcmVjZWRlbmNlLCBldmVuIGlmIHRoZSBsYXN0IHRlcm1pbmFsCitzeW1ib2wgbWVudGlvbmVkIGluIHRoZWlyIGNvbXBvbmVudHMgaGFzIGEgZGVjbGFyZWQgcHJlY2VkZW5jZS4KKworSWYgQGNvZGV7JW5vLWRlZmF1bHQtcHJlYzt9IGlzIGluIGVmZmVjdCwgeW91IG11c3Qgc3BlY2lmeSBAY29kZXslcHJlY30KK2ZvciBhbGwgcnVsZXMgdGhhdCBwYXJ0aWNpcGF0ZSBpbiBwcmVjZWRlbmNlIGNvbmZsaWN0IHJlc29sdXRpb24uCitUaGVuIHlvdSB3aWxsIHNlZSBhbnkgc2hpZnQvcmVkdWNlIGNvbmZsaWN0IHVudGlsIHlvdSB0ZWxsIEJpc29uIGhvdwordG8gcmVzb2x2ZSBpdCwgZWl0aGVyIGJ5IGNoYW5naW5nIHlvdXIgZ3JhbW1hciBvciBieSBhZGRpbmcgYW4KK2V4cGxpY2l0IHByZWNlZGVuY2UuICBUaGlzIHdpbGwgcHJvYmFibHkgYWRkIGRlY2xhcmF0aW9ucyB0byB0aGUKK2dyYW1tYXIsIGJ1dCBpdCBoZWxwcyB0byBwcm90ZWN0IGFnYWluc3QgaW5jb3JyZWN0IHJ1bGUgcHJlY2VkZW5jZXMuCisKK1RoZSBlZmZlY3Qgb2YgQGNvZGV7JW5vLWRlZmF1bHQtcHJlYzt9IGNhbiBiZSByZXZlcnNlZCBieSBnaXZpbmcKK0Bjb2RleyVkZWZhdWx0LXByZWM7fSwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuCitAZW5kIGlmc2V0CisKK0Bub2RlIFBhcnNlciBTdGF0ZXMKK0BzZWN0aW9uIFBhcnNlciBTdGF0ZXMKK0BjaW5kZXggZmluaXRlLXN0YXRlIG1hY2hpbmUKK0BjaW5kZXggcGFyc2VyIHN0YXRlCitAY2luZGV4IHN0YXRlIChvZiBwYXJzZXIpCisKK1RoZSBmdW5jdGlvbiBAY29kZXt5eXBhcnNlfSBpcyBpbXBsZW1lbnRlZCB1c2luZyBhIGZpbml0ZS1zdGF0ZSBtYWNoaW5lLgorVGhlIHZhbHVlcyBwdXNoZWQgb24gdGhlIHBhcnNlciBzdGFjayBhcmUgbm90IHNpbXBseSB0b2tlbiB0eXBlIGNvZGVzOyB0aGV5CityZXByZXNlbnQgdGhlIGVudGlyZSBzZXF1ZW5jZSBvZiB0ZXJtaW5hbCBhbmQgbm9udGVybWluYWwgc3ltYm9scyBhdCBvcgorbmVhciB0aGUgdG9wIG9mIHRoZSBzdGFjay4gIFRoZSBjdXJyZW50IHN0YXRlIGNvbGxlY3RzIGFsbCB0aGUgaW5mb3JtYXRpb24KK2Fib3V0IHByZXZpb3VzIGlucHV0IHdoaWNoIGlzIHJlbGV2YW50IHRvIGRlY2lkaW5nIHdoYXQgdG8gZG8gbmV4dC4KKworRWFjaCB0aW1lIGEgbG9va2FoZWFkIHRva2VuIGlzIHJlYWQsIHRoZSBjdXJyZW50IHBhcnNlciBzdGF0ZSB0b2dldGhlcgord2l0aCB0aGUgdHlwZSBvZiBsb29rYWhlYWQgdG9rZW4gYXJlIGxvb2tlZCB1cCBpbiBhIHRhYmxlLiAgVGhpcyB0YWJsZQorZW50cnkgY2FuIHNheSwgYGBTaGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLicnICBJbiB0aGlzIGNhc2UsIGl0IGFsc28KK3NwZWNpZmllcyB0aGUgbmV3IHBhcnNlciBzdGF0ZSwgd2hpY2ggaXMgcHVzaGVkIG9udG8gdGhlIHRvcCBvZiB0aGUKK3BhcnNlciBzdGFjay4gIE9yIGl0IGNhbiBzYXksIGBgUmVkdWNlIHVzaW5nIHJ1bGUgbnVtYmVyIEB2YXJ7bn0uJycKK1RoaXMgbWVhbnMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyIG9mIHRva2VucyBvciBncm91cGluZ3MgYXJlIHRha2VuIG9mZgordGhlIHRvcCBvZiB0aGUgc3RhY2ssIGFuZCByZXBsYWNlZCBieSBvbmUgZ3JvdXBpbmcuICBJbiBvdGhlciB3b3JkcywKK3RoYXQgbnVtYmVyIG9mIHN0YXRlcyBhcmUgcG9wcGVkIGZyb20gdGhlIHN0YWNrLCBhbmQgb25lIG5ldyBzdGF0ZSBpcworcHVzaGVkLgorCitUaGVyZSBpcyBvbmUgb3RoZXIgYWx0ZXJuYXRpdmU6IHRoZSB0YWJsZSBjYW4gc2F5IHRoYXQgdGhlIGxvb2thaGVhZCB0b2tlbgoraXMgZXJyb25lb3VzIGluIHRoZSBjdXJyZW50IHN0YXRlLiAgVGhpcyBjYXVzZXMgZXJyb3IgcHJvY2Vzc2luZyB0byBiZWdpbgorKEBweHJlZntFcnJvciBSZWNvdmVyeX0pLgorCitAbm9kZSBSZWR1Y2UvUmVkdWNlCitAc2VjdGlvbiBSZWR1Y2UvUmVkdWNlIENvbmZsaWN0cworQGNpbmRleCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0CitAY2luZGV4IGNvbmZsaWN0cywgcmVkdWNlL3JlZHVjZQorCitBIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3Qgb2NjdXJzIGlmIHRoZXJlIGFyZSB0d28gb3IgbW9yZSBydWxlcyB0aGF0IGFwcGx5Cit0byB0aGUgc2FtZSBzZXF1ZW5jZSBvZiBpbnB1dC4gIFRoaXMgdXN1YWxseSBpbmRpY2F0ZXMgYSBzZXJpb3VzIGVycm9yCitpbiB0aGUgZ3JhbW1hci4KKworRm9yIGV4YW1wbGUsIGhlcmUgaXMgYW4gZXJyb25lb3VzIGF0dGVtcHQgdG8gZGVmaW5lIGEgc2VxdWVuY2UKK29mIHplcm8gb3IgbW9yZSBAY29kZXt3b3JkfSBncm91cGluZ3MuCisKK0BleGFtcGxlCitAZ3JvdXAKK3NlcXVlbmNlOgorICAvKiBlbXB0eSAqLyAgICBAeyBwcmludGYgKCJlbXB0eSBzZXF1ZW5jZVxuIik7IEB9Cit8IG1heWJld29yZAorfCBzZXF1ZW5jZSB3b3JkICBAeyBwcmludGYgKCJhZGRlZCB3b3JkICVzXG4iLCAkMik7IEB9Cis7CitAZW5kIGdyb3VwCisKK0Bncm91cAorbWF5YmV3b3JkOgorICAvKiBlbXB0eSAqLyAgIEB7IHByaW50ZiAoImVtcHR5IG1heWJld29yZFxuIik7IEB9Cit8IHdvcmQgICAgICAgICAgQHsgcHJpbnRmICgic2luZ2xlIHdvcmQgJXNcbiIsICQxKTsgQH0KKzsKK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK1RoZSBlcnJvciBpcyBhbiBhbWJpZ3VpdHk6IHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgd2F5IHRvIHBhcnNlIGEgc2luZ2xlCitAY29kZXt3b3JkfSBpbnRvIGEgQGNvZGV7c2VxdWVuY2V9LiAgSXQgY291bGQgYmUgcmVkdWNlZCB0byBhCitAY29kZXttYXliZXdvcmR9IGFuZCB0aGVuIGludG8gYSBAY29kZXtzZXF1ZW5jZX0gdmlhIHRoZSBzZWNvbmQgcnVsZS4KK0FsdGVybmF0aXZlbHksIG5vdGhpbmctYXQtYWxsIGNvdWxkIGJlIHJlZHVjZWQgaW50byBhIEBjb2Rle3NlcXVlbmNlfQordmlhIHRoZSBmaXJzdCBydWxlLCBhbmQgdGhpcyBjb3VsZCBiZSBjb21iaW5lZCB3aXRoIHRoZSBAY29kZXt3b3JkfQordXNpbmcgdGhlIHRoaXJkIHJ1bGUgZm9yIEBjb2Rle3NlcXVlbmNlfS4KKworVGhlcmUgaXMgYWxzbyBtb3JlIHRoYW4gb25lIHdheSB0byByZWR1Y2Ugbm90aGluZy1hdC1hbGwgaW50byBhCitAY29kZXtzZXF1ZW5jZX0uICBUaGlzIGNhbiBiZSBkb25lIGRpcmVjdGx5IHZpYSB0aGUgZmlyc3QgcnVsZSwKK29yIGluZGlyZWN0bHkgdmlhIEBjb2Rle21heWJld29yZH0gYW5kIHRoZW4gdGhlIHNlY29uZCBydWxlLgorCitZb3UgbWlnaHQgdGhpbmsgdGhhdCB0aGlzIGlzIGEgZGlzdGluY3Rpb24gd2l0aG91dCBhIGRpZmZlcmVuY2UsIGJlY2F1c2UgaXQKK2RvZXMgbm90IGNoYW5nZSB3aGV0aGVyIGFueSBwYXJ0aWN1bGFyIGlucHV0IGlzIHZhbGlkIG9yIG5vdC4gIEJ1dCBpdCBkb2VzCithZmZlY3Qgd2hpY2ggYWN0aW9ucyBhcmUgcnVuLiAgT25lIHBhcnNpbmcgb3JkZXIgcnVucyB0aGUgc2Vjb25kIHJ1bGUncworYWN0aW9uOyB0aGUgb3RoZXIgcnVucyB0aGUgZmlyc3QgcnVsZSdzIGFjdGlvbiBhbmQgdGhlIHRoaXJkIHJ1bGUncyBhY3Rpb24uCitJbiB0aGlzIGV4YW1wbGUsIHRoZSBvdXRwdXQgb2YgdGhlIHByb2dyYW0gY2hhbmdlcy4KKworQmlzb24gcmVzb2x2ZXMgYSByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0IGJ5IGNob29zaW5nIHRvIHVzZSB0aGUgcnVsZSB0aGF0CithcHBlYXJzIGZpcnN0IGluIHRoZSBncmFtbWFyLCBidXQgaXQgaXMgdmVyeSByaXNreSB0byByZWx5IG9uIHRoaXMuICBFdmVyeQorcmVkdWNlL3JlZHVjZSBjb25mbGljdCBtdXN0IGJlIHN0dWRpZWQgYW5kIHVzdWFsbHkgZWxpbWluYXRlZC4gIEhlcmUgaXMgdGhlCitwcm9wZXIgd2F5IHRvIGRlZmluZSBAY29kZXtzZXF1ZW5jZX06CisKK0BleGFtcGxlCitAZ3JvdXAKK3NlcXVlbmNlOgorICAvKiBlbXB0eSAqLyAgICBAeyBwcmludGYgKCJlbXB0eSBzZXF1ZW5jZVxuIik7IEB9Cit8IHNlcXVlbmNlIHdvcmQgIEB7IHByaW50ZiAoImFkZGVkIHdvcmQgJXNcbiIsICQyKTsgQH0KKzsKK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitIZXJlIGlzIGFub3RoZXIgY29tbW9uIGVycm9yIHRoYXQgeWllbGRzIGEgcmVkdWNlL3JlZHVjZSBjb25mbGljdDoKKworQGV4YW1wbGUKK3NlcXVlbmNlOgorQGdyb3VwCisgIC8qIGVtcHR5ICovCit8IHNlcXVlbmNlIHdvcmRzCit8IHNlcXVlbmNlIHJlZGlyZWN0cworOworQGVuZCBncm91cAorCitAZ3JvdXAKK3dvcmRzOgorICAvKiBlbXB0eSAqLworfCB3b3JkcyB3b3JkCis7CitAZW5kIGdyb3VwCisKK0Bncm91cAorcmVkaXJlY3RzOgorICAvKiBlbXB0eSAqLworfCByZWRpcmVjdHMgcmVkaXJlY3QKKzsKK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK1RoZSBpbnRlbnRpb24gaGVyZSBpcyB0byBkZWZpbmUgYSBzZXF1ZW5jZSB3aGljaCBjYW4gY29udGFpbiBlaXRoZXIKK0Bjb2Rle3dvcmR9IG9yIEBjb2Rle3JlZGlyZWN0fSBncm91cGluZ3MuICBUaGUgaW5kaXZpZHVhbCBkZWZpbml0aW9ucyBvZgorQGNvZGV7c2VxdWVuY2V9LCBAY29kZXt3b3Jkc30gYW5kIEBjb2Rle3JlZGlyZWN0c30gYXJlIGVycm9yLWZyZWUsIGJ1dCB0aGUKK3RocmVlIHRvZ2V0aGVyIG1ha2UgYSBzdWJ0bGUgYW1iaWd1aXR5OiBldmVuIGFuIGVtcHR5IGlucHV0IGNhbiBiZSBwYXJzZWQKK2luIGluZmluaXRlbHkgbWFueSB3YXlzIQorCitDb25zaWRlcjogbm90aGluZy1hdC1hbGwgY291bGQgYmUgYSBAY29kZXt3b3Jkc30uICBPciBpdCBjb3VsZCBiZSB0d28KK0Bjb2Rle3dvcmRzfSBpbiBhIHJvdywgb3IgdGhyZWUsIG9yIGFueSBudW1iZXIuICBJdCBjb3VsZCBlcXVhbGx5IHdlbGwgYmUgYQorQGNvZGV7cmVkaXJlY3RzfSwgb3IgdHdvLCBvciBhbnkgbnVtYmVyLiAgT3IgaXQgY291bGQgYmUgYSBAY29kZXt3b3Jkc30KK2ZvbGxvd2VkIGJ5IHRocmVlIEBjb2Rle3JlZGlyZWN0c30gYW5kIGFub3RoZXIgQGNvZGV7d29yZHN9LiAgQW5kIHNvIG9uLgorCitIZXJlIGFyZSB0d28gd2F5cyB0byBjb3JyZWN0IHRoZXNlIHJ1bGVzLiAgRmlyc3QsIHRvIG1ha2UgaXQgYSBzaW5nbGUgbGV2ZWwKK29mIHNlcXVlbmNlOgorCitAZXhhbXBsZQorc2VxdWVuY2U6CisgIC8qIGVtcHR5ICovCit8IHNlcXVlbmNlIHdvcmQKK3wgc2VxdWVuY2UgcmVkaXJlY3QKKzsKK0BlbmQgZXhhbXBsZQorCitTZWNvbmQsIHRvIHByZXZlbnQgZWl0aGVyIGEgQGNvZGV7d29yZHN9IG9yIGEgQGNvZGV7cmVkaXJlY3RzfQorZnJvbSBiZWluZyBlbXB0eToKKworQGV4YW1wbGUKK0Bncm91cAorc2VxdWVuY2U6CisgIC8qIGVtcHR5ICovCit8IHNlcXVlbmNlIHdvcmRzCit8IHNlcXVlbmNlIHJlZGlyZWN0cworOworQGVuZCBncm91cAorCitAZ3JvdXAKK3dvcmRzOgorICB3b3JkCit8IHdvcmRzIHdvcmQKKzsKK0BlbmQgZ3JvdXAKKworQGdyb3VwCityZWRpcmVjdHM6CisgIHJlZGlyZWN0Cit8IHJlZGlyZWN0cyByZWRpcmVjdAorOworQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK1lldCB0aGlzIHByb3Bvc2FsIGludHJvZHVjZXMgYW5vdGhlciBraW5kIG9mIGFtYmlndWl0eSEgIFRoZSBpbnB1dAorQHNhbXB7d29yZCB3b3JkfSBjYW4gYmUgcGFyc2VkIGFzIGEgc2luZ2xlIEBjb2Rle3dvcmRzfSBjb21wb3NlZCBvZiB0d28KK0BzYW1we3dvcmR9cywgb3IgYXMgdHdvIG9uZS1AY29kZXt3b3JkfSBAY29kZXt3b3Jkc30gKGFuZCBsaWtld2lzZSBmb3IKK0Bjb2Rle3JlZGlyZWN0fS9AY29kZXtyZWRpcmVjdHN9KS4gIEhvd2V2ZXIgdGhpcyBhbWJpZ3VpdHkgaXMgbm93IGEKK3NoaWZ0L3JlZHVjZSBjb25mbGljdCwgYW5kIHRoZXJlZm9yZSBpdCBjYW4gbm93IGJlIGFkZHJlc3NlZCB3aXRoIHByZWNlZGVuY2UKK2RpcmVjdGl2ZXMuCisKK1RvIHNpbXBsaWZ5IHRoZSBtYXR0ZXIsIHdlIHdpbGwgcHJvY2VlZCB3aXRoIEBjb2Rle3dvcmR9IGFuZCBAY29kZXtyZWRpcmVjdH0KK2JlaW5nIHRva2VuczogQGNvZGV7IndvcmQifSBhbmQgQGNvZGV7InJlZGlyZWN0In0uCisKK1RvIHByZWZlciB0aGUgbG9uZ2VzdCBAY29kZXt3b3Jkc30sIHRoZSBjb25mbGljdCBiZXR3ZWVuIHRoZSB0b2tlbgorQGNvZGV7IndvcmQifSBhbmQgdGhlIHJ1bGUgQHNhbXB7c2VxdWVuY2U6IHNlcXVlbmNlIHdvcmRzfSBtdXN0IGJlIHJlc29sdmVkCithcyBhIHNoaWZ0LiAgVG8gdGhpcyBlbmQsIHdlIHVzZSB0aGUgc2FtZSB0ZWNobmlxdWVzIGFzIGV4cG9zZWQgYWJvdmUsIHNlZQorQHJlZntOb24gT3BlcmF0b3JzLCwgVXNpbmcgUHJlY2VkZW5jZSBGb3IgTm9uIE9wZXJhdG9yc30uICBPbmUgc29sdXRpb24KK3JlbGllcyBvbiBwcmVjZWRlbmNlczogdXNlIEBjb2RleyVwcmVjfSB0byBnaXZlIGEgbG93ZXIgcHJlY2VkZW5jZSB0byB0aGUKK3J1bGU6CisKK0BleGFtcGxlCislbm9uYXNzb2MgIndvcmQiCislbm9uYXNzb2MgInNlcXVlbmNlIgorJSUKK0Bncm91cAorc2VxdWVuY2U6CisgIC8qIGVtcHR5ICovCit8IHNlcXVlbmNlIHdvcmQgICAgICAlcHJlYyAic2VxdWVuY2UiCit8IHNlcXVlbmNlIHJlZGlyZWN0ICAlcHJlYyAic2VxdWVuY2UiCis7CitAZW5kIGdyb3VwCisKK0Bncm91cAord29yZHM6CisgIHdvcmQKK3wgd29yZHMgIndvcmQiCis7CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworQW5vdGhlciBzb2x1dGlvbiByZWxpZXMgb24gYXNzb2NpYXRpdml0eTogcHJvdmlkZSBib3RoIHRoZSB0b2tlbiBhbmQgdGhlCitydWxlIHdpdGggdGhlIHNhbWUgcHJlY2VkZW5jZSwgYnV0IG1ha2UgdGhlbSByaWdodC1hc3NvY2lhdGl2ZToKKworQGV4YW1wbGUKKyVyaWdodCAid29yZCIgInJlZGlyZWN0IgorJSUKK0Bncm91cAorc2VxdWVuY2U6CisgIC8qIGVtcHR5ICovCit8IHNlcXVlbmNlIHdvcmQgICAgICAlcHJlYyAid29yZCIKK3wgc2VxdWVuY2UgcmVkaXJlY3QgICVwcmVjICJyZWRpcmVjdCIKKzsKK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitAbm9kZSBNeXN0ZXJpb3VzIENvbmZsaWN0cworQHNlY3Rpb24gTXlzdGVyaW91cyBDb25mbGljdHMKK0BjaW5kZXggTXlzdGVyaW91cyBDb25mbGljdHMKKworU29tZXRpbWVzIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3RzIGNhbiBvY2N1ciB0aGF0IGRvbid0IGxvb2sgd2FycmFudGVkLgorSGVyZSBpcyBhbiBleGFtcGxlOgorCitAZXhhbXBsZQorQGdyb3VwCislJQorZGVmOiBwYXJhbV9zcGVjIHJldHVybl9zcGVjICcsJzsKK3BhcmFtX3NwZWM6CisgIHR5cGUKK3wgbmFtZV9saXN0ICc6JyB0eXBlCis7CitAZW5kIGdyb3VwCitAZ3JvdXAKK3JldHVybl9zcGVjOgorICB0eXBlCit8IG5hbWUgJzonIHR5cGUKKzsKK0BlbmQgZ3JvdXAKK0Bncm91cAordHlwZTogImlkIjsKK0BlbmQgZ3JvdXAKK0Bncm91cAorbmFtZTogImlkIjsKK25hbWVfbGlzdDoKKyAgbmFtZQorfCBuYW1lICcsJyBuYW1lX2xpc3QKKzsKK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitJdCB3b3VsZCBzZWVtIHRoYXQgdGhpcyBncmFtbWFyIGNhbiBiZSBwYXJzZWQgd2l0aCBvbmx5IGEgc2luZ2xlIHRva2VuIG9mCitsb29rYWhlYWQ6IHdoZW4gYSBAY29kZXtwYXJhbV9zcGVjfSBpcyBiZWluZyByZWFkLCBhbiBAY29kZXsiaWQifSBpcyBhCitAY29kZXtuYW1lfSBpZiBhIGNvbW1hIG9yIGNvbG9uIGZvbGxvd3MsIG9yIGEgQGNvZGV7dHlwZX0gaWYgYW5vdGhlcgorQGNvZGV7ImlkIn0gZm9sbG93cy4gIEluIG90aGVyIHdvcmRzLCB0aGlzIGdyYW1tYXIgaXMgTFIoMSkuCisKK0BjaW5kZXggTFIKK0BjaW5kZXggTEFMUgorSG93ZXZlciwgZm9yIGhpc3RvcmljYWwgcmVhc29ucywgQmlzb24gY2Fubm90IGJ5IGRlZmF1bHQgaGFuZGxlIGFsbAorTFIoMSkgZ3JhbW1hcnMuCitJbiB0aGlzIGdyYW1tYXIsIHR3byBjb250ZXh0cywgdGhhdCBhZnRlciBhbiBAY29kZXsiaWQifSBhdCB0aGUgYmVnaW5uaW5nCitvZiBhIEBjb2Rle3BhcmFtX3NwZWN9IGFuZCBsaWtld2lzZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEKK0Bjb2Rle3JldHVybl9zcGVjfSwgYXJlIHNpbWlsYXIgZW5vdWdoIHRoYXQgQmlzb24gYXNzdW1lcyB0aGV5IGFyZSB0aGUKK3NhbWUuCitUaGV5IGFwcGVhciBzaW1pbGFyIGJlY2F1c2UgdGhlIHNhbWUgc2V0IG9mIHJ1bGVzIHdvdWxkIGJlCithY3RpdmUtLS10aGUgcnVsZSBmb3IgcmVkdWNpbmcgdG8gYSBAY29kZXtuYW1lfSBhbmQgdGhhdCBmb3IgcmVkdWNpbmcgdG8KK2EgQGNvZGV7dHlwZX0uICBCaXNvbiBpcyB1bmFibGUgdG8gZGV0ZXJtaW5lIGF0IHRoYXQgc3RhZ2Ugb2YgcHJvY2Vzc2luZwordGhhdCB0aGUgcnVsZXMgd291bGQgcmVxdWlyZSBkaWZmZXJlbnQgbG9va2FoZWFkIHRva2VucyBpbiB0aGUgdHdvCitjb250ZXh0cywgc28gaXQgbWFrZXMgYSBzaW5nbGUgcGFyc2VyIHN0YXRlIGZvciB0aGVtIGJvdGguICBDb21iaW5pbmcKK3RoZSB0d28gY29udGV4dHMgY2F1c2VzIGEgY29uZmxpY3QgbGF0ZXIuICBJbiBwYXJzZXIgdGVybWlub2xvZ3ksIHRoaXMKK29jY3VycmVuY2UgbWVhbnMgdGhhdCB0aGUgZ3JhbW1hciBpcyBub3QgTEFMUigxKS4KKworQGNpbmRleCBJRUxSCitAY2luZGV4IGNhbm9uaWNhbCBMUgorRm9yIG1hbnkgcHJhY3RpY2FsIGdyYW1tYXJzIChzcGVjaWZpY2FsbHkgdGhvc2UgdGhhdCBmYWxsIGludG8gdGhlIG5vbi1MUigxKQorY2xhc3MpLCB0aGUgbGltaXRhdGlvbnMgb2YgTEFMUigxKSByZXN1bHQgaW4gZGlmZmljdWx0aWVzIGJleW9uZCBqdXN0CitteXN0ZXJpb3VzIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3RzLiAgVGhlIGJlc3Qgd2F5IHRvIGZpeCBhbGwgdGhlc2UgcHJvYmxlbXMKK2lzIHRvIHNlbGVjdCBhIGRpZmZlcmVudCBwYXJzZXIgdGFibGUgY29uc3RydWN0aW9uIGFsZ29yaXRobS4gIEVpdGhlcgorSUVMUigxKSBvciBjYW5vbmljYWwgTFIoMSkgd291bGQgc3VmZmljZSwgYnV0IHRoZSBmb3JtZXIgaXMgbW9yZSBlZmZpY2llbnQKK2FuZCBlYXNpZXIgdG8gZGVidWcgZHVyaW5nIGRldmVsb3BtZW50LiAgQHhyZWZ7TFIgVGFibGUgQ29uc3RydWN0aW9ufSwgZm9yCitkZXRhaWxzLiAgKEJpc29uJ3MgSUVMUigxKSBhbmQgY2Fub25pY2FsIExSKDEpIGltcGxlbWVudGF0aW9ucyBhcmUKK2V4cGVyaW1lbnRhbC4gIE1vcmUgdXNlciBmZWVkYmFjayB3aWxsIGhlbHAgdG8gc3RhYmlsaXplIHRoZW0uKQorCitJZiB5b3UgaW5zdGVhZCB3aXNoIHRvIHdvcmsgYXJvdW5kIExBTFIoMSkncyBsaW1pdGF0aW9ucywgeW91CitjYW4gb2Z0ZW4gZml4IGEgbXlzdGVyaW91cyBjb25mbGljdCBieSBpZGVudGlmeWluZyB0aGUgdHdvIHBhcnNlciBzdGF0ZXMKK3RoYXQgYXJlIGJlaW5nIGNvbmZ1c2VkLCBhbmQgYWRkaW5nIHNvbWV0aGluZyB0byBtYWtlIHRoZW0gbG9vaworZGlzdGluY3QuICBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgYWRkaW5nIG9uZSBydWxlIHRvCitAY29kZXtyZXR1cm5fc3BlY30gYXMgZm9sbG93cyBtYWtlcyB0aGUgcHJvYmxlbSBnbyBhd2F5OgorCitAZXhhbXBsZQorQGdyb3VwCitAZG90c3t9CityZXR1cm5fc3BlYzoKKyAgdHlwZQorfCBuYW1lICc6JyB0eXBlCit8ICJpZCIgImJvZ3VzIiAgICAgICAvKiBUaGlzIHJ1bGUgaXMgbmV2ZXIgdXNlZC4gICovCis7CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworVGhpcyBjb3JyZWN0cyB0aGUgcHJvYmxlbSBiZWNhdXNlIGl0IGludHJvZHVjZXMgdGhlIHBvc3NpYmlsaXR5IG9mIGFuCithZGRpdGlvbmFsIGFjdGl2ZSBydWxlIGluIHRoZSBjb250ZXh0IGFmdGVyIHRoZSBAY29kZXsiaWQifSBhdCB0aGUgYmVnaW5uaW5nIG9mCitAY29kZXtyZXR1cm5fc3BlY30uICBUaGlzIHJ1bGUgaXMgbm90IGFjdGl2ZSBpbiB0aGUgY29ycmVzcG9uZGluZyBjb250ZXh0CitpbiBhIEBjb2Rle3BhcmFtX3NwZWN9LCBzbyB0aGUgdHdvIGNvbnRleHRzIHJlY2VpdmUgZGlzdGluY3QgcGFyc2VyIHN0YXRlcy4KK0FzIGxvbmcgYXMgdGhlIHRva2VuIEBjb2RleyJib2d1cyJ9IGlzIG5ldmVyIGdlbmVyYXRlZCBieSBAY29kZXt5eWxleH0sCit0aGUgYWRkZWQgcnVsZSBjYW5ub3QgYWx0ZXIgdGhlIHdheSBhY3R1YWwgaW5wdXQgaXMgcGFyc2VkLgorCitJbiB0aGlzIHBhcnRpY3VsYXIgZXhhbXBsZSwgdGhlcmUgaXMgYW5vdGhlciB3YXkgdG8gc29sdmUgdGhlIHByb2JsZW06CityZXdyaXRlIHRoZSBydWxlIGZvciBAY29kZXtyZXR1cm5fc3BlY30gdG8gdXNlIEBjb2RleyJpZCJ9IGRpcmVjdGx5CitpbnN0ZWFkIG9mIHZpYSBAY29kZXtuYW1lfS4gIFRoaXMgYWxzbyBjYXVzZXMgdGhlIHR3byBjb25mdXNpbmcKK2NvbnRleHRzIHRvIGhhdmUgZGlmZmVyZW50IHNldHMgb2YgYWN0aXZlIHJ1bGVzLCBiZWNhdXNlIHRoZSBvbmUgZm9yCitAY29kZXtyZXR1cm5fc3BlY30gYWN0aXZhdGVzIHRoZSBhbHRlcmVkIHJ1bGUgZm9yIEBjb2Rle3JldHVybl9zcGVjfQorcmF0aGVyIHRoYW4gdGhlIG9uZSBmb3IgQGNvZGV7bmFtZX0uCisKK0BleGFtcGxlCitwYXJhbV9zcGVjOgorICB0eXBlCit8IG5hbWVfbGlzdCAnOicgdHlwZQorOworcmV0dXJuX3NwZWM6CisgIHR5cGUKK3wgImlkIiAnOicgdHlwZQorOworQGVuZCBleGFtcGxlCisKK0ZvciBhIG1vcmUgZGV0YWlsZWQgZXhwb3NpdGlvbiBvZiBMQUxSKDEpIHBhcnNlcnMgYW5kIHBhcnNlcgorZ2VuZXJhdG9ycywgQHB4cmVme0JpYmxpb2dyYXBoeSwsRGVSZW1lciAxOTgyfS4KKworQG5vZGUgVHVuaW5nIExSCitAc2VjdGlvbiBUdW5pbmcgTFIKKworVGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgQmlzb24ncyBMUi1iYXNlZCBwYXJzZXJzIGlzIGNob3NlbiBtb3N0bHkgZm9yCitoaXN0b3JpY2FsIHJlYXNvbnMsIGJ1dCB0aGF0IGJlaGF2aW9yIGlzIG9mdGVuIG5vdCByb2J1c3QuICBGb3IgZXhhbXBsZSwgaW4KK3RoZSBwcmV2aW91cyBzZWN0aW9uLCB3ZSBkaXNjdXNzZWQgdGhlIG15c3RlcmlvdXMgY29uZmxpY3RzIHRoYXQgY2FuIGJlCitwcm9kdWNlZCBieSBMQUxSKDEpLCBCaXNvbidzIGRlZmF1bHQgcGFyc2VyIHRhYmxlIGNvbnN0cnVjdGlvbiBhbGdvcml0aG0uCitBbm90aGVyIGV4YW1wbGUgaXMgQmlzb24ncyBAY29kZXslZXJyb3ItdmVyYm9zZX0gZGlyZWN0aXZlLCB3aGljaCBpbnN0cnVjdHMKK3RoZSBnZW5lcmF0ZWQgcGFyc2VyIHRvIHByb2R1Y2UgdmVyYm9zZSBzeW50YXggZXJyb3IgbWVzc2FnZXMsIHdoaWNoIGNhbgorc29tZXRpbWVzIGNvbnRhaW4gaW5jb3JyZWN0IGluZm9ybWF0aW9uLgorCitJbiB0aGlzIHNlY3Rpb24sIHdlIGV4cGxvcmUgc2V2ZXJhbCBtb2Rlcm4gZmVhdHVyZXMgb2YgQmlzb24gdGhhdCBhbGxvdyB5b3UKK3RvIHR1bmUgZnVuZGFtZW50YWwgYXNwZWN0cyBvZiB0aGUgZ2VuZXJhdGVkIExSLWJhc2VkIHBhcnNlcnMuICBTb21lIG9mCit0aGVzZSBmZWF0dXJlcyBlYXNpbHkgZWxpbWluYXRlIHNob3J0Y29taW5ncyBsaWtlIHRob3NlIG1lbnRpb25lZCBhYm92ZS4KK090aGVycyBjYW4gYmUgaGVscGZ1bCBwdXJlbHkgZm9yIHVuZGVyc3RhbmRpbmcgeW91ciBwYXJzZXIuCisKK01vc3Qgb2YgdGhlIGZlYXR1cmVzIGRpc2N1c3NlZCBpbiB0aGlzIHNlY3Rpb24gYXJlIHN0aWxsIGV4cGVyaW1lbnRhbC4gIE1vcmUKK3VzZXIgZmVlZGJhY2sgd2lsbCBoZWxwIHRvIHN0YWJpbGl6ZSB0aGVtLgorCitAbWVudQorKiBMUiBUYWJsZSBDb25zdHJ1Y3Rpb246OiBDaG9vc2UgYSBkaWZmZXJlbnQgY29uc3RydWN0aW9uIGFsZ29yaXRobS4KKyogRGVmYXVsdCBSZWR1Y3Rpb25zOjogICAgRGlzYWJsZSBkZWZhdWx0IHJlZHVjdGlvbnMuCisqIExBQzo6ICAgICAgICAgICAgICAgICAgIENvcnJlY3QgbG9va2FoZWFkIHNldHMgaW4gdGhlIHBhcnNlciBzdGF0ZXMuCisqIFVucmVhY2hhYmxlIFN0YXRlczo6ICAgIEtlZXAgdW5yZWFjaGFibGUgcGFyc2VyIHN0YXRlcyBmb3IgZGVidWdnaW5nLgorQGVuZCBtZW51CisKK0Bub2RlIExSIFRhYmxlIENvbnN0cnVjdGlvbgorQHN1YnNlY3Rpb24gTFIgVGFibGUgQ29uc3RydWN0aW9uCitAY2luZGV4IE15c3RlcmlvdXMgQ29uZmxpY3QKK0BjaW5kZXggTEFMUgorQGNpbmRleCBJRUxSCitAY2luZGV4IGNhbm9uaWNhbCBMUgorQGZpbmRleCAlZGVmaW5lIGxyLnR5cGUKKworRm9yIGhpc3RvcmljYWwgcmVhc29ucywgQmlzb24gY29uc3RydWN0cyBMQUxSKDEpIHBhcnNlciB0YWJsZXMgYnkgZGVmYXVsdC4KK0hvd2V2ZXIsIExBTFIgZG9lcyBub3QgcG9zc2VzcyB0aGUgZnVsbCBsYW5ndWFnZS1yZWNvZ25pdGlvbiBwb3dlciBvZiBMUi4KK0FzIGEgcmVzdWx0LCB0aGUgYmVoYXZpb3Igb2YgcGFyc2VycyBlbXBsb3lpbmcgTEFMUiBwYXJzZXIgdGFibGVzIGlzIG9mdGVuCitteXN0ZXJpb3VzLiAgV2UgcHJlc2VudGVkIGEgc2ltcGxlIGV4YW1wbGUgb2YgdGhpcyBlZmZlY3QgaW4gQHJlZntNeXN0ZXJpb3VzCitDb25mbGljdHN9LgorCitBcyB3ZSBhbHNvIGRlbW9uc3RyYXRlZCBpbiB0aGF0IGV4YW1wbGUsIHRoZSB0cmFkaXRpb25hbCBhcHByb2FjaCB0bworZWxpbWluYXRpbmcgc3VjaCBteXN0ZXJpb3VzIGJlaGF2aW9yIGlzIHRvIHJlc3RydWN0dXJlIHRoZSBncmFtbWFyLgorVW5mb3J0dW5hdGVseSwgZG9pbmcgc28gY29ycmVjdGx5IGlzIG9mdGVuIGRpZmZpY3VsdC4gIE1vcmVvdmVyLCBtZXJlbHkKK2Rpc2NvdmVyaW5nIHRoYXQgTEFMUiBjYXVzZXMgbXlzdGVyaW91cyBiZWhhdmlvciBpbiB5b3VyIHBhcnNlciBjYW4gYmUKK2RpZmZpY3VsdCBhcyB3ZWxsLgorCitGb3J0dW5hdGVseSwgQmlzb24gcHJvdmlkZXMgYW4gZWFzeSB3YXkgdG8gZWxpbWluYXRlIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoCitteXN0ZXJpb3VzIGJlaGF2aW9yIGFsdG9nZXRoZXIuICBZb3Ugc2ltcGx5IG5lZWQgdG8gYWN0aXZhdGUgYSBtb3JlIHBvd2VyZnVsCitwYXJzZXIgdGFibGUgY29uc3RydWN0aW9uIGFsZ29yaXRobSBieSB1c2luZyB0aGUgQGNvZGV7JWRlZmluZSBsci50eXBlfQorZGlyZWN0aXZlLgorCitAZGVmZm4ge0RpcmVjdGl2ZX0geyVkZWZpbmUgbHIudHlwZX0gQHZhcnt0eXBlfQorU3BlY2lmeSB0aGUgdHlwZSBvZiBwYXJzZXIgdGFibGVzIHdpdGhpbiB0aGUgTFIoMSkgZmFtaWx5LiAgVGhlIGFjY2VwdGVkCit2YWx1ZXMgZm9yIEB2YXJ7dHlwZX0gYXJlOgorCitAaXRlbWl6ZQorQGl0ZW0gQGNvZGV7bGFscn0gKGRlZmF1bHQpCitAaXRlbSBAY29kZXtpZWxyfQorQGl0ZW0gQGNvZGV7Y2Fub25pY2FsLWxyfQorQGVuZCBpdGVtaXplCisKKyhUaGlzIGZlYXR1cmUgaXMgZXhwZXJpbWVudGFsLiBNb3JlIHVzZXIgZmVlZGJhY2sgd2lsbCBoZWxwIHRvIHN0YWJpbGl6ZQoraXQuKQorQGVuZCBkZWZmbgorCitGb3IgZXhhbXBsZSwgdG8gYWN0aXZhdGUgSUVMUiwgeW91IG1pZ2h0IGFkZCB0aGUgZm9sbG93aW5nIGRpcmVjdGl2ZSB0byB5b3UKK2dyYW1tYXIgZmlsZToKKworQGV4YW1wbGUKKyVkZWZpbmUgbHIudHlwZSBpZWxyCitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50IEZvciB0aGUgZXhhbXBsZSBpbiBAcmVme015c3RlcmlvdXMgQ29uZmxpY3RzfSwgdGhlIG15c3RlcmlvdXMKK2NvbmZsaWN0IGlzIHRoZW4gZWxpbWluYXRlZCwgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBpbnZlc3QgdGltZSBpbgorY29tcHJlaGVuZGluZyB0aGUgY29uZmxpY3Qgb3IgcmVzdHJ1Y3R1cmluZyB0aGUgZ3JhbW1hciB0byBmaXggaXQuICBJZiwKK2R1cmluZyBmdXR1cmUgZGV2ZWxvcG1lbnQsIHRoZSBncmFtbWFyIGV2b2x2ZXMgc3VjaCB0aGF0IGFsbCBteXN0ZXJpb3VzCitiZWhhdmlvciB3b3VsZCBoYXZlIGRpc2FwcGVhcmVkIHVzaW5nIGp1c3QgTEFMUiwgeW91IG5lZWQgbm90IGZlYXIgdGhhdAorY29udGludWluZyB0byB1c2UgSUVMUiB3aWxsIHJlc3VsdCBpbiB1bm5lY2Vzc2FyaWx5IGxhcmdlIHBhcnNlciB0YWJsZXMuCitUaGF0IGlzLCBJRUxSIGdlbmVyYXRlcyBMQUxSIHRhYmxlcyB3aGVuIExBTFIgKHVzaW5nIGEgZGV0ZXJtaW5pc3RpYyBwYXJzaW5nCithbGdvcml0aG0pIGlzIHN1ZmZpY2llbnQgdG8gc3VwcG9ydCB0aGUgZnVsbCBsYW5ndWFnZS1yZWNvZ25pdGlvbiBwb3dlciBvZgorTFIuICBUaHVzLCBieSBlbmFibGluZyBJRUxSIGF0IHRoZSBzdGFydCBvZiBncmFtbWFyIGRldmVsb3BtZW50LCB5b3UgY2FuCitzYWZlbHkgYW5kIGNvbXBsZXRlbHkgZWxpbWluYXRlIHRoZSBuZWVkIHRvIGNvbnNpZGVyIExBTFIncyBzaG9ydGNvbWluZ3MuCisKK1doaWxlIElFTFIgaXMgYWxtb3N0IGFsd2F5cyBwcmVmZXJhYmxlLCB0aGVyZSBhcmUgY2lyY3Vtc3RhbmNlcyB3aGVyZSBMQUxSCitvciB0aGUgY2Fub25pY2FsIExSIHBhcnNlciB0YWJsZXMgZGVzY3JpYmVkIGJ5IEtudXRoCisoQHB4cmVme0JpYmxpb2dyYXBoeSwsS251dGggMTk2NX0pIGNhbiBiZSB1c2VmdWwuICBIZXJlIHdlIHN1bW1hcml6ZSB0aGUKK3JlbGF0aXZlIGFkdmFudGFnZXMgb2YgZWFjaCBwYXJzZXIgdGFibGUgY29uc3RydWN0aW9uIGFsZ29yaXRobSB3aXRoaW4KK0Jpc29uOgorCitAaXRlbWl6ZQorQGl0ZW0gTEFMUgorCitUaGVyZSBhcmUgYXQgbGVhc3QgdHdvIHNjZW5hcmlvcyB3aGVyZSBMQUxSIGNhbiBiZSB3b3J0aHdoaWxlOgorCitAaXRlbWl6ZQorQGl0ZW0gR0xSIHdpdGhvdXQgc3RhdGljIGNvbmZsaWN0IHJlc29sdXRpb24uCisKK0BjaW5kZXggR0xSIHdpdGggTEFMUgorV2hlbiBlbXBsb3lpbmcgR0xSIHBhcnNlcnMgKEBweHJlZntHTFIgUGFyc2Vyc30pLCBpZiB5b3UgZG8gbm90IHJlc29sdmUgYW55Citjb25mbGljdHMgc3RhdGljYWxseSAoZm9yIGV4YW1wbGUsIHdpdGggQGNvZGV7JWxlZnR9IG9yIEBjb2RleyVwcmVjfSksIHRoZW4KK3RoZSBwYXJzZXIgZXhwbG9yZXMgYWxsIHBvdGVudGlhbCBwYXJzZXMgb2YgYW55IGdpdmVuIGlucHV0LiAgSW4gdGhpcyBjYXNlLAordGhlIGNob2ljZSBvZiBwYXJzZXIgdGFibGUgY29uc3RydWN0aW9uIGFsZ29yaXRobSBpcyBndWFyYW50ZWVkIG5vdCB0byBhbHRlcgordGhlIGxhbmd1YWdlIGFjY2VwdGVkIGJ5IHRoZSBwYXJzZXIuICBMQUxSIHBhcnNlciB0YWJsZXMgYXJlIHRoZSBzbWFsbGVzdAorcGFyc2VyIHRhYmxlcyBCaXNvbiBjYW4gY3VycmVudGx5IGNvbnN0cnVjdCwgc28gdGhleSBtYXkgdGhlbiBiZSBwcmVmZXJhYmxlLgorTmV2ZXJ0aGVsZXNzLCBvbmNlIHlvdSBiZWdpbiB0byByZXNvbHZlIGNvbmZsaWN0cyBzdGF0aWNhbGx5LCBHTFIgYmVoYXZlcworbW9yZSBsaWtlIGEgZGV0ZXJtaW5pc3RpYyBwYXJzZXIgaW4gdGhlIHN5bnRhY3RpYyBjb250ZXh0cyB3aGVyZSB0aG9zZQorY29uZmxpY3RzIGFwcGVhciwgYW5kIHNvIGVpdGhlciBJRUxSIG9yIGNhbm9uaWNhbCBMUiBjYW4gdGhlbiBiZSBoZWxwZnVsIHRvCithdm9pZCBMQUxSJ3MgbXlzdGVyaW91cyBiZWhhdmlvci4KKworQGl0ZW0gTWFsZm9ybWVkIGdyYW1tYXJzLgorCitPY2Nhc2lvbmFsbHkgZHVyaW5nIGRldmVsb3BtZW50LCBhbiBlc3BlY2lhbGx5IG1hbGZvcm1lZCBncmFtbWFyIHdpdGggYQorbWFqb3IgcmVjdXJyaW5nIGZsYXcgbWF5IHNldmVyZWx5IGltcGVkZSB0aGUgSUVMUiBvciBjYW5vbmljYWwgTFIgcGFyc2VyCit0YWJsZSBjb25zdHJ1Y3Rpb24gYWxnb3JpdGhtLiAgTEFMUiBjYW4gYmUgYSBxdWljayB3YXkgdG8gY29uc3RydWN0IHBhcnNlcgordGFibGVzIGluIG9yZGVyIHRvIGludmVzdGlnYXRlIHN1Y2ggcHJvYmxlbXMgd2hpbGUgaWdub3JpbmcgdGhlIG1vcmUgc3VidGxlCitkaWZmZXJlbmNlcyBmcm9tIElFTFIgYW5kIGNhbm9uaWNhbCBMUi4KK0BlbmQgaXRlbWl6ZQorCitAaXRlbSBJRUxSCisKK0lFTFIgKEluYWRlcXVhY3kgRWxpbWluYXRpb24gTFIpIGlzIGEgbWluaW1hbCBMUiBhbGdvcml0aG0uICBUaGF0IGlzLCBnaXZlbgorYW55IGdyYW1tYXIgKExSIG9yIG5vbi1MUiksIHBhcnNlcnMgdXNpbmcgSUVMUiBvciBjYW5vbmljYWwgTFIgcGFyc2VyIHRhYmxlcworYWx3YXlzIGFjY2VwdCBleGFjdGx5IHRoZSBzYW1lIHNldCBvZiBzZW50ZW5jZXMuICBIb3dldmVyLCBsaWtlIExBTFIsIElFTFIKK21lcmdlcyBwYXJzZXIgc3RhdGVzIGR1cmluZyBwYXJzZXIgdGFibGUgY29uc3RydWN0aW9uIHNvIHRoYXQgdGhlIG51bWJlciBvZgorcGFyc2VyIHN0YXRlcyBpcyBvZnRlbiBhbiBvcmRlciBvZiBtYWduaXR1ZGUgbGVzcyB0aGFuIGZvciBjYW5vbmljYWwgTFIuCitNb3JlIGltcG9ydGFudGx5LCBiZWNhdXNlIGNhbm9uaWNhbCBMUidzIGV4dHJhIHBhcnNlciBzdGF0ZXMgbWF5IGNvbnRhaW4KK2R1cGxpY2F0ZSBjb25mbGljdHMgaW4gdGhlIGNhc2Ugb2Ygbm9uLUxSIGdyYW1tYXJzLCB0aGUgbnVtYmVyIG9mIGNvbmZsaWN0cworZm9yIElFTFIgaXMgb2Z0ZW4gYW4gb3JkZXIgb2YgbWFnbml0dWRlIGxlc3MgYXMgd2VsbC4gIFRoaXMgZWZmZWN0IGNhbgorc2lnbmlmaWNhbnRseSByZWR1Y2UgdGhlIGNvbXBsZXhpdHkgb2YgZGV2ZWxvcGluZyBhIGdyYW1tYXIuCisKK0BpdGVtIENhbm9uaWNhbCBMUgorCitAY2luZGV4IGRlbGF5ZWQgc3ludGF4IGVycm9yIGRldGVjdGlvbgorQGNpbmRleCBMQUMKK0BmaW5kZXggJW5vbmFzc29jCitXaGlsZSBpbmVmZmljaWVudCwgY2Fub25pY2FsIExSIHBhcnNlciB0YWJsZXMgY2FuIGJlIGFuIGludGVyZXN0aW5nIG1lYW5zIHRvCitleHBsb3JlIGEgZ3JhbW1hciBiZWNhdXNlIHRoZXkgcG9zc2VzcyBhIHByb3BlcnR5IHRoYXQgSUVMUiBhbmQgTEFMUiB0YWJsZXMKK2RvIG5vdC4gIFRoYXQgaXMsIGlmIEBjb2RleyVub25hc3NvY30gaXMgbm90IHVzZWQgYW5kIGRlZmF1bHQgcmVkdWN0aW9ucyBhcmUKK2xlZnQgZGlzYWJsZWQgKEBweHJlZntEZWZhdWx0IFJlZHVjdGlvbnN9KSwgdGhlbiwgZm9yIGV2ZXJ5IGxlZnQgY29udGV4dCBvZgorZXZlcnkgY2Fub25pY2FsIExSIHN0YXRlLCB0aGUgc2V0IG9mIHRva2VucyBhY2NlcHRlZCBieSB0aGF0IHN0YXRlIGlzCitndWFyYW50ZWVkIHRvIGJlIHRoZSBleGFjdCBzZXQgb2YgdG9rZW5zIHRoYXQgaXMgc3ludGFjdGljYWxseSBhY2NlcHRhYmxlIGluCit0aGF0IGxlZnQgY29udGV4dC4gIEl0IG1pZ2h0IHRoZW4gc2VlbSB0aGF0IGFuIGFkdmFudGFnZSBvZiBjYW5vbmljYWwgTFIKK3BhcnNlcnMgaW4gcHJvZHVjdGlvbiBpcyB0aGF0LCB1bmRlciB0aGUgYWJvdmUgY29uc3RyYWludHMsIHRoZXkgYXJlCitndWFyYW50ZWVkIHRvIGRldGVjdCBhIHN5bnRheCBlcnJvciBhcyBzb29uIGFzIHBvc3NpYmxlIHdpdGhvdXQgcGVyZm9ybWluZworYW55IHVubmVjZXNzYXJ5IHJlZHVjdGlvbnMuICBIb3dldmVyLCBJRUxSIHBhcnNlcnMgdGhhdCB1c2UgTEFDIGFyZSBhbHNvCithYmxlIHRvIGFjaGlldmUgdGhpcyBiZWhhdmlvciB3aXRob3V0IHNhY3JpZmljaW5nIEBjb2RleyVub25hc3NvY30gb3IKK2RlZmF1bHQgcmVkdWN0aW9ucy4gIEZvciBkZXRhaWxzIGFuZCBhIGZldyBjYXZlYXRzIG9mIExBQywgQHB4cmVme0xBQ30uCitAZW5kIGl0ZW1pemUKKworRm9yIGEgbW9yZSBkZXRhaWxlZCBleHBvc2l0aW9uIG9mIHRoZSBteXN0ZXJpb3VzIGJlaGF2aW9yIGluIExBTFIgcGFyc2VycworYW5kIHRoZSBiZW5lZml0cyBvZiBJRUxSLCBAcHhyZWZ7QmlibGlvZ3JhcGh5LCxEZW5ueSAyMDA4IE1hcmNofSwgYW5kCitAcmVme0JpYmxpb2dyYXBoeSwsRGVubnkgMjAxMCBOb3ZlbWJlcn0uCisKK0Bub2RlIERlZmF1bHQgUmVkdWN0aW9ucworQHN1YnNlY3Rpb24gRGVmYXVsdCBSZWR1Y3Rpb25zCitAY2luZGV4IGRlZmF1bHQgcmVkdWN0aW9ucworQGZpbmRleCAlZGVmaW5lIGxyLmRlZmF1bHQtcmVkdWN0aW9ucworQGZpbmRleCAlbm9uYXNzb2MKKworQWZ0ZXIgcGFyc2VyIHRhYmxlIGNvbnN0cnVjdGlvbiwgQmlzb24gaWRlbnRpZmllcyB0aGUgcmVkdWN0aW9uIHdpdGggdGhlCitsYXJnZXN0IGxvb2thaGVhZCBzZXQgaW4gZWFjaCBwYXJzZXIgc3RhdGUuICBUbyByZWR1Y2UgdGhlIHNpemUgb2YgdGhlCitwYXJzZXIgc3RhdGUsIHRyYWRpdGlvbmFsIEJpc29uIGJlaGF2aW9yIGlzIHRvIHJlbW92ZSB0aGF0IGxvb2thaGVhZCBzZXQgYW5kCit0byBhc3NpZ24gdGhhdCByZWR1Y3Rpb24gdG8gYmUgdGhlIGRlZmF1bHQgcGFyc2VyIGFjdGlvbi4gIFN1Y2ggYSByZWR1Y3Rpb24KK2lzIGtub3duIGFzIGEgQGRmbntkZWZhdWx0IHJlZHVjdGlvbn0uCisKK0RlZmF1bHQgcmVkdWN0aW9ucyBhZmZlY3QgbW9yZSB0aGFuIHRoZSBzaXplIG9mIHRoZSBwYXJzZXIgdGFibGVzLiAgVGhleQorYWxzbyBhZmZlY3QgdGhlIGJlaGF2aW9yIG9mIHRoZSBwYXJzZXI6CisKK0BpdGVtaXplCitAaXRlbSBEZWxheWVkIEBjb2Rle3l5bGV4fSBpbnZvY2F0aW9ucy4KKworQGNpbmRleCBkZWxheWVkIHl5bGV4IGludm9jYXRpb25zCitAY2luZGV4IGNvbnNpc3RlbnQgc3RhdGVzCitAY2luZGV4IGRlZmF1bHRlZCBzdGF0ZXMKK0EgQGRmbntjb25zaXN0ZW50IHN0YXRlfSBpcyBhIHN0YXRlIHRoYXQgaGFzIG9ubHkgb25lIHBvc3NpYmxlIHBhcnNlcgorYWN0aW9uLiAgSWYgdGhhdCBhY3Rpb24gaXMgYSByZWR1Y3Rpb24gYW5kIGlzIGVuY29kZWQgYXMgYSBkZWZhdWx0CityZWR1Y3Rpb24sIHRoZW4gdGhhdCBjb25zaXN0ZW50IHN0YXRlIGlzIGNhbGxlZCBhIEBkZm57ZGVmYXVsdGVkIHN0YXRlfS4KK1Vwb24gcmVhY2hpbmcgYSBkZWZhdWx0ZWQgc3RhdGUsIGEgQmlzb24tZ2VuZXJhdGVkIHBhcnNlciBkb2VzIG5vdCBib3RoZXIgdG8KK2ludm9rZSBAY29kZXt5eWxleH0gdG8gZmV0Y2ggdGhlIG5leHQgdG9rZW4gYmVmb3JlIHBlcmZvcm1pbmcgdGhlIHJlZHVjdGlvbi4KK0luIG90aGVyIHdvcmRzLCB3aGV0aGVyIGRlZmF1bHQgcmVkdWN0aW9ucyBhcmUgZW5hYmxlZCBpbiBjb25zaXN0ZW50IHN0YXRlcworZGV0ZXJtaW5lcyBob3cgc29vbiBhIEJpc29uLWdlbmVyYXRlZCBwYXJzZXIgaW52b2tlcyBAY29kZXt5eWxleH0gZm9yIGEKK3Rva2VuOiBpbW1lZGlhdGVseSB3aGVuIGl0IEBlbXBoe3JlYWNoZXN9IHRoYXQgdG9rZW4gaW4gdGhlIGlucHV0IG9yIHdoZW4gaXQKK2V2ZW50dWFsbHkgQGVtcGh7bmVlZHN9IHRoYXQgdG9rZW4gYXMgYSBsb29rYWhlYWQgdG8gZGV0ZXJtaW5lIHRoZSBuZXh0CitwYXJzZXIgYWN0aW9uLiAgVHJhZGl0aW9uYWxseSwgZGVmYXVsdCByZWR1Y3Rpb25zIGFyZSBlbmFibGVkLCBhbmQgc28gdGhlCitwYXJzZXIgZXhoaWJpdHMgdGhlIGxhdHRlciBiZWhhdmlvci4KKworVGhlIHByZXNlbmNlIG9mIGRlZmF1bHRlZCBzdGF0ZXMgaXMgYW4gaW1wb3J0YW50IGNvbnNpZGVyYXRpb24gd2hlbgorZGVzaWduaW5nIEBjb2Rle3l5bGV4fSBhbmQgdGhlIGdyYW1tYXIgZmlsZS4gIFRoYXQgaXMsIGlmIHRoZSBiZWhhdmlvciBvZgorQGNvZGV7eXlsZXh9IGNhbiBpbmZsdWVuY2Ugb3IgYmUgaW5mbHVlbmNlZCBieSB0aGUgc2VtYW50aWMgYWN0aW9ucworYXNzb2NpYXRlZCB3aXRoIHRoZSByZWR1Y3Rpb25zIGluIGRlZmF1bHRlZCBzdGF0ZXMsIHRoZW4gdGhlIGRlbGF5IG9mIHRoZQorbmV4dCBAY29kZXt5eWxleH0gaW52b2NhdGlvbiB1bnRpbCBhZnRlciB0aG9zZSByZWR1Y3Rpb25zIGlzIHNpZ25pZmljYW50LgorRm9yIGV4YW1wbGUsIHRoZSBzZW1hbnRpYyBhY3Rpb25zIG1pZ2h0IHBvcCBhIHNjb3BlIHN0YWNrIHRoYXQgQGNvZGV7eXlsZXh9Cit1c2VzIHRvIGRldGVybWluZSB3aGF0IHRva2VuIHRvIHJldHVybi4gIFRodXMsIHRoZSBkZWxheSBtaWdodCBiZSBuZWNlc3NhcnkKK3RvIGVuc3VyZSB0aGF0IEBjb2Rle3l5bGV4fSBkb2VzIG5vdCBsb29rIHVwIHRoZSBuZXh0IHRva2VuIGluIGEgc2NvcGUgdGhhdAorc2hvdWxkIGFscmVhZHkgYmUgY29uc2lkZXJlZCBjbG9zZWQuCisKK0BpdGVtIERlbGF5ZWQgc3ludGF4IGVycm9yIGRldGVjdGlvbi4KKworQGNpbmRleCBkZWxheWVkIHN5bnRheCBlcnJvciBkZXRlY3Rpb24KK1doZW4gdGhlIHBhcnNlciBmZXRjaGVzIGEgbmV3IHRva2VuIGJ5IGludm9raW5nIEBjb2Rle3l5bGV4fSwgaXQgY2hlY2tzCit3aGV0aGVyIHRoZXJlIGlzIGFuIGFjdGlvbiBmb3IgdGhhdCB0b2tlbiBpbiB0aGUgY3VycmVudCBwYXJzZXIgc3RhdGUuICBUaGUKK3BhcnNlciBkZXRlY3RzIGEgc3ludGF4IGVycm9yIGlmIGFuZCBvbmx5IGlmIGVpdGhlciAoMSkgdGhlcmUgaXMgbm8gYWN0aW9uCitmb3IgdGhhdCB0b2tlbiBvciAoMikgdGhlIGFjdGlvbiBmb3IgdGhhdCB0b2tlbiBpcyB0aGUgZXJyb3IgYWN0aW9uIChkdWUgdG8KK3RoZSB1c2Ugb2YgQGNvZGV7JW5vbmFzc29jfSkuICBIb3dldmVyLCBpZiB0aGVyZSBpcyBhIGRlZmF1bHQgcmVkdWN0aW9uIGluCit0aGF0IHN0YXRlICh3aGljaCBtaWdodCBvciBtaWdodCBub3QgYmUgYSBkZWZhdWx0ZWQgc3RhdGUpLCB0aGVuIGl0IGlzCitpbXBvc3NpYmxlIGZvciBjb25kaXRpb24gMSB0byBleGlzdC4gIFRoYXQgaXMsIGFsbCB0b2tlbnMgaGF2ZSBhbiBhY3Rpb24uCitUaHVzLCB0aGUgcGFyc2VyIHNvbWV0aW1lcyBmYWlscyB0byBkZXRlY3QgdGhlIHN5bnRheCBlcnJvciB1bnRpbCBpdCByZWFjaGVzCithIGxhdGVyIHN0YXRlLgorCitAY2luZGV4IExBQworQGMgSWYgdGhlcmUncyBhbiBpbmZpbml0ZSBsb29wLCBkZWZhdWx0IHJlZHVjdGlvbnMgY2FuIHByZXZlbnQgYW4gaW5jb3JyZWN0CitAYyBzZW50ZW5jZSBmcm9tIGJlaW5nIHJlamVjdGVkLgorV2hpbGUgZGVmYXVsdCByZWR1Y3Rpb25zIG5ldmVyIGNhdXNlIHRoZSBwYXJzZXIgdG8gYWNjZXB0IHN5bnRhY3RpY2FsbHkKK2luY29ycmVjdCBzZW50ZW5jZXMsIHRoZSBkZWxheSBvZiBzeW50YXggZXJyb3IgZGV0ZWN0aW9uIGNhbiBoYXZlIHVuZXhwZWN0ZWQKK2VmZmVjdHMgb24gdGhlIGJlaGF2aW9yIG9mIHRoZSBwYXJzZXIuICBIb3dldmVyLCB0aGUgZGVsYXkgY2FuIGJlIGNhdXNlZAorYW55d2F5IGJ5IHBhcnNlciBzdGF0ZSBtZXJnaW5nIGFuZCB0aGUgdXNlIG9mIEBjb2RleyVub25hc3NvY30sIGFuZCBpdCBjYW4KK2JlIGZpeGVkIGJ5IGFub3RoZXIgQmlzb24gZmVhdHVyZSwgTEFDLiAgV2UgZGlzY3VzcyB0aGUgZWZmZWN0cyBvZiBkZWxheWVkCitzeW50YXggZXJyb3IgZGV0ZWN0aW9uIGFuZCBMQUMgbW9yZSBpbiB0aGUgbmV4dCBzZWN0aW9uIChAcHhyZWZ7TEFDfSkuCitAZW5kIGl0ZW1pemUKKworRm9yIGNhbm9uaWNhbCBMUiwgdGhlIG9ubHkgZGVmYXVsdCByZWR1Y3Rpb24gdGhhdCBCaXNvbiBlbmFibGVzIGJ5IGRlZmF1bHQKK2lzIHRoZSBhY2NlcHQgYWN0aW9uLCB3aGljaCBhcHBlYXJzIG9ubHkgaW4gdGhlIGFjY2VwdGluZyBzdGF0ZSwgd2hpY2ggaGFzCitubyBvdGhlciBhY3Rpb24gYW5kIGlzIHRodXMgYSBkZWZhdWx0ZWQgc3RhdGUuICBIb3dldmVyLCB0aGUgZGVmYXVsdCBhY2NlcHQKK2FjdGlvbiBkb2VzIG5vdCBkZWxheSBhbnkgQGNvZGV7eXlsZXh9IGludm9jYXRpb24gb3Igc3ludGF4IGVycm9yIGRldGVjdGlvbgorYmVjYXVzZSB0aGUgYWNjZXB0IGFjdGlvbiBlbmRzIHRoZSBwYXJzZS4KKworRm9yIExBTFIgYW5kIElFTFIsIEJpc29uIGVuYWJsZXMgZGVmYXVsdCByZWR1Y3Rpb25zIGluIG5lYXJseSBhbGwgc3RhdGVzIGJ5CitkZWZhdWx0LiAgVGhlcmUgYXJlIG9ubHkgdHdvIGV4Y2VwdGlvbnMuICBGaXJzdCwgc3RhdGVzIHRoYXQgaGF2ZSBhIHNoaWZ0CithY3Rpb24gb24gdGhlIEBjb2Rle2Vycm9yfSB0b2tlbiBkbyBub3QgaGF2ZSBkZWZhdWx0IHJlZHVjdGlvbnMgYmVjYXVzZQorZGVsYXllZCBzeW50YXggZXJyb3IgZGV0ZWN0aW9uIGNvdWxkIHRoZW4gcHJldmVudCB0aGUgQGNvZGV7ZXJyb3J9IHRva2VuCitmcm9tIGV2ZXIgYmVpbmcgc2hpZnRlZCBpbiB0aGF0IHN0YXRlLiAgSG93ZXZlciwgcGFyc2VyIHN0YXRlIG1lcmdpbmcgY2FuCitjYXVzZSB0aGUgc2FtZSBlZmZlY3QgYW55d2F5LCBhbmQgTEFDIGZpeGVzIGl0IGluIGJvdGggY2FzZXMsIHNvIGZ1dHVyZQordmVyc2lvbnMgb2YgQmlzb24gbWlnaHQgZHJvcCB0aGlzIGV4Y2VwdGlvbiB3aGVuIExBQyBpcyBhY3RpdmF0ZWQuICBTZWNvbmQsCitHTFIgcGFyc2VycyBkbyBub3QgcmVjb3JkIHRoZSBkZWZhdWx0IHJlZHVjdGlvbiBhcyB0aGUgYWN0aW9uIG9uIGEgbG9va2FoZWFkCit0b2tlbiBmb3Igd2hpY2ggdGhlcmUgaXMgYSBjb25mbGljdC4gIFRoZSBjb3JyZWN0IGFjdGlvbiBpbiB0aGlzIGNhc2UgaXMgdG8KK3NwbGl0IHRoZSBwYXJzZSBpbnN0ZWFkLgorCitUbyBhZGp1c3Qgd2hpY2ggc3RhdGVzIGhhdmUgZGVmYXVsdCByZWR1Y3Rpb25zIGVuYWJsZWQsIHVzZSB0aGUKK0Bjb2RleyVkZWZpbmUgbHIuZGVmYXVsdC1yZWR1Y3Rpb25zfSBkaXJlY3RpdmUuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSB7JWRlZmluZSBsci5kZWZhdWx0LXJlZHVjdGlvbnN9IEB2YXJ7d2hlcmV9CitTcGVjaWZ5IHRoZSBraW5kIG9mIHN0YXRlcyB0aGF0IGFyZSBwZXJtaXR0ZWQgdG8gY29udGFpbiBkZWZhdWx0IHJlZHVjdGlvbnMuCitUaGUgYWNjZXB0ZWQgdmFsdWVzIG9mIEB2YXJ7d2hlcmV9IGFyZToKK0BpdGVtaXplCitAaXRlbSBAY29kZXttb3N0fSAoZGVmYXVsdCBmb3IgTEFMUiBhbmQgSUVMUikKK0BpdGVtIEBjb2Rle2NvbnNpc3RlbnR9CitAaXRlbSBAY29kZXthY2NlcHRpbmd9IChkZWZhdWx0IGZvciBjYW5vbmljYWwgTFIpCitAZW5kIGl0ZW1pemUKKworKFRoZSBhYmlsaXR5IHRvIHNwZWNpZnkgd2hlcmUgZGVmYXVsdCByZWR1Y3Rpb25zIGFyZSBwZXJtaXR0ZWQgaXMKK2V4cGVyaW1lbnRhbC4gIE1vcmUgdXNlciBmZWVkYmFjayB3aWxsIGhlbHAgdG8gc3RhYmlsaXplIGl0LikKK0BlbmQgZGVmZm4KKworQG5vZGUgTEFDCitAc3Vic2VjdGlvbiBMQUMKK0BmaW5kZXggJWRlZmluZSBwYXJzZS5sYWMKK0BjaW5kZXggTEFDCitAY2luZGV4IGxvb2thaGVhZCBjb3JyZWN0aW9uCisKK0Nhbm9uaWNhbCBMUiwgSUVMUiwgYW5kIExBTFIgY2FuIHN1ZmZlciBmcm9tIGEgY291cGxlIG9mIHByb2JsZW1zIHVwb24KK2VuY291bnRlcmluZyBhIHN5bnRheCBlcnJvci4gIEZpcnN0LCB0aGUgcGFyc2VyIG1pZ2h0IHBlcmZvcm0gYWRkaXRpb25hbAorcGFyc2VyIHN0YWNrIHJlZHVjdGlvbnMgYmVmb3JlIGRpc2NvdmVyaW5nIHRoZSBzeW50YXggZXJyb3IuICBTdWNoCityZWR1Y3Rpb25zIGNhbiBwZXJmb3JtIHVzZXIgc2VtYW50aWMgYWN0aW9ucyB0aGF0IGFyZSB1bmV4cGVjdGVkIGJlY2F1c2UKK3RoZXkgYXJlIGJhc2VkIG9uIGFuIGludmFsaWQgdG9rZW4sIGFuZCB0aGV5IGNhdXNlIGVycm9yIHJlY292ZXJ5IHRvIGJlZ2luCitpbiBhIGRpZmZlcmVudCBzeW50YWN0aWMgY29udGV4dCB0aGFuIHRoZSBvbmUgaW4gd2hpY2ggdGhlIGludmFsaWQgdG9rZW4gd2FzCitlbmNvdW50ZXJlZC4gIFNlY29uZCwgd2hlbiB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzIGFyZSBlbmFibGVkIChAcHhyZWZ7RXJyb3IKK1JlcG9ydGluZ30pLCB0aGUgZXhwZWN0ZWQgdG9rZW4gbGlzdCBpbiB0aGUgc3ludGF4IGVycm9yIG1lc3NhZ2UgY2FuIGJvdGgKK2NvbnRhaW4gaW52YWxpZCB0b2tlbnMgYW5kIG9taXQgdmFsaWQgdG9rZW5zLgorCitUaGUgY3VscHJpdHMgZm9yIHRoZSBhYm92ZSBwcm9ibGVtcyBhcmUgQGNvZGV7JW5vbmFzc29jfSwgZGVmYXVsdCByZWR1Y3Rpb25zCitpbiBpbmNvbnNpc3RlbnQgc3RhdGVzIChAcHhyZWZ7RGVmYXVsdCBSZWR1Y3Rpb25zfSksIGFuZCBwYXJzZXIgc3RhdGUKK21lcmdpbmcuICBCZWNhdXNlIElFTFIgYW5kIExBTFIgbWVyZ2UgcGFyc2VyIHN0YXRlcywgdGhleSBzdWZmZXIgdGhlIG1vc3QuCitDYW5vbmljYWwgTFIgY2FuIHN1ZmZlciBvbmx5IGlmIEBjb2RleyVub25hc3NvY30gaXMgdXNlZCBvciBpZiBkZWZhdWx0CityZWR1Y3Rpb25zIGFyZSBlbmFibGVkIGZvciBpbmNvbnNpc3RlbnQgc3RhdGVzLgorCitMQUMgKExvb2thaGVhZCBDb3JyZWN0aW9uKSBpcyBhIG5ldyBtZWNoYW5pc20gd2l0aGluIHRoZSBwYXJzaW5nIGFsZ29yaXRobQordGhhdCBzb2x2ZXMgdGhlc2UgcHJvYmxlbXMgZm9yIGNhbm9uaWNhbCBMUiwgSUVMUiwgYW5kIExBTFIgd2l0aG91dAorc2FjcmlmaWNpbmcgQGNvZGV7JW5vbmFzc29jfSwgZGVmYXVsdCByZWR1Y3Rpb25zLCBvciBzdGF0ZSBtZXJnaW5nLiAgWW91IGNhbgorZW5hYmxlIExBQyB3aXRoIHRoZSBAY29kZXslZGVmaW5lIHBhcnNlLmxhY30gZGlyZWN0aXZlLgorCitAZGVmZm4ge0RpcmVjdGl2ZX0geyVkZWZpbmUgcGFyc2UubGFjfSBAdmFye3ZhbHVlfQorRW5hYmxlIExBQyB0byBpbXByb3ZlIHN5bnRheCBlcnJvciBoYW5kbGluZy4KK0BpdGVtaXplCitAaXRlbSBAY29kZXtub25lfSAoZGVmYXVsdCkKK0BpdGVtIEBjb2Rle2Z1bGx9CitAZW5kIGl0ZW1pemUKKyhUaGlzIGZlYXR1cmUgaXMgZXhwZXJpbWVudGFsLiAgTW9yZSB1c2VyIGZlZWRiYWNrIHdpbGwgaGVscCB0byBzdGFiaWxpemUKK2l0LiAgTW9yZW92ZXIsIGl0IGlzIGN1cnJlbnRseSBvbmx5IGF2YWlsYWJsZSBmb3IgZGV0ZXJtaW5pc3RpYyBwYXJzZXJzIGluCitDLikKK0BlbmQgZGVmZm4KKworQ29uY2VwdHVhbGx5LCB0aGUgTEFDIG1lY2hhbmlzbSBpcyBzdHJhaWdodC1mb3J3YXJkLiAgV2hlbmV2ZXIgdGhlIHBhcnNlcgorZmV0Y2hlcyBhIG5ldyB0b2tlbiBmcm9tIHRoZSBzY2FubmVyIHNvIHRoYXQgaXQgY2FuIGRldGVybWluZSB0aGUgbmV4dAorcGFyc2VyIGFjdGlvbiwgaXQgaW1tZWRpYXRlbHkgc3VzcGVuZHMgbm9ybWFsIHBhcnNpbmcgYW5kIHBlcmZvcm1zIGFuCitleHBsb3JhdG9yeSBwYXJzZSB1c2luZyBhIHRlbXBvcmFyeSBjb3B5IG9mIHRoZSBub3JtYWwgcGFyc2VyIHN0YXRlIHN0YWNrLgorRHVyaW5nIHRoaXMgZXhwbG9yYXRvcnkgcGFyc2UsIHRoZSBwYXJzZXIgZG9lcyBub3QgcGVyZm9ybSB1c2VyIHNlbWFudGljCithY3Rpb25zLiAgSWYgdGhlIGV4cGxvcmF0b3J5IHBhcnNlIHJlYWNoZXMgYSBzaGlmdCBhY3Rpb24sIG5vcm1hbCBwYXJzaW5nCit0aGVuIHJlc3VtZXMgb24gdGhlIG5vcm1hbCBwYXJzZXIgc3RhY2tzLiAgSWYgdGhlIGV4cGxvcmF0b3J5IHBhcnNlIHJlYWNoZXMKK2FuIGVycm9yIGluc3RlYWQsIHRoZSBwYXJzZXIgcmVwb3J0cyBhIHN5bnRheCBlcnJvci4gIElmIHZlcmJvc2Ugc3ludGF4CitlcnJvciBtZXNzYWdlcyBhcmUgZW5hYmxlZCwgdGhlIHBhcnNlciBtdXN0IHRoZW4gZGlzY292ZXIgdGhlIGxpc3Qgb2YKK2V4cGVjdGVkIHRva2Vucywgc28gaXQgcGVyZm9ybXMgYSBzZXBhcmF0ZSBleHBsb3JhdG9yeSBwYXJzZSBmb3IgZWFjaCB0b2tlbgoraW4gdGhlIGdyYW1tYXIuCisKK1RoZXJlIGlzIG9uZSBzdWJ0bGV0eSBhYm91dCB0aGUgdXNlIG9mIExBQy4gIFRoYXQgaXMsIHdoZW4gaW4gYSBjb25zaXN0ZW50CitwYXJzZXIgc3RhdGUgd2l0aCBhIGRlZmF1bHQgcmVkdWN0aW9uLCB0aGUgcGFyc2VyIHdpbGwgbm90IGF0dGVtcHQgdG8gZmV0Y2gKK2EgdG9rZW4gZnJvbSB0aGUgc2Nhbm5lciBiZWNhdXNlIG5vIGxvb2thaGVhZCBpcyBuZWVkZWQgdG8gZGV0ZXJtaW5lIHRoZQorbmV4dCBwYXJzZXIgYWN0aW9uLiAgVGh1cywgd2hldGhlciBkZWZhdWx0IHJlZHVjdGlvbnMgYXJlIGVuYWJsZWQgaW4KK2NvbnNpc3RlbnQgc3RhdGVzIChAcHhyZWZ7RGVmYXVsdCBSZWR1Y3Rpb25zfSkgYWZmZWN0cyBob3cgc29vbiB0aGUgcGFyc2VyCitkZXRlY3RzIGEgc3ludGF4IGVycm9yOiBpbW1lZGlhdGVseSB3aGVuIGl0IEBlbXBoe3JlYWNoZXN9IGFuIGVycm9uZW91cwordG9rZW4gb3Igd2hlbiBpdCBldmVudHVhbGx5IEBlbXBoe25lZWRzfSB0aGF0IHRva2VuIGFzIGEgbG9va2FoZWFkIHRvCitkZXRlcm1pbmUgdGhlIG5leHQgcGFyc2VyIGFjdGlvbi4gIFRoZSBsYXR0ZXIgYmVoYXZpb3IgaXMgcHJvYmFibHkgbW9yZQoraW50dWl0aXZlLCBzbyBCaXNvbiBjdXJyZW50bHkgcHJvdmlkZXMgbm8gd2F5IHRvIGFjaGlldmUgdGhlIGZvcm1lciBiZWhhdmlvcgord2hpbGUgZGVmYXVsdCByZWR1Y3Rpb25zIGFyZSBlbmFibGVkIGluIGNvbnNpc3RlbnQgc3RhdGVzLgorCitUaHVzLCB3aGVuIExBQyBpcyBpbiB1c2UsIGZvciBzb21lIGZpeGVkIGRlY2lzaW9uIG9mIHdoZXRoZXIgdG8gZW5hYmxlCitkZWZhdWx0IHJlZHVjdGlvbnMgaW4gY29uc2lzdGVudCBzdGF0ZXMsIGNhbm9uaWNhbCBMUiBhbmQgSUVMUiBiZWhhdmUgYWxtb3N0CitleGFjdGx5IHRoZSBzYW1lIGZvciBib3RoIHN5bnRhY3RpY2FsbHkgYWNjZXB0YWJsZSBhbmQgc3ludGFjdGljYWxseQordW5hY2NlcHRhYmxlIGlucHV0LiAgV2hpbGUgTEFMUiBzdGlsbCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBmdWxsCitsYW5ndWFnZS1yZWNvZ25pdGlvbiBwb3dlciBvZiBjYW5vbmljYWwgTFIgYW5kIElFTFIsIExBQyBhdCBsZWFzdCBlbmFibGVzCitMQUxSJ3Mgc3ludGF4IGVycm9yIGhhbmRsaW5nIHRvIGNvcnJlY3RseSByZWZsZWN0IExBTFIncworbGFuZ3VhZ2UtcmVjb2duaXRpb24gcG93ZXIuCisKK1RoZXJlIGFyZSBhIGZldyBjYXZlYXRzIHRvIGNvbnNpZGVyIHdoZW4gdXNpbmcgTEFDOgorCitAaXRlbWl6ZQorQGl0ZW0gSW5maW5pdGUgcGFyc2luZyBsb29wcy4KKworSUVMUiBwbHVzIExBQyBkb2VzIGhhdmUgb25lIHNob3J0Y29taW5nIHJlbGF0aXZlIHRvIGNhbm9uaWNhbCBMUi4gIFNvbWUKK3BhcnNlcnMgZ2VuZXJhdGVkIGJ5IEJpc29uIGNhbiBsb29wIGluZmluaXRlbHkuICBMQUMgZG9lcyBub3QgZml4IGluZmluaXRlCitwYXJzaW5nIGxvb3BzIHRoYXQgb2NjdXIgYmV0d2VlbiBlbmNvdW50ZXJpbmcgYSBzeW50YXggZXJyb3IgYW5kIGRldGVjdGluZworaXQsIGJ1dCBlbmFibGluZyBjYW5vbmljYWwgTFIgb3IgZGlzYWJsaW5nIGRlZmF1bHQgcmVkdWN0aW9ucyBzb21ldGltZXMKK2RvZXMuCisKK0BpdGVtIFZlcmJvc2UgZXJyb3IgbWVzc2FnZSBsaW1pdGF0aW9ucy4KKworQmVjYXVzZSBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiBjb25zaWRlcmF0aW9ucywgQmlzb24tZ2VuZXJhdGVkIHBhcnNlcnMKK2xpbWl0IHRoZSBzaXplIG9mIHRoZSBleHBlY3RlZCB0b2tlbiBsaXN0IHRoZXkgYXJlIHdpbGxpbmcgdG8gcmVwb3J0IGluIGEKK3ZlcmJvc2Ugc3ludGF4IGVycm9yIG1lc3NhZ2UuICBJZiB0aGUgbnVtYmVyIG9mIGV4cGVjdGVkIHRva2VucyBleGNlZWRzIHRoYXQKK2xpbWl0LCB0aGUgbGlzdCBpcyBzaW1wbHkgZHJvcHBlZCBmcm9tIHRoZSBtZXNzYWdlLiAgRW5hYmxpbmcgTEFDIGNhbgoraW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIGxpc3QgYW5kIHRodXMgY2F1c2UgdGhlIHBhcnNlciB0byBkcm9wIGl0LiAgT2YKK2NvdXJzZSwgZHJvcHBpbmcgdGhlIGxpc3QgaXMgYmV0dGVyIHRoYW4gcmVwb3J0aW5nIGFuIGluY29ycmVjdCBsaXN0LgorCitAaXRlbSBQZXJmb3JtYW5jZS4KKworQmVjYXVzZSBMQUMgcmVxdWlyZXMgbWFueSBwYXJzZSBhY3Rpb25zIHRvIGJlIHBlcmZvcm1lZCB0d2ljZSwgaXQgY2FuIGhhdmUgYQorcGVyZm9ybWFuY2UgcGVuYWx0eS4gIEhvd2V2ZXIsIG5vdCBhbGwgcGFyc2UgYWN0aW9ucyBtdXN0IGJlIHBlcmZvcm1lZAordHdpY2UuICBTcGVjaWZpY2FsbHksIGR1cmluZyBhIHNlcmllcyBvZiBkZWZhdWx0IHJlZHVjdGlvbnMgaW4gY29uc2lzdGVudAorc3RhdGVzIGFuZCBzaGlmdCBhY3Rpb25zLCB0aGUgcGFyc2VyIG5ldmVyIGhhcyB0byBpbml0aWF0ZSBhbiBleHBsb3JhdG9yeQorcGFyc2UuICBNb3Jlb3ZlciwgdGhlIG1vc3QgdGltZS1jb25zdW1pbmcgdGFza3MgaW4gYSBwYXJzZSBhcmUgb2Z0ZW4gdGhlCitmaWxlIEkvTywgdGhlIGxleGljYWwgYW5hbHlzaXMgcGVyZm9ybWVkIGJ5IHRoZSBzY2FubmVyLCBhbmQgdGhlIHVzZXIncworc2VtYW50aWMgYWN0aW9ucywgYnV0IG5vbmUgb2YgdGhlc2UgYXJlIHBlcmZvcm1lZCBkdXJpbmcgdGhlIGV4cGxvcmF0b3J5CitwYXJzZS4gIEZpbmFsbHksIHRoZSBiYXNlIG9mIHRoZSB0ZW1wb3Jhcnkgc3RhY2sgdXNlZCBkdXJpbmcgYW4gZXhwbG9yYXRvcnkKK3BhcnNlIGlzIGEgcG9pbnRlciBpbnRvIHRoZSBub3JtYWwgcGFyc2VyIHN0YXRlIHN0YWNrIHNvIHRoYXQgdGhlIHN0YWNrIGlzCituZXZlciBwaHlzaWNhbGx5IGNvcGllZC4gIEluIG91ciBleHBlcmllbmNlLCB0aGUgcGVyZm9ybWFuY2UgcGVuYWx0eSBvZiBMQUMKK2hhcyBwcm92ZWQgaW5zaWduaWZpY2FudCBmb3IgcHJhY3RpY2FsIGdyYW1tYXJzLgorQGVuZCBpdGVtaXplCisKK1doaWxlIHRoZSBMQUMgYWxnb3JpdGhtIHNoYXJlcyB0ZWNobmlxdWVzIHRoYXQgaGF2ZSBiZWVuIHJlY29nbml6ZWQgaW4gdGhlCitwYXJzZXIgY29tbXVuaXR5IGZvciB5ZWFycywgZm9yIHRoZSBwdWJsaWNhdGlvbiB0aGF0IGludHJvZHVjZXMgTEFDLAorQHB4cmVme0JpYmxpb2dyYXBoeSwsRGVubnkgMjAxMCBNYXl9LgorCitAbm9kZSBVbnJlYWNoYWJsZSBTdGF0ZXMKK0BzdWJzZWN0aW9uIFVucmVhY2hhYmxlIFN0YXRlcworQGZpbmRleCAlZGVmaW5lIGxyLmtlZXAtdW5yZWFjaGFibGUtc3RhdGVzCitAY2luZGV4IHVucmVhY2hhYmxlIHN0YXRlcworCitJZiB0aGVyZSBleGlzdHMgbm8gc2VxdWVuY2Ugb2YgdHJhbnNpdGlvbnMgZnJvbSB0aGUgcGFyc2VyJ3Mgc3RhcnQgc3RhdGUgdG8KK3NvbWUgc3RhdGUgQHZhcntzfSwgdGhlbiBCaXNvbiBjb25zaWRlcnMgQHZhcntzfSB0byBiZSBhbiBAZGZue3VucmVhY2hhYmxlCitzdGF0ZX0uICBBIHN0YXRlIGNhbiBiZWNvbWUgdW5yZWFjaGFibGUgZHVyaW5nIGNvbmZsaWN0IHJlc29sdXRpb24gaWYgQmlzb24KK2Rpc2FibGVzIGEgc2hpZnQgYWN0aW9uIGxlYWRpbmcgdG8gaXQgZnJvbSBhIHByZWRlY2Vzc29yIHN0YXRlLgorCitCeSBkZWZhdWx0LCBCaXNvbiByZW1vdmVzIHVucmVhY2hhYmxlIHN0YXRlcyBmcm9tIHRoZSBwYXJzZXIgYWZ0ZXIgY29uZmxpY3QKK3Jlc29sdXRpb24gYmVjYXVzZSB0aGV5IGFyZSB1c2VsZXNzIGluIHRoZSBnZW5lcmF0ZWQgcGFyc2VyLiAgSG93ZXZlciwKK2tlZXBpbmcgdW5yZWFjaGFibGUgc3RhdGVzIGlzIHNvbWV0aW1lcyB1c2VmdWwgd2hlbiB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUKK3JlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBwYXJzZXIgYW5kIHRoZSBncmFtbWFyLgorCitAZGVmZm4ge0RpcmVjdGl2ZX0geyVkZWZpbmUgbHIua2VlcC11bnJlYWNoYWJsZS1zdGF0ZXN9IEB2YXJ7dmFsdWV9CitSZXF1ZXN0IHRoYXQgQmlzb24gYWxsb3cgdW5yZWFjaGFibGUgc3RhdGVzIHRvIHJlbWFpbiBpbiB0aGUgcGFyc2VyIHRhYmxlcy4KK0B2YXJ7dmFsdWV9IG11c3QgYmUgYSBCb29sZWFuLiAgVGhlIGRlZmF1bHQgaXMgQGNvZGV7ZmFsc2V9LgorQGVuZCBkZWZmbgorCitUaGVyZSBhcmUgYSBmZXcgY2F2ZWF0cyB0byBjb25zaWRlcjoKKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0gTWlzc2luZyBvciBleHRyYW5lb3VzIHdhcm5pbmdzLgorCitVbnJlYWNoYWJsZSBzdGF0ZXMgbWF5IGNvbnRhaW4gY29uZmxpY3RzIGFuZCBtYXkgdXNlIHJ1bGVzIG5vdCB1c2VkIGluIGFueQorb3RoZXIgc3RhdGUuICBUaHVzLCBrZWVwaW5nIHVucmVhY2hhYmxlIHN0YXRlcyBtYXkgaW5kdWNlIHdhcm5pbmdzIHRoYXQgYXJlCitpcnJlbGV2YW50IHRvIHlvdXIgcGFyc2VyJ3MgYmVoYXZpb3IsIGFuZCBpdCBtYXkgZWxpbWluYXRlIHdhcm5pbmdzIHRoYXQgYXJlCityZWxldmFudC4gIE9mIGNvdXJzZSwgdGhlIGNoYW5nZSBpbiB3YXJuaW5ncyBtYXkgYWN0dWFsbHkgYmUgcmVsZXZhbnQgdG8gYQorcGFyc2VyIHRhYmxlIGFuYWx5c2lzIHRoYXQgd2FudHMgdG8ga2VlcCB1bnJlYWNoYWJsZSBzdGF0ZXMsIHNvIHRoaXMKK2JlaGF2aW9yIHdpbGwgbGlrZWx5IHJlbWFpbiBpbiBmdXR1cmUgQmlzb24gcmVsZWFzZXMuCisKK0BpdGVtIE90aGVyIHVzZWxlc3Mgc3RhdGVzLgorCitXaGlsZSBCaXNvbiBpcyBhYmxlIHRvIHJlbW92ZSB1bnJlYWNoYWJsZSBzdGF0ZXMsIGl0IGlzIG5vdCBndWFyYW50ZWVkIHRvCityZW1vdmUgb3RoZXIga2luZHMgb2YgdXNlbGVzcyBzdGF0ZXMuICBTcGVjaWZpY2FsbHksIHdoZW4gQmlzb24gZGlzYWJsZXMKK3JlZHVjZSBhY3Rpb25zIGR1cmluZyBjb25mbGljdCByZXNvbHV0aW9uLCBzb21lIGdvdG8gYWN0aW9ucyBtYXkgYmVjb21lCit1c2VsZXNzLCBhbmQgdGh1cyBzb21lIGFkZGl0aW9uYWwgc3RhdGVzIG1heSBiZWNvbWUgdXNlbGVzcy4gIElmIEJpc29uIHdlcmUKK3RvIGNvbXB1dGUgd2hpY2ggZ290byBhY3Rpb25zIHdlcmUgdXNlbGVzcyBhbmQgdGhlbiBkaXNhYmxlIHRob3NlIGFjdGlvbnMsCitpdCBjb3VsZCBpZGVudGlmeSBzdWNoIHN0YXRlcyBhcyB1bnJlYWNoYWJsZSBhbmQgdGhlbiByZW1vdmUgdGhvc2Ugc3RhdGVzLgorSG93ZXZlciwgQmlzb24gZG9lcyBub3QgY29tcHV0ZSB3aGljaCBnb3RvIGFjdGlvbnMgYXJlIHVzZWxlc3MuCitAZW5kIGl0ZW1pemUKKworQG5vZGUgR2VuZXJhbGl6ZWQgTFIgUGFyc2luZworQHNlY3Rpb24gR2VuZXJhbGl6ZWQgTFIgKEdMUikgUGFyc2luZworQGNpbmRleCBHTFIgcGFyc2luZworQGNpbmRleCBnZW5lcmFsaXplZCBMUiAoR0xSKSBwYXJzaW5nCitAY2luZGV4IGFtYmlndW91cyBncmFtbWFycworQGNpbmRleCBub25kZXRlcm1pbmlzdGljIHBhcnNpbmcKKworQmlzb24gcHJvZHVjZXMgQGVtcGh7ZGV0ZXJtaW5pc3RpY30gcGFyc2VycyB0aGF0IGNob29zZSB1bmlxdWVseQord2hlbiB0byByZWR1Y2UgYW5kIHdoaWNoIHJlZHVjdGlvbiB0byBhcHBseQorYmFzZWQgb24gYSBzdW1tYXJ5IG9mIHRoZSBwcmVjZWRpbmcgaW5wdXQgYW5kIG9uIG9uZSBleHRyYSB0b2tlbiBvZiBsb29rYWhlYWQuCitBcyBhIHJlc3VsdCwgbm9ybWFsIEJpc29uIGhhbmRsZXMgYSBwcm9wZXIgc3Vic2V0IG9mIHRoZSBmYW1pbHkgb2YKK2NvbnRleHQtZnJlZSBsYW5ndWFnZXMuCitBbWJpZ3VvdXMgZ3JhbW1hcnMsIHNpbmNlIHRoZXkgaGF2ZSBzdHJpbmdzIHdpdGggbW9yZSB0aGFuIG9uZSBwb3NzaWJsZQorc2VxdWVuY2Ugb2YgcmVkdWN0aW9ucyBjYW5ub3QgaGF2ZSBkZXRlcm1pbmlzdGljIHBhcnNlcnMgaW4gdGhpcyBzZW5zZS4KK1RoZSBzYW1lIGlzIHRydWUgb2YgbGFuZ3VhZ2VzIHRoYXQgcmVxdWlyZSBtb3JlIHRoYW4gb25lIHN5bWJvbCBvZgorbG9va2FoZWFkLCBzaW5jZSB0aGUgcGFyc2VyIGxhY2tzIHRoZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8gbWFrZSBhCitkZWNpc2lvbiBhdCB0aGUgcG9pbnQgaXQgbXVzdCBiZSBtYWRlIGluIGEgc2hpZnQtcmVkdWNlIHBhcnNlci4KK0ZpbmFsbHksIGFzIHByZXZpb3VzbHkgbWVudGlvbmVkIChAcHhyZWZ7TXlzdGVyaW91cyBDb25mbGljdHN9KSwKK3RoZXJlIGFyZSBsYW5ndWFnZXMgd2hlcmUgQmlzb24ncyBkZWZhdWx0IGNob2ljZSBvZiBob3cgdG8KK3N1bW1hcml6ZSB0aGUgaW5wdXQgc2VlbiBzbyBmYXIgbG9zZXMgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLgorCitXaGVuIHlvdSB1c2UgdGhlIEBzYW1weyVnbHItcGFyc2VyfSBkZWNsYXJhdGlvbiBpbiB5b3VyIGdyYW1tYXIgZmlsZSwKK0Jpc29uIGdlbmVyYXRlcyBhIHBhcnNlciB0aGF0IHVzZXMgYSBkaWZmZXJlbnQgYWxnb3JpdGhtLCBjYWxsZWQKK0dlbmVyYWxpemVkIExSIChvciBHTFIpLiAgQSBCaXNvbiBHTFIKK3BhcnNlciB1c2VzIHRoZSBzYW1lIGJhc2ljCithbGdvcml0aG0gZm9yIHBhcnNpbmcgYXMgYW4gb3JkaW5hcnkgQmlzb24gcGFyc2VyLCBidXQgYmVoYXZlcworZGlmZmVyZW50bHkgaW4gY2FzZXMgd2hlcmUgdGhlcmUgaXMgYSBzaGlmdC1yZWR1Y2UgY29uZmxpY3QgdGhhdCBoYXMgbm90CitiZWVuIHJlc29sdmVkIGJ5IHByZWNlZGVuY2UgcnVsZXMgKEBweHJlZntQcmVjZWRlbmNlfSkgb3IgYQorcmVkdWNlLXJlZHVjZSBjb25mbGljdC4gIFdoZW4gYSBHTFIgcGFyc2VyIGVuY291bnRlcnMgc3VjaCBhCitzaXR1YXRpb24sIGl0CitlZmZlY3RpdmVseSBAZW1waHtzcGxpdHN9IGludG8gYSBzZXZlcmFsIHBhcnNlcnMsIG9uZSBmb3IgZWFjaCBwb3NzaWJsZQorc2hpZnQgb3IgcmVkdWN0aW9uLiAgVGhlc2UgcGFyc2VycyB0aGVuIHByb2NlZWQgYXMgdXN1YWwsIGNvbnN1bWluZwordG9rZW5zIGluIGxvY2stc3RlcC4gIFNvbWUgb2YgdGhlIHN0YWNrcyBtYXkgZW5jb3VudGVyIG90aGVyIGNvbmZsaWN0cworYW5kIHNwbGl0IGZ1cnRoZXIsIHdpdGggdGhlIHJlc3VsdCB0aGF0IGluc3RlYWQgb2YgYSBzZXF1ZW5jZSBvZiBzdGF0ZXMsCithIEJpc29uIEdMUiBwYXJzaW5nIHN0YWNrIGlzIHdoYXQgaXMgaW4gZWZmZWN0IGEgdHJlZSBvZiBzdGF0ZXMuCisKK0luIGVmZmVjdCwgZWFjaCBzdGFjayByZXByZXNlbnRzIGEgZ3Vlc3MgYXMgdG8gd2hhdCB0aGUgcHJvcGVyIHBhcnNlCitpcy4gIEFkZGl0aW9uYWwgaW5wdXQgbWF5IGluZGljYXRlIHRoYXQgYSBndWVzcyB3YXMgd3JvbmcsIGluIHdoaWNoIGNhc2UKK3RoZSBhcHByb3ByaWF0ZSBzdGFjayBzaWxlbnRseSBkaXNhcHBlYXJzLiAgT3RoZXJ3aXNlLCB0aGUgc2VtYW50aWNzCithY3Rpb25zIGdlbmVyYXRlZCBpbiBlYWNoIHN0YWNrIGFyZSBzYXZlZCwgcmF0aGVyIHRoYW4gYmVpbmcgZXhlY3V0ZWQKK2ltbWVkaWF0ZWx5LiAgV2hlbiBhIHN0YWNrIGRpc2FwcGVhcnMsIGl0cyBzYXZlZCBzZW1hbnRpYyBhY3Rpb25zIG5ldmVyCitnZXQgZXhlY3V0ZWQuICBXaGVuIGEgcmVkdWN0aW9uIGNhdXNlcyB0d28gc3RhY2tzIHRvIGJlY29tZSBlcXVpdmFsZW50LAordGhlaXIgc2V0cyBvZiBzZW1hbnRpYyBhY3Rpb25zIGFyZSBib3RoIHNhdmVkIHdpdGggdGhlIHN0YXRlIHRoYXQKK3Jlc3VsdHMgZnJvbSB0aGUgcmVkdWN0aW9uLiAgV2Ugc2F5IHRoYXQgdHdvIHN0YWNrcyBhcmUgZXF1aXZhbGVudAord2hlbiB0aGV5IGJvdGggcmVwcmVzZW50IHRoZSBzYW1lIHNlcXVlbmNlIG9mIHN0YXRlcywKK2FuZCBlYWNoIHBhaXIgb2YgY29ycmVzcG9uZGluZyBzdGF0ZXMgcmVwcmVzZW50cyBhCitncmFtbWFyIHN5bWJvbCB0aGF0IHByb2R1Y2VzIHRoZSBzYW1lIHNlZ21lbnQgb2YgdGhlIGlucHV0IHRva2VuCitzdHJlYW0uCisKK1doZW5ldmVyIHRoZSBwYXJzZXIgbWFrZXMgYSB0cmFuc2l0aW9uIGZyb20gaGF2aW5nIG11bHRpcGxlCitzdGF0ZXMgdG8gaGF2aW5nIG9uZSwgaXQgcmV2ZXJ0cyB0byB0aGUgbm9ybWFsIGRldGVybWluaXN0aWMgcGFyc2luZworYWxnb3JpdGhtLCBhZnRlciByZXNvbHZpbmcgYW5kIGV4ZWN1dGluZyB0aGUgc2F2ZWQtdXAgYWN0aW9ucy4KK0F0IHRoaXMgdHJhbnNpdGlvbiwgc29tZSBvZiB0aGUgc3RhdGVzIG9uIHRoZSBzdGFjayB3aWxsIGhhdmUgc2VtYW50aWMKK3ZhbHVlcyB0aGF0IGFyZSBzZXRzIChhY3R1YWxseSBtdWx0aXNldHMpIG9mIHBvc3NpYmxlIGFjdGlvbnMuICBUaGUKK3BhcnNlciB0cmllcyB0byBwaWNrIG9uZSBvZiB0aGUgYWN0aW9ucyBieSBmaXJzdCBmaW5kaW5nIG9uZSB3aG9zZSBydWxlCitoYXMgdGhlIGhpZ2hlc3QgZHluYW1pYyBwcmVjZWRlbmNlLCBhcyBzZXQgYnkgdGhlIEBzYW1weyVkcHJlY30KK2RlY2xhcmF0aW9uLiAgT3RoZXJ3aXNlLCBpZiB0aGUgYWx0ZXJuYXRpdmUgYWN0aW9ucyBhcmUgbm90IG9yZGVyZWQgYnkKK3ByZWNlZGVuY2UsIGJ1dCB0aGVyZSB0aGUgc2FtZSBtZXJnaW5nIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGZvciBib3RoCitydWxlcyBieSB0aGUgQHNhbXB7JW1lcmdlfSBkZWNsYXJhdGlvbiwKK0Jpc29uIHJlc29sdmVzIGFuZCBldmFsdWF0ZXMgYm90aCBhbmQgdGhlbiBjYWxscyB0aGUgbWVyZ2UgZnVuY3Rpb24gb24KK3RoZSByZXN1bHQuICBPdGhlcndpc2UsIGl0IHJlcG9ydHMgYW4gYW1iaWd1aXR5LgorCitJdCBpcyBwb3NzaWJsZSB0byB1c2UgYSBkYXRhIHN0cnVjdHVyZSBmb3IgdGhlIEdMUiBwYXJzaW5nIHRyZWUgdGhhdAorcGVybWl0cyB0aGUgcHJvY2Vzc2luZyBvZiBhbnkgTFIoMSkgZ3JhbW1hciBpbiBsaW5lYXIgdGltZSAoaW4gdGhlCitzaXplIG9mIHRoZSBpbnB1dCksIGFueSB1bmFtYmlndW91cyAobm90IG5lY2Vzc2FyaWx5CitMUigxKSkgZ3JhbW1hciBpbgorcXVhZHJhdGljIHdvcnN0LWNhc2UgdGltZSwgYW5kIGFueSBnZW5lcmFsIChwb3NzaWJseSBhbWJpZ3VvdXMpCitjb250ZXh0LWZyZWUgZ3JhbW1hciBpbiBjdWJpYyB3b3JzdC1jYXNlIHRpbWUuICBIb3dldmVyLCBCaXNvbiBjdXJyZW50bHkKK3VzZXMgYSBzaW1wbGVyIGRhdGEgc3RydWN0dXJlIHRoYXQgcmVxdWlyZXMgdGltZSBwcm9wb3J0aW9uYWwgdG8gdGhlCitsZW5ndGggb2YgdGhlIGlucHV0IHRpbWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzdGFja3MgcmVxdWlyZWQgZm9yIGFueQorcHJlZml4IG9mIHRoZSBpbnB1dC4gIFRodXMsIHJlYWxseSBhbWJpZ3VvdXMgb3Igbm9uZGV0ZXJtaW5pc3RpYworZ3JhbW1hcnMgY2FuIHJlcXVpcmUgZXhwb25lbnRpYWwgdGltZSBhbmQgc3BhY2UgdG8gcHJvY2Vzcy4gIFN1Y2ggYmFkbHkKK2JlaGF2aW5nIGV4YW1wbGVzLCBob3dldmVyLCBhcmUgbm90IGdlbmVyYWxseSBvZiBwcmFjdGljYWwgaW50ZXJlc3QuCitVc3VhbGx5LCBub25kZXRlcm1pbmlzbSBpbiBhIGdyYW1tYXIgaXMgbG9jYWwtLS10aGUgcGFyc2VyIGlzIGBgaW4KK2RvdWJ0Jycgb25seSBmb3IgYSBmZXcgdG9rZW5zIGF0IGEgdGltZS4gIFRoZXJlZm9yZSwgdGhlIGN1cnJlbnQgZGF0YQorc3RydWN0dXJlIHNob3VsZCBnZW5lcmFsbHkgYmUgYWRlcXVhdGUuICBPbiBMUigxKSBwb3J0aW9ucyBvZiBhCitncmFtbWFyLCBpbiBwYXJ0aWN1bGFyLCBpdCBpcyBvbmx5IHNsaWdodGx5IHNsb3dlciB0aGFuIHdpdGggdGhlCitkZXRlcm1pbmlzdGljIExSKDEpIEJpc29uIHBhcnNlci4KKworRm9yIGEgbW9yZSBkZXRhaWxlZCBleHBvc2l0aW9uIG9mIEdMUiBwYXJzZXJzLCBAcHhyZWZ7QmlibGlvZ3JhcGh5LCxTY290dAorMjAwMH0uCisKK0Bub2RlIE1lbW9yeSBNYW5hZ2VtZW50CitAc2VjdGlvbiBNZW1vcnkgTWFuYWdlbWVudCwgYW5kIEhvdyB0byBBdm9pZCBNZW1vcnkgRXhoYXVzdGlvbgorQGNpbmRleCBtZW1vcnkgZXhoYXVzdGlvbgorQGNpbmRleCBtZW1vcnkgbWFuYWdlbWVudAorQGNpbmRleCBzdGFjayBvdmVyZmxvdworQGNpbmRleCBwYXJzZXIgc3RhY2sgb3ZlcmZsb3cKK0BjaW5kZXggb3ZlcmZsb3cgb2YgcGFyc2VyIHN0YWNrCisKK1RoZSBCaXNvbiBwYXJzZXIgc3RhY2sgY2FuIHJ1biBvdXQgb2YgbWVtb3J5IGlmIHRvbyBtYW55IHRva2VucyBhcmUgc2hpZnRlZCBhbmQKK25vdCByZWR1Y2VkLiAgV2hlbiB0aGlzIGhhcHBlbnMsIHRoZSBwYXJzZXIgZnVuY3Rpb24gQGNvZGV7eXlwYXJzZX0KK2NhbGxzIEBjb2Rle3l5ZXJyb3J9IGFuZCB0aGVuIHJldHVybnMgMi4KKworQmVjYXVzZSBCaXNvbiBwYXJzZXJzIGhhdmUgZ3Jvd2luZyBzdGFja3MsIGhpdHRpbmcgdGhlIHVwcGVyIGxpbWl0Cit1c3VhbGx5IHJlc3VsdHMgZnJvbSB1c2luZyBhIHJpZ2h0IHJlY3Vyc2lvbiBpbnN0ZWFkIG9mIGEgbGVmdAorcmVjdXJzaW9uLCBzZWUgQHJlZntSZWN1cnNpb24sICxSZWN1cnNpdmUgUnVsZXN9LgorCitAdmluZGV4IFlZTUFYREVQVEgKK0J5IGRlZmluaW5nIHRoZSBtYWNybyBAY29kZXtZWU1BWERFUFRIfSwgeW91IGNhbiBjb250cm9sIGhvdyBkZWVwIHRoZQorcGFyc2VyIHN0YWNrIGNhbiBiZWNvbWUgYmVmb3JlIG1lbW9yeSBpcyBleGhhdXN0ZWQuICBEZWZpbmUgdGhlCittYWNybyB3aXRoIGEgdmFsdWUgdGhhdCBpcyBhbiBpbnRlZ2VyLiAgVGhpcyB2YWx1ZSBpcyB0aGUgbWF4aW11bSBudW1iZXIKK29mIHRva2VucyB0aGF0IGNhbiBiZSBzaGlmdGVkIChhbmQgbm90IHJlZHVjZWQpIGJlZm9yZSBvdmVyZmxvdy4KKworVGhlIHN0YWNrIHNwYWNlIGFsbG93ZWQgaXMgbm90IG5lY2Vzc2FyaWx5IGFsbG9jYXRlZC4gIElmIHlvdSBzcGVjaWZ5IGEKK2xhcmdlIHZhbHVlIGZvciBAY29kZXtZWU1BWERFUFRIfSwgdGhlIHBhcnNlciBub3JtYWxseSBhbGxvY2F0ZXMgYSBzbWFsbAorc3RhY2sgYXQgZmlyc3QsIGFuZCB0aGVuIG1ha2VzIGl0IGJpZ2dlciBieSBzdGFnZXMgYXMgbmVlZGVkLiAgVGhpcworaW5jcmVhc2luZyBhbGxvY2F0aW9uIGhhcHBlbnMgYXV0b21hdGljYWxseSBhbmQgc2lsZW50bHkuICBUaGVyZWZvcmUsCit5b3UgZG8gbm90IG5lZWQgdG8gbWFrZSBAY29kZXtZWU1BWERFUFRIfSBwYWluZnVsbHkgc21hbGwgbWVyZWx5IHRvIHNhdmUKK3NwYWNlIGZvciBvcmRpbmFyeSBpbnB1dHMgdGhhdCBkbyBub3QgbmVlZCBtdWNoIHN0YWNrLgorCitIb3dldmVyLCBkbyBub3QgYWxsb3cgQGNvZGV7WVlNQVhERVBUSH0gdG8gYmUgYSB2YWx1ZSBzbyBsYXJnZSB0aGF0Cithcml0aG1ldGljIG92ZXJmbG93IGNvdWxkIG9jY3VyIHdoZW4gY2FsY3VsYXRpbmcgdGhlIHNpemUgb2YgdGhlIHN0YWNrCitzcGFjZS4gIEFsc28sIGRvIG5vdCBhbGxvdyBAY29kZXtZWU1BWERFUFRIfSB0byBiZSBsZXNzIHRoYW4KK0Bjb2Rle1lZSU5JVERFUFRIfS4KKworQGNpbmRleCBkZWZhdWx0IHN0YWNrIGxpbWl0CitUaGUgZGVmYXVsdCB2YWx1ZSBvZiBAY29kZXtZWU1BWERFUFRIfSwgaWYgeW91IGRvIG5vdCBkZWZpbmUgaXQsIGlzCisxMDAwMC4KKworQHZpbmRleCBZWUlOSVRERVBUSAorWW91IGNhbiBjb250cm9sIGhvdyBtdWNoIHN0YWNrIGlzIGFsbG9jYXRlZCBpbml0aWFsbHkgYnkgZGVmaW5pbmcgdGhlCittYWNybyBAY29kZXtZWUlOSVRERVBUSH0gdG8gYSBwb3NpdGl2ZSBpbnRlZ2VyLiAgRm9yIHRoZSBkZXRlcm1pbmlzdGljCitwYXJzZXIgaW4gQywgdGhpcyB2YWx1ZSBtdXN0IGJlIGEgY29tcGlsZS10aW1lIGNvbnN0YW50Cit1bmxlc3MgeW91IGFyZSBhc3N1bWluZyBDOTkgb3Igc29tZSBvdGhlciB0YXJnZXQgbGFuZ3VhZ2Ugb3IgY29tcGlsZXIKK3RoYXQgYWxsb3dzIHZhcmlhYmxlLWxlbmd0aCBhcnJheXMuICBUaGUgZGVmYXVsdCBpcyAyMDAuCisKK0RvIG5vdCBhbGxvdyBAY29kZXtZWUlOSVRERVBUSH0gdG8gYmUgZ3JlYXRlciB0aGFuIEBjb2Rle1lZTUFYREVQVEh9LgorCitAYyBGSVhNRTogQysrIG91dHB1dC4KK0JlY2F1c2Ugb2Ygc2VtYW50aWMgZGlmZmVyZW5jZXMgYmV0d2VlbiBDIGFuZCBDKyssIHRoZSBkZXRlcm1pbmlzdGljCitwYXJzZXJzIGluIEMgcHJvZHVjZWQgYnkgQmlzb24gY2Fubm90IGdyb3cgd2hlbiBjb21waWxlZAorYnkgQysrIGNvbXBpbGVycy4gIEluIHRoaXMgcHJlY2lzZSBjYXNlIChjb21waWxpbmcgYSBDIHBhcnNlciBhcyBDKyspIHlvdSBhcmUKK3N1Z2dlc3RlZCB0byBncm93IEBjb2Rle1lZSU5JVERFUFRIfS4gIFRoZSBCaXNvbiBtYWludGFpbmVycyBob3BlIHRvIGZpeAordGhpcyBkZWZpY2llbmN5IGluIGEgZnV0dXJlIHJlbGVhc2UuCisKK0Bub2RlIEVycm9yIFJlY292ZXJ5CitAY2hhcHRlciBFcnJvciBSZWNvdmVyeQorQGNpbmRleCBlcnJvciByZWNvdmVyeQorQGNpbmRleCByZWNvdmVyeSBmcm9tIGVycm9ycworCitJdCBpcyBub3QgdXN1YWxseSBhY2NlcHRhYmxlIHRvIGhhdmUgYSBwcm9ncmFtIHRlcm1pbmF0ZSBvbiBhIHN5bnRheAorZXJyb3IuICBGb3IgZXhhbXBsZSwgYSBjb21waWxlciBzaG91bGQgcmVjb3ZlciBzdWZmaWNpZW50bHkgdG8gcGFyc2UgdGhlCityZXN0IG9mIHRoZSBpbnB1dCBmaWxlIGFuZCBjaGVjayBpdCBmb3IgZXJyb3JzOyBhIGNhbGN1bGF0b3Igc2hvdWxkIGFjY2VwdAorYW5vdGhlciBleHByZXNzaW9uLgorCitJbiBhIHNpbXBsZSBpbnRlcmFjdGl2ZSBjb21tYW5kIHBhcnNlciB3aGVyZSBlYWNoIGlucHV0IGlzIG9uZSBsaW5lLCBpdCBtYXkKK2JlIHN1ZmZpY2llbnQgdG8gYWxsb3cgQGNvZGV7eXlwYXJzZX0gdG8gcmV0dXJuIDEgb24gZXJyb3IgYW5kIGhhdmUgdGhlCitjYWxsZXIgaWdub3JlIHRoZSByZXN0IG9mIHRoZSBpbnB1dCBsaW5lIHdoZW4gdGhhdCBoYXBwZW5zIChhbmQgdGhlbiBjYWxsCitAY29kZXt5eXBhcnNlfSBhZ2FpbikuICBCdXQgdGhpcyBpcyBpbmFkZXF1YXRlIGZvciBhIGNvbXBpbGVyLCBiZWNhdXNlIGl0Citmb3JnZXRzIGFsbCB0aGUgc3ludGFjdGljIGNvbnRleHQgbGVhZGluZyB1cCB0byB0aGUgZXJyb3IuICBBIHN5bnRheCBlcnJvcgorZGVlcCB3aXRoaW4gYSBmdW5jdGlvbiBpbiB0aGUgY29tcGlsZXIgaW5wdXQgc2hvdWxkIG5vdCBjYXVzZSB0aGUgY29tcGlsZXIKK3RvIHRyZWF0IHRoZSBmb2xsb3dpbmcgbGluZSBsaWtlIHRoZSBiZWdpbm5pbmcgb2YgYSBzb3VyY2UgZmlsZS4KKworQGZpbmRleCBlcnJvcgorWW91IGNhbiBkZWZpbmUgaG93IHRvIHJlY292ZXIgZnJvbSBhIHN5bnRheCBlcnJvciBieSB3cml0aW5nIHJ1bGVzIHRvCityZWNvZ25pemUgdGhlIHNwZWNpYWwgdG9rZW4gQGNvZGV7ZXJyb3J9LiAgVGhpcyBpcyBhIHRlcm1pbmFsIHN5bWJvbCB0aGF0CitpcyBhbHdheXMgZGVmaW5lZCAoeW91IG5lZWQgbm90IGRlY2xhcmUgaXQpIGFuZCByZXNlcnZlZCBmb3IgZXJyb3IKK2hhbmRsaW5nLiAgVGhlIEJpc29uIHBhcnNlciBnZW5lcmF0ZXMgYW4gQGNvZGV7ZXJyb3J9IHRva2VuIHdoZW5ldmVyIGEKK3N5bnRheCBlcnJvciBoYXBwZW5zOyBpZiB5b3UgaGF2ZSBwcm92aWRlZCBhIHJ1bGUgdG8gcmVjb2duaXplIHRoaXMgdG9rZW4KK2luIHRoZSBjdXJyZW50IGNvbnRleHQsIHRoZSBwYXJzZSBjYW4gY29udGludWUuCisKK0ZvciBleGFtcGxlOgorCitAZXhhbXBsZQorc3RtdHM6CisgIC8qIGVtcHR5IHN0cmluZyAqLworfCBzdG10cyAnXG4nCit8IHN0bXRzIGV4cCAnXG4nCit8IHN0bXRzIGVycm9yICdcbicKK0BlbmQgZXhhbXBsZQorCitUaGUgZm91cnRoIHJ1bGUgaW4gdGhpcyBleGFtcGxlIHNheXMgdGhhdCBhbiBlcnJvciBmb2xsb3dlZCBieSBhIG5ld2xpbmUKK21ha2VzIGEgdmFsaWQgYWRkaXRpb24gdG8gYW55IEBjb2Rle3N0bXRzfS4KKworV2hhdCBoYXBwZW5zIGlmIGEgc3ludGF4IGVycm9yIG9jY3VycyBpbiB0aGUgbWlkZGxlIG9mIGFuIEBjb2Rle2V4cH0/ICBUaGUKK2Vycm9yIHJlY292ZXJ5IHJ1bGUsIGludGVycHJldGVkIHN0cmljdGx5LCBhcHBsaWVzIHRvIHRoZSBwcmVjaXNlIHNlcXVlbmNlCitvZiBhIEBjb2Rle3N0bXRzfSwgYW4gQGNvZGV7ZXJyb3J9IGFuZCBhIG5ld2xpbmUuICBJZiBhbiBlcnJvciBvY2N1cnMgaW4KK3RoZSBtaWRkbGUgb2YgYW4gQGNvZGV7ZXhwfSwgdGhlcmUgd2lsbCBwcm9iYWJseSBiZSBzb21lIGFkZGl0aW9uYWwgdG9rZW5zCithbmQgc3ViZXhwcmVzc2lvbnMgb24gdGhlIHN0YWNrIGFmdGVyIHRoZSBsYXN0IEBjb2Rle3N0bXRzfSwgYW5kIHRoZXJlCit3aWxsIGJlIHRva2VucyB0byByZWFkIGJlZm9yZSB0aGUgbmV4dCBuZXdsaW5lLiAgU28gdGhlIHJ1bGUgaXMgbm90CithcHBsaWNhYmxlIGluIHRoZSBvcmRpbmFyeSB3YXkuCisKK0J1dCBCaXNvbiBjYW4gZm9yY2UgdGhlIHNpdHVhdGlvbiB0byBmaXQgdGhlIHJ1bGUsIGJ5IGRpc2NhcmRpbmcgcGFydCBvZgordGhlIHNlbWFudGljIGNvbnRleHQgYW5kIHBhcnQgb2YgdGhlIGlucHV0LiAgRmlyc3QgaXQgZGlzY2FyZHMgc3RhdGVzCithbmQgb2JqZWN0cyBmcm9tIHRoZSBzdGFjayB1bnRpbCBpdCBnZXRzIGJhY2sgdG8gYSBzdGF0ZSBpbiB3aGljaCB0aGUKK0Bjb2Rle2Vycm9yfSB0b2tlbiBpcyBhY2NlcHRhYmxlLiAgKFRoaXMgbWVhbnMgdGhhdCB0aGUgc3ViZXhwcmVzc2lvbnMKK2FscmVhZHkgcGFyc2VkIGFyZSBkaXNjYXJkZWQsIGJhY2sgdG8gdGhlIGxhc3QgY29tcGxldGUgQGNvZGV7c3RtdHN9LikKK0F0IHRoaXMgcG9pbnQgdGhlIEBjb2Rle2Vycm9yfSB0b2tlbiBjYW4gYmUgc2hpZnRlZC4gIFRoZW4sIGlmIHRoZSBvbGQKK2xvb2thaGVhZCB0b2tlbiBpcyBub3QgYWNjZXB0YWJsZSB0byBiZSBzaGlmdGVkIG5leHQsIHRoZSBwYXJzZXIgcmVhZHMKK3Rva2VucyBhbmQgZGlzY2FyZHMgdGhlbSB1bnRpbCBpdCBmaW5kcyBhIHRva2VuIHdoaWNoIGlzIGFjY2VwdGFibGUuICBJbgordGhpcyBleGFtcGxlLCBCaXNvbiByZWFkcyBhbmQgZGlzY2FyZHMgaW5wdXQgdW50aWwgdGhlIG5leHQgbmV3bGluZSBzbwordGhhdCB0aGUgZm91cnRoIHJ1bGUgY2FuIGFwcGx5LiAgTm90ZSB0aGF0IGRpc2NhcmRlZCBzeW1ib2xzIGFyZQorcG9zc2libGUgc291cmNlcyBvZiBtZW1vcnkgbGVha3MsIHNlZSBAcmVme0Rlc3RydWN0b3IgRGVjbCwgLCBGcmVlaW5nCitEaXNjYXJkZWQgU3ltYm9sc30sIGZvciBhIG1lYW5zIHRvIHJlY2xhaW0gdGhpcyBtZW1vcnkuCisKK1RoZSBjaG9pY2Ugb2YgZXJyb3IgcnVsZXMgaW4gdGhlIGdyYW1tYXIgaXMgYSBjaG9pY2Ugb2Ygc3RyYXRlZ2llcyBmb3IKK2Vycm9yIHJlY292ZXJ5LiAgQSBzaW1wbGUgYW5kIHVzZWZ1bCBzdHJhdGVneSBpcyBzaW1wbHkgdG8gc2tpcCB0aGUgcmVzdCBvZgordGhlIGN1cnJlbnQgaW5wdXQgbGluZSBvciBjdXJyZW50IHN0YXRlbWVudCBpZiBhbiBlcnJvciBpcyBkZXRlY3RlZDoKKworQGV4YW1wbGUKK3N0bXQ6IGVycm9yICc7JyAgLyogT24gZXJyb3IsIHNraXAgdW50aWwgJzsnIGlzIHJlYWQuICAqLworQGVuZCBleGFtcGxlCisKK0l0IGlzIGFsc28gdXNlZnVsIHRvIHJlY292ZXIgdG8gdGhlIG1hdGNoaW5nIGNsb3NlLWRlbGltaXRlciBvZiBhbgorb3BlbmluZy1kZWxpbWl0ZXIgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHBhcnNlZC4gIE90aGVyd2lzZSB0aGUKK2Nsb3NlLWRlbGltaXRlciB3aWxsIHByb2JhYmx5IGFwcGVhciB0byBiZSB1bm1hdGNoZWQsIGFuZCBnZW5lcmF0ZSBhbm90aGVyLAorc3B1cmlvdXMgZXJyb3IgbWVzc2FnZToKKworQGV4YW1wbGUKK3ByaW1hcnk6CisgICcoJyBleHByICcpJworfCAnKCcgZXJyb3IgJyknCitAZG90c3t9Cis7CitAZW5kIGV4YW1wbGUKKworRXJyb3IgcmVjb3Zlcnkgc3RyYXRlZ2llcyBhcmUgbmVjZXNzYXJpbHkgZ3Vlc3Nlcy4gIFdoZW4gdGhleSBndWVzcyB3cm9uZywKK29uZSBzeW50YXggZXJyb3Igb2Z0ZW4gbGVhZHMgdG8gYW5vdGhlci4gIEluIHRoZSBhYm92ZSBleGFtcGxlLCB0aGUgZXJyb3IKK3JlY292ZXJ5IHJ1bGUgZ3Vlc3NlcyB0aGF0IGFuIGVycm9yIGlzIGR1ZSB0byBiYWQgaW5wdXQgd2l0aGluIG9uZQorQGNvZGV7c3RtdH0uICBTdXBwb3NlIHRoYXQgaW5zdGVhZCBhIHNwdXJpb3VzIHNlbWljb2xvbiBpcyBpbnNlcnRlZCBpbiB0aGUKK21pZGRsZSBvZiBhIHZhbGlkIEBjb2Rle3N0bXR9LiAgQWZ0ZXIgdGhlIGVycm9yIHJlY292ZXJ5IHJ1bGUgcmVjb3ZlcnMKK2Zyb20gdGhlIGZpcnN0IGVycm9yLCBhbm90aGVyIHN5bnRheCBlcnJvciB3aWxsIGJlIGZvdW5kIHN0cmFpZ2h0YXdheSwKK3NpbmNlIHRoZSB0ZXh0IGZvbGxvd2luZyB0aGUgc3B1cmlvdXMgc2VtaWNvbG9uIGlzIGFsc28gYW4gaW52YWxpZAorQGNvZGV7c3RtdH0uCisKK1RvIHByZXZlbnQgYW4gb3V0cG91cmluZyBvZiBlcnJvciBtZXNzYWdlcywgdGhlIHBhcnNlciB3aWxsIG91dHB1dCBubyBlcnJvcgorbWVzc2FnZSBmb3IgYW5vdGhlciBzeW50YXggZXJyb3IgdGhhdCBoYXBwZW5zIHNob3J0bHkgYWZ0ZXIgdGhlIGZpcnN0OyBvbmx5CithZnRlciB0aHJlZSBjb25zZWN1dGl2ZSBpbnB1dCB0b2tlbnMgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBzaGlmdGVkIHdpbGwKK2Vycm9yIG1lc3NhZ2VzIHJlc3VtZS4KKworTm90ZSB0aGF0IHJ1bGVzIHdoaWNoIGFjY2VwdCB0aGUgQGNvZGV7ZXJyb3J9IHRva2VuIG1heSBoYXZlIGFjdGlvbnMsIGp1c3QKK2FzIGFueSBvdGhlciBydWxlcyBjYW4uCisKK0BmaW5kZXggeXllcnJvaworWW91IGNhbiBtYWtlIGVycm9yIG1lc3NhZ2VzIHJlc3VtZSBpbW1lZGlhdGVseSBieSB1c2luZyB0aGUgbWFjcm8KK0Bjb2Rle3l5ZXJyb2t9IGluIGFuIGFjdGlvbi4gIElmIHlvdSBkbyB0aGlzIGluIHRoZSBlcnJvciBydWxlJ3MgYWN0aW9uLCBubworZXJyb3IgbWVzc2FnZXMgd2lsbCBiZSBzdXBwcmVzc2VkLiAgVGhpcyBtYWNybyByZXF1aXJlcyBubyBhcmd1bWVudHM7CitAc2FtcHt5eWVycm9rO30gaXMgYSB2YWxpZCBDIHN0YXRlbWVudC4KKworQGZpbmRleCB5eWNsZWFyaW4KK1RoZSBwcmV2aW91cyBsb29rYWhlYWQgdG9rZW4gaXMgcmVhbmFseXplZCBpbW1lZGlhdGVseSBhZnRlciBhbiBlcnJvci4gIElmCit0aGlzIGlzIHVuYWNjZXB0YWJsZSwgdGhlbiB0aGUgbWFjcm8gQGNvZGV7eXljbGVhcmlufSBtYXkgYmUgdXNlZCB0byBjbGVhcgordGhpcyB0b2tlbi4gIFdyaXRlIHRoZSBzdGF0ZW1lbnQgQHNhbXB7eXljbGVhcmluO30gaW4gdGhlIGVycm9yIHJ1bGUncworYWN0aW9uLgorQHhyZWZ7QWN0aW9uIEZlYXR1cmVzLCAsU3BlY2lhbCBGZWF0dXJlcyBmb3IgVXNlIGluIEFjdGlvbnN9LgorCitGb3IgZXhhbXBsZSwgc3VwcG9zZSB0aGF0IG9uIGEgc3ludGF4IGVycm9yLCBhbiBlcnJvciBoYW5kbGluZyByb3V0aW5lIGlzCitjYWxsZWQgdGhhdCBhZHZhbmNlcyB0aGUgaW5wdXQgc3RyZWFtIHRvIHNvbWUgcG9pbnQgd2hlcmUgcGFyc2luZyBzaG91bGQKK29uY2UgYWdhaW4gY29tbWVuY2UuICBUaGUgbmV4dCBzeW1ib2wgcmV0dXJuZWQgYnkgdGhlIGxleGljYWwgc2Nhbm5lciBpcworcHJvYmFibHkgY29ycmVjdC4gIFRoZSBwcmV2aW91cyBsb29rYWhlYWQgdG9rZW4gb3VnaHQgdG8gYmUgZGlzY2FyZGVkCit3aXRoIEBzYW1we3l5Y2xlYXJpbjt9LgorCitAdmluZGV4IFlZUkVDT1ZFUklORworVGhlIGV4cHJlc3Npb24gQGNvZGV7WVlSRUNPVkVSSU5HICgpfSB5aWVsZHMgMSB3aGVuIHRoZSBwYXJzZXIKK2lzIHJlY292ZXJpbmcgZnJvbSBhIHN5bnRheCBlcnJvciwgYW5kIDAgb3RoZXJ3aXNlLgorU3ludGF4IGVycm9yIGRpYWdub3N0aWNzIGFyZSBzdXBwcmVzc2VkIHdoaWxlIHJlY292ZXJpbmcgZnJvbSBhIHN5bnRheAorZXJyb3IuCisKK0Bub2RlIENvbnRleHQgRGVwZW5kZW5jeQorQGNoYXB0ZXIgSGFuZGxpbmcgQ29udGV4dCBEZXBlbmRlbmNpZXMKKworVGhlIEJpc29uIHBhcmFkaWdtIGlzIHRvIHBhcnNlIHRva2VucyBmaXJzdCwgdGhlbiBncm91cCB0aGVtIGludG8gbGFyZ2VyCitzeW50YWN0aWMgdW5pdHMuICBJbiBtYW55IGxhbmd1YWdlcywgdGhlIG1lYW5pbmcgb2YgYSB0b2tlbiBpcyBhZmZlY3RlZCBieQoraXRzIGNvbnRleHQuICBBbHRob3VnaCB0aGlzIHZpb2xhdGVzIHRoZSBCaXNvbiBwYXJhZGlnbSwgY2VydGFpbiB0ZWNobmlxdWVzCisoa25vd24gYXMgQGRmbntrbHVkZ2VzfSkgbWF5IGVuYWJsZSB5b3UgdG8gd3JpdGUgQmlzb24gcGFyc2VycyBmb3Igc3VjaAorbGFuZ3VhZ2VzLgorCitAbWVudQorKiBTZW1hbnRpYyBUb2tlbnM6OiAgIFRva2VuIHBhcnNpbmcgY2FuIGRlcGVuZCBvbiB0aGUgc2VtYW50aWMgY29udGV4dC4KKyogTGV4aWNhbCBUaWUtaW5zOjogICBUb2tlbiBwYXJzaW5nIGNhbiBkZXBlbmQgb24gdGhlIHN5bnRhY3RpYyBjb250ZXh0LgorKiBUaWUtaW4gUmVjb3Zlcnk6OiAgIExleGljYWwgdGllLWlucyBoYXZlIGltcGxpY2F0aW9ucyBmb3IgaG93CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciByZWNvdmVyeSBydWxlcyBtdXN0IGJlIHdyaXR0ZW4uCitAZW5kIG1lbnUKKworKEFjdHVhbGx5LCBgYGtsdWRnZScnIG1lYW5zIGFueSB0ZWNobmlxdWUgdGhhdCBnZXRzIGl0cyBqb2IgZG9uZSBidXQgaXMKK25laXRoZXIgY2xlYW4gbm9yIHJvYnVzdC4pCisKK0Bub2RlIFNlbWFudGljIFRva2VucworQHNlY3Rpb24gU2VtYW50aWMgSW5mbyBpbiBUb2tlbiBUeXBlcworCitUaGUgQyBsYW5ndWFnZSBoYXMgYSBjb250ZXh0IGRlcGVuZGVuY3k6IHRoZSB3YXkgYW4gaWRlbnRpZmllciBpcyB1c2VkCitkZXBlbmRzIG9uIHdoYXQgaXRzIGN1cnJlbnQgbWVhbmluZyBpcy4gIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGlzOgorCitAZXhhbXBsZQorZm9vICh4KTsKK0BlbmQgZXhhbXBsZQorCitUaGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbiBjYWxsIHN0YXRlbWVudCwgYnV0IGlmIEBjb2Rle2Zvb30gaXMgYSB0eXBlZGVmCituYW1lLCB0aGVuIHRoaXMgaXMgYWN0dWFsbHkgYSBkZWNsYXJhdGlvbiBvZiBAY29kZXt4fS4gIEhvdyBjYW4gYSBCaXNvbgorcGFyc2VyIGZvciBDIGRlY2lkZSBob3cgdG8gcGFyc2UgdGhpcyBpbnB1dD8KKworVGhlIG1ldGhvZCB1c2VkIGluIEdOVSBDIGlzIHRvIGhhdmUgdHdvIGRpZmZlcmVudCB0b2tlbiB0eXBlcywKK0Bjb2Rle0lERU5USUZJRVJ9IGFuZCBAY29kZXtUWVBFTkFNRX0uICBXaGVuIEBjb2Rle3l5bGV4fSBmaW5kcyBhbgoraWRlbnRpZmllciwgaXQgbG9va3MgdXAgdGhlIGN1cnJlbnQgZGVjbGFyYXRpb24gb2YgdGhlIGlkZW50aWZpZXIgaW4gb3JkZXIKK3RvIGRlY2lkZSB3aGljaCB0b2tlbiB0eXBlIHRvIHJldHVybjogQGNvZGV7VFlQRU5BTUV9IGlmIHRoZSBpZGVudGlmaWVyIGlzCitkZWNsYXJlZCBhcyBhIHR5cGVkZWYsIEBjb2Rle0lERU5USUZJRVJ9IG90aGVyd2lzZS4KKworVGhlIGdyYW1tYXIgcnVsZXMgY2FuIHRoZW4gZXhwcmVzcyB0aGUgY29udGV4dCBkZXBlbmRlbmN5IGJ5IHRoZSBjaG9pY2Ugb2YKK3Rva2VuIHR5cGUgdG8gcmVjb2duaXplLiAgQGNvZGV7SURFTlRJRklFUn0gaXMgYWNjZXB0ZWQgYXMgYW4gZXhwcmVzc2lvbiwKK2J1dCBAY29kZXtUWVBFTkFNRX0gaXMgbm90LiAgQGNvZGV7VFlQRU5BTUV9IGNhbiBzdGFydCBhIGRlY2xhcmF0aW9uLCBidXQKK0Bjb2Rle0lERU5USUZJRVJ9IGNhbm5vdC4gIEluIGNvbnRleHRzIHdoZXJlIHRoZSBtZWFuaW5nIG9mIHRoZSBpZGVudGlmaWVyCitpcyBAZW1waHtub3R9IHNpZ25pZmljYW50LCBzdWNoIGFzIGluIGRlY2xhcmF0aW9ucyB0aGF0IGNhbiBzaGFkb3cgYQordHlwZWRlZiBuYW1lLCBlaXRoZXIgQGNvZGV7VFlQRU5BTUV9IG9yIEBjb2Rle0lERU5USUZJRVJ9IGlzCithY2NlcHRlZC0tLXRoZXJlIGlzIG9uZSBydWxlIGZvciBlYWNoIG9mIHRoZSB0d28gdG9rZW4gdHlwZXMuCisKK1RoaXMgdGVjaG5pcXVlIGlzIHNpbXBsZSB0byB1c2UgaWYgdGhlIGRlY2lzaW9uIG9mIHdoaWNoIGtpbmRzIG9mCitpZGVudGlmaWVycyB0byBhbGxvdyBpcyBtYWRlIGF0IGEgcGxhY2UgY2xvc2UgdG8gd2hlcmUgdGhlIGlkZW50aWZpZXIgaXMKK3BhcnNlZC4gIEJ1dCBpbiBDIHRoaXMgaXMgbm90IGFsd2F5cyBzbzogQyBhbGxvd3MgYSBkZWNsYXJhdGlvbiB0bworcmVkZWNsYXJlIGEgdHlwZWRlZiBuYW1lIHByb3ZpZGVkIGFuIGV4cGxpY2l0IHR5cGUgaGFzIGJlZW4gc3BlY2lmaWVkCitlYXJsaWVyOgorCitAZXhhbXBsZQordHlwZWRlZiBpbnQgZm9vLCBiYXI7CitpbnQgYmF6ICh2b2lkKQorQGdyb3VwCitAeworICBzdGF0aWMgYmFyIChiYXIpOyAgICAgIC8qIEBye3JlZGVjbGFyZSBAY29kZXtiYXJ9IGFzIHN0YXRpYyB2YXJpYWJsZX0gKi8KKyAgZXh0ZXJuIGZvbyBmb28gKGZvbyk7ICAvKiBAcntyZWRlY2xhcmUgQGNvZGV7Zm9vfSBhcyBmdW5jdGlvbn0gKi8KKyAgcmV0dXJuIGZvbyAoYmFyKTsKK0B9CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworVW5mb3J0dW5hdGVseSwgdGhlIG5hbWUgYmVpbmcgZGVjbGFyZWQgaXMgc2VwYXJhdGVkIGZyb20gdGhlIGRlY2xhcmF0aW9uCitjb25zdHJ1Y3QgaXRzZWxmIGJ5IGEgY29tcGxpY2F0ZWQgc3ludGFjdGljIHN0cnVjdHVyZS0tLXRoZSBgYGRlY2xhcmF0b3InJy4KKworQXMgYSByZXN1bHQsIHBhcnQgb2YgdGhlIEJpc29uIHBhcnNlciBmb3IgQyBuZWVkcyB0byBiZSBkdXBsaWNhdGVkLCB3aXRoCithbGwgdGhlIG5vbnRlcm1pbmFsIG5hbWVzIGNoYW5nZWQ6IG9uY2UgZm9yIHBhcnNpbmcgYSBkZWNsYXJhdGlvbiBpbgord2hpY2ggYSB0eXBlZGVmIG5hbWUgY2FuIGJlIHJlZGVmaW5lZCwgYW5kIG9uY2UgZm9yIHBhcnNpbmcgYQorZGVjbGFyYXRpb24gaW4gd2hpY2ggdGhhdCBjYW4ndCBiZSBkb25lLiAgSGVyZSBpcyBhIHBhcnQgb2YgdGhlCitkdXBsaWNhdGlvbiwgd2l0aCBhY3Rpb25zIG9taXR0ZWQgZm9yIGJyZXZpdHk6CisKK0BleGFtcGxlCitAZ3JvdXAKK2luaXRkY2w6CisgIGRlY2xhcmF0b3IgbWF5YmVhc20gJz0nIGluaXQKK3wgZGVjbGFyYXRvciBtYXliZWFzbQorOworQGVuZCBncm91cAorCitAZ3JvdXAKK25vdHlwZV9pbml0ZGNsOgorICBub3R5cGVfZGVjbGFyYXRvciBtYXliZWFzbSAnPScgaW5pdAorfCBub3R5cGVfZGVjbGFyYXRvciBtYXliZWFzbQorOworQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorSGVyZSBAY29kZXtpbml0ZGNsfSBjYW4gcmVkZWNsYXJlIGEgdHlwZWRlZiBuYW1lLCBidXQgQGNvZGV7bm90eXBlX2luaXRkY2x9CitjYW5ub3QuICBUaGUgZGlzdGluY3Rpb24gYmV0d2VlbiBAY29kZXtkZWNsYXJhdG9yfSBhbmQKK0Bjb2Rle25vdHlwZV9kZWNsYXJhdG9yfSBpcyB0aGUgc2FtZSBzb3J0IG9mIHRoaW5nLgorCitUaGVyZSBpcyBzb21lIHNpbWlsYXJpdHkgYmV0d2VlbiB0aGlzIHRlY2huaXF1ZSBhbmQgYSBsZXhpY2FsIHRpZS1pbgorKGRlc2NyaWJlZCBuZXh0KSwgaW4gdGhhdCBpbmZvcm1hdGlvbiB3aGljaCBhbHRlcnMgdGhlIGxleGljYWwgYW5hbHlzaXMgaXMKK2NoYW5nZWQgZHVyaW5nIHBhcnNpbmcgYnkgb3RoZXIgcGFydHMgb2YgdGhlIHByb2dyYW0uICBUaGUgZGlmZmVyZW5jZSBpcworaGVyZSB0aGUgaW5mb3JtYXRpb24gaXMgZ2xvYmFsLCBhbmQgaXMgdXNlZCBmb3Igb3RoZXIgcHVycG9zZXMgaW4gdGhlCitwcm9ncmFtLiAgQSB0cnVlIGxleGljYWwgdGllLWluIGhhcyBhIHNwZWNpYWwtcHVycG9zZSBmbGFnIGNvbnRyb2xsZWQgYnkKK3RoZSBzeW50YWN0aWMgY29udGV4dC4KKworQG5vZGUgTGV4aWNhbCBUaWUtaW5zCitAc2VjdGlvbiBMZXhpY2FsIFRpZS1pbnMKK0BjaW5kZXggbGV4aWNhbCB0aWUtaW4KKworT25lIHdheSB0byBoYW5kbGUgY29udGV4dC1kZXBlbmRlbmN5IGlzIHRoZSBAZGZue2xleGljYWwgdGllLWlufTogYSBmbGFnCit3aGljaCBpcyBzZXQgYnkgQmlzb24gYWN0aW9ucywgd2hvc2UgcHVycG9zZSBpcyB0byBhbHRlciB0aGUgd2F5IHRva2VucyBhcmUKK3BhcnNlZC4KKworRm9yIGV4YW1wbGUsIHN1cHBvc2Ugd2UgaGF2ZSBhIGxhbmd1YWdlIHZhZ3VlbHkgbGlrZSBDLCBidXQgd2l0aCBhIHNwZWNpYWwKK2NvbnN0cnVjdCBAc2FtcHtoZXggKEB2YXJ7aGV4LWV4cHJ9KX0uICBBZnRlciB0aGUga2V5d29yZCBAY29kZXtoZXh9IGNvbWVzCithbiBleHByZXNzaW9uIGluIHBhcmVudGhlc2VzIGluIHdoaWNoIGFsbCBpbnRlZ2VycyBhcmUgaGV4YWRlY2ltYWwuICBJbgorcGFydGljdWxhciwgdGhlIHRva2VuIEBzYW1we2ExYn0gbXVzdCBiZSB0cmVhdGVkIGFzIGFuIGludGVnZXIgcmF0aGVyIHRoYW4KK2FzIGFuIGlkZW50aWZpZXIgaWYgaXQgYXBwZWFycyBpbiB0aGF0IGNvbnRleHQuICBIZXJlIGlzIGhvdyB5b3UgY2FuIGRvIGl0OgorCitAZXhhbXBsZQorQGdyb3VwCislQHsKKyAgaW50IGhleGZsYWc7CisgIGludCB5eWxleCAodm9pZCk7CisgIHZvaWQgeXllcnJvciAoY2hhciBjb25zdCAqKTsKKyVAfQorJSUKK0Bkb3Rze30KK0BlbmQgZ3JvdXAKK0Bncm91cAorZXhwcjoKKyAgSURFTlRJRklFUgorfCBjb25zdGFudAorfCBIRVggJygnICAgICAgICBAeyBoZXhmbGFnID0gMTsgQH0KKyAgICBleHByICcpJyAgICAgQHsgaGV4ZmxhZyA9IDA7ICQkID0gJDQ7IEB9Cit8IGV4cHIgJysnIGV4cHIgIEB7ICQkID0gbWFrZV9zdW0gKCQxLCAkMyk7IEB9CitAZG90c3t9Cis7CitAZW5kIGdyb3VwCisKK0Bncm91cAorY29uc3RhbnQ6CisgIElOVEVHRVIKK3wgU1RSSU5HCis7CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitIZXJlIHdlIGFzc3VtZSB0aGF0IEBjb2Rle3l5bGV4fSBsb29rcyBhdCB0aGUgdmFsdWUgb2YgQGNvZGV7aGV4ZmxhZ307IHdoZW4KK2l0IGlzIG5vbnplcm8sIGFsbCBpbnRlZ2VycyBhcmUgcGFyc2VkIGluIGhleGFkZWNpbWFsLCBhbmQgdG9rZW5zIHN0YXJ0aW5nCit3aXRoIGxldHRlcnMgYXJlIHBhcnNlZCBhcyBpbnRlZ2VycyBpZiBwb3NzaWJsZS4KKworVGhlIGRlY2xhcmF0aW9uIG9mIEBjb2Rle2hleGZsYWd9IHNob3duIGluIHRoZSBwcm9sb2d1ZSBvZiB0aGUgZ3JhbW1hcgorZmlsZSBpcyBuZWVkZWQgdG8gbWFrZSBpdCBhY2Nlc3NpYmxlIHRvIHRoZSBhY3Rpb25zIChAcHhyZWZ7UHJvbG9ndWUsCissVGhlIFByb2xvZ3VlfSkuICBZb3UgbXVzdCBhbHNvIHdyaXRlIHRoZSBjb2RlIGluIEBjb2Rle3l5bGV4fSB0byBvYmV5Cit0aGUgZmxhZy4KKworQG5vZGUgVGllLWluIFJlY292ZXJ5CitAc2VjdGlvbiBMZXhpY2FsIFRpZS1pbnMgYW5kIEVycm9yIFJlY292ZXJ5CisKK0xleGljYWwgdGllLWlucyBtYWtlIHN0cmljdCBkZW1hbmRzIG9uIGFueSBlcnJvciByZWNvdmVyeSBydWxlcyB5b3UgaGF2ZS4KK0B4cmVme0Vycm9yIFJlY292ZXJ5fS4KKworVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IHRoZSBwdXJwb3NlIG9mIGFuIGVycm9yIHJlY292ZXJ5IHJ1bGUgaXMgdG8KK2Fib3J0IHRoZSBwYXJzaW5nIG9mIG9uZSBjb25zdHJ1Y3QgYW5kIHJlc3VtZSBpbiBzb21lIGxhcmdlciBjb25zdHJ1Y3QuCitGb3IgZXhhbXBsZSwgaW4gQy1saWtlIGxhbmd1YWdlcywgYSB0eXBpY2FsIGVycm9yIHJlY292ZXJ5IHJ1bGUgaXMgdG8gc2tpcAordG9rZW5zIHVudGlsIHRoZSBuZXh0IHNlbWljb2xvbiwgYW5kIHRoZW4gc3RhcnQgYSBuZXcgc3RhdGVtZW50LCBsaWtlIHRoaXM6CisKK0BleGFtcGxlCitzdG10OgorICBleHByICc7JworfCBJRiAnKCcgZXhwciAnKScgc3RtdCBAeyBAZG90c3t9IEB9CitAZG90c3t9Cit8IGVycm9yICc7JyAgQHsgaGV4ZmxhZyA9IDA7IEB9Cis7CitAZW5kIGV4YW1wbGUKKworSWYgdGhlcmUgaXMgYSBzeW50YXggZXJyb3IgaW4gdGhlIG1pZGRsZSBvZiBhIEBzYW1we2hleCAoQHZhcntleHByfSl9Citjb25zdHJ1Y3QsIHRoaXMgZXJyb3IgcnVsZSB3aWxsIGFwcGx5LCBhbmQgdGhlbiB0aGUgYWN0aW9uIGZvciB0aGUKK2NvbXBsZXRlZCBAc2FtcHtoZXggKEB2YXJ7ZXhwcn0pfSB3aWxsIG5ldmVyIHJ1bi4gIFNvIEBjb2Rle2hleGZsYWd9IHdvdWxkCityZW1haW4gc2V0IGZvciB0aGUgZW50aXJlIHJlc3Qgb2YgdGhlIGlucHV0LCBvciB1bnRpbCB0aGUgbmV4dCBAY29kZXtoZXh9CitrZXl3b3JkLCBjYXVzaW5nIGlkZW50aWZpZXJzIHRvIGJlIG1pc2ludGVycHJldGVkIGFzIGludGVnZXJzLgorCitUbyBhdm9pZCB0aGlzIHByb2JsZW0gdGhlIGVycm9yIHJlY292ZXJ5IHJ1bGUgaXRzZWxmIGNsZWFycyBAY29kZXtoZXhmbGFnfS4KKworVGhlcmUgbWF5IGFsc28gYmUgYW4gZXJyb3IgcmVjb3ZlcnkgcnVsZSB0aGF0IHdvcmtzIHdpdGhpbiBleHByZXNzaW9ucy4KK0ZvciBleGFtcGxlLCB0aGVyZSBjb3VsZCBiZSBhIHJ1bGUgd2hpY2ggYXBwbGllcyB3aXRoaW4gcGFyZW50aGVzZXMKK2FuZCBza2lwcyB0byB0aGUgY2xvc2UtcGFyZW50aGVzaXM6CisKK0BleGFtcGxlCitAZ3JvdXAKK2V4cHI6CisgIEBkb3Rze30KK3wgJygnIGV4cHIgJyknICAgQHsgJCQgPSAkMjsgQH0KK3wgJygnIGVycm9yICcpJworQGRvdHN7fQorQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK0lmIHRoaXMgcnVsZSBhY3RzIHdpdGhpbiB0aGUgQGNvZGV7aGV4fSBjb25zdHJ1Y3QsIGl0IGlzIG5vdCBnb2luZyB0byBhYm9ydAordGhhdCBjb25zdHJ1Y3QgKHNpbmNlIGl0IGFwcGxpZXMgdG8gYW4gaW5uZXIgbGV2ZWwgb2YgcGFyZW50aGVzZXMgd2l0aGluCit0aGUgY29uc3RydWN0KS4gIFRoZXJlZm9yZSwgaXQgc2hvdWxkIG5vdCBjbGVhciB0aGUgZmxhZzogdGhlIHJlc3Qgb2YKK3RoZSBAY29kZXtoZXh9IGNvbnN0cnVjdCBzaG91bGQgYmUgcGFyc2VkIHdpdGggdGhlIGZsYWcgc3RpbGwgaW4gZWZmZWN0LgorCitXaGF0IGlmIHRoZXJlIGlzIGFuIGVycm9yIHJlY292ZXJ5IHJ1bGUgd2hpY2ggbWlnaHQgYWJvcnQgb3V0IG9mIHRoZQorQGNvZGV7aGV4fSBjb25zdHJ1Y3Qgb3IgbWlnaHQgbm90LCBkZXBlbmRpbmcgb24gY2lyY3Vtc3RhbmNlcz8gIFRoZXJlIGlzIG5vCit3YXkgeW91IGNhbiB3cml0ZSB0aGUgYWN0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIGEgQGNvZGV7aGV4fSBjb25zdHJ1Y3QgaXMKK2JlaW5nIGFib3J0ZWQgb3Igbm90LiAgU28gaWYgeW91IGFyZSB1c2luZyBhIGxleGljYWwgdGllLWluLCB5b3UgaGFkIGJldHRlcgorbWFrZSBzdXJlIHlvdXIgZXJyb3IgcmVjb3ZlcnkgcnVsZXMgYXJlIG5vdCBvZiB0aGlzIGtpbmQuICBFYWNoIHJ1bGUgbXVzdAorYmUgc3VjaCB0aGF0IHlvdSBjYW4gYmUgc3VyZSB0aGF0IGl0IGFsd2F5cyB3aWxsLCBvciBhbHdheXMgd29uJ3QsIGhhdmUgdG8KK2NsZWFyIHRoZSBmbGFnLgorCitAYyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBEZWJ1Z2dpbmcgWW91ciBQYXJzZXIKKworQG5vZGUgRGVidWdnaW5nCitAY2hhcHRlciBEZWJ1Z2dpbmcgWW91ciBQYXJzZXIKKworRGV2ZWxvcGluZyBhIHBhcnNlciBjYW4gYmUgYSBjaGFsbGVuZ2UsIGVzcGVjaWFsbHkgaWYgeW91IGRvbid0IHVuZGVyc3RhbmQKK3RoZSBhbGdvcml0aG0gKEBweHJlZntBbGdvcml0aG0sICxUaGUgQmlzb24gUGFyc2VyIEFsZ29yaXRobX0pLiAgVGhpcworY2hhcHRlciBleHBsYWlucyBob3cgdW5kZXJzdGFuZCBhbmQgZGVidWcgYSBwYXJzZXIuCisKK1RoZSBmaXJzdCBzZWN0aW9ucyBmb2N1cyBvbiB0aGUgc3RhdGljIHBhcnQgb2YgdGhlIHBhcnNlcjogaXRzIHN0cnVjdHVyZS4KK1RoZXkgZXhwbGFpbiBob3cgdG8gZ2VuZXJhdGUgYW5kIHJlYWQgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZQorYXV0b21hdG9uLiAgVGhlcmUgYXJlIHNldmVyYWwgZm9ybWF0cyBhdmFpbGFibGU6CitAaXRlbWl6ZSBAbWludXMKK0BpdGVtCithcyB0ZXh0LCBzZWUgQHJlZntVbmRlcnN0YW5kaW5nLCAsIFVuZGVyc3RhbmRpbmcgWW91ciBQYXJzZXJ9OworCitAaXRlbQorYXMgYSBncmFwaCwgc2VlIEByZWZ7R3JhcGh2aXosLCBWaXN1YWxpemluZyBZb3VyIFBhcnNlcn07CisKK0BpdGVtCitvciBhcyBhIG1hcmt1cCByZXBvcnQgdGhhdCBjYW4gYmUgdHVybmVkLCBmb3IgaW5zdGFuY2UsIGludG8gSFRNTCwgc2VlCitAcmVme1htbCwsIFZpc3VhbGl6aW5nIHlvdXIgcGFyc2VyIGluIG11bHRpcGxlIGZvcm1hdHN9LgorQGVuZCBpdGVtaXplCisKK1RoZSBsYXN0IHNlY3Rpb24gZm9jdXNlcyBvbiB0aGUgZHluYW1pYyBwYXJ0IG9mIHRoZSBwYXJzZXI6IGhvdyB0byBlbmFibGUKK2FuZCB1bmRlcnN0YW5kIHRoZSBwYXJzZXIgcnVuLXRpbWUgdHJhY2VzIChAcHhyZWZ7VHJhY2luZywgLFRyYWNpbmcgWW91cgorUGFyc2VyfSkuCisKK0BtZW51CisqIFVuZGVyc3RhbmRpbmc6OiAgICAgVW5kZXJzdGFuZGluZyB0aGUgc3RydWN0dXJlIG9mIHlvdXIgcGFyc2VyLgorKiBHcmFwaHZpejo6ICAgICAgICAgIEdldHRpbmcgYSB2aXN1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBhcnNlci4KKyogWG1sOjogICAgICAgICAgICAgICBHZXR0aW5nIGEgbWFya3VwIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXJzZXIuCisqIFRyYWNpbmc6OiAgICAgICAgICAgVHJhY2luZyB0aGUgZXhlY3V0aW9uIG9mIHlvdXIgcGFyc2VyLgorQGVuZCBtZW51CisKK0Bub2RlIFVuZGVyc3RhbmRpbmcKK0BzZWN0aW9uIFVuZGVyc3RhbmRpbmcgWW91ciBQYXJzZXIKKworQXMgZG9jdW1lbnRlZCBlbHNld2hlcmUgKEBweHJlZntBbGdvcml0aG0sICxUaGUgQmlzb24gUGFyc2VyIEFsZ29yaXRobX0pCitCaXNvbiBwYXJzZXJzIGFyZSBAZGZue3NoaWZ0L3JlZHVjZSBhdXRvbWF0YX0uICBJbiBzb21lIGNhc2VzIChtdWNoIG1vcmUKK2ZyZXF1ZW50IHRoYW4gb25lIHdvdWxkIGhvcGUpLCBsb29raW5nIGF0IHRoaXMgYXV0b21hdG9uIGlzIHJlcXVpcmVkIHRvCit0dW5lIG9yIHNpbXBseSBmaXggYSBwYXJzZXIuCisKK1RoZSB0ZXh0dWFsIGZpbGUgaXMgZ2VuZXJhdGVkIHdoZW4gdGhlIG9wdGlvbnMgQG9wdGlvbnstLXJlcG9ydH0gb3IKK0BvcHRpb257LS12ZXJib3NlfSBhcmUgc3BlY2lmaWVkLCBzZWUgQHJlZntJbnZvY2F0aW9uLCAsIEludm9raW5nCitCaXNvbn0uICBJdHMgbmFtZSBpcyBtYWRlIGJ5IHJlbW92aW5nIEBzYW1wey50YWIuY30gb3IgQHNhbXB7LmN9IGZyb20KK3RoZSBwYXJzZXIgaW1wbGVtZW50YXRpb24gZmlsZSBuYW1lLCBhbmQgYWRkaW5nIEBzYW1wey5vdXRwdXR9CitpbnN0ZWFkLiAgVGhlcmVmb3JlLCBpZiB0aGUgZ3JhbW1hciBmaWxlIGlzIEBmaWxle2Zvby55fSwgdGhlbiB0aGUKK3BhcnNlciBpbXBsZW1lbnRhdGlvbiBmaWxlIGlzIGNhbGxlZCBAZmlsZXtmb28udGFiLmN9IGJ5IGRlZmF1bHQuICBBcworYSBjb25zZXF1ZW5jZSwgdGhlIHZlcmJvc2Ugb3V0cHV0IGZpbGUgaXMgY2FsbGVkIEBmaWxle2Zvby5vdXRwdXR9LgorCitUaGUgZm9sbG93aW5nIGdyYW1tYXIgZmlsZSwgQGZpbGV7Y2FsYy55fSwgd2lsbCBiZSB1c2VkIGluIHRoZSBzZXF1ZWw6CisKK0BleGFtcGxlCisldG9rZW4gTlVNIFNUUgorQGdyb3VwCislbGVmdCAnKycgJy0nCislbGVmdCAnKicKK0BlbmQgZ3JvdXAKKyUlCitAZ3JvdXAKK2V4cDoKKyAgZXhwICcrJyBleHAKK3wgZXhwICctJyBleHAKK3wgZXhwICcqJyBleHAKK3wgZXhwICcvJyBleHAKK3wgTlVNCis7CitAZW5kIGdyb3VwCit1c2VsZXNzOiBTVFI7CislJQorQGVuZCBleGFtcGxlCisKK0Bjb21tYW5ke2Jpc29ufSByZXBvcnRzOgorCitAZXhhbXBsZQorY2FsYy55OiB3YXJuaW5nOiAxIG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcgorY2FsYy55OiB3YXJuaW5nOiAxIHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyCitjYWxjLnk6MTIuMS03OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3MKK2NhbGMueToxMi4xMC0xMjogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3M6IFNUUgorY2FsYy55OiBjb25mbGljdHM6IDcgc2hpZnQvcmVkdWNlCitAZW5kIGV4YW1wbGUKKworV2hlbiBnaXZlbiBAb3B0aW9uey0tcmVwb3J0PXN0YXRlfSwgaW4gYWRkaXRpb24gdG8gQGZpbGV7Y2FsYy50YWIuY30sIGl0CitjcmVhdGVzIGEgZmlsZSBAZmlsZXtjYWxjLm91dHB1dH0gd2l0aCBjb250ZW50cyBkZXRhaWxlZCBiZWxvdy4gIFRoZQorb3JkZXIgb2YgdGhlIG91dHB1dCBhbmQgdGhlIGV4YWN0IHByZXNlbnRhdGlvbiBtaWdodCB2YXJ5LCBidXQgdGhlCitpbnRlcnByZXRhdGlvbiBpcyB0aGUgc2FtZS4KKworQG5vaW5kZW50CitAY2luZGV4IHRva2VuLCB1c2VsZXNzCitAY2luZGV4IHVzZWxlc3MgdG9rZW4KK0BjaW5kZXggbm9udGVybWluYWwsIHVzZWxlc3MKK0BjaW5kZXggdXNlbGVzcyBub250ZXJtaW5hbAorQGNpbmRleCBydWxlLCB1c2VsZXNzCitAY2luZGV4IHVzZWxlc3MgcnVsZQorVGhlIGZpcnN0IHNlY3Rpb24gcmVwb3J0cyB1c2VsZXNzIHRva2Vucywgbm9udGVybWluYWxzIGFuZCBydWxlcy4gIFVzZWxlc3MKK25vbnRlcm1pbmFscyBhbmQgcnVsZXMgYXJlIHJlbW92ZWQgaW4gb3JkZXIgdG8gcHJvZHVjZSBhIHNtYWxsZXIgcGFyc2VyLCBidXQKK3VzZWxlc3MgdG9rZW5zIGFyZSBwcmVzZXJ2ZWQsIHNpbmNlIHRoZXkgbWlnaHQgYmUgdXNlZCBieSB0aGUgc2Nhbm5lciAobm90ZQordGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgYHVzZWxlc3MnJyBhbmQgYGB1bnVzZWQnJyBiZWxvdyk6CisKK0BleGFtcGxlCitOb250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyCisgICB1c2VsZXNzCisKK1Rlcm1pbmFscyB1bnVzZWQgaW4gZ3JhbW1hcgorICAgU1RSCisKK1J1bGVzIHVzZWxlc3MgaW4gZ3JhbW1hcgorICAgIDYgdXNlbGVzczogU1RSCitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitUaGUgbmV4dCBzZWN0aW9uIGxpc3RzIHN0YXRlcyB0aGF0IHN0aWxsIGhhdmUgY29uZmxpY3RzLgorCitAZXhhbXBsZQorU3RhdGUgOCBjb25mbGljdHM6IDEgc2hpZnQvcmVkdWNlCitTdGF0ZSA5IGNvbmZsaWN0czogMSBzaGlmdC9yZWR1Y2UKK1N0YXRlIDEwIGNvbmZsaWN0czogMSBzaGlmdC9yZWR1Y2UKK1N0YXRlIDExIGNvbmZsaWN0czogNCBzaGlmdC9yZWR1Y2UKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK1RoZW4gQmlzb24gcmVwcm9kdWNlcyB0aGUgZXhhY3QgZ3JhbW1hciBpdCB1c2VkOgorCitAZXhhbXBsZQorR3JhbW1hcgorCisgICAgMCAkYWNjZXB0OiBleHAgJGVuZAorCisgICAgMSBleHA6IGV4cCAnKycgZXhwCisgICAgMiAgICB8IGV4cCAnLScgZXhwCisgICAgMyAgICB8IGV4cCAnKicgZXhwCisgICAgNCAgICB8IGV4cCAnLycgZXhwCisgICAgNSAgICB8IE5VTQorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorYW5kIHJlcG9ydHMgdGhlIHVzZXMgb2YgdGhlIHN5bWJvbHM6CisKK0BleGFtcGxlCitAZ3JvdXAKK1Rlcm1pbmFscywgd2l0aCBydWxlcyB3aGVyZSB0aGV5IGFwcGVhcgorCiskZW5kICgwKSAwCisnKicgKDQyKSAzCisnKycgKDQzKSAxCisnLScgKDQ1KSAyCisnLycgKDQ3KSA0CitlcnJvciAoMjU2KQorTlVNICgyNTgpIDUKK1NUUiAoMjU5KQorQGVuZCBncm91cAorCitAZ3JvdXAKK05vbnRlcm1pbmFscywgd2l0aCBydWxlcyB3aGVyZSB0aGV5IGFwcGVhcgorCiskYWNjZXB0ICg5KQorICAgIG9uIGxlZnQ6IDAKK2V4cCAoMTApCisgICAgb24gbGVmdDogMSAyIDMgNCA1LCBvbiByaWdodDogMCAxIDIgMyA0CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitAY2luZGV4IGl0ZW0KK0BjaW5kZXggcG9pbnRlZCBydWxlCitAY2luZGV4IHJ1bGUsIHBvaW50ZWQKK0Jpc29uIHRoZW4gcHJvY2VlZHMgb250byB0aGUgYXV0b21hdG9uIGl0c2VsZiwgZGVzY3JpYmluZyBlYWNoIHN0YXRlCit3aXRoIGl0cyBzZXQgb2YgQGRmbntpdGVtc30sIGFsc28ga25vd24gYXMgQGRmbntwb2ludGVkIHJ1bGVzfS4gIEVhY2gKK2l0ZW0gaXMgYSBwcm9kdWN0aW9uIHJ1bGUgdG9nZXRoZXIgd2l0aCBhIHBvaW50IChAc2FtcHsufSkgbWFya2luZwordGhlIGxvY2F0aW9uIG9mIHRoZSBpbnB1dCBjdXJzb3IuCisKK0BleGFtcGxlCitTdGF0ZSAwCisKKyAgICAwICRhY2NlcHQ6IC4gZXhwICRlbmQKKworICAgIE5VTSAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxCisKKyAgICBleHAgIGdvIHRvIHN0YXRlIDIKK0BlbmQgZXhhbXBsZQorCitUaGlzIHJlYWRzIGFzIGZvbGxvd3M6IGBgc3RhdGUgMCBjb3JyZXNwb25kcyB0byBiZWluZyBhdCB0aGUgdmVyeQorYmVnaW5uaW5nIG9mIHRoZSBwYXJzaW5nLCBpbiB0aGUgaW5pdGlhbCBydWxlLCByaWdodCBiZWZvcmUgdGhlIHN0YXJ0CitzeW1ib2wgKGhlcmUsIEBjb2Rle2V4cH0pLiAgV2hlbiB0aGUgcGFyc2VyIHJldHVybnMgdG8gdGhpcyBzdGF0ZSByaWdodAorYWZ0ZXIgaGF2aW5nIHJlZHVjZWQgYSBydWxlIHRoYXQgcHJvZHVjZWQgYW4gQGNvZGV7ZXhwfSwgdGhlIGNvbnRyb2wKK2Zsb3cganVtcHMgdG8gc3RhdGUgMi4gIElmIHRoZXJlIGlzIG5vIHN1Y2ggdHJhbnNpdGlvbiBvbiBhIG5vbnRlcm1pbmFsCitzeW1ib2wsIGFuZCB0aGUgbG9va2FoZWFkIGlzIGEgQGNvZGV7TlVNfSwgdGhlbiB0aGlzIHRva2VuIGlzIHNoaWZ0ZWQgb250bwordGhlIHBhcnNlIHN0YWNrLCBhbmQgdGhlIGNvbnRyb2wgZmxvdyBqdW1wcyB0byBzdGF0ZSAxLiAgQW55IG90aGVyCitsb29rYWhlYWQgdHJpZ2dlcnMgYSBzeW50YXggZXJyb3IuJycKKworQGNpbmRleCBjb3JlLCBpdGVtIHNldAorQGNpbmRleCBpdGVtIHNldCBjb3JlCitAY2luZGV4IGtlcm5lbCwgaXRlbSBzZXQKK0BjaW5kZXggaXRlbSBzZXQgY29yZQorRXZlbiB0aG91Z2ggdGhlIG9ubHkgYWN0aXZlIHJ1bGUgaW4gc3RhdGUgMCBzZWVtcyB0byBiZSBydWxlIDAsIHRoZQorcmVwb3J0IGxpc3RzIEBjb2Rle05VTX0gYXMgYSBsb29rYWhlYWQgdG9rZW4gYmVjYXVzZSBAY29kZXtOVU19IGNhbiBiZQorYXQgdGhlIGJlZ2lubmluZyBvZiBhbnkgcnVsZSBkZXJpdmluZyBhbiBAY29kZXtleHB9LiAgQnkgZGVmYXVsdCBCaXNvbgorcmVwb3J0cyB0aGUgc28tY2FsbGVkIEBkZm57Y29yZX0gb3IgQGRmbntrZXJuZWx9IG9mIHRoZSBpdGVtIHNldCwgYnV0IGlmCit5b3Ugd2FudCB0byBzZWUgbW9yZSBkZXRhaWwgeW91IGNhbiBpbnZva2UgQGNvbW1hbmR7Ymlzb259IHdpdGgKK0BvcHRpb257LS1yZXBvcnQ9aXRlbXNldH0gdG8gbGlzdCB0aGUgZGVyaXZlZCBpdGVtcyBhcyB3ZWxsOgorCitAZXhhbXBsZQorU3RhdGUgMAorCisgICAgMCAkYWNjZXB0OiAuIGV4cCAkZW5kCisgICAgMSBleHA6IC4gZXhwICcrJyBleHAKKyAgICAyICAgIHwgLiBleHAgJy0nIGV4cAorICAgIDMgICAgfCAuIGV4cCAnKicgZXhwCisgICAgNCAgICB8IC4gZXhwICcvJyBleHAKKyAgICA1ICAgIHwgLiBOVU0KKworICAgIE5VTSAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxCisKKyAgICBleHAgIGdvIHRvIHN0YXRlIDIKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK0luIHRoZSBzdGF0ZSAxQGRvdHN7fQorCitAZXhhbXBsZQorU3RhdGUgMQorCisgICAgNSBleHA6IE5VTSAuCisKKyAgICAkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgNSAoZXhwKQorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAordGhlIHJ1bGUgNSwgQHNhbXB7ZXhwOiBOVU07fSwgaXMgY29tcGxldGVkLiAgV2hhdGV2ZXIgdGhlIGxvb2thaGVhZCB0b2tlbgorKEBzYW1weyRkZWZhdWx0fSksIHRoZSBwYXJzZXIgd2lsbCByZWR1Y2UgaXQuICBJZiBpdCB3YXMgY29taW5nIGZyb20KK1N0YXRlIDAsIHRoZW4sIGFmdGVyIHRoaXMgcmVkdWN0aW9uIGl0IHdpbGwgcmV0dXJuIHRvIHN0YXRlIDAsIGFuZCB3aWxsCitqdW1wIHRvIHN0YXRlIDIgKEBzYW1we2V4cDogZ28gdG8gc3RhdGUgMn0pLgorCitAZXhhbXBsZQorU3RhdGUgMgorCisgICAgMCAkYWNjZXB0OiBleHAgLiAkZW5kCisgICAgMSBleHA6IGV4cCAuICcrJyBleHAKKyAgICAyICAgIHwgZXhwIC4gJy0nIGV4cAorICAgIDMgICAgfCBleHAgLiAnKicgZXhwCisgICAgNCAgICB8IGV4cCAuICcvJyBleHAKKworICAgICRlbmQgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMworICAgICcrJyAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNAorICAgICctJyAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNQorICAgICcqJyAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNgorICAgICcvJyAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNworQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorSW4gc3RhdGUgMiwgdGhlIGF1dG9tYXRvbiBjYW4gb25seSBzaGlmdCBhIHN5bWJvbC4gIEZvciBpbnN0YW5jZSwKK2JlY2F1c2Ugb2YgdGhlIGl0ZW0gQHNhbXB7ZXhwOiBleHAgLiAnKycgZXhwfSwgaWYgdGhlIGxvb2thaGVhZCBpcworQHNhbXB7K30gaXQgaXMgc2hpZnRlZCBvbnRvIHRoZSBwYXJzZSBzdGFjaywgYW5kIHRoZSBhdXRvbWF0b24KK2p1bXBzIHRvIHN0YXRlIDQsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGl0ZW0gQHNhbXB7ZXhwOiBleHAgJysnIC4gZXhwfS4KK1NpbmNlIHRoZXJlIGlzIG5vIGRlZmF1bHQgYWN0aW9uLCBhbnkgbG9va2FoZWFkIG5vdCBsaXN0ZWQgdHJpZ2dlcnMgYSBzeW50YXgKK2Vycm9yLgorCitAY2luZGV4IGFjY2VwdGluZyBzdGF0ZQorVGhlIHN0YXRlIDMgaXMgbmFtZWQgdGhlIEBkZm57ZmluYWwgc3RhdGV9LCBvciB0aGUgQGRmbnthY2NlcHRpbmcKK3N0YXRlfToKKworQGV4YW1wbGUKK1N0YXRlIDMKKworICAgIDAgJGFjY2VwdDogZXhwICRlbmQgLgorCisgICAgJGRlZmF1bHQgIGFjY2VwdAorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAordGhlIGluaXRpYWwgcnVsZSBpcyBjb21wbGV0ZWQgKHRoZSBzdGFydCBzeW1ib2wgYW5kIHRoZSBlbmQtb2YtaW5wdXQgd2VyZQorcmVhZCksIHRoZSBwYXJzaW5nIGV4aXRzIHN1Y2Nlc3NmdWxseS4KKworVGhlIGludGVycHJldGF0aW9uIG9mIHN0YXRlcyA0IHRvIDcgaXMgc3RyYWlnaHRmb3J3YXJkLCBhbmQgaXMgbGVmdCB0bwordGhlIHJlYWRlci4KKworQGV4YW1wbGUKK1N0YXRlIDQKKworICAgIDEgZXhwOiBleHAgJysnIC4gZXhwCisKKyAgICBOVU0gIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMQorCisgICAgZXhwICBnbyB0byBzdGF0ZSA4CisKKworU3RhdGUgNQorCisgICAgMiBleHA6IGV4cCAnLScgLiBleHAKKworICAgIE5VTSAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxCisKKyAgICBleHAgIGdvIHRvIHN0YXRlIDkKKworCitTdGF0ZSA2CisKKyAgICAzIGV4cDogZXhwICcqJyAuIGV4cAorCisgICAgTlVNICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEKKworICAgIGV4cCAgZ28gdG8gc3RhdGUgMTAKKworCitTdGF0ZSA3CisKKyAgICA0IGV4cDogZXhwICcvJyAuIGV4cAorCisgICAgTlVNICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEKKworICAgIGV4cCAgZ28gdG8gc3RhdGUgMTEKK0BlbmQgZXhhbXBsZQorCitBcyB3YXMgYW5ub3VuY2VkIGluIGJlZ2lubmluZyBvZiB0aGUgcmVwb3J0LCBAc2FtcHtTdGF0ZSA4IGNvbmZsaWN0czoKKzEgc2hpZnQvcmVkdWNlfToKKworQGV4YW1wbGUKK1N0YXRlIDgKKworICAgIDEgZXhwOiBleHAgLiAnKycgZXhwCisgICAgMSAgICB8IGV4cCAnKycgZXhwIC4KKyAgICAyICAgIHwgZXhwIC4gJy0nIGV4cAorICAgIDMgICAgfCBleHAgLiAnKicgZXhwCisgICAgNCAgICB8IGV4cCAuICcvJyBleHAKKworICAgICcqJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA2CisgICAgJy8nICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDcKKworICAgICcvJyAgICAgICBbcmVkdWNlIHVzaW5nIHJ1bGUgMSAoZXhwKV0KKyAgICAkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMSAoZXhwKQorQGVuZCBleGFtcGxlCisKK0luZGVlZCwgdGhlcmUgYXJlIHR3byBhY3Rpb25zIGFzc29jaWF0ZWQgdG8gdGhlIGxvb2thaGVhZCBAc2FtcHsvfToKK2VpdGhlciBzaGlmdGluZyAoYW5kIGdvaW5nIHRvIHN0YXRlIDcpLCBvciByZWR1Y2luZyBydWxlIDEuICBUaGUKK2NvbmZsaWN0IG1lYW5zIHRoYXQgZWl0aGVyIHRoZSBncmFtbWFyIGlzIGFtYmlndW91cywgb3IgdGhlIHBhcnNlciBsYWNrcworaW5mb3JtYXRpb24gdG8gbWFrZSB0aGUgcmlnaHQgZGVjaXNpb24uICBJbmRlZWQgdGhlIGdyYW1tYXIgaXMKK2FtYmlndW91cywgYXMsIHNpbmNlIHdlIGRpZCBub3Qgc3BlY2lmeSB0aGUgcHJlY2VkZW5jZSBvZiBAc2FtcHsvfSwgdGhlCitzZW50ZW5jZSBAc2FtcHtOVU0gKyBOVU0gLyBOVU19IGNhbiBiZSBwYXJzZWQgYXMgQHNhbXB7TlVNICsgKE5VTSAvCitOVU0pfSwgd2hpY2ggY29ycmVzcG9uZHMgdG8gc2hpZnRpbmcgQHNhbXB7L30sIG9yIGFzIEBzYW1weyhOVU0gKyBOVU0pIC8KK05VTX0sIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHJlZHVjaW5nIHJ1bGUgMS4KKworQmVjYXVzZSBpbiBkZXRlcm1pbmlzdGljIHBhcnNpbmcgYSBzaW5nbGUgZGVjaXNpb24gY2FuIGJlIG1hZGUsIEJpc29uCithcmJpdHJhcmlseSBjaG9zZSB0byBkaXNhYmxlIHRoZSByZWR1Y3Rpb24sIHNlZSBAcmVme1NoaWZ0L1JlZHVjZSwgLAorU2hpZnQvUmVkdWNlIENvbmZsaWN0c30uICBEaXNjYXJkZWQgYWN0aW9ucyBhcmUgcmVwb3J0ZWQgYmV0d2Vlbgorc3F1YXJlIGJyYWNrZXRzLgorCitOb3RlIHRoYXQgYWxsIHRoZSBwcmV2aW91cyBzdGF0ZXMgaGFkIGEgc2luZ2xlIHBvc3NpYmxlIGFjdGlvbjogZWl0aGVyCitzaGlmdGluZyB0aGUgbmV4dCB0b2tlbiBhbmQgZ29pbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGUsIG9yCityZWR1Y2luZyBhIHNpbmdsZSBydWxlLiAgSW4gdGhlIG90aGVyIGNhc2VzLCBpLmUuLCB3aGVuIHNoaWZ0aW5nCitAZW1waHthbmR9IHJlZHVjaW5nIGlzIHBvc3NpYmxlIG9yIHdoZW4gQGVtcGh7c2V2ZXJhbH0gcmVkdWN0aW9ucyBhcmUKK3Bvc3NpYmxlLCB0aGUgbG9va2FoZWFkIGlzIHJlcXVpcmVkIHRvIHNlbGVjdCB0aGUgYWN0aW9uLiAgU3RhdGUgOCBpcworb25lIHN1Y2ggc3RhdGU6IGlmIHRoZSBsb29rYWhlYWQgaXMgQHNhbXB7Kn0gb3IgQHNhbXB7L30gdGhlbiB0aGUgYWN0aW9uCitpcyBzaGlmdGluZywgb3RoZXJ3aXNlIHRoZSBhY3Rpb24gaXMgcmVkdWNpbmcgcnVsZSAxLiAgSW4gb3RoZXIgd29yZHMsCit0aGUgZmlyc3QgdHdvIGl0ZW1zLCBjb3JyZXNwb25kaW5nIHRvIHJ1bGUgMSwgYXJlIG5vdCBlbGlnaWJsZSB3aGVuIHRoZQorbG9va2FoZWFkIHRva2VuIGlzIEBzYW1weyp9LCBzaW5jZSB3ZSBzcGVjaWZpZWQgdGhhdCBAc2FtcHsqfSBoYXMgaGlnaGVyCitwcmVjZWRlbmNlIHRoYW4gQHNhbXB7K30uICBNb3JlIGdlbmVyYWxseSwgc29tZSBpdGVtcyBhcmUgZWxpZ2libGUgb25seQord2l0aCBzb21lIHNldCBvZiBwb3NzaWJsZSBsb29rYWhlYWQgdG9rZW5zLiAgV2hlbiBydW4gd2l0aAorQG9wdGlvbnstLXJlcG9ydD1sb29rYWhlYWR9LCBCaXNvbiBzcGVjaWZpZXMgdGhlc2UgbG9va2FoZWFkIHRva2VuczoKKworQGV4YW1wbGUKK1N0YXRlIDgKKworICAgIDEgZXhwOiBleHAgLiAnKycgZXhwCisgICAgMSAgICB8IGV4cCAnKycgZXhwIC4gIFskZW5kLCAnKycsICctJywgJy8nXQorICAgIDIgICAgfCBleHAgLiAnLScgZXhwCisgICAgMyAgICB8IGV4cCAuICcqJyBleHAKKyAgICA0ICAgIHwgZXhwIC4gJy8nIGV4cAorCisgICAgJyonICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDYKKyAgICAnLycgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNworCisgICAgJy8nICAgICAgIFtyZWR1Y2UgdXNpbmcgcnVsZSAxIChleHApXQorICAgICRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAxIChleHApCitAZW5kIGV4YW1wbGUKKworTm90ZSBob3dldmVyIHRoYXQgd2hpbGUgQHNhbXB7TlVNICsgTlVNIC8gTlVNfSBpcyBhbWJpZ3VvdXMgKHdoaWNoIHJlc3VsdHMgaW4KK3RoZSBjb25mbGljdHMgb24gQHNhbXB7L30pLCBAc2FtcHtOVU0gKyBOVU0gKiBOVU19IGlzIG5vdDogdGhlIGNvbmZsaWN0IHdhcworc29sdmVkIHRoYW5rcyB0byBhc3NvY2lhdGl2aXR5IGFuZCBwcmVjZWRlbmNlIGRpcmVjdGl2ZXMuICBJZiBpbnZva2VkIHdpdGgKK0BvcHRpb257LS1yZXBvcnQ9c29sdmVkfSwgQmlzb24gaW5jbHVkZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNvbHZlZAorY29uZmxpY3RzIGluIHRoZSByZXBvcnQ6CisKK0BleGFtcGxlCitDb25mbGljdCBiZXR3ZWVuIHJ1bGUgMSBhbmQgdG9rZW4gJysnIHJlc29sdmVkIGFzIHJlZHVjZSAoJWxlZnQgJysnKS4KK0NvbmZsaWN0IGJldHdlZW4gcnVsZSAxIGFuZCB0b2tlbiAnLScgcmVzb2x2ZWQgYXMgcmVkdWNlICglbGVmdCAnLScpLgorQ29uZmxpY3QgYmV0d2VlbiBydWxlIDEgYW5kIHRva2VuICcqJyByZXNvbHZlZCBhcyBzaGlmdCAoJysnIDwgJyonKS4KK0BlbmQgZXhhbXBsZQorCisKK1RoZSByZW1haW5pbmcgc3RhdGVzIGFyZSBzaW1pbGFyOgorCitAZXhhbXBsZQorQGdyb3VwCitTdGF0ZSA5CisKKyAgICAxIGV4cDogZXhwIC4gJysnIGV4cAorICAgIDIgICAgfCBleHAgLiAnLScgZXhwCisgICAgMiAgICB8IGV4cCAnLScgZXhwIC4KKyAgICAzICAgIHwgZXhwIC4gJyonIGV4cAorICAgIDQgICAgfCBleHAgLiAnLycgZXhwCisKKyAgICAnKicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNgorICAgICcvJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA3CisKKyAgICAnLycgICAgICAgW3JlZHVjZSB1c2luZyBydWxlIDIgKGV4cCldCisgICAgJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDIgKGV4cCkKK0BlbmQgZ3JvdXAKKworQGdyb3VwCitTdGF0ZSAxMAorCisgICAgMSBleHA6IGV4cCAuICcrJyBleHAKKyAgICAyICAgIHwgZXhwIC4gJy0nIGV4cAorICAgIDMgICAgfCBleHAgLiAnKicgZXhwCisgICAgMyAgICB8IGV4cCAnKicgZXhwIC4KKyAgICA0ICAgIHwgZXhwIC4gJy8nIGV4cAorCisgICAgJy8nICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDcKKworICAgICcvJyAgICAgICBbcmVkdWNlIHVzaW5nIHJ1bGUgMyAoZXhwKV0KKyAgICAkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMyAoZXhwKQorQGVuZCBncm91cAorCitAZ3JvdXAKK1N0YXRlIDExCisKKyAgICAxIGV4cDogZXhwIC4gJysnIGV4cAorICAgIDIgICAgfCBleHAgLiAnLScgZXhwCisgICAgMyAgICB8IGV4cCAuICcqJyBleHAKKyAgICA0ICAgIHwgZXhwIC4gJy8nIGV4cAorICAgIDQgICAgfCBleHAgJy8nIGV4cCAuCisKKyAgICAnKycgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNAorICAgICctJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1CisgICAgJyonICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDYKKyAgICAnLycgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNworCisgICAgJysnICAgICAgIFtyZWR1Y2UgdXNpbmcgcnVsZSA0IChleHApXQorICAgICctJyAgICAgICBbcmVkdWNlIHVzaW5nIHJ1bGUgNCAoZXhwKV0KKyAgICAnKicgICAgICAgW3JlZHVjZSB1c2luZyBydWxlIDQgKGV4cCldCisgICAgJy8nICAgICAgIFtyZWR1Y2UgdXNpbmcgcnVsZSA0IChleHApXQorICAgICRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA0IChleHApCitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitPYnNlcnZlIHRoYXQgc3RhdGUgMTEgY29udGFpbnMgY29uZmxpY3RzIG5vdCBvbmx5IGR1ZSB0byB0aGUgbGFjayBvZgorcHJlY2VkZW5jZSBvZiBAc2FtcHsvfSB3aXRoIHJlc3BlY3QgdG8gQHNhbXB7K30sIEBzYW1wey19LCBhbmQgQHNhbXB7Kn0sIGJ1dAorYWxzbyBiZWNhdXNlIHRoZSBhc3NvY2lhdGl2aXR5IG9mIEBzYW1wey99IGlzIG5vdCBzcGVjaWZpZWQuCisKK0Jpc29uIG1heSBhbHNvIHByb2R1Y2UgYW4gSFRNTCB2ZXJzaW9uIG9mIHRoaXMgb3V0cHV0LCB2aWEgYW4gWE1MIGZpbGUgYW5kCitYU0xUIHByb2Nlc3NpbmcgKEBweHJlZntYbWwsLFZpc3VhbGl6aW5nIHlvdXIgcGFyc2VyIGluIG11bHRpcGxlIGZvcm1hdHN9KS4KKworQGMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBHcmFwaGljYWwgUmVwcmVzZW50YXRpb24KKworQG5vZGUgR3JhcGh2aXoKK0BzZWN0aW9uIFZpc3VhbGl6aW5nIFlvdXIgUGFyc2VyCitAY2luZGV4IGRvdAorCitBcyBhbm90aGVyIG1lYW5zIHRvIGdhaW4gYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNoaWZ0L3JlZHVjZQorYXV0b21hdG9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlIEJpc29uIHBhcnNlciwgYSBET1QgZmlsZSBjYW4gYmUgZ2VuZXJhdGVkLiBOb3RlCit0aGF0IGRlYnVnZ2luZyBhIHJlYWwgZ3JhbW1hciB3aXRoIHRoaXMgaXMgdGVkaW91cyBhdCBiZXN0LCBhbmQgaW1wcmFjdGljYWwKK21vc3Qgb2YgdGhlIHRpbWVzLCBiZWNhdXNlIHRoZSBnZW5lcmF0ZWQgZmlsZXMgYXJlIGh1Z2UgKHRoZSBnZW5lcmF0aW9uIG9mCithIFBERiBvciBQTkcgZmlsZSBmcm9tIGl0IHdpbGwgdGFrZSB2ZXJ5IGxvbmcsIGFuZCBtb3JlIG9mdGVuIHRoYW4gbm90IGl0IHdpbGwKK2ZhaWwgZHVlIHRvIG1lbW9yeSBleGhhdXN0aW9uKS4gVGhpcyBvcHRpb24gd2FzIHJhdGhlciBkZXNpZ25lZCBmb3IgYmVnaW5uZXJzLAordG8gaGVscCB0aGVtIHVuZGVyc3RhbmQgTFIgcGFyc2Vycy4KKworVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCB3aGVuIHRoZSBAb3B0aW9uey0tZ3JhcGh9IG9wdGlvbiBpcyBzcGVjaWZpZWQKKyhAcHhyZWZ7SW52b2NhdGlvbiwgLCBJbnZva2luZyBCaXNvbn0pLiAgSXRzIG5hbWUgaXMgbWFkZSBieSByZW1vdmluZworQHNhbXB7LnRhYi5jfSBvciBAc2FtcHsuY30gZnJvbSB0aGUgcGFyc2VyIGltcGxlbWVudGF0aW9uIGZpbGUgbmFtZSwgYW5kCithZGRpbmcgQHNhbXB7LmRvdH0gaW5zdGVhZC4gIElmIHRoZSBncmFtbWFyIGZpbGUgaXMgQGZpbGV7Zm9vLnl9LCB0aGUKK0dyYXBodml6IG91dHB1dCBmaWxlIGlzIGNhbGxlZCBAZmlsZXtmb28uZG90fS4gIEEgRE9UIGZpbGUgbWF5IGFsc28gYmUKK3Byb2R1Y2VkIHZpYSBhbiBYTUwgZmlsZSBhbmQgWFNMVCBwcm9jZXNzaW5nIChAcHhyZWZ7WG1sLCxWaXN1YWxpemluZyB5b3VyCitwYXJzZXIgaW4gbXVsdGlwbGUgZm9ybWF0c30pLgorCisKK1RoZSBmb2xsb3dpbmcgZ3JhbW1hciBmaWxlLCBAZmlsZXtyci55fSwgd2lsbCBiZSB1c2VkIGluIHRoZSBzZXF1ZWw6CisKK0BleGFtcGxlCislJQorQGdyb3VwCitleHA6IGEgIjsiIHwgYiAiLiI7CithOiAiMCI7CitiOiAiMCI7CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworVGhlIGdyYXBoaWNhbCBvdXRwdXQKK0BpZm5vdGluZm8KKyhzZWUgQHJlZntmaWc6Z3JhcGh9KQorQGVuZCBpZm5vdGluZm8KK2lzIHZlcnkgc2ltaWxhciB0byB0aGUgdGV4dHVhbCBvbmUsIGFuZCBhcyBzdWNoIGl0IGlzIGVhc2llciB1bmRlcnN0b29kIGJ5CittYWtpbmcgZGlyZWN0IGNvbXBhcmlzb25zIGJldHdlZW4gdGhlbS4gIEB4cmVme0RlYnVnZ2luZywgLCBEZWJ1Z2dpbmcgWW91cgorUGFyc2VyfSwgZm9yIGEgZGV0YWlsbGVkIGFuYWx5c2lzIG9mIHRoZSB0ZXh0dWFsIHJlcG9ydC4KKworQGlmbm90aW5mbworQGZsb2F0IEZpZ3VyZSxmaWc6Z3JhcGgKK0BpbWFnZXtmaWdzL2V4YW1wbGUsIDQzMHB0fQorQGNhcHRpb257QSBncmFwaGljYWwgcmVuZGVyaW5nIG9mIHRoZSBwYXJzZXIufQorQGVuZCBmbG9hdAorQGVuZCBpZm5vdGluZm8KKworQHN1YmhlYWRpbmcgR3JhcGhpY2FsIFJlcHJlc2VudGF0aW9uIG9mIFN0YXRlcworCitUaGUgaXRlbXMgKHBvaW50ZWQgcnVsZXMpIGZvciBlYWNoIHN0YXRlIGFyZSBncm91cGVkIHRvZ2V0aGVyIGluIGdyYXBoIG5vZGVzLgorVGhlaXIgbnVtYmVyaW5nIGlzIHRoZSBzYW1lIGFzIGluIHRoZSB2ZXJib3NlIGZpbGUuIFNlZSB0aGUgZm9sbG93aW5nIHBvaW50cywKK2Fib3V0IHRyYW5zaXRpb25zLCBmb3IgZXhhbXBsZXMKKworV2hlbiBpbnZva2VkIHdpdGggQG9wdGlvbnstLXJlcG9ydD1sb29rYWhlYWRzfSwgdGhlIGxvb2thaGVhZCB0b2tlbnMsIHdoZW4KK25lZWRlZCwgYXJlIHNob3duIG5leHQgdG8gdGhlIHJlbGV2YW50IHJ1bGUgYmV0d2VlbiBzcXVhcmUgYnJhY2tldHMgYXMgYQorY29tbWEgc2VwYXJhdGVkIGxpc3QuIFRoaXMgaXMgdGhlIGNhc2UgaW4gdGhlIGZpZ3VyZSBmb3IgdGhlIHJlcHJlc2VudGF0aW9uIG9mCityZWR1Y3Rpb25zLCBiZWxvdy4KKworQHNwIDEKKworVGhlIHRyYW5zaXRpb25zIGFyZSByZXByZXNlbnRlZCBhcyBkaXJlY3RlZCBlZGdlcyBiZXR3ZWVuIHRoZSBjdXJyZW50IGFuZAordGhlIHRhcmdldCBzdGF0ZXMuCisKK0BzdWJoZWFkaW5nIEdyYXBoaWNhbCBSZXByZXNlbnRhdGlvbiBvZiBTaGlmdHMKKworU2hpZnRzIGFyZSBzaG93biBhcyBzb2xpZCBhcnJvd3MsIGxhYmVsbGVkIHdpdGggdGhlIGxvb2thaGVhZCB0b2tlbiBmb3IgdGhhdAorc2hpZnQuIFRoZSBmb2xsb3dpbmcgZGVzY3JpYmVzIGEgcmVkdWN0aW9uIGluIHRoZSBAZmlsZXtyci5vdXRwdXR9IGZpbGU6CisKK0BleGFtcGxlCitAZ3JvdXAKK1N0YXRlIDMKKworICAgIDEgZXhwOiBhIC4gIjsiCisKKyAgICAiOyIgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNgorQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK0EgR3JhcGh2aXogcmVuZGVyaW5nIG9mIHRoaXMgcG9ydGlvbiBvZiB0aGUgZ3JhcGggY291bGQgYmU6CisKK0BjZW50ZXIgQGltYWdle2ZpZ3MvZXhhbXBsZS1zaGlmdCwgMTAwcHR9CisKK0BzdWJoZWFkaW5nIEdyYXBoaWNhbCBSZXByZXNlbnRhdGlvbiBvZiBSZWR1Y3Rpb25zCisKK1JlZHVjdGlvbnMgYXJlIHNob3duIGFzIHNvbGlkIGFycm93cywgbGVhZGluZyB0byBhIGRpYW1vbmQtc2hhcGVkIG5vZGUKK2JlYXJpbmcgdGhlIG51bWJlciBvZiB0aGUgcmVkdWN0aW9uIHJ1bGUuIFRoZSBhcnJvdyBpcyBsYWJlbGxlZCB3aXRoIHRoZQorYXBwcm9wcmlhdGUgY29tbWEgc2VwYXJhdGVkIGxvb2thaGVhZCB0b2tlbnMuIElmIHRoZSByZWR1Y3Rpb24gaXMgdGhlIGRlZmF1bHQKK2FjdGlvbiBmb3IgdGhlIGdpdmVuIHN0YXRlLCB0aGVyZSBpcyBubyBzdWNoIGxhYmVsLgorCitUaGlzIGlzIGhvdyByZWR1Y3Rpb25zIGFyZSByZXByZXNlbnRlZCBpbiB0aGUgdmVyYm9zZSBmaWxlIEBmaWxle3JyLm91dHB1dH06CitAZXhhbXBsZQorU3RhdGUgMQorCisgICAgMyBhOiAiMCIgLiAgWyI7Il0KKyAgICA0IGI6ICIwIiAuICBbIi4iXQorCisgICAgIi4iICAgICAgIHJlZHVjZSB1c2luZyBydWxlIDQgKGIpCisgICAgJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDMgKGEpCitAZW5kIGV4YW1wbGUKKworQSBHcmFwaHZpeiByZW5kZXJpbmcgb2YgdGhpcyBwb3J0aW9uIG9mIHRoZSBncmFwaCBjb3VsZCBiZToKKworQGNlbnRlciBAaW1hZ2V7Zmlncy9leGFtcGxlLXJlZHVjZSwgMTIwcHR9CisKK1doZW4gdW5yZXNvbHZlZCBjb25mbGljdHMgYXJlIHByZXNlbnQsIGJlY2F1c2UgaW4gZGV0ZXJtaW5pc3RpYyBwYXJzaW5nCithIHNpbmdsZSBkZWNpc2lvbiBjYW4gYmUgbWFkZSwgQmlzb24gY2FuIGFyYml0cmFyaWx5IGNob29zZSB0byBkaXNhYmxlIGEKK3JlZHVjdGlvbiwgc2VlIEByZWZ7U2hpZnQvUmVkdWNlLCAsIFNoaWZ0L1JlZHVjZSBDb25mbGljdHN9LiAgRGlzY2FyZGVkIGFjdGlvbnMKK2FyZSBkaXN0aW5ndWlzaGVkIGJ5IGEgcmVkIGZpbGxpbmcgY29sb3Igb24gdGhlc2Ugbm9kZXMsIGp1c3QgbGlrZSBob3cgdGhleSBhcmUKK3JlcG9ydGVkIGJldHdlZW4gc3F1YXJlIGJyYWNrZXRzIGluIHRoZSB2ZXJib3NlIGZpbGUuCisKK1RoZSByZWR1Y3Rpb24gY29ycmVzcG9uZGluZyB0byB0aGUgcnVsZSBudW1iZXIgMCBpcyB0aGUgYWNjZXB0YXRpb24KK3N0YXRlLiBJdCBpcyBzaG93biBhcyBhIGJsdWUgZGlhbW9uZCwgbGFiZWxsZWQgYGBBY2MnJy4KKworQHN1YmhlYWRpbmcgR3JhcGhpY2FsIHJlcHJlc2VudGF0aW9uIG9mIGdvIHRvcworCitUaGUgQHNhbXB7Z28gdG99IGp1bXAgdHJhbnNpdGlvbnMgYXJlIHJlcHJlc2VudGVkIGFzIGRvdHRlZCBsaW5lcyBiZWFyaW5nCit0aGUgbmFtZSBvZiB0aGUgcnVsZSBiZWluZyBqdW1wZWQgdG8uCisKK0BjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gWE1MCisKK0Bub2RlIFhtbAorQHNlY3Rpb24gVmlzdWFsaXppbmcgeW91ciBwYXJzZXIgaW4gbXVsdGlwbGUgZm9ybWF0cworQGNpbmRleCB4bWwKKworQmlzb24gc3VwcG9ydHMgdHdvIG1ham9yIHJlcG9ydCBmb3JtYXRzOiB0ZXh0dWFsIG91dHB1dAorKEBweHJlZntVbmRlcnN0YW5kaW5nLCAsVW5kZXJzdGFuZGluZyBZb3VyIFBhcnNlcn0pIHdoZW4gaW52b2tlZAord2l0aCBvcHRpb24gQG9wdGlvbnstLXZlcmJvc2V9LCBhbmQgRE9UCisoQHB4cmVme0dyYXBodml6LCwgVmlzdWFsaXppbmcgWW91ciBQYXJzZXJ9KSB3aGVuIGludm9rZWQgd2l0aAorb3B0aW9uIEBvcHRpb257LS1ncmFwaH0uIEhvd2V2ZXIsCithbm90aGVyIGFsdGVybmF0aXZlIGlzIHRvIG91dHB1dCBhbiBYTUwgZmlsZSB0aGF0IG1heSB0aGVuIGJlLCB3aXRoCitAY29tbWFuZHt4c2x0cHJvY30sIHJlbmRlcmVkIGFzIGVpdGhlciBhIHJhdyB0ZXh0IGZvcm1hdCBlcXVpdmFsZW50IHRvIHRoZQordmVyYm9zZSBmaWxlLCBvciBhcyBhbiBIVE1MIHZlcnNpb24gb2YgdGhlIHNhbWUgZmlsZSwgd2l0aCBjbGlja2FibGUKK3RyYW5zaXRpb25zLCBvciBldmVuIGFzIGEgRE9ULiBUaGUgQGZpbGV7Lm91dHB1dH0gYW5kIERPVCBmaWxlcyBvYnRhaW5lZCB2aWEKK1hTTFQgaGF2ZSBubyBkaWZmZXJlbmNlIHdoYXRzb2V2ZXIgd2l0aCB0aG9zZSBvYnRhaW5lZCBieSBpbnZva2luZworQGNvbW1hbmR7Ymlzb259IHdpdGggb3B0aW9ucyBAb3B0aW9uey0tdmVyYm9zZX0gb3IgQG9wdGlvbnstLWdyYXBofS4KKworVGhlIFhNTCBmaWxlIGlzIGdlbmVyYXRlZCB3aGVuIHRoZSBvcHRpb25zIEBvcHRpb257LXh9IG9yCitAb3B0aW9uey0teG1sWz1GSUxFXX0gYXJlIHNwZWNpZmllZCwgc2VlIEByZWZ7SW52b2NhdGlvbiwsSW52b2tpbmcgQmlzb259LgorSWYgbm90IHNwZWNpZmllZCwgaXRzIG5hbWUgaXMgbWFkZSBieSByZW1vdmluZyBAc2FtcHsudGFiLmN9IG9yIEBzYW1wey5jfQorZnJvbSB0aGUgcGFyc2VyIGltcGxlbWVudGF0aW9uIGZpbGUgbmFtZSwgYW5kIGFkZGluZyBAc2FtcHsueG1sfSBpbnN0ZWFkLgorRm9yIGluc3RhbmNlLCBpZiB0aGUgZ3JhbW1hciBmaWxlIGlzIEBmaWxle2Zvby55fSwgdGhlIGRlZmF1bHQgWE1MIG91dHB1dAorZmlsZSBpcyBAZmlsZXtmb28ueG1sfS4KKworQmlzb24gc2hpcHMgd2l0aCBhIEBmaWxle2RhdGEveHNsdH0gZGlyZWN0b3J5LCBjb250YWluaW5nIFhTTCBUcmFuc2Zvcm1hdGlvbgorZmlsZXMgdG8gYXBwbHkgdG8gdGhlIFhNTCBmaWxlLiBUaGVpciBuYW1lcyBhcmUgbm9uLWFtYmlndW91czoKKworQHRhYmxlIEBmaWxlCitAaXRlbSB4bWwyZG90LnhzbAorVXNlZCB0byBvdXRwdXQgYSBjb3B5IG9mIHRoZSBET1QgdmlzdWFsaXphdGlvbiBvZiB0aGUgYXV0b21hdG9uLgorQGl0ZW0geG1sMnRleHQueHNsCitVc2VkIHRvIG91dHB1dCBhIGNvcHkgb2YgdGhlIEBzYW1wey5vdXRwdXR9IGZpbGUuCitAaXRlbSB4bWwyeGh0bWwueHNsCitVc2VkIHRvIG91dHB1dCBhbiB4aHRtbCBlbmhhbmNlbWVudCBvZiB0aGUgQHNhbXB7Lm91dHB1dH0gZmlsZS4KK0BlbmQgdGFibGUKKworU2FtcGxlIHVzYWdlIChyZXF1aXJlcyBAY29tbWFuZHt4c2x0cHJvY30pOgorQGV4YW1wbGUKKyQgYmlzb24gLXggZ3IueQorQGdyb3VwCiskIGJpc29uIC0tcHJpbnQtZGF0YWRpcgorL3Vzci9sb2NhbC9zaGFyZS9iaXNvbgorQGVuZCBncm91cAorJCB4c2x0cHJvYyAvdXNyL2xvY2FsL3NoYXJlL2Jpc29uL3hzbHQveG1sMnhodG1sLnhzbCBnci54bWwgPmdyLmh0bWwKK0BlbmQgZXhhbXBsZQorCitAYyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFRyYWNpbmcKKworQG5vZGUgVHJhY2luZworQHNlY3Rpb24gVHJhY2luZyBZb3VyIFBhcnNlcgorQGZpbmRleCB5eWRlYnVnCitAY2luZGV4IGRlYnVnZ2luZworQGNpbmRleCB0cmFjaW5nIHRoZSBwYXJzZXIKKworV2hlbiBhIEJpc29uIGdyYW1tYXIgY29tcGlsZXMgcHJvcGVybHkgYnV0IHBhcnNlcyBgYGluY29ycmVjdGx5JycsIHRoZQorQGNvZGV7eXlkZWJ1Z30gcGFyc2VyLXRyYWNlIGZlYXR1cmUgaGVscHMgZmlndXJpbmcgb3V0IHdoeS4KKworQG1lbnUKKyogRW5hYmxpbmcgVHJhY2VzOjogICAgQWN0aXZhdGluZyBydW4tdGltZSB0cmFjZSBzdXBwb3J0CisqIE1mY2FsYyBUcmFjZXM6OiAgICAgIEV4dGVuZGluZyBAY29kZXttZmNhbGN9IHRvIHN1cHBvcnQgdHJhY2VzCisqIFRoZSBZWVBSSU5UIE1hY3JvOjogIE9ic29sZXRlIGludGVyZmFjZSBmb3Igc2VtYW50aWMgdmFsdWUgcmVwb3J0cworQGVuZCBtZW51CisKK0Bub2RlIEVuYWJsaW5nIFRyYWNlcworQHN1YnNlY3Rpb24gIEVuYWJsaW5nIFRyYWNlcworVGhlcmUgYXJlIHNldmVyYWwgbWVhbnMgdG8gZW5hYmxlIGNvbXBpbGF0aW9uIG9mIHRyYWNlIGZhY2lsaXRpZXM6CisKK0B0YWJsZSBAYXNpcworQGl0ZW0gdGhlIG1hY3JvIEBjb2Rle1lZREVCVUd9CitAZmluZGV4IFlZREVCVUcKK0RlZmluZSB0aGUgbWFjcm8gQGNvZGV7WVlERUJVR30gdG8gYSBub256ZXJvIHZhbHVlIHdoZW4geW91IGNvbXBpbGUgdGhlCitwYXJzZXIuICBUaGlzIGlzIGNvbXBsaWFudCB3aXRoIFBPU0lYIFlhY2MuICBZb3UgY291bGQgdXNlCitAc2FtcHstRFlZREVCVUc9MX0gYXMgYSBjb21waWxlciBvcHRpb24gb3IgeW91IGNvdWxkIHB1dCBAc2FtcHsjZGVmaW5lCitZWURFQlVHIDF9IGluIHRoZSBwcm9sb2d1ZSBvZiB0aGUgZ3JhbW1hciBmaWxlIChAcHhyZWZ7UHJvbG9ndWUsICwgVGhlCitQcm9sb2d1ZX0pLgorCitJZiB0aGUgQGNvZGV7JWRlZmluZX0gdmFyaWFibGUgQGNvZGV7YXBpLnByZWZpeH0gaXMgdXNlZCAoQHB4cmVme011bHRpcGxlCitQYXJzZXJzLCAsTXVsdGlwbGUgUGFyc2VycyBpbiB0aGUgU2FtZSBQcm9ncmFtfSksIGZvciBpbnN0YW5jZSBAc2FtcHslZGVmaW5lCithcGkucHJlZml4IHh9LCB0aGVuIGlmIEBjb2Rle0NERUJVR30gaXMgZGVmaW5lZCwgaXRzIHZhbHVlIGNvbnRyb2xzIHRoZQordHJhY2luZyBmZWF0dXJlIChlbmFibGVkIGlmIGFuZCBvbmx5IGlmIG5vbnplcm8pOyBvdGhlcndpc2UgdHJhY2luZyBpcworZW5hYmxlZCBpZiBhbmQgb25seSBpZiBAY29kZXtZWURFQlVHfSBpcyBub256ZXJvLgorCitAaXRlbSB0aGUgb3B0aW9uIEBvcHRpb257LXR9IChQT1NJWCBZYWNjIGNvbXBsaWFudCkKK0BpdGVteCB0aGUgb3B0aW9uIEBvcHRpb257LS1kZWJ1Z30gKEJpc29uIGV4dGVuc2lvbikKK1VzZSB0aGUgQHNhbXB7LXR9IG9wdGlvbiB3aGVuIHlvdSBydW4gQmlzb24gKEBweHJlZntJbnZvY2F0aW9uLCAsSW52b2tpbmcKK0Jpc29ufSkuICBXaXRoIEBzYW1weyVkZWZpbmUgYXBpLnByZWZpeCBjfSwgaXQgZGVmaW5lcyBAY29kZXtDREVCVUd9IHRvIDEsCitvdGhlcndpc2UgaXQgZGVmaW5lcyBAY29kZXtZWURFQlVHfSB0byAxLgorCitAaXRlbSB0aGUgZGlyZWN0aXZlIEBzYW1weyVkZWJ1Z30KK0BmaW5kZXggJWRlYnVnCitBZGQgdGhlIEBjb2RleyVkZWJ1Z30gZGlyZWN0aXZlIChAcHhyZWZ7RGVjbCBTdW1tYXJ5LCAsQmlzb24gRGVjbGFyYXRpb24KK1N1bW1hcnl9KS4gIFRoaXMgaXMgYSBCaXNvbiBleHRlbnNpb24sIGVzcGVjaWFsbHkgdXNlZnVsIGZvciBsYW5ndWFnZXMgdGhhdAorZG9uJ3QgdXNlIGEgcHJlcHJvY2Vzc29yLiAgVW5sZXNzIFBPU0lYIGFuZCBZYWNjIHBvcnRhYmlsaXR5IG1hdHRlciB0byB5b3UsCit0aGlzIGlzIHRoZSBwcmVmZXJyZWQgc29sdXRpb24uCitAZW5kIHRhYmxlCisKK1dlIHN1Z2dlc3QgdGhhdCB5b3UgYWx3YXlzIGVuYWJsZSB0aGUgZGVidWcgb3B0aW9uIHNvIHRoYXQgZGVidWdnaW5nIGlzCithbHdheXMgcG9zc2libGUuCisKK0BmaW5kZXggWVlGUFJJTlRGCitUaGUgdHJhY2UgZmFjaWxpdHkgb3V0cHV0cyBtZXNzYWdlcyB3aXRoIG1hY3JvIGNhbGxzIG9mIHRoZSBmb3JtCitAY29kZXtZWUZQUklOVEYgKHN0ZGVyciwgQHZhcntmb3JtYXR9LCBAdmFye2FyZ3N9KX0gd2hlcmUKK0B2YXJ7Zm9ybWF0fSBhbmQgQHZhcnthcmdzfSBhcmUgdGhlIHVzdWFsIEBjb2Rle3ByaW50Zn0gZm9ybWF0IGFuZCB2YXJpYWRpYworYXJndW1lbnRzLiAgSWYgeW91IGRlZmluZSBAY29kZXtZWURFQlVHfSB0byBhIG5vbnplcm8gdmFsdWUgYnV0IGRvIG5vdAorZGVmaW5lIEBjb2Rle1lZRlBSSU5URn0sIEBjb2RlezxzdGRpby5oPn0gaXMgYXV0b21hdGljYWxseSBpbmNsdWRlZAorYW5kIEBjb2Rle1lZRlBSSU5URn0gaXMgZGVmaW5lZCB0byBAY29kZXtmcHJpbnRmfS4KKworT25jZSB5b3UgaGF2ZSBjb21waWxlZCB0aGUgcHJvZ3JhbSB3aXRoIHRyYWNlIGZhY2lsaXRpZXMsIHRoZSB3YXkgdG8KK3JlcXVlc3QgYSB0cmFjZSBpcyB0byBzdG9yZSBhIG5vbnplcm8gdmFsdWUgaW4gdGhlIHZhcmlhYmxlIEBjb2Rle3l5ZGVidWd9LgorWW91IGNhbiBkbyB0aGlzIGJ5IG1ha2luZyB0aGUgQyBjb2RlIGRvIGl0IChpbiBAY29kZXttYWlufSwgcGVyaGFwcyksIG9yCit5b3UgY2FuIGFsdGVyIHRoZSB2YWx1ZSB3aXRoIGEgQyBkZWJ1Z2dlci4KKworRWFjaCBzdGVwIHRha2VuIGJ5IHRoZSBwYXJzZXIgd2hlbiBAY29kZXt5eWRlYnVnfSBpcyBub256ZXJvIHByb2R1Y2VzIGEKK2xpbmUgb3IgdHdvIG9mIHRyYWNlIGluZm9ybWF0aW9uLCB3cml0dGVuIG9uIEBjb2Rle3N0ZGVycn0uICBUaGUgdHJhY2UKK21lc3NhZ2VzIHRlbGwgeW91IHRoZXNlIHRoaW5nczoKKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0KK0VhY2ggdGltZSB0aGUgcGFyc2VyIGNhbGxzIEBjb2Rle3l5bGV4fSwgd2hhdCBraW5kIG9mIHRva2VuIHdhcyByZWFkLgorCitAaXRlbQorRWFjaCB0aW1lIGEgdG9rZW4gaXMgc2hpZnRlZCwgdGhlIGRlcHRoIGFuZCBjb21wbGV0ZSBjb250ZW50cyBvZiB0aGUKK3N0YXRlIHN0YWNrIChAcHhyZWZ7UGFyc2VyIFN0YXRlc30pLgorCitAaXRlbQorRWFjaCB0aW1lIGEgcnVsZSBpcyByZWR1Y2VkLCB3aGljaCBydWxlIGl0IGlzLCBhbmQgdGhlIGNvbXBsZXRlIGNvbnRlbnRzCitvZiB0aGUgc3RhdGUgc3RhY2sgYWZ0ZXJ3YXJkLgorQGVuZCBpdGVtaXplCisKK1RvIG1ha2Ugc2Vuc2Ugb2YgdGhpcyBpbmZvcm1hdGlvbiwgaXQgaGVscHMgdG8gcmVmZXIgdG8gdGhlIGF1dG9tYXRvbgorZGVzY3JpcHRpb24gZmlsZSAoQHB4cmVme1VuZGVyc3RhbmRpbmcsICxVbmRlcnN0YW5kaW5nIFlvdXIgUGFyc2VyfSkuCitUaGlzIGZpbGUgc2hvd3MgdGhlIG1lYW5pbmcgb2YgZWFjaCBzdGF0ZSBpbiB0ZXJtcyBvZgorcG9zaXRpb25zIGluIHZhcmlvdXMgcnVsZXMsIGFuZCBhbHNvIHdoYXQgZWFjaCBzdGF0ZSB3aWxsIGRvIHdpdGggZWFjaAorcG9zc2libGUgaW5wdXQgdG9rZW4uICBBcyB5b3UgcmVhZCB0aGUgc3VjY2Vzc2l2ZSB0cmFjZSBtZXNzYWdlcywgeW91CitjYW4gc2VlIHRoYXQgdGhlIHBhcnNlciBpcyBmdW5jdGlvbmluZyBhY2NvcmRpbmcgdG8gaXRzIHNwZWNpZmljYXRpb24gaW4KK3RoZSBsaXN0aW5nIGZpbGUuICBFdmVudHVhbGx5IHlvdSB3aWxsIGFycml2ZSBhdCB0aGUgcGxhY2Ugd2hlcmUKK3NvbWV0aGluZyB1bmRlc2lyYWJsZSBoYXBwZW5zLCBhbmQgeW91IHdpbGwgc2VlIHdoaWNoIHBhcnRzIG9mIHRoZQorZ3JhbW1hciBhcmUgdG8gYmxhbWUuCisKK1RoZSBwYXJzZXIgaW1wbGVtZW50YXRpb24gZmlsZSBpcyBhIEMvQysrL0phdmEgcHJvZ3JhbSBhbmQgeW91IGNhbiB1c2UKK2RlYnVnZ2VycyBvbiBpdCwgYnV0IGl0J3Mgbm90IGVhc3kgdG8gaW50ZXJwcmV0IHdoYXQgaXQgaXMgZG9pbmcuICBUaGUKK3BhcnNlciBmdW5jdGlvbiBpcyBhIGZpbml0ZS1zdGF0ZSBtYWNoaW5lIGludGVycHJldGVyLCBhbmQgYXNpZGUgZnJvbQordGhlIGFjdGlvbnMgaXQgZXhlY3V0ZXMgdGhlIHNhbWUgY29kZSBvdmVyIGFuZCBvdmVyLiAgT25seSB0aGUgdmFsdWVzCitvZiB2YXJpYWJsZXMgc2hvdyB3aGVyZSBpbiB0aGUgZ3JhbW1hciBpdCBpcyB3b3JraW5nLgorCitAbm9kZSBNZmNhbGMgVHJhY2VzCitAc3Vic2VjdGlvbiBFbmFibGluZyBEZWJ1ZyBUcmFjZXMgZm9yIEBjb2Rle21mY2FsY30KKworVGhlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBub3JtYWxseSBnaXZlcyB0aGUgdG9rZW4gdHlwZSBvZiBlYWNoIHRva2VuIHJlYWQsCitidXQgbm90IGl0cyBzZW1hbnRpYyB2YWx1ZS4gIFRoZSBAY29kZXslcHJpbnRlcn0gZGlyZWN0aXZlIGFsbG93cyBzcGVjaWZ5Citob3cgc2VtYW50aWMgdmFsdWVzIGFyZSByZXBvcnRlZCwgc2VlIEByZWZ7UHJpbnRlciBEZWNsLCAsIFByaW50aW5nCitTZW1hbnRpYyBWYWx1ZXN9LiAgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIFlhY2MgbGlrZSBDIHBhcnNlcnMgbWF5IGFsc28KK3VzZSB0aGUgQGNvZGV7WVlQUklOVH0gKEBweHJlZntUaGUgWVlQUklOVCBNYWNybywgLCBUaGUgQGNvZGV7WVlQUklOVH0KK01hY3JvfSksIGJ1dCBpdHMgdXNlIGlzIGRpc2NvdXJhZ2VkLgorCitBcyBhIGRlbW9uc3RyYXRpb24gb2YgQGNvZGV7JXByaW50ZXJ9LCBjb25zaWRlciB0aGUgbXVsdGktZnVuY3Rpb24KK2NhbGN1bGF0b3IsIEBjb2Rle21mY2FsY30gKEBweHJlZntNdWx0aS1mdW5jdGlvbiBDYWxjfSkuICBUbyBlbmFibGUgcnVuLXRpbWUKK3RyYWNlcywgYW5kIHNlbWFudGljIHZhbHVlIHJlcG9ydHMsIGluc2VydCB0aGUgZm9sbG93aW5nIGRpcmVjdGl2ZXMgaW4gaXRzCitwcm9sb2d1ZToKKworQGNvbW1lbnQgZmlsZTogbWZjYWxjLnk6IDIKK0BleGFtcGxlCisvKiBHZW5lcmF0ZSB0aGUgcGFyc2VyIGRlc2NyaXB0aW9uIGZpbGUuICAqLworJXZlcmJvc2UKKy8qIEVuYWJsZSBydW4tdGltZSB0cmFjZXMgKHl5ZGVidWcpLiAgKi8KKyVkZWZpbmUgcGFyc2UudHJhY2UKKworLyogRm9ybWF0dGluZyBzZW1hbnRpYyB2YWx1ZXMuICAqLworJXByaW50ZXIgQHsgZnByaW50ZiAoeXlvdXRwdXQsICIlcyIsICQkLT5uYW1lKTsgQH0gVkFSOworJXByaW50ZXIgQHsgZnByaW50ZiAoeXlvdXRwdXQsICIlcygpIiwgJCQtPm5hbWUpOyBAfSBGTkNUOworJXByaW50ZXIgQHsgZnByaW50ZiAoeXlvdXRwdXQsICIlZyIsICQkKTsgQH0gPHZhbD47CitAZW5kIGV4YW1wbGUKKworVGhlIEBjb2RleyVkZWZpbmV9IGRpcmVjdGl2ZSBpbnN0cnVjdHMgQmlzb24gdG8gZ2VuZXJhdGUgcnVuLXRpbWUgdHJhY2UKK3N1cHBvcnQuICBUaGVuLCBhY3RpdmF0aW9uIG9mIHRoZXNlIHRyYWNlcyBpcyBjb250cm9sbGVkIGF0IHJ1bi10aW1lIGJ5IHRoZQorQGNvZGV7eXlkZWJ1Z30gdmFyaWFibGUsIHdoaWNoIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuICBCZWNhdXNlIHRoZXNlIHRyYWNlcword2lsbCByZWZlciB0byB0aGUgYGBzdGF0ZXMnJyBvZiB0aGUgcGFyc2VyLCBpdCBpcyBoZWxwZnVsIHRvIGFzayBmb3IgdGhlCitjcmVhdGlvbiBvZiBhIGRlc2NyaXB0aW9uIG9mIHRoYXQgcGFyc2VyOyB0aGlzIGlzIHRoZSBwdXJwb3NlIG9mIChhZG1pdHRlZGx5CitpbGwtbmFtZWQpIEBjb2RleyV2ZXJib3NlfSBkaXJlY3RpdmUuCisKK1RoZSBzZXQgb2YgQGNvZGV7JXByaW50ZXJ9IGRpcmVjdGl2ZXMgZGVtb25zdHJhdGVzIGhvdyB0byBmb3JtYXQgdGhlCitzZW1hbnRpYyB2YWx1ZSBpbiB0aGUgdHJhY2VzLiAgTm90ZSB0aGF0IHRoZSBzcGVjaWZpY2F0aW9uIGNhbiBiZSBkb25lCitlaXRoZXIgb24gdGhlIHN5bWJvbCB0eXBlIChlLmcuLCBAY29kZXtWQVJ9IG9yIEBjb2Rle0ZOQ1R9KSwgb3Igb24gdGhlIHR5cGUKK3RhZzogc2luY2UgQGNvZGV7PHZhbD59IGlzIHRoZSB0eXBlIGZvciBib3RoIEBjb2Rle05VTX0gYW5kIEBjb2Rle2V4cH0sIHRoaXMKK3ByaW50ZXIgd2lsbCBiZSB1c2VkIGZvciB0aGVtLgorCitIZXJlIGlzIGEgc2FtcGxlIG9mIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCBieSBydW4tdGltZSB0cmFjZXMuICBUaGUgdHJhY2VzCithcmUgc2VudCBvbnRvIHN0YW5kYXJkIGVycm9yLgorCitAZXhhbXBsZQorJCBAa2Jke2VjaG8gJ3NpbigxLTEpJyB8IC4vbWZjYWxjIC1wfQorU3RhcnRpbmcgcGFyc2UKK0VudGVyaW5nIHN0YXRlIDAKK1JlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgMSAobGluZSAzNCk6CistPiAkJCA9IG50ZXJtIGlucHV0ICgpCitTdGFjayBub3cgMAorRW50ZXJpbmcgc3RhdGUgMQorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorVGhpcyBmaXJzdCBiYXRjaCBzaG93cyBhIHNwZWNpZmljIGZlYXR1cmUgb2YgdGhpcyBncmFtbWFyOiB0aGUgZmlyc3QgcnVsZQorKHdoaWNoIGlzIGluIGxpbmUgMzQgb2YgQGZpbGV7bWZjYWxjLnl9IGNhbiBiZSByZWR1Y2VkIHdpdGhvdXQgZXZlbiBoYXZpbmcKK3RvIGxvb2sgZm9yIHRoZSBmaXJzdCB0b2tlbi4gIFRoZSByZXN1bHRpbmcgbGVmdC1oYW5kIHN5bWJvbCAoQGNvZGV7JCR9KSBpcworYSB2YWx1ZWxlc3MgKEBzYW1weygpfSkgQGNvZGV7aW5wdXR9IG5vbiB0ZXJtaW5hbCAoQGNvZGV7bnRlcm19KS4KKworVGhlbiB0aGUgcGFyc2VyIGNhbGxzIHRoZSBzY2FubmVyLgorQGV4YW1wbGUKK1JlYWRpbmcgYSB0b2tlbjogTmV4dCB0b2tlbiBpcyB0b2tlbiBGTkNUIChzaW4oKSkKK1NoaWZ0aW5nIHRva2VuIEZOQ1QgKHNpbigpKQorRW50ZXJpbmcgc3RhdGUgNgorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorVGhhdCB0b2tlbiAoQGNvZGV7dG9rZW59KSBpcyBhIGZ1bmN0aW9uIChAY29kZXtGTkNUfSkgd2hvc2UgdmFsdWUgaXMKK0BzYW1we3Npbn0gYXMgZm9ybWF0dGVkIHBlciBvdXIgQGNvZGV7JXByaW50ZXJ9IHNwZWNpZmljYXRpb246IEBzYW1we3NpbigpfS4KK1RoZSBwYXJzZXIgc3RvcmVzIChAY29kZXtTaGlmdGluZ30pIHRoYXQgdG9rZW4sIGFuZCBvdGhlcnMsIHVudGlsIGl0IGNhbiBkbworc29tZXRoaW5nIGFib3V0IGl0LgorCitAZXhhbXBsZQorUmVhZGluZyBhIHRva2VuOiBOZXh0IHRva2VuIGlzIHRva2VuICcoJyAoKQorU2hpZnRpbmcgdG9rZW4gJygnICgpCitFbnRlcmluZyBzdGF0ZSAxNAorUmVhZGluZyBhIHRva2VuOiBOZXh0IHRva2VuIGlzIHRva2VuIE5VTSAoMS4wMDAwMDApCitTaGlmdGluZyB0b2tlbiBOVU0gKDEuMDAwMDAwKQorRW50ZXJpbmcgc3RhdGUgNAorUmVkdWNpbmcgc3RhY2sgYnkgcnVsZSA2IChsaW5lIDQ0KToKKyAgICQxID0gdG9rZW4gTlVNICgxLjAwMDAwMCkKKy0+ICQkID0gbnRlcm0gZXhwICgxLjAwMDAwMCkKK1N0YWNrIG5vdyAwIDEgNiAxNAorRW50ZXJpbmcgc3RhdGUgMjQKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK1RoZSBwcmV2aW91cyByZWR1Y3Rpb24gZGVtb25zdHJhdGVzIHRoZSBAY29kZXslcHJpbnRlcn0gZGlyZWN0aXZlIGZvcgorQGNvZGV7PHZhbD59OiBib3RoIHRoZSB0b2tlbiBAY29kZXtOVU19IGFuZCB0aGUgcmVzdWx0aW5nIG5vbnRlcm1pbmFsCitAY29kZXtleHB9IGhhdmUgQHNhbXB7MX0gYXMgdmFsdWUuCisKK0BleGFtcGxlCitSZWFkaW5nIGEgdG9rZW46IE5leHQgdG9rZW4gaXMgdG9rZW4gJy0nICgpCitTaGlmdGluZyB0b2tlbiAnLScgKCkKK0VudGVyaW5nIHN0YXRlIDE3CitSZWFkaW5nIGEgdG9rZW46IE5leHQgdG9rZW4gaXMgdG9rZW4gTlVNICgxLjAwMDAwMCkKK1NoaWZ0aW5nIHRva2VuIE5VTSAoMS4wMDAwMDApCitFbnRlcmluZyBzdGF0ZSA0CitSZWR1Y2luZyBzdGFjayBieSBydWxlIDYgKGxpbmUgNDQpOgorICAgJDEgPSB0b2tlbiBOVU0gKDEuMDAwMDAwKQorLT4gJCQgPSBudGVybSBleHAgKDEuMDAwMDAwKQorU3RhY2sgbm93IDAgMSA2IDE0IDI0IDE3CitFbnRlcmluZyBzdGF0ZSAyNgorUmVhZGluZyBhIHRva2VuOiBOZXh0IHRva2VuIGlzIHRva2VuICcpJyAoKQorUmVkdWNpbmcgc3RhY2sgYnkgcnVsZSAxMSAobGluZSA0OSk6CisgICAkMSA9IG50ZXJtIGV4cCAoMS4wMDAwMDApCisgICAkMiA9IHRva2VuICctJyAoKQorICAgJDMgPSBudGVybSBleHAgKDEuMDAwMDAwKQorLT4gJCQgPSBudGVybSBleHAgKDAuMDAwMDAwKQorU3RhY2sgbm93IDAgMSA2IDE0CitFbnRlcmluZyBzdGF0ZSAyNAorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorVGhlIHJ1bGUgZm9yIHRoZSBzdWJ0cmFjdGlvbiB3YXMganVzdCByZWR1Y2VkLiAgVGhlIHBhcnNlciBpcyBhYm91dCB0bworZGlzY292ZXIgdGhlIGVuZCBvZiB0aGUgY2FsbCB0byBAY29kZXtzaW59LgorCitAZXhhbXBsZQorTmV4dCB0b2tlbiBpcyB0b2tlbiAnKScgKCkKK1NoaWZ0aW5nIHRva2VuICcpJyAoKQorRW50ZXJpbmcgc3RhdGUgMzEKK1JlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgOSAobGluZSA0Nyk6CisgICAkMSA9IHRva2VuIEZOQ1QgKHNpbigpKQorICAgJDIgPSB0b2tlbiAnKCcgKCkKKyAgICQzID0gbnRlcm0gZXhwICgwLjAwMDAwMCkKKyAgICQ0ID0gdG9rZW4gJyknICgpCistPiAkJCA9IG50ZXJtIGV4cCAoMC4wMDAwMDApCitTdGFjayBub3cgMCAxCitFbnRlcmluZyBzdGF0ZSAxMQorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorRmluYWxseSwgdGhlIGVuZC1vZi1saW5lIGFsbG93IHRoZSBwYXJzZXIgdG8gY29tcGxldGUgdGhlIGNvbXB1dGF0aW9uLCBhbmQKK2Rpc3BsYXkgaXRzIHJlc3VsdC4KKworQGV4YW1wbGUKK1JlYWRpbmcgYSB0b2tlbjogTmV4dCB0b2tlbiBpcyB0b2tlbiAnXG4nICgpCitTaGlmdGluZyB0b2tlbiAnXG4nICgpCitFbnRlcmluZyBzdGF0ZSAyMgorUmVkdWNpbmcgc3RhY2sgYnkgcnVsZSA0IChsaW5lIDQwKToKKyAgICQxID0gbnRlcm0gZXhwICgwLjAwMDAwMCkKKyAgICQyID0gdG9rZW4gJ1xuJyAoKQorQHJlc3VsdHt9IDAKKy0+ICQkID0gbnRlcm0gbGluZSAoKQorU3RhY2sgbm93IDAgMQorRW50ZXJpbmcgc3RhdGUgMTAKK1JlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgMiAobGluZSAzNSk6CisgICAkMSA9IG50ZXJtIGlucHV0ICgpCisgICAkMiA9IG50ZXJtIGxpbmUgKCkKKy0+ICQkID0gbnRlcm0gaW5wdXQgKCkKK1N0YWNrIG5vdyAwCitFbnRlcmluZyBzdGF0ZSAxCitAZW5kIGV4YW1wbGUKKworVGhlIHBhcnNlciBoYXMgcmV0dXJuZWQgaW50byBzdGF0ZSAxLCBpbiB3aGljaCBpdCBpcyB3YWl0aW5nIGZvciB0aGUgbmV4dAorZXhwcmVzc2lvbiB0byBldmFsdWF0ZSwgb3IgZm9yIHRoZSBlbmQtb2YtZmlsZSB0b2tlbiwgd2hpY2ggY2F1c2VzIHRoZQorY29tcGxldGlvbiBvZiB0aGUgcGFyc2luZy4KKworQGV4YW1wbGUKK1JlYWRpbmcgYSB0b2tlbjogTm93IGF0IGVuZCBvZiBpbnB1dC4KK1NoaWZ0aW5nIHRva2VuICRlbmQgKCkKK0VudGVyaW5nIHN0YXRlIDIKK1N0YWNrIG5vdyAwIDEgMgorQ2xlYW51cDogcG9wcGluZyB0b2tlbiAkZW5kICgpCitDbGVhbnVwOiBwb3BwaW5nIG50ZXJtIGlucHV0ICgpCitAZW5kIGV4YW1wbGUKKworCitAbm9kZSBUaGUgWVlQUklOVCBNYWNybworQHN1YnNlY3Rpb24gVGhlIEBjb2Rle1lZUFJJTlR9IE1hY3JvCisKK0BmaW5kZXggWVlQUklOVAorQmVmb3JlIEBjb2RleyVwcmludGVyfSBzdXBwb3J0LCBzZW1hbnRpYyB2YWx1ZXMgY291bGQgYmUgZGlzcGxheWVkIHVzaW5nIHRoZQorQGNvZGV7WVlQUklOVH0gbWFjcm8sIHdoaWNoIHdvcmtzIG9ubHkgZm9yIHRlcm1pbmFsIHN5bWJvbHMgYW5kIG9ubHkgd2l0aAordGhlIEBmaWxle3lhY2MuY30gc2tlbGV0b24uCisKK0BkZWZmbiB7TWFjcm99IFlZUFJJTlQgKEB2YXJ7c3RyZWFtfSwgQHZhcnt0b2tlbn0sIEB2YXJ7dmFsdWV9KTsKK0BmaW5kZXggWVlQUklOVAorSWYgeW91IGRlZmluZSBAY29kZXtZWVBSSU5UfSwgaXQgc2hvdWxkIHRha2UgdGhyZWUgYXJndW1lbnRzLiAgVGhlIHBhcnNlcgord2lsbCBwYXNzIGEgc3RhbmRhcmQgSS9PIHN0cmVhbSwgdGhlIG51bWVyaWMgY29kZSBmb3IgdGhlIHRva2VuIHR5cGUsIGFuZAordGhlIHRva2VuIHZhbHVlIChmcm9tIEBjb2Rle3l5bHZhbH0pLgorCitGb3IgQGZpbGV7eWFjYy5jfSBvbmx5LiAgT2Jzb2xldGVkIGJ5IEBjb2RleyVwcmludGVyfS4KK0BlbmQgZGVmZm4KKworSGVyZSBpcyBhbiBleGFtcGxlIG9mIEBjb2Rle1lZUFJJTlR9IHN1aXRhYmxlIGZvciB0aGUgbXVsdGktZnVuY3Rpb24KK2NhbGN1bGF0b3IgKEBweHJlZntNZmNhbGMgRGVjbGFyYXRpb25zLCAsRGVjbGFyYXRpb25zIGZvciBAY29kZXttZmNhbGN9fSk6CisKK0BleGFtcGxlCislQHsKKyAgc3RhdGljIHZvaWQgcHJpbnRfdG9rZW5fdmFsdWUgKEZJTEUgKiwgaW50LCBZWVNUWVBFKTsKKyAgI2RlZmluZSBZWVBSSU5UKEZpbGUsIFR5cGUsIFZhbHVlKSAgICAgICAgICAgIFwKKyAgICBwcmludF90b2tlbl92YWx1ZSAoRmlsZSwgVHlwZSwgVmFsdWUpCislQH0KKworQGRvdHN7fSAlJSBAZG90c3t9ICUlIEBkb3Rze30KKworc3RhdGljIHZvaWQKK3ByaW50X3Rva2VuX3ZhbHVlIChGSUxFICpmaWxlLCBpbnQgdHlwZSwgWVlTVFlQRSB2YWx1ZSkKK0B7CisgIGlmICh0eXBlID09IFZBUikKKyAgICBmcHJpbnRmIChmaWxlLCAiJXMiLCB2YWx1ZS50cHRyLT5uYW1lKTsKKyAgZWxzZSBpZiAodHlwZSA9PSBOVU0pCisgICAgZnByaW50ZiAoZmlsZSwgIiVkIiwgdmFsdWUudmFsKTsKK0B9CitAZW5kIGV4YW1wbGUKKworQGMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBJbnZva2luZyBCaXNvbgorCitAbm9kZSBJbnZvY2F0aW9uCitAY2hhcHRlciBJbnZva2luZyBCaXNvbgorQGNpbmRleCBpbnZva2luZyBCaXNvbgorQGNpbmRleCBCaXNvbiBpbnZvY2F0aW9uCitAY2luZGV4IG9wdGlvbnMgZm9yIGludm9raW5nIEJpc29uCisKK1RoZSB1c3VhbCB3YXkgdG8gaW52b2tlIEJpc29uIGlzIGFzIGZvbGxvd3M6CisKK0BleGFtcGxlCitiaXNvbiBAdmFye2luZmlsZX0KK0BlbmQgZXhhbXBsZQorCitIZXJlIEB2YXJ7aW5maWxlfSBpcyB0aGUgZ3JhbW1hciBmaWxlIG5hbWUsIHdoaWNoIHVzdWFsbHkgZW5kcyBpbgorQHNhbXB7Lnl9LiAgVGhlIHBhcnNlciBpbXBsZW1lbnRhdGlvbiBmaWxlJ3MgbmFtZSBpcyBtYWRlIGJ5IHJlcGxhY2luZwordGhlIEBzYW1wey55fSB3aXRoIEBzYW1wey50YWIuY30gYW5kIHJlbW92aW5nIGFueSBsZWFkaW5nIGRpcmVjdG9yeS4KK1RodXMsIHRoZSBAc2FtcHtiaXNvbiBmb28ueX0gZmlsZSBuYW1lIHlpZWxkcyBAZmlsZXtmb28udGFiLmN9LCBhbmQKK3RoZSBAc2FtcHtiaXNvbiBoYWNrL2Zvby55fSBmaWxlIG5hbWUgeWllbGRzIEBmaWxle2Zvby50YWIuY30uICBJdCdzCithbHNvIHBvc3NpYmxlLCBpbiBjYXNlIHlvdSBhcmUgd3JpdGluZyBDKysgY29kZSBpbnN0ZWFkIG9mIEMgaW4geW91cgorZ3JhbW1hciBmaWxlLCB0byBuYW1lIGl0IEBmaWxle2Zvby55cHB9IG9yIEBmaWxle2Zvby55Kyt9LiAgVGhlbiwgdGhlCitvdXRwdXQgZmlsZXMgd2lsbCB0YWtlIGFuIGV4dGVuc2lvbiBsaWtlIHRoZSBnaXZlbiBvbmUgYXMgaW5wdXQKKyhyZXNwZWN0aXZlbHkgQGZpbGV7Zm9vLnRhYi5jcHB9IGFuZCBAZmlsZXtmb28udGFiLmMrK30pLiAgVGhpcworZmVhdHVyZSB0YWtlcyBlZmZlY3Qgd2l0aCBhbGwgb3B0aW9ucyB0aGF0IG1hbmlwdWxhdGUgZmlsZSBuYW1lcyBsaWtlCitAc2FtcHstb30gb3IgQHNhbXB7LWR9LgorCitGb3IgZXhhbXBsZSA6CisKK0BleGFtcGxlCitiaXNvbiAtZCBAdmFye2luZmlsZS55eHh9CitAZW5kIGV4YW1wbGUKK0Bub2luZGVudAord2lsbCBwcm9kdWNlIEBmaWxle2luZmlsZS50YWIuY3h4fSBhbmQgQGZpbGV7aW5maWxlLnRhYi5oeHh9LCBhbmQKKworQGV4YW1wbGUKK2Jpc29uIC1kIC1vIEB2YXJ7b3V0cHV0LmMrK30gQHZhcntpbmZpbGUueX0KK0BlbmQgZXhhbXBsZQorQG5vaW5kZW50Cit3aWxsIHByb2R1Y2UgQGZpbGV7b3V0cHV0LmMrK30gYW5kIEBmaWxle291dGZpbGUuaCsrfS4KKworRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBQT1NJWCwgdGhlIHN0YW5kYXJkIEJpc29uCitkaXN0cmlidXRpb24gYWxzbyBjb250YWlucyBhIHNoZWxsIHNjcmlwdCBjYWxsZWQgQGNvbW1hbmR7eWFjY30gdGhhdAoraW52b2tlcyBCaXNvbiB3aXRoIHRoZSBAb3B0aW9uey15fSBvcHRpb24uCisKK0BtZW51CisqIEJpc29uIE9wdGlvbnM6OiAgICAgQWxsIHRoZSBvcHRpb25zIGRlc2NyaWJlZCBpbiBkZXRhaWwsCisgICAgICAgICAgICAgICAgICAgICAgICBpbiBhbHBoYWJldGljYWwgb3JkZXIgYnkgc2hvcnQgb3B0aW9ucy4KKyogT3B0aW9uIENyb3NzIEtleTo6ICBBbHBoYWJldGljYWwgbGlzdCBvZiBsb25nIG9wdGlvbnMuCisqIFlhY2MgTGlicmFyeTo6ICAgICAgWWFjYy1jb21wYXRpYmxlIEBjb2Rle3l5bGV4fSBhbmQgQGNvZGV7bWFpbn0uCitAZW5kIG1lbnUKKworQG5vZGUgQmlzb24gT3B0aW9ucworQHNlY3Rpb24gQmlzb24gT3B0aW9ucworCitCaXNvbiBzdXBwb3J0cyBib3RoIHRyYWRpdGlvbmFsIHNpbmdsZS1sZXR0ZXIgb3B0aW9ucyBhbmQgbW5lbW9uaWMgbG9uZworb3B0aW9uIG5hbWVzLiAgTG9uZyBvcHRpb24gbmFtZXMgYXJlIGluZGljYXRlZCB3aXRoIEBzYW1wey0tfSBpbnN0ZWFkIG9mCitAc2FtcHstfS4gIEFiYnJldmlhdGlvbnMgZm9yIG9wdGlvbiBuYW1lcyBhcmUgYWxsb3dlZCBhcyBsb25nIGFzIHRoZXkKK2FyZSB1bmlxdWUuICBXaGVuIGEgbG9uZyBvcHRpb24gdGFrZXMgYW4gYXJndW1lbnQsIGxpa2UKK0BzYW1wey0tZmlsZS1wcmVmaXh9LCBjb25uZWN0IHRoZSBvcHRpb24gbmFtZSBhbmQgdGhlIGFyZ3VtZW50IHdpdGgKK0BzYW1wez19LgorCitIZXJlIGlzIGEgbGlzdCBvZiBvcHRpb25zIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBCaXNvbiwgYWxwaGFiZXRpemVkIGJ5CitzaG9ydCBvcHRpb24uICBJdCBpcyBmb2xsb3dlZCBieSBhIGNyb3NzIGtleSBhbHBoYWJldGl6ZWQgYnkgbG9uZworb3B0aW9uLgorCitAYyBQbGVhc2UsIGtlZXAgdGhpcyBvcmRlcmVkIGFzIGluIGBiaXNvbiAtLWhlbHAnLgorQG5vaW5kZW50CitPcGVyYXRpb25zIG1vZGVzOgorQHRhYmxlIEBvcHRpb24KK0BpdGVtIC1oCitAaXRlbXggLS1oZWxwCitQcmludCBhIHN1bW1hcnkgb2YgdGhlIGNvbW1hbmQtbGluZSBvcHRpb25zIHRvIEJpc29uIGFuZCBleGl0LgorCitAaXRlbSAtVgorQGl0ZW14IC0tdmVyc2lvbgorUHJpbnQgdGhlIHZlcnNpb24gbnVtYmVyIG9mIEJpc29uIGFuZCBleGl0LgorCitAaXRlbSAtLXByaW50LWxvY2FsZWRpcgorUHJpbnQgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGxvY2FsZS1kZXBlbmRlbnQgZGF0YS4KKworQGl0ZW0gLS1wcmludC1kYXRhZGlyCitQcmludCB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgc2tlbGV0b25zIGFuZCBYU0xULgorCitAaXRlbSAteQorQGl0ZW14IC0teWFjYworQWN0IG1vcmUgbGlrZSB0aGUgdHJhZGl0aW9uYWwgWWFjYyBjb21tYW5kLiAgVGhpcyBjYW4gY2F1c2UgZGlmZmVyZW50CitkaWFnbm9zdGljcyB0byBiZSBnZW5lcmF0ZWQsIGFuZCBtYXkgY2hhbmdlIGJlaGF2aW9yIGluIG90aGVyIG1pbm9yCit3YXlzLiAgTW9zdCBpbXBvcnRhbnRseSwgaW1pdGF0ZSBZYWNjJ3Mgb3V0cHV0IGZpbGUgbmFtZSBjb252ZW50aW9ucywKK3NvIHRoYXQgdGhlIHBhcnNlciBpbXBsZW1lbnRhdGlvbiBmaWxlIGlzIGNhbGxlZCBAZmlsZXt5LnRhYi5jfSwgYW5kCit0aGUgb3RoZXIgb3V0cHV0cyBhcmUgY2FsbGVkIEBmaWxle3kub3V0cHV0fSBhbmQgQGZpbGV7eS50YWIuaH0uCitBbHNvLCBpZiBnZW5lcmF0aW5nIGEgZGV0ZXJtaW5pc3RpYyBwYXJzZXIgaW4gQywgZ2VuZXJhdGUKK0Bjb2RleyNkZWZpbmV9IHN0YXRlbWVudHMgaW4gYWRkaXRpb24gdG8gYW4gQGNvZGV7ZW51bX0gdG8gYXNzb2NpYXRlCit0b2tlbiBudW1iZXJzIHdpdGggdG9rZW4gbmFtZXMuICBUaHVzLCB0aGUgZm9sbG93aW5nIHNoZWxsIHNjcmlwdCBjYW4KK3N1YnN0aXR1dGUgZm9yIFlhY2MsIGFuZCB0aGUgQmlzb24gZGlzdHJpYnV0aW9uIGNvbnRhaW5zIHN1Y2ggYSBzY3JpcHQKK2ZvciBjb21wYXRpYmlsaXR5IHdpdGggUE9TSVg6CisKK0BleGFtcGxlCisjISAvYmluL3NoCitiaXNvbiAteSAiJEBAIgorQGVuZCBleGFtcGxlCisKK1RoZSBAb3B0aW9uey15fS9Ab3B0aW9uey0teWFjY30gb3B0aW9uIGlzIGludGVuZGVkIGZvciB1c2Ugd2l0aAordHJhZGl0aW9uYWwgWWFjYyBncmFtbWFycy4gIElmIHlvdXIgZ3JhbW1hciB1c2VzIGEgQmlzb24gZXh0ZW5zaW9uCitsaWtlIEBzYW1weyVnbHItcGFyc2VyfSwgQmlzb24gbWlnaHQgbm90IGJlIFlhY2MtY29tcGF0aWJsZSBldmVuIGlmCit0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQuCisKK0BpdGVtIC1XIFtAdmFye2NhdGVnb3J5fV0KK0BpdGVteCAtLXdhcm5pbmdzWz1AdmFye2NhdGVnb3J5fV0KK091dHB1dCB3YXJuaW5ncyBmYWxsaW5nIGluIEB2YXJ7Y2F0ZWdvcnl9LiAgQHZhcntjYXRlZ29yeX0gY2FuIGJlIG9uZQorb2Y6CitAdGFibGUgQGNvZGUKK0BpdGVtIG1pZHJ1bGUtdmFsdWVzCitXYXJuIGFib3V0IG1pZC1ydWxlIHZhbHVlcyB0aGF0IGFyZSBzZXQgYnV0IG5vdCB1c2VkIHdpdGhpbiBhbnkgb2YgdGhlIGFjdGlvbnMKK29mIHRoZSBwYXJlbnQgcnVsZS4KK0ZvciBleGFtcGxlLCB3YXJuIGFib3V0IHVudXNlZCBAY29kZXskMn0gaW46CisKK0BleGFtcGxlCitleHA6ICcxJyBAeyAkJCA9IDE7IEB9ICcrJyBleHAgQHsgJCQgPSAkMSArICQ0OyBAfTsKK0BlbmQgZXhhbXBsZQorCitBbHNvIHdhcm4gYWJvdXQgbWlkLXJ1bGUgdmFsdWVzIHRoYXQgYXJlIHVzZWQgYnV0IG5vdCBzZXQuCitGb3IgZXhhbXBsZSwgd2FybiBhYm91dCB1bnNldCBAY29kZXskJH0gaW4gdGhlIG1pZC1ydWxlIGFjdGlvbiBpbjoKKworQGV4YW1wbGUKK2V4cDogJzEnIEB7ICQxID0gMTsgQH0gJysnIGV4cCBAeyAkJCA9ICQyICsgJDQ7IEB9OworQGVuZCBleGFtcGxlCisKK1RoZXNlIHdhcm5pbmdzIGFyZSBub3QgZW5hYmxlZCBieSBkZWZhdWx0IHNpbmNlIHRoZXkgc29tZXRpbWVzIHByb3ZlIHRvCitiZSBmYWxzZSBhbGFybXMgaW4gZXhpc3RpbmcgZ3JhbW1hcnMgZW1wbG95aW5nIHRoZSBZYWNjIGNvbnN0cnVjdHMKK0Bjb2RleyQwfSBvciBAY29kZXskLUB2YXJ7bn19ICh3aGVyZSBAdmFye259IGlzIHNvbWUgcG9zaXRpdmUgaW50ZWdlcikuCisKK0BpdGVtIHlhY2MKK0luY29tcGF0aWJpbGl0aWVzIHdpdGggUE9TSVggWWFjYy4KKworQGl0ZW0gY29uZmxpY3RzLXNyCitAaXRlbXggY29uZmxpY3RzLXJyCitTL1IgYW5kIFIvUiBjb25mbGljdHMuICBUaGVzZSB3YXJuaW5ncyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LiAgSG93ZXZlciwgaWYKK3RoZSBAY29kZXslZXhwZWN0fSBvciBAY29kZXslZXhwZWN0LXJyfSBkaXJlY3RpdmUgaXMgc3BlY2lmaWVkLCBhbgordW5leHBlY3RlZCBudW1iZXIgb2YgY29uZmxpY3RzIGlzIGFuIGVycm9yLCBhbmQgYW4gZXhwZWN0ZWQgbnVtYmVyIG9mCitjb25mbGljdHMgaXMgbm90IHJlcG9ydGVkLCBzbyBAb3B0aW9uey1XfSBhbmQgQG9wdGlvbnstLXdhcm5pbmd9IHRoZW4gaGF2ZQorbm8gZWZmZWN0IG9uIHRoZSBjb25mbGljdCByZXBvcnQuCisKK0BpdGVtIG90aGVyCitBbGwgd2FybmluZ3Mgbm90IGNhdGVnb3JpemVkIGFib3ZlLiAgVGhlc2Ugd2FybmluZ3MgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdC4KKworVGhpcyBjYXRlZ29yeSBpcyBwcm92aWRlZCBtZXJlbHkgZm9yIHRoZSBzYWtlIG9mIGNvbXBsZXRlbmVzcy4gIEZ1dHVyZQorcmVsZWFzZXMgb2YgQmlzb24gbWF5IG1vdmUgd2FybmluZ3MgZnJvbSB0aGlzIGNhdGVnb3J5IHRvIG5ldywgbW9yZSBzcGVjaWZpYworY2F0ZWdvcmllcy4KKworQGl0ZW0gYWxsCitBbGwgdGhlIHdhcm5pbmdzLgorQGl0ZW0gbm9uZQorVHVybiBvZmYgYWxsIHRoZSB3YXJuaW5ncy4KK0BpdGVtIGVycm9yCitUcmVhdCB3YXJuaW5ncyBhcyBlcnJvcnMuCitAZW5kIHRhYmxlCisKK0EgY2F0ZWdvcnkgY2FuIGJlIHR1cm5lZCBvZmYgYnkgcHJlZml4aW5nIGl0cyBuYW1lIHdpdGggQHNhbXB7bm8tfS4gIEZvcgoraW5zdGFuY2UsIEBvcHRpb257LVduby15YWNjfSB3aWxsIGhpZGUgdGhlIHdhcm5pbmdzIGFib3V0CitQT1NJWCBZYWNjIGluY29tcGF0aWJpbGl0aWVzLgorCitAaXRlbSAtZiBbQHZhcntmZWF0dXJlfV0KK0BpdGVteCAtLWZlYXR1cmVbPUB2YXJ7ZmVhdHVyZX1dCitBY3RpdmF0ZSBtaXNjZWxsYW5lb3VzIEB2YXJ7ZmVhdHVyZX0uIEB2YXJ7ZmVhdHVyZX0gY2FuIGJlIG9uZSBvZjoKK0B0YWJsZSBAY29kZQorQGl0ZW0gY2FyZXQKK0BpdGVteCBkaWFnbm9zdGljcy1zaG93LWNhcmV0CitTaG93IGNhcmV0IGVycm9ycywgaW4gYSBtYW5uZXIgc2ltaWxhciB0byBHQ0MncworQG9wdGlvbnstZmRpYWdub3N0aWNzLXNob3ctY2FyZXR9LCBvciBDbGFuZydzIEBvcHRpb257LWZjYXJldC1kaWFnbm90aWNzfS4gVGhlCitsb2NhdGlvbiBwcm92aWRlZCB3aXRoIHRoZSBtZXNzYWdlIGlzIHVzZWQgdG8gcXVvdGUgdGhlIGNvcnJlc3BvbmRpbmcgbGluZSBvZgordGhlIHNvdXJjZSBmaWxlLCB1bmRlcmxpbmluZyB0aGUgaW1wb3J0YW50IHBhcnQgb2YgaXQgd2l0aCBjYXJldHMgKF4pLiBIZXJlIGlzCithbiBleGFtcGxlLCB1c2luZyB0aGUgZm9sbG93aW5nIGZpbGUgQGZpbGV7aW4ueX06CisKK0BleGFtcGxlCisldHlwZSA8aXZhbD4gZXhwCislJQorZXhwOiBleHAgJysnIGV4cCBAeyAkZXhwID0gJDEgKyAkMjsgQH07CitAZW5kIGV4YW1wbGUKKworV2hlbiBpbnZva2VkIHdpdGggQG9wdGlvbnstZmNhcmV0fSwgQmlzb24gd2lsbCByZXBvcnQ6CisKK0BleGFtcGxlCitAZ3JvdXAKK2luLnk6My4yMC0yMzogZXJyb3I6IGFtYmlndW91cyByZWZlcmVuY2U6ICckZXhwJworIGV4cDogZXhwICcrJyBleHAgQHsgJGV4cCA9ICQxICsgJDI7IEB9OworICAgICAgICAgICAgICAgICAgICBeXl5eCitAZW5kIGdyb3VwCitAZ3JvdXAKK2luLnk6My4xLTM6ICAgICAgIHJlZmVycyB0bzogJGV4cCBhdCAkJAorIGV4cDogZXhwICcrJyBleHAgQHsgJGV4cCA9ICQxICsgJDI7IEB9OworIF5eXgorQGVuZCBncm91cAorQGdyb3VwCitpbi55OjMuNi04OiAgICAgICByZWZlcnMgdG86ICRleHAgYXQgJDEKKyBleHA6IGV4cCAnKycgZXhwIEB7ICRleHAgPSAkMSArICQyOyBAfTsKKyAgICAgIF5eXgorQGVuZCBncm91cAorQGdyb3VwCitpbi55OjMuMTQtMTY6ICAgICByZWZlcnMgdG86ICRleHAgYXQgJDMKKyBleHA6IGV4cCAnKycgZXhwIEB7ICRleHAgPSAkMSArICQyOyBAfTsKKyAgICAgICAgICAgICAgXl5eCitAZW5kIGdyb3VwCitAZ3JvdXAKK2luLnk6My4zMi0zMzogZXJyb3I6ICQyIG9mICdleHAnIGhhcyBubyBkZWNsYXJlZCB0eXBlCisgZXhwOiBleHAgJysnIGV4cCBAeyAkZXhwID0gJDEgKyAkMjsgQH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eCitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworQGVuZCB0YWJsZQorQGVuZCB0YWJsZQorCitAbm9pbmRlbnQKK1R1bmluZyB0aGUgcGFyc2VyOgorCitAdGFibGUgQG9wdGlvbgorQGl0ZW0gLXQKK0BpdGVteCAtLWRlYnVnCitJbiB0aGUgcGFyc2VyIGltcGxlbWVudGF0aW9uIGZpbGUsIGRlZmluZSB0aGUgbWFjcm8gQGNvZGV7WVlERUJVR30gdG8KKzEgaWYgaXQgaXMgbm90IGFscmVhZHkgZGVmaW5lZCwgc28gdGhhdCB0aGUgZGVidWdnaW5nIGZhY2lsaXRpZXMgYXJlCitjb21waWxlZC4gIEB4cmVme1RyYWNpbmcsICxUcmFjaW5nIFlvdXIgUGFyc2VyfS4KKworQGl0ZW0gLUQgQHZhcntuYW1lfVs9QHZhcnt2YWx1ZX1dCitAaXRlbXggLS1kZWZpbmU9QHZhcntuYW1lfVs9QHZhcnt2YWx1ZX1dCitAaXRlbXggLUYgQHZhcntuYW1lfVs9QHZhcnt2YWx1ZX1dCitAaXRlbXggLS1mb3JjZS1kZWZpbmU9QHZhcntuYW1lfVs9QHZhcnt2YWx1ZX1dCitFYWNoIG9mIHRoZXNlIGlzIGVxdWl2YWxlbnQgdG8gQHNhbXB7JWRlZmluZSBAdmFye25hbWV9ICJAdmFye3ZhbHVlfSJ9CisoQHB4cmVmeyVkZWZpbmUgU3VtbWFyeX0pIGV4Y2VwdCB0aGF0IEJpc29uIHByb2Nlc3NlcyBtdWx0aXBsZQorZGVmaW5pdGlvbnMgZm9yIHRoZSBzYW1lIEB2YXJ7bmFtZX0gYXMgZm9sbG93czoKKworQGl0ZW1pemUKK0BpdGVtCitCaXNvbiBxdWlldGx5IGlnbm9yZXMgYWxsIGNvbW1hbmQtbGluZSBkZWZpbml0aW9ucyBmb3IgQHZhcntuYW1lfSBleGNlcHQKK3RoZSBsYXN0LgorQGl0ZW0KK0lmIHRoYXQgY29tbWFuZC1saW5lIGRlZmluaXRpb24gaXMgc3BlY2lmaWVkIGJ5IGEgQGNvZGV7LUR9IG9yCitAY29kZXstLWRlZmluZX0sIEJpc29uIHJlcG9ydHMgYW4gZXJyb3IgZm9yIGFueSBAY29kZXslZGVmaW5lfQorZGVmaW5pdGlvbiBmb3IgQHZhcntuYW1lfS4KK0BpdGVtCitJZiB0aGF0IGNvbW1hbmQtbGluZSBkZWZpbml0aW9uIGlzIHNwZWNpZmllZCBieSBhIEBjb2Rley1GfSBvcgorQGNvZGV7LS1mb3JjZS1kZWZpbmV9IGluc3RlYWQsIEJpc29uIHF1aWV0bHkgaWdub3JlcyBhbGwgQGNvZGV7JWRlZmluZX0KK2RlZmluaXRpb25zIGZvciBAdmFye25hbWV9LgorQGl0ZW0KK090aGVyd2lzZSwgQmlzb24gcmVwb3J0cyBhbiBlcnJvciBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgQGNvZGV7JWRlZmluZX0KK2RlZmluaXRpb25zIGZvciBAdmFye25hbWV9LgorQGVuZCBpdGVtaXplCisKK1lvdSBzaG91bGQgYXZvaWQgdXNpbmcgQGNvZGV7LUZ9IGFuZCBAY29kZXstLWZvcmNlLWRlZmluZX0gaW4geW91cgorbWFrZSBmaWxlcyB1bmxlc3MgeW91IGFyZSBjb25maWRlbnQgdGhhdCBpdCBpcyBzYWZlIHRvIHF1aWV0bHkgaWdub3JlCithbnkgY29uZmxpY3RpbmcgQGNvZGV7JWRlZmluZX0gdGhhdCBtYXkgYmUgYWRkZWQgdG8gdGhlIGdyYW1tYXIgZmlsZS4KKworQGl0ZW0gLUwgQHZhcntsYW5ndWFnZX0KK0BpdGVteCAtLWxhbmd1YWdlPUB2YXJ7bGFuZ3VhZ2V9CitTcGVjaWZ5IHRoZSBwcm9ncmFtbWluZyBsYW5ndWFnZSBmb3IgdGhlIGdlbmVyYXRlZCBwYXJzZXIsIGFzIGlmCitAY29kZXslbGFuZ3VhZ2V9IHdhcyBzcGVjaWZpZWQgKEBweHJlZntEZWNsIFN1bW1hcnksICwgQmlzb24gRGVjbGFyYXRpb24KK1N1bW1hcnl9KS4gIEN1cnJlbnRseSBzdXBwb3J0ZWQgbGFuZ3VhZ2VzIGluY2x1ZGUgQywgQysrLCBhbmQgSmF2YS4KK0B2YXJ7bGFuZ3VhZ2V9IGlzIGNhc2UtaW5zZW5zaXRpdmUuCisKK0BpdGVtIC0tbG9jYXRpb25zCitQcmV0ZW5kIHRoYXQgQGNvZGV7JWxvY2F0aW9uc30gd2FzIHNwZWNpZmllZC4gIEB4cmVme0RlY2wgU3VtbWFyeX0uCisKK0BpdGVtIC1wIEB2YXJ7cHJlZml4fQorQGl0ZW14IC0tbmFtZS1wcmVmaXg9QHZhcntwcmVmaXh9CitQcmV0ZW5kIHRoYXQgQGNvZGV7JW5hbWUtcHJlZml4ICJAdmFye3ByZWZpeH0ifSB3YXMgc3BlY2lmaWVkIChAcHhyZWZ7RGVjbAorU3VtbWFyeX0pLiAgT2Jzb2xldGVkIGJ5IEBjb2Rley1EYXBpLnByZWZpeD1AdmFye3ByZWZpeH19LiAgQHhyZWZ7TXVsdGlwbGUKK1BhcnNlcnMsICxNdWx0aXBsZSBQYXJzZXJzIGluIHRoZSBTYW1lIFByb2dyYW19LgorCitAaXRlbSAtbAorQGl0ZW14IC0tbm8tbGluZXMKK0Rvbid0IHB1dCBhbnkgQGNvZGV7I2xpbmV9IHByZXByb2Nlc3NvciBjb21tYW5kcyBpbiB0aGUgcGFyc2VyCitpbXBsZW1lbnRhdGlvbiBmaWxlLiAgT3JkaW5hcmlseSBCaXNvbiBwdXRzIHRoZW0gaW4gdGhlIHBhcnNlcgoraW1wbGVtZW50YXRpb24gZmlsZSBzbyB0aGF0IHRoZSBDIGNvbXBpbGVyIGFuZCBkZWJ1Z2dlcnMgd2lsbAorYXNzb2NpYXRlIGVycm9ycyB3aXRoIHlvdXIgc291cmNlIGZpbGUsIHRoZSBncmFtbWFyIGZpbGUuICBUaGlzIG9wdGlvbgorY2F1c2VzIHRoZW0gdG8gYXNzb2NpYXRlIGVycm9ycyB3aXRoIHRoZSBwYXJzZXIgaW1wbGVtZW50YXRpb24gZmlsZSwKK3RyZWF0aW5nIGl0IGFzIGFuIGluZGVwZW5kZW50IHNvdXJjZSBmaWxlIGluIGl0cyBvd24gcmlnaHQuCisKK0BpdGVtIC1TIEB2YXJ7ZmlsZX0KK0BpdGVteCAtLXNrZWxldG9uPUB2YXJ7ZmlsZX0KK1NwZWNpZnkgdGhlIHNrZWxldG9uIHRvIHVzZSwgc2ltaWxhciB0byBAY29kZXslc2tlbGV0b259CisoQHB4cmVme0RlY2wgU3VtbWFyeSwgLCBCaXNvbiBEZWNsYXJhdGlvbiBTdW1tYXJ5fSkuCisKK0BjIFlvdSBwcm9iYWJseSBkb24ndCBuZWVkIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgYXJlIGRldmVsb3BpbmcgQmlzb24uCitAYyBZb3Ugc2hvdWxkIHVzZSBAb3B0aW9uey0tbGFuZ3VhZ2V9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNrZWxldG9uIGZvciBhCitAYyBkaWZmZXJlbnQgbGFuZ3VhZ2UsIGJlY2F1c2UgaXQgaXMgY2xlYXJlciBhbmQgYmVjYXVzZSBpdCB3aWxsIGFsd2F5cworQGMgY2hvb3NlIHRoZSBjb3JyZWN0IHNrZWxldG9uIGZvciBub24tZGV0ZXJtaW5pc3RpYyBvciBwdXNoIHBhcnNlcnMuCisKK0lmIEB2YXJ7ZmlsZX0gZG9lcyBub3QgY29udGFpbiBhIEBjb2Rley99LCBAdmFye2ZpbGV9IGlzIHRoZSBuYW1lIG9mIGEgc2tlbGV0b24KK2ZpbGUgaW4gdGhlIEJpc29uIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCitJZiBpdCBkb2VzLCBAdmFye2ZpbGV9IGlzIGFuIGFic29sdXRlIGZpbGUgbmFtZSBvciBhIGZpbGUgbmFtZSByZWxhdGl2ZSB0byB0aGUKK2N1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCitUaGlzIGlzIHNpbWlsYXIgdG8gaG93IG1vc3Qgc2hlbGxzIHJlc29sdmUgY29tbWFuZHMuCisKK0BpdGVtIC1rCitAaXRlbXggLS10b2tlbi10YWJsZQorUHJldGVuZCB0aGF0IEBjb2RleyV0b2tlbi10YWJsZX0gd2FzIHNwZWNpZmllZC4gIEB4cmVme0RlY2wgU3VtbWFyeX0uCitAZW5kIHRhYmxlCisKK0Bub2luZGVudAorQWRqdXN0IHRoZSBvdXRwdXQ6CisKK0B0YWJsZSBAb3B0aW9uCitAaXRlbSAtLWRlZmluZXNbPUB2YXJ7ZmlsZX1dCitQcmV0ZW5kIHRoYXQgQGNvZGV7JWRlZmluZXN9IHdhcyBzcGVjaWZpZWQsIGkuZS4sIHdyaXRlIGFuIGV4dHJhIG91dHB1dAorZmlsZSBjb250YWluaW5nIG1hY3JvIGRlZmluaXRpb25zIGZvciB0aGUgdG9rZW4gdHlwZSBuYW1lcyBkZWZpbmVkIGluCit0aGUgZ3JhbW1hciwgYXMgd2VsbCBhcyBhIGZldyBvdGhlciBkZWNsYXJhdGlvbnMuICBAeHJlZntEZWNsIFN1bW1hcnl9LgorCitAaXRlbSAtZAorVGhpcyBpcyB0aGUgc2FtZSBhcyBAY29kZXstLWRlZmluZXN9IGV4Y2VwdCBAY29kZXstZH0gZG9lcyBub3QgYWNjZXB0IGEKK0B2YXJ7ZmlsZX0gYXJndW1lbnQgc2luY2UgUE9TSVggWWFjYyByZXF1aXJlcyB0aGF0IEBjb2Rley1kfSBjYW4gYmUgYnVuZGxlZAord2l0aCBvdGhlciBzaG9ydCBvcHRpb25zLgorCitAaXRlbSAtYiBAdmFye2ZpbGUtcHJlZml4fQorQGl0ZW14IC0tZmlsZS1wcmVmaXg9QHZhcntwcmVmaXh9CitQcmV0ZW5kIHRoYXQgQGNvZGV7JWZpbGUtcHJlZml4fSB3YXMgc3BlY2lmaWVkLCBpLmUuLCBzcGVjaWZ5IHByZWZpeCB0byB1c2UKK2ZvciBhbGwgQmlzb24gb3V0cHV0IGZpbGUgbmFtZXMuICBAeHJlZntEZWNsIFN1bW1hcnl9LgorCitAaXRlbSAtciBAdmFye3RoaW5nc30KK0BpdGVteCAtLXJlcG9ydD1AdmFye3RoaW5nc30KK1dyaXRlIGFuIGV4dHJhIG91dHB1dCBmaWxlIGNvbnRhaW5pbmcgdmVyYm9zZSBkZXNjcmlwdGlvbiBvZiB0aGUgY29tbWEKK3NlcGFyYXRlZCBsaXN0IG9mIEB2YXJ7dGhpbmdzfSBhbW9uZzoKKworQHRhYmxlIEBjb2RlCitAaXRlbSBzdGF0ZQorRGVzY3JpcHRpb24gb2YgdGhlIGdyYW1tYXIsIGNvbmZsaWN0cyAocmVzb2x2ZWQgYW5kIHVucmVzb2x2ZWQpLCBhbmQKK3BhcnNlcidzIGF1dG9tYXRvbi4KKworQGl0ZW0gaXRlbXNldAorSW1wbGllcyBAY29kZXtzdGF0ZX0gYW5kIGF1Z21lbnRzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYXV0b21hdG9uIHdpdGgKK3RoZSBmdWxsIHNldCBvZiBpdGVtcyBmb3IgZWFjaCBzdGF0ZSwgaW5zdGVhZCBvZiBpdHMgY29yZSBvbmx5LgorCitAaXRlbSBsb29rYWhlYWQKK0ltcGxpZXMgQGNvZGV7c3RhdGV9IGFuZCBhdWdtZW50cyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGF1dG9tYXRvbiB3aXRoCitlYWNoIHJ1bGUncyBsb29rYWhlYWQgc2V0LgorCitAaXRlbSBzb2x2ZWQKK0ltcGxpZXMgQGNvZGV7c3RhdGV9LiAgRXhwbGFpbiBob3cgY29uZmxpY3RzIHdlcmUgc29sdmVkIHRoYW5rcyB0bworcHJlY2VkZW5jZSBhbmQgYXNzb2NpYXRpdml0eSBkaXJlY3RpdmVzLgorCitAaXRlbSBhbGwKK0VuYWJsZSBhbGwgdGhlIGl0ZW1zLgorCitAaXRlbSBub25lCitEbyBub3QgZ2VuZXJhdGUgdGhlIHJlcG9ydC4KK0BlbmQgdGFibGUKKworQGl0ZW0gLS1yZXBvcnQtZmlsZT1AdmFye2ZpbGV9CitTcGVjaWZ5IHRoZSBAdmFye2ZpbGV9IGZvciB0aGUgdmVyYm9zZSBkZXNjcmlwdGlvbi4KKworQGl0ZW0gLXYKK0BpdGVteCAtLXZlcmJvc2UKK1ByZXRlbmQgdGhhdCBAY29kZXsldmVyYm9zZX0gd2FzIHNwZWNpZmllZCwgaS5lLiwgd3JpdGUgYW4gZXh0cmEgb3V0cHV0CitmaWxlIGNvbnRhaW5pbmcgdmVyYm9zZSBkZXNjcmlwdGlvbnMgb2YgdGhlIGdyYW1tYXIgYW5kCitwYXJzZXIuICBAeHJlZntEZWNsIFN1bW1hcnl9LgorCitAaXRlbSAtbyBAdmFye2ZpbGV9CitAaXRlbXggLS1vdXRwdXQ9QHZhcntmaWxlfQorU3BlY2lmeSB0aGUgQHZhcntmaWxlfSBmb3IgdGhlIHBhcnNlciBpbXBsZW1lbnRhdGlvbiBmaWxlLgorCitUaGUgb3RoZXIgb3V0cHV0IGZpbGVzJyBuYW1lcyBhcmUgY29uc3RydWN0ZWQgZnJvbSBAdmFye2ZpbGV9IGFzCitkZXNjcmliZWQgdW5kZXIgdGhlIEBzYW1wey12fSBhbmQgQHNhbXB7LWR9IG9wdGlvbnMuCisKK0BpdGVtIC1nIFtAdmFye2ZpbGV9XQorQGl0ZW14IC0tZ3JhcGhbPUB2YXJ7ZmlsZX1dCitPdXRwdXQgYSBncmFwaGljYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBhcnNlcidzCithdXRvbWF0b24gY29tcHV0ZWQgYnkgQmlzb24sIGluIEB1cmVme2h0dHA6Ly93d3cuZ3JhcGh2aXoub3JnLywgR3JhcGh2aXp9CitAdXJlZntodHRwOi8vd3d3LmdyYXBodml6Lm9yZy9kb2MvaW5mby9sYW5nLmh0bWwsIERPVH0gZm9ybWF0LgorQGNvZGV7QHZhcntmaWxlfX0gaXMgb3B0aW9uYWwuCitJZiBvbWl0dGVkIGFuZCB0aGUgZ3JhbW1hciBmaWxlIGlzIEBmaWxle2Zvby55fSwgdGhlIG91dHB1dCBmaWxlIHdpbGwgYmUKK0BmaWxle2Zvby5kb3R9LgorCitAaXRlbSAteCBbQHZhcntmaWxlfV0KK0BpdGVteCAtLXhtbFs9QHZhcntmaWxlfV0KK091dHB1dCBhbiBYTUwgcmVwb3J0IG9mIHRoZSBwYXJzZXIncyBhdXRvbWF0b24gY29tcHV0ZWQgYnkgQmlzb24uCitAY29kZXtAdmFye2ZpbGV9fSBpcyBvcHRpb25hbC4KK0lmIG9taXR0ZWQgYW5kIHRoZSBncmFtbWFyIGZpbGUgaXMgQGZpbGV7Zm9vLnl9LCB0aGUgb3V0cHV0IGZpbGUgd2lsbCBiZQorQGZpbGV7Zm9vLnhtbH0uCisoVGhlIGN1cnJlbnQgWE1MIHNjaGVtYSBpcyBleHBlcmltZW50YWwgYW5kIG1heSBldm9sdmUuCitNb3JlIHVzZXIgZmVlZGJhY2sgd2lsbCBoZWxwIHRvIHN0YWJpbGl6ZSBpdC4pCitAZW5kIHRhYmxlCisKK0Bub2RlIE9wdGlvbiBDcm9zcyBLZXkKK0BzZWN0aW9uIE9wdGlvbiBDcm9zcyBLZXkKKworSGVyZSBpcyBhIGxpc3Qgb2Ygb3B0aW9ucywgYWxwaGFiZXRpemVkIGJ5IGxvbmcgb3B0aW9uLCB0byBoZWxwIHlvdSBmaW5kCit0aGUgY29ycmVzcG9uZGluZyBzaG9ydCBvcHRpb24gYW5kIGRpcmVjdGl2ZS4KKworQG11bHRpdGFibGUge0BvcHRpb257LS1mb3JjZS1kZWZpbmU9QHZhcntuYW1lfVs9QHZhcnt2YWx1ZX1dfX0ge0BvcHRpb257LUYgQHZhcntuYW1lfVs9QHZhcnt2YWx1ZX1dfX0ge0Bjb2RleyVub25kZXRlcm1pbmlzdGljLXBhcnNlcn19CitAaGVhZGl0ZW0gTG9uZyBPcHRpb24gQHRhYiBTaG9ydCBPcHRpb24gQHRhYiBCaXNvbiBEaXJlY3RpdmUKK0BpbmNsdWRlIGNyb3NzLW9wdGlvbnMudGV4aQorQGVuZCBtdWx0aXRhYmxlCisKK0Bub2RlIFlhY2MgTGlicmFyeQorQHNlY3Rpb24gWWFjYyBMaWJyYXJ5CisKK1RoZSBZYWNjIGxpYnJhcnkgY29udGFpbnMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlCitAY29kZXt5eWVycm9yfSBhbmQgQGNvZGV7bWFpbn0gZnVuY3Rpb25zLiAgVGhlc2UgZGVmYXVsdAoraW1wbGVtZW50YXRpb25zIGFyZSBub3JtYWxseSBub3QgdXNlZnVsLCBidXQgUE9TSVggcmVxdWlyZXMKK3RoZW0uICBUbyB1c2UgdGhlIFlhY2MgbGlicmFyeSwgbGluayB5b3VyIHByb2dyYW0gd2l0aCB0aGUKK0BvcHRpb257LWx5fSBvcHRpb24uICBOb3RlIHRoYXQgQmlzb24ncyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgWWFjYworbGlicmFyeSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSAoQHB4cmVme0NvcHlpbmd9KS4KKworSWYgeW91IHVzZSB0aGUgWWFjYyBsaWJyYXJ5J3MgQGNvZGV7eXllcnJvcn0gZnVuY3Rpb24sIHlvdSBzaG91bGQKK2RlY2xhcmUgQGNvZGV7eXllcnJvcn0gYXMgZm9sbG93czoKKworQGV4YW1wbGUKK2ludCB5eWVycm9yIChjaGFyIGNvbnN0ICopOworQGVuZCBleGFtcGxlCisKK0Jpc29uIGlnbm9yZXMgdGhlIEBjb2Rle2ludH0gdmFsdWUgcmV0dXJuZWQgYnkgdGhpcyBAY29kZXt5eWVycm9yfS4KK0lmIHlvdSB1c2UgdGhlIFlhY2MgbGlicmFyeSdzIEBjb2Rle21haW59IGZ1bmN0aW9uLCB5b3VyCitAY29kZXt5eXBhcnNlfSBmdW5jdGlvbiBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHR5cGUgc2lnbmF0dXJlOgorCitAZXhhbXBsZQoraW50IHl5cGFyc2UgKHZvaWQpOworQGVuZCBleGFtcGxlCisKK0BjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQysrIEJpc29uCisKK0Bub2RlIE90aGVyIExhbmd1YWdlcworQGNoYXB0ZXIgUGFyc2VycyBXcml0dGVuIEluIE90aGVyIExhbmd1YWdlcworCitAbWVudQorKiBDKysgUGFyc2Vyczo6ICAgICAgICAgICAgICAgICBUaGUgaW50ZXJmYWNlIHRvIGdlbmVyYXRlIEMrKyBwYXJzZXIgY2xhc3NlcworKiBKYXZhIFBhcnNlcnM6OiAgICAgICAgICAgICAgICBUaGUgaW50ZXJmYWNlIHRvIGdlbmVyYXRlIEphdmEgcGFyc2VyIGNsYXNzZXMKK0BlbmQgbWVudQorCitAbm9kZSBDKysgUGFyc2VycworQHNlY3Rpb24gQysrIFBhcnNlcnMKKworQG1lbnUKKyogQysrIEJpc29uIEludGVyZmFjZTo6ICAgICAgICAgQXNraW5nIGZvciBDKysgcGFyc2VyIGdlbmVyYXRpb24KKyogQysrIFNlbWFudGljIFZhbHVlczo6ICAgICAgICAgJXVuaW9uIHZzLiBDKysKKyogQysrIExvY2F0aW9uIFZhbHVlczo6ICAgICAgICAgVGhlIHBvc2l0aW9uIGFuZCBsb2NhdGlvbiBjbGFzc2VzCisqIEMrKyBQYXJzZXIgSW50ZXJmYWNlOjogICAgICAgIEluc3RhbnRpYXRpbmcgYW5kIHJ1bm5pbmcgdGhlIHBhcnNlcgorKiBDKysgU2Nhbm5lciBJbnRlcmZhY2U6OiAgICAgICBFeGNoYW5nZXMgYmV0d2VlbiB5eWxleCBhbmQgcGFyc2UKKyogQSBDb21wbGV0ZSBDKysgRXhhbXBsZTo6ICAgICAgRGVtb25zdHJhdGluZyB0aGVpciB1c2UKK0BlbmQgbWVudQorCitAbm9kZSBDKysgQmlzb24gSW50ZXJmYWNlCitAc3Vic2VjdGlvbiBDKysgQmlzb24gSW50ZXJmYWNlCitAYyAtICVza2VsZXRvbiAibGFscjEuY2MiCitAYyAtIEFsd2F5cyBwdXJlCitAYyAtIGluaXRpYWwgYWN0aW9uCisKK1RoZSBDKysgZGV0ZXJtaW5pc3RpYyBwYXJzZXIgaXMgc2VsZWN0ZWQgdXNpbmcgdGhlIHNrZWxldG9uIGRpcmVjdGl2ZSwKK0BzYW1weyVza2VsZXRvbiAibGFscjEuY2MifSwgb3IgdGhlIHN5bm9ueW1vdXMgY29tbWFuZC1saW5lIG9wdGlvbgorQG9wdGlvbnstLXNrZWxldG9uPWxhbHIxLmNjfS4KK0B4cmVme0RlY2wgU3VtbWFyeX0uCisKK1doZW4gcnVuLCBAY29tbWFuZHtiaXNvbn0gd2lsbCBjcmVhdGUgc2V2ZXJhbCBlbnRpdGllcyBpbiB0aGUgQHNhbXB7eXl9CituYW1lc3BhY2UuCitAZmluZGV4ICVkZWZpbmUgbmFtZXNwYWNlCitVc2UgdGhlIEBzYW1weyVkZWZpbmUgbmFtZXNwYWNlfSBkaXJlY3RpdmUgdG8gY2hhbmdlIHRoZSBuYW1lc3BhY2UKK25hbWUsIHNlZSBAcmVmeyVkZWZpbmUgU3VtbWFyeSwsbmFtZXNwYWNlfS4gIFRoZSB2YXJpb3VzIGNsYXNzZXMgYXJlCitnZW5lcmF0ZWQgaW4gdGhlIGZvbGxvd2luZyBmaWxlczoKKworQHRhYmxlIEBmaWxlCitAaXRlbSBwb3NpdGlvbi5oaAorQGl0ZW14IGxvY2F0aW9uLmhoCitUaGUgZGVmaW5pdGlvbiBvZiB0aGUgY2xhc3NlcyBAY29kZXtwb3NpdGlvbn0gYW5kIEBjb2Rle2xvY2F0aW9ufSwgdXNlZCBmb3IKK2xvY2F0aW9uIHRyYWNraW5nLiAgVGhlc2UgZmlsZXMgYXJlIG5vdCBnZW5lcmF0ZWQgaWYgdGhlIEBjb2RleyVkZWZpbmV9Cit2YXJpYWJsZSBAY29kZXthcGkubG9jYXRpb24udHlwZX0gaXMgZGVmaW5lZC4gIEB4cmVme0MrKyBMb2NhdGlvbiBWYWx1ZXN9LgorCitAaXRlbSBzdGFjay5oaAorQW4gYXV4aWxpYXJ5IGNsYXNzIEBjb2Rle3N0YWNrfSB1c2VkIGJ5IHRoZSBwYXJzZXIuCisKK0BpdGVtIEB2YXJ7ZmlsZX0uaGgKK0BpdGVteCBAdmFye2ZpbGV9LmNjCisoQXNzdW1pbmcgdGhlIGV4dGVuc2lvbiBvZiB0aGUgZ3JhbW1hciBmaWxlIHdhcyBAc2FtcHsueXl9LikgIFRoZQorZGVjbGFyYXRpb24gYW5kIGltcGxlbWVudGF0aW9uIG9mIHRoZSBDKysgcGFyc2VyIGNsYXNzLiAgVGhlIGJhc2VuYW1lCithbmQgZXh0ZW5zaW9uIG9mIHRoZXNlIHR3byBmaWxlcyBmb2xsb3cgdGhlIHNhbWUgcnVsZXMgYXMgd2l0aCByZWd1bGFyIEMKK3BhcnNlcnMgKEBweHJlZntJbnZvY2F0aW9ufSkuCisKK1RoZSBoZWFkZXIgaXMgQGVtcGh7bWFuZGF0b3J5fTsgeW91IG11c3QgZWl0aGVyIHBhc3MKK0BvcHRpb257LWR9L0BvcHRpb257LS1kZWZpbmVzfSB0byBAY29tbWFuZHtiaXNvbn0sIG9yIHVzZSB0aGUKK0BzYW1weyVkZWZpbmVzfSBkaXJlY3RpdmUuCitAZW5kIHRhYmxlCisKK0FsbCB0aGVzZSBmaWxlcyBhcmUgZG9jdW1lbnRlZCB1c2luZyBEb3h5Z2VuOyBydW4gQGNvbW1hbmR7ZG94eWdlbn0KK2ZvciBhIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZSBkb2N1bWVudGF0aW9uLgorCitAbm9kZSBDKysgU2VtYW50aWMgVmFsdWVzCitAc3Vic2VjdGlvbiBDKysgU2VtYW50aWMgVmFsdWVzCitAYyAtIE5vIG9iamVjdHMgaW4gdW5pb25zCitAYyAtIFlZU1RZUEUKK0BjIC0gUHJpbnRlciBhbmQgZGVzdHJ1Y3RvcgorCitUaGUgQGNvZGV7JXVuaW9ufSBkaXJlY3RpdmUgd29ya3MgYXMgZm9yIEMsIHNlZSBAcmVme1VuaW9uIERlY2wsICxUaGUKK0NvbGxlY3Rpb24gb2YgVmFsdWUgVHlwZXN9LiAgSW4gcGFydGljdWxhciBpdCBwcm9kdWNlcyBhIGdlbnVpbmUKK0Bjb2Rle3VuaW9ufUBmb290bm90ZXtJbiB0aGUgZnV0dXJlIHRlY2huaXF1ZXMgdG8gYWxsb3cgY29tcGxleCB0eXBlcword2l0aGluIHBzZXVkby11bmlvbnMgKHNpbWlsYXIgdG8gQm9vc3QgdmFyaWFudHMpIG1pZ2h0IGJlIGltcGxlbWVudGVkIHRvCithbGxldmlhdGUgdGhlc2UgaXNzdWVzLn0sIHdoaWNoIGhhdmUgYSBmZXcgc3BlY2lmaWMgZmVhdHVyZXMgaW4gQysrLgorQGl0ZW1pemUgQG1pbnVzCitAaXRlbQorVGhlIHR5cGUgQGNvZGV7WVlTVFlQRX0gaXMgZGVmaW5lZCBidXQgaXRzIHVzZSBpcyBkaXNjb3VyYWdlZDogcmF0aGVyCit5b3Ugc2hvdWxkIHJlZmVyIHRvIHRoZSBwYXJzZXIncyBlbmNhcHN1bGF0ZWQgdHlwZQorQGNvZGV7eXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZX0uCitAaXRlbQorTm9uIFBPRCAoUGxhaW4gT2xkIERhdGEpIHR5cGVzIGNhbm5vdCBiZSB1c2VkLiAgQysrIGZvcmJpZHMgYW55CitpbnN0YW5jZSBvZiBjbGFzc2VzIHdpdGggY29uc3RydWN0b3JzIGluIHVuaW9uczogb25seSBAZW1waHtwb2ludGVyc30KK3RvIHN1Y2ggb2JqZWN0cyBhcmUgYWxsb3dlZC4KK0BlbmQgaXRlbWl6ZQorCitCZWNhdXNlIG9iamVjdHMgaGF2ZSB0byBiZSBzdG9yZWQgdmlhIHBvaW50ZXJzLCBtZW1vcnkgaXMgbm90CityZWNsYWltZWQgYXV0b21hdGljYWxseTogdXNpbmcgdGhlIEBjb2RleyVkZXN0cnVjdG9yfSBkaXJlY3RpdmUgaXMgdGhlCitvbmx5IG1lYW5zIHRvIGF2b2lkIGxlYWtzLiAgQHhyZWZ7RGVzdHJ1Y3RvciBEZWNsLCAsIEZyZWVpbmcgRGlzY2FyZGVkCitTeW1ib2xzfS4KKworCitAbm9kZSBDKysgTG9jYXRpb24gVmFsdWVzCitAc3Vic2VjdGlvbiBDKysgTG9jYXRpb24gVmFsdWVzCitAYyAtICVsb2NhdGlvbnMKK0BjIC0gY2xhc3MgUG9zaXRpb24KK0BjIC0gY2xhc3MgTG9jYXRpb24KK0BjIC0gJWRlZmluZSBmaWxlbmFtZV90eXBlICJjb25zdCBzeW1ib2w6OlN5bWJvbCIKKworV2hlbiB0aGUgZGlyZWN0aXZlIEBjb2RleyVsb2NhdGlvbnN9IGlzIHVzZWQsIHRoZSBDKysgcGFyc2VyIHN1cHBvcnRzCitsb2NhdGlvbiB0cmFja2luZywgc2VlIEByZWZ7VHJhY2tpbmcgTG9jYXRpb25zfS4KKworQnkgZGVmYXVsdCwgdHdvIGF1eGlsaWFyeSBjbGFzc2VzIGRlZmluZSBhIEBjb2Rle3Bvc2l0aW9ufSwgYSBzaW5nbGUgcG9pbnQKK2luIGEgZmlsZSwgYW5kIGEgQGNvZGV7bG9jYXRpb259LCBhIHJhbmdlIGNvbXBvc2VkIG9mIGEgcGFpciBvZgorQGNvZGV7cG9zaXRpb259cyAocG9zc2libHkgc3Bhbm5pbmcgc2V2ZXJhbCBmaWxlcykuICBCdXQgaWYgdGhlCitAY29kZXslZGVmaW5lfSB2YXJpYWJsZSBAY29kZXthcGkubG9jYXRpb24udHlwZX0gaXMgZGVmaW5lZCwgdGhlbiB0aGVzZQorY2xhc3NlcyB3aWxsIG5vdCBiZSBnZW5lcmF0ZWQsIGFuZCB0aGUgdXNlciBkZWZpbmVkIHR5cGUgd2lsbCBiZSB1c2VkLgorCitAdGluZGV4IHVpbnQKK0luIHRoaXMgc2VjdGlvbiBAY29kZXt1aW50fSBpcyBhbiBhYmJyZXZpYXRpb24gZm9yIEBjb2Rle3Vuc2lnbmVkIGludH06IGluCitnZW51aW5lIGNvZGUgb25seSB0aGUgbGF0dGVyIGlzIHVzZWQuCisKK0BtZW51CisqIEMrKyBwb3NpdGlvbjo6ICAgICAgICAgICAgICAgIE9uZSBwb2ludCBpbiB0aGUgc291cmNlIGZpbGUKKyogQysrIGxvY2F0aW9uOjogICAgICAgICAgICAgICAgVHdvIHBvaW50cyBpbiB0aGUgc291cmNlIGZpbGUKKyogVXNlciBEZWZpbmVkIExvY2F0aW9uIFR5cGU6OiAgUmVxdWlyZWQgaW50ZXJmYWNlIGZvciBsb2NhdGlvbnMKK0BlbmQgbWVudQorCitAbm9kZSBDKysgcG9zaXRpb24KK0BzdWJzdWJzZWN0aW9uIEMrKyBAY29kZXtwb3NpdGlvbn0KKworQGRlZnR5cGVvcCB7Q29uc3RydWN0b3J9IHtwb3NpdGlvbn0ge30gcG9zaXRpb24gKHN0ZDo6c3RyaW5nKiBAdmFye2ZpbGV9ID0gMCwgdWludCBAdmFye2xpbmV9ID0gMSwgdWludCBAdmFye2NvbH0gPSAxKQorQ3JlYXRlIGEgQGNvZGV7cG9zaXRpb259IGRlbm90aW5nIGEgZ2l2ZW4gcG9pbnQuICBOb3RlIHRoYXQgQGNvZGV7ZmlsZX0gaXMKK25vdCByZWNsYWltZWQgd2hlbiB0aGUgQGNvZGV7cG9zaXRpb259IGlzIGRlc3Ryb3llZDogbWVtb3J5IG1hbmFnZWQgbXVzdCBiZQoraGFuZGxlZCBlbHNld2hlcmUuCitAZW5kIGRlZnR5cGVvcAorCitAZGVmdHlwZW1ldGhvZCB7cG9zaXRpb259IHt2b2lkfSBpbml0aWFsaXplIChzdGQ6OnN0cmluZyogQHZhcntmaWxlfSA9IDAsIHVpbnQgQHZhcntsaW5lfSA9IDEsIHVpbnQgQHZhcntjb2x9ID0gMSkKK1Jlc2V0IHRoZSBwb3NpdGlvbiB0byB0aGUgZ2l2ZW4gdmFsdWVzLgorQGVuZCBkZWZ0eXBlbWV0aG9kCisKK0BkZWZ0eXBlaXZhciB7cG9zaXRpb259IHtzdGQ6OnN0cmluZyp9IGZpbGUKK1RoZSBuYW1lIG9mIHRoZSBmaWxlLiAgSXQgd2lsbCBhbHdheXMgYmUgaGFuZGxlZCBhcyBhIHBvaW50ZXIsIHRoZQorcGFyc2VyIHdpbGwgbmV2ZXIgZHVwbGljYXRlIG5vciBkZWFsbG9jYXRlIGl0LiAgQXMgYW4gZXhwZXJpbWVudGFsCitmZWF0dXJlIHlvdSBtYXkgY2hhbmdlIGl0IHRvIEBzYW1we0B2YXJ7dHlwZX0qfSB1c2luZyBAc2FtcHslZGVmaW5lCitmaWxlbmFtZV90eXBlICJAdmFye3R5cGV9In0uCitAZW5kIGRlZnR5cGVpdmFyCisKK0BkZWZ0eXBlaXZhciB7cG9zaXRpb259IHt1aW50fSBsaW5lCitUaGUgbGluZSwgc3RhcnRpbmcgYXQgMS4KK0BlbmQgZGVmdHlwZWl2YXIKKworQGRlZnR5cGVtZXRob2Qge3Bvc2l0aW9ufSB7dWludH0gbGluZXMgKGludCBAdmFye2hlaWdodH0gPSAxKQorQWR2YW5jZSBieSBAdmFye2hlaWdodH0gbGluZXMsIHJlc2V0dGluZyB0aGUgY29sdW1uIG51bWJlci4KK0BlbmQgZGVmdHlwZW1ldGhvZAorCitAZGVmdHlwZWl2YXIge3Bvc2l0aW9ufSB7dWludH0gY29sdW1uCitUaGUgY29sdW1uLCBzdGFydGluZyBhdCAxLgorQGVuZCBkZWZ0eXBlaXZhcgorCitAZGVmdHlwZW1ldGhvZCB7cG9zaXRpb259IHt1aW50fSBjb2x1bW5zIChpbnQgQHZhcnt3aWR0aH0gPSAxKQorQWR2YW5jZSBieSBAdmFye3dpZHRofSBjb2x1bW5zLCB3aXRob3V0IGNoYW5naW5nIHRoZSBsaW5lIG51bWJlci4KK0BlbmQgZGVmdHlwZW1ldGhvZAorCitAZGVmdHlwZW1ldGhvZCB7cG9zaXRpb259IHtwb3NpdGlvbiZ9IG9wZXJhdG9yKz0gKGludCBAdmFye3dpZHRofSkKK0BkZWZ0eXBlbWV0aG9keCB7cG9zaXRpb259IHtwb3NpdGlvbn0gb3BlcmF0b3IrIChpbnQgQHZhcnt3aWR0aH0pCitAZGVmdHlwZW1ldGhvZHgge3Bvc2l0aW9ufSB7cG9zaXRpb24mfSBvcGVyYXRvci09IChpbnQgQHZhcnt3aWR0aH0pCitAZGVmdHlwZW1ldGhvZHgge3Bvc2l0aW9ufSB7cG9zaXRpb259IG9wZXJhdG9yLSAoaW50IEB2YXJ7d2lkdGh9KQorVmFyaW91cyBmb3JtcyBvZiBzeW50YWN0aWMgc3VnYXIgZm9yIEBjb2Rle2NvbHVtbnN9LgorQGVuZCBkZWZ0eXBlbWV0aG9kCisKK0BkZWZ0eXBlbWV0aG9kIHtwb3NpdGlvbn0ge2Jvb2x9IG9wZXJhdG9yPT0gKGNvbnN0IHBvc2l0aW9uJiBAdmFye3RoYXR9KQorQGRlZnR5cGVtZXRob2R4IHtwb3NpdGlvbn0ge2Jvb2x9IG9wZXJhdG9yIT0gKGNvbnN0IHBvc2l0aW9uJiBAdmFye3RoYXR9KQorV2hldGhlciBAY29kZXsqdGhpc30gYW5kIEBjb2Rle3RoYXR9IGRlbm90ZSBlcXVhbC9kaWZmZXJlbnQgcG9zaXRpb25zLgorQGVuZCBkZWZ0eXBlbWV0aG9kCisKK0BkZWZ0eXBlZnVuIHtzdGQ6Om9zdHJlYW0mfSBvcGVyYXRvcjw8IChzdGQ6Om9zdHJlYW0mIEB2YXJ7b30sIGNvbnN0IHBvc2l0aW9uJiBAdmFye3B9KQorUmVwb3J0IEB2YXJ7cH0gb24gQHZhcntvfSBsaWtlIHRoaXM6CitAc2FtcHtAdmFye2ZpbGV9OkB2YXJ7bGluZX0uQHZhcntjb2x1bW59fSwgb3IKK0BzYW1we0B2YXJ7bGluZX0uQHZhcntjb2x1bW59fSBpZiBAdmFye2ZpbGV9IGlzIG51bGwuCitAZW5kIGRlZnR5cGVmdW4KKworQG5vZGUgQysrIGxvY2F0aW9uCitAc3Vic3Vic2VjdGlvbiBDKysgQGNvZGV7bG9jYXRpb259CisKK0BkZWZ0eXBlb3Age0NvbnN0cnVjdG9yfSB7bG9jYXRpb259IHt9IGxvY2F0aW9uIChjb25zdCBwb3NpdGlvbiYgQHZhcntiZWdpbn0sIGNvbnN0IHBvc2l0aW9uJiBAdmFye2VuZH0pCitDcmVhdGUgYSBAY29kZXtMb2NhdGlvbn0gZnJvbSB0aGUgZW5kcG9pbnRzIG9mIHRoZSByYW5nZS4KK0BlbmQgZGVmdHlwZW9wCisKK0BkZWZ0eXBlb3Age0NvbnN0cnVjdG9yfSB7bG9jYXRpb259IHt9IGxvY2F0aW9uIChjb25zdCBwb3NpdGlvbiYgQHZhcntwb3N9ID0gcG9zaXRpb24oKSkKK0BkZWZ0eXBlb3B4IHtDb25zdHJ1Y3Rvcn0ge2xvY2F0aW9ufSB7fSBsb2NhdGlvbiAoc3RkOjpzdHJpbmcqIEB2YXJ7ZmlsZX0sIHVpbnQgQHZhcntsaW5lfSwgdWludCBAdmFye2NvbH0pCitDcmVhdGUgYSBAY29kZXtMb2NhdGlvbn0gZGVub3RpbmcgYW4gZW1wdHkgcmFuZ2UgbG9jYXRlZCBhdCBhIGdpdmVuIHBvaW50LgorQGVuZCBkZWZ0eXBlb3AKKworQGRlZnR5cGVtZXRob2Qge2xvY2F0aW9ufSB7dm9pZH0gaW5pdGlhbGl6ZSAoc3RkOjpzdHJpbmcqIEB2YXJ7ZmlsZX0gPSAwLCB1aW50IEB2YXJ7bGluZX0gPSAxLCB1aW50IEB2YXJ7Y29sfSA9IDEpCitSZXNldCB0aGUgbG9jYXRpb24gdG8gYW4gZW1wdHkgcmFuZ2UgYXQgdGhlIGdpdmVuIHZhbHVlcy4KK0BlbmQgZGVmdHlwZW1ldGhvZAorCitAZGVmdHlwZWl2YXIge2xvY2F0aW9ufSB7cG9zaXRpb259IGJlZ2luCitAZGVmdHlwZWl2YXJ4IHtsb2NhdGlvbn0ge3Bvc2l0aW9ufSBlbmQKK1RoZSBmaXJzdCwgaW5jbHVzaXZlLCBwb3NpdGlvbiBvZiB0aGUgcmFuZ2UsIGFuZCB0aGUgZmlyc3QgYmV5b25kLgorQGVuZCBkZWZ0eXBlaXZhcgorCitAZGVmdHlwZW1ldGhvZCB7bG9jYXRpb259IHt1aW50fSBjb2x1bW5zIChpbnQgQHZhcnt3aWR0aH0gPSAxKQorQGRlZnR5cGVtZXRob2R4IHtsb2NhdGlvbn0ge3VpbnR9IGxpbmVzIChpbnQgQHZhcntoZWlnaHR9ID0gMSkKK0FkdmFuY2UgdGhlIEBjb2Rle2VuZH0gcG9zaXRpb24uCitAZW5kIGRlZnR5cGVtZXRob2QKKworQGRlZnR5cGVtZXRob2Qge2xvY2F0aW9ufSB7bG9jYXRpb259IG9wZXJhdG9yKyAoY29uc3QgbG9jYXRpb24mIEB2YXJ7ZW5kfSkKK0BkZWZ0eXBlbWV0aG9keCB7bG9jYXRpb259IHtsb2NhdGlvbn0gb3BlcmF0b3IrIChpbnQgQHZhcnt3aWR0aH0pCitAZGVmdHlwZW1ldGhvZHgge2xvY2F0aW9ufSB7bG9jYXRpb259IG9wZXJhdG9yKz0gKGludCBAdmFye3dpZHRofSkKK1ZhcmlvdXMgZm9ybXMgb2Ygc3ludGFjdGljIHN1Z2FyLgorQGVuZCBkZWZ0eXBlbWV0aG9kCisKK0BkZWZ0eXBlbWV0aG9kIHtsb2NhdGlvbn0ge3ZvaWR9IHN0ZXAgKCkKK01vdmUgQGNvZGV7YmVnaW59IG9udG8gQGNvZGV7ZW5kfS4KK0BlbmQgZGVmdHlwZW1ldGhvZAorCitAZGVmdHlwZW1ldGhvZCB7bG9jYXRpb259IHtib29sfSBvcGVyYXRvcj09IChjb25zdCBsb2NhdGlvbiYgQHZhcnt0aGF0fSkKK0BkZWZ0eXBlbWV0aG9keCB7bG9jYXRpb259IHtib29sfSBvcGVyYXRvciE9IChjb25zdCBsb2NhdGlvbiYgQHZhcnt0aGF0fSkKK1doZXRoZXIgQGNvZGV7KnRoaXN9IGFuZCBAY29kZXt0aGF0fSBkZW5vdGUgZXF1YWwvZGlmZmVyZW50IHJhbmdlcyBvZgorcG9zaXRpb25zLgorQGVuZCBkZWZ0eXBlbWV0aG9kCisKK0BkZWZ0eXBlZnVuIHtzdGQ6Om9zdHJlYW0mfSBvcGVyYXRvcjw8IChzdGQ6Om9zdHJlYW0mIEB2YXJ7b30sIGNvbnN0IGxvY2F0aW9uJiBAdmFye3B9KQorUmVwb3J0IEB2YXJ7cH0gb24gQHZhcntvfSwgdGFraW5nIGNhcmUgb2Ygc3BlY2lhbCBjYXNlcyBzdWNoIGFzOiBubworQGNvZGV7ZmlsZW5hbWV9IGRlZmluZWQsIG9yIGVxdWFsIGZpbGVuYW1lL2xpbmUgb3IgY29sdW1uLgorQGVuZCBkZWZ0eXBlZnVuCisKK0Bub2RlIFVzZXIgRGVmaW5lZCBMb2NhdGlvbiBUeXBlCitAc3Vic3Vic2VjdGlvbiBVc2VyIERlZmluZWQgTG9jYXRpb24gVHlwZQorQGZpbmRleCAlZGVmaW5lIGFwaS5sb2NhdGlvbi50eXBlCisKK0luc3RlYWQgb2YgdXNpbmcgdGhlIGJ1aWx0LWluIHR5cGVzIHlvdSBtYXkgdXNlIHRoZSBAY29kZXslZGVmaW5lfSB2YXJpYWJsZQorQGNvZGV7YXBpLmxvY2F0aW9uLnR5cGV9IHRvIHNwZWNpZnkgeW91ciBvd24gdHlwZToKKworQGV4YW1wbGUKKyVkZWZpbmUgYXBpLmxvY2F0aW9uLnR5cGUgQHZhcntMb2NhdGlvblR5cGV9CitAZW5kIGV4YW1wbGUKKworVGhlIHJlcXVpcmVtZW50cyBvdmVyIHlvdXIgQHZhcntMb2NhdGlvblR5cGV9IGFyZToKK0BpdGVtaXplCitAaXRlbQoraXQgbXVzdCBiZSBjb3B5YWJsZTsKKworQGl0ZW0KK2luIG9yZGVyIHRvIGNvbXB1dGUgdGhlIChkZWZhdWx0KSB2YWx1ZSBvZiBAY29kZXtAQCR9IGluIGEgcmVkdWN0aW9uLCB0aGUKK3BhcnNlciBiYXNpY2FsbHkgcnVucworQGV4YW1wbGUKK0BAJC5iZWdpbiA9IEBAJDEuYmVnaW47CitAQCQuZW5kICAgPSBAQCRAdmFye059LmVuZDsgLy8gVGhlIGxvY2F0aW9uIG9mIGxhc3QgcmlnaHQtaGFuZCBzaWRlIHN5bWJvbC4KK0BlbmQgZXhhbXBsZQorQG5vaW5kZW50CitzbyB0aGVyZSBtdXN0IGJlIGNvcHlhYmxlIEBjb2Rle2JlZ2lufSBhbmQgQGNvZGV7ZW5kfSBtZW1iZXJzOworCitAaXRlbQorYWx0ZXJuYXRpdmVseSB5b3UgbWF5IHJlZGVmaW5lIHRoZSBjb21wdXRhdGlvbiBvZiB0aGUgZGVmYXVsdCBsb2NhdGlvbiwgaW4KK3doaWNoIGNhc2UgdGhlc2UgbWVtYmVycyBhcmUgbm90IHJlcXVpcmVkIChAcHhyZWZ7TG9jYXRpb24gRGVmYXVsdCBBY3Rpb259KTsKKworQGl0ZW0KK2lmIHRyYWNlcyBhcmUgZW5hYmxlZCwgdGhlbiB0aGVyZSBtdXN0IGV4aXN0IGFuIEBzYW1we3N0ZDo6b3N0cmVhbSYKKyAgb3BlcmF0b3I8PCAoc3RkOjpvc3RyZWFtJiBvLCBjb25zdCBAdmFye0xvY2F0aW9uVHlwZX0mIHMpfSBmdW5jdGlvbi4KK0BlbmQgaXRlbWl6ZQorCitAc3AgMQorCitJbiBwcm9ncmFtcyB3aXRoIHNldmVyYWwgQysrIHBhcnNlcnMsIHlvdSBtYXkgYWxzbyB1c2UgdGhlIEBjb2RleyVkZWZpbmV9Cit2YXJpYWJsZSBAY29kZXthcGkubG9jYXRpb24udHlwZX0gdG8gc2hhcmUgYSBjb21tb24gc2V0IG9mIGJ1aWx0LWluCitkZWZpbml0aW9ucyBmb3IgQGNvZGV7cG9zaXRpb259IGFuZCBAY29kZXtsb2NhdGlvbn0uICBGb3IgaW5zdGFuY2UsIG9uZQorcGFyc2VyIEBmaWxle21hc3Rlci9wYXJzZXIueXl9IG1pZ2h0IHVzZToKKworQGV4YW1wbGUKKyVkZWZpbmVzCislbG9jYXRpb25zCislZGVmaW5lIG5hbWVzcGFjZSAibWFzdGVyOjoiCitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50Cit0byBnZW5lcmF0ZSB0aGUgQGZpbGV7bWFzdGVyL3Bvc2l0aW9uLmhofSBhbmQgQGZpbGV7bWFzdGVyL2xvY2F0aW9uLmhofQorZmlsZXMsIHJldXNlZCBieSBvdGhlciBwYXJzZXJzIGFzIGZvbGxvd3M6CisKK0BleGFtcGxlCislZGVmaW5lIGFwaS5sb2NhdGlvbi50eXBlICJtYXN0ZXI6OmxvY2F0aW9uIgorJWNvZGUgcmVxdWlyZXMgQHsgI2luY2x1ZGUgPG1hc3Rlci9sb2NhdGlvbi5oaD4gQH0KK0BlbmQgZXhhbXBsZQorCitAbm9kZSBDKysgUGFyc2VyIEludGVyZmFjZQorQHN1YnNlY3Rpb24gQysrIFBhcnNlciBJbnRlcmZhY2UKK0BjIC0gZGVmaW5lIHBhcnNlcl9jbGFzc19uYW1lCitAYyAtIEN0b3IKK0BjIC0gcGFyc2UsIGVycm9yLCBzZXRfZGVidWdfbGV2ZWwsIGRlYnVnX2xldmVsLCBzZXRfZGVidWdfc3RyZWFtLAorQGMgICBkZWJ1Z19zdHJlYW0uCitAYyAtIFJlcG9ydGluZyBlcnJvcnMKKworVGhlIG91dHB1dCBmaWxlcyBAZmlsZXtAdmFye291dHB1dH0uaGh9IGFuZCBAZmlsZXtAdmFye291dHB1dH0uY2N9CitkZWNsYXJlIGFuZCBkZWZpbmUgdGhlIHBhcnNlciBjbGFzcyBpbiB0aGUgbmFtZXNwYWNlIEBjb2Rle3l5fS4gIFRoZQorY2xhc3MgbmFtZSBkZWZhdWx0cyB0byBAY29kZXtwYXJzZXJ9LCBidXQgbWF5IGJlIGNoYW5nZWQgdXNpbmcKK0BzYW1weyVkZWZpbmUgcGFyc2VyX2NsYXNzX25hbWUgIkB2YXJ7bmFtZX0ifS4gIFRoZSBpbnRlcmZhY2Ugb2YKK3RoaXMgY2xhc3MgaXMgZGV0YWlsZWQgYmVsb3cuICBJdCBjYW4gYmUgZXh0ZW5kZWQgdXNpbmcgdGhlCitAY29kZXslcGFyc2UtcGFyYW19IGZlYXR1cmU6IGl0cyBzZW1hbnRpY3MgaXMgc2xpZ2h0bHkgY2hhbmdlZCBzaW5jZQoraXQgZGVzY3JpYmVzIGFuIGFkZGl0aW9uYWwgbWVtYmVyIG9mIHRoZSBwYXJzZXIgY2xhc3MsIGFuZCBhbgorYWRkaXRpb25hbCBhcmd1bWVudCBmb3IgaXRzIGNvbnN0cnVjdG9yLgorCitAZGVmY3Yge1R5cGV9IHtwYXJzZXJ9IHtzZW1hbnRpY190eXBlfQorQGRlZmN2eCB7VHlwZX0ge3BhcnNlcn0ge2xvY2F0aW9uX3R5cGV9CitUaGUgdHlwZXMgZm9yIHNlbWFudGljcyB2YWx1ZSBhbmQgbG9jYXRpb25zLgorQGVuZCBkZWZjdgorCitAZGVmY3Yge1R5cGV9IHtwYXJzZXJ9IHt0b2tlbn0KK0Egc3RydWN0dXJlIHRoYXQgY29udGFpbnMgKG9ubHkpIHRoZSBAY29kZXt5eXRva2VudHlwZX0gZW51bWVyYXRpb24sIHdoaWNoCitkZWZpbmVzIHRoZSB0b2tlbnMuICBUbyByZWZlciB0byB0aGUgdG9rZW4gQGNvZGV7Rk9PfSwKK3VzZSBAY29kZXt5eTo6cGFyc2VyOjp0b2tlbjo6Rk9PfS4gIFRoZSBzY2FubmVyIGNhbiB1c2UKK0BzYW1we3R5cGVkZWYgeXk6OnBhcnNlcjo6dG9rZW4gdG9rZW47fSB0byBgYGltcG9ydCcnIHRoZSB0b2tlbiBlbnVtZXJhdGlvbgorKEBweHJlZntDYWxjKysgU2Nhbm5lcn0pLgorQGVuZCBkZWZjdgorCitAZGVmdHlwZW1ldGhvZCB7cGFyc2VyfSB7fSBwYXJzZXIgKEB2YXJ7dHlwZTF9IEB2YXJ7YXJnMX0sIC4uLikKK0J1aWxkIGEgbmV3IHBhcnNlciBvYmplY3QuICBUaGVyZSBhcmUgbm8gYXJndW1lbnRzIGJ5IGRlZmF1bHQsIHVubGVzcworQHNhbXB7JXBhcnNlLXBhcmFtIEB7QHZhcnt0eXBlMX0gQHZhcnthcmcxfUB9fSB3YXMgdXNlZC4KK0BlbmQgZGVmdHlwZW1ldGhvZAorCitAZGVmdHlwZW1ldGhvZCB7cGFyc2VyfSB7aW50fSBwYXJzZSAoKQorUnVuIHRoZSBzeW50YWN0aWMgYW5hbHlzaXMsIGFuZCByZXR1cm4gMCBvbiBzdWNjZXNzLCAxIG90aGVyd2lzZS4KKworQGNpbmRleCBleGNlcHRpb25zCitUaGUgd2hvbGUgZnVuY3Rpb24gaXMgd3JhcHBlZCBpbiBhIEBjb2Rle3RyeX0vQGNvZGV7Y2F0Y2h9IGJsb2NrLCBzbyB0aGF0Cit3aGVuIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24sIHRoZSBAY29kZXslZGVzdHJ1Y3Rvcn1zIGFyZSBjYWxsZWQgdG8gcmVsZWFzZQordGhlIGxvb2thaGVhZCBzeW1ib2wsIGFuZCB0aGUgc3ltYm9scyBwdXNoZWQgb24gdGhlIHN0YWNrLgorQGVuZCBkZWZ0eXBlbWV0aG9kCisKK0BkZWZ0eXBlbWV0aG9kIHtwYXJzZXJ9IHtzdGQ6Om9zdHJlYW0mfSBkZWJ1Z19zdHJlYW0gKCkKK0BkZWZ0eXBlbWV0aG9keCB7cGFyc2VyfSB7dm9pZH0gc2V0X2RlYnVnX3N0cmVhbSAoc3RkOjpvc3RyZWFtJiBAdmFye299KQorR2V0IG9yIHNldCB0aGUgc3RyZWFtIHVzZWQgZm9yIHRyYWNpbmcgdGhlIHBhcnNpbmcuICBJdCBkZWZhdWx0cyB0bworQGNvZGV7c3RkOjpjZXJyfS4KK0BlbmQgZGVmdHlwZW1ldGhvZAorCitAZGVmdHlwZW1ldGhvZCB7cGFyc2VyfSB7ZGVidWdfbGV2ZWxfdHlwZX0gZGVidWdfbGV2ZWwgKCkKK0BkZWZ0eXBlbWV0aG9keCB7cGFyc2VyfSB7dm9pZH0gc2V0X2RlYnVnX2xldmVsIChkZWJ1Z19sZXZlbCBAdmFye2x9KQorR2V0IG9yIHNldCB0aGUgdHJhY2luZyBsZXZlbC4gIEN1cnJlbnRseSBpdHMgdmFsdWUgaXMgZWl0aGVyIDAsIG5vIHRyYWNlLAorb3Igbm9uemVybywgZnVsbCB0cmFjaW5nLgorQGVuZCBkZWZ0eXBlbWV0aG9kCisKK0BkZWZ0eXBlbWV0aG9kIHtwYXJzZXJ9IHt2b2lkfSBlcnJvciAoY29uc3QgbG9jYXRpb25fdHlwZSYgQHZhcntsfSwgY29uc3Qgc3RkOjpzdHJpbmcmIEB2YXJ7bX0pCitUaGUgZGVmaW5pdGlvbiBmb3IgdGhpcyBtZW1iZXIgZnVuY3Rpb24gbXVzdCBiZSBzdXBwbGllZCBieSB0aGUgdXNlcjoKK3RoZSBwYXJzZXIgdXNlcyBpdCB0byByZXBvcnQgYSBwYXJzZXIgZXJyb3Igb2NjdXJyaW5nIGF0IEB2YXJ7bH0sCitkZXNjcmliZWQgYnkgQHZhcnttfS4KK0BlbmQgZGVmdHlwZW1ldGhvZAorCisKK0Bub2RlIEMrKyBTY2FubmVyIEludGVyZmFjZQorQHN1YnNlY3Rpb24gQysrIFNjYW5uZXIgSW50ZXJmYWNlCitAYyAtIHByZWZpeCBmb3IgeXlsZXguCitAYyAtIFB1cmUgaW50ZXJmYWNlIHRvIHl5bGV4CitAYyAtICVsZXgtcGFyYW0KKworVGhlIHBhcnNlciBpbnZva2VzIHRoZSBzY2FubmVyIGJ5IGNhbGxpbmcgQGNvZGV7eXlsZXh9LiAgQ29udHJhcnkgdG8gQworcGFyc2VycywgQysrIHBhcnNlcnMgYXJlIGFsd2F5cyBwdXJlOiB0aGVyZSBpcyBubyBwb2ludCBpbiB1c2luZyB0aGUKK0Bjb2RleyVkZWZpbmUgYXBpLnB1cmUgZnVsbH0gZGlyZWN0aXZlLiAgVGhlcmVmb3JlIHRoZSBpbnRlcmZhY2UgaXMgYXMgZm9sbG93cy4KKworQGRlZnR5cGVtZXRob2Qge3BhcnNlcn0ge2ludH0geXlsZXggKHNlbWFudGljX3R5cGUqIEB2YXJ7eXlsdmFsfSwgbG9jYXRpb25fdHlwZSogQHZhcnt5eWxsb2N9LCBAdmFye3R5cGUxfSBAdmFye2FyZzF9LCAuLi4pCitSZXR1cm4gdGhlIG5leHQgdG9rZW4uICBJdHMgdHlwZSBpcyB0aGUgcmV0dXJuIHZhbHVlLCBpdHMgc2VtYW50aWMKK3ZhbHVlIGFuZCBsb2NhdGlvbiBiZWluZyBAdmFye3l5bHZhbH0gYW5kIEB2YXJ7eXlsbG9jfS4gIEludm9jYXRpb25zIG9mCitAc2FtcHslbGV4LXBhcmFtIEB7QHZhcnt0eXBlMX0gQHZhcnthcmcxfUB9fSB5aWVsZCBhZGRpdGlvbmFsIGFyZ3VtZW50cy4KK0BlbmQgZGVmdHlwZW1ldGhvZAorCisKK0Bub2RlIEEgQ29tcGxldGUgQysrIEV4YW1wbGUKK0BzdWJzZWN0aW9uIEEgQ29tcGxldGUgQysrIEV4YW1wbGUKKworVGhpcyBzZWN0aW9uIGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIGEgQysrIHBhcnNlciB3aXRoIGEgc2ltcGxlIGJ1dAorY29tcGxldGUgZXhhbXBsZS4gIFRoaXMgZXhhbXBsZSBzaG91bGQgYmUgYXZhaWxhYmxlIG9uIHlvdXIgc3lzdGVtLAorcmVhZHkgdG8gY29tcGlsZSwgaW4gdGhlIGRpcmVjdG9yeSBAZGZuey4uL2Jpc29uL2V4YW1wbGVzL2NhbGMrK30uICBJdAorZm9jdXNlcyBvbiB0aGUgdXNlIG9mIEJpc29uLCB0aGVyZWZvcmUgdGhlIGRlc2lnbiBvZiB0aGUgdmFyaW91cyBDKysKK2NsYXNzZXMgaXMgdmVyeSBuYWl2ZTogbm8gYWNjZXNzb3JzLCBubyBlbmNhcHN1bGF0aW9uIG9mIG1lbWJlcnMgZXRjLgorV2Ugd2lsbCB1c2UgYSBMZXggc2Nhbm5lciwgYW5kIG1vcmUgcHJlY2lzZWx5LCBhIEZsZXggc2Nhbm5lciwgdG8KK2RlbW9uc3RyYXRlIHRoZSB2YXJpb3VzIGludGVyYWN0aW9uLiAgQSBoYW5kIHdyaXR0ZW4gc2Nhbm5lciBpcworYWN0dWFsbHkgZWFzaWVyIHRvIGludGVyZmFjZSB3aXRoLgorCitAbWVudQorKiBDYWxjKysgLS0tIEMrKyBDYWxjdWxhdG9yOjogICBUaGUgc3BlY2lmaWNhdGlvbnMKKyogQ2FsYysrIFBhcnNpbmcgRHJpdmVyOjogICAgICAgQW4gYWN0aXZlIHBhcnNpbmcgY29udGV4dAorKiBDYWxjKysgUGFyc2VyOjogICAgICAgICAgICAgICBBIHBhcnNlciBjbGFzcworKiBDYWxjKysgU2Nhbm5lcjo6ICAgICAgICAgICAgICBBIHB1cmUgQysrIEZsZXggc2Nhbm5lcgorKiBDYWxjKysgVG9wIExldmVsOjogICAgICAgICAgICBDb25kdWN0aW5nIHRoZSBiYW5kCitAZW5kIG1lbnUKKworQG5vZGUgQ2FsYysrIC0tLSBDKysgQ2FsY3VsYXRvcgorQHN1YnN1YnNlY3Rpb24gQ2FsYysrIC0tLSBDKysgQ2FsY3VsYXRvcgorCitPZiBjb3Vyc2UgdGhlIGdyYW1tYXIgaXMgZGVkaWNhdGVkIHRvIGFyaXRobWV0aWNzLCBhIHNpbmdsZQorZXhwcmVzc2lvbiwgcG9zc2libHkgcHJlY2VkZWQgYnkgdmFyaWFibGUgYXNzaWdubWVudHMuICBBbgorZW52aXJvbm1lbnQgY29udGFpbmluZyBwb3NzaWJseSBwcmVkZWZpbmVkIHZhcmlhYmxlcyBzdWNoIGFzCitAY29kZXtvbmV9IGFuZCBAY29kZXt0d299LCBpcyBleGNoYW5nZWQgd2l0aCB0aGUgcGFyc2VyLiAgQW4gZXhhbXBsZQorb2YgdmFsaWQgaW5wdXQgZm9sbG93cy4KKworQGV4YW1wbGUKK3RocmVlIDo9IDMKK3NldmVuIDo9IG9uZSArIHR3byAqIHRocmVlCitzZXZlbiAqIHNldmVuCitAZW5kIGV4YW1wbGUKKworQG5vZGUgQ2FsYysrIFBhcnNpbmcgRHJpdmVyCitAc3Vic3Vic2VjdGlvbiBDYWxjKysgUGFyc2luZyBEcml2ZXIKK0BjIC0gQW4gZW52CitAYyAtIEEgcGxhY2UgdG8gc3RvcmUgZXJyb3IgbWVzc2FnZXMKK0BjIC0gQSBwbGFjZSBmb3IgdGhlIHJlc3VsdAorCitUbyBzdXBwb3J0IGEgcHVyZSBpbnRlcmZhY2Ugd2l0aCB0aGUgcGFyc2VyIChhbmQgdGhlIHNjYW5uZXIpIHRoZQordGVjaG5pcXVlIG9mIHRoZSBgYHBhcnNpbmcgY29udGV4dCcnIGlzIGNvbnZlbmllbnQ6IGEgc3RydWN0dXJlCitjb250YWluaW5nIGFsbCB0aGUgZGF0YSB0byBleGNoYW5nZS4gIFNpbmNlLCBpbiBhZGRpdGlvbiB0byBzaW1wbHkKK2xhdW5jaCB0aGUgcGFyc2luZywgdGhlcmUgYXJlIHNldmVyYWwgYXV4aWxpYXJ5IHRhc2tzIHRvIGV4ZWN1dGUgKG9wZW4KK3RoZSBmaWxlIGZvciBwYXJzaW5nLCBpbnN0YW50aWF0ZSB0aGUgcGFyc2VyIGV0Yy4pLCB3ZSByZWNvbW1lbmQKK3RyYW5zZm9ybWluZyB0aGUgc2ltcGxlIHBhcnNpbmcgY29udGV4dCBzdHJ1Y3R1cmUgaW50byBhIGZ1bGx5IGJsb3duCitAZGZue3BhcnNpbmcgZHJpdmVyfSBjbGFzcy4KKworVGhlIGRlY2xhcmF0aW9uIG9mIHRoaXMgZHJpdmVyIGNsYXNzLCBAZmlsZXtjYWxjKystZHJpdmVyLmhofSwgaXMgYXMKK2ZvbGxvd3MuICBUaGUgZmlyc3QgcGFydCBpbmNsdWRlcyB0aGUgQ1BQIGd1YXJkIGFuZCBpbXBvcnRzIHRoZQorcmVxdWlyZWQgc3RhbmRhcmQgbGlicmFyeSBjb21wb25lbnRzLCBhbmQgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBwYXJzZXIKK2NsYXNzLgorCitAY29tbWVudCBmaWxlOiBjYWxjKystZHJpdmVyLmhoCitAZXhhbXBsZQorI2lmbmRlZiBDQUxDWFhfRFJJVkVSX0hICisjIGRlZmluZSBDQUxDWFhfRFJJVkVSX0hICisjIGluY2x1ZGUgPHN0cmluZz4KKyMgaW5jbHVkZSA8bWFwPgorIyBpbmNsdWRlICJjYWxjKystcGFyc2VyLmhoIgorQGVuZCBleGFtcGxlCisKKworQG5vaW5kZW50CitUaGVuIGNvbWVzIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgc2Nhbm5pbmcgZnVuY3Rpb24uICBGbGV4IGV4cGVjdHMKK3RoZSBzaWduYXR1cmUgb2YgQGNvZGV7eXlsZXh9IHRvIGJlIGRlZmluZWQgaW4gdGhlIG1hY3JvCitAY29kZXtZWV9ERUNMfSwgYW5kIHRoZSBDKysgcGFyc2VyIGV4cGVjdHMgaXQgdG8gYmUgZGVjbGFyZWQuICBXZSBjYW4KK2ZhY3RvciBib3RoIGFzIGZvbGxvd3MuCisKK0Bjb21tZW50IGZpbGU6IGNhbGMrKy1kcml2ZXIuaGgKK0BleGFtcGxlCisvLyBUZWxsIEZsZXggdGhlIGxleGVyJ3MgcHJvdG90eXBlIC4uLgorIyBkZWZpbmUgWVlfREVDTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHl5OjpjYWxjeHhfcGFyc2VyOjp0b2tlbl90eXBlICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeXlsZXggKHl5OjpjYWxjeHhfcGFyc2VyOjpzZW1hbnRpY190eXBlKiB5eWx2YWwsICAgICAgXAorICAgICAgICAgeXk6OmNhbGN4eF9wYXJzZXI6OmxvY2F0aW9uX3R5cGUqIHl5bGxvYywgICAgICBcCisgICAgICAgICBjYWxjeHhfZHJpdmVyJiBkcml2ZXIpCisvLyAuLi4gYW5kIGRlY2xhcmUgaXQgZm9yIHRoZSBwYXJzZXIncyBzYWtlLgorWVlfREVDTDsKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK1RoZSBAY29kZXtjYWxjeHhfZHJpdmVyfSBjbGFzcyBpcyB0aGVuIGRlY2xhcmVkIHdpdGggaXRzIG1vc3Qgb2J2aW91cworbWVtYmVycy4KKworQGNvbW1lbnQgZmlsZTogY2FsYysrLWRyaXZlci5oaAorQGV4YW1wbGUKKy8vIENvbmR1Y3RpbmcgdGhlIHdob2xlIHNjYW5uaW5nIGFuZCBwYXJzaW5nIG9mIENhbGMrKy4KK2NsYXNzIGNhbGN4eF9kcml2ZXIKK0B7CitwdWJsaWM6CisgIGNhbGN4eF9kcml2ZXIgKCk7CisgIHZpcnR1YWwgfmNhbGN4eF9kcml2ZXIgKCk7CisKKyAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIGludD4gdmFyaWFibGVzOworCisgIGludCByZXN1bHQ7CitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitUbyBlbmNhcHN1bGF0ZSB0aGUgY29vcmRpbmF0aW9uIHdpdGggdGhlIEZsZXggc2Nhbm5lciwgaXQgaXMgdXNlZnVsIHRvCitoYXZlIHR3byBtZW1iZXJzIGZ1bmN0aW9uIHRvIG9wZW4gYW5kIGNsb3NlIHRoZSBzY2FubmluZyBwaGFzZS4KKworQGNvbW1lbnQgZmlsZTogY2FsYysrLWRyaXZlci5oaAorQGV4YW1wbGUKKyAgLy8gSGFuZGxpbmcgdGhlIHNjYW5uZXIuCisgIHZvaWQgc2Nhbl9iZWdpbiAoKTsKKyAgdm9pZCBzY2FuX2VuZCAoKTsKKyAgYm9vbCB0cmFjZV9zY2FubmluZzsKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK1NpbWlsYXJseSBmb3IgdGhlIHBhcnNlciBpdHNlbGYuCisKK0Bjb21tZW50IGZpbGU6IGNhbGMrKy1kcml2ZXIuaGgKK0BleGFtcGxlCisgIC8vIFJ1biB0aGUgcGFyc2VyLiAgUmV0dXJuIDAgb24gc3VjY2Vzcy4KKyAgaW50IHBhcnNlIChjb25zdCBzdGQ6OnN0cmluZyYgZik7CisgIHN0ZDo6c3RyaW5nIGZpbGU7CisgIGJvb2wgdHJhY2VfcGFyc2luZzsKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK1RvIGRlbW9uc3RyYXRlIHB1cmUgaGFuZGxpbmcgb2YgcGFyc2UgZXJyb3JzLCBpbnN0ZWFkIG9mIHNpbXBseQorZHVtcGluZyB0aGVtIG9uIHRoZSBzdGFuZGFyZCBlcnJvciBvdXRwdXQsIHdlIHdpbGwgcGFzcyB0aGVtIHRvIHRoZQorY29tcGlsZXIgZHJpdmVyIHVzaW5nIHRoZSBmb2xsb3dpbmcgdHdvIG1lbWJlciBmdW5jdGlvbnMuICBGaW5hbGx5LCB3ZQorY2xvc2UgdGhlIGNsYXNzIGRlY2xhcmF0aW9uIGFuZCBDUFAgZ3VhcmQuCisKK0Bjb21tZW50IGZpbGU6IGNhbGMrKy1kcml2ZXIuaGgKK0BleGFtcGxlCisgIC8vIEVycm9yIGhhbmRsaW5nLgorICB2b2lkIGVycm9yIChjb25zdCB5eTo6bG9jYXRpb24mIGwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtKTsKKyAgdm9pZCBlcnJvciAoY29uc3Qgc3RkOjpzdHJpbmcmIG0pOworQH07CisjZW5kaWYgLy8gISBDQUxDWFhfRFJJVkVSX0hICitAZW5kIGV4YW1wbGUKKworVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBkcml2ZXIgaXMgc3RyYWlnaHRmb3J3YXJkLiAgVGhlIEBjb2Rle3BhcnNlfQorbWVtYmVyIGZ1bmN0aW9uIGRlc2VydmVzIHNvbWUgYXR0ZW50aW9uLiAgVGhlIEBjb2Rle2Vycm9yfSBmdW5jdGlvbnMKK2FyZSBzaW1wbGUgc3R1YnMsIHRoZXkgc2hvdWxkIGFjdHVhbGx5IHJlZ2lzdGVyIHRoZSBsb2NhdGVkIGVycm9yCittZXNzYWdlcyBhbmQgc2V0IGVycm9yIHN0YXRlLgorCitAY29tbWVudCBmaWxlOiBjYWxjKystZHJpdmVyLmNjCitAZXhhbXBsZQorI2luY2x1ZGUgImNhbGMrKy1kcml2ZXIuaGgiCisjaW5jbHVkZSAiY2FsYysrLXBhcnNlci5oaCIKKworY2FsY3h4X2RyaXZlcjo6Y2FsY3h4X2RyaXZlciAoKQorICA6IHRyYWNlX3NjYW5uaW5nIChmYWxzZSksIHRyYWNlX3BhcnNpbmcgKGZhbHNlKQorQHsKKyAgdmFyaWFibGVzWyJvbmUiXSA9IDE7CisgIHZhcmlhYmxlc1sidHdvIl0gPSAyOworQH0KKworY2FsY3h4X2RyaXZlcjo6fmNhbGN4eF9kcml2ZXIgKCkKK0B7CitAfQorCitpbnQKK2NhbGN4eF9kcml2ZXI6OnBhcnNlIChjb25zdCBzdGQ6OnN0cmluZyAmZikKK0B7CisgIGZpbGUgPSBmOworICBzY2FuX2JlZ2luICgpOworICB5eTo6Y2FsY3h4X3BhcnNlciBwYXJzZXIgKCp0aGlzKTsKKyAgcGFyc2VyLnNldF9kZWJ1Z19sZXZlbCAodHJhY2VfcGFyc2luZyk7CisgIGludCByZXMgPSBwYXJzZXIucGFyc2UgKCk7CisgIHNjYW5fZW5kICgpOworICByZXR1cm4gcmVzOworQH0KKwordm9pZAorY2FsY3h4X2RyaXZlcjo6ZXJyb3IgKGNvbnN0IHl5Ojpsb2NhdGlvbiYgbCwgY29uc3Qgc3RkOjpzdHJpbmcmIG0pCitAeworICBzdGQ6OmNlcnIgPDwgbCA8PCAiOiAiIDw8IG0gPDwgc3RkOjplbmRsOworQH0KKwordm9pZAorY2FsY3h4X2RyaXZlcjo6ZXJyb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBtKQorQHsKKyAgc3RkOjpjZXJyIDw8IG0gPDwgc3RkOjplbmRsOworQH0KK0BlbmQgZXhhbXBsZQorCitAbm9kZSBDYWxjKysgUGFyc2VyCitAc3Vic3Vic2VjdGlvbiBDYWxjKysgUGFyc2VyCisKK1RoZSBncmFtbWFyIGZpbGUgQGZpbGV7Y2FsYysrLXBhcnNlci55eX0gc3RhcnRzIGJ5IGFza2luZyBmb3IgdGhlIEMrKworZGV0ZXJtaW5pc3RpYyBwYXJzZXIgc2tlbGV0b24sIHRoZSBjcmVhdGlvbiBvZiB0aGUgcGFyc2VyIGhlYWRlciBmaWxlLAorYW5kIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgcGFyc2VyIGNsYXNzLiAgQmVjYXVzZSB0aGUgQysrIHNrZWxldG9uCitjaGFuZ2VkIHNldmVyYWwgdGltZXMsIGl0IGlzIHNhZmVyIHRvIHJlcXVpcmUgdGhlIHZlcnNpb24geW91IGRlc2lnbmVkCit0aGUgZ3JhbW1hciBmb3IuCisKK0Bjb21tZW50IGZpbGU6IGNhbGMrKy1wYXJzZXIueXkKK0BleGFtcGxlCislc2tlbGV0b24gImxhbHIxLmNjIiAvKiAtKi0gQysrIC0qLSAqLworJXJlcXVpcmUgIkB2YWx1ZXtWRVJTSU9OfSIKKyVkZWZpbmVzCislZGVmaW5lIHBhcnNlcl9jbGFzc19uYW1lICJjYWxjeHhfcGFyc2VyIgorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorQGZpbmRleCAlY29kZSByZXF1aXJlcworVGhlbiBjb21lIHRoZSBkZWNsYXJhdGlvbnMvaW5jbHVzaW9ucyBuZWVkZWQgdG8gZGVmaW5lIHRoZQorQGNvZGV7JXVuaW9ufS4gIEJlY2F1c2UgdGhlIHBhcnNlciB1c2VzIHRoZSBwYXJzaW5nIGRyaXZlciBhbmQKK3JlY2lwcm9jYWxseSwgYm90aCBjYW5ub3QgaW5jbHVkZSB0aGUgaGVhZGVyIG9mIHRoZSBvdGhlci4gIEJlY2F1c2UgdGhlCitkcml2ZXIncyBoZWFkZXIgbmVlZHMgZGV0YWlsZWQga25vd2xlZGdlIGFib3V0IHRoZSBwYXJzZXIgY2xhc3MgKGluCitwYXJ0aWN1bGFyIGl0cyBpbm5lciB0eXBlcyksIGl0IGlzIHRoZSBwYXJzZXIncyBoZWFkZXIgd2hpY2ggd2lsbCBzaW1wbHkKK3VzZSBhIGZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIGRyaXZlci4KK0B4cmVmeyVjb2RlIFN1bW1hcnl9LgorCitAY29tbWVudCBmaWxlOiBjYWxjKystcGFyc2VyLnl5CitAZXhhbXBsZQorJWNvZGUgcmVxdWlyZXMgQHsKKyMgaW5jbHVkZSA8c3RyaW5nPgorY2xhc3MgY2FsY3h4X2RyaXZlcjsKK0B9CitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitUaGUgZHJpdmVyIGlzIHBhc3NlZCBieSByZWZlcmVuY2UgdG8gdGhlIHBhcnNlciBhbmQgdG8gdGhlIHNjYW5uZXIuCitUaGlzIHByb3ZpZGVzIGEgc2ltcGxlIGJ1dCBlZmZlY3RpdmUgcHVyZSBpbnRlcmZhY2UsIG5vdCByZWx5aW5nIG9uCitnbG9iYWwgdmFyaWFibGVzLgorCitAY29tbWVudCBmaWxlOiBjYWxjKystcGFyc2VyLnl5CitAZXhhbXBsZQorLy8gVGhlIHBhcnNpbmcgY29udGV4dC4KKyVwYXJzZS1wYXJhbSBAeyBjYWxjeHhfZHJpdmVyJiBkcml2ZXIgQH0KKyVsZXgtcGFyYW0gICBAeyBjYWxjeHhfZHJpdmVyJiBkcml2ZXIgQH0KK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK1RoZW4gd2UgcmVxdWVzdCB0aGUgbG9jYXRpb24gdHJhY2tpbmcgZmVhdHVyZSwgYW5kIGluaXRpYWxpemUgdGhlCitmaXJzdCBsb2NhdGlvbidzIGZpbGUgbmFtZS4gIEFmdGVyd2FyZCBuZXcgbG9jYXRpb25zIGFyZSBjb21wdXRlZAorcmVsYXRpdmVseSB0byB0aGUgcHJldmlvdXMgbG9jYXRpb25zOiB0aGUgZmlsZSBuYW1lIHdpbGwgYmUKK2F1dG9tYXRpY2FsbHkgcHJvcGFnYXRlZC4KKworQGNvbW1lbnQgZmlsZTogY2FsYysrLXBhcnNlci55eQorQGV4YW1wbGUKKyVsb2NhdGlvbnMKKyVpbml0aWFsLWFjdGlvbgorQHsKKyAgLy8gSW5pdGlhbGl6ZSB0aGUgaW5pdGlhbCBsb2NhdGlvbi4KKyAgQEAkLmJlZ2luLmZpbGVuYW1lID0gQEAkLmVuZC5maWxlbmFtZSA9ICZkcml2ZXIuZmlsZTsKK0B9OworQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorVXNlIHRoZSB0d28gZm9sbG93aW5nIGRpcmVjdGl2ZXMgdG8gZW5hYmxlIHBhcnNlciB0cmFjaW5nIGFuZCB2ZXJib3NlIGVycm9yCittZXNzYWdlcy4gIEhvd2V2ZXIsIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMgY2FuIGNvbnRhaW4gaW5jb3JyZWN0IGluZm9ybWF0aW9uCisoQHB4cmVme0xBQ30pLgorCitAY29tbWVudCBmaWxlOiBjYWxjKystcGFyc2VyLnl5CitAZXhhbXBsZQorJWRlYnVnCislZXJyb3ItdmVyYm9zZQorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorU2VtYW50aWMgdmFsdWVzIGNhbm5vdCB1c2UgYGByZWFsJycgb2JqZWN0cywgYnV0IG9ubHkgcG9pbnRlcnMgdG8KK3RoZW0uCisKK0Bjb21tZW50IGZpbGU6IGNhbGMrKy1wYXJzZXIueXkKK0BleGFtcGxlCisvLyBTeW1ib2xzLgorJXVuaW9uCitAeworICBpbnQgICAgICAgICAgaXZhbDsKKyAgc3RkOjpzdHJpbmcgKnN2YWw7CitAfTsKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK0BmaW5kZXggJWNvZGUKK1RoZSBjb2RlIGJldHdlZW4gQHNhbXB7JWNvZGUgQHt9IGFuZCBAc2FtcHtAfX0gaXMgb3V0cHV0IGluIHRoZQorQGZpbGV7Ki5jY30gZmlsZTsgaXQgbmVlZHMgZGV0YWlsZWQga25vd2xlZGdlIGFib3V0IHRoZSBkcml2ZXIuCisKK0Bjb21tZW50IGZpbGU6IGNhbGMrKy1wYXJzZXIueXkKK0BleGFtcGxlCislY29kZSBAeworIyBpbmNsdWRlICJjYWxjKystZHJpdmVyLmhoIgorQH0KK0BlbmQgZXhhbXBsZQorCisKK0Bub2luZGVudAorVGhlIHRva2VuIG51bWJlcmVkIGFzIDAgY29ycmVzcG9uZHMgdG8gZW5kIG9mIGZpbGU7IHRoZSBmb2xsb3dpbmcgbGluZQorYWxsb3dzIGZvciBuaWNlciBlcnJvciBtZXNzYWdlcyByZWZlcnJpbmcgdG8gYGBlbmQgb2YgZmlsZScnIGluc3RlYWQKK29mIGBgJGVuZCcnLiAgU2ltaWxhcmx5IHVzZXIgZnJpZW5kbHkgbmFtZWQgYXJlIHByb3ZpZGVkIGZvciBlYWNoCitzeW1ib2wuICBOb3RlIHRoYXQgdGhlIHRva2VucyBuYW1lcyBhcmUgcHJlZml4ZWQgYnkgQGNvZGV7VE9LRU5ffSB0bworYXZvaWQgbmFtZSBjbGFzaGVzLgorCitAY29tbWVudCBmaWxlOiBjYWxjKystcGFyc2VyLnl5CitAZXhhbXBsZQorJXRva2VuICAgICAgICBFTkQgICAgICAwICJlbmQgb2YgZmlsZSIKKyV0b2tlbiAgICAgICAgQVNTSUdOICAgICAiOj0iCisldG9rZW4gPHN2YWw+IElERU5USUZJRVIgImlkZW50aWZpZXIiCisldG9rZW4gPGl2YWw+IE5VTUJFUiAgICAgIm51bWJlciIKKyV0eXBlICA8aXZhbD4gZXhwCitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitUbyBlbmFibGUgbWVtb3J5IGRlYWxsb2NhdGlvbiBkdXJpbmcgZXJyb3IgcmVjb3ZlcnksIHVzZQorQGNvZGV7JWRlc3RydWN0b3J9LgorCitAYyBGSVhNRTogRG9jdW1lbnQgJXByaW50ZXIsIGFuZCBtZW50aW9uIHRoYXQgaXQgdGFrZXMgYSBicmFjZWQtY29kZSBvcGVyYW5kLgorQGNvbW1lbnQgZmlsZTogY2FsYysrLXBhcnNlci55eQorQGV4YW1wbGUKKyVwcmludGVyICAgIEB7IHl5b3V0cHV0IDw8ICokJDsgQH0gImlkZW50aWZpZXIiCislZGVzdHJ1Y3RvciBAeyBkZWxldGUgJCQ7IEB9ICJpZGVudGlmaWVyIgorCislcHJpbnRlciAgICBAeyB5eW91dHB1dCA8PCAkJDsgQH0gPGl2YWw+CitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitUaGUgZ3JhbW1hciBpdHNlbGYgaXMgc3RyYWlnaHRmb3J3YXJkLgorCitAY29tbWVudCBmaWxlOiBjYWxjKystcGFyc2VyLnl5CitAZXhhbXBsZQorJSUKKyVzdGFydCB1bml0OwordW5pdDogYXNzaWdubWVudHMgZXhwICBAeyBkcml2ZXIucmVzdWx0ID0gJDI7IEB9OworCithc3NpZ25tZW50czoKKyAgLyogTm90aGluZy4gICovICAgICAgICBAe0B9Cit8IGFzc2lnbm1lbnRzIGFzc2lnbm1lbnQgQHtAfTsKKworYXNzaWdubWVudDoKKyAgICAgImlkZW50aWZpZXIiICI6PSIgZXhwCisgICAgICAgQHsgZHJpdmVyLnZhcmlhYmxlc1sqJDFdID0gJDM7IGRlbGV0ZSAkMTsgQH07CisKKyVsZWZ0ICcrJyAnLSc7CislbGVmdCAnKicgJy8nOworZXhwOiBleHAgJysnIGV4cCAgIEB7ICQkID0gJDEgKyAkMzsgQH0KKyAgIHwgZXhwICctJyBleHAgICBAeyAkJCA9ICQxIC0gJDM7IEB9CisgICB8IGV4cCAnKicgZXhwICAgQHsgJCQgPSAkMSAqICQzOyBAfQorICAgfCBleHAgJy8nIGV4cCAgIEB7ICQkID0gJDEgLyAkMzsgQH0KKyAgIHwgImlkZW50aWZpZXIiICBAeyAkJCA9IGRyaXZlci52YXJpYWJsZXNbKiQxXTsgZGVsZXRlICQxOyBAfQorICAgfCAibnVtYmVyIiAgICAgIEB7ICQkID0gJDE7IEB9OworJSUKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK0ZpbmFsbHkgdGhlIEBjb2Rle2Vycm9yfSBtZW1iZXIgZnVuY3Rpb24gcmVnaXN0ZXJzIHRoZSBlcnJvcnMgdG8gdGhlCitkcml2ZXIuCisKK0Bjb21tZW50IGZpbGU6IGNhbGMrKy1wYXJzZXIueXkKK0BleGFtcGxlCit2b2lkCit5eTo6Y2FsY3h4X3BhcnNlcjo6ZXJyb3IgKGNvbnN0IHl5OjpjYWxjeHhfcGFyc2VyOjpsb2NhdGlvbl90eXBlJiBsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbSkKK0B7CisgIGRyaXZlci5lcnJvciAobCwgbSk7CitAfQorQGVuZCBleGFtcGxlCisKK0Bub2RlIENhbGMrKyBTY2FubmVyCitAc3Vic3Vic2VjdGlvbiBDYWxjKysgU2Nhbm5lcgorCitUaGUgRmxleCBzY2FubmVyIGZpcnN0IGluY2x1ZGVzIHRoZSBkcml2ZXIgZGVjbGFyYXRpb24sIHRoZW4gdGhlCitwYXJzZXIncyB0byBnZXQgdGhlIHNldCBvZiBkZWZpbmVkIHRva2Vucy4KKworQGNvbW1lbnQgZmlsZTogY2FsYysrLXNjYW5uZXIubGwKK0BleGFtcGxlCislQHsgLyogLSotIEMrKyAtKi0gKi8KKyMgaW5jbHVkZSA8Y3N0ZGxpYj4KKyMgaW5jbHVkZSA8Y2Vycm5vPgorIyBpbmNsdWRlIDxjbGltaXRzPgorIyBpbmNsdWRlIDxzdHJpbmc+CisjIGluY2x1ZGUgImNhbGMrKy1kcml2ZXIuaGgiCisjIGluY2x1ZGUgImNhbGMrKy1wYXJzZXIuaGgiCisKKy8qIFdvcmsgYXJvdW5kIGFuIGluY29tcGF0aWJpbGl0eSBpbiBmbGV4IChhdCBsZWFzdCB2ZXJzaW9ucworICAgMi41LjMxIHRocm91Z2ggMi41LjMzKTogaXQgZ2VuZXJhdGVzIGNvZGUgdGhhdCBkb2VzCisgICBub3QgY29uZm9ybSB0byBDODkuICBTZWUgRGViaWFuIGJ1ZyAzMzMyMzEKKyAgIDxodHRwOi8vYnVncy5kZWJpYW4ub3JnL2NnaS1iaW4vYnVncmVwb3J0LmNnaT9idWc9MzMzMjMxPi4gICovCisjIHVuZGVmIHl5d3JhcAorIyBkZWZpbmUgeXl3cmFwKCkgMQorCisvKiBCeSBkZWZhdWx0IHl5bGV4IHJldHVybnMgaW50LCB3ZSB1c2UgdG9rZW5fdHlwZS4KKyAgIFVuZm9ydHVuYXRlbHkgeXl0ZXJtaW5hdGUgYnkgZGVmYXVsdCByZXR1cm5zIDAsIHdoaWNoIGlzCisgICBub3Qgb2YgdG9rZW5fdHlwZS4gICovCisjZGVmaW5lIHl5dGVybWluYXRlKCkgcmV0dXJuIHRva2VuOjpFTkQKKyVAfQorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorQmVjYXVzZSB0aGVyZSBpcyBubyBAY29kZXsjaW5jbHVkZX0tbGlrZSBmZWF0dXJlIHdlIGRvbid0IG5lZWQKK0Bjb2Rle3l5d3JhcH0sIHdlIGRvbid0IG5lZWQgQGNvZGV7dW5wdXR9IGVpdGhlciwgYW5kIHdlIHBhcnNlIGFuCithY3R1YWwgZmlsZSwgdGhpcyBpcyBub3QgYW4gaW50ZXJhY3RpdmUgc2Vzc2lvbiB3aXRoIHRoZSB1c2VyLgorRmluYWxseSB3ZSBlbmFibGUgdGhlIHNjYW5uZXIgdHJhY2luZyBmZWF0dXJlcy4KKworQGNvbW1lbnQgZmlsZTogY2FsYysrLXNjYW5uZXIubGwKK0BleGFtcGxlCislb3B0aW9uIG5veXl3cmFwIG5vdW5wdXQgYmF0Y2ggZGVidWcKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK0FiYnJldmlhdGlvbnMgYWxsb3cgZm9yIG1vcmUgcmVhZGFibGUgcnVsZXMuCisKK0Bjb21tZW50IGZpbGU6IGNhbGMrKy1zY2FubmVyLmxsCitAZXhhbXBsZQoraWQgICAgW2EtekEtWl1bYS16QS1aXzAtOV0qCitpbnQgICBbMC05XSsKK2JsYW5rIFsgXHRdCitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitUaGUgZm9sbG93aW5nIHBhcmFncmFwaCBzdWZmaWNlcyB0byB0cmFjayBsb2NhdGlvbnMgYWNjdXJhdGVseS4gIEVhY2gKK3RpbWUgQGNvZGV7eXlsZXh9IGlzIGludm9rZWQsIHRoZSBiZWdpbiBwb3NpdGlvbiBpcyBtb3ZlZCBvbnRvIHRoZSBlbmQKK3Bvc2l0aW9uLiAgVGhlbiB3aGVuIGEgcGF0dGVybiBpcyBtYXRjaGVkLCB0aGUgZW5kIHBvc2l0aW9uIGlzCithZHZhbmNlZCBvZiBpdHMgd2lkdGguICBJbiBjYXNlIGl0IG1hdGNoZWQgZW5kcyBvZiBsaW5lcywgdGhlIGVuZAorY3Vyc29yIGlzIGFkanVzdGVkLCBhbmQgZWFjaCB0aW1lIGJsYW5rcyBhcmUgbWF0Y2hlZCwgdGhlIGJlZ2luIGN1cnNvcgoraXMgbW92ZWQgb250byB0aGUgZW5kIGN1cnNvciB0byBlZmZlY3RpdmVseSBpZ25vcmUgdGhlIGJsYW5rcworcHJlY2VkaW5nIHRva2Vucy4gIENvbW1lbnRzIHdvdWxkIGJlIHRyZWF0ZWQgZXF1YWxseS4KKworQGNvbW1lbnQgZmlsZTogY2FsYysrLXNjYW5uZXIubGwKK0BleGFtcGxlCitAZ3JvdXAKKyVAeworIyBkZWZpbmUgWVlfVVNFUl9BQ1RJT04gIHl5bGxvYy0+Y29sdW1ucyAoeXlsZW5nKTsKKyVAfQorQGVuZCBncm91cAorJSUKKyVAeworICB5eWxsb2MtPnN0ZXAgKCk7CislQH0KK0B7YmxhbmtAfSsgICB5eWxsb2MtPnN0ZXAgKCk7CitbXG5dKyAgICAgIHl5bGxvYy0+bGluZXMgKHl5bGVuZyk7IHl5bGxvYy0+c3RlcCAoKTsKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK1RoZSBydWxlcyBhcmUgc2ltcGxlLCBqdXN0IG5vdGUgdGhlIHVzZSBvZiB0aGUgZHJpdmVyIHRvIHJlcG9ydCBlcnJvcnMuCitJdCBpcyBjb252ZW5pZW50IHRvIHVzZSBhIHR5cGVkZWYgdG8gc2hvcnRlbgorQGNvZGV7eXk6OmNhbGN4eF9wYXJzZXI6OnRva2VuOjppZGVudGlmaWVyfSBpbnRvCitAY29kZXt0b2tlbjo6aWRlbnRpZmllcn0gZm9yIGluc3RhbmNlLgorCitAY29tbWVudCBmaWxlOiBjYWxjKystc2Nhbm5lci5sbAorQGV4YW1wbGUKKyVAeworICB0eXBlZGVmIHl5OjpjYWxjeHhfcGFyc2VyOjp0b2tlbiB0b2tlbjsKKyVAfQorICAgICAgICAgLyogQ29udmVydCBpbnRzIHRvIHRoZSBhY3R1YWwgdHlwZSBvZiB0b2tlbnMuICAqLworWy0rKi9dICAgcmV0dXJuIHl5OjpjYWxjeHhfcGFyc2VyOjp0b2tlbl90eXBlICh5eXRleHRbMF0pOworCisiOj0iICAgICByZXR1cm4gdG9rZW46OkFTU0lHTjsKKworQGdyb3VwCitAe2ludEB9ICAgIEB7CisgICAgICAgICAgIGVycm5vID0gMDsKKyAgICAgICAgICAgbG9uZyBuID0gc3RydG9sICh5eXRleHQsIE5VTEwsIDEwKTsKKyAgICAgICAgICAgaWYgKCEgKElOVF9NSU4gPD0gbiAmJiBuIDw9IElOVF9NQVggJiYgZXJybm8gIT0gRVJBTkdFKSkKKyAgICAgICAgICAgICBkcml2ZXIuZXJyb3IgKCp5eWxsb2MsICJpbnRlZ2VyIGlzIG91dCBvZiByYW5nZSIpOworICAgICAgICAgICB5eWx2YWwtPml2YWwgPSBuOworICAgICAgICAgICByZXR1cm4gdG9rZW46Ok5VTUJFUjsKKyAgICAgICAgIEB9CitAZW5kIGdyb3VwCisKK0Bncm91cAorQHtpZEB9ICAgICBAeworICAgICAgICAgICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJpbmcgKHl5dGV4dCk7CisgICAgICAgICAgIHJldHVybiB0b2tlbjo6SURFTlRJRklFUjsKKyAgICAgICAgIEB9CitAZW5kIGdyb3VwCisKKy4gICAgICAgIGRyaXZlci5lcnJvciAoKnl5bGxvYywgImludmFsaWQgY2hhcmFjdGVyIik7CislJQorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorRmluYWxseSwgYmVjYXVzZSB0aGUgc2Nhbm5lciByZWxhdGVkIGRyaXZlcidzIG1lbWJlciBmdW5jdGlvbiBkZXBlbmQKK29uIHRoZSBzY2FubmVyJ3MgZGF0YSwgaXQgaXMgc2ltcGxlciB0byBpbXBsZW1lbnQgdGhlbSBpbiB0aGlzIGZpbGUuCisKK0Bjb21tZW50IGZpbGU6IGNhbGMrKy1zY2FubmVyLmxsCitAZXhhbXBsZQorQGdyb3VwCit2b2lkCitjYWxjeHhfZHJpdmVyOjpzY2FuX2JlZ2luICgpCitAeworICB5eV9mbGV4X2RlYnVnID0gdHJhY2Vfc2Nhbm5pbmc7CisgIGlmIChmaWxlLmVtcHR5ICgpIHx8IGZpbGUgPT0gIi0iKQorICAgIHl5aW4gPSBzdGRpbjsKKyAgZWxzZSBpZiAoISh5eWluID0gZm9wZW4gKGZpbGUuY19zdHIgKCksICJyIikpKQorICAgIEB7CisgICAgICBlcnJvciAoImNhbm5vdCBvcGVuICIgKyBmaWxlICsgIjogIiArIHN0cmVycm9yKGVycm5vKSk7CisgICAgICBleGl0IChFWElUX0ZBSUxVUkUpOworICAgIEB9CitAfQorQGVuZCBncm91cAorCitAZ3JvdXAKK3ZvaWQKK2NhbGN4eF9kcml2ZXI6OnNjYW5fZW5kICgpCitAeworICBmY2xvc2UgKHl5aW4pOworQH0KK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitAbm9kZSBDYWxjKysgVG9wIExldmVsCitAc3Vic3Vic2VjdGlvbiBDYWxjKysgVG9wIExldmVsCisKK1RoZSB0b3AgbGV2ZWwgZmlsZSwgQGZpbGV7Y2FsYysrLmNjfSwgcG9zZXMgbm8gcHJvYmxlbS4KKworQGNvbW1lbnQgZmlsZTogY2FsYysrLmNjCitAZXhhbXBsZQorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgImNhbGMrKy1kcml2ZXIuaGgiCisKK0Bncm91cAoraW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorQHsKKyAgY2FsY3h4X2RyaXZlciBkcml2ZXI7CisgIGZvciAoaW50IGkgPSAxOyBpIDwgYXJnYzsgKytpKQorICAgIGlmIChhcmd2W2ldID09IHN0ZDo6c3RyaW5nICgiLXAiKSkKKyAgICAgIGRyaXZlci50cmFjZV9wYXJzaW5nID0gdHJ1ZTsKKyAgICBlbHNlIGlmIChhcmd2W2ldID09IHN0ZDo6c3RyaW5nICgiLXMiKSkKKyAgICAgIGRyaXZlci50cmFjZV9zY2FubmluZyA9IHRydWU7CisgICAgZWxzZSBpZiAoIWRyaXZlci5wYXJzZSAoYXJndltpXSkpCisgICAgICBzdGQ6OmNvdXQgPDwgZHJpdmVyLnJlc3VsdCA8PCBzdGQ6OmVuZGw7CitAfQorQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK0Bub2RlIEphdmEgUGFyc2VycworQHNlY3Rpb24gSmF2YSBQYXJzZXJzCisKK0BtZW51CisqIEphdmEgQmlzb24gSW50ZXJmYWNlOjogICAgICAgIEFza2luZyBmb3IgSmF2YSBwYXJzZXIgZ2VuZXJhdGlvbgorKiBKYXZhIFNlbWFudGljIFZhbHVlczo6ICAgICAgICAldHlwZSBhbmQgJXRva2VuIHZzLiBKYXZhCisqIEphdmEgTG9jYXRpb24gVmFsdWVzOjogICAgICAgIFRoZSBwb3NpdGlvbiBhbmQgbG9jYXRpb24gY2xhc3NlcworKiBKYXZhIFBhcnNlciBJbnRlcmZhY2U6OiAgICAgICBJbnN0YW50aWF0aW5nIGFuZCBydW5uaW5nIHRoZSBwYXJzZXIKKyogSmF2YSBTY2FubmVyIEludGVyZmFjZTo6ICAgICAgU3BlY2lmeWluZyB0aGUgc2Nhbm5lciBmb3IgdGhlIHBhcnNlcgorKiBKYXZhIEFjdGlvbiBGZWF0dXJlczo6ICAgICAgICBTcGVjaWFsIGZlYXR1cmVzIGZvciB1c2UgaW4gYWN0aW9ucworKiBKYXZhIERpZmZlcmVuY2VzOjogICAgICAgICAgICBEaWZmZXJlbmNlcyBiZXR3ZWVuIEMvQysrIGFuZCBKYXZhIEdyYW1tYXJzCisqIEphdmEgRGVjbGFyYXRpb25zIFN1bW1hcnk6OiAgIExpc3Qgb2YgQmlzb24gZGVjbGFyYXRpb25zIHVzZWQgd2l0aCBKYXZhCitAZW5kIG1lbnUKKworQG5vZGUgSmF2YSBCaXNvbiBJbnRlcmZhY2UKK0BzdWJzZWN0aW9uIEphdmEgQmlzb24gSW50ZXJmYWNlCitAYyAtICVsYW5ndWFnZSAiSmF2YSIKKworKFRoZSBjdXJyZW50IEphdmEgaW50ZXJmYWNlIGlzIGV4cGVyaW1lbnRhbCBhbmQgbWF5IGV2b2x2ZS4KK01vcmUgdXNlciBmZWVkYmFjayB3aWxsIGhlbHAgdG8gc3RhYmlsaXplIGl0LikKKworVGhlIEphdmEgcGFyc2VyIHNrZWxldG9ucyBhcmUgc2VsZWN0ZWQgdXNpbmcgdGhlIEBjb2RleyVsYW5ndWFnZSAiSmF2YSJ9CitkaXJlY3RpdmUgb3IgdGhlIEBvcHRpb257LUwgamF2YX0vQG9wdGlvbnstLWxhbmd1YWdlPWphdmF9IG9wdGlvbi4KKworQGMgRklYTUU6IERvY3VtZW50ZWQgYnVnLgorV2hlbiBnZW5lcmF0aW5nIGEgSmF2YSBwYXJzZXIsIEBjb2Rle2Jpc29uIEB2YXJ7YmFzZW5hbWV9Lnl9IHdpbGwKK2NyZWF0ZSBhIHNpbmdsZSBKYXZhIHNvdXJjZSBmaWxlIG5hbWVkIEBmaWxle0B2YXJ7YmFzZW5hbWV9LmphdmF9Citjb250YWluaW5nIHRoZSBwYXJzZXIgaW1wbGVtZW50YXRpb24uICBVc2luZyBhIGdyYW1tYXIgZmlsZSB3aXRob3V0IGEKK0BmaWxley55fSBzdWZmaXggaXMgY3VycmVudGx5IGJyb2tlbi4gIFRoZSBiYXNlbmFtZSBvZiB0aGUgcGFyc2VyCitpbXBsZW1lbnRhdGlvbiBmaWxlIGNhbiBiZSBjaGFuZ2VkIGJ5IHRoZSBAY29kZXslZmlsZS1wcmVmaXh9CitkaXJlY3RpdmUgb3IgdGhlIEBvcHRpb257LXB9L0BvcHRpb257LS1uYW1lLXByZWZpeH0gb3B0aW9uLiAgVGhlCitlbnRpcmUgcGFyc2VyIGltcGxlbWVudGF0aW9uIGZpbGUgbmFtZSBjYW4gYmUgY2hhbmdlZCBieSB0aGUKK0Bjb2RleyVvdXRwdXR9IGRpcmVjdGl2ZSBvciB0aGUgQG9wdGlvbnstb30vQG9wdGlvbnstLW91dHB1dH0gb3B0aW9uLgorVGhlIHBhcnNlciBpbXBsZW1lbnRhdGlvbiBmaWxlIGNvbnRhaW5zIGEgc2luZ2xlIGNsYXNzIGZvciB0aGUgcGFyc2VyLgorCitZb3UgY2FuIGNyZWF0ZSBkb2N1bWVudGF0aW9uIGZvciBnZW5lcmF0ZWQgcGFyc2VycyB1c2luZyBKYXZhZG9jLgorCitDb250cmFyeSB0byBDIHBhcnNlcnMsIEphdmEgcGFyc2VycyBkbyBub3QgdXNlIGdsb2JhbCB2YXJpYWJsZXM7IHRoZQorc3RhdGUgb2YgdGhlIHBhcnNlciBpcyBhbHdheXMgbG9jYWwgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIHBhcnNlciBjbGFzcy4KK1RoZXJlZm9yZSwgYWxsIEphdmEgcGFyc2VycyBhcmUgYGBwdXJlJycsIGFuZCB0aGUgQGNvZGV7JXB1cmUtcGFyc2VyfQorYW5kIEBjb2RleyVkZWZpbmUgYXBpLnB1cmUgZnVsbH0gZGlyZWN0aXZlcyBkb2VzIG5vdCBkbyBhbnl0aGluZyB3aGVuIHVzZWQgaW4KK0phdmEuCisKK1B1c2ggcGFyc2VycyBhcmUgY3VycmVudGx5IHVuc3VwcG9ydGVkIGluIEphdmEgYW5kIEBjb2RleyVkZWZpbmUKK2FwaS5wdXNoLXB1bGx9IGhhdmUgbm8gZWZmZWN0LgorCitHTFIgcGFyc2VycyBhcmUgY3VycmVudGx5IHVuc3VwcG9ydGVkIGluIEphdmEuICBEbyBub3QgdXNlIHRoZQorQGNvZGV7Z2xyLXBhcnNlcn0gZGlyZWN0aXZlLgorCitObyBoZWFkZXIgZmlsZSBjYW4gYmUgZ2VuZXJhdGVkIGZvciBKYXZhIHBhcnNlcnMuICBEbyBub3QgdXNlIHRoZQorQGNvZGV7JWRlZmluZXN9IGRpcmVjdGl2ZSBvciB0aGUgQG9wdGlvbnstZH0vQG9wdGlvbnstLWRlZmluZXN9IG9wdGlvbnMuCisKK0BjIEZJWE1FOiBQb3NzaWJsZSBjb2RlIGNoYW5nZS4KK0N1cnJlbnRseSwgc3VwcG9ydCBmb3IgZGVidWdnaW5nIGFuZCB2ZXJib3NlIGVycm9ycyBhcmUgYWx3YXlzIGNvbXBpbGVkCitpbi4gIFRodXMgdGhlIEBjb2RleyVkZWJ1Z30gYW5kIEBjb2RleyV0b2tlbi10YWJsZX0gZGlyZWN0aXZlcyBhbmQgdGhlCitAb3B0aW9uey10fS9Ab3B0aW9uey0tZGVidWd9IGFuZCBAb3B0aW9uey1rfS9Ab3B0aW9uey0tdG9rZW4tdGFibGV9CitvcHRpb25zIGhhdmUgbm8gZWZmZWN0LiAgVGhpcyBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUgdG8gZWxpbWluYXRlCit1bnVzZWQgY29kZSBpbiB0aGUgZ2VuZXJhdGVkIHBhcnNlciwgc28gdXNlIEBjb2RleyVkZWJ1Z30gYW5kCitAY29kZXsldmVyYm9zZS1lcnJvcn0gZXhwbGljaXRseSBpZiBuZWVkZWQuICBBbHNvLCBpbiB0aGUgZnV0dXJlIHRoZQorQGNvZGV7JXRva2VuLXRhYmxlfSBkaXJlY3RpdmUgbWlnaHQgZW5hYmxlIGEgcHVibGljIGludGVyZmFjZSB0bworYWNjZXNzIHRoZSB0b2tlbiBuYW1lcyBhbmQgY29kZXMuCisKK0Bub2RlIEphdmEgU2VtYW50aWMgVmFsdWVzCitAc3Vic2VjdGlvbiBKYXZhIFNlbWFudGljIFZhbHVlcworQGMgLSBObyAldW5pb24sIHNwZWNpZnkgdHlwZSBpbiAldHlwZS8ldG9rZW4uCitAYyAtIFlZU1RZUEUKK0BjIC0gUHJpbnRlciBhbmQgZGVzdHJ1Y3RvcgorCitUaGVyZSBpcyBubyBAY29kZXsldW5pb259IGRpcmVjdGl2ZSBpbiBKYXZhIHBhcnNlcnMuICBJbnN0ZWFkLCB0aGUKK3NlbWFudGljIHZhbHVlcycgdHlwZXMgKGNsYXNzIG5hbWVzKSBzaG91bGQgYmUgc3BlY2lmaWVkIGluIHRoZQorQGNvZGV7JXR5cGV9IG9yIEBjb2RleyV0b2tlbn0gZGlyZWN0aXZlOgorCitAZXhhbXBsZQorJXR5cGUgPEV4cHJlc3Npb24+IGV4cHIgYXNzaWdubWVudF9leHByIHRlcm0gZmFjdG9yCisldHlwZSA8SW50ZWdlcj4gbnVtYmVyCitAZW5kIGV4YW1wbGUKKworQnkgZGVmYXVsdCwgdGhlIHNlbWFudGljIHN0YWNrIGlzIGRlY2xhcmVkIHRvIGhhdmUgQGNvZGV7T2JqZWN0fSBtZW1iZXJzLAord2hpY2ggbWVhbnMgdGhhdCB0aGUgY2xhc3MgdHlwZXMgeW91IHNwZWNpZnkgY2FuIGJlIG9mIGFueSBjbGFzcy4KK1RvIGltcHJvdmUgdGhlIHR5cGUgc2FmZXR5IG9mIHRoZSBwYXJzZXIsIHlvdSBjYW4gZGVjbGFyZSB0aGUgY29tbW9uCitzdXBlcmNsYXNzIG9mIGFsbCB0aGUgc2VtYW50aWMgdmFsdWVzIHVzaW5nIHRoZSBAY29kZXslZGVmaW5lIHN0eXBlfQorZGlyZWN0aXZlLiAgRm9yIGV4YW1wbGUsIGFmdGVyIHRoZSBmb2xsb3dpbmcgZGVjbGFyYXRpb246CisKK0BleGFtcGxlCislZGVmaW5lIHN0eXBlICJBU1ROb2RlIgorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorYW55IEBjb2RleyV0eXBlfSBvciBAY29kZXsldG9rZW59IHNwZWNpZnlpbmcgYSBzZW1hbnRpYyB0eXBlIHdoaWNoCitpcyBub3QgYSBzdWJjbGFzcyBvZiBBU1ROb2RlLCB3aWxsIGNhdXNlIGEgY29tcGlsZS10aW1lIGVycm9yLgorCitAYyBGSVhNRTogRG9jdW1lbnRlZCBidWcuCitUeXBlcyB1c2VkIGluIHRoZSBkaXJlY3RpdmVzIG1heSBiZSBxdWFsaWZpZWQgd2l0aCBhIHBhY2thZ2UgbmFtZS4KK1ByaW1pdGl2ZSBkYXRhIHR5cGVzIGFyZSBhY2NlcHRlZCBmb3IgSmF2YSB2ZXJzaW9uIDEuNSBvciBsYXRlci4gIE5vdGUKK3RoYXQgaW4gdGhpcyBjYXNlIHRoZSBhdXRvYm94aW5nIGZlYXR1cmUgb2YgSmF2YSAxLjUgd2lsbCBiZSB1c2VkLgorR2VuZXJpYyB0eXBlcyBtYXkgbm90IGJlIHVzZWQ7IHRoaXMgaXMgZHVlIHRvIGEgbGltaXRhdGlvbiBpbiB0aGUKK2ltcGxlbWVudGF0aW9uIG9mIEJpc29uLCBhbmQgbWF5IGNoYW5nZSBpbiBmdXR1cmUgcmVsZWFzZXMuCisKK0phdmEgcGFyc2VycyBkbyBub3Qgc3VwcG9ydCBAY29kZXslZGVzdHJ1Y3Rvcn0sIHNpbmNlIHRoZSBsYW5ndWFnZQorYWRvcHRzIGdhcmJhZ2UgY29sbGVjdGlvbi4gIFRoZSBwYXJzZXIgd2lsbCB0cnkgdG8gaG9sZCByZWZlcmVuY2VzCit0byBzZW1hbnRpYyB2YWx1ZXMgZm9yIGFzIGxpdHRsZSB0aW1lIGFzIG5lZWRlZC4KKworSmF2YSBwYXJzZXJzIGRvIG5vdCBzdXBwb3J0IEBjb2RleyVwcmludGVyfSwgYXMgQGNvZGV7dG9TdHJpbmcoKX0KK2NhbiBiZSB1c2VkIHRvIHByaW50IHRoZSBzZW1hbnRpYyB2YWx1ZXMuICBUaGlzIGhvd2V2ZXIgbWF5IGNoYW5nZQorKGluIGEgYmFja3dhcmRzLWNvbXBhdGlibGUgd2F5KSBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24uCisKKworQG5vZGUgSmF2YSBMb2NhdGlvbiBWYWx1ZXMKK0BzdWJzZWN0aW9uIEphdmEgTG9jYXRpb24gVmFsdWVzCitAYyAtICVsb2NhdGlvbnMKK0BjIC0gY2xhc3MgUG9zaXRpb24KK0BjIC0gY2xhc3MgTG9jYXRpb24KKworV2hlbiB0aGUgZGlyZWN0aXZlIEBjb2RleyVsb2NhdGlvbnN9IGlzIHVzZWQsIHRoZSBKYXZhIHBhcnNlciBzdXBwb3J0cworbG9jYXRpb24gdHJhY2tpbmcsIHNlZSBAcmVme1RyYWNraW5nIExvY2F0aW9uc30uICBBbiBhdXhpbGlhcnkgdXNlci1kZWZpbmVkCitjbGFzcyBkZWZpbmVzIGEgQGRmbntwb3NpdGlvbn0sIGEgc2luZ2xlIHBvaW50IGluIGEgZmlsZTsgQmlzb24gaXRzZWxmCitkZWZpbmVzIGEgY2xhc3MgcmVwcmVzZW50aW5nIGEgQGRmbntsb2NhdGlvbn0sIGEgcmFuZ2UgY29tcG9zZWQgb2YgYSBwYWlyIG9mCitwb3NpdGlvbnMgKHBvc3NpYmx5IHNwYW5uaW5nIHNldmVyYWwgZmlsZXMpLiAgVGhlIGxvY2F0aW9uIGNsYXNzIGlzIGFuIGlubmVyCitjbGFzcyBvZiB0aGUgcGFyc2VyOyB0aGUgbmFtZSBpcyBAY29kZXtMb2NhdGlvbn0gYnkgZGVmYXVsdCwgYW5kIG1heSBhbHNvIGJlCityZW5hbWVkIHVzaW5nIEBjb2RleyVkZWZpbmUgYXBpLmxvY2F0aW9uLnR5cGUgIkB2YXJ7Y2xhc3MtbmFtZX0ifS4KKworVGhlIGxvY2F0aW9uIGNsYXNzIHRyZWF0cyB0aGUgcG9zaXRpb24gYXMgYSBjb21wbGV0ZWx5IG9wYXF1ZSB2YWx1ZS4KK0J5IGRlZmF1bHQsIHRoZSBjbGFzcyBuYW1lIGlzIEBjb2Rle1Bvc2l0aW9ufSwgYnV0IHRoaXMgY2FuIGJlIGNoYW5nZWQKK3dpdGggQGNvZGV7JWRlZmluZSBhcGkucG9zaXRpb24udHlwZSAiQHZhcntjbGFzcy1uYW1lfSJ9LiAgVGhpcyBjbGFzcyBtdXN0CitiZSBzdXBwbGllZCBieSB0aGUgdXNlci4KKworCitAZGVmdHlwZWl2YXIge0xvY2F0aW9ufSB7UG9zaXRpb259IGJlZ2luCitAZGVmdHlwZWl2YXJ4IHtMb2NhdGlvbn0ge1Bvc2l0aW9ufSBlbmQKK1RoZSBmaXJzdCwgaW5jbHVzaXZlLCBwb3NpdGlvbiBvZiB0aGUgcmFuZ2UsIGFuZCB0aGUgZmlyc3QgYmV5b25kLgorQGVuZCBkZWZ0eXBlaXZhcgorCitAZGVmdHlwZW9wIHtDb25zdHJ1Y3Rvcn0ge0xvY2F0aW9ufSB7fSBMb2NhdGlvbiAoUG9zaXRpb24gQHZhcntsb2N9KQorQ3JlYXRlIGEgQGNvZGV7TG9jYXRpb259IGRlbm90aW5nIGFuIGVtcHR5IHJhbmdlIGxvY2F0ZWQgYXQgYSBnaXZlbiBwb2ludC4KK0BlbmQgZGVmdHlwZW9wCisKK0BkZWZ0eXBlb3Age0NvbnN0cnVjdG9yfSB7TG9jYXRpb259IHt9IExvY2F0aW9uIChQb3NpdGlvbiBAdmFye2JlZ2lufSwgUG9zaXRpb24gQHZhcntlbmR9KQorQ3JlYXRlIGEgQGNvZGV7TG9jYXRpb259IGZyb20gdGhlIGVuZHBvaW50cyBvZiB0aGUgcmFuZ2UuCitAZW5kIGRlZnR5cGVvcAorCitAZGVmdHlwZW1ldGhvZCB7TG9jYXRpb259IHtTdHJpbmd9IHRvU3RyaW5nICgpCitQcmludHMgdGhlIHJhbmdlIHJlcHJlc2VudGVkIGJ5IHRoZSBsb2NhdGlvbi4gIEZvciB0aGlzIHRvIHdvcmsKK3Byb3Blcmx5LCB0aGUgcG9zaXRpb24gY2xhc3Mgc2hvdWxkIG92ZXJyaWRlIHRoZSBAY29kZXtlcXVhbHN9IGFuZAorQGNvZGV7dG9TdHJpbmd9IG1ldGhvZHMgYXBwcm9wcmlhdGVseS4KK0BlbmQgZGVmdHlwZW1ldGhvZAorCisKK0Bub2RlIEphdmEgUGFyc2VyIEludGVyZmFjZQorQHN1YnNlY3Rpb24gSmF2YSBQYXJzZXIgSW50ZXJmYWNlCitAYyAtIGRlZmluZSBwYXJzZXJfY2xhc3NfbmFtZQorQGMgLSBDdG9yCitAYyAtIHBhcnNlLCBlcnJvciwgc2V0X2RlYnVnX2xldmVsLCBkZWJ1Z19sZXZlbCwgc2V0X2RlYnVnX3N0cmVhbSwKK0BjICAgZGVidWdfc3RyZWFtLgorQGMgLSBSZXBvcnRpbmcgZXJyb3JzCisKK1RoZSBuYW1lIG9mIHRoZSBnZW5lcmF0ZWQgcGFyc2VyIGNsYXNzIGRlZmF1bHRzIHRvIEBjb2Rle1lZUGFyc2VyfS4gIFRoZQorQGNvZGV7WVl9IHByZWZpeCBtYXkgYmUgY2hhbmdlZCB1c2luZyB0aGUgQGNvZGV7JW5hbWUtcHJlZml4fSBkaXJlY3RpdmUKK29yIHRoZSBAb3B0aW9uey1wfS9Ab3B0aW9uey0tbmFtZS1wcmVmaXh9IG9wdGlvbi4gIEFsdGVybmF0aXZlbHksIHVzZQorQGNvZGV7JWRlZmluZSBwYXJzZXJfY2xhc3NfbmFtZSAiQHZhcntuYW1lfSJ9IHRvIGdpdmUgYSBjdXN0b20gbmFtZSB0bwordGhlIGNsYXNzLiAgVGhlIGludGVyZmFjZSBvZiB0aGlzIGNsYXNzIGlzIGRldGFpbGVkIGJlbG93LgorCitCeSBkZWZhdWx0LCB0aGUgcGFyc2VyIGNsYXNzIGhhcyBwYWNrYWdlIHZpc2liaWxpdHkuICBBIGRlY2xhcmF0aW9uCitAY29kZXslZGVmaW5lIHB1YmxpY30gd2lsbCBjaGFuZ2UgdG8gcHVibGljIHZpc2liaWxpdHkuICBSZW1lbWJlciB0aGF0LAorYWNjb3JkaW5nIHRvIHRoZSBKYXZhIGxhbmd1YWdlIHNwZWNpZmljYXRpb24sIHRoZSBuYW1lIG9mIHRoZSBAZmlsZXsuamF2YX0KK2ZpbGUgc2hvdWxkIG1hdGNoIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyBpbiB0aGlzIGNhc2UuICBTaW1pbGFybHksIHlvdSBjYW4KK3VzZSBAY29kZXthYnN0cmFjdH0sIEBjb2Rle2ZpbmFsfSBhbmQgQGNvZGV7c3RyaWN0ZnB9IHdpdGggdGhlCitAY29kZXslZGVmaW5lfSBkZWNsYXJhdGlvbiB0byBhZGQgb3RoZXIgbW9kaWZpZXJzIHRvIHRoZSBwYXJzZXIgY2xhc3MuCisKK1RoZSBKYXZhIHBhY2thZ2UgbmFtZSBvZiB0aGUgcGFyc2VyIGNsYXNzIGNhbiBiZSBzcGVjaWZpZWQgdXNpbmcgdGhlCitAY29kZXslZGVmaW5lIHBhY2thZ2V9IGRpcmVjdGl2ZS4gIFRoZSBzdXBlcmNsYXNzIGFuZCB0aGUgaW1wbGVtZW50ZWQKK2ludGVyZmFjZXMgb2YgdGhlIHBhcnNlciBjbGFzcyBjYW4gYmUgc3BlY2lmaWVkIHdpdGggdGhlIEBjb2RleyVkZWZpbmUKK2V4dGVuZHN9IGFuZCBAY29kZXslZGVmaW5lIGltcGxlbWVudHN9IGRpcmVjdGl2ZXMuCisKK1RoZSBwYXJzZXIgY2xhc3MgZGVmaW5lcyBhbiBpbm5lciBjbGFzcywgQGNvZGV7TG9jYXRpb259LCB0aGF0IGlzIHVzZWQKK2ZvciBsb2NhdGlvbiB0cmFja2luZyAoc2VlIEByZWZ7SmF2YSBMb2NhdGlvbiBWYWx1ZXN9KSwgYW5kIGEgaW5uZXIKK2ludGVyZmFjZSwgQGNvZGV7TGV4ZXJ9IChzZWUgQHJlZntKYXZhIFNjYW5uZXIgSW50ZXJmYWNlfSkuICBPdGhlciB0aGFuCit0aGVzZSBpbm5lciBjbGFzcy9pbnRlcmZhY2UsIGFuZCB0aGUgbWVtYmVycyBkZXNjcmliZWQgaW4gdGhlIGludGVyZmFjZQorYmVsb3csIGFsbCB0aGUgb3RoZXIgbWVtYmVycyBhbmQgZmllbGRzIGFyZSBwcmVjZWRlZCB3aXRoIGEgQGNvZGV7eXl9IG9yCitAY29kZXtZWX0gcHJlZml4IHRvIGF2b2lkIGNsYXNoZXMgd2l0aCB1c2VyIGNvZGUuCisKK0BjIEZJWE1FOiBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBhbmQgdmFyaWFibGVzIGFyZSBzdGlsbCB1bmRvY3VtZW50ZWQ6CitAYyBAY29kZXtiaXNvblZlcnNpb259LCBAY29kZXtiaXNvblNrZWxldG9ufSBhbmQgQGNvZGV7ZXJyb3JWZXJib3NlfS4KKworVGhlIHBhcnNlciBjbGFzcyBjYW4gYmUgZXh0ZW5kZWQgdXNpbmcgdGhlIEBjb2RleyVwYXJzZS1wYXJhbX0KK2RpcmVjdGl2ZS4gRWFjaCBvY2N1cnJlbmNlIG9mIHRoZSBkaXJlY3RpdmUgd2lsbCBhZGQgYSBAY29kZXtwcm90ZWN0ZWQKK2ZpbmFsfSBmaWVsZCB0byB0aGUgcGFyc2VyIGNsYXNzLCBhbmQgYW4gYXJndW1lbnQgdG8gaXRzIGNvbnN0cnVjdG9yLAord2hpY2ggaW5pdGlhbGl6ZSB0aGVtIGF1dG9tYXRpY2FsbHkuCisKK1Rva2VuIG5hbWVzIGRlZmluZWQgYnkgQGNvZGV7JXRva2VufSBhbmQgdGhlIHByZWRlZmluZWQgQGNvZGV7RU9GfSB0b2tlbgorbmFtZSBhcmUgYWRkZWQgYXMgY29uc3RhbnQgZmllbGRzIHRvIHRoZSBwYXJzZXIgY2xhc3MuCisKK0BkZWZ0eXBlb3Age0NvbnN0cnVjdG9yfSB7WVlQYXJzZXJ9IHt9IFlZUGFyc2VyIChAdmFye2xleF9wYXJhbX0sIEBkb3Rze30sIEB2YXJ7cGFyc2VfcGFyYW19LCBAZG90c3t9KQorQnVpbGQgYSBuZXcgcGFyc2VyIG9iamVjdCB3aXRoIGVtYmVkZGVkIEBjb2RleyVjb2RlIGxleGVyfS4gIFRoZXJlIGFyZQorbm8gcGFyYW1ldGVycywgdW5sZXNzIEBjb2RleyVwYXJzZS1wYXJhbX1zIGFuZC9vciBAY29kZXslbGV4LXBhcmFtfXMgYXJlCit1c2VkLgorQGVuZCBkZWZ0eXBlb3AKKworQGRlZnR5cGVvcCB7Q29uc3RydWN0b3J9IHtZWVBhcnNlcn0ge30gWVlQYXJzZXIgKExleGVyIEB2YXJ7bGV4ZXJ9LCBAdmFye3BhcnNlX3BhcmFtfSwgQGRvdHN7fSkKK0J1aWxkIGEgbmV3IHBhcnNlciBvYmplY3QgdXNpbmcgdGhlIHNwZWNpZmllZCBzY2FubmVyLiAgVGhlcmUgYXJlIG5vCithZGRpdGlvbmFsIHBhcmFtZXRlcnMgdW5sZXNzIEBjb2RleyVwYXJzZS1wYXJhbX1zIGFyZSB1c2VkLgorCitJZiB0aGUgc2Nhbm5lciBpcyBkZWZpbmVkIGJ5IEBjb2RleyVjb2RlIGxleGVyfSwgdGhpcyBjb25zdHJ1Y3RvciBpcworZGVjbGFyZWQgQGNvZGV7cHJvdGVjdGVkfSBhbmQgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2l0aCBhIHNjYW5uZXIKK2NyZWF0ZWQgd2l0aCB0aGUgY29ycmVjdCBAY29kZXslbGV4LXBhcmFtfXMuCitAZW5kIGRlZnR5cGVvcAorCitAZGVmdHlwZW1ldGhvZCB7WVlQYXJzZXJ9IHtib29sZWFufSBwYXJzZSAoKQorUnVuIHRoZSBzeW50YWN0aWMgYW5hbHlzaXMsIGFuZCByZXR1cm4gQGNvZGV7dHJ1ZX0gb24gc3VjY2VzcywKK0Bjb2Rle2ZhbHNlfSBvdGhlcndpc2UuCitAZW5kIGRlZnR5cGVtZXRob2QKKworQGRlZnR5cGVtZXRob2Qge1lZUGFyc2VyfSB7Ym9vbGVhbn0gcmVjb3ZlcmluZyAoKQorRHVyaW5nIHRoZSBzeW50YWN0aWMgYW5hbHlzaXMsIHJldHVybiBAY29kZXt0cnVlfSBpZiByZWNvdmVyaW5nCitmcm9tIGEgc3ludGF4IGVycm9yLgorQHhyZWZ7RXJyb3IgUmVjb3Zlcnl9LgorQGVuZCBkZWZ0eXBlbWV0aG9kCisKK0BkZWZ0eXBlbWV0aG9kIHtZWVBhcnNlcn0ge2phdmEuaW8uUHJpbnRTdHJlYW19IGdldERlYnVnU3RyZWFtICgpCitAZGVmdHlwZW1ldGhvZHgge1lZUGFyc2VyfSB7dm9pZH0gc2V0RGVidWdTdHJlYW0gKGphdmEuaW8ucHJpbnRTdHJlYW0gQHZhcntvfSkKK0dldCBvciBzZXQgdGhlIHN0cmVhbSB1c2VkIGZvciB0cmFjaW5nIHRoZSBwYXJzaW5nLiAgSXQgZGVmYXVsdHMgdG8KK0Bjb2Rle1N5c3RlbS5lcnJ9LgorQGVuZCBkZWZ0eXBlbWV0aG9kCisKK0BkZWZ0eXBlbWV0aG9kIHtZWVBhcnNlcn0ge2ludH0gZ2V0RGVidWdMZXZlbCAoKQorQGRlZnR5cGVtZXRob2R4IHtZWVBhcnNlcn0ge3ZvaWR9IHNldERlYnVnTGV2ZWwgKGludCBAdmFye2x9KQorR2V0IG9yIHNldCB0aGUgdHJhY2luZyBsZXZlbC4gIEN1cnJlbnRseSBpdHMgdmFsdWUgaXMgZWl0aGVyIDAsIG5vIHRyYWNlLAorb3Igbm9uemVybywgZnVsbCB0cmFjaW5nLgorQGVuZCBkZWZ0eXBlbWV0aG9kCisKKworQG5vZGUgSmF2YSBTY2FubmVyIEludGVyZmFjZQorQHN1YnNlY3Rpb24gSmF2YSBTY2FubmVyIEludGVyZmFjZQorQGMgLSAlY29kZSBsZXhlcgorQGMgLSAlbGV4LXBhcmFtCitAYyAtIExleGVyIGludGVyZmFjZQorCitUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIHdheXMgdG8gaW50ZXJmYWNlIGEgQmlzb24tZ2VuZXJhdGVkIEphdmEgcGFyc2VyCit3aXRoIGEgc2Nhbm5lcjogdGhlIHNjYW5uZXIgbWF5IGJlIGRlZmluZWQgYnkgQGNvZGV7JWNvZGUgbGV4ZXJ9LCBvcgorZGVmaW5lZCBlbHNld2hlcmUuICBJbiBlaXRoZXIgY2FzZSwgdGhlIHNjYW5uZXIgaGFzIHRvIGltcGxlbWVudCB0aGUKK0Bjb2Rle0xleGVyfSBpbm5lciBpbnRlcmZhY2Ugb2YgdGhlIHBhcnNlciBjbGFzcy4KKworSW4gdGhlIGZpcnN0IGNhc2UsIHRoZSBib2R5IG9mIHRoZSBzY2FubmVyIGNsYXNzIGlzIHBsYWNlZCBpbgorQGNvZGV7JWNvZGUgbGV4ZXJ9IGJsb2Nrcy4gIElmIHlvdSB3YW50IHRvIHBhc3MgcGFyYW1ldGVycyBmcm9tIHRoZQorcGFyc2VyIGNvbnN0cnVjdG9yIHRvIHRoZSBzY2FubmVyIGNvbnN0cnVjdG9yLCBzcGVjaWZ5IHRoZW0gd2l0aAorQGNvZGV7JWxleC1wYXJhbX07IHRoZXkgYXJlIHBhc3NlZCBiZWZvcmUgQGNvZGV7JXBhcnNlLXBhcmFtfXMgdG8gdGhlCitjb25zdHJ1Y3Rvci4KKworSW4gdGhlIHNlY29uZCBjYXNlLCB0aGUgc2Nhbm5lciBoYXMgdG8gaW1wbGVtZW50IHRoZSBAY29kZXtMZXhlcn0gaW50ZXJmYWNlLAord2hpY2ggaXMgZGVmaW5lZCB3aXRoaW4gdGhlIHBhcnNlciBjbGFzcyAoZS5nLiwgQGNvZGV7WVlQYXJzZXIuTGV4ZXJ9KS4KK1RoZSBjb25zdHJ1Y3RvciBvZiB0aGUgcGFyc2VyIG9iamVjdCB3aWxsIHRoZW4gYWNjZXB0IGFuIG9iamVjdAoraW1wbGVtZW50aW5nIHRoZSBpbnRlcmZhY2U7IEBjb2RleyVsZXgtcGFyYW19IGlzIG5vdCB1c2VkIGluIHRoaXMKK2Nhc2UuCisKK0luIGJvdGggY2FzZXMsIHRoZSBzY2FubmVyIGhhcyB0byBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBtZXRob2RzLgorCitAZGVmdHlwZW1ldGhvZCB7TGV4ZXJ9IHt2b2lkfSB5eWVycm9yIChMb2NhdGlvbiBAdmFye2xvY30sIFN0cmluZyBAdmFye21zZ30pCitUaGlzIG1ldGhvZCBpcyBkZWZpbmVkIGJ5IHRoZSB1c2VyIHRvIGVtaXQgYW4gZXJyb3IgbWVzc2FnZS4gIFRoZSBmaXJzdAorcGFyYW1ldGVyIGlzIG9taXR0ZWQgaWYgbG9jYXRpb24gdHJhY2tpbmcgaXMgbm90IGFjdGl2ZS4gIEl0cyB0eXBlIGNhbiBiZQorY2hhbmdlZCB1c2luZyBAY29kZXslZGVmaW5lIGFwaS5sb2NhdGlvbi50eXBlICJAdmFye2NsYXNzLW5hbWV9Ii59CitAZW5kIGRlZnR5cGVtZXRob2QKKworQGRlZnR5cGVtZXRob2Qge0xleGVyfSB7aW50fSB5eWxleCAoKQorUmV0dXJuIHRoZSBuZXh0IHRva2VuLiAgSXRzIHR5cGUgaXMgdGhlIHJldHVybiB2YWx1ZSwgaXRzIHNlbWFudGljCit2YWx1ZSBhbmQgbG9jYXRpb24gYXJlIHNhdmVkIGFuZCByZXR1cm5lZCBieSB0aGUgdGhlaXIgbWV0aG9kcyBpbiB0aGUKK2ludGVyZmFjZS4KKworVXNlIEBjb2RleyVkZWZpbmUgbGV4X3Rocm93c30gdG8gc3BlY2lmeSBhbnkgdW5jYXVnaHQgZXhjZXB0aW9ucy4KK0RlZmF1bHQgaXMgQGNvZGV7amF2YS5pby5JT0V4Y2VwdGlvbn0uCitAZW5kIGRlZnR5cGVtZXRob2QKKworQGRlZnR5cGVtZXRob2Qge0xleGVyfSB7UG9zaXRpb259IGdldFN0YXJ0UG9zICgpCitAZGVmdHlwZW1ldGhvZHgge0xleGVyfSB7UG9zaXRpb259IGdldEVuZFBvcyAoKQorUmV0dXJuIHJlc3BlY3RpdmVseSB0aGUgZmlyc3QgcG9zaXRpb24gb2YgdGhlIGxhc3QgdG9rZW4gdGhhdAorQGNvZGV7eXlsZXh9IHJldHVybmVkLCBhbmQgdGhlIGZpcnN0IHBvc2l0aW9uIGJleW9uZCBpdC4gIFRoZXNlCittZXRob2RzIGFyZSBub3QgbmVlZGVkIHVubGVzcyBsb2NhdGlvbiB0cmFja2luZyBpcyBhY3RpdmUuCisKK1RoZSByZXR1cm4gdHlwZSBjYW4gYmUgY2hhbmdlZCB1c2luZyBAY29kZXslZGVmaW5lIGFwaS5wb3NpdGlvbi50eXBlCisiQHZhcntjbGFzcy1uYW1lfSIufQorQGVuZCBkZWZ0eXBlbWV0aG9kCisKK0BkZWZ0eXBlbWV0aG9kIHtMZXhlcn0ge09iamVjdH0gZ2V0TFZhbCAoKQorUmV0dXJuIHRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbGFzdCB0b2tlbiB0aGF0IHl5bGV4IHJldHVybmVkLgorCitUaGUgcmV0dXJuIHR5cGUgY2FuIGJlIGNoYW5nZWQgdXNpbmcgQGNvZGV7JWRlZmluZSBzdHlwZQorIkB2YXJ7Y2xhc3MtbmFtZX0iLn0KK0BlbmQgZGVmdHlwZW1ldGhvZAorCisKK0Bub2RlIEphdmEgQWN0aW9uIEZlYXR1cmVzCitAc3Vic2VjdGlvbiBTcGVjaWFsIEZlYXR1cmVzIGZvciBVc2UgaW4gSmF2YSBBY3Rpb25zCisKK1RoZSBmb2xsb3dpbmcgc3BlY2lhbCBjb25zdHJ1Y3RzIGNhbiBiZSB1c2VzIGluIEphdmEgYWN0aW9ucy4KK090aGVyIGFuYWxvZ291cyBDIGFjdGlvbiBmZWF0dXJlcyBhcmUgY3VycmVudGx5IHVuYXZhaWxhYmxlIGZvciBKYXZhLgorCitVc2UgQGNvZGV7JWRlZmluZSB0aHJvd3N9IHRvIHNwZWNpZnkgYW55IHVuY2F1Z2h0IGV4Y2VwdGlvbnMgZnJvbSBwYXJzZXIKK2FjdGlvbnMsIGFuZCBpbml0aWFsIGFjdGlvbnMgc3BlY2lmaWVkIGJ5IEBjb2RleyVpbml0aWFsLWFjdGlvbn0uCisKK0BkZWZ2YXIgJEB2YXJ7bn0KK1RoZSBzZW1hbnRpYyB2YWx1ZSBmb3IgdGhlIEB2YXJ7bn10aCBjb21wb25lbnQgb2YgdGhlIGN1cnJlbnQgcnVsZS4KK1RoaXMgbWF5IG5vdCBiZSBhc3NpZ25lZCB0by4KK0B4cmVme0phdmEgU2VtYW50aWMgVmFsdWVzfS4KK0BlbmQgZGVmdmFyCisKK0BkZWZ2YXIgJDxAdmFye3R5cGVhbHR9PkB2YXJ7bn0KK0xpa2UgQGNvZGV7JEB2YXJ7bn19IGJ1dCBzcGVjaWZpZXMgYSBhbHRlcm5hdGl2ZSB0eXBlIEB2YXJ7dHlwZWFsdH0uCitAeHJlZntKYXZhIFNlbWFudGljIFZhbHVlc30uCitAZW5kIGRlZnZhcgorCitAZGVmdmFyICQkCitUaGUgc2VtYW50aWMgdmFsdWUgZm9yIHRoZSBncm91cGluZyBtYWRlIGJ5IHRoZSBjdXJyZW50IHJ1bGUuICBBcyBhCit2YWx1ZSwgdGhpcyBpcyBpbiB0aGUgYmFzZSB0eXBlIChAY29kZXtPYmplY3R9IG9yIGFzIHNwZWNpZmllZCBieQorQGNvZGV7JWRlZmluZSBzdHlwZX0pIGFzIGluIG5vdCBjYXN0IHRvIHRoZSBkZWNsYXJlZCBzdWJ0eXBlIGJlY2F1c2UKK2Nhc3RzIGFyZSBub3QgYWxsb3dlZCBvbiB0aGUgbGVmdC1oYW5kIHNpZGUgb2YgSmF2YSBhc3NpZ25tZW50cy4KK1VzZSBhbiBleHBsaWNpdCBKYXZhIGNhc3QgaWYgdGhlIGNvcnJlY3Qgc3VidHlwZSBpcyBuZWVkZWQuCitAeHJlZntKYXZhIFNlbWFudGljIFZhbHVlc30uCitAZW5kIGRlZnZhcgorCitAZGVmdmFyICQ8QHZhcnt0eXBlYWx0fT4kCitTYW1lIGFzIEBjb2RleyQkfSBzaW5jZSBKYXZhIGFsd2F5cyBhbGxvdyBhc3NpZ25pbmcgdG8gdGhlIGJhc2UgdHlwZS4KK1BlcmhhcHMgd2Ugc2hvdWxkIHVzZSB0aGlzIGFuZCBAY29kZXskPD4kfSBmb3IgdGhlIHZhbHVlIGFuZCBAY29kZXskJH0KK2ZvciBzZXR0aW5nIHRoZSB2YWx1ZSBidXQgdGhlcmUgaXMgY3VycmVudGx5IG5vIGVhc3kgd2F5IHRvIGRpc3Rpbmd1aXNoCit0aGVzZSBjb25zdHJ1Y3RzLgorQHhyZWZ7SmF2YSBTZW1hbnRpYyBWYWx1ZXN9LgorQGVuZCBkZWZ2YXIKKworQGRlZnZhciBAQEB2YXJ7bn0KK1RoZSBsb2NhdGlvbiBpbmZvcm1hdGlvbiBvZiB0aGUgQHZhcntufXRoIGNvbXBvbmVudCBvZiB0aGUgY3VycmVudCBydWxlLgorVGhpcyBtYXkgbm90IGJlIGFzc2lnbmVkIHRvLgorQHhyZWZ7SmF2YSBMb2NhdGlvbiBWYWx1ZXN9LgorQGVuZCBkZWZ2YXIKKworQGRlZnZhciBAQCQKK1RoZSBsb2NhdGlvbiBpbmZvcm1hdGlvbiBvZiB0aGUgZ3JvdXBpbmcgbWFkZSBieSB0aGUgY3VycmVudCBydWxlLgorQHhyZWZ7SmF2YSBMb2NhdGlvbiBWYWx1ZXN9LgorQGVuZCBkZWZ2YXIKKworQGRlZnR5cGVmbiB7U3RhdGVtZW50fSByZXR1cm4gWVlBQk9SVCBAY29kZXs7fQorUmV0dXJuIGltbWVkaWF0ZWx5IGZyb20gdGhlIHBhcnNlciwgaW5kaWNhdGluZyBmYWlsdXJlLgorQHhyZWZ7SmF2YSBQYXJzZXIgSW50ZXJmYWNlfS4KK0BlbmQgZGVmdHlwZWZuCisKK0BkZWZ0eXBlZm4ge1N0YXRlbWVudH0gcmV0dXJuIFlZQUNDRVBUIEBjb2Rlezt9CitSZXR1cm4gaW1tZWRpYXRlbHkgZnJvbSB0aGUgcGFyc2VyLCBpbmRpY2F0aW5nIHN1Y2Nlc3MuCitAeHJlZntKYXZhIFBhcnNlciBJbnRlcmZhY2V9LgorQGVuZCBkZWZ0eXBlZm4KKworQGRlZnR5cGVmbiB7U3RhdGVtZW50fSB7cmV0dXJufSBZWUVSUk9SIEBjb2Rlezt9CitTdGFydCBlcnJvciByZWNvdmVyeSAod2l0aG91dCBwcmludGluZyBhbiBlcnJvciBtZXNzYWdlKS4KK0B4cmVme0Vycm9yIFJlY292ZXJ5fS4KK0BlbmQgZGVmdHlwZWZuCisKK0BkZWZ0eXBlZm4ge0Z1bmN0aW9ufSB7Ym9vbGVhbn0gcmVjb3ZlcmluZyAoKQorUmV0dXJuIHdoZXRoZXIgZXJyb3IgcmVjb3ZlcnkgaXMgYmVpbmcgZG9uZS4gSW4gdGhpcyBzdGF0ZSwgdGhlIHBhcnNlcgorcmVhZHMgdG9rZW4gdW50aWwgaXQgcmVhY2hlcyBhIGtub3duIHN0YXRlLCBhbmQgdGhlbiByZXN0YXJ0cyBub3JtYWwKK29wZXJhdGlvbi4KK0B4cmVme0Vycm9yIFJlY292ZXJ5fS4KK0BlbmQgZGVmdHlwZWZuCisKK0BkZWZ0eXBlZm4gIHtGdW5jdGlvbn0ge3Byb3RlY3RlZCB2b2lkfSB5eWVycm9yIChTdHJpbmcgbXNnKQorQGRlZnR5cGVmbngge0Z1bmN0aW9ufSB7cHJvdGVjdGVkIHZvaWR9IHl5ZXJyb3IgKFBvc2l0aW9uIHBvcywgU3RyaW5nIG1zZykKK0BkZWZ0eXBlZm54IHtGdW5jdGlvbn0ge3Byb3RlY3RlZCB2b2lkfSB5eWVycm9yIChMb2NhdGlvbiBsb2MsIFN0cmluZyBtc2cpCitQcmludCBhbiBlcnJvciBtZXNzYWdlIHVzaW5nIHRoZSBAY29kZXt5eWVycm9yfSBtZXRob2Qgb2YgdGhlIHNjYW5uZXIKK2luc3RhbmNlIGluIHVzZS4KK0BlbmQgZGVmdHlwZWZuCisKKworQG5vZGUgSmF2YSBEaWZmZXJlbmNlcworQHN1YnNlY3Rpb24gRGlmZmVyZW5jZXMgYmV0d2VlbiBDL0MrKyBhbmQgSmF2YSBHcmFtbWFycworCitUaGUgZGlmZmVyZW50IHN0cnVjdHVyZSBvZiB0aGUgSmF2YSBsYW5ndWFnZSBmb3JjZXMgc2V2ZXJhbCBkaWZmZXJlbmNlcworYmV0d2VlbiBDL0MrKyBncmFtbWFycywgYW5kIGdyYW1tYXJzIGRlc2lnbmVkIGZvciBKYXZhIHBhcnNlcnMuICBUaGlzCitzZWN0aW9uIHN1bW1hcml6ZXMgdGhlc2UgZGlmZmVyZW5jZXMuCisKK0BpdGVtaXplCitAaXRlbQorSmF2YSBsYWNrcyBhIHByZXByb2Nlc3Nvciwgc28gdGhlIEBjb2Rle1lZRVJST1J9LCBAY29kZXtZWUFDQ0VQVH0sCitAY29kZXtZWUFCT1JUfSBzeW1ib2xzIChAcHhyZWZ7VGFibGUgb2YgU3ltYm9sc30pIGNhbm5vdCBvYnZpb3VzbHkgYmUKK21hY3Jvcy4gIEluc3RlYWQsIHRoZXkgc2hvdWxkIGJlIHByZWNlZGVkIGJ5IEBjb2Rle3JldHVybn0gd2hlbiB0aGV5CithcHBlYXIgaW4gYW4gYWN0aW9uLiAgVGhlIGFjdHVhbCBkZWZpbml0aW9uIG9mIHRoZXNlIHN5bWJvbHMgaXMKK29wYXF1ZSB0byB0aGUgQmlzb24gZ3JhbW1hciwgYW5kIGl0IG1pZ2h0IGNoYW5nZSBpbiB0aGUgZnV0dXJlLiAgVGhlCitvbmx5IG1lYW5pbmdmdWwgb3BlcmF0aW9uIHRoYXQgeW91IGNhbiBkbywgaXMgdG8gcmV0dXJuIHRoZW0uCitAeHJlZntKYXZhIEFjdGlvbiBGZWF0dXJlc30uCisKK05vdGUgdGhhdCBvZiB0aGVzZSB0aHJlZSBzeW1ib2xzLCBvbmx5IEBjb2Rle1lZQUNDRVBUfSBhbmQKK0Bjb2Rle1lZQUJPUlR9IHdpbGwgY2F1c2UgYSByZXR1cm4gZnJvbSB0aGUgQGNvZGV7eXlwYXJzZX0KK21ldGhvZEBmb290bm90ZXtKYXZhIHBhcnNlcnMgaW5jbHVkZSB0aGUgYWN0aW9ucyBpbiBhIHNlcGFyYXRlCittZXRob2QgdGhhbiBAY29kZXt5eXBhcnNlfSBpbiBvcmRlciB0byBoYXZlIGFuIGludHVpdGl2ZSBzeW50YXggdGhhdAorY29ycmVzcG9uZHMgdG8gdGhlc2UgQyBtYWNyb3MufS4KKworQGl0ZW0KK0phdmEgbGFja3MgdW5pb25zLCBzbyBAY29kZXsldW5pb259IGhhcyBubyBlZmZlY3QuICBJbnN0ZWFkLCBzZW1hbnRpYwordmFsdWVzIGhhdmUgYSBjb21tb24gYmFzZSB0eXBlOiBAY29kZXtPYmplY3R9IG9yIGFzIHNwZWNpZmllZCBieQorQHNhbXB7JWRlZmluZSBzdHlwZX0uICBBbmdsZSBicmFja2V0cyBvbiBAY29kZXsldG9rZW59LCBAY29kZXt0eXBlfSwKK0Bjb2RleyRAdmFye259fSBhbmQgQGNvZGV7JCR9IHNwZWNpZnkgc3VidHlwZXMgcmF0aGVyIHRoYW4gZmllbGRzIG9mCithbiB1bmlvbi4gIFRoZSB0eXBlIG9mIEBjb2RleyQkfSwgZXZlbiB3aXRoIGFuZ2xlIGJyYWNrZXRzLCBpcyB0aGUgYmFzZQordHlwZSBzaW5jZSBKYXZhIGNhc3RzIGFyZSBub3QgYWxsb3cgb24gdGhlIGxlZnQtaGFuZCBzaWRlIG9mIGFzc2lnbm1lbnRzLgorQWxzbywgQGNvZGV7JEB2YXJ7bn19IGFuZCBAY29kZXtAQEB2YXJ7bn19IGFyZSBub3QgYWxsb3dlZCBvbiB0aGUKK2xlZnQtaGFuZCBzaWRlIG9mIGFzc2lnbm1lbnRzLiBAeHJlZntKYXZhIFNlbWFudGljIFZhbHVlc30sIGFuZAorQHJlZntKYXZhIEFjdGlvbiBGZWF0dXJlc30uCisKK0BpdGVtCitUaGUgcHJvbG9ndWUgZGVjbGFyYXRpb25zIGhhdmUgYSBkaWZmZXJlbnQgbWVhbmluZyB0aGFuIGluIEMvQysrIGNvZGUuCitAdGFibGUgQGFzaXMKK0BpdGVtIEBjb2RleyVjb2RlIGltcG9ydHN9CitibG9ja3MgYXJlIHBsYWNlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBKYXZhIHNvdXJjZSBjb2RlLiAgVGhleSBtYXkKK2luY2x1ZGUgY29weXJpZ2h0IG5vdGljZXMuICBGb3IgYSBAY29kZXtwYWNrYWdlfSBkZWNsYXJhdGlvbnMsIGl0IGlzCitzdWdnZXN0ZWQgdG8gdXNlIEBjb2RleyVkZWZpbmUgcGFja2FnZX0gaW5zdGVhZC4KKworQGl0ZW0gdW5xdWFsaWZpZWQgQGNvZGV7JWNvZGV9CitibG9ja3MgYXJlIHBsYWNlZCBpbnNpZGUgdGhlIHBhcnNlciBjbGFzcy4KKworQGl0ZW0gQGNvZGV7JWNvZGUgbGV4ZXJ9CitibG9ja3MsIGlmIHNwZWNpZmllZCwgc2hvdWxkIGluY2x1ZGUgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZQorc2Nhbm5lci4gIElmIHRoZXJlIGlzIG5vIHN1Y2ggYmxvY2ssIHRoZSBzY2FubmVyIGNhbiBiZSBhbnkgY2xhc3MKK3RoYXQgaW1wbGVtZW50cyB0aGUgYXBwcm9wcmlhdGUgaW50ZXJmYWNlIChAcHhyZWZ7SmF2YSBTY2FubmVyCitJbnRlcmZhY2V9KS4KK0BlbmQgdGFibGUKKworT3RoZXIgQGNvZGV7JWNvZGV9IGJsb2NrcyBhcmUgbm90IHN1cHBvcnRlZCBpbiBKYXZhIHBhcnNlcnMuCitJbiBwYXJ0aWN1bGFyLCBAY29kZXslQHsgQGRvdHN7fSAlQH19IGJsb2NrcyBzaG91bGQgbm90IGJlIHVzZWQKK2FuZCBtYXkgZ2l2ZSBhbiBlcnJvciBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24uCisKK1RoZSBlcGlsb2d1ZSBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyBpbiBDL0MrKyBjb2RlIGFuZCBpdCBjYW4KK2JlIHVzZWQgdG8gZGVmaW5lIG90aGVyIGNsYXNzZXMgdXNlZCBieSB0aGUgcGFyc2VyIEBlbXBoe291dHNpZGV9Cit0aGUgcGFyc2VyIGNsYXNzLgorQGVuZCBpdGVtaXplCisKKworQG5vZGUgSmF2YSBEZWNsYXJhdGlvbnMgU3VtbWFyeQorQHN1YnNlY3Rpb24gSmF2YSBEZWNsYXJhdGlvbnMgU3VtbWFyeQorCitUaGlzIHN1bW1hcnkgb25seSBpbmNsdWRlIGRlY2xhcmF0aW9ucyBzcGVjaWZpYyB0byBKYXZhIG9yIGhhdmUgc3BlY2lhbAorbWVhbmluZyB3aGVuIHVzZWQgaW4gYSBKYXZhIHBhcnNlci4KKworQGRlZmZuIHtEaXJlY3RpdmV9IHslbGFuZ3VhZ2UgIkphdmEifQorR2VuZXJhdGUgYSBKYXZhIGNsYXNzIGZvciB0aGUgcGFyc2VyLgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gJWxleC1wYXJhbSBAe0B2YXJ7dHlwZX0gQHZhcntuYW1lfUB9CitBIHBhcmFtZXRlciBmb3IgdGhlIGxleGVyIGNsYXNzIGRlZmluZWQgYnkgQGNvZGV7JWNvZGUgbGV4ZXJ9CitAZW1waHtvbmx5fSwgYWRkZWQgYXMgcGFyYW1ldGVycyB0byB0aGUgbGV4ZXIgY29uc3RydWN0b3IgYW5kIHRoZSBwYXJzZXIKK2NvbnN0cnVjdG9yIHRoYXQgQGVtcGh7Y3JlYXRlc30gYSBsZXhlci4gIERlZmF1bHQgaXMgbm9uZS4KK0B4cmVme0phdmEgU2Nhbm5lciBJbnRlcmZhY2V9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gJW5hbWUtcHJlZml4ICJAdmFye3ByZWZpeH0iCitUaGUgcHJlZml4IG9mIHRoZSBwYXJzZXIgY2xhc3MgbmFtZSBAY29kZXtAdmFye3ByZWZpeH1QYXJzZXJ9IGlmCitAY29kZXslZGVmaW5lIHBhcnNlcl9jbGFzc19uYW1lfSBpcyBub3QgdXNlZC4gIERlZmF1bHQgaXMgQGNvZGV7WVl9LgorQHhyZWZ7SmF2YSBCaXNvbiBJbnRlcmZhY2V9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gJXBhcnNlLXBhcmFtIEB7QHZhcnt0eXBlfSBAdmFye25hbWV9QH0KK0EgcGFyYW1ldGVyIGZvciB0aGUgcGFyc2VyIGNsYXNzIGFkZGVkIGFzIHBhcmFtZXRlcnMgdG8gY29uc3RydWN0b3IocykKK2FuZCBhcyBmaWVsZHMgaW5pdGlhbGl6ZWQgYnkgdGhlIGNvbnN0cnVjdG9yKHMpLiAgRGVmYXVsdCBpcyBub25lLgorQHhyZWZ7SmF2YSBQYXJzZXIgSW50ZXJmYWNlfS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtEaXJlY3RpdmV9ICV0b2tlbiA8QHZhcnt0eXBlfT4gQHZhcnt0b2tlbn0gQGRvdHN7fQorRGVjbGFyZSB0b2tlbnMuICBOb3RlIHRoYXQgdGhlIGFuZ2xlIGJyYWNrZXRzIGVuY2xvc2UgYSBKYXZhIEBlbXBoe3R5cGV9LgorQHhyZWZ7SmF2YSBTZW1hbnRpYyBWYWx1ZXN9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gJXR5cGUgPEB2YXJ7dHlwZX0+IEB2YXJ7bm9udGVybWluYWx9IEBkb3Rze30KK0RlY2xhcmUgdGhlIHR5cGUgb2Ygbm9udGVybWluYWxzLiAgTm90ZSB0aGF0IHRoZSBhbmdsZSBicmFja2V0cyBlbmNsb3NlCithIEphdmEgQGVtcGh7dHlwZX0uCitAeHJlZntKYXZhIFNlbWFudGljIFZhbHVlc30uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSAlY29kZSBAeyBAdmFye2NvZGV9IEBkb3Rze30gQH0KK0NvZGUgYXBwZW5kZWQgdG8gdGhlIGluc2lkZSBvZiB0aGUgcGFyc2VyIGNsYXNzLgorQHhyZWZ7SmF2YSBEaWZmZXJlbmNlc30uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSB7JWNvZGUgaW1wb3J0c30gQHsgQHZhcntjb2RlfSBAZG90c3t9IEB9CitDb2RlIGluc2VydGVkIGp1c3QgYWZ0ZXIgdGhlIEBjb2Rle3BhY2thZ2V9IGRlY2xhcmF0aW9uLgorQHhyZWZ7SmF2YSBEaWZmZXJlbmNlc30uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSB7JWNvZGUgbGV4ZXJ9IEB7IEB2YXJ7Y29kZX0gQGRvdHN7fSBAfQorQ29kZSBhZGRlZCB0byB0aGUgYm9keSBvZiBhIGlubmVyIGxleGVyIGNsYXNzIHdpdGhpbiB0aGUgcGFyc2VyIGNsYXNzLgorQHhyZWZ7SmF2YSBTY2FubmVyIEludGVyZmFjZX0uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSAlJSBAdmFye2NvZGV9IEBkb3Rze30KK0NvZGUgKGFmdGVyIHRoZSBzZWNvbmQgQGNvZGV7JSV9KSBhcHBlbmRlZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLAorQGVtcGh7b3V0c2lkZX0gdGhlIHBhcnNlciBjbGFzcy4KK0B4cmVme0phdmEgRGlmZmVyZW5jZXN9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gJUB7IEB2YXJ7Y29kZX0gQGRvdHN7fSAlQH0KK05vdCBzdXBwb3J0ZWQuICBVc2UgQGNvZGV7JWNvZGUgaW1wb3J0fSBpbnN0ZWFkLgorQHhyZWZ7SmF2YSBEaWZmZXJlbmNlc30uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSB7JWRlZmluZSBhYnN0cmFjdH0KK1doZXRoZXIgdGhlIHBhcnNlciBjbGFzcyBpcyBkZWNsYXJlZCBAY29kZXthYnN0cmFjdH0uICBEZWZhdWx0IGlzIGZhbHNlLgorQHhyZWZ7SmF2YSBCaXNvbiBJbnRlcmZhY2V9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0geyVkZWZpbmUgZXh0ZW5kc30gIkB2YXJ7c3VwZXJjbGFzc30iCitUaGUgc3VwZXJjbGFzcyBvZiB0aGUgcGFyc2VyIGNsYXNzLiAgRGVmYXVsdCBpcyBub25lLgorQHhyZWZ7SmF2YSBCaXNvbiBJbnRlcmZhY2V9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0geyVkZWZpbmUgZmluYWx9CitXaGV0aGVyIHRoZSBwYXJzZXIgY2xhc3MgaXMgZGVjbGFyZWQgQGNvZGV7ZmluYWx9LiAgRGVmYXVsdCBpcyBmYWxzZS4KK0B4cmVme0phdmEgQmlzb24gSW50ZXJmYWNlfS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtEaXJlY3RpdmV9IHslZGVmaW5lIGltcGxlbWVudHN9ICJAdmFye2ludGVyZmFjZXN9IgorVGhlIGltcGxlbWVudGVkIGludGVyZmFjZXMgb2YgdGhlIHBhcnNlciBjbGFzcywgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdC4KK0RlZmF1bHQgaXMgbm9uZS4KK0B4cmVme0phdmEgQmlzb24gSW50ZXJmYWNlfS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtEaXJlY3RpdmV9IHslZGVmaW5lIGxleF90aHJvd3N9ICJAdmFye2V4Y2VwdGlvbnN9IgorVGhlIGV4Y2VwdGlvbnMgdGhyb3duIGJ5IHRoZSBAY29kZXt5eWxleH0gbWV0aG9kIG9mIHRoZSBsZXhlciwgYQorY29tbWEtc2VwYXJhdGVkIGxpc3QuICBEZWZhdWx0IGlzIEBjb2Rle2phdmEuaW8uSU9FeGNlcHRpb259LgorQHhyZWZ7SmF2YSBTY2FubmVyIEludGVyZmFjZX0uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSB7JWRlZmluZSBhcGkubG9jYXRpb24udHlwZX0gIkB2YXJ7Y2xhc3N9IgorVGhlIG5hbWUgb2YgdGhlIGNsYXNzIHVzZWQgZm9yIGxvY2F0aW9ucyAoYSByYW5nZSBiZXR3ZWVuIHR3bworcG9zaXRpb25zKS4gIFRoaXMgY2xhc3MgaXMgZ2VuZXJhdGVkIGFzIGFuIGlubmVyIGNsYXNzIG9mIHRoZSBwYXJzZXIKK2NsYXNzIGJ5IEBjb21tYW5ke2Jpc29ufS4gIERlZmF1bHQgaXMgQGNvZGV7TG9jYXRpb259LgorRm9ybWVybHkgbmFtZWQgQGNvZGV7bG9jYXRpb25fdHlwZX0uCitAeHJlZntKYXZhIExvY2F0aW9uIFZhbHVlc30uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSB7JWRlZmluZSBwYWNrYWdlfSAiQHZhcntwYWNrYWdlfSIKK1RoZSBwYWNrYWdlIHRvIHB1dCB0aGUgcGFyc2VyIGNsYXNzIGluLiAgRGVmYXVsdCBpcyBub25lLgorQHhyZWZ7SmF2YSBCaXNvbiBJbnRlcmZhY2V9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0geyVkZWZpbmUgcGFyc2VyX2NsYXNzX25hbWV9ICJAdmFye25hbWV9IgorVGhlIG5hbWUgb2YgdGhlIHBhcnNlciBjbGFzcy4gIERlZmF1bHQgaXMgQGNvZGV7WVlQYXJzZXJ9IG9yCitAY29kZXtAdmFye25hbWUtcHJlZml4fVBhcnNlcn0uCitAeHJlZntKYXZhIEJpc29uIEludGVyZmFjZX0uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSB7JWRlZmluZSBhcGkucG9zaXRpb24udHlwZX0gIkB2YXJ7Y2xhc3N9IgorVGhlIG5hbWUgb2YgdGhlIGNsYXNzIHVzZWQgZm9yIHBvc2l0aW9ucy4gVGhpcyBjbGFzcyBtdXN0IGJlIHN1cHBsaWVkIGJ5Cit0aGUgdXNlci4gIERlZmF1bHQgaXMgQGNvZGV7UG9zaXRpb259LgorRm9ybWVybHkgbmFtZWQgQGNvZGV7cG9zaXRpb25fdHlwZX0uCitAeHJlZntKYXZhIExvY2F0aW9uIFZhbHVlc30uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSB7JWRlZmluZSBwdWJsaWN9CitXaGV0aGVyIHRoZSBwYXJzZXIgY2xhc3MgaXMgZGVjbGFyZWQgQGNvZGV7cHVibGljfS4gIERlZmF1bHQgaXMgZmFsc2UuCitAeHJlZntKYXZhIEJpc29uIEludGVyZmFjZX0uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSB7JWRlZmluZSBzdHlwZX0gIkB2YXJ7Y2xhc3N9IgorVGhlIGJhc2UgdHlwZSBvZiBzZW1hbnRpYyB2YWx1ZXMuICBEZWZhdWx0IGlzIEBjb2Rle09iamVjdH0uCitAeHJlZntKYXZhIFNlbWFudGljIFZhbHVlc30uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSB7JWRlZmluZSBzdHJpY3RmcH0KK1doZXRoZXIgdGhlIHBhcnNlciBjbGFzcyBpcyBkZWNsYXJlZCBAY29kZXtzdHJpY3RmcH0uICBEZWZhdWx0IGlzIGZhbHNlLgorQHhyZWZ7SmF2YSBCaXNvbiBJbnRlcmZhY2V9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0geyVkZWZpbmUgdGhyb3dzfSAiQHZhcntleGNlcHRpb25zfSIKK1RoZSBleGNlcHRpb25zIHRocm93biBieSB1c2VyLXN1cHBsaWVkIHBhcnNlciBhY3Rpb25zIGFuZAorQGNvZGV7JWluaXRpYWwtYWN0aW9ufSwgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdC4gIERlZmF1bHQgaXMgbm9uZS4KK0B4cmVme0phdmEgUGFyc2VyIEludGVyZmFjZX0uCitAZW5kIGRlZmZuCisKKworQGMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBGQVEKKworQG5vZGUgRkFRCitAY2hhcHRlciBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucworQGNpbmRleCBmcmVxdWVudGx5IGFza2VkIHF1ZXN0aW9ucworQGNpbmRleCBxdWVzdGlvbnMKKworU2V2ZXJhbCBxdWVzdGlvbnMgYWJvdXQgQmlzb24gY29tZSB1cCBvY2Nhc2lvbmFsbHkuICBIZXJlIHNvbWUgb2YgdGhlbQorYXJlIGFkZHJlc3NlZC4KKworQG1lbnUKKyogTWVtb3J5IEV4aGF1c3RlZDo6ICAgICAgICAgICAgQnJlYWtpbmcgdGhlIFN0YWNrIExpbWl0cworKiBIb3cgQ2FuIEkgUmVzZXQgdGhlIFBhcnNlcjo6ICBAY29kZXt5eXBhcnNlfSBLZWVwcyBzb21lIFN0YXRlCisqIFN0cmluZ3MgYXJlIERlc3Ryb3llZDo6ICAgICAgIEBjb2Rle3l5bHZhbH0gTG9zZXMgVHJhY2sgb2YgU3RyaW5ncworKiBJbXBsZW1lbnRpbmcgR290b3MvTG9vcHM6OiAgICBDb250cm9sIEZsb3cgaW4gdGhlIENhbGN1bGF0b3IKKyogTXVsdGlwbGUgc3RhcnQtc3ltYm9sczo6ICAgICAgRmFjdG9yaW5nIGNsb3NlbHkgcmVsYXRlZCBncmFtbWFycworKiBTZWN1cmU/ICBDb25mb3JtPzo6ICAgICAgICAgICBJcyBCaXNvbiBQT1NJWCBzYWZlPworKiBJIGNhbid0IGJ1aWxkIEJpc29uOjogICAgICAgICBUcm91Ymxlc2hvb3RpbmcKKyogV2hlcmUgY2FuIEkgZmluZCBoZWxwPzo6ICAgICAgVHJvdWJsZXNob3V0aW5nCisqIEJ1ZyBSZXBvcnRzOjogICAgICAgICAgICAgICAgIFRyb3VibGVyZXBvcnRpbmcKKyogTW9yZSBMYW5ndWFnZXM6OiAgICAgICAgICAgICAgUGFyc2VycyBpbiBDKyssIEphdmEsIGFuZCBzbyBvbgorKiBCZXRhIFRlc3Rpbmc6OiAgICAgICAgICAgICAgICBFeHBlcmltZW50aW5nIGRldmVsb3BtZW50IHZlcnNpb25zCisqIE1haWxpbmcgTGlzdHM6OiAgICAgICAgICAgICAgIE1lZXRpbmcgb3RoZXIgQmlzb24gdXNlcnMKK0BlbmQgbWVudQorCitAbm9kZSBNZW1vcnkgRXhoYXVzdGVkCitAc2VjdGlvbiBNZW1vcnkgRXhoYXVzdGVkCisKK0BxdW90YXRpb24KK015IHBhcnNlciByZXR1cm5zIHdpdGggZXJyb3Igd2l0aCBhIEBzYW1we21lbW9yeSBleGhhdXN0ZWR9CittZXNzYWdlLiAgV2hhdCBjYW4gSSBkbz8KK0BlbmQgcXVvdGF0aW9uCisKK1RoaXMgcXVlc3Rpb24gaXMgYWxyZWFkeSBhZGRyZXNzZWQgZWxzZXdoZXJlLCBzZWUgQHJlZntSZWN1cnNpb24sICxSZWN1cnNpdmUKK1J1bGVzfS4KKworQG5vZGUgSG93IENhbiBJIFJlc2V0IHRoZSBQYXJzZXIKK0BzZWN0aW9uIEhvdyBDYW4gSSBSZXNldCB0aGUgUGFyc2VyCisKK1RoZSBmb2xsb3dpbmcgcGhlbm9tZW5vbiBoYXMgc2V2ZXJhbCBzeW1wdG9tcywgcmVzdWx0aW5nIGluIHRoZQorZm9sbG93aW5nIHR5cGljYWwgcXVlc3Rpb25zOgorCitAcXVvdGF0aW9uCitJIGludm9rZSBAY29kZXt5eXBhcnNlfSBzZXZlcmFsIHRpbWVzLCBhbmQgb24gY29ycmVjdCBpbnB1dCBpdCB3b3JrcworcHJvcGVybHk7IGJ1dCB3aGVuIGEgcGFyc2UgZXJyb3IgaXMgZm91bmQsIGFsbCB0aGUgb3RoZXIgY2FsbHMgZmFpbAordG9vLiAgSG93IGNhbiBJIHJlc2V0IHRoZSBlcnJvciBmbGFnIG9mIEBjb2Rle3l5cGFyc2V9PworQGVuZCBxdW90YXRpb24KKworQG5vaW5kZW50CitvcgorCitAcXVvdGF0aW9uCitNeSBwYXJzZXIgaW5jbHVkZXMgc3VwcG9ydCBmb3IgYW4gQHNhbXB7I2luY2x1ZGV9LWxpa2UgZmVhdHVyZSwgaW4KK3doaWNoIGNhc2UgSSBydW4gQGNvZGV7eXlwYXJzZX0gZnJvbSBAY29kZXt5eXBhcnNlfS4gIFRoaXMgZmFpbHMKK2FsdGhvdWdoIEkgZGlkIHNwZWNpZnkgQHNhbXB7JWRlZmluZSBhcGkucHVyZSBmdWxsfS4KK0BlbmQgcXVvdGF0aW9uCisKK1RoZXNlIHByb2JsZW1zIHR5cGljYWxseSBjb21lIG5vdCBmcm9tIEJpc29uIGl0c2VsZiwgYnV0IGZyb20KK0xleC1nZW5lcmF0ZWQgc2Nhbm5lcnMuICBCZWNhdXNlIHRoZXNlIHNjYW5uZXJzIHVzZSBsYXJnZSBidWZmZXJzIGZvcgorc3BlZWQsIHRoZXkgbWlnaHQgbm90IG5vdGljZSBhIGNoYW5nZSBvZiBpbnB1dCBmaWxlLiAgQXMgYQorZGVtb25zdHJhdGlvbiwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBzb3VyY2UgZmlsZSwKK0BmaWxle2ZpcnN0LWxpbmUubH06CisKK0BleGFtcGxlCitAZ3JvdXAKKyVAeworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CislQH0KK0BlbmQgZ3JvdXAKKyUlCisuKlxuICAgIEVDSE87IHJldHVybiAxOworJSUKK0Bncm91cAoraW50Cit5eXBhcnNlIChjaGFyIGNvbnN0ICpmaWxlKQorQHsKKyAgeXlpbiA9IGZvcGVuIChmaWxlLCAiciIpOworICBpZiAoIXl5aW4pCisgICAgQHsKKyAgICAgIHBlcnJvciAoImZvcGVuIik7CisgICAgICBleGl0IChFWElUX0ZBSUxVUkUpOworICAgIEB9CitAZW5kIGdyb3VwCitAZ3JvdXAKKyAgLyogT25lIHRva2VuIG9ubHkuICAqLworICB5eWxleCAoKTsKKyAgaWYgKGZjbG9zZSAoeXlpbikgIT0gMCkKKyAgICBAeworICAgICAgcGVycm9yICgiZmNsb3NlIik7CisgICAgICBleGl0IChFWElUX0ZBSUxVUkUpOworICAgIEB9CisgIHJldHVybiAwOworQH0KK0BlbmQgZ3JvdXAKKworQGdyb3VwCitpbnQKK21haW4gKHZvaWQpCitAeworICB5eXBhcnNlICgiaW5wdXQiKTsKKyAgeXlwYXJzZSAoImlucHV0Iik7CisgIHJldHVybiAwOworQH0KK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK0lmIHRoZSBmaWxlIEBmaWxle2lucHV0fSBjb250YWlucworCitAZXhhbXBsZQoraW5wdXQ6MTogSGVsbG8sCitpbnB1dDoyOiBXb3JsZCEKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK3RoZW4gaW5zdGVhZCBvZiBnZXR0aW5nIHRoZSBmaXJzdCBsaW5lIHR3aWNlLCB5b3UgZ2V0OgorCitAZXhhbXBsZQorJCBAa2Jke2ZsZXggLW9maXJzdC1saW5lLmMgZmlyc3QtbGluZS5sfQorJCBAa2Jke2djYyAgLW9maXJzdC1saW5lICAgZmlyc3QtbGluZS5jIC1sbH0KKyQgQGtiZHsuL2ZpcnN0LWxpbmV9CitpbnB1dDoxOiBIZWxsbywKK2lucHV0OjI6IFdvcmxkIQorQGVuZCBleGFtcGxlCisKK1RoZXJlZm9yZSwgd2hlbmV2ZXIgeW91IGNoYW5nZSBAY29kZXt5eWlufSwgeW91IG11c3QgdGVsbCB0aGUKK0xleC1nZW5lcmF0ZWQgc2Nhbm5lciB0byBkaXNjYXJkIGl0cyBjdXJyZW50IGJ1ZmZlciBhbmQgc3dpdGNoIHRvIHRoZQorbmV3IG9uZS4gIFRoaXMgZGVwZW5kcyB1cG9uIHlvdXIgaW1wbGVtZW50YXRpb24gb2YgTGV4OyBzZWUgaXRzCitkb2N1bWVudGF0aW9uIGZvciBtb3JlLiAgRm9yIEZsZXgsIGl0IHN1ZmZpY2VzIHRvIGNhbGwKK0BzYW1we1lZX0ZMVVNIX0JVRkZFUn0gYWZ0ZXIgZWFjaCBjaGFuZ2UgdG8gQGNvZGV7eXlpbn0uICBJZiB5b3VyCitGbGV4LWdlbmVyYXRlZCBzY2FubmVyIG5lZWRzIHRvIHJlYWQgZnJvbSBzZXZlcmFsIGlucHV0IHN0cmVhbXMgdG8KK2hhbmRsZSBmZWF0dXJlcyBsaWtlIGluY2x1ZGUgZmlsZXMsIHlvdSBtaWdodCBjb25zaWRlciB1c2luZyBGbGV4CitmdW5jdGlvbnMgbGlrZSBAc2FtcHt5eV9zd2l0Y2hfdG9fYnVmZmVyfSB0aGF0IG1hbmlwdWxhdGUgbXVsdGlwbGUKK2lucHV0IGJ1ZmZlcnMuCisKK0lmIHlvdXIgRmxleC1nZW5lcmF0ZWQgc2Nhbm5lciB1c2VzIHN0YXJ0IGNvbmRpdGlvbnMgKEBweHJlZntTdGFydAorY29uZGl0aW9ucywgLCBTdGFydCBjb25kaXRpb25zLCBmbGV4LCBUaGUgRmxleCBNYW51YWx9KSwgeW91IG1pZ2h0CithbHNvIHdhbnQgdG8gcmVzZXQgdGhlIHNjYW5uZXIncyBzdGF0ZSwgaS5lLiwgZ28gYmFjayB0byB0aGUgaW5pdGlhbAorc3RhcnQgY29uZGl0aW9uLCB0aHJvdWdoIGEgY2FsbCB0byBAc2FtcHtCRUdJTiAoMCl9LgorCitAbm9kZSBTdHJpbmdzIGFyZSBEZXN0cm95ZWQKK0BzZWN0aW9uIFN0cmluZ3MgYXJlIERlc3Ryb3llZAorCitAcXVvdGF0aW9uCitNeSBwYXJzZXIgc2VlbXMgdG8gZGVzdHJveSBvbGQgc3RyaW5ncywgb3IgbWF5YmUgaXQgbG9zZXMgdHJhY2sgb2YKK3RoZW0uICBJbnN0ZWFkIG9mIHJlcG9ydGluZyBAc2FtcHsiZm9vIiwgImJhciJ9LCBpdCByZXBvcnRzCitAc2FtcHsiYmFyIiwgImJhciJ9LCBvciBldmVuIEBzYW1weyJmb29cbmJhciIsICJiYXIifS4KK0BlbmQgcXVvdGF0aW9uCisKK1RoaXMgZXJyb3IgaXMgcHJvYmFibHkgdGhlIHNpbmdsZSBtb3N0IGZyZXF1ZW50IGBgYnVnIHJlcG9ydCcnIHNlbnQgdG8KK0Jpc29uIGxpc3RzLCBidXQgaXMgb25seSBjb25jZXJuZWQgd2l0aCBhIG1pc3VuZGVyc3RhbmRpbmcgb2YgdGhlIHJvbGUKK29mIHRoZSBzY2FubmVyLiAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBMZXggY29kZToKKworQGV4YW1wbGUKK0Bncm91cAorJUB7CisjaW5jbHVkZSA8c3RkaW8uaD4KK2NoYXIgKnl5bHZhbCA9IE5VTEw7CislQH0KK0BlbmQgZ3JvdXAKK0Bncm91cAorJSUKKy4qICAgIHl5bHZhbCA9IHl5dGV4dDsgcmV0dXJuIDE7CitcbiAgICAvKiBJR05PUkUgKi8KKyUlCitAZW5kIGdyb3VwCitAZ3JvdXAKK2ludAorbWFpbiAoKQorQHsKKyAgLyogU2ltaWxhciB0byB1c2luZyAkMSwgJDIgaW4gYSBCaXNvbiBhY3Rpb24uICAqLworICBjaGFyICpmc3QgPSAoeXlsZXggKCksIHl5bHZhbCk7CisgIGNoYXIgKnNuZCA9ICh5eWxleCAoKSwgeXlsdmFsKTsKKyAgcHJpbnRmICgiXCIlc1wiLCBcIiVzXCJcbiIsIGZzdCwgc25kKTsKKyAgcmV0dXJuIDA7CitAfQorQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK0lmIHlvdSBjb21waWxlIGFuZCBydW4gdGhpcyBjb2RlLCB5b3UgZ2V0OgorCitAZXhhbXBsZQorJCBAa2Jke2ZsZXggLW9zcGxpdC1saW5lcy5jIHNwbGl0LWxpbmVzLmx9CiskIEBrYmR7Z2NjICAtb3NwbGl0LWxpbmVzICAgc3BsaXQtbGluZXMuYyAtbGx9CiskIEBrYmR7cHJpbnRmICdvbmVcbnR3b1xuJyB8IC4vc3BsaXQtbGluZXN9Cisib25lCit0d28iLCAidHdvIgorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAordGhpcyBpcyBiZWNhdXNlIEBjb2Rle3l5dGV4dH0gaXMgYSBidWZmZXIgcHJvdmlkZWQgZm9yIEBlbXBoe3JlYWRpbmd9CitpbiB0aGUgYWN0aW9uLCBidXQgaWYgeW91IHdhbnQgdG8ga2VlcCBpdCwgeW91IGhhdmUgdG8gZHVwbGljYXRlIGl0CisoZS5nLiwgdXNpbmcgQGNvZGV7c3RyZHVwfSkuICBOb3RlIHRoYXQgdGhlIG91dHB1dCBtYXkgZGVwZW5kIG9uIGhvdworeW91ciBpbXBsZW1lbnRhdGlvbiBvZiBMZXggaGFuZGxlcyBAY29kZXt5eXRleHR9LiAgRm9yIGluc3RhbmNlLCB3aGVuCitnaXZlbiB0aGUgTGV4IGNvbXBhdGliaWxpdHkgb3B0aW9uIEBvcHRpb257LWx9ICh3aGljaCB0cmlnZ2VycyB0aGUKK29wdGlvbiBAc2FtcHslYXJyYXl9KSBGbGV4IGdlbmVyYXRlcyBhIGRpZmZlcmVudCBiZWhhdmlvcjoKKworQGV4YW1wbGUKKyQgQGtiZHtmbGV4IC1sIC1vc3BsaXQtbGluZXMuYyBzcGxpdC1saW5lcy5sfQorJCBAa2Jke2djYyAgICAgLW9zcGxpdC1saW5lcyAgIHNwbGl0LWxpbmVzLmMgLWxsfQorJCBAa2Jke3ByaW50ZiAnb25lXG50d29cbicgfCAuL3NwbGl0LWxpbmVzfQorInR3byIsICJ0d28iCitAZW5kIGV4YW1wbGUKKworCitAbm9kZSBJbXBsZW1lbnRpbmcgR290b3MvTG9vcHMKK0BzZWN0aW9uIEltcGxlbWVudGluZyBHb3Rvcy9Mb29wcworCitAcXVvdGF0aW9uCitNeSBzaW1wbGUgY2FsY3VsYXRvciBzdXBwb3J0cyB2YXJpYWJsZXMsIGFzc2lnbm1lbnRzLCBhbmQgZnVuY3Rpb25zLAorYnV0IGhvdyBjYW4gSSBpbXBsZW1lbnQgZ290b3MsIG9yIGxvb3BzPworQGVuZCBxdW90YXRpb24KKworQWx0aG91Z2ggdmVyeSBwZWRhZ29naWNhbCwgdGhlIGV4YW1wbGVzIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudCBibHVyCit0aGUgZGlzdGluY3Rpb24gdG8gbWFrZSBiZXR3ZWVuIHRoZSBwYXJzZXItLS13aG9zZSBqb2IgaXMgdG8gcmVjb3ZlcgordGhlIHN0cnVjdHVyZSBvZiBhIHRleHQgYW5kIHRvIHRyYW5zbWl0IGl0IHRvIHN1YnNlcXVlbnQgbW9kdWxlcyBvZgordGhlIHByb2dyYW0tLS1hbmQgdGhlIHByb2Nlc3NpbmcgKHN1Y2ggYXMgdGhlIGV4ZWN1dGlvbikgb2YgdGhpcworc3RydWN0dXJlLiAgVGhpcyB3b3JrcyB3ZWxsIHdpdGggc28gY2FsbGVkIHN0cmFpZ2h0IGxpbmUgcHJvZ3JhbXMsCitpLmUuLCBwcmVjaXNlbHkgdGhvc2UgdGhhdCBoYXZlIGEgc3RyYWlnaHRmb3J3YXJkIGV4ZWN1dGlvbiBtb2RlbDoKK2V4ZWN1dGUgc2ltcGxlIGluc3RydWN0aW9ucyBvbmUgYWZ0ZXIgdGhlIG90aGVycy4KKworQGNpbmRleCBhYnN0cmFjdCBzeW50YXggdHJlZQorQGNpbmRleCBBU1QKK0lmIHlvdSB3YW50IGEgcmljaGVyIG1vZGVsLCB5b3Ugd2lsbCBwcm9iYWJseSBuZWVkIHRvIHVzZSB0aGUgcGFyc2VyCit0byBjb25zdHJ1Y3QgYSB0cmVlIHRoYXQgZG9lcyByZXByZXNlbnQgdGhlIHN0cnVjdHVyZSBpdCBoYXMKK3JlY292ZXJlZDsgdGhpcyB0cmVlIGlzIHVzdWFsbHkgY2FsbGVkIHRoZSBAZGZue2Fic3RyYWN0IHN5bnRheCB0cmVlfSwKK29yIEBkZm57QVNUfSBmb3Igc2hvcnQuICBUaGVuLCB3YWxraW5nIHRocm91Z2ggdGhpcyB0cmVlLAordHJhdmVyc2luZyBpdCBpbiB2YXJpb3VzIHdheXMsIHdpbGwgZW5hYmxlIHRyZWF0bWVudHMgc3VjaCBhcyBpdHMKK2V4ZWN1dGlvbiBvciBpdHMgdHJhbnNsYXRpb24sIHdoaWNoIHdpbGwgcmVzdWx0IGluIGFuIGludGVycHJldGVyIG9yIGEKK2NvbXBpbGVyLgorCitUaGlzIHRvcGljIGlzIHdheSBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMgbWFudWFsLCBhbmQgdGhlIHJlYWRlciBpcworaW52aXRlZCB0byBjb25zdWx0IHRoZSBkZWRpY2F0ZWQgbGl0ZXJhdHVyZS4KKworCitAbm9kZSBNdWx0aXBsZSBzdGFydC1zeW1ib2xzCitAc2VjdGlvbiBNdWx0aXBsZSBzdGFydC1zeW1ib2xzCisKK0BxdW90YXRpb24KK0kgaGF2ZSBzZXZlcmFsIGNsb3NlbHkgcmVsYXRlZCBncmFtbWFycywgYW5kIEkgd291bGQgbGlrZSB0byBzaGFyZSB0aGVpcgoraW1wbGVtZW50YXRpb25zLiAgSW4gZmFjdCwgSSBjb3VsZCB1c2UgYSBzaW5nbGUgZ3JhbW1hciBidXQgd2l0aAorbXVsdGlwbGUgZW50cnkgcG9pbnRzLgorQGVuZCBxdW90YXRpb24KKworQmlzb24gZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBzdGFydC1zeW1ib2xzLCBidXQgdGhlcmUgaXMgYSB2ZXJ5CitzaW1wbGUgbWVhbnMgdG8gc2ltdWxhdGUgdGhlbS4gIElmIEBjb2Rle2Zvb30gYW5kIEBjb2Rle2Jhcn0gYXJlIHRoZSB0d28KK3BzZXVkbyBzdGFydC1zeW1ib2xzLCB0aGVuIGludHJvZHVjZSB0d28gbmV3IHRva2Vucywgc2F5CitAY29kZXtTVEFSVF9GT099IGFuZCBAY29kZXtTVEFSVF9CQVJ9LCBhbmQgdXNlIHRoZW0gYXMgc3dpdGNoZXMgZnJvbSB0aGUKK3JlYWwgc3RhcnQtc3ltYm9sOgorCitAZXhhbXBsZQorJXRva2VuIFNUQVJUX0ZPTyBTVEFSVF9CQVI7Cislc3RhcnQgc3RhcnQ7CitzdGFydDoKKyAgU1RBUlRfRk9PIGZvbworfCBTVEFSVF9CQVIgYmFyOworQGVuZCBleGFtcGxlCisKK1RoZXNlIHRva2VucyBwcmV2ZW50cyB0aGUgaW50cm9kdWN0aW9uIG9mIG5ldyBjb25mbGljdHMuICBBcyBmYXIgYXMgdGhlCitwYXJzZXIgZ29lcywgdGhhdCBpcyBhbGwgdGhhdCBpcyBuZWVkZWQuCisKK05vdyB0aGUgZGlmZmljdWx0IHBhcnQgaXMgZW5zdXJpbmcgdGhhdCB0aGUgc2Nhbm5lciB3aWxsIHNlbmQgdGhlc2UKK3Rva2VucyBmaXJzdC4gIElmIHlvdXIgc2Nhbm5lciBpcyBoYW5kLXdyaXR0ZW4sIHRoYXQgc2hvdWxkIGJlCitzdHJhaWdodGZvcndhcmQuICBJZiB5b3VyIHNjYW5uZXIgaXMgZ2VuZXJhdGVkIGJ5IExleCwgdGhlbSB0aGVyZSBpcworc2ltcGxlIG1lYW5zIHRvIGRvIGl0OiByZWNhbGwgdGhhdCBhbnl0aGluZyBiZXR3ZWVuIEBzYW1weyVAeyAuLi4gJUB9fQorYWZ0ZXIgdGhlIGZpcnN0IEBjb2RleyUlfSBpcyBjb3BpZWQgdmVyYmF0aW0gaW4gdGhlIHRvcCBvZiB0aGUgZ2VuZXJhdGVkCitAY29kZXt5eWxleH0gZnVuY3Rpb24uICBNYWtlIHN1cmUgYSB2YXJpYWJsZSBAY29kZXtzdGFydF90b2tlbn0gaXMKK2F2YWlsYWJsZSBpbiB0aGUgc2Nhbm5lciAoZS5nLiwgYSBnbG9iYWwgdmFyaWFibGUgb3IgdXNpbmcKK0Bjb2RleyVsZXgtcGFyYW19IGV0Yy4pLCBhbmQgdXNlIHRoZSBmb2xsb3dpbmc6CisKK0BleGFtcGxlCisgIC8qIEBye1Byb2xvZ3VlLn0gICovCislJQorJUB7CisgIGlmIChzdGFydF90b2tlbikKKyAgICBAeworICAgICAgaW50IHQgPSBzdGFydF90b2tlbjsKKyAgICAgIHN0YXJ0X3Rva2VuID0gMDsKKyAgICAgIHJldHVybiB0OworICAgIEB9CislQH0KKyAgLyogQHJ7VGhlIHJ1bGVzLn0gICovCitAZW5kIGV4YW1wbGUKKworCitAbm9kZSBTZWN1cmU/ICBDb25mb3JtPworQHNlY3Rpb24gU2VjdXJlPyAgQ29uZm9ybT8KKworQHF1b3RhdGlvbgorSXMgQmlzb24gc2VjdXJlPyAgRG9lcyBpdCBjb25mb3JtIHRvIFBPU0lYPworQGVuZCBxdW90YXRpb24KKworSWYgeW91J3JlIGxvb2tpbmcgZm9yIGEgZ3VhcmFudGVlIG9yIGNlcnRpZmljYXRpb24sIHdlIGRvbid0IHByb3ZpZGUgaXQuCitIb3dldmVyLCBCaXNvbiBpcyBpbnRlbmRlZCB0byBiZSBhIHJlbGlhYmxlIHByb2dyYW0gdGhhdCBjb25mb3JtcyB0byB0aGUKK1BPU0lYIHNwZWNpZmljYXRpb24gZm9yIFlhY2MuICBJZiB5b3UgcnVuIGludG8gcHJvYmxlbXMsCitwbGVhc2Ugc2VuZCB1cyBhIGJ1ZyByZXBvcnQuCisKK0Bub2RlIEkgY2FuJ3QgYnVpbGQgQmlzb24KK0BzZWN0aW9uIEkgY2FuJ3QgYnVpbGQgQmlzb24KKworQHF1b3RhdGlvbgorSSBjYW4ndCBidWlsZCBCaXNvbiBiZWNhdXNlIEBjb21tYW5ke21ha2V9IGNvbXBsYWlucyB0aGF0CitAY29kZXttc2dmbXR9IGlzIG5vdCBmb3VuZC4KK1doYXQgc2hvdWxkIEkgZG8/CitAZW5kIHF1b3RhdGlvbgorCitMaWtlIG1vc3QgR05VIHBhY2thZ2VzIHdpdGggaW50ZXJuYXRpb25hbGl6YXRpb24gc3VwcG9ydCwgdGhhdCBmZWF0dXJlCitpcyB0dXJuZWQgb24gYnkgZGVmYXVsdC4gIElmIHlvdSBoYXZlIHByb2JsZW1zIGJ1aWxkaW5nIGluIHRoZSBAZmlsZXtwb30KK3N1YmRpcmVjdG9yeSwgaXQgaW5kaWNhdGVzIHRoYXQgeW91ciBzeXN0ZW0ncyBpbnRlcm5hdGlvbmFsaXphdGlvbgorc3VwcG9ydCBpcyBsYWNraW5nLiAgWW91IGNhbiByZS1jb25maWd1cmUgQmlzb24gd2l0aAorQG9wdGlvbnstLWRpc2FibGUtbmxzfSB0byB0dXJuIG9mZiB0aGlzIHN1cHBvcnQsIG9yIHlvdSBjYW4gaW5zdGFsbCBHTlUKK2dldHRleHQgZnJvbSBAdXJse2Z0cDovL2Z0cC5nbnUub3JnL2dudS9nZXR0ZXh0L30gYW5kIHJlLWNvbmZpZ3VyZQorQmlzb24uICBTZWUgdGhlIGZpbGUgQGZpbGV7QUJPVVQtTkxTfSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCitAbm9kZSBXaGVyZSBjYW4gSSBmaW5kIGhlbHA/CitAc2VjdGlvbiBXaGVyZSBjYW4gSSBmaW5kIGhlbHA/CisKK0BxdW90YXRpb24KK0knbSBoYXZpbmcgdHJvdWJsZSB1c2luZyBCaXNvbi4gIFdoZXJlIGNhbiBJIGZpbmQgaGVscD8KK0BlbmQgcXVvdGF0aW9uCisKK0ZpcnN0LCByZWFkIHRoaXMgZmluZSBtYW51YWwuICBCZXlvbmQgdGhhdCwgeW91IGNhbiBzZW5kIG1haWwgdG8KK0BlbWFpbHtoZWxwLWJpc29uQEBnbnUub3JnfS4gIFRoaXMgbWFpbGluZyBsaXN0IGlzIGludGVuZGVkIHRvIGJlCitwb3B1bGF0ZWQgd2l0aCBwZW9wbGUgd2hvIGFyZSB3aWxsaW5nIHRvIGFuc3dlciBxdWVzdGlvbnMgYWJvdXQgdXNpbmcKK2FuZCBpbnN0YWxsaW5nIEJpc29uLiAgUGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IChtb3N0IG9mKSB0aGUgcGVvcGxlIG9uCit0aGUgbGlzdCBoYXZlIGFzcGVjdHMgb2YgdGhlaXIgbGl2ZXMgd2hpY2ggYXJlIG5vdCByZWxhdGVkIHRvIEJpc29uICghKSwKK3NvIHlvdSBtYXkgbm90IHJlY2VpdmUgYW4gYW5zd2VyIHRvIHlvdXIgcXVlc3Rpb24gcmlnaHQgYXdheS4gIFRoaXMgY2FuCitiZSBmcnVzdHJhdGluZywgYnV0IHBsZWFzZSB0cnkgbm90IHRvIGhvbmsgdGhlbSBvZmY7IHJlbWVtYmVyIHRoYXQgYW55CitoZWxwIHRoZXkgcHJvdmlkZSBpcyBwdXJlbHkgdm9sdW50YXJ5IGFuZCBvdXQgb2YgdGhlIGtpbmRuZXNzIG9mIHRoZWlyCitoZWFydHMuCisKK0Bub2RlIEJ1ZyBSZXBvcnRzCitAc2VjdGlvbiBCdWcgUmVwb3J0cworCitAcXVvdGF0aW9uCitJIGZvdW5kIGEgYnVnLiAgV2hhdCBzaG91bGQgSSBpbmNsdWRlIGluIHRoZSBidWcgcmVwb3J0PworQGVuZCBxdW90YXRpb24KKworQmVmb3JlIHlvdSBzZW5kIGEgYnVnIHJlcG9ydCwgbWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgdGhlIGxhdGVzdAordmVyc2lvbi4gIENoZWNrIEB1cmx7ZnRwOi8vZnRwLmdudS5vcmcvcHViL2dudS9iaXNvbi99IG9yIG9uZSBvZiBpdHMKK21pcnJvcnMuICBCZSBzdXJlIHRvIGluY2x1ZGUgdGhlIHZlcnNpb24gbnVtYmVyIGluIHlvdXIgYnVnIHJlcG9ydC4gIElmCit0aGUgYnVnIGlzIHByZXNlbnQgaW4gdGhlIGxhdGVzdCB2ZXJzaW9uIGJ1dCBub3QgaW4gYSBwcmV2aW91cyB2ZXJzaW9uLAordHJ5IHRvIGRldGVybWluZSB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiB3aGljaCBkaWQgbm90IGNvbnRhaW4gdGhlIGJ1Zy4KKworSWYgdGhlIGJ1ZyBpcyBwYXJzZXItcmVsYXRlZCwgeW91IHNob3VsZCBpbmNsdWRlIHRoZSBzbWFsbGVzdCBncmFtbWFyCit5b3UgY2FuIHdoaWNoIGRlbW9uc3RyYXRlcyB0aGUgYnVnLiAgVGhlIGdyYW1tYXIgZmlsZSBzaG91bGQgYWxzbyBiZQorY29tcGxldGUgKGkuZS4sIEkgc2hvdWxkIGJlIGFibGUgdG8gcnVuIGl0IHRocm91Z2ggQmlzb24gd2l0aG91dCBoYXZpbmcKK3RvIGVkaXQgb3IgYWRkIGFueXRoaW5nKS4gIFRoZSBzbWFsbGVyIGFuZCBzaW1wbGVyIHRoZSBncmFtbWFyLCB0aGUKK2Vhc2llciBpdCB3aWxsIGJlIHRvIGZpeCB0aGUgYnVnLgorCitJbmNsdWRlIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgY29tcGlsYXRpb24gZW52aXJvbm1lbnQsIGluY2x1ZGluZyB5b3VyCitvcGVyYXRpbmcgc3lzdGVtJ3MgbmFtZSBhbmQgdmVyc2lvbiBhbmQgeW91ciBjb21waWxlcidzIG5hbWUgYW5kCit2ZXJzaW9uLiAgSWYgeW91IGhhdmUgdHJvdWJsZSBjb21waWxpbmcsIHlvdSBzaG91bGQgYWxzbyBpbmNsdWRlIGEKK3RyYW5zY3JpcHQgb2YgdGhlIGJ1aWxkIHNlc3Npb24sIHN0YXJ0aW5nIHdpdGggdGhlIGludm9jYXRpb24gb2YKK2Bjb25maWd1cmUnLiAgRGVwZW5kaW5nIG9uIHRoZSBuYXR1cmUgb2YgdGhlIGJ1ZywgeW91IG1heSBiZSBhc2tlZCB0bworc2VuZCBhZGRpdGlvbmFsIGZpbGVzIGFzIHdlbGwgKHN1Y2ggYXMgYGNvbmZpZy5oJyBvciBgY29uZmlnLmNhY2hlJykuCisKK1BhdGNoZXMgYXJlIG1vc3Qgd2VsY29tZSwgYnV0IG5vdCByZXF1aXJlZC4gIFRoYXQgaXMsIGRvIG5vdCBoZXNpdGF0ZSB0bworc2VuZCBhIGJ1ZyByZXBvcnQganVzdCBiZWNhdXNlIHlvdSBjYW5ub3QgcHJvdmlkZSBhIGZpeC4KKworU2VuZCBidWcgcmVwb3J0cyB0byBAZW1haWx7YnVnLWJpc29uQEBnbnUub3JnfS4KKworQG5vZGUgTW9yZSBMYW5ndWFnZXMKK0BzZWN0aW9uIE1vcmUgTGFuZ3VhZ2VzCisKK0BxdW90YXRpb24KK1dpbGwgQmlzb24gZXZlciBoYXZlIEMrKyBhbmQgSmF2YSBzdXBwb3J0PyAgSG93IGFib3V0IEB2YXJ7aW5zZXJ0IHlvdXIKK2Zhdm9yaXRlIGxhbmd1YWdlIGhlcmV9PworQGVuZCBxdW90YXRpb24KKworQysrIGFuZCBKYXZhIHN1cHBvcnQgaXMgdGhlcmUgbm93LCBhbmQgaXMgZG9jdW1lbnRlZC4gIFdlJ2QgbG92ZSB0byBhZGQgb3RoZXIKK2xhbmd1YWdlczsgY29udHJpYnV0aW9ucyBhcmUgd2VsY29tZS4KKworQG5vZGUgQmV0YSBUZXN0aW5nCitAc2VjdGlvbiBCZXRhIFRlc3RpbmcKKworQHF1b3RhdGlvbgorV2hhdCBpcyBpbnZvbHZlZCBpbiBiZWluZyBhIGJldGEgdGVzdGVyPworQGVuZCBxdW90YXRpb24KKworSXQncyBub3QgdGVycmlibHkgaW52b2x2ZWQuICBCYXNpY2FsbHksIHlvdSB3b3VsZCBkb3dubG9hZCBhIHRlc3QKK3JlbGVhc2UsIGNvbXBpbGUgaXQsIGFuZCB1c2UgaXQgdG8gYnVpbGQgYW5kIHJ1biBhIHBhcnNlciBvciB0d28uICBBZnRlcgordGhhdCwgeW91IHdvdWxkIHN1Ym1pdCBlaXRoZXIgYSBidWcgcmVwb3J0IG9yIGEgbWVzc2FnZSBzYXlpbmcgdGhhdAorZXZlcnl0aGluZyBpcyBva2F5LiAgSXQgaXMgaW1wb3J0YW50IHRvIHJlcG9ydCBzdWNjZXNzZXMgYXMgd2VsbCBhcworZmFpbHVyZXMgYmVjYXVzZSB0ZXN0IHJlbGVhc2VzIGV2ZW50dWFsbHkgYmVjb21lIG1haW5zdHJlYW0gcmVsZWFzZXMsCitidXQgb25seSBpZiB0aGV5IGFyZSBhZGVxdWF0ZWx5IHRlc3RlZC4gIElmIG5vIG9uZSB0ZXN0cywgZGV2ZWxvcG1lbnQgaXMKK2Vzc2VudGlhbGx5IGhhbHRlZC4KKworQmV0YSB0ZXN0ZXJzIGFyZSBwYXJ0aWN1bGFybHkgbmVlZGVkIGZvciBvcGVyYXRpbmcgc3lzdGVtcyB0byB3aGljaCB0aGUKK2RldmVsb3BlcnMgZG8gbm90IGhhdmUgZWFzeSBhY2Nlc3MuICBUaGV5IGN1cnJlbnRseSBoYXZlIGVhc3kgYWNjZXNzIHRvCityZWNlbnQgR05VL0xpbnV4IGFuZCBTb2xhcmlzIHZlcnNpb25zLiAgUmVwb3J0cyBhYm91dCBvdGhlciBvcGVyYXRpbmcKK3N5c3RlbXMgYXJlIGVzcGVjaWFsbHkgd2VsY29tZS4KKworQG5vZGUgTWFpbGluZyBMaXN0cworQHNlY3Rpb24gTWFpbGluZyBMaXN0cworCitAcXVvdGF0aW9uCitIb3cgZG8gSSBqb2luIHRoZSBoZWxwLWJpc29uIGFuZCBidWctYmlzb24gbWFpbGluZyBsaXN0cz8KK0BlbmQgcXVvdGF0aW9uCisKK1NlZSBAdXJse2h0dHA6Ly9saXN0cy5nbnUub3JnL30uCisKK0BjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gVGFibGUgb2YgU3ltYm9scworCitAbm9kZSBUYWJsZSBvZiBTeW1ib2xzCitAYXBwZW5kaXggQmlzb24gU3ltYm9scworQGNpbmRleCBCaXNvbiBzeW1ib2xzLCB0YWJsZSBvZgorQGNpbmRleCBzeW1ib2xzIGluIEJpc29uLCB0YWJsZSBvZgorCitAZGVmZm4ge1ZhcmlhYmxlfSBAQCQKK0luIGFuIGFjdGlvbiwgdGhlIGxvY2F0aW9uIG9mIHRoZSBsZWZ0LWhhbmQgc2lkZSBvZiB0aGUgcnVsZS4KK0B4cmVme1RyYWNraW5nIExvY2F0aW9uc30uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7VmFyaWFibGV9IEBAQHZhcntufQorQGRlZmZueCB7U3ltYm9sfSBAQEB2YXJ7bn0KK0luIGFuIGFjdGlvbiwgdGhlIGxvY2F0aW9uIG9mIHRoZSBAdmFye259LXRoIHN5bWJvbCBvZiB0aGUgcmlnaHQtaGFuZCBzaWRlCitvZiB0aGUgcnVsZS4gIEB4cmVme1RyYWNraW5nIExvY2F0aW9uc30uCisKK0luIGEgZ3JhbW1hciwgdGhlIEJpc29uLWdlbmVyYXRlZCBub250ZXJtaW5hbCBzeW1ib2wgZm9yIGEgbWlkLXJ1bGUgYWN0aW9uCit3aXRoIGEgc2VtYW50aWNhbCB2YWx1ZS4gIEB4cmVme01pZC1SdWxlIEFjdGlvbiBUcmFuc2xhdGlvbn0uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7VmFyaWFibGV9IEBAQHZhcntuYW1lfQorQGRlZmZueCB7VmFyaWFibGV9IEBAW0B2YXJ7bmFtZX1dCitJbiBhbiBhY3Rpb24sIHRoZSBsb2NhdGlvbiBvZiBhIHN5bWJvbCBhZGRyZXNzZWQgYnkgQHZhcntuYW1lfS4KK0B4cmVme1RyYWNraW5nIExvY2F0aW9uc30uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7U3ltYm9sfSAkQEBAdmFye259CitJbiBhIGdyYW1tYXIsIHRoZSBCaXNvbi1nZW5lcmF0ZWQgbm9udGVybWluYWwgc3ltYm9sIGZvciBhIG1pZC1ydWxlIGFjdGlvbgord2l0aCBubyBzZW1hbnRpY2FsIHZhbHVlLiAgQHhyZWZ7TWlkLVJ1bGUgQWN0aW9uIFRyYW5zbGF0aW9ufS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtWYXJpYWJsZX0gJCQKK0luIGFuIGFjdGlvbiwgdGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsZWZ0LWhhbmQgc2lkZSBvZiB0aGUgcnVsZS4KK0B4cmVme0FjdGlvbnN9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge1ZhcmlhYmxlfSAkQHZhcntufQorSW4gYW4gYWN0aW9uLCB0aGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIEB2YXJ7bn0tdGggc3ltYm9sIG9mIHRoZQorcmlnaHQtaGFuZCBzaWRlIG9mIHRoZSBydWxlLiAgQHhyZWZ7QWN0aW9uc30uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7VmFyaWFibGV9ICRAdmFye25hbWV9CitAZGVmZm54IHtWYXJpYWJsZX0gJFtAdmFye25hbWV9XQorSW4gYW4gYWN0aW9uLCB0aGUgc2VtYW50aWMgdmFsdWUgb2YgYSBzeW1ib2wgYWRkcmVzc2VkIGJ5IEB2YXJ7bmFtZX0uCitAeHJlZntBY3Rpb25zfS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtEZWxpbWl0ZXJ9ICUlCitEZWxpbWl0ZXIgdXNlZCB0byBzZXBhcmF0ZSB0aGUgZ3JhbW1hciBydWxlIHNlY3Rpb24gZnJvbSB0aGUKK0Jpc29uIGRlY2xhcmF0aW9ucyBzZWN0aW9uIG9yIHRoZSBlcGlsb2d1ZS4KK0B4cmVme0dyYW1tYXIgTGF5b3V0LCAsVGhlIE92ZXJhbGwgTGF5b3V0IG9mIGEgQmlzb24gR3JhbW1hcn0uCitAZW5kIGRlZmZuCisKK0BjIERvbid0IGluc2VydCBzcGFjZXMsIG9yIGNoZWNrIHRoZSBEVkkgb3V0cHV0LgorQGRlZmZuIHtEZWxpbWl0ZXJ9ICVAe0B2YXJ7Y29kZX0lQH0KK0FsbCBjb2RlIGxpc3RlZCBiZXR3ZWVuIEBzYW1weyVAe30gYW5kIEBzYW1weyVAfX0gaXMgY29waWVkIHZlcmJhdGltCit0byB0aGUgcGFyc2VyIGltcGxlbWVudGF0aW9uIGZpbGUuICBTdWNoIGNvZGUgZm9ybXMgdGhlIHByb2xvZ3VlIG9mCit0aGUgZ3JhbW1hciBmaWxlLiAgQHhyZWZ7R3JhbW1hciBPdXRsaW5lLCAsT3V0bGluZSBvZiBhIEJpc29uCitHcmFtbWFyfS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtDb25zdHJ1Y3R9IC8qIEBkb3Rze30gKi8KK0BkZWZmbngge0NvbnN0cnVjdH0gLy8gQGRvdHN7fQorQ29tbWVudHMsIGFzIGluIEMvQysrLgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RlbGltaXRlcn0gOgorU2VwYXJhdGVzIGEgcnVsZSdzIHJlc3VsdCBmcm9tIGl0cyBjb21wb25lbnRzLiAgQHhyZWZ7UnVsZXMsICxTeW50YXggb2YKK0dyYW1tYXIgUnVsZXN9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RlbGltaXRlcn0gOworVGVybWluYXRlcyBhIHJ1bGUuICBAeHJlZntSdWxlcywgLFN5bnRheCBvZiBHcmFtbWFyIFJ1bGVzfS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtEZWxpbWl0ZXJ9IHwKK1NlcGFyYXRlcyBhbHRlcm5hdGUgcnVsZXMgZm9yIHRoZSBzYW1lIHJlc3VsdCBub250ZXJtaW5hbC4KK0B4cmVme1J1bGVzLCAsU3ludGF4IG9mIEdyYW1tYXIgUnVsZXN9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gPCo+CitVc2VkIHRvIGRlZmluZSBhIGRlZmF1bHQgdGFnZ2VkIEBjb2RleyVkZXN0cnVjdG9yfSBvciBkZWZhdWx0IHRhZ2dlZAorQGNvZGV7JXByaW50ZXJ9LgorCitUaGlzIGZlYXR1cmUgaXMgZXhwZXJpbWVudGFsLgorTW9yZSB1c2VyIGZlZWRiYWNrIHdpbGwgaGVscCB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBzaG91bGQgYmVjb21lIGEgcGVybWFuZW50CitmZWF0dXJlLgorCitAeHJlZntEZXN0cnVjdG9yIERlY2wsICwgRnJlZWluZyBEaXNjYXJkZWQgU3ltYm9sc30uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSA8PgorVXNlZCB0byBkZWZpbmUgYSBkZWZhdWx0IHRhZ2xlc3MgQGNvZGV7JWRlc3RydWN0b3J9IG9yIGRlZmF1bHQgdGFnbGVzcworQGNvZGV7JXByaW50ZXJ9LgorCitUaGlzIGZlYXR1cmUgaXMgZXhwZXJpbWVudGFsLgorTW9yZSB1c2VyIGZlZWRiYWNrIHdpbGwgaGVscCB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBzaG91bGQgYmVjb21lIGEgcGVybWFuZW50CitmZWF0dXJlLgorCitAeHJlZntEZXN0cnVjdG9yIERlY2wsICwgRnJlZWluZyBEaXNjYXJkZWQgU3ltYm9sc30uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7U3ltYm9sfSAkYWNjZXB0CitUaGUgcHJlZGVmaW5lZCBub250ZXJtaW5hbCB3aG9zZSBvbmx5IHJ1bGUgaXMgQHNhbXB7JGFjY2VwdDogQHZhcntzdGFydH0KKyRlbmR9LCB3aGVyZSBAdmFye3N0YXJ0fSBpcyB0aGUgc3RhcnQgc3ltYm9sLiAgQHhyZWZ7U3RhcnQgRGVjbCwgLCBUaGUKK1N0YXJ0LVN5bWJvbH0uICBJdCBjYW5ub3QgYmUgdXNlZCBpbiB0aGUgZ3JhbW1hci4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtEaXJlY3RpdmV9ICVjb2RlIEB7QHZhcntjb2RlfUB9CitAZGVmZm54IHtEaXJlY3RpdmV9ICVjb2RlIEB2YXJ7cXVhbGlmaWVyfSBAe0B2YXJ7Y29kZX1AfQorSW5zZXJ0IEB2YXJ7Y29kZX0gdmVyYmF0aW0gaW50byB0aGUgb3V0cHV0IHBhcnNlciBzb3VyY2UgYXQgdGhlCitkZWZhdWx0IGxvY2F0aW9uIG9yIGF0IHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQgYnkgQHZhcntxdWFsaWZpZXJ9LgorQHhyZWZ7JWNvZGUgU3VtbWFyeX0uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSAlZGVidWcKK0VxdWlwIHRoZSBwYXJzZXIgZm9yIGRlYnVnZ2luZy4gIEB4cmVme0RlY2wgU3VtbWFyeX0uCitAZW5kIGRlZmZuCisKK0BpZnNldCBkZWZhdWx0cHJlYworQGRlZmZuIHtEaXJlY3RpdmV9ICVkZWZhdWx0LXByZWMKK0Fzc2lnbiBhIHByZWNlZGVuY2UgdG8gcnVsZXMgdGhhdCBsYWNrIGFuIGV4cGxpY2l0IEBzYW1weyVwcmVjfQorbW9kaWZpZXIuICBAeHJlZntDb250ZXh0dWFsIFByZWNlZGVuY2UsICxDb250ZXh0LURlcGVuZGVudAorUHJlY2VkZW5jZX0uCitAZW5kIGRlZmZuCitAZW5kIGlmc2V0CisKK0BkZWZmbiB7RGlyZWN0aXZlfSAlZGVmaW5lIEB2YXJ7dmFyaWFibGV9CitAZGVmZm54IHtEaXJlY3RpdmV9ICVkZWZpbmUgQHZhcnt2YXJpYWJsZX0gQHZhcnt2YWx1ZX0KK0BkZWZmbngge0RpcmVjdGl2ZX0gJWRlZmluZSBAdmFye3ZhcmlhYmxlfSAiQHZhcnt2YWx1ZX0iCitEZWZpbmUgYSB2YXJpYWJsZSB0byBhZGp1c3QgQmlzb24ncyBiZWhhdmlvci4gIEB4cmVmeyVkZWZpbmUgU3VtbWFyeX0uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSAlZGVmaW5lcworQmlzb24gZGVjbGFyYXRpb24gdG8gY3JlYXRlIGEgcGFyc2VyIGhlYWRlciBmaWxlLCB3aGljaCBpcyB1c3VhbGx5CittZWFudCBmb3IgdGhlIHNjYW5uZXIuICBAeHJlZntEZWNsIFN1bW1hcnl9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gJWRlZmluZXMgQHZhcntkZWZpbmVzLWZpbGV9CitTYW1lIGFzIGFib3ZlLCBidXQgc2F2ZSBpbiB0aGUgZmlsZSBAdmFye2RlZmluZXMtZmlsZX0uCitAeHJlZntEZWNsIFN1bW1hcnl9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gJWRlc3RydWN0b3IKK1NwZWNpZnkgaG93IHRoZSBwYXJzZXIgc2hvdWxkIHJlY2xhaW0gdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHRvCitkaXNjYXJkZWQgc3ltYm9scy4gIEB4cmVme0Rlc3RydWN0b3IgRGVjbCwgLCBGcmVlaW5nIERpc2NhcmRlZCBTeW1ib2xzfS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtEaXJlY3RpdmV9ICVkcHJlYworQmlzb24gZGVjbGFyYXRpb24gdG8gYXNzaWduIGEgcHJlY2VkZW5jZSB0byBhIHJ1bGUgdGhhdCBpcyB1c2VkIGF0IHBhcnNlCit0aW1lIHRvIHJlc29sdmUgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMuICBAeHJlZntHTFIgUGFyc2VycywgLFdyaXRpbmcKK0dMUiBQYXJzZXJzfS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtTeW1ib2x9ICRlbmQKK1RoZSBwcmVkZWZpbmVkIHRva2VuIG1hcmtpbmcgdGhlIGVuZCBvZiB0aGUgdG9rZW4gc3RyZWFtLiAgSXQgY2Fubm90IGJlCit1c2VkIGluIHRoZSBncmFtbWFyLgorQGVuZCBkZWZmbgorCitAZGVmZm4ge1N5bWJvbH0gZXJyb3IKK0EgdG9rZW4gbmFtZSByZXNlcnZlZCBmb3IgZXJyb3IgcmVjb3ZlcnkuICBUaGlzIHRva2VuIG1heSBiZSB1c2VkIGluCitncmFtbWFyIHJ1bGVzIHNvIGFzIHRvIGFsbG93IHRoZSBCaXNvbiBwYXJzZXIgdG8gcmVjb2duaXplIGFuIGVycm9yIGluCit0aGUgZ3JhbW1hciB3aXRob3V0IGhhbHRpbmcgdGhlIHByb2Nlc3MuICBJbiBlZmZlY3QsIGEgc2VudGVuY2UKK2NvbnRhaW5pbmcgYW4gZXJyb3IgbWF5IGJlIHJlY29nbml6ZWQgYXMgdmFsaWQuICBPbiBhIHN5bnRheCBlcnJvciwgdGhlCit0b2tlbiBAY29kZXtlcnJvcn0gYmVjb21lcyB0aGUgY3VycmVudCBsb29rYWhlYWQgdG9rZW4uICBBY3Rpb25zCitjb3JyZXNwb25kaW5nIHRvIEBjb2Rle2Vycm9yfSBhcmUgdGhlbiBleGVjdXRlZCwgYW5kIHRoZSBsb29rYWhlYWQKK3Rva2VuIGlzIHJlc2V0IHRvIHRoZSB0b2tlbiB0aGF0IG9yaWdpbmFsbHkgY2F1c2VkIHRoZSB2aW9sYXRpb24uCitAeHJlZntFcnJvciBSZWNvdmVyeX0uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSAlZXJyb3ItdmVyYm9zZQorQmlzb24gZGVjbGFyYXRpb24gdG8gcmVxdWVzdCB2ZXJib3NlLCBzcGVjaWZpYyBlcnJvciBtZXNzYWdlIHN0cmluZ3MKK3doZW4gQGNvZGV7eXllcnJvcn0gaXMgY2FsbGVkLiAgQHhyZWZ7RXJyb3IgUmVwb3J0aW5nfS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtEaXJlY3RpdmV9ICVmaWxlLXByZWZpeCAiQHZhcntwcmVmaXh9IgorQmlzb24gZGVjbGFyYXRpb24gdG8gc2V0IHRoZSBwcmVmaXggb2YgdGhlIG91dHB1dCBmaWxlcy4gIEB4cmVme0RlY2wKK1N1bW1hcnl9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gJWdsci1wYXJzZXIKK0Jpc29uIGRlY2xhcmF0aW9uIHRvIHByb2R1Y2UgYSBHTFIgcGFyc2VyLiAgQHhyZWZ7R0xSCitQYXJzZXJzLCAsV3JpdGluZyBHTFIgUGFyc2Vyc30uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSAlaW5pdGlhbC1hY3Rpb24KK1J1biB1c2VyIGNvZGUgYmVmb3JlIHBhcnNpbmcuICBAeHJlZntJbml0aWFsIEFjdGlvbiBEZWNsLCAsIFBlcmZvcm1pbmcgQWN0aW9ucyBiZWZvcmUgUGFyc2luZ30uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSAlbGFuZ3VhZ2UKK1NwZWNpZnkgdGhlIHByb2dyYW1taW5nIGxhbmd1YWdlIGZvciB0aGUgZ2VuZXJhdGVkIHBhcnNlci4KK0B4cmVme0RlY2wgU3VtbWFyeX0uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSAlbGVmdAorQmlzb24gZGVjbGFyYXRpb24gdG8gYXNzaWduIGxlZnQgYXNzb2NpYXRpdml0eSB0byB0b2tlbihzKS4KK0B4cmVme1ByZWNlZGVuY2UgRGVjbCwgLE9wZXJhdG9yIFByZWNlZGVuY2V9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gJWxleC1wYXJhbSBAe0B2YXJ7YXJndW1lbnQtZGVjbGFyYXRpb259QH0KK0Jpc29uIGRlY2xhcmF0aW9uIHRvIHNwZWNpZnlpbmcgYW4gYWRkaXRpb25hbCBwYXJhbWV0ZXIgdGhhdAorQGNvZGV7eXlsZXh9IHNob3VsZCBhY2NlcHQuICBAeHJlZntQdXJlIENhbGxpbmcsLCBDYWxsaW5nIENvbnZlbnRpb25zCitmb3IgUHVyZSBQYXJzZXJzfS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtEaXJlY3RpdmV9ICVtZXJnZQorQmlzb24gZGVjbGFyYXRpb24gdG8gYXNzaWduIGEgbWVyZ2luZyBmdW5jdGlvbiB0byBhIHJ1bGUuICBJZiB0aGVyZSBpcyBhCityZWR1Y2UvcmVkdWNlIGNvbmZsaWN0IHdpdGggYSBydWxlIGhhdmluZyB0aGUgc2FtZSBtZXJnaW5nIGZ1bmN0aW9uLCB0aGUKK2Z1bmN0aW9uIGlzIGFwcGxpZWQgdG8gdGhlIHR3byBzZW1hbnRpYyB2YWx1ZXMgdG8gZ2V0IGEgc2luZ2xlIHJlc3VsdC4KK0B4cmVme0dMUiBQYXJzZXJzLCAsV3JpdGluZyBHTFIgUGFyc2Vyc30uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSAlbmFtZS1wcmVmaXggIkB2YXJ7cHJlZml4fSIKK09ic29sZXRlZCBieSB0aGUgQGNvZGV7JWRlZmluZX0gdmFyaWFibGUgQGNvZGV7YXBpLnByZWZpeH0gKEBweHJlZntNdWx0aXBsZQorUGFyc2VycywgLE11bHRpcGxlIFBhcnNlcnMgaW4gdGhlIFNhbWUgUHJvZ3JhbX0pLgorCitSZW5hbWUgdGhlIGV4dGVybmFsIHN5bWJvbHMgKHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zKSB1c2VkIGluIHRoZSBwYXJzZXIgc28KK3RoYXQgdGhleSBzdGFydCB3aXRoIEB2YXJ7cHJlZml4fSBpbnN0ZWFkIG9mIEBzYW1we3l5fS4gIENvbnRyYXJ5IHRvCitAY29kZXthcGkucHJlZml4fSwgZG8gbm8gcmVuYW1lIHR5cGVzIGFuZCBtYWNyb3MuCisKK1RoZSBwcmVjaXNlIGxpc3Qgb2Ygc3ltYm9scyByZW5hbWVkIGluIEMgcGFyc2VycyBpcyBAY29kZXt5eXBhcnNlfSwKK0Bjb2Rle3l5bGV4fSwgQGNvZGV7eXllcnJvcn0sIEBjb2Rle3l5bmVycnN9LCBAY29kZXt5eWx2YWx9LCBAY29kZXt5eWNoYXJ9LAorQGNvZGV7eXlkZWJ1Z30sIGFuZCAoaWYgbG9jYXRpb25zIGFyZSB1c2VkKSBAY29kZXt5eWxsb2N9LiAgSWYgeW91IHVzZSBhCitwdXNoIHBhcnNlciwgQGNvZGV7eXlwdXNoX3BhcnNlfSwgQGNvZGV7eXlwdWxsX3BhcnNlfSwgQGNvZGV7eXlwc3RhdGV9LAorQGNvZGV7eXlwc3RhdGVfbmV3fSBhbmQgQGNvZGV7eXlwc3RhdGVfZGVsZXRlfSB3aWxsIGFsc28gYmUgcmVuYW1lZC4gIEZvcgorZXhhbXBsZSwgaWYgeW91IHVzZSBAc2FtcHslbmFtZS1wcmVmaXggImNfIn0sIHRoZSBuYW1lcyBiZWNvbWUKK0Bjb2Rle2NfcGFyc2V9LCBAY29kZXtjX2xleH0sIGFuZCBzbyBvbi4gIEZvciBDKysgcGFyc2Vycywgc2VlIHRoZQorQGNvZGV7JWRlZmluZSBuYW1lc3BhY2V9IGRvY3VtZW50YXRpb24gaW4gdGhpcyBzZWN0aW9uLgorQGVuZCBkZWZmbgorCisKK0BpZnNldCBkZWZhdWx0cHJlYworQGRlZmZuIHtEaXJlY3RpdmV9ICVuby1kZWZhdWx0LXByZWMKK0RvIG5vdCBhc3NpZ24gYSBwcmVjZWRlbmNlIHRvIHJ1bGVzIHRoYXQgbGFjayBhbiBleHBsaWNpdCBAc2FtcHslcHJlY30KK21vZGlmaWVyLiAgQHhyZWZ7Q29udGV4dHVhbCBQcmVjZWRlbmNlLCAsQ29udGV4dC1EZXBlbmRlbnQKK1ByZWNlZGVuY2V9LgorQGVuZCBkZWZmbgorQGVuZCBpZnNldAorCitAZGVmZm4ge0RpcmVjdGl2ZX0gJW5vLWxpbmVzCitCaXNvbiBkZWNsYXJhdGlvbiB0byBhdm9pZCBnZW5lcmF0aW5nIEBjb2RleyNsaW5lfSBkaXJlY3RpdmVzIGluIHRoZQorcGFyc2VyIGltcGxlbWVudGF0aW9uIGZpbGUuICBAeHJlZntEZWNsIFN1bW1hcnl9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gJW5vbmFzc29jCitCaXNvbiBkZWNsYXJhdGlvbiB0byBhc3NpZ24gbm9uYXNzb2NpYXRpdml0eSB0byB0b2tlbihzKS4KK0B4cmVme1ByZWNlZGVuY2UgRGVjbCwgLE9wZXJhdG9yIFByZWNlZGVuY2V9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gJW91dHB1dCAiQHZhcntmaWxlfSIKK0Jpc29uIGRlY2xhcmF0aW9uIHRvIHNldCB0aGUgbmFtZSBvZiB0aGUgcGFyc2VyIGltcGxlbWVudGF0aW9uIGZpbGUuCitAeHJlZntEZWNsIFN1bW1hcnl9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gJXBhcnNlLXBhcmFtIEB7QHZhcnthcmd1bWVudC1kZWNsYXJhdGlvbn1AfQorQmlzb24gZGVjbGFyYXRpb24gdG8gc3BlY2lmeWluZyBhbiBhZGRpdGlvbmFsIHBhcmFtZXRlciB0aGF0CitAY29kZXt5eXBhcnNlfSBzaG91bGQgYWNjZXB0LiAgQHhyZWZ7UGFyc2VyIEZ1bmN0aW9uLCwgVGhlIFBhcnNlcgorRnVuY3Rpb24gQGNvZGV7eXlwYXJzZX19LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gJXByZWMKK0Jpc29uIGRlY2xhcmF0aW9uIHRvIGFzc2lnbiBhIHByZWNlZGVuY2UgdG8gYSBzcGVjaWZpYyBydWxlLgorQHhyZWZ7Q29udGV4dHVhbCBQcmVjZWRlbmNlLCAsQ29udGV4dC1EZXBlbmRlbnQgUHJlY2VkZW5jZX0uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSAlcHVyZS1wYXJzZXIKK0RlcHJlY2F0ZWQgdmVyc2lvbiBvZiBAY29kZXslZGVmaW5lIGFwaS5wdXJlfSAoQHB4cmVmeyVkZWZpbmUKK1N1bW1hcnksLGFwaS5wdXJlfSksIGZvciB3aGljaCBCaXNvbiBpcyBtb3JlIGNhcmVmdWwgdG8gd2FybiBhYm91dAordW5yZWFzb25hYmxlIHVzYWdlLgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gJXJlcXVpcmUgIkB2YXJ7dmVyc2lvbn0iCitSZXF1aXJlIHZlcnNpb24gQHZhcnt2ZXJzaW9ufSBvciBoaWdoZXIgb2YgQmlzb24uICBAeHJlZntSZXF1aXJlIERlY2wsICwKK1JlcXVpcmUgYSBWZXJzaW9uIG9mIEJpc29ufS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtEaXJlY3RpdmV9ICVyaWdodAorQmlzb24gZGVjbGFyYXRpb24gdG8gYXNzaWduIHJpZ2h0IGFzc29jaWF0aXZpdHkgdG8gdG9rZW4ocykuCitAeHJlZntQcmVjZWRlbmNlIERlY2wsICxPcGVyYXRvciBQcmVjZWRlbmNlfS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtEaXJlY3RpdmV9ICVza2VsZXRvbgorU3BlY2lmeSB0aGUgc2tlbGV0b24gdG8gdXNlOyB1c3VhbGx5IGZvciBkZXZlbG9wbWVudC4KK0B4cmVme0RlY2wgU3VtbWFyeX0uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSAlc3RhcnQKK0Jpc29uIGRlY2xhcmF0aW9uIHRvIHNwZWNpZnkgdGhlIHN0YXJ0IHN5bWJvbC4gIEB4cmVme1N0YXJ0IERlY2wsICxUaGUKK1N0YXJ0LVN5bWJvbH0uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSAldG9rZW4KK0Jpc29uIGRlY2xhcmF0aW9uIHRvIGRlY2xhcmUgdG9rZW4ocykgd2l0aG91dCBzcGVjaWZ5aW5nIHByZWNlZGVuY2UuCitAeHJlZntUb2tlbiBEZWNsLCAsVG9rZW4gVHlwZSBOYW1lc30uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RGlyZWN0aXZlfSAldG9rZW4tdGFibGUKK0Jpc29uIGRlY2xhcmF0aW9uIHRvIGluY2x1ZGUgYSB0b2tlbiBuYW1lIHRhYmxlIGluIHRoZSBwYXJzZXIKK2ltcGxlbWVudGF0aW9uIGZpbGUuICBAeHJlZntEZWNsIFN1bW1hcnl9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge0RpcmVjdGl2ZX0gJXR5cGUKK0Jpc29uIGRlY2xhcmF0aW9uIHRvIGRlY2xhcmUgbm9udGVybWluYWxzLiAgQHhyZWZ7VHlwZSBEZWNsLAorLE5vbnRlcm1pbmFsIFN5bWJvbHN9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge1N5bWJvbH0gJHVuZGVmaW5lZAorVGhlIHByZWRlZmluZWQgdG9rZW4gb250byB3aGljaCBhbGwgdW5kZWZpbmVkIHZhbHVlcyByZXR1cm5lZCBieQorQGNvZGV7eXlsZXh9IGFyZSBtYXBwZWQuICBJdCBjYW5ub3QgYmUgdXNlZCBpbiB0aGUgZ3JhbW1hciwgcmF0aGVyLCB1c2UKK0Bjb2Rle2Vycm9yfS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtEaXJlY3RpdmV9ICV1bmlvbgorQmlzb24gZGVjbGFyYXRpb24gdG8gc3BlY2lmeSBzZXZlcmFsIHBvc3NpYmxlIGRhdGEgdHlwZXMgZm9yIHNlbWFudGljCit2YWx1ZXMuICBAeHJlZntVbmlvbiBEZWNsLCAsVGhlIENvbGxlY3Rpb24gb2YgVmFsdWUgVHlwZXN9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge01hY3JvfSBZWUFCT1JUCitNYWNybyB0byBwcmV0ZW5kIHRoYXQgYW4gdW5yZWNvdmVyYWJsZSBzeW50YXggZXJyb3IgaGFzIG9jY3VycmVkLCBieQorbWFraW5nIEBjb2Rle3l5cGFyc2V9IHJldHVybiAxIGltbWVkaWF0ZWx5LiAgVGhlIGVycm9yIHJlcG9ydGluZworZnVuY3Rpb24gQGNvZGV7eXllcnJvcn0gaXMgbm90IGNhbGxlZC4gIEB4cmVme1BhcnNlciBGdW5jdGlvbiwgLFRoZQorUGFyc2VyIEZ1bmN0aW9uIEBjb2Rle3l5cGFyc2V9fS4KKworRm9yIEphdmEgcGFyc2VycywgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGludm9rZWQgdXNpbmcgQGNvZGV7cmV0dXJuIFlZQUJPUlQ7fQoraW5zdGVhZC4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtNYWNyb30gWVlBQ0NFUFQKK01hY3JvIHRvIHByZXRlbmQgdGhhdCBhIGNvbXBsZXRlIHV0dGVyYW5jZSBvZiB0aGUgbGFuZ3VhZ2UgaGFzIGJlZW4KK3JlYWQsIGJ5IG1ha2luZyBAY29kZXt5eXBhcnNlfSByZXR1cm4gMCBpbW1lZGlhdGVseS4KK0B4cmVme1BhcnNlciBGdW5jdGlvbiwgLFRoZSBQYXJzZXIgRnVuY3Rpb24gQGNvZGV7eXlwYXJzZX19LgorCitGb3IgSmF2YSBwYXJzZXJzLCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgaW52b2tlZCB1c2luZyBAY29kZXtyZXR1cm4gWVlBQ0NFUFQ7fQoraW5zdGVhZC4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtNYWNyb30gWVlCQUNLVVAKK01hY3JvIHRvIGRpc2NhcmQgYSB2YWx1ZSBmcm9tIHRoZSBwYXJzZXIgc3RhY2sgYW5kIGZha2UgYSBsb29rYWhlYWQKK3Rva2VuLiAgQHhyZWZ7QWN0aW9uIEZlYXR1cmVzLCAsU3BlY2lhbCBGZWF0dXJlcyBmb3IgVXNlIGluIEFjdGlvbnN9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge1ZhcmlhYmxlfSB5eWNoYXIKK0V4dGVybmFsIGludGVnZXIgdmFyaWFibGUgdGhhdCBjb250YWlucyB0aGUgaW50ZWdlciB2YWx1ZSBvZiB0aGUKK2xvb2thaGVhZCB0b2tlbi4gIChJbiBhIHB1cmUgcGFyc2VyLCBpdCBpcyBhIGxvY2FsIHZhcmlhYmxlIHdpdGhpbgorQGNvZGV7eXlwYXJzZX0uKSAgRXJyb3ItcmVjb3ZlcnkgcnVsZSBhY3Rpb25zIG1heSBleGFtaW5lIHRoaXMgdmFyaWFibGUuCitAeHJlZntBY3Rpb24gRmVhdHVyZXMsICxTcGVjaWFsIEZlYXR1cmVzIGZvciBVc2UgaW4gQWN0aW9uc30uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7VmFyaWFibGV9IHl5Y2xlYXJpbgorTWFjcm8gdXNlZCBpbiBlcnJvci1yZWNvdmVyeSBydWxlIGFjdGlvbnMuICBJdCBjbGVhcnMgdGhlIHByZXZpb3VzCitsb29rYWhlYWQgdG9rZW4uICBAeHJlZntFcnJvciBSZWNvdmVyeX0uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7TWFjcm99IFlZREVCVUcKK01hY3JvIHRvIGRlZmluZSB0byBlcXVpcCB0aGUgcGFyc2VyIHdpdGggdHJhY2luZyBjb2RlLiAgQHhyZWZ7VHJhY2luZywKKyxUcmFjaW5nIFlvdXIgUGFyc2VyfS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtWYXJpYWJsZX0geXlkZWJ1ZworRXh0ZXJuYWwgaW50ZWdlciB2YXJpYWJsZSBzZXQgdG8gemVybyBieSBkZWZhdWx0LiAgSWYgQGNvZGV7eXlkZWJ1Z30KK2lzIGdpdmVuIGEgbm9uemVybyB2YWx1ZSwgdGhlIHBhcnNlciB3aWxsIG91dHB1dCBpbmZvcm1hdGlvbiBvbiBpbnB1dAorc3ltYm9scyBhbmQgcGFyc2VyIGFjdGlvbi4gIEB4cmVme1RyYWNpbmcsICxUcmFjaW5nIFlvdXIgUGFyc2VyfS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtNYWNyb30geXllcnJvaworTWFjcm8gdG8gY2F1c2UgcGFyc2VyIHRvIHJlY292ZXIgaW1tZWRpYXRlbHkgdG8gaXRzIG5vcm1hbCBtb2RlCithZnRlciBhIHN5bnRheCBlcnJvci4gIEB4cmVme0Vycm9yIFJlY292ZXJ5fS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtNYWNyb30gWVlFUlJPUgorQ2F1c2UgYW4gaW1tZWRpYXRlIHN5bnRheCBlcnJvci4gIFRoaXMgc3RhdGVtZW50IGluaXRpYXRlcyBlcnJvcgorcmVjb3ZlcnkganVzdCBhcyBpZiB0aGUgcGFyc2VyIGl0c2VsZiBoYWQgZGV0ZWN0ZWQgYW4gZXJyb3I7IGhvd2V2ZXIsIGl0Citkb2VzIG5vdCBjYWxsIEBjb2Rle3l5ZXJyb3J9LCBhbmQgZG9lcyBub3QgcHJpbnQgYW55IG1lc3NhZ2UuICBJZiB5b3UKK3dhbnQgdG8gcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSwgY2FsbCBAY29kZXt5eWVycm9yfSBleHBsaWNpdGx5IGJlZm9yZQordGhlIEBzYW1we1lZRVJST1I7fSBzdGF0ZW1lbnQuICBAeHJlZntFcnJvciBSZWNvdmVyeX0uCisKK0ZvciBKYXZhIHBhcnNlcnMsIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBpbnZva2VkIHVzaW5nIEBjb2Rle3JldHVybiBZWUVSUk9SO30KK2luc3RlYWQuCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RnVuY3Rpb259IHl5ZXJyb3IKK1VzZXItc3VwcGxpZWQgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGJ5IEBjb2Rle3l5cGFyc2V9IG9uIGVycm9yLgorQHhyZWZ7RXJyb3IgUmVwb3J0aW5nLCAsVGhlIEVycm9yCitSZXBvcnRpbmcgRnVuY3Rpb24gQGNvZGV7eXllcnJvcn19LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge01hY3JvfSBZWUVSUk9SX1ZFUkJPU0UKK0FuIG9ic29sZXRlIG1hY3JvIHRoYXQgeW91IGRlZmluZSB3aXRoIEBjb2RleyNkZWZpbmV9IGluIHRoZSBwcm9sb2d1ZQordG8gcmVxdWVzdCB2ZXJib3NlLCBzcGVjaWZpYyBlcnJvciBtZXNzYWdlIHN0cmluZ3MKK3doZW4gQGNvZGV7eXllcnJvcn0gaXMgY2FsbGVkLiAgSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCBkZWZpbml0aW9uIHlvdQordXNlIGZvciBAY29kZXtZWUVSUk9SX1ZFUkJPU0V9LCBqdXN0IHdoZXRoZXIgeW91IGRlZmluZSBpdC4KK1N1cHBvcnRlZCBieSB0aGUgQyBza2VsZXRvbnMgb25seTsgdXNpbmcKK0Bjb2RleyVlcnJvci12ZXJib3NlfSBpcyBwcmVmZXJyZWQuICBAeHJlZntFcnJvciBSZXBvcnRpbmd9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge01hY3JvfSBZWUZQUklOVEYKK01hY3JvIHVzZWQgdG8gb3V0cHV0IHJ1bi10aW1lIHRyYWNlcy4KK0B4cmVme0VuYWJsaW5nIFRyYWNlc30uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7TWFjcm99IFlZSU5JVERFUFRICitNYWNybyBmb3Igc3BlY2lmeWluZyB0aGUgaW5pdGlhbCBzaXplIG9mIHRoZSBwYXJzZXIgc3RhY2suCitAeHJlZntNZW1vcnkgTWFuYWdlbWVudH0uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RnVuY3Rpb259IHl5bGV4CitVc2VyLXN1cHBsaWVkIGxleGljYWwgYW5hbHl6ZXIgZnVuY3Rpb24sIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cyB0byBnZXQKK3RoZSBuZXh0IHRva2VuLiAgQHhyZWZ7TGV4aWNhbCwgLFRoZSBMZXhpY2FsIEFuYWx5emVyIEZ1bmN0aW9uCitAY29kZXt5eWxleH19LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge01hY3JvfSBZWUxFWF9QQVJBTQorQW4gb2Jzb2xldGUgbWFjcm8gZm9yIHNwZWNpZnlpbmcgYW4gZXh0cmEgYXJndW1lbnQgKG9yIGxpc3Qgb2YgZXh0cmEKK2FyZ3VtZW50cykgZm9yIEBjb2Rle3l5cGFyc2V9IHRvIHBhc3MgdG8gQGNvZGV7eXlsZXh9LiAgVGhlIHVzZSBvZiB0aGlzCittYWNybyBpcyBkZXByZWNhdGVkLCBhbmQgaXMgc3VwcG9ydGVkIG9ubHkgZm9yIFlhY2MgbGlrZSBwYXJzZXJzLgorQHhyZWZ7UHVyZSBDYWxsaW5nLCwgQ2FsbGluZyBDb252ZW50aW9ucyBmb3IgUHVyZSBQYXJzZXJzfS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtWYXJpYWJsZX0geXlsbG9jCitFeHRlcm5hbCB2YXJpYWJsZSBpbiB3aGljaCBAY29kZXt5eWxleH0gc2hvdWxkIHBsYWNlIHRoZSBsaW5lIGFuZCBjb2x1bW4KK251bWJlcnMgYXNzb2NpYXRlZCB3aXRoIGEgdG9rZW4uICAoSW4gYSBwdXJlIHBhcnNlciwgaXQgaXMgYSBsb2NhbAordmFyaWFibGUgd2l0aGluIEBjb2Rle3l5cGFyc2V9LCBhbmQgaXRzIGFkZHJlc3MgaXMgcGFzc2VkIHRvCitAY29kZXt5eWxleH0uKQorWW91IGNhbiBpZ25vcmUgdGhpcyB2YXJpYWJsZSBpZiB5b3UgZG9uJ3QgdXNlIHRoZSBAc2FtcHtAQH0gZmVhdHVyZSBpbiB0aGUKK2dyYW1tYXIgYWN0aW9ucy4KK0B4cmVme1Rva2VuIExvY2F0aW9ucywgLFRleHR1YWwgTG9jYXRpb25zIG9mIFRva2Vuc30uCitJbiBzZW1hbnRpYyBhY3Rpb25zLCBpdCBzdG9yZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBsb29rYWhlYWQgdG9rZW4uCitAeHJlZntBY3Rpb25zIGFuZCBMb2NhdGlvbnMsICxBY3Rpb25zIGFuZCBMb2NhdGlvbnN9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge1R5cGV9IFlZTFRZUEUKK0RhdGEgdHlwZSBvZiBAY29kZXt5eWxsb2N9OyBieSBkZWZhdWx0LCBhIHN0cnVjdHVyZSB3aXRoIGZvdXIKK21lbWJlcnMuICBAeHJlZntMb2NhdGlvbiBUeXBlLCAsIERhdGEgVHlwZXMgb2YgTG9jYXRpb25zfS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtWYXJpYWJsZX0geXlsdmFsCitFeHRlcm5hbCB2YXJpYWJsZSBpbiB3aGljaCBAY29kZXt5eWxleH0gc2hvdWxkIHBsYWNlIHRoZSBzZW1hbnRpYwordmFsdWUgYXNzb2NpYXRlZCB3aXRoIGEgdG9rZW4uICAoSW4gYSBwdXJlIHBhcnNlciwgaXQgaXMgYSBsb2NhbAordmFyaWFibGUgd2l0aGluIEBjb2Rle3l5cGFyc2V9LCBhbmQgaXRzIGFkZHJlc3MgaXMgcGFzc2VkIHRvCitAY29kZXt5eWxleH0uKQorQHhyZWZ7VG9rZW4gVmFsdWVzLCAsU2VtYW50aWMgVmFsdWVzIG9mIFRva2Vuc30uCitJbiBzZW1hbnRpYyBhY3Rpb25zLCBpdCBzdG9yZXMgdGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rYWhlYWQgdG9rZW4uCitAeHJlZntBY3Rpb25zLCAsQWN0aW9uc30uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7TWFjcm99IFlZTUFYREVQVEgKK01hY3JvIGZvciBzcGVjaWZ5aW5nIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHBhcnNlciBzdGFjay4gIEB4cmVme01lbW9yeQorTWFuYWdlbWVudH0uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7VmFyaWFibGV9IHl5bmVycnMKK0dsb2JhbCB2YXJpYWJsZSB3aGljaCBCaXNvbiBpbmNyZW1lbnRzIGVhY2ggdGltZSBpdCByZXBvcnRzIGEgc3ludGF4IGVycm9yLgorKEluIGEgcHVyZSBwYXJzZXIsIGl0IGlzIGEgbG9jYWwgdmFyaWFibGUgd2l0aGluIEBjb2Rle3l5cGFyc2V9LiBJbiBhCitwdXJlIHB1c2ggcGFyc2VyLCBpdCBpcyBhIG1lbWJlciBvZiB5eXBzdGF0ZS4pCitAeHJlZntFcnJvciBSZXBvcnRpbmcsICxUaGUgRXJyb3IgUmVwb3J0aW5nIEZ1bmN0aW9uIEBjb2Rle3l5ZXJyb3J9fS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtGdW5jdGlvbn0geXlwYXJzZQorVGhlIHBhcnNlciBmdW5jdGlvbiBwcm9kdWNlZCBieSBCaXNvbjsgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHN0YXJ0CitwYXJzaW5nLiAgQHhyZWZ7UGFyc2VyIEZ1bmN0aW9uLCAsVGhlIFBhcnNlciBGdW5jdGlvbiBAY29kZXt5eXBhcnNlfX0uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7TWFjcm99IFlZUFJJTlQKK01hY3JvIHVzZWQgdG8gb3V0cHV0IHRva2VuIHNlbWFudGljIHZhbHVlcy4gIEZvciBAZmlsZXt5YWNjLmN9IG9ubHkuCitPYnNvbGV0ZWQgYnkgQGNvZGV7JXByaW50ZXJ9LgorQHhyZWZ7VGhlIFlZUFJJTlQgTWFjcm8sICwgVGhlIEBjb2Rle1lZUFJJTlR9IE1hY3JvfS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtGdW5jdGlvbn0geXlwc3RhdGVfZGVsZXRlCitUaGUgZnVuY3Rpb24gdG8gZGVsZXRlIGEgcGFyc2VyIGluc3RhbmNlLCBwcm9kdWNlZCBieSBCaXNvbiBpbiBwdXNoIG1vZGU7CitjYWxsIHRoaXMgZnVuY3Rpb24gdG8gZGVsZXRlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGEgcGFyc2VyLgorQHhyZWZ7UGFyc2VyIERlbGV0ZSBGdW5jdGlvbiwgLFRoZSBQYXJzZXIgRGVsZXRlIEZ1bmN0aW9uCitAY29kZXt5eXBzdGF0ZV9kZWxldGV9fS4KKyhUaGUgY3VycmVudCBwdXNoIHBhcnNpbmcgaW50ZXJmYWNlIGlzIGV4cGVyaW1lbnRhbCBhbmQgbWF5IGV2b2x2ZS4KK01vcmUgdXNlciBmZWVkYmFjayB3aWxsIGhlbHAgdG8gc3RhYmlsaXplIGl0LikKK0BlbmQgZGVmZm4KKworQGRlZmZuIHtGdW5jdGlvbn0geXlwc3RhdGVfbmV3CitUaGUgZnVuY3Rpb24gdG8gY3JlYXRlIGEgcGFyc2VyIGluc3RhbmNlLCBwcm9kdWNlZCBieSBCaXNvbiBpbiBwdXNoIG1vZGU7CitjYWxsIHRoaXMgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IHBhcnNlci4KK0B4cmVme1BhcnNlciBDcmVhdGUgRnVuY3Rpb24sICxUaGUgUGFyc2VyIENyZWF0ZSBGdW5jdGlvbgorQGNvZGV7eXlwc3RhdGVfbmV3fX0uCisoVGhlIGN1cnJlbnQgcHVzaCBwYXJzaW5nIGludGVyZmFjZSBpcyBleHBlcmltZW50YWwgYW5kIG1heSBldm9sdmUuCitNb3JlIHVzZXIgZmVlZGJhY2sgd2lsbCBoZWxwIHRvIHN0YWJpbGl6ZSBpdC4pCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7RnVuY3Rpb259IHl5cHVsbF9wYXJzZQorVGhlIHBhcnNlciBmdW5jdGlvbiBwcm9kdWNlZCBieSBCaXNvbiBpbiBwdXNoIG1vZGU7IGNhbGwgdGhpcyBmdW5jdGlvbiB0bworcGFyc2UgdGhlIHJlc3Qgb2YgdGhlIGlucHV0IHN0cmVhbS4KK0B4cmVme1B1bGwgUGFyc2VyIEZ1bmN0aW9uLCAsVGhlIFB1bGwgUGFyc2VyIEZ1bmN0aW9uCitAY29kZXt5eXB1bGxfcGFyc2V9fS4KKyhUaGUgY3VycmVudCBwdXNoIHBhcnNpbmcgaW50ZXJmYWNlIGlzIGV4cGVyaW1lbnRhbCBhbmQgbWF5IGV2b2x2ZS4KK01vcmUgdXNlciBmZWVkYmFjayB3aWxsIGhlbHAgdG8gc3RhYmlsaXplIGl0LikKK0BlbmQgZGVmZm4KKworQGRlZmZuIHtGdW5jdGlvbn0geXlwdXNoX3BhcnNlCitUaGUgcGFyc2VyIGZ1bmN0aW9uIHByb2R1Y2VkIGJ5IEJpc29uIGluIHB1c2ggbW9kZTsgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvCitwYXJzZSBhIHNpbmdsZSB0b2tlbi4gIEB4cmVme1B1c2ggUGFyc2VyIEZ1bmN0aW9uLCAsVGhlIFB1c2ggUGFyc2VyIEZ1bmN0aW9uCitAY29kZXt5eXB1c2hfcGFyc2V9fS4KKyhUaGUgY3VycmVudCBwdXNoIHBhcnNpbmcgaW50ZXJmYWNlIGlzIGV4cGVyaW1lbnRhbCBhbmQgbWF5IGV2b2x2ZS4KK01vcmUgdXNlciBmZWVkYmFjayB3aWxsIGhlbHAgdG8gc3RhYmlsaXplIGl0LikKK0BlbmQgZGVmZm4KKworQGRlZmZuIHtNYWNyb30gWVlQQVJTRV9QQVJBTQorQW4gb2Jzb2xldGUgbWFjcm8gZm9yIHNwZWNpZnlpbmcgdGhlIG5hbWUgb2YgYSBwYXJhbWV0ZXIgdGhhdAorQGNvZGV7eXlwYXJzZX0gc2hvdWxkIGFjY2VwdC4gIFRoZSB1c2Ugb2YgdGhpcyBtYWNybyBpcyBkZXByZWNhdGVkLCBhbmQKK2lzIHN1cHBvcnRlZCBvbmx5IGZvciBZYWNjIGxpa2UgcGFyc2Vycy4gIEB4cmVme1B1cmUgQ2FsbGluZywsIENhbGxpbmcKK0NvbnZlbnRpb25zIGZvciBQdXJlIFBhcnNlcnN9LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge01hY3JvfSBZWVJFQ09WRVJJTkcKK1RoZSBleHByZXNzaW9uIEBjb2Rle1lZUkVDT1ZFUklORyAoKX0geWllbGRzIDEgd2hlbiB0aGUgcGFyc2VyCitpcyByZWNvdmVyaW5nIGZyb20gYSBzeW50YXggZXJyb3IsIGFuZCAwIG90aGVyd2lzZS4KK0B4cmVme0FjdGlvbiBGZWF0dXJlcywgLFNwZWNpYWwgRmVhdHVyZXMgZm9yIFVzZSBpbiBBY3Rpb25zfS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtNYWNyb30gWVlTVEFDS19VU0VfQUxMT0NBCitNYWNybyB1c2VkIHRvIGNvbnRyb2wgdGhlIHVzZSBvZiBAY29kZXthbGxvY2F9IHdoZW4gdGhlCitkZXRlcm1pbmlzdGljIHBhcnNlciBpbiBDIG5lZWRzIHRvIGV4dGVuZCBpdHMgc3RhY2tzLiAgSWYgZGVmaW5lZCB0byAwLAordGhlIHBhcnNlciB3aWxsIHVzZSBAY29kZXttYWxsb2N9IHRvIGV4dGVuZCBpdHMgc3RhY2tzLiAgSWYgZGVmaW5lZCB0bworMSwgdGhlIHBhcnNlciB3aWxsIHVzZSBAY29kZXthbGxvY2F9LiAgVmFsdWVzIG90aGVyIHRoYW4gMCBhbmQgMSBhcmUKK3Jlc2VydmVkIGZvciBmdXR1cmUgQmlzb24gZXh0ZW5zaW9ucy4gIElmIG5vdCBkZWZpbmVkLAorQGNvZGV7WVlTVEFDS19VU0VfQUxMT0NBfSBkZWZhdWx0cyB0byAwLgorCitJbiB0aGUgYWxsLXRvby1jb21tb24gY2FzZSB3aGVyZSB5b3VyIGNvZGUgbWF5IHJ1biBvbiBhIGhvc3Qgd2l0aCBhCitsaW1pdGVkIHN0YWNrIGFuZCB3aXRoIHVucmVsaWFibGUgc3RhY2stb3ZlcmZsb3cgY2hlY2tpbmcsIHlvdSBzaG91bGQKK3NldCBAY29kZXtZWU1BWERFUFRIfSB0byBhIHZhbHVlIHRoYXQgY2Fubm90IHBvc3NpYmx5IHJlc3VsdCBpbgordW5jaGVja2VkIHN0YWNrIG92ZXJmbG93IG9uIGFueSBvZiB5b3VyIHRhcmdldCBob3N0cyB3aGVuCitAY29kZXthbGxvY2F9IGlzIGNhbGxlZC4gIFlvdSBjYW4gaW5zcGVjdCB0aGUgY29kZSB0aGF0IEJpc29uCitnZW5lcmF0ZXMgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHRoZSBwcm9wZXIgbnVtZXJpYyB2YWx1ZXMuICBUaGlzIHdpbGwKK3JlcXVpcmUgc29tZSBleHBlcnRpc2UgaW4gbG93LWxldmVsIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7VHlwZX0gWVlTVFlQRQorRGF0YSB0eXBlIG9mIHNlbWFudGljIHZhbHVlczsgQGNvZGV7aW50fSBieSBkZWZhdWx0LgorQHhyZWZ7VmFsdWUgVHlwZSwgLERhdGEgVHlwZXMgb2YgU2VtYW50aWMgVmFsdWVzfS4KK0BlbmQgZGVmZm4KKworQG5vZGUgR2xvc3NhcnkKK0BhcHBlbmRpeCBHbG9zc2FyeQorQGNpbmRleCBnbG9zc2FyeQorCitAdGFibGUgQGFzaXMKK0BpdGVtIEFjY2VwdGluZyBzdGF0ZQorQSBzdGF0ZSB3aG9zZSBvbmx5IGFjdGlvbiBpcyB0aGUgYWNjZXB0IGFjdGlvbi4KK1RoZSBhY2NlcHRpbmcgc3RhdGUgaXMgdGh1cyBhIGNvbnNpc3RlbnQgc3RhdGUuCitAeHJlZntVbmRlcnN0YW5kaW5nLCAsVW5kZXJzdGFuZGluZyBZb3VyIFBhcnNlcn0uCisKK0BpdGVtIEJhY2t1cy1OYXVyIEZvcm0gKEJORjsgYWxzbyBjYWxsZWQgYGBCYWNrdXMgTm9ybWFsIEZvcm0nJykKK0Zvcm1hbCBtZXRob2Qgb2Ygc3BlY2lmeWluZyBjb250ZXh0LWZyZWUgZ3JhbW1hcnMgb3JpZ2luYWxseSBwcm9wb3NlZAorYnkgSm9obiBCYWNrdXMsIGFuZCBzbGlnaHRseSBpbXByb3ZlZCBieSBQZXRlciBOYXVyIGluIGhpcyAxOTYwLTAxLTAyCitjb21taXR0ZWUgZG9jdW1lbnQgY29udHJpYnV0aW5nIHRvIHdoYXQgYmVjYW1lIHRoZSBBbGdvbCA2MCByZXBvcnQuCitAeHJlZntMYW5ndWFnZSBhbmQgR3JhbW1hciwgLExhbmd1YWdlcyBhbmQgQ29udGV4dC1GcmVlIEdyYW1tYXJzfS4KKworQGl0ZW0gQ29uc2lzdGVudCBzdGF0ZQorQSBzdGF0ZSBjb250YWluaW5nIG9ubHkgb25lIHBvc3NpYmxlIGFjdGlvbi4gIEB4cmVme0RlZmF1bHQgUmVkdWN0aW9uc30uCisKK0BpdGVtIENvbnRleHQtZnJlZSBncmFtbWFycworR3JhbW1hcnMgc3BlY2lmaWVkIGFzIHJ1bGVzIHRoYXQgY2FuIGJlIGFwcGxpZWQgcmVnYXJkbGVzcyBvZiBjb250ZXh0LgorVGh1cywgaWYgdGhlcmUgaXMgYSBydWxlIHdoaWNoIHNheXMgdGhhdCBhbiBpbnRlZ2VyIGNhbiBiZSB1c2VkIGFzIGFuCitleHByZXNzaW9uLCBpbnRlZ2VycyBhcmUgYWxsb3dlZCBAZW1waHthbnl3aGVyZX0gYW4gZXhwcmVzc2lvbiBpcworcGVybWl0dGVkLiAgQHhyZWZ7TGFuZ3VhZ2UgYW5kIEdyYW1tYXIsICxMYW5ndWFnZXMgYW5kIENvbnRleHQtRnJlZQorR3JhbW1hcnN9LgorCitAaXRlbSBEZWZhdWx0IHJlZHVjdGlvbgorVGhlIHJlZHVjdGlvbiB0aGF0IGEgcGFyc2VyIHNob3VsZCBwZXJmb3JtIGlmIHRoZSBjdXJyZW50IHBhcnNlciBzdGF0ZQorY29udGFpbnMgbm8gb3RoZXIgYWN0aW9uIGZvciB0aGUgbG9va2FoZWFkIHRva2VuLiAgSW4gcGVybWl0dGVkIHBhcnNlcgorc3RhdGVzLCBCaXNvbiBkZWNsYXJlcyB0aGUgcmVkdWN0aW9uIHdpdGggdGhlIGxhcmdlc3QgbG9va2FoZWFkIHNldCB0byBiZQordGhlIGRlZmF1bHQgcmVkdWN0aW9uIGFuZCByZW1vdmVzIHRoYXQgbG9va2FoZWFkIHNldC4gIEB4cmVme0RlZmF1bHQKK1JlZHVjdGlvbnN9LgorCitAaXRlbSBEZWZhdWx0ZWQgc3RhdGUKK0EgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCByZWR1Y3Rpb24uICBAeHJlZntEZWZhdWx0IFJlZHVjdGlvbnN9LgorCitAaXRlbSBEeW5hbWljIGFsbG9jYXRpb24KK0FsbG9jYXRpb24gb2YgbWVtb3J5IHRoYXQgb2NjdXJzIGR1cmluZyBleGVjdXRpb24sIHJhdGhlciB0aGFuIGF0Citjb21waWxlIHRpbWUgb3Igb24gZW50cnkgdG8gYSBmdW5jdGlvbi4KKworQGl0ZW0gRW1wdHkgc3RyaW5nCitBbmFsb2dvdXMgdG8gdGhlIGVtcHR5IHNldCBpbiBzZXQgdGhlb3J5LCB0aGUgZW1wdHkgc3RyaW5nIGlzIGEKK2NoYXJhY3RlciBzdHJpbmcgb2YgbGVuZ3RoIHplcm8uCisKK0BpdGVtIEZpbml0ZS1zdGF0ZSBzdGFjayBtYWNoaW5lCitBIGBgbWFjaGluZScnIHRoYXQgaGFzIGRpc2NyZXRlIHN0YXRlcyBpbiB3aGljaCBpdCBpcyBzYWlkIHRvIGV4aXN0IGF0CitlYWNoIGluc3RhbnQgaW4gdGltZS4gIEFzIGlucHV0IHRvIHRoZSBtYWNoaW5lIGlzIHByb2Nlc3NlZCwgdGhlCittYWNoaW5lIG1vdmVzIGZyb20gc3RhdGUgdG8gc3RhdGUgYXMgc3BlY2lmaWVkIGJ5IHRoZSBsb2dpYyBvZiB0aGUKK21hY2hpbmUuICBJbiB0aGUgY2FzZSBvZiB0aGUgcGFyc2VyLCB0aGUgaW5wdXQgaXMgdGhlIGxhbmd1YWdlIGJlaW5nCitwYXJzZWQsIGFuZCB0aGUgc3RhdGVzIGNvcnJlc3BvbmQgdG8gdmFyaW91cyBzdGFnZXMgaW4gdGhlIGdyYW1tYXIKK3J1bGVzLiAgQHhyZWZ7QWxnb3JpdGhtLCAsVGhlIEJpc29uIFBhcnNlciBBbGdvcml0aG19LgorCitAaXRlbSBHZW5lcmFsaXplZCBMUiAoR0xSKQorQSBwYXJzaW5nIGFsZ29yaXRobSB0aGF0IGNhbiBoYW5kbGUgYWxsIGNvbnRleHQtZnJlZSBncmFtbWFycywgaW5jbHVkaW5nIHRob3NlCit0aGF0IGFyZSBub3QgTFIoMSkuICBJdCByZXNvbHZlcyBzaXR1YXRpb25zIHRoYXQgQmlzb24ncworZGV0ZXJtaW5pc3RpYyBwYXJzaW5nCithbGdvcml0aG0gY2Fubm90IGJ5IGVmZmVjdGl2ZWx5IHNwbGl0dGluZyBvZmYgbXVsdGlwbGUgcGFyc2VycywgdHJ5aW5nIGFsbAorcG9zc2libGUgcGFyc2VycywgYW5kIGRpc2NhcmRpbmcgdGhvc2UgdGhhdCBmYWlsIGluIHRoZSBsaWdodCBvZiBhZGRpdGlvbmFsCityaWdodCBjb250ZXh0LiAgQHhyZWZ7R2VuZXJhbGl6ZWQgTFIgUGFyc2luZywgLEdlbmVyYWxpemVkCitMUiBQYXJzaW5nfS4KKworQGl0ZW0gR3JvdXBpbmcKK0EgbGFuZ3VhZ2UgY29uc3RydWN0IHRoYXQgaXMgKGluIGdlbmVyYWwpIGdyYW1tYXRpY2FsbHkgZGl2aXNpYmxlOworZm9yIGV4YW1wbGUsIGBleHByZXNzaW9uJyBvciBgZGVjbGFyYXRpb24nIGluIENALgorQHhyZWZ7TGFuZ3VhZ2UgYW5kIEdyYW1tYXIsICxMYW5ndWFnZXMgYW5kIENvbnRleHQtRnJlZSBHcmFtbWFyc30uCisKK0BpdGVtIElFTFIoMSkgKEluYWRlcXVhY3kgRWxpbWluYXRpb24gTFIoMSkpCitBIG1pbmltYWwgTFIoMSkgcGFyc2VyIHRhYmxlIGNvbnN0cnVjdGlvbiBhbGdvcml0aG0uICBUaGF0IGlzLCBnaXZlbiBhbnkKK2NvbnRleHQtZnJlZSBncmFtbWFyLCBJRUxSKDEpIGdlbmVyYXRlcyBwYXJzZXIgdGFibGVzIHdpdGggdGhlIGZ1bGwKK2xhbmd1YWdlLXJlY29nbml0aW9uIHBvd2VyIG9mIGNhbm9uaWNhbCBMUigxKSBidXQgd2l0aCBuZWFybHkgdGhlIHNhbWUKK251bWJlciBvZiBwYXJzZXIgc3RhdGVzIGFzIExBTFIoMSkuICBUaGlzIHJlZHVjdGlvbiBpbiBwYXJzZXIgc3RhdGVzIGlzCitvZnRlbiBhbiBvcmRlciBvZiBtYWduaXR1ZGUuICBNb3JlIGltcG9ydGFudGx5LCBiZWNhdXNlIGNhbm9uaWNhbCBMUigxKSdzCitleHRyYSBwYXJzZXIgc3RhdGVzIG1heSBjb250YWluIGR1cGxpY2F0ZSBjb25mbGljdHMgaW4gdGhlIGNhc2Ugb2Ygbm9uLUxSKDEpCitncmFtbWFycywgdGhlIG51bWJlciBvZiBjb25mbGljdHMgZm9yIElFTFIoMSkgaXMgb2Z0ZW4gYW4gb3JkZXIgb2YgbWFnbml0dWRlCitsZXNzIGFzIHdlbGwuICBUaGlzIGNhbiBzaWduaWZpY2FudGx5IHJlZHVjZSB0aGUgY29tcGxleGl0eSBvZiBkZXZlbG9waW5nIGEKK2dyYW1tYXIuICBAeHJlZntMUiBUYWJsZSBDb25zdHJ1Y3Rpb259LgorCitAaXRlbSBJbmZpeCBvcGVyYXRvcgorQW4gYXJpdGhtZXRpYyBvcGVyYXRvciB0aGF0IGlzIHBsYWNlZCBiZXR3ZWVuIHRoZSBvcGVyYW5kcyBvbiB3aGljaCBpdAorcGVyZm9ybXMgc29tZSBvcGVyYXRpb24uCisKK0BpdGVtIElucHV0IHN0cmVhbQorQSBjb250aW51b3VzIGZsb3cgb2YgZGF0YSBiZXR3ZWVuIGRldmljZXMgb3IgcHJvZ3JhbXMuCisKK0BpdGVtIExBQyAoTG9va2FoZWFkIENvcnJlY3Rpb24pCitBIHBhcnNpbmcgbWVjaGFuaXNtIHRoYXQgZml4ZXMgdGhlIHByb2JsZW0gb2YgZGVsYXllZCBzeW50YXggZXJyb3IKK2RldGVjdGlvbiwgd2hpY2ggaXMgY2F1c2VkIGJ5IExSIHN0YXRlIG1lcmdpbmcsIGRlZmF1bHQgcmVkdWN0aW9ucywgYW5kIHRoZQordXNlIG9mIEBjb2RleyVub25hc3NvY30uICBEZWxheWVkIHN5bnRheCBlcnJvciBkZXRlY3Rpb24gcmVzdWx0cyBpbgordW5leHBlY3RlZCBzZW1hbnRpYyBhY3Rpb25zLCBpbml0aWF0aW9uIG9mIGVycm9yIHJlY292ZXJ5IGluIHRoZSB3cm9uZworc3ludGFjdGljIGNvbnRleHQsIGFuZCBhbiBpbmNvcnJlY3QgbGlzdCBvZiBleHBlY3RlZCB0b2tlbnMgaW4gYSB2ZXJib3NlCitzeW50YXggZXJyb3IgbWVzc2FnZS4gIEB4cmVme0xBQ30uCisKK0BpdGVtIExhbmd1YWdlIGNvbnN0cnVjdAorT25lIG9mIHRoZSB0eXBpY2FsIHVzYWdlIHNjaGVtYXMgb2YgdGhlIGxhbmd1YWdlLiAgRm9yIGV4YW1wbGUsIG9uZSBvZgordGhlIGNvbnN0cnVjdHMgb2YgdGhlIEMgbGFuZ3VhZ2UgaXMgdGhlIEBjb2Rle2lmfSBzdGF0ZW1lbnQuCitAeHJlZntMYW5ndWFnZSBhbmQgR3JhbW1hciwgLExhbmd1YWdlcyBhbmQgQ29udGV4dC1GcmVlIEdyYW1tYXJzfS4KKworQGl0ZW0gTGVmdCBhc3NvY2lhdGl2aXR5CitPcGVyYXRvcnMgaGF2aW5nIGxlZnQgYXNzb2NpYXRpdml0eSBhcmUgYW5hbHl6ZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0OgorQHNhbXB7YStiK2N9IGZpcnN0IGNvbXB1dGVzIEBzYW1we2ErYn0gYW5kIHRoZW4gY29tYmluZXMgd2l0aAorQHNhbXB7Y30uICBAeHJlZntQcmVjZWRlbmNlLCAsT3BlcmF0b3IgUHJlY2VkZW5jZX0uCisKK0BpdGVtIExlZnQgcmVjdXJzaW9uCitBIHJ1bGUgd2hvc2UgcmVzdWx0IHN5bWJvbCBpcyBhbHNvIGl0cyBmaXJzdCBjb21wb25lbnQgc3ltYm9sOyBmb3IKK2V4YW1wbGUsIEBzYW1we2V4cHNlcTEgOiBleHBzZXExICcsJyBleHA7fS4gIEB4cmVme1JlY3Vyc2lvbiwgLFJlY3Vyc2l2ZQorUnVsZXN9LgorCitAaXRlbSBMZWZ0LXRvLXJpZ2h0IHBhcnNpbmcKK1BhcnNpbmcgYSBzZW50ZW5jZSBvZiBhIGxhbmd1YWdlIGJ5IGFuYWx5emluZyBpdCB0b2tlbiBieSB0b2tlbiBmcm9tCitsZWZ0IHRvIHJpZ2h0LiAgQHhyZWZ7QWxnb3JpdGhtLCAsVGhlIEJpc29uIFBhcnNlciBBbGdvcml0aG19LgorCitAaXRlbSBMZXhpY2FsIGFuYWx5emVyIChzY2FubmVyKQorQSBmdW5jdGlvbiB0aGF0IHJlYWRzIGFuIGlucHV0IHN0cmVhbSBhbmQgcmV0dXJucyB0b2tlbnMgb25lIGJ5IG9uZS4KK0B4cmVme0xleGljYWwsICxUaGUgTGV4aWNhbCBBbmFseXplciBGdW5jdGlvbiBAY29kZXt5eWxleH19LgorCitAaXRlbSBMZXhpY2FsIHRpZS1pbgorQSBmbGFnLCBzZXQgYnkgYWN0aW9ucyBpbiB0aGUgZ3JhbW1hciBydWxlcywgd2hpY2ggYWx0ZXJzIHRoZSB3YXkKK3Rva2VucyBhcmUgcGFyc2VkLiAgQHhyZWZ7TGV4aWNhbCBUaWUtaW5zfS4KKworQGl0ZW0gTGl0ZXJhbCBzdHJpbmcgdG9rZW4KK0EgdG9rZW4gd2hpY2ggY29uc2lzdHMgb2YgdHdvIG9yIG1vcmUgZml4ZWQgY2hhcmFjdGVycy4gIEB4cmVme1N5bWJvbHN9LgorCitAaXRlbSBMb29rYWhlYWQgdG9rZW4KK0EgdG9rZW4gYWxyZWFkeSByZWFkIGJ1dCBub3QgeWV0IHNoaWZ0ZWQuICBAeHJlZntMb29rYWhlYWQsICxMb29rYWhlYWQKK1Rva2Vuc30uCisKK0BpdGVtIExBTFIoMSkKK1RoZSBjbGFzcyBvZiBjb250ZXh0LWZyZWUgZ3JhbW1hcnMgdGhhdCBCaXNvbiAobGlrZSBtb3N0IG90aGVyIHBhcnNlcgorZ2VuZXJhdG9ycykgY2FuIGhhbmRsZSBieSBkZWZhdWx0OyBhIHN1YnNldCBvZiBMUigxKS4KK0B4cmVme015c3RlcmlvdXMgQ29uZmxpY3RzfS4KKworQGl0ZW0gTFIoMSkKK1RoZSBjbGFzcyBvZiBjb250ZXh0LWZyZWUgZ3JhbW1hcnMgaW4gd2hpY2ggYXQgbW9zdCBvbmUgdG9rZW4gb2YKK2xvb2thaGVhZCBpcyBuZWVkZWQgdG8gZGlzYW1iaWd1YXRlIHRoZSBwYXJzaW5nIG9mIGFueSBwaWVjZSBvZiBpbnB1dC4KKworQGl0ZW0gTm9udGVybWluYWwgc3ltYm9sCitBIGdyYW1tYXIgc3ltYm9sIHN0YW5kaW5nIGZvciBhIGdyYW1tYXRpY2FsIGNvbnN0cnVjdCB0aGF0IGNhbgorYmUgZXhwcmVzc2VkIHRocm91Z2ggcnVsZXMgaW4gdGVybXMgb2Ygc21hbGxlciBjb25zdHJ1Y3RzOyBpbiBvdGhlcgord29yZHMsIGEgY29uc3RydWN0IHRoYXQgaXMgbm90IGEgdG9rZW4uICBAeHJlZntTeW1ib2xzfS4KKworQGl0ZW0gUGFyc2VyCitBIGZ1bmN0aW9uIHRoYXQgcmVjb2duaXplcyB2YWxpZCBzZW50ZW5jZXMgb2YgYSBsYW5ndWFnZSBieSBhbmFseXppbmcKK3RoZSBzeW50YXggc3RydWN0dXJlIG9mIGEgc2V0IG9mIHRva2VucyBwYXNzZWQgdG8gaXQgZnJvbSBhIGxleGljYWwKK2FuYWx5emVyLgorCitAaXRlbSBQb3N0Zml4IG9wZXJhdG9yCitBbiBhcml0aG1ldGljIG9wZXJhdG9yIHRoYXQgaXMgcGxhY2VkIGFmdGVyIHRoZSBvcGVyYW5kcyB1cG9uIHdoaWNoIGl0CitwZXJmb3JtcyBzb21lIG9wZXJhdGlvbi4KKworQGl0ZW0gUmVkdWN0aW9uCitSZXBsYWNpbmcgYSBzdHJpbmcgb2Ygbm9udGVybWluYWxzIGFuZC9vciB0ZXJtaW5hbHMgd2l0aCBhIHNpbmdsZQorbm9udGVybWluYWwsIGFjY29yZGluZyB0byBhIGdyYW1tYXIgcnVsZS4gIEB4cmVme0FsZ29yaXRobSwgLFRoZSBCaXNvbgorUGFyc2VyIEFsZ29yaXRobX0uCisKK0BpdGVtIFJlZW50cmFudAorQSByZWVudHJhbnQgc3VicHJvZ3JhbSBpcyBhIHN1YnByb2dyYW0gd2hpY2ggY2FuIGJlIGluIGludm9rZWQgYW55CitudW1iZXIgb2YgdGltZXMgaW4gcGFyYWxsZWwsIHdpdGhvdXQgaW50ZXJmZXJlbmNlIGJldHdlZW4gdGhlIHZhcmlvdXMKK2ludm9jYXRpb25zLiAgQHhyZWZ7UHVyZSBEZWNsLCAsQSBQdXJlIChSZWVudHJhbnQpIFBhcnNlcn0uCisKK0BpdGVtIFJldmVyc2UgcG9saXNoIG5vdGF0aW9uCitBIGxhbmd1YWdlIGluIHdoaWNoIGFsbCBvcGVyYXRvcnMgYXJlIHBvc3RmaXggb3BlcmF0b3JzLgorCitAaXRlbSBSaWdodCByZWN1cnNpb24KK0EgcnVsZSB3aG9zZSByZXN1bHQgc3ltYm9sIGlzIGFsc28gaXRzIGxhc3QgY29tcG9uZW50IHN5bWJvbDsgZm9yCitleGFtcGxlLCBAc2FtcHtleHBzZXExOiBleHAgJywnIGV4cHNlcTE7fS4gIEB4cmVme1JlY3Vyc2lvbiwgLFJlY3Vyc2l2ZQorUnVsZXN9LgorCitAaXRlbSBTZW1hbnRpY3MKK0luIGNvbXB1dGVyIGxhbmd1YWdlcywgdGhlIHNlbWFudGljcyBhcmUgc3BlY2lmaWVkIGJ5IHRoZSBhY3Rpb25zCit0YWtlbiBmb3IgZWFjaCBpbnN0YW5jZSBvZiB0aGUgbGFuZ3VhZ2UsIGkuZS4sIHRoZSBtZWFuaW5nIG9mCitlYWNoIHN0YXRlbWVudC4gIEB4cmVme1NlbWFudGljcywgLERlZmluaW5nIExhbmd1YWdlIFNlbWFudGljc30uCisKK0BpdGVtIFNoaWZ0CitBIHBhcnNlciBpcyBzYWlkIHRvIHNoaWZ0IHdoZW4gaXQgbWFrZXMgdGhlIGNob2ljZSBvZiBhbmFseXppbmcKK2Z1cnRoZXIgaW5wdXQgZnJvbSB0aGUgc3RyZWFtIHJhdGhlciB0aGFuIHJlZHVjaW5nIGltbWVkaWF0ZWx5IHNvbWUKK2FscmVhZHktcmVjb2duaXplZCBydWxlLiAgQHhyZWZ7QWxnb3JpdGhtLCAsVGhlIEJpc29uIFBhcnNlciBBbGdvcml0aG19LgorCitAaXRlbSBTaW5nbGUtY2hhcmFjdGVyIGxpdGVyYWwKK0Egc2luZ2xlIGNoYXJhY3RlciB0aGF0IGlzIHJlY29nbml6ZWQgYW5kIGludGVycHJldGVkIGFzIGlzLgorQHhyZWZ7R3JhbW1hciBpbiBCaXNvbiwgLEZyb20gRm9ybWFsIFJ1bGVzIHRvIEJpc29uIElucHV0fS4KKworQGl0ZW0gU3RhcnQgc3ltYm9sCitUaGUgbm9udGVybWluYWwgc3ltYm9sIHRoYXQgc3RhbmRzIGZvciBhIGNvbXBsZXRlIHZhbGlkIHV0dGVyYW5jZSBpbgordGhlIGxhbmd1YWdlIGJlaW5nIHBhcnNlZC4gIFRoZSBzdGFydCBzeW1ib2wgaXMgdXN1YWxseSBsaXN0ZWQgYXMgdGhlCitmaXJzdCBub250ZXJtaW5hbCBzeW1ib2wgaW4gYSBsYW5ndWFnZSBzcGVjaWZpY2F0aW9uLgorQHhyZWZ7U3RhcnQgRGVjbCwgLFRoZSBTdGFydC1TeW1ib2x9LgorCitAaXRlbSBTeW1ib2wgdGFibGUKK0EgZGF0YSBzdHJ1Y3R1cmUgd2hlcmUgc3ltYm9sIG5hbWVzIGFuZCBhc3NvY2lhdGVkIGRhdGEgYXJlIHN0b3JlZAorZHVyaW5nIHBhcnNpbmcgdG8gYWxsb3cgZm9yIHJlY29nbml0aW9uIGFuZCB1c2Ugb2YgZXhpc3RpbmcKK2luZm9ybWF0aW9uIGluIHJlcGVhdGVkIHVzZXMgb2YgYSBzeW1ib2wuICBAeHJlZntNdWx0aS1mdW5jdGlvbiBDYWxjfS4KKworQGl0ZW0gU3ludGF4IGVycm9yCitBbiBlcnJvciBlbmNvdW50ZXJlZCBkdXJpbmcgcGFyc2luZyBvZiBhbiBpbnB1dCBzdHJlYW0gZHVlIHRvIGludmFsaWQKK3N5bnRheC4gIEB4cmVme0Vycm9yIFJlY292ZXJ5fS4KKworQGl0ZW0gVG9rZW4KK0EgYmFzaWMsIGdyYW1tYXRpY2FsbHkgaW5kaXZpc2libGUgdW5pdCBvZiBhIGxhbmd1YWdlLiAgVGhlIHN5bWJvbAordGhhdCBkZXNjcmliZXMgYSB0b2tlbiBpbiB0aGUgZ3JhbW1hciBpcyBhIHRlcm1pbmFsIHN5bWJvbC4KK1RoZSBpbnB1dCBvZiB0aGUgQmlzb24gcGFyc2VyIGlzIGEgc3RyZWFtIG9mIHRva2VucyB3aGljaCBjb21lcyBmcm9tCit0aGUgbGV4aWNhbCBhbmFseXplci4gIEB4cmVme1N5bWJvbHN9LgorCitAaXRlbSBUZXJtaW5hbCBzeW1ib2wKK0EgZ3JhbW1hciBzeW1ib2wgdGhhdCBoYXMgbm8gcnVsZXMgaW4gdGhlIGdyYW1tYXIgYW5kIHRoZXJlZm9yZSBpcworZ3JhbW1hdGljYWxseSBpbmRpdmlzaWJsZS4gIFRoZSBwaWVjZSBvZiB0ZXh0IGl0IHJlcHJlc2VudHMgaXMgYSB0b2tlbi4KK0B4cmVme0xhbmd1YWdlIGFuZCBHcmFtbWFyLCAsTGFuZ3VhZ2VzIGFuZCBDb250ZXh0LUZyZWUgR3JhbW1hcnN9LgorCitAaXRlbSBVbnJlYWNoYWJsZSBzdGF0ZQorQSBwYXJzZXIgc3RhdGUgdG8gd2hpY2ggdGhlcmUgZG9lcyBub3QgZXhpc3QgYSBzZXF1ZW5jZSBvZiB0cmFuc2l0aW9ucyBmcm9tCit0aGUgcGFyc2VyJ3Mgc3RhcnQgc3RhdGUuICBBIHN0YXRlIGNhbiBiZWNvbWUgdW5yZWFjaGFibGUgZHVyaW5nIGNvbmZsaWN0CityZXNvbHV0aW9uLiAgQHhyZWZ7VW5yZWFjaGFibGUgU3RhdGVzfS4KK0BlbmQgdGFibGUKKworQG5vZGUgQ29weWluZyBUaGlzIE1hbnVhbAorQGFwcGVuZGl4IENvcHlpbmcgVGhpcyBNYW51YWwKK0BpbmNsdWRlIGZkbC50ZXhpCisKK0Bub2RlIEJpYmxpb2dyYXBoeQorQHVubnVtYmVyZWQgQmlibGlvZ3JhcGh5CisKK0B0YWJsZSBAYXNpcworQGl0ZW0gW0Rlbm55IDIwMDhdCitKb2VsIEUuIERlbm55IGFuZCBCcmlhbiBBLiBNYWxsb3ksIElFTFIoMSk6IFByYWN0aWNhbCBMUigxKSBQYXJzZXIgVGFibGVzCitmb3IgTm9uLUxSKDEpIEdyYW1tYXJzIHdpdGggQ29uZmxpY3QgUmVzb2x1dGlvbiwgaW4gQGNpdGV7UHJvY2VlZGluZ3Mgb2YgdGhlCisyMDA4IEFDTSBTeW1wb3NpdW0gb24gQXBwbGllZCBDb21wdXRpbmd9IChTQUMnMDgpLCBBQ00sIE5ldyBZb3JrLCBOWSwgVVNBLAorcHAuQDogMjQwLS0yNDUuICBAdXJlZntodHRwOi8vZHguZG9pLm9yZy8xMC4xMTQ1LzEzNjM2ODYuMTM2Mzc0N30KKworQGl0ZW0gW0Rlbm55IDIwMTAgTWF5XQorSm9lbCBFLiBEZW5ueSwgUFNMUigxKTogUHNldWRvLVNjYW5uZXJsZXNzIE1pbmltYWwgTFIoMSkgZm9yIHRoZQorRGV0ZXJtaW5pc3RpYyBQYXJzaW5nIG9mIENvbXBvc2l0ZSBMYW5ndWFnZXMsIFBoLkQuIERpc3NlcnRhdGlvbiwgQ2xlbXNvbgorVW5pdmVyc2l0eSwgQ2xlbXNvbiwgU0MsIFVTQSAoTWF5IDIwMTApLgorQHVyZWZ7aHR0cDovL3Byb3F1ZXN0LnVtaS5jb20vcHFkbGluaz9kaWQ9MjA0MTQ3MzU5MSZGbXQ9NyZjbGllbnRJZD03OTM1NiZSUVQ9MzA5JlZOYW1lPVBRRH0KKworQGl0ZW0gW0Rlbm55IDIwMTAgTm92ZW1iZXJdCitKb2VsIEUuIERlbm55IGFuZCBCcmlhbiBBLiBNYWxsb3ksIFRoZSBJRUxSKDEpIEFsZ29yaXRobSBmb3IgR2VuZXJhdGluZworTWluaW1hbCBMUigxKSBQYXJzZXIgVGFibGVzIGZvciBOb24tTFIoMSkgR3JhbW1hcnMgd2l0aCBDb25mbGljdCBSZXNvbHV0aW9uLAoraW4gQGNpdGV7U2NpZW5jZSBvZiBDb21wdXRlciBQcm9ncmFtbWluZ30sIFZvbC5AOiA3NSwgSXNzdWUgMTEgKE5vdmVtYmVyCisyMDEwKSwgcHAuQDogOTQzLS05NzkuICBAdXJlZntodHRwOi8vZHguZG9pLm9yZy8xMC4xMDE2L2ouc2NpY28uMjAwOS4wOC4wMDF9CisKK0BpdGVtIFtEZVJlbWVyIDE5ODJdCitGcmFuayBEZVJlbWVyIGFuZCBUaG9tYXMgUGVubmVsbG8sIEVmZmljaWVudCBDb21wdXRhdGlvbiBvZiBMQUxSKDEpCitMb29rLUFoZWFkIFNldHMsIGluIEBjaXRle0FDTSBUcmFuc2FjdGlvbnMgb24gUHJvZ3JhbW1pbmcgTGFuZ3VhZ2VzIGFuZAorU3lzdGVtc30sIFZvbC5AOiA0LCBOby5AOiA0IChPY3RvYmVyIDE5ODIpLCBwcC5AOgorNjE1LS02NDkuIEB1cmVme2h0dHA6Ly9keC5kb2kub3JnLzEwLjExNDUvNjk2MjIuMzU3MTg3fQorCitAaXRlbSBbS251dGggMTk2NV0KK0RvbmFsZCBFLiBLbnV0aCwgT24gdGhlIFRyYW5zbGF0aW9uIG9mIExhbmd1YWdlcyBmcm9tIExlZnQgdG8gUmlnaHQsIGluCitAY2l0ZXtJbmZvcm1hdGlvbiBhbmQgQ29udHJvbH0sIFZvbC5AOiA4LCBJc3N1ZSA2IChEZWNlbWJlciAxOTY1KSwgcHAuQDoKKzYwNy0tNjM5LiBAdXJlZntodHRwOi8vZHguZG9pLm9yZy8xMC4xMDE2L1MwMDE5LTk5NTgoNjUpOTA0MjYtMn0KKworQGl0ZW0gW1Njb3R0IDIwMDBdCitFbGl6YWJldGggU2NvdHQsIEFkcmlhbiBKb2huc3RvbmUsIGFuZCBTaGFtc2EgU2FkYWYgSHVzc2FpbiwKK0BjaXRle1RvbWl0YS1TdHlsZSBHZW5lcmFsaXNlZCBMUiBQYXJzZXJzfSwgUm95YWwgSG9sbG93YXksIFVuaXZlcnNpdHkgb2YKK0xvbmRvbiwgRGVwYXJ0bWVudCBvZiBDb21wdXRlciBTY2llbmNlLCBUUi0wMC0xMiAoRGVjZW1iZXIgMjAwMCkuCitAdXJlZntodHRwOi8vd3d3LmNzLnJodWwuYWMudWsvcmVzZWFyY2gvbGFuZ3VhZ2VzL3B1YmxpY2F0aW9ucy90b21pdGFfc3R5bGVfMS5wc30KK0BlbmQgdGFibGUKKworQG5vZGUgSW5kZXggb2YgVGVybXMKK0B1bm51bWJlcmVkIEluZGV4IG9mIFRlcm1zCisKK0BwcmludGluZGV4IGNwCisKK0BieWUKKworQGMgTG9jYWxXb3JkczogdGV4aW5mbyBzZXRmaWxlbmFtZSBzZXR0aXRsZSBzZXRjaGFwdGVybmV3cGFnZSBmaW5hbG91dCB0ZXhpIEZTRgorQGMgTG9jYWxXb3JkczogaWZpbmZvIHNtYWxsYm9vayBzaG9ydHRpdGxlcGFnZSB0aXRsZXBhZ2UgR1BMIEZJWE1FIGlmdGV4IEZTRidzCitAYyBMb2NhbFdvcmRzOiBha2ltIGZuIGNwIHN5bmNvZGVpbmRleCB2ciB0cCBzeW5pbmRleCBkaXJjYXRlZ29yeSBkaXJlbnRyeSBOYXVyCitAYyBMb2NhbFdvcmRzOiBpZnNldCB2c2tpcCBwdCBmaWxsbCBpbnNlcnRjb3B5aW5nIHNwIElTQk4gRXRpZW5uZSBTdXZhc2EgTXVsdGkKK0BjIExvY2FsV29yZHM6IGlmbm90dGV4IHl5cGFyc2UgZGV0YWlsbWVudSBHTFIgUlBOIENhbGMgdmFyIERlY2xzIFJwY2FsYyBtdWx0aQorQGMgTG9jYWxXb3JkczogcnBjYWxjIExleGVyIEV4cHIgbHRjYWxjIG1mY2FsYyB5eWxleCBkZWZhdWx0cHJlYyBEb25uZWxseSBHb3RvcworQGMgTG9jYWxXb3JkczogeXllcnJvciBweHJlZiBMUiB5eWx2YWwgY2luZGV4IGRmbiBMQUxSIHNhbXAgZ3BsIEJORiB4cmVmIHl5cHVzaAorQGMgTG9jYWxXb3JkczogY29uc3QgaW50IHBhcmVuIGlmbm90aW5mbyBBQyBub2luZGVudCBlbXBoIGV4cHIgc3RtdCBmaW5kZXggbHIKK0BjIExvY2FsV29yZHM6IGdsciBZWVNUWVBFIFRZUEVOQU1FIHByb2cgZHByZWMgcHJpbnRmIGRlY2wgaW5pdCBzdG10TWVyZ2UgUE9TSVgKK0BjIExvY2FsV29yZHM6IHByZSBTVERDIEdOVUMgZW5kaWYgeXkgWVkgYWxsb2NhIGxmIHN0ZGRlZiBzdGRsaWIgWVlERUJVRyB5eXB1bGwKK0BjIExvY2FsV29yZHM6IE5VTSBleHAgc3Vic3Vic2VjdGlvbiBrYmQgQ3RybCBjdHlwZSBFT0YgZ2V0Y2hhciBpc2RpZ2l0IG5vbmZyZWUKK0BjIExvY2FsV29yZHM6IHVuZ2V0YyBzdGRpbiBzY2FuZiBzYyBjYWxjIHVsYXRvciBscyBsbSBjYyBORUcgcHJlYyB5eWVycm9rIHJyCitAYyBMb2NhbFdvcmRzOiBsb25nam1wIGZwcmludGYgc3RkZXJyIHl5bGxvYyBZWUxUWVBFIGNvcyBsbiBTdGFsbG1hbiBEZXN0cnVjdG9yCitAYyBMb2NhbFdvcmRzOiBzeW1yZWMgdmFsIHRwdHIgRk5DVCBmbmN0cHRyIGZ1bmMgc3RydWN0IHN5bSBlbnVtIElFQyBzeW50YXhlcworQGMgTG9jYWxXb3JkczogZm5jdCBwdXRzeW0gZ2V0c3ltIGZuYW1lIGFyaXRoIGZuY3RzIGF0YW4gcHRyIG1hbGxvYyBzaXplb2YgTGV4CitAYyBMb2NhbFdvcmRzOiBzdHJsZW4gc3RyY3B5IGZjdG4gc3RyY21wIGlzYWxwaGEgc3ltYnVmIHJlYWxsb2MgaXNhbG51bSBET1RET1QKK0BjIExvY2FsV29yZHM6IHB0eXBlcyBpdHlwZSBZWVBSSU5UIHRyaWdyYXBocyB5eXRuYW1lIGV4cHNlcSB2aW5kZXggZHR5cGUgVW5hcnkKK0BjIExvY2FsV29yZHM6IFJocyBZWVJIU0xPQyBMRSBub25hc3NvYyBvcCBkZWZmbiB0eXBlbGVzcyB5eW5lcnJzIG5vbnRlcm1pbmFsCitAYyBMb2NhbFdvcmRzOiB5eWNoYXIgeXlkZWJ1ZyBtc2cgWVlOVE9LRU5TIFlZTk5UUyBZWU5SVUxFUyBZWU5TVEFURVMgcmVlbnRyYW50CitAYyBMb2NhbFdvcmRzOiBjcGFyc2UgY2xleCBkZWZ0eXBlZnVuIE5FIGRlZm1hYyBZWUFDQ0VQVCBZWUFCT1JUIHBhcmFtIHl5cHN0YXRlCitAYyBMb2NhbFdvcmRzOiBzdHJuY21wIGludHZhbCB0aW5kZXggbHZhbHAgbG9jcCBsbG9jcCB0eXBlYWx0IFlZQkFDS1VQIHN1YnJhbmdlCitAYyBMb2NhbFdvcmRzOiBZWUVNUFRZIFlZRU9GIFlZUkVDT1ZFUklORyB5eWNsZWFyaW4gR0UgZGVmIFVNSU5VUyBtYXliZXdvcmQgbG9jCitAYyBMb2NhbFdvcmRzOiBKb2huc3RvbmUgU2hhbXNhIFNhZGFmIEh1c3NhaW4gVG9taXRhIFRSIHVyZWYgWVlNQVhERVBUSCBpbmxpbmUKK0BjIExvY2FsV29yZHM6IFlZSU5JVERFUFRIIHN0bXRzIHJlZiBpbml0ZGNsIG1heWJlYXNtIG5vdHlwZSBMb29rYWhlYWQgeXlvdXRwdXQKK0BjIExvY2FsV29yZHM6IGhleGZsYWcgU1RSIGV4ZGVudCBpdGVtc2V0IGFzaXMgRFlZREVCVUcgWVlGUFJJTlRGIGFyZ3MgQXV0b2NvbmYKK0BjIExvY2FsV29yZHM6IGluZmlsZSB5cHAgeXh4IG91dGZpbGUgaXRlbXggdGV4IGxlYWRlcmZpbGwgVHJvdWJsZXNob3V0aW5nIHNxcnQKK0BjIExvY2FsV29yZHM6IGhib3ggaHNzIGhmaWxsIHR0IGx5IHl5aW4gZm9wZW4gZmNsb3NlIG9maXJzdCBnY2MgbGwgbG9va2FoZWFkCitAYyBMb2NhbFdvcmRzOiBuYmFyIHl5dGV4dCBmc3Qgc25kIG9zcGxpdCBudHdvIHN0cmR1cCBBU1QgVHJvdWJsZXJlcG9ydGluZyB0aAorQGMgTG9jYWxXb3JkczogWVlTVEFDSyBEVkkgZmRsIHByaW50aW5kZXggSUVMUiBub25kZXRlcm1pbmlzdGljIG5vbnRlcm1pbmFscyBwcworQGMgTG9jYWxXb3Jkczogc3ViZXhwcmVzc2lvbnMgZGVjbGFyYXRvciBub25kZWZlcnJlZCBjb25maWcgbGliaW50bCBwb3N0Zml4IExBQworQGMgTG9jYWxXb3JkczogcHJlcHJvY2Vzc29yIG5vbnBvc2l0aXZlIHVuYXJ5IG5vbm51bWVyaWMgdHlwZWRlZiBleHRlcm4gcmhzIHNyCitAYyBMb2NhbFdvcmRzOiB5eXRva2VudHlwZSBkZXN0cnVjdG9yIG11bHRpY2hhcmFjdGVyIG5vbm51bGwgRUJDRElDIG50ZXJtIExSJ3MKK0BjIExvY2FsV29yZHM6IGx2YWx1ZSBub25uZWdhdGl2ZSBYTlVNIENIUiBjaHIgVEFHTEVTUyB0YWdsZXNzIHN0ZG91dCBhcGkgVE9LCitAYyBMb2NhbFdvcmRzOiBkZXN0cnVjdG9ycyBSZWVudHJhbmN5IG5vbnJlZW50cmFudCBzdWJncmFtbWFyIG5vbmFzc29jaWF0aXZlIFBoCitAYyBMb2NhbFdvcmRzOiBkZWZmbnggbmFtZXNwYWNlIHhtbCBnb3RvIGxhbHIgaWVsciBydW50aW1lIGxleCB5YWNjIHl5cHMgZW52CitAYyBMb2NhbFdvcmRzOiB5eXN0YXRlIHZhcmlhZGljIFVuc2hpZnQgTkxTIGdldHRleHQgcG8gVVRGIEF1dG9tYWtlIExPQ0FMRURJUgorQGMgTG9jYWxXb3JkczogWVlFTkFCTEUgYmluZHRleHRkb21haW4gTWFrZWZpbGUgREVGUyBDUFBGTEFHUyBEQklTT04gRGVSZW1lcgorQGMgTG9jYWxXb3JkczogYXV0b3JlY29uZiBQZW5uZWxsbyBtdWx0aXNldHMgbm9uZGV0ZXJtaW5pc20gR2VuZXJhbGlzZWQgYmF6IEFDTQorQGMgTG9jYWxXb3JkczogcmVkZWNsYXJlIGF1dG9tYXRhIERwYXJzZSBsb2NhbGVkaXIgZGF0YWRpciBYU0xUIG1pZHJ1bGUgV25vCitAYyBMb2NhbFdvcmRzOiBHcmFwaHZpeiBtdWx0aXRhYmxlIGhlYWRpdGVtIGhoIGJhc2VuYW1lIERveHlnZW4gZm5vIGZpbGVuYW1lCitAYyBMb2NhbFdvcmRzOiBkb3h5Z2VuIGl2YWwgc3ZhbCBkZWZ0eXBlbWV0aG9kIGRlYWxsb2NhdGUgcG9zIGRlZnR5cGVtZXRob2R4CitAYyBMb2NhbFdvcmRzOiBDdG9yIGRlZmN2IGRlZmN2eCBhcmcgYWNjZXNzb3JzIGFyaXRobWV0aWNzIENQUCBpZm5kZWYgQ0FMQ1hYCitAYyBMb2NhbFdvcmRzOiBsZXhlcidzIGNhbGN4eCBib29sIExQQVJFTiBSUEFSRU4gZGVhbGxvY2F0aW9uIGNlcnJubyBjbGltaXRzCitAYyBMb2NhbFdvcmRzOiBjc3RkbGliIERlYmlhbiB1bmRlZiB5eXdyYXAgdW5wdXQgbm95eXdyYXAgbm91bnB1dCB6QSB5eWxlbmcKK0BjIExvY2FsV29yZHM6IGVycm5vIHN0cnRvbCBFUkFOR0Ugc3RyIHN0cmVycm9yIGlvc3RyZWFtIGFyZ2MgYXJndiBKYXZhZG9jIFBTTFIKK0BjIExvY2FsV29yZHM6IGJ5dGVjb2RlIGluaXRpYWxpemVycyBzdXBlcmNsYXNzIHN0eXBlIEFTVE5vZGUgYXV0b2JveGluZyBubHMKK0BjIExvY2FsV29yZHM6IHRvU3RyaW5nIGRlZnR5cGVpdmFyIGRlZnR5cGVpdmFyeCBkZWZ0eXBlb3AgWVlQYXJzZXIgc3RyaWN0ZnAKK0BjIExvY2FsV29yZHM6IHN1cGVyY2xhc3NlcyBib29sZWFuIGdldEVycm9yVmVyYm9zZSBzZXRFcnJvclZlcmJvc2UgZGVmdHlwZWN2CitAYyBMb2NhbFdvcmRzOiBnZXREZWJ1Z1N0cmVhbSBzZXREZWJ1Z1N0cmVhbSBnZXREZWJ1Z0xldmVsIHNldERlYnVnTGV2ZWwgdXJsCitAYyBMb2NhbFdvcmRzOiBiaXNvblZlcnNpb24gZGVmdHlwZWN2eCBiaXNvblNrZWxldG9uIGdldFN0YXJ0UG9zIGdldEVuZFBvcyB1aW50CitAYyBMb2NhbFdvcmRzOiBnZXRMVmFsIGRlZnZhciBkZWZ0eXBlZm4gZGVmdHlwZWZueCBnb3RvcyBtc2dmbXQgQ29yYmV0dCBMQUxSJ3MKK0BjIExvY2FsV29yZHM6IHN1YmRpcmVjdG9yeSBTb2xhcmlzIG5vbmFzc29jaWF0aXZpdHkgcGVycm9yIHNjaGVtYXMgTWFsbG95IGludHMKK0BjIExvY2FsV29yZHM6IFNjYW5uZXJsZXNzIGlzcGVsbCBhbWVyaWNhbiBDaGFuZ2VMb2cgc21hbGxleGFtcGxlIENTVFlQRSBDTFRZUEUKK0BjIExvY2FsV29yZHM6IGNsdmFsIENERUJVRyBjZGVidWcgZGVmdHlwZW9weCB5eXRlcm1pbmF0ZSBMb2NhdGlvblR5cGUKK0BjIExvY2FsV29yZHM6IHBhcnNlcnMgcGFyc2VyJ3MKK0BjIExvY2FsV29yZHM6IGFzc29jaWF0aXZpdHkgc3ViY2xhc3NlcyBwcmVjZWRlbmNlcyB1bnJlc29sdmFibGUgcnVubmFibGUKK0BjIExvY2FsV29yZHM6IGFsbG9jYXRvcnMgc3VidW5pdCBpbml0aWFsaXphdGlvbnMgdW5yZWZlcmVuY2VkIHVudHlwZWQKK0BjIExvY2FsV29yZHM6IGVycm9yVmVyYm9zZSBzdWJ0eXBlIHN1YnR5cGVzCisKK0BjIExvY2FsIFZhcmlhYmxlczoKK0BjIGlzcGVsbC1kaWN0aW9uYXJ5OiAiYW1lcmljYW4iCitAYyBmaWxsLWNvbHVtbjogNzYKK0BjIEVuZDoKZGlmZiAtLWdpdCBhL2RvYy9iaXNvbi50ZXhpbmZvIGIvZG9jL2Jpc29uLnRleGluZm8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjNjdiNTkuLjAwMDAwMDAKLS0tIGEvZG9jL2Jpc29uLnRleGluZm8KKysrIC9kZXYvbnVsbApAQCAtMSw4NzE1ICswLDAgQEAKLVxpbnB1dCB0ZXhpbmZvIEBjIC0qLXRleGluZm8tKi0KLUBjb21tZW50ICUqKnN0YXJ0IG9mIGhlYWRlcgotQHNldGZpbGVuYW1lIGJpc29uLmluZm8KLUBpbmNsdWRlIHZlcnNpb24udGV4aQotQHNldHRpdGxlIEJpc29uIEB2YWx1ZXtWRVJTSU9OfQotQHNldGNoYXB0ZXJuZXdwYWdlIG9kZAotCi1AZmluYWxvdXQKLQotQGMgU01BTEwgQk9PSyB2ZXJzaW9uCi1AYyBUaGlzIGVkaXRpb24gaGFzIGJlZW4gZm9ybWF0dGVkIHNvIHRoYXQgeW91IGNhbiBmb3JtYXQgYW5kIHByaW50IGl0IGluCi1AYyB0aGUgc21hbGxib29rIGZvcm1hdC4KLUBjIEBzbWFsbGJvb2sKLQotQGMgU2V0IGZvbGxvd2luZyBpZiB5b3Ugd2FudCB0byBkb2N1bWVudCAlZGVmYXVsdC1wcmVjIGFuZCAlbm8tZGVmYXVsdC1wcmVjLgotQGMgVGhpcyBmZWF0dXJlIGlzIGV4cGVyaW1lbnRhbCBhbmQgbWF5IGNoYW5nZSBpbiBmdXR1cmUgQmlzb24gdmVyc2lvbnMuCi1AYyBAc2V0IGRlZmF1bHRwcmVjCi0KLUBpZm5vdGluZm8KLUBzeW5jb2RlaW5kZXggZm4gY3AKLUBzeW5jb2RlaW5kZXggdnIgY3AKLUBzeW5jb2RlaW5kZXggdHAgY3AKLUBlbmQgaWZub3RpbmZvCi1AaWZpbmZvCi1Ac3luaW5kZXggZm4gY3AKLUBzeW5pbmRleCB2ciBjcAotQHN5bmluZGV4IHRwIGNwCi1AZW5kIGlmaW5mbwotQGNvbW1lbnQgJSoqZW5kIG9mIGhlYWRlcgotCi1AY29weWluZwotCi1UaGlzIG1hbnVhbCBpcyBmb3IgQGFjcm9ueW17R05VfSBCaXNvbiAodmVyc2lvbiBAdmFsdWV7VkVSU0lPTn0sCi1AdmFsdWV7VVBEQVRFRH0pLCB0aGUgQGFjcm9ueW17R05VfSBwYXJzZXIgZ2VuZXJhdG9yLgotCi1Db3B5cmlnaHQgQGNvcHlyaWdodHt9IDE5ODgsIDE5ODksIDE5OTAsIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTUsIDE5OTgsCi0xOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi1AcXVvdGF0aW9uCi1QZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKLXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQGFjcm9ueW17R05VfSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwKLVZlcnNpb24gMS4yIG9yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQotRm91bmRhdGlvbjsgd2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggdGhlIEZyb250LUNvdmVyIHRleHRzCi1iZWluZyBgYEEgQGFjcm9ueW17R05VfSBNYW51YWwsJycgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYXMgaW4KLShhKSBiZWxvdy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAotYGBAYWNyb255bXtHTlV9IEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLicnCi0KLShhKSBUaGUgQGFjcm9ueW17RlNGfSdzIEJhY2stQ292ZXIgVGV4dCBpczogYGBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkKLWFuZCBtb2RpZnkgdGhpcyBAYWNyb255bXtHTlV9IE1hbnVhbCwgbGlrZSBAYWNyb255bXtHTlV9IHNvZnR3YXJlLgotQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlIGZ1bmRzIGZvcgotQGFjcm9ueW17R05VfSBkZXZlbG9wbWVudC4nJwotQGVuZCBxdW90YXRpb24KLUBlbmQgY29weWluZwotCi1AZGlyY2F0ZWdvcnkgU29mdHdhcmUgZGV2ZWxvcG1lbnQKLUBkaXJlbnRyeQotKiBiaXNvbjogKGJpc29uKS4gICAgICAgQGFjcm9ueW17R05VfSBwYXJzZXIgZ2VuZXJhdG9yIChZYWNjIHJlcGxhY2VtZW50KS4KLUBlbmQgZGlyZW50cnkKLQotQHRpdGxlcGFnZQotQHRpdGxlIEJpc29uCi1Ac3VidGl0bGUgVGhlIFlhY2MtY29tcGF0aWJsZSBQYXJzZXIgR2VuZXJhdG9yCi1Ac3VidGl0bGUgQHZhbHVle1VQREFURUR9LCBCaXNvbiBWZXJzaW9uIEB2YWx1ZXtWRVJTSU9OfQotCi1AYXV0aG9yIGJ5IENoYXJsZXMgRG9ubmVsbHkgYW5kIFJpY2hhcmQgU3RhbGxtYW4KLQotQHBhZ2UKLUB2c2tpcCAwcHQgcGx1cyAxZmlsbGwKLUBpbnNlcnRjb3B5aW5nCi1Ac3AgMgotUHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQCoKLTUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IgQCoKLUJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQSBAKgotUHJpbnRlZCBjb3BpZXMgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uQCoKLUBhY3Jvbnlte0lTQk59IDEtODgyMTE0LTQ0LTIKLUBzcCAyCi1Db3ZlciBhcnQgYnkgRXRpZW5uZSBTdXZhc2EuCi1AZW5kIHRpdGxlcGFnZQotCi1AY29udGVudHMKLQotQGlmbm90dGV4Ci1Abm9kZSBUb3AKLUB0b3AgQmlzb24KLUBpbnNlcnRjb3B5aW5nCi1AZW5kIGlmbm90dGV4Ci0KLUBtZW51Ci0qIEludHJvZHVjdGlvbjo6Ci0qIENvbmRpdGlvbnM6OgotKiBDb3B5aW5nOjogICAgICAgICAgIFRoZSBAYWNyb255bXtHTlV9IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugc2F5cwotICAgICAgICAgICAgICAgICAgICAgICAgaG93IHlvdSBjYW4gY29weSBhbmQgc2hhcmUgQmlzb24KLQotVHV0b3JpYWwgc2VjdGlvbnM6Ci0qIENvbmNlcHRzOjogICAgICAgICAgQmFzaWMgY29uY2VwdHMgZm9yIHVuZGVyc3RhbmRpbmcgQmlzb24uCi0qIEV4YW1wbGVzOjogICAgICAgICAgVGhyZWUgc2ltcGxlIGV4cGxhaW5lZCBleGFtcGxlcyBvZiB1c2luZyBCaXNvbi4KLQotUmVmZXJlbmNlIHNlY3Rpb25zOgotKiBHcmFtbWFyIEZpbGU6OiAgICAgIFdyaXRpbmcgQmlzb24gZGVjbGFyYXRpb25zIGFuZCBydWxlcy4KLSogSW50ZXJmYWNlOjogICAgICAgICBDLWxhbmd1YWdlIGludGVyZmFjZSB0byB0aGUgcGFyc2VyIGZ1bmN0aW9uIEBjb2Rle3l5cGFyc2V9LgotKiBBbGdvcml0aG06OiAgICAgICAgIEhvdyB0aGUgQmlzb24gcGFyc2VyIHdvcmtzIGF0IHJ1bi10aW1lLgotKiBFcnJvciBSZWNvdmVyeTo6ICAgIFdyaXRpbmcgcnVsZXMgZm9yIGVycm9yIHJlY292ZXJ5LgotKiBDb250ZXh0IERlcGVuZGVuY3k6OiAgV2hhdCB0byBkbyBpZiB5b3VyIGxhbmd1YWdlIHN5bnRheCBpcyB0b28KLSAgICAgICAgICAgICAgICAgICAgICAgIG1lc3N5IGZvciBCaXNvbiB0byBoYW5kbGUgc3RyYWlnaHRmb3J3YXJkbHkuCi0qIERlYnVnZ2luZzo6ICAgICAgICAgVW5kZXJzdGFuZGluZyBvciBkZWJ1Z2dpbmcgQmlzb24gcGFyc2Vycy4KLSogSW52b2NhdGlvbjo6ICAgICAgICBIb3cgdG8gcnVuIEJpc29uICh0byBwcm9kdWNlIHRoZSBwYXJzZXIgc291cmNlIGZpbGUpLgotKiBDKysgTGFuZ3VhZ2UgSW50ZXJmYWNlOjogIENyZWF0aW5nIEMrKyBwYXJzZXIgb2JqZWN0cy4KLSogRkFROjogICAgICAgICAgICAgICBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucwotKiBUYWJsZSBvZiBTeW1ib2xzOjogIEFsbCB0aGUga2V5d29yZHMgb2YgdGhlIEJpc29uIGxhbmd1YWdlIGFyZSBleHBsYWluZWQuCi0qIEdsb3NzYXJ5OjogICAgICAgICAgQmFzaWMgY29uY2VwdHMgYXJlIGV4cGxhaW5lZC4KLSogQ29weWluZyBUaGlzIE1hbnVhbDo6ICBMaWNlbnNlIGZvciBjb3B5aW5nIHRoaXMgbWFudWFsLgotKiBJbmRleDo6ICAgICAgICAgICAgIENyb3NzLXJlZmVyZW5jZXMgdG8gdGhlIHRleHQuCi0KLUBkZXRhaWxtZW51Ci0gLS0tIFRoZSBEZXRhaWxlZCBOb2RlIExpc3RpbmcgLS0tCi0KLVRoZSBDb25jZXB0cyBvZiBCaXNvbgotCi0qIExhbmd1YWdlIGFuZCBHcmFtbWFyOjogIExhbmd1YWdlcyBhbmQgY29udGV4dC1mcmVlIGdyYW1tYXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIG1hdGhlbWF0aWNhbCBpZGVhcy4KLSogR3JhbW1hciBpbiBCaXNvbjo6ICBIb3cgd2UgcmVwcmVzZW50IGdyYW1tYXJzIGZvciBCaXNvbidzIHNha2UuCi0qIFNlbWFudGljIFZhbHVlczo6ICAgRWFjaCB0b2tlbiBvciBzeW50YWN0aWMgZ3JvdXBpbmcgY2FuIGhhdmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGEgc2VtYW50aWMgdmFsdWUgKHRoZSB2YWx1ZSBvZiBhbiBpbnRlZ2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG5hbWUgb2YgYW4gaWRlbnRpZmllciwgZXRjLikuCi0qIFNlbWFudGljIEFjdGlvbnM6OiAgRWFjaCBydWxlIGNhbiBoYXZlIGFuIGFjdGlvbiBjb250YWluaW5nIEMgY29kZS4KLSogR0xSIFBhcnNlcnM6OiAgICAgICBXcml0aW5nIHBhcnNlcnMgZm9yIGdlbmVyYWwgY29udGV4dC1mcmVlIGxhbmd1YWdlcy4KLSogTG9jYXRpb25zIE92ZXJ2aWV3OjogICAgVHJhY2tpbmcgTG9jYXRpb25zLgotKiBCaXNvbiBQYXJzZXI6OiAgICAgIFdoYXQgYXJlIEJpc29uJ3MgaW5wdXQgYW5kIG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGhvdyBpcyB0aGUgb3V0cHV0IHVzZWQ/Ci0qIFN0YWdlczo6ICAgICAgICAgICAgU3RhZ2VzIGluIHdyaXRpbmcgYW5kIHJ1bm5pbmcgQmlzb24gZ3JhbW1hcnMuCi0qIEdyYW1tYXIgTGF5b3V0OjogICAgT3ZlcmFsbCBzdHJ1Y3R1cmUgb2YgYSBCaXNvbiBncmFtbWFyIGZpbGUuCi0KLVdyaXRpbmcgQGFjcm9ueW17R0xSfSBQYXJzZXJzCi0KLSogU2ltcGxlIEdMUiBQYXJzZXJzOjogICAgICBVc2luZyBAYWNyb255bXtHTFJ9IHBhcnNlcnMgb24gdW5hbWJpZ3VvdXMgZ3JhbW1hcnMuCi0qIE1lcmdpbmcgR0xSIFBhcnNlczo6ICAgICAgVXNpbmcgQGFjcm9ueW17R0xSfSBwYXJzZXJzIHRvIHJlc29sdmUgYW1iaWd1aXRpZXMuCi0qIEdMUiBTZW1hbnRpYyBBY3Rpb25zOjogICAgRGVmZXJyZWQgc2VtYW50aWMgYWN0aW9ucyBoYXZlIHNwZWNpYWwgY29uY2VybnMuCi0qIENvbXBpbGVyIFJlcXVpcmVtZW50czo6ICAgQGFjcm9ueW17R0xSfSBwYXJzZXJzIHJlcXVpcmUgYSBtb2Rlcm4gQyBjb21waWxlci4KLQotRXhhbXBsZXMKLQotKiBSUE4gQ2FsYzo6ICAgICAgICAgIFJldmVyc2UgcG9saXNoIG5vdGF0aW9uIGNhbGN1bGF0b3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhIGZpcnN0IGV4YW1wbGUgd2l0aCBubyBvcGVyYXRvciBwcmVjZWRlbmNlLgotKiBJbmZpeCBDYWxjOjogICAgICAgIEluZml4IChhbGdlYnJhaWMpIG5vdGF0aW9uIGNhbGN1bGF0b3IuCi0gICAgICAgICAgICAgICAgICAgICAgICBPcGVyYXRvciBwcmVjZWRlbmNlIGlzIGludHJvZHVjZWQuCi0qIFNpbXBsZSBFcnJvciBSZWNvdmVyeTo6ICBDb250aW51aW5nIGFmdGVyIHN5bnRheCBlcnJvcnMuCi0qIExvY2F0aW9uIFRyYWNraW5nIENhbGM6OiBEZW1vbnN0cmF0aW5nIHRoZSB1c2Ugb2YgQEBAdmFye259IGFuZCBAQCQuCi0qIE11bHRpLWZ1bmN0aW9uIENhbGM6OiAgQ2FsY3VsYXRvciB3aXRoIG1lbW9yeSBhbmQgdHJpZyBmdW5jdGlvbnMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJdCB1c2VzIG11bHRpcGxlIGRhdGEtdHlwZXMgZm9yIHNlbWFudGljIHZhbHVlcy4KLSogRXhlcmNpc2VzOjogICAgICAgICBJZGVhcyBmb3IgaW1wcm92aW5nIHRoZSBtdWx0aS1mdW5jdGlvbiBjYWxjdWxhdG9yLgotCi1SZXZlcnNlIFBvbGlzaCBOb3RhdGlvbiBDYWxjdWxhdG9yCi0KLSogRGVjbHM6IFJwY2FsYyBEZWNscy4gIFByb2xvZ3VlIChkZWNsYXJhdGlvbnMpIGZvciBycGNhbGMuCi0qIFJ1bGVzOiBScGNhbGMgUnVsZXMuICBHcmFtbWFyIFJ1bGVzIGZvciBycGNhbGMsIHdpdGggZXhwbGFuYXRpb24uCi0qIExleGVyOiBScGNhbGMgTGV4ZXIuICBUaGUgbGV4aWNhbCBhbmFseXplci4KLSogTWFpbjogUnBjYWxjIE1haW4uICAgIFRoZSBjb250cm9sbGluZyBmdW5jdGlvbi4KLSogRXJyb3I6IFJwY2FsYyBFcnJvci4gIFRoZSBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uCi0qIEdlbjogUnBjYWxjIEdlbi4gICAgICBSdW5uaW5nIEJpc29uIG9uIHRoZSBncmFtbWFyIGZpbGUuCi0qIENvbXA6IFJwY2FsYyBDb21waWxlLiBSdW4gdGhlIEMgY29tcGlsZXIgb24gdGhlIG91dHB1dCBjb2RlLgotCi1HcmFtbWFyIFJ1bGVzIGZvciBAY29kZXtycGNhbGN9Ci0KLSogUnBjYWxjIElucHV0OjoKLSogUnBjYWxjIExpbmU6OgotKiBScGNhbGMgRXhwcjo6Ci0KLUxvY2F0aW9uIFRyYWNraW5nIENhbGN1bGF0b3I6IEBjb2Rle2x0Y2FsY30KLQotKiBEZWNsczogTHRjYWxjIERlY2xzLiAgQmlzb24gYW5kIEMgZGVjbGFyYXRpb25zIGZvciBsdGNhbGMuCi0qIFJ1bGVzOiBMdGNhbGMgUnVsZXMuICBHcmFtbWFyIHJ1bGVzIGZvciBsdGNhbGMsIHdpdGggZXhwbGFuYXRpb25zLgotKiBMZXhlcjogTHRjYWxjIExleGVyLiAgVGhlIGxleGljYWwgYW5hbHl6ZXIuCi0KLU11bHRpLUZ1bmN0aW9uIENhbGN1bGF0b3I6IEBjb2Rle21mY2FsY30KLQotKiBEZWNsOiBNZmNhbGMgRGVjbC4gICAgICBCaXNvbiBkZWNsYXJhdGlvbnMgZm9yIG11bHRpLWZ1bmN0aW9uIGNhbGN1bGF0b3IuCi0qIFJ1bGVzOiBNZmNhbGMgUnVsZXMuICAgIEdyYW1tYXIgcnVsZXMgZm9yIHRoZSBjYWxjdWxhdG9yLgotKiBTeW10YWI6IE1mY2FsYyBTeW10YWIuICBTeW1ib2wgdGFibGUgbWFuYWdlbWVudCBzdWJyb3V0aW5lcy4KLQotQmlzb24gR3JhbW1hciBGaWxlcwotCi0qIEdyYW1tYXIgT3V0bGluZTo6ICAgT3ZlcmFsbCBsYXlvdXQgb2YgdGhlIGdyYW1tYXIgZmlsZS4KLSogU3ltYm9sczo6ICAgICAgICAgICBUZXJtaW5hbCBhbmQgbm9udGVybWluYWwgc3ltYm9scy4KLSogUnVsZXM6OiAgICAgICAgICAgICBIb3cgdG8gd3JpdGUgZ3JhbW1hciBydWxlcy4KLSogUmVjdXJzaW9uOjogICAgICAgICBXcml0aW5nIHJlY3Vyc2l2ZSBydWxlcy4KLSogU2VtYW50aWNzOjogICAgICAgICBTZW1hbnRpYyB2YWx1ZXMgYW5kIGFjdGlvbnMuCi0qIExvY2F0aW9uczo6ICAgICAgICAgTG9jYXRpb25zIGFuZCBhY3Rpb25zLgotKiBEZWNsYXJhdGlvbnM6OiAgICAgIEFsbCBraW5kcyBvZiBCaXNvbiBkZWNsYXJhdGlvbnMgYXJlIGRlc2NyaWJlZCBoZXJlLgotKiBNdWx0aXBsZSBQYXJzZXJzOjogIFB1dHRpbmcgbW9yZSB0aGFuIG9uZSBCaXNvbiBwYXJzZXIgaW4gb25lIHByb2dyYW0uCi0KLU91dGxpbmUgb2YgYSBCaXNvbiBHcmFtbWFyCi0KLSogUHJvbG9ndWU6OiAgICAgICAgICBTeW50YXggYW5kIHVzYWdlIG9mIHRoZSBwcm9sb2d1ZS4KLSogQmlzb24gRGVjbGFyYXRpb25zOjogIFN5bnRheCBhbmQgdXNhZ2Ugb2YgdGhlIEJpc29uIGRlY2xhcmF0aW9ucyBzZWN0aW9uLgotKiBHcmFtbWFyIFJ1bGVzOjogICAgIFN5bnRheCBhbmQgdXNhZ2Ugb2YgdGhlIGdyYW1tYXIgcnVsZXMgc2VjdGlvbi4KLSogRXBpbG9ndWU6OiAgICAgICAgICBTeW50YXggYW5kIHVzYWdlIG9mIHRoZSBlcGlsb2d1ZS4KLQotRGVmaW5pbmcgTGFuZ3VhZ2UgU2VtYW50aWNzCi0KLSogVmFsdWUgVHlwZTo6ICAgICAgICBTcGVjaWZ5aW5nIG9uZSBkYXRhIHR5cGUgZm9yIGFsbCBzZW1hbnRpYyB2YWx1ZXMuCi0qIE11bHRpcGxlIFR5cGVzOjogICAgU3BlY2lmeWluZyBzZXZlcmFsIGFsdGVybmF0aXZlIGRhdGEgdHlwZXMuCi0qIEFjdGlvbnM6OiAgICAgICAgICAgQW4gYWN0aW9uIGlzIHRoZSBzZW1hbnRpYyBkZWZpbml0aW9uIG9mIGEgZ3JhbW1hciBydWxlLgotKiBBY3Rpb24gVHlwZXM6OiAgICAgIFNwZWNpZnlpbmcgZGF0YSB0eXBlcyBmb3IgYWN0aW9ucyB0byBvcGVyYXRlIG9uLgotKiBNaWQtUnVsZSBBY3Rpb25zOjogIE1vc3QgYWN0aW9ucyBnbyBhdCB0aGUgZW5kIG9mIGEgcnVsZS4KLSAgICAgICAgICAgICAgICAgICAgICBUaGlzIHNheXMgd2hlbiwgd2h5IGFuZCBob3cgdG8gdXNlIHRoZSBleGNlcHRpb25hbAotICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uIGluIHRoZSBtaWRkbGUgb2YgYSBydWxlLgotCi1UcmFja2luZyBMb2NhdGlvbnMKLQotKiBMb2NhdGlvbiBUeXBlOjogICAgICAgICAgICAgICBTcGVjaWZ5aW5nIGEgZGF0YSB0eXBlIGZvciBsb2NhdGlvbnMuCi0qIEFjdGlvbnMgYW5kIExvY2F0aW9uczo6ICAgICAgIFVzaW5nIGxvY2F0aW9ucyBpbiBhY3Rpb25zLgotKiBMb2NhdGlvbiBEZWZhdWx0IEFjdGlvbjo6ICAgICBEZWZpbmluZyBhIGdlbmVyYWwgd2F5IHRvIGNvbXB1dGUgbG9jYXRpb25zLgotCi1CaXNvbiBEZWNsYXJhdGlvbnMKLQotKiBSZXF1aXJlIERlY2w6OiAgICAgIFJlcXVpcmluZyBhIEJpc29uIHZlcnNpb24uCi0qIFRva2VuIERlY2w6OiAgICAgICAgRGVjbGFyaW5nIHRlcm1pbmFsIHN5bWJvbHMuCi0qIFByZWNlZGVuY2UgRGVjbDo6ICAgRGVjbGFyaW5nIHRlcm1pbmFscyB3aXRoIHByZWNlZGVuY2UgYW5kIGFzc29jaWF0aXZpdHkuCi0qIFVuaW9uIERlY2w6OiAgICAgICAgRGVjbGFyaW5nIHRoZSBzZXQgb2YgYWxsIHNlbWFudGljIHZhbHVlIHR5cGVzLgotKiBUeXBlIERlY2w6OiAgICAgICAgIERlY2xhcmluZyB0aGUgY2hvaWNlIG9mIHR5cGUgZm9yIGEgbm9udGVybWluYWwgc3ltYm9sLgotKiBJbml0aWFsIEFjdGlvbiBEZWNsOjogIENvZGUgcnVuIGJlZm9yZSBwYXJzaW5nIHN0YXJ0cy4KLSogRGVzdHJ1Y3RvciBEZWNsOjogICBEZWNsYXJpbmcgaG93IHN5bWJvbHMgYXJlIGZyZWVkLgotKiBFeHBlY3QgRGVjbDo6ICAgICAgIFN1cHByZXNzaW5nIHdhcm5pbmdzIGFib3V0IHBhcnNpbmcgY29uZmxpY3RzLgotKiBTdGFydCBEZWNsOjogICAgICAgIFNwZWNpZnlpbmcgdGhlIHN0YXJ0IHN5bWJvbC4KLSogUHVyZSBEZWNsOjogICAgICAgICBSZXF1ZXN0aW5nIGEgcmVlbnRyYW50IHBhcnNlci4KLSogRGVjbCBTdW1tYXJ5OjogICAgICBUYWJsZSBvZiBhbGwgQmlzb24gZGVjbGFyYXRpb25zLgotCi1QYXJzZXIgQy1MYW5ndWFnZSBJbnRlcmZhY2UKLQotKiBQYXJzZXIgRnVuY3Rpb246OiAgIEhvdyB0byBjYWxsIEBjb2Rle3l5cGFyc2V9IGFuZCB3aGF0IGl0IHJldHVybnMuCi0qIExleGljYWw6OiAgICAgICAgICAgWW91IG11c3Qgc3VwcGx5IGEgZnVuY3Rpb24gQGNvZGV7eXlsZXh9Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGljaCByZWFkcyB0b2tlbnMuCi0qIEVycm9yIFJlcG9ydGluZzo6ICAgWW91IG11c3Qgc3VwcGx5IGEgZnVuY3Rpb24gQGNvZGV7eXllcnJvcn0uCi0qIEFjdGlvbiBGZWF0dXJlczo6ICAgU3BlY2lhbCBmZWF0dXJlcyBmb3IgdXNlIGluIGFjdGlvbnMuCi0qIEludGVybmF0aW9uYWxpemF0aW9uOjogIEhvdyB0byBsZXQgdGhlIHBhcnNlciBzcGVhayBpbiB0aGUgdXNlcidzCi0gICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmUgbGFuZ3VhZ2UuCi0KLVRoZSBMZXhpY2FsIEFuYWx5emVyIEZ1bmN0aW9uIEBjb2Rle3l5bGV4fQotCi0qIENhbGxpbmcgQ29udmVudGlvbjo6ICBIb3cgQGNvZGV7eXlwYXJzZX0gY2FsbHMgQGNvZGV7eXlsZXh9LgotKiBUb2tlbiBWYWx1ZXM6OiAgICAgIEhvdyBAY29kZXt5eWxleH0gbXVzdCByZXR1cm4gdGhlIHNlbWFudGljIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgdG9rZW4gaXQgaGFzIHJlYWQuCi0qIFRva2VuIExvY2F0aW9uczo6ICAgSG93IEBjb2Rle3l5bGV4fSBtdXN0IHJldHVybiB0aGUgdGV4dCBsb2NhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgbnVtYmVyLCBldGMuKSBvZiB0aGUgdG9rZW4sIGlmIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9ucyB3YW50IHRoYXQuCi0qIFB1cmUgQ2FsbGluZzo6ICAgICAgSG93IHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gZGlmZmVycwotICAgICAgICAgICAgICAgICAgICAgICAgaW4gYSBwdXJlIHBhcnNlciAoQHB4cmVme1B1cmUgRGVjbCwgLEEgUHVyZSAoUmVlbnRyYW50KSBQYXJzZXJ9KS4KLQotVGhlIEJpc29uIFBhcnNlciBBbGdvcml0aG0KLQotKiBMb29rLUFoZWFkOjogICAgICAgIFBhcnNlciBsb29rcyBvbmUgdG9rZW4gYWhlYWQgd2hlbiBkZWNpZGluZyB3aGF0IHRvIGRvLgotKiBTaGlmdC9SZWR1Y2U6OiAgICAgIENvbmZsaWN0czogd2hlbiBlaXRoZXIgc2hpZnRpbmcgb3IgcmVkdWN0aW9uIGlzIHZhbGlkLgotKiBQcmVjZWRlbmNlOjogICAgICAgIE9wZXJhdG9yIHByZWNlZGVuY2Ugd29ya3MgYnkgcmVzb2x2aW5nIGNvbmZsaWN0cy4KLSogQ29udGV4dHVhbCBQcmVjZWRlbmNlOjogIFdoZW4gYW4gb3BlcmF0b3IncyBwcmVjZWRlbmNlIGRlcGVuZHMgb24gY29udGV4dC4KLSogUGFyc2VyIFN0YXRlczo6ICAgICBUaGUgcGFyc2VyIGlzIGEgZmluaXRlLXN0YXRlLW1hY2hpbmUgd2l0aCBzdGFjay4KLSogUmVkdWNlL1JlZHVjZTo6ICAgICBXaGVuIHR3byBydWxlcyBhcmUgYXBwbGljYWJsZSBpbiB0aGUgc2FtZSBzaXR1YXRpb24uCi0qIE15c3RlcnkgQ29uZmxpY3RzOjogIFJlZHVjZS9yZWR1Y2UgY29uZmxpY3RzIHRoYXQgbG9vayB1bmp1c3RpZmllZC4KLSogR2VuZXJhbGl6ZWQgTFIgUGFyc2luZzo6ICBQYXJzaW5nIGFyYml0cmFyeSBjb250ZXh0LWZyZWUgZ3JhbW1hcnMuCi0qIE1lbW9yeSBNYW5hZ2VtZW50OjogV2hhdCBoYXBwZW5zIHdoZW4gbWVtb3J5IGlzIGV4aGF1c3RlZC4gIEhvdyB0byBhdm9pZCBpdC4KLQotT3BlcmF0b3IgUHJlY2VkZW5jZQotCi0qIFdoeSBQcmVjZWRlbmNlOjogICAgQW4gZXhhbXBsZSBzaG93aW5nIHdoeSBwcmVjZWRlbmNlIGlzIG5lZWRlZC4KLSogVXNpbmcgUHJlY2VkZW5jZTo6ICBIb3cgdG8gc3BlY2lmeSBwcmVjZWRlbmNlIGluIEJpc29uIGdyYW1tYXJzLgotKiBQcmVjZWRlbmNlIEV4YW1wbGVzOjogIEhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgdXNlZCBpbiB0aGUgcHJldmlvdXMgZXhhbXBsZS4KLSogSG93IFByZWNlZGVuY2U6OiAgICBIb3cgdGhleSB3b3JrLgotCi1IYW5kbGluZyBDb250ZXh0IERlcGVuZGVuY2llcwotCi0qIFNlbWFudGljIFRva2Vuczo6ICAgVG9rZW4gcGFyc2luZyBjYW4gZGVwZW5kIG9uIHRoZSBzZW1hbnRpYyBjb250ZXh0LgotKiBMZXhpY2FsIFRpZS1pbnM6OiAgIFRva2VuIHBhcnNpbmcgY2FuIGRlcGVuZCBvbiB0aGUgc3ludGFjdGljIGNvbnRleHQuCi0qIFRpZS1pbiBSZWNvdmVyeTo6ICAgTGV4aWNhbCB0aWUtaW5zIGhhdmUgaW1wbGljYXRpb25zIGZvciBob3cKLSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yIHJlY292ZXJ5IHJ1bGVzIG11c3QgYmUgd3JpdHRlbi4KLQotRGVidWdnaW5nIFlvdXIgUGFyc2VyCi0KLSogVW5kZXJzdGFuZGluZzo6ICAgICBVbmRlcnN0YW5kaW5nIHRoZSBzdHJ1Y3R1cmUgb2YgeW91ciBwYXJzZXIuCi0qIFRyYWNpbmc6OiAgICAgICAgICAgVHJhY2luZyB0aGUgZXhlY3V0aW9uIG9mIHlvdXIgcGFyc2VyLgotCi1JbnZva2luZyBCaXNvbgotCi0qIEJpc29uIE9wdGlvbnM6OiAgICAgQWxsIHRoZSBvcHRpb25zIGRlc2NyaWJlZCBpbiBkZXRhaWwsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbiBhbHBoYWJldGljYWwgb3JkZXIgYnkgc2hvcnQgb3B0aW9ucy4KLSogT3B0aW9uIENyb3NzIEtleTo6ICBBbHBoYWJldGljYWwgbGlzdCBvZiBsb25nIG9wdGlvbnMuCi0qIFlhY2MgTGlicmFyeTo6ICAgICAgWWFjYy1jb21wYXRpYmxlIEBjb2Rle3l5bGV4fSBhbmQgQGNvZGV7bWFpbn0uCi0KLUMrKyBMYW5ndWFnZSBJbnRlcmZhY2UKLQotKiBDKysgUGFyc2Vyczo6ICAgICAgICAgICAgICAgICBUaGUgaW50ZXJmYWNlIHRvIGdlbmVyYXRlIEMrKyBwYXJzZXIgY2xhc3NlcwotKiBBIENvbXBsZXRlIEMrKyBFeGFtcGxlOjogICAgICBEZW1vbnN0cmF0aW5nIHRoZWlyIHVzZQotCi1DKysgUGFyc2VycwotCi0qIEMrKyBCaXNvbiBJbnRlcmZhY2U6OiAgICAgICAgIEFza2luZyBmb3IgQysrIHBhcnNlciBnZW5lcmF0aW9uCi0qIEMrKyBTZW1hbnRpYyBWYWx1ZXM6OiAgICAgICAgICV1bmlvbiB2cy4gQysrCi0qIEMrKyBMb2NhdGlvbiBWYWx1ZXM6OiAgICAgICAgIFRoZSBwb3NpdGlvbiBhbmQgbG9jYXRpb24gY2xhc3NlcwotKiBDKysgUGFyc2VyIEludGVyZmFjZTo6ICAgICAgICBJbnN0YW50aWF0aW5nIGFuZCBydW5uaW5nIHRoZSBwYXJzZXIKLSogQysrIFNjYW5uZXIgSW50ZXJmYWNlOjogICAgICAgRXhjaGFuZ2VzIGJldHdlZW4geXlsZXggYW5kIHBhcnNlCi0KLUEgQ29tcGxldGUgQysrIEV4YW1wbGUKLQotKiBDYWxjKysgLS0tIEMrKyBDYWxjdWxhdG9yOjogICBUaGUgc3BlY2lmaWNhdGlvbnMKLSogQ2FsYysrIFBhcnNpbmcgRHJpdmVyOjogICAgICAgQW4gYWN0aXZlIHBhcnNpbmcgY29udGV4dAotKiBDYWxjKysgUGFyc2VyOjogICAgICAgICAgICAgICBBIHBhcnNlciBjbGFzcwotKiBDYWxjKysgU2Nhbm5lcjo6ICAgICAgICAgICAgICBBIHB1cmUgQysrIEZsZXggc2Nhbm5lcgotKiBDYWxjKysgVG9wIExldmVsOjogICAgICAgICAgICBDb25kdWN0aW5nIHRoZSBiYW5kCi0KLUZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zCi0KLSogTWVtb3J5IEV4aGF1c3RlZDo6ICAgICAgICAgICBCcmVha2luZyB0aGUgU3RhY2sgTGltaXRzCi0qIEhvdyBDYW4gSSBSZXNldCB0aGUgUGFyc2VyOjogQGNvZGV7eXlwYXJzZX0gS2VlcHMgc29tZSBTdGF0ZQotKiBTdHJpbmdzIGFyZSBEZXN0cm95ZWQ6OiAgICAgIEBjb2Rle3l5bHZhbH0gTG9zZXMgVHJhY2sgb2YgU3RyaW5ncwotKiBJbXBsZW1lbnRpbmcgR290b3MvTG9vcHM6OiAgIENvbnRyb2wgRmxvdyBpbiB0aGUgQ2FsY3VsYXRvcgotKiBNdWx0aXBsZSBzdGFydC1zeW1ib2xzOjogICAgIEZhY3RvcmluZyBjbG9zZWx5IHJlbGF0ZWQgZ3JhbW1hcnMKLSogU2VjdXJlPyAgQ29uZm9ybT86OiAgICAgICAgICBJcyBCaXNvbiBAYWNyb255bXtQT1NJWH0gc2FmZT8KLSogSSBjYW4ndCBidWlsZCBCaXNvbjo6ICAgICAgICBUcm91Ymxlc2hvb3RpbmcKLSogV2hlcmUgY2FuIEkgZmluZCBoZWxwPzo6ICAgICBUcm91Ymxlc2hvdXRpbmcKLSogQnVnIFJlcG9ydHM6OiAgICAgICAgICAgICAgICBUcm91YmxlcmVwb3J0aW5nCi0qIE90aGVyIExhbmd1YWdlczo6ICAgICAgICAgICAgUGFyc2VycyBpbiBKYXZhIGFuZCBvdGhlcnMKLSogQmV0YSBUZXN0aW5nOjogICAgICAgICAgICAgICBFeHBlcmltZW50aW5nIGRldmVsb3BtZW50IHZlcnNpb25zCi0qIE1haWxpbmcgTGlzdHM6OiAgICAgICAgICAgICAgTWVldGluZyBvdGhlciBCaXNvbiB1c2VycwotCi1Db3B5aW5nIFRoaXMgTWFudWFsCi0KLSogR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlOjogIExpY2Vuc2UgZm9yIGNvcHlpbmcgdGhpcyBtYW51YWwuCi0KLUBlbmQgZGV0YWlsbWVudQotQGVuZCBtZW51Ci0KLUBub2RlIEludHJvZHVjdGlvbgotQHVubnVtYmVyZWQgSW50cm9kdWN0aW9uCi1AY2luZGV4IGludHJvZHVjdGlvbgotCi1AZGZue0Jpc29ufSBpcyBhIGdlbmVyYWwtcHVycG9zZSBwYXJzZXIgZ2VuZXJhdG9yIHRoYXQgY29udmVydHMgYW4KLWFubm90YXRlZCBjb250ZXh0LWZyZWUgZ3JhbW1hciBpbnRvIGFuIEBhY3Jvbnlte0xBTFJ9KDEpIG9yCi1AYWNyb255bXtHTFJ9IHBhcnNlciBmb3IgdGhhdCBncmFtbWFyLiAgT25jZSB5b3UgYXJlIHByb2ZpY2llbnQgd2l0aAotQmlzb24sIHlvdSBjYW4gdXNlIGl0IHRvIGRldmVsb3AgYSB3aWRlIHJhbmdlIG9mIGxhbmd1YWdlIHBhcnNlcnMsIGZyb20gdGhvc2UKLXVzZWQgaW4gc2ltcGxlIGRlc2sgY2FsY3VsYXRvcnMgdG8gY29tcGxleCBwcm9ncmFtbWluZyBsYW5ndWFnZXMuCi0KLUJpc29uIGlzIHVwd2FyZCBjb21wYXRpYmxlIHdpdGggWWFjYzogYWxsIHByb3Blcmx5LXdyaXR0ZW4gWWFjYyBncmFtbWFycwotb3VnaHQgdG8gd29yayB3aXRoIEJpc29uIHdpdGggbm8gY2hhbmdlLiAgQW55b25lIGZhbWlsaWFyIHdpdGggWWFjYwotc2hvdWxkIGJlIGFibGUgdG8gdXNlIEJpc29uIHdpdGggbGl0dGxlIHRyb3VibGUuICBZb3UgbmVlZCB0byBiZSBmbHVlbnQgaW4KLUMgb3IgQysrIHByb2dyYW1taW5nIGluIG9yZGVyIHRvIHVzZSBCaXNvbiBvciB0byB1bmRlcnN0YW5kIHRoaXMgbWFudWFsLgotCi1XZSBiZWdpbiB3aXRoIHR1dG9yaWFsIGNoYXB0ZXJzIHRoYXQgZXhwbGFpbiB0aGUgYmFzaWMgY29uY2VwdHMgb2YgdXNpbmcKLUJpc29uIGFuZCBzaG93IHRocmVlIGV4cGxhaW5lZCBleGFtcGxlcywgZWFjaCBidWlsZGluZyBvbiB0aGUgbGFzdC4gIElmIHlvdQotZG9uJ3Qga25vdyBCaXNvbiBvciBZYWNjLCBzdGFydCBieSByZWFkaW5nIHRoZXNlIGNoYXB0ZXJzLiAgUmVmZXJlbmNlCi1jaGFwdGVycyBmb2xsb3cgd2hpY2ggZGVzY3JpYmUgc3BlY2lmaWMgYXNwZWN0cyBvZiBCaXNvbiBpbiBkZXRhaWwuCi0KLUJpc29uIHdhcyB3cml0dGVuIHByaW1hcmlseSBieSBSb2JlcnQgQ29yYmV0dDsgUmljaGFyZCBTdGFsbG1hbiBtYWRlIGl0Ci1ZYWNjLWNvbXBhdGlibGUuICBXaWxmcmVkIEhhbnNlbiBvZiBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eSBhZGRlZAotbXVsdGktY2hhcmFjdGVyIHN0cmluZyBsaXRlcmFscyBhbmQgb3RoZXIgZmVhdHVyZXMuCi0KLVRoaXMgZWRpdGlvbiBjb3JyZXNwb25kcyB0byB2ZXJzaW9uIEB2YWx1ZXtWRVJTSU9OfSBvZiBCaXNvbi4KLQotQG5vZGUgQ29uZGl0aW9ucwotQHVubnVtYmVyZWQgQ29uZGl0aW9ucyBmb3IgVXNpbmcgQmlzb24KLQotVGhlIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgQmlzb24tZ2VuZXJhdGVkIHBhcnNlcnMgcGVybWl0IHVzaW5nIHRoZQotcGFyc2VycyBpbiBub25mcmVlIHByb2dyYW1zLiAgQmVmb3JlIEJpc29uIHZlcnNpb24gMi4yLCB0aGVzZSBleHRyYQotcGVybWlzc2lvbnMgYXBwbGllZCBvbmx5IHdoZW4gQmlzb24gd2FzIGdlbmVyYXRpbmcgQGFjcm9ueW17TEFMUn0oMSkKLXBhcnNlcnMgaW4gQ0AuICBBbmQgYmVmb3JlIEJpc29uIHZlcnNpb24gMS4yNCwgQmlzb24tZ2VuZXJhdGVkCi1wYXJzZXJzIGNvdWxkIGJlIHVzZWQgb25seSBpbiBwcm9ncmFtcyB0aGF0IHdlcmUgZnJlZSBzb2Z0d2FyZS4KLQotVGhlIG90aGVyIEBhY3Jvbnlte0dOVX0gcHJvZ3JhbW1pbmcgdG9vbHMsIHN1Y2ggYXMgdGhlIEBhY3Jvbnlte0dOVX0gQwotY29tcGlsZXIsIGhhdmUgbmV2ZXIKLWhhZCBzdWNoIGEgcmVxdWlyZW1lbnQuICBUaGV5IGNvdWxkIGFsd2F5cyBiZSB1c2VkIGZvciBub25mcmVlCi1zb2Z0d2FyZS4gIFRoZSByZWFzb24gQmlzb24gd2FzIGRpZmZlcmVudCB3YXMgbm90IGR1ZSB0byBhIHNwZWNpYWwKLXBvbGljeSBkZWNpc2lvbjsgaXQgcmVzdWx0ZWQgZnJvbSBhcHBseWluZyB0aGUgdXN1YWwgR2VuZXJhbCBQdWJsaWMKLUxpY2Vuc2UgdG8gYWxsIG9mIHRoZSBCaXNvbiBzb3VyY2UgY29kZS4KLQotVGhlIG91dHB1dCBvZiB0aGUgQmlzb24gdXRpbGl0eS0tLXRoZSBCaXNvbiBwYXJzZXIgZmlsZS0tLWNvbnRhaW5zIGEKLXZlcmJhdGltIGNvcHkgb2YgYSBzaXphYmxlIHBpZWNlIG9mIEJpc29uLCB3aGljaCBpcyB0aGUgY29kZSBmb3IgdGhlCi1wYXJzZXIncyBpbXBsZW1lbnRhdGlvbi4gIChUaGUgYWN0aW9ucyBmcm9tIHlvdXIgZ3JhbW1hciBhcmUgaW5zZXJ0ZWQKLWludG8gdGhpcyBpbXBsZW1lbnRhdGlvbiBhdCBvbmUgcG9pbnQsIGJ1dCBtb3N0IG9mIHRoZSByZXN0IG9mIHRoZQotaW1wbGVtZW50YXRpb24gaXMgbm90IGNoYW5nZWQuKSAgV2hlbiB3ZSBhcHBsaWVkIHRoZSBAYWNyb255bXtHUEx9Ci10ZXJtcyB0byB0aGUgc2tlbGV0b24gY29kZSBmb3IgdGhlIHBhcnNlcidzIGltcGxlbWVudGF0aW9uLAotdGhlIGVmZmVjdCB3YXMgdG8gcmVzdHJpY3QgdGhlIHVzZSBvZiBCaXNvbiBvdXRwdXQgdG8gZnJlZSBzb2Z0d2FyZS4KLQotV2UgZGlkbid0IGNoYW5nZSB0aGUgdGVybXMgYmVjYXVzZSBvZiBzeW1wYXRoeSBmb3IgcGVvcGxlIHdobyB3YW50IHRvCi1tYWtlIHNvZnR3YXJlIHByb3ByaWV0YXJ5LiAgQHN0cm9uZ3tTb2Z0d2FyZSBzaG91bGQgYmUgZnJlZS59ICBCdXQgd2UKLWNvbmNsdWRlZCB0aGF0IGxpbWl0aW5nIEJpc29uJ3MgdXNlIHRvIGZyZWUgc29mdHdhcmUgd2FzIGRvaW5nIGxpdHRsZSB0bwotZW5jb3VyYWdlIHBlb3BsZSB0byBtYWtlIG90aGVyIHNvZnR3YXJlIGZyZWUuICBTbyB3ZSBkZWNpZGVkIHRvIG1ha2UgdGhlCi1wcmFjdGljYWwgY29uZGl0aW9ucyBmb3IgdXNpbmcgQmlzb24gbWF0Y2ggdGhlIHByYWN0aWNhbCBjb25kaXRpb25zIGZvcgotdXNpbmcgdGhlIG90aGVyIEBhY3Jvbnlte0dOVX0gdG9vbHMuCi0KLVRoaXMgZXhjZXB0aW9uIGFwcGxpZXMgd2hlbiBCaXNvbiBpcyBnZW5lcmF0aW5nIGNvZGUgZm9yIGEgcGFyc2VyLgotWW91IGNhbiB0ZWxsIHdoZXRoZXIgdGhlIGV4Y2VwdGlvbiBhcHBsaWVzIHRvIGEgQmlzb24gb3V0cHV0IGZpbGUgYnkKLWluc3BlY3RpbmcgdGhlIGZpbGUgZm9yIHRleHQgYmVnaW5uaW5nIHdpdGggYGBBcyBhIHNwZWNpYWwKLWV4Y2VwdGlvbkBkb3Rze30nJy4gIFRoZSB0ZXh0IHNwZWxscyBvdXQgdGhlIGV4YWN0IHRlcm1zIG9mIHRoZQotZXhjZXB0aW9uLgotCi1AaW5jbHVkZSBncGwudGV4aQotCi1Abm9kZSBDb25jZXB0cwotQGNoYXB0ZXIgVGhlIENvbmNlcHRzIG9mIEJpc29uCi0KLVRoaXMgY2hhcHRlciBpbnRyb2R1Y2VzIG1hbnkgb2YgdGhlIGJhc2ljIGNvbmNlcHRzIHdpdGhvdXQgd2hpY2ggdGhlCi1kZXRhaWxzIG9mIEJpc29uIHdpbGwgbm90IG1ha2Ugc2Vuc2UuICBJZiB5b3UgZG8gbm90IGFscmVhZHkga25vdyBob3cgdG8KLXVzZSBCaXNvbiBvciBZYWNjLCB3ZSBzdWdnZXN0IHlvdSBzdGFydCBieSByZWFkaW5nIHRoaXMgY2hhcHRlciBjYXJlZnVsbHkuCi0KLUBtZW51Ci0qIExhbmd1YWdlIGFuZCBHcmFtbWFyOjogIExhbmd1YWdlcyBhbmQgY29udGV4dC1mcmVlIGdyYW1tYXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIG1hdGhlbWF0aWNhbCBpZGVhcy4KLSogR3JhbW1hciBpbiBCaXNvbjo6ICBIb3cgd2UgcmVwcmVzZW50IGdyYW1tYXJzIGZvciBCaXNvbidzIHNha2UuCi0qIFNlbWFudGljIFZhbHVlczo6ICAgRWFjaCB0b2tlbiBvciBzeW50YWN0aWMgZ3JvdXBpbmcgY2FuIGhhdmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGEgc2VtYW50aWMgdmFsdWUgKHRoZSB2YWx1ZSBvZiBhbiBpbnRlZ2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG5hbWUgb2YgYW4gaWRlbnRpZmllciwgZXRjLikuCi0qIFNlbWFudGljIEFjdGlvbnM6OiAgRWFjaCBydWxlIGNhbiBoYXZlIGFuIGFjdGlvbiBjb250YWluaW5nIEMgY29kZS4KLSogR0xSIFBhcnNlcnM6OiAgICAgICBXcml0aW5nIHBhcnNlcnMgZm9yIGdlbmVyYWwgY29udGV4dC1mcmVlIGxhbmd1YWdlcy4KLSogTG9jYXRpb25zIE92ZXJ2aWV3OjogICAgVHJhY2tpbmcgTG9jYXRpb25zLgotKiBCaXNvbiBQYXJzZXI6OiAgICAgIFdoYXQgYXJlIEJpc29uJ3MgaW5wdXQgYW5kIG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGhvdyBpcyB0aGUgb3V0cHV0IHVzZWQ/Ci0qIFN0YWdlczo6ICAgICAgICAgICAgU3RhZ2VzIGluIHdyaXRpbmcgYW5kIHJ1bm5pbmcgQmlzb24gZ3JhbW1hcnMuCi0qIEdyYW1tYXIgTGF5b3V0OjogICAgT3ZlcmFsbCBzdHJ1Y3R1cmUgb2YgYSBCaXNvbiBncmFtbWFyIGZpbGUuCi1AZW5kIG1lbnUKLQotQG5vZGUgTGFuZ3VhZ2UgYW5kIEdyYW1tYXIKLUBzZWN0aW9uIExhbmd1YWdlcyBhbmQgQ29udGV4dC1GcmVlIEdyYW1tYXJzCi0KLUBjaW5kZXggY29udGV4dC1mcmVlIGdyYW1tYXIKLUBjaW5kZXggZ3JhbW1hciwgY29udGV4dC1mcmVlCi1JbiBvcmRlciBmb3IgQmlzb24gdG8gcGFyc2UgYSBsYW5ndWFnZSwgaXQgbXVzdCBiZSBkZXNjcmliZWQgYnkgYQotQGRmbntjb250ZXh0LWZyZWUgZ3JhbW1hcn0uICBUaGlzIG1lYW5zIHRoYXQgeW91IHNwZWNpZnkgb25lIG9yIG1vcmUKLUBkZm57c3ludGFjdGljIGdyb3VwaW5nc30gYW5kIGdpdmUgcnVsZXMgZm9yIGNvbnN0cnVjdGluZyB0aGVtIGZyb20gdGhlaXIKLXBhcnRzLiAgRm9yIGV4YW1wbGUsIGluIHRoZSBDIGxhbmd1YWdlLCBvbmUga2luZCBvZiBncm91cGluZyBpcyBjYWxsZWQgYW4KLWBleHByZXNzaW9uJy4gIE9uZSBydWxlIGZvciBtYWtpbmcgYW4gZXhwcmVzc2lvbiBtaWdodCBiZSwgYGBBbiBleHByZXNzaW9uCi1jYW4gYmUgbWFkZSBvZiBhIG1pbnVzIHNpZ24gYW5kIGFub3RoZXIgZXhwcmVzc2lvbicnLiAgQW5vdGhlciB3b3VsZCBiZSwKLWBgQW4gZXhwcmVzc2lvbiBjYW4gYmUgYW4gaW50ZWdlcicnLiAgQXMgeW91IGNhbiBzZWUsIHJ1bGVzIGFyZSBvZnRlbgotcmVjdXJzaXZlLCBidXQgdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgcnVsZSB3aGljaCBsZWFkcyBvdXQgb2YgdGhlCi1yZWN1cnNpb24uCi0KLUBjaW5kZXggQGFjcm9ueW17Qk5GfQotQGNpbmRleCBCYWNrdXMtTmF1ciBmb3JtCi1UaGUgbW9zdCBjb21tb24gZm9ybWFsIHN5c3RlbSBmb3IgcHJlc2VudGluZyBzdWNoIHJ1bGVzIGZvciBodW1hbnMgdG8gcmVhZAotaXMgQGRmbntCYWNrdXMtTmF1ciBGb3JtfSBvciBgYEBhY3Jvbnlte0JORn0nJywgd2hpY2ggd2FzIGRldmVsb3BlZCBpbgotb3JkZXIgdG8gc3BlY2lmeSB0aGUgbGFuZ3VhZ2UgQWxnb2wgNjAuICBBbnkgZ3JhbW1hciBleHByZXNzZWQgaW4KLUBhY3Jvbnlte0JORn0gaXMgYSBjb250ZXh0LWZyZWUgZ3JhbW1hci4gIFRoZSBpbnB1dCB0byBCaXNvbiBpcwotZXNzZW50aWFsbHkgbWFjaGluZS1yZWFkYWJsZSBAYWNyb255bXtCTkZ9LgotCi1AY2luZGV4IEBhY3Jvbnlte0xBTFJ9KDEpIGdyYW1tYXJzCi1AY2luZGV4IEBhY3Jvbnlte0xSfSgxKSBncmFtbWFycwotVGhlcmUgYXJlIHZhcmlvdXMgaW1wb3J0YW50IHN1YmNsYXNzZXMgb2YgY29udGV4dC1mcmVlIGdyYW1tYXIuICBBbHRob3VnaCBpdAotY2FuIGhhbmRsZSBhbG1vc3QgYWxsIGNvbnRleHQtZnJlZSBncmFtbWFycywgQmlzb24gaXMgb3B0aW1pemVkIGZvciB3aGF0Ci1hcmUgY2FsbGVkIEBhY3Jvbnlte0xBTFJ9KDEpIGdyYW1tYXJzLgotSW4gYnJpZWYsIGluIHRoZXNlIGdyYW1tYXJzLCBpdCBtdXN0IGJlIHBvc3NpYmxlIHRvCi10ZWxsIGhvdyB0byBwYXJzZSBhbnkgcG9ydGlvbiBvZiBhbiBpbnB1dCBzdHJpbmcgd2l0aCBqdXN0IGEgc2luZ2xlCi10b2tlbiBvZiBsb29rLWFoZWFkLiAgU3RyaWN0bHkgc3BlYWtpbmcsIHRoYXQgaXMgYSBkZXNjcmlwdGlvbiBvZiBhbgotQGFjcm9ueW17TFJ9KDEpIGdyYW1tYXIsIGFuZCBAYWNyb255bXtMQUxSfSgxKSBpbnZvbHZlcyBhZGRpdGlvbmFsCi1yZXN0cmljdGlvbnMgdGhhdCBhcmUKLWhhcmQgdG8gZXhwbGFpbiBzaW1wbHk7IGJ1dCBpdCBpcyByYXJlIGluIGFjdHVhbCBwcmFjdGljZSB0byBmaW5kIGFuCi1AYWNyb255bXtMUn0oMSkgZ3JhbW1hciB0aGF0IGZhaWxzIHRvIGJlIEBhY3Jvbnlte0xBTFJ9KDEpLgotQHhyZWZ7TXlzdGVyeSBDb25mbGljdHMsICxNeXN0ZXJpb3VzIFJlZHVjZS9SZWR1Y2UgQ29uZmxpY3RzfSwgZm9yCi1tb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMuCi0KLUBjaW5kZXggQGFjcm9ueW17R0xSfSBwYXJzaW5nCi1AY2luZGV4IGdlbmVyYWxpemVkIEBhY3Jvbnlte0xSfSAoQGFjcm9ueW17R0xSfSkgcGFyc2luZwotQGNpbmRleCBhbWJpZ3VvdXMgZ3JhbW1hcnMKLUBjaW5kZXggbm9uZGV0ZXJtaW5pc3RpYyBwYXJzaW5nCi0KLVBhcnNlcnMgZm9yIEBhY3Jvbnlte0xBTFJ9KDEpIGdyYW1tYXJzIGFyZSBAZGZue2RldGVybWluaXN0aWN9LCBtZWFuaW5nCi1yb3VnaGx5IHRoYXQgdGhlIG5leHQgZ3JhbW1hciBydWxlIHRvIGFwcGx5IGF0IGFueSBwb2ludCBpbiB0aGUgaW5wdXQgaXMKLXVuaXF1ZWx5IGRldGVybWluZWQgYnkgdGhlIHByZWNlZGluZyBpbnB1dCBhbmQgYSBmaXhlZCwgZmluaXRlIHBvcnRpb24KLShjYWxsZWQgYSBAZGZue2xvb2stYWhlYWR9KSBvZiB0aGUgcmVtYWluaW5nIGlucHV0LiAgQSBjb250ZXh0LWZyZWUKLWdyYW1tYXIgY2FuIGJlIEBkZm57YW1iaWd1b3VzfSwgbWVhbmluZyB0aGF0IHRoZXJlIGFyZSBtdWx0aXBsZSB3YXlzIHRvCi1hcHBseSB0aGUgZ3JhbW1hciBydWxlcyB0byBnZXQgdGhlIHNhbWUgaW5wdXRzLiAgRXZlbiB1bmFtYmlndW91cwotZ3JhbW1hcnMgY2FuIGJlIEBkZm57bm9uZGV0ZXJtaW5pc3RpY30sIG1lYW5pbmcgdGhhdCBubyBmaXhlZAotbG9vay1haGVhZCBhbHdheXMgc3VmZmljZXMgdG8gZGV0ZXJtaW5lIHRoZSBuZXh0IGdyYW1tYXIgcnVsZSB0byBhcHBseS4KLVdpdGggdGhlIHByb3BlciBkZWNsYXJhdGlvbnMsIEJpc29uIGlzIGFsc28gYWJsZSB0byBwYXJzZSB0aGVzZSBtb3JlCi1nZW5lcmFsIGNvbnRleHQtZnJlZSBncmFtbWFycywgdXNpbmcgYSB0ZWNobmlxdWUga25vd24gYXMgQGFjcm9ueW17R0xSfQotcGFyc2luZyAoZm9yIEdlbmVyYWxpemVkIEBhY3Jvbnlte0xSfSkuICBCaXNvbidzIEBhY3Jvbnlte0dMUn0gcGFyc2VycwotYXJlIGFibGUgdG8gaGFuZGxlIGFueSBjb250ZXh0LWZyZWUgZ3JhbW1hciBmb3Igd2hpY2ggdGhlIG51bWJlciBvZgotcG9zc2libGUgcGFyc2VzIG9mIGFueSBnaXZlbiBzdHJpbmcgaXMgZmluaXRlLgotCi1AY2luZGV4IHN5bWJvbHMgKGFic3RyYWN0KQotQGNpbmRleCB0b2tlbgotQGNpbmRleCBzeW50YWN0aWMgZ3JvdXBpbmcKLUBjaW5kZXggZ3JvdXBpbmcsIHN5bnRhY3RpYwotSW4gdGhlIGZvcm1hbCBncmFtbWF0aWNhbCBydWxlcyBmb3IgYSBsYW5ndWFnZSwgZWFjaCBraW5kIG9mIHN5bnRhY3RpYwotdW5pdCBvciBncm91cGluZyBpcyBuYW1lZCBieSBhIEBkZm57c3ltYm9sfS4gIFRob3NlIHdoaWNoIGFyZSBidWlsdCBieQotZ3JvdXBpbmcgc21hbGxlciBjb25zdHJ1Y3RzIGFjY29yZGluZyB0byBncmFtbWF0aWNhbCBydWxlcyBhcmUgY2FsbGVkCi1AZGZue25vbnRlcm1pbmFsIHN5bWJvbHN9OyB0aG9zZSB3aGljaCBjYW4ndCBiZSBzdWJkaXZpZGVkIGFyZSBjYWxsZWQKLUBkZm57dGVybWluYWwgc3ltYm9sc30gb3IgQGRmbnt0b2tlbiB0eXBlc30uICBXZSBjYWxsIGEgcGllY2Ugb2YgaW5wdXQKLWNvcnJlc3BvbmRpbmcgdG8gYSBzaW5nbGUgdGVybWluYWwgc3ltYm9sIGEgQGRmbnt0b2tlbn0sIGFuZCBhIHBpZWNlCi1jb3JyZXNwb25kaW5nIHRvIGEgc2luZ2xlIG5vbnRlcm1pbmFsIHN5bWJvbCBhIEBkZm57Z3JvdXBpbmd9LgotCi1XZSBjYW4gdXNlIHRoZSBDIGxhbmd1YWdlIGFzIGFuIGV4YW1wbGUgb2Ygd2hhdCBzeW1ib2xzLCB0ZXJtaW5hbCBhbmQKLW5vbnRlcm1pbmFsLCBtZWFuLiAgVGhlIHRva2VucyBvZiBDIGFyZSBpZGVudGlmaWVycywgY29uc3RhbnRzIChudW1lcmljCi1hbmQgc3RyaW5nKSwgYW5kIHRoZSB2YXJpb3VzIGtleXdvcmRzLCBhcml0aG1ldGljIG9wZXJhdG9ycyBhbmQKLXB1bmN0dWF0aW9uIG1hcmtzLiAgU28gdGhlIHRlcm1pbmFsIHN5bWJvbHMgb2YgYSBncmFtbWFyIGZvciBDIGluY2x1ZGUKLWBpZGVudGlmaWVyJywgYG51bWJlcicsIGBzdHJpbmcnLCBwbHVzIG9uZSBzeW1ib2wgZm9yIGVhY2gga2V5d29yZCwKLW9wZXJhdG9yIG9yIHB1bmN0dWF0aW9uIG1hcms6IGBpZicsIGByZXR1cm4nLCBgY29uc3QnLCBgc3RhdGljJywgYGludCcsCi1gY2hhcicsIGBwbHVzLXNpZ24nLCBgb3Blbi1icmFjZScsIGBjbG9zZS1icmFjZScsIGBjb21tYScgYW5kIG1hbnkgbW9yZS4KLShUaGVzZSB0b2tlbnMgY2FuIGJlIHN1YmRpdmlkZWQgaW50byBjaGFyYWN0ZXJzLCBidXQgdGhhdCBpcyBhIG1hdHRlciBvZgotbGV4aWNvZ3JhcGh5LCBub3QgZ3JhbW1hci4pCi0KLUhlcmUgaXMgYSBzaW1wbGUgQyBmdW5jdGlvbiBzdWJkaXZpZGVkIGludG8gdG9rZW5zOgotCi1AaWZpbmZvCi1AZXhhbXBsZQotaW50ICAgICAgICAgICAgIC8qIEBye2tleXdvcmQgYGludCd9ICovCi1zcXVhcmUgKGludCB4KSAgLyogQHJ7aWRlbnRpZmllciwgb3Blbi1wYXJlbiwga2V5d29yZCBgaW50Jyx9Ci0gICAgICAgICAgICAgICAgICAgQHJ7aWRlbnRpZmllciwgY2xvc2UtcGFyZW59ICovCi1AeyAgICAgICAgICAgICAgIC8qIEBye29wZW4tYnJhY2V9ICovCi0gIHJldHVybiB4ICogeDsgLyogQHJ7a2V5d29yZCBgcmV0dXJuJywgaWRlbnRpZmllciwgYXN0ZXJpc2ssfQotICAgICAgICAgICAgICAgICAgIEBye2lkZW50aWZpZXIsIHNlbWljb2xvbn0gKi8KLUB9ICAgICAgICAgICAgICAgLyogQHJ7Y2xvc2UtYnJhY2V9ICovCi1AZW5kIGV4YW1wbGUKLUBlbmQgaWZpbmZvCi1AaWZub3RpbmZvCi1AZXhhbXBsZQotaW50ICAgICAgICAgICAgIC8qIEBye2tleXdvcmQgYGludCd9ICovCi1zcXVhcmUgKGludCB4KSAgLyogQHJ7aWRlbnRpZmllciwgb3Blbi1wYXJlbiwga2V5d29yZCBgaW50JywgaWRlbnRpZmllciwgY2xvc2UtcGFyZW59ICovCi1AeyAgICAgICAgICAgICAgIC8qIEBye29wZW4tYnJhY2V9ICovCi0gIHJldHVybiB4ICogeDsgLyogQHJ7a2V5d29yZCBgcmV0dXJuJywgaWRlbnRpZmllciwgYXN0ZXJpc2ssIGlkZW50aWZpZXIsIHNlbWljb2xvbn0gKi8KLUB9ICAgICAgICAgICAgICAgLyogQHJ7Y2xvc2UtYnJhY2V9ICovCi1AZW5kIGV4YW1wbGUKLUBlbmQgaWZub3RpbmZvCi0KLVRoZSBzeW50YWN0aWMgZ3JvdXBpbmdzIG9mIEMgaW5jbHVkZSB0aGUgZXhwcmVzc2lvbiwgdGhlIHN0YXRlbWVudCwgdGhlCi1kZWNsYXJhdGlvbiwgYW5kIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiAgVGhlc2UgYXJlIHJlcHJlc2VudGVkIGluIHRoZQotZ3JhbW1hciBvZiBDIGJ5IG5vbnRlcm1pbmFsIHN5bWJvbHMgYGV4cHJlc3Npb24nLCBgc3RhdGVtZW50JywKLWBkZWNsYXJhdGlvbicgYW5kIGBmdW5jdGlvbiBkZWZpbml0aW9uJy4gIFRoZSBmdWxsIGdyYW1tYXIgdXNlcyBkb3plbnMgb2YKLWFkZGl0aW9uYWwgbGFuZ3VhZ2UgY29uc3RydWN0cywgZWFjaCB3aXRoIGl0cyBvd24gbm9udGVybWluYWwgc3ltYm9sLCBpbgotb3JkZXIgdG8gZXhwcmVzcyB0aGUgbWVhbmluZ3Mgb2YgdGhlc2UgZm91ci4gIFRoZSBleGFtcGxlIGFib3ZlIGlzIGEKLWZ1bmN0aW9uIGRlZmluaXRpb247IGl0IGNvbnRhaW5zIG9uZSBkZWNsYXJhdGlvbiwgYW5kIG9uZSBzdGF0ZW1lbnQuICBJbgotdGhlIHN0YXRlbWVudCwgZWFjaCBAc2FtcHt4fSBpcyBhbiBleHByZXNzaW9uIGFuZCBzbyBpcyBAc2FtcHt4ICogeH0uCi0KLUVhY2ggbm9udGVybWluYWwgc3ltYm9sIG11c3QgaGF2ZSBncmFtbWF0aWNhbCBydWxlcyBzaG93aW5nIGhvdyBpdCBpcyBtYWRlCi1vdXQgb2Ygc2ltcGxlciBjb25zdHJ1Y3RzLiAgRm9yIGV4YW1wbGUsIG9uZSBraW5kIG9mIEMgc3RhdGVtZW50IGlzIHRoZQotQGNvZGV7cmV0dXJufSBzdGF0ZW1lbnQ7IHRoaXMgd291bGQgYmUgZGVzY3JpYmVkIHdpdGggYSBncmFtbWFyIHJ1bGUgd2hpY2gKLXJlYWRzIGluZm9ybWFsbHkgYXMgZm9sbG93czoKLQotQHF1b3RhdGlvbgotQSBgc3RhdGVtZW50JyBjYW4gYmUgbWFkZSBvZiBhIGByZXR1cm4nIGtleXdvcmQsIGFuIGBleHByZXNzaW9uJyBhbmQgYQotYHNlbWljb2xvbicuCi1AZW5kIHF1b3RhdGlvbgotCi1Abm9pbmRlbnQKLVRoZXJlIHdvdWxkIGJlIG1hbnkgb3RoZXIgcnVsZXMgZm9yIGBzdGF0ZW1lbnQnLCBvbmUgZm9yIGVhY2gga2luZCBvZgotc3RhdGVtZW50IGluIEMuCi0KLUBjaW5kZXggc3RhcnQgc3ltYm9sCi1PbmUgbm9udGVybWluYWwgc3ltYm9sIG11c3QgYmUgZGlzdGluZ3Vpc2hlZCBhcyB0aGUgc3BlY2lhbCBvbmUgd2hpY2gKLWRlZmluZXMgYSBjb21wbGV0ZSB1dHRlcmFuY2UgaW4gdGhlIGxhbmd1YWdlLiAgSXQgaXMgY2FsbGVkIHRoZSBAZGZue3N0YXJ0Ci1zeW1ib2x9LiAgSW4gYSBjb21waWxlciwgdGhpcyBtZWFucyBhIGNvbXBsZXRlIGlucHV0IHByb2dyYW0uICBJbiB0aGUgQwotbGFuZ3VhZ2UsIHRoZSBub250ZXJtaW5hbCBzeW1ib2wgYHNlcXVlbmNlIG9mIGRlZmluaXRpb25zIGFuZCBkZWNsYXJhdGlvbnMnCi1wbGF5cyB0aGlzIHJvbGUuCi0KLUZvciBleGFtcGxlLCBAc2FtcHsxICsgMn0gaXMgYSB2YWxpZCBDIGV4cHJlc3Npb24tLS1hIHZhbGlkIHBhcnQgb2YgYSBDCi1wcm9ncmFtLS0tYnV0IGl0IGlzIG5vdCB2YWxpZCBhcyBhbiBAZW1waHtlbnRpcmV9IEMgcHJvZ3JhbS4gIEluIHRoZQotY29udGV4dC1mcmVlIGdyYW1tYXIgb2YgQywgdGhpcyBmb2xsb3dzIGZyb20gdGhlIGZhY3QgdGhhdCBgZXhwcmVzc2lvbicgaXMKLW5vdCB0aGUgc3RhcnQgc3ltYm9sLgotCi1UaGUgQmlzb24gcGFyc2VyIHJlYWRzIGEgc2VxdWVuY2Ugb2YgdG9rZW5zIGFzIGl0cyBpbnB1dCwgYW5kIGdyb3VwcyB0aGUKLXRva2VucyB1c2luZyB0aGUgZ3JhbW1hciBydWxlcy4gIElmIHRoZSBpbnB1dCBpcyB2YWxpZCwgdGhlIGVuZCByZXN1bHQgaXMKLXRoYXQgdGhlIGVudGlyZSB0b2tlbiBzZXF1ZW5jZSByZWR1Y2VzIHRvIGEgc2luZ2xlIGdyb3VwaW5nIHdob3NlIHN5bWJvbCBpcwotdGhlIGdyYW1tYXIncyBzdGFydCBzeW1ib2wuICBJZiB3ZSB1c2UgYSBncmFtbWFyIGZvciBDLCB0aGUgZW50aXJlIGlucHV0Ci1tdXN0IGJlIGEgYHNlcXVlbmNlIG9mIGRlZmluaXRpb25zIGFuZCBkZWNsYXJhdGlvbnMnLiAgSWYgbm90LCB0aGUgcGFyc2VyCi1yZXBvcnRzIGEgc3ludGF4IGVycm9yLgotCi1Abm9kZSBHcmFtbWFyIGluIEJpc29uCi1Ac2VjdGlvbiBGcm9tIEZvcm1hbCBSdWxlcyB0byBCaXNvbiBJbnB1dAotQGNpbmRleCBCaXNvbiBncmFtbWFyCi1AY2luZGV4IGdyYW1tYXIsIEJpc29uCi1AY2luZGV4IGZvcm1hbCBncmFtbWFyCi0KLUEgZm9ybWFsIGdyYW1tYXIgaXMgYSBtYXRoZW1hdGljYWwgY29uc3RydWN0LiAgVG8gZGVmaW5lIHRoZSBsYW5ndWFnZQotZm9yIEJpc29uLCB5b3UgbXVzdCB3cml0ZSBhIGZpbGUgZXhwcmVzc2luZyB0aGUgZ3JhbW1hciBpbiBCaXNvbiBzeW50YXg6Ci1hIEBkZm57Qmlzb24gZ3JhbW1hcn0gZmlsZS4gIEB4cmVme0dyYW1tYXIgRmlsZSwgLEJpc29uIEdyYW1tYXIgRmlsZXN9LgotCi1BIG5vbnRlcm1pbmFsIHN5bWJvbCBpbiB0aGUgZm9ybWFsIGdyYW1tYXIgaXMgcmVwcmVzZW50ZWQgaW4gQmlzb24gaW5wdXQKLWFzIGFuIGlkZW50aWZpZXIsIGxpa2UgYW4gaWRlbnRpZmllciBpbiBDQC4gIEJ5IGNvbnZlbnRpb24sIGl0IHNob3VsZCBiZQotaW4gbG93ZXIgY2FzZSwgc3VjaCBhcyBAY29kZXtleHByfSwgQGNvZGV7c3RtdH0gb3IgQGNvZGV7ZGVjbGFyYXRpb259LgotCi1UaGUgQmlzb24gcmVwcmVzZW50YXRpb24gZm9yIGEgdGVybWluYWwgc3ltYm9sIGlzIGFsc28gY2FsbGVkIGEgQGRmbnt0b2tlbgotdHlwZX0uICBUb2tlbiB0eXBlcyBhcyB3ZWxsIGNhbiBiZSByZXByZXNlbnRlZCBhcyBDLWxpa2UgaWRlbnRpZmllcnMuICBCeQotY29udmVudGlvbiwgdGhlc2UgaWRlbnRpZmllcnMgc2hvdWxkIGJlIHVwcGVyIGNhc2UgdG8gZGlzdGluZ3Vpc2ggdGhlbSBmcm9tCi1ub250ZXJtaW5hbHM6IGZvciBleGFtcGxlLCBAY29kZXtJTlRFR0VSfSwgQGNvZGV7SURFTlRJRklFUn0sIEBjb2Rle0lGfSBvcgotQGNvZGV7UkVUVVJOfS4gIEEgdGVybWluYWwgc3ltYm9sIHRoYXQgc3RhbmRzIGZvciBhIHBhcnRpY3VsYXIga2V5d29yZCBpbgotdGhlIGxhbmd1YWdlIHNob3VsZCBiZSBuYW1lZCBhZnRlciB0aGF0IGtleXdvcmQgY29udmVydGVkIHRvIHVwcGVyIGNhc2UuCi1UaGUgdGVybWluYWwgc3ltYm9sIEBjb2Rle2Vycm9yfSBpcyByZXNlcnZlZCBmb3IgZXJyb3IgcmVjb3ZlcnkuCi1AeHJlZntTeW1ib2xzfS4KLQotQSB0ZXJtaW5hbCBzeW1ib2wgY2FuIGFsc28gYmUgcmVwcmVzZW50ZWQgYXMgYSBjaGFyYWN0ZXIgbGl0ZXJhbCwganVzdCBsaWtlCi1hIEMgY2hhcmFjdGVyIGNvbnN0YW50LiAgWW91IHNob3VsZCBkbyB0aGlzIHdoZW5ldmVyIGEgdG9rZW4gaXMganVzdCBhCi1zaW5nbGUgY2hhcmFjdGVyIChwYXJlbnRoZXNpcywgcGx1cy1zaWduLCBldGMuKTogdXNlIHRoYXQgc2FtZSBjaGFyYWN0ZXIgaW4KLWEgbGl0ZXJhbCBhcyB0aGUgdGVybWluYWwgc3ltYm9sIGZvciB0aGF0IHRva2VuLgotCi1BIHRoaXJkIHdheSB0byByZXByZXNlbnQgYSB0ZXJtaW5hbCBzeW1ib2wgaXMgd2l0aCBhIEMgc3RyaW5nIGNvbnN0YW50Ci1jb250YWluaW5nIHNldmVyYWwgY2hhcmFjdGVycy4gIEB4cmVme1N5bWJvbHN9LCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLQotVGhlIGdyYW1tYXIgcnVsZXMgYWxzbyBoYXZlIGFuIGV4cHJlc3Npb24gaW4gQmlzb24gc3ludGF4LiAgRm9yIGV4YW1wbGUsCi1oZXJlIGlzIHRoZSBCaXNvbiBydWxlIGZvciBhIEMgQGNvZGV7cmV0dXJufSBzdGF0ZW1lbnQuICBUaGUgc2VtaWNvbG9uIGluCi1xdW90ZXMgaXMgYSBsaXRlcmFsIGNoYXJhY3RlciB0b2tlbiwgcmVwcmVzZW50aW5nIHBhcnQgb2YgdGhlIEMgc3ludGF4IGZvcgotdGhlIHN0YXRlbWVudDsgdGhlIG5ha2VkIHNlbWljb2xvbiwgYW5kIHRoZSBjb2xvbiwgYXJlIEJpc29uIHB1bmN0dWF0aW9uCi11c2VkIGluIGV2ZXJ5IHJ1bGUuCi0KLUBleGFtcGxlCi1zdG10OiAgIFJFVFVSTiBleHByICc7JwotICAgICAgICA7Ci1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci1AeHJlZntSdWxlcywgLFN5bnRheCBvZiBHcmFtbWFyIFJ1bGVzfS4KLQotQG5vZGUgU2VtYW50aWMgVmFsdWVzCi1Ac2VjdGlvbiBTZW1hbnRpYyBWYWx1ZXMKLUBjaW5kZXggc2VtYW50aWMgdmFsdWUKLUBjaW5kZXggdmFsdWUsIHNlbWFudGljCi0KLUEgZm9ybWFsIGdyYW1tYXIgc2VsZWN0cyB0b2tlbnMgb25seSBieSB0aGVpciBjbGFzc2lmaWNhdGlvbnM6IGZvciBleGFtcGxlLAotaWYgYSBydWxlIG1lbnRpb25zIHRoZSB0ZXJtaW5hbCBzeW1ib2wgYGludGVnZXIgY29uc3RhbnQnLCBpdCBtZWFucyB0aGF0Ci1AZW1waHthbnl9IGludGVnZXIgY29uc3RhbnQgaXMgZ3JhbW1hdGljYWxseSB2YWxpZCBpbiB0aGF0IHBvc2l0aW9uLiAgVGhlCi1wcmVjaXNlIHZhbHVlIG9mIHRoZSBjb25zdGFudCBpcyBpcnJlbGV2YW50IHRvIGhvdyB0byBwYXJzZSB0aGUgaW5wdXQ6IGlmCi1Ac2FtcHt4KzR9IGlzIGdyYW1tYXRpY2FsIHRoZW4gQHNhbXB7eCsxfSBvciBAc2FtcHt4KzM5ODl9IGlzIGVxdWFsbHkKLWdyYW1tYXRpY2FsLgotCi1CdXQgdGhlIHByZWNpc2UgdmFsdWUgaXMgdmVyeSBpbXBvcnRhbnQgZm9yIHdoYXQgdGhlIGlucHV0IG1lYW5zIG9uY2UgaXQgaXMKLXBhcnNlZC4gIEEgY29tcGlsZXIgaXMgdXNlbGVzcyBpZiBpdCBmYWlscyB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIDQsIDEgYW5kCi0zOTg5IGFzIGNvbnN0YW50cyBpbiB0aGUgcHJvZ3JhbSEgIFRoZXJlZm9yZSwgZWFjaCB0b2tlbiBpbiBhIEJpc29uIGdyYW1tYXIKLWhhcyBib3RoIGEgdG9rZW4gdHlwZSBhbmQgYSBAZGZue3NlbWFudGljIHZhbHVlfS4gIEB4cmVme1NlbWFudGljcywKLSxEZWZpbmluZyBMYW5ndWFnZSBTZW1hbnRpY3N9LAotZm9yIGRldGFpbHMuCi0KLVRoZSB0b2tlbiB0eXBlIGlzIGEgdGVybWluYWwgc3ltYm9sIGRlZmluZWQgaW4gdGhlIGdyYW1tYXIsIHN1Y2ggYXMKLUBjb2Rle0lOVEVHRVJ9LCBAY29kZXtJREVOVElGSUVSfSBvciBAY29kZXsnLCd9LiAgSXQgdGVsbHMgZXZlcnl0aGluZwoteW91IG5lZWQgdG8ga25vdyB0byBkZWNpZGUgd2hlcmUgdGhlIHRva2VuIG1heSB2YWxpZGx5IGFwcGVhciBhbmQgaG93IHRvCi1ncm91cCBpdCB3aXRoIG90aGVyIHRva2Vucy4gIFRoZSBncmFtbWFyIHJ1bGVzIGtub3cgbm90aGluZyBhYm91dCB0b2tlbnMKLWV4Y2VwdCB0aGVpciB0eXBlcy4KLQotVGhlIHNlbWFudGljIHZhbHVlIGhhcyBhbGwgdGhlIHJlc3Qgb2YgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZQotbWVhbmluZyBvZiB0aGUgdG9rZW4sIHN1Y2ggYXMgdGhlIHZhbHVlIG9mIGFuIGludGVnZXIsIG9yIHRoZSBuYW1lIG9mIGFuCi1pZGVudGlmaWVyLiAgKEEgdG9rZW4gc3VjaCBhcyBAY29kZXsnLCd9IHdoaWNoIGlzIGp1c3QgcHVuY3R1YXRpb24gZG9lc24ndAotbmVlZCB0byBoYXZlIGFueSBzZW1hbnRpYyB2YWx1ZS4pCi0KLUZvciBleGFtcGxlLCBhbiBpbnB1dCB0b2tlbiBtaWdodCBiZSBjbGFzc2lmaWVkIGFzIHRva2VuIHR5cGUKLUBjb2Rle0lOVEVHRVJ9IGFuZCBoYXZlIHRoZSBzZW1hbnRpYyB2YWx1ZSA0LiAgQW5vdGhlciBpbnB1dCB0b2tlbiBtaWdodAotaGF2ZSB0aGUgc2FtZSB0b2tlbiB0eXBlIEBjb2Rle0lOVEVHRVJ9IGJ1dCB2YWx1ZSAzOTg5LiAgV2hlbiBhIGdyYW1tYXIKLXJ1bGUgc2F5cyB0aGF0IEBjb2Rle0lOVEVHRVJ9IGlzIGFsbG93ZWQsIGVpdGhlciBvZiB0aGVzZSB0b2tlbnMgaXMKLWFjY2VwdGFibGUgYmVjYXVzZSBlYWNoIGlzIGFuIEBjb2Rle0lOVEVHRVJ9LiAgV2hlbiB0aGUgcGFyc2VyIGFjY2VwdHMgdGhlCi10b2tlbiwgaXQga2VlcHMgdHJhY2sgb2YgdGhlIHRva2VuJ3Mgc2VtYW50aWMgdmFsdWUuCi0KLUVhY2ggZ3JvdXBpbmcgY2FuIGFsc28gaGF2ZSBhIHNlbWFudGljIHZhbHVlIGFzIHdlbGwgYXMgaXRzIG5vbnRlcm1pbmFsCi1zeW1ib2wuICBGb3IgZXhhbXBsZSwgaW4gYSBjYWxjdWxhdG9yLCBhbiBleHByZXNzaW9uIHR5cGljYWxseSBoYXMgYQotc2VtYW50aWMgdmFsdWUgdGhhdCBpcyBhIG51bWJlci4gIEluIGEgY29tcGlsZXIgZm9yIGEgcHJvZ3JhbW1pbmcKLWxhbmd1YWdlLCBhbiBleHByZXNzaW9uIHR5cGljYWxseSBoYXMgYSBzZW1hbnRpYyB2YWx1ZSB0aGF0IGlzIGEgdHJlZQotc3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlIG1lYW5pbmcgb2YgdGhlIGV4cHJlc3Npb24uCi0KLUBub2RlIFNlbWFudGljIEFjdGlvbnMKLUBzZWN0aW9uIFNlbWFudGljIEFjdGlvbnMKLUBjaW5kZXggc2VtYW50aWMgYWN0aW9ucwotQGNpbmRleCBhY3Rpb25zLCBzZW1hbnRpYwotCi1JbiBvcmRlciB0byBiZSB1c2VmdWwsIGEgcHJvZ3JhbSBtdXN0IGRvIG1vcmUgdGhhbiBwYXJzZSBpbnB1dDsgaXQgbXVzdAotYWxzbyBwcm9kdWNlIHNvbWUgb3V0cHV0IGJhc2VkIG9uIHRoZSBpbnB1dC4gIEluIGEgQmlzb24gZ3JhbW1hciwgYSBncmFtbWFyCi1ydWxlIGNhbiBoYXZlIGFuIEBkZm57YWN0aW9ufSBtYWRlIHVwIG9mIEMgc3RhdGVtZW50cy4gIEVhY2ggdGltZSB0aGUKLXBhcnNlciByZWNvZ25pemVzIGEgbWF0Y2ggZm9yIHRoYXQgcnVsZSwgdGhlIGFjdGlvbiBpcyBleGVjdXRlZC4KLUB4cmVme0FjdGlvbnN9LgotCi1Nb3N0IG9mIHRoZSB0aW1lLCB0aGUgcHVycG9zZSBvZiBhbiBhY3Rpb24gaXMgdG8gY29tcHV0ZSB0aGUgc2VtYW50aWMgdmFsdWUKLW9mIHRoZSB3aG9sZSBjb25zdHJ1Y3QgZnJvbSB0aGUgc2VtYW50aWMgdmFsdWVzIG9mIGl0cyBwYXJ0cy4gIEZvciBleGFtcGxlLAotc3VwcG9zZSB3ZSBoYXZlIGEgcnVsZSB3aGljaCBzYXlzIGFuIGV4cHJlc3Npb24gY2FuIGJlIHRoZSBzdW0gb2YgdHdvCi1leHByZXNzaW9ucy4gIFdoZW4gdGhlIHBhcnNlciByZWNvZ25pemVzIHN1Y2ggYSBzdW0sIGVhY2ggb2YgdGhlCi1zdWJleHByZXNzaW9ucyBoYXMgYSBzZW1hbnRpYyB2YWx1ZSB3aGljaCBkZXNjcmliZXMgaG93IGl0IHdhcyBidWlsdCB1cC4KLVRoZSBhY3Rpb24gZm9yIHRoaXMgcnVsZSBzaG91bGQgY3JlYXRlIGEgc2ltaWxhciBzb3J0IG9mIHZhbHVlIGZvciB0aGUKLW5ld2x5IHJlY29nbml6ZWQgbGFyZ2VyIGV4cHJlc3Npb24uCi0KLUZvciBleGFtcGxlLCBoZXJlIGlzIGEgcnVsZSB0aGF0IHNheXMgYW4gZXhwcmVzc2lvbiBjYW4gYmUgdGhlIHN1bSBvZgotdHdvIHN1YmV4cHJlc3Npb25zOgotCi1AZXhhbXBsZQotZXhwcjogZXhwciAnKycgZXhwciAgIEB7ICQkID0gJDEgKyAkMzsgQH0KLSAgICAgICAgOwotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotVGhlIGFjdGlvbiBzYXlzIGhvdyB0byBwcm9kdWNlIHRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgc3VtIGV4cHJlc3Npb24KLWZyb20gdGhlIHZhbHVlcyBvZiB0aGUgdHdvIHN1YmV4cHJlc3Npb25zLgotCi1Abm9kZSBHTFIgUGFyc2VycwotQHNlY3Rpb24gV3JpdGluZyBAYWNyb255bXtHTFJ9IFBhcnNlcnMKLUBjaW5kZXggQGFjcm9ueW17R0xSfSBwYXJzaW5nCi1AY2luZGV4IGdlbmVyYWxpemVkIEBhY3Jvbnlte0xSfSAoQGFjcm9ueW17R0xSfSkgcGFyc2luZwotQGZpbmRleCAlZ2xyLXBhcnNlcgotQGNpbmRleCBjb25mbGljdHMKLUBjaW5kZXggc2hpZnQvcmVkdWNlIGNvbmZsaWN0cwotQGNpbmRleCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0cwotCi1JbiBzb21lIGdyYW1tYXJzLCBCaXNvbidzIHN0YW5kYXJkCi1AYWNyb255bXtMQUxSfSgxKSBwYXJzaW5nIGFsZ29yaXRobSBjYW5ub3QgZGVjaWRlIHdoZXRoZXIgdG8gYXBwbHkgYQotY2VydGFpbiBncmFtbWFyIHJ1bGUgYXQgYSBnaXZlbiBwb2ludC4gIFRoYXQgaXMsIGl0IG1heSBub3QgYmUgYWJsZSB0bwotZGVjaWRlIChvbiB0aGUgYmFzaXMgb2YgdGhlIGlucHV0IHJlYWQgc28gZmFyKSB3aGljaCBvZiB0d28gcG9zc2libGUKLXJlZHVjdGlvbnMgKGFwcGxpY2F0aW9ucyBvZiBhIGdyYW1tYXIgcnVsZSkgYXBwbGllcywgb3Igd2hldGhlciB0byBhcHBseQotYSByZWR1Y3Rpb24gb3IgcmVhZCBtb3JlIG9mIHRoZSBpbnB1dCBhbmQgYXBwbHkgYSByZWR1Y3Rpb24gbGF0ZXIgaW4gdGhlCi1pbnB1dC4gIFRoZXNlIGFyZSBrbm93biByZXNwZWN0aXZlbHkgYXMgQGRmbntyZWR1Y2UvcmVkdWNlfSBjb25mbGljdHMKLShAcHhyZWZ7UmVkdWNlL1JlZHVjZX0pLCBhbmQgQGRmbntzaGlmdC9yZWR1Y2V9IGNvbmZsaWN0cwotKEBweHJlZntTaGlmdC9SZWR1Y2V9KS4KLQotVG8gdXNlIGEgZ3JhbW1hciB0aGF0IGlzIG5vdCBlYXNpbHkgbW9kaWZpZWQgdG8gYmUgQGFjcm9ueW17TEFMUn0oMSksIGEKLW1vcmUgZ2VuZXJhbCBwYXJzaW5nIGFsZ29yaXRobSBpcyBzb21ldGltZXMgbmVjZXNzYXJ5LiAgSWYgeW91IGluY2x1ZGUKLUBjb2RleyVnbHItcGFyc2VyfSBhbW9uZyB0aGUgQmlzb24gZGVjbGFyYXRpb25zIGluIHlvdXIgZmlsZQotKEBweHJlZntHcmFtbWFyIE91dGxpbmV9KSwgdGhlIHJlc3VsdCBpcyBhIEdlbmVyYWxpemVkIEBhY3Jvbnlte0xSfQotKEBhY3Jvbnlte0dMUn0pIHBhcnNlci4gIFRoZXNlIHBhcnNlcnMgaGFuZGxlIEJpc29uIGdyYW1tYXJzIHRoYXQKLWNvbnRhaW4gbm8gdW5yZXNvbHZlZCBjb25mbGljdHMgKGkuZS4sIGFmdGVyIGFwcGx5aW5nIHByZWNlZGVuY2UKLWRlY2xhcmF0aW9ucykgaWRlbnRpY2FsbHkgdG8gQGFjcm9ueW17TEFMUn0oMSkgcGFyc2Vycy4gIEhvd2V2ZXIsIHdoZW4KLWZhY2VkIHdpdGggdW5yZXNvbHZlZCBzaGlmdC9yZWR1Y2UgYW5kIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3RzLAotQGFjcm9ueW17R0xSfSBwYXJzZXJzIHVzZSB0aGUgc2ltcGxlIGV4cGVkaWVudCBvZiBkb2luZyBib3RoLAotZWZmZWN0aXZlbHkgY2xvbmluZyB0aGUgcGFyc2VyIHRvIGZvbGxvdyBib3RoIHBvc3NpYmlsaXRpZXMuICBFYWNoIG9mCi10aGUgcmVzdWx0aW5nIHBhcnNlcnMgY2FuIGFnYWluIHNwbGl0LCBzbyB0aGF0IGF0IGFueSBnaXZlbiB0aW1lLCB0aGVyZQotY2FuIGJlIGFueSBudW1iZXIgb2YgcG9zc2libGUgcGFyc2VzIGJlaW5nIGV4cGxvcmVkLiAgVGhlIHBhcnNlcnMKLXByb2NlZWQgaW4gbG9ja3N0ZXA7IHRoYXQgaXMsIGFsbCBvZiB0aGVtIGNvbnN1bWUgKHNoaWZ0KSBhIGdpdmVuIGlucHV0Ci1zeW1ib2wgYmVmb3JlIGFueSBvZiB0aGVtIHByb2NlZWQgdG8gdGhlIG5leHQuICBFYWNoIG9mIHRoZSBjbG9uZWQKLXBhcnNlcnMgZXZlbnR1YWxseSBtZWV0cyBvbmUgb2YgdHdvIHBvc3NpYmxlIGZhdGVzOiBlaXRoZXIgaXQgcnVucyBpbnRvCi1hIHBhcnNpbmcgZXJyb3IsIGluIHdoaWNoIGNhc2UgaXQgc2ltcGx5IHZhbmlzaGVzLCBvciBpdCBtZXJnZXMgd2l0aAotYW5vdGhlciBwYXJzZXIsIGJlY2F1c2UgdGhlIHR3byBvZiB0aGVtIGhhdmUgcmVkdWNlZCB0aGUgaW5wdXQgdG8gYW4KLWlkZW50aWNhbCBzZXQgb2Ygc3ltYm9scy4KLQotRHVyaW5nIHRoZSB0aW1lIHRoYXQgdGhlcmUgYXJlIG11bHRpcGxlIHBhcnNlcnMsIHNlbWFudGljIGFjdGlvbnMgYXJlCi1yZWNvcmRlZCwgYnV0IG5vdCBwZXJmb3JtZWQuICBXaGVuIGEgcGFyc2VyIGRpc2FwcGVhcnMsIGl0cyByZWNvcmRlZAotc2VtYW50aWMgYWN0aW9ucyBkaXNhcHBlYXIgYXMgd2VsbCwgYW5kIGFyZSBuZXZlciBwZXJmb3JtZWQuICBXaGVuIGEKLXJlZHVjdGlvbiBtYWtlcyB0d28gcGFyc2VycyBpZGVudGljYWwsIGNhdXNpbmcgdGhlbSB0byBtZXJnZSwgQmlzb24KLXJlY29yZHMgYm90aCBzZXRzIG9mIHNlbWFudGljIGFjdGlvbnMuICBXaGVuZXZlciB0aGUgbGFzdCB0d28gcGFyc2VycwotbWVyZ2UsIHJldmVydGluZyB0byB0aGUgc2luZ2xlLXBhcnNlciBjYXNlLCBCaXNvbiByZXNvbHZlcyBhbGwgdGhlCi1vdXRzdGFuZGluZyBhY3Rpb25zIGVpdGhlciBieSBwcmVjZWRlbmNlcyBnaXZlbiB0byB0aGUgZ3JhbW1hciBydWxlcwotaW52b2x2ZWQsIG9yIGJ5IHBlcmZvcm1pbmcgYm90aCBhY3Rpb25zLCBhbmQgdGhlbiBjYWxsaW5nIGEgZGVzaWduYXRlZAotdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9uIHRoZSByZXN1bHRpbmcgdmFsdWVzIHRvIHByb2R1Y2UgYW4gYXJiaXRyYXJ5Ci1tZXJnZWQgcmVzdWx0LgotCi1AbWVudQotKiBTaW1wbGUgR0xSIFBhcnNlcnM6OiAgICAgIFVzaW5nIEBhY3Jvbnlte0dMUn0gcGFyc2VycyBvbiB1bmFtYmlndW91cyBncmFtbWFycy4KLSogTWVyZ2luZyBHTFIgUGFyc2VzOjogICAgICBVc2luZyBAYWNyb255bXtHTFJ9IHBhcnNlcnMgdG8gcmVzb2x2ZSBhbWJpZ3VpdGllcy4KLSogR0xSIFNlbWFudGljIEFjdGlvbnM6OiAgICBEZWZlcnJlZCBzZW1hbnRpYyBhY3Rpb25zIGhhdmUgc3BlY2lhbCBjb25jZXJucy4KLSogQ29tcGlsZXIgUmVxdWlyZW1lbnRzOjogICBAYWNyb255bXtHTFJ9IHBhcnNlcnMgcmVxdWlyZSBhIG1vZGVybiBDIGNvbXBpbGVyLgotQGVuZCBtZW51Ci0KLUBub2RlIFNpbXBsZSBHTFIgUGFyc2VycwotQHN1YnNlY3Rpb24gVXNpbmcgQGFjcm9ueW17R0xSfSBvbiBVbmFtYmlndW91cyBHcmFtbWFycwotQGNpbmRleCBAYWNyb255bXtHTFJ9IHBhcnNpbmcsIHVuYW1iaWd1b3VzIGdyYW1tYXJzCi1AY2luZGV4IGdlbmVyYWxpemVkIEBhY3Jvbnlte0xSfSAoQGFjcm9ueW17R0xSfSkgcGFyc2luZywgdW5hbWJpZ3VvdXMgZ3JhbW1hcnMKLUBmaW5kZXggJWdsci1wYXJzZXIKLUBmaW5kZXggJWV4cGVjdC1ycgotQGNpbmRleCBjb25mbGljdHMKLUBjaW5kZXggcmVkdWNlL3JlZHVjZSBjb25mbGljdHMKLUBjaW5kZXggc2hpZnQvcmVkdWNlIGNvbmZsaWN0cwotCi1JbiB0aGUgc2ltcGxlc3QgY2FzZXMsIHlvdSBjYW4gdXNlIHRoZSBAYWNyb255bXtHTFJ9IGFsZ29yaXRobQotdG8gcGFyc2UgZ3JhbW1hcnMgdGhhdCBhcmUgdW5hbWJpZ3VvdXMsIGJ1dCBmYWlsIHRvIGJlIEBhY3Jvbnlte0xBTFJ9KDEpLgotU3VjaCBncmFtbWFycyB0eXBpY2FsbHkgcmVxdWlyZSBtb3JlIHRoYW4gb25lIHN5bWJvbCBvZiBsb29rLWFoZWFkLAotb3IgKGluIHJhcmUgY2FzZXMpIGZhbGwgaW50byB0aGUgY2F0ZWdvcnkgb2YgZ3JhbW1hcnMgaW4gd2hpY2ggdGhlCi1AYWNyb255bXtMQUxSfSgxKSBhbGdvcml0aG0gdGhyb3dzIGF3YXkgdG9vIG11Y2ggaW5mb3JtYXRpb24gKHRoZXkgYXJlIGluCi1AYWNyb255bXtMUn0oMSksIGJ1dCBub3QgQGFjcm9ueW17TEFMUn0oMSksIEByZWZ7TXlzdGVyeSBDb25mbGljdHN9KS4KLQotQ29uc2lkZXIgYSBwcm9ibGVtIHRoYXQKLWFyaXNlcyBpbiB0aGUgZGVjbGFyYXRpb24gb2YgZW51bWVyYXRlZCBhbmQgc3VicmFuZ2UgdHlwZXMgaW4gdGhlCi1wcm9ncmFtbWluZyBsYW5ndWFnZSBQYXNjYWwuICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzOgotCi1AZXhhbXBsZQotdHlwZSBzdWJyYW5nZSA9IGxvIC4uIGhpOwotdHlwZSBlbnVtID0gKGEsIGIsIGMpOwotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotVGhlIG9yaWdpbmFsIGxhbmd1YWdlIHN0YW5kYXJkIGFsbG93cyBvbmx5IG51bWVyaWMKLWxpdGVyYWxzIGFuZCBjb25zdGFudCBpZGVudGlmaWVycyBmb3IgdGhlIHN1YnJhbmdlIGJvdW5kcyAoQHNhbXB7bG99Ci1hbmQgQHNhbXB7aGl9KSwgYnV0IEV4dGVuZGVkIFBhc2NhbCAoQGFjcm9ueW17SVNPfS9AYWNyb255bXtJRUN9Ci0xMDIwNikgYW5kIG1hbnkgb3RoZXIKLVBhc2NhbCBpbXBsZW1lbnRhdGlvbnMgYWxsb3cgYXJiaXRyYXJ5IGV4cHJlc3Npb25zIHRoZXJlLiAgVGhpcyBnaXZlcwotcmlzZSB0byB0aGUgZm9sbG93aW5nIHNpdHVhdGlvbiwgY29udGFpbmluZyBhIHN1cGVyZmx1b3VzIHBhaXIgb2YKLXBhcmVudGhlc2VzOgotCi1AZXhhbXBsZQotdHlwZSBzdWJyYW5nZSA9IChhKSAuLiBiOwotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotQ29tcGFyZSB0aGlzIHRvIHRoZSBmb2xsb3dpbmcgZGVjbGFyYXRpb24gb2YgYW4gZW51bWVyYXRlZAotdHlwZSB3aXRoIG9ubHkgb25lIHZhbHVlOgotCi1AZXhhbXBsZQotdHlwZSBlbnVtID0gKGEpOwotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotKFRoZXNlIGRlY2xhcmF0aW9ucyBhcmUgY29udHJpdmVkLCBidXQgdGhleSBhcmUgc3ludGFjdGljYWxseQotdmFsaWQsIGFuZCBtb3JlLWNvbXBsaWNhdGVkIGNhc2VzIGNhbiBjb21lIHVwIGluIHByYWN0aWNhbCBwcm9ncmFtcy4pCi0KLVRoZXNlIHR3byBkZWNsYXJhdGlvbnMgbG9vayBpZGVudGljYWwgdW50aWwgdGhlIEBzYW1wey4ufSB0b2tlbi4KLVdpdGggbm9ybWFsIEBhY3Jvbnlte0xBTFJ9KDEpIG9uZS10b2tlbiBsb29rLWFoZWFkIGl0IGlzIG5vdAotcG9zc2libGUgdG8gZGVjaWRlIGJldHdlZW4gdGhlIHR3byBmb3JtcyB3aGVuIHRoZSBpZGVudGlmaWVyCi1Ac2FtcHthfSBpcyBwYXJzZWQuICBJdCBpcywgaG93ZXZlciwgZGVzaXJhYmxlCi1mb3IgYSBwYXJzZXIgdG8gZGVjaWRlIHRoaXMsIHNpbmNlIGluIHRoZSBsYXR0ZXIgY2FzZQotQHNhbXB7YX0gbXVzdCBiZWNvbWUgYSBuZXcgaWRlbnRpZmllciB0byByZXByZXNlbnQgdGhlIGVudW1lcmF0aW9uCi12YWx1ZSwgd2hpbGUgaW4gdGhlIGZvcm1lciBjYXNlIEBzYW1we2F9IG11c3QgYmUgZXZhbHVhdGVkIHdpdGggaXRzCi1jdXJyZW50IG1lYW5pbmcsIHdoaWNoIG1heSBiZSBhIGNvbnN0YW50IG9yIGV2ZW4gYSBmdW5jdGlvbiBjYWxsLgotCi1Zb3UgY291bGQgcGFyc2UgQHNhbXB7KGEpfSBhcyBhbiBgYHVuc3BlY2lmaWVkIGlkZW50aWZpZXIgaW4gcGFyZW50aGVzZXMnJywKLXRvIGJlIHJlc29sdmVkIGxhdGVyLCBidXQgdGhpcyB0eXBpY2FsbHkgcmVxdWlyZXMgc3Vic3RhbnRpYWwKLWNvbnRvcnRpb25zIGluIGJvdGggc2VtYW50aWMgYWN0aW9ucyBhbmQgbGFyZ2UgcGFydHMgb2YgdGhlCi1ncmFtbWFyLCB3aGVyZSB0aGUgcGFyZW50aGVzZXMgYXJlIG5lc3RlZCBpbiB0aGUgcmVjdXJzaXZlIHJ1bGVzIGZvcgotZXhwcmVzc2lvbnMuCi0KLVlvdSBtaWdodCB0aGluayBvZiB1c2luZyB0aGUgbGV4ZXIgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgdHdvCi1mb3JtcyBieSByZXR1cm5pbmcgZGlmZmVyZW50IHRva2VucyBmb3IgY3VycmVudGx5IGRlZmluZWQgYW5kCi11bmRlZmluZWQgaWRlbnRpZmllcnMuICBCdXQgaWYgdGhlc2UgZGVjbGFyYXRpb25zIG9jY3VyIGluIGEgbG9jYWwKLXNjb3BlLCBhbmQgQHNhbXB7YX0gaXMgZGVmaW5lZCBpbiBhbiBvdXRlciBzY29wZSwgdGhlbiBib3RoIGZvcm1zCi1hcmUgcG9zc2libGUtLS1laXRoZXIgbG9jYWxseSByZWRlZmluaW5nIEBzYW1we2F9LCBvciB1c2luZyB0aGUKLXZhbHVlIG9mIEBzYW1we2F9IGZyb20gdGhlIG91dGVyIHNjb3BlLiAgU28gdGhpcyBhcHByb2FjaCBjYW5ub3QKLXdvcmsuCi0KLUEgc2ltcGxlIHNvbHV0aW9uIHRvIHRoaXMgcHJvYmxlbSBpcyB0byBkZWNsYXJlIHRoZSBwYXJzZXIgdG8KLXVzZSB0aGUgQGFjcm9ueW17R0xSfSBhbGdvcml0aG0uCi1XaGVuIHRoZSBAYWNyb255bXtHTFJ9IHBhcnNlciByZWFjaGVzIHRoZSBjcml0aWNhbCBzdGF0ZSwgaXQKLW1lcmVseSBzcGxpdHMgaW50byB0d28gYnJhbmNoZXMgYW5kIHB1cnN1ZXMgYm90aCBzeW50YXggcnVsZXMKLXNpbXVsdGFuZW91c2x5LiAgU29vbmVyIG9yIGxhdGVyLCBvbmUgb2YgdGhlbSBydW5zIGludG8gYSBwYXJzaW5nCi1lcnJvci4gIElmIHRoZXJlIGlzIGEgQHNhbXB7Li59IHRva2VuIGJlZm9yZSB0aGUgbmV4dAotQHNhbXB7O30sIHRoZSBydWxlIGZvciBlbnVtZXJhdGVkIHR5cGVzIGZhaWxzIHNpbmNlIGl0IGNhbm5vdAotYWNjZXB0IEBzYW1wey4ufSBhbnl3aGVyZTsgb3RoZXJ3aXNlLCB0aGUgc3VicmFuZ2UgdHlwZSBydWxlCi1mYWlscyBzaW5jZSBpdCByZXF1aXJlcyBhIEBzYW1wey4ufSB0b2tlbi4gIFNvIG9uZSBvZiB0aGUgYnJhbmNoZXMKLWZhaWxzIHNpbGVudGx5LCBhbmQgdGhlIG90aGVyIG9uZSBjb250aW51ZXMgbm9ybWFsbHksIHBlcmZvcm1pbmcKLWFsbCB0aGUgaW50ZXJtZWRpYXRlIGFjdGlvbnMgdGhhdCB3ZXJlIHBvc3Rwb25lZCBkdXJpbmcgdGhlIHNwbGl0LgotCi1JZiB0aGUgaW5wdXQgaXMgc3ludGFjdGljYWxseSBpbmNvcnJlY3QsIGJvdGggYnJhbmNoZXMgZmFpbCBhbmQgdGhlIHBhcnNlcgotcmVwb3J0cyBhIHN5bnRheCBlcnJvciBhcyB1c3VhbC4KLQotVGhlIGVmZmVjdCBvZiBhbGwgdGhpcyBpcyB0aGF0IHRoZSBwYXJzZXIgc2VlbXMgdG8gYGBndWVzcycnIHRoZQotY29ycmVjdCBicmFuY2ggdG8gdGFrZSwgb3IgaW4gb3RoZXIgd29yZHMsIGl0IHNlZW1zIHRvIHVzZSBtb3JlCi1sb29rLWFoZWFkIHRoYW4gdGhlIHVuZGVybHlpbmcgQGFjcm9ueW17TEFMUn0oMSkgYWxnb3JpdGhtIGFjdHVhbGx5IGFsbG93cwotZm9yLiAgSW4gdGhpcyBleGFtcGxlLCBAYWNyb255bXtMQUxSfSgyKSB3b3VsZCBzdWZmaWNlLCBidXQgYWxzbyBzb21lIGNhc2VzCi10aGF0IGFyZSBub3QgQGFjcm9ueW17TEFMUn0oQG1hdGh7a30pIGZvciBhbnkgQG1hdGh7a30gY2FuIGJlIGhhbmRsZWQgdGhpcyB3YXkuCi0KLUluIGdlbmVyYWwsIGEgQGFjcm9ueW17R0xSfSBwYXJzZXIgY2FuIHRha2UgcXVhZHJhdGljIG9yIGN1YmljIHdvcnN0LWNhc2UgdGltZSwKLWFuZCB0aGUgY3VycmVudCBCaXNvbiBwYXJzZXIgZXZlbiB0YWtlcyBleHBvbmVudGlhbCB0aW1lIGFuZCBzcGFjZQotZm9yIHNvbWUgZ3JhbW1hcnMuICBJbiBwcmFjdGljZSwgdGhpcyByYXJlbHkgaGFwcGVucywgYW5kIGZvciBtYW55Ci1ncmFtbWFycyBpdCBpcyBwb3NzaWJsZSB0byBwcm92ZSB0aGF0IGl0IGNhbm5vdCBoYXBwZW4uCi1UaGUgcHJlc2VudCBleGFtcGxlIGNvbnRhaW5zIG9ubHkgb25lIGNvbmZsaWN0IGJldHdlZW4gdHdvCi1ydWxlcywgYW5kIHRoZSB0eXBlLWRlY2xhcmF0aW9uIGNvbnRleHQgY29udGFpbmluZyB0aGUgY29uZmxpY3QKLWNhbm5vdCBiZSBuZXN0ZWQuICBTbyB0aGUgbnVtYmVyIG9mCi1icmFuY2hlcyB0aGF0IGNhbiBleGlzdCBhdCBhbnkgdGltZSBpcyBsaW1pdGVkIGJ5IHRoZSBjb25zdGFudCAyLAotYW5kIHRoZSBwYXJzaW5nIHRpbWUgaXMgc3RpbGwgbGluZWFyLgotCi1IZXJlIGlzIGEgQmlzb24gZ3JhbW1hciBjb3JyZXNwb25kaW5nIHRvIHRoZSBleGFtcGxlIGFib3ZlLiAgSXQKLXBhcnNlcyBhIHZhc3RseSBzaW1wbGlmaWVkIGZvcm0gb2YgUGFzY2FsIHR5cGUgZGVjbGFyYXRpb25zLgotCi1AZXhhbXBsZQotJXRva2VuIFRZUEUgRE9URE9UIElECi0KLUBncm91cAotJWxlZnQgJysnICctJwotJWxlZnQgJyonICcvJwotQGVuZCBncm91cAotCi0lJQotCi1AZ3JvdXAKLXR5cGVfZGVjbCA6IFRZUEUgSUQgJz0nIHR5cGUgJzsnCi0gICAgIDsKLUBlbmQgZ3JvdXAKLQotQGdyb3VwCi10eXBlIDogJygnIGlkX2xpc3QgJyknCi0gICAgIHwgZXhwciBET1RET1QgZXhwcgotICAgICA7Ci1AZW5kIGdyb3VwCi0KLUBncm91cAotaWRfbGlzdCA6IElECi0gICAgIHwgaWRfbGlzdCAnLCcgSUQKLSAgICAgOwotQGVuZCBncm91cAotCi1AZ3JvdXAKLWV4cHIgOiAnKCcgZXhwciAnKScKLSAgICAgfCBleHByICcrJyBleHByCi0gICAgIHwgZXhwciAnLScgZXhwcgotICAgICB8IGV4cHIgJyonIGV4cHIKLSAgICAgfCBleHByICcvJyBleHByCi0gICAgIHwgSUQKLSAgICAgOwotQGVuZCBncm91cAotQGVuZCBleGFtcGxlCi0KLVdoZW4gdXNlZCBhcyBhIG5vcm1hbCBAYWNyb255bXtMQUxSfSgxKSBncmFtbWFyLCBCaXNvbiBjb3JyZWN0bHkgY29tcGxhaW5zCi1hYm91dCBvbmUgcmVkdWNlL3JlZHVjZSBjb25mbGljdC4gIEluIHRoZSBjb25mbGljdGluZyBzaXR1YXRpb24gdGhlCi1wYXJzZXIgY2hvb3NlcyBvbmUgb2YgdGhlIGFsdGVybmF0aXZlcywgYXJiaXRyYXJpbHkgdGhlIG9uZQotZGVjbGFyZWQgZmlyc3QuICBUaGVyZWZvcmUgdGhlIGZvbGxvd2luZyBjb3JyZWN0IGlucHV0IGlzIG5vdAotcmVjb2duaXplZDoKLQotQGV4YW1wbGUKLXR5cGUgdCA9IChhKSAuLiBiOwotQGVuZCBleGFtcGxlCi0KLVRoZSBwYXJzZXIgY2FuIGJlIHR1cm5lZCBpbnRvIGEgQGFjcm9ueW17R0xSfSBwYXJzZXIsIHdoaWxlIGFsc28gdGVsbGluZyBCaXNvbgotdG8gYmUgc2lsZW50IGFib3V0IHRoZSBvbmUga25vd24gcmVkdWNlL3JlZHVjZSBjb25mbGljdCwgYnkKLWFkZGluZyB0aGVzZSB0d28gZGVjbGFyYXRpb25zIHRvIHRoZSBCaXNvbiBpbnB1dCBmaWxlIChiZWZvcmUgdGhlIGZpcnN0Ci1Ac2FtcHslJX0pOgotCi1AZXhhbXBsZQotJWdsci1wYXJzZXIKLSVleHBlY3QtcnIgMQotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotTm8gY2hhbmdlIGluIHRoZSBncmFtbWFyIGl0c2VsZiBpcyByZXF1aXJlZC4gIE5vdyB0aGUKLXBhcnNlciByZWNvZ25pemVzIGFsbCB2YWxpZCBkZWNsYXJhdGlvbnMsIGFjY29yZGluZyB0byB0aGUKLWxpbWl0ZWQgc3ludGF4IGFib3ZlLCB0cmFuc3BhcmVudGx5LiAgSW4gZmFjdCwgdGhlIHVzZXIgZG9lcyBub3QgZXZlbgotbm90aWNlIHdoZW4gdGhlIHBhcnNlciBzcGxpdHMuCi0KLVNvIGhlcmUgd2UgaGF2ZSBhIGNhc2Ugd2hlcmUgd2UgY2FuIHVzZSB0aGUgYmVuZWZpdHMgb2YgQGFjcm9ueW17R0xSfSwKLWFsbW9zdCB3aXRob3V0IGRpc2FkdmFudGFnZXMuICBFdmVuIGluIHNpbXBsZSBjYXNlcyBsaWtlIHRoaXMsIGhvd2V2ZXIsCi10aGVyZSBhcmUgYXQgbGVhc3QgdHdvIHBvdGVudGlhbCBwcm9ibGVtcyB0byBiZXdhcmUuICBGaXJzdCwgYWx3YXlzCi1hbmFseXplIHRoZSBjb25mbGljdHMgcmVwb3J0ZWQgYnkgQmlzb24gdG8gbWFrZSBzdXJlIHRoYXQgQGFjcm9ueW17R0xSfQotc3BsaXR0aW5nIGlzIG9ubHkgZG9uZSB3aGVyZSBpdCBpcyBpbnRlbmRlZC4gIEEgQGFjcm9ueW17R0xSfSBwYXJzZXIKLXNwbGl0dGluZyBpbmFkdmVydGVudGx5IG1heSBjYXVzZSBwcm9ibGVtcyBsZXNzIG9idmlvdXMgdGhhbiBhbgotQGFjcm9ueW17TEFMUn0gcGFyc2VyIHN0YXRpY2FsbHkgY2hvb3NpbmcgdGhlIHdyb25nIGFsdGVybmF0aXZlIGluIGEKLWNvbmZsaWN0LiAgU2Vjb25kLCBjb25zaWRlciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgbGV4ZXIgKEBweHJlZntTZW1hbnRpYwotVG9rZW5zfSkgd2l0aCBncmVhdCBjYXJlLiAgU2luY2UgYSBzcGxpdCBwYXJzZXIgY29uc3VtZXMgdG9rZW5zIHdpdGhvdXQKLXBlcmZvcm1pbmcgYW55IGFjdGlvbnMgZHVyaW5nIHRoZSBzcGxpdCwgdGhlIGxleGVyIGNhbm5vdCBvYnRhaW4KLWluZm9ybWF0aW9uIHZpYSBwYXJzZXIgYWN0aW9ucy4gIFNvbWUgY2FzZXMgb2YgbGV4ZXIgaW50ZXJhY3Rpb25zIGNhbiBiZQotZWxpbWluYXRlZCBieSB1c2luZyBAYWNyb255bXtHTFJ9IHRvIHNoaWZ0IHRoZSBjb21wbGljYXRpb25zIGZyb20gdGhlCi1sZXhlciB0byB0aGUgcGFyc2VyLiAgWW91IG11c3QgY2hlY2sgdGhlIHJlbWFpbmluZyBjYXNlcyBmb3IKLWNvcnJlY3RuZXNzLgotCi1JbiBvdXIgZXhhbXBsZSwgaXQgd291bGQgYmUgc2FmZSBmb3IgdGhlIGxleGVyIHRvIHJldHVybiB0b2tlbnMgYmFzZWQgb24KLXRoZWlyIGN1cnJlbnQgbWVhbmluZ3MgaW4gc29tZSBzeW1ib2wgdGFibGUsIGJlY2F1c2Ugbm8gbmV3IHN5bWJvbHMgYXJlCi1kZWZpbmVkIGluIHRoZSBtaWRkbGUgb2YgYSB0eXBlIGRlY2xhcmF0aW9uLiAgVGhvdWdoIGl0IGlzIHBvc3NpYmxlIGZvcgotYSBwYXJzZXIgdG8gZGVmaW5lIHRoZSBlbnVtZXJhdGlvbiBjb25zdGFudHMgYXMgdGhleSBhcmUgcGFyc2VkLCBiZWZvcmUKLXRoZSB0eXBlIGRlY2xhcmF0aW9uIGlzIGNvbXBsZXRlZCwgaXQgYWN0dWFsbHkgbWFrZXMgbm8gZGlmZmVyZW5jZSBzaW5jZQotdGhleSBjYW5ub3QgYmUgdXNlZCB3aXRoaW4gdGhlIHNhbWUgZW51bWVyYXRlZCB0eXBlIGRlY2xhcmF0aW9uLgotCi1Abm9kZSBNZXJnaW5nIEdMUiBQYXJzZXMKLUBzdWJzZWN0aW9uIFVzaW5nIEBhY3Jvbnlte0dMUn0gdG8gUmVzb2x2ZSBBbWJpZ3VpdGllcwotQGNpbmRleCBAYWNyb255bXtHTFJ9IHBhcnNpbmcsIGFtYmlndW91cyBncmFtbWFycwotQGNpbmRleCBnZW5lcmFsaXplZCBAYWNyb255bXtMUn0gKEBhY3Jvbnlte0dMUn0pIHBhcnNpbmcsIGFtYmlndW91cyBncmFtbWFycwotQGZpbmRleCAlZHByZWMKLUBmaW5kZXggJW1lcmdlCi1AY2luZGV4IGNvbmZsaWN0cwotQGNpbmRleCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0cwotCi1MZXQncyBjb25zaWRlciBhbiBleGFtcGxlLCB2YXN0bHkgc2ltcGxpZmllZCBmcm9tIGEgQysrIGdyYW1tYXIuCi0KLUBleGFtcGxlCi0lQHsKLSAgI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gICNkZWZpbmUgWVlTVFlQRSBjaGFyIGNvbnN0ICoKLSAgaW50IHl5bGV4ICh2b2lkKTsKLSAgdm9pZCB5eWVycm9yIChjaGFyIGNvbnN0ICopOwotJUB9Ci0KLSV0b2tlbiBUWVBFTkFNRSBJRAotCi0lcmlnaHQgJz0nCi0lbGVmdCAnKycKLQotJWdsci1wYXJzZXIKLQotJSUKLQotcHJvZyA6Ci0gICAgIHwgcHJvZyBzdG10ICAgQHsgcHJpbnRmICgiXG4iKTsgQH0KLSAgICAgOwotCi1zdG10IDogZXhwciAnOycgICVkcHJlYyAxCi0gICAgIHwgZGVjbCAgICAgICVkcHJlYyAyCi0gICAgIDsKLQotZXhwciA6IElEICAgICAgICAgICAgICAgQHsgcHJpbnRmICgiJXMgIiwgJCQpOyBAfQotICAgICB8IFRZUEVOQU1FICcoJyBleHByICcpJwotICAgICAgICAgICAgICAgICAgICAgICAgQHsgcHJpbnRmICgiJXMgPGNhc3Q+ICIsICQxKTsgQH0KLSAgICAgfCBleHByICcrJyBleHByICAgIEB7IHByaW50ZiAoIisgIik7IEB9Ci0gICAgIHwgZXhwciAnPScgZXhwciAgICBAeyBwcmludGYgKCI9ICIpOyBAfQotICAgICA7Ci0KLWRlY2wgOiBUWVBFTkFNRSBkZWNsYXJhdG9yICc7JwotICAgICAgICAgICAgICAgICAgICAgICAgQHsgcHJpbnRmICgiJXMgPGRlY2xhcmU+ICIsICQxKTsgQH0KLSAgICAgfCBUWVBFTkFNRSBkZWNsYXJhdG9yICc9JyBleHByICc7JwotICAgICAgICAgICAgICAgICAgICAgICAgQHsgcHJpbnRmICgiJXMgPGluaXQtZGVjbGFyZT4gIiwgJDEpOyBAfQotICAgICA7Ci0KLWRlY2xhcmF0b3IgOiBJRCAgICAgICAgIEB7IHByaW50ZiAoIlwiJXNcIiAiLCAkMSk7IEB9Ci0gICAgIHwgJygnIGRlY2xhcmF0b3IgJyknCi0gICAgIDsKLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLVRoaXMgbW9kZWxzIGEgcHJvYmxlbWF0aWMgcGFydCBvZiB0aGUgQysrIGdyYW1tYXItLS10aGUgYW1iaWd1aXR5IGJldHdlZW4KLWNlcnRhaW4gZGVjbGFyYXRpb25zIGFuZCBzdGF0ZW1lbnRzLiAgRm9yIGV4YW1wbGUsCi0KLUBleGFtcGxlCi1UICh4KSA9IHkrejsKLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLXBhcnNlcyBhcyBlaXRoZXIgYW4gQGNvZGV7ZXhwcn0gb3IgYSBAY29kZXtzdG10fQotKGFzc3VtaW5nIHRoYXQgQHNhbXB7VH0gaXMgcmVjb2duaXplZCBhcyBhIEBjb2Rle1RZUEVOQU1FfSBhbmQKLUBzYW1we3h9IGFzIGFuIEBjb2Rle0lEfSkuCi1CaXNvbiBkZXRlY3RzIHRoaXMgYXMgYSByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0IGJldHdlZW4gdGhlIHJ1bGVzCi1AY29kZXtleHByIDogSUR9IGFuZCBAY29kZXtkZWNsYXJhdG9yIDogSUR9LCB3aGljaCBpdCBjYW5ub3QgcmVzb2x2ZSBhdCB0aGUKLXRpbWUgaXQgZW5jb3VudGVycyBAY29kZXt4fSBpbiB0aGUgZXhhbXBsZSBhYm92ZS4gIFNpbmNlIHRoaXMgaXMgYQotQGFjcm9ueW17R0xSfSBwYXJzZXIsIGl0IHRoZXJlZm9yZSBzcGxpdHMgdGhlIHByb2JsZW0gaW50byB0d28gcGFyc2VzLCBvbmUgZm9yCi1lYWNoIGNob2ljZSBvZiByZXNvbHZpbmcgdGhlIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3QuCi1Vbmxpa2UgdGhlIGV4YW1wbGUgZnJvbSB0aGUgcHJldmlvdXMgc2VjdGlvbiAoQHB4cmVme1NpbXBsZSBHTFIgUGFyc2Vyc30pLAotaG93ZXZlciwgbmVpdGhlciBvZiB0aGVzZSBwYXJzZXMgYGBkaWVzLCcnIGJlY2F1c2UgdGhlIGdyYW1tYXIgYXMgaXQgc3RhbmRzIGlzCi1hbWJpZ3VvdXMuICBPbmUgb2YgdGhlIHBhcnNlcnMgZXZlbnR1YWxseSByZWR1Y2VzIEBjb2Rle3N0bXQgOiBleHByICc7J30gYW5kCi10aGUgb3RoZXIgcmVkdWNlcyBAY29kZXtzdG10IDogZGVjbH0sIGFmdGVyIHdoaWNoIGJvdGggcGFyc2VycyBhcmUgaW4gYW4KLWlkZW50aWNhbCBzdGF0ZTogdGhleSd2ZSBzZWVuIEBzYW1we3Byb2cgc3RtdH0gYW5kIGhhdmUgdGhlIHNhbWUgdW5wcm9jZXNzZWQKLWlucHV0IHJlbWFpbmluZy4gIFdlIHNheSB0aGF0IHRoZXNlIHBhcnNlcyBoYXZlIEBkZm57bWVyZ2VkLn0KLQotQXQgdGhpcyBwb2ludCwgdGhlIEBhY3Jvbnlte0dMUn0gcGFyc2VyIHJlcXVpcmVzIGEgc3BlY2lmaWNhdGlvbiBpbiB0aGUKLWdyYW1tYXIgb2YgaG93IHRvIGNob29zZSBiZXR3ZWVuIHRoZSBjb21wZXRpbmcgcGFyc2VzLgotSW4gdGhlIGV4YW1wbGUgYWJvdmUsIHRoZSB0d28gQGNvZGV7JWRwcmVjfQotZGVjbGFyYXRpb25zIHNwZWNpZnkgdGhhdCBCaXNvbiBpcyB0byBnaXZlIHByZWNlZGVuY2UKLXRvIHRoZSBwYXJzZSB0aGF0IGludGVycHJldHMgdGhlIGV4YW1wbGUgYXMgYQotQGNvZGV7ZGVjbH0sIHdoaWNoIGltcGxpZXMgdGhhdCBAY29kZXt4fSBpcyBhIGRlY2xhcmF0b3IuCi1UaGUgcGFyc2VyIHRoZXJlZm9yZSBwcmludHMKLQotQGV4YW1wbGUKLSJ4IiB5IHogKyBUIDxpbml0LWRlY2xhcmU+Ci1AZW5kIGV4YW1wbGUKLQotVGhlIEBjb2RleyVkcHJlY30gZGVjbGFyYXRpb25zIG9ubHkgY29tZSBpbnRvIHBsYXkgd2hlbiBtb3JlIHRoYW4gb25lCi1wYXJzZSBzdXJ2aXZlcy4gIENvbnNpZGVyIGEgZGlmZmVyZW50IGlucHV0IHN0cmluZyBmb3IgdGhpcyBwYXJzZXI6Ci0KLUBleGFtcGxlCi1UICh4KSArIHk7Ci1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci1UaGlzIGlzIGFub3RoZXIgZXhhbXBsZSBvZiB1c2luZyBAYWNyb255bXtHTFJ9IHRvIHBhcnNlIGFuIHVuYW1iaWd1b3VzCi1jb25zdHJ1Y3QsIGFzIHNob3duIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uIChAcHhyZWZ7U2ltcGxlIEdMUiBQYXJzZXJzfSkuCi1IZXJlLCB0aGVyZSBpcyBubyBhbWJpZ3VpdHkgKHRoaXMgY2Fubm90IGJlIHBhcnNlZCBhcyBhIGRlY2xhcmF0aW9uKS4KLUhvd2V2ZXIsIGF0IHRoZSB0aW1lIHRoZSBCaXNvbiBwYXJzZXIgZW5jb3VudGVycyBAY29kZXt4fSwgaXQgZG9lcyBub3QKLWhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHJlc29sdmUgdGhlIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3QgKGFnYWluLAotYmV0d2VlbiBAY29kZXt4fSBhcyBhbiBAY29kZXtleHByfSBvciBhIEBjb2Rle2RlY2xhcmF0b3J9KS4gIEluIHRoaXMKLWNhc2UsIG5vIHByZWNlZGVuY2UgZGVjbGFyYXRpb24gaXMgdXNlZC4gIEFnYWluLCB0aGUgcGFyc2VyIHNwbGl0cwotaW50byB0d28sIG9uZSBhc3N1bWluZyB0aGF0IEBjb2Rle3h9IGlzIGFuIEBjb2Rle2V4cHJ9LCBhbmQgdGhlIG90aGVyCi1hc3N1bWluZyBAY29kZXt4fSBpcyBhIEBjb2Rle2RlY2xhcmF0b3J9LiAgVGhlIHNlY29uZCBvZiB0aGVzZSBwYXJzZXJzCi10aGVuIHZhbmlzaGVzIHdoZW4gaXQgc2VlcyBAY29kZXsrfSwgYW5kIHRoZSBwYXJzZXIgcHJpbnRzCi0KLUBleGFtcGxlCi14IFQgPGNhc3Q+IHkgKwotQGVuZCBleGFtcGxlCi0KLVN1cHBvc2UgdGhhdCBpbnN0ZWFkIG9mIHJlc29sdmluZyB0aGUgYW1iaWd1aXR5LCB5b3Ugd2FudGVkIHRvIHNlZSBhbGwKLXRoZSBwb3NzaWJpbGl0aWVzLiAgRm9yIHRoaXMgcHVycG9zZSwgeW91IG11c3QgbWVyZ2UgdGhlIHNlbWFudGljCi1hY3Rpb25zIG9mIHRoZSB0d28gcG9zc2libGUgcGFyc2VycywgcmF0aGVyIHRoYW4gY2hvb3Npbmcgb25lIG92ZXIgdGhlCi1vdGhlci4gIFRvIGRvIHNvLCB5b3UgY291bGQgY2hhbmdlIHRoZSBkZWNsYXJhdGlvbiBvZiBAY29kZXtzdG10fSBhcwotZm9sbG93czoKLQotQGV4YW1wbGUKLXN0bXQgOiBleHByICc7JyAgJW1lcmdlIDxzdG10TWVyZ2U+Ci0gICAgIHwgZGVjbCAgICAgICVtZXJnZSA8c3RtdE1lcmdlPgotICAgICA7Ci1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci1hbmQgZGVmaW5lIHRoZSBAY29kZXtzdG10TWVyZ2V9IGZ1bmN0aW9uIGFzOgotCi1AZXhhbXBsZQotc3RhdGljIFlZU1RZUEUKLXN0bXRNZXJnZSAoWVlTVFlQRSB4MCwgWVlTVFlQRSB4MSkKLUB7Ci0gIHByaW50ZiAoIjxPUj4gIik7Ci0gIHJldHVybiAiIjsKLUB9Ci1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci13aXRoIGFuIGFjY29tcGFueWluZyBmb3J3YXJkIGRlY2xhcmF0aW9uCi1pbiB0aGUgQyBkZWNsYXJhdGlvbnMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZToKLQotQGV4YW1wbGUKLSVAewotICAjZGVmaW5lIFlZU1RZUEUgY2hhciBjb25zdCAqCi0gIHN0YXRpYyBZWVNUWVBFIHN0bXRNZXJnZSAoWVlTVFlQRSB4MCwgWVlTVFlQRSB4MSk7Ci0lQH0KLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLVdpdGggdGhlc2UgZGVjbGFyYXRpb25zLCB0aGUgcmVzdWx0aW5nIHBhcnNlciBwYXJzZXMgdGhlIGZpcnN0IGV4YW1wbGUKLWFzIGJvdGggYW4gQGNvZGV7ZXhwcn0gYW5kIGEgQGNvZGV7ZGVjbH0sIGFuZCBwcmludHMKLQotQGV4YW1wbGUKLSJ4IiB5IHogKyBUIDxpbml0LWRlY2xhcmU+IHggVCA8Y2FzdD4geSB6ICsgPSA8T1I+Ci1AZW5kIGV4YW1wbGUKLQotQmlzb24gcmVxdWlyZXMgdGhhdCBhbGwgb2YgdGhlCi1wcm9kdWN0aW9ucyB0aGF0IHBhcnRpY2lwYXRlIGluIGFueSBwYXJ0aWN1bGFyIG1lcmdlIGhhdmUgaWRlbnRpY2FsCi1Ac2FtcHslbWVyZ2V9IGNsYXVzZXMuICBPdGhlcndpc2UsIHRoZSBhbWJpZ3VpdHkgd291bGQgYmUgdW5yZXNvbHZhYmxlLAotYW5kIHRoZSBwYXJzZXIgd2lsbCByZXBvcnQgYW4gZXJyb3IgZHVyaW5nIGFueSBwYXJzZSB0aGF0IHJlc3VsdHMgaW4KLXRoZSBvZmZlbmRpbmcgbWVyZ2UuCi0KLUBub2RlIEdMUiBTZW1hbnRpYyBBY3Rpb25zCi1Ac3Vic2VjdGlvbiBHTFIgU2VtYW50aWMgQWN0aW9ucwotCi1AY2luZGV4IGRlZmVycmVkIHNlbWFudGljIGFjdGlvbnMKLUJ5IGRlZmluaXRpb24sIGEgZGVmZXJyZWQgc2VtYW50aWMgYWN0aW9uIGlzIG5vdCBwZXJmb3JtZWQgYXQgdGhlIHNhbWUgdGltZSBhcwotdGhlIGFzc29jaWF0ZWQgcmVkdWN0aW9uLgotVGhpcyByYWlzZXMgY2F2ZWF0cyBmb3Igc2V2ZXJhbCBCaXNvbiBmZWF0dXJlcyB5b3UgbWlnaHQgdXNlIGluIGEgc2VtYW50aWMKLWFjdGlvbiBpbiBhIEBhY3Jvbnlte0dMUn0gcGFyc2VyLgotCi1AdmluZGV4IHl5Y2hhcgotQGNpbmRleCBAYWNyb255bXtHTFJ9IHBhcnNlcnMgYW5kIEBjb2Rle3l5Y2hhcn0KLUB2aW5kZXggeXlsdmFsCi1AY2luZGV4IEBhY3Jvbnlte0dMUn0gcGFyc2VycyBhbmQgQGNvZGV7eXlsdmFsfQotQHZpbmRleCB5eWxsb2MKLUBjaW5kZXggQGFjcm9ueW17R0xSfSBwYXJzZXJzIGFuZCBAY29kZXt5eWxsb2N9Ci1JbiBhbnkgc2VtYW50aWMgYWN0aW9uLCB5b3UgY2FuIGV4YW1pbmUgQGNvZGV7eXljaGFyfSB0byBkZXRlcm1pbmUgdGhlIHR5cGUgb2YKLXRoZSBsb29rLWFoZWFkIHRva2VuIHByZXNlbnQgYXQgdGhlIHRpbWUgb2YgdGhlIGFzc29jaWF0ZWQgcmVkdWN0aW9uLgotQWZ0ZXIgY2hlY2tpbmcgdGhhdCBAY29kZXt5eWNoYXJ9IGlzIG5vdCBzZXQgdG8gQGNvZGV7WVlFTVBUWX0gb3IgQGNvZGV7WVlFT0Z9LAoteW91IGNhbiB0aGVuIGV4YW1pbmUgQGNvZGV7eXlsdmFsfSBhbmQgQGNvZGV7eXlsbG9jfSB0byBkZXRlcm1pbmUgdGhlCi1sb29rLWFoZWFkIHRva2VuJ3Mgc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9uLCBpZiBhbnkuCi1JbiBhIG5vbmRlZmVycmVkIHNlbWFudGljIGFjdGlvbiwgeW91IGNhbiBhbHNvIG1vZGlmeSBhbnkgb2YgdGhlc2UgdmFyaWFibGVzIHRvCi1pbmZsdWVuY2Ugc3ludGF4IGFuYWx5c2lzLgotQHhyZWZ7TG9vay1BaGVhZCwgLExvb2stQWhlYWQgVG9rZW5zfS4KLQotQGZpbmRleCB5eWNsZWFyaW4KLUBjaW5kZXggQGFjcm9ueW17R0xSfSBwYXJzZXJzIGFuZCBAY29kZXt5eWNsZWFyaW59Ci1JbiBhIGRlZmVycmVkIHNlbWFudGljIGFjdGlvbiwgaXQncyB0b28gbGF0ZSB0byBpbmZsdWVuY2Ugc3ludGF4IGFuYWx5c2lzLgotSW4gdGhpcyBjYXNlLCBAY29kZXt5eWNoYXJ9LCBAY29kZXt5eWx2YWx9LCBhbmQgQGNvZGV7eXlsbG9jfSBhcmUgc2V0IHRvCi1zaGFsbG93IGNvcGllcyBvZiB0aGUgdmFsdWVzIHRoZXkgaGFkIGF0IHRoZSB0aW1lIG9mIHRoZSBhc3NvY2lhdGVkIHJlZHVjdGlvbi4KLUZvciB0aGlzIHJlYXNvbiBhbG9uZSwgbW9kaWZ5aW5nIHRoZW0gaXMgZGFuZ2Vyb3VzLgotTW9yZW92ZXIsIHRoZSByZXN1bHQgb2YgbW9kaWZ5aW5nIHRoZW0gaXMgdW5kZWZpbmVkIGFuZCBzdWJqZWN0IHRvIGNoYW5nZSB3aXRoCi1mdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24uCi1Gb3IgZXhhbXBsZSwgaWYgYSBzZW1hbnRpYyBhY3Rpb24gbWlnaHQgYmUgZGVmZXJyZWQsIHlvdSBzaG91bGQgbmV2ZXIgd3JpdGUgaXQKLXRvIGludm9rZSBAY29kZXt5eWNsZWFyaW59IChAcHhyZWZ7QWN0aW9uIEZlYXR1cmVzfSkgb3IgdG8gYXR0ZW1wdCB0byBmcmVlCi1tZW1vcnkgcmVmZXJlbmNlZCBieSBAY29kZXt5eWx2YWx9LgotCi1AZmluZGV4IFlZRVJST1IKLUBjaW5kZXggQGFjcm9ueW17R0xSfSBwYXJzZXJzIGFuZCBAY29kZXtZWUVSUk9SfQotQW5vdGhlciBCaXNvbiBmZWF0dXJlIHJlcXVpcmluZyBzcGVjaWFsIGNvbnNpZGVyYXRpb24gaXMgQGNvZGV7WVlFUlJPUn0KLShAcHhyZWZ7QWN0aW9uIEZlYXR1cmVzfSksIHdoaWNoIHlvdSBjYW4gaW52b2tlIGluIGEgc2VtYW50aWMgYWN0aW9uIHRvCi1pbml0aWF0ZSBlcnJvciByZWNvdmVyeS4KLUR1cmluZyBkZXRlcm1pbmlzdGljIEBhY3Jvbnlte0dMUn0gb3BlcmF0aW9uLCB0aGUgZWZmZWN0IG9mIEBjb2Rle1lZRVJST1J9IGlzCi10aGUgc2FtZSBhcyBpdHMgZWZmZWN0IGluIGFuIEBhY3Jvbnlte0xBTFJ9KDEpIHBhcnNlci4KLUluIGEgZGVmZXJyZWQgc2VtYW50aWMgYWN0aW9uLCBpdHMgZWZmZWN0IGlzIHVuZGVmaW5lZC4KLUBjIFRoZSBlZmZlY3QgaXMgcHJvYmFibHkgYSBzeW50YXggZXJyb3IgYXQgdGhlIHNwbGl0IHBvaW50LgotCi1BbHNvLCBzZWUgQHJlZntMb2NhdGlvbiBEZWZhdWx0IEFjdGlvbiwgLERlZmF1bHQgQWN0aW9uIGZvciBMb2NhdGlvbnN9LCB3aGljaAotZGVzY3JpYmVzIGEgc3BlY2lhbCB1c2FnZSBvZiBAY29kZXtZWUxMT0NfREVGQVVMVH0gaW4gQGFjcm9ueW17R0xSfSBwYXJzZXJzLgotCi1Abm9kZSBDb21waWxlciBSZXF1aXJlbWVudHMKLUBzdWJzZWN0aW9uIENvbnNpZGVyYXRpb25zIHdoZW4gQ29tcGlsaW5nIEBhY3Jvbnlte0dMUn0gUGFyc2VycwotQGNpbmRleCBAY29kZXtpbmxpbmV9Ci1AY2luZGV4IEBhY3Jvbnlte0dMUn0gcGFyc2VycyBhbmQgQGNvZGV7aW5saW5lfQotCi1UaGUgQGFjcm9ueW17R0xSfSBwYXJzZXJzIHJlcXVpcmUgYSBjb21waWxlciBmb3IgQGFjcm9ueW17SVNPfSBDODkgb3IKLWxhdGVyLiAgSW4gYWRkaXRpb24sIHRoZXkgdXNlIHRoZSBAY29kZXtpbmxpbmV9IGtleXdvcmQsIHdoaWNoIGlzIG5vdAotQzg5LCBidXQgaXMgQzk5IGFuZCBpcyBhIGNvbW1vbiBleHRlbnNpb24gaW4gcHJlLUM5OSBjb21waWxlcnMuICBJdCBpcwotdXAgdG8gdGhlIHVzZXIgb2YgdGhlc2UgcGFyc2VycyB0byBoYW5kbGUKLXBvcnRhYmlsaXR5IGlzc3Vlcy4gIEZvciBpbnN0YW5jZSwgaWYgdXNpbmcgQXV0b2NvbmYgYW5kIHRoZSBBdXRvY29uZgotbWFjcm8gQGNvZGV7QUNfQ19JTkxJTkV9LCBhIG1lcmUKLQotQGV4YW1wbGUKLSVAewotICAjaW5jbHVkZSA8Y29uZmlnLmg+Ci0lQH0KLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLXdpbGwgc3VmZmljZS4gIE90aGVyd2lzZSwgd2Ugc3VnZ2VzdAotCi1AZXhhbXBsZQotJUB7Ci0gICNpZiBfX1NURENfVkVSU0lPTl9fIDwgMTk5OTAxICYmICEgZGVmaW5lZCBfX0dOVUNfXyAmJiAhIGRlZmluZWQgaW5saW5lCi0gICAjZGVmaW5lIGlubGluZQotICAjZW5kaWYKLSVAfQotQGVuZCBleGFtcGxlCi0KLUBub2RlIExvY2F0aW9ucyBPdmVydmlldwotQHNlY3Rpb24gTG9jYXRpb25zCi1AY2luZGV4IGxvY2F0aW9uCi1AY2luZGV4IHRleHR1YWwgbG9jYXRpb24KLUBjaW5kZXggbG9jYXRpb24sIHRleHR1YWwKLQotTWFueSBhcHBsaWNhdGlvbnMsIGxpa2UgaW50ZXJwcmV0ZXJzIG9yIGNvbXBpbGVycywgaGF2ZSB0byBwcm9kdWNlIHZlcmJvc2UKLWFuZCB1c2VmdWwgZXJyb3IgbWVzc2FnZXMuICBUbyBhY2hpZXZlIHRoaXMsIG9uZSBtdXN0IGJlIGFibGUgdG8ga2VlcCB0cmFjayBvZgotdGhlIEBkZm57dGV4dHVhbCBsb2NhdGlvbn0sIG9yIEBkZm57bG9jYXRpb259LCBvZiBlYWNoIHN5bnRhY3RpYyBjb25zdHJ1Y3QuCi1CaXNvbiBwcm92aWRlcyBhIG1lY2hhbmlzbSBmb3IgaGFuZGxpbmcgdGhlc2UgbG9jYXRpb25zLgotCi1FYWNoIHRva2VuIGhhcyBhIHNlbWFudGljIHZhbHVlLiAgSW4gYSBzaW1pbGFyIGZhc2hpb24sIGVhY2ggdG9rZW4gaGFzIGFuCi1hc3NvY2lhdGVkIGxvY2F0aW9uLCBidXQgdGhlIHR5cGUgb2YgbG9jYXRpb25zIGlzIHRoZSBzYW1lIGZvciBhbGwgdG9rZW5zIGFuZAotZ3JvdXBpbmdzLiAgTW9yZW92ZXIsIHRoZSBvdXRwdXQgcGFyc2VyIGlzIGVxdWlwcGVkIHdpdGggYSBkZWZhdWx0IGRhdGEKLXN0cnVjdHVyZSBmb3Igc3RvcmluZyBsb2NhdGlvbnMgKEBweHJlZntMb2NhdGlvbnN9LCBmb3IgbW9yZSBkZXRhaWxzKS4KLQotTGlrZSBzZW1hbnRpYyB2YWx1ZXMsIGxvY2F0aW9ucyBjYW4gYmUgcmVhY2hlZCBpbiBhY3Rpb25zIHVzaW5nIGEgZGVkaWNhdGVkCi1zZXQgb2YgY29uc3RydWN0cy4gIEluIHRoZSBleGFtcGxlIGFib3ZlLCB0aGUgbG9jYXRpb24gb2YgdGhlIHdob2xlIGdyb3VwaW5nCi1pcyBAY29kZXtAQCR9LCB3aGlsZSB0aGUgbG9jYXRpb25zIG9mIHRoZSBzdWJleHByZXNzaW9ucyBhcmUgQGNvZGV7QEAxfSBhbmQKLUBjb2Rle0BAM30uCi0KLVdoZW4gYSBydWxlIGlzIG1hdGNoZWQsIGEgZGVmYXVsdCBhY3Rpb24gaXMgdXNlZCB0byBjb21wdXRlIHRoZSBzZW1hbnRpYyB2YWx1ZQotb2YgaXRzIGxlZnQgaGFuZCBzaWRlIChAcHhyZWZ7QWN0aW9uc30pLiAgSW4gdGhlIHNhbWUgd2F5LCBhbm90aGVyIGRlZmF1bHQKLWFjdGlvbiBpcyB1c2VkIGZvciBsb2NhdGlvbnMuICBIb3dldmVyLCB0aGUgYWN0aW9uIGZvciBsb2NhdGlvbnMgaXMgZ2VuZXJhbAotZW5vdWdoIGZvciBtb3N0IGNhc2VzLCBtZWFuaW5nIHRoZXJlIGlzIHVzdWFsbHkgbm8gbmVlZCB0byBkZXNjcmliZSBmb3IgZWFjaAotcnVsZSBob3cgQGNvZGV7QEAkfSBzaG91bGQgYmUgZm9ybWVkLiAgV2hlbiBidWlsZGluZyBhIG5ldyBsb2NhdGlvbiBmb3IgYSBnaXZlbgotZ3JvdXBpbmcsIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZSBvdXRwdXQgcGFyc2VyIGlzIHRvIHRha2UgdGhlIGJlZ2lubmluZwotb2YgdGhlIGZpcnN0IHN5bWJvbCwgYW5kIHRoZSBlbmQgb2YgdGhlIGxhc3Qgc3ltYm9sLgotCi1Abm9kZSBCaXNvbiBQYXJzZXIKLUBzZWN0aW9uIEJpc29uIE91dHB1dDogdGhlIFBhcnNlciBGaWxlCi1AY2luZGV4IEJpc29uIHBhcnNlcgotQGNpbmRleCBCaXNvbiB1dGlsaXR5Ci1AY2luZGV4IGxleGljYWwgYW5hbHl6ZXIsIHB1cnBvc2UKLUBjaW5kZXggcGFyc2VyCi0KLVdoZW4geW91IHJ1biBCaXNvbiwgeW91IGdpdmUgaXQgYSBCaXNvbiBncmFtbWFyIGZpbGUgYXMgaW5wdXQuICBUaGUgb3V0cHV0Ci1pcyBhIEMgc291cmNlIGZpbGUgdGhhdCBwYXJzZXMgdGhlIGxhbmd1YWdlIGRlc2NyaWJlZCBieSB0aGUgZ3JhbW1hci4KLVRoaXMgZmlsZSBpcyBjYWxsZWQgYSBAZGZue0Jpc29uIHBhcnNlcn0uICBLZWVwIGluIG1pbmQgdGhhdCB0aGUgQmlzb24KLXV0aWxpdHkgYW5kIHRoZSBCaXNvbiBwYXJzZXIgYXJlIHR3byBkaXN0aW5jdCBwcm9ncmFtczogdGhlIEJpc29uIHV0aWxpdHkKLWlzIGEgcHJvZ3JhbSB3aG9zZSBvdXRwdXQgaXMgdGhlIEJpc29uIHBhcnNlciB0aGF0IGJlY29tZXMgcGFydCBvZiB5b3VyCi1wcm9ncmFtLgotCi1UaGUgam9iIG9mIHRoZSBCaXNvbiBwYXJzZXIgaXMgdG8gZ3JvdXAgdG9rZW5zIGludG8gZ3JvdXBpbmdzIGFjY29yZGluZyB0bwotdGhlIGdyYW1tYXIgcnVsZXMtLS1mb3IgZXhhbXBsZSwgdG8gYnVpbGQgaWRlbnRpZmllcnMgYW5kIG9wZXJhdG9ycyBpbnRvCi1leHByZXNzaW9ucy4gIEFzIGl0IGRvZXMgdGhpcywgaXQgcnVucyB0aGUgYWN0aW9ucyBmb3IgdGhlIGdyYW1tYXIgcnVsZXMgaXQKLXVzZXMuCi0KLVRoZSB0b2tlbnMgY29tZSBmcm9tIGEgZnVuY3Rpb24gY2FsbGVkIHRoZSBAZGZue2xleGljYWwgYW5hbHl6ZXJ9IHRoYXQKLXlvdSBtdXN0IHN1cHBseSBpbiBzb21lIGZhc2hpb24gKHN1Y2ggYXMgYnkgd3JpdGluZyBpdCBpbiBDKS4gIFRoZSBCaXNvbgotcGFyc2VyIGNhbGxzIHRoZSBsZXhpY2FsIGFuYWx5emVyIGVhY2ggdGltZSBpdCB3YW50cyBhIG5ldyB0b2tlbi4gIEl0Ci1kb2Vzbid0IGtub3cgd2hhdCBpcyBgYGluc2lkZScnIHRoZSB0b2tlbnMgKHRob3VnaCB0aGVpciBzZW1hbnRpYyB2YWx1ZXMKLW1heSByZWZsZWN0IHRoaXMpLiAgVHlwaWNhbGx5IHRoZSBsZXhpY2FsIGFuYWx5emVyIG1ha2VzIHRoZSB0b2tlbnMgYnkKLXBhcnNpbmcgY2hhcmFjdGVycyBvZiB0ZXh0LCBidXQgQmlzb24gZG9lcyBub3QgZGVwZW5kIG9uIHRoaXMuCi1AeHJlZntMZXhpY2FsLCAsVGhlIExleGljYWwgQW5hbHl6ZXIgRnVuY3Rpb24gQGNvZGV7eXlsZXh9fS4KLQotVGhlIEJpc29uIHBhcnNlciBmaWxlIGlzIEMgY29kZSB3aGljaCBkZWZpbmVzIGEgZnVuY3Rpb24gbmFtZWQKLUBjb2Rle3l5cGFyc2V9IHdoaWNoIGltcGxlbWVudHMgdGhhdCBncmFtbWFyLiAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBtYWtlCi1hIGNvbXBsZXRlIEMgcHJvZ3JhbTogeW91IG11c3Qgc3VwcGx5IHNvbWUgYWRkaXRpb25hbCBmdW5jdGlvbnMuICBPbmUgaXMKLXRoZSBsZXhpY2FsIGFuYWx5emVyLiAgQW5vdGhlciBpcyBhbiBlcnJvci1yZXBvcnRpbmcgZnVuY3Rpb24gd2hpY2ggdGhlCi1wYXJzZXIgY2FsbHMgdG8gcmVwb3J0IGFuIGVycm9yLiAgSW4gYWRkaXRpb24sIGEgY29tcGxldGUgQyBwcm9ncmFtIG11c3QKLXN0YXJ0IHdpdGggYSBmdW5jdGlvbiBjYWxsZWQgQGNvZGV7bWFpbn07IHlvdSBoYXZlIHRvIHByb3ZpZGUgdGhpcywgYW5kCi1hcnJhbmdlIGZvciBpdCB0byBjYWxsIEBjb2Rle3l5cGFyc2V9IG9yIHRoZSBwYXJzZXIgd2lsbCBuZXZlciBydW4uCi1AeHJlZntJbnRlcmZhY2UsICxQYXJzZXIgQy1MYW5ndWFnZSBJbnRlcmZhY2V9LgotCi1Bc2lkZSBmcm9tIHRoZSB0b2tlbiB0eXBlIG5hbWVzIGFuZCB0aGUgc3ltYm9scyBpbiB0aGUgYWN0aW9ucyB5b3UKLXdyaXRlLCBhbGwgc3ltYm9scyBkZWZpbmVkIGluIHRoZSBCaXNvbiBwYXJzZXIgZmlsZSBpdHNlbGYKLWJlZ2luIHdpdGggQHNhbXB7eXl9IG9yIEBzYW1we1lZfS4gIFRoaXMgaW5jbHVkZXMgaW50ZXJmYWNlIGZ1bmN0aW9ucwotc3VjaCBhcyB0aGUgbGV4aWNhbCBhbmFseXplciBmdW5jdGlvbiBAY29kZXt5eWxleH0sIHRoZSBlcnJvciByZXBvcnRpbmcKLWZ1bmN0aW9uIEBjb2Rle3l5ZXJyb3J9IGFuZCB0aGUgcGFyc2VyIGZ1bmN0aW9uIEBjb2Rle3l5cGFyc2V9IGl0c2VsZi4KLVRoaXMgYWxzbyBpbmNsdWRlcyBudW1lcm91cyBpZGVudGlmaWVycyB1c2VkIGZvciBpbnRlcm5hbCBwdXJwb3Nlcy4KLVRoZXJlZm9yZSwgeW91IHNob3VsZCBhdm9pZCB1c2luZyBDIGlkZW50aWZpZXJzIHN0YXJ0aW5nIHdpdGggQHNhbXB7eXl9Ci1vciBAc2FtcHtZWX0gaW4gdGhlIEJpc29uIGdyYW1tYXIgZmlsZSBleGNlcHQgZm9yIHRoZSBvbmVzIGRlZmluZWQgaW4KLXRoaXMgbWFudWFsLiAgQWxzbywgeW91IHNob3VsZCBhdm9pZCB1c2luZyB0aGUgQyBpZGVudGlmaWVycwotQHNhbXB7bWFsbG9jfSBhbmQgQHNhbXB7ZnJlZX0gZm9yIGFueXRoaW5nIG90aGVyIHRoYW4gdGhlaXIgdXN1YWwKLW1lYW5pbmdzLgotCi1JbiBzb21lIGNhc2VzIHRoZSBCaXNvbiBwYXJzZXIgZmlsZSBpbmNsdWRlcyBzeXN0ZW0gaGVhZGVycywgYW5kIGluCi10aG9zZSBjYXNlcyB5b3VyIGNvZGUgc2hvdWxkIHJlc3BlY3QgdGhlIGlkZW50aWZpZXJzIHJlc2VydmVkIGJ5IHRob3NlCi1oZWFkZXJzLiAgT24gc29tZSBub24tQGFjcm9ueW17R05VfSBob3N0cywgQGNvZGV7PGFsbG9jYS5oPn0sIEBjb2RlezxtYWxsb2MuaD59LAotQGNvZGV7PHN0ZGRlZi5oPn0sIGFuZCBAY29kZXs8c3RkbGliLmg+fSBhcmUgaW5jbHVkZWQgYXMgbmVlZGVkIHRvCi1kZWNsYXJlIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCByZWxhdGVkIHR5cGVzLiAgQGNvZGV7PGxpYmludGwuaD59IGlzCi1pbmNsdWRlZCBpZiBtZXNzYWdlIHRyYW5zbGF0aW9uIGlzIGluIHVzZQotKEBweHJlZntJbnRlcm5hdGlvbmFsaXphdGlvbn0pLiAgT3RoZXIgc3lzdGVtIGhlYWRlcnMgbWF5Ci1iZSBpbmNsdWRlZCBpZiB5b3UgZGVmaW5lIEBjb2Rle1lZREVCVUd9IHRvIGEgbm9uemVybyB2YWx1ZQotKEBweHJlZntUcmFjaW5nLCAsVHJhY2luZyBZb3VyIFBhcnNlcn0pLgotCi1Abm9kZSBTdGFnZXMKLUBzZWN0aW9uIFN0YWdlcyBpbiBVc2luZyBCaXNvbgotQGNpbmRleCBzdGFnZXMgaW4gdXNpbmcgQmlzb24KLUBjaW5kZXggdXNpbmcgQmlzb24KLQotVGhlIGFjdHVhbCBsYW5ndWFnZS1kZXNpZ24gcHJvY2VzcyB1c2luZyBCaXNvbiwgZnJvbSBncmFtbWFyIHNwZWNpZmljYXRpb24KLXRvIGEgd29ya2luZyBjb21waWxlciBvciBpbnRlcnByZXRlciwgaGFzIHRoZXNlIHBhcnRzOgotCi1AZW51bWVyYXRlCi1AaXRlbQotRm9ybWFsbHkgc3BlY2lmeSB0aGUgZ3JhbW1hciBpbiBhIGZvcm0gcmVjb2duaXplZCBieSBCaXNvbgotKEBweHJlZntHcmFtbWFyIEZpbGUsICxCaXNvbiBHcmFtbWFyIEZpbGVzfSkuICBGb3IgZWFjaCBncmFtbWF0aWNhbCBydWxlCi1pbiB0aGUgbGFuZ3VhZ2UsIGRlc2NyaWJlIHRoZSBhY3Rpb24gdGhhdCBpcyB0byBiZSB0YWtlbiB3aGVuIGFuCi1pbnN0YW5jZSBvZiB0aGF0IHJ1bGUgaXMgcmVjb2duaXplZC4gIFRoZSBhY3Rpb24gaXMgZGVzY3JpYmVkIGJ5IGEKLXNlcXVlbmNlIG9mIEMgc3RhdGVtZW50cy4KLQotQGl0ZW0KLVdyaXRlIGEgbGV4aWNhbCBhbmFseXplciB0byBwcm9jZXNzIGlucHV0IGFuZCBwYXNzIHRva2VucyB0byB0aGUgcGFyc2VyLgotVGhlIGxleGljYWwgYW5hbHl6ZXIgbWF5IGJlIHdyaXR0ZW4gYnkgaGFuZCBpbiBDIChAcHhyZWZ7TGV4aWNhbCwgLFRoZQotTGV4aWNhbCBBbmFseXplciBGdW5jdGlvbiBAY29kZXt5eWxleH19KS4gIEl0IGNvdWxkIGFsc28gYmUgcHJvZHVjZWQKLXVzaW5nIExleCwgYnV0IHRoZSB1c2Ugb2YgTGV4IGlzIG5vdCBkaXNjdXNzZWQgaW4gdGhpcyBtYW51YWwuCi0KLUBpdGVtCi1Xcml0ZSBhIGNvbnRyb2xsaW5nIGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhlIEJpc29uLXByb2R1Y2VkIHBhcnNlci4KLQotQGl0ZW0KLVdyaXRlIGVycm9yLXJlcG9ydGluZyByb3V0aW5lcy4KLUBlbmQgZW51bWVyYXRlCi0KLVRvIHR1cm4gdGhpcyBzb3VyY2UgY29kZSBhcyB3cml0dGVuIGludG8gYSBydW5uYWJsZSBwcm9ncmFtLCB5b3UKLW11c3QgZm9sbG93IHRoZXNlIHN0ZXBzOgotCi1AZW51bWVyYXRlCi1AaXRlbQotUnVuIEJpc29uIG9uIHRoZSBncmFtbWFyIHRvIHByb2R1Y2UgdGhlIHBhcnNlci4KLQotQGl0ZW0KLUNvbXBpbGUgdGhlIGNvZGUgb3V0cHV0IGJ5IEJpc29uLCBhcyB3ZWxsIGFzIGFueSBvdGhlciBzb3VyY2UgZmlsZXMuCi0KLUBpdGVtCi1MaW5rIHRoZSBvYmplY3QgZmlsZXMgdG8gcHJvZHVjZSB0aGUgZmluaXNoZWQgcHJvZHVjdC4KLUBlbmQgZW51bWVyYXRlCi0KLUBub2RlIEdyYW1tYXIgTGF5b3V0Ci1Ac2VjdGlvbiBUaGUgT3ZlcmFsbCBMYXlvdXQgb2YgYSBCaXNvbiBHcmFtbWFyCi1AY2luZGV4IGdyYW1tYXIgZmlsZQotQGNpbmRleCBmaWxlIGZvcm1hdAotQGNpbmRleCBmb3JtYXQgb2YgZ3JhbW1hciBmaWxlCi1AY2luZGV4IGxheW91dCBvZiBCaXNvbiBncmFtbWFyCi0KLVRoZSBpbnB1dCBmaWxlIGZvciB0aGUgQmlzb24gdXRpbGl0eSBpcyBhIEBkZm57Qmlzb24gZ3JhbW1hciBmaWxlfS4gIFRoZQotZ2VuZXJhbCBmb3JtIG9mIGEgQmlzb24gZ3JhbW1hciBmaWxlIGlzIGFzIGZvbGxvd3M6Ci0KLUBleGFtcGxlCi0lQHsKLUB2YXJ7UHJvbG9ndWV9Ci0lQH0KLQotQHZhcntCaXNvbiBkZWNsYXJhdGlvbnN9Ci0KLSUlCi1AdmFye0dyYW1tYXIgcnVsZXN9Ci0lJQotQHZhcntFcGlsb2d1ZX0KLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLVRoZSBAc2FtcHslJX0sIEBzYW1weyVAe30gYW5kIEBzYW1weyVAfX0gYXJlIHB1bmN0dWF0aW9uIHRoYXQgYXBwZWFycwotaW4gZXZlcnkgQmlzb24gZ3JhbW1hciBmaWxlIHRvIHNlcGFyYXRlIHRoZSBzZWN0aW9ucy4KLQotVGhlIHByb2xvZ3VlIG1heSBkZWZpbmUgdHlwZXMgYW5kIHZhcmlhYmxlcyB1c2VkIGluIHRoZSBhY3Rpb25zLiAgWW91IGNhbgotYWxzbyB1c2UgcHJlcHJvY2Vzc29yIGNvbW1hbmRzIHRvIGRlZmluZSBtYWNyb3MgdXNlZCB0aGVyZSwgYW5kIHVzZQotQGNvZGV7I2luY2x1ZGV9IHRvIGluY2x1ZGUgaGVhZGVyIGZpbGVzIHRoYXQgZG8gYW55IG9mIHRoZXNlIHRoaW5ncy4KLVlvdSBuZWVkIHRvIGRlY2xhcmUgdGhlIGxleGljYWwgYW5hbHl6ZXIgQGNvZGV7eXlsZXh9IGFuZCB0aGUgZXJyb3IKLXByaW50ZXIgQGNvZGV7eXllcnJvcn0gaGVyZSwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZ2xvYmFsIGlkZW50aWZpZXJzCi11c2VkIGJ5IHRoZSBhY3Rpb25zIGluIHRoZSBncmFtbWFyIHJ1bGVzLgotCi1UaGUgQmlzb24gZGVjbGFyYXRpb25zIGRlY2xhcmUgdGhlIG5hbWVzIG9mIHRoZSB0ZXJtaW5hbCBhbmQgbm9udGVybWluYWwKLXN5bWJvbHMsIGFuZCBtYXkgYWxzbyBkZXNjcmliZSBvcGVyYXRvciBwcmVjZWRlbmNlIGFuZCB0aGUgZGF0YSB0eXBlcyBvZgotc2VtYW50aWMgdmFsdWVzIG9mIHZhcmlvdXMgc3ltYm9scy4KLQotVGhlIGdyYW1tYXIgcnVsZXMgZGVmaW5lIGhvdyB0byBjb25zdHJ1Y3QgZWFjaCBub250ZXJtaW5hbCBzeW1ib2wgZnJvbSBpdHMKLXBhcnRzLgotCi1UaGUgZXBpbG9ndWUgY2FuIGNvbnRhaW4gYW55IGNvZGUgeW91IHdhbnQgdG8gdXNlLiAgT2Z0ZW4gdGhlCi1kZWZpbml0aW9ucyBvZiBmdW5jdGlvbnMgZGVjbGFyZWQgaW4gdGhlIHByb2xvZ3VlIGdvIGhlcmUuICBJbiBhCi1zaW1wbGUgcHJvZ3JhbSwgYWxsIHRoZSByZXN0IG9mIHRoZSBwcm9ncmFtIGNhbiBnbyBoZXJlLgotCi1Abm9kZSBFeGFtcGxlcwotQGNoYXB0ZXIgRXhhbXBsZXMKLUBjaW5kZXggc2ltcGxlIGV4YW1wbGVzCi1AY2luZGV4IGV4YW1wbGVzLCBzaW1wbGUKLQotTm93IHdlIHNob3cgYW5kIGV4cGxhaW4gdGhyZWUgc2FtcGxlIHByb2dyYW1zIHdyaXR0ZW4gdXNpbmcgQmlzb246IGEKLXJldmVyc2UgcG9saXNoIG5vdGF0aW9uIGNhbGN1bGF0b3IsIGFuIGFsZ2VicmFpYyAoaW5maXgpIG5vdGF0aW9uCi1jYWxjdWxhdG9yLCBhbmQgYSBtdWx0aS1mdW5jdGlvbiBjYWxjdWxhdG9yLiAgQWxsIHRocmVlIGhhdmUgYmVlbiB0ZXN0ZWQKLXVuZGVyIEJTRCBVbml4IDQuMzsgZWFjaCBwcm9kdWNlcyBhIHVzYWJsZSwgdGhvdWdoIGxpbWl0ZWQsIGludGVyYWN0aXZlCi1kZXNrLXRvcCBjYWxjdWxhdG9yLgotCi1UaGVzZSBleGFtcGxlcyBhcmUgc2ltcGxlLCBidXQgQmlzb24gZ3JhbW1hcnMgZm9yIHJlYWwgcHJvZ3JhbW1pbmcKLWxhbmd1YWdlcyBhcmUgd3JpdHRlbiB0aGUgc2FtZSB3YXkuICBZb3UgY2FuIGNvcHkgdGhlc2UgZXhhbXBsZXMgaW50byBhCi1zb3VyY2UgZmlsZSB0byB0cnkgdGhlbS4KLQotQG1lbnUKLSogUlBOIENhbGM6OiAgICAgICAgICBSZXZlcnNlIHBvbGlzaCBub3RhdGlvbiBjYWxjdWxhdG9yOwotICAgICAgICAgICAgICAgICAgICAgICAgYSBmaXJzdCBleGFtcGxlIHdpdGggbm8gb3BlcmF0b3IgcHJlY2VkZW5jZS4KLSogSW5maXggQ2FsYzo6ICAgICAgICBJbmZpeCAoYWxnZWJyYWljKSBub3RhdGlvbiBjYWxjdWxhdG9yLgotICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3IgcHJlY2VkZW5jZSBpcyBpbnRyb2R1Y2VkLgotKiBTaW1wbGUgRXJyb3IgUmVjb3Zlcnk6OiAgQ29udGludWluZyBhZnRlciBzeW50YXggZXJyb3JzLgotKiBMb2NhdGlvbiBUcmFja2luZyBDYWxjOjogRGVtb25zdHJhdGluZyB0aGUgdXNlIG9mIEBAQHZhcntufSBhbmQgQEAkLgotKiBNdWx0aS1mdW5jdGlvbiBDYWxjOjogIENhbGN1bGF0b3Igd2l0aCBtZW1vcnkgYW5kIHRyaWcgZnVuY3Rpb25zLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgdXNlcyBtdWx0aXBsZSBkYXRhLXR5cGVzIGZvciBzZW1hbnRpYyB2YWx1ZXMuCi0qIEV4ZXJjaXNlczo6ICAgICAgICAgSWRlYXMgZm9yIGltcHJvdmluZyB0aGUgbXVsdGktZnVuY3Rpb24gY2FsY3VsYXRvci4KLUBlbmQgbWVudQotCi1Abm9kZSBSUE4gQ2FsYwotQHNlY3Rpb24gUmV2ZXJzZSBQb2xpc2ggTm90YXRpb24gQ2FsY3VsYXRvcgotQGNpbmRleCByZXZlcnNlIHBvbGlzaCBub3RhdGlvbgotQGNpbmRleCBwb2xpc2ggbm90YXRpb24gY2FsY3VsYXRvcgotQGNpbmRleCBAY29kZXtycGNhbGN9Ci1AY2luZGV4IGNhbGN1bGF0b3IsIHNpbXBsZQotCi1UaGUgZmlyc3QgZXhhbXBsZSBpcyB0aGF0IG9mIGEgc2ltcGxlIGRvdWJsZS1wcmVjaXNpb24gQGRmbntyZXZlcnNlIHBvbGlzaAotbm90YXRpb259IGNhbGN1bGF0b3IgKGEgY2FsY3VsYXRvciB1c2luZyBwb3N0Zml4IG9wZXJhdG9ycykuICBUaGlzIGV4YW1wbGUKLXByb3ZpZGVzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgc2luY2Ugb3BlcmF0b3IgcHJlY2VkZW5jZSBpcyBub3QgYW4gaXNzdWUuCi1UaGUgc2Vjb25kIGV4YW1wbGUgd2lsbCBpbGx1c3RyYXRlIGhvdyBvcGVyYXRvciBwcmVjZWRlbmNlIGlzIGhhbmRsZWQuCi0KLVRoZSBzb3VyY2UgY29kZSBmb3IgdGhpcyBjYWxjdWxhdG9yIGlzIG5hbWVkIEBmaWxle3JwY2FsYy55fS4gIFRoZQotQHNhbXB7Lnl9IGV4dGVuc2lvbiBpcyBhIGNvbnZlbnRpb24gdXNlZCBmb3IgQmlzb24gaW5wdXQgZmlsZXMuCi0KLUBtZW51Ci0qIERlY2xzOiBScGNhbGMgRGVjbHMuICBQcm9sb2d1ZSAoZGVjbGFyYXRpb25zKSBmb3IgcnBjYWxjLgotKiBSdWxlczogUnBjYWxjIFJ1bGVzLiAgR3JhbW1hciBSdWxlcyBmb3IgcnBjYWxjLCB3aXRoIGV4cGxhbmF0aW9uLgotKiBMZXhlcjogUnBjYWxjIExleGVyLiAgVGhlIGxleGljYWwgYW5hbHl6ZXIuCi0qIE1haW46IFJwY2FsYyBNYWluLiAgICBUaGUgY29udHJvbGxpbmcgZnVuY3Rpb24uCi0qIEVycm9yOiBScGNhbGMgRXJyb3IuICBUaGUgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLgotKiBHZW46IFJwY2FsYyBHZW4uICAgICAgUnVubmluZyBCaXNvbiBvbiB0aGUgZ3JhbW1hciBmaWxlLgotKiBDb21wOiBScGNhbGMgQ29tcGlsZS4gUnVuIHRoZSBDIGNvbXBpbGVyIG9uIHRoZSBvdXRwdXQgY29kZS4KLUBlbmQgbWVudQotCi1Abm9kZSBScGNhbGMgRGVjbHMKLUBzdWJzZWN0aW9uIERlY2xhcmF0aW9ucyBmb3IgQGNvZGV7cnBjYWxjfQotCi1IZXJlIGFyZSB0aGUgQyBhbmQgQmlzb24gZGVjbGFyYXRpb25zIGZvciB0aGUgcmV2ZXJzZSBwb2xpc2ggbm90YXRpb24KLWNhbGN1bGF0b3IuICBBcyBpbiBDLCBjb21tZW50cyBhcmUgcGxhY2VkIGJldHdlZW4gQHNhbXB7LypAZG90c3t9Ki99LgotCi1AZXhhbXBsZQotLyogUmV2ZXJzZSBwb2xpc2ggbm90YXRpb24gY2FsY3VsYXRvci4gICovCi0KLSVAewotICAjZGVmaW5lIFlZU1RZUEUgZG91YmxlCi0gICNpbmNsdWRlIDxtYXRoLmg+Ci0gIGludCB5eWxleCAodm9pZCk7Ci0gIHZvaWQgeXllcnJvciAoY2hhciBjb25zdCAqKTsKLSVAfQotCi0ldG9rZW4gTlVNCi0KLSUlIC8qIEdyYW1tYXIgcnVsZXMgYW5kIGFjdGlvbnMgZm9sbG93LiAgKi8KLUBlbmQgZXhhbXBsZQotCi1UaGUgZGVjbGFyYXRpb25zIHNlY3Rpb24gKEBweHJlZntQcm9sb2d1ZSwgLCBUaGUgcHJvbG9ndWV9KSBjb250YWlucyB0d28KLXByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGFuZCB0d28gZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLVRoZSBAY29kZXsjZGVmaW5lfSBkaXJlY3RpdmUgZGVmaW5lcyB0aGUgbWFjcm8gQGNvZGV7WVlTVFlQRX0sIHRodXMKLXNwZWNpZnlpbmcgdGhlIEMgZGF0YSB0eXBlIGZvciBzZW1hbnRpYyB2YWx1ZXMgb2YgYm90aCB0b2tlbnMgYW5kCi1ncm91cGluZ3MgKEBweHJlZntWYWx1ZSBUeXBlLCAsRGF0YSBUeXBlcyBvZiBTZW1hbnRpYyBWYWx1ZXN9KS4gIFRoZQotQmlzb24gcGFyc2VyIHdpbGwgdXNlIHdoYXRldmVyIHR5cGUgQGNvZGV7WVlTVFlQRX0gaXMgZGVmaW5lZCBhczsgaWYgeW91Ci1kb24ndCBkZWZpbmUgaXQsIEBjb2Rle2ludH0gaXMgdGhlIGRlZmF1bHQuICBCZWNhdXNlIHdlIHNwZWNpZnkKLUBjb2Rle2RvdWJsZX0sIGVhY2ggdG9rZW4gYW5kIGVhY2ggZXhwcmVzc2lvbiBoYXMgYW4gYXNzb2NpYXRlZCB2YWx1ZSwKLXdoaWNoIGlzIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLgotCi1UaGUgQGNvZGV7I2luY2x1ZGV9IGRpcmVjdGl2ZSBpcyB1c2VkIHRvIGRlY2xhcmUgdGhlIGV4cG9uZW50aWF0aW9uCi1mdW5jdGlvbiBAY29kZXtwb3d9LgotCi1UaGUgZm9yd2FyZCBkZWNsYXJhdGlvbnMgZm9yIEBjb2Rle3l5bGV4fSBhbmQgQGNvZGV7eXllcnJvcn0gYXJlCi1uZWVkZWQgYmVjYXVzZSB0aGUgQyBsYW5ndWFnZSByZXF1aXJlcyB0aGF0IGZ1bmN0aW9ucyBiZSBkZWNsYXJlZAotYmVmb3JlIHRoZXkgYXJlIHVzZWQuICBUaGVzZSBmdW5jdGlvbnMgd2lsbCBiZSBkZWZpbmVkIGluIHRoZQotZXBpbG9ndWUsIGJ1dCB0aGUgcGFyc2VyIGNhbGxzIHRoZW0gc28gdGhleSBtdXN0IGJlIGRlY2xhcmVkIGluIHRoZQotcHJvbG9ndWUuCi0KLVRoZSBzZWNvbmQgc2VjdGlvbiwgQmlzb24gZGVjbGFyYXRpb25zLCBwcm92aWRlcyBpbmZvcm1hdGlvbiB0byBCaXNvbgotYWJvdXQgdGhlIHRva2VuIHR5cGVzIChAcHhyZWZ7Qmlzb24gRGVjbGFyYXRpb25zLCAsVGhlIEJpc29uCi1EZWNsYXJhdGlvbnMgU2VjdGlvbn0pLiAgRWFjaCB0ZXJtaW5hbCBzeW1ib2wgdGhhdCBpcyBub3QgYQotc2luZ2xlLWNoYXJhY3RlciBsaXRlcmFsIG11c3QgYmUgZGVjbGFyZWQgaGVyZS4gIChTaW5nbGUtY2hhcmFjdGVyCi1saXRlcmFscyBub3JtYWxseSBkb24ndCBuZWVkIHRvIGJlIGRlY2xhcmVkLikgIEluIHRoaXMgZXhhbXBsZSwgYWxsIHRoZQotYXJpdGhtZXRpYyBvcGVyYXRvcnMgYXJlIGRlc2lnbmF0ZWQgYnkgc2luZ2xlLWNoYXJhY3RlciBsaXRlcmFscywgc28gdGhlCi1vbmx5IHRlcm1pbmFsIHN5bWJvbCB0aGF0IG5lZWRzIHRvIGJlIGRlY2xhcmVkIGlzIEBjb2Rle05VTX0sIHRoZSB0b2tlbgotdHlwZSBmb3IgbnVtZXJpYyBjb25zdGFudHMuCi0KLUBub2RlIFJwY2FsYyBSdWxlcwotQHN1YnNlY3Rpb24gR3JhbW1hciBSdWxlcyBmb3IgQGNvZGV7cnBjYWxjfQotCi1IZXJlIGFyZSB0aGUgZ3JhbW1hciBydWxlcyBmb3IgdGhlIHJldmVyc2UgcG9saXNoIG5vdGF0aW9uIGNhbGN1bGF0b3IuCi0KLUBleGFtcGxlCi1pbnB1dDogICAgLyogZW1wdHkgKi8KLSAgICAgICAgfCBpbnB1dCBsaW5lCi07Ci0KLWxpbmU6ICAgICAnXG4nCi0gICAgICAgIHwgZXhwICdcbicgICAgICBAeyBwcmludGYgKCJcdCUuMTBnXG4iLCAkMSk7IEB9Ci07Ci0KLWV4cDogICAgICBOVU0gICAgICAgICAgIEB7ICQkID0gJDE7ICAgICAgICAgICBAfQotICAgICAgICB8IGV4cCBleHAgJysnICAgQHsgJCQgPSAkMSArICQyOyAgICAgIEB9Ci0gICAgICAgIHwgZXhwIGV4cCAnLScgICBAeyAkJCA9ICQxIC0gJDI7ICAgICAgQH0KLSAgICAgICAgfCBleHAgZXhwICcqJyAgIEB7ICQkID0gJDEgKiAkMjsgICAgICBAfQotICAgICAgICB8IGV4cCBleHAgJy8nICAgQHsgJCQgPSAkMSAvICQyOyAgICAgIEB9Ci0gICAgICAgICAvKiBFeHBvbmVudGlhdGlvbiAqLwotICAgICAgICB8IGV4cCBleHAgJ14nICAgQHsgJCQgPSBwb3cgKCQxLCAkMik7IEB9Ci0gICAgICAgICAvKiBVbmFyeSBtaW51cyAgICAqLwotICAgICAgICB8IGV4cCAnbicgICAgICAgQHsgJCQgPSAtJDE7ICAgICAgICAgIEB9Ci07Ci0lJQotQGVuZCBleGFtcGxlCi0KLVRoZSBncm91cGluZ3Mgb2YgdGhlIHJwY2FsYyBgYGxhbmd1YWdlJycgZGVmaW5lZCBoZXJlIGFyZSB0aGUgZXhwcmVzc2lvbgotKGdpdmVuIHRoZSBuYW1lIEBjb2Rle2V4cH0pLCB0aGUgbGluZSBvZiBpbnB1dCAoQGNvZGV7bGluZX0pLCBhbmQgdGhlCi1jb21wbGV0ZSBpbnB1dCB0cmFuc2NyaXB0IChAY29kZXtpbnB1dH0pLiAgRWFjaCBvZiB0aGVzZSBub250ZXJtaW5hbAotc3ltYm9scyBoYXMgc2V2ZXJhbCBhbHRlcm5hdGUgcnVsZXMsIGpvaW5lZCBieSB0aGUgdmVydGljYWwgYmFyIEBzYW1we3x9Ci13aGljaCBpcyByZWFkIGFzIGBgb3InJy4gIFRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZXhwbGFpbiB3aGF0IHRoZXNlIHJ1bGVzCi1tZWFuLgotCi1UaGUgc2VtYW50aWNzIG9mIHRoZSBsYW5ndWFnZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBhY3Rpb25zIHRha2VuIHdoZW4gYQotZ3JvdXBpbmcgaXMgcmVjb2duaXplZC4gIFRoZSBhY3Rpb25zIGFyZSB0aGUgQyBjb2RlIHRoYXQgYXBwZWFycyBpbnNpZGUKLWJyYWNlcy4gIEB4cmVme0FjdGlvbnN9LgotCi1Zb3UgbXVzdCBzcGVjaWZ5IHRoZXNlIGFjdGlvbnMgaW4gQywgYnV0IEJpc29uIHByb3ZpZGVzIHRoZSBtZWFucyBmb3IKLXBhc3Npbmcgc2VtYW50aWMgdmFsdWVzIGJldHdlZW4gdGhlIHJ1bGVzLiAgSW4gZWFjaCBhY3Rpb24sIHRoZQotcHNldWRvLXZhcmlhYmxlIEBjb2RleyQkfSBzdGFuZHMgZm9yIHRoZSBzZW1hbnRpYyB2YWx1ZSBmb3IgdGhlIGdyb3VwaW5nCi10aGF0IHRoZSBydWxlIGlzIGdvaW5nIHRvIGNvbnN0cnVjdC4gIEFzc2lnbmluZyBhIHZhbHVlIHRvIEBjb2RleyQkfSBpcyB0aGUKLW1haW4gam9iIG9mIG1vc3QgYWN0aW9ucy4gIFRoZSBzZW1hbnRpYyB2YWx1ZXMgb2YgdGhlIGNvbXBvbmVudHMgb2YgdGhlCi1ydWxlIGFyZSByZWZlcnJlZCB0byBhcyBAY29kZXskMX0sIEBjb2RleyQyfSwgYW5kIHNvIG9uLgotCi1AbWVudQotKiBScGNhbGMgSW5wdXQ6OgotKiBScGNhbGMgTGluZTo6Ci0qIFJwY2FsYyBFeHByOjoKLUBlbmQgbWVudQotCi1Abm9kZSBScGNhbGMgSW5wdXQKLUBzdWJzdWJzZWN0aW9uIEV4cGxhbmF0aW9uIG9mIEBjb2Rle2lucHV0fQotCi1Db25zaWRlciB0aGUgZGVmaW5pdGlvbiBvZiBAY29kZXtpbnB1dH06Ci0KLUBleGFtcGxlCi1pbnB1dDogICAgLyogZW1wdHkgKi8KLSAgICAgICAgfCBpbnB1dCBsaW5lCi07Ci1AZW5kIGV4YW1wbGUKLQotVGhpcyBkZWZpbml0aW9uIHJlYWRzIGFzIGZvbGxvd3M6IGBgQSBjb21wbGV0ZSBpbnB1dCBpcyBlaXRoZXIgYW4gZW1wdHkKLXN0cmluZywgb3IgYSBjb21wbGV0ZSBpbnB1dCBmb2xsb3dlZCBieSBhbiBpbnB1dCBsaW5lJycuICBOb3RpY2UgdGhhdAotYGBjb21wbGV0ZSBpbnB1dCcnIGlzIGRlZmluZWQgaW4gdGVybXMgb2YgaXRzZWxmLiAgVGhpcyBkZWZpbml0aW9uIGlzIHNhaWQKLXRvIGJlIEBkZm57bGVmdCByZWN1cnNpdmV9IHNpbmNlIEBjb2Rle2lucHV0fSBhcHBlYXJzIGFsd2F5cyBhcyB0aGUKLWxlZnRtb3N0IHN5bWJvbCBpbiB0aGUgc2VxdWVuY2UuICBAeHJlZntSZWN1cnNpb24sICxSZWN1cnNpdmUgUnVsZXN9LgotCi1UaGUgZmlyc3QgYWx0ZXJuYXRpdmUgaXMgZW1wdHkgYmVjYXVzZSB0aGVyZSBhcmUgbm8gc3ltYm9scyBiZXR3ZWVuIHRoZQotY29sb24gYW5kIHRoZSBmaXJzdCBAc2FtcHt8fTsgdGhpcyBtZWFucyB0aGF0IEBjb2Rle2lucHV0fSBjYW4gbWF0Y2ggYW4KLWVtcHR5IHN0cmluZyBvZiBpbnB1dCAobm8gdG9rZW5zKS4gIFdlIHdyaXRlIHRoZSBydWxlcyB0aGlzIHdheSBiZWNhdXNlIGl0Ci1pcyBsZWdpdGltYXRlIHRvIHR5cGUgQGtiZHtDdHJsLWR9IHJpZ2h0IGFmdGVyIHlvdSBzdGFydCB0aGUgY2FsY3VsYXRvci4KLUl0J3MgY29udmVudGlvbmFsIHRvIHB1dCBhbiBlbXB0eSBhbHRlcm5hdGl2ZSBmaXJzdCBhbmQgd3JpdGUgdGhlIGNvbW1lbnQKLUBzYW1wey8qIGVtcHR5ICovfSBpbiBpdC4KLQotVGhlIHNlY29uZCBhbHRlcm5hdGUgcnVsZSAoQGNvZGV7aW5wdXQgbGluZX0pIGhhbmRsZXMgYWxsIG5vbnRyaXZpYWwgaW5wdXQuCi1JdCBtZWFucywgYGBBZnRlciByZWFkaW5nIGFueSBudW1iZXIgb2YgbGluZXMsIHJlYWQgb25lIG1vcmUgbGluZSBpZgotcG9zc2libGUuJycgIFRoZSBsZWZ0IHJlY3Vyc2lvbiBtYWtlcyB0aGlzIHJ1bGUgaW50byBhIGxvb3AuICBTaW5jZSB0aGUKLWZpcnN0IGFsdGVybmF0aXZlIG1hdGNoZXMgZW1wdHkgaW5wdXQsIHRoZSBsb29wIGNhbiBiZSBleGVjdXRlZCB6ZXJvIG9yCi1tb3JlIHRpbWVzLgotCi1UaGUgcGFyc2VyIGZ1bmN0aW9uIEBjb2Rle3l5cGFyc2V9IGNvbnRpbnVlcyB0byBwcm9jZXNzIGlucHV0IHVudGlsIGEKLWdyYW1tYXRpY2FsIGVycm9yIGlzIHNlZW4gb3IgdGhlIGxleGljYWwgYW5hbHl6ZXIgc2F5cyB0aGVyZSBhcmUgbm8gbW9yZQotaW5wdXQgdG9rZW5zOyB3ZSB3aWxsIGFycmFuZ2UgZm9yIHRoZSBsYXR0ZXIgdG8gaGFwcGVuIGF0IGVuZC1vZi1pbnB1dC4KLQotQG5vZGUgUnBjYWxjIExpbmUKLUBzdWJzdWJzZWN0aW9uIEV4cGxhbmF0aW9uIG9mIEBjb2Rle2xpbmV9Ci0KLU5vdyBjb25zaWRlciB0aGUgZGVmaW5pdGlvbiBvZiBAY29kZXtsaW5lfToKLQotQGV4YW1wbGUKLWxpbmU6ICAgICAnXG4nCi0gICAgICAgIHwgZXhwICdcbicgIEB7IHByaW50ZiAoIlx0JS4xMGdcbiIsICQxKTsgQH0KLTsKLUBlbmQgZXhhbXBsZQotCi1UaGUgZmlyc3QgYWx0ZXJuYXRpdmUgaXMgYSB0b2tlbiB3aGljaCBpcyBhIG5ld2xpbmUgY2hhcmFjdGVyOyB0aGlzIG1lYW5zCi10aGF0IHJwY2FsYyBhY2NlcHRzIGEgYmxhbmsgbGluZSAoYW5kIGlnbm9yZXMgaXQsIHNpbmNlIHRoZXJlIGlzIG5vCi1hY3Rpb24pLiAgVGhlIHNlY29uZCBhbHRlcm5hdGl2ZSBpcyBhbiBleHByZXNzaW9uIGZvbGxvd2VkIGJ5IGEgbmV3bGluZS4KLVRoaXMgaXMgdGhlIGFsdGVybmF0aXZlIHRoYXQgbWFrZXMgcnBjYWxjIHVzZWZ1bC4gIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZgotdGhlIEBjb2Rle2V4cH0gZ3JvdXBpbmcgaXMgdGhlIHZhbHVlIG9mIEBjb2RleyQxfSBiZWNhdXNlIHRoZSBAY29kZXtleHB9IGluCi1xdWVzdGlvbiBpcyB0aGUgZmlyc3Qgc3ltYm9sIGluIHRoZSBhbHRlcm5hdGl2ZS4gIFRoZSBhY3Rpb24gcHJpbnRzIHRoaXMKLXZhbHVlLCB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBjb21wdXRhdGlvbiB0aGUgdXNlciBhc2tlZCBmb3IuCi0KLVRoaXMgYWN0aW9uIGlzIHVudXN1YWwgYmVjYXVzZSBpdCBkb2VzIG5vdCBhc3NpZ24gYSB2YWx1ZSB0byBAY29kZXskJH0uICBBcwotYSBjb25zZXF1ZW5jZSwgdGhlIHNlbWFudGljIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgQGNvZGV7bGluZX0gaXMKLXVuaW5pdGlhbGl6ZWQgKGl0cyB2YWx1ZSB3aWxsIGJlIHVucHJlZGljdGFibGUpLiAgVGhpcyB3b3VsZCBiZSBhIGJ1ZyBpZgotdGhhdCB2YWx1ZSB3ZXJlIGV2ZXIgdXNlZCwgYnV0IHdlIGRvbid0IHVzZSBpdDogb25jZSBycGNhbGMgaGFzIHByaW50ZWQgdGhlCi12YWx1ZSBvZiB0aGUgdXNlcidzIGlucHV0IGxpbmUsIHRoYXQgdmFsdWUgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KLQotQG5vZGUgUnBjYWxjIEV4cHIKLUBzdWJzdWJzZWN0aW9uIEV4cGxhbmF0aW9uIG9mIEBjb2Rle2V4cHJ9Ci0KLVRoZSBAY29kZXtleHB9IGdyb3VwaW5nIGhhcyBzZXZlcmFsIHJ1bGVzLCBvbmUgZm9yIGVhY2gga2luZCBvZiBleHByZXNzaW9uLgotVGhlIGZpcnN0IHJ1bGUgaGFuZGxlcyB0aGUgc2ltcGxlc3QgZXhwcmVzc2lvbnM6IHRob3NlIHRoYXQgYXJlIGp1c3QgbnVtYmVycy4KLVRoZSBzZWNvbmQgaGFuZGxlcyBhbiBhZGRpdGlvbi1leHByZXNzaW9uLCB3aGljaCBsb29rcyBsaWtlIHR3byBleHByZXNzaW9ucwotZm9sbG93ZWQgYnkgYSBwbHVzLXNpZ24uICBUaGUgdGhpcmQgaGFuZGxlcyBzdWJ0cmFjdGlvbiwgYW5kIHNvIG9uLgotCi1AZXhhbXBsZQotZXhwOiAgICAgIE5VTQotICAgICAgICB8IGV4cCBleHAgJysnICAgICBAeyAkJCA9ICQxICsgJDI7ICAgIEB9Ci0gICAgICAgIHwgZXhwIGV4cCAnLScgICAgIEB7ICQkID0gJDEgLSAkMjsgICAgQH0KLSAgICAgICAgQGRvdHN7fQotICAgICAgICA7Ci1AZW5kIGV4YW1wbGUKLQotV2UgaGF2ZSB1c2VkIEBzYW1we3x9IHRvIGpvaW4gYWxsIHRoZSBydWxlcyBmb3IgQGNvZGV7ZXhwfSwgYnV0IHdlIGNvdWxkCi1lcXVhbGx5IHdlbGwgaGF2ZSB3cml0dGVuIHRoZW0gc2VwYXJhdGVseToKLQotQGV4YW1wbGUKLWV4cDogICAgICBOVU0gOwotZXhwOiAgICAgIGV4cCBleHAgJysnICAgICBAeyAkJCA9ICQxICsgJDI7ICAgIEB9IDsKLWV4cDogICAgICBleHAgZXhwICctJyAgICAgQHsgJCQgPSAkMSAtICQyOyAgICBAfSA7Ci0gICAgICAgIEBkb3Rze30KLUBlbmQgZXhhbXBsZQotCi1Nb3N0IG9mIHRoZSBydWxlcyBoYXZlIGFjdGlvbnMgdGhhdCBjb21wdXRlIHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpbgotdGVybXMgb2YgdGhlIHZhbHVlIG9mIGl0cyBwYXJ0cy4gIEZvciBleGFtcGxlLCBpbiB0aGUgcnVsZSBmb3IgYWRkaXRpb24sCi1AY29kZXskMX0gcmVmZXJzIHRvIHRoZSBmaXJzdCBjb21wb25lbnQgQGNvZGV7ZXhwfSBhbmQgQGNvZGV7JDJ9IHJlZmVycyB0bwotdGhlIHNlY29uZCBvbmUuICBUaGUgdGhpcmQgY29tcG9uZW50LCBAY29kZXsnKyd9LCBoYXMgbm8gbWVhbmluZ2Z1bAotYXNzb2NpYXRlZCBzZW1hbnRpYyB2YWx1ZSwgYnV0IGlmIGl0IGhhZCBvbmUgeW91IGNvdWxkIHJlZmVyIHRvIGl0IGFzCi1AY29kZXskM30uICBXaGVuIEBjb2Rle3l5cGFyc2V9IHJlY29nbml6ZXMgYSBzdW0gZXhwcmVzc2lvbiB1c2luZyB0aGlzCi1ydWxlLCB0aGUgc3VtIG9mIHRoZSB0d28gc3ViZXhwcmVzc2lvbnMnIHZhbHVlcyBpcyBwcm9kdWNlZCBhcyB0aGUgdmFsdWUgb2YKLXRoZSBlbnRpcmUgZXhwcmVzc2lvbi4gIEB4cmVme0FjdGlvbnN9LgotCi1Zb3UgZG9uJ3QgaGF2ZSB0byBnaXZlIGFuIGFjdGlvbiBmb3IgZXZlcnkgcnVsZS4gIFdoZW4gYSBydWxlIGhhcyBubwotYWN0aW9uLCBCaXNvbiBieSBkZWZhdWx0IGNvcGllcyB0aGUgdmFsdWUgb2YgQGNvZGV7JDF9IGludG8gQGNvZGV7JCR9LgotVGhpcyBpcyB3aGF0IGhhcHBlbnMgaW4gdGhlIGZpcnN0IHJ1bGUgKHRoZSBvbmUgdGhhdCB1c2VzIEBjb2Rle05VTX0pLgotCi1UaGUgZm9ybWF0dGluZyBzaG93biBoZXJlIGlzIHRoZSByZWNvbW1lbmRlZCBjb252ZW50aW9uLCBidXQgQmlzb24gZG9lcwotbm90IHJlcXVpcmUgaXQuICBZb3UgY2FuIGFkZCBvciBjaGFuZ2Ugd2hpdGUgc3BhY2UgYXMgbXVjaCBhcyB5b3Ugd2lzaC4KLUZvciBleGFtcGxlLCB0aGlzOgotCi1AZXhhbXBsZQotZXhwICAgOiBOVU0gfCBleHAgZXhwICcrJyBAeyQkID0gJDEgKyAkMjsgQH0gfCBAZG90c3t9IDsKLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLW1lYW5zIHRoZSBzYW1lIHRoaW5nIGFzIHRoaXM6Ci0KLUBleGFtcGxlCi1leHA6ICAgICAgTlVNCi0gICAgICAgIHwgZXhwIGV4cCAnKycgICAgQHsgJCQgPSAkMSArICQyOyBAfQotICAgICAgICB8IEBkb3Rze30KLTsKLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLVRoZSBsYXR0ZXIsIGhvd2V2ZXIsIGlzIG11Y2ggbW9yZSByZWFkYWJsZS4KLQotQG5vZGUgUnBjYWxjIExleGVyCi1Ac3Vic2VjdGlvbiBUaGUgQGNvZGV7cnBjYWxjfSBMZXhpY2FsIEFuYWx5emVyCi1AY2luZGV4IHdyaXRpbmcgYSBsZXhpY2FsIGFuYWx5emVyCi1AY2luZGV4IGxleGljYWwgYW5hbHl6ZXIsIHdyaXRpbmcKLQotVGhlIGxleGljYWwgYW5hbHl6ZXIncyBqb2IgaXMgbG93LWxldmVsIHBhcnNpbmc6IGNvbnZlcnRpbmcgY2hhcmFjdGVycwotb3Igc2VxdWVuY2VzIG9mIGNoYXJhY3RlcnMgaW50byB0b2tlbnMuICBUaGUgQmlzb24gcGFyc2VyIGdldHMgaXRzCi10b2tlbnMgYnkgY2FsbGluZyB0aGUgbGV4aWNhbCBhbmFseXplci4gIEB4cmVme0xleGljYWwsICxUaGUgTGV4aWNhbAotQW5hbHl6ZXIgRnVuY3Rpb24gQGNvZGV7eXlsZXh9fS4KLQotT25seSBhIHNpbXBsZSBsZXhpY2FsIGFuYWx5emVyIGlzIG5lZWRlZCBmb3IgdGhlIEBhY3Jvbnlte1JQTn0KLWNhbGN1bGF0b3IuICBUaGlzCi1sZXhpY2FsIGFuYWx5emVyIHNraXBzIGJsYW5rcyBhbmQgdGFicywgdGhlbiByZWFkcyBpbiBudW1iZXJzIGFzCi1AY29kZXtkb3VibGV9IGFuZCByZXR1cm5zIHRoZW0gYXMgQGNvZGV7TlVNfSB0b2tlbnMuICBBbnkgb3RoZXIgY2hhcmFjdGVyCi10aGF0IGlzbid0IHBhcnQgb2YgYSBudW1iZXIgaXMgYSBzZXBhcmF0ZSB0b2tlbi4gIE5vdGUgdGhhdCB0aGUgdG9rZW4tY29kZQotZm9yIHN1Y2ggYSBzaW5nbGUtY2hhcmFjdGVyIHRva2VuIGlzIHRoZSBjaGFyYWN0ZXIgaXRzZWxmLgotCi1UaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBsZXhpY2FsIGFuYWx5emVyIGZ1bmN0aW9uIGlzIGEgbnVtZXJpYyBjb2RlIHdoaWNoCi1yZXByZXNlbnRzIGEgdG9rZW4gdHlwZS4gIFRoZSBzYW1lIHRleHQgdXNlZCBpbiBCaXNvbiBydWxlcyB0byBzdGFuZCBmb3IKLXRoaXMgdG9rZW4gdHlwZSBpcyBhbHNvIGEgQyBleHByZXNzaW9uIGZvciB0aGUgbnVtZXJpYyBjb2RlIGZvciB0aGUgdHlwZS4KLVRoaXMgd29ya3MgaW4gdHdvIHdheXMuICBJZiB0aGUgdG9rZW4gdHlwZSBpcyBhIGNoYXJhY3RlciBsaXRlcmFsLCB0aGVuIGl0cwotbnVtZXJpYyBjb2RlIGlzIHRoYXQgb2YgdGhlIGNoYXJhY3RlcjsgeW91IGNhbiB1c2UgdGhlIHNhbWUKLWNoYXJhY3RlciBsaXRlcmFsIGluIHRoZSBsZXhpY2FsIGFuYWx5emVyIHRvIGV4cHJlc3MgdGhlIG51bWJlci4gIElmIHRoZQotdG9rZW4gdHlwZSBpcyBhbiBpZGVudGlmaWVyLCB0aGF0IGlkZW50aWZpZXIgaXMgZGVmaW5lZCBieSBCaXNvbiBhcyBhIEMKLW1hY3JvIHdob3NlIGRlZmluaXRpb24gaXMgdGhlIGFwcHJvcHJpYXRlIG51bWJlci4gIEluIHRoaXMgZXhhbXBsZSwKLXRoZXJlZm9yZSwgQGNvZGV7TlVNfSBiZWNvbWVzIGEgbWFjcm8gZm9yIEBjb2Rle3l5bGV4fSB0byB1c2UuCi0KLVRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgdG9rZW4gKGlmIGl0IGhhcyBvbmUpIGlzIHN0b3JlZCBpbnRvIHRoZQotZ2xvYmFsIHZhcmlhYmxlIEBjb2Rle3l5bHZhbH0sIHdoaWNoIGlzIHdoZXJlIHRoZSBCaXNvbiBwYXJzZXIgd2lsbCBsb29rCi1mb3IgaXQuICAoVGhlIEMgZGF0YSB0eXBlIG9mIEBjb2Rle3l5bHZhbH0gaXMgQGNvZGV7WVlTVFlQRX0sIHdoaWNoIHdhcwotZGVmaW5lZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBncmFtbWFyOyBAcHhyZWZ7UnBjYWxjIERlY2xzLAotLERlY2xhcmF0aW9ucyBmb3IgQGNvZGV7cnBjYWxjfX0uKQotCi1BIHRva2VuIHR5cGUgY29kZSBvZiB6ZXJvIGlzIHJldHVybmVkIGlmIHRoZSBlbmQtb2YtaW5wdXQgaXMgZW5jb3VudGVyZWQuCi0oQmlzb24gcmVjb2duaXplcyBhbnkgbm9ucG9zaXRpdmUgdmFsdWUgYXMgaW5kaWNhdGluZyBlbmQtb2YtaW5wdXQuKQotCi1IZXJlIGlzIHRoZSBjb2RlIGZvciB0aGUgbGV4aWNhbCBhbmFseXplcjoKLQotQGV4YW1wbGUKLUBncm91cAotLyogVGhlIGxleGljYWwgYW5hbHl6ZXIgcmV0dXJucyBhIGRvdWJsZSBmbG9hdGluZyBwb2ludAotICAgbnVtYmVyIG9uIHRoZSBzdGFjayBhbmQgdGhlIHRva2VuIE5VTSwgb3IgdGhlIG51bWVyaWMgY29kZQotICAgb2YgdGhlIGNoYXJhY3RlciByZWFkIGlmIG5vdCBhIG51bWJlci4gIEl0IHNraXBzIGFsbCBibGFua3MKLSAgIGFuZCB0YWJzLCBhbmQgcmV0dXJucyAwIGZvciBlbmQtb2YtaW5wdXQuICAqLwotCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLUBlbmQgZ3JvdXAKLQotQGdyb3VwCi1pbnQKLXl5bGV4ICh2b2lkKQotQHsKLSAgaW50IGM7Ci0KLSAgLyogU2tpcCB3aGl0ZSBzcGFjZS4gICovCi0gIHdoaWxlICgoYyA9IGdldGNoYXIgKCkpID09ICcgJyB8fCBjID09ICdcdCcpCi0gICAgOwotQGVuZCBncm91cAotQGdyb3VwCi0gIC8qIFByb2Nlc3MgbnVtYmVycy4gICovCi0gIGlmIChjID09ICcuJyB8fCBpc2RpZ2l0IChjKSkKLSAgICBAewotICAgICAgdW5nZXRjIChjLCBzdGRpbik7Ci0gICAgICBzY2FuZiAoIiVsZiIsICZ5eWx2YWwpOwotICAgICAgcmV0dXJuIE5VTTsKLSAgICBAfQotQGVuZCBncm91cAotQGdyb3VwCi0gIC8qIFJldHVybiBlbmQtb2YtaW5wdXQuICAqLwotICBpZiAoYyA9PSBFT0YpCi0gICAgcmV0dXJuIDA7Ci0gIC8qIFJldHVybiBhIHNpbmdsZSBjaGFyLiAgKi8KLSAgcmV0dXJuIGM7Ci1AfQotQGVuZCBncm91cAotQGVuZCBleGFtcGxlCi0KLUBub2RlIFJwY2FsYyBNYWluCi1Ac3Vic2VjdGlvbiBUaGUgQ29udHJvbGxpbmcgRnVuY3Rpb24KLUBjaW5kZXggY29udHJvbGxpbmcgZnVuY3Rpb24KLUBjaW5kZXggbWFpbiBmdW5jdGlvbiBpbiBzaW1wbGUgZXhhbXBsZQotCi1JbiBrZWVwaW5nIHdpdGggdGhlIHNwaXJpdCBvZiB0aGlzIGV4YW1wbGUsIHRoZSBjb250cm9sbGluZyBmdW5jdGlvbiBpcwota2VwdCB0byB0aGUgYmFyZSBtaW5pbXVtLiAgVGhlIG9ubHkgcmVxdWlyZW1lbnQgaXMgdGhhdCBpdCBjYWxsCi1AY29kZXt5eXBhcnNlfSB0byBzdGFydCB0aGUgcHJvY2VzcyBvZiBwYXJzaW5nLgotCi1AZXhhbXBsZQotQGdyb3VwCi1pbnQKLW1haW4gKHZvaWQpCi1AewotICByZXR1cm4geXlwYXJzZSAoKTsKLUB9Ci1AZW5kIGdyb3VwCi1AZW5kIGV4YW1wbGUKLQotQG5vZGUgUnBjYWxjIEVycm9yCi1Ac3Vic2VjdGlvbiBUaGUgRXJyb3IgUmVwb3J0aW5nIFJvdXRpbmUKLUBjaW5kZXggZXJyb3IgcmVwb3J0aW5nIHJvdXRpbmUKLQotV2hlbiBAY29kZXt5eXBhcnNlfSBkZXRlY3RzIGEgc3ludGF4IGVycm9yLCBpdCBjYWxscyB0aGUgZXJyb3IgcmVwb3J0aW5nCi1mdW5jdGlvbiBAY29kZXt5eWVycm9yfSB0byBwcmludCBhbiBlcnJvciBtZXNzYWdlICh1c3VhbGx5IGJ1dCBub3QKLWFsd2F5cyBAY29kZXsic3ludGF4IGVycm9yIn0pLiAgSXQgaXMgdXAgdG8gdGhlIHByb2dyYW1tZXIgdG8gc3VwcGx5Ci1AY29kZXt5eWVycm9yfSAoQHB4cmVme0ludGVyZmFjZSwgLFBhcnNlciBDLUxhbmd1YWdlIEludGVyZmFjZX0pLCBzbwotaGVyZSBpcyB0aGUgZGVmaW5pdGlvbiB3ZSB3aWxsIHVzZToKLQotQGV4YW1wbGUKLUBncm91cAotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLS8qIENhbGxlZCBieSB5eXBhcnNlIG9uIGVycm9yLiAgKi8KLXZvaWQKLXl5ZXJyb3IgKGNoYXIgY29uc3QgKnMpCi1AewotICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgcyk7Ci1AfQotQGVuZCBncm91cAotQGVuZCBleGFtcGxlCi0KLUFmdGVyIEBjb2Rle3l5ZXJyb3J9IHJldHVybnMsIHRoZSBCaXNvbiBwYXJzZXIgbWF5IHJlY292ZXIgZnJvbSB0aGUgZXJyb3IKLWFuZCBjb250aW51ZSBwYXJzaW5nIGlmIHRoZSBncmFtbWFyIGNvbnRhaW5zIGEgc3VpdGFibGUgZXJyb3IgcnVsZQotKEBweHJlZntFcnJvciBSZWNvdmVyeX0pLiAgT3RoZXJ3aXNlLCBAY29kZXt5eXBhcnNlfSByZXR1cm5zIG5vbnplcm8uICBXZQotaGF2ZSBub3Qgd3JpdHRlbiBhbnkgZXJyb3IgcnVsZXMgaW4gdGhpcyBleGFtcGxlLCBzbyBhbnkgaW52YWxpZCBpbnB1dCB3aWxsCi1jYXVzZSB0aGUgY2FsY3VsYXRvciBwcm9ncmFtIHRvIGV4aXQuICBUaGlzIGlzIG5vdCBjbGVhbiBiZWhhdmlvciBmb3IgYQotcmVhbCBjYWxjdWxhdG9yLCBidXQgaXQgaXMgYWRlcXVhdGUgZm9yIHRoZSBmaXJzdCBleGFtcGxlLgotCi1Abm9kZSBScGNhbGMgR2VuCi1Ac3Vic2VjdGlvbiBSdW5uaW5nIEJpc29uIHRvIE1ha2UgdGhlIFBhcnNlcgotQGNpbmRleCBydW5uaW5nIEJpc29uIChpbnRyb2R1Y3Rpb24pCi0KLUJlZm9yZSBydW5uaW5nIEJpc29uIHRvIHByb2R1Y2UgYSBwYXJzZXIsIHdlIG5lZWQgdG8gZGVjaWRlIGhvdyB0bwotYXJyYW5nZSBhbGwgdGhlIHNvdXJjZSBjb2RlIGluIG9uZSBvciBtb3JlIHNvdXJjZSBmaWxlcy4gIEZvciBzdWNoIGEKLXNpbXBsZSBleGFtcGxlLCB0aGUgZWFzaWVzdCB0aGluZyBpcyB0byBwdXQgZXZlcnl0aGluZyBpbiBvbmUgZmlsZS4gIFRoZQotZGVmaW5pdGlvbnMgb2YgQGNvZGV7eXlsZXh9LCBAY29kZXt5eWVycm9yfSBhbmQgQGNvZGV7bWFpbn0gZ28gYXQgdGhlCi1lbmQsIGluIHRoZSBlcGlsb2d1ZSBvZiB0aGUgZmlsZQotKEBweHJlZntHcmFtbWFyIExheW91dCwgLFRoZSBPdmVyYWxsIExheW91dCBvZiBhIEJpc29uIEdyYW1tYXJ9KS4KLQotRm9yIGEgbGFyZ2UgcHJvamVjdCwgeW91IHdvdWxkIHByb2JhYmx5IGhhdmUgc2V2ZXJhbCBzb3VyY2UgZmlsZXMsIGFuZCB1c2UKLUBjb2Rle21ha2V9IHRvIGFycmFuZ2UgdG8gcmVjb21waWxlIHRoZW0uCi0KLVdpdGggYWxsIHRoZSBzb3VyY2UgaW4gYSBzaW5nbGUgZmlsZSwgeW91IHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8KLWNvbnZlcnQgaXQgaW50byBhIHBhcnNlciBmaWxlOgotCi1AZXhhbXBsZQotYmlzb24gQHZhcntmaWxlfS55Ci1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci1JbiB0aGlzIGV4YW1wbGUgdGhlIGZpbGUgd2FzIGNhbGxlZCBAZmlsZXtycGNhbGMueX0gKGZvciBgYFJldmVyc2UgUG9saXNoCi1Ac2N7Y2FsY311bGF0b3InJykuICBCaXNvbiBwcm9kdWNlcyBhIGZpbGUgbmFtZWQgQGZpbGV7QHZhcntmaWxlfS50YWIuY30sCi1yZW1vdmluZyB0aGUgQHNhbXB7Lnl9IGZyb20gdGhlIG9yaWdpbmFsIGZpbGUgbmFtZS4gIFRoZSBmaWxlIG91dHB1dCBieQotQmlzb24gY29udGFpbnMgdGhlIHNvdXJjZSBjb2RlIGZvciBAY29kZXt5eXBhcnNlfS4gIFRoZSBhZGRpdGlvbmFsCi1mdW5jdGlvbnMgaW4gdGhlIGlucHV0IGZpbGUgKEBjb2Rle3l5bGV4fSwgQGNvZGV7eXllcnJvcn0gYW5kIEBjb2Rle21haW59KQotYXJlIGNvcGllZCB2ZXJiYXRpbSB0byB0aGUgb3V0cHV0LgotCi1Abm9kZSBScGNhbGMgQ29tcGlsZQotQHN1YnNlY3Rpb24gQ29tcGlsaW5nIHRoZSBQYXJzZXIgRmlsZQotQGNpbmRleCBjb21waWxpbmcgdGhlIHBhcnNlcgotCi1IZXJlIGlzIGhvdyB0byBjb21waWxlIGFuZCBydW4gdGhlIHBhcnNlciBmaWxlOgotCi1AZXhhbXBsZQotQGdyb3VwCi0jIEBye0xpc3QgZmlsZXMgaW4gY3VycmVudCBkaXJlY3RvcnkufQotJCBAa2Jke2xzfQotcnBjYWxjLnRhYi5jICBycGNhbGMueQotQGVuZCBncm91cAotCi1AZ3JvdXAKLSMgQHJ7Q29tcGlsZSB0aGUgQmlzb24gcGFyc2VyLn0KLSMgQHJ7QHNhbXB7LWxtfSB0ZWxscyBjb21waWxlciB0byBzZWFyY2ggbWF0aCBsaWJyYXJ5IGZvciBAY29kZXtwb3d9Ln0KLSQgQGtiZHtjYyAtbG0gLW8gcnBjYWxjIHJwY2FsYy50YWIuY30KLUBlbmQgZ3JvdXAKLQotQGdyb3VwCi0jIEBye0xpc3QgZmlsZXMgYWdhaW4ufQotJCBAa2Jke2xzfQotcnBjYWxjICBycGNhbGMudGFiLmMgIHJwY2FsYy55Ci1AZW5kIGdyb3VwCi1AZW5kIGV4YW1wbGUKLQotVGhlIGZpbGUgQGZpbGV7cnBjYWxjfSBub3cgY29udGFpbnMgdGhlIGV4ZWN1dGFibGUgY29kZS4gIEhlcmUgaXMgYW4KLWV4YW1wbGUgc2Vzc2lvbiB1c2luZyBAY29kZXtycGNhbGN9LgotCi1AZXhhbXBsZQotJCBAa2Jke3JwY2FsY30KLUBrYmR7NCA5ICt9Ci0xMwotQGtiZHszIDcgKyAzIDQgNSAqKy19Ci0tMTMKLUBrYmR7MyA3ICsgMyA0IDUgKiArIC0gbn0gICAgICAgICAgICAgIEBye05vdGUgdGhlIHVuYXJ5IG1pbnVzLCBAc2FtcHtufX0KLTEzCi1Aa2JkezUgNiAvIDQgbiArfQotLTMuMTY2NjY2NjY3Ci1Aa2JkezMgNCBefSAgICAgICAgICAgICAgICAgICAgICAgICAgICBAcntFeHBvbmVudGlhdGlvbn0KLTgxCi1Aa2Jke15EfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAcntFbmQtb2YtZmlsZSBpbmRpY2F0b3J9Ci0kCi1AZW5kIGV4YW1wbGUKLQotQG5vZGUgSW5maXggQ2FsYwotQHNlY3Rpb24gSW5maXggTm90YXRpb24gQ2FsY3VsYXRvcjogQGNvZGV7Y2FsY30KLUBjaW5kZXggaW5maXggbm90YXRpb24gY2FsY3VsYXRvcgotQGNpbmRleCBAY29kZXtjYWxjfQotQGNpbmRleCBjYWxjdWxhdG9yLCBpbmZpeCBub3RhdGlvbgotCi1XZSBub3cgbW9kaWZ5IHJwY2FsYyB0byBoYW5kbGUgaW5maXggb3BlcmF0b3JzIGluc3RlYWQgb2YgcG9zdGZpeC4gIEluZml4Ci1ub3RhdGlvbiBpbnZvbHZlcyB0aGUgY29uY2VwdCBvZiBvcGVyYXRvciBwcmVjZWRlbmNlIGFuZCB0aGUgbmVlZCBmb3IKLXBhcmVudGhlc2VzIG5lc3RlZCB0byBhcmJpdHJhcnkgZGVwdGguICBIZXJlIGlzIHRoZSBCaXNvbiBjb2RlIGZvcgotQGZpbGV7Y2FsYy55fSwgYW4gaW5maXggZGVzay10b3AgY2FsY3VsYXRvci4KLQotQGV4YW1wbGUKLS8qIEluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3IuICAqLwotCi0lQHsKLSAgI2RlZmluZSBZWVNUWVBFIGRvdWJsZQotICAjaW5jbHVkZSA8bWF0aC5oPgotICAjaW5jbHVkZSA8c3RkaW8uaD4KLSAgaW50IHl5bGV4ICh2b2lkKTsKLSAgdm9pZCB5eWVycm9yIChjaGFyIGNvbnN0ICopOwotJUB9Ci0KLS8qIEJpc29uIGRlY2xhcmF0aW9ucy4gICovCi0ldG9rZW4gTlVNCi0lbGVmdCAnLScgJysnCi0lbGVmdCAnKicgJy8nCi0lbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLwotJXJpZ2h0ICdeJyAgICAvKiBleHBvbmVudGlhdGlvbiAqLwotCi0lJSAvKiBUaGUgZ3JhbW1hciBmb2xsb3dzLiAgKi8KLWlucHV0OiAgICAvKiBlbXB0eSAqLwotICAgICAgICB8IGlucHV0IGxpbmUKLTsKLQotbGluZTogICAgICdcbicKLSAgICAgICAgfCBleHAgJ1xuJyAgQHsgcHJpbnRmICgiXHQlLjEwZ1xuIiwgJDEpOyBAfQotOwotCi1leHA6ICAgICAgTlVNICAgICAgICAgICAgICAgIEB7ICQkID0gJDE7ICAgICAgICAgQH0KLSAgICAgICAgfCBleHAgJysnIGV4cCAgICAgICAgQHsgJCQgPSAkMSArICQzOyAgICBAfQotICAgICAgICB8IGV4cCAnLScgZXhwICAgICAgICBAeyAkJCA9ICQxIC0gJDM7ICAgIEB9Ci0gICAgICAgIHwgZXhwICcqJyBleHAgICAgICAgIEB7ICQkID0gJDEgKiAkMzsgICAgQH0KLSAgICAgICAgfCBleHAgJy8nIGV4cCAgICAgICAgQHsgJCQgPSAkMSAvICQzOyAgICBAfQotICAgICAgICB8ICctJyBleHAgICVwcmVjIE5FRyBAeyAkJCA9IC0kMjsgICAgICAgIEB9Ci0gICAgICAgIHwgZXhwICdeJyBleHAgICAgICAgIEB7ICQkID0gcG93ICgkMSwgJDMpOyBAfQotICAgICAgICB8ICcoJyBleHAgJyknICAgICAgICBAeyAkJCA9ICQyOyAgICAgICAgIEB9Ci07Ci0lJQotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotVGhlIGZ1bmN0aW9ucyBAY29kZXt5eWxleH0sIEBjb2Rle3l5ZXJyb3J9IGFuZCBAY29kZXttYWlufSBjYW4gYmUgdGhlCi1zYW1lIGFzIGJlZm9yZS4KLQotVGhlcmUgYXJlIHR3byBpbXBvcnRhbnQgbmV3IGZlYXR1cmVzIHNob3duIGluIHRoaXMgY29kZS4KLQotSW4gdGhlIHNlY29uZCBzZWN0aW9uIChCaXNvbiBkZWNsYXJhdGlvbnMpLCBAY29kZXslbGVmdH0gZGVjbGFyZXMgdG9rZW4KLXR5cGVzIGFuZCBzYXlzIHRoZXkgYXJlIGxlZnQtYXNzb2NpYXRpdmUgb3BlcmF0b3JzLiAgVGhlIGRlY2xhcmF0aW9ucwotQGNvZGV7JWxlZnR9IGFuZCBAY29kZXslcmlnaHR9IChyaWdodCBhc3NvY2lhdGl2aXR5KSB0YWtlIHRoZSBwbGFjZSBvZgotQGNvZGV7JXRva2VufSB3aGljaCBpcyB1c2VkIHRvIGRlY2xhcmUgYSB0b2tlbiB0eXBlIG5hbWUgd2l0aG91dAotYXNzb2NpYXRpdml0eS4gIChUaGVzZSB0b2tlbnMgYXJlIHNpbmdsZS1jaGFyYWN0ZXIgbGl0ZXJhbHMsIHdoaWNoCi1vcmRpbmFyaWx5IGRvbid0IG5lZWQgdG8gYmUgZGVjbGFyZWQuICBXZSBkZWNsYXJlIHRoZW0gaGVyZSB0byBzcGVjaWZ5Ci10aGUgYXNzb2NpYXRpdml0eS4pCi0KLU9wZXJhdG9yIHByZWNlZGVuY2UgaXMgZGV0ZXJtaW5lZCBieSB0aGUgbGluZSBvcmRlcmluZyBvZiB0aGUKLWRlY2xhcmF0aW9uczsgdGhlIGhpZ2hlciB0aGUgbGluZSBudW1iZXIgb2YgdGhlIGRlY2xhcmF0aW9uIChsb3dlciBvbgotdGhlIHBhZ2Ugb3Igc2NyZWVuKSwgdGhlIGhpZ2hlciB0aGUgcHJlY2VkZW5jZS4gIEhlbmNlLCBleHBvbmVudGlhdGlvbgotaGFzIHRoZSBoaWdoZXN0IHByZWNlZGVuY2UsIHVuYXJ5IG1pbnVzIChAY29kZXtORUd9KSBpcyBuZXh0LCBmb2xsb3dlZAotYnkgQHNhbXB7Kn0gYW5kIEBzYW1wey99LCBhbmQgc28gb24uICBAeHJlZntQcmVjZWRlbmNlLCAsT3BlcmF0b3IKLVByZWNlZGVuY2V9LgotCi1UaGUgb3RoZXIgaW1wb3J0YW50IG5ldyBmZWF0dXJlIGlzIHRoZSBAY29kZXslcHJlY30gaW4gdGhlIGdyYW1tYXIKLXNlY3Rpb24gZm9yIHRoZSB1bmFyeSBtaW51cyBvcGVyYXRvci4gIFRoZSBAY29kZXslcHJlY30gc2ltcGx5IGluc3RydWN0cwotQmlzb24gdGhhdCB0aGUgcnVsZSBAc2FtcHt8ICctJyBleHB9IGhhcyB0aGUgc2FtZSBwcmVjZWRlbmNlIGFzCi1AY29kZXtORUd9LS0taW4gdGhpcyBjYXNlIHRoZSBuZXh0LXRvLWhpZ2hlc3QuICBAeHJlZntDb250ZXh0dWFsCi1QcmVjZWRlbmNlLCAsQ29udGV4dC1EZXBlbmRlbnQgUHJlY2VkZW5jZX0uCi0KLUhlcmUgaXMgYSBzYW1wbGUgcnVuIG9mIEBmaWxle2NhbGMueX06Ci0KLUBuZWVkIDUwMAotQGV4YW1wbGUKLSQgQGtiZHtjYWxjfQotQGtiZHs0ICsgNC41IC0gKDM0Lyg4KjMrLTMpKX0KLTYuODgwOTUyMzgxCi1Aa2Jkey01NiArIDJ9Ci0tNTQKLUBrYmR7MyBeIDJ9Ci05Ci1AZW5kIGV4YW1wbGUKLQotQG5vZGUgU2ltcGxlIEVycm9yIFJlY292ZXJ5Ci1Ac2VjdGlvbiBTaW1wbGUgRXJyb3IgUmVjb3ZlcnkKLUBjaW5kZXggZXJyb3IgcmVjb3ZlcnksIHNpbXBsZQotCi1VcCB0byB0aGlzIHBvaW50LCB0aGlzIG1hbnVhbCBoYXMgbm90IGFkZHJlc3NlZCB0aGUgaXNzdWUgb2YgQGRmbntlcnJvcgotcmVjb3Zlcnl9LS0taG93IHRvIGNvbnRpbnVlIHBhcnNpbmcgYWZ0ZXIgdGhlIHBhcnNlciBkZXRlY3RzIGEgc3ludGF4Ci1lcnJvci4gIEFsbCB3ZSBoYXZlIGhhbmRsZWQgaXMgZXJyb3IgcmVwb3J0aW5nIHdpdGggQGNvZGV7eXllcnJvcn0uCi1SZWNhbGwgdGhhdCBieSBkZWZhdWx0IEBjb2Rle3l5cGFyc2V9IHJldHVybnMgYWZ0ZXIgY2FsbGluZwotQGNvZGV7eXllcnJvcn0uICBUaGlzIG1lYW5zIHRoYXQgYW4gZXJyb25lb3VzIGlucHV0IGxpbmUgY2F1c2VzIHRoZQotY2FsY3VsYXRvciBwcm9ncmFtIHRvIGV4aXQuICBOb3cgd2Ugc2hvdyBob3cgdG8gcmVjdGlmeSB0aGlzIGRlZmljaWVuY3kuCi0KLVRoZSBCaXNvbiBsYW5ndWFnZSBpdHNlbGYgaW5jbHVkZXMgdGhlIHJlc2VydmVkIHdvcmQgQGNvZGV7ZXJyb3J9LCB3aGljaAotbWF5IGJlIGluY2x1ZGVkIGluIHRoZSBncmFtbWFyIHJ1bGVzLiAgSW4gdGhlIGV4YW1wbGUgYmVsb3cgaXQgaGFzCi1iZWVuIGFkZGVkIHRvIG9uZSBvZiB0aGUgYWx0ZXJuYXRpdmVzIGZvciBAY29kZXtsaW5lfToKLQotQGV4YW1wbGUKLUBncm91cAotbGluZTogICAgICdcbicKLSAgICAgICAgfCBleHAgJ1xuJyAgIEB7IHByaW50ZiAoIlx0JS4xMGdcbiIsICQxKTsgQH0KLSAgICAgICAgfCBlcnJvciAnXG4nIEB7IHl5ZXJyb2s7ICAgICAgICAgICAgICAgICAgQH0KLTsKLUBlbmQgZ3JvdXAKLUBlbmQgZXhhbXBsZQotCi1UaGlzIGFkZGl0aW9uIHRvIHRoZSBncmFtbWFyIGFsbG93cyBmb3Igc2ltcGxlIGVycm9yIHJlY292ZXJ5IGluIHRoZQotZXZlbnQgb2YgYSBzeW50YXggZXJyb3IuICBJZiBhbiBleHByZXNzaW9uIHRoYXQgY2Fubm90IGJlIGV2YWx1YXRlZCBpcwotcmVhZCwgdGhlIGVycm9yIHdpbGwgYmUgcmVjb2duaXplZCBieSB0aGUgdGhpcmQgcnVsZSBmb3IgQGNvZGV7bGluZX0sCi1hbmQgcGFyc2luZyB3aWxsIGNvbnRpbnVlLiAgKFRoZSBAY29kZXt5eWVycm9yfSBmdW5jdGlvbiBpcyBzdGlsbCBjYWxsZWQKLXVwb24gdG8gcHJpbnQgaXRzIG1lc3NhZ2UgYXMgd2VsbC4pICBUaGUgYWN0aW9uIGV4ZWN1dGVzIHRoZSBzdGF0ZW1lbnQKLUBjb2Rle3l5ZXJyb2t9LCBhIG1hY3JvIGRlZmluZWQgYXV0b21hdGljYWxseSBieSBCaXNvbjsgaXRzIG1lYW5pbmcgaXMKLXRoYXQgZXJyb3IgcmVjb3ZlcnkgaXMgY29tcGxldGUgKEBweHJlZntFcnJvciBSZWNvdmVyeX0pLiAgTm90ZSB0aGUKLWRpZmZlcmVuY2UgYmV0d2VlbiBAY29kZXt5eWVycm9rfSBhbmQgQGNvZGV7eXllcnJvcn07IG5laXRoZXIgb25lIGlzIGEKLW1pc3ByaW50LgotCi1UaGlzIGZvcm0gb2YgZXJyb3IgcmVjb3ZlcnkgZGVhbHMgd2l0aCBzeW50YXggZXJyb3JzLiAgVGhlcmUgYXJlIG90aGVyCi1raW5kcyBvZiBlcnJvcnM7IGZvciBleGFtcGxlLCBkaXZpc2lvbiBieSB6ZXJvLCB3aGljaCByYWlzZXMgYW4gZXhjZXB0aW9uCi1zaWduYWwgdGhhdCBpcyBub3JtYWxseSBmYXRhbC4gIEEgcmVhbCBjYWxjdWxhdG9yIHByb2dyYW0gbXVzdCBoYW5kbGUgdGhpcwotc2lnbmFsIGFuZCB1c2UgQGNvZGV7bG9uZ2ptcH0gdG8gcmV0dXJuIHRvIEBjb2Rle21haW59IGFuZCByZXN1bWUgcGFyc2luZwotaW5wdXQgbGluZXM7IGl0IHdvdWxkIGFsc28gaGF2ZSB0byBkaXNjYXJkIHRoZSByZXN0IG9mIHRoZSBjdXJyZW50IGxpbmUgb2YKLWlucHV0LiAgV2Ugd29uJ3QgZGlzY3VzcyB0aGlzIGlzc3VlIGZ1cnRoZXIgYmVjYXVzZSBpdCBpcyBub3Qgc3BlY2lmaWMgdG8KLUJpc29uIHByb2dyYW1zLgotCi1Abm9kZSBMb2NhdGlvbiBUcmFja2luZyBDYWxjCi1Ac2VjdGlvbiBMb2NhdGlvbiBUcmFja2luZyBDYWxjdWxhdG9yOiBAY29kZXtsdGNhbGN9Ci1AY2luZGV4IGxvY2F0aW9uIHRyYWNraW5nIGNhbGN1bGF0b3IKLUBjaW5kZXggQGNvZGV7bHRjYWxjfQotQGNpbmRleCBjYWxjdWxhdG9yLCBsb2NhdGlvbiB0cmFja2luZwotCi1UaGlzIGV4YW1wbGUgZXh0ZW5kcyB0aGUgaW5maXggbm90YXRpb24gY2FsY3VsYXRvciB3aXRoIGxvY2F0aW9uCi10cmFja2luZy4gIFRoaXMgZmVhdHVyZSB3aWxsIGJlIHVzZWQgdG8gaW1wcm92ZSB0aGUgZXJyb3IgbWVzc2FnZXMuICBGb3IKLXRoZSBzYWtlIG9mIGNsYXJpdHksIHRoaXMgZXhhbXBsZSBpcyBhIHNpbXBsZSBpbnRlZ2VyIGNhbGN1bGF0b3IsIHNpbmNlCi1tb3N0IG9mIHRoZSB3b3JrIG5lZWRlZCB0byB1c2UgbG9jYXRpb25zIHdpbGwgYmUgZG9uZSBpbiB0aGUgbGV4aWNhbAotYW5hbHl6ZXIuCi0KLUBtZW51Ci0qIERlY2xzOiBMdGNhbGMgRGVjbHMuICBCaXNvbiBhbmQgQyBkZWNsYXJhdGlvbnMgZm9yIGx0Y2FsYy4KLSogUnVsZXM6IEx0Y2FsYyBSdWxlcy4gIEdyYW1tYXIgcnVsZXMgZm9yIGx0Y2FsYywgd2l0aCBleHBsYW5hdGlvbnMuCi0qIExleGVyOiBMdGNhbGMgTGV4ZXIuICBUaGUgbGV4aWNhbCBhbmFseXplci4KLUBlbmQgbWVudQotCi1Abm9kZSBMdGNhbGMgRGVjbHMKLUBzdWJzZWN0aW9uIERlY2xhcmF0aW9ucyBmb3IgQGNvZGV7bHRjYWxjfQotCi1UaGUgQyBhbmQgQmlzb24gZGVjbGFyYXRpb25zIGZvciB0aGUgbG9jYXRpb24gdHJhY2tpbmcgY2FsY3VsYXRvciBhcmUKLXRoZSBzYW1lIGFzIHRoZSBkZWNsYXJhdGlvbnMgZm9yIHRoZSBpbmZpeCBub3RhdGlvbiBjYWxjdWxhdG9yLgotCi1AZXhhbXBsZQotLyogTG9jYXRpb24gdHJhY2tpbmcgY2FsY3VsYXRvci4gICovCi0KLSVAewotICAjZGVmaW5lIFlZU1RZUEUgaW50Ci0gICNpbmNsdWRlIDxtYXRoLmg+Ci0gIGludCB5eWxleCAodm9pZCk7Ci0gIHZvaWQgeXllcnJvciAoY2hhciBjb25zdCAqKTsKLSVAfQotCi0vKiBCaXNvbiBkZWNsYXJhdGlvbnMuICAqLwotJXRva2VuIE5VTQotCi0lbGVmdCAnLScgJysnCi0lbGVmdCAnKicgJy8nCi0lbGVmdCBORUcKLSVyaWdodCAnXicKLQotJSUgLyogVGhlIGdyYW1tYXIgZm9sbG93cy4gICovCi1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci1Ob3RlIHRoZXJlIGFyZSBubyBkZWNsYXJhdGlvbnMgc3BlY2lmaWMgdG8gbG9jYXRpb25zLiAgRGVmaW5pbmcgYSBkYXRhCi10eXBlIGZvciBzdG9yaW5nIGxvY2F0aW9ucyBpcyBub3QgbmVlZGVkOiB3ZSB3aWxsIHVzZSB0aGUgdHlwZSBwcm92aWRlZAotYnkgZGVmYXVsdCAoQHB4cmVme0xvY2F0aW9uIFR5cGUsICxEYXRhIFR5cGVzIG9mIExvY2F0aW9uc30pLCB3aGljaCBpcyBhCi1mb3VyIG1lbWJlciBzdHJ1Y3R1cmUgd2l0aCB0aGUgZm9sbG93aW5nIGludGVnZXIgZmllbGRzOgotQGNvZGV7Zmlyc3RfbGluZX0sIEBjb2Rle2ZpcnN0X2NvbHVtbn0sIEBjb2Rle2xhc3RfbGluZX0gYW5kCi1AY29kZXtsYXN0X2NvbHVtbn0uCi0KLUBub2RlIEx0Y2FsYyBSdWxlcwotQHN1YnNlY3Rpb24gR3JhbW1hciBSdWxlcyBmb3IgQGNvZGV7bHRjYWxjfQotCi1XaGV0aGVyIGhhbmRsaW5nIGxvY2F0aW9ucyBvciBub3QgaGFzIG5vIGVmZmVjdCBvbiB0aGUgc3ludGF4IG9mIHlvdXIKLWxhbmd1YWdlLiAgVGhlcmVmb3JlLCBncmFtbWFyIHJ1bGVzIGZvciB0aGlzIGV4YW1wbGUgd2lsbCBiZSB2ZXJ5IGNsb3NlCi10byB0aG9zZSBvZiB0aGUgcHJldmlvdXMgZXhhbXBsZTogd2Ugd2lsbCBvbmx5IG1vZGlmeSB0aGVtIHRvIGJlbmVmaXQKLWZyb20gdGhlIG5ldyBpbmZvcm1hdGlvbi4KLQotSGVyZSwgd2Ugd2lsbCB1c2UgbG9jYXRpb25zIHRvIHJlcG9ydCBkaXZpc2lvbnMgYnkgemVybywgYW5kIGxvY2F0ZSB0aGUKLXdyb25nIGV4cHJlc3Npb25zIG9yIHN1YmV4cHJlc3Npb25zLgotCi1AZXhhbXBsZQotQGdyb3VwCi1pbnB1dCAgIDogLyogZW1wdHkgKi8KLSAgICAgICAgfCBpbnB1dCBsaW5lCi07Ci1AZW5kIGdyb3VwCi0KLUBncm91cAotbGluZSAgICA6ICdcbicKLSAgICAgICAgfCBleHAgJ1xuJyBAeyBwcmludGYgKCIlZFxuIiwgJDEpOyBAfQotOwotQGVuZCBncm91cAotCi1AZ3JvdXAKLWV4cCAgICAgOiBOVU0gICAgICAgICAgIEB7ICQkID0gJDE7IEB9Ci0gICAgICAgIHwgZXhwICcrJyBleHAgICBAeyAkJCA9ICQxICsgJDM7IEB9Ci0gICAgICAgIHwgZXhwICctJyBleHAgICBAeyAkJCA9ICQxIC0gJDM7IEB9Ci0gICAgICAgIHwgZXhwICcqJyBleHAgICBAeyAkJCA9ICQxICogJDM7IEB9Ci1AZW5kIGdyb3VwCi1AZ3JvdXAKLSAgICAgICAgfCBleHAgJy8nIGV4cAotICAgICAgICAgICAgQHsKLSAgICAgICAgICAgICAgaWYgKCQzKQotICAgICAgICAgICAgICAgICQkID0gJDEgLyAkMzsKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEB7Ci0gICAgICAgICAgICAgICAgICAkJCA9IDE7Ci0gICAgICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIlZC4lZC0lZC4lZDogZGl2aXNpb24gYnkgemVybyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBAQDMuZmlyc3RfbGluZSwgQEAzLmZpcnN0X2NvbHVtbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEBAMy5sYXN0X2xpbmUsIEBAMy5sYXN0X2NvbHVtbik7Ci0gICAgICAgICAgICAgICAgQH0KLSAgICAgICAgICAgIEB9Ci1AZW5kIGdyb3VwCi1AZ3JvdXAKLSAgICAgICAgfCAnLScgZXhwICVwcmVnIE5FRyAgICAgQHsgJCQgPSAtJDI7IEB9Ci0gICAgICAgIHwgZXhwICdeJyBleHAgICAgICAgICAgIEB7ICQkID0gcG93ICgkMSwgJDMpOyBAfQotICAgICAgICB8ICcoJyBleHAgJyknICAgICAgICAgICBAeyAkJCA9ICQyOyBAfQotQGVuZCBncm91cAotQGVuZCBleGFtcGxlCi0KLVRoaXMgY29kZSBzaG93cyBob3cgdG8gcmVhY2ggbG9jYXRpb25zIGluc2lkZSBvZiBzZW1hbnRpYyBhY3Rpb25zLCBieQotdXNpbmcgdGhlIHBzZXVkby12YXJpYWJsZXMgQGNvZGV7QEBAdmFye259fSBmb3IgcnVsZSBjb21wb25lbnRzLCBhbmQgdGhlCi1wc2V1ZG8tdmFyaWFibGUgQGNvZGV7QEAkfSBmb3IgZ3JvdXBpbmdzLgotCi1XZSBkb24ndCBuZWVkIHRvIGFzc2lnbiBhIHZhbHVlIHRvIEBjb2Rle0BAJH06IHRoZSBvdXRwdXQgcGFyc2VyIGRvZXMgaXQKLWF1dG9tYXRpY2FsbHkuICBCeSBkZWZhdWx0LCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBDIGNvZGUgb2YgZWFjaCBhY3Rpb24sCi1AY29kZXtAQCR9IGlzIHNldCB0byByYW5nZSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgQGNvZGV7QEAxfSB0byB0aGUgZW5kCi1vZiBAY29kZXtAQEB2YXJ7bn19LCBmb3IgYSBydWxlIHdpdGggQHZhcntufSBjb21wb25lbnRzLiAgVGhpcyBiZWhhdmlvcgotY2FuIGJlIHJlZGVmaW5lZCAoQHB4cmVme0xvY2F0aW9uIERlZmF1bHQgQWN0aW9uLCAsIERlZmF1bHQgQWN0aW9uIGZvcgotTG9jYXRpb25zfSksIGFuZCBmb3IgdmVyeSBzcGVjaWZpYyBydWxlcywgQGNvZGV7QEAkfSBjYW4gYmUgY29tcHV0ZWQgYnkKLWhhbmQuCi0KLUBub2RlIEx0Y2FsYyBMZXhlcgotQHN1YnNlY3Rpb24gVGhlIEBjb2Rle2x0Y2FsY30gTGV4aWNhbCBBbmFseXplci4KLQotVW50aWwgbm93LCB3ZSByZWxpZWQgb24gQmlzb24ncyBkZWZhdWx0cyB0byBlbmFibGUgbG9jYXRpb24KLXRyYWNraW5nLiAgVGhlIG5leHQgc3RlcCBpcyB0byByZXdyaXRlIHRoZSBsZXhpY2FsIGFuYWx5emVyLCBhbmQgbWFrZSBpdAotYWJsZSB0byBmZWVkIHRoZSBwYXJzZXIgd2l0aCB0aGUgdG9rZW4gbG9jYXRpb25zLCBhcyBpdCBhbHJlYWR5IGRvZXMgZm9yCi1zZW1hbnRpYyB2YWx1ZXMuCi0KLVRvIHRoaXMgZW5kLCB3ZSBtdXN0IHRha2UgaW50byBhY2NvdW50IGV2ZXJ5IHNpbmdsZSBjaGFyYWN0ZXIgb2YgdGhlCi1pbnB1dCB0ZXh0LCB0byBhdm9pZCB0aGUgY29tcHV0ZWQgbG9jYXRpb25zIG9mIGJlaW5nIGZ1enp5IG9yIHdyb25nOgotCi1AZXhhbXBsZQotQGdyb3VwCi1pbnQKLXl5bGV4ICh2b2lkKQotQHsKLSAgaW50IGM7Ci1AZW5kIGdyb3VwCi0KLUBncm91cAotICAvKiBTa2lwIHdoaXRlIHNwYWNlLiAgKi8KLSAgd2hpbGUgKChjID0gZ2V0Y2hhciAoKSkgPT0gJyAnIHx8IGMgPT0gJ1x0JykKLSAgICArK3l5bGxvYy5sYXN0X2NvbHVtbjsKLUBlbmQgZ3JvdXAKLQotQGdyb3VwCi0gIC8qIFN0ZXAuICAqLwotICB5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGxvYy5sYXN0X2xpbmU7Ci0gIHl5bGxvYy5maXJzdF9jb2x1bW4gPSB5eWxsb2MubGFzdF9jb2x1bW47Ci1AZW5kIGdyb3VwCi0KLUBncm91cAotICAvKiBQcm9jZXNzIG51bWJlcnMuICAqLwotICBpZiAoaXNkaWdpdCAoYykpCi0gICAgQHsKLSAgICAgIHl5bHZhbCA9IGMgLSAnMCc7Ci0gICAgICArK3l5bGxvYy5sYXN0X2NvbHVtbjsKLSAgICAgIHdoaWxlIChpc2RpZ2l0IChjID0gZ2V0Y2hhciAoKSkpCi0gICAgICAgIEB7Ci0gICAgICAgICAgKyt5eWxsb2MubGFzdF9jb2x1bW47Ci0gICAgICAgICAgeXlsdmFsID0geXlsdmFsICogMTAgKyBjIC0gJzAnOwotICAgICAgICBAfQotICAgICAgdW5nZXRjIChjLCBzdGRpbik7Ci0gICAgICByZXR1cm4gTlVNOwotICAgIEB9Ci1AZW5kIGdyb3VwCi0KLSAgLyogUmV0dXJuIGVuZC1vZi1pbnB1dC4gICovCi0gIGlmIChjID09IEVPRikKLSAgICByZXR1cm4gMDsKLQotICAvKiBSZXR1cm4gYSBzaW5nbGUgY2hhciwgYW5kIHVwZGF0ZSBsb2NhdGlvbi4gICovCi0gIGlmIChjID09ICdcbicpCi0gICAgQHsKLSAgICAgICsreXlsbG9jLmxhc3RfbGluZTsKLSAgICAgIHl5bGxvYy5sYXN0X2NvbHVtbiA9IDA7Ci0gICAgQH0KLSAgZWxzZQotICAgICsreXlsbG9jLmxhc3RfY29sdW1uOwotICByZXR1cm4gYzsKLUB9Ci1AZW5kIGV4YW1wbGUKLQotQmFzaWNhbGx5LCB0aGUgbGV4aWNhbCBhbmFseXplciBwZXJmb3JtcyB0aGUgc2FtZSBwcm9jZXNzaW5nIGFzIGJlZm9yZToKLWl0IHNraXBzIGJsYW5rcyBhbmQgdGFicywgYW5kIHJlYWRzIG51bWJlcnMgb3Igc2luZ2xlLWNoYXJhY3RlciB0b2tlbnMuCi1JbiBhZGRpdGlvbiwgaXQgdXBkYXRlcyBAY29kZXt5eWxsb2N9LCB0aGUgZ2xvYmFsIHZhcmlhYmxlIChvZiB0eXBlCi1AY29kZXtZWUxUWVBFfSkgY29udGFpbmluZyB0aGUgdG9rZW4ncyBsb2NhdGlvbi4KLQotTm93LCBlYWNoIHRpbWUgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgdG9rZW4sIHRoZSBwYXJzZXIgaGFzIGl0cyBudW1iZXIKLWFzIHdlbGwgYXMgaXRzIHNlbWFudGljIHZhbHVlLCBhbmQgaXRzIGxvY2F0aW9uIGluIHRoZSB0ZXh0LiAgVGhlIGxhc3QKLW5lZWRlZCBjaGFuZ2UgaXMgdG8gaW5pdGlhbGl6ZSBAY29kZXt5eWxsb2N9LCBmb3IgZXhhbXBsZSBpbiB0aGUKLWNvbnRyb2xsaW5nIGZ1bmN0aW9uOgotCi1AZXhhbXBsZQotQGdyb3VwCi1pbnQKLW1haW4gKHZvaWQpCi1AewotICB5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGxvYy5sYXN0X2xpbmUgPSAxOwotICB5eWxsb2MuZmlyc3RfY29sdW1uID0geXlsbG9jLmxhc3RfY29sdW1uID0gMDsKLSAgcmV0dXJuIHl5cGFyc2UgKCk7Ci1AfQotQGVuZCBncm91cAotQGVuZCBleGFtcGxlCi0KLVJlbWVtYmVyIHRoYXQgY29tcHV0aW5nIGxvY2F0aW9ucyBpcyBub3QgYSBtYXR0ZXIgb2Ygc3ludGF4LiAgRXZlcnkKLWNoYXJhY3RlciBtdXN0IGJlIGFzc29jaWF0ZWQgdG8gYSBsb2NhdGlvbiB1cGRhdGUsIHdoZXRoZXIgaXQgaXMgaW4KLXZhbGlkIGlucHV0LCBpbiBjb21tZW50cywgaW4gbGl0ZXJhbCBzdHJpbmdzLCBhbmQgc28gb24uCi0KLUBub2RlIE11bHRpLWZ1bmN0aW9uIENhbGMKLUBzZWN0aW9uIE11bHRpLUZ1bmN0aW9uIENhbGN1bGF0b3I6IEBjb2Rle21mY2FsY30KLUBjaW5kZXggbXVsdGktZnVuY3Rpb24gY2FsY3VsYXRvcgotQGNpbmRleCBAY29kZXttZmNhbGN9Ci1AY2luZGV4IGNhbGN1bGF0b3IsIG11bHRpLWZ1bmN0aW9uCi0KLU5vdyB0aGF0IHRoZSBiYXNpY3Mgb2YgQmlzb24gaGF2ZSBiZWVuIGRpc2N1c3NlZCwgaXQgaXMgdGltZSB0byBtb3ZlIG9uIHRvCi1hIG1vcmUgYWR2YW5jZWQgcHJvYmxlbS4gIFRoZSBhYm92ZSBjYWxjdWxhdG9ycyBwcm92aWRlZCBvbmx5IGZpdmUKLWZ1bmN0aW9ucywgQHNhbXB7K30sIEBzYW1wey19LCBAc2FtcHsqfSwgQHNhbXB7L30gYW5kIEBzYW1we159LiAgSXQgd291bGQKLWJlIG5pY2UgdG8gaGF2ZSBhIGNhbGN1bGF0b3IgdGhhdCBwcm92aWRlcyBvdGhlciBtYXRoZW1hdGljYWwgZnVuY3Rpb25zIHN1Y2gKLWFzIEBjb2Rle3Npbn0sIEBjb2Rle2Nvc30sIGV0Yy4KLQotSXQgaXMgZWFzeSB0byBhZGQgbmV3IG9wZXJhdG9ycyB0byB0aGUgaW5maXggY2FsY3VsYXRvciBhcyBsb25nIGFzIHRoZXkgYXJlCi1vbmx5IHNpbmdsZS1jaGFyYWN0ZXIgbGl0ZXJhbHMuICBUaGUgbGV4aWNhbCBhbmFseXplciBAY29kZXt5eWxleH0gcGFzc2VzCi1iYWNrIGFsbCBub25udW1lcmljIGNoYXJhY3RlcnMgYXMgdG9rZW5zLCBzbyBuZXcgZ3JhbW1hciBydWxlcyBzdWZmaWNlIGZvcgotYWRkaW5nIGEgbmV3IG9wZXJhdG9yLiAgQnV0IHdlIHdhbnQgc29tZXRoaW5nIG1vcmUgZmxleGlibGU6IGJ1aWx0LWluCi1mdW5jdGlvbnMgd2hvc2Ugc3ludGF4IGhhcyB0aGlzIGZvcm06Ci0KLUBleGFtcGxlCi1AdmFye2Z1bmN0aW9uX25hbWV9IChAdmFye2FyZ3VtZW50fSkKLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLUF0IHRoZSBzYW1lIHRpbWUsIHdlIHdpbGwgYWRkIG1lbW9yeSB0byB0aGUgY2FsY3VsYXRvciwgYnkgYWxsb3dpbmcgeW91Ci10byBjcmVhdGUgbmFtZWQgdmFyaWFibGVzLCBzdG9yZSB2YWx1ZXMgaW4gdGhlbSwgYW5kIHVzZSB0aGVtIGxhdGVyLgotSGVyZSBpcyBhIHNhbXBsZSBzZXNzaW9uIHdpdGggdGhlIG11bHRpLWZ1bmN0aW9uIGNhbGN1bGF0b3I6Ci0KLUBleGFtcGxlCi0kIEBrYmR7bWZjYWxjfQotQGtiZHtwaSA9IDMuMTQxNTkyNjUzNTg5fQotMy4xNDE1OTI2NTM2Ci1Aa2Jke3NpbihwaSl9Ci0wLjAwMDAwMDAwMDAKLUBrYmR7YWxwaGEgPSBiZXRhMSA9IDIuM30KLTIuMzAwMDAwMDAwMAotQGtiZHthbHBoYX0KLTIuMzAwMDAwMDAwMAotQGtiZHtsbihhbHBoYSl9Ci0wLjgzMjkwOTEyMjkKLUBrYmR7ZXhwKGxuKGJldGExKSl9Ci0yLjMwMDAwMDAwMDAKLSQKLUBlbmQgZXhhbXBsZQotCi1Ob3RlIHRoYXQgbXVsdGlwbGUgYXNzaWdubWVudCBhbmQgbmVzdGVkIGZ1bmN0aW9uIGNhbGxzIGFyZSBwZXJtaXR0ZWQuCi0KLUBtZW51Ci0qIERlY2w6IE1mY2FsYyBEZWNsLiAgICAgIEJpc29uIGRlY2xhcmF0aW9ucyBmb3IgbXVsdGktZnVuY3Rpb24gY2FsY3VsYXRvci4KLSogUnVsZXM6IE1mY2FsYyBSdWxlcy4gICAgR3JhbW1hciBydWxlcyBmb3IgdGhlIGNhbGN1bGF0b3IuCi0qIFN5bXRhYjogTWZjYWxjIFN5bXRhYi4gIFN5bWJvbCB0YWJsZSBtYW5hZ2VtZW50IHN1YnJvdXRpbmVzLgotQGVuZCBtZW51Ci0KLUBub2RlIE1mY2FsYyBEZWNsCi1Ac3Vic2VjdGlvbiBEZWNsYXJhdGlvbnMgZm9yIEBjb2Rle21mY2FsY30KLQotSGVyZSBhcmUgdGhlIEMgYW5kIEJpc29uIGRlY2xhcmF0aW9ucyBmb3IgdGhlIG11bHRpLWZ1bmN0aW9uIGNhbGN1bGF0b3IuCi0KLUBzbWFsbGV4YW1wbGUKLUBncm91cAotJUB7Ci0gICNpbmNsdWRlIDxtYXRoLmg+ICAvKiBGb3IgbWF0aCBmdW5jdGlvbnMsIGNvcygpLCBzaW4oKSwgZXRjLiAgKi8KLSAgI2luY2x1ZGUgImNhbGMuaCIgIC8qIENvbnRhaW5zIGRlZmluaXRpb24gb2YgYHN5bXJlYycuICAqLwotICBpbnQgeXlsZXggKHZvaWQpOwotICB2b2lkIHl5ZXJyb3IgKGNoYXIgY29uc3QgKik7Ci0lQH0KLUBlbmQgZ3JvdXAKLUBncm91cAotJXVuaW9uIEB7Ci0gIGRvdWJsZSAgICB2YWw7ICAgLyogRm9yIHJldHVybmluZyBudW1iZXJzLiAgKi8KLSAgc3ltcmVjICAqdHB0cjsgICAvKiBGb3IgcmV0dXJuaW5nIHN5bWJvbC10YWJsZSBwb2ludGVycy4gICovCi1AfQotQGVuZCBncm91cAotJXRva2VuIDx2YWw+ICBOVU0gICAgICAgIC8qIFNpbXBsZSBkb3VibGUgcHJlY2lzaW9uIG51bWJlci4gICovCi0ldG9rZW4gPHRwdHI+IFZBUiBGTkNUICAgLyogVmFyaWFibGUgYW5kIEZ1bmN0aW9uLiAgKi8KLSV0eXBlICA8dmFsPiAgZXhwCi0KLUBncm91cAotJXJpZ2h0ICc9JwotJWxlZnQgJy0nICcrJwotJWxlZnQgJyonICcvJwotJWxlZnQgTkVHICAgICAvKiBuZWdhdGlvbi0tdW5hcnkgbWludXMgKi8KLSVyaWdodCAnXicgICAgLyogZXhwb25lbnRpYXRpb24gKi8KLUBlbmQgZ3JvdXAKLSUlIC8qIFRoZSBncmFtbWFyIGZvbGxvd3MuICAqLwotQGVuZCBzbWFsbGV4YW1wbGUKLQotVGhlIGFib3ZlIGdyYW1tYXIgaW50cm9kdWNlcyBvbmx5IHR3byBuZXcgZmVhdHVyZXMgb2YgdGhlIEJpc29uIGxhbmd1YWdlLgotVGhlc2UgZmVhdHVyZXMgYWxsb3cgc2VtYW50aWMgdmFsdWVzIHRvIGhhdmUgdmFyaW91cyBkYXRhIHR5cGVzCi0oQHB4cmVme011bHRpcGxlIFR5cGVzLCAsTW9yZSBUaGFuIE9uZSBWYWx1ZSBUeXBlfSkuCi0KLVRoZSBAY29kZXsldW5pb259IGRlY2xhcmF0aW9uIHNwZWNpZmllcyB0aGUgZW50aXJlIGxpc3Qgb2YgcG9zc2libGUgdHlwZXM7Ci10aGlzIGlzIGluc3RlYWQgb2YgZGVmaW5pbmcgQGNvZGV7WVlTVFlQRX0uICBUaGUgYWxsb3dhYmxlIHR5cGVzIGFyZSBub3cKLWRvdWJsZS1mbG9hdHMgKGZvciBAY29kZXtleHB9IGFuZCBAY29kZXtOVU19KSBhbmQgcG9pbnRlcnMgdG8gZW50cmllcyBpbgotdGhlIHN5bWJvbCB0YWJsZS4gIEB4cmVme1VuaW9uIERlY2wsICxUaGUgQ29sbGVjdGlvbiBvZiBWYWx1ZSBUeXBlc30uCi0KLVNpbmNlIHZhbHVlcyBjYW4gbm93IGhhdmUgdmFyaW91cyB0eXBlcywgaXQgaXMgbmVjZXNzYXJ5IHRvIGFzc29jaWF0ZSBhCi10eXBlIHdpdGggZWFjaCBncmFtbWFyIHN5bWJvbCB3aG9zZSBzZW1hbnRpYyB2YWx1ZSBpcyB1c2VkLiAgVGhlc2Ugc3ltYm9scwotYXJlIEBjb2Rle05VTX0sIEBjb2Rle1ZBUn0sIEBjb2Rle0ZOQ1R9LCBhbmQgQGNvZGV7ZXhwfS4gIFRoZWlyCi1kZWNsYXJhdGlvbnMgYXJlIGF1Z21lbnRlZCB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyIGRhdGEgdHlwZSAocGxhY2VkCi1iZXR3ZWVuIGFuZ2xlIGJyYWNrZXRzKS4KLQotVGhlIEJpc29uIGNvbnN0cnVjdCBAY29kZXsldHlwZX0gaXMgdXNlZCBmb3IgZGVjbGFyaW5nIG5vbnRlcm1pbmFsCi1zeW1ib2xzLCBqdXN0IGFzIEBjb2RleyV0b2tlbn0gaXMgdXNlZCBmb3IgZGVjbGFyaW5nIHRva2VuIHR5cGVzLiAgV2UKLWhhdmUgbm90IHVzZWQgQGNvZGV7JXR5cGV9IGJlZm9yZSBiZWNhdXNlIG5vbnRlcm1pbmFsIHN5bWJvbHMgYXJlCi1ub3JtYWxseSBkZWNsYXJlZCBpbXBsaWNpdGx5IGJ5IHRoZSBydWxlcyB0aGF0IGRlZmluZSB0aGVtLiAgQnV0Ci1AY29kZXtleHB9IG11c3QgYmUgZGVjbGFyZWQgZXhwbGljaXRseSBzbyB3ZSBjYW4gc3BlY2lmeSBpdHMgdmFsdWUgdHlwZS4KLUB4cmVme1R5cGUgRGVjbCwgLE5vbnRlcm1pbmFsIFN5bWJvbHN9LgotCi1Abm9kZSBNZmNhbGMgUnVsZXMKLUBzdWJzZWN0aW9uIEdyYW1tYXIgUnVsZXMgZm9yIEBjb2Rle21mY2FsY30KLQotSGVyZSBhcmUgdGhlIGdyYW1tYXIgcnVsZXMgZm9yIHRoZSBtdWx0aS1mdW5jdGlvbiBjYWxjdWxhdG9yLgotTW9zdCBvZiB0aGVtIGFyZSBjb3BpZWQgZGlyZWN0bHkgZnJvbSBAY29kZXtjYWxjfTsgdGhyZWUgcnVsZXMsCi10aG9zZSB3aGljaCBtZW50aW9uIEBjb2Rle1ZBUn0gb3IgQGNvZGV7Rk5DVH0sIGFyZSBuZXcuCi0KLUBzbWFsbGV4YW1wbGUKLUBncm91cAotaW5wdXQ6ICAgLyogZW1wdHkgKi8KLSAgICAgICAgfCBpbnB1dCBsaW5lCi07Ci1AZW5kIGdyb3VwCi0KLUBncm91cAotbGluZToKLSAgICAgICAgICAnXG4nCi0gICAgICAgIHwgZXhwICdcbicgICBAeyBwcmludGYgKCJcdCUuMTBnXG4iLCAkMSk7IEB9Ci0gICAgICAgIHwgZXJyb3IgJ1xuJyBAeyB5eWVycm9rOyAgICAgICAgICAgICAgICAgIEB9Ci07Ci1AZW5kIGdyb3VwCi0KLUBncm91cAotZXhwOiAgICAgIE5VTSAgICAgICAgICAgICAgICBAeyAkJCA9ICQxOyAgICAgICAgICAgICAgICAgICAgICAgICBAfQotICAgICAgICB8IFZBUiAgICAgICAgICAgICAgICBAeyAkJCA9ICQxLT52YWx1ZS52YXI7ICAgICAgICAgICAgICBAfQotICAgICAgICB8IFZBUiAnPScgZXhwICAgICAgICBAeyAkJCA9ICQzOyAkMS0+dmFsdWUudmFyID0gJDM7ICAgICBAfQotICAgICAgICB8IEZOQ1QgJygnIGV4cCAnKScgICBAeyAkJCA9ICgqKCQxLT52YWx1ZS5mbmN0cHRyKSkoJDMpOyBAfQotICAgICAgICB8IGV4cCAnKycgZXhwICAgICAgICBAeyAkJCA9ICQxICsgJDM7ICAgICAgICAgICAgICAgICAgICBAfQotICAgICAgICB8IGV4cCAnLScgZXhwICAgICAgICBAeyAkJCA9ICQxIC0gJDM7ICAgICAgICAgICAgICAgICAgICBAfQotICAgICAgICB8IGV4cCAnKicgZXhwICAgICAgICBAeyAkJCA9ICQxICogJDM7ICAgICAgICAgICAgICAgICAgICBAfQotICAgICAgICB8IGV4cCAnLycgZXhwICAgICAgICBAeyAkJCA9ICQxIC8gJDM7ICAgICAgICAgICAgICAgICAgICBAfQotICAgICAgICB8ICctJyBleHAgICVwcmVjIE5FRyBAeyAkJCA9IC0kMjsgICAgICAgICAgICAgICAgICAgICAgICBAfQotICAgICAgICB8IGV4cCAnXicgZXhwICAgICAgICBAeyAkJCA9IHBvdyAoJDEsICQzKTsgICAgICAgICAgICAgICBAfQotICAgICAgICB8ICcoJyBleHAgJyknICAgICAgICBAeyAkJCA9ICQyOyAgICAgICAgICAgICAgICAgICAgICAgICBAfQotOwotQGVuZCBncm91cAotLyogRW5kIG9mIGdyYW1tYXIuICAqLwotJSUKLUBlbmQgc21hbGxleGFtcGxlCi0KLUBub2RlIE1mY2FsYyBTeW10YWIKLUBzdWJzZWN0aW9uIFRoZSBAY29kZXttZmNhbGN9IFN5bWJvbCBUYWJsZQotQGNpbmRleCBzeW1ib2wgdGFibGUgZXhhbXBsZQotCi1UaGUgbXVsdGktZnVuY3Rpb24gY2FsY3VsYXRvciByZXF1aXJlcyBhIHN5bWJvbCB0YWJsZSB0byBrZWVwIHRyYWNrIG9mIHRoZQotbmFtZXMgYW5kIG1lYW5pbmdzIG9mIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zLiAgVGhpcyBkb2Vzbid0IGFmZmVjdCB0aGUKLWdyYW1tYXIgcnVsZXMgKGV4Y2VwdCBmb3IgdGhlIGFjdGlvbnMpIG9yIHRoZSBCaXNvbiBkZWNsYXJhdGlvbnMsIGJ1dCBpdAotcmVxdWlyZXMgc29tZSBhZGRpdGlvbmFsIEMgZnVuY3Rpb25zIGZvciBzdXBwb3J0LgotCi1UaGUgc3ltYm9sIHRhYmxlIGl0c2VsZiBjb25zaXN0cyBvZiBhIGxpbmtlZCBsaXN0IG9mIHJlY29yZHMuICBJdHMKLWRlZmluaXRpb24sIHdoaWNoIGlzIGtlcHQgaW4gdGhlIGhlYWRlciBAZmlsZXtjYWxjLmh9LCBpcyBhcyBmb2xsb3dzLiAgSXQKLXByb3ZpZGVzIGZvciBlaXRoZXIgZnVuY3Rpb25zIG9yIHZhcmlhYmxlcyB0byBiZSBwbGFjZWQgaW4gdGhlIHRhYmxlLgotCi1Ac21hbGxleGFtcGxlCi1AZ3JvdXAKLS8qIEZ1bmN0aW9uIHR5cGUuICAqLwotdHlwZWRlZiBkb3VibGUgKCpmdW5jX3QpIChkb3VibGUpOwotQGVuZCBncm91cAotCi1AZ3JvdXAKLS8qIERhdGEgdHlwZSBmb3IgbGlua3MgaW4gdGhlIGNoYWluIG9mIHN5bWJvbHMuICAqLwotc3RydWN0IHN5bXJlYwotQHsKLSAgY2hhciAqbmFtZTsgIC8qIG5hbWUgb2Ygc3ltYm9sICovCi0gIGludCB0eXBlOyAgICAvKiB0eXBlIG9mIHN5bWJvbDogZWl0aGVyIFZBUiBvciBGTkNUICovCi0gIHVuaW9uCi0gIEB7Ci0gICAgZG91YmxlIHZhcjsgICAgICAvKiB2YWx1ZSBvZiBhIFZBUiAqLwotICAgIGZ1bmNfdCBmbmN0cHRyOyAgLyogdmFsdWUgb2YgYSBGTkNUICovCi0gIEB9IHZhbHVlOwotICBzdHJ1Y3Qgc3ltcmVjICpuZXh0OyAgLyogbGluayBmaWVsZCAqLwotQH07Ci1AZW5kIGdyb3VwCi0KLUBncm91cAotdHlwZWRlZiBzdHJ1Y3Qgc3ltcmVjIHN5bXJlYzsKLQotLyogVGhlIHN5bWJvbCB0YWJsZTogYSBjaGFpbiBvZiBgc3RydWN0IHN5bXJlYycuICAqLwotZXh0ZXJuIHN5bXJlYyAqc3ltX3RhYmxlOwotCi1zeW1yZWMgKnB1dHN5bSAoY2hhciBjb25zdCAqLCBpbnQpOwotc3ltcmVjICpnZXRzeW0gKGNoYXIgY29uc3QgKik7Ci1AZW5kIGdyb3VwCi1AZW5kIHNtYWxsZXhhbXBsZQotCi1UaGUgbmV3IHZlcnNpb24gb2YgQGNvZGV7bWFpbn0gaW5jbHVkZXMgYSBjYWxsIHRvIEBjb2Rle2luaXRfdGFibGV9LCBhCi1mdW5jdGlvbiB0aGF0IGluaXRpYWxpemVzIHRoZSBzeW1ib2wgdGFibGUuICBIZXJlIGl0IGlzLCBhbmQKLUBjb2Rle2luaXRfdGFibGV9IGFzIHdlbGw6Ci0KLUBzbWFsbGV4YW1wbGUKLSNpbmNsdWRlIDxzdGRpby5oPgotCi1AZ3JvdXAKLS8qIENhbGxlZCBieSB5eXBhcnNlIG9uIGVycm9yLiAgKi8KLXZvaWQKLXl5ZXJyb3IgKGNoYXIgY29uc3QgKnMpCi1AewotICBwcmludGYgKCIlc1xuIiwgcyk7Ci1AfQotQGVuZCBncm91cAotCi1AZ3JvdXAKLXN0cnVjdCBpbml0Ci1AewotICBjaGFyIGNvbnN0ICpmbmFtZTsKLSAgZG91YmxlICgqZm5jdCkgKGRvdWJsZSk7Ci1AfTsKLUBlbmQgZ3JvdXAKLQotQGdyb3VwCi1zdHJ1Y3QgaW5pdCBjb25zdCBhcml0aF9mbmN0c1tdID0KLUB7Ci0gICJzaW4iLCAgc2luLAotICAiY29zIiwgIGNvcywKLSAgImF0YW4iLCBhdGFuLAotICAibG4iLCAgIGxvZywKLSAgImV4cCIsICBleHAsCi0gICJzcXJ0Iiwgc3FydCwKLSAgMCwgMAotQH07Ci1AZW5kIGdyb3VwCi0KLUBncm91cAotLyogVGhlIHN5bWJvbCB0YWJsZTogYSBjaGFpbiBvZiBgc3RydWN0IHN5bXJlYycuICAqLwotc3ltcmVjICpzeW1fdGFibGU7Ci1AZW5kIGdyb3VwCi0KLUBncm91cAotLyogUHV0IGFyaXRobWV0aWMgZnVuY3Rpb25zIGluIHRhYmxlLiAgKi8KLXZvaWQKLWluaXRfdGFibGUgKHZvaWQpCi1AewotICBpbnQgaTsKLSAgc3ltcmVjICpwdHI7Ci0gIGZvciAoaSA9IDA7IGFyaXRoX2ZuY3RzW2ldLmZuYW1lICE9IDA7IGkrKykKLSAgICBAewotICAgICAgcHRyID0gcHV0c3ltIChhcml0aF9mbmN0c1tpXS5mbmFtZSwgRk5DVCk7Ci0gICAgICBwdHItPnZhbHVlLmZuY3RwdHIgPSBhcml0aF9mbmN0c1tpXS5mbmN0OwotICAgIEB9Ci1AfQotQGVuZCBncm91cAotCi1AZ3JvdXAKLWludAotbWFpbiAodm9pZCkKLUB7Ci0gIGluaXRfdGFibGUgKCk7Ci0gIHJldHVybiB5eXBhcnNlICgpOwotQH0KLUBlbmQgZ3JvdXAKLUBlbmQgc21hbGxleGFtcGxlCi0KLUJ5IHNpbXBseSBlZGl0aW5nIHRoZSBpbml0aWFsaXphdGlvbiBsaXN0IGFuZCBhZGRpbmcgdGhlIG5lY2Vzc2FyeSBpbmNsdWRlCi1maWxlcywgeW91IGNhbiBhZGQgYWRkaXRpb25hbCBmdW5jdGlvbnMgdG8gdGhlIGNhbGN1bGF0b3IuCi0KLVR3byBpbXBvcnRhbnQgZnVuY3Rpb25zIGFsbG93IGxvb2stdXAgYW5kIGluc3RhbGxhdGlvbiBvZiBzeW1ib2xzIGluIHRoZQotc3ltYm9sIHRhYmxlLiAgVGhlIGZ1bmN0aW9uIEBjb2Rle3B1dHN5bX0gaXMgcGFzc2VkIGEgbmFtZSBhbmQgdGhlIHR5cGUKLShAY29kZXtWQVJ9IG9yIEBjb2Rle0ZOQ1R9KSBvZiB0aGUgb2JqZWN0IHRvIGJlIGluc3RhbGxlZC4gIFRoZSBvYmplY3QgaXMKLWxpbmtlZCB0byB0aGUgZnJvbnQgb2YgdGhlIGxpc3QsIGFuZCBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCBpcyByZXR1cm5lZC4KLVRoZSBmdW5jdGlvbiBAY29kZXtnZXRzeW19IGlzIHBhc3NlZCB0aGUgbmFtZSBvZiB0aGUgc3ltYm9sIHRvIGxvb2sgdXAuICBJZgotZm91bmQsIGEgcG9pbnRlciB0byB0aGF0IHN5bWJvbCBpcyByZXR1cm5lZDsgb3RoZXJ3aXNlIHplcm8gaXMgcmV0dXJuZWQuCi0KLUBzbWFsbGV4YW1wbGUKLXN5bXJlYyAqCi1wdXRzeW0gKGNoYXIgY29uc3QgKnN5bV9uYW1lLCBpbnQgc3ltX3R5cGUpCi1AewotICBzeW1yZWMgKnB0cjsKLSAgcHRyID0gKHN5bXJlYyAqKSBtYWxsb2MgKHNpemVvZiAoc3ltcmVjKSk7Ci0gIHB0ci0+bmFtZSA9IChjaGFyICopIG1hbGxvYyAoc3RybGVuIChzeW1fbmFtZSkgKyAxKTsKLSAgc3RyY3B5IChwdHItPm5hbWUsc3ltX25hbWUpOwotICBwdHItPnR5cGUgPSBzeW1fdHlwZTsKLSAgcHRyLT52YWx1ZS52YXIgPSAwOyAvKiBTZXQgdmFsdWUgdG8gMCBldmVuIGlmIGZjdG4uICAqLwotICBwdHItPm5leHQgPSAoc3RydWN0IHN5bXJlYyAqKXN5bV90YWJsZTsKLSAgc3ltX3RhYmxlID0gcHRyOwotICByZXR1cm4gcHRyOwotQH0KLQotc3ltcmVjICoKLWdldHN5bSAoY2hhciBjb25zdCAqc3ltX25hbWUpCi1AewotICBzeW1yZWMgKnB0cjsKLSAgZm9yIChwdHIgPSBzeW1fdGFibGU7IHB0ciAhPSAoc3ltcmVjICopIDA7Ci0gICAgICAgcHRyID0gKHN5bXJlYyAqKXB0ci0+bmV4dCkKLSAgICBpZiAoc3RyY21wIChwdHItPm5hbWUsc3ltX25hbWUpID09IDApCi0gICAgICByZXR1cm4gcHRyOwotICByZXR1cm4gMDsKLUB9Ci1AZW5kIHNtYWxsZXhhbXBsZQotCi1UaGUgZnVuY3Rpb24gQGNvZGV7eXlsZXh9IG11c3Qgbm93IHJlY29nbml6ZSB2YXJpYWJsZXMsIG51bWVyaWMgdmFsdWVzLCBhbmQKLXRoZSBzaW5nbGUtY2hhcmFjdGVyIGFyaXRobWV0aWMgb3BlcmF0b3JzLiAgU3RyaW5ncyBvZiBhbHBoYW51bWVyaWMKLWNoYXJhY3RlcnMgd2l0aCBhIGxlYWRpbmcgbGV0dGVyIGFyZSByZWNvZ25pemVkIGFzIGVpdGhlciB2YXJpYWJsZXMgb3IKLWZ1bmN0aW9ucyBkZXBlbmRpbmcgb24gd2hhdCB0aGUgc3ltYm9sIHRhYmxlIHNheXMgYWJvdXQgdGhlbS4KLQotVGhlIHN0cmluZyBpcyBwYXNzZWQgdG8gQGNvZGV7Z2V0c3ltfSBmb3IgbG9vayB1cCBpbiB0aGUgc3ltYm9sIHRhYmxlLiAgSWYKLXRoZSBuYW1lIGFwcGVhcnMgaW4gdGhlIHRhYmxlLCBhIHBvaW50ZXIgdG8gaXRzIGxvY2F0aW9uIGFuZCBpdHMgdHlwZQotKEBjb2Rle1ZBUn0gb3IgQGNvZGV7Rk5DVH0pIGlzIHJldHVybmVkIHRvIEBjb2Rle3l5cGFyc2V9LiAgSWYgaXQgaXMgbm90Ci1hbHJlYWR5IGluIHRoZSB0YWJsZSwgdGhlbiBpdCBpcyBpbnN0YWxsZWQgYXMgYSBAY29kZXtWQVJ9IHVzaW5nCi1AY29kZXtwdXRzeW19LiAgQWdhaW4sIGEgcG9pbnRlciBhbmQgaXRzIHR5cGUgKHdoaWNoIG11c3QgYmUgQGNvZGV7VkFSfSkgaXMKLXJldHVybmVkIHRvIEBjb2Rle3l5cGFyc2V9LgotCi1ObyBjaGFuZ2UgaXMgbmVlZGVkIGluIHRoZSBoYW5kbGluZyBvZiBudW1lcmljIHZhbHVlcyBhbmQgYXJpdGhtZXRpYwotb3BlcmF0b3JzIGluIEBjb2Rle3l5bGV4fS4KLQotQHNtYWxsZXhhbXBsZQotQGdyb3VwCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLUBlbmQgZ3JvdXAKLQotQGdyb3VwCi1pbnQKLXl5bGV4ICh2b2lkKQotQHsKLSAgaW50IGM7Ci0KLSAgLyogSWdub3JlIHdoaXRlIHNwYWNlLCBnZXQgZmlyc3Qgbm9ud2hpdGUgY2hhcmFjdGVyLiAgKi8KLSAgd2hpbGUgKChjID0gZ2V0Y2hhciAoKSkgPT0gJyAnIHx8IGMgPT0gJ1x0Jyk7Ci0KLSAgaWYgKGMgPT0gRU9GKQotICAgIHJldHVybiAwOwotQGVuZCBncm91cAotCi1AZ3JvdXAKLSAgLyogQ2hhciBzdGFydHMgYSBudW1iZXIgPT4gcGFyc2UgdGhlIG51bWJlci4gICAgICAgICAqLwotICBpZiAoYyA9PSAnLicgfHwgaXNkaWdpdCAoYykpCi0gICAgQHsKLSAgICAgIHVuZ2V0YyAoYywgc3RkaW4pOwotICAgICAgc2NhbmYgKCIlbGYiLCAmeXlsdmFsLnZhbCk7Ci0gICAgICByZXR1cm4gTlVNOwotICAgIEB9Ci1AZW5kIGdyb3VwCi0KLUBncm91cAotICAvKiBDaGFyIHN0YXJ0cyBhbiBpZGVudGlmaWVyID0+IHJlYWQgdGhlIG5hbWUuICAgICAgICovCi0gIGlmIChpc2FscGhhIChjKSkKLSAgICBAewotICAgICAgc3ltcmVjICpzOwotICAgICAgc3RhdGljIGNoYXIgKnN5bWJ1ZiA9IDA7Ci0gICAgICBzdGF0aWMgaW50IGxlbmd0aCA9IDA7Ci0gICAgICBpbnQgaTsKLUBlbmQgZ3JvdXAKLQotQGdyb3VwCi0gICAgICAvKiBJbml0aWFsbHkgbWFrZSB0aGUgYnVmZmVyIGxvbmcgZW5vdWdoCi0gICAgICAgICBmb3IgYSA0MC1jaGFyYWN0ZXIgc3ltYm9sIG5hbWUuICAqLwotICAgICAgaWYgKGxlbmd0aCA9PSAwKQotICAgICAgICBsZW5ndGggPSA0MCwgc3ltYnVmID0gKGNoYXIgKiltYWxsb2MgKGxlbmd0aCArIDEpOwotCi0gICAgICBpID0gMDsKLSAgICAgIGRvCi1AZW5kIGdyb3VwCi1AZ3JvdXAKLSAgICAgICAgQHsKLSAgICAgICAgICAvKiBJZiBidWZmZXIgaXMgZnVsbCwgbWFrZSBpdCBiaWdnZXIuICAgICAgICAqLwotICAgICAgICAgIGlmIChpID09IGxlbmd0aCkKLSAgICAgICAgICAgIEB7Ci0gICAgICAgICAgICAgIGxlbmd0aCAqPSAyOwotICAgICAgICAgICAgICBzeW1idWYgPSAoY2hhciAqKSByZWFsbG9jIChzeW1idWYsIGxlbmd0aCArIDEpOwotICAgICAgICAgICAgQH0KLSAgICAgICAgICAvKiBBZGQgdGhpcyBjaGFyYWN0ZXIgdG8gdGhlIGJ1ZmZlci4gICAgICAgICAqLwotICAgICAgICAgIHN5bWJ1ZltpKytdID0gYzsKLSAgICAgICAgICAvKiBHZXQgYW5vdGhlciBjaGFyYWN0ZXIuICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgIGMgPSBnZXRjaGFyICgpOwotICAgICAgICBAfQotQGVuZCBncm91cAotQGdyb3VwCi0gICAgICB3aGlsZSAoaXNhbG51bSAoYykpOwotCi0gICAgICB1bmdldGMgKGMsIHN0ZGluKTsKLSAgICAgIHN5bWJ1ZltpXSA9ICdcMCc7Ci1AZW5kIGdyb3VwCi0KLUBncm91cAotICAgICAgcyA9IGdldHN5bSAoc3ltYnVmKTsKLSAgICAgIGlmIChzID09IDApCi0gICAgICAgIHMgPSBwdXRzeW0gKHN5bWJ1ZiwgVkFSKTsKLSAgICAgIHl5bHZhbC50cHRyID0gczsKLSAgICAgIHJldHVybiBzLT50eXBlOwotICAgIEB9Ci0KLSAgLyogQW55IG90aGVyIGNoYXJhY3RlciBpcyBhIHRva2VuIGJ5IGl0c2VsZi4gICAgICAgICovCi0gIHJldHVybiBjOwotQH0KLUBlbmQgZ3JvdXAKLUBlbmQgc21hbGxleGFtcGxlCi0KLVRoaXMgcHJvZ3JhbSBpcyBib3RoIHBvd2VyZnVsIGFuZCBmbGV4aWJsZS4gIFlvdSBtYXkgZWFzaWx5IGFkZCBuZXcKLWZ1bmN0aW9ucywgYW5kIGl0IGlzIGEgc2ltcGxlIGpvYiB0byBtb2RpZnkgdGhpcyBjb2RlIHRvIGluc3RhbGwKLXByZWRlZmluZWQgdmFyaWFibGVzIHN1Y2ggYXMgQGNvZGV7cGl9IG9yIEBjb2Rle2V9IGFzIHdlbGwuCi0KLUBub2RlIEV4ZXJjaXNlcwotQHNlY3Rpb24gRXhlcmNpc2VzCi1AY2luZGV4IGV4ZXJjaXNlcwotCi1AZW51bWVyYXRlCi1AaXRlbQotQWRkIHNvbWUgbmV3IGZ1bmN0aW9ucyBmcm9tIEBmaWxle21hdGguaH0gdG8gdGhlIGluaXRpYWxpemF0aW9uIGxpc3QuCi0KLUBpdGVtCi1BZGQgYW5vdGhlciBhcnJheSB0aGF0IGNvbnRhaW5zIGNvbnN0YW50cyBhbmQgdGhlaXIgdmFsdWVzLiAgVGhlbgotbW9kaWZ5IEBjb2Rle2luaXRfdGFibGV9IHRvIGFkZCB0aGVzZSBjb25zdGFudHMgdG8gdGhlIHN5bWJvbCB0YWJsZS4KLUl0IHdpbGwgYmUgZWFzaWVzdCB0byBnaXZlIHRoZSBjb25zdGFudHMgdHlwZSBAY29kZXtWQVJ9LgotCi1AaXRlbQotTWFrZSB0aGUgcHJvZ3JhbSByZXBvcnQgYW4gZXJyb3IgaWYgdGhlIHVzZXIgcmVmZXJzIHRvIGFuCi11bmluaXRpYWxpemVkIHZhcmlhYmxlIGluIGFueSB3YXkgZXhjZXB0IHRvIHN0b3JlIGEgdmFsdWUgaW4gaXQuCi1AZW5kIGVudW1lcmF0ZQotCi1Abm9kZSBHcmFtbWFyIEZpbGUKLUBjaGFwdGVyIEJpc29uIEdyYW1tYXIgRmlsZXMKLQotQmlzb24gdGFrZXMgYXMgaW5wdXQgYSBjb250ZXh0LWZyZWUgZ3JhbW1hciBzcGVjaWZpY2F0aW9uIGFuZCBwcm9kdWNlcyBhCi1DLWxhbmd1YWdlIGZ1bmN0aW9uIHRoYXQgcmVjb2duaXplcyBjb3JyZWN0IGluc3RhbmNlcyBvZiB0aGUgZ3JhbW1hci4KLQotVGhlIEJpc29uIGdyYW1tYXIgaW5wdXQgZmlsZSBjb252ZW50aW9uYWxseSBoYXMgYSBuYW1lIGVuZGluZyBpbiBAc2FtcHsueX0uCi1AeHJlZntJbnZvY2F0aW9uLCAsSW52b2tpbmcgQmlzb259LgotCi1AbWVudQotKiBHcmFtbWFyIE91dGxpbmU6OiAgIE92ZXJhbGwgbGF5b3V0IG9mIHRoZSBncmFtbWFyIGZpbGUuCi0qIFN5bWJvbHM6OiAgICAgICAgICAgVGVybWluYWwgYW5kIG5vbnRlcm1pbmFsIHN5bWJvbHMuCi0qIFJ1bGVzOjogICAgICAgICAgICAgSG93IHRvIHdyaXRlIGdyYW1tYXIgcnVsZXMuCi0qIFJlY3Vyc2lvbjo6ICAgICAgICAgV3JpdGluZyByZWN1cnNpdmUgcnVsZXMuCi0qIFNlbWFudGljczo6ICAgICAgICAgU2VtYW50aWMgdmFsdWVzIGFuZCBhY3Rpb25zLgotKiBMb2NhdGlvbnM6OiAgICAgICAgIExvY2F0aW9ucyBhbmQgYWN0aW9ucy4KLSogRGVjbGFyYXRpb25zOjogICAgICBBbGwga2luZHMgb2YgQmlzb24gZGVjbGFyYXRpb25zIGFyZSBkZXNjcmliZWQgaGVyZS4KLSogTXVsdGlwbGUgUGFyc2Vyczo6ICBQdXR0aW5nIG1vcmUgdGhhbiBvbmUgQmlzb24gcGFyc2VyIGluIG9uZSBwcm9ncmFtLgotQGVuZCBtZW51Ci0KLUBub2RlIEdyYW1tYXIgT3V0bGluZQotQHNlY3Rpb24gT3V0bGluZSBvZiBhIEJpc29uIEdyYW1tYXIKLQotQSBCaXNvbiBncmFtbWFyIGZpbGUgaGFzIGZvdXIgbWFpbiBzZWN0aW9ucywgc2hvd24gaGVyZSB3aXRoIHRoZQotYXBwcm9wcmlhdGUgZGVsaW1pdGVyczoKLQotQGV4YW1wbGUKLSVAewotICBAdmFye1Byb2xvZ3VlfQotJUB9Ci0KLUB2YXJ7Qmlzb24gZGVjbGFyYXRpb25zfQotCi0lJQotQHZhcntHcmFtbWFyIHJ1bGVzfQotJSUKLQotQHZhcntFcGlsb2d1ZX0KLUBlbmQgZXhhbXBsZQotCi1Db21tZW50cyBlbmNsb3NlZCBpbiBAc2FtcHsvKiBAZG90c3t9ICovfSBtYXkgYXBwZWFyIGluIGFueSBvZiB0aGUgc2VjdGlvbnMuCi1BcyBhIEBhY3Jvbnlte0dOVX0gZXh0ZW5zaW9uLCBAc2FtcHsvL30gaW50cm9kdWNlcyBhIGNvbW1lbnQgdGhhdAotY29udGludWVzIHVudGlsIGVuZCBvZiBsaW5lLgotCi1AbWVudQotKiBQcm9sb2d1ZTo6ICAgICAgICAgIFN5bnRheCBhbmQgdXNhZ2Ugb2YgdGhlIHByb2xvZ3VlLgotKiBCaXNvbiBEZWNsYXJhdGlvbnM6OiAgU3ludGF4IGFuZCB1c2FnZSBvZiB0aGUgQmlzb24gZGVjbGFyYXRpb25zIHNlY3Rpb24uCi0qIEdyYW1tYXIgUnVsZXM6OiAgICAgU3ludGF4IGFuZCB1c2FnZSBvZiB0aGUgZ3JhbW1hciBydWxlcyBzZWN0aW9uLgotKiBFcGlsb2d1ZTo6ICAgICAgICAgIFN5bnRheCBhbmQgdXNhZ2Ugb2YgdGhlIGVwaWxvZ3VlLgotQGVuZCBtZW51Ci0KLUBub2RlIFByb2xvZ3VlCi1Ac3Vic2VjdGlvbiBUaGUgcHJvbG9ndWUKLUBjaW5kZXggZGVjbGFyYXRpb25zIHNlY3Rpb24KLUBjaW5kZXggUHJvbG9ndWUKLUBjaW5kZXggZGVjbGFyYXRpb25zCi0KLVRoZSBAdmFye1Byb2xvZ3VlfSBzZWN0aW9uIGNvbnRhaW5zIG1hY3JvIGRlZmluaXRpb25zIGFuZCBkZWNsYXJhdGlvbnMKLW9mIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgaW4gdGhlIGFjdGlvbnMgaW4gdGhlIGdyYW1tYXIKLXJ1bGVzLiAgVGhlc2UgYXJlIGNvcGllZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXJzZXIgZmlsZSBzbyB0aGF0Ci10aGV5IHByZWNlZGUgdGhlIGRlZmluaXRpb24gb2YgQGNvZGV7eXlwYXJzZX0uICBZb3UgY2FuIHVzZQotQHNhbXB7I2luY2x1ZGV9IHRvIGdldCB0aGUgZGVjbGFyYXRpb25zIGZyb20gYSBoZWFkZXIgZmlsZS4gIElmIHlvdQotZG9uJ3QgbmVlZCBhbnkgQyBkZWNsYXJhdGlvbnMsIHlvdSBtYXkgb21pdCB0aGUgQHNhbXB7JUB7fSBhbmQKLUBzYW1weyVAfX0gZGVsaW1pdGVycyB0aGF0IGJyYWNrZXQgdGhpcyBzZWN0aW9uLgotCi1UaGUgQHZhcntQcm9sb2d1ZX0gc2VjdGlvbiBpcyB0ZXJtaW5hdGVkIGJ5IHRoZSB0aGUgZmlyc3Qgb2NjdXJyZW5jZQotb2YgQHNhbXB7JUB9fSB0aGF0IGlzIG91dHNpZGUgYSBjb21tZW50LCBhIHN0cmluZyBsaXRlcmFsLCBvciBhCi1jaGFyYWN0ZXIgY29uc3RhbnQuCi0KLVlvdSBtYXkgaGF2ZSBtb3JlIHRoYW4gb25lIEB2YXJ7UHJvbG9ndWV9IHNlY3Rpb24sIGludGVybWl4ZWQgd2l0aCB0aGUKLUB2YXJ7Qmlzb24gZGVjbGFyYXRpb25zfS4gIFRoaXMgYWxsb3dzIHlvdSB0byBoYXZlIEMgYW5kIEJpc29uCi1kZWNsYXJhdGlvbnMgdGhhdCByZWZlciB0byBlYWNoIG90aGVyLiAgRm9yIGV4YW1wbGUsIHRoZSBAY29kZXsldW5pb259Ci1kZWNsYXJhdGlvbiBtYXkgdXNlIHR5cGVzIGRlZmluZWQgaW4gYSBoZWFkZXIgZmlsZSwgYW5kIHlvdSBtYXkgd2lzaCB0bwotcHJvdG90eXBlIGZ1bmN0aW9ucyB0aGF0IHRha2UgYXJndW1lbnRzIG9mIHR5cGUgQGNvZGV7WVlTVFlQRX0uICBUaGlzCi1jYW4gYmUgZG9uZSB3aXRoIHR3byBAdmFye1Byb2xvZ3VlfSBibG9ja3MsIG9uZSBiZWZvcmUgYW5kIG9uZSBhZnRlciB0aGUKLUBjb2RleyV1bmlvbn0gZGVjbGFyYXRpb24uCi0KLUBzbWFsbGV4YW1wbGUKLSVAewotICAjaW5jbHVkZSA8c3RkaW8uaD4KLSAgI2luY2x1ZGUgInB0eXBlcy5oIgotJUB9Ci0KLSV1bmlvbiBAewotICBsb25nIGludCBuOwotICB0cmVlIHQ7ICAvKiBAcntAY29kZXt0cmVlfSBpcyBkZWZpbmVkIGluIEBmaWxle3B0eXBlcy5ofS59ICovCi1AfQotCi0lQHsKLSAgc3RhdGljIHZvaWQgcHJpbnRfdG9rZW5fdmFsdWUgKEZJTEUgKiwgaW50LCBZWVNUWVBFKTsKLSAgI2RlZmluZSBZWVBSSU5UKEYsIE4sIEwpIHByaW50X3Rva2VuX3ZhbHVlIChGLCBOLCBMKQotJUB9Ci0KLUBkb3Rze30KLUBlbmQgc21hbGxleGFtcGxlCi0KLUBub2RlIEJpc29uIERlY2xhcmF0aW9ucwotQHN1YnNlY3Rpb24gVGhlIEJpc29uIERlY2xhcmF0aW9ucyBTZWN0aW9uCi1AY2luZGV4IEJpc29uIGRlY2xhcmF0aW9ucyAoaW50cm9kdWN0aW9uKQotQGNpbmRleCBkZWNsYXJhdGlvbnMsIEJpc29uIChpbnRyb2R1Y3Rpb24pCi0KLVRoZSBAdmFye0Jpc29uIGRlY2xhcmF0aW9uc30gc2VjdGlvbiBjb250YWlucyBkZWNsYXJhdGlvbnMgdGhhdCBkZWZpbmUKLXRlcm1pbmFsIGFuZCBub250ZXJtaW5hbCBzeW1ib2xzLCBzcGVjaWZ5IHByZWNlZGVuY2UsIGFuZCBzbyBvbi4KLUluIHNvbWUgc2ltcGxlIGdyYW1tYXJzIHlvdSBtYXkgbm90IG5lZWQgYW55IGRlY2xhcmF0aW9ucy4KLUB4cmVme0RlY2xhcmF0aW9ucywgLEJpc29uIERlY2xhcmF0aW9uc30uCi0KLUBub2RlIEdyYW1tYXIgUnVsZXMKLUBzdWJzZWN0aW9uIFRoZSBHcmFtbWFyIFJ1bGVzIFNlY3Rpb24KLUBjaW5kZXggZ3JhbW1hciBydWxlcyBzZWN0aW9uCi1AY2luZGV4IHJ1bGVzIHNlY3Rpb24gZm9yIGdyYW1tYXIKLQotVGhlIEBkZm57Z3JhbW1hciBydWxlc30gc2VjdGlvbiBjb250YWlucyBvbmUgb3IgbW9yZSBCaXNvbiBncmFtbWFyCi1ydWxlcywgYW5kIG5vdGhpbmcgZWxzZS4gIEB4cmVme1J1bGVzLCAsU3ludGF4IG9mIEdyYW1tYXIgUnVsZXN9LgotCi1UaGVyZSBtdXN0IGFsd2F5cyBiZSBhdCBsZWFzdCBvbmUgZ3JhbW1hciBydWxlLCBhbmQgdGhlIGZpcnN0Ci1Ac2FtcHslJX0gKHdoaWNoIHByZWNlZGVzIHRoZSBncmFtbWFyIHJ1bGVzKSBtYXkgbmV2ZXIgYmUgb21pdHRlZCBldmVuCi1pZiBpdCBpcyB0aGUgZmlyc3QgdGhpbmcgaW4gdGhlIGZpbGUuCi0KLUBub2RlIEVwaWxvZ3VlCi1Ac3Vic2VjdGlvbiBUaGUgZXBpbG9ndWUKLUBjaW5kZXggYWRkaXRpb25hbCBDIGNvZGUgc2VjdGlvbgotQGNpbmRleCBlcGlsb2d1ZQotQGNpbmRleCBDIGNvZGUsIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwKLQotVGhlIEB2YXJ7RXBpbG9ndWV9IGlzIGNvcGllZCB2ZXJiYXRpbSB0byB0aGUgZW5kIG9mIHRoZSBwYXJzZXIgZmlsZSwganVzdCBhcwotdGhlIEB2YXJ7UHJvbG9ndWV9IGlzIGNvcGllZCB0byB0aGUgYmVnaW5uaW5nLiAgVGhpcyBpcyB0aGUgbW9zdCBjb252ZW5pZW50Ci1wbGFjZSB0byBwdXQgYW55dGhpbmcgdGhhdCB5b3Ugd2FudCB0byBoYXZlIGluIHRoZSBwYXJzZXIgZmlsZSBidXQgd2hpY2ggbmVlZAotbm90IGNvbWUgYmVmb3JlIHRoZSBkZWZpbml0aW9uIG9mIEBjb2Rle3l5cGFyc2V9LiAgRm9yIGV4YW1wbGUsIHRoZQotZGVmaW5pdGlvbnMgb2YgQGNvZGV7eXlsZXh9IGFuZCBAY29kZXt5eWVycm9yfSBvZnRlbiBnbyBoZXJlLiAgQmVjYXVzZQotQyByZXF1aXJlcyBmdW5jdGlvbnMgdG8gYmUgZGVjbGFyZWQgYmVmb3JlIGJlaW5nIHVzZWQsIHlvdSBvZnRlbiBuZWVkCi10byBkZWNsYXJlIGZ1bmN0aW9ucyBsaWtlIEBjb2Rle3l5bGV4fSBhbmQgQGNvZGV7eXllcnJvcn0gaW4gdGhlIFByb2xvZ3VlLAotZXZlbiBpZiB5b3UgZGVmaW5lIHRoZW0gaW4gdGhlIEVwaWxvZ3VlLgotQHhyZWZ7SW50ZXJmYWNlLCAsUGFyc2VyIEMtTGFuZ3VhZ2UgSW50ZXJmYWNlfS4KLQotSWYgdGhlIGxhc3Qgc2VjdGlvbiBpcyBlbXB0eSwgeW91IG1heSBvbWl0IHRoZSBAc2FtcHslJX0gdGhhdCBzZXBhcmF0ZXMgaXQKLWZyb20gdGhlIGdyYW1tYXIgcnVsZXMuCi0KLVRoZSBCaXNvbiBwYXJzZXIgaXRzZWxmIGNvbnRhaW5zIG1hbnkgbWFjcm9zIGFuZCBpZGVudGlmaWVycyB3aG9zZSBuYW1lcwotc3RhcnQgd2l0aCBAc2FtcHt5eX0gb3IgQHNhbXB7WVl9LCBzbyBpdCBpcyBhIGdvb2QgaWRlYSB0byBhdm9pZCB1c2luZwotYW55IHN1Y2ggbmFtZXMgKGV4Y2VwdCB0aG9zZSBkb2N1bWVudGVkIGluIHRoaXMgbWFudWFsKSBpbiB0aGUgZXBpbG9ndWUKLW9mIHRoZSBncmFtbWFyIGZpbGUuCi0KLUBub2RlIFN5bWJvbHMKLUBzZWN0aW9uIFN5bWJvbHMsIFRlcm1pbmFsIGFuZCBOb250ZXJtaW5hbAotQGNpbmRleCBub250ZXJtaW5hbCBzeW1ib2wKLUBjaW5kZXggdGVybWluYWwgc3ltYm9sCi1AY2luZGV4IHRva2VuIHR5cGUKLUBjaW5kZXggc3ltYm9sCi0KLUBkZm57U3ltYm9sc30gaW4gQmlzb24gZ3JhbW1hcnMgcmVwcmVzZW50IHRoZSBncmFtbWF0aWNhbCBjbGFzc2lmaWNhdGlvbnMKLW9mIHRoZSBsYW5ndWFnZS4KLQotQSBAZGZue3Rlcm1pbmFsIHN5bWJvbH0gKGFsc28ga25vd24gYXMgYSBAZGZue3Rva2VuIHR5cGV9KSByZXByZXNlbnRzIGEKLWNsYXNzIG9mIHN5bnRhY3RpY2FsbHkgZXF1aXZhbGVudCB0b2tlbnMuICBZb3UgdXNlIHRoZSBzeW1ib2wgaW4gZ3JhbW1hcgotcnVsZXMgdG8gbWVhbiB0aGF0IGEgdG9rZW4gaW4gdGhhdCBjbGFzcyBpcyBhbGxvd2VkLiAgVGhlIHN5bWJvbCBpcwotcmVwcmVzZW50ZWQgaW4gdGhlIEJpc29uIHBhcnNlciBieSBhIG51bWVyaWMgY29kZSwgYW5kIHRoZSBAY29kZXt5eWxleH0KLWZ1bmN0aW9uIHJldHVybnMgYSB0b2tlbiB0eXBlIGNvZGUgdG8gaW5kaWNhdGUgd2hhdCBraW5kIG9mIHRva2VuIGhhcwotYmVlbiByZWFkLiAgWW91IGRvbid0IG5lZWQgdG8ga25vdyB3aGF0IHRoZSBjb2RlIHZhbHVlIGlzOyB5b3UgY2FuIHVzZQotdGhlIHN5bWJvbCB0byBzdGFuZCBmb3IgaXQuCi0KLUEgQGRmbntub250ZXJtaW5hbCBzeW1ib2x9IHN0YW5kcyBmb3IgYSBjbGFzcyBvZiBzeW50YWN0aWNhbGx5Ci1lcXVpdmFsZW50IGdyb3VwaW5ncy4gIFRoZSBzeW1ib2wgbmFtZSBpcyB1c2VkIGluIHdyaXRpbmcgZ3JhbW1hciBydWxlcy4KLUJ5IGNvbnZlbnRpb24sIGl0IHNob3VsZCBiZSBhbGwgbG93ZXIgY2FzZS4KLQotU3ltYm9sIG5hbWVzIGNhbiBjb250YWluIGxldHRlcnMsIGRpZ2l0cyAobm90IGF0IHRoZSBiZWdpbm5pbmcpLAotdW5kZXJzY29yZXMgYW5kIHBlcmlvZHMuICBQZXJpb2RzIG1ha2Ugc2Vuc2Ugb25seSBpbiBub250ZXJtaW5hbHMuCi0KLVRoZXJlIGFyZSB0aHJlZSB3YXlzIG9mIHdyaXRpbmcgdGVybWluYWwgc3ltYm9scyBpbiB0aGUgZ3JhbW1hcjoKLQotQGl0ZW1pemUgQGJ1bGxldAotQGl0ZW0KLUEgQGRmbntuYW1lZCB0b2tlbiB0eXBlfSBpcyB3cml0dGVuIHdpdGggYW4gaWRlbnRpZmllciwgbGlrZSBhbgotaWRlbnRpZmllciBpbiBDQC4gIEJ5IGNvbnZlbnRpb24sIGl0IHNob3VsZCBiZSBhbGwgdXBwZXIgY2FzZS4gIEVhY2gKLXN1Y2ggbmFtZSBtdXN0IGJlIGRlZmluZWQgd2l0aCBhIEJpc29uIGRlY2xhcmF0aW9uIHN1Y2ggYXMKLUBjb2RleyV0b2tlbn0uICBAeHJlZntUb2tlbiBEZWNsLCAsVG9rZW4gVHlwZSBOYW1lc30uCi0KLUBpdGVtCi1AY2luZGV4IGNoYXJhY3RlciB0b2tlbgotQGNpbmRleCBsaXRlcmFsIHRva2VuCi1AY2luZGV4IHNpbmdsZS1jaGFyYWN0ZXIgbGl0ZXJhbAotQSBAZGZue2NoYXJhY3RlciB0b2tlbiB0eXBlfSAob3IgQGRmbntsaXRlcmFsIGNoYXJhY3RlciB0b2tlbn0pIGlzCi13cml0dGVuIGluIHRoZSBncmFtbWFyIHVzaW5nIHRoZSBzYW1lIHN5bnRheCB1c2VkIGluIEMgZm9yIGNoYXJhY3RlcgotY29uc3RhbnRzOyBmb3IgZXhhbXBsZSwgQGNvZGV7JysnfSBpcyBhIGNoYXJhY3RlciB0b2tlbiB0eXBlLiAgQQotY2hhcmFjdGVyIHRva2VuIHR5cGUgZG9lc24ndCBuZWVkIHRvIGJlIGRlY2xhcmVkIHVubGVzcyB5b3UgbmVlZCB0bwotc3BlY2lmeSBpdHMgc2VtYW50aWMgdmFsdWUgZGF0YSB0eXBlIChAcHhyZWZ7VmFsdWUgVHlwZSwgLERhdGEgVHlwZXMgb2YKLVNlbWFudGljIFZhbHVlc30pLCBhc3NvY2lhdGl2aXR5LCBvciBwcmVjZWRlbmNlIChAcHhyZWZ7UHJlY2VkZW5jZSwKLSxPcGVyYXRvciBQcmVjZWRlbmNlfSkuCi0KLUJ5IGNvbnZlbnRpb24sIGEgY2hhcmFjdGVyIHRva2VuIHR5cGUgaXMgdXNlZCBvbmx5IHRvIHJlcHJlc2VudCBhCi10b2tlbiB0aGF0IGNvbnNpc3RzIG9mIHRoYXQgcGFydGljdWxhciBjaGFyYWN0ZXIuICBUaHVzLCB0aGUgdG9rZW4KLXR5cGUgQGNvZGV7JysnfSBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgY2hhcmFjdGVyIEBzYW1weyt9IGFzIGEKLXRva2VuLiAgTm90aGluZyBlbmZvcmNlcyB0aGlzIGNvbnZlbnRpb24sIGJ1dCBpZiB5b3UgZGVwYXJ0IGZyb20gaXQsCi15b3VyIHByb2dyYW0gd2lsbCBjb25mdXNlIG90aGVyIHJlYWRlcnMuCi0KLUFsbCB0aGUgdXN1YWwgZXNjYXBlIHNlcXVlbmNlcyB1c2VkIGluIGNoYXJhY3RlciBsaXRlcmFscyBpbiBDIGNhbiBiZQotdXNlZCBpbiBCaXNvbiBhcyB3ZWxsLCBidXQgeW91IG11c3Qgbm90IHVzZSB0aGUgbnVsbCBjaGFyYWN0ZXIgYXMgYQotY2hhcmFjdGVyIGxpdGVyYWwgYmVjYXVzZSBpdHMgbnVtZXJpYyBjb2RlLCB6ZXJvLCBzaWduaWZpZXMKLWVuZC1vZi1pbnB1dCAoQHB4cmVme0NhbGxpbmcgQ29udmVudGlvbiwgLENhbGxpbmcgQ29udmVudGlvbgotZm9yIEBjb2Rle3l5bGV4fX0pLiAgQWxzbywgdW5saWtlIHN0YW5kYXJkIEMsIHRyaWdyYXBocyBoYXZlIG5vCi1zcGVjaWFsIG1lYW5pbmcgaW4gQmlzb24gY2hhcmFjdGVyIGxpdGVyYWxzLCBub3IgaXMgYmFja3NsYXNoLW5ld2xpbmUKLWFsbG93ZWQuCi0KLUBpdGVtCi1AY2luZGV4IHN0cmluZyB0b2tlbgotQGNpbmRleCBsaXRlcmFsIHN0cmluZyB0b2tlbgotQGNpbmRleCBtdWx0aWNoYXJhY3RlciBsaXRlcmFsCi1BIEBkZm57bGl0ZXJhbCBzdHJpbmcgdG9rZW59IGlzIHdyaXR0ZW4gbGlrZSBhIEMgc3RyaW5nIGNvbnN0YW50OyBmb3IKLWV4YW1wbGUsIEBjb2RleyI8PSJ9IGlzIGEgbGl0ZXJhbCBzdHJpbmcgdG9rZW4uICBBIGxpdGVyYWwgc3RyaW5nIHRva2VuCi1kb2Vzbid0IG5lZWQgdG8gYmUgZGVjbGFyZWQgdW5sZXNzIHlvdSBuZWVkIHRvIHNwZWNpZnkgaXRzIHNlbWFudGljCi12YWx1ZSBkYXRhIHR5cGUgKEBweHJlZntWYWx1ZSBUeXBlfSksIGFzc29jaWF0aXZpdHksIG9yIHByZWNlZGVuY2UKLShAcHhyZWZ7UHJlY2VkZW5jZX0pLgotCi1Zb3UgY2FuIGFzc29jaWF0ZSB0aGUgbGl0ZXJhbCBzdHJpbmcgdG9rZW4gd2l0aCBhIHN5bWJvbGljIG5hbWUgYXMgYW4KLWFsaWFzLCB1c2luZyB0aGUgQGNvZGV7JXRva2VufSBkZWNsYXJhdGlvbiAoQHB4cmVme1Rva2VuIERlY2wsICxUb2tlbgotRGVjbGFyYXRpb25zfSkuICBJZiB5b3UgZG9uJ3QgZG8gdGhhdCwgdGhlIGxleGljYWwgYW5hbHl6ZXIgaGFzIHRvCi1yZXRyaWV2ZSB0aGUgdG9rZW4gbnVtYmVyIGZvciB0aGUgbGl0ZXJhbCBzdHJpbmcgdG9rZW4gZnJvbSB0aGUKLUBjb2Rle3l5dG5hbWV9IHRhYmxlIChAcHhyZWZ7Q2FsbGluZyBDb252ZW50aW9ufSkuCi0KLUBzdHJvbmd7V2FybmluZ306IGxpdGVyYWwgc3RyaW5nIHRva2VucyBkbyBub3Qgd29yayBpbiBZYWNjLgotCi1CeSBjb252ZW50aW9uLCBhIGxpdGVyYWwgc3RyaW5nIHRva2VuIGlzIHVzZWQgb25seSB0byByZXByZXNlbnQgYSB0b2tlbgotdGhhdCBjb25zaXN0cyBvZiB0aGF0IHBhcnRpY3VsYXIgc3RyaW5nLiAgVGh1cywgeW91IHNob3VsZCB1c2UgdGhlIHRva2VuCi10eXBlIEBjb2RleyI8PSJ9IHRvIHJlcHJlc2VudCB0aGUgc3RyaW5nIEBzYW1wezw9fSBhcyBhIHRva2VuLiAgQmlzb24KLWRvZXMgbm90IGVuZm9yY2UgdGhpcyBjb252ZW50aW9uLCBidXQgaWYgeW91IGRlcGFydCBmcm9tIGl0LCBwZW9wbGUgd2hvCi1yZWFkIHlvdXIgcHJvZ3JhbSB3aWxsIGJlIGNvbmZ1c2VkLgotCi1BbGwgdGhlIGVzY2FwZSBzZXF1ZW5jZXMgdXNlZCBpbiBzdHJpbmcgbGl0ZXJhbHMgaW4gQyBjYW4gYmUgdXNlZCBpbgotQmlzb24gYXMgd2VsbCwgZXhjZXB0IHRoYXQgeW91IG11c3Qgbm90IHVzZSBhIG51bGwgY2hhcmFjdGVyIHdpdGhpbiBhCi1zdHJpbmcgbGl0ZXJhbC4gIEFsc28sIHVubGlrZSBTdGFuZGFyZCBDLCB0cmlncmFwaHMgaGF2ZSBubyBzcGVjaWFsCi1tZWFuaW5nIGluIEJpc29uIHN0cmluZyBsaXRlcmFscywgbm9yIGlzIGJhY2tzbGFzaC1uZXdsaW5lIGFsbG93ZWQuICBBCi1saXRlcmFsIHN0cmluZyB0b2tlbiBtdXN0IGNvbnRhaW4gdHdvIG9yIG1vcmUgY2hhcmFjdGVyczsgZm9yIGEgdG9rZW4KLWNvbnRhaW5pbmcganVzdCBvbmUgY2hhcmFjdGVyLCB1c2UgYSBjaGFyYWN0ZXIgdG9rZW4gKHNlZSBhYm92ZSkuCi1AZW5kIGl0ZW1pemUKLQotSG93IHlvdSBjaG9vc2UgdG8gd3JpdGUgYSB0ZXJtaW5hbCBzeW1ib2wgaGFzIG5vIGVmZmVjdCBvbiBpdHMKLWdyYW1tYXRpY2FsIG1lYW5pbmcuICBUaGF0IGRlcGVuZHMgb25seSBvbiB3aGVyZSBpdCBhcHBlYXJzIGluIHJ1bGVzIGFuZAotb24gd2hlbiB0aGUgcGFyc2VyIGZ1bmN0aW9uIHJldHVybnMgdGhhdCBzeW1ib2wuCi0KLVRoZSB2YWx1ZSByZXR1cm5lZCBieSBAY29kZXt5eWxleH0gaXMgYWx3YXlzIG9uZSBvZiB0aGUgdGVybWluYWwKLXN5bWJvbHMsIGV4Y2VwdCB0aGF0IGEgemVybyBvciBuZWdhdGl2ZSB2YWx1ZSBzaWduaWZpZXMgZW5kLW9mLWlucHV0LgotV2hpY2hldmVyIHdheSB5b3Ugd3JpdGUgdGhlIHRva2VuIHR5cGUgaW4gdGhlIGdyYW1tYXIgcnVsZXMsIHlvdSB3cml0ZQotaXQgdGhlIHNhbWUgd2F5IGluIHRoZSBkZWZpbml0aW9uIG9mIEBjb2Rle3l5bGV4fS4gIFRoZSBudW1lcmljIGNvZGUKLWZvciBhIGNoYXJhY3RlciB0b2tlbiB0eXBlIGlzIHNpbXBseSB0aGUgcG9zaXRpdmUgbnVtZXJpYyBjb2RlIG9mIHRoZQotY2hhcmFjdGVyLCBzbyBAY29kZXt5eWxleH0gY2FuIHVzZSB0aGUgaWRlbnRpY2FsIHZhbHVlIHRvIGdlbmVyYXRlIHRoZQotcmVxdWlzaXRlIGNvZGUsIHRob3VnaCB5b3UgbWF5IG5lZWQgdG8gY29udmVydCBpdCB0byBAY29kZXt1bnNpZ25lZAotY2hhcn0gdG8gYXZvaWQgc2lnbi1leHRlbnNpb24gb24gaG9zdHMgd2hlcmUgQGNvZGV7Y2hhcn0gaXMgc2lnbmVkLgotRWFjaCBuYW1lZCB0b2tlbiB0eXBlIGJlY29tZXMgYSBDIG1hY3JvIGluCi10aGUgcGFyc2VyIGZpbGUsIHNvIEBjb2Rle3l5bGV4fSBjYW4gdXNlIHRoZSBuYW1lIHRvIHN0YW5kIGZvciB0aGUgY29kZS4KLShUaGlzIGlzIHdoeSBwZXJpb2RzIGRvbid0IG1ha2Ugc2Vuc2UgaW4gdGVybWluYWwgc3ltYm9scy4pCi1AeHJlZntDYWxsaW5nIENvbnZlbnRpb24sICxDYWxsaW5nIENvbnZlbnRpb24gZm9yIEBjb2Rle3l5bGV4fX0uCi0KLUlmIEBjb2Rle3l5bGV4fSBpcyBkZWZpbmVkIGluIGEgc2VwYXJhdGUgZmlsZSwgeW91IG5lZWQgdG8gYXJyYW5nZSBmb3IgdGhlCi10b2tlbi10eXBlIG1hY3JvIGRlZmluaXRpb25zIHRvIGJlIGF2YWlsYWJsZSB0aGVyZS4gIFVzZSB0aGUgQHNhbXB7LWR9Ci1vcHRpb24gd2hlbiB5b3UgcnVuIEJpc29uLCBzbyB0aGF0IGl0IHdpbGwgd3JpdGUgdGhlc2UgbWFjcm8gZGVmaW5pdGlvbnMKLWludG8gYSBzZXBhcmF0ZSBoZWFkZXIgZmlsZSBAZmlsZXtAdmFye25hbWV9LnRhYi5ofSB3aGljaCB5b3UgY2FuIGluY2x1ZGUKLWluIHRoZSBvdGhlciBzb3VyY2UgZmlsZXMgdGhhdCBuZWVkIGl0LiAgQHhyZWZ7SW52b2NhdGlvbiwgLEludm9raW5nIEJpc29ufS4KLQotSWYgeW91IHdhbnQgdG8gd3JpdGUgYSBncmFtbWFyIHRoYXQgaXMgcG9ydGFibGUgdG8gYW55IFN0YW5kYXJkIEMKLWhvc3QsIHlvdSBtdXN0IHVzZSBvbmx5IG5vbm51bGwgY2hhcmFjdGVyIHRva2VucyB0YWtlbiBmcm9tIHRoZSBiYXNpYwotZXhlY3V0aW9uIGNoYXJhY3RlciBzZXQgb2YgU3RhbmRhcmQgQ0AuICBUaGlzIHNldCBjb25zaXN0cyBvZiB0aGUgdGVuCi1kaWdpdHMsIHRoZSA1MiBsb3dlci0gYW5kIHVwcGVyLWNhc2UgRW5nbGlzaCBsZXR0ZXJzLCBhbmQgdGhlCi1jaGFyYWN0ZXJzIGluIHRoZSBmb2xsb3dpbmcgQy1sYW5ndWFnZSBzdHJpbmc6Ci0KLUBleGFtcGxlCi0iXGFcYlx0XG5cdlxmXHIgIVwiIyUmJygpKissLS4vOjs8PT4/W1xcXV5fQHt8QH1+IgotQGVuZCBleGFtcGxlCi0KLVRoZSBAY29kZXt5eWxleH0gZnVuY3Rpb24gYW5kIEJpc29uIG11c3QgdXNlIGEgY29uc2lzdGVudCBjaGFyYWN0ZXIgc2V0Ci1hbmQgZW5jb2RpbmcgZm9yIGNoYXJhY3RlciB0b2tlbnMuICBGb3IgZXhhbXBsZSwgaWYgeW91IHJ1biBCaXNvbiBpbiBhbgotQGFjcm9ueW17QVNDSUl9IGVudmlyb25tZW50LCBidXQgdGhlbiBjb21waWxlIGFuZCBydW4gdGhlIHJlc3VsdGluZwotcHJvZ3JhbSBpbiBhbiBlbnZpcm9ubWVudCB0aGF0IHVzZXMgYW4gaW5jb21wYXRpYmxlIGNoYXJhY3RlciBzZXQgbGlrZQotQGFjcm9ueW17RUJDRElDfSwgdGhlIHJlc3VsdGluZyBwcm9ncmFtIG1heSBub3Qgd29yayBiZWNhdXNlIHRoZSB0YWJsZXMKLWdlbmVyYXRlZCBieSBCaXNvbiB3aWxsIGFzc3VtZSBAYWNyb255bXtBU0NJSX0gbnVtZXJpYyB2YWx1ZXMgZm9yCi1jaGFyYWN0ZXIgdG9rZW5zLiAgSXQgaXMgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbnMgdG8KLWNvbnRhaW4gQyBzb3VyY2UgZmlsZXMgdGhhdCB3ZXJlIGdlbmVyYXRlZCBieSBCaXNvbiBpbiBhbgotQGFjcm9ueW17QVNDSUl9IGVudmlyb25tZW50LCBzbyBpbnN0YWxsZXJzIG9uIHBsYXRmb3JtcyB0aGF0IGFyZQotaW5jb21wYXRpYmxlIHdpdGggQGFjcm9ueW17QVNDSUl9IG11c3QgcmVidWlsZCB0aG9zZSBmaWxlcyBiZWZvcmUKLWNvbXBpbGluZyB0aGVtLgotCi1UaGUgc3ltYm9sIEBjb2Rle2Vycm9yfSBpcyBhIHRlcm1pbmFsIHN5bWJvbCByZXNlcnZlZCBmb3IgZXJyb3IgcmVjb3ZlcnkKLShAcHhyZWZ7RXJyb3IgUmVjb3Zlcnl9KTsgeW91IHNob3VsZG4ndCB1c2UgaXQgZm9yIGFueSBvdGhlciBwdXJwb3NlLgotSW4gcGFydGljdWxhciwgQGNvZGV7eXlsZXh9IHNob3VsZCBuZXZlciByZXR1cm4gdGhpcyB2YWx1ZS4gIFRoZSBkZWZhdWx0Ci12YWx1ZSBvZiB0aGUgZXJyb3IgdG9rZW4gaXMgMjU2LCB1bmxlc3MgeW91IGV4cGxpY2l0bHkgYXNzaWduZWQgMjU2IHRvCi1vbmUgb2YgeW91ciB0b2tlbnMgd2l0aCBhIEBjb2RleyV0b2tlbn0gZGVjbGFyYXRpb24uCi0KLUBub2RlIFJ1bGVzCi1Ac2VjdGlvbiBTeW50YXggb2YgR3JhbW1hciBSdWxlcwotQGNpbmRleCBydWxlIHN5bnRheAotQGNpbmRleCBncmFtbWFyIHJ1bGUgc3ludGF4Ci1AY2luZGV4IHN5bnRheCBvZiBncmFtbWFyIHJ1bGVzCi0KLUEgQmlzb24gZ3JhbW1hciBydWxlIGhhcyB0aGUgZm9sbG93aW5nIGdlbmVyYWwgZm9ybToKLQotQGV4YW1wbGUKLUBncm91cAotQHZhcntyZXN1bHR9OiBAdmFye2NvbXBvbmVudHN9QGRvdHN7fQotICAgICAgICA7Ci1AZW5kIGdyb3VwCi1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci13aGVyZSBAdmFye3Jlc3VsdH0gaXMgdGhlIG5vbnRlcm1pbmFsIHN5bWJvbCB0aGF0IHRoaXMgcnVsZSBkZXNjcmliZXMsCi1hbmQgQHZhcntjb21wb25lbnRzfSBhcmUgdmFyaW91cyB0ZXJtaW5hbCBhbmQgbm9udGVybWluYWwgc3ltYm9scyB0aGF0Ci1hcmUgcHV0IHRvZ2V0aGVyIGJ5IHRoaXMgcnVsZSAoQHB4cmVme1N5bWJvbHN9KS4KLQotRm9yIGV4YW1wbGUsCi0KLUBleGFtcGxlCi1AZ3JvdXAKLWV4cDogICAgICBleHAgJysnIGV4cAotICAgICAgICA7Ci1AZW5kIGdyb3VwCi1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci1zYXlzIHRoYXQgdHdvIGdyb3VwaW5ncyBvZiB0eXBlIEBjb2Rle2V4cH0sIHdpdGggYSBAc2FtcHsrfSB0b2tlbiBpbiBiZXR3ZWVuLAotY2FuIGJlIGNvbWJpbmVkIGludG8gYSBsYXJnZXIgZ3JvdXBpbmcgb2YgdHlwZSBAY29kZXtleHB9LgotCi1XaGl0ZSBzcGFjZSBpbiBydWxlcyBpcyBzaWduaWZpY2FudCBvbmx5IHRvIHNlcGFyYXRlIHN5bWJvbHMuICBZb3UgY2FuIGFkZAotZXh0cmEgd2hpdGUgc3BhY2UgYXMgeW91IHdpc2guCi0KLVNjYXR0ZXJlZCBhbW9uZyB0aGUgY29tcG9uZW50cyBjYW4gYmUgQHZhcnthY3Rpb25zfSB0aGF0IGRldGVybWluZQotdGhlIHNlbWFudGljcyBvZiB0aGUgcnVsZS4gIEFuIGFjdGlvbiBsb29rcyBsaWtlIHRoaXM6Ci0KLUBleGFtcGxlCi1Ae0B2YXJ7QyBzdGF0ZW1lbnRzfUB9Ci1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci1AY2luZGV4IGJyYWNlZCBjb2RlCi1UaGlzIGlzIGFuIGV4YW1wbGUgb2YgQGRmbnticmFjZWQgY29kZX0sIHRoYXQgaXMsIEMgY29kZSBzdXJyb3VuZGVkIGJ5Ci1icmFjZXMsIG11Y2ggbGlrZSBhIGNvbXBvdW5kIHN0YXRlbWVudCBpbiBDQC4gIEJyYWNlZCBjb2RlIGNhbiBjb250YWluCi1hbnkgc2VxdWVuY2Ugb2YgQyB0b2tlbnMsIHNvIGxvbmcgYXMgaXRzIGJyYWNlcyBhcmUgYmFsYW5jZWQuICBCaXNvbgotZG9lcyBub3QgY2hlY2sgdGhlIGJyYWNlZCBjb2RlIGZvciBjb3JyZWN0bmVzcyBkaXJlY3RseTsgaXQgbWVyZWx5Ci1jb3BpZXMgdGhlIGNvZGUgdG8gdGhlIG91dHB1dCBmaWxlLCB3aGVyZSB0aGUgQyBjb21waWxlciBjYW4gY2hlY2sgaXQuCi0KLVdpdGhpbiBicmFjZWQgY29kZSwgdGhlIGJhbGFuY2VkLWJyYWNlIGNvdW50IGlzIG5vdCBhZmZlY3RlZCBieSBicmFjZXMKLXdpdGhpbiBjb21tZW50cywgc3RyaW5nIGxpdGVyYWxzLCBvciBjaGFyYWN0ZXIgY29uc3RhbnRzLCBidXQgaXQgaXMKLWFmZmVjdGVkIGJ5IHRoZSBDIGRpZ3JhcGhzIEBzYW1wezwlfSBhbmQgQHNhbXB7JT59IHRoYXQgcmVwcmVzZW50Ci1icmFjZXMuICBBdCB0aGUgdG9wIGxldmVsIGJyYWNlZCBjb2RlIG11c3QgYmUgdGVybWluYXRlZCBieSBAc2FtcHtAfX0KLWFuZCBub3QgYnkgYSBkaWdyYXBoLiAgQmlzb24gZG9lcyBub3QgbG9vayBmb3IgdHJpZ3JhcGhzLCBzbyBpZiBicmFjZWQKLWNvZGUgdXNlcyB0cmlncmFwaHMgeW91IHNob3VsZCBlbnN1cmUgdGhhdCB0aGV5IGRvIG5vdCBhZmZlY3QgdGhlCi1uZXN0aW5nIG9mIGJyYWNlcyBvciB0aGUgYm91bmRhcmllcyBvZiBjb21tZW50cywgc3RyaW5nIGxpdGVyYWxzLCBvcgotY2hhcmFjdGVyIGNvbnN0YW50cy4KLQotVXN1YWxseSB0aGVyZSBpcyBvbmx5IG9uZSBhY3Rpb24gYW5kIGl0IGZvbGxvd3MgdGhlIGNvbXBvbmVudHMuCi1AeHJlZntBY3Rpb25zfS4KLQotQGZpbmRleCB8Ci1NdWx0aXBsZSBydWxlcyBmb3IgdGhlIHNhbWUgQHZhcntyZXN1bHR9IGNhbiBiZSB3cml0dGVuIHNlcGFyYXRlbHkgb3IgY2FuCi1iZSBqb2luZWQgd2l0aCB0aGUgdmVydGljYWwtYmFyIGNoYXJhY3RlciBAc2FtcHt8fSBhcyBmb2xsb3dzOgotCi1AZXhhbXBsZQotQGdyb3VwCi1AdmFye3Jlc3VsdH06ICAgIEB2YXJ7cnVsZTEtY29tcG9uZW50c31AZG90c3t9Ci0gICAgICAgIHwgQHZhcntydWxlMi1jb21wb25lbnRzfUBkb3Rze30KLSAgICAgICAgQGRvdHN7fQotICAgICAgICA7Ci1AZW5kIGdyb3VwCi1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci1UaGV5IGFyZSBzdGlsbCBjb25zaWRlcmVkIGRpc3RpbmN0IHJ1bGVzIGV2ZW4gd2hlbiBqb2luZWQgaW4gdGhpcyB3YXkuCi0KLUlmIEB2YXJ7Y29tcG9uZW50c30gaW4gYSBydWxlIGlzIGVtcHR5LCBpdCBtZWFucyB0aGF0IEB2YXJ7cmVzdWx0fSBjYW4KLW1hdGNoIHRoZSBlbXB0eSBzdHJpbmcuICBGb3IgZXhhbXBsZSwgaGVyZSBpcyBob3cgdG8gZGVmaW5lIGEKLWNvbW1hLXNlcGFyYXRlZCBzZXF1ZW5jZSBvZiB6ZXJvIG9yIG1vcmUgQGNvZGV7ZXhwfSBncm91cGluZ3M6Ci0KLUBleGFtcGxlCi1AZ3JvdXAKLWV4cHNlcTogICAvKiBlbXB0eSAqLwotICAgICAgICB8IGV4cHNlcTEKLSAgICAgICAgOwotQGVuZCBncm91cAotCi1AZ3JvdXAKLWV4cHNlcTE6ICBleHAKLSAgICAgICAgfCBleHBzZXExICcsJyBleHAKLSAgICAgICAgOwotQGVuZCBncm91cAotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotSXQgaXMgY3VzdG9tYXJ5IHRvIHdyaXRlIGEgY29tbWVudCBAc2FtcHsvKiBlbXB0eSAqL30gaW4gZWFjaCBydWxlCi13aXRoIG5vIGNvbXBvbmVudHMuCi0KLUBub2RlIFJlY3Vyc2lvbgotQHNlY3Rpb24gUmVjdXJzaXZlIFJ1bGVzCi1AY2luZGV4IHJlY3Vyc2l2ZSBydWxlCi0KLUEgcnVsZSBpcyBjYWxsZWQgQGRmbntyZWN1cnNpdmV9IHdoZW4gaXRzIEB2YXJ7cmVzdWx0fSBub250ZXJtaW5hbAotYXBwZWFycyBhbHNvIG9uIGl0cyByaWdodCBoYW5kIHNpZGUuICBOZWFybHkgYWxsIEJpc29uIGdyYW1tYXJzIG5lZWQgdG8KLXVzZSByZWN1cnNpb24sIGJlY2F1c2UgdGhhdCBpcyB0aGUgb25seSB3YXkgdG8gZGVmaW5lIGEgc2VxdWVuY2Ugb2YgYW55Ci1udW1iZXIgb2YgYSBwYXJ0aWN1bGFyIHRoaW5nLiAgQ29uc2lkZXIgdGhpcyByZWN1cnNpdmUgZGVmaW5pdGlvbiBvZiBhCi1jb21tYS1zZXBhcmF0ZWQgc2VxdWVuY2Ugb2Ygb25lIG9yIG1vcmUgZXhwcmVzc2lvbnM6Ci0KLUBleGFtcGxlCi1AZ3JvdXAKLWV4cHNlcTE6ICBleHAKLSAgICAgICAgfCBleHBzZXExICcsJyBleHAKLSAgICAgICAgOwotQGVuZCBncm91cAotQGVuZCBleGFtcGxlCi0KLUBjaW5kZXggbGVmdCByZWN1cnNpb24KLUBjaW5kZXggcmlnaHQgcmVjdXJzaW9uCi1Abm9pbmRlbnQKLVNpbmNlIHRoZSByZWN1cnNpdmUgdXNlIG9mIEBjb2Rle2V4cHNlcTF9IGlzIHRoZSBsZWZ0bW9zdCBzeW1ib2wgaW4gdGhlCi1yaWdodCBoYW5kIHNpZGUsIHdlIGNhbGwgdGhpcyBAZGZue2xlZnQgcmVjdXJzaW9ufS4gIEJ5IGNvbnRyYXN0LCBoZXJlCi10aGUgc2FtZSBjb25zdHJ1Y3QgaXMgZGVmaW5lZCB1c2luZyBAZGZue3JpZ2h0IHJlY3Vyc2lvbn06Ci0KLUBleGFtcGxlCi1AZ3JvdXAKLWV4cHNlcTE6ICBleHAKLSAgICAgICAgfCBleHAgJywnIGV4cHNlcTEKLSAgICAgICAgOwotQGVuZCBncm91cAotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotQW55IGtpbmQgb2Ygc2VxdWVuY2UgY2FuIGJlIGRlZmluZWQgdXNpbmcgZWl0aGVyIGxlZnQgcmVjdXJzaW9uIG9yIHJpZ2h0Ci1yZWN1cnNpb24sIGJ1dCB5b3Ugc2hvdWxkIGFsd2F5cyB1c2UgbGVmdCByZWN1cnNpb24sIGJlY2F1c2UgaXQgY2FuCi1wYXJzZSBhIHNlcXVlbmNlIG9mIGFueSBudW1iZXIgb2YgZWxlbWVudHMgd2l0aCBib3VuZGVkIHN0YWNrIHNwYWNlLgotUmlnaHQgcmVjdXJzaW9uIHVzZXMgdXAgc3BhY2Ugb24gdGhlIEJpc29uIHN0YWNrIGluIHByb3BvcnRpb24gdG8gdGhlCi1udW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHNlcXVlbmNlLCBiZWNhdXNlIGFsbCB0aGUgZWxlbWVudHMgbXVzdCBiZQotc2hpZnRlZCBvbnRvIHRoZSBzdGFjayBiZWZvcmUgdGhlIHJ1bGUgY2FuIGJlIGFwcGxpZWQgZXZlbiBvbmNlLgotQHhyZWZ7QWxnb3JpdGhtLCAsVGhlIEJpc29uIFBhcnNlciBBbGdvcml0aG19LCBmb3IgZnVydGhlciBleHBsYW5hdGlvbgotb2YgdGhpcy4KLQotQGNpbmRleCBtdXR1YWwgcmVjdXJzaW9uCi1AZGZue0luZGlyZWN0fSBvciBAZGZue211dHVhbH0gcmVjdXJzaW9uIG9jY3VycyB3aGVuIHRoZSByZXN1bHQgb2YgdGhlCi1ydWxlIGRvZXMgbm90IGFwcGVhciBkaXJlY3RseSBvbiBpdHMgcmlnaHQgaGFuZCBzaWRlLCBidXQgZG9lcyBhcHBlYXIKLWluIHJ1bGVzIGZvciBvdGhlciBub250ZXJtaW5hbHMgd2hpY2ggZG8gYXBwZWFyIG9uIGl0cyByaWdodCBoYW5kCi1zaWRlLgotCi1Gb3IgZXhhbXBsZToKLQotQGV4YW1wbGUKLUBncm91cAotZXhwcjogICAgIHByaW1hcnkKLSAgICAgICAgfCBwcmltYXJ5ICcrJyBwcmltYXJ5Ci0gICAgICAgIDsKLUBlbmQgZ3JvdXAKLQotQGdyb3VwCi1wcmltYXJ5OiAgY29uc3RhbnQKLSAgICAgICAgfCAnKCcgZXhwciAnKScKLSAgICAgICAgOwotQGVuZCBncm91cAotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotZGVmaW5lcyB0d28gbXV0dWFsbHktcmVjdXJzaXZlIG5vbnRlcm1pbmFscywgc2luY2UgZWFjaCByZWZlcnMgdG8gdGhlCi1vdGhlci4KLQotQG5vZGUgU2VtYW50aWNzCi1Ac2VjdGlvbiBEZWZpbmluZyBMYW5ndWFnZSBTZW1hbnRpY3MKLUBjaW5kZXggZGVmaW5pbmcgbGFuZ3VhZ2Ugc2VtYW50aWNzCi1AY2luZGV4IGxhbmd1YWdlIHNlbWFudGljcywgZGVmaW5pbmcKLQotVGhlIGdyYW1tYXIgcnVsZXMgZm9yIGEgbGFuZ3VhZ2UgZGV0ZXJtaW5lIG9ubHkgdGhlIHN5bnRheC4gIFRoZSBzZW1hbnRpY3MKLWFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBzZW1hbnRpYyB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIHZhcmlvdXMgdG9rZW5zIGFuZAotZ3JvdXBpbmdzLCBhbmQgYnkgdGhlIGFjdGlvbnMgdGFrZW4gd2hlbiB2YXJpb3VzIGdyb3VwaW5ncyBhcmUgcmVjb2duaXplZC4KLQotRm9yIGV4YW1wbGUsIHRoZSBjYWxjdWxhdG9yIGNhbGN1bGF0ZXMgcHJvcGVybHkgYmVjYXVzZSB0aGUgdmFsdWUKLWFzc29jaWF0ZWQgd2l0aCBlYWNoIGV4cHJlc3Npb24gaXMgdGhlIHByb3BlciBudW1iZXI7IGl0IGFkZHMgcHJvcGVybHkKLWJlY2F1c2UgdGhlIGFjdGlvbiBmb3IgdGhlIGdyb3VwaW5nIEB3e0BzYW1we0B2YXJ7eH0gKyBAdmFye3l9fX0gaXMgdG8gYWRkCi10aGUgbnVtYmVycyBhc3NvY2lhdGVkIHdpdGggQHZhcnt4fSBhbmQgQHZhcnt5fS4KLQotQG1lbnUKLSogVmFsdWUgVHlwZTo6ICAgICAgICBTcGVjaWZ5aW5nIG9uZSBkYXRhIHR5cGUgZm9yIGFsbCBzZW1hbnRpYyB2YWx1ZXMuCi0qIE11bHRpcGxlIFR5cGVzOjogICAgU3BlY2lmeWluZyBzZXZlcmFsIGFsdGVybmF0aXZlIGRhdGEgdHlwZXMuCi0qIEFjdGlvbnM6OiAgICAgICAgICAgQW4gYWN0aW9uIGlzIHRoZSBzZW1hbnRpYyBkZWZpbml0aW9uIG9mIGEgZ3JhbW1hciBydWxlLgotKiBBY3Rpb24gVHlwZXM6OiAgICAgIFNwZWNpZnlpbmcgZGF0YSB0eXBlcyBmb3IgYWN0aW9ucyB0byBvcGVyYXRlIG9uLgotKiBNaWQtUnVsZSBBY3Rpb25zOjogIE1vc3QgYWN0aW9ucyBnbyBhdCB0aGUgZW5kIG9mIGEgcnVsZS4KLSAgICAgICAgICAgICAgICAgICAgICBUaGlzIHNheXMgd2hlbiwgd2h5IGFuZCBob3cgdG8gdXNlIHRoZSBleGNlcHRpb25hbAotICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uIGluIHRoZSBtaWRkbGUgb2YgYSBydWxlLgotQGVuZCBtZW51Ci0KLUBub2RlIFZhbHVlIFR5cGUKLUBzdWJzZWN0aW9uIERhdGEgVHlwZXMgb2YgU2VtYW50aWMgVmFsdWVzCi1AY2luZGV4IHNlbWFudGljIHZhbHVlIHR5cGUKLUBjaW5kZXggdmFsdWUgdHlwZSwgc2VtYW50aWMKLUBjaW5kZXggZGF0YSB0eXBlcyBvZiBzZW1hbnRpYyB2YWx1ZXMKLUBjaW5kZXggZGVmYXVsdCBkYXRhIHR5cGUKLQotSW4gYSBzaW1wbGUgcHJvZ3JhbSBpdCBtYXkgYmUgc3VmZmljaWVudCB0byB1c2UgdGhlIHNhbWUgZGF0YSB0eXBlIGZvcgotdGhlIHNlbWFudGljIHZhbHVlcyBvZiBhbGwgbGFuZ3VhZ2UgY29uc3RydWN0cy4gIFRoaXMgd2FzIHRydWUgaW4gdGhlCi1AYWNyb255bXtSUE59IGFuZCBpbmZpeCBjYWxjdWxhdG9yIGV4YW1wbGVzIChAcHhyZWZ7UlBOIENhbGMsICxSZXZlcnNlIFBvbGlzaAotTm90YXRpb24gQ2FsY3VsYXRvcn0pLgotCi1CaXNvbidzIGRlZmF1bHQgaXMgdG8gdXNlIHR5cGUgQGNvZGV7aW50fSBmb3IgYWxsIHNlbWFudGljIHZhbHVlcy4gIFRvCi1zcGVjaWZ5IHNvbWUgb3RoZXIgdHlwZSwgZGVmaW5lIEBjb2Rle1lZU1RZUEV9IGFzIGEgbWFjcm8sIGxpa2UgdGhpczoKLQotQGV4YW1wbGUKLSNkZWZpbmUgWVlTVFlQRSBkb3VibGUKLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLUBjb2Rle1lZU1RZUEV9J3MgcmVwbGFjZW1lbnQgbGlzdCBzaG91bGQgYmUgYSB0eXBlIG5hbWUKLXRoYXQgZG9lcyBub3QgY29udGFpbiBwYXJlbnRoZXNlcyBvciBzcXVhcmUgYnJhY2tldHMuCi1UaGlzIG1hY3JvIGRlZmluaXRpb24gbXVzdCBnbyBpbiB0aGUgcHJvbG9ndWUgb2YgdGhlIGdyYW1tYXIgZmlsZQotKEBweHJlZntHcmFtbWFyIE91dGxpbmUsICxPdXRsaW5lIG9mIGEgQmlzb24gR3JhbW1hcn0pLgotCi1Abm9kZSBNdWx0aXBsZSBUeXBlcwotQHN1YnNlY3Rpb24gTW9yZSBUaGFuIE9uZSBWYWx1ZSBUeXBlCi0KLUluIG1vc3QgcHJvZ3JhbXMsIHlvdSB3aWxsIG5lZWQgZGlmZmVyZW50IGRhdGEgdHlwZXMgZm9yIGRpZmZlcmVudCBraW5kcwotb2YgdG9rZW5zIGFuZCBncm91cGluZ3MuICBGb3IgZXhhbXBsZSwgYSBudW1lcmljIGNvbnN0YW50IG1heSBuZWVkIHR5cGUKLUBjb2Rle2ludH0gb3IgQGNvZGV7bG9uZyBpbnR9LCB3aGlsZSBhIHN0cmluZyBjb25zdGFudCBuZWVkcyB0eXBlCi1AY29kZXtjaGFyICp9LCBhbmQgYW4gaWRlbnRpZmllciBtaWdodCBuZWVkIGEgcG9pbnRlciB0byBhbiBlbnRyeSBpbiB0aGUKLXN5bWJvbCB0YWJsZS4KLQotVG8gdXNlIG1vcmUgdGhhbiBvbmUgZGF0YSB0eXBlIGZvciBzZW1hbnRpYyB2YWx1ZXMgaW4gb25lIHBhcnNlciwgQmlzb24KLXJlcXVpcmVzIHlvdSB0byBkbyB0d28gdGhpbmdzOgotCi1AaXRlbWl6ZSBAYnVsbGV0Ci1AaXRlbQotU3BlY2lmeSB0aGUgZW50aXJlIGNvbGxlY3Rpb24gb2YgcG9zc2libGUgZGF0YSB0eXBlcywgd2l0aCB0aGUKLUBjb2RleyV1bmlvbn0gQmlzb24gZGVjbGFyYXRpb24gKEBweHJlZntVbmlvbiBEZWNsLCAsVGhlIENvbGxlY3Rpb24gb2YKLVZhbHVlIFR5cGVzfSkuCi0KLUBpdGVtCi1DaG9vc2Ugb25lIG9mIHRob3NlIHR5cGVzIGZvciBlYWNoIHN5bWJvbCAodGVybWluYWwgb3Igbm9udGVybWluYWwpIGZvcgotd2hpY2ggc2VtYW50aWMgdmFsdWVzIGFyZSB1c2VkLiAgVGhpcyBpcyBkb25lIGZvciB0b2tlbnMgd2l0aCB0aGUKLUBjb2RleyV0b2tlbn0gQmlzb24gZGVjbGFyYXRpb24gKEBweHJlZntUb2tlbiBEZWNsLCAsVG9rZW4gVHlwZSBOYW1lc30pCi1hbmQgZm9yIGdyb3VwaW5ncyB3aXRoIHRoZSBAY29kZXsldHlwZX0gQmlzb24gZGVjbGFyYXRpb24gKEBweHJlZntUeXBlCi1EZWNsLCAsTm9udGVybWluYWwgU3ltYm9sc30pLgotQGVuZCBpdGVtaXplCi0KLUBub2RlIEFjdGlvbnMKLUBzdWJzZWN0aW9uIEFjdGlvbnMKLUBjaW5kZXggYWN0aW9uCi1AdmluZGV4ICQkCi1AdmluZGV4ICRAdmFye259Ci0KLUFuIGFjdGlvbiBhY2NvbXBhbmllcyBhIHN5bnRhY3RpYyBydWxlIGFuZCBjb250YWlucyBDIGNvZGUgdG8gYmUgZXhlY3V0ZWQKLWVhY2ggdGltZSBhbiBpbnN0YW5jZSBvZiB0aGF0IHJ1bGUgaXMgcmVjb2duaXplZC4gIFRoZSB0YXNrIG9mIG1vc3QgYWN0aW9ucwotaXMgdG8gY29tcHV0ZSBhIHNlbWFudGljIHZhbHVlIGZvciB0aGUgZ3JvdXBpbmcgYnVpbHQgYnkgdGhlIHJ1bGUgZnJvbSB0aGUKLXNlbWFudGljIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggdG9rZW5zIG9yIHNtYWxsZXIgZ3JvdXBpbmdzLgotCi1BbiBhY3Rpb24gY29uc2lzdHMgb2YgYnJhY2VkIGNvZGUgY29udGFpbmluZyBDIHN0YXRlbWVudHMsIGFuZCBjYW4gYmUKLXBsYWNlZCBhdCBhbnkgcG9zaXRpb24gaW4gdGhlIHJ1bGU7Ci1pdCBpcyBleGVjdXRlZCBhdCB0aGF0IHBvc2l0aW9uLiAgTW9zdCBydWxlcyBoYXZlIGp1c3Qgb25lIGFjdGlvbiBhdCB0aGUKLWVuZCBvZiB0aGUgcnVsZSwgZm9sbG93aW5nIGFsbCB0aGUgY29tcG9uZW50cy4gIEFjdGlvbnMgaW4gdGhlIG1pZGRsZSBvZgotYSBydWxlIGFyZSB0cmlja3kgYW5kIHVzZWQgb25seSBmb3Igc3BlY2lhbCBwdXJwb3NlcyAoQHB4cmVme01pZC1SdWxlCi1BY3Rpb25zLCAsQWN0aW9ucyBpbiBNaWQtUnVsZX0pLgotCi1UaGUgQyBjb2RlIGluIGFuIGFjdGlvbiBjYW4gcmVmZXIgdG8gdGhlIHNlbWFudGljIHZhbHVlcyBvZiB0aGUgY29tcG9uZW50cwotbWF0Y2hlZCBieSB0aGUgcnVsZSB3aXRoIHRoZSBjb25zdHJ1Y3QgQGNvZGV7JEB2YXJ7bn19LCB3aGljaCBzdGFuZHMgZm9yCi10aGUgdmFsdWUgb2YgdGhlIEB2YXJ7bn10aCBjb21wb25lbnQuICBUaGUgc2VtYW50aWMgdmFsdWUgZm9yIHRoZSBncm91cGluZwotYmVpbmcgY29uc3RydWN0ZWQgaXMgQGNvZGV7JCR9LiAgQmlzb24gdHJhbnNsYXRlcyBib3RoIG9mIHRoZXNlCi1jb25zdHJ1Y3RzIGludG8gZXhwcmVzc2lvbnMgb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUgd2hlbiBpdCBjb3BpZXMgdGhlCi1hY3Rpb25zIGludG8gdGhlIHBhcnNlciBmaWxlLiAgQGNvZGV7JCR9IGlzIHRyYW5zbGF0ZWQgdG8gYSBtb2RpZmlhYmxlCi1sdmFsdWUsIHNvIGl0IGNhbiBiZSBhc3NpZ25lZCB0by4KLQotSGVyZSBpcyBhIHR5cGljYWwgZXhhbXBsZToKLQotQGV4YW1wbGUKLUBncm91cAotZXhwOiAgICBAZG90c3t9Ci0gICAgICAgIHwgZXhwICcrJyBleHAKLSAgICAgICAgICAgIEB7ICQkID0gJDEgKyAkMzsgQH0KLUBlbmQgZ3JvdXAKLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLVRoaXMgcnVsZSBjb25zdHJ1Y3RzIGFuIEBjb2Rle2V4cH0gZnJvbSB0d28gc21hbGxlciBAY29kZXtleHB9IGdyb3VwaW5ncwotY29ubmVjdGVkIGJ5IGEgcGx1cy1zaWduIHRva2VuLiAgSW4gdGhlIGFjdGlvbiwgQGNvZGV7JDF9IGFuZCBAY29kZXskM30KLXJlZmVyIHRvIHRoZSBzZW1hbnRpYyB2YWx1ZXMgb2YgdGhlIHR3byBjb21wb25lbnQgQGNvZGV7ZXhwfSBncm91cGluZ3MsCi13aGljaCBhcmUgdGhlIGZpcnN0IGFuZCB0aGlyZCBzeW1ib2xzIG9uIHRoZSByaWdodCBoYW5kIHNpZGUgb2YgdGhlIHJ1bGUuCi1UaGUgc3VtIGlzIHN0b3JlZCBpbnRvIEBjb2RleyQkfSBzbyB0aGF0IGl0IGJlY29tZXMgdGhlIHNlbWFudGljIHZhbHVlIG9mCi10aGUgYWRkaXRpb24tZXhwcmVzc2lvbiBqdXN0IHJlY29nbml6ZWQgYnkgdGhlIHJ1bGUuICBJZiB0aGVyZSB3ZXJlIGEKLXVzZWZ1bCBzZW1hbnRpYyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIEBzYW1weyt9IHRva2VuLCBpdCBjb3VsZCBiZQotcmVmZXJyZWQgdG8gYXMgQGNvZGV7JDJ9LgotCi1Ob3RlIHRoYXQgdGhlIHZlcnRpY2FsLWJhciBjaGFyYWN0ZXIgQHNhbXB7fH0gaXMgcmVhbGx5IGEgcnVsZQotc2VwYXJhdG9yLCBhbmQgYWN0aW9ucyBhcmUgYXR0YWNoZWQgdG8gYSBzaW5nbGUgcnVsZS4gIFRoaXMgaXMgYQotZGlmZmVyZW5jZSB3aXRoIHRvb2xzIGxpa2UgRmxleCwgZm9yIHdoaWNoIEBzYW1we3x9IHN0YW5kcyBmb3IgZWl0aGVyCi1gYG9yJycsIG9yIGBgdGhlIHNhbWUgYWN0aW9uIGFzIHRoYXQgb2YgdGhlIG5leHQgcnVsZScnLiAgSW4gdGhlCi1mb2xsb3dpbmcgZXhhbXBsZSwgdGhlIGFjdGlvbiBpcyB0cmlnZ2VyZWQgb25seSB3aGVuIEBzYW1we2J9IGlzIGZvdW5kOgotCi1AZXhhbXBsZQotQGdyb3VwCi1hLW9yLWI6ICdhJ3wnYicgICBAeyBhX29yX2JfZm91bmQgPSAxOyBAfTsKLUBlbmQgZ3JvdXAKLUBlbmQgZXhhbXBsZQotCi1AY2luZGV4IGRlZmF1bHQgYWN0aW9uCi1JZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhbiBhY3Rpb24gZm9yIGEgcnVsZSwgQmlzb24gc3VwcGxpZXMgYSBkZWZhdWx0OgotQHd7QGNvZGV7JCQgPSAkMX0ufSAgVGh1cywgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBzeW1ib2wgaW4gdGhlIHJ1bGUKLWJlY29tZXMgdGhlIHZhbHVlIG9mIHRoZSB3aG9sZSBydWxlLiAgT2YgY291cnNlLCB0aGUgZGVmYXVsdCBhY3Rpb24gaXMKLXZhbGlkIG9ubHkgaWYgdGhlIHR3byBkYXRhIHR5cGVzIG1hdGNoLiAgVGhlcmUgaXMgbm8gbWVhbmluZ2Z1bCBkZWZhdWx0Ci1hY3Rpb24gZm9yIGFuIGVtcHR5IHJ1bGU7IGV2ZXJ5IGVtcHR5IHJ1bGUgbXVzdCBoYXZlIGFuIGV4cGxpY2l0IGFjdGlvbgotdW5sZXNzIHRoZSBydWxlJ3MgdmFsdWUgZG9lcyBub3QgbWF0dGVyLgotCi1AY29kZXskQHZhcntufX0gd2l0aCBAdmFye259IHplcm8gb3IgbmVnYXRpdmUgaXMgYWxsb3dlZCBmb3IgcmVmZXJlbmNlCi10byB0b2tlbnMgYW5kIGdyb3VwaW5ncyBvbiB0aGUgc3RhY2sgQGVtcGh7YmVmb3JlfSB0aG9zZSB0aGF0IG1hdGNoIHRoZQotY3VycmVudCBydWxlLiAgVGhpcyBpcyBhIHZlcnkgcmlza3kgcHJhY3RpY2UsIGFuZCB0byB1c2UgaXQgcmVsaWFibHkKLXlvdSBtdXN0IGJlIGNlcnRhaW4gb2YgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIHJ1bGUgaXMgYXBwbGllZC4gIEhlcmUKLWlzIGEgY2FzZSBpbiB3aGljaCB5b3UgY2FuIHVzZSB0aGlzIHJlbGlhYmx5OgotCi1AZXhhbXBsZQotQGdyb3VwCi1mb286ICAgICAgZXhwciBiYXIgJysnIGV4cHIgIEB7IEBkb3Rze30gQH0KLSAgICAgICAgfCBleHByIGJhciAnLScgZXhwciAgQHsgQGRvdHN7fSBAfQotICAgICAgICA7Ci1AZW5kIGdyb3VwCi0KLUBncm91cAotYmFyOiAgICAgIC8qIGVtcHR5ICovCi0gICAgICAgIEB7IHByZXZpb3VzX2V4cHIgPSAkMDsgQH0KLSAgICAgICAgOwotQGVuZCBncm91cAotQGVuZCBleGFtcGxlCi0KLUFzIGxvbmcgYXMgQGNvZGV7YmFyfSBpcyB1c2VkIG9ubHkgaW4gdGhlIGZhc2hpb24gc2hvd24gaGVyZSwgQGNvZGV7JDB9Ci1hbHdheXMgcmVmZXJzIHRvIHRoZSBAY29kZXtleHByfSB3aGljaCBwcmVjZWRlcyBAY29kZXtiYXJ9IGluIHRoZQotZGVmaW5pdGlvbiBvZiBAY29kZXtmb299LgotCi1AdmluZGV4IHl5bHZhbAotSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBhY2Nlc3MgdGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rLWFoZWFkIHRva2VuLCBpZgotYW55LCBmcm9tIGEgc2VtYW50aWMgYWN0aW9uLgotVGhpcyBzZW1hbnRpYyB2YWx1ZSBpcyBzdG9yZWQgaW4gQGNvZGV7eXlsdmFsfS4KLUB4cmVme0FjdGlvbiBGZWF0dXJlcywgLFNwZWNpYWwgRmVhdHVyZXMgZm9yIFVzZSBpbiBBY3Rpb25zfS4KLQotQG5vZGUgQWN0aW9uIFR5cGVzCi1Ac3Vic2VjdGlvbiBEYXRhIFR5cGVzIG9mIFZhbHVlcyBpbiBBY3Rpb25zCi1AY2luZGV4IGFjdGlvbiBkYXRhIHR5cGVzCi1AY2luZGV4IGRhdGEgdHlwZXMgaW4gYWN0aW9ucwotCi1JZiB5b3UgaGF2ZSBjaG9zZW4gYSBzaW5nbGUgZGF0YSB0eXBlIGZvciBzZW1hbnRpYyB2YWx1ZXMsIHRoZSBAY29kZXskJH0KLWFuZCBAY29kZXskQHZhcntufX0gY29uc3RydWN0cyBhbHdheXMgaGF2ZSB0aGF0IGRhdGEgdHlwZS4KLQotSWYgeW91IGhhdmUgdXNlZCBAY29kZXsldW5pb259IHRvIHNwZWNpZnkgYSB2YXJpZXR5IG9mIGRhdGEgdHlwZXMsIHRoZW4geW91Ci1tdXN0IGRlY2xhcmUgYSBjaG9pY2UgYW1vbmcgdGhlc2UgdHlwZXMgZm9yIGVhY2ggdGVybWluYWwgb3Igbm9udGVybWluYWwKLXN5bWJvbCB0aGF0IGNhbiBoYXZlIGEgc2VtYW50aWMgdmFsdWUuICBUaGVuIGVhY2ggdGltZSB5b3UgdXNlIEBjb2RleyQkfSBvcgotQGNvZGV7JEB2YXJ7bn19LCBpdHMgZGF0YSB0eXBlIGlzIGRldGVybWluZWQgYnkgd2hpY2ggc3ltYm9sIGl0IHJlZmVycyB0bwotaW4gdGhlIHJ1bGUuICBJbiB0aGlzIGV4YW1wbGUsCi0KLUBleGFtcGxlCi1AZ3JvdXAKLWV4cDogICAgQGRvdHN7fQotICAgICAgICB8IGV4cCAnKycgZXhwCi0gICAgICAgICAgICBAeyAkJCA9ICQxICsgJDM7IEB9Ci1AZW5kIGdyb3VwCi1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci1AY29kZXskMX0gYW5kIEBjb2RleyQzfSByZWZlciB0byBpbnN0YW5jZXMgb2YgQGNvZGV7ZXhwfSwgc28gdGhleSBhbGwKLWhhdmUgdGhlIGRhdGEgdHlwZSBkZWNsYXJlZCBmb3IgdGhlIG5vbnRlcm1pbmFsIHN5bWJvbCBAY29kZXtleHB9LiAgSWYKLUBjb2RleyQyfSB3ZXJlIHVzZWQsIGl0IHdvdWxkIGhhdmUgdGhlIGRhdGEgdHlwZSBkZWNsYXJlZCBmb3IgdGhlCi10ZXJtaW5hbCBzeW1ib2wgQGNvZGV7JysnfSwgd2hhdGV2ZXIgdGhhdCBtaWdodCBiZS4KLQotQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBkYXRhIHR5cGUgd2hlbiB5b3UgcmVmZXIgdG8gdGhlIHZhbHVlLAotYnkgaW5zZXJ0aW5nIEBzYW1wezxAdmFye3R5cGV9Pn0gYWZ0ZXIgdGhlIEBzYW1weyR9IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCi1yZWZlcmVuY2UuICBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgZGVmaW5lZCB0eXBlcyBhcyBzaG93biBoZXJlOgotCi1AZXhhbXBsZQotQGdyb3VwCi0ldW5pb24gQHsKLSAgaW50IGl0eXBlOwotICBkb3VibGUgZHR5cGU7Ci1AfQotQGVuZCBncm91cAotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotdGhlbiB5b3UgY2FuIHdyaXRlIEBjb2RleyQ8aXR5cGU+MX0gdG8gcmVmZXIgdG8gdGhlIGZpcnN0IHN1YnVuaXQgb2YgdGhlCi1ydWxlIGFzIGFuIGludGVnZXIsIG9yIEBjb2RleyQ8ZHR5cGU+MX0gdG8gcmVmZXIgdG8gaXQgYXMgYSBkb3VibGUuCi0KLUBub2RlIE1pZC1SdWxlIEFjdGlvbnMKLUBzdWJzZWN0aW9uIEFjdGlvbnMgaW4gTWlkLVJ1bGUKLUBjaW5kZXggYWN0aW9ucyBpbiBtaWQtcnVsZQotQGNpbmRleCBtaWQtcnVsZSBhY3Rpb25zCi0KLU9jY2FzaW9uYWxseSBpdCBpcyB1c2VmdWwgdG8gcHV0IGFuIGFjdGlvbiBpbiB0aGUgbWlkZGxlIG9mIGEgcnVsZS4KLVRoZXNlIGFjdGlvbnMgYXJlIHdyaXR0ZW4ganVzdCBsaWtlIHVzdWFsIGVuZC1vZi1ydWxlIGFjdGlvbnMsIGJ1dCB0aGV5Ci1hcmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSBwYXJzZXIgZXZlbiByZWNvZ25pemVzIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50cy4KLQotQSBtaWQtcnVsZSBhY3Rpb24gbWF5IHJlZmVyIHRvIHRoZSBjb21wb25lbnRzIHByZWNlZGluZyBpdCB1c2luZwotQGNvZGV7JEB2YXJ7bn19LCBidXQgaXQgbWF5IG5vdCByZWZlciB0byBzdWJzZXF1ZW50IGNvbXBvbmVudHMgYmVjYXVzZQotaXQgaXMgcnVuIGJlZm9yZSB0aGV5IGFyZSBwYXJzZWQuCi0KLVRoZSBtaWQtcnVsZSBhY3Rpb24gaXRzZWxmIGNvdW50cyBhcyBvbmUgb2YgdGhlIGNvbXBvbmVudHMgb2YgdGhlIHJ1bGUuCi1UaGlzIG1ha2VzIGEgZGlmZmVyZW5jZSB3aGVuIHRoZXJlIGlzIGFub3RoZXIgYWN0aW9uIGxhdGVyIGluIHRoZSBzYW1lIHJ1bGUKLShhbmQgdXN1YWxseSB0aGVyZSBpcyBhbm90aGVyIGF0IHRoZSBlbmQpOiB5b3UgaGF2ZSB0byBjb3VudCB0aGUgYWN0aW9ucwotYWxvbmcgd2l0aCB0aGUgc3ltYm9scyB3aGVuIHdvcmtpbmcgb3V0IHdoaWNoIG51bWJlciBAdmFye259IHRvIHVzZSBpbgotQGNvZGV7JEB2YXJ7bn19LgotCi1UaGUgbWlkLXJ1bGUgYWN0aW9uIGNhbiBhbHNvIGhhdmUgYSBzZW1hbnRpYyB2YWx1ZS4gIFRoZSBhY3Rpb24gY2FuIHNldAotaXRzIHZhbHVlIHdpdGggYW4gYXNzaWdubWVudCB0byBAY29kZXskJH0sIGFuZCBhY3Rpb25zIGxhdGVyIGluIHRoZSBydWxlCi1jYW4gcmVmZXIgdG8gdGhlIHZhbHVlIHVzaW5nIEBjb2RleyRAdmFye259fS4gIFNpbmNlIHRoZXJlIGlzIG5vIHN5bWJvbAotdG8gbmFtZSB0aGUgYWN0aW9uLCB0aGVyZSBpcyBubyB3YXkgdG8gZGVjbGFyZSBhIGRhdGEgdHlwZSBmb3IgdGhlIHZhbHVlCi1pbiBhZHZhbmNlLCBzbyB5b3UgbXVzdCB1c2UgdGhlIEBzYW1weyQ8QGRvdHN7fT5AdmFye259fSBjb25zdHJ1Y3QgdG8KLXNwZWNpZnkgYSBkYXRhIHR5cGUgZWFjaCB0aW1lIHlvdSByZWZlciB0byB0aGlzIHZhbHVlLgotCi1UaGVyZSBpcyBubyB3YXkgdG8gc2V0IHRoZSB2YWx1ZSBvZiB0aGUgZW50aXJlIHJ1bGUgd2l0aCBhIG1pZC1ydWxlCi1hY3Rpb24sIGJlY2F1c2UgYXNzaWdubWVudHMgdG8gQGNvZGV7JCR9IGRvIG5vdCBoYXZlIHRoYXQgZWZmZWN0LiAgVGhlCi1vbmx5IHdheSB0byBzZXQgdGhlIHZhbHVlIGZvciB0aGUgZW50aXJlIHJ1bGUgaXMgd2l0aCBhbiBvcmRpbmFyeSBhY3Rpb24KLWF0IHRoZSBlbmQgb2YgdGhlIHJ1bGUuCi0KLUhlcmUgaXMgYW4gZXhhbXBsZSBmcm9tIGEgaHlwb3RoZXRpY2FsIGNvbXBpbGVyLCBoYW5kbGluZyBhIEBjb2Rle2xldH0KLXN0YXRlbWVudCB0aGF0IGxvb2tzIGxpa2UgQHNhbXB7bGV0IChAdmFye3ZhcmlhYmxlfSkgQHZhcntzdGF0ZW1lbnR9fSBhbmQKLXNlcnZlcyB0byBjcmVhdGUgYSB2YXJpYWJsZSBuYW1lZCBAdmFye3ZhcmlhYmxlfSB0ZW1wb3JhcmlseSBmb3IgdGhlCi1kdXJhdGlvbiBvZiBAdmFye3N0YXRlbWVudH0uICBUbyBwYXJzZSB0aGlzIGNvbnN0cnVjdCwgd2UgbXVzdCBwdXQKLUB2YXJ7dmFyaWFibGV9IGludG8gdGhlIHN5bWJvbCB0YWJsZSB3aGlsZSBAdmFye3N0YXRlbWVudH0gaXMgcGFyc2VkLCB0aGVuCi1yZW1vdmUgaXQgYWZ0ZXJ3YXJkLiAgSGVyZSBpcyBob3cgaXQgaXMgZG9uZToKLQotQGV4YW1wbGUKLUBncm91cAotc3RtdDogICBMRVQgJygnIHZhciAnKScKLSAgICAgICAgICAgICAgICBAeyAkPGNvbnRleHQ+JCA9IHB1c2hfY29udGV4dCAoKTsKLSAgICAgICAgICAgICAgICAgIGRlY2xhcmVfdmFyaWFibGUgKCQzKTsgQH0KLSAgICAgICAgc3RtdCAgICBAeyAkJCA9ICQ2OwotICAgICAgICAgICAgICAgICAgcG9wX2NvbnRleHQgKCQ8Y29udGV4dD41KTsgQH0KLUBlbmQgZ3JvdXAKLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLUFzIHNvb24gYXMgQHNhbXB7bGV0IChAdmFye3ZhcmlhYmxlfSl9IGhhcyBiZWVuIHJlY29nbml6ZWQsIHRoZSBmaXJzdAotYWN0aW9uIGlzIHJ1bi4gIEl0IHNhdmVzIGEgY29weSBvZiB0aGUgY3VycmVudCBzZW1hbnRpYyBjb250ZXh0ICh0aGUKLWxpc3Qgb2YgYWNjZXNzaWJsZSB2YXJpYWJsZXMpIGFzIGl0cyBzZW1hbnRpYyB2YWx1ZSwgdXNpbmcgYWx0ZXJuYXRpdmUKLUBjb2Rle2NvbnRleHR9IGluIHRoZSBkYXRhLXR5cGUgdW5pb24uICBUaGVuIGl0IGNhbGxzCi1AY29kZXtkZWNsYXJlX3ZhcmlhYmxlfSB0byBhZGQgdGhlIG5ldyB2YXJpYWJsZSB0byB0aGF0IGxpc3QuICBPbmNlIHRoZQotZmlyc3QgYWN0aW9uIGlzIGZpbmlzaGVkLCB0aGUgZW1iZWRkZWQgc3RhdGVtZW50IEBjb2Rle3N0bXR9IGNhbiBiZQotcGFyc2VkLiAgTm90ZSB0aGF0IHRoZSBtaWQtcnVsZSBhY3Rpb24gaXMgY29tcG9uZW50IG51bWJlciA1LCBzbyB0aGUKLUBzYW1we3N0bXR9IGlzIGNvbXBvbmVudCBudW1iZXIgNi4KLQotQWZ0ZXIgdGhlIGVtYmVkZGVkIHN0YXRlbWVudCBpcyBwYXJzZWQsIGl0cyBzZW1hbnRpYyB2YWx1ZSBiZWNvbWVzIHRoZQotdmFsdWUgb2YgdGhlIGVudGlyZSBAY29kZXtsZXR9LXN0YXRlbWVudC4gIFRoZW4gdGhlIHNlbWFudGljIHZhbHVlIGZyb20gdGhlCi1lYXJsaWVyIGFjdGlvbiBpcyB1c2VkIHRvIHJlc3RvcmUgdGhlIHByaW9yIGxpc3Qgb2YgdmFyaWFibGVzLiAgVGhpcwotcmVtb3ZlcyB0aGUgdGVtcG9yYXJ5IEBjb2Rle2xldH0tdmFyaWFibGUgZnJvbSB0aGUgbGlzdCBzbyB0aGF0IGl0IHdvbid0Ci1hcHBlYXIgdG8gZXhpc3Qgd2hpbGUgdGhlIHJlc3Qgb2YgdGhlIHByb2dyYW0gaXMgcGFyc2VkLgotCi1AZmluZGV4ICVkZXN0cnVjdG9yCi1AY2luZGV4IGRpc2NhcmRlZCBzeW1ib2xzLCBtaWQtcnVsZSBhY3Rpb25zCi1AY2luZGV4IGVycm9yIHJlY292ZXJ5LCBtaWQtcnVsZSBhY3Rpb25zCi1JbiB0aGUgYWJvdmUgZXhhbXBsZSwgaWYgdGhlIHBhcnNlciBpbml0aWF0ZXMgZXJyb3IgcmVjb3ZlcnkgKEBweHJlZntFcnJvcgotUmVjb3Zlcnl9KSB3aGlsZSBwYXJzaW5nIHRoZSB0b2tlbnMgaW4gdGhlIGVtYmVkZGVkIHN0YXRlbWVudCBAY29kZXtzdG10fSwKLWl0IG1pZ2h0IGRpc2NhcmQgdGhlIHByZXZpb3VzIHNlbWFudGljIGNvbnRleHQgQGNvZGV7JDxjb250ZXh0PjV9IHdpdGhvdXQKLXJlc3RvcmluZyBpdC4KLVRodXMsIEBjb2RleyQ8Y29udGV4dD41fSBuZWVkcyBhIGRlc3RydWN0b3IgKEBweHJlZntEZXN0cnVjdG9yIERlY2wsICwgRnJlZWluZwotRGlzY2FyZGVkIFN5bWJvbHN9KS4KLUhvd2V2ZXIsIEJpc29uIGN1cnJlbnRseSBwcm92aWRlcyBubyBtZWFucyB0byBkZWNsYXJlIGEgZGVzdHJ1Y3RvciBmb3IgYQotbWlkLXJ1bGUgYWN0aW9uJ3Mgc2VtYW50aWMgdmFsdWUuCi0KLU9uZSBzb2x1dGlvbiBpcyB0byBidXJ5IHRoZSBtaWQtcnVsZSBhY3Rpb24gaW5zaWRlIGEgbm9udGVybWluYWwgc3ltYm9sIGFuZCB0bwotZGVjbGFyZSBhIGRlc3RydWN0b3IgZm9yIHRoYXQgc3ltYm9sOgotCi1AZXhhbXBsZQotQGdyb3VwCi0ldHlwZSA8Y29udGV4dD4gbGV0Ci0lZGVzdHJ1Y3RvciBAeyBwb3BfY29udGV4dCAoJCQpOyBAfSBsZXQKLQotJSUKLQotc3RtdDogIGxldCBzdG10Ci0gICAgICAgICAgICAgICBAeyAkJCA9ICQyOwotICAgICAgICAgICAgICAgICBwb3BfY29udGV4dCAoJDEpOyBAfQotICAgICAgIDsKLQotbGV0OiAgIExFVCAnKCcgdmFyICcpJwotICAgICAgICAgICAgICAgQHsgJCQgPSBwdXNoX2NvbnRleHQgKCk7Ci0gICAgICAgICAgICAgICAgIGRlY2xhcmVfdmFyaWFibGUgKCQzKTsgQH0KLSAgICAgICA7Ci0KLUBlbmQgZ3JvdXAKLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLU5vdGUgdGhhdCB0aGUgYWN0aW9uIGlzIG5vdyBhdCB0aGUgZW5kIG9mIGl0cyBydWxlLgotQW55IG1pZC1ydWxlIGFjdGlvbiBjYW4gYmUgY29udmVydGVkIHRvIGFuIGVuZC1vZi1ydWxlIGFjdGlvbiBpbiB0aGlzIHdheSwgYW5kCi10aGlzIGlzIHdoYXQgQmlzb24gYWN0dWFsbHkgZG9lcyB0byBpbXBsZW1lbnQgbWlkLXJ1bGUgYWN0aW9ucy4KLQotVGFraW5nIGFjdGlvbiBiZWZvcmUgYSBydWxlIGlzIGNvbXBsZXRlbHkgcmVjb2duaXplZCBvZnRlbiBsZWFkcyB0bwotY29uZmxpY3RzIHNpbmNlIHRoZSBwYXJzZXIgbXVzdCBjb21taXQgdG8gYSBwYXJzZSBpbiBvcmRlciB0byBleGVjdXRlIHRoZQotYWN0aW9uLiAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgdHdvIHJ1bGVzLCB3aXRob3V0IG1pZC1ydWxlIGFjdGlvbnMsCi1jYW4gY29leGlzdCBpbiBhIHdvcmtpbmcgcGFyc2VyIGJlY2F1c2UgdGhlIHBhcnNlciBjYW4gc2hpZnQgdGhlIG9wZW4tYnJhY2UKLXRva2VuIGFuZCBsb29rIGF0IHdoYXQgZm9sbG93cyBiZWZvcmUgZGVjaWRpbmcgd2hldGhlciB0aGVyZSBpcyBhCi1kZWNsYXJhdGlvbiBvciBub3Q6Ci0KLUBleGFtcGxlCi1AZ3JvdXAKLWNvbXBvdW5kOiAnQHsnIGRlY2xhcmF0aW9ucyBzdGF0ZW1lbnRzICdAfScKLSAgICAgICAgfCAnQHsnIHN0YXRlbWVudHMgJ0B9JwotICAgICAgICA7Ci1AZW5kIGdyb3VwCi1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci1CdXQgd2hlbiB3ZSBhZGQgYSBtaWQtcnVsZSBhY3Rpb24gYXMgZm9sbG93cywgdGhlIHJ1bGVzIGJlY29tZSBub25mdW5jdGlvbmFsOgotCi1AZXhhbXBsZQotQGdyb3VwCi1jb21wb3VuZDogQHsgcHJlcGFyZV9mb3JfbG9jYWxfdmFyaWFibGVzICgpOyBAfQotICAgICAgICAgICdAeycgZGVjbGFyYXRpb25zIHN0YXRlbWVudHMgJ0B9JwotQGVuZCBncm91cAotQGdyb3VwCi0gICAgICAgIHwgJ0B7JyBzdGF0ZW1lbnRzICdAfScKLSAgICAgICAgOwotQGVuZCBncm91cAotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotTm93IHRoZSBwYXJzZXIgaXMgZm9yY2VkIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHJ1biB0aGUgbWlkLXJ1bGUgYWN0aW9uCi13aGVuIGl0IGhhcyByZWFkIG5vIGZhcnRoZXIgdGhhbiB0aGUgb3Blbi1icmFjZS4gIEluIG90aGVyIHdvcmRzLCBpdAotbXVzdCBjb21taXQgdG8gdXNpbmcgb25lIHJ1bGUgb3IgdGhlIG90aGVyLCB3aXRob3V0IHN1ZmZpY2llbnQKLWluZm9ybWF0aW9uIHRvIGRvIGl0IGNvcnJlY3RseS4gIChUaGUgb3Blbi1icmFjZSB0b2tlbiBpcyB3aGF0IGlzIGNhbGxlZAotdGhlIEBkZm57bG9vay1haGVhZH0gdG9rZW4gYXQgdGhpcyB0aW1lLCBzaW5jZSB0aGUgcGFyc2VyIGlzIHN0aWxsCi1kZWNpZGluZyB3aGF0IHRvIGRvIGFib3V0IGl0LiAgQHhyZWZ7TG9vay1BaGVhZCwgLExvb2stQWhlYWQgVG9rZW5zfS4pCi0KLVlvdSBtaWdodCB0aGluayB0aGF0IHlvdSBjb3VsZCBjb3JyZWN0IHRoZSBwcm9ibGVtIGJ5IHB1dHRpbmcgaWRlbnRpY2FsCi1hY3Rpb25zIGludG8gdGhlIHR3byBydWxlcywgbGlrZSB0aGlzOgotCi1AZXhhbXBsZQotQGdyb3VwCi1jb21wb3VuZDogQHsgcHJlcGFyZV9mb3JfbG9jYWxfdmFyaWFibGVzICgpOyBAfQotICAgICAgICAgICdAeycgZGVjbGFyYXRpb25zIHN0YXRlbWVudHMgJ0B9JwotICAgICAgICB8IEB7IHByZXBhcmVfZm9yX2xvY2FsX3ZhcmlhYmxlcyAoKTsgQH0KLSAgICAgICAgICAnQHsnIHN0YXRlbWVudHMgJ0B9JwotICAgICAgICA7Ci1AZW5kIGdyb3VwCi1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci1CdXQgdGhpcyBkb2VzIG5vdCBoZWxwLCBiZWNhdXNlIEJpc29uIGRvZXMgbm90IHJlYWxpemUgdGhhdCB0aGUgdHdvIGFjdGlvbnMKLWFyZSBpZGVudGljYWwuICAoQmlzb24gbmV2ZXIgdHJpZXMgdG8gdW5kZXJzdGFuZCB0aGUgQyBjb2RlIGluIGFuIGFjdGlvbi4pCi0KLUlmIHRoZSBncmFtbWFyIGlzIHN1Y2ggdGhhdCBhIGRlY2xhcmF0aW9uIGNhbiBiZSBkaXN0aW5ndWlzaGVkIGZyb20gYQotc3RhdGVtZW50IGJ5IHRoZSBmaXJzdCB0b2tlbiAod2hpY2ggaXMgdHJ1ZSBpbiBDKSwgdGhlbiBvbmUgc29sdXRpb24gd2hpY2gKLWRvZXMgd29yayBpcyB0byBwdXQgdGhlIGFjdGlvbiBhZnRlciB0aGUgb3Blbi1icmFjZSwgbGlrZSB0aGlzOgotCi1AZXhhbXBsZQotQGdyb3VwCi1jb21wb3VuZDogJ0B7JyBAeyBwcmVwYXJlX2Zvcl9sb2NhbF92YXJpYWJsZXMgKCk7IEB9Ci0gICAgICAgICAgZGVjbGFyYXRpb25zIHN0YXRlbWVudHMgJ0B9JwotICAgICAgICB8ICdAeycgc3RhdGVtZW50cyAnQH0nCi0gICAgICAgIDsKLUBlbmQgZ3JvdXAKLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLU5vdyB0aGUgZmlyc3QgdG9rZW4gb2YgdGhlIGZvbGxvd2luZyBkZWNsYXJhdGlvbiBvciBzdGF0ZW1lbnQsCi13aGljaCB3b3VsZCBpbiBhbnkgY2FzZSB0ZWxsIEJpc29uIHdoaWNoIHJ1bGUgdG8gdXNlLCBjYW4gc3RpbGwgZG8gc28uCi0KLUFub3RoZXIgc29sdXRpb24gaXMgdG8gYnVyeSB0aGUgYWN0aW9uIGluc2lkZSBhIG5vbnRlcm1pbmFsIHN5bWJvbCB3aGljaAotc2VydmVzIGFzIGEgc3Vicm91dGluZToKLQotQGV4YW1wbGUKLUBncm91cAotc3Vicm91dGluZTogLyogZW1wdHkgKi8KLSAgICAgICAgICBAeyBwcmVwYXJlX2Zvcl9sb2NhbF92YXJpYWJsZXMgKCk7IEB9Ci0gICAgICAgIDsKLQotQGVuZCBncm91cAotCi1AZ3JvdXAKLWNvbXBvdW5kOiBzdWJyb3V0aW5lCi0gICAgICAgICAgJ0B7JyBkZWNsYXJhdGlvbnMgc3RhdGVtZW50cyAnQH0nCi0gICAgICAgIHwgc3Vicm91dGluZQotICAgICAgICAgICdAeycgc3RhdGVtZW50cyAnQH0nCi0gICAgICAgIDsKLUBlbmQgZ3JvdXAKLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLU5vdyBCaXNvbiBjYW4gZXhlY3V0ZSB0aGUgYWN0aW9uIGluIHRoZSBydWxlIGZvciBAY29kZXtzdWJyb3V0aW5lfSB3aXRob3V0Ci1kZWNpZGluZyB3aGljaCBydWxlIGZvciBAY29kZXtjb21wb3VuZH0gaXQgd2lsbCBldmVudHVhbGx5IHVzZS4KLQotQG5vZGUgTG9jYXRpb25zCi1Ac2VjdGlvbiBUcmFja2luZyBMb2NhdGlvbnMKLUBjaW5kZXggbG9jYXRpb24KLUBjaW5kZXggdGV4dHVhbCBsb2NhdGlvbgotQGNpbmRleCBsb2NhdGlvbiwgdGV4dHVhbAotCi1UaG91Z2ggZ3JhbW1hciBydWxlcyBhbmQgc2VtYW50aWMgYWN0aW9ucyBhcmUgZW5vdWdoIHRvIHdyaXRlIGEgZnVsbHkKLWZ1bmN0aW9uYWwgcGFyc2VyLCBpdCBjYW4gYmUgdXNlZnVsIHRvIHByb2Nlc3Mgc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLAotZXNwZWNpYWxseSBzeW1ib2wgbG9jYXRpb25zLgotCi1UaGUgd2F5IGxvY2F0aW9ucyBhcmUgaGFuZGxlZCBpcyBkZWZpbmVkIGJ5IHByb3ZpZGluZyBhIGRhdGEgdHlwZSwgYW5kCi1hY3Rpb25zIHRvIHRha2Ugd2hlbiBydWxlcyBhcmUgbWF0Y2hlZC4KLQotQG1lbnUKLSogTG9jYXRpb24gVHlwZTo6ICAgICAgICAgICAgICAgU3BlY2lmeWluZyBhIGRhdGEgdHlwZSBmb3IgbG9jYXRpb25zLgotKiBBY3Rpb25zIGFuZCBMb2NhdGlvbnM6OiAgICAgICBVc2luZyBsb2NhdGlvbnMgaW4gYWN0aW9ucy4KLSogTG9jYXRpb24gRGVmYXVsdCBBY3Rpb246OiAgICAgRGVmaW5pbmcgYSBnZW5lcmFsIHdheSB0byBjb21wdXRlIGxvY2F0aW9ucy4KLUBlbmQgbWVudQotCi1Abm9kZSBMb2NhdGlvbiBUeXBlCi1Ac3Vic2VjdGlvbiBEYXRhIFR5cGUgb2YgTG9jYXRpb25zCi1AY2luZGV4IGRhdGEgdHlwZSBvZiBsb2NhdGlvbnMKLUBjaW5kZXggZGVmYXVsdCBsb2NhdGlvbiB0eXBlCi0KLURlZmluaW5nIGEgZGF0YSB0eXBlIGZvciBsb2NhdGlvbnMgaXMgbXVjaCBzaW1wbGVyIHRoYW4gZm9yIHNlbWFudGljIHZhbHVlcywKLXNpbmNlIGFsbCB0b2tlbnMgYW5kIGdyb3VwaW5ncyBhbHdheXMgdXNlIHRoZSBzYW1lIHR5cGUuCi0KLVlvdSBjYW4gc3BlY2lmeSB0aGUgdHlwZSBvZiBsb2NhdGlvbnMgYnkgZGVmaW5pbmcgYSBtYWNybyBjYWxsZWQKLUBjb2Rle1lZTFRZUEV9LCBqdXN0IGFzIHlvdSBjYW4gc3BlY2lmeSB0aGUgc2VtYW50aWMgdmFsdWUgdHlwZSBieQotZGVmaW5pbmcgQGNvZGV7WVlTVFlQRX0gKEBweHJlZntWYWx1ZSBUeXBlfSkuCi1XaGVuIEBjb2Rle1lZTFRZUEV9IGlzIG5vdCBkZWZpbmVkLCBCaXNvbiB1c2VzIGEgZGVmYXVsdCBzdHJ1Y3R1cmUgdHlwZSB3aXRoCi1mb3VyIG1lbWJlcnM6Ci0KLUBleGFtcGxlCi10eXBlZGVmIHN0cnVjdCBZWUxUWVBFCi1AewotICBpbnQgZmlyc3RfbGluZTsKLSAgaW50IGZpcnN0X2NvbHVtbjsKLSAgaW50IGxhc3RfbGluZTsKLSAgaW50IGxhc3RfY29sdW1uOwotQH0gWVlMVFlQRTsKLUBlbmQgZXhhbXBsZQotCi1Abm9kZSBBY3Rpb25zIGFuZCBMb2NhdGlvbnMKLUBzdWJzZWN0aW9uIEFjdGlvbnMgYW5kIExvY2F0aW9ucwotQGNpbmRleCBsb2NhdGlvbiBhY3Rpb25zCi1AY2luZGV4IGFjdGlvbnMsIGxvY2F0aW9uCi1AdmluZGV4IEBAJAotQHZpbmRleCBAQEB2YXJ7bn0KLQotQWN0aW9ucyBhcmUgbm90IG9ubHkgdXNlZnVsIGZvciBkZWZpbmluZyBsYW5ndWFnZSBzZW1hbnRpY3MsIGJ1dCBhbHNvIGZvcgotZGVzY3JpYmluZyB0aGUgYmVoYXZpb3Igb2YgdGhlIG91dHB1dCBwYXJzZXIgd2l0aCBsb2NhdGlvbnMuCi0KLVRoZSBtb3N0IG9idmlvdXMgd2F5IGZvciBidWlsZGluZyBsb2NhdGlvbnMgb2Ygc3ludGFjdGljIGdyb3VwaW5ncyBpcyB2ZXJ5Ci1zaW1pbGFyIHRvIHRoZSB3YXkgc2VtYW50aWMgdmFsdWVzIGFyZSBjb21wdXRlZC4gIEluIGEgZ2l2ZW4gcnVsZSwgc2V2ZXJhbAotY29uc3RydWN0cyBjYW4gYmUgdXNlZCB0byBhY2Nlc3MgdGhlIGxvY2F0aW9ucyBvZiB0aGUgZWxlbWVudHMgYmVpbmcgbWF0Y2hlZC4KLVRoZSBsb2NhdGlvbiBvZiB0aGUgQHZhcntufXRoIGNvbXBvbmVudCBvZiB0aGUgcmlnaHQgaGFuZCBzaWRlIGlzCi1AY29kZXtAQEB2YXJ7bn19LCB3aGlsZSB0aGUgbG9jYXRpb24gb2YgdGhlIGxlZnQgaGFuZCBzaWRlIGdyb3VwaW5nIGlzCi1AY29kZXtAQCR9LgotCi1IZXJlIGlzIGEgYmFzaWMgZXhhbXBsZSB1c2luZyB0aGUgZGVmYXVsdCBkYXRhIHR5cGUgZm9yIGxvY2F0aW9uczoKLQotQGV4YW1wbGUKLUBncm91cAotZXhwOiAgICBAZG90c3t9Ci0gICAgICAgIHwgZXhwICcvJyBleHAKLSAgICAgICAgICAgIEB7Ci0gICAgICAgICAgICAgIEBAJC5maXJzdF9jb2x1bW4gPSBAQDEuZmlyc3RfY29sdW1uOwotICAgICAgICAgICAgICBAQCQuZmlyc3RfbGluZSA9IEBAMS5maXJzdF9saW5lOwotICAgICAgICAgICAgICBAQCQubGFzdF9jb2x1bW4gPSBAQDMubGFzdF9jb2x1bW47Ci0gICAgICAgICAgICAgIEBAJC5sYXN0X2xpbmUgPSBAQDMubGFzdF9saW5lOwotICAgICAgICAgICAgICBpZiAoJDMpCi0gICAgICAgICAgICAgICAgJCQgPSAkMSAvICQzOwotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgQHsKLSAgICAgICAgICAgICAgICAgICQkID0gMTsKLSAgICAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJEaXZpc2lvbiBieSB6ZXJvLCBsJWQsYyVkLWwlZCxjJWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQEAzLmZpcnN0X2xpbmUsIEBAMy5maXJzdF9jb2x1bW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBAQDMubGFzdF9saW5lLCBAQDMubGFzdF9jb2x1bW4pOwotICAgICAgICAgICAgICAgIEB9Ci0gICAgICAgICAgICBAfQotQGVuZCBncm91cAotQGVuZCBleGFtcGxlCi0KLUFzIGZvciBzZW1hbnRpYyB2YWx1ZXMsIHRoZXJlIGlzIGEgZGVmYXVsdCBhY3Rpb24gZm9yIGxvY2F0aW9ucyB0aGF0IGlzCi1ydW4gZWFjaCB0aW1lIGEgcnVsZSBpcyBtYXRjaGVkLiAgSXQgc2V0cyB0aGUgYmVnaW5uaW5nIG9mIEBjb2Rle0BAJH0gdG8gdGhlCi1iZWdpbm5pbmcgb2YgdGhlIGZpcnN0IHN5bWJvbCwgYW5kIHRoZSBlbmQgb2YgQGNvZGV7QEAkfSB0byB0aGUgZW5kIG9mIHRoZQotbGFzdCBzeW1ib2wuCi0KLVdpdGggdGhpcyBkZWZhdWx0IGFjdGlvbiwgdGhlIGxvY2F0aW9uIHRyYWNraW5nIGNhbiBiZSBmdWxseSBhdXRvbWF0aWMuICBUaGUKLWV4YW1wbGUgYWJvdmUgc2ltcGx5IHJld3JpdGVzIHRoaXMgd2F5OgotCi1AZXhhbXBsZQotQGdyb3VwCi1leHA6ICAgIEBkb3Rze30KLSAgICAgICAgfCBleHAgJy8nIGV4cAotICAgICAgICAgICAgQHsKLSAgICAgICAgICAgICAgaWYgKCQzKQotICAgICAgICAgICAgICAgICQkID0gJDEgLyAkMzsKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEB7Ci0gICAgICAgICAgICAgICAgICAkJCA9IDE7Ci0gICAgICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiRGl2aXNpb24gYnkgemVybywgbCVkLGMlZC1sJWQsYyVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEBAMy5maXJzdF9saW5lLCBAQDMuZmlyc3RfY29sdW1uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQEAzLmxhc3RfbGluZSwgQEAzLmxhc3RfY29sdW1uKTsKLSAgICAgICAgICAgICAgICBAfQotICAgICAgICAgICAgQH0KLUBlbmQgZ3JvdXAKLUBlbmQgZXhhbXBsZQotCi1AdmluZGV4IHl5bGxvYwotSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBhY2Nlc3MgdGhlIGxvY2F0aW9uIG9mIHRoZSBsb29rLWFoZWFkIHRva2VuLCBpZiBhbnksCi1mcm9tIGEgc2VtYW50aWMgYWN0aW9uLgotVGhpcyBsb2NhdGlvbiBpcyBzdG9yZWQgaW4gQGNvZGV7eXlsbG9jfS4KLUB4cmVme0FjdGlvbiBGZWF0dXJlcywgLFNwZWNpYWwgRmVhdHVyZXMgZm9yIFVzZSBpbiBBY3Rpb25zfS4KLQotQG5vZGUgTG9jYXRpb24gRGVmYXVsdCBBY3Rpb24KLUBzdWJzZWN0aW9uIERlZmF1bHQgQWN0aW9uIGZvciBMb2NhdGlvbnMKLUB2aW5kZXggWVlMTE9DX0RFRkFVTFQKLUBjaW5kZXggQGFjcm9ueW17R0xSfSBwYXJzZXJzIGFuZCBAY29kZXtZWUxMT0NfREVGQVVMVH0KLQotQWN0dWFsbHksIGFjdGlvbnMgYXJlIG5vdCB0aGUgYmVzdCBwbGFjZSB0byBjb21wdXRlIGxvY2F0aW9ucy4gIFNpbmNlCi1sb2NhdGlvbnMgYXJlIG11Y2ggbW9yZSBnZW5lcmFsIHRoYW4gc2VtYW50aWMgdmFsdWVzLCB0aGVyZSBpcyByb29tIGluCi10aGUgb3V0cHV0IHBhcnNlciB0byByZWRlZmluZSB0aGUgZGVmYXVsdCBhY3Rpb24gdG8gdGFrZSBmb3IgZWFjaAotcnVsZS4gIFRoZSBAY29kZXtZWUxMT0NfREVGQVVMVH0gbWFjcm8gaXMgaW52b2tlZCBlYWNoIHRpbWUgYSBydWxlIGlzCi1tYXRjaGVkLCBiZWZvcmUgdGhlIGFzc29jaWF0ZWQgYWN0aW9uIGlzIHJ1bi4gIEl0IGlzIGFsc28gaW52b2tlZAotd2hpbGUgcHJvY2Vzc2luZyBhIHN5bnRheCBlcnJvciwgdG8gY29tcHV0ZSB0aGUgZXJyb3IncyBsb2NhdGlvbi4KLUJlZm9yZSByZXBvcnRpbmcgYW4gdW5yZXNvbHZhYmxlIHN5bnRhY3RpYyBhbWJpZ3VpdHksIGEgQGFjcm9ueW17R0xSfQotcGFyc2VyIGludm9rZXMgQGNvZGV7WVlMTE9DX0RFRkFVTFR9IHJlY3Vyc2l2ZWx5IHRvIGNvbXB1dGUgdGhlIGxvY2F0aW9uCi1vZiB0aGF0IGFtYmlndWl0eS4KLQotTW9zdCBvZiB0aGUgdGltZSwgdGhpcyBtYWNybyBpcyBnZW5lcmFsIGVub3VnaCB0byBzdXBwcmVzcyBsb2NhdGlvbgotZGVkaWNhdGVkIGNvZGUgZnJvbSBzZW1hbnRpYyBhY3Rpb25zLgotCi1UaGUgQGNvZGV7WVlMTE9DX0RFRkFVTFR9IG1hY3JvIHRha2VzIHRocmVlIHBhcmFtZXRlcnMuICBUaGUgZmlyc3Qgb25lIGlzCi10aGUgbG9jYXRpb24gb2YgdGhlIGdyb3VwaW5nICh0aGUgcmVzdWx0IG9mIHRoZSBjb21wdXRhdGlvbikuICBXaGVuIGEKLXJ1bGUgaXMgbWF0Y2hlZCwgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaWRlbnRpZmllcyBsb2NhdGlvbnMgb2YKLWFsbCByaWdodCBoYW5kIHNpZGUgZWxlbWVudHMgb2YgdGhlIHJ1bGUgYmVpbmcgbWF0Y2hlZCwgYW5kIHRoZSB0aGlyZAotcGFyYW1ldGVyIGlzIHRoZSBzaXplIG9mIHRoZSBydWxlJ3MgcmlnaHQgaGFuZCBzaWRlLgotV2hlbiBhIEBhY3Jvbnlte0dMUn0gcGFyc2VyIHJlcG9ydHMgYW4gYW1iaWd1aXR5LCB3aGljaCBvZiBtdWx0aXBsZSBjYW5kaWRhdGUKLXJpZ2h0IGhhbmQgc2lkZXMgaXQgcGFzc2VzIHRvIEBjb2Rle1lZTExPQ19ERUZBVUxUfSBpcyB1bmRlZmluZWQuCi1XaGVuIHByb2Nlc3NpbmcgYSBzeW50YXggZXJyb3IsIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlkZW50aWZpZXMgbG9jYXRpb25zCi1vZiB0aGUgc3ltYm9scyB0aGF0IHdlcmUgZGlzY2FyZGVkIGR1cmluZyBlcnJvciBwcm9jZXNzaW5nLCBhbmQgdGhlIHRoaXJkCi1wYXJhbWV0ZXIgaXMgdGhlIG51bWJlciBvZiBkaXNjYXJkZWQgc3ltYm9scy4KLQotQnkgZGVmYXVsdCwgQGNvZGV7WVlMTE9DX0RFRkFVTFR9IGlzIGRlZmluZWQgdGhpcyB3YXk6Ci0KLUBzbWFsbGV4YW1wbGUKLUBncm91cAotIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYgKE4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBAeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gWVlSSFNMT0MoUmhzLCAxKS5maXJzdF9saW5lOyAgICAgICAgIFwKLSAgICAgICAgICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gWVlSSFNMT0MoUmhzLCAxKS5maXJzdF9jb2x1bW47ICAgICAgIFwKLSAgICAgICAgICAoQ3VycmVudCkubGFzdF9saW5lICAgID0gWVlSSFNMT0MoUmhzLCBOKS5sYXN0X2xpbmU7ICAgICAgICAgIFwKLSAgICAgICAgICAoQ3VycmVudCkubGFzdF9jb2x1bW4gID0gWVlSSFNMT0MoUmhzLCBOKS5sYXN0X2NvbHVtbjsgICAgICAgIFwKLSAgICAgICAgQH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIEB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChDdXJyZW50KS5maXJzdF9saW5lICAgPSAoQ3VycmVudCkubGFzdF9saW5lICAgPSAgICAgICAgICAgICAgXAotICAgICAgICAgICAgWVlSSFNMT0MoUmhzLCAwKS5sYXN0X2xpbmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSAoQ3VycmVudCkubGFzdF9jb2x1bW4gPSAgICAgICAgICAgICAgXAotICAgICAgICAgICAgWVlSSFNMT0MoUmhzLCAwKS5sYXN0X2NvbHVtbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBAfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB3aGlsZSAoMCkKLUBlbmQgZ3JvdXAKLUBlbmQgc21hbGxleGFtcGxlCi0KLXdoZXJlIEBjb2Rle1lZUkhTTE9DIChyaHMsIGspfSBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIEB2YXJ7a310aCBzeW1ib2wKLWluIEB2YXJ7cmhzfSB3aGVuIEB2YXJ7a30gaXMgcG9zaXRpdmUsIGFuZCB0aGUgbG9jYXRpb24gb2YgdGhlIHN5bWJvbAotanVzdCBiZWZvcmUgdGhlIHJlZHVjdGlvbiB3aGVuIEB2YXJ7a30gYW5kIEB2YXJ7bn0gYXJlIGJvdGggemVyby4KLQotV2hlbiBkZWZpbmluZyBAY29kZXtZWUxMT0NfREVGQVVMVH0sIHlvdSBzaG91bGQgY29uc2lkZXIgdGhhdDoKLQotQGl0ZW1pemUgQGJ1bGxldAotQGl0ZW0KLUFsbCBhcmd1bWVudHMgYXJlIGZyZWUgb2Ygc2lkZS1lZmZlY3RzLiAgSG93ZXZlciwgb25seSB0aGUgZmlyc3Qgb25lICh0aGUKLXJlc3VsdCkgc2hvdWxkIGJlIG1vZGlmaWVkIGJ5IEBjb2Rle1lZTExPQ19ERUZBVUxUfS4KLQotQGl0ZW0KLUZvciBjb25zaXN0ZW5jeSB3aXRoIHNlbWFudGljIGFjdGlvbnMsIHZhbGlkIGluZGV4ZXMgd2l0aGluIHRoZQotcmlnaHQgaGFuZCBzaWRlIHJhbmdlIGZyb20gMSB0byBAdmFye259LiAgV2hlbiBAdmFye259IGlzIHplcm8sIG9ubHkgMCBpcyBhCi12YWxpZCBpbmRleCwgYW5kIGl0IHJlZmVycyB0byB0aGUgc3ltYm9sIGp1c3QgYmVmb3JlIHRoZSByZWR1Y3Rpb24uCi1EdXJpbmcgZXJyb3IgcHJvY2Vzc2luZyBAdmFye259IGlzIGFsd2F5cyBwb3NpdGl2ZS4KLQotQGl0ZW0KLVlvdXIgbWFjcm8gc2hvdWxkIHBhcmVudGhlc2l6ZSBpdHMgYXJndW1lbnRzLCBpZiBuZWVkIGJlLCBzaW5jZSB0aGUKLWFjdHVhbCBhcmd1bWVudHMgbWF5IG5vdCBiZSBzdXJyb3VuZGVkIGJ5IHBhcmVudGhlc2VzLiAgQWxzbywgeW91cgotbWFjcm8gc2hvdWxkIGV4cGFuZCB0byBzb21ldGhpbmcgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHNpbmdsZQotc3RhdGVtZW50IHdoZW4gaXQgaXMgZm9sbG93ZWQgYnkgYSBzZW1pY29sb24uCi1AZW5kIGl0ZW1pemUKLQotQG5vZGUgRGVjbGFyYXRpb25zCi1Ac2VjdGlvbiBCaXNvbiBEZWNsYXJhdGlvbnMKLUBjaW5kZXggZGVjbGFyYXRpb25zLCBCaXNvbgotQGNpbmRleCBCaXNvbiBkZWNsYXJhdGlvbnMKLQotVGhlIEBkZm57Qmlzb24gZGVjbGFyYXRpb25zfSBzZWN0aW9uIG9mIGEgQmlzb24gZ3JhbW1hciBkZWZpbmVzIHRoZSBzeW1ib2xzCi11c2VkIGluIGZvcm11bGF0aW5nIHRoZSBncmFtbWFyIGFuZCB0aGUgZGF0YSB0eXBlcyBvZiBzZW1hbnRpYyB2YWx1ZXMuCi1AeHJlZntTeW1ib2xzfS4KLQotQWxsIHRva2VuIHR5cGUgbmFtZXMgKGJ1dCBub3Qgc2luZ2xlLWNoYXJhY3RlciBsaXRlcmFsIHRva2VucyBzdWNoIGFzCi1AY29kZXsnKyd9IGFuZCBAY29kZXsnKid9KSBtdXN0IGJlIGRlY2xhcmVkLiAgTm9udGVybWluYWwgc3ltYm9scyBtdXN0IGJlCi1kZWNsYXJlZCBpZiB5b3UgbmVlZCB0byBzcGVjaWZ5IHdoaWNoIGRhdGEgdHlwZSB0byB1c2UgZm9yIHRoZSBzZW1hbnRpYwotdmFsdWUgKEBweHJlZntNdWx0aXBsZSBUeXBlcywgLE1vcmUgVGhhbiBPbmUgVmFsdWUgVHlwZX0pLgotCi1UaGUgZmlyc3QgcnVsZSBpbiB0aGUgZmlsZSBhbHNvIHNwZWNpZmllcyB0aGUgc3RhcnQgc3ltYm9sLCBieSBkZWZhdWx0LgotSWYgeW91IHdhbnQgc29tZSBvdGhlciBzeW1ib2wgdG8gYmUgdGhlIHN0YXJ0IHN5bWJvbCwgeW91IG11c3QgZGVjbGFyZQotaXQgZXhwbGljaXRseSAoQHB4cmVme0xhbmd1YWdlIGFuZCBHcmFtbWFyLCAsTGFuZ3VhZ2VzIGFuZCBDb250ZXh0LUZyZWUKLUdyYW1tYXJzfSkuCi0KLUBtZW51Ci0qIFJlcXVpcmUgRGVjbDo6ICAgICAgUmVxdWlyaW5nIGEgQmlzb24gdmVyc2lvbi4KLSogVG9rZW4gRGVjbDo6ICAgICAgICBEZWNsYXJpbmcgdGVybWluYWwgc3ltYm9scy4KLSogUHJlY2VkZW5jZSBEZWNsOjogICBEZWNsYXJpbmcgdGVybWluYWxzIHdpdGggcHJlY2VkZW5jZSBhbmQgYXNzb2NpYXRpdml0eS4KLSogVW5pb24gRGVjbDo6ICAgICAgICBEZWNsYXJpbmcgdGhlIHNldCBvZiBhbGwgc2VtYW50aWMgdmFsdWUgdHlwZXMuCi0qIFR5cGUgRGVjbDo6ICAgICAgICAgRGVjbGFyaW5nIHRoZSBjaG9pY2Ugb2YgdHlwZSBmb3IgYSBub250ZXJtaW5hbCBzeW1ib2wuCi0qIEluaXRpYWwgQWN0aW9uIERlY2w6OiAgQ29kZSBydW4gYmVmb3JlIHBhcnNpbmcgc3RhcnRzLgotKiBEZXN0cnVjdG9yIERlY2w6OiAgIERlY2xhcmluZyBob3cgc3ltYm9scyBhcmUgZnJlZWQuCi0qIEV4cGVjdCBEZWNsOjogICAgICAgU3VwcHJlc3Npbmcgd2FybmluZ3MgYWJvdXQgcGFyc2luZyBjb25mbGljdHMuCi0qIFN0YXJ0IERlY2w6OiAgICAgICAgU3BlY2lmeWluZyB0aGUgc3RhcnQgc3ltYm9sLgotKiBQdXJlIERlY2w6OiAgICAgICAgIFJlcXVlc3RpbmcgYSByZWVudHJhbnQgcGFyc2VyLgotKiBEZWNsIFN1bW1hcnk6OiAgICAgIFRhYmxlIG9mIGFsbCBCaXNvbiBkZWNsYXJhdGlvbnMuCi1AZW5kIG1lbnUKLQotQG5vZGUgUmVxdWlyZSBEZWNsCi1Ac3Vic2VjdGlvbiBSZXF1aXJlIGEgVmVyc2lvbiBvZiBCaXNvbgotQGNpbmRleCB2ZXJzaW9uIHJlcXVpcmVtZW50Ci1AY2luZGV4IHJlcXVpcmluZyBhIHZlcnNpb24gb2YgQmlzb24KLUBmaW5kZXggJXJlcXVpcmUKLQotWW91IG1heSByZXF1aXJlIHRoZSBtaW5pbXVtIHZlcnNpb24gb2YgQmlzb24gdG8gcHJvY2VzcyB0aGUgZ3JhbW1hci4gIElmCi10aGUgcmVxdWlyZW1lbnQgaXMgbm90IG1ldCwgQGNvbW1hbmR7Ymlzb259IGV4aXRzIHdpdGggYW4gZXJyb3IgKGV4aXQKLXN0YXR1cyA2MykuCi0KLUBleGFtcGxlCi0lcmVxdWlyZSAiQHZhcnt2ZXJzaW9ufSIKLUBlbmQgZXhhbXBsZQotCi1Abm9kZSBUb2tlbiBEZWNsCi1Ac3Vic2VjdGlvbiBUb2tlbiBUeXBlIE5hbWVzCi1AY2luZGV4IGRlY2xhcmluZyB0b2tlbiB0eXBlIG5hbWVzCi1AY2luZGV4IHRva2VuIHR5cGUgbmFtZXMsIGRlY2xhcmluZwotQGNpbmRleCBkZWNsYXJpbmcgbGl0ZXJhbCBzdHJpbmcgdG9rZW5zCi1AZmluZGV4ICV0b2tlbgotCi1UaGUgYmFzaWMgd2F5IHRvIGRlY2xhcmUgYSB0b2tlbiB0eXBlIG5hbWUgKHRlcm1pbmFsIHN5bWJvbCkgaXMgYXMgZm9sbG93czoKLQotQGV4YW1wbGUKLSV0b2tlbiBAdmFye25hbWV9Ci1AZW5kIGV4YW1wbGUKLQotQmlzb24gd2lsbCBjb252ZXJ0IHRoaXMgaW50byBhIEBjb2RleyNkZWZpbmV9IGRpcmVjdGl2ZSBpbgotdGhlIHBhcnNlciwgc28gdGhhdCB0aGUgZnVuY3Rpb24gQGNvZGV7eXlsZXh9IChpZiBpdCBpcyBpbiB0aGlzIGZpbGUpCi1jYW4gdXNlIHRoZSBuYW1lIEB2YXJ7bmFtZX0gdG8gc3RhbmQgZm9yIHRoaXMgdG9rZW4gdHlwZSdzIGNvZGUuCi0KLUFsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIEBjb2RleyVsZWZ0fSwgQGNvZGV7JXJpZ2h0fSwgb3IKLUBjb2RleyVub25hc3NvY30gaW5zdGVhZCBvZiBAY29kZXsldG9rZW59LCBpZiB5b3Ugd2lzaCB0byBzcGVjaWZ5Ci1hc3NvY2lhdGl2aXR5IGFuZCBwcmVjZWRlbmNlLiAgQHhyZWZ7UHJlY2VkZW5jZSBEZWNsLCAsT3BlcmF0b3IKLVByZWNlZGVuY2V9LgotCi1Zb3UgY2FuIGV4cGxpY2l0bHkgc3BlY2lmeSB0aGUgbnVtZXJpYyBjb2RlIGZvciBhIHRva2VuIHR5cGUgYnkgYXBwZW5kaW5nCi1hIGRlY2ltYWwgb3IgaGV4YWRlY2ltYWwgaW50ZWdlciB2YWx1ZSBpbiB0aGUgZmllbGQgaW1tZWRpYXRlbHkKLWZvbGxvd2luZyB0aGUgdG9rZW4gbmFtZToKLQotQGV4YW1wbGUKLSV0b2tlbiBOVU0gMzAwCi0ldG9rZW4gWE5VTSAweDEyZCAvLyBhIEdOVSBleHRlbnNpb24KLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLUl0IGlzIGdlbmVyYWxseSBiZXN0LCBob3dldmVyLCB0byBsZXQgQmlzb24gY2hvb3NlIHRoZSBudW1lcmljIGNvZGVzIGZvcgotYWxsIHRva2VuIHR5cGVzLiAgQmlzb24gd2lsbCBhdXRvbWF0aWNhbGx5IHNlbGVjdCBjb2RlcyB0aGF0IGRvbid0IGNvbmZsaWN0Ci13aXRoIGVhY2ggb3RoZXIgb3Igd2l0aCBub3JtYWwgY2hhcmFjdGVycy4KLQotSW4gdGhlIGV2ZW50IHRoYXQgdGhlIHN0YWNrIHR5cGUgaXMgYSB1bmlvbiwgeW91IG11c3QgYXVnbWVudCB0aGUKLUBjb2RleyV0b2tlbn0gb3Igb3RoZXIgdG9rZW4gZGVjbGFyYXRpb24gdG8gaW5jbHVkZSB0aGUgZGF0YSB0eXBlCi1hbHRlcm5hdGl2ZSBkZWxpbWl0ZWQgYnkgYW5nbGUtYnJhY2tldHMgKEBweHJlZntNdWx0aXBsZSBUeXBlcywgLE1vcmUKLVRoYW4gT25lIFZhbHVlIFR5cGV9KS4KLQotRm9yIGV4YW1wbGU6Ci0KLUBleGFtcGxlCi1AZ3JvdXAKLSV1bmlvbiBAeyAgICAgICAgICAgICAgLyogZGVmaW5lIHN0YWNrIHR5cGUgKi8KLSAgZG91YmxlIHZhbDsKLSAgc3ltcmVjICp0cHRyOwotQH0KLSV0b2tlbiA8dmFsPiBOVU0gICAgICAvKiBkZWZpbmUgdG9rZW4gTlVNIGFuZCBpdHMgdHlwZSAqLwotQGVuZCBncm91cAotQGVuZCBleGFtcGxlCi0KLVlvdSBjYW4gYXNzb2NpYXRlIGEgbGl0ZXJhbCBzdHJpbmcgdG9rZW4gd2l0aCBhIHRva2VuIHR5cGUgbmFtZSBieQotd3JpdGluZyB0aGUgbGl0ZXJhbCBzdHJpbmcgYXQgdGhlIGVuZCBvZiBhIEBjb2RleyV0b2tlbn0KLWRlY2xhcmF0aW9uIHdoaWNoIGRlY2xhcmVzIHRoZSBuYW1lLiAgRm9yIGV4YW1wbGU6Ci0KLUBleGFtcGxlCi0ldG9rZW4gYXJyb3cgIj0+IgotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotRm9yIGV4YW1wbGUsIGEgZ3JhbW1hciBmb3IgdGhlIEMgbGFuZ3VhZ2UgbWlnaHQgc3BlY2lmeSB0aGVzZSBuYW1lcyB3aXRoCi1lcXVpdmFsZW50IGxpdGVyYWwgc3RyaW5nIHRva2VuczoKLQotQGV4YW1wbGUKLSV0b2tlbiAgPG9wZXJhdG9yPiAgT1IgICAgICAifHwiCi0ldG9rZW4gIDxvcGVyYXRvcj4gIExFIDEzNCAgIjw9IgotJWxlZnQgIE9SICAiPD0iCi1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci1PbmNlIHlvdSBlcXVhdGUgdGhlIGxpdGVyYWwgc3RyaW5nIGFuZCB0aGUgdG9rZW4gbmFtZSwgeW91IGNhbiB1c2UgdGhlbQotaW50ZXJjaGFuZ2VhYmx5IGluIGZ1cnRoZXIgZGVjbGFyYXRpb25zIG9yIHRoZSBncmFtbWFyIHJ1bGVzLiAgVGhlCi1AY29kZXt5eWxleH0gZnVuY3Rpb24gY2FuIHVzZSB0aGUgdG9rZW4gbmFtZSBvciB0aGUgbGl0ZXJhbCBzdHJpbmcgdG8KLW9idGFpbiB0aGUgdG9rZW4gdHlwZSBjb2RlIG51bWJlciAoQHB4cmVme0NhbGxpbmcgQ29udmVudGlvbn0pLgotCi1Abm9kZSBQcmVjZWRlbmNlIERlY2wKLUBzdWJzZWN0aW9uIE9wZXJhdG9yIFByZWNlZGVuY2UKLUBjaW5kZXggcHJlY2VkZW5jZSBkZWNsYXJhdGlvbnMKLUBjaW5kZXggZGVjbGFyaW5nIG9wZXJhdG9yIHByZWNlZGVuY2UKLUBjaW5kZXggb3BlcmF0b3IgcHJlY2VkZW5jZSwgZGVjbGFyaW5nCi0KLVVzZSB0aGUgQGNvZGV7JWxlZnR9LCBAY29kZXslcmlnaHR9IG9yIEBjb2RleyVub25hc3NvY30gZGVjbGFyYXRpb24gdG8KLWRlY2xhcmUgYSB0b2tlbiBhbmQgc3BlY2lmeSBpdHMgcHJlY2VkZW5jZSBhbmQgYXNzb2NpYXRpdml0eSwgYWxsIGF0Ci1vbmNlLiAgVGhlc2UgYXJlIGNhbGxlZCBAZGZue3ByZWNlZGVuY2UgZGVjbGFyYXRpb25zfS4KLUB4cmVme1ByZWNlZGVuY2UsICxPcGVyYXRvciBQcmVjZWRlbmNlfSwgZm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gb24KLW9wZXJhdG9yIHByZWNlZGVuY2UuCi0KLVRoZSBzeW50YXggb2YgYSBwcmVjZWRlbmNlIGRlY2xhcmF0aW9uIGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YKLUBjb2RleyV0b2tlbn06IGVpdGhlcgotCi1AZXhhbXBsZQotJWxlZnQgQHZhcntzeW1ib2xzfUBkb3Rze30KLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLW9yCi0KLUBleGFtcGxlCi0lbGVmdCA8QHZhcnt0eXBlfT4gQHZhcntzeW1ib2xzfUBkb3Rze30KLUBlbmQgZXhhbXBsZQotCi1BbmQgaW5kZWVkIGFueSBvZiB0aGVzZSBkZWNsYXJhdGlvbnMgc2VydmVzIHRoZSBwdXJwb3NlcyBvZiBAY29kZXsldG9rZW59LgotQnV0IGluIGFkZGl0aW9uLCB0aGV5IHNwZWNpZnkgdGhlIGFzc29jaWF0aXZpdHkgYW5kIHJlbGF0aXZlIHByZWNlZGVuY2UgZm9yCi1hbGwgdGhlIEB2YXJ7c3ltYm9sc306Ci0KLUBpdGVtaXplIEBidWxsZXQKLUBpdGVtCi1UaGUgYXNzb2NpYXRpdml0eSBvZiBhbiBvcGVyYXRvciBAdmFye29wfSBkZXRlcm1pbmVzIGhvdyByZXBlYXRlZCB1c2VzCi1vZiB0aGUgb3BlcmF0b3IgbmVzdDogd2hldGhlciBAc2FtcHtAdmFye3h9IEB2YXJ7b3B9IEB2YXJ7eX0gQHZhcntvcH0KLUB2YXJ7en19IGlzIHBhcnNlZCBieSBncm91cGluZyBAdmFye3h9IHdpdGggQHZhcnt5fSBmaXJzdCBvciBieQotZ3JvdXBpbmcgQHZhcnt5fSB3aXRoIEB2YXJ7en0gZmlyc3QuICBAY29kZXslbGVmdH0gc3BlY2lmaWVzCi1sZWZ0LWFzc29jaWF0aXZpdHkgKGdyb3VwaW5nIEB2YXJ7eH0gd2l0aCBAdmFye3l9IGZpcnN0KSBhbmQKLUBjb2RleyVyaWdodH0gc3BlY2lmaWVzIHJpZ2h0LWFzc29jaWF0aXZpdHkgKGdyb3VwaW5nIEB2YXJ7eX0gd2l0aAotQHZhcnt6fSBmaXJzdCkuICBAY29kZXslbm9uYXNzb2N9IHNwZWNpZmllcyBubyBhc3NvY2lhdGl2aXR5LCB3aGljaAotbWVhbnMgdGhhdCBAc2FtcHtAdmFye3h9IEB2YXJ7b3B9IEB2YXJ7eX0gQHZhcntvcH0gQHZhcnt6fX0gaXMKLWNvbnNpZGVyZWQgYSBzeW50YXggZXJyb3IuCi0KLUBpdGVtCi1UaGUgcHJlY2VkZW5jZSBvZiBhbiBvcGVyYXRvciBkZXRlcm1pbmVzIGhvdyBpdCBuZXN0cyB3aXRoIG90aGVyIG9wZXJhdG9ycy4KLUFsbCB0aGUgdG9rZW5zIGRlY2xhcmVkIGluIGEgc2luZ2xlIHByZWNlZGVuY2UgZGVjbGFyYXRpb24gaGF2ZSBlcXVhbAotcHJlY2VkZW5jZSBhbmQgbmVzdCB0b2dldGhlciBhY2NvcmRpbmcgdG8gdGhlaXIgYXNzb2NpYXRpdml0eS4KLVdoZW4gdHdvIHRva2VucyBkZWNsYXJlZCBpbiBkaWZmZXJlbnQgcHJlY2VkZW5jZSBkZWNsYXJhdGlvbnMgYXNzb2NpYXRlLAotdGhlIG9uZSBkZWNsYXJlZCBsYXRlciBoYXMgdGhlIGhpZ2hlciBwcmVjZWRlbmNlIGFuZCBpcyBncm91cGVkIGZpcnN0LgotQGVuZCBpdGVtaXplCi0KLUBub2RlIFVuaW9uIERlY2wKLUBzdWJzZWN0aW9uIFRoZSBDb2xsZWN0aW9uIG9mIFZhbHVlIFR5cGVzCi1AY2luZGV4IGRlY2xhcmluZyB2YWx1ZSB0eXBlcwotQGNpbmRleCB2YWx1ZSB0eXBlcywgZGVjbGFyaW5nCi1AZmluZGV4ICV1bmlvbgotCi1UaGUgQGNvZGV7JXVuaW9ufSBkZWNsYXJhdGlvbiBzcGVjaWZpZXMgdGhlIGVudGlyZSBjb2xsZWN0aW9uIG9mCi1wb3NzaWJsZSBkYXRhIHR5cGVzIGZvciBzZW1hbnRpYyB2YWx1ZXMuICBUaGUga2V5d29yZCBAY29kZXsldW5pb259IGlzCi1mb2xsb3dlZCBieSBicmFjZWQgY29kZSBjb250YWluaW5nIHRoZSBzYW1lIHRoaW5nIHRoYXQgZ29lcyBpbnNpZGUgYQotQGNvZGV7dW5pb259IGluIENALgotCi1Gb3IgZXhhbXBsZToKLQotQGV4YW1wbGUKLUBncm91cAotJXVuaW9uIEB7Ci0gIGRvdWJsZSB2YWw7Ci0gIHN5bXJlYyAqdHB0cjsKLUB9Ci1AZW5kIGdyb3VwCi1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci1UaGlzIHNheXMgdGhhdCB0aGUgdHdvIGFsdGVybmF0aXZlIHR5cGVzIGFyZSBAY29kZXtkb3VibGV9IGFuZCBAY29kZXtzeW1yZWMKLSp9LiAgVGhleSBhcmUgZ2l2ZW4gbmFtZXMgQGNvZGV7dmFsfSBhbmQgQGNvZGV7dHB0cn07IHRoZXNlIG5hbWVzIGFyZSB1c2VkCi1pbiB0aGUgQGNvZGV7JXRva2VufSBhbmQgQGNvZGV7JXR5cGV9IGRlY2xhcmF0aW9ucyB0byBwaWNrIG9uZSBvZiB0aGUgdHlwZXMKLWZvciBhIHRlcm1pbmFsIG9yIG5vbnRlcm1pbmFsIHN5bWJvbCAoQHB4cmVme1R5cGUgRGVjbCwgLE5vbnRlcm1pbmFsIFN5bWJvbHN9KS4KLQotQXMgYW4gZXh0ZW5zaW9uIHRvIEBhY3Jvbnlte1BPU0lYfSwgYSB0YWcgaXMgYWxsb3dlZCBhZnRlciB0aGUKLUBjb2Rle3VuaW9ufS4gIEZvciBleGFtcGxlOgotCi1AZXhhbXBsZQotQGdyb3VwCi0ldW5pb24gdmFsdWUgQHsKLSAgZG91YmxlIHZhbDsKLSAgc3ltcmVjICp0cHRyOwotQH0KLUBlbmQgZ3JvdXAKLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLXNwZWNpZmllcyB0aGUgdW5pb24gdGFnIEBjb2Rle3ZhbHVlfSwgc28gdGhlIGNvcnJlc3BvbmRpbmcgQyB0eXBlIGlzCi1AY29kZXt1bmlvbiB2YWx1ZX0uICBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYSB0YWcsIGl0IGRlZmF1bHRzIHRvCi1AY29kZXtZWVNUWVBFfS4KLQotQXMgYW5vdGhlciBleHRlbnNpb24gdG8gQGFjcm9ueW17UE9TSVh9LCB5b3UgbWF5IHNwZWNpZnkgbXVsdGlwbGUKLUBjb2RleyV1bmlvbn0gZGVjbGFyYXRpb25zOyB0aGVpciBjb250ZW50cyBhcmUgY29uY2F0ZW5hdGVkLiAgSG93ZXZlciwKLW9ubHkgdGhlIGZpcnN0IEBjb2RleyV1bmlvbn0gZGVjbGFyYXRpb24gY2FuIHNwZWNpZnkgYSB0YWcuCi0KLU5vdGUgdGhhdCwgdW5saWtlIG1ha2luZyBhIEBjb2Rle3VuaW9ufSBkZWNsYXJhdGlvbiBpbiBDLCB5b3UgbmVlZCBub3Qgd3JpdGUKLWEgc2VtaWNvbG9uIGFmdGVyIHRoZSBjbG9zaW5nIGJyYWNlLgotCi1Abm9kZSBUeXBlIERlY2wKLUBzdWJzZWN0aW9uIE5vbnRlcm1pbmFsIFN5bWJvbHMKLUBjaW5kZXggZGVjbGFyaW5nIHZhbHVlIHR5cGVzLCBub250ZXJtaW5hbHMKLUBjaW5kZXggdmFsdWUgdHlwZXMsIG5vbnRlcm1pbmFscywgZGVjbGFyaW5nCi1AZmluZGV4ICV0eXBlCi0KLUBub2luZGVudAotV2hlbiB5b3UgdXNlIEBjb2RleyV1bmlvbn0gdG8gc3BlY2lmeSBtdWx0aXBsZSB2YWx1ZSB0eXBlcywgeW91IG11c3QKLWRlY2xhcmUgdGhlIHZhbHVlIHR5cGUgb2YgZWFjaCBub250ZXJtaW5hbCBzeW1ib2wgZm9yIHdoaWNoIHZhbHVlcyBhcmUKLXVzZWQuICBUaGlzIGlzIGRvbmUgd2l0aCBhIEBjb2RleyV0eXBlfSBkZWNsYXJhdGlvbiwgbGlrZSB0aGlzOgotCi1AZXhhbXBsZQotJXR5cGUgPEB2YXJ7dHlwZX0+IEB2YXJ7bm9udGVybWluYWx9QGRvdHN7fQotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotSGVyZSBAdmFye25vbnRlcm1pbmFsfSBpcyB0aGUgbmFtZSBvZiBhIG5vbnRlcm1pbmFsIHN5bWJvbCwgYW5kCi1AdmFye3R5cGV9IGlzIHRoZSBuYW1lIGdpdmVuIGluIHRoZSBAY29kZXsldW5pb259IHRvIHRoZSBhbHRlcm5hdGl2ZQotdGhhdCB5b3Ugd2FudCAoQHB4cmVme1VuaW9uIERlY2wsICxUaGUgQ29sbGVjdGlvbiBvZiBWYWx1ZSBUeXBlc30pLiAgWW91Ci1jYW4gZ2l2ZSBhbnkgbnVtYmVyIG9mIG5vbnRlcm1pbmFsIHN5bWJvbHMgaW4gdGhlIHNhbWUgQGNvZGV7JXR5cGV9Ci1kZWNsYXJhdGlvbiwgaWYgdGhleSBoYXZlIHRoZSBzYW1lIHZhbHVlIHR5cGUuICBVc2Ugc3BhY2VzIHRvIHNlcGFyYXRlCi10aGUgc3ltYm9sIG5hbWVzLgotCi1Zb3UgY2FuIGFsc28gZGVjbGFyZSB0aGUgdmFsdWUgdHlwZSBvZiBhIHRlcm1pbmFsIHN5bWJvbC4gIFRvIGRvIHRoaXMsCi11c2UgdGhlIHNhbWUgQGNvZGV7PEB2YXJ7dHlwZX0+fSBjb25zdHJ1Y3Rpb24gaW4gYSBkZWNsYXJhdGlvbiBmb3IgdGhlCi10ZXJtaW5hbCBzeW1ib2wuICBBbGwga2luZHMgb2YgdG9rZW4gZGVjbGFyYXRpb25zIGFsbG93Ci1AY29kZXs8QHZhcnt0eXBlfT59LgotCi1Abm9kZSBJbml0aWFsIEFjdGlvbiBEZWNsCi1Ac3Vic2VjdGlvbiBQZXJmb3JtaW5nIEFjdGlvbnMgYmVmb3JlIFBhcnNpbmcKLUBmaW5kZXggJWluaXRpYWwtYWN0aW9uCi0KLVNvbWV0aW1lcyB5b3VyIHBhcnNlciBuZWVkcyB0byBwZXJmb3JtIHNvbWUgaW5pdGlhbGl6YXRpb25zIGJlZm9yZQotcGFyc2luZy4gIFRoZSBAY29kZXslaW5pdGlhbC1hY3Rpb259IGRpcmVjdGl2ZSBhbGxvd3MgZm9yIHN1Y2ggYXJiaXRyYXJ5Ci1jb2RlLgotCi1AZGVmZm4ge0RpcmVjdGl2ZX0gJWluaXRpYWwtYWN0aW9uIEB7IEB2YXJ7Y29kZX0gQH0KLUBmaW5kZXggJWluaXRpYWwtYWN0aW9uCi1EZWNsYXJlIHRoYXQgdGhlIGJyYWNlZCBAdmFye2NvZGV9IG11c3QgYmUgaW52b2tlZCBiZWZvcmUgcGFyc2luZyBlYWNoIHRpbWUKLUBjb2Rle3l5cGFyc2V9IGlzIGNhbGxlZC4gIFRoZSBAdmFye2NvZGV9IG1heSB1c2UgQGNvZGV7JCR9IGFuZAotQGNvZGV7QEAkfSAtLS0gaW5pdGlhbCB2YWx1ZSBhbmQgbG9jYXRpb24gb2YgdGhlIGxvb2stYWhlYWQgLS0tIGFuZCB0aGUKLUBjb2RleyVwYXJzZS1wYXJhbX0uCi1AZW5kIGRlZmZuCi0KLUZvciBpbnN0YW5jZSwgaWYgeW91ciBsb2NhdGlvbnMgdXNlIGEgZmlsZSBuYW1lLCB5b3UgbWF5IHVzZQotCi1AZXhhbXBsZQotJXBhcnNlLXBhcmFtIEB7IGNoYXIgY29uc3QgKmZpbGVfbmFtZSBAfTsKLSVpbml0aWFsLWFjdGlvbgotQHsKLSAgQEAkLmluaXRpYWxpemUgKGZpbGVfbmFtZSk7Ci1AfTsKLUBlbmQgZXhhbXBsZQotCi0KLUBub2RlIERlc3RydWN0b3IgRGVjbAotQHN1YnNlY3Rpb24gRnJlZWluZyBEaXNjYXJkZWQgU3ltYm9scwotQGNpbmRleCBmcmVlaW5nIGRpc2NhcmRlZCBzeW1ib2xzCi1AZmluZGV4ICVkZXN0cnVjdG9yCi0KLUR1cmluZyBlcnJvciByZWNvdmVyeSAoQHB4cmVme0Vycm9yIFJlY292ZXJ5fSksIHN5bWJvbHMgYWxyZWFkeSBwdXNoZWQKLW9uIHRoZSBzdGFjayBhbmQgdG9rZW5zIGNvbWluZyBmcm9tIHRoZSByZXN0IG9mIHRoZSBmaWxlIGFyZSBkaXNjYXJkZWQKLXVudGlsIHRoZSBwYXJzZXIgZmFsbHMgb24gaXRzIGZlZXQuICBJZiB0aGUgcGFyc2VyIHJ1bnMgb3V0IG9mIG1lbW9yeSwKLW9yIGlmIGl0IHJldHVybnMgdmlhIEBjb2Rle1lZQUJPUlR9IG9yIEBjb2Rle1lZQUNDRVBUfSwgYWxsIHRoZQotc3ltYm9scyBvbiB0aGUgc3RhY2sgbXVzdCBiZSBkaXNjYXJkZWQuICBFdmVuIGlmIHRoZSBwYXJzZXIgc3VjY2VlZHMsIGl0Ci1tdXN0IGRpc2NhcmQgdGhlIHN0YXJ0IHN5bWJvbC4KLQotV2hlbiBkaXNjYXJkZWQgc3ltYm9scyBjb252ZXkgaGVhcCBiYXNlZCBpbmZvcm1hdGlvbiwgdGhpcyBtZW1vcnkgaXMKLWxvc3QuICBXaGlsZSB0aGlzIGJlaGF2aW9yIGNhbiBiZSB0b2xlcmFibGUgZm9yIGJhdGNoIHBhcnNlcnMsIHN1Y2ggYXMKLWluIHRyYWRpdGlvbmFsIGNvbXBpbGVycywgaXQgaXMgdW5hY2NlcHRhYmxlIGZvciBwcm9ncmFtcyBsaWtlIHNoZWxscyBvcgotcHJvdG9jb2wgaW1wbGVtZW50YXRpb25zIHRoYXQgbWF5IHBhcnNlIGFuZCBleGVjdXRlIGluZGVmaW5pdGVseS4KLQotVGhlIEBjb2RleyVkZXN0cnVjdG9yfSBkaXJlY3RpdmUgZGVmaW5lcyBjb2RlIHRoYXQgaXMgY2FsbGVkIHdoZW4gYQotc3ltYm9sIGlzIGF1dG9tYXRpY2FsbHkgZGlzY2FyZGVkLgotCi1AZGVmZm4ge0RpcmVjdGl2ZX0gJWRlc3RydWN0b3IgQHsgQHZhcntjb2RlfSBAfSBAdmFye3N5bWJvbHN9Ci1AZmluZGV4ICVkZXN0cnVjdG9yCi1JbnZva2UgdGhlIGJyYWNlZCBAdmFye2NvZGV9IHdoZW5ldmVyIHRoZSBwYXJzZXIgZGlzY2FyZHMgb25lIG9mIHRoZQotQHZhcntzeW1ib2xzfS4KLVdpdGhpbiBAdmFye2NvZGV9LCBAY29kZXskJH0gZGVzaWduYXRlcyB0aGUgc2VtYW50aWMgdmFsdWUgYXNzb2NpYXRlZAotd2l0aCB0aGUgZGlzY2FyZGVkIHN5bWJvbC4gIFRoZSBhZGRpdGlvbmFsIHBhcnNlciBwYXJhbWV0ZXJzIGFyZSBhbHNvCi1hdmFpbGFibGUgKEBweHJlZntQYXJzZXIgRnVuY3Rpb24sICwgVGhlIFBhcnNlciBGdW5jdGlvbgotQGNvZGV7eXlwYXJzZX19KS4KLUBlbmQgZGVmZm4KLQotRm9yIGluc3RhbmNlOgotCi1Ac21hbGxleGFtcGxlCi0ldW5pb24KLUB7Ci0gIGNoYXIgKnN0cmluZzsKLUB9Ci0ldG9rZW4gPHN0cmluZz4gU1RSSU5HCi0ldHlwZSAgPHN0cmluZz4gc3RyaW5nCi0lZGVzdHJ1Y3RvciBAeyBmcmVlICgkJCk7IEB9IFNUUklORyBzdHJpbmcKLUBlbmQgc21hbGxleGFtcGxlCi0KLUBub2luZGVudAotZ3VhcmFudGVlcyB0aGF0IHdoZW4gYSBAY29kZXtTVFJJTkd9IG9yIGEgQGNvZGV7c3RyaW5nfSBpcyBkaXNjYXJkZWQsCi1pdHMgYXNzb2NpYXRlZCBtZW1vcnkgd2lsbCBiZSBmcmVlZC4KLQotQHNwIDEKLQotQGNpbmRleCBkaXNjYXJkZWQgc3ltYm9scwotQGRmbntEaXNjYXJkZWQgc3ltYm9sc30gYXJlIHRoZSBmb2xsb3dpbmc6Ci0KLUBpdGVtaXplCi1AaXRlbQotc3RhY2tlZCBzeW1ib2xzIHBvcHBlZCBkdXJpbmcgdGhlIGZpcnN0IHBoYXNlIG9mIGVycm9yIHJlY292ZXJ5LAotQGl0ZW0KLWluY29taW5nIHRlcm1pbmFscyBkdXJpbmcgdGhlIHNlY29uZCBwaGFzZSBvZiBlcnJvciByZWNvdmVyeSwKLUBpdGVtCi10aGUgY3VycmVudCBsb29rLWFoZWFkIGFuZCB0aGUgZW50aXJlIHN0YWNrIChleGNlcHQgdGhlIGN1cnJlbnQKLXJpZ2h0LWhhbmQgc2lkZSBzeW1ib2xzKSB3aGVuIHRoZSBwYXJzZXIgcmV0dXJucyBpbW1lZGlhdGVseSwgYW5kCi1AaXRlbQotdGhlIHN0YXJ0IHN5bWJvbCwgd2hlbiB0aGUgcGFyc2VyIHN1Y2NlZWRzLgotQGVuZCBpdGVtaXplCi0KLVRoZSBwYXJzZXIgY2FuIEBkZm57cmV0dXJuIGltbWVkaWF0ZWx5fSBiZWNhdXNlIG9mIGFuIGV4cGxpY2l0IGNhbGwgdG8KLUBjb2Rle1lZQUJPUlR9IG9yIEBjb2Rle1lZQUNDRVBUfSwgb3IgZmFpbGVkIGVycm9yIHJlY292ZXJ5LCBvciBtZW1vcnkKLWV4aGF1c3Rpb24uCi0KLVJpZ2h0LWhhbmQgc2l6ZSBzeW1ib2xzIG9mIGEgcnVsZSB0aGF0IGV4cGxpY2l0bHkgdHJpZ2dlcnMgYSBzeW50YXgKLWVycm9yIHZpYSBAY29kZXtZWUVSUk9SfSBhcmUgbm90IGRpc2NhcmRlZCBhdXRvbWF0aWNhbGx5LiAgQXMgYSBydWxlCi1vZiB0aHVtYiwgZGVzdHJ1Y3RvcnMgYXJlIGludm9rZWQgb25seSB3aGVuIHVzZXIgYWN0aW9ucyBjYW5ub3QgbWFuYWdlCi10aGUgbWVtb3J5LgotCi1Abm9kZSBFeHBlY3QgRGVjbAotQHN1YnNlY3Rpb24gU3VwcHJlc3NpbmcgQ29uZmxpY3QgV2FybmluZ3MKLUBjaW5kZXggc3VwcHJlc3NpbmcgY29uZmxpY3Qgd2FybmluZ3MKLUBjaW5kZXggcHJldmVudGluZyB3YXJuaW5ncyBhYm91dCBjb25mbGljdHMKLUBjaW5kZXggd2FybmluZ3MsIHByZXZlbnRpbmcKLUBjaW5kZXggY29uZmxpY3RzLCBzdXBwcmVzc2luZyB3YXJuaW5ncyBvZgotQGZpbmRleCAlZXhwZWN0Ci1AZmluZGV4ICVleHBlY3QtcnIKLQotQmlzb24gbm9ybWFsbHkgd2FybnMgaWYgdGhlcmUgYXJlIGFueSBjb25mbGljdHMgaW4gdGhlIGdyYW1tYXIKLShAcHhyZWZ7U2hpZnQvUmVkdWNlLCAsU2hpZnQvUmVkdWNlIENvbmZsaWN0c30pLCBidXQgbW9zdCByZWFsIGdyYW1tYXJzCi1oYXZlIGhhcm1sZXNzIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMgd2hpY2ggYXJlIHJlc29sdmVkIGluIGEgcHJlZGljdGFibGUKLXdheSBhbmQgd291bGQgYmUgZGlmZmljdWx0IHRvIGVsaW1pbmF0ZS4gIEl0IGlzIGRlc2lyYWJsZSB0byBzdXBwcmVzcwotdGhlIHdhcm5pbmcgYWJvdXQgdGhlc2UgY29uZmxpY3RzIHVubGVzcyB0aGUgbnVtYmVyIG9mIGNvbmZsaWN0cwotY2hhbmdlcy4gIFlvdSBjYW4gZG8gdGhpcyB3aXRoIHRoZSBAY29kZXslZXhwZWN0fSBkZWNsYXJhdGlvbi4KLQotVGhlIGRlY2xhcmF0aW9uIGxvb2tzIGxpa2UgdGhpczoKLQotQGV4YW1wbGUKLSVleHBlY3QgQHZhcntufQotQGVuZCBleGFtcGxlCi0KLUhlcmUgQHZhcntufSBpcyBhIGRlY2ltYWwgaW50ZWdlci4gIFRoZSBkZWNsYXJhdGlvbiBzYXlzIHRoZXJlIHNob3VsZAotYmUgQHZhcntufSBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIGFuZCBubyByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0cy4KLUJpc29uIHJlcG9ydHMgYW4gZXJyb3IgaWYgdGhlIG51bWJlciBvZiBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIGRpZmZlcnMKLWZyb20gQHZhcntufSwgb3IgaWYgdGhlcmUgYXJlIGFueSByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0cy4KLQotRm9yIG5vcm1hbCBAYWNyb255bXtMQUxSfSgxKSBwYXJzZXJzLCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0cyBhcmUgbW9yZQotc2VyaW91cywgYW5kIHNob3VsZCBiZSBlbGltaW5hdGVkIGVudGlyZWx5LiAgQmlzb24gd2lsbCBhbHdheXMgcmVwb3J0Ci1yZWR1Y2UvcmVkdWNlIGNvbmZsaWN0cyBmb3IgdGhlc2UgcGFyc2Vycy4gIFdpdGggQGFjcm9ueW17R0xSfQotcGFyc2VycywgaG93ZXZlciwgYm90aCBraW5kcyBvZiBjb25mbGljdHMgYXJlIHJvdXRpbmU7IG90aGVyd2lzZSwKLXRoZXJlIHdvdWxkIGJlIG5vIG5lZWQgdG8gdXNlIEBhY3Jvbnlte0dMUn0gcGFyc2luZy4gIFRoZXJlZm9yZSwgaXQgaXMKLWFsc28gcG9zc2libGUgdG8gc3BlY2lmeSBhbiBleHBlY3RlZCBudW1iZXIgb2YgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMKLWluIEBhY3Jvbnlte0dMUn0gcGFyc2VycywgdXNpbmcgdGhlIGRlY2xhcmF0aW9uOgotCi1AZXhhbXBsZQotJWV4cGVjdC1yciBAdmFye259Ci1AZW5kIGV4YW1wbGUKLQotSW4gZ2VuZXJhbCwgdXNpbmcgQGNvZGV7JWV4cGVjdH0gaW52b2x2ZXMgdGhlc2Ugc3RlcHM6Ci0KLUBpdGVtaXplIEBidWxsZXQKLUBpdGVtCi1Db21waWxlIHlvdXIgZ3JhbW1hciB3aXRob3V0IEBjb2RleyVleHBlY3R9LiAgVXNlIHRoZSBAc2FtcHstdn0gb3B0aW9uCi10byBnZXQgYSB2ZXJib3NlIGxpc3Qgb2Ygd2hlcmUgdGhlIGNvbmZsaWN0cyBvY2N1ci4gIEJpc29uIHdpbGwgYWxzbwotcHJpbnQgdGhlIG51bWJlciBvZiBjb25mbGljdHMuCi0KLUBpdGVtCi1DaGVjayBlYWNoIG9mIHRoZSBjb25mbGljdHMgdG8gbWFrZSBzdXJlIHRoYXQgQmlzb24ncyBkZWZhdWx0Ci1yZXNvbHV0aW9uIGlzIHdoYXQgeW91IHJlYWxseSB3YW50LiAgSWYgbm90LCByZXdyaXRlIHRoZSBncmFtbWFyIGFuZAotZ28gYmFjayB0byB0aGUgYmVnaW5uaW5nLgotCi1AaXRlbQotQWRkIGFuIEBjb2RleyVleHBlY3R9IGRlY2xhcmF0aW9uLCBjb3B5aW5nIHRoZSBudW1iZXIgQHZhcntufSBmcm9tIHRoZQotbnVtYmVyIHdoaWNoIEJpc29uIHByaW50ZWQuICBXaXRoIEBhY3Jvbnlte0dMUn0gcGFyc2VycywgYWRkIGFuCi1AY29kZXslZXhwZWN0LXJyfSBkZWNsYXJhdGlvbiBhcyB3ZWxsLgotQGVuZCBpdGVtaXplCi0KLU5vdyBCaXNvbiB3aWxsIHdhcm4geW91IGlmIHlvdSBpbnRyb2R1Y2UgYW4gdW5leHBlY3RlZCBjb25mbGljdCwgYnV0Ci13aWxsIGtlZXAgc2lsZW50IG90aGVyd2lzZS4KLQotQG5vZGUgU3RhcnQgRGVjbAotQHN1YnNlY3Rpb24gVGhlIFN0YXJ0LVN5bWJvbAotQGNpbmRleCBkZWNsYXJpbmcgdGhlIHN0YXJ0IHN5bWJvbAotQGNpbmRleCBzdGFydCBzeW1ib2wsIGRlY2xhcmluZwotQGNpbmRleCBkZWZhdWx0IHN0YXJ0IHN5bWJvbAotQGZpbmRleCAlc3RhcnQKLQotQmlzb24gYXNzdW1lcyBieSBkZWZhdWx0IHRoYXQgdGhlIHN0YXJ0IHN5bWJvbCBmb3IgdGhlIGdyYW1tYXIgaXMgdGhlIGZpcnN0Ci1ub250ZXJtaW5hbCBzcGVjaWZpZWQgaW4gdGhlIGdyYW1tYXIgc3BlY2lmaWNhdGlvbiBzZWN0aW9uLiAgVGhlIHByb2dyYW1tZXIKLW1heSBvdmVycmlkZSB0aGlzIHJlc3RyaWN0aW9uIHdpdGggdGhlIEBjb2RleyVzdGFydH0gZGVjbGFyYXRpb24gYXMgZm9sbG93czoKLQotQGV4YW1wbGUKLSVzdGFydCBAdmFye3N5bWJvbH0KLUBlbmQgZXhhbXBsZQotCi1Abm9kZSBQdXJlIERlY2wKLUBzdWJzZWN0aW9uIEEgUHVyZSAoUmVlbnRyYW50KSBQYXJzZXIKLUBjaW5kZXggcmVlbnRyYW50IHBhcnNlcgotQGNpbmRleCBwdXJlIHBhcnNlcgotQGZpbmRleCAlcHVyZS1wYXJzZXIKLQotQSBAZGZue3JlZW50cmFudH0gcHJvZ3JhbSBpcyBvbmUgd2hpY2ggZG9lcyBub3QgYWx0ZXIgaW4gdGhlIGNvdXJzZSBvZgotZXhlY3V0aW9uOyBpbiBvdGhlciB3b3JkcywgaXQgY29uc2lzdHMgZW50aXJlbHkgb2YgQGRmbntwdXJlfSAocmVhZC1vbmx5KQotY29kZS4gIFJlZW50cmFuY3kgaXMgaW1wb3J0YW50IHdoZW5ldmVyIGFzeW5jaHJvbm91cyBleGVjdXRpb24gaXMgcG9zc2libGU7Ci1mb3IgZXhhbXBsZSwgYSBub25yZWVudHJhbnQgcHJvZ3JhbSBtYXkgbm90IGJlIHNhZmUgdG8gY2FsbCBmcm9tIGEgc2lnbmFsCi1oYW5kbGVyLiAgSW4gc3lzdGVtcyB3aXRoIG11bHRpcGxlIHRocmVhZHMgb2YgY29udHJvbCwgYSBub25yZWVudHJhbnQKLXByb2dyYW0gbXVzdCBiZSBjYWxsZWQgb25seSB3aXRoaW4gaW50ZXJsb2Nrcy4KLQotTm9ybWFsbHksIEJpc29uIGdlbmVyYXRlcyBhIHBhcnNlciB3aGljaCBpcyBub3QgcmVlbnRyYW50LiAgVGhpcyBpcwotc3VpdGFibGUgZm9yIG1vc3QgdXNlcywgYW5kIGl0IHBlcm1pdHMgY29tcGF0aWJpbGl0eSB3aXRoIFlhY2MuICAoVGhlCi1zdGFuZGFyZCBZYWNjIGludGVyZmFjZXMgYXJlIGluaGVyZW50bHkgbm9ucmVlbnRyYW50LCBiZWNhdXNlIHRoZXkgdXNlCi1zdGF0aWNhbGx5IGFsbG9jYXRlZCB2YXJpYWJsZXMgZm9yIGNvbW11bmljYXRpb24gd2l0aCBAY29kZXt5eWxleH0sCi1pbmNsdWRpbmcgQGNvZGV7eXlsdmFsfSBhbmQgQGNvZGV7eXlsbG9jfS4pCi0KLUFsdGVybmF0aXZlbHksIHlvdSBjYW4gZ2VuZXJhdGUgYSBwdXJlLCByZWVudHJhbnQgcGFyc2VyLiAgVGhlIEJpc29uCi1kZWNsYXJhdGlvbiBAY29kZXslcHVyZS1wYXJzZXJ9IHNheXMgdGhhdCB5b3Ugd2FudCB0aGUgcGFyc2VyIHRvIGJlCi1yZWVudHJhbnQuICBJdCBsb29rcyBsaWtlIHRoaXM6Ci0KLUBleGFtcGxlCi0lcHVyZS1wYXJzZXIKLUBlbmQgZXhhbXBsZQotCi1UaGUgcmVzdWx0IGlzIHRoYXQgdGhlIGNvbW11bmljYXRpb24gdmFyaWFibGVzIEBjb2Rle3l5bHZhbH0gYW5kCi1AY29kZXt5eWxsb2N9IGJlY29tZSBsb2NhbCB2YXJpYWJsZXMgaW4gQGNvZGV7eXlwYXJzZX0sIGFuZCBhIGRpZmZlcmVudAotY2FsbGluZyBjb252ZW50aW9uIGlzIHVzZWQgZm9yIHRoZSBsZXhpY2FsIGFuYWx5emVyIGZ1bmN0aW9uCi1AY29kZXt5eWxleH0uICBAeHJlZntQdXJlIENhbGxpbmcsICxDYWxsaW5nIENvbnZlbnRpb25zIGZvciBQdXJlCi1QYXJzZXJzfSwgZm9yIHRoZSBkZXRhaWxzIG9mIHRoaXMuICBUaGUgdmFyaWFibGUgQGNvZGV7eXluZXJyc30gYWxzbwotYmVjb21lcyBsb2NhbCBpbiBAY29kZXt5eXBhcnNlfSAoQHB4cmVme0Vycm9yIFJlcG9ydGluZywgLFRoZSBFcnJvcgotUmVwb3J0aW5nIEZ1bmN0aW9uIEBjb2Rle3l5ZXJyb3J9fSkuICBUaGUgY29udmVudGlvbiBmb3IgY2FsbGluZwotQGNvZGV7eXlwYXJzZX0gaXRzZWxmIGlzIHVuY2hhbmdlZC4KLQotV2hldGhlciB0aGUgcGFyc2VyIGlzIHB1cmUgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgZ3JhbW1hciBydWxlcy4KLVlvdSBjYW4gZ2VuZXJhdGUgZWl0aGVyIGEgcHVyZSBwYXJzZXIgb3IgYSBub25yZWVudHJhbnQgcGFyc2VyIGZyb20gYW55Ci12YWxpZCBncmFtbWFyLgotCi1Abm9kZSBEZWNsIFN1bW1hcnkKLUBzdWJzZWN0aW9uIEJpc29uIERlY2xhcmF0aW9uIFN1bW1hcnkKLUBjaW5kZXggQmlzb24gZGVjbGFyYXRpb24gc3VtbWFyeQotQGNpbmRleCBkZWNsYXJhdGlvbiBzdW1tYXJ5Ci1AY2luZGV4IHN1bW1hcnksIEJpc29uIGRlY2xhcmF0aW9uCi0KLUhlcmUgaXMgYSBzdW1tYXJ5IG9mIHRoZSBkZWNsYXJhdGlvbnMgdXNlZCB0byBkZWZpbmUgYSBncmFtbWFyOgotCi1AZGVmZm4ge0RpcmVjdGl2ZX0gJXVuaW9uCi1EZWNsYXJlIHRoZSBjb2xsZWN0aW9uIG9mIGRhdGEgdHlwZXMgdGhhdCBzZW1hbnRpYyB2YWx1ZXMgbWF5IGhhdmUKLShAcHhyZWZ7VW5pb24gRGVjbCwgLFRoZSBDb2xsZWN0aW9uIG9mIFZhbHVlIFR5cGVzfSkuCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7RGlyZWN0aXZlfSAldG9rZW4KLURlY2xhcmUgYSB0ZXJtaW5hbCBzeW1ib2wgKHRva2VuIHR5cGUgbmFtZSkgd2l0aCBubyBwcmVjZWRlbmNlCi1vciBhc3NvY2lhdGl2aXR5IHNwZWNpZmllZCAoQHB4cmVme1Rva2VuIERlY2wsICxUb2tlbiBUeXBlIE5hbWVzfSkuCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7RGlyZWN0aXZlfSAlcmlnaHQKLURlY2xhcmUgYSB0ZXJtaW5hbCBzeW1ib2wgKHRva2VuIHR5cGUgbmFtZSkgdGhhdCBpcyByaWdodC1hc3NvY2lhdGl2ZQotKEBweHJlZntQcmVjZWRlbmNlIERlY2wsICxPcGVyYXRvciBQcmVjZWRlbmNlfSkuCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7RGlyZWN0aXZlfSAlbGVmdAotRGVjbGFyZSBhIHRlcm1pbmFsIHN5bWJvbCAodG9rZW4gdHlwZSBuYW1lKSB0aGF0IGlzIGxlZnQtYXNzb2NpYXRpdmUKLShAcHhyZWZ7UHJlY2VkZW5jZSBEZWNsLCAsT3BlcmF0b3IgUHJlY2VkZW5jZX0pLgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge0RpcmVjdGl2ZX0gJW5vbmFzc29jCi1EZWNsYXJlIGEgdGVybWluYWwgc3ltYm9sICh0b2tlbiB0eXBlIG5hbWUpIHRoYXQgaXMgbm9uYXNzb2NpYXRpdmUKLShAcHhyZWZ7UHJlY2VkZW5jZSBEZWNsLCAsT3BlcmF0b3IgUHJlY2VkZW5jZX0pLgotVXNpbmcgaXQgaW4gYSB3YXkgdGhhdCB3b3VsZCBiZSBhc3NvY2lhdGl2ZSBpcyBhIHN5bnRheCBlcnJvci4KLUBlbmQgZGVmZm4KLQotQGlmc2V0IGRlZmF1bHRwcmVjCi1AZGVmZm4ge0RpcmVjdGl2ZX0gJWRlZmF1bHQtcHJlYwotQXNzaWduIGEgcHJlY2VkZW5jZSB0byBydWxlcyBsYWNraW5nIGFuIGV4cGxpY2l0IEBjb2RleyVwcmVjfSBtb2RpZmllcgotKEBweHJlZntDb250ZXh0dWFsIFByZWNlZGVuY2UsICxDb250ZXh0LURlcGVuZGVudCBQcmVjZWRlbmNlfSkuCi1AZW5kIGRlZmZuCi1AZW5kIGlmc2V0Ci0KLUBkZWZmbiB7RGlyZWN0aXZlfSAldHlwZQotRGVjbGFyZSB0aGUgdHlwZSBvZiBzZW1hbnRpYyB2YWx1ZXMgZm9yIGEgbm9udGVybWluYWwgc3ltYm9sCi0oQHB4cmVme1R5cGUgRGVjbCwgLE5vbnRlcm1pbmFsIFN5bWJvbHN9KS4KLUBlbmQgZGVmZm4KLQotQGRlZmZuIHtEaXJlY3RpdmV9ICVzdGFydAotU3BlY2lmeSB0aGUgZ3JhbW1hcidzIHN0YXJ0IHN5bWJvbCAoQHB4cmVme1N0YXJ0IERlY2wsICxUaGUKLVN0YXJ0LVN5bWJvbH0pLgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge0RpcmVjdGl2ZX0gJWV4cGVjdAotRGVjbGFyZSB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIHNoaWZ0LXJlZHVjZSBjb25mbGljdHMKLShAcHhyZWZ7RXhwZWN0IERlY2wsICxTdXBwcmVzc2luZyBDb25mbGljdCBXYXJuaW5nc30pLgotQGVuZCBkZWZmbgotCi0KLUBzcCAxCi1Abm9pbmRlbnQKLUluIG9yZGVyIHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgQGNvbW1hbmR7Ymlzb259LCB1c2UgdGhlIGZvbGxvd2luZwotZGlyZWN0aXZlczoKLQotQGRlZmZuIHtEaXJlY3RpdmV9ICVkZWJ1ZwotSW4gdGhlIHBhcnNlciBmaWxlLCBkZWZpbmUgdGhlIG1hY3JvIEBjb2Rle1lZREVCVUd9IHRvIDEgaWYgaXQgaXMgbm90Ci1hbHJlYWR5IGRlZmluZWQsIHNvIHRoYXQgdGhlIGRlYnVnZ2luZyBmYWNpbGl0aWVzIGFyZSBjb21waWxlZC4KLUBlbmQgZGVmZm4KLUB4cmVme1RyYWNpbmcsICxUcmFjaW5nIFlvdXIgUGFyc2VyfS4KLQotQGRlZmZuIHtEaXJlY3RpdmV9ICVkZWZpbmVzCi1Xcml0ZSBhIGhlYWRlciBmaWxlIGNvbnRhaW5pbmcgbWFjcm8gZGVmaW5pdGlvbnMgZm9yIHRoZSB0b2tlbiB0eXBlCi1uYW1lcyBkZWZpbmVkIGluIHRoZSBncmFtbWFyIGFzIHdlbGwgYXMgYSBmZXcgb3RoZXIgZGVjbGFyYXRpb25zLgotSWYgdGhlIHBhcnNlciBvdXRwdXQgZmlsZSBpcyBuYW1lZCBAZmlsZXtAdmFye25hbWV9LmN9IHRoZW4gdGhpcyBmaWxlCi1pcyBuYW1lZCBAZmlsZXtAdmFye25hbWV9Lmh9LgotCi1Vbmxlc3MgQGNvZGV7WVlTVFlQRX0gaXMgYWxyZWFkeSBkZWZpbmVkIGFzIGEgbWFjcm8sIHRoZSBvdXRwdXQgaGVhZGVyCi1kZWNsYXJlcyBAY29kZXtZWVNUWVBFfS4gIFRoZXJlZm9yZSwgaWYgeW91IGFyZSB1c2luZyBhIEBjb2RleyV1bmlvbn0KLShAcHhyZWZ7TXVsdGlwbGUgVHlwZXMsICxNb3JlIFRoYW4gT25lIFZhbHVlIFR5cGV9KSB3aXRoIGNvbXBvbmVudHMgdGhhdAotcmVxdWlyZSBvdGhlciBkZWZpbml0aW9ucywgb3IgaWYgeW91IGhhdmUgZGVmaW5lZCBhIEBjb2Rle1lZU1RZUEV9IG1hY3JvCi0oQHB4cmVme1ZhbHVlIFR5cGUsICxEYXRhIFR5cGVzIG9mIFNlbWFudGljIFZhbHVlc30pLCB5b3UgbmVlZCB0bwotYXJyYW5nZSBmb3IgdGhlc2UgZGVmaW5pdGlvbnMgdG8gYmUgcHJvcGFnYXRlZCB0byBhbGwgbW9kdWxlcywgZS5nLiwgYnkKLXB1dHRpbmcgdGhlbSBpbiBhIHByZXJlcXVpc2l0ZSBoZWFkZXIgdGhhdCBpcyBpbmNsdWRlZCBib3RoIGJ5IHlvdXIKLXBhcnNlciBhbmQgYnkgYW55IG90aGVyIG1vZHVsZSB0aGF0IG5lZWRzIEBjb2Rle1lZU1RZUEV9LgotCi1Vbmxlc3MgeW91ciBwYXJzZXIgaXMgcHVyZSwgdGhlIG91dHB1dCBoZWFkZXIgZGVjbGFyZXMgQGNvZGV7eXlsdmFsfQotYXMgYW4gZXh0ZXJuYWwgdmFyaWFibGUuICBAeHJlZntQdXJlIERlY2wsICxBIFB1cmUgKFJlZW50cmFudCkKLVBhcnNlcn0uCi0KLUlmIHlvdSBoYXZlIGFsc28gdXNlZCBsb2NhdGlvbnMsIHRoZSBvdXRwdXQgaGVhZGVyIGRlY2xhcmVzCi1AY29kZXtZWUxUWVBFfSBhbmQgQGNvZGV7eXlsbG9jfSB1c2luZyBhIHByb3RvY29sIHNpbWlsYXIgdG8gdGhhdCBvZgotQGNvZGV7WVlTVFlQRX0gYW5kIEBjb2Rle3l5bHZhbH0uICBAeHJlZntMb2NhdGlvbnMsICxUcmFja2luZwotTG9jYXRpb25zfS4KLQotVGhpcyBvdXRwdXQgZmlsZSBpcyBub3JtYWxseSBlc3NlbnRpYWwgaWYgeW91IHdpc2ggdG8gcHV0IHRoZSBkZWZpbml0aW9uCi1vZiBAY29kZXt5eWxleH0gaW4gYSBzZXBhcmF0ZSBzb3VyY2UgZmlsZSwgYmVjYXVzZSBAY29kZXt5eWxleH0KLXR5cGljYWxseSBuZWVkcyB0byBiZSBhYmxlIHRvIHJlZmVyIHRvIHRoZSBhYm92ZS1tZW50aW9uZWQgZGVjbGFyYXRpb25zCi1hbmQgdG8gdGhlIHRva2VuIHR5cGUgY29kZXMuICBAeHJlZntUb2tlbiBWYWx1ZXMsICxTZW1hbnRpYyBWYWx1ZXMgb2YKLVRva2Vuc30uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7RGlyZWN0aXZlfSAlZGVzdHJ1Y3RvcgotU3BlY2lmeSBob3cgdGhlIHBhcnNlciBzaG91bGQgcmVjbGFpbSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgdG8KLWRpc2NhcmRlZCBzeW1ib2xzLiAgQHhyZWZ7RGVzdHJ1Y3RvciBEZWNsLCAsIEZyZWVpbmcgRGlzY2FyZGVkIFN5bWJvbHN9LgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge0RpcmVjdGl2ZX0gJWZpbGUtcHJlZml4PSJAdmFye3ByZWZpeH0iCi1TcGVjaWZ5IGEgcHJlZml4IHRvIHVzZSBmb3IgYWxsIEJpc29uIG91dHB1dCBmaWxlIG5hbWVzLiAgVGhlIG5hbWVzIGFyZQotY2hvc2VuIGFzIGlmIHRoZSBpbnB1dCBmaWxlIHdlcmUgbmFtZWQgQGZpbGV7QHZhcntwcmVmaXh9Lnl9LgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge0RpcmVjdGl2ZX0gJWxvY2F0aW9ucwotR2VuZXJhdGUgdGhlIGNvZGUgcHJvY2Vzc2luZyB0aGUgbG9jYXRpb25zIChAcHhyZWZ7QWN0aW9uIEZlYXR1cmVzLAotLFNwZWNpYWwgRmVhdHVyZXMgZm9yIFVzZSBpbiBBY3Rpb25zfSkuICBUaGlzIG1vZGUgaXMgZW5hYmxlZCBhcyBzb29uIGFzCi10aGUgZ3JhbW1hciB1c2VzIHRoZSBzcGVjaWFsIEBzYW1we0BAQHZhcntufX0gdG9rZW5zLCBidXQgaWYgeW91cgotZ3JhbW1hciBkb2VzIG5vdCB1c2UgaXQsIHVzaW5nIEBzYW1weyVsb2NhdGlvbnN9IGFsbG93cyBmb3IgbW9yZQotYWNjdXJhdGUgc3ludGF4IGVycm9yIG1lc3NhZ2VzLgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge0RpcmVjdGl2ZX0gJW5hbWUtcHJlZml4PSJAdmFye3ByZWZpeH0iCi1SZW5hbWUgdGhlIGV4dGVybmFsIHN5bWJvbHMgdXNlZCBpbiB0aGUgcGFyc2VyIHNvIHRoYXQgdGhleSBzdGFydCB3aXRoCi1AdmFye3ByZWZpeH0gaW5zdGVhZCBvZiBAc2FtcHt5eX0uICBUaGUgcHJlY2lzZSBsaXN0IG9mIHN5bWJvbHMgcmVuYW1lZAotaW4gQyBwYXJzZXJzCi1pcyBAY29kZXt5eXBhcnNlfSwgQGNvZGV7eXlsZXh9LCBAY29kZXt5eWVycm9yfSwgQGNvZGV7eXluZXJyc30sCi1AY29kZXt5eWx2YWx9LCBAY29kZXt5eWNoYXJ9LCBAY29kZXt5eWRlYnVnfSwgYW5kCi0oaWYgbG9jYXRpb25zIGFyZSB1c2VkKSBAY29kZXt5eWxsb2N9LiAgRm9yIGV4YW1wbGUsIGlmIHlvdSB1c2UKLUBzYW1weyVuYW1lLXByZWZpeD0iY18ifSwgdGhlIG5hbWVzIGJlY29tZSBAY29kZXtjX3BhcnNlfSwgQGNvZGV7Y19sZXh9LAotYW5kIHNvIG9uLiAgSW4gQysrIHBhcnNlcnMsIGl0IGlzIG9ubHkgdGhlIHN1cnJvdW5kaW5nIG5hbWVzcGFjZSB3aGljaCBpcwotbmFtZWQgQHZhcntwcmVmaXh9IGluc3RlYWQgb2YgQHNhbXB7eXl9LgotQHhyZWZ7TXVsdGlwbGUgUGFyc2VycywgLE11bHRpcGxlIFBhcnNlcnMgaW4gdGhlIFNhbWUgUHJvZ3JhbX0uCi1AZW5kIGRlZmZuCi0KLUBpZnNldCBkZWZhdWx0cHJlYwotQGRlZmZuIHtEaXJlY3RpdmV9ICVuby1kZWZhdWx0LXByZWMKLURvIG5vdCBhc3NpZ24gYSBwcmVjZWRlbmNlIHRvIHJ1bGVzIGxhY2tpbmcgYW4gZXhwbGljaXQgQGNvZGV7JXByZWN9Ci1tb2RpZmllciAoQHB4cmVme0NvbnRleHR1YWwgUHJlY2VkZW5jZSwgLENvbnRleHQtRGVwZW5kZW50Ci1QcmVjZWRlbmNlfSkuCi1AZW5kIGRlZmZuCi1AZW5kIGlmc2V0Ci0KLUBkZWZmbiB7RGlyZWN0aXZlfSAlbm8tcGFyc2VyCi1EbyBub3QgaW5jbHVkZSBhbnkgQyBjb2RlIGluIHRoZSBwYXJzZXIgZmlsZTsgZ2VuZXJhdGUgdGFibGVzIG9ubHkuICBUaGUKLXBhcnNlciBmaWxlIGNvbnRhaW5zIGp1c3QgQGNvZGV7I2RlZmluZX0gZGlyZWN0aXZlcyBhbmQgc3RhdGljIHZhcmlhYmxlCi1kZWNsYXJhdGlvbnMuCi0KLVRoaXMgb3B0aW9uIGFsc28gdGVsbHMgQmlzb24gdG8gd3JpdGUgdGhlIEMgY29kZSBmb3IgdGhlIGdyYW1tYXIgYWN0aW9ucwotaW50byBhIGZpbGUgbmFtZWQgQGZpbGV7QHZhcntmaWxlfS5hY3R9LCBpbiB0aGUgZm9ybSBvZiBhCi1icmFjZS1zdXJyb3VuZGVkIGJvZHkgZml0IGZvciBhIEBjb2Rle3N3aXRjaH0gc3RhdGVtZW50LgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge0RpcmVjdGl2ZX0gJW5vLWxpbmVzCi1Eb24ndCBnZW5lcmF0ZSBhbnkgQGNvZGV7I2xpbmV9IHByZXByb2Nlc3NvciBjb21tYW5kcyBpbiB0aGUgcGFyc2VyCi1maWxlLiAgT3JkaW5hcmlseSBCaXNvbiB3cml0ZXMgdGhlc2UgY29tbWFuZHMgaW4gdGhlIHBhcnNlciBmaWxlIHNvIHRoYXQKLXRoZSBDIGNvbXBpbGVyIGFuZCBkZWJ1Z2dlcnMgd2lsbCBhc3NvY2lhdGUgZXJyb3JzIGFuZCBvYmplY3QgY29kZSB3aXRoCi15b3VyIHNvdXJjZSBmaWxlICh0aGUgZ3JhbW1hciBmaWxlKS4gIFRoaXMgZGlyZWN0aXZlIGNhdXNlcyB0aGVtIHRvCi1hc3NvY2lhdGUgZXJyb3JzIHdpdGggdGhlIHBhcnNlciBmaWxlLCB0cmVhdGluZyBpdCBhbiBpbmRlcGVuZGVudCBzb3VyY2UKLWZpbGUgaW4gaXRzIG93biByaWdodC4KLUBlbmQgZGVmZm4KLQotQGRlZmZuIHtEaXJlY3RpdmV9ICVvdXRwdXQ9IkB2YXJ7ZmlsZX0iCi1TcGVjaWZ5IEB2YXJ7ZmlsZX0gZm9yIHRoZSBwYXJzZXIgZmlsZS4KLUBlbmQgZGVmZm4KLQotQGRlZmZuIHtEaXJlY3RpdmV9ICVwdXJlLXBhcnNlcgotUmVxdWVzdCBhIHB1cmUgKHJlZW50cmFudCkgcGFyc2VyIHByb2dyYW0gKEBweHJlZntQdXJlIERlY2wsICxBIFB1cmUKLShSZWVudHJhbnQpIFBhcnNlcn0pLgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge0RpcmVjdGl2ZX0gJXJlcXVpcmUgIkB2YXJ7dmVyc2lvbn0iCi1SZXF1aXJlIHZlcnNpb24gQHZhcnt2ZXJzaW9ufSBvciBoaWdoZXIgb2YgQmlzb24uICBAeHJlZntSZXF1aXJlIERlY2wsICwKLVJlcXVpcmUgYSBWZXJzaW9uIG9mIEJpc29ufS4KLUBlbmQgZGVmZm4KLQotQGRlZmZuIHtEaXJlY3RpdmV9ICV0b2tlbi10YWJsZQotR2VuZXJhdGUgYW4gYXJyYXkgb2YgdG9rZW4gbmFtZXMgaW4gdGhlIHBhcnNlciBmaWxlLiAgVGhlIG5hbWUgb2YgdGhlCi1hcnJheSBpcyBAY29kZXt5eXRuYW1lfTsgQGNvZGV7eXl0bmFtZVtAdmFye2l9XX0gaXMgdGhlIG5hbWUgb2YgdGhlCi10b2tlbiB3aG9zZSBpbnRlcm5hbCBCaXNvbiB0b2tlbiBjb2RlIG51bWJlciBpcyBAdmFye2l9LiAgVGhlIGZpcnN0Ci10aHJlZSBlbGVtZW50cyBvZiBAY29kZXt5eXRuYW1lfSBjb3JyZXNwb25kIHRvIHRoZSBwcmVkZWZpbmVkIHRva2VucwotQGNvZGV7IiRlbmQifSwKLUBjb2RleyJlcnJvciJ9LCBhbmQgQGNvZGV7IiR1bmRlZmluZWQifTsgYWZ0ZXIgdGhlc2UgY29tZSB0aGUgc3ltYm9scwotZGVmaW5lZCBpbiB0aGUgZ3JhbW1hciBmaWxlLgotCi1UaGUgbmFtZSBpbiB0aGUgdGFibGUgaW5jbHVkZXMgYWxsIHRoZSBjaGFyYWN0ZXJzIG5lZWRlZCB0byByZXByZXNlbnQKLXRoZSB0b2tlbiBpbiBCaXNvbi4gIEZvciBzaW5nbGUtY2hhcmFjdGVyIGxpdGVyYWxzIGFuZCBsaXRlcmFsCi1zdHJpbmdzLCB0aGlzIGluY2x1ZGVzIHRoZSBzdXJyb3VuZGluZyBxdW90aW5nIGNoYXJhY3RlcnMgYW5kIGFueQotZXNjYXBlIHNlcXVlbmNlcy4gIEZvciBleGFtcGxlLCB0aGUgQmlzb24gc2luZ2xlLWNoYXJhY3RlciBsaXRlcmFsCi1AY29kZXsnKyd9IGNvcnJlc3BvbmRzIHRvIGEgdGhyZWUtY2hhcmFjdGVyIG5hbWUsIHJlcHJlc2VudGVkIGluIEMgYXMKLUBjb2RleyInKycifTsgYW5kIHRoZSBCaXNvbiB0d28tY2hhcmFjdGVyIGxpdGVyYWwgc3RyaW5nIEBjb2RleyJcXC8ifQotY29ycmVzcG9uZHMgdG8gYSBmaXZlLWNoYXJhY3RlciBuYW1lLCByZXByZXNlbnRlZCBpbiBDIGFzCi1AY29kZXsiXCJcXFxcL1wiIn0uCi0KLVdoZW4geW91IHNwZWNpZnkgQGNvZGV7JXRva2VuLXRhYmxlfSwgQmlzb24gYWxzbyBnZW5lcmF0ZXMgbWFjcm8KLWRlZmluaXRpb25zIGZvciBtYWNyb3MgQGNvZGV7WVlOVE9LRU5TfSwgQGNvZGV7WVlOTlRTfSwgYW5kCi1AY29kZXtZWU5SVUxFU30sIGFuZCBAY29kZXtZWU5TVEFURVN9OgotCi1AdGFibGUgQGNvZGUKLUBpdGVtIFlZTlRPS0VOUwotVGhlIGhpZ2hlc3QgdG9rZW4gbnVtYmVyLCBwbHVzIG9uZS4KLUBpdGVtIFlZTk5UUwotVGhlIG51bWJlciBvZiBub250ZXJtaW5hbCBzeW1ib2xzLgotQGl0ZW0gWVlOUlVMRVMKLVRoZSBudW1iZXIgb2YgZ3JhbW1hciBydWxlcywKLUBpdGVtIFlZTlNUQVRFUwotVGhlIG51bWJlciBvZiBwYXJzZXIgc3RhdGVzIChAcHhyZWZ7UGFyc2VyIFN0YXRlc30pLgotQGVuZCB0YWJsZQotQGVuZCBkZWZmbgotCi1AZGVmZm4ge0RpcmVjdGl2ZX0gJXZlcmJvc2UKLVdyaXRlIGFuIGV4dHJhIG91dHB1dCBmaWxlIGNvbnRhaW5pbmcgdmVyYm9zZSBkZXNjcmlwdGlvbnMgb2YgdGhlCi1wYXJzZXIgc3RhdGVzIGFuZCB3aGF0IGlzIGRvbmUgZm9yIGVhY2ggdHlwZSBvZiBsb29rLWFoZWFkIHRva2VuIGluCi10aGF0IHN0YXRlLiAgQHhyZWZ7VW5kZXJzdGFuZGluZywgLCBVbmRlcnN0YW5kaW5nIFlvdXIgUGFyc2VyfSwgZm9yIG1vcmUKLWluZm9ybWF0aW9uLgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge0RpcmVjdGl2ZX0gJXlhY2MKLVByZXRlbmQgdGhlIG9wdGlvbiBAb3B0aW9uey0teWFjY30gd2FzIGdpdmVuLCBpLmUuLCBpbWl0YXRlIFlhY2MsCi1pbmNsdWRpbmcgaXRzIG5hbWluZyBjb252ZW50aW9ucy4gIEB4cmVme0Jpc29uIE9wdGlvbnN9LCBmb3IgbW9yZS4KLUBlbmQgZGVmZm4KLQotCi1Abm9kZSBNdWx0aXBsZSBQYXJzZXJzCi1Ac2VjdGlvbiBNdWx0aXBsZSBQYXJzZXJzIGluIHRoZSBTYW1lIFByb2dyYW0KLQotTW9zdCBwcm9ncmFtcyB0aGF0IHVzZSBCaXNvbiBwYXJzZSBvbmx5IG9uZSBsYW5ndWFnZSBhbmQgdGhlcmVmb3JlIGNvbnRhaW4KLW9ubHkgb25lIEJpc29uIHBhcnNlci4gIEJ1dCB3aGF0IGlmIHlvdSB3YW50IHRvIHBhcnNlIG1vcmUgdGhhbiBvbmUKLWxhbmd1YWdlIHdpdGggdGhlIHNhbWUgcHJvZ3JhbT8gIFRoZW4geW91IG5lZWQgdG8gYXZvaWQgYSBuYW1lIGNvbmZsaWN0Ci1iZXR3ZWVuIGRpZmZlcmVudCBkZWZpbml0aW9ucyBvZiBAY29kZXt5eXBhcnNlfSwgQGNvZGV7eXlsdmFsfSwgYW5kIHNvIG9uLgotCi1UaGUgZWFzeSB3YXkgdG8gZG8gdGhpcyBpcyB0byB1c2UgdGhlIG9wdGlvbiBAc2FtcHstcCBAdmFye3ByZWZpeH19Ci0oQHB4cmVme0ludm9jYXRpb24sICxJbnZva2luZyBCaXNvbn0pLiAgVGhpcyByZW5hbWVzIHRoZSBpbnRlcmZhY2UKLWZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIG9mIHRoZSBCaXNvbiBwYXJzZXIgdG8gc3RhcnQgd2l0aCBAdmFye3ByZWZpeH0KLWluc3RlYWQgb2YgQHNhbXB7eXl9LiAgWW91IGNhbiB1c2UgdGhpcyB0byBnaXZlIGVhY2ggcGFyc2VyIGRpc3RpbmN0Ci1uYW1lcyB0aGF0IGRvIG5vdCBjb25mbGljdC4KLQotVGhlIHByZWNpc2UgbGlzdCBvZiBzeW1ib2xzIHJlbmFtZWQgaXMgQGNvZGV7eXlwYXJzZX0sIEBjb2Rle3l5bGV4fSwKLUBjb2Rle3l5ZXJyb3J9LCBAY29kZXt5eW5lcnJzfSwgQGNvZGV7eXlsdmFsfSwgQGNvZGV7eXlsbG9jfSwKLUBjb2Rle3l5Y2hhcn0gYW5kIEBjb2Rle3l5ZGVidWd9LiAgRm9yIGV4YW1wbGUsIGlmIHlvdSB1c2UgQHNhbXB7LXAgY30sCi10aGUgbmFtZXMgYmVjb21lIEBjb2Rle2NwYXJzZX0sIEBjb2Rle2NsZXh9LCBhbmQgc28gb24uCi0KLUBzdHJvbmd7QWxsIHRoZSBvdGhlciB2YXJpYWJsZXMgYW5kIG1hY3JvcyBhc3NvY2lhdGVkIHdpdGggQmlzb24gYXJlIG5vdAotcmVuYW1lZC59IFRoZXNlIG90aGVycyBhcmUgbm90IGdsb2JhbDsgdGhlcmUgaXMgbm8gY29uZmxpY3QgaWYgdGhlIHNhbWUKLW5hbWUgaXMgdXNlZCBpbiBkaWZmZXJlbnQgcGFyc2Vycy4gIEZvciBleGFtcGxlLCBAY29kZXtZWVNUWVBFfSBpcyBub3QKLXJlbmFtZWQsIGJ1dCBkZWZpbmluZyB0aGlzIGluIGRpZmZlcmVudCB3YXlzIGluIGRpZmZlcmVudCBwYXJzZXJzIGNhdXNlcwotbm8gdHJvdWJsZSAoQHB4cmVme1ZhbHVlIFR5cGUsICxEYXRhIFR5cGVzIG9mIFNlbWFudGljIFZhbHVlc30pLgotCi1UaGUgQHNhbXB7LXB9IG9wdGlvbiB3b3JrcyBieSBhZGRpbmcgbWFjcm8gZGVmaW5pdGlvbnMgdG8gdGhlIGJlZ2lubmluZwotb2YgdGhlIHBhcnNlciBzb3VyY2UgZmlsZSwgZGVmaW5pbmcgQGNvZGV7eXlwYXJzZX0gYXMKLUBjb2Rle0B2YXJ7cHJlZml4fXBhcnNlfSwgYW5kIHNvIG9uLiAgVGhpcyBlZmZlY3RpdmVseSBzdWJzdGl0dXRlcyBvbmUKLW5hbWUgZm9yIHRoZSBvdGhlciBpbiB0aGUgZW50aXJlIHBhcnNlciBmaWxlLgotCi1Abm9kZSBJbnRlcmZhY2UKLUBjaGFwdGVyIFBhcnNlciBDLUxhbmd1YWdlIEludGVyZmFjZQotQGNpbmRleCBDLWxhbmd1YWdlIGludGVyZmFjZQotQGNpbmRleCBpbnRlcmZhY2UKLQotVGhlIEJpc29uIHBhcnNlciBpcyBhY3R1YWxseSBhIEMgZnVuY3Rpb24gbmFtZWQgQGNvZGV7eXlwYXJzZX0uICBIZXJlIHdlCi1kZXNjcmliZSB0aGUgaW50ZXJmYWNlIGNvbnZlbnRpb25zIG9mIEBjb2Rle3l5cGFyc2V9IGFuZCB0aGUgb3RoZXIKLWZ1bmN0aW9ucyB0aGF0IGl0IG5lZWRzIHRvIHVzZS4KLQotS2VlcCBpbiBtaW5kIHRoYXQgdGhlIHBhcnNlciB1c2VzIG1hbnkgQyBpZGVudGlmaWVycyBzdGFydGluZyB3aXRoCi1Ac2FtcHt5eX0gYW5kIEBzYW1we1lZfSBmb3IgaW50ZXJuYWwgcHVycG9zZXMuICBJZiB5b3UgdXNlIHN1Y2ggYW4KLWlkZW50aWZpZXIgKGFzaWRlIGZyb20gdGhvc2UgaW4gdGhpcyBtYW51YWwpIGluIGFuIGFjdGlvbiBvciBpbiBlcGlsb2d1ZQotaW4gdGhlIGdyYW1tYXIgZmlsZSwgeW91IGFyZSBsaWtlbHkgdG8gcnVuIGludG8gdHJvdWJsZS4KLQotQG1lbnUKLSogUGFyc2VyIEZ1bmN0aW9uOjogICBIb3cgdG8gY2FsbCBAY29kZXt5eXBhcnNlfSBhbmQgd2hhdCBpdCByZXR1cm5zLgotKiBMZXhpY2FsOjogICAgICAgICAgIFlvdSBtdXN0IHN1cHBseSBhIGZ1bmN0aW9uIEBjb2Rle3l5bGV4fQotICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggcmVhZHMgdG9rZW5zLgotKiBFcnJvciBSZXBvcnRpbmc6OiAgIFlvdSBtdXN0IHN1cHBseSBhIGZ1bmN0aW9uIEBjb2Rle3l5ZXJyb3J9LgotKiBBY3Rpb24gRmVhdHVyZXM6OiAgIFNwZWNpYWwgZmVhdHVyZXMgZm9yIHVzZSBpbiBhY3Rpb25zLgotKiBJbnRlcm5hdGlvbmFsaXphdGlvbjo6ICBIb3cgdG8gbGV0IHRoZSBwYXJzZXIgc3BlYWsgaW4gdGhlIHVzZXIncwotICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlIGxhbmd1YWdlLgotQGVuZCBtZW51Ci0KLUBub2RlIFBhcnNlciBGdW5jdGlvbgotQHNlY3Rpb24gVGhlIFBhcnNlciBGdW5jdGlvbiBAY29kZXt5eXBhcnNlfQotQGZpbmRleCB5eXBhcnNlCi0KLVlvdSBjYWxsIHRoZSBmdW5jdGlvbiBAY29kZXt5eXBhcnNlfSB0byBjYXVzZSBwYXJzaW5nIHRvIG9jY3VyLiAgVGhpcwotZnVuY3Rpb24gcmVhZHMgdG9rZW5zLCBleGVjdXRlcyBhY3Rpb25zLCBhbmQgdWx0aW1hdGVseSByZXR1cm5zIHdoZW4gaXQKLWVuY291bnRlcnMgZW5kLW9mLWlucHV0IG9yIGFuIHVucmVjb3ZlcmFibGUgc3ludGF4IGVycm9yLiAgWW91IGNhbiBhbHNvCi13cml0ZSBhbiBhY3Rpb24gd2hpY2ggZGlyZWN0cyBAY29kZXt5eXBhcnNlfSB0byByZXR1cm4gaW1tZWRpYXRlbHkKLXdpdGhvdXQgcmVhZGluZyBmdXJ0aGVyLgotCi0KLUBkZWZ0eXBlZnVuIGludCB5eXBhcnNlICh2b2lkKQotVGhlIHZhbHVlIHJldHVybmVkIGJ5IEBjb2Rle3l5cGFyc2V9IGlzIDAgaWYgcGFyc2luZyB3YXMgc3VjY2Vzc2Z1bCAocmV0dXJuCi1pcyBkdWUgdG8gZW5kLW9mLWlucHV0KS4KLQotVGhlIHZhbHVlIGlzIDEgaWYgcGFyc2luZyBmYWlsZWQgYmVjYXVzZSBvZiBpbnZhbGlkIGlucHV0LCBpLmUuLCBpbnB1dAotdGhhdCBjb250YWlucyBhIHN5bnRheCBlcnJvciBvciB0aGF0IGNhdXNlcyBAY29kZXtZWUFCT1JUfSB0byBiZQotaW52b2tlZC4KLQotVGhlIHZhbHVlIGlzIDIgaWYgcGFyc2luZyBmYWlsZWQgZHVlIHRvIG1lbW9yeSBleGhhdXN0aW9uLgotQGVuZCBkZWZ0eXBlZnVuCi0KLUluIGFuIGFjdGlvbiwgeW91IGNhbiBjYXVzZSBpbW1lZGlhdGUgcmV0dXJuIGZyb20gQGNvZGV7eXlwYXJzZX0gYnkgdXNpbmcKLXRoZXNlIG1hY3JvczoKLQotQGRlZm1hYyBZWUFDQ0VQVAotQGZpbmRleCBZWUFDQ0VQVAotUmV0dXJuIGltbWVkaWF0ZWx5IHdpdGggdmFsdWUgMCAodG8gcmVwb3J0IHN1Y2Nlc3MpLgotQGVuZCBkZWZtYWMKLQotQGRlZm1hYyBZWUFCT1JUCi1AZmluZGV4IFlZQUJPUlQKLVJldHVybiBpbW1lZGlhdGVseSB3aXRoIHZhbHVlIDEgKHRvIHJlcG9ydCBmYWlsdXJlKS4KLUBlbmQgZGVmbWFjCi0KLUlmIHlvdSB1c2UgYSByZWVudHJhbnQgcGFyc2VyLCB5b3UgY2FuIG9wdGlvbmFsbHkgcGFzcyBhZGRpdGlvbmFsCi1wYXJhbWV0ZXIgaW5mb3JtYXRpb24gdG8gaXQgaW4gYSByZWVudHJhbnQgd2F5LiAgVG8gZG8gc28sIHVzZSB0aGUKLWRlY2xhcmF0aW9uIEBjb2RleyVwYXJzZS1wYXJhbX06Ci0KLUBkZWZmbiB7RGlyZWN0aXZlfSAlcGFyc2UtcGFyYW0gQHtAdmFye2FyZ3VtZW50LWRlY2xhcmF0aW9ufUB9Ci1AZmluZGV4ICVwYXJzZS1wYXJhbQotRGVjbGFyZSB0aGF0IGFuIGFyZ3VtZW50IGRlY2xhcmVkIGJ5IHRoZSBicmFjZWQtY29kZQotQHZhcnthcmd1bWVudC1kZWNsYXJhdGlvbn0gaXMgYW4gYWRkaXRpb25hbCBAY29kZXt5eXBhcnNlfSBhcmd1bWVudC4KLVRoZSBAdmFye2FyZ3VtZW50LWRlY2xhcmF0aW9ufSBpcyB1c2VkIHdoZW4gZGVjbGFyaW5nCi1mdW5jdGlvbnMgb3IgcHJvdG90eXBlcy4gIFRoZSBsYXN0IGlkZW50aWZpZXIgaW4KLUB2YXJ7YXJndW1lbnQtZGVjbGFyYXRpb259IG11c3QgYmUgdGhlIGFyZ3VtZW50IG5hbWUuCi1AZW5kIGRlZmZuCi0KLUhlcmUncyBhbiBleGFtcGxlLiAgV3JpdGUgdGhpcyBpbiB0aGUgcGFyc2VyOgotCi1AZXhhbXBsZQotJXBhcnNlLXBhcmFtIEB7aW50ICpuYXN0aW5lc3NAfQotJXBhcnNlLXBhcmFtIEB7aW50ICpyYW5kb21uZXNzQH0KLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLVRoZW4gY2FsbCB0aGUgcGFyc2VyIGxpa2UgdGhpczoKLQotQGV4YW1wbGUKLUB7Ci0gIGludCBuYXN0aW5lc3MsIHJhbmRvbW5lc3M7Ci0gIEBkb3Rze30gIC8qIEBye1N0b3JlIHByb3BlciBkYXRhIGluIEBjb2Rle25hc3RpbmVzc30gYW5kIEBjb2Rle3JhbmRvbW5lc3N9Ln0gICovCi0gIHZhbHVlID0geXlwYXJzZSAoJm5hc3RpbmVzcywgJnJhbmRvbW5lc3MpOwotICBAZG90c3t9Ci1AfQotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotSW4gdGhlIGdyYW1tYXIgYWN0aW9ucywgdXNlIGV4cHJlc3Npb25zIGxpa2UgdGhpcyB0byByZWZlciB0byB0aGUgZGF0YToKLQotQGV4YW1wbGUKLWV4cDogQGRvdHN7fSAgICBAeyBAZG90c3t9OyAqcmFuZG9tbmVzcyArPSAxOyBAZG90c3t9IEB9Ci1AZW5kIGV4YW1wbGUKLQotCi1Abm9kZSBMZXhpY2FsCi1Ac2VjdGlvbiBUaGUgTGV4aWNhbCBBbmFseXplciBGdW5jdGlvbiBAY29kZXt5eWxleH0KLUBmaW5kZXggeXlsZXgKLUBjaW5kZXggbGV4aWNhbCBhbmFseXplcgotCi1UaGUgQGRmbntsZXhpY2FsIGFuYWx5emVyfSBmdW5jdGlvbiwgQGNvZGV7eXlsZXh9LCByZWNvZ25pemVzIHRva2VucyBmcm9tCi10aGUgaW5wdXQgc3RyZWFtIGFuZCByZXR1cm5zIHRoZW0gdG8gdGhlIHBhcnNlci4gIEJpc29uIGRvZXMgbm90IGNyZWF0ZQotdGhpcyBmdW5jdGlvbiBhdXRvbWF0aWNhbGx5OyB5b3UgbXVzdCB3cml0ZSBpdCBzbyB0aGF0IEBjb2Rle3l5cGFyc2V9IGNhbgotY2FsbCBpdC4gIFRoZSBmdW5jdGlvbiBpcyBzb21ldGltZXMgcmVmZXJyZWQgdG8gYXMgYSBsZXhpY2FsIHNjYW5uZXIuCi0KLUluIHNpbXBsZSBwcm9ncmFtcywgQGNvZGV7eXlsZXh9IGlzIG9mdGVuIGRlZmluZWQgYXQgdGhlIGVuZCBvZiB0aGUgQmlzb24KLWdyYW1tYXIgZmlsZS4gIElmIEBjb2Rle3l5bGV4fSBpcyBkZWZpbmVkIGluIGEgc2VwYXJhdGUgc291cmNlIGZpbGUsIHlvdQotbmVlZCB0byBhcnJhbmdlIGZvciB0aGUgdG9rZW4tdHlwZSBtYWNybyBkZWZpbml0aW9ucyB0byBiZSBhdmFpbGFibGUgdGhlcmUuCi1UbyBkbyB0aGlzLCB1c2UgdGhlIEBzYW1wey1kfSBvcHRpb24gd2hlbiB5b3UgcnVuIEJpc29uLCBzbyB0aGF0IGl0IHdpbGwKLXdyaXRlIHRoZXNlIG1hY3JvIGRlZmluaXRpb25zIGludG8gYSBzZXBhcmF0ZSBoZWFkZXIgZmlsZQotQGZpbGV7QHZhcntuYW1lfS50YWIuaH0gd2hpY2ggeW91IGNhbiBpbmNsdWRlIGluIHRoZSBvdGhlciBzb3VyY2UgZmlsZXMKLXRoYXQgbmVlZCBpdC4gIEB4cmVme0ludm9jYXRpb24sICxJbnZva2luZyBCaXNvbn0uCi0KLUBtZW51Ci0qIENhbGxpbmcgQ29udmVudGlvbjo6ICBIb3cgQGNvZGV7eXlwYXJzZX0gY2FsbHMgQGNvZGV7eXlsZXh9LgotKiBUb2tlbiBWYWx1ZXM6OiAgICAgIEhvdyBAY29kZXt5eWxleH0gbXVzdCByZXR1cm4gdGhlIHNlbWFudGljIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgdG9rZW4gaXQgaGFzIHJlYWQuCi0qIFRva2VuIExvY2F0aW9uczo6ICAgSG93IEBjb2Rle3l5bGV4fSBtdXN0IHJldHVybiB0aGUgdGV4dCBsb2NhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgbnVtYmVyLCBldGMuKSBvZiB0aGUgdG9rZW4sIGlmIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9ucyB3YW50IHRoYXQuCi0qIFB1cmUgQ2FsbGluZzo6ICAgICAgSG93IHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gZGlmZmVycwotICAgICAgICAgICAgICAgICAgICAgICAgaW4gYSBwdXJlIHBhcnNlciAoQHB4cmVme1B1cmUgRGVjbCwgLEEgUHVyZSAoUmVlbnRyYW50KSBQYXJzZXJ9KS4KLUBlbmQgbWVudQotCi1Abm9kZSBDYWxsaW5nIENvbnZlbnRpb24KLUBzdWJzZWN0aW9uIENhbGxpbmcgQ29udmVudGlvbiBmb3IgQGNvZGV7eXlsZXh9Ci0KLVRoZSB2YWx1ZSB0aGF0IEBjb2Rle3l5bGV4fSByZXR1cm5zIG11c3QgYmUgdGhlIHBvc2l0aXZlIG51bWVyaWMgY29kZQotZm9yIHRoZSB0eXBlIG9mIHRva2VuIGl0IGhhcyBqdXN0IGZvdW5kOyBhIHplcm8gb3IgbmVnYXRpdmUgdmFsdWUKLXNpZ25pZmllcyBlbmQtb2YtaW5wdXQuCi0KLVdoZW4gYSB0b2tlbiBpcyByZWZlcnJlZCB0byBpbiB0aGUgZ3JhbW1hciBydWxlcyBieSBhIG5hbWUsIHRoYXQgbmFtZQotaW4gdGhlIHBhcnNlciBmaWxlIGJlY29tZXMgYSBDIG1hY3JvIHdob3NlIGRlZmluaXRpb24gaXMgdGhlIHByb3BlcgotbnVtZXJpYyBjb2RlIGZvciB0aGF0IHRva2VuIHR5cGUuICBTbyBAY29kZXt5eWxleH0gY2FuIHVzZSB0aGUgbmFtZQotdG8gaW5kaWNhdGUgdGhhdCB0eXBlLiAgQHhyZWZ7U3ltYm9sc30uCi0KLVdoZW4gYSB0b2tlbiBpcyByZWZlcnJlZCB0byBpbiB0aGUgZ3JhbW1hciBydWxlcyBieSBhIGNoYXJhY3RlciBsaXRlcmFsLAotdGhlIG51bWVyaWMgY29kZSBmb3IgdGhhdCBjaGFyYWN0ZXIgaXMgYWxzbyB0aGUgY29kZSBmb3IgdGhlIHRva2VuIHR5cGUuCi1TbyBAY29kZXt5eWxleH0gY2FuIHNpbXBseSByZXR1cm4gdGhhdCBjaGFyYWN0ZXIgY29kZSwgcG9zc2libHkgY29udmVydGVkCi10byBAY29kZXt1bnNpZ25lZCBjaGFyfSB0byBhdm9pZCBzaWduLWV4dGVuc2lvbi4gIFRoZSBudWxsIGNoYXJhY3RlcgotbXVzdCBub3QgYmUgdXNlZCB0aGlzIHdheSwgYmVjYXVzZSBpdHMgY29kZSBpcyB6ZXJvIGFuZCB0aGF0Ci1zaWduaWZpZXMgZW5kLW9mLWlucHV0LgotCi1IZXJlIGlzIGFuIGV4YW1wbGUgc2hvd2luZyB0aGVzZSB0aGluZ3M6Ci0KLUBleGFtcGxlCi1pbnQKLXl5bGV4ICh2b2lkKQotQHsKLSAgQGRvdHN7fQotICBpZiAoYyA9PSBFT0YpICAgIC8qIERldGVjdCBlbmQtb2YtaW5wdXQuICAqLwotICAgIHJldHVybiAwOwotICBAZG90c3t9Ci0gIGlmIChjID09ICcrJyB8fCBjID09ICctJykKLSAgICByZXR1cm4gYzsgICAgICAvKiBBc3N1bWUgdG9rZW4gdHlwZSBmb3IgYCsnIGlzICcrJy4gICovCi0gIEBkb3Rze30KLSAgcmV0dXJuIElOVDsgICAgICAvKiBSZXR1cm4gdGhlIHR5cGUgb2YgdGhlIHRva2VuLiAgKi8KLSAgQGRvdHN7fQotQH0KLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLVRoaXMgaW50ZXJmYWNlIGhhcyBiZWVuIGRlc2lnbmVkIHNvIHRoYXQgdGhlIG91dHB1dCBmcm9tIHRoZSBAY29kZXtsZXh9Ci11dGlsaXR5IGNhbiBiZSB1c2VkIHdpdGhvdXQgY2hhbmdlIGFzIHRoZSBkZWZpbml0aW9uIG9mIEBjb2Rle3l5bGV4fS4KLQotSWYgdGhlIGdyYW1tYXIgdXNlcyBsaXRlcmFsIHN0cmluZyB0b2tlbnMsIHRoZXJlIGFyZSB0d28gd2F5cyB0aGF0Ci1AY29kZXt5eWxleH0gY2FuIGRldGVybWluZSB0aGUgdG9rZW4gdHlwZSBjb2RlcyBmb3IgdGhlbToKLQotQGl0ZW1pemUgQGJ1bGxldAotQGl0ZW0KLUlmIHRoZSBncmFtbWFyIGRlZmluZXMgc3ltYm9saWMgdG9rZW4gbmFtZXMgYXMgYWxpYXNlcyBmb3IgdGhlCi1saXRlcmFsIHN0cmluZyB0b2tlbnMsIEBjb2Rle3l5bGV4fSBjYW4gdXNlIHRoZXNlIHN5bWJvbGljIG5hbWVzIGxpa2UKLWFsbCBvdGhlcnMuICBJbiB0aGlzIGNhc2UsIHRoZSB1c2Ugb2YgdGhlIGxpdGVyYWwgc3RyaW5nIHRva2VucyBpbgotdGhlIGdyYW1tYXIgZmlsZSBoYXMgbm8gZWZmZWN0IG9uIEBjb2Rle3l5bGV4fS4KLQotQGl0ZW0KLUBjb2Rle3l5bGV4fSBjYW4gZmluZCB0aGUgbXVsdGljaGFyYWN0ZXIgdG9rZW4gaW4gdGhlIEBjb2Rle3l5dG5hbWV9Ci10YWJsZS4gIFRoZSBpbmRleCBvZiB0aGUgdG9rZW4gaW4gdGhlIHRhYmxlIGlzIHRoZSB0b2tlbiB0eXBlJ3MgY29kZS4KLVRoZSBuYW1lIG9mIGEgbXVsdGljaGFyYWN0ZXIgdG9rZW4gaXMgcmVjb3JkZWQgaW4gQGNvZGV7eXl0bmFtZX0gd2l0aCBhCi1kb3VibGUtcXVvdGUsIHRoZSB0b2tlbidzIGNoYXJhY3RlcnMsIGFuZCBhbm90aGVyIGRvdWJsZS1xdW90ZS4gIFRoZQotdG9rZW4ncyBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkIGFzIG5lY2Vzc2FyeSB0byBiZSBzdWl0YWJsZSBhcyBpbnB1dAotdG8gQmlzb24uCi0KLUhlcmUncyBjb2RlIGZvciBsb29raW5nIHVwIGEgbXVsdGljaGFyYWN0ZXIgdG9rZW4gaW4gQGNvZGV7eXl0bmFtZX0sCi1hc3N1bWluZyB0aGF0IHRoZSBjaGFyYWN0ZXJzIG9mIHRoZSB0b2tlbiBhcmUgc3RvcmVkIGluCi1AY29kZXt0b2tlbl9idWZmZXJ9LCBhbmQgYXNzdW1pbmcgdGhhdCB0aGUgdG9rZW4gZG9lcyBub3QgY29udGFpbiBhbnkKLWNoYXJhY3RlcnMgbGlrZSBAc2FtcHsifSB0aGF0IHJlcXVpcmUgZXNjYXBpbmcuCi0KLUBzbWFsbGV4YW1wbGUKLWZvciAoaSA9IDA7IGkgPCBZWU5UT0tFTlM7IGkrKykKLSAgQHsKLSAgICBpZiAoeXl0bmFtZVtpXSAhPSAwCi0gICAgICAgICYmIHl5dG5hbWVbaV1bMF0gPT0gJyInCi0gICAgICAgICYmICEgc3RybmNtcCAoeXl0bmFtZVtpXSArIDEsIHRva2VuX2J1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4gKHRva2VuX2J1ZmZlcikpCi0gICAgICAgICYmIHl5dG5hbWVbaV1bc3RybGVuICh0b2tlbl9idWZmZXIpICsgMV0gPT0gJyInCi0gICAgICAgICYmIHl5dG5hbWVbaV1bc3RybGVuICh0b2tlbl9idWZmZXIpICsgMl0gPT0gMCkKLSAgICAgIGJyZWFrOwotICBAfQotQGVuZCBzbWFsbGV4YW1wbGUKLQotVGhlIEBjb2Rle3l5dG5hbWV9IHRhYmxlIGlzIGdlbmVyYXRlZCBvbmx5IGlmIHlvdSB1c2UgdGhlCi1AY29kZXsldG9rZW4tdGFibGV9IGRlY2xhcmF0aW9uLiAgQHhyZWZ7RGVjbCBTdW1tYXJ5fS4KLUBlbmQgaXRlbWl6ZQotCi1Abm9kZSBUb2tlbiBWYWx1ZXMKLUBzdWJzZWN0aW9uIFNlbWFudGljIFZhbHVlcyBvZiBUb2tlbnMKLQotQHZpbmRleCB5eWx2YWwKLUluIGFuIG9yZGluYXJ5IChub25yZWVudHJhbnQpIHBhcnNlciwgdGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSB0b2tlbiBtdXN0Ci1iZSBzdG9yZWQgaW50byB0aGUgZ2xvYmFsIHZhcmlhYmxlIEBjb2Rle3l5bHZhbH0uICBXaGVuIHlvdSBhcmUgdXNpbmcKLWp1c3Qgb25lIGRhdGEgdHlwZSBmb3Igc2VtYW50aWMgdmFsdWVzLCBAY29kZXt5eWx2YWx9IGhhcyB0aGF0IHR5cGUuCi1UaHVzLCBpZiB0aGUgdHlwZSBpcyBAY29kZXtpbnR9ICh0aGUgZGVmYXVsdCksIHlvdSBtaWdodCB3cml0ZSB0aGlzIGluCi1AY29kZXt5eWxleH06Ci0KLUBleGFtcGxlCi1AZ3JvdXAKLSAgQGRvdHN7fQotICB5eWx2YWwgPSB2YWx1ZTsgIC8qIFB1dCB2YWx1ZSBvbnRvIEJpc29uIHN0YWNrLiAgKi8KLSAgcmV0dXJuIElOVDsgICAgICAvKiBSZXR1cm4gdGhlIHR5cGUgb2YgdGhlIHRva2VuLiAgKi8KLSAgQGRvdHN7fQotQGVuZCBncm91cAotQGVuZCBleGFtcGxlCi0KLVdoZW4geW91IGFyZSB1c2luZyBtdWx0aXBsZSBkYXRhIHR5cGVzLCBAY29kZXt5eWx2YWx9J3MgdHlwZSBpcyBhIHVuaW9uCi1tYWRlIGZyb20gdGhlIEBjb2RleyV1bmlvbn0gZGVjbGFyYXRpb24gKEBweHJlZntVbmlvbiBEZWNsLCAsVGhlCi1Db2xsZWN0aW9uIG9mIFZhbHVlIFR5cGVzfSkuICBTbyB3aGVuIHlvdSBzdG9yZSBhIHRva2VuJ3MgdmFsdWUsIHlvdQotbXVzdCB1c2UgdGhlIHByb3BlciBtZW1iZXIgb2YgdGhlIHVuaW9uLiAgSWYgdGhlIEBjb2RleyV1bmlvbn0KLWRlY2xhcmF0aW9uIGxvb2tzIGxpa2UgdGhpczoKLQotQGV4YW1wbGUKLUBncm91cAotJXVuaW9uIEB7Ci0gIGludCBpbnR2YWw7Ci0gIGRvdWJsZSB2YWw7Ci0gIHN5bXJlYyAqdHB0cjsKLUB9Ci1AZW5kIGdyb3VwCi1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci10aGVuIHRoZSBjb2RlIGluIEBjb2Rle3l5bGV4fSBtaWdodCBsb29rIGxpa2UgdGhpczoKLQotQGV4YW1wbGUKLUBncm91cAotICBAZG90c3t9Ci0gIHl5bHZhbC5pbnR2YWwgPSB2YWx1ZTsgLyogUHV0IHZhbHVlIG9udG8gQmlzb24gc3RhY2suICAqLwotICByZXR1cm4gSU5UOyAgICAgICAgICAgIC8qIFJldHVybiB0aGUgdHlwZSBvZiB0aGUgdG9rZW4uICAqLwotICBAZG90c3t9Ci1AZW5kIGdyb3VwCi1AZW5kIGV4YW1wbGUKLQotQG5vZGUgVG9rZW4gTG9jYXRpb25zCi1Ac3Vic2VjdGlvbiBUZXh0dWFsIExvY2F0aW9ucyBvZiBUb2tlbnMKLQotQHZpbmRleCB5eWxsb2MKLUlmIHlvdSBhcmUgdXNpbmcgdGhlIEBzYW1we0BAQHZhcntufX0tZmVhdHVyZSAoQHB4cmVme0xvY2F0aW9ucywgLAotVHJhY2tpbmcgTG9jYXRpb25zfSkgaW4gYWN0aW9ucyB0byBrZWVwIHRyYWNrIG9mIHRoZSB0ZXh0dWFsIGxvY2F0aW9ucwotb2YgdG9rZW5zIGFuZCBncm91cGluZ3MsIHRoZW4geW91IG11c3QgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGluCi1AY29kZXt5eWxleH0uICBUaGUgZnVuY3Rpb24gQGNvZGV7eXlwYXJzZX0gZXhwZWN0cyB0byBmaW5kIHRoZSB0ZXh0dWFsCi1sb2NhdGlvbiBvZiBhIHRva2VuIGp1c3QgcGFyc2VkIGluIHRoZSBnbG9iYWwgdmFyaWFibGUgQGNvZGV7eXlsbG9jfS4KLVNvIEBjb2Rle3l5bGV4fSBtdXN0IHN0b3JlIHRoZSBwcm9wZXIgZGF0YSBpbiB0aGF0IHZhcmlhYmxlLgotCi1CeSBkZWZhdWx0LCB0aGUgdmFsdWUgb2YgQGNvZGV7eXlsbG9jfSBpcyBhIHN0cnVjdHVyZSBhbmQgeW91IG5lZWQgb25seQotaW5pdGlhbGl6ZSB0aGUgbWVtYmVycyB0aGF0IGFyZSBnb2luZyB0byBiZSB1c2VkIGJ5IHRoZSBhY3Rpb25zLiAgVGhlCi1mb3VyIG1lbWJlcnMgYXJlIGNhbGxlZCBAY29kZXtmaXJzdF9saW5lfSwgQGNvZGV7Zmlyc3RfY29sdW1ufSwKLUBjb2Rle2xhc3RfbGluZX0gYW5kIEBjb2Rle2xhc3RfY29sdW1ufS4gIE5vdGUgdGhhdCB0aGUgdXNlIG9mIHRoaXMKLWZlYXR1cmUgbWFrZXMgdGhlIHBhcnNlciBub3RpY2VhYmx5IHNsb3dlci4KLQotQHRpbmRleCBZWUxUWVBFCi1UaGUgZGF0YSB0eXBlIG9mIEBjb2Rle3l5bGxvY30gaGFzIHRoZSBuYW1lIEBjb2Rle1lZTFRZUEV9LgotCi1Abm9kZSBQdXJlIENhbGxpbmcKLUBzdWJzZWN0aW9uIENhbGxpbmcgQ29udmVudGlvbnMgZm9yIFB1cmUgUGFyc2VycwotCi1XaGVuIHlvdSB1c2UgdGhlIEJpc29uIGRlY2xhcmF0aW9uIEBjb2RleyVwdXJlLXBhcnNlcn0gdG8gcmVxdWVzdCBhCi1wdXJlLCByZWVudHJhbnQgcGFyc2VyLCB0aGUgZ2xvYmFsIGNvbW11bmljYXRpb24gdmFyaWFibGVzIEBjb2Rle3l5bHZhbH0KLWFuZCBAY29kZXt5eWxsb2N9IGNhbm5vdCBiZSB1c2VkLiAgKEB4cmVme1B1cmUgRGVjbCwgLEEgUHVyZSAoUmVlbnRyYW50KQotUGFyc2VyfS4pICBJbiBzdWNoIHBhcnNlcnMgdGhlIHR3byBnbG9iYWwgdmFyaWFibGVzIGFyZSByZXBsYWNlZCBieQotcG9pbnRlcnMgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byBAY29kZXt5eWxleH0uICBZb3UgbXVzdCBkZWNsYXJlIHRoZW0gYXMKLXNob3duIGhlcmUsIGFuZCBwYXNzIHRoZSBpbmZvcm1hdGlvbiBiYWNrIGJ5IHN0b3JpbmcgaXQgdGhyb3VnaCB0aG9zZQotcG9pbnRlcnMuCi0KLUBleGFtcGxlCi1pbnQKLXl5bGV4IChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApCi1AewotICBAZG90c3t9Ci0gICpsdmFscCA9IHZhbHVlOyAgLyogUHV0IHZhbHVlIG9udG8gQmlzb24gc3RhY2suICAqLwotICByZXR1cm4gSU5UOyAgICAgIC8qIFJldHVybiB0aGUgdHlwZSBvZiB0aGUgdG9rZW4uICAqLwotICBAZG90c3t9Ci1AfQotQGVuZCBleGFtcGxlCi0KLUlmIHRoZSBncmFtbWFyIGZpbGUgZG9lcyBub3QgdXNlIHRoZSBAc2FtcHtAQH0gY29uc3RydWN0cyB0byByZWZlciB0bwotdGV4dHVhbCBsb2NhdGlvbnMsIHRoZW4gdGhlIHR5cGUgQGNvZGV7WVlMVFlQRX0gd2lsbCBub3QgYmUgZGVmaW5lZC4gIEluCi10aGlzIGNhc2UsIG9taXQgdGhlIHNlY29uZCBhcmd1bWVudDsgQGNvZGV7eXlsZXh9IHdpbGwgYmUgY2FsbGVkIHdpdGgKLW9ubHkgb25lIGFyZ3VtZW50LgotCi0KLUlmIHlvdSB3aXNoIHRvIHBhc3MgdGhlIGFkZGl0aW9uYWwgcGFyYW1ldGVyIGRhdGEgdG8gQGNvZGV7eXlsZXh9LCB1c2UKLUBjb2RleyVsZXgtcGFyYW19IGp1c3QgbGlrZSBAY29kZXslcGFyc2UtcGFyYW19IChAcHhyZWZ7UGFyc2VyCi1GdW5jdGlvbn0pLgotCi1AZGVmZm4ge0RpcmVjdGl2ZX0gbGV4LXBhcmFtIEB7QHZhcnthcmd1bWVudC1kZWNsYXJhdGlvbn1AfQotQGZpbmRleCAlbGV4LXBhcmFtCi1EZWNsYXJlIHRoYXQgdGhlIGJyYWNlZC1jb2RlIEB2YXJ7YXJndW1lbnQtZGVjbGFyYXRpb259IGlzIGFuCi1hZGRpdGlvbmFsIEBjb2Rle3l5bGV4fSBhcmd1bWVudCBkZWNsYXJhdGlvbi4KLUBlbmQgZGVmZm4KLQotRm9yIGluc3RhbmNlOgotCi1AZXhhbXBsZQotJXBhcnNlLXBhcmFtIEB7aW50ICpuYXN0aW5lc3NAfQotJWxleC1wYXJhbSAgIEB7aW50ICpuYXN0aW5lc3NAfQotJXBhcnNlLXBhcmFtIEB7aW50ICpyYW5kb21uZXNzQH0KLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLXJlc3VsdHMgaW4gdGhlIGZvbGxvd2luZyBzaWduYXR1cmU6Ci0KLUBleGFtcGxlCi1pbnQgeXlsZXggICAoaW50ICpuYXN0aW5lc3MpOwotaW50IHl5cGFyc2UgKGludCAqbmFzdGluZXNzLCBpbnQgKnJhbmRvbW5lc3MpOwotQGVuZCBleGFtcGxlCi0KLUlmIEBjb2RleyVwdXJlLXBhcnNlcn0gaXMgYWRkZWQ6Ci0KLUBleGFtcGxlCi1pbnQgeXlsZXggICAoWVlTVFlQRSAqbHZhbHAsIGludCAqbmFzdGluZXNzKTsKLWludCB5eXBhcnNlIChpbnQgKm5hc3RpbmVzcywgaW50ICpyYW5kb21uZXNzKTsKLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLWFuZCBmaW5hbGx5LCBpZiBib3RoIEBjb2RleyVwdXJlLXBhcnNlcn0gYW5kIEBjb2RleyVsb2NhdGlvbnN9IGFyZSB1c2VkOgotCi1AZXhhbXBsZQotaW50IHl5bGV4ICAgKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCwgaW50ICpuYXN0aW5lc3MpOwotaW50IHl5cGFyc2UgKGludCAqbmFzdGluZXNzLCBpbnQgKnJhbmRvbW5lc3MpOwotQGVuZCBleGFtcGxlCi0KLUBub2RlIEVycm9yIFJlcG9ydGluZwotQHNlY3Rpb24gVGhlIEVycm9yIFJlcG9ydGluZyBGdW5jdGlvbiBAY29kZXt5eWVycm9yfQotQGNpbmRleCBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24KLUBmaW5kZXggeXllcnJvcgotQGNpbmRleCBwYXJzZSBlcnJvcgotQGNpbmRleCBzeW50YXggZXJyb3IKLQotVGhlIEJpc29uIHBhcnNlciBkZXRlY3RzIGEgQGRmbntzeW50YXggZXJyb3J9IG9yIEBkZm57cGFyc2UgZXJyb3J9Ci13aGVuZXZlciBpdCByZWFkcyBhIHRva2VuIHdoaWNoIGNhbm5vdCBzYXRpc2Z5IGFueSBzeW50YXggcnVsZS4gIEFuCi1hY3Rpb24gaW4gdGhlIGdyYW1tYXIgY2FuIGFsc28gZXhwbGljaXRseSBwcm9jbGFpbSBhbiBlcnJvciwgdXNpbmcgdGhlCi1tYWNybyBAY29kZXtZWUVSUk9SfSAoQHB4cmVme0FjdGlvbiBGZWF0dXJlcywgLFNwZWNpYWwgRmVhdHVyZXMgZm9yIFVzZQotaW4gQWN0aW9uc30pLgotCi1UaGUgQmlzb24gcGFyc2VyIGV4cGVjdHMgdG8gcmVwb3J0IHRoZSBlcnJvciBieSBjYWxsaW5nIGFuIGVycm9yCi1yZXBvcnRpbmcgZnVuY3Rpb24gbmFtZWQgQGNvZGV7eXllcnJvcn0sIHdoaWNoIHlvdSBtdXN0IHN1cHBseS4gIEl0IGlzCi1jYWxsZWQgYnkgQGNvZGV7eXlwYXJzZX0gd2hlbmV2ZXIgYSBzeW50YXggZXJyb3IgaXMgZm91bmQsIGFuZCBpdAotcmVjZWl2ZXMgb25lIGFyZ3VtZW50LiAgRm9yIGEgc3ludGF4IGVycm9yLCB0aGUgc3RyaW5nIGlzIG5vcm1hbGx5Ci1Ad3tAY29kZXsic3ludGF4IGVycm9yIn19LgotCi1AZmluZGV4ICVlcnJvci12ZXJib3NlCi1JZiB5b3UgaW52b2tlIHRoZSBkaXJlY3RpdmUgQGNvZGV7JWVycm9yLXZlcmJvc2V9IGluIHRoZSBCaXNvbgotZGVjbGFyYXRpb25zIHNlY3Rpb24gKEBweHJlZntCaXNvbiBEZWNsYXJhdGlvbnMsICxUaGUgQmlzb24gRGVjbGFyYXRpb25zCi1TZWN0aW9ufSksIHRoZW4gQmlzb24gcHJvdmlkZXMgYSBtb3JlIHZlcmJvc2UgYW5kIHNwZWNpZmljIGVycm9yIG1lc3NhZ2UKLXN0cmluZyBpbnN0ZWFkIG9mIGp1c3QgcGxhaW4gQHd7QGNvZGV7InN5bnRheCBlcnJvciJ9fS4KLQotVGhlIHBhcnNlciBjYW4gZGV0ZWN0IG9uZSBvdGhlciBraW5kIG9mIGVycm9yOiBtZW1vcnkgZXhoYXVzdGlvbi4gIFRoaXMKLWNhbiBoYXBwZW4gd2hlbiB0aGUgaW5wdXQgY29udGFpbnMgY29uc3RydWN0aW9ucyB0aGF0IGFyZSB2ZXJ5IGRlZXBseQotbmVzdGVkLiAgSXQgaXNuJ3QgbGlrZWx5IHlvdSB3aWxsIGVuY291bnRlciB0aGlzLCBzaW5jZSB0aGUgQmlzb24KLXBhcnNlciBub3JtYWxseSBleHRlbmRzIGl0cyBzdGFjayBhdXRvbWF0aWNhbGx5IHVwIHRvIGEgdmVyeSBsYXJnZSBsaW1pdC4gIEJ1dAotaWYgbWVtb3J5IGlzIGV4aGF1c3RlZCwgQGNvZGV7eXlwYXJzZX0gY2FsbHMgQGNvZGV7eXllcnJvcn0gaW4gdGhlIHVzdWFsCi1mYXNoaW9uLCBleGNlcHQgdGhhdCB0aGUgYXJndW1lbnQgc3RyaW5nIGlzIEB3e0Bjb2RleyJtZW1vcnkgZXhoYXVzdGVkIn19LgotCi1JbiBzb21lIGNhc2VzIGRpYWdub3N0aWNzIGxpa2UgQHd7QGNvZGV7InN5bnRheCBlcnJvciJ9fSBhcmUKLXRyYW5zbGF0ZWQgYXV0b21hdGljYWxseSBmcm9tIEVuZ2xpc2ggdG8gc29tZSBvdGhlciBsYW5ndWFnZSBiZWZvcmUKLXRoZXkgYXJlIHBhc3NlZCB0byBAY29kZXt5eWVycm9yfS4gIEB4cmVme0ludGVybmF0aW9uYWxpemF0aW9ufS4KLQotVGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIHN1ZmZpY2VzIGluIHNpbXBsZSBwcm9ncmFtczoKLQotQGV4YW1wbGUKLUBncm91cAotdm9pZAoteXllcnJvciAoY2hhciBjb25zdCAqcykKLUB7Ci1AZW5kIGdyb3VwCi1AZ3JvdXAKLSAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIHMpOwotQH0KLUBlbmQgZ3JvdXAKLUBlbmQgZXhhbXBsZQotCi1BZnRlciBAY29kZXt5eWVycm9yfSByZXR1cm5zIHRvIEBjb2Rle3l5cGFyc2V9LCB0aGUgbGF0dGVyIHdpbGwgYXR0ZW1wdAotZXJyb3IgcmVjb3ZlcnkgaWYgeW91IGhhdmUgd3JpdHRlbiBzdWl0YWJsZSBlcnJvciByZWNvdmVyeSBncmFtbWFyIHJ1bGVzCi0oQHB4cmVme0Vycm9yIFJlY292ZXJ5fSkuICBJZiByZWNvdmVyeSBpcyBpbXBvc3NpYmxlLCBAY29kZXt5eXBhcnNlfSB3aWxsCi1pbW1lZGlhdGVseSByZXR1cm4gMS4KLQotT2J2aW91c2x5LCBpbiBsb2NhdGlvbiB0cmFja2luZyBwdXJlIHBhcnNlcnMsIEBjb2Rle3l5ZXJyb3J9IHNob3VsZCBoYXZlCi1hbiBhY2Nlc3MgdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24uCi1UaGlzIGlzIGluZGVlZCB0aGUgY2FzZSBmb3IgdGhlIEBhY3Jvbnlte0dMUn0KLXBhcnNlcnMsIGJ1dCBub3QgZm9yIHRoZSBZYWNjIHBhcnNlciwgZm9yIGhpc3RvcmljYWwgcmVhc29ucy4gIEkuZS4sIGlmCi1Ac2FtcHslbG9jYXRpb25zICVwdXJlLXBhcnNlcn0gaXMgcGFzc2VkIHRoZW4gdGhlIHByb3RvdHlwZXMgZm9yCi1AY29kZXt5eWVycm9yfSBhcmU6Ci0KLUBleGFtcGxlCi12b2lkIHl5ZXJyb3IgKGNoYXIgY29uc3QgKm1zZyk7ICAgICAgICAgICAgICAgICAvKiBZYWNjIHBhcnNlcnMuICAqLwotdm9pZCB5eWVycm9yIChZWUxUWVBFICpsb2NwLCBjaGFyIGNvbnN0ICptc2cpOyAgLyogR0xSIHBhcnNlcnMuICAgKi8KLUBlbmQgZXhhbXBsZQotCi1JZiBAc2FtcHslcGFyc2UtcGFyYW0gQHtpbnQgKm5hc3RpbmVzc0B9fSBpcyB1c2VkLCB0aGVuOgotCi1AZXhhbXBsZQotdm9pZCB5eWVycm9yIChpbnQgKm5hc3RpbmVzcywgY2hhciBjb25zdCAqbXNnKTsgIC8qIFlhY2MgcGFyc2Vycy4gICovCi12b2lkIHl5ZXJyb3IgKGludCAqbmFzdGluZXNzLCBjaGFyIGNvbnN0ICptc2cpOyAgLyogR0xSIHBhcnNlcnMuICAgKi8KLUBlbmQgZXhhbXBsZQotCi1GaW5hbGx5LCBAYWNyb255bXtHTFJ9IGFuZCBZYWNjIHBhcnNlcnMgc2hhcmUgdGhlIHNhbWUgQGNvZGV7eXllcnJvcn0gY2FsbGluZwotY29udmVudGlvbiBmb3IgYWJzb2x1dGVseSBwdXJlIHBhcnNlcnMsIGkuZS4sIHdoZW4gdGhlIGNhbGxpbmcKLWNvbnZlbnRpb24gb2YgQGNvZGV7eXlsZXh9IEBlbXBoe2FuZH0gdGhlIGNhbGxpbmcgY29udmVudGlvbiBvZgotQGNvZGV7JXB1cmUtcGFyc2VyfSBhcmUgcHVyZS4gIEkuZS46Ci0KLUBleGFtcGxlCi0vKiBMb2NhdGlvbiB0cmFja2luZy4gICovCi0lbG9jYXRpb25zCi0vKiBQdXJlIHl5bGV4LiAgKi8KLSVwdXJlLXBhcnNlcgotJWxleC1wYXJhbSAgIEB7aW50ICpuYXN0aW5lc3NAfQotLyogUHVyZSB5eXBhcnNlLiAgKi8KLSVwYXJzZS1wYXJhbSBAe2ludCAqbmFzdGluZXNzQH0KLSVwYXJzZS1wYXJhbSBAe2ludCAqcmFuZG9tbmVzc0B9Ci1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci1yZXN1bHRzIGluIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlcyBmb3IgYWxsIHRoZSBwYXJzZXIga2luZHM6Ci0KLUBleGFtcGxlCi1pbnQgeXlsZXggKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCwgaW50ICpuYXN0aW5lc3MpOwotaW50IHl5cGFyc2UgKGludCAqbmFzdGluZXNzLCBpbnQgKnJhbmRvbW5lc3MpOwotdm9pZCB5eWVycm9yIChZWUxUWVBFICpsb2NwLAotICAgICAgICAgICAgICBpbnQgKm5hc3RpbmVzcywgaW50ICpyYW5kb21uZXNzLAotICAgICAgICAgICAgICBjaGFyIGNvbnN0ICptc2cpOwotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotVGhlIHByb3RvdHlwZXMgYXJlIG9ubHkgaW5kaWNhdGlvbnMgb2YgaG93IHRoZSBjb2RlIHByb2R1Y2VkIGJ5IEJpc29uCi11c2VzIEBjb2Rle3l5ZXJyb3J9LiAgQmlzb24tZ2VuZXJhdGVkIGNvZGUgYWx3YXlzIGlnbm9yZXMgdGhlIHJldHVybmVkCi12YWx1ZSwgc28gQGNvZGV7eXllcnJvcn0gY2FuIHJldHVybiBhbnkgdHlwZSwgaW5jbHVkaW5nIEBjb2Rle3ZvaWR9LgotQWxzbywgQGNvZGV7eXllcnJvcn0gY2FuIGJlIGEgdmFyaWFkaWMgZnVuY3Rpb247IHRoYXQgaXMgd2h5IHRoZQotbWVzc2FnZSBpcyBhbHdheXMgcGFzc2VkIGxhc3QuCi0KLVRyYWRpdGlvbmFsbHkgQGNvZGV7eXllcnJvcn0gcmV0dXJucyBhbiBAY29kZXtpbnR9IHRoYXQgaXMgYWx3YXlzCi1pZ25vcmVkLCBidXQgdGhpcyBpcyBwdXJlbHkgZm9yIGhpc3RvcmljYWwgcmVhc29ucywgYW5kIEBjb2Rle3ZvaWR9IGlzCi1wcmVmZXJhYmxlIHNpbmNlIGl0IG1vcmUgYWNjdXJhdGVseSBkZXNjcmliZXMgdGhlIHJldHVybiB0eXBlIGZvcgotQGNvZGV7eXllcnJvcn0uCi0KLUB2aW5kZXggeXluZXJycwotVGhlIHZhcmlhYmxlIEBjb2Rle3l5bmVycnN9IGNvbnRhaW5zIHRoZSBudW1iZXIgb2Ygc3ludGF4IGVycm9ycwotcmVwb3J0ZWQgc28gZmFyLiAgTm9ybWFsbHkgdGhpcyB2YXJpYWJsZSBpcyBnbG9iYWw7IGJ1dCBpZiB5b3UKLXJlcXVlc3QgYSBwdXJlIHBhcnNlciAoQHB4cmVme1B1cmUgRGVjbCwgLEEgUHVyZSAoUmVlbnRyYW50KSBQYXJzZXJ9KQotdGhlbiBpdCBpcyBhIGxvY2FsIHZhcmlhYmxlIHdoaWNoIG9ubHkgdGhlIGFjdGlvbnMgY2FuIGFjY2Vzcy4KLQotQG5vZGUgQWN0aW9uIEZlYXR1cmVzCi1Ac2VjdGlvbiBTcGVjaWFsIEZlYXR1cmVzIGZvciBVc2UgaW4gQWN0aW9ucwotQGNpbmRleCBzdW1tYXJ5LCBhY3Rpb24gZmVhdHVyZXMKLUBjaW5kZXggYWN0aW9uIGZlYXR1cmVzIHN1bW1hcnkKLQotSGVyZSBpcyBhIHRhYmxlIG9mIEJpc29uIGNvbnN0cnVjdHMsIHZhcmlhYmxlcyBhbmQgbWFjcm9zIHRoYXQKLWFyZSB1c2VmdWwgaW4gYWN0aW9ucy4KLQotQGRlZmZuIHtWYXJpYWJsZX0gJCQKLUFjdHMgbGlrZSBhIHZhcmlhYmxlIHRoYXQgY29udGFpbnMgdGhlIHNlbWFudGljIHZhbHVlIGZvciB0aGUKLWdyb3VwaW5nIG1hZGUgYnkgdGhlIGN1cnJlbnQgcnVsZS4gIEB4cmVme0FjdGlvbnN9LgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge1ZhcmlhYmxlfSAkQHZhcntufQotQWN0cyBsaWtlIGEgdmFyaWFibGUgdGhhdCBjb250YWlucyB0aGUgc2VtYW50aWMgdmFsdWUgZm9yIHRoZQotQHZhcntufXRoIGNvbXBvbmVudCBvZiB0aGUgY3VycmVudCBydWxlLiAgQHhyZWZ7QWN0aW9uc30uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7VmFyaWFibGV9ICQ8QHZhcnt0eXBlYWx0fT4kCi1MaWtlIEBjb2RleyQkfSBidXQgc3BlY2lmaWVzIGFsdGVybmF0aXZlIEB2YXJ7dHlwZWFsdH0gaW4gdGhlIHVuaW9uCi1zcGVjaWZpZWQgYnkgdGhlIEBjb2RleyV1bmlvbn0gZGVjbGFyYXRpb24uICBAeHJlZntBY3Rpb24gVHlwZXMsICxEYXRhCi1UeXBlcyBvZiBWYWx1ZXMgaW4gQWN0aW9uc30uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7VmFyaWFibGV9ICQ8QHZhcnt0eXBlYWx0fT5AdmFye259Ci1MaWtlIEBjb2RleyRAdmFye259fSBidXQgc3BlY2lmaWVzIGFsdGVybmF0aXZlIEB2YXJ7dHlwZWFsdH0gaW4gdGhlCi11bmlvbiBzcGVjaWZpZWQgYnkgdGhlIEBjb2RleyV1bmlvbn0gZGVjbGFyYXRpb24uCi1AeHJlZntBY3Rpb24gVHlwZXMsICxEYXRhIFR5cGVzIG9mIFZhbHVlcyBpbiBBY3Rpb25zfS4KLUBlbmQgZGVmZm4KLQotQGRlZmZuIHtNYWNyb30gWVlBQk9SVDsKLVJldHVybiBpbW1lZGlhdGVseSBmcm9tIEBjb2Rle3l5cGFyc2V9LCBpbmRpY2F0aW5nIGZhaWx1cmUuCi1AeHJlZntQYXJzZXIgRnVuY3Rpb24sICxUaGUgUGFyc2VyIEZ1bmN0aW9uIEBjb2Rle3l5cGFyc2V9fS4KLUBlbmQgZGVmZm4KLQotQGRlZmZuIHtNYWNyb30gWVlBQ0NFUFQ7Ci1SZXR1cm4gaW1tZWRpYXRlbHkgZnJvbSBAY29kZXt5eXBhcnNlfSwgaW5kaWNhdGluZyBzdWNjZXNzLgotQHhyZWZ7UGFyc2VyIEZ1bmN0aW9uLCAsVGhlIFBhcnNlciBGdW5jdGlvbiBAY29kZXt5eXBhcnNlfX0uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7TWFjcm99IFlZQkFDS1VQIChAdmFye3Rva2VufSwgQHZhcnt2YWx1ZX0pOwotQGZpbmRleCBZWUJBQ0tVUAotVW5zaGlmdCBhIHRva2VuLiAgVGhpcyBtYWNybyBpcyBhbGxvd2VkIG9ubHkgZm9yIHJ1bGVzIHRoYXQgcmVkdWNlCi1hIHNpbmdsZSB2YWx1ZSwgYW5kIG9ubHkgd2hlbiB0aGVyZSBpcyBubyBsb29rLWFoZWFkIHRva2VuLgotSXQgaXMgYWxzbyBkaXNhbGxvd2VkIGluIEBhY3Jvbnlte0dMUn0gcGFyc2Vycy4KLUl0IGluc3RhbGxzIGEgbG9vay1haGVhZCB0b2tlbiB3aXRoIHRva2VuIHR5cGUgQHZhcnt0b2tlbn0gYW5kCi1zZW1hbnRpYyB2YWx1ZSBAdmFye3ZhbHVlfTsgdGhlbiBpdCBkaXNjYXJkcyB0aGUgdmFsdWUgdGhhdCB3YXMKLWdvaW5nIHRvIGJlIHJlZHVjZWQgYnkgdGhpcyBydWxlLgotCi1JZiB0aGUgbWFjcm8gaXMgdXNlZCB3aGVuIGl0IGlzIG5vdCB2YWxpZCwgc3VjaCBhcyB3aGVuIHRoZXJlIGlzCi1hIGxvb2stYWhlYWQgdG9rZW4gYWxyZWFkeSwgdGhlbiBpdCByZXBvcnRzIGEgc3ludGF4IGVycm9yIHdpdGgKLWEgbWVzc2FnZSBAc2FtcHtjYW5ub3QgYmFjayB1cH0gYW5kIHBlcmZvcm1zIG9yZGluYXJ5IGVycm9yCi1yZWNvdmVyeS4KLQotSW4gZWl0aGVyIGNhc2UsIHRoZSByZXN0IG9mIHRoZSBhY3Rpb24gaXMgbm90IGV4ZWN1dGVkLgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge01hY3JvfSBZWUVNUFRZCi1AdmluZGV4IFlZRU1QVFkKLVZhbHVlIHN0b3JlZCBpbiBAY29kZXt5eWNoYXJ9IHdoZW4gdGhlcmUgaXMgbm8gbG9vay1haGVhZCB0b2tlbi4KLUBlbmQgZGVmZm4KLQotQGRlZmZuIHtNYWNyb30gWVlFT0YKLUB2aW5kZXggWVlFT0YKLVZhbHVlIHN0b3JlZCBpbiBAY29kZXt5eWNoYXJ9IHdoZW4gdGhlIGxvb2stYWhlYWQgaXMgdGhlIGVuZCBvZiB0aGUgaW5wdXQKLXN0cmVhbS4KLUBlbmQgZGVmZm4KLQotQGRlZmZuIHtNYWNyb30gWVlFUlJPUjsKLUBmaW5kZXggWVlFUlJPUgotQ2F1c2UgYW4gaW1tZWRpYXRlIHN5bnRheCBlcnJvci4gIFRoaXMgc3RhdGVtZW50IGluaXRpYXRlcyBlcnJvcgotcmVjb3ZlcnkganVzdCBhcyBpZiB0aGUgcGFyc2VyIGl0c2VsZiBoYWQgZGV0ZWN0ZWQgYW4gZXJyb3I7IGhvd2V2ZXIsIGl0Ci1kb2VzIG5vdCBjYWxsIEBjb2Rle3l5ZXJyb3J9LCBhbmQgZG9lcyBub3QgcHJpbnQgYW55IG1lc3NhZ2UuICBJZiB5b3UKLXdhbnQgdG8gcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSwgY2FsbCBAY29kZXt5eWVycm9yfSBleHBsaWNpdGx5IGJlZm9yZQotdGhlIEBzYW1we1lZRVJST1I7fSBzdGF0ZW1lbnQuICBAeHJlZntFcnJvciBSZWNvdmVyeX0uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7TWFjcm99IFlZUkVDT1ZFUklORwotQGZpbmRleCBZWVJFQ09WRVJJTkcKLVRoZSBleHByZXNzaW9uIEBjb2Rle1lZUkVDT1ZFUklORyAoKX0geWllbGRzIDEgd2hlbiB0aGUgcGFyc2VyCi1pcyByZWNvdmVyaW5nIGZyb20gYSBzeW50YXggZXJyb3IsIGFuZCAwIG90aGVyd2lzZS4KLUB4cmVme0Vycm9yIFJlY292ZXJ5fS4KLUBlbmQgZGVmZm4KLQotQGRlZmZuIHtWYXJpYWJsZX0geXljaGFyCi1WYXJpYWJsZSBjb250YWluaW5nIGVpdGhlciB0aGUgbG9vay1haGVhZCB0b2tlbiwgb3IgQGNvZGV7WVlFT0Z9IHdoZW4gdGhlCi1sb29rLWFoZWFkIGlzIHRoZSBlbmQgb2YgdGhlIGlucHV0IHN0cmVhbSwgb3IgQGNvZGV7WVlFTVBUWX0gd2hlbiBubyBsb29rLWFoZWFkCi1oYXMgYmVlbiBwZXJmb3JtZWQgc28gdGhlIG5leHQgdG9rZW4gaXMgbm90IHlldCBrbm93bi4KLURvIG5vdCBtb2RpZnkgQGNvZGV7eXljaGFyfSBpbiBhIGRlZmVycmVkIHNlbWFudGljIGFjdGlvbiAoQHB4cmVme0dMUiBTZW1hbnRpYwotQWN0aW9uc30pLgotQHhyZWZ7TG9vay1BaGVhZCwgLExvb2stQWhlYWQgVG9rZW5zfS4KLUBlbmQgZGVmZm4KLQotQGRlZmZuIHtNYWNyb30geXljbGVhcmluOwotRGlzY2FyZCB0aGUgY3VycmVudCBsb29rLWFoZWFkIHRva2VuLiAgVGhpcyBpcyB1c2VmdWwgcHJpbWFyaWx5IGluCi1lcnJvciBydWxlcy4KLURvIG5vdCBpbnZva2UgQGNvZGV7eXljbGVhcmlufSBpbiBhIGRlZmVycmVkIHNlbWFudGljIGFjdGlvbiAoQHB4cmVme0dMUgotU2VtYW50aWMgQWN0aW9uc30pLgotQHhyZWZ7RXJyb3IgUmVjb3Zlcnl9LgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge01hY3JvfSB5eWVycm9rOwotUmVzdW1lIGdlbmVyYXRpbmcgZXJyb3IgbWVzc2FnZXMgaW1tZWRpYXRlbHkgZm9yIHN1YnNlcXVlbnQgc3ludGF4Ci1lcnJvcnMuICBUaGlzIGlzIHVzZWZ1bCBwcmltYXJpbHkgaW4gZXJyb3IgcnVsZXMuCi1AeHJlZntFcnJvciBSZWNvdmVyeX0uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7VmFyaWFibGV9IHl5bGxvYwotVmFyaWFibGUgY29udGFpbmluZyB0aGUgbG9vay1haGVhZCB0b2tlbiBsb2NhdGlvbiB3aGVuIEBjb2Rle3l5Y2hhcn0gaXMgbm90IHNldAotdG8gQGNvZGV7WVlFTVBUWX0gb3IgQGNvZGV7WVlFT0Z9LgotRG8gbm90IG1vZGlmeSBAY29kZXt5eWxsb2N9IGluIGEgZGVmZXJyZWQgc2VtYW50aWMgYWN0aW9uIChAcHhyZWZ7R0xSIFNlbWFudGljCi1BY3Rpb25zfSkuCi1AeHJlZntBY3Rpb25zIGFuZCBMb2NhdGlvbnMsICxBY3Rpb25zIGFuZCBMb2NhdGlvbnN9LgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge1ZhcmlhYmxlfSB5eWx2YWwKLVZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIGxvb2stYWhlYWQgdG9rZW4gc2VtYW50aWMgdmFsdWUgd2hlbiBAY29kZXt5eWNoYXJ9IGlzCi1ub3Qgc2V0IHRvIEBjb2Rle1lZRU1QVFl9IG9yIEBjb2Rle1lZRU9GfS4KLURvIG5vdCBtb2RpZnkgQGNvZGV7eXlsdmFsfSBpbiBhIGRlZmVycmVkIHNlbWFudGljIGFjdGlvbiAoQHB4cmVme0dMUiBTZW1hbnRpYwotQWN0aW9uc30pLgotQHhyZWZ7QWN0aW9ucywgLEFjdGlvbnN9LgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge1ZhbHVlfSBAQCQKLUBmaW5kZXggQEAkCi1BY3RzIGxpa2UgYSBzdHJ1Y3R1cmUgdmFyaWFibGUgY29udGFpbmluZyBpbmZvcm1hdGlvbiBvbiB0aGUgdGV4dHVhbCBsb2NhdGlvbgotb2YgdGhlIGdyb3VwaW5nIG1hZGUgYnkgdGhlIGN1cnJlbnQgcnVsZS4gIEB4cmVme0xvY2F0aW9ucywgLAotVHJhY2tpbmcgTG9jYXRpb25zfS4KLQotQGMgQ2hlY2sgaWYgdGhvc2UgcGFyYWdyYXBocyBhcmUgc3RpbGwgdXNlZnVsIG9yIG5vdC4KLQotQGMgQGV4YW1wbGUKLUBjIHN0cnVjdCBAewotQGMgICBpbnQgZmlyc3RfbGluZSwgbGFzdF9saW5lOwotQGMgICBpbnQgZmlyc3RfY29sdW1uLCBsYXN0X2NvbHVtbjsKLUBjIEB9OwotQGMgQGVuZCBleGFtcGxlCi0KLUBjIFRodXMsIHRvIGdldCB0aGUgc3RhcnRpbmcgbGluZSBudW1iZXIgb2YgdGhlIHRoaXJkIGNvbXBvbmVudCwgeW91IHdvdWxkCi1AYyB1c2UgQHNhbXB7QEAzLmZpcnN0X2xpbmV9LgotCi1AYyBJbiBvcmRlciBmb3IgdGhlIG1lbWJlcnMgb2YgdGhpcyBzdHJ1Y3R1cmUgdG8gY29udGFpbiB2YWxpZCBpbmZvcm1hdGlvbiwKLUBjIHlvdSBtdXN0IG1ha2UgQGNvZGV7eXlsZXh9IHN1cHBseSB0aGlzIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggdG9rZW4uCi1AYyBJZiB5b3UgbmVlZCBvbmx5IGNlcnRhaW4gbWVtYmVycywgdGhlbiBAY29kZXt5eWxleH0gbmVlZCBvbmx5IGZpbGwgaW4KLUBjIHRob3NlIG1lbWJlcnMuCi0KLUBjIFRoZSB1c2Ugb2YgdGhpcyBmZWF0dXJlIG1ha2VzIHRoZSBwYXJzZXIgbm90aWNlYWJseSBzbG93ZXIuCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7VmFsdWV9IEBAQHZhcntufQotQGZpbmRleCBAQEB2YXJ7bn0KLUFjdHMgbGlrZSBhIHN0cnVjdHVyZSB2YXJpYWJsZSBjb250YWluaW5nIGluZm9ybWF0aW9uIG9uIHRoZSB0ZXh0dWFsIGxvY2F0aW9uCi1vZiB0aGUgQHZhcntufXRoIGNvbXBvbmVudCBvZiB0aGUgY3VycmVudCBydWxlLiAgQHhyZWZ7TG9jYXRpb25zLCAsCi1UcmFja2luZyBMb2NhdGlvbnN9LgotQGVuZCBkZWZmbgotCi1Abm9kZSBJbnRlcm5hdGlvbmFsaXphdGlvbgotQHNlY3Rpb24gUGFyc2VyIEludGVybmF0aW9uYWxpemF0aW9uCi1AY2luZGV4IGludGVybmF0aW9uYWxpemF0aW9uCi1AY2luZGV4IGkxOG4KLUBjaW5kZXggTkxTCi1AY2luZGV4IGdldHRleHQKLUBjaW5kZXggYmlzb24tcG8KLQotQSBCaXNvbi1nZW5lcmF0ZWQgcGFyc2VyIGNhbiBwcmludCBkaWFnbm9zdGljcywgaW5jbHVkaW5nIGVycm9yIGFuZAotdHJhY2luZyBtZXNzYWdlcy4gIEJ5IGRlZmF1bHQsIHRoZXkgYXBwZWFyIGluIEVuZ2xpc2guICBIb3dldmVyLCBCaXNvbgotYWxzbyBzdXBwb3J0cyBvdXRwdXR0aW5nIGRpYWdub3N0aWNzIGluIHRoZSB1c2VyJ3MgbmF0aXZlIGxhbmd1YWdlLiAgVG8KLW1ha2UgdGhpcyB3b3JrLCB0aGUgdXNlciBzaG91bGQgc2V0IHRoZSB1c3VhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCi1AeHJlZntVc2VycywgLCBUaGUgVXNlcidzIFZpZXcsIGdldHRleHQsIEdOVSBAY29kZXtnZXR0ZXh0fSB1dGlsaXRpZXN9LgotRm9yIGV4YW1wbGUsIHRoZSBzaGVsbCBjb21tYW5kIEBzYW1we2V4cG9ydCBMQ19BTEw9ZnJfQ0EuVVRGLTh9IG1pZ2h0Ci1zZXQgdGhlIHVzZXIncyBsb2NhbGUgdG8gRnJlbmNoIENhbmFkaWFuIHVzaW5nIHRoZSBAYWNyb255bXtVVEZ9LTgKLWVuY29kaW5nLiAgVGhlIGV4YWN0IHNldCBvZiBhdmFpbGFibGUgbG9jYWxlcyBkZXBlbmRzIG9uIHRoZSB1c2VyJ3MKLWluc3RhbGxhdGlvbi4KLQotVGhlIG1haW50YWluZXIgb2YgYSBwYWNrYWdlIHRoYXQgdXNlcyBhIEJpc29uLWdlbmVyYXRlZCBwYXJzZXIgZW5hYmxlcwotdGhlIGludGVybmF0aW9uYWxpemF0aW9uIG9mIHRoZSBwYXJzZXIncyBvdXRwdXQgdGhyb3VnaCB0aGUgZm9sbG93aW5nCi1zdGVwcy4gIEhlcmUgd2UgYXNzdW1lIGEgcGFja2FnZSB0aGF0IHVzZXMgQGFjcm9ueW17R05VfSBBdXRvY29uZiBhbmQKLUBhY3Jvbnlte0dOVX0gQXV0b21ha2UuCi0KLUBlbnVtZXJhdGUKLUBpdGVtCi1AY2luZGV4IGJpc29uLWkxOG4ubTQKLUludG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBAYWNyb255bXtHTlV9IEF1dG9jb25mIG1hY3JvcyB1c2VkCi1ieSB0aGUgcGFja2FnZS0tLW9mdGVuIGNhbGxlZCBAZmlsZXttNH0tLS1jb3B5IHRoZQotQGZpbGV7Ymlzb24taTE4bi5tNH0gZmlsZSBpbnN0YWxsZWQgYnkgQmlzb24gdW5kZXIKLUBzYW1we3NoYXJlL2FjbG9jYWwvYmlzb24taTE4bi5tNH0gaW4gQmlzb24ncyBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgotRm9yIGV4YW1wbGU6Ci0KLUBleGFtcGxlCi1jcCAvdXNyL2xvY2FsL3NoYXJlL2FjbG9jYWwvYmlzb24taTE4bi5tNCBtNC9iaXNvbi1pMThuLm00Ci1AZW5kIGV4YW1wbGUKLQotQGl0ZW0KLUBmaW5kZXggQklTT05fSTE4TgotQHZpbmRleCBCSVNPTl9MT0NBTEVESVIKLUB2aW5kZXggWVlFTkFCTEVfTkxTCi1JbiB0aGUgdG9wLWxldmVsIEBmaWxle2NvbmZpZ3VyZS5hY30sIGFmdGVyIHRoZSBAY29kZXtBTV9HTlVfR0VUVEVYVH0KLWludm9jYXRpb24sIGFkZCBhbiBpbnZvY2F0aW9uIG9mIEBjb2Rle0JJU09OX0kxOE59LiAgVGhpcyBtYWNybyBpcwotZGVmaW5lZCBpbiB0aGUgZmlsZSBAZmlsZXtiaXNvbi1pMThuLm00fSB0aGF0IHlvdSBjb3BpZWQgZWFybGllci4gIEl0Ci1jYXVzZXMgQHNhbXB7Y29uZmlndXJlfSB0byBmaW5kIHRoZSB2YWx1ZSBvZiB0aGUKLUBjb2Rle0JJU09OX0xPQ0FMRURJUn0gdmFyaWFibGUsIGFuZCBpdCBkZWZpbmVzIHRoZSBzb3VyY2UtbGFuZ3VhZ2UKLXN5bWJvbCBAY29kZXtZWUVOQUJMRV9OTFN9IHRvIGVuYWJsZSB0cmFuc2xhdGlvbnMgaW4gdGhlCi1CaXNvbi1nZW5lcmF0ZWQgcGFyc2VyLgotCi1AaXRlbQotSW4gdGhlIEBjb2Rle21haW59IGZ1bmN0aW9uIG9mIHlvdXIgcHJvZ3JhbSwgZGVzaWduYXRlIHRoZSBkaXJlY3RvcnkKLWNvbnRhaW5pbmcgQmlzb24ncyBydW50aW1lIG1lc3NhZ2UgY2F0YWxvZywgdGhyb3VnaCBhIGNhbGwgdG8KLUBzYW1we2JpbmR0ZXh0ZG9tYWlufSB3aXRoIGRvbWFpbiBuYW1lIEBzYW1we2Jpc29uLXJ1bnRpbWV9LgotRm9yIGV4YW1wbGU6Ci0KLUBleGFtcGxlCi1iaW5kdGV4dGRvbWFpbiAoImJpc29uLXJ1bnRpbWUiLCBCSVNPTl9MT0NBTEVESVIpOwotQGVuZCBleGFtcGxlCi0KLVR5cGljYWxseSB0aGlzIGFwcGVhcnMgYWZ0ZXIgYW55IG90aGVyIGNhbGwgQGNvZGV7YmluZHRleHRkb21haW4KLShQQUNLQUdFLCBMT0NBTEVESVIpfSB0aGF0IHlvdXIgcGFja2FnZSBhbHJlYWR5IGhhcy4gIEhlcmUgd2UgcmVseSBvbgotQHNhbXB7QklTT05fTE9DQUxFRElSfSB0byBiZSBkZWZpbmVkIGFzIGEgc3RyaW5nIHRocm91Z2ggdGhlCi1AZmlsZXtNYWtlZmlsZX0uCi0KLUBpdGVtCi1JbiB0aGUgQGZpbGV7TWFrZWZpbGUuYW19IHRoYXQgY29udHJvbHMgdGhlIGNvbXBpbGF0aW9uIG9mIHRoZSBAY29kZXttYWlufQotZnVuY3Rpb24sIG1ha2UgQHNhbXB7QklTT05fTE9DQUxFRElSfSBhdmFpbGFibGUgYXMgYSBDIHByZXByb2Nlc3NvciBtYWNybywKLWVpdGhlciBpbiBAc2FtcHtERUZTfSBvciBpbiBAc2FtcHtBTV9DUFBGTEFHU30uICBGb3IgZXhhbXBsZToKLQotQGV4YW1wbGUKLURFRlMgPSBAQERFRlNAQCAtREJJU09OX0xPQ0FMRURJUj0nIiQoQklTT05fTE9DQUxFRElSKSInCi1AZW5kIGV4YW1wbGUKLQotb3I6Ci0KLUBleGFtcGxlCi1BTV9DUFBGTEFHUyA9IC1EQklTT05fTE9DQUxFRElSPSciJChCSVNPTl9MT0NBTEVESVIpIicKLUBlbmQgZXhhbXBsZQotCi1AaXRlbQotRmluYWxseSwgaW52b2tlIHRoZSBjb21tYW5kIEBjb21tYW5ke2F1dG9yZWNvbmZ9IHRvIGdlbmVyYXRlIHRoZSBidWlsZAotaW5mcmFzdHJ1Y3R1cmUuCi1AZW5kIGVudW1lcmF0ZQotCi0KLUBub2RlIEFsZ29yaXRobQotQGNoYXB0ZXIgVGhlIEJpc29uIFBhcnNlciBBbGdvcml0aG0KLUBjaW5kZXggQmlzb24gcGFyc2VyIGFsZ29yaXRobQotQGNpbmRleCBhbGdvcml0aG0gb2YgcGFyc2VyCi1AY2luZGV4IHNoaWZ0aW5nCi1AY2luZGV4IHJlZHVjdGlvbgotQGNpbmRleCBwYXJzZXIgc3RhY2sKLUBjaW5kZXggc3RhY2ssIHBhcnNlcgotCi1BcyBCaXNvbiByZWFkcyB0b2tlbnMsIGl0IHB1c2hlcyB0aGVtIG9udG8gYSBzdGFjayBhbG9uZyB3aXRoIHRoZWlyCi1zZW1hbnRpYyB2YWx1ZXMuICBUaGUgc3RhY2sgaXMgY2FsbGVkIHRoZSBAZGZue3BhcnNlciBzdGFja30uICBQdXNoaW5nIGEKLXRva2VuIGlzIHRyYWRpdGlvbmFsbHkgY2FsbGVkIEBkZm57c2hpZnRpbmd9LgotCi1Gb3IgZXhhbXBsZSwgc3VwcG9zZSB0aGUgaW5maXggY2FsY3VsYXRvciBoYXMgcmVhZCBAc2FtcHsxICsgNSAqfSwgd2l0aCBhCi1Ac2FtcHszfSB0byBjb21lLiAgVGhlIHN0YWNrIHdpbGwgaGF2ZSBmb3VyIGVsZW1lbnRzLCBvbmUgZm9yIGVhY2ggdG9rZW4KLXRoYXQgd2FzIHNoaWZ0ZWQuCi0KLUJ1dCB0aGUgc3RhY2sgZG9lcyBub3QgYWx3YXlzIGhhdmUgYW4gZWxlbWVudCBmb3IgZWFjaCB0b2tlbiByZWFkLiAgV2hlbgotdGhlIGxhc3QgQHZhcntufSB0b2tlbnMgYW5kIGdyb3VwaW5ncyBzaGlmdGVkIG1hdGNoIHRoZSBjb21wb25lbnRzIG9mIGEKLWdyYW1tYXIgcnVsZSwgdGhleSBjYW4gYmUgY29tYmluZWQgYWNjb3JkaW5nIHRvIHRoYXQgcnVsZS4gIFRoaXMgaXMgY2FsbGVkCi1AZGZue3JlZHVjdGlvbn0uICBUaG9zZSB0b2tlbnMgYW5kIGdyb3VwaW5ncyBhcmUgcmVwbGFjZWQgb24gdGhlIHN0YWNrIGJ5IGEKLXNpbmdsZSBncm91cGluZyB3aG9zZSBzeW1ib2wgaXMgdGhlIHJlc3VsdCAobGVmdCBoYW5kIHNpZGUpIG9mIHRoYXQgcnVsZS4KLVJ1bm5pbmcgdGhlIHJ1bGUncyBhY3Rpb24gaXMgcGFydCBvZiB0aGUgcHJvY2VzcyBvZiByZWR1Y3Rpb24sIGJlY2F1c2UgdGhpcwotaXMgd2hhdCBjb21wdXRlcyB0aGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIHJlc3VsdGluZyBncm91cGluZy4KLQotRm9yIGV4YW1wbGUsIGlmIHRoZSBpbmZpeCBjYWxjdWxhdG9yJ3MgcGFyc2VyIHN0YWNrIGNvbnRhaW5zIHRoaXM6Ci0KLUBleGFtcGxlCi0xICsgNSAqIDMKLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLWFuZCB0aGUgbmV4dCBpbnB1dCB0b2tlbiBpcyBhIG5ld2xpbmUgY2hhcmFjdGVyLCB0aGVuIHRoZSBsYXN0IHRocmVlCi1lbGVtZW50cyBjYW4gYmUgcmVkdWNlZCB0byAxNSB2aWEgdGhlIHJ1bGU6Ci0KLUBleGFtcGxlCi1leHByOiBleHByICcqJyBleHByOwotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotVGhlbiB0aGUgc3RhY2sgY29udGFpbnMganVzdCB0aGVzZSB0aHJlZSBlbGVtZW50czoKLQotQGV4YW1wbGUKLTEgKyAxNQotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotQXQgdGhpcyBwb2ludCwgYW5vdGhlciByZWR1Y3Rpb24gY2FuIGJlIG1hZGUsIHJlc3VsdGluZyBpbiB0aGUgc2luZ2xlIHZhbHVlCi0xNi4gIFRoZW4gdGhlIG5ld2xpbmUgdG9rZW4gY2FuIGJlIHNoaWZ0ZWQuCi0KLVRoZSBwYXJzZXIgdHJpZXMsIGJ5IHNoaWZ0cyBhbmQgcmVkdWN0aW9ucywgdG8gcmVkdWNlIHRoZSBlbnRpcmUgaW5wdXQgZG93bgotdG8gYSBzaW5nbGUgZ3JvdXBpbmcgd2hvc2Ugc3ltYm9sIGlzIHRoZSBncmFtbWFyJ3Mgc3RhcnQtc3ltYm9sCi0oQHB4cmVme0xhbmd1YWdlIGFuZCBHcmFtbWFyLCAsTGFuZ3VhZ2VzIGFuZCBDb250ZXh0LUZyZWUgR3JhbW1hcnN9KS4KLQotVGhpcyBraW5kIG9mIHBhcnNlciBpcyBrbm93biBpbiB0aGUgbGl0ZXJhdHVyZSBhcyBhIGJvdHRvbS11cCBwYXJzZXIuCi0KLUBtZW51Ci0qIExvb2stQWhlYWQ6OiAgICAgICAgUGFyc2VyIGxvb2tzIG9uZSB0b2tlbiBhaGVhZCB3aGVuIGRlY2lkaW5nIHdoYXQgdG8gZG8uCi0qIFNoaWZ0L1JlZHVjZTo6ICAgICAgQ29uZmxpY3RzOiB3aGVuIGVpdGhlciBzaGlmdGluZyBvciByZWR1Y3Rpb24gaXMgdmFsaWQuCi0qIFByZWNlZGVuY2U6OiAgICAgICAgT3BlcmF0b3IgcHJlY2VkZW5jZSB3b3JrcyBieSByZXNvbHZpbmcgY29uZmxpY3RzLgotKiBDb250ZXh0dWFsIFByZWNlZGVuY2U6OiAgV2hlbiBhbiBvcGVyYXRvcidzIHByZWNlZGVuY2UgZGVwZW5kcyBvbiBjb250ZXh0LgotKiBQYXJzZXIgU3RhdGVzOjogICAgIFRoZSBwYXJzZXIgaXMgYSBmaW5pdGUtc3RhdGUtbWFjaGluZSB3aXRoIHN0YWNrLgotKiBSZWR1Y2UvUmVkdWNlOjogICAgIFdoZW4gdHdvIHJ1bGVzIGFyZSBhcHBsaWNhYmxlIGluIHRoZSBzYW1lIHNpdHVhdGlvbi4KLSogTXlzdGVyeSBDb25mbGljdHM6OiAgUmVkdWNlL3JlZHVjZSBjb25mbGljdHMgdGhhdCBsb29rIHVuanVzdGlmaWVkLgotKiBHZW5lcmFsaXplZCBMUiBQYXJzaW5nOjogIFBhcnNpbmcgYXJiaXRyYXJ5IGNvbnRleHQtZnJlZSBncmFtbWFycy4KLSogTWVtb3J5IE1hbmFnZW1lbnQ6OiBXaGF0IGhhcHBlbnMgd2hlbiBtZW1vcnkgaXMgZXhoYXVzdGVkLiAgSG93IHRvIGF2b2lkIGl0LgotQGVuZCBtZW51Ci0KLUBub2RlIExvb2stQWhlYWQKLUBzZWN0aW9uIExvb2stQWhlYWQgVG9rZW5zCi1AY2luZGV4IGxvb2stYWhlYWQgdG9rZW4KLQotVGhlIEJpc29uIHBhcnNlciBkb2VzIEBlbXBoe25vdH0gYWx3YXlzIHJlZHVjZSBpbW1lZGlhdGVseSBhcyBzb29uIGFzIHRoZQotbGFzdCBAdmFye259IHRva2VucyBhbmQgZ3JvdXBpbmdzIG1hdGNoIGEgcnVsZS4gIFRoaXMgaXMgYmVjYXVzZSBzdWNoIGEKLXNpbXBsZSBzdHJhdGVneSBpcyBpbmFkZXF1YXRlIHRvIGhhbmRsZSBtb3N0IGxhbmd1YWdlcy4gIEluc3RlYWQsIHdoZW4gYQotcmVkdWN0aW9uIGlzIHBvc3NpYmxlLCB0aGUgcGFyc2VyIHNvbWV0aW1lcyBgYGxvb2tzIGFoZWFkJycgYXQgdGhlIG5leHQKLXRva2VuIGluIG9yZGVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvLgotCi1XaGVuIGEgdG9rZW4gaXMgcmVhZCwgaXQgaXMgbm90IGltbWVkaWF0ZWx5IHNoaWZ0ZWQ7IGZpcnN0IGl0IGJlY29tZXMgdGhlCi1AZGZue2xvb2stYWhlYWQgdG9rZW59LCB3aGljaCBpcyBub3Qgb24gdGhlIHN0YWNrLiAgTm93IHRoZSBwYXJzZXIgY2FuCi1wZXJmb3JtIG9uZSBvciBtb3JlIHJlZHVjdGlvbnMgb2YgdG9rZW5zIGFuZCBncm91cGluZ3Mgb24gdGhlIHN0YWNrLCB3aGlsZQotdGhlIGxvb2stYWhlYWQgdG9rZW4gcmVtYWlucyBvZmYgdG8gdGhlIHNpZGUuICBXaGVuIG5vIG1vcmUgcmVkdWN0aW9ucwotc2hvdWxkIHRha2UgcGxhY2UsIHRoZSBsb29rLWFoZWFkIHRva2VuIGlzIHNoaWZ0ZWQgb250byB0aGUgc3RhY2suICBUaGlzCi1kb2VzIG5vdCBtZWFuIHRoYXQgYWxsIHBvc3NpYmxlIHJlZHVjdGlvbnMgaGF2ZSBiZWVuIGRvbmU7IGRlcGVuZGluZyBvbiB0aGUKLXRva2VuIHR5cGUgb2YgdGhlIGxvb2stYWhlYWQgdG9rZW4sIHNvbWUgcnVsZXMgbWF5IGNob29zZSB0byBkZWxheSB0aGVpcgotYXBwbGljYXRpb24uCi0KLUhlcmUgaXMgYSBzaW1wbGUgY2FzZSB3aGVyZSBsb29rLWFoZWFkIGlzIG5lZWRlZC4gIFRoZXNlIHRocmVlIHJ1bGVzIGRlZmluZQotZXhwcmVzc2lvbnMgd2hpY2ggY29udGFpbiBiaW5hcnkgYWRkaXRpb24gb3BlcmF0b3JzIGFuZCBwb3N0Zml4IHVuYXJ5Ci1mYWN0b3JpYWwgb3BlcmF0b3JzIChAc2FtcHshfSksIGFuZCBhbGxvdyBwYXJlbnRoZXNlcyBmb3IgZ3JvdXBpbmcuCi0KLUBleGFtcGxlCi1AZ3JvdXAKLWV4cHI6ICAgICB0ZXJtICcrJyBleHByCi0gICAgICAgIHwgdGVybQotICAgICAgICA7Ci1AZW5kIGdyb3VwCi0KLUBncm91cAotdGVybTogICAgICcoJyBleHByICcpJwotICAgICAgICB8IHRlcm0gJyEnCi0gICAgICAgIHwgTlVNQkVSCi0gICAgICAgIDsKLUBlbmQgZ3JvdXAKLUBlbmQgZXhhbXBsZQotCi1TdXBwb3NlIHRoYXQgdGhlIHRva2VucyBAd3tAc2FtcHsxICsgMn19IGhhdmUgYmVlbiByZWFkIGFuZCBzaGlmdGVkOyB3aGF0Ci1zaG91bGQgYmUgZG9uZT8gIElmIHRoZSBmb2xsb3dpbmcgdG9rZW4gaXMgQHNhbXB7KX0sIHRoZW4gdGhlIGZpcnN0IHRocmVlCi10b2tlbnMgbXVzdCBiZSByZWR1Y2VkIHRvIGZvcm0gYW4gQGNvZGV7ZXhwcn0uICBUaGlzIGlzIHRoZSBvbmx5IHZhbGlkCi1jb3Vyc2UsIGJlY2F1c2Ugc2hpZnRpbmcgdGhlIEBzYW1weyl9IHdvdWxkIHByb2R1Y2UgYSBzZXF1ZW5jZSBvZiBzeW1ib2xzCi1Ad3tAY29kZXt0ZXJtICcpJ319LCBhbmQgbm8gcnVsZSBhbGxvd3MgdGhpcy4KLQotSWYgdGhlIGZvbGxvd2luZyB0b2tlbiBpcyBAc2FtcHshfSwgdGhlbiBpdCBtdXN0IGJlIHNoaWZ0ZWQgaW1tZWRpYXRlbHkgc28KLXRoYXQgQHd7QHNhbXB7MiAhfX0gY2FuIGJlIHJlZHVjZWQgdG8gbWFrZSBhIEBjb2Rle3Rlcm19LiAgSWYgaW5zdGVhZCB0aGUKLXBhcnNlciB3ZXJlIHRvIHJlZHVjZSBiZWZvcmUgc2hpZnRpbmcsIEB3e0BzYW1wezEgKyAyfX0gd291bGQgYmVjb21lIGFuCi1AY29kZXtleHByfS4gIEl0IHdvdWxkIHRoZW4gYmUgaW1wb3NzaWJsZSB0byBzaGlmdCB0aGUgQHNhbXB7IX0gYmVjYXVzZQotZG9pbmcgc28gd291bGQgcHJvZHVjZSBvbiB0aGUgc3RhY2sgdGhlIHNlcXVlbmNlIG9mIHN5bWJvbHMgQGNvZGV7ZXhwcgotJyEnfS4gIE5vIHJ1bGUgYWxsb3dzIHRoYXQgc2VxdWVuY2UuCi0KLUB2aW5kZXggeXljaGFyCi1AdmluZGV4IHl5bHZhbAotQHZpbmRleCB5eWxsb2MKLVRoZSBsb29rLWFoZWFkIHRva2VuIGlzIHN0b3JlZCBpbiB0aGUgdmFyaWFibGUgQGNvZGV7eXljaGFyfS4KLUl0cyBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24sIGlmIGFueSwgYXJlIHN0b3JlZCBpbiB0aGUgdmFyaWFibGVzCi1AY29kZXt5eWx2YWx9IGFuZCBAY29kZXt5eWxsb2N9LgotQHhyZWZ7QWN0aW9uIEZlYXR1cmVzLCAsU3BlY2lhbCBGZWF0dXJlcyBmb3IgVXNlIGluIEFjdGlvbnN9LgotCi1Abm9kZSBTaGlmdC9SZWR1Y2UKLUBzZWN0aW9uIFNoaWZ0L1JlZHVjZSBDb25mbGljdHMKLUBjaW5kZXggY29uZmxpY3RzCi1AY2luZGV4IHNoaWZ0L3JlZHVjZSBjb25mbGljdHMKLUBjaW5kZXggZGFuZ2xpbmcgQGNvZGV7ZWxzZX0KLUBjaW5kZXggQGNvZGV7ZWxzZX0sIGRhbmdsaW5nCi0KLVN1cHBvc2Ugd2UgYXJlIHBhcnNpbmcgYSBsYW5ndWFnZSB3aGljaCBoYXMgaWYtdGhlbiBhbmQgaWYtdGhlbi1lbHNlCi1zdGF0ZW1lbnRzLCB3aXRoIGEgcGFpciBvZiBydWxlcyBsaWtlIHRoaXM6Ci0KLUBleGFtcGxlCi1AZ3JvdXAKLWlmX3N0bXQ6Ci0gICAgICAgICAgSUYgZXhwciBUSEVOIHN0bXQKLSAgICAgICAgfCBJRiBleHByIFRIRU4gc3RtdCBFTFNFIHN0bXQKLSAgICAgICAgOwotQGVuZCBncm91cAotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotSGVyZSB3ZSBhc3N1bWUgdGhhdCBAY29kZXtJRn0sIEBjb2Rle1RIRU59IGFuZCBAY29kZXtFTFNFfSBhcmUKLXRlcm1pbmFsIHN5bWJvbHMgZm9yIHNwZWNpZmljIGtleXdvcmQgdG9rZW5zLgotCi1XaGVuIHRoZSBAY29kZXtFTFNFfSB0b2tlbiBpcyByZWFkIGFuZCBiZWNvbWVzIHRoZSBsb29rLWFoZWFkIHRva2VuLCB0aGUKLWNvbnRlbnRzIG9mIHRoZSBzdGFjayAoYXNzdW1pbmcgdGhlIGlucHV0IGlzIHZhbGlkKSBhcmUganVzdCByaWdodCBmb3IKLXJlZHVjdGlvbiBieSB0aGUgZmlyc3QgcnVsZS4gIEJ1dCBpdCBpcyBhbHNvIGxlZ2l0aW1hdGUgdG8gc2hpZnQgdGhlCi1AY29kZXtFTFNFfSwgYmVjYXVzZSB0aGF0IHdvdWxkIGxlYWQgdG8gZXZlbnR1YWwgcmVkdWN0aW9uIGJ5IHRoZSBzZWNvbmQKLXJ1bGUuCi0KLVRoaXMgc2l0dWF0aW9uLCB3aGVyZSBlaXRoZXIgYSBzaGlmdCBvciBhIHJlZHVjdGlvbiB3b3VsZCBiZSB2YWxpZCwgaXMKLWNhbGxlZCBhIEBkZm57c2hpZnQvcmVkdWNlIGNvbmZsaWN0fS4gIEJpc29uIGlzIGRlc2lnbmVkIHRvIHJlc29sdmUKLXRoZXNlIGNvbmZsaWN0cyBieSBjaG9vc2luZyB0byBzaGlmdCwgdW5sZXNzIG90aGVyd2lzZSBkaXJlY3RlZCBieQotb3BlcmF0b3IgcHJlY2VkZW5jZSBkZWNsYXJhdGlvbnMuICBUbyBzZWUgdGhlIHJlYXNvbiBmb3IgdGhpcywgbGV0J3MKLWNvbnRyYXN0IGl0IHdpdGggdGhlIG90aGVyIGFsdGVybmF0aXZlLgotCi1TaW5jZSB0aGUgcGFyc2VyIHByZWZlcnMgdG8gc2hpZnQgdGhlIEBjb2Rle0VMU0V9LCB0aGUgcmVzdWx0IGlzIHRvIGF0dGFjaAotdGhlIGVsc2UtY2xhdXNlIHRvIHRoZSBpbm5lcm1vc3QgaWYtc3RhdGVtZW50LCBtYWtpbmcgdGhlc2UgdHdvIGlucHV0cwotZXF1aXZhbGVudDoKLQotQGV4YW1wbGUKLWlmIHggdGhlbiBpZiB5IHRoZW4gd2luICgpOyBlbHNlIGxvc2U7Ci0KLWlmIHggdGhlbiBkbzsgaWYgeSB0aGVuIHdpbiAoKTsgZWxzZSBsb3NlOyBlbmQ7Ci1AZW5kIGV4YW1wbGUKLQotQnV0IGlmIHRoZSBwYXJzZXIgY2hvc2UgdG8gcmVkdWNlIHdoZW4gcG9zc2libGUgcmF0aGVyIHRoYW4gc2hpZnQsIHRoZQotcmVzdWx0IHdvdWxkIGJlIHRvIGF0dGFjaCB0aGUgZWxzZS1jbGF1c2UgdG8gdGhlIG91dGVybW9zdCBpZi1zdGF0ZW1lbnQsCi1tYWtpbmcgdGhlc2UgdHdvIGlucHV0cyBlcXVpdmFsZW50OgotCi1AZXhhbXBsZQotaWYgeCB0aGVuIGlmIHkgdGhlbiB3aW4gKCk7IGVsc2UgbG9zZTsKLQotaWYgeCB0aGVuIGRvOyBpZiB5IHRoZW4gd2luICgpOyBlbmQ7IGVsc2UgbG9zZTsKLUBlbmQgZXhhbXBsZQotCi1UaGUgY29uZmxpY3QgZXhpc3RzIGJlY2F1c2UgdGhlIGdyYW1tYXIgYXMgd3JpdHRlbiBpcyBhbWJpZ3VvdXM6IGVpdGhlcgotcGFyc2luZyBvZiB0aGUgc2ltcGxlIG5lc3RlZCBpZi1zdGF0ZW1lbnQgaXMgbGVnaXRpbWF0ZS4gIFRoZSBlc3RhYmxpc2hlZAotY29udmVudGlvbiBpcyB0aGF0IHRoZXNlIGFtYmlndWl0aWVzIGFyZSByZXNvbHZlZCBieSBhdHRhY2hpbmcgdGhlCi1lbHNlLWNsYXVzZSB0byB0aGUgaW5uZXJtb3N0IGlmLXN0YXRlbWVudDsgdGhpcyBpcyB3aGF0IEJpc29uIGFjY29tcGxpc2hlcwotYnkgY2hvb3NpbmcgdG8gc2hpZnQgcmF0aGVyIHRoYW4gcmVkdWNlLiAgKEl0IHdvdWxkIGlkZWFsbHkgYmUgY2xlYW5lciB0bwotd3JpdGUgYW4gdW5hbWJpZ3VvdXMgZ3JhbW1hciwgYnV0IHRoYXQgaXMgdmVyeSBoYXJkIHRvIGRvIGluIHRoaXMgY2FzZS4pCi1UaGlzIHBhcnRpY3VsYXIgYW1iaWd1aXR5IHdhcyBmaXJzdCBlbmNvdW50ZXJlZCBpbiB0aGUgc3BlY2lmaWNhdGlvbnMgb2YKLUFsZ29sIDYwIGFuZCBpcyBjYWxsZWQgdGhlIGBgZGFuZ2xpbmcgQGNvZGV7ZWxzZX0nJyBhbWJpZ3VpdHkuCi0KLVRvIGF2b2lkIHdhcm5pbmdzIGZyb20gQmlzb24gYWJvdXQgcHJlZGljdGFibGUsIGxlZ2l0aW1hdGUgc2hpZnQvcmVkdWNlCi1jb25mbGljdHMsIHVzZSB0aGUgQGNvZGV7JWV4cGVjdCBAdmFye259fSBkZWNsYXJhdGlvbi4gIFRoZXJlIHdpbGwgYmUgbm8KLXdhcm5pbmcgYXMgbG9uZyBhcyB0aGUgbnVtYmVyIG9mIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMgaXMgZXhhY3RseSBAdmFye259LgotQHhyZWZ7RXhwZWN0IERlY2wsICxTdXBwcmVzc2luZyBDb25mbGljdCBXYXJuaW5nc30uCi0KLVRoZSBkZWZpbml0aW9uIG9mIEBjb2Rle2lmX3N0bXR9IGFib3ZlIGlzIHNvbGVseSB0byBibGFtZSBmb3IgdGhlCi1jb25mbGljdCwgYnV0IHRoZSBjb25mbGljdCBkb2VzIG5vdCBhY3R1YWxseSBhcHBlYXIgd2l0aG91dCBhZGRpdGlvbmFsCi1ydWxlcy4gIEhlcmUgaXMgYSBjb21wbGV0ZSBCaXNvbiBpbnB1dCBmaWxlIHRoYXQgYWN0dWFsbHkgbWFuaWZlc3RzIHRoZQotY29uZmxpY3Q6Ci0KLUBleGFtcGxlCi1AZ3JvdXAKLSV0b2tlbiBJRiBUSEVOIEVMU0UgdmFyaWFibGUKLSUlCi1AZW5kIGdyb3VwCi1AZ3JvdXAKLXN0bXQ6ICAgICBleHByCi0gICAgICAgIHwgaWZfc3RtdAotICAgICAgICA7Ci1AZW5kIGdyb3VwCi0KLUBncm91cAotaWZfc3RtdDoKLSAgICAgICAgICBJRiBleHByIFRIRU4gc3RtdAotICAgICAgICB8IElGIGV4cHIgVEhFTiBzdG10IEVMU0Ugc3RtdAotICAgICAgICA7Ci1AZW5kIGdyb3VwCi0KLWV4cHI6ICAgICB2YXJpYWJsZQotICAgICAgICA7Ci1AZW5kIGV4YW1wbGUKLQotQG5vZGUgUHJlY2VkZW5jZQotQHNlY3Rpb24gT3BlcmF0b3IgUHJlY2VkZW5jZQotQGNpbmRleCBvcGVyYXRvciBwcmVjZWRlbmNlCi1AY2luZGV4IHByZWNlZGVuY2Ugb2Ygb3BlcmF0b3JzCi0KLUFub3RoZXIgc2l0dWF0aW9uIHdoZXJlIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMgYXBwZWFyIGlzIGluIGFyaXRobWV0aWMKLWV4cHJlc3Npb25zLiAgSGVyZSBzaGlmdGluZyBpcyBub3QgYWx3YXlzIHRoZSBwcmVmZXJyZWQgcmVzb2x1dGlvbjsgdGhlCi1CaXNvbiBkZWNsYXJhdGlvbnMgZm9yIG9wZXJhdG9yIHByZWNlZGVuY2UgYWxsb3cgeW91IHRvIHNwZWNpZnkgd2hlbiB0bwotc2hpZnQgYW5kIHdoZW4gdG8gcmVkdWNlLgotCi1AbWVudQotKiBXaHkgUHJlY2VkZW5jZTo6ICAgIEFuIGV4YW1wbGUgc2hvd2luZyB3aHkgcHJlY2VkZW5jZSBpcyBuZWVkZWQuCi0qIFVzaW5nIFByZWNlZGVuY2U6OiAgSG93IHRvIHNwZWNpZnkgcHJlY2VkZW5jZSBpbiBCaXNvbiBncmFtbWFycy4KLSogUHJlY2VkZW5jZSBFeGFtcGxlczo6ICBIb3cgdGhlc2UgZmVhdHVyZXMgYXJlIHVzZWQgaW4gdGhlIHByZXZpb3VzIGV4YW1wbGUuCi0qIEhvdyBQcmVjZWRlbmNlOjogICAgSG93IHRoZXkgd29yay4KLUBlbmQgbWVudQotCi1Abm9kZSBXaHkgUHJlY2VkZW5jZQotQHN1YnNlY3Rpb24gV2hlbiBQcmVjZWRlbmNlIGlzIE5lZWRlZAotCi1Db25zaWRlciB0aGUgZm9sbG93aW5nIGFtYmlndW91cyBncmFtbWFyIGZyYWdtZW50IChhbWJpZ3VvdXMgYmVjYXVzZSB0aGUKLWlucHV0IEB3e0BzYW1wezEgLSAyICogM319IGNhbiBiZSBwYXJzZWQgaW4gdHdvIGRpZmZlcmVudCB3YXlzKToKLQotQGV4YW1wbGUKLUBncm91cAotZXhwcjogICAgIGV4cHIgJy0nIGV4cHIKLSAgICAgICAgfCBleHByICcqJyBleHByCi0gICAgICAgIHwgZXhwciAnPCcgZXhwcgotICAgICAgICB8ICcoJyBleHByICcpJwotICAgICAgICBAZG90c3t9Ci0gICAgICAgIDsKLUBlbmQgZ3JvdXAKLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLVN1cHBvc2UgdGhlIHBhcnNlciBoYXMgc2VlbiB0aGUgdG9rZW5zIEBzYW1wezF9LCBAc2FtcHstfSBhbmQgQHNhbXB7Mn07Ci1zaG91bGQgaXQgcmVkdWNlIHRoZW0gdmlhIHRoZSBydWxlIGZvciB0aGUgc3VidHJhY3Rpb24gb3BlcmF0b3I/ICBJdAotZGVwZW5kcyBvbiB0aGUgbmV4dCB0b2tlbi4gIE9mIGNvdXJzZSwgaWYgdGhlIG5leHQgdG9rZW4gaXMgQHNhbXB7KX0sIHdlCi1tdXN0IHJlZHVjZTsgc2hpZnRpbmcgaXMgaW52YWxpZCBiZWNhdXNlIG5vIHNpbmdsZSBydWxlIGNhbiByZWR1Y2UgdGhlCi10b2tlbiBzZXF1ZW5jZSBAd3tAc2FtcHstIDIgKX19IG9yIGFueXRoaW5nIHN0YXJ0aW5nIHdpdGggdGhhdC4gIEJ1dCBpZgotdGhlIG5leHQgdG9rZW4gaXMgQHNhbXB7Kn0gb3IgQHNhbXB7PH0sIHdlIGhhdmUgYSBjaG9pY2U6IGVpdGhlcgotc2hpZnRpbmcgb3IgcmVkdWN0aW9uIHdvdWxkIGFsbG93IHRoZSBwYXJzZSB0byBjb21wbGV0ZSwgYnV0IHdpdGgKLWRpZmZlcmVudCByZXN1bHRzLgotCi1UbyBkZWNpZGUgd2hpY2ggb25lIEJpc29uIHNob3VsZCBkbywgd2UgbXVzdCBjb25zaWRlciB0aGUgcmVzdWx0cy4gIElmCi10aGUgbmV4dCBvcGVyYXRvciB0b2tlbiBAdmFye29wfSBpcyBzaGlmdGVkLCB0aGVuIGl0IG11c3QgYmUgcmVkdWNlZAotZmlyc3QgaW4gb3JkZXIgdG8gcGVybWl0IGFub3RoZXIgb3Bwb3J0dW5pdHkgdG8gcmVkdWNlIHRoZSBkaWZmZXJlbmNlLgotVGhlIHJlc3VsdCBpcyAoaW4gZWZmZWN0KSBAd3tAc2FtcHsxIC0gKDIgQHZhcntvcH0gMyl9fS4gIE9uIHRoZSBvdGhlcgotaGFuZCwgaWYgdGhlIHN1YnRyYWN0aW9uIGlzIHJlZHVjZWQgYmVmb3JlIHNoaWZ0aW5nIEB2YXJ7b3B9LCB0aGUgcmVzdWx0Ci1pcyBAd3tAc2FtcHsoMSAtIDIpIEB2YXJ7b3B9IDN9fS4gIENsZWFybHksIHRoZW4sIHRoZSBjaG9pY2Ugb2Ygc2hpZnQgb3IKLXJlZHVjZSBzaG91bGQgZGVwZW5kIG9uIHRoZSByZWxhdGl2ZSBwcmVjZWRlbmNlIG9mIHRoZSBvcGVyYXRvcnMKLUBzYW1wey19IGFuZCBAdmFye29wfTogQHNhbXB7Kn0gc2hvdWxkIGJlIHNoaWZ0ZWQgZmlyc3QsIGJ1dCBub3QKLUBzYW1wezx9LgotCi1AY2luZGV4IGFzc29jaWF0aXZpdHkKLVdoYXQgYWJvdXQgaW5wdXQgc3VjaCBhcyBAd3tAc2FtcHsxIC0gMiAtIDV9fTsgc2hvdWxkIHRoaXMgYmUKLUB3e0BzYW1weygxIC0gMikgLSA1fX0gb3Igc2hvdWxkIGl0IGJlIEB3e0BzYW1wezEgLSAoMiAtIDUpfX0/ICBGb3IgbW9zdAotb3BlcmF0b3JzIHdlIHByZWZlciB0aGUgZm9ybWVyLCB3aGljaCBpcyBjYWxsZWQgQGRmbntsZWZ0IGFzc29jaWF0aW9ufS4KLVRoZSBsYXR0ZXIgYWx0ZXJuYXRpdmUsIEBkZm57cmlnaHQgYXNzb2NpYXRpb259LCBpcyBkZXNpcmFibGUgZm9yCi1hc3NpZ25tZW50IG9wZXJhdG9ycy4gIFRoZSBjaG9pY2Ugb2YgbGVmdCBvciByaWdodCBhc3NvY2lhdGlvbiBpcyBhCi1tYXR0ZXIgb2Ygd2hldGhlciB0aGUgcGFyc2VyIGNob29zZXMgdG8gc2hpZnQgb3IgcmVkdWNlIHdoZW4gdGhlIHN0YWNrCi1jb250YWlucyBAd3tAc2FtcHsxIC0gMn19IGFuZCB0aGUgbG9vay1haGVhZCB0b2tlbiBpcyBAc2FtcHstfTogc2hpZnRpbmcKLW1ha2VzIHJpZ2h0LWFzc29jaWF0aXZpdHkuCi0KLUBub2RlIFVzaW5nIFByZWNlZGVuY2UKLUBzdWJzZWN0aW9uIFNwZWNpZnlpbmcgT3BlcmF0b3IgUHJlY2VkZW5jZQotQGZpbmRleCAlbGVmdAotQGZpbmRleCAlcmlnaHQKLUBmaW5kZXggJW5vbmFzc29jCi0KLUJpc29uIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGVzZSBjaG9pY2VzIHdpdGggdGhlIG9wZXJhdG9yIHByZWNlZGVuY2UKLWRlY2xhcmF0aW9ucyBAY29kZXslbGVmdH0gYW5kIEBjb2RleyVyaWdodH0uICBFYWNoIHN1Y2ggZGVjbGFyYXRpb24KLWNvbnRhaW5zIGEgbGlzdCBvZiB0b2tlbnMsIHdoaWNoIGFyZSBvcGVyYXRvcnMgd2hvc2UgcHJlY2VkZW5jZSBhbmQKLWFzc29jaWF0aXZpdHkgaXMgYmVpbmcgZGVjbGFyZWQuICBUaGUgQGNvZGV7JWxlZnR9IGRlY2xhcmF0aW9uIG1ha2VzIGFsbAotdGhvc2Ugb3BlcmF0b3JzIGxlZnQtYXNzb2NpYXRpdmUgYW5kIHRoZSBAY29kZXslcmlnaHR9IGRlY2xhcmF0aW9uIG1ha2VzCi10aGVtIHJpZ2h0LWFzc29jaWF0aXZlLiAgQSB0aGlyZCBhbHRlcm5hdGl2ZSBpcyBAY29kZXslbm9uYXNzb2N9LCB3aGljaAotZGVjbGFyZXMgdGhhdCBpdCBpcyBhIHN5bnRheCBlcnJvciB0byBmaW5kIHRoZSBzYW1lIG9wZXJhdG9yIHR3aWNlIGBgaW4gYQotcm93JycuCi0KLVRoZSByZWxhdGl2ZSBwcmVjZWRlbmNlIG9mIGRpZmZlcmVudCBvcGVyYXRvcnMgaXMgY29udHJvbGxlZCBieSB0aGUKLW9yZGVyIGluIHdoaWNoIHRoZXkgYXJlIGRlY2xhcmVkLiAgVGhlIGZpcnN0IEBjb2RleyVsZWZ0fSBvcgotQGNvZGV7JXJpZ2h0fSBkZWNsYXJhdGlvbiBpbiB0aGUgZmlsZSBkZWNsYXJlcyB0aGUgb3BlcmF0b3JzIHdob3NlCi1wcmVjZWRlbmNlIGlzIGxvd2VzdCwgdGhlIG5leHQgc3VjaCBkZWNsYXJhdGlvbiBkZWNsYXJlcyB0aGUgb3BlcmF0b3JzCi13aG9zZSBwcmVjZWRlbmNlIGlzIGEgbGl0dGxlIGhpZ2hlciwgYW5kIHNvIG9uLgotCi1Abm9kZSBQcmVjZWRlbmNlIEV4YW1wbGVzCi1Ac3Vic2VjdGlvbiBQcmVjZWRlbmNlIEV4YW1wbGVzCi0KLUluIG91ciBleGFtcGxlLCB3ZSB3b3VsZCB3YW50IHRoZSBmb2xsb3dpbmcgZGVjbGFyYXRpb25zOgotCi1AZXhhbXBsZQotJWxlZnQgJzwnCi0lbGVmdCAnLScKLSVsZWZ0ICcqJwotQGVuZCBleGFtcGxlCi0KLUluIGEgbW9yZSBjb21wbGV0ZSBleGFtcGxlLCB3aGljaCBzdXBwb3J0cyBvdGhlciBvcGVyYXRvcnMgYXMgd2VsbCwgd2UKLXdvdWxkIGRlY2xhcmUgdGhlbSBpbiBncm91cHMgb2YgZXF1YWwgcHJlY2VkZW5jZS4gIEZvciBleGFtcGxlLCBAY29kZXsnKyd9IGlzCi1kZWNsYXJlZCB3aXRoIEBjb2RleyctJ306Ci0KLUBleGFtcGxlCi0lbGVmdCAnPCcgJz4nICc9JyBORSBMRSBHRQotJWxlZnQgJysnICctJwotJWxlZnQgJyonICcvJwotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotKEhlcmUgQGNvZGV7TkV9IGFuZCBzbyBvbiBzdGFuZCBmb3IgdGhlIG9wZXJhdG9ycyBmb3IgYGBub3QgZXF1YWwnJwotYW5kIHNvIG9uLiAgV2UgYXNzdW1lIHRoYXQgdGhlc2UgdG9rZW5zIGFyZSBtb3JlIHRoYW4gb25lIGNoYXJhY3RlciBsb25nCi1hbmQgdGhlcmVmb3JlIGFyZSByZXByZXNlbnRlZCBieSBuYW1lcywgbm90IGNoYXJhY3RlciBsaXRlcmFscy4pCi0KLUBub2RlIEhvdyBQcmVjZWRlbmNlCi1Ac3Vic2VjdGlvbiBIb3cgUHJlY2VkZW5jZSBXb3JrcwotCi1UaGUgZmlyc3QgZWZmZWN0IG9mIHRoZSBwcmVjZWRlbmNlIGRlY2xhcmF0aW9ucyBpcyB0byBhc3NpZ24gcHJlY2VkZW5jZQotbGV2ZWxzIHRvIHRoZSB0ZXJtaW5hbCBzeW1ib2xzIGRlY2xhcmVkLiAgVGhlIHNlY29uZCBlZmZlY3QgaXMgdG8gYXNzaWduCi1wcmVjZWRlbmNlIGxldmVscyB0byBjZXJ0YWluIHJ1bGVzOiBlYWNoIHJ1bGUgZ2V0cyBpdHMgcHJlY2VkZW5jZSBmcm9tCi10aGUgbGFzdCB0ZXJtaW5hbCBzeW1ib2wgbWVudGlvbmVkIGluIHRoZSBjb21wb25lbnRzLiAgKFlvdSBjYW4gYWxzbwotc3BlY2lmeSBleHBsaWNpdGx5IHRoZSBwcmVjZWRlbmNlIG9mIGEgcnVsZS4gIEB4cmVme0NvbnRleHR1YWwKLVByZWNlZGVuY2UsICxDb250ZXh0LURlcGVuZGVudCBQcmVjZWRlbmNlfS4pCi0KLUZpbmFsbHksIHRoZSByZXNvbHV0aW9uIG9mIGNvbmZsaWN0cyB3b3JrcyBieSBjb21wYXJpbmcgdGhlIHByZWNlZGVuY2UKLW9mIHRoZSBydWxlIGJlaW5nIGNvbnNpZGVyZWQgd2l0aCB0aGF0IG9mIHRoZSBsb29rLWFoZWFkIHRva2VuLiAgSWYgdGhlCi10b2tlbidzIHByZWNlZGVuY2UgaXMgaGlnaGVyLCB0aGUgY2hvaWNlIGlzIHRvIHNoaWZ0LiAgSWYgdGhlIHJ1bGUncwotcHJlY2VkZW5jZSBpcyBoaWdoZXIsIHRoZSBjaG9pY2UgaXMgdG8gcmVkdWNlLiAgSWYgdGhleSBoYXZlIGVxdWFsCi1wcmVjZWRlbmNlLCB0aGUgY2hvaWNlIGlzIG1hZGUgYmFzZWQgb24gdGhlIGFzc29jaWF0aXZpdHkgb2YgdGhhdAotcHJlY2VkZW5jZSBsZXZlbC4gIFRoZSB2ZXJib3NlIG91dHB1dCBmaWxlIG1hZGUgYnkgQHNhbXB7LXZ9Ci0oQHB4cmVme0ludm9jYXRpb24sICxJbnZva2luZyBCaXNvbn0pIHNheXMgaG93IGVhY2ggY29uZmxpY3Qgd2FzCi1yZXNvbHZlZC4KLQotTm90IGFsbCBydWxlcyBhbmQgbm90IGFsbCB0b2tlbnMgaGF2ZSBwcmVjZWRlbmNlLiAgSWYgZWl0aGVyIHRoZSBydWxlIG9yCi10aGUgbG9vay1haGVhZCB0b2tlbiBoYXMgbm8gcHJlY2VkZW5jZSwgdGhlbiB0aGUgZGVmYXVsdCBpcyB0byBzaGlmdC4KLQotQG5vZGUgQ29udGV4dHVhbCBQcmVjZWRlbmNlCi1Ac2VjdGlvbiBDb250ZXh0LURlcGVuZGVudCBQcmVjZWRlbmNlCi1AY2luZGV4IGNvbnRleHQtZGVwZW5kZW50IHByZWNlZGVuY2UKLUBjaW5kZXggdW5hcnkgb3BlcmF0b3IgcHJlY2VkZW5jZQotQGNpbmRleCBwcmVjZWRlbmNlLCBjb250ZXh0LWRlcGVuZGVudAotQGNpbmRleCBwcmVjZWRlbmNlLCB1bmFyeSBvcGVyYXRvcgotQGZpbmRleCAlcHJlYwotCi1PZnRlbiB0aGUgcHJlY2VkZW5jZSBvZiBhbiBvcGVyYXRvciBkZXBlbmRzIG9uIHRoZSBjb250ZXh0LiAgVGhpcyBzb3VuZHMKLW91dGxhbmRpc2ggYXQgZmlyc3QsIGJ1dCBpdCBpcyByZWFsbHkgdmVyeSBjb21tb24uICBGb3IgZXhhbXBsZSwgYSBtaW51cwotc2lnbiB0eXBpY2FsbHkgaGFzIGEgdmVyeSBoaWdoIHByZWNlZGVuY2UgYXMgYSB1bmFyeSBvcGVyYXRvciwgYW5kIGEKLXNvbWV3aGF0IGxvd2VyIHByZWNlZGVuY2UgKGxvd2VyIHRoYW4gbXVsdGlwbGljYXRpb24pIGFzIGEgYmluYXJ5IG9wZXJhdG9yLgotCi1UaGUgQmlzb24gcHJlY2VkZW5jZSBkZWNsYXJhdGlvbnMsIEBjb2RleyVsZWZ0fSwgQGNvZGV7JXJpZ2h0fSBhbmQKLUBjb2RleyVub25hc3NvY30sIGNhbiBvbmx5IGJlIHVzZWQgb25jZSBmb3IgYSBnaXZlbiB0b2tlbjsgc28gYSB0b2tlbiBoYXMKLW9ubHkgb25lIHByZWNlZGVuY2UgZGVjbGFyZWQgaW4gdGhpcyB3YXkuICBGb3IgY29udGV4dC1kZXBlbmRlbnQKLXByZWNlZGVuY2UsIHlvdSBuZWVkIHRvIHVzZSBhbiBhZGRpdGlvbmFsIG1lY2hhbmlzbTogdGhlIEBjb2RleyVwcmVjfQotbW9kaWZpZXIgZm9yIHJ1bGVzLgotCi1UaGUgQGNvZGV7JXByZWN9IG1vZGlmaWVyIGRlY2xhcmVzIHRoZSBwcmVjZWRlbmNlIG9mIGEgcGFydGljdWxhciBydWxlIGJ5Ci1zcGVjaWZ5aW5nIGEgdGVybWluYWwgc3ltYm9sIHdob3NlIHByZWNlZGVuY2Ugc2hvdWxkIGJlIHVzZWQgZm9yIHRoYXQgcnVsZS4KLUl0J3Mgbm90IG5lY2Vzc2FyeSBmb3IgdGhhdCBzeW1ib2wgdG8gYXBwZWFyIG90aGVyd2lzZSBpbiB0aGUgcnVsZS4gIFRoZQotbW9kaWZpZXIncyBzeW50YXggaXM6Ci0KLUBleGFtcGxlCi0lcHJlYyBAdmFye3Rlcm1pbmFsLXN5bWJvbH0KLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLWFuZCBpdCBpcyB3cml0dGVuIGFmdGVyIHRoZSBjb21wb25lbnRzIG9mIHRoZSBydWxlLiAgSXRzIGVmZmVjdCBpcyB0bwotYXNzaWduIHRoZSBydWxlIHRoZSBwcmVjZWRlbmNlIG9mIEB2YXJ7dGVybWluYWwtc3ltYm9sfSwgb3ZlcnJpZGluZwotdGhlIHByZWNlZGVuY2UgdGhhdCB3b3VsZCBiZSBkZWR1Y2VkIGZvciBpdCBpbiB0aGUgb3JkaW5hcnkgd2F5LiAgVGhlCi1hbHRlcmVkIHJ1bGUgcHJlY2VkZW5jZSB0aGVuIGFmZmVjdHMgaG93IGNvbmZsaWN0cyBpbnZvbHZpbmcgdGhhdCBydWxlCi1hcmUgcmVzb2x2ZWQgKEBweHJlZntQcmVjZWRlbmNlLCAsT3BlcmF0b3IgUHJlY2VkZW5jZX0pLgotCi1IZXJlIGlzIGhvdyBAY29kZXslcHJlY30gc29sdmVzIHRoZSBwcm9ibGVtIG9mIHVuYXJ5IG1pbnVzLiAgRmlyc3QsIGRlY2xhcmUKLWEgcHJlY2VkZW5jZSBmb3IgYSBmaWN0aXRpb3VzIHRlcm1pbmFsIHN5bWJvbCBuYW1lZCBAY29kZXtVTUlOVVN9LiAgVGhlcmUKLWFyZSBubyB0b2tlbnMgb2YgdGhpcyB0eXBlLCBidXQgdGhlIHN5bWJvbCBzZXJ2ZXMgdG8gc3RhbmQgZm9yIGl0cwotcHJlY2VkZW5jZToKLQotQGV4YW1wbGUKLUBkb3Rze30KLSVsZWZ0ICcrJyAnLScKLSVsZWZ0ICcqJwotJWxlZnQgVU1JTlVTCi1AZW5kIGV4YW1wbGUKLQotTm93IHRoZSBwcmVjZWRlbmNlIG9mIEBjb2Rle1VNSU5VU30gY2FuIGJlIHVzZWQgaW4gc3BlY2lmaWMgcnVsZXM6Ci0KLUBleGFtcGxlCi1AZ3JvdXAKLWV4cDogICAgQGRvdHN7fQotICAgICAgICB8IGV4cCAnLScgZXhwCi0gICAgICAgIEBkb3Rze30KLSAgICAgICAgfCAnLScgZXhwICVwcmVjIFVNSU5VUwotQGVuZCBncm91cAotQGVuZCBleGFtcGxlCi0KLUBpZnNldCBkZWZhdWx0cHJlYwotSWYgeW91IGZvcmdldCB0byBhcHBlbmQgQGNvZGV7JXByZWMgVU1JTlVTfSB0byB0aGUgcnVsZSBmb3IgdW5hcnkKLW1pbnVzLCBCaXNvbiBzaWxlbnRseSBhc3N1bWVzIHRoYXQgbWludXMgaGFzIGl0cyB1c3VhbCBwcmVjZWRlbmNlLgotVGhpcyBraW5kIG9mIHByb2JsZW0gY2FuIGJlIHRyaWNreSB0byBkZWJ1Zywgc2luY2Ugb25lIHR5cGljYWxseQotZGlzY292ZXJzIHRoZSBtaXN0YWtlIG9ubHkgYnkgdGVzdGluZyB0aGUgY29kZS4KLQotVGhlIEBjb2RleyVuby1kZWZhdWx0LXByZWM7fSBkZWNsYXJhdGlvbiBtYWtlcyBpdCBlYXNpZXIgdG8gZGlzY292ZXIKLXRoaXMga2luZCBvZiBwcm9ibGVtIHN5c3RlbWF0aWNhbGx5LiAgSXQgY2F1c2VzIHJ1bGVzIHRoYXQgbGFjayBhCi1AY29kZXslcHJlY30gbW9kaWZpZXIgdG8gaGF2ZSBubyBwcmVjZWRlbmNlLCBldmVuIGlmIHRoZSBsYXN0IHRlcm1pbmFsCi1zeW1ib2wgbWVudGlvbmVkIGluIHRoZWlyIGNvbXBvbmVudHMgaGFzIGEgZGVjbGFyZWQgcHJlY2VkZW5jZS4KLQotSWYgQGNvZGV7JW5vLWRlZmF1bHQtcHJlYzt9IGlzIGluIGVmZmVjdCwgeW91IG11c3Qgc3BlY2lmeSBAY29kZXslcHJlY30KLWZvciBhbGwgcnVsZXMgdGhhdCBwYXJ0aWNpcGF0ZSBpbiBwcmVjZWRlbmNlIGNvbmZsaWN0IHJlc29sdXRpb24uCi1UaGVuIHlvdSB3aWxsIHNlZSBhbnkgc2hpZnQvcmVkdWNlIGNvbmZsaWN0IHVudGlsIHlvdSB0ZWxsIEJpc29uIGhvdwotdG8gcmVzb2x2ZSBpdCwgZWl0aGVyIGJ5IGNoYW5naW5nIHlvdXIgZ3JhbW1hciBvciBieSBhZGRpbmcgYW4KLWV4cGxpY2l0IHByZWNlZGVuY2UuICBUaGlzIHdpbGwgcHJvYmFibHkgYWRkIGRlY2xhcmF0aW9ucyB0byB0aGUKLWdyYW1tYXIsIGJ1dCBpdCBoZWxwcyB0byBwcm90ZWN0IGFnYWluc3QgaW5jb3JyZWN0IHJ1bGUgcHJlY2VkZW5jZXMuCi0KLVRoZSBlZmZlY3Qgb2YgQGNvZGV7JW5vLWRlZmF1bHQtcHJlYzt9IGNhbiBiZSByZXZlcnNlZCBieSBnaXZpbmcKLUBjb2RleyVkZWZhdWx0LXByZWM7fSwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuCi1AZW5kIGlmc2V0Ci0KLUBub2RlIFBhcnNlciBTdGF0ZXMKLUBzZWN0aW9uIFBhcnNlciBTdGF0ZXMKLUBjaW5kZXggZmluaXRlLXN0YXRlIG1hY2hpbmUKLUBjaW5kZXggcGFyc2VyIHN0YXRlCi1AY2luZGV4IHN0YXRlIChvZiBwYXJzZXIpCi0KLVRoZSBmdW5jdGlvbiBAY29kZXt5eXBhcnNlfSBpcyBpbXBsZW1lbnRlZCB1c2luZyBhIGZpbml0ZS1zdGF0ZSBtYWNoaW5lLgotVGhlIHZhbHVlcyBwdXNoZWQgb24gdGhlIHBhcnNlciBzdGFjayBhcmUgbm90IHNpbXBseSB0b2tlbiB0eXBlIGNvZGVzOyB0aGV5Ci1yZXByZXNlbnQgdGhlIGVudGlyZSBzZXF1ZW5jZSBvZiB0ZXJtaW5hbCBhbmQgbm9udGVybWluYWwgc3ltYm9scyBhdCBvcgotbmVhciB0aGUgdG9wIG9mIHRoZSBzdGFjay4gIFRoZSBjdXJyZW50IHN0YXRlIGNvbGxlY3RzIGFsbCB0aGUgaW5mb3JtYXRpb24KLWFib3V0IHByZXZpb3VzIGlucHV0IHdoaWNoIGlzIHJlbGV2YW50IHRvIGRlY2lkaW5nIHdoYXQgdG8gZG8gbmV4dC4KLQotRWFjaCB0aW1lIGEgbG9vay1haGVhZCB0b2tlbiBpcyByZWFkLCB0aGUgY3VycmVudCBwYXJzZXIgc3RhdGUgdG9nZXRoZXIKLXdpdGggdGhlIHR5cGUgb2YgbG9vay1haGVhZCB0b2tlbiBhcmUgbG9va2VkIHVwIGluIGEgdGFibGUuICBUaGlzIHRhYmxlCi1lbnRyeSBjYW4gc2F5LCBgYFNoaWZ0IHRoZSBsb29rLWFoZWFkIHRva2VuLicnICBJbiB0aGlzIGNhc2UsIGl0IGFsc28KLXNwZWNpZmllcyB0aGUgbmV3IHBhcnNlciBzdGF0ZSwgd2hpY2ggaXMgcHVzaGVkIG9udG8gdGhlIHRvcCBvZiB0aGUKLXBhcnNlciBzdGFjay4gIE9yIGl0IGNhbiBzYXksIGBgUmVkdWNlIHVzaW5nIHJ1bGUgbnVtYmVyIEB2YXJ7bn0uJycKLVRoaXMgbWVhbnMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyIG9mIHRva2VucyBvciBncm91cGluZ3MgYXJlIHRha2VuIG9mZgotdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGFuZCByZXBsYWNlZCBieSBvbmUgZ3JvdXBpbmcuICBJbiBvdGhlciB3b3JkcywKLXRoYXQgbnVtYmVyIG9mIHN0YXRlcyBhcmUgcG9wcGVkIGZyb20gdGhlIHN0YWNrLCBhbmQgb25lIG5ldyBzdGF0ZSBpcwotcHVzaGVkLgotCi1UaGVyZSBpcyBvbmUgb3RoZXIgYWx0ZXJuYXRpdmU6IHRoZSB0YWJsZSBjYW4gc2F5IHRoYXQgdGhlIGxvb2stYWhlYWQgdG9rZW4KLWlzIGVycm9uZW91cyBpbiB0aGUgY3VycmVudCBzdGF0ZS4gIFRoaXMgY2F1c2VzIGVycm9yIHByb2Nlc3NpbmcgdG8gYmVnaW4KLShAcHhyZWZ7RXJyb3IgUmVjb3Zlcnl9KS4KLQotQG5vZGUgUmVkdWNlL1JlZHVjZQotQHNlY3Rpb24gUmVkdWNlL1JlZHVjZSBDb25mbGljdHMKLUBjaW5kZXggcmVkdWNlL3JlZHVjZSBjb25mbGljdAotQGNpbmRleCBjb25mbGljdHMsIHJlZHVjZS9yZWR1Y2UKLQotQSByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0IG9jY3VycyBpZiB0aGVyZSBhcmUgdHdvIG9yIG1vcmUgcnVsZXMgdGhhdCBhcHBseQotdG8gdGhlIHNhbWUgc2VxdWVuY2Ugb2YgaW5wdXQuICBUaGlzIHVzdWFsbHkgaW5kaWNhdGVzIGEgc2VyaW91cyBlcnJvcgotaW4gdGhlIGdyYW1tYXIuCi0KLUZvciBleGFtcGxlLCBoZXJlIGlzIGFuIGVycm9uZW91cyBhdHRlbXB0IHRvIGRlZmluZSBhIHNlcXVlbmNlCi1vZiB6ZXJvIG9yIG1vcmUgQGNvZGV7d29yZH0gZ3JvdXBpbmdzLgotCi1AZXhhbXBsZQotc2VxdWVuY2U6IC8qIGVtcHR5ICovCi0gICAgICAgICAgICAgICAgQHsgcHJpbnRmICgiZW1wdHkgc2VxdWVuY2VcbiIpOyBAfQotICAgICAgICB8IG1heWJld29yZAotICAgICAgICB8IHNlcXVlbmNlIHdvcmQKLSAgICAgICAgICAgICAgICBAeyBwcmludGYgKCJhZGRlZCB3b3JkICVzXG4iLCAkMik7IEB9Ci0gICAgICAgIDsKLQotbWF5YmV3b3JkOiAvKiBlbXB0eSAqLwotICAgICAgICAgICAgICAgIEB7IHByaW50ZiAoImVtcHR5IG1heWJld29yZFxuIik7IEB9Ci0gICAgICAgIHwgd29yZAotICAgICAgICAgICAgICAgIEB7IHByaW50ZiAoInNpbmdsZSB3b3JkICVzXG4iLCAkMSk7IEB9Ci0gICAgICAgIDsKLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLVRoZSBlcnJvciBpcyBhbiBhbWJpZ3VpdHk6IHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgd2F5IHRvIHBhcnNlIGEgc2luZ2xlCi1AY29kZXt3b3JkfSBpbnRvIGEgQGNvZGV7c2VxdWVuY2V9LiAgSXQgY291bGQgYmUgcmVkdWNlZCB0byBhCi1AY29kZXttYXliZXdvcmR9IGFuZCB0aGVuIGludG8gYSBAY29kZXtzZXF1ZW5jZX0gdmlhIHRoZSBzZWNvbmQgcnVsZS4KLUFsdGVybmF0aXZlbHksIG5vdGhpbmctYXQtYWxsIGNvdWxkIGJlIHJlZHVjZWQgaW50byBhIEBjb2Rle3NlcXVlbmNlfQotdmlhIHRoZSBmaXJzdCBydWxlLCBhbmQgdGhpcyBjb3VsZCBiZSBjb21iaW5lZCB3aXRoIHRoZSBAY29kZXt3b3JkfQotdXNpbmcgdGhlIHRoaXJkIHJ1bGUgZm9yIEBjb2Rle3NlcXVlbmNlfS4KLQotVGhlcmUgaXMgYWxzbyBtb3JlIHRoYW4gb25lIHdheSB0byByZWR1Y2Ugbm90aGluZy1hdC1hbGwgaW50byBhCi1AY29kZXtzZXF1ZW5jZX0uICBUaGlzIGNhbiBiZSBkb25lIGRpcmVjdGx5IHZpYSB0aGUgZmlyc3QgcnVsZSwKLW9yIGluZGlyZWN0bHkgdmlhIEBjb2Rle21heWJld29yZH0gYW5kIHRoZW4gdGhlIHNlY29uZCBydWxlLgotCi1Zb3UgbWlnaHQgdGhpbmsgdGhhdCB0aGlzIGlzIGEgZGlzdGluY3Rpb24gd2l0aG91dCBhIGRpZmZlcmVuY2UsIGJlY2F1c2UgaXQKLWRvZXMgbm90IGNoYW5nZSB3aGV0aGVyIGFueSBwYXJ0aWN1bGFyIGlucHV0IGlzIHZhbGlkIG9yIG5vdC4gIEJ1dCBpdCBkb2VzCi1hZmZlY3Qgd2hpY2ggYWN0aW9ucyBhcmUgcnVuLiAgT25lIHBhcnNpbmcgb3JkZXIgcnVucyB0aGUgc2Vjb25kIHJ1bGUncwotYWN0aW9uOyB0aGUgb3RoZXIgcnVucyB0aGUgZmlyc3QgcnVsZSdzIGFjdGlvbiBhbmQgdGhlIHRoaXJkIHJ1bGUncyBhY3Rpb24uCi1JbiB0aGlzIGV4YW1wbGUsIHRoZSBvdXRwdXQgb2YgdGhlIHByb2dyYW0gY2hhbmdlcy4KLQotQmlzb24gcmVzb2x2ZXMgYSByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0IGJ5IGNob29zaW5nIHRvIHVzZSB0aGUgcnVsZSB0aGF0Ci1hcHBlYXJzIGZpcnN0IGluIHRoZSBncmFtbWFyLCBidXQgaXQgaXMgdmVyeSByaXNreSB0byByZWx5IG9uIHRoaXMuICBFdmVyeQotcmVkdWNlL3JlZHVjZSBjb25mbGljdCBtdXN0IGJlIHN0dWRpZWQgYW5kIHVzdWFsbHkgZWxpbWluYXRlZC4gIEhlcmUgaXMgdGhlCi1wcm9wZXIgd2F5IHRvIGRlZmluZSBAY29kZXtzZXF1ZW5jZX06Ci0KLUBleGFtcGxlCi1zZXF1ZW5jZTogLyogZW1wdHkgKi8KLSAgICAgICAgICAgICAgICBAeyBwcmludGYgKCJlbXB0eSBzZXF1ZW5jZVxuIik7IEB9Ci0gICAgICAgIHwgc2VxdWVuY2Ugd29yZAotICAgICAgICAgICAgICAgIEB7IHByaW50ZiAoImFkZGVkIHdvcmQgJXNcbiIsICQyKTsgQH0KLSAgICAgICAgOwotQGVuZCBleGFtcGxlCi0KLUhlcmUgaXMgYW5vdGhlciBjb21tb24gZXJyb3IgdGhhdCB5aWVsZHMgYSByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0OgotCi1AZXhhbXBsZQotc2VxdWVuY2U6IC8qIGVtcHR5ICovCi0gICAgICAgIHwgc2VxdWVuY2Ugd29yZHMKLSAgICAgICAgfCBzZXF1ZW5jZSByZWRpcmVjdHMKLSAgICAgICAgOwotCi13b3JkczogICAgLyogZW1wdHkgKi8KLSAgICAgICAgfCB3b3JkcyB3b3JkCi0gICAgICAgIDsKLQotcmVkaXJlY3RzOi8qIGVtcHR5ICovCi0gICAgICAgIHwgcmVkaXJlY3RzIHJlZGlyZWN0Ci0gICAgICAgIDsKLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLVRoZSBpbnRlbnRpb24gaGVyZSBpcyB0byBkZWZpbmUgYSBzZXF1ZW5jZSB3aGljaCBjYW4gY29udGFpbiBlaXRoZXIKLUBjb2Rle3dvcmR9IG9yIEBjb2Rle3JlZGlyZWN0fSBncm91cGluZ3MuICBUaGUgaW5kaXZpZHVhbCBkZWZpbml0aW9ucyBvZgotQGNvZGV7c2VxdWVuY2V9LCBAY29kZXt3b3Jkc30gYW5kIEBjb2Rle3JlZGlyZWN0c30gYXJlIGVycm9yLWZyZWUsIGJ1dCB0aGUKLXRocmVlIHRvZ2V0aGVyIG1ha2UgYSBzdWJ0bGUgYW1iaWd1aXR5OiBldmVuIGFuIGVtcHR5IGlucHV0IGNhbiBiZSBwYXJzZWQKLWluIGluZmluaXRlbHkgbWFueSB3YXlzIQotCi1Db25zaWRlcjogbm90aGluZy1hdC1hbGwgY291bGQgYmUgYSBAY29kZXt3b3Jkc30uICBPciBpdCBjb3VsZCBiZSB0d28KLUBjb2Rle3dvcmRzfSBpbiBhIHJvdywgb3IgdGhyZWUsIG9yIGFueSBudW1iZXIuICBJdCBjb3VsZCBlcXVhbGx5IHdlbGwgYmUgYQotQGNvZGV7cmVkaXJlY3RzfSwgb3IgdHdvLCBvciBhbnkgbnVtYmVyLiAgT3IgaXQgY291bGQgYmUgYSBAY29kZXt3b3Jkc30KLWZvbGxvd2VkIGJ5IHRocmVlIEBjb2Rle3JlZGlyZWN0c30gYW5kIGFub3RoZXIgQGNvZGV7d29yZHN9LiAgQW5kIHNvIG9uLgotCi1IZXJlIGFyZSB0d28gd2F5cyB0byBjb3JyZWN0IHRoZXNlIHJ1bGVzLiAgRmlyc3QsIHRvIG1ha2UgaXQgYSBzaW5nbGUgbGV2ZWwKLW9mIHNlcXVlbmNlOgotCi1AZXhhbXBsZQotc2VxdWVuY2U6IC8qIGVtcHR5ICovCi0gICAgICAgIHwgc2VxdWVuY2Ugd29yZAotICAgICAgICB8IHNlcXVlbmNlIHJlZGlyZWN0Ci0gICAgICAgIDsKLUBlbmQgZXhhbXBsZQotCi1TZWNvbmQsIHRvIHByZXZlbnQgZWl0aGVyIGEgQGNvZGV7d29yZHN9IG9yIGEgQGNvZGV7cmVkaXJlY3RzfQotZnJvbSBiZWluZyBlbXB0eToKLQotQGV4YW1wbGUKLXNlcXVlbmNlOiAvKiBlbXB0eSAqLwotICAgICAgICB8IHNlcXVlbmNlIHdvcmRzCi0gICAgICAgIHwgc2VxdWVuY2UgcmVkaXJlY3RzCi0gICAgICAgIDsKLQotd29yZHM6ICAgIHdvcmQKLSAgICAgICAgfCB3b3JkcyB3b3JkCi0gICAgICAgIDsKLQotcmVkaXJlY3RzOnJlZGlyZWN0Ci0gICAgICAgIHwgcmVkaXJlY3RzIHJlZGlyZWN0Ci0gICAgICAgIDsKLUBlbmQgZXhhbXBsZQotCi1Abm9kZSBNeXN0ZXJ5IENvbmZsaWN0cwotQHNlY3Rpb24gTXlzdGVyaW91cyBSZWR1Y2UvUmVkdWNlIENvbmZsaWN0cwotCi1Tb21ldGltZXMgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMgY2FuIG9jY3VyIHRoYXQgZG9uJ3QgbG9vayB3YXJyYW50ZWQuCi1IZXJlIGlzIGFuIGV4YW1wbGU6Ci0KLUBleGFtcGxlCi1AZ3JvdXAKLSV0b2tlbiBJRAotCi0lJQotZGVmOiAgICBwYXJhbV9zcGVjIHJldHVybl9zcGVjICcsJwotICAgICAgICA7Ci1wYXJhbV9zcGVjOgotICAgICAgICAgICAgIHR5cGUKLSAgICAgICAgfCAgICBuYW1lX2xpc3QgJzonIHR5cGUKLSAgICAgICAgOwotQGVuZCBncm91cAotQGdyb3VwCi1yZXR1cm5fc3BlYzoKLSAgICAgICAgICAgICB0eXBlCi0gICAgICAgIHwgICAgbmFtZSAnOicgdHlwZQotICAgICAgICA7Ci1AZW5kIGdyb3VwCi1AZ3JvdXAKLXR5cGU6ICAgICAgICBJRAotICAgICAgICA7Ci1AZW5kIGdyb3VwCi1AZ3JvdXAKLW5hbWU6ICAgICAgICBJRAotICAgICAgICA7Ci1uYW1lX2xpc3Q6Ci0gICAgICAgICAgICAgbmFtZQotICAgICAgICB8ICAgIG5hbWUgJywnIG5hbWVfbGlzdAotICAgICAgICA7Ci1AZW5kIGdyb3VwCi1AZW5kIGV4YW1wbGUKLQotSXQgd291bGQgc2VlbSB0aGF0IHRoaXMgZ3JhbW1hciBjYW4gYmUgcGFyc2VkIHdpdGggb25seSBhIHNpbmdsZSB0b2tlbgotb2YgbG9vay1haGVhZDogd2hlbiBhIEBjb2Rle3BhcmFtX3NwZWN9IGlzIGJlaW5nIHJlYWQsIGFuIEBjb2Rle0lEfSBpcwotYSBAY29kZXtuYW1lfSBpZiBhIGNvbW1hIG9yIGNvbG9uIGZvbGxvd3MsIG9yIGEgQGNvZGV7dHlwZX0gaWYgYW5vdGhlcgotQGNvZGV7SUR9IGZvbGxvd3MuICBJbiBvdGhlciB3b3JkcywgdGhpcyBncmFtbWFyIGlzIEBhY3Jvbnlte0xSfSgxKS4KLQotQGNpbmRleCBAYWNyb255bXtMUn0oMSkKLUBjaW5kZXggQGFjcm9ueW17TEFMUn0oMSkKLUhvd2V2ZXIsIEJpc29uLCBsaWtlIG1vc3QgcGFyc2VyIGdlbmVyYXRvcnMsIGNhbm5vdCBhY3R1YWxseSBoYW5kbGUgYWxsCi1AYWNyb255bXtMUn0oMSkgZ3JhbW1hcnMuICBJbiB0aGlzIGdyYW1tYXIsIHR3byBjb250ZXh0cywgdGhhdCBhZnRlcgotYW4gQGNvZGV7SUR9Ci1hdCB0aGUgYmVnaW5uaW5nIG9mIGEgQGNvZGV7cGFyYW1fc3BlY30gYW5kIGxpa2V3aXNlIGF0IHRoZSBiZWdpbm5pbmcgb2YKLWEgQGNvZGV7cmV0dXJuX3NwZWN9LCBhcmUgc2ltaWxhciBlbm91Z2ggdGhhdCBCaXNvbiBhc3N1bWVzIHRoZXkgYXJlIHRoZQotc2FtZS4gIFRoZXkgYXBwZWFyIHNpbWlsYXIgYmVjYXVzZSB0aGUgc2FtZSBzZXQgb2YgcnVsZXMgd291bGQgYmUKLWFjdGl2ZS0tLXRoZSBydWxlIGZvciByZWR1Y2luZyB0byBhIEBjb2Rle25hbWV9IGFuZCB0aGF0IGZvciByZWR1Y2luZyB0bwotYSBAY29kZXt0eXBlfS4gIEJpc29uIGlzIHVuYWJsZSB0byBkZXRlcm1pbmUgYXQgdGhhdCBzdGFnZSBvZiBwcm9jZXNzaW5nCi10aGF0IHRoZSBydWxlcyB3b3VsZCByZXF1aXJlIGRpZmZlcmVudCBsb29rLWFoZWFkIHRva2VucyBpbiB0aGUgdHdvCi1jb250ZXh0cywgc28gaXQgbWFrZXMgYSBzaW5nbGUgcGFyc2VyIHN0YXRlIGZvciB0aGVtIGJvdGguICBDb21iaW5pbmcKLXRoZSB0d28gY29udGV4dHMgY2F1c2VzIGEgY29uZmxpY3QgbGF0ZXIuICBJbiBwYXJzZXIgdGVybWlub2xvZ3ksIHRoaXMKLW9jY3VycmVuY2UgbWVhbnMgdGhhdCB0aGUgZ3JhbW1hciBpcyBub3QgQGFjcm9ueW17TEFMUn0oMSkuCi0KLUluIGdlbmVyYWwsIGl0IGlzIGJldHRlciB0byBmaXggZGVmaWNpZW5jaWVzIHRoYW4gdG8gZG9jdW1lbnQgdGhlbS4gIEJ1dAotdGhpcyBwYXJ0aWN1bGFyIGRlZmljaWVuY3kgaXMgaW50cmluc2ljYWxseSBoYXJkIHRvIGZpeDsgcGFyc2VyCi1nZW5lcmF0b3JzIHRoYXQgY2FuIGhhbmRsZSBAYWNyb255bXtMUn0oMSkgZ3JhbW1hcnMgYXJlIGhhcmQgdG8gd3JpdGUKLWFuZCB0ZW5kIHRvCi1wcm9kdWNlIHBhcnNlcnMgdGhhdCBhcmUgdmVyeSBsYXJnZS4gIEluIHByYWN0aWNlLCBCaXNvbiBpcyBtb3JlIHVzZWZ1bAotYXMgaXQgaXMgbm93LgotCi1XaGVuIHRoZSBwcm9ibGVtIGFyaXNlcywgeW91IGNhbiBvZnRlbiBmaXggaXQgYnkgaWRlbnRpZnlpbmcgdGhlIHR3bwotcGFyc2VyIHN0YXRlcyB0aGF0IGFyZSBiZWluZyBjb25mdXNlZCwgYW5kIGFkZGluZyBzb21ldGhpbmcgdG8gbWFrZSB0aGVtCi1sb29rIGRpc3RpbmN0LiAgSW4gdGhlIGFib3ZlIGV4YW1wbGUsIGFkZGluZyBvbmUgcnVsZSB0bwotQGNvZGV7cmV0dXJuX3NwZWN9IGFzIGZvbGxvd3MgbWFrZXMgdGhlIHByb2JsZW0gZ28gYXdheToKLQotQGV4YW1wbGUKLUBncm91cAotJXRva2VuIEJPR1VTCi1AZG90c3t9Ci0lJQotQGRvdHN7fQotcmV0dXJuX3NwZWM6Ci0gICAgICAgICAgICAgdHlwZQotICAgICAgICB8ICAgIG5hbWUgJzonIHR5cGUKLSAgICAgICAgLyogVGhpcyBydWxlIGlzIG5ldmVyIHVzZWQuICAqLwotICAgICAgICB8ICAgIElEIEJPR1VTCi0gICAgICAgIDsKLUBlbmQgZ3JvdXAKLUBlbmQgZXhhbXBsZQotCi1UaGlzIGNvcnJlY3RzIHRoZSBwcm9ibGVtIGJlY2F1c2UgaXQgaW50cm9kdWNlcyB0aGUgcG9zc2liaWxpdHkgb2YgYW4KLWFkZGl0aW9uYWwgYWN0aXZlIHJ1bGUgaW4gdGhlIGNvbnRleHQgYWZ0ZXIgdGhlIEBjb2Rle0lEfSBhdCB0aGUgYmVnaW5uaW5nIG9mCi1AY29kZXtyZXR1cm5fc3BlY30uICBUaGlzIHJ1bGUgaXMgbm90IGFjdGl2ZSBpbiB0aGUgY29ycmVzcG9uZGluZyBjb250ZXh0Ci1pbiBhIEBjb2Rle3BhcmFtX3NwZWN9LCBzbyB0aGUgdHdvIGNvbnRleHRzIHJlY2VpdmUgZGlzdGluY3QgcGFyc2VyIHN0YXRlcy4KLUFzIGxvbmcgYXMgdGhlIHRva2VuIEBjb2Rle0JPR1VTfSBpcyBuZXZlciBnZW5lcmF0ZWQgYnkgQGNvZGV7eXlsZXh9LAotdGhlIGFkZGVkIHJ1bGUgY2Fubm90IGFsdGVyIHRoZSB3YXkgYWN0dWFsIGlucHV0IGlzIHBhcnNlZC4KLQotSW4gdGhpcyBwYXJ0aWN1bGFyIGV4YW1wbGUsIHRoZXJlIGlzIGFub3RoZXIgd2F5IHRvIHNvbHZlIHRoZSBwcm9ibGVtOgotcmV3cml0ZSB0aGUgcnVsZSBmb3IgQGNvZGV7cmV0dXJuX3NwZWN9IHRvIHVzZSBAY29kZXtJRH0gZGlyZWN0bHkKLWluc3RlYWQgb2YgdmlhIEBjb2Rle25hbWV9LiAgVGhpcyBhbHNvIGNhdXNlcyB0aGUgdHdvIGNvbmZ1c2luZwotY29udGV4dHMgdG8gaGF2ZSBkaWZmZXJlbnQgc2V0cyBvZiBhY3RpdmUgcnVsZXMsIGJlY2F1c2UgdGhlIG9uZSBmb3IKLUBjb2Rle3JldHVybl9zcGVjfSBhY3RpdmF0ZXMgdGhlIGFsdGVyZWQgcnVsZSBmb3IgQGNvZGV7cmV0dXJuX3NwZWN9Ci1yYXRoZXIgdGhhbiB0aGUgb25lIGZvciBAY29kZXtuYW1lfS4KLQotQGV4YW1wbGUKLXBhcmFtX3NwZWM6Ci0gICAgICAgICAgICAgdHlwZQotICAgICAgICB8ICAgIG5hbWVfbGlzdCAnOicgdHlwZQotICAgICAgICA7Ci1yZXR1cm5fc3BlYzoKLSAgICAgICAgICAgICB0eXBlCi0gICAgICAgIHwgICAgSUQgJzonIHR5cGUKLSAgICAgICAgOwotQGVuZCBleGFtcGxlCi0KLUZvciBhIG1vcmUgZGV0YWlsZWQgZXhwb3NpdGlvbiBvZiBAYWNyb255bXtMQUxSfSgxKSBwYXJzZXJzIGFuZCBwYXJzZXIKLWdlbmVyYXRvcnMsIHBsZWFzZSBzZWU6Ci1GcmFuayBEZVJlbWVyIGFuZCBUaG9tYXMgUGVubmVsbG8sIEVmZmljaWVudCBDb21wdXRhdGlvbiBvZgotQGFjcm9ueW17TEFMUn0oMSkgTG9vay1BaGVhZCBTZXRzLCBAY2l0ZXtAYWNyb255bXtBQ019IFRyYW5zYWN0aW9ucyBvbgotUHJvZ3JhbW1pbmcgTGFuZ3VhZ2VzIGFuZCBTeXN0ZW1zfSwgVm9sLkA6IDQsIE5vLkA6IDQgKE9jdG9iZXIgMTk4MiksCi1wcC5AOiA2MTUtLTY0OSBAdXJlZntodHRwOi8vZG9pLmFjbS5vcmcvMTAuMTE0NS82OTYyMi4zNTcxODd9LgotCi1Abm9kZSBHZW5lcmFsaXplZCBMUiBQYXJzaW5nCi1Ac2VjdGlvbiBHZW5lcmFsaXplZCBAYWNyb255bXtMUn0gKEBhY3Jvbnlte0dMUn0pIFBhcnNpbmcKLUBjaW5kZXggQGFjcm9ueW17R0xSfSBwYXJzaW5nCi1AY2luZGV4IGdlbmVyYWxpemVkIEBhY3Jvbnlte0xSfSAoQGFjcm9ueW17R0xSfSkgcGFyc2luZwotQGNpbmRleCBhbWJpZ3VvdXMgZ3JhbW1hcnMKLUBjaW5kZXggbm9uZGV0ZXJtaW5pc3RpYyBwYXJzaW5nCi0KLUJpc29uIHByb2R1Y2VzIEBlbXBoe2RldGVybWluaXN0aWN9IHBhcnNlcnMgdGhhdCBjaG9vc2UgdW5pcXVlbHkKLXdoZW4gdG8gcmVkdWNlIGFuZCB3aGljaCByZWR1Y3Rpb24gdG8gYXBwbHkKLWJhc2VkIG9uIGEgc3VtbWFyeSBvZiB0aGUgcHJlY2VkaW5nIGlucHV0IGFuZCBvbiBvbmUgZXh0cmEgdG9rZW4gb2YgbG9vay1haGVhZC4KLUFzIGEgcmVzdWx0LCBub3JtYWwgQmlzb24gaGFuZGxlcyBhIHByb3BlciBzdWJzZXQgb2YgdGhlIGZhbWlseSBvZgotY29udGV4dC1mcmVlIGxhbmd1YWdlcy4KLUFtYmlndW91cyBncmFtbWFycywgc2luY2UgdGhleSBoYXZlIHN0cmluZ3Mgd2l0aCBtb3JlIHRoYW4gb25lIHBvc3NpYmxlCi1zZXF1ZW5jZSBvZiByZWR1Y3Rpb25zIGNhbm5vdCBoYXZlIGRldGVybWluaXN0aWMgcGFyc2VycyBpbiB0aGlzIHNlbnNlLgotVGhlIHNhbWUgaXMgdHJ1ZSBvZiBsYW5ndWFnZXMgdGhhdCByZXF1aXJlIG1vcmUgdGhhbiBvbmUgc3ltYm9sIG9mCi1sb29rLWFoZWFkLCBzaW5jZSB0aGUgcGFyc2VyIGxhY2tzIHRoZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8gbWFrZSBhCi1kZWNpc2lvbiBhdCB0aGUgcG9pbnQgaXQgbXVzdCBiZSBtYWRlIGluIGEgc2hpZnQtcmVkdWNlIHBhcnNlci4KLUZpbmFsbHksIGFzIHByZXZpb3VzbHkgbWVudGlvbmVkIChAcHhyZWZ7TXlzdGVyeSBDb25mbGljdHN9KSwKLXRoZXJlIGFyZSBsYW5ndWFnZXMgd2hlcmUgQmlzb24ncyBwYXJ0aWN1bGFyIGNob2ljZSBvZiBob3cgdG8KLXN1bW1hcml6ZSB0aGUgaW5wdXQgc2VlbiBzbyBmYXIgbG9zZXMgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLgotCi1XaGVuIHlvdSB1c2UgdGhlIEBzYW1weyVnbHItcGFyc2VyfSBkZWNsYXJhdGlvbiBpbiB5b3VyIGdyYW1tYXIgZmlsZSwKLUJpc29uIGdlbmVyYXRlcyBhIHBhcnNlciB0aGF0IHVzZXMgYSBkaWZmZXJlbnQgYWxnb3JpdGhtLCBjYWxsZWQKLUdlbmVyYWxpemVkIEBhY3Jvbnlte0xSfSAob3IgQGFjcm9ueW17R0xSfSkuICBBIEJpc29uIEBhY3Jvbnlte0dMUn0KLXBhcnNlciB1c2VzIHRoZSBzYW1lIGJhc2ljCi1hbGdvcml0aG0gZm9yIHBhcnNpbmcgYXMgYW4gb3JkaW5hcnkgQmlzb24gcGFyc2VyLCBidXQgYmVoYXZlcwotZGlmZmVyZW50bHkgaW4gY2FzZXMgd2hlcmUgdGhlcmUgaXMgYSBzaGlmdC1yZWR1Y2UgY29uZmxpY3QgdGhhdCBoYXMgbm90Ci1iZWVuIHJlc29sdmVkIGJ5IHByZWNlZGVuY2UgcnVsZXMgKEBweHJlZntQcmVjZWRlbmNlfSkgb3IgYQotcmVkdWNlLXJlZHVjZSBjb25mbGljdC4gIFdoZW4gYSBAYWNyb255bXtHTFJ9IHBhcnNlciBlbmNvdW50ZXJzIHN1Y2ggYQotc2l0dWF0aW9uLCBpdAotZWZmZWN0aXZlbHkgQGVtcGh7c3BsaXRzfSBpbnRvIGEgc2V2ZXJhbCBwYXJzZXJzLCBvbmUgZm9yIGVhY2ggcG9zc2libGUKLXNoaWZ0IG9yIHJlZHVjdGlvbi4gIFRoZXNlIHBhcnNlcnMgdGhlbiBwcm9jZWVkIGFzIHVzdWFsLCBjb25zdW1pbmcKLXRva2VucyBpbiBsb2NrLXN0ZXAuICBTb21lIG9mIHRoZSBzdGFja3MgbWF5IGVuY291bnRlciBvdGhlciBjb25mbGljdHMKLWFuZCBzcGxpdCBmdXJ0aGVyLCB3aXRoIHRoZSByZXN1bHQgdGhhdCBpbnN0ZWFkIG9mIGEgc2VxdWVuY2Ugb2Ygc3RhdGVzLAotYSBCaXNvbiBAYWNyb255bXtHTFJ9IHBhcnNpbmcgc3RhY2sgaXMgd2hhdCBpcyBpbiBlZmZlY3QgYSB0cmVlIG9mIHN0YXRlcy4KLQotSW4gZWZmZWN0LCBlYWNoIHN0YWNrIHJlcHJlc2VudHMgYSBndWVzcyBhcyB0byB3aGF0IHRoZSBwcm9wZXIgcGFyc2UKLWlzLiAgQWRkaXRpb25hbCBpbnB1dCBtYXkgaW5kaWNhdGUgdGhhdCBhIGd1ZXNzIHdhcyB3cm9uZywgaW4gd2hpY2ggY2FzZQotdGhlIGFwcHJvcHJpYXRlIHN0YWNrIHNpbGVudGx5IGRpc2FwcGVhcnMuICBPdGhlcndpc2UsIHRoZSBzZW1hbnRpY3MKLWFjdGlvbnMgZ2VuZXJhdGVkIGluIGVhY2ggc3RhY2sgYXJlIHNhdmVkLCByYXRoZXIgdGhhbiBiZWluZyBleGVjdXRlZAotaW1tZWRpYXRlbHkuICBXaGVuIGEgc3RhY2sgZGlzYXBwZWFycywgaXRzIHNhdmVkIHNlbWFudGljIGFjdGlvbnMgbmV2ZXIKLWdldCBleGVjdXRlZC4gIFdoZW4gYSByZWR1Y3Rpb24gY2F1c2VzIHR3byBzdGFja3MgdG8gYmVjb21lIGVxdWl2YWxlbnQsCi10aGVpciBzZXRzIG9mIHNlbWFudGljIGFjdGlvbnMgYXJlIGJvdGggc2F2ZWQgd2l0aCB0aGUgc3RhdGUgdGhhdAotcmVzdWx0cyBmcm9tIHRoZSByZWR1Y3Rpb24uICBXZSBzYXkgdGhhdCB0d28gc3RhY2tzIGFyZSBlcXVpdmFsZW50Ci13aGVuIHRoZXkgYm90aCByZXByZXNlbnQgdGhlIHNhbWUgc2VxdWVuY2Ugb2Ygc3RhdGVzLAotYW5kIGVhY2ggcGFpciBvZiBjb3JyZXNwb25kaW5nIHN0YXRlcyByZXByZXNlbnRzIGEKLWdyYW1tYXIgc3ltYm9sIHRoYXQgcHJvZHVjZXMgdGhlIHNhbWUgc2VnbWVudCBvZiB0aGUgaW5wdXQgdG9rZW4KLXN0cmVhbS4KLQotV2hlbmV2ZXIgdGhlIHBhcnNlciBtYWtlcyBhIHRyYW5zaXRpb24gZnJvbSBoYXZpbmcgbXVsdGlwbGUKLXN0YXRlcyB0byBoYXZpbmcgb25lLCBpdCByZXZlcnRzIHRvIHRoZSBub3JtYWwgQGFjcm9ueW17TEFMUn0oMSkgcGFyc2luZwotYWxnb3JpdGhtLCBhZnRlciByZXNvbHZpbmcgYW5kIGV4ZWN1dGluZyB0aGUgc2F2ZWQtdXAgYWN0aW9ucy4KLUF0IHRoaXMgdHJhbnNpdGlvbiwgc29tZSBvZiB0aGUgc3RhdGVzIG9uIHRoZSBzdGFjayB3aWxsIGhhdmUgc2VtYW50aWMKLXZhbHVlcyB0aGF0IGFyZSBzZXRzIChhY3R1YWxseSBtdWx0aXNldHMpIG9mIHBvc3NpYmxlIGFjdGlvbnMuICBUaGUKLXBhcnNlciB0cmllcyB0byBwaWNrIG9uZSBvZiB0aGUgYWN0aW9ucyBieSBmaXJzdCBmaW5kaW5nIG9uZSB3aG9zZSBydWxlCi1oYXMgdGhlIGhpZ2hlc3QgZHluYW1pYyBwcmVjZWRlbmNlLCBhcyBzZXQgYnkgdGhlIEBzYW1weyVkcHJlY30KLWRlY2xhcmF0aW9uLiAgT3RoZXJ3aXNlLCBpZiB0aGUgYWx0ZXJuYXRpdmUgYWN0aW9ucyBhcmUgbm90IG9yZGVyZWQgYnkKLXByZWNlZGVuY2UsIGJ1dCB0aGVyZSB0aGUgc2FtZSBtZXJnaW5nIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGZvciBib3RoCi1ydWxlcyBieSB0aGUgQHNhbXB7JW1lcmdlfSBkZWNsYXJhdGlvbiwKLUJpc29uIHJlc29sdmVzIGFuZCBldmFsdWF0ZXMgYm90aCBhbmQgdGhlbiBjYWxscyB0aGUgbWVyZ2UgZnVuY3Rpb24gb24KLXRoZSByZXN1bHQuICBPdGhlcndpc2UsIGl0IHJlcG9ydHMgYW4gYW1iaWd1aXR5LgotCi1JdCBpcyBwb3NzaWJsZSB0byB1c2UgYSBkYXRhIHN0cnVjdHVyZSBmb3IgdGhlIEBhY3Jvbnlte0dMUn0gcGFyc2luZyB0cmVlIHRoYXQKLXBlcm1pdHMgdGhlIHByb2Nlc3Npbmcgb2YgYW55IEBhY3Jvbnlte0xBTFJ9KDEpIGdyYW1tYXIgaW4gbGluZWFyIHRpbWUgKGluIHRoZQotc2l6ZSBvZiB0aGUgaW5wdXQpLCBhbnkgdW5hbWJpZ3VvdXMgKG5vdCBuZWNlc3NhcmlseQotQGFjcm9ueW17TEFMUn0oMSkpIGdyYW1tYXIgaW4KLXF1YWRyYXRpYyB3b3JzdC1jYXNlIHRpbWUsIGFuZCBhbnkgZ2VuZXJhbCAocG9zc2libHkgYW1iaWd1b3VzKQotY29udGV4dC1mcmVlIGdyYW1tYXIgaW4gY3ViaWMgd29yc3QtY2FzZSB0aW1lLiAgSG93ZXZlciwgQmlzb24gY3VycmVudGx5Ci11c2VzIGEgc2ltcGxlciBkYXRhIHN0cnVjdHVyZSB0aGF0IHJlcXVpcmVzIHRpbWUgcHJvcG9ydGlvbmFsIHRvIHRoZQotbGVuZ3RoIG9mIHRoZSBpbnB1dCB0aW1lcyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc3RhY2tzIHJlcXVpcmVkIGZvciBhbnkKLXByZWZpeCBvZiB0aGUgaW5wdXQuICBUaHVzLCByZWFsbHkgYW1iaWd1b3VzIG9yIG5vbmRldGVybWluaXN0aWMKLWdyYW1tYXJzIGNhbiByZXF1aXJlIGV4cG9uZW50aWFsIHRpbWUgYW5kIHNwYWNlIHRvIHByb2Nlc3MuICBTdWNoIGJhZGx5Ci1iZWhhdmluZyBleGFtcGxlcywgaG93ZXZlciwgYXJlIG5vdCBnZW5lcmFsbHkgb2YgcHJhY3RpY2FsIGludGVyZXN0LgotVXN1YWxseSwgbm9uZGV0ZXJtaW5pc20gaW4gYSBncmFtbWFyIGlzIGxvY2FsLS0tdGhlIHBhcnNlciBpcyBgYGluCi1kb3VidCcnIG9ubHkgZm9yIGEgZmV3IHRva2VucyBhdCBhIHRpbWUuICBUaGVyZWZvcmUsIHRoZSBjdXJyZW50IGRhdGEKLXN0cnVjdHVyZSBzaG91bGQgZ2VuZXJhbGx5IGJlIGFkZXF1YXRlLiAgT24gQGFjcm9ueW17TEFMUn0oMSkgcG9ydGlvbnMgb2YgYQotZ3JhbW1hciwgaW4gcGFydGljdWxhciwgaXQgaXMgb25seSBzbGlnaHRseSBzbG93ZXIgdGhhbiB3aXRoIHRoZSBkZWZhdWx0Ci1CaXNvbiBwYXJzZXIuCi0KLUZvciBhIG1vcmUgZGV0YWlsZWQgZXhwb3NpdGlvbiBvZiBAYWNyb255bXtHTFJ9IHBhcnNlcnMsIHBsZWFzZSBzZWU6IEVsaXphYmV0aAotU2NvdHQsIEFkcmlhbiBKb2huc3RvbmUgYW5kIFNoYW1zYSBTYWRhZiBIdXNzYWluLCBUb21pdGEtU3R5bGUKLUdlbmVyYWxpc2VkIEBhY3Jvbnlte0xSfSBQYXJzZXJzLCBSb3lhbCBIb2xsb3dheSwgVW5pdmVyc2l0eSBvZgotTG9uZG9uLCBEZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UsIFRSLTAwLTEyLAotQHVyZWZ7aHR0cDovL3d3dy5jcy5yaHVsLmFjLnVrL3Jlc2VhcmNoL2xhbmd1YWdlcy9wdWJsaWNhdGlvbnMvdG9taXRhX3N0eWxlXzEucHN9LAotKDIwMDAtMTItMjQpLgotCi1Abm9kZSBNZW1vcnkgTWFuYWdlbWVudAotQHNlY3Rpb24gTWVtb3J5IE1hbmFnZW1lbnQsIGFuZCBIb3cgdG8gQXZvaWQgTWVtb3J5IEV4aGF1c3Rpb24KLUBjaW5kZXggbWVtb3J5IGV4aGF1c3Rpb24KLUBjaW5kZXggbWVtb3J5IG1hbmFnZW1lbnQKLUBjaW5kZXggc3RhY2sgb3ZlcmZsb3cKLUBjaW5kZXggcGFyc2VyIHN0YWNrIG92ZXJmbG93Ci1AY2luZGV4IG92ZXJmbG93IG9mIHBhcnNlciBzdGFjawotCi1UaGUgQmlzb24gcGFyc2VyIHN0YWNrIGNhbiBydW4gb3V0IG9mIG1lbW9yeSBpZiB0b28gbWFueSB0b2tlbnMgYXJlIHNoaWZ0ZWQgYW5kCi1ub3QgcmVkdWNlZC4gIFdoZW4gdGhpcyBoYXBwZW5zLCB0aGUgcGFyc2VyIGZ1bmN0aW9uIEBjb2Rle3l5cGFyc2V9Ci1jYWxscyBAY29kZXt5eWVycm9yfSBhbmQgdGhlbiByZXR1cm5zIDIuCi0KLUJlY2F1c2UgQmlzb24gcGFyc2VycyBoYXZlIGdyb3dpbmcgc3RhY2tzLCBoaXR0aW5nIHRoZSB1cHBlciBsaW1pdAotdXN1YWxseSByZXN1bHRzIGZyb20gdXNpbmcgYSByaWdodCByZWN1cnNpb24gaW5zdGVhZCBvZiBhIGxlZnQKLXJlY3Vyc2lvbiwgQHhyZWZ7UmVjdXJzaW9uLCAsUmVjdXJzaXZlIFJ1bGVzfS4KLQotQHZpbmRleCBZWU1BWERFUFRICi1CeSBkZWZpbmluZyB0aGUgbWFjcm8gQGNvZGV7WVlNQVhERVBUSH0sIHlvdSBjYW4gY29udHJvbCBob3cgZGVlcCB0aGUKLXBhcnNlciBzdGFjayBjYW4gYmVjb21lIGJlZm9yZSBtZW1vcnkgaXMgZXhoYXVzdGVkLiAgRGVmaW5lIHRoZQotbWFjcm8gd2l0aCBhIHZhbHVlIHRoYXQgaXMgYW4gaW50ZWdlci4gIFRoaXMgdmFsdWUgaXMgdGhlIG1heGltdW0gbnVtYmVyCi1vZiB0b2tlbnMgdGhhdCBjYW4gYmUgc2hpZnRlZCAoYW5kIG5vdCByZWR1Y2VkKSBiZWZvcmUgb3ZlcmZsb3cuCi0KLVRoZSBzdGFjayBzcGFjZSBhbGxvd2VkIGlzIG5vdCBuZWNlc3NhcmlseSBhbGxvY2F0ZWQuICBJZiB5b3Ugc3BlY2lmeSBhCi1sYXJnZSB2YWx1ZSBmb3IgQGNvZGV7WVlNQVhERVBUSH0sIHRoZSBwYXJzZXIgbm9ybWFsbHkgYWxsb2NhdGVzIGEgc21hbGwKLXN0YWNrIGF0IGZpcnN0LCBhbmQgdGhlbiBtYWtlcyBpdCBiaWdnZXIgYnkgc3RhZ2VzIGFzIG5lZWRlZC4gIFRoaXMKLWluY3JlYXNpbmcgYWxsb2NhdGlvbiBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgYW5kIHNpbGVudGx5LiAgVGhlcmVmb3JlLAoteW91IGRvIG5vdCBuZWVkIHRvIG1ha2UgQGNvZGV7WVlNQVhERVBUSH0gcGFpbmZ1bGx5IHNtYWxsIG1lcmVseSB0byBzYXZlCi1zcGFjZSBmb3Igb3JkaW5hcnkgaW5wdXRzIHRoYXQgZG8gbm90IG5lZWQgbXVjaCBzdGFjay4KLQotSG93ZXZlciwgZG8gbm90IGFsbG93IEBjb2Rle1lZTUFYREVQVEh9IHRvIGJlIGEgdmFsdWUgc28gbGFyZ2UgdGhhdAotYXJpdGhtZXRpYyBvdmVyZmxvdyBjb3VsZCBvY2N1ciB3aGVuIGNhbGN1bGF0aW5nIHRoZSBzaXplIG9mIHRoZSBzdGFjawotc3BhY2UuICBBbHNvLCBkbyBub3QgYWxsb3cgQGNvZGV7WVlNQVhERVBUSH0gdG8gYmUgbGVzcyB0aGFuCi1AY29kZXtZWUlOSVRERVBUSH0uCi0KLUBjaW5kZXggZGVmYXVsdCBzdGFjayBsaW1pdAotVGhlIGRlZmF1bHQgdmFsdWUgb2YgQGNvZGV7WVlNQVhERVBUSH0sIGlmIHlvdSBkbyBub3QgZGVmaW5lIGl0LCBpcwotMTAwMDAuCi0KLUB2aW5kZXggWVlJTklUREVQVEgKLVlvdSBjYW4gY29udHJvbCBob3cgbXVjaCBzdGFjayBpcyBhbGxvY2F0ZWQgaW5pdGlhbGx5IGJ5IGRlZmluaW5nIHRoZQotbWFjcm8gQGNvZGV7WVlJTklUREVQVEh9IHRvIGEgcG9zaXRpdmUgaW50ZWdlci4gIEZvciB0aGUgQwotQGFjcm9ueW17TEFMUn0oMSkgcGFyc2VyLCB0aGlzIHZhbHVlIG11c3QgYmUgYSBjb21waWxlLXRpbWUgY29uc3RhbnQKLXVubGVzcyB5b3UgYXJlIGFzc3VtaW5nIEM5OSBvciBzb21lIG90aGVyIHRhcmdldCBsYW5ndWFnZSBvciBjb21waWxlcgotdGhhdCBhbGxvd3MgdmFyaWFibGUtbGVuZ3RoIGFycmF5cy4gIFRoZSBkZWZhdWx0IGlzIDIwMC4KLQotRG8gbm90IGFsbG93IEBjb2Rle1lZSU5JVERFUFRIfSB0byBiZSBncmVhdGVyIHRoYW4gQGNvZGV7WVlNQVhERVBUSH0uCi0KLUBjIEZJWE1FOiBDKysgb3V0cHV0LgotQmVjYXVzZSBvZiBzZW1hbnRpY2FsIGRpZmZlcmVuY2VzIGJldHdlZW4gQyBhbmQgQysrLCB0aGUKLUBhY3Jvbnlte0xBTFJ9KDEpIHBhcnNlcnMgaW4gQyBwcm9kdWNlZCBieSBCaXNvbiBjYW5ub3QgZ3JvdyB3aGVuIGNvbXBpbGVkCi1ieSBDKysgY29tcGlsZXJzLiAgSW4gdGhpcyBwcmVjaXNlIGNhc2UgKGNvbXBpbGluZyBhIEMgcGFyc2VyIGFzIEMrKykgeW91IGFyZQotc3VnZ2VzdGVkIHRvIGdyb3cgQGNvZGV7WVlJTklUREVQVEh9LiAgVGhlIEJpc29uIG1haW50YWluZXJzIGhvcGUgdG8gZml4Ci10aGlzIGRlZmljaWVuY3kgaW4gYSBmdXR1cmUgcmVsZWFzZS4KLQotQG5vZGUgRXJyb3IgUmVjb3ZlcnkKLUBjaGFwdGVyIEVycm9yIFJlY292ZXJ5Ci1AY2luZGV4IGVycm9yIHJlY292ZXJ5Ci1AY2luZGV4IHJlY292ZXJ5IGZyb20gZXJyb3JzCi0KLUl0IGlzIG5vdCB1c3VhbGx5IGFjY2VwdGFibGUgdG8gaGF2ZSBhIHByb2dyYW0gdGVybWluYXRlIG9uIGEgc3ludGF4Ci1lcnJvci4gIEZvciBleGFtcGxlLCBhIGNvbXBpbGVyIHNob3VsZCByZWNvdmVyIHN1ZmZpY2llbnRseSB0byBwYXJzZSB0aGUKLXJlc3Qgb2YgdGhlIGlucHV0IGZpbGUgYW5kIGNoZWNrIGl0IGZvciBlcnJvcnM7IGEgY2FsY3VsYXRvciBzaG91bGQgYWNjZXB0Ci1hbm90aGVyIGV4cHJlc3Npb24uCi0KLUluIGEgc2ltcGxlIGludGVyYWN0aXZlIGNvbW1hbmQgcGFyc2VyIHdoZXJlIGVhY2ggaW5wdXQgaXMgb25lIGxpbmUsIGl0IG1heQotYmUgc3VmZmljaWVudCB0byBhbGxvdyBAY29kZXt5eXBhcnNlfSB0byByZXR1cm4gMSBvbiBlcnJvciBhbmQgaGF2ZSB0aGUKLWNhbGxlciBpZ25vcmUgdGhlIHJlc3Qgb2YgdGhlIGlucHV0IGxpbmUgd2hlbiB0aGF0IGhhcHBlbnMgKGFuZCB0aGVuIGNhbGwKLUBjb2Rle3l5cGFyc2V9IGFnYWluKS4gIEJ1dCB0aGlzIGlzIGluYWRlcXVhdGUgZm9yIGEgY29tcGlsZXIsIGJlY2F1c2UgaXQKLWZvcmdldHMgYWxsIHRoZSBzeW50YWN0aWMgY29udGV4dCBsZWFkaW5nIHVwIHRvIHRoZSBlcnJvci4gIEEgc3ludGF4IGVycm9yCi1kZWVwIHdpdGhpbiBhIGZ1bmN0aW9uIGluIHRoZSBjb21waWxlciBpbnB1dCBzaG91bGQgbm90IGNhdXNlIHRoZSBjb21waWxlcgotdG8gdHJlYXQgdGhlIGZvbGxvd2luZyBsaW5lIGxpa2UgdGhlIGJlZ2lubmluZyBvZiBhIHNvdXJjZSBmaWxlLgotCi1AZmluZGV4IGVycm9yCi1Zb3UgY2FuIGRlZmluZSBob3cgdG8gcmVjb3ZlciBmcm9tIGEgc3ludGF4IGVycm9yIGJ5IHdyaXRpbmcgcnVsZXMgdG8KLXJlY29nbml6ZSB0aGUgc3BlY2lhbCB0b2tlbiBAY29kZXtlcnJvcn0uICBUaGlzIGlzIGEgdGVybWluYWwgc3ltYm9sIHRoYXQKLWlzIGFsd2F5cyBkZWZpbmVkICh5b3UgbmVlZCBub3QgZGVjbGFyZSBpdCkgYW5kIHJlc2VydmVkIGZvciBlcnJvcgotaGFuZGxpbmcuICBUaGUgQmlzb24gcGFyc2VyIGdlbmVyYXRlcyBhbiBAY29kZXtlcnJvcn0gdG9rZW4gd2hlbmV2ZXIgYQotc3ludGF4IGVycm9yIGhhcHBlbnM7IGlmIHlvdSBoYXZlIHByb3ZpZGVkIGEgcnVsZSB0byByZWNvZ25pemUgdGhpcyB0b2tlbgotaW4gdGhlIGN1cnJlbnQgY29udGV4dCwgdGhlIHBhcnNlIGNhbiBjb250aW51ZS4KLQotRm9yIGV4YW1wbGU6Ci0KLUBleGFtcGxlCi1zdG1udHM6ICAvKiBlbXB0eSBzdHJpbmcgKi8KLSAgICAgICAgfCBzdG1udHMgJ1xuJwotICAgICAgICB8IHN0bW50cyBleHAgJ1xuJwotICAgICAgICB8IHN0bW50cyBlcnJvciAnXG4nCi1AZW5kIGV4YW1wbGUKLQotVGhlIGZvdXJ0aCBydWxlIGluIHRoaXMgZXhhbXBsZSBzYXlzIHRoYXQgYW4gZXJyb3IgZm9sbG93ZWQgYnkgYSBuZXdsaW5lCi1tYWtlcyBhIHZhbGlkIGFkZGl0aW9uIHRvIGFueSBAY29kZXtzdG1udHN9LgotCi1XaGF0IGhhcHBlbnMgaWYgYSBzeW50YXggZXJyb3Igb2NjdXJzIGluIHRoZSBtaWRkbGUgb2YgYW4gQGNvZGV7ZXhwfT8gIFRoZQotZXJyb3IgcmVjb3ZlcnkgcnVsZSwgaW50ZXJwcmV0ZWQgc3RyaWN0bHksIGFwcGxpZXMgdG8gdGhlIHByZWNpc2Ugc2VxdWVuY2UKLW9mIGEgQGNvZGV7c3RtbnRzfSwgYW4gQGNvZGV7ZXJyb3J9IGFuZCBhIG5ld2xpbmUuICBJZiBhbiBlcnJvciBvY2N1cnMgaW4KLXRoZSBtaWRkbGUgb2YgYW4gQGNvZGV7ZXhwfSwgdGhlcmUgd2lsbCBwcm9iYWJseSBiZSBzb21lIGFkZGl0aW9uYWwgdG9rZW5zCi1hbmQgc3ViZXhwcmVzc2lvbnMgb24gdGhlIHN0YWNrIGFmdGVyIHRoZSBsYXN0IEBjb2Rle3N0bW50c30sIGFuZCB0aGVyZQotd2lsbCBiZSB0b2tlbnMgdG8gcmVhZCBiZWZvcmUgdGhlIG5leHQgbmV3bGluZS4gIFNvIHRoZSBydWxlIGlzIG5vdAotYXBwbGljYWJsZSBpbiB0aGUgb3JkaW5hcnkgd2F5LgotCi1CdXQgQmlzb24gY2FuIGZvcmNlIHRoZSBzaXR1YXRpb24gdG8gZml0IHRoZSBydWxlLCBieSBkaXNjYXJkaW5nIHBhcnQgb2YKLXRoZSBzZW1hbnRpYyBjb250ZXh0IGFuZCBwYXJ0IG9mIHRoZSBpbnB1dC4gIEZpcnN0IGl0IGRpc2NhcmRzIHN0YXRlcwotYW5kIG9iamVjdHMgZnJvbSB0aGUgc3RhY2sgdW50aWwgaXQgZ2V0cyBiYWNrIHRvIGEgc3RhdGUgaW4gd2hpY2ggdGhlCi1AY29kZXtlcnJvcn0gdG9rZW4gaXMgYWNjZXB0YWJsZS4gIChUaGlzIG1lYW5zIHRoYXQgdGhlIHN1YmV4cHJlc3Npb25zCi1hbHJlYWR5IHBhcnNlZCBhcmUgZGlzY2FyZGVkLCBiYWNrIHRvIHRoZSBsYXN0IGNvbXBsZXRlIEBjb2Rle3N0bW50c30uKQotQXQgdGhpcyBwb2ludCB0aGUgQGNvZGV7ZXJyb3J9IHRva2VuIGNhbiBiZSBzaGlmdGVkLiAgVGhlbiwgaWYgdGhlIG9sZAotbG9vay1haGVhZCB0b2tlbiBpcyBub3QgYWNjZXB0YWJsZSB0byBiZSBzaGlmdGVkIG5leHQsIHRoZSBwYXJzZXIgcmVhZHMKLXRva2VucyBhbmQgZGlzY2FyZHMgdGhlbSB1bnRpbCBpdCBmaW5kcyBhIHRva2VuIHdoaWNoIGlzIGFjY2VwdGFibGUuICBJbgotdGhpcyBleGFtcGxlLCBCaXNvbiByZWFkcyBhbmQgZGlzY2FyZHMgaW5wdXQgdW50aWwgdGhlIG5leHQgbmV3bGluZSBzbwotdGhhdCB0aGUgZm91cnRoIHJ1bGUgY2FuIGFwcGx5LiAgTm90ZSB0aGF0IGRpc2NhcmRlZCBzeW1ib2xzIGFyZQotcG9zc2libGUgc291cmNlcyBvZiBtZW1vcnkgbGVha3MsIHNlZSBAcmVme0Rlc3RydWN0b3IgRGVjbCwgLCBGcmVlaW5nCi1EaXNjYXJkZWQgU3ltYm9sc30sIGZvciBhIG1lYW5zIHRvIHJlY2xhaW0gdGhpcyBtZW1vcnkuCi0KLVRoZSBjaG9pY2Ugb2YgZXJyb3IgcnVsZXMgaW4gdGhlIGdyYW1tYXIgaXMgYSBjaG9pY2Ugb2Ygc3RyYXRlZ2llcyBmb3IKLWVycm9yIHJlY292ZXJ5LiAgQSBzaW1wbGUgYW5kIHVzZWZ1bCBzdHJhdGVneSBpcyBzaW1wbHkgdG8gc2tpcCB0aGUgcmVzdCBvZgotdGhlIGN1cnJlbnQgaW5wdXQgbGluZSBvciBjdXJyZW50IHN0YXRlbWVudCBpZiBhbiBlcnJvciBpcyBkZXRlY3RlZDoKLQotQGV4YW1wbGUKLXN0bW50OiBlcnJvciAnOycgIC8qIE9uIGVycm9yLCBza2lwIHVudGlsICc7JyBpcyByZWFkLiAgKi8KLUBlbmQgZXhhbXBsZQotCi1JdCBpcyBhbHNvIHVzZWZ1bCB0byByZWNvdmVyIHRvIHRoZSBtYXRjaGluZyBjbG9zZS1kZWxpbWl0ZXIgb2YgYW4KLW9wZW5pbmctZGVsaW1pdGVyIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBwYXJzZWQuICBPdGhlcndpc2UgdGhlCi1jbG9zZS1kZWxpbWl0ZXIgd2lsbCBwcm9iYWJseSBhcHBlYXIgdG8gYmUgdW5tYXRjaGVkLCBhbmQgZ2VuZXJhdGUgYW5vdGhlciwKLXNwdXJpb3VzIGVycm9yIG1lc3NhZ2U6Ci0KLUBleGFtcGxlCi1wcmltYXJ5OiAgJygnIGV4cHIgJyknCi0gICAgICAgIHwgJygnIGVycm9yICcpJwotICAgICAgICBAZG90c3t9Ci0gICAgICAgIDsKLUBlbmQgZXhhbXBsZQotCi1FcnJvciByZWNvdmVyeSBzdHJhdGVnaWVzIGFyZSBuZWNlc3NhcmlseSBndWVzc2VzLiAgV2hlbiB0aGV5IGd1ZXNzIHdyb25nLAotb25lIHN5bnRheCBlcnJvciBvZnRlbiBsZWFkcyB0byBhbm90aGVyLiAgSW4gdGhlIGFib3ZlIGV4YW1wbGUsIHRoZSBlcnJvcgotcmVjb3ZlcnkgcnVsZSBndWVzc2VzIHRoYXQgYW4gZXJyb3IgaXMgZHVlIHRvIGJhZCBpbnB1dCB3aXRoaW4gb25lCi1AY29kZXtzdG1udH0uICBTdXBwb3NlIHRoYXQgaW5zdGVhZCBhIHNwdXJpb3VzIHNlbWljb2xvbiBpcyBpbnNlcnRlZCBpbiB0aGUKLW1pZGRsZSBvZiBhIHZhbGlkIEBjb2Rle3N0bW50fS4gIEFmdGVyIHRoZSBlcnJvciByZWNvdmVyeSBydWxlIHJlY292ZXJzCi1mcm9tIHRoZSBmaXJzdCBlcnJvciwgYW5vdGhlciBzeW50YXggZXJyb3Igd2lsbCBiZSBmb3VuZCBzdHJhaWdodGF3YXksCi1zaW5jZSB0aGUgdGV4dCBmb2xsb3dpbmcgdGhlIHNwdXJpb3VzIHNlbWljb2xvbiBpcyBhbHNvIGFuIGludmFsaWQKLUBjb2Rle3N0bW50fS4KLQotVG8gcHJldmVudCBhbiBvdXRwb3VyaW5nIG9mIGVycm9yIG1lc3NhZ2VzLCB0aGUgcGFyc2VyIHdpbGwgb3V0cHV0IG5vIGVycm9yCi1tZXNzYWdlIGZvciBhbm90aGVyIHN5bnRheCBlcnJvciB0aGF0IGhhcHBlbnMgc2hvcnRseSBhZnRlciB0aGUgZmlyc3Q7IG9ubHkKLWFmdGVyIHRocmVlIGNvbnNlY3V0aXZlIGlucHV0IHRva2VucyBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IHNoaWZ0ZWQgd2lsbAotZXJyb3IgbWVzc2FnZXMgcmVzdW1lLgotCi1Ob3RlIHRoYXQgcnVsZXMgd2hpY2ggYWNjZXB0IHRoZSBAY29kZXtlcnJvcn0gdG9rZW4gbWF5IGhhdmUgYWN0aW9ucywganVzdAotYXMgYW55IG90aGVyIHJ1bGVzIGNhbi4KLQotQGZpbmRleCB5eWVycm9rCi1Zb3UgY2FuIG1ha2UgZXJyb3IgbWVzc2FnZXMgcmVzdW1lIGltbWVkaWF0ZWx5IGJ5IHVzaW5nIHRoZSBtYWNybwotQGNvZGV7eXllcnJva30gaW4gYW4gYWN0aW9uLiAgSWYgeW91IGRvIHRoaXMgaW4gdGhlIGVycm9yIHJ1bGUncyBhY3Rpb24sIG5vCi1lcnJvciBtZXNzYWdlcyB3aWxsIGJlIHN1cHByZXNzZWQuICBUaGlzIG1hY3JvIHJlcXVpcmVzIG5vIGFyZ3VtZW50czsKLUBzYW1we3l5ZXJyb2s7fSBpcyBhIHZhbGlkIEMgc3RhdGVtZW50LgotCi1AZmluZGV4IHl5Y2xlYXJpbgotVGhlIHByZXZpb3VzIGxvb2stYWhlYWQgdG9rZW4gaXMgcmVhbmFseXplZCBpbW1lZGlhdGVseSBhZnRlciBhbiBlcnJvci4gIElmCi10aGlzIGlzIHVuYWNjZXB0YWJsZSwgdGhlbiB0aGUgbWFjcm8gQGNvZGV7eXljbGVhcmlufSBtYXkgYmUgdXNlZCB0byBjbGVhcgotdGhpcyB0b2tlbi4gIFdyaXRlIHRoZSBzdGF0ZW1lbnQgQHNhbXB7eXljbGVhcmluO30gaW4gdGhlIGVycm9yIHJ1bGUncwotYWN0aW9uLgotQHhyZWZ7QWN0aW9uIEZlYXR1cmVzLCAsU3BlY2lhbCBGZWF0dXJlcyBmb3IgVXNlIGluIEFjdGlvbnN9LgotCi1Gb3IgZXhhbXBsZSwgc3VwcG9zZSB0aGF0IG9uIGEgc3ludGF4IGVycm9yLCBhbiBlcnJvciBoYW5kbGluZyByb3V0aW5lIGlzCi1jYWxsZWQgdGhhdCBhZHZhbmNlcyB0aGUgaW5wdXQgc3RyZWFtIHRvIHNvbWUgcG9pbnQgd2hlcmUgcGFyc2luZyBzaG91bGQKLW9uY2UgYWdhaW4gY29tbWVuY2UuICBUaGUgbmV4dCBzeW1ib2wgcmV0dXJuZWQgYnkgdGhlIGxleGljYWwgc2Nhbm5lciBpcwotcHJvYmFibHkgY29ycmVjdC4gIFRoZSBwcmV2aW91cyBsb29rLWFoZWFkIHRva2VuIG91Z2h0IHRvIGJlIGRpc2NhcmRlZAotd2l0aCBAc2FtcHt5eWNsZWFyaW47fS4KLQotQHZpbmRleCBZWVJFQ09WRVJJTkcKLVRoZSBleHByZXNzaW9uIEBjb2Rle1lZUkVDT1ZFUklORyAoKX0geWllbGRzIDEgd2hlbiB0aGUgcGFyc2VyCi1pcyByZWNvdmVyaW5nIGZyb20gYSBzeW50YXggZXJyb3IsIGFuZCAwIG90aGVyd2lzZS4KLVN5bnRheCBlcnJvciBkaWFnbm9zdGljcyBhcmUgc3VwcHJlc3NlZCB3aGlsZSByZWNvdmVyaW5nIGZyb20gYSBzeW50YXgKLWVycm9yLgotCi1Abm9kZSBDb250ZXh0IERlcGVuZGVuY3kKLUBjaGFwdGVyIEhhbmRsaW5nIENvbnRleHQgRGVwZW5kZW5jaWVzCi0KLVRoZSBCaXNvbiBwYXJhZGlnbSBpcyB0byBwYXJzZSB0b2tlbnMgZmlyc3QsIHRoZW4gZ3JvdXAgdGhlbSBpbnRvIGxhcmdlcgotc3ludGFjdGljIHVuaXRzLiAgSW4gbWFueSBsYW5ndWFnZXMsIHRoZSBtZWFuaW5nIG9mIGEgdG9rZW4gaXMgYWZmZWN0ZWQgYnkKLWl0cyBjb250ZXh0LiAgQWx0aG91Z2ggdGhpcyB2aW9sYXRlcyB0aGUgQmlzb24gcGFyYWRpZ20sIGNlcnRhaW4gdGVjaG5pcXVlcwotKGtub3duIGFzIEBkZm57a2x1ZGdlc30pIG1heSBlbmFibGUgeW91IHRvIHdyaXRlIEJpc29uIHBhcnNlcnMgZm9yIHN1Y2gKLWxhbmd1YWdlcy4KLQotQG1lbnUKLSogU2VtYW50aWMgVG9rZW5zOjogICBUb2tlbiBwYXJzaW5nIGNhbiBkZXBlbmQgb24gdGhlIHNlbWFudGljIGNvbnRleHQuCi0qIExleGljYWwgVGllLWluczo6ICAgVG9rZW4gcGFyc2luZyBjYW4gZGVwZW5kIG9uIHRoZSBzeW50YWN0aWMgY29udGV4dC4KLSogVGllLWluIFJlY292ZXJ5OjogICBMZXhpY2FsIHRpZS1pbnMgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGhvdwotICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgcmVjb3ZlcnkgcnVsZXMgbXVzdCBiZSB3cml0dGVuLgotQGVuZCBtZW51Ci0KLShBY3R1YWxseSwgYGBrbHVkZ2UnJyBtZWFucyBhbnkgdGVjaG5pcXVlIHRoYXQgZ2V0cyBpdHMgam9iIGRvbmUgYnV0IGlzCi1uZWl0aGVyIGNsZWFuIG5vciByb2J1c3QuKQotCi1Abm9kZSBTZW1hbnRpYyBUb2tlbnMKLUBzZWN0aW9uIFNlbWFudGljIEluZm8gaW4gVG9rZW4gVHlwZXMKLQotVGhlIEMgbGFuZ3VhZ2UgaGFzIGEgY29udGV4dCBkZXBlbmRlbmN5OiB0aGUgd2F5IGFuIGlkZW50aWZpZXIgaXMgdXNlZAotZGVwZW5kcyBvbiB3aGF0IGl0cyBjdXJyZW50IG1lYW5pbmcgaXMuICBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhpczoKLQotQGV4YW1wbGUKLWZvbyAoeCk7Ci1AZW5kIGV4YW1wbGUKLQotVGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb24gY2FsbCBzdGF0ZW1lbnQsIGJ1dCBpZiBAY29kZXtmb299IGlzIGEgdHlwZWRlZgotbmFtZSwgdGhlbiB0aGlzIGlzIGFjdHVhbGx5IGEgZGVjbGFyYXRpb24gb2YgQGNvZGV7eH0uICBIb3cgY2FuIGEgQmlzb24KLXBhcnNlciBmb3IgQyBkZWNpZGUgaG93IHRvIHBhcnNlIHRoaXMgaW5wdXQ/Ci0KLVRoZSBtZXRob2QgdXNlZCBpbiBAYWNyb255bXtHTlV9IEMgaXMgdG8gaGF2ZSB0d28gZGlmZmVyZW50IHRva2VuIHR5cGVzLAotQGNvZGV7SURFTlRJRklFUn0gYW5kIEBjb2Rle1RZUEVOQU1FfS4gIFdoZW4gQGNvZGV7eXlsZXh9IGZpbmRzIGFuCi1pZGVudGlmaWVyLCBpdCBsb29rcyB1cCB0aGUgY3VycmVudCBkZWNsYXJhdGlvbiBvZiB0aGUgaWRlbnRpZmllciBpbiBvcmRlcgotdG8gZGVjaWRlIHdoaWNoIHRva2VuIHR5cGUgdG8gcmV0dXJuOiBAY29kZXtUWVBFTkFNRX0gaWYgdGhlIGlkZW50aWZpZXIgaXMKLWRlY2xhcmVkIGFzIGEgdHlwZWRlZiwgQGNvZGV7SURFTlRJRklFUn0gb3RoZXJ3aXNlLgotCi1UaGUgZ3JhbW1hciBydWxlcyBjYW4gdGhlbiBleHByZXNzIHRoZSBjb250ZXh0IGRlcGVuZGVuY3kgYnkgdGhlIGNob2ljZSBvZgotdG9rZW4gdHlwZSB0byByZWNvZ25pemUuICBAY29kZXtJREVOVElGSUVSfSBpcyBhY2NlcHRlZCBhcyBhbiBleHByZXNzaW9uLAotYnV0IEBjb2Rle1RZUEVOQU1FfSBpcyBub3QuICBAY29kZXtUWVBFTkFNRX0gY2FuIHN0YXJ0IGEgZGVjbGFyYXRpb24sIGJ1dAotQGNvZGV7SURFTlRJRklFUn0gY2Fubm90LiAgSW4gY29udGV4dHMgd2hlcmUgdGhlIG1lYW5pbmcgb2YgdGhlIGlkZW50aWZpZXIKLWlzIEBlbXBoe25vdH0gc2lnbmlmaWNhbnQsIHN1Y2ggYXMgaW4gZGVjbGFyYXRpb25zIHRoYXQgY2FuIHNoYWRvdyBhCi10eXBlZGVmIG5hbWUsIGVpdGhlciBAY29kZXtUWVBFTkFNRX0gb3IgQGNvZGV7SURFTlRJRklFUn0gaXMKLWFjY2VwdGVkLS0tdGhlcmUgaXMgb25lIHJ1bGUgZm9yIGVhY2ggb2YgdGhlIHR3byB0b2tlbiB0eXBlcy4KLQotVGhpcyB0ZWNobmlxdWUgaXMgc2ltcGxlIHRvIHVzZSBpZiB0aGUgZGVjaXNpb24gb2Ygd2hpY2gga2luZHMgb2YKLWlkZW50aWZpZXJzIHRvIGFsbG93IGlzIG1hZGUgYXQgYSBwbGFjZSBjbG9zZSB0byB3aGVyZSB0aGUgaWRlbnRpZmllciBpcwotcGFyc2VkLiAgQnV0IGluIEMgdGhpcyBpcyBub3QgYWx3YXlzIHNvOiBDIGFsbG93cyBhIGRlY2xhcmF0aW9uIHRvCi1yZWRlY2xhcmUgYSB0eXBlZGVmIG5hbWUgcHJvdmlkZWQgYW4gZXhwbGljaXQgdHlwZSBoYXMgYmVlbiBzcGVjaWZpZWQKLWVhcmxpZXI6Ci0KLUBleGFtcGxlCi10eXBlZGVmIGludCBmb28sIGJhcjsKLWludCBiYXogKHZvaWQpCi1AewotICBzdGF0aWMgYmFyIChiYXIpOyAgICAgIC8qIEBye3JlZGVjbGFyZSBAY29kZXtiYXJ9IGFzIHN0YXRpYyB2YXJpYWJsZX0gKi8KLSAgZXh0ZXJuIGZvbyBmb28gKGZvbyk7ICAvKiBAcntyZWRlY2xhcmUgQGNvZGV7Zm9vfSBhcyBmdW5jdGlvbn0gKi8KLSAgcmV0dXJuIGZvbyAoYmFyKTsKLUB9Ci1AZW5kIGV4YW1wbGUKLQotVW5mb3J0dW5hdGVseSwgdGhlIG5hbWUgYmVpbmcgZGVjbGFyZWQgaXMgc2VwYXJhdGVkIGZyb20gdGhlIGRlY2xhcmF0aW9uCi1jb25zdHJ1Y3QgaXRzZWxmIGJ5IGEgY29tcGxpY2F0ZWQgc3ludGFjdGljIHN0cnVjdHVyZS0tLXRoZSBgYGRlY2xhcmF0b3InJy4KLQotQXMgYSByZXN1bHQsIHBhcnQgb2YgdGhlIEJpc29uIHBhcnNlciBmb3IgQyBuZWVkcyB0byBiZSBkdXBsaWNhdGVkLCB3aXRoCi1hbGwgdGhlIG5vbnRlcm1pbmFsIG5hbWVzIGNoYW5nZWQ6IG9uY2UgZm9yIHBhcnNpbmcgYSBkZWNsYXJhdGlvbiBpbgotd2hpY2ggYSB0eXBlZGVmIG5hbWUgY2FuIGJlIHJlZGVmaW5lZCwgYW5kIG9uY2UgZm9yIHBhcnNpbmcgYQotZGVjbGFyYXRpb24gaW4gd2hpY2ggdGhhdCBjYW4ndCBiZSBkb25lLiAgSGVyZSBpcyBhIHBhcnQgb2YgdGhlCi1kdXBsaWNhdGlvbiwgd2l0aCBhY3Rpb25zIG9taXR0ZWQgZm9yIGJyZXZpdHk6Ci0KLUBleGFtcGxlCi1pbml0ZGNsOgotICAgICAgICAgIGRlY2xhcmF0b3IgbWF5YmVhc20gJz0nCi0gICAgICAgICAgaW5pdAotICAgICAgICB8IGRlY2xhcmF0b3IgbWF5YmVhc20KLSAgICAgICAgOwotCi1ub3R5cGVfaW5pdGRjbDoKLSAgICAgICAgICBub3R5cGVfZGVjbGFyYXRvciBtYXliZWFzbSAnPScKLSAgICAgICAgICBpbml0Ci0gICAgICAgIHwgbm90eXBlX2RlY2xhcmF0b3IgbWF5YmVhc20KLSAgICAgICAgOwotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotSGVyZSBAY29kZXtpbml0ZGNsfSBjYW4gcmVkZWNsYXJlIGEgdHlwZWRlZiBuYW1lLCBidXQgQGNvZGV7bm90eXBlX2luaXRkY2x9Ci1jYW5ub3QuICBUaGUgZGlzdGluY3Rpb24gYmV0d2VlbiBAY29kZXtkZWNsYXJhdG9yfSBhbmQKLUBjb2Rle25vdHlwZV9kZWNsYXJhdG9yfSBpcyB0aGUgc2FtZSBzb3J0IG9mIHRoaW5nLgotCi1UaGVyZSBpcyBzb21lIHNpbWlsYXJpdHkgYmV0d2VlbiB0aGlzIHRlY2huaXF1ZSBhbmQgYSBsZXhpY2FsIHRpZS1pbgotKGRlc2NyaWJlZCBuZXh0KSwgaW4gdGhhdCBpbmZvcm1hdGlvbiB3aGljaCBhbHRlcnMgdGhlIGxleGljYWwgYW5hbHlzaXMgaXMKLWNoYW5nZWQgZHVyaW5nIHBhcnNpbmcgYnkgb3RoZXIgcGFydHMgb2YgdGhlIHByb2dyYW0uICBUaGUgZGlmZmVyZW5jZSBpcwotaGVyZSB0aGUgaW5mb3JtYXRpb24gaXMgZ2xvYmFsLCBhbmQgaXMgdXNlZCBmb3Igb3RoZXIgcHVycG9zZXMgaW4gdGhlCi1wcm9ncmFtLiAgQSB0cnVlIGxleGljYWwgdGllLWluIGhhcyBhIHNwZWNpYWwtcHVycG9zZSBmbGFnIGNvbnRyb2xsZWQgYnkKLXRoZSBzeW50YWN0aWMgY29udGV4dC4KLQotQG5vZGUgTGV4aWNhbCBUaWUtaW5zCi1Ac2VjdGlvbiBMZXhpY2FsIFRpZS1pbnMKLUBjaW5kZXggbGV4aWNhbCB0aWUtaW4KLQotT25lIHdheSB0byBoYW5kbGUgY29udGV4dC1kZXBlbmRlbmN5IGlzIHRoZSBAZGZue2xleGljYWwgdGllLWlufTogYSBmbGFnCi13aGljaCBpcyBzZXQgYnkgQmlzb24gYWN0aW9ucywgd2hvc2UgcHVycG9zZSBpcyB0byBhbHRlciB0aGUgd2F5IHRva2VucyBhcmUKLXBhcnNlZC4KLQotRm9yIGV4YW1wbGUsIHN1cHBvc2Ugd2UgaGF2ZSBhIGxhbmd1YWdlIHZhZ3VlbHkgbGlrZSBDLCBidXQgd2l0aCBhIHNwZWNpYWwKLWNvbnN0cnVjdCBAc2FtcHtoZXggKEB2YXJ7aGV4LWV4cHJ9KX0uICBBZnRlciB0aGUga2V5d29yZCBAY29kZXtoZXh9IGNvbWVzCi1hbiBleHByZXNzaW9uIGluIHBhcmVudGhlc2VzIGluIHdoaWNoIGFsbCBpbnRlZ2VycyBhcmUgaGV4YWRlY2ltYWwuICBJbgotcGFydGljdWxhciwgdGhlIHRva2VuIEBzYW1we2ExYn0gbXVzdCBiZSB0cmVhdGVkIGFzIGFuIGludGVnZXIgcmF0aGVyIHRoYW4KLWFzIGFuIGlkZW50aWZpZXIgaWYgaXQgYXBwZWFycyBpbiB0aGF0IGNvbnRleHQuICBIZXJlIGlzIGhvdyB5b3UgY2FuIGRvIGl0OgotCi1AZXhhbXBsZQotQGdyb3VwCi0lQHsKLSAgaW50IGhleGZsYWc7Ci0gIGludCB5eWxleCAodm9pZCk7Ci0gIHZvaWQgeXllcnJvciAoY2hhciBjb25zdCAqKTsKLSVAfQotJSUKLUBkb3Rze30KLUBlbmQgZ3JvdXAKLUBncm91cAotZXhwcjogICBJREVOVElGSUVSCi0gICAgICAgIHwgY29uc3RhbnQKLSAgICAgICAgfCBIRVggJygnCi0gICAgICAgICAgICAgICAgQHsgaGV4ZmxhZyA9IDE7IEB9Ci0gICAgICAgICAgZXhwciAnKScKLSAgICAgICAgICAgICAgICBAeyBoZXhmbGFnID0gMDsKLSAgICAgICAgICAgICAgICAgICAkJCA9ICQ0OyBAfQotICAgICAgICB8IGV4cHIgJysnIGV4cHIKLSAgICAgICAgICAgICAgICBAeyAkJCA9IG1ha2Vfc3VtICgkMSwgJDMpOyBAfQotICAgICAgICBAZG90c3t9Ci0gICAgICAgIDsKLUBlbmQgZ3JvdXAKLQotQGdyb3VwCi1jb25zdGFudDoKLSAgICAgICAgICBJTlRFR0VSCi0gICAgICAgIHwgU1RSSU5HCi0gICAgICAgIDsKLUBlbmQgZ3JvdXAKLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLUhlcmUgd2UgYXNzdW1lIHRoYXQgQGNvZGV7eXlsZXh9IGxvb2tzIGF0IHRoZSB2YWx1ZSBvZiBAY29kZXtoZXhmbGFnfTsgd2hlbgotaXQgaXMgbm9uemVybywgYWxsIGludGVnZXJzIGFyZSBwYXJzZWQgaW4gaGV4YWRlY2ltYWwsIGFuZCB0b2tlbnMgc3RhcnRpbmcKLXdpdGggbGV0dGVycyBhcmUgcGFyc2VkIGFzIGludGVnZXJzIGlmIHBvc3NpYmxlLgotCi1UaGUgZGVjbGFyYXRpb24gb2YgQGNvZGV7aGV4ZmxhZ30gc2hvd24gaW4gdGhlIHByb2xvZ3VlIG9mIHRoZSBwYXJzZXIgZmlsZQotaXMgbmVlZGVkIHRvIG1ha2UgaXQgYWNjZXNzaWJsZSB0byB0aGUgYWN0aW9ucyAoQHB4cmVme1Byb2xvZ3VlLCAsVGhlIFByb2xvZ3VlfSkuCi1Zb3UgbXVzdCBhbHNvIHdyaXRlIHRoZSBjb2RlIGluIEBjb2Rle3l5bGV4fSB0byBvYmV5IHRoZSBmbGFnLgotCi1Abm9kZSBUaWUtaW4gUmVjb3ZlcnkKLUBzZWN0aW9uIExleGljYWwgVGllLWlucyBhbmQgRXJyb3IgUmVjb3ZlcnkKLQotTGV4aWNhbCB0aWUtaW5zIG1ha2Ugc3RyaWN0IGRlbWFuZHMgb24gYW55IGVycm9yIHJlY292ZXJ5IHJ1bGVzIHlvdSBoYXZlLgotQHhyZWZ7RXJyb3IgUmVjb3Zlcnl9LgotCi1UaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgdGhlIHB1cnBvc2Ugb2YgYW4gZXJyb3IgcmVjb3ZlcnkgcnVsZSBpcyB0bwotYWJvcnQgdGhlIHBhcnNpbmcgb2Ygb25lIGNvbnN0cnVjdCBhbmQgcmVzdW1lIGluIHNvbWUgbGFyZ2VyIGNvbnN0cnVjdC4KLUZvciBleGFtcGxlLCBpbiBDLWxpa2UgbGFuZ3VhZ2VzLCBhIHR5cGljYWwgZXJyb3IgcmVjb3ZlcnkgcnVsZSBpcyB0byBza2lwCi10b2tlbnMgdW50aWwgdGhlIG5leHQgc2VtaWNvbG9uLCBhbmQgdGhlbiBzdGFydCBhIG5ldyBzdGF0ZW1lbnQsIGxpa2UgdGhpczoKLQotQGV4YW1wbGUKLXN0bXQ6ICAgZXhwciAnOycKLSAgICAgICAgfCBJRiAnKCcgZXhwciAnKScgc3RtdCBAeyBAZG90c3t9IEB9Ci0gICAgICAgIEBkb3Rze30KLSAgICAgICAgZXJyb3IgJzsnCi0gICAgICAgICAgICAgICAgQHsgaGV4ZmxhZyA9IDA7IEB9Ci0gICAgICAgIDsKLUBlbmQgZXhhbXBsZQotCi1JZiB0aGVyZSBpcyBhIHN5bnRheCBlcnJvciBpbiB0aGUgbWlkZGxlIG9mIGEgQHNhbXB7aGV4IChAdmFye2V4cHJ9KX0KLWNvbnN0cnVjdCwgdGhpcyBlcnJvciBydWxlIHdpbGwgYXBwbHksIGFuZCB0aGVuIHRoZSBhY3Rpb24gZm9yIHRoZQotY29tcGxldGVkIEBzYW1we2hleCAoQHZhcntleHByfSl9IHdpbGwgbmV2ZXIgcnVuLiAgU28gQGNvZGV7aGV4ZmxhZ30gd291bGQKLXJlbWFpbiBzZXQgZm9yIHRoZSBlbnRpcmUgcmVzdCBvZiB0aGUgaW5wdXQsIG9yIHVudGlsIHRoZSBuZXh0IEBjb2Rle2hleH0KLWtleXdvcmQsIGNhdXNpbmcgaWRlbnRpZmllcnMgdG8gYmUgbWlzaW50ZXJwcmV0ZWQgYXMgaW50ZWdlcnMuCi0KLVRvIGF2b2lkIHRoaXMgcHJvYmxlbSB0aGUgZXJyb3IgcmVjb3ZlcnkgcnVsZSBpdHNlbGYgY2xlYXJzIEBjb2Rle2hleGZsYWd9LgotCi1UaGVyZSBtYXkgYWxzbyBiZSBhbiBlcnJvciByZWNvdmVyeSBydWxlIHRoYXQgd29ya3Mgd2l0aGluIGV4cHJlc3Npb25zLgotRm9yIGV4YW1wbGUsIHRoZXJlIGNvdWxkIGJlIGEgcnVsZSB3aGljaCBhcHBsaWVzIHdpdGhpbiBwYXJlbnRoZXNlcwotYW5kIHNraXBzIHRvIHRoZSBjbG9zZS1wYXJlbnRoZXNpczoKLQotQGV4YW1wbGUKLUBncm91cAotZXhwcjogICBAZG90c3t9Ci0gICAgICAgIHwgJygnIGV4cHIgJyknCi0gICAgICAgICAgICAgICAgQHsgJCQgPSAkMjsgQH0KLSAgICAgICAgfCAnKCcgZXJyb3IgJyknCi0gICAgICAgIEBkb3Rze30KLUBlbmQgZ3JvdXAKLUBlbmQgZXhhbXBsZQotCi1JZiB0aGlzIHJ1bGUgYWN0cyB3aXRoaW4gdGhlIEBjb2Rle2hleH0gY29uc3RydWN0LCBpdCBpcyBub3QgZ29pbmcgdG8gYWJvcnQKLXRoYXQgY29uc3RydWN0IChzaW5jZSBpdCBhcHBsaWVzIHRvIGFuIGlubmVyIGxldmVsIG9mIHBhcmVudGhlc2VzIHdpdGhpbgotdGhlIGNvbnN0cnVjdCkuICBUaGVyZWZvcmUsIGl0IHNob3VsZCBub3QgY2xlYXIgdGhlIGZsYWc6IHRoZSByZXN0IG9mCi10aGUgQGNvZGV7aGV4fSBjb25zdHJ1Y3Qgc2hvdWxkIGJlIHBhcnNlZCB3aXRoIHRoZSBmbGFnIHN0aWxsIGluIGVmZmVjdC4KLQotV2hhdCBpZiB0aGVyZSBpcyBhbiBlcnJvciByZWNvdmVyeSBydWxlIHdoaWNoIG1pZ2h0IGFib3J0IG91dCBvZiB0aGUKLUBjb2Rle2hleH0gY29uc3RydWN0IG9yIG1pZ2h0IG5vdCwgZGVwZW5kaW5nIG9uIGNpcmN1bXN0YW5jZXM/ICBUaGVyZSBpcyBubwotd2F5IHlvdSBjYW4gd3JpdGUgdGhlIGFjdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciBhIEBjb2Rle2hleH0gY29uc3RydWN0IGlzCi1iZWluZyBhYm9ydGVkIG9yIG5vdC4gIFNvIGlmIHlvdSBhcmUgdXNpbmcgYSBsZXhpY2FsIHRpZS1pbiwgeW91IGhhZCBiZXR0ZXIKLW1ha2Ugc3VyZSB5b3VyIGVycm9yIHJlY292ZXJ5IHJ1bGVzIGFyZSBub3Qgb2YgdGhpcyBraW5kLiAgRWFjaCBydWxlIG11c3QKLWJlIHN1Y2ggdGhhdCB5b3UgY2FuIGJlIHN1cmUgdGhhdCBpdCBhbHdheXMgd2lsbCwgb3IgYWx3YXlzIHdvbid0LCBoYXZlIHRvCi1jbGVhciB0aGUgZmxhZy4KLQotQGMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gRGVidWdnaW5nIFlvdXIgUGFyc2VyCi0KLUBub2RlIERlYnVnZ2luZwotQGNoYXB0ZXIgRGVidWdnaW5nIFlvdXIgUGFyc2VyCi0KLURldmVsb3BpbmcgYSBwYXJzZXIgY2FuIGJlIGEgY2hhbGxlbmdlLCBlc3BlY2lhbGx5IGlmIHlvdSBkb24ndAotdW5kZXJzdGFuZCB0aGUgYWxnb3JpdGhtIChAcHhyZWZ7QWxnb3JpdGhtLCAsVGhlIEJpc29uIFBhcnNlcgotQWxnb3JpdGhtfSkuICBFdmVuIHNvLCBzb21ldGltZXMgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgYXV0b21hdG9uCi1jYW4gaGVscCAoQHB4cmVme1VuZGVyc3RhbmRpbmcsICwgVW5kZXJzdGFuZGluZyBZb3VyIFBhcnNlcn0pLCBvcgotdHJhY2luZyB0aGUgZXhlY3V0aW9uIG9mIHRoZSBwYXJzZXIgY2FuIGdpdmUgc29tZSBpbnNpZ2h0IG9uIHdoeSBpdAotYmVoYXZlcyBpbXByb3Blcmx5IChAcHhyZWZ7VHJhY2luZywgLCBUcmFjaW5nIFlvdXIgUGFyc2VyfSkuCi0KLUBtZW51Ci0qIFVuZGVyc3RhbmRpbmc6OiAgICAgVW5kZXJzdGFuZGluZyB0aGUgc3RydWN0dXJlIG9mIHlvdXIgcGFyc2VyLgotKiBUcmFjaW5nOjogICAgICAgICAgIFRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBvZiB5b3VyIHBhcnNlci4KLUBlbmQgbWVudQotCi1Abm9kZSBVbmRlcnN0YW5kaW5nCi1Ac2VjdGlvbiBVbmRlcnN0YW5kaW5nIFlvdXIgUGFyc2VyCi0KLUFzIGRvY3VtZW50ZWQgZWxzZXdoZXJlIChAcHhyZWZ7QWxnb3JpdGhtLCAsVGhlIEJpc29uIFBhcnNlciBBbGdvcml0aG19KQotQmlzb24gcGFyc2VycyBhcmUgQGRmbntzaGlmdC9yZWR1Y2UgYXV0b21hdGF9LiAgSW4gc29tZSBjYXNlcyAobXVjaCBtb3JlCi1mcmVxdWVudCB0aGFuIG9uZSB3b3VsZCBob3BlKSwgbG9va2luZyBhdCB0aGlzIGF1dG9tYXRvbiBpcyByZXF1aXJlZCB0bwotdHVuZSBvciBzaW1wbHkgZml4IGEgcGFyc2VyLiAgQmlzb24gcHJvdmlkZXMgdHdvIGRpZmZlcmVudAotcmVwcmVzZW50YXRpb24gb2YgaXQsIGVpdGhlciB0ZXh0dWFsbHkgb3IgZ3JhcGhpY2FsbHkgKGFzIGEgQGFjcm9ueW17VkNHfQotZmlsZSkuCi0KLVRoZSB0ZXh0dWFsIGZpbGUgaXMgZ2VuZXJhdGVkIHdoZW4gdGhlIG9wdGlvbnMgQG9wdGlvbnstLXJlcG9ydH0gb3IKLUBvcHRpb257LS12ZXJib3NlfSBhcmUgc3BlY2lmaWVkLCBzZWUgQHhyZWZ7SW52b2NhdGlvbiwgLCBJbnZva2luZwotQmlzb259LiAgSXRzIG5hbWUgaXMgbWFkZSBieSByZW1vdmluZyBAc2FtcHsudGFiLmN9IG9yIEBzYW1wey5jfSBmcm9tCi10aGUgcGFyc2VyIG91dHB1dCBmaWxlIG5hbWUsIGFuZCBhZGRpbmcgQHNhbXB7Lm91dHB1dH0gaW5zdGVhZC4KLVRoZXJlZm9yZSwgaWYgdGhlIGlucHV0IGZpbGUgaXMgQGZpbGV7Zm9vLnl9LCB0aGVuIHRoZSBwYXJzZXIgZmlsZSBpcwotY2FsbGVkIEBmaWxle2Zvby50YWIuY30gYnkgZGVmYXVsdC4gIEFzIGEgY29uc2VxdWVuY2UsIHRoZSB2ZXJib3NlCi1vdXRwdXQgZmlsZSBpcyBjYWxsZWQgQGZpbGV7Zm9vLm91dHB1dH0uCi0KLVRoZSBmb2xsb3dpbmcgZ3JhbW1hciBmaWxlLCBAZmlsZXtjYWxjLnl9LCB3aWxsIGJlIHVzZWQgaW4gdGhlIHNlcXVlbDoKLQotQGV4YW1wbGUKLSV0b2tlbiBOVU0gU1RSCi0lbGVmdCAnKycgJy0nCi0lbGVmdCAnKicKLSUlCi1leHA6IGV4cCAnKycgZXhwCi0gICB8IGV4cCAnLScgZXhwCi0gICB8IGV4cCAnKicgZXhwCi0gICB8IGV4cCAnLycgZXhwCi0gICB8IE5VTQotICAgOwotdXNlbGVzczogU1RSOwotJSUKLUBlbmQgZXhhbXBsZQotCi1AY29tbWFuZHtiaXNvbn0gcmVwb3J0czoKLQotQGV4YW1wbGUKLWNhbGMueTogd2FybmluZzogMSB1c2VsZXNzIG5vbnRlcm1pbmFsIGFuZCAxIHVzZWxlc3MgcnVsZQotY2FsYy55OjExLjEtNzogd2FybmluZzogdXNlbGVzcyBub250ZXJtaW5hbDogdXNlbGVzcwotY2FsYy55OjExLjEwLTEyOiB3YXJuaW5nOiB1c2VsZXNzIHJ1bGU6IHVzZWxlc3M6IFNUUgotY2FsYy55OiBjb25mbGljdHM6IDcgc2hpZnQvcmVkdWNlCi1AZW5kIGV4YW1wbGUKLQotV2hlbiBnaXZlbiBAb3B0aW9uey0tcmVwb3J0PXN0YXRlfSwgaW4gYWRkaXRpb24gdG8gQGZpbGV7Y2FsYy50YWIuY30sIGl0Ci1jcmVhdGVzIGEgZmlsZSBAZmlsZXtjYWxjLm91dHB1dH0gd2l0aCBjb250ZW50cyBkZXRhaWxlZCBiZWxvdy4gIFRoZQotb3JkZXIgb2YgdGhlIG91dHB1dCBhbmQgdGhlIGV4YWN0IHByZXNlbnRhdGlvbiBtaWdodCB2YXJ5LCBidXQgdGhlCi1pbnRlcnByZXRhdGlvbiBpcyB0aGUgc2FtZS4KLQotVGhlIGZpcnN0IHNlY3Rpb24gaW5jbHVkZXMgZGV0YWlscyBvbiBjb25mbGljdHMgdGhhdCB3ZXJlIHNvbHZlZCB0aGFua3MKLXRvIHByZWNlZGVuY2UgYW5kL29yIGFzc29jaWF0aXZpdHk6Ci0KLUBleGFtcGxlCi1Db25mbGljdCBpbiBzdGF0ZSA4IGJldHdlZW4gcnVsZSAyIGFuZCB0b2tlbiAnKycgcmVzb2x2ZWQgYXMgcmVkdWNlLgotQ29uZmxpY3QgaW4gc3RhdGUgOCBiZXR3ZWVuIHJ1bGUgMiBhbmQgdG9rZW4gJy0nIHJlc29sdmVkIGFzIHJlZHVjZS4KLUNvbmZsaWN0IGluIHN0YXRlIDggYmV0d2VlbiBydWxlIDIgYW5kIHRva2VuICcqJyByZXNvbHZlZCBhcyBzaGlmdC4KLUBleGRlbnQgQGRvdHN7fQotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotVGhlIG5leHQgc2VjdGlvbiBsaXN0cyBzdGF0ZXMgdGhhdCBzdGlsbCBoYXZlIGNvbmZsaWN0cy4KLQotQGV4YW1wbGUKLVN0YXRlIDggY29uZmxpY3RzOiAxIHNoaWZ0L3JlZHVjZQotU3RhdGUgOSBjb25mbGljdHM6IDEgc2hpZnQvcmVkdWNlCi1TdGF0ZSAxMCBjb25mbGljdHM6IDEgc2hpZnQvcmVkdWNlCi1TdGF0ZSAxMSBjb25mbGljdHM6IDQgc2hpZnQvcmVkdWNlCi1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci1AY2luZGV4IHRva2VuLCB1c2VsZXNzCi1AY2luZGV4IHVzZWxlc3MgdG9rZW4KLUBjaW5kZXggbm9udGVybWluYWwsIHVzZWxlc3MKLUBjaW5kZXggdXNlbGVzcyBub250ZXJtaW5hbAotQGNpbmRleCBydWxlLCB1c2VsZXNzCi1AY2luZGV4IHVzZWxlc3MgcnVsZQotVGhlIG5leHQgc2VjdGlvbiByZXBvcnRzIHVzZWxlc3MgdG9rZW5zLCBub250ZXJtaW5hbCBhbmQgcnVsZXMuICBVc2VsZXNzCi1ub250ZXJtaW5hbHMgYW5kIHJ1bGVzIGFyZSByZW1vdmVkIGluIG9yZGVyIHRvIHByb2R1Y2UgYSBzbWFsbGVyIHBhcnNlciwKLWJ1dCB1c2VsZXNzIHRva2VucyBhcmUgcHJlc2VydmVkLCBzaW5jZSB0aGV5IG1pZ2h0IGJlIHVzZWQgYnkgdGhlCi1zY2FubmVyIChub3RlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYGB1c2VsZXNzJycgYW5kIGBgbm90IHVzZWQnJwotYmVsb3cpOgotCi1AZXhhbXBsZQotVXNlbGVzcyBub250ZXJtaW5hbHM6Ci0gICB1c2VsZXNzCi0KLVRlcm1pbmFscyB3aGljaCBhcmUgbm90IHVzZWQ6Ci0gICBTVFIKLQotVXNlbGVzcyBydWxlczoKLSM2ICAgICB1c2VsZXNzOiBTVFI7Ci1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci1UaGUgbmV4dCBzZWN0aW9uIHJlcHJvZHVjZXMgdGhlIGV4YWN0IGdyYW1tYXIgdGhhdCBCaXNvbiB1c2VkOgotCi1AZXhhbXBsZQotR3JhbW1hcgotCi0gIE51bWJlciwgTGluZSwgUnVsZQotICAgIDAgICA1ICRhY2NlcHQgLT4gZXhwICRlbmQKLSAgICAxICAgNSBleHAgLT4gZXhwICcrJyBleHAKLSAgICAyICAgNiBleHAgLT4gZXhwICctJyBleHAKLSAgICAzICAgNyBleHAgLT4gZXhwICcqJyBleHAKLSAgICA0ICAgOCBleHAgLT4gZXhwICcvJyBleHAKLSAgICA1ICAgOSBleHAgLT4gTlVNCi1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci1hbmQgcmVwb3J0cyB0aGUgdXNlcyBvZiB0aGUgc3ltYm9sczoKLQotQGV4YW1wbGUKLVRlcm1pbmFscywgd2l0aCBydWxlcyB3aGVyZSB0aGV5IGFwcGVhcgotCi0kZW5kICgwKSAwCi0nKicgKDQyKSAzCi0nKycgKDQzKSAxCi0nLScgKDQ1KSAyCi0nLycgKDQ3KSA0Ci1lcnJvciAoMjU2KQotTlVNICgyNTgpIDUKLQotTm9udGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyCi0KLSRhY2NlcHQgKDgpCi0gICAgb24gbGVmdDogMAotZXhwICg5KQotICAgIG9uIGxlZnQ6IDEgMiAzIDQgNSwgb24gcmlnaHQ6IDAgMSAyIDMgNAotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotQGNpbmRleCBpdGVtCi1AY2luZGV4IHBvaW50ZWQgcnVsZQotQGNpbmRleCBydWxlLCBwb2ludGVkCi1CaXNvbiB0aGVuIHByb2NlZWRzIG9udG8gdGhlIGF1dG9tYXRvbiBpdHNlbGYsIGRlc2NyaWJpbmcgZWFjaCBzdGF0ZQotd2l0aCBpdCBzZXQgb2YgQGRmbntpdGVtc30sIGFsc28ga25vd24gYXMgQGRmbntwb2ludGVkIHJ1bGVzfS4gIEVhY2gKLWl0ZW0gaXMgYSBwcm9kdWN0aW9uIHJ1bGUgdG9nZXRoZXIgd2l0aCBhIHBvaW50IChtYXJrZWQgYnkgQHNhbXB7Ln0pCi10aGF0IHRoZSBpbnB1dCBjdXJzb3IuCi0KLUBleGFtcGxlCi1zdGF0ZSAwCi0KLSAgICAkYWNjZXB0ICAtPiAgLiBleHAgJCAgIChydWxlIDApCi0KLSAgICBOVU0gICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEKLQotICAgIGV4cCAgICAgICAgIGdvIHRvIHN0YXRlIDIKLUBlbmQgZXhhbXBsZQotCi1UaGlzIHJlYWRzIGFzIGZvbGxvd3M6IGBgc3RhdGUgMCBjb3JyZXNwb25kcyB0byBiZWluZyBhdCB0aGUgdmVyeQotYmVnaW5uaW5nIG9mIHRoZSBwYXJzaW5nLCBpbiB0aGUgaW5pdGlhbCBydWxlLCByaWdodCBiZWZvcmUgdGhlIHN0YXJ0Ci1zeW1ib2wgKGhlcmUsIEBjb2Rle2V4cH0pLiAgV2hlbiB0aGUgcGFyc2VyIHJldHVybnMgdG8gdGhpcyBzdGF0ZSByaWdodAotYWZ0ZXIgaGF2aW5nIHJlZHVjZWQgYSBydWxlIHRoYXQgcHJvZHVjZWQgYW4gQGNvZGV7ZXhwfSwgdGhlIGNvbnRyb2wKLWZsb3cganVtcHMgdG8gc3RhdGUgMi4gIElmIHRoZXJlIGlzIG5vIHN1Y2ggdHJhbnNpdGlvbiBvbiBhIG5vbnRlcm1pbmFsCi1zeW1ib2wsIGFuZCB0aGUgbG9vay1haGVhZCBpcyBhIEBjb2Rle05VTX0sIHRoZW4gdGhpcyB0b2tlbiBpcyBzaGlmdGVkIG9uCi10aGUgcGFyc2Ugc3RhY2ssIGFuZCB0aGUgY29udHJvbCBmbG93IGp1bXBzIHRvIHN0YXRlIDEuICBBbnkgb3RoZXIKLWxvb2stYWhlYWQgdHJpZ2dlcnMgYSBzeW50YXggZXJyb3IuJycKLQotQGNpbmRleCBjb3JlLCBpdGVtIHNldAotQGNpbmRleCBpdGVtIHNldCBjb3JlCi1AY2luZGV4IGtlcm5lbCwgaXRlbSBzZXQKLUBjaW5kZXggaXRlbSBzZXQgY29yZQotRXZlbiB0aG91Z2ggdGhlIG9ubHkgYWN0aXZlIHJ1bGUgaW4gc3RhdGUgMCBzZWVtcyB0byBiZSBydWxlIDAsIHRoZQotcmVwb3J0IGxpc3RzIEBjb2Rle05VTX0gYXMgYSBsb29rLWFoZWFkIHRva2VuIGJlY2F1c2UgQGNvZGV7TlVNfSBjYW4gYmUKLWF0IHRoZSBiZWdpbm5pbmcgb2YgYW55IHJ1bGUgZGVyaXZpbmcgYW4gQGNvZGV7ZXhwfS4gIEJ5IGRlZmF1bHQgQmlzb24KLXJlcG9ydHMgdGhlIHNvLWNhbGxlZCBAZGZue2NvcmV9IG9yIEBkZm57a2VybmVsfSBvZiB0aGUgaXRlbSBzZXQsIGJ1dCBpZgoteW91IHdhbnQgdG8gc2VlIG1vcmUgZGV0YWlsIHlvdSBjYW4gaW52b2tlIEBjb21tYW5ke2Jpc29ufSB3aXRoCi1Ab3B0aW9uey0tcmVwb3J0PWl0ZW1zZXR9IHRvIGxpc3QgYWxsIHRoZSBpdGVtcywgaW5jbHVkZSB0aG9zZSB0aGF0IGNhbgotYmUgZGVyaXZlZDoKLQotQGV4YW1wbGUKLXN0YXRlIDAKLQotICAgICRhY2NlcHQgIC0+ICAuIGV4cCAkICAgKHJ1bGUgMCkKLSAgICBleHAgIC0+ICAuIGV4cCAnKycgZXhwICAgKHJ1bGUgMSkKLSAgICBleHAgIC0+ICAuIGV4cCAnLScgZXhwICAgKHJ1bGUgMikKLSAgICBleHAgIC0+ICAuIGV4cCAnKicgZXhwICAgKHJ1bGUgMykKLSAgICBleHAgIC0+ICAuIGV4cCAnLycgZXhwICAgKHJ1bGUgNCkKLSAgICBleHAgIC0+ICAuIE5VTSAgIChydWxlIDUpCi0KLSAgICBOVU0gICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEKLQotICAgIGV4cCAgICAgICAgIGdvIHRvIHN0YXRlIDIKLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLUluIHRoZSBzdGF0ZSAxLi4uCi0KLUBleGFtcGxlCi1zdGF0ZSAxCi0KLSAgICBleHAgIC0+ICBOVU0gLiAgIChydWxlIDUpCi0KLSAgICAkZGVmYXVsdCAgICByZWR1Y2UgdXNpbmcgcnVsZSA1IChleHApCi1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci10aGUgcnVsZSA1LCBAc2FtcHtleHA6IE5VTTt9LCBpcyBjb21wbGV0ZWQuICBXaGF0ZXZlciB0aGUgbG9vay1haGVhZCB0b2tlbgotKEBzYW1weyRkZWZhdWx0fSksIHRoZSBwYXJzZXIgd2lsbCByZWR1Y2UgaXQuICBJZiBpdCB3YXMgY29taW5nIGZyb20KLXN0YXRlIDAsIHRoZW4sIGFmdGVyIHRoaXMgcmVkdWN0aW9uIGl0IHdpbGwgcmV0dXJuIHRvIHN0YXRlIDAsIGFuZCB3aWxsCi1qdW1wIHRvIHN0YXRlIDIgKEBzYW1we2V4cDogZ28gdG8gc3RhdGUgMn0pLgotCi1AZXhhbXBsZQotc3RhdGUgMgotCi0gICAgJGFjY2VwdCAgLT4gIGV4cCAuICQgICAocnVsZSAwKQotICAgIGV4cCAgLT4gIGV4cCAuICcrJyBleHAgICAocnVsZSAxKQotICAgIGV4cCAgLT4gIGV4cCAuICctJyBleHAgICAocnVsZSAyKQotICAgIGV4cCAgLT4gIGV4cCAuICcqJyBleHAgICAocnVsZSAzKQotICAgIGV4cCAgLT4gIGV4cCAuICcvJyBleHAgICAocnVsZSA0KQotCi0gICAgJCAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAzCi0gICAgJysnICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA0Ci0gICAgJy0nICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1Ci0gICAgJyonICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA2Ci0gICAgJy8nICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA3Ci1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci1JbiBzdGF0ZSAyLCB0aGUgYXV0b21hdG9uIGNhbiBvbmx5IHNoaWZ0IGEgc3ltYm9sLiAgRm9yIGluc3RhbmNlLAotYmVjYXVzZSBvZiB0aGUgaXRlbSBAc2FtcHtleHAgLT4gZXhwIC4gJysnIGV4cH0sIGlmIHRoZSBsb29rLWFoZWFkIGlmCi1Ac2FtcHsrfSwgaXQgd2lsbCBiZSBzaGlmdGVkIG9uIHRoZSBwYXJzZSBzdGFjaywgYW5kIHRoZSBhdXRvbWF0b24KLWNvbnRyb2wgd2lsbCBqdW1wIHRvIHN0YXRlIDQsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGl0ZW0gQHNhbXB7ZXhwIC0+IGV4cAotJysnIC4gZXhwfS4gIFNpbmNlIHRoZXJlIGlzIG5vIGRlZmF1bHQgYWN0aW9uLCBhbnkgb3RoZXIgdG9rZW4gdGhhbgotdGhvc2UgbGlzdGVkIGFib3ZlIHdpbGwgdHJpZ2dlciBhIHN5bnRheCBlcnJvci4KLQotVGhlIHN0YXRlIDMgaXMgbmFtZWQgdGhlIEBkZm57ZmluYWwgc3RhdGV9LCBvciB0aGUgQGRmbnthY2NlcHRpbmcKLXN0YXRlfToKLQotQGV4YW1wbGUKLXN0YXRlIDMKLQotICAgICRhY2NlcHQgIC0+ICBleHAgJCAuICAgKHJ1bGUgMCkKLQotICAgICRkZWZhdWx0ICAgIGFjY2VwdAotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotdGhlIGluaXRpYWwgcnVsZSBpcyBjb21wbGV0ZWQgKHRoZSBzdGFydCBzeW1ib2wgYW5kIHRoZSBlbmQKLW9mIGlucHV0IHdlcmUgcmVhZCksIHRoZSBwYXJzaW5nIGV4aXRzIHN1Y2Nlc3NmdWxseS4KLQotVGhlIGludGVycHJldGF0aW9uIG9mIHN0YXRlcyA0IHRvIDcgaXMgc3RyYWlnaHRmb3J3YXJkLCBhbmQgaXMgbGVmdCB0bwotdGhlIHJlYWRlci4KLQotQGV4YW1wbGUKLXN0YXRlIDQKLQotICAgIGV4cCAgLT4gIGV4cCAnKycgLiBleHAgICAocnVsZSAxKQotCi0gICAgTlVNICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxCi0KLSAgICBleHAgICAgICAgICBnbyB0byBzdGF0ZSA4Ci0KLXN0YXRlIDUKLQotICAgIGV4cCAgLT4gIGV4cCAnLScgLiBleHAgICAocnVsZSAyKQotCi0gICAgTlVNICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxCi0KLSAgICBleHAgICAgICAgICBnbyB0byBzdGF0ZSA5Ci0KLXN0YXRlIDYKLQotICAgIGV4cCAgLT4gIGV4cCAnKicgLiBleHAgICAocnVsZSAzKQotCi0gICAgTlVNICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxCi0KLSAgICBleHAgICAgICAgICBnbyB0byBzdGF0ZSAxMAotCi1zdGF0ZSA3Ci0KLSAgICBleHAgIC0+ICBleHAgJy8nIC4gZXhwICAgKHJ1bGUgNCkKLQotICAgIE5VTSAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMQotCi0gICAgZXhwICAgICAgICAgZ28gdG8gc3RhdGUgMTEKLUBlbmQgZXhhbXBsZQotCi1BcyB3YXMgYW5ub3VuY2VkIGluIGJlZ2lubmluZyBvZiB0aGUgcmVwb3J0LCBAc2FtcHtTdGF0ZSA4IGNvbmZsaWN0czoKLTEgc2hpZnQvcmVkdWNlfToKLQotQGV4YW1wbGUKLXN0YXRlIDgKLQotICAgIGV4cCAgLT4gIGV4cCAuICcrJyBleHAgICAocnVsZSAxKQotICAgIGV4cCAgLT4gIGV4cCAnKycgZXhwIC4gICAocnVsZSAxKQotICAgIGV4cCAgLT4gIGV4cCAuICctJyBleHAgICAocnVsZSAyKQotICAgIGV4cCAgLT4gIGV4cCAuICcqJyBleHAgICAocnVsZSAzKQotICAgIGV4cCAgLT4gIGV4cCAuICcvJyBleHAgICAocnVsZSA0KQotCi0gICAgJyonICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA2Ci0gICAgJy8nICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA3Ci0KLSAgICAnLycgICAgICAgICBbcmVkdWNlIHVzaW5nIHJ1bGUgMSAoZXhwKV0KLSAgICAkZGVmYXVsdCAgICByZWR1Y2UgdXNpbmcgcnVsZSAxIChleHApCi1AZW5kIGV4YW1wbGUKLQotSW5kZWVkLCB0aGVyZSBhcmUgdHdvIGFjdGlvbnMgYXNzb2NpYXRlZCB0byB0aGUgbG9vay1haGVhZCBAc2FtcHsvfToKLWVpdGhlciBzaGlmdGluZyAoYW5kIGdvaW5nIHRvIHN0YXRlIDcpLCBvciByZWR1Y2luZyBydWxlIDEuICBUaGUKLWNvbmZsaWN0IG1lYW5zIHRoYXQgZWl0aGVyIHRoZSBncmFtbWFyIGlzIGFtYmlndW91cywgb3IgdGhlIHBhcnNlciBsYWNrcwotaW5mb3JtYXRpb24gdG8gbWFrZSB0aGUgcmlnaHQgZGVjaXNpb24uICBJbmRlZWQgdGhlIGdyYW1tYXIgaXMKLWFtYmlndW91cywgYXMsIHNpbmNlIHdlIGRpZCBub3Qgc3BlY2lmeSB0aGUgcHJlY2VkZW5jZSBvZiBAc2FtcHsvfSwgdGhlCi1zZW50ZW5jZSBAc2FtcHtOVU0gKyBOVU0gLyBOVU19IGNhbiBiZSBwYXJzZWQgYXMgQHNhbXB7TlVNICsgKE5VTSAvCi1OVU0pfSwgd2hpY2ggY29ycmVzcG9uZHMgdG8gc2hpZnRpbmcgQHNhbXB7L30sIG9yIGFzIEBzYW1weyhOVU0gKyBOVU0pIC8KLU5VTX0sIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHJlZHVjaW5nIHJ1bGUgMS4KLQotQmVjYXVzZSBpbiBAYWNyb255bXtMQUxSfSgxKSBwYXJzaW5nIGEgc2luZ2xlIGRlY2lzaW9uIGNhbiBiZSBtYWRlLCBCaXNvbgotYXJiaXRyYXJpbHkgY2hvc2UgdG8gZGlzYWJsZSB0aGUgcmVkdWN0aW9uLCBzZWUgQHJlZntTaGlmdC9SZWR1Y2UsICwKLVNoaWZ0L1JlZHVjZSBDb25mbGljdHN9LiAgRGlzY2FyZGVkIGFjdGlvbnMgYXJlIHJlcG9ydGVkIGluIGJldHdlZW4KLXNxdWFyZSBicmFja2V0cy4KLQotTm90ZSB0aGF0IGFsbCB0aGUgcHJldmlvdXMgc3RhdGVzIGhhZCBhIHNpbmdsZSBwb3NzaWJsZSBhY3Rpb246IGVpdGhlcgotc2hpZnRpbmcgdGhlIG5leHQgdG9rZW4gYW5kIGdvaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHN0YXRlLCBvcgotcmVkdWNpbmcgYSBzaW5nbGUgcnVsZS4gIEluIHRoZSBvdGhlciBjYXNlcywgaS5lLiwgd2hlbiBzaGlmdGluZwotQGVtcGh7YW5kfSByZWR1Y2luZyBpcyBwb3NzaWJsZSBvciB3aGVuIEBlbXBoe3NldmVyYWx9IHJlZHVjdGlvbnMgYXJlCi1wb3NzaWJsZSwgdGhlIGxvb2stYWhlYWQgaXMgcmVxdWlyZWQgdG8gc2VsZWN0IHRoZSBhY3Rpb24uICBTdGF0ZSA4IGlzCi1vbmUgc3VjaCBzdGF0ZTogaWYgdGhlIGxvb2stYWhlYWQgaXMgQHNhbXB7Kn0gb3IgQHNhbXB7L30gdGhlbiB0aGUgYWN0aW9uCi1pcyBzaGlmdGluZywgb3RoZXJ3aXNlIHRoZSBhY3Rpb24gaXMgcmVkdWNpbmcgcnVsZSAxLiAgSW4gb3RoZXIgd29yZHMsCi10aGUgZmlyc3QgdHdvIGl0ZW1zLCBjb3JyZXNwb25kaW5nIHRvIHJ1bGUgMSwgYXJlIG5vdCBlbGlnaWJsZSB3aGVuIHRoZQotbG9vay1haGVhZCB0b2tlbiBpcyBAc2FtcHsqfSwgc2luY2Ugd2Ugc3BlY2lmaWVkIHRoYXQgQHNhbXB7Kn0gaGFzIGhpZ2hlcgotcHJlY2VkZW5jZSB0aGFuIEBzYW1weyt9LiAgTW9yZSBnZW5lcmFsbHksIHNvbWUgaXRlbXMgYXJlIGVsaWdpYmxlIG9ubHkKLXdpdGggc29tZSBzZXQgb2YgcG9zc2libGUgbG9vay1haGVhZCB0b2tlbnMuICBXaGVuIHJ1biB3aXRoCi1Ab3B0aW9uey0tcmVwb3J0PWxvb2stYWhlYWR9LCBCaXNvbiBzcGVjaWZpZXMgdGhlc2UgbG9vay1haGVhZCB0b2tlbnM6Ci0KLUBleGFtcGxlCi1zdGF0ZSA4Ci0KLSAgICBleHAgIC0+ICBleHAgLiAnKycgZXhwICBbJCwgJysnLCAnLScsICcvJ10gICAocnVsZSAxKQotICAgIGV4cCAgLT4gIGV4cCAnKycgZXhwIC4gIFskLCAnKycsICctJywgJy8nXSAgIChydWxlIDEpCi0gICAgZXhwICAtPiAgZXhwIC4gJy0nIGV4cCAgIChydWxlIDIpCi0gICAgZXhwICAtPiAgZXhwIC4gJyonIGV4cCAgIChydWxlIDMpCi0gICAgZXhwICAtPiAgZXhwIC4gJy8nIGV4cCAgIChydWxlIDQpCi0KLSAgICAnKicgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDYKLSAgICAnLycgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDcKLQotICAgICcvJyAgICAgICAgIFtyZWR1Y2UgdXNpbmcgcnVsZSAxIChleHApXQotICAgICRkZWZhdWx0ICAgIHJlZHVjZSB1c2luZyBydWxlIDEgKGV4cCkKLUBlbmQgZXhhbXBsZQotCi1UaGUgcmVtYWluaW5nIHN0YXRlcyBhcmUgc2ltaWxhcjoKLQotQGV4YW1wbGUKLXN0YXRlIDkKLQotICAgIGV4cCAgLT4gIGV4cCAuICcrJyBleHAgICAocnVsZSAxKQotICAgIGV4cCAgLT4gIGV4cCAuICctJyBleHAgICAocnVsZSAyKQotICAgIGV4cCAgLT4gIGV4cCAnLScgZXhwIC4gICAocnVsZSAyKQotICAgIGV4cCAgLT4gIGV4cCAuICcqJyBleHAgICAocnVsZSAzKQotICAgIGV4cCAgLT4gIGV4cCAuICcvJyBleHAgICAocnVsZSA0KQotCi0gICAgJyonICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA2Ci0gICAgJy8nICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA3Ci0KLSAgICAnLycgICAgICAgICBbcmVkdWNlIHVzaW5nIHJ1bGUgMiAoZXhwKV0KLSAgICAkZGVmYXVsdCAgICByZWR1Y2UgdXNpbmcgcnVsZSAyIChleHApCi0KLXN0YXRlIDEwCi0KLSAgICBleHAgIC0+ICBleHAgLiAnKycgZXhwICAgKHJ1bGUgMSkKLSAgICBleHAgIC0+ICBleHAgLiAnLScgZXhwICAgKHJ1bGUgMikKLSAgICBleHAgIC0+ICBleHAgLiAnKicgZXhwICAgKHJ1bGUgMykKLSAgICBleHAgIC0+ICBleHAgJyonIGV4cCAuICAgKHJ1bGUgMykKLSAgICBleHAgIC0+ICBleHAgLiAnLycgZXhwICAgKHJ1bGUgNCkKLQotICAgICcvJyAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNwotCi0gICAgJy8nICAgICAgICAgW3JlZHVjZSB1c2luZyBydWxlIDMgKGV4cCldCi0gICAgJGRlZmF1bHQgICAgcmVkdWNlIHVzaW5nIHJ1bGUgMyAoZXhwKQotCi1zdGF0ZSAxMQotCi0gICAgZXhwICAtPiAgZXhwIC4gJysnIGV4cCAgIChydWxlIDEpCi0gICAgZXhwICAtPiAgZXhwIC4gJy0nIGV4cCAgIChydWxlIDIpCi0gICAgZXhwICAtPiAgZXhwIC4gJyonIGV4cCAgIChydWxlIDMpCi0gICAgZXhwICAtPiAgZXhwIC4gJy8nIGV4cCAgIChydWxlIDQpCi0gICAgZXhwICAtPiAgZXhwICcvJyBleHAgLiAgIChydWxlIDQpCi0KLSAgICAnKycgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDQKLSAgICAnLScgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDUKLSAgICAnKicgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDYKLSAgICAnLycgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDcKLQotICAgICcrJyAgICAgICAgIFtyZWR1Y2UgdXNpbmcgcnVsZSA0IChleHApXQotICAgICctJyAgICAgICAgIFtyZWR1Y2UgdXNpbmcgcnVsZSA0IChleHApXQotICAgICcqJyAgICAgICAgIFtyZWR1Y2UgdXNpbmcgcnVsZSA0IChleHApXQotICAgICcvJyAgICAgICAgIFtyZWR1Y2UgdXNpbmcgcnVsZSA0IChleHApXQotICAgICRkZWZhdWx0ICAgIHJlZHVjZSB1c2luZyBydWxlIDQgKGV4cCkKLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLU9ic2VydmUgdGhhdCBzdGF0ZSAxMSBjb250YWlucyBjb25mbGljdHMgbm90IG9ubHkgZHVlIHRvIHRoZSBsYWNrIG9mCi1wcmVjZWRlbmNlIG9mIEBzYW1wey99IHdpdGggcmVzcGVjdCB0byBAc2FtcHsrfSwgQHNhbXB7LX0sIGFuZAotQHNhbXB7Kn0sIGJ1dCBhbHNvIGJlY2F1c2UgdGhlCi1hc3NvY2lhdGl2aXR5IG9mIEBzYW1wey99IGlzIG5vdCBzcGVjaWZpZWQuCi0KLQotQG5vZGUgVHJhY2luZwotQHNlY3Rpb24gVHJhY2luZyBZb3VyIFBhcnNlcgotQGZpbmRleCB5eWRlYnVnCi1AY2luZGV4IGRlYnVnZ2luZwotQGNpbmRleCB0cmFjaW5nIHRoZSBwYXJzZXIKLQotSWYgYSBCaXNvbiBncmFtbWFyIGNvbXBpbGVzIHByb3Blcmx5IGJ1dCBkb2Vzbid0IGRvIHdoYXQgeW91IHdhbnQgd2hlbiBpdAotcnVucywgdGhlIEBjb2Rle3l5ZGVidWd9IHBhcnNlci10cmFjZSBmZWF0dXJlIGNhbiBoZWxwIHlvdSBmaWd1cmUgb3V0IHdoeS4KLQotVGhlcmUgYXJlIHNldmVyYWwgbWVhbnMgdG8gZW5hYmxlIGNvbXBpbGF0aW9uIG9mIHRyYWNlIGZhY2lsaXRpZXM6Ci0KLUB0YWJsZSBAYXNpcwotQGl0ZW0gdGhlIG1hY3JvIEBjb2Rle1lZREVCVUd9Ci1AZmluZGV4IFlZREVCVUcKLURlZmluZSB0aGUgbWFjcm8gQGNvZGV7WVlERUJVR30gdG8gYSBub256ZXJvIHZhbHVlIHdoZW4geW91IGNvbXBpbGUgdGhlCi1wYXJzZXIuICBUaGlzIGlzIGNvbXBsaWFudCB3aXRoIEBhY3Jvbnlte1BPU0lYfSBZYWNjLiAgWW91IGNvdWxkIHVzZQotQHNhbXB7LURZWURFQlVHPTF9IGFzIGEgY29tcGlsZXIgb3B0aW9uIG9yIHlvdSBjb3VsZCBwdXQgQHNhbXB7I2RlZmluZQotWVlERUJVRyAxfSBpbiB0aGUgcHJvbG9ndWUgb2YgdGhlIGdyYW1tYXIgZmlsZSAoQHB4cmVme1Byb2xvZ3VlLCAsIFRoZQotUHJvbG9ndWV9KS4KLQotQGl0ZW0gdGhlIG9wdGlvbiBAb3B0aW9uey10fSwgQG9wdGlvbnstLWRlYnVnfQotVXNlIHRoZSBAc2FtcHstdH0gb3B0aW9uIHdoZW4geW91IHJ1biBCaXNvbiAoQHB4cmVme0ludm9jYXRpb24sCi0sSW52b2tpbmcgQmlzb259KS4gIFRoaXMgaXMgQGFjcm9ueW17UE9TSVh9IGNvbXBsaWFudCB0b28uCi0KLUBpdGVtIHRoZSBkaXJlY3RpdmUgQHNhbXB7JWRlYnVnfQotQGZpbmRleCAlZGVidWcKLUFkZCB0aGUgQGNvZGV7JWRlYnVnfSBkaXJlY3RpdmUgKEBweHJlZntEZWNsIFN1bW1hcnksICxCaXNvbgotRGVjbGFyYXRpb24gU3VtbWFyeX0pLiAgVGhpcyBpcyBhIEJpc29uIGV4dGVuc2lvbiwgd2hpY2ggd2lsbCBwcm92ZQotdXNlZnVsIHdoZW4gQmlzb24gd2lsbCBvdXRwdXQgcGFyc2VycyBmb3IgbGFuZ3VhZ2VzIHRoYXQgZG9uJ3QgdXNlIGEKLXByZXByb2Nlc3Nvci4gIFVubGVzcyBAYWNyb255bXtQT1NJWH0gYW5kIFlhY2MgcG9ydGFiaWxpdHkgbWF0dGVyIHRvCi15b3UsIHRoaXMgaXMKLXRoZSBwcmVmZXJyZWQgc29sdXRpb24uCi1AZW5kIHRhYmxlCi0KLVdlIHN1Z2dlc3QgdGhhdCB5b3UgYWx3YXlzIGVuYWJsZSB0aGUgZGVidWcgb3B0aW9uIHNvIHRoYXQgZGVidWdnaW5nIGlzCi1hbHdheXMgcG9zc2libGUuCi0KLVRoZSB0cmFjZSBmYWNpbGl0eSBvdXRwdXRzIG1lc3NhZ2VzIHdpdGggbWFjcm8gY2FsbHMgb2YgdGhlIGZvcm0KLUBjb2Rle1lZRlBSSU5URiAoc3RkZXJyLCBAdmFye2Zvcm1hdH0sIEB2YXJ7YXJnc30pfSB3aGVyZQotQHZhcntmb3JtYXR9IGFuZCBAdmFye2FyZ3N9IGFyZSB0aGUgdXN1YWwgQGNvZGV7cHJpbnRmfSBmb3JtYXQgYW5kCi1hcmd1bWVudHMuICBJZiB5b3UgZGVmaW5lIEBjb2Rle1lZREVCVUd9IHRvIGEgbm9uemVybyB2YWx1ZSBidXQgZG8gbm90Ci1kZWZpbmUgQGNvZGV7WVlGUFJJTlRGfSwgQGNvZGV7PHN0ZGlvLmg+fSBpcyBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkCi1hbmQgQGNvZGV7WVlQUklOVEZ9IGlzIGRlZmluZWQgdG8gQGNvZGV7ZnByaW50Zn0uCi0KLU9uY2UgeW91IGhhdmUgY29tcGlsZWQgdGhlIHByb2dyYW0gd2l0aCB0cmFjZSBmYWNpbGl0aWVzLCB0aGUgd2F5IHRvCi1yZXF1ZXN0IGEgdHJhY2UgaXMgdG8gc3RvcmUgYSBub256ZXJvIHZhbHVlIGluIHRoZSB2YXJpYWJsZSBAY29kZXt5eWRlYnVnfS4KLVlvdSBjYW4gZG8gdGhpcyBieSBtYWtpbmcgdGhlIEMgY29kZSBkbyBpdCAoaW4gQGNvZGV7bWFpbn0sIHBlcmhhcHMpLCBvcgoteW91IGNhbiBhbHRlciB0aGUgdmFsdWUgd2l0aCBhIEMgZGVidWdnZXIuCi0KLUVhY2ggc3RlcCB0YWtlbiBieSB0aGUgcGFyc2VyIHdoZW4gQGNvZGV7eXlkZWJ1Z30gaXMgbm9uemVybyBwcm9kdWNlcyBhCi1saW5lIG9yIHR3byBvZiB0cmFjZSBpbmZvcm1hdGlvbiwgd3JpdHRlbiBvbiBAY29kZXtzdGRlcnJ9LiAgVGhlIHRyYWNlCi1tZXNzYWdlcyB0ZWxsIHlvdSB0aGVzZSB0aGluZ3M6Ci0KLUBpdGVtaXplIEBidWxsZXQKLUBpdGVtCi1FYWNoIHRpbWUgdGhlIHBhcnNlciBjYWxscyBAY29kZXt5eWxleH0sIHdoYXQga2luZCBvZiB0b2tlbiB3YXMgcmVhZC4KLQotQGl0ZW0KLUVhY2ggdGltZSBhIHRva2VuIGlzIHNoaWZ0ZWQsIHRoZSBkZXB0aCBhbmQgY29tcGxldGUgY29udGVudHMgb2YgdGhlCi1zdGF0ZSBzdGFjayAoQHB4cmVme1BhcnNlciBTdGF0ZXN9KS4KLQotQGl0ZW0KLUVhY2ggdGltZSBhIHJ1bGUgaXMgcmVkdWNlZCwgd2hpY2ggcnVsZSBpdCBpcywgYW5kIHRoZSBjb21wbGV0ZSBjb250ZW50cwotb2YgdGhlIHN0YXRlIHN0YWNrIGFmdGVyd2FyZC4KLUBlbmQgaXRlbWl6ZQotCi1UbyBtYWtlIHNlbnNlIG9mIHRoaXMgaW5mb3JtYXRpb24sIGl0IGhlbHBzIHRvIHJlZmVyIHRvIHRoZSBsaXN0aW5nIGZpbGUKLXByb2R1Y2VkIGJ5IHRoZSBCaXNvbiBAc2FtcHstdn0gb3B0aW9uIChAcHhyZWZ7SW52b2NhdGlvbiwgLEludm9raW5nCi1CaXNvbn0pLiAgVGhpcyBmaWxlIHNob3dzIHRoZSBtZWFuaW5nIG9mIGVhY2ggc3RhdGUgaW4gdGVybXMgb2YKLXBvc2l0aW9ucyBpbiB2YXJpb3VzIHJ1bGVzLCBhbmQgYWxzbyB3aGF0IGVhY2ggc3RhdGUgd2lsbCBkbyB3aXRoIGVhY2gKLXBvc3NpYmxlIGlucHV0IHRva2VuLiAgQXMgeW91IHJlYWQgdGhlIHN1Y2Nlc3NpdmUgdHJhY2UgbWVzc2FnZXMsIHlvdQotY2FuIHNlZSB0aGF0IHRoZSBwYXJzZXIgaXMgZnVuY3Rpb25pbmcgYWNjb3JkaW5nIHRvIGl0cyBzcGVjaWZpY2F0aW9uIGluCi10aGUgbGlzdGluZyBmaWxlLiAgRXZlbnR1YWxseSB5b3Ugd2lsbCBhcnJpdmUgYXQgdGhlIHBsYWNlIHdoZXJlCi1zb21ldGhpbmcgdW5kZXNpcmFibGUgaGFwcGVucywgYW5kIHlvdSB3aWxsIHNlZSB3aGljaCBwYXJ0cyBvZiB0aGUKLWdyYW1tYXIgYXJlIHRvIGJsYW1lLgotCi1UaGUgcGFyc2VyIGZpbGUgaXMgYSBDIHByb2dyYW0gYW5kIHlvdSBjYW4gdXNlIEMgZGVidWdnZXJzIG9uIGl0LCBidXQgaXQncwotbm90IGVhc3kgdG8gaW50ZXJwcmV0IHdoYXQgaXQgaXMgZG9pbmcuICBUaGUgcGFyc2VyIGZ1bmN0aW9uIGlzIGEKLWZpbml0ZS1zdGF0ZSBtYWNoaW5lIGludGVycHJldGVyLCBhbmQgYXNpZGUgZnJvbSB0aGUgYWN0aW9ucyBpdCBleGVjdXRlcwotdGhlIHNhbWUgY29kZSBvdmVyIGFuZCBvdmVyLiAgT25seSB0aGUgdmFsdWVzIG9mIHZhcmlhYmxlcyBzaG93IHdoZXJlIGluCi10aGUgZ3JhbW1hciBpdCBpcyB3b3JraW5nLgotCi1AZmluZGV4IFlZUFJJTlQKLVRoZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gbm9ybWFsbHkgZ2l2ZXMgdGhlIHRva2VuIHR5cGUgb2YgZWFjaCB0b2tlbgotcmVhZCwgYnV0IG5vdCBpdHMgc2VtYW50aWMgdmFsdWUuICBZb3UgY2FuIG9wdGlvbmFsbHkgZGVmaW5lIGEgbWFjcm8KLW5hbWVkIEBjb2Rle1lZUFJJTlR9IHRvIHByb3ZpZGUgYSB3YXkgdG8gcHJpbnQgdGhlIHZhbHVlLiAgSWYgeW91IGRlZmluZQotQGNvZGV7WVlQUklOVH0sIGl0IHNob3VsZCB0YWtlIHRocmVlIGFyZ3VtZW50cy4gIFRoZSBwYXJzZXIgd2lsbCBwYXNzIGEKLXN0YW5kYXJkIEkvTyBzdHJlYW0sIHRoZSBudW1lcmljIGNvZGUgZm9yIHRoZSB0b2tlbiB0eXBlLCBhbmQgdGhlIHRva2VuCi12YWx1ZSAoZnJvbSBAY29kZXt5eWx2YWx9KS4KLQotSGVyZSBpcyBhbiBleGFtcGxlIG9mIEBjb2Rle1lZUFJJTlR9IHN1aXRhYmxlIGZvciB0aGUgbXVsdGktZnVuY3Rpb24KLWNhbGN1bGF0b3IgKEBweHJlZntNZmNhbGMgRGVjbCwgLERlY2xhcmF0aW9ucyBmb3IgQGNvZGV7bWZjYWxjfX0pOgotCi1Ac21hbGxleGFtcGxlCi0lQHsKLSAgc3RhdGljIHZvaWQgcHJpbnRfdG9rZW5fdmFsdWUgKEZJTEUgKiwgaW50LCBZWVNUWVBFKTsKLSAgI2RlZmluZSBZWVBSSU5UKGZpbGUsIHR5cGUsIHZhbHVlKSBwcmludF90b2tlbl92YWx1ZSAoZmlsZSwgdHlwZSwgdmFsdWUpCi0lQH0KLQotQGRvdHN7fSAlJSBAZG90c3t9ICUlIEBkb3Rze30KLQotc3RhdGljIHZvaWQKLXByaW50X3Rva2VuX3ZhbHVlIChGSUxFICpmaWxlLCBpbnQgdHlwZSwgWVlTVFlQRSB2YWx1ZSkKLUB7Ci0gIGlmICh0eXBlID09IFZBUikKLSAgICBmcHJpbnRmIChmaWxlLCAiJXMiLCB2YWx1ZS50cHRyLT5uYW1lKTsKLSAgZWxzZSBpZiAodHlwZSA9PSBOVU0pCi0gICAgZnByaW50ZiAoZmlsZSwgIiVkIiwgdmFsdWUudmFsKTsKLUB9Ci1AZW5kIHNtYWxsZXhhbXBsZQotCi1AYyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEludm9raW5nIEJpc29uCi0KLUBub2RlIEludm9jYXRpb24KLUBjaGFwdGVyIEludm9raW5nIEJpc29uCi1AY2luZGV4IGludm9raW5nIEJpc29uCi1AY2luZGV4IEJpc29uIGludm9jYXRpb24KLUBjaW5kZXggb3B0aW9ucyBmb3IgaW52b2tpbmcgQmlzb24KLQotVGhlIHVzdWFsIHdheSB0byBpbnZva2UgQmlzb24gaXMgYXMgZm9sbG93czoKLQotQGV4YW1wbGUKLWJpc29uIEB2YXJ7aW5maWxlfQotQGVuZCBleGFtcGxlCi0KLUhlcmUgQHZhcntpbmZpbGV9IGlzIHRoZSBncmFtbWFyIGZpbGUgbmFtZSwgd2hpY2ggdXN1YWxseSBlbmRzIGluCi1Ac2FtcHsueX0uICBUaGUgcGFyc2VyIGZpbGUncyBuYW1lIGlzIG1hZGUgYnkgcmVwbGFjaW5nIHRoZSBAc2FtcHsueX0KLXdpdGggQHNhbXB7LnRhYi5jfSBhbmQgcmVtb3ZpbmcgYW55IGxlYWRpbmcgZGlyZWN0b3J5LiAgVGh1cywgdGhlCi1Ac2FtcHtiaXNvbiBmb28ueX0gZmlsZSBuYW1lIHlpZWxkcwotQGZpbGV7Zm9vLnRhYi5jfSwgYW5kIHRoZSBAc2FtcHtiaXNvbiBoYWNrL2Zvby55fSBmaWxlIG5hbWUgeWllbGRzCi1AZmlsZXtmb28udGFiLmN9LiAgSXQncyBhbHNvIHBvc3NpYmxlLCBpbiBjYXNlIHlvdSBhcmUgd3JpdGluZwotQysrIGNvZGUgaW5zdGVhZCBvZiBDIGluIHlvdXIgZ3JhbW1hciBmaWxlLCB0byBuYW1lIGl0IEBmaWxle2Zvby55cHB9Ci1vciBAZmlsZXtmb28ueSsrfS4gIFRoZW4sIHRoZSBvdXRwdXQgZmlsZXMgd2lsbCB0YWtlIGFuIGV4dGVuc2lvbiBsaWtlCi10aGUgZ2l2ZW4gb25lIGFzIGlucHV0IChyZXNwZWN0aXZlbHkgQGZpbGV7Zm9vLnRhYi5jcHB9IGFuZAotQGZpbGV7Zm9vLnRhYi5jKyt9KS4KLVRoaXMgZmVhdHVyZSB0YWtlcyBlZmZlY3Qgd2l0aCBhbGwgb3B0aW9ucyB0aGF0IG1hbmlwdWxhdGUgZmlsZSBuYW1lcyBsaWtlCi1Ac2FtcHstb30gb3IgQHNhbXB7LWR9LgotCi1Gb3IgZXhhbXBsZSA6Ci0KLUBleGFtcGxlCi1iaXNvbiAtZCBAdmFye2luZmlsZS55eHh9Ci1AZW5kIGV4YW1wbGUKLUBub2luZGVudAotd2lsbCBwcm9kdWNlIEBmaWxle2luZmlsZS50YWIuY3h4fSBhbmQgQGZpbGV7aW5maWxlLnRhYi5oeHh9LCBhbmQKLQotQGV4YW1wbGUKLWJpc29uIC1kIC1vIEB2YXJ7b3V0cHV0LmMrK30gQHZhcntpbmZpbGUueX0KLUBlbmQgZXhhbXBsZQotQG5vaW5kZW50Ci13aWxsIHByb2R1Y2UgQGZpbGV7b3V0cHV0LmMrK30gYW5kIEBmaWxle291dGZpbGUuaCsrfS4KLQotRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBAYWNyb255bXtQT1NJWH0sIHRoZSBzdGFuZGFyZCBCaXNvbgotZGlzdHJpYnV0aW9uIGFsc28gY29udGFpbnMgYSBzaGVsbCBzY3JpcHQgY2FsbGVkIEBjb21tYW5ke3lhY2N9IHRoYXQKLWludm9rZXMgQmlzb24gd2l0aCB0aGUgQG9wdGlvbnsteX0gb3B0aW9uLgotCi1AbWVudQotKiBCaXNvbiBPcHRpb25zOjogICAgIEFsbCB0aGUgb3B0aW9ucyBkZXNjcmliZWQgaW4gZGV0YWlsLAotICAgICAgICAgICAgICAgICAgICAgICAgaW4gYWxwaGFiZXRpY2FsIG9yZGVyIGJ5IHNob3J0IG9wdGlvbnMuCi0qIE9wdGlvbiBDcm9zcyBLZXk6OiAgQWxwaGFiZXRpY2FsIGxpc3Qgb2YgbG9uZyBvcHRpb25zLgotKiBZYWNjIExpYnJhcnk6OiAgICAgIFlhY2MtY29tcGF0aWJsZSBAY29kZXt5eWxleH0gYW5kIEBjb2Rle21haW59LgotQGVuZCBtZW51Ci0KLUBub2RlIEJpc29uIE9wdGlvbnMKLUBzZWN0aW9uIEJpc29uIE9wdGlvbnMKLQotQmlzb24gc3VwcG9ydHMgYm90aCB0cmFkaXRpb25hbCBzaW5nbGUtbGV0dGVyIG9wdGlvbnMgYW5kIG1uZW1vbmljIGxvbmcKLW9wdGlvbiBuYW1lcy4gIExvbmcgb3B0aW9uIG5hbWVzIGFyZSBpbmRpY2F0ZWQgd2l0aCBAc2FtcHstLX0gaW5zdGVhZCBvZgotQHNhbXB7LX0uICBBYmJyZXZpYXRpb25zIGZvciBvcHRpb24gbmFtZXMgYXJlIGFsbG93ZWQgYXMgbG9uZyBhcyB0aGV5Ci1hcmUgdW5pcXVlLiAgV2hlbiBhIGxvbmcgb3B0aW9uIHRha2VzIGFuIGFyZ3VtZW50LCBsaWtlCi1Ac2FtcHstLWZpbGUtcHJlZml4fSwgY29ubmVjdCB0aGUgb3B0aW9uIG5hbWUgYW5kIHRoZSBhcmd1bWVudCB3aXRoCi1Ac2FtcHs9fS4KLQotSGVyZSBpcyBhIGxpc3Qgb2Ygb3B0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHdpdGggQmlzb24sIGFscGhhYmV0aXplZCBieQotc2hvcnQgb3B0aW9uLiAgSXQgaXMgZm9sbG93ZWQgYnkgYSBjcm9zcyBrZXkgYWxwaGFiZXRpemVkIGJ5IGxvbmcKLW9wdGlvbi4KLQotQGMgUGxlYXNlLCBrZWVwIHRoaXMgb3JkZXJlZCBhcyBpbiBgYmlzb24gLS1oZWxwJy4KLUBub2luZGVudAotT3BlcmF0aW9ucyBtb2RlczoKLUB0YWJsZSBAb3B0aW9uCi1AaXRlbSAtaAotQGl0ZW14IC0taGVscAotUHJpbnQgYSBzdW1tYXJ5IG9mIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyB0byBCaXNvbiBhbmQgZXhpdC4KLQotQGl0ZW0gLVYKLUBpdGVteCAtLXZlcnNpb24KLVByaW50IHRoZSB2ZXJzaW9uIG51bWJlciBvZiBCaXNvbiBhbmQgZXhpdC4KLQotQGl0ZW0gLS1wcmludC1sb2NhbGVkaXIKLVByaW50IHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBsb2NhbGUtZGVwZW5kZW50IGRhdGEuCi0KLUBpdGVtIC15Ci1AaXRlbXggLS15YWNjCi1BY3QgbW9yZSBsaWtlIHRoZSB0cmFkaXRpb25hbCBZYWNjIGNvbW1hbmQuICBUaGlzIGNhbiBjYXVzZQotZGlmZmVyZW50IGRpYWdub3N0aWNzIHRvIGJlIGdlbmVyYXRlZCwgYW5kIG1heSBjaGFuZ2UgYmVoYXZpb3IgaW4KLW90aGVyIG1pbm9yIHdheXMuICBNb3N0IGltcG9ydGFudGx5LCBpbWl0YXRlIFlhY2MncyBvdXRwdXQKLWZpbGUgbmFtZSBjb252ZW50aW9ucywgc28gdGhhdCB0aGUgcGFyc2VyIG91dHB1dCBmaWxlIGlzIGNhbGxlZAotQGZpbGV7eS50YWIuY30sIGFuZCB0aGUgb3RoZXIgb3V0cHV0cyBhcmUgY2FsbGVkIEBmaWxle3kub3V0cHV0fSBhbmQKLUBmaWxle3kudGFiLmh9LiAgVGh1cywgdGhlIGZvbGxvd2luZyBzaGVsbCBzY3JpcHQgY2FuIHN1YnN0aXR1dGUKLWZvciBZYWNjLCBhbmQgdGhlIEJpc29uIGRpc3RyaWJ1dGlvbiBjb250YWlucyBzdWNoIGEgc2NyaXB0IGZvcgotY29tcGF0aWJpbGl0eSB3aXRoIEBhY3Jvbnlte1BPU0lYfToKLQotQGV4YW1wbGUKLSMhIC9iaW4vc2gKLWJpc29uIC15ICIkQEAiCi1AZW5kIGV4YW1wbGUKLQotVGhlIEBvcHRpb257LXl9L0BvcHRpb257LS15YWNjfSBvcHRpb24gaXMgaW50ZW5kZWQgZm9yIHVzZSB3aXRoCi10cmFkaXRpb25hbCBZYWNjIGdyYW1tYXJzLiAgSWYgeW91ciBncmFtbWFyIHVzZXMgYSBCaXNvbiBleHRlbnNpb24KLWxpa2UgQHNhbXB7JWdsci1wYXJzZXJ9LCBCaXNvbiBtaWdodCBub3QgYmUgWWFjYy1jb21wYXRpYmxlIGV2ZW4gaWYKLXRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZC4KLQotQGVuZCB0YWJsZQotCi1Abm9pbmRlbnQKLVR1bmluZyB0aGUgcGFyc2VyOgotCi1AdGFibGUgQG9wdGlvbgotQGl0ZW0gLVMgQHZhcntmaWxlfQotQGl0ZW14IC0tc2tlbGV0b249QHZhcntmaWxlfQotU3BlY2lmeSB0aGUgc2tlbGV0b24gdG8gdXNlLiAgWW91IHByb2JhYmx5IGRvbid0IG5lZWQgdGhpcyBvcHRpb24gdW5sZXNzCi15b3UgYXJlIGRldmVsb3BpbmcgQmlzb24uCi0KLUBpdGVtIC10Ci1AaXRlbXggLS1kZWJ1ZwotSW4gdGhlIHBhcnNlciBmaWxlLCBkZWZpbmUgdGhlIG1hY3JvIEBjb2Rle1lZREVCVUd9IHRvIDEgaWYgaXQgaXMgbm90Ci1hbHJlYWR5IGRlZmluZWQsIHNvIHRoYXQgdGhlIGRlYnVnZ2luZyBmYWNpbGl0aWVzIGFyZSBjb21waWxlZC4KLUB4cmVme1RyYWNpbmcsICxUcmFjaW5nIFlvdXIgUGFyc2VyfS4KLQotQGl0ZW0gLS1sb2NhdGlvbnMKLVByZXRlbmQgdGhhdCBAY29kZXslbG9jYXRpb25zfSB3YXMgc3BlY2lmaWVkLiAgQHhyZWZ7RGVjbCBTdW1tYXJ5fS4KLQotQGl0ZW0gLXAgQHZhcntwcmVmaXh9Ci1AaXRlbXggLS1uYW1lLXByZWZpeD1AdmFye3ByZWZpeH0KLVByZXRlbmQgdGhhdCBAY29kZXslbmFtZS1wcmVmaXg9IkB2YXJ7cHJlZml4fSJ9IHdhcyBzcGVjaWZpZWQuCi1AeHJlZntEZWNsIFN1bW1hcnl9LgotCi1AaXRlbSAtbAotQGl0ZW14IC0tbm8tbGluZXMKLURvbid0IHB1dCBhbnkgQGNvZGV7I2xpbmV9IHByZXByb2Nlc3NvciBjb21tYW5kcyBpbiB0aGUgcGFyc2VyIGZpbGUuCi1PcmRpbmFyaWx5IEJpc29uIHB1dHMgdGhlbSBpbiB0aGUgcGFyc2VyIGZpbGUgc28gdGhhdCB0aGUgQyBjb21waWxlcgotYW5kIGRlYnVnZ2VycyB3aWxsIGFzc29jaWF0ZSBlcnJvcnMgd2l0aCB5b3VyIHNvdXJjZSBmaWxlLCB0aGUKLWdyYW1tYXIgZmlsZS4gIFRoaXMgb3B0aW9uIGNhdXNlcyB0aGVtIHRvIGFzc29jaWF0ZSBlcnJvcnMgd2l0aCB0aGUKLXBhcnNlciBmaWxlLCB0cmVhdGluZyBpdCBhcyBhbiBpbmRlcGVuZGVudCBzb3VyY2UgZmlsZSBpbiBpdHMgb3duIHJpZ2h0LgotCi1AaXRlbSAtbgotQGl0ZW14IC0tbm8tcGFyc2VyCi1QcmV0ZW5kIHRoYXQgQGNvZGV7JW5vLXBhcnNlcn0gd2FzIHNwZWNpZmllZC4gIEB4cmVme0RlY2wgU3VtbWFyeX0uCi0KLUBpdGVtIC1rCi1AaXRlbXggLS10b2tlbi10YWJsZQotUHJldGVuZCB0aGF0IEBjb2RleyV0b2tlbi10YWJsZX0gd2FzIHNwZWNpZmllZC4gIEB4cmVme0RlY2wgU3VtbWFyeX0uCi1AZW5kIHRhYmxlCi0KLUBub2luZGVudAotQWRqdXN0IHRoZSBvdXRwdXQ6Ci0KLUB0YWJsZSBAb3B0aW9uCi1AaXRlbSAtZAotQGl0ZW14IC0tZGVmaW5lcwotUHJldGVuZCB0aGF0IEBjb2RleyVkZWZpbmVzfSB3YXMgc3BlY2lmaWVkLCBpLmUuLCB3cml0ZSBhbiBleHRyYSBvdXRwdXQKLWZpbGUgY29udGFpbmluZyBtYWNybyBkZWZpbml0aW9ucyBmb3IgdGhlIHRva2VuIHR5cGUgbmFtZXMgZGVmaW5lZCBpbgotdGhlIGdyYW1tYXIsIGFzIHdlbGwgYXMgYSBmZXcgb3RoZXIgZGVjbGFyYXRpb25zLiAgQHhyZWZ7RGVjbCBTdW1tYXJ5fS4KLQotQGl0ZW0gLS1kZWZpbmVzPUB2YXJ7ZGVmaW5lcy1maWxlfQotU2FtZSBhcyBhYm92ZSwgYnV0IHNhdmUgaW4gdGhlIGZpbGUgQHZhcntkZWZpbmVzLWZpbGV9LgotCi1AaXRlbSAtYiBAdmFye2ZpbGUtcHJlZml4fQotQGl0ZW14IC0tZmlsZS1wcmVmaXg9QHZhcntwcmVmaXh9Ci1QcmV0ZW5kIHRoYXQgQGNvZGV7JWZpbGUtcHJlZml4fSB3YXMgc3BlY2lmaWVkLCBpLmUsIHNwZWNpZnkgcHJlZml4IHRvIHVzZQotZm9yIGFsbCBCaXNvbiBvdXRwdXQgZmlsZSBuYW1lcy4gIEB4cmVme0RlY2wgU3VtbWFyeX0uCi0KLUBpdGVtIC1yIEB2YXJ7dGhpbmdzfQotQGl0ZW14IC0tcmVwb3J0PUB2YXJ7dGhpbmdzfQotV3JpdGUgYW4gZXh0cmEgb3V0cHV0IGZpbGUgY29udGFpbmluZyB2ZXJib3NlIGRlc2NyaXB0aW9uIG9mIHRoZSBjb21tYQotc2VwYXJhdGVkIGxpc3Qgb2YgQHZhcnt0aGluZ3N9IGFtb25nOgotCi1AdGFibGUgQGNvZGUKLUBpdGVtIHN0YXRlCi1EZXNjcmlwdGlvbiBvZiB0aGUgZ3JhbW1hciwgY29uZmxpY3RzIChyZXNvbHZlZCBhbmQgdW5yZXNvbHZlZCksIGFuZAotQGFjcm9ueW17TEFMUn0gYXV0b21hdG9uLgotCi1AaXRlbSBsb29rLWFoZWFkCi1JbXBsaWVzIEBjb2Rle3N0YXRlfSBhbmQgYXVnbWVudHMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBhdXRvbWF0b24gd2l0aAotZWFjaCBydWxlJ3MgbG9vay1haGVhZCBzZXQuCi0KLUBpdGVtIGl0ZW1zZXQKLUltcGxpZXMgQGNvZGV7c3RhdGV9IGFuZCBhdWdtZW50cyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGF1dG9tYXRvbiB3aXRoCi10aGUgZnVsbCBzZXQgb2YgaXRlbXMgZm9yIGVhY2ggc3RhdGUsIGluc3RlYWQgb2YgaXRzIGNvcmUgb25seS4KLUBlbmQgdGFibGUKLQotQGl0ZW0gLXYKLUBpdGVteCAtLXZlcmJvc2UKLVByZXRlbmQgdGhhdCBAY29kZXsldmVyYm9zZX0gd2FzIHNwZWNpZmllZCwgaS5lLCB3cml0ZSBhbiBleHRyYSBvdXRwdXQKLWZpbGUgY29udGFpbmluZyB2ZXJib3NlIGRlc2NyaXB0aW9ucyBvZiB0aGUgZ3JhbW1hciBhbmQKLXBhcnNlci4gIEB4cmVme0RlY2wgU3VtbWFyeX0uCi0KLUBpdGVtIC1vIEB2YXJ7ZmlsZX0KLUBpdGVteCAtLW91dHB1dD1AdmFye2ZpbGV9Ci1TcGVjaWZ5IHRoZSBAdmFye2ZpbGV9IGZvciB0aGUgcGFyc2VyIGZpbGUuCi0KLVRoZSBvdGhlciBvdXRwdXQgZmlsZXMnIG5hbWVzIGFyZSBjb25zdHJ1Y3RlZCBmcm9tIEB2YXJ7ZmlsZX0gYXMKLWRlc2NyaWJlZCB1bmRlciB0aGUgQHNhbXB7LXZ9IGFuZCBAc2FtcHstZH0gb3B0aW9ucy4KLQotQGl0ZW0gLWcKLU91dHB1dCBhIEBhY3Jvbnlte1ZDR30gZGVmaW5pdGlvbiBvZiB0aGUgQGFjcm9ueW17TEFMUn0oMSkgZ3JhbW1hcgotYXV0b21hdG9uIGNvbXB1dGVkIGJ5IEJpc29uLiAgSWYgdGhlIGdyYW1tYXIgZmlsZSBpcyBAZmlsZXtmb28ueX0sIHRoZQotQGFjcm9ueW17VkNHfSBvdXRwdXQgZmlsZSB3aWxsCi1iZSBAZmlsZXtmb28udmNnfS4KLQotQGl0ZW0gLS1ncmFwaD1AdmFye2dyYXBoLWZpbGV9Ci1UaGUgYmVoYXZpb3Igb2YgQHZhcnstLWdyYXBofSBpcyB0aGUgc2FtZSB0aGFuIEBzYW1wey1nfS4gIFRoZSBvbmx5Ci1kaWZmZXJlbmNlIGlzIHRoYXQgaXQgaGFzIGFuIG9wdGlvbmFsIGFyZ3VtZW50IHdoaWNoIGlzIHRoZSBuYW1lIG9mCi10aGUgb3V0cHV0IGdyYXBoIGZpbGUuCi1AZW5kIHRhYmxlCi0KLUBub2RlIE9wdGlvbiBDcm9zcyBLZXkKLUBzZWN0aW9uIE9wdGlvbiBDcm9zcyBLZXkKLQotQGMgRklYTUU6IEhvdyBhYm91dCBwdXR0aW5nIHRoZSBkaXJlY3RpdmVzIHRvbz8KLUhlcmUgaXMgYSBsaXN0IG9mIG9wdGlvbnMsIGFscGhhYmV0aXplZCBieSBsb25nIG9wdGlvbiwgdG8gaGVscCB5b3UgZmluZAotdGhlIGNvcnJlc3BvbmRpbmcgc2hvcnQgb3B0aW9uLgotCi1AbXVsdGl0YWJsZSB7QG9wdGlvbnstLWRlZmluZXM9QHZhcntkZWZpbmVzLWZpbGV9fX0ge0BvcHRpb257LWIgQHZhcntmaWxlLXByZWZpeH1YWFh9fQotQGhlYWRpdGVtIExvbmcgT3B0aW9uIEB0YWIgU2hvcnQgT3B0aW9uCi1AaXRlbSBAb3B0aW9uey0tZGVidWd9ICAgICAgICAgICAgICAgICAgICAgIEB0YWIgQG9wdGlvbnstdH0KLUBpdGVtIEBvcHRpb257LS1kZWZpbmVzPUB2YXJ7ZGVmaW5lcy1maWxlfX0gQHRhYiBAb3B0aW9uey1kfQotQGl0ZW0gQG9wdGlvbnstLWZpbGUtcHJlZml4PUB2YXJ7cHJlZml4fX0gICBAdGFiIEBvcHRpb257LWIgQHZhcntmaWxlLXByZWZpeH19Ci1AaXRlbSBAb3B0aW9uey0tZ3JhcGg9QHZhcntncmFwaC1maWxlfX0gICAgIEB0YWIgQG9wdGlvbnstZH0KLUBpdGVtIEBvcHRpb257LS1oZWxwfSAgICAgICAgICAgICAgICAgICAgICAgQHRhYiBAb3B0aW9uey1ofQotQGl0ZW0gQG9wdGlvbnstLW5hbWUtcHJlZml4PUB2YXJ7cHJlZml4fX0gICBAdGFiIEBvcHRpb257LXAgQHZhcntuYW1lLXByZWZpeH19Ci1AaXRlbSBAb3B0aW9uey0tbm8tbGluZXN9ICAgICAgICAgICAgICAgICAgIEB0YWIgQG9wdGlvbnstbH0KLUBpdGVtIEBvcHRpb257LS1uby1wYXJzZXJ9ICAgICAgICAgICAgICAgICAgQHRhYiBAb3B0aW9uey1ufQotQGl0ZW0gQG9wdGlvbnstLW91dHB1dD1AdmFye291dGZpbGV9fSAgICAgICBAdGFiIEBvcHRpb257LW8gQHZhcntvdXRmaWxlfX0KLUBpdGVtIEBvcHRpb257LS1wcmludC1sb2NhbGVkaXJ9ICAgICAgICAgICAgQHRhYgotQGl0ZW0gQG9wdGlvbnstLXRva2VuLXRhYmxlfSAgICAgICAgICAgICAgICBAdGFiIEBvcHRpb257LWt9Ci1AaXRlbSBAb3B0aW9uey0tdmVyYm9zZX0gICAgICAgICAgICAgICAgICAgIEB0YWIgQG9wdGlvbnstdn0KLUBpdGVtIEBvcHRpb257LS12ZXJzaW9ufSAgICAgICAgICAgICAgICAgICAgQHRhYiBAb3B0aW9uey1WfQotQGl0ZW0gQG9wdGlvbnstLXlhY2N9ICAgICAgICAgICAgICAgICAgICAgICBAdGFiIEBvcHRpb257LXl9Ci1AZW5kIG11bHRpdGFibGUKLQotQG5vZGUgWWFjYyBMaWJyYXJ5Ci1Ac2VjdGlvbiBZYWNjIExpYnJhcnkKLQotVGhlIFlhY2MgbGlicmFyeSBjb250YWlucyBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyBvZiB0aGUKLUBjb2Rle3l5ZXJyb3J9IGFuZCBAY29kZXttYWlufSBmdW5jdGlvbnMuICBUaGVzZSBkZWZhdWx0Ci1pbXBsZW1lbnRhdGlvbnMgYXJlIG5vcm1hbGx5IG5vdCB1c2VmdWwsIGJ1dCBAYWNyb255bXtQT1NJWH0gcmVxdWlyZXMKLXRoZW0uICBUbyB1c2UgdGhlIFlhY2MgbGlicmFyeSwgbGluayB5b3VyIHByb2dyYW0gd2l0aCB0aGUKLUBvcHRpb257LWx5fSBvcHRpb24uICBOb3RlIHRoYXQgQmlzb24ncyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgWWFjYwotbGlicmFyeSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEBhY3Jvbnlte0dOVX0gR2VuZXJhbAotUHVibGljIExpY2Vuc2UgKEBweHJlZntDb3B5aW5nfSkuCi0KLUlmIHlvdSB1c2UgdGhlIFlhY2MgbGlicmFyeSdzIEBjb2Rle3l5ZXJyb3J9IGZ1bmN0aW9uLCB5b3Ugc2hvdWxkCi1kZWNsYXJlIEBjb2Rle3l5ZXJyb3J9IGFzIGZvbGxvd3M6Ci0KLUBleGFtcGxlCi1pbnQgeXllcnJvciAoY2hhciBjb25zdCAqKTsKLUBlbmQgZXhhbXBsZQotCi1CaXNvbiBpZ25vcmVzIHRoZSBAY29kZXtpbnR9IHZhbHVlIHJldHVybmVkIGJ5IHRoaXMgQGNvZGV7eXllcnJvcn0uCi1JZiB5b3UgdXNlIHRoZSBZYWNjIGxpYnJhcnkncyBAY29kZXttYWlufSBmdW5jdGlvbiwgeW91cgotQGNvZGV7eXlwYXJzZX0gZnVuY3Rpb24gc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyB0eXBlIHNpZ25hdHVyZToKLQotQGV4YW1wbGUKLWludCB5eXBhcnNlICh2b2lkKTsKLUBlbmQgZXhhbXBsZQotCi1AYyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEMrKyBCaXNvbgotCi1Abm9kZSBDKysgTGFuZ3VhZ2UgSW50ZXJmYWNlCi1AY2hhcHRlciBDKysgTGFuZ3VhZ2UgSW50ZXJmYWNlCi0KLUBtZW51Ci0qIEMrKyBQYXJzZXJzOjogICAgICAgICAgICAgICAgIFRoZSBpbnRlcmZhY2UgdG8gZ2VuZXJhdGUgQysrIHBhcnNlciBjbGFzc2VzCi0qIEEgQ29tcGxldGUgQysrIEV4YW1wbGU6OiAgICAgIERlbW9uc3RyYXRpbmcgdGhlaXIgdXNlCi1AZW5kIG1lbnUKLQotQG5vZGUgQysrIFBhcnNlcnMKLUBzZWN0aW9uIEMrKyBQYXJzZXJzCi0KLUBtZW51Ci0qIEMrKyBCaXNvbiBJbnRlcmZhY2U6OiAgICAgICAgIEFza2luZyBmb3IgQysrIHBhcnNlciBnZW5lcmF0aW9uCi0qIEMrKyBTZW1hbnRpYyBWYWx1ZXM6OiAgICAgICAgICV1bmlvbiB2cy4gQysrCi0qIEMrKyBMb2NhdGlvbiBWYWx1ZXM6OiAgICAgICAgIFRoZSBwb3NpdGlvbiBhbmQgbG9jYXRpb24gY2xhc3NlcwotKiBDKysgUGFyc2VyIEludGVyZmFjZTo6ICAgICAgICBJbnN0YW50aWF0aW5nIGFuZCBydW5uaW5nIHRoZSBwYXJzZXIKLSogQysrIFNjYW5uZXIgSW50ZXJmYWNlOjogICAgICAgRXhjaGFuZ2VzIGJldHdlZW4geXlsZXggYW5kIHBhcnNlCi1AZW5kIG1lbnUKLQotQG5vZGUgQysrIEJpc29uIEludGVyZmFjZQotQHN1YnNlY3Rpb24gQysrIEJpc29uIEludGVyZmFjZQotQGMgLSAlc2tlbGV0b24gImxhbHIxLmNjIgotQGMgLSBBbHdheXMgcHVyZQotQGMgLSBpbml0aWFsIGFjdGlvbgotCi1UaGUgQysrIHBhcnNlciBAYWNyb255bXtMQUxSfSgxKSBza2VsZXRvbiBpcyBuYW1lZCBAZmlsZXtsYWxyMS5jY30uICBUbwotc2VsZWN0IGl0LCB5b3UgbWF5IGVpdGhlciBwYXNzIHRoZSBvcHRpb24gQG9wdGlvbnstLXNrZWxldG9uPWxhbHIxLmNjfQotdG8gQmlzb24sIG9yIGluY2x1ZGUgdGhlIGRpcmVjdGl2ZSBAc2FtcHslc2tlbGV0b24gImxhbHIxLmNjIn0gaW4gdGhlCi1ncmFtbWFyIHByZWFtYmxlLiAgV2hlbiBydW4sIEBjb21tYW5ke2Jpc29ufSB3aWxsIGNyZWF0ZSBzZXZlcmFsCi1lbnRpdGllcyBpbiB0aGUgQHNhbXB7eXl9IG5hbWVzcGFjZS4gIFVzZSB0aGUgQHNhbXB7JW5hbWUtcHJlZml4fQotZGlyZWN0aXZlIHRvIGNoYW5nZSB0aGUgbmFtZXNwYWNlIG5hbWUsIHNlZSBAcmVme0RlY2wgU3VtbWFyeX0uICBUaGUKLXZhcmlvdXMgY2xhc3NlcyBhcmUgZ2VuZXJhdGVkIGluIHRoZSBmb2xsb3dpbmcgZmlsZXM6Ci0KLUB0YWJsZSBAZmlsZQotQGl0ZW0gcG9zaXRpb24uaGgKLUBpdGVteCBsb2NhdGlvbi5oaAotVGhlIGRlZmluaXRpb24gb2YgdGhlIGNsYXNzZXMgQGNvZGV7cG9zaXRpb259IGFuZCBAY29kZXtsb2NhdGlvbn0sCi11c2VkIGZvciBsb2NhdGlvbiB0cmFja2luZy4gIEB4cmVme0MrKyBMb2NhdGlvbiBWYWx1ZXN9LgotCi1AaXRlbSBzdGFjay5oaAotQW4gYXV4aWxpYXJ5IGNsYXNzIEBjb2Rle3N0YWNrfSB1c2VkIGJ5IHRoZSBwYXJzZXIuCi0KLUBpdGVtIEB2YXJ7ZmlsZX0uaGgKLUBpdGVteCBAdmFye2ZpbGV9LmNjCi0oQXNzdW1pbmcgdGhlIGV4dGVuc2lvbiBvZiB0aGUgaW5wdXQgZmlsZSB3YXMgQHNhbXB7Lnl5fS4pICBUaGUKLWRlY2xhcmF0aW9uIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQysrIHBhcnNlciBjbGFzcy4gIFRoZSBiYXNlbmFtZQotYW5kIGV4dGVuc2lvbiBvZiB0aGVzZSB0d28gZmlsZXMgZm9sbG93IHRoZSBzYW1lIHJ1bGVzIGFzIHdpdGggcmVndWxhciBDCi1wYXJzZXJzIChAcHhyZWZ7SW52b2NhdGlvbn0pLgotCi1UaGUgaGVhZGVyIGlzIEBlbXBoe21hbmRhdG9yeX07IHlvdSBtdXN0IGVpdGhlciBwYXNzCi1Ab3B0aW9uey1kfS9Ab3B0aW9uey0tZGVmaW5lc30gdG8gQGNvbW1hbmR7Ymlzb259LCBvciB1c2UgdGhlCi1Ac2FtcHslZGVmaW5lc30gZGlyZWN0aXZlLgotQGVuZCB0YWJsZQotCi1BbGwgdGhlc2UgZmlsZXMgYXJlIGRvY3VtZW50ZWQgdXNpbmcgRG94eWdlbjsgcnVuIEBjb21tYW5ke2RveHlnZW59Ci1mb3IgYSBjb21wbGV0ZSBhbmQgYWNjdXJhdGUgZG9jdW1lbnRhdGlvbi4KLQotQG5vZGUgQysrIFNlbWFudGljIFZhbHVlcwotQHN1YnNlY3Rpb24gQysrIFNlbWFudGljIFZhbHVlcwotQGMgLSBObyBvYmplY3RzIGluIHVuaW9ucwotQGMgLSBZU1RZUEUKLUBjIC0gUHJpbnRlciBhbmQgZGVzdHJ1Y3RvcgotCi1UaGUgQGNvZGV7JXVuaW9ufSBkaXJlY3RpdmUgd29ya3MgYXMgZm9yIEMsIHNlZSBAcmVme1VuaW9uIERlY2wsICxUaGUKLUNvbGxlY3Rpb24gb2YgVmFsdWUgVHlwZXN9LiAgSW4gcGFydGljdWxhciBpdCBwcm9kdWNlcyBhIGdlbnVpbmUKLUBjb2Rle3VuaW9ufUBmb290bm90ZXtJbiB0aGUgZnV0dXJlIHRlY2huaXF1ZXMgdG8gYWxsb3cgY29tcGxleCB0eXBlcwotd2l0aGluIHBzZXVkby11bmlvbnMgKHNpbWlsYXIgdG8gQm9vc3QgdmFyaWFudHMpIG1pZ2h0IGJlIGltcGxlbWVudGVkIHRvCi1hbGxldmlhdGUgdGhlc2UgaXNzdWVzLn0sIHdoaWNoIGhhdmUgYSBmZXcgc3BlY2lmaWMgZmVhdHVyZXMgaW4gQysrLgotQGl0ZW1pemUgQG1pbnVzCi1AaXRlbQotVGhlIHR5cGUgQGNvZGV7WVlTVFlQRX0gaXMgZGVmaW5lZCBidXQgaXRzIHVzZSBpcyBkaXNjb3VyYWdlZDogcmF0aGVyCi15b3Ugc2hvdWxkIHJlZmVyIHRvIHRoZSBwYXJzZXIncyBlbmNhcHN1bGF0ZWQgdHlwZQotQGNvZGV7eXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZX0uCi1AaXRlbQotTm9uIFBPRCAoUGxhaW4gT2xkIERhdGEpIHR5cGVzIGNhbm5vdCBiZSB1c2VkLiAgQysrIGZvcmJpZHMgYW55Ci1pbnN0YW5jZSBvZiBjbGFzc2VzIHdpdGggY29uc3RydWN0b3JzIGluIHVuaW9uczogb25seSBAZW1waHtwb2ludGVyc30KLXRvIHN1Y2ggb2JqZWN0cyBhcmUgYWxsb3dlZC4KLUBlbmQgaXRlbWl6ZQotCi1CZWNhdXNlIG9iamVjdHMgaGF2ZSB0byBiZSBzdG9yZWQgdmlhIHBvaW50ZXJzLCBtZW1vcnkgaXMgbm90Ci1yZWNsYWltZWQgYXV0b21hdGljYWxseTogdXNpbmcgdGhlIEBjb2RleyVkZXN0cnVjdG9yfSBkaXJlY3RpdmUgaXMgdGhlCi1vbmx5IG1lYW5zIHRvIGF2b2lkIGxlYWtzLiAgQHhyZWZ7RGVzdHJ1Y3RvciBEZWNsLCAsIEZyZWVpbmcgRGlzY2FyZGVkCi1TeW1ib2xzfS4KLQotCi1Abm9kZSBDKysgTG9jYXRpb24gVmFsdWVzCi1Ac3Vic2VjdGlvbiBDKysgTG9jYXRpb24gVmFsdWVzCi1AYyAtICVsb2NhdGlvbnMKLUBjIC0gY2xhc3MgUG9zaXRpb24KLUBjIC0gY2xhc3MgTG9jYXRpb24KLUBjIC0gJWRlZmluZSAiZmlsZW5hbWVfdHlwZSIgImNvbnN0IHN5bWJvbDo6U3ltYm9sIgotCi1XaGVuIHRoZSBkaXJlY3RpdmUgQGNvZGV7JWxvY2F0aW9uc30gaXMgdXNlZCwgdGhlIEMrKyBwYXJzZXIgc3VwcG9ydHMKLWxvY2F0aW9uIHRyYWNraW5nLCBzZWUgQHJlZntMb2NhdGlvbnMsICwgTG9jYXRpb25zIE92ZXJ2aWV3fS4gIFR3bwotYXV4aWxpYXJ5IGNsYXNzZXMgZGVmaW5lIGEgQGNvZGV7cG9zaXRpb259LCBhIHNpbmdsZSBwb2ludCBpbiBhIGZpbGUsCi1hbmQgYSBAY29kZXtsb2NhdGlvbn0sIGEgcmFuZ2UgY29tcG9zZWQgb2YgYSBwYWlyIG9mCi1AY29kZXtwb3NpdGlvbn1zIChwb3NzaWJseSBzcGFubmluZyBzZXZlcmFsIGZpbGVzKS4KLQotQGRlZnR5cGVtZXRob2Qge3Bvc2l0aW9ufSB7c3RkOjpzdHJpbmcqfSBmaWxlCi1UaGUgbmFtZSBvZiB0aGUgZmlsZS4gIEl0IHdpbGwgYWx3YXlzIGJlIGhhbmRsZWQgYXMgYSBwb2ludGVyLCB0aGUKLXBhcnNlciB3aWxsIG5ldmVyIGR1cGxpY2F0ZSBub3IgZGVhbGxvY2F0ZSBpdC4gIEFzIGFuIGV4cGVyaW1lbnRhbAotZmVhdHVyZSB5b3UgbWF5IGNoYW5nZSBpdCB0byBAc2FtcHtAdmFye3R5cGV9Kn0gdXNpbmcgQHNhbXB7JWRlZmluZQotImZpbGVuYW1lX3R5cGUiICJAdmFye3R5cGV9In0uCi1AZW5kIGRlZnR5cGVtZXRob2QKLQotQGRlZnR5cGVtZXRob2Qge3Bvc2l0aW9ufSB7dW5zaWduZWQgaW50fSBsaW5lCi1UaGUgbGluZSwgc3RhcnRpbmcgYXQgMS4KLUBlbmQgZGVmdHlwZW1ldGhvZAotCi1AZGVmdHlwZW1ldGhvZCB7cG9zaXRpb259IHt1bnNpZ25lZCBpbnR9IGxpbmVzIChpbnQgQHZhcntoZWlnaHR9ID0gMSkKLUFkdmFuY2UgYnkgQHZhcntoZWlnaHR9IGxpbmVzLCByZXNldHRpbmcgdGhlIGNvbHVtbiBudW1iZXIuCi1AZW5kIGRlZnR5cGVtZXRob2QKLQotQGRlZnR5cGVtZXRob2Qge3Bvc2l0aW9ufSB7dW5zaWduZWQgaW50fSBjb2x1bW4KLVRoZSBjb2x1bW4sIHN0YXJ0aW5nIGF0IDAuCi1AZW5kIGRlZnR5cGVtZXRob2QKLQotQGRlZnR5cGVtZXRob2Qge3Bvc2l0aW9ufSB7dW5zaWduZWQgaW50fSBjb2x1bW5zIChpbnQgQHZhcnt3aWR0aH0gPSAxKQotQWR2YW5jZSBieSBAdmFye3dpZHRofSBjb2x1bW5zLCB3aXRob3V0IGNoYW5naW5nIHRoZSBsaW5lIG51bWJlci4KLUBlbmQgZGVmdHlwZW1ldGhvZAotCi1AZGVmdHlwZW1ldGhvZCB7cG9zaXRpb259IHtwb3NpdGlvbiZ9IG9wZXJhdG9yKz0gKHBvc2l0aW9uJiBAdmFye3Bvc30sIGludCBAdmFye3dpZHRofSkKLUBkZWZ0eXBlbWV0aG9keCB7cG9zaXRpb259IHtwb3NpdGlvbn0gb3BlcmF0b3IrIChjb25zdCBwb3NpdGlvbiYgQHZhcntwb3N9LCBpbnQgQHZhcnt3aWR0aH0pCi1AZGVmdHlwZW1ldGhvZHgge3Bvc2l0aW9ufSB7cG9zaXRpb24mfSBvcGVyYXRvci09IChjb25zdCBwb3NpdGlvbiYgQHZhcntwb3N9LCBpbnQgQHZhcnt3aWR0aH0pCi1AZGVmdHlwZW1ldGhvZHgge3Bvc2l0aW9ufSB7cG9zaXRpb259IG9wZXJhdG9yLSAocG9zaXRpb24mIEB2YXJ7cG9zfSwgaW50IEB2YXJ7d2lkdGh9KQotVmFyaW91cyBmb3JtcyBvZiBzeW50YWN0aWMgc3VnYXIgZm9yIEBjb2Rle2NvbHVtbnN9LgotQGVuZCBkZWZ0eXBlbWV0aG9kCi0KLUBkZWZ0eXBlbWV0aG9kIHtwb3NpdGlvbn0ge3Bvc2l0aW9ufSBvcGVyYXRvcjw8IChzdGQ6Om9zdHJlYW0gQHZhcntvfSwgY29uc3QgcG9zaXRpb24mIEB2YXJ7cH0pCi1SZXBvcnQgQHZhcntwfSBvbiBAdmFye299IGxpa2UgdGhpczoKLUBzYW1we0B2YXJ7ZmlsZX06QHZhcntsaW5lfS5AdmFye2NvbHVtbn19LCBvcgotQHNhbXB7QHZhcntsaW5lfS5AdmFye2NvbHVtbn19IGlmIEB2YXJ7ZmlsZX0gaXMgbnVsbC4KLUBlbmQgZGVmdHlwZW1ldGhvZAotCi1AZGVmdHlwZW1ldGhvZCB7bG9jYXRpb259IHtwb3NpdGlvbn0gYmVnaW4KLUBkZWZ0eXBlbWV0aG9keCB7bG9jYXRpb259IHtwb3NpdGlvbn0gZW5kCi1UaGUgZmlyc3QsIGluY2x1c2l2ZSwgcG9zaXRpb24gb2YgdGhlIHJhbmdlLCBhbmQgdGhlIGZpcnN0IGJleW9uZC4KLUBlbmQgZGVmdHlwZW1ldGhvZAotCi1AZGVmdHlwZW1ldGhvZCB7bG9jYXRpb259IHt1bnNpZ25lZCBpbnR9IGNvbHVtbnMgKGludCBAdmFye3dpZHRofSA9IDEpCi1AZGVmdHlwZW1ldGhvZHgge2xvY2F0aW9ufSB7dW5zaWduZWQgaW50fSBsaW5lcyAoaW50IEB2YXJ7aGVpZ2h0fSA9IDEpCi1BZHZhbmNlIHRoZSBAY29kZXtlbmR9IHBvc2l0aW9uLgotQGVuZCBkZWZ0eXBlbWV0aG9kCi0KLUBkZWZ0eXBlbWV0aG9kIHtsb2NhdGlvbn0ge2xvY2F0aW9ufSBvcGVyYXRvcisgKGNvbnN0IGxvY2F0aW9uJiBAdmFye2JlZ2lufSwgY29uc3QgbG9jYXRpb24mIEB2YXJ7ZW5kfSkKLUBkZWZ0eXBlbWV0aG9keCB7bG9jYXRpb259IHtsb2NhdGlvbn0gb3BlcmF0b3IrIChjb25zdCBsb2NhdGlvbiYgQHZhcntiZWdpbn0sIGludCBAdmFye3dpZHRofSkKLUBkZWZ0eXBlbWV0aG9keCB7bG9jYXRpb259IHtsb2NhdGlvbn0gb3BlcmF0b3IrPSAoY29uc3QgbG9jYXRpb24mIEB2YXJ7bG9jfSwgaW50IEB2YXJ7d2lkdGh9KQotVmFyaW91cyBmb3JtcyBvZiBzeW50YWN0aWMgc3VnYXIuCi1AZW5kIGRlZnR5cGVtZXRob2QKLQotQGRlZnR5cGVtZXRob2Qge2xvY2F0aW9ufSB7dm9pZH0gc3RlcCAoKQotTW92ZSBAY29kZXtiZWdpbn0gb250byBAY29kZXtlbmR9LgotQGVuZCBkZWZ0eXBlbWV0aG9kCi0KLQotQG5vZGUgQysrIFBhcnNlciBJbnRlcmZhY2UKLUBzdWJzZWN0aW9uIEMrKyBQYXJzZXIgSW50ZXJmYWNlCi1AYyAtIGRlZmluZSBwYXJzZXJfY2xhc3NfbmFtZQotQGMgLSBDdG9yCi1AYyAtIHBhcnNlLCBlcnJvciwgc2V0X2RlYnVnX2xldmVsLCBkZWJ1Z19sZXZlbCwgc2V0X2RlYnVnX3N0cmVhbSwKLUBjICAgZGVidWdfc3RyZWFtLgotQGMgLSBSZXBvcnRpbmcgZXJyb3JzCi0KLVRoZSBvdXRwdXQgZmlsZXMgQGZpbGV7QHZhcntvdXRwdXR9LmhofSBhbmQgQGZpbGV7QHZhcntvdXRwdXR9LmNjfQotZGVjbGFyZSBhbmQgZGVmaW5lIHRoZSBwYXJzZXIgY2xhc3MgaW4gdGhlIG5hbWVzcGFjZSBAY29kZXt5eX0uICBUaGUKLWNsYXNzIG5hbWUgZGVmYXVsdHMgdG8gQGNvZGV7cGFyc2VyfSwgYnV0IG1heSBiZSBjaGFuZ2VkIHVzaW5nCi1Ac2FtcHslZGVmaW5lICJwYXJzZXJfY2xhc3NfbmFtZSIgIkB2YXJ7bmFtZX0ifS4gIFRoZSBpbnRlcmZhY2Ugb2YKLXRoaXMgY2xhc3MgaXMgZGV0YWlsZWQgYmVsb3cuICBJdCBjYW4gYmUgZXh0ZW5kZWQgdXNpbmcgdGhlCi1AY29kZXslcGFyc2UtcGFyYW19IGZlYXR1cmU6IGl0cyBzZW1hbnRpY3MgaXMgc2xpZ2h0bHkgY2hhbmdlZCBzaW5jZQotaXQgZGVzY3JpYmVzIGFuIGFkZGl0aW9uYWwgbWVtYmVyIG9mIHRoZSBwYXJzZXIgY2xhc3MsIGFuZCBhbgotYWRkaXRpb25hbCBhcmd1bWVudCBmb3IgaXRzIGNvbnN0cnVjdG9yLgotCi1AZGVmY3Yge1R5cGV9IHtwYXJzZXJ9IHtzZW1hbnRpY192YWx1ZV90eXBlfQotQGRlZmN2eCB7VHlwZX0ge3BhcnNlcn0ge2xvY2F0aW9uX3ZhbHVlX3R5cGV9Ci1UaGUgdHlwZXMgZm9yIHNlbWFudGljcyB2YWx1ZSBhbmQgbG9jYXRpb25zLgotQGVuZCBkZWZjdgotCi1AZGVmdHlwZW1ldGhvZCB7cGFyc2VyfSB7fSBwYXJzZXIgKEB2YXJ7dHlwZTF9IEB2YXJ7YXJnMX0sIC4uLikKLUJ1aWxkIGEgbmV3IHBhcnNlciBvYmplY3QuICBUaGVyZSBhcmUgbm8gYXJndW1lbnRzIGJ5IGRlZmF1bHQsIHVubGVzcwotQHNhbXB7JXBhcnNlLXBhcmFtIEB7QHZhcnt0eXBlMX0gQHZhcnthcmcxfUB9fSB3YXMgdXNlZC4KLUBlbmQgZGVmdHlwZW1ldGhvZAotCi1AZGVmdHlwZW1ldGhvZCB7cGFyc2VyfSB7aW50fSBwYXJzZSAoKQotUnVuIHRoZSBzeW50YWN0aWMgYW5hbHlzaXMsIGFuZCByZXR1cm4gMCBvbiBzdWNjZXNzLCAxIG90aGVyd2lzZS4KLUBlbmQgZGVmdHlwZW1ldGhvZAotCi1AZGVmdHlwZW1ldGhvZCB7cGFyc2VyfSB7c3RkOjpvc3RyZWFtJn0gZGVidWdfc3RyZWFtICgpCi1AZGVmdHlwZW1ldGhvZHgge3BhcnNlcn0ge3ZvaWR9IHNldF9kZWJ1Z19zdHJlYW0gKHN0ZDo6b3N0cmVhbSYgQHZhcntvfSkKLUdldCBvciBzZXQgdGhlIHN0cmVhbSB1c2VkIGZvciB0cmFjaW5nIHRoZSBwYXJzaW5nLiAgSXQgZGVmYXVsdHMgdG8KLUBjb2Rle3N0ZDo6Y2Vycn0uCi1AZW5kIGRlZnR5cGVtZXRob2QKLQotQGRlZnR5cGVtZXRob2Qge3BhcnNlcn0ge2RlYnVnX2xldmVsX3R5cGV9IGRlYnVnX2xldmVsICgpCi1AZGVmdHlwZW1ldGhvZHgge3BhcnNlcn0ge3ZvaWR9IHNldF9kZWJ1Z19sZXZlbCAoZGVidWdfbGV2ZWwgQHZhcntsfSkKLUdldCBvciBzZXQgdGhlIHRyYWNpbmcgbGV2ZWwuICBDdXJyZW50bHkgaXRzIHZhbHVlIGlzIGVpdGhlciAwLCBubyB0cmFjZSwKLW9yIG5vbnplcm8sIGZ1bGwgdHJhY2luZy4KLUBlbmQgZGVmdHlwZW1ldGhvZAotCi1AZGVmdHlwZW1ldGhvZCB7cGFyc2VyfSB7dm9pZH0gZXJyb3IgKGNvbnN0IGxvY2F0aW9uX3R5cGUmIEB2YXJ7bH0sIGNvbnN0IHN0ZDo6c3RyaW5nJiBAdmFye219KQotVGhlIGRlZmluaXRpb24gZm9yIHRoaXMgbWVtYmVyIGZ1bmN0aW9uIG11c3QgYmUgc3VwcGxpZWQgYnkgdGhlIHVzZXI6Ci10aGUgcGFyc2VyIHVzZXMgaXQgdG8gcmVwb3J0IGEgcGFyc2VyIGVycm9yIG9jY3VycmluZyBhdCBAdmFye2x9LAotZGVzY3JpYmVkIGJ5IEB2YXJ7bX0uCi1AZW5kIGRlZnR5cGVtZXRob2QKLQotCi1Abm9kZSBDKysgU2Nhbm5lciBJbnRlcmZhY2UKLUBzdWJzZWN0aW9uIEMrKyBTY2FubmVyIEludGVyZmFjZQotQGMgLSBwcmVmaXggZm9yIHl5bGV4LgotQGMgLSBQdXJlIGludGVyZmFjZSB0byB5eWxleAotQGMgLSAlbGV4LXBhcmFtCi0KLVRoZSBwYXJzZXIgaW52b2tlcyB0aGUgc2Nhbm5lciBieSBjYWxsaW5nIEBjb2Rle3l5bGV4fS4gIENvbnRyYXJ5IHRvIEMKLXBhcnNlcnMsIEMrKyBwYXJzZXJzIGFyZSBhbHdheXMgcHVyZTogdGhlcmUgaXMgbm8gcG9pbnQgaW4gdXNpbmcgdGhlCi1AY29kZXslcHVyZS1wYXJzZXJ9IGRpcmVjdGl2ZS4gIFRoZXJlZm9yZSB0aGUgaW50ZXJmYWNlIGlzIGFzIGZvbGxvd3MuCi0KLUBkZWZ0eXBlbWV0aG9kIHtwYXJzZXJ9IHtpbnR9IHl5bGV4IChzZW1hbnRpY192YWx1ZV90eXBlJiBAdmFye3l5bHZhbH0sIGxvY2F0aW9uX3R5cGUmIEB2YXJ7eXlsbG9jfSwgQHZhcnt0eXBlMX0gQHZhcnthcmcxfSwgLi4uKQotUmV0dXJuIHRoZSBuZXh0IHRva2VuLiAgSXRzIHR5cGUgaXMgdGhlIHJldHVybiB2YWx1ZSwgaXRzIHNlbWFudGljCi12YWx1ZSBhbmQgbG9jYXRpb24gYmVpbmcgQHZhcnt5eWx2YWx9IGFuZCBAdmFye3l5bGxvY30uICBJbnZvY2F0aW9ucyBvZgotQHNhbXB7JWxleC1wYXJhbSBAe0B2YXJ7dHlwZTF9IEB2YXJ7YXJnMX1AfX0geWllbGQgYWRkaXRpb25hbCBhcmd1bWVudHMuCi1AZW5kIGRlZnR5cGVtZXRob2QKLQotCi1Abm9kZSBBIENvbXBsZXRlIEMrKyBFeGFtcGxlCi1Ac2VjdGlvbiBBIENvbXBsZXRlIEMrKyBFeGFtcGxlCi0KLVRoaXMgc2VjdGlvbiBkZW1vbnN0cmF0ZXMgdGhlIHVzZSBvZiBhIEMrKyBwYXJzZXIgd2l0aCBhIHNpbXBsZSBidXQKLWNvbXBsZXRlIGV4YW1wbGUuICBUaGlzIGV4YW1wbGUgc2hvdWxkIGJlIGF2YWlsYWJsZSBvbiB5b3VyIHN5c3RlbSwKLXJlYWR5IHRvIGNvbXBpbGUsIGluIHRoZSBkaXJlY3RvcnkgQGRmbnsuLi9iaXNvbi9leGFtcGxlcy9jYWxjKyt9LiAgSXQKLWZvY3VzZXMgb24gdGhlIHVzZSBvZiBCaXNvbiwgdGhlcmVmb3JlIHRoZSBkZXNpZ24gb2YgdGhlIHZhcmlvdXMgQysrCi1jbGFzc2VzIGlzIHZlcnkgbmFpdmU6IG5vIGFjY2Vzc29ycywgbm8gZW5jYXBzdWxhdGlvbiBvZiBtZW1iZXJzIGV0Yy4KLVdlIHdpbGwgdXNlIGEgTGV4IHNjYW5uZXIsIGFuZCBtb3JlIHByZWNpc2VseSwgYSBGbGV4IHNjYW5uZXIsIHRvCi1kZW1vbnN0cmF0ZSB0aGUgdmFyaW91cyBpbnRlcmFjdGlvbi4gIEEgaGFuZCB3cml0dGVuIHNjYW5uZXIgaXMKLWFjdHVhbGx5IGVhc2llciB0byBpbnRlcmZhY2Ugd2l0aC4KLQotQG1lbnUKLSogQ2FsYysrIC0tLSBDKysgQ2FsY3VsYXRvcjo6ICAgVGhlIHNwZWNpZmljYXRpb25zCi0qIENhbGMrKyBQYXJzaW5nIERyaXZlcjo6ICAgICAgIEFuIGFjdGl2ZSBwYXJzaW5nIGNvbnRleHQKLSogQ2FsYysrIFBhcnNlcjo6ICAgICAgICAgICAgICAgQSBwYXJzZXIgY2xhc3MKLSogQ2FsYysrIFNjYW5uZXI6OiAgICAgICAgICAgICAgQSBwdXJlIEMrKyBGbGV4IHNjYW5uZXIKLSogQ2FsYysrIFRvcCBMZXZlbDo6ICAgICAgICAgICAgQ29uZHVjdGluZyB0aGUgYmFuZAotQGVuZCBtZW51Ci0KLUBub2RlIENhbGMrKyAtLS0gQysrIENhbGN1bGF0b3IKLUBzdWJzZWN0aW9uIENhbGMrKyAtLS0gQysrIENhbGN1bGF0b3IKLQotT2YgY291cnNlIHRoZSBncmFtbWFyIGlzIGRlZGljYXRlZCB0byBhcml0aG1ldGljcywgYSBzaW5nbGUKLWV4cHJlc3Npb24sIHBvc3NpYmx5IHByZWNlZGVkIGJ5IHZhcmlhYmxlIGFzc2lnbm1lbnRzLiAgQW4KLWVudmlyb25tZW50IGNvbnRhaW5pbmcgcG9zc2libHkgcHJlZGVmaW5lZCB2YXJpYWJsZXMgc3VjaCBhcwotQGNvZGV7b25lfSBhbmQgQGNvZGV7dHdvfSwgaXMgZXhjaGFuZ2VkIHdpdGggdGhlIHBhcnNlci4gIEFuIGV4YW1wbGUKLW9mIHZhbGlkIGlucHV0IGZvbGxvd3MuCi0KLUBleGFtcGxlCi10aHJlZSA6PSAzCi1zZXZlbiA6PSBvbmUgKyB0d28gKiB0aHJlZQotc2V2ZW4gKiBzZXZlbgotQGVuZCBleGFtcGxlCi0KLUBub2RlIENhbGMrKyBQYXJzaW5nIERyaXZlcgotQHN1YnNlY3Rpb24gQ2FsYysrIFBhcnNpbmcgRHJpdmVyCi1AYyAtIEFuIGVudgotQGMgLSBBIHBsYWNlIHRvIHN0b3JlIGVycm9yIG1lc3NhZ2VzCi1AYyAtIEEgcGxhY2UgZm9yIHRoZSByZXN1bHQKLQotVG8gc3VwcG9ydCBhIHB1cmUgaW50ZXJmYWNlIHdpdGggdGhlIHBhcnNlciAoYW5kIHRoZSBzY2FubmVyKSB0aGUKLXRlY2huaXF1ZSBvZiB0aGUgYGBwYXJzaW5nIGNvbnRleHQnJyBpcyBjb252ZW5pZW50OiBhIHN0cnVjdHVyZQotY29udGFpbmluZyBhbGwgdGhlIGRhdGEgdG8gZXhjaGFuZ2UuICBTaW5jZSwgaW4gYWRkaXRpb24gdG8gc2ltcGx5Ci1sYXVuY2ggdGhlIHBhcnNpbmcsIHRoZXJlIGFyZSBzZXZlcmFsIGF1eGlsaWFyeSB0YXNrcyB0byBleGVjdXRlIChvcGVuCi10aGUgZmlsZSBmb3IgcGFyc2luZywgaW5zdGFudGlhdGUgdGhlIHBhcnNlciBldGMuKSwgd2UgcmVjb21tZW5kCi10cmFuc2Zvcm1pbmcgdGhlIHNpbXBsZSBwYXJzaW5nIGNvbnRleHQgc3RydWN0dXJlIGludG8gYSBmdWxseSBibG93bgotQGRmbntwYXJzaW5nIGRyaXZlcn0gY2xhc3MuCi0KLVRoZSBkZWNsYXJhdGlvbiBvZiB0aGlzIGRyaXZlciBjbGFzcywgQGZpbGV7Y2FsYysrLWRyaXZlci5oaH0sIGlzIGFzCi1mb2xsb3dzLiAgVGhlIGZpcnN0IHBhcnQgaW5jbHVkZXMgdGhlIENQUCBndWFyZCBhbmQgaW1wb3J0cyB0aGUKLXJlcXVpcmVkIHN0YW5kYXJkIGxpYnJhcnkgY29tcG9uZW50cywgYW5kIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgcGFyc2VyCi1jbGFzcy4KLQotQGNvbW1lbnQgZmlsZTogY2FsYysrLWRyaXZlci5oaAotQGV4YW1wbGUKLSNpZm5kZWYgQ0FMQ1hYX0RSSVZFUl9ISAotIyBkZWZpbmUgQ0FMQ1hYX0RSSVZFUl9ISAotIyBpbmNsdWRlIDxzdHJpbmc+Ci0jIGluY2x1ZGUgPG1hcD4KLSMgaW5jbHVkZSAiY2FsYysrLXBhcnNlci5oaCIKLUBlbmQgZXhhbXBsZQotCi0KLUBub2luZGVudAotVGhlbiBjb21lcyB0aGUgZGVjbGFyYXRpb24gb2YgdGhlIHNjYW5uaW5nIGZ1bmN0aW9uLiAgRmxleCBleHBlY3RzCi10aGUgc2lnbmF0dXJlIG9mIEBjb2Rle3l5bGV4fSB0byBiZSBkZWZpbmVkIGluIHRoZSBtYWNybwotQGNvZGV7WVlfREVDTH0sIGFuZCB0aGUgQysrIHBhcnNlciBleHBlY3RzIGl0IHRvIGJlIGRlY2xhcmVkLiAgV2UgY2FuCi1mYWN0b3IgYm90aCBhcyBmb2xsb3dzLgotCi1AY29tbWVudCBmaWxlOiBjYWxjKystZHJpdmVyLmhoCi1AZXhhbXBsZQotLy8gQW5ub3VuY2UgdG8gRmxleCB0aGUgcHJvdG90eXBlIHdlIHdhbnQgZm9yIGxleGluZyBmdW5jdGlvbiwgLi4uCi0jIGRlZmluZSBZWV9ERUNMCQkJCQlcCi0gIHl5OjpjYWxjeHhfcGFyc2VyOjp0b2tlbl90eXBlICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgeXlsZXggKHl5OjpjYWxjeHhfcGFyc2VyOjpzZW1hbnRpY190eXBlKiB5eWx2YWwsICAgICAgXAotICAgICAgICAgeXk6OmNhbGN4eF9wYXJzZXI6OmxvY2F0aW9uX3R5cGUqIHl5bGxvYywgICAgICBcCi0gICAgICAgICBjYWxjeHhfZHJpdmVyJiBkcml2ZXIpCi0vLyAuLi4gYW5kIGRlY2xhcmUgaXQgZm9yIHRoZSBwYXJzZXIncyBzYWtlLgotWVlfREVDTDsKLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLVRoZSBAY29kZXtjYWxjeHhfZHJpdmVyfSBjbGFzcyBpcyB0aGVuIGRlY2xhcmVkIHdpdGggaXRzIG1vc3Qgb2J2aW91cwotbWVtYmVycy4KLQotQGNvbW1lbnQgZmlsZTogY2FsYysrLWRyaXZlci5oaAotQGV4YW1wbGUKLS8vIENvbmR1Y3RpbmcgdGhlIHdob2xlIHNjYW5uaW5nIGFuZCBwYXJzaW5nIG9mIENhbGMrKy4KLWNsYXNzIGNhbGN4eF9kcml2ZXIKLUB7Ci1wdWJsaWM6Ci0gIGNhbGN4eF9kcml2ZXIgKCk7Ci0gIHZpcnR1YWwgfmNhbGN4eF9kcml2ZXIgKCk7Ci0KLSAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIGludD4gdmFyaWFibGVzOwotCi0gIGludCByZXN1bHQ7Ci1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci1UbyBlbmNhcHN1bGF0ZSB0aGUgY29vcmRpbmF0aW9uIHdpdGggdGhlIEZsZXggc2Nhbm5lciwgaXQgaXMgdXNlZnVsIHRvCi1oYXZlIHR3byBtZW1iZXJzIGZ1bmN0aW9uIHRvIG9wZW4gYW5kIGNsb3NlIHRoZSBzY2FubmluZyBwaGFzZS4KLW1lbWJlcnMuCi0KLUBjb21tZW50IGZpbGU6IGNhbGMrKy1kcml2ZXIuaGgKLUBleGFtcGxlCi0gIC8vIEhhbmRsaW5nIHRoZSBzY2FubmVyLgotICB2b2lkIHNjYW5fYmVnaW4gKCk7Ci0gIHZvaWQgc2Nhbl9lbmQgKCk7Ci0gIGJvb2wgdHJhY2Vfc2Nhbm5pbmc7Ci1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci1TaW1pbGFybHkgZm9yIHRoZSBwYXJzZXIgaXRzZWxmLgotCi1AY29tbWVudCBmaWxlOiBjYWxjKystZHJpdmVyLmhoCi1AZXhhbXBsZQotICAvLyBIYW5kbGluZyB0aGUgcGFyc2VyLgotICB2b2lkIHBhcnNlIChjb25zdCBzdGQ6OnN0cmluZyYgZik7Ci0gIHN0ZDo6c3RyaW5nIGZpbGU7Ci0gIGJvb2wgdHJhY2VfcGFyc2luZzsKLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLVRvIGRlbW9uc3RyYXRlIHB1cmUgaGFuZGxpbmcgb2YgcGFyc2UgZXJyb3JzLCBpbnN0ZWFkIG9mIHNpbXBseQotZHVtcGluZyB0aGVtIG9uIHRoZSBzdGFuZGFyZCBlcnJvciBvdXRwdXQsIHdlIHdpbGwgcGFzcyB0aGVtIHRvIHRoZQotY29tcGlsZXIgZHJpdmVyIHVzaW5nIHRoZSBmb2xsb3dpbmcgdHdvIG1lbWJlciBmdW5jdGlvbnMuICBGaW5hbGx5LCB3ZQotY2xvc2UgdGhlIGNsYXNzIGRlY2xhcmF0aW9uIGFuZCBDUFAgZ3VhcmQuCi0KLUBjb21tZW50IGZpbGU6IGNhbGMrKy1kcml2ZXIuaGgKLUBleGFtcGxlCi0gIC8vIEVycm9yIGhhbmRsaW5nLgotICB2b2lkIGVycm9yIChjb25zdCB5eTo6bG9jYXRpb24mIGwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtKTsKLSAgdm9pZCBlcnJvciAoY29uc3Qgc3RkOjpzdHJpbmcmIG0pOwotQH07Ci0jZW5kaWYgLy8gISBDQUxDWFhfRFJJVkVSX0hICi1AZW5kIGV4YW1wbGUKLQotVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBkcml2ZXIgaXMgc3RyYWlnaHRmb3J3YXJkLiAgVGhlIEBjb2Rle3BhcnNlfQotbWVtYmVyIGZ1bmN0aW9uIGRlc2VydmVzIHNvbWUgYXR0ZW50aW9uLiAgVGhlIEBjb2Rle2Vycm9yfSBmdW5jdGlvbnMKLWFyZSBzaW1wbGUgc3R1YnMsIHRoZXkgc2hvdWxkIGFjdHVhbGx5IHJlZ2lzdGVyIHRoZSBsb2NhdGVkIGVycm9yCi1tZXNzYWdlcyBhbmQgc2V0IGVycm9yIHN0YXRlLgotCi1AY29tbWVudCBmaWxlOiBjYWxjKystZHJpdmVyLmNjCi1AZXhhbXBsZQotI2luY2x1ZGUgImNhbGMrKy1kcml2ZXIuaGgiCi0jaW5jbHVkZSAiY2FsYysrLXBhcnNlci5oaCIKLQotY2FsY3h4X2RyaXZlcjo6Y2FsY3h4X2RyaXZlciAoKQotICA6IHRyYWNlX3NjYW5uaW5nIChmYWxzZSksIHRyYWNlX3BhcnNpbmcgKGZhbHNlKQotQHsKLSAgdmFyaWFibGVzWyJvbmUiXSA9IDE7Ci0gIHZhcmlhYmxlc1sidHdvIl0gPSAyOwotQH0KLQotY2FsY3h4X2RyaXZlcjo6fmNhbGN4eF9kcml2ZXIgKCkKLUB7Ci1AfQotCi12b2lkCi1jYWxjeHhfZHJpdmVyOjpwYXJzZSAoY29uc3Qgc3RkOjpzdHJpbmcgJmYpCi1AewotICBmaWxlID0gZjsKLSAgc2Nhbl9iZWdpbiAoKTsKLSAgeXk6OmNhbGN4eF9wYXJzZXIgcGFyc2VyICgqdGhpcyk7Ci0gIHBhcnNlci5zZXRfZGVidWdfbGV2ZWwgKHRyYWNlX3BhcnNpbmcpOwotICBwYXJzZXIucGFyc2UgKCk7Ci0gIHNjYW5fZW5kICgpOwotQH0KLQotdm9pZAotY2FsY3h4X2RyaXZlcjo6ZXJyb3IgKGNvbnN0IHl5Ojpsb2NhdGlvbiYgbCwgY29uc3Qgc3RkOjpzdHJpbmcmIG0pCi1AewotICBzdGQ6OmNlcnIgPDwgbCA8PCAiOiAiIDw8IG0gPDwgc3RkOjplbmRsOwotQH0KLQotdm9pZAotY2FsY3h4X2RyaXZlcjo6ZXJyb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBtKQotQHsKLSAgc3RkOjpjZXJyIDw8IG0gPDwgc3RkOjplbmRsOwotQH0KLUBlbmQgZXhhbXBsZQotCi1Abm9kZSBDYWxjKysgUGFyc2VyCi1Ac3Vic2VjdGlvbiBDYWxjKysgUGFyc2VyCi0KLVRoZSBwYXJzZXIgZGVmaW5pdGlvbiBmaWxlIEBmaWxle2NhbGMrKy1wYXJzZXIueXl9IHN0YXJ0cyBieSBhc2tpbmcgZm9yCi10aGUgQysrIExBTFIoMSkgc2tlbGV0b24sIHRoZSBjcmVhdGlvbiBvZiB0aGUgcGFyc2VyIGhlYWRlciBmaWxlLCBhbmQKLXNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgcGFyc2VyIGNsYXNzLiAgQmVjYXVzZSB0aGUgQysrIHNrZWxldG9uCi1jaGFuZ2VkIHNldmVyYWwgdGltZXMsIGl0IGlzIHNhZmVyIHRvIHJlcXVpcmUgdGhlIHZlcnNpb24geW91IGRlc2lnbmVkCi10aGUgZ3JhbW1hciBmb3IuCi0KLUBjb21tZW50IGZpbGU6IGNhbGMrKy1wYXJzZXIueXkKLUBleGFtcGxlCi0lc2tlbGV0b24gImxhbHIxLmNjIiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIC0qLSBDKysgLSotICovCi0lcmVxdWlyZSAiMi4xYSIKLSVkZWZpbmVzCi0lZGVmaW5lICJwYXJzZXJfY2xhc3NfbmFtZSIgImNhbGN4eF9wYXJzZXIiCi1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci1UaGVuIGNvbWUgdGhlIGRlY2xhcmF0aW9ucy9pbmNsdXNpb25zIG5lZWRlZCB0byBkZWZpbmUgdGhlCi1AY29kZXsldW5pb259LiAgQmVjYXVzZSB0aGUgcGFyc2VyIHVzZXMgdGhlIHBhcnNpbmcgZHJpdmVyIGFuZAotcmVjaXByb2NhbGx5LCBib3RoIGNhbm5vdCBpbmNsdWRlIHRoZSBoZWFkZXIgb2YgdGhlIG90aGVyLiAgQmVjYXVzZSB0aGUKLWRyaXZlcidzIGhlYWRlciBuZWVkcyBkZXRhaWxlZCBrbm93bGVkZ2UgYWJvdXQgdGhlIHBhcnNlciBjbGFzcyAoaW4KLXBhcnRpY3VsYXIgaXRzIGlubmVyIHR5cGVzKSwgaXQgaXMgdGhlIHBhcnNlcidzIGhlYWRlciB3aGljaCB3aWxsIHNpbXBseQotdXNlIGEgZm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgZHJpdmVyLgotCi1AY29tbWVudCBmaWxlOiBjYWxjKystcGFyc2VyLnl5Ci1AZXhhbXBsZQotJUB7Ci0jIGluY2x1ZGUgPHN0cmluZz4KLWNsYXNzIGNhbGN4eF9kcml2ZXI7Ci0lQH0KLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLVRoZSBkcml2ZXIgaXMgcGFzc2VkIGJ5IHJlZmVyZW5jZSB0byB0aGUgcGFyc2VyIGFuZCB0byB0aGUgc2Nhbm5lci4KLVRoaXMgcHJvdmlkZXMgYSBzaW1wbGUgYnV0IGVmZmVjdGl2ZSBwdXJlIGludGVyZmFjZSwgbm90IHJlbHlpbmcgb24KLWdsb2JhbCB2YXJpYWJsZXMuCi0KLUBjb21tZW50IGZpbGU6IGNhbGMrKy1wYXJzZXIueXkKLUBleGFtcGxlCi0vLyBUaGUgcGFyc2luZyBjb250ZXh0LgotJXBhcnNlLXBhcmFtIEB7IGNhbGN4eF9kcml2ZXImIGRyaXZlciBAfQotJWxleC1wYXJhbSAgIEB7IGNhbGN4eF9kcml2ZXImIGRyaXZlciBAfQotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotVGhlbiB3ZSByZXF1ZXN0IHRoZSBsb2NhdGlvbiB0cmFja2luZyBmZWF0dXJlLCBhbmQgaW5pdGlhbGl6ZSB0aGUKLWZpcnN0IGxvY2F0aW9uJ3MgZmlsZSBuYW1lLiAgQWZ0ZXJ3YXJkcyBuZXcgbG9jYXRpb25zIGFyZSBjb21wdXRlZAotcmVsYXRpdmVseSB0byB0aGUgcHJldmlvdXMgbG9jYXRpb25zOiB0aGUgZmlsZSBuYW1lIHdpbGwgYmUKLWF1dG9tYXRpY2FsbHkgcHJvcGFnYXRlZC4KLQotQGNvbW1lbnQgZmlsZTogY2FsYysrLXBhcnNlci55eQotQGV4YW1wbGUKLSVsb2NhdGlvbnMKLSVpbml0aWFsLWFjdGlvbgotQHsKLSAgLy8gSW5pdGlhbGl6ZSB0aGUgaW5pdGlhbCBsb2NhdGlvbi4KLSAgQEAkLmJlZ2luLmZpbGVuYW1lID0gQEAkLmVuZC5maWxlbmFtZSA9ICZkcml2ZXIuZmlsZTsKLUB9OwotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotVXNlIHRoZSB0d28gZm9sbG93aW5nIGRpcmVjdGl2ZXMgdG8gZW5hYmxlIHBhcnNlciB0cmFjaW5nIGFuZCB2ZXJib3NlCi1lcnJvciBtZXNzYWdlcy4KLQotQGNvbW1lbnQgZmlsZTogY2FsYysrLXBhcnNlci55eQotQGV4YW1wbGUKLSVkZWJ1ZwotJWVycm9yLXZlcmJvc2UKLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLVNlbWFudGljIHZhbHVlcyBjYW5ub3QgdXNlIGBgcmVhbCcnIG9iamVjdHMsIGJ1dCBvbmx5IHBvaW50ZXJzIHRvCi10aGVtLgotCi1AY29tbWVudCBmaWxlOiBjYWxjKystcGFyc2VyLnl5Ci1AZXhhbXBsZQotLy8gU3ltYm9scy4KLSV1bmlvbgotQHsKLSAgaW50ICAgICAgICAgIGl2YWw7Ci0gIHN0ZDo6c3RyaW5nICpzdmFsOwotQH07Ci1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci1UaGUgY29kZSBiZXR3ZWVuIEBzYW1weyVAe30gYW5kIEBzYW1weyVAfX0gYWZ0ZXIgdGhlIGludHJvZHVjdGlvbiBvZiB0aGUKLUBzYW1weyV1bmlvbn0gaXMgb3V0cHV0IGluIHRoZSBAZmlsZXsqLmNjfSBmaWxlOyBpdCBuZWVkcyBkZXRhaWxlZAota25vd2xlZGdlIGFib3V0IHRoZSBkcml2ZXIuCi0KLUBjb21tZW50IGZpbGU6IGNhbGMrKy1wYXJzZXIueXkKLUBleGFtcGxlCi0lQHsKLSMgaW5jbHVkZSAiY2FsYysrLWRyaXZlci5oaCIKLSVAfQotQGVuZCBleGFtcGxlCi0KLQotQG5vaW5kZW50Ci1UaGUgdG9rZW4gbnVtYmVyZWQgYXMgMCBjb3JyZXNwb25kcyB0byBlbmQgb2YgZmlsZTsgdGhlIGZvbGxvd2luZyBsaW5lCi1hbGxvd3MgZm9yIG5pY2VyIGVycm9yIG1lc3NhZ2VzIHJlZmVycmluZyB0byBgYGVuZCBvZiBmaWxlJycgaW5zdGVhZAotb2YgYGAkZW5kJycuICBTaW1pbGFybHkgdXNlciBmcmllbmRseSBuYW1lZCBhcmUgcHJvdmlkZWQgZm9yIGVhY2gKLXN5bWJvbC4gIE5vdGUgdGhhdCB0aGUgdG9rZW5zIG5hbWVzIGFyZSBwcmVmaXhlZCBieSBAY29kZXtUT0tFTl99IHRvCi1hdm9pZCBuYW1lIGNsYXNoZXMuCi0KLUBjb21tZW50IGZpbGU6IGNhbGMrKy1wYXJzZXIueXkKLUBleGFtcGxlCi0ldG9rZW4gICAgICAgIEVORCAgICAgIDAgImVuZCBvZiBmaWxlIgotJXRva2VuICAgICAgICBBU1NJR04gICAgICI6PSIKLSV0b2tlbiA8c3ZhbD4gSURFTlRJRklFUiAiaWRlbnRpZmllciIKLSV0b2tlbiA8aXZhbD4gTlVNQkVSICAgICAibnVtYmVyIgotJXR5cGUgIDxpdmFsPiBleHAgICAgICAgICJleHByZXNzaW9uIgotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotVG8gZW5hYmxlIG1lbW9yeSBkZWFsbG9jYXRpb24gZHVyaW5nIGVycm9yIHJlY292ZXJ5LCB1c2UKLUBjb2RleyVkZXN0cnVjdG9yfS4KLQotQGMgRklYTUU6IERvY3VtZW50ICVwcmludGVyLCBhbmQgbWVudGlvbiB0aGF0IGl0IHRha2VzIGEgYnJhY2VkLWNvZGUgb3BlcmFuZC4KLUBjb21tZW50IGZpbGU6IGNhbGMrKy1wYXJzZXIueXkKLUBleGFtcGxlCi0lcHJpbnRlciAgICBAeyBkZWJ1Z19zdHJlYW0gKCkgPDwgKiQkOyBAfSAiaWRlbnRpZmllciIKLSVkZXN0cnVjdG9yIEB7IGRlbGV0ZSAkJDsgQH0gImlkZW50aWZpZXIiCi0KLSVwcmludGVyICAgIEB7IGRlYnVnX3N0cmVhbSAoKSA8PCAkJDsgQH0gIm51bWJlciIgImV4cHJlc3Npb24iCi1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci1UaGUgZ3JhbW1hciBpdHNlbGYgaXMgc3RyYWlnaHRmb3J3YXJkLgotCi1AY29tbWVudCBmaWxlOiBjYWxjKystcGFyc2VyLnl5Ci1AZXhhbXBsZQotJSUKLSVzdGFydCB1bml0OwotdW5pdDogYXNzaWdubWVudHMgZXhwICBAeyBkcml2ZXIucmVzdWx0ID0gJDI7IEB9OwotCi1hc3NpZ25tZW50czogYXNzaWdubWVudHMgYXNzaWdubWVudCBAe0B9Ci0gICAgICAgICAgIHwgLyogTm90aGluZy4gICovICAgICAgICBAe0B9OwotCi1hc3NpZ25tZW50OiAiaWRlbnRpZmllciIgIjo9IiBleHAgQHsgZHJpdmVyLnZhcmlhYmxlc1sqJDFdID0gJDM7IEB9OwotCi0lbGVmdCAnKycgJy0nOwotJWxlZnQgJyonICcvJzsKLWV4cDogZXhwICcrJyBleHAgICBAeyAkJCA9ICQxICsgJDM7IEB9Ci0gICB8IGV4cCAnLScgZXhwICAgQHsgJCQgPSAkMSAtICQzOyBAfQotICAgfCBleHAgJyonIGV4cCAgIEB7ICQkID0gJDEgKiAkMzsgQH0KLSAgIHwgZXhwICcvJyBleHAgICBAeyAkJCA9ICQxIC8gJDM7IEB9Ci0gICB8ICJpZGVudGlmaWVyIiAgQHsgJCQgPSBkcml2ZXIudmFyaWFibGVzWyokMV07IEB9Ci0gICB8ICJudW1iZXIiICAgICAgQHsgJCQgPSAkMTsgQH07Ci0lJQotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotRmluYWxseSB0aGUgQGNvZGV7ZXJyb3J9IG1lbWJlciBmdW5jdGlvbiByZWdpc3RlcnMgdGhlIGVycm9ycyB0byB0aGUKLWRyaXZlci4KLQotQGNvbW1lbnQgZmlsZTogY2FsYysrLXBhcnNlci55eQotQGV4YW1wbGUKLXZvaWQKLXl5OjpjYWxjeHhfcGFyc2VyOjplcnJvciAoY29uc3QgeXk6OmNhbGN4eF9wYXJzZXI6OmxvY2F0aW9uX3R5cGUmIGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtKQotQHsKLSAgZHJpdmVyLmVycm9yIChsLCBtKTsKLUB9Ci1AZW5kIGV4YW1wbGUKLQotQG5vZGUgQ2FsYysrIFNjYW5uZXIKLUBzdWJzZWN0aW9uIENhbGMrKyBTY2FubmVyCi0KLVRoZSBGbGV4IHNjYW5uZXIgZmlyc3QgaW5jbHVkZXMgdGhlIGRyaXZlciBkZWNsYXJhdGlvbiwgdGhlbiB0aGUKLXBhcnNlcidzIHRvIGdldCB0aGUgc2V0IG9mIGRlZmluZWQgdG9rZW5zLgotCi1AY29tbWVudCBmaWxlOiBjYWxjKystc2Nhbm5lci5sbAotQGV4YW1wbGUKLSVAeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLSotIEMrKyAtKi0gKi8KLSMgaW5jbHVkZSA8Y3N0ZGxpYj4KLSMgaW5jbHVkZSA8ZXJybm8uaD4KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jIGluY2x1ZGUgPHN0cmluZz4KLSMgaW5jbHVkZSAiY2FsYysrLWRyaXZlci5oaCIKLSMgaW5jbHVkZSAiY2FsYysrLXBhcnNlci5oaCIKLQotLyogV29yayBhcm91bmQgYW4gaW5jb21wYXRpYmlsaXR5IGluIGZsZXggKGF0IGxlYXN0IHZlcnNpb25zCi0gICAyLjUuMzEgdGhyb3VnaCAyLjUuMzMpOiBpdCBnZW5lcmF0ZXMgY29kZSB0aGF0IGRvZXMKLSAgIG5vdCBjb25mb3JtIHRvIEM4OS4gIFNlZSBEZWJpYW4gYnVnIDMzMzIzMQotICAgPGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvY2dpLWJpbi9idWdyZXBvcnQuY2dpP2J1Zz0zMzMyMzE+LiAgKi8KLSMgdW5kZWYgeXl3cmFwCi0jIGRlZmluZSB5eXdyYXAoKSAxCi0KLS8qIEJ5IGRlZmF1bHQgeXlsZXggcmV0dXJucyBpbnQsIHdlIHVzZSB0b2tlbl90eXBlLgotICAgVW5mb3J0dW5hdGVseSB5eXRlcm1pbmF0ZSBieSBkZWZhdWx0IHJldHVybnMgMCwgd2hpY2ggaXMKLSAgIG5vdCBvZiB0b2tlbl90eXBlLiAgKi8KLSNkZWZpbmUgeXl0ZXJtaW5hdGUoKSByZXR1cm4gdG9rZW46OkVORAotJUB9Ci1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci1CZWNhdXNlIHRoZXJlIGlzIG5vIEBjb2RleyNpbmNsdWRlfS1saWtlIGZlYXR1cmUgd2UgZG9uJ3QgbmVlZAotQGNvZGV7eXl3cmFwfSwgd2UgZG9uJ3QgbmVlZCBAY29kZXt1bnB1dH0gZWl0aGVyLCBhbmQgd2UgcGFyc2UgYW4KLWFjdHVhbCBmaWxlLCB0aGlzIGlzIG5vdCBhbiBpbnRlcmFjdGl2ZSBzZXNzaW9uIHdpdGggdGhlIHVzZXIuCi1GaW5hbGx5IHdlIGVuYWJsZSB0aGUgc2Nhbm5lciB0cmFjaW5nIGZlYXR1cmVzLgotCi1AY29tbWVudCBmaWxlOiBjYWxjKystc2Nhbm5lci5sbAotQGV4YW1wbGUKLSVvcHRpb24gbm95eXdyYXAgbm91bnB1dCBiYXRjaCBkZWJ1ZwotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotQWJicmV2aWF0aW9ucyBhbGxvdyBmb3IgbW9yZSByZWFkYWJsZSBydWxlcy4KLQotQGNvbW1lbnQgZmlsZTogY2FsYysrLXNjYW5uZXIubGwKLUBleGFtcGxlCi1pZCAgICBbYS16QS1aXVthLXpBLVpfMC05XSoKLWludCAgIFswLTldKwotYmxhbmsgWyBcdF0KLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLVRoZSBmb2xsb3dpbmcgcGFyYWdyYXBoIHN1ZmZpY2VzIHRvIHRyYWNrIGxvY2F0aW9ucyBhY2N1cmF0ZWx5LiAgRWFjaAotdGltZSBAY29kZXt5eWxleH0gaXMgaW52b2tlZCwgdGhlIGJlZ2luIHBvc2l0aW9uIGlzIG1vdmVkIG9udG8gdGhlIGVuZAotcG9zaXRpb24uICBUaGVuIHdoZW4gYSBwYXR0ZXJuIGlzIG1hdGNoZWQsIHRoZSBlbmQgcG9zaXRpb24gaXMKLWFkdmFuY2VkIG9mIGl0cyB3aWR0aC4gIEluIGNhc2UgaXQgbWF0Y2hlZCBlbmRzIG9mIGxpbmVzLCB0aGUgZW5kCi1jdXJzb3IgaXMgYWRqdXN0ZWQsIGFuZCBlYWNoIHRpbWUgYmxhbmtzIGFyZSBtYXRjaGVkLCB0aGUgYmVnaW4gY3Vyc29yCi1pcyBtb3ZlZCBvbnRvIHRoZSBlbmQgY3Vyc29yIHRvIGVmZmVjdGl2ZWx5IGlnbm9yZSB0aGUgYmxhbmtzCi1wcmVjZWRpbmcgdG9rZW5zLiAgQ29tbWVudHMgd291bGQgYmUgdHJlYXRlZCBlcXVhbGx5LgotCi1AY29tbWVudCBmaWxlOiBjYWxjKystc2Nhbm5lci5sbAotQGV4YW1wbGUKLSVAewotIyBkZWZpbmUgWVlfVVNFUl9BQ1RJT04gIHl5bGxvYy0+Y29sdW1ucyAoeXlsZW5nKTsKLSVAfQotJSUKLSVAewotICB5eWxsb2MtPnN0ZXAgKCk7Ci0lQH0KLUB7YmxhbmtAfSsgICB5eWxsb2MtPnN0ZXAgKCk7Ci1bXG5dKyAgICAgIHl5bGxvYy0+bGluZXMgKHl5bGVuZyk7IHl5bGxvYy0+c3RlcCAoKTsKLUBlbmQgZXhhbXBsZQotCi1Abm9pbmRlbnQKLVRoZSBydWxlcyBhcmUgc2ltcGxlLCBqdXN0IG5vdGUgdGhlIHVzZSBvZiB0aGUgZHJpdmVyIHRvIHJlcG9ydCBlcnJvcnMuCi1JdCBpcyBjb252ZW5pZW50IHRvIHVzZSBhIHR5cGVkZWYgdG8gc2hvcnRlbgotQGNvZGV7eXk6OmNhbGN4eF9wYXJzZXI6OnRva2VuOjppZGVudGlmaWVyfSBpbnRvCi1AY29kZXt0b2tlbjo6aWRlbnRpZmllcn0gZm9yIGluc3RhbmNlLgotCi1AY29tbWVudCBmaWxlOiBjYWxjKystc2Nhbm5lci5sbAotQGV4YW1wbGUKLSVAewotICB0eXBlZGVmIHl5OjpjYWxjeHhfcGFyc2VyOjp0b2tlbiB0b2tlbjsKLSVAfQotICAgICAgICAgICAvKiBDb252ZXJ0IGludHMgdG8gdGhlIGFjdHVhbCB0eXBlIG9mIHRva2Vucy4gICovCi1bLSsqL10gICAgIHJldHVybiB5eTo6Y2FsY3h4X3BhcnNlcjo6dG9rZW5fdHlwZSAoeXl0ZXh0WzBdKTsKLSI6PSIgICAgICAgcmV0dXJuIHRva2VuOjpBU1NJR047Ci1Ae2ludEB9ICAgICAgQHsKLSAgZXJybm8gPSAwOwotICBsb25nIG4gPSBzdHJ0b2wgKHl5dGV4dCwgTlVMTCwgMTApOwotICBpZiAoISAoSU5UX01JTiA8PSBuICYmIG4gPD0gSU5UX01BWCAmJiBlcnJubyAhPSBFUkFOR0UpKQotICAgIGRyaXZlci5lcnJvciAoKnl5bGxvYywgImludGVnZXIgaXMgb3V0IG9mIHJhbmdlIik7Ci0gIHl5bHZhbC0+aXZhbCA9IG47Ci0gIHJldHVybiB0b2tlbjo6TlVNQkVSOwotQH0KLUB7aWRAfSAgICAgICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJpbmcgKHl5dGV4dCk7IHJldHVybiB0b2tlbjo6SURFTlRJRklFUjsKLS4gICAgICAgICAgZHJpdmVyLmVycm9yICgqeXlsbG9jLCAiaW52YWxpZCBjaGFyYWN0ZXIiKTsKLSUlCi1AZW5kIGV4YW1wbGUKLQotQG5vaW5kZW50Ci1GaW5hbGx5LCBiZWNhdXNlIHRoZSBzY2FubmVyIHJlbGF0ZWQgZHJpdmVyJ3MgbWVtYmVyIGZ1bmN0aW9uIGRlcGVuZAotb24gdGhlIHNjYW5uZXIncyBkYXRhLCBpdCBpcyBzaW1wbGVyIHRvIGltcGxlbWVudCB0aGVtIGluIHRoaXMgZmlsZS4KLQotQGNvbW1lbnQgZmlsZTogY2FsYysrLXNjYW5uZXIubGwKLUBleGFtcGxlCi12b2lkCi1jYWxjeHhfZHJpdmVyOjpzY2FuX2JlZ2luICgpCi1AewotICB5eV9mbGV4X2RlYnVnID0gdHJhY2Vfc2Nhbm5pbmc7Ci0gIGlmICghKHl5aW4gPSBmb3BlbiAoZmlsZS5jX3N0ciAoKSwgInIiKSkpCi0gICAgZXJyb3IgKHN0ZDo6c3RyaW5nICgiY2Fubm90IG9wZW4gIikgKyBmaWxlKTsKLUB9Ci0KLXZvaWQKLWNhbGN4eF9kcml2ZXI6OnNjYW5fZW5kICgpCi1AewotICBmY2xvc2UgKHl5aW4pOwotQH0KLUBlbmQgZXhhbXBsZQotCi1Abm9kZSBDYWxjKysgVG9wIExldmVsCi1Ac3Vic2VjdGlvbiBDYWxjKysgVG9wIExldmVsCi0KLVRoZSB0b3AgbGV2ZWwgZmlsZSwgQGZpbGV7Y2FsYysrLmNjfSwgcG9zZXMgbm8gcHJvYmxlbS4KLQotQGNvbW1lbnQgZmlsZTogY2FsYysrLmNjCi1AZXhhbXBsZQotI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgImNhbGMrKy1kcml2ZXIuaGgiCi0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLUB7Ci0gIGNhbGN4eF9kcml2ZXIgZHJpdmVyOwotICBmb3IgKCsrYXJndjsgYXJndlswXTsgKythcmd2KQotICAgIGlmICgqYXJndiA9PSBzdGQ6OnN0cmluZyAoIi1wIikpCi0gICAgICBkcml2ZXIudHJhY2VfcGFyc2luZyA9IHRydWU7Ci0gICAgZWxzZSBpZiAoKmFyZ3YgPT0gc3RkOjpzdHJpbmcgKCItcyIpKQotICAgICAgZHJpdmVyLnRyYWNlX3NjYW5uaW5nID0gdHJ1ZTsKLSAgICBlbHNlCi0gICAgICBAewotCWRyaXZlci5wYXJzZSAoKmFyZ3YpOwotCXN0ZDo6Y291dCA8PCBkcml2ZXIucmVzdWx0IDw8IHN0ZDo6ZW5kbDsKLSAgICAgIEB9Ci1AfQotQGVuZCBleGFtcGxlCi0KLUBjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gRkFRCi0KLUBub2RlIEZBUQotQGNoYXB0ZXIgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMKLUBjaW5kZXggZnJlcXVlbnRseSBhc2tlZCBxdWVzdGlvbnMKLUBjaW5kZXggcXVlc3Rpb25zCi0KLVNldmVyYWwgcXVlc3Rpb25zIGFib3V0IEJpc29uIGNvbWUgdXAgb2NjYXNpb25hbGx5LiAgSGVyZSBzb21lIG9mIHRoZW0KLWFyZSBhZGRyZXNzZWQuCi0KLUBtZW51Ci0qIE1lbW9yeSBFeGhhdXN0ZWQ6OiAgICAgICAgICAgIEJyZWFraW5nIHRoZSBTdGFjayBMaW1pdHMKLSogSG93IENhbiBJIFJlc2V0IHRoZSBQYXJzZXI6OiAgQGNvZGV7eXlwYXJzZX0gS2VlcHMgc29tZSBTdGF0ZQotKiBTdHJpbmdzIGFyZSBEZXN0cm95ZWQ6OiAgICAgICBAY29kZXt5eWx2YWx9IExvc2VzIFRyYWNrIG9mIFN0cmluZ3MKLSogSW1wbGVtZW50aW5nIEdvdG9zL0xvb3BzOjogICAgQ29udHJvbCBGbG93IGluIHRoZSBDYWxjdWxhdG9yCi0qIE11bHRpcGxlIHN0YXJ0LXN5bWJvbHM6OiAgICAgIEZhY3RvcmluZyBjbG9zZWx5IHJlbGF0ZWQgZ3JhbW1hcnMKLSogU2VjdXJlPyAgQ29uZm9ybT86OiAgICAgICAgICAgSXMgQmlzb24gQGFjcm9ueW17UE9TSVh9IHNhZmU/Ci0qIEkgY2FuJ3QgYnVpbGQgQmlzb246OiAgICAgICAgIFRyb3VibGVzaG9vdGluZwotKiBXaGVyZSBjYW4gSSBmaW5kIGhlbHA/OjogICAgICBUcm91Ymxlc2hvdXRpbmcKLSogQnVnIFJlcG9ydHM6OiAgICAgICAgICAgICAgICAgVHJvdWJsZXJlcG9ydGluZwotKiBPdGhlciBMYW5ndWFnZXM6OiAgICAgICAgICAgICBQYXJzZXJzIGluIEphdmEgYW5kIG90aGVycwotKiBCZXRhIFRlc3Rpbmc6OiAgICAgICAgICAgICAgICBFeHBlcmltZW50aW5nIGRldmVsb3BtZW50IHZlcnNpb25zCi0qIE1haWxpbmcgTGlzdHM6OiAgICAgICAgICAgICAgIE1lZXRpbmcgb3RoZXIgQmlzb24gdXNlcnMKLUBlbmQgbWVudQotCi1Abm9kZSBNZW1vcnkgRXhoYXVzdGVkCi1Ac2VjdGlvbiBNZW1vcnkgRXhoYXVzdGVkCi0KLUBkaXNwbGF5Ci1NeSBwYXJzZXIgcmV0dXJucyB3aXRoIGVycm9yIHdpdGggYSBAc2FtcHttZW1vcnkgZXhoYXVzdGVkfQotbWVzc2FnZS4gIFdoYXQgY2FuIEkgZG8/Ci1AZW5kIGRpc3BsYXkKLQotVGhpcyBxdWVzdGlvbiBpcyBhbHJlYWR5IGFkZHJlc3NlZCBlbHNld2hlcmUsIEB4cmVme1JlY3Vyc2lvbiwKLSxSZWN1cnNpdmUgUnVsZXN9LgotCi1Abm9kZSBIb3cgQ2FuIEkgUmVzZXQgdGhlIFBhcnNlcgotQHNlY3Rpb24gSG93IENhbiBJIFJlc2V0IHRoZSBQYXJzZXIKLQotVGhlIGZvbGxvd2luZyBwaGVub21lbm9uIGhhcyBzZXZlcmFsIHN5bXB0b21zLCByZXN1bHRpbmcgaW4gdGhlCi1mb2xsb3dpbmcgdHlwaWNhbCBxdWVzdGlvbnM6Ci0KLUBkaXNwbGF5Ci1JIGludm9rZSBAY29kZXt5eXBhcnNlfSBzZXZlcmFsIHRpbWVzLCBhbmQgb24gY29ycmVjdCBpbnB1dCBpdCB3b3JrcwotcHJvcGVybHk7IGJ1dCB3aGVuIGEgcGFyc2UgZXJyb3IgaXMgZm91bmQsIGFsbCB0aGUgb3RoZXIgY2FsbHMgZmFpbAotdG9vLiAgSG93IGNhbiBJIHJlc2V0IHRoZSBlcnJvciBmbGFnIG9mIEBjb2Rle3l5cGFyc2V9PwotQGVuZCBkaXNwbGF5Ci0KLUBub2luZGVudAotb3IKLQotQGRpc3BsYXkKLU15IHBhcnNlciBpbmNsdWRlcyBzdXBwb3J0IGZvciBhbiBAc2FtcHsjaW5jbHVkZX0tbGlrZSBmZWF0dXJlLCBpbgotd2hpY2ggY2FzZSBJIHJ1biBAY29kZXt5eXBhcnNlfSBmcm9tIEBjb2Rle3l5cGFyc2V9LiAgVGhpcyBmYWlscwotYWx0aG91Z2ggSSBkaWQgc3BlY2lmeSBJIG5lZWRlZCBhIEBjb2RleyVwdXJlLXBhcnNlcn0uCi1AZW5kIGRpc3BsYXkKLQotVGhlc2UgcHJvYmxlbXMgdHlwaWNhbGx5IGNvbWUgbm90IGZyb20gQmlzb24gaXRzZWxmLCBidXQgZnJvbQotTGV4LWdlbmVyYXRlZCBzY2FubmVycy4gIEJlY2F1c2UgdGhlc2Ugc2Nhbm5lcnMgdXNlIGxhcmdlIGJ1ZmZlcnMgZm9yCi1zcGVlZCwgdGhleSBtaWdodCBub3Qgbm90aWNlIGEgY2hhbmdlIG9mIGlucHV0IGZpbGUuICBBcyBhCi1kZW1vbnN0cmF0aW9uLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIHNvdXJjZSBmaWxlLAotQGZpbGV7Zmlyc3QtbGluZS5sfToKLQotQHZlcmJhdGltCi0lewotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0lfQotJSUKLS4qXG4gICAgRUNITzsgcmV0dXJuIDE7Ci0lJQotaW50Ci15eXBhcnNlIChjaGFyIGNvbnN0ICpmaWxlKQotewotICB5eWluID0gZm9wZW4gKGZpbGUsICJyIik7Ci0gIGlmICgheXlpbikKLSAgICBleGl0ICgyKTsKLSAgLyogT25lIHRva2VuIG9ubHkuICAqLwotICB5eWxleCAoKTsKLSAgaWYgKGZjbG9zZSAoeXlpbikgIT0gMCkKLSAgICBleGl0ICgzKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludAotbWFpbiAodm9pZCkKLXsKLSAgeXlwYXJzZSAoImlucHV0Iik7Ci0gIHl5cGFyc2UgKCJpbnB1dCIpOwotICByZXR1cm4gMDsKLX0KLUBlbmQgdmVyYmF0aW0KLQotQG5vaW5kZW50Ci1JZiB0aGUgZmlsZSBAZmlsZXtpbnB1dH0gY29udGFpbnMKLQotQHZlcmJhdGltCi1pbnB1dDoxOiBIZWxsbywKLWlucHV0OjI6IFdvcmxkIQotQGVuZCB2ZXJiYXRpbQotCi1Abm9pbmRlbnQKLXRoZW4gaW5zdGVhZCBvZiBnZXR0aW5nIHRoZSBmaXJzdCBsaW5lIHR3aWNlLCB5b3UgZ2V0OgotCi1AZXhhbXBsZQotJCBAa2Jke2ZsZXggLW9maXJzdC1saW5lLmMgZmlyc3QtbGluZS5sfQotJCBAa2Jke2djYyAgLW9maXJzdC1saW5lICAgZmlyc3QtbGluZS5jIC1sbH0KLSQgQGtiZHsuL2ZpcnN0LWxpbmV9Ci1pbnB1dDoxOiBIZWxsbywKLWlucHV0OjI6IFdvcmxkIQotQGVuZCBleGFtcGxlCi0KLVRoZXJlZm9yZSwgd2hlbmV2ZXIgeW91IGNoYW5nZSBAY29kZXt5eWlufSwgeW91IG11c3QgdGVsbCB0aGUKLUxleC1nZW5lcmF0ZWQgc2Nhbm5lciB0byBkaXNjYXJkIGl0cyBjdXJyZW50IGJ1ZmZlciBhbmQgc3dpdGNoIHRvIHRoZQotbmV3IG9uZS4gIFRoaXMgZGVwZW5kcyB1cG9uIHlvdXIgaW1wbGVtZW50YXRpb24gb2YgTGV4OyBzZWUgaXRzCi1kb2N1bWVudGF0aW9uIGZvciBtb3JlLiAgRm9yIEZsZXgsIGl0IHN1ZmZpY2VzIHRvIGNhbGwKLUBzYW1we1lZX0ZMVVNIX0JVRkZFUn0gYWZ0ZXIgZWFjaCBjaGFuZ2UgdG8gQGNvZGV7eXlpbn0uICBJZiB5b3VyCi1GbGV4LWdlbmVyYXRlZCBzY2FubmVyIG5lZWRzIHRvIHJlYWQgZnJvbSBzZXZlcmFsIGlucHV0IHN0cmVhbXMgdG8KLWhhbmRsZSBmZWF0dXJlcyBsaWtlIGluY2x1ZGUgZmlsZXMsIHlvdSBtaWdodCBjb25zaWRlciB1c2luZyBGbGV4Ci1mdW5jdGlvbnMgbGlrZSBAc2FtcHt5eV9zd2l0Y2hfdG9fYnVmZmVyfSB0aGF0IG1hbmlwdWxhdGUgbXVsdGlwbGUKLWlucHV0IGJ1ZmZlcnMuCi0KLUlmIHlvdXIgRmxleC1nZW5lcmF0ZWQgc2Nhbm5lciB1c2VzIHN0YXJ0IGNvbmRpdGlvbnMgKEBweHJlZntTdGFydAotY29uZGl0aW9ucywgLCBTdGFydCBjb25kaXRpb25zLCBmbGV4LCBUaGUgRmxleCBNYW51YWx9KSwgeW91IG1pZ2h0Ci1hbHNvIHdhbnQgdG8gcmVzZXQgdGhlIHNjYW5uZXIncyBzdGF0ZSwgaS5lLiwgZ28gYmFjayB0byB0aGUgaW5pdGlhbAotc3RhcnQgY29uZGl0aW9uLCB0aHJvdWdoIGEgY2FsbCB0byBAc2FtcHtCRUdJTiAoMCl9LgotCi1Abm9kZSBTdHJpbmdzIGFyZSBEZXN0cm95ZWQKLUBzZWN0aW9uIFN0cmluZ3MgYXJlIERlc3Ryb3llZAotCi1AZGlzcGxheQotTXkgcGFyc2VyIHNlZW1zIHRvIGRlc3Ryb3kgb2xkIHN0cmluZ3MsIG9yIG1heWJlIGl0IGxvc2VzIHRyYWNrIG9mCi10aGVtLiAgSW5zdGVhZCBvZiByZXBvcnRpbmcgQHNhbXB7ImZvbyIsICJiYXIifSwgaXQgcmVwb3J0cwotQHNhbXB7ImJhciIsICJiYXIifSwgb3IgZXZlbiBAc2FtcHsiZm9vXG5iYXIiLCAiYmFyIn0uCi1AZW5kIGRpc3BsYXkKLQotVGhpcyBlcnJvciBpcyBwcm9iYWJseSB0aGUgc2luZ2xlIG1vc3QgZnJlcXVlbnQgYGBidWcgcmVwb3J0Jycgc2VudCB0bwotQmlzb24gbGlzdHMsIGJ1dCBpcyBvbmx5IGNvbmNlcm5lZCB3aXRoIGEgbWlzdW5kZXJzdGFuZGluZyBvZiB0aGUgcm9sZQotb2YgdGhlIHNjYW5uZXIuICBDb25zaWRlciB0aGUgZm9sbG93aW5nIExleCBjb2RlOgotCi1AdmVyYmF0aW0KLSV7Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLWNoYXIgKnl5bHZhbCA9IE5VTEw7Ci0lfQotJSUKLS4qICAgIHl5bHZhbCA9IHl5dGV4dDsgcmV0dXJuIDE7Ci1cbiAgICAvKiBJR05PUkUgKi8KLSUlCi1pbnQKLW1haW4gKCkKLXsKLSAgLyogU2ltaWxhciB0byB1c2luZyAkMSwgJDIgaW4gYSBCaXNvbiBhY3Rpb24uICAqLwotICBjaGFyICpmc3QgPSAoeXlsZXggKCksIHl5bHZhbCk7Ci0gIGNoYXIgKnNuZCA9ICh5eWxleCAoKSwgeXlsdmFsKTsKLSAgcHJpbnRmICgiXCIlc1wiLCBcIiVzXCJcbiIsIGZzdCwgc25kKTsKLSAgcmV0dXJuIDA7Ci19Ci1AZW5kIHZlcmJhdGltCi0KLUlmIHlvdSBjb21waWxlIGFuZCBydW4gdGhpcyBjb2RlLCB5b3UgZ2V0OgotCi1AZXhhbXBsZQotJCBAa2Jke2ZsZXggLW9zcGxpdC1saW5lcy5jIHNwbGl0LWxpbmVzLmx9Ci0kIEBrYmR7Z2NjICAtb3NwbGl0LWxpbmVzICAgc3BsaXQtbGluZXMuYyAtbGx9Ci0kIEBrYmR7cHJpbnRmICdvbmVcbnR3b1xuJyB8IC4vc3BsaXQtbGluZXN9Ci0ib25lCi10d28iLCAidHdvIgotQGVuZCBleGFtcGxlCi0KLUBub2luZGVudAotdGhpcyBpcyBiZWNhdXNlIEBjb2Rle3l5dGV4dH0gaXMgYSBidWZmZXIgcHJvdmlkZWQgZm9yIEBlbXBoe3JlYWRpbmd9Ci1pbiB0aGUgYWN0aW9uLCBidXQgaWYgeW91IHdhbnQgdG8ga2VlcCBpdCwgeW91IGhhdmUgdG8gZHVwbGljYXRlIGl0Ci0oZS5nLiwgdXNpbmcgQGNvZGV7c3RyZHVwfSkuICBOb3RlIHRoYXQgdGhlIG91dHB1dCBtYXkgZGVwZW5kIG9uIGhvdwoteW91ciBpbXBsZW1lbnRhdGlvbiBvZiBMZXggaGFuZGxlcyBAY29kZXt5eXRleHR9LiAgRm9yIGluc3RhbmNlLCB3aGVuCi1naXZlbiB0aGUgTGV4IGNvbXBhdGliaWxpdHkgb3B0aW9uIEBvcHRpb257LWx9ICh3aGljaCB0cmlnZ2VycyB0aGUKLW9wdGlvbiBAc2FtcHslYXJyYXl9KSBGbGV4IGdlbmVyYXRlcyBhIGRpZmZlcmVudCBiZWhhdmlvcjoKLQotQGV4YW1wbGUKLSQgQGtiZHtmbGV4IC1sIC1vc3BsaXQtbGluZXMuYyBzcGxpdC1saW5lcy5sfQotJCBAa2Jke2djYyAgICAgLW9zcGxpdC1saW5lcyAgIHNwbGl0LWxpbmVzLmMgLWxsfQotJCBAa2Jke3ByaW50ZiAnb25lXG50d29cbicgfCAuL3NwbGl0LWxpbmVzfQotInR3byIsICJ0d28iCi1AZW5kIGV4YW1wbGUKLQotCi1Abm9kZSBJbXBsZW1lbnRpbmcgR290b3MvTG9vcHMKLUBzZWN0aW9uIEltcGxlbWVudGluZyBHb3Rvcy9Mb29wcwotCi1AZGlzcGxheQotTXkgc2ltcGxlIGNhbGN1bGF0b3Igc3VwcG9ydHMgdmFyaWFibGVzLCBhc3NpZ25tZW50cywgYW5kIGZ1bmN0aW9ucywKLWJ1dCBob3cgY2FuIEkgaW1wbGVtZW50IGdvdG9zLCBvciBsb29wcz8KLUBlbmQgZGlzcGxheQotCi1BbHRob3VnaCB2ZXJ5IHBlZGFnb2dpY2FsLCB0aGUgZXhhbXBsZXMgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50IGJsdXIKLXRoZSBkaXN0aW5jdGlvbiB0byBtYWtlIGJldHdlZW4gdGhlIHBhcnNlci0tLXdob3NlIGpvYiBpcyB0byByZWNvdmVyCi10aGUgc3RydWN0dXJlIG9mIGEgdGV4dCBhbmQgdG8gdHJhbnNtaXQgaXQgdG8gc3Vic2VxdWVudCBtb2R1bGVzIG9mCi10aGUgcHJvZ3JhbS0tLWFuZCB0aGUgcHJvY2Vzc2luZyAoc3VjaCBhcyB0aGUgZXhlY3V0aW9uKSBvZiB0aGlzCi1zdHJ1Y3R1cmUuICBUaGlzIHdvcmtzIHdlbGwgd2l0aCBzbyBjYWxsZWQgc3RyYWlnaHQgbGluZSBwcm9ncmFtcywKLWkuZS4sIHByZWNpc2VseSB0aG9zZSB0aGF0IGhhdmUgYSBzdHJhaWdodGZvcndhcmQgZXhlY3V0aW9uIG1vZGVsOgotZXhlY3V0ZSBzaW1wbGUgaW5zdHJ1Y3Rpb25zIG9uZSBhZnRlciB0aGUgb3RoZXJzLgotCi1AY2luZGV4IGFic3RyYWN0IHN5bnRheCB0cmVlCi1AY2luZGV4IEBhY3Jvbnlte0FTVH0KLUlmIHlvdSB3YW50IGEgcmljaGVyIG1vZGVsLCB5b3Ugd2lsbCBwcm9iYWJseSBuZWVkIHRvIHVzZSB0aGUgcGFyc2VyCi10byBjb25zdHJ1Y3QgYSB0cmVlIHRoYXQgZG9lcyByZXByZXNlbnQgdGhlIHN0cnVjdHVyZSBpdCBoYXMKLXJlY292ZXJlZDsgdGhpcyB0cmVlIGlzIHVzdWFsbHkgY2FsbGVkIHRoZSBAZGZue2Fic3RyYWN0IHN5bnRheCB0cmVlfSwKLW9yIEBkZm57QGFjcm9ueW17QVNUfX0gZm9yIHNob3J0LiAgVGhlbiwgd2Fsa2luZyB0aHJvdWdoIHRoaXMgdHJlZSwKLXRyYXZlcnNpbmcgaXQgaW4gdmFyaW91cyB3YXlzLCB3aWxsIGVuYWJsZSB0cmVhdG1lbnRzIHN1Y2ggYXMgaXRzCi1leGVjdXRpb24gb3IgaXRzIHRyYW5zbGF0aW9uLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhbiBpbnRlcnByZXRlciBvciBhCi1jb21waWxlci4KLQotVGhpcyB0b3BpYyBpcyB3YXkgYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzIG1hbnVhbCwgYW5kIHRoZSByZWFkZXIgaXMKLWludml0ZWQgdG8gY29uc3VsdCB0aGUgZGVkaWNhdGVkIGxpdGVyYXR1cmUuCi0KLQotQG5vZGUgTXVsdGlwbGUgc3RhcnQtc3ltYm9scwotQHNlY3Rpb24gTXVsdGlwbGUgc3RhcnQtc3ltYm9scwotCi1AZGlzcGxheQotSSBoYXZlIHNldmVyYWwgY2xvc2VseSByZWxhdGVkIGdyYW1tYXJzLCBhbmQgSSB3b3VsZCBsaWtlIHRvIHNoYXJlIHRoZWlyCi1pbXBsZW1lbnRhdGlvbnMuICBJbiBmYWN0LCBJIGNvdWxkIHVzZSBhIHNpbmdsZSBncmFtbWFyIGJ1dCB3aXRoCi1tdWx0aXBsZSBlbnRyeSBwb2ludHMuCi1AZW5kIGRpc3BsYXkKLQotQmlzb24gZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBzdGFydC1zeW1ib2xzLCBidXQgdGhlcmUgaXMgYSB2ZXJ5Ci1zaW1wbGUgbWVhbnMgdG8gc2ltdWxhdGUgdGhlbS4gIElmIEBjb2Rle2Zvb30gYW5kIEBjb2Rle2Jhcn0gYXJlIHRoZSB0d28KLXBzZXVkbyBzdGFydC1zeW1ib2xzLCB0aGVuIGludHJvZHVjZSB0d28gbmV3IHRva2Vucywgc2F5Ci1AY29kZXtTVEFSVF9GT099IGFuZCBAY29kZXtTVEFSVF9CQVJ9LCBhbmQgdXNlIHRoZW0gYXMgc3dpdGNoZXMgZnJvbSB0aGUKLXJlYWwgc3RhcnQtc3ltYm9sOgotCi1AZXhhbXBsZQotJXRva2VuIFNUQVJUX0ZPTyBTVEFSVF9CQVI7Ci0lc3RhcnQgc3RhcnQ7Ci1zdGFydDogU1RBUlRfRk9PIGZvbwotICAgICB8IFNUQVJUX0JBUiBiYXI7Ci1AZW5kIGV4YW1wbGUKLQotVGhlc2UgdG9rZW5zIHByZXZlbnRzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgbmV3IGNvbmZsaWN0cy4gIEFzIGZhciBhcyB0aGUKLXBhcnNlciBnb2VzLCB0aGF0IGlzIGFsbCB0aGF0IGlzIG5lZWRlZC4KLQotTm93IHRoZSBkaWZmaWN1bHQgcGFydCBpcyBlbnN1cmluZyB0aGF0IHRoZSBzY2FubmVyIHdpbGwgc2VuZCB0aGVzZQotdG9rZW5zIGZpcnN0LiAgSWYgeW91ciBzY2FubmVyIGlzIGhhbmQtd3JpdHRlbiwgdGhhdCBzaG91bGQgYmUKLXN0cmFpZ2h0Zm9yd2FyZC4gIElmIHlvdXIgc2Nhbm5lciBpcyBnZW5lcmF0ZWQgYnkgTGV4LCB0aGVtIHRoZXJlIGlzCi1zaW1wbGUgbWVhbnMgdG8gZG8gaXQ6IHJlY2FsbCB0aGF0IGFueXRoaW5nIGJldHdlZW4gQHNhbXB7JUB7IC4uLiAlQH19Ci1hZnRlciB0aGUgZmlyc3QgQGNvZGV7JSV9IGlzIGNvcGllZCB2ZXJiYXRpbSBpbiB0aGUgdG9wIG9mIHRoZSBnZW5lcmF0ZWQKLUBjb2Rle3l5bGV4fSBmdW5jdGlvbi4gIE1ha2Ugc3VyZSBhIHZhcmlhYmxlIEBjb2Rle3N0YXJ0X3Rva2VufSBpcwotYXZhaWxhYmxlIGluIHRoZSBzY2FubmVyIChlLmcuLCBhIGdsb2JhbCB2YXJpYWJsZSBvciB1c2luZwotQGNvZGV7JWxleC1wYXJhbX0gZXRjLiksIGFuZCB1c2UgdGhlIGZvbGxvd2luZzoKLQotQGV4YW1wbGUKLSAgLyogQHJ7UHJvbG9ndWUufSAgKi8KLSUlCi0lQHsKLSAgaWYgKHN0YXJ0X3Rva2VuKQotICAgIEB7Ci0gICAgICBpbnQgdCA9IHN0YXJ0X3Rva2VuOwotICAgICAgc3RhcnRfdG9rZW4gPSAwOwotICAgICAgcmV0dXJuIHQ7Ci0gICAgQH0KLSVAfQotICAvKiBAcntUaGUgcnVsZXMufSAgKi8KLUBlbmQgZXhhbXBsZQotCi0KLUBub2RlIFNlY3VyZT8gIENvbmZvcm0/Ci1Ac2VjdGlvbiBTZWN1cmU/ICBDb25mb3JtPwotCi1AZGlzcGxheQotSXMgQmlzb24gc2VjdXJlPyAgRG9lcyBpdCBjb25mb3JtIHRvIFBPU0lYPwotQGVuZCBkaXNwbGF5Ci0KLUlmIHlvdSdyZSBsb29raW5nIGZvciBhIGd1YXJhbnRlZSBvciBjZXJ0aWZpY2F0aW9uLCB3ZSBkb24ndCBwcm92aWRlIGl0LgotSG93ZXZlciwgQmlzb24gaXMgaW50ZW5kZWQgdG8gYmUgYSByZWxpYWJsZSBwcm9ncmFtIHRoYXQgY29uZm9ybXMgdG8gdGhlCi1AYWNyb255bXtQT1NJWH0gc3BlY2lmaWNhdGlvbiBmb3IgWWFjYy4gIElmIHlvdSBydW4gaW50byBwcm9ibGVtcywKLXBsZWFzZSBzZW5kIHVzIGEgYnVnIHJlcG9ydC4KLQotQG5vZGUgSSBjYW4ndCBidWlsZCBCaXNvbgotQHNlY3Rpb24gSSBjYW4ndCBidWlsZCBCaXNvbgotCi1AZGlzcGxheQotSSBjYW4ndCBidWlsZCBCaXNvbiBiZWNhdXNlIEBjb21tYW5ke21ha2V9IGNvbXBsYWlucyB0aGF0Ci1AY29kZXttc2dmbXR9IGlzIG5vdCBmb3VuZC4KLVdoYXQgc2hvdWxkIEkgZG8/Ci1AZW5kIGRpc3BsYXkKLQotTGlrZSBtb3N0IEdOVSBwYWNrYWdlcyB3aXRoIGludGVybmF0aW9uYWxpemF0aW9uIHN1cHBvcnQsIHRoYXQgZmVhdHVyZQotaXMgdHVybmVkIG9uIGJ5IGRlZmF1bHQuICBJZiB5b3UgaGF2ZSBwcm9ibGVtcyBidWlsZGluZyBpbiB0aGUgQGZpbGV7cG99Ci1zdWJkaXJlY3RvcnksIGl0IGluZGljYXRlcyB0aGF0IHlvdXIgc3lzdGVtJ3MgaW50ZXJuYXRpb25hbGl6YXRpb24KLXN1cHBvcnQgaXMgbGFja2luZy4gIFlvdSBjYW4gcmUtY29uZmlndXJlIEJpc29uIHdpdGgKLUBvcHRpb257LS1kaXNhYmxlLW5sc30gdG8gdHVybiBvZmYgdGhpcyBzdXBwb3J0LCBvciB5b3UgY2FuIGluc3RhbGwgR05VCi1nZXR0ZXh0IGZyb20gQHVybHtmdHA6Ly9mdHAuZ251Lm9yZy9nbnUvZ2V0dGV4dC99IGFuZCByZS1jb25maWd1cmUKLUJpc29uLiAgU2VlIHRoZSBmaWxlIEBmaWxle0FCT1VULU5MU30gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0KLQotQG5vZGUgV2hlcmUgY2FuIEkgZmluZCBoZWxwPwotQHNlY3Rpb24gV2hlcmUgY2FuIEkgZmluZCBoZWxwPwotCi1AZGlzcGxheQotSSdtIGhhdmluZyB0cm91YmxlIHVzaW5nIEJpc29uLiAgV2hlcmUgY2FuIEkgZmluZCBoZWxwPwotQGVuZCBkaXNwbGF5Ci0KLUZpcnN0LCByZWFkIHRoaXMgZmluZSBtYW51YWwuICBCZXlvbmQgdGhhdCwgeW91IGNhbiBzZW5kIG1haWwgdG8KLUBlbWFpbHtoZWxwLWJpc29uQEBnbnUub3JnfS4gIFRoaXMgbWFpbGluZyBsaXN0IGlzIGludGVuZGVkIHRvIGJlCi1wb3B1bGF0ZWQgd2l0aCBwZW9wbGUgd2hvIGFyZSB3aWxsaW5nIHRvIGFuc3dlciBxdWVzdGlvbnMgYWJvdXQgdXNpbmcKLWFuZCBpbnN0YWxsaW5nIEJpc29uLiAgUGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IChtb3N0IG9mKSB0aGUgcGVvcGxlIG9uCi10aGUgbGlzdCBoYXZlIGFzcGVjdHMgb2YgdGhlaXIgbGl2ZXMgd2hpY2ggYXJlIG5vdCByZWxhdGVkIHRvIEJpc29uICghKSwKLXNvIHlvdSBtYXkgbm90IHJlY2VpdmUgYW4gYW5zd2VyIHRvIHlvdXIgcXVlc3Rpb24gcmlnaHQgYXdheS4gIFRoaXMgY2FuCi1iZSBmcnVzdHJhdGluZywgYnV0IHBsZWFzZSB0cnkgbm90IHRvIGhvbmsgdGhlbSBvZmY7IHJlbWVtYmVyIHRoYXQgYW55Ci1oZWxwIHRoZXkgcHJvdmlkZSBpcyBwdXJlbHkgdm9sdW50YXJ5IGFuZCBvdXQgb2YgdGhlIGtpbmRuZXNzIG9mIHRoZWlyCi1oZWFydHMuCi0KLUBub2RlIEJ1ZyBSZXBvcnRzCi1Ac2VjdGlvbiBCdWcgUmVwb3J0cwotCi1AZGlzcGxheQotSSBmb3VuZCBhIGJ1Zy4gIFdoYXQgc2hvdWxkIEkgaW5jbHVkZSBpbiB0aGUgYnVnIHJlcG9ydD8KLUBlbmQgZGlzcGxheQotCi1CZWZvcmUgeW91IHNlbmQgYSBidWcgcmVwb3J0LCBtYWtlIHN1cmUgeW91IGFyZSB1c2luZyB0aGUgbGF0ZXN0Ci12ZXJzaW9uLiAgQ2hlY2sgQHVybHtmdHA6Ly9mdHAuZ251Lm9yZy9wdWIvZ251L2Jpc29uL30gb3Igb25lIG9mIGl0cwotbWlycm9ycy4gIEJlIHN1cmUgdG8gaW5jbHVkZSB0aGUgdmVyc2lvbiBudW1iZXIgaW4geW91ciBidWcgcmVwb3J0LiAgSWYKLXRoZSBidWcgaXMgcHJlc2VudCBpbiB0aGUgbGF0ZXN0IHZlcnNpb24gYnV0IG5vdCBpbiBhIHByZXZpb3VzIHZlcnNpb24sCi10cnkgdG8gZGV0ZXJtaW5lIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIHdoaWNoIGRpZCBub3QgY29udGFpbiB0aGUgYnVnLgotCi1JZiB0aGUgYnVnIGlzIHBhcnNlci1yZWxhdGVkLCB5b3Ugc2hvdWxkIGluY2x1ZGUgdGhlIHNtYWxsZXN0IGdyYW1tYXIKLXlvdSBjYW4gd2hpY2ggZGVtb25zdHJhdGVzIHRoZSBidWcuICBUaGUgZ3JhbW1hciBmaWxlIHNob3VsZCBhbHNvIGJlCi1jb21wbGV0ZSAoaS5lLiwgSSBzaG91bGQgYmUgYWJsZSB0byBydW4gaXQgdGhyb3VnaCBCaXNvbiB3aXRob3V0IGhhdmluZwotdG8gZWRpdCBvciBhZGQgYW55dGhpbmcpLiAgVGhlIHNtYWxsZXIgYW5kIHNpbXBsZXIgdGhlIGdyYW1tYXIsIHRoZQotZWFzaWVyIGl0IHdpbGwgYmUgdG8gZml4IHRoZSBidWcuCi0KLUluY2x1ZGUgaW5mb3JtYXRpb24gYWJvdXQgeW91ciBjb21waWxhdGlvbiBlbnZpcm9ubWVudCwgaW5jbHVkaW5nIHlvdXIKLW9wZXJhdGluZyBzeXN0ZW0ncyBuYW1lIGFuZCB2ZXJzaW9uIGFuZCB5b3VyIGNvbXBpbGVyJ3MgbmFtZSBhbmQKLXZlcnNpb24uICBJZiB5b3UgaGF2ZSB0cm91YmxlIGNvbXBpbGluZywgeW91IHNob3VsZCBhbHNvIGluY2x1ZGUgYQotdHJhbnNjcmlwdCBvZiB0aGUgYnVpbGQgc2Vzc2lvbiwgc3RhcnRpbmcgd2l0aCB0aGUgaW52b2NhdGlvbiBvZgotYGNvbmZpZ3VyZScuICBEZXBlbmRpbmcgb24gdGhlIG5hdHVyZSBvZiB0aGUgYnVnLCB5b3UgbWF5IGJlIGFza2VkIHRvCi1zZW5kIGFkZGl0aW9uYWwgZmlsZXMgYXMgd2VsbCAoc3VjaCBhcyBgY29uZmlnLmgnIG9yIGBjb25maWcuY2FjaGUnKS4KLQotUGF0Y2hlcyBhcmUgbW9zdCB3ZWxjb21lLCBidXQgbm90IHJlcXVpcmVkLiAgVGhhdCBpcywgZG8gbm90IGhlc2l0YXRlIHRvCi1zZW5kIGEgYnVnIHJlcG9ydCBqdXN0IGJlY2F1c2UgeW91IGNhbiBub3QgcHJvdmlkZSBhIGZpeC4KLQotU2VuZCBidWcgcmVwb3J0cyB0byBAZW1haWx7YnVnLWJpc29uQEBnbnUub3JnfS4KLQotQG5vZGUgT3RoZXIgTGFuZ3VhZ2VzCi1Ac2VjdGlvbiBPdGhlciBMYW5ndWFnZXMKLQotQGRpc3BsYXkKLVdpbGwgQmlzb24gZXZlciBoYXZlIEMrKyBzdXBwb3J0PyAgSG93IGFib3V0IEphdmEgb3IgQHZhcntpbnNlcnQgeW91cgotZmF2b3JpdGUgbGFuZ3VhZ2UgaGVyZX0/Ci1AZW5kIGRpc3BsYXkKLQotQysrIHN1cHBvcnQgaXMgdGhlcmUgbm93LCBhbmQgaXMgZG9jdW1lbnRlZC4gIFdlJ2QgbG92ZSB0byBhZGQgb3RoZXIKLWxhbmd1YWdlczsgY29udHJpYnV0aW9ucyBhcmUgd2VsY29tZS4KLQotQG5vZGUgQmV0YSBUZXN0aW5nCi1Ac2VjdGlvbiBCZXRhIFRlc3RpbmcKLQotQGRpc3BsYXkKLVdoYXQgaXMgaW52b2x2ZWQgaW4gYmVpbmcgYSBiZXRhIHRlc3Rlcj8KLUBlbmQgZGlzcGxheQotCi1JdCdzIG5vdCB0ZXJyaWJseSBpbnZvbHZlZC4gIEJhc2ljYWxseSwgeW91IHdvdWxkIGRvd25sb2FkIGEgdGVzdAotcmVsZWFzZSwgY29tcGlsZSBpdCwgYW5kIHVzZSBpdCB0byBidWlsZCBhbmQgcnVuIGEgcGFyc2VyIG9yIHR3by4gIEFmdGVyCi10aGF0LCB5b3Ugd291bGQgc3VibWl0IGVpdGhlciBhIGJ1ZyByZXBvcnQgb3IgYSBtZXNzYWdlIHNheWluZyB0aGF0Ci1ldmVyeXRoaW5nIGlzIG9rYXkuICBJdCBpcyBpbXBvcnRhbnQgdG8gcmVwb3J0IHN1Y2Nlc3NlcyBhcyB3ZWxsIGFzCi1mYWlsdXJlcyBiZWNhdXNlIHRlc3QgcmVsZWFzZXMgZXZlbnR1YWxseSBiZWNvbWUgbWFpbnN0cmVhbSByZWxlYXNlcywKLWJ1dCBvbmx5IGlmIHRoZXkgYXJlIGFkZXF1YXRlbHkgdGVzdGVkLiAgSWYgbm8gb25lIHRlc3RzLCBkZXZlbG9wbWVudCBpcwotZXNzZW50aWFsbHkgaGFsdGVkLgotCi1CZXRhIHRlc3RlcnMgYXJlIHBhcnRpY3VsYXJseSBuZWVkZWQgZm9yIG9wZXJhdGluZyBzeXN0ZW1zIHRvIHdoaWNoIHRoZQotZGV2ZWxvcGVycyBkbyBub3QgaGF2ZSBlYXN5IGFjY2Vzcy4gIFRoZXkgY3VycmVudGx5IGhhdmUgZWFzeSBhY2Nlc3MgdG8KLXJlY2VudCBHTlUvTGludXggYW5kIFNvbGFyaXMgdmVyc2lvbnMuICBSZXBvcnRzIGFib3V0IG90aGVyIG9wZXJhdGluZwotc3lzdGVtcyBhcmUgZXNwZWNpYWxseSB3ZWxjb21lLgotCi1Abm9kZSBNYWlsaW5nIExpc3RzCi1Ac2VjdGlvbiBNYWlsaW5nIExpc3RzCi0KLUBkaXNwbGF5Ci1Ib3cgZG8gSSBqb2luIHRoZSBoZWxwLWJpc29uIGFuZCBidWctYmlzb24gbWFpbGluZyBsaXN0cz8KLUBlbmQgZGlzcGxheQotCi1TZWUgQHVybHtodHRwOi8vbGlzdHMuZ251Lm9yZy99LgotCi1AYyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFRhYmxlIG9mIFN5bWJvbHMKLQotQG5vZGUgVGFibGUgb2YgU3ltYm9scwotQGFwcGVuZGl4IEJpc29uIFN5bWJvbHMKLUBjaW5kZXggQmlzb24gc3ltYm9scywgdGFibGUgb2YKLUBjaW5kZXggc3ltYm9scyBpbiBCaXNvbiwgdGFibGUgb2YKLQotQGRlZmZuIHtWYXJpYWJsZX0gQEAkCi1JbiBhbiBhY3Rpb24sIHRoZSBsb2NhdGlvbiBvZiB0aGUgbGVmdC1oYW5kIHNpZGUgb2YgdGhlIHJ1bGUuCi1AeHJlZntMb2NhdGlvbnMsICwgTG9jYXRpb25zIE92ZXJ2aWV3fS4KLUBlbmQgZGVmZm4KLQotQGRlZmZuIHtWYXJpYWJsZX0gQEBAdmFye259Ci1JbiBhbiBhY3Rpb24sIHRoZSBsb2NhdGlvbiBvZiB0aGUgQHZhcntufS10aCBzeW1ib2wgb2YgdGhlIHJpZ2h0LWhhbmQKLXNpZGUgb2YgdGhlIHJ1bGUuICBAeHJlZntMb2NhdGlvbnMsICwgTG9jYXRpb25zIE92ZXJ2aWV3fS4KLUBlbmQgZGVmZm4KLQotQGRlZmZuIHtWYXJpYWJsZX0gJCQKLUluIGFuIGFjdGlvbiwgdGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsZWZ0LWhhbmQgc2lkZSBvZiB0aGUgcnVsZS4KLUB4cmVme0FjdGlvbnN9LgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge1ZhcmlhYmxlfSAkQHZhcntufQotSW4gYW4gYWN0aW9uLCB0aGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIEB2YXJ7bn0tdGggc3ltYm9sIG9mIHRoZQotcmlnaHQtaGFuZCBzaWRlIG9mIHRoZSBydWxlLiAgQHhyZWZ7QWN0aW9uc30uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7RGVsaW1pdGVyfSAlJQotRGVsaW1pdGVyIHVzZWQgdG8gc2VwYXJhdGUgdGhlIGdyYW1tYXIgcnVsZSBzZWN0aW9uIGZyb20gdGhlCi1CaXNvbiBkZWNsYXJhdGlvbnMgc2VjdGlvbiBvciB0aGUgZXBpbG9ndWUuCi1AeHJlZntHcmFtbWFyIExheW91dCwgLFRoZSBPdmVyYWxsIExheW91dCBvZiBhIEJpc29uIEdyYW1tYXJ9LgotQGVuZCBkZWZmbgotCi1AYyBEb24ndCBpbnNlcnQgc3BhY2VzLCBvciBjaGVjayB0aGUgRFZJIG91dHB1dC4KLUBkZWZmbiB7RGVsaW1pdGVyfSAlQHtAdmFye2NvZGV9JUB9Ci1BbGwgY29kZSBsaXN0ZWQgYmV0d2VlbiBAc2FtcHslQHt9IGFuZCBAc2FtcHslQH19IGlzIGNvcGllZCBkaXJlY3RseSB0bwotdGhlIG91dHB1dCBmaWxlIHVuaW50ZXJwcmV0ZWQuICBTdWNoIGNvZGUgZm9ybXMgdGhlIHByb2xvZ3VlIG9mIHRoZSBpbnB1dAotZmlsZS4gIEB4cmVme0dyYW1tYXIgT3V0bGluZSwgLE91dGxpbmUgb2YgYSBCaXNvbgotR3JhbW1hcn0uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7Q29uc3RydWN0fSAvKkBkb3Rze30qLwotQ29tbWVudCBkZWxpbWl0ZXJzLCBhcyBpbiBDLgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge0RlbGltaXRlcn0gOgotU2VwYXJhdGVzIGEgcnVsZSdzIHJlc3VsdCBmcm9tIGl0cyBjb21wb25lbnRzLiAgQHhyZWZ7UnVsZXMsICxTeW50YXggb2YKLUdyYW1tYXIgUnVsZXN9LgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge0RlbGltaXRlcn0gOwotVGVybWluYXRlcyBhIHJ1bGUuICBAeHJlZntSdWxlcywgLFN5bnRheCBvZiBHcmFtbWFyIFJ1bGVzfS4KLUBlbmQgZGVmZm4KLQotQGRlZmZuIHtEZWxpbWl0ZXJ9IHwKLVNlcGFyYXRlcyBhbHRlcm5hdGUgcnVsZXMgZm9yIHRoZSBzYW1lIHJlc3VsdCBub250ZXJtaW5hbC4KLUB4cmVme1J1bGVzLCAsU3ludGF4IG9mIEdyYW1tYXIgUnVsZXN9LgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge1N5bWJvbH0gJGFjY2VwdAotVGhlIHByZWRlZmluZWQgbm9udGVybWluYWwgd2hvc2Ugb25seSBydWxlIGlzIEBzYW1weyRhY2NlcHQ6IEB2YXJ7c3RhcnR9Ci0kZW5kfSwgd2hlcmUgQHZhcntzdGFydH0gaXMgdGhlIHN0YXJ0IHN5bWJvbC4gIEB4cmVme1N0YXJ0IERlY2wsICwgVGhlCi1TdGFydC1TeW1ib2x9LiAgSXQgY2Fubm90IGJlIHVzZWQgaW4gdGhlIGdyYW1tYXIuCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7RGlyZWN0aXZlfSAlZGVidWcKLUVxdWlwIHRoZSBwYXJzZXIgZm9yIGRlYnVnZ2luZy4gIEB4cmVme0RlY2wgU3VtbWFyeX0uCi1AZW5kIGRlZmZuCi0KLUBpZnNldCBkZWZhdWx0cHJlYwotQGRlZmZuIHtEaXJlY3RpdmV9ICVkZWZhdWx0LXByZWMKLUFzc2lnbiBhIHByZWNlZGVuY2UgdG8gcnVsZXMgdGhhdCBsYWNrIGFuIGV4cGxpY2l0IEBzYW1weyVwcmVjfQotbW9kaWZpZXIuICBAeHJlZntDb250ZXh0dWFsIFByZWNlZGVuY2UsICxDb250ZXh0LURlcGVuZGVudAotUHJlY2VkZW5jZX0uCi1AZW5kIGRlZmZuCi1AZW5kIGlmc2V0Ci0KLUBkZWZmbiB7RGlyZWN0aXZlfSAlZGVmaW5lcwotQmlzb24gZGVjbGFyYXRpb24gdG8gY3JlYXRlIGEgaGVhZGVyIGZpbGUgbWVhbnQgZm9yIHRoZSBzY2FubmVyLgotQHhyZWZ7RGVjbCBTdW1tYXJ5fS4KLUBlbmQgZGVmZm4KLQotQGRlZmZuIHtEaXJlY3RpdmV9ICVkZXN0cnVjdG9yCi1TcGVjaWZ5IGhvdyB0aGUgcGFyc2VyIHNob3VsZCByZWNsYWltIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB0bwotZGlzY2FyZGVkIHN5bWJvbHMuICBAeHJlZntEZXN0cnVjdG9yIERlY2wsICwgRnJlZWluZyBEaXNjYXJkZWQgU3ltYm9sc30uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7RGlyZWN0aXZlfSAlZHByZWMKLUJpc29uIGRlY2xhcmF0aW9uIHRvIGFzc2lnbiBhIHByZWNlZGVuY2UgdG8gYSBydWxlIHRoYXQgaXMgdXNlZCBhdCBwYXJzZQotdGltZSB0byByZXNvbHZlIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3RzLiAgQHhyZWZ7R0xSIFBhcnNlcnMsICxXcml0aW5nCi1AYWNyb255bXtHTFJ9IFBhcnNlcnN9LgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge1N5bWJvbH0gJGVuZAotVGhlIHByZWRlZmluZWQgdG9rZW4gbWFya2luZyB0aGUgZW5kIG9mIHRoZSB0b2tlbiBzdHJlYW0uICBJdCBjYW5ub3QgYmUKLXVzZWQgaW4gdGhlIGdyYW1tYXIuCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7U3ltYm9sfSBlcnJvcgotQSB0b2tlbiBuYW1lIHJlc2VydmVkIGZvciBlcnJvciByZWNvdmVyeS4gIFRoaXMgdG9rZW4gbWF5IGJlIHVzZWQgaW4KLWdyYW1tYXIgcnVsZXMgc28gYXMgdG8gYWxsb3cgdGhlIEJpc29uIHBhcnNlciB0byByZWNvZ25pemUgYW4gZXJyb3IgaW4KLXRoZSBncmFtbWFyIHdpdGhvdXQgaGFsdGluZyB0aGUgcHJvY2Vzcy4gIEluIGVmZmVjdCwgYSBzZW50ZW5jZQotY29udGFpbmluZyBhbiBlcnJvciBtYXkgYmUgcmVjb2duaXplZCBhcyB2YWxpZC4gIE9uIGEgc3ludGF4IGVycm9yLCB0aGUKLXRva2VuIEBjb2Rle2Vycm9yfSBiZWNvbWVzIHRoZSBjdXJyZW50IGxvb2stYWhlYWQgdG9rZW4uICBBY3Rpb25zCi1jb3JyZXNwb25kaW5nIHRvIEBjb2Rle2Vycm9yfSBhcmUgdGhlbiBleGVjdXRlZCwgYW5kIHRoZSBsb29rLWFoZWFkCi10b2tlbiBpcyByZXNldCB0byB0aGUgdG9rZW4gdGhhdCBvcmlnaW5hbGx5IGNhdXNlZCB0aGUgdmlvbGF0aW9uLgotQHhyZWZ7RXJyb3IgUmVjb3Zlcnl9LgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge0RpcmVjdGl2ZX0gJWVycm9yLXZlcmJvc2UKLUJpc29uIGRlY2xhcmF0aW9uIHRvIHJlcXVlc3QgdmVyYm9zZSwgc3BlY2lmaWMgZXJyb3IgbWVzc2FnZSBzdHJpbmdzCi13aGVuIEBjb2Rle3l5ZXJyb3J9IGlzIGNhbGxlZC4KLUBlbmQgZGVmZm4KLQotQGRlZmZuIHtEaXJlY3RpdmV9ICVmaWxlLXByZWZpeD0iQHZhcntwcmVmaXh9IgotQmlzb24gZGVjbGFyYXRpb24gdG8gc2V0IHRoZSBwcmVmaXggb2YgdGhlIG91dHB1dCBmaWxlcy4gIEB4cmVme0RlY2wKLVN1bW1hcnl9LgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge0RpcmVjdGl2ZX0gJWdsci1wYXJzZXIKLUJpc29uIGRlY2xhcmF0aW9uIHRvIHByb2R1Y2UgYSBAYWNyb255bXtHTFJ9IHBhcnNlci4gIEB4cmVme0dMUgotUGFyc2VycywgLFdyaXRpbmcgQGFjcm9ueW17R0xSfSBQYXJzZXJzfS4KLUBlbmQgZGVmZm4KLQotQGRlZmZuIHtEaXJlY3RpdmV9ICVpbml0aWFsLWFjdGlvbgotUnVuIHVzZXIgY29kZSBiZWZvcmUgcGFyc2luZy4gIEB4cmVme0luaXRpYWwgQWN0aW9uIERlY2wsICwgUGVyZm9ybWluZyBBY3Rpb25zIGJlZm9yZSBQYXJzaW5nfS4KLUBlbmQgZGVmZm4KLQotQGRlZmZuIHtEaXJlY3RpdmV9ICVsZWZ0Ci1CaXNvbiBkZWNsYXJhdGlvbiB0byBhc3NpZ24gbGVmdCBhc3NvY2lhdGl2aXR5IHRvIHRva2VuKHMpLgotQHhyZWZ7UHJlY2VkZW5jZSBEZWNsLCAsT3BlcmF0b3IgUHJlY2VkZW5jZX0uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7RGlyZWN0aXZlfSAlbGV4LXBhcmFtIEB7QHZhcnthcmd1bWVudC1kZWNsYXJhdGlvbn1AfQotQmlzb24gZGVjbGFyYXRpb24gdG8gc3BlY2lmeWluZyBhbiBhZGRpdGlvbmFsIHBhcmFtZXRlciB0aGF0Ci1AY29kZXt5eWxleH0gc2hvdWxkIGFjY2VwdC4gIEB4cmVme1B1cmUgQ2FsbGluZywsIENhbGxpbmcgQ29udmVudGlvbnMKLWZvciBQdXJlIFBhcnNlcnN9LgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge0RpcmVjdGl2ZX0gJW1lcmdlCi1CaXNvbiBkZWNsYXJhdGlvbiB0byBhc3NpZ24gYSBtZXJnaW5nIGZ1bmN0aW9uIHRvIGEgcnVsZS4gIElmIHRoZXJlIGlzIGEKLXJlZHVjZS9yZWR1Y2UgY29uZmxpY3Qgd2l0aCBhIHJ1bGUgaGF2aW5nIHRoZSBzYW1lIG1lcmdpbmcgZnVuY3Rpb24sIHRoZQotZnVuY3Rpb24gaXMgYXBwbGllZCB0byB0aGUgdHdvIHNlbWFudGljIHZhbHVlcyB0byBnZXQgYSBzaW5nbGUgcmVzdWx0LgotQHhyZWZ7R0xSIFBhcnNlcnMsICxXcml0aW5nIEBhY3Jvbnlte0dMUn0gUGFyc2Vyc30uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7RGlyZWN0aXZlfSAlbmFtZS1wcmVmaXg9IkB2YXJ7cHJlZml4fSIKLUJpc29uIGRlY2xhcmF0aW9uIHRvIHJlbmFtZSB0aGUgZXh0ZXJuYWwgc3ltYm9scy4gIEB4cmVme0RlY2wgU3VtbWFyeX0uCi1AZW5kIGRlZmZuCi0KLUBpZnNldCBkZWZhdWx0cHJlYwotQGRlZmZuIHtEaXJlY3RpdmV9ICVuby1kZWZhdWx0LXByZWMKLURvIG5vdCBhc3NpZ24gYSBwcmVjZWRlbmNlIHRvIHJ1bGVzIHRoYXQgbGFjayBhbiBleHBsaWNpdCBAc2FtcHslcHJlY30KLW1vZGlmaWVyLiAgQHhyZWZ7Q29udGV4dHVhbCBQcmVjZWRlbmNlLCAsQ29udGV4dC1EZXBlbmRlbnQKLVByZWNlZGVuY2V9LgotQGVuZCBkZWZmbgotQGVuZCBpZnNldAotCi1AZGVmZm4ge0RpcmVjdGl2ZX0gJW5vLWxpbmVzCi1CaXNvbiBkZWNsYXJhdGlvbiB0byBhdm9pZCBnZW5lcmF0aW5nIEBjb2RleyNsaW5lfSBkaXJlY3RpdmVzIGluIHRoZQotcGFyc2VyIGZpbGUuICBAeHJlZntEZWNsIFN1bW1hcnl9LgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge0RpcmVjdGl2ZX0gJW5vbmFzc29jCi1CaXNvbiBkZWNsYXJhdGlvbiB0byBhc3NpZ24gbm9uYXNzb2NpYXRpdml0eSB0byB0b2tlbihzKS4KLUB4cmVme1ByZWNlZGVuY2UgRGVjbCwgLE9wZXJhdG9yIFByZWNlZGVuY2V9LgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge0RpcmVjdGl2ZX0gJW91dHB1dD0iQHZhcntmaWxlfSIKLUJpc29uIGRlY2xhcmF0aW9uIHRvIHNldCB0aGUgbmFtZSBvZiB0aGUgcGFyc2VyIGZpbGUuICBAeHJlZntEZWNsCi1TdW1tYXJ5fS4KLUBlbmQgZGVmZm4KLQotQGRlZmZuIHtEaXJlY3RpdmV9ICVwYXJzZS1wYXJhbSBAe0B2YXJ7YXJndW1lbnQtZGVjbGFyYXRpb259QH0KLUJpc29uIGRlY2xhcmF0aW9uIHRvIHNwZWNpZnlpbmcgYW4gYWRkaXRpb25hbCBwYXJhbWV0ZXIgdGhhdAotQGNvZGV7eXlwYXJzZX0gc2hvdWxkIGFjY2VwdC4gIEB4cmVme1BhcnNlciBGdW5jdGlvbiwsIFRoZSBQYXJzZXIKLUZ1bmN0aW9uIEBjb2Rle3l5cGFyc2V9fS4KLUBlbmQgZGVmZm4KLQotQGRlZmZuIHtEaXJlY3RpdmV9ICVwcmVjCi1CaXNvbiBkZWNsYXJhdGlvbiB0byBhc3NpZ24gYSBwcmVjZWRlbmNlIHRvIGEgc3BlY2lmaWMgcnVsZS4KLUB4cmVme0NvbnRleHR1YWwgUHJlY2VkZW5jZSwgLENvbnRleHQtRGVwZW5kZW50IFByZWNlZGVuY2V9LgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge0RpcmVjdGl2ZX0gJXB1cmUtcGFyc2VyCi1CaXNvbiBkZWNsYXJhdGlvbiB0byByZXF1ZXN0IGEgcHVyZSAocmVlbnRyYW50KSBwYXJzZXIuCi1AeHJlZntQdXJlIERlY2wsICxBIFB1cmUgKFJlZW50cmFudCkgUGFyc2VyfS4KLUBlbmQgZGVmZm4KLQotQGRlZmZuIHtEaXJlY3RpdmV9ICVyZXF1aXJlICJAdmFye3ZlcnNpb259IgotUmVxdWlyZSB2ZXJzaW9uIEB2YXJ7dmVyc2lvbn0gb3IgaGlnaGVyIG9mIEJpc29uLiAgQHhyZWZ7UmVxdWlyZSBEZWNsLCAsCi1SZXF1aXJlIGEgVmVyc2lvbiBvZiBCaXNvbn0uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7RGlyZWN0aXZlfSAlcmlnaHQKLUJpc29uIGRlY2xhcmF0aW9uIHRvIGFzc2lnbiByaWdodCBhc3NvY2lhdGl2aXR5IHRvIHRva2VuKHMpLgotQHhyZWZ7UHJlY2VkZW5jZSBEZWNsLCAsT3BlcmF0b3IgUHJlY2VkZW5jZX0uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7RGlyZWN0aXZlfSAlc3RhcnQKLUJpc29uIGRlY2xhcmF0aW9uIHRvIHNwZWNpZnkgdGhlIHN0YXJ0IHN5bWJvbC4gIEB4cmVme1N0YXJ0IERlY2wsICxUaGUKLVN0YXJ0LVN5bWJvbH0uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7RGlyZWN0aXZlfSAldG9rZW4KLUJpc29uIGRlY2xhcmF0aW9uIHRvIGRlY2xhcmUgdG9rZW4ocykgd2l0aG91dCBzcGVjaWZ5aW5nIHByZWNlZGVuY2UuCi1AeHJlZntUb2tlbiBEZWNsLCAsVG9rZW4gVHlwZSBOYW1lc30uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7RGlyZWN0aXZlfSAldG9rZW4tdGFibGUKLUJpc29uIGRlY2xhcmF0aW9uIHRvIGluY2x1ZGUgYSB0b2tlbiBuYW1lIHRhYmxlIGluIHRoZSBwYXJzZXIgZmlsZS4KLUB4cmVme0RlY2wgU3VtbWFyeX0uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7RGlyZWN0aXZlfSAldHlwZQotQmlzb24gZGVjbGFyYXRpb24gdG8gZGVjbGFyZSBub250ZXJtaW5hbHMuICBAeHJlZntUeXBlIERlY2wsCi0sTm9udGVybWluYWwgU3ltYm9sc30uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7U3ltYm9sfSAkdW5kZWZpbmVkCi1UaGUgcHJlZGVmaW5lZCB0b2tlbiBvbnRvIHdoaWNoIGFsbCB1bmRlZmluZWQgdmFsdWVzIHJldHVybmVkIGJ5Ci1AY29kZXt5eWxleH0gYXJlIG1hcHBlZC4gIEl0IGNhbm5vdCBiZSB1c2VkIGluIHRoZSBncmFtbWFyLCByYXRoZXIsIHVzZQotQGNvZGV7ZXJyb3J9LgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge0RpcmVjdGl2ZX0gJXVuaW9uCi1CaXNvbiBkZWNsYXJhdGlvbiB0byBzcGVjaWZ5IHNldmVyYWwgcG9zc2libGUgZGF0YSB0eXBlcyBmb3Igc2VtYW50aWMKLXZhbHVlcy4gIEB4cmVme1VuaW9uIERlY2wsICxUaGUgQ29sbGVjdGlvbiBvZiBWYWx1ZSBUeXBlc30uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7TWFjcm99IFlZQUJPUlQKLU1hY3JvIHRvIHByZXRlbmQgdGhhdCBhbiB1bnJlY292ZXJhYmxlIHN5bnRheCBlcnJvciBoYXMgb2NjdXJyZWQsIGJ5Ci1tYWtpbmcgQGNvZGV7eXlwYXJzZX0gcmV0dXJuIDEgaW1tZWRpYXRlbHkuICBUaGUgZXJyb3IgcmVwb3J0aW5nCi1mdW5jdGlvbiBAY29kZXt5eWVycm9yfSBpcyBub3QgY2FsbGVkLiAgQHhyZWZ7UGFyc2VyIEZ1bmN0aW9uLCAsVGhlCi1QYXJzZXIgRnVuY3Rpb24gQGNvZGV7eXlwYXJzZX19LgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge01hY3JvfSBZWUFDQ0VQVAotTWFjcm8gdG8gcHJldGVuZCB0aGF0IGEgY29tcGxldGUgdXR0ZXJhbmNlIG9mIHRoZSBsYW5ndWFnZSBoYXMgYmVlbgotcmVhZCwgYnkgbWFraW5nIEBjb2Rle3l5cGFyc2V9IHJldHVybiAwIGltbWVkaWF0ZWx5LgotQHhyZWZ7UGFyc2VyIEZ1bmN0aW9uLCAsVGhlIFBhcnNlciBGdW5jdGlvbiBAY29kZXt5eXBhcnNlfX0uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7TWFjcm99IFlZQkFDS1VQCi1NYWNybyB0byBkaXNjYXJkIGEgdmFsdWUgZnJvbSB0aGUgcGFyc2VyIHN0YWNrIGFuZCBmYWtlIGEgbG9vay1haGVhZAotdG9rZW4uICBAeHJlZntBY3Rpb24gRmVhdHVyZXMsICxTcGVjaWFsIEZlYXR1cmVzIGZvciBVc2UgaW4gQWN0aW9uc30uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7VmFyaWFibGV9IHl5Y2hhcgotRXh0ZXJuYWwgaW50ZWdlciB2YXJpYWJsZSB0aGF0IGNvbnRhaW5zIHRoZSBpbnRlZ2VyIHZhbHVlIG9mIHRoZQotbG9vay1haGVhZCB0b2tlbi4gIChJbiBhIHB1cmUgcGFyc2VyLCBpdCBpcyBhIGxvY2FsIHZhcmlhYmxlIHdpdGhpbgotQGNvZGV7eXlwYXJzZX0uKSAgRXJyb3ItcmVjb3ZlcnkgcnVsZSBhY3Rpb25zIG1heSBleGFtaW5lIHRoaXMgdmFyaWFibGUuCi1AeHJlZntBY3Rpb24gRmVhdHVyZXMsICxTcGVjaWFsIEZlYXR1cmVzIGZvciBVc2UgaW4gQWN0aW9uc30uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7VmFyaWFibGV9IHl5Y2xlYXJpbgotTWFjcm8gdXNlZCBpbiBlcnJvci1yZWNvdmVyeSBydWxlIGFjdGlvbnMuICBJdCBjbGVhcnMgdGhlIHByZXZpb3VzCi1sb29rLWFoZWFkIHRva2VuLiAgQHhyZWZ7RXJyb3IgUmVjb3Zlcnl9LgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge01hY3JvfSBZWURFQlVHCi1NYWNybyB0byBkZWZpbmUgdG8gZXF1aXAgdGhlIHBhcnNlciB3aXRoIHRyYWNpbmcgY29kZS4gIEB4cmVme1RyYWNpbmcsCi0sVHJhY2luZyBZb3VyIFBhcnNlcn0uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7VmFyaWFibGV9IHl5ZGVidWcKLUV4dGVybmFsIGludGVnZXIgdmFyaWFibGUgc2V0IHRvIHplcm8gYnkgZGVmYXVsdC4gIElmIEBjb2Rle3l5ZGVidWd9Ci1pcyBnaXZlbiBhIG5vbnplcm8gdmFsdWUsIHRoZSBwYXJzZXIgd2lsbCBvdXRwdXQgaW5mb3JtYXRpb24gb24gaW5wdXQKLXN5bWJvbHMgYW5kIHBhcnNlciBhY3Rpb24uICBAeHJlZntUcmFjaW5nLCAsVHJhY2luZyBZb3VyIFBhcnNlcn0uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7TWFjcm99IHl5ZXJyb2sKLU1hY3JvIHRvIGNhdXNlIHBhcnNlciB0byByZWNvdmVyIGltbWVkaWF0ZWx5IHRvIGl0cyBub3JtYWwgbW9kZQotYWZ0ZXIgYSBzeW50YXggZXJyb3IuICBAeHJlZntFcnJvciBSZWNvdmVyeX0uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7TWFjcm99IFlZRVJST1IKLU1hY3JvIHRvIHByZXRlbmQgdGhhdCBhIHN5bnRheCBlcnJvciBoYXMganVzdCBiZWVuIGRldGVjdGVkOiBjYWxsCi1AY29kZXt5eWVycm9yfSBhbmQgdGhlbiBwZXJmb3JtIG5vcm1hbCBlcnJvciByZWNvdmVyeSBpZiBwb3NzaWJsZQotKEBweHJlZntFcnJvciBSZWNvdmVyeX0pLCBvciAoaWYgcmVjb3ZlcnkgaXMgaW1wb3NzaWJsZSkgbWFrZQotQGNvZGV7eXlwYXJzZX0gcmV0dXJuIDEuICBAeHJlZntFcnJvciBSZWNvdmVyeX0uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7RnVuY3Rpb259IHl5ZXJyb3IKLVVzZXItc3VwcGxpZWQgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGJ5IEBjb2Rle3l5cGFyc2V9IG9uIGVycm9yLgotQHhyZWZ7RXJyb3IgUmVwb3J0aW5nLCAsVGhlIEVycm9yCi1SZXBvcnRpbmcgRnVuY3Rpb24gQGNvZGV7eXllcnJvcn19LgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge01hY3JvfSBZWUVSUk9SX1ZFUkJPU0UKLUFuIG9ic29sZXRlIG1hY3JvIHRoYXQgeW91IGRlZmluZSB3aXRoIEBjb2RleyNkZWZpbmV9IGluIHRoZSBwcm9sb2d1ZQotdG8gcmVxdWVzdCB2ZXJib3NlLCBzcGVjaWZpYyBlcnJvciBtZXNzYWdlIHN0cmluZ3MKLXdoZW4gQGNvZGV7eXllcnJvcn0gaXMgY2FsbGVkLiAgSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCBkZWZpbml0aW9uIHlvdQotdXNlIGZvciBAY29kZXtZWUVSUk9SX1ZFUkJPU0V9LCBqdXN0IHdoZXRoZXIgeW91IGRlZmluZSBpdC4gIFVzaW5nCi1AY29kZXslZXJyb3ItdmVyYm9zZX0gaXMgcHJlZmVycmVkLgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge01hY3JvfSBZWUlOSVRERVBUSAotTWFjcm8gZm9yIHNwZWNpZnlpbmcgdGhlIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyIHN0YWNrLgotQHhyZWZ7TWVtb3J5IE1hbmFnZW1lbnR9LgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge0Z1bmN0aW9ufSB5eWxleAotVXNlci1zdXBwbGllZCBsZXhpY2FsIGFuYWx5emVyIGZ1bmN0aW9uLCBjYWxsZWQgd2l0aCBubyBhcmd1bWVudHMgdG8gZ2V0Ci10aGUgbmV4dCB0b2tlbi4gIEB4cmVme0xleGljYWwsICxUaGUgTGV4aWNhbCBBbmFseXplciBGdW5jdGlvbgotQGNvZGV7eXlsZXh9fS4KLUBlbmQgZGVmZm4KLQotQGRlZmZuIHtNYWNyb30gWVlMRVhfUEFSQU0KLUFuIG9ic29sZXRlIG1hY3JvIGZvciBzcGVjaWZ5aW5nIGFuIGV4dHJhIGFyZ3VtZW50IChvciBsaXN0IG9mIGV4dHJhCi1hcmd1bWVudHMpIGZvciBAY29kZXt5eXBhcnNlfSB0byBwYXNzIHRvIEBjb2Rle3l5bGV4fS4gIFRoZSB1c2Ugb2YgdGhpcwotbWFjcm8gaXMgZGVwcmVjYXRlZCwgYW5kIGlzIHN1cHBvcnRlZCBvbmx5IGZvciBZYWNjIGxpa2UgcGFyc2Vycy4KLUB4cmVme1B1cmUgQ2FsbGluZywsIENhbGxpbmcgQ29udmVudGlvbnMgZm9yIFB1cmUgUGFyc2Vyc30uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7VmFyaWFibGV9IHl5bGxvYwotRXh0ZXJuYWwgdmFyaWFibGUgaW4gd2hpY2ggQGNvZGV7eXlsZXh9IHNob3VsZCBwbGFjZSB0aGUgbGluZSBhbmQgY29sdW1uCi1udW1iZXJzIGFzc29jaWF0ZWQgd2l0aCBhIHRva2VuLiAgKEluIGEgcHVyZSBwYXJzZXIsIGl0IGlzIGEgbG9jYWwKLXZhcmlhYmxlIHdpdGhpbiBAY29kZXt5eXBhcnNlfSwgYW5kIGl0cyBhZGRyZXNzIGlzIHBhc3NlZCB0bwotQGNvZGV7eXlsZXh9LikKLVlvdSBjYW4gaWdub3JlIHRoaXMgdmFyaWFibGUgaWYgeW91IGRvbid0IHVzZSB0aGUgQHNhbXB7QEB9IGZlYXR1cmUgaW4gdGhlCi1ncmFtbWFyIGFjdGlvbnMuCi1AeHJlZntUb2tlbiBMb2NhdGlvbnMsICxUZXh0dWFsIExvY2F0aW9ucyBvZiBUb2tlbnN9LgotSW4gc2VtYW50aWMgYWN0aW9ucywgaXQgc3RvcmVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgbG9vay1haGVhZCB0b2tlbi4KLUB4cmVme0FjdGlvbnMgYW5kIExvY2F0aW9ucywgLEFjdGlvbnMgYW5kIExvY2F0aW9uc30uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7VHlwZX0gWVlMVFlQRQotRGF0YSB0eXBlIG9mIEBjb2Rle3l5bGxvY307IGJ5IGRlZmF1bHQsIGEgc3RydWN0dXJlIHdpdGggZm91cgotbWVtYmVycy4gIEB4cmVme0xvY2F0aW9uIFR5cGUsICwgRGF0YSBUeXBlcyBvZiBMb2NhdGlvbnN9LgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge1ZhcmlhYmxlfSB5eWx2YWwKLUV4dGVybmFsIHZhcmlhYmxlIGluIHdoaWNoIEBjb2Rle3l5bGV4fSBzaG91bGQgcGxhY2UgdGhlIHNlbWFudGljCi12YWx1ZSBhc3NvY2lhdGVkIHdpdGggYSB0b2tlbi4gIChJbiBhIHB1cmUgcGFyc2VyLCBpdCBpcyBhIGxvY2FsCi12YXJpYWJsZSB3aXRoaW4gQGNvZGV7eXlwYXJzZX0sIGFuZCBpdHMgYWRkcmVzcyBpcyBwYXNzZWQgdG8KLUBjb2Rle3l5bGV4fS4pCi1AeHJlZntUb2tlbiBWYWx1ZXMsICxTZW1hbnRpYyBWYWx1ZXMgb2YgVG9rZW5zfS4KLUluIHNlbWFudGljIGFjdGlvbnMsIGl0IHN0b3JlcyB0aGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2stYWhlYWQgdG9rZW4uCi1AeHJlZntBY3Rpb25zLCAsQWN0aW9uc30uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7TWFjcm99IFlZTUFYREVQVEgKLU1hY3JvIGZvciBzcGVjaWZ5aW5nIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHBhcnNlciBzdGFjay4gIEB4cmVme01lbW9yeQotTWFuYWdlbWVudH0uCi1AZW5kIGRlZmZuCi0KLUBkZWZmbiB7VmFyaWFibGV9IHl5bmVycnMKLUdsb2JhbCB2YXJpYWJsZSB3aGljaCBCaXNvbiBpbmNyZW1lbnRzIGVhY2ggdGltZSBpdCByZXBvcnRzIGEgc3ludGF4IGVycm9yLgotKEluIGEgcHVyZSBwYXJzZXIsIGl0IGlzIGEgbG9jYWwgdmFyaWFibGUgd2l0aGluIEBjb2Rle3l5cGFyc2V9LikKLUB4cmVme0Vycm9yIFJlcG9ydGluZywgLFRoZSBFcnJvciBSZXBvcnRpbmcgRnVuY3Rpb24gQGNvZGV7eXllcnJvcn19LgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge0Z1bmN0aW9ufSB5eXBhcnNlCi1UaGUgcGFyc2VyIGZ1bmN0aW9uIHByb2R1Y2VkIGJ5IEJpc29uOyBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gc3RhcnQKLXBhcnNpbmcuICBAeHJlZntQYXJzZXIgRnVuY3Rpb24sICxUaGUgUGFyc2VyIEZ1bmN0aW9uIEBjb2Rle3l5cGFyc2V9fS4KLUBlbmQgZGVmZm4KLQotQGRlZmZuIHtNYWNyb30gWVlQQVJTRV9QQVJBTQotQW4gb2Jzb2xldGUgbWFjcm8gZm9yIHNwZWNpZnlpbmcgdGhlIG5hbWUgb2YgYSBwYXJhbWV0ZXIgdGhhdAotQGNvZGV7eXlwYXJzZX0gc2hvdWxkIGFjY2VwdC4gIFRoZSB1c2Ugb2YgdGhpcyBtYWNybyBpcyBkZXByZWNhdGVkLCBhbmQKLWlzIHN1cHBvcnRlZCBvbmx5IGZvciBZYWNjIGxpa2UgcGFyc2Vycy4gIEB4cmVme1B1cmUgQ2FsbGluZywsIENhbGxpbmcKLUNvbnZlbnRpb25zIGZvciBQdXJlIFBhcnNlcnN9LgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge01hY3JvfSBZWVJFQ09WRVJJTkcKLVRoZSBleHByZXNzaW9uIEBjb2Rle1lZUkVDT1ZFUklORyAoKX0geWllbGRzIDEgd2hlbiB0aGUgcGFyc2VyCi1pcyByZWNvdmVyaW5nIGZyb20gYSBzeW50YXggZXJyb3IsIGFuZCAwIG90aGVyd2lzZS4KLUB4cmVme0FjdGlvbiBGZWF0dXJlcywgLFNwZWNpYWwgRmVhdHVyZXMgZm9yIFVzZSBpbiBBY3Rpb25zfS4KLUBlbmQgZGVmZm4KLQotQGRlZmZuIHtNYWNyb30gWVlTVEFDS19VU0VfQUxMT0NBCi1NYWNybyB1c2VkIHRvIGNvbnRyb2wgdGhlIHVzZSBvZiBAY29kZXthbGxvY2F9IHdoZW4gdGhlIEMKLUBhY3Jvbnlte0xBTFJ9KDEpIHBhcnNlciBuZWVkcyB0byBleHRlbmQgaXRzIHN0YWNrcy4gIElmIGRlZmluZWQgdG8gMCwKLXRoZSBwYXJzZXIgd2lsbCB1c2UgQGNvZGV7bWFsbG9jfSB0byBleHRlbmQgaXRzIHN0YWNrcy4gIElmIGRlZmluZWQgdG8KLTEsIHRoZSBwYXJzZXIgd2lsbCB1c2UgQGNvZGV7YWxsb2NhfS4gIFZhbHVlcyBvdGhlciB0aGFuIDAgYW5kIDEgYXJlCi1yZXNlcnZlZCBmb3IgZnV0dXJlIEJpc29uIGV4dGVuc2lvbnMuICBJZiBub3QgZGVmaW5lZCwKLUBjb2Rle1lZU1RBQ0tfVVNFX0FMTE9DQX0gZGVmYXVsdHMgdG8gMC4KLQotSW4gdGhlIGFsbC10b28tY29tbW9uIGNhc2Ugd2hlcmUgeW91ciBjb2RlIG1heSBydW4gb24gYSBob3N0IHdpdGggYQotbGltaXRlZCBzdGFjayBhbmQgd2l0aCB1bnJlbGlhYmxlIHN0YWNrLW92ZXJmbG93IGNoZWNraW5nLCB5b3Ugc2hvdWxkCi1zZXQgQGNvZGV7WVlNQVhERVBUSH0gdG8gYSB2YWx1ZSB0aGF0IGNhbm5vdCBwb3NzaWJseSByZXN1bHQgaW4KLXVuY2hlY2tlZCBzdGFjayBvdmVyZmxvdyBvbiBhbnkgb2YgeW91ciB0YXJnZXQgaG9zdHMgd2hlbgotQGNvZGV7YWxsb2NhfSBpcyBjYWxsZWQuICBZb3UgY2FuIGluc3BlY3QgdGhlIGNvZGUgdGhhdCBCaXNvbgotZ2VuZXJhdGVzIGluIG9yZGVyIHRvIGRldGVybWluZSB0aGUgcHJvcGVyIG51bWVyaWMgdmFsdWVzLiAgVGhpcyB3aWxsCi1yZXF1aXJlIHNvbWUgZXhwZXJ0aXNlIGluIGxvdy1sZXZlbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgotQGVuZCBkZWZmbgotCi1AZGVmZm4ge1R5cGV9IFlZU1RZUEUKLURhdGEgdHlwZSBvZiBzZW1hbnRpYyB2YWx1ZXM7IEBjb2Rle2ludH0gYnkgZGVmYXVsdC4KLUB4cmVme1ZhbHVlIFR5cGUsICxEYXRhIFR5cGVzIG9mIFNlbWFudGljIFZhbHVlc30uCi1AZW5kIGRlZmZuCi0KLUBub2RlIEdsb3NzYXJ5Ci1AYXBwZW5kaXggR2xvc3NhcnkKLUBjaW5kZXggZ2xvc3NhcnkKLQotQHRhYmxlIEBhc2lzCi1AaXRlbSBCYWNrdXMtTmF1ciBGb3JtIChAYWNyb255bXtCTkZ9OyBhbHNvIGNhbGxlZCBgYEJhY2t1cyBOb3JtYWwgRm9ybScnKQotRm9ybWFsIG1ldGhvZCBvZiBzcGVjaWZ5aW5nIGNvbnRleHQtZnJlZSBncmFtbWFycyBvcmlnaW5hbGx5IHByb3Bvc2VkCi1ieSBKb2huIEJhY2t1cywgYW5kIHNsaWdodGx5IGltcHJvdmVkIGJ5IFBldGVyIE5hdXIgaW4gaGlzIDE5NjAtMDEtMDIKLWNvbW1pdHRlZSBkb2N1bWVudCBjb250cmlidXRpbmcgdG8gd2hhdCBiZWNhbWUgdGhlIEFsZ29sIDYwIHJlcG9ydC4KLUB4cmVme0xhbmd1YWdlIGFuZCBHcmFtbWFyLCAsTGFuZ3VhZ2VzIGFuZCBDb250ZXh0LUZyZWUgR3JhbW1hcnN9LgotCi1AaXRlbSBDb250ZXh0LWZyZWUgZ3JhbW1hcnMKLUdyYW1tYXJzIHNwZWNpZmllZCBhcyBydWxlcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHJlZ2FyZGxlc3Mgb2YgY29udGV4dC4KLVRodXMsIGlmIHRoZXJlIGlzIGEgcnVsZSB3aGljaCBzYXlzIHRoYXQgYW4gaW50ZWdlciBjYW4gYmUgdXNlZCBhcyBhbgotZXhwcmVzc2lvbiwgaW50ZWdlcnMgYXJlIGFsbG93ZWQgQGVtcGh7YW55d2hlcmV9IGFuIGV4cHJlc3Npb24gaXMKLXBlcm1pdHRlZC4gIEB4cmVme0xhbmd1YWdlIGFuZCBHcmFtbWFyLCAsTGFuZ3VhZ2VzIGFuZCBDb250ZXh0LUZyZWUKLUdyYW1tYXJzfS4KLQotQGl0ZW0gRHluYW1pYyBhbGxvY2F0aW9uCi1BbGxvY2F0aW9uIG9mIG1lbW9yeSB0aGF0IG9jY3VycyBkdXJpbmcgZXhlY3V0aW9uLCByYXRoZXIgdGhhbiBhdAotY29tcGlsZSB0aW1lIG9yIG9uIGVudHJ5IHRvIGEgZnVuY3Rpb24uCi0KLUBpdGVtIEVtcHR5IHN0cmluZwotQW5hbG9nb3VzIHRvIHRoZSBlbXB0eSBzZXQgaW4gc2V0IHRoZW9yeSwgdGhlIGVtcHR5IHN0cmluZyBpcyBhCi1jaGFyYWN0ZXIgc3RyaW5nIG9mIGxlbmd0aCB6ZXJvLgotCi1AaXRlbSBGaW5pdGUtc3RhdGUgc3RhY2sgbWFjaGluZQotQSBgYG1hY2hpbmUnJyB0aGF0IGhhcyBkaXNjcmV0ZSBzdGF0ZXMgaW4gd2hpY2ggaXQgaXMgc2FpZCB0byBleGlzdCBhdAotZWFjaCBpbnN0YW50IGluIHRpbWUuICBBcyBpbnB1dCB0byB0aGUgbWFjaGluZSBpcyBwcm9jZXNzZWQsIHRoZQotbWFjaGluZSBtb3ZlcyBmcm9tIHN0YXRlIHRvIHN0YXRlIGFzIHNwZWNpZmllZCBieSB0aGUgbG9naWMgb2YgdGhlCi1tYWNoaW5lLiAgSW4gdGhlIGNhc2Ugb2YgdGhlIHBhcnNlciwgdGhlIGlucHV0IGlzIHRoZSBsYW5ndWFnZSBiZWluZwotcGFyc2VkLCBhbmQgdGhlIHN0YXRlcyBjb3JyZXNwb25kIHRvIHZhcmlvdXMgc3RhZ2VzIGluIHRoZSBncmFtbWFyCi1ydWxlcy4gIEB4cmVme0FsZ29yaXRobSwgLFRoZSBCaXNvbiBQYXJzZXIgQWxnb3JpdGhtfS4KLQotQGl0ZW0gR2VuZXJhbGl6ZWQgQGFjcm9ueW17TFJ9IChAYWNyb255bXtHTFJ9KQotQSBwYXJzaW5nIGFsZ29yaXRobSB0aGF0IGNhbiBoYW5kbGUgYWxsIGNvbnRleHQtZnJlZSBncmFtbWFycywgaW5jbHVkaW5nIHRob3NlCi10aGF0IGFyZSBub3QgQGFjcm9ueW17TEFMUn0oMSkuICBJdCByZXNvbHZlcyBzaXR1YXRpb25zIHRoYXQgQmlzb24ncwotdXN1YWwgQGFjcm9ueW17TEFMUn0oMSkKLWFsZ29yaXRobSBjYW5ub3QgYnkgZWZmZWN0aXZlbHkgc3BsaXR0aW5nIG9mZiBtdWx0aXBsZSBwYXJzZXJzLCB0cnlpbmcgYWxsCi1wb3NzaWJsZSBwYXJzZXJzLCBhbmQgZGlzY2FyZGluZyB0aG9zZSB0aGF0IGZhaWwgaW4gdGhlIGxpZ2h0IG9mIGFkZGl0aW9uYWwKLXJpZ2h0IGNvbnRleHQuICBAeHJlZntHZW5lcmFsaXplZCBMUiBQYXJzaW5nLCAsR2VuZXJhbGl6ZWQKLUBhY3Jvbnlte0xSfSBQYXJzaW5nfS4KLQotQGl0ZW0gR3JvdXBpbmcKLUEgbGFuZ3VhZ2UgY29uc3RydWN0IHRoYXQgaXMgKGluIGdlbmVyYWwpIGdyYW1tYXRpY2FsbHkgZGl2aXNpYmxlOwotZm9yIGV4YW1wbGUsIGBleHByZXNzaW9uJyBvciBgZGVjbGFyYXRpb24nIGluIENALgotQHhyZWZ7TGFuZ3VhZ2UgYW5kIEdyYW1tYXIsICxMYW5ndWFnZXMgYW5kIENvbnRleHQtRnJlZSBHcmFtbWFyc30uCi0KLUBpdGVtIEluZml4IG9wZXJhdG9yCi1BbiBhcml0aG1ldGljIG9wZXJhdG9yIHRoYXQgaXMgcGxhY2VkIGJldHdlZW4gdGhlIG9wZXJhbmRzIG9uIHdoaWNoIGl0Ci1wZXJmb3JtcyBzb21lIG9wZXJhdGlvbi4KLQotQGl0ZW0gSW5wdXQgc3RyZWFtCi1BIGNvbnRpbnVvdXMgZmxvdyBvZiBkYXRhIGJldHdlZW4gZGV2aWNlcyBvciBwcm9ncmFtcy4KLQotQGl0ZW0gTGFuZ3VhZ2UgY29uc3RydWN0Ci1PbmUgb2YgdGhlIHR5cGljYWwgdXNhZ2Ugc2NoZW1hcyBvZiB0aGUgbGFuZ3VhZ2UuICBGb3IgZXhhbXBsZSwgb25lIG9mCi10aGUgY29uc3RydWN0cyBvZiB0aGUgQyBsYW5ndWFnZSBpcyB0aGUgQGNvZGV7aWZ9IHN0YXRlbWVudC4KLUB4cmVme0xhbmd1YWdlIGFuZCBHcmFtbWFyLCAsTGFuZ3VhZ2VzIGFuZCBDb250ZXh0LUZyZWUgR3JhbW1hcnN9LgotCi1AaXRlbSBMZWZ0IGFzc29jaWF0aXZpdHkKLU9wZXJhdG9ycyBoYXZpbmcgbGVmdCBhc3NvY2lhdGl2aXR5IGFyZSBhbmFseXplZCBmcm9tIGxlZnQgdG8gcmlnaHQ6Ci1Ac2FtcHthK2IrY30gZmlyc3QgY29tcHV0ZXMgQHNhbXB7YStifSBhbmQgdGhlbiBjb21iaW5lcyB3aXRoCi1Ac2FtcHtjfS4gIEB4cmVme1ByZWNlZGVuY2UsICxPcGVyYXRvciBQcmVjZWRlbmNlfS4KLQotQGl0ZW0gTGVmdCByZWN1cnNpb24KLUEgcnVsZSB3aG9zZSByZXN1bHQgc3ltYm9sIGlzIGFsc28gaXRzIGZpcnN0IGNvbXBvbmVudCBzeW1ib2w7IGZvcgotZXhhbXBsZSwgQHNhbXB7ZXhwc2VxMSA6IGV4cHNlcTEgJywnIGV4cDt9LiAgQHhyZWZ7UmVjdXJzaW9uLCAsUmVjdXJzaXZlCi1SdWxlc30uCi0KLUBpdGVtIExlZnQtdG8tcmlnaHQgcGFyc2luZwotUGFyc2luZyBhIHNlbnRlbmNlIG9mIGEgbGFuZ3VhZ2UgYnkgYW5hbHl6aW5nIGl0IHRva2VuIGJ5IHRva2VuIGZyb20KLWxlZnQgdG8gcmlnaHQuICBAeHJlZntBbGdvcml0aG0sICxUaGUgQmlzb24gUGFyc2VyIEFsZ29yaXRobX0uCi0KLUBpdGVtIExleGljYWwgYW5hbHl6ZXIgKHNjYW5uZXIpCi1BIGZ1bmN0aW9uIHRoYXQgcmVhZHMgYW4gaW5wdXQgc3RyZWFtIGFuZCByZXR1cm5zIHRva2VucyBvbmUgYnkgb25lLgotQHhyZWZ7TGV4aWNhbCwgLFRoZSBMZXhpY2FsIEFuYWx5emVyIEZ1bmN0aW9uIEBjb2Rle3l5bGV4fX0uCi0KLUBpdGVtIExleGljYWwgdGllLWluCi1BIGZsYWcsIHNldCBieSBhY3Rpb25zIGluIHRoZSBncmFtbWFyIHJ1bGVzLCB3aGljaCBhbHRlcnMgdGhlIHdheQotdG9rZW5zIGFyZSBwYXJzZWQuICBAeHJlZntMZXhpY2FsIFRpZS1pbnN9LgotCi1AaXRlbSBMaXRlcmFsIHN0cmluZyB0b2tlbgotQSB0b2tlbiB3aGljaCBjb25zaXN0cyBvZiB0d28gb3IgbW9yZSBmaXhlZCBjaGFyYWN0ZXJzLiAgQHhyZWZ7U3ltYm9sc30uCi0KLUBpdGVtIExvb2stYWhlYWQgdG9rZW4KLUEgdG9rZW4gYWxyZWFkeSByZWFkIGJ1dCBub3QgeWV0IHNoaWZ0ZWQuICBAeHJlZntMb29rLUFoZWFkLCAsTG9vay1BaGVhZAotVG9rZW5zfS4KLQotQGl0ZW0gQGFjcm9ueW17TEFMUn0oMSkKLVRoZSBjbGFzcyBvZiBjb250ZXh0LWZyZWUgZ3JhbW1hcnMgdGhhdCBCaXNvbiAobGlrZSBtb3N0IG90aGVyIHBhcnNlcgotZ2VuZXJhdG9ycykgY2FuIGhhbmRsZTsgYSBzdWJzZXQgb2YgQGFjcm9ueW17TFJ9KDEpLiAgQHhyZWZ7TXlzdGVyeQotQ29uZmxpY3RzLCAsTXlzdGVyaW91cyBSZWR1Y2UvUmVkdWNlIENvbmZsaWN0c30uCi0KLUBpdGVtIEBhY3Jvbnlte0xSfSgxKQotVGhlIGNsYXNzIG9mIGNvbnRleHQtZnJlZSBncmFtbWFycyBpbiB3aGljaCBhdCBtb3N0IG9uZSB0b2tlbiBvZgotbG9vay1haGVhZCBpcyBuZWVkZWQgdG8gZGlzYW1iaWd1YXRlIHRoZSBwYXJzaW5nIG9mIGFueSBwaWVjZSBvZiBpbnB1dC4KLQotQGl0ZW0gTm9udGVybWluYWwgc3ltYm9sCi1BIGdyYW1tYXIgc3ltYm9sIHN0YW5kaW5nIGZvciBhIGdyYW1tYXRpY2FsIGNvbnN0cnVjdCB0aGF0IGNhbgotYmUgZXhwcmVzc2VkIHRocm91Z2ggcnVsZXMgaW4gdGVybXMgb2Ygc21hbGxlciBjb25zdHJ1Y3RzOyBpbiBvdGhlcgotd29yZHMsIGEgY29uc3RydWN0IHRoYXQgaXMgbm90IGEgdG9rZW4uICBAeHJlZntTeW1ib2xzfS4KLQotQGl0ZW0gUGFyc2VyCi1BIGZ1bmN0aW9uIHRoYXQgcmVjb2duaXplcyB2YWxpZCBzZW50ZW5jZXMgb2YgYSBsYW5ndWFnZSBieSBhbmFseXppbmcKLXRoZSBzeW50YXggc3RydWN0dXJlIG9mIGEgc2V0IG9mIHRva2VucyBwYXNzZWQgdG8gaXQgZnJvbSBhIGxleGljYWwKLWFuYWx5emVyLgotCi1AaXRlbSBQb3N0Zml4IG9wZXJhdG9yCi1BbiBhcml0aG1ldGljIG9wZXJhdG9yIHRoYXQgaXMgcGxhY2VkIGFmdGVyIHRoZSBvcGVyYW5kcyB1cG9uIHdoaWNoIGl0Ci1wZXJmb3JtcyBzb21lIG9wZXJhdGlvbi4KLQotQGl0ZW0gUmVkdWN0aW9uCi1SZXBsYWNpbmcgYSBzdHJpbmcgb2Ygbm9udGVybWluYWxzIGFuZC9vciB0ZXJtaW5hbHMgd2l0aCBhIHNpbmdsZQotbm9udGVybWluYWwsIGFjY29yZGluZyB0byBhIGdyYW1tYXIgcnVsZS4gIEB4cmVme0FsZ29yaXRobSwgLFRoZSBCaXNvbgotUGFyc2VyIEFsZ29yaXRobX0uCi0KLUBpdGVtIFJlZW50cmFudAotQSByZWVudHJhbnQgc3VicHJvZ3JhbSBpcyBhIHN1YnByb2dyYW0gd2hpY2ggY2FuIGJlIGluIGludm9rZWQgYW55Ci1udW1iZXIgb2YgdGltZXMgaW4gcGFyYWxsZWwsIHdpdGhvdXQgaW50ZXJmZXJlbmNlIGJldHdlZW4gdGhlIHZhcmlvdXMKLWludm9jYXRpb25zLiAgQHhyZWZ7UHVyZSBEZWNsLCAsQSBQdXJlIChSZWVudHJhbnQpIFBhcnNlcn0uCi0KLUBpdGVtIFJldmVyc2UgcG9saXNoIG5vdGF0aW9uCi1BIGxhbmd1YWdlIGluIHdoaWNoIGFsbCBvcGVyYXRvcnMgYXJlIHBvc3RmaXggb3BlcmF0b3JzLgotCi1AaXRlbSBSaWdodCByZWN1cnNpb24KLUEgcnVsZSB3aG9zZSByZXN1bHQgc3ltYm9sIGlzIGFsc28gaXRzIGxhc3QgY29tcG9uZW50IHN5bWJvbDsgZm9yCi1leGFtcGxlLCBAc2FtcHtleHBzZXExOiBleHAgJywnIGV4cHNlcTE7fS4gIEB4cmVme1JlY3Vyc2lvbiwgLFJlY3Vyc2l2ZQotUnVsZXN9LgotCi1AaXRlbSBTZW1hbnRpY3MKLUluIGNvbXB1dGVyIGxhbmd1YWdlcywgdGhlIHNlbWFudGljcyBhcmUgc3BlY2lmaWVkIGJ5IHRoZSBhY3Rpb25zCi10YWtlbiBmb3IgZWFjaCBpbnN0YW5jZSBvZiB0aGUgbGFuZ3VhZ2UsIGkuZS4sIHRoZSBtZWFuaW5nIG9mCi1lYWNoIHN0YXRlbWVudC4gIEB4cmVme1NlbWFudGljcywgLERlZmluaW5nIExhbmd1YWdlIFNlbWFudGljc30uCi0KLUBpdGVtIFNoaWZ0Ci1BIHBhcnNlciBpcyBzYWlkIHRvIHNoaWZ0IHdoZW4gaXQgbWFrZXMgdGhlIGNob2ljZSBvZiBhbmFseXppbmcKLWZ1cnRoZXIgaW5wdXQgZnJvbSB0aGUgc3RyZWFtIHJhdGhlciB0aGFuIHJlZHVjaW5nIGltbWVkaWF0ZWx5IHNvbWUKLWFscmVhZHktcmVjb2duaXplZCBydWxlLiAgQHhyZWZ7QWxnb3JpdGhtLCAsVGhlIEJpc29uIFBhcnNlciBBbGdvcml0aG19LgotCi1AaXRlbSBTaW5nbGUtY2hhcmFjdGVyIGxpdGVyYWwKLUEgc2luZ2xlIGNoYXJhY3RlciB0aGF0IGlzIHJlY29nbml6ZWQgYW5kIGludGVycHJldGVkIGFzIGlzLgotQHhyZWZ7R3JhbW1hciBpbiBCaXNvbiwgLEZyb20gRm9ybWFsIFJ1bGVzIHRvIEJpc29uIElucHV0fS4KLQotQGl0ZW0gU3RhcnQgc3ltYm9sCi1UaGUgbm9udGVybWluYWwgc3ltYm9sIHRoYXQgc3RhbmRzIGZvciBhIGNvbXBsZXRlIHZhbGlkIHV0dGVyYW5jZSBpbgotdGhlIGxhbmd1YWdlIGJlaW5nIHBhcnNlZC4gIFRoZSBzdGFydCBzeW1ib2wgaXMgdXN1YWxseSBsaXN0ZWQgYXMgdGhlCi1maXJzdCBub250ZXJtaW5hbCBzeW1ib2wgaW4gYSBsYW5ndWFnZSBzcGVjaWZpY2F0aW9uLgotQHhyZWZ7U3RhcnQgRGVjbCwgLFRoZSBTdGFydC1TeW1ib2x9LgotCi1AaXRlbSBTeW1ib2wgdGFibGUKLUEgZGF0YSBzdHJ1Y3R1cmUgd2hlcmUgc3ltYm9sIG5hbWVzIGFuZCBhc3NvY2lhdGVkIGRhdGEgYXJlIHN0b3JlZAotZHVyaW5nIHBhcnNpbmcgdG8gYWxsb3cgZm9yIHJlY29nbml0aW9uIGFuZCB1c2Ugb2YgZXhpc3RpbmcKLWluZm9ybWF0aW9uIGluIHJlcGVhdGVkIHVzZXMgb2YgYSBzeW1ib2wuICBAeHJlZntNdWx0aS1mdW5jdGlvbiBDYWxjfS4KLQotQGl0ZW0gU3ludGF4IGVycm9yCi1BbiBlcnJvciBlbmNvdW50ZXJlZCBkdXJpbmcgcGFyc2luZyBvZiBhbiBpbnB1dCBzdHJlYW0gZHVlIHRvIGludmFsaWQKLXN5bnRheC4gIEB4cmVme0Vycm9yIFJlY292ZXJ5fS4KLQotQGl0ZW0gVG9rZW4KLUEgYmFzaWMsIGdyYW1tYXRpY2FsbHkgaW5kaXZpc2libGUgdW5pdCBvZiBhIGxhbmd1YWdlLiAgVGhlIHN5bWJvbAotdGhhdCBkZXNjcmliZXMgYSB0b2tlbiBpbiB0aGUgZ3JhbW1hciBpcyBhIHRlcm1pbmFsIHN5bWJvbC4KLVRoZSBpbnB1dCBvZiB0aGUgQmlzb24gcGFyc2VyIGlzIGEgc3RyZWFtIG9mIHRva2VucyB3aGljaCBjb21lcyBmcm9tCi10aGUgbGV4aWNhbCBhbmFseXplci4gIEB4cmVme1N5bWJvbHN9LgotCi1AaXRlbSBUZXJtaW5hbCBzeW1ib2wKLUEgZ3JhbW1hciBzeW1ib2wgdGhhdCBoYXMgbm8gcnVsZXMgaW4gdGhlIGdyYW1tYXIgYW5kIHRoZXJlZm9yZSBpcwotZ3JhbW1hdGljYWxseSBpbmRpdmlzaWJsZS4gIFRoZSBwaWVjZSBvZiB0ZXh0IGl0IHJlcHJlc2VudHMgaXMgYSB0b2tlbi4KLUB4cmVme0xhbmd1YWdlIGFuZCBHcmFtbWFyLCAsTGFuZ3VhZ2VzIGFuZCBDb250ZXh0LUZyZWUgR3JhbW1hcnN9LgotQGVuZCB0YWJsZQotCi1Abm9kZSBDb3B5aW5nIFRoaXMgTWFudWFsCi1AYXBwZW5kaXggQ29weWluZyBUaGlzIE1hbnVhbAotCi1AbWVudQotKiBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2U6OiAgTGljZW5zZSBmb3IgY29weWluZyB0aGlzIG1hbnVhbC4KLUBlbmQgbWVudQotCi1AaW5jbHVkZSBmZGwudGV4aQotCi1Abm9kZSBJbmRleAotQHVubnVtYmVyZWQgSW5kZXgKLQotQHByaW50aW5kZXggY3AKLQotQGJ5ZQotCi1AYyBMb2NhbFdvcmRzOiB0ZXhpbmZvIHNldGZpbGVuYW1lIHNldHRpdGxlIHNldGNoYXB0ZXJuZXdwYWdlIGZpbmFsb3V0Ci1AYyBMb2NhbFdvcmRzOiBpZmluZm8gc21hbGxib29rIHNob3J0dGl0bGVwYWdlIHRpdGxlcGFnZSBHUEwgRklYTUUgaWZ0ZXgKLUBjIExvY2FsV29yZHM6IGFraW0gZm4gY3Agc3luY29kZWluZGV4IHZyIHRwIHN5bmluZGV4IGRpcmNhdGVnb3J5IGRpcmVudHJ5Ci1AYyBMb2NhbFdvcmRzOiBpZnNldCB2c2tpcCBwdCBmaWxsbCBpbnNlcnRjb3B5aW5nIHNwIElTQk4gRXRpZW5uZSBTdXZhc2EKLUBjIExvY2FsV29yZHM6IGlmbm90dGV4IHl5cGFyc2UgZGV0YWlsbWVudSBHTFIgUlBOIENhbGMgdmFyIERlY2xzIFJwY2FsYwotQGMgTG9jYWxXb3JkczogcnBjYWxjIExleGVyIEdlbiBDb21wIEV4cHIgbHRjYWxjIG1mY2FsYyBEZWNsIFN5bXRhYiB5eWxleAotQGMgTG9jYWxXb3JkczogeXllcnJvciBweHJlZiBMUiB5eWx2YWwgY2luZGV4IGRmbiBMQUxSIHNhbXAgZ3BsIEJORiB4cmVmCi1AYyBMb2NhbFdvcmRzOiBjb25zdCBpbnQgcGFyZW4gaWZub3RpbmZvIEFDIG5vaW5kZW50IGVtcGggZXhwciBzdG10IGZpbmRleAotQGMgTG9jYWxXb3JkczogZ2xyIFlZU1RZUEUgVFlQRU5BTUUgcHJvZyBkcHJlYyBwcmludGYgZGVjbCBpbml0IHN0bXRNZXJnZQotQGMgTG9jYWxXb3JkczogcHJlIFNUREMgR05VQyBlbmRpZiB5eSBZWSBhbGxvY2EgbGYgc3RkZGVmIHN0ZGxpYiBZWURFQlVHCi1AYyBMb2NhbFdvcmRzOiBOVU0gZXhwIHN1YnN1YnNlY3Rpb24ga2JkIEN0cmwgY3R5cGUgRU9GIGdldGNoYXIgaXNkaWdpdAotQGMgTG9jYWxXb3JkczogdW5nZXRjIHN0ZGluIHNjYW5mIHNjIGNhbGMgdWxhdG9yIGxzIGxtIGNjIE5FRyBwcmVjIHl5ZXJyb2sKLUBjIExvY2FsV29yZHM6IGxvbmdqbXAgZnByaW50ZiBzdGRlcnIgcHJlZyB5eWxsb2MgWVlMVFlQRSBjb3MgbG4KLUBjIExvY2FsV29yZHM6IHNtYWxsZXhhbXBsZSBzeW1yZWMgdmFsIHRwdHIgRk5DVCBmbmN0cHRyIGZ1bmMgc3RydWN0IHN5bQotQGMgTG9jYWxXb3JkczogZm5jdCBwdXRzeW0gZ2V0c3ltIGZuYW1lIGFyaXRoIGZuY3RzIGF0YW4gcHRyIG1hbGxvYyBzaXplb2YKLUBjIExvY2FsV29yZHM6IHN0cmxlbiBzdHJjcHkgZmN0biBzdHJjbXAgaXNhbHBoYSBzeW1idWYgcmVhbGxvYyBpc2FsbnVtCi1AYyBMb2NhbFdvcmRzOiBwdHlwZXMgaXR5cGUgWVlQUklOVCB0cmlncmFwaHMgeXl0bmFtZSBleHBzZXEgdmluZGV4IGR0eXBlCi1AYyBMb2NhbFdvcmRzOiBSaHMgWVlSSFNMT0MgTEUgbm9uYXNzb2Mgb3AgZGVmZm4gdHlwZWxlc3MgdHlwZWZ1bGwgeXluZXJycwotQGMgTG9jYWxXb3JkczogeXljaGFyIHl5ZGVidWcgbXNnIFlZTlRPS0VOUyBZWU5OVFMgWVlOUlVMRVMgWVlOU1RBVEVTCi1AYyBMb2NhbFdvcmRzOiBjcGFyc2UgY2xleCBkZWZ0eXBlZnVuIE5FIGRlZm1hYyBZWUFDQ0VQVCBZWUFCT1JUIHBhcmFtCi1AYyBMb2NhbFdvcmRzOiBzdHJuY21wIGludHZhbCB0aW5kZXggbHZhbHAgbG9jcCBsbG9jcCB0eXBlYWx0IFlZQkFDS1VQCi1AYyBMb2NhbFdvcmRzOiBZWUVNUFRZIFlZRU9GIFlZUkVDT1ZFUklORyB5eWNsZWFyaW4gR0UgZGVmIFVNSU5VUyBtYXliZXdvcmQKLUBjIExvY2FsV29yZHM6IEpvaG5zdG9uZSBTaGFtc2EgU2FkYWYgSHVzc2FpbiBUb21pdGEgVFIgdXJlZiBZWU1BWERFUFRICi1AYyBMb2NhbFdvcmRzOiBZWUlOSVRERVBUSCBzdG1udHMgcmVmIHN0bW50IGluaXRkY2wgbWF5YmVhc20gVkNHIG5vdHlwZQotQGMgTG9jYWxXb3JkczogaGV4ZmxhZyBTVFIgZXhkZW50IGl0ZW1zZXQgYXNpcyBEWVlERUJVRyBZWUZQUklOVEYgYXJncwotQGMgTG9jYWxXb3JkczogWVlQUklOVEYgaW5maWxlIHlwcCB5eHggb3V0ZmlsZSBpdGVteCB2Y2cgdGV4IGxlYWRlcmZpbGwKLUBjIExvY2FsV29yZHM6IGhib3ggaHNzIGhmaWxsIHR0IGx5IHl5aW4gZm9wZW4gZmNsb3NlIG9maXJzdCBnY2MgbGwKLUBjIExvY2FsV29yZHM6IHl5cmVzdGFydCBuYmFyIHl5dGV4dCBmc3Qgc25kIG9zcGxpdCBudHdvIHN0cmR1cCBBU1QKLUBjIExvY2FsV29yZHM6IFlZU1RBQ0sgRFZJIGZkbCBwcmludGluZGV4CmRpZmYgLS1naXQgYS9kb2MvYmlzb24ueCBiL2RvYy9iaXNvbi54Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYWE5ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvYmlzb24ueApAQCAtMCwwICsxLDU1IEBACitbbmFtZV0KK2Jpc29uIFwtIEdOVSBQcm9qZWN0IHBhcnNlciBnZW5lcmF0b3IgKHlhY2MgcmVwbGFjZW1lbnQpCisKK1tkZXNjcmlwdGlvbl0KKy5JIEJpc29uCitpcyBhIHBhcnNlciBnZW5lcmF0b3IgaW4gdGhlIHN0eWxlIG9mCisuSVIgeWFjYyAoMSkuCitJdCBzaG91bGQgYmUgdXB3YXJkbHkgY29tcGF0aWJsZSB3aXRoIGlucHV0IGZpbGVzIGRlc2lnbmVkCitmb3IKKy5JUiB5YWNjIC4KKy5QUAorSW5wdXQgZmlsZXMgc2hvdWxkIGZvbGxvdyB0aGUKKy5JIHlhY2MKK2NvbnZlbnRpb24gb2YgZW5kaW5nIGluCisuQlIgLnkgLgorVW5saWtlCisuSVIgeWFjYyAsCit0aGUgZ2VuZXJhdGVkIGZpbGVzIGRvIG5vdCBoYXZlIGZpeGVkIG5hbWVzLCBidXQgaW5zdGVhZCB1c2UgdGhlIHByZWZpeAorb2YgdGhlIGlucHV0IGZpbGUuCitNb3Jlb3ZlciwgaWYgeW91IG5lZWQgdG8gcHV0CisuSSBDKysKK2NvZGUgaW4gdGhlIGlucHV0IGZpbGUsIHlvdSBjYW4gZW5kIGhpcyBuYW1lIGJ5IGEgQysrLWxpa2UgZXh0ZW5zaW9uCisoLnlwcCBvciAueSsrKSwgdGhlbiBiaXNvbiB3aWxsIGZvbGxvdyB5b3VyIGV4dGVuc2lvbiB0byBuYW1lIHRoZQorb3V0cHV0IGZpbGUgKC5jcHAgb3IgLmMrKykuCitGb3IgaW5zdGFuY2UsIGEgZ3JhbW1hciBkZXNjcmlwdGlvbiBmaWxlIG5hbWVkCisuQiBwYXJzZS55eHgKK3dvdWxkIHByb2R1Y2UgdGhlIGdlbmVyYXRlZCBwYXJzZXIgaW4gYSBmaWxlIG5hbWVkCisuQlIgcGFyc2UudGFiLmN4eCAsCitpbnN0ZWFkIG9mCisuSVIgeWFjYyAncworLkIgeS50YWIuYworb3Igb2xkCisuSSBCaXNvbgordmVyc2lvbidzCisuQlIgcGFyc2UudGFiLmMgLgorLlBQCitUaGlzIGRlc2NyaXB0aW9uIG9mIHRoZSBvcHRpb25zIHRoYXQgY2FuIGJlIGdpdmVuIHRvCisuSSBiaXNvbgoraXMgYWRhcHRlZCBmcm9tIHRoZSBub2RlCisuQiBJbnZvY2F0aW9uCitpbiB0aGUKKy5CIGJpc29uLnRleGluZm8KK21hbnVhbCwgd2hpY2ggc2hvdWxkIGJlIHRha2VuIGFzIGF1dGhvcml0YXRpdmUuCisuUFAKKy5JIEJpc29uCitzdXBwb3J0cyBib3RoIHRyYWRpdGlvbmFsIHNpbmdsZS1sZXR0ZXIgb3B0aW9ucyBhbmQgbW5lbW9uaWMgbG9uZworb3B0aW9uIG5hbWVzLiAgTG9uZyBvcHRpb24gbmFtZXMgYXJlIGluZGljYXRlZCB3aXRoCisuQiBcLVwtCitpbnN0ZWFkIG9mCisuQlIgXC0gLgorQWJicmV2aWF0aW9ucyBmb3Igb3B0aW9uIG5hbWVzIGFyZSBhbGxvd2VkIGFzIGxvbmcgYXMgdGhleQorYXJlIHVuaXF1ZS4gIFdoZW4gYSBsb25nIG9wdGlvbiB0YWtlcyBhbiBhcmd1bWVudCwgbGlrZQorLkJSIFwtXC1maWxlLXByZWZpeCAsCitjb25uZWN0IHRoZSBvcHRpb24gbmFtZSBhbmQgdGhlIGFyZ3VtZW50IHdpdGgKKy5CUiA9IC4KZGlmZiAtLWdpdCBhL2RvYy9jb21tb24ueCBiL2RvYy9jb21tb24ueApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDIyNGMzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2NvbW1vbi54CkBAIC0wLDAgKzEsNCBAQAorW3NlZSBhbHNvXQorLkJSIGxleCAoMSksCisuQlIgZmxleCAoMSksCisuQlIgeWFjYyAoMSkuCmRpZmYgLS1naXQgYS9kb2MvY3Jvc3Mtb3B0aW9ucy50ZXhpIGIvZG9jL2Nyb3NzLW9wdGlvbnMudGV4aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjcxZDMxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2Nyb3NzLW9wdGlvbnMudGV4aQpAQCAtMCwwICsxLDk1IEBACitAaXRlbSBAb3B0aW9uey0tZGVidWd9CitAdGFiIEBvcHRpb257LXR9CitAdGFiIEBjb2RleyVkZWJ1Z30KKworQGl0ZW0gQG9wdGlvbnstLWRlZmluZT1AdmFye25hbWV9Wz1AdmFye3ZhbHVlfV19CitAdGFiIEBvcHRpb257LUQgQHZhcntuYW1lfVs9QHZhcnt2YWx1ZX1dfQorQHRhYiBAY29kZXslZGVmaW5lIEB2YXJ7bmFtZX0gWyJAdmFye3ZhbHVlfSJdfQorCitAaXRlbSBAb3B0aW9uey0tZGVmaW5lc1s9QHZhcntmaWxlfV19CitAdGFiIEBvcHRpb257LWR9CitAdGFiIEBjb2RleyVkZWZpbmVzIFtAdmFyeyJmaWxlIn1dfQorCitAaXRlbSBAb3B0aW9uey0tZmVhdHVyZVs9QHZhcntmZWF0dXJlfV19CitAdGFiIEBvcHRpb257LWYgW0B2YXJ7ZmVhdHVyZX1dfQorQHRhYgorCitAaXRlbSBAb3B0aW9uey0tZmlsZS1wcmVmaXg9QHZhcntwcmVmaXh9fQorQHRhYiBAb3B0aW9uey1iIEB2YXJ7cHJlZml4fX0KK0B0YWIgQGNvZGV7JWZpbGUtcHJlZml4IEB2YXJ7InByZWZpeCJ9fQorCitAaXRlbSBAb3B0aW9uey0tZm9yY2UtZGVmaW5lPUB2YXJ7bmFtZX1bPUB2YXJ7dmFsdWV9XX0KK0B0YWIgQG9wdGlvbnstRiBAdmFye25hbWV9Wz1AdmFye3ZhbHVlfV19CitAdGFiIEBjb2RleyVkZWZpbmUgQHZhcntuYW1lfSBbIkB2YXJ7dmFsdWV9Il19CisKK0BpdGVtIEBvcHRpb257LS1ncmFwaFs9QHZhcntmaWxlfV19CitAdGFiIEBvcHRpb257LWcgW0B2YXJ7ZmlsZX1dfQorQHRhYgorCitAaXRlbSBAb3B0aW9uey0taGVscH0KK0B0YWIgQG9wdGlvbnstaH0KK0B0YWIKKworQGl0ZW0gQG9wdGlvbnstLWxhbmd1YWdlPUB2YXJ7bGFuZ3VhZ2V9fQorQHRhYiBAb3B0aW9uey1MIEB2YXJ7bGFuZ3VhZ2V9fQorQHRhYiBAY29kZXslbGFuZ3VhZ2UgQHZhcnsibGFuZ3VhZ2UifX0KKworQGl0ZW0gQG9wdGlvbnstLWxvY2F0aW9uc30KK0B0YWIKK0B0YWIgQGNvZGV7JWxvY2F0aW9uc30KKworQGl0ZW0gQG9wdGlvbnstLW5hbWUtcHJlZml4PUB2YXJ7cHJlZml4fX0KK0B0YWIgQG9wdGlvbnstcCBAdmFye3ByZWZpeH19CitAdGFiIEBjb2RleyVuYW1lLXByZWZpeCBAdmFyeyJwcmVmaXgifX0KKworQGl0ZW0gQG9wdGlvbnstLW5vLWxpbmVzfQorQHRhYiBAb3B0aW9uey1sfQorQHRhYiBAY29kZXslbm8tbGluZXN9CisKK0BpdGVtIEBvcHRpb257LS1vdXRwdXQ9QHZhcntmaWxlfX0KK0B0YWIgQG9wdGlvbnstbyBAdmFye2ZpbGV9fQorQHRhYiBAY29kZXslb3V0cHV0IEB2YXJ7ImZpbGUifX0KKworQGl0ZW0gQG9wdGlvbnstLXByaW50LWRhdGFkaXJ9CitAdGFiCitAdGFiCisKK0BpdGVtIEBvcHRpb257LS1wcmludC1sb2NhbGVkaXJ9CitAdGFiCitAdGFiCisKK0BpdGVtIEBvcHRpb257LS1yZXBvcnQtZmlsZT1AdmFye2ZpbGV9fQorQHRhYgorQHRhYgorCitAaXRlbSBAb3B0aW9uey0tcmVwb3J0PUB2YXJ7dGhpbmdzfX0KK0B0YWIgQG9wdGlvbnstciBAdmFye3RoaW5nc319CitAdGFiCisKK0BpdGVtIEBvcHRpb257LS1za2VsZXRvbj1AdmFye2ZpbGV9fQorQHRhYiBAb3B0aW9uey1TIEB2YXJ7ZmlsZX19CitAdGFiIEBjb2RleyVza2VsZXRvbiBAdmFyeyJmaWxlIn19CisKK0BpdGVtIEBvcHRpb257LS10b2tlbi10YWJsZX0KK0B0YWIgQG9wdGlvbnsta30KK0B0YWIgQGNvZGV7JXRva2VuLXRhYmxlfQorCitAaXRlbSBAb3B0aW9uey0tdmVyYm9zZX0KK0B0YWIgQG9wdGlvbnstdn0KK0B0YWIgQGNvZGV7JXZlcmJvc2V9CisKK0BpdGVtIEBvcHRpb257LS12ZXJzaW9ufQorQHRhYiBAb3B0aW9uey1WfQorQHRhYgorCitAaXRlbSBAb3B0aW9uey0td2FybmluZ3NbPUB2YXJ7Y2F0ZWdvcnl9XX0KK0B0YWIgQG9wdGlvbnstVyBbQHZhcntjYXRlZ29yeX1dfQorQHRhYgorCitAaXRlbSBAb3B0aW9uey0teG1sWz1AdmFye2ZpbGV9XX0KK0B0YWIgQG9wdGlvbnsteCBbQHZhcntmaWxlfV19CitAdGFiCisKK0BpdGVtIEBvcHRpb257LS15YWNjfQorQHRhYiBAb3B0aW9uey15fQorQHRhYiBAY29kZXsleWFjY30KZGlmZiAtLWdpdCBhL2RvYy9mZGwudGV4aSBiL2RvYy9mZGwudGV4aQppbmRleCBmZTc4ZGY4Li5jYjcxZjA1IDEwMDY0NAotLS0gYS9kb2MvZmRsLnRleGkKKysrIGIvZG9jL2ZkbC50ZXhpCkBAIC0xLDEzICsxLDEyIEBACitAYyBUaGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLgorQGNlbnRlciBWZXJzaW9uIDEuMywgMyBOb3ZlbWJlciAyMDA4CiAKLUBub2RlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZQotQGFwcGVuZGl4c2VjIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZQotCi1AY2luZGV4IEZETCwgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlCi1AY2VudGVyIFZlcnNpb24gMS4yLCBOb3ZlbWJlciAyMDAyCitAYyBUaGlzIGZpbGUgaXMgaW50ZW5kZWQgdG8gYmUgaW5jbHVkZWQgd2l0aGluIGFub3RoZXIgZG9jdW1lbnQsCitAYyBoZW5jZSBubyBzZWN0aW9uaW5nIGNvbW1hbmQgb3IgQG5vZGUuCiAKIEBkaXNwbGF5Ci1Db3B5cmlnaHQgQGNvcHlyaWdodHt9IDIwMDAsMjAwMSwyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EKK0NvcHlyaWdodCBAY29weXJpZ2h0e30gMjAwMCwgMjAwMSwgMjAwMiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0B1cmVme2h0dHA6Ly9mc2Yub3JnL30KIAogRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCiBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KQEAgLTkzLDE2ICs5MiwxNiBAQAogb2YgdGV4dC4gIEEgY29weSB0aGF0IGlzIG5vdCBgYFRyYW5zcGFyZW50JycgaXMgY2FsbGVkIGBgT3BhcXVlJycuCiAKIEV4YW1wbGVzIG9mIHN1aXRhYmxlIGZvcm1hdHMgZm9yIFRyYW5zcGFyZW50IGNvcGllcyBpbmNsdWRlIHBsYWluCi1Ac2N7YXNjaWl9IHdpdGhvdXQgbWFya3VwLCBUZXhpbmZvIGlucHV0IGZvcm1hdCwgTGFAVGVYe30gaW5wdXQKLWZvcm1hdCwgQGFjcm9ueW17U0dNTH0gb3IgQGFjcm9ueW17WE1MfSB1c2luZyBhIHB1YmxpY2x5IGF2YWlsYWJsZQotQGFjcm9ueW17RFREfSwgYW5kIHN0YW5kYXJkLWNvbmZvcm1pbmcgc2ltcGxlIEBhY3Jvbnlte0hUTUx9LAotUG9zdFNjcmlwdCBvciBAYWNyb255bXtQREZ9IGRlc2lnbmVkIGZvciBodW1hbiBtb2RpZmljYXRpb24uICBFeGFtcGxlcwotb2YgdHJhbnNwYXJlbnQgaW1hZ2UgZm9ybWF0cyBpbmNsdWRlIEBhY3Jvbnlte1BOR30sIEBhY3Jvbnlte1hDRn0gYW5kCi1AYWNyb255bXtKUEd9LiAgT3BhcXVlIGZvcm1hdHMgaW5jbHVkZSBwcm9wcmlldGFyeSBmb3JtYXRzIHRoYXQgY2FuIGJlCi1yZWFkIGFuZCBlZGl0ZWQgb25seSBieSBwcm9wcmlldGFyeSB3b3JkIHByb2Nlc3NvcnMsIEBhY3Jvbnlte1NHTUx9IG9yCi1AYWNyb255bXtYTUx9IGZvciB3aGljaCB0aGUgQGFjcm9ueW17RFREfSBhbmQvb3IgcHJvY2Vzc2luZyB0b29scyBhcmUKLW5vdCBnZW5lcmFsbHkgYXZhaWxhYmxlLCBhbmQgdGhlIG1hY2hpbmUtZ2VuZXJhdGVkIEBhY3Jvbnlte0hUTUx9LAotUG9zdFNjcmlwdCBvciBAYWNyb255bXtQREZ9IHByb2R1Y2VkIGJ5IHNvbWUgd29yZCBwcm9jZXNzb3JzIGZvcgorQVNDSUkgd2l0aG91dCBtYXJrdXAsIFRleGluZm8gaW5wdXQgZm9ybWF0LCBMYUBUZVh7fSBpbnB1dAorZm9ybWF0LCBTR01MIG9yIFhNTCB1c2luZyBhIHB1YmxpY2x5IGF2YWlsYWJsZQorRFRELCBhbmQgc3RhbmRhcmQtY29uZm9ybWluZyBzaW1wbGUgSFRNTCwKK1Bvc3RTY3JpcHQgb3IgUERGIGRlc2lnbmVkIGZvciBodW1hbiBtb2RpZmljYXRpb24uICBFeGFtcGxlcworb2YgdHJhbnNwYXJlbnQgaW1hZ2UgZm9ybWF0cyBpbmNsdWRlIFBORywgWENGIGFuZAorSlBHLiAgT3BhcXVlIGZvcm1hdHMgaW5jbHVkZSBwcm9wcmlldGFyeSBmb3JtYXRzIHRoYXQgY2FuIGJlCityZWFkIGFuZCBlZGl0ZWQgb25seSBieSBwcm9wcmlldGFyeSB3b3JkIHByb2Nlc3NvcnMsIFNHTUwgb3IKK1hNTCBmb3Igd2hpY2ggdGhlIERURCBhbmQvb3IgcHJvY2Vzc2luZyB0b29scyBhcmUKK25vdCBnZW5lcmFsbHkgYXZhaWxhYmxlLCBhbmQgdGhlIG1hY2hpbmUtZ2VuZXJhdGVkIEhUTUwsCitQb3N0U2NyaXB0IG9yIFBERiBwcm9kdWNlZCBieSBzb21lIHdvcmQgcHJvY2Vzc29ycyBmb3IKIG91dHB1dCBwdXJwb3NlcyBvbmx5LgogCiBUaGUgYGBUaXRsZSBQYWdlJycgbWVhbnMsIGZvciBhIHByaW50ZWQgYm9vaywgdGhlIHRpdGxlIHBhZ2UgaXRzZWxmLApAQCAtMTEyLDYgKzExMSw5IEBACiB0aGUgdGV4dCBuZWFyIHRoZSBtb3N0IHByb21pbmVudCBhcHBlYXJhbmNlIG9mIHRoZSB3b3JrJ3MgdGl0bGUsCiBwcmVjZWRpbmcgdGhlIGJlZ2lubmluZyBvZiB0aGUgYm9keSBvZiB0aGUgdGV4dC4KIAorVGhlIGBgcHVibGlzaGVyJycgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyBjb3BpZXMKK29mIHRoZSBEb2N1bWVudCB0byB0aGUgcHVibGljLgorCiBBIHNlY3Rpb24gYGBFbnRpdGxlZCBYWVonJyBtZWFucyBhIG5hbWVkIHN1YnVuaXQgb2YgdGhlIERvY3VtZW50IHdob3NlCiB0aXRsZSBlaXRoZXIgaXMgcHJlY2lzZWx5IFhZWiBvciBjb250YWlucyBYWVogaW4gcGFyZW50aGVzZXMgZm9sbG93aW5nCiB0ZXh0IHRoYXQgdHJhbnNsYXRlcyBYWVogaW4gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlIFhZWiBzdGFuZHMgZm9yIGEKQEAgLTM4MCwxMyArMzgyLDMwIEBACiBAaXRlbQogVEVSTUlOQVRJT04KIAotWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBleGNlcHQKLWFzIGV4cHJlc3NseSBwcm92aWRlZCBmb3IgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IG90aGVyIGF0dGVtcHQgdG8KLWNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBpcyB2b2lkLCBhbmQgd2lsbAotYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSG93ZXZlciwKLXBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMKLUxpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAotcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudAorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSBpdCBpcyB2b2lkLCBhbmQKK3dpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCitIb3dldmVyLCBpZiB5b3UgY2Vhc2UgYWxsIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHRoZW4geW91ciBsaWNlbnNlCitmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzIHJlaW5zdGF0ZWQgKGEpIHByb3Zpc2lvbmFsbHksCit1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kIGZpbmFsbHkKK3Rlcm1pbmF0ZXMgeW91ciBsaWNlbnNlLCBhbmQgKGIpIHBlcm1hbmVudGx5LCBpZiB0aGUgY29weXJpZ2h0IGhvbGRlcgorZmFpbHMgdG8gbm90aWZ5IHlvdSBvZiB0aGUgdmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucyBwcmlvciB0bworNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgorCitNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKK3JlaW5zdGF0ZWQgcGVybWFuZW50bHkgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIgbm90aWZpZXMgeW91IG9mIHRoZQordmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucywgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaGF2ZQorcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0Citjb3B5cmlnaHQgaG9sZGVyLCBhbmQgeW91IGN1cmUgdGhlIHZpb2xhdGlvbiBwcmlvciB0byAzMCBkYXlzIGFmdGVyCit5b3VyIHJlY2VpcHQgb2YgdGhlIG5vdGljZS4KKworVGVybWluYXRpb24gb2YgeW91ciByaWdodHMgdW5kZXIgdGhpcyBzZWN0aW9uIGRvZXMgbm90IHRlcm1pbmF0ZSB0aGUKK2xpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlLiAgSWYgeW91ciByaWdodHMgaGF2ZSBiZWVuIHRlcm1pbmF0ZWQgYW5kIG5vdCBwZXJtYW5lbnRseQorcmVpbnN0YXRlZCwgcmVjZWlwdCBvZiBhIGNvcHkgb2Ygc29tZSBvciBhbGwgb2YgdGhlIHNhbWUgbWF0ZXJpYWwgZG9lcworbm90IGdpdmUgeW91IGFueSByaWdodHMgdG8gdXNlIGl0LgogCiBAaXRlbQogRlVUVVJFIFJFVklTSU9OUyBPRiBUSElTIExJQ0VOU0UKQEAgLTQwNCwxMSArNDIzLDQ2IEBACiBvZiBhbnkgbGF0ZXIgdmVyc2lvbiB0aGF0IGhhcyBiZWVuIHB1Ymxpc2hlZCAobm90IGFzIGEgZHJhZnQpIGJ5IHRoZQogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uCiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCAobm90Ci1hcyBhIGRyYWZ0KSBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorYXMgYSBkcmFmdCkgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBEb2N1bWVudAorc3BlY2lmaWVzIHRoYXQgYSBwcm94eSBjYW4gZGVjaWRlIHdoaWNoIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGlzCitMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5J3MgcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEKK3ZlcnNpb24gcGVybWFuZW50bHkgYXV0aG9yaXplcyB5b3UgdG8gY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlCitEb2N1bWVudC4KKworQGl0ZW0KK1JFTElDRU5TSU5HCisKK2BgTWFzc2l2ZSBNdWx0aWF1dGhvciBDb2xsYWJvcmF0aW9uIFNpdGUnJyAob3IgYGBNTUMgU2l0ZScnKSBtZWFucyBhbnkKK1dvcmxkIFdpZGUgV2ViIHNlcnZlciB0aGF0IHB1Ymxpc2hlcyBjb3B5cmlnaHRhYmxlIHdvcmtzIGFuZCBhbHNvCitwcm92aWRlcyBwcm9taW5lbnQgZmFjaWxpdGllcyBmb3IgYW55Ym9keSB0byBlZGl0IHRob3NlIHdvcmtzLiAgQQorcHVibGljIHdpa2kgdGhhdCBhbnlib2R5IGNhbiBlZGl0IGlzIGFuIGV4YW1wbGUgb2Ygc3VjaCBhIHNlcnZlci4gIEEKK2BgTWFzc2l2ZSBNdWx0aWF1dGhvciBDb2xsYWJvcmF0aW9uJycgKG9yIGBgTU1DJycpIGNvbnRhaW5lZCBpbiB0aGUKK3NpdGUgbWVhbnMgYW55IHNldCBvZiBjb3B5cmlnaHRhYmxlIHdvcmtzIHRodXMgcHVibGlzaGVkIG9uIHRoZSBNTUMKK3NpdGUuCisKK2BgQ0MtQlktU0EnJyBtZWFucyB0aGUgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZSBBbGlrZSAzLjAKK2xpY2Vuc2UgcHVibGlzaGVkIGJ5IENyZWF0aXZlIENvbW1vbnMgQ29ycG9yYXRpb24sIGEgbm90LWZvci1wcm9maXQKK2NvcnBvcmF0aW9uIHdpdGggYSBwcmluY2lwYWwgcGxhY2Ugb2YgYnVzaW5lc3MgaW4gU2FuIEZyYW5jaXNjbywKK0NhbGlmb3JuaWEsIGFzIHdlbGwgYXMgZnV0dXJlIGNvcHlsZWZ0IHZlcnNpb25zIG9mIHRoYXQgbGljZW5zZQorcHVibGlzaGVkIGJ5IHRoYXQgc2FtZSBvcmdhbml6YXRpb24uCisKK2BgSW5jb3Jwb3JhdGUnJyBtZWFucyB0byBwdWJsaXNoIG9yIHJlcHVibGlzaCBhIERvY3VtZW50LCBpbiB3aG9sZSBvcgoraW4gcGFydCwgYXMgcGFydCBvZiBhbm90aGVyIERvY3VtZW50LgorCitBbiBNTUMgaXMgYGBlbGlnaWJsZSBmb3IgcmVsaWNlbnNpbmcnJyBpZiBpdCBpcyBsaWNlbnNlZCB1bmRlciB0aGlzCitMaWNlbnNlLCBhbmQgaWYgYWxsIHdvcmtzIHRoYXQgd2VyZSBmaXJzdCBwdWJsaXNoZWQgdW5kZXIgdGhpcyBMaWNlbnNlCitzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGlzIE1NQywgYW5kIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgaW4gd2hvbGUKK29yIGluIHBhcnQgaW50byB0aGUgTU1DLCAoMSkgaGFkIG5vIGNvdmVyIHRleHRzIG9yIGludmFyaWFudCBzZWN0aW9ucywKK2FuZCAoMikgd2VyZSB0aHVzIGluY29ycG9yYXRlZCBwcmlvciB0byBOb3ZlbWJlciAxLCAyMDA4LgorCitUaGUgb3BlcmF0b3Igb2YgYW4gTU1DIFNpdGUgbWF5IHJlcHVibGlzaCBhbiBNTUMgY29udGFpbmVkIGluIHRoZSBzaXRlCit1bmRlciBDQy1CWS1TQSBvbiB0aGUgc2FtZSBzaXRlIGF0IGFueSB0aW1lIGJlZm9yZSBBdWd1c3QgMSwgMjAwOSwKK3Byb3ZpZGVkIHRoZSBNTUMgaXMgZWxpZ2libGUgZm9yIHJlbGljZW5zaW5nLgorCiBAZW5kIGVudW1lcmF0ZQogCiBAcGFnZQotQGFwcGVuZGl4c3Vic2VjIEFEREVORFVNOiBIb3cgdG8gdXNlIHRoaXMgTGljZW5zZSBmb3IgeW91ciBkb2N1bWVudHMKK0BoZWFkaW5nIEFEREVORFVNOiBIb3cgdG8gdXNlIHRoaXMgTGljZW5zZSBmb3IgeW91ciBkb2N1bWVudHMKIAogVG8gdXNlIHRoaXMgTGljZW5zZSBpbiBhIGRvY3VtZW50IHlvdSBoYXZlIHdyaXR0ZW4sIGluY2x1ZGUgYSBjb3B5IG9mCiB0aGUgTGljZW5zZSBpbiB0aGUgZG9jdW1lbnQgYW5kIHB1dCB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQKQEAgLTQxOCw3ICs0NzIsNyBAQAogQGdyb3VwCiAgIENvcHlyaWdodCAoQykgIEB2YXJ7eWVhcn0gIEB2YXJ7eW91ciBuYW1lfS4KICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Ci0gIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMgorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKICAgb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CiAgIHdpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIG5vIEJhY2stQ292ZXIKICAgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgYGBHTlUKQEAgLTQyNyw3ICs0ODEsNyBAQAogQGVuZCBzbWFsbGV4YW1wbGUKIAogSWYgeW91IGhhdmUgSW52YXJpYW50IFNlY3Rpb25zLCBGcm9udC1Db3ZlciBUZXh0cyBhbmQgQmFjay1Db3ZlciBUZXh0cywKLXJlcGxhY2UgdGhlIGBgd2l0aC4uLlRleHRzLicnIGxpbmUgd2l0aCB0aGlzOgorcmVwbGFjZSB0aGUgYGB3aXRoQGRvdHN7fVRleHRzLicnQDogbGluZSB3aXRoIHRoaXM6CiAKIEBzbWFsbGV4YW1wbGUKIEBncm91cApAQCAtNDQ5LDQgKzUwMywzIEBACiBAYyBMb2NhbCBWYXJpYWJsZXM6CiBAYyBpc3BlbGwtbG9jYWwtcGRpY3Q6ICJpc3BlbGwtZGljdCIKIEBjIEVuZDoKLQpkaWZmIC0tZ2l0IGEvZG9jL2ZpZ3MvZXhhbXBsZS1yZWR1Y2UuZG90IGIvZG9jL2ZpZ3MvZXhhbXBsZS1yZWR1Y2UuZG90Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZDk5YzUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZmlncy9leGFtcGxlLXJlZHVjZS5kb3QKQEAgLTAsMCArMSwxMSBAQAorZGlncmFwaCAicmVkdWNlLnkiCit7CisgIG5vZGUgW2ZvbnRuYW1lPWNvdXJpZXIgc2hhcGU9Ym94XQorICBlZGdlIFtmb250bmFtZT1jb3VyaWVyXQorCisgIDEgW2xhYmVsPSJTdGF0ZSAxXG4gIDMgYTogXCIwXCIgLiAgW1wiLlwiXVxsICA0IGI6IFwiMFwiIC4gIFtcIjtcIl1cbCJdCisgIDEgLT4gIjFSMyIgW2xhYmVsPSIiIHN0eWxlPXNvbGlkXQorICIxUjMiIFtzdHlsZT1maWxsZWQgc2hhcGU9ZGlhbW9uZCBmaWxsY29sb3I9eWVsbG93Z3JlZW4gbGFiZWw9IlIzIl0KKyAgMSAtPiAiMVI0IiBbbGFiZWw9IltcIjtcIl0iIHN0eWxlPXNvbGlkXQorICIxUjQiIFtzdHlsZT1maWxsZWQgc2hhcGU9ZGlhbW9uZCBmaWxsY29sb3I9eWVsbG93Z3JlZW4gbGFiZWw9IlI0Il0KK30KZGlmZiAtLWdpdCBhL2RvYy9maWdzL2V4YW1wbGUtcmVkdWNlLmVwcyBiL2RvYy9maWdzL2V4YW1wbGUtcmVkdWNlLmVwcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWRiMjA3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2ZpZ3MvZXhhbXBsZS1yZWR1Y2UuZXBzCkBAIC0wLDAgKzEsMzAwIEBACislIVBTLUFkb2JlLTMuMCBFUFNGLTMuMAorJSVDcmVhdG9yOiBncmFwaHZpeiB2ZXJzaW9uIDIuMjkuMjAxMjEwMjIuMDQ0NSAoMjAxMjEwMjIuMDQ0NSkKKyUlVGl0bGU6IHJlZHVjZS55CislJVBhZ2VzOiAxCislJUJvdW5kaW5nQm94OiAwIDAgMTgwIDE1MAorJSVFbmRDb21tZW50cworc2F2ZQorJSVCZWdpblByb2xvZworL0RvdERpY3QgMjAwIGRpY3QgZGVmCitEb3REaWN0IGJlZ2luCisKKy9zZXR1cExhdGluMSB7CittYXJrCisvRW5jb2RpbmdWZWN0b3IgMjU2IGFycmF5IGRlZgorIEVuY29kaW5nVmVjdG9yIDAKKworSVNPTGF0aW4xRW5jb2RpbmcgMCAyNTUgZ2V0aW50ZXJ2YWwgcHV0aW50ZXJ2YWwKK0VuY29kaW5nVmVjdG9yIDQ1IC9oeXBoZW4gcHV0CisKKyUgU2V0IHVwIElTTyBMYXRpbiAxIGNoYXJhY3RlciBlbmNvZGluZworL3N0YXJuZXRJU08geworICAgICAgICBkdXAgZHVwIGZpbmRmb250IGR1cCBsZW5ndGggZGljdCBiZWdpbgorICAgICAgICB7IDEgaW5kZXggL0ZJRCBuZSB7IGRlZiB9eyBwb3AgcG9wIH0gaWZlbHNlCisgICAgICAgIH0gZm9yYWxsCisgICAgICAgIC9FbmNvZGluZyBFbmNvZGluZ1ZlY3RvciBkZWYKKyAgICAgICAgY3VycmVudGRpY3QgZW5kIGRlZmluZWZvbnQKK30gZGVmCisvVGltZXMtUm9tYW4gc3Rhcm5ldElTTyBkZWYKKy9UaW1lcy1JdGFsaWMgc3Rhcm5ldElTTyBkZWYKKy9UaW1lcy1Cb2xkIHN0YXJuZXRJU08gZGVmCisvVGltZXMtQm9sZEl0YWxpYyBzdGFybmV0SVNPIGRlZgorL0hlbHZldGljYSBzdGFybmV0SVNPIGRlZgorL0hlbHZldGljYS1PYmxpcXVlIHN0YXJuZXRJU08gZGVmCisvSGVsdmV0aWNhLUJvbGQgc3Rhcm5ldElTTyBkZWYKKy9IZWx2ZXRpY2EtQm9sZE9ibGlxdWUgc3Rhcm5ldElTTyBkZWYKKy9Db3VyaWVyIHN0YXJuZXRJU08gZGVmCisvQ291cmllci1PYmxpcXVlIHN0YXJuZXRJU08gZGVmCisvQ291cmllci1Cb2xkIHN0YXJuZXRJU08gZGVmCisvQ291cmllci1Cb2xkT2JsaXF1ZSBzdGFybmV0SVNPIGRlZgorY2xlYXJ0b21hcmsKK30gYmluZCBkZWYKKworJSVCZWdpblJlc291cmNlOiBwcm9jc2V0IGdyYXBodml6IDAgMAorL2Nvb3JkLWZvbnQtZmFtaWx5IC9UaW1lcy1Sb21hbiBkZWYKKy9kZWZhdWx0LWZvbnQtZmFtaWx5IC9UaW1lcy1Sb21hbiBkZWYKKy9jb29yZGZvbnQgY29vcmQtZm9udC1mYW1pbHkgZmluZGZvbnQgOCBzY2FsZWZvbnQgZGVmCisKKy9JbnZTY2FsZUZhY3RvciAxLjAgZGVmCisvc2V0X3NjYWxlIHsKKyAgICAgICBkdXAgMSBleGNoIGRpdiAvSW52U2NhbGVGYWN0b3IgZXhjaCBkZWYKKyAgICAgICBzY2FsZQorfSBiaW5kIGRlZgorCislIHN0eWxlcworL3NvbGlkIHsgW10gMCBzZXRkYXNoIH0gYmluZCBkZWYKKy9kYXNoZWQgeyBbOSBJbnZTY2FsZUZhY3RvciBtdWwgZHVwIF0gMCBzZXRkYXNoIH0gYmluZCBkZWYKKy9kb3R0ZWQgeyBbMSBJbnZTY2FsZUZhY3RvciBtdWwgNiBJbnZTY2FsZUZhY3RvciBtdWxdIDAgc2V0ZGFzaCB9IGJpbmQgZGVmCisvaW52aXMgey9maWxsIHtuZXdwYXRofSBkZWYgL3N0cm9rZSB7bmV3cGF0aH0gZGVmIC9zaG93IHtwb3AgbmV3cGF0aH0gZGVmfSBiaW5kIGRlZgorL2JvbGQgeyAyIHNldGxpbmV3aWR0aCB9IGJpbmQgZGVmCisvZmlsbGVkIHsgfSBiaW5kIGRlZgorL3VuZmlsbGVkIHsgfSBiaW5kIGRlZgorL3JvdW5kZWQgeyB9IGJpbmQgZGVmCisvZGlhZ29uYWxzIHsgfSBiaW5kIGRlZgorL3RhcGVyZWQgeyB9IGJpbmQgZGVmCisKKyUgaG9va3MgZm9yIHNldHRpbmcgY29sb3IgCisvbm9kZWNvbG9yIHsgc2V0aHNiY29sb3IgfSBiaW5kIGRlZgorL2VkZ2Vjb2xvciB7IHNldGhzYmNvbG9yIH0gYmluZCBkZWYKKy9ncmFwaGNvbG9yIHsgc2V0aHNiY29sb3IgfSBiaW5kIGRlZgorL25vcGNvbG9yIHtwb3AgcG9wIHBvcH0gYmluZCBkZWYKKworL2JlZ2lucGFnZSB7CSUgaSBqIG5wYWdlcworCS9ucGFnZXMgZXhjaCBkZWYKKwkvaiBleGNoIGRlZgorCS9pIGV4Y2ggZGVmCisJL3N0ciAxMCBzdHJpbmcgZGVmCisJbnBhZ2VzIDEgZ3QgeworCQlnc2F2ZQorCQkJY29vcmRmb250IHNldGZvbnQKKwkJCTAgMCBtb3ZldG8KKwkJCShcKCkgc2hvdyBpIHN0ciBjdnMgc2hvdyAoLCkgc2hvdyBqIHN0ciBjdnMgc2hvdyAoXCkpIHNob3cKKwkJZ3Jlc3RvcmUKKwl9IGlmCit9IGJpbmQgZGVmCisKKy9zZXRfZm9udCB7CisJZmluZGZvbnQgZXhjaAorCXNjYWxlZm9udCBzZXRmb250Cit9IGRlZgorCislIGRyYXcgdGV4dCBmaXR0ZWQgdG8gaXRzIGV4cGVjdGVkIHdpZHRoCisvYWxpZ25lZHRleHQgewkJCSUgd2lkdGggdGV4dAorCS90ZXh0IGV4Y2ggZGVmCisJL3dpZHRoIGV4Y2ggZGVmCisJZ3NhdmUKKwkJd2lkdGggMCBndCB7CisJCQlbXSAwIHNldGRhc2gKKwkJCXRleHQgc3RyaW5nd2lkdGggcG9wIHdpZHRoIGV4Y2ggc3ViIHRleHQgbGVuZ3RoIGRpdiAwIHRleHQgYXNob3cKKwkJfSBpZgorCWdyZXN0b3JlCit9IGRlZgorCisvYm94cHJpbSB7CQkJCSUgeGNvcm5lciB5Y29ybmVyIHhzaXplIHlzaXplCisJCTQgMiByb2xsCisJCW1vdmV0bworCQkyIGNvcHkKKwkJZXhjaCAwIHJsaW5ldG8KKwkJMCBleGNoIHJsaW5ldG8KKwkJcG9wIG5lZyAwIHJsaW5ldG8KKwkJY2xvc2VwYXRoCit9IGJpbmQgZGVmCisKKy9lbGxpcHNlX3BhdGggeworCS9yeSBleGNoIGRlZgorCS9yeCBleGNoIGRlZgorCS95IGV4Y2ggZGVmCisJL3ggZXhjaCBkZWYKKwltYXRyaXggY3VycmVudG1hdHJpeAorCW5ld3BhdGgKKwl4IHkgdHJhbnNsYXRlCisJcnggcnkgc2NhbGUKKwkwIDAgMSAwIDM2MCBhcmMKKwlzZXRtYXRyaXgKK30gYmluZCBkZWYKKworL2VuZHBhZ2UgeyBzaG93cGFnZSB9IGJpbmQgZGVmCisvc2hvd3BhZ2UgeyB9IGRlZgorCisvbGF5ZXJjb2xvcnNlcQorCVsJJSBsYXllciBjb2xvciBzZXF1ZW5jZSAtIGRhcmtlc3QgdG8gbGlnaHRlc3QKKwkJWzAgMCAwXQorCQlbLjIgLjggLjhdCisJCVsuNCAuOCAuOF0KKwkJWy42IC44IC44XQorCQlbLjggLjggLjhdCisJXQorZGVmCisKKy9sYXllcmxlbiBsYXllcmNvbG9yc2VxIGxlbmd0aCBkZWYKKworL3NldGxheWVyIHsvbWF4bGF5ZXIgZXhjaCBkZWYgL2N1cmxheWVyIGV4Y2ggZGVmCisJbGF5ZXJjb2xvcnNlcSBjdXJsYXllciAxIHN1YiBsYXllcmxlbiBtb2QgZ2V0CisJYWxvYWQgcG9wIHNldGhzYmNvbG9yCisJL25vZGVjb2xvciB7bm9wY29sb3J9IGRlZgorCS9lZGdlY29sb3Ige25vcGNvbG9yfSBkZWYKKwkvZ3JhcGhjb2xvciB7bm9wY29sb3J9IGRlZgorfSBiaW5kIGRlZgorCisvb25sYXllciB7IGN1cmxheWVyIG5lIHtpbnZpc30gaWYgfSBkZWYKKworL29ubGF5ZXJzIHsKKwkvbXl1cHBlciBleGNoIGRlZgorCS9teWxvd2VyIGV4Y2ggZGVmCisJY3VybGF5ZXIgbXlsb3dlciBsdAorCWN1cmxheWVyIG15dXBwZXIgZ3QKKwlvcgorCXtpbnZpc30gaWYKK30gZGVmCisKKy9jdXJsYXllciAwIGRlZgorCislJUVuZFJlc291cmNlCislJUVuZFByb2xvZworJSVCZWdpblNldHVwCisxNCBkZWZhdWx0LWZvbnQtZmFtaWx5IHNldF9mb250CisxIHNldG1pdGVybGltaXQKKyUgL2Fycm93bGVuZ3RoIDEwIGRlZgorJSAvYXJyb3d3aWR0aCA1IGRlZgorCislIG1ha2Ugc3VyZSBwZGZtYXJrIGlzIGhhcm1sZXNzIGZvciBQUy1pbnRlcnByZXRlcnMgb3RoZXIgdGhhbiBEaXN0aWxsZXIKKy9wZGZtYXJrIHdoZXJlIHtwb3B9IHt1c2VyZGljdCAvcGRmbWFyayAvY2xlYXJ0b21hcmsgbG9hZCBwdXR9IGlmZWxzZQorJSBtYWtlICc8PCcgYW5kICc+Picgc2FmZSBvbiBQUyBMZXZlbCAxIGRldmljZXMKKy9sYW5ndWFnZWxldmVsIHdoZXJlIHtwb3AgbGFuZ3VhZ2VsZXZlbH17MX0gaWZlbHNlCisyIGx0IHsKKyAgICB1c2VyZGljdCAoPDwpIGN2biAoWykgY3ZuIGxvYWQgcHV0CisgICAgdXNlcmRpY3QgKD4+KSBjdm4gKFspIGN2biBsb2FkIHB1dAorfSBpZgorCislJUVuZFNldHVwCitzZXR1cExhdGluMQorJSVQYWdlOiAxIDEKKyUlUGFnZUJvdW5kaW5nQm94OiAwIDAgMTgwIDE1MAorJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0CiswIDAgMSBiZWdpbnBhZ2UKK2dzYXZlCiswIDAgMTgwIDE1MCBib3hwcmltIGNsaXAgbmV3cGF0aAorMSAxIHNldF9zY2FsZSAwIHJvdGF0ZSA0IDUgdHJhbnNsYXRlCislIDEKK2dzYXZlCisxIHNldGxpbmV3aWR0aAorMCAwIDAgbm9kZWNvbG9yCituZXdwYXRoIDE3Mi4yNSAxNDEuNSBtb3ZldG8KKy0uMjUgMTQxLjUgbGluZXRvCistLjI1IDg4LjUgbGluZXRvCisxNzIuMjUgODguNSBsaW5ldG8KK2Nsb3NlcGF0aCBzdHJva2UKKzAgMCAwIG5vZGVjb2xvcgorMTQgL2NvdXJpZXIgc2V0X2ZvbnQKKzU3IDEyNi4zIG1vdmV0byA1OCAoU3RhdGUgMSkgYWxpZ25lZHRleHQKKzAgMCAwIG5vZGVjb2xvcgorMTQgL2NvdXJpZXIgc2V0X2ZvbnQKKzcuNSAxMTEuMyBtb3ZldG8gMTU3ICggIDMgYTogIjAiIC4gIFsiLiJdKSBhbGlnbmVkdGV4dAorMCAwIDAgbm9kZWNvbG9yCisxNCAvY291cmllciBzZXRfZm9udAorNy41IDk2LjMgbW92ZXRvIDE1NyAoICA0IGI6ICIwIiAuICBbIjsiXSkgYWxpZ25lZHRleHQKK2dyZXN0b3JlCislIDFSMworZ3NhdmUKKzAuMjE5NjEgMC43NTI5NCAwLjgwMzkyIG5vZGVjb2xvcgorbmV3cGF0aCA0NyAzNiBtb3ZldG8KKzE3IDE4IGxpbmV0bworNDcgMCBsaW5ldG8KKzc3IDE4IGxpbmV0bworY2xvc2VwYXRoIGZpbGwKKzEgc2V0bGluZXdpZHRoCitmaWxsZWQKKzAgMCAwIG5vZGVjb2xvcgorbmV3cGF0aCA0NyAzNiBtb3ZldG8KKzE3IDE4IGxpbmV0bworNDcgMCBsaW5ldG8KKzc3IDE4IGxpbmV0bworY2xvc2VwYXRoIHN0cm9rZQorMCAwIDAgbm9kZWNvbG9yCisxNCAvY291cmllciBzZXRfZm9udAorMzguNSAxNC4zIG1vdmV0byAxNyAoUjMpIGFsaWduZWR0ZXh0CitncmVzdG9yZQorJSAxLT4xUjMKK2dzYXZlCisxIHNldGxpbmV3aWR0aAorc29saWQKKzAgMCAwIGVkZ2Vjb2xvcgorbmV3cGF0aCA3NS4zNCA4OC4wNCBtb3ZldG8KKzY5LjQ2IDczLjcyIDYyLjIyIDU2LjA4IDU2LjUzIDQyLjIyIGN1cnZldG8KK3N0cm9rZQorMCAwIDAgZWRnZWNvbG9yCituZXdwYXRoIDU5Ljc0IDQwLjgxIG1vdmV0bworNTIuNyAzMi44OSBsaW5ldG8KKzUzLjI2IDQzLjQ3IGxpbmV0bworY2xvc2VwYXRoIGZpbGwKKzEgc2V0bGluZXdpZHRoCitzb2xpZAorMCAwIDAgZWRnZWNvbG9yCituZXdwYXRoIDU5Ljc0IDQwLjgxIG1vdmV0bworNTIuNyAzMi44OSBsaW5ldG8KKzUzLjI2IDQzLjQ3IGxpbmV0bworY2xvc2VwYXRoIHN0cm9rZQorZ3Jlc3RvcmUKKyUgMVI0Citnc2F2ZQorMC4yMTk2MSAwLjc1Mjk0IDAuODAzOTIgbm9kZWNvbG9yCituZXdwYXRoIDEyNiAzNiBtb3ZldG8KKzk2IDE4IGxpbmV0bworMTI2IDAgbGluZXRvCisxNTYgMTggbGluZXRvCitjbG9zZXBhdGggZmlsbAorMSBzZXRsaW5ld2lkdGgKK2ZpbGxlZAorMCAwIDAgbm9kZWNvbG9yCituZXdwYXRoIDEyNiAzNiBtb3ZldG8KKzk2IDE4IGxpbmV0bworMTI2IDAgbGluZXRvCisxNTYgMTggbGluZXRvCitjbG9zZXBhdGggc3Ryb2tlCiswIDAgMCBub2RlY29sb3IKKzE0IC9jb3VyaWVyIHNldF9mb250CisxMTcuNSAxNC4zIG1vdmV0byAxNyAoUjQpIGFsaWduZWR0ZXh0CitncmVzdG9yZQorJSAxLT4xUjQKK2dzYXZlCisxIHNldGxpbmV3aWR0aAorc29saWQKKzAgMCAwIGVkZ2Vjb2xvcgorbmV3cGF0aCA5Ni45MyA4OC4wNCBtb3ZldG8KKzEwMyA3My42MyAxMTAuNDggNTUuODYgMTE2LjMzIDQxLjk2IGN1cnZldG8KK3N0cm9rZQorMCAwIDAgZWRnZWNvbG9yCituZXdwYXRoIDExOS42MSA0My4yIG1vdmV0bworMTIwLjI2IDMyLjYyIGxpbmV0bworMTEzLjE2IDQwLjQ4IGxpbmV0bworY2xvc2VwYXRoIGZpbGwKKzEgc2V0bGluZXdpZHRoCitzb2xpZAorMCAwIDAgZWRnZWNvbG9yCituZXdwYXRoIDExOS42MSA0My4yIG1vdmV0bworMTIwLjI2IDMyLjYyIGxpbmV0bworMTEzLjE2IDQwLjQ4IGxpbmV0bworY2xvc2VwYXRoIHN0cm9rZQorMCAwIDAgZWRnZWNvbG9yCisxNCAvY291cmllciBzZXRfZm9udAorMTExIDU4LjMgbW92ZXRvIDQyIChbIjsiXSkgYWxpZ25lZHRleHQKK2dyZXN0b3JlCitlbmRwYWdlCitzaG93cGFnZQorZ3Jlc3RvcmUKKyUlUGFnZVRyYWlsZXIKKyUlRW5kUGFnZTogMQorJSVUcmFpbGVyCitlbmQKK3Jlc3RvcmUKKyUlRU9GCmRpZmYgLS1naXQgYS9kb2MvZmlncy9leGFtcGxlLXJlZHVjZS5wZGYgYi9kb2MvZmlncy9leGFtcGxlLXJlZHVjZS5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdiMmQxMwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9maWdzL2V4YW1wbGUtcmVkdWNlLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2MvZmlncy9leGFtcGxlLXJlZHVjZS5wbmcgYi9kb2MvZmlncy9leGFtcGxlLXJlZHVjZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAxMDZhYwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9maWdzL2V4YW1wbGUtcmVkdWNlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2MvZmlncy9leGFtcGxlLXNoaWZ0LmRvdCBiL2RvYy9maWdzL2V4YW1wbGUtc2hpZnQuZG90Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NWJhMGUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZmlncy9leGFtcGxlLXNoaWZ0LmRvdApAQCAtMCwwICsxLDkgQEAKK2RpZ3JhcGggInNoaWZ0LnkiCit7CisgIG5vZGUgW2ZvbnRuYW1lPWNvdXJpZXIgc2hhcGU9Ym94XQorICBlZGdlIFtmb250bmFtZT1jb3VyaWVyXQorCisgIDMgW2xhYmVsPSJTdGF0ZSAzXG4gIDEgZXhwOiBhIC4gXCIuXCJcbCJdCisgIDMgLT4gNiBbc3R5bGU9c29saWQgbGFiZWw9IlwiLlwiIl0KKyAgNiBbbGFiZWw9IlN0YXRlIDZcbiAgMSBleHA6IGEgXCIuXCIgLlxsIl0KK30KZGlmZiAtLWdpdCBhL2RvYy9maWdzL2V4YW1wbGUtc2hpZnQuZXBzIGIvZG9jL2ZpZ3MvZXhhbXBsZS1zaGlmdC5lcHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ3ZWJjYwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9maWdzL2V4YW1wbGUtc2hpZnQuZXBzCkBAIC0wLDAgKzEsMjUyIEBACislIVBTLUFkb2JlLTMuMCBFUFNGLTMuMAorJSVDcmVhdG9yOiBncmFwaHZpeiB2ZXJzaW9uIDIuMjkuMjAxMjEwMjIuMDQ0NSAoMjAxMjEwMjIuMDQ0NSkKKyUlVGl0bGU6IHNoaWZ0LnkKKyUlUGFnZXM6IDEKKyUlQm91bmRpbmdCb3g6IDAgMCAxNTYgMTM2CislJUVuZENvbW1lbnRzCitzYXZlCislJUJlZ2luUHJvbG9nCisvRG90RGljdCAyMDAgZGljdCBkZWYKK0RvdERpY3QgYmVnaW4KKworL3NldHVwTGF0aW4xIHsKK21hcmsKKy9FbmNvZGluZ1ZlY3RvciAyNTYgYXJyYXkgZGVmCisgRW5jb2RpbmdWZWN0b3IgMAorCitJU09MYXRpbjFFbmNvZGluZyAwIDI1NSBnZXRpbnRlcnZhbCBwdXRpbnRlcnZhbAorRW5jb2RpbmdWZWN0b3IgNDUgL2h5cGhlbiBwdXQKKworJSBTZXQgdXAgSVNPIExhdGluIDEgY2hhcmFjdGVyIGVuY29kaW5nCisvc3Rhcm5ldElTTyB7CisgICAgICAgIGR1cCBkdXAgZmluZGZvbnQgZHVwIGxlbmd0aCBkaWN0IGJlZ2luCisgICAgICAgIHsgMSBpbmRleCAvRklEIG5lIHsgZGVmIH17IHBvcCBwb3AgfSBpZmVsc2UKKyAgICAgICAgfSBmb3JhbGwKKyAgICAgICAgL0VuY29kaW5nIEVuY29kaW5nVmVjdG9yIGRlZgorICAgICAgICBjdXJyZW50ZGljdCBlbmQgZGVmaW5lZm9udAorfSBkZWYKKy9UaW1lcy1Sb21hbiBzdGFybmV0SVNPIGRlZgorL1RpbWVzLUl0YWxpYyBzdGFybmV0SVNPIGRlZgorL1RpbWVzLUJvbGQgc3Rhcm5ldElTTyBkZWYKKy9UaW1lcy1Cb2xkSXRhbGljIHN0YXJuZXRJU08gZGVmCisvSGVsdmV0aWNhIHN0YXJuZXRJU08gZGVmCisvSGVsdmV0aWNhLU9ibGlxdWUgc3Rhcm5ldElTTyBkZWYKKy9IZWx2ZXRpY2EtQm9sZCBzdGFybmV0SVNPIGRlZgorL0hlbHZldGljYS1Cb2xkT2JsaXF1ZSBzdGFybmV0SVNPIGRlZgorL0NvdXJpZXIgc3Rhcm5ldElTTyBkZWYKKy9Db3VyaWVyLU9ibGlxdWUgc3Rhcm5ldElTTyBkZWYKKy9Db3VyaWVyLUJvbGQgc3Rhcm5ldElTTyBkZWYKKy9Db3VyaWVyLUJvbGRPYmxpcXVlIHN0YXJuZXRJU08gZGVmCitjbGVhcnRvbWFyaworfSBiaW5kIGRlZgorCislJUJlZ2luUmVzb3VyY2U6IHByb2NzZXQgZ3JhcGh2aXogMCAwCisvY29vcmQtZm9udC1mYW1pbHkgL1RpbWVzLVJvbWFuIGRlZgorL2RlZmF1bHQtZm9udC1mYW1pbHkgL1RpbWVzLVJvbWFuIGRlZgorL2Nvb3JkZm9udCBjb29yZC1mb250LWZhbWlseSBmaW5kZm9udCA4IHNjYWxlZm9udCBkZWYKKworL0ludlNjYWxlRmFjdG9yIDEuMCBkZWYKKy9zZXRfc2NhbGUgeworICAgICAgIGR1cCAxIGV4Y2ggZGl2IC9JbnZTY2FsZUZhY3RvciBleGNoIGRlZgorICAgICAgIHNjYWxlCit9IGJpbmQgZGVmCisKKyUgc3R5bGVzCisvc29saWQgeyBbXSAwIHNldGRhc2ggfSBiaW5kIGRlZgorL2Rhc2hlZCB7IFs5IEludlNjYWxlRmFjdG9yIG11bCBkdXAgXSAwIHNldGRhc2ggfSBiaW5kIGRlZgorL2RvdHRlZCB7IFsxIEludlNjYWxlRmFjdG9yIG11bCA2IEludlNjYWxlRmFjdG9yIG11bF0gMCBzZXRkYXNoIH0gYmluZCBkZWYKKy9pbnZpcyB7L2ZpbGwge25ld3BhdGh9IGRlZiAvc3Ryb2tlIHtuZXdwYXRofSBkZWYgL3Nob3cge3BvcCBuZXdwYXRofSBkZWZ9IGJpbmQgZGVmCisvYm9sZCB7IDIgc2V0bGluZXdpZHRoIH0gYmluZCBkZWYKKy9maWxsZWQgeyB9IGJpbmQgZGVmCisvdW5maWxsZWQgeyB9IGJpbmQgZGVmCisvcm91bmRlZCB7IH0gYmluZCBkZWYKKy9kaWFnb25hbHMgeyB9IGJpbmQgZGVmCisvdGFwZXJlZCB7IH0gYmluZCBkZWYKKworJSBob29rcyBmb3Igc2V0dGluZyBjb2xvciAKKy9ub2RlY29sb3IgeyBzZXRoc2Jjb2xvciB9IGJpbmQgZGVmCisvZWRnZWNvbG9yIHsgc2V0aHNiY29sb3IgfSBiaW5kIGRlZgorL2dyYXBoY29sb3IgeyBzZXRoc2Jjb2xvciB9IGJpbmQgZGVmCisvbm9wY29sb3Ige3BvcCBwb3AgcG9wfSBiaW5kIGRlZgorCisvYmVnaW5wYWdlIHsJJSBpIGogbnBhZ2VzCisJL25wYWdlcyBleGNoIGRlZgorCS9qIGV4Y2ggZGVmCisJL2kgZXhjaCBkZWYKKwkvc3RyIDEwIHN0cmluZyBkZWYKKwlucGFnZXMgMSBndCB7CisJCWdzYXZlCisJCQljb29yZGZvbnQgc2V0Zm9udAorCQkJMCAwIG1vdmV0bworCQkJKFwoKSBzaG93IGkgc3RyIGN2cyBzaG93ICgsKSBzaG93IGogc3RyIGN2cyBzaG93IChcKSkgc2hvdworCQlncmVzdG9yZQorCX0gaWYKK30gYmluZCBkZWYKKworL3NldF9mb250IHsKKwlmaW5kZm9udCBleGNoCisJc2NhbGVmb250IHNldGZvbnQKK30gZGVmCisKKyUgZHJhdyB0ZXh0IGZpdHRlZCB0byBpdHMgZXhwZWN0ZWQgd2lkdGgKKy9hbGlnbmVkdGV4dCB7CQkJJSB3aWR0aCB0ZXh0CisJL3RleHQgZXhjaCBkZWYKKwkvd2lkdGggZXhjaCBkZWYKKwlnc2F2ZQorCQl3aWR0aCAwIGd0IHsKKwkJCVtdIDAgc2V0ZGFzaAorCQkJdGV4dCBzdHJpbmd3aWR0aCBwb3Agd2lkdGggZXhjaCBzdWIgdGV4dCBsZW5ndGggZGl2IDAgdGV4dCBhc2hvdworCQl9IGlmCisJZ3Jlc3RvcmUKK30gZGVmCisKKy9ib3hwcmltIHsJCQkJJSB4Y29ybmVyIHljb3JuZXIgeHNpemUgeXNpemUKKwkJNCAyIHJvbGwKKwkJbW92ZXRvCisJCTIgY29weQorCQlleGNoIDAgcmxpbmV0bworCQkwIGV4Y2ggcmxpbmV0bworCQlwb3AgbmVnIDAgcmxpbmV0bworCQljbG9zZXBhdGgKK30gYmluZCBkZWYKKworL2VsbGlwc2VfcGF0aCB7CisJL3J5IGV4Y2ggZGVmCisJL3J4IGV4Y2ggZGVmCisJL3kgZXhjaCBkZWYKKwkveCBleGNoIGRlZgorCW1hdHJpeCBjdXJyZW50bWF0cml4CisJbmV3cGF0aAorCXggeSB0cmFuc2xhdGUKKwlyeCByeSBzY2FsZQorCTAgMCAxIDAgMzYwIGFyYworCXNldG1hdHJpeAorfSBiaW5kIGRlZgorCisvZW5kcGFnZSB7IHNob3dwYWdlIH0gYmluZCBkZWYKKy9zaG93cGFnZSB7IH0gZGVmCisKKy9sYXllcmNvbG9yc2VxCisJWwklIGxheWVyIGNvbG9yIHNlcXVlbmNlIC0gZGFya2VzdCB0byBsaWdodGVzdAorCQlbMCAwIDBdCisJCVsuMiAuOCAuOF0KKwkJWy40IC44IC44XQorCQlbLjYgLjggLjhdCisJCVsuOCAuOCAuOF0KKwldCitkZWYKKworL2xheWVybGVuIGxheWVyY29sb3JzZXEgbGVuZ3RoIGRlZgorCisvc2V0bGF5ZXIgey9tYXhsYXllciBleGNoIGRlZiAvY3VybGF5ZXIgZXhjaCBkZWYKKwlsYXllcmNvbG9yc2VxIGN1cmxheWVyIDEgc3ViIGxheWVybGVuIG1vZCBnZXQKKwlhbG9hZCBwb3Agc2V0aHNiY29sb3IKKwkvbm9kZWNvbG9yIHtub3Bjb2xvcn0gZGVmCisJL2VkZ2Vjb2xvciB7bm9wY29sb3J9IGRlZgorCS9ncmFwaGNvbG9yIHtub3Bjb2xvcn0gZGVmCit9IGJpbmQgZGVmCisKKy9vbmxheWVyIHsgY3VybGF5ZXIgbmUge2ludmlzfSBpZiB9IGRlZgorCisvb25sYXllcnMgeworCS9teXVwcGVyIGV4Y2ggZGVmCisJL215bG93ZXIgZXhjaCBkZWYKKwljdXJsYXllciBteWxvd2VyIGx0CisJY3VybGF5ZXIgbXl1cHBlciBndAorCW9yCisJe2ludmlzfSBpZgorfSBkZWYKKworL2N1cmxheWVyIDAgZGVmCisKKyUlRW5kUmVzb3VyY2UKKyUlRW5kUHJvbG9nCislJUJlZ2luU2V0dXAKKzE0IGRlZmF1bHQtZm9udC1mYW1pbHkgc2V0X2ZvbnQKKzEgc2V0bWl0ZXJsaW1pdAorJSAvYXJyb3dsZW5ndGggMTAgZGVmCislIC9hcnJvd3dpZHRoIDUgZGVmCisKKyUgbWFrZSBzdXJlIHBkZm1hcmsgaXMgaGFybWxlc3MgZm9yIFBTLWludGVycHJldGVycyBvdGhlciB0aGFuIERpc3RpbGxlcgorL3BkZm1hcmsgd2hlcmUge3BvcH0ge3VzZXJkaWN0IC9wZGZtYXJrIC9jbGVhcnRvbWFyayBsb2FkIHB1dH0gaWZlbHNlCislIG1ha2UgJzw8JyBhbmQgJz4+JyBzYWZlIG9uIFBTIExldmVsIDEgZGV2aWNlcworL2xhbmd1YWdlbGV2ZWwgd2hlcmUge3BvcCBsYW5ndWFnZWxldmVsfXsxfSBpZmVsc2UKKzIgbHQgeworICAgIHVzZXJkaWN0ICg8PCkgY3ZuIChbKSBjdm4gbG9hZCBwdXQKKyAgICB1c2VyZGljdCAoPj4pIGN2biAoWykgY3ZuIGxvYWQgcHV0Cit9IGlmCisKKyUlRW5kU2V0dXAKK3NldHVwTGF0aW4xCislJVBhZ2U6IDEgMQorJSVQYWdlQm91bmRpbmdCb3g6IDAgMCAxNTYgMTM2CislJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKKzAgMCAxIGJlZ2lucGFnZQorZ3NhdmUKKzAgMCAxNTYgMTM2IGJveHByaW0gY2xpcCBuZXdwYXRoCisxIDEgc2V0X3NjYWxlIDAgcm90YXRlIDQgNSB0cmFuc2xhdGUKKyUgMworZ3NhdmUKKzEgc2V0bGluZXdpZHRoCiswIDAgMCBub2RlY29sb3IKK25ld3BhdGggMTQ4LjI1IDEyOCBtb3ZldG8KKy0uMjUgMTI4IGxpbmV0bworLS4yNSA5MCBsaW5ldG8KKzE0OC4yNSA5MCBsaW5ldG8KK2Nsb3NlcGF0aCBzdHJva2UKKzAgMCAwIG5vZGVjb2xvcgorMTQgL2NvdXJpZXIgc2V0X2ZvbnQKKzQ1IDExMi44IG1vdmV0byA1OCAoU3RhdGUgMykgYWxpZ25lZHRleHQKKzAgMCAwIG5vZGVjb2xvcgorMTQgL2NvdXJpZXIgc2V0X2ZvbnQKKzcuNSA5Ny44IG1vdmV0byAxMzMgKCAgMSBleHA6IGEgLiAiLiIpIGFsaWduZWR0ZXh0CitncmVzdG9yZQorJSA2Citnc2F2ZQorMSBzZXRsaW5ld2lkdGgKKzAgMCAwIG5vZGVjb2xvcgorbmV3cGF0aCAxNDguMjUgMzggbW92ZXRvCistLjI1IDM4IGxpbmV0bworLS4yNSAwIGxpbmV0bworMTQ4LjI1IDAgbGluZXRvCitjbG9zZXBhdGggc3Ryb2tlCiswIDAgMCBub2RlY29sb3IKKzE0IC9jb3VyaWVyIHNldF9mb250Cis0NSAyMi44IG1vdmV0byA1OCAoU3RhdGUgNikgYWxpZ25lZHRleHQKKzAgMCAwIG5vZGVjb2xvcgorMTQgL2NvdXJpZXIgc2V0X2ZvbnQKKzcuNSA3LjggbW92ZXRvIDEzMyAoICAxIGV4cDogYSAiLiIgLikgYWxpZ25lZHRleHQKK2dyZXN0b3JlCislIDMtPjYKK2dzYXZlCisxIHNldGxpbmV3aWR0aAorc29saWQKKzAgMCAwIGVkZ2Vjb2xvcgorbmV3cGF0aCA3NCA4OS43NyBtb3ZldG8KKzc0IDc3Ljg1IDc0IDYyLjA0IDc0IDQ4LjQ4IGN1cnZldG8KK3N0cm9rZQorMCAwIDAgZWRnZWNvbG9yCituZXdwYXRoIDc3LjUgNDguMjEgbW92ZXRvCis3NCAzOC4yMSBsaW5ldG8KKzcwLjUgNDguMjEgbGluZXRvCitjbG9zZXBhdGggZmlsbAorMSBzZXRsaW5ld2lkdGgKK3NvbGlkCiswIDAgMCBlZGdlY29sb3IKK25ld3BhdGggNzcuNSA0OC4yMSBtb3ZldG8KKzc0IDM4LjIxIGxpbmV0bworNzAuNSA0OC4yMSBsaW5ldG8KK2Nsb3NlcGF0aCBzdHJva2UKKzAgMCAwIGVkZ2Vjb2xvcgorMTQgL2NvdXJpZXIgc2V0X2ZvbnQKKzc0IDYwLjMgbW92ZXRvIDI1ICgiLiIpIGFsaWduZWR0ZXh0CitncmVzdG9yZQorZW5kcGFnZQorc2hvd3BhZ2UKK2dyZXN0b3JlCislJVBhZ2VUcmFpbGVyCislJUVuZFBhZ2U6IDEKKyUlVHJhaWxlcgorZW5kCityZXN0b3JlCislJUVPRgpkaWZmIC0tZ2l0IGEvZG9jL2ZpZ3MvZXhhbXBsZS1zaGlmdC5wZGYgYi9kb2MvZmlncy9leGFtcGxlLXNoaWZ0LnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjE4NWU0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2ZpZ3MvZXhhbXBsZS1zaGlmdC5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ZpZ3MvZXhhbXBsZS1zaGlmdC5wbmcgYi9kb2MvZmlncy9leGFtcGxlLXNoaWZ0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGZmZjY1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2ZpZ3MvZXhhbXBsZS1zaGlmdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ZpZ3MvZXhhbXBsZS5kb3QgYi9kb2MvZmlncy9leGFtcGxlLmRvdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGZmZjg1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2ZpZ3MvZXhhbXBsZS5kb3QKQEAgLTAsMCArMSwzNSBAQAorLy8gR2VuZXJhdGVkIGJ5IEdOVSBCaXNvbiAyLjYuOTAuCisvLyBSZXBvcnQgYnVncyB0byA8YnVnLWJpc29uQGdudS5vcmc+LgorLy8gSG9tZSBwYWdlOiA8aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2Jpc29uLz4uCisKK2RpZ3JhcGggIi90bXAvZm8ueSIKK3sKKyAgbm9kZSBbZm9udG5hbWUgPSBjb3VyaWVyLCBzaGFwZSA9IGJveCwgY29sb3JzY2hlbWUgPSBwYWlyZWQ2XQorICBlZGdlIFtmb250bmFtZSA9IGNvdXJpZXJdCisKKyAgMCBbbGFiZWw9IlN0YXRlIDBcblxsICAwICRhY2NlcHQ6IC4gZXhwICRlbmRcbCAgMSBleHA6IC4gYSBcIjtcIlxsICAyICAgIHwgLiBiIFwiLlwiXGwgIDMgYTogLiBcIjBcIlxsICA0IGI6IC4gXCIwXCJcbCJdCisgIDAgLT4gMSBbc3R5bGU9c29saWQgbGFiZWw9IlwiMFwiIl0KKyAgMCAtPiAyIFtzdHlsZT1kYXNoZWQgbGFiZWw9ImV4cCJdCisgIDAgLT4gMyBbc3R5bGU9ZGFzaGVkIGxhYmVsPSJhIl0KKyAgMCAtPiA0IFtzdHlsZT1kYXNoZWQgbGFiZWw9ImIiXQorICAxIFtsYWJlbD0iU3RhdGUgMVxuXGwgIDMgYTogXCIwXCIgLiAgW1wiO1wiXVxsICA0IGI6IFwiMFwiIC4gIFtcIi5cIl1cbCJdCisgIDEgLT4gIjFSMyIgW3N0eWxlPXNvbGlkXQorICIxUjMiIFtsYWJlbD0iUjMiLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICAxIC0+ICIxUjQiIFtsYWJlbD0iW1wiLlwiXSIsIHN0eWxlPXNvbGlkXQorICIxUjQiIFtsYWJlbD0iUjQiLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICAyIFtsYWJlbD0iU3RhdGUgMlxuXGwgIDAgJGFjY2VwdDogZXhwIC4gJGVuZFxsIl0KKyAgMiAtPiA1IFtzdHlsZT1zb2xpZCBsYWJlbD0iJGVuZCJdCisgIDMgW2xhYmVsPSJTdGF0ZSAzXG5cbCAgMSBleHA6IGEgLiBcIjtcIlxsIl0KKyAgMyAtPiA2IFtzdHlsZT1zb2xpZCBsYWJlbD0iXCI7XCIiXQorICA0IFtsYWJlbD0iU3RhdGUgNFxuXGwgIDIgZXhwOiBiIC4gXCIuXCJcbCJdCisgIDQgLT4gNyBbc3R5bGU9c29saWQgbGFiZWw9IlwiLlwiIl0KKyAgNSBbbGFiZWw9IlN0YXRlIDVcblxsICAwICRhY2NlcHQ6IGV4cCAkZW5kIC5cbCJdCisgIDUgLT4gIjVSMCIgW3N0eWxlPXNvbGlkXQorICI1UjAiIFtsYWJlbD0iQWNjIiwgZmlsbGNvbG9yPTEsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgNiBbbGFiZWw9IlN0YXRlIDZcblxsICAxIGV4cDogYSBcIjtcIiAuXGwiXQorICA2IC0+ICI2UjEiIFtzdHlsZT1zb2xpZF0KKyAiNlIxIiBbbGFiZWw9IlIxIiwgZmlsbGNvbG9yPTMsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgNyBbbGFiZWw9IlN0YXRlIDdcblxsICAyIGV4cDogYiBcIi5cIiAuXGwiXQorICA3IC0+ICI3UjIiIFtzdHlsZT1zb2xpZF0KKyAiN1IyIiBbbGFiZWw9IlIyIiwgZmlsbGNvbG9yPTMsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KK30KZGlmZiAtLWdpdCBhL2RvYy9maWdzL2V4YW1wbGUuZXBzIGIvZG9jL2ZpZ3MvZXhhbXBsZS5lcHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMwMzFiYQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9maWdzL2V4YW1wbGUuZXBzCkBAIC0wLDAgKzEsNzE1IEBACislIVBTLUFkb2JlLTMuMCBFUFNGLTMuMAorJSVDcmVhdG9yOiBncmFwaHZpeiB2ZXJzaW9uIDIuMjkuMjAxMjEwMjIuMDQ0NSAoMjAxMjEwMjIuMDQ0NSkKKyUlVGl0bGU6IC90bXAvZm8ueQorJSVQYWdlczogMQorJSVCb3VuZGluZ0JveDogMCAwIDczOSA0MjQKKyUlRW5kQ29tbWVudHMKK3NhdmUKKyUlQmVnaW5Qcm9sb2cKKy9Eb3REaWN0IDIwMCBkaWN0IGRlZgorRG90RGljdCBiZWdpbgorCisvc2V0dXBMYXRpbjEgeworbWFyaworL0VuY29kaW5nVmVjdG9yIDI1NiBhcnJheSBkZWYKKyBFbmNvZGluZ1ZlY3RvciAwCisKK0lTT0xhdGluMUVuY29kaW5nIDAgMjU1IGdldGludGVydmFsIHB1dGludGVydmFsCitFbmNvZGluZ1ZlY3RvciA0NSAvaHlwaGVuIHB1dAorCislIFNldCB1cCBJU08gTGF0aW4gMSBjaGFyYWN0ZXIgZW5jb2RpbmcKKy9zdGFybmV0SVNPIHsKKyAgICAgICAgZHVwIGR1cCBmaW5kZm9udCBkdXAgbGVuZ3RoIGRpY3QgYmVnaW4KKyAgICAgICAgeyAxIGluZGV4IC9GSUQgbmUgeyBkZWYgfXsgcG9wIHBvcCB9IGlmZWxzZQorICAgICAgICB9IGZvcmFsbAorICAgICAgICAvRW5jb2RpbmcgRW5jb2RpbmdWZWN0b3IgZGVmCisgICAgICAgIGN1cnJlbnRkaWN0IGVuZCBkZWZpbmVmb250Cit9IGRlZgorL1RpbWVzLVJvbWFuIHN0YXJuZXRJU08gZGVmCisvVGltZXMtSXRhbGljIHN0YXJuZXRJU08gZGVmCisvVGltZXMtQm9sZCBzdGFybmV0SVNPIGRlZgorL1RpbWVzLUJvbGRJdGFsaWMgc3Rhcm5ldElTTyBkZWYKKy9IZWx2ZXRpY2Egc3Rhcm5ldElTTyBkZWYKKy9IZWx2ZXRpY2EtT2JsaXF1ZSBzdGFybmV0SVNPIGRlZgorL0hlbHZldGljYS1Cb2xkIHN0YXJuZXRJU08gZGVmCisvSGVsdmV0aWNhLUJvbGRPYmxpcXVlIHN0YXJuZXRJU08gZGVmCisvQ291cmllciBzdGFybmV0SVNPIGRlZgorL0NvdXJpZXItT2JsaXF1ZSBzdGFybmV0SVNPIGRlZgorL0NvdXJpZXItQm9sZCBzdGFybmV0SVNPIGRlZgorL0NvdXJpZXItQm9sZE9ibGlxdWUgc3Rhcm5ldElTTyBkZWYKK2NsZWFydG9tYXJrCit9IGJpbmQgZGVmCisKKyUlQmVnaW5SZXNvdXJjZTogcHJvY3NldCBncmFwaHZpeiAwIDAKKy9jb29yZC1mb250LWZhbWlseSAvVGltZXMtUm9tYW4gZGVmCisvZGVmYXVsdC1mb250LWZhbWlseSAvVGltZXMtUm9tYW4gZGVmCisvY29vcmRmb250IGNvb3JkLWZvbnQtZmFtaWx5IGZpbmRmb250IDggc2NhbGVmb250IGRlZgorCisvSW52U2NhbGVGYWN0b3IgMS4wIGRlZgorL3NldF9zY2FsZSB7CisgICAgICAgZHVwIDEgZXhjaCBkaXYgL0ludlNjYWxlRmFjdG9yIGV4Y2ggZGVmCisgICAgICAgc2NhbGUKK30gYmluZCBkZWYKKworJSBzdHlsZXMKKy9zb2xpZCB7IFtdIDAgc2V0ZGFzaCB9IGJpbmQgZGVmCisvZGFzaGVkIHsgWzkgSW52U2NhbGVGYWN0b3IgbXVsIGR1cCBdIDAgc2V0ZGFzaCB9IGJpbmQgZGVmCisvZG90dGVkIHsgWzEgSW52U2NhbGVGYWN0b3IgbXVsIDYgSW52U2NhbGVGYWN0b3IgbXVsXSAwIHNldGRhc2ggfSBiaW5kIGRlZgorL2ludmlzIHsvZmlsbCB7bmV3cGF0aH0gZGVmIC9zdHJva2Uge25ld3BhdGh9IGRlZiAvc2hvdyB7cG9wIG5ld3BhdGh9IGRlZn0gYmluZCBkZWYKKy9ib2xkIHsgMiBzZXRsaW5ld2lkdGggfSBiaW5kIGRlZgorL2ZpbGxlZCB7IH0gYmluZCBkZWYKKy91bmZpbGxlZCB7IH0gYmluZCBkZWYKKy9yb3VuZGVkIHsgfSBiaW5kIGRlZgorL2RpYWdvbmFscyB7IH0gYmluZCBkZWYKKy90YXBlcmVkIHsgfSBiaW5kIGRlZgorCislIGhvb2tzIGZvciBzZXR0aW5nIGNvbG9yIAorL25vZGVjb2xvciB7IHNldGhzYmNvbG9yIH0gYmluZCBkZWYKKy9lZGdlY29sb3IgeyBzZXRoc2Jjb2xvciB9IGJpbmQgZGVmCisvZ3JhcGhjb2xvciB7IHNldGhzYmNvbG9yIH0gYmluZCBkZWYKKy9ub3Bjb2xvciB7cG9wIHBvcCBwb3B9IGJpbmQgZGVmCisKKy9iZWdpbnBhZ2UgewklIGkgaiBucGFnZXMKKwkvbnBhZ2VzIGV4Y2ggZGVmCisJL2ogZXhjaCBkZWYKKwkvaSBleGNoIGRlZgorCS9zdHIgMTAgc3RyaW5nIGRlZgorCW5wYWdlcyAxIGd0IHsKKwkJZ3NhdmUKKwkJCWNvb3JkZm9udCBzZXRmb250CisJCQkwIDAgbW92ZXRvCisJCQkoXCgpIHNob3cgaSBzdHIgY3ZzIHNob3cgKCwpIHNob3cgaiBzdHIgY3ZzIHNob3cgKFwpKSBzaG93CisJCWdyZXN0b3JlCisJfSBpZgorfSBiaW5kIGRlZgorCisvc2V0X2ZvbnQgeworCWZpbmRmb250IGV4Y2gKKwlzY2FsZWZvbnQgc2V0Zm9udAorfSBkZWYKKworJSBkcmF3IHRleHQgZml0dGVkIHRvIGl0cyBleHBlY3RlZCB3aWR0aAorL2FsaWduZWR0ZXh0IHsJCQklIHdpZHRoIHRleHQKKwkvdGV4dCBleGNoIGRlZgorCS93aWR0aCBleGNoIGRlZgorCWdzYXZlCisJCXdpZHRoIDAgZ3QgeworCQkJW10gMCBzZXRkYXNoCisJCQl0ZXh0IHN0cmluZ3dpZHRoIHBvcCB3aWR0aCBleGNoIHN1YiB0ZXh0IGxlbmd0aCBkaXYgMCB0ZXh0IGFzaG93CisJCX0gaWYKKwlncmVzdG9yZQorfSBkZWYKKworL2JveHByaW0gewkJCQklIHhjb3JuZXIgeWNvcm5lciB4c2l6ZSB5c2l6ZQorCQk0IDIgcm9sbAorCQltb3ZldG8KKwkJMiBjb3B5CisJCWV4Y2ggMCBybGluZXRvCisJCTAgZXhjaCBybGluZXRvCisJCXBvcCBuZWcgMCBybGluZXRvCisJCWNsb3NlcGF0aAorfSBiaW5kIGRlZgorCisvZWxsaXBzZV9wYXRoIHsKKwkvcnkgZXhjaCBkZWYKKwkvcnggZXhjaCBkZWYKKwkveSBleGNoIGRlZgorCS94IGV4Y2ggZGVmCisJbWF0cml4IGN1cnJlbnRtYXRyaXgKKwluZXdwYXRoCisJeCB5IHRyYW5zbGF0ZQorCXJ4IHJ5IHNjYWxlCisJMCAwIDEgMCAzNjAgYXJjCisJc2V0bWF0cml4Cit9IGJpbmQgZGVmCisKKy9lbmRwYWdlIHsgc2hvd3BhZ2UgfSBiaW5kIGRlZgorL3Nob3dwYWdlIHsgfSBkZWYKKworL2xheWVyY29sb3JzZXEKKwlbCSUgbGF5ZXIgY29sb3Igc2VxdWVuY2UgLSBkYXJrZXN0IHRvIGxpZ2h0ZXN0CisJCVswIDAgMF0KKwkJWy4yIC44IC44XQorCQlbLjQgLjggLjhdCisJCVsuNiAuOCAuOF0KKwkJWy44IC44IC44XQorCV0KK2RlZgorCisvbGF5ZXJsZW4gbGF5ZXJjb2xvcnNlcSBsZW5ndGggZGVmCisKKy9zZXRsYXllciB7L21heGxheWVyIGV4Y2ggZGVmIC9jdXJsYXllciBleGNoIGRlZgorCWxheWVyY29sb3JzZXEgY3VybGF5ZXIgMSBzdWIgbGF5ZXJsZW4gbW9kIGdldAorCWFsb2FkIHBvcCBzZXRoc2Jjb2xvcgorCS9ub2RlY29sb3Ige25vcGNvbG9yfSBkZWYKKwkvZWRnZWNvbG9yIHtub3Bjb2xvcn0gZGVmCisJL2dyYXBoY29sb3Ige25vcGNvbG9yfSBkZWYKK30gYmluZCBkZWYKKworL29ubGF5ZXIgeyBjdXJsYXllciBuZSB7aW52aXN9IGlmIH0gZGVmCisKKy9vbmxheWVycyB7CisJL215dXBwZXIgZXhjaCBkZWYKKwkvbXlsb3dlciBleGNoIGRlZgorCWN1cmxheWVyIG15bG93ZXIgbHQKKwljdXJsYXllciBteXVwcGVyIGd0CisJb3IKKwl7aW52aXN9IGlmCit9IGRlZgorCisvY3VybGF5ZXIgMCBkZWYKKworJSVFbmRSZXNvdXJjZQorJSVFbmRQcm9sb2cKKyUlQmVnaW5TZXR1cAorMTQgZGVmYXVsdC1mb250LWZhbWlseSBzZXRfZm9udAorMSBzZXRtaXRlcmxpbWl0CislIC9hcnJvd2xlbmd0aCAxMCBkZWYKKyUgL2Fycm93d2lkdGggNSBkZWYKKworJSBtYWtlIHN1cmUgcGRmbWFyayBpcyBoYXJtbGVzcyBmb3IgUFMtaW50ZXJwcmV0ZXJzIG90aGVyIHRoYW4gRGlzdGlsbGVyCisvcGRmbWFyayB3aGVyZSB7cG9wfSB7dXNlcmRpY3QgL3BkZm1hcmsgL2NsZWFydG9tYXJrIGxvYWQgcHV0fSBpZmVsc2UKKyUgbWFrZSAnPDwnIGFuZCAnPj4nIHNhZmUgb24gUFMgTGV2ZWwgMSBkZXZpY2VzCisvbGFuZ3VhZ2VsZXZlbCB3aGVyZSB7cG9wIGxhbmd1YWdlbGV2ZWx9ezF9IGlmZWxzZQorMiBsdCB7CisgICAgdXNlcmRpY3QgKDw8KSBjdm4gKFspIGN2biBsb2FkIHB1dAorICAgIHVzZXJkaWN0ICg+PikgY3ZuIChbKSBjdm4gbG9hZCBwdXQKK30gaWYKKworJSVFbmRTZXR1cAorc2V0dXBMYXRpbjEKKyUlUGFnZTogMSAxCislJVBhZ2VCb3VuZGluZ0JveDogMCAwIDczOSA0MjQKKyUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAorMCAwIDEgYmVnaW5wYWdlCitnc2F2ZQorMCAwIDczOSA0MjQgYm94cHJpbSBjbGlwIG5ld3BhdGgKKzEgMSBzZXRfc2NhbGUgMCByb3RhdGUgNCA1IHRyYW5zbGF0ZQorJSAwCitnc2F2ZQorMSBzZXRsaW5ld2lkdGgKKzAgMCAwIG5vZGVjb2xvcgorbmV3cGF0aCA0OTUgNDE2IG1vdmV0bworMjg5IDQxNiBsaW5ldG8KKzI4OSAzMDIgbGluZXRvCis0OTUgMzAyIGxpbmV0bworY2xvc2VwYXRoIHN0cm9rZQorMCAwIDAgbm9kZWNvbG9yCisxNCAvY291cmllciBzZXRfZm9udAorMzYzIDQwMC44IG1vdmV0byA1OCAoU3RhdGUgMCkgYWxpZ25lZHRleHQKKzAgMCAwIG5vZGVjb2xvcgorMTQgL2NvdXJpZXIgc2V0X2ZvbnQKKzI5NyAzNjkuOCBtb3ZldG8gMTkwICggIDAgJGFjY2VwdDogLiBleHAgJGVuZCkgYWxpZ25lZHRleHQKKzAgMCAwIG5vZGVjb2xvcgorMTQgL2NvdXJpZXIgc2V0X2ZvbnQKKzI5NyAzNTQuOCBtb3ZldG8gMTMzICggIDEgZXhwOiAuIGEgIjsiKSBhbGlnbmVkdGV4dAorMCAwIDAgbm9kZWNvbG9yCisxNCAvY291cmllciBzZXRfZm9udAorMjk3IDMzOS44IG1vdmV0byAxMzMgKCAgMiAgICB8IC4gYiAiLiIpIGFsaWduZWR0ZXh0CiswIDAgMCBub2RlY29sb3IKKzE0IC9jb3VyaWVyIHNldF9mb250CisyOTcgMzI0LjggbW92ZXRvIDEwMCAoICAzIGE6IC4gIjAiKSBhbGlnbmVkdGV4dAorMCAwIDAgbm9kZWNvbG9yCisxNCAvY291cmllciBzZXRfZm9udAorMjk3IDMwOS44IG1vdmV0byAxMDAgKCAgNCBiOiAuICIwIikgYWxpZ25lZHRleHQKK2dyZXN0b3JlCislIDEKK2dzYXZlCisxIHNldGxpbmV3aWR0aAorMCAwIDAgbm9kZWNvbG9yCituZXdwYXRoIDE3Mi4yNSAyNDkuNSBtb3ZldG8KKy0uMjUgMjQ5LjUgbGluZXRvCistLjI1IDE4MC41IGxpbmV0bworMTcyLjI1IDE4MC41IGxpbmV0bworY2xvc2VwYXRoIHN0cm9rZQorMCAwIDAgbm9kZWNvbG9yCisxNCAvY291cmllciBzZXRfZm9udAorNTcgMjM0LjMgbW92ZXRvIDU4IChTdGF0ZSAxKSBhbGlnbmVkdGV4dAorMCAwIDAgbm9kZWNvbG9yCisxNCAvY291cmllciBzZXRfZm9udAorNy41IDIwMy4zIG1vdmV0byAxNTcgKCAgMyBhOiAiMCIgLiAgWyI7Il0pIGFsaWduZWR0ZXh0CiswIDAgMCBub2RlY29sb3IKKzE0IC9jb3VyaWVyIHNldF9mb250Cis3LjUgMTg4LjMgbW92ZXRvIDE1NyAoICA0IGI6ICIwIiAuICBbIi4iXSkgYWxpZ25lZHRleHQKK2dyZXN0b3JlCislIDAtPjEKK2dzYXZlCisxIHNldGxpbmV3aWR0aAorc29saWQKKzAgMCAwIGVkZ2Vjb2xvcgorbmV3cGF0aCAyODguODMgMzEwLjEyIG1vdmV0bworMjQ5LjMyIDI5MS43OSAyMDQuODQgMjcxLjE1IDE2Ny42MiAyNTMuODcgY3VydmV0bworc3Ryb2tlCiswIDAgMCBlZGdlY29sb3IKK25ld3BhdGggMTY4Ljg2IDI1MC41OSBtb3ZldG8KKzE1OC4zMiAyNDkuNTYgbGluZXRvCisxNjUuOTIgMjU2Ljk0IGxpbmV0bworY2xvc2VwYXRoIGZpbGwKKzEgc2V0bGluZXdpZHRoCitzb2xpZAorMCAwIDAgZWRnZWNvbG9yCituZXdwYXRoIDE2OC44NiAyNTAuNTkgbW92ZXRvCisxNTguMzIgMjQ5LjU2IGxpbmV0bworMTY1LjkyIDI1Ni45NCBsaW5ldG8KK2Nsb3NlcGF0aCBzdHJva2UKKzAgMCAwIGVkZ2Vjb2xvcgorMTQgL2NvdXJpZXIgc2V0X2ZvbnQKKzIzMCAyNzIuMyBtb3ZldG8gMjUgKCIwIikgYWxpZ25lZHRleHQKK2dyZXN0b3JlCislIDIKK2dzYXZlCisxIHNldGxpbmV3aWR0aAorMCAwIDAgbm9kZWNvbG9yCituZXdwYXRoIDM5NyAyNDIgbW92ZXRvCisxOTEgMjQyIGxpbmV0bworMTkxIDE4OCBsaW5ldG8KKzM5NyAxODggbGluZXRvCitjbG9zZXBhdGggc3Ryb2tlCiswIDAgMCBub2RlY29sb3IKKzE0IC9jb3VyaWVyIHNldF9mb250CisyNjUgMjI2LjggbW92ZXRvIDU4IChTdGF0ZSAyKSBhbGlnbmVkdGV4dAorMCAwIDAgbm9kZWNvbG9yCisxNCAvY291cmllciBzZXRfZm9udAorMTk5IDE5NS44IG1vdmV0byAxOTAgKCAgMCAkYWNjZXB0OiBleHAgLiAkZW5kKSBhbGlnbmVkdGV4dAorZ3Jlc3RvcmUKKyUgMC0+MgorZ3NhdmUKKzEgc2V0bGluZXdpZHRoCitkYXNoZWQKKzAgMCAwIGVkZ2Vjb2xvcgorbmV3cGF0aCAzNTMuMjcgMzAxLjg4IG1vdmV0bworMzQxLjI2IDI4NC40OCAzMjguMzkgMjY1LjgzIDMxNy43MiAyNTAuMzcgY3VydmV0bworc3Ryb2tlCiswIDAgMCBlZGdlY29sb3IKK25ld3BhdGggMzIwLjYgMjQ4LjM5IG1vdmV0bworMzEyLjA0IDI0Mi4xNCBsaW5ldG8KKzMxNC44NCAyNTIuMzYgbGluZXRvCitjbG9zZXBhdGggZmlsbAorMSBzZXRsaW5ld2lkdGgKK3NvbGlkCiswIDAgMCBlZGdlY29sb3IKK25ld3BhdGggMzIwLjYgMjQ4LjM5IG1vdmV0bworMzEyLjA0IDI0Mi4xNCBsaW5ldG8KKzMxNC44NCAyNTIuMzYgbGluZXRvCitjbG9zZXBhdGggc3Ryb2tlCiswIDAgMCBlZGdlY29sb3IKKzE0IC9jb3VyaWVyIHNldF9mb250CiszNDEgMjcyLjMgbW92ZXRvIDI1IChleHApIGFsaWduZWR0ZXh0CitncmVzdG9yZQorJSAzCitnc2F2ZQorMSBzZXRsaW5ld2lkdGgKKzAgMCAwIG5vZGVjb2xvcgorbmV3cGF0aCA1NjQuMjUgMjQyIG1vdmV0bworNDE1Ljc1IDI0MiBsaW5ldG8KKzQxNS43NSAxODggbGluZXRvCis1NjQuMjUgMTg4IGxpbmV0bworY2xvc2VwYXRoIHN0cm9rZQorMCAwIDAgbm9kZWNvbG9yCisxNCAvY291cmllciBzZXRfZm9udAorNDYxIDIyNi44IG1vdmV0byA1OCAoU3RhdGUgMykgYWxpZ25lZHRleHQKKzAgMCAwIG5vZGVjb2xvcgorMTQgL2NvdXJpZXIgc2V0X2ZvbnQKKzQyMy41IDE5NS44IG1vdmV0byAxMzMgKCAgMSBleHA6IGEgLiAiOyIpIGFsaWduZWR0ZXh0CitncmVzdG9yZQorJSAwLT4zCitnc2F2ZQorMSBzZXRsaW5ld2lkdGgKK2Rhc2hlZAorMCAwIDAgZWRnZWNvbG9yCituZXdwYXRoIDQzMC43MyAzMDEuODggbW92ZXRvCis0NDIuNzQgMjg0LjQ4IDQ1NS42MSAyNjUuODMgNDY2LjI4IDI1MC4zNyBjdXJ2ZXRvCitzdHJva2UKKzAgMCAwIGVkZ2Vjb2xvcgorbmV3cGF0aCA0NjkuMTYgMjUyLjM2IG1vdmV0bworNDcxLjk2IDI0Mi4xNCBsaW5ldG8KKzQ2My40IDI0OC4zOSBsaW5ldG8KK2Nsb3NlcGF0aCBmaWxsCisxIHNldGxpbmV3aWR0aAorc29saWQKKzAgMCAwIGVkZ2Vjb2xvcgorbmV3cGF0aCA0NjkuMTYgMjUyLjM2IG1vdmV0bworNDcxLjk2IDI0Mi4xNCBsaW5ldG8KKzQ2My40IDI0OC4zOSBsaW5ldG8KK2Nsb3NlcGF0aCBzdHJva2UKKzAgMCAwIGVkZ2Vjb2xvcgorMTQgL2NvdXJpZXIgc2V0X2ZvbnQKKzQ1MyAyNzIuMyBtb3ZldG8gOSAoYSkgYWxpZ25lZHRleHQKK2dyZXN0b3JlCislIDQKK2dzYXZlCisxIHNldGxpbmV3aWR0aAorMCAwIDAgbm9kZWNvbG9yCituZXdwYXRoIDczMS4yNSAyNDIgbW92ZXRvCis1ODIuNzUgMjQyIGxpbmV0bworNTgyLjc1IDE4OCBsaW5ldG8KKzczMS4yNSAxODggbGluZXRvCitjbG9zZXBhdGggc3Ryb2tlCiswIDAgMCBub2RlY29sb3IKKzE0IC9jb3VyaWVyIHNldF9mb250Cis2MjggMjI2LjggbW92ZXRvIDU4IChTdGF0ZSA0KSBhbGlnbmVkdGV4dAorMCAwIDAgbm9kZWNvbG9yCisxNCAvY291cmllciBzZXRfZm9udAorNTkwLjUgMTk1LjggbW92ZXRvIDEzMyAoICAyIGV4cDogYiAuICIuIikgYWxpZ25lZHRleHQKK2dyZXN0b3JlCislIDAtPjQKK2dzYXZlCisxIHNldGxpbmV3aWR0aAorZGFzaGVkCiswIDAgMCBlZGdlY29sb3IKK25ld3BhdGggNDk1LjIxIDMwMi42OSBtb3ZldG8KKzUzMC41MSAyODMuNzggNTY4LjczIDI2My4zIDU5OS4xNSAyNDcgY3VydmV0bworc3Ryb2tlCiswIDAgMCBlZGdlY29sb3IKK25ld3BhdGggNjAxLjE3IDI0OS44OSBtb3ZldG8KKzYwOC4zMyAyNDIuMDggbGluZXRvCis1OTcuODYgMjQzLjcyIGxpbmV0bworY2xvc2VwYXRoIGZpbGwKKzEgc2V0bGluZXdpZHRoCitzb2xpZAorMCAwIDAgZWRnZWNvbG9yCituZXdwYXRoIDYwMS4xNyAyNDkuODkgbW92ZXRvCis2MDguMzMgMjQyLjA4IGxpbmV0bworNTk3Ljg2IDI0My43MiBsaW5ldG8KK2Nsb3NlcGF0aCBzdHJva2UKKzAgMCAwIGVkZ2Vjb2xvcgorMTQgL2NvdXJpZXIgc2V0X2ZvbnQKKzU1NyAyNzIuMyBtb3ZldG8gOSAoYikgYWxpZ25lZHRleHQKK2dyZXN0b3JlCislIDFSMworZ3NhdmUKKzAuMjU0OSAwLjM4MDM5IDAuODc0NTEgbm9kZWNvbG9yCituZXdwYXRoIDM2IDExOSBtb3ZldG8KKzYgMTAxIGxpbmV0bworMzYgODMgbGluZXRvCis2NiAxMDEgbGluZXRvCitjbG9zZXBhdGggZmlsbAorMSBzZXRsaW5ld2lkdGgKK2ZpbGxlZAorMCAwIDAgbm9kZWNvbG9yCituZXdwYXRoIDM2IDExOSBtb3ZldG8KKzYgMTAxIGxpbmV0bworMzYgODMgbGluZXRvCis2NiAxMDEgbGluZXRvCitjbG9zZXBhdGggc3Ryb2tlCiswIDAgMCBub2RlY29sb3IKKzE0IC9jb3VyaWVyIHNldF9mb250CisyNy41IDk3LjMgbW92ZXRvIDE3IChSMykgYWxpZ25lZHRleHQKK2dyZXN0b3JlCislIDEtPjFSMworZ3NhdmUKKzEgc2V0bGluZXdpZHRoCitzb2xpZAorMCAwIDAgZWRnZWNvbG9yCituZXdwYXRoIDcxIDE4MC40IG1vdmV0bworNjIuOTUgMTYyLjM2IDUzLjI0IDE0MC42MSA0Ni4wOSAxMjQuNjEgY3VydmV0bworc3Ryb2tlCiswIDAgMCBlZGdlY29sb3IKK25ld3BhdGggNDkuMjggMTIzLjE3IG1vdmV0bworNDIuMDEgMTE1LjQ2IGxpbmV0bworNDIuODkgMTI2LjAyIGxpbmV0bworY2xvc2VwYXRoIGZpbGwKKzEgc2V0bGluZXdpZHRoCitzb2xpZAorMCAwIDAgZWRnZWNvbG9yCituZXdwYXRoIDQ5LjI4IDEyMy4xNyBtb3ZldG8KKzQyLjAxIDExNS40NiBsaW5ldG8KKzQyLjg5IDEyNi4wMiBsaW5ldG8KK2Nsb3NlcGF0aCBzdHJva2UKK2dyZXN0b3JlCislIDFSNAorZ3NhdmUKKzAuMjU0OSAwLjM4MDM5IDAuODc0NTEgbm9kZWNvbG9yCituZXdwYXRoIDExNSAxMTkgbW92ZXRvCis4NSAxMDEgbGluZXRvCisxMTUgODMgbGluZXRvCisxNDUgMTAxIGxpbmV0bworY2xvc2VwYXRoIGZpbGwKKzEgc2V0bGluZXdpZHRoCitmaWxsZWQKKzAgMCAwIG5vZGVjb2xvcgorbmV3cGF0aCAxMTUgMTE5IG1vdmV0bworODUgMTAxIGxpbmV0bworMTE1IDgzIGxpbmV0bworMTQ1IDEwMSBsaW5ldG8KK2Nsb3NlcGF0aCBzdHJva2UKKzAgMCAwIG5vZGVjb2xvcgorMTQgL2NvdXJpZXIgc2V0X2ZvbnQKKzEwNi41IDk3LjMgbW92ZXRvIDE3IChSNCkgYWxpZ25lZHRleHQKK2dyZXN0b3JlCislIDEtPjFSNAorZ3NhdmUKKzEgc2V0bGluZXdpZHRoCitzb2xpZAorMCAwIDAgZWRnZWNvbG9yCituZXdwYXRoIDk0LjcgMTgwLjQgbW92ZXRvCis5OS4xNSAxNjMuMjIgMTA0LjQ2IDE0Mi42OSAxMDguNTQgMTI2Ljk0IGN1cnZldG8KK3N0cm9rZQorMCAwIDAgZWRnZWNvbG9yCituZXdwYXRoIDExMi4wMiAxMjcuNDcgbW92ZXRvCisxMTEuMTQgMTE2LjkxIGxpbmV0bworMTA1LjI0IDEyNS43MSBsaW5ldG8KK2Nsb3NlcGF0aCBmaWxsCisxIHNldGxpbmV3aWR0aAorc29saWQKKzAgMCAwIGVkZ2Vjb2xvcgorbmV3cGF0aCAxMTIuMDIgMTI3LjQ3IG1vdmV0bworMTExLjE0IDExNi45MSBsaW5ldG8KKzEwNS4yNCAxMjUuNzEgbGluZXRvCitjbG9zZXBhdGggc3Ryb2tlCiswIDAgMCBlZGdlY29sb3IKKzE0IC9jb3VyaWVyIHNldF9mb250CisxMDQgMTUwLjMgbW92ZXRvIDQyIChbIi4iXSkgYWxpZ25lZHRleHQKK2dyZXN0b3JlCislIDUKK2dzYXZlCisxIHNldGxpbmV3aWR0aAorMCAwIDAgbm9kZWNvbG9yCituZXdwYXRoIDM5NyAxMjggbW92ZXRvCisxOTEgMTI4IGxpbmV0bworMTkxIDc0IGxpbmV0bworMzk3IDc0IGxpbmV0bworY2xvc2VwYXRoIHN0cm9rZQorMCAwIDAgbm9kZWNvbG9yCisxNCAvY291cmllciBzZXRfZm9udAorMjY1IDExMi44IG1vdmV0byA1OCAoU3RhdGUgNSkgYWxpZ25lZHRleHQKKzAgMCAwIG5vZGVjb2xvcgorMTQgL2NvdXJpZXIgc2V0X2ZvbnQKKzE5OSA4MS44IG1vdmV0byAxOTAgKCAgMCAkYWNjZXB0OiBleHAgJGVuZCAuKSBhbGlnbmVkdGV4dAorZ3Jlc3RvcmUKKyUgMi0+NQorZ3NhdmUKKzEgc2V0bGluZXdpZHRoCitzb2xpZAorMCAwIDAgZWRnZWNvbG9yCituZXdwYXRoIDI5NCAxODcuNzQgbW92ZXRvCisyOTQgMTczIDI5NCAxNTQuMzggMjk0IDEzOC4yNiBjdXJ2ZXRvCitzdHJva2UKKzAgMCAwIGVkZ2Vjb2xvcgorbmV3cGF0aCAyOTcuNSAxMzguMDkgbW92ZXRvCisyOTQgMTI4LjA5IGxpbmV0bworMjkwLjUgMTM4LjA5IGxpbmV0bworY2xvc2VwYXRoIGZpbGwKKzEgc2V0bGluZXdpZHRoCitzb2xpZAorMCAwIDAgZWRnZWNvbG9yCituZXdwYXRoIDI5Ny41IDEzOC4wOSBtb3ZldG8KKzI5NCAxMjguMDkgbGluZXRvCisyOTAuNSAxMzguMDkgbGluZXRvCitjbG9zZXBhdGggc3Ryb2tlCiswIDAgMCBlZGdlY29sb3IKKzE0IC9jb3VyaWVyIHNldF9mb250CisyOTQgMTUwLjMgbW92ZXRvIDM0ICgkZW5kKSBhbGlnbmVkdGV4dAorZ3Jlc3RvcmUKKyUgNgorZ3NhdmUKKzEgc2V0bGluZXdpZHRoCiswIDAgMCBub2RlY29sb3IKK25ld3BhdGggNTY0LjI1IDEyOCBtb3ZldG8KKzQxNS43NSAxMjggbGluZXRvCis0MTUuNzUgNzQgbGluZXRvCis1NjQuMjUgNzQgbGluZXRvCitjbG9zZXBhdGggc3Ryb2tlCiswIDAgMCBub2RlY29sb3IKKzE0IC9jb3VyaWVyIHNldF9mb250Cis0NjEgMTEyLjggbW92ZXRvIDU4IChTdGF0ZSA2KSBhbGlnbmVkdGV4dAorMCAwIDAgbm9kZWNvbG9yCisxNCAvY291cmllciBzZXRfZm9udAorNDIzLjUgODEuOCBtb3ZldG8gMTMzICggIDEgZXhwOiBhICI7IiAuKSBhbGlnbmVkdGV4dAorZ3Jlc3RvcmUKKyUgMy0+NgorZ3NhdmUKKzEgc2V0bGluZXdpZHRoCitzb2xpZAorMCAwIDAgZWRnZWNvbG9yCituZXdwYXRoIDQ5MCAxODcuNzQgbW92ZXRvCis0OTAgMTczIDQ5MCAxNTQuMzggNDkwIDEzOC4yNiBjdXJ2ZXRvCitzdHJva2UKKzAgMCAwIGVkZ2Vjb2xvcgorbmV3cGF0aCA0OTMuNSAxMzguMDkgbW92ZXRvCis0OTAgMTI4LjA5IGxpbmV0bworNDg2LjUgMTM4LjA5IGxpbmV0bworY2xvc2VwYXRoIGZpbGwKKzEgc2V0bGluZXdpZHRoCitzb2xpZAorMCAwIDAgZWRnZWNvbG9yCituZXdwYXRoIDQ5My41IDEzOC4wOSBtb3ZldG8KKzQ5MCAxMjguMDkgbGluZXRvCis0ODYuNSAxMzguMDkgbGluZXRvCitjbG9zZXBhdGggc3Ryb2tlCiswIDAgMCBlZGdlY29sb3IKKzE0IC9jb3VyaWVyIHNldF9mb250Cis0OTAgMTUwLjMgbW92ZXRvIDI1ICgiOyIpIGFsaWduZWR0ZXh0CitncmVzdG9yZQorJSA3Citnc2F2ZQorMSBzZXRsaW5ld2lkdGgKKzAgMCAwIG5vZGVjb2xvcgorbmV3cGF0aCA3MzEuMjUgMTI4IG1vdmV0bworNTgyLjc1IDEyOCBsaW5ldG8KKzU4Mi43NSA3NCBsaW5ldG8KKzczMS4yNSA3NCBsaW5ldG8KK2Nsb3NlcGF0aCBzdHJva2UKKzAgMCAwIG5vZGVjb2xvcgorMTQgL2NvdXJpZXIgc2V0X2ZvbnQKKzYyOCAxMTIuOCBtb3ZldG8gNTggKFN0YXRlIDcpIGFsaWduZWR0ZXh0CiswIDAgMCBub2RlY29sb3IKKzE0IC9jb3VyaWVyIHNldF9mb250Cis1OTAuNSA4MS44IG1vdmV0byAxMzMgKCAgMiBleHA6IGIgIi4iIC4pIGFsaWduZWR0ZXh0CitncmVzdG9yZQorJSA0LT43Citnc2F2ZQorMSBzZXRsaW5ld2lkdGgKK3NvbGlkCiswIDAgMCBlZGdlY29sb3IKK25ld3BhdGggNjU3IDE4Ny43NCBtb3ZldG8KKzY1NyAxNzMgNjU3IDE1NC4zOCA2NTcgMTM4LjI2IGN1cnZldG8KK3N0cm9rZQorMCAwIDAgZWRnZWNvbG9yCituZXdwYXRoIDY2MC41IDEzOC4wOSBtb3ZldG8KKzY1NyAxMjguMDkgbGluZXRvCis2NTMuNSAxMzguMDkgbGluZXRvCitjbG9zZXBhdGggZmlsbAorMSBzZXRsaW5ld2lkdGgKK3NvbGlkCiswIDAgMCBlZGdlY29sb3IKK25ld3BhdGggNjYwLjUgMTM4LjA5IG1vdmV0bworNjU3IDEyOC4wOSBsaW5ldG8KKzY1My41IDEzOC4wOSBsaW5ldG8KK2Nsb3NlcGF0aCBzdHJva2UKKzAgMCAwIGVkZ2Vjb2xvcgorMTQgL2NvdXJpZXIgc2V0X2ZvbnQKKzY1NyAxNTAuMyBtb3ZldG8gMjUgKCIuIikgYWxpZ25lZHRleHQKK2dyZXN0b3JlCislIDVSMAorZ3NhdmUKKzAuNTU2ODYgMC4yNjY2NyAwLjg5MDIgbm9kZWNvbG9yCituZXdwYXRoIDI5NCAzNiBtb3ZldG8KKzI1Ni40NyAxOCBsaW5ldG8KKzI5NCAwIGxpbmV0bworMzMxLjUzIDE4IGxpbmV0bworY2xvc2VwYXRoIGZpbGwKKzEgc2V0bGluZXdpZHRoCitmaWxsZWQKKzAgMCAwIG5vZGVjb2xvcgorbmV3cGF0aCAyOTQgMzYgbW92ZXRvCisyNTYuNDcgMTggbGluZXRvCisyOTQgMCBsaW5ldG8KKzMzMS41MyAxOCBsaW5ldG8KK2Nsb3NlcGF0aCBzdHJva2UKKzAgMCAwIG5vZGVjb2xvcgorMTQgL2NvdXJpZXIgc2V0X2ZvbnQKKzI4MS41IDE0LjMgbW92ZXRvIDI1IChBY2MpIGFsaWduZWR0ZXh0CitncmVzdG9yZQorJSA1LT41UjAKK2dzYXZlCisxIHNldGxpbmV3aWR0aAorc29saWQKKzAgMCAwIGVkZ2Vjb2xvcgorbmV3cGF0aCAyOTQgNzMuOTMgbW92ZXRvCisyOTQgNjUuMTEgMjk0IDU1LjI1IDI5NCA0Ni4zNSBjdXJ2ZXRvCitzdHJva2UKKzAgMCAwIGVkZ2Vjb2xvcgorbmV3cGF0aCAyOTcuNSA0Ni4wOSBtb3ZldG8KKzI5NCAzNi4wOSBsaW5ldG8KKzI5MC41IDQ2LjA5IGxpbmV0bworY2xvc2VwYXRoIGZpbGwKKzEgc2V0bGluZXdpZHRoCitzb2xpZAorMCAwIDAgZWRnZWNvbG9yCituZXdwYXRoIDI5Ny41IDQ2LjA5IG1vdmV0bworMjk0IDM2LjA5IGxpbmV0bworMjkwLjUgNDYuMDkgbGluZXRvCitjbG9zZXBhdGggc3Ryb2tlCitncmVzdG9yZQorJSA2UjEKK2dzYXZlCiswLjI1NDkgMC4zODAzOSAwLjg3NDUxIG5vZGVjb2xvcgorbmV3cGF0aCA0OTAgMzYgbW92ZXRvCis0NjAgMTggbGluZXRvCis0OTAgMCBsaW5ldG8KKzUyMCAxOCBsaW5ldG8KK2Nsb3NlcGF0aCBmaWxsCisxIHNldGxpbmV3aWR0aAorZmlsbGVkCiswIDAgMCBub2RlY29sb3IKK25ld3BhdGggNDkwIDM2IG1vdmV0bworNDYwIDE4IGxpbmV0bworNDkwIDAgbGluZXRvCis1MjAgMTggbGluZXRvCitjbG9zZXBhdGggc3Ryb2tlCiswIDAgMCBub2RlY29sb3IKKzE0IC9jb3VyaWVyIHNldF9mb250Cis0ODEuNSAxNC4zIG1vdmV0byAxNyAoUjEpIGFsaWduZWR0ZXh0CitncmVzdG9yZQorJSA2LT42UjEKK2dzYXZlCisxIHNldGxpbmV3aWR0aAorc29saWQKKzAgMCAwIGVkZ2Vjb2xvcgorbmV3cGF0aCA0OTAgNzMuOTMgbW92ZXRvCis0OTAgNjUuMTEgNDkwIDU1LjI1IDQ5MCA0Ni4zNSBjdXJ2ZXRvCitzdHJva2UKKzAgMCAwIGVkZ2Vjb2xvcgorbmV3cGF0aCA0OTMuNSA0Ni4wOSBtb3ZldG8KKzQ5MCAzNi4wOSBsaW5ldG8KKzQ4Ni41IDQ2LjA5IGxpbmV0bworY2xvc2VwYXRoIGZpbGwKKzEgc2V0bGluZXdpZHRoCitzb2xpZAorMCAwIDAgZWRnZWNvbG9yCituZXdwYXRoIDQ5My41IDQ2LjA5IG1vdmV0bworNDkwIDM2LjA5IGxpbmV0bworNDg2LjUgNDYuMDkgbGluZXRvCitjbG9zZXBhdGggc3Ryb2tlCitncmVzdG9yZQorJSA3UjIKK2dzYXZlCiswLjI1NDkgMC4zODAzOSAwLjg3NDUxIG5vZGVjb2xvcgorbmV3cGF0aCA2NTcgMzYgbW92ZXRvCis2MjcgMTggbGluZXRvCis2NTcgMCBsaW5ldG8KKzY4NyAxOCBsaW5ldG8KK2Nsb3NlcGF0aCBmaWxsCisxIHNldGxpbmV3aWR0aAorZmlsbGVkCiswIDAgMCBub2RlY29sb3IKK25ld3BhdGggNjU3IDM2IG1vdmV0bworNjI3IDE4IGxpbmV0bworNjU3IDAgbGluZXRvCis2ODcgMTggbGluZXRvCitjbG9zZXBhdGggc3Ryb2tlCiswIDAgMCBub2RlY29sb3IKKzE0IC9jb3VyaWVyIHNldF9mb250Cis2NDguNSAxNC4zIG1vdmV0byAxNyAoUjIpIGFsaWduZWR0ZXh0CitncmVzdG9yZQorJSA3LT43UjIKK2dzYXZlCisxIHNldGxpbmV3aWR0aAorc29saWQKKzAgMCAwIGVkZ2Vjb2xvcgorbmV3cGF0aCA2NTcgNzMuOTMgbW92ZXRvCis2NTcgNjUuMTEgNjU3IDU1LjI1IDY1NyA0Ni4zNSBjdXJ2ZXRvCitzdHJva2UKKzAgMCAwIGVkZ2Vjb2xvcgorbmV3cGF0aCA2NjAuNSA0Ni4wOSBtb3ZldG8KKzY1NyAzNi4wOSBsaW5ldG8KKzY1My41IDQ2LjA5IGxpbmV0bworY2xvc2VwYXRoIGZpbGwKKzEgc2V0bGluZXdpZHRoCitzb2xpZAorMCAwIDAgZWRnZWNvbG9yCituZXdwYXRoIDY2MC41IDQ2LjA5IG1vdmV0bworNjU3IDM2LjA5IGxpbmV0bworNjUzLjUgNDYuMDkgbGluZXRvCitjbG9zZXBhdGggc3Ryb2tlCitncmVzdG9yZQorZW5kcGFnZQorc2hvd3BhZ2UKK2dyZXN0b3JlCislJVBhZ2VUcmFpbGVyCislJUVuZFBhZ2U6IDEKKyUlVHJhaWxlcgorZW5kCityZXN0b3JlCislJUVPRgpkaWZmIC0tZ2l0IGEvZG9jL2ZpZ3MvZXhhbXBsZS5wZGYgYi9kb2MvZmlncy9leGFtcGxlLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWQyNDNmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2ZpZ3MvZXhhbXBsZS5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ZpZ3MvZXhhbXBsZS5wbmcgYi9kb2MvZmlncy9leGFtcGxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWEzZWIyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2ZpZ3MvZXhhbXBsZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ZpZ3MvZXhhbXBsZS55IGIvZG9jL2ZpZ3MvZXhhbXBsZS55Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwODQwODEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZmlncy9leGFtcGxlLnkKQEAgLTAsMCArMSw0IEBACislJQorZXhwOiBhICI7IiB8IGIgIi4iOworYTogIjAiOworYjogIjAiOwpkaWZmIC0tZ2l0IGEvZG9jL2dwbC0zLjAudGV4aSBiL2RvYy9ncGwtMy4wLnRleGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUyZTIxMgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9ncGwtMy4wLnRleGkKQEAgLTAsMCArMSw3MTcgQEAKK0BjIFRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK0BjZW50ZXIgVmVyc2lvbiAzLCAyOSBKdW5lIDIwMDcKKworQGMgVGhpcyBmaWxlIGlzIGludGVuZGVkIHRvIGJlIGluY2x1ZGVkIHdpdGhpbiBhbm90aGVyIGRvY3VtZW50LAorQGMgaGVuY2Ugbm8gc2VjdGlvbmluZyBjb21tYW5kIG9yIEBub2RlLgorCitAZGlzcGxheQorQ29weXJpZ2h0IEBjb3B5cmlnaHR7fSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiBAdXJse2h0dHA6Ly9mc2Yub3JnL30KKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMKK2xpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KK0BlbmQgZGlzcGxheQorCitAaGVhZGluZyBQcmVhbWJsZQorCitUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYSBmcmVlLCBjb3B5bGVmdCBsaWNlbnNlIGZvcgorc29mdHdhcmUgYW5kIG90aGVyIGtpbmRzIG9mIHdvcmtzLgorCitUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYW5kIG90aGVyIHByYWN0aWNhbCB3b3JrcyBhcmUgZGVzaWduZWQKK3RvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSB0aGUgd29ya3MuICBCeSBjb250cmFzdCwKK3RoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tCit0byBzaGFyZSBhbmQgY2hhbmdlIGFsbCB2ZXJzaW9ucyBvZiBhIHByb2dyYW0tLS10byBtYWtlIHN1cmUgaXQgcmVtYWlucworZnJlZSBzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFdlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAordXNlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9zdCBvZiBvdXIgc29mdHdhcmU7IGl0CithcHBsaWVzIGFsc28gdG8gYW55IG90aGVyIHdvcmsgcmVsZWFzZWQgdGhpcyB3YXkgYnkgaXRzIGF1dGhvcnMuICBZb3UKK2NhbiBhcHBseSBpdCB0byB5b3VyIHByb2dyYW1zLCB0b28uCisKK1doZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoZW0gaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91Cit3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldworZnJlZSBwcm9ncmFtcywgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKK1RvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gcHJldmVudCBvdGhlcnMgZnJvbSBkZW55aW5nIHlvdQordGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuICBUaGVyZWZvcmUsIHlvdQoraGF2ZSBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQorc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQ6IHJlc3BvbnNpYmlsaXRpZXMgdG8gcmVzcGVjdCB0aGUgZnJlZWRvbQorb2Ygb3RoZXJzLgorCitGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBwYXNzIG9uIHRvIHRoZSByZWNpcGllbnRzIHRoZSBzYW1lCitmcmVlZG9tcyB0aGF0IHlvdSByZWNlaXZlZC4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywKK3JlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlCit0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCitEZXZlbG9wZXJzIHRoYXQgdXNlIHRoZSBHTlUgR1BMIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6CisoMSkgYXNzZXJ0IGNvcHlyaWdodCBvbiB0aGUgc29mdHdhcmUsIGFuZCAoMikgb2ZmZXIgeW91IHRoaXMgTGljZW5zZQorZ2l2aW5nIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdC4KKworRm9yIHRoZSBkZXZlbG9wZXJzJyBhbmQgYXV0aG9ycycgcHJvdGVjdGlvbiwgdGhlIEdQTCBjbGVhcmx5IGV4cGxhaW5zCit0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUgc29mdHdhcmUuICBGb3IgYm90aCB1c2VycycgYW5kCithdXRob3JzJyBzYWtlLCB0aGUgR1BMIHJlcXVpcmVzIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgYmUgbWFya2VkIGFzCitjaGFuZ2VkLCBzbyB0aGF0IHRoZWlyIHByb2JsZW1zIHdpbGwgbm90IGJlIGF0dHJpYnV0ZWQgZXJyb25lb3VzbHkgdG8KK2F1dGhvcnMgb2YgcHJldmlvdXMgdmVyc2lvbnMuCisKK1NvbWUgZGV2aWNlcyBhcmUgZGVzaWduZWQgdG8gZGVueSB1c2VycyBhY2Nlc3MgdG8gaW5zdGFsbCBvciBydW4KK21vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBzb2Z0d2FyZSBpbnNpZGUgdGhlbSwgYWx0aG91Z2ggdGhlCittYW51ZmFjdHVyZXIgY2FuIGRvIHNvLiAgVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZQorYWltIG9mIHByb3RlY3RpbmcgdXNlcnMnIGZyZWVkb20gdG8gY2hhbmdlIHRoZSBzb2Z0d2FyZS4gIFRoZQorc3lzdGVtYXRpYyBwYXR0ZXJuIG9mIHN1Y2ggYWJ1c2Ugb2NjdXJzIGluIHRoZSBhcmVhIG9mIHByb2R1Y3RzIGZvcgoraW5kaXZpZHVhbHMgdG8gdXNlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUuCitUaGVyZWZvcmUsIHdlIGhhdmUgZGVzaWduZWQgdGhpcyB2ZXJzaW9uIG9mIHRoZSBHUEwgdG8gcHJvaGliaXQgdGhlCitwcmFjdGljZSBmb3IgdGhvc2UgcHJvZHVjdHMuICBJZiBzdWNoIHByb2JsZW1zIGFyaXNlIHN1YnN0YW50aWFsbHkgaW4KK290aGVyIGRvbWFpbnMsIHdlIHN0YW5kIHJlYWR5IHRvIGV4dGVuZCB0aGlzIHByb3Zpc2lvbiB0byB0aG9zZQorZG9tYWlucyBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIEdQTCwgYXMgbmVlZGVkIHRvIHByb3RlY3QgdGhlCitmcmVlZG9tIG9mIHVzZXJzLgorCitGaW5hbGx5LCBldmVyeSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZSBwYXRlbnRzLgorU3RhdGVzIHNob3VsZCBub3QgYWxsb3cgcGF0ZW50cyB0byByZXN0cmljdCBkZXZlbG9wbWVudCBhbmQgdXNlIG9mCitzb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaAordG8gYXZvaWQgdGhlIHNwZWNpYWwgZGFuZ2VyIHRoYXQgcGF0ZW50cyBhcHBsaWVkIHRvIGEgZnJlZSBwcm9ncmFtCitjb3VsZCBtYWtlIGl0IGVmZmVjdGl2ZWx5IHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB0aGUgR1BMCithc3N1cmVzIHRoYXQgcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCisKK1RoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCitAaGVhZGluZyBURVJNUyBBTkQgQ09ORElUSU9OUworCitAZW51bWVyYXRlIDAKK0BpdGVtIERlZmluaXRpb25zLgorCitgYFRoaXMgTGljZW5zZScnIHJlZmVycyB0byB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCitgYENvcHlyaWdodCcnIGFsc28gbWVhbnMgY29weXJpZ2h0LWxpa2UgbGF3cyB0aGF0IGFwcGx5IHRvIG90aGVyIGtpbmRzCitvZiB3b3Jrcywgc3VjaCBhcyBzZW1pY29uZHVjdG9yIG1hc2tzLgorCitgYFRoZSBQcm9ncmFtJycgcmVmZXJzIHRvIGFueSBjb3B5cmlnaHRhYmxlIHdvcmsgbGljZW5zZWQgdW5kZXIgdGhpcworTGljZW5zZS4gIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzIGBgeW91JycuICBgYExpY2Vuc2VlcycnIGFuZAorYGByZWNpcGllbnRzJycgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuCisKK1RvIGBgbW9kaWZ5JycgYSB3b3JrIG1lYW5zIHRvIGNvcHkgZnJvbSBvciBhZGFwdCBhbGwgb3IgcGFydCBvZiB0aGUgd29yaworaW4gYSBmYXNoaW9uIHJlcXVpcmluZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mCithbiBleGFjdCBjb3B5LiAgVGhlIHJlc3VsdGluZyB3b3JrIGlzIGNhbGxlZCBhIGBgbW9kaWZpZWQgdmVyc2lvbicnIG9mCit0aGUgZWFybGllciB3b3JrIG9yIGEgd29yayBgYGJhc2VkIG9uJycgdGhlIGVhcmxpZXIgd29yay4KKworQSBgYGNvdmVyZWQgd29yaycnIG1lYW5zIGVpdGhlciB0aGUgdW5tb2RpZmllZCBQcm9ncmFtIG9yIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0uCisKK1RvIGBgcHJvcGFnYXRlJycgYSB3b3JrIG1lYW5zIHRvIGRvIGFueXRoaW5nIHdpdGggaXQgdGhhdCwgd2l0aG91dAorcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvcgoraW5mcmluZ2VtZW50IHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdywgZXhjZXB0IGV4ZWN1dGluZyBpdCBvbiBhCitjb21wdXRlciBvciBtb2RpZnlpbmcgYSBwcml2YXRlIGNvcHkuICBQcm9wYWdhdGlvbiBpbmNsdWRlcyBjb3B5aW5nLAorZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUKK3B1YmxpYywgYW5kIGluIHNvbWUgY291bnRyaWVzIG90aGVyIGFjdGl2aXRpZXMgYXMgd2VsbC4KKworVG8gYGBjb252ZXknJyBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVzIG90aGVyCitwYXJ0aWVzIHRvIG1ha2Ugb3IgcmVjZWl2ZSBjb3BpZXMuICBNZXJlIGludGVyYWN0aW9uIHdpdGggYSB1c2VyCit0aHJvdWdoIGEgY29tcHV0ZXIgbmV0d29yaywgd2l0aCBubyB0cmFuc2ZlciBvZiBhIGNvcHksIGlzIG5vdAorY29udmV5aW5nLgorCitBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyBgYEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMnJyB0bwordGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZQorZmVhdHVyZSB0aGF0ICgxKSBkaXNwbGF5cyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlLCBhbmQgKDIpCit0ZWxscyB0aGUgdXNlciB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgd29yayAoZXhjZXB0IHRvIHRoZQorZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5IHRoZQord29yayB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgSWYKK3RoZSBpbnRlcmZhY2UgcHJlc2VudHMgYSBsaXN0IG9mIHVzZXIgY29tbWFuZHMgb3Igb3B0aW9ucywgc3VjaCBhcyBhCittZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgorCitAaXRlbSBTb3VyY2UgQ29kZS4KKworVGhlIGBgc291cmNlIGNvZGUnJyBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgYGBPYmplY3QgY29kZScnIG1lYW5zIGFueSBub24tc291cmNlIGZvcm0KK29mIGEgd29yay4KKworQSBgYFN0YW5kYXJkIEludGVyZmFjZScnIG1lYW5zIGFuIGludGVyZmFjZSB0aGF0IGVpdGhlciBpcyBhbiBvZmZpY2lhbAorc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgoraW50ZXJmYWNlcyBzcGVjaWZpZWQgZm9yIGEgcGFydGljdWxhciBwcm9ncmFtbWluZyBsYW5ndWFnZSwgb25lIHRoYXQKK2lzIHdpZGVseSB1c2VkIGFtb25nIGRldmVsb3BlcnMgd29ya2luZyBpbiB0aGF0IGxhbmd1YWdlLgorCitUaGUgYGBTeXN0ZW0gTGlicmFyaWVzJycgb2YgYW4gZXhlY3V0YWJsZSB3b3JrIGluY2x1ZGUgYW55dGhpbmcsIG90aGVyCit0aGFuIHRoZSB3b3JrIGFzIGEgd2hvbGUsIHRoYXQgKGEpIGlzIGluY2x1ZGVkIGluIHRoZSBub3JtYWwgZm9ybSBvZgorcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgorQ29tcG9uZW50LCBhbmQgKGIpIHNlcnZlcyBvbmx5IHRvIGVuYWJsZSB1c2Ugb2YgdGhlIHdvcmsgd2l0aCB0aGF0CitNYWpvciBDb21wb25lbnQsIG9yIHRvIGltcGxlbWVudCBhIFN0YW5kYXJkIEludGVyZmFjZSBmb3Igd2hpY2ggYW4KK2ltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCitgYE1ham9yIENvbXBvbmVudCcnLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudAorKGtlcm5lbCwgd2luZG93IHN5c3RlbSwgYW5kIHNvIG9uKSBvZiB0aGUgc3BlY2lmaWMgb3BlcmF0aW5nIHN5c3RlbQorKGlmIGFueSkgb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgd29yayBydW5zLCBvciBhIGNvbXBpbGVyIHVzZWQgdG8KK3Byb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0LgorCitUaGUgYGBDb3JyZXNwb25kaW5nIFNvdXJjZScnIGZvciBhIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSBtZWFucyBhbGwKK3RoZSBzb3VyY2UgY29kZSBuZWVkZWQgdG8gZ2VuZXJhdGUsIGluc3RhbGwsIGFuZCAoZm9yIGFuIGV4ZWN1dGFibGUKK3dvcmspIHJ1biB0aGUgb2JqZWN0IGNvZGUgYW5kIHRvIG1vZGlmeSB0aGUgd29yaywgaW5jbHVkaW5nIHNjcmlwdHMgdG8KK2NvbnRyb2wgdGhvc2UgYWN0aXZpdGllcy4gIEhvd2V2ZXIsIGl0IGRvZXMgbm90IGluY2x1ZGUgdGhlIHdvcmsncworU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZQorcHJvZ3JhbXMgd2hpY2ggYXJlIHVzZWQgdW5tb2RpZmllZCBpbiBwZXJmb3JtaW5nIHRob3NlIGFjdGl2aXRpZXMgYnV0Cit3aGljaCBhcmUgbm90IHBhcnQgb2YgdGhlIHdvcmsuICBGb3IgZXhhbXBsZSwgQ29ycmVzcG9uZGluZyBTb3VyY2UKK2luY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yCit0aGUgd29yaywgYW5kIHRoZSBzb3VyY2UgY29kZSBmb3Igc2hhcmVkIGxpYnJhcmllcyBhbmQgZHluYW1pY2FsbHkKK2xpbmtlZCBzdWJwcm9ncmFtcyB0aGF0IHRoZSB3b3JrIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byByZXF1aXJlLAorc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2UKK3N1YnByb2dyYW1zIGFuZCBvdGhlciBwYXJ0cyBvZiB0aGUgd29yay4KKworVGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCB1c2VycyBjYW4KK3JlZ2VuZXJhdGUgYXV0b21hdGljYWxseSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS4KKworVGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhIHdvcmsgaW4gc291cmNlIGNvZGUgZm9ybSBpcyB0aGF0IHNhbWUKK3dvcmsuCisKK0BpdGVtIEJhc2ljIFBlcm1pc3Npb25zLgorCitBbGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0aGUgdGVybSBvZgorY29weXJpZ2h0IG9uIHRoZSBQcm9ncmFtLCBhbmQgYXJlIGlycmV2b2NhYmxlIHByb3ZpZGVkIHRoZSBzdGF0ZWQKK2NvbmRpdGlvbnMgYXJlIG1ldC4gIFRoaXMgTGljZW5zZSBleHBsaWNpdGx5IGFmZmlybXMgeW91ciB1bmxpbWl0ZWQKK3Blcm1pc3Npb24gdG8gcnVuIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uICBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhCitjb3ZlcmVkIHdvcmsgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2Ugb25seSBpZiB0aGUgb3V0cHV0LCBnaXZlbiBpdHMKK2NvbnRlbnQsIGNvbnN0aXR1dGVzIGEgY292ZXJlZCB3b3JrLiAgVGhpcyBMaWNlbnNlIGFja25vd2xlZGdlcyB5b3VyCityaWdodHMgb2YgZmFpciB1c2Ugb3Igb3RoZXIgZXF1aXZhbGVudCwgYXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IGxhdy4KKworWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdCBjb252ZXksCit3aXRob3V0IGNvbmRpdGlvbnMgc28gbG9uZyBhcyB5b3VyIGxpY2Vuc2Ugb3RoZXJ3aXNlIHJlbWFpbnMgaW4gZm9yY2UuCitZb3UgbWF5IGNvbnZleSBjb3ZlcmVkIHdvcmtzIHRvIG90aGVycyBmb3IgdGhlIHNvbGUgcHVycG9zZSBvZiBoYXZpbmcKK3RoZW0gbWFrZSBtb2RpZmljYXRpb25zIGV4Y2x1c2l2ZWx5IGZvciB5b3UsIG9yIHByb3ZpZGUgeW91IHdpdGgKK2ZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoIHRoZQordGVybXMgb2YgdGhpcyBMaWNlbnNlIGluIGNvbnZleWluZyBhbGwgbWF0ZXJpYWwgZm9yIHdoaWNoIHlvdSBkbyBub3QKK2NvbnRyb2wgY29weXJpZ2h0LiAgVGhvc2UgdGh1cyBtYWtpbmcgb3IgcnVubmluZyB0aGUgY292ZXJlZCB3b3JrcyBmb3IKK3lvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIgYmVoYWxmLCB1bmRlciB5b3VyIGRpcmVjdGlvbiBhbmQKK2NvbnRyb2wsIG9uIHRlcm1zIHRoYXQgcHJvaGliaXQgdGhlbSBmcm9tIG1ha2luZyBhbnkgY29waWVzIG9mIHlvdXIKK2NvcHlyaWdodGVkIG1hdGVyaWFsIG91dHNpZGUgdGhlaXIgcmVsYXRpb25zaGlwIHdpdGggeW91LgorCitDb252ZXlpbmcgdW5kZXIgYW55IG90aGVyIGNpcmN1bXN0YW5jZXMgaXMgcGVybWl0dGVkIHNvbGVseSB1bmRlciB0aGUKK2NvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCittYWtlcyBpdCB1bm5lY2Vzc2FyeS4KKworQGl0ZW0gUHJvdGVjdGluZyBVc2VycycgTGVnYWwgUmlnaHRzIEZyb20gQW50aS1DaXJjdW12ZW50aW9uIExhdy4KKworTm8gY292ZXJlZCB3b3JrIHNoYWxsIGJlIGRlZW1lZCBwYXJ0IG9mIGFuIGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsCittZWFzdXJlIHVuZGVyIGFueSBhcHBsaWNhYmxlIGxhdyBmdWxmaWxsaW5nIG9ibGlnYXRpb25zIHVuZGVyIGFydGljbGUKKzExIG9mIHRoZSBXSVBPIGNvcHlyaWdodCB0cmVhdHkgYWRvcHRlZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvcgorc2ltaWxhciBsYXdzIHByb2hpYml0aW5nIG9yIHJlc3RyaWN0aW5nIGNpcmN1bXZlbnRpb24gb2Ygc3VjaAorbWVhc3VyZXMuCisKK1doZW4geW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgeW91IHdhaXZlIGFueSBsZWdhbCBwb3dlciB0byBmb3JiaWQKK2NpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2gKK2NpcmN1bXZlbnRpb24gaXMgZWZmZWN0ZWQgYnkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdpdGgKK3Jlc3BlY3QgdG8gdGhlIGNvdmVyZWQgd29yaywgYW5kIHlvdSBkaXNjbGFpbSBhbnkgaW50ZW50aW9uIHRvIGxpbWl0CitvcGVyYXRpb24gb3IgbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0Cit0aGUgd29yaydzIHVzZXJzLCB5b3VyIG9yIHRoaXJkIHBhcnRpZXMnIGxlZ2FsIHJpZ2h0cyB0byBmb3JiaWQKK2NpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcy4KKworQGl0ZW0gQ29udmV5aW5nIFZlcmJhdGltIENvcGllcy4KKworWW91IG1heSBjb252ZXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3Mgc291cmNlIGNvZGUgYXMgeW91CityZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAorYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlOwora2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgc3RhdGluZyB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYW55Citub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7CitrZWVwIGludGFjdCBhbGwgbm90aWNlcyBvZiB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFsbAorcmVjaXBpZW50cyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGFueSBwcmljZSBvciBubyBwcmljZSBmb3IgZWFjaCBjb3B5IHRoYXQgeW91IGNvbnZleSwKK2FuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCisKK0BpdGVtIENvbnZleWluZyBNb2RpZmllZCBTb3VyY2UgVmVyc2lvbnMuCisKK1lvdSBtYXkgY29udmV5IGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgb3IgdGhlIG1vZGlmaWNhdGlvbnMgdG8KK3Byb2R1Y2UgaXQgZnJvbSB0aGUgUHJvZ3JhbSwgaW4gdGhlIGZvcm0gb2Ygc291cmNlIGNvZGUgdW5kZXIgdGhlCit0ZXJtcyBvZiBzZWN0aW9uIDQsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UKK2NvbmRpdGlvbnM6CisKK0BlbnVtZXJhdGUgYQorQGl0ZW0KK1RoZSB3b3JrIG11c3QgY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBtb2RpZmllZCBpdCwKK2FuZCBnaXZpbmcgYSByZWxldmFudCBkYXRlLgorCitAaXRlbQorVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMgcmVsZWFzZWQKK3VuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbiA3LiAgVGhpcworcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0byBgYGtlZXAgaW50YWN0IGFsbAorbm90aWNlcycnLgorCitAaXRlbQorWW91IG11c3QgbGljZW5zZSB0aGUgZW50aXJlIHdvcmssIGFzIGEgd2hvbGUsIHVuZGVyIHRoaXMgTGljZW5zZSB0bworYW55b25lIHdobyBjb21lcyBpbnRvIHBvc3Nlc3Npb24gb2YgYSBjb3B5LiAgVGhpcyBMaWNlbnNlIHdpbGwKK3RoZXJlZm9yZSBhcHBseSwgYWxvbmcgd2l0aCBhbnkgYXBwbGljYWJsZSBzZWN0aW9uIDcgYWRkaXRpb25hbCB0ZXJtcywKK3RvIHRoZSB3aG9sZSBvZiB0aGUgd29yaywgYW5kIGFsbCBpdHMgcGFydHMsIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkKK2FyZSBwYWNrYWdlZC4gIFRoaXMgTGljZW5zZSBnaXZlcyBubyBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4KK2FueSBvdGhlciB3YXksIGJ1dCBpdCBkb2VzIG5vdCBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZQorc2VwYXJhdGVseSByZWNlaXZlZCBpdC4KKworQGl0ZW0KK0lmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CitBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUKK2ludGVyZmFjZXMgdGhhdCBkbyBub3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzLCB5b3VyIHdvcmsKK25lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KK0BlbmQgZW51bWVyYXRlCisKK0EgY29tcGlsYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsgd2l0aCBvdGhlciBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQKK3dvcmtzLCB3aGljaCBhcmUgbm90IGJ5IHRoZWlyIG5hdHVyZSBleHRlbnNpb25zIG9mIHRoZSBjb3ZlcmVkIHdvcmssCithbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLAoraW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0sIGlzIGNhbGxlZCBhbgorYGBhZ2dyZWdhdGUnJyBpZiB0aGUgY29tcGlsYXRpb24gYW5kIGl0cyByZXN1bHRpbmcgY29weXJpZ2h0IGFyZSBub3QKK3VzZWQgdG8gbGltaXQgdGhlIGFjY2VzcyBvciBsZWdhbCByaWdodHMgb2YgdGhlIGNvbXBpbGF0aW9uJ3MgdXNlcnMKK2JleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gIEluY2x1c2lvbiBvZiBhIGNvdmVyZWQgd29yaworaW4gYW4gYWdncmVnYXRlIGRvZXMgbm90IGNhdXNlIHRoaXMgTGljZW5zZSB0byBhcHBseSB0byB0aGUgb3RoZXIKK3BhcnRzIG9mIHRoZSBhZ2dyZWdhdGUuCisKK0BpdGVtICBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KKworWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK3NlY3Rpb25zIDQgYW5kIDUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gY29udmV5IHRoZSBtYWNoaW5lLXJlYWRhYmxlCitDb3JyZXNwb25kaW5nIFNvdXJjZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbiBvbmUgb2YgdGhlc2UKK3dheXM6CisKK0BlbnVtZXJhdGUgYQorQGl0ZW0KK0NvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKKyhpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgdGhlCitDb3JyZXNwb25kaW5nIFNvdXJjZSBmaXhlZCBvbiBhIGR1cmFibGUgcGh5c2ljYWwgbWVkaXVtIGN1c3RvbWFyaWx5Cit1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKworQGl0ZW0KK0NvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKKyhpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYSB3cml0dGVuCitvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMgbG9uZyBhcyB5b3UKK29mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdCBtb2RlbCwgdG8gZ2l2ZQorYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYSBjb3B5IG9mIHRoZQorQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUgc29mdHdhcmUgaW4gdGhlIHByb2R1Y3QgdGhhdCBpcworY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZAorZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubyBtb3JlIHRoYW4geW91ciByZWFzb25hYmxlCitjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0aGlzIGNvbnZleWluZyBvZiBzb3VyY2UsIG9yICgyKSBhY2Nlc3MKK3RvIGNvcHkgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZyb20gYSBuZXR3b3JrIHNlcnZlciBhdCBubyBjaGFyZ2UuCisKK0BpdGVtCitDb252ZXkgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhlIG9iamVjdCBjb2RlIHdpdGggYSBjb3B5IG9mIHRoZSB3cml0dGVuCitvZmZlciB0byBwcm92aWRlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFRoaXMgYWx0ZXJuYXRpdmUgaXMKK2FsbG93ZWQgb25seSBvY2Nhc2lvbmFsbHkgYW5kIG5vbmNvbW1lcmNpYWxseSwgYW5kIG9ubHkgaWYgeW91CityZWNlaXZlZCB0aGUgb2JqZWN0IGNvZGUgd2l0aCBzdWNoIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBzdWJzZWN0aW9uCis2Yi4KKworQGl0ZW0KK0NvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlCisoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIGluIHRoZSBzYW1lIHdheSB0aHJvdWdoIHRoZSBzYW1lIHBsYWNlIGF0IG5vCitmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLiAgSWYgdGhlIHBsYWNlIHRvIGNvcHkKK3RoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbWF5IGJlCitvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KSB0aGF0IHN1cHBvcnRzCitlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluIGNsZWFyIGRpcmVjdGlvbnMKK25leHQgdG8gdGhlIG9iamVjdCBjb2RlIHNheWluZyB3aGVyZSB0byBmaW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS4KK1JlZ2FyZGxlc3Mgb2Ygd2hhdCBzZXJ2ZXIgaG9zdHMgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLCB5b3UgcmVtYWluCitvYmxpZ2F0ZWQgdG8gZW5zdXJlIHRoYXQgaXQgaXMgYXZhaWxhYmxlIGZvciBhcyBsb25nIGFzIG5lZWRlZCB0bworc2F0aXNmeSB0aGVzZSByZXF1aXJlbWVudHMuCisKK0BpdGVtCitDb252ZXkgdGhlIG9iamVjdCBjb2RlIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24sIHByb3ZpZGVkIHlvdQoraW5mb3JtIG90aGVyIHBlZXJzIHdoZXJlIHRoZSBvYmplY3QgY29kZSBhbmQgQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YKK3RoZSB3b3JrIGFyZSBiZWluZyBvZmZlcmVkIHRvIHRoZSBnZW5lcmFsIHB1YmxpYyBhdCBubyBjaGFyZ2UgdW5kZXIKK3N1YnNlY3Rpb24gNmQuCisKK0BlbmQgZW51bWVyYXRlCisKK0Egc2VwYXJhYmxlIHBvcnRpb24gb2YgdGhlIG9iamVjdCBjb2RlLCB3aG9zZSBzb3VyY2UgY29kZSBpcyBleGNsdWRlZAorZnJvbSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgYXMgYSBTeXN0ZW0gTGlicmFyeSwgbmVlZCBub3QgYmUKK2luY2x1ZGVkIGluIGNvbnZleWluZyB0aGUgb2JqZWN0IGNvZGUgd29yay4KKworQSBgYFVzZXIgUHJvZHVjdCcnIGlzIGVpdGhlciAoMSkgYSBgYGNvbnN1bWVyIHByb2R1Y3QnJywgd2hpY2ggbWVhbnMgYW55Cit0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSB3aGljaCBpcyBub3JtYWxseSB1c2VkIGZvciBwZXJzb25hbCwKK2ZhbWlseSwgb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IKK2luY29ycG9yYXRpb24gaW50byBhIGR3ZWxsaW5nLiAgSW4gZGV0ZXJtaW5pbmcgd2hldGhlciBhIHByb2R1Y3QgaXMgYQorY29uc3VtZXIgcHJvZHVjdCwgZG91YnRmdWwgY2FzZXMgc2hhbGwgYmUgcmVzb2x2ZWQgaW4gZmF2b3Igb2YKK2NvdmVyYWdlLiAgRm9yIGEgcGFydGljdWxhciBwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLAorYGBub3JtYWxseSB1c2VkJycgcmVmZXJzIHRvIGEgdHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YKK3Byb2R1Y3QsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN0YXR1cyBvZiB0aGUgcGFydGljdWxhciB1c2VyIG9yIG9mIHRoZSB3YXkKK2luIHdoaWNoIHRoZSBwYXJ0aWN1bGFyIHVzZXIgYWN0dWFsbHkgdXNlcywgb3IgZXhwZWN0cyBvciBpcyBleHBlY3RlZAordG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZgord2hldGhlciB0aGUgcHJvZHVjdCBoYXMgc3Vic3RhbnRpYWwgY29tbWVyY2lhbCwgaW5kdXN0cmlhbCBvcgorbm9uLWNvbnN1bWVyIHVzZXMsIHVubGVzcyBzdWNoIHVzZXMgcmVwcmVzZW50IHRoZSBvbmx5IHNpZ25pZmljYW50Cittb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KKworYGBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24nJyBmb3IgYSBVc2VyIFByb2R1Y3QgbWVhbnMgYW55IG1ldGhvZHMsCitwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvCitpbnN0YWxsIGFuZCBleGVjdXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGEgY292ZXJlZCB3b3JrIGluIHRoYXQgVXNlcgorUHJvZHVjdCBmcm9tIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiBpdHMgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBUaGUKK2luZm9ybWF0aW9uIG11c3Qgc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mCit0aGUgbW9kaWZpZWQgb2JqZWN0IGNvZGUgaXMgaW4gbm8gY2FzZSBwcmV2ZW50ZWQgb3IgaW50ZXJmZXJlZCB3aXRoCitzb2xlbHkgYmVjYXVzZSBtb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZS4KKworSWYgeW91IGNvbnZleSBhbiBvYmplY3QgY29kZSB3b3JrIHVuZGVyIHRoaXMgc2VjdGlvbiBpbiwgb3Igd2l0aCwgb3IKK3NwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVzZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzCitwYXJ0IG9mIGEgdHJhbnNhY3Rpb24gaW4gd2hpY2ggdGhlIHJpZ2h0IG9mIHBvc3Nlc3Npb24gYW5kIHVzZSBvZiB0aGUKK1VzZXIgUHJvZHVjdCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgcmVjaXBpZW50IGluIHBlcnBldHVpdHkgb3IgZm9yIGEKK2ZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFuc2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlCitDb3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXllZCB1bmRlciB0aGlzIHNlY3Rpb24gbXVzdCBiZSBhY2NvbXBhbmllZAorYnkgdGhlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbi4gIEJ1dCB0aGlzIHJlcXVpcmVtZW50IGRvZXMgbm90IGFwcGx5CitpZiBuZWl0aGVyIHlvdSBub3IgYW55IHRoaXJkIHBhcnR5IHJldGFpbnMgdGhlIGFiaWxpdHkgdG8gaW5zdGFsbAorbW9kaWZpZWQgb2JqZWN0IGNvZGUgb24gdGhlIFVzZXIgUHJvZHVjdCAoZm9yIGV4YW1wbGUsIHRoZSB3b3JrIGhhcworYmVlbiBpbnN0YWxsZWQgaW4gUk9NKS4KKworVGhlIHJlcXVpcmVtZW50IHRvIHByb3ZpZGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIGRvZXMgbm90IGluY2x1ZGUgYQorcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvcgordXBkYXRlcyBmb3IgYSB3b3JrIHRoYXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkIGJ5IHRoZQorcmVjaXBpZW50LCBvciBmb3IgdGhlIFVzZXIgUHJvZHVjdCBpbiB3aGljaCBpdCBoYXMgYmVlbiBtb2RpZmllZCBvcgoraW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEgbmV0d29yayBtYXkgYmUgZGVuaWVkIHdoZW4gdGhlIG1vZGlmaWNhdGlvbgoraXRzZWxmIG1hdGVyaWFsbHkgYW5kIGFkdmVyc2VseSBhZmZlY3RzIHRoZSBvcGVyYXRpb24gb2YgdGhlIG5ldHdvcmsKK29yIHZpb2xhdGVzIHRoZSBydWxlcyBhbmQgcHJvdG9jb2xzIGZvciBjb21tdW5pY2F0aW9uIGFjcm9zcyB0aGUKK25ldHdvcmsuCisKK0NvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkLCBhbmQgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIHByb3ZpZGVkLAoraW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uIG11c3QgYmUgaW4gYSBmb3JtYXQgdGhhdCBpcyBwdWJsaWNseQorZG9jdW1lbnRlZCAoYW5kIHdpdGggYW4gaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgaW4KK3NvdXJjZSBjb2RlIGZvcm0pLCBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZvcgordW5wYWNraW5nLCByZWFkaW5nIG9yIGNvcHlpbmcuCisKK0BpdGVtIEFkZGl0aW9uYWwgVGVybXMuCisKK2BgQWRkaXRpb25hbCBwZXJtaXNzaW9ucycnIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2UgYnkgbWFraW5nIGV4Y2VwdGlvbnMgZnJvbSBvbmUgb3IgbW9yZSBvZiBpdHMgY29uZGl0aW9ucy4KK0FkZGl0aW9uYWwgcGVybWlzc2lvbnMgdGhhdCBhcmUgYXBwbGljYWJsZSB0byB0aGUgZW50aXJlIFByb2dyYW0gc2hhbGwKK2JlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQKK3RoYXQgdGhleSBhcmUgdmFsaWQgdW5kZXIgYXBwbGljYWJsZSBsYXcuICBJZiBhZGRpdGlvbmFsIHBlcm1pc3Npb25zCithcHBseSBvbmx5IHRvIHBhcnQgb2YgdGhlIFByb2dyYW0sIHRoYXQgcGFydCBtYXkgYmUgdXNlZCBzZXBhcmF0ZWx5Cit1bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5Cit0aGlzIExpY2Vuc2Ugd2l0aG91dCByZWdhcmQgdG8gdGhlIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMuCisKK1doZW4geW91IGNvbnZleSBhIGNvcHkgb2YgYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgYXQgeW91ciBvcHRpb24KK3JlbW92ZSBhbnkgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBmcm9tIHRoYXQgY29weSwgb3IgZnJvbSBhbnkgcGFydCBvZgoraXQuICAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgorcmVtb3ZhbCBpbiBjZXJ0YWluIGNhc2VzIHdoZW4geW91IG1vZGlmeSB0aGUgd29yay4pICBZb3UgbWF5IHBsYWNlCithZGRpdGlvbmFsIHBlcm1pc3Npb25zIG9uIG1hdGVyaWFsLCBhZGRlZCBieSB5b3UgdG8gYSBjb3ZlcmVkIHdvcmssCitmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCisKK05vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdQorYWRkIHRvIGEgY292ZXJlZCB3b3JrLCB5b3UgbWF5IChpZiBhdXRob3JpemVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycworb2YgdGhhdCBtYXRlcmlhbCkgc3VwcGxlbWVudCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggdGVybXM6CisKK0BlbnVtZXJhdGUgYQorQGl0ZW0KK0Rpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZSB0ZXJtcworb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3IKKworQGl0ZW0KK1JlcXVpcmluZyBwcmVzZXJ2YXRpb24gb2Ygc3BlY2lmaWVkIHJlYXNvbmFibGUgbGVnYWwgbm90aWNlcyBvciBhdXRob3IKK2F0dHJpYnV0aW9ucyBpbiB0aGF0IG1hdGVyaWFsIG9yIGluIHRoZSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzCitkaXNwbGF5ZWQgYnkgd29ya3MgY29udGFpbmluZyBpdDsgb3IKKworQGl0ZW0KK1Byb2hpYml0aW5nIG1pc3JlcHJlc2VudGF0aW9uIG9mIHRoZSBvcmlnaW4gb2YgdGhhdCBtYXRlcmlhbCwgb3IKK3JlcXVpcmluZyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIG9mIHN1Y2ggbWF0ZXJpYWwgYmUgbWFya2VkIGluCityZWFzb25hYmxlIHdheXMgYXMgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIHZlcnNpb247IG9yCisKK0BpdGVtCitMaW1pdGluZyB0aGUgdXNlIGZvciBwdWJsaWNpdHkgcHVycG9zZXMgb2YgbmFtZXMgb2YgbGljZW5zb3JzIG9yCithdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKKworQGl0ZW0KK0RlY2xpbmluZyB0byBncmFudCByaWdodHMgdW5kZXIgdHJhZGVtYXJrIGxhdyBmb3IgdXNlIG9mIHNvbWUgdHJhZGUKK25hbWVzLCB0cmFkZW1hcmtzLCBvciBzZXJ2aWNlIG1hcmtzOyBvcgorCitAaXRlbQorUmVxdWlyaW5nIGluZGVtbmlmaWNhdGlvbiBvZiBsaWNlbnNvcnMgYW5kIGF1dGhvcnMgb2YgdGhhdCBtYXRlcmlhbCBieQorYW55b25lIHdobyBjb252ZXlzIHRoZSBtYXRlcmlhbCAob3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgaXQpIHdpdGgKK2NvbnRyYWN0dWFsIGFzc3VtcHRpb25zIG9mIGxpYWJpbGl0eSB0byB0aGUgcmVjaXBpZW50LCBmb3IgYW55CitsaWFiaWxpdHkgdGhhdCB0aGVzZSBjb250cmFjdHVhbCBhc3N1bXB0aW9ucyBkaXJlY3RseSBpbXBvc2Ugb24gdGhvc2UKK2xpY2Vuc29ycyBhbmQgYXV0aG9ycy4KK0BlbmQgZW51bWVyYXRlCisKK0FsbCBvdGhlciBub24tcGVybWlzc2l2ZSBhZGRpdGlvbmFsIHRlcm1zIGFyZSBjb25zaWRlcmVkIGBgZnVydGhlcgorcmVzdHJpY3Rpb25zJycgd2l0aGluIHRoZSBtZWFuaW5nIG9mIHNlY3Rpb24gMTAuICBJZiB0aGUgUHJvZ3JhbSBhcyB5b3UKK3JlY2VpdmVkIGl0LCBvciBhbnkgcGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzCitnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCBhIHRlcm0gdGhhdCBpcyBhIGZ1cnRoZXIKK3Jlc3RyaWN0aW9uLCB5b3UgbWF5IHJlbW92ZSB0aGF0IHRlcm0uICBJZiBhIGxpY2Vuc2UgZG9jdW1lbnQgY29udGFpbnMKK2EgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcworTGljZW5zZSwgeW91IG1heSBhZGQgdG8gYSBjb3ZlcmVkIHdvcmsgbWF0ZXJpYWwgZ292ZXJuZWQgYnkgdGhlIHRlcm1zCitvZiB0aGF0IGxpY2Vuc2UgZG9jdW1lbnQsIHByb3ZpZGVkIHRoYXQgdGhlIGZ1cnRoZXIgcmVzdHJpY3Rpb24gZG9lcworbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuCisKK0lmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKK211c3QgcGxhY2UsIGluIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMsIGEgc3RhdGVtZW50IG9mIHRoZQorYWRkaXRpb25hbCB0ZXJtcyB0aGF0IGFwcGx5IHRvIHRob3NlIGZpbGVzLCBvciBhIG5vdGljZSBpbmRpY2F0aW5nCit3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgorCitBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZQorZm9ybSBvZiBhIHNlcGFyYXRlbHkgd3JpdHRlbiBsaWNlbnNlLCBvciBzdGF0ZWQgYXMgZXhjZXB0aW9uczsgdGhlCithYm92ZSByZXF1aXJlbWVudHMgYXBwbHkgZWl0aGVyIHdheS4KKworQGl0ZW0gVGVybWluYXRpb24uCisKK1lvdSBtYXkgbm90IHByb3BhZ2F0ZSBvciBtb2RpZnkgYSBjb3ZlcmVkIHdvcmsgZXhjZXB0IGFzIGV4cHJlc3NseQorcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvcgorbW9kaWZ5IGl0IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyCit0aGlzIExpY2Vuc2UgKGluY2x1ZGluZyBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhlIHRoaXJkCitwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCisKK0hvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyIGxpY2Vuc2UKK2Zyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMgcmVpbnN0YXRlZCAoYSkgcHJvdmlzaW9uYWxseSwKK3VubGVzcyBhbmQgdW50aWwgdGhlIGNvcHlyaWdodCBob2xkZXIgZXhwbGljaXRseSBhbmQgZmluYWxseQordGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyCitmYWlscyB0byBub3RpZnkgeW91IG9mIHRoZSB2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zIHByaW9yIHRvCis2MCBkYXlzIGFmdGVyIHRoZSBjZXNzYXRpb24uCisKK01vcmVvdmVyLCB5b3VyIGxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcworcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlCit2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zLCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBoYXZlCityZWNlaXZlZCBub3RpY2Ugb2YgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSAoZm9yIGFueSB3b3JrKSBmcm9tIHRoYXQKK2NvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKK3lvdXIgcmVjZWlwdCBvZiB0aGUgbm90aWNlLgorCitUZXJtaW5hdGlvbiBvZiB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIHNlY3Rpb24gZG9lcyBub3QgdGVybWluYXRlIHRoZQorbGljZW5zZXMgb2YgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMgb3IgcmlnaHRzIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CityZWluc3RhdGVkLCB5b3UgZG8gbm90IHF1YWxpZnkgdG8gcmVjZWl2ZSBuZXcgbGljZW5zZXMgZm9yIHRoZSBzYW1lCittYXRlcmlhbCB1bmRlciBzZWN0aW9uIDEwLgorCitAaXRlbSBBY2NlcHRhbmNlIE5vdCBSZXF1aXJlZCBmb3IgSGF2aW5nIENvcGllcy4KKworWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSBpbiBvcmRlciB0byByZWNlaXZlIG9yIHJ1bgorYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiAgQW5jaWxsYXJ5IHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrCitvY2N1cnJpbmcgc29sZWx5IGFzIGEgY29uc2VxdWVuY2Ugb2YgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbgordG8gcmVjZWl2ZSBhIGNvcHkgbGlrZXdpc2UgZG9lcyBub3QgcmVxdWlyZSBhY2NlcHRhbmNlLiAgSG93ZXZlciwKK25vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvcgorbW9kaWZ5IGFueSBjb3ZlcmVkIHdvcmsuICBUaGVzZSBhY3Rpb25zIGluZnJpbmdlIGNvcHlyaWdodCBpZiB5b3UgZG8KK25vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgcHJvcGFnYXRpbmcgYQorY292ZXJlZCB3b3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby4KKworQGl0ZW0gQXV0b21hdGljIExpY2Vuc2luZyBvZiBEb3duc3RyZWFtIFJlY2lwaWVudHMuCisKK0VhY2ggdGltZSB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkKK3JlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZAorcHJvcGFnYXRlIHRoYXQgd29yaywgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuICBZb3UgYXJlIG5vdCByZXNwb25zaWJsZQorZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aCB0aGlzIExpY2Vuc2UuCisKK0FuIGBgZW50aXR5IHRyYW5zYWN0aW9uJycgaXMgYSB0cmFuc2FjdGlvbiB0cmFuc2ZlcnJpbmcgY29udHJvbCBvZiBhbgorb3JnYW5pemF0aW9uLCBvciBzdWJzdGFudGlhbGx5IGFsbCBhc3NldHMgb2Ygb25lLCBvciBzdWJkaXZpZGluZyBhbgorb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKK3dvcmsgcmVzdWx0cyBmcm9tIGFuIGVudGl0eSB0cmFuc2FjdGlvbiwgZWFjaCBwYXJ0eSB0byB0aGF0Cit0cmFuc2FjdGlvbiB3aG8gcmVjZWl2ZXMgYSBjb3B5IG9mIHRoZSB3b3JrIGFsc28gcmVjZWl2ZXMgd2hhdGV2ZXIKK2xpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZAorZ2l2ZSB1bmRlciB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLCBwbHVzIGEgcmlnaHQgdG8gcG9zc2Vzc2lvbiBvZiB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGZyb20gdGhlIHByZWRlY2Vzc29yIGluIGludGVyZXN0LCBpZgordGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgorCitZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBleGVyY2lzZSBvZiB0aGUKK3JpZ2h0cyBncmFudGVkIG9yIGFmZmlybWVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEZvciBleGFtcGxlLCB5b3UgbWF5Citub3QgaW1wb3NlIGEgbGljZW5zZSBmZWUsIHJveWFsdHksIG9yIG90aGVyIGNoYXJnZSBmb3IgZXhlcmNpc2Ugb2YKK3JpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRpYXRlIGxpdGlnYXRpb24KKyhpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0CithbnkgcGF0ZW50IGNsYWltIGlzIGluZnJpbmdlZCBieSBtYWtpbmcsIHVzaW5nLCBzZWxsaW5nLCBvZmZlcmluZyBmb3IKK3NhbGUsIG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdC4KKworQGl0ZW0gUGF0ZW50cy4KKworQSBgYGNvbnRyaWJ1dG9yJycgaXMgYSBjb3B5cmlnaHQgaG9sZGVyIHdobyBhdXRob3JpemVzIHVzZSB1bmRlciB0aGlzCitMaWNlbnNlIG9mIHRoZSBQcm9ncmFtIG9yIGEgd29yayBvbiB3aGljaCB0aGUgUHJvZ3JhbSBpcyBiYXNlZC4gIFRoZQord29yayB0aHVzIGxpY2Vuc2VkIGlzIGNhbGxlZCB0aGUgY29udHJpYnV0b3IncyBgYGNvbnRyaWJ1dG9yIHZlcnNpb24nJy4KKworQSBjb250cmlidXRvcidzIGBgZXNzZW50aWFsIHBhdGVudCBjbGFpbXMnJyBhcmUgYWxsIHBhdGVudCBjbGFpbXMgb3duZWQKK29yIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRyaWJ1dG9yLCB3aGV0aGVyIGFscmVhZHkgYWNxdWlyZWQgb3IKK2hlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZAorYnkgdGhpcyBMaWNlbnNlLCBvZiBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLAorYnV0IGRvIG5vdCBpbmNsdWRlIGNsYWltcyB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBvbmx5IGFzIGEKK2NvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCitwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIGBgY29udHJvbCcnIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudAorcGF0ZW50IHN1YmxpY2Vuc2VzIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mCit0aGlzIExpY2Vuc2UuCisKK0VhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KK21ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHJ1biwgbW9kaWZ5IGFuZAorcHJvcGFnYXRlIHRoZSBjb250ZW50cyBvZiBpdHMgY29udHJpYnV0b3IgdmVyc2lvbi4KKworSW4gdGhlIGZvbGxvd2luZyB0aHJlZSBwYXJhZ3JhcGhzLCBhIGBgcGF0ZW50IGxpY2Vuc2UnJyBpcyBhbnkgZXhwcmVzcworYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQsIGhvd2V2ZXIgZGVub21pbmF0ZWQsIG5vdCB0byBlbmZvcmNlIGEgcGF0ZW50Cisoc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCitzdWUgZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQpLiAgVG8gYGBncmFudCcnIHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhCitwYXJ0eSBtZWFucyB0byBtYWtlIHN1Y2ggYW4gYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQgbm90IHRvIGVuZm9yY2UgYQorcGF0ZW50IGFnYWluc3QgdGhlIHBhcnR5LgorCitJZiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCBrbm93aW5nbHkgcmVseWluZyBvbiBhIHBhdGVudCBsaWNlbnNlLAorYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKK3RvIGNvcHksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aHJvdWdoIGEKK3B1YmxpY2x5IGF2YWlsYWJsZSBuZXR3b3JrIHNlcnZlciBvciBvdGhlciByZWFkaWx5IGFjY2Vzc2libGUgbWVhbnMsCit0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCithdmFpbGFibGUsIG9yICgyKSBhcnJhbmdlIHRvIGRlcHJpdmUgeW91cnNlbGYgb2YgdGhlIGJlbmVmaXQgb2YgdGhlCitwYXRlbnQgbGljZW5zZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHdvcmssIG9yICgzKSBhcnJhbmdlLCBpbiBhIG1hbm5lcgorY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudAorbGljZW5zZSB0byBkb3duc3RyZWFtIHJlY2lwaWVudHMuICBgYEtub3dpbmdseSByZWx5aW5nJycgbWVhbnMgeW91IGhhdmUKK2FjdHVhbCBrbm93bGVkZ2UgdGhhdCwgYnV0IGZvciB0aGUgcGF0ZW50IGxpY2Vuc2UsIHlvdXIgY29udmV5aW5nIHRoZQorY292ZXJlZCB3b3JrIGluIGEgY291bnRyeSwgb3IgeW91ciByZWNpcGllbnQncyB1c2Ugb2YgdGhlIGNvdmVyZWQgd29yaworaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0Citjb3VudHJ5IHRoYXQgeW91IGhhdmUgcmVhc29uIHRvIGJlbGlldmUgYXJlIHZhbGlkLgorCitJZiwgcHVyc3VhbnQgdG8gb3IgaW4gY29ubmVjdGlvbiB3aXRoIGEgc2luZ2xlIHRyYW5zYWN0aW9uIG9yCithcnJhbmdlbWVudCwgeW91IGNvbnZleSwgb3IgcHJvcGFnYXRlIGJ5IHByb2N1cmluZyBjb252ZXlhbmNlIG9mLCBhCitjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMKK3JlY2VpdmluZyB0aGUgY292ZXJlZCB3b3JrIGF1dGhvcml6aW5nIHRoZW0gdG8gdXNlLCBwcm9wYWdhdGUsIG1vZGlmeQorb3IgY29udmV5IGEgc3BlY2lmaWMgY29weSBvZiB0aGUgY292ZXJlZCB3b3JrLCB0aGVuIHRoZSBwYXRlbnQgbGljZW5zZQoreW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQKK3dvcmsgYW5kIHdvcmtzIGJhc2VkIG9uIGl0LgorCitBIHBhdGVudCBsaWNlbnNlIGlzIGBgZGlzY3JpbWluYXRvcnknJyBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbiB0aGUKK3Njb3BlIG9mIGl0cyBjb3ZlcmFnZSwgcHJvaGliaXRzIHRoZSBleGVyY2lzZSBvZiwgb3IgaXMgY29uZGl0aW9uZWQgb24KK3RoZSBub24tZXhlcmNpc2Ugb2Ygb25lIG9yIG1vcmUgb2YgdGhlIHJpZ2h0cyB0aGF0IGFyZSBzcGVjaWZpY2FsbHkKK2dyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZCB3b3JrIGlmIHlvdQorYXJlIGEgcGFydHkgdG8gYW4gYXJyYW5nZW1lbnQgd2l0aCBhIHRoaXJkIHBhcnR5IHRoYXQgaXMgaW4gdGhlCitidXNpbmVzcyBvZiBkaXN0cmlidXRpbmcgc29mdHdhcmUsIHVuZGVyIHdoaWNoIHlvdSBtYWtlIHBheW1lbnQgdG8gdGhlCit0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nIHRoZQord29yaywgYW5kIHVuZGVyIHdoaWNoIHRoZSB0aGlyZCBwYXJ0eSBncmFudHMsIHRvIGFueSBvZiB0aGUgcGFydGllcword2hvIHdvdWxkIHJlY2VpdmUgdGhlIGNvdmVyZWQgd29yayBmcm9tIHlvdSwgYSBkaXNjcmltaW5hdG9yeSBwYXRlbnQKK2xpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yayBjb252ZXllZCBieQoreW91IChvciBjb3BpZXMgbWFkZSBmcm9tIHRob3NlIGNvcGllcyksIG9yIChiKSBwcmltYXJpbHkgZm9yIGFuZCBpbgorY29ubmVjdGlvbiB3aXRoIHNwZWNpZmljIHByb2R1Y3RzIG9yIGNvbXBpbGF0aW9ucyB0aGF0IGNvbnRhaW4gdGhlCitjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsIG9yIHRoYXQgcGF0ZW50CitsaWNlbnNlIHdhcyBncmFudGVkLCBwcmlvciB0byAyOCBNYXJjaCAyMDA3LgorCitOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBjb25zdHJ1ZWQgYXMgZXhjbHVkaW5nIG9yIGxpbWl0aW5nCithbnkgaW1wbGllZCBsaWNlbnNlIG9yIG90aGVyIGRlZmVuc2VzIHRvIGluZnJpbmdlbWVudCB0aGF0IG1heQorb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYXBwbGljYWJsZSBwYXRlbnQgbGF3LgorCitAaXRlbSBObyBTdXJyZW5kZXIgb2YgT3RoZXJzJyBGcmVlZG9tLgorCitJZiBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdCBjb252ZXkKK2EgY292ZXJlZCB3b3JrIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlcgordGhpcyBMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEKK2NvbnNlcXVlbmNlIHlvdSBtYXkgbm90IGNvbnZleSBpdCBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgeW91IGFncmVlCit0byB0ZXJtcyB0aGF0IG9ibGlnYXRlIHlvdSB0byBjb2xsZWN0IGEgcm95YWx0eSBmb3IgZnVydGhlciBjb252ZXlpbmcKK2Zyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5IHRoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkCitzYXRpc2Z5IGJvdGggdGhvc2UgdGVybXMgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5Citmcm9tIGNvbnZleWluZyB0aGUgUHJvZ3JhbS4KKworQGl0ZW0gVXNlIHdpdGggdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCB5b3UgaGF2ZQorcGVybWlzc2lvbiB0byBsaW5rIG9yIGNvbWJpbmUgYW55IGNvdmVyZWQgd29yayB3aXRoIGEgd29yayBsaWNlbnNlZAordW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZQorY29tYmluZWQgd29yaywgYW5kIHRvIGNvbnZleSB0aGUgcmVzdWx0aW5nIHdvcmsuICBUaGUgdGVybXMgb2YgdGhpcworTGljZW5zZSB3aWxsIGNvbnRpbnVlIHRvIGFwcGx5IHRvIHRoZSBwYXJ0IHdoaWNoIGlzIHRoZSBjb3ZlcmVkIHdvcmssCitidXQgdGhlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCitzZWN0aW9uIDEzLCBjb25jZXJuaW5nIGludGVyYWN0aW9uIHRocm91Z2ggYSBuZXR3b3JrIHdpbGwgYXBwbHkgdG8gdGhlCitjb21iaW5hdGlvbiBhcyBzdWNoLgorCitAaXRlbSBSZXZpc2VkIFZlcnNpb25zIG9mIHRoaXMgTGljZW5zZS4KKworVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3Cit2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkKK2RpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyB0aGF0IGEgY2VydGFpbiBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYGBvciBhbnkgbGF0ZXIgdmVyc2lvbicnIGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YKK2ZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQgdmVyc2lvbiBvcgorb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZgordGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBHTlUgR2VuZXJhbAorUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCitJZiB0aGUgUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIHByb3h5IGNhbiBkZWNpZGUgd2hpY2ggZnV0dXJlIHZlcnNpb25zCitvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgY2FuIGJlIHVzZWQsIHRoYXQgcHJveHkncyBwdWJsaWMKK3N0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdSB0bworY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlIFByb2dyYW0uCisKK0xhdGVyIGxpY2Vuc2UgdmVyc2lvbnMgbWF5IGdpdmUgeW91IGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50CitwZXJtaXNzaW9ucy4gIEhvd2V2ZXIsIG5vIGFkZGl0aW9uYWwgb2JsaWdhdGlvbnMgYXJlIGltcG9zZWQgb24gYW55CithdXRob3Igb3IgY29weXJpZ2h0IGhvbGRlciBhcyBhIHJlc3VsdCBvZiB5b3VyIGNob29zaW5nIHRvIGZvbGxvdyBhCitsYXRlciB2ZXJzaW9uLgorCitAaXRlbSBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LgorCitUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZCitBUFBMSUNBQkxFIExBV0AuICBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVAorSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNIGBgQVMgSVMnJyBXSVRIT1VUCitXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorQSBQQVJUSUNVTEFSIFBVUlBPU0VALiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORAorUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1VALiAgU0hPVUxEIFRIRSBQUk9HUkFNIFBST1ZFCitERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUgorQ09SUkVDVElPTi4KKworQGl0ZW0gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCisKK0lOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNT0RJRklFUyBBTkQvT1IKK0NPTlZFWVMgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUCitOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SCitMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTQorVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIKK1BBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworQGl0ZW0gSW50ZXJwcmV0YXRpb24gb2YgU2VjdGlvbnMgMTUgYW5kIDE2LgorCitJZiB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBhbmQgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgcHJvdmlkZWQKK2Fib3ZlIGNhbm5vdCBiZSBnaXZlbiBsb2NhbCBsZWdhbCBlZmZlY3QgYWNjb3JkaW5nIHRvIHRoZWlyIHRlcm1zLAorcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzCithbiBhYnNvbHV0ZSB3YWl2ZXIgb2YgYWxsIGNpdmlsIGxpYWJpbGl0eSBpbiBjb25uZWN0aW9uIHdpdGggdGhlCitQcm9ncmFtLCB1bmxlc3MgYSB3YXJyYW50eSBvciBhc3N1bXB0aW9uIG9mIGxpYWJpbGl0eSBhY2NvbXBhbmllcyBhCitjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuCisKK0BlbmQgZW51bWVyYXRlCisKK0BoZWFkaW5nIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCitAaGVhZGluZyBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UKK3Rlcm1zLgorCitUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorc3RhdGUgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlIGBgY29weXJpZ2h0JycgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworQHNtYWxsZXhhbXBsZQorQHZhcntvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy59CitDb3B5cmlnaHQgKEMpIEB2YXJ7eWVhcn0gQHZhcntuYW1lIG9mIGF1dGhvcn0KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKK3lvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFQC4gIFNlZSB0aGUgR05VCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIEB1cmx7aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL30uCitAZW5kIHNtYWxsZXhhbXBsZQorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gZG9lcyB0ZXJtaW5hbCBpbnRlcmFjdGlvbiwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydAorbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCitAc21hbGxleGFtcGxlCitAdmFye3Byb2dyYW19IENvcHlyaWdodCAoQykgQHZhcnt5ZWFyfSBAdmFye25hbWUgb2YgYXV0aG9yfQorVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBAc2FtcHtzaG93IHd9LgorVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAordW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIEBzYW1we3Nob3cgY30gZm9yIGRldGFpbHMuCitAZW5kIHNtYWxsZXhhbXBsZQorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIEBzYW1we3Nob3cgd30gYW5kIEBzYW1we3Nob3cgY30gc2hvdWxkIHNob3cKK3RoZSBhcHByb3ByaWF0ZSBwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgeW91cgorcHJvZ3JhbSdzIGNvbW1hbmRzIG1pZ2h0IGJlIGRpZmZlcmVudDsgZm9yIGEgR1VJIGludGVyZmFjZSwgeW91IHdvdWxkCit1c2UgYW4gYGBhYm91dCBib3gnJy4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwKK2lmIGFueSwgdG8gc2lnbiBhIGBgY29weXJpZ2h0IGRpc2NsYWltZXInJyBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4KK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMsIGFuZCBob3cgdG8gYXBwbHkgYW5kIGZvbGxvdyB0aGUgR05VIEdQTCwgc2VlCitAdXJse2h0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy99LgorCitUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91cgorcHJvZ3JhbSBpbnRvIHByb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZQorbGlicmFyeSwgeW91IG1heSBjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeQorYXBwbGljYXRpb25zIHdpdGggdGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZQordGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4gIEJ1dAorZmlyc3QsIHBsZWFzZSByZWFkIEB1cmx7aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5LW5vdC1sZ3BsLmh0bWx9LgpkaWZmIC0tZ2l0IGEvZG9jL2dwbC50ZXhpIGIvZG9jL2dwbC50ZXhpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTAzZmM4Li4wMDAwMDAwCi0tLSBhL2RvYy9ncGwudGV4aQorKysgL2Rldi9udWxsCkBAIC0xLDM5MiArMCwwIEBACi1Abm9kZSBDb3B5aW5nCi1AdW5udW1iZXJlZCBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQotQGNlbnRlciBWZXJzaW9uIDIsIEp1bmUgMTk5MQotCi1AYyBUaGlzIGZpbGUgaXMgaW50ZW5kZWQgdG8gYmUgaW5jbHVkZWQgaW4gYW5vdGhlciBmaWxlLgotCi1AZGlzcGxheQotQ29weXJpZ2h0IEBjb3B5cmlnaHR7fSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBCi0KLUV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcwotb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCi1AZW5kIGRpc3BsYXkKLQotQHVubnVtYmVyZWRzZWMgUHJlYW1ibGUKLQotICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCi1mcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQotc29mdHdhcmUtLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCi1HZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQotRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwotdXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQotdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCi15b3VyIHByb2dyYW1zLCB0b28uCi0KLSAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAotcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQotaGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgotdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0Ci1pZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAotaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgotCi0gIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKLWFueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KLVRoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91Ci1kaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCi0KLSAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgotZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Ci15b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQotc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgotcmlnaHRzLgotCi0gIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKLSgyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCi1kaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgotCi0gIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCi10aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQotc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCi13YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwotdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKLWF1dGhvcnMnIHJlcHV0YXRpb25zLgotCi0gIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCi1wYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCi1wcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCi1wcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKLXBhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCi0KLSAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKLW1vZGlmaWNhdGlvbiBmb2xsb3cuCi0KLUBpZnRleAotQHVubnVtYmVyZWRzZWMgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCi1AZW5kIGlmdGV4Ci1AaWZpbmZvCi1AY2VudGVyIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgotQGVuZCBpZmluZm8KLQotQGVudW1lcmF0ZSAwCi1AaXRlbQotVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucwotYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKLXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgYGBQcm9ncmFtJycsIGJlbG93LAotcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgYGB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtJycKLW1lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Ci10aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAotZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKLWxhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KLXRoZSB0ZXJtIGBgbW9kaWZpY2F0aW9uJycuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgYGB5b3UnJy4KLQotQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKLWNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKLXJ1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KLWlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCi1Qcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgotV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCi0KLUBpdGVtCi1Zb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKLXNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQotY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQotY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQotbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OwotYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQotYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KLQotWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCi15b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgotCi1AaXRlbQotWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgotb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAotZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCi1hYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgotCi1AZW51bWVyYXRlIGEKLUBpdGVtCi1Zb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKLXN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCi0KLUBpdGVtCi1Zb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KLXdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQotcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKLXBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KLQotQGl0ZW0KLUlmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKLXdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKLWludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KLWFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQotbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCi1hIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCi10aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcwotTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKLWRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KLXRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQotQGVuZCBlbnVtZXJhdGUKLQotVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgotaWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKLWFuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgotdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQotc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91Ci1kaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKLW9uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgotdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKLWVudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KLQotVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Ci15b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KLWV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgotY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KLQotSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQotd2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCi1hIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgotdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KLQotQGl0ZW0KLVlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAotdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCi1TZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0KLUBlbnVtZXJhdGUgYQotQGl0ZW0KLUFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKLXNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucwotMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCi0KLUBpdGVtCi1BY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQoteWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKLWNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKLW1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKLWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCi1jdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCi0KLUBpdGVtCi1BY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgotdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKLWFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91Ci1yZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCi1hbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKLUBlbmQgZW51bWVyYXRlCi0KLVRoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKLW1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCi1jb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQotYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCi1jb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCi1zcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKLWFueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Ci1mb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQotb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKLWl0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KLQotSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZwotYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAotYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCi1kaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKLWNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCi0KLUBpdGVtCi1Zb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLWV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKLW90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwotdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgotSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKLXRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCi1wYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCi0KLUBpdGVtCi1Zb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKLXNpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCi1kaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKLXByb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKLW1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQotUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKLWFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKLXRoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgotCi1AaXRlbQotRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQotUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKLW9yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KLXRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCi1yZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCi1Zb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwotdGhpcyBMaWNlbnNlLgotCi1AaXRlbQotSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAotaW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKLWNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKLW90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKLWV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90Ci1kaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCi1MaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91Ci1tYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50Ci1saWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5Ci1hbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KLXRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KLXJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCi0KLUlmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgotYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bwotYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKLWNpcmN1bXN0YW5jZXMuCi0KLUl0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKLXBhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55Ci1zdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCi1pbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKLWltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQotZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAotdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKLXN5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKLXRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAotaW1wb3NlIHRoYXQgY2hvaWNlLgotCi1UaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KLWJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgotCi1AaXRlbQotSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KLWNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQotb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQotbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCi10aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCi1jb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKLXRoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgotCi1AaXRlbQotVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKLW9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAotYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCi1hZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KLQotRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQotc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kIGBgYW55Ci1sYXRlciB2ZXJzaW9uJycsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLVNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKLXRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKLUZvdW5kYXRpb24uCi0KLUBpdGVtCi1JZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKLXByb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKLXRvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQotU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCi1tYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscwotb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAotb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCi0KLUBpZnRleAotQGhlYWRpbmcgTk8gV0FSUkFOVFkKLUBlbmQgaWZ0ZXgKLUBpZmluZm8KLUBjZW50ZXIgTk8gV0FSUkFOVFkKLUBlbmQgaWZpbmZvCi0KLUBpdGVtCi1CRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQotRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCi1PVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCi1QUk9WSURFIFRIRSBQUk9HUkFNIGBgQVMgSVMnJyBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECi1PUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUwotVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQotUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCi1SRVBBSVIgT1IgQ09SUkVDVElPTi4KLQotQGl0ZW0KLUlOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORwotV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgotUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKLUlOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORwotT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAotVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCi1ZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgotUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCi1QT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCi1AZW5kIGVudW1lcmF0ZQotCi1AaWZ0ZXgKLUBoZWFkaW5nIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUwotQGVuZCBpZnRleAotQGlmaW5mbwotQGNlbnRlciBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKLUBlbmQgaWZpbmZvCi0KLUBwYWdlCi1AdW5udW1iZXJlZHNlYyBBcHBlbmRpeDogSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCi0KLSAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAotcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAotZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCi0KLSAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKLXRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKLWNvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Ci10aGUgYGBjb3B5cmlnaHQnJyBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgotCi1Ac21hbGxleGFtcGxlCi1AdmFye29uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLn0KLUNvcHlyaWdodCAoQykgQHZhcnt5eXl5fSAgQHZhcntuYW1lIG9mIGF1dGhvcn0KLQotVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci10aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi1idXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi1Gb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCi1AZW5kIHNtYWxsZXhhbXBsZQotCi1BbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KLQotSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcwotd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKLQotQHNtYWxsZXhhbXBsZQotR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSAxOUB2YXJ7eXl9IEB2YXJ7bmFtZSBvZiBhdXRob3J9Ci1Hbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCi1UaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0Ci11bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCi1AZW5kIHNtYWxsZXhhbXBsZQotCi1UaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIEBzYW1we3Nob3cgd30gYW5kIEBzYW1we3Nob3cgY30gc2hvdWxkIHNob3cKLXRoZSBhcHByb3ByaWF0ZSBwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlCi1jb21tYW5kcyB5b3UgdXNlIG1heSBiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gQHNhbXB7c2hvdyB3fSBhbmQKLUBzYW1we3Nob3cgY307IHRoZXkgY291bGQgZXZlbiBiZSBtb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0tLXdoYXRldmVyCi1zdWl0cyB5b3VyIHByb2dyYW0uCi0KLVlvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCi1zY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhIGBgY29weXJpZ2h0IGRpc2NsYWltZXInJyBmb3IgdGhlIHByb2dyYW0sIGlmCi1uZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6Ci0KLUBleGFtcGxlCi1Zb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCi1gR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KLQotQHZhcntzaWduYXR1cmUgb2YgVHkgQ29vbn0sIDEgQXByaWwgMTk4OQotVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKLUBlbmQgZXhhbXBsZQotCi1UaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KLXByb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Ci1jb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKLWxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAotUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9kb2MvcmVmY2FyZC50ZXggYi9kb2MvcmVmY2FyZC50ZXgKaW5kZXggM2YyZWM5Yi4uY2FhYmY3ZSAxMDA2NDQKLS0tIGEvZG9jL3JlZmNhcmQudGV4CisrKyBiL2RvYy9yZWZjYXJkLnRleApAQCAtMTksMjQgKzE5LDIyIEBACiBcZGVmXGZpbmFsb3V0e1xvdmVyZnVsbHJ1bGU9MHB0fQogJVxmaW5hbG91dAogCi0lIENvcHlyaWdodCAoYykgMTk5OCwgMjAwMSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCislIENvcHlyaWdodCAoYykgMTk5OCwgMjAwMSwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogJQogJSBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbi4KICUKLSUgQmlzb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgdGhlbSBhbmQvb3IgbW9kaWZ5IHRoZW0KLSUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0lIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSUgbGF0ZXIgdmVyc2lvbi4KKyUgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyUgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyUgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyUgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICUKLSUgQmlzb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSUgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0lIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotJSBmb3IgbW9yZSBkZXRhaWxzLgorJSBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyUgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyUgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorJSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogJQogJSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotJSBhbG9uZyB3aXRoIGVpdGhlciBGbGV4IG9yIEJpc29uOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUKLSUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSUgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCislIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogJQogJSBUaGlzIGZpbGUgaXMgaW50ZW5kZWQgdG8gYmUgcHJvY2Vzc2VkIGJ5IHBsYWluIFRlWCAoVGVYODIpLgogJQpAQCAtNDU4LDcgKzQ1Niw3IEBACiBcc2VjdGlvbiB7VmFyaWFibGVzIGFuZCBUeXBlc30KICUqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCi1ca2V5e0N1cnJlbnQgbG9vayBhaGVhZCB0b2tlbi59ICAgICAgICAgICAgICAgIHt5eWNoYXJ9Citca2V5e0N1cnJlbnQgbG9va2FoZWFkIHRva2VuLn0gICAgICAgICAgICAgICAgIHt5eWNoYXJ9CiBca2V5e0RlYnVnIG1vZGUgZmxhZy59ICAgICAgICAgICAgICAgICAgICAgICAgIHt5eWRlYnVnfQogXGtleXtEYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCB0b2tlbi59ICB7eXlsdmFsfQogXGtleXtTb3VyY2UgcG9zaXRpb24gb2YgY3VycmVudCB0b2tlbi59ICAgICAgICB7eXlsbG9jfQpAQCAtNDg5LDggKzQ4Nyw4IEBACiBca2V5e1F1aXQgcGFyc2luZyBpbW1lZGlhdGVseS4gUmV0dXJuIDEufSAgICAgICAgICAge1lZQUJPUlR9CiBca2V5e1F1aXQgcGFyc2luZyBpbW1lZGlhdGVseS4gUmV0dXJuIDAufSAgICAgICAgICAge1lZQUNDRVBUfQogXGtleXtQcmV0ZW5kIGEgc3ludGF4IGVycm9yIG9jY3VycmVkLn0gICAgICAgICAgICAgIHtZWUVSUk9SfQotXGtleXtWYWx1ZSBpbiB7XHR0IHl5Y2hhcn0gaWYgbm8gbG9vay1haGVhZCB0b2tlbi59IHtZWUVNUFRZfQotXGtleXtDbGVhciBwcmV2aW91cyBsb29rIGFoZWFkIHRva2VuLn0gICAgICAgICAgICAgIHt5eWNsZWFyaW59Citca2V5e1ZhbHVlIGluIHtcdHQgeXljaGFyfSBpZiBubyBsb29rYWhlYWQgdG9rZW4ufSAge1lZRU1QVFl9Citca2V5e0NsZWFyIHByZXZpb3VzIGxvb2thaGVhZCB0b2tlbi59ICAgICAgICAgICAgICAge3l5Y2xlYXJpbn0KIFxrZXl7UmVjb3ZlciBub3JtYWxseSBmcm9tIGFuIGVycm9yLn0gICAgICAgICAgICAgICB7eXllcnJva30KIAogJSAqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZG9jL3N0YW1wLXZ0aSBiL2RvYy9zdGFtcC12dGkKaW5kZXggZTNiNzYwMy4uNTQ1YmM5ZiAxMDA2NDQKLS0tIGEvZG9jL3N0YW1wLXZ0aQorKysgYi9kb2Mvc3RhbXAtdnRpCkBAIC0xLDQgKzEsNCBAQAotQHNldCBVUERBVEVEIDMwIE1heSAyMDA2Ci1Ac2V0IFVQREFURUQtTU9OVEggTWF5IDIwMDYKLUBzZXQgRURJVElPTiAyLjMKLUBzZXQgVkVSU0lPTiAyLjMKK0BzZXQgVVBEQVRFRCA5IERlY2VtYmVyIDIwMTIKK0BzZXQgVVBEQVRFRC1NT05USCBEZWNlbWJlciAyMDEyCitAc2V0IEVESVRJT04gMi43CitAc2V0IFZFUlNJT04gMi43CmRpZmYgLS1naXQgYS9kb2MvdmVyc2lvbi50ZXhpIGIvZG9jL3ZlcnNpb24udGV4aQppbmRleCBlM2I3NjAzLi41NDViYzlmIDEwMDY0NAotLS0gYS9kb2MvdmVyc2lvbi50ZXhpCisrKyBiL2RvYy92ZXJzaW9uLnRleGkKQEAgLTEsNCArMSw0IEBACi1Ac2V0IFVQREFURUQgMzAgTWF5IDIwMDYKLUBzZXQgVVBEQVRFRC1NT05USCBNYXkgMjAwNgotQHNldCBFRElUSU9OIDIuMwotQHNldCBWRVJTSU9OIDIuMworQHNldCBVUERBVEVEIDkgRGVjZW1iZXIgMjAxMgorQHNldCBVUERBVEVELU1PTlRIIERlY2VtYmVyIDIwMTIKK0BzZXQgRURJVElPTiAyLjcKK0BzZXQgVkVSU0lPTiAyLjcKZGlmZiAtLWdpdCBhL2RvYy95YWNjLjEuaW4gYi9kb2MveWFjYy4xLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMDc0ODMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MveWFjYy4xLmluCkBAIC0wLDAgKzEsNDEgQEAKKy5USCBZQUNDICIxIiAiTm92ZW1iZXIgMjAwNyIgIkBQQUNLQUdFX1NUUklOR0AiICJVc2VyIENvbW1hbmRzIgorLlNIIE5BTUUKK3lhY2MgXC0gR05VIFByb2plY3QgcGFyc2VyIGdlbmVyYXRvcgorLlNIIFNZTk9QU0lTCisuQiB5YWNjCitbXGZJT1BUSU9OXGZSXS4uLiBcZklGSUxFXGZSCisuU0ggREVTQ1JJUFRJT04KKy5JIFlhY2MKKyhZZXQgQW5vdGhlciBDb21waWxlciBDb21waWxlcikgaXMgYSBwYXJzZXIgZ2VuZXJhdG9yLiAgVGhpcwordmVyc2lvbiBpcyBhIHNpbXBsZSB3cmFwcGVyIGFyb3VuZAorLklSIGJpc29uICgxKS4KK0l0IHBhc3NlcyBvcHRpb24KK1xmQlwteVxmUiwgXGZCXC1cLXlhY2NcZlIKK3RvIGFjdGl2YXRlIHRoZSB1cHdhcmQgY29tcGF0aWJpbGl0eSBtb2RlLiAgU2VlCisuSVIgYmlzb24gKDEpCitmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKy5TSCBBVVRIT1IKK1dyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQuCisuU0ggIlJFUE9SVElORyBCVUdTIgorUmVwb3J0IGJ1Z3MgdG8gPEBQQUNLQUdFX0JVR1JFUE9SVEA+LgorLlNIIENPUFlSSUdIVAorQ29weXJpZ2h0IFwoY28gQFBBQ0tBR0VfQ09QWVJJR0hUX1lFQVJAIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLmJyCitUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTword2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisuU0ggIlNFRSBBTFNPIgorLkJSIGxleCAoMSksCisuQlIgZmxleCAoMSksCisuQlIgYmlzb24gKDEpLgorLlBQCitUaGUgZnVsbCBkb2N1bWVudGF0aW9uIGZvcgorLkIgYmlzb24KK2lzIG1haW50YWluZWQgYXMgYSBUZXhpbmZvIG1hbnVhbC4gIElmIHRoZQorLkIgaW5mbworYW5kCisuQiBiaXNvbgorcHJvZ3JhbXMgYXJlIHByb3Blcmx5IGluc3RhbGxlZCBhdCB5b3VyIHNpdGUsIHRoZSBjb21tYW5kCisuSVAKKy5CIGluZm8gYmlzb24KKy5QUAorc2hvdWxkIGdpdmUgeW91IGFjY2VzcyB0byB0aGUgY29tcGxldGUgbWFudWFsLgpkaWZmIC0tZ2l0IGEvZXRjL01ha2VmaWxlLmFtIGIvZXRjL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNjE1NDYKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxNiBAQAorIyMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK25vZGlzdF9ub2luc3RfU0NSSVBUUyA9IGJlbmNoLnBsCmRpZmYgLS1naXQgYS9ldGMvTWFrZWZpbGUuaW4gYi9ldGMvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI0YzYxOQotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDE1MjYgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTIuNSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK1ZQQVRIID0gQHNyY2RpckAKK2FtX19tYWtlX2RyeXJ1biA9IFwKKyAgeyBcCisgICAgYW1fX2RyeT1ubzsgXAorICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAorICAgICAgKlxcW1wgXAldKikgXAorICAgICAgICBlY2hvICdhbS0tZWNobzogOyBAZWNobyAiQU0iICBPSycgfCAkKE1BS0UpIC1mIC0gMj4vZGV2L251bGwgXAorICAgICAgICAgIHwgZ3JlcCAnXkFNIE9LJCQnID4vZGV2L251bGwgfHwgYW1fX2RyeT15ZXM7OyBcCisgICAgICAqKSBcCisgICAgICAgIGZvciBhbV9fZmxnIGluICQkTUFLRUZMQUdTOyBkbyBcCisgICAgICAgICAgY2FzZSAkJGFtX19mbGcgaW4gXAorICAgICAgICAgICAgKj0qfC0tKikgOzsgXAorICAgICAgICAgICAgKm4qKSBhbV9fZHJ5PXllczsgYnJlYWs7OyBcCisgICAgICAgICAgZXNhYzsgXAorICAgICAgICBkb25lOzsgXAorICAgIGVzYWM7IFwKKyAgICB0ZXN0ICQkYW1fX2RyeSA9IHllczsgXAorICB9Citwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gZXRjCitESVNUX0NPTU1PTiA9IFJFQURNRSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluIFwKKwkkKHNyY2RpcikvYmVuY2gucGwuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200LzAwZ251bGliLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2FsbG9jYS5tNCAkKHRvcF9zcmNkaXIpL200L2FzbS11bmRlcnNjb3JlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Fzc2VydC5tNCAkKHRvcF9zcmNkaXIpL200L2Jpc29uLWkxOG4ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYy13b3JraW5nLm00ICQodG9wX3NyY2RpcikvbTQvY2FsbG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Nsb3NlLXN0cmVhbS5tNCAkKHRvcF9zcmNkaXIpL200L2Nsb3NlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Nsb3Nlb3V0Lm00ICQodG9wX3NyY2RpcikvbTQvY29kZXNldC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb25maWctaC5tNCAkKHRvcF9zcmNkaXIpL200L2NvbmZpZ21ha2UubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3h4Lm00ICQodG9wX3NyY2RpcikvbTQvZGlybmFtZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9kbWFsbG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2RvdWJsZS1zbGFzaC1yb290Lm00ICQodG9wX3NyY2RpcikvbTQvZHVwMi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9lbnZpcm9uLm00ICQodG9wX3NyY2RpcikvbTQvZXJybm9faC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9lcnJvci5tNCAkKHRvcF9zcmNkaXIpL200L2V4cG9uZW50ZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHBvbmVudGYubTQgJCh0b3Bfc3JjZGlyKS9tNC9leHBvbmVudGwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXh0ZW5zaW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHRlcm4taW5saW5lLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZhdGFsLXNpZ25hbC5tNCAkKHRvcF9zcmNkaXIpL200L2ZjbnRsLW8ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZmNudGwubTQgJCh0b3Bfc3JjZGlyKS9tNC9mY250bF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZsZXgubTQgJCh0b3Bfc3JjZGlyKS9tNC9mbG9hdF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZvcGVuLm00ICQodG9wX3NyY2RpcikvbTQvZnBlbmRpbmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZnBpZWVlLm00ICQodG9wX3NyY2RpcikvbTQvZnByaW50Zi1wb3NpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mcmV4cC5tNCAkKHRvcF9zcmNkaXIpL200L2ZyZXhwbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mc2V0ZXJyLm00ICQodG9wX3NyY2RpcikvbTQvZnN0YXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ2V0ZGVsaW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXRkdGFibGVzaXplLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dldGxpbmUubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXRvcHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCAkKHRvcF9zcmNkaXIpL200L2dsaWJjMjEubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ251bGliLWNvbW1vbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWItY29tcC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2luY2x1ZGVfbmV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvaW50bWF4X3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMtcHJpLm00ICQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2lzbmFuLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2lzbmFuZC5tNCAkKHRvcF9zcmNkaXIpL200L2lzbmFuZi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pc25hbmwubTQgJCh0b3Bfc3JjZGlyKS9tNC9pc3dibGFuay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9qYXZhY29tcC5tNCAkKHRvcF9zcmNkaXIpL200L2phdmFleGVjLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xhcmdlZmlsZS5tNCAkKHRvcF9zcmNkaXIpL200L2xkZXhwLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xkZXhwbC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGlidW5pc3RyaW5nLWJhc2UubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9jYWxjaGFyc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvbG9jYWxlLWZyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvY2FsZS1qYS5tNCAkKHRvcF9zcmNkaXIpL200L2xvY2FsZS16aC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sb2NrLm00ICQodG9wX3NyY2RpcikvbTQvbG9uZ2xvbmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbTQubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYWxsb2MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWF0aF9oLm00ICQodG9wX3NyY2RpcikvbTQvbWJjaGFyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21iaXRlci5tNCAkKHRvcF9zcmNkaXIpL200L21icnRvd2MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWJzaW5pdC5tNCAkKHRvcF9zcmNkaXIpL200L21ic3RhdGVfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYnN3aWR0aC5tNCAkKHRvcF9zcmNkaXIpL200L21lbWNoci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tbWFwLWFub24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9tb2RlX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbXN2Yy1pbnZhbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tc3ZjLW5vdGhyb3cubTQgJCh0b3Bfc3JjZGlyKS9tNC9tdWx0aWFyY2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvbm9jcmFzaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9vYnN0YWNrLXByaW50Zi5tNCAkKHRvcF9zcmNkaXIpL200L29mZl90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L29wZW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wYXRobWF4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BlcnJvci5tNCAkKHRvcF9zcmNkaXIpL200L3BpcGUyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcG9zaXhfc3Bhd24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJpbnRmLWZyZXhwLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ByaW50Zi1mcmV4cGwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJpbnRmLXBvc2l4LXJwbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcmludGYubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9xdW90ZS5tNCAkKHRvcF9zcmNkaXIpL200L3F1b3RlYXJnLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3JhaXNlLm00ICQodG9wX3NyY2RpcikvbTQvcmF3bWVtY2hyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3JlYWxsb2MubTQgJCh0b3Bfc3JjZGlyKS9tNC9zY2hlZF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NldGVudi5tNCAkKHRvcF9zcmNkaXIpL200L3NpZ19hdG9taWNfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zaWdhY3Rpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zaWduYWxfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zaWduYWxibG9ja2luZy5tNCAkKHRvcF9zcmNkaXIpL200L3NpZ25iaXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc2l6ZV9tYXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc25wcmludGYtcG9zaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc25wcmludGYubTQgJCh0b3Bfc3JjZGlyKS9tNC9zcGF3bi1waXBlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NwYXduX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zcHJpbnRmLXBvc2l4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NzaXplX3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGF0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGJvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRkZWZfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnQubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRpb19oLm00ICQodG9wX3NyY2RpcikvbTQvc3RkbGliX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RwY3B5Lm00ICQodG9wX3NyY2RpcikvbTQvc3RyY2hybnVsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cmR1cC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cmVycm9yLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cmVycm9yX3IubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJpbmdfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJuZHVwLm00ICQodG9wX3NyY2RpcikvbTQvc3Rybmxlbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b3VsLm00ICQodG9wX3NyY2RpcikvbTQvc3RydmVyc2NtcC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zeXNfc29ja2V0X2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3lzX3N0YXRfaC5tNCAkKHRvcF9zcmNkaXIpL200L3N5c190eXBlc19oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N5c193YWl0X2gubTQgJCh0b3Bfc3JjZGlyKS9tNC90aHJlYWRsaWIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdGltZV9oLm00ICQodG9wX3NyY2RpcikvbTQvdGltZXZhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGQtc2FmZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC91bmxvY2tlZC1pby5tNCAkKHRvcF9zcmNkaXIpL200L3Zhc25wcmludGYubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdmZwcmludGYtcG9zaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdnNucHJpbnRmLXBvc2l4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ZzbnByaW50Zi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC92c3ByaW50Zi1wb3NpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93YWl0LXByb2Nlc3MubTQgJCh0b3Bfc3JjZGlyKS9tNC93YWl0cGlkLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3dhcm4tb24tdXNlLm00ICQodG9wX3NyY2RpcikvbTQvd2FybmluZ3MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2NoYXJfaC5tNCAkKHRvcF9zcmNkaXIpL200L3djaGFyX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2N0eXBlX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC93Y3dpZHRoLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3dpbnRfdC5tNCAkKHRvcF9zcmNkaXIpL200L3hhbGxvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC94c2l6ZS5tNCAkKHRvcF9zcmNkaXIpL200L3hzdHJuZHVwLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9IGJlbmNoLnBsCitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorU0NSSVBUUyA9ICQobm9kaXN0X25vaW5zdF9TQ1JJUFRTKQorQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKK2FtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfUF8wID0gZmFsc2UKK2FtX192X1BfMSA9IDoKK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7CithbV9fdl9HRU5fMSA9IAorQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2F0XzAgPSBACithbV9fdl9hdF8xID0gCitTT1VSQ0VTID0KK0RJU1RfU09VUkNFUyA9CithbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKKyAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCisgICAgbnxub3xOTykgZmFsc2U7OyBcCisgICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKKyAgZXNhYworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK3BrZ2xpYmV4ZWNkaXIgPSBAcGtnbGliZXhlY2RpckAKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FMTE9DQSA9IEBBTExPQ0FACitBTExPQ0FfSCA9IEBBTExPQ0FfSEAKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUFBMRV9VTklWRVJTQUxfQlVJTEQgPSBAQVBQTEVfVU5JVkVSU0FMX0JVSUxEQAorQVIgPSBAQVJACitBUkZMQUdTID0gQEFSRkxBR1NACitBU01fU1lNQk9MX1BSRUZJWCA9IEBBU01fU1lNQk9MX1BSRUZJWEAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT000VEUgPSBAQVVUT000VEVACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVNPTl9DWFhfV09SS1MgPSBAQklTT05fQ1hYX1dPUktTQAorQklTT05fQ19XT1JLUyA9IEBCSVNPTl9DX1dPUktTQAorQklTT05fTE9DQUxFRElSID0gQEJJU09OX0xPQ0FMRURJUkAKK0JJVFNJWkVPRl9QVFJESUZGX1QgPSBAQklUU0laRU9GX1BUUkRJRkZfVEAKK0JJVFNJWkVPRl9TSUdfQVRPTUlDX1QgPSBAQklUU0laRU9GX1NJR19BVE9NSUNfVEAKK0JJVFNJWkVPRl9TSVpFX1QgPSBAQklUU0laRU9GX1NJWkVfVEAKK0JJVFNJWkVPRl9XQ0hBUl9UID0gQEJJVFNJWkVPRl9XQ0hBUl9UQAorQklUU0laRU9GX1dJTlRfVCA9IEBCSVRTSVpFT0ZfV0lOVF9UQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NMQVNTUEFUSCA9IEBDTEFTU1BBVEhACitDTEFTU1BBVEhfU0VQQVJBVE9SID0gQENMQVNTUEFUSF9TRVBBUkFUT1JACitDT05GSUdfSU5DTFVERSA9IEBDT05GSUdfSU5DTFVERUAKK0NPTkZfSkFWQSA9IEBDT05GX0pBVkFACitDT05GX0pBVkFDID0gQENPTkZfSkFWQUNACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWFhfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUID0gQENYWF9DT01QSUxFUl9QT1NJWExZX0NPUlJFQ1RACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorQ19DT01QSUxFUl9QT1NJWExZX0NPUlJFQ1QgPSBAQ19DT01QSUxFUl9QT1NJWExZX0NPUlJFQ1RACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRE9UID0gQERPVEAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRU1VTFRJSE9QX0hJRERFTiA9IEBFTVVMVElIT1BfSElEREVOQAorRU1VTFRJSE9QX1ZBTFVFID0gQEVNVUxUSUhPUF9WQUxVRUAKK0VOT0xJTktfSElEREVOID0gQEVOT0xJTktfSElEREVOQAorRU5PTElOS19WQUxVRSA9IEBFTk9MSU5LX1ZBTFVFQAorRU9WRVJGTE9XX0hJRERFTiA9IEBFT1ZFUkZMT1dfSElEREVOQAorRU9WRVJGTE9XX1ZBTFVFID0gQEVPVkVSRkxPV19WQUxVRUAKK0VSUk5PX0ggPSBARVJSTk9fSEAKK0VYRUVYVCA9IEBFWEVFWFRACitGTE9BVF9IID0gQEZMT0FUX0hACitHQ0MgPSBAR0NDQAorR0VUT1BUX0ggPSBAR0VUT1BUX0hACitHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAorR0xJQkMyMSA9IEBHTElCQzIxQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHTlVMSUJfQUNPU0YgPSBAR05VTElCX0FDT1NGQAorR05VTElCX0FDT1NMID0gQEdOVUxJQl9BQ09TTEAKK0dOVUxJQl9BU0lORiA9IEBHTlVMSUJfQVNJTkZACitHTlVMSUJfQVNJTkwgPSBAR05VTElCX0FTSU5MQAorR05VTElCX0FUQU4yRiA9IEBHTlVMSUJfQVRBTjJGQAorR05VTElCX0FUQU5GID0gQEdOVUxJQl9BVEFORkAKK0dOVUxJQl9BVEFOTCA9IEBHTlVMSUJfQVRBTkxACitHTlVMSUJfQVRPTEwgPSBAR05VTElCX0FUT0xMQAorR05VTElCX0JUT1dDID0gQEdOVUxJQl9CVE9XQ0AKK0dOVUxJQl9DQUxMT0NfUE9TSVggPSBAR05VTElCX0NBTExPQ19QT1NJWEAKK0dOVUxJQl9DQU5PTklDQUxJWkVfRklMRV9OQU1FID0gQEdOVUxJQl9DQU5PTklDQUxJWkVfRklMRV9OQU1FQAorR05VTElCX0NCUlQgPSBAR05VTElCX0NCUlRACitHTlVMSUJfQ0JSVEYgPSBAR05VTElCX0NCUlRGQAorR05VTElCX0NCUlRMID0gQEdOVUxJQl9DQlJUTEAKK0dOVUxJQl9DRUlMID0gQEdOVUxJQl9DRUlMQAorR05VTElCX0NFSUxGID0gQEdOVUxJQl9DRUlMRkAKK0dOVUxJQl9DRUlMTCA9IEBHTlVMSUJfQ0VJTExACitHTlVMSUJfQ0hESVIgPSBAR05VTElCX0NIRElSQAorR05VTElCX0NIT1dOID0gQEdOVUxJQl9DSE9XTkAKK0dOVUxJQl9DTE9TRSA9IEBHTlVMSUJfQ0xPU0VACitHTlVMSUJfQ09QWVNJR04gPSBAR05VTElCX0NPUFlTSUdOQAorR05VTElCX0NPUFlTSUdORiA9IEBHTlVMSUJfQ09QWVNJR05GQAorR05VTElCX0NPUFlTSUdOTCA9IEBHTlVMSUJfQ09QWVNJR05MQAorR05VTElCX0NPU0YgPSBAR05VTElCX0NPU0ZACitHTlVMSUJfQ09TSEYgPSBAR05VTElCX0NPU0hGQAorR05VTElCX0NPU0wgPSBAR05VTElCX0NPU0xACitHTlVMSUJfRFBSSU5URiA9IEBHTlVMSUJfRFBSSU5URkAKK0dOVUxJQl9EVVAgPSBAR05VTElCX0RVUEAKK0dOVUxJQl9EVVAyID0gQEdOVUxJQl9EVVAyQAorR05VTElCX0RVUDMgPSBAR05VTElCX0RVUDNACitHTlVMSUJfRU5WSVJPTiA9IEBHTlVMSUJfRU5WSVJPTkAKK0dOVUxJQl9FVUlEQUNDRVNTID0gQEdOVUxJQl9FVUlEQUNDRVNTQAorR05VTElCX0VYUDIgPSBAR05VTElCX0VYUDJACitHTlVMSUJfRVhQMkYgPSBAR05VTElCX0VYUDJGQAorR05VTElCX0VYUDJMID0gQEdOVUxJQl9FWFAyTEAKK0dOVUxJQl9FWFBGID0gQEdOVUxJQl9FWFBGQAorR05VTElCX0VYUEwgPSBAR05VTElCX0VYUExACitHTlVMSUJfRVhQTTEgPSBAR05VTElCX0VYUE0xQAorR05VTElCX0VYUE0xRiA9IEBHTlVMSUJfRVhQTTFGQAorR05VTElCX0VYUE0xTCA9IEBHTlVMSUJfRVhQTTFMQAorR05VTElCX0ZBQlNGID0gQEdOVUxJQl9GQUJTRkAKK0dOVUxJQl9GQUJTTCA9IEBHTlVMSUJfRkFCU0xACitHTlVMSUJfRkFDQ0VTU0FUID0gQEdOVUxJQl9GQUNDRVNTQVRACitHTlVMSUJfRkNIRElSID0gQEdOVUxJQl9GQ0hESVJACitHTlVMSUJfRkNITU9EQVQgPSBAR05VTElCX0ZDSE1PREFUQAorR05VTElCX0ZDSE9XTkFUID0gQEdOVUxJQl9GQ0hPV05BVEAKK0dOVUxJQl9GQ0xPU0UgPSBAR05VTElCX0ZDTE9TRUAKK0dOVUxJQl9GQ05UTCA9IEBHTlVMSUJfRkNOVExACitHTlVMSUJfRkRBVEFTWU5DID0gQEdOVUxJQl9GREFUQVNZTkNACitHTlVMSUJfRkRPUEVOID0gQEdOVUxJQl9GRE9QRU5ACitHTlVMSUJfRkZMVVNIID0gQEdOVUxJQl9GRkxVU0hACitHTlVMSUJfRkZTTCA9IEBHTlVMSUJfRkZTTEAKK0dOVUxJQl9GRlNMTCA9IEBHTlVMSUJfRkZTTExACitHTlVMSUJfRkdFVEMgPSBAR05VTElCX0ZHRVRDQAorR05VTElCX0ZHRVRTID0gQEdOVUxJQl9GR0VUU0AKK0dOVUxJQl9GTE9PUiA9IEBHTlVMSUJfRkxPT1JACitHTlVMSUJfRkxPT1JGID0gQEdOVUxJQl9GTE9PUkZACitHTlVMSUJfRkxPT1JMID0gQEdOVUxJQl9GTE9PUkxACitHTlVMSUJfRk1BID0gQEdOVUxJQl9GTUFACitHTlVMSUJfRk1BRiA9IEBHTlVMSUJfRk1BRkAKK0dOVUxJQl9GTUFMID0gQEdOVUxJQl9GTUFMQAorR05VTElCX0ZNT0QgPSBAR05VTElCX0ZNT0RACitHTlVMSUJfRk1PREYgPSBAR05VTElCX0ZNT0RGQAorR05VTElCX0ZNT0RMID0gQEdOVUxJQl9GTU9ETEAKK0dOVUxJQl9GT1BFTiA9IEBHTlVMSUJfRk9QRU5ACitHTlVMSUJfRlBSSU5URiA9IEBHTlVMSUJfRlBSSU5URkAKK0dOVUxJQl9GUFJJTlRGX1BPU0lYID0gQEdOVUxJQl9GUFJJTlRGX1BPU0lYQAorR05VTElCX0ZQVVJHRSA9IEBHTlVMSUJfRlBVUkdFQAorR05VTElCX0ZQVVRDID0gQEdOVUxJQl9GUFVUQ0AKK0dOVUxJQl9GUFVUUyA9IEBHTlVMSUJfRlBVVFNACitHTlVMSUJfRlJFQUQgPSBAR05VTElCX0ZSRUFEQAorR05VTElCX0ZSRU9QRU4gPSBAR05VTElCX0ZSRU9QRU5ACitHTlVMSUJfRlJFWFAgPSBAR05VTElCX0ZSRVhQQAorR05VTElCX0ZSRVhQRiA9IEBHTlVMSUJfRlJFWFBGQAorR05VTElCX0ZSRVhQTCA9IEBHTlVMSUJfRlJFWFBMQAorR05VTElCX0ZTQ0FORiA9IEBHTlVMSUJfRlNDQU5GQAorR05VTElCX0ZTRUVLID0gQEdOVUxJQl9GU0VFS0AKK0dOVUxJQl9GU0VFS08gPSBAR05VTElCX0ZTRUVLT0AKK0dOVUxJQl9GU1RBVCA9IEBHTlVMSUJfRlNUQVRACitHTlVMSUJfRlNUQVRBVCA9IEBHTlVMSUJfRlNUQVRBVEAKK0dOVUxJQl9GU1lOQyA9IEBHTlVMSUJfRlNZTkNACitHTlVMSUJfRlRFTEwgPSBAR05VTElCX0ZURUxMQAorR05VTElCX0ZURUxMTyA9IEBHTlVMSUJfRlRFTExPQAorR05VTElCX0ZUUlVOQ0FURSA9IEBHTlVMSUJfRlRSVU5DQVRFQAorR05VTElCX0ZVVElNRU5TID0gQEdOVUxJQl9GVVRJTUVOU0AKK0dOVUxJQl9GV1JJVEUgPSBAR05VTElCX0ZXUklURUAKK0dOVUxJQl9HRVRDID0gQEdOVUxJQl9HRVRDQAorR05VTElCX0dFVENIQVIgPSBAR05VTElCX0dFVENIQVJACitHTlVMSUJfR0VUQ1dEID0gQEdOVUxJQl9HRVRDV0RACitHTlVMSUJfR0VUREVMSU0gPSBAR05VTElCX0dFVERFTElNQAorR05VTElCX0dFVERPTUFJTk5BTUUgPSBAR05VTElCX0dFVERPTUFJTk5BTUVACitHTlVMSUJfR0VURFRBQkxFU0laRSA9IEBHTlVMSUJfR0VURFRBQkxFU0laRUAKK0dOVUxJQl9HRVRHUk9VUFMgPSBAR05VTElCX0dFVEdST1VQU0AKK0dOVUxJQl9HRVRIT1NUTkFNRSA9IEBHTlVMSUJfR0VUSE9TVE5BTUVACitHTlVMSUJfR0VUTElORSA9IEBHTlVMSUJfR0VUTElORUAKK0dOVUxJQl9HRVRMT0FEQVZHID0gQEdOVUxJQl9HRVRMT0FEQVZHQAorR05VTElCX0dFVExPR0lOID0gQEdOVUxJQl9HRVRMT0dJTkAKK0dOVUxJQl9HRVRMT0dJTl9SID0gQEdOVUxJQl9HRVRMT0dJTl9SQAorR05VTElCX0dFVFBBR0VTSVpFID0gQEdOVUxJQl9HRVRQQUdFU0laRUAKK0dOVUxJQl9HRVRTVUJPUFQgPSBAR05VTElCX0dFVFNVQk9QVEAKK0dOVUxJQl9HRVRVU0VSU0hFTEwgPSBAR05VTElCX0dFVFVTRVJTSEVMTEAKK0dOVUxJQl9HTF9VTklTVERfSF9HRVRPUFQgPSBAR05VTElCX0dMX1VOSVNURF9IX0dFVE9QVEAKK0dOVUxJQl9HUkFOVFBUID0gQEdOVUxJQl9HUkFOVFBUQAorR05VTElCX0dST1VQX01FTUJFUiA9IEBHTlVMSUJfR1JPVVBfTUVNQkVSQAorR05VTElCX0hZUE9UID0gQEdOVUxJQl9IWVBPVEAKK0dOVUxJQl9IWVBPVEYgPSBAR05VTElCX0hZUE9URkAKK0dOVUxJQl9IWVBPVEwgPSBAR05VTElCX0hZUE9UTEAKK0dOVUxJQl9JTE9HQiA9IEBHTlVMSUJfSUxPR0JACitHTlVMSUJfSUxPR0JGID0gQEdOVUxJQl9JTE9HQkZACitHTlVMSUJfSUxPR0JMID0gQEdOVUxJQl9JTE9HQkxACitHTlVMSUJfSU1BWEFCUyA9IEBHTlVMSUJfSU1BWEFCU0AKK0dOVUxJQl9JTUFYRElWID0gQEdOVUxJQl9JTUFYRElWQAorR05VTElCX0lTQVRUWSA9IEBHTlVMSUJfSVNBVFRZQAorR05VTElCX0lTRklOSVRFID0gQEdOVUxJQl9JU0ZJTklURUAKK0dOVUxJQl9JU0lORiA9IEBHTlVMSUJfSVNJTkZACitHTlVMSUJfSVNOQU4gPSBAR05VTElCX0lTTkFOQAorR05VTElCX0lTTkFORCA9IEBHTlVMSUJfSVNOQU5EQAorR05VTElCX0lTTkFORiA9IEBHTlVMSUJfSVNOQU5GQAorR05VTElCX0lTTkFOTCA9IEBHTlVMSUJfSVNOQU5MQAorR05VTElCX0lTV0JMQU5LID0gQEdOVUxJQl9JU1dCTEFOS0AKK0dOVUxJQl9JU1dDVFlQRSA9IEBHTlVMSUJfSVNXQ1RZUEVACitHTlVMSUJfTENITU9EID0gQEdOVUxJQl9MQ0hNT0RACitHTlVMSUJfTENIT1dOID0gQEdOVUxJQl9MQ0hPV05ACitHTlVMSUJfTERFWFBGID0gQEdOVUxJQl9MREVYUEZACitHTlVMSUJfTERFWFBMID0gQEdOVUxJQl9MREVYUExACitHTlVMSUJfTElOSyA9IEBHTlVMSUJfTElOS0AKK0dOVUxJQl9MSU5LQVQgPSBAR05VTElCX0xJTktBVEAKK0dOVUxJQl9MT0cgPSBAR05VTElCX0xPR0AKK0dOVUxJQl9MT0cxMCA9IEBHTlVMSUJfTE9HMTBACitHTlVMSUJfTE9HMTBGID0gQEdOVUxJQl9MT0cxMEZACitHTlVMSUJfTE9HMTBMID0gQEdOVUxJQl9MT0cxMExACitHTlVMSUJfTE9HMVAgPSBAR05VTElCX0xPRzFQQAorR05VTElCX0xPRzFQRiA9IEBHTlVMSUJfTE9HMVBGQAorR05VTElCX0xPRzFQTCA9IEBHTlVMSUJfTE9HMVBMQAorR05VTElCX0xPRzIgPSBAR05VTElCX0xPRzJACitHTlVMSUJfTE9HMkYgPSBAR05VTElCX0xPRzJGQAorR05VTElCX0xPRzJMID0gQEdOVUxJQl9MT0cyTEAKK0dOVUxJQl9MT0dCID0gQEdOVUxJQl9MT0dCQAorR05VTElCX0xPR0JGID0gQEdOVUxJQl9MT0dCRkAKK0dOVUxJQl9MT0dCTCA9IEBHTlVMSUJfTE9HQkxACitHTlVMSUJfTE9HRiA9IEBHTlVMSUJfTE9HRkAKK0dOVUxJQl9MT0dMID0gQEdOVUxJQl9MT0dMQAorR05VTElCX0xTRUVLID0gQEdOVUxJQl9MU0VFS0AKK0dOVUxJQl9MU1RBVCA9IEBHTlVMSUJfTFNUQVRACitHTlVMSUJfTUFMTE9DX1BPU0lYID0gQEdOVUxJQl9NQUxMT0NfUE9TSVhACitHTlVMSUJfTUJSTEVOID0gQEdOVUxJQl9NQlJMRU5ACitHTlVMSUJfTUJSVE9XQyA9IEBHTlVMSUJfTUJSVE9XQ0AKK0dOVUxJQl9NQlNDQVNFQ01QID0gQEdOVUxJQl9NQlNDQVNFQ01QQAorR05VTElCX01CU0NBU0VTVFIgPSBAR05VTElCX01CU0NBU0VTVFJACitHTlVMSUJfTUJTQ0hSID0gQEdOVUxJQl9NQlNDSFJACitHTlVMSUJfTUJTQ1NQTiA9IEBHTlVMSUJfTUJTQ1NQTkAKK0dOVUxJQl9NQlNJTklUID0gQEdOVUxJQl9NQlNJTklUQAorR05VTElCX01CU0xFTiA9IEBHTlVMSUJfTUJTTEVOQAorR05VTElCX01CU05DQVNFQ01QID0gQEdOVUxJQl9NQlNOQ0FTRUNNUEAKK0dOVUxJQl9NQlNOTEVOID0gQEdOVUxJQl9NQlNOTEVOQAorR05VTElCX01CU05SVE9XQ1MgPSBAR05VTElCX01CU05SVE9XQ1NACitHTlVMSUJfTUJTUEJSSyA9IEBHTlVMSUJfTUJTUEJSS0AKK0dOVUxJQl9NQlNQQ0FTRUNNUCA9IEBHTlVMSUJfTUJTUENBU0VDTVBACitHTlVMSUJfTUJTUkNIUiA9IEBHTlVMSUJfTUJTUkNIUkAKK0dOVUxJQl9NQlNSVE9XQ1MgPSBAR05VTElCX01CU1JUT1dDU0AKK0dOVUxJQl9NQlNTRVAgPSBAR05VTElCX01CU1NFUEAKK0dOVUxJQl9NQlNTUE4gPSBAR05VTElCX01CU1NQTkAKK0dOVUxJQl9NQlNTVFIgPSBAR05VTElCX01CU1NUUkAKK0dOVUxJQl9NQlNUT0tfUiA9IEBHTlVMSUJfTUJTVE9LX1JACitHTlVMSUJfTUJUT1dDID0gQEdOVUxJQl9NQlRPV0NACitHTlVMSUJfTUVNQ0hSID0gQEdOVUxJQl9NRU1DSFJACitHTlVMSUJfTUVNTUVNID0gQEdOVUxJQl9NRU1NRU1ACitHTlVMSUJfTUVNUENQWSA9IEBHTlVMSUJfTUVNUENQWUAKK0dOVUxJQl9NRU1SQ0hSID0gQEdOVUxJQl9NRU1SQ0hSQAorR05VTElCX01LRElSQVQgPSBAR05VTElCX01LRElSQVRACitHTlVMSUJfTUtEVEVNUCA9IEBHTlVMSUJfTUtEVEVNUEAKK0dOVUxJQl9NS0ZJRk8gPSBAR05VTElCX01LRklGT0AKK0dOVUxJQl9NS0ZJRk9BVCA9IEBHTlVMSUJfTUtGSUZPQVRACitHTlVMSUJfTUtOT0QgPSBAR05VTElCX01LTk9EQAorR05VTElCX01LTk9EQVQgPSBAR05VTElCX01LTk9EQVRACitHTlVMSUJfTUtPU1RFTVAgPSBAR05VTElCX01LT1NURU1QQAorR05VTElCX01LT1NURU1QUyA9IEBHTlVMSUJfTUtPU1RFTVBTQAorR05VTElCX01LU1RFTVAgPSBAR05VTElCX01LU1RFTVBACitHTlVMSUJfTUtTVEVNUFMgPSBAR05VTElCX01LU1RFTVBTQAorR05VTElCX01LVElNRSA9IEBHTlVMSUJfTUtUSU1FQAorR05VTElCX01PREYgPSBAR05VTElCX01PREZACitHTlVMSUJfTU9ERkYgPSBAR05VTElCX01PREZGQAorR05VTElCX01PREZMID0gQEdOVUxJQl9NT0RGTEAKK0dOVUxJQl9OQU5PU0xFRVAgPSBAR05VTElCX05BTk9TTEVFUEAKK0dOVUxJQl9OT05CTE9DS0lORyA9IEBHTlVMSUJfTk9OQkxPQ0tJTkdACitHTlVMSUJfT0JTVEFDS19QUklOVEYgPSBAR05VTElCX09CU1RBQ0tfUFJJTlRGQAorR05VTElCX09CU1RBQ0tfUFJJTlRGX1BPU0lYID0gQEdOVUxJQl9PQlNUQUNLX1BSSU5URl9QT1NJWEAKK0dOVUxJQl9PUEVOID0gQEdOVUxJQl9PUEVOQAorR05VTElCX09QRU5BVCA9IEBHTlVMSUJfT1BFTkFUQAorR05VTElCX1BDTE9TRSA9IEBHTlVMSUJfUENMT1NFQAorR05VTElCX1BFUlJPUiA9IEBHTlVMSUJfUEVSUk9SQAorR05VTElCX1BJUEUgPSBAR05VTElCX1BJUEVACitHTlVMSUJfUElQRTIgPSBAR05VTElCX1BJUEUyQAorR05VTElCX1BPUEVOID0gQEdOVUxJQl9QT1BFTkAKK0dOVUxJQl9QT1NJWF9PUEVOUFQgPSBAR05VTElCX1BPU0lYX09QRU5QVEAKK0dOVUxJQl9QT1NJWF9TUEFXTiA9IEBHTlVMSUJfUE9TSVhfU1BBV05ACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0RFU1RST1kgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9ERVNUUk9ZQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRGTEFHUyA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVEZMQUdTQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRQR1JPVVAgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRQR1JPVVBACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNDSEVEUEFSQU0gPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBBUkFNQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBPTElDWSA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNDSEVEUE9MSUNZQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdERUZBVUxUID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0lHREVGQVVMVEAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0lHTUFTSyA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNJR01BU0tACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0lOSVQgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9JTklUQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRGTEFHUyA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVEZMQUdTQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRQR1JPVVAgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRQR1JPVVBACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNDSEVEUEFSQU0gPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTQ0hFRFBBUkFNQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTQ0hFRFBPTElDWSA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNDSEVEUE9MSUNZQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTSUdERUZBVUxUID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0lHREVGQVVMVEAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0lHTUFTSyA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNJR01BU0tACitHTlVMSUJfUE9TSVhfU1BBV05QID0gQEdOVUxJQl9QT1NJWF9TUEFXTlBACitHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERENMT1NFID0gQEdOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQUREQ0xPU0VACitHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDIgPSBAR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BREREVVAyQAorR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERPUEVOID0gQEdOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURET1BFTkAKK0dOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfREVTVFJPWSA9IEBHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0RFU1RST1lACitHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0lOSVQgPSBAR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19JTklUQAorR05VTElCX1BPV0YgPSBAR05VTElCX1BPV0ZACitHTlVMSUJfUFJFQUQgPSBAR05VTElCX1BSRUFEQAorR05VTElCX1BSSU5URiA9IEBHTlVMSUJfUFJJTlRGQAorR05VTElCX1BSSU5URl9QT1NJWCA9IEBHTlVMSUJfUFJJTlRGX1BPU0lYQAorR05VTElCX1BUSFJFQURfU0lHTUFTSyA9IEBHTlVMSUJfUFRIUkVBRF9TSUdNQVNLQAorR05VTElCX1BUU05BTUUgPSBAR05VTElCX1BUU05BTUVACitHTlVMSUJfUFRTTkFNRV9SID0gQEdOVUxJQl9QVFNOQU1FX1JACitHTlVMSUJfUFVUQyA9IEBHTlVMSUJfUFVUQ0AKK0dOVUxJQl9QVVRDSEFSID0gQEdOVUxJQl9QVVRDSEFSQAorR05VTElCX1BVVEVOViA9IEBHTlVMSUJfUFVURU5WQAorR05VTElCX1BVVFMgPSBAR05VTElCX1BVVFNACitHTlVMSUJfUFdSSVRFID0gQEdOVUxJQl9QV1JJVEVACitHTlVMSUJfUkFJU0UgPSBAR05VTElCX1JBSVNFQAorR05VTElCX1JBTkRPTSA9IEBHTlVMSUJfUkFORE9NQAorR05VTElCX1JBTkRPTV9SID0gQEdOVUxJQl9SQU5ET01fUkAKK0dOVUxJQl9SQVdNRU1DSFIgPSBAR05VTElCX1JBV01FTUNIUkAKK0dOVUxJQl9SRUFEID0gQEdOVUxJQl9SRUFEQAorR05VTElCX1JFQURMSU5LID0gQEdOVUxJQl9SRUFETElOS0AKK0dOVUxJQl9SRUFETElOS0FUID0gQEdOVUxJQl9SRUFETElOS0FUQAorR05VTElCX1JFQUxMT0NfUE9TSVggPSBAR05VTElCX1JFQUxMT0NfUE9TSVhACitHTlVMSUJfUkVBTFBBVEggPSBAR05VTElCX1JFQUxQQVRIQAorR05VTElCX1JFTUFJTkRFUiA9IEBHTlVMSUJfUkVNQUlOREVSQAorR05VTElCX1JFTUFJTkRFUkYgPSBAR05VTElCX1JFTUFJTkRFUkZACitHTlVMSUJfUkVNQUlOREVSTCA9IEBHTlVMSUJfUkVNQUlOREVSTEAKK0dOVUxJQl9SRU1PVkUgPSBAR05VTElCX1JFTU9WRUAKK0dOVUxJQl9SRU5BTUUgPSBAR05VTElCX1JFTkFNRUAKK0dOVUxJQl9SRU5BTUVBVCA9IEBHTlVMSUJfUkVOQU1FQVRACitHTlVMSUJfUklOVCA9IEBHTlVMSUJfUklOVEAKK0dOVUxJQl9SSU5URiA9IEBHTlVMSUJfUklOVEZACitHTlVMSUJfUklOVEwgPSBAR05VTElCX1JJTlRMQAorR05VTElCX1JNRElSID0gQEdOVUxJQl9STURJUkAKK0dOVUxJQl9ST1VORCA9IEBHTlVMSUJfUk9VTkRACitHTlVMSUJfUk9VTkRGID0gQEdOVUxJQl9ST1VOREZACitHTlVMSUJfUk9VTkRMID0gQEdOVUxJQl9ST1VORExACitHTlVMSUJfUlBNQVRDSCA9IEBHTlVMSUJfUlBNQVRDSEAKK0dOVUxJQl9TQ0FORiA9IEBHTlVMSUJfU0NBTkZACitHTlVMSUJfU0VURU5WID0gQEdOVUxJQl9TRVRFTlZACitHTlVMSUJfU0VUSE9TVE5BTUUgPSBAR05VTElCX1NFVEhPU1ROQU1FQAorR05VTElCX1NJR0FDVElPTiA9IEBHTlVMSUJfU0lHQUNUSU9OQAorR05VTElCX1NJR05BTF9IX1NJR1BJUEUgPSBAR05VTElCX1NJR05BTF9IX1NJR1BJUEVACitHTlVMSUJfU0lHTkJJVCA9IEBHTlVMSUJfU0lHTkJJVEAKK0dOVUxJQl9TSUdQUk9DTUFTSyA9IEBHTlVMSUJfU0lHUFJPQ01BU0tACitHTlVMSUJfU0lORiA9IEBHTlVMSUJfU0lORkAKK0dOVUxJQl9TSU5IRiA9IEBHTlVMSUJfU0lOSEZACitHTlVMSUJfU0lOTCA9IEBHTlVMSUJfU0lOTEAKK0dOVUxJQl9TTEVFUCA9IEBHTlVMSUJfU0xFRVBACitHTlVMSUJfU05QUklOVEYgPSBAR05VTElCX1NOUFJJTlRGQAorR05VTElCX1NQUklOVEZfUE9TSVggPSBAR05VTElCX1NQUklOVEZfUE9TSVhACitHTlVMSUJfU1FSVEYgPSBAR05VTElCX1NRUlRGQAorR05VTElCX1NRUlRMID0gQEdOVUxJQl9TUVJUTEAKK0dOVUxJQl9TVEFUID0gQEdOVUxJQl9TVEFUQAorR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkcgPSBAR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkdACitHTlVMSUJfU1RESU9fSF9TSUdQSVBFID0gQEdOVUxJQl9TVERJT19IX1NJR1BJUEVACitHTlVMSUJfU1RQQ1BZID0gQEdOVUxJQl9TVFBDUFlACitHTlVMSUJfU1RQTkNQWSA9IEBHTlVMSUJfU1RQTkNQWUAKK0dOVUxJQl9TVFJDQVNFU1RSID0gQEdOVUxJQl9TVFJDQVNFU1RSQAorR05VTElCX1NUUkNIUk5VTCA9IEBHTlVMSUJfU1RSQ0hSTlVMQAorR05VTElCX1NUUkRVUCA9IEBHTlVMSUJfU1RSRFVQQAorR05VTElCX1NUUkVSUk9SID0gQEdOVUxJQl9TVFJFUlJPUkAKK0dOVUxJQl9TVFJFUlJPUl9SID0gQEdOVUxJQl9TVFJFUlJPUl9SQAorR05VTElCX1NUUk5DQVQgPSBAR05VTElCX1NUUk5DQVRACitHTlVMSUJfU1RSTkRVUCA9IEBHTlVMSUJfU1RSTkRVUEAKK0dOVUxJQl9TVFJOTEVOID0gQEdOVUxJQl9TVFJOTEVOQAorR05VTElCX1NUUlBCUksgPSBAR05VTElCX1NUUlBCUktACitHTlVMSUJfU1RSUFRJTUUgPSBAR05VTElCX1NUUlBUSU1FQAorR05VTElCX1NUUlNFUCA9IEBHTlVMSUJfU1RSU0VQQAorR05VTElCX1NUUlNJR05BTCA9IEBHTlVMSUJfU1RSU0lHTkFMQAorR05VTElCX1NUUlNUUiA9IEBHTlVMSUJfU1RSU1RSQAorR05VTElCX1NUUlRPRCA9IEBHTlVMSUJfU1RSVE9EQAorR05VTElCX1NUUlRPSU1BWCA9IEBHTlVMSUJfU1RSVE9JTUFYQAorR05VTElCX1NUUlRPS19SID0gQEdOVUxJQl9TVFJUT0tfUkAKK0dOVUxJQl9TVFJUT0xMID0gQEdOVUxJQl9TVFJUT0xMQAorR05VTElCX1NUUlRPVUxMID0gQEdOVUxJQl9TVFJUT1VMTEAKK0dOVUxJQl9TVFJUT1VNQVggPSBAR05VTElCX1NUUlRPVU1BWEAKK0dOVUxJQl9TVFJWRVJTQ01QID0gQEdOVUxJQl9TVFJWRVJTQ01QQAorR05VTElCX1NZTUxJTksgPSBAR05VTElCX1NZTUxJTktACitHTlVMSUJfU1lNTElOS0FUID0gQEdOVUxJQl9TWU1MSU5LQVRACitHTlVMSUJfU1lTVEVNX1BPU0lYID0gQEdOVUxJQl9TWVNURU1fUE9TSVhACitHTlVMSUJfVEFORiA9IEBHTlVMSUJfVEFORkAKK0dOVUxJQl9UQU5IRiA9IEBHTlVMSUJfVEFOSEZACitHTlVMSUJfVEFOTCA9IEBHTlVMSUJfVEFOTEAKK0dOVUxJQl9USU1FR00gPSBAR05VTElCX1RJTUVHTUAKK0dOVUxJQl9USU1FX1IgPSBAR05VTElCX1RJTUVfUkAKK0dOVUxJQl9UTVBGSUxFID0gQEdOVUxJQl9UTVBGSUxFQAorR05VTElCX1RPV0NUUkFOUyA9IEBHTlVMSUJfVE9XQ1RSQU5TQAorR05VTElCX1RSVU5DID0gQEdOVUxJQl9UUlVOQ0AKK0dOVUxJQl9UUlVOQ0YgPSBAR05VTElCX1RSVU5DRkAKK0dOVUxJQl9UUlVOQ0wgPSBAR05VTElCX1RSVU5DTEAKK0dOVUxJQl9UVFlOQU1FX1IgPSBAR05VTElCX1RUWU5BTUVfUkAKK0dOVUxJQl9VTklTVERfSF9OT05CTE9DS0lORyA9IEBHTlVMSUJfVU5JU1REX0hfTk9OQkxPQ0tJTkdACitHTlVMSUJfVU5JU1REX0hfU0lHUElQRSA9IEBHTlVMSUJfVU5JU1REX0hfU0lHUElQRUAKK0dOVUxJQl9VTkxJTksgPSBAR05VTElCX1VOTElOS0AKK0dOVUxJQl9VTkxJTktBVCA9IEBHTlVMSUJfVU5MSU5LQVRACitHTlVMSUJfVU5MT0NLUFQgPSBAR05VTElCX1VOTE9DS1BUQAorR05VTElCX1VOU0VURU5WID0gQEdOVUxJQl9VTlNFVEVOVkAKK0dOVUxJQl9VU0xFRVAgPSBAR05VTElCX1VTTEVFUEAKK0dOVUxJQl9VVElNRU5TQVQgPSBAR05VTElCX1VUSU1FTlNBVEAKK0dOVUxJQl9WQVNQUklOVEYgPSBAR05VTElCX1ZBU1BSSU5URkAKK0dOVUxJQl9WRFBSSU5URiA9IEBHTlVMSUJfVkRQUklOVEZACitHTlVMSUJfVkZQUklOVEYgPSBAR05VTElCX1ZGUFJJTlRGQAorR05VTElCX1ZGUFJJTlRGX1BPU0lYID0gQEdOVUxJQl9WRlBSSU5URl9QT1NJWEAKK0dOVUxJQl9WRlNDQU5GID0gQEdOVUxJQl9WRlNDQU5GQAorR05VTElCX1ZQUklOVEYgPSBAR05VTElCX1ZQUklOVEZACitHTlVMSUJfVlBSSU5URl9QT1NJWCA9IEBHTlVMSUJfVlBSSU5URl9QT1NJWEAKK0dOVUxJQl9WU0NBTkYgPSBAR05VTElCX1ZTQ0FORkAKK0dOVUxJQl9WU05QUklOVEYgPSBAR05VTElCX1ZTTlBSSU5URkAKK0dOVUxJQl9WU1BSSU5URl9QT1NJWCA9IEBHTlVMSUJfVlNQUklOVEZfUE9TSVhACitHTlVMSUJfV0FJVFBJRCA9IEBHTlVMSUJfV0FJVFBJREAKK0dOVUxJQl9XQ1BDUFkgPSBAR05VTElCX1dDUENQWUAKK0dOVUxJQl9XQ1BOQ1BZID0gQEdOVUxJQl9XQ1BOQ1BZQAorR05VTElCX1dDUlRPTUIgPSBAR05VTElCX1dDUlRPTUJACitHTlVMSUJfV0NTQ0FTRUNNUCA9IEBHTlVMSUJfV0NTQ0FTRUNNUEAKK0dOVUxJQl9XQ1NDQVQgPSBAR05VTElCX1dDU0NBVEAKK0dOVUxJQl9XQ1NDSFIgPSBAR05VTElCX1dDU0NIUkAKK0dOVUxJQl9XQ1NDTVAgPSBAR05VTElCX1dDU0NNUEAKK0dOVUxJQl9XQ1NDT0xMID0gQEdOVUxJQl9XQ1NDT0xMQAorR05VTElCX1dDU0NQWSA9IEBHTlVMSUJfV0NTQ1BZQAorR05VTElCX1dDU0NTUE4gPSBAR05VTElCX1dDU0NTUE5ACitHTlVMSUJfV0NTRFVQID0gQEdOVUxJQl9XQ1NEVVBACitHTlVMSUJfV0NTTEVOID0gQEdOVUxJQl9XQ1NMRU5ACitHTlVMSUJfV0NTTkNBU0VDTVAgPSBAR05VTElCX1dDU05DQVNFQ01QQAorR05VTElCX1dDU05DQVQgPSBAR05VTElCX1dDU05DQVRACitHTlVMSUJfV0NTTkNNUCA9IEBHTlVMSUJfV0NTTkNNUEAKK0dOVUxJQl9XQ1NOQ1BZID0gQEdOVUxJQl9XQ1NOQ1BZQAorR05VTElCX1dDU05MRU4gPSBAR05VTElCX1dDU05MRU5ACitHTlVMSUJfV0NTTlJUT01CUyA9IEBHTlVMSUJfV0NTTlJUT01CU0AKK0dOVUxJQl9XQ1NQQlJLID0gQEdOVUxJQl9XQ1NQQlJLQAorR05VTElCX1dDU1JDSFIgPSBAR05VTElCX1dDU1JDSFJACitHTlVMSUJfV0NTUlRPTUJTID0gQEdOVUxJQl9XQ1NSVE9NQlNACitHTlVMSUJfV0NTU1BOID0gQEdOVUxJQl9XQ1NTUE5ACitHTlVMSUJfV0NTU1RSID0gQEdOVUxJQl9XQ1NTVFJACitHTlVMSUJfV0NTVE9LID0gQEdOVUxJQl9XQ1NUT0tACitHTlVMSUJfV0NTV0lEVEggPSBAR05VTElCX1dDU1dJRFRIQAorR05VTElCX1dDU1hGUk0gPSBAR05VTElCX1dDU1hGUk1ACitHTlVMSUJfV0NUT0IgPSBAR05VTElCX1dDVE9CQAorR05VTElCX1dDVE9NQiA9IEBHTlVMSUJfV0NUT01CQAorR05VTElCX1dDVFJBTlMgPSBAR05VTElCX1dDVFJBTlNACitHTlVMSUJfV0NUWVBFID0gQEdOVUxJQl9XQ1RZUEVACitHTlVMSUJfV0NXSURUSCA9IEBHTlVMSUJfV0NXSURUSEAKK0dOVUxJQl9XTUVNQ0hSID0gQEdOVUxJQl9XTUVNQ0hSQAorR05VTElCX1dNRU1DTVAgPSBAR05VTElCX1dNRU1DTVBACitHTlVMSUJfV01FTUNQWSA9IEBHTlVMSUJfV01FTUNQWUAKK0dOVUxJQl9XTUVNTU9WRSA9IEBHTlVMSUJfV01FTU1PVkVACitHTlVMSUJfV01FTVNFVCA9IEBHTlVMSUJfV01FTVNFVEAKK0dOVUxJQl9XUklURSA9IEBHTlVMSUJfV1JJVEVACitHTlVMSUJfX0VYSVQgPSBAR05VTElCX19FWElUQAorR1JFUCA9IEBHUkVQQAorSEFWRV9BQ09TRiA9IEBIQVZFX0FDT1NGQAorSEFWRV9BQ09TTCA9IEBIQVZFX0FDT1NMQAorSEFWRV9BU0lORiA9IEBIQVZFX0FTSU5GQAorSEFWRV9BU0lOTCA9IEBIQVZFX0FTSU5MQAorSEFWRV9BVEFOMkYgPSBASEFWRV9BVEFOMkZACitIQVZFX0FUQU5GID0gQEhBVkVfQVRBTkZACitIQVZFX0FUQU5MID0gQEhBVkVfQVRBTkxACitIQVZFX0FUT0xMID0gQEhBVkVfQVRPTExACitIQVZFX0JUT1dDID0gQEhBVkVfQlRPV0NACitIQVZFX0NBTk9OSUNBTElaRV9GSUxFX05BTUUgPSBASEFWRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FQAorSEFWRV9DQlJUID0gQEhBVkVfQ0JSVEAKK0hBVkVfQ0JSVEYgPSBASEFWRV9DQlJURkAKK0hBVkVfQ0JSVEwgPSBASEFWRV9DQlJUTEAKK0hBVkVfQ0hPV04gPSBASEFWRV9DSE9XTkAKK0hBVkVfQ09QWVNJR04gPSBASEFWRV9DT1BZU0lHTkAKK0hBVkVfQ09QWVNJR05MID0gQEhBVkVfQ09QWVNJR05MQAorSEFWRV9DT1NGID0gQEhBVkVfQ09TRkAKK0hBVkVfQ09TSEYgPSBASEFWRV9DT1NIRkAKK0hBVkVfQ09TTCA9IEBIQVZFX0NPU0xACitIQVZFX0RFQ0xfQUNPU0wgPSBASEFWRV9ERUNMX0FDT1NMQAorSEFWRV9ERUNMX0FTSU5MID0gQEhBVkVfREVDTF9BU0lOTEAKK0hBVkVfREVDTF9BVEFOTCA9IEBIQVZFX0RFQ0xfQVRBTkxACitIQVZFX0RFQ0xfQ0JSVEYgPSBASEFWRV9ERUNMX0NCUlRGQAorSEFWRV9ERUNMX0NCUlRMID0gQEhBVkVfREVDTF9DQlJUTEAKK0hBVkVfREVDTF9DRUlMRiA9IEBIQVZFX0RFQ0xfQ0VJTEZACitIQVZFX0RFQ0xfQ0VJTEwgPSBASEFWRV9ERUNMX0NFSUxMQAorSEFWRV9ERUNMX0NPUFlTSUdORiA9IEBIQVZFX0RFQ0xfQ09QWVNJR05GQAorSEFWRV9ERUNMX0NPU0wgPSBASEFWRV9ERUNMX0NPU0xACitIQVZFX0RFQ0xfRU5WSVJPTiA9IEBIQVZFX0RFQ0xfRU5WSVJPTkAKK0hBVkVfREVDTF9FWFAyID0gQEhBVkVfREVDTF9FWFAyQAorSEFWRV9ERUNMX0VYUDJGID0gQEhBVkVfREVDTF9FWFAyRkAKK0hBVkVfREVDTF9FWFAyTCA9IEBIQVZFX0RFQ0xfRVhQMkxACitIQVZFX0RFQ0xfRVhQTCA9IEBIQVZFX0RFQ0xfRVhQTEAKK0hBVkVfREVDTF9FWFBNMUwgPSBASEFWRV9ERUNMX0VYUE0xTEAKK0hBVkVfREVDTF9GQ0hESVIgPSBASEFWRV9ERUNMX0ZDSERJUkAKK0hBVkVfREVDTF9GREFUQVNZTkMgPSBASEFWRV9ERUNMX0ZEQVRBU1lOQ0AKK0hBVkVfREVDTF9GTE9PUkYgPSBASEFWRV9ERUNMX0ZMT09SRkAKK0hBVkVfREVDTF9GTE9PUkwgPSBASEFWRV9ERUNMX0ZMT09STEAKK0hBVkVfREVDTF9GUFVSR0UgPSBASEFWRV9ERUNMX0ZQVVJHRUAKK0hBVkVfREVDTF9GUkVYUEwgPSBASEFWRV9ERUNMX0ZSRVhQTEAKK0hBVkVfREVDTF9GU0VFS08gPSBASEFWRV9ERUNMX0ZTRUVLT0AKK0hBVkVfREVDTF9GVEVMTE8gPSBASEFWRV9ERUNMX0ZURUxMT0AKK0hBVkVfREVDTF9HRVRERUxJTSA9IEBIQVZFX0RFQ0xfR0VUREVMSU1ACitIQVZFX0RFQ0xfR0VURE9NQUlOTkFNRSA9IEBIQVZFX0RFQ0xfR0VURE9NQUlOTkFNRUAKK0hBVkVfREVDTF9HRVRMSU5FID0gQEhBVkVfREVDTF9HRVRMSU5FQAorSEFWRV9ERUNMX0dFVExPQURBVkcgPSBASEFWRV9ERUNMX0dFVExPQURBVkdACitIQVZFX0RFQ0xfR0VUTE9HSU5fUiA9IEBIQVZFX0RFQ0xfR0VUTE9HSU5fUkAKK0hBVkVfREVDTF9HRVRQQUdFU0laRSA9IEBIQVZFX0RFQ0xfR0VUUEFHRVNJWkVACitIQVZFX0RFQ0xfR0VUVVNFUlNIRUxMID0gQEhBVkVfREVDTF9HRVRVU0VSU0hFTExACitIQVZFX0RFQ0xfSU1BWEFCUyA9IEBIQVZFX0RFQ0xfSU1BWEFCU0AKK0hBVkVfREVDTF9JTUFYRElWID0gQEhBVkVfREVDTF9JTUFYRElWQAorSEFWRV9ERUNMX0xERVhQTCA9IEBIQVZFX0RFQ0xfTERFWFBMQAorSEFWRV9ERUNMX0xPQ0FMVElNRV9SID0gQEhBVkVfREVDTF9MT0NBTFRJTUVfUkAKK0hBVkVfREVDTF9MT0cxMEwgPSBASEFWRV9ERUNMX0xPRzEwTEAKK0hBVkVfREVDTF9MT0cyID0gQEhBVkVfREVDTF9MT0cyQAorSEFWRV9ERUNMX0xPRzJGID0gQEhBVkVfREVDTF9MT0cyRkAKK0hBVkVfREVDTF9MT0cyTCA9IEBIQVZFX0RFQ0xfTE9HMkxACitIQVZFX0RFQ0xfTE9HQiA9IEBIQVZFX0RFQ0xfTE9HQkAKK0hBVkVfREVDTF9MT0dMID0gQEhBVkVfREVDTF9MT0dMQAorSEFWRV9ERUNMX01FTU1FTSA9IEBIQVZFX0RFQ0xfTUVNTUVNQAorSEFWRV9ERUNMX01FTVJDSFIgPSBASEFWRV9ERUNMX01FTVJDSFJACitIQVZFX0RFQ0xfT0JTVEFDS19QUklOVEYgPSBASEFWRV9ERUNMX09CU1RBQ0tfUFJJTlRGQAorSEFWRV9ERUNMX1JFTUFJTkRFUiA9IEBIQVZFX0RFQ0xfUkVNQUlOREVSQAorSEFWRV9ERUNMX1JFTUFJTkRFUkwgPSBASEFWRV9ERUNMX1JFTUFJTkRFUkxACitIQVZFX0RFQ0xfUklOVEYgPSBASEFWRV9ERUNMX1JJTlRGQAorSEFWRV9ERUNMX1JPVU5EID0gQEhBVkVfREVDTF9ST1VOREAKK0hBVkVfREVDTF9ST1VOREYgPSBASEFWRV9ERUNMX1JPVU5ERkAKK0hBVkVfREVDTF9ST1VOREwgPSBASEFWRV9ERUNMX1JPVU5ETEAKK0hBVkVfREVDTF9TRVRFTlYgPSBASEFWRV9ERUNMX1NFVEVOVkAKK0hBVkVfREVDTF9TRVRIT1NUTkFNRSA9IEBIQVZFX0RFQ0xfU0VUSE9TVE5BTUVACitIQVZFX0RFQ0xfU0lOTCA9IEBIQVZFX0RFQ0xfU0lOTEAKK0hBVkVfREVDTF9TTlBSSU5URiA9IEBIQVZFX0RFQ0xfU05QUklOVEZACitIQVZFX0RFQ0xfU1FSVEwgPSBASEFWRV9ERUNMX1NRUlRMQAorSEFWRV9ERUNMX1NUUkRVUCA9IEBIQVZFX0RFQ0xfU1RSRFVQQAorSEFWRV9ERUNMX1NUUkVSUk9SX1IgPSBASEFWRV9ERUNMX1NUUkVSUk9SX1JACitIQVZFX0RFQ0xfU1RSTkRVUCA9IEBIQVZFX0RFQ0xfU1RSTkRVUEAKK0hBVkVfREVDTF9TVFJOTEVOID0gQEhBVkVfREVDTF9TVFJOTEVOQAorSEFWRV9ERUNMX1NUUlNJR05BTCA9IEBIQVZFX0RFQ0xfU1RSU0lHTkFMQAorSEFWRV9ERUNMX1NUUlRPSU1BWCA9IEBIQVZFX0RFQ0xfU1RSVE9JTUFYQAorSEFWRV9ERUNMX1NUUlRPS19SID0gQEhBVkVfREVDTF9TVFJUT0tfUkAKK0hBVkVfREVDTF9TVFJUT1VNQVggPSBASEFWRV9ERUNMX1NUUlRPVU1BWEAKK0hBVkVfREVDTF9UQU5MID0gQEhBVkVfREVDTF9UQU5MQAorSEFWRV9ERUNMX1RSVU5DID0gQEhBVkVfREVDTF9UUlVOQ0AKK0hBVkVfREVDTF9UUlVOQ0YgPSBASEFWRV9ERUNMX1RSVU5DRkAKK0hBVkVfREVDTF9UUlVOQ0wgPSBASEFWRV9ERUNMX1RSVU5DTEAKK0hBVkVfREVDTF9UVFlOQU1FX1IgPSBASEFWRV9ERUNMX1RUWU5BTUVfUkAKK0hBVkVfREVDTF9VTlNFVEVOViA9IEBIQVZFX0RFQ0xfVU5TRVRFTlZACitIQVZFX0RFQ0xfVlNOUFJJTlRGID0gQEhBVkVfREVDTF9WU05QUklOVEZACitIQVZFX0RFQ0xfV0NUT0IgPSBASEFWRV9ERUNMX1dDVE9CQAorSEFWRV9ERUNMX1dDV0lEVEggPSBASEFWRV9ERUNMX1dDV0lEVEhACitIQVZFX0RQUklOVEYgPSBASEFWRV9EUFJJTlRGQAorSEFWRV9EVVAyID0gQEhBVkVfRFVQMkAKK0hBVkVfRFVQMyA9IEBIQVZFX0RVUDNACitIQVZFX0VVSURBQ0NFU1MgPSBASEFWRV9FVUlEQUNDRVNTQAorSEFWRV9FWFBGID0gQEhBVkVfRVhQRkAKK0hBVkVfRVhQTCA9IEBIQVZFX0VYUExACitIQVZFX0VYUE0xID0gQEhBVkVfRVhQTTFACitIQVZFX0VYUE0xRiA9IEBIQVZFX0VYUE0xRkAKK0hBVkVfRkFCU0YgPSBASEFWRV9GQUJTRkAKK0hBVkVfRkFCU0wgPSBASEFWRV9GQUJTTEAKK0hBVkVfRkFDQ0VTU0FUID0gQEhBVkVfRkFDQ0VTU0FUQAorSEFWRV9GQ0hESVIgPSBASEFWRV9GQ0hESVJACitIQVZFX0ZDSE1PREFUID0gQEhBVkVfRkNITU9EQVRACitIQVZFX0ZDSE9XTkFUID0gQEhBVkVfRkNIT1dOQVRACitIQVZFX0ZDTlRMID0gQEhBVkVfRkNOVExACitIQVZFX0ZEQVRBU1lOQyA9IEBIQVZFX0ZEQVRBU1lOQ0AKK0hBVkVfRkVBVFVSRVNfSCA9IEBIQVZFX0ZFQVRVUkVTX0hACitIQVZFX0ZGU0wgPSBASEFWRV9GRlNMQAorSEFWRV9GRlNMTCA9IEBIQVZFX0ZGU0xMQAorSEFWRV9GTUEgPSBASEFWRV9GTUFACitIQVZFX0ZNQUYgPSBASEFWRV9GTUFGQAorSEFWRV9GTUFMID0gQEhBVkVfRk1BTEAKK0hBVkVfRk1PREYgPSBASEFWRV9GTU9ERkAKK0hBVkVfRk1PREwgPSBASEFWRV9GTU9ETEAKK0hBVkVfRlJFWFBGID0gQEhBVkVfRlJFWFBGQAorSEFWRV9GU0VFS08gPSBASEFWRV9GU0VFS09ACitIQVZFX0ZTVEFUQVQgPSBASEFWRV9GU1RBVEFUQAorSEFWRV9GU1lOQyA9IEBIQVZFX0ZTWU5DQAorSEFWRV9GVEVMTE8gPSBASEFWRV9GVEVMTE9ACitIQVZFX0ZUUlVOQ0FURSA9IEBIQVZFX0ZUUlVOQ0FURUAKK0hBVkVfRlVUSU1FTlMgPSBASEFWRV9GVVRJTUVOU0AKK0hBVkVfR0NKX0MgPSBASEFWRV9HQ0pfQ0AKK0hBVkVfR0NKX0lOX1BBVEggPSBASEFWRV9HQ0pfSU5fUEFUSEAKK0hBVkVfR0VURFRBQkxFU0laRSA9IEBIQVZFX0dFVERUQUJMRVNJWkVACitIQVZFX0dFVEdST1VQUyA9IEBIQVZFX0dFVEdST1VQU0AKK0hBVkVfR0VUSE9TVE5BTUUgPSBASEFWRV9HRVRIT1NUTkFNRUAKK0hBVkVfR0VUTE9HSU4gPSBASEFWRV9HRVRMT0dJTkAKK0hBVkVfR0VUT1BUX0ggPSBASEFWRV9HRVRPUFRfSEAKK0hBVkVfR0VUUEFHRVNJWkUgPSBASEFWRV9HRVRQQUdFU0laRUAKK0hBVkVfR0VUU1VCT1BUID0gQEhBVkVfR0VUU1VCT1BUQAorSEFWRV9HSUogPSBASEFWRV9HSUpACitIQVZFX0dJSl9JTl9QQVRIID0gQEhBVkVfR0lKX0lOX1BBVEhACitIQVZFX0dSQU5UUFQgPSBASEFWRV9HUkFOVFBUQAorSEFWRV9HUk9VUF9NRU1CRVIgPSBASEFWRV9HUk9VUF9NRU1CRVJACitIQVZFX0hZUE9URiA9IEBIQVZFX0hZUE9URkAKK0hBVkVfSFlQT1RMID0gQEhBVkVfSFlQT1RMQAorSEFWRV9JTE9HQiA9IEBIQVZFX0lMT0dCQAorSEFWRV9JTE9HQkYgPSBASEFWRV9JTE9HQkZACitIQVZFX0lMT0dCTCA9IEBIQVZFX0lMT0dCTEAKK0hBVkVfSU5UVFlQRVNfSCA9IEBIQVZFX0lOVFRZUEVTX0hACitIQVZFX0lTTkFORCA9IEBIQVZFX0lTTkFOREAKK0hBVkVfSVNOQU5GID0gQEhBVkVfSVNOQU5GQAorSEFWRV9JU05BTkwgPSBASEFWRV9JU05BTkxACitIQVZFX0lTV0JMQU5LID0gQEhBVkVfSVNXQkxBTktACitIQVZFX0lTV0NOVFJMID0gQEhBVkVfSVNXQ05UUkxACitIQVZFX0pBVkEgPSBASEFWRV9KQVZBQAorSEFWRV9KQVZBQyA9IEBIQVZFX0pBVkFDQAorSEFWRV9KQVZBQ19FTlZWQVIgPSBASEFWRV9KQVZBQ19FTlZWQVJACitIQVZFX0pBVkFDX0lOX1BBVEggPSBASEFWRV9KQVZBQ19JTl9QQVRIQAorSEFWRV9KQVZBX0VOVlZBUiA9IEBIQVZFX0pBVkFfRU5WVkFSQAorSEFWRV9KQVZBX0lOX1BBVEggPSBASEFWRV9KQVZBX0lOX1BBVEhACitIQVZFX0pJS0VTID0gQEhBVkVfSklLRVNACitIQVZFX0pJS0VTX0lOX1BBVEggPSBASEFWRV9KSUtFU19JTl9QQVRIQAorSEFWRV9KUkUgPSBASEFWRV9KUkVACitIQVZFX0pSRV9JTl9QQVRIID0gQEhBVkVfSlJFX0lOX1BBVEhACitIQVZFX0pWSUVXID0gQEhBVkVfSlZJRVdACitIQVZFX0pWSUVXX0lOX1BBVEggPSBASEFWRV9KVklFV19JTl9QQVRIQAorSEFWRV9MQ0hNT0QgPSBASEFWRV9MQ0hNT0RACitIQVZFX0xDSE9XTiA9IEBIQVZFX0xDSE9XTkAKK0hBVkVfTERFWFBGID0gQEhBVkVfTERFWFBGQAorSEFWRV9MSU5LID0gQEhBVkVfTElOS0AKK0hBVkVfTElOS0FUID0gQEhBVkVfTElOS0FUQAorSEFWRV9MT0cxMEYgPSBASEFWRV9MT0cxMEZACitIQVZFX0xPRzEwTCA9IEBIQVZFX0xPRzEwTEAKK0hBVkVfTE9HMVAgPSBASEFWRV9MT0cxUEAKK0hBVkVfTE9HMVBGID0gQEhBVkVfTE9HMVBGQAorSEFWRV9MT0cxUEwgPSBASEFWRV9MT0cxUExACitIQVZFX0xPR0JGID0gQEhBVkVfTE9HQkZACitIQVZFX0xPR0JMID0gQEhBVkVfTE9HQkxACitIQVZFX0xPR0YgPSBASEFWRV9MT0dGQAorSEFWRV9MT0dMID0gQEhBVkVfTE9HTEAKK0hBVkVfTE9OR19MT05HX0lOVCA9IEBIQVZFX0xPTkdfTE9OR19JTlRACitIQVZFX0xTVEFUID0gQEhBVkVfTFNUQVRACitIQVZFX01CUkxFTiA9IEBIQVZFX01CUkxFTkAKK0hBVkVfTUJSVE9XQyA9IEBIQVZFX01CUlRPV0NACitIQVZFX01CU0lOSVQgPSBASEFWRV9NQlNJTklUQAorSEFWRV9NQlNMRU4gPSBASEFWRV9NQlNMRU5ACitIQVZFX01CU05SVE9XQ1MgPSBASEFWRV9NQlNOUlRPV0NTQAorSEFWRV9NQlNSVE9XQ1MgPSBASEFWRV9NQlNSVE9XQ1NACitIQVZFX01FTUNIUiA9IEBIQVZFX01FTUNIUkAKK0hBVkVfTUVNUENQWSA9IEBIQVZFX01FTVBDUFlACitIQVZFX01LRElSQVQgPSBASEFWRV9NS0RJUkFUQAorSEFWRV9NS0RURU1QID0gQEhBVkVfTUtEVEVNUEAKK0hBVkVfTUtGSUZPID0gQEhBVkVfTUtGSUZPQAorSEFWRV9NS0ZJRk9BVCA9IEBIQVZFX01LRklGT0FUQAorSEFWRV9NS05PRCA9IEBIQVZFX01LTk9EQAorSEFWRV9NS05PREFUID0gQEhBVkVfTUtOT0RBVEAKK0hBVkVfTUtPU1RFTVAgPSBASEFWRV9NS09TVEVNUEAKK0hBVkVfTUtPU1RFTVBTID0gQEhBVkVfTUtPU1RFTVBTQAorSEFWRV9NS1NURU1QID0gQEhBVkVfTUtTVEVNUEAKK0hBVkVfTUtTVEVNUFMgPSBASEFWRV9NS1NURU1QU0AKK0hBVkVfTU9ERkYgPSBASEFWRV9NT0RGRkAKK0hBVkVfTU9ERkwgPSBASEFWRV9NT0RGTEAKK0hBVkVfTVNWQ19JTlZBTElEX1BBUkFNRVRFUl9IQU5ETEVSID0gQEhBVkVfTVNWQ19JTlZBTElEX1BBUkFNRVRFUl9IQU5ETEVSQAorSEFWRV9OQU5PU0xFRVAgPSBASEFWRV9OQU5PU0xFRVBACitIQVZFX09QRU5BVCA9IEBIQVZFX09QRU5BVEAKK0hBVkVfT1NfSCA9IEBIQVZFX09TX0hACitIQVZFX1BDTE9TRSA9IEBIQVZFX1BDTE9TRUAKK0hBVkVfUElQRSA9IEBIQVZFX1BJUEVACitIQVZFX1BJUEUyID0gQEhBVkVfUElQRTJACitIQVZFX1BPUEVOID0gQEhBVkVfUE9QRU5ACitIQVZFX1BPU0lYX09QRU5QVCA9IEBIQVZFX1BPU0lYX09QRU5QVEAKK0hBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkcgPSBASEFWRV9QT1NJWF9TSUdOQUxCTE9DS0lOR0AKK0hBVkVfUE9TSVhfU1BBV04gPSBASEFWRV9QT1NJWF9TUEFXTkAKK0hBVkVfUE9TSVhfU1BBV05BVFRSX1QgPSBASEFWRV9QT1NJWF9TUEFXTkFUVFJfVEAKK0hBVkVfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX1QgPSBASEFWRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfVEAKK0hBVkVfUE9XRiA9IEBIQVZFX1BPV0ZACitIQVZFX1BSRUFEID0gQEhBVkVfUFJFQURACitIQVZFX1BUSFJFQURfU0lHTUFTSyA9IEBIQVZFX1BUSFJFQURfU0lHTUFTS0AKK0hBVkVfUFRTTkFNRSA9IEBIQVZFX1BUU05BTUVACitIQVZFX1BUU05BTUVfUiA9IEBIQVZFX1BUU05BTUVfUkAKK0hBVkVfUFdSSVRFID0gQEhBVkVfUFdSSVRFQAorSEFWRV9SQUlTRSA9IEBIQVZFX1JBSVNFQAorSEFWRV9SQU5ET00gPSBASEFWRV9SQU5ET01ACitIQVZFX1JBTkRPTV9IID0gQEhBVkVfUkFORE9NX0hACitIQVZFX1JBTkRPTV9SID0gQEhBVkVfUkFORE9NX1JACitIQVZFX1JBV01FTUNIUiA9IEBIQVZFX1JBV01FTUNIUkAKK0hBVkVfUkVBRExJTksgPSBASEFWRV9SRUFETElOS0AKK0hBVkVfUkVBRExJTktBVCA9IEBIQVZFX1JFQURMSU5LQVRACitIQVZFX1JFQUxQQVRIID0gQEhBVkVfUkVBTFBBVEhACitIQVZFX1JFTUFJTkRFUiA9IEBIQVZFX1JFTUFJTkRFUkAKK0hBVkVfUkVNQUlOREVSRiA9IEBIQVZFX1JFTUFJTkRFUkZACitIQVZFX1JFTkFNRUFUID0gQEhBVkVfUkVOQU1FQVRACitIQVZFX1JJTlQgPSBASEFWRV9SSU5UQAorSEFWRV9SSU5UTCA9IEBIQVZFX1JJTlRMQAorSEFWRV9SUE1BVENIID0gQEhBVkVfUlBNQVRDSEAKK0hBVkVfU0FNRV9MT05HX0RPVUJMRV9BU19ET1VCTEUgPSBASEFWRV9TQU1FX0xPTkdfRE9VQkxFX0FTX0RPVUJMRUAKK0hBVkVfU0NIRURfSCA9IEBIQVZFX1NDSEVEX0hACitIQVZFX1NFVEVOViA9IEBIQVZFX1NFVEVOVkAKK0hBVkVfU0VUSE9TVE5BTUUgPSBASEFWRV9TRVRIT1NUTkFNRUAKK0hBVkVfU0lHQUNUSU9OID0gQEhBVkVfU0lHQUNUSU9OQAorSEFWRV9TSUdIQU5ETEVSX1QgPSBASEFWRV9TSUdIQU5ETEVSX1RACitIQVZFX1NJR0lORk9fVCA9IEBIQVZFX1NJR0lORk9fVEAKK0hBVkVfU0lHTkVEX1NJR19BVE9NSUNfVCA9IEBIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1RACitIQVZFX1NJR05FRF9XQ0hBUl9UID0gQEhBVkVfU0lHTkVEX1dDSEFSX1RACitIQVZFX1NJR05FRF9XSU5UX1QgPSBASEFWRV9TSUdORURfV0lOVF9UQAorSEFWRV9TSUdTRVRfVCA9IEBIQVZFX1NJR1NFVF9UQAorSEFWRV9TSU5GID0gQEhBVkVfU0lORkAKK0hBVkVfU0lOSEYgPSBASEFWRV9TSU5IRkAKK0hBVkVfU0lOTCA9IEBIQVZFX1NJTkxACitIQVZFX1NMRUVQID0gQEhBVkVfU0xFRVBACitIQVZFX1NQQVdOX0ggPSBASEFWRV9TUEFXTl9IQAorSEFWRV9TUVJURiA9IEBIQVZFX1NRUlRGQAorSEFWRV9TUVJUTCA9IEBIQVZFX1NRUlRMQAorSEFWRV9TVERJTlRfSCA9IEBIQVZFX1NURElOVF9IQAorSEFWRV9TVFBDUFkgPSBASEFWRV9TVFBDUFlACitIQVZFX1NUUE5DUFkgPSBASEFWRV9TVFBOQ1BZQAorSEFWRV9TVFJDQVNFU1RSID0gQEhBVkVfU1RSQ0FTRVNUUkAKK0hBVkVfU1RSQ0hSTlVMID0gQEhBVkVfU1RSQ0hSTlVMQAorSEFWRV9TVFJQQlJLID0gQEhBVkVfU1RSUEJSS0AKK0hBVkVfU1RSUFRJTUUgPSBASEFWRV9TVFJQVElNRUAKK0hBVkVfU1RSU0VQID0gQEhBVkVfU1RSU0VQQAorSEFWRV9TVFJUT0QgPSBASEFWRV9TVFJUT0RACitIQVZFX1NUUlRPTEwgPSBASEFWRV9TVFJUT0xMQAorSEFWRV9TVFJUT1VMTCA9IEBIQVZFX1NUUlRPVUxMQAorSEFWRV9TVFJVQ1RfUkFORE9NX0RBVEEgPSBASEFWRV9TVFJVQ1RfUkFORE9NX0RBVEFACitIQVZFX1NUUlVDVF9TQ0hFRF9QQVJBTSA9IEBIQVZFX1NUUlVDVF9TQ0hFRF9QQVJBTUAKK0hBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT04gPSBASEFWRV9TVFJVQ1RfU0lHQUNUSU9OX1NBX1NJR0FDVElPTkAKK0hBVkVfU1RSVkVSU0NNUCA9IEBIQVZFX1NUUlZFUlNDTVBACitIQVZFX1NZTUxJTksgPSBASEFWRV9TWU1MSU5LQAorSEFWRV9TWU1MSU5LQVQgPSBASEFWRV9TWU1MSU5LQVRACitIQVZFX1NZU19CSVRZUEVTX0ggPSBASEFWRV9TWVNfQklUWVBFU19IQAorSEFWRV9TWVNfSU5UVFlQRVNfSCA9IEBIQVZFX1NZU19JTlRUWVBFU19IQAorSEFWRV9TWVNfTE9BREFWR19IID0gQEhBVkVfU1lTX0xPQURBVkdfSEAKK0hBVkVfU1lTX1BBUkFNX0ggPSBASEFWRV9TWVNfUEFSQU1fSEAKK0hBVkVfU1lTX1RZUEVTX0ggPSBASEFWRV9TWVNfVFlQRVNfSEAKK0hBVkVfVEFORiA9IEBIQVZFX1RBTkZACitIQVZFX1RBTkhGID0gQEhBVkVfVEFOSEZACitIQVZFX1RBTkwgPSBASEFWRV9UQU5MQAorSEFWRV9USU1FR00gPSBASEFWRV9USU1FR01ACitIQVZFX1RZUEVfVk9MQVRJTEVfU0lHX0FUT01JQ19UID0gQEhBVkVfVFlQRV9WT0xBVElMRV9TSUdfQVRPTUlDX1RACitIQVZFX1VOSVNURF9IID0gQEhBVkVfVU5JU1REX0hACitIQVZFX1VOTElOS0FUID0gQEhBVkVfVU5MSU5LQVRACitIQVZFX1VOTE9DS1BUID0gQEhBVkVfVU5MT0NLUFRACitIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQgPSBASEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UQAorSEFWRV9VU0xFRVAgPSBASEFWRV9VU0xFRVBACitIQVZFX1VUSU1FTlNBVCA9IEBIQVZFX1VUSU1FTlNBVEAKK0hBVkVfVkFTUFJJTlRGID0gQEhBVkVfVkFTUFJJTlRGQAorSEFWRV9WRFBSSU5URiA9IEBIQVZFX1ZEUFJJTlRGQAorSEFWRV9XQ0hBUl9IID0gQEhBVkVfV0NIQVJfSEAKK0hBVkVfV0NIQVJfVCA9IEBIQVZFX1dDSEFSX1RACitIQVZFX1dDUENQWSA9IEBIQVZFX1dDUENQWUAKK0hBVkVfV0NQTkNQWSA9IEBIQVZFX1dDUE5DUFlACitIQVZFX1dDUlRPTUIgPSBASEFWRV9XQ1JUT01CQAorSEFWRV9XQ1NDQVNFQ01QID0gQEhBVkVfV0NTQ0FTRUNNUEAKK0hBVkVfV0NTQ0FUID0gQEhBVkVfV0NTQ0FUQAorSEFWRV9XQ1NDSFIgPSBASEFWRV9XQ1NDSFJACitIQVZFX1dDU0NNUCA9IEBIQVZFX1dDU0NNUEAKK0hBVkVfV0NTQ09MTCA9IEBIQVZFX1dDU0NPTExACitIQVZFX1dDU0NQWSA9IEBIQVZFX1dDU0NQWUAKK0hBVkVfV0NTQ1NQTiA9IEBIQVZFX1dDU0NTUE5ACitIQVZFX1dDU0RVUCA9IEBIQVZFX1dDU0RVUEAKK0hBVkVfV0NTTEVOID0gQEhBVkVfV0NTTEVOQAorSEFWRV9XQ1NOQ0FTRUNNUCA9IEBIQVZFX1dDU05DQVNFQ01QQAorSEFWRV9XQ1NOQ0FUID0gQEhBVkVfV0NTTkNBVEAKK0hBVkVfV0NTTkNNUCA9IEBIQVZFX1dDU05DTVBACitIQVZFX1dDU05DUFkgPSBASEFWRV9XQ1NOQ1BZQAorSEFWRV9XQ1NOTEVOID0gQEhBVkVfV0NTTkxFTkAKK0hBVkVfV0NTTlJUT01CUyA9IEBIQVZFX1dDU05SVE9NQlNACitIQVZFX1dDU1BCUksgPSBASEFWRV9XQ1NQQlJLQAorSEFWRV9XQ1NSQ0hSID0gQEhBVkVfV0NTUkNIUkAKK0hBVkVfV0NTUlRPTUJTID0gQEhBVkVfV0NTUlRPTUJTQAorSEFWRV9XQ1NTUE4gPSBASEFWRV9XQ1NTUE5ACitIQVZFX1dDU1NUUiA9IEBIQVZFX1dDU1NUUkAKK0hBVkVfV0NTVE9LID0gQEhBVkVfV0NTVE9LQAorSEFWRV9XQ1NXSURUSCA9IEBIQVZFX1dDU1dJRFRIQAorSEFWRV9XQ1NYRlJNID0gQEhBVkVfV0NTWEZSTUAKK0hBVkVfV0NUUkFOU19UID0gQEhBVkVfV0NUUkFOU19UQAorSEFWRV9XQ1RZUEVfSCA9IEBIQVZFX1dDVFlQRV9IQAorSEFWRV9XQ1RZUEVfVCA9IEBIQVZFX1dDVFlQRV9UQAorSEFWRV9XSU5TT0NLMl9IID0gQEhBVkVfV0lOU09DSzJfSEAKK0hBVkVfV0lOVF9UID0gQEhBVkVfV0lOVF9UQAorSEFWRV9XTUVNQ0hSID0gQEhBVkVfV01FTUNIUkAKK0hBVkVfV01FTUNNUCA9IEBIQVZFX1dNRU1DTVBACitIQVZFX1dNRU1DUFkgPSBASEFWRV9XTUVNQ1BZQAorSEFWRV9XTUVNTU9WRSA9IEBIQVZFX1dNRU1NT1ZFQAorSEFWRV9XTUVNU0VUID0gQEhBVkVfV01FTVNFVEAKK0hBVkVfX0JPT0wgPSBASEFWRV9fQk9PTEAKK0hBVkVfX0VYSVQgPSBASEFWRV9fRVhJVEAKK0hFTFAyTUFOID0gQEhFTFAyTUFOQAorSU5DTFVERV9ORVhUID0gQElOQ0xVREVfTkVYVEAKK0lOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkUgPSBASU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRUAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UMzJfTUFYX0xUX0lOVE1BWF9NQVggPSBASU5UMzJfTUFYX0xUX0lOVE1BWF9NQVhACitJTlQ2NF9NQVhfRVFfTE9OR19NQVggPSBASU5UNjRfTUFYX0VRX0xPTkdfTUFYQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACitJU05BTkRfTElCTSA9IEBJU05BTkRfTElCTUAKK0lTTkFORl9MSUJNID0gQElTTkFORl9MSUJNQAorSVNOQU5MX0xJQk0gPSBASVNOQU5MX0xJQk1ACitJU05BTl9MSUJNID0gQElTTkFOX0xJQk1ACitMREVYUExfTElCTSA9IEBMREVYUExfTElCTUAKK0xERVhQX0xJQk0gPSBATERFWFBfTElCTUAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xFWCA9IEBMRVhACitMRVhMSUIgPSBATEVYTElCQAorTEVYX0lTX0ZMRVggPSBATEVYX0lTX0ZMRVhACitMRVhfT1VUUFVUX1JPT1QgPSBATEVYX09VVFBVVF9ST09UQAorTElCQklTT05fTElCREVQUyA9IEBMSUJCSVNPTl9MSUJERVBTQAorTElCQklTT05fTFRMSUJERVBTID0gQExJQkJJU09OX0xUTElCREVQU0AKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCTVVMVElUSFJFQUQgPSBATElCTVVMVElUSFJFQURACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJQVEggPSBATElCUFRIQAorTElCUFRIX1BSRUZJWCA9IEBMSUJQVEhfUFJFRklYQAorTElCUyA9IEBMSUJTQAorTElCVEhSRUFEID0gQExJQlRIUkVBREAKK0xJQlVOSVNUUklOR19VTklUWVBFU19IID0gQExJQlVOSVNUUklOR19VTklUWVBFU19IQAorTElCVU5JU1RSSU5HX1VOSVdJRFRIX0ggPSBATElCVU5JU1RSSU5HX1VOSVdJRFRIX0hACitMT0NBTENIQVJTRVRfVEVTVFNfRU5WSVJPTk1FTlQgPSBATE9DQUxDSEFSU0VUX1RFU1RTX0VOVklST05NRU5UQAorTE9DQUxFX0ZSX1VURjggPSBATE9DQUxFX0ZSX1VURjhACitMT0NBTEVfSkEgPSBATE9DQUxFX0pBQAorTE9DQUxFX1pIX0NOID0gQExPQ0FMRV9aSF9DTkAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk1VTFRJVEhSRUFEID0gQExUTElCTVVMVElUSFJFQURACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTFRMSUJQVEggPSBATFRMSUJQVEhACitMVExJQlRIUkVBRCA9IEBMVExJQlRIUkVBREAKK000ID0gQE00QAorTTRfREVCVUdGSUxFID0gQE00X0RFQlVHRklMRUAKK000X0dOVSA9IEBNNF9HTlVACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0VSUk5PX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRVJSTk9fSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0ZDTlRMX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRkNOVExfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0ZMT0FUX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRkxPQVRfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0dFVE9QVF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX0dFVE9QVF9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfSU5UVFlQRVNfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9JTlRUWVBFU19IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfTUFUSF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX01BVEhfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NDSEVEX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU0NIRURfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NJR05BTF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NJR05BTF9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1BBV05fSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TUEFXTl9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1REREVGX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1REREVGX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERJTlRfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERJTlRfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURElPX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RESU9fSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURExJQl9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURExJQl9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RSSU5HX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RSSU5HX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfU1RBVF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19TVEFUX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfVFlQRVNfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfVFlQRVNfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19XQUlUX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1lTX1dBSVRfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1RJTUVfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9USU1FX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9VTklTVERfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9VTklTVERfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDSEFSX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfV0NIQVJfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDVFlQRV9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDVFlQRV9IQAorTkVYVF9FUlJOT19IID0gQE5FWFRfRVJSTk9fSEAKK05FWFRfRkNOVExfSCA9IEBORVhUX0ZDTlRMX0hACitORVhUX0ZMT0FUX0ggPSBATkVYVF9GTE9BVF9IQAorTkVYVF9HRVRPUFRfSCA9IEBORVhUX0dFVE9QVF9IQAorTkVYVF9JTlRUWVBFU19IID0gQE5FWFRfSU5UVFlQRVNfSEAKK05FWFRfTUFUSF9IID0gQE5FWFRfTUFUSF9IQAorTkVYVF9TQ0hFRF9IID0gQE5FWFRfU0NIRURfSEAKK05FWFRfU0lHTkFMX0ggPSBATkVYVF9TSUdOQUxfSEAKK05FWFRfU1BBV05fSCA9IEBORVhUX1NQQVdOX0hACitORVhUX1NURERFRl9IID0gQE5FWFRfU1REREVGX0hACitORVhUX1NURElOVF9IID0gQE5FWFRfU1RESU5UX0hACitORVhUX1NURElPX0ggPSBATkVYVF9TVERJT19IQAorTkVYVF9TVERMSUJfSCA9IEBORVhUX1NURExJQl9IQAorTkVYVF9TVFJJTkdfSCA9IEBORVhUX1NUUklOR19IQAorTkVYVF9TWVNfU1RBVF9IID0gQE5FWFRfU1lTX1NUQVRfSEAKK05FWFRfU1lTX1RZUEVTX0ggPSBATkVYVF9TWVNfVFlQRVNfSEAKK05FWFRfU1lTX1dBSVRfSCA9IEBORVhUX1NZU19XQUlUX0hACitORVhUX1RJTUVfSCA9IEBORVhUX1RJTUVfSEAKK05FWFRfVU5JU1REX0ggPSBATkVYVF9VTklTVERfSEAKK05FWFRfV0NIQVJfSCA9IEBORVhUX1dDSEFSX0hACitORVhUX1dDVFlQRV9IID0gQE5FWFRfV0NUWVBFX0hACitPQkpFWFQgPSBAT0JKRVhUQAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX0NPUFlSSUdIVF9ZRUFSID0gQFBBQ0tBR0VfQ09QWVJJR0hUX1lFQVJACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMID0gQFBFUkxACitQT1NVQiA9IEBQT1NVQkAKK1BSQUdNQV9DT0xVTU5TID0gQFBSQUdNQV9DT0xVTU5TQAorUFJBR01BX1NZU1RFTV9IRUFERVIgPSBAUFJBR01BX1NZU1RFTV9IRUFERVJACitQUklQVFJfUFJFRklYID0gQFBSSVBUUl9QUkVGSVhACitQUklfTUFDUk9TX0JST0tFTiA9IEBQUklfTUFDUk9TX0JST0tFTkAKK1BUSFJFQURfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQyA9IEBQVEhSRUFEX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUNACitQVFJESUZGX1RfU1VGRklYID0gQFBUUkRJRkZfVF9TVUZGSVhACitSQU5MSUIgPSBAUkFOTElCQAorUkVQTEFDRV9CVE9XQyA9IEBSRVBMQUNFX0JUT1dDQAorUkVQTEFDRV9DQUxMT0MgPSBAUkVQTEFDRV9DQUxMT0NACitSRVBMQUNFX0NBTk9OSUNBTElaRV9GSUxFX05BTUUgPSBAUkVQTEFDRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FQAorUkVQTEFDRV9DQlJURiA9IEBSRVBMQUNFX0NCUlRGQAorUkVQTEFDRV9DQlJUTCA9IEBSRVBMQUNFX0NCUlRMQAorUkVQTEFDRV9DRUlMID0gQFJFUExBQ0VfQ0VJTEAKK1JFUExBQ0VfQ0VJTEYgPSBAUkVQTEFDRV9DRUlMRkAKK1JFUExBQ0VfQ0VJTEwgPSBAUkVQTEFDRV9DRUlMTEAKK1JFUExBQ0VfQ0hPV04gPSBAUkVQTEFDRV9DSE9XTkAKK1JFUExBQ0VfQ0xPU0UgPSBAUkVQTEFDRV9DTE9TRUAKK1JFUExBQ0VfRFBSSU5URiA9IEBSRVBMQUNFX0RQUklOVEZACitSRVBMQUNFX0RVUCA9IEBSRVBMQUNFX0RVUEAKK1JFUExBQ0VfRFVQMiA9IEBSRVBMQUNFX0RVUDJACitSRVBMQUNFX0VYUDIgPSBAUkVQTEFDRV9FWFAyQAorUkVQTEFDRV9FWFAyTCA9IEBSRVBMQUNFX0VYUDJMQAorUkVQTEFDRV9FWFBNMSA9IEBSRVBMQUNFX0VYUE0xQAorUkVQTEFDRV9FWFBNMUYgPSBAUkVQTEFDRV9FWFBNMUZACitSRVBMQUNFX0ZBQlNMID0gQFJFUExBQ0VfRkFCU0xACitSRVBMQUNFX0ZDSE9XTkFUID0gQFJFUExBQ0VfRkNIT1dOQVRACitSRVBMQUNFX0ZDTE9TRSA9IEBSRVBMQUNFX0ZDTE9TRUAKK1JFUExBQ0VfRkNOVEwgPSBAUkVQTEFDRV9GQ05UTEAKK1JFUExBQ0VfRkRPUEVOID0gQFJFUExBQ0VfRkRPUEVOQAorUkVQTEFDRV9GRkxVU0ggPSBAUkVQTEFDRV9GRkxVU0hACitSRVBMQUNFX0ZMT09SID0gQFJFUExBQ0VfRkxPT1JACitSRVBMQUNFX0ZMT09SRiA9IEBSRVBMQUNFX0ZMT09SRkAKK1JFUExBQ0VfRkxPT1JMID0gQFJFUExBQ0VfRkxPT1JMQAorUkVQTEFDRV9GTUEgPSBAUkVQTEFDRV9GTUFACitSRVBMQUNFX0ZNQUYgPSBAUkVQTEFDRV9GTUFGQAorUkVQTEFDRV9GTUFMID0gQFJFUExBQ0VfRk1BTEAKK1JFUExBQ0VfRk1PRCA9IEBSRVBMQUNFX0ZNT0RACitSRVBMQUNFX0ZNT0RGID0gQFJFUExBQ0VfRk1PREZACitSRVBMQUNFX0ZNT0RMID0gQFJFUExBQ0VfRk1PRExACitSRVBMQUNFX0ZPUEVOID0gQFJFUExBQ0VfRk9QRU5ACitSRVBMQUNFX0ZQUklOVEYgPSBAUkVQTEFDRV9GUFJJTlRGQAorUkVQTEFDRV9GUFVSR0UgPSBAUkVQTEFDRV9GUFVSR0VACitSRVBMQUNFX0ZSRU9QRU4gPSBAUkVQTEFDRV9GUkVPUEVOQAorUkVQTEFDRV9GUkVYUCA9IEBSRVBMQUNFX0ZSRVhQQAorUkVQTEFDRV9GUkVYUEYgPSBAUkVQTEFDRV9GUkVYUEZACitSRVBMQUNFX0ZSRVhQTCA9IEBSRVBMQUNFX0ZSRVhQTEAKK1JFUExBQ0VfRlNFRUsgPSBAUkVQTEFDRV9GU0VFS0AKK1JFUExBQ0VfRlNFRUtPID0gQFJFUExBQ0VfRlNFRUtPQAorUkVQTEFDRV9GU1RBVCA9IEBSRVBMQUNFX0ZTVEFUQAorUkVQTEFDRV9GU1RBVEFUID0gQFJFUExBQ0VfRlNUQVRBVEAKK1JFUExBQ0VfRlRFTEwgPSBAUkVQTEFDRV9GVEVMTEAKK1JFUExBQ0VfRlRFTExPID0gQFJFUExBQ0VfRlRFTExPQAorUkVQTEFDRV9GVFJVTkNBVEUgPSBAUkVQTEFDRV9GVFJVTkNBVEVACitSRVBMQUNFX0ZVVElNRU5TID0gQFJFUExBQ0VfRlVUSU1FTlNACitSRVBMQUNFX0dFVENXRCA9IEBSRVBMQUNFX0dFVENXREAKK1JFUExBQ0VfR0VUREVMSU0gPSBAUkVQTEFDRV9HRVRERUxJTUAKK1JFUExBQ0VfR0VURE9NQUlOTkFNRSA9IEBSRVBMQUNFX0dFVERPTUFJTk5BTUVACitSRVBMQUNFX0dFVEdST1VQUyA9IEBSRVBMQUNFX0dFVEdST1VQU0AKK1JFUExBQ0VfR0VUTElORSA9IEBSRVBMQUNFX0dFVExJTkVACitSRVBMQUNFX0dFVExPR0lOX1IgPSBAUkVQTEFDRV9HRVRMT0dJTl9SQAorUkVQTEFDRV9HRVRQQUdFU0laRSA9IEBSRVBMQUNFX0dFVFBBR0VTSVpFQAorUkVQTEFDRV9IVUdFX1ZBTCA9IEBSRVBMQUNFX0hVR0VfVkFMQAorUkVQTEFDRV9IWVBPVCA9IEBSRVBMQUNFX0hZUE9UQAorUkVQTEFDRV9IWVBPVEYgPSBAUkVQTEFDRV9IWVBPVEZACitSRVBMQUNFX0hZUE9UTCA9IEBSRVBMQUNFX0hZUE9UTEAKK1JFUExBQ0VfSUxPR0IgPSBAUkVQTEFDRV9JTE9HQkAKK1JFUExBQ0VfSUxPR0JGID0gQFJFUExBQ0VfSUxPR0JGQAorUkVQTEFDRV9JU0FUVFkgPSBAUkVQTEFDRV9JU0FUVFlACitSRVBMQUNFX0lTRklOSVRFID0gQFJFUExBQ0VfSVNGSU5JVEVACitSRVBMQUNFX0lTSU5GID0gQFJFUExBQ0VfSVNJTkZACitSRVBMQUNFX0lTTkFOID0gQFJFUExBQ0VfSVNOQU5ACitSRVBMQUNFX0lTV0JMQU5LID0gQFJFUExBQ0VfSVNXQkxBTktACitSRVBMQUNFX0lTV0NOVFJMID0gQFJFUExBQ0VfSVNXQ05UUkxACitSRVBMQUNFX0lUT0xEID0gQFJFUExBQ0VfSVRPTERACitSRVBMQUNFX0xDSE9XTiA9IEBSRVBMQUNFX0xDSE9XTkAKK1JFUExBQ0VfTERFWFBMID0gQFJFUExBQ0VfTERFWFBMQAorUkVQTEFDRV9MSU5LID0gQFJFUExBQ0VfTElOS0AKK1JFUExBQ0VfTElOS0FUID0gQFJFUExBQ0VfTElOS0FUQAorUkVQTEFDRV9MT0NBTFRJTUVfUiA9IEBSRVBMQUNFX0xPQ0FMVElNRV9SQAorUkVQTEFDRV9MT0cgPSBAUkVQTEFDRV9MT0dACitSRVBMQUNFX0xPRzEwID0gQFJFUExBQ0VfTE9HMTBACitSRVBMQUNFX0xPRzEwRiA9IEBSRVBMQUNFX0xPRzEwRkAKK1JFUExBQ0VfTE9HMTBMID0gQFJFUExBQ0VfTE9HMTBMQAorUkVQTEFDRV9MT0cxUCA9IEBSRVBMQUNFX0xPRzFQQAorUkVQTEFDRV9MT0cxUEYgPSBAUkVQTEFDRV9MT0cxUEZACitSRVBMQUNFX0xPRzFQTCA9IEBSRVBMQUNFX0xPRzFQTEAKK1JFUExBQ0VfTE9HMiA9IEBSRVBMQUNFX0xPRzJACitSRVBMQUNFX0xPRzJGID0gQFJFUExBQ0VfTE9HMkZACitSRVBMQUNFX0xPRzJMID0gQFJFUExBQ0VfTE9HMkxACitSRVBMQUNFX0xPR0IgPSBAUkVQTEFDRV9MT0dCQAorUkVQTEFDRV9MT0dCRiA9IEBSRVBMQUNFX0xPR0JGQAorUkVQTEFDRV9MT0dCTCA9IEBSRVBMQUNFX0xPR0JMQAorUkVQTEFDRV9MT0dGID0gQFJFUExBQ0VfTE9HRkAKK1JFUExBQ0VfTE9HTCA9IEBSRVBMQUNFX0xPR0xACitSRVBMQUNFX0xTRUVLID0gQFJFUExBQ0VfTFNFRUtACitSRVBMQUNFX0xTVEFUID0gQFJFUExBQ0VfTFNUQVRACitSRVBMQUNFX01BTExPQyA9IEBSRVBMQUNFX01BTExPQ0AKK1JFUExBQ0VfTUJSTEVOID0gQFJFUExBQ0VfTUJSTEVOQAorUkVQTEFDRV9NQlJUT1dDID0gQFJFUExBQ0VfTUJSVE9XQ0AKK1JFUExBQ0VfTUJTSU5JVCA9IEBSRVBMQUNFX01CU0lOSVRACitSRVBMQUNFX01CU05SVE9XQ1MgPSBAUkVQTEFDRV9NQlNOUlRPV0NTQAorUkVQTEFDRV9NQlNSVE9XQ1MgPSBAUkVQTEFDRV9NQlNSVE9XQ1NACitSRVBMQUNFX01CU1RBVEVfVCA9IEBSRVBMQUNFX01CU1RBVEVfVEAKK1JFUExBQ0VfTUJUT1dDID0gQFJFUExBQ0VfTUJUT1dDQAorUkVQTEFDRV9NRU1DSFIgPSBAUkVQTEFDRV9NRU1DSFJACitSRVBMQUNFX01FTU1FTSA9IEBSRVBMQUNFX01FTU1FTUAKK1JFUExBQ0VfTUtESVIgPSBAUkVQTEFDRV9NS0RJUkAKK1JFUExBQ0VfTUtGSUZPID0gQFJFUExBQ0VfTUtGSUZPQAorUkVQTEFDRV9NS05PRCA9IEBSRVBMQUNFX01LTk9EQAorUkVQTEFDRV9NS1NURU1QID0gQFJFUExBQ0VfTUtTVEVNUEAKK1JFUExBQ0VfTUtUSU1FID0gQFJFUExBQ0VfTUtUSU1FQAorUkVQTEFDRV9NT0RGID0gQFJFUExBQ0VfTU9ERkAKK1JFUExBQ0VfTU9ERkYgPSBAUkVQTEFDRV9NT0RGRkAKK1JFUExBQ0VfTU9ERkwgPSBAUkVQTEFDRV9NT0RGTEAKK1JFUExBQ0VfTkFOID0gQFJFUExBQ0VfTkFOQAorUkVQTEFDRV9OQU5PU0xFRVAgPSBAUkVQTEFDRV9OQU5PU0xFRVBACitSRVBMQUNFX05VTEwgPSBAUkVQTEFDRV9OVUxMQAorUkVQTEFDRV9PQlNUQUNLX1BSSU5URiA9IEBSRVBMQUNFX09CU1RBQ0tfUFJJTlRGQAorUkVQTEFDRV9PUEVOID0gQFJFUExBQ0VfT1BFTkAKK1JFUExBQ0VfT1BFTkFUID0gQFJFUExBQ0VfT1BFTkFUQAorUkVQTEFDRV9QRVJST1IgPSBAUkVQTEFDRV9QRVJST1JACitSRVBMQUNFX1BPUEVOID0gQFJFUExBQ0VfUE9QRU5ACitSRVBMQUNFX1BPU0lYX1NQQVdOID0gQFJFUExBQ0VfUE9TSVhfU1BBV05ACitSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRSA9IEBSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRUAKK1JFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDIgPSBAUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMkAKK1JFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU4gPSBAUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURET1BFTkAKK1JFUExBQ0VfUFJFQUQgPSBAUkVQTEFDRV9QUkVBREAKK1JFUExBQ0VfUFJJTlRGID0gQFJFUExBQ0VfUFJJTlRGQAorUkVQTEFDRV9QVEhSRUFEX1NJR01BU0sgPSBAUkVQTEFDRV9QVEhSRUFEX1NJR01BU0tACitSRVBMQUNFX1BUU05BTUUgPSBAUkVQTEFDRV9QVFNOQU1FQAorUkVQTEFDRV9QVFNOQU1FX1IgPSBAUkVQTEFDRV9QVFNOQU1FX1JACitSRVBMQUNFX1BVVEVOViA9IEBSRVBMQUNFX1BVVEVOVkAKK1JFUExBQ0VfUFdSSVRFID0gQFJFUExBQ0VfUFdSSVRFQAorUkVQTEFDRV9SQUlTRSA9IEBSRVBMQUNFX1JBSVNFQAorUkVQTEFDRV9SQU5ET01fUiA9IEBSRVBMQUNFX1JBTkRPTV9SQAorUkVQTEFDRV9SRUFEID0gQFJFUExBQ0VfUkVBREAKK1JFUExBQ0VfUkVBRExJTksgPSBAUkVQTEFDRV9SRUFETElOS0AKK1JFUExBQ0VfUkVBTExPQyA9IEBSRVBMQUNFX1JFQUxMT0NACitSRVBMQUNFX1JFQUxQQVRIID0gQFJFUExBQ0VfUkVBTFBBVEhACitSRVBMQUNFX1JFTUFJTkRFUiA9IEBSRVBMQUNFX1JFTUFJTkRFUkAKK1JFUExBQ0VfUkVNQUlOREVSRiA9IEBSRVBMQUNFX1JFTUFJTkRFUkZACitSRVBMQUNFX1JFTUFJTkRFUkwgPSBAUkVQTEFDRV9SRU1BSU5ERVJMQAorUkVQTEFDRV9SRU1PVkUgPSBAUkVQTEFDRV9SRU1PVkVACitSRVBMQUNFX1JFTkFNRSA9IEBSRVBMQUNFX1JFTkFNRUAKK1JFUExBQ0VfUkVOQU1FQVQgPSBAUkVQTEFDRV9SRU5BTUVBVEAKK1JFUExBQ0VfUk1ESVIgPSBAUkVQTEFDRV9STURJUkAKK1JFUExBQ0VfUk9VTkQgPSBAUkVQTEFDRV9ST1VOREAKK1JFUExBQ0VfUk9VTkRGID0gQFJFUExBQ0VfUk9VTkRGQAorUkVQTEFDRV9ST1VOREwgPSBAUkVQTEFDRV9ST1VORExACitSRVBMQUNFX1NFVEVOViA9IEBSRVBMQUNFX1NFVEVOVkAKK1JFUExBQ0VfU0lHTkJJVCA9IEBSRVBMQUNFX1NJR05CSVRACitSRVBMQUNFX1NJR05CSVRfVVNJTkdfR0NDID0gQFJFUExBQ0VfU0lHTkJJVF9VU0lOR19HQ0NACitSRVBMQUNFX1NMRUVQID0gQFJFUExBQ0VfU0xFRVBACitSRVBMQUNFX1NOUFJJTlRGID0gQFJFUExBQ0VfU05QUklOVEZACitSRVBMQUNFX1NQUklOVEYgPSBAUkVQTEFDRV9TUFJJTlRGQAorUkVQTEFDRV9TUVJUTCA9IEBSRVBMQUNFX1NRUlRMQAorUkVQTEFDRV9TVEFUID0gQFJFUExBQ0VfU1RBVEAKK1JFUExBQ0VfU1RESU9fUkVBRF9GVU5DUyA9IEBSRVBMQUNFX1NURElPX1JFQURfRlVOQ1NACitSRVBMQUNFX1NURElPX1dSSVRFX0ZVTkNTID0gQFJFUExBQ0VfU1RESU9fV1JJVEVfRlVOQ1NACitSRVBMQUNFX1NUUE5DUFkgPSBAUkVQTEFDRV9TVFBOQ1BZQAorUkVQTEFDRV9TVFJDQVNFU1RSID0gQFJFUExBQ0VfU1RSQ0FTRVNUUkAKK1JFUExBQ0VfU1RSQ0hSTlVMID0gQFJFUExBQ0VfU1RSQ0hSTlVMQAorUkVQTEFDRV9TVFJEVVAgPSBAUkVQTEFDRV9TVFJEVVBACitSRVBMQUNFX1NUUkVSUk9SID0gQFJFUExBQ0VfU1RSRVJST1JACitSRVBMQUNFX1NUUkVSUk9SX1IgPSBAUkVQTEFDRV9TVFJFUlJPUl9SQAorUkVQTEFDRV9TVFJOQ0FUID0gQFJFUExBQ0VfU1RSTkNBVEAKK1JFUExBQ0VfU1RSTkRVUCA9IEBSRVBMQUNFX1NUUk5EVVBACitSRVBMQUNFX1NUUk5MRU4gPSBAUkVQTEFDRV9TVFJOTEVOQAorUkVQTEFDRV9TVFJTSUdOQUwgPSBAUkVQTEFDRV9TVFJTSUdOQUxACitSRVBMQUNFX1NUUlNUUiA9IEBSRVBMQUNFX1NUUlNUUkAKK1JFUExBQ0VfU1RSVE9EID0gQFJFUExBQ0VfU1RSVE9EQAorUkVQTEFDRV9TVFJUT0lNQVggPSBAUkVQTEFDRV9TVFJUT0lNQVhACitSRVBMQUNFX1NUUlRPS19SID0gQFJFUExBQ0VfU1RSVE9LX1JACitSRVBMQUNFX1NZTUxJTksgPSBAUkVQTEFDRV9TWU1MSU5LQAorUkVQTEFDRV9USU1FR00gPSBAUkVQTEFDRV9USU1FR01ACitSRVBMQUNFX1RNUEZJTEUgPSBAUkVQTEFDRV9UTVBGSUxFQAorUkVQTEFDRV9UT1dMT1dFUiA9IEBSRVBMQUNFX1RPV0xPV0VSQAorUkVQTEFDRV9UUlVOQyA9IEBSRVBMQUNFX1RSVU5DQAorUkVQTEFDRV9UUlVOQ0YgPSBAUkVQTEFDRV9UUlVOQ0ZACitSRVBMQUNFX1RSVU5DTCA9IEBSRVBMQUNFX1RSVU5DTEAKK1JFUExBQ0VfVFRZTkFNRV9SID0gQFJFUExBQ0VfVFRZTkFNRV9SQAorUkVQTEFDRV9VTkxJTksgPSBAUkVQTEFDRV9VTkxJTktACitSRVBMQUNFX1VOTElOS0FUID0gQFJFUExBQ0VfVU5MSU5LQVRACitSRVBMQUNFX1VOU0VURU5WID0gQFJFUExBQ0VfVU5TRVRFTlZACitSRVBMQUNFX1VTTEVFUCA9IEBSRVBMQUNFX1VTTEVFUEAKK1JFUExBQ0VfVVRJTUVOU0FUID0gQFJFUExBQ0VfVVRJTUVOU0FUQAorUkVQTEFDRV9WQVNQUklOVEYgPSBAUkVQTEFDRV9WQVNQUklOVEZACitSRVBMQUNFX1ZEUFJJTlRGID0gQFJFUExBQ0VfVkRQUklOVEZACitSRVBMQUNFX1ZGUFJJTlRGID0gQFJFUExBQ0VfVkZQUklOVEZACitSRVBMQUNFX1ZQUklOVEYgPSBAUkVQTEFDRV9WUFJJTlRGQAorUkVQTEFDRV9WU05QUklOVEYgPSBAUkVQTEFDRV9WU05QUklOVEZACitSRVBMQUNFX1ZTUFJJTlRGID0gQFJFUExBQ0VfVlNQUklOVEZACitSRVBMQUNFX1dDUlRPTUIgPSBAUkVQTEFDRV9XQ1JUT01CQAorUkVQTEFDRV9XQ1NOUlRPTUJTID0gQFJFUExBQ0VfV0NTTlJUT01CU0AKK1JFUExBQ0VfV0NTUlRPTUJTID0gQFJFUExBQ0VfV0NTUlRPTUJTQAorUkVQTEFDRV9XQ1NXSURUSCA9IEBSRVBMQUNFX1dDU1dJRFRIQAorUkVQTEFDRV9XQ1RPQiA9IEBSRVBMQUNFX1dDVE9CQAorUkVQTEFDRV9XQ1RPTUIgPSBAUkVQTEFDRV9XQ1RPTUJACitSRVBMQUNFX1dDV0lEVEggPSBAUkVQTEFDRV9XQ1dJRFRIQAorUkVQTEFDRV9XUklURSA9IEBSRVBMQUNFX1dSSVRFQAorU0NIRURfSCA9IEBTQ0hFRF9IQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NJR19BVE9NSUNfVF9TVUZGSVggPSBAU0lHX0FUT01JQ19UX1NVRkZJWEAKK1NJWkVfVF9TVUZGSVggPSBAU0laRV9UX1NVRkZJWEAKK1NUREJPT0xfSCA9IEBTVERCT09MX0hACitTVERERUZfSCA9IEBTVERERUZfSEAKK1NURElOVF9IID0gQFNURElOVF9IQAorU1RSSVAgPSBAU1RSSVBACitTWVNfVElNRV9IX0RFRklORVNfU1RSVUNUX1RJTUVTUEVDID0gQFNZU19USU1FX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUNACitUSU1FX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUMgPSBAVElNRV9IX0RFRklORVNfU1RSVUNUX1RJTUVTUEVDQAorVUlOVDMyX01BWF9MVF9VSU5UTUFYX01BWCA9IEBVSU5UMzJfTUFYX0xUX1VJTlRNQVhfTUFYQAorVUlOVDY0X01BWF9FUV9VTE9OR19NQVggPSBAVUlOVDY0X01BWF9FUV9VTE9OR19NQVhACitVTkRFRklORV9TVFJUT0tfUiA9IEBVTkRFRklORV9TVFJUT0tfUkAKK1VOSVNURF9IX0hBVkVfV0lOU09DSzJfSCA9IEBVTklTVERfSF9IQVZFX1dJTlNPQ0syX0hACitVTklTVERfSF9IQVZFX1dJTlNPQ0syX0hfQU5EX1VTRV9TT0NLRVRTID0gQFVOSVNURF9IX0hBVkVfV0lOU09DSzJfSF9BTkRfVVNFX1NPQ0tFVFNACitVU0VfTkxTID0gQFVTRV9OTFNACitWQUxHUklORCA9IEBWQUxHUklOREAKK1ZBTEdSSU5EX1BSRUJJU09OID0gQFZBTEdSSU5EX1BSRUJJU09OQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0FSTl9DRkxBR1MgPSBAV0FSTl9DRkxBR1NACitXQVJOX0NGTEFHU19URVNUID0gQFdBUk5fQ0ZMQUdTX1RFU1RACitXQVJOX0NYWEZMQUdTID0gQFdBUk5fQ1hYRkxBR1NACitXQVJOX0NYWEZMQUdTX1RFU1QgPSBAV0FSTl9DWFhGTEFHU19URVNUQAorV0NIQVJfVF9TVUZGSVggPSBAV0NIQVJfVF9TVUZGSVhACitXRVJST1JfQ0ZMQUdTID0gQFdFUlJPUl9DRkxBR1NACitXRVJST1JfQ1hYRkxBR1MgPSBAV0VSUk9SX0NYWEZMQUdTQAorV0lORE9XU182NF9CSVRfT0ZGX1QgPSBAV0lORE9XU182NF9CSVRfT0ZGX1RACitXSU5ET1dTXzY0X0JJVF9TVF9TSVpFID0gQFdJTkRPV1NfNjRfQklUX1NUX1NJWkVACitXSU5UX1RfU1VGRklYID0gQFdJTlRfVF9TVUZGSVhACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1lBQ0MgPSBAWUFDQ0AKK1lBQ0NfTElCUkFSWSA9IEBZQUNDX0xJQlJBUllACitZQUNDX1NDUklQVCA9IEBZQUNDX1NDUklQVEAKK1lGTEFHUyA9IEBZRkxBR1NACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY2xvY2FsZGlyID0gQGFjbG9jYWxkaXJACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorZ2xfTElCT0JKUyA9IEBnbF9MSUJPQkpTQAorZ2xfTFRMSUJPQkpTID0gQGdsX0xUTElCT0JKU0AKK2dsdGVzdHNfTElCT0JKUyA9IEBnbHRlc3RzX0xJQk9CSlNACitnbHRlc3RzX0xUTElCT0JKUyA9IEBnbHRlc3RzX0xUTElCT0JKU0AKK2dsdGVzdHNfV0lUTkVTUyA9IEBnbHRlc3RzX1dJVE5FU1NACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xpc3BkaXIgPSBAbGlzcGRpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorbm9kaXN0X25vaW5zdF9TQ1JJUFRTID0gYmVuY2gucGwKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbml0cyBldGMvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbml0cyBldGMvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorYmVuY2gucGw6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9iZW5jaC5wbC5pbgorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRACit0YWdzOiBUQUdTCitUQUdTOgorCitjdGFnczogQ1RBR1MKK0NUQUdTOgorCitjc2NvcGUgY3Njb3BlbGlzdDoKKworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKFNDUklQVFMpCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAgIGluc3RhbGw7IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorCWZpCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYworCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCisJaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCisJaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKKwltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBwZGYgcGRmLWFtIHBzIHBzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9ldGMvUkVBRE1FIGIvZXRjL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGYyYWJjCi0tLSAvZGV2L251bGwKKysrIGIvZXRjL1JFQURNRQpAQCAtMCwwICsxLDM4IEBACisqIGJlbmNoLnBsCitBIHByaW1pdGl2ZSBQZXJsIHNjcmlwdCB0byBydW4gYmVuY2hlcy4gIEN1cnJlbnRseSBpdHMgb25seSBiZW5jaCBpcwordGhlIHVzdWFsIGNhbGN1bGF0b3I6IGl0IGhhcyBhIGxpZ2h0d2VpZ2h0IHByb2Nlc3NpbmcgcGFydCAoYnV0IG5vdAorbnVsbCksIHNvIGl0IGlzIHJlYWxseSBlbXBoYXNpemluZyB0aGUgY29zdCBvZiB0aGUgd2hvbGUgcGFyc2luZworKGluY2x1ZGluZyBzY2FubmluZyBhbmQgSS9PKS4KKworU2V0IHRoZSBlbnZ2YXJzIEJJU09OIGFuZCBDQyB0byB0aGUgcHJvZ3JhbXMgYW5kIGZsYWdzIHlvdSB3YW50IHRvCit1c2UuICBUaGV5IGRlZmF1bHQgdG8gYmlzb24gYW5kIGdjYy4gIFRvIHJ1biBhIG5vbi1pbnN0YWxsZWQgYmlzb24KK2Zyb20gYSB0YXJiYWxsIGJ1aWx0IGluIF9idWlsZCwgSSBzdWdnZXN0IHRoZSBmb2xsb3dpbmcuCisKKyAgICAgQklTT049X2J1aWxkL3Rlc3RzL2Jpc29uIENDPSdnY2MgLU8yJyAuL2JlbmNoLnBsCisKKyhUaGUgX2J1aWxkL3Rlc3RzL2Jpc29uIHdyYXBwZXIgbWFrZXMgc3VyZSB0aGF0IF9idWlsZC9zcmMvYmlzb24gd2lsbAordXNlIHRoZSB0YXJiYWxscycgc2tlbGV0b25zLCBub3QgdGhvc2UgYWxyZWFkeSBpbnN0YWxsZWQgYXMgYQorc3RyYWlnaHRmb3J3YXJkIHVzZSBvZiBfYnVpbGQvc3JjL2Jpc29uIHdvdWxkLikKKworLS0KKworQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IG91dGxpbmUKK0VuZDoKZGlmZiAtLWdpdCBhL2V0Yy9iZW5jaC5wbC5pbiBiL2V0Yy9iZW5jaC5wbC5pbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZDQ4MGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZXRjL2JlbmNoLnBsLmluCkBAIC0wLDAgKzEsMzgzIEBACisjISAvdXNyL2Jpbi9wZXJsIC13CisKKyMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKwordXNlIElPOjpGaWxlOwordXNlIEJlbmNobWFyayBxdyAoOmFsbCk7CisKK215ICRiaXNvbiA9ICRFTlZ7J0JJU09OJ30gfHwgJ0BhYnNfdG9wX2J1aWxkZGlyQC90ZXN0cy9iaXNvbic7CitteSAkY2MgPSAkRU5WeydDQyd9IHx8ICdnY2MnOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc3ViIHRyaWFuZ3VsYXJfZ3JhbW1hciAoJCQkKQoreworICBteSAoJGJhc2UsICRtYXgsICRkaXJlY3RpdmVzKSA9IEBfOworCisgIG15ICRvdXQgPSBuZXcgSU86OkZpbGUgIj4kYmFzZS55IgorICAgIG9yIGRpZTsKKyAgcHJpbnQgJG91dCA8PEVPRjsKKyVlcnJvci12ZXJib3NlCislZGVidWcKKyV7CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworc3RhdGljIGludCB5eWxleCAodm9pZCk7CitzdGF0aWMgdm9pZCB5eWVycm9yIChjb25zdCBjaGFyICptc2cpOworJX0KKyV1bmlvbgoreworICBpbnQgdmFsOworfTsKKworJXRva2VuIEVORCAiZW5kIgorJXR5cGUgPHZhbD4gZXhwIGlucHV0CitFT0YKKworICBmb3IgbXkgJHNpemUgKDEgLi4gJG1heCkKKyAgICB7CisgICAgICBwcmludCAkb3V0ICIldG9rZW4gdCRzaXplICRzaXplIFwiJHNpemVcIlxuIjsKKyAgICB9OworCitwcmludCAkb3V0IDw8RU9GOworJSUKK2lucHV0OgorICBleHAgICAgICAgIHsgaWYgKFwkMSAhPSAwKSBhYm9ydCAoKTsgXCRcJCA9IFwkMTsgfQorfCBpbnB1dCBleHAgIHsgaWYgKFwkMiAhPSBcJDEgKyAxKSBhYm9ydCAoKTsgXCRcJCA9IFwkMjsgfQorOworCitleHA6CisgIEVORAorICAgIHsgXCRcJCA9IDA7IH0KK0VPRgorCitmb3IgbXkgJHNpemUgKDEgLi4gJG1heCkKKyAgeworICAgIHVzZSBUZXh0OjpXcmFwOworICAgIHByaW50ICRvdXQgd3JhcCAoInwgIiwgIiAgICIsCisJCSAgICAgKG1hcCB7ICJcIiRfXCIiIH0gKDEgLi4gJHNpemUpKSwKKwkJICAgICAiIEVORCBcbiIpLAorICAgICAgICAgICAgICAgIiAgICB7IFwkXCQgPSAkc2l6ZTsgfVxuIjsKKyAgfTsKK3ByaW50ICRvdXQgIjtcbiI7CisKK3ByaW50ICRvdXQgPDxFT0Y7CislJQorc3RhdGljIGludAoreXlsZXggKHZvaWQpCit7CisgIHN0YXRpYyBpbnQgaW5uZXIgPSAxOworICBzdGF0aWMgaW50IG91dGVyID0gMDsKKyAgaWYgKG91dGVyID4gJG1heCkKKyAgICByZXR1cm4gMDsKKyAgZWxzZSBpZiAoaW5uZXIgPiBvdXRlcikKKyAgICB7CisgICAgICBpbm5lciA9IDE7CisgICAgICArK291dGVyOworICAgICAgcmV0dXJuIEVORDsKKyAgICB9CisgIHJldHVybiBpbm5lcisrOworfQorCitzdGF0aWMgdm9pZAoreXllcnJvciAoY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xcbiIsIG1zZyk7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgeXlkZWJ1ZyA9ICEhZ2V0ZW52ICgiWVlERUJVRyIpOworICByZXR1cm4geXlwYXJzZSAoKTsKK30KK0VPRgorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc3ViIGNhbGNfaW5wdXQgKCQkKQoreworICBteSAoJGJhc2UsICRtYXgpID0gQF87CisgIG15ICRvdXQgPSBuZXcgSU86OkZpbGUgIj4kYmFzZS5pbnB1dCIKKyAgICBvciBkaWU7CisgIGZvcmVhY2ggKDEgLi4gJG1heCkKKyAgICB7CisgICAgICBwcmludCAkb3V0ICIwKzErMiszKzQrNSs2KzcrOCs5KzEwKzExKzEyKzEzKzE0KzE1KzE2KzE3KzE4KzE5KzIwKzIxKzIyKzIzKzI0KzI1KzI2KzI3KzI4KzI5KzMwKzMxKzMyKzMzKzM0KzM1KzM2KzM3KzM4KzM5KzQwKzQxKzQyKzQzKzQ0KzQ1KzQ2KzQ3KzQ4KzQ5KzUwKzUxKzUyKzUzKzU0KzU1KzU2KzU3KzU4KzU5KzYwKzYxKzYyKzYzKzY0KzY1KzY2KzY3KzY4KzY5KzcwKzcxKzcyKzczKzc0Kzc1Kzc2Kzc3Kzc4Kzc5KzgwKzgxKzgyKzgzKzg0Kzg1Kzg2Kzg3Kzg4Kzg5KzkwKzkxKzkyKzkzKzk0Kzk1Kzk2Kzk3Kzk4Kzk5XG4iOworICAgICAgcHJpbnQgJG91dCAiMSsxKigyKzIqKDMrMyooNCs0Kig1KzUqKDYrNiooNys3Kig4KzgqKDkrOSooMTArMTAqKDExKzExKigxMisxMiooMTMrMTMqKDE0KzE0KigxNSsxNSooMTYrMTYqKDE3KzE3KigxOCsxOCooMTkrMTkqKDIwKzIwKigyMSsyMSooMjIrMjIqKDIzKzIzKigyNCsyNCooMjUrMjUqKDI2KzI2KigyNysyNyooMjgrMjgqKDI5KzI5KigzMCszMCooMzErMzEqKDMyKzMyKigzMyszMyooMzQrMzQqKDM1KzM1KigzNiszNiooMzcrMzcqKDM4KzM4KigzOSszOSooNDArNDAqKDQxKzQxKig0Mis0MiooNDMrNDMqKDQ0KzQ0Kig0NSs0NSooNDYrNDYqKDQ3KzQ3Kig0OCs0OCooNDkrNDkqKDUwKzUwKig1MSs1MSooNTIrNTIqKDUzKzUzKig1NCs1NCooNTUrNTUqKDU2KzU2Kig1Nys1NyooNTgrNTgqKDU5KzU5Kig2MCs2MCooNjErNjEqKDYyKzYyKig2Mys2MyooNjQrNjQqKDY1KzY1Kig2Nis2NiooNjcrNjcqKDY4KzY4Kig2OSs2OSooNzArNzAqKDcxKzcxKig3Mis3MiooNzMrNzMqKDc0Kzc0Kig3NSs3NSooNzYrNzYqKDc3Kzc3Kig3OCs3OCooNzkrNzkqKDgwKzgwKig4MSs4MSooODIrODIqKDgzKzgzKig4NCs4NCooODUrODUqKDg2Kzg2Kig4Nys4NyooODgrODgqKDg5Kzg5Kig5MCs5MCooOTErOTEqKDkyKzkyKig5Mys5MyooOTQrOTQqKDk1Kzk1Kig5Nis5NiooOTcrOTcqKDk4Kzk4Kig5OSs5OSooMTAwKzEwMCooMTAxKzEwMSooMTAyKzEwMiooMTAzKzEwMyooMTA0KzEwNCooMTA1KzEwNSooMTA2KzEwNiooMTA3KzEwNyooMTA4KzEwOCooMTA5KzEwOSooMTEwKzExMCooMTExKzExMSooMTEyKzExMiooMTEzKzExMyooMTE0KzExNCooMTE1KzExNSooMTE2KzExNiooMTE3KzExNyooMTE4KzExOCooMTE5KzExOSooMTIwKzEyMCooMTIxKzEyMSooMTIyKzEyMiooMTIzKzEyMyooMTI0KzEyNCooMTI1KzEyNSooMTI2KzEyNiooMTI3KzEyNyooMTI4KzEyOCooMTI5KzEyOSooMTMwKzEzMCooMTMxKzEzMSooMTMyKzEzMiooMTMzKzEzMyooMTM0KzEzNCooMTM1KzEzNSooMTM2KzEzNiooMTM3KzEzNyooMTM4KzEzOCooMTM5KzEzOSooMTQwKzE0MCooMTQxKzE0MSooMTQyKzE0MiooMTQzKzE0MyooMTQ0KzE0NCooMTQ1KzE0NSooMTQ2KzE0NiooMTQ3KzE0NyooMTQ4KzE0OCooMTQ5KzE0OSooMTUwKzE1MCooMTUxKzE1MSooMTUyKzE1MiooMTUzKzE1MyooMTU0KzE1NCooMTU1KzE1NSooMTU2KzE1NiooMTU3KzE1NyooMTU4KzE1OCooMTU5KzE1OSooMTYwKzE2MCooMTYxKzE2MSooMTYyKzE2MiooMTYzKzE2MyooMTY0KzE2NCooMTY1KzE2NSooMTY2KzE2NiooMTY3KzE2NyooMTY4KzE2OCooMTY5KzE2OSooMTcwKzE3MCooMTcxKzE3MSooMTcyKzE3MiooMTczKzE3MyooMTc0KzE3NCooMTc1KzE3NSooMTc2KzE3NiooMTc3KzE3NyooMTc4KzE3OCooMTc5KzE3OSooMTgwKzE4MCooMTgxKzE4MSooMTgyKzE4MiooMTgzKzE4MyooMTg0KzE4NCooMTg1KzE4NSooMTg2KzE4NiooMTg3KzE4NyooMTg4KzE4OCooMTg5KzE4OSooMTkwKzE5MCooMTkxKzE5MSooMTkyKzE5MiooMTkzKzE5MyooMTk0KzE5NCooMTk1KzE5NSooMTk2KzE5NiooMTk3KzE5NyooMTk4KzE5OCooMTk5KzE5OSooMjAwKzIwMCooMjAxKzIwMSooMjAyKzIwMiooMjAzKzIwMyooMjA0KzIwNCooMjA1KzIwNSooMjA2KzIwNiooMjA3KzIwNyooMjA4KzIwOCooMjA5KzIwOSooMjEwKzIxMCooMjExKzIxMSooMjEyKzIxMiooMjEzKzIxMyooMjE0KzIxNCooMjE1KzIxNSooMjE2KzIxNiooMjE3KzIxNyooMjE4KzIxOCooMjE5KzIxOSooMjIwKzIyMCooMjIxKzIyMSooMjIyKzIyMiooMjIzKzIyMyooMjI0KzIyNCooMjI1KzIyNSooMjI2KzIyNiooMjI3KzIyNyooMjI4KzIyOCooMjI5KzIyOSooMjMwKzIzMCooMjMxKzIzMSooMjMyKzIzMiooMjMzKzIzMyooMjM0KzIzNCooMjM1KzIzNSooMjM2KzIzNiooMjM3KzIzNyooMjM4KzIzOCooMjM5KzIzOSooMjQwKzI0MCooMjQxKzI0MSooMjQyKzI0MiooMjQzKzI0MyooMjQ0KzI0NCooMjQ1KzI0NSooMjQ2KzI0NiooMjQ3KzI0NyooMjQ4KzI0OCooMjQ5KzI0OSooMjUwKzI1MCooMjUxKzI1MSooMjUyKzI1MiooMjUzKzI1MyooMjU0KzI1NCooMjU1KzI1NSooMjU2KzI1NiooMjU3KzI1NyooMjU4KzI1OCooMjU5KzI1OSooMjYwKzI2MCooMjYxKzI2MSooMjYyKzI2MiooMjYzKzI2MyooMjY0KzI2NCooMjY1KzI2NSooMjY2KzI2NiooMjY3KzI2NyooMjY4KzI2OCooMjY5KzI2OSooMjcwKzI3MCooMjcxKzI3MSooMjcyKzI3MiooMjczKzI3MyooMjc0KzI3NCooMjc1KzI3NSooMjc2KzI3NiooMjc3KzI3NyooMjc4KzI3OCooMjc5KzI3OSooMjgwKzI4MCooMjgxKzI4MSooMjgyKzI4MiooMjgzKzI4MyooMjg0KzI4NCooMjg1KzI4NSooMjg2KzI4NiooMjg3KzI4NyooMjg4KzI4OCooMjg5KzI4OSooMjkwKzI5MCooMjkxKzI5MSooMjkyKzI5MiooMjkzKzI5MyooMjk0KzI5NCooMjk1KzI5NSooMjk2KzI5NiooMjk3KzI5NyooMjk4KzI5OCooMjk5KzI5OSooMzAwKzMwMCooMzAxKzMwMSooMzAyKzMwMiooMzAzKzMwMyooMzA0KzMwNCooMzA1KzMwNSooMzA2KzMwNiooMzA3KzMwNyooMzA4KzMwOCooMzA5KzMwOSooMzEwKzMxMCooMzExKzMxMSooMzEyKzMxMiooMzEzKzMxMyooMzE0KzMxNCooMzE1KzMxNSooMzE2KzMxNiooMzE3KzMxNyooMzE4KzMxOCooMzE5KzMxOSooMzIwKzMyMCooMzIxKzMyMSooMzIyKzMyMiooMzIzKzMyMyooMzI0KzMyNCooMzI1KzMyNSooMzI2KzMyNiooMzI3KzMyNyooMzI4KzMyOCooMzI5KzMyOSooMzMwKzMzMCooMzMxKzMzMSooMzMyKzMzMiooMzMzKzMzMyooMzM0KzMzNCooMzM1KzMzNSooMzM2KzMzNiooMzM3KzMzNyooMzM4KzMzOCooMzM5KzMzOSooMzQwKzM0MCooMzQxKzM0MSooMzQyKzM0MiooMzQzKzM0MyooMzQ0KzM0NCooMzQ1KzM0NSooMzQ2KzM0NiooMzQ3KzM0NyooMzQ4KzM0OCooMzQ5KzM0OSooMzUwKzM1MCooMzUxKzM1MSooMzUyKzM1MiooMzUzKzM1MyooMzU0KzM1NCooMzU1KzM1NSooMzU2KzM1NiooMzU3KzM1NyooMzU4KzM1OCooMzU5KzM1OSooMzYwKzM2MCooMzYxKzM2MSooMzYyKzM2MiooMzYzKzM2MyooMzY0KzM2NCooMzY1KzM2NSooMzY2KzM2NiooMzY3KzM2NyooMzY4KzM2OCooMzY5KzM2OSooMzcwKzM3MCooMzcxKzM3MSooMzcyKzM3MiooMzczKzM3MyooMzc0KzM3NCooMzc1KzM3NSooMzc2KzM3NiooMzc3KzM3NyooMzc4KzM3OCooMzc5KzM3OSooMzgwKzM4MCooMzgxKzM4MSooMzgyKzM4MiooMzgzKzM4MyooMzg0KzM4NCooMzg1KzM4NSooMzg2KzM4NiooMzg3KzM4NyooMzg4KzM4OCooMzg5KzM4OSooMzkwKzM5MCooMzkxKzM5MSooMzkyKzM5MiooMzkzKzM5MyooMzk0KzM5NCooMzk1KzM5NSooMzk2KzM5NiooMzk3KzM5NyooMzk4KzM5OCooMzk5KzM5OSooNDAwKzQwMCooNDAxKzQwMSooNDAyKzQwMiooNDAzKzQwMyooNDA0KzQwNCooNDA1KzQwNSooNDA2KzQwNiooNDA3KzQwNyooNDA4KzQwOCooNDA5KzQwOSooNDEwKzQxMCooNDExKzQxMSooNDEyKzQxMiooNDEzKzQxMyooNDE0KzQxNCooNDE1KzQxNSooNDE2KzQxNiooNDE3KzQxNyooNDE4KzQxOCooNDE5KzQxOSooNDIwKzQyMCooNDIxKzQyMSooNDIyKzQyMiooNDIzKzQyMyooNDI0KzQyNCooNDI1KzQyNSooNDI2KzQyNiooNDI3KzQyNyooNDI4KzQyOCooNDI5KzQyOSooNDMwKzQzMCooNDMxKzQzMSooNDMyKzQzMiooNDMzKzQzMyooNDM0KzQzNCooNDM1KzQzNSooNDM2KzQzNiooNDM3KzQzNyooNDM4KzQzOCooNDM5KzQzOSooNDQwKzQ0MCooNDQxKzQ0MSooNDQyKzQ0MiooNDQzKzQ0MyooNDQ0KzQ0NCooNDQ1KzQ0NSooNDQ2KzQ0NiooNDQ3KzQ0NyooNDQ4KzQ0OCooNDQ5KzQ0OSooNDUwKzQ1MCooNDUxKzQ1MSooNDUyKzQ1MiooNDUzKzQ1MyooNDU0KzQ1NCooNDU1KzQ1NSooNDU2KzQ1NiooNDU3KzQ1NyooNDU4KzQ1OCooNDU5KzQ1OSooNDYwKzQ2MCooNDYxKzQ2MSooNDYyKzQ2MiooNDYzKzQ2MyooNDY0KzQ2NCooNDY1KzQ2NSooNDY2KzQ2NiooNDY3KzQ2NyooNDY4KzQ2OCooNDY5KzQ2OSooNDcwKzQ3MCooNDcxKzQ3MSooNDcyKzQ3MiooNDczKzQ3MyooNDc0KzQ3NCooNDc1KzQ3NSooNDc2KzQ3NiooNDc3KzQ3NyooNDc4KzQ3OCooNDc5KzQ3OSooNDgwKzQ4MCooNDgxKzQ4MSooNDgyKzQ4MiooNDgzKzQ4MyooNDg0KzQ4NCooNDg1KzQ4NSooNDg2KzQ4NiooNDg3KzQ4NyooNDg4KzQ4OCooNDg5KzQ4OSooNDkwKzQ5MCooNDkxKzQ5MSooNDkyKzQ5MiooNDkzKzQ5MyooNDk0KzQ5NCooNDk1KzQ5NSooNDk2KzQ5NiooNDk3KzQ5NyooNDk4KzQ5OCooNDk5KzQ5OSooNTAwKzUwMCooNTAxKzUwMSooNTAyKzUwMiooNTAzKzUwMyooNTA0KzUwNCooNTA1KzUwNSooNTA2KzUwNiooNTA3KzUwNyooNTA4KzUwOCooNTA5KzUwOSooNTEwKzUxMCooNTExKzUxMSooNTEyKzUxMiooNTEzKzUxMyooNTE0KzUxNCooNTE1KzUxNSooNTE2KzUxNiooNTE3KzUxNyooNTE4KzUxOCooNTE5KzUxOSooNTIwKzUyMCooNTIxKzUyMSooNTIyKzUyMiooNTIzKzUyMyooNTI0KzUyNCooNTI1KzUyNSooNTI2KzUyNiooNTI3KzUyNyooNTI4KzUyOCooNTI5KzUyOSooNTMwKzUzMCooNTMxKzUzMSooNTMyKzUzMiooNTMzKzUzMyooNTM0KzUzNCooNTM1KzUzNSooNTM2KzUzNiooNTM3KzUzNyooNTM4KzUzOCooNTM5KzUzOSooNTQwKzU0MCooNTQxKzU0MSooNTQyKzU0MiooNTQzKzU0MyooNTQ0KzU0NCooNTQ1KzU0NSooNTQ2KzU0NiooNTQ3KzU0NyooNTQ4KzU0OCooNTQ5KzU0OSooNTUwKzU1MCooNTUxKzU1MSooNTUyKzU1MiooNTUzKzU1MyooNTU0KzU1NCooNTU1KzU1NSooNTU2KzU1NiooNTU3KzU1NyooNTU4KzU1OCooNTU5KzU1OSooNTYwKzU2MCooNTYxKzU2MSooNTYyKzU2MiooNTYzKzU2MyooNTY0KzU2NCooNTY1KzU2NSooNTY2KzU2NiooNTY3KzU2NyooNTY4KzU2OCooNTY5KzU2OSooNTcwKzU3MCooNTcxKzU3MSooNTcyKzU3MiooNTczKzU3MyooNTc0KzU3NCooNTc1KzU3NSooNTc2KzU3NiooNTc3KzU3NyooNTc4KzU3OCooNTc5KzU3OSooNTgwKzU4MCooNTgxKzU4MSooNTgyKzU4MiooNTgzKzU4MyooNTg0KzU4NCooNTg1KzU4NSooNTg2KzU4NiooNTg3KzU4NyooNTg4KzU4OCooNTg5KzU4OSooNTkwKzU5MCooNTkxKzU5MSooNTkyKzU5MiooNTkzKzU5MyooNTk0KzU5NCooNTk1KzU5NSooNTk2KzU5NiooNTk3KzU5NyooNTk4KzU5OCooNTk5KzU5OSooNjAwKzYwMCooNjAxKzYwMSooNjAyKzYwMiooNjAzKzYwMyooNjA0KzYwNCooNjA1KzYwNSooNjA2KzYwNiooNjA3KzYwNyooNjA4KzYwOCooNjA5KzYwOSooNjEwKzYxMCooNjExKzYxMSooNjEyKzYxMiooNjEzKzYxMyooNjE0KzYxNCooNjE1KzYxNSooNjE2KzYxNiooNjE3KzYxNyooNjE4KzYxOCooNjE5KzYxOSooNjIwKzYyMCooNjIxKzYyMSooNjIyKzYyMiooNjIzKzYyMyooNjI0KzYyNCooNjI1KzYyNSooNjI2KzYyNiooNjI3KzYyNyooNjI4KzYyOCooNjI5KzYyOSooNjMwKzYzMCooNjMxKzYzMSooNjMyKzYzMiooNjMzKzYzMyooNjM0KzYzNCooNjM1KzYzNSooNjM2KzYzNiooNjM3KzYzNyooNjM4KzYzOCooNjM5KzYzOSooNjQwKzY0MCooNjQxKzY0MSooNjQyKzY0MiooNjQzKzY0MyooNjQ0KzY0NCooNjQ1KzY0NSooNjQ2KzY0NiooNjQ3KzY0NyooNjQ4KzY0OCooNjQ5KzY0OSooNjUwKzY1MCooNjUxKzY1MSooNjUyKzY1MiooNjUzKzY1MyooNjU0KzY1NCooNjU1KzY1NSooNjU2KzY1NiooNjU3KzY1NyooNjU4KzY1OCooNjU5KzY1OSooNjYwKzY2MCooNjYxKzY2MSooNjYyKzY2MiooNjYzKzY2MyooNjY0KzY2NCooNjY1KzY2NSooNjY2KzY2NiooNjY3KzY2NyooNjY4KzY2OCooNjY5KzY2OSooNjcwKzY3MCooNjcxKzY3MSooNjcyKzY3MiooNjczKzY3MyooNjc0KzY3NCooNjc1KzY3NSooNjc2KzY3NiooNjc3KzY3NyooNjc4KzY3OCooNjc5KzY3OSooNjgwKzY4MCooNjgxKzY4MSooNjgyKzY4MiooNjgzKzY4MyooNjg0KzY4NCooNjg1KzY4NSooNjg2KzY4NiooNjg3KzY4NyooNjg4KzY4OCooNjg5KzY4OSooNjkwKzY5MCooNjkxKzY5MSooNjkyKzY5MiooNjkzKzY5MyooNjk0KzY5NCooNjk1KzY5NSooNjk2KzY5NiooNjk3KzY5NyooNjk4KzY5OCooNjk5KzY5OSooNzAwKzcwMCooNzAxKzcwMSooNzAyKzcwMiooNzAzKzcwMyooNzA0KzcwNCooNzA1KzcwNSooNzA2KzcwNiooNzA3KzcwNyooNzA4KzcwOCooNzA5KzcwOSooNzEwKzcxMCooNzExKzcxMSooNzEyKzcxMiooNzEzKzcxMyooNzE0KzcxNCooNzE1KzcxNSooNzE2KzcxNiooNzE3KzcxNyooNzE4KzcxOCooNzE5KzcxOSooNzIwKzcyMCooNzIxKzcyMSooNzIyKzcyMiooNzIzKzcyMyooNzI0KzcyNCooNzI1KzcyNSooNzI2KzcyNiooNzI3KzcyNyooNzI4KzcyOCooNzI5KzcyOSooNzMwKzczMCooNzMxKzczMSooNzMyKzczMiooNzMzKzczMyooNzM0KzczNCooNzM1KzczNSooNzM2KzczNiooNzM3KzczNyooNzM4KzczOCooNzM5KzczOSooNzQwKzc0MCooNzQxKzc0MSooNzQyKzc0MiooNzQzKzc0MyooNzQ0Kzc0NCooNzQ1Kzc0NSooNzQ2Kzc0NiooNzQ3Kzc0NyooNzQ4Kzc0OCooNzQ5Kzc0OSooNzUwKzc1MCooNzUxKzc1MSooNzUyKzc1MiooNzUzKzc1MyooNzU0Kzc1NCooNzU1Kzc1NSooNzU2Kzc1NiooNzU3Kzc1NyooNzU4Kzc1OCooNzU5Kzc1OSooNzYwKzc2MCooNzYxKzc2MSooNzYyKzc2MiooNzYzKzc2MyooNzY0Kzc2NCooNzY1Kzc2NSooNzY2Kzc2NiooNzY3Kzc2NyooNzY4Kzc2OCooNzY5Kzc2OSooNzcwKzc3MCooNzcxKzc3MSooNzcyKzc3MiooNzczKzc3MyooNzc0Kzc3NCooNzc1Kzc3NSooNzc2Kzc3NiooNzc3Kzc3NyooNzc4Kzc3OCooNzc5Kzc3OSooNzgwKzc4MCooNzgxKzc4MSooNzgyKzc4MiooNzgzKzc4MyooNzg0Kzc4NCooNzg1Kzc4NSooNzg2Kzc4NiooNzg3Kzc4NyooNzg4Kzc4OCooNzg5Kzc4OSooNzkwKzc5MCooNzkxKzc5MSooNzkyKzc5MiooNzkzKzc5MyooNzk0Kzc5NCooNzk1Kzc5NSooNzk2Kzc5NiooNzk3Kzc5NyooNzk4Kzc5OCooNzk5Kzc5OSooODAwKzgwMCooODAxKzgwMSooODAyKzgwMiooODAzKzgwMyooODA0KzgwNCooODA1KzgwNSooODA2KzgwNiooODA3KzgwNyooODA4KzgwOCooODA5KzgwOSooODEwKzgxMCooODExKzgxMSooODEyKzgxMiooODEzKzgxMyooODE0KzgxNCooODE1KzgxNSooODE2KzgxNiooODE3KzgxNyooODE4KzgxOCooODE5KzgxOSooODIwKzgyMCooODIxKzgyMSooODIyKzgyMiooODIzKzgyMyooODI0KzgyNCooODI1KzgyNSooODI2KzgyNiooODI3KzgyNyooODI4KzgyOCooODI5KzgyOSooODMwKzgzMCooODMxKzgzMSooODMyKzgzMiooODMzKzgzMyooODM0KzgzNCooODM1KzgzNSooODM2KzgzNiooODM3KzgzNyooODM4KzgzOCooODM5KzgzOSooODQwKzg0MCooODQxKzg0MSooODQyKzg0MiooODQzKzg0MyooODQ0Kzg0NCooODQ1Kzg0NSooODQ2Kzg0NiooODQ3Kzg0NyooODQ4Kzg0OCooODQ5Kzg0OSooODUwKzg1MCooODUxKzg1MSooODUyKzg1MiooODUzKzg1MyooODU0Kzg1NCooODU1Kzg1NSooODU2Kzg1NiooODU3Kzg1NyooODU4Kzg1OCooODU5Kzg1OSooODYwKzg2MCooODYxKzg2MSooODYyKzg2MiooODYzKzg2MyooODY0Kzg2NCooODY1Kzg2NSooODY2Kzg2NiooODY3Kzg2NyooODY4Kzg2OCooODY5Kzg2OSooODcwKzg3MCooODcxKzg3MSooODcyKzg3MiooODczKzg3MyooODc0Kzg3NCooODc1Kzg3NSooODc2Kzg3NiooODc3Kzg3NyooODc4Kzg3OCooODc5Kzg3OSooODgwKzg4MCooODgxKzg4MSooODgyKzg4MiooODgzKzg4MyooODg0Kzg4NCooODg1Kzg4NSooODg2Kzg4NiooODg3Kzg4NyooODg4Kzg4OCooODg5Kzg4OSooODkwKzg5MCooODkxKzg5MSooODkyKzg5MiooODkzKzg5MyooODk0Kzg5NCooODk1Kzg5NSooODk2Kzg5NiooODk3Kzg5NyooODk4Kzg5OCooODk5Kzg5OSooOTAwKzkwMCooOTAxKzkwMSooOTAyKzkwMiooOTAzKzkwMyooOTA0KzkwNCooOTA1KzkwNSooOTA2KzkwNiooOTA3KzkwNyooOTA4KzkwOCooOTA5KzkwOSooOTEwKzkxMCooOTExKzkxMSooOTEyKzkxMiooOTEzKzkxMyooOTE0KzkxNCooOTE1KzkxNSooOTE2KzkxNiooOTE3KzkxNyooOTE4KzkxOCooOTE5KzkxOSooOTIwKzkyMCooOTIxKzkyMSooOTIyKzkyMiooOTIzKzkyMyooOTI0KzkyNCooOTI1KzkyNSooOTI2KzkyNiooOTI3KzkyNyooOTI4KzkyOCooOTI5KzkyOSooOTMwKzkzMCooOTMxKzkzMSooOTMyKzkzMiooOTMzKzkzMyooOTM0KzkzNCooOTM1KzkzNSooOTM2KzkzNiooOTM3KzkzNyooOTM4KzkzOCooOTM5KzkzOSooOTQwKzk0MCooOTQxKzk0MSooOTQyKzk0MiooOTQzKzk0MyooOTQ0Kzk0NCooOTQ1Kzk0NSooOTQ2Kzk0NiooOTQ3Kzk0NyooOTQ4Kzk0OCooOTQ5Kzk0OSooOTUwKzk1MCooOTUxKzk1MSooOTUyKzk1MiooOTUzKzk1MyooOTU0Kzk1NCooOTU1Kzk1NSooOTU2Kzk1NiooOTU3Kzk1NyooOTU4Kzk1OCooOTU5Kzk1OSooOTYwKzk2MCooOTYxKzk2MSooOTYyKzk2MiooOTYzKzk2MyooOTY0Kzk2NCooOTY1Kzk2NSooOTY2Kzk2NiooOTY3Kzk2NyooOTY4Kzk2OCooOTY5Kzk2OSooOTcwKzk3MCooOTcxKzk3MSooOTcyKzk3MiooOTczKzk3MyooOTc0Kzk3NCooOTc1Kzk3NSooOTc2Kzk3NiooOTc3Kzk3NyooOTc4Kzk3OCooOTc5Kzk3OSooOTgwKzk4MCooOTgxKzk4MSooOTgyKzk4MiooOTgzKzk4MyooOTg0Kzk4NCooOTg1Kzk4NSooOTg2Kzk4NiooOTg3Kzk4NyooOTg4Kzk4OCooOTg5Kzk4OSooOTkwKzk5MCooOTkxKzk5MSooOTkyKzk5MiooOTkzKzk5MyooOTk0Kzk5NCooOTk1Kzk5NSooOTk2Kzk5NiooOTk3Kzk5NyooOTk4Kzk5OCooOTk5Kzk5OSooMTAwMCsxMDAwKigxMDAxKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKVxuIjsKKyAgICB9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzdWIgY2FsY19ncmFtbWFyICgkJCQpCit7CisgIG15ICgkYmFzZSwgJG1heCwgJGRpcmVjdGl2ZXMpID0gQF87CisKKyAgbXkgJG91dCA9IG5ldyBJTzo6RmlsZSAiPiRiYXNlLnkiCisgICAgb3IgZGllOworICBwcmludCAkb3V0IDw8RU9GOworJXsKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjZGVmaW5lIFVTRShWYXIpCisKKy8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCit0eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKKworc3RhdGljIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOworc3RhdGljIGludCBnbG9iYWxfY291bnQgPSAwOworJX0KKworLyogRXhlcmNpc2UgJXVuaW9uLiAqLworJGRpcmVjdGl2ZXMKKyVlcnJvci12ZXJib3NlCisldW5pb24KK3sKKyAgc2VtYW50aWNfdmFsdWUgaXZhbDsKK307CisKKyV7CitzdGF0aWMgaW50IHBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KTsKKy8qIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmOgorICAgLSAlbG9jYXRpb24gJiAlcHVyZSAmICVnbHIKKyAgIC0gJWxvY2F0aW9uICYgJXB1cmUgJiAleWFjYyAmICVwYXJzZS1wYXJhbS4gKi8KK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKGNvbnN0IGNoYXIgKnMpOworI2lmIFlZUFVSRQorc3RhdGljIGludCB5eWxleCAoWVlTVFlQRSogeXlsdmFscCk7CisjZWxzZQorc3RhdGljIGludCB5eWxleCAodm9pZCk7CisjZW5kaWYKKyV9CisKKy8qIEJpc29uIERlY2xhcmF0aW9ucyAqLworJXRva2VuIENBTENfRU9GIDAgImVuZCBvZiBpbnB1dCIKKyV0b2tlbiA8aXZhbD4gTlVNICJudW1iZXIiCisldHlwZSAgPGl2YWw+IGV4cAorCislbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24JICAgICAgICovCislbGVmdCAnLScgJysnCislbGVmdCAnKicgJy8nCislbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLworJXJpZ2h0ICdeJyAgICAvKiBleHBvbmVudGlhdGlvbiAgICAgICAgKi8KKworLyogR3JhbW1hciBmb2xsb3dzICovCislJQoraW5wdXQ6CisgIGxpbmUKK3wgaW5wdXQgbGluZQorOworCitsaW5lOgorICAnXFxuJworfCBleHAgJ1xcbicgICAgICAgICAgIHsgVVNFIChcJDEpOyB9Cis7CisKK2V4cDoKKyAgTlVNICAgICAgICAgICAgICAgIHsgXCRcJCA9IFwkMTsgICAgICAgICAgICAgfQorfCBleHAgJz0nIGV4cAorICB7CisgICAgaWYgKFwkMSAhPSBcJDMpCisgICAgICBmcHJpbnRmIChzdGRlcnIsICJjYWxjOiBlcnJvcjogJWQgIT0gJWRcXG4iLCBcJDEsIFwkMyk7CisgICAgXCRcJCA9IFwkMTsKKyAgfQorfCBleHAgJysnIGV4cCAgICAgICAgeyBcJFwkID0gXCQxICsgXCQzOyAgICAgICAgfQorfCBleHAgJy0nIGV4cCAgICAgICAgeyBcJFwkID0gXCQxIC0gXCQzOyAgICAgICAgfQorfCBleHAgJyonIGV4cCAgICAgICAgeyBcJFwkID0gXCQxICogXCQzOyAgICAgICAgfQorfCBleHAgJy8nIGV4cCAgICAgICAgeyBcJFwkID0gXCQxIC8gXCQzOyAgICAgICAgfQorfCAnLScgZXhwICAlcHJlYyBORUcgeyBcJFwkID0gLVwkMjsgICAgICAgICAgICB9Cit8IGV4cCAnXicgZXhwICAgICAgICB7IFwkXCQgPSBwb3dlciAoXCQxLCBcJDMpOyB9Cit8ICcoJyBleHAgJyknICAgICAgICB7IFwkXCQgPSBcJDI7ICAgICAgICAgICAgIH0KK3wgJygnIGVycm9yICcpJyAgICAgIHsgXCRcJCA9IDExMTE7ICAgICAgICAgICB9Cit8ICchJyAgICAgICAgICAgICAgICB7IFwkXCQgPSAwOyBZWUVSUk9SOyAgICAgfQorfCAnLScgZXJyb3IgICAgICAgICAgeyBcJFwkID0gMDsgWVlFUlJPUjsgICAgIH0KKzsKKyUlCisvKiBUaGUgaW5wdXQuICAqLworc3RhdGljIEZJTEUgKmlucHV0OworCitzdGF0aWMgdm9pZAoreXllcnJvciAoY29uc3QgY2hhciAqcykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcXG4iLCBzKTsKK30KKworc3RhdGljIGludAorZ2V0X2NoYXIgKHZvaWQpCit7CisgIHJldHVybiBnZXRjIChpbnB1dCk7Cit9CisKKworc3RhdGljIHZvaWQKK3VuZ2V0X2NoYXIgKCBpbnQgYykKK3sKKyAgdW5nZXRjIChjLCBpbnB1dCk7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRfc2lnbmVkX2ludGVnZXIgKHZvaWQpCit7CisgIGludCBjID0gZ2V0X2NoYXIgKCk7CisgIGludCBzaWduID0gMTsKKyAgaW50IG4gPSAwOworCisgIGlmIChjID09ICctJykKKyAgICB7CisgICAgICBjID0gZ2V0X2NoYXIgKCk7CisgICAgICBzaWduID0gLTE7CisgICAgfQorCisgIHdoaWxlIChpc2RpZ2l0IChjKSkKKyAgICB7CisgICAgICBuID0gMTAgKiBuICsgKGMgLSAnMCcpOworICAgICAgYyA9IGdldF9jaGFyICgpOworICAgIH0KKworICB1bmdldF9jaGFyIChjKTsKKworICByZXR1cm4gc2lnbiAqIG47Cit9CisKK3N0YXRpYyBpbnQKKyNpZiBZWVBVUkUKKyMgZGVmaW5lIHl5bHZhbCAoKnl5bHZhbHApCit5eWxleCAoWVlTVFlQRSogeXlsdmFscCkKKyNlbHNlCit5eWxleCAodm9pZCkKKyNlbmRpZgoreworICBpbnQgYzsKKworICAvKiBTa2lwIHdoaXRlIHNwYWNlLiAgKi8KKyAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKCkpID09ICcgJyB8fCBjID09ICdcdCcpCisgICAgY29udGludWU7CisKKyAgLyogcHJvY2VzcyBudW1iZXJzICAgKi8KKyAgaWYgKGMgPT0gJy4nIHx8IGlzZGlnaXQgKGMpKQorICAgIHsKKyAgICAgIHVuZ2V0X2NoYXIgKCBjKTsKKyAgICAgIHl5bHZhbC5pdmFsID0gcmVhZF9zaWduZWRfaW50ZWdlciAoKTsKKyAgICAgIHJldHVybiBOVU07CisgICAgfQorCisgIC8qIFJldHVybiBlbmQtb2YtZmlsZS4gICovCisgIGlmIChjID09IEVPRikKKyAgICByZXR1cm4gQ0FMQ19FT0Y7CisKKyAgLyogUmV0dXJuIHNpbmdsZSBjaGFycy4gKi8KKyAgcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBpbnQKK3Bvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQoreworICBhc3NlcnQgKDAgPD0gZXhwb25lbnQpOworICBpbnQgcmVzID0gMTsKKyAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQorICAgIHJlcyAqPSBiYXNlOworICByZXR1cm4gcmVzOworfQorCisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworICBzZW1hbnRpY192YWx1ZSByZXN1bHQgPSAwOworICBpbnQgY291bnQgPSAwOworICBpbnQgc3RhdHVzOworCisgIGlucHV0ID0gZm9wZW4gKCJjYWxjLmlucHV0IiwgInIiKTsKKyAgaWYgKCFpbnB1dCkKKyAgICB7CisgICAgICBwZXJyb3IgKCJjYWxjLmlucHV0Iik7CisgICAgICByZXR1cm4gMzsKKyAgICB9CisKKyAgc3RhdHVzID0geXlwYXJzZSAoKTsKKyAgaWYgKGdsb2JhbF9yZXN1bHQgIT0gcmVzdWx0KQorICAgIGFib3J0ICgpOworICBpZiAoZ2xvYmFsX2NvdW50ICE9IGNvdW50KQorICAgIGFib3J0ICgpOworCisgIHJldHVybiBzdGF0dXM7Cit9CitFT0YKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3N1YiBjb21waWxlICgkKQoreworICBteSAoJGJhc2UpID0gQF87CisgIHN5c3RlbSAoIiRiaXNvbiAkYmFzZS55IC1vICRiYXNlLmMiKSA9PSAwCisgICAgb3IgZGllOworICBzeXN0ZW0gKCIkY2MgLW8gJGJhc2UgJGJhc2UuYyIpID09IDAKKyAgICBvciBkaWU7Cit9CisKK3N1YiBiZW5jaF9ncmFtbWFyICgkKQoreworICBteSAoJGdyYW0pID0gQF87CisgIG15ICV0ZXN0ID0KKyAgICAoCisgICAgICJwdWxsLWltcHVyZSIgPT4gJycsCisgICAgICJwdWxsLXB1cmUiID0+ICclZGVmaW5lIGFwaS5wdXJlJywKKyAgICAgInB1c2gtaW1wdXJlIiA9PiAnJWRlZmluZSBhcGkucHVzaC1wdWxsICJib3RoIicsCisgICAgICJwdXNoLXB1cmUiID0+ICclZGVmaW5lIGFwaS5wdXNoLXB1bGwgImJvdGgiICVkZWZpbmUgYXBpLnB1cmUnLAorICAgICk7CisKKyAgbXkgJWJlbmNoOworICB3aGlsZSAobXkgKCRuYW1lLCAkZGlyZWN0aXZlcykgPSBlYWNoICV0ZXN0KQorICAgIHsKKyAgICAgIHByaW50IFNUREVSUiAiJG5hbWVcbiI7CisgICAgICBteSAkZ2VuZXJhdG9yID0gIiRncmFtIiAuICJfZ3JhbW1hciI7CisgICAgICAmJGdlbmVyYXRvciAoJG5hbWUsIDIwMCwgJGRpcmVjdGl2ZXMpOworICAgICAgY29tcGlsZSAoJG5hbWUpOworICAgICAgJGJlbmNoeyRuYW1lfSA9ICJzeXN0ZW0gKCcuLyRuYW1lJyk7IjsKKyAgICB9CisKKyAgcHJpbnQgIiRncmFtOlxuIjsKKyAgbXkgJHJlcyA9IHRpbWV0aGVzZSAoNTAsIFwlYmVuY2gsICdub3AnKTsKKyAgY21wdGhlc2UgKCRyZXMsICdub3AnKTsKK30KKworcHJpbnQgU1RERVJSICJVc2luZyAkYmlzb24sICRjYy5cbiI7CitjYWxjX2lucHV0ICgnY2FsYycsIDIwMCk7CitiZW5jaF9ncmFtbWFyICgnY2FsYycpOworCisjIyMgU2V0dXAgIkdOVSIgc3R5bGUgZm9yIHBlcmwtbW9kZSBhbmQgY3BlcmwtbW9kZS4KKyMjIExvY2FsIFZhcmlhYmxlczoKKyMjIHBlcmwtaW5kZW50LWxldmVsOiAyCisjIyBwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLWltYWdpbmFyeS1vZmZzZXQ6IDAKKyMjIHBlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtaW5kZW50LWxldmVsOiAyCisjIyBjcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWV4dHJhLW5ld2xpbmUtYmVmb3JlLWJyYWNlOiB0CisjIyBjcGVybC1tZXJnZS10cmFpbGluZy1lbHNlOiBuaWwKKyMjIGNwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBFbmQ6CmRpZmYgLS1naXQgYS9leGFtcGxlcy9NYWtlZmlsZSBiL2V4YW1wbGVzL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDUwYTgzLi4wMDAwMDAwCi0tLSBhL2V4YW1wbGVzL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNTE0ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuOS42IGZyb20gTWFrZWZpbGUuYW0uCi0jIGV4YW1wbGVzL01ha2VmaWxlLiAgR2VuZXJhdGVkIGZyb20gTWFrZWZpbGUuaW4gYnkgY29uZmlndXJlLgotCi0jIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKLSMgMjAwMywgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi0KLQotc3JjZGlyID0gLgotdG9wX3NyY2RpciA9IC4uCi0KLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL2Jpc29uCi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvYmlzb24KLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL2Jpc29uCi10b3BfYnVpbGRkaXIgPSAuLgotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotSU5TVEFMTCA9IC91c3IvYmluL2luc3RhbGwgLWMKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSB4ODZfNjQtdW5rbm93bi1saW51eC1nbnUKLWhvc3RfdHJpcGxldCA9IHg4Nl82NC11bmtub3duLWxpbnV4LWdudQotc3ViZGlyID0gZXhhbXBsZXMKLURJU1RfQ09NTU9OID0gJChkaXN0X25vaW5zdF9TQ1JJUFRTKSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAotCSQoc3JjZGlyKS9NYWtlZmlsZS5pbgotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYmlzb24taTE4bi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jLXdvcmtpbmcubTQgJCh0b3Bfc3JjZGlyKS9tNC9jeHgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZGlybmFtZS5tNCAkKHRvcF9zcmNkaXIpL200L2RtYWxsb2MubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZG9zLm00ICQodG9wX3NyY2RpcikvbTQvZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZXhpdGZhaWwubTQgJCh0b3Bfc3JjZGlyKS9tNC9leHRlbnNpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dldG9wdC5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHRfZ2wubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ251bGliLm00ICQodG9wX3NyY2RpcikvbTQvaGFyZC1sb2NhbGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaGFzaC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzX2hfZ2wubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxkX2dsLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeF9nbC5tNCAkKHRvcF9zcmNkaXIpL200L200Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L21icnRvd2MubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYnN0YXRlX3QubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbWJzd2lkdGgubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvb2JzdGFjay5tNCAkKHRvcF9zcmNkaXIpL200L29uY2Vvbmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvX2dsLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcXVvdGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9xdW90ZWFyZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdGRib29sLm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50X2hfZ2wubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RkaW8tc2FmZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHBjcHkubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RyZHVwLm00ICQodG9wX3NyY2RpcikvbTQvc3RyZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RybmR1cC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cm5sZW4ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RydG9sLm00ICQodG9wX3NyY2RpcikvbTQvc3RydG91bC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdHJ2ZXJzY21wLm00ICQodG9wX3NyY2RpcikvbTQvc3VicGlwZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC90aW1ldmFyLm00ICQodG9wX3NyY2RpcikvbTQvdWludG1heF90X2dsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Vsb25nbG9uZ19nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGQtc2FmZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC91bmxvY2tlZC1pby5tNCAkKHRvcF9zcmNkaXIpL200L3dhcm5pbmcubTQgXAotCSQodG9wX3NyY2RpcikvbTQveGFsbG9jLm00ICQodG9wX3NyY2RpcikvbTQveHN0cm5kdXAubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLW1raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9ta2luc3RhbGxkaXJzCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotU0NSSVBUUyA9ICQoZGlzdF9ub2luc3RfU0NSSVBUUykKLVNPVVJDRVMgPQotRElTVF9TT1VSQ0VTID0KLVJFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBcCi0JaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBpbnN0YWxsLWluZm8tcmVjdXJzaXZlIFwKLQlpbnN0YWxsLXJlY3Vyc2l2ZSBpbnN0YWxsY2hlY2stcmVjdXJzaXZlIGluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBcCi0JcGRmLXJlY3Vyc2l2ZSBwcy1yZWN1cnNpdmUgdW5pbnN0YWxsLWluZm8tcmVjdXJzaXZlIFwKLQl1bmluc3RhbGwtcmVjdXJzaXZlCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1ESVNUX1NVQkRJUlMgPSBjYWxjKysKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQ0xPQ0FMID0gJHtTSEVMTH0gL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC90b29scy9iaXNvbi0yLjMvYnVpbGQtYXV4L21pc3NpbmcgLS1ydW4gYWNsb2NhbC0xLjkKLUFNREVQX0ZBTFNFID0gIwotQU1ERVBfVFJVRSA9IAotQU1UQVIgPSAke1NIRUxMfSAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL2Jpc29uLTIuMy9idWlsZC1hdXgvbWlzc2luZyAtLXJ1biB0YXIKLUFVVE9DT05GID0gJHtTSEVMTH0gL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC90b29scy9iaXNvbi0yLjMvYnVpbGQtYXV4L21pc3NpbmcgLS1ydW4gYXV0b2NvbmYKLUFVVE9IRUFERVIgPSAke1NIRUxMfSAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL2Jpc29uLTIuMy9idWlsZC1hdXgvbWlzc2luZyAtLXJ1biBhdXRvaGVhZGVyCi1BVVRPTTRURSA9ICR7U0hFTEx9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9taXNzaW5nIC0tcnVuIGF1dG9tNHRlCi1BVVRPTUFLRSA9ICR7U0hFTEx9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9taXNzaW5nIC0tcnVuIGF1dG9tYWtlLTEuOQotQVdLID0gZ2F3awotQklTT05fQ1hYX1dPUktTID0gOgotQklTT05fQ1hYX1dPUktTX0ZBTFNFID0gIwotQklTT05fQ1hYX1dPUktTX1RSVUUgPSAKLUJJU09OX0xPQ0FMRURJUiA9IC91c3Ivc2hhcmUvbG9jYWxlCi1DQyA9IGdjYwotQ0NERVBNT0RFID0gZGVwbW9kZT1nY2MzCi1DRkxBR1MgPSAtZyAtTzIKLUNQUCA9IGdjYyAtRQotQ1BQRkxBR1MgPSAKLUNYWCA9IGcrKwotQ1hYREVQTU9ERSA9IGRlcG1vZGU9Z2NjMwotQ1hYRkxBR1MgPSAtZyAtTzIKLUNZR1BBVEhfVyA9IGVjaG8KLURFRlMgPSAtREhBVkVfQ09ORklHX0gKLURFUERJUiA9IC5kZXBzCi1FQ0hPX0MgPSAKLUVDSE9fTiA9IC1uCi1FQ0hPX1QgPSAKLUVHUkVQID0gZ3JlcCAtRQotRVhFRVhUID0gCi1HQ0MgPSB5ZXMKLUdFVE9QVF9IID0gCi1HTVNHRk1UID0gL3Vzci9iaW4vbXNnZm10Ci1IQVZFX19CT09MID0gMQotSU5TVEFMTF9EQVRBID0gJHtJTlNUQUxMfSAtbSA2NDQKLUlOU1RBTExfUFJPR1JBTSA9ICR7SU5TVEFMTH0KLUlOU1RBTExfU0NSSVBUID0gJHtJTlNUQUxMfQotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gJHtTSEVMTH0gJChpbnN0YWxsX3NoKSAtYyAtcwotSU5UTExJQlMgPSAKLUlOVExfTUFDT1NYX0xJQlMgPSAKLUxERkxBR1MgPSAKLUxFWCA9IGZsZXgKLUxFWExJQiA9IC1sZmwKLUxFWF9PVVRQVVRfUk9PVCA9IGxleC55eQotTElCSUNPTlYgPSAtbGljb252Ci1MSUJJTlRMID0gCi1MSUJPQkpTID0gIGRpcm5hbWUkVS5vIGV4aXRmYWlsJFUubyBoYXJkLWxvY2FsZSRVLm8gaGFzaCRVLm8gcXVvdGUkVS5vIHF1b3RlYXJnJFUubyBmb3Blbi1zYWZlciRVLm8gZHVwLXNhZmVyJFUubyBmZC1zYWZlciRVLm8gcGlwZS1zYWZlciRVLm8geG1hbGxvYyRVLm8KLUxJQlMgPSAKLUxUTElCSUNPTlYgPSAtbGljb252Ci1MVExJQklOVEwgPSAKLUxUTElCT0JKUyA9ICBkaXJuYW1lJFUubG8gZXhpdGZhaWwkVS5sbyBoYXJkLWxvY2FsZSRVLmxvIGhhc2gkVS5sbyBxdW90ZSRVLmxvIHF1b3RlYXJnJFUubG8gZm9wZW4tc2FmZXIkVS5sbyBkdXAtc2FmZXIkVS5sbyBmZC1zYWZlciRVLmxvIHBpcGUtc2FmZXIkVS5sbyB4bWFsbG9jJFUubG8KLU00ID0gL3Vzci9iaW4vbTQKLU1BS0VJTkZPID0gJHtTSEVMTH0gL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC90b29scy9iaXNvbi0yLjMvYnVpbGQtYXV4L21pc3NpbmcgLS1ydW4gbWFrZWluZm8KLU1LSU5TVEFMTERJUlMgPSAkKHRvcF9idWlsZGRpcikvYnVpbGQtYXV4L21raW5zdGFsbGRpcnMKLU1TR0ZNVCA9IC91c3IvYmluL21zZ2ZtdAotTVNHTUVSR0UgPSAvdXNyL2Jpbi9tc2dtZXJnZQotTzBDRkxBR1MgPSAtZyAKLU8wQ1hYRkxBR1MgPSAtZyAKLU9CSkVYVCA9IG8KLVBBQ0tBR0UgPSBiaXNvbgotUEFDS0FHRV9CVUdSRVBPUlQgPSBidWctYmlzb25AZ251Lm9yZwotUEFDS0FHRV9OQU1FID0gR05VIEJpc29uCi1QQUNLQUdFX1NUUklORyA9IEdOVSBCaXNvbiAyLjMKLVBBQ0tBR0VfVEFSTkFNRSA9IGJpc29uCi1QQUNLQUdFX1ZFUlNJT04gPSAyLjMKLVBBVEhfU0VQQVJBVE9SID0gOgotUE9TVUIgPSBwbwotUkFOTElCID0gcmFubGliCi1TRVRfTUFLRSA9IAotU0hFTEwgPSAvYmluL3NoCi1TVERCT09MX0ggPSAKLVNUUklQID0gCi1VTklTVERfSCA9IAotVVNFX05MUyA9IHllcwotVkFMR1JJTkQgPSAKLVZFUlNJT04gPSAyLjMKLVdBUk5JTkdfQ0ZMQUdTID0gCi1XQVJOSU5HX0NYWEZMQUdTID0gCi1XRVJST1JfQ0ZMQUdTID0gCi1YR0VUVEVYVCA9IC91c3IvYmluL3hnZXR0ZXh0Ci1ZQUNDID0gYmlzb24gLXkKLVlBQ0NfTElCUkFSWSA9IGxpYnkuYQotWUFDQ19TQ1JJUFQgPSB5YWNjCi1hY19jdF9DQyA9IGdjYwotYWNfY3RfQ1hYID0gZysrCi1hY19jdF9SQU5MSUIgPSByYW5saWIKLWFjX2N0X1NUUklQID0gCi1hY2xvY2FsZGlyID0gJHtkYXRhZGlyfS9hY2xvY2FsCi1hbV9fZmFzdGRlcENDX0ZBTFNFID0gIwotYW1fX2Zhc3RkZXBDQ19UUlVFID0gCi1hbV9fZmFzdGRlcENYWF9GQUxTRSA9ICMKLWFtX19mYXN0ZGVwQ1hYX1RSVUUgPSAKLWFtX19pbmNsdWRlID0gaW5jbHVkZQotYW1fX2xlYWRpbmdfZG90ID0gLgotYW1fX3F1b3RlID0gCi1hbV9fdGFyID0gJHtBTVRBUn0gY2hvZiAtICIkJHRhcmRpciIKLWFtX191bnRhciA9ICR7QU1UQVJ9IHhmIC0KLWJpbmRpciA9ICR7ZXhlY19wcmVmaXh9L2JpbgotYnVpbGQgPSB4ODZfNjQtdW5rbm93bi1saW51eC1nbnUKLWJ1aWxkX2FsaWFzID0gCi1idWlsZF9jcHUgPSB4ODZfNjQKLWJ1aWxkX29zID0gbGludXgtZ251Ci1idWlsZF92ZW5kb3IgPSB1bmtub3duCi1kYXRhZGlyID0gJHtwcmVmaXh9L3NoYXJlCi1leGVjX3ByZWZpeCA9ICR7cHJlZml4fQotaG9zdCA9IHg4Nl82NC11bmtub3duLWxpbnV4LWdudQotaG9zdF9hbGlhcyA9IAotaG9zdF9jcHUgPSB4ODZfNjQKLWhvc3Rfb3MgPSBsaW51eC1nbnUKLWhvc3RfdmVuZG9yID0gdW5rbm93bgotaW5jbHVkZWRpciA9ICR7cHJlZml4fS9pbmNsdWRlCi1pbmZvZGlyID0gJHtwcmVmaXh9L2luZm8KLWluc3RhbGxfc2ggPSAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL2Jpc29uLTIuMy9idWlsZC1hdXgvaW5zdGFsbC1zaAotbGliZGlyID0gJHtleGVjX3ByZWZpeH0vbGliCi1saWJleGVjZGlyID0gJHtleGVjX3ByZWZpeH0vbGliZXhlYwotbG9jYWxzdGF0ZWRpciA9ICR7cHJlZml4fS92YXIKLW1hbmRpciA9ICR7cHJlZml4fS9tYW4KLW1rZGlyX3AgPSBta2RpciAtcCAtLQotb2xkaW5jbHVkZWRpciA9IC91c3IvaW5jbHVkZQotcHJlZml4ID0gL2hvbWUvcGhhbm5hL3NyYy9iaXNvbgotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IHMseCx4LAotc2JpbmRpciA9ICR7ZXhlY19wcmVmaXh9L3NiaW4KLXNoYXJlZHN0YXRlZGlyID0gJHtwcmVmaXh9L2NvbQotc3lzY29uZmRpciA9ICR7cHJlZml4fS9ldGMKLXRhcmdldF9hbGlhcyA9IAotU1VCRElSUyA9IGNhbGMrKwotZGlzdF9ub2luc3RfU0NSSVBUUyA9IGV4dGV4aQotYWxsOiBhbGwtcmVjdXJzaXZlCi0KLS5TVUZGSVhFUzoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKLQkJJiYgZXhpdCAwOyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSAgZXhhbXBsZXMvTWFrZWZpbGUnOyBcCi0JY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSAgZXhhbXBsZXMvTWFrZWZpbGUKLS5QUkVDSU9VUzogTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi11bmluc3RhbGwtaW5mby1hbToKLQotIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKLSMgaW50byB0aGVtIGFuZCBydW4gYG1ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgotIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiBgbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAotIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiBgY29uZmlnLnN0YXR1cycsIGVkaXQgYGNvbmZpZy5zdGF0dXMnCi0jICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biBgbWFrZScpOwotIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgYG1ha2UnIGNvbW1hbmQgbGluZS4KLSQoUkVDVVJTSVZFX1RBUkdFVFMpOgotCUBmYWlsY29tPSdleGl0IDEnOyBcCi0JZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAotCSAgY2FzZSAkJGYgaW4gXAotCSAgICAqPSogfCAtLVsha10qKTs7IFwKLQkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWRvdF9zZWVuPW5vOyBcCi0JdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAotCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKLQkgICAgZG90X3NlZW49eWVzOyBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCi0JICBlbHNlIFwKLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKLQkgIGZpOyBcCi0JICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKLQkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCi0JZG9uZTsgXAotCWlmIHRlc3QgIiQkZG90X3NlZW4iID0gIm5vIjsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAiJCR0YXJnZXQtYW0iIHx8IGV4aXQgMTsgXAotCWZpOyB0ZXN0IC16ICIkJGZhaWwiCi0KLW1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBjbGVhbi1yZWN1cnNpdmUgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBcCi1tYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZToKLQlAZmFpbGNvbT0nZXhpdCAxJzsgXAotCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKLQkgIGNhc2UgJCRmIGluIFwKLQkgICAgKj0qIHwgLS1bIWtdKik7OyBcCi0JICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQlkb3Rfc2Vlbj1ubzsgXAotCWNhc2UgIiRAIiBpbiBcCi0JICBkaXN0Y2xlYW4tKiB8IG1haW50YWluZXItY2xlYW4tKikgbGlzdD0nJChESVNUX1NVQkRJUlMpJyA7OyBcCi0JICAqKSBsaXN0PSckKFNVQkRJUlMpJyA7OyBcCi0JZXNhYzsgXAotCXJldj0nJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiA6OyBlbHNlIFwKLQkgICAgcmV2PSIkJHN1YmRpciAkJHJldiI7IFwKLQkgIGZpOyBcCi0JZG9uZTsgXAotCXJldj0iJCRyZXYgLiI7IFwKLQl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCi0JZm9yIHN1YmRpciBpbiAkJHJldjsgZG8gXAotCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKLQkgIGVsc2UgXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAotCSAgZmk7IFwKLQkgIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAotCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKLQlkb25lICYmIHRlc3QgLXogIiQkZmFpbCIKLXRhZ3MtcmVjdXJzaXZlOgotCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdGFncyk7IFwKLQlkb25lCi1jdGFncy1yZWN1cnNpdmU6Ci0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8IChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjdGFncyk7IFwKLQlkb25lCi0KLUlEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQlta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IFRBR1MKLQotVEFHUzogdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCi0JCSQoVEFHU19GSUxFUykgJChMSVNQKQotCXRhZ3M9OyBcCi0JaGVyZT1gcHdkYDsgXAotCWlmICgkKEVUQUdTKSAtLWV0YWdzLWluY2x1ZGUgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAotCSAgaW5jbHVkZV9vcHRpb249LS1ldGFncy1pbmNsdWRlOyBcCi0JICBlbXB0eV9maXg9LjsgXAotCWVsc2UgXAotCSAgaW5jbHVkZV9vcHRpb249LS1pbmNsdWRlOyBcCi0JICBlbXB0eV9maXg9OyBcCi0JZmk7IFwKLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCi0JICAgIHRlc3QgISAtZiAkJHN1YmRpci9UQUdTIHx8IFwKLQkgICAgICB0YWdzPSIkJHRhZ3MgJCRpbmNsdWRlX29wdGlvbj0kJGhlcmUvJCRzdWJkaXIvVEFHUyI7IFwKLQkgIGZpOyBcCi0JZG9uZTsgXAotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICQkdGFncyAkJHVuaXF1ZTsgXAotCWZpCi1jdGFnczogQ1RBR1MKLUNUQUdTOiBjdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCi0JCSQoVEFHU19GSUxFUykgJChMSVNQKQotCXRhZ3M9OyBcCi0JaGVyZT1gcHdkYDsgXAotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR0YWdzICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGNhc2UgJCRmaWxlIGluIFwKLQkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLQkgICAgJCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAotCSAgZXNhYzsgXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAotCSAgICBkaXI9Ii8kJGRpciI7IFwKLQkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAotCSAgZWxzZSBcCi0JICAgIGRpcj0nJzsgXAotCSAgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLQlsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKLQkgICAgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAotCSAgICB8fCAkKG1rZGlyX3ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgICBkaXN0ZGlyPWAkKGFtX19jZCkgJChkaXN0ZGlyKSAmJiBwd2RgOyBcCi0JICAgIHRvcF9kaXN0ZGlyPWAkKGFtX19jZCkgJCh0b3BfZGlzdGRpcikgJiYgcHdkYDsgXAotCSAgICAoY2QgJCRzdWJkaXIgJiYgXAotCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKLQkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJHRvcF9kaXN0ZGlyIiBcCi0JICAgICAgICBkaXN0ZGlyPSIkJGRpc3RkaXIvJCRzdWJkaXIiIFwKLQkgICAgICAgIGRpc3RkaXIpIFwKLQkgICAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLXJlY3Vyc2l2ZQotYWxsLWFtOiBNYWtlZmlsZSAkKFNDUklQVFMpCi1pbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCi1pbnN0YWxsZGlycy1hbToKLWluc3RhbGw6IGluc3RhbGwtcmVjdXJzaXZlCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQotdW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQotaW5zdGFsbC1zdHJpcDoKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKLQkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1yZWN1cnNpdmUKLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLXJlY3Vyc2l2ZQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtcmVjdXJzaXZlCi0KLWluZm86IGluZm8tcmVjdXJzaXZlCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYwotCi1wZGY6IHBkZi1yZWN1cnNpdmUKLQotcGRmLWFtOgotCi1wczogcHMtcmVjdXJzaXZlCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1pbmZvLWFtCi0KLXVuaW5zdGFsbC1pbmZvOiB1bmluc3RhbGwtaW5mby1yZWN1cnNpdmUKLQotLlBIT05ZOiAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIFwKLQljbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLXJlY3Vyc2l2ZSBjdGFncyBjdGFncy1yZWN1cnNpdmUgXAotCWRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tcmVjdXJzaXZlIGRpc3RjbGVhbi10YWdzIFwKLQlkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIFwKLQlpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQlpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCi0JbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIHBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLXJlY3Vyc2l2ZSBcCi0JdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtaW5mby1hbQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9leGFtcGxlcy9NYWtlZmlsZS5hbSBiL2V4YW1wbGVzL01ha2VmaWxlLmFtCmluZGV4IGE1MWJhOTguLjYwYTc5YWQgMTAwNjQ0Ci0tLSBhL2V4YW1wbGVzL01ha2VmaWxlLmFtCisrKyBiL2V4YW1wbGVzL01ha2VmaWxlLmFtCkBAIC0xLDIwICsxLDE4IEBACiAjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4gLSotTWFrZWZpbGUtKi0KLSMjIENvcHlyaWdodCAoQykgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMjIENvcHlyaWdodCAoQykgMjAwNSwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi0jIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0jIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0jIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0jIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSMjIDAyMTEwLTEzMDEgIFVTQQorIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIAogaWYgQklTT05fQ1hYX1dPUktTCiBTVUJESVJTID0gY2FsYysrCmRpZmYgLS1naXQgYS9leGFtcGxlcy9NYWtlZmlsZS5pbiBiL2V4YW1wbGVzL01ha2VmaWxlLmluCmluZGV4IDVkYWE1MWMuLjUwNzA2NzMgMTAwNjQ0Ci0tLSBhL2V4YW1wbGVzL01ha2VmaWxlLmluCisrKyBiL2V4YW1wbGVzL01ha2VmaWxlLmluCkBAIC0xLDggKzEsOCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjYgZnJvbSBNYWtlZmlsZS5hbS4KKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTIuNSBmcm9tIE1ha2VmaWxlLmFtLgogIyBAY29uZmlndXJlX2lucHV0QAogCi0jIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKLSMgMjAwMywgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMTk5NC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCiAjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCkBAIC0xNCwxNSArMTQsNDEgQEAKIAogQFNFVF9NQUtFQAogCi1zcmNkaXIgPSBAc3JjZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKwogVlBBVEggPSBAc3JjZGlyQAorYW1fX21ha2VfZHJ5cnVuID0gXAorICB7IFwKKyAgICBhbV9fZHJ5PW5vOyBcCisgICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCisgICAgICAqXFxbXCBcCV0qKSBcCisgICAgICAgIGVjaG8gJ2FtLS1lY2hvOiA7IEBlY2hvICJBTSIgIE9LJyB8ICQoTUFLRSkgLWYgLSAyPi9kZXYvbnVsbCBcCisgICAgICAgICAgfCBncmVwICdeQU0gT0skJCcgPi9kZXYvbnVsbCB8fCBhbV9fZHJ5PXllczs7IFwKKyAgICAgICopIFwKKyAgICAgICAgZm9yIGFtX19mbGcgaW4gJCRNQUtFRkxBR1M7IGRvIFwKKyAgICAgICAgICBjYXNlICQkYW1fX2ZsZyBpbiBcCisgICAgICAgICAgICAqPSp8LS0qKSA7OyBcCisgICAgICAgICAgICAqbiopIGFtX19kcnk9eWVzOyBicmVhazs7IFwKKyAgICAgICAgICBlc2FjOyBcCisgICAgICAgIGRvbmU7OyBcCisgICAgZXNhYzsgXAorICAgIHRlc3QgJCRhbV9fZHJ5ID0geWVzOyBcCisgIH0KIHBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAogcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi10b3BfYnVpbGRkaXIgPSAuLgorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAogYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotSU5TVEFMTCA9IEBJTlNUQUxMQAogaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKIGluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKIGluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwpAQCAtNDAsMTQzICs2NiwxMjYyIEBACiBESVNUX0NPTU1PTiA9ICQoZGlzdF9ub2luc3RfU0NSSVBUUykgJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKIAkkKHNyY2RpcikvTWFrZWZpbGUuaW4KIEFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2Jpc29uLWkxOG4ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYy13b3JraW5nLm00ICQodG9wX3NyY2RpcikvbTQvY3h4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2Rpcm5hbWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9kbWFsbG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2Rvcy5tNCAkKHRvcF9zcmNkaXIpL200L2Vycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2V4aXRmYWlsLm00ICQodG9wX3NyY2RpcikvbTQvZXh0ZW5zaW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nZXRvcHQubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0X2dsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dudWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2hhcmQtbG9jYWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2hhc2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlc19oX2dsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1sZF9nbC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXhfZ2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9tNC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9tYnJ0b3djLm00ICQodG9wX3NyY2RpcikvbTQvbWJzdGF0ZV90Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L21ic3dpZHRoLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L29ic3RhY2subTQgJCh0b3Bfc3JjZGlyKS9tNC9vbmNlb25seS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wb19nbC5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200LzAwZ251bGliLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2FsbG9jYS5tNCAkKHRvcF9zcmNkaXIpL200L2FzbS11bmRlcnNjb3JlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Fzc2VydC5tNCAkKHRvcF9zcmNkaXIpL200L2Jpc29uLWkxOG4ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYy13b3JraW5nLm00ICQodG9wX3NyY2RpcikvbTQvY2FsbG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Nsb3NlLXN0cmVhbS5tNCAkKHRvcF9zcmNkaXIpL200L2Nsb3NlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Nsb3Nlb3V0Lm00ICQodG9wX3NyY2RpcikvbTQvY29kZXNldC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb25maWctaC5tNCAkKHRvcF9zcmNkaXIpL200L2NvbmZpZ21ha2UubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3h4Lm00ICQodG9wX3NyY2RpcikvbTQvZGlybmFtZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9kbWFsbG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2RvdWJsZS1zbGFzaC1yb290Lm00ICQodG9wX3NyY2RpcikvbTQvZHVwMi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9lbnZpcm9uLm00ICQodG9wX3NyY2RpcikvbTQvZXJybm9faC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9lcnJvci5tNCAkKHRvcF9zcmNkaXIpL200L2V4cG9uZW50ZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHBvbmVudGYubTQgJCh0b3Bfc3JjZGlyKS9tNC9leHBvbmVudGwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXh0ZW5zaW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHRlcm4taW5saW5lLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZhdGFsLXNpZ25hbC5tNCAkKHRvcF9zcmNkaXIpL200L2ZjbnRsLW8ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZmNudGwubTQgJCh0b3Bfc3JjZGlyKS9tNC9mY250bF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZsZXgubTQgJCh0b3Bfc3JjZGlyKS9tNC9mbG9hdF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZvcGVuLm00ICQodG9wX3NyY2RpcikvbTQvZnBlbmRpbmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZnBpZWVlLm00ICQodG9wX3NyY2RpcikvbTQvZnByaW50Zi1wb3NpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mcmV4cC5tNCAkKHRvcF9zcmNkaXIpL200L2ZyZXhwbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mc2V0ZXJyLm00ICQodG9wX3NyY2RpcikvbTQvZnN0YXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ2V0ZGVsaW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXRkdGFibGVzaXplLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dldGxpbmUubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXRvcHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCAkKHRvcF9zcmNkaXIpL200L2dsaWJjMjEubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ251bGliLWNvbW1vbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWItY29tcC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2luY2x1ZGVfbmV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvaW50bWF4X3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMtcHJpLm00ICQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2lzbmFuLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2lzbmFuZC5tNCAkKHRvcF9zcmNkaXIpL200L2lzbmFuZi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pc25hbmwubTQgJCh0b3Bfc3JjZGlyKS9tNC9pc3dibGFuay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9qYXZhY29tcC5tNCAkKHRvcF9zcmNkaXIpL200L2phdmFleGVjLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xhcmdlZmlsZS5tNCAkKHRvcF9zcmNkaXIpL200L2xkZXhwLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xkZXhwbC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGlidW5pc3RyaW5nLWJhc2UubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9jYWxjaGFyc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvbG9jYWxlLWZyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvY2FsZS1qYS5tNCAkKHRvcF9zcmNkaXIpL200L2xvY2FsZS16aC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sb2NrLm00ICQodG9wX3NyY2RpcikvbTQvbG9uZ2xvbmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbTQubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYWxsb2MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWF0aF9oLm00ICQodG9wX3NyY2RpcikvbTQvbWJjaGFyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21iaXRlci5tNCAkKHRvcF9zcmNkaXIpL200L21icnRvd2MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWJzaW5pdC5tNCAkKHRvcF9zcmNkaXIpL200L21ic3RhdGVfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYnN3aWR0aC5tNCAkKHRvcF9zcmNkaXIpL200L21lbWNoci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tbWFwLWFub24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9tb2RlX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbXN2Yy1pbnZhbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tc3ZjLW5vdGhyb3cubTQgJCh0b3Bfc3JjZGlyKS9tNC9tdWx0aWFyY2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvbm9jcmFzaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9vYnN0YWNrLXByaW50Zi5tNCAkKHRvcF9zcmNkaXIpL200L29mZl90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L29wZW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wYXRobWF4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BlcnJvci5tNCAkKHRvcF9zcmNkaXIpL200L3BpcGUyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcG9zaXhfc3Bhd24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJpbnRmLWZyZXhwLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ByaW50Zi1mcmV4cGwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJpbnRmLXBvc2l4LXJwbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcmludGYubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCiAJJCh0b3Bfc3JjZGlyKS9tNC9xdW90ZS5tNCAkKHRvcF9zcmNkaXIpL200L3F1b3RlYXJnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3N0ZGJvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaF9nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdGRpby1zYWZlci5tNCAkKHRvcF9zcmNkaXIpL200L3N0cGNweS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9yYWlzZS5tNCAkKHRvcF9zcmNkaXIpL200L3Jhd21lbWNoci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9yZWFsbG9jLm00ICQodG9wX3NyY2RpcikvbTQvc2NoZWRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zZXRlbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9zaWdfYXRvbWljX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc2lnYWN0aW9uLm00ICQodG9wX3NyY2RpcikvbTQvc2lnbmFsX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc2lnbmFsYmxvY2tpbmcubTQgJCh0b3Bfc3JjZGlyKS9tNC9zaWduYml0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NpemVfbWF4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NucHJpbnRmLXBvc2l4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NucHJpbnRmLm00ICQodG9wX3NyY2RpcikvbTQvc3Bhd24tcGlwZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zcGF3bl9oLm00ICQodG9wX3NyY2RpcikvbTQvc3ByaW50Zi1wb3NpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zc2l6ZV90Lm00ICQodG9wX3NyY2RpcikvbTQvc3RhdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRib29sLm00ICQodG9wX3NyY2RpcikvbTQvc3RkZGVmX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RkaW50Lm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50X2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RkaW9faC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGxpYl9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cGNweS5tNCAkKHRvcF9zcmNkaXIpL200L3N0cmNocm51bC5tNCBcCiAJJCh0b3Bfc3JjZGlyKS9tNC9zdHJkdXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJlcnJvci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJlcnJvcl9yLm00ICQodG9wX3NyY2RpcikvbTQvc3RyaW5nX2gubTQgXAogCSQodG9wX3NyY2RpcikvbTQvc3RybmR1cC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cm5sZW4ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RydG9sLm00ICQodG9wX3NyY2RpcikvbTQvc3RydG91bC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdHJ2ZXJzY21wLm00ICQodG9wX3NyY2RpcikvbTQvc3VicGlwZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC90aW1ldmFyLm00ICQodG9wX3NyY2RpcikvbTQvdWludG1heF90X2dsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Vsb25nbG9uZ19nbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b3VsLm00ICQodG9wX3NyY2RpcikvbTQvc3RydmVyc2NtcC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zeXNfc29ja2V0X2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3lzX3N0YXRfaC5tNCAkKHRvcF9zcmNkaXIpL200L3N5c190eXBlc19oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N5c193YWl0X2gubTQgJCh0b3Bfc3JjZGlyKS9tNC90aHJlYWRsaWIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdGltZV9oLm00ICQodG9wX3NyY2RpcikvbTQvdGltZXZhci5tNCBcCiAJJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGQtc2FmZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC91bmxvY2tlZC1pby5tNCAkKHRvcF9zcmNkaXIpL200L3dhcm5pbmcubTQgXAotCSQodG9wX3NyY2RpcikvbTQveGFsbG9jLm00ICQodG9wX3NyY2RpcikvbTQveHN0cm5kdXAubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdW5sb2NrZWQtaW8ubTQgJCh0b3Bfc3JjZGlyKS9tNC92YXNucHJpbnRmLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ZmcHJpbnRmLXBvc2l4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ZzbnByaW50Zi1wb3NpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC92c25wcmludGYubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdnNwcmludGYtcG9zaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2FpdC1wcm9jZXNzLm00ICQodG9wX3NyY2RpcikvbTQvd2FpdHBpZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93YXJuLW9uLXVzZS5tNCAkKHRvcF9zcmNkaXIpL200L3dhcm5pbmdzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3djaGFyX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC93Y2hhcl90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3djdHlwZV9oLm00ICQodG9wX3NyY2RpcikvbTQvd2N3aWR0aC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93aW50X3QubTQgJCh0b3Bfc3JjZGlyKS9tNC94YWxsb2MubTQgXAorCSQodG9wX3NyY2RpcikvbTQveHNpemUubTQgJCh0b3Bfc3JjZGlyKS9tNC94c3RybmR1cC5tNCBcCiAJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKIGFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCiAJJChBQ0xPQ0FMX000KQotbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L21raW5zdGFsbGRpcnMKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaAogQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CiBTQ1JJUFRTID0gJChkaXN0X25vaW5zdF9TQ1JJUFRTKQorQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKK2FtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfUF8wID0gZmFsc2UKK2FtX192X1BfMSA9IDoKK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7CithbV9fdl9HRU5fMSA9IAorQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2F0XzAgPSBACithbV9fdl9hdF8xID0gCiBTT1VSQ0VTID0KIERJU1RfU09VUkNFUyA9CiBSRUNVUlNJVkVfVEFSR0VUUyA9IGFsbC1yZWN1cnNpdmUgY2hlY2stcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgXAogCWh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIGluc3RhbGwtZGF0YS1yZWN1cnNpdmUgXAotCWluc3RhbGwtZXhlYy1yZWN1cnNpdmUgaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1yZWN1cnNpdmUgaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBpbnN0YWxsZGlycy1yZWN1cnNpdmUgXAotCXBkZi1yZWN1cnNpdmUgcHMtcmVjdXJzaXZlIHVuaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCi0JdW5pbnN0YWxsLXJlY3Vyc2l2ZQorCWluc3RhbGwtZHZpLXJlY3Vyc2l2ZSBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWh0bWwtcmVjdXJzaXZlIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAorCWluc3RhbGwtcGRmLXJlY3Vyc2l2ZSBpbnN0YWxsLXBzLXJlY3Vyc2l2ZSBpbnN0YWxsLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBpbnN0YWxsZGlycy1yZWN1cnNpdmUgcGRmLXJlY3Vyc2l2ZSBcCisJcHMtcmVjdXJzaXZlIHVuaW5zdGFsbC1yZWN1cnNpdmUKK2FtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAorICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKKyAgICBufG5vfE5PKSBmYWxzZTs7IFwKKyAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAorICBlc2FjCitSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyA9IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBjbGVhbi1yZWN1cnNpdmUJXAorICBkaXN0Y2xlYW4tcmVjdXJzaXZlIG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCitBTV9SRUNVUlNJVkVfVEFSR0VUUyA9ICQoUkVDVVJTSVZFX1RBUkdFVFM6LXJlY3Vyc2l2ZT0pIFwKKwkkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTOi1yZWN1cnNpdmU9KSB0YWdzIFRBR1MgY3RhZ3MgQ1RBR1MgXAorCWRpc3RkaXIKIEVUQUdTID0gZXRhZ3MKIENUQUdTID0gY3RhZ3MKIERJU1RfU1VCRElSUyA9IGNhbGMrKwogRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK2FtX19yZWxhdGl2aXplID0gXAorICBkaXIwPWBwd2RgOyBcCisgIHNlZF9maXJzdD0ncyxeXChbXi9dKlwpLy4qJCQsXDEsJzsgXAorICBzZWRfcmVzdD0ncyxeW14vXSovKiwsJzsgXAorICBzZWRfbGFzdD0ncyxeLiovXChbXi9dKlwpJCQsXDEsJzsgXAorICBzZWRfYnV0bGFzdD0ncywvKlteL10qJCQsLCc7IFwKKyAgd2hpbGUgdGVzdCAtbiAiJCRkaXIxIjsgZG8gXAorICAgIGZpcnN0PWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCisgICAgaWYgdGVzdCAiJCRmaXJzdCIgIT0gIi4iOyB0aGVuIFwKKyAgICAgIGlmIHRlc3QgIiQkZmlyc3QiID0gIi4uIjsgdGhlbiBcCisgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2xhc3QiYC8iJCRkaXIyIjsgXAorICAgICAgICBkaXIwPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9idXRsYXN0ImA7IFwKKyAgICAgIGVsc2UgXAorICAgICAgICBmaXJzdDI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKKyAgICAgICAgaWYgdGVzdCAiJCRmaXJzdDIiID0gIiQkZmlyc3QiOyB0aGVuIFwKKyAgICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKKyAgICAgICAgZWxzZSBcCisgICAgICAgICAgZGlyMj0iLi4vJCRkaXIyIjsgXAorICAgICAgICBmaTsgXAorICAgICAgICBkaXIwPSIkJGRpcjAiLyIkJGZpcnN0IjsgXAorICAgICAgZmk7IFwKKyAgICBmaTsgXAorICAgIGRpcjE9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAorICBkb25lOyBcCisgIHJlbGRpcj0iJCRkaXIyIgorcGtnbGliZXhlY2RpciA9IEBwa2dsaWJleGVjZGlyQAogQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQU1ERVBfRkFMU0UgPSBAQU1ERVBfRkFMU0VACi1BTURFUF9UUlVFID0gQEFNREVQX1RSVUVACitBTExPQ0EgPSBAQUxMT0NBQAorQUxMT0NBX0ggPSBAQUxMT0NBX0hACiBBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVBQTEVfVU5JVkVSU0FMX0JVSUxEID0gQEFQUExFX1VOSVZFUlNBTF9CVUlMREAKK0FSID0gQEFSQAorQVJGTEFHUyA9IEBBUkZMQUdTQAorQVNNX1NZTUJPTF9QUkVGSVggPSBAQVNNX1NZTUJPTF9QUkVGSVhACiBBVVRPQ09ORiA9IEBBVVRPQ09ORkAKIEFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKIEFVVE9NNFRFID0gQEFVVE9NNFRFQAogQVVUT01BS0UgPSBAQVVUT01BS0VACiBBV0sgPSBAQVdLQAogQklTT05fQ1hYX1dPUktTID0gQEJJU09OX0NYWF9XT1JLU0AKLUJJU09OX0NYWF9XT1JLU19GQUxTRSA9IEBCSVNPTl9DWFhfV09SS1NfRkFMU0VACi1CSVNPTl9DWFhfV09SS1NfVFJVRSA9IEBCSVNPTl9DWFhfV09SS1NfVFJVRUAKK0JJU09OX0NfV09SS1MgPSBAQklTT05fQ19XT1JLU0AKIEJJU09OX0xPQ0FMRURJUiA9IEBCSVNPTl9MT0NBTEVESVJACitCSVRTSVpFT0ZfUFRSRElGRl9UID0gQEJJVFNJWkVPRl9QVFJESUZGX1RACitCSVRTSVpFT0ZfU0lHX0FUT01JQ19UID0gQEJJVFNJWkVPRl9TSUdfQVRPTUlDX1RACitCSVRTSVpFT0ZfU0laRV9UID0gQEJJVFNJWkVPRl9TSVpFX1RACitCSVRTSVpFT0ZfV0NIQVJfVCA9IEBCSVRTSVpFT0ZfV0NIQVJfVEAKK0JJVFNJWkVPRl9XSU5UX1QgPSBAQklUU0laRU9GX1dJTlRfVEAKIENDID0gQENDQAogQ0NERVBNT0RFID0gQENDREVQTU9ERUAKIENGTEFHUyA9IEBDRkxBR1NACitDTEFTU1BBVEggPSBAQ0xBU1NQQVRIQAorQ0xBU1NQQVRIX1NFUEFSQVRPUiA9IEBDTEFTU1BBVEhfU0VQQVJBVE9SQAorQ09ORklHX0lOQ0xVREUgPSBAQ09ORklHX0lOQ0xVREVACitDT05GX0pBVkEgPSBAQ09ORl9KQVZBQAorQ09ORl9KQVZBQyA9IEBDT05GX0pBVkFDQAogQ1BQID0gQENQUEAKIENQUEZMQUdTID0gQENQUEZMQUdTQAogQ1hYID0gQENYWEAKIENYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKIENYWEZMQUdTID0gQENYWEZMQUdTQAorQ1hYX0NPTVBJTEVSX1BPU0lYTFlfQ09SUkVDVCA9IEBDWFhfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUQAogQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0NfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUID0gQENfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUQAogREVGUyA9IEBERUZTQAogREVQRElSID0gQERFUERJUkAKK0RPVCA9IEBET1RACiBFQ0hPX0MgPSBARUNIT19DQAogRUNIT19OID0gQEVDSE9fTkAKIEVDSE9fVCA9IEBFQ0hPX1RACiBFR1JFUCA9IEBFR1JFUEAKK0VNVUxUSUhPUF9ISURERU4gPSBARU1VTFRJSE9QX0hJRERFTkAKK0VNVUxUSUhPUF9WQUxVRSA9IEBFTVVMVElIT1BfVkFMVUVACitFTk9MSU5LX0hJRERFTiA9IEBFTk9MSU5LX0hJRERFTkAKK0VOT0xJTktfVkFMVUUgPSBARU5PTElOS19WQUxVRUAKK0VPVkVSRkxPV19ISURERU4gPSBARU9WRVJGTE9XX0hJRERFTkAKK0VPVkVSRkxPV19WQUxVRSA9IEBFT1ZFUkZMT1dfVkFMVUVACitFUlJOT19IID0gQEVSUk5PX0hACiBFWEVFWFQgPSBARVhFRVhUQAorRkxPQVRfSCA9IEBGTE9BVF9IQAogR0NDID0gQEdDQ0AKIEdFVE9QVF9IID0gQEdFVE9QVF9IQAorR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKK0dMSUJDMjEgPSBAR0xJQkMyMUAKIEdNU0dGTVQgPSBAR01TR0ZNVEAKK0dNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAorR05VTElCX0FDT1NGID0gQEdOVUxJQl9BQ09TRkAKK0dOVUxJQl9BQ09TTCA9IEBHTlVMSUJfQUNPU0xACitHTlVMSUJfQVNJTkYgPSBAR05VTElCX0FTSU5GQAorR05VTElCX0FTSU5MID0gQEdOVUxJQl9BU0lOTEAKK0dOVUxJQl9BVEFOMkYgPSBAR05VTElCX0FUQU4yRkAKK0dOVUxJQl9BVEFORiA9IEBHTlVMSUJfQVRBTkZACitHTlVMSUJfQVRBTkwgPSBAR05VTElCX0FUQU5MQAorR05VTElCX0FUT0xMID0gQEdOVUxJQl9BVE9MTEAKK0dOVUxJQl9CVE9XQyA9IEBHTlVMSUJfQlRPV0NACitHTlVMSUJfQ0FMTE9DX1BPU0lYID0gQEdOVUxJQl9DQUxMT0NfUE9TSVhACitHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRSA9IEBHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRUAKK0dOVUxJQl9DQlJUID0gQEdOVUxJQl9DQlJUQAorR05VTElCX0NCUlRGID0gQEdOVUxJQl9DQlJURkAKK0dOVUxJQl9DQlJUTCA9IEBHTlVMSUJfQ0JSVExACitHTlVMSUJfQ0VJTCA9IEBHTlVMSUJfQ0VJTEAKK0dOVUxJQl9DRUlMRiA9IEBHTlVMSUJfQ0VJTEZACitHTlVMSUJfQ0VJTEwgPSBAR05VTElCX0NFSUxMQAorR05VTElCX0NIRElSID0gQEdOVUxJQl9DSERJUkAKK0dOVUxJQl9DSE9XTiA9IEBHTlVMSUJfQ0hPV05ACitHTlVMSUJfQ0xPU0UgPSBAR05VTElCX0NMT1NFQAorR05VTElCX0NPUFlTSUdOID0gQEdOVUxJQl9DT1BZU0lHTkAKK0dOVUxJQl9DT1BZU0lHTkYgPSBAR05VTElCX0NPUFlTSUdORkAKK0dOVUxJQl9DT1BZU0lHTkwgPSBAR05VTElCX0NPUFlTSUdOTEAKK0dOVUxJQl9DT1NGID0gQEdOVUxJQl9DT1NGQAorR05VTElCX0NPU0hGID0gQEdOVUxJQl9DT1NIRkAKK0dOVUxJQl9DT1NMID0gQEdOVUxJQl9DT1NMQAorR05VTElCX0RQUklOVEYgPSBAR05VTElCX0RQUklOVEZACitHTlVMSUJfRFVQID0gQEdOVUxJQl9EVVBACitHTlVMSUJfRFVQMiA9IEBHTlVMSUJfRFVQMkAKK0dOVUxJQl9EVVAzID0gQEdOVUxJQl9EVVAzQAorR05VTElCX0VOVklST04gPSBAR05VTElCX0VOVklST05ACitHTlVMSUJfRVVJREFDQ0VTUyA9IEBHTlVMSUJfRVVJREFDQ0VTU0AKK0dOVUxJQl9FWFAyID0gQEdOVUxJQl9FWFAyQAorR05VTElCX0VYUDJGID0gQEdOVUxJQl9FWFAyRkAKK0dOVUxJQl9FWFAyTCA9IEBHTlVMSUJfRVhQMkxACitHTlVMSUJfRVhQRiA9IEBHTlVMSUJfRVhQRkAKK0dOVUxJQl9FWFBMID0gQEdOVUxJQl9FWFBMQAorR05VTElCX0VYUE0xID0gQEdOVUxJQl9FWFBNMUAKK0dOVUxJQl9FWFBNMUYgPSBAR05VTElCX0VYUE0xRkAKK0dOVUxJQl9FWFBNMUwgPSBAR05VTElCX0VYUE0xTEAKK0dOVUxJQl9GQUJTRiA9IEBHTlVMSUJfRkFCU0ZACitHTlVMSUJfRkFCU0wgPSBAR05VTElCX0ZBQlNMQAorR05VTElCX0ZBQ0NFU1NBVCA9IEBHTlVMSUJfRkFDQ0VTU0FUQAorR05VTElCX0ZDSERJUiA9IEBHTlVMSUJfRkNIRElSQAorR05VTElCX0ZDSE1PREFUID0gQEdOVUxJQl9GQ0hNT0RBVEAKK0dOVUxJQl9GQ0hPV05BVCA9IEBHTlVMSUJfRkNIT1dOQVRACitHTlVMSUJfRkNMT1NFID0gQEdOVUxJQl9GQ0xPU0VACitHTlVMSUJfRkNOVEwgPSBAR05VTElCX0ZDTlRMQAorR05VTElCX0ZEQVRBU1lOQyA9IEBHTlVMSUJfRkRBVEFTWU5DQAorR05VTElCX0ZET1BFTiA9IEBHTlVMSUJfRkRPUEVOQAorR05VTElCX0ZGTFVTSCA9IEBHTlVMSUJfRkZMVVNIQAorR05VTElCX0ZGU0wgPSBAR05VTElCX0ZGU0xACitHTlVMSUJfRkZTTEwgPSBAR05VTElCX0ZGU0xMQAorR05VTElCX0ZHRVRDID0gQEdOVUxJQl9GR0VUQ0AKK0dOVUxJQl9GR0VUUyA9IEBHTlVMSUJfRkdFVFNACitHTlVMSUJfRkxPT1IgPSBAR05VTElCX0ZMT09SQAorR05VTElCX0ZMT09SRiA9IEBHTlVMSUJfRkxPT1JGQAorR05VTElCX0ZMT09STCA9IEBHTlVMSUJfRkxPT1JMQAorR05VTElCX0ZNQSA9IEBHTlVMSUJfRk1BQAorR05VTElCX0ZNQUYgPSBAR05VTElCX0ZNQUZACitHTlVMSUJfRk1BTCA9IEBHTlVMSUJfRk1BTEAKK0dOVUxJQl9GTU9EID0gQEdOVUxJQl9GTU9EQAorR05VTElCX0ZNT0RGID0gQEdOVUxJQl9GTU9ERkAKK0dOVUxJQl9GTU9ETCA9IEBHTlVMSUJfRk1PRExACitHTlVMSUJfRk9QRU4gPSBAR05VTElCX0ZPUEVOQAorR05VTElCX0ZQUklOVEYgPSBAR05VTElCX0ZQUklOVEZACitHTlVMSUJfRlBSSU5URl9QT1NJWCA9IEBHTlVMSUJfRlBSSU5URl9QT1NJWEAKK0dOVUxJQl9GUFVSR0UgPSBAR05VTElCX0ZQVVJHRUAKK0dOVUxJQl9GUFVUQyA9IEBHTlVMSUJfRlBVVENACitHTlVMSUJfRlBVVFMgPSBAR05VTElCX0ZQVVRTQAorR05VTElCX0ZSRUFEID0gQEdOVUxJQl9GUkVBREAKK0dOVUxJQl9GUkVPUEVOID0gQEdOVUxJQl9GUkVPUEVOQAorR05VTElCX0ZSRVhQID0gQEdOVUxJQl9GUkVYUEAKK0dOVUxJQl9GUkVYUEYgPSBAR05VTElCX0ZSRVhQRkAKK0dOVUxJQl9GUkVYUEwgPSBAR05VTElCX0ZSRVhQTEAKK0dOVUxJQl9GU0NBTkYgPSBAR05VTElCX0ZTQ0FORkAKK0dOVUxJQl9GU0VFSyA9IEBHTlVMSUJfRlNFRUtACitHTlVMSUJfRlNFRUtPID0gQEdOVUxJQl9GU0VFS09ACitHTlVMSUJfRlNUQVQgPSBAR05VTElCX0ZTVEFUQAorR05VTElCX0ZTVEFUQVQgPSBAR05VTElCX0ZTVEFUQVRACitHTlVMSUJfRlNZTkMgPSBAR05VTElCX0ZTWU5DQAorR05VTElCX0ZURUxMID0gQEdOVUxJQl9GVEVMTEAKK0dOVUxJQl9GVEVMTE8gPSBAR05VTElCX0ZURUxMT0AKK0dOVUxJQl9GVFJVTkNBVEUgPSBAR05VTElCX0ZUUlVOQ0FURUAKK0dOVUxJQl9GVVRJTUVOUyA9IEBHTlVMSUJfRlVUSU1FTlNACitHTlVMSUJfRldSSVRFID0gQEdOVUxJQl9GV1JJVEVACitHTlVMSUJfR0VUQyA9IEBHTlVMSUJfR0VUQ0AKK0dOVUxJQl9HRVRDSEFSID0gQEdOVUxJQl9HRVRDSEFSQAorR05VTElCX0dFVENXRCA9IEBHTlVMSUJfR0VUQ1dEQAorR05VTElCX0dFVERFTElNID0gQEdOVUxJQl9HRVRERUxJTUAKK0dOVUxJQl9HRVRET01BSU5OQU1FID0gQEdOVUxJQl9HRVRET01BSU5OQU1FQAorR05VTElCX0dFVERUQUJMRVNJWkUgPSBAR05VTElCX0dFVERUQUJMRVNJWkVACitHTlVMSUJfR0VUR1JPVVBTID0gQEdOVUxJQl9HRVRHUk9VUFNACitHTlVMSUJfR0VUSE9TVE5BTUUgPSBAR05VTElCX0dFVEhPU1ROQU1FQAorR05VTElCX0dFVExJTkUgPSBAR05VTElCX0dFVExJTkVACitHTlVMSUJfR0VUTE9BREFWRyA9IEBHTlVMSUJfR0VUTE9BREFWR0AKK0dOVUxJQl9HRVRMT0dJTiA9IEBHTlVMSUJfR0VUTE9HSU5ACitHTlVMSUJfR0VUTE9HSU5fUiA9IEBHTlVMSUJfR0VUTE9HSU5fUkAKK0dOVUxJQl9HRVRQQUdFU0laRSA9IEBHTlVMSUJfR0VUUEFHRVNJWkVACitHTlVMSUJfR0VUU1VCT1BUID0gQEdOVUxJQl9HRVRTVUJPUFRACitHTlVMSUJfR0VUVVNFUlNIRUxMID0gQEdOVUxJQl9HRVRVU0VSU0hFTExACitHTlVMSUJfR0xfVU5JU1REX0hfR0VUT1BUID0gQEdOVUxJQl9HTF9VTklTVERfSF9HRVRPUFRACitHTlVMSUJfR1JBTlRQVCA9IEBHTlVMSUJfR1JBTlRQVEAKK0dOVUxJQl9HUk9VUF9NRU1CRVIgPSBAR05VTElCX0dST1VQX01FTUJFUkAKK0dOVUxJQl9IWVBPVCA9IEBHTlVMSUJfSFlQT1RACitHTlVMSUJfSFlQT1RGID0gQEdOVUxJQl9IWVBPVEZACitHTlVMSUJfSFlQT1RMID0gQEdOVUxJQl9IWVBPVExACitHTlVMSUJfSUxPR0IgPSBAR05VTElCX0lMT0dCQAorR05VTElCX0lMT0dCRiA9IEBHTlVMSUJfSUxPR0JGQAorR05VTElCX0lMT0dCTCA9IEBHTlVMSUJfSUxPR0JMQAorR05VTElCX0lNQVhBQlMgPSBAR05VTElCX0lNQVhBQlNACitHTlVMSUJfSU1BWERJViA9IEBHTlVMSUJfSU1BWERJVkAKK0dOVUxJQl9JU0FUVFkgPSBAR05VTElCX0lTQVRUWUAKK0dOVUxJQl9JU0ZJTklURSA9IEBHTlVMSUJfSVNGSU5JVEVACitHTlVMSUJfSVNJTkYgPSBAR05VTElCX0lTSU5GQAorR05VTElCX0lTTkFOID0gQEdOVUxJQl9JU05BTkAKK0dOVUxJQl9JU05BTkQgPSBAR05VTElCX0lTTkFOREAKK0dOVUxJQl9JU05BTkYgPSBAR05VTElCX0lTTkFORkAKK0dOVUxJQl9JU05BTkwgPSBAR05VTElCX0lTTkFOTEAKK0dOVUxJQl9JU1dCTEFOSyA9IEBHTlVMSUJfSVNXQkxBTktACitHTlVMSUJfSVNXQ1RZUEUgPSBAR05VTElCX0lTV0NUWVBFQAorR05VTElCX0xDSE1PRCA9IEBHTlVMSUJfTENITU9EQAorR05VTElCX0xDSE9XTiA9IEBHTlVMSUJfTENIT1dOQAorR05VTElCX0xERVhQRiA9IEBHTlVMSUJfTERFWFBGQAorR05VTElCX0xERVhQTCA9IEBHTlVMSUJfTERFWFBMQAorR05VTElCX0xJTksgPSBAR05VTElCX0xJTktACitHTlVMSUJfTElOS0FUID0gQEdOVUxJQl9MSU5LQVRACitHTlVMSUJfTE9HID0gQEdOVUxJQl9MT0dACitHTlVMSUJfTE9HMTAgPSBAR05VTElCX0xPRzEwQAorR05VTElCX0xPRzEwRiA9IEBHTlVMSUJfTE9HMTBGQAorR05VTElCX0xPRzEwTCA9IEBHTlVMSUJfTE9HMTBMQAorR05VTElCX0xPRzFQID0gQEdOVUxJQl9MT0cxUEAKK0dOVUxJQl9MT0cxUEYgPSBAR05VTElCX0xPRzFQRkAKK0dOVUxJQl9MT0cxUEwgPSBAR05VTElCX0xPRzFQTEAKK0dOVUxJQl9MT0cyID0gQEdOVUxJQl9MT0cyQAorR05VTElCX0xPRzJGID0gQEdOVUxJQl9MT0cyRkAKK0dOVUxJQl9MT0cyTCA9IEBHTlVMSUJfTE9HMkxACitHTlVMSUJfTE9HQiA9IEBHTlVMSUJfTE9HQkAKK0dOVUxJQl9MT0dCRiA9IEBHTlVMSUJfTE9HQkZACitHTlVMSUJfTE9HQkwgPSBAR05VTElCX0xPR0JMQAorR05VTElCX0xPR0YgPSBAR05VTElCX0xPR0ZACitHTlVMSUJfTE9HTCA9IEBHTlVMSUJfTE9HTEAKK0dOVUxJQl9MU0VFSyA9IEBHTlVMSUJfTFNFRUtACitHTlVMSUJfTFNUQVQgPSBAR05VTElCX0xTVEFUQAorR05VTElCX01BTExPQ19QT1NJWCA9IEBHTlVMSUJfTUFMTE9DX1BPU0lYQAorR05VTElCX01CUkxFTiA9IEBHTlVMSUJfTUJSTEVOQAorR05VTElCX01CUlRPV0MgPSBAR05VTElCX01CUlRPV0NACitHTlVMSUJfTUJTQ0FTRUNNUCA9IEBHTlVMSUJfTUJTQ0FTRUNNUEAKK0dOVUxJQl9NQlNDQVNFU1RSID0gQEdOVUxJQl9NQlNDQVNFU1RSQAorR05VTElCX01CU0NIUiA9IEBHTlVMSUJfTUJTQ0hSQAorR05VTElCX01CU0NTUE4gPSBAR05VTElCX01CU0NTUE5ACitHTlVMSUJfTUJTSU5JVCA9IEBHTlVMSUJfTUJTSU5JVEAKK0dOVUxJQl9NQlNMRU4gPSBAR05VTElCX01CU0xFTkAKK0dOVUxJQl9NQlNOQ0FTRUNNUCA9IEBHTlVMSUJfTUJTTkNBU0VDTVBACitHTlVMSUJfTUJTTkxFTiA9IEBHTlVMSUJfTUJTTkxFTkAKK0dOVUxJQl9NQlNOUlRPV0NTID0gQEdOVUxJQl9NQlNOUlRPV0NTQAorR05VTElCX01CU1BCUksgPSBAR05VTElCX01CU1BCUktACitHTlVMSUJfTUJTUENBU0VDTVAgPSBAR05VTElCX01CU1BDQVNFQ01QQAorR05VTElCX01CU1JDSFIgPSBAR05VTElCX01CU1JDSFJACitHTlVMSUJfTUJTUlRPV0NTID0gQEdOVUxJQl9NQlNSVE9XQ1NACitHTlVMSUJfTUJTU0VQID0gQEdOVUxJQl9NQlNTRVBACitHTlVMSUJfTUJTU1BOID0gQEdOVUxJQl9NQlNTUE5ACitHTlVMSUJfTUJTU1RSID0gQEdOVUxJQl9NQlNTVFJACitHTlVMSUJfTUJTVE9LX1IgPSBAR05VTElCX01CU1RPS19SQAorR05VTElCX01CVE9XQyA9IEBHTlVMSUJfTUJUT1dDQAorR05VTElCX01FTUNIUiA9IEBHTlVMSUJfTUVNQ0hSQAorR05VTElCX01FTU1FTSA9IEBHTlVMSUJfTUVNTUVNQAorR05VTElCX01FTVBDUFkgPSBAR05VTElCX01FTVBDUFlACitHTlVMSUJfTUVNUkNIUiA9IEBHTlVMSUJfTUVNUkNIUkAKK0dOVUxJQl9NS0RJUkFUID0gQEdOVUxJQl9NS0RJUkFUQAorR05VTElCX01LRFRFTVAgPSBAR05VTElCX01LRFRFTVBACitHTlVMSUJfTUtGSUZPID0gQEdOVUxJQl9NS0ZJRk9ACitHTlVMSUJfTUtGSUZPQVQgPSBAR05VTElCX01LRklGT0FUQAorR05VTElCX01LTk9EID0gQEdOVUxJQl9NS05PREAKK0dOVUxJQl9NS05PREFUID0gQEdOVUxJQl9NS05PREFUQAorR05VTElCX01LT1NURU1QID0gQEdOVUxJQl9NS09TVEVNUEAKK0dOVUxJQl9NS09TVEVNUFMgPSBAR05VTElCX01LT1NURU1QU0AKK0dOVUxJQl9NS1NURU1QID0gQEdOVUxJQl9NS1NURU1QQAorR05VTElCX01LU1RFTVBTID0gQEdOVUxJQl9NS1NURU1QU0AKK0dOVUxJQl9NS1RJTUUgPSBAR05VTElCX01LVElNRUAKK0dOVUxJQl9NT0RGID0gQEdOVUxJQl9NT0RGQAorR05VTElCX01PREZGID0gQEdOVUxJQl9NT0RGRkAKK0dOVUxJQl9NT0RGTCA9IEBHTlVMSUJfTU9ERkxACitHTlVMSUJfTkFOT1NMRUVQID0gQEdOVUxJQl9OQU5PU0xFRVBACitHTlVMSUJfTk9OQkxPQ0tJTkcgPSBAR05VTElCX05PTkJMT0NLSU5HQAorR05VTElCX09CU1RBQ0tfUFJJTlRGID0gQEdOVUxJQl9PQlNUQUNLX1BSSU5URkAKK0dOVUxJQl9PQlNUQUNLX1BSSU5URl9QT1NJWCA9IEBHTlVMSUJfT0JTVEFDS19QUklOVEZfUE9TSVhACitHTlVMSUJfT1BFTiA9IEBHTlVMSUJfT1BFTkAKK0dOVUxJQl9PUEVOQVQgPSBAR05VTElCX09QRU5BVEAKK0dOVUxJQl9QQ0xPU0UgPSBAR05VTElCX1BDTE9TRUAKK0dOVUxJQl9QRVJST1IgPSBAR05VTElCX1BFUlJPUkAKK0dOVUxJQl9QSVBFID0gQEdOVUxJQl9QSVBFQAorR05VTElCX1BJUEUyID0gQEdOVUxJQl9QSVBFMkAKK0dOVUxJQl9QT1BFTiA9IEBHTlVMSUJfUE9QRU5ACitHTlVMSUJfUE9TSVhfT1BFTlBUID0gQEdOVUxJQl9QT1NJWF9PUEVOUFRACitHTlVMSUJfUE9TSVhfU1BBV04gPSBAR05VTElCX1BPU0lYX1NQQVdOQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9ERVNUUk9ZID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfREVTVFJPWUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VURkxBR1MgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRGTEFHU0AKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUUEdST1VQID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUUEdST1VQQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBBUkFNID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0NIRURQQVJBTUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0NIRURQT0xJQ1kgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBPTElDWUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0lHREVGQVVMVCA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNJR0RFRkFVTFRACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNJR01BU0sgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdNQVNLQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9JTklUID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfSU5JVEAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VURkxBR1MgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRGTEFHU0AKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUUEdST1VQID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUUEdST1VQQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTQ0hFRFBBUkFNID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQQVJBTUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQT0xJQ1kgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTQ0hFRFBPTElDWUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0lHREVGQVVMVCA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNJR0RFRkFVTFRACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNJR01BU0sgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTSUdNQVNLQAorR05VTElCX1BPU0lYX1NQQVdOUCA9IEBHTlVMSUJfUE9TSVhfU1BBV05QQAorR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRSA9IEBHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERENMT1NFQAorR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BREREVVAyID0gQEdOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMkAKK0dOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURET1BFTiA9IEBHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU5ACitHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0RFU1RST1kgPSBAR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19ERVNUUk9ZQAorR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19JTklUID0gQEdOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfSU5JVEAKK0dOVUxJQl9QT1dGID0gQEdOVUxJQl9QT1dGQAorR05VTElCX1BSRUFEID0gQEdOVUxJQl9QUkVBREAKK0dOVUxJQl9QUklOVEYgPSBAR05VTElCX1BSSU5URkAKK0dOVUxJQl9QUklOVEZfUE9TSVggPSBAR05VTElCX1BSSU5URl9QT1NJWEAKK0dOVUxJQl9QVEhSRUFEX1NJR01BU0sgPSBAR05VTElCX1BUSFJFQURfU0lHTUFTS0AKK0dOVUxJQl9QVFNOQU1FID0gQEdOVUxJQl9QVFNOQU1FQAorR05VTElCX1BUU05BTUVfUiA9IEBHTlVMSUJfUFRTTkFNRV9SQAorR05VTElCX1BVVEMgPSBAR05VTElCX1BVVENACitHTlVMSUJfUFVUQ0hBUiA9IEBHTlVMSUJfUFVUQ0hBUkAKK0dOVUxJQl9QVVRFTlYgPSBAR05VTElCX1BVVEVOVkAKK0dOVUxJQl9QVVRTID0gQEdOVUxJQl9QVVRTQAorR05VTElCX1BXUklURSA9IEBHTlVMSUJfUFdSSVRFQAorR05VTElCX1JBSVNFID0gQEdOVUxJQl9SQUlTRUAKK0dOVUxJQl9SQU5ET00gPSBAR05VTElCX1JBTkRPTUAKK0dOVUxJQl9SQU5ET01fUiA9IEBHTlVMSUJfUkFORE9NX1JACitHTlVMSUJfUkFXTUVNQ0hSID0gQEdOVUxJQl9SQVdNRU1DSFJACitHTlVMSUJfUkVBRCA9IEBHTlVMSUJfUkVBREAKK0dOVUxJQl9SRUFETElOSyA9IEBHTlVMSUJfUkVBRExJTktACitHTlVMSUJfUkVBRExJTktBVCA9IEBHTlVMSUJfUkVBRExJTktBVEAKK0dOVUxJQl9SRUFMTE9DX1BPU0lYID0gQEdOVUxJQl9SRUFMTE9DX1BPU0lYQAorR05VTElCX1JFQUxQQVRIID0gQEdOVUxJQl9SRUFMUEFUSEAKK0dOVUxJQl9SRU1BSU5ERVIgPSBAR05VTElCX1JFTUFJTkRFUkAKK0dOVUxJQl9SRU1BSU5ERVJGID0gQEdOVUxJQl9SRU1BSU5ERVJGQAorR05VTElCX1JFTUFJTkRFUkwgPSBAR05VTElCX1JFTUFJTkRFUkxACitHTlVMSUJfUkVNT1ZFID0gQEdOVUxJQl9SRU1PVkVACitHTlVMSUJfUkVOQU1FID0gQEdOVUxJQl9SRU5BTUVACitHTlVMSUJfUkVOQU1FQVQgPSBAR05VTElCX1JFTkFNRUFUQAorR05VTElCX1JJTlQgPSBAR05VTElCX1JJTlRACitHTlVMSUJfUklOVEYgPSBAR05VTElCX1JJTlRGQAorR05VTElCX1JJTlRMID0gQEdOVUxJQl9SSU5UTEAKK0dOVUxJQl9STURJUiA9IEBHTlVMSUJfUk1ESVJACitHTlVMSUJfUk9VTkQgPSBAR05VTElCX1JPVU5EQAorR05VTElCX1JPVU5ERiA9IEBHTlVMSUJfUk9VTkRGQAorR05VTElCX1JPVU5ETCA9IEBHTlVMSUJfUk9VTkRMQAorR05VTElCX1JQTUFUQ0ggPSBAR05VTElCX1JQTUFUQ0hACitHTlVMSUJfU0NBTkYgPSBAR05VTElCX1NDQU5GQAorR05VTElCX1NFVEVOViA9IEBHTlVMSUJfU0VURU5WQAorR05VTElCX1NFVEhPU1ROQU1FID0gQEdOVUxJQl9TRVRIT1NUTkFNRUAKK0dOVUxJQl9TSUdBQ1RJT04gPSBAR05VTElCX1NJR0FDVElPTkAKK0dOVUxJQl9TSUdOQUxfSF9TSUdQSVBFID0gQEdOVUxJQl9TSUdOQUxfSF9TSUdQSVBFQAorR05VTElCX1NJR05CSVQgPSBAR05VTElCX1NJR05CSVRACitHTlVMSUJfU0lHUFJPQ01BU0sgPSBAR05VTElCX1NJR1BST0NNQVNLQAorR05VTElCX1NJTkYgPSBAR05VTElCX1NJTkZACitHTlVMSUJfU0lOSEYgPSBAR05VTElCX1NJTkhGQAorR05VTElCX1NJTkwgPSBAR05VTElCX1NJTkxACitHTlVMSUJfU0xFRVAgPSBAR05VTElCX1NMRUVQQAorR05VTElCX1NOUFJJTlRGID0gQEdOVUxJQl9TTlBSSU5URkAKK0dOVUxJQl9TUFJJTlRGX1BPU0lYID0gQEdOVUxJQl9TUFJJTlRGX1BPU0lYQAorR05VTElCX1NRUlRGID0gQEdOVUxJQl9TUVJURkAKK0dOVUxJQl9TUVJUTCA9IEBHTlVMSUJfU1FSVExACitHTlVMSUJfU1RBVCA9IEBHTlVMSUJfU1RBVEAKK0dOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HID0gQEdOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HQAorR05VTElCX1NURElPX0hfU0lHUElQRSA9IEBHTlVMSUJfU1RESU9fSF9TSUdQSVBFQAorR05VTElCX1NUUENQWSA9IEBHTlVMSUJfU1RQQ1BZQAorR05VTElCX1NUUE5DUFkgPSBAR05VTElCX1NUUE5DUFlACitHTlVMSUJfU1RSQ0FTRVNUUiA9IEBHTlVMSUJfU1RSQ0FTRVNUUkAKK0dOVUxJQl9TVFJDSFJOVUwgPSBAR05VTElCX1NUUkNIUk5VTEAKK0dOVUxJQl9TVFJEVVAgPSBAR05VTElCX1NUUkRVUEAKK0dOVUxJQl9TVFJFUlJPUiA9IEBHTlVMSUJfU1RSRVJST1JACitHTlVMSUJfU1RSRVJST1JfUiA9IEBHTlVMSUJfU1RSRVJST1JfUkAKK0dOVUxJQl9TVFJOQ0FUID0gQEdOVUxJQl9TVFJOQ0FUQAorR05VTElCX1NUUk5EVVAgPSBAR05VTElCX1NUUk5EVVBACitHTlVMSUJfU1RSTkxFTiA9IEBHTlVMSUJfU1RSTkxFTkAKK0dOVUxJQl9TVFJQQlJLID0gQEdOVUxJQl9TVFJQQlJLQAorR05VTElCX1NUUlBUSU1FID0gQEdOVUxJQl9TVFJQVElNRUAKK0dOVUxJQl9TVFJTRVAgPSBAR05VTElCX1NUUlNFUEAKK0dOVUxJQl9TVFJTSUdOQUwgPSBAR05VTElCX1NUUlNJR05BTEAKK0dOVUxJQl9TVFJTVFIgPSBAR05VTElCX1NUUlNUUkAKK0dOVUxJQl9TVFJUT0QgPSBAR05VTElCX1NUUlRPREAKK0dOVUxJQl9TVFJUT0lNQVggPSBAR05VTElCX1NUUlRPSU1BWEAKK0dOVUxJQl9TVFJUT0tfUiA9IEBHTlVMSUJfU1RSVE9LX1JACitHTlVMSUJfU1RSVE9MTCA9IEBHTlVMSUJfU1RSVE9MTEAKK0dOVUxJQl9TVFJUT1VMTCA9IEBHTlVMSUJfU1RSVE9VTExACitHTlVMSUJfU1RSVE9VTUFYID0gQEdOVUxJQl9TVFJUT1VNQVhACitHTlVMSUJfU1RSVkVSU0NNUCA9IEBHTlVMSUJfU1RSVkVSU0NNUEAKK0dOVUxJQl9TWU1MSU5LID0gQEdOVUxJQl9TWU1MSU5LQAorR05VTElCX1NZTUxJTktBVCA9IEBHTlVMSUJfU1lNTElOS0FUQAorR05VTElCX1NZU1RFTV9QT1NJWCA9IEBHTlVMSUJfU1lTVEVNX1BPU0lYQAorR05VTElCX1RBTkYgPSBAR05VTElCX1RBTkZACitHTlVMSUJfVEFOSEYgPSBAR05VTElCX1RBTkhGQAorR05VTElCX1RBTkwgPSBAR05VTElCX1RBTkxACitHTlVMSUJfVElNRUdNID0gQEdOVUxJQl9USU1FR01ACitHTlVMSUJfVElNRV9SID0gQEdOVUxJQl9USU1FX1JACitHTlVMSUJfVE1QRklMRSA9IEBHTlVMSUJfVE1QRklMRUAKK0dOVUxJQl9UT1dDVFJBTlMgPSBAR05VTElCX1RPV0NUUkFOU0AKK0dOVUxJQl9UUlVOQyA9IEBHTlVMSUJfVFJVTkNACitHTlVMSUJfVFJVTkNGID0gQEdOVUxJQl9UUlVOQ0ZACitHTlVMSUJfVFJVTkNMID0gQEdOVUxJQl9UUlVOQ0xACitHTlVMSUJfVFRZTkFNRV9SID0gQEdOVUxJQl9UVFlOQU1FX1JACitHTlVMSUJfVU5JU1REX0hfTk9OQkxPQ0tJTkcgPSBAR05VTElCX1VOSVNURF9IX05PTkJMT0NLSU5HQAorR05VTElCX1VOSVNURF9IX1NJR1BJUEUgPSBAR05VTElCX1VOSVNURF9IX1NJR1BJUEVACitHTlVMSUJfVU5MSU5LID0gQEdOVUxJQl9VTkxJTktACitHTlVMSUJfVU5MSU5LQVQgPSBAR05VTElCX1VOTElOS0FUQAorR05VTElCX1VOTE9DS1BUID0gQEdOVUxJQl9VTkxPQ0tQVEAKK0dOVUxJQl9VTlNFVEVOViA9IEBHTlVMSUJfVU5TRVRFTlZACitHTlVMSUJfVVNMRUVQID0gQEdOVUxJQl9VU0xFRVBACitHTlVMSUJfVVRJTUVOU0FUID0gQEdOVUxJQl9VVElNRU5TQVRACitHTlVMSUJfVkFTUFJJTlRGID0gQEdOVUxJQl9WQVNQUklOVEZACitHTlVMSUJfVkRQUklOVEYgPSBAR05VTElCX1ZEUFJJTlRGQAorR05VTElCX1ZGUFJJTlRGID0gQEdOVUxJQl9WRlBSSU5URkAKK0dOVUxJQl9WRlBSSU5URl9QT1NJWCA9IEBHTlVMSUJfVkZQUklOVEZfUE9TSVhACitHTlVMSUJfVkZTQ0FORiA9IEBHTlVMSUJfVkZTQ0FORkAKK0dOVUxJQl9WUFJJTlRGID0gQEdOVUxJQl9WUFJJTlRGQAorR05VTElCX1ZQUklOVEZfUE9TSVggPSBAR05VTElCX1ZQUklOVEZfUE9TSVhACitHTlVMSUJfVlNDQU5GID0gQEdOVUxJQl9WU0NBTkZACitHTlVMSUJfVlNOUFJJTlRGID0gQEdOVUxJQl9WU05QUklOVEZACitHTlVMSUJfVlNQUklOVEZfUE9TSVggPSBAR05VTElCX1ZTUFJJTlRGX1BPU0lYQAorR05VTElCX1dBSVRQSUQgPSBAR05VTElCX1dBSVRQSURACitHTlVMSUJfV0NQQ1BZID0gQEdOVUxJQl9XQ1BDUFlACitHTlVMSUJfV0NQTkNQWSA9IEBHTlVMSUJfV0NQTkNQWUAKK0dOVUxJQl9XQ1JUT01CID0gQEdOVUxJQl9XQ1JUT01CQAorR05VTElCX1dDU0NBU0VDTVAgPSBAR05VTElCX1dDU0NBU0VDTVBACitHTlVMSUJfV0NTQ0FUID0gQEdOVUxJQl9XQ1NDQVRACitHTlVMSUJfV0NTQ0hSID0gQEdOVUxJQl9XQ1NDSFJACitHTlVMSUJfV0NTQ01QID0gQEdOVUxJQl9XQ1NDTVBACitHTlVMSUJfV0NTQ09MTCA9IEBHTlVMSUJfV0NTQ09MTEAKK0dOVUxJQl9XQ1NDUFkgPSBAR05VTElCX1dDU0NQWUAKK0dOVUxJQl9XQ1NDU1BOID0gQEdOVUxJQl9XQ1NDU1BOQAorR05VTElCX1dDU0RVUCA9IEBHTlVMSUJfV0NTRFVQQAorR05VTElCX1dDU0xFTiA9IEBHTlVMSUJfV0NTTEVOQAorR05VTElCX1dDU05DQVNFQ01QID0gQEdOVUxJQl9XQ1NOQ0FTRUNNUEAKK0dOVUxJQl9XQ1NOQ0FUID0gQEdOVUxJQl9XQ1NOQ0FUQAorR05VTElCX1dDU05DTVAgPSBAR05VTElCX1dDU05DTVBACitHTlVMSUJfV0NTTkNQWSA9IEBHTlVMSUJfV0NTTkNQWUAKK0dOVUxJQl9XQ1NOTEVOID0gQEdOVUxJQl9XQ1NOTEVOQAorR05VTElCX1dDU05SVE9NQlMgPSBAR05VTElCX1dDU05SVE9NQlNACitHTlVMSUJfV0NTUEJSSyA9IEBHTlVMSUJfV0NTUEJSS0AKK0dOVUxJQl9XQ1NSQ0hSID0gQEdOVUxJQl9XQ1NSQ0hSQAorR05VTElCX1dDU1JUT01CUyA9IEBHTlVMSUJfV0NTUlRPTUJTQAorR05VTElCX1dDU1NQTiA9IEBHTlVMSUJfV0NTU1BOQAorR05VTElCX1dDU1NUUiA9IEBHTlVMSUJfV0NTU1RSQAorR05VTElCX1dDU1RPSyA9IEBHTlVMSUJfV0NTVE9LQAorR05VTElCX1dDU1dJRFRIID0gQEdOVUxJQl9XQ1NXSURUSEAKK0dOVUxJQl9XQ1NYRlJNID0gQEdOVUxJQl9XQ1NYRlJNQAorR05VTElCX1dDVE9CID0gQEdOVUxJQl9XQ1RPQkAKK0dOVUxJQl9XQ1RPTUIgPSBAR05VTElCX1dDVE9NQkAKK0dOVUxJQl9XQ1RSQU5TID0gQEdOVUxJQl9XQ1RSQU5TQAorR05VTElCX1dDVFlQRSA9IEBHTlVMSUJfV0NUWVBFQAorR05VTElCX1dDV0lEVEggPSBAR05VTElCX1dDV0lEVEhACitHTlVMSUJfV01FTUNIUiA9IEBHTlVMSUJfV01FTUNIUkAKK0dOVUxJQl9XTUVNQ01QID0gQEdOVUxJQl9XTUVNQ01QQAorR05VTElCX1dNRU1DUFkgPSBAR05VTElCX1dNRU1DUFlACitHTlVMSUJfV01FTU1PVkUgPSBAR05VTElCX1dNRU1NT1ZFQAorR05VTElCX1dNRU1TRVQgPSBAR05VTElCX1dNRU1TRVRACitHTlVMSUJfV1JJVEUgPSBAR05VTElCX1dSSVRFQAorR05VTElCX19FWElUID0gQEdOVUxJQl9fRVhJVEAKK0dSRVAgPSBAR1JFUEAKK0hBVkVfQUNPU0YgPSBASEFWRV9BQ09TRkAKK0hBVkVfQUNPU0wgPSBASEFWRV9BQ09TTEAKK0hBVkVfQVNJTkYgPSBASEFWRV9BU0lORkAKK0hBVkVfQVNJTkwgPSBASEFWRV9BU0lOTEAKK0hBVkVfQVRBTjJGID0gQEhBVkVfQVRBTjJGQAorSEFWRV9BVEFORiA9IEBIQVZFX0FUQU5GQAorSEFWRV9BVEFOTCA9IEBIQVZFX0FUQU5MQAorSEFWRV9BVE9MTCA9IEBIQVZFX0FUT0xMQAorSEFWRV9CVE9XQyA9IEBIQVZFX0JUT1dDQAorSEFWRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FID0gQEhBVkVfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRUAKK0hBVkVfQ0JSVCA9IEBIQVZFX0NCUlRACitIQVZFX0NCUlRGID0gQEhBVkVfQ0JSVEZACitIQVZFX0NCUlRMID0gQEhBVkVfQ0JSVExACitIQVZFX0NIT1dOID0gQEhBVkVfQ0hPV05ACitIQVZFX0NPUFlTSUdOID0gQEhBVkVfQ09QWVNJR05ACitIQVZFX0NPUFlTSUdOTCA9IEBIQVZFX0NPUFlTSUdOTEAKK0hBVkVfQ09TRiA9IEBIQVZFX0NPU0ZACitIQVZFX0NPU0hGID0gQEhBVkVfQ09TSEZACitIQVZFX0NPU0wgPSBASEFWRV9DT1NMQAorSEFWRV9ERUNMX0FDT1NMID0gQEhBVkVfREVDTF9BQ09TTEAKK0hBVkVfREVDTF9BU0lOTCA9IEBIQVZFX0RFQ0xfQVNJTkxACitIQVZFX0RFQ0xfQVRBTkwgPSBASEFWRV9ERUNMX0FUQU5MQAorSEFWRV9ERUNMX0NCUlRGID0gQEhBVkVfREVDTF9DQlJURkAKK0hBVkVfREVDTF9DQlJUTCA9IEBIQVZFX0RFQ0xfQ0JSVExACitIQVZFX0RFQ0xfQ0VJTEYgPSBASEFWRV9ERUNMX0NFSUxGQAorSEFWRV9ERUNMX0NFSUxMID0gQEhBVkVfREVDTF9DRUlMTEAKK0hBVkVfREVDTF9DT1BZU0lHTkYgPSBASEFWRV9ERUNMX0NPUFlTSUdORkAKK0hBVkVfREVDTF9DT1NMID0gQEhBVkVfREVDTF9DT1NMQAorSEFWRV9ERUNMX0VOVklST04gPSBASEFWRV9ERUNMX0VOVklST05ACitIQVZFX0RFQ0xfRVhQMiA9IEBIQVZFX0RFQ0xfRVhQMkAKK0hBVkVfREVDTF9FWFAyRiA9IEBIQVZFX0RFQ0xfRVhQMkZACitIQVZFX0RFQ0xfRVhQMkwgPSBASEFWRV9ERUNMX0VYUDJMQAorSEFWRV9ERUNMX0VYUEwgPSBASEFWRV9ERUNMX0VYUExACitIQVZFX0RFQ0xfRVhQTTFMID0gQEhBVkVfREVDTF9FWFBNMUxACitIQVZFX0RFQ0xfRkNIRElSID0gQEhBVkVfREVDTF9GQ0hESVJACitIQVZFX0RFQ0xfRkRBVEFTWU5DID0gQEhBVkVfREVDTF9GREFUQVNZTkNACitIQVZFX0RFQ0xfRkxPT1JGID0gQEhBVkVfREVDTF9GTE9PUkZACitIQVZFX0RFQ0xfRkxPT1JMID0gQEhBVkVfREVDTF9GTE9PUkxACitIQVZFX0RFQ0xfRlBVUkdFID0gQEhBVkVfREVDTF9GUFVSR0VACitIQVZFX0RFQ0xfRlJFWFBMID0gQEhBVkVfREVDTF9GUkVYUExACitIQVZFX0RFQ0xfRlNFRUtPID0gQEhBVkVfREVDTF9GU0VFS09ACitIQVZFX0RFQ0xfRlRFTExPID0gQEhBVkVfREVDTF9GVEVMTE9ACitIQVZFX0RFQ0xfR0VUREVMSU0gPSBASEFWRV9ERUNMX0dFVERFTElNQAorSEFWRV9ERUNMX0dFVERPTUFJTk5BTUUgPSBASEFWRV9ERUNMX0dFVERPTUFJTk5BTUVACitIQVZFX0RFQ0xfR0VUTElORSA9IEBIQVZFX0RFQ0xfR0VUTElORUAKK0hBVkVfREVDTF9HRVRMT0FEQVZHID0gQEhBVkVfREVDTF9HRVRMT0FEQVZHQAorSEFWRV9ERUNMX0dFVExPR0lOX1IgPSBASEFWRV9ERUNMX0dFVExPR0lOX1JACitIQVZFX0RFQ0xfR0VUUEFHRVNJWkUgPSBASEFWRV9ERUNMX0dFVFBBR0VTSVpFQAorSEFWRV9ERUNMX0dFVFVTRVJTSEVMTCA9IEBIQVZFX0RFQ0xfR0VUVVNFUlNIRUxMQAorSEFWRV9ERUNMX0lNQVhBQlMgPSBASEFWRV9ERUNMX0lNQVhBQlNACitIQVZFX0RFQ0xfSU1BWERJViA9IEBIQVZFX0RFQ0xfSU1BWERJVkAKK0hBVkVfREVDTF9MREVYUEwgPSBASEFWRV9ERUNMX0xERVhQTEAKK0hBVkVfREVDTF9MT0NBTFRJTUVfUiA9IEBIQVZFX0RFQ0xfTE9DQUxUSU1FX1JACitIQVZFX0RFQ0xfTE9HMTBMID0gQEhBVkVfREVDTF9MT0cxMExACitIQVZFX0RFQ0xfTE9HMiA9IEBIQVZFX0RFQ0xfTE9HMkAKK0hBVkVfREVDTF9MT0cyRiA9IEBIQVZFX0RFQ0xfTE9HMkZACitIQVZFX0RFQ0xfTE9HMkwgPSBASEFWRV9ERUNMX0xPRzJMQAorSEFWRV9ERUNMX0xPR0IgPSBASEFWRV9ERUNMX0xPR0JACitIQVZFX0RFQ0xfTE9HTCA9IEBIQVZFX0RFQ0xfTE9HTEAKK0hBVkVfREVDTF9NRU1NRU0gPSBASEFWRV9ERUNMX01FTU1FTUAKK0hBVkVfREVDTF9NRU1SQ0hSID0gQEhBVkVfREVDTF9NRU1SQ0hSQAorSEFWRV9ERUNMX09CU1RBQ0tfUFJJTlRGID0gQEhBVkVfREVDTF9PQlNUQUNLX1BSSU5URkAKK0hBVkVfREVDTF9SRU1BSU5ERVIgPSBASEFWRV9ERUNMX1JFTUFJTkRFUkAKK0hBVkVfREVDTF9SRU1BSU5ERVJMID0gQEhBVkVfREVDTF9SRU1BSU5ERVJMQAorSEFWRV9ERUNMX1JJTlRGID0gQEhBVkVfREVDTF9SSU5URkAKK0hBVkVfREVDTF9ST1VORCA9IEBIQVZFX0RFQ0xfUk9VTkRACitIQVZFX0RFQ0xfUk9VTkRGID0gQEhBVkVfREVDTF9ST1VOREZACitIQVZFX0RFQ0xfUk9VTkRMID0gQEhBVkVfREVDTF9ST1VORExACitIQVZFX0RFQ0xfU0VURU5WID0gQEhBVkVfREVDTF9TRVRFTlZACitIQVZFX0RFQ0xfU0VUSE9TVE5BTUUgPSBASEFWRV9ERUNMX1NFVEhPU1ROQU1FQAorSEFWRV9ERUNMX1NJTkwgPSBASEFWRV9ERUNMX1NJTkxACitIQVZFX0RFQ0xfU05QUklOVEYgPSBASEFWRV9ERUNMX1NOUFJJTlRGQAorSEFWRV9ERUNMX1NRUlRMID0gQEhBVkVfREVDTF9TUVJUTEAKK0hBVkVfREVDTF9TVFJEVVAgPSBASEFWRV9ERUNMX1NUUkRVUEAKK0hBVkVfREVDTF9TVFJFUlJPUl9SID0gQEhBVkVfREVDTF9TVFJFUlJPUl9SQAorSEFWRV9ERUNMX1NUUk5EVVAgPSBASEFWRV9ERUNMX1NUUk5EVVBACitIQVZFX0RFQ0xfU1RSTkxFTiA9IEBIQVZFX0RFQ0xfU1RSTkxFTkAKK0hBVkVfREVDTF9TVFJTSUdOQUwgPSBASEFWRV9ERUNMX1NUUlNJR05BTEAKK0hBVkVfREVDTF9TVFJUT0lNQVggPSBASEFWRV9ERUNMX1NUUlRPSU1BWEAKK0hBVkVfREVDTF9TVFJUT0tfUiA9IEBIQVZFX0RFQ0xfU1RSVE9LX1JACitIQVZFX0RFQ0xfU1RSVE9VTUFYID0gQEhBVkVfREVDTF9TVFJUT1VNQVhACitIQVZFX0RFQ0xfVEFOTCA9IEBIQVZFX0RFQ0xfVEFOTEAKK0hBVkVfREVDTF9UUlVOQyA9IEBIQVZFX0RFQ0xfVFJVTkNACitIQVZFX0RFQ0xfVFJVTkNGID0gQEhBVkVfREVDTF9UUlVOQ0ZACitIQVZFX0RFQ0xfVFJVTkNMID0gQEhBVkVfREVDTF9UUlVOQ0xACitIQVZFX0RFQ0xfVFRZTkFNRV9SID0gQEhBVkVfREVDTF9UVFlOQU1FX1JACitIQVZFX0RFQ0xfVU5TRVRFTlYgPSBASEFWRV9ERUNMX1VOU0VURU5WQAorSEFWRV9ERUNMX1ZTTlBSSU5URiA9IEBIQVZFX0RFQ0xfVlNOUFJJTlRGQAorSEFWRV9ERUNMX1dDVE9CID0gQEhBVkVfREVDTF9XQ1RPQkAKK0hBVkVfREVDTF9XQ1dJRFRIID0gQEhBVkVfREVDTF9XQ1dJRFRIQAorSEFWRV9EUFJJTlRGID0gQEhBVkVfRFBSSU5URkAKK0hBVkVfRFVQMiA9IEBIQVZFX0RVUDJACitIQVZFX0RVUDMgPSBASEFWRV9EVVAzQAorSEFWRV9FVUlEQUNDRVNTID0gQEhBVkVfRVVJREFDQ0VTU0AKK0hBVkVfRVhQRiA9IEBIQVZFX0VYUEZACitIQVZFX0VYUEwgPSBASEFWRV9FWFBMQAorSEFWRV9FWFBNMSA9IEBIQVZFX0VYUE0xQAorSEFWRV9FWFBNMUYgPSBASEFWRV9FWFBNMUZACitIQVZFX0ZBQlNGID0gQEhBVkVfRkFCU0ZACitIQVZFX0ZBQlNMID0gQEhBVkVfRkFCU0xACitIQVZFX0ZBQ0NFU1NBVCA9IEBIQVZFX0ZBQ0NFU1NBVEAKK0hBVkVfRkNIRElSID0gQEhBVkVfRkNIRElSQAorSEFWRV9GQ0hNT0RBVCA9IEBIQVZFX0ZDSE1PREFUQAorSEFWRV9GQ0hPV05BVCA9IEBIQVZFX0ZDSE9XTkFUQAorSEFWRV9GQ05UTCA9IEBIQVZFX0ZDTlRMQAorSEFWRV9GREFUQVNZTkMgPSBASEFWRV9GREFUQVNZTkNACitIQVZFX0ZFQVRVUkVTX0ggPSBASEFWRV9GRUFUVVJFU19IQAorSEFWRV9GRlNMID0gQEhBVkVfRkZTTEAKK0hBVkVfRkZTTEwgPSBASEFWRV9GRlNMTEAKK0hBVkVfRk1BID0gQEhBVkVfRk1BQAorSEFWRV9GTUFGID0gQEhBVkVfRk1BRkAKK0hBVkVfRk1BTCA9IEBIQVZFX0ZNQUxACitIQVZFX0ZNT0RGID0gQEhBVkVfRk1PREZACitIQVZFX0ZNT0RMID0gQEhBVkVfRk1PRExACitIQVZFX0ZSRVhQRiA9IEBIQVZFX0ZSRVhQRkAKK0hBVkVfRlNFRUtPID0gQEhBVkVfRlNFRUtPQAorSEFWRV9GU1RBVEFUID0gQEhBVkVfRlNUQVRBVEAKK0hBVkVfRlNZTkMgPSBASEFWRV9GU1lOQ0AKK0hBVkVfRlRFTExPID0gQEhBVkVfRlRFTExPQAorSEFWRV9GVFJVTkNBVEUgPSBASEFWRV9GVFJVTkNBVEVACitIQVZFX0ZVVElNRU5TID0gQEhBVkVfRlVUSU1FTlNACitIQVZFX0dDSl9DID0gQEhBVkVfR0NKX0NACitIQVZFX0dDSl9JTl9QQVRIID0gQEhBVkVfR0NKX0lOX1BBVEhACitIQVZFX0dFVERUQUJMRVNJWkUgPSBASEFWRV9HRVREVEFCTEVTSVpFQAorSEFWRV9HRVRHUk9VUFMgPSBASEFWRV9HRVRHUk9VUFNACitIQVZFX0dFVEhPU1ROQU1FID0gQEhBVkVfR0VUSE9TVE5BTUVACitIQVZFX0dFVExPR0lOID0gQEhBVkVfR0VUTE9HSU5ACitIQVZFX0dFVE9QVF9IID0gQEhBVkVfR0VUT1BUX0hACitIQVZFX0dFVFBBR0VTSVpFID0gQEhBVkVfR0VUUEFHRVNJWkVACitIQVZFX0dFVFNVQk9QVCA9IEBIQVZFX0dFVFNVQk9QVEAKK0hBVkVfR0lKID0gQEhBVkVfR0lKQAorSEFWRV9HSUpfSU5fUEFUSCA9IEBIQVZFX0dJSl9JTl9QQVRIQAorSEFWRV9HUkFOVFBUID0gQEhBVkVfR1JBTlRQVEAKK0hBVkVfR1JPVVBfTUVNQkVSID0gQEhBVkVfR1JPVVBfTUVNQkVSQAorSEFWRV9IWVBPVEYgPSBASEFWRV9IWVBPVEZACitIQVZFX0hZUE9UTCA9IEBIQVZFX0hZUE9UTEAKK0hBVkVfSUxPR0IgPSBASEFWRV9JTE9HQkAKK0hBVkVfSUxPR0JGID0gQEhBVkVfSUxPR0JGQAorSEFWRV9JTE9HQkwgPSBASEFWRV9JTE9HQkxACitIQVZFX0lOVFRZUEVTX0ggPSBASEFWRV9JTlRUWVBFU19IQAorSEFWRV9JU05BTkQgPSBASEFWRV9JU05BTkRACitIQVZFX0lTTkFORiA9IEBIQVZFX0lTTkFORkAKK0hBVkVfSVNOQU5MID0gQEhBVkVfSVNOQU5MQAorSEFWRV9JU1dCTEFOSyA9IEBIQVZFX0lTV0JMQU5LQAorSEFWRV9JU1dDTlRSTCA9IEBIQVZFX0lTV0NOVFJMQAorSEFWRV9KQVZBID0gQEhBVkVfSkFWQUAKK0hBVkVfSkFWQUMgPSBASEFWRV9KQVZBQ0AKK0hBVkVfSkFWQUNfRU5WVkFSID0gQEhBVkVfSkFWQUNfRU5WVkFSQAorSEFWRV9KQVZBQ19JTl9QQVRIID0gQEhBVkVfSkFWQUNfSU5fUEFUSEAKK0hBVkVfSkFWQV9FTlZWQVIgPSBASEFWRV9KQVZBX0VOVlZBUkAKK0hBVkVfSkFWQV9JTl9QQVRIID0gQEhBVkVfSkFWQV9JTl9QQVRIQAorSEFWRV9KSUtFUyA9IEBIQVZFX0pJS0VTQAorSEFWRV9KSUtFU19JTl9QQVRIID0gQEhBVkVfSklLRVNfSU5fUEFUSEAKK0hBVkVfSlJFID0gQEhBVkVfSlJFQAorSEFWRV9KUkVfSU5fUEFUSCA9IEBIQVZFX0pSRV9JTl9QQVRIQAorSEFWRV9KVklFVyA9IEBIQVZFX0pWSUVXQAorSEFWRV9KVklFV19JTl9QQVRIID0gQEhBVkVfSlZJRVdfSU5fUEFUSEAKK0hBVkVfTENITU9EID0gQEhBVkVfTENITU9EQAorSEFWRV9MQ0hPV04gPSBASEFWRV9MQ0hPV05ACitIQVZFX0xERVhQRiA9IEBIQVZFX0xERVhQRkAKK0hBVkVfTElOSyA9IEBIQVZFX0xJTktACitIQVZFX0xJTktBVCA9IEBIQVZFX0xJTktBVEAKK0hBVkVfTE9HMTBGID0gQEhBVkVfTE9HMTBGQAorSEFWRV9MT0cxMEwgPSBASEFWRV9MT0cxMExACitIQVZFX0xPRzFQID0gQEhBVkVfTE9HMVBACitIQVZFX0xPRzFQRiA9IEBIQVZFX0xPRzFQRkAKK0hBVkVfTE9HMVBMID0gQEhBVkVfTE9HMVBMQAorSEFWRV9MT0dCRiA9IEBIQVZFX0xPR0JGQAorSEFWRV9MT0dCTCA9IEBIQVZFX0xPR0JMQAorSEFWRV9MT0dGID0gQEhBVkVfTE9HRkAKK0hBVkVfTE9HTCA9IEBIQVZFX0xPR0xACitIQVZFX0xPTkdfTE9OR19JTlQgPSBASEFWRV9MT05HX0xPTkdfSU5UQAorSEFWRV9MU1RBVCA9IEBIQVZFX0xTVEFUQAorSEFWRV9NQlJMRU4gPSBASEFWRV9NQlJMRU5ACitIQVZFX01CUlRPV0MgPSBASEFWRV9NQlJUT1dDQAorSEFWRV9NQlNJTklUID0gQEhBVkVfTUJTSU5JVEAKK0hBVkVfTUJTTEVOID0gQEhBVkVfTUJTTEVOQAorSEFWRV9NQlNOUlRPV0NTID0gQEhBVkVfTUJTTlJUT1dDU0AKK0hBVkVfTUJTUlRPV0NTID0gQEhBVkVfTUJTUlRPV0NTQAorSEFWRV9NRU1DSFIgPSBASEFWRV9NRU1DSFJACitIQVZFX01FTVBDUFkgPSBASEFWRV9NRU1QQ1BZQAorSEFWRV9NS0RJUkFUID0gQEhBVkVfTUtESVJBVEAKK0hBVkVfTUtEVEVNUCA9IEBIQVZFX01LRFRFTVBACitIQVZFX01LRklGTyA9IEBIQVZFX01LRklGT0AKK0hBVkVfTUtGSUZPQVQgPSBASEFWRV9NS0ZJRk9BVEAKK0hBVkVfTUtOT0QgPSBASEFWRV9NS05PREAKK0hBVkVfTUtOT0RBVCA9IEBIQVZFX01LTk9EQVRACitIQVZFX01LT1NURU1QID0gQEhBVkVfTUtPU1RFTVBACitIQVZFX01LT1NURU1QUyA9IEBIQVZFX01LT1NURU1QU0AKK0hBVkVfTUtTVEVNUCA9IEBIQVZFX01LU1RFTVBACitIQVZFX01LU1RFTVBTID0gQEhBVkVfTUtTVEVNUFNACitIQVZFX01PREZGID0gQEhBVkVfTU9ERkZACitIQVZFX01PREZMID0gQEhBVkVfTU9ERkxACitIQVZFX01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUiA9IEBIQVZFX01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUkAKK0hBVkVfTkFOT1NMRUVQID0gQEhBVkVfTkFOT1NMRUVQQAorSEFWRV9PUEVOQVQgPSBASEFWRV9PUEVOQVRACitIQVZFX09TX0ggPSBASEFWRV9PU19IQAorSEFWRV9QQ0xPU0UgPSBASEFWRV9QQ0xPU0VACitIQVZFX1BJUEUgPSBASEFWRV9QSVBFQAorSEFWRV9QSVBFMiA9IEBIQVZFX1BJUEUyQAorSEFWRV9QT1BFTiA9IEBIQVZFX1BPUEVOQAorSEFWRV9QT1NJWF9PUEVOUFQgPSBASEFWRV9QT1NJWF9PUEVOUFRACitIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HID0gQEhBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkdACitIQVZFX1BPU0lYX1NQQVdOID0gQEhBVkVfUE9TSVhfU1BBV05ACitIQVZFX1BPU0lYX1NQQVdOQVRUUl9UID0gQEhBVkVfUE9TSVhfU1BBV05BVFRSX1RACitIQVZFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19UID0gQEhBVkVfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX1RACitIQVZFX1BPV0YgPSBASEFWRV9QT1dGQAorSEFWRV9QUkVBRCA9IEBIQVZFX1BSRUFEQAorSEFWRV9QVEhSRUFEX1NJR01BU0sgPSBASEFWRV9QVEhSRUFEX1NJR01BU0tACitIQVZFX1BUU05BTUUgPSBASEFWRV9QVFNOQU1FQAorSEFWRV9QVFNOQU1FX1IgPSBASEFWRV9QVFNOQU1FX1JACitIQVZFX1BXUklURSA9IEBIQVZFX1BXUklURUAKK0hBVkVfUkFJU0UgPSBASEFWRV9SQUlTRUAKK0hBVkVfUkFORE9NID0gQEhBVkVfUkFORE9NQAorSEFWRV9SQU5ET01fSCA9IEBIQVZFX1JBTkRPTV9IQAorSEFWRV9SQU5ET01fUiA9IEBIQVZFX1JBTkRPTV9SQAorSEFWRV9SQVdNRU1DSFIgPSBASEFWRV9SQVdNRU1DSFJACitIQVZFX1JFQURMSU5LID0gQEhBVkVfUkVBRExJTktACitIQVZFX1JFQURMSU5LQVQgPSBASEFWRV9SRUFETElOS0FUQAorSEFWRV9SRUFMUEFUSCA9IEBIQVZFX1JFQUxQQVRIQAorSEFWRV9SRU1BSU5ERVIgPSBASEFWRV9SRU1BSU5ERVJACitIQVZFX1JFTUFJTkRFUkYgPSBASEFWRV9SRU1BSU5ERVJGQAorSEFWRV9SRU5BTUVBVCA9IEBIQVZFX1JFTkFNRUFUQAorSEFWRV9SSU5UID0gQEhBVkVfUklOVEAKK0hBVkVfUklOVEwgPSBASEFWRV9SSU5UTEAKK0hBVkVfUlBNQVRDSCA9IEBIQVZFX1JQTUFUQ0hACitIQVZFX1NBTUVfTE9OR19ET1VCTEVfQVNfRE9VQkxFID0gQEhBVkVfU0FNRV9MT05HX0RPVUJMRV9BU19ET1VCTEVACitIQVZFX1NDSEVEX0ggPSBASEFWRV9TQ0hFRF9IQAorSEFWRV9TRVRFTlYgPSBASEFWRV9TRVRFTlZACitIQVZFX1NFVEhPU1ROQU1FID0gQEhBVkVfU0VUSE9TVE5BTUVACitIQVZFX1NJR0FDVElPTiA9IEBIQVZFX1NJR0FDVElPTkAKK0hBVkVfU0lHSEFORExFUl9UID0gQEhBVkVfU0lHSEFORExFUl9UQAorSEFWRV9TSUdJTkZPX1QgPSBASEFWRV9TSUdJTkZPX1RACitIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1QgPSBASEFWRV9TSUdORURfU0lHX0FUT01JQ19UQAorSEFWRV9TSUdORURfV0NIQVJfVCA9IEBIQVZFX1NJR05FRF9XQ0hBUl9UQAorSEFWRV9TSUdORURfV0lOVF9UID0gQEhBVkVfU0lHTkVEX1dJTlRfVEAKK0hBVkVfU0lHU0VUX1QgPSBASEFWRV9TSUdTRVRfVEAKK0hBVkVfU0lORiA9IEBIQVZFX1NJTkZACitIQVZFX1NJTkhGID0gQEhBVkVfU0lOSEZACitIQVZFX1NJTkwgPSBASEFWRV9TSU5MQAorSEFWRV9TTEVFUCA9IEBIQVZFX1NMRUVQQAorSEFWRV9TUEFXTl9IID0gQEhBVkVfU1BBV05fSEAKK0hBVkVfU1FSVEYgPSBASEFWRV9TUVJURkAKK0hBVkVfU1FSVEwgPSBASEFWRV9TUVJUTEAKK0hBVkVfU1RESU5UX0ggPSBASEFWRV9TVERJTlRfSEAKK0hBVkVfU1RQQ1BZID0gQEhBVkVfU1RQQ1BZQAorSEFWRV9TVFBOQ1BZID0gQEhBVkVfU1RQTkNQWUAKK0hBVkVfU1RSQ0FTRVNUUiA9IEBIQVZFX1NUUkNBU0VTVFJACitIQVZFX1NUUkNIUk5VTCA9IEBIQVZFX1NUUkNIUk5VTEAKK0hBVkVfU1RSUEJSSyA9IEBIQVZFX1NUUlBCUktACitIQVZFX1NUUlBUSU1FID0gQEhBVkVfU1RSUFRJTUVACitIQVZFX1NUUlNFUCA9IEBIQVZFX1NUUlNFUEAKK0hBVkVfU1RSVE9EID0gQEhBVkVfU1RSVE9EQAorSEFWRV9TVFJUT0xMID0gQEhBVkVfU1RSVE9MTEAKK0hBVkVfU1RSVE9VTEwgPSBASEFWRV9TVFJUT1VMTEAKK0hBVkVfU1RSVUNUX1JBTkRPTV9EQVRBID0gQEhBVkVfU1RSVUNUX1JBTkRPTV9EQVRBQAorSEFWRV9TVFJVQ1RfU0NIRURfUEFSQU0gPSBASEFWRV9TVFJVQ1RfU0NIRURfUEFSQU1ACitIQVZFX1NUUlVDVF9TSUdBQ1RJT05fU0FfU0lHQUNUSU9OID0gQEhBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT05ACitIQVZFX1NUUlZFUlNDTVAgPSBASEFWRV9TVFJWRVJTQ01QQAorSEFWRV9TWU1MSU5LID0gQEhBVkVfU1lNTElOS0AKK0hBVkVfU1lNTElOS0FUID0gQEhBVkVfU1lNTElOS0FUQAorSEFWRV9TWVNfQklUWVBFU19IID0gQEhBVkVfU1lTX0JJVFlQRVNfSEAKK0hBVkVfU1lTX0lOVFRZUEVTX0ggPSBASEFWRV9TWVNfSU5UVFlQRVNfSEAKK0hBVkVfU1lTX0xPQURBVkdfSCA9IEBIQVZFX1NZU19MT0FEQVZHX0hACitIQVZFX1NZU19QQVJBTV9IID0gQEhBVkVfU1lTX1BBUkFNX0hACitIQVZFX1NZU19UWVBFU19IID0gQEhBVkVfU1lTX1RZUEVTX0hACitIQVZFX1RBTkYgPSBASEFWRV9UQU5GQAorSEFWRV9UQU5IRiA9IEBIQVZFX1RBTkhGQAorSEFWRV9UQU5MID0gQEhBVkVfVEFOTEAKK0hBVkVfVElNRUdNID0gQEhBVkVfVElNRUdNQAorSEFWRV9UWVBFX1ZPTEFUSUxFX1NJR19BVE9NSUNfVCA9IEBIQVZFX1RZUEVfVk9MQVRJTEVfU0lHX0FUT01JQ19UQAorSEFWRV9VTklTVERfSCA9IEBIQVZFX1VOSVNURF9IQAorSEFWRV9VTkxJTktBVCA9IEBIQVZFX1VOTElOS0FUQAorSEFWRV9VTkxPQ0tQVCA9IEBIQVZFX1VOTE9DS1BUQAorSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UID0gQEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVEAKK0hBVkVfVVNMRUVQID0gQEhBVkVfVVNMRUVQQAorSEFWRV9VVElNRU5TQVQgPSBASEFWRV9VVElNRU5TQVRACitIQVZFX1ZBU1BSSU5URiA9IEBIQVZFX1ZBU1BSSU5URkAKK0hBVkVfVkRQUklOVEYgPSBASEFWRV9WRFBSSU5URkAKK0hBVkVfV0NIQVJfSCA9IEBIQVZFX1dDSEFSX0hACitIQVZFX1dDSEFSX1QgPSBASEFWRV9XQ0hBUl9UQAorSEFWRV9XQ1BDUFkgPSBASEFWRV9XQ1BDUFlACitIQVZFX1dDUE5DUFkgPSBASEFWRV9XQ1BOQ1BZQAorSEFWRV9XQ1JUT01CID0gQEhBVkVfV0NSVE9NQkAKK0hBVkVfV0NTQ0FTRUNNUCA9IEBIQVZFX1dDU0NBU0VDTVBACitIQVZFX1dDU0NBVCA9IEBIQVZFX1dDU0NBVEAKK0hBVkVfV0NTQ0hSID0gQEhBVkVfV0NTQ0hSQAorSEFWRV9XQ1NDTVAgPSBASEFWRV9XQ1NDTVBACitIQVZFX1dDU0NPTEwgPSBASEFWRV9XQ1NDT0xMQAorSEFWRV9XQ1NDUFkgPSBASEFWRV9XQ1NDUFlACitIQVZFX1dDU0NTUE4gPSBASEFWRV9XQ1NDU1BOQAorSEFWRV9XQ1NEVVAgPSBASEFWRV9XQ1NEVVBACitIQVZFX1dDU0xFTiA9IEBIQVZFX1dDU0xFTkAKK0hBVkVfV0NTTkNBU0VDTVAgPSBASEFWRV9XQ1NOQ0FTRUNNUEAKK0hBVkVfV0NTTkNBVCA9IEBIQVZFX1dDU05DQVRACitIQVZFX1dDU05DTVAgPSBASEFWRV9XQ1NOQ01QQAorSEFWRV9XQ1NOQ1BZID0gQEhBVkVfV0NTTkNQWUAKK0hBVkVfV0NTTkxFTiA9IEBIQVZFX1dDU05MRU5ACitIQVZFX1dDU05SVE9NQlMgPSBASEFWRV9XQ1NOUlRPTUJTQAorSEFWRV9XQ1NQQlJLID0gQEhBVkVfV0NTUEJSS0AKK0hBVkVfV0NTUkNIUiA9IEBIQVZFX1dDU1JDSFJACitIQVZFX1dDU1JUT01CUyA9IEBIQVZFX1dDU1JUT01CU0AKK0hBVkVfV0NTU1BOID0gQEhBVkVfV0NTU1BOQAorSEFWRV9XQ1NTVFIgPSBASEFWRV9XQ1NTVFJACitIQVZFX1dDU1RPSyA9IEBIQVZFX1dDU1RPS0AKK0hBVkVfV0NTV0lEVEggPSBASEFWRV9XQ1NXSURUSEAKK0hBVkVfV0NTWEZSTSA9IEBIQVZFX1dDU1hGUk1ACitIQVZFX1dDVFJBTlNfVCA9IEBIQVZFX1dDVFJBTlNfVEAKK0hBVkVfV0NUWVBFX0ggPSBASEFWRV9XQ1RZUEVfSEAKK0hBVkVfV0NUWVBFX1QgPSBASEFWRV9XQ1RZUEVfVEAKK0hBVkVfV0lOU09DSzJfSCA9IEBIQVZFX1dJTlNPQ0syX0hACitIQVZFX1dJTlRfVCA9IEBIQVZFX1dJTlRfVEAKK0hBVkVfV01FTUNIUiA9IEBIQVZFX1dNRU1DSFJACitIQVZFX1dNRU1DTVAgPSBASEFWRV9XTUVNQ01QQAorSEFWRV9XTUVNQ1BZID0gQEhBVkVfV01FTUNQWUAKK0hBVkVfV01FTU1PVkUgPSBASEFWRV9XTUVNTU9WRUAKK0hBVkVfV01FTVNFVCA9IEBIQVZFX1dNRU1TRVRACiBIQVZFX19CT09MID0gQEhBVkVfX0JPT0xACitIQVZFX19FWElUID0gQEhBVkVfX0VYSVRACitIRUxQMk1BTiA9IEBIRUxQMk1BTkAKK0lOQ0xVREVfTkVYVCA9IEBJTkNMVURFX05FWFRACitJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFID0gQElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVACitJTlNUQUxMID0gQElOU1RBTExACiBJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAogSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKIElOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAogSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVDMyX01BWF9MVF9JTlRNQVhfTUFYID0gQElOVDMyX01BWF9MVF9JTlRNQVhfTUFYQAorSU5UNjRfTUFYX0VRX0xPTkdfTUFYID0gQElOVDY0X01BWF9FUV9MT05HX01BWEAKIElOVExMSUJTID0gQElOVExMSUJTQAogSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSVNOQU5EX0xJQk0gPSBASVNOQU5EX0xJQk1ACitJU05BTkZfTElCTSA9IEBJU05BTkZfTElCTUAKK0lTTkFOTF9MSUJNID0gQElTTkFOTF9MSUJNQAorSVNOQU5fTElCTSA9IEBJU05BTl9MSUJNQAorTERFWFBMX0xJQk0gPSBATERFWFBMX0xJQk1ACitMREVYUF9MSUJNID0gQExERVhQX0xJQk1ACiBMREZMQUdTID0gQExERkxBR1NACiBMRVggPSBATEVYQAogTEVYTElCID0gQExFWExJQkAKK0xFWF9JU19GTEVYID0gQExFWF9JU19GTEVYQAogTEVYX09VVFBVVF9ST09UID0gQExFWF9PVVRQVVRfUk9PVEAKK0xJQkJJU09OX0xJQkRFUFMgPSBATElCQklTT05fTElCREVQU0AKK0xJQkJJU09OX0xUTElCREVQUyA9IEBMSUJCSVNPTl9MVExJQkRFUFNACiBMSUJJQ09OViA9IEBMSUJJQ09OVkAKIExJQklOVEwgPSBATElCSU5UTEAKK0xJQk1VTFRJVEhSRUFEID0gQExJQk1VTFRJVEhSRUFEQAogTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUFRIID0gQExJQlBUSEAKK0xJQlBUSF9QUkVGSVggPSBATElCUFRIX1BSRUZJWEAKIExJQlMgPSBATElCU0AKK0xJQlRIUkVBRCA9IEBMSUJUSFJFQURACitMSUJVTklTVFJJTkdfVU5JVFlQRVNfSCA9IEBMSUJVTklTVFJJTkdfVU5JVFlQRVNfSEAKK0xJQlVOSVNUUklOR19VTklXSURUSF9IID0gQExJQlVOSVNUUklOR19VTklXSURUSF9IQAorTE9DQUxDSEFSU0VUX1RFU1RTX0VOVklST05NRU5UID0gQExPQ0FMQ0hBUlNFVF9URVNUU19FTlZJUk9OTUVOVEAKK0xPQ0FMRV9GUl9VVEY4ID0gQExPQ0FMRV9GUl9VVEY4QAorTE9DQUxFX0pBID0gQExPQ0FMRV9KQUAKK0xPQ0FMRV9aSF9DTiA9IEBMT0NBTEVfWkhfQ05ACiBMVExJQklDT05WID0gQExUTElCSUNPTlZACiBMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJNVUxUSVRIUkVBRCA9IEBMVExJQk1VTFRJVEhSRUFEQAogTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xUTElCUFRIID0gQExUTElCUFRIQAorTFRMSUJUSFJFQUQgPSBATFRMSUJUSFJFQURACiBNNCA9IEBNNEAKK000X0RFQlVHRklMRSA9IEBNNF9ERUJVR0ZJTEVACitNNF9HTlUgPSBATTRfR05VQAogTUFLRUlORk8gPSBATUFLRUlORk9ACi1NS0lOU1RBTExESVJTID0gQE1LSU5TVEFMTERJUlNACitNS0RJUl9QID0gQE1LRElSX1BACiBNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAogTVNHTUVSR0UgPSBATVNHTUVSR0VACi1PMENGTEFHUyA9IEBPMENGTEFHU0AKLU8wQ1hYRkxBR1MgPSBATzBDWFhGTEFHU0AKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0VSUk5PX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRVJSTk9fSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0ZDTlRMX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRkNOVExfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0ZMT0FUX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRkxPQVRfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0dFVE9QVF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX0dFVE9QVF9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfSU5UVFlQRVNfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9JTlRUWVBFU19IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfTUFUSF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX01BVEhfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NDSEVEX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU0NIRURfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NJR05BTF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NJR05BTF9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1BBV05fSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TUEFXTl9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1REREVGX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1REREVGX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERJTlRfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERJTlRfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURElPX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RESU9fSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURExJQl9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURExJQl9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RSSU5HX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RSSU5HX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfU1RBVF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19TVEFUX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfVFlQRVNfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfVFlQRVNfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19XQUlUX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1lTX1dBSVRfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1RJTUVfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9USU1FX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9VTklTVERfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9VTklTVERfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDSEFSX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfV0NIQVJfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDVFlQRV9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDVFlQRV9IQAorTkVYVF9FUlJOT19IID0gQE5FWFRfRVJSTk9fSEAKK05FWFRfRkNOVExfSCA9IEBORVhUX0ZDTlRMX0hACitORVhUX0ZMT0FUX0ggPSBATkVYVF9GTE9BVF9IQAorTkVYVF9HRVRPUFRfSCA9IEBORVhUX0dFVE9QVF9IQAorTkVYVF9JTlRUWVBFU19IID0gQE5FWFRfSU5UVFlQRVNfSEAKK05FWFRfTUFUSF9IID0gQE5FWFRfTUFUSF9IQAorTkVYVF9TQ0hFRF9IID0gQE5FWFRfU0NIRURfSEAKK05FWFRfU0lHTkFMX0ggPSBATkVYVF9TSUdOQUxfSEAKK05FWFRfU1BBV05fSCA9IEBORVhUX1NQQVdOX0hACitORVhUX1NURERFRl9IID0gQE5FWFRfU1REREVGX0hACitORVhUX1NURElOVF9IID0gQE5FWFRfU1RESU5UX0hACitORVhUX1NURElPX0ggPSBATkVYVF9TVERJT19IQAorTkVYVF9TVERMSUJfSCA9IEBORVhUX1NURExJQl9IQAorTkVYVF9TVFJJTkdfSCA9IEBORVhUX1NUUklOR19IQAorTkVYVF9TWVNfU1RBVF9IID0gQE5FWFRfU1lTX1NUQVRfSEAKK05FWFRfU1lTX1RZUEVTX0ggPSBATkVYVF9TWVNfVFlQRVNfSEAKK05FWFRfU1lTX1dBSVRfSCA9IEBORVhUX1NZU19XQUlUX0hACitORVhUX1RJTUVfSCA9IEBORVhUX1RJTUVfSEAKK05FWFRfVU5JU1REX0ggPSBATkVYVF9VTklTVERfSEAKK05FWFRfV0NIQVJfSCA9IEBORVhUX1dDSEFSX0hACitORVhUX1dDVFlQRV9IID0gQE5FWFRfV0NUWVBFX0hACiBPQkpFWFQgPSBAT0JKRVhUQAogUEFDS0FHRSA9IEBQQUNLQUdFQAogUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX0NPUFlSSUdIVF9ZRUFSID0gQFBBQ0tBR0VfQ09QWVJJR0hUX1lFQVJACiBQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAogUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACiBQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACiBQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAogUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMID0gQFBFUkxACiBQT1NVQiA9IEBQT1NVQkAKK1BSQUdNQV9DT0xVTU5TID0gQFBSQUdNQV9DT0xVTU5TQAorUFJBR01BX1NZU1RFTV9IRUFERVIgPSBAUFJBR01BX1NZU1RFTV9IRUFERVJACitQUklQVFJfUFJFRklYID0gQFBSSVBUUl9QUkVGSVhACitQUklfTUFDUk9TX0JST0tFTiA9IEBQUklfTUFDUk9TX0JST0tFTkAKK1BUSFJFQURfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQyA9IEBQVEhSRUFEX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUNACitQVFJESUZGX1RfU1VGRklYID0gQFBUUkRJRkZfVF9TVUZGSVhACiBSQU5MSUIgPSBAUkFOTElCQAorUkVQTEFDRV9CVE9XQyA9IEBSRVBMQUNFX0JUT1dDQAorUkVQTEFDRV9DQUxMT0MgPSBAUkVQTEFDRV9DQUxMT0NACitSRVBMQUNFX0NBTk9OSUNBTElaRV9GSUxFX05BTUUgPSBAUkVQTEFDRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FQAorUkVQTEFDRV9DQlJURiA9IEBSRVBMQUNFX0NCUlRGQAorUkVQTEFDRV9DQlJUTCA9IEBSRVBMQUNFX0NCUlRMQAorUkVQTEFDRV9DRUlMID0gQFJFUExBQ0VfQ0VJTEAKK1JFUExBQ0VfQ0VJTEYgPSBAUkVQTEFDRV9DRUlMRkAKK1JFUExBQ0VfQ0VJTEwgPSBAUkVQTEFDRV9DRUlMTEAKK1JFUExBQ0VfQ0hPV04gPSBAUkVQTEFDRV9DSE9XTkAKK1JFUExBQ0VfQ0xPU0UgPSBAUkVQTEFDRV9DTE9TRUAKK1JFUExBQ0VfRFBSSU5URiA9IEBSRVBMQUNFX0RQUklOVEZACitSRVBMQUNFX0RVUCA9IEBSRVBMQUNFX0RVUEAKK1JFUExBQ0VfRFVQMiA9IEBSRVBMQUNFX0RVUDJACitSRVBMQUNFX0VYUDIgPSBAUkVQTEFDRV9FWFAyQAorUkVQTEFDRV9FWFAyTCA9IEBSRVBMQUNFX0VYUDJMQAorUkVQTEFDRV9FWFBNMSA9IEBSRVBMQUNFX0VYUE0xQAorUkVQTEFDRV9FWFBNMUYgPSBAUkVQTEFDRV9FWFBNMUZACitSRVBMQUNFX0ZBQlNMID0gQFJFUExBQ0VfRkFCU0xACitSRVBMQUNFX0ZDSE9XTkFUID0gQFJFUExBQ0VfRkNIT1dOQVRACitSRVBMQUNFX0ZDTE9TRSA9IEBSRVBMQUNFX0ZDTE9TRUAKK1JFUExBQ0VfRkNOVEwgPSBAUkVQTEFDRV9GQ05UTEAKK1JFUExBQ0VfRkRPUEVOID0gQFJFUExBQ0VfRkRPUEVOQAorUkVQTEFDRV9GRkxVU0ggPSBAUkVQTEFDRV9GRkxVU0hACitSRVBMQUNFX0ZMT09SID0gQFJFUExBQ0VfRkxPT1JACitSRVBMQUNFX0ZMT09SRiA9IEBSRVBMQUNFX0ZMT09SRkAKK1JFUExBQ0VfRkxPT1JMID0gQFJFUExBQ0VfRkxPT1JMQAorUkVQTEFDRV9GTUEgPSBAUkVQTEFDRV9GTUFACitSRVBMQUNFX0ZNQUYgPSBAUkVQTEFDRV9GTUFGQAorUkVQTEFDRV9GTUFMID0gQFJFUExBQ0VfRk1BTEAKK1JFUExBQ0VfRk1PRCA9IEBSRVBMQUNFX0ZNT0RACitSRVBMQUNFX0ZNT0RGID0gQFJFUExBQ0VfRk1PREZACitSRVBMQUNFX0ZNT0RMID0gQFJFUExBQ0VfRk1PRExACitSRVBMQUNFX0ZPUEVOID0gQFJFUExBQ0VfRk9QRU5ACitSRVBMQUNFX0ZQUklOVEYgPSBAUkVQTEFDRV9GUFJJTlRGQAorUkVQTEFDRV9GUFVSR0UgPSBAUkVQTEFDRV9GUFVSR0VACitSRVBMQUNFX0ZSRU9QRU4gPSBAUkVQTEFDRV9GUkVPUEVOQAorUkVQTEFDRV9GUkVYUCA9IEBSRVBMQUNFX0ZSRVhQQAorUkVQTEFDRV9GUkVYUEYgPSBAUkVQTEFDRV9GUkVYUEZACitSRVBMQUNFX0ZSRVhQTCA9IEBSRVBMQUNFX0ZSRVhQTEAKK1JFUExBQ0VfRlNFRUsgPSBAUkVQTEFDRV9GU0VFS0AKK1JFUExBQ0VfRlNFRUtPID0gQFJFUExBQ0VfRlNFRUtPQAorUkVQTEFDRV9GU1RBVCA9IEBSRVBMQUNFX0ZTVEFUQAorUkVQTEFDRV9GU1RBVEFUID0gQFJFUExBQ0VfRlNUQVRBVEAKK1JFUExBQ0VfRlRFTEwgPSBAUkVQTEFDRV9GVEVMTEAKK1JFUExBQ0VfRlRFTExPID0gQFJFUExBQ0VfRlRFTExPQAorUkVQTEFDRV9GVFJVTkNBVEUgPSBAUkVQTEFDRV9GVFJVTkNBVEVACitSRVBMQUNFX0ZVVElNRU5TID0gQFJFUExBQ0VfRlVUSU1FTlNACitSRVBMQUNFX0dFVENXRCA9IEBSRVBMQUNFX0dFVENXREAKK1JFUExBQ0VfR0VUREVMSU0gPSBAUkVQTEFDRV9HRVRERUxJTUAKK1JFUExBQ0VfR0VURE9NQUlOTkFNRSA9IEBSRVBMQUNFX0dFVERPTUFJTk5BTUVACitSRVBMQUNFX0dFVEdST1VQUyA9IEBSRVBMQUNFX0dFVEdST1VQU0AKK1JFUExBQ0VfR0VUTElORSA9IEBSRVBMQUNFX0dFVExJTkVACitSRVBMQUNFX0dFVExPR0lOX1IgPSBAUkVQTEFDRV9HRVRMT0dJTl9SQAorUkVQTEFDRV9HRVRQQUdFU0laRSA9IEBSRVBMQUNFX0dFVFBBR0VTSVpFQAorUkVQTEFDRV9IVUdFX1ZBTCA9IEBSRVBMQUNFX0hVR0VfVkFMQAorUkVQTEFDRV9IWVBPVCA9IEBSRVBMQUNFX0hZUE9UQAorUkVQTEFDRV9IWVBPVEYgPSBAUkVQTEFDRV9IWVBPVEZACitSRVBMQUNFX0hZUE9UTCA9IEBSRVBMQUNFX0hZUE9UTEAKK1JFUExBQ0VfSUxPR0IgPSBAUkVQTEFDRV9JTE9HQkAKK1JFUExBQ0VfSUxPR0JGID0gQFJFUExBQ0VfSUxPR0JGQAorUkVQTEFDRV9JU0FUVFkgPSBAUkVQTEFDRV9JU0FUVFlACitSRVBMQUNFX0lTRklOSVRFID0gQFJFUExBQ0VfSVNGSU5JVEVACitSRVBMQUNFX0lTSU5GID0gQFJFUExBQ0VfSVNJTkZACitSRVBMQUNFX0lTTkFOID0gQFJFUExBQ0VfSVNOQU5ACitSRVBMQUNFX0lTV0JMQU5LID0gQFJFUExBQ0VfSVNXQkxBTktACitSRVBMQUNFX0lTV0NOVFJMID0gQFJFUExBQ0VfSVNXQ05UUkxACitSRVBMQUNFX0lUT0xEID0gQFJFUExBQ0VfSVRPTERACitSRVBMQUNFX0xDSE9XTiA9IEBSRVBMQUNFX0xDSE9XTkAKK1JFUExBQ0VfTERFWFBMID0gQFJFUExBQ0VfTERFWFBMQAorUkVQTEFDRV9MSU5LID0gQFJFUExBQ0VfTElOS0AKK1JFUExBQ0VfTElOS0FUID0gQFJFUExBQ0VfTElOS0FUQAorUkVQTEFDRV9MT0NBTFRJTUVfUiA9IEBSRVBMQUNFX0xPQ0FMVElNRV9SQAorUkVQTEFDRV9MT0cgPSBAUkVQTEFDRV9MT0dACitSRVBMQUNFX0xPRzEwID0gQFJFUExBQ0VfTE9HMTBACitSRVBMQUNFX0xPRzEwRiA9IEBSRVBMQUNFX0xPRzEwRkAKK1JFUExBQ0VfTE9HMTBMID0gQFJFUExBQ0VfTE9HMTBMQAorUkVQTEFDRV9MT0cxUCA9IEBSRVBMQUNFX0xPRzFQQAorUkVQTEFDRV9MT0cxUEYgPSBAUkVQTEFDRV9MT0cxUEZACitSRVBMQUNFX0xPRzFQTCA9IEBSRVBMQUNFX0xPRzFQTEAKK1JFUExBQ0VfTE9HMiA9IEBSRVBMQUNFX0xPRzJACitSRVBMQUNFX0xPRzJGID0gQFJFUExBQ0VfTE9HMkZACitSRVBMQUNFX0xPRzJMID0gQFJFUExBQ0VfTE9HMkxACitSRVBMQUNFX0xPR0IgPSBAUkVQTEFDRV9MT0dCQAorUkVQTEFDRV9MT0dCRiA9IEBSRVBMQUNFX0xPR0JGQAorUkVQTEFDRV9MT0dCTCA9IEBSRVBMQUNFX0xPR0JMQAorUkVQTEFDRV9MT0dGID0gQFJFUExBQ0VfTE9HRkAKK1JFUExBQ0VfTE9HTCA9IEBSRVBMQUNFX0xPR0xACitSRVBMQUNFX0xTRUVLID0gQFJFUExBQ0VfTFNFRUtACitSRVBMQUNFX0xTVEFUID0gQFJFUExBQ0VfTFNUQVRACitSRVBMQUNFX01BTExPQyA9IEBSRVBMQUNFX01BTExPQ0AKK1JFUExBQ0VfTUJSTEVOID0gQFJFUExBQ0VfTUJSTEVOQAorUkVQTEFDRV9NQlJUT1dDID0gQFJFUExBQ0VfTUJSVE9XQ0AKK1JFUExBQ0VfTUJTSU5JVCA9IEBSRVBMQUNFX01CU0lOSVRACitSRVBMQUNFX01CU05SVE9XQ1MgPSBAUkVQTEFDRV9NQlNOUlRPV0NTQAorUkVQTEFDRV9NQlNSVE9XQ1MgPSBAUkVQTEFDRV9NQlNSVE9XQ1NACitSRVBMQUNFX01CU1RBVEVfVCA9IEBSRVBMQUNFX01CU1RBVEVfVEAKK1JFUExBQ0VfTUJUT1dDID0gQFJFUExBQ0VfTUJUT1dDQAorUkVQTEFDRV9NRU1DSFIgPSBAUkVQTEFDRV9NRU1DSFJACitSRVBMQUNFX01FTU1FTSA9IEBSRVBMQUNFX01FTU1FTUAKK1JFUExBQ0VfTUtESVIgPSBAUkVQTEFDRV9NS0RJUkAKK1JFUExBQ0VfTUtGSUZPID0gQFJFUExBQ0VfTUtGSUZPQAorUkVQTEFDRV9NS05PRCA9IEBSRVBMQUNFX01LTk9EQAorUkVQTEFDRV9NS1NURU1QID0gQFJFUExBQ0VfTUtTVEVNUEAKK1JFUExBQ0VfTUtUSU1FID0gQFJFUExBQ0VfTUtUSU1FQAorUkVQTEFDRV9NT0RGID0gQFJFUExBQ0VfTU9ERkAKK1JFUExBQ0VfTU9ERkYgPSBAUkVQTEFDRV9NT0RGRkAKK1JFUExBQ0VfTU9ERkwgPSBAUkVQTEFDRV9NT0RGTEAKK1JFUExBQ0VfTkFOID0gQFJFUExBQ0VfTkFOQAorUkVQTEFDRV9OQU5PU0xFRVAgPSBAUkVQTEFDRV9OQU5PU0xFRVBACitSRVBMQUNFX05VTEwgPSBAUkVQTEFDRV9OVUxMQAorUkVQTEFDRV9PQlNUQUNLX1BSSU5URiA9IEBSRVBMQUNFX09CU1RBQ0tfUFJJTlRGQAorUkVQTEFDRV9PUEVOID0gQFJFUExBQ0VfT1BFTkAKK1JFUExBQ0VfT1BFTkFUID0gQFJFUExBQ0VfT1BFTkFUQAorUkVQTEFDRV9QRVJST1IgPSBAUkVQTEFDRV9QRVJST1JACitSRVBMQUNFX1BPUEVOID0gQFJFUExBQ0VfUE9QRU5ACitSRVBMQUNFX1BPU0lYX1NQQVdOID0gQFJFUExBQ0VfUE9TSVhfU1BBV05ACitSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRSA9IEBSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRUAKK1JFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDIgPSBAUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMkAKK1JFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU4gPSBAUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURET1BFTkAKK1JFUExBQ0VfUFJFQUQgPSBAUkVQTEFDRV9QUkVBREAKK1JFUExBQ0VfUFJJTlRGID0gQFJFUExBQ0VfUFJJTlRGQAorUkVQTEFDRV9QVEhSRUFEX1NJR01BU0sgPSBAUkVQTEFDRV9QVEhSRUFEX1NJR01BU0tACitSRVBMQUNFX1BUU05BTUUgPSBAUkVQTEFDRV9QVFNOQU1FQAorUkVQTEFDRV9QVFNOQU1FX1IgPSBAUkVQTEFDRV9QVFNOQU1FX1JACitSRVBMQUNFX1BVVEVOViA9IEBSRVBMQUNFX1BVVEVOVkAKK1JFUExBQ0VfUFdSSVRFID0gQFJFUExBQ0VfUFdSSVRFQAorUkVQTEFDRV9SQUlTRSA9IEBSRVBMQUNFX1JBSVNFQAorUkVQTEFDRV9SQU5ET01fUiA9IEBSRVBMQUNFX1JBTkRPTV9SQAorUkVQTEFDRV9SRUFEID0gQFJFUExBQ0VfUkVBREAKK1JFUExBQ0VfUkVBRExJTksgPSBAUkVQTEFDRV9SRUFETElOS0AKK1JFUExBQ0VfUkVBTExPQyA9IEBSRVBMQUNFX1JFQUxMT0NACitSRVBMQUNFX1JFQUxQQVRIID0gQFJFUExBQ0VfUkVBTFBBVEhACitSRVBMQUNFX1JFTUFJTkRFUiA9IEBSRVBMQUNFX1JFTUFJTkRFUkAKK1JFUExBQ0VfUkVNQUlOREVSRiA9IEBSRVBMQUNFX1JFTUFJTkRFUkZACitSRVBMQUNFX1JFTUFJTkRFUkwgPSBAUkVQTEFDRV9SRU1BSU5ERVJMQAorUkVQTEFDRV9SRU1PVkUgPSBAUkVQTEFDRV9SRU1PVkVACitSRVBMQUNFX1JFTkFNRSA9IEBSRVBMQUNFX1JFTkFNRUAKK1JFUExBQ0VfUkVOQU1FQVQgPSBAUkVQTEFDRV9SRU5BTUVBVEAKK1JFUExBQ0VfUk1ESVIgPSBAUkVQTEFDRV9STURJUkAKK1JFUExBQ0VfUk9VTkQgPSBAUkVQTEFDRV9ST1VOREAKK1JFUExBQ0VfUk9VTkRGID0gQFJFUExBQ0VfUk9VTkRGQAorUkVQTEFDRV9ST1VOREwgPSBAUkVQTEFDRV9ST1VORExACitSRVBMQUNFX1NFVEVOViA9IEBSRVBMQUNFX1NFVEVOVkAKK1JFUExBQ0VfU0lHTkJJVCA9IEBSRVBMQUNFX1NJR05CSVRACitSRVBMQUNFX1NJR05CSVRfVVNJTkdfR0NDID0gQFJFUExBQ0VfU0lHTkJJVF9VU0lOR19HQ0NACitSRVBMQUNFX1NMRUVQID0gQFJFUExBQ0VfU0xFRVBACitSRVBMQUNFX1NOUFJJTlRGID0gQFJFUExBQ0VfU05QUklOVEZACitSRVBMQUNFX1NQUklOVEYgPSBAUkVQTEFDRV9TUFJJTlRGQAorUkVQTEFDRV9TUVJUTCA9IEBSRVBMQUNFX1NRUlRMQAorUkVQTEFDRV9TVEFUID0gQFJFUExBQ0VfU1RBVEAKK1JFUExBQ0VfU1RESU9fUkVBRF9GVU5DUyA9IEBSRVBMQUNFX1NURElPX1JFQURfRlVOQ1NACitSRVBMQUNFX1NURElPX1dSSVRFX0ZVTkNTID0gQFJFUExBQ0VfU1RESU9fV1JJVEVfRlVOQ1NACitSRVBMQUNFX1NUUE5DUFkgPSBAUkVQTEFDRV9TVFBOQ1BZQAorUkVQTEFDRV9TVFJDQVNFU1RSID0gQFJFUExBQ0VfU1RSQ0FTRVNUUkAKK1JFUExBQ0VfU1RSQ0hSTlVMID0gQFJFUExBQ0VfU1RSQ0hSTlVMQAorUkVQTEFDRV9TVFJEVVAgPSBAUkVQTEFDRV9TVFJEVVBACitSRVBMQUNFX1NUUkVSUk9SID0gQFJFUExBQ0VfU1RSRVJST1JACitSRVBMQUNFX1NUUkVSUk9SX1IgPSBAUkVQTEFDRV9TVFJFUlJPUl9SQAorUkVQTEFDRV9TVFJOQ0FUID0gQFJFUExBQ0VfU1RSTkNBVEAKK1JFUExBQ0VfU1RSTkRVUCA9IEBSRVBMQUNFX1NUUk5EVVBACitSRVBMQUNFX1NUUk5MRU4gPSBAUkVQTEFDRV9TVFJOTEVOQAorUkVQTEFDRV9TVFJTSUdOQUwgPSBAUkVQTEFDRV9TVFJTSUdOQUxACitSRVBMQUNFX1NUUlNUUiA9IEBSRVBMQUNFX1NUUlNUUkAKK1JFUExBQ0VfU1RSVE9EID0gQFJFUExBQ0VfU1RSVE9EQAorUkVQTEFDRV9TVFJUT0lNQVggPSBAUkVQTEFDRV9TVFJUT0lNQVhACitSRVBMQUNFX1NUUlRPS19SID0gQFJFUExBQ0VfU1RSVE9LX1JACitSRVBMQUNFX1NZTUxJTksgPSBAUkVQTEFDRV9TWU1MSU5LQAorUkVQTEFDRV9USU1FR00gPSBAUkVQTEFDRV9USU1FR01ACitSRVBMQUNFX1RNUEZJTEUgPSBAUkVQTEFDRV9UTVBGSUxFQAorUkVQTEFDRV9UT1dMT1dFUiA9IEBSRVBMQUNFX1RPV0xPV0VSQAorUkVQTEFDRV9UUlVOQyA9IEBSRVBMQUNFX1RSVU5DQAorUkVQTEFDRV9UUlVOQ0YgPSBAUkVQTEFDRV9UUlVOQ0ZACitSRVBMQUNFX1RSVU5DTCA9IEBSRVBMQUNFX1RSVU5DTEAKK1JFUExBQ0VfVFRZTkFNRV9SID0gQFJFUExBQ0VfVFRZTkFNRV9SQAorUkVQTEFDRV9VTkxJTksgPSBAUkVQTEFDRV9VTkxJTktACitSRVBMQUNFX1VOTElOS0FUID0gQFJFUExBQ0VfVU5MSU5LQVRACitSRVBMQUNFX1VOU0VURU5WID0gQFJFUExBQ0VfVU5TRVRFTlZACitSRVBMQUNFX1VTTEVFUCA9IEBSRVBMQUNFX1VTTEVFUEAKK1JFUExBQ0VfVVRJTUVOU0FUID0gQFJFUExBQ0VfVVRJTUVOU0FUQAorUkVQTEFDRV9WQVNQUklOVEYgPSBAUkVQTEFDRV9WQVNQUklOVEZACitSRVBMQUNFX1ZEUFJJTlRGID0gQFJFUExBQ0VfVkRQUklOVEZACitSRVBMQUNFX1ZGUFJJTlRGID0gQFJFUExBQ0VfVkZQUklOVEZACitSRVBMQUNFX1ZQUklOVEYgPSBAUkVQTEFDRV9WUFJJTlRGQAorUkVQTEFDRV9WU05QUklOVEYgPSBAUkVQTEFDRV9WU05QUklOVEZACitSRVBMQUNFX1ZTUFJJTlRGID0gQFJFUExBQ0VfVlNQUklOVEZACitSRVBMQUNFX1dDUlRPTUIgPSBAUkVQTEFDRV9XQ1JUT01CQAorUkVQTEFDRV9XQ1NOUlRPTUJTID0gQFJFUExBQ0VfV0NTTlJUT01CU0AKK1JFUExBQ0VfV0NTUlRPTUJTID0gQFJFUExBQ0VfV0NTUlRPTUJTQAorUkVQTEFDRV9XQ1NXSURUSCA9IEBSRVBMQUNFX1dDU1dJRFRIQAorUkVQTEFDRV9XQ1RPQiA9IEBSRVBMQUNFX1dDVE9CQAorUkVQTEFDRV9XQ1RPTUIgPSBAUkVQTEFDRV9XQ1RPTUJACitSRVBMQUNFX1dDV0lEVEggPSBAUkVQTEFDRV9XQ1dJRFRIQAorUkVQTEFDRV9XUklURSA9IEBSRVBMQUNFX1dSSVRFQAorU0NIRURfSCA9IEBTQ0hFRF9IQAogU0VUX01BS0UgPSBAU0VUX01BS0VACiBTSEVMTCA9IEBTSEVMTEAKK1NJR19BVE9NSUNfVF9TVUZGSVggPSBAU0lHX0FUT01JQ19UX1NVRkZJWEAKK1NJWkVfVF9TVUZGSVggPSBAU0laRV9UX1NVRkZJWEAKIFNUREJPT0xfSCA9IEBTVERCT09MX0hACitTVERERUZfSCA9IEBTVERERUZfSEAKK1NURElOVF9IID0gQFNURElOVF9IQAogU1RSSVAgPSBAU1RSSVBACi1VTklTVERfSCA9IEBVTklTVERfSEAKK1NZU19USU1FX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUMgPSBAU1lTX1RJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQ0AKK1RJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQyA9IEBUSU1FX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUNACitVSU5UMzJfTUFYX0xUX1VJTlRNQVhfTUFYID0gQFVJTlQzMl9NQVhfTFRfVUlOVE1BWF9NQVhACitVSU5UNjRfTUFYX0VRX1VMT05HX01BWCA9IEBVSU5UNjRfTUFYX0VRX1VMT05HX01BWEAKK1VOREVGSU5FX1NUUlRPS19SID0gQFVOREVGSU5FX1NUUlRPS19SQAorVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IID0gQFVOSVNURF9IX0hBVkVfV0lOU09DSzJfSEAKK1VOSVNURF9IX0hBVkVfV0lOU09DSzJfSF9BTkRfVVNFX1NPQ0tFVFMgPSBAVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IX0FORF9VU0VfU09DS0VUU0AKIFVTRV9OTFMgPSBAVVNFX05MU0AKIFZBTEdSSU5EID0gQFZBTEdSSU5EQAorVkFMR1JJTkRfUFJFQklTT04gPSBAVkFMR1JJTkRfUFJFQklTT05ACiBWRVJTSU9OID0gQFZFUlNJT05ACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKK1dBUk5fQ0ZMQUdTID0gQFdBUk5fQ0ZMQUdTQAorV0FSTl9DRkxBR1NfVEVTVCA9IEBXQVJOX0NGTEFHU19URVNUQAorV0FSTl9DWFhGTEFHUyA9IEBXQVJOX0NYWEZMQUdTQAorV0FSTl9DWFhGTEFHU19URVNUID0gQFdBUk5fQ1hYRkxBR1NfVEVTVEAKK1dDSEFSX1RfU1VGRklYID0gQFdDSEFSX1RfU1VGRklYQAogV0VSUk9SX0NGTEFHUyA9IEBXRVJST1JfQ0ZMQUdTQAorV0VSUk9SX0NYWEZMQUdTID0gQFdFUlJPUl9DWFhGTEFHU0AKK1dJTkRPV1NfNjRfQklUX09GRl9UID0gQFdJTkRPV1NfNjRfQklUX09GRl9UQAorV0lORE9XU182NF9CSVRfU1RfU0laRSA9IEBXSU5ET1dTXzY0X0JJVF9TVF9TSVpFQAorV0lOVF9UX1NVRkZJWCA9IEBXSU5UX1RfU1VGRklYQAogWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAorWFNMVFBST0MgPSBAWFNMVFBST0NACiBZQUNDID0gQFlBQ0NACiBZQUNDX0xJQlJBUlkgPSBAWUFDQ19MSUJSQVJZQAogWUFDQ19TQ1JJUFQgPSBAWUFDQ19TQ1JJUFRACitZRkxBR1MgPSBAWUZMQUdTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAogYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACiBhY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfUkFOTElCID0gQGFjX2N0X1JBTkxJQkAKLWFjX2N0X1NUUklQID0gQGFjX2N0X1NUUklQQAogYWNsb2NhbGRpciA9IEBhY2xvY2FsZGlyQAotYW1fX2Zhc3RkZXBDQ19GQUxTRSA9IEBhbV9fZmFzdGRlcENDX0ZBTFNFQAotYW1fX2Zhc3RkZXBDQ19UUlVFID0gQGFtX19mYXN0ZGVwQ0NfVFJVRUAKLWFtX19mYXN0ZGVwQ1hYX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAotYW1fX2Zhc3RkZXBDWFhfVFJVRSA9IEBhbV9fZmFzdGRlcENYWF9UUlVFQAogYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACiBhbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAogYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKQEAgLTE4OCwyOCArMTMzMyw0NiBAQAogYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKIGJ1aWxkX29zID0gQGJ1aWxkX29zQAogYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAogZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKIGV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorZ2xfTElCT0JKUyA9IEBnbF9MSUJPQkpTQAorZ2xfTFRMSUJPQkpTID0gQGdsX0xUTElCT0JKU0AKK2dsdGVzdHNfTElCT0JKUyA9IEBnbHRlc3RzX0xJQk9CSlNACitnbHRlc3RzX0xUTElCT0JKUyA9IEBnbHRlc3RzX0xUTElCT0JKU0AKK2dsdGVzdHNfV0lUTkVTUyA9IEBnbHRlc3RzX1dJVE5FU1NACiBob3N0ID0gQGhvc3RACiBob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACiBob3N0X2NwdSA9IEBob3N0X2NwdUAKIGhvc3Rfb3MgPSBAaG9zdF9vc0AKIGhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAogaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAogaW5mb2RpciA9IEBpbmZvZGlyQAogaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAogbGliZGlyID0gQGxpYmRpckAKIGxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xpc3BkaXIgPSBAbGlzcGRpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACiBsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACiBtYW5kaXIgPSBAbWFuZGlyQAogbWtkaXJfcCA9IEBta2Rpcl9wQAogb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKIHByZWZpeCA9IEBwcmVmaXhACiBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKIHNiaW5kaXIgPSBAc2JpbmRpckAKIHNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKIHN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKIHRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAogQEJJU09OX0NYWF9XT1JLU19UUlVFQFNVQkRJUlMgPSBjYWxjKysKIGRpc3Rfbm9pbnN0X1NDUklQVFMgPSBleHRleGkKIGFsbDogYWxsLXJlY3Vyc2l2ZQpAQCAtMjE5LDE0ICsxMzgyLDE0IEBACiAJQGZvciBkZXAgaW4gJD87IGRvIFwKIAkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAogCSAgICAqJCRkZXAqKSBcCi0JICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKLQkJJiYgZXhpdCAwOyBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAogCSAgICAgIGV4aXQgMTs7IFwKIAkgIGVzYWM7IFwKIAlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgIGV4YW1wbGVzL01ha2VmaWxlJzsgXAotCWNkICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgIGV4YW1wbGVzL01ha2VmaWxlCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbml0cyBleGFtcGxlcy9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWduaXRzIGV4YW1wbGVzL01ha2VmaWxlCiAuUFJFQ0lPVVM6IE1ha2VmaWxlCiBNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCiAJQGNhc2UgJyQ/JyBpbiBcCkBAIC0yNDQsMTYgKzE0MDcsMTYgQEAKIAljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKICQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCiAJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi11bmluc3RhbGwtaW5mby1hbToKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CiAKICMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCi0jIGludG8gdGhlbSBhbmQgcnVuIGBtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KLSMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgYG1ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKLSMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gYGNvbmZpZy5zdGF0dXMnLCBlZGl0IGBjb25maWcuc3RhdHVzJwotIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gYG1ha2UnKTsKLSMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlIGBtYWtlJyBjb21tYW5kIGxpbmUuCi0kKFJFQ1VSU0lWRV9UQVJHRVRTKToKLQlAZmFpbGNvbT0nZXhpdCAxJzsgXAorIyBpbnRvIHRoZW0gYW5kIHJ1biAnbWFrZScgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoaXMgTWFrZWZpbGUuCisjIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mICdtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCisjICgxKSBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IGluICdjb25maWcuc3RhdHVzJywgZWRpdCAnY29uZmlnLnN0YXR1cycKKyMgICAgICh3aGljaCB3aWxsIGNhdXNlIHRoZSBNYWtlZmlsZXMgdG8gYmUgcmVnZW5lcmF0ZWQgd2hlbiB5b3UgcnVuICdtYWtlJyk7CisjICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSAnbWFrZScgY29tbWFuZCBsaW5lLgorJChSRUNVUlNJVkVfVEFSR0VUUykgJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyk6CisJQGZhaWw9IGZhaWxjb209J2V4aXQgMSc7IFwKIAlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCiAJICBjYXNlICQkZiBpbiBcCiAJICAgICo9KiB8IC0tWyFrXSopOzsgXApAQCAtMjYyLDcgKzE0MjUsMTEgQEAKIAlkb25lOyBcCiAJZG90X3NlZW49bm87IFwKIAl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCi0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJY2FzZSAiJEAiIGluIFwKKwkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKKwkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKKwllc2FjOyBcCisJZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKIAkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKIAkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCiAJICAgIGRvdF9zZWVuPXllczsgXApAQCAtMjcwLDUxICsxNDM3LDIzIEBACiAJICBlbHNlIFwKIAkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKIAkgIGZpOyBcCi0JICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKIAkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCiAJZG9uZTsgXAogCWlmIHRlc3QgIiQkZG90X3NlZW4iID0gIm5vIjsgdGhlbiBcCiAJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAiJCR0YXJnZXQtYW0iIHx8IGV4aXQgMTsgXAogCWZpOyB0ZXN0IC16ICIkJGZhaWwiCi0KLW1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBjbGVhbi1yZWN1cnNpdmUgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBcCi1tYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZToKLQlAZmFpbGNvbT0nZXhpdCAxJzsgXAotCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKLQkgIGNhc2UgJCRmIGluIFwKLQkgICAgKj0qIHwgLS1bIWtdKik7OyBcCi0JICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQlkb3Rfc2Vlbj1ubzsgXAotCWNhc2UgIiRAIiBpbiBcCi0JICBkaXN0Y2xlYW4tKiB8IG1haW50YWluZXItY2xlYW4tKikgbGlzdD0nJChESVNUX1NVQkRJUlMpJyA7OyBcCi0JICAqKSBsaXN0PSckKFNVQkRJUlMpJyA7OyBcCi0JZXNhYzsgXAotCXJldj0nJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiA6OyBlbHNlIFwKLQkgICAgcmV2PSIkJHN1YmRpciAkJHJldiI7IFwKLQkgIGZpOyBcCi0JZG9uZTsgXAotCXJldj0iJCRyZXYgLiI7IFwKLQl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCi0JZm9yIHN1YmRpciBpbiAkJHJldjsgZG8gXAotCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKLQkgIGVsc2UgXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAotCSAgZmk7IFwKLQkgIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAotCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKLQlkb25lICYmIHRlc3QgLXogIiQkZmFpbCIKIHRhZ3MtcmVjdXJzaXZlOgogCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdGFncyk7IFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAogCWRvbmUKIGN0YWdzLXJlY3Vyc2l2ZToKIAlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGN0YWdzKTsgXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGN0YWdzKTsgXAorCWRvbmUKK2NzY29wZWxpc3QtcmVjdXJzaXZlOgorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNzY29wZWxpc3QpOyBcCiAJZG9uZQogCiBJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQpAQCAtMzIyLDE0ICsxNDYxLDE0IEBACiAJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKIAkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCiAJICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCiAJbWtpZCAtZklEICQkdW5pcXVlCiB0YWdzOiBUQUdTCiAKIFRBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAogCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQl0YWdzPTsgXAorCXNldCB4OyBcCiAJaGVyZT1gcHdkYDsgXAogCWlmICgkKEVUQUdTKSAtLWV0YWdzLWluY2x1ZGUgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAogCSAgaW5jbHVkZV9vcHRpb249LS1ldGFncy1pbmNsdWRlOyBcCkBAIC0zNDEsODEgKzE0ODAsMTEyIEBACiAJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCiAJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAogCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCi0JICAgICAgdGFncz0iJCR0YWdzICQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCisJICAgICAgc2V0ICIkJEAiICIkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAogCSAgZmk7IFwKIAlkb25lOyBcCiAJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCiAJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKIAkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCiAJICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCiAJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICQkdGFncyAkJHVuaXF1ZTsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCiAJZmkKIGN0YWdzOiBDVEFHUwogQ1RBR1M6IGN0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKIAkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JdGFncz07IFwKLQloZXJlPWBwd2RgOyBcCiAJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCiAJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKIAkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCiAJICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCiAJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHRhZ3MgJCR1bmlxdWUKKwkgICAgICQkdW5pcXVlCiAKIEdUQUdTOgogCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisKK2NzY29wZWxpc3Q6IGNzY29wZWxpc3QtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCknOyBcCisJY2FzZSAiJChzcmNkaXIpIiBpbiBcCisJICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCisJICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAorCWVzYWM7IFwKKwlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAorCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAorCSAgZWxzZSBcCisJICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCisJICBmaTsgXAorCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwogCiBkaXN0Y2xlYW4tdGFnczoKIAktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwogCiBkaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCi0JICBjYXNlICQkZmlsZSBpbiBcCi0JICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0JICAgICQodG9wX3NyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3wiYDs7IFwKLQkgIGVzYWM7IFwKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAogCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAotCSAgICBkaXI9Ii8kJGRpciI7IFwKLQkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAotCSAgZWxzZSBcCi0JICAgIGRpcj0nJzsgXAotCSAgZmk7IFwKIAkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKIAkgICAgZmk7IFwKLQkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKIAkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCiAJICAgIHx8IGV4aXQgMTsgXAogCSAgZmk7IFwKIAlkb25lCi0JbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKIAkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCi0JICAgIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKLQkgICAgfHwgJChta2Rpcl9wKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgICAgZGlzdGRpcj1gJChhbV9fY2QpICQoZGlzdGRpcikgJiYgcHdkYDsgXAotCSAgICB0b3BfZGlzdGRpcj1gJChhbV9fY2QpICQodG9wX2Rpc3RkaXIpICYmIHB3ZGA7IFwKLQkgICAgKGNkICQkc3ViZGlyICYmIFwKKwkgICAgJChhbV9fbWFrZV9kcnlydW4pIFwKKwkgICAgICB8fCB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgICAgfHwgJChNS0RJUl9QKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICAgIHx8IGV4aXQgMTsgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKGRpc3RkaXIpLyQkc3ViZGlyIjsgXAorCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorCSAgICBuZXdfZGlzdGRpcj0kJHJlbGRpcjsgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKHRvcF9kaXN0ZGlyKSI7IFwKKwkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKKwkgICAgbmV3X3RvcF9kaXN0ZGlyPSQkcmVsZGlyOyBcCisJICAgIGVjaG8gIiAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcXCI7IFwKKwkgICAgZWNobyAiICAgICBhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBhbV9fc2tpcF9tb2RlX2ZpeD06IGRpc3RkaXIpIjsgXAorCSAgICAoJChhbV9fY2QpICQkc3ViZGlyICYmIFwKIAkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCi0JICAgICAgICB0b3BfZGlzdGRpcj0iJCR0b3BfZGlzdGRpciIgXAotCSAgICAgICAgZGlzdGRpcj0iJCRkaXN0ZGlyLyQkc3ViZGlyIiBcCisJICAgICAgICB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIFwKKwkgICAgICAgIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFwKKwkJYW1fX3JlbW92ZV9kaXN0ZGlyPTogXAorCQlhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBcCisJCWFtX19za2lwX21vZGVfZml4PTogXAogCSAgICAgICAgZGlzdGRpcikgXAogCSAgICAgIHx8IGV4aXQgMTsgXAogCSAgZmk7IFwKQEAgLTQzNSwxNiArMTYwNSwyMiBAQAogCiBpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKIGluc3RhbGwtc3RyaXA6Ci0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCi0JICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCisJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAgIGluc3RhbGw7IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorCWZpCiBtb3N0bHljbGVhbi1nZW5lcmljOgogCiBjbGVhbi1nZW5lcmljOgogCiBkaXN0Y2xlYW4tZ2VuZXJpYzoKIAktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKIAogbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgogCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKQEAgLTQ2MywxOCArMTYzOSwzOCBAQAogCiBodG1sOiBodG1sLXJlY3Vyc2l2ZQogCitodG1sLWFtOgorCiBpbmZvOiBpbmZvLXJlY3Vyc2l2ZQogCiBpbmZvLWFtOgogCiBpbnN0YWxsLWRhdGEtYW06CiAKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1yZWN1cnNpdmUKKworaW5zdGFsbC1kdmktYW06CisKIGluc3RhbGwtZXhlYy1hbToKIAoraW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlCisKK2luc3RhbGwtaHRtbC1hbToKKwogaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCiAKK2luc3RhbGwtaW5mby1hbToKKwogaW5zdGFsbC1tYW46CiAKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1yZWN1cnNpdmUKKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtcmVjdXJzaXZlCisKK2luc3RhbGwtcHMtYW06CisKIGluc3RhbGxjaGVjay1hbToKIAogbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKQEAgLTQ5MywyMSArMTY4OSwyNSBAQAogCiBwcy1hbToKIAotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaW5mby1hbQordW5pbnN0YWxsLWFtOgogCi11bmluc3RhbGwtaW5mbzogdW5pbnN0YWxsLWluZm8tcmVjdXJzaXZlCisuTUFLRTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgXAorCWNzY29wZWxpc3QtcmVjdXJzaXZlIGN0YWdzLXJlY3Vyc2l2ZSBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAgXAorCXRhZ3MtcmVjdXJzaXZlCiAKLS5QSE9OWTogJChSRUNVUlNJVkVfVEFSR0VUUykgQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBcCi0JY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1yZWN1cnNpdmUgY3RhZ3MgY3RhZ3MtcmVjdXJzaXZlIFwKLQlkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4tdGFncyBcCi0JZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBcCi0JaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JaW5zdGFsbGRpcnMtYW0gbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAotCW1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1yZWN1cnNpdmUgXAotCXVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWluZm8tYW0KKy5QSE9OWTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgQ1RBR1MgR1RBR1MgXAorCWFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjc2NvcGVsaXN0IFwKKwljc2NvcGVsaXN0LXJlY3Vyc2l2ZSBjdGFncyBjdGFncy1yZWN1cnNpdmUgZGlzdGNsZWFuIFwKKwlkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCisJaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCisJaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCisJaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKKwlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAorCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCisJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIGluc3RhbGxkaXJzLWFtIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1nZW5lcmljIHBkZiBcCisJcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1yZWN1cnNpdmUgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCiAKICMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCiAjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2NhbGMrKy9NYWtlZmlsZS5hbSBiL2V4YW1wbGVzL2NhbGMrKy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGJiYmFjCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvY2FsYysrL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsOTMgQEAKKyMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbiAtKi1NYWtlZmlsZS0qLQorIyMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgUnVubmluZyB0aGUgYmlzb24gZnJvbSB0aGlzIHRhcmJhbGwuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitCSVNPTiA9ICQodG9wX2J1aWxkZGlyKS90ZXN0cy9iaXNvbgorQklTT05fSU4gPSAkKHRvcF9zcmNkaXIpL3Rlc3RzL2Jpc29uLmluCisKKyQoQklTT04pOiAkKEJJU09OX0lOKQorCSQoQU1fVl9HRU4pY2QgJCh0b3BfYnVpbGRkaXIpL3Rlc3RzICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGJpc29uCisKKyMjIC0tLS0tLS0tLS0tLSAjIworIyMgRXh0cmFjdGluZy4gICMjCisjIyAtLS0tLS0tLS0tLS0gIyMKKworZG9jID0gJCh0b3Bfc3JjZGlyKS9kb2MvYmlzb24udGV4aQorZXh0ZXhpID0gJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9leHRleGkKKyMgRXh0cmFjdCBpbiBzcmMuCiskKHNyY2RpcikvY2FsYy5zdGFtcDogJChkb2MpICQoZXh0ZXhpKQorCSQoQU1fVl9HRU4pcm0gLWYgJEAgJEAudG1wCisJJChBTV9WX2F0KXRvdWNoICRALnRtcAorCSQoQU1fVl9hdCljZCAkKHNyY2RpcikgJiYgXAorCSAgICQoQVdLKSAtZiAuLi9leHRleGkgLXYgVkVSU0lPTj0iJChWRVJTSU9OKSIgXAorCSAgICAgLi4vLi4vZG9jL2Jpc29uLnRleGkgLS0gY2FsYysrLXBhcnNlci55eSBcCisJICAgICBjYWxjKystc2Nhbm5lci5sbCBjYWxjKysuY2MgY2FsYysrLWRyaXZlci5oaCBjYWxjKystZHJpdmVyLmNjCisJJChBTV9WX2F0KW12ICRALnRtcCAkQAorCiskKGNhbGNfZXh0cmFjdGVkKTogJChzcmNkaXIpL2NhbGMuc3RhbXAKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgUGFyc2VyIGdlbmVyYXRpb24uICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitERUZBVUxUX0lOQ0xVREVTID0gLUkuIC1JJChzcmNkaXIpCitCVUlMVF9TT1VSQ0VTID0gJChjYWxjX2V4dHJhY3RlZCkgJChjYWxjX3NvdXJjZXNfZ2VuZXJhdGVkKQorQ0xFQU5GSUxFUyA9ICQoc3JjZGlyKS8qLm91dHB1dCAqLnRtcAorTUFJTlRBSU5FUkNMRUFORklMRVMgPSAkKHNyY2RpcikvKi5zdGFtcCAkKEJVSUxUX1NPVVJDRVMpCisKKyMgQ29tcGlsZSB0aGUgcGFyc2VyIGFuZCBzYXZlIGN5Y2xlcy4KKyMgVGhpcyBjb2RlIGNvbWVzIGZyb20gIkhhbmRsaW5nIFRvb2xzIHRoYXQgUHJvZHVjZSBNYW55IE91dHB1dHMiLAorIyBmcm9tIHRoZSBBdXRvbWFrZSBkb2N1bWVudGF0aW9uLgorRVhUUkFfRElTVCA9CQkJCQlcCisgICQoc3JjZGlyKS9jYWxjKystcGFyc2VyLnN0YW1wCQkJXAorICAkKHNyY2RpcikvY2FsYysrLXBhcnNlci55eQkJCVwKKyAgJChzcmNkaXIpL2NhbGMuc3RhbXAKKyMgRG9uJ3QgZGVwZW5kIG9uICQoQklTT04pIG90aGVyd2lzZSB3ZSB3b3VsZCByZWJ1aWxkIHRoZXNlIGZpbGVzCisjIGluIHNyY2RpciwgaW5jbHVkaW5nIGR1cmluZyBkaXN0Y2hlY2ssIHdoaWNoIGlzIGZvcmJpZGRlbi4KKyQoc3JjZGlyKS9jYWxjKystcGFyc2VyLnN0YW1wOiAkKHNyY2RpcikvY2FsYysrLXBhcnNlci55eSAkKEJJU09OX0lOKQorCSQoQU1fVl9HRU4pcm0gLWYgY2FsYysrLXBhcnNlci50bXAKKwkkKEFNX1ZfYXQpdG91Y2ggY2FsYysrLXBhcnNlci50bXAKKwkkKEFNX1ZfYXQpJChCSVNPTikgLWQgLXJhIC1TIGxhbHIxLmNjIC1vICQoc3JjZGlyKS9jYWxjKystcGFyc2VyLmNjIFwKKwkgICQoc3JjZGlyKS9jYWxjKystcGFyc2VyLnl5CisJJChBTV9WX2F0KW12IC1mIGNhbGMrKy1wYXJzZXIudG1wICRACisKKyQoY2FsY19zb3VyY2VzX2dlbmVyYXRlZCk6ICQoc3JjZGlyKS9jYWxjKystcGFyc2VyLnN0YW1wCisJJChBTV9WX0dFTilpZiB0ZXN0IC1mICRAOyB0aGVuIDo7IGVsc2UgXAorCSAgcm0gLWYgJChzcmNkaXIpL2NhbGMrKy1wYXJzZXIuc3RhbXAgJiYgXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJChzcmNkaXIpL2NhbGMrKy1wYXJzZXIuc3RhbXA7IFwKKwlmaQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQnVpbGRpbmcgJiB0ZXN0aW5nIGNhbGMrKy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworY2hlY2tfUFJPR1JBTVMgPSBjYWxjKysKKworY2FsY19zb3VyY2VzX2V4dHJhY3RlZCA9ICQoc3JjZGlyKS9jYWxjKystc2Nhbm5lci5sbCAkKHNyY2RpcikvY2FsYysrLmNjIFwKKyAgJChzcmNkaXIpL2NhbGMrKy1kcml2ZXIuaGggJChzcmNkaXIpL2NhbGMrKy1kcml2ZXIuY2MKK2NhbGNfZXh0cmFjdGVkID0gJChjYWxjX3NvdXJjZXNfZXh0cmFjdGVkKSAkKHNyY2RpcikvY2FsYysrLXBhcnNlci55eQorY2FsY19zb3VyY2VzX2dlbmVyYXRlZCA9IFwKKyAgJChzcmNkaXIpL3N0YWNrLmhoICQoc3JjZGlyKS9wb3NpdGlvbi5oaCAkKHNyY2RpcikvbG9jYXRpb24uaGggXAorICAkKHNyY2RpcikvY2FsYysrLXBhcnNlci5oaCAkKHNyY2RpcikvY2FsYysrLXBhcnNlci5jYworCitjYWxjX19fU09VUkNFUyA9ICQoY2FsY19zb3VyY2VzX2V4dHJhY3RlZCkgJChjYWxjX3NvdXJjZXNfZ2VuZXJhdGVkKQorCitURVNUUyA9IHRlc3QKK0VYVFJBX0RJU1QgKz0gJChURVNUUykKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2NhbGMrKy9NYWtlZmlsZS5pbiBiL2V4YW1wbGVzL2NhbGMrKy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGZiMDMwCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvY2FsYysrL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMTg3MyBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMi41IGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KK1ZQQVRIID0gQHNyY2RpckAKK2FtX19tYWtlX2RyeXJ1biA9IFwKKyAgeyBcCisgICAgYW1fX2RyeT1ubzsgXAorICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAorICAgICAgKlxcW1wgXAldKikgXAorICAgICAgICBlY2hvICdhbS0tZWNobzogOyBAZWNobyAiQU0iICBPSycgfCAkKE1BS0UpIC1mIC0gMj4vZGV2L251bGwgXAorICAgICAgICAgIHwgZ3JlcCAnXkFNIE9LJCQnID4vZGV2L251bGwgfHwgYW1fX2RyeT15ZXM7OyBcCisgICAgICAqKSBcCisgICAgICAgIGZvciBhbV9fZmxnIGluICQkTUFLRUZMQUdTOyBkbyBcCisgICAgICAgICAgY2FzZSAkJGFtX19mbGcgaW4gXAorICAgICAgICAgICAgKj0qfC0tKikgOzsgXAorICAgICAgICAgICAgKm4qKSBhbV9fZHJ5PXllczsgYnJlYWs7OyBcCisgICAgICAgICAgZXNhYzsgXAorICAgICAgICBkb25lOzsgXAorICAgIGVzYWM7IFwKKyAgICB0ZXN0ICQkYW1fX2RyeSA9IHllczsgXAorICB9Citwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorY2hlY2tfUFJPR1JBTVMgPSBjYWxjKyskKEVYRUVYVCkKK3N1YmRpciA9IGV4YW1wbGVzL2NhbGMrKworRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluIFwKKwkkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9kZXBjb21wICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3lsd3JhcCBcCisJY2FsYysrLXNjYW5uZXIuY2MKK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200LzAwZ251bGliLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2FsbG9jYS5tNCAkKHRvcF9zcmNkaXIpL200L2FzbS11bmRlcnNjb3JlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Fzc2VydC5tNCAkKHRvcF9zcmNkaXIpL200L2Jpc29uLWkxOG4ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYy13b3JraW5nLm00ICQodG9wX3NyY2RpcikvbTQvY2FsbG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Nsb3NlLXN0cmVhbS5tNCAkKHRvcF9zcmNkaXIpL200L2Nsb3NlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Nsb3Nlb3V0Lm00ICQodG9wX3NyY2RpcikvbTQvY29kZXNldC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb25maWctaC5tNCAkKHRvcF9zcmNkaXIpL200L2NvbmZpZ21ha2UubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3h4Lm00ICQodG9wX3NyY2RpcikvbTQvZGlybmFtZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9kbWFsbG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2RvdWJsZS1zbGFzaC1yb290Lm00ICQodG9wX3NyY2RpcikvbTQvZHVwMi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9lbnZpcm9uLm00ICQodG9wX3NyY2RpcikvbTQvZXJybm9faC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9lcnJvci5tNCAkKHRvcF9zcmNkaXIpL200L2V4cG9uZW50ZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHBvbmVudGYubTQgJCh0b3Bfc3JjZGlyKS9tNC9leHBvbmVudGwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXh0ZW5zaW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHRlcm4taW5saW5lLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZhdGFsLXNpZ25hbC5tNCAkKHRvcF9zcmNkaXIpL200L2ZjbnRsLW8ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZmNudGwubTQgJCh0b3Bfc3JjZGlyKS9tNC9mY250bF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZsZXgubTQgJCh0b3Bfc3JjZGlyKS9tNC9mbG9hdF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZvcGVuLm00ICQodG9wX3NyY2RpcikvbTQvZnBlbmRpbmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZnBpZWVlLm00ICQodG9wX3NyY2RpcikvbTQvZnByaW50Zi1wb3NpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mcmV4cC5tNCAkKHRvcF9zcmNkaXIpL200L2ZyZXhwbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mc2V0ZXJyLm00ICQodG9wX3NyY2RpcikvbTQvZnN0YXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ2V0ZGVsaW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXRkdGFibGVzaXplLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dldGxpbmUubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXRvcHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCAkKHRvcF9zcmNkaXIpL200L2dsaWJjMjEubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ251bGliLWNvbW1vbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWItY29tcC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2luY2x1ZGVfbmV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvaW50bWF4X3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMtcHJpLm00ICQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2lzbmFuLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2lzbmFuZC5tNCAkKHRvcF9zcmNkaXIpL200L2lzbmFuZi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pc25hbmwubTQgJCh0b3Bfc3JjZGlyKS9tNC9pc3dibGFuay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9qYXZhY29tcC5tNCAkKHRvcF9zcmNkaXIpL200L2phdmFleGVjLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xhcmdlZmlsZS5tNCAkKHRvcF9zcmNkaXIpL200L2xkZXhwLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xkZXhwbC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGlidW5pc3RyaW5nLWJhc2UubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9jYWxjaGFyc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvbG9jYWxlLWZyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvY2FsZS1qYS5tNCAkKHRvcF9zcmNkaXIpL200L2xvY2FsZS16aC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sb2NrLm00ICQodG9wX3NyY2RpcikvbTQvbG9uZ2xvbmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbTQubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYWxsb2MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWF0aF9oLm00ICQodG9wX3NyY2RpcikvbTQvbWJjaGFyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21iaXRlci5tNCAkKHRvcF9zcmNkaXIpL200L21icnRvd2MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWJzaW5pdC5tNCAkKHRvcF9zcmNkaXIpL200L21ic3RhdGVfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYnN3aWR0aC5tNCAkKHRvcF9zcmNkaXIpL200L21lbWNoci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tbWFwLWFub24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9tb2RlX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbXN2Yy1pbnZhbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tc3ZjLW5vdGhyb3cubTQgJCh0b3Bfc3JjZGlyKS9tNC9tdWx0aWFyY2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvbm9jcmFzaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9vYnN0YWNrLXByaW50Zi5tNCAkKHRvcF9zcmNkaXIpL200L29mZl90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L29wZW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wYXRobWF4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BlcnJvci5tNCAkKHRvcF9zcmNkaXIpL200L3BpcGUyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcG9zaXhfc3Bhd24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJpbnRmLWZyZXhwLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ByaW50Zi1mcmV4cGwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJpbnRmLXBvc2l4LXJwbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcmludGYubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9xdW90ZS5tNCAkKHRvcF9zcmNkaXIpL200L3F1b3RlYXJnLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3JhaXNlLm00ICQodG9wX3NyY2RpcikvbTQvcmF3bWVtY2hyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3JlYWxsb2MubTQgJCh0b3Bfc3JjZGlyKS9tNC9zY2hlZF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NldGVudi5tNCAkKHRvcF9zcmNkaXIpL200L3NpZ19hdG9taWNfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zaWdhY3Rpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zaWduYWxfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zaWduYWxibG9ja2luZy5tNCAkKHRvcF9zcmNkaXIpL200L3NpZ25iaXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc2l6ZV9tYXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc25wcmludGYtcG9zaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc25wcmludGYubTQgJCh0b3Bfc3JjZGlyKS9tNC9zcGF3bi1waXBlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NwYXduX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zcHJpbnRmLXBvc2l4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NzaXplX3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGF0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGJvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRkZWZfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnQubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRpb19oLm00ICQodG9wX3NyY2RpcikvbTQvc3RkbGliX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RwY3B5Lm00ICQodG9wX3NyY2RpcikvbTQvc3RyY2hybnVsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cmR1cC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cmVycm9yLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cmVycm9yX3IubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJpbmdfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJuZHVwLm00ICQodG9wX3NyY2RpcikvbTQvc3Rybmxlbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b3VsLm00ICQodG9wX3NyY2RpcikvbTQvc3RydmVyc2NtcC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zeXNfc29ja2V0X2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3lzX3N0YXRfaC5tNCAkKHRvcF9zcmNkaXIpL200L3N5c190eXBlc19oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N5c193YWl0X2gubTQgJCh0b3Bfc3JjZGlyKS9tNC90aHJlYWRsaWIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdGltZV9oLm00ICQodG9wX3NyY2RpcikvbTQvdGltZXZhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGQtc2FmZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC91bmxvY2tlZC1pby5tNCAkKHRvcF9zcmNkaXIpL200L3Zhc25wcmludGYubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdmZwcmludGYtcG9zaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdnNucHJpbnRmLXBvc2l4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ZzbnByaW50Zi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC92c3ByaW50Zi1wb3NpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93YWl0LXByb2Nlc3MubTQgJCh0b3Bfc3JjZGlyKS9tNC93YWl0cGlkLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3dhcm4tb24tdXNlLm00ICQodG9wX3NyY2RpcikvbTQvd2FybmluZ3MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2NoYXJfaC5tNCAkKHRvcF9zcmNkaXIpL200L3djaGFyX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2N0eXBlX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC93Y3dpZHRoLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3dpbnRfdC5tNCAkKHRvcF9zcmNkaXIpL200L3hhbGxvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC94c2l6ZS5tNCAkKHRvcF9zcmNkaXIpL200L3hzdHJuZHVwLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorYW1fX29iamVjdHNfMSA9IGNhbGMrKy1zY2FubmVyLiQoT0JKRVhUKSBjYWxjKysuJChPQkpFWFQpIFwKKwljYWxjKystZHJpdmVyLiQoT0JKRVhUKQorYW1fX29iamVjdHNfMiA9IGNhbGMrKy1wYXJzZXIuJChPQkpFWFQpCithbV9jYWxjX19fT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfMSkgJChhbV9fb2JqZWN0c18yKQorY2FsY19fX09CSkVDVFMgPSAkKGFtX2NhbGNfX19PQkpFQ1RTKQorY2FsY19fX0xEQUREID0gJChMREFERCkKK0FNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCithbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKK2FtX192X1BfMCA9IGZhbHNlCithbV9fdl9QXzEgPSA6CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOworYW1fX3ZfR0VOXzEgPSAKK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9hdF8wID0gQAorYW1fX3ZfYXRfMSA9IAorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCithbV9fbXYgPSBtdiAtZgorQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQorYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2x0XzAgPSAtLXNpbGVudAorYW1fX3ZfbHRfMSA9IAorQ1hYQ09NUElMRSA9ICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpCitBTV9WX0NYWCA9ICQoYW1fX3ZfQ1hYX0BBTV9WQCkKK2FtX192X0NYWF8gPSAkKGFtX192X0NYWF9AQU1fREVGQVVMVF9WQCkKK2FtX192X0NYWF8wID0gQGVjaG8gIiAgQ1hYICAgICAiICRAOworYW1fX3ZfQ1hYXzEgPSAKK0NYWExEID0gJChDWFgpCitDWFhMSU5LID0gJChDWFhMRCkgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIFwKKwktbyAkQAorQU1fVl9DWFhMRCA9ICQoYW1fX3ZfQ1hYTERfQEFNX1ZAKQorYW1fX3ZfQ1hYTERfID0gJChhbV9fdl9DWFhMRF9AQU1fREVGQVVMVF9WQCkKK2FtX192X0NYWExEXzAgPSBAZWNobyAiICBDWFhMRCAgICIgJEA7CithbV9fdl9DWFhMRF8xID0gCitMRVhDT01QSUxFID0gJChMRVgpICQoQU1fTEZMQUdTKSAkKExGTEFHUykKK0FNX1ZfTEVYID0gJChhbV9fdl9MRVhfQEFNX1ZAKQorYW1fX3ZfTEVYXyA9ICQoYW1fX3ZfTEVYX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfTEVYXzAgPSBAZWNobyAiICBMRVggICAgICIgJEA7CithbV9fdl9MRVhfMSA9IAorWUxXUkFQID0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgveWx3cmFwCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitBTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCithbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKK2FtX192X0NDXzEgPSAKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0FNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCithbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKK2FtX192X0NDTERfMSA9IAorU09VUkNFUyA9ICQoY2FsY19fX1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKGNhbGNfX19TT1VSQ0VTKQorYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCisgIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAorICAgIG58bm98Tk8pIGZhbHNlOzsgXAorICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCisgIGVzYWMKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK2FtX190dHlfY29sb3JzX2R1bW15ID0gXAorICBtZ249IHJlZD0gZ3JuPSBsZ249IGJsdT0gYnJnPSBzdGQ9OyBcCisgIGFtX19jb2xvcl90ZXN0cz1ubworYW1fX3R0eV9jb2xvcnMgPSAkKGFtX190dHlfY29sb3JzX2R1bW15KQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK3BrZ2xpYmV4ZWNkaXIgPSBAcGtnbGliZXhlY2RpckAKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FMTE9DQSA9IEBBTExPQ0FACitBTExPQ0FfSCA9IEBBTExPQ0FfSEAKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUFBMRV9VTklWRVJTQUxfQlVJTEQgPSBAQVBQTEVfVU5JVkVSU0FMX0JVSUxEQAorQVIgPSBAQVJACitBUkZMQUdTID0gQEFSRkxBR1NACitBU01fU1lNQk9MX1BSRUZJWCA9IEBBU01fU1lNQk9MX1BSRUZJWEAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT000VEUgPSBAQVVUT000VEVACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVNPTl9DWFhfV09SS1MgPSBAQklTT05fQ1hYX1dPUktTQAorQklTT05fQ19XT1JLUyA9IEBCSVNPTl9DX1dPUktTQAorQklTT05fTE9DQUxFRElSID0gQEJJU09OX0xPQ0FMRURJUkAKK0JJVFNJWkVPRl9QVFJESUZGX1QgPSBAQklUU0laRU9GX1BUUkRJRkZfVEAKK0JJVFNJWkVPRl9TSUdfQVRPTUlDX1QgPSBAQklUU0laRU9GX1NJR19BVE9NSUNfVEAKK0JJVFNJWkVPRl9TSVpFX1QgPSBAQklUU0laRU9GX1NJWkVfVEAKK0JJVFNJWkVPRl9XQ0hBUl9UID0gQEJJVFNJWkVPRl9XQ0hBUl9UQAorQklUU0laRU9GX1dJTlRfVCA9IEBCSVRTSVpFT0ZfV0lOVF9UQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NMQVNTUEFUSCA9IEBDTEFTU1BBVEhACitDTEFTU1BBVEhfU0VQQVJBVE9SID0gQENMQVNTUEFUSF9TRVBBUkFUT1JACitDT05GSUdfSU5DTFVERSA9IEBDT05GSUdfSU5DTFVERUAKK0NPTkZfSkFWQSA9IEBDT05GX0pBVkFACitDT05GX0pBVkFDID0gQENPTkZfSkFWQUNACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWFhfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUID0gQENYWF9DT01QSUxFUl9QT1NJWExZX0NPUlJFQ1RACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorQ19DT01QSUxFUl9QT1NJWExZX0NPUlJFQ1QgPSBAQ19DT01QSUxFUl9QT1NJWExZX0NPUlJFQ1RACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRE9UID0gQERPVEAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRU1VTFRJSE9QX0hJRERFTiA9IEBFTVVMVElIT1BfSElEREVOQAorRU1VTFRJSE9QX1ZBTFVFID0gQEVNVUxUSUhPUF9WQUxVRUAKK0VOT0xJTktfSElEREVOID0gQEVOT0xJTktfSElEREVOQAorRU5PTElOS19WQUxVRSA9IEBFTk9MSU5LX1ZBTFVFQAorRU9WRVJGTE9XX0hJRERFTiA9IEBFT1ZFUkZMT1dfSElEREVOQAorRU9WRVJGTE9XX1ZBTFVFID0gQEVPVkVSRkxPV19WQUxVRUAKK0VSUk5PX0ggPSBARVJSTk9fSEAKK0VYRUVYVCA9IEBFWEVFWFRACitGTE9BVF9IID0gQEZMT0FUX0hACitHQ0MgPSBAR0NDQAorR0VUT1BUX0ggPSBAR0VUT1BUX0hACitHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAorR0xJQkMyMSA9IEBHTElCQzIxQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHTlVMSUJfQUNPU0YgPSBAR05VTElCX0FDT1NGQAorR05VTElCX0FDT1NMID0gQEdOVUxJQl9BQ09TTEAKK0dOVUxJQl9BU0lORiA9IEBHTlVMSUJfQVNJTkZACitHTlVMSUJfQVNJTkwgPSBAR05VTElCX0FTSU5MQAorR05VTElCX0FUQU4yRiA9IEBHTlVMSUJfQVRBTjJGQAorR05VTElCX0FUQU5GID0gQEdOVUxJQl9BVEFORkAKK0dOVUxJQl9BVEFOTCA9IEBHTlVMSUJfQVRBTkxACitHTlVMSUJfQVRPTEwgPSBAR05VTElCX0FUT0xMQAorR05VTElCX0JUT1dDID0gQEdOVUxJQl9CVE9XQ0AKK0dOVUxJQl9DQUxMT0NfUE9TSVggPSBAR05VTElCX0NBTExPQ19QT1NJWEAKK0dOVUxJQl9DQU5PTklDQUxJWkVfRklMRV9OQU1FID0gQEdOVUxJQl9DQU5PTklDQUxJWkVfRklMRV9OQU1FQAorR05VTElCX0NCUlQgPSBAR05VTElCX0NCUlRACitHTlVMSUJfQ0JSVEYgPSBAR05VTElCX0NCUlRGQAorR05VTElCX0NCUlRMID0gQEdOVUxJQl9DQlJUTEAKK0dOVUxJQl9DRUlMID0gQEdOVUxJQl9DRUlMQAorR05VTElCX0NFSUxGID0gQEdOVUxJQl9DRUlMRkAKK0dOVUxJQl9DRUlMTCA9IEBHTlVMSUJfQ0VJTExACitHTlVMSUJfQ0hESVIgPSBAR05VTElCX0NIRElSQAorR05VTElCX0NIT1dOID0gQEdOVUxJQl9DSE9XTkAKK0dOVUxJQl9DTE9TRSA9IEBHTlVMSUJfQ0xPU0VACitHTlVMSUJfQ09QWVNJR04gPSBAR05VTElCX0NPUFlTSUdOQAorR05VTElCX0NPUFlTSUdORiA9IEBHTlVMSUJfQ09QWVNJR05GQAorR05VTElCX0NPUFlTSUdOTCA9IEBHTlVMSUJfQ09QWVNJR05MQAorR05VTElCX0NPU0YgPSBAR05VTElCX0NPU0ZACitHTlVMSUJfQ09TSEYgPSBAR05VTElCX0NPU0hGQAorR05VTElCX0NPU0wgPSBAR05VTElCX0NPU0xACitHTlVMSUJfRFBSSU5URiA9IEBHTlVMSUJfRFBSSU5URkAKK0dOVUxJQl9EVVAgPSBAR05VTElCX0RVUEAKK0dOVUxJQl9EVVAyID0gQEdOVUxJQl9EVVAyQAorR05VTElCX0RVUDMgPSBAR05VTElCX0RVUDNACitHTlVMSUJfRU5WSVJPTiA9IEBHTlVMSUJfRU5WSVJPTkAKK0dOVUxJQl9FVUlEQUNDRVNTID0gQEdOVUxJQl9FVUlEQUNDRVNTQAorR05VTElCX0VYUDIgPSBAR05VTElCX0VYUDJACitHTlVMSUJfRVhQMkYgPSBAR05VTElCX0VYUDJGQAorR05VTElCX0VYUDJMID0gQEdOVUxJQl9FWFAyTEAKK0dOVUxJQl9FWFBGID0gQEdOVUxJQl9FWFBGQAorR05VTElCX0VYUEwgPSBAR05VTElCX0VYUExACitHTlVMSUJfRVhQTTEgPSBAR05VTElCX0VYUE0xQAorR05VTElCX0VYUE0xRiA9IEBHTlVMSUJfRVhQTTFGQAorR05VTElCX0VYUE0xTCA9IEBHTlVMSUJfRVhQTTFMQAorR05VTElCX0ZBQlNGID0gQEdOVUxJQl9GQUJTRkAKK0dOVUxJQl9GQUJTTCA9IEBHTlVMSUJfRkFCU0xACitHTlVMSUJfRkFDQ0VTU0FUID0gQEdOVUxJQl9GQUNDRVNTQVRACitHTlVMSUJfRkNIRElSID0gQEdOVUxJQl9GQ0hESVJACitHTlVMSUJfRkNITU9EQVQgPSBAR05VTElCX0ZDSE1PREFUQAorR05VTElCX0ZDSE9XTkFUID0gQEdOVUxJQl9GQ0hPV05BVEAKK0dOVUxJQl9GQ0xPU0UgPSBAR05VTElCX0ZDTE9TRUAKK0dOVUxJQl9GQ05UTCA9IEBHTlVMSUJfRkNOVExACitHTlVMSUJfRkRBVEFTWU5DID0gQEdOVUxJQl9GREFUQVNZTkNACitHTlVMSUJfRkRPUEVOID0gQEdOVUxJQl9GRE9QRU5ACitHTlVMSUJfRkZMVVNIID0gQEdOVUxJQl9GRkxVU0hACitHTlVMSUJfRkZTTCA9IEBHTlVMSUJfRkZTTEAKK0dOVUxJQl9GRlNMTCA9IEBHTlVMSUJfRkZTTExACitHTlVMSUJfRkdFVEMgPSBAR05VTElCX0ZHRVRDQAorR05VTElCX0ZHRVRTID0gQEdOVUxJQl9GR0VUU0AKK0dOVUxJQl9GTE9PUiA9IEBHTlVMSUJfRkxPT1JACitHTlVMSUJfRkxPT1JGID0gQEdOVUxJQl9GTE9PUkZACitHTlVMSUJfRkxPT1JMID0gQEdOVUxJQl9GTE9PUkxACitHTlVMSUJfRk1BID0gQEdOVUxJQl9GTUFACitHTlVMSUJfRk1BRiA9IEBHTlVMSUJfRk1BRkAKK0dOVUxJQl9GTUFMID0gQEdOVUxJQl9GTUFMQAorR05VTElCX0ZNT0QgPSBAR05VTElCX0ZNT0RACitHTlVMSUJfRk1PREYgPSBAR05VTElCX0ZNT0RGQAorR05VTElCX0ZNT0RMID0gQEdOVUxJQl9GTU9ETEAKK0dOVUxJQl9GT1BFTiA9IEBHTlVMSUJfRk9QRU5ACitHTlVMSUJfRlBSSU5URiA9IEBHTlVMSUJfRlBSSU5URkAKK0dOVUxJQl9GUFJJTlRGX1BPU0lYID0gQEdOVUxJQl9GUFJJTlRGX1BPU0lYQAorR05VTElCX0ZQVVJHRSA9IEBHTlVMSUJfRlBVUkdFQAorR05VTElCX0ZQVVRDID0gQEdOVUxJQl9GUFVUQ0AKK0dOVUxJQl9GUFVUUyA9IEBHTlVMSUJfRlBVVFNACitHTlVMSUJfRlJFQUQgPSBAR05VTElCX0ZSRUFEQAorR05VTElCX0ZSRU9QRU4gPSBAR05VTElCX0ZSRU9QRU5ACitHTlVMSUJfRlJFWFAgPSBAR05VTElCX0ZSRVhQQAorR05VTElCX0ZSRVhQRiA9IEBHTlVMSUJfRlJFWFBGQAorR05VTElCX0ZSRVhQTCA9IEBHTlVMSUJfRlJFWFBMQAorR05VTElCX0ZTQ0FORiA9IEBHTlVMSUJfRlNDQU5GQAorR05VTElCX0ZTRUVLID0gQEdOVUxJQl9GU0VFS0AKK0dOVUxJQl9GU0VFS08gPSBAR05VTElCX0ZTRUVLT0AKK0dOVUxJQl9GU1RBVCA9IEBHTlVMSUJfRlNUQVRACitHTlVMSUJfRlNUQVRBVCA9IEBHTlVMSUJfRlNUQVRBVEAKK0dOVUxJQl9GU1lOQyA9IEBHTlVMSUJfRlNZTkNACitHTlVMSUJfRlRFTEwgPSBAR05VTElCX0ZURUxMQAorR05VTElCX0ZURUxMTyA9IEBHTlVMSUJfRlRFTExPQAorR05VTElCX0ZUUlVOQ0FURSA9IEBHTlVMSUJfRlRSVU5DQVRFQAorR05VTElCX0ZVVElNRU5TID0gQEdOVUxJQl9GVVRJTUVOU0AKK0dOVUxJQl9GV1JJVEUgPSBAR05VTElCX0ZXUklURUAKK0dOVUxJQl9HRVRDID0gQEdOVUxJQl9HRVRDQAorR05VTElCX0dFVENIQVIgPSBAR05VTElCX0dFVENIQVJACitHTlVMSUJfR0VUQ1dEID0gQEdOVUxJQl9HRVRDV0RACitHTlVMSUJfR0VUREVMSU0gPSBAR05VTElCX0dFVERFTElNQAorR05VTElCX0dFVERPTUFJTk5BTUUgPSBAR05VTElCX0dFVERPTUFJTk5BTUVACitHTlVMSUJfR0VURFRBQkxFU0laRSA9IEBHTlVMSUJfR0VURFRBQkxFU0laRUAKK0dOVUxJQl9HRVRHUk9VUFMgPSBAR05VTElCX0dFVEdST1VQU0AKK0dOVUxJQl9HRVRIT1NUTkFNRSA9IEBHTlVMSUJfR0VUSE9TVE5BTUVACitHTlVMSUJfR0VUTElORSA9IEBHTlVMSUJfR0VUTElORUAKK0dOVUxJQl9HRVRMT0FEQVZHID0gQEdOVUxJQl9HRVRMT0FEQVZHQAorR05VTElCX0dFVExPR0lOID0gQEdOVUxJQl9HRVRMT0dJTkAKK0dOVUxJQl9HRVRMT0dJTl9SID0gQEdOVUxJQl9HRVRMT0dJTl9SQAorR05VTElCX0dFVFBBR0VTSVpFID0gQEdOVUxJQl9HRVRQQUdFU0laRUAKK0dOVUxJQl9HRVRTVUJPUFQgPSBAR05VTElCX0dFVFNVQk9QVEAKK0dOVUxJQl9HRVRVU0VSU0hFTEwgPSBAR05VTElCX0dFVFVTRVJTSEVMTEAKK0dOVUxJQl9HTF9VTklTVERfSF9HRVRPUFQgPSBAR05VTElCX0dMX1VOSVNURF9IX0dFVE9QVEAKK0dOVUxJQl9HUkFOVFBUID0gQEdOVUxJQl9HUkFOVFBUQAorR05VTElCX0dST1VQX01FTUJFUiA9IEBHTlVMSUJfR1JPVVBfTUVNQkVSQAorR05VTElCX0hZUE9UID0gQEdOVUxJQl9IWVBPVEAKK0dOVUxJQl9IWVBPVEYgPSBAR05VTElCX0hZUE9URkAKK0dOVUxJQl9IWVBPVEwgPSBAR05VTElCX0hZUE9UTEAKK0dOVUxJQl9JTE9HQiA9IEBHTlVMSUJfSUxPR0JACitHTlVMSUJfSUxPR0JGID0gQEdOVUxJQl9JTE9HQkZACitHTlVMSUJfSUxPR0JMID0gQEdOVUxJQl9JTE9HQkxACitHTlVMSUJfSU1BWEFCUyA9IEBHTlVMSUJfSU1BWEFCU0AKK0dOVUxJQl9JTUFYRElWID0gQEdOVUxJQl9JTUFYRElWQAorR05VTElCX0lTQVRUWSA9IEBHTlVMSUJfSVNBVFRZQAorR05VTElCX0lTRklOSVRFID0gQEdOVUxJQl9JU0ZJTklURUAKK0dOVUxJQl9JU0lORiA9IEBHTlVMSUJfSVNJTkZACitHTlVMSUJfSVNOQU4gPSBAR05VTElCX0lTTkFOQAorR05VTElCX0lTTkFORCA9IEBHTlVMSUJfSVNOQU5EQAorR05VTElCX0lTTkFORiA9IEBHTlVMSUJfSVNOQU5GQAorR05VTElCX0lTTkFOTCA9IEBHTlVMSUJfSVNOQU5MQAorR05VTElCX0lTV0JMQU5LID0gQEdOVUxJQl9JU1dCTEFOS0AKK0dOVUxJQl9JU1dDVFlQRSA9IEBHTlVMSUJfSVNXQ1RZUEVACitHTlVMSUJfTENITU9EID0gQEdOVUxJQl9MQ0hNT0RACitHTlVMSUJfTENIT1dOID0gQEdOVUxJQl9MQ0hPV05ACitHTlVMSUJfTERFWFBGID0gQEdOVUxJQl9MREVYUEZACitHTlVMSUJfTERFWFBMID0gQEdOVUxJQl9MREVYUExACitHTlVMSUJfTElOSyA9IEBHTlVMSUJfTElOS0AKK0dOVUxJQl9MSU5LQVQgPSBAR05VTElCX0xJTktBVEAKK0dOVUxJQl9MT0cgPSBAR05VTElCX0xPR0AKK0dOVUxJQl9MT0cxMCA9IEBHTlVMSUJfTE9HMTBACitHTlVMSUJfTE9HMTBGID0gQEdOVUxJQl9MT0cxMEZACitHTlVMSUJfTE9HMTBMID0gQEdOVUxJQl9MT0cxMExACitHTlVMSUJfTE9HMVAgPSBAR05VTElCX0xPRzFQQAorR05VTElCX0xPRzFQRiA9IEBHTlVMSUJfTE9HMVBGQAorR05VTElCX0xPRzFQTCA9IEBHTlVMSUJfTE9HMVBMQAorR05VTElCX0xPRzIgPSBAR05VTElCX0xPRzJACitHTlVMSUJfTE9HMkYgPSBAR05VTElCX0xPRzJGQAorR05VTElCX0xPRzJMID0gQEdOVUxJQl9MT0cyTEAKK0dOVUxJQl9MT0dCID0gQEdOVUxJQl9MT0dCQAorR05VTElCX0xPR0JGID0gQEdOVUxJQl9MT0dCRkAKK0dOVUxJQl9MT0dCTCA9IEBHTlVMSUJfTE9HQkxACitHTlVMSUJfTE9HRiA9IEBHTlVMSUJfTE9HRkAKK0dOVUxJQl9MT0dMID0gQEdOVUxJQl9MT0dMQAorR05VTElCX0xTRUVLID0gQEdOVUxJQl9MU0VFS0AKK0dOVUxJQl9MU1RBVCA9IEBHTlVMSUJfTFNUQVRACitHTlVMSUJfTUFMTE9DX1BPU0lYID0gQEdOVUxJQl9NQUxMT0NfUE9TSVhACitHTlVMSUJfTUJSTEVOID0gQEdOVUxJQl9NQlJMRU5ACitHTlVMSUJfTUJSVE9XQyA9IEBHTlVMSUJfTUJSVE9XQ0AKK0dOVUxJQl9NQlNDQVNFQ01QID0gQEdOVUxJQl9NQlNDQVNFQ01QQAorR05VTElCX01CU0NBU0VTVFIgPSBAR05VTElCX01CU0NBU0VTVFJACitHTlVMSUJfTUJTQ0hSID0gQEdOVUxJQl9NQlNDSFJACitHTlVMSUJfTUJTQ1NQTiA9IEBHTlVMSUJfTUJTQ1NQTkAKK0dOVUxJQl9NQlNJTklUID0gQEdOVUxJQl9NQlNJTklUQAorR05VTElCX01CU0xFTiA9IEBHTlVMSUJfTUJTTEVOQAorR05VTElCX01CU05DQVNFQ01QID0gQEdOVUxJQl9NQlNOQ0FTRUNNUEAKK0dOVUxJQl9NQlNOTEVOID0gQEdOVUxJQl9NQlNOTEVOQAorR05VTElCX01CU05SVE9XQ1MgPSBAR05VTElCX01CU05SVE9XQ1NACitHTlVMSUJfTUJTUEJSSyA9IEBHTlVMSUJfTUJTUEJSS0AKK0dOVUxJQl9NQlNQQ0FTRUNNUCA9IEBHTlVMSUJfTUJTUENBU0VDTVBACitHTlVMSUJfTUJTUkNIUiA9IEBHTlVMSUJfTUJTUkNIUkAKK0dOVUxJQl9NQlNSVE9XQ1MgPSBAR05VTElCX01CU1JUT1dDU0AKK0dOVUxJQl9NQlNTRVAgPSBAR05VTElCX01CU1NFUEAKK0dOVUxJQl9NQlNTUE4gPSBAR05VTElCX01CU1NQTkAKK0dOVUxJQl9NQlNTVFIgPSBAR05VTElCX01CU1NUUkAKK0dOVUxJQl9NQlNUT0tfUiA9IEBHTlVMSUJfTUJTVE9LX1JACitHTlVMSUJfTUJUT1dDID0gQEdOVUxJQl9NQlRPV0NACitHTlVMSUJfTUVNQ0hSID0gQEdOVUxJQl9NRU1DSFJACitHTlVMSUJfTUVNTUVNID0gQEdOVUxJQl9NRU1NRU1ACitHTlVMSUJfTUVNUENQWSA9IEBHTlVMSUJfTUVNUENQWUAKK0dOVUxJQl9NRU1SQ0hSID0gQEdOVUxJQl9NRU1SQ0hSQAorR05VTElCX01LRElSQVQgPSBAR05VTElCX01LRElSQVRACitHTlVMSUJfTUtEVEVNUCA9IEBHTlVMSUJfTUtEVEVNUEAKK0dOVUxJQl9NS0ZJRk8gPSBAR05VTElCX01LRklGT0AKK0dOVUxJQl9NS0ZJRk9BVCA9IEBHTlVMSUJfTUtGSUZPQVRACitHTlVMSUJfTUtOT0QgPSBAR05VTElCX01LTk9EQAorR05VTElCX01LTk9EQVQgPSBAR05VTElCX01LTk9EQVRACitHTlVMSUJfTUtPU1RFTVAgPSBAR05VTElCX01LT1NURU1QQAorR05VTElCX01LT1NURU1QUyA9IEBHTlVMSUJfTUtPU1RFTVBTQAorR05VTElCX01LU1RFTVAgPSBAR05VTElCX01LU1RFTVBACitHTlVMSUJfTUtTVEVNUFMgPSBAR05VTElCX01LU1RFTVBTQAorR05VTElCX01LVElNRSA9IEBHTlVMSUJfTUtUSU1FQAorR05VTElCX01PREYgPSBAR05VTElCX01PREZACitHTlVMSUJfTU9ERkYgPSBAR05VTElCX01PREZGQAorR05VTElCX01PREZMID0gQEdOVUxJQl9NT0RGTEAKK0dOVUxJQl9OQU5PU0xFRVAgPSBAR05VTElCX05BTk9TTEVFUEAKK0dOVUxJQl9OT05CTE9DS0lORyA9IEBHTlVMSUJfTk9OQkxPQ0tJTkdACitHTlVMSUJfT0JTVEFDS19QUklOVEYgPSBAR05VTElCX09CU1RBQ0tfUFJJTlRGQAorR05VTElCX09CU1RBQ0tfUFJJTlRGX1BPU0lYID0gQEdOVUxJQl9PQlNUQUNLX1BSSU5URl9QT1NJWEAKK0dOVUxJQl9PUEVOID0gQEdOVUxJQl9PUEVOQAorR05VTElCX09QRU5BVCA9IEBHTlVMSUJfT1BFTkFUQAorR05VTElCX1BDTE9TRSA9IEBHTlVMSUJfUENMT1NFQAorR05VTElCX1BFUlJPUiA9IEBHTlVMSUJfUEVSUk9SQAorR05VTElCX1BJUEUgPSBAR05VTElCX1BJUEVACitHTlVMSUJfUElQRTIgPSBAR05VTElCX1BJUEUyQAorR05VTElCX1BPUEVOID0gQEdOVUxJQl9QT1BFTkAKK0dOVUxJQl9QT1NJWF9PUEVOUFQgPSBAR05VTElCX1BPU0lYX09QRU5QVEAKK0dOVUxJQl9QT1NJWF9TUEFXTiA9IEBHTlVMSUJfUE9TSVhfU1BBV05ACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0RFU1RST1kgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9ERVNUUk9ZQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRGTEFHUyA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVEZMQUdTQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRQR1JPVVAgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRQR1JPVVBACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNDSEVEUEFSQU0gPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBBUkFNQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBPTElDWSA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNDSEVEUE9MSUNZQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdERUZBVUxUID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0lHREVGQVVMVEAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0lHTUFTSyA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNJR01BU0tACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0lOSVQgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9JTklUQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRGTEFHUyA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVEZMQUdTQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRQR1JPVVAgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRQR1JPVVBACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNDSEVEUEFSQU0gPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTQ0hFRFBBUkFNQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTQ0hFRFBPTElDWSA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNDSEVEUE9MSUNZQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTSUdERUZBVUxUID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0lHREVGQVVMVEAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0lHTUFTSyA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNJR01BU0tACitHTlVMSUJfUE9TSVhfU1BBV05QID0gQEdOVUxJQl9QT1NJWF9TUEFXTlBACitHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERENMT1NFID0gQEdOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQUREQ0xPU0VACitHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDIgPSBAR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BREREVVAyQAorR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERPUEVOID0gQEdOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURET1BFTkAKK0dOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfREVTVFJPWSA9IEBHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0RFU1RST1lACitHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0lOSVQgPSBAR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19JTklUQAorR05VTElCX1BPV0YgPSBAR05VTElCX1BPV0ZACitHTlVMSUJfUFJFQUQgPSBAR05VTElCX1BSRUFEQAorR05VTElCX1BSSU5URiA9IEBHTlVMSUJfUFJJTlRGQAorR05VTElCX1BSSU5URl9QT1NJWCA9IEBHTlVMSUJfUFJJTlRGX1BPU0lYQAorR05VTElCX1BUSFJFQURfU0lHTUFTSyA9IEBHTlVMSUJfUFRIUkVBRF9TSUdNQVNLQAorR05VTElCX1BUU05BTUUgPSBAR05VTElCX1BUU05BTUVACitHTlVMSUJfUFRTTkFNRV9SID0gQEdOVUxJQl9QVFNOQU1FX1JACitHTlVMSUJfUFVUQyA9IEBHTlVMSUJfUFVUQ0AKK0dOVUxJQl9QVVRDSEFSID0gQEdOVUxJQl9QVVRDSEFSQAorR05VTElCX1BVVEVOViA9IEBHTlVMSUJfUFVURU5WQAorR05VTElCX1BVVFMgPSBAR05VTElCX1BVVFNACitHTlVMSUJfUFdSSVRFID0gQEdOVUxJQl9QV1JJVEVACitHTlVMSUJfUkFJU0UgPSBAR05VTElCX1JBSVNFQAorR05VTElCX1JBTkRPTSA9IEBHTlVMSUJfUkFORE9NQAorR05VTElCX1JBTkRPTV9SID0gQEdOVUxJQl9SQU5ET01fUkAKK0dOVUxJQl9SQVdNRU1DSFIgPSBAR05VTElCX1JBV01FTUNIUkAKK0dOVUxJQl9SRUFEID0gQEdOVUxJQl9SRUFEQAorR05VTElCX1JFQURMSU5LID0gQEdOVUxJQl9SRUFETElOS0AKK0dOVUxJQl9SRUFETElOS0FUID0gQEdOVUxJQl9SRUFETElOS0FUQAorR05VTElCX1JFQUxMT0NfUE9TSVggPSBAR05VTElCX1JFQUxMT0NfUE9TSVhACitHTlVMSUJfUkVBTFBBVEggPSBAR05VTElCX1JFQUxQQVRIQAorR05VTElCX1JFTUFJTkRFUiA9IEBHTlVMSUJfUkVNQUlOREVSQAorR05VTElCX1JFTUFJTkRFUkYgPSBAR05VTElCX1JFTUFJTkRFUkZACitHTlVMSUJfUkVNQUlOREVSTCA9IEBHTlVMSUJfUkVNQUlOREVSTEAKK0dOVUxJQl9SRU1PVkUgPSBAR05VTElCX1JFTU9WRUAKK0dOVUxJQl9SRU5BTUUgPSBAR05VTElCX1JFTkFNRUAKK0dOVUxJQl9SRU5BTUVBVCA9IEBHTlVMSUJfUkVOQU1FQVRACitHTlVMSUJfUklOVCA9IEBHTlVMSUJfUklOVEAKK0dOVUxJQl9SSU5URiA9IEBHTlVMSUJfUklOVEZACitHTlVMSUJfUklOVEwgPSBAR05VTElCX1JJTlRMQAorR05VTElCX1JNRElSID0gQEdOVUxJQl9STURJUkAKK0dOVUxJQl9ST1VORCA9IEBHTlVMSUJfUk9VTkRACitHTlVMSUJfUk9VTkRGID0gQEdOVUxJQl9ST1VOREZACitHTlVMSUJfUk9VTkRMID0gQEdOVUxJQl9ST1VORExACitHTlVMSUJfUlBNQVRDSCA9IEBHTlVMSUJfUlBNQVRDSEAKK0dOVUxJQl9TQ0FORiA9IEBHTlVMSUJfU0NBTkZACitHTlVMSUJfU0VURU5WID0gQEdOVUxJQl9TRVRFTlZACitHTlVMSUJfU0VUSE9TVE5BTUUgPSBAR05VTElCX1NFVEhPU1ROQU1FQAorR05VTElCX1NJR0FDVElPTiA9IEBHTlVMSUJfU0lHQUNUSU9OQAorR05VTElCX1NJR05BTF9IX1NJR1BJUEUgPSBAR05VTElCX1NJR05BTF9IX1NJR1BJUEVACitHTlVMSUJfU0lHTkJJVCA9IEBHTlVMSUJfU0lHTkJJVEAKK0dOVUxJQl9TSUdQUk9DTUFTSyA9IEBHTlVMSUJfU0lHUFJPQ01BU0tACitHTlVMSUJfU0lORiA9IEBHTlVMSUJfU0lORkAKK0dOVUxJQl9TSU5IRiA9IEBHTlVMSUJfU0lOSEZACitHTlVMSUJfU0lOTCA9IEBHTlVMSUJfU0lOTEAKK0dOVUxJQl9TTEVFUCA9IEBHTlVMSUJfU0xFRVBACitHTlVMSUJfU05QUklOVEYgPSBAR05VTElCX1NOUFJJTlRGQAorR05VTElCX1NQUklOVEZfUE9TSVggPSBAR05VTElCX1NQUklOVEZfUE9TSVhACitHTlVMSUJfU1FSVEYgPSBAR05VTElCX1NRUlRGQAorR05VTElCX1NRUlRMID0gQEdOVUxJQl9TUVJUTEAKK0dOVUxJQl9TVEFUID0gQEdOVUxJQl9TVEFUQAorR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkcgPSBAR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkdACitHTlVMSUJfU1RESU9fSF9TSUdQSVBFID0gQEdOVUxJQl9TVERJT19IX1NJR1BJUEVACitHTlVMSUJfU1RQQ1BZID0gQEdOVUxJQl9TVFBDUFlACitHTlVMSUJfU1RQTkNQWSA9IEBHTlVMSUJfU1RQTkNQWUAKK0dOVUxJQl9TVFJDQVNFU1RSID0gQEdOVUxJQl9TVFJDQVNFU1RSQAorR05VTElCX1NUUkNIUk5VTCA9IEBHTlVMSUJfU1RSQ0hSTlVMQAorR05VTElCX1NUUkRVUCA9IEBHTlVMSUJfU1RSRFVQQAorR05VTElCX1NUUkVSUk9SID0gQEdOVUxJQl9TVFJFUlJPUkAKK0dOVUxJQl9TVFJFUlJPUl9SID0gQEdOVUxJQl9TVFJFUlJPUl9SQAorR05VTElCX1NUUk5DQVQgPSBAR05VTElCX1NUUk5DQVRACitHTlVMSUJfU1RSTkRVUCA9IEBHTlVMSUJfU1RSTkRVUEAKK0dOVUxJQl9TVFJOTEVOID0gQEdOVUxJQl9TVFJOTEVOQAorR05VTElCX1NUUlBCUksgPSBAR05VTElCX1NUUlBCUktACitHTlVMSUJfU1RSUFRJTUUgPSBAR05VTElCX1NUUlBUSU1FQAorR05VTElCX1NUUlNFUCA9IEBHTlVMSUJfU1RSU0VQQAorR05VTElCX1NUUlNJR05BTCA9IEBHTlVMSUJfU1RSU0lHTkFMQAorR05VTElCX1NUUlNUUiA9IEBHTlVMSUJfU1RSU1RSQAorR05VTElCX1NUUlRPRCA9IEBHTlVMSUJfU1RSVE9EQAorR05VTElCX1NUUlRPSU1BWCA9IEBHTlVMSUJfU1RSVE9JTUFYQAorR05VTElCX1NUUlRPS19SID0gQEdOVUxJQl9TVFJUT0tfUkAKK0dOVUxJQl9TVFJUT0xMID0gQEdOVUxJQl9TVFJUT0xMQAorR05VTElCX1NUUlRPVUxMID0gQEdOVUxJQl9TVFJUT1VMTEAKK0dOVUxJQl9TVFJUT1VNQVggPSBAR05VTElCX1NUUlRPVU1BWEAKK0dOVUxJQl9TVFJWRVJTQ01QID0gQEdOVUxJQl9TVFJWRVJTQ01QQAorR05VTElCX1NZTUxJTksgPSBAR05VTElCX1NZTUxJTktACitHTlVMSUJfU1lNTElOS0FUID0gQEdOVUxJQl9TWU1MSU5LQVRACitHTlVMSUJfU1lTVEVNX1BPU0lYID0gQEdOVUxJQl9TWVNURU1fUE9TSVhACitHTlVMSUJfVEFORiA9IEBHTlVMSUJfVEFORkAKK0dOVUxJQl9UQU5IRiA9IEBHTlVMSUJfVEFOSEZACitHTlVMSUJfVEFOTCA9IEBHTlVMSUJfVEFOTEAKK0dOVUxJQl9USU1FR00gPSBAR05VTElCX1RJTUVHTUAKK0dOVUxJQl9USU1FX1IgPSBAR05VTElCX1RJTUVfUkAKK0dOVUxJQl9UTVBGSUxFID0gQEdOVUxJQl9UTVBGSUxFQAorR05VTElCX1RPV0NUUkFOUyA9IEBHTlVMSUJfVE9XQ1RSQU5TQAorR05VTElCX1RSVU5DID0gQEdOVUxJQl9UUlVOQ0AKK0dOVUxJQl9UUlVOQ0YgPSBAR05VTElCX1RSVU5DRkAKK0dOVUxJQl9UUlVOQ0wgPSBAR05VTElCX1RSVU5DTEAKK0dOVUxJQl9UVFlOQU1FX1IgPSBAR05VTElCX1RUWU5BTUVfUkAKK0dOVUxJQl9VTklTVERfSF9OT05CTE9DS0lORyA9IEBHTlVMSUJfVU5JU1REX0hfTk9OQkxPQ0tJTkdACitHTlVMSUJfVU5JU1REX0hfU0lHUElQRSA9IEBHTlVMSUJfVU5JU1REX0hfU0lHUElQRUAKK0dOVUxJQl9VTkxJTksgPSBAR05VTElCX1VOTElOS0AKK0dOVUxJQl9VTkxJTktBVCA9IEBHTlVMSUJfVU5MSU5LQVRACitHTlVMSUJfVU5MT0NLUFQgPSBAR05VTElCX1VOTE9DS1BUQAorR05VTElCX1VOU0VURU5WID0gQEdOVUxJQl9VTlNFVEVOVkAKK0dOVUxJQl9VU0xFRVAgPSBAR05VTElCX1VTTEVFUEAKK0dOVUxJQl9VVElNRU5TQVQgPSBAR05VTElCX1VUSU1FTlNBVEAKK0dOVUxJQl9WQVNQUklOVEYgPSBAR05VTElCX1ZBU1BSSU5URkAKK0dOVUxJQl9WRFBSSU5URiA9IEBHTlVMSUJfVkRQUklOVEZACitHTlVMSUJfVkZQUklOVEYgPSBAR05VTElCX1ZGUFJJTlRGQAorR05VTElCX1ZGUFJJTlRGX1BPU0lYID0gQEdOVUxJQl9WRlBSSU5URl9QT1NJWEAKK0dOVUxJQl9WRlNDQU5GID0gQEdOVUxJQl9WRlNDQU5GQAorR05VTElCX1ZQUklOVEYgPSBAR05VTElCX1ZQUklOVEZACitHTlVMSUJfVlBSSU5URl9QT1NJWCA9IEBHTlVMSUJfVlBSSU5URl9QT1NJWEAKK0dOVUxJQl9WU0NBTkYgPSBAR05VTElCX1ZTQ0FORkAKK0dOVUxJQl9WU05QUklOVEYgPSBAR05VTElCX1ZTTlBSSU5URkAKK0dOVUxJQl9WU1BSSU5URl9QT1NJWCA9IEBHTlVMSUJfVlNQUklOVEZfUE9TSVhACitHTlVMSUJfV0FJVFBJRCA9IEBHTlVMSUJfV0FJVFBJREAKK0dOVUxJQl9XQ1BDUFkgPSBAR05VTElCX1dDUENQWUAKK0dOVUxJQl9XQ1BOQ1BZID0gQEdOVUxJQl9XQ1BOQ1BZQAorR05VTElCX1dDUlRPTUIgPSBAR05VTElCX1dDUlRPTUJACitHTlVMSUJfV0NTQ0FTRUNNUCA9IEBHTlVMSUJfV0NTQ0FTRUNNUEAKK0dOVUxJQl9XQ1NDQVQgPSBAR05VTElCX1dDU0NBVEAKK0dOVUxJQl9XQ1NDSFIgPSBAR05VTElCX1dDU0NIUkAKK0dOVUxJQl9XQ1NDTVAgPSBAR05VTElCX1dDU0NNUEAKK0dOVUxJQl9XQ1NDT0xMID0gQEdOVUxJQl9XQ1NDT0xMQAorR05VTElCX1dDU0NQWSA9IEBHTlVMSUJfV0NTQ1BZQAorR05VTElCX1dDU0NTUE4gPSBAR05VTElCX1dDU0NTUE5ACitHTlVMSUJfV0NTRFVQID0gQEdOVUxJQl9XQ1NEVVBACitHTlVMSUJfV0NTTEVOID0gQEdOVUxJQl9XQ1NMRU5ACitHTlVMSUJfV0NTTkNBU0VDTVAgPSBAR05VTElCX1dDU05DQVNFQ01QQAorR05VTElCX1dDU05DQVQgPSBAR05VTElCX1dDU05DQVRACitHTlVMSUJfV0NTTkNNUCA9IEBHTlVMSUJfV0NTTkNNUEAKK0dOVUxJQl9XQ1NOQ1BZID0gQEdOVUxJQl9XQ1NOQ1BZQAorR05VTElCX1dDU05MRU4gPSBAR05VTElCX1dDU05MRU5ACitHTlVMSUJfV0NTTlJUT01CUyA9IEBHTlVMSUJfV0NTTlJUT01CU0AKK0dOVUxJQl9XQ1NQQlJLID0gQEdOVUxJQl9XQ1NQQlJLQAorR05VTElCX1dDU1JDSFIgPSBAR05VTElCX1dDU1JDSFJACitHTlVMSUJfV0NTUlRPTUJTID0gQEdOVUxJQl9XQ1NSVE9NQlNACitHTlVMSUJfV0NTU1BOID0gQEdOVUxJQl9XQ1NTUE5ACitHTlVMSUJfV0NTU1RSID0gQEdOVUxJQl9XQ1NTVFJACitHTlVMSUJfV0NTVE9LID0gQEdOVUxJQl9XQ1NUT0tACitHTlVMSUJfV0NTV0lEVEggPSBAR05VTElCX1dDU1dJRFRIQAorR05VTElCX1dDU1hGUk0gPSBAR05VTElCX1dDU1hGUk1ACitHTlVMSUJfV0NUT0IgPSBAR05VTElCX1dDVE9CQAorR05VTElCX1dDVE9NQiA9IEBHTlVMSUJfV0NUT01CQAorR05VTElCX1dDVFJBTlMgPSBAR05VTElCX1dDVFJBTlNACitHTlVMSUJfV0NUWVBFID0gQEdOVUxJQl9XQ1RZUEVACitHTlVMSUJfV0NXSURUSCA9IEBHTlVMSUJfV0NXSURUSEAKK0dOVUxJQl9XTUVNQ0hSID0gQEdOVUxJQl9XTUVNQ0hSQAorR05VTElCX1dNRU1DTVAgPSBAR05VTElCX1dNRU1DTVBACitHTlVMSUJfV01FTUNQWSA9IEBHTlVMSUJfV01FTUNQWUAKK0dOVUxJQl9XTUVNTU9WRSA9IEBHTlVMSUJfV01FTU1PVkVACitHTlVMSUJfV01FTVNFVCA9IEBHTlVMSUJfV01FTVNFVEAKK0dOVUxJQl9XUklURSA9IEBHTlVMSUJfV1JJVEVACitHTlVMSUJfX0VYSVQgPSBAR05VTElCX19FWElUQAorR1JFUCA9IEBHUkVQQAorSEFWRV9BQ09TRiA9IEBIQVZFX0FDT1NGQAorSEFWRV9BQ09TTCA9IEBIQVZFX0FDT1NMQAorSEFWRV9BU0lORiA9IEBIQVZFX0FTSU5GQAorSEFWRV9BU0lOTCA9IEBIQVZFX0FTSU5MQAorSEFWRV9BVEFOMkYgPSBASEFWRV9BVEFOMkZACitIQVZFX0FUQU5GID0gQEhBVkVfQVRBTkZACitIQVZFX0FUQU5MID0gQEhBVkVfQVRBTkxACitIQVZFX0FUT0xMID0gQEhBVkVfQVRPTExACitIQVZFX0JUT1dDID0gQEhBVkVfQlRPV0NACitIQVZFX0NBTk9OSUNBTElaRV9GSUxFX05BTUUgPSBASEFWRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FQAorSEFWRV9DQlJUID0gQEhBVkVfQ0JSVEAKK0hBVkVfQ0JSVEYgPSBASEFWRV9DQlJURkAKK0hBVkVfQ0JSVEwgPSBASEFWRV9DQlJUTEAKK0hBVkVfQ0hPV04gPSBASEFWRV9DSE9XTkAKK0hBVkVfQ09QWVNJR04gPSBASEFWRV9DT1BZU0lHTkAKK0hBVkVfQ09QWVNJR05MID0gQEhBVkVfQ09QWVNJR05MQAorSEFWRV9DT1NGID0gQEhBVkVfQ09TRkAKK0hBVkVfQ09TSEYgPSBASEFWRV9DT1NIRkAKK0hBVkVfQ09TTCA9IEBIQVZFX0NPU0xACitIQVZFX0RFQ0xfQUNPU0wgPSBASEFWRV9ERUNMX0FDT1NMQAorSEFWRV9ERUNMX0FTSU5MID0gQEhBVkVfREVDTF9BU0lOTEAKK0hBVkVfREVDTF9BVEFOTCA9IEBIQVZFX0RFQ0xfQVRBTkxACitIQVZFX0RFQ0xfQ0JSVEYgPSBASEFWRV9ERUNMX0NCUlRGQAorSEFWRV9ERUNMX0NCUlRMID0gQEhBVkVfREVDTF9DQlJUTEAKK0hBVkVfREVDTF9DRUlMRiA9IEBIQVZFX0RFQ0xfQ0VJTEZACitIQVZFX0RFQ0xfQ0VJTEwgPSBASEFWRV9ERUNMX0NFSUxMQAorSEFWRV9ERUNMX0NPUFlTSUdORiA9IEBIQVZFX0RFQ0xfQ09QWVNJR05GQAorSEFWRV9ERUNMX0NPU0wgPSBASEFWRV9ERUNMX0NPU0xACitIQVZFX0RFQ0xfRU5WSVJPTiA9IEBIQVZFX0RFQ0xfRU5WSVJPTkAKK0hBVkVfREVDTF9FWFAyID0gQEhBVkVfREVDTF9FWFAyQAorSEFWRV9ERUNMX0VYUDJGID0gQEhBVkVfREVDTF9FWFAyRkAKK0hBVkVfREVDTF9FWFAyTCA9IEBIQVZFX0RFQ0xfRVhQMkxACitIQVZFX0RFQ0xfRVhQTCA9IEBIQVZFX0RFQ0xfRVhQTEAKK0hBVkVfREVDTF9FWFBNMUwgPSBASEFWRV9ERUNMX0VYUE0xTEAKK0hBVkVfREVDTF9GQ0hESVIgPSBASEFWRV9ERUNMX0ZDSERJUkAKK0hBVkVfREVDTF9GREFUQVNZTkMgPSBASEFWRV9ERUNMX0ZEQVRBU1lOQ0AKK0hBVkVfREVDTF9GTE9PUkYgPSBASEFWRV9ERUNMX0ZMT09SRkAKK0hBVkVfREVDTF9GTE9PUkwgPSBASEFWRV9ERUNMX0ZMT09STEAKK0hBVkVfREVDTF9GUFVSR0UgPSBASEFWRV9ERUNMX0ZQVVJHRUAKK0hBVkVfREVDTF9GUkVYUEwgPSBASEFWRV9ERUNMX0ZSRVhQTEAKK0hBVkVfREVDTF9GU0VFS08gPSBASEFWRV9ERUNMX0ZTRUVLT0AKK0hBVkVfREVDTF9GVEVMTE8gPSBASEFWRV9ERUNMX0ZURUxMT0AKK0hBVkVfREVDTF9HRVRERUxJTSA9IEBIQVZFX0RFQ0xfR0VUREVMSU1ACitIQVZFX0RFQ0xfR0VURE9NQUlOTkFNRSA9IEBIQVZFX0RFQ0xfR0VURE9NQUlOTkFNRUAKK0hBVkVfREVDTF9HRVRMSU5FID0gQEhBVkVfREVDTF9HRVRMSU5FQAorSEFWRV9ERUNMX0dFVExPQURBVkcgPSBASEFWRV9ERUNMX0dFVExPQURBVkdACitIQVZFX0RFQ0xfR0VUTE9HSU5fUiA9IEBIQVZFX0RFQ0xfR0VUTE9HSU5fUkAKK0hBVkVfREVDTF9HRVRQQUdFU0laRSA9IEBIQVZFX0RFQ0xfR0VUUEFHRVNJWkVACitIQVZFX0RFQ0xfR0VUVVNFUlNIRUxMID0gQEhBVkVfREVDTF9HRVRVU0VSU0hFTExACitIQVZFX0RFQ0xfSU1BWEFCUyA9IEBIQVZFX0RFQ0xfSU1BWEFCU0AKK0hBVkVfREVDTF9JTUFYRElWID0gQEhBVkVfREVDTF9JTUFYRElWQAorSEFWRV9ERUNMX0xERVhQTCA9IEBIQVZFX0RFQ0xfTERFWFBMQAorSEFWRV9ERUNMX0xPQ0FMVElNRV9SID0gQEhBVkVfREVDTF9MT0NBTFRJTUVfUkAKK0hBVkVfREVDTF9MT0cxMEwgPSBASEFWRV9ERUNMX0xPRzEwTEAKK0hBVkVfREVDTF9MT0cyID0gQEhBVkVfREVDTF9MT0cyQAorSEFWRV9ERUNMX0xPRzJGID0gQEhBVkVfREVDTF9MT0cyRkAKK0hBVkVfREVDTF9MT0cyTCA9IEBIQVZFX0RFQ0xfTE9HMkxACitIQVZFX0RFQ0xfTE9HQiA9IEBIQVZFX0RFQ0xfTE9HQkAKK0hBVkVfREVDTF9MT0dMID0gQEhBVkVfREVDTF9MT0dMQAorSEFWRV9ERUNMX01FTU1FTSA9IEBIQVZFX0RFQ0xfTUVNTUVNQAorSEFWRV9ERUNMX01FTVJDSFIgPSBASEFWRV9ERUNMX01FTVJDSFJACitIQVZFX0RFQ0xfT0JTVEFDS19QUklOVEYgPSBASEFWRV9ERUNMX09CU1RBQ0tfUFJJTlRGQAorSEFWRV9ERUNMX1JFTUFJTkRFUiA9IEBIQVZFX0RFQ0xfUkVNQUlOREVSQAorSEFWRV9ERUNMX1JFTUFJTkRFUkwgPSBASEFWRV9ERUNMX1JFTUFJTkRFUkxACitIQVZFX0RFQ0xfUklOVEYgPSBASEFWRV9ERUNMX1JJTlRGQAorSEFWRV9ERUNMX1JPVU5EID0gQEhBVkVfREVDTF9ST1VOREAKK0hBVkVfREVDTF9ST1VOREYgPSBASEFWRV9ERUNMX1JPVU5ERkAKK0hBVkVfREVDTF9ST1VOREwgPSBASEFWRV9ERUNMX1JPVU5ETEAKK0hBVkVfREVDTF9TRVRFTlYgPSBASEFWRV9ERUNMX1NFVEVOVkAKK0hBVkVfREVDTF9TRVRIT1NUTkFNRSA9IEBIQVZFX0RFQ0xfU0VUSE9TVE5BTUVACitIQVZFX0RFQ0xfU0lOTCA9IEBIQVZFX0RFQ0xfU0lOTEAKK0hBVkVfREVDTF9TTlBSSU5URiA9IEBIQVZFX0RFQ0xfU05QUklOVEZACitIQVZFX0RFQ0xfU1FSVEwgPSBASEFWRV9ERUNMX1NRUlRMQAorSEFWRV9ERUNMX1NUUkRVUCA9IEBIQVZFX0RFQ0xfU1RSRFVQQAorSEFWRV9ERUNMX1NUUkVSUk9SX1IgPSBASEFWRV9ERUNMX1NUUkVSUk9SX1JACitIQVZFX0RFQ0xfU1RSTkRVUCA9IEBIQVZFX0RFQ0xfU1RSTkRVUEAKK0hBVkVfREVDTF9TVFJOTEVOID0gQEhBVkVfREVDTF9TVFJOTEVOQAorSEFWRV9ERUNMX1NUUlNJR05BTCA9IEBIQVZFX0RFQ0xfU1RSU0lHTkFMQAorSEFWRV9ERUNMX1NUUlRPSU1BWCA9IEBIQVZFX0RFQ0xfU1RSVE9JTUFYQAorSEFWRV9ERUNMX1NUUlRPS19SID0gQEhBVkVfREVDTF9TVFJUT0tfUkAKK0hBVkVfREVDTF9TVFJUT1VNQVggPSBASEFWRV9ERUNMX1NUUlRPVU1BWEAKK0hBVkVfREVDTF9UQU5MID0gQEhBVkVfREVDTF9UQU5MQAorSEFWRV9ERUNMX1RSVU5DID0gQEhBVkVfREVDTF9UUlVOQ0AKK0hBVkVfREVDTF9UUlVOQ0YgPSBASEFWRV9ERUNMX1RSVU5DRkAKK0hBVkVfREVDTF9UUlVOQ0wgPSBASEFWRV9ERUNMX1RSVU5DTEAKK0hBVkVfREVDTF9UVFlOQU1FX1IgPSBASEFWRV9ERUNMX1RUWU5BTUVfUkAKK0hBVkVfREVDTF9VTlNFVEVOViA9IEBIQVZFX0RFQ0xfVU5TRVRFTlZACitIQVZFX0RFQ0xfVlNOUFJJTlRGID0gQEhBVkVfREVDTF9WU05QUklOVEZACitIQVZFX0RFQ0xfV0NUT0IgPSBASEFWRV9ERUNMX1dDVE9CQAorSEFWRV9ERUNMX1dDV0lEVEggPSBASEFWRV9ERUNMX1dDV0lEVEhACitIQVZFX0RQUklOVEYgPSBASEFWRV9EUFJJTlRGQAorSEFWRV9EVVAyID0gQEhBVkVfRFVQMkAKK0hBVkVfRFVQMyA9IEBIQVZFX0RVUDNACitIQVZFX0VVSURBQ0NFU1MgPSBASEFWRV9FVUlEQUNDRVNTQAorSEFWRV9FWFBGID0gQEhBVkVfRVhQRkAKK0hBVkVfRVhQTCA9IEBIQVZFX0VYUExACitIQVZFX0VYUE0xID0gQEhBVkVfRVhQTTFACitIQVZFX0VYUE0xRiA9IEBIQVZFX0VYUE0xRkAKK0hBVkVfRkFCU0YgPSBASEFWRV9GQUJTRkAKK0hBVkVfRkFCU0wgPSBASEFWRV9GQUJTTEAKK0hBVkVfRkFDQ0VTU0FUID0gQEhBVkVfRkFDQ0VTU0FUQAorSEFWRV9GQ0hESVIgPSBASEFWRV9GQ0hESVJACitIQVZFX0ZDSE1PREFUID0gQEhBVkVfRkNITU9EQVRACitIQVZFX0ZDSE9XTkFUID0gQEhBVkVfRkNIT1dOQVRACitIQVZFX0ZDTlRMID0gQEhBVkVfRkNOVExACitIQVZFX0ZEQVRBU1lOQyA9IEBIQVZFX0ZEQVRBU1lOQ0AKK0hBVkVfRkVBVFVSRVNfSCA9IEBIQVZFX0ZFQVRVUkVTX0hACitIQVZFX0ZGU0wgPSBASEFWRV9GRlNMQAorSEFWRV9GRlNMTCA9IEBIQVZFX0ZGU0xMQAorSEFWRV9GTUEgPSBASEFWRV9GTUFACitIQVZFX0ZNQUYgPSBASEFWRV9GTUFGQAorSEFWRV9GTUFMID0gQEhBVkVfRk1BTEAKK0hBVkVfRk1PREYgPSBASEFWRV9GTU9ERkAKK0hBVkVfRk1PREwgPSBASEFWRV9GTU9ETEAKK0hBVkVfRlJFWFBGID0gQEhBVkVfRlJFWFBGQAorSEFWRV9GU0VFS08gPSBASEFWRV9GU0VFS09ACitIQVZFX0ZTVEFUQVQgPSBASEFWRV9GU1RBVEFUQAorSEFWRV9GU1lOQyA9IEBIQVZFX0ZTWU5DQAorSEFWRV9GVEVMTE8gPSBASEFWRV9GVEVMTE9ACitIQVZFX0ZUUlVOQ0FURSA9IEBIQVZFX0ZUUlVOQ0FURUAKK0hBVkVfRlVUSU1FTlMgPSBASEFWRV9GVVRJTUVOU0AKK0hBVkVfR0NKX0MgPSBASEFWRV9HQ0pfQ0AKK0hBVkVfR0NKX0lOX1BBVEggPSBASEFWRV9HQ0pfSU5fUEFUSEAKK0hBVkVfR0VURFRBQkxFU0laRSA9IEBIQVZFX0dFVERUQUJMRVNJWkVACitIQVZFX0dFVEdST1VQUyA9IEBIQVZFX0dFVEdST1VQU0AKK0hBVkVfR0VUSE9TVE5BTUUgPSBASEFWRV9HRVRIT1NUTkFNRUAKK0hBVkVfR0VUTE9HSU4gPSBASEFWRV9HRVRMT0dJTkAKK0hBVkVfR0VUT1BUX0ggPSBASEFWRV9HRVRPUFRfSEAKK0hBVkVfR0VUUEFHRVNJWkUgPSBASEFWRV9HRVRQQUdFU0laRUAKK0hBVkVfR0VUU1VCT1BUID0gQEhBVkVfR0VUU1VCT1BUQAorSEFWRV9HSUogPSBASEFWRV9HSUpACitIQVZFX0dJSl9JTl9QQVRIID0gQEhBVkVfR0lKX0lOX1BBVEhACitIQVZFX0dSQU5UUFQgPSBASEFWRV9HUkFOVFBUQAorSEFWRV9HUk9VUF9NRU1CRVIgPSBASEFWRV9HUk9VUF9NRU1CRVJACitIQVZFX0hZUE9URiA9IEBIQVZFX0hZUE9URkAKK0hBVkVfSFlQT1RMID0gQEhBVkVfSFlQT1RMQAorSEFWRV9JTE9HQiA9IEBIQVZFX0lMT0dCQAorSEFWRV9JTE9HQkYgPSBASEFWRV9JTE9HQkZACitIQVZFX0lMT0dCTCA9IEBIQVZFX0lMT0dCTEAKK0hBVkVfSU5UVFlQRVNfSCA9IEBIQVZFX0lOVFRZUEVTX0hACitIQVZFX0lTTkFORCA9IEBIQVZFX0lTTkFOREAKK0hBVkVfSVNOQU5GID0gQEhBVkVfSVNOQU5GQAorSEFWRV9JU05BTkwgPSBASEFWRV9JU05BTkxACitIQVZFX0lTV0JMQU5LID0gQEhBVkVfSVNXQkxBTktACitIQVZFX0lTV0NOVFJMID0gQEhBVkVfSVNXQ05UUkxACitIQVZFX0pBVkEgPSBASEFWRV9KQVZBQAorSEFWRV9KQVZBQyA9IEBIQVZFX0pBVkFDQAorSEFWRV9KQVZBQ19FTlZWQVIgPSBASEFWRV9KQVZBQ19FTlZWQVJACitIQVZFX0pBVkFDX0lOX1BBVEggPSBASEFWRV9KQVZBQ19JTl9QQVRIQAorSEFWRV9KQVZBX0VOVlZBUiA9IEBIQVZFX0pBVkFfRU5WVkFSQAorSEFWRV9KQVZBX0lOX1BBVEggPSBASEFWRV9KQVZBX0lOX1BBVEhACitIQVZFX0pJS0VTID0gQEhBVkVfSklLRVNACitIQVZFX0pJS0VTX0lOX1BBVEggPSBASEFWRV9KSUtFU19JTl9QQVRIQAorSEFWRV9KUkUgPSBASEFWRV9KUkVACitIQVZFX0pSRV9JTl9QQVRIID0gQEhBVkVfSlJFX0lOX1BBVEhACitIQVZFX0pWSUVXID0gQEhBVkVfSlZJRVdACitIQVZFX0pWSUVXX0lOX1BBVEggPSBASEFWRV9KVklFV19JTl9QQVRIQAorSEFWRV9MQ0hNT0QgPSBASEFWRV9MQ0hNT0RACitIQVZFX0xDSE9XTiA9IEBIQVZFX0xDSE9XTkAKK0hBVkVfTERFWFBGID0gQEhBVkVfTERFWFBGQAorSEFWRV9MSU5LID0gQEhBVkVfTElOS0AKK0hBVkVfTElOS0FUID0gQEhBVkVfTElOS0FUQAorSEFWRV9MT0cxMEYgPSBASEFWRV9MT0cxMEZACitIQVZFX0xPRzEwTCA9IEBIQVZFX0xPRzEwTEAKK0hBVkVfTE9HMVAgPSBASEFWRV9MT0cxUEAKK0hBVkVfTE9HMVBGID0gQEhBVkVfTE9HMVBGQAorSEFWRV9MT0cxUEwgPSBASEFWRV9MT0cxUExACitIQVZFX0xPR0JGID0gQEhBVkVfTE9HQkZACitIQVZFX0xPR0JMID0gQEhBVkVfTE9HQkxACitIQVZFX0xPR0YgPSBASEFWRV9MT0dGQAorSEFWRV9MT0dMID0gQEhBVkVfTE9HTEAKK0hBVkVfTE9OR19MT05HX0lOVCA9IEBIQVZFX0xPTkdfTE9OR19JTlRACitIQVZFX0xTVEFUID0gQEhBVkVfTFNUQVRACitIQVZFX01CUkxFTiA9IEBIQVZFX01CUkxFTkAKK0hBVkVfTUJSVE9XQyA9IEBIQVZFX01CUlRPV0NACitIQVZFX01CU0lOSVQgPSBASEFWRV9NQlNJTklUQAorSEFWRV9NQlNMRU4gPSBASEFWRV9NQlNMRU5ACitIQVZFX01CU05SVE9XQ1MgPSBASEFWRV9NQlNOUlRPV0NTQAorSEFWRV9NQlNSVE9XQ1MgPSBASEFWRV9NQlNSVE9XQ1NACitIQVZFX01FTUNIUiA9IEBIQVZFX01FTUNIUkAKK0hBVkVfTUVNUENQWSA9IEBIQVZFX01FTVBDUFlACitIQVZFX01LRElSQVQgPSBASEFWRV9NS0RJUkFUQAorSEFWRV9NS0RURU1QID0gQEhBVkVfTUtEVEVNUEAKK0hBVkVfTUtGSUZPID0gQEhBVkVfTUtGSUZPQAorSEFWRV9NS0ZJRk9BVCA9IEBIQVZFX01LRklGT0FUQAorSEFWRV9NS05PRCA9IEBIQVZFX01LTk9EQAorSEFWRV9NS05PREFUID0gQEhBVkVfTUtOT0RBVEAKK0hBVkVfTUtPU1RFTVAgPSBASEFWRV9NS09TVEVNUEAKK0hBVkVfTUtPU1RFTVBTID0gQEhBVkVfTUtPU1RFTVBTQAorSEFWRV9NS1NURU1QID0gQEhBVkVfTUtTVEVNUEAKK0hBVkVfTUtTVEVNUFMgPSBASEFWRV9NS1NURU1QU0AKK0hBVkVfTU9ERkYgPSBASEFWRV9NT0RGRkAKK0hBVkVfTU9ERkwgPSBASEFWRV9NT0RGTEAKK0hBVkVfTVNWQ19JTlZBTElEX1BBUkFNRVRFUl9IQU5ETEVSID0gQEhBVkVfTVNWQ19JTlZBTElEX1BBUkFNRVRFUl9IQU5ETEVSQAorSEFWRV9OQU5PU0xFRVAgPSBASEFWRV9OQU5PU0xFRVBACitIQVZFX09QRU5BVCA9IEBIQVZFX09QRU5BVEAKK0hBVkVfT1NfSCA9IEBIQVZFX09TX0hACitIQVZFX1BDTE9TRSA9IEBIQVZFX1BDTE9TRUAKK0hBVkVfUElQRSA9IEBIQVZFX1BJUEVACitIQVZFX1BJUEUyID0gQEhBVkVfUElQRTJACitIQVZFX1BPUEVOID0gQEhBVkVfUE9QRU5ACitIQVZFX1BPU0lYX09QRU5QVCA9IEBIQVZFX1BPU0lYX09QRU5QVEAKK0hBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkcgPSBASEFWRV9QT1NJWF9TSUdOQUxCTE9DS0lOR0AKK0hBVkVfUE9TSVhfU1BBV04gPSBASEFWRV9QT1NJWF9TUEFXTkAKK0hBVkVfUE9TSVhfU1BBV05BVFRSX1QgPSBASEFWRV9QT1NJWF9TUEFXTkFUVFJfVEAKK0hBVkVfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX1QgPSBASEFWRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfVEAKK0hBVkVfUE9XRiA9IEBIQVZFX1BPV0ZACitIQVZFX1BSRUFEID0gQEhBVkVfUFJFQURACitIQVZFX1BUSFJFQURfU0lHTUFTSyA9IEBIQVZFX1BUSFJFQURfU0lHTUFTS0AKK0hBVkVfUFRTTkFNRSA9IEBIQVZFX1BUU05BTUVACitIQVZFX1BUU05BTUVfUiA9IEBIQVZFX1BUU05BTUVfUkAKK0hBVkVfUFdSSVRFID0gQEhBVkVfUFdSSVRFQAorSEFWRV9SQUlTRSA9IEBIQVZFX1JBSVNFQAorSEFWRV9SQU5ET00gPSBASEFWRV9SQU5ET01ACitIQVZFX1JBTkRPTV9IID0gQEhBVkVfUkFORE9NX0hACitIQVZFX1JBTkRPTV9SID0gQEhBVkVfUkFORE9NX1JACitIQVZFX1JBV01FTUNIUiA9IEBIQVZFX1JBV01FTUNIUkAKK0hBVkVfUkVBRExJTksgPSBASEFWRV9SRUFETElOS0AKK0hBVkVfUkVBRExJTktBVCA9IEBIQVZFX1JFQURMSU5LQVRACitIQVZFX1JFQUxQQVRIID0gQEhBVkVfUkVBTFBBVEhACitIQVZFX1JFTUFJTkRFUiA9IEBIQVZFX1JFTUFJTkRFUkAKK0hBVkVfUkVNQUlOREVSRiA9IEBIQVZFX1JFTUFJTkRFUkZACitIQVZFX1JFTkFNRUFUID0gQEhBVkVfUkVOQU1FQVRACitIQVZFX1JJTlQgPSBASEFWRV9SSU5UQAorSEFWRV9SSU5UTCA9IEBIQVZFX1JJTlRMQAorSEFWRV9SUE1BVENIID0gQEhBVkVfUlBNQVRDSEAKK0hBVkVfU0FNRV9MT05HX0RPVUJMRV9BU19ET1VCTEUgPSBASEFWRV9TQU1FX0xPTkdfRE9VQkxFX0FTX0RPVUJMRUAKK0hBVkVfU0NIRURfSCA9IEBIQVZFX1NDSEVEX0hACitIQVZFX1NFVEVOViA9IEBIQVZFX1NFVEVOVkAKK0hBVkVfU0VUSE9TVE5BTUUgPSBASEFWRV9TRVRIT1NUTkFNRUAKK0hBVkVfU0lHQUNUSU9OID0gQEhBVkVfU0lHQUNUSU9OQAorSEFWRV9TSUdIQU5ETEVSX1QgPSBASEFWRV9TSUdIQU5ETEVSX1RACitIQVZFX1NJR0lORk9fVCA9IEBIQVZFX1NJR0lORk9fVEAKK0hBVkVfU0lHTkVEX1NJR19BVE9NSUNfVCA9IEBIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1RACitIQVZFX1NJR05FRF9XQ0hBUl9UID0gQEhBVkVfU0lHTkVEX1dDSEFSX1RACitIQVZFX1NJR05FRF9XSU5UX1QgPSBASEFWRV9TSUdORURfV0lOVF9UQAorSEFWRV9TSUdTRVRfVCA9IEBIQVZFX1NJR1NFVF9UQAorSEFWRV9TSU5GID0gQEhBVkVfU0lORkAKK0hBVkVfU0lOSEYgPSBASEFWRV9TSU5IRkAKK0hBVkVfU0lOTCA9IEBIQVZFX1NJTkxACitIQVZFX1NMRUVQID0gQEhBVkVfU0xFRVBACitIQVZFX1NQQVdOX0ggPSBASEFWRV9TUEFXTl9IQAorSEFWRV9TUVJURiA9IEBIQVZFX1NRUlRGQAorSEFWRV9TUVJUTCA9IEBIQVZFX1NRUlRMQAorSEFWRV9TVERJTlRfSCA9IEBIQVZFX1NURElOVF9IQAorSEFWRV9TVFBDUFkgPSBASEFWRV9TVFBDUFlACitIQVZFX1NUUE5DUFkgPSBASEFWRV9TVFBOQ1BZQAorSEFWRV9TVFJDQVNFU1RSID0gQEhBVkVfU1RSQ0FTRVNUUkAKK0hBVkVfU1RSQ0hSTlVMID0gQEhBVkVfU1RSQ0hSTlVMQAorSEFWRV9TVFJQQlJLID0gQEhBVkVfU1RSUEJSS0AKK0hBVkVfU1RSUFRJTUUgPSBASEFWRV9TVFJQVElNRUAKK0hBVkVfU1RSU0VQID0gQEhBVkVfU1RSU0VQQAorSEFWRV9TVFJUT0QgPSBASEFWRV9TVFJUT0RACitIQVZFX1NUUlRPTEwgPSBASEFWRV9TVFJUT0xMQAorSEFWRV9TVFJUT1VMTCA9IEBIQVZFX1NUUlRPVUxMQAorSEFWRV9TVFJVQ1RfUkFORE9NX0RBVEEgPSBASEFWRV9TVFJVQ1RfUkFORE9NX0RBVEFACitIQVZFX1NUUlVDVF9TQ0hFRF9QQVJBTSA9IEBIQVZFX1NUUlVDVF9TQ0hFRF9QQVJBTUAKK0hBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT04gPSBASEFWRV9TVFJVQ1RfU0lHQUNUSU9OX1NBX1NJR0FDVElPTkAKK0hBVkVfU1RSVkVSU0NNUCA9IEBIQVZFX1NUUlZFUlNDTVBACitIQVZFX1NZTUxJTksgPSBASEFWRV9TWU1MSU5LQAorSEFWRV9TWU1MSU5LQVQgPSBASEFWRV9TWU1MSU5LQVRACitIQVZFX1NZU19CSVRZUEVTX0ggPSBASEFWRV9TWVNfQklUWVBFU19IQAorSEFWRV9TWVNfSU5UVFlQRVNfSCA9IEBIQVZFX1NZU19JTlRUWVBFU19IQAorSEFWRV9TWVNfTE9BREFWR19IID0gQEhBVkVfU1lTX0xPQURBVkdfSEAKK0hBVkVfU1lTX1BBUkFNX0ggPSBASEFWRV9TWVNfUEFSQU1fSEAKK0hBVkVfU1lTX1RZUEVTX0ggPSBASEFWRV9TWVNfVFlQRVNfSEAKK0hBVkVfVEFORiA9IEBIQVZFX1RBTkZACitIQVZFX1RBTkhGID0gQEhBVkVfVEFOSEZACitIQVZFX1RBTkwgPSBASEFWRV9UQU5MQAorSEFWRV9USU1FR00gPSBASEFWRV9USU1FR01ACitIQVZFX1RZUEVfVk9MQVRJTEVfU0lHX0FUT01JQ19UID0gQEhBVkVfVFlQRV9WT0xBVElMRV9TSUdfQVRPTUlDX1RACitIQVZFX1VOSVNURF9IID0gQEhBVkVfVU5JU1REX0hACitIQVZFX1VOTElOS0FUID0gQEhBVkVfVU5MSU5LQVRACitIQVZFX1VOTE9DS1BUID0gQEhBVkVfVU5MT0NLUFRACitIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQgPSBASEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UQAorSEFWRV9VU0xFRVAgPSBASEFWRV9VU0xFRVBACitIQVZFX1VUSU1FTlNBVCA9IEBIQVZFX1VUSU1FTlNBVEAKK0hBVkVfVkFTUFJJTlRGID0gQEhBVkVfVkFTUFJJTlRGQAorSEFWRV9WRFBSSU5URiA9IEBIQVZFX1ZEUFJJTlRGQAorSEFWRV9XQ0hBUl9IID0gQEhBVkVfV0NIQVJfSEAKK0hBVkVfV0NIQVJfVCA9IEBIQVZFX1dDSEFSX1RACitIQVZFX1dDUENQWSA9IEBIQVZFX1dDUENQWUAKK0hBVkVfV0NQTkNQWSA9IEBIQVZFX1dDUE5DUFlACitIQVZFX1dDUlRPTUIgPSBASEFWRV9XQ1JUT01CQAorSEFWRV9XQ1NDQVNFQ01QID0gQEhBVkVfV0NTQ0FTRUNNUEAKK0hBVkVfV0NTQ0FUID0gQEhBVkVfV0NTQ0FUQAorSEFWRV9XQ1NDSFIgPSBASEFWRV9XQ1NDSFJACitIQVZFX1dDU0NNUCA9IEBIQVZFX1dDU0NNUEAKK0hBVkVfV0NTQ09MTCA9IEBIQVZFX1dDU0NPTExACitIQVZFX1dDU0NQWSA9IEBIQVZFX1dDU0NQWUAKK0hBVkVfV0NTQ1NQTiA9IEBIQVZFX1dDU0NTUE5ACitIQVZFX1dDU0RVUCA9IEBIQVZFX1dDU0RVUEAKK0hBVkVfV0NTTEVOID0gQEhBVkVfV0NTTEVOQAorSEFWRV9XQ1NOQ0FTRUNNUCA9IEBIQVZFX1dDU05DQVNFQ01QQAorSEFWRV9XQ1NOQ0FUID0gQEhBVkVfV0NTTkNBVEAKK0hBVkVfV0NTTkNNUCA9IEBIQVZFX1dDU05DTVBACitIQVZFX1dDU05DUFkgPSBASEFWRV9XQ1NOQ1BZQAorSEFWRV9XQ1NOTEVOID0gQEhBVkVfV0NTTkxFTkAKK0hBVkVfV0NTTlJUT01CUyA9IEBIQVZFX1dDU05SVE9NQlNACitIQVZFX1dDU1BCUksgPSBASEFWRV9XQ1NQQlJLQAorSEFWRV9XQ1NSQ0hSID0gQEhBVkVfV0NTUkNIUkAKK0hBVkVfV0NTUlRPTUJTID0gQEhBVkVfV0NTUlRPTUJTQAorSEFWRV9XQ1NTUE4gPSBASEFWRV9XQ1NTUE5ACitIQVZFX1dDU1NUUiA9IEBIQVZFX1dDU1NUUkAKK0hBVkVfV0NTVE9LID0gQEhBVkVfV0NTVE9LQAorSEFWRV9XQ1NXSURUSCA9IEBIQVZFX1dDU1dJRFRIQAorSEFWRV9XQ1NYRlJNID0gQEhBVkVfV0NTWEZSTUAKK0hBVkVfV0NUUkFOU19UID0gQEhBVkVfV0NUUkFOU19UQAorSEFWRV9XQ1RZUEVfSCA9IEBIQVZFX1dDVFlQRV9IQAorSEFWRV9XQ1RZUEVfVCA9IEBIQVZFX1dDVFlQRV9UQAorSEFWRV9XSU5TT0NLMl9IID0gQEhBVkVfV0lOU09DSzJfSEAKK0hBVkVfV0lOVF9UID0gQEhBVkVfV0lOVF9UQAorSEFWRV9XTUVNQ0hSID0gQEhBVkVfV01FTUNIUkAKK0hBVkVfV01FTUNNUCA9IEBIQVZFX1dNRU1DTVBACitIQVZFX1dNRU1DUFkgPSBASEFWRV9XTUVNQ1BZQAorSEFWRV9XTUVNTU9WRSA9IEBIQVZFX1dNRU1NT1ZFQAorSEFWRV9XTUVNU0VUID0gQEhBVkVfV01FTVNFVEAKK0hBVkVfX0JPT0wgPSBASEFWRV9fQk9PTEAKK0hBVkVfX0VYSVQgPSBASEFWRV9fRVhJVEAKK0hFTFAyTUFOID0gQEhFTFAyTUFOQAorSU5DTFVERV9ORVhUID0gQElOQ0xVREVfTkVYVEAKK0lOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkUgPSBASU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRUAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UMzJfTUFYX0xUX0lOVE1BWF9NQVggPSBASU5UMzJfTUFYX0xUX0lOVE1BWF9NQVhACitJTlQ2NF9NQVhfRVFfTE9OR19NQVggPSBASU5UNjRfTUFYX0VRX0xPTkdfTUFYQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACitJU05BTkRfTElCTSA9IEBJU05BTkRfTElCTUAKK0lTTkFORl9MSUJNID0gQElTTkFORl9MSUJNQAorSVNOQU5MX0xJQk0gPSBASVNOQU5MX0xJQk1ACitJU05BTl9MSUJNID0gQElTTkFOX0xJQk1ACitMREVYUExfTElCTSA9IEBMREVYUExfTElCTUAKK0xERVhQX0xJQk0gPSBATERFWFBfTElCTUAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xFWCA9IEBMRVhACitMRVhMSUIgPSBATEVYTElCQAorTEVYX0lTX0ZMRVggPSBATEVYX0lTX0ZMRVhACitMRVhfT1VUUFVUX1JPT1QgPSBATEVYX09VVFBVVF9ST09UQAorTElCQklTT05fTElCREVQUyA9IEBMSUJCSVNPTl9MSUJERVBTQAorTElCQklTT05fTFRMSUJERVBTID0gQExJQkJJU09OX0xUTElCREVQU0AKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCTVVMVElUSFJFQUQgPSBATElCTVVMVElUSFJFQURACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJQVEggPSBATElCUFRIQAorTElCUFRIX1BSRUZJWCA9IEBMSUJQVEhfUFJFRklYQAorTElCUyA9IEBMSUJTQAorTElCVEhSRUFEID0gQExJQlRIUkVBREAKK0xJQlVOSVNUUklOR19VTklUWVBFU19IID0gQExJQlVOSVNUUklOR19VTklUWVBFU19IQAorTElCVU5JU1RSSU5HX1VOSVdJRFRIX0ggPSBATElCVU5JU1RSSU5HX1VOSVdJRFRIX0hACitMT0NBTENIQVJTRVRfVEVTVFNfRU5WSVJPTk1FTlQgPSBATE9DQUxDSEFSU0VUX1RFU1RTX0VOVklST05NRU5UQAorTE9DQUxFX0ZSX1VURjggPSBATE9DQUxFX0ZSX1VURjhACitMT0NBTEVfSkEgPSBATE9DQUxFX0pBQAorTE9DQUxFX1pIX0NOID0gQExPQ0FMRV9aSF9DTkAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk1VTFRJVEhSRUFEID0gQExUTElCTVVMVElUSFJFQURACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTFRMSUJQVEggPSBATFRMSUJQVEhACitMVExJQlRIUkVBRCA9IEBMVExJQlRIUkVBREAKK000ID0gQE00QAorTTRfREVCVUdGSUxFID0gQE00X0RFQlVHRklMRUAKK000X0dOVSA9IEBNNF9HTlVACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0VSUk5PX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRVJSTk9fSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0ZDTlRMX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRkNOVExfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0ZMT0FUX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRkxPQVRfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0dFVE9QVF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX0dFVE9QVF9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfSU5UVFlQRVNfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9JTlRUWVBFU19IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfTUFUSF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX01BVEhfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NDSEVEX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU0NIRURfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NJR05BTF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NJR05BTF9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1BBV05fSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TUEFXTl9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1REREVGX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1REREVGX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERJTlRfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERJTlRfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURElPX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RESU9fSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURExJQl9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURExJQl9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RSSU5HX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RSSU5HX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfU1RBVF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19TVEFUX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfVFlQRVNfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfVFlQRVNfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19XQUlUX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1lTX1dBSVRfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1RJTUVfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9USU1FX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9VTklTVERfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9VTklTVERfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDSEFSX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfV0NIQVJfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDVFlQRV9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDVFlQRV9IQAorTkVYVF9FUlJOT19IID0gQE5FWFRfRVJSTk9fSEAKK05FWFRfRkNOVExfSCA9IEBORVhUX0ZDTlRMX0hACitORVhUX0ZMT0FUX0ggPSBATkVYVF9GTE9BVF9IQAorTkVYVF9HRVRPUFRfSCA9IEBORVhUX0dFVE9QVF9IQAorTkVYVF9JTlRUWVBFU19IID0gQE5FWFRfSU5UVFlQRVNfSEAKK05FWFRfTUFUSF9IID0gQE5FWFRfTUFUSF9IQAorTkVYVF9TQ0hFRF9IID0gQE5FWFRfU0NIRURfSEAKK05FWFRfU0lHTkFMX0ggPSBATkVYVF9TSUdOQUxfSEAKK05FWFRfU1BBV05fSCA9IEBORVhUX1NQQVdOX0hACitORVhUX1NURERFRl9IID0gQE5FWFRfU1REREVGX0hACitORVhUX1NURElOVF9IID0gQE5FWFRfU1RESU5UX0hACitORVhUX1NURElPX0ggPSBATkVYVF9TVERJT19IQAorTkVYVF9TVERMSUJfSCA9IEBORVhUX1NURExJQl9IQAorTkVYVF9TVFJJTkdfSCA9IEBORVhUX1NUUklOR19IQAorTkVYVF9TWVNfU1RBVF9IID0gQE5FWFRfU1lTX1NUQVRfSEAKK05FWFRfU1lTX1RZUEVTX0ggPSBATkVYVF9TWVNfVFlQRVNfSEAKK05FWFRfU1lTX1dBSVRfSCA9IEBORVhUX1NZU19XQUlUX0hACitORVhUX1RJTUVfSCA9IEBORVhUX1RJTUVfSEAKK05FWFRfVU5JU1REX0ggPSBATkVYVF9VTklTVERfSEAKK05FWFRfV0NIQVJfSCA9IEBORVhUX1dDSEFSX0hACitORVhUX1dDVFlQRV9IID0gQE5FWFRfV0NUWVBFX0hACitPQkpFWFQgPSBAT0JKRVhUQAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX0NPUFlSSUdIVF9ZRUFSID0gQFBBQ0tBR0VfQ09QWVJJR0hUX1lFQVJACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMID0gQFBFUkxACitQT1NVQiA9IEBQT1NVQkAKK1BSQUdNQV9DT0xVTU5TID0gQFBSQUdNQV9DT0xVTU5TQAorUFJBR01BX1NZU1RFTV9IRUFERVIgPSBAUFJBR01BX1NZU1RFTV9IRUFERVJACitQUklQVFJfUFJFRklYID0gQFBSSVBUUl9QUkVGSVhACitQUklfTUFDUk9TX0JST0tFTiA9IEBQUklfTUFDUk9TX0JST0tFTkAKK1BUSFJFQURfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQyA9IEBQVEhSRUFEX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUNACitQVFJESUZGX1RfU1VGRklYID0gQFBUUkRJRkZfVF9TVUZGSVhACitSQU5MSUIgPSBAUkFOTElCQAorUkVQTEFDRV9CVE9XQyA9IEBSRVBMQUNFX0JUT1dDQAorUkVQTEFDRV9DQUxMT0MgPSBAUkVQTEFDRV9DQUxMT0NACitSRVBMQUNFX0NBTk9OSUNBTElaRV9GSUxFX05BTUUgPSBAUkVQTEFDRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FQAorUkVQTEFDRV9DQlJURiA9IEBSRVBMQUNFX0NCUlRGQAorUkVQTEFDRV9DQlJUTCA9IEBSRVBMQUNFX0NCUlRMQAorUkVQTEFDRV9DRUlMID0gQFJFUExBQ0VfQ0VJTEAKK1JFUExBQ0VfQ0VJTEYgPSBAUkVQTEFDRV9DRUlMRkAKK1JFUExBQ0VfQ0VJTEwgPSBAUkVQTEFDRV9DRUlMTEAKK1JFUExBQ0VfQ0hPV04gPSBAUkVQTEFDRV9DSE9XTkAKK1JFUExBQ0VfQ0xPU0UgPSBAUkVQTEFDRV9DTE9TRUAKK1JFUExBQ0VfRFBSSU5URiA9IEBSRVBMQUNFX0RQUklOVEZACitSRVBMQUNFX0RVUCA9IEBSRVBMQUNFX0RVUEAKK1JFUExBQ0VfRFVQMiA9IEBSRVBMQUNFX0RVUDJACitSRVBMQUNFX0VYUDIgPSBAUkVQTEFDRV9FWFAyQAorUkVQTEFDRV9FWFAyTCA9IEBSRVBMQUNFX0VYUDJMQAorUkVQTEFDRV9FWFBNMSA9IEBSRVBMQUNFX0VYUE0xQAorUkVQTEFDRV9FWFBNMUYgPSBAUkVQTEFDRV9FWFBNMUZACitSRVBMQUNFX0ZBQlNMID0gQFJFUExBQ0VfRkFCU0xACitSRVBMQUNFX0ZDSE9XTkFUID0gQFJFUExBQ0VfRkNIT1dOQVRACitSRVBMQUNFX0ZDTE9TRSA9IEBSRVBMQUNFX0ZDTE9TRUAKK1JFUExBQ0VfRkNOVEwgPSBAUkVQTEFDRV9GQ05UTEAKK1JFUExBQ0VfRkRPUEVOID0gQFJFUExBQ0VfRkRPUEVOQAorUkVQTEFDRV9GRkxVU0ggPSBAUkVQTEFDRV9GRkxVU0hACitSRVBMQUNFX0ZMT09SID0gQFJFUExBQ0VfRkxPT1JACitSRVBMQUNFX0ZMT09SRiA9IEBSRVBMQUNFX0ZMT09SRkAKK1JFUExBQ0VfRkxPT1JMID0gQFJFUExBQ0VfRkxPT1JMQAorUkVQTEFDRV9GTUEgPSBAUkVQTEFDRV9GTUFACitSRVBMQUNFX0ZNQUYgPSBAUkVQTEFDRV9GTUFGQAorUkVQTEFDRV9GTUFMID0gQFJFUExBQ0VfRk1BTEAKK1JFUExBQ0VfRk1PRCA9IEBSRVBMQUNFX0ZNT0RACitSRVBMQUNFX0ZNT0RGID0gQFJFUExBQ0VfRk1PREZACitSRVBMQUNFX0ZNT0RMID0gQFJFUExBQ0VfRk1PRExACitSRVBMQUNFX0ZPUEVOID0gQFJFUExBQ0VfRk9QRU5ACitSRVBMQUNFX0ZQUklOVEYgPSBAUkVQTEFDRV9GUFJJTlRGQAorUkVQTEFDRV9GUFVSR0UgPSBAUkVQTEFDRV9GUFVSR0VACitSRVBMQUNFX0ZSRU9QRU4gPSBAUkVQTEFDRV9GUkVPUEVOQAorUkVQTEFDRV9GUkVYUCA9IEBSRVBMQUNFX0ZSRVhQQAorUkVQTEFDRV9GUkVYUEYgPSBAUkVQTEFDRV9GUkVYUEZACitSRVBMQUNFX0ZSRVhQTCA9IEBSRVBMQUNFX0ZSRVhQTEAKK1JFUExBQ0VfRlNFRUsgPSBAUkVQTEFDRV9GU0VFS0AKK1JFUExBQ0VfRlNFRUtPID0gQFJFUExBQ0VfRlNFRUtPQAorUkVQTEFDRV9GU1RBVCA9IEBSRVBMQUNFX0ZTVEFUQAorUkVQTEFDRV9GU1RBVEFUID0gQFJFUExBQ0VfRlNUQVRBVEAKK1JFUExBQ0VfRlRFTEwgPSBAUkVQTEFDRV9GVEVMTEAKK1JFUExBQ0VfRlRFTExPID0gQFJFUExBQ0VfRlRFTExPQAorUkVQTEFDRV9GVFJVTkNBVEUgPSBAUkVQTEFDRV9GVFJVTkNBVEVACitSRVBMQUNFX0ZVVElNRU5TID0gQFJFUExBQ0VfRlVUSU1FTlNACitSRVBMQUNFX0dFVENXRCA9IEBSRVBMQUNFX0dFVENXREAKK1JFUExBQ0VfR0VUREVMSU0gPSBAUkVQTEFDRV9HRVRERUxJTUAKK1JFUExBQ0VfR0VURE9NQUlOTkFNRSA9IEBSRVBMQUNFX0dFVERPTUFJTk5BTUVACitSRVBMQUNFX0dFVEdST1VQUyA9IEBSRVBMQUNFX0dFVEdST1VQU0AKK1JFUExBQ0VfR0VUTElORSA9IEBSRVBMQUNFX0dFVExJTkVACitSRVBMQUNFX0dFVExPR0lOX1IgPSBAUkVQTEFDRV9HRVRMT0dJTl9SQAorUkVQTEFDRV9HRVRQQUdFU0laRSA9IEBSRVBMQUNFX0dFVFBBR0VTSVpFQAorUkVQTEFDRV9IVUdFX1ZBTCA9IEBSRVBMQUNFX0hVR0VfVkFMQAorUkVQTEFDRV9IWVBPVCA9IEBSRVBMQUNFX0hZUE9UQAorUkVQTEFDRV9IWVBPVEYgPSBAUkVQTEFDRV9IWVBPVEZACitSRVBMQUNFX0hZUE9UTCA9IEBSRVBMQUNFX0hZUE9UTEAKK1JFUExBQ0VfSUxPR0IgPSBAUkVQTEFDRV9JTE9HQkAKK1JFUExBQ0VfSUxPR0JGID0gQFJFUExBQ0VfSUxPR0JGQAorUkVQTEFDRV9JU0FUVFkgPSBAUkVQTEFDRV9JU0FUVFlACitSRVBMQUNFX0lTRklOSVRFID0gQFJFUExBQ0VfSVNGSU5JVEVACitSRVBMQUNFX0lTSU5GID0gQFJFUExBQ0VfSVNJTkZACitSRVBMQUNFX0lTTkFOID0gQFJFUExBQ0VfSVNOQU5ACitSRVBMQUNFX0lTV0JMQU5LID0gQFJFUExBQ0VfSVNXQkxBTktACitSRVBMQUNFX0lTV0NOVFJMID0gQFJFUExBQ0VfSVNXQ05UUkxACitSRVBMQUNFX0lUT0xEID0gQFJFUExBQ0VfSVRPTERACitSRVBMQUNFX0xDSE9XTiA9IEBSRVBMQUNFX0xDSE9XTkAKK1JFUExBQ0VfTERFWFBMID0gQFJFUExBQ0VfTERFWFBMQAorUkVQTEFDRV9MSU5LID0gQFJFUExBQ0VfTElOS0AKK1JFUExBQ0VfTElOS0FUID0gQFJFUExBQ0VfTElOS0FUQAorUkVQTEFDRV9MT0NBTFRJTUVfUiA9IEBSRVBMQUNFX0xPQ0FMVElNRV9SQAorUkVQTEFDRV9MT0cgPSBAUkVQTEFDRV9MT0dACitSRVBMQUNFX0xPRzEwID0gQFJFUExBQ0VfTE9HMTBACitSRVBMQUNFX0xPRzEwRiA9IEBSRVBMQUNFX0xPRzEwRkAKK1JFUExBQ0VfTE9HMTBMID0gQFJFUExBQ0VfTE9HMTBMQAorUkVQTEFDRV9MT0cxUCA9IEBSRVBMQUNFX0xPRzFQQAorUkVQTEFDRV9MT0cxUEYgPSBAUkVQTEFDRV9MT0cxUEZACitSRVBMQUNFX0xPRzFQTCA9IEBSRVBMQUNFX0xPRzFQTEAKK1JFUExBQ0VfTE9HMiA9IEBSRVBMQUNFX0xPRzJACitSRVBMQUNFX0xPRzJGID0gQFJFUExBQ0VfTE9HMkZACitSRVBMQUNFX0xPRzJMID0gQFJFUExBQ0VfTE9HMkxACitSRVBMQUNFX0xPR0IgPSBAUkVQTEFDRV9MT0dCQAorUkVQTEFDRV9MT0dCRiA9IEBSRVBMQUNFX0xPR0JGQAorUkVQTEFDRV9MT0dCTCA9IEBSRVBMQUNFX0xPR0JMQAorUkVQTEFDRV9MT0dGID0gQFJFUExBQ0VfTE9HRkAKK1JFUExBQ0VfTE9HTCA9IEBSRVBMQUNFX0xPR0xACitSRVBMQUNFX0xTRUVLID0gQFJFUExBQ0VfTFNFRUtACitSRVBMQUNFX0xTVEFUID0gQFJFUExBQ0VfTFNUQVRACitSRVBMQUNFX01BTExPQyA9IEBSRVBMQUNFX01BTExPQ0AKK1JFUExBQ0VfTUJSTEVOID0gQFJFUExBQ0VfTUJSTEVOQAorUkVQTEFDRV9NQlJUT1dDID0gQFJFUExBQ0VfTUJSVE9XQ0AKK1JFUExBQ0VfTUJTSU5JVCA9IEBSRVBMQUNFX01CU0lOSVRACitSRVBMQUNFX01CU05SVE9XQ1MgPSBAUkVQTEFDRV9NQlNOUlRPV0NTQAorUkVQTEFDRV9NQlNSVE9XQ1MgPSBAUkVQTEFDRV9NQlNSVE9XQ1NACitSRVBMQUNFX01CU1RBVEVfVCA9IEBSRVBMQUNFX01CU1RBVEVfVEAKK1JFUExBQ0VfTUJUT1dDID0gQFJFUExBQ0VfTUJUT1dDQAorUkVQTEFDRV9NRU1DSFIgPSBAUkVQTEFDRV9NRU1DSFJACitSRVBMQUNFX01FTU1FTSA9IEBSRVBMQUNFX01FTU1FTUAKK1JFUExBQ0VfTUtESVIgPSBAUkVQTEFDRV9NS0RJUkAKK1JFUExBQ0VfTUtGSUZPID0gQFJFUExBQ0VfTUtGSUZPQAorUkVQTEFDRV9NS05PRCA9IEBSRVBMQUNFX01LTk9EQAorUkVQTEFDRV9NS1NURU1QID0gQFJFUExBQ0VfTUtTVEVNUEAKK1JFUExBQ0VfTUtUSU1FID0gQFJFUExBQ0VfTUtUSU1FQAorUkVQTEFDRV9NT0RGID0gQFJFUExBQ0VfTU9ERkAKK1JFUExBQ0VfTU9ERkYgPSBAUkVQTEFDRV9NT0RGRkAKK1JFUExBQ0VfTU9ERkwgPSBAUkVQTEFDRV9NT0RGTEAKK1JFUExBQ0VfTkFOID0gQFJFUExBQ0VfTkFOQAorUkVQTEFDRV9OQU5PU0xFRVAgPSBAUkVQTEFDRV9OQU5PU0xFRVBACitSRVBMQUNFX05VTEwgPSBAUkVQTEFDRV9OVUxMQAorUkVQTEFDRV9PQlNUQUNLX1BSSU5URiA9IEBSRVBMQUNFX09CU1RBQ0tfUFJJTlRGQAorUkVQTEFDRV9PUEVOID0gQFJFUExBQ0VfT1BFTkAKK1JFUExBQ0VfT1BFTkFUID0gQFJFUExBQ0VfT1BFTkFUQAorUkVQTEFDRV9QRVJST1IgPSBAUkVQTEFDRV9QRVJST1JACitSRVBMQUNFX1BPUEVOID0gQFJFUExBQ0VfUE9QRU5ACitSRVBMQUNFX1BPU0lYX1NQQVdOID0gQFJFUExBQ0VfUE9TSVhfU1BBV05ACitSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRSA9IEBSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRUAKK1JFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDIgPSBAUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMkAKK1JFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU4gPSBAUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURET1BFTkAKK1JFUExBQ0VfUFJFQUQgPSBAUkVQTEFDRV9QUkVBREAKK1JFUExBQ0VfUFJJTlRGID0gQFJFUExBQ0VfUFJJTlRGQAorUkVQTEFDRV9QVEhSRUFEX1NJR01BU0sgPSBAUkVQTEFDRV9QVEhSRUFEX1NJR01BU0tACitSRVBMQUNFX1BUU05BTUUgPSBAUkVQTEFDRV9QVFNOQU1FQAorUkVQTEFDRV9QVFNOQU1FX1IgPSBAUkVQTEFDRV9QVFNOQU1FX1JACitSRVBMQUNFX1BVVEVOViA9IEBSRVBMQUNFX1BVVEVOVkAKK1JFUExBQ0VfUFdSSVRFID0gQFJFUExBQ0VfUFdSSVRFQAorUkVQTEFDRV9SQUlTRSA9IEBSRVBMQUNFX1JBSVNFQAorUkVQTEFDRV9SQU5ET01fUiA9IEBSRVBMQUNFX1JBTkRPTV9SQAorUkVQTEFDRV9SRUFEID0gQFJFUExBQ0VfUkVBREAKK1JFUExBQ0VfUkVBRExJTksgPSBAUkVQTEFDRV9SRUFETElOS0AKK1JFUExBQ0VfUkVBTExPQyA9IEBSRVBMQUNFX1JFQUxMT0NACitSRVBMQUNFX1JFQUxQQVRIID0gQFJFUExBQ0VfUkVBTFBBVEhACitSRVBMQUNFX1JFTUFJTkRFUiA9IEBSRVBMQUNFX1JFTUFJTkRFUkAKK1JFUExBQ0VfUkVNQUlOREVSRiA9IEBSRVBMQUNFX1JFTUFJTkRFUkZACitSRVBMQUNFX1JFTUFJTkRFUkwgPSBAUkVQTEFDRV9SRU1BSU5ERVJMQAorUkVQTEFDRV9SRU1PVkUgPSBAUkVQTEFDRV9SRU1PVkVACitSRVBMQUNFX1JFTkFNRSA9IEBSRVBMQUNFX1JFTkFNRUAKK1JFUExBQ0VfUkVOQU1FQVQgPSBAUkVQTEFDRV9SRU5BTUVBVEAKK1JFUExBQ0VfUk1ESVIgPSBAUkVQTEFDRV9STURJUkAKK1JFUExBQ0VfUk9VTkQgPSBAUkVQTEFDRV9ST1VOREAKK1JFUExBQ0VfUk9VTkRGID0gQFJFUExBQ0VfUk9VTkRGQAorUkVQTEFDRV9ST1VOREwgPSBAUkVQTEFDRV9ST1VORExACitSRVBMQUNFX1NFVEVOViA9IEBSRVBMQUNFX1NFVEVOVkAKK1JFUExBQ0VfU0lHTkJJVCA9IEBSRVBMQUNFX1NJR05CSVRACitSRVBMQUNFX1NJR05CSVRfVVNJTkdfR0NDID0gQFJFUExBQ0VfU0lHTkJJVF9VU0lOR19HQ0NACitSRVBMQUNFX1NMRUVQID0gQFJFUExBQ0VfU0xFRVBACitSRVBMQUNFX1NOUFJJTlRGID0gQFJFUExBQ0VfU05QUklOVEZACitSRVBMQUNFX1NQUklOVEYgPSBAUkVQTEFDRV9TUFJJTlRGQAorUkVQTEFDRV9TUVJUTCA9IEBSRVBMQUNFX1NRUlRMQAorUkVQTEFDRV9TVEFUID0gQFJFUExBQ0VfU1RBVEAKK1JFUExBQ0VfU1RESU9fUkVBRF9GVU5DUyA9IEBSRVBMQUNFX1NURElPX1JFQURfRlVOQ1NACitSRVBMQUNFX1NURElPX1dSSVRFX0ZVTkNTID0gQFJFUExBQ0VfU1RESU9fV1JJVEVfRlVOQ1NACitSRVBMQUNFX1NUUE5DUFkgPSBAUkVQTEFDRV9TVFBOQ1BZQAorUkVQTEFDRV9TVFJDQVNFU1RSID0gQFJFUExBQ0VfU1RSQ0FTRVNUUkAKK1JFUExBQ0VfU1RSQ0hSTlVMID0gQFJFUExBQ0VfU1RSQ0hSTlVMQAorUkVQTEFDRV9TVFJEVVAgPSBAUkVQTEFDRV9TVFJEVVBACitSRVBMQUNFX1NUUkVSUk9SID0gQFJFUExBQ0VfU1RSRVJST1JACitSRVBMQUNFX1NUUkVSUk9SX1IgPSBAUkVQTEFDRV9TVFJFUlJPUl9SQAorUkVQTEFDRV9TVFJOQ0FUID0gQFJFUExBQ0VfU1RSTkNBVEAKK1JFUExBQ0VfU1RSTkRVUCA9IEBSRVBMQUNFX1NUUk5EVVBACitSRVBMQUNFX1NUUk5MRU4gPSBAUkVQTEFDRV9TVFJOTEVOQAorUkVQTEFDRV9TVFJTSUdOQUwgPSBAUkVQTEFDRV9TVFJTSUdOQUxACitSRVBMQUNFX1NUUlNUUiA9IEBSRVBMQUNFX1NUUlNUUkAKK1JFUExBQ0VfU1RSVE9EID0gQFJFUExBQ0VfU1RSVE9EQAorUkVQTEFDRV9TVFJUT0lNQVggPSBAUkVQTEFDRV9TVFJUT0lNQVhACitSRVBMQUNFX1NUUlRPS19SID0gQFJFUExBQ0VfU1RSVE9LX1JACitSRVBMQUNFX1NZTUxJTksgPSBAUkVQTEFDRV9TWU1MSU5LQAorUkVQTEFDRV9USU1FR00gPSBAUkVQTEFDRV9USU1FR01ACitSRVBMQUNFX1RNUEZJTEUgPSBAUkVQTEFDRV9UTVBGSUxFQAorUkVQTEFDRV9UT1dMT1dFUiA9IEBSRVBMQUNFX1RPV0xPV0VSQAorUkVQTEFDRV9UUlVOQyA9IEBSRVBMQUNFX1RSVU5DQAorUkVQTEFDRV9UUlVOQ0YgPSBAUkVQTEFDRV9UUlVOQ0ZACitSRVBMQUNFX1RSVU5DTCA9IEBSRVBMQUNFX1RSVU5DTEAKK1JFUExBQ0VfVFRZTkFNRV9SID0gQFJFUExBQ0VfVFRZTkFNRV9SQAorUkVQTEFDRV9VTkxJTksgPSBAUkVQTEFDRV9VTkxJTktACitSRVBMQUNFX1VOTElOS0FUID0gQFJFUExBQ0VfVU5MSU5LQVRACitSRVBMQUNFX1VOU0VURU5WID0gQFJFUExBQ0VfVU5TRVRFTlZACitSRVBMQUNFX1VTTEVFUCA9IEBSRVBMQUNFX1VTTEVFUEAKK1JFUExBQ0VfVVRJTUVOU0FUID0gQFJFUExBQ0VfVVRJTUVOU0FUQAorUkVQTEFDRV9WQVNQUklOVEYgPSBAUkVQTEFDRV9WQVNQUklOVEZACitSRVBMQUNFX1ZEUFJJTlRGID0gQFJFUExBQ0VfVkRQUklOVEZACitSRVBMQUNFX1ZGUFJJTlRGID0gQFJFUExBQ0VfVkZQUklOVEZACitSRVBMQUNFX1ZQUklOVEYgPSBAUkVQTEFDRV9WUFJJTlRGQAorUkVQTEFDRV9WU05QUklOVEYgPSBAUkVQTEFDRV9WU05QUklOVEZACitSRVBMQUNFX1ZTUFJJTlRGID0gQFJFUExBQ0VfVlNQUklOVEZACitSRVBMQUNFX1dDUlRPTUIgPSBAUkVQTEFDRV9XQ1JUT01CQAorUkVQTEFDRV9XQ1NOUlRPTUJTID0gQFJFUExBQ0VfV0NTTlJUT01CU0AKK1JFUExBQ0VfV0NTUlRPTUJTID0gQFJFUExBQ0VfV0NTUlRPTUJTQAorUkVQTEFDRV9XQ1NXSURUSCA9IEBSRVBMQUNFX1dDU1dJRFRIQAorUkVQTEFDRV9XQ1RPQiA9IEBSRVBMQUNFX1dDVE9CQAorUkVQTEFDRV9XQ1RPTUIgPSBAUkVQTEFDRV9XQ1RPTUJACitSRVBMQUNFX1dDV0lEVEggPSBAUkVQTEFDRV9XQ1dJRFRIQAorUkVQTEFDRV9XUklURSA9IEBSRVBMQUNFX1dSSVRFQAorU0NIRURfSCA9IEBTQ0hFRF9IQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NJR19BVE9NSUNfVF9TVUZGSVggPSBAU0lHX0FUT01JQ19UX1NVRkZJWEAKK1NJWkVfVF9TVUZGSVggPSBAU0laRV9UX1NVRkZJWEAKK1NUREJPT0xfSCA9IEBTVERCT09MX0hACitTVERERUZfSCA9IEBTVERERUZfSEAKK1NURElOVF9IID0gQFNURElOVF9IQAorU1RSSVAgPSBAU1RSSVBACitTWVNfVElNRV9IX0RFRklORVNfU1RSVUNUX1RJTUVTUEVDID0gQFNZU19USU1FX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUNACitUSU1FX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUMgPSBAVElNRV9IX0RFRklORVNfU1RSVUNUX1RJTUVTUEVDQAorVUlOVDMyX01BWF9MVF9VSU5UTUFYX01BWCA9IEBVSU5UMzJfTUFYX0xUX1VJTlRNQVhfTUFYQAorVUlOVDY0X01BWF9FUV9VTE9OR19NQVggPSBAVUlOVDY0X01BWF9FUV9VTE9OR19NQVhACitVTkRFRklORV9TVFJUT0tfUiA9IEBVTkRFRklORV9TVFJUT0tfUkAKK1VOSVNURF9IX0hBVkVfV0lOU09DSzJfSCA9IEBVTklTVERfSF9IQVZFX1dJTlNPQ0syX0hACitVTklTVERfSF9IQVZFX1dJTlNPQ0syX0hfQU5EX1VTRV9TT0NLRVRTID0gQFVOSVNURF9IX0hBVkVfV0lOU09DSzJfSF9BTkRfVVNFX1NPQ0tFVFNACitVU0VfTkxTID0gQFVTRV9OTFNACitWQUxHUklORCA9IEBWQUxHUklOREAKK1ZBTEdSSU5EX1BSRUJJU09OID0gQFZBTEdSSU5EX1BSRUJJU09OQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0FSTl9DRkxBR1MgPSBAV0FSTl9DRkxBR1NACitXQVJOX0NGTEFHU19URVNUID0gQFdBUk5fQ0ZMQUdTX1RFU1RACitXQVJOX0NYWEZMQUdTID0gQFdBUk5fQ1hYRkxBR1NACitXQVJOX0NYWEZMQUdTX1RFU1QgPSBAV0FSTl9DWFhGTEFHU19URVNUQAorV0NIQVJfVF9TVUZGSVggPSBAV0NIQVJfVF9TVUZGSVhACitXRVJST1JfQ0ZMQUdTID0gQFdFUlJPUl9DRkxBR1NACitXRVJST1JfQ1hYRkxBR1MgPSBAV0VSUk9SX0NYWEZMQUdTQAorV0lORE9XU182NF9CSVRfT0ZGX1QgPSBAV0lORE9XU182NF9CSVRfT0ZGX1RACitXSU5ET1dTXzY0X0JJVF9TVF9TSVpFID0gQFdJTkRPV1NfNjRfQklUX1NUX1NJWkVACitXSU5UX1RfU1VGRklYID0gQFdJTlRfVF9TVUZGSVhACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1lBQ0MgPSBAWUFDQ0AKK1lBQ0NfTElCUkFSWSA9IEBZQUNDX0xJQlJBUllACitZQUNDX1NDUklQVCA9IEBZQUNDX1NDUklQVEAKK1lGTEFHUyA9IEBZRkxBR1NACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY2xvY2FsZGlyID0gQGFjbG9jYWxkaXJACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorZ2xfTElCT0JKUyA9IEBnbF9MSUJPQkpTQAorZ2xfTFRMSUJPQkpTID0gQGdsX0xUTElCT0JKU0AKK2dsdGVzdHNfTElCT0JKUyA9IEBnbHRlc3RzX0xJQk9CSlNACitnbHRlc3RzX0xUTElCT0JKUyA9IEBnbHRlc3RzX0xUTElCT0JKU0AKK2dsdGVzdHNfV0lUTkVTUyA9IEBnbHRlc3RzX1dJVE5FU1NACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xpc3BkaXIgPSBAbGlzcGRpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorQklTT04gPSAkKHRvcF9idWlsZGRpcikvdGVzdHMvYmlzb24KK0JJU09OX0lOID0gJCh0b3Bfc3JjZGlyKS90ZXN0cy9iaXNvbi5pbgorZG9jID0gJCh0b3Bfc3JjZGlyKS9kb2MvYmlzb24udGV4aQorZXh0ZXhpID0gJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9leHRleGkKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS4gLUkkKHNyY2RpcikKK0JVSUxUX1NPVVJDRVMgPSAkKGNhbGNfZXh0cmFjdGVkKSAkKGNhbGNfc291cmNlc19nZW5lcmF0ZWQpCitDTEVBTkZJTEVTID0gJChzcmNkaXIpLyoub3V0cHV0ICoudG1wCitNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9ICQoc3JjZGlyKS8qLnN0YW1wICQoQlVJTFRfU09VUkNFUykKKworIyBDb21waWxlIHRoZSBwYXJzZXIgYW5kIHNhdmUgY3ljbGVzLgorIyBUaGlzIGNvZGUgY29tZXMgZnJvbSAiSGFuZGxpbmcgVG9vbHMgdGhhdCBQcm9kdWNlIE1hbnkgT3V0cHV0cyIsCisjIGZyb20gdGhlIEF1dG9tYWtlIGRvY3VtZW50YXRpb24uCitFWFRSQV9ESVNUID0gJChzcmNkaXIpL2NhbGMrKy1wYXJzZXIuc3RhbXAgJChzcmNkaXIpL2NhbGMrKy1wYXJzZXIueXkgXAorCSQoc3JjZGlyKS9jYWxjLnN0YW1wICQoVEVTVFMpCitjYWxjX3NvdXJjZXNfZXh0cmFjdGVkID0gJChzcmNkaXIpL2NhbGMrKy1zY2FubmVyLmxsICQoc3JjZGlyKS9jYWxjKysuY2MgXAorICAkKHNyY2RpcikvY2FsYysrLWRyaXZlci5oaCAkKHNyY2RpcikvY2FsYysrLWRyaXZlci5jYworCitjYWxjX2V4dHJhY3RlZCA9ICQoY2FsY19zb3VyY2VzX2V4dHJhY3RlZCkgJChzcmNkaXIpL2NhbGMrKy1wYXJzZXIueXkKK2NhbGNfc291cmNlc19nZW5lcmF0ZWQgPSBcCisgICQoc3JjZGlyKS9zdGFjay5oaCAkKHNyY2RpcikvcG9zaXRpb24uaGggJChzcmNkaXIpL2xvY2F0aW9uLmhoIFwKKyAgJChzcmNkaXIpL2NhbGMrKy1wYXJzZXIuaGggJChzcmNkaXIpL2NhbGMrKy1wYXJzZXIuY2MKKworY2FsY19fX1NPVVJDRVMgPSAkKGNhbGNfc291cmNlc19leHRyYWN0ZWQpICQoY2FsY19zb3VyY2VzX2dlbmVyYXRlZCkKK1RFU1RTID0gdGVzdAorYWxsOiAkKEJVSUxUX1NPVVJDRVMpCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmNjIC5sbCAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ25pdHMgZXhhbXBsZXMvY2FsYysrL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ25pdHMgZXhhbXBsZXMvY2FsYysrL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworY2xlYW4tY2hlY2tQUk9HUkFNUzoKKwktdGVzdCAteiAiJChjaGVja19QUk9HUkFNUykiIHx8IHJtIC1mICQoY2hlY2tfUFJPR1JBTVMpCitjYWxjKyskKEVYRUVYVCk6ICQoY2FsY19fX09CSkVDVFMpICQoY2FsY19fX0RFUEVOREVOQ0lFUykgJChFWFRSQV9jYWxjX19fREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgY2FsYysrJChFWEVFWFQpCisJJChBTV9WX0NYWExEKSQoQ1hYTElOSykgJChjYWxjX19fT0JKRUNUUykgJChjYWxjX19fTERBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NhbGMrKy1kcml2ZXIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NhbGMrKy1wYXJzZXIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NhbGMrKy1zY2FubmVyLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jYWxjKysuUG9AYW1fX3F1b3RlQAorCisuY2MubzoKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfQ1hYKSQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFgpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDWFhERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWEBhbV9fbm9kZXBAKSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgJDwKKworLmNjLm9iajoKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfQ1hYKSQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWClzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYQGFtX19ub2RlcEApJChDWFhDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCisKK2NhbGMrKy5vOiAkKHNyY2RpcikvY2FsYysrLmNjCitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX0NYWCkkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpIC1NVCBjYWxjKysubyAtTUQgLU1QIC1NRiAkKERFUERJUikvY2FsYysrLlRwbyAtYyAtbyBjYWxjKysubyBgdGVzdCAtZiAnJChzcmNkaXIpL2NhbGMrKy5jYycgfHwgZWNobyAnJChzcmNkaXIpLydgJChzcmNkaXIpL2NhbGMrKy5jYworQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2NhbGMrKy5UcG8gJChERVBESVIpL2NhbGMrKy5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYKXNvdXJjZT0nJChzcmNkaXIpL2NhbGMrKy5jYycgb2JqZWN0PSdjYWxjKysubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDWFhERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWEBhbV9fbm9kZXBAKSQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgLWMgLW8gY2FsYysrLm8gYHRlc3QgLWYgJyQoc3JjZGlyKS9jYWxjKysuY2MnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQoc3JjZGlyKS9jYWxjKysuY2MKKworY2FsYysrLm9iajogJChzcmNkaXIpL2NhbGMrKy5jYworQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9DWFgpJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAtTVQgY2FsYysrLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvY2FsYysrLlRwbyAtYyAtbyBjYWxjKysub2JqIGBpZiB0ZXN0IC1mICckKHNyY2RpcikvY2FsYysrLmNjJzsgdGhlbiAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9jYWxjKysuY2MnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQoc3JjZGlyKS9jYWxjKysuY2MnOyBmaWAKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9jYWxjKysuVHBvICQoREVQRElSKS9jYWxjKysuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWClzb3VyY2U9JyQoc3JjZGlyKS9jYWxjKysuY2MnIG9iamVjdD0nY2FsYysrLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDWFhERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWEBhbV9fbm9kZXBAKSQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgLWMgLW8gY2FsYysrLm9iaiBgaWYgdGVzdCAtZiAnJChzcmNkaXIpL2NhbGMrKy5jYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHNyY2RpcikvY2FsYysrLmNjJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHNyY2RpcikvY2FsYysrLmNjJzsgZmlgCisKK2NhbGMrKy1kcml2ZXIubzogJChzcmNkaXIpL2NhbGMrKy1kcml2ZXIuY2MKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfQ1hYKSQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgLU1UIGNhbGMrKy1kcml2ZXIubyAtTUQgLU1QIC1NRiAkKERFUERJUikvY2FsYysrLWRyaXZlci5UcG8gLWMgLW8gY2FsYysrLWRyaXZlci5vIGB0ZXN0IC1mICckKHNyY2RpcikvY2FsYysrLWRyaXZlci5jYycgfHwgZWNobyAnJChzcmNkaXIpLydgJChzcmNkaXIpL2NhbGMrKy1kcml2ZXIuY2MKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9jYWxjKystZHJpdmVyLlRwbyAkKERFUERJUikvY2FsYysrLWRyaXZlci5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYKXNvdXJjZT0nJChzcmNkaXIpL2NhbGMrKy1kcml2ZXIuY2MnIG9iamVjdD0nY2FsYysrLWRyaXZlci5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYQGFtX19ub2RlcEApJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAtYyAtbyBjYWxjKystZHJpdmVyLm8gYHRlc3QgLWYgJyQoc3JjZGlyKS9jYWxjKystZHJpdmVyLmNjJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHNyY2RpcikvY2FsYysrLWRyaXZlci5jYworCitjYWxjKystZHJpdmVyLm9iajogJChzcmNkaXIpL2NhbGMrKy1kcml2ZXIuY2MKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfQ1hYKSQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgLU1UIGNhbGMrKy1kcml2ZXIub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9jYWxjKystZHJpdmVyLlRwbyAtYyAtbyBjYWxjKystZHJpdmVyLm9iaiBgaWYgdGVzdCAtZiAnJChzcmNkaXIpL2NhbGMrKy1kcml2ZXIuY2MnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2NhbGMrKy1kcml2ZXIuY2MnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQoc3JjZGlyKS9jYWxjKystZHJpdmVyLmNjJzsgZmlgCitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvY2FsYysrLWRyaXZlci5UcG8gJChERVBESVIpL2NhbGMrKy1kcml2ZXIuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWClzb3VyY2U9JyQoc3JjZGlyKS9jYWxjKystZHJpdmVyLmNjJyBvYmplY3Q9J2NhbGMrKy1kcml2ZXIub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYQGFtX19ub2RlcEApJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAtYyAtbyBjYWxjKystZHJpdmVyLm9iaiBgaWYgdGVzdCAtZiAnJChzcmNkaXIpL2NhbGMrKy1kcml2ZXIuY2MnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2NhbGMrKy1kcml2ZXIuY2MnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQoc3JjZGlyKS9jYWxjKystZHJpdmVyLmNjJzsgZmlgCisKK2NhbGMrKy1wYXJzZXIubzogJChzcmNkaXIpL2NhbGMrKy1wYXJzZXIuY2MKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfQ1hYKSQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgLU1UIGNhbGMrKy1wYXJzZXIubyAtTUQgLU1QIC1NRiAkKERFUERJUikvY2FsYysrLXBhcnNlci5UcG8gLWMgLW8gY2FsYysrLXBhcnNlci5vIGB0ZXN0IC1mICckKHNyY2RpcikvY2FsYysrLXBhcnNlci5jYycgfHwgZWNobyAnJChzcmNkaXIpLydgJChzcmNkaXIpL2NhbGMrKy1wYXJzZXIuY2MKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9jYWxjKystcGFyc2VyLlRwbyAkKERFUERJUikvY2FsYysrLXBhcnNlci5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYKXNvdXJjZT0nJChzcmNkaXIpL2NhbGMrKy1wYXJzZXIuY2MnIG9iamVjdD0nY2FsYysrLXBhcnNlci5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYQGFtX19ub2RlcEApJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAtYyAtbyBjYWxjKystcGFyc2VyLm8gYHRlc3QgLWYgJyQoc3JjZGlyKS9jYWxjKystcGFyc2VyLmNjJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHNyY2RpcikvY2FsYysrLXBhcnNlci5jYworCitjYWxjKystcGFyc2VyLm9iajogJChzcmNkaXIpL2NhbGMrKy1wYXJzZXIuY2MKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfQ1hYKSQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgLU1UIGNhbGMrKy1wYXJzZXIub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9jYWxjKystcGFyc2VyLlRwbyAtYyAtbyBjYWxjKystcGFyc2VyLm9iaiBgaWYgdGVzdCAtZiAnJChzcmNkaXIpL2NhbGMrKy1wYXJzZXIuY2MnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2NhbGMrKy1wYXJzZXIuY2MnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQoc3JjZGlyKS9jYWxjKystcGFyc2VyLmNjJzsgZmlgCitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvY2FsYysrLXBhcnNlci5UcG8gJChERVBESVIpL2NhbGMrKy1wYXJzZXIuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWClzb3VyY2U9JyQoc3JjZGlyKS9jYWxjKystcGFyc2VyLmNjJyBvYmplY3Q9J2NhbGMrKy1wYXJzZXIub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYQGFtX19ub2RlcEApJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAtYyAtbyBjYWxjKystcGFyc2VyLm9iaiBgaWYgdGVzdCAtZiAnJChzcmNkaXIpL2NhbGMrKy1wYXJzZXIuY2MnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2NhbGMrKy1wYXJzZXIuY2MnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQoc3JjZGlyKS9jYWxjKystcGFyc2VyLmNjJzsgZmlgCisKKy5sbC5jYzoKKwkkKEFNX1ZfTEVYKSQoYW1fX3NraXBsZXgpICQoU0hFTEwpICQoWUxXUkFQKSAkPCAkKExFWF9PVVRQVVRfUk9PVCkuYyAkQCAtLSAkKExFWENPTVBJTEUpCisKK2NhbGMrKy1zY2FubmVyLmNjOiAkKHNyY2RpcikvY2FsYysrLXNjYW5uZXIubGwKKwkkKEFNX1ZfTEVYKSBcCisJJChhbV9fc2tpcGxleCkgXAorCSQoU0hFTEwpICQoWUxXUkFQKSBgdGVzdCAtZiAnJChzcmNkaXIpL2NhbGMrKy1zY2FubmVyLmxsJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHNyY2RpcikvY2FsYysrLXNjYW5uZXIubGwgJChMRVhfT1VUUFVUX1JPT1QpLmMgY2FsYysrLXNjYW5uZXIuY2MgLS0gJChMRVgpICQoQU1fTEZMQUdTKSAkKExGTEFHUykKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworY3Njb3BlbGlzdDogICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCknOyBcCisJY2FzZSAiJChzcmNkaXIpIiBpbiBcCisJICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCisJICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAorCWVzYWM7IFwKKwlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAorCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAorCSAgZWxzZSBcCisJICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCisJICBmaTsgXAorCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcworCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitjaGVjay1URVNUUzogJChURVNUUykKKwlAZmFpbGVkPTA7IGFsbD0wOyB4ZmFpbD0wOyB4cGFzcz0wOyBza2lwPTA7IFwKKwlzcmNkaXI9JChzcmNkaXIpOyBleHBvcnQgc3JjZGlyOyBcCisJbGlzdD0nICQoVEVTVFMpICc7IFwKKwkkKGFtX190dHlfY29sb3JzKTsgXAorCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAorCSAgZm9yIHRzdCBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAuLyQkdHN0OyB0aGVuIGRpcj0uLzsgXAorCSAgICBlbGlmIHRlc3QgLWYgJCR0c3Q7IHRoZW4gZGlyPTsgXAorCSAgICBlbHNlIGRpcj0iJChzcmNkaXIpLyI7IGZpOyBcCisJICAgIGlmICQoVEVTVFNfRU5WSVJPTk1FTlQpICQke2Rpcn0kJHRzdCAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKTsgdGhlbiBcCisJICAgICAgYWxsPWBleHByICQkYWxsICsgMWA7IFwKKwkgICAgICBjYXNlICIgJChYRkFJTF9URVNUUykgIiBpbiBcCisJICAgICAgKltcIFwJXSQkdHN0W1wgXAldKikgXAorCQl4cGFzcz1gZXhwciAkJHhwYXNzICsgMWA7IFwKKwkJZmFpbGVkPWBleHByICQkZmFpbGVkICsgMWA7IFwKKwkJY29sPSQkcmVkOyByZXM9WFBBU1M7IFwKKwkgICAgICA7OyBcCisJICAgICAgKikgXAorCQljb2w9JCRncm47IHJlcz1QQVNTOyBcCisJICAgICAgOzsgXAorCSAgICAgIGVzYWM7IFwKKwkgICAgZWxpZiB0ZXN0ICQkPyAtbmUgNzc7IHRoZW4gXAorCSAgICAgIGFsbD1gZXhwciAkJGFsbCArIDFgOyBcCisJICAgICAgY2FzZSAiICQoWEZBSUxfVEVTVFMpICIgaW4gXAorCSAgICAgICpbXCBcCV0kJHRzdFtcIFwJXSopIFwKKwkJeGZhaWw9YGV4cHIgJCR4ZmFpbCArIDFgOyBcCisJCWNvbD0kJGxnbjsgcmVzPVhGQUlMOyBcCisJICAgICAgOzsgXAorCSAgICAgICopIFwKKwkJZmFpbGVkPWBleHByICQkZmFpbGVkICsgMWA7IFwKKwkJY29sPSQkcmVkOyByZXM9RkFJTDsgXAorCSAgICAgIDs7IFwKKwkgICAgICBlc2FjOyBcCisJICAgIGVsc2UgXAorCSAgICAgIHNraXA9YGV4cHIgJCRza2lwICsgMWA7IFwKKwkgICAgICBjb2w9JCRibHU7IHJlcz1TS0lQOyBcCisJICAgIGZpOyBcCisJICAgIGVjaG8gIiQke2NvbH0kJHJlcyQke3N0ZH06ICQkdHN0IjsgXAorCSAgZG9uZTsgXAorCSAgaWYgdGVzdCAiJCRhbGwiIC1lcSAxOyB0aGVuIFwKKwkgICAgdGVzdHM9InRlc3QiOyBcCisJICAgIEFsbD0iIjsgXAorCSAgZWxzZSBcCisJICAgIHRlc3RzPSJ0ZXN0cyI7IFwKKwkgICAgQWxsPSJBbGwgIjsgXAorCSAgZmk7IFwKKwkgIGlmIHRlc3QgIiQkZmFpbGVkIiAtZXEgMDsgdGhlbiBcCisJICAgIGlmIHRlc3QgIiQkeGZhaWwiIC1lcSAwOyB0aGVuIFwKKwkgICAgICBiYW5uZXI9IiQkQWxsJCRhbGwgJCR0ZXN0cyBwYXNzZWQiOyBcCisJICAgIGVsc2UgXAorCSAgICAgIGlmIHRlc3QgIiQkeGZhaWwiIC1lcSAxOyB0aGVuIGZhaWx1cmVzPWZhaWx1cmU7IGVsc2UgZmFpbHVyZXM9ZmFpbHVyZXM7IGZpOyBcCisJICAgICAgYmFubmVyPSIkJEFsbCQkYWxsICQkdGVzdHMgYmVoYXZlZCBhcyBleHBlY3RlZCAoJCR4ZmFpbCBleHBlY3RlZCAkJGZhaWx1cmVzKSI7IFwKKwkgICAgZmk7IFwKKwkgIGVsc2UgXAorCSAgICBpZiB0ZXN0ICIkJHhwYXNzIiAtZXEgMDsgdGhlbiBcCisJICAgICAgYmFubmVyPSIkJGZhaWxlZCBvZiAkJGFsbCAkJHRlc3RzIGZhaWxlZCI7IFwKKwkgICAgZWxzZSBcCisJICAgICAgaWYgdGVzdCAiJCR4cGFzcyIgLWVxIDE7IHRoZW4gcGFzc2VzPXBhc3M7IGVsc2UgcGFzc2VzPXBhc3NlczsgZmk7IFwKKwkgICAgICBiYW5uZXI9IiQkZmFpbGVkIG9mICQkYWxsICQkdGVzdHMgZGlkIG5vdCBiZWhhdmUgYXMgZXhwZWN0ZWQgKCQkeHBhc3MgdW5leHBlY3RlZCAkJHBhc3NlcykiOyBcCisJICAgIGZpOyBcCisJICBmaTsgXAorCSAgZGFzaGVzPSIkJGJhbm5lciI7IFwKKwkgIHNraXBwZWQ9IiI7IFwKKwkgIGlmIHRlc3QgIiQkc2tpcCIgLW5lIDA7IHRoZW4gXAorCSAgICBpZiB0ZXN0ICIkJHNraXAiIC1lcSAxOyB0aGVuIFwKKwkgICAgICBza2lwcGVkPSIoJCRza2lwIHRlc3Qgd2FzIG5vdCBydW4pIjsgXAorCSAgICBlbHNlIFwKKwkgICAgICBza2lwcGVkPSIoJCRza2lwIHRlc3RzIHdlcmUgbm90IHJ1bikiOyBcCisJICAgIGZpOyBcCisJICAgIHRlc3QgYGVjaG8gIiQkc2tpcHBlZCIgfCB3YyAtY2AgLWxlIGBlY2hvICIkJGJhbm5lciIgfCB3YyAtY2AgfHwgXAorCSAgICAgIGRhc2hlcz0iJCRza2lwcGVkIjsgXAorCSAgZmk7IFwKKwkgIHJlcG9ydD0iIjsgXAorCSAgaWYgdGVzdCAiJCRmYWlsZWQiIC1uZSAwICYmIHRlc3QgLW4gIiQoUEFDS0FHRV9CVUdSRVBPUlQpIjsgdGhlbiBcCisJICAgIHJlcG9ydD0iUGxlYXNlIHJlcG9ydCB0byAkKFBBQ0tBR0VfQlVHUkVQT1JUKSI7IFwKKwkgICAgdGVzdCBgZWNobyAiJCRyZXBvcnQiIHwgd2MgLWNgIC1sZSBgZWNobyAiJCRiYW5uZXIiIHwgd2MgLWNgIHx8IFwKKwkgICAgICBkYXNoZXM9IiQkcmVwb3J0IjsgXAorCSAgZmk7IFwKKwkgIGRhc2hlcz1gZWNobyAiJCRkYXNoZXMiIHwgc2VkIHMvLi89L2dgOyBcCisJICBpZiB0ZXN0ICIkJGZhaWxlZCIgLWVxIDA7IHRoZW4gXAorCSAgICBjb2w9IiQkZ3JuIjsgXAorCSAgZWxzZSBcCisJICAgIGNvbD0iJCRyZWQiOyBcCisJICBmaTsgXAorCSAgZWNobyAiJCR7Y29sfSQkZGFzaGVzJCR7c3RkfSI7IFwKKwkgIGVjaG8gIiQke2NvbH0kJGJhbm5lciQke3N0ZH0iOyBcCisJICB0ZXN0IC16ICIkJHNraXBwZWQiIHx8IGVjaG8gIiQke2NvbH0kJHNraXBwZWQkJHtzdGR9IjsgXAorCSAgdGVzdCAteiAiJCRyZXBvcnQiIHx8IGVjaG8gIiQke2NvbH0kJHJlcG9ydCQke3N0ZH0iOyBcCisJICBlY2hvICIkJHtjb2x9JCRkYXNoZXMkJHtzdGR9IjsgXAorCSAgdGVzdCAiJCRmYWlsZWQiIC1lcSAwOyBcCisJZWxzZSA6OyBmaQorCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkKGNoZWNrX1BST0dSQU1TKQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrLVRFU1RTCitjaGVjazogJChCVUlMVF9TT1VSQ0VTKQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlCitpbnN0YWxsZGlyczoKK2luc3RhbGw6ICQoQlVJTFRfU09VUkNFUykKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgICBpbnN0YWxsOyBcCisJZWxzZSBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKKwlmaQorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChDTEVBTkZJTEVTKQorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCisJLXJtIC1mIGNhbGMrKy1zY2FubmVyLmNjCisJLXRlc3QgLXogIiQoQlVJTFRfU09VUkNFUykiIHx8IHJtIC1mICQoQlVJTFRfU09VUkNFUykKKwktdGVzdCAteiAiJChNQUlOVEFJTkVSQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoTUFJTlRBSU5FUkNMRUFORklMRVMpCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWNoZWNrUFJPR1JBTVMgY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbToKKworLk1BS0U6IGFsbCBjaGVjayBjaGVjay1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stVEVTVFMgY2hlY2stYW0gY2xlYW4gXAorCWNsZWFuLWNoZWNrUFJPR1JBTVMgY2xlYW4tZ2VuZXJpYyBjc2NvcGVsaXN0IGN0YWdzIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgXAorCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCisJaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBcCisJaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKKwlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIFwKKwlpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBcCisJaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIFwKKwl1bmluc3RhbGwtYW0KKworCiskKEJJU09OKTogJChCSVNPTl9JTikKKwkkKEFNX1ZfR0VOKWNkICQodG9wX2J1aWxkZGlyKS90ZXN0cyAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBiaXNvbgorIyBFeHRyYWN0IGluIHNyYy4KKyQoc3JjZGlyKS9jYWxjLnN0YW1wOiAkKGRvYykgJChleHRleGkpCisJJChBTV9WX0dFTilybSAtZiAkQCAkQC50bXAKKwkkKEFNX1ZfYXQpdG91Y2ggJEAudG1wCisJJChBTV9WX2F0KWNkICQoc3JjZGlyKSAmJiBcCisJICAgJChBV0spIC1mIC4uL2V4dGV4aSAtdiBWRVJTSU9OPSIkKFZFUlNJT04pIiBcCisJICAgICAuLi8uLi9kb2MvYmlzb24udGV4aSAtLSBjYWxjKystcGFyc2VyLnl5IFwKKwkgICAgIGNhbGMrKy1zY2FubmVyLmxsIGNhbGMrKy5jYyBjYWxjKystZHJpdmVyLmhoIGNhbGMrKy1kcml2ZXIuY2MKKwkkKEFNX1ZfYXQpbXYgJEAudG1wICRACisKKyQoY2FsY19leHRyYWN0ZWQpOiAkKHNyY2RpcikvY2FsYy5zdGFtcAorIyBEb24ndCBkZXBlbmQgb24gJChCSVNPTikgb3RoZXJ3aXNlIHdlIHdvdWxkIHJlYnVpbGQgdGhlc2UgZmlsZXMKKyMgaW4gc3JjZGlyLCBpbmNsdWRpbmcgZHVyaW5nIGRpc3RjaGVjaywgd2hpY2ggaXMgZm9yYmlkZGVuLgorJChzcmNkaXIpL2NhbGMrKy1wYXJzZXIuc3RhbXA6ICQoc3JjZGlyKS9jYWxjKystcGFyc2VyLnl5ICQoQklTT05fSU4pCisJJChBTV9WX0dFTilybSAtZiBjYWxjKystcGFyc2VyLnRtcAorCSQoQU1fVl9hdCl0b3VjaCBjYWxjKystcGFyc2VyLnRtcAorCSQoQU1fVl9hdCkkKEJJU09OKSAtZCAtcmEgLVMgbGFscjEuY2MgLW8gJChzcmNkaXIpL2NhbGMrKy1wYXJzZXIuY2MgXAorCSAgJChzcmNkaXIpL2NhbGMrKy1wYXJzZXIueXkKKwkkKEFNX1ZfYXQpbXYgLWYgY2FsYysrLXBhcnNlci50bXAgJEAKKworJChjYWxjX3NvdXJjZXNfZ2VuZXJhdGVkKTogJChzcmNkaXIpL2NhbGMrKy1wYXJzZXIuc3RhbXAKKwkkKEFNX1ZfR0VOKWlmIHRlc3QgLWYgJEA7IHRoZW4gOjsgZWxzZSBcCisJICBybSAtZiAkKHNyY2RpcikvY2FsYysrLXBhcnNlci5zdGFtcCAmJiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkKHNyY2RpcikvY2FsYysrLXBhcnNlci5zdGFtcDsgXAorCWZpCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2NhbGMrKy9jYWxjKystZHJpdmVyLmNjIGIvZXhhbXBsZXMvY2FsYysrL2NhbGMrKy1kcml2ZXIuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI0MGU5MwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2NhbGMrKy9jYWxjKystZHJpdmVyLmNjCkBAIC0wLDAgKzEsMzggQEAKKyNsaW5lIDEwMTQ2ICIuLi8uLi9kb2MvYmlzb24udGV4aSIKKyNpbmNsdWRlICJjYWxjKystZHJpdmVyLmhoIgorI2luY2x1ZGUgImNhbGMrKy1wYXJzZXIuaGgiCisKK2NhbGN4eF9kcml2ZXI6OmNhbGN4eF9kcml2ZXIgKCkKKyAgOiB0cmFjZV9zY2FubmluZyAoZmFsc2UpLCB0cmFjZV9wYXJzaW5nIChmYWxzZSkKK3sKKyAgdmFyaWFibGVzWyJvbmUiXSA9IDE7CisgIHZhcmlhYmxlc1sidHdvIl0gPSAyOworfQorCitjYWxjeHhfZHJpdmVyOjp+Y2FsY3h4X2RyaXZlciAoKQoreworfQorCitpbnQKK2NhbGN4eF9kcml2ZXI6OnBhcnNlIChjb25zdCBzdGQ6OnN0cmluZyAmZikKK3sKKyAgZmlsZSA9IGY7CisgIHNjYW5fYmVnaW4gKCk7CisgIHl5OjpjYWxjeHhfcGFyc2VyIHBhcnNlciAoKnRoaXMpOworICBwYXJzZXIuc2V0X2RlYnVnX2xldmVsICh0cmFjZV9wYXJzaW5nKTsKKyAgaW50IHJlcyA9IHBhcnNlci5wYXJzZSAoKTsKKyAgc2Nhbl9lbmQgKCk7CisgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK2NhbGN4eF9kcml2ZXI6OmVycm9yIChjb25zdCB5eTo6bG9jYXRpb24mIGwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtKQoreworICBzdGQ6OmNlcnIgPDwgbCA8PCAiOiAiIDw8IG0gPDwgc3RkOjplbmRsOworfQorCit2b2lkCitjYWxjeHhfZHJpdmVyOjplcnJvciAoY29uc3Qgc3RkOjpzdHJpbmcmIG0pCit7CisgIHN0ZDo6Y2VyciA8PCBtIDw8IHN0ZDo6ZW5kbDsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2NhbGMrKy9jYWxjKystZHJpdmVyLmhoIGIvZXhhbXBsZXMvY2FsYysrL2NhbGMrKy1kcml2ZXIuaGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBhYzZlZQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2NhbGMrKy9jYWxjKystZHJpdmVyLmhoCkBAIC0wLDAgKzEsNDIgQEAKKyNsaW5lIDEwMDU3ICIuLi8uLi9kb2MvYmlzb24udGV4aSIKKyNpZm5kZWYgQ0FMQ1hYX0RSSVZFUl9ISAorIyBkZWZpbmUgQ0FMQ1hYX0RSSVZFUl9ISAorIyBpbmNsdWRlIDxzdHJpbmc+CisjIGluY2x1ZGUgPG1hcD4KKyMgaW5jbHVkZSAiY2FsYysrLXBhcnNlci5oaCIKKyNsaW5lIDEwMDczICIuLi8uLi9kb2MvYmlzb24udGV4aSIKKy8vIFRlbGwgRmxleCB0aGUgbGV4ZXIncyBwcm90b3R5cGUgLi4uCisjIGRlZmluZSBZWV9ERUNMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeXk6OmNhbGN4eF9wYXJzZXI6OnRva2VuX3R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB5eWxleCAoeXk6OmNhbGN4eF9wYXJzZXI6OnNlbWFudGljX3R5cGUqIHl5bHZhbCwgICAgICBcCisgICAgICAgICB5eTo6Y2FsY3h4X3BhcnNlcjo6bG9jYXRpb25fdHlwZSogeXlsbG9jLCAgICAgIFwKKyAgICAgICAgIGNhbGN4eF9kcml2ZXImIGRyaXZlcikKKy8vIC4uLiBhbmQgZGVjbGFyZSBpdCBmb3IgdGhlIHBhcnNlcidzIHNha2UuCitZWV9ERUNMOworI2xpbmUgMTAwODkgIi4uLy4uL2RvYy9iaXNvbi50ZXhpIgorLy8gQ29uZHVjdGluZyB0aGUgd2hvbGUgc2Nhbm5pbmcgYW5kIHBhcnNpbmcgb2YgQ2FsYysrLgorY2xhc3MgY2FsY3h4X2RyaXZlcgoreworcHVibGljOgorICBjYWxjeHhfZHJpdmVyICgpOworICB2aXJ0dWFsIH5jYWxjeHhfZHJpdmVyICgpOworCisgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBpbnQ+IHZhcmlhYmxlczsKKworICBpbnQgcmVzdWx0OworI2xpbmUgMTAxMDcgIi4uLy4uL2RvYy9iaXNvbi50ZXhpIgorICAvLyBIYW5kbGluZyB0aGUgc2Nhbm5lci4KKyAgdm9pZCBzY2FuX2JlZ2luICgpOworICB2b2lkIHNjYW5fZW5kICgpOworICBib29sIHRyYWNlX3NjYW5uaW5nOworI2xpbmUgMTAxMTggIi4uLy4uL2RvYy9iaXNvbi50ZXhpIgorICAvLyBSdW4gdGhlIHBhcnNlci4gIFJldHVybiAwIG9uIHN1Y2Nlc3MuCisgIGludCBwYXJzZSAoY29uc3Qgc3RkOjpzdHJpbmcmIGYpOworICBzdGQ6OnN0cmluZyBmaWxlOworICBib29sIHRyYWNlX3BhcnNpbmc7CisjbGluZSAxMDEzMiAiLi4vLi4vZG9jL2Jpc29uLnRleGkiCisgIC8vIEVycm9yIGhhbmRsaW5nLgorICB2b2lkIGVycm9yIChjb25zdCB5eTo6bG9jYXRpb24mIGwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtKTsKKyAgdm9pZCBlcnJvciAoY29uc3Qgc3RkOjpzdHJpbmcmIG0pOworfTsKKyNlbmRpZiAvLyAhIENBTENYWF9EUklWRVJfSEgKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2NhbGMrKy9jYWxjKystcGFyc2VyLmNjIGIvZXhhbXBsZXMvY2FsYysrL2NhbGMrKy1wYXJzZXIuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkxNmI1OQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2NhbGMrKy9jYWxjKystcGFyc2VyLmNjCkBAIC0wLDAgKzEsMTA3OSBAQAorLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNi45MC44LWQ0ZmUuICAqLworCisvKiBTa2VsZXRvbiBpbXBsZW1lbnRhdGlvbiBmb3IgQmlzb24gTEFMUigxKSBwYXJzZXJzIGluIEMrKworICAgCisgICAgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCisgICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yaworICAgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCisgICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZgorICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZQorICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcworICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCisgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCisgICAKKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KKyAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8KKworCisvKiBGaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KKworLyogTGluZSAyNzkgb2YgbGFscjEuY2MgICovCisjbGluZSAzOCAiLi4vLi4vLi4vLi4vZXhhbXBsZXMvY2FsYysrL2NhbGMrKy1wYXJzZXIuY2MiCisKKworI2luY2x1ZGUgImNhbGMrKy1wYXJzZXIuaGgiCisKKy8qIFVzZXIgaW1wbGVtZW50YXRpb24gcHJvbG9ndWUuICAqLworCisvKiBMaW5lIDI4NSBvZiBsYWxyMS5jYyAgKi8KKyNsaW5lIDQ2ICIuLi8uLi8uLi8uLi9leGFtcGxlcy9jYWxjKysvY2FsYysrLXBhcnNlci5jYyIKKy8qIFVucXVhbGlmaWVkICVjb2RlIGJsb2Nrcy4gICovCisvKiBMaW5lIDI4NiBvZiBsYWxyMS5jYyAgKi8KKyNsaW5lIDEwMjgwICIuLi8uLi9kb2MvYmlzb24udGV4aSIKKworIyBpbmNsdWRlICJjYWxjKystZHJpdmVyLmhoIgorCisKKy8qIExpbmUgMjg2IG9mIGxhbHIxLmNjICAqLworI2xpbmUgNTUgIi4uLy4uLy4uLy4uL2V4YW1wbGVzL2NhbGMrKy9jYWxjKystcGFyc2VyLmNjIgorCisKKyMgaWZuZGVmIFlZX05VTEwKKyMgIGlmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgMjAxMTAzTCA8PSBfX2NwbHVzcGx1cworIyAgIGRlZmluZSBZWV9OVUxMIG51bGxwdHIKKyMgIGVsc2UKKyMgICBkZWZpbmUgWVlfTlVMTCAwCisjICBlbmRpZgorIyBlbmRpZgorCisjaWZuZGVmIFlZXworIyBpZiBkZWZpbmVkIFlZRU5BQkxFX05MUyAmJiBZWUVOQUJMRV9OTFMKKyMgIGlmIEVOQUJMRV9OTFMKKyMgICBpbmNsdWRlIDxsaWJpbnRsLmg+IC8qIEZJWE1FOiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZGVmaW5lIFlZXyhtc2dpZCkgZGdldHRleHQgKCJiaXNvbi1ydW50aW1lIiwgbXNnaWQpCisjICBlbmRpZgorIyBlbmRpZgorIyBpZm5kZWYgWVlfCisjICBkZWZpbmUgWVlfKG1zZ2lkKSBtc2dpZAorIyBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgWVlSSFNMT0MoUmhzLCBLKSAoKFJocylbS10pCisvKiBZWUxMT0NfREVGQVVMVCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20gUkhTWzFdIHRvIFJIU1tOXS4KKyAgIElmIE4gaXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0aGUgZW1wdHkgbG9jYXRpb24gd2hpY2ggZW5kcworICAgdGhlIHByZXZpb3VzIHN5bWJvbDogUkhTWzBdIChhbHdheXMgZGVmaW5lZCkuICAqLworCisjIGlmbmRlZiBZWUxMT0NfREVGQVVMVAorIyAgZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYgKE4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChDdXJyZW50KS5iZWdpbiAgPSBZWVJIU0xPQyAoUmhzLCAxKS5iZWdpbjsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChDdXJyZW50KS5lbmQgICAgPSBZWVJIU0xPQyAoUmhzLCBOKS5lbmQ7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChDdXJyZW50KS5iZWdpbiA9IChDdXJyZW50KS5lbmQgPSBZWVJIU0xPQyAoUmhzLCAwKS5lbmQ7ICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHdoaWxlICgvKkNPTlNUQ09ORCovIGZhbHNlKQorIyBlbmRpZgorCisKKy8qIFN1cHByZXNzIHVudXNlZC12YXJpYWJsZSB3YXJuaW5ncyBieSAidXNpbmciIEUuICAqLworI2RlZmluZSBZWVVTRShlKSAoKHZvaWQpIChlKSkKKworLyogRW5hYmxlIGRlYnVnZ2luZyBpZiByZXF1ZXN0ZWQuICAqLworI2lmIFlZREVCVUcKKworLyogQSBwc2V1ZG8gb3N0cmVhbSB0aGF0IHRha2VzIHl5ZGVidWdfIGludG8gYWNjb3VudC4gICovCisjIGRlZmluZSBZWUNERUJVRyBpZiAoeXlkZWJ1Z18pICgqeXljZGVidWdfKQorCisjIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikJXAorZG8gewkJCQkJCQlcCisgIGlmICh5eWRlYnVnXykJCQkJCQlcCisgICAgewkJCQkJCQlcCisgICAgICAqeXljZGVidWdfIDw8IFRpdGxlIDw8ICcgJzsJCQlcCisgICAgICB5eV9zeW1ib2xfcHJpbnRfICgoVHlwZSksIChWYWx1ZSksIChMb2NhdGlvbikpOwlcCisgICAgICAqeXljZGVidWdfIDw8IHN0ZDo6ZW5kbDsJCQkJXAorICAgIH0JCQkJCQkJXAorfSB3aGlsZSAoZmFsc2UpCisKKyMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQkJXAorZG8gewkJCQkJXAorICBpZiAoeXlkZWJ1Z18pCQkJCVwKKyAgICB5eV9yZWR1Y2VfcHJpbnRfIChSdWxlKTsJCVwKK30gd2hpbGUgKGZhbHNlKQorCisjIGRlZmluZSBZWV9TVEFDS19QUklOVCgpCQlcCitkbyB7CQkJCQlcCisgIGlmICh5eWRlYnVnXykJCQkJXAorICAgIHl5c3RhY2tfcHJpbnRfICgpOwkJCVwKK30gd2hpbGUgKGZhbHNlKQorCisjZWxzZSAvKiAhWVlERUJVRyAqLworCisjIGRlZmluZSBZWUNERUJVRyBpZiAoZmFsc2UpIHN0ZDo6Y2VycgorIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pIFlZVVNFKFR5cGUpCisjIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkgICAgICAgIHN0YXRpY19jYXN0PHZvaWQ+KDApCisjIGRlZmluZSBZWV9TVEFDS19QUklOVCgpICAgICAgICAgICAgIHN0YXRpY19jYXN0PHZvaWQ+KDApCisKKyNlbmRpZiAvKiAhWVlERUJVRyAqLworCisjZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1c18gPSAwKQorI2RlZmluZSB5eWNsZWFyaW4JKHl5Y2hhciA9IHl5ZW1wdHlfKQorCisjZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlhY2NlcHRsYWIKKyNkZWZpbmUgWVlBQk9SVAkJZ290byB5eWFib3J0bGFiCisjZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJvcmxhYgorI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXNfKQorCisKK25hbWVzcGFjZSB5eSB7CisvKiBMaW5lIDM1MyBvZiBsYWxyMS5jYyAgKi8KKyNsaW5lIDE1MCAiLi4vLi4vLi4vLi4vZXhhbXBsZXMvY2FsYysrL2NhbGMrKy1wYXJzZXIuY2MiCisKKyAgLyogUmV0dXJuIFlZU1RSIGFmdGVyIHN0cmlwcGluZyBhd2F5IHVubmVjZXNzYXJ5IHF1b3RlcyBhbmQKKyAgICAgYmFja3NsYXNoZXMsIHNvIHRoYXQgaXQncyBzdWl0YWJsZSBmb3IgeXllcnJvci4gIFRoZSBoZXVyaXN0aWMgaXMKKyAgICAgdGhhdCBkb3VibGUtcXVvdGluZyBpcyB1bm5lY2Vzc2FyeSB1bmxlc3MgdGhlIHN0cmluZyBjb250YWlucyBhbgorICAgICBhcG9zdHJvcGhlLCBhIGNvbW1hLCBvciBiYWNrc2xhc2ggKG90aGVyIHRoYW4gYmFja3NsYXNoLWJhY2tzbGFzaCkuCisgICAgIFlZU1RSIGlzIHRha2VuIGZyb20geXl0bmFtZS4gICovCisgIHN0ZDo6c3RyaW5nCisgIGNhbGN4eF9wYXJzZXI6Onl5dG5hbWVycl8gKGNvbnN0IGNoYXIgKnl5c3RyKQorICB7CisgICAgaWYgKCp5eXN0ciA9PSAnIicpCisgICAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nIHl5ciA9ICIiOworICAgICAgICBjaGFyIGNvbnN0ICp5eXAgPSB5eXN0cjsKKworICAgICAgICBmb3IgKDs7KQorICAgICAgICAgIHN3aXRjaCAoKisreXlwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSAnXCcnOgorICAgICAgICAgICAgY2FzZSAnLCc6CisgICAgICAgICAgICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKworICAgICAgICAgICAgY2FzZSAnXFwnOgorICAgICAgICAgICAgICBpZiAoKisreXlwICE9ICdcXCcpCisgICAgICAgICAgICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOworICAgICAgICAgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgeXlyICs9ICp5eXA7CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICciJzoKKyAgICAgICAgICAgICAgcmV0dXJuIHl5cjsKKyAgICAgICAgICAgIH0KKyAgICAgIGRvX25vdF9zdHJpcF9xdW90ZXM6IDsKKyAgICAgIH0KKworICAgIHJldHVybiB5eXN0cjsKKyAgfQorCisKKyAgLy8vIEJ1aWxkIGEgcGFyc2VyIG9iamVjdC4KKyAgY2FsY3h4X3BhcnNlcjo6Y2FsY3h4X3BhcnNlciAoY2FsY3h4X2RyaXZlciYgZHJpdmVyX3l5YXJnKQorICAgIDoKKyNpZiBZWURFQlVHCisgICAgICB5eWRlYnVnXyAoZmFsc2UpLAorICAgICAgeXljZGVidWdfICgmc3RkOjpjZXJyKSwKKyNlbmRpZgorICAgICAgZHJpdmVyIChkcml2ZXJfeXlhcmcpCisgIHsKKyAgfQorCisgIGNhbGN4eF9wYXJzZXI6On5jYWxjeHhfcGFyc2VyICgpCisgIHsKKyAgfQorCisjaWYgWVlERUJVRworICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorICB8IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAorICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisgIGlubGluZSB2b2lkCisgIGNhbGN4eF9wYXJzZXI6Onl5X3N5bWJvbF92YWx1ZV9wcmludF8gKGludCB5eXR5cGUsCisJCQkgICBjb25zdCBzZW1hbnRpY190eXBlKiB5eXZhbHVlcCwgY29uc3QgbG9jYXRpb25fdHlwZSogeXlsb2NhdGlvbnApCisgIHsKKyAgICBZWVVTRSAoeXlsb2NhdGlvbnApOworICAgIFlZVVNFICh5eXZhbHVlcCk7CisgICAgc3RkOjpvc3RyZWFtJiB5eW8gPSBkZWJ1Z19zdHJlYW0gKCk7CisgICAgc3RkOjpvc3RyZWFtJiB5eW91dHB1dCA9IHl5bzsKKyAgICBZWVVTRSAoeXlvdXRwdXQpOworICAgIHN3aXRjaCAoeXl0eXBlKQorICAgICAgeworICAgICAgICBjYXNlIDQ6IC8qICJpZGVudGlmaWVyIiAqLworLyogTGluZSA0MjMgb2YgbGFscjEuY2MgICovCisjbGluZSAxMDMwOSAiLi4vLi4vZG9jL2Jpc29uLnRleGkiCisgICAgICAgIHsgeXlvdXRwdXQgPDwgKigoKnl5dmFsdWVwKS5zdmFsKTsgfTsKKy8qIExpbmUgNDIzIG9mIGxhbHIxLmNjICAqLworI2xpbmUgMjI2ICIuLi8uLi8uLi8uLi9leGFtcGxlcy9jYWxjKysvY2FsYysrLXBhcnNlci5jYyIKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDU6IC8qICJudW1iZXIiICovCisvKiBMaW5lIDQyMyBvZiBsYWxyMS5jYyAgKi8KKyNsaW5lIDEwMzEyICIuLi8uLi9kb2MvYmlzb24udGV4aSIKKyAgICAgICAgeyB5eW91dHB1dCA8PCAoKCp5eXZhbHVlcCkuaXZhbCk7IH07CisvKiBMaW5lIDQyMyBvZiBsYWxyMS5jYyAgKi8KKyNsaW5lIDIzMyAiLi4vLi4vLi4vLi4vZXhhbXBsZXMvY2FsYysrL2NhbGMrKy1wYXJzZXIuY2MiCisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAxNDogLyogZXhwICovCisvKiBMaW5lIDQyMyBvZiBsYWxyMS5jYyAgKi8KKyNsaW5lIDEwMzEyICIuLi8uLi9kb2MvYmlzb24udGV4aSIKKyAgICAgICAgeyB5eW91dHB1dCA8PCAoKCp5eXZhbHVlcCkuaXZhbCk7IH07CisvKiBMaW5lIDQyMyBvZiBsYWxyMS5jYyAgKi8KKyNsaW5lIDI0MCAiLi4vLi4vLi4vLi4vZXhhbXBsZXMvY2FsYysrL2NhbGMrKy1wYXJzZXIuY2MiCisgICAgICAgIGJyZWFrOworICAgICAgIGRlZmF1bHQ6CisJICBicmVhazsKKyAgICAgIH0KKyAgfQorCisKKyAgdm9pZAorICBjYWxjeHhfcGFyc2VyOjp5eV9zeW1ib2xfcHJpbnRfIChpbnQgeXl0eXBlLAorCQkJICAgY29uc3Qgc2VtYW50aWNfdHlwZSogeXl2YWx1ZXAsIGNvbnN0IGxvY2F0aW9uX3R5cGUqIHl5bG9jYXRpb25wKQorICB7CisgICAgKnl5Y2RlYnVnXyA8PCAoeXl0eXBlIDwgeXludG9rZW5zXyA/ICJ0b2tlbiIgOiAibnRlcm0iKQorCSAgICAgICA8PCAnICcgPDwgeXl0bmFtZV9beXl0eXBlXSA8PCAiICgiCisJICAgICAgIDw8ICp5eWxvY2F0aW9ucCA8PCAiOiAiOworICAgIHl5X3N5bWJvbF92YWx1ZV9wcmludF8gKHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wKTsKKyAgICAqeXljZGVidWdfIDw8ICcpJzsKKyAgfQorI2VuZGlmCisKKyAgdm9pZAorICBjYWxjeHhfcGFyc2VyOjp5eWRlc3RydWN0XyAoY29uc3QgY2hhciogeXltc2csCisJCQkgICBpbnQgeXl0eXBlLCBzZW1hbnRpY190eXBlKiB5eXZhbHVlcCwgbG9jYXRpb25fdHlwZSogeXlsb2NhdGlvbnApCisgIHsKKyAgICBZWVVTRSAoeXlsb2NhdGlvbnApOworICAgIFlZVVNFICh5eW1zZyk7CisgICAgWVlVU0UgKHl5dmFsdWVwKTsKKworICAgIGlmICh5eW1zZykKKyAgICAgIFlZX1NZTUJPTF9QUklOVCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wKTsKKworICAgIHN3aXRjaCAoeXl0eXBlKQorICAgICAgeworICAgICAgICBjYXNlIDQ6IC8qICJpZGVudGlmaWVyIiAqLworLyogTGluZSA0NTUgb2YgbGFscjEuY2MgICovCisjbGluZSAxMDMxMCAiLi4vLi4vZG9jL2Jpc29uLnRleGkiCisgICAgICAgIHsgZGVsZXRlICgoKnl5dmFsdWVwKS5zdmFsKTsgfTsKKy8qIExpbmUgNDU1IG9mIGxhbHIxLmNjICAqLworI2xpbmUgMjc4ICIuLi8uLi8uLi8uLi9leGFtcGxlcy9jYWxjKysvY2FsYysrLXBhcnNlci5jYyIKKyAgICAgICAgYnJlYWs7CisKKwlkZWZhdWx0OgorCSAgYnJlYWs7CisgICAgICB9CisgIH0KKworICB2b2lkCisgIGNhbGN4eF9wYXJzZXI6Onl5cG9wXyAodW5zaWduZWQgaW50IG4pCisgIHsKKyAgICB5eXN0YXRlX3N0YWNrXy5wb3AgKG4pOworICAgIHl5c2VtYW50aWNfc3RhY2tfLnBvcCAobik7CisgICAgeXlsb2NhdGlvbl9zdGFja18ucG9wIChuKTsKKyAgfQorCisjaWYgWVlERUJVRworICBzdGQ6Om9zdHJlYW0mCisgIGNhbGN4eF9wYXJzZXI6OmRlYnVnX3N0cmVhbSAoKSBjb25zdAorICB7CisgICAgcmV0dXJuICp5eWNkZWJ1Z187CisgIH0KKworICB2b2lkCisgIGNhbGN4eF9wYXJzZXI6OnNldF9kZWJ1Z19zdHJlYW0gKHN0ZDo6b3N0cmVhbSYgbykKKyAgeworICAgIHl5Y2RlYnVnXyA9ICZvOworICB9CisKKworICBjYWxjeHhfcGFyc2VyOjpkZWJ1Z19sZXZlbF90eXBlCisgIGNhbGN4eF9wYXJzZXI6OmRlYnVnX2xldmVsICgpIGNvbnN0CisgIHsKKyAgICByZXR1cm4geXlkZWJ1Z187CisgIH0KKworICB2b2lkCisgIGNhbGN4eF9wYXJzZXI6OnNldF9kZWJ1Z19sZXZlbCAoZGVidWdfbGV2ZWxfdHlwZSBsKQorICB7CisgICAgeXlkZWJ1Z18gPSBsOworICB9CisjZW5kaWYKKworICBpbmxpbmUgYm9vbAorICBjYWxjeHhfcGFyc2VyOjp5eV9wYWN0X3ZhbHVlX2lzX2RlZmF1bHRfIChpbnQgeXl2YWx1ZSkKKyAgeworICAgIHJldHVybiB5eXZhbHVlID09IHl5cGFjdF9uaW5mXzsKKyAgfQorCisgIGlubGluZSBib29sCisgIGNhbGN4eF9wYXJzZXI6Onl5X3RhYmxlX3ZhbHVlX2lzX2Vycm9yXyAoaW50IHl5dmFsdWUpCisgIHsKKyAgICByZXR1cm4geXl2YWx1ZSA9PSB5eXRhYmxlX25pbmZfOworICB9CisKKyAgaW50CisgIGNhbGN4eF9wYXJzZXI6OnBhcnNlICgpCisgIHsKKyAgICAvLy8gTG9va2FoZWFkIGFuZCBsb29rYWhlYWQgaW4gaW50ZXJuYWwgZm9ybS4KKyAgICBpbnQgeXljaGFyID0geXllbXB0eV87CisgICAgaW50IHl5dG9rZW4gPSAwOworCisgICAgLy8gU3RhdGUuCisgICAgaW50IHl5bjsKKyAgICBpbnQgeXlsZW4gPSAwOworICAgIGludCB5eXN0YXRlID0gMDsKKworICAgIC8vIEVycm9yIGhhbmRsaW5nLgorICAgIGludCB5eW5lcnJzXyA9IDA7CisgICAgaW50IHl5ZXJyc3RhdHVzXyA9IDA7CisKKyAgICAvLy8gU2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2thaGVhZC4KKyAgICBzdGF0aWMgc2VtYW50aWNfdHlwZSB5eXZhbF9kZWZhdWx0OworICAgIHNlbWFudGljX3R5cGUgeXlsdmFsID0geXl2YWxfZGVmYXVsdDsKKyAgICAvLy8gTG9jYXRpb24gb2YgdGhlIGxvb2thaGVhZC4KKyAgICBsb2NhdGlvbl90eXBlIHl5bGxvYzsKKyAgICAvLy8gVGhlIGxvY2F0aW9ucyB3aGVyZSB0aGUgZXJyb3Igc3RhcnRlZCBhbmQgZW5kZWQuCisgICAgbG9jYXRpb25fdHlwZSB5eWVycm9yX3JhbmdlWzNdOworCisgICAgLy8vICQkLgorICAgIHNlbWFudGljX3R5cGUgeXl2YWw7CisgICAgLy8vIEAkLgorICAgIGxvY2F0aW9uX3R5cGUgeXlsb2M7CisKKyAgICBpbnQgeXlyZXN1bHQ7CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91ZCBiZSBjb21wbGV0ZWx5IGluZGVudGVkLiAgSXQgaXMgbm90IHlldCB0bworICAgIC8vIGF2b2lkIGdyYXR1aXRvdXMgY29uZmxpY3RzIHdoZW4gbWVyZ2luZyBpbnRvIHRoZSBtYXN0ZXIgYnJhbmNoLgorICAgIHRyeQorICAgICAgeworICAgIFlZQ0RFQlVHIDw8ICJTdGFydGluZyBwYXJzZSIgPDwgc3RkOjplbmRsOworCisKKy8qIFVzZXIgaW5pdGlhbGl6YXRpb24gY29kZS4gICovCisvKiBMaW5lIDU0NSBvZiBsYWxyMS5jYyAgKi8KKyNsaW5lIDEwMjQyICIuLi8uLi9kb2MvYmlzb24udGV4aSIKK3sKKyAgLy8gSW5pdGlhbGl6ZSB0aGUgaW5pdGlhbCBsb2NhdGlvbi4KKyAgeXlsbG9jLmJlZ2luLmZpbGVuYW1lID0geXlsbG9jLmVuZC5maWxlbmFtZSA9ICZkcml2ZXIuZmlsZTsKK30KKy8qIExpbmUgNTQ1IG9mIGxhbHIxLmNjICAqLworI2xpbmUgMzc5ICIuLi8uLi8uLi8uLi9leGFtcGxlcy9jYWxjKysvY2FsYysrLXBhcnNlci5jYyIKKworICAgIC8qIEluaXRpYWxpemUgdGhlIHN0YWNrcy4gIFRoZSBpbml0aWFsIHN0YXRlIHdpbGwgYmUgcHVzaGVkIGluCisgICAgICAgeXluZXdzdGF0ZSwgc2luY2UgdGhlIGxhdHRlciBleHBlY3RzIHRoZSBzZW1hbnRpY2FsIGFuZCB0aGUKKyAgICAgICBsb2NhdGlvbiB2YWx1ZXMgdG8gaGF2ZSBiZWVuIGFscmVhZHkgc3RvcmVkLCBpbml0aWFsaXplIHRoZXNlCisgICAgICAgc3RhY2tzIHdpdGggYSBwcmltYXJ5IHZhbHVlLiAgKi8KKyAgICB5eXN0YXRlX3N0YWNrXyA9IHN0YXRlX3N0YWNrX3R5cGUgKDApOworICAgIHl5c2VtYW50aWNfc3RhY2tfID0gc2VtYW50aWNfc3RhY2tfdHlwZSAoMCk7CisgICAgeXlsb2NhdGlvbl9zdGFja18gPSBsb2NhdGlvbl9zdGFja190eXBlICgwKTsKKyAgICB5eXNlbWFudGljX3N0YWNrXy5wdXNoICh5eWx2YWwpOworICAgIHl5bG9jYXRpb25fc3RhY2tfLnB1c2ggKHl5bGxvYyk7CisKKyAgICAvKiBOZXcgc3RhdGUuICAqLworICB5eW5ld3N0YXRlOgorICAgIHl5c3RhdGVfc3RhY2tfLnB1c2ggKHl5c3RhdGUpOworICAgIFlZQ0RFQlVHIDw8ICJFbnRlcmluZyBzdGF0ZSAiIDw8IHl5c3RhdGUgPDwgc3RkOjplbmRsOworCisgICAgLyogQWNjZXB0PyAgKi8KKyAgICBpZiAoeXlzdGF0ZSA9PSB5eWZpbmFsXykKKyAgICAgIGdvdG8geXlhY2NlcHRsYWI7CisKKyAgICBnb3RvIHl5YmFja3VwOworCisgICAgLyogQmFja3VwLiAgKi8KKyAgeXliYWNrdXA6CisKKyAgICAvKiBUcnkgdG8gdGFrZSBhIGRlY2lzaW9uIHdpdGhvdXQgbG9va2FoZWFkLiAgKi8KKyAgICB5eW4gPSB5eXBhY3RfW3l5c3RhdGVdOworICAgIGlmICh5eV9wYWN0X3ZhbHVlX2lzX2RlZmF1bHRfICh5eW4pKQorICAgICAgZ290byB5eWRlZmF1bHQ7CisKKyAgICAvKiBSZWFkIGEgbG9va2FoZWFkIHRva2VuLiAgKi8KKyAgICBpZiAoeXljaGFyID09IHl5ZW1wdHlfKQorICAgICAgeworICAgICAgICBZWUNERUJVRyA8PCAiUmVhZGluZyBhIHRva2VuOiAiOworICAgICAgICB5eWNoYXIgPSB5eWxleCAoJnl5bHZhbCwgJnl5bGxvYywgZHJpdmVyKTsKKyAgICAgIH0KKworICAgIC8qIENvbnZlcnQgdG9rZW4gdG8gaW50ZXJuYWwgZm9ybS4gICovCisgICAgaWYgKHl5Y2hhciA8PSB5eWVvZl8pCisgICAgICB7CisJeXljaGFyID0geXl0b2tlbiA9IHl5ZW9mXzsKKwlZWUNERUJVRyA8PCAiTm93IGF0IGVuZCBvZiBpbnB1dC4iIDw8IHN0ZDo6ZW5kbDsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisJeXl0b2tlbiA9IHl5dHJhbnNsYXRlXyAoeXljaGFyKTsKKwlZWV9TWU1CT0xfUFJJTlQgKCJOZXh0IHRva2VuIGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CisgICAgICB9CisKKyAgICAvKiBJZiB0aGUgcHJvcGVyIGFjdGlvbiBvbiBzZWVpbmcgdG9rZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KKyAgICAgICBkZXRlY3QgYW4gZXJyb3IsIHRha2UgdGhhdCBhY3Rpb24uICAqLworICAgIHl5biArPSB5eXRva2VuOworICAgIGlmICh5eW4gPCAwIHx8IHl5bGFzdF8gPCB5eW4gfHwgeXljaGVja19beXluXSAhPSB5eXRva2VuKQorICAgICAgZ290byB5eWRlZmF1bHQ7CisKKyAgICAvKiBSZWR1Y2Ugb3IgZXJyb3IuICAqLworICAgIHl5biA9IHl5dGFibGVfW3l5bl07CisgICAgaWYgKHl5biA8PSAwKQorICAgICAgeworCWlmICh5eV90YWJsZV92YWx1ZV9pc19lcnJvcl8gKHl5bikpCisJICBnb3RvIHl5ZXJybGFiOworCXl5biA9IC15eW47CisJZ290byB5eXJlZHVjZTsKKyAgICAgIH0KKworICAgIC8qIFNoaWZ0IHRoZSBsb29rYWhlYWQgdG9rZW4uICAqLworICAgIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CisKKyAgICAvKiBEaXNjYXJkIHRoZSB0b2tlbiBiZWluZyBzaGlmdGVkLiAgKi8KKyAgICB5eWNoYXIgPSB5eWVtcHR5XzsKKworICAgIHl5c2VtYW50aWNfc3RhY2tfLnB1c2ggKHl5bHZhbCk7CisgICAgeXlsb2NhdGlvbl9zdGFja18ucHVzaCAoeXlsbG9jKTsKKworICAgIC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3IKKyAgICAgICBzdGF0dXMuICAqLworICAgIGlmICh5eWVycnN0YXR1c18pCisgICAgICAtLXl5ZXJyc3RhdHVzXzsKKworICAgIHl5c3RhdGUgPSB5eW47CisgICAgZ290byB5eW5ld3N0YXRlOworCisgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisgIHwgeXlkZWZhdWx0IC0tIGRvIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUuICB8CisgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgIHl5ZGVmYXVsdDoKKyAgICB5eW4gPSB5eWRlZmFjdF9beXlzdGF0ZV07CisgICAgaWYgKHl5biA9PSAwKQorICAgICAgZ290byB5eWVycmxhYjsKKyAgICBnb3RvIHl5cmVkdWNlOworCisgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisgIHwgeXlyZWR1Y2UgLS0gRG8gYSByZWR1Y3Rpb24uICB8CisgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgIHl5cmVkdWNlOgorICAgIHl5bGVuID0geXlyMl9beXluXTsKKyAgICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoKKyAgICAgICBgJCQgPSAkMScuICBPdGhlcndpc2UsIHVzZSB0aGUgdG9wIG9mIHRoZSBzdGFjay4KKworICAgICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8gZ2FyYmFnZS4KKyAgICAgICBUaGlzIGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24KKyAgICAgICB1c2VycyBzaG91bGQgbm90IHJlbHkgdXBvbiBpdC4gICovCisgICAgaWYgKHl5bGVuKQorICAgICAgeXl2YWwgPSB5eXNlbWFudGljX3N0YWNrX1t5eWxlbiAtIDFdOworICAgIGVsc2UKKyAgICAgIHl5dmFsID0geXlzZW1hbnRpY19zdGFja19bMF07CisKKyAgICAvLyBDb21wdXRlIHRoZSBkZWZhdWx0IEAkLgorICAgIHsKKyAgICAgIHNsaWNlPGxvY2F0aW9uX3R5cGUsIGxvY2F0aW9uX3N0YWNrX3R5cGU+IHNsaWNlICh5eWxvY2F0aW9uX3N0YWNrXywgeXlsZW4pOworICAgICAgWVlMTE9DX0RFRkFVTFQgKHl5bG9jLCBzbGljZSwgeXlsZW4pOworICAgIH0KKworICAgIC8vIFBlcmZvcm0gdGhlIHJlZHVjdGlvbi4KKyAgICBZWV9SRURVQ0VfUFJJTlQgKHl5bik7CisgICAgc3dpdGNoICh5eW4pCisgICAgICB7CisgICAgICAgICAgY2FzZSAyOgorLyogTGluZSA2NzAgb2YgbGFscjEuY2MgICovCisjbGluZSAxMDMyMiAiLi4vLi4vZG9jL2Jpc29uLnRleGkiCisgICAgeyBkcml2ZXIucmVzdWx0ID0gKHl5c2VtYW50aWNfc3RhY2tfWygyKSAtICgyKV0uaXZhbCk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDM6CisvKiBMaW5lIDY3MCBvZiBsYWxyMS5jYyAgKi8KKyNsaW5lIDEwMzI1ICIuLi8uLi9kb2MvYmlzb24udGV4aSIKKyAgICB7fQorICAgIGJyZWFrOworCisgIGNhc2UgNDoKKy8qIExpbmUgNjcwIG9mIGxhbHIxLmNjICAqLworI2xpbmUgMTAzMjYgIi4uLy4uL2RvYy9iaXNvbi50ZXhpIgorICAgIHt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1OgorLyogTGluZSA2NzAgb2YgbGFscjEuY2MgICovCisjbGluZSAxMDMzMCAiLi4vLi4vZG9jL2Jpc29uLnRleGkiCisgICAgeyBkcml2ZXIudmFyaWFibGVzWyooeXlzZW1hbnRpY19zdGFja19bKDMpIC0gKDEpXS5zdmFsKV0gPSAoeXlzZW1hbnRpY19zdGFja19bKDMpIC0gKDMpXS5pdmFsKTsgZGVsZXRlICh5eXNlbWFudGljX3N0YWNrX1soMykgLSAoMSldLnN2YWwpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2OgorLyogTGluZSA2NzAgb2YgbGFscjEuY2MgICovCisjbGluZSAxMDMzNCAiLi4vLi4vZG9jL2Jpc29uLnRleGkiCisgICAgeyAoeXl2YWwuaXZhbCkgPSAoeXlzZW1hbnRpY19zdGFja19bKDMpIC0gKDEpXS5pdmFsKSArICh5eXNlbWFudGljX3N0YWNrX1soMykgLSAoMyldLml2YWwpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3OgorLyogTGluZSA2NzAgb2YgbGFscjEuY2MgICovCisjbGluZSAxMDMzNSAiLi4vLi4vZG9jL2Jpc29uLnRleGkiCisgICAgeyAoeXl2YWwuaXZhbCkgPSAoeXlzZW1hbnRpY19zdGFja19bKDMpIC0gKDEpXS5pdmFsKSAtICh5eXNlbWFudGljX3N0YWNrX1soMykgLSAoMyldLml2YWwpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4OgorLyogTGluZSA2NzAgb2YgbGFscjEuY2MgICovCisjbGluZSAxMDMzNiAiLi4vLi4vZG9jL2Jpc29uLnRleGkiCisgICAgeyAoeXl2YWwuaXZhbCkgPSAoeXlzZW1hbnRpY19zdGFja19bKDMpIC0gKDEpXS5pdmFsKSAqICh5eXNlbWFudGljX3N0YWNrX1soMykgLSAoMyldLml2YWwpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5OgorLyogTGluZSA2NzAgb2YgbGFscjEuY2MgICovCisjbGluZSAxMDMzNyAiLi4vLi4vZG9jL2Jpc29uLnRleGkiCisgICAgeyAoeXl2YWwuaXZhbCkgPSAoeXlzZW1hbnRpY19zdGFja19bKDMpIC0gKDEpXS5pdmFsKSAvICh5eXNlbWFudGljX3N0YWNrX1soMykgLSAoMyldLml2YWwpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDoKKy8qIExpbmUgNjcwIG9mIGxhbHIxLmNjICAqLworI2xpbmUgMTAzMzggIi4uLy4uL2RvYy9iaXNvbi50ZXhpIgorICAgIHsgKHl5dmFsLml2YWwpID0gZHJpdmVyLnZhcmlhYmxlc1sqKHl5c2VtYW50aWNfc3RhY2tfWygxKSAtICgxKV0uc3ZhbCldOyBkZWxldGUgKHl5c2VtYW50aWNfc3RhY2tfWygxKSAtICgxKV0uc3ZhbCk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDExOgorLyogTGluZSA2NzAgb2YgbGFscjEuY2MgICovCisjbGluZSAxMDMzOSAiLi4vLi4vZG9jL2Jpc29uLnRleGkiCisgICAgeyAoeXl2YWwuaXZhbCkgPSAoeXlzZW1hbnRpY19zdGFja19bKDEpIC0gKDEpXS5pdmFsKTsgfQorICAgIGJyZWFrOworCisKKy8qIExpbmUgNjcwIG9mIGxhbHIxLmNjICAqLworI2xpbmUgNTU5ICIuLi8uLi8uLi8uLi9leGFtcGxlcy9jYWxjKysvY2FsYysrLXBhcnNlci5jYyIKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgLyogVXNlciBzZW1hbnRpYyBhY3Rpb25zIHNvbWV0aW1lcyBhbHRlciB5eWNoYXIsIGFuZCB0aGF0IHJlcXVpcmVzCisgICAgICAgdGhhdCB5eXRva2VuIGJlIHVwZGF0ZWQgd2l0aCB0aGUgbmV3IHRyYW5zbGF0aW9uLiAgV2UgdGFrZSB0aGUKKyAgICAgICBhcHByb2FjaCBvZiB0cmFuc2xhdGluZyBpbW1lZGlhdGVseSBiZWZvcmUgZXZlcnkgdXNlIG9mIHl5dG9rZW4uCisgICAgICAgT25lIGFsdGVybmF0aXZlIGlzIHRyYW5zbGF0aW5nIGhlcmUgYWZ0ZXIgZXZlcnkgc2VtYW50aWMgYWN0aW9uLAorICAgICAgIGJ1dCB0aGF0IHRyYW5zbGF0aW9uIHdvdWxkIGJlIG1pc3NlZCBpZiB0aGUgc2VtYW50aWMgYWN0aW9uCisgICAgICAgaW52b2tlcyBZWUFCT1JULCBZWUFDQ0VQVCwgb3IgWVlFUlJPUiBpbW1lZGlhdGVseSBhZnRlciBhbHRlcmluZworICAgICAgIHl5Y2hhci4gIEluIHRoZSBjYXNlIG9mIFlZQUJPUlQgb3IgWVlBQ0NFUFQsIGFuIGluY29ycmVjdAorICAgICAgIGRlc3RydWN0b3IgbWlnaHQgdGhlbiBiZSBpbnZva2VkIGltbWVkaWF0ZWx5LiAgSW4gdGhlIGNhc2Ugb2YKKyAgICAgICBZWUVSUk9SLCBzdWJzZXF1ZW50IHBhcnNlciBhY3Rpb25zIG1pZ2h0IGxlYWQgdG8gYW4gaW5jb3JyZWN0CisgICAgICAgZGVzdHJ1Y3RvciBjYWxsIG9yIHZlcmJvc2Ugc3ludGF4IGVycm9yIG1lc3NhZ2UgYmVmb3JlIHRoZQorICAgICAgIGxvb2thaGVhZCBpcyB0cmFuc2xhdGVkLiAgKi8KKyAgICBZWV9TWU1CT0xfUFJJTlQgKCItPiAkJCA9IiwgeXlyMV9beXluXSwgJnl5dmFsLCAmeXlsb2MpOworCisgICAgeXlwb3BfICh5eWxlbik7CisgICAgeXlsZW4gPSAwOworICAgIFlZX1NUQUNLX1BSSU5UICgpOworCisgICAgeXlzZW1hbnRpY19zdGFja18ucHVzaCAoeXl2YWwpOworICAgIHl5bG9jYXRpb25fc3RhY2tfLnB1c2ggKHl5bG9jKTsKKworICAgIC8qIFNoaWZ0IHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4gICovCisgICAgeXluID0geXlyMV9beXluXTsKKyAgICB5eXN0YXRlID0geXlwZ290b19beXluIC0geXludG9rZW5zX10gKyB5eXN0YXRlX3N0YWNrX1swXTsKKyAgICBpZiAoMCA8PSB5eXN0YXRlICYmIHl5c3RhdGUgPD0geXlsYXN0XworCSYmIHl5Y2hlY2tfW3l5c3RhdGVdID09IHl5c3RhdGVfc3RhY2tfWzBdKQorICAgICAgeXlzdGF0ZSA9IHl5dGFibGVfW3l5c3RhdGVdOworICAgIGVsc2UKKyAgICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9fW3l5biAtIHl5bnRva2Vuc19dOworICAgIGdvdG8geXluZXdzdGF0ZTsKKworICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyAgfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvciB8CisgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICB5eWVycmxhYjoKKyAgICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBsYXRlc3QgbG9va2FoZWFkIHRyYW5zbGF0aW9uLiAgU2VlIGNvbW1lbnRzIGF0CisgICAgICAgdXNlciBzZW1hbnRpYyBhY3Rpb25zIGZvciB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuICAqLworICAgIHl5dG9rZW4gPSB5eXRyYW5zbGF0ZV8gKHl5Y2hhcik7CisKKyAgICAvKiBJZiBub3QgYWxyZWFkeSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0aGlzIGVycm9yLiAgKi8KKyAgICBpZiAoIXl5ZXJyc3RhdHVzXykKKyAgICAgIHsKKwkrK3l5bmVycnNfOworCWlmICh5eWNoYXIgPT0geXllbXB0eV8pCisJICB5eXRva2VuID0geXllbXB0eV87CisJZXJyb3IgKHl5bGxvYywgeXlzeW50YXhfZXJyb3JfICh5eXN0YXRlLCB5eXRva2VuKSk7CisgICAgICB9CisKKyAgICB5eWVycm9yX3JhbmdlWzFdID0geXlsbG9jOworICAgIGlmICh5eWVycnN0YXR1c18gPT0gMykKKyAgICAgIHsKKyAgICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBhbgorICAgICAgICAgICBlcnJvciwgZGlzY2FyZCBpdC4gICovCisgICAgICAgIGlmICh5eWNoYXIgPD0geXllb2ZfKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFJldHVybiBmYWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dC4gICovCisgICAgICAgICAgICBpZiAoeXljaGFyID09IHl5ZW9mXykKKyAgICAgICAgICAgICAgWVlBQk9SVDsKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICB5eWRlc3RydWN0XyAoIkVycm9yOiBkaXNjYXJkaW5nIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CisgICAgICAgICAgICB5eWNoYXIgPSB5eWVtcHR5XzsKKyAgICAgICAgICB9CisgICAgICB9CisKKyAgICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKKyAgICAgICB0b2tlbi4gICovCisgICAgZ290byB5eWVycmxhYjE7CisKKworICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyAgfCB5eWVycm9ybGFiIC0tIGVycm9yIHJhaXNlZCBleHBsaWNpdGx5IGJ5IFlZRVJST1IuICB8CisgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICB5eWVycm9ybGFiOgorCisgICAgLyogUGFjaWZ5IGNvbXBpbGVycyBsaWtlIEdDQyB3aGVuIHRoZSB1c2VyIGNvZGUgbmV2ZXIgaW52b2tlcworICAgICAgIFlZRVJST1IgYW5kIHRoZSBsYWJlbCB5eWVycm9ybGFiIHRoZXJlZm9yZSBuZXZlciBhcHBlYXJzIGluIHVzZXIKKyAgICAgICBjb2RlLiAgKi8KKyAgICBpZiAoZmFsc2UpCisgICAgICBnb3RvIHl5ZXJyb3JsYWI7CisKKyAgICB5eWVycm9yX3JhbmdlWzFdID0geXlsb2NhdGlvbl9zdGFja19beXlsZW4gLSAxXTsKKyAgICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCisgICAgICAgdGhpcyBZWUVSUk9SLiAgKi8KKyAgICB5eXBvcF8gKHl5bGVuKTsKKyAgICB5eWxlbiA9IDA7CisgICAgeXlzdGF0ZSA9IHl5c3RhdGVfc3RhY2tfWzBdOworICAgIGdvdG8geXllcnJsYWIxOworCisgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyAgfCB5eWVycmxhYjEgLS0gY29tbW9uIGNvZGUgZm9yIGJvdGggc3ludGF4IGVycm9yIGFuZCBZWUVSUk9SLiAgfAorICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgIHl5ZXJybGFiMToKKyAgICB5eWVycnN0YXR1c18gPSAzOwkvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMuICAqLworCisgICAgZm9yICg7OykKKyAgICAgIHsKKwl5eW4gPSB5eXBhY3RfW3l5c3RhdGVdOworCWlmICgheXlfcGFjdF92YWx1ZV9pc19kZWZhdWx0XyAoeXluKSkKKwl7CisJICB5eW4gKz0geXl0ZXJyb3JfOworCSAgaWYgKDAgPD0geXluICYmIHl5biA8PSB5eWxhc3RfICYmIHl5Y2hlY2tfW3l5bl0gPT0geXl0ZXJyb3JfKQorCSAgICB7CisJICAgICAgeXluID0geXl0YWJsZV9beXluXTsKKwkgICAgICBpZiAoMCA8IHl5bikKKwkJYnJlYWs7CisJICAgIH0KKwl9CisKKwkvKiBQb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbi4gICovCisJaWYgKHl5c3RhdGVfc3RhY2tfLmhlaWdodCAoKSA9PSAxKQorCSAgWVlBQk9SVDsKKworCXl5ZXJyb3JfcmFuZ2VbMV0gPSB5eWxvY2F0aW9uX3N0YWNrX1swXTsKKwl5eWRlc3RydWN0XyAoIkVycm9yOiBwb3BwaW5nIiwKKwkJICAgICB5eXN0b3NfW3l5c3RhdGVdLAorCQkgICAgICZ5eXNlbWFudGljX3N0YWNrX1swXSwgJnl5bG9jYXRpb25fc3RhY2tfWzBdKTsKKwl5eXBvcF8gKCk7CisJeXlzdGF0ZSA9IHl5c3RhdGVfc3RhY2tfWzBdOworCVlZX1NUQUNLX1BSSU5UICgpOworICAgICAgfQorCisgICAgeXllcnJvcl9yYW5nZVsyXSA9IHl5bGxvYzsKKyAgICAvLyBVc2luZyBZWUxMT0MgaXMgdGVtcHRpbmcsIGJ1dCB3b3VsZCBjaGFuZ2UgdGhlIGxvY2F0aW9uIG9mCisgICAgLy8gdGhlIGxvb2thaGVhZC4gIFlZTE9DIGlzIGF2YWlsYWJsZSB0aG91Z2guCisgICAgWVlMTE9DX0RFRkFVTFQgKHl5bG9jLCB5eWVycm9yX3JhbmdlLCAyKTsKKyAgICB5eXNlbWFudGljX3N0YWNrXy5wdXNoICh5eWx2YWwpOworICAgIHl5bG9jYXRpb25fc3RhY2tfLnB1c2ggKHl5bG9jKTsKKworICAgIC8qIFNoaWZ0IHRoZSBlcnJvciB0b2tlbi4gICovCisgICAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXN0b3NfW3l5bl0sCisJCSAgICAgJnl5c2VtYW50aWNfc3RhY2tfWzBdLCAmeXlsb2NhdGlvbl9zdGFja19bMF0pOworCisgICAgeXlzdGF0ZSA9IHl5bjsKKyAgICBnb3RvIHl5bmV3c3RhdGU7CisKKyAgICAvKiBBY2NlcHQuICAqLworICB5eWFjY2VwdGxhYjoKKyAgICB5eXJlc3VsdCA9IDA7CisgICAgZ290byB5eXJldHVybjsKKworICAgIC8qIEFib3J0LiAgKi8KKyAgeXlhYm9ydGxhYjoKKyAgICB5eXJlc3VsdCA9IDE7CisgICAgZ290byB5eXJldHVybjsKKworICB5eXJldHVybjoKKyAgICBpZiAoeXljaGFyICE9IHl5ZW1wdHlfKQorICAgICAgeworICAgICAgICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBsYXRlc3QgbG9va2FoZWFkIHRyYW5zbGF0aW9uLiAgU2VlIGNvbW1lbnRzCisgICAgICAgICAgIGF0IHVzZXIgc2VtYW50aWMgYWN0aW9ucyBmb3Igd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LiAgKi8KKyAgICAgICAgeXl0b2tlbiA9IHl5dHJhbnNsYXRlXyAoeXljaGFyKTsKKyAgICAgICAgeXlkZXN0cnVjdF8gKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsIHl5dG9rZW4sICZ5eWx2YWwsCisgICAgICAgICAgICAgICAgICAgICAmeXlsbG9jKTsKKyAgICAgIH0KKworICAgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAgICB0aGlzIFlZQUJPUlQgb3IgWVlBQ0NFUFQuICAqLworICAgIHl5cG9wXyAoeXlsZW4pOworICAgIHdoaWxlICgxIDwgeXlzdGF0ZV9zdGFja18uaGVpZ2h0ICgpKQorICAgICAgeworICAgICAgICB5eWRlc3RydWN0XyAoIkNsZWFudXA6IHBvcHBpbmciLAorICAgICAgICAgICAgICAgICAgICAgeXlzdG9zX1t5eXN0YXRlX3N0YWNrX1swXV0sCisgICAgICAgICAgICAgICAgICAgICAmeXlzZW1hbnRpY19zdGFja19bMF0sCisgICAgICAgICAgICAgICAgICAgICAmeXlsb2NhdGlvbl9zdGFja19bMF0pOworICAgICAgICB5eXBvcF8gKCk7CisgICAgICB9CisKKyAgICByZXR1cm4geXlyZXN1bHQ7CisgICAgfQorICAgIGNhdGNoICguLi4pCisgICAgICB7CisgICAgICAgIFlZQ0RFQlVHIDw8ICJFeGNlcHRpb24gY2F1Z2h0OiBjbGVhbmluZyBsb29rYWhlYWQgYW5kIHN0YWNrIgorICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CisgICAgICAgIC8vIERvIG5vdCB0cnkgdG8gZGlzcGxheSB0aGUgdmFsdWVzIG9mIHRoZSByZWNsYWltZWQgc3ltYm9scywKKyAgICAgICAgLy8gYXMgdGhlaXIgcHJpbnRlciBtaWdodCB0aHJvdyBhbiBleGNlcHRpb24uCisgICAgICAgIGlmICh5eWNoYXIgIT0geXllbXB0eV8pCisgICAgICAgICAgeworICAgICAgICAgICAgLyogTWFrZSBzdXJlIHdlIGhhdmUgbGF0ZXN0IGxvb2thaGVhZCB0cmFuc2xhdGlvbi4gIFNlZQorICAgICAgICAgICAgICAgY29tbWVudHMgYXQgdXNlciBzZW1hbnRpYyBhY3Rpb25zIGZvciB3aHkgdGhpcyBpcworICAgICAgICAgICAgICAgbmVjZXNzYXJ5LiAgKi8KKyAgICAgICAgICAgIHl5dG9rZW4gPSB5eXRyYW5zbGF0ZV8gKHl5Y2hhcik7CisgICAgICAgICAgICB5eWRlc3RydWN0XyAoWVlfTlVMTCwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CisgICAgICAgICAgfQorCisgICAgICAgIHdoaWxlICgxIDwgeXlzdGF0ZV9zdGFja18uaGVpZ2h0ICgpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHl5ZGVzdHJ1Y3RfIChZWV9OVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgIHl5c3Rvc19beXlzdGF0ZV9zdGFja19bMF1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICZ5eXNlbWFudGljX3N0YWNrX1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAmeXlsb2NhdGlvbl9zdGFja19bMF0pOworICAgICAgICAgICAgeXlwb3BfICgpOworICAgICAgICAgIH0KKyAgICAgICAgdGhyb3c7CisgICAgICB9CisgIH0KKworICAvLyBHZW5lcmF0ZSBhbiBlcnJvciBtZXNzYWdlLgorICBzdGQ6OnN0cmluZworICBjYWxjeHhfcGFyc2VyOjp5eXN5bnRheF9lcnJvcl8gKGludCB5eXN0YXRlLCBpbnQgeXl0b2tlbikKKyAgeworICAgIHN0ZDo6c3RyaW5nIHl5cmVzOworICAgIC8vIE51bWJlciBvZiByZXBvcnRlZCB0b2tlbnMgKG9uZSBmb3IgdGhlICJ1bmV4cGVjdGVkIiwgb25lIHBlcgorICAgIC8vICJleHBlY3RlZCIpLgorICAgIHNpemVfdCB5eWNvdW50ID0gMDsKKyAgICAvLyBJdHMgbWF4aW11bS4KKyAgICBlbnVtIHsgWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSA9IDUgfTsKKyAgICAvLyBBcmd1bWVudHMgb2YgeXlmb3JtYXQuCisgICAgY2hhciBjb25zdCAqeXlhcmdbWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTV07CisKKyAgICAvKiBUaGVyZSBhcmUgbWFueSBwb3NzaWJpbGl0aWVzIGhlcmUgdG8gY29uc2lkZXI6CisgICAgICAgLSBJZiB0aGlzIHN0YXRlIGlzIGEgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24sIHRoZW4KKyAgICAgICAgIHRoZSBvbmx5IHdheSB0aGlzIGZ1bmN0aW9uIHdhcyBpbnZva2VkIGlzIGlmIHRoZSBkZWZhdWx0IGFjdGlvbgorICAgICAgICAgaXMgYW4gZXJyb3IgYWN0aW9uLiAgSW4gdGhhdCBjYXNlLCBkb24ndCBjaGVjayBmb3IgZXhwZWN0ZWQKKyAgICAgICAgIHRva2VucyBiZWNhdXNlIHRoZXJlIGFyZSBub25lLgorICAgICAgIC0gVGhlIG9ubHkgd2F5IHRoZXJlIGNhbiBiZSBubyBsb29rYWhlYWQgcHJlc2VudCAoaW4geXl0b2tlbikgaXMKKyAgICAgICAgIGlmIHRoaXMgc3RhdGUgaXMgYSBjb25zaXN0ZW50IHN0YXRlIHdpdGggYSBkZWZhdWx0IGFjdGlvbi4KKyAgICAgICAgIFRodXMsIGRldGVjdGluZyB0aGUgYWJzZW5jZSBvZiBhIGxvb2thaGVhZCBpcyBzdWZmaWNpZW50IHRvCisgICAgICAgICBkZXRlcm1pbmUgdGhhdCB0aGVyZSBpcyBubyB1bmV4cGVjdGVkIG9yIGV4cGVjdGVkIHRva2VuIHRvCisgICAgICAgICByZXBvcnQuICBJbiB0aGF0IGNhc2UsIGp1c3QgcmVwb3J0IGEgc2ltcGxlICJzeW50YXggZXJyb3IiLgorICAgICAgIC0gRG9uJ3QgYXNzdW1lIHRoZXJlIGlzbid0IGEgbG9va2FoZWFkIGp1c3QgYmVjYXVzZSB0aGlzIHN0YXRlIGlzCisgICAgICAgICBhIGNvbnNpc3RlbnQgc3RhdGUgd2l0aCBhIGRlZmF1bHQgYWN0aW9uLiAgVGhlcmUgbWlnaHQgaGF2ZQorICAgICAgICAgYmVlbiBhIHByZXZpb3VzIGluY29uc2lzdGVudCBzdGF0ZSwgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEKKyAgICAgICAgIG5vbi1kZWZhdWx0IGFjdGlvbiwgb3IgdXNlciBzZW1hbnRpYyBhY3Rpb24gdGhhdCBtYW5pcHVsYXRlZAorICAgICAgICAgeXljaGFyLgorICAgICAgIC0gT2YgY291cnNlLCB0aGUgZXhwZWN0ZWQgdG9rZW4gbGlzdCBkZXBlbmRzIG9uIHN0YXRlcyB0byBoYXZlCisgICAgICAgICBjb3JyZWN0IGxvb2thaGVhZCBpbmZvcm1hdGlvbiwgYW5kIGl0IGRlcGVuZHMgb24gdGhlIHBhcnNlciBub3QKKyAgICAgICAgIHRvIHBlcmZvcm0gZXh0cmEgcmVkdWN0aW9ucyBhZnRlciBmZXRjaGluZyBhIGxvb2thaGVhZCBmcm9tIHRoZQorICAgICAgICAgc2Nhbm5lciBhbmQgYmVmb3JlIGRldGVjdGluZyBhIHN5bnRheCBlcnJvci4gIFRodXMsIHN0YXRlCisgICAgICAgICBtZXJnaW5nIChmcm9tIExBTFIgb3IgSUVMUikgYW5kIGRlZmF1bHQgcmVkdWN0aW9ucyBjb3JydXB0IHRoZQorICAgICAgICAgZXhwZWN0ZWQgdG9rZW4gbGlzdC4gIEhvd2V2ZXIsIHRoZSBsaXN0IGlzIGNvcnJlY3QgZm9yCisgICAgICAgICBjYW5vbmljYWwgTFIgd2l0aCBvbmUgZXhjZXB0aW9uOiBpdCB3aWxsIHN0aWxsIGNvbnRhaW4gYW55CisgICAgICAgICB0b2tlbiB0aGF0IHdpbGwgbm90IGJlIGFjY2VwdGVkIGR1ZSB0byBhbiBlcnJvciBhY3Rpb24gaW4gYQorICAgICAgICAgbGF0ZXIgc3RhdGUuCisgICAgKi8KKyAgICBpZiAoeXl0b2tlbiAhPSB5eWVtcHR5XykKKyAgICAgIHsKKyAgICAgICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVfW3l5dG9rZW5dOworICAgICAgICBpbnQgeXluID0geXlwYWN0X1t5eXN0YXRlXTsKKyAgICAgICAgaWYgKCF5eV9wYWN0X3ZhbHVlX2lzX2RlZmF1bHRfICh5eW4pKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFN0YXJ0IFlZWCBhdCAtWVlOIGlmIG5lZ2F0aXZlIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4KKyAgICAgICAgICAgICAgIFlZQ0hFQ0suICBJbiBvdGhlciB3b3Jkcywgc2tpcCB0aGUgZmlyc3QgLVlZTiBhY3Rpb25zIGZvcgorICAgICAgICAgICAgICAgdGhpcyBzdGF0ZSBiZWNhdXNlIHRoZXkgYXJlIGRlZmF1bHQgYWN0aW9ucy4gICovCisgICAgICAgICAgICBpbnQgeXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5biA6IDA7CisgICAgICAgICAgICAvKiBTdGF5IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAgKi8KKyAgICAgICAgICAgIGludCB5eWNoZWNrbGltID0geXlsYXN0XyAtIHl5biArIDE7CisgICAgICAgICAgICBpbnQgeXl4ZW5kID0geXljaGVja2xpbSA8IHl5bnRva2Vuc18gPyB5eWNoZWNrbGltIDogeXludG9rZW5zXzsKKyAgICAgICAgICAgIGZvciAoaW50IHl5eCA9IHl5eGJlZ2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQorICAgICAgICAgICAgICBpZiAoeXljaGVja19beXl4ICsgeXluXSA9PSB5eXggJiYgeXl4ICE9IHl5dGVycm9yXworICAgICAgICAgICAgICAgICAgJiYgIXl5X3RhYmxlX3ZhbHVlX2lzX2Vycm9yXyAoeXl0YWJsZV9beXl4ICsgeXluXSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgaWYgKHl5Y291bnQgPT0gWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIHl5Y291bnQgPSAxOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHl5YXJnW3l5Y291bnQrK10gPSB5eXRuYW1lX1t5eXhdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICB9CisKKyAgICBjaGFyIGNvbnN0KiB5eWZvcm1hdCA9IFlZX05VTEw7CisgICAgc3dpdGNoICh5eWNvdW50KQorICAgICAgeworI2RlZmluZSBZWUNBU0VfKE4sIFMpICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY2FzZSBOOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgeXlmb3JtYXQgPSBTOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBicmVhaworICAgICAgICBZWUNBU0VfKDAsIFlZXygic3ludGF4IGVycm9yIikpOworICAgICAgICBZWUNBU0VfKDEsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIikpOworICAgICAgICBZWUNBU0VfKDIsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMiKSk7CisgICAgICAgIFlZQ0FTRV8oMywgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpKTsKKyAgICAgICAgWVlDQVNFXyg0LCBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIikpOworICAgICAgICBZWUNBU0VfKDUsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiKSk7CisjdW5kZWYgWVlDQVNFXworICAgICAgfQorCisgICAgLy8gQXJndW1lbnQgbnVtYmVyLgorICAgIHNpemVfdCB5eWkgPSAwOworICAgIGZvciAoY2hhciBjb25zdCogeXlwID0geXlmb3JtYXQ7ICp5eXA7ICsreXlwKQorICAgICAgaWYgKHl5cFswXSA9PSAnJScgJiYgeXlwWzFdID09ICdzJyAmJiB5eWkgPCB5eWNvdW50KQorICAgICAgICB7CisgICAgICAgICAgeXlyZXMgKz0geXl0bmFtZXJyXyAoeXlhcmdbeXlpKytdKTsKKyAgICAgICAgICArK3l5cDsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB5eXJlcyArPSAqeXlwOworICAgIHJldHVybiB5eXJlczsKKyAgfQorCisKKyAgLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0gSW5kZXggaW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCisgICAgIFNUQVRFLU5VTS4gICovCisgIGNvbnN0IHNpZ25lZCBjaGFyIGNhbGN4eF9wYXJzZXI6Onl5cGFjdF9uaW5mXyA9IC05OworICBjb25zdCBzaWduZWQgY2hhcgorICBjYWxjeHhfcGFyc2VyOjp5eXBhY3RfW10gPQorICB7CisgICAgICAgIC05LCAgICAxMywgICAgIDUsICAgIC05LCAgICAxNCwgICAgLTksICAgIC05LCAgICAtMSwgICAgIDcsICAgICA3LAorICAgICAgIDcsICAgICA3LCAgICAgNywgICAgLTksICAgIC0xLCAgICAgNiwgICAgIDYsICAgIC05LCAgICAtOQorICB9OworCisgIC8qIFlZREVGQUNUW1NdIC0tIGRlZmF1bHQgcmVkdWN0aW9uIG51bWJlciBpbiBzdGF0ZSBTLiAgUGVyZm9ybWVkIHdoZW4KKyAgICAgWVlUQUJMRSBkb2Vzbid0IHNwZWNpZnkgc29tZXRoaW5nIGVsc2UgdG8gZG8uICBaZXJvIG1lYW5zIHRoZQorICAgICBkZWZhdWx0IGlzIGFuIGVycm9yLiAgKi8KKyAgY29uc3QgdW5zaWduZWQgY2hhcgorICBjYWxjeHhfcGFyc2VyOjp5eWRlZmFjdF9bXSA9CisgIHsKKyAgICAgICAgIDMsICAgICAwLCAgICAgMCwgICAgIDEsICAgIDEwLCAgICAxMSwgICAgIDQsICAgICAyLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5CisgIH07CisKKyAgLyogWVlQR09UT1tOVEVSTS1OVU1dLiAgKi8KKyAgY29uc3Qgc2lnbmVkIGNoYXIKKyAgY2FsY3h4X3BhcnNlcjo6eXlwZ290b19bXSA9CisgIHsKKyAgICAgICAgLTksICAgIC05LCAgICAtOSwgICAgLTksICAgIC04CisgIH07CisKKyAgLyogWVlERUZHT1RPW05URVJNLU5VTV0uICAqLworICBjb25zdCBzaWduZWQgY2hhcgorICBjYWxjeHhfcGFyc2VyOjp5eWRlZmdvdG9fW10gPQorICB7CisgICAgICAgIC0xLCAgICAgMSwgICAgIDIsICAgICA2LCAgICAgNworICB9OworCisgIC8qIFlZVEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0ZSBTVEFURS1OVU0uICBJZgorICAgICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gKKyAgICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIFlZVEFCTEVfTklORl8sIHN5bnRheCBlcnJvci4gICovCisgIGNvbnN0IHNpZ25lZCBjaGFyIGNhbGN4eF9wYXJzZXI6Onl5dGFibGVfbmluZl8gPSAtMTsKKyAgY29uc3QgdW5zaWduZWQgY2hhcgorICBjYWxjeHhfcGFyc2VyOjp5eXRhYmxlX1tdID0KKyAgeworICAgICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAgNCwKKyAgICAgICA1LCAgICAxMywgICAgIDUsICAgICAzLCAgICAxMSwgICAgMTIsICAgICAwLCAgICAgOAorICB9OworCisgIC8qIFlZQ0hFQ0suICAqLworICBjb25zdCBzaWduZWQgY2hhcgorICBjYWxjeHhfcGFyc2VyOjp5eWNoZWNrX1tdID0KKyAgeworICAgICAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAgNCwKKyAgICAgICA1LCAgICAgNCwgICAgIDUsICAgICAwLCAgICAgOCwgICAgIDksICAgIC0xLCAgICAgMworICB9OworCisgIC8qIFNUT1NfW1NUQVRFLU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcKKyAgICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRFLU5VTS4gICovCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIKKyAgY2FsY3h4X3BhcnNlcjo6eXlzdG9zX1tdID0KKyAgeworICAgICAgICAgMCwgICAgMTEsICAgIDEyLCAgICAgMCwgICAgIDQsICAgICA1LCAgICAxMywgICAgMTQsICAgICAzLCAgICAgNiwKKyAgICAgICA3LCAgICAgOCwgICAgIDksICAgICA0LCAgICAxNCwgICAgMTQsICAgIDE0LCAgICAxNCwgICAgMTQKKyAgfTsKKworI2lmIFlZREVCVUcKKyAgLyogVE9LRU5fTlVNQkVSX1tZWUxFWC1OVU1dIC0tIEludGVybmFsIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZworICAgICB0byBZWUxFWC1OVU0uICAqLworICBjb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQKKyAgY2FsY3h4X3BhcnNlcjo6eXl0b2tlbl9udW1iZXJfW10gPQorICB7CisgICAgICAgICAwLCAgIDI1NiwgICAyNTcsICAgMjU4LCAgIDI1OSwgICAyNjAsICAgIDQzLCAgICA0NSwgICAgNDIsICAgIDQ3CisgIH07CisjZW5kaWYKKworICAvKiBZWVIxW1lZTl0gLS0gU3ltYm9sIG51bWJlciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAgKi8KKyAgY29uc3QgdW5zaWduZWQgY2hhcgorICBjYWxjeHhfcGFyc2VyOjp5eXIxX1tdID0KKyAgeworICAgICAgICAgMCwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTQsICAgIDE0LCAgICAxNCwKKyAgICAgIDE0LCAgICAxNAorICB9OworCisgIC8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBjb21wb3NpbmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8KKyAgY29uc3QgdW5zaWduZWQgY2hhcgorICBjYWxjeHhfcGFyc2VyOjp5eXIyX1tdID0KKyAgeworICAgICAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMCwgICAgIDIsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywKKyAgICAgICAxLCAgICAgMQorICB9OworCisKKyAgLyogWVlUTkFNRVtTWU1CT0wtTlVNXSAtLSBTdHJpbmcgbmFtZSBvZiB0aGUgc3ltYm9sIFNZTUJPTC1OVU0uCisgICAgIEZpcnN0LCB0aGUgdGVybWluYWxzLCB0aGVuLCBzdGFydGluZyBhdCBcYSB5eW50b2tlbnNfLCBub250ZXJtaW5hbHMuICAqLworICBjb25zdCBjaGFyKgorICBjb25zdCBjYWxjeHhfcGFyc2VyOjp5eXRuYW1lX1tdID0KKyAgeworICAgICJcImVuZCBvZiBmaWxlXCIiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJcIjo9XCIiLCAiXCJpZGVudGlmaWVyXCIiLAorICAiXCJudW1iZXJcIiIsICInKyciLCAiJy0nIiwgIicqJyIsICInLyciLCAiJGFjY2VwdCIsICJ1bml0IiwKKyAgImFzc2lnbm1lbnRzIiwgImFzc2lnbm1lbnQiLCAiZXhwIiwgWVlfTlVMTAorICB9OworCisjaWYgWVlERUJVRworICAvKiBZWVJIUyAtLSBBIGAtMSctc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHJ1bGVzJyBSSFMuICAqLworICBjb25zdCBjYWxjeHhfcGFyc2VyOjpyaHNfbnVtYmVyX3R5cGUKKyAgY2FsY3h4X3BhcnNlcjo6eXlyaHNfW10gPQorICB7CisgICAgICAgIDExLCAgICAgMCwgICAgLTEsICAgIDEyLCAgICAxNCwgICAgLTEsICAgIC0xLCAgICAxMiwgICAgMTMsICAgIC0xLAorICAgICAgIDQsICAgICAzLCAgICAxNCwgICAgLTEsICAgIDE0LCAgICAgNiwgICAgMTQsICAgIC0xLCAgICAxNCwgICAgIDcsCisgICAgICAxNCwgICAgLTEsICAgIDE0LCAgICAgOCwgICAgMTQsICAgIC0xLCAgICAxNCwgICAgIDksICAgIDE0LCAgICAtMSwKKyAgICAgICA0LCAgICAtMSwgICAgIDUsICAgIC0xCisgIH07CisKKyAgLyogWVlQUkhTW1lZTl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0IFJIUyBzeW1ib2wgb2YgcnVsZSBudW1iZXIgWVlOIGluCisgICAgIFlZUkhTLiAgKi8KKyAgY29uc3QgdW5zaWduZWQgY2hhcgorICBjYWxjeHhfcGFyc2VyOjp5eXByaHNfW10gPQorICB7CisgICAgICAgICAwLCAgICAgMCwgICAgIDMsICAgICA2LCAgICAgNywgICAgMTAsICAgIDE0LCAgICAxOCwgICAgMjIsICAgIDI2LAorICAgICAgMzAsICAgIDMyCisgIH07CisKKyAgLyogWVlSTElORVtZWU5dIC0tIFNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4gICovCisgIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludAorICBjYWxjeHhfcGFyc2VyOjp5eXJsaW5lX1tdID0KKyAgeworICAgICAgICAgMCwgMTAzMjIsIDEwMzIyLCAxMDMyNSwgMTAzMjYsIDEwMzI5LCAxMDMzNCwgMTAzMzUsIDEwMzM2LCAxMDMzNywKKyAgIDEwMzM4LCAxMDMzOQorICB9OworCisgIC8vIFByaW50IHRoZSBzdGF0ZSBzdGFjayBvbiB0aGUgZGVidWcgc3RyZWFtLgorICB2b2lkCisgIGNhbGN4eF9wYXJzZXI6Onl5c3RhY2tfcHJpbnRfICgpCisgIHsKKyAgICAqeXljZGVidWdfIDw8ICJTdGFjayBub3ciOworICAgIGZvciAoc3RhdGVfc3RhY2tfdHlwZTo6Y29uc3RfaXRlcmF0b3IgaSA9IHl5c3RhdGVfc3RhY2tfLmJlZ2luICgpOworCSBpICE9IHl5c3RhdGVfc3RhY2tfLmVuZCAoKTsgKytpKQorICAgICAgKnl5Y2RlYnVnXyA8PCAnICcgPDwgKmk7CisgICAgKnl5Y2RlYnVnXyA8PCBzdGQ6OmVuZGw7CisgIH0KKworICAvLyBSZXBvcnQgb24gdGhlIGRlYnVnIHN0cmVhbSB0aGF0IHRoZSBydWxlIFxhIHl5cnVsZSBpcyBnb2luZyB0byBiZSByZWR1Y2VkLgorICB2b2lkCisgIGNhbGN4eF9wYXJzZXI6Onl5X3JlZHVjZV9wcmludF8gKGludCB5eXJ1bGUpCisgIHsKKyAgICB1bnNpZ25lZCBpbnQgeXlsbm8gPSB5eXJsaW5lX1t5eXJ1bGVdOworICAgIGludCB5eW5yaHMgPSB5eXIyX1t5eXJ1bGVdOworICAgIC8qIFByaW50IHRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQsIGFuZCB0aGVpciByZXN1bHQuICAqLworICAgICp5eWNkZWJ1Z18gPDwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgIiA8PCB5eXJ1bGUgLSAxCisJICAgICAgIDw8ICIgKGxpbmUgIiA8PCB5eWxubyA8PCAiKToiIDw8IHN0ZDo6ZW5kbDsKKyAgICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KKyAgICBmb3IgKGludCB5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQorICAgICAgWVlfU1lNQk9MX1BSSU5UICgiICAgJCIgPDwgeXlpICsgMSA8PCAiID0iLAorCQkgICAgICAgeXlyaHNfW3l5cHJoc19beXlydWxlXSArIHl5aV0sCisJCSAgICAgICAmKHl5c2VtYW50aWNfc3RhY2tfWyh5eW5yaHMpIC0gKHl5aSArIDEpXSksCisJCSAgICAgICAmKHl5bG9jYXRpb25fc3RhY2tfWyh5eW5yaHMpIC0gKHl5aSArIDEpXSkpOworICB9CisjZW5kaWYgLy8gWVlERUJVRworCisgIC8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLworICBjYWxjeHhfcGFyc2VyOjp0b2tlbl9udW1iZXJfdHlwZQorICBjYWxjeHhfcGFyc2VyOjp5eXRyYW5zbGF0ZV8gKGludCB0KQorICB7CisgICAgc3RhdGljCisgICAgY29uc3QgdG9rZW5fbnVtYmVyX3R5cGUKKyAgICB0cmFuc2xhdGVfdGFibGVbXSA9CisgICAgeworICAgICAgICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgOCwgICAgIDYsICAgICAyLCAgICAgNywgICAgIDIsICAgICA5LCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCisgICAgICAgNQorICAgIH07CisgICAgaWYgKCh1bnNpZ25lZCBpbnQpIHQgPD0geXl1c2VyX3Rva2VuX251bWJlcl9tYXhfKQorICAgICAgcmV0dXJuIHRyYW5zbGF0ZV90YWJsZVt0XTsKKyAgICBlbHNlCisgICAgICByZXR1cm4geXl1bmRlZl90b2tlbl87CisgIH0KKworICBjb25zdCBpbnQgY2FsY3h4X3BhcnNlcjo6eXllb2ZfID0gMDsKKyAgY29uc3QgaW50IGNhbGN4eF9wYXJzZXI6Onl5bGFzdF8gPSAxNzsKKyAgY29uc3QgaW50IGNhbGN4eF9wYXJzZXI6Onl5bm50c18gPSA1OworICBjb25zdCBpbnQgY2FsY3h4X3BhcnNlcjo6eXllbXB0eV8gPSAtMjsKKyAgY29uc3QgaW50IGNhbGN4eF9wYXJzZXI6Onl5ZmluYWxfID0gMzsKKyAgY29uc3QgaW50IGNhbGN4eF9wYXJzZXI6Onl5dGVycm9yXyA9IDE7CisgIGNvbnN0IGludCBjYWxjeHhfcGFyc2VyOjp5eWVycmNvZGVfID0gMjU2OworICBjb25zdCBpbnQgY2FsY3h4X3BhcnNlcjo6eXludG9rZW5zXyA9IDEwOworCisgIGNvbnN0IHVuc2lnbmVkIGludCBjYWxjeHhfcGFyc2VyOjp5eXVzZXJfdG9rZW5fbnVtYmVyX21heF8gPSAyNjA7CisgIGNvbnN0IGNhbGN4eF9wYXJzZXI6OnRva2VuX251bWJlcl90eXBlIGNhbGN4eF9wYXJzZXI6Onl5dW5kZWZfdG9rZW5fID0gMjsKKworCit9IC8vIHl5CisvKiBMaW5lIDExNDEgb2YgbGFscjEuY2MgICovCisjbGluZSAxMDcwICIuLi8uLi8uLi8uLi9leGFtcGxlcy9jYWxjKysvY2FsYysrLXBhcnNlci5jYyIKKy8qIExpbmUgMTE0MiBvZiBsYWxyMS5jYyAgKi8KKyNsaW5lIDEwMzQwICIuLi8uLi9kb2MvYmlzb24udGV4aSIKKworI2xpbmUgMTAzNDkgIi4uLy4uL2RvYy9iaXNvbi50ZXhpIgordm9pZAoreXk6OmNhbGN4eF9wYXJzZXI6OmVycm9yIChjb25zdCB5eTo6Y2FsY3h4X3BhcnNlcjo6bG9jYXRpb25fdHlwZSYgbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG0pCit7CisgIGRyaXZlci5lcnJvciAobCwgbSk7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9jYWxjKysvY2FsYysrLXBhcnNlci5oaCBiL2V4YW1wbGVzL2NhbGMrKy9jYWxjKystcGFyc2VyLmhoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhN2I0NzEKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9jYWxjKysvY2FsYysrLXBhcnNlci5oaApAQCAtMCwwICsxLDI4MyBAQAorLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNi45MC44LWQ0ZmUuICAqLworCisvKiBTa2VsZXRvbiBpbnRlcmZhY2UgZm9yIEJpc29uIExBTFIoMSkgcGFyc2VycyBpbiBDKysKKyAgIAorICAgICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucworICAgcGFydCBvciBhbGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKKyAgIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFzIHRoYXQgd29yayBpc24ndCBpdHNlbGYgYQorICAgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24gb3IgYSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YKKyAgIGFzIGEgcGFyc2VyIHNrZWxldG9uLiAgQWx0ZXJuYXRpdmVseSwgaWYgeW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUKKyAgIHRoZSBwYXJzZXIgc2tlbGV0b24gaXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMKKyAgIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhlIHJlc3VsdGluZworICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLgorICAgCisgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCisgICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCisKKy8qKgorICoqIFxmaWxlIC4uLy4uLy4uLy4uL2V4YW1wbGVzL2NhbGMrKy9jYWxjKystcGFyc2VyLmhoCisgKiogRGVmaW5lIHRoZSB5eTo6cGFyc2VyIGNsYXNzLgorICovCisKKy8qIEMrKyBMQUxSKDEpIHBhcnNlciBza2VsZXRvbiB3cml0dGVuIGJ5IEFraW0gRGVtYWlsbGUuICAqLworCisjaWZuZGVmIFlZX1lZX0VYQU1QTEVTX0NBTENfQ0FMQ19QQVJTRVJfSEhfSU5DTFVERUQKKyMgZGVmaW5lIFlZX1lZX0VYQU1QTEVTX0NBTENfQ0FMQ19QQVJTRVJfSEhfSU5DTFVERUQKKworLyogIiVjb2RlIHJlcXVpcmVzIiBibG9ja3MuICAqLworLyogTGluZSAzMyBvZiBsYWxyMS5jYyAgKi8KKyNsaW5lIDEwMjE0ICIuLi8uLi9kb2MvYmlzb24udGV4aSIKKworIyBpbmNsdWRlIDxzdHJpbmc+CitjbGFzcyBjYWxjeHhfZHJpdmVyOworCisKKy8qIExpbmUgMzMgb2YgbGFscjEuY2MgICovCisjbGluZSA1MyAiLi4vLi4vLi4vLi4vZXhhbXBsZXMvY2FsYysrL2NhbGMrKy1wYXJzZXIuaGgiCisKKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlICJzdGFjay5oaCIKKyNpbmNsdWRlICJsb2NhdGlvbi5oaCIKKworLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KKyNpZm5kZWYgWVlERUJVRworIyBkZWZpbmUgWVlERUJVRyAxCisjZW5kaWYKKworCituYW1lc3BhY2UgeXkgeworLyogTGluZSAzMyBvZiBsYWxyMS5jYyAgKi8KKyNsaW5lIDY5ICIuLi8uLi8uLi8uLi9leGFtcGxlcy9jYWxjKysvY2FsYysrLXBhcnNlci5oaCIKKworICAvLy8gQSBCaXNvbiBwYXJzZXIuCisgIGNsYXNzIGNhbGN4eF9wYXJzZXIKKyAgeworICBwdWJsaWM6CisgICAgLy8vIFN5bWJvbCBzZW1hbnRpYyB2YWx1ZXMuCisjaWZuZGVmIFlZU1RZUEUKKyAgICB1bmlvbiBzZW1hbnRpY190eXBlCisgICAgeworLyogTGluZSAzMyBvZiBsYWxyMS5jYyAgKi8KKyNsaW5lIDEwMjY3ICIuLi8uLi9kb2MvYmlzb24udGV4aSIKKworICBpbnQgICAgICAgICAgaXZhbDsKKyAgc3RkOjpzdHJpbmcgKnN2YWw7CisKKworLyogTGluZSAzMyBvZiBsYWxyMS5jYyAgKi8KKyNsaW5lIDg3ICIuLi8uLi8uLi8uLi9leGFtcGxlcy9jYWxjKysvY2FsYysrLXBhcnNlci5oaCIKKyAgICB9OworI2Vsc2UKKyAgICB0eXBlZGVmIFlZU1RZUEUgc2VtYW50aWNfdHlwZTsKKyNlbmRpZgorICAgIC8vLyBTeW1ib2wgbG9jYXRpb25zLgorICAgIHR5cGVkZWYgbG9jYXRpb24gbG9jYXRpb25fdHlwZTsKKyAgICAvLy8gVG9rZW5zLgorICAgIHN0cnVjdCB0b2tlbgorICAgIHsKKyAgICAgIC8qIFRva2Vucy4gICovCisgICBlbnVtIHl5dG9rZW50eXBlIHsKKyAgICAgRU5EID0gMCwKKyAgICAgQVNTSUdOID0gMjU4LAorICAgICBJREVOVElGSUVSID0gMjU5LAorICAgICBOVU1CRVIgPSAyNjAKKyAgIH07CisKKyAgICB9OworICAgIC8vLyBUb2tlbiB0eXBlLgorICAgIHR5cGVkZWYgdG9rZW46Onl5dG9rZW50eXBlIHRva2VuX3R5cGU7CisKKyAgICAvLy8gQnVpbGQgYSBwYXJzZXIgb2JqZWN0LgorICAgIGNhbGN4eF9wYXJzZXIgKGNhbGN4eF9kcml2ZXImIGRyaXZlcl95eWFyZyk7CisgICAgdmlydHVhbCB+Y2FsY3h4X3BhcnNlciAoKTsKKworICAgIC8vLyBQYXJzZS4KKyAgICAvLy8gXHJldHVybnMgIDAgaWZmIHBhcnNpbmcgc3VjY2VlZGVkLgorICAgIHZpcnR1YWwgaW50IHBhcnNlICgpOworCisjaWYgWVlERUJVRworICAgIC8vLyBUaGUgY3VycmVudCBkZWJ1Z2dpbmcgc3RyZWFtLgorICAgIHN0ZDo6b3N0cmVhbSYgZGVidWdfc3RyZWFtICgpIGNvbnN0OworICAgIC8vLyBTZXQgdGhlIGN1cnJlbnQgZGVidWdnaW5nIHN0cmVhbS4KKyAgICB2b2lkIHNldF9kZWJ1Z19zdHJlYW0gKHN0ZDo6b3N0cmVhbSAmKTsKKworICAgIC8vLyBUeXBlIGZvciBkZWJ1Z2dpbmcgbGV2ZWxzLgorICAgIHR5cGVkZWYgaW50IGRlYnVnX2xldmVsX3R5cGU7CisgICAgLy8vIFRoZSBjdXJyZW50IGRlYnVnZ2luZyBsZXZlbC4KKyAgICBkZWJ1Z19sZXZlbF90eXBlIGRlYnVnX2xldmVsICgpIGNvbnN0OworICAgIC8vLyBTZXQgdGhlIGN1cnJlbnQgZGVidWdnaW5nIGxldmVsLgorICAgIHZvaWQgc2V0X2RlYnVnX2xldmVsIChkZWJ1Z19sZXZlbF90eXBlIGwpOworI2VuZGlmCisKKyAgcHJpdmF0ZToKKyAgICAvLy8gUmVwb3J0IGEgc3ludGF4IGVycm9yLgorICAgIC8vLyBccGFyYW0gbG9jICAgIHdoZXJlIHRoZSBzeW50YXggZXJyb3IgaXMgZm91bmQuCisgICAgLy8vIFxwYXJhbSBtc2cgICAgYSBkZXNjcmlwdGlvbiBvZiB0aGUgc3ludGF4IGVycm9yLgorICAgIHZpcnR1YWwgdm9pZCBlcnJvciAoY29uc3QgbG9jYXRpb25fdHlwZSYgbG9jLCBjb25zdCBzdGQ6OnN0cmluZyYgbXNnKTsKKworICAgIC8vLyBHZW5lcmF0ZSBhbiBlcnJvciBtZXNzYWdlLgorICAgIC8vLyBccGFyYW0gc3RhdGUgICB0aGUgc3RhdGUgd2hlcmUgdGhlIGVycm9yIG9jY3VycmVkLgorICAgIC8vLyBccGFyYW0gdG9rICAgICB0aGUgbG9va2FoZWFkIHRva2VuLgorICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgeXlzeW50YXhfZXJyb3JfIChpbnQgeXlzdGF0ZSwgaW50IHRvayk7CisKKyNpZiBZWURFQlVHCisgICAgLy8vIFxicmllZiBSZXBvcnQgYSBzeW1ib2wgdmFsdWUgb24gdGhlIGRlYnVnIHN0cmVhbS4KKyAgICAvLy8gXHBhcmFtIHl5dHlwZSAgICAgICBUaGUgdG9rZW4gdHlwZS4KKyAgICAvLy8gXHBhcmFtIHl5dmFsdWVwICAgICBJdHMgc2VtYW50aWMgdmFsdWUuCisgICAgLy8vIFxwYXJhbSB5eWxvY2F0aW9ucCAgSXRzIGxvY2F0aW9uLgorICAgIHZpcnR1YWwgdm9pZCB5eV9zeW1ib2xfdmFsdWVfcHJpbnRfIChpbnQgeXl0eXBlLAorCQkJCQkgY29uc3Qgc2VtYW50aWNfdHlwZSogeXl2YWx1ZXAsCisJCQkJCSBjb25zdCBsb2NhdGlvbl90eXBlKiB5eWxvY2F0aW9ucCk7CisgICAgLy8vIFxicmllZiBSZXBvcnQgYSBzeW1ib2wgb24gdGhlIGRlYnVnIHN0cmVhbS4KKyAgICAvLy8gXHBhcmFtIHl5dHlwZSAgICAgICBUaGUgdG9rZW4gdHlwZS4KKyAgICAvLy8gXHBhcmFtIHl5dmFsdWVwICAgICBJdHMgc2VtYW50aWMgdmFsdWUuCisgICAgLy8vIFxwYXJhbSB5eWxvY2F0aW9ucCAgSXRzIGxvY2F0aW9uLgorICAgIHZpcnR1YWwgdm9pZCB5eV9zeW1ib2xfcHJpbnRfIChpbnQgeXl0eXBlLAorCQkJCSAgIGNvbnN0IHNlbWFudGljX3R5cGUqIHl5dmFsdWVwLAorCQkJCSAgIGNvbnN0IGxvY2F0aW9uX3R5cGUqIHl5bG9jYXRpb25wKTsKKyNlbmRpZgorCisKKyAgICAvLy8gU3RhdGUgbnVtYmVycy4KKyAgICB0eXBlZGVmIGludCBzdGF0ZV90eXBlOworICAgIC8vLyBTdGF0ZSBzdGFjayB0eXBlLgorICAgIHR5cGVkZWYgc3RhY2s8c3RhdGVfdHlwZT4gICAgc3RhdGVfc3RhY2tfdHlwZTsKKyAgICAvLy8gU2VtYW50aWMgdmFsdWUgc3RhY2sgdHlwZS4KKyAgICB0eXBlZGVmIHN0YWNrPHNlbWFudGljX3R5cGU+IHNlbWFudGljX3N0YWNrX3R5cGU7CisgICAgLy8vIGxvY2F0aW9uIHN0YWNrIHR5cGUuCisgICAgdHlwZWRlZiBzdGFjazxsb2NhdGlvbl90eXBlPiBsb2NhdGlvbl9zdGFja190eXBlOworCisgICAgLy8vIFRoZSBzdGF0ZSBzdGFjay4KKyAgICBzdGF0ZV9zdGFja190eXBlIHl5c3RhdGVfc3RhY2tfOworICAgIC8vLyBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suCisgICAgc2VtYW50aWNfc3RhY2tfdHlwZSB5eXNlbWFudGljX3N0YWNrXzsKKyAgICAvLy8gVGhlIGxvY2F0aW9uIHN0YWNrLgorICAgIGxvY2F0aW9uX3N0YWNrX3R5cGUgeXlsb2NhdGlvbl9zdGFja187CisKKyAgICAvLy8gV2hldGhlciB0aGUgZ2l2ZW4gXGMgeXlwYWN0XyB2YWx1ZSBpbmRpY2F0ZXMgYSBkZWZhdWx0ZWQgc3RhdGUuCisgICAgLy8vIFxwYXJhbSB5eXZhbHVlICAgdGhlIHZhbHVlIHRvIGNoZWNrCisgICAgc3RhdGljIGJvb2wgeXlfcGFjdF92YWx1ZV9pc19kZWZhdWx0XyAoaW50IHl5dmFsdWUpOworCisgICAgLy8vIFdoZXRoZXIgdGhlIGdpdmVuIFxjIHl5dGFibGVfIHZhbHVlIGluZGljYXRlcyBhIHN5bnRheCBlcnJvci4KKyAgICAvLy8gXHBhcmFtIHl5dmFsdWUgICB0aGUgdmFsdWUgdG8gY2hlY2sKKyAgICBzdGF0aWMgYm9vbCB5eV90YWJsZV92YWx1ZV9pc19lcnJvcl8gKGludCB5eXZhbHVlKTsKKworICAgIC8vLyBJbnRlcm5hbCBzeW1ib2wgbnVtYmVycy4KKyAgICB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdG9rZW5fbnVtYmVyX3R5cGU7CisgICAgLyogVGFibGVzLiAgKi8KKyAgICAvLy8gRm9yIGEgc3RhdGUsIHRoZSBpbmRleCBpbiBcYSB5eXRhYmxlXyBvZiBpdHMgcG9ydGlvbi4KKyAgICBzdGF0aWMgY29uc3Qgc2lnbmVkIGNoYXIgeXlwYWN0X1tdOworICAgIHN0YXRpYyBjb25zdCBzaWduZWQgY2hhciB5eXBhY3RfbmluZl87CisKKyAgICAvLy8gRm9yIGEgc3RhdGUsIGRlZmF1bHQgcmVkdWN0aW9uIG51bWJlci4KKyAgICAvLy8gVW5sZXNzXGEgIHl5dGFibGVfIHNwZWNpZmllcyBzb21ldGhpbmcgZWxzZSB0byBkby4KKyAgICAvLy8gWmVybyBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4KKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB5eWRlZmFjdF9bXTsKKworICAgIHN0YXRpYyBjb25zdCBzaWduZWQgY2hhciB5eXBnb3RvX1tdOworICAgIHN0YXRpYyBjb25zdCBzaWduZWQgY2hhciB5eWRlZmdvdG9fW107CisKKyAgICAvLy8gV2hhdCB0byBkbyBpbiBhIHN0YXRlLgorICAgIC8vLyBcYSB5eXRhYmxlX1t5eXBhY3RfW3NdXTogd2hhdCB0byBkbyBpbiBzdGF0ZSBcYSBzLgorICAgIC8vLyAtIGlmIHBvc2l0aXZlLCBzaGlmdCB0aGF0IHRva2VuLgorICAgIC8vLyAtIGlmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2ggbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4KKyAgICAvLy8gLSBpZiB6ZXJvLCBkbyB3aGF0IFlZREVGQUNUIHNheXMuCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgeXl0YWJsZV9bXTsKKyAgICBzdGF0aWMgY29uc3Qgc2lnbmVkIGNoYXIgeXl0YWJsZV9uaW5mXzsKKworICAgIHN0YXRpYyBjb25zdCBzaWduZWQgY2hhciB5eWNoZWNrX1tdOworCisgICAgLy8vIEZvciBhIHN0YXRlLCBpdHMgYWNjZXNzaW5nIHN5bWJvbC4KKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB5eXN0b3NfW107CisKKyAgICAvLy8gRm9yIGEgcnVsZSwgaXRzIExIUy4KKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB5eXIxX1tdOworICAgIC8vLyBGb3IgYSBydWxlLCBpdHMgUkhTIGxlbmd0aC4KKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB5eXIyX1tdOyAKKworICAgIC8vLyBDb252ZXJ0IHRoZSBzeW1ib2wgbmFtZSBcYSBuIHRvIGEgZm9ybSBzdWl0YWJsZSBmb3IgYSBkaWFnbm9zdGljLgorICAgIHN0YXRpYyBzdGQ6OnN0cmluZyB5eXRuYW1lcnJfIChjb25zdCBjaGFyICpuKTsKKworCisgICAgLy8vIEZvciBhIHN5bWJvbCwgaXRzIG5hbWUgaW4gY2xlYXIuCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHl5dG5hbWVfW107CisjaWYgWVlERUJVRworICAgIC8vLyBBIHR5cGUgdG8gc3RvcmUgc3ltYm9sIG51bWJlcnMgYW5kIC0xLgorICAgIHR5cGVkZWYgc2lnbmVkIGNoYXIgcmhzX251bWJlcl90eXBlOworICAgIC8vLyBBIGAtMSctc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHJ1bGVzJyBSSFMuCisgICAgc3RhdGljIGNvbnN0IHJoc19udW1iZXJfdHlwZSB5eXJoc19bXTsKKyAgICAvLy8gRm9yIGVhY2ggcnVsZSwgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBSSFMgc3ltYm9sIGluIFxhIHl5cmhzXy4KKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB5eXByaHNfW107CisgICAgLy8vIEZvciBlYWNoIHJ1bGUsIGl0cyBzb3VyY2UgbGluZSBudW1iZXIuCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCB5eXJsaW5lX1tdOworICAgIC8vLyBGb3IgZWFjaCBzY2FubmVyIHRva2VuIG51bWJlciwgaXRzIHN5bWJvbCBudW1iZXIuCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCB5eXRva2VuX251bWJlcl9bXTsKKyAgICAvLy8gUmVwb3J0IG9uIHRoZSBkZWJ1ZyBzdHJlYW0gdGhhdCB0aGUgcnVsZSBcYSByIGlzIGdvaW5nIHRvIGJlIHJlZHVjZWQuCisgICAgdmlydHVhbCB2b2lkIHl5X3JlZHVjZV9wcmludF8gKGludCByKTsKKyAgICAvLy8gUHJpbnQgdGhlIHN0YXRlIHN0YWNrIG9uIHRoZSBkZWJ1ZyBzdHJlYW0uCisgICAgdmlydHVhbCB2b2lkIHl5c3RhY2tfcHJpbnRfICgpOworCisgICAgLyogRGVidWdnaW5nLiAgKi8KKyAgICBpbnQgeXlkZWJ1Z187CisgICAgc3RkOjpvc3RyZWFtKiB5eWNkZWJ1Z187CisjZW5kaWYKKworICAgIC8vLyBDb252ZXJ0IGEgc2Nhbm5lciB0b2tlbiBudW1iZXIgXGEgdCB0byBhIHN5bWJvbCBudW1iZXIuCisgICAgdG9rZW5fbnVtYmVyX3R5cGUgeXl0cmFuc2xhdGVfIChpbnQgdCk7CisKKyAgICAvLy8gXGJyaWVmIFJlY2xhaW0gdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHRvIGEgc3ltYm9sLgorICAgIC8vLyBccGFyYW0geXltc2cgICAgICAgIFdoeSB0aGlzIHRva2VuIGlzIHJlY2xhaW1lZC4KKyAgICAvLy8gICAgICAgICAgICAgICAgICAgICBJZiBudWxsLCBkbyBub3QgZGlzcGxheSB0aGUgc3ltYm9sLCBqdXN0IGZyZWUgaXQuCisgICAgLy8vIFxwYXJhbSB5eXR5cGUgICAgICAgVGhlIHN5bWJvbCB0eXBlLgorICAgIC8vLyBccGFyYW0geXl2YWx1ZXAgICAgIEl0cyBzZW1hbnRpYyB2YWx1ZS4KKyAgICAvLy8gXHBhcmFtIHl5bG9jYXRpb25wICBJdHMgbG9jYXRpb24uCisgICAgaW5saW5lIHZvaWQgeXlkZXN0cnVjdF8gKGNvbnN0IGNoYXIqIHl5bXNnLAorCQkJICAgICBpbnQgeXl0eXBlLAorCQkJICAgICBzZW1hbnRpY190eXBlKiB5eXZhbHVlcCwKKwkJCSAgICAgbG9jYXRpb25fdHlwZSogeXlsb2NhdGlvbnApOworCisgICAgLy8vIFBvcCBcYSBuIHN5bWJvbHMgdGhlIHRocmVlIHN0YWNrcy4KKyAgICBpbmxpbmUgdm9pZCB5eXBvcF8gKHVuc2lnbmVkIGludCBuID0gMSk7CisKKyAgICAvKiBDb25zdGFudHMuICAqLworICAgIHN0YXRpYyBjb25zdCBpbnQgeXllb2ZfOworICAgIC8qIExBU1RfIC0tIExhc3QgaW5kZXggaW4gVEFCTEVfLiAgKi8KKyAgICBzdGF0aWMgY29uc3QgaW50IHl5bGFzdF87CisgICAgc3RhdGljIGNvbnN0IGludCB5eW5udHNfOworICAgIHN0YXRpYyBjb25zdCBpbnQgeXllbXB0eV87CisgICAgc3RhdGljIGNvbnN0IGludCB5eWZpbmFsXzsKKyAgICBzdGF0aWMgY29uc3QgaW50IHl5dGVycm9yXzsKKyAgICBzdGF0aWMgY29uc3QgaW50IHl5ZXJyY29kZV87CisgICAgc3RhdGljIGNvbnN0IGludCB5eW50b2tlbnNfOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgeXl1c2VyX3Rva2VuX251bWJlcl9tYXhfOworICAgIHN0YXRpYyBjb25zdCB0b2tlbl9udW1iZXJfdHlwZSB5eXVuZGVmX3Rva2VuXzsKKworICAgIC8qIFVzZXIgYXJndW1lbnRzLiAgKi8KKyAgICBjYWxjeHhfZHJpdmVyJiBkcml2ZXI7CisgIH07CisKK30gLy8geXkKKy8qIExpbmUgMzMgb2YgbGFscjEuY2MgICovCisjbGluZSAyODAgIi4uLy4uLy4uLy4uL2V4YW1wbGVzL2NhbGMrKy9jYWxjKystcGFyc2VyLmhoIgorCisKKworI2VuZGlmIC8qICFZWV9ZWV9FWEFNUExFU19DQUxDX0NBTENfUEFSU0VSX0hIX0lOQ0xVREVEICAqLwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvY2FsYysrL2NhbGMrKy1wYXJzZXIuc3RhbXAgYi9leGFtcGxlcy9jYWxjKysvY2FsYysrLXBhcnNlci5zdGFtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvY2FsYysrL2NhbGMrKy1wYXJzZXIuc3RhbXAKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2NhbGMrKy9jYWxjKystcGFyc2VyLnl5IGIvZXhhbXBsZXMvY2FsYysrL2NhbGMrKy1wYXJzZXIueXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkxMzJmNQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2NhbGMrKy9jYWxjKystcGFyc2VyLnl5CkBAIC0wLDAgKzEsNzUgQEAKKyNsaW5lIDEwMTk2ICIuLi8uLi9kb2MvYmlzb24udGV4aSIKKyVza2VsZXRvbiAibGFscjEuY2MiIC8qIC0qLSBDKysgLSotICovCislcmVxdWlyZSAiMi42LjkwLjgtZDRmZSIKKyVkZWZpbmVzCislZGVmaW5lIHBhcnNlcl9jbGFzc19uYW1lICJjYWxjeHhfcGFyc2VyIgorI2xpbmUgMTAyMTQgIi4uLy4uL2RvYy9iaXNvbi50ZXhpIgorJWNvZGUgcmVxdWlyZXMgeworIyBpbmNsdWRlIDxzdHJpbmc+CitjbGFzcyBjYWxjeHhfZHJpdmVyOworfQorI2xpbmUgMTAyMjcgIi4uLy4uL2RvYy9iaXNvbi50ZXhpIgorLy8gVGhlIHBhcnNpbmcgY29udGV4dC4KKyVwYXJzZS1wYXJhbSB7IGNhbGN4eF9kcml2ZXImIGRyaXZlciB9CislbGV4LXBhcmFtICAgeyBjYWxjeHhfZHJpdmVyJiBkcml2ZXIgfQorI2xpbmUgMTAyNDAgIi4uLy4uL2RvYy9iaXNvbi50ZXhpIgorJWxvY2F0aW9ucworJWluaXRpYWwtYWN0aW9uCit7CisgIC8vIEluaXRpYWxpemUgdGhlIGluaXRpYWwgbG9jYXRpb24uCisgIEAkLmJlZ2luLmZpbGVuYW1lID0gQCQuZW5kLmZpbGVuYW1lID0gJmRyaXZlci5maWxlOworfTsKKyNsaW5lIDEwMjU1ICIuLi8uLi9kb2MvYmlzb24udGV4aSIKKyVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKyNsaW5lIDEwMjY1ICIuLi8uLi9kb2MvYmlzb24udGV4aSIKKy8vIFN5bWJvbHMuCisldW5pb24KK3sKKyAgaW50ICAgICAgICAgIGl2YWw7CisgIHN0ZDo6c3RyaW5nICpzdmFsOworfTsKKyNsaW5lIDEwMjgwICIuLi8uLi9kb2MvYmlzb24udGV4aSIKKyVjb2RlIHsKKyMgaW5jbHVkZSAiY2FsYysrLWRyaXZlci5oaCIKK30KKyNsaW5lIDEwMjk1ICIuLi8uLi9kb2MvYmlzb24udGV4aSIKKyV0b2tlbiAgICAgICAgRU5EICAgICAgMCAiZW5kIG9mIGZpbGUiCisldG9rZW4gICAgICAgIEFTU0lHTiAgICAgIjo9IgorJXRva2VuIDxzdmFsPiBJREVOVElGSUVSICJpZGVudGlmaWVyIgorJXRva2VuIDxpdmFsPiBOVU1CRVIgICAgICJudW1iZXIiCisldHlwZSAgPGl2YWw+IGV4cAorI2xpbmUgMTAzMDkgIi4uLy4uL2RvYy9iaXNvbi50ZXhpIgorJXByaW50ZXIgICAgeyB5eW91dHB1dCA8PCAqJCQ7IH0gImlkZW50aWZpZXIiCislZGVzdHJ1Y3RvciB7IGRlbGV0ZSAkJDsgfSAiaWRlbnRpZmllciIKKworJXByaW50ZXIgICAgeyB5eW91dHB1dCA8PCAkJDsgfSA8aXZhbD4KKyNsaW5lIDEwMzIwICIuLi8uLi9kb2MvYmlzb24udGV4aSIKKyUlCislc3RhcnQgdW5pdDsKK3VuaXQ6IGFzc2lnbm1lbnRzIGV4cCAgeyBkcml2ZXIucmVzdWx0ID0gJDI7IH07CisKK2Fzc2lnbm1lbnRzOgorICAvKiBOb3RoaW5nLiAgKi8gICAgICAgIHt9Cit8IGFzc2lnbm1lbnRzIGFzc2lnbm1lbnQge307CisKK2Fzc2lnbm1lbnQ6CisgICAgICJpZGVudGlmaWVyIiAiOj0iIGV4cAorICAgICAgIHsgZHJpdmVyLnZhcmlhYmxlc1sqJDFdID0gJDM7IGRlbGV0ZSAkMTsgfTsKKworJWxlZnQgJysnICctJzsKKyVsZWZ0ICcqJyAnLyc7CitleHA6IGV4cCAnKycgZXhwICAgeyAkJCA9ICQxICsgJDM7IH0KKyAgIHwgZXhwICctJyBleHAgICB7ICQkID0gJDEgLSAkMzsgfQorICAgfCBleHAgJyonIGV4cCAgIHsgJCQgPSAkMSAqICQzOyB9CisgICB8IGV4cCAnLycgZXhwICAgeyAkJCA9ICQxIC8gJDM7IH0KKyAgIHwgImlkZW50aWZpZXIiICB7ICQkID0gZHJpdmVyLnZhcmlhYmxlc1sqJDFdOyBkZWxldGUgJDE7IH0KKyAgIHwgIm51bWJlciIgICAgICB7ICQkID0gJDE7IH07CislJQorI2xpbmUgMTAzNDkgIi4uLy4uL2RvYy9iaXNvbi50ZXhpIgordm9pZAoreXk6OmNhbGN4eF9wYXJzZXI6OmVycm9yIChjb25zdCB5eTo6Y2FsY3h4X3BhcnNlcjo6bG9jYXRpb25fdHlwZSYgbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG0pCit7CisgIGRyaXZlci5lcnJvciAobCwgbSk7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9jYWxjKysvY2FsYysrLXNjYW5uZXIuY2MgYi9leGFtcGxlcy9jYWxjKysvY2FsYysrLXNjYW5uZXIuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlkOTM0OQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2NhbGMrKy9jYWxjKystc2Nhbm5lci5jYwpAQCAtMCwwICsxLDIwODYgQEAKKworI2xpbmUgMyAiY2FsYysrLXNjYW5uZXIuY2MiCisKKyNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGludAorCisvKiBBIGxleGljYWwgc2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAqLworCisvKiAlbm90LWZvci1oZWFkZXIgKi8KKworLyogJWlmLWMtb25seSAqLworLyogJWlmLW5vdC1yZWVudHJhbnQgKi8KKworLyogJWVuZGlmICovCisvKiAlZW5kaWYgKi8KKy8qICVvay1mb3ItaGVhZGVyICovCisKKyNkZWZpbmUgRkxFWF9TQ0FOTkVSCisjZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCisjZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVSU0lPTiA1CisjZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNworI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAKKyNkZWZpbmUgRkxFWF9CRVRBCisjZW5kaWYKKworLyogJWlmLWMrKy1vbmx5ICovCisvKiAlZW5kaWYgKi8KKworLyogJWlmLWMtb25seSAqLworICAgIAorLyogJWVuZGlmICovCisKKy8qICVpZi1jLW9ubHkgKi8KKworLyogJWVuZGlmICovCisKKy8qIEZpcnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmljIGlzc3Vlcy4gKi8KKworLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJzLiAqLworLyogJWlmLWMtb25seSAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKy8qICVlbmRpZiAqLworCisvKiAlaWYtdGFibGVzLXNlcmlhbGl6YXRpb24gKi8KKy8qICVlbmRpZiAqLworLyogZW5kIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KKworLyogJWlmLWMtb3ItYysrICovCisvKiBmbGV4IGludGVnZXIgdHlwZSBkZWZpbml0aW9ucyAqLworCisjaWZuZGVmIEZMRVhJTlRfSAorI2RlZmluZSBGTEVYSU5UX0gKKworLyogQzk5IHN5c3RlbXMgaGF2ZSA8aW50dHlwZXMuaD4uIE5vbi1DOTkgc3lzdGVtcyBtYXkgb3IgbWF5IG5vdC4gKi8KKworI2lmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAorCisvKiBDOTkgc2F5cyB0byBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyBiZWZvcmUgaW5jbHVkaW5nIHN0ZGludC5oLAorICogaWYgeW91IHdhbnQgdGhlIGxpbWl0IChtYXgvbWluKSBtYWNyb3MgZm9yIGludCB0eXBlcy4gCisgKi8KKyNpZm5kZWYgX19TVERDX0xJTUlUX01BQ1JPUworI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDEKKyNlbmRpZgorCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KK3R5cGVkZWYgaW50OF90IGZsZXhfaW50OF90OwordHlwZWRlZiB1aW50OF90IGZsZXhfdWludDhfdDsKK3R5cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90OwordHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OworI2Vsc2UKK3R5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7Cit0eXBlZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OworCisvKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMuICovCisjaWZuZGVmIElOVDhfTUlOCisjZGVmaW5lIElOVDhfTUlOICAgICAgICAgICAgICAgKC0xMjgpCisjZW5kaWYKKyNpZm5kZWYgSU5UMTZfTUlOCisjZGVmaW5lIElOVDE2X01JTiAgICAgICAgICAgICAgKC0zMjc2Ny0xKQorI2VuZGlmCisjaWZuZGVmIElOVDMyX01JTgorI2RlZmluZSBJTlQzMl9NSU4gICAgICAgICAgICAgICgtMjE0NzQ4MzY0Ny0xKQorI2VuZGlmCisjaWZuZGVmIElOVDhfTUFYCisjZGVmaW5lIElOVDhfTUFYICAgICAgICAgICAgICAgKDEyNykKKyNlbmRpZgorI2lmbmRlZiBJTlQxNl9NQVgKKyNkZWZpbmUgSU5UMTZfTUFYICAgICAgICAgICAgICAoMzI3NjcpCisjZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUFYCisjZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgICAgKDIxNDc0ODM2NDcpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDhfTUFYCisjZGVmaW5lIFVJTlQ4X01BWCAgICAgICAgICAgICAgKDI1NVUpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDE2X01BWAorI2RlZmluZSBVSU5UMTZfTUFYICAgICAgICAgICAgICg2NTUzNVUpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDMyX01BWAorI2RlZmluZSBVSU5UMzJfTUFYICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKKyNlbmRpZgorCisjZW5kaWYgLyogISBDOTkgKi8KKworI2VuZGlmIC8qICEgRkxFWElOVF9IICovCisKKy8qICVlbmRpZiAqLworCisvKiAlaWYtYysrLW9ubHkgKi8KKy8qICVlbmRpZiAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKKworLyogVGhlICJjb25zdCIgc3RvcmFnZS1jbGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KKyNkZWZpbmUgWVlfVVNFX0NPTlNUCisKKyNlbHNlCS8qICEgX19jcGx1c3BsdXMgKi8KKworLyogQzk5IHJlcXVpcmVzIF9fU1REQ19fIHRvIGJlIGRlZmluZWQgYXMgMS4gKi8KKyNpZiBkZWZpbmVkIChfX1NURENfXykKKworI2RlZmluZSBZWV9VU0VfQ09OU1QKKworI2VuZGlmCS8qIGRlZmluZWQgKF9fU1REQ19fKSAqLworI2VuZGlmCS8qICEgX19jcGx1c3BsdXMgKi8KKworI2lmZGVmIFlZX1VTRV9DT05TVAorI2RlZmluZSB5eWNvbnN0IGNvbnN0CisjZWxzZQorI2RlZmluZSB5eWNvbnN0CisjZW5kaWYKKworLyogJW5vdC1mb3ItaGVhZGVyICovCisKKy8qIFJldHVybmVkIHVwb24gZW5kLW9mLWZpbGUuICovCisjZGVmaW5lIFlZX05VTEwgMAorLyogJW9rLWZvci1oZWFkZXIgKi8KKworLyogJW5vdC1mb3ItaGVhZGVyICovCisKKy8qIFByb21vdGVzIGEgcG9zc2libHkgbmVnYXRpdmUsIHBvc3NpYmx5IHNpZ25lZCBjaGFyIHRvIGFuIHVuc2lnbmVkCisgKiBpbnRlZ2VyIGZvciB1c2UgYXMgYW4gYXJyYXkgaW5kZXguICBJZiB0aGUgc2lnbmVkIGNoYXIgaXMgbmVnYXRpdmUsCisgKiB3ZSB3YW50IHRvIGluc3RlYWQgdHJlYXQgaXQgYXMgYW4gOC1iaXQgdW5zaWduZWQgY2hhciwgaGVuY2UgdGhlCisgKiBkb3VibGUgY2FzdC4KKyAqLworI2RlZmluZSBZWV9TQ19UT19VSShjKSAoKHVuc2lnbmVkIGludCkgKHVuc2lnbmVkIGNoYXIpIGMpCisvKiAlb2stZm9yLWhlYWRlciAqLworCisvKiAlaWYtcmVlbnRyYW50ICovCisvKiAlZW5kaWYgKi8KKworLyogJWlmLW5vdC1yZWVudHJhbnQgKi8KKworLyogJWVuZGlmICovCisKKy8qIEVudGVyIGEgc3RhcnQgY29uZGl0aW9uLiAgVGhpcyBtYWNybyByZWFsbHkgb3VnaHQgdG8gdGFrZSBhIHBhcmFtZXRlciwKKyAqIGJ1dCB3ZSBkbyBpdCB0aGUgZGlzZ3VzdGluZyBjcnVmdHkgd2F5IGZvcmNlZCBvbiB1cyBieSB0aGUgKCktbGVzcworICogZGVmaW5pdGlvbiBvZiBCRUdJTi4KKyAqLworI2RlZmluZSBCRUdJTiAoeXlfc3RhcnQpID0gMSArIDIgKgorCisvKiBUcmFuc2xhdGUgdGhlIGN1cnJlbnQgc3RhcnQgc3RhdGUgaW50byBhIHZhbHVlIHRoYXQgY2FuIGJlIGxhdGVyIGhhbmRlZAorICogdG8gQkVHSU4gdG8gcmV0dXJuIHRvIHRoZSBzdGF0ZS4gIFRoZSBZWVNUQVRFIGFsaWFzIGlzIGZvciBsZXgKKyAqIGNvbXBhdGliaWxpdHkuCisgKi8KKyNkZWZpbmUgWVlfU1RBUlQgKCgoeXlfc3RhcnQpIC0gMSkgLyAyKQorI2RlZmluZSBZWVNUQVRFIFlZX1NUQVJUCisKKy8qIEFjdGlvbiBudW1iZXIgZm9yIEVPRiBydWxlIG9mIGEgZ2l2ZW4gc3RhcnQgc3RhdGUuICovCisjZGVmaW5lIFlZX1NUQVRFX0VPRihzdGF0ZSkgKFlZX0VORF9PRl9CVUZGRVIgKyBzdGF0ZSArIDEpCisKKy8qIFNwZWNpYWwgYWN0aW9uIG1lYW5pbmcgInN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgZmlsZSIuICovCisjZGVmaW5lIFlZX05FV19GSUxFIHl5cmVzdGFydCh5eWluICApCisKKyNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUl9DSEFSIDAKKworLyogU2l6ZSBvZiBkZWZhdWx0IGlucHV0IGJ1ZmZlci4gKi8KKyNpZm5kZWYgWVlfQlVGX1NJWkUKKyNkZWZpbmUgWVlfQlVGX1NJWkUgMTYzODQKKyNlbmRpZgorCisvKiBUaGUgc3RhdGUgYnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRlIHBlciBjaGFyYWN0ZXIgaW4gdGhlIG1haW4gYnVmZmVyLgorICovCisjZGVmaW5lIFlZX1NUQVRFX0JVRl9TSVpFICAgKChZWV9CVUZfU0laRSArIDIpICogc2l6ZW9mKHl5X3N0YXRlX3R5cGUpKQorCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCit0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKKyNlbmRpZgorCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CisjZW5kaWYKKworLyogJWlmLW5vdC1yZWVudHJhbnQgKi8KK2V4dGVybiB5eV9zaXplX3QgeXlsZW5nOworLyogJWVuZGlmICovCisKKy8qICVpZi1jLW9ubHkgKi8KKy8qICVpZi1ub3QtcmVlbnRyYW50ICovCitleHRlcm4gRklMRSAqeXlpbiwgKnl5b3V0OworLyogJWVuZGlmICovCisvKiAlZW5kaWYgKi8KKworI2RlZmluZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAorI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEKKyNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKKworICAgICNkZWZpbmUgWVlfTEVTU19MSU5FTk8obikKKyAgICAKKy8qIFJldHVybiBhbGwgYnV0IHRoZSBmaXJzdCAibiIgbWF0Y2hlZCBjaGFyYWN0ZXJzIGJhY2sgdG8gdGhlIGlucHV0IHN0cmVhbS4gKi8KKyNkZWZpbmUgeXlsZXNzKG4pIFwKKwlkbyBcCisJCXsgXAorCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwKKyAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKKyAgICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAorCQkqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsgXAorCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUIFwKKwkJKHl5X2NfYnVmX3ApID0geXlfY3AgPSB5eV9icCArIHl5bGVzc19tYWNyb19hcmcgLSBZWV9NT1JFX0FESjsgXAorCQlZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovIFwKKwkJfSBcCisJd2hpbGUgKCAwICkKKworI2RlZmluZSB1bnB1dChjKSB5eXVucHV0KCBjLCAoeXl0ZXh0X3B0cikgICkKKworI2lmbmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKK3N0cnVjdCB5eV9idWZmZXJfc3RhdGUKKwl7CisvKiAlaWYtYy1vbmx5ICovCisJRklMRSAqeXlfaW5wdXRfZmlsZTsKKy8qICVlbmRpZiAqLworCisvKiAlaWYtYysrLW9ubHkgKi8KKy8qICVlbmRpZiAqLworCisJY2hhciAqeXlfY2hfYnVmOwkJLyogaW5wdXQgYnVmZmVyICovCisJY2hhciAqeXlfYnVmX3BvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gaW4gaW5wdXQgYnVmZmVyICovCisKKwkvKiBTaXplIG9mIGlucHV0IGJ1ZmZlciBpbiBieXRlcywgbm90IGluY2x1ZGluZyByb29tIGZvciBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCXl5X3NpemVfdCB5eV9idWZfc2l6ZTsKKworCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwl5eV9zaXplX3QgeXlfbl9jaGFyczsKKworCS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKKwkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bworCSAqIGRlbGV0ZSBpdC4KKwkgKi8KKwlpbnQgeXlfaXNfb3VyX2J1ZmZlcjsKKworCS8qIFdoZXRoZXIgdGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0IHNvdXJjZTsgaWYgc28sIGFuZAorCSAqIGlmIHdlJ3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1dCwgdGhlbiB3ZSB3YW50IHRvIHVzZSBnZXRjKCkKKwkgKiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRvIG1ha2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlucHV0IGFmdGVyCisJICogZWFjaCBuZXdsaW5lLgorCSAqLworCWludCB5eV9pc19pbnRlcmFjdGl2ZTsKKworCS8qIFdoZXRoZXIgd2UncmUgY29uc2lkZXJlZCB0byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KKwkgKiBJZiBzbywgJ14nIHJ1bGVzIHdpbGwgYmUgYWN0aXZlIG9uIHRoZSBuZXh0IG1hdGNoLCBvdGhlcndpc2UKKwkgKiBub3QuCisJICovCisJaW50IHl5X2F0X2JvbDsKKworICAgIGludCB5eV9ic19saW5lbm87IC8qKjwgVGhlIGxpbmUgY291bnQuICovCisgICAgaW50IHl5X2JzX2NvbHVtbjsgLyoqPCBUaGUgY29sdW1uIGNvdW50LiAqLworICAgIAorCS8qIFdoZXRoZXIgdG8gdHJ5IHRvIGZpbGwgdGhlIGlucHV0IGJ1ZmZlciB3aGVuIHdlIHJlYWNoIHRoZQorCSAqIGVuZCBvZiBpdC4KKwkgKi8KKwlpbnQgeXlfZmlsbF9idWZmZXI7CisKKwlpbnQgeXlfYnVmZmVyX3N0YXR1czsKKworI2RlZmluZSBZWV9CVUZGRVJfTkVXIDAKKyNkZWZpbmUgWVlfQlVGRkVSX05PUk1BTCAxCisJLyogV2hlbiBhbiBFT0YncyBiZWVuIHNlZW4gYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSB0ZXh0IHRvIHByb2Nlc3MKKwkgKiB0aGVuIHdlIG1hcmsgdGhlIGJ1ZmZlciBhcyBZWV9FT0ZfUEVORElORywgdG8gaW5kaWNhdGUgdGhhdCB3ZQorCSAqIHNob3VsZG4ndCB0cnkgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBzb3VyY2UgYW55IG1vcmUuICBXZSBtaWdodAorCSAqIHN0aWxsIGhhdmUgYSBidW5jaCBvZiB0b2tlbnMgdG8gbWF0Y2gsIHRob3VnaCwgYmVjYXVzZSBvZgorCSAqIHBvc3NpYmxlIGJhY2tpbmctdXAuCisJICoKKwkgKiBXaGVuIHdlIGFjdHVhbGx5IHNlZSB0aGUgRU9GLCB3ZSBjaGFuZ2UgdGhlIHN0YXR1cyB0byAibmV3IgorCSAqICh2aWEgeXlyZXN0YXJ0KCkpLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBjb250aW51ZSBzY2FubmluZyBieQorCSAqIGp1c3QgcG9pbnRpbmcgeXlpbiBhdCBhIG5ldyBpbnB1dCBmaWxlLgorCSAqLworI2RlZmluZSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgMgorCisJfTsKKyNlbmRpZiAvKiAhWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURSAqLworCisvKiAlaWYtYy1vbmx5IFN0YW5kYXJkIChub24tQysrKSBkZWZpbml0aW9uICovCisvKiAlbm90LWZvci1oZWFkZXIgKi8KKworLyogJWlmLW5vdC1yZWVudHJhbnQgKi8KKworLyogU3RhY2sgb2YgaW5wdXQgYnVmZmVycy4gKi8KK3N0YXRpYyBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7IC8qKjwgaW5kZXggb2YgdG9wIG9mIHN0YWNrLiAqLworc3RhdGljIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfbWF4ID0gMDsgLyoqPCBjYXBhY2l0eSBvZiBzdGFjay4gKi8KK3N0YXRpYyBZWV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2sgPSAwOyAvKio8IFN0YWNrIGFzIGFuIGFycmF5LiAqLworLyogJWVuZGlmICovCisvKiAlb2stZm9yLWhlYWRlciAqLworCisvKiAlZW5kaWYgKi8KKworLyogV2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZmZXIgc3RhdGVzIGluIGNhc2UgaW4gdGhlCisgKiBmdXR1cmUgd2Ugd2FudCB0byBwdXQgdGhlIGJ1ZmZlciBzdGF0ZXMgaW4gYSBtb3JlIGdlbmVyYWwKKyAqICJzY2FubmVyIHN0YXRlIi4KKyAqCisgKiBSZXR1cm5zIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBvciBOVUxMLgorICovCisjZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSICggKHl5X2J1ZmZlcl9zdGFjaykgXAorICAgICAgICAgICAgICAgICAgICAgICAgICA/ICh5eV9idWZmZXJfc3RhY2spWyh5eV9idWZmZXJfc3RhY2tfdG9wKV0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwpCisKKy8qIFNhbWUgYXMgcHJldmlvdXMgbWFjcm8sIGJ1dCB1c2VmdWwgd2hlbiB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFjayBpcyBub3QKKyAqIE5VTEwgb3Igd2hlbiB3ZSBuZWVkIGFuIGx2YWx1ZS4gRm9yIGludGVybmFsIHVzZSBvbmx5LgorICovCisjZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSAoeXlfYnVmZmVyX3N0YWNrKVsoeXlfYnVmZmVyX3N0YWNrX3RvcCldCisKKy8qICVpZi1jLW9ubHkgU3RhbmRhcmQgKG5vbi1DKyspIGRlZmluaXRpb24gKi8KKworLyogJWlmLW5vdC1yZWVudHJhbnQgKi8KKy8qICVub3QtZm9yLWhlYWRlciAqLworCisvKiB5eV9ob2xkX2NoYXIgaG9sZHMgdGhlIGNoYXJhY3RlciBsb3N0IHdoZW4geXl0ZXh0IGlzIGZvcm1lZC4gKi8KK3N0YXRpYyBjaGFyIHl5X2hvbGRfY2hhcjsKK3N0YXRpYyB5eV9zaXplX3QgeXlfbl9jaGFyczsJCS8qIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYgKi8KK3l5X3NpemVfdCB5eWxlbmc7CisKKy8qIFBvaW50cyB0byBjdXJyZW50IGNoYXJhY3RlciBpbiBidWZmZXIuICovCitzdGF0aWMgY2hhciAqeXlfY19idWZfcCA9IChjaGFyICopIDA7CitzdGF0aWMgaW50IHl5X2luaXQgPSAwOwkJLyogd2hldGhlciB3ZSBuZWVkIHRvIGluaXRpYWxpemUgKi8KK3N0YXRpYyBpbnQgeXlfc3RhcnQgPSAwOwkvKiBzdGFydCBzdGF0ZSBudW1iZXIgKi8KKworLyogRmxhZyB3aGljaCBpcyB1c2VkIHRvIGFsbG93IHl5d3JhcCgpJ3MgdG8gZG8gYnVmZmVyIHN3aXRjaGVzCisgKiBpbnN0ZWFkIG9mIHNldHRpbmcgdXAgYSBmcmVzaCB5eWluLiAgQSBiaXQgb2YgYSBoYWNrIC4uLgorICovCitzdGF0aWMgaW50IHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZjsKKy8qICVvay1mb3ItaGVhZGVyICovCisKKy8qICVlbmRpZiAqLworCit2b2lkIHl5cmVzdGFydCAoRklMRSAqaW5wdXRfZmlsZSAgKTsKK3ZvaWQgeXlfc3dpdGNoX3RvX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgICk7CitZWV9CVUZGRVJfU1RBVEUgeXlfY3JlYXRlX2J1ZmZlciAoRklMRSAqZmlsZSxpbnQgc2l6ZSAgKTsKK3ZvaWQgeXlfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgICk7Cit2b2lkIHl5X2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgICk7Cit2b2lkIHl5cHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICApOwordm9pZCB5eXBvcF9idWZmZXJfc3RhdGUgKHZvaWQgKTsKKworc3RhdGljIHZvaWQgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh2b2lkICk7CitzdGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAodm9pZCApOworc3RhdGljIHZvaWQgeXlfaW5pdF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiLEZJTEUgKmZpbGUgICk7CisKKyNkZWZpbmUgWVlfRkxVU0hfQlVGRkVSIHl5X2ZsdXNoX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiApCisKK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5eV9zaXplX3Qgc2l6ZSAgKTsKK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgICk7CitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRlcyx5eV9zaXplX3QgbGVuICApOworCisvKiAlZW5kaWYgKi8KKwordm9pZCAqeXlhbGxvYyAoeXlfc2l6ZV90ICApOwordm9pZCAqeXlyZWFsbG9jICh2b2lkICoseXlfc2l6ZV90ICApOwordm9pZCB5eWZyZWUgKHZvaWQgKiAgKTsKKworI2RlZmluZSB5eV9uZXdfYnVmZmVyIHl5X2NyZWF0ZV9idWZmZXIKKworI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJhY3RpdmUpIFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAorICAgICAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKCk7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAorICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICk7IFwKKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlID0gaXNfaW50ZXJhY3RpdmU7IFwKKwl9CisKKyNkZWZpbmUgeXlfc2V0X2JvbChhdF9ib2wpIFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXtcCisgICAgICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoKTsgXAorCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCisgICAgICAgICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgKTsgXAorCX0gXAorCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gYXRfYm9sOyBcCisJfQorCisjZGVmaW5lIFlZX0FUX0JPTCgpIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCkKKworLyogJSUgWzEuMF0geXl0ZXh0L3l5aW4veXlvdXQveXlfc3RhdGVfdHlwZS95eWxpbmVubyBldGMuIGRlZidzICYgaW5pdCBnbyBoZXJlICovCisvKiBCZWdpbiB1c2VyIHNlY3QzICovCisKKyNkZWZpbmUgeXl3cmFwKCkgMQorI2RlZmluZSBZWV9TS0lQX1lZV1JBUAorCisjZGVmaW5lIEZMRVhfREVCVUcKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZX0NIQVI7CisKK0ZJTEUgKnl5aW4gPSAoRklMRSAqKSAwLCAqeXlvdXQgPSAoRklMRSAqKSAwOworCit0eXBlZGVmIGludCB5eV9zdGF0ZV90eXBlOworCitleHRlcm4gaW50IHl5bGluZW5vOworCitpbnQgeXlsaW5lbm8gPSAxOworCitleHRlcm4gY2hhciAqeXl0ZXh0OworI2RlZmluZSB5eXRleHRfcHRyIHl5dGV4dAorCisvKiAlaWYtYy1vbmx5IFN0YW5kYXJkIChub24tQysrKSBkZWZpbml0aW9uICovCisKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAodm9pZCApOworc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAoeXlfc3RhdGVfdHlwZSBjdXJyZW50X3N0YXRlICApOworc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHZvaWQgKTsKK3N0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNnW10gICk7CisKKy8qICVlbmRpZiAqLworCisvKiBEb25lIGFmdGVyIHRoZSBjdXJyZW50IHBhdHRlcm4gaGFzIGJlZW4gbWF0Y2hlZCBhbmQgYmVmb3JlIHRoZQorICogY29ycmVzcG9uZGluZyBhY3Rpb24gLSBzZXRzIHVwIHl5dGV4dC4KKyAqLworI2RlZmluZSBZWV9ET19CRUZPUkVfQUNUSU9OIFwKKwkoeXl0ZXh0X3B0cikgPSB5eV9icDsgXAorLyogJSUgWzIuMF0gY29kZSB0byBmaWRkbGUgeXl0ZXh0IGFuZCB5eWxlbmcgZm9yIHl5bW9yZSgpIGdvZXMgaGVyZSBcICovXAorCXl5bGVuZyA9IChzaXplX3QpICh5eV9jcCAtIHl5X2JwKTsgXAorCSh5eV9ob2xkX2NoYXIpID0gKnl5X2NwOyBcCisJKnl5X2NwID0gJ1wwJzsgXAorLyogJSUgWzMuMF0gY29kZSB0byBjb3B5IHl5dGV4dF9wdHIgdG8geXl0ZXh0W10gZ29lcyBoZXJlLCBpZiAlYXJyYXkgXCAqL1wKKwkoeXlfY19idWZfcCkgPSB5eV9jcDsKKworLyogJSUgWzQuMF0gZGF0YSB0YWJsZXMgZm9yIHRoZSBERkEgYW5kIHRoZSB1c2VyJ3Mgc2VjdGlvbiAxIGRlZmluaXRpb25zIGdvIGhlcmUgKi8KKyNkZWZpbmUgWVlfTlVNX1JVTEVTIDgKKyNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUiA5CisvKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNlZCBpbiB0aGlzIHNjYW5uZXIsCisgICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8KK3N0cnVjdCB5eV90cmFuc19pbmZvCisJeworCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7CisJZmxleF9pbnQzMl90IHl5X254dDsKKwl9Oworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFsxN10gPQorICAgIHsgICAwLAorICAgICAgICAwLCAgICAwLCAgICA5LCAgICA3LCAgICAxLCAgICAyLCAgICAzLCAgICA1LCAgICA3LCAgICA2LAorICAgICAgICAxLCAgICAyLCAgICA1LCAgICA0LCAgICA2LCAgICAwCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KKyAgICB7ICAgMCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwgICAgMywKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgNCwgICAgNCwgICAgMSwgICAgNCwgICAgMSwgICAgNCwgICAgNSwgICAgNSwgICAgNSwKKyAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNiwgICAgMSwgICAgMSwKKyAgICAgICAgNywgICAgMSwgICAgMSwgICAgMSwgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwKKyAgICAgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwKKyAgICAgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgOSwgICAgMSwgICAgOCwgICAgOCwgICAgOCwgICAgOCwKKworICAgICAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LAorICAgICAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LAorICAgICAgICA4LCAgICA4LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFbMTBdID0KKyAgICB7ICAgMCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwgICAgMSwgICAgMSwgICAgMiwgICAgMgorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVsxOF0gPQorICAgIHsgICAwLAorICAgICAgICAwLCAgICAwLCAgIDE4LCAgIDE5LCAgIDE1LCAgIDEzLCAgIDE5LCAgIDEwLCAgICA3LCAgICAwLAorICAgICAgIDExLCAgICA5LCAgICA2LCAgIDE5LCAgICAwLCAgIDE5LCAgICA4CisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9kZWZbMThdID0KKyAgICB7ICAgMCwKKyAgICAgICAxNiwgICAgMSwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNywKKyAgICAgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNywgICAgMCwgICAxNgorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzI5XSA9CisgICAgeyAgIDAsCisgICAgICAgIDQsICAgIDUsICAgIDYsICAgIDcsICAgIDgsICAgIDksICAgIDQsICAgMTAsICAgIDQsICAgMTUsCisgICAgICAgMTMsICAgMTIsICAgMTEsICAgMTQsICAgMTMsICAgMTIsICAgMTEsICAgMTYsICAgIDMsICAgMTYsCisgICAgICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTYKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1syOV0gPQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgIDE3LAorICAgICAgIDEzLCAgIDEyLCAgIDExLCAgICA5LCAgICA4LCAgICA2LCAgICA1LCAgICAzLCAgIDE2LCAgIDE2LAorICAgICAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2CisgICAgfSA7CisKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworc3RhdGljIGNoYXIgKnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisKK2V4dGVybiBpbnQgeXlfZmxleF9kZWJ1ZzsKK2ludCB5eV9mbGV4X2RlYnVnID0gMTsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X3J1bGVfbGluZW51bVs4XSA9CisgICAgeyAgIDAsCisgICAgICAgMzcsICAgMzgsICAgNDQsICAgNDYsICAgNDksICAgNjAsICAgNjYKKyAgICB9IDsKKworLyogVGhlIGludGVudCBiZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKKyAqIGFueSB1c2VzIG9mIFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KKyAqLworI2RlZmluZSBSRUpFQ1QgcmVqZWN0X3VzZWRfYnV0X25vdF9kZXRlY3RlZAorI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNlZF9idXRfbm90X2RldGVjdGVkCisjZGVmaW5lIFlZX01PUkVfQURKIDAKKyNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAorY2hhciAqeXl0ZXh0OworI2xpbmUgMSAiY2FsYysrLXNjYW5uZXIubGwiCisjbGluZSAyICJjYWxjKystc2Nhbm5lci5sbCIKKyMgaW5jbHVkZSA8Y3N0ZGxpYj4KKyMgaW5jbHVkZSA8Y2Vycm5vPgorIyBpbmNsdWRlIDxjbGltaXRzPgorIyBpbmNsdWRlIDxzdHJpbmc+CisjIGluY2x1ZGUgImNhbGMrKy1kcml2ZXIuaGgiCisjIGluY2x1ZGUgImNhbGMrKy1wYXJzZXIuaGgiCisKKy8qIFdvcmsgYXJvdW5kIGFuIGluY29tcGF0aWJpbGl0eSBpbiBmbGV4IChhdCBsZWFzdCB2ZXJzaW9ucworICAgMi41LjMxIHRocm91Z2ggMi41LjMzKTogaXQgZ2VuZXJhdGVzIGNvZGUgdGhhdCBkb2VzCisgICBub3QgY29uZm9ybSB0byBDODkuICBTZWUgRGViaWFuIGJ1ZyAzMzMyMzEKKyAgIDxodHRwOi8vYnVncy5kZWJpYW4ub3JnL2NnaS1iaW4vYnVncmVwb3J0LmNnaT9idWc9MzMzMjMxPi4gICovCisjIHVuZGVmIHl5d3JhcAorIyBkZWZpbmUgeXl3cmFwKCkgMQorCisvKiBCeSBkZWZhdWx0IHl5bGV4IHJldHVybnMgaW50LCB3ZSB1c2UgdG9rZW5fdHlwZS4KKyAgIFVuZm9ydHVuYXRlbHkgeXl0ZXJtaW5hdGUgYnkgZGVmYXVsdCByZXR1cm5zIDAsIHdoaWNoIGlzCisgICBub3Qgb2YgdG9rZW5fdHlwZS4gICovCisjZGVmaW5lIHl5dGVybWluYXRlKCkgcmV0dXJuIHRva2VuOjpFTkQKKyNsaW5lIDMwICJjYWxjKystc2Nhbm5lci5sbCIKKyMgZGVmaW5lIFlZX1VTRVJfQUNUSU9OICB5eWxsb2MtPmNvbHVtbnMgKHl5bGVuZyk7CisjbGluZSA1NjkgImNhbGMrKy1zY2FubmVyLmNjIgorCisjZGVmaW5lIElOSVRJQUwgMAorCisjaWZuZGVmIFlZX05PX1VOSVNURF9ICisvKiBTcGVjaWFsIGNhc2UgZm9yICJ1bmlzdGQuaCIsIHNpbmNlIGl0IGlzIG5vbi1BTlNJLiBXZSBpbmNsdWRlIGl0IHdheQorICogZG93biBoZXJlIGJlY2F1c2Ugd2Ugd2FudCB0aGUgdXNlcidzIHNlY3Rpb24gMSB0byBoYXZlIGJlZW4gc2Nhbm5lZCBmaXJzdC4KKyAqIFRoZSB1c2VyIGhhcyBhIGNoYW5jZSB0byBvdmVycmlkZSBpdCB3aXRoIGFuIG9wdGlvbi4KKyAqLworLyogJWlmLWMtb25seSAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorLyogJWVuZGlmICovCisvKiAlaWYtYysrLW9ubHkgKi8KKy8qICVlbmRpZiAqLworI2VuZGlmCisKKyNpZm5kZWYgWVlfRVhUUkFfVFlQRQorI2RlZmluZSBZWV9FWFRSQV9UWVBFIHZvaWQgKgorI2VuZGlmCisKKy8qICVpZi1jLW9ubHkgUmVlbnRyYW50IHN0cnVjdHVyZSBhbmQgbWFjcm9zIChub24tQysrKS4gKi8KKy8qICVpZi1yZWVudHJhbnQgKi8KKy8qICVpZi1jLW9ubHkgKi8KKworc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHZvaWQgKTsKKworLyogJWVuZGlmICovCisvKiAlaWYtcmVlbnRyYW50ICovCisvKiAlZW5kaWYgKi8KKy8qICVlbmRpZiBFbmQgcmVlbnRyYW50IHN0cnVjdHVyZXMgYW5kIG1hY3Jvcy4gKi8KKworLyogQWNjZXNzb3IgbWV0aG9kcyB0byBnbG9iYWxzLgorICAgVGhlc2UgYXJlIG1hZGUgdmlzaWJsZSB0byBub24tcmVlbnRyYW50IHNjYW5uZXJzIGZvciBjb252ZW5pZW5jZS4gKi8KKworaW50IHl5bGV4X2Rlc3Ryb3kgKHZvaWQgKTsKKworaW50IHl5Z2V0X2RlYnVnICh2b2lkICk7CisKK3ZvaWQgeXlzZXRfZGVidWcgKGludCBkZWJ1Z19mbGFnICApOworCitZWV9FWFRSQV9UWVBFIHl5Z2V0X2V4dHJhICh2b2lkICk7CisKK3ZvaWQgeXlzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkICApOworCitGSUxFICp5eWdldF9pbiAodm9pZCApOworCit2b2lkIHl5c2V0X2luICAoRklMRSAqIGluX3N0ciAgKTsKKworRklMRSAqeXlnZXRfb3V0ICh2b2lkICk7CisKK3ZvaWQgeXlzZXRfb3V0ICAoRklMRSAqIG91dF9zdHIgICk7CisKK3l5X3NpemVfdCB5eWdldF9sZW5nICh2b2lkICk7CisKK2NoYXIgKnl5Z2V0X3RleHQgKHZvaWQgKTsKKworaW50IHl5Z2V0X2xpbmVubyAodm9pZCApOworCit2b2lkIHl5c2V0X2xpbmVubyAoaW50IGxpbmVfbnVtYmVyICApOworCisvKiAlaWYtYmlzb24tYnJpZGdlICovCisvKiAlZW5kaWYgKi8KKworLyogTWFjcm9zIGFmdGVyIHRoaXMgcG9pbnQgY2FuIGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlvbnMgaW4KKyAqIHNlY3Rpb24gMS4KKyAqLworCisjaWZuZGVmIFlZX1NLSVBfWVlXUkFQCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgaW50IHl5d3JhcCAodm9pZCApOworI2Vsc2UKK2V4dGVybiBpbnQgeXl3cmFwICh2b2lkICk7CisjZW5kaWYKKyNlbmRpZgorCisvKiAlbm90LWZvci1oZWFkZXIgKi8KKworLyogJW9rLWZvci1oZWFkZXIgKi8KKworLyogJWVuZGlmICovCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyICoseXljb25zdCBjaGFyICosaW50ICk7CisjZW5kaWYKKworI2lmZGVmIFlZX05FRURfU1RSTEVOCitzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiApOworI2VuZGlmCisKKyNpZm5kZWYgWVlfTk9fSU5QVVQKKy8qICVpZi1jLW9ubHkgU3RhbmRhcmQgKG5vbi1DKyspIGRlZmluaXRpb24gKi8KKy8qICVub3QtZm9yLWhlYWRlciAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK3N0YXRpYyBpbnQgeXlpbnB1dCAodm9pZCApOworI2Vsc2UKK3N0YXRpYyBpbnQgaW5wdXQgKHZvaWQgKTsKKyNlbmRpZgorLyogJW9rLWZvci1oZWFkZXIgKi8KKworLyogJWVuZGlmICovCisjZW5kaWYKKworLyogJWlmLWMtb25seSAqLworCisvKiAlZW5kaWYgKi8KKworLyogQW1vdW50IG9mIHN0dWZmIHRvIHNsdXJwIHVwIHdpdGggZWFjaCByZWFkLiAqLworI2lmbmRlZiBZWV9SRUFEX0JVRl9TSVpFCisjZGVmaW5lIFlZX1JFQURfQlVGX1NJWkUgODE5MgorI2VuZGlmCisKKy8qIENvcHkgd2hhdGV2ZXIgdGhlIGxhc3QgcnVsZSBtYXRjaGVkIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICovCisjaWZuZGVmIEVDSE8KKy8qICVpZi1jLW9ubHkgU3RhbmRhcmQgKG5vbi1DKyspIGRlZmluaXRpb24gKi8KKy8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0cygpLCBidXQgc2luY2UgdGhlIHN0cmluZyBtaWdodCBjb250YWluIE5VTCdzLAorICogd2Ugbm93IHVzZSBmd3JpdGUoKS4KKyAqLworI2RlZmluZSBFQ0hPIGRvIHsgaWYgKGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcsIDEsIHl5b3V0ICkpIHt9IH0gd2hpbGUgKDApCisvKiAlZW5kaWYgKi8KKy8qICVpZi1jKystb25seSBDKysgZGVmaW5pdGlvbiAqLworLyogJWVuZGlmICovCisjZW5kaWYKKworLyogR2V0cyBpbnB1dCBhbmQgc3R1ZmZzIGl0IGludG8gImJ1ZiIuICBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLCBvciBZWV9OVUxMLAorICogaXMgcmV0dXJuZWQgaW4gInJlc3VsdCIuCisgKi8KKyNpZm5kZWYgWVlfSU5QVVQKKyNkZWZpbmUgWVlfSU5QVVQoYnVmLHJlc3VsdCxtYXhfc2l6ZSkgXAorLyogJSUgWzUuMF0gZnJlYWQoKS9yZWFkKCkgZGVmaW5pdGlvbiBvZiBZWV9JTlBVVCBnb2VzIGhlcmUgdW5sZXNzIHdlJ3JlIGRvaW5nIEMrKyBcICovXAorCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSApIFwKKwkJeyBcCisJCWludCBjID0gJyonOyBcCisJCXNpemVfdCBuOyBcCisJCWZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAorCQkJICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0gRU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAorCQkJYnVmW25dID0gKGNoYXIpIGM7IFwKKwkJaWYgKCBjID09ICdcbicgKSBcCisJCQlidWZbbisrXSA9IChjaGFyKSBjOyBcCisJCWlmICggYyA9PSBFT0YgJiYgZmVycm9yKCB5eWluICkgKSBcCisJCQlZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJcmVzdWx0ID0gbjsgXAorCQl9IFwKKwllbHNlIFwKKwkJeyBcCisJCWVycm5vPTA7IFwKKwkJd2hpbGUgKCAocmVzdWx0ID0gZnJlYWQoYnVmLCAxLCBtYXhfc2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAorCQkJeyBcCisJCQlpZiggZXJybm8gIT0gRUlOVFIpIFwKKwkJCQl7IFwKKwkJCQlZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJCQlicmVhazsgXAorCQkJCX0gXAorCQkJZXJybm89MDsgXAorCQkJY2xlYXJlcnIoeXlpbik7IFwKKwkJCX0gXAorCQl9XAorXAorLyogJWlmLWMrKy1vbmx5IEMrKyBkZWZpbml0aW9uIFwgKi9cCisvKiAlZW5kaWYgKi8KKworI2VuZGlmCisKKy8qIE5vIHNlbWktY29sb24gYWZ0ZXIgcmV0dXJuOyBjb3JyZWN0IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQorICogd2UgZG9uJ3Qgd2FudCBhbiBleHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJlY2F1c2UgdGhhdCB3aWxsIGNhdXNlCisgKiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91dCB1bnJlYWNoYWJsZSBzdGF0ZW1lbnRzLgorICovCisjaWZuZGVmIHl5dGVybWluYXRlCisjZGVmaW5lIHl5dGVybWluYXRlKCkgcmV0dXJuIFlZX05VTEwKKyNlbmRpZgorCisvKiBOdW1iZXIgb2YgZW50cmllcyBieSB3aGljaCBzdGFydC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCisjaWZuZGVmIFlZX1NUQVJUX1NUQUNLX0lOQ1IKKyNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQorI2VuZGlmCisKKy8qIFJlcG9ydCBhIGZhdGFsIGVycm9yLiAqLworI2lmbmRlZiBZWV9GQVRBTF9FUlJPUgorLyogJWlmLWMtb25seSAqLworI2RlZmluZSBZWV9GQVRBTF9FUlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgKQorLyogJWVuZGlmICovCisvKiAlaWYtYysrLW9ubHkgKi8KKy8qICVlbmRpZiAqLworI2VuZGlmCisKKy8qICVpZi10YWJsZXMtc2VyaWFsaXphdGlvbiBzdHJ1Y3R1cmVzIGFuZCBwcm90b3R5cGVzICovCisvKiAlbm90LWZvci1oZWFkZXIgKi8KKworLyogJW9rLWZvci1oZWFkZXIgKi8KKworLyogJW5vdC1mb3ItaGVhZGVyICovCisKKy8qICV0YWJsZXMteXlkbWFwIGdlbmVyYXRlZCBlbGVtZW50cyAqLworLyogJWVuZGlmICovCisvKiBlbmQgdGFibGVzIHNlcmlhbGl6YXRpb24gc3RydWN0dXJlcyBhbmQgcHJvdG90eXBlcyAqLworCisvKiAlb2stZm9yLWhlYWRlciAqLworCisvKiBEZWZhdWx0IGRlY2xhcmF0aW9uIG9mIGdlbmVyYXRlZCBzY2FubmVyIC0gYSBkZWZpbmUgc28gdGhlIHVzZXIgY2FuCisgKiBlYXNpbHkgYWRkIHBhcmFtZXRlcnMuCisgKi8KKyNpZm5kZWYgWVlfREVDTAorI2RlZmluZSBZWV9ERUNMX0lTX09VUlMgMQorLyogJWlmLWMtb25seSBTdGFuZGFyZCAobm9uLUMrKykgZGVmaW5pdGlvbiAqLworCitleHRlcm4gaW50IHl5bGV4ICh2b2lkKTsKKworI2RlZmluZSBZWV9ERUNMIGludCB5eWxleCAodm9pZCkKKy8qICVlbmRpZiAqLworLyogJWlmLWMrKy1vbmx5IEMrKyBkZWZpbml0aW9uICovCisvKiAlZW5kaWYgKi8KKyNlbmRpZiAvKiAhWVlfREVDTCAqLworCisvKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBydWxlLCBhZnRlciB5eXRleHQgYW5kIHl5bGVuZworICogaGF2ZSBiZWVuIHNldCB1cC4KKyAqLworI2lmbmRlZiBZWV9VU0VSX0FDVElPTgorI2RlZmluZSBZWV9VU0VSX0FDVElPTgorI2VuZGlmCisKKy8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGVuZCBvZiBlYWNoIHJ1bGUuICovCisjaWZuZGVmIFlZX0JSRUFLCisjZGVmaW5lIFlZX0JSRUFLIGJyZWFrOworI2VuZGlmCisKKy8qICUlIFs2LjBdIFlZX1JVTEVfU0VUVVAgZGVmaW5pdGlvbiBnb2VzIGhlcmUgKi8KKyNkZWZpbmUgWVlfUlVMRV9TRVRVUCBcCisJWVlfVVNFUl9BQ1RJT04KKworLyogJW5vdC1mb3ItaGVhZGVyICovCisKKy8qKiBUaGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRoZSB3b3JrLgorICovCitZWV9ERUNMCit7CisJcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7CisJcmVnaXN0ZXIgaW50IHl5X2FjdDsKKyAgICAKKy8qICUlIFs3LjBdIHVzZXIncyBkZWNsYXJhdGlvbnMgZ28gaGVyZSAqLworI2xpbmUgMzMgImNhbGMrKy1zY2FubmVyLmxsIgorCisKKyAgeXlsbG9jLT5zdGVwICgpOworCisjbGluZSA4MTQgImNhbGMrKy1zY2FubmVyLmNjIgorCisJaWYgKCAhKHl5X2luaXQpICkKKwkJeworCQkoeXlfaW5pdCkgPSAxOworCisjaWZkZWYgWVlfVVNFUl9JTklUCisJCVlZX1VTRVJfSU5JVDsKKyNlbmRpZgorCisJCWlmICggISAoeXlfc3RhcnQpICkKKwkJCSh5eV9zdGFydCkgPSAxOwkvKiBmaXJzdCBzdGFydCBzdGF0ZSAqLworCisJCWlmICggISB5eWluICkKKy8qICVpZi1jLW9ubHkgKi8KKwkJCXl5aW4gPSBzdGRpbjsKKy8qICVlbmRpZiAqLworLyogJWlmLWMrKy1vbmx5ICovCisvKiAlZW5kaWYgKi8KKworCQlpZiAoICEgeXlvdXQgKQorLyogJWlmLWMtb25seSAqLworCQkJeXlvdXQgPSBzdGRvdXQ7CisvKiAlZW5kaWYgKi8KKy8qICVpZi1jKystb25seSAqLworLyogJWVuZGlmICovCisKKwkJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICkgeworCQkJeXllbnN1cmVfYnVmZmVyX3N0YWNrICgpOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKwkJCQl5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgKTsKKwkJfQorCisJCXl5X2xvYWRfYnVmZmVyX3N0YXRlKCApOworCQl9CisKKwl3aGlsZSAoIDEgKQkJLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAqLworCQl7CisvKiAlJSBbOC4wXSB5eW1vcmUoKS1yZWxhdGVkIGNvZGUgZ29lcyBoZXJlICovCisJCXl5X2NwID0gKHl5X2NfYnVmX3ApOworCisJCS8qIFN1cHBvcnQgb2YgeXl0ZXh0LiAqLworCQkqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsKKworCQkvKiB5eV9icCBwb2ludHMgdG8gdGhlIHBvc2l0aW9uIGluIHl5X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YKKwkJICogdGhlIGN1cnJlbnQgcnVuLgorCQkgKi8KKwkJeXlfYnAgPSB5eV9jcDsKKworLyogJSUgWzkuMF0gY29kZSB0byBzZXQgdXAgYW5kIGZpbmQgbmV4dCBtYXRjaCBnb2VzIGhlcmUgKi8KKwkJeXlfY3VycmVudF9zdGF0ZSA9ICh5eV9zdGFydCk7Cit5eV9tYXRjaDoKKwkJZG8KKwkJCXsKKwkJCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldOworCQkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJCXsKKwkJCQkoeXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUpID0geXlfY3VycmVudF9zdGF0ZTsKKwkJCQkoeXlfbGFzdF9hY2NlcHRpbmdfY3BvcykgPSB5eV9jcDsKKwkJCQl9CisJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJCQkJeworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDE3ICkKKwkJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJCQkJfQorCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CisJCQkrK3l5X2NwOworCQkJfQorCQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gMTYgKTsKKwkJeXlfY3AgPSAoeXlfbGFzdF9hY2NlcHRpbmdfY3Bvcyk7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSAoeXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUpOworCit5eV9maW5kX2FjdGlvbjoKKy8qICUlIFsxMC4wXSBjb2RlIHRvIGZpbmQgdGhlIGFjdGlvbiBudW1iZXIgZ29lcyBoZXJlICovCisJCXl5X2FjdCA9IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXTsKKworCQlZWV9ET19CRUZPUkVfQUNUSU9OOworCisvKiAlJSBbMTEuMF0gY29kZSBmb3IgeXlsaW5lbm8gdXBkYXRlIGdvZXMgaGVyZSAqLworCitkb19hY3Rpb246CS8qIFRoaXMgbGFiZWwgaXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KKworLyogJSUgWzEyLjBdIGRlYnVnIGNvZGUgZ29lcyBoZXJlICovCisJCWlmICggeXlfZmxleF9kZWJ1ZyApCisJCQl7CisJCQlpZiAoIHl5X2FjdCA9PSAwICkKKwkJCQlmcHJpbnRmKCBzdGRlcnIsICItLXNjYW5uZXIgYmFja2luZyB1cFxuIiApOworCQkJZWxzZSBpZiAoIHl5X2FjdCA8IDggKQorCQkJCWZwcmludGYoIHN0ZGVyciwgIi0tYWNjZXB0aW5nIHJ1bGUgYXQgbGluZSAlbGQgKFwiJXNcIilcbiIsCisJCQkJICAgICAgICAgKGxvbmcpeXlfcnVsZV9saW5lbnVtW3l5X2FjdF0sIHl5dGV4dCApOworCQkJZWxzZSBpZiAoIHl5X2FjdCA9PSA4ICkKKwkJCQlmcHJpbnRmKCBzdGRlcnIsICItLWFjY2VwdGluZyBkZWZhdWx0IHJ1bGUgKFwiJXNcIilcbiIsCisJCQkJICAgICAgICAgeXl0ZXh0ICk7CisJCQllbHNlIGlmICggeXlfYWN0ID09IDkgKQorCQkJCWZwcmludGYoIHN0ZGVyciwgIi0tKGVuZCBvZiBidWZmZXIgb3IgYSBOVUwpXG4iICk7CisJCQllbHNlCisJCQkJZnByaW50Ziggc3RkZXJyLCAiLS1FT0YgKHN0YXJ0IGNvbmRpdGlvbiAlZClcbiIsIFlZX1NUQVJUICk7CisJCQl9CisKKwkJc3dpdGNoICggeXlfYWN0ICkKKwl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICovCisvKiAlJSBbMTMuMF0gYWN0aW9ucyBnbyBoZXJlICovCisJCQljYXNlIDA6IC8qIG11c3QgYmFjayB1cCAqLworCQkJLyogdW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OICovCisJCQkqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsKKwkJCXl5X2NwID0gKHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MpOworCQkJeXlfY3VycmVudF9zdGF0ZSA9ICh5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSk7CisJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCitjYXNlIDE6CitZWV9SVUxFX1NFVFVQCisjbGluZSAzNyAiY2FsYysrLXNjYW5uZXIubGwiCit5eWxsb2MtPnN0ZXAgKCk7CisJWVlfQlJFQUsKK2Nhc2UgMjoKKy8qIHJ1bGUgMiBjYW4gbWF0Y2ggZW9sICovCitZWV9SVUxFX1NFVFVQCisjbGluZSAzOCAiY2FsYysrLXNjYW5uZXIubGwiCit5eWxsb2MtPmxpbmVzICh5eWxlbmcpOyB5eWxsb2MtPnN0ZXAgKCk7CisJWVlfQlJFQUsKKworICB0eXBlZGVmIHl5OjpjYWxjeHhfcGFyc2VyOjp0b2tlbiB0b2tlbjsKKworLyogQ29udmVydCBpbnRzIHRvIHRoZSBhY3R1YWwgdHlwZSBvZiB0b2tlbnMuICAqLworY2FzZSAzOgorWVlfUlVMRV9TRVRVUAorI2xpbmUgNDQgImNhbGMrKy1zY2FubmVyLmxsIgorcmV0dXJuIHl5OjpjYWxjeHhfcGFyc2VyOjp0b2tlbl90eXBlICh5eXRleHRbMF0pOworCVlZX0JSRUFLCitjYXNlIDQ6CitZWV9SVUxFX1NFVFVQCisjbGluZSA0NiAiY2FsYysrLXNjYW5uZXIubGwiCityZXR1cm4gdG9rZW46OkFTU0lHTjsKKwlZWV9CUkVBSworY2FzZSA1OgorWVlfUlVMRV9TRVRVUAorI2xpbmUgNDkgImNhbGMrKy1zY2FubmVyLmxsIgoreworICAgICAgICAgICBlcnJubyA9IDA7CisgICAgICAgICAgIGxvbmcgbiA9IHN0cnRvbCAoeXl0ZXh0LCBOVUxMLCAxMCk7CisgICAgICAgICAgIGlmICghIChJTlRfTUlOIDw9IG4gJiYgbiA8PSBJTlRfTUFYICYmIGVycm5vICE9IEVSQU5HRSkpCisgICAgICAgICAgICAgZHJpdmVyLmVycm9yICgqeXlsbG9jLCAiaW50ZWdlciBpcyBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgeXlsdmFsLT5pdmFsID0gbjsKKyAgICAgICAgICAgcmV0dXJuIHRva2VuOjpOVU1CRVI7CisgICAgICAgICB9CisJWVlfQlJFQUsKK2Nhc2UgNjoKK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDYwICJjYWxjKystc2Nhbm5lci5sbCIKK3sKKyAgICAgICAgICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nICh5eXRleHQpOworICAgICAgICAgICByZXR1cm4gdG9rZW46OklERU5USUZJRVI7CisgICAgICAgICB9CisJWVlfQlJFQUsKK2Nhc2UgNzoKK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDY2ICJjYWxjKystc2Nhbm5lci5sbCIKK2RyaXZlci5lcnJvciAoKnl5bGxvYywgImludmFsaWQgY2hhcmFjdGVyIik7CisJWVlfQlJFQUsKK2Nhc2UgODoKK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDY3ICJjYWxjKystc2Nhbm5lci5sbCIKK0VDSE87CisJWVlfQlJFQUsKKyNsaW5lIDk3OSAiY2FsYysrLXNjYW5uZXIuY2MiCitjYXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToKKwl5eXRlcm1pbmF0ZSgpOworCisJY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgorCQl7CisJCS8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCisJCWludCB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0gKHl5dGV4dF9wdHIpKSAtIDE7CisKKwkJLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAqLworCQkqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsKKwkJWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAorCisJCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQorCQkJeworCQkJLyogV2UncmUgc2Nhbm5pbmcgYSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCisJCQkgKiBwb3NzaWJsZSB0aGF0IHRoaXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgorCQkJICoganVzdCBwb2ludGVkIHl5aW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxsZWQKKwkJCSAqIHl5bGV4KCkuICBJZiBzbywgdGhlbiB3ZSBoYXZlIHRvIGFzc3VyZQorCQkJICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZFUiBhbmQgb3VyCisJCQkgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gc28sIGJlY2F1c2UKKwkJCSAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIgdGhhbiBwb3NzaWJseSBhCisJCQkgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBuZXcgaW5wdXQgc291cmNlLgorCQkJICovCisJCQkoeXlfbl9jaGFycykgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGUgPSB5eWluOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsKKwkJCX0KKworCQkvKiBOb3RlIHRoYXQgaGVyZSB3ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCisJCSAqIG9mIHRoZSBmaXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxsCisJCSAqIGFscmVhZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIKKwkJICogKHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCisJCSAqIGVuZC1vZi1idWZmZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0CisJCSAqIGluIGlucHV0KCkuCisJCSAqLworCQlpZiAoICh5eV9jX2J1Zl9wKSA8PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hhcnMpXSApCisJCQl7IC8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJCXl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKKworCQkJKHl5X2NfYnVmX3ApID0gKHl5dGV4dF9wdHIpICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKKworCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggICk7CisKKwkJCS8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAorCQkJICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKKwkJCSAqIHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAorCQkJICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFsCisJCQkgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QKKwkJCSAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAorCQkJICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgorCQkJICovCisKKwkJCXl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICk7CisKKwkJCXl5X2JwID0gKHl5dGV4dF9wdHIpICsgWVlfTU9SRV9BREo7CisKKwkJCWlmICggeXlfbmV4dF9zdGF0ZSApCisJCQkJeworCQkJCS8qIENvbnN1bWUgdGhlIE5VTC4gKi8KKwkJCQl5eV9jcCA9ICsrKHl5X2NfYnVmX3ApOworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9uZXh0X3N0YXRlOworCQkJCWdvdG8geXlfbWF0Y2g7CisJCQkJfQorCisJCQllbHNlCisJCQkJeworLyogJSUgWzE0LjBdIGNvZGUgdG8gZG8gYmFjay11cCBmb3IgY29tcHJlc3NlZCB0YWJsZXMgYW5kIHNldCB1cCB5eV9jcCBnb2VzIGhlcmUgKi8KKwkJCQl5eV9jcCA9ICh5eV9sYXN0X2FjY2VwdGluZ19jcG9zKTsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0gKHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlKTsKKwkJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCQkJCX0KKwkJCX0KKworCQllbHNlIHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggICkgKQorCQkJeworCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgorCQkJCXsKKwkJCQkoeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mKSA9IDA7CisKKwkJCQlpZiAoIHl5d3JhcCggKSApCisJCQkJCXsKKwkJCQkJLyogTm90ZTogYmVjYXVzZSB3ZSd2ZSB0YWtlbiBjYXJlIGluCisJCQkJCSAqIHl5X2dldF9uZXh0X2J1ZmZlcigpIHRvIGhhdmUgc2V0IHVwCisJCQkJCSAqIHl5dGV4dCwgd2UgY2FuIG5vdyBzZXQgdXAKKwkJCQkJICogeXlfY19idWZfcCBzbyB0aGF0IGlmIHNvbWUgdG90YWwKKwkJCQkJICogaG9zZXIgKGxpa2UgZmxleCBpdHNlbGYpIHdhbnRzIHRvCisJCQkJCSAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIgd2UgcmV0dXJuIHRoZQorCQkJCQkgKiBZWV9OVUxMLCBpdCdsbCBzdGlsbCB3b3JrIC0gYW5vdGhlcgorCQkJCQkgKiBZWV9OVUxMIHdpbGwgZ2V0IHJldHVybmVkLgorCQkJCQkgKi8KKwkJCQkJKHl5X2NfYnVmX3ApID0gKHl5dGV4dF9wdHIpICsgWVlfTU9SRV9BREo7CisKKwkJCQkJeXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZX1NUQVJUKTsKKwkJCQkJZ290byBkb19hY3Rpb247CisJCQkJCX0KKworCQkJCWVsc2UKKwkJCQkJeworCQkJCQlpZiAoICEgKHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZikgKQorCQkJCQkJWVlfTkVXX0ZJTEU7CisJCQkJCX0KKwkJCQlicmVhazsKKwkJCQl9CisKKwkJCWNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgorCQkJCSh5eV9jX2J1Zl9wKSA9CisJCQkJCSh5eXRleHRfcHRyKSArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7CisKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCAgKTsKKworCQkJCXl5X2NwID0gKHl5X2NfYnVmX3ApOworCQkJCXl5X2JwID0gKHl5dGV4dF9wdHIpICsgWVlfTU9SRV9BREo7CisJCQkJZ290byB5eV9tYXRjaDsKKworCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6CisJCQkJKHl5X2NfYnVmX3ApID0KKwkJCQkmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hhcnMpXTsKKworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoICApOworCisJCQkJeXlfY3AgPSAoeXlfY19idWZfcCk7CisJCQkJeXlfYnAgPSAoeXl0ZXh0X3B0cikgKyBZWV9NT1JFX0FESjsKKwkJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCQkJfQorCQlicmVhazsKKwkJfQorCisJZGVmYXVsdDoKKwkJWVlfRkFUQUxfRVJST1IoCisJCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rpb24gZm91bmQiICk7CisJfSAvKiBlbmQgb2YgYWN0aW9uIHN3aXRjaCAqLworCQl9IC8qIGVuZCBvZiBzY2FubmluZyBvbmUgdG9rZW4gKi8KK30gLyogZW5kIG9mIHl5bGV4ICovCisvKiAlb2stZm9yLWhlYWRlciAqLworCisvKiAlaWYtYysrLW9ubHkgKi8KKy8qICVub3QtZm9yLWhlYWRlciAqLworCisvKiAlb2stZm9yLWhlYWRlciAqLworCisvKiAlZW5kaWYgKi8KKworLyogeXlfZ2V0X25leHRfYnVmZmVyIC0gdHJ5IHRvIHJlYWQgaW4gYSBuZXcgYnVmZmVyCisgKgorICogUmV0dXJucyBhIGNvZGUgcmVwcmVzZW50aW5nIGFuIGFjdGlvbjoKKyAqCUVPQl9BQ1RfTEFTVF9NQVRDSCAtCisgKglFT0JfQUNUX0NPTlRJTlVFX1NDQU4gLSBjb250aW51ZSBzY2FubmluZyBmcm9tIGN1cnJlbnQgcG9zaXRpb24KKyAqCUVPQl9BQ1RfRU5EX09GX0ZJTEUgLSBlbmQgb2YgZmlsZQorICovCisvKiAlaWYtYy1vbmx5ICovCitzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAodm9pZCkKKy8qICVlbmRpZiAqLworLyogJWlmLWMrKy1vbmx5ICovCisvKiAlZW5kaWYgKi8KK3sKKyAgICAJcmVnaXN0ZXIgY2hhciAqZGVzdCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOworCXJlZ2lzdGVyIGNoYXIgKnNvdXJjZSA9ICh5eXRleHRfcHRyKTsKKwlyZWdpc3RlciBpbnQgbnVtYmVyX3RvX21vdmUsIGk7CisJaW50IHJldF92YWw7CisKKwlpZiAoICh5eV9jX2J1Zl9wKSA+ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycykgKyAxXSApCisJCVlZX0ZBVEFMX0VSUk9SKAorCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKKwkJeyAvKiBEb24ndCB0cnkgdG8gZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KKwkJaWYgKCAoeXlfY19idWZfcCkgLSAoeXl0ZXh0X3B0cikgLSBZWV9NT1JFX0FESiA9PSAxICkKKwkJCXsKKwkJCS8qIFdlIG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUgRU9CLCBzbworCQkJICogdHJlYXQgdGhpcyBhcyBhIGZpbmFsIEVPRi4KKwkJCSAqLworCQkJcmV0dXJuIEVPQl9BQ1RfRU5EX09GX0ZJTEU7CisJCQl9CisKKwkJZWxzZQorCQkJeworCQkJLyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJpb3IgdG8gdGhlIEVPQiwgZmlyc3QKKwkJCSAqIHByb2Nlc3MgaXQuCisJCQkgKi8KKwkJCXJldHVybiBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQl9CisJCX0KKworCS8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4gKi8KKworCS8qIEZpcnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIuICovCisJbnVtYmVyX3RvX21vdmUgPSAoaW50KSAoKHl5X2NfYnVmX3ApIC0gKHl5dGV4dF9wdHIpKSAtIDE7CisKKwlmb3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQorCQkqKGRlc3QrKykgPSAqKHNvdXJjZSsrKTsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCisJCS8qIGRvbid0IGRvIHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsCisJCSAqIGp1c3QgZm9yY2UgYW4gRU9GCisJCSAqLworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSAoeXlfbl9jaGFycykgPSAwOworCisJZWxzZQorCQl7CisJCQl5eV9zaXplX3QgbnVtX3RvX3JlYWQgPQorCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKKworCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQorCQkJeyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCisKKwkJCS8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLworCQkJWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUU7CisKKwkJCWludCB5eV9jX2J1Zl9wX29mZnNldCA9CisJCQkJKGludCkgKCh5eV9jX2J1Zl9wKSAtIGItPnl5X2NoX2J1Zik7CisKKwkJCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCisJCQkJeworCQkJCXl5X3NpemVfdCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKKworCQkJCWlmICggbmV3X3NpemUgPD0gMCApCisJCQkJCWItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKKwkJCQllbHNlCisJCQkJCWItPnl5X2J1Zl9zaXplICo9IDI7CisKKwkJCQliLT55eV9jaF9idWYgPSAoY2hhciAqKQorCQkJCQkvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLworCQkJCQl5eXJlYWxsb2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAgKTsKKwkJCQl9CisJCQllbHNlCisJCQkJLyogQ2FuJ3QgZ3JvdyBpdCwgd2UgZG9uJ3Qgb3duIGl0LiAqLworCQkJCWItPnl5X2NoX2J1ZiA9IDA7CisKKwkJCWlmICggISBiLT55eV9jaF9idWYgKQorCQkJCVlZX0ZBVEFMX0VSUk9SKAorCQkJCSJmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQgYnVmZmVyIG92ZXJmbG93IiApOworCisJCQkoeXlfY19idWZfcCkgPSAmYi0+eXlfY2hfYnVmW3l5X2NfYnVmX3Bfb2Zmc2V0XTsKKworCQkJbnVtX3RvX3JlYWQgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0KKwkJCQkJCW51bWJlcl90b19tb3ZlIC0gMTsKKworCQkJfQorCisJCWlmICggbnVtX3RvX3JlYWQgPiBZWV9SRUFEX0JVRl9TSVpFICkKKwkJCW51bV90b19yZWFkID0gWVlfUkVBRF9CVUZfU0laRTsKKworCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8KKwkJWVlfSU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVyX3RvX21vdmVdKSwKKwkJCSh5eV9uX2NoYXJzKSwgbnVtX3RvX3JlYWQgKTsKKworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSAoeXlfbl9jaGFycyk7CisJCX0KKworCWlmICggKHl5X25fY2hhcnMpID09IDAgKQorCQl7CisJCWlmICggbnVtYmVyX3RvX21vdmUgPT0gWVlfTU9SRV9BREogKQorCQkJeworCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfRU5EX09GX0ZJTEU7CisJCQl5eXJlc3RhcnQoeXlpbiAgKTsKKwkJCX0KKworCQllbHNlCisJCQl7CisJCQlyZXRfdmFsID0gRU9CX0FDVF9MQVNUX01BVENIOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0KKwkJCQlZWV9CVUZGRVJfRU9GX1BFTkRJTkc7CisJCQl9CisJCX0KKworCWVsc2UKKwkJcmV0X3ZhbCA9IEVPQl9BQ1RfQ09OVElOVUVfU0NBTjsKKworCWlmICgoeXlfc2l6ZV90KSAoKHl5X25fY2hhcnMpICsgbnVtYmVyX3RvX21vdmUpID4gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSkgeworCQkvKiBFeHRlbmQgdGhlIGFycmF5IGJ5IDUwJSwgcGx1cyB0aGUgbnVtYmVyIHdlIHJlYWxseSBuZWVkLiAqLworCQl5eV9zaXplX3QgbmV3X3NpemUgPSAoeXlfbl9jaGFycykgKyBudW1iZXJfdG9fbW92ZSArICgoeXlfbl9jaGFycykgPj4gMSk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmID0gKGNoYXIgKikgeXlyZWFsbG9jKCh2b2lkICopIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmLG5ld19zaXplICApOworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7CisJfQorCisJKHl5X25fY2hhcnMpICs9IG51bWJlcl90b19tb3ZlOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hhcnMpICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwkoeXl0ZXh0X3B0cikgPSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8KKworLyogJWlmLWMtb25seSAqLworLyogJW5vdC1mb3ItaGVhZGVyICovCisKKyAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHZvaWQpCisvKiAlZW5kaWYgKi8KKy8qICVpZi1jKystb25seSAqLworLyogJWVuZGlmICovCit7CisJcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwOworICAgIAorLyogJSUgWzE1LjBdIGNvZGUgdG8gZ2V0IHRoZSBzdGFydCBzdGF0ZSBpbnRvIHl5X2N1cnJlbnRfc3RhdGUgZ29lcyBoZXJlICovCisJeXlfY3VycmVudF9zdGF0ZSA9ICh5eV9zdGFydCk7CisKKwlmb3IgKCB5eV9jcCA9ICh5eXRleHRfcHRyKSArIFlZX01PUkVfQURKOyB5eV9jcCA8ICh5eV9jX2J1Zl9wKTsgKyt5eV9jcCApCisJCXsKKy8qICUlIFsxNi4wXSBjb2RlIHRvIGZpbmQgdGhlIG5leHQgc3RhdGUgZ29lcyBoZXJlICovCisJCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEpOworCQlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCisJCQl7CisJCQkoeXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUpID0geXlfY3VycmVudF9zdGF0ZTsKKwkJCSh5eV9sYXN0X2FjY2VwdGluZ19jcG9zKSA9IHl5X2NwOworCQkJfQorCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJCQl7CisJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDE3ICkKKwkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCX0KKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CisJCX0KKworCXJldHVybiB5eV9jdXJyZW50X3N0YXRlOworfQorCisvKiB5eV90cnlfTlVMX3RyYW5zIC0gdHJ5IHRvIG1ha2UgYSB0cmFuc2l0aW9uIG9uIHRoZSBOVUwgY2hhcmFjdGVyCisgKgorICogc3lub3BzaXMKKyAqCW5leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCBjdXJyZW50X3N0YXRlICk7CisgKi8KKy8qICVpZi1jLW9ubHkgKi8KKyAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICAoeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlICkKKy8qICVlbmRpZiAqLworLyogJWlmLWMrKy1vbmx5ICovCisvKiAlZW5kaWYgKi8KK3sKKwlyZWdpc3RlciBpbnQgeXlfaXNfamFtOworICAgIC8qICUlIFsxNy4wXSBjb2RlIHRvIGZpbmQgdGhlIG5leHQgc3RhdGUsIGFuZCBwZXJoYXBzIGRvIGJhY2tpbmcgdXAsIGdvZXMgaGVyZSAqLworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwID0gKHl5X2NfYnVmX3ApOworCisJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gMTsKKwlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCisJCXsKKwkJKHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlKSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCSh5eV9sYXN0X2FjY2VwdGluZ19jcG9zKSA9IHl5X2NwOworCQl9CisJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQl7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSAxNyApCisJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJfQorCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDE2KTsKKworCQlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7Cit9CisKKy8qICVpZi1jLW9ubHkgKi8KKworLyogJWVuZGlmICovCisKKy8qICVpZi1jLW9ubHkgKi8KKyNpZm5kZWYgWVlfTk9fSU5QVVQKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIHN0YXRpYyBpbnQgeXlpbnB1dCAodm9pZCkKKyNlbHNlCisgICAgc3RhdGljIGludCBpbnB1dCAgKHZvaWQpCisjZW5kaWYKKworLyogJWVuZGlmICovCisvKiAlaWYtYysrLW9ubHkgKi8KKy8qICVlbmRpZiAqLworeworCWludCBjOworICAgIAorCSooeXlfY19idWZfcCkgPSAoeXlfaG9sZF9jaGFyKTsKKworCWlmICggKih5eV9jX2J1Zl9wKSA9PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQl7CisJCS8qIHl5X2NfYnVmX3Agbm93IHBvaW50cyB0byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJuLgorCQkgKiBJZiB0aGlzIG9jY3VycyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4gaXQncyBhCisJCSAqIHZhbGlkIE5VTDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCisJCSAqLworCQlpZiAoICh5eV9jX2J1Zl9wKSA8ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycyldICkKKwkJCS8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJCSooeXlfY19idWZfcCkgPSAnXDAnOworCisJCWVsc2UKKwkJCXsgLyogbmVlZCBtb3JlIGlucHV0ICovCisJCQl5eV9zaXplX3Qgb2Zmc2V0ID0gKHl5X2NfYnVmX3ApIC0gKHl5dGV4dF9wdHIpOworCQkJKysoeXlfY19idWZfcCk7CisKKwkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggICkgKQorCQkJCXsKKwkJCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKKwkJCQkJLyogVGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlfZ19uX2IoKQorCQkJCQkgKiBzZWVzIHRoYXQgd2UndmUgYWNjdW11bGF0ZWQgYQorCQkJCQkgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVkIHRvCisJCQkJCSAqIHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlCisJCQkJCSAqIHByb2NlZWRpbmcuICBCdXQgZm9yIGlucHV0KCksCisJCQkJCSAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29uc2lkZXIuCisJCQkJCSAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAorCQkJCQkgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgorCQkJCQkgKi8KKworCQkJCQkvKiBSZXNldCBidWZmZXIgc3RhdHVzLiAqLworCQkJCQl5eXJlc3RhcnQoeXlpbiApOworCisJCQkJCS8qRkFMTFRIUk9VR0gqLworCisJCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgorCQkJCQl7CisJCQkJCWlmICggeXl3cmFwKCApICkKKwkJCQkJCXJldHVybiBFT0Y7CisKKwkJCQkJaWYgKCAhICh5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpICkKKwkJCQkJCVlZX05FV19GSUxFOworI2lmZGVmIF9fY3BsdXNwbHVzCisJCQkJCXJldHVybiB5eWlucHV0KCk7CisjZWxzZQorCQkJCQlyZXR1cm4gaW5wdXQoKTsKKyNlbmRpZgorCQkJCQl9CisKKwkJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQkJKHl5X2NfYnVmX3ApID0gKHl5dGV4dF9wdHIpICsgb2Zmc2V0OworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCWMgPSAqKHVuc2lnbmVkIGNoYXIgKikgKHl5X2NfYnVmX3ApOwkvKiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KKwkqKHl5X2NfYnVmX3ApID0gJ1wwJzsJLyogcHJlc2VydmUgeXl0ZXh0ICovCisJKHl5X2hvbGRfY2hhcikgPSAqKysoeXlfY19idWZfcCk7CisKKy8qICUlIFsxOS4wXSB1cGRhdGUgQk9MIGFuZCB5eWxpbmVubyAqLworCisJcmV0dXJuIGM7Cit9CisvKiAlaWYtYy1vbmx5ICovCisjZW5kaWYJLyogaWZuZGVmIFlZX05PX0lOUFVUICovCisvKiAlZW5kaWYgKi8KKworLyoqIEltbWVkaWF0ZWx5IHN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBzdHJlYW0uCisgKiBAcGFyYW0gaW5wdXRfZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4KKyAqIAorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXNldCB0aGUgc3RhcnQgY29uZGl0aW9uIHRvIEBjIElOSVRJQUwgLgorICovCisvKiAlaWYtYy1vbmx5ICovCisgICAgdm9pZCB5eXJlc3RhcnQgIChGSUxFICogaW5wdXRfZmlsZSApCisvKiAlZW5kaWYgKi8KKy8qICVpZi1jKystb25seSAqLworLyogJWVuZGlmICovCit7CisgICAgCisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7CisgICAgICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKyAgICAgICAgICAgIHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSApOworCX0KKworCXl5X2luaXRfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSLGlucHV0X2ZpbGUgKTsKKwl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSggKTsKK30KKworLyoqIFN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IGlucHV0IGJ1ZmZlci4KKyAqIAorICovCisvKiAlaWYtYy1vbmx5ICovCisgICAgdm9pZCB5eV9zd2l0Y2hfdG9fYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBuZXdfYnVmZmVyICkKKy8qICVlbmRpZiAqLworLyogJWlmLWMrKy1vbmx5ICovCisvKiAlZW5kaWYgKi8KK3sKKyAgICAKKwkvKiBUT0RPLiBXZSBzaG91bGQgYmUgYWJsZSB0byByZXBsYWNlIHRoaXMgZW50aXJlIGZ1bmN0aW9uIGJvZHkKKwkgKiB3aXRoCisJICoJCXl5cG9wX2J1ZmZlcl9zdGF0ZSgpOworCSAqCQl5eXB1c2hfYnVmZmVyX3N0YXRlKG5ld19idWZmZXIpOworICAgICAqLworCXl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoKTsKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSID09IG5ld19idWZmZXIgKQorCQlyZXR1cm47CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJCSooeXlfY19idWZfcCkgPSAoeXlfaG9sZF9jaGFyKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0gKHl5X2NfYnVmX3ApOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSAoeXlfbl9jaGFycyk7CisJCX0KKworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisJeXlfbG9hZF9idWZmZXJfc3RhdGUoICk7CisKKwkvKiBXZSBkb24ndCBhY3R1YWxseSBrbm93IHdoZXRoZXIgd2UgZGlkIHRoaXMgc3dpdGNoIGR1cmluZworCSAqIEVPRiAoeXl3cmFwKCkpIHByb2Nlc3NpbmcsIGJ1dCB0aGUgb25seSB0aW1lIHRoaXMgZmxhZworCSAqIGlzIGxvb2tlZCBhdCBpcyBhZnRlciB5eXdyYXAoKSBpcyBjYWxsZWQsIHNvIGl0J3Mgc2FmZQorCSAqIHRvIGdvIGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0LgorCSAqLworCSh5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpID0gMTsKK30KKworLyogJWlmLWMtb25seSAqLworc3RhdGljIHZvaWQgeXlfbG9hZF9idWZmZXJfc3RhdGUgICh2b2lkKQorLyogJWVuZGlmICovCisvKiAlaWYtYysrLW9ubHkgKi8KKy8qICVlbmRpZiAqLworeworICAgIAkoeXlfbl9jaGFycykgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJKHl5dGV4dF9wdHIpID0gKHl5X2NfYnVmX3ApID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOworCXl5aW4gPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7CisJKHl5X2hvbGRfY2hhcikgPSAqKHl5X2NfYnVmX3ApOworfQorCisvKiogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gaW5wdXQgYnVmZmVyIHN0YXRlLgorICogQHBhcmFtIGZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0gc2l6ZSBUaGUgY2hhcmFjdGVyIGJ1ZmZlciBzaXplIGluIGJ5dGVzLiBXaGVuIGluIGRvdWJ0LCB1c2UgQGMgWVlfQlVGX1NJWkUuCisgKiAKKyAqIEByZXR1cm4gdGhlIGFsbG9jYXRlZCBidWZmZXIgc3RhdGUuCisgKi8KKy8qICVpZi1jLW9ubHkgKi8KKyAgICBZWV9CVUZGRVJfU1RBVEUgeXlfY3JlYXRlX2J1ZmZlciAgKEZJTEUgKiBmaWxlLCBpbnQgIHNpemUgKQorLyogJWVuZGlmICovCisvKiAlaWYtYysrLW9ubHkgKi8KKy8qICVlbmRpZiAqLworeworCVlZX0JVRkZFUl9TVEFURSBiOworICAgIAorCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigpIiApOworCisJYi0+eXlfYnVmX3NpemUgPSBzaXplOworCisJLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQorCSAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLgorCSAqLworCWItPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5YWxsb2MoYi0+eXlfYnVmX3NpemUgKyAyICApOworCWlmICggISBiLT55eV9jaF9idWYgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVyKCkiICk7CisKKwliLT55eV9pc19vdXJfYnVmZmVyID0gMTsKKworCXl5X2luaXRfYnVmZmVyKGIsZmlsZSApOworCisJcmV0dXJuIGI7Cit9CisKKy8qKiBEZXN0cm95IHRoZSBidWZmZXIuCisgKiBAcGFyYW0gYiBhIGJ1ZmZlciBjcmVhdGVkIHdpdGggeXlfY3JlYXRlX2J1ZmZlcigpCisgKiAKKyAqLworLyogJWlmLWMtb25seSAqLworICAgIHZvaWQgeXlfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICkKKy8qICVlbmRpZiAqLworLyogJWlmLWMrKy1vbmx5ICovCisvKiAlZW5kaWYgKi8KK3sKKyAgICAKKwlpZiAoICEgYiApCisJCXJldHVybjsKKworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5vdCBzdXJlIGlmIHdlIHNob3VsZCBwb3AgaGVyZS4gKi8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gKFlZX0JVRkZFUl9TVEFURSkgMDsKKworCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCisJCXl5ZnJlZSgodm9pZCAqKSBiLT55eV9jaF9idWYgICk7CisKKwl5eWZyZWUoKHZvaWQgKikgYiAgKTsKK30KKworLyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZlci4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgc29tZXRpbWVzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBidWZmZXIsCisgKiBzdWNoIGFzIGR1cmluZyBhIHl5cmVzdGFydCgpIG9yIGF0IEVPRi4KKyAqLworLyogJWlmLWMtb25seSAqLworICAgIHN0YXRpYyB2b2lkIHl5X2luaXRfYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBiLCBGSUxFICogZmlsZSApCisvKiAlZW5kaWYgKi8KKy8qICVpZi1jKystb25seSAqLworLyogJWVuZGlmICovCisKK3sKKwlpbnQgb2Vycm5vID0gZXJybm87CisgICAgCisJeXlfZmx1c2hfYnVmZmVyKGIgKTsKKworCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOworCWItPnl5X2ZpbGxfYnVmZmVyID0gMTsKKworICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHl5X2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCisgICAgICogY2FsbGVkIGZyb20geXlyZXN0YXJ0KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCisgICAgICogSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgorICAgICAqLworICAgIGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsKKyAgICAgICAgYi0+eXlfYnNfbGluZW5vID0gMTsKKyAgICAgICAgYi0+eXlfYnNfY29sdW1uID0gMDsKKyAgICB9CisKKy8qICVpZi1jLW9ubHkgKi8KKworICAgICAgICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9IGZpbGUgPyAoaXNhdHR5KCBmaWxlbm8oZmlsZSkgKSA+IDApIDogMDsKKyAgICAKKy8qICVlbmRpZiAqLworLyogJWlmLWMrKy1vbmx5ICovCisvKiAlZW5kaWYgKi8KKwllcnJubyA9IG9lcnJubzsKK30KKworLyoqIERpc2NhcmQgYWxsIGJ1ZmZlcmVkIGNoYXJhY3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4sIFlZX0lOUFVUIHdpbGwgYmUgY2FsbGVkLgorICogQHBhcmFtIGIgdGhlIGJ1ZmZlciBzdGF0ZSB0byBiZSBmbHVzaGVkLCB1c3VhbGx5IEBjIFlZX0NVUlJFTlRfQlVGRkVSLgorICogCisgKi8KKy8qICVpZi1jLW9ubHkgKi8KKyAgICB2b2lkIHl5X2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICkKKy8qICVlbmRpZiAqLworLyogJWlmLWMrKy1vbmx5ICovCisvKiAlZW5kaWYgKi8KK3sKKyAgICAJaWYgKCAhIGIgKQorCQlyZXR1cm47CisKKwliLT55eV9uX2NoYXJzID0gMDsKKworCS8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuICBUaGUgZmlyc3QgY2F1c2VzCisJICogYSB0cmFuc2l0aW9uIHRvIHRoZSBlbmQtb2YtYnVmZmVyIHN0YXRlLiAgVGhlIHNlY29uZCBjYXVzZXMKKwkgKiBhIGphbSBpbiB0aGF0IHN0YXRlLgorCSAqLworCWItPnl5X2NoX2J1ZlswXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKwliLT55eV9jaF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwliLT55eV9idWZfcG9zID0gJmItPnl5X2NoX2J1ZlswXTsKKworCWItPnl5X2F0X2JvbCA9IDE7CisJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKQorCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSggKTsKK30KKworLyogJWlmLWMtb3ItYysrICovCisvKiogUHVzaGVzIHRoZSBuZXcgc3RhdGUgb250byB0aGUgc3RhY2suIFRoZSBuZXcgc3RhdGUgYmVjb21lcworICogIHRoZSBjdXJyZW50IHN0YXRlLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxsb2NhdGUgdGhlIHN0YWNrCisgKiAgaWYgbmVjZXNzYXJ5LgorICogIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgc3RhdGUuCisgKiAgCisgKi8KKy8qICVpZi1jLW9ubHkgKi8KK3ZvaWQgeXlwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgKQorLyogJWVuZGlmICovCisvKiAlaWYtYysrLW9ubHkgKi8KKy8qICVlbmRpZiAqLworeworICAgIAlpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwl5eWVuc3VyZV9idWZmZXJfc3RhY2soKTsKKworCS8qIFRoaXMgYmxvY2sgaXMgY29waWVkIGZyb20geXlfc3dpdGNoX3RvX2J1ZmZlci4gKi8KKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJCSooeXlfY19idWZfcCkgPSAoeXlfaG9sZF9jaGFyKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0gKHl5X2NfYnVmX3ApOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSAoeXlfbl9jaGFycyk7CisJCX0KKworCS8qIE9ubHkgcHVzaCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLworCWlmIChZWV9DVVJSRU5UX0JVRkZFUikKKwkJKHl5X2J1ZmZlcl9zdGFja190b3ApKys7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKKworCS8qIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90b19idWZmZXIuICovCisJeXlfbG9hZF9idWZmZXJfc3RhdGUoICk7CisJKHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZikgPSAxOworfQorLyogJWVuZGlmICovCisKKy8qICVpZi1jLW9yLWMrKyAqLworLyoqIFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQuCisgKiAgVGhlIG5leHQgZWxlbWVudCBiZWNvbWVzIHRoZSBuZXcgdG9wLgorICogIAorICovCisvKiAlaWYtYy1vbmx5ICovCit2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAodm9pZCkKKy8qICVlbmRpZiAqLworLyogJWlmLWMrKy1vbmx5ICovCisvKiAlZW5kaWYgKi8KK3sKKyAgICAJaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikKKwkJcmV0dXJuOworCisJeXlfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiApOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7CisJaWYgKCh5eV9idWZmZXJfc3RhY2tfdG9wKSA+IDApCisJCS0tKHl5X2J1ZmZlcl9zdGFja190b3ApOworCisJaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7CisJCXl5X2xvYWRfYnVmZmVyX3N0YXRlKCApOworCQkoeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mKSA9IDE7CisJfQorfQorLyogJWVuZGlmICovCisKKy8qICVpZi1jLW9yLWMrKyAqLworLyogQWxsb2NhdGVzIHRoZSBzdGFjayBpZiBpdCBkb2VzIG5vdCBleGlzdC4KKyAqICBHdWFyYW50ZWVzIHNwYWNlIGZvciBhdCBsZWFzdCBvbmUgcHVzaC4KKyAqLworLyogJWlmLWMtb25seSAqLworc3RhdGljIHZvaWQgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh2b2lkKQorLyogJWVuZGlmICovCisvKiAlaWYtYysrLW9ubHkgKi8KKy8qICVlbmRpZiAqLworeworCXl5X3NpemVfdCBudW1fdG9fYWxsb2M7CisgICAgCisJaWYgKCEoeXlfYnVmZmVyX3N0YWNrKSkgeworCisJCS8qIEZpcnN0IGFsbG9jYXRpb24gaXMganVzdCBmb3IgMiBlbGVtZW50cywgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGlzCisJCSAqIHNjYW5uZXIgd2lsbCBldmVuIG5lZWQgYSBzdGFjay4gV2UgdXNlIDIgaW5zdGVhZCBvZiAxIHRvIGF2b2lkIGFuCisJCSAqIGltbWVkaWF0ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuCisgICAgICAgICAqLworCQludW1fdG9fYWxsb2MgPSAxOworCQkoeXlfYnVmZmVyX3N0YWNrKSA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopeXlhbGxvYworCQkJCQkJCQkobnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQorCQkJCQkJCQkpOworCQlpZiAoICEgKHl5X2J1ZmZlcl9zdGFjaykgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXllbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7CisJCQkJCQkJCSAgCisJCW1lbXNldCgoeXlfYnVmZmVyX3N0YWNrKSwgMCwgbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCQkJCisJCSh5eV9idWZmZXJfc3RhY2tfbWF4KSA9IG51bV90b19hbGxvYzsKKwkJKHl5X2J1ZmZlcl9zdGFja190b3ApID0gMDsKKwkJcmV0dXJuOworCX0KKworCWlmICgoeXlfYnVmZmVyX3N0YWNrX3RvcCkgPj0gKCh5eV9idWZmZXJfc3RhY2tfbWF4KSkgLSAxKXsKKworCQkvKiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRvIHByZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KKwkJaW50IGdyb3dfc2l6ZSA9IDggLyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsKKworCQludW1fdG9fYWxsb2MgPSAoeXlfYnVmZmVyX3N0YWNrX21heCkgKyBncm93X3NpemU7CisJCSh5eV9idWZmZXJfc3RhY2spID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eXJlYWxsb2MKKwkJCQkJCQkJKCh5eV9idWZmZXJfc3RhY2spLAorCQkJCQkJCQludW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSk7CisJCWlmICggISAoeXlfYnVmZmVyX3N0YWNrKSApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eWVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKKworCQkvKiB6ZXJvIG9ubHkgdGhlIG5ldyBzbG90cy4qLworCQltZW1zZXQoKHl5X2J1ZmZlcl9zdGFjaykgKyAoeXlfYnVmZmVyX3N0YWNrX21heCksIDAsIGdyb3dfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOworCQkoeXlfYnVmZmVyX3N0YWNrX21heCkgPSBudW1fdG9fYWxsb2M7CisJfQorfQorLyogJWVuZGlmICovCisKKy8qICVpZi1jLW9ubHkgKi8KKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCisgKiBAcGFyYW0gYmFzZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgorICogQHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGNoYXJhY3RlciBidWZmZXIKKyAqIAorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuIAorICovCitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9idWZmZXIgIChjaGFyICogYmFzZSwgeXlfc2l6ZV90ICBzaXplICkKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKyAgICAKKwlpZiAoIHNpemUgPCAyIHx8CisJICAgICBiYXNlW3NpemUtMl0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSIHx8CisJICAgICBiYXNlW3NpemUtMV0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkKKwkJLyogVGhleSBmb3Jnb3QgdG8gbGVhdmUgcm9vbSBmb3IgdGhlIEVPQidzLiAqLworCQlyZXR1cm4gMDsKKworCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1Zl9zaXplID0gc2l6ZSAtIDI7CS8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLworCWItPnl5X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYgPSBiYXNlOworCWItPnl5X2lzX291cl9idWZmZXIgPSAwOworCWItPnl5X2lucHV0X2ZpbGUgPSAwOworCWItPnl5X25fY2hhcnMgPSBiLT55eV9idWZfc2l6ZTsKKwliLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7CisJYi0+eXlfYXRfYm9sID0gMTsKKwliLT55eV9maWxsX2J1ZmZlciA9IDA7CisJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CisKKwl5eV9zd2l0Y2hfdG9fYnVmZmVyKGIgICk7CisKKwlyZXR1cm4gYjsKK30KKy8qICVlbmRpZiAqLworCisvKiAlaWYtYy1vbmx5ICovCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGEgc3RyaW5nLiBUaGUgbmV4dCBjYWxsIHRvIHl5bGV4KCkgd2lsbAorICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBzdHIuCisgKiBAcGFyYW0geXlzdHIgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgdG8gc2NhbgorICogCisgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KKyAqIEBub3RlIElmIHlvdSB3YW50IHRvIHNjYW4gYnl0ZXMgdGhhdCBtYXkgY29udGFpbiBOVUwgdmFsdWVzLCB0aGVuIHVzZQorICogICAgICAgeXlfc2Nhbl9ieXRlcygpIGluc3RlYWQuCisgKi8KK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICogeXlzdHIgKQoreworICAgIAorCXJldHVybiB5eV9zY2FuX2J5dGVzKHl5c3RyLHN0cmxlbih5eXN0cikgKTsKK30KKy8qICVlbmRpZiAqLworCisvKiAlaWYtYy1vbmx5ICovCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0byB5eWxleCgpIHdpbGwKKyAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMuCisgKiBAcGFyYW0geXlieXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8gc2NhbgorICogQHBhcmFtIF95eWJ5dGVzX2xlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRlcy4KKyAqIAorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisgKi8KK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICogeXlieXRlcywgeXlfc2l6ZV90ICBfeXlieXRlc19sZW4gKQoreworCVlZX0JVRkZFUl9TVEFURSBiOworCWNoYXIgKmJ1ZjsKKwl5eV9zaXplX3QgbjsKKwlpbnQgaTsKKyAgICAKKwkvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KKwluID0gX3l5Ynl0ZXNfbGVuICsgMjsKKwlidWYgPSAoY2hhciAqKSB5eWFsbG9jKG4gICk7CisJaWYgKCAhIGJ1ZiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X3NjYW5fYnl0ZXMoKSIgKTsKKworCWZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyArK2kgKQorCQlidWZbaV0gPSB5eWJ5dGVzW2ldOworCisJYnVmW195eWJ5dGVzX2xlbl0gPSBidWZbX3l5Ynl0ZXNfbGVuKzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJYiA9IHl5X3NjYW5fYnVmZmVyKGJ1ZixuICk7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9FUlJPUiggImJhZCBidWZmZXIgaW4geXlfc2Nhbl9ieXRlcygpIiApOworCisJLyogSXQncyBva2F5IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdlIHNob3VsZCB0aHJvdyBpdAorCSAqIGF3YXkgd2hlbiB3ZSdyZSBkb25lLgorCSAqLworCWItPnl5X2lzX291cl9idWZmZXIgPSAxOworCisJcmV0dXJuIGI7Cit9CisvKiAlZW5kaWYgKi8KKworI2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKKyNkZWZpbmUgWVlfRVhJVF9GQUlMVVJFIDIKKyNlbmRpZgorCisvKiAlaWYtYy1vbmx5ICovCitzdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyKiBtc2cgKQoreworICAgIAkodm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOworCWV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOworfQorLyogJWVuZGlmICovCisvKiAlaWYtYysrLW9ubHkgKi8KKy8qICVlbmRpZiAqLworCisvKiBSZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4gKi8KKworI3VuZGVmIHl5bGVzcworI2RlZmluZSB5eWxlc3MobikgXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAorICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAorICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJCXl5dGV4dFt5eWxlbmddID0gKHl5X2hvbGRfY2hhcik7IFwKKwkJKHl5X2NfYnVmX3ApID0geXl0ZXh0ICsgeXlsZXNzX21hY3JvX2FyZzsgXAorCQkoeXlfaG9sZF9jaGFyKSA9ICooeXlfY19idWZfcCk7IFwKKwkJKih5eV9jX2J1Zl9wKSA9ICdcMCc7IFwKKwkJeXlsZW5nID0geXlsZXNzX21hY3JvX2FyZzsgXAorCQl9IFwKKwl3aGlsZSAoIDAgKQorCisvKiBBY2Nlc3NvciAgbWV0aG9kcyAoZ2V0L3NldCBmdW5jdGlvbnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLworCisvKiAlaWYtYy1vbmx5ICovCisvKiAlaWYtcmVlbnRyYW50ICovCisvKiAlZW5kaWYgKi8KKworLyoqIEdldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KKyAqIAorICovCitpbnQgeXlnZXRfbGluZW5vICAodm9pZCkKK3sKKyAgICAgICAgCisgICAgcmV0dXJuIHl5bGluZW5vOworfQorCisvKiogR2V0IHRoZSBpbnB1dCBzdHJlYW0uCisgKiAKKyAqLworRklMRSAqeXlnZXRfaW4gICh2b2lkKQoreworICAgICAgICByZXR1cm4geXlpbjsKK30KKworLyoqIEdldCB0aGUgb3V0cHV0IHN0cmVhbS4KKyAqIAorICovCitGSUxFICp5eWdldF9vdXQgICh2b2lkKQoreworICAgICAgICByZXR1cm4geXlvdXQ7Cit9CisKKy8qKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCB0b2tlbi4KKyAqIAorICovCit5eV9zaXplX3QgeXlnZXRfbGVuZyAgKHZvaWQpCit7CisgICAgICAgIHJldHVybiB5eWxlbmc7Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQgdG9rZW4uCisgKiAKKyAqLworCitjaGFyICp5eWdldF90ZXh0ICAodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIHl5dGV4dDsKK30KKworLyogJWlmLXJlZW50cmFudCAqLworLyogJWVuZGlmICovCisKKy8qKiBTZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCisgKiBAcGFyYW0gbGluZV9udW1iZXIKKyAqIAorICovCit2b2lkIHl5c2V0X2xpbmVubyAoaW50ICBsaW5lX251bWJlciApCit7CisgICAgCisgICAgeXlsaW5lbm8gPSBsaW5lX251bWJlcjsKK30KKworLyoqIFNldCB0aGUgaW5wdXQgc3RyZWFtLiBUaGlzIGRvZXMgbm90IGRpc2NhcmQgdGhlIGN1cnJlbnQKKyAqIGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSBpbl9zdHIgQSByZWFkYWJsZSBzdHJlYW0uCisgKiAKKyAqIEBzZWUgeXlfc3dpdGNoX3RvX2J1ZmZlcgorICovCit2b2lkIHl5c2V0X2luIChGSUxFICogIGluX3N0ciApCit7CisgICAgICAgIHl5aW4gPSBpbl9zdHIgOworfQorCit2b2lkIHl5c2V0X291dCAoRklMRSAqICBvdXRfc3RyICkKK3sKKyAgICAgICAgeXlvdXQgPSBvdXRfc3RyIDsKK30KKworaW50IHl5Z2V0X2RlYnVnICAodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIHl5X2ZsZXhfZGVidWc7Cit9CisKK3ZvaWQgeXlzZXRfZGVidWcgKGludCAgYmRlYnVnICkKK3sKKyAgICAgICAgeXlfZmxleF9kZWJ1ZyA9IGJkZWJ1ZyA7Cit9CisKKy8qICVlbmRpZiAqLworCisvKiAlaWYtcmVlbnRyYW50ICovCisvKiAlaWYtYmlzb24tYnJpZGdlICovCisvKiAlZW5kaWYgKi8KKy8qICVlbmRpZiBpZi1jLW9ubHkgKi8KKworLyogJWlmLWMtb25seSAqLworc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHZvaWQpCit7CisgICAgICAgIC8qIEluaXRpYWxpemF0aW9uIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLgorICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20geXlsZXhfZGVzdHJveSgpLCBzbyBkb24ndCBhbGxvY2F0ZSBoZXJlLgorICAgICAqLworCisgICAgKHl5X2J1ZmZlcl9zdGFjaykgPSAwOworICAgICh5eV9idWZmZXJfc3RhY2tfdG9wKSA9IDA7CisgICAgKHl5X2J1ZmZlcl9zdGFja19tYXgpID0gMDsKKyAgICAoeXlfY19idWZfcCkgPSAoY2hhciAqKSAwOworICAgICh5eV9pbml0KSA9IDA7CisgICAgKHl5X3N0YXJ0KSA9IDA7CisKKy8qIERlZmluZWQgaW4gbWFpbi5jICovCisjaWZkZWYgWVlfU1RESU5JVAorICAgIHl5aW4gPSBzdGRpbjsKKyAgICB5eW91dCA9IHN0ZG91dDsKKyNlbHNlCisgICAgeXlpbiA9IChGSUxFICopIDA7CisgICAgeXlvdXQgPSAoRklMRSAqKSAwOworI2VuZGlmCisKKyAgICAvKiBGb3IgZnV0dXJlIHJlZmVyZW5jZTogU2V0IGVycm5vIG9uIGVycm9yLCBzaW5jZSB3ZSBhcmUgY2FsbGVkIGJ5CisgICAgICogeXlsZXhfaW5pdCgpCisgICAgICovCisgICAgcmV0dXJuIDA7Cit9CisvKiAlZW5kaWYgKi8KKworLyogJWlmLWMtb25seSBTTklQISB0aGlzIGN1cnJlbnRseSBjYXVzZXMgY29uZmxpY3RzIHdpdGggdGhlIGMrKyBzY2FubmVyICovCisvKiB5eWxleF9kZXN0cm95IGlzIGZvciBib3RoIHJlZW50cmFudCBhbmQgbm9uLXJlZW50cmFudCBzY2FubmVycy4gKi8KK2ludCB5eWxleF9kZXN0cm95ICAodm9pZCkKK3sKKyAgICAKKyAgICAvKiBQb3AgdGhlIGJ1ZmZlciBzdGFjaywgZGVzdHJveWluZyBlYWNoIGVsZW1lbnQuICovCisJd2hpbGUoWVlfQ1VSUkVOVF9CVUZGRVIpeworCQl5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICApOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOworCQl5eXBvcF9idWZmZXJfc3RhdGUoKTsKKwl9CisKKwkvKiBEZXN0cm95IHRoZSBzdGFjayBpdHNlbGYuICovCisJeXlmcmVlKCh5eV9idWZmZXJfc3RhY2spICk7CisJKHl5X2J1ZmZlcl9zdGFjaykgPSBOVUxMOworCisgICAgLyogUmVzZXQgdGhlIGdsb2JhbHMuIFRoaXMgaXMgaW1wb3J0YW50IGluIGEgbm9uLXJlZW50cmFudCBzY2FubmVyIHNvIHRoZSBuZXh0IHRpbWUKKyAgICAgKiB5eWxleCgpIGlzIGNhbGxlZCwgaW5pdGlhbGl6YXRpb24gd2lsbCBvY2N1ci4gKi8KKyAgICB5eV9pbml0X2dsb2JhbHMoICk7CisKKy8qICVpZi1yZWVudHJhbnQgKi8KKy8qICVlbmRpZiAqLworICAgIHJldHVybiAwOworfQorLyogJWVuZGlmICovCisKKy8qCisgKiBJbnRlcm5hbCB1dGlsaXR5IHJvdXRpbmVzLgorICovCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICkKK3sKKwlyZWdpc3RlciBpbnQgaTsKKwlmb3IgKCBpID0gMDsgaSA8IG47ICsraSApCisJCXMxW2ldID0gczJbaV07Cit9CisjZW5kaWYKKworI2lmZGVmIFlZX05FRURfU1RSTEVOCitzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiBzICkKK3sKKwlyZWdpc3RlciBpbnQgbjsKKwlmb3IgKCBuID0gMDsgc1tuXTsgKytuICkKKwkJOworCisJcmV0dXJuIG47Cit9CisjZW5kaWYKKwordm9pZCAqeXlhbGxvYyAoeXlfc2l6ZV90ICBzaXplICkKK3sKKwlyZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBzaXplICk7Cit9CisKK3ZvaWQgKnl5cmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVfdCAgc2l6ZSApCit7CisJLyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90aAorCSAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKKwkgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCisJICogYmVjYXVzZSBib3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQorCSAqIGFueSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMKKwkgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KKwkgKi8KKwlyZXR1cm4gKHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7Cit9CisKK3ZvaWQgeXlmcmVlICh2b2lkICogcHRyICkKK3sKKwlmcmVlKCAoY2hhciAqKSBwdHIgKTsJLyogc2VlIHl5cmVhbGxvYygpIGZvciAoY2hhciAqKSBjYXN0ICovCit9CisKKy8qICVpZi10YWJsZXMtc2VyaWFsaXphdGlvbiBkZWZpbml0aW9ucyAqLworLyogJWRlZmluZS15eXRhYmxlcyAgIFRoZSBuYW1lIGZvciB0aGlzIHNwZWNpZmljIHNjYW5uZXIncyB0YWJsZXMuICovCisjZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgorLyogJWVuZGlmICovCisKKy8qICVvay1mb3ItaGVhZGVyICovCisKKyNsaW5lIDY3ICJjYWxjKystc2Nhbm5lci5sbCIKKworCisKKwordm9pZAorY2FsY3h4X2RyaXZlcjo6c2Nhbl9iZWdpbiAoKQoreworICB5eV9mbGV4X2RlYnVnID0gdHJhY2Vfc2Nhbm5pbmc7CisgIGlmIChmaWxlLmVtcHR5ICgpIHx8IGZpbGUgPT0gIi0iKQorICAgIHl5aW4gPSBzdGRpbjsKKyAgZWxzZSBpZiAoISh5eWluID0gZm9wZW4gKGZpbGUuY19zdHIgKCksICJyIikpKQorICAgIHsKKyAgICAgIGVycm9yICgiY2Fubm90IG9wZW4gIiArIGZpbGUgKyAiOiAiICsgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgIGV4aXQgKEVYSVRfRkFJTFVSRSk7CisgICAgfQorfQorCisKKwordm9pZAorY2FsY3h4X2RyaXZlcjo6c2Nhbl9lbmQgKCkKK3sKKyAgZmNsb3NlICh5eWluKTsKK30KKworCmRpZmYgLS1naXQgYS9leGFtcGxlcy9jYWxjKysvY2FsYysrLXNjYW5uZXIubGwgYi9leGFtcGxlcy9jYWxjKysvY2FsYysrLXNjYW5uZXIubGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVlN2ZlYQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2NhbGMrKy9jYWxjKystc2Nhbm5lci5sbApAQCAtMCwwICsxLDkwIEBACisleyAvKiAtKi0gQysrIC0qLSAqLworIyBpbmNsdWRlIDxjc3RkbGliPgorIyBpbmNsdWRlIDxjZXJybm8+CisjIGluY2x1ZGUgPGNsaW1pdHM+CisjIGluY2x1ZGUgPHN0cmluZz4KKyMgaW5jbHVkZSAiY2FsYysrLWRyaXZlci5oaCIKKyMgaW5jbHVkZSAiY2FsYysrLXBhcnNlci5oaCIKKworLyogV29yayBhcm91bmQgYW4gaW5jb21wYXRpYmlsaXR5IGluIGZsZXggKGF0IGxlYXN0IHZlcnNpb25zCisgICAyLjUuMzEgdGhyb3VnaCAyLjUuMzMpOiBpdCBnZW5lcmF0ZXMgY29kZSB0aGF0IGRvZXMKKyAgIG5vdCBjb25mb3JtIHRvIEM4OS4gIFNlZSBEZWJpYW4gYnVnIDMzMzIzMQorICAgPGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvY2dpLWJpbi9idWdyZXBvcnQuY2dpP2J1Zz0zMzMyMzE+LiAgKi8KKyMgdW5kZWYgeXl3cmFwCisjIGRlZmluZSB5eXdyYXAoKSAxCisKKy8qIEJ5IGRlZmF1bHQgeXlsZXggcmV0dXJucyBpbnQsIHdlIHVzZSB0b2tlbl90eXBlLgorICAgVW5mb3J0dW5hdGVseSB5eXRlcm1pbmF0ZSBieSBkZWZhdWx0IHJldHVybnMgMCwgd2hpY2ggaXMKKyAgIG5vdCBvZiB0b2tlbl90eXBlLiAgKi8KKyNkZWZpbmUgeXl0ZXJtaW5hdGUoKSByZXR1cm4gdG9rZW46OkVORAorJX0KKworJW9wdGlvbiBub3l5d3JhcCBub3VucHV0IGJhdGNoIGRlYnVnCisKK2lkICAgIFthLXpBLVpdW2EtekEtWl8wLTldKgoraW50ICAgWzAtOV0rCitibGFuayBbIFx0XQorCisKKyV7CisjIGRlZmluZSBZWV9VU0VSX0FDVElPTiAgeXlsbG9jLT5jb2x1bW5zICh5eWxlbmcpOworJX0KKworJSUKKyV7CisgIHl5bGxvYy0+c3RlcCAoKTsKKyV9Cit7Ymxhbmt9KyAgIHl5bGxvYy0+c3RlcCAoKTsKK1tcbl0rICAgICAgeXlsbG9jLT5saW5lcyAoeXlsZW5nKTsgeXlsbG9jLT5zdGVwICgpOworCisleworICB0eXBlZGVmIHl5OjpjYWxjeHhfcGFyc2VyOjp0b2tlbiB0b2tlbjsKKyV9CisgICAgICAgICAvKiBDb252ZXJ0IGludHMgdG8gdGhlIGFjdHVhbCB0eXBlIG9mIHRva2Vucy4gICovCitbLSsqL10gICByZXR1cm4geXk6OmNhbGN4eF9wYXJzZXI6OnRva2VuX3R5cGUgKHl5dGV4dFswXSk7CisKKyI6PSIgICAgIHJldHVybiB0b2tlbjo6QVNTSUdOOworCisKK3tpbnR9ICAgIHsKKyAgICAgICAgICAgZXJybm8gPSAwOworICAgICAgICAgICBsb25nIG4gPSBzdHJ0b2wgKHl5dGV4dCwgTlVMTCwgMTApOworICAgICAgICAgICBpZiAoISAoSU5UX01JTiA8PSBuICYmIG4gPD0gSU5UX01BWCAmJiBlcnJubyAhPSBFUkFOR0UpKQorICAgICAgICAgICAgIGRyaXZlci5lcnJvciAoKnl5bGxvYywgImludGVnZXIgaXMgb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgIHl5bHZhbC0+aXZhbCA9IG47CisgICAgICAgICAgIHJldHVybiB0b2tlbjo6TlVNQkVSOworICAgICAgICAgfQorCisKKwore2lkfSAgICAgeworICAgICAgICAgICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJpbmcgKHl5dGV4dCk7CisgICAgICAgICAgIHJldHVybiB0b2tlbjo6SURFTlRJRklFUjsKKyAgICAgICAgIH0KKworCisuICAgICAgICBkcml2ZXIuZXJyb3IgKCp5eWxsb2MsICJpbnZhbGlkIGNoYXJhY3RlciIpOworJSUKKworCit2b2lkCitjYWxjeHhfZHJpdmVyOjpzY2FuX2JlZ2luICgpCit7CisgIHl5X2ZsZXhfZGVidWcgPSB0cmFjZV9zY2FubmluZzsKKyAgaWYgKGZpbGUuZW1wdHkgKCkgfHwgZmlsZSA9PSAiLSIpCisgICAgeXlpbiA9IHN0ZGluOworICBlbHNlIGlmICghKHl5aW4gPSBmb3BlbiAoZmlsZS5jX3N0ciAoKSwgInIiKSkpCisgICAgeworICAgICAgZXJyb3IgKCJjYW5ub3Qgb3BlbiAiICsgZmlsZSArICI6ICIgKyBzdHJlcnJvcihlcnJubykpOworICAgICAgZXhpdCAoRVhJVF9GQUlMVVJFKTsKKyAgICB9Cit9CisKKworCit2b2lkCitjYWxjeHhfZHJpdmVyOjpzY2FuX2VuZCAoKQoreworICBmY2xvc2UgKHl5aW4pOworfQorCmRpZmYgLS1naXQgYS9leGFtcGxlcy9jYWxjKysvY2FsYysrLmNjIGIvZXhhbXBsZXMvY2FsYysrL2NhbGMrKy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjBmOGZjCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvY2FsYysrL2NhbGMrKy5jYwpAQCAtMCwwICsxLDE4IEBACisjbGluZSAxMDUwNyAiLi4vLi4vZG9jL2Jpc29uLnRleGkiCisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSAiY2FsYysrLWRyaXZlci5oaCIKKworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIGNhbGN4eF9kcml2ZXIgZHJpdmVyOworICBmb3IgKGludCBpID0gMTsgaSA8IGFyZ2M7ICsraSkKKyAgICBpZiAoYXJndltpXSA9PSBzdGQ6OnN0cmluZyAoIi1wIikpCisgICAgICBkcml2ZXIudHJhY2VfcGFyc2luZyA9IHRydWU7CisgICAgZWxzZSBpZiAoYXJndltpXSA9PSBzdGQ6OnN0cmluZyAoIi1zIikpCisgICAgICBkcml2ZXIudHJhY2Vfc2Nhbm5pbmcgPSB0cnVlOworICAgIGVsc2UgaWYgKCFkcml2ZXIucGFyc2UgKGFyZ3ZbaV0pKQorICAgICAgc3RkOjpjb3V0IDw8IGRyaXZlci5yZXN1bHQgPDwgc3RkOjplbmRsOworfQorCmRpZmYgLS1naXQgYS9leGFtcGxlcy9jYWxjKysvY2FsYy5zdGFtcCBiL2V4YW1wbGVzL2NhbGMrKy9jYWxjLnN0YW1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9jYWxjKysvY2FsYy5zdGFtcApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvY2FsYysrL2xvY2F0aW9uLmhoIGIvZXhhbXBsZXMvY2FsYysrL2xvY2F0aW9uLmhoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZDViYzYKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9jYWxjKysvbG9jYXRpb24uaGgKQEAgLTAsMCArMSwxODEgQEAKKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjYuOTAuOC1kNGZlLiAgKi8KKworLyogTG9jYXRpb25zIGZvciBCaXNvbiBwYXJzZXJzIGluIEMrKworICAgCisgICAgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKKyAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCisgICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKKyAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCisgICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCisgICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCisgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKKyAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KKyAgIAorICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgorICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLworCisvKioKKyAqKiBcZmlsZSAuLi8uLi8uLi8uLi9leGFtcGxlcy9jYWxjKysvbG9jYXRpb24uaGgKKyAqKiBEZWZpbmUgdGhlIHl5Ojpsb2NhdGlvbiBjbGFzcy4KKyAqLworCisjaWZuZGVmIFlZX1lZX0VYQU1QTEVTX0NBTENfTE9DQVRJT05fSEhfSU5DTFVERUQKKyMgZGVmaW5lIFlZX1lZX0VYQU1QTEVTX0NBTENfTE9DQVRJT05fSEhfSU5DTFVERUQKKworIyBpbmNsdWRlICJwb3NpdGlvbi5oaCIKKworCituYW1lc3BhY2UgeXkgeworLyogTGluZSAxNjYgb2YgbG9jYXRpb24uY2MgICovCisjbGluZSA0NyAiLi4vLi4vLi4vLi4vZXhhbXBsZXMvY2FsYysrL2xvY2F0aW9uLmhoIgorCisgIC8vLyBBYnN0cmFjdCBhIGxvY2F0aW9uLgorICBjbGFzcyBsb2NhdGlvbgorICB7CisgIHB1YmxpYzoKKworICAgIC8vLyBDb25zdHJ1Y3QgYSBsb2NhdGlvbiBmcm9tIFxhIGIgdG8gXGEgZS4KKyAgICBsb2NhdGlvbiAoY29uc3QgcG9zaXRpb24mIGIsIGNvbnN0IHBvc2l0aW9uJiBlKQorICAgICAgOiBiZWdpbiAoYikKKyAgICAgICwgZW5kIChlKQorICAgIHsKKyAgICB9CisKKyAgICAvLy8gQ29uc3RydWN0IGEgMC13aWR0aCBsb2NhdGlvbiBpbiBcYSBwLgorICAgIGV4cGxpY2l0IGxvY2F0aW9uIChjb25zdCBwb3NpdGlvbiYgcCA9IHBvc2l0aW9uICgpKQorICAgICAgOiBiZWdpbiAocCkKKyAgICAgICwgZW5kIChwKQorICAgIHsKKyAgICB9CisKKyAgICAvLy8gQ29uc3RydWN0IGEgMC13aWR0aCBsb2NhdGlvbiBpbiBcYSBmLCBcYSBsLCBcYSBjLgorICAgIGV4cGxpY2l0IGxvY2F0aW9uIChzdGQ6OnN0cmluZyogZiwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGwgPSAxdSwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGMgPSAxdSkKKyAgICAgIDogYmVnaW4gKGYsIGwsIGMpCisgICAgICAsIGVuZCAoZiwgbCwgYykKKyAgICB7CisgICAgfQorCisKKyAgICAvLy8gSW5pdGlhbGl6YXRpb24uCisgICAgdm9pZCBpbml0aWFsaXplIChzdGQ6OnN0cmluZyogZiA9IFlZX05VTEwsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbCA9IDF1LAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGMgPSAxdSkKKyAgICB7CisgICAgICBiZWdpbi5pbml0aWFsaXplIChmLCBsLCBjKTsKKyAgICAgIGVuZCA9IGJlZ2luOworICAgIH0KKworICAgIC8qKiBcbmFtZSBMaW5lIGFuZCBDb2x1bW4gcmVsYXRlZCBtYW5pcHVsYXRvcnMKKyAgICAgKiogXHsgKi8KKyAgcHVibGljOgorICAgIC8vLyBSZXNldCBpbml0aWFsIGxvY2F0aW9uIHRvIGZpbmFsIGxvY2F0aW9uLgorICAgIHZvaWQgc3RlcCAoKQorICAgIHsKKyAgICAgIGJlZ2luID0gZW5kOworICAgIH0KKworICAgIC8vLyBFeHRlbmQgdGhlIGN1cnJlbnQgbG9jYXRpb24gdG8gdGhlIENPVU5UIG5leHQgY29sdW1ucy4KKyAgICB2b2lkIGNvbHVtbnMgKHVuc2lnbmVkIGludCBjb3VudCA9IDEpCisgICAgeworICAgICAgZW5kICs9IGNvdW50OworICAgIH0KKworICAgIC8vLyBFeHRlbmQgdGhlIGN1cnJlbnQgbG9jYXRpb24gdG8gdGhlIENPVU5UIG5leHQgbGluZXMuCisgICAgdm9pZCBsaW5lcyAodW5zaWduZWQgaW50IGNvdW50ID0gMSkKKyAgICB7CisgICAgICBlbmQubGluZXMgKGNvdW50KTsKKyAgICB9CisgICAgLyoqIFx9ICovCisKKworICBwdWJsaWM6CisgICAgLy8vIEJlZ2lubmluZyBvZiB0aGUgbG9jYXRlZCByZWdpb24uCisgICAgcG9zaXRpb24gYmVnaW47CisgICAgLy8vIEVuZCBvZiB0aGUgbG9jYXRlZCByZWdpb24uCisgICAgcG9zaXRpb24gZW5kOworICB9OworCisgIC8vLyBKb2luIHR3byBsb2NhdGlvbiBvYmplY3RzIHRvIGNyZWF0ZSBhIGxvY2F0aW9uLgorICBpbmxpbmUgY29uc3QgbG9jYXRpb24gb3BlcmF0b3IrIChjb25zdCBsb2NhdGlvbiYgYmVnaW4sIGNvbnN0IGxvY2F0aW9uJiBlbmQpCisgIHsKKyAgICBsb2NhdGlvbiByZXMgPSBiZWdpbjsKKyAgICByZXMuZW5kID0gZW5kLmVuZDsKKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgLy8vIEFkZCB0d28gbG9jYXRpb24gb2JqZWN0cy4KKyAgaW5saW5lIGNvbnN0IGxvY2F0aW9uIG9wZXJhdG9yKyAoY29uc3QgbG9jYXRpb24mIGJlZ2luLCB1bnNpZ25lZCBpbnQgd2lkdGgpCisgIHsKKyAgICBsb2NhdGlvbiByZXMgPSBiZWdpbjsKKyAgICByZXMuY29sdW1ucyAod2lkdGgpOworICAgIHJldHVybiByZXM7CisgIH0KKworICAvLy8gQWRkIGFuZCBhc3NpZ24gYSBsb2NhdGlvbi4KKyAgaW5saW5lIGxvY2F0aW9uJiBvcGVyYXRvcis9IChsb2NhdGlvbiYgcmVzLCB1bnNpZ25lZCBpbnQgd2lkdGgpCisgIHsKKyAgICByZXMuY29sdW1ucyAod2lkdGgpOworICAgIHJldHVybiByZXM7CisgIH0KKworICAvLy8gQ29tcGFyZSB0d28gbG9jYXRpb24gb2JqZWN0cy4KKyAgaW5saW5lIGJvb2wKKyAgb3BlcmF0b3I9PSAoY29uc3QgbG9jYXRpb24mIGxvYzEsIGNvbnN0IGxvY2F0aW9uJiBsb2MyKQorICB7CisgICAgcmV0dXJuIGxvYzEuYmVnaW4gPT0gbG9jMi5iZWdpbiAmJiBsb2MxLmVuZCA9PSBsb2MyLmVuZDsKKyAgfQorCisgIC8vLyBDb21wYXJlIHR3byBsb2NhdGlvbiBvYmplY3RzLgorICBpbmxpbmUgYm9vbAorICBvcGVyYXRvciE9IChjb25zdCBsb2NhdGlvbiYgbG9jMSwgY29uc3QgbG9jYXRpb24mIGxvYzIpCisgIHsKKyAgICByZXR1cm4gIShsb2MxID09IGxvYzIpOworICB9CisKKyAgLyoqIFxicmllZiBJbnRlcmNlcHQgb3V0cHV0IHN0cmVhbSByZWRpcmVjdGlvbi4KKyAgICoqIFxwYXJhbSBvc3RyIHRoZSBkZXN0aW5hdGlvbiBvdXRwdXQgc3RyZWFtCisgICAqKiBccGFyYW0gbG9jIGEgcmVmZXJlbmNlIHRvIHRoZSBsb2NhdGlvbiB0byByZWRpcmVjdAorICAgKioKKyAgICoqIEF2b2lkIGR1cGxpY2F0ZSBpbmZvcm1hdGlvbi4KKyAgICovCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBZWUNoYXI+CisgIGlubGluZSBzdGQ6OmJhc2ljX29zdHJlYW08WVlDaGFyPiYKKyAgb3BlcmF0b3I8PCAoc3RkOjpiYXNpY19vc3RyZWFtPFlZQ2hhcj4mIG9zdHIsIGNvbnN0IGxvY2F0aW9uJiBsb2MpCisgIHsKKyAgICBwb3NpdGlvbiBsYXN0ID0gbG9jLmVuZCAtIDE7CisgICAgb3N0ciA8PCBsb2MuYmVnaW47CisgICAgaWYgKGxhc3QuZmlsZW5hbWUKKwkmJiAoIWxvYy5iZWdpbi5maWxlbmFtZQorCSAgICB8fCAqbG9jLmJlZ2luLmZpbGVuYW1lICE9ICpsYXN0LmZpbGVuYW1lKSkKKyAgICAgIG9zdHIgPDwgJy0nIDw8IGxhc3Q7CisgICAgZWxzZSBpZiAobG9jLmJlZ2luLmxpbmUgIT0gbGFzdC5saW5lKQorICAgICAgb3N0ciA8PCAnLScgPDwgbGFzdC5saW5lICA8PCAnLicgPDwgbGFzdC5jb2x1bW47CisgICAgZWxzZSBpZiAobG9jLmJlZ2luLmNvbHVtbiAhPSBsYXN0LmNvbHVtbikKKyAgICAgIG9zdHIgPDwgJy0nIDw8IGxhc3QuY29sdW1uOworICAgIHJldHVybiBvc3RyOworICB9CisKKworfSAvLyB5eQorLyogTGluZSAyOTYgb2YgbG9jYXRpb24uY2MgICovCisjbGluZSAxODAgIi4uLy4uLy4uLy4uL2V4YW1wbGVzL2NhbGMrKy9sb2NhdGlvbi5oaCIKKworI2VuZGlmIC8qICFZWV9ZWV9FWEFNUExFU19DQUxDX0xPQ0FUSU9OX0hIX0lOQ0xVREVEICAqLwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvY2FsYysrL3Bvc2l0aW9uLmhoIGIvZXhhbXBsZXMvY2FsYysrL3Bvc2l0aW9uLmhoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZWQ0Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9jYWxjKysvcG9zaXRpb24uaGgKQEAgLTAsMCArMSwxNzIgQEAKKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjYuOTAuOC1kNGZlLiAgKi8KKworLyogUG9zaXRpb25zIGZvciBCaXNvbiBwYXJzZXJzIGluIEMrKworICAgCisgICAgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKKyAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCisgICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKKyAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCisgICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCisgICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCisgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKKyAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KKyAgIAorICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgorICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLworCisvKioKKyAqKiBcZmlsZSAuLi8uLi8uLi8uLi9leGFtcGxlcy9jYWxjKysvcG9zaXRpb24uaGgKKyAqKiBEZWZpbmUgdGhlIHl5Ojpwb3NpdGlvbiBjbGFzcy4KKyAqLworCisjaWZuZGVmIFlZX1lZX0VYQU1QTEVTX0NBTENfUE9TSVRJT05fSEhfSU5DTFVERUQKKyMgZGVmaW5lIFlZX1lZX0VYQU1QTEVTX0NBTENfUE9TSVRJT05fSEhfSU5DTFVERUQKKworIyBpbmNsdWRlIDxhbGdvcml0aG0+IC8vIHN0ZDo6bWF4CisjIGluY2x1ZGUgPGlvc3RyZWFtPgorIyBpbmNsdWRlIDxzdHJpbmc+CisKKyMgaWZuZGVmIFlZX05VTEwKKyMgIGlmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgMjAxMTAzTCA8PSBfX2NwbHVzcGx1cworIyAgIGRlZmluZSBZWV9OVUxMIG51bGxwdHIKKyMgIGVsc2UKKyMgICBkZWZpbmUgWVlfTlVMTCAwCisjICBlbmRpZgorIyBlbmRpZgorCisKK25hbWVzcGFjZSB5eSB7CisvKiBMaW5lIDM2IG9mIGxvY2F0aW9uLmNjICAqLworI2xpbmUgNTcgIi4uLy4uLy4uLy4uL2V4YW1wbGVzL2NhbGMrKy9wb3NpdGlvbi5oaCIKKyAgLy8vIEFic3RyYWN0IGEgcG9zaXRpb24uCisgIGNsYXNzIHBvc2l0aW9uCisgIHsKKyAgcHVibGljOgorCisgICAgLy8vIENvbnN0cnVjdCBhIHBvc2l0aW9uLgorICAgIGV4cGxpY2l0IHBvc2l0aW9uIChzdGQ6OnN0cmluZyogZiA9IFlZX05VTEwsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsID0gMXUsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjID0gMXUpCisgICAgICA6IGZpbGVuYW1lIChmKQorICAgICAgLCBsaW5lIChsKQorICAgICAgLCBjb2x1bW4gKGMpCisgICAgeworICAgIH0KKworCisgICAgLy8vIEluaXRpYWxpemF0aW9uLgorICAgIHZvaWQgaW5pdGlhbGl6ZSAoc3RkOjpzdHJpbmcqIGZuID0gWVlfTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsID0gMXUsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYyA9IDF1KQorICAgIHsKKyAgICAgIGZpbGVuYW1lID0gZm47CisgICAgICBsaW5lID0gbDsKKyAgICAgIGNvbHVtbiA9IGM7CisgICAgfQorCisgICAgLyoqIFxuYW1lIExpbmUgYW5kIENvbHVtbiByZWxhdGVkIG1hbmlwdWxhdG9ycworICAgICAqKiBceyAqLworICAgIC8vLyAobGluZSByZWxhdGVkKSBBZHZhbmNlIHRvIHRoZSBDT1VOVCBuZXh0IGxpbmVzLgorICAgIHZvaWQgbGluZXMgKGludCBjb3VudCA9IDEpCisgICAgeworICAgICAgY29sdW1uID0gMXU7CisgICAgICBsaW5lICs9IGNvdW50OworICAgIH0KKworICAgIC8vLyAoY29sdW1uIHJlbGF0ZWQpIEFkdmFuY2UgdG8gdGhlIENPVU5UIG5leHQgY29sdW1ucy4KKyAgICB2b2lkIGNvbHVtbnMgKGludCBjb3VudCA9IDEpCisgICAgeworICAgICAgY29sdW1uID0gc3RkOjptYXggKDF1LCBjb2x1bW4gKyBjb3VudCk7CisgICAgfQorICAgIC8qKiBcfSAqLworCisgICAgLy8vIEZpbGUgbmFtZSB0byB3aGljaCB0aGlzIHBvc2l0aW9uIHJlZmVycy4KKyAgICBzdGQ6OnN0cmluZyogZmlsZW5hbWU7CisgICAgLy8vIEN1cnJlbnQgbGluZSBudW1iZXIuCisgICAgdW5zaWduZWQgaW50IGxpbmU7CisgICAgLy8vIEN1cnJlbnQgY29sdW1uIG51bWJlci4KKyAgICB1bnNpZ25lZCBpbnQgY29sdW1uOworICB9OworCisgIC8vLyBBZGQgYW5kIGFzc2lnbiBhIHBvc2l0aW9uLgorICBpbmxpbmUgcG9zaXRpb24mCisgIG9wZXJhdG9yKz0gKHBvc2l0aW9uJiByZXMsIGNvbnN0IGludCB3aWR0aCkKKyAgeworICAgIHJlcy5jb2x1bW5zICh3aWR0aCk7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIC8vLyBBZGQgdHdvIHBvc2l0aW9uIG9iamVjdHMuCisgIGlubGluZSBjb25zdCBwb3NpdGlvbgorICBvcGVyYXRvcisgKGNvbnN0IHBvc2l0aW9uJiBiZWdpbiwgY29uc3QgaW50IHdpZHRoKQorICB7CisgICAgcG9zaXRpb24gcmVzID0gYmVnaW47CisgICAgcmV0dXJuIHJlcyArPSB3aWR0aDsKKyAgfQorCisgIC8vLyBBZGQgYW5kIGFzc2lnbiBhIHBvc2l0aW9uLgorICBpbmxpbmUgcG9zaXRpb24mCisgIG9wZXJhdG9yLT0gKHBvc2l0aW9uJiByZXMsIGNvbnN0IGludCB3aWR0aCkKKyAgeworICAgIHJldHVybiByZXMgKz0gLXdpZHRoOworICB9CisKKyAgLy8vIEFkZCB0d28gcG9zaXRpb24gb2JqZWN0cy4KKyAgaW5saW5lIGNvbnN0IHBvc2l0aW9uCisgIG9wZXJhdG9yLSAoY29uc3QgcG9zaXRpb24mIGJlZ2luLCBjb25zdCBpbnQgd2lkdGgpCisgIHsKKyAgICByZXR1cm4gYmVnaW4gKyAtd2lkdGg7CisgIH0KKworICAvLy8gQ29tcGFyZSB0d28gcG9zaXRpb24gb2JqZWN0cy4KKyAgaW5saW5lIGJvb2wKKyAgb3BlcmF0b3I9PSAoY29uc3QgcG9zaXRpb24mIHBvczEsIGNvbnN0IHBvc2l0aW9uJiBwb3MyKQorICB7CisgICAgcmV0dXJuIChwb3MxLmxpbmUgPT0gcG9zMi5saW5lCisgICAgICAgICAgICAmJiBwb3MxLmNvbHVtbiA9PSBwb3MyLmNvbHVtbgorICAgICAgICAgICAgJiYgKHBvczEuZmlsZW5hbWUgPT0gcG9zMi5maWxlbmFtZQorICAgICAgICAgICAgICAgIHx8IChwb3MxLmZpbGVuYW1lICYmIHBvczIuZmlsZW5hbWUKKyAgICAgICAgICAgICAgICAgICAgJiYgKnBvczEuZmlsZW5hbWUgPT0gKnBvczIuZmlsZW5hbWUpKSk7CisgIH0KKworICAvLy8gQ29tcGFyZSB0d28gcG9zaXRpb24gb2JqZWN0cy4KKyAgaW5saW5lIGJvb2wKKyAgb3BlcmF0b3IhPSAoY29uc3QgcG9zaXRpb24mIHBvczEsIGNvbnN0IHBvc2l0aW9uJiBwb3MyKQorICB7CisgICAgcmV0dXJuICEocG9zMSA9PSBwb3MyKTsKKyAgfQorCisgIC8qKiBcYnJpZWYgSW50ZXJjZXB0IG91dHB1dCBzdHJlYW0gcmVkaXJlY3Rpb24uCisgICAqKiBccGFyYW0gb3N0ciB0aGUgZGVzdGluYXRpb24gb3V0cHV0IHN0cmVhbQorICAgKiogXHBhcmFtIHBvcyBhIHJlZmVyZW5jZSB0byB0aGUgcG9zaXRpb24gdG8gcmVkaXJlY3QKKyAgICovCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBZWUNoYXI+CisgIGlubGluZSBzdGQ6OmJhc2ljX29zdHJlYW08WVlDaGFyPiYKKyAgb3BlcmF0b3I8PCAoc3RkOjpiYXNpY19vc3RyZWFtPFlZQ2hhcj4mIG9zdHIsIGNvbnN0IHBvc2l0aW9uJiBwb3MpCisgIHsKKyAgICBpZiAocG9zLmZpbGVuYW1lKQorICAgICAgb3N0ciA8PCAqcG9zLmZpbGVuYW1lIDw8ICc6JzsKKyAgICByZXR1cm4gb3N0ciA8PCBwb3MubGluZSA8PCAnLicgPDwgcG9zLmNvbHVtbjsKKyAgfQorCisKK30gLy8geXkKKy8qIExpbmUgMTQ4IG9mIGxvY2F0aW9uLmNjICAqLworI2xpbmUgMTcyICIuLi8uLi8uLi8uLi9leGFtcGxlcy9jYWxjKysvcG9zaXRpb24uaGgiCisjZW5kaWYgLyogIVlZX1lZX0VYQU1QTEVTX0NBTENfUE9TSVRJT05fSEhfSU5DTFVERUQgICovCmRpZmYgLS1naXQgYS9leGFtcGxlcy9jYWxjKysvc3RhY2suaGggYi9leGFtcGxlcy9jYWxjKysvc3RhY2suaGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlkNTFjNQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2NhbGMrKy9zdGFjay5oaApAQCAtMCwwICsxLDEzMyBAQAorLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNi45MC44LWQ0ZmUuICAqLworCisvKiBTdGFjayBoYW5kbGluZyBmb3IgQmlzb24gcGFyc2VycyBpbiBDKysKKyAgIAorICAgICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucworICAgcGFydCBvciBhbGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKKyAgIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFzIHRoYXQgd29yayBpc24ndCBpdHNlbGYgYQorICAgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24gb3IgYSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YKKyAgIGFzIGEgcGFyc2VyIHNrZWxldG9uLiAgQWx0ZXJuYXRpdmVseSwgaWYgeW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUKKyAgIHRoZSBwYXJzZXIgc2tlbGV0b24gaXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMKKyAgIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhlIHJlc3VsdGluZworICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLgorICAgCisgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCisgICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCisKKy8qKgorICoqIFxmaWxlIC4uLy4uLy4uLy4uL2V4YW1wbGVzL2NhbGMrKy9zdGFjay5oaAorICoqIERlZmluZSB0aGUgeXk6OnN0YWNrIGNsYXNzLgorICovCisKKyNpZm5kZWYgWVlfWVlfRVhBTVBMRVNfQ0FMQ19TVEFDS19ISF9JTkNMVURFRAorIyBkZWZpbmUgWVlfWVlfRVhBTVBMRVNfQ0FMQ19TVEFDS19ISF9JTkNMVURFRAorCisjIGluY2x1ZGUgPGRlcXVlPgorCisKK25hbWVzcGFjZSB5eSB7CisvKiBMaW5lIDM0IG9mIHN0YWNrLmhoICAqLworI2xpbmUgNDcgIi4uLy4uLy4uLy4uL2V4YW1wbGVzL2NhbGMrKy9zdGFjay5oaCIKKyAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFMgPSBzdGQ6OmRlcXVlPFQ+ID4KKyAgY2xhc3Mgc3RhY2sKKyAgeworICBwdWJsaWM6CisgICAgLy8gSGlkZSBvdXIgcmV2ZXJzZWQgb3JkZXIuCisgICAgdHlwZWRlZiB0eXBlbmFtZSBTOjpyZXZlcnNlX2l0ZXJhdG9yIGl0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgUzo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKworICAgIHN0YWNrICgpIDogc2VxXyAoKQorICAgIHsKKyAgICB9CisKKyAgICBzdGFjayAodW5zaWduZWQgaW50IG4pIDogc2VxXyAobikKKyAgICB7CisgICAgfQorCisgICAgaW5saW5lCisgICAgVCYKKyAgICBvcGVyYXRvciBbXSAodW5zaWduZWQgaW50IGkpCisgICAgeworICAgICAgcmV0dXJuIHNlcV9baV07CisgICAgfQorCisgICAgaW5saW5lCisgICAgY29uc3QgVCYKKyAgICBvcGVyYXRvciBbXSAodW5zaWduZWQgaW50IGkpIGNvbnN0CisgICAgeworICAgICAgcmV0dXJuIHNlcV9baV07CisgICAgfQorCisgICAgaW5saW5lCisgICAgdm9pZAorICAgIHB1c2ggKGNvbnN0IFQmIHQpCisgICAgeworICAgICAgc2VxXy5wdXNoX2Zyb250ICh0KTsKKyAgICB9CisKKyAgICBpbmxpbmUKKyAgICB2b2lkCisgICAgcG9wICh1bnNpZ25lZCBpbnQgbiA9IDEpCisgICAgeworICAgICAgZm9yICg7IG47IC0tbikKKyAgICAgICAgc2VxXy5wb3BfZnJvbnQgKCk7CisgICAgfQorCisgICAgaW5saW5lCisgICAgdW5zaWduZWQgaW50CisgICAgaGVpZ2h0ICgpIGNvbnN0CisgICAgeworICAgICAgcmV0dXJuIHNlcV8uc2l6ZSAoKTsKKyAgICB9CisKKyAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3IgYmVnaW4gKCkgY29uc3QgeyByZXR1cm4gc2VxXy5yYmVnaW4gKCk7IH0KKyAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3IgZW5kICgpIGNvbnN0IHsgcmV0dXJuIHNlcV8ucmVuZCAoKTsgfQorCisgIHByaXZhdGU6CisgICAgUyBzZXFfOworICB9OworCisgIC8vLyBQcmVzZW50IGEgc2xpY2Ugb2YgdGhlIHRvcCBvZiBhIHN0YWNrLgorICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUyA9IHN0YWNrPFQ+ID4KKyAgY2xhc3Mgc2xpY2UKKyAgeworICBwdWJsaWM6CisgICAgc2xpY2UgKGNvbnN0IFMmIHN0YWNrLCB1bnNpZ25lZCBpbnQgcmFuZ2UpCisgICAgICA6IHN0YWNrXyAoc3RhY2spCisgICAgICAsIHJhbmdlXyAocmFuZ2UpCisgICAgeworICAgIH0KKworICAgIGlubGluZQorICAgIGNvbnN0IFQmCisgICAgb3BlcmF0b3IgW10gKHVuc2lnbmVkIGludCBpKSBjb25zdAorICAgIHsKKyAgICAgIHJldHVybiBzdGFja19bcmFuZ2VfIC0gaV07CisgICAgfQorCisgIHByaXZhdGU6CisgICAgY29uc3QgUyYgc3RhY2tfOworICAgIHVuc2lnbmVkIGludCByYW5nZV87CisgIH07CisKK30gLy8geXkKKy8qIExpbmUgMTE2IG9mIHN0YWNrLmhoICAqLworI2xpbmUgMTMyICIuLi8uLi8uLi8uLi9leGFtcGxlcy9jYWxjKysvc3RhY2suaGgiCisKKyNlbmRpZiAvKiAhWVlfWVlfRVhBTVBMRVNfQ0FMQ19TVEFDS19ISF9JTkNMVURFRCAgKi8KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2NhbGMrKy90ZXN0IGIvZXhhbXBsZXMvY2FsYysrL3Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGY0ZDQxOQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2NhbGMrKy90ZXN0CkBAIC0wLDAgKzEsNDYgQEAKKyMhIC9iaW4vc2gKKworIyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK3Rlc3QgLXogIiRWRVJCT1NFIiAmJiB7CisgICBleGVjID4gL2Rldi9udWxsIDI+JjEKKyAgIHNldCAteAorfQorCitjYXQgPmlucHV0IDw8RU9GCithIDo9IDEKK2IgOj0gMgorYyA6PSAzCitkIDo9IGEgKyBiICogYworZAorRU9GCisKKy4vY2FsYysrIGlucHV0CisuL2NhbGMrKyAtcCBpbnB1dAorCitjYXQgPmlucHV0IDw8RU9GCithIDo9IDEKK2QgOj0gYSArIGIgKiBjCitFT0YKKy4vY2FsYysrIGlucHV0CisKK2NhdCA+aW5wdXQgPDxFT0YKK3RvdG8gOj0gMQordG90bworRU9GCisuL2NhbGMrKyAtcyBpbnB1dAorCitybSBpbnB1dApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZXh0ZXhpIGIvZXhhbXBsZXMvZXh0ZXhpCmluZGV4IDU2YTUwYzguLjAxZjZjZjIgMTAwNjQ0Ci0tLSBhL2V4YW1wbGVzL2V4dGV4aQorKysgYi9leGFtcGxlcy9leHRleGkKQEAgLTEsMTEgKzEsMTMgQEAKICMgRXh0cmFjdCBhbGwgZXhhbXBsZXMgZnJvbSB0aGUgbWFudWFsIHNvdXJjZS4gICAgICAgICAgICAtKi0gQVdLIC0qLQogCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBCaXNvbgotIyBDb3B5cmlnaHQgMTk5MiwgMjAwMCwgMjAwMSwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBDb3B5cmlnaHQgKEMpIDE5OTIsIDIwMDAtMjAwMSwgMjAwNS0yMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCiAjCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAjCiAjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLApAQCAtMTQsOSArMTYsNyBAQAogIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogIwogIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQotIyAwMjExMS0xMzA3ICBVU0EKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAKICMgVGhpcyBzY3JpcHQgaXMgZm9yIHVzZSB3aXRoIGFueSBBd2sgdGhhdCBjb25mb3JtcyB0byBQT1NJWC4KICMgSXQgd2FzIGRlcml2ZWQgZnJvbSBhIHNpbWlsYXIgc2NyaXB0IHRlc3RzL2dlbmVyYXRlLmF3ayBpbiBHTlUgbTQuCkBAIC0xMTEsNiArMTExLDcgQEAKIAllbHNlCiAJICBsaW5lID0gIiI7CiAKKyAgICAgIGdzdWIgKC8iQHZhbHVlXHtWRVJTSU9OXH0iLywgIlwiIiBWRVJTSU9OICJcIiIsIGxpbmUpCiAgICAgICBnc3ViICgvXkByZXN1bHRce1x9LywgIiIsIGxpbmUpOwogICAgICAgZ3N1YiAoL15AZXJyb3Jce1x9LywgICIiLCBsaW5lKTsKICAgICAgIGdzdWIgKCJAW3tdIiwgInsiLCBsaW5lKTsKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU0OTBkMy4uMDAwMDAwMAotLS0gYS9saWIvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw2MjMgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjYgZnJvbSBNYWtlZmlsZS5hbS4KLSMgbGliL01ha2VmaWxlLiAgR2VuZXJhdGVkIGZyb20gTWFrZWZpbGUuaW4gYnkgY29uZmlndXJlLgotCi0jIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKLSMgMjAwMywgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi0KLQotc3JjZGlyID0gLgotdG9wX3NyY2RpciA9IC4uCi0KLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL2Jpc29uCi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvYmlzb24KLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL2Jpc29uCi10b3BfYnVpbGRkaXIgPSAuLgotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotSU5TVEFMTCA9IC91c3IvYmluL2luc3RhbGwgLWMKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSB4ODZfNjQtdW5rbm93bi1saW51eC1nbnUKLWhvc3RfdHJpcGxldCA9IHg4Nl82NC11bmtub3duLWxpbnV4LWdudQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluIFwKLQkkKHNyY2RpcikvZ251bGliLm1rIGRpcm5hbWUuYyBkaXJuYW1lLmggZHVwLXNhZmVyLmMgZXJyb3IuYyBcCi0JZXJyb3IuaCBleGl0ZmFpbC5jIGV4aXRmYWlsLmggZmQtc2FmZXIuYyBmb3Blbi1zYWZlci5jIFwKLQlnZXRvcHQuYyBnZXRvcHQxLmMgaGFyZC1sb2NhbGUuYyBoYXJkLWxvY2FsZS5oIGhhc2guYyBoYXNoLmggXAotCW1hbGxvYy5jIG9ic3RhY2suYyBvYnN0YWNrLmggcGlwZS1zYWZlci5jIHF1b3RlLmMgcXVvdGUuaCBcCi0JcXVvdGVhcmcuYyBxdW90ZWFyZy5oIHN0ZGlvLS0uaCBzdGRpby1zYWZlci5oIHN0cGNweS5jIFwKLQlzdHJkdXAuYyBzdHJkdXAuaCBzdHJlcnJvci5jIHN0cm5kdXAuYyBzdHJuZHVwLmggc3Rybmxlbi5jIFwKLQlzdHJubGVuLmggc3RydG9sLmMgc3RydG91bC5jIHN0cnZlcnNjbXAuYyBzdHJ2ZXJzY21wLmggXAotCXVuaXN0ZC0tLmggdW5pc3RkLXNhZmVyLmggdW5sb2NrZWQtaW8uaCB4YWxsb2MuaCB4bWFsbG9jLmMKLXN1YmRpciA9IGxpYgotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYmlzb24taTE4bi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jLXdvcmtpbmcubTQgJCh0b3Bfc3JjZGlyKS9tNC9jeHgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZGlybmFtZS5tNCAkKHRvcF9zcmNkaXIpL200L2RtYWxsb2MubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZG9zLm00ICQodG9wX3NyY2RpcikvbTQvZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZXhpdGZhaWwubTQgJCh0b3Bfc3JjZGlyKS9tNC9leHRlbnNpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dldG9wdC5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHRfZ2wubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ251bGliLm00ICQodG9wX3NyY2RpcikvbTQvaGFyZC1sb2NhbGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaGFzaC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzX2hfZ2wubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxkX2dsLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeF9nbC5tNCAkKHRvcF9zcmNkaXIpL200L200Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L21icnRvd2MubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYnN0YXRlX3QubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbWJzd2lkdGgubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvb2JzdGFjay5tNCAkKHRvcF9zcmNkaXIpL200L29uY2Vvbmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvX2dsLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcXVvdGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9xdW90ZWFyZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdGRib29sLm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50X2hfZ2wubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RkaW8tc2FmZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHBjcHkubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RyZHVwLm00ICQodG9wX3NyY2RpcikvbTQvc3RyZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RybmR1cC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cm5sZW4ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RydG9sLm00ICQodG9wX3NyY2RpcikvbTQvc3RydG91bC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdHJ2ZXJzY21wLm00ICQodG9wX3NyY2RpcikvbTQvc3VicGlwZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC90aW1ldmFyLm00ICQodG9wX3NyY2RpcikvbTQvdWludG1heF90X2dsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Vsb25nbG9uZ19nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGQtc2FmZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC91bmxvY2tlZC1pby5tNCAkKHRvcF9zcmNkaXIpL200L3dhcm5pbmcubTQgXAotCSQodG9wX3NyY2RpcikvbTQveGFsbG9jLm00ICQodG9wX3NyY2RpcikvbTQveHN0cm5kdXAubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLW1raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9ta2luc3RhbGxkaXJzCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gYGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGxpYmRpcikiCi1saWJMSUJSQVJJRVNfSU5TVEFMTCA9ICQoSU5TVEFMTF9EQVRBKQotTElCUkFSSUVTID0gJChsaWJfTElCUkFSSUVTKSAkKG5vaW5zdF9MSUJSQVJJRVMpCi1BUiA9IGFyCi1BUkZMQUdTID0gY3J1Ci1saWJiaXNvbl9hX0FSID0gJChBUikgJChBUkZMQUdTKQotYW1fX0RFUEVOREVOQ0lFU18xID0gIGRpcm5hbWUkVS5vIGV4aXRmYWlsJFUubyBoYXJkLWxvY2FsZSRVLm8gaGFzaCRVLm8gcXVvdGUkVS5vIHF1b3RlYXJnJFUubyBmb3Blbi1zYWZlciRVLm8gZHVwLXNhZmVyJFUubyBmZC1zYWZlciRVLm8gcGlwZS1zYWZlciRVLm8geG1hbGxvYyRVLm8KLWFtX19vYmplY3RzXzEgPSBhYml0c2V0LiQoT0JKRVhUKSBiaXRzZXQuJChPQkpFWFQpIFwKLQliaXRzZXRfc3RhdHMuJChPQkpFWFQpIGJpdHNldHYuJChPQkpFWFQpIGViaXRzZXQuJChPQkpFWFQpIFwKLQlsYml0c2V0LiQoT0JKRVhUKSB2Yml0c2V0LiQoT0JKRVhUKQotYW1fX29iamVjdHNfMiA9IGJpdHNldHYtcHJpbnQuJChPQkpFWFQpCi1hbV9fb2JqZWN0c18zID0gdGltZXZhci4kKE9CSkVYVCkKLWFtX19vYmplY3RzXzQgPSBnZXQtZXJybm8uJChPQkpFWFQpIHN1YnBpcGUuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMSkgXAotCSQoYW1fX29iamVjdHNfMikgJChhbV9fb2JqZWN0c18zKSBhcmdtYXRjaC4kKE9CSkVYVCkgXAotCWJhc2VuYW1lLiQoT0JKRVhUKSBzdHJpcHNsYXNoLiQoT0JKRVhUKSBtYnN3aWR0aC4kKE9CSkVYVCkgXAotCXhhbGxvYy1kaWUuJChPQkpFWFQpIHhzdHJuZHVwLiQoT0JKRVhUKQotYW1fbGliYmlzb25fYV9PQkpFQ1RTID0gJChhbV9fb2JqZWN0c180KQotbGliYmlzb25fYV9PQkpFQ1RTID0gJChhbV9saWJiaXNvbl9hX09CSkVDVFMpCi1saWJ5X2FfQVIgPSAkKEFSKSAkKEFSRkxBR1MpCi1saWJ5X2FfTElCQUREID0KLWFtX2xpYnlfYV9PQkpFQ1RTID0gbWFpbi4kKE9CSkVYVCkgeXllcnJvci4kKE9CSkVYVCkKLWxpYnlfYV9PQkpFQ1RTID0gJChhbV9saWJ5X2FfT0JKRUNUUykKLURFRkFVTFRfSU5DTFVERVMgPSAtSS4gLUkkKHNyY2RpcikgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotU09VUkNFUyA9ICQobGliYmlzb25fYV9TT1VSQ0VTKSAkKGxpYnlfYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJiaXNvbl9hX1NPVVJDRVMpICQobGlieV9hX1NPVVJDRVMpCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUNMT0NBTCA9ICR7U0hFTEx9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9taXNzaW5nIC0tcnVuIGFjbG9jYWwtMS45Ci1BTURFUF9GQUxTRSA9ICMKLUFNREVQX1RSVUUgPSAKLUFNVEFSID0gJHtTSEVMTH0gL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC90b29scy9iaXNvbi0yLjMvYnVpbGQtYXV4L21pc3NpbmcgLS1ydW4gdGFyCi1BVVRPQ09ORiA9ICR7U0hFTEx9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9taXNzaW5nIC0tcnVuIGF1dG9jb25mCi1BVVRPSEVBREVSID0gJHtTSEVMTH0gL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC90b29scy9iaXNvbi0yLjMvYnVpbGQtYXV4L21pc3NpbmcgLS1ydW4gYXV0b2hlYWRlcgotQVVUT000VEUgPSAke1NIRUxMfSAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL2Jpc29uLTIuMy9idWlsZC1hdXgvbWlzc2luZyAtLXJ1biBhdXRvbTR0ZQotQVVUT01BS0UgPSAke1NIRUxMfSAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL2Jpc29uLTIuMy9idWlsZC1hdXgvbWlzc2luZyAtLXJ1biBhdXRvbWFrZS0xLjkKLUFXSyA9IGdhd2sKLUJJU09OX0NYWF9XT1JLUyA9IDoKLUJJU09OX0NYWF9XT1JLU19GQUxTRSA9ICMKLUJJU09OX0NYWF9XT1JLU19UUlVFID0gCi1CSVNPTl9MT0NBTEVESVIgPSAvdXNyL3NoYXJlL2xvY2FsZQotQ0MgPSBnY2MKLUNDREVQTU9ERSA9IGRlcG1vZGU9Z2NjMwotQ0ZMQUdTID0gLWcgLU8yCi1DUFAgPSBnY2MgLUUKLUNQUEZMQUdTID0gCi1DWFggPSBnKysKLUNYWERFUE1PREUgPSBkZXBtb2RlPWdjYzMKLUNYWEZMQUdTID0gLWcgLU8yCi1DWUdQQVRIX1cgPSBlY2hvCi1ERUZTID0gLURIQVZFX0NPTkZJR19ICi1ERVBESVIgPSAuZGVwcwotRUNIT19DID0gCi1FQ0hPX04gPSAtbgotRUNIT19UID0gCi1FR1JFUCA9IGdyZXAgLUUKLUVYRUVYVCA9IAotR0NDID0geWVzCi1HRVRPUFRfSCA9IAotR01TR0ZNVCA9IC91c3IvYmluL21zZ2ZtdAotSEFWRV9fQk9PTCA9IDEKLUlOU1RBTExfREFUQSA9ICR7SU5TVEFMTH0gLW0gNjQ0Ci1JTlNUQUxMX1BST0dSQU0gPSAke0lOU1RBTEx9Ci1JTlNUQUxMX1NDUklQVCA9ICR7SU5TVEFMTH0KLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9ICR7U0hFTEx9ICQoaW5zdGFsbF9zaCkgLWMgLXMKLUlOVExMSUJTID0gCi1JTlRMX01BQ09TWF9MSUJTID0gCi1MREZMQUdTID0gCi1MRVggPSBmbGV4Ci1MRVhMSUIgPSAtbGZsCi1MRVhfT1VUUFVUX1JPT1QgPSBsZXgueXkKLUxJQklDT05WID0gLWxpY29udgotTElCSU5UTCA9IAotTElCT0JKUyA9ICBkaXJuYW1lJFUubyBleGl0ZmFpbCRVLm8gaGFyZC1sb2NhbGUkVS5vIGhhc2gkVS5vIHF1b3RlJFUubyBxdW90ZWFyZyRVLm8gZm9wZW4tc2FmZXIkVS5vIGR1cC1zYWZlciRVLm8gZmQtc2FmZXIkVS5vIHBpcGUtc2FmZXIkVS5vIHhtYWxsb2MkVS5vCi1MSUJTID0gCi1MVExJQklDT05WID0gLWxpY29udgotTFRMSUJJTlRMID0gCi1MVExJQk9CSlMgPSAgZGlybmFtZSRVLmxvIGV4aXRmYWlsJFUubG8gaGFyZC1sb2NhbGUkVS5sbyBoYXNoJFUubG8gcXVvdGUkVS5sbyBxdW90ZWFyZyRVLmxvIGZvcGVuLXNhZmVyJFUubG8gZHVwLXNhZmVyJFUubG8gZmQtc2FmZXIkVS5sbyBwaXBlLXNhZmVyJFUubG8geG1hbGxvYyRVLmxvCi1NNCA9IC91c3IvYmluL200Ci1NQUtFSU5GTyA9ICR7U0hFTEx9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9taXNzaW5nIC0tcnVuIG1ha2VpbmZvCi1NS0lOU1RBTExESVJTID0gJCh0b3BfYnVpbGRkaXIpL2J1aWxkLWF1eC9ta2luc3RhbGxkaXJzCi1NU0dGTVQgPSAvdXNyL2Jpbi9tc2dmbXQKLU1TR01FUkdFID0gL3Vzci9iaW4vbXNnbWVyZ2UKLU8wQ0ZMQUdTID0gLWcgCi1PMENYWEZMQUdTID0gLWcgCi1PQkpFWFQgPSBvCi1QQUNLQUdFID0gYmlzb24KLVBBQ0tBR0VfQlVHUkVQT1JUID0gYnVnLWJpc29uQGdudS5vcmcKLVBBQ0tBR0VfTkFNRSA9IEdOVSBCaXNvbgotUEFDS0FHRV9TVFJJTkcgPSBHTlUgQmlzb24gMi4zCi1QQUNLQUdFX1RBUk5BTUUgPSBiaXNvbgotUEFDS0FHRV9WRVJTSU9OID0gMi4zCi1QQVRIX1NFUEFSQVRPUiA9IDoKLVBPU1VCID0gcG8KLVJBTkxJQiA9IHJhbmxpYgotU0VUX01BS0UgPSAKLVNIRUxMID0gL2Jpbi9zaAotU1REQk9PTF9IID0gCi1TVFJJUCA9IAotVU5JU1REX0ggPSAKLVVTRV9OTFMgPSB5ZXMKLVZBTEdSSU5EID0gCi1WRVJTSU9OID0gMi4zCi1XQVJOSU5HX0NGTEFHUyA9IAotV0FSTklOR19DWFhGTEFHUyA9IAotV0VSUk9SX0NGTEFHUyA9IAotWEdFVFRFWFQgPSAvdXNyL2Jpbi94Z2V0dGV4dAotWUFDQyA9IGJpc29uIC15Ci1ZQUNDX0xJQlJBUlkgPSBsaWJ5LmEKLVlBQ0NfU0NSSVBUID0geWFjYwotYWNfY3RfQ0MgPSBnY2MKLWFjX2N0X0NYWCA9IGcrKwotYWNfY3RfUkFOTElCID0gcmFubGliCi1hY19jdF9TVFJJUCA9IAotYWNsb2NhbGRpciA9ICR7ZGF0YWRpcn0vYWNsb2NhbAotYW1fX2Zhc3RkZXBDQ19GQUxTRSA9ICMKLWFtX19mYXN0ZGVwQ0NfVFJVRSA9IAotYW1fX2Zhc3RkZXBDWFhfRkFMU0UgPSAjCi1hbV9fZmFzdGRlcENYWF9UUlVFID0gCi1hbV9faW5jbHVkZSA9IGluY2x1ZGUKLWFtX19sZWFkaW5nX2RvdCA9IC4KLWFtX19xdW90ZSA9IAotYW1fX3RhciA9ICR7QU1UQVJ9IGNob2YgLSAiJCR0YXJkaXIiCi1hbV9fdW50YXIgPSAke0FNVEFSfSB4ZiAtCi1iaW5kaXIgPSAke2V4ZWNfcHJlZml4fS9iaW4KLWJ1aWxkID0geDg2XzY0LXVua25vd24tbGludXgtZ251Ci1idWlsZF9hbGlhcyA9IAotYnVpbGRfY3B1ID0geDg2XzY0Ci1idWlsZF9vcyA9IGxpbnV4LWdudQotYnVpbGRfdmVuZG9yID0gdW5rbm93bgotZGF0YWRpciA9ICR7cHJlZml4fS9zaGFyZQotZXhlY19wcmVmaXggPSAke3ByZWZpeH0KLWhvc3QgPSB4ODZfNjQtdW5rbm93bi1saW51eC1nbnUKLWhvc3RfYWxpYXMgPSAKLWhvc3RfY3B1ID0geDg2XzY0Ci1ob3N0X29zID0gbGludXgtZ251Ci1ob3N0X3ZlbmRvciA9IHVua25vd24KLWluY2x1ZGVkaXIgPSAke3ByZWZpeH0vaW5jbHVkZQotaW5mb2RpciA9ICR7cHJlZml4fS9pbmZvCi1pbnN0YWxsX3NoID0gL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC90b29scy9iaXNvbi0yLjMvYnVpbGQtYXV4L2luc3RhbGwtc2gKLWxpYmRpciA9ICR7ZXhlY19wcmVmaXh9L2xpYgotbGliZXhlY2RpciA9ICR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMKLWxvY2Fsc3RhdGVkaXIgPSAke3ByZWZpeH0vdmFyCi1tYW5kaXIgPSAke3ByZWZpeH0vbWFuCi1ta2Rpcl9wID0gbWtkaXIgLXAgLS0KLW9sZGluY2x1ZGVkaXIgPSAvdXNyL2luY2x1ZGUKLXByZWZpeCA9IC9ob21lL3BoYW5uYS9zcmMvYmlzb24KLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBzLHgseCwKLXNiaW5kaXIgPSAke2V4ZWNfcHJlZml4fS9zYmluCi1zaGFyZWRzdGF0ZWRpciA9ICR7cHJlZml4fS9jb20KLXN5c2NvbmZkaXIgPSAke3ByZWZpeH0vZXRjCi10YXJnZXRfYWxpYXMgPSAKLUFNX0NGTEFHUyA9ICQoV0FSTklOR19DRkxBR1MpCi1CVUlMVF9TT1VSQ0VTID0gJChHRVRPUFRfSCkgJChTVERCT09MX0gpICQoVU5JU1REX0gpCi1FWFRSQV9ESVNUID0gZ2V0b3B0Xy5oIGdldG9wdF9pbnQuaCBzdGRib29sXy5oCi1NT1NUTFlDTEVBTkZJTEVTID0gZ2V0b3B0LmggZ2V0b3B0LmgtdCBzdGRib29sLmggc3RkYm9vbC5oLXQgdW5pc3RkLmgKLWxpYl9MSUJSQVJJRVMgPSAkKFlBQ0NfTElCUkFSWSkKLUVYVFJBX0xJQlJBUklFUyA9IGxpYnkuYQotbm9pbnN0X0xJQlJBUklFUyA9IGxpYmJpc29uLmEKLWxpYnlfYV9TT1VSQ0VTID0gbWFpbi5jIHl5ZXJyb3IuYwotbGliYmlzb25fYV9TT1VSQ0VTID0gJChsaWJfU09VUkNFUykKLQotIyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgImJvb3RzdHJhcCIuCi0KLSMgVGhpcyBpcyBmb3IgdGhvc2UgcHJvamVjdHMgd2hpY2ggdXNlICJnZXR0ZXh0aXplIC0taW50bCIgdG8gcHV0IGEgc291cmNlLWNvZGUKLSMgY29weSBvZiBsaWJpbnRsIGludG8gdGhlaXIgcGFja2FnZS4gSW4gc3VjaCBwcm9qZWN0cywgZXZlcnkgTWFrZWZpbGUuYW0gbmVlZHMKLSMgLUkkKHRvcF9idWlsZGRpcikvaW50bCwgc28gdGhhdCA8bGliaW50bC5oPiBjYW4gYmUgZm91bmQgaW4gdGhpcyBkaXJlY3RvcnkuCi0jIEZvciB0aGUgTWFrZWZpbGUuYW1zIGluIG90aGVyIGRpcmVjdG9yaWVzIGl0IGlzIHRoZSBtYWludGFpbmVyJ3MKLSMgcmVzcG9uc2liaWxpdHk7IGZvciB0aGUgb25lIGZyb20gZ251bGliIHdlIGRvIGl0IGhlcmUuCi0jIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgd2hlbiB0aGUgdXNlciBkaXNhYmxlcyBOTFMgKGJlY2F1c2UgdGhlbiB0aGUgaW50bAotIyBkaXJlY3RvcnkgY29udGFpbnMgbm8gbGliaW50bC5oIGZpbGUpIG9yIHdoZW4gdGhlIHByb2plY3QgZG9lcyBub3QgdXNlCi0jICJnZXR0ZXh0aXplIC0taW50bCIuCi0jIChjb21tZW50ZWQgb3V0IGJ5IGJvb3RzdHJhcCkgQU1fQ1BQRkxBR1MgKz0gLUkkKHRvcF9idWlsZGRpcikvaW50bAotbGliX1NPVVJDRVMgPSBnZXQtZXJybm8uaCBnZXQtZXJybm8uYyBzdWJwaXBlLmggc3VicGlwZS5jIFwKLQkkKGJpdHNldHNfc291cmNlcykgJChhZGRpdGlvbmFsX2JpdHNldHNfc291cmNlcykgXAotCSQodGltZXZhcnNfc291cmNlcykgYXJnbWF0Y2guaCBhcmdtYXRjaC5jIGJhc2VuYW1lLmMgXAotCXN0cmlwc2xhc2guYyBleGl0LmggZ2V0dGV4dC5oIG1ic3dpZHRoLmggbWJzd2lkdGguYyBzdHBjcHkuaCBcCi0JdmVyaWZ5LmggeGFsbG9jLWRpZS5jIHhzdHJuZHVwLmggeHN0cm5kdXAuYwotCi0jIEltcGxlbWVudGF0aW9uIG9mIGJpdHNldHMKLWJpdHNldHNfc291cmNlcyA9IFwKLSAgYWJpdHNldC5jIGFiaXRzZXQuaCBiYml0c2V0LmggYml0c2V0LmMgYml0c2V0LmggYml0c2V0X3N0YXRzLmMJXAotICBiaXRzZXRfc3RhdHMuaCBiaXRzZXR2LmMgYml0c2V0di5oIGViaXRzZXQuYyBlYml0c2V0LmggbGJpdHNldC5jCVwKLSAgbGJpdHNldC5oIGxpYmliZXJ0eS5oIHZiaXRzZXQuYyB2Yml0c2V0LmgKLQotCi0jIEFkZGl0aW9uYWwgYml0c2V0IG9wZXJhdGlvbnMuCi1hZGRpdGlvbmFsX2JpdHNldHNfc291cmNlcyA9IFwKLQliaXRzZXR2LXByaW50LmggYml0c2V0di1wcmludC5jCi0KLQotIyB0aW1ldmFycywgc3RvbGVuIGZyb20gR0NDLgotdGltZXZhcnNfc291cmNlcyA9IFwKLQl0aW1ldmFyLmggdGltZXZhci5jIHRpbWV2YXIuZGVmCi0KLWxpYmJpc29uX2FfTElCQUREID0gJChMSUJPQkpTKSAkKEFMTE9DQSkKLWxpYmJpc29uX2FfREVQRU5ERU5DSUVTID0gJChsaWJiaXNvbl9hX0xJQkFERCkKLWFsbDogJChCVUlMVF9TT1VSQ0VTKQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvZ251bGliLm1rICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCi0JCSYmIGV4aXQgMDsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgIGxpYi9NYWtlZmlsZSc7IFwKLQljZCAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251ICBsaWIvTWFrZWZpbGUKLS5QUkVDSU9VUzogTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi1pbnN0YWxsLWxpYkxJQlJBUklFUzogJChsaWJfTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCXRlc3QgLXogIiQobGliZGlyKSIgfHwgJChta2Rpcl9wKSAiJChERVNURElSKSQobGliZGlyKSIKLQlAbGlzdD0nJChsaWJfTElCUkFSSUVTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBmPSQoYW1fX3N0cmlwX2RpcikgXAotCSAgICBlY2hvICIgJChsaWJMSUJSQVJJRVNfSU5TVEFMTCkgJyQkcCcgJyQoREVTVERJUikkKGxpYmRpcikvJCRmJyI7IFwKLQkgICAgJChsaWJMSUJSQVJJRVNfSU5TVEFMTCkgIiQkcCIgIiQoREVTVERJUikkKGxpYmRpcikvJCRmIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmUKLQlAJChQT1NUX0lOU1RBTEwpCi0JQGxpc3Q9JyQobGliX0xJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgcD0kKGFtX19zdHJpcF9kaXIpIFwKLQkgICAgZWNobyAiICQoUkFOTElCKSAnJChERVNURElSKSQobGliZGlyKS8kJHAnIjsgXAotCSAgICAkKFJBTkxJQikgIiQoREVTVERJUikkKGxpYmRpcikvJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmUKLQotdW5pbnN0YWxsLWxpYkxJQlJBUklFUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKGxpYl9MSUJSQVJJRVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBwPSQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChsaWJkaXIpLyQkcCciOyBcCi0JICBybSAtZiAiJChERVNURElSKSQobGliZGlyKS8kJHAiOyBcCi0JZG9uZQotCi1jbGVhbi1saWJMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQobGliX0xJQlJBUklFUykiIHx8IHJtIC1mICQobGliX0xJQlJBUklFUykKLQotY2xlYW4tbm9pbnN0TElCUkFSSUVTOgotCS10ZXN0IC16ICIkKG5vaW5zdF9MSUJSQVJJRVMpIiB8fCBybSAtZiAkKG5vaW5zdF9MSUJSQVJJRVMpCi1saWJiaXNvbi5hOiAkKGxpYmJpc29uX2FfT0JKRUNUUykgJChsaWJiaXNvbl9hX0RFUEVOREVOQ0lFUykgCi0JLXJtIC1mIGxpYmJpc29uLmEKLQkkKGxpYmJpc29uX2FfQVIpIGxpYmJpc29uLmEgJChsaWJiaXNvbl9hX09CSkVDVFMpICQobGliYmlzb25fYV9MSUJBREQpCi0JJChSQU5MSUIpIGxpYmJpc29uLmEKLWxpYnkuYTogJChsaWJ5X2FfT0JKRUNUUykgJChsaWJ5X2FfREVQRU5ERU5DSUVTKSAKLQktcm0gLWYgbGlieS5hCi0JJChsaWJ5X2FfQVIpIGxpYnkuYSAkKGxpYnlfYV9PQkpFQ1RTKSAkKGxpYnlfYV9MSUJBREQpCi0JJChSQU5MSUIpIGxpYnkuYQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1pbmNsdWRlICQoREVQRElSKS9kaXJuYW1lLlBvCi1pbmNsdWRlICQoREVQRElSKS9kdXAtc2FmZXIuUG8KLWluY2x1ZGUgJChERVBESVIpL2Vycm9yLlBvCi1pbmNsdWRlICQoREVQRElSKS9leGl0ZmFpbC5QbwotaW5jbHVkZSAkKERFUERJUikvZmQtc2FmZXIuUG8KLWluY2x1ZGUgJChERVBESVIpL2ZvcGVuLXNhZmVyLlBvCi1pbmNsdWRlICQoREVQRElSKS9nZXRvcHQuUG8KLWluY2x1ZGUgJChERVBESVIpL2dldG9wdDEuUG8KLWluY2x1ZGUgJChERVBESVIpL2hhcmQtbG9jYWxlLlBvCi1pbmNsdWRlICQoREVQRElSKS9oYXNoLlBvCi1pbmNsdWRlICQoREVQRElSKS9tYWxsb2MuUG8KLWluY2x1ZGUgJChERVBESVIpL29ic3RhY2suUG8KLWluY2x1ZGUgJChERVBESVIpL3BpcGUtc2FmZXIuUG8KLWluY2x1ZGUgJChERVBESVIpL3F1b3RlLlBvCi1pbmNsdWRlICQoREVQRElSKS9xdW90ZWFyZy5QbwotaW5jbHVkZSAkKERFUERJUikvc3RwY3B5LlBvCi1pbmNsdWRlICQoREVQRElSKS9zdHJkdXAuUG8KLWluY2x1ZGUgJChERVBESVIpL3N0cmVycm9yLlBvCi1pbmNsdWRlICQoREVQRElSKS9zdHJuZHVwLlBvCi1pbmNsdWRlICQoREVQRElSKS9zdHJubGVuLlBvCi1pbmNsdWRlICQoREVQRElSKS9zdHJ0b2wuUG8KLWluY2x1ZGUgJChERVBESVIpL3N0cnRvdWwuUG8KLWluY2x1ZGUgJChERVBESVIpL3N0cnZlcnNjbXAuUG8KLWluY2x1ZGUgJChERVBESVIpL3htYWxsb2MuUG8KLWluY2x1ZGUgLi8kKERFUERJUikvYWJpdHNldC5QbwotaW5jbHVkZSAuLyQoREVQRElSKS9hcmdtYXRjaC5QbwotaW5jbHVkZSAuLyQoREVQRElSKS9iYXNlbmFtZS5QbwotaW5jbHVkZSAuLyQoREVQRElSKS9iaXRzZXQuUG8KLWluY2x1ZGUgLi8kKERFUERJUikvYml0c2V0X3N0YXRzLlBvCi1pbmNsdWRlIC4vJChERVBESVIpL2JpdHNldHYtcHJpbnQuUG8KLWluY2x1ZGUgLi8kKERFUERJUikvYml0c2V0di5QbwotaW5jbHVkZSAuLyQoREVQRElSKS9lYml0c2V0LlBvCi1pbmNsdWRlIC4vJChERVBESVIpL2dldC1lcnJuby5QbwotaW5jbHVkZSAuLyQoREVQRElSKS9sYml0c2V0LlBvCi1pbmNsdWRlIC4vJChERVBESVIpL21haW4uUG8KLWluY2x1ZGUgLi8kKERFUERJUikvbWJzd2lkdGguUG8KLWluY2x1ZGUgLi8kKERFUERJUikvc3RyaXBzbGFzaC5QbwotaW5jbHVkZSAuLyQoREVQRElSKS9zdWJwaXBlLlBvCi1pbmNsdWRlIC4vJChERVBESVIpL3RpbWV2YXIuUG8KLWluY2x1ZGUgLi8kKERFUERJUikvdmJpdHNldC5QbwotaW5jbHVkZSAuLyQoREVQRElSKS94YWxsb2MtZGllLlBvCi1pbmNsdWRlIC4vJChERVBESVIpL3hzdHJuZHVwLlBvCi1pbmNsdWRlIC4vJChERVBESVIpL3l5ZXJyb3IuUG8KLQotLmMubzoKLQlpZiAkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgJDw7IFwKLQl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKLSMJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBcCi0jCURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgXAotIwkkKENPTVBJTEUpIC1jICQ8Ci0KLS5jLm9iajoKLQlpZiAkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYDsgXAotCXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQotIwlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIFwKLSMJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBcCi0jCSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAotdW5pbnN0YWxsLWluZm8tYW06Ci0KLUlEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQlta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IFRBR1MKLQotVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAotCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQl0YWdzPTsgXAotCWhlcmU9YHB3ZGA7IFwKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKLQlmaQotY3RhZ3M6IENUQUdTCi1DVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAotCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQl0YWdzPTsgXAotCWhlcmU9YHB3ZGA7IFwKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdGFncyAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCi0JICBjYXNlICQkZmlsZSBpbiBcCi0JICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0JICAgICQodG9wX3NyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3wiYDs7IFwKLQkgIGVzYWM7IFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGRpcj1gZWNobyAiJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgIGlmIHRlc3QgIiQkZGlyIiAhPSAiJCRmaWxlIiAmJiB0ZXN0ICIkJGRpciIgIT0gIi4iOyB0aGVuIFwKLQkgICAgZGlyPSIvJCRkaXIiOyBcCi0JICAgICQobWtkaXJfcCkgIiQoZGlzdGRpcikkJGRpciI7IFwKLQkgIGVsc2UgXAotCSAgICBkaXI9Jyc7IFwKLQkgIGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogJChCVUlMVF9TT1VSQ0VTKQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTElCUkFSSUVTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQobGliZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKG1rZGlyX3ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiAkKEJVSUxUX1NPVVJDRVMpCi0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKLQkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoTU9TVExZQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoTU9TVExZQ0xFQU5GSUxFUykKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotCS10ZXN0IC16ICIkKEJVSUxUX1NPVVJDRVMpIiB8fCBybSAtZiAkKEJVSUxUX1NPVVJDRVMpCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGliTElCUkFSSUVTIGNsZWFuLW5vaW5zdExJQlJBUklFUyBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmICQoREVQRElSKSAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtbGliTElCUkFSSUVTCi0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmICQoREVQRElSKSAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYwotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaW5mby1hbSB1bmluc3RhbGwtbGliTElCUkFSSUVTCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJMSUJSQVJJRVMgY2xlYW4tbm9pbnN0TElCUkFSSUVTIGN0YWdzIGRpc3RjbGVhbiBcCi0JZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgXAotCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCi0JaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIFwKLQlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbGliTElCUkFSSUVTIGluc3RhbGwtbWFuIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCi0JdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1pbmZvLWFtIFwKLQl1bmluc3RhbGwtbGliTElCUkFSSUVTCi0KLQotIyBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIgdG8gY3JlYXRlIDxnZXRvcHQuaD4gd2hlbiB0aGUgc3lzdGVtCi0jIGRvZXNuJ3QgaGF2ZSBvbmUgdGhhdCB3b3JrcyB3aXRoIHRoZSBnaXZlbiBjb21waWxlci4KLWdldG9wdC5oOiBnZXRvcHRfLmgKLQljcCAkKHNyY2RpcikvZ2V0b3B0Xy5oICRALXQKLQltdiAkQC10ICRACi0KLSMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8c3RkYm9vbC5oPiB3aGVuIHRoZSBzeXN0ZW0KLSMgZG9lc24ndCBoYXZlIG9uZSB0aGF0IHdvcmtzLgotc3RkYm9vbC5oOiBzdGRib29sXy5oCi0Jc2VkIC1lICdzL0AnJ0hBVkVfX0JPT0wnJ0AvJChIQVZFX19CT09MKS9nJyA8ICQoc3JjZGlyKS9zdGRib29sXy5oID4gJEAtdAotCW12ICRALXQgJEAKLQotIyBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIgdG8gY3JlYXRlIGFuIGVtcHR5IHBsYWNlaG9sZGVyIGZvcgotIyA8dW5pc3RkLmg+IHdoZW4gdGhlIHN5c3RlbSBkb2Vzbid0IGhhdmUgb25lLgotdW5pc3RkLmg6Ci0JZWNobyAnLyogRW1wdHkgcGxhY2Vob2xkZXIgZm9yICRALiAgKi8nID4kQAotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLmFtIGIvbGliL01ha2VmaWxlLmFtCmluZGV4IGY0ZDc4M2UuLjFhYmZiNzUgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZS5hbQorKysgYi9saWIvTWFrZWZpbGUuYW0KQEAgLTEsMzkgKzEsMzYgQEAKLSMjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgTWFrZSBiaXNvbi9saWIuCiAKLSMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSMjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjIENvcHlyaWdodCAoQykgMjAwMS0yMDA0LCAyMDA2LCAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCiAKLSMjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCi0jIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSMjIDAyMTEwLTEzMDEgIFVTQQotCi1BTV9DRkxBR1MgPSAkKFdBUk5JTkdfQ0ZMQUdTKQotCitBTV9DRkxBR1MgPQorQU1fQ1BQRkxBR1MgPQogQlVJTFRfU09VUkNFUyA9CitDTEVBTkZJTEVTID0KIEVYVFJBX0RJU1QgPQorTU9TVExZQ0xFQU5ESVJTID0KIE1PU1RMWUNMRUFORklMRVMgPQorU1VGRklYRVMgPQorbm9pbnN0X0xJQlJBUklFUyA9CiAKLWxpYl9MSUJSQVJJRVMgPSAkKFlBQ0NfTElCUkFSWSkKLUVYVFJBX0xJQlJBUklFUyA9IGxpYnkuYQotbm9pbnN0X0xJQlJBUklFUyA9IGxpYmJpc29uLmEKK2luY2x1ZGUgZ251bGliLm1rCiAKLWxpYnlfYV9TT1VSQ0VTID0gbWFpbi5jIHl5ZXJyb3IuYworQU1fQ0ZMQUdTICs9ICQoV0FSTl9DRkxBR1MpCiAKLWxpYmJpc29uX2FfU09VUkNFUyA9ICQobGliX1NPVVJDRVMpCi1saWJfU09VUkNFUyA9IFwKLSAgZ2V0LWVycm5vLmggZ2V0LWVycm5vLmMgXAotICBzdWJwaXBlLmggc3VicGlwZS5jIFwKLSAgJChiaXRzZXRzX3NvdXJjZXMpICQoYWRkaXRpb25hbF9iaXRzZXRzX3NvdXJjZXMpICQodGltZXZhcnNfc291cmNlcykKLQotIyBJbXBsZW1lbnRhdGlvbiBvZiBiaXRzZXRzCisjIEltcGxlbWVudGF0aW9uIG9mIGJpdHNldHMuCiBiaXRzZXRzX3NvdXJjZXMgPSBcCiAgIGFiaXRzZXQuYyBhYml0c2V0LmggYmJpdHNldC5oIGJpdHNldC5jIGJpdHNldC5oIGJpdHNldF9zdGF0cy5jCVwKICAgYml0c2V0X3N0YXRzLmggYml0c2V0di5jIGJpdHNldHYuaCBlYml0c2V0LmMgZWJpdHNldC5oIGxiaXRzZXQuYwlcCkBAIC00MSwxMyArMzgsMTggQEAKIAogIyBBZGRpdGlvbmFsIGJpdHNldCBvcGVyYXRpb25zLgogYWRkaXRpb25hbF9iaXRzZXRzX3NvdXJjZXMgPSBcCi0JYml0c2V0di1wcmludC5oIGJpdHNldHYtcHJpbnQuYworICBiaXRzZXR2LXByaW50LmggYml0c2V0di1wcmludC5jCiAKICMgdGltZXZhcnMsIHN0b2xlbiBmcm9tIEdDQy4KIHRpbWV2YXJzX3NvdXJjZXMgPSBcCi0JdGltZXZhci5oIHRpbWV2YXIuYyB0aW1ldmFyLmRlZgorICB0aW1ldmFyLmggdGltZXZhci5jIHRpbWV2YXIuZGVmCiAKLWxpYmJpc29uX2FfTElCQUREID0gJChMSUJPQkpTKSAkKEFMTE9DQSkKLWxpYmJpc29uX2FfREVQRU5ERU5DSUVTID0gJChsaWJiaXNvbl9hX0xJQkFERCkKKyMgTm9uLWdudWxpYiBzb3VyY2VzIGluIEJpc29uJ3MgaW50ZXJuYWwgbGlicmFyeS4KK2xpYmJpc29uX2FfU09VUkNFUyArPSBcCisgIGdldC1lcnJuby5oIGdldC1lcnJuby5jIFwKKyAgJChiaXRzZXRzX3NvdXJjZXMpICQoYWRkaXRpb25hbF9iaXRzZXRzX3NvdXJjZXMpICQodGltZXZhcnNfc291cmNlcykKIAotaW5jbHVkZSBnbnVsaWIubWsKKyMgVGhlIFlhY2MgY29tcGF0aWJpbGl0eSBsaWJyYXJ5LgorbGliX0xJQlJBUklFUyA9ICQoWUFDQ19MSUJSQVJZKQorRVhUUkFfTElCUkFSSUVTID0gbGlieS5hCitsaWJ5X2FfU09VUkNFUyA9IG1haW4uYyB5eWVycm9yLmMKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5pbiBiL2xpYi9NYWtlZmlsZS5pbgppbmRleCBkMzYxM2U5Li4xZmU4ODVkIDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUuaW4KKysrIGIvbGliL01ha2VmaWxlLmluCkBAIC0xLDggKzEsOCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjYgZnJvbSBNYWtlZmlsZS5hbS4KKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTIuNSBmcm9tIE1ha2VmaWxlLmFtLgogIyBAY29uZmlndXJlX2lucHV0QAogCi0jIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKLSMgMjAwMywgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMTk5NC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCiAjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCkBAIC0xNCwxNSArMTQsNjkgQEAKIAogQFNFVF9NQUtFQAogCi1zcmNkaXIgPSBAc3JjZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorIyBNYWtlIGJpc29uL2xpYi4KKworIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCwgMjAwNiwgMjAwOC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIENvcHlyaWdodCAoQykgMjAwMi0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgZmlsZS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisjIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdAorIyBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR2VuZXJhdGVkIGJ5IGdudWxpYi10b29sLgorIyBSZXByb2R1Y2UgYnk6IGdudWxpYi10b29sIC0taW1wb3J0IC0tZGlyPS4gLS1sb2NhbC1kaXI9Z2wgLS1saWI9bGliYmlzb24gLS1zb3VyY2UtYmFzZT1saWIgLS1tNC1iYXNlPW00IC0tZG9jLWJhc2U9ZG9jIC0tdGVzdHMtYmFzZT10ZXN0cyAtLWF1eC1kaXI9YnVpbGQtYXV4IC0tbWFrZWZpbGUtbmFtZT1nbnVsaWIubWsgLS1uby1jb25kaXRpb25hbC1kZXBlbmRlbmNpZXMgLS1uby1saWJ0b29sIC0tbWFjcm8tcHJlZml4PWdsIGFyZ21hdGNoIGFzc2VydCBjLXN0cmNhc2UgY2FsbG9jLXBvc2l4IGNsb3NlIGNsb3Nlb3V0IGNvbmZpZy1oIGNvbmZpZ21ha2UgZGlybmFtZSBlcnJvciBleHRlbnNpb25zIGZkbCBmb3Blbi1zYWZlciBmcHJpbnRmLXBvc2l4IGdldGxpbmUgZ2V0b3B0LWdudSBnZXR0ZXh0IGdpdC12ZXJzaW9uLWdlbiBnaXRsb2ctdG8tY2hhbmdlbG9nIGdwbC0zLjAgaGFzaCBpbnR0eXBlcyBpc25hbiBqYXZhY29tcC1zY3JpcHQgamF2YWV4ZWMtc2NyaXB0IGxkZXhwbCBtYWxsb2MtZ251IG1ic2NociBtYnNyY2hyIG1ic3dpZHRoIG9ic3RhY2sgb2JzdGFjay1wcmludGYgcGVycm9yIHByaW50Zi1wb3NpeCBwcm9nbmFtZSBxdW90ZSBxdW90ZWFyZyByZWFkbWUtcmVsZWFzZSByZWFsbG9jLXBvc2l4IHNucHJpbnRmLXBvc2l4IHNwYXduLXBpcGUgc3ByaW50Zi1wb3NpeCBzdGRib29sIHN0cGNweSBzdHJkdXAtcG9zaXggc3RyZXJyb3Igc3RydG91bCBzdHJ2ZXJzY21wIHVuaXN0ZCB1bmlzdGQtc2FmZXIgdW5sb2NrZWQtaW8gdW5zZXRlbnYgdXBkYXRlLWNvcHlyaWdodCB2ZXJpZnkgdnNucHJpbnRmLXBvc2l4IHZzcHJpbnRmLXBvc2l4IHdhcm5pbmdzIHhhbGxvYyB4YWxsb2MtZGllIHhtZW1kdXAwIHhzdHJuZHVwCisKIFZQQVRIID0gQHNyY2RpckAKK2FtX19tYWtlX2RyeXJ1biA9IFwKKyAgeyBcCisgICAgYW1fX2RyeT1ubzsgXAorICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAorICAgICAgKlxcW1wgXAldKikgXAorICAgICAgICBlY2hvICdhbS0tZWNobzogOyBAZWNobyAiQU0iICBPSycgfCAkKE1BS0UpIC1mIC0gMj4vZGV2L251bGwgXAorICAgICAgICAgIHwgZ3JlcCAnXkFNIE9LJCQnID4vZGV2L251bGwgfHwgYW1fX2RyeT15ZXM7OyBcCisgICAgICAqKSBcCisgICAgICAgIGZvciBhbV9fZmxnIGluICQkTUFLRUZMQUdTOyBkbyBcCisgICAgICAgICAgY2FzZSAkJGFtX19mbGcgaW4gXAorICAgICAgICAgICAgKj0qfC0tKikgOzsgXAorICAgICAgICAgICAgKm4qKSBhbV9fZHJ5PXllczsgYnJlYWs7OyBcCisgICAgICAgICAgZXNhYzsgXAorICAgICAgICBkb25lOzsgXAorICAgIGVzYWM7IFwKKyAgICB0ZXN0ICQkYW1fX2RyeSA9IHllczsgXAorICB9CiBwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKIHBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotdG9wX2J1aWxkZGlyID0gLi4KK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKIGFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLUlOU1RBTEwgPSBASU5TVEFMTEAKIGluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CiBpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCiBpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKQEAgLTM3LDE4MCArOTEsMTMzOCBAQAogYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKIGhvc3RfdHJpcGxldCA9IEBob3N0QAogRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluIFwKLQkkKHNyY2RpcikvZ251bGliLm1rIGRpcm5hbWUuYyBkaXJuYW1lLmggZHVwLXNhZmVyLmMgZXJyb3IuYyBcCi0JZXJyb3IuaCBleGl0ZmFpbC5jIGV4aXRmYWlsLmggZmQtc2FmZXIuYyBmb3Blbi1zYWZlci5jIFwKLQlnZXRvcHQuYyBnZXRvcHQxLmMgaGFyZC1sb2NhbGUuYyBoYXJkLWxvY2FsZS5oIGhhc2guYyBoYXNoLmggXAotCW1hbGxvYy5jIG9ic3RhY2suYyBvYnN0YWNrLmggcGlwZS1zYWZlci5jIHF1b3RlLmMgcXVvdGUuaCBcCi0JcXVvdGVhcmcuYyBxdW90ZWFyZy5oIHN0ZGlvLS0uaCBzdGRpby1zYWZlci5oIHN0cGNweS5jIFwKLQlzdHJkdXAuYyBzdHJkdXAuaCBzdHJlcnJvci5jIHN0cm5kdXAuYyBzdHJuZHVwLmggc3Rybmxlbi5jIFwKLQlzdHJubGVuLmggc3RydG9sLmMgc3RydG91bC5jIHN0cnZlcnNjbXAuYyBzdHJ2ZXJzY21wLmggXAotCXVuaXN0ZC0tLmggdW5pc3RkLXNhZmVyLmggdW5sb2NrZWQtaW8uaCB4YWxsb2MuaCB4bWFsbG9jLmMKKwkkKHNyY2RpcikvY29uZmlnLmluLmggJChzcmNkaXIpL2dudWxpYi5tayBcCisJJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvZGVwY29tcAorQExJQlVOSVNUUklOR19DT01QSUxFX1VOSVdJRFRIX1dJRFRIX1RSVUVAYW1fX2FwcGVuZF8xID0gdW5pd2lkdGgvd2lkdGguYwogc3ViZGlyID0gbGliCiBBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaXNvbi1pMThuLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2Mtd29ya2luZy5tNCAkKHRvcF9zcmNkaXIpL200L2N4eC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9kaXJuYW1lLm00ICQodG9wX3NyY2RpcikvbTQvZG1hbGxvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9kb3MubTQgJCh0b3Bfc3JjZGlyKS9tNC9lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9leGl0ZmFpbC5tNCAkKHRvcF9zcmNkaXIpL200L2V4dGVuc2lvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ2V0b3B0Lm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dF9nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9oYXJkLWxvY2FsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9oYXNoLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaF9nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGRfZ2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4X2dsLm00ICQodG9wX3NyY2RpcikvbTQvbTQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbWJydG93Yy5tNCAkKHRvcF9zcmNkaXIpL200L21ic3RhdGVfdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9tYnN3aWR0aC5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9vYnN0YWNrLm00ICQodG9wX3NyY2RpcikvbTQvb25jZW9ubHkubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG9fZ2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC8wMGdudWxpYi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9hbGxvY2EubTQgJCh0b3Bfc3JjZGlyKS9tNC9hc20tdW5kZXJzY29yZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9hc3NlcnQubTQgJCh0b3Bfc3JjZGlyKS9tNC9iaXNvbi1pMThuLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Mtd29ya2luZy5tNCAkKHRvcF9zcmNkaXIpL200L2NhbGxvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZS1zdHJlYW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZW91dC5tNCAkKHRvcF9zcmNkaXIpL200L2NvZGVzZXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29uZmlnLWgubTQgJCh0b3Bfc3JjZGlyKS9tNC9jb25maWdtYWtlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N4eC5tNCAkKHRvcF9zcmNkaXIpL200L2Rpcm5hbWUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZG1hbGxvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9kb3VibGUtc2xhc2gtcm9vdC5tNCAkKHRvcF9zcmNkaXIpL200L2R1cDIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZW52aXJvbi5tNCAkKHRvcF9zcmNkaXIpL200L2Vycm5vX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXJyb3IubTQgJCh0b3Bfc3JjZGlyKS9tNC9leHBvbmVudGQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXhwb25lbnRmLm00ICQodG9wX3NyY2RpcikvbTQvZXhwb25lbnRsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2V4dGVuc2lvbnMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXh0ZXJuLWlubGluZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mYXRhbC1zaWduYWwubTQgJCh0b3Bfc3JjZGlyKS9tNC9mY250bC1vLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZjbnRsLm00ICQodG9wX3NyY2RpcikvbTQvZmNudGxfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mbGV4Lm00ICQodG9wX3NyY2RpcikvbTQvZmxvYXRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mb3Blbi5tNCAkKHRvcF9zcmNkaXIpL200L2ZwZW5kaW5nLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZwaWVlZS5tNCAkKHRvcF9zcmNkaXIpL200L2ZwcmludGYtcG9zaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZnJleHAubTQgJCh0b3Bfc3JjZGlyKS9tNC9mcmV4cGwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZnNldGVyci5tNCAkKHRvcF9zcmNkaXIpL200L2ZzdGF0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dldGRlbGltLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0ZHRhYmxlc2l6ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nZXRsaW5lLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0b3B0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgJCh0b3Bfc3JjZGlyKS9tNC9nbGliYzIxLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dudWxpYi1jb21tb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ251bGliLWNvbXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbmNsdWRlX25leHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2ludG1heF90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzLXByaS5tNCAkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9pc25hbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pc25hbmQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pc25hbmYubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaXNuYW5sLm00ICQodG9wX3NyY2RpcikvbTQvaXN3YmxhbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvamF2YWNvbXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9qYXZhZXhlYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sYXJnZWZpbGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9sZGV4cC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sZGV4cGwubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYnVuaXN0cmluZy1iYXNlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvY2FsY2hhcnNldC5tNCAkKHRvcF9zcmNkaXIpL200L2xvY2FsZS1mci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sb2NhbGUtamEubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb2NhbGUtemgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9jay5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L200Lm00ICQodG9wX3NyY2RpcikvbTQvbWFsbG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21hdGhfaC5tNCAkKHRvcF9zcmNkaXIpL200L21iY2hhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYml0ZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYnJ0b3djLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21ic2luaXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYnN0YXRlX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWJzd2lkdGgubTQgJCh0b3Bfc3JjZGlyKS9tNC9tZW1jaHIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbW1hcC1hbm9uLm00ICQodG9wX3NyY2RpcikvbTQvbW9kZV90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21zdmMtaW52YWwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbXN2Yy1ub3Rocm93Lm00ICQodG9wX3NyY2RpcikvbTQvbXVsdGlhcmNoLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L25scy5tNCAkKHRvcF9zcmNkaXIpL200L25vY3Jhc2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvb2JzdGFjay1wcmludGYubTQgJCh0b3Bfc3JjZGlyKS9tNC9vZmZfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9vcGVuLm00ICQodG9wX3NyY2RpcikvbTQvcGF0aG1heC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wZXJyb3IubTQgJCh0b3Bfc3JjZGlyKS9tNC9waXBlMi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Bvc2l4X3NwYXduLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ByaW50Zi1mcmV4cC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcmludGYtZnJleHBsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ByaW50Zi1wb3NpeC1ycGwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJpbnRmLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAogCSQodG9wX3NyY2RpcikvbTQvcXVvdGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9xdW90ZWFyZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdGRib29sLm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50X2hfZ2wubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RkaW8tc2FmZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHBjcHkubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmFpc2UubTQgJCh0b3Bfc3JjZGlyKS9tNC9yYXdtZW1jaHIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmVhbGxvYy5tNCAkKHRvcF9zcmNkaXIpL200L3NjaGVkX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc2V0ZW52Lm00ICQodG9wX3NyY2RpcikvbTQvc2lnX2F0b21pY190Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NpZ2FjdGlvbi5tNCAkKHRvcF9zcmNkaXIpL200L3NpZ25hbF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NpZ25hbGJsb2NraW5nLm00ICQodG9wX3NyY2RpcikvbTQvc2lnbmJpdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zaXplX21heC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zbnByaW50Zi1wb3NpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zbnByaW50Zi5tNCAkKHRvcF9zcmNkaXIpL200L3NwYXduLXBpcGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3Bhd25faC5tNCAkKHRvcF9zcmNkaXIpL200L3NwcmludGYtcG9zaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3NpemVfdC5tNCAkKHRvcF9zcmNkaXIpL200L3N0YXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RkYm9vbC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGRlZl9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGludC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGlvX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRsaWJfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHBjcHkubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJjaHJudWwubTQgXAogCSQodG9wX3NyY2RpcikvbTQvc3RyZHVwLm00ICQodG9wX3NyY2RpcikvbTQvc3RyZXJyb3IubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RyZXJyb3Jfci5tNCAkKHRvcF9zcmNkaXIpL200L3N0cmluZ19oLm00IFwKIAkkKHRvcF9zcmNkaXIpL200L3N0cm5kdXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJubGVuLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3N0cnRvbC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cnRvdWwubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RydmVyc2NtcC5tNCAkKHRvcF9zcmNkaXIpL200L3N1YnBpcGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvdGltZXZhci5tNCAkKHRvcF9zcmNkaXIpL200L3VpbnRtYXhfdF9nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC91bG9uZ2xvbmdfZ2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RydG91bC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cnZlcnNjbXAubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3lzX3NvY2tldF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N5c19zdGF0X2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zeXNfdHlwZXNfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zeXNfd2FpdF9oLm00ICQodG9wX3NyY2RpcikvbTQvdGhyZWFkbGliLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3RpbWVfaC5tNCAkKHRvcF9zcmNkaXIpL200L3RpbWV2YXIubTQgXAogCSQodG9wX3NyY2RpcikvbTQvdW5pc3RkLXNhZmVyLm00ICQodG9wX3NyY2RpcikvbTQvdW5pc3RkX2gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvdW5sb2NrZWQtaW8ubTQgJCh0b3Bfc3JjZGlyKS9tNC93YXJuaW5nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3hhbGxvYy5tNCAkKHRvcF9zcmNkaXIpL200L3hzdHJuZHVwLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3VubG9ja2VkLWlvLm00ICQodG9wX3NyY2RpcikvbTQvdmFzbnByaW50Zi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC92ZnByaW50Zi1wb3NpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC92c25wcmludGYtcG9zaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdnNucHJpbnRmLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ZzcHJpbnRmLXBvc2l4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3dhaXQtcHJvY2Vzcy5tNCAkKHRvcF9zcmNkaXIpL200L3dhaXRwaWQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2Fybi1vbi11c2UubTQgJCh0b3Bfc3JjZGlyKS9tNC93YXJuaW5ncy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93Y2hhcl9oLm00ICQodG9wX3NyY2RpcikvbTQvd2NoYXJfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93Y3R5cGVfaC5tNCAkKHRvcF9zcmNkaXIpL200L3djd2lkdGgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2ludF90Lm00ICQodG9wX3NyY2RpcikvbTQveGFsbG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3hzaXplLm00ICQodG9wX3NyY2RpcikvbTQveHN0cm5kdXAubTQgXAogCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCiBhbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAogCSQoQUNMT0NBTF9NNCkKLW1raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9ta2luc3RhbGxkaXJzCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9IGNvbmZpZy5oCiBDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KIGFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwogYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKICAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAogICAgICopIGY9JCRwOzsgXAogICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19pbnN0YWxsX21heCA9IDQwCithbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAorICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCithbV9fbm9iYXNlX3N0cmlwID0gXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKK2FtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKKyAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKKyAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAorICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKKyAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKKyAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCithbV9fYmFzZV9saXN0ID0gXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCithbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCisgIHRlc3QgLXogIiQkZmlsZXMiIFwKKyAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKKyAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisgICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCisgIH0KIGFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChsaWJkaXIpIgotbGliTElCUkFSSUVTX0lOU1RBTEwgPSAkKElOU1RBTExfREFUQSkKIExJQlJBUklFUyA9ICQobGliX0xJQlJBUklFUykgJChub2luc3RfTElCUkFSSUVTKQotQVIgPSBhcgotQVJGTEFHUyA9IGNydQorQU1fVl9BUiA9ICQoYW1fX3ZfQVJfQEFNX1ZAKQorYW1fX3ZfQVJfID0gJChhbV9fdl9BUl9AQU1fREVGQVVMVF9WQCkKK2FtX192X0FSXzAgPSBAZWNobyAiICBBUiAgICAgICIgJEA7CithbV9fdl9BUl8xID0gCiBsaWJiaXNvbl9hX0FSID0gJChBUikgJChBUkZMQUdTKQotYW1fX0RFUEVOREVOQ0lFU18xID0gQExJQk9CSlNACi1hbV9fb2JqZWN0c18xID0gYWJpdHNldC4kKE9CSkVYVCkgYml0c2V0LiQoT0JKRVhUKSBcCithbV9fREVQRU5ERU5DSUVTXzEgPQorYW1fX2xpYmJpc29uX2FfU09VUkNFU19ESVNUID0gYXJnbWF0Y2guYyBiaW5hcnktaW8uaCBiaW5hcnktaW8uYyBcCisJYml0cm90YXRlLmggYml0cm90YXRlLmMgYy1jdHlwZS5oIGMtY3R5cGUuYyBjLXN0cmNhc2UuaCBcCisJYy1zdHJjYXNlY21wLmMgYy1zdHJuY2FzZWNtcC5jIGNsb2V4ZWMuYyBjbG9zZS1zdHJlYW0uYyBcCisJY2xvc2VvdXQuYyBkaXJuYW1lLmMgYmFzZW5hbWUuYyBkaXJuYW1lLWxncGwuYyBiYXNlbmFtZS1sZ3BsLmMgXAorCXN0cmlwc2xhc2guYyBleGl0ZmFpbC5jIGZhdGFsLXNpZ25hbC5oIGZhdGFsLXNpZ25hbC5jIFwKKwlmZC1ob29rLmMgZmQtc2FmZXItZmxhZy5jIGR1cC1zYWZlci1mbGFnLmMgZm9wZW4tc2FmZXIuYyBcCisJZ2V0dGV4dC5oIGhhc2guYyBsb2NhbGNoYXJzZXQuaCBsb2NhbGNoYXJzZXQuYyBnbHRocmVhZC9sb2NrLmggXAorCWdsdGhyZWFkL2xvY2suYyBtYXRoLmMgbWJjaGFyLmMgbWJzY2hyLmMgbWJzcmNoci5jIG1ic3dpZHRoLmggXAorCW1ic3dpZHRoLmMgbWJ1aXRlci5oIG1idWl0ZXIuYyBwaXBlMi5jIHBpcGUyLXNhZmVyLmMgXAorCXByaW50Zi1mcmV4cC5jIHByaW50Zi1mcmV4cGwuYyBwcm9nbmFtZS5oIHByb2duYW1lLmMgXAorCXF1b3RlYXJnLmMgc2lnLWhhbmRsZXIuYyBzaXplX21heC5oIHNwYXduLXBpcGUuaCBzcGF3bi1waXBlLmMgXAorCXczMnNwYXduLmggc3RkaW8uYyBzdHJubGVuMS5oIHN0cm5sZW4xLmMgZ2x0aHJlYWQvdGhyZWFkbGliLmMgXAorCXVuaXN0ZC5jIGR1cC1zYWZlci5jIGZkLXNhZmVyLmMgcGlwZS1zYWZlci5jIHVuaXdpZHRoL3dpZHRoLmMgXAorCXdhaXQtcHJvY2Vzcy5oIHdhaXQtcHJvY2Vzcy5jIHdjdHlwZS1oLmMgeG1hbGxvYy5jIFwKKwl4YWxsb2MtZGllLmMgeHNpemUuaCB4c2l6ZS5jIHhzdHJuZHVwLmggeHN0cm5kdXAuYyBnZXQtZXJybm8uaCBcCisJZ2V0LWVycm5vLmMgYWJpdHNldC5jIGFiaXRzZXQuaCBiYml0c2V0LmggYml0c2V0LmMgYml0c2V0LmggXAorCWJpdHNldF9zdGF0cy5jIGJpdHNldF9zdGF0cy5oIGJpdHNldHYuYyBiaXRzZXR2LmggZWJpdHNldC5jIFwKKwllYml0c2V0LmggbGJpdHNldC5jIGxiaXRzZXQuaCBsaWJpYmVydHkuaCB2Yml0c2V0LmMgdmJpdHNldC5oIFwKKwliaXRzZXR2LXByaW50LmggYml0c2V0di1wcmludC5jIHRpbWV2YXIuaCB0aW1ldmFyLmMgXAorCXRpbWV2YXIuZGVmCitATElCVU5JU1RSSU5HX0NPTVBJTEVfVU5JV0lEVEhfV0lEVEhfVFJVRUBhbV9fb2JqZWN0c18xID0gIFwKK0BMSUJVTklTVFJJTkdfQ09NUElMRV9VTklXSURUSF9XSURUSF9UUlVFQAl3aWR0aC4kKE9CSkVYVCkKK2FtX19vYmplY3RzXzIgPSBhYml0c2V0LiQoT0JKRVhUKSBiaXRzZXQuJChPQkpFWFQpIFwKIAliaXRzZXRfc3RhdHMuJChPQkpFWFQpIGJpdHNldHYuJChPQkpFWFQpIGViaXRzZXQuJChPQkpFWFQpIFwKIAlsYml0c2V0LiQoT0JKRVhUKSB2Yml0c2V0LiQoT0JKRVhUKQotYW1fX29iamVjdHNfMiA9IGJpdHNldHYtcHJpbnQuJChPQkpFWFQpCi1hbV9fb2JqZWN0c18zID0gdGltZXZhci4kKE9CSkVYVCkKLWFtX19vYmplY3RzXzQgPSBnZXQtZXJybm8uJChPQkpFWFQpIHN1YnBpcGUuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMSkgXAotCSQoYW1fX29iamVjdHNfMikgJChhbV9fb2JqZWN0c18zKSBhcmdtYXRjaC4kKE9CSkVYVCkgXAotCWJhc2VuYW1lLiQoT0JKRVhUKSBzdHJpcHNsYXNoLiQoT0JKRVhUKSBtYnN3aWR0aC4kKE9CSkVYVCkgXAotCXhhbGxvYy1kaWUuJChPQkpFWFQpIHhzdHJuZHVwLiQoT0JKRVhUKQotYW1fbGliYmlzb25fYV9PQkpFQ1RTID0gJChhbV9fb2JqZWN0c180KQorYW1fX29iamVjdHNfMyA9IGJpdHNldHYtcHJpbnQuJChPQkpFWFQpCithbV9fb2JqZWN0c180ID0gdGltZXZhci4kKE9CSkVYVCkKK2FtX2xpYmJpc29uX2FfT0JKRUNUUyA9IGFyZ21hdGNoLiQoT0JKRVhUKSBiaW5hcnktaW8uJChPQkpFWFQpIFwKKwliaXRyb3RhdGUuJChPQkpFWFQpIGMtY3R5cGUuJChPQkpFWFQpIGMtc3RyY2FzZWNtcC4kKE9CSkVYVCkgXAorCWMtc3RybmNhc2VjbXAuJChPQkpFWFQpIGNsb2V4ZWMuJChPQkpFWFQpIFwKKwljbG9zZS1zdHJlYW0uJChPQkpFWFQpIGNsb3Nlb3V0LiQoT0JKRVhUKSBkaXJuYW1lLiQoT0JKRVhUKSBcCisJYmFzZW5hbWUuJChPQkpFWFQpIGRpcm5hbWUtbGdwbC4kKE9CSkVYVCkgXAorCWJhc2VuYW1lLWxncGwuJChPQkpFWFQpIHN0cmlwc2xhc2guJChPQkpFWFQpIFwKKwlleGl0ZmFpbC4kKE9CSkVYVCkgZmF0YWwtc2lnbmFsLiQoT0JKRVhUKSBmZC1ob29rLiQoT0JKRVhUKSBcCisJZmQtc2FmZXItZmxhZy4kKE9CSkVYVCkgZHVwLXNhZmVyLWZsYWcuJChPQkpFWFQpIFwKKwlmb3Blbi1zYWZlci4kKE9CSkVYVCkgaGFzaC4kKE9CSkVYVCkgbG9jYWxjaGFyc2V0LiQoT0JKRVhUKSBcCisJbG9jay4kKE9CSkVYVCkgbWF0aC4kKE9CSkVYVCkgbWJjaGFyLiQoT0JKRVhUKSBcCisJbWJzY2hyLiQoT0JKRVhUKSBtYnNyY2hyLiQoT0JKRVhUKSBtYnN3aWR0aC4kKE9CSkVYVCkgXAorCW1idWl0ZXIuJChPQkpFWFQpIHBpcGUyLiQoT0JKRVhUKSBwaXBlMi1zYWZlci4kKE9CSkVYVCkgXAorCXByaW50Zi1mcmV4cC4kKE9CSkVYVCkgcHJpbnRmLWZyZXhwbC4kKE9CSkVYVCkgXAorCXByb2duYW1lLiQoT0JKRVhUKSBxdW90ZWFyZy4kKE9CSkVYVCkgc2lnLWhhbmRsZXIuJChPQkpFWFQpIFwKKwlzcGF3bi1waXBlLiQoT0JKRVhUKSBzdGRpby4kKE9CSkVYVCkgc3RybmxlbjEuJChPQkpFWFQpIFwKKwl0aHJlYWRsaWIuJChPQkpFWFQpIHVuaXN0ZC4kKE9CSkVYVCkgZHVwLXNhZmVyLiQoT0JKRVhUKSBcCisJZmQtc2FmZXIuJChPQkpFWFQpIHBpcGUtc2FmZXIuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMSkgXAorCXdhaXQtcHJvY2Vzcy4kKE9CSkVYVCkgd2N0eXBlLWguJChPQkpFWFQpIHhtYWxsb2MuJChPQkpFWFQpIFwKKwl4YWxsb2MtZGllLiQoT0JKRVhUKSB4c2l6ZS4kKE9CSkVYVCkgeHN0cm5kdXAuJChPQkpFWFQpIFwKKwlnZXQtZXJybm8uJChPQkpFWFQpICQoYW1fX29iamVjdHNfMikgJChhbV9fb2JqZWN0c18zKSBcCisJJChhbV9fb2JqZWN0c180KQogbGliYmlzb25fYV9PQkpFQ1RTID0gJChhbV9saWJiaXNvbl9hX09CSkVDVFMpCiBsaWJ5X2FfQVIgPSAkKEFSKSAkKEFSRkxBR1MpCiBsaWJ5X2FfTElCQUREID0KIGFtX2xpYnlfYV9PQkpFQ1RTID0gbWFpbi4kKE9CSkVYVCkgeXllcnJvci4kKE9CSkVYVCkKIGxpYnlfYV9PQkpFQ1RTID0gJChhbV9saWJ5X2FfT0JKRUNUUykKLURFRkFVTFRfSU5DTFVERVMgPSAtSS4gLUkkKHNyY2RpcikgLUkkKHRvcF9idWlsZGRpcikKK0FNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCithbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKK2FtX192X1BfMCA9IGZhbHNlCithbV9fdl9QXzEgPSA6CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOworYW1fX3ZfR0VOXzEgPSAKK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9hdF8wID0gQAorYW1fX3ZfYXRfMSA9IAorREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AKIGRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9kZXBjb21wCiBhbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKK0FNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKK2FtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9sdF8wID0gLS1zaWxlbnQKK2FtX192X2x0XzEgPSAKIENPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAogCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0FNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKK2FtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCithbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOworYW1fX3ZfQ0NfMSA9IAogQ0NMRCA9ICQoQ0MpCiBMSU5LID0gJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotU09VUkNFUyA9ICQobGliYmlzb25fYV9TT1VSQ0VTKSAkKGxpYnlfYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJiaXNvbl9hX1NPVVJDRVMpICQobGlieV9hX1NPVVJDRVMpCitBTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQorYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCithbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7CithbV9fdl9DQ0xEXzEgPSAKK1NPVVJDRVMgPSAkKGxpYmJpc29uX2FfU09VUkNFUykgJChFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMpIFwKKwkkKGxpYnlfYV9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChhbV9fbGliYmlzb25fYV9TT1VSQ0VTX0RJU1QpIFwKKwkkKEVYVFJBX2xpYmJpc29uX2FfU09VUkNFUykgJChsaWJ5X2FfU09VUkNFUykKK2FtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAorICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKKyAgICBufG5vfE5PKSBmYWxzZTs7IFwKKyAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAorICBlc2FjCiBFVEFHUyA9IGV0YWdzCiBDVEFHUyA9IGN0YWdzCiBESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorcGtnbGliZXhlY2RpciA9IEBwa2dsaWJleGVjZGlyQAogQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQU1ERVBfRkFMU0UgPSBAQU1ERVBfRkFMU0VACi1BTURFUF9UUlVFID0gQEFNREVQX1RSVUVACitBTExPQ0EgPSBAQUxMT0NBQAorQUxMT0NBX0ggPSBAQUxMT0NBX0hACiBBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVBQTEVfVU5JVkVSU0FMX0JVSUxEID0gQEFQUExFX1VOSVZFUlNBTF9CVUlMREAKK0FSID0gQEFSQAorQVJGTEFHUyA9IEBBUkZMQUdTQAorQVNNX1NZTUJPTF9QUkVGSVggPSBAQVNNX1NZTUJPTF9QUkVGSVhACiBBVVRPQ09ORiA9IEBBVVRPQ09ORkAKIEFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKIEFVVE9NNFRFID0gQEFVVE9NNFRFQAogQVVUT01BS0UgPSBAQVVUT01BS0VACiBBV0sgPSBAQVdLQAogQklTT05fQ1hYX1dPUktTID0gQEJJU09OX0NYWF9XT1JLU0AKLUJJU09OX0NYWF9XT1JLU19GQUxTRSA9IEBCSVNPTl9DWFhfV09SS1NfRkFMU0VACi1CSVNPTl9DWFhfV09SS1NfVFJVRSA9IEBCSVNPTl9DWFhfV09SS1NfVFJVRUAKK0JJU09OX0NfV09SS1MgPSBAQklTT05fQ19XT1JLU0AKIEJJU09OX0xPQ0FMRURJUiA9IEBCSVNPTl9MT0NBTEVESVJACitCSVRTSVpFT0ZfUFRSRElGRl9UID0gQEJJVFNJWkVPRl9QVFJESUZGX1RACitCSVRTSVpFT0ZfU0lHX0FUT01JQ19UID0gQEJJVFNJWkVPRl9TSUdfQVRPTUlDX1RACitCSVRTSVpFT0ZfU0laRV9UID0gQEJJVFNJWkVPRl9TSVpFX1RACitCSVRTSVpFT0ZfV0NIQVJfVCA9IEBCSVRTSVpFT0ZfV0NIQVJfVEAKK0JJVFNJWkVPRl9XSU5UX1QgPSBAQklUU0laRU9GX1dJTlRfVEAKIENDID0gQENDQAogQ0NERVBNT0RFID0gQENDREVQTU9ERUAKIENGTEFHUyA9IEBDRkxBR1NACitDTEFTU1BBVEggPSBAQ0xBU1NQQVRIQAorQ0xBU1NQQVRIX1NFUEFSQVRPUiA9IEBDTEFTU1BBVEhfU0VQQVJBVE9SQAorQ09ORklHX0lOQ0xVREUgPSBAQ09ORklHX0lOQ0xVREVACitDT05GX0pBVkEgPSBAQ09ORl9KQVZBQAorQ09ORl9KQVZBQyA9IEBDT05GX0pBVkFDQAogQ1BQID0gQENQUEAKIENQUEZMQUdTID0gQENQUEZMQUdTQAogQ1hYID0gQENYWEAKIENYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKIENYWEZMQUdTID0gQENYWEZMQUdTQAorQ1hYX0NPTVBJTEVSX1BPU0lYTFlfQ09SUkVDVCA9IEBDWFhfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUQAogQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0NfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUID0gQENfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUQAogREVGUyA9IEBERUZTQAogREVQRElSID0gQERFUERJUkAKK0RPVCA9IEBET1RACiBFQ0hPX0MgPSBARUNIT19DQAogRUNIT19OID0gQEVDSE9fTkAKIEVDSE9fVCA9IEBFQ0hPX1RACiBFR1JFUCA9IEBFR1JFUEAKK0VNVUxUSUhPUF9ISURERU4gPSBARU1VTFRJSE9QX0hJRERFTkAKK0VNVUxUSUhPUF9WQUxVRSA9IEBFTVVMVElIT1BfVkFMVUVACitFTk9MSU5LX0hJRERFTiA9IEBFTk9MSU5LX0hJRERFTkAKK0VOT0xJTktfVkFMVUUgPSBARU5PTElOS19WQUxVRUAKK0VPVkVSRkxPV19ISURERU4gPSBARU9WRVJGTE9XX0hJRERFTkAKK0VPVkVSRkxPV19WQUxVRSA9IEBFT1ZFUkZMT1dfVkFMVUVACitFUlJOT19IID0gQEVSUk5PX0hACiBFWEVFWFQgPSBARVhFRVhUQAorRkxPQVRfSCA9IEBGTE9BVF9IQAogR0NDID0gQEdDQ0AKIEdFVE9QVF9IID0gQEdFVE9QVF9IQAorR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKK0dMSUJDMjEgPSBAR0xJQkMyMUAKIEdNU0dGTVQgPSBAR01TR0ZNVEAKK0dNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAorR05VTElCX0FDT1NGID0gQEdOVUxJQl9BQ09TRkAKK0dOVUxJQl9BQ09TTCA9IEBHTlVMSUJfQUNPU0xACitHTlVMSUJfQVNJTkYgPSBAR05VTElCX0FTSU5GQAorR05VTElCX0FTSU5MID0gQEdOVUxJQl9BU0lOTEAKK0dOVUxJQl9BVEFOMkYgPSBAR05VTElCX0FUQU4yRkAKK0dOVUxJQl9BVEFORiA9IEBHTlVMSUJfQVRBTkZACitHTlVMSUJfQVRBTkwgPSBAR05VTElCX0FUQU5MQAorR05VTElCX0FUT0xMID0gQEdOVUxJQl9BVE9MTEAKK0dOVUxJQl9CVE9XQyA9IEBHTlVMSUJfQlRPV0NACitHTlVMSUJfQ0FMTE9DX1BPU0lYID0gQEdOVUxJQl9DQUxMT0NfUE9TSVhACitHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRSA9IEBHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRUAKK0dOVUxJQl9DQlJUID0gQEdOVUxJQl9DQlJUQAorR05VTElCX0NCUlRGID0gQEdOVUxJQl9DQlJURkAKK0dOVUxJQl9DQlJUTCA9IEBHTlVMSUJfQ0JSVExACitHTlVMSUJfQ0VJTCA9IEBHTlVMSUJfQ0VJTEAKK0dOVUxJQl9DRUlMRiA9IEBHTlVMSUJfQ0VJTEZACitHTlVMSUJfQ0VJTEwgPSBAR05VTElCX0NFSUxMQAorR05VTElCX0NIRElSID0gQEdOVUxJQl9DSERJUkAKK0dOVUxJQl9DSE9XTiA9IEBHTlVMSUJfQ0hPV05ACitHTlVMSUJfQ0xPU0UgPSBAR05VTElCX0NMT1NFQAorR05VTElCX0NPUFlTSUdOID0gQEdOVUxJQl9DT1BZU0lHTkAKK0dOVUxJQl9DT1BZU0lHTkYgPSBAR05VTElCX0NPUFlTSUdORkAKK0dOVUxJQl9DT1BZU0lHTkwgPSBAR05VTElCX0NPUFlTSUdOTEAKK0dOVUxJQl9DT1NGID0gQEdOVUxJQl9DT1NGQAorR05VTElCX0NPU0hGID0gQEdOVUxJQl9DT1NIRkAKK0dOVUxJQl9DT1NMID0gQEdOVUxJQl9DT1NMQAorR05VTElCX0RQUklOVEYgPSBAR05VTElCX0RQUklOVEZACitHTlVMSUJfRFVQID0gQEdOVUxJQl9EVVBACitHTlVMSUJfRFVQMiA9IEBHTlVMSUJfRFVQMkAKK0dOVUxJQl9EVVAzID0gQEdOVUxJQl9EVVAzQAorR05VTElCX0VOVklST04gPSBAR05VTElCX0VOVklST05ACitHTlVMSUJfRVVJREFDQ0VTUyA9IEBHTlVMSUJfRVVJREFDQ0VTU0AKK0dOVUxJQl9FWFAyID0gQEdOVUxJQl9FWFAyQAorR05VTElCX0VYUDJGID0gQEdOVUxJQl9FWFAyRkAKK0dOVUxJQl9FWFAyTCA9IEBHTlVMSUJfRVhQMkxACitHTlVMSUJfRVhQRiA9IEBHTlVMSUJfRVhQRkAKK0dOVUxJQl9FWFBMID0gQEdOVUxJQl9FWFBMQAorR05VTElCX0VYUE0xID0gQEdOVUxJQl9FWFBNMUAKK0dOVUxJQl9FWFBNMUYgPSBAR05VTElCX0VYUE0xRkAKK0dOVUxJQl9FWFBNMUwgPSBAR05VTElCX0VYUE0xTEAKK0dOVUxJQl9GQUJTRiA9IEBHTlVMSUJfRkFCU0ZACitHTlVMSUJfRkFCU0wgPSBAR05VTElCX0ZBQlNMQAorR05VTElCX0ZBQ0NFU1NBVCA9IEBHTlVMSUJfRkFDQ0VTU0FUQAorR05VTElCX0ZDSERJUiA9IEBHTlVMSUJfRkNIRElSQAorR05VTElCX0ZDSE1PREFUID0gQEdOVUxJQl9GQ0hNT0RBVEAKK0dOVUxJQl9GQ0hPV05BVCA9IEBHTlVMSUJfRkNIT1dOQVRACitHTlVMSUJfRkNMT1NFID0gQEdOVUxJQl9GQ0xPU0VACitHTlVMSUJfRkNOVEwgPSBAR05VTElCX0ZDTlRMQAorR05VTElCX0ZEQVRBU1lOQyA9IEBHTlVMSUJfRkRBVEFTWU5DQAorR05VTElCX0ZET1BFTiA9IEBHTlVMSUJfRkRPUEVOQAorR05VTElCX0ZGTFVTSCA9IEBHTlVMSUJfRkZMVVNIQAorR05VTElCX0ZGU0wgPSBAR05VTElCX0ZGU0xACitHTlVMSUJfRkZTTEwgPSBAR05VTElCX0ZGU0xMQAorR05VTElCX0ZHRVRDID0gQEdOVUxJQl9GR0VUQ0AKK0dOVUxJQl9GR0VUUyA9IEBHTlVMSUJfRkdFVFNACitHTlVMSUJfRkxPT1IgPSBAR05VTElCX0ZMT09SQAorR05VTElCX0ZMT09SRiA9IEBHTlVMSUJfRkxPT1JGQAorR05VTElCX0ZMT09STCA9IEBHTlVMSUJfRkxPT1JMQAorR05VTElCX0ZNQSA9IEBHTlVMSUJfRk1BQAorR05VTElCX0ZNQUYgPSBAR05VTElCX0ZNQUZACitHTlVMSUJfRk1BTCA9IEBHTlVMSUJfRk1BTEAKK0dOVUxJQl9GTU9EID0gQEdOVUxJQl9GTU9EQAorR05VTElCX0ZNT0RGID0gQEdOVUxJQl9GTU9ERkAKK0dOVUxJQl9GTU9ETCA9IEBHTlVMSUJfRk1PRExACitHTlVMSUJfRk9QRU4gPSBAR05VTElCX0ZPUEVOQAorR05VTElCX0ZQUklOVEYgPSBAR05VTElCX0ZQUklOVEZACitHTlVMSUJfRlBSSU5URl9QT1NJWCA9IEBHTlVMSUJfRlBSSU5URl9QT1NJWEAKK0dOVUxJQl9GUFVSR0UgPSBAR05VTElCX0ZQVVJHRUAKK0dOVUxJQl9GUFVUQyA9IEBHTlVMSUJfRlBVVENACitHTlVMSUJfRlBVVFMgPSBAR05VTElCX0ZQVVRTQAorR05VTElCX0ZSRUFEID0gQEdOVUxJQl9GUkVBREAKK0dOVUxJQl9GUkVPUEVOID0gQEdOVUxJQl9GUkVPUEVOQAorR05VTElCX0ZSRVhQID0gQEdOVUxJQl9GUkVYUEAKK0dOVUxJQl9GUkVYUEYgPSBAR05VTElCX0ZSRVhQRkAKK0dOVUxJQl9GUkVYUEwgPSBAR05VTElCX0ZSRVhQTEAKK0dOVUxJQl9GU0NBTkYgPSBAR05VTElCX0ZTQ0FORkAKK0dOVUxJQl9GU0VFSyA9IEBHTlVMSUJfRlNFRUtACitHTlVMSUJfRlNFRUtPID0gQEdOVUxJQl9GU0VFS09ACitHTlVMSUJfRlNUQVQgPSBAR05VTElCX0ZTVEFUQAorR05VTElCX0ZTVEFUQVQgPSBAR05VTElCX0ZTVEFUQVRACitHTlVMSUJfRlNZTkMgPSBAR05VTElCX0ZTWU5DQAorR05VTElCX0ZURUxMID0gQEdOVUxJQl9GVEVMTEAKK0dOVUxJQl9GVEVMTE8gPSBAR05VTElCX0ZURUxMT0AKK0dOVUxJQl9GVFJVTkNBVEUgPSBAR05VTElCX0ZUUlVOQ0FURUAKK0dOVUxJQl9GVVRJTUVOUyA9IEBHTlVMSUJfRlVUSU1FTlNACitHTlVMSUJfRldSSVRFID0gQEdOVUxJQl9GV1JJVEVACitHTlVMSUJfR0VUQyA9IEBHTlVMSUJfR0VUQ0AKK0dOVUxJQl9HRVRDSEFSID0gQEdOVUxJQl9HRVRDSEFSQAorR05VTElCX0dFVENXRCA9IEBHTlVMSUJfR0VUQ1dEQAorR05VTElCX0dFVERFTElNID0gQEdOVUxJQl9HRVRERUxJTUAKK0dOVUxJQl9HRVRET01BSU5OQU1FID0gQEdOVUxJQl9HRVRET01BSU5OQU1FQAorR05VTElCX0dFVERUQUJMRVNJWkUgPSBAR05VTElCX0dFVERUQUJMRVNJWkVACitHTlVMSUJfR0VUR1JPVVBTID0gQEdOVUxJQl9HRVRHUk9VUFNACitHTlVMSUJfR0VUSE9TVE5BTUUgPSBAR05VTElCX0dFVEhPU1ROQU1FQAorR05VTElCX0dFVExJTkUgPSBAR05VTElCX0dFVExJTkVACitHTlVMSUJfR0VUTE9BREFWRyA9IEBHTlVMSUJfR0VUTE9BREFWR0AKK0dOVUxJQl9HRVRMT0dJTiA9IEBHTlVMSUJfR0VUTE9HSU5ACitHTlVMSUJfR0VUTE9HSU5fUiA9IEBHTlVMSUJfR0VUTE9HSU5fUkAKK0dOVUxJQl9HRVRQQUdFU0laRSA9IEBHTlVMSUJfR0VUUEFHRVNJWkVACitHTlVMSUJfR0VUU1VCT1BUID0gQEdOVUxJQl9HRVRTVUJPUFRACitHTlVMSUJfR0VUVVNFUlNIRUxMID0gQEdOVUxJQl9HRVRVU0VSU0hFTExACitHTlVMSUJfR0xfVU5JU1REX0hfR0VUT1BUID0gQEdOVUxJQl9HTF9VTklTVERfSF9HRVRPUFRACitHTlVMSUJfR1JBTlRQVCA9IEBHTlVMSUJfR1JBTlRQVEAKK0dOVUxJQl9HUk9VUF9NRU1CRVIgPSBAR05VTElCX0dST1VQX01FTUJFUkAKK0dOVUxJQl9IWVBPVCA9IEBHTlVMSUJfSFlQT1RACitHTlVMSUJfSFlQT1RGID0gQEdOVUxJQl9IWVBPVEZACitHTlVMSUJfSFlQT1RMID0gQEdOVUxJQl9IWVBPVExACitHTlVMSUJfSUxPR0IgPSBAR05VTElCX0lMT0dCQAorR05VTElCX0lMT0dCRiA9IEBHTlVMSUJfSUxPR0JGQAorR05VTElCX0lMT0dCTCA9IEBHTlVMSUJfSUxPR0JMQAorR05VTElCX0lNQVhBQlMgPSBAR05VTElCX0lNQVhBQlNACitHTlVMSUJfSU1BWERJViA9IEBHTlVMSUJfSU1BWERJVkAKK0dOVUxJQl9JU0FUVFkgPSBAR05VTElCX0lTQVRUWUAKK0dOVUxJQl9JU0ZJTklURSA9IEBHTlVMSUJfSVNGSU5JVEVACitHTlVMSUJfSVNJTkYgPSBAR05VTElCX0lTSU5GQAorR05VTElCX0lTTkFOID0gQEdOVUxJQl9JU05BTkAKK0dOVUxJQl9JU05BTkQgPSBAR05VTElCX0lTTkFOREAKK0dOVUxJQl9JU05BTkYgPSBAR05VTElCX0lTTkFORkAKK0dOVUxJQl9JU05BTkwgPSBAR05VTElCX0lTTkFOTEAKK0dOVUxJQl9JU1dCTEFOSyA9IEBHTlVMSUJfSVNXQkxBTktACitHTlVMSUJfSVNXQ1RZUEUgPSBAR05VTElCX0lTV0NUWVBFQAorR05VTElCX0xDSE1PRCA9IEBHTlVMSUJfTENITU9EQAorR05VTElCX0xDSE9XTiA9IEBHTlVMSUJfTENIT1dOQAorR05VTElCX0xERVhQRiA9IEBHTlVMSUJfTERFWFBGQAorR05VTElCX0xERVhQTCA9IEBHTlVMSUJfTERFWFBMQAorR05VTElCX0xJTksgPSBAR05VTElCX0xJTktACitHTlVMSUJfTElOS0FUID0gQEdOVUxJQl9MSU5LQVRACitHTlVMSUJfTE9HID0gQEdOVUxJQl9MT0dACitHTlVMSUJfTE9HMTAgPSBAR05VTElCX0xPRzEwQAorR05VTElCX0xPRzEwRiA9IEBHTlVMSUJfTE9HMTBGQAorR05VTElCX0xPRzEwTCA9IEBHTlVMSUJfTE9HMTBMQAorR05VTElCX0xPRzFQID0gQEdOVUxJQl9MT0cxUEAKK0dOVUxJQl9MT0cxUEYgPSBAR05VTElCX0xPRzFQRkAKK0dOVUxJQl9MT0cxUEwgPSBAR05VTElCX0xPRzFQTEAKK0dOVUxJQl9MT0cyID0gQEdOVUxJQl9MT0cyQAorR05VTElCX0xPRzJGID0gQEdOVUxJQl9MT0cyRkAKK0dOVUxJQl9MT0cyTCA9IEBHTlVMSUJfTE9HMkxACitHTlVMSUJfTE9HQiA9IEBHTlVMSUJfTE9HQkAKK0dOVUxJQl9MT0dCRiA9IEBHTlVMSUJfTE9HQkZACitHTlVMSUJfTE9HQkwgPSBAR05VTElCX0xPR0JMQAorR05VTElCX0xPR0YgPSBAR05VTElCX0xPR0ZACitHTlVMSUJfTE9HTCA9IEBHTlVMSUJfTE9HTEAKK0dOVUxJQl9MU0VFSyA9IEBHTlVMSUJfTFNFRUtACitHTlVMSUJfTFNUQVQgPSBAR05VTElCX0xTVEFUQAorR05VTElCX01BTExPQ19QT1NJWCA9IEBHTlVMSUJfTUFMTE9DX1BPU0lYQAorR05VTElCX01CUkxFTiA9IEBHTlVMSUJfTUJSTEVOQAorR05VTElCX01CUlRPV0MgPSBAR05VTElCX01CUlRPV0NACitHTlVMSUJfTUJTQ0FTRUNNUCA9IEBHTlVMSUJfTUJTQ0FTRUNNUEAKK0dOVUxJQl9NQlNDQVNFU1RSID0gQEdOVUxJQl9NQlNDQVNFU1RSQAorR05VTElCX01CU0NIUiA9IEBHTlVMSUJfTUJTQ0hSQAorR05VTElCX01CU0NTUE4gPSBAR05VTElCX01CU0NTUE5ACitHTlVMSUJfTUJTSU5JVCA9IEBHTlVMSUJfTUJTSU5JVEAKK0dOVUxJQl9NQlNMRU4gPSBAR05VTElCX01CU0xFTkAKK0dOVUxJQl9NQlNOQ0FTRUNNUCA9IEBHTlVMSUJfTUJTTkNBU0VDTVBACitHTlVMSUJfTUJTTkxFTiA9IEBHTlVMSUJfTUJTTkxFTkAKK0dOVUxJQl9NQlNOUlRPV0NTID0gQEdOVUxJQl9NQlNOUlRPV0NTQAorR05VTElCX01CU1BCUksgPSBAR05VTElCX01CU1BCUktACitHTlVMSUJfTUJTUENBU0VDTVAgPSBAR05VTElCX01CU1BDQVNFQ01QQAorR05VTElCX01CU1JDSFIgPSBAR05VTElCX01CU1JDSFJACitHTlVMSUJfTUJTUlRPV0NTID0gQEdOVUxJQl9NQlNSVE9XQ1NACitHTlVMSUJfTUJTU0VQID0gQEdOVUxJQl9NQlNTRVBACitHTlVMSUJfTUJTU1BOID0gQEdOVUxJQl9NQlNTUE5ACitHTlVMSUJfTUJTU1RSID0gQEdOVUxJQl9NQlNTVFJACitHTlVMSUJfTUJTVE9LX1IgPSBAR05VTElCX01CU1RPS19SQAorR05VTElCX01CVE9XQyA9IEBHTlVMSUJfTUJUT1dDQAorR05VTElCX01FTUNIUiA9IEBHTlVMSUJfTUVNQ0hSQAorR05VTElCX01FTU1FTSA9IEBHTlVMSUJfTUVNTUVNQAorR05VTElCX01FTVBDUFkgPSBAR05VTElCX01FTVBDUFlACitHTlVMSUJfTUVNUkNIUiA9IEBHTlVMSUJfTUVNUkNIUkAKK0dOVUxJQl9NS0RJUkFUID0gQEdOVUxJQl9NS0RJUkFUQAorR05VTElCX01LRFRFTVAgPSBAR05VTElCX01LRFRFTVBACitHTlVMSUJfTUtGSUZPID0gQEdOVUxJQl9NS0ZJRk9ACitHTlVMSUJfTUtGSUZPQVQgPSBAR05VTElCX01LRklGT0FUQAorR05VTElCX01LTk9EID0gQEdOVUxJQl9NS05PREAKK0dOVUxJQl9NS05PREFUID0gQEdOVUxJQl9NS05PREFUQAorR05VTElCX01LT1NURU1QID0gQEdOVUxJQl9NS09TVEVNUEAKK0dOVUxJQl9NS09TVEVNUFMgPSBAR05VTElCX01LT1NURU1QU0AKK0dOVUxJQl9NS1NURU1QID0gQEdOVUxJQl9NS1NURU1QQAorR05VTElCX01LU1RFTVBTID0gQEdOVUxJQl9NS1NURU1QU0AKK0dOVUxJQl9NS1RJTUUgPSBAR05VTElCX01LVElNRUAKK0dOVUxJQl9NT0RGID0gQEdOVUxJQl9NT0RGQAorR05VTElCX01PREZGID0gQEdOVUxJQl9NT0RGRkAKK0dOVUxJQl9NT0RGTCA9IEBHTlVMSUJfTU9ERkxACitHTlVMSUJfTkFOT1NMRUVQID0gQEdOVUxJQl9OQU5PU0xFRVBACitHTlVMSUJfTk9OQkxPQ0tJTkcgPSBAR05VTElCX05PTkJMT0NLSU5HQAorR05VTElCX09CU1RBQ0tfUFJJTlRGID0gQEdOVUxJQl9PQlNUQUNLX1BSSU5URkAKK0dOVUxJQl9PQlNUQUNLX1BSSU5URl9QT1NJWCA9IEBHTlVMSUJfT0JTVEFDS19QUklOVEZfUE9TSVhACitHTlVMSUJfT1BFTiA9IEBHTlVMSUJfT1BFTkAKK0dOVUxJQl9PUEVOQVQgPSBAR05VTElCX09QRU5BVEAKK0dOVUxJQl9QQ0xPU0UgPSBAR05VTElCX1BDTE9TRUAKK0dOVUxJQl9QRVJST1IgPSBAR05VTElCX1BFUlJPUkAKK0dOVUxJQl9QSVBFID0gQEdOVUxJQl9QSVBFQAorR05VTElCX1BJUEUyID0gQEdOVUxJQl9QSVBFMkAKK0dOVUxJQl9QT1BFTiA9IEBHTlVMSUJfUE9QRU5ACitHTlVMSUJfUE9TSVhfT1BFTlBUID0gQEdOVUxJQl9QT1NJWF9PUEVOUFRACitHTlVMSUJfUE9TSVhfU1BBV04gPSBAR05VTElCX1BPU0lYX1NQQVdOQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9ERVNUUk9ZID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfREVTVFJPWUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VURkxBR1MgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRGTEFHU0AKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUUEdST1VQID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUUEdST1VQQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBBUkFNID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0NIRURQQVJBTUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0NIRURQT0xJQ1kgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBPTElDWUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0lHREVGQVVMVCA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNJR0RFRkFVTFRACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNJR01BU0sgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdNQVNLQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9JTklUID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfSU5JVEAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VURkxBR1MgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRGTEFHU0AKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUUEdST1VQID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUUEdST1VQQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTQ0hFRFBBUkFNID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQQVJBTUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQT0xJQ1kgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTQ0hFRFBPTElDWUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0lHREVGQVVMVCA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNJR0RFRkFVTFRACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNJR01BU0sgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTSUdNQVNLQAorR05VTElCX1BPU0lYX1NQQVdOUCA9IEBHTlVMSUJfUE9TSVhfU1BBV05QQAorR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRSA9IEBHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERENMT1NFQAorR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BREREVVAyID0gQEdOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMkAKK0dOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURET1BFTiA9IEBHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU5ACitHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0RFU1RST1kgPSBAR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19ERVNUUk9ZQAorR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19JTklUID0gQEdOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfSU5JVEAKK0dOVUxJQl9QT1dGID0gQEdOVUxJQl9QT1dGQAorR05VTElCX1BSRUFEID0gQEdOVUxJQl9QUkVBREAKK0dOVUxJQl9QUklOVEYgPSBAR05VTElCX1BSSU5URkAKK0dOVUxJQl9QUklOVEZfUE9TSVggPSBAR05VTElCX1BSSU5URl9QT1NJWEAKK0dOVUxJQl9QVEhSRUFEX1NJR01BU0sgPSBAR05VTElCX1BUSFJFQURfU0lHTUFTS0AKK0dOVUxJQl9QVFNOQU1FID0gQEdOVUxJQl9QVFNOQU1FQAorR05VTElCX1BUU05BTUVfUiA9IEBHTlVMSUJfUFRTTkFNRV9SQAorR05VTElCX1BVVEMgPSBAR05VTElCX1BVVENACitHTlVMSUJfUFVUQ0hBUiA9IEBHTlVMSUJfUFVUQ0hBUkAKK0dOVUxJQl9QVVRFTlYgPSBAR05VTElCX1BVVEVOVkAKK0dOVUxJQl9QVVRTID0gQEdOVUxJQl9QVVRTQAorR05VTElCX1BXUklURSA9IEBHTlVMSUJfUFdSSVRFQAorR05VTElCX1JBSVNFID0gQEdOVUxJQl9SQUlTRUAKK0dOVUxJQl9SQU5ET00gPSBAR05VTElCX1JBTkRPTUAKK0dOVUxJQl9SQU5ET01fUiA9IEBHTlVMSUJfUkFORE9NX1JACitHTlVMSUJfUkFXTUVNQ0hSID0gQEdOVUxJQl9SQVdNRU1DSFJACitHTlVMSUJfUkVBRCA9IEBHTlVMSUJfUkVBREAKK0dOVUxJQl9SRUFETElOSyA9IEBHTlVMSUJfUkVBRExJTktACitHTlVMSUJfUkVBRExJTktBVCA9IEBHTlVMSUJfUkVBRExJTktBVEAKK0dOVUxJQl9SRUFMTE9DX1BPU0lYID0gQEdOVUxJQl9SRUFMTE9DX1BPU0lYQAorR05VTElCX1JFQUxQQVRIID0gQEdOVUxJQl9SRUFMUEFUSEAKK0dOVUxJQl9SRU1BSU5ERVIgPSBAR05VTElCX1JFTUFJTkRFUkAKK0dOVUxJQl9SRU1BSU5ERVJGID0gQEdOVUxJQl9SRU1BSU5ERVJGQAorR05VTElCX1JFTUFJTkRFUkwgPSBAR05VTElCX1JFTUFJTkRFUkxACitHTlVMSUJfUkVNT1ZFID0gQEdOVUxJQl9SRU1PVkVACitHTlVMSUJfUkVOQU1FID0gQEdOVUxJQl9SRU5BTUVACitHTlVMSUJfUkVOQU1FQVQgPSBAR05VTElCX1JFTkFNRUFUQAorR05VTElCX1JJTlQgPSBAR05VTElCX1JJTlRACitHTlVMSUJfUklOVEYgPSBAR05VTElCX1JJTlRGQAorR05VTElCX1JJTlRMID0gQEdOVUxJQl9SSU5UTEAKK0dOVUxJQl9STURJUiA9IEBHTlVMSUJfUk1ESVJACitHTlVMSUJfUk9VTkQgPSBAR05VTElCX1JPVU5EQAorR05VTElCX1JPVU5ERiA9IEBHTlVMSUJfUk9VTkRGQAorR05VTElCX1JPVU5ETCA9IEBHTlVMSUJfUk9VTkRMQAorR05VTElCX1JQTUFUQ0ggPSBAR05VTElCX1JQTUFUQ0hACitHTlVMSUJfU0NBTkYgPSBAR05VTElCX1NDQU5GQAorR05VTElCX1NFVEVOViA9IEBHTlVMSUJfU0VURU5WQAorR05VTElCX1NFVEhPU1ROQU1FID0gQEdOVUxJQl9TRVRIT1NUTkFNRUAKK0dOVUxJQl9TSUdBQ1RJT04gPSBAR05VTElCX1NJR0FDVElPTkAKK0dOVUxJQl9TSUdOQUxfSF9TSUdQSVBFID0gQEdOVUxJQl9TSUdOQUxfSF9TSUdQSVBFQAorR05VTElCX1NJR05CSVQgPSBAR05VTElCX1NJR05CSVRACitHTlVMSUJfU0lHUFJPQ01BU0sgPSBAR05VTElCX1NJR1BST0NNQVNLQAorR05VTElCX1NJTkYgPSBAR05VTElCX1NJTkZACitHTlVMSUJfU0lOSEYgPSBAR05VTElCX1NJTkhGQAorR05VTElCX1NJTkwgPSBAR05VTElCX1NJTkxACitHTlVMSUJfU0xFRVAgPSBAR05VTElCX1NMRUVQQAorR05VTElCX1NOUFJJTlRGID0gQEdOVUxJQl9TTlBSSU5URkAKK0dOVUxJQl9TUFJJTlRGX1BPU0lYID0gQEdOVUxJQl9TUFJJTlRGX1BPU0lYQAorR05VTElCX1NRUlRGID0gQEdOVUxJQl9TUVJURkAKK0dOVUxJQl9TUVJUTCA9IEBHTlVMSUJfU1FSVExACitHTlVMSUJfU1RBVCA9IEBHTlVMSUJfU1RBVEAKK0dOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HID0gQEdOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HQAorR05VTElCX1NURElPX0hfU0lHUElQRSA9IEBHTlVMSUJfU1RESU9fSF9TSUdQSVBFQAorR05VTElCX1NUUENQWSA9IEBHTlVMSUJfU1RQQ1BZQAorR05VTElCX1NUUE5DUFkgPSBAR05VTElCX1NUUE5DUFlACitHTlVMSUJfU1RSQ0FTRVNUUiA9IEBHTlVMSUJfU1RSQ0FTRVNUUkAKK0dOVUxJQl9TVFJDSFJOVUwgPSBAR05VTElCX1NUUkNIUk5VTEAKK0dOVUxJQl9TVFJEVVAgPSBAR05VTElCX1NUUkRVUEAKK0dOVUxJQl9TVFJFUlJPUiA9IEBHTlVMSUJfU1RSRVJST1JACitHTlVMSUJfU1RSRVJST1JfUiA9IEBHTlVMSUJfU1RSRVJST1JfUkAKK0dOVUxJQl9TVFJOQ0FUID0gQEdOVUxJQl9TVFJOQ0FUQAorR05VTElCX1NUUk5EVVAgPSBAR05VTElCX1NUUk5EVVBACitHTlVMSUJfU1RSTkxFTiA9IEBHTlVMSUJfU1RSTkxFTkAKK0dOVUxJQl9TVFJQQlJLID0gQEdOVUxJQl9TVFJQQlJLQAorR05VTElCX1NUUlBUSU1FID0gQEdOVUxJQl9TVFJQVElNRUAKK0dOVUxJQl9TVFJTRVAgPSBAR05VTElCX1NUUlNFUEAKK0dOVUxJQl9TVFJTSUdOQUwgPSBAR05VTElCX1NUUlNJR05BTEAKK0dOVUxJQl9TVFJTVFIgPSBAR05VTElCX1NUUlNUUkAKK0dOVUxJQl9TVFJUT0QgPSBAR05VTElCX1NUUlRPREAKK0dOVUxJQl9TVFJUT0lNQVggPSBAR05VTElCX1NUUlRPSU1BWEAKK0dOVUxJQl9TVFJUT0tfUiA9IEBHTlVMSUJfU1RSVE9LX1JACitHTlVMSUJfU1RSVE9MTCA9IEBHTlVMSUJfU1RSVE9MTEAKK0dOVUxJQl9TVFJUT1VMTCA9IEBHTlVMSUJfU1RSVE9VTExACitHTlVMSUJfU1RSVE9VTUFYID0gQEdOVUxJQl9TVFJUT1VNQVhACitHTlVMSUJfU1RSVkVSU0NNUCA9IEBHTlVMSUJfU1RSVkVSU0NNUEAKK0dOVUxJQl9TWU1MSU5LID0gQEdOVUxJQl9TWU1MSU5LQAorR05VTElCX1NZTUxJTktBVCA9IEBHTlVMSUJfU1lNTElOS0FUQAorR05VTElCX1NZU1RFTV9QT1NJWCA9IEBHTlVMSUJfU1lTVEVNX1BPU0lYQAorR05VTElCX1RBTkYgPSBAR05VTElCX1RBTkZACitHTlVMSUJfVEFOSEYgPSBAR05VTElCX1RBTkhGQAorR05VTElCX1RBTkwgPSBAR05VTElCX1RBTkxACitHTlVMSUJfVElNRUdNID0gQEdOVUxJQl9USU1FR01ACitHTlVMSUJfVElNRV9SID0gQEdOVUxJQl9USU1FX1JACitHTlVMSUJfVE1QRklMRSA9IEBHTlVMSUJfVE1QRklMRUAKK0dOVUxJQl9UT1dDVFJBTlMgPSBAR05VTElCX1RPV0NUUkFOU0AKK0dOVUxJQl9UUlVOQyA9IEBHTlVMSUJfVFJVTkNACitHTlVMSUJfVFJVTkNGID0gQEdOVUxJQl9UUlVOQ0ZACitHTlVMSUJfVFJVTkNMID0gQEdOVUxJQl9UUlVOQ0xACitHTlVMSUJfVFRZTkFNRV9SID0gQEdOVUxJQl9UVFlOQU1FX1JACitHTlVMSUJfVU5JU1REX0hfTk9OQkxPQ0tJTkcgPSBAR05VTElCX1VOSVNURF9IX05PTkJMT0NLSU5HQAorR05VTElCX1VOSVNURF9IX1NJR1BJUEUgPSBAR05VTElCX1VOSVNURF9IX1NJR1BJUEVACitHTlVMSUJfVU5MSU5LID0gQEdOVUxJQl9VTkxJTktACitHTlVMSUJfVU5MSU5LQVQgPSBAR05VTElCX1VOTElOS0FUQAorR05VTElCX1VOTE9DS1BUID0gQEdOVUxJQl9VTkxPQ0tQVEAKK0dOVUxJQl9VTlNFVEVOViA9IEBHTlVMSUJfVU5TRVRFTlZACitHTlVMSUJfVVNMRUVQID0gQEdOVUxJQl9VU0xFRVBACitHTlVMSUJfVVRJTUVOU0FUID0gQEdOVUxJQl9VVElNRU5TQVRACitHTlVMSUJfVkFTUFJJTlRGID0gQEdOVUxJQl9WQVNQUklOVEZACitHTlVMSUJfVkRQUklOVEYgPSBAR05VTElCX1ZEUFJJTlRGQAorR05VTElCX1ZGUFJJTlRGID0gQEdOVUxJQl9WRlBSSU5URkAKK0dOVUxJQl9WRlBSSU5URl9QT1NJWCA9IEBHTlVMSUJfVkZQUklOVEZfUE9TSVhACitHTlVMSUJfVkZTQ0FORiA9IEBHTlVMSUJfVkZTQ0FORkAKK0dOVUxJQl9WUFJJTlRGID0gQEdOVUxJQl9WUFJJTlRGQAorR05VTElCX1ZQUklOVEZfUE9TSVggPSBAR05VTElCX1ZQUklOVEZfUE9TSVhACitHTlVMSUJfVlNDQU5GID0gQEdOVUxJQl9WU0NBTkZACitHTlVMSUJfVlNOUFJJTlRGID0gQEdOVUxJQl9WU05QUklOVEZACitHTlVMSUJfVlNQUklOVEZfUE9TSVggPSBAR05VTElCX1ZTUFJJTlRGX1BPU0lYQAorR05VTElCX1dBSVRQSUQgPSBAR05VTElCX1dBSVRQSURACitHTlVMSUJfV0NQQ1BZID0gQEdOVUxJQl9XQ1BDUFlACitHTlVMSUJfV0NQTkNQWSA9IEBHTlVMSUJfV0NQTkNQWUAKK0dOVUxJQl9XQ1JUT01CID0gQEdOVUxJQl9XQ1JUT01CQAorR05VTElCX1dDU0NBU0VDTVAgPSBAR05VTElCX1dDU0NBU0VDTVBACitHTlVMSUJfV0NTQ0FUID0gQEdOVUxJQl9XQ1NDQVRACitHTlVMSUJfV0NTQ0hSID0gQEdOVUxJQl9XQ1NDSFJACitHTlVMSUJfV0NTQ01QID0gQEdOVUxJQl9XQ1NDTVBACitHTlVMSUJfV0NTQ09MTCA9IEBHTlVMSUJfV0NTQ09MTEAKK0dOVUxJQl9XQ1NDUFkgPSBAR05VTElCX1dDU0NQWUAKK0dOVUxJQl9XQ1NDU1BOID0gQEdOVUxJQl9XQ1NDU1BOQAorR05VTElCX1dDU0RVUCA9IEBHTlVMSUJfV0NTRFVQQAorR05VTElCX1dDU0xFTiA9IEBHTlVMSUJfV0NTTEVOQAorR05VTElCX1dDU05DQVNFQ01QID0gQEdOVUxJQl9XQ1NOQ0FTRUNNUEAKK0dOVUxJQl9XQ1NOQ0FUID0gQEdOVUxJQl9XQ1NOQ0FUQAorR05VTElCX1dDU05DTVAgPSBAR05VTElCX1dDU05DTVBACitHTlVMSUJfV0NTTkNQWSA9IEBHTlVMSUJfV0NTTkNQWUAKK0dOVUxJQl9XQ1NOTEVOID0gQEdOVUxJQl9XQ1NOTEVOQAorR05VTElCX1dDU05SVE9NQlMgPSBAR05VTElCX1dDU05SVE9NQlNACitHTlVMSUJfV0NTUEJSSyA9IEBHTlVMSUJfV0NTUEJSS0AKK0dOVUxJQl9XQ1NSQ0hSID0gQEdOVUxJQl9XQ1NSQ0hSQAorR05VTElCX1dDU1JUT01CUyA9IEBHTlVMSUJfV0NTUlRPTUJTQAorR05VTElCX1dDU1NQTiA9IEBHTlVMSUJfV0NTU1BOQAorR05VTElCX1dDU1NUUiA9IEBHTlVMSUJfV0NTU1RSQAorR05VTElCX1dDU1RPSyA9IEBHTlVMSUJfV0NTVE9LQAorR05VTElCX1dDU1dJRFRIID0gQEdOVUxJQl9XQ1NXSURUSEAKK0dOVUxJQl9XQ1NYRlJNID0gQEdOVUxJQl9XQ1NYRlJNQAorR05VTElCX1dDVE9CID0gQEdOVUxJQl9XQ1RPQkAKK0dOVUxJQl9XQ1RPTUIgPSBAR05VTElCX1dDVE9NQkAKK0dOVUxJQl9XQ1RSQU5TID0gQEdOVUxJQl9XQ1RSQU5TQAorR05VTElCX1dDVFlQRSA9IEBHTlVMSUJfV0NUWVBFQAorR05VTElCX1dDV0lEVEggPSBAR05VTElCX1dDV0lEVEhACitHTlVMSUJfV01FTUNIUiA9IEBHTlVMSUJfV01FTUNIUkAKK0dOVUxJQl9XTUVNQ01QID0gQEdOVUxJQl9XTUVNQ01QQAorR05VTElCX1dNRU1DUFkgPSBAR05VTElCX1dNRU1DUFlACitHTlVMSUJfV01FTU1PVkUgPSBAR05VTElCX1dNRU1NT1ZFQAorR05VTElCX1dNRU1TRVQgPSBAR05VTElCX1dNRU1TRVRACitHTlVMSUJfV1JJVEUgPSBAR05VTElCX1dSSVRFQAorR05VTElCX19FWElUID0gQEdOVUxJQl9fRVhJVEAKK0dSRVAgPSBAR1JFUEAKK0hBVkVfQUNPU0YgPSBASEFWRV9BQ09TRkAKK0hBVkVfQUNPU0wgPSBASEFWRV9BQ09TTEAKK0hBVkVfQVNJTkYgPSBASEFWRV9BU0lORkAKK0hBVkVfQVNJTkwgPSBASEFWRV9BU0lOTEAKK0hBVkVfQVRBTjJGID0gQEhBVkVfQVRBTjJGQAorSEFWRV9BVEFORiA9IEBIQVZFX0FUQU5GQAorSEFWRV9BVEFOTCA9IEBIQVZFX0FUQU5MQAorSEFWRV9BVE9MTCA9IEBIQVZFX0FUT0xMQAorSEFWRV9CVE9XQyA9IEBIQVZFX0JUT1dDQAorSEFWRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FID0gQEhBVkVfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRUAKK0hBVkVfQ0JSVCA9IEBIQVZFX0NCUlRACitIQVZFX0NCUlRGID0gQEhBVkVfQ0JSVEZACitIQVZFX0NCUlRMID0gQEhBVkVfQ0JSVExACitIQVZFX0NIT1dOID0gQEhBVkVfQ0hPV05ACitIQVZFX0NPUFlTSUdOID0gQEhBVkVfQ09QWVNJR05ACitIQVZFX0NPUFlTSUdOTCA9IEBIQVZFX0NPUFlTSUdOTEAKK0hBVkVfQ09TRiA9IEBIQVZFX0NPU0ZACitIQVZFX0NPU0hGID0gQEhBVkVfQ09TSEZACitIQVZFX0NPU0wgPSBASEFWRV9DT1NMQAorSEFWRV9ERUNMX0FDT1NMID0gQEhBVkVfREVDTF9BQ09TTEAKK0hBVkVfREVDTF9BU0lOTCA9IEBIQVZFX0RFQ0xfQVNJTkxACitIQVZFX0RFQ0xfQVRBTkwgPSBASEFWRV9ERUNMX0FUQU5MQAorSEFWRV9ERUNMX0NCUlRGID0gQEhBVkVfREVDTF9DQlJURkAKK0hBVkVfREVDTF9DQlJUTCA9IEBIQVZFX0RFQ0xfQ0JSVExACitIQVZFX0RFQ0xfQ0VJTEYgPSBASEFWRV9ERUNMX0NFSUxGQAorSEFWRV9ERUNMX0NFSUxMID0gQEhBVkVfREVDTF9DRUlMTEAKK0hBVkVfREVDTF9DT1BZU0lHTkYgPSBASEFWRV9ERUNMX0NPUFlTSUdORkAKK0hBVkVfREVDTF9DT1NMID0gQEhBVkVfREVDTF9DT1NMQAorSEFWRV9ERUNMX0VOVklST04gPSBASEFWRV9ERUNMX0VOVklST05ACitIQVZFX0RFQ0xfRVhQMiA9IEBIQVZFX0RFQ0xfRVhQMkAKK0hBVkVfREVDTF9FWFAyRiA9IEBIQVZFX0RFQ0xfRVhQMkZACitIQVZFX0RFQ0xfRVhQMkwgPSBASEFWRV9ERUNMX0VYUDJMQAorSEFWRV9ERUNMX0VYUEwgPSBASEFWRV9ERUNMX0VYUExACitIQVZFX0RFQ0xfRVhQTTFMID0gQEhBVkVfREVDTF9FWFBNMUxACitIQVZFX0RFQ0xfRkNIRElSID0gQEhBVkVfREVDTF9GQ0hESVJACitIQVZFX0RFQ0xfRkRBVEFTWU5DID0gQEhBVkVfREVDTF9GREFUQVNZTkNACitIQVZFX0RFQ0xfRkxPT1JGID0gQEhBVkVfREVDTF9GTE9PUkZACitIQVZFX0RFQ0xfRkxPT1JMID0gQEhBVkVfREVDTF9GTE9PUkxACitIQVZFX0RFQ0xfRlBVUkdFID0gQEhBVkVfREVDTF9GUFVSR0VACitIQVZFX0RFQ0xfRlJFWFBMID0gQEhBVkVfREVDTF9GUkVYUExACitIQVZFX0RFQ0xfRlNFRUtPID0gQEhBVkVfREVDTF9GU0VFS09ACitIQVZFX0RFQ0xfRlRFTExPID0gQEhBVkVfREVDTF9GVEVMTE9ACitIQVZFX0RFQ0xfR0VUREVMSU0gPSBASEFWRV9ERUNMX0dFVERFTElNQAorSEFWRV9ERUNMX0dFVERPTUFJTk5BTUUgPSBASEFWRV9ERUNMX0dFVERPTUFJTk5BTUVACitIQVZFX0RFQ0xfR0VUTElORSA9IEBIQVZFX0RFQ0xfR0VUTElORUAKK0hBVkVfREVDTF9HRVRMT0FEQVZHID0gQEhBVkVfREVDTF9HRVRMT0FEQVZHQAorSEFWRV9ERUNMX0dFVExPR0lOX1IgPSBASEFWRV9ERUNMX0dFVExPR0lOX1JACitIQVZFX0RFQ0xfR0VUUEFHRVNJWkUgPSBASEFWRV9ERUNMX0dFVFBBR0VTSVpFQAorSEFWRV9ERUNMX0dFVFVTRVJTSEVMTCA9IEBIQVZFX0RFQ0xfR0VUVVNFUlNIRUxMQAorSEFWRV9ERUNMX0lNQVhBQlMgPSBASEFWRV9ERUNMX0lNQVhBQlNACitIQVZFX0RFQ0xfSU1BWERJViA9IEBIQVZFX0RFQ0xfSU1BWERJVkAKK0hBVkVfREVDTF9MREVYUEwgPSBASEFWRV9ERUNMX0xERVhQTEAKK0hBVkVfREVDTF9MT0NBTFRJTUVfUiA9IEBIQVZFX0RFQ0xfTE9DQUxUSU1FX1JACitIQVZFX0RFQ0xfTE9HMTBMID0gQEhBVkVfREVDTF9MT0cxMExACitIQVZFX0RFQ0xfTE9HMiA9IEBIQVZFX0RFQ0xfTE9HMkAKK0hBVkVfREVDTF9MT0cyRiA9IEBIQVZFX0RFQ0xfTE9HMkZACitIQVZFX0RFQ0xfTE9HMkwgPSBASEFWRV9ERUNMX0xPRzJMQAorSEFWRV9ERUNMX0xPR0IgPSBASEFWRV9ERUNMX0xPR0JACitIQVZFX0RFQ0xfTE9HTCA9IEBIQVZFX0RFQ0xfTE9HTEAKK0hBVkVfREVDTF9NRU1NRU0gPSBASEFWRV9ERUNMX01FTU1FTUAKK0hBVkVfREVDTF9NRU1SQ0hSID0gQEhBVkVfREVDTF9NRU1SQ0hSQAorSEFWRV9ERUNMX09CU1RBQ0tfUFJJTlRGID0gQEhBVkVfREVDTF9PQlNUQUNLX1BSSU5URkAKK0hBVkVfREVDTF9SRU1BSU5ERVIgPSBASEFWRV9ERUNMX1JFTUFJTkRFUkAKK0hBVkVfREVDTF9SRU1BSU5ERVJMID0gQEhBVkVfREVDTF9SRU1BSU5ERVJMQAorSEFWRV9ERUNMX1JJTlRGID0gQEhBVkVfREVDTF9SSU5URkAKK0hBVkVfREVDTF9ST1VORCA9IEBIQVZFX0RFQ0xfUk9VTkRACitIQVZFX0RFQ0xfUk9VTkRGID0gQEhBVkVfREVDTF9ST1VOREZACitIQVZFX0RFQ0xfUk9VTkRMID0gQEhBVkVfREVDTF9ST1VORExACitIQVZFX0RFQ0xfU0VURU5WID0gQEhBVkVfREVDTF9TRVRFTlZACitIQVZFX0RFQ0xfU0VUSE9TVE5BTUUgPSBASEFWRV9ERUNMX1NFVEhPU1ROQU1FQAorSEFWRV9ERUNMX1NJTkwgPSBASEFWRV9ERUNMX1NJTkxACitIQVZFX0RFQ0xfU05QUklOVEYgPSBASEFWRV9ERUNMX1NOUFJJTlRGQAorSEFWRV9ERUNMX1NRUlRMID0gQEhBVkVfREVDTF9TUVJUTEAKK0hBVkVfREVDTF9TVFJEVVAgPSBASEFWRV9ERUNMX1NUUkRVUEAKK0hBVkVfREVDTF9TVFJFUlJPUl9SID0gQEhBVkVfREVDTF9TVFJFUlJPUl9SQAorSEFWRV9ERUNMX1NUUk5EVVAgPSBASEFWRV9ERUNMX1NUUk5EVVBACitIQVZFX0RFQ0xfU1RSTkxFTiA9IEBIQVZFX0RFQ0xfU1RSTkxFTkAKK0hBVkVfREVDTF9TVFJTSUdOQUwgPSBASEFWRV9ERUNMX1NUUlNJR05BTEAKK0hBVkVfREVDTF9TVFJUT0lNQVggPSBASEFWRV9ERUNMX1NUUlRPSU1BWEAKK0hBVkVfREVDTF9TVFJUT0tfUiA9IEBIQVZFX0RFQ0xfU1RSVE9LX1JACitIQVZFX0RFQ0xfU1RSVE9VTUFYID0gQEhBVkVfREVDTF9TVFJUT1VNQVhACitIQVZFX0RFQ0xfVEFOTCA9IEBIQVZFX0RFQ0xfVEFOTEAKK0hBVkVfREVDTF9UUlVOQyA9IEBIQVZFX0RFQ0xfVFJVTkNACitIQVZFX0RFQ0xfVFJVTkNGID0gQEhBVkVfREVDTF9UUlVOQ0ZACitIQVZFX0RFQ0xfVFJVTkNMID0gQEhBVkVfREVDTF9UUlVOQ0xACitIQVZFX0RFQ0xfVFRZTkFNRV9SID0gQEhBVkVfREVDTF9UVFlOQU1FX1JACitIQVZFX0RFQ0xfVU5TRVRFTlYgPSBASEFWRV9ERUNMX1VOU0VURU5WQAorSEFWRV9ERUNMX1ZTTlBSSU5URiA9IEBIQVZFX0RFQ0xfVlNOUFJJTlRGQAorSEFWRV9ERUNMX1dDVE9CID0gQEhBVkVfREVDTF9XQ1RPQkAKK0hBVkVfREVDTF9XQ1dJRFRIID0gQEhBVkVfREVDTF9XQ1dJRFRIQAorSEFWRV9EUFJJTlRGID0gQEhBVkVfRFBSSU5URkAKK0hBVkVfRFVQMiA9IEBIQVZFX0RVUDJACitIQVZFX0RVUDMgPSBASEFWRV9EVVAzQAorSEFWRV9FVUlEQUNDRVNTID0gQEhBVkVfRVVJREFDQ0VTU0AKK0hBVkVfRVhQRiA9IEBIQVZFX0VYUEZACitIQVZFX0VYUEwgPSBASEFWRV9FWFBMQAorSEFWRV9FWFBNMSA9IEBIQVZFX0VYUE0xQAorSEFWRV9FWFBNMUYgPSBASEFWRV9FWFBNMUZACitIQVZFX0ZBQlNGID0gQEhBVkVfRkFCU0ZACitIQVZFX0ZBQlNMID0gQEhBVkVfRkFCU0xACitIQVZFX0ZBQ0NFU1NBVCA9IEBIQVZFX0ZBQ0NFU1NBVEAKK0hBVkVfRkNIRElSID0gQEhBVkVfRkNIRElSQAorSEFWRV9GQ0hNT0RBVCA9IEBIQVZFX0ZDSE1PREFUQAorSEFWRV9GQ0hPV05BVCA9IEBIQVZFX0ZDSE9XTkFUQAorSEFWRV9GQ05UTCA9IEBIQVZFX0ZDTlRMQAorSEFWRV9GREFUQVNZTkMgPSBASEFWRV9GREFUQVNZTkNACitIQVZFX0ZFQVRVUkVTX0ggPSBASEFWRV9GRUFUVVJFU19IQAorSEFWRV9GRlNMID0gQEhBVkVfRkZTTEAKK0hBVkVfRkZTTEwgPSBASEFWRV9GRlNMTEAKK0hBVkVfRk1BID0gQEhBVkVfRk1BQAorSEFWRV9GTUFGID0gQEhBVkVfRk1BRkAKK0hBVkVfRk1BTCA9IEBIQVZFX0ZNQUxACitIQVZFX0ZNT0RGID0gQEhBVkVfRk1PREZACitIQVZFX0ZNT0RMID0gQEhBVkVfRk1PRExACitIQVZFX0ZSRVhQRiA9IEBIQVZFX0ZSRVhQRkAKK0hBVkVfRlNFRUtPID0gQEhBVkVfRlNFRUtPQAorSEFWRV9GU1RBVEFUID0gQEhBVkVfRlNUQVRBVEAKK0hBVkVfRlNZTkMgPSBASEFWRV9GU1lOQ0AKK0hBVkVfRlRFTExPID0gQEhBVkVfRlRFTExPQAorSEFWRV9GVFJVTkNBVEUgPSBASEFWRV9GVFJVTkNBVEVACitIQVZFX0ZVVElNRU5TID0gQEhBVkVfRlVUSU1FTlNACitIQVZFX0dDSl9DID0gQEhBVkVfR0NKX0NACitIQVZFX0dDSl9JTl9QQVRIID0gQEhBVkVfR0NKX0lOX1BBVEhACitIQVZFX0dFVERUQUJMRVNJWkUgPSBASEFWRV9HRVREVEFCTEVTSVpFQAorSEFWRV9HRVRHUk9VUFMgPSBASEFWRV9HRVRHUk9VUFNACitIQVZFX0dFVEhPU1ROQU1FID0gQEhBVkVfR0VUSE9TVE5BTUVACitIQVZFX0dFVExPR0lOID0gQEhBVkVfR0VUTE9HSU5ACitIQVZFX0dFVE9QVF9IID0gQEhBVkVfR0VUT1BUX0hACitIQVZFX0dFVFBBR0VTSVpFID0gQEhBVkVfR0VUUEFHRVNJWkVACitIQVZFX0dFVFNVQk9QVCA9IEBIQVZFX0dFVFNVQk9QVEAKK0hBVkVfR0lKID0gQEhBVkVfR0lKQAorSEFWRV9HSUpfSU5fUEFUSCA9IEBIQVZFX0dJSl9JTl9QQVRIQAorSEFWRV9HUkFOVFBUID0gQEhBVkVfR1JBTlRQVEAKK0hBVkVfR1JPVVBfTUVNQkVSID0gQEhBVkVfR1JPVVBfTUVNQkVSQAorSEFWRV9IWVBPVEYgPSBASEFWRV9IWVBPVEZACitIQVZFX0hZUE9UTCA9IEBIQVZFX0hZUE9UTEAKK0hBVkVfSUxPR0IgPSBASEFWRV9JTE9HQkAKK0hBVkVfSUxPR0JGID0gQEhBVkVfSUxPR0JGQAorSEFWRV9JTE9HQkwgPSBASEFWRV9JTE9HQkxACitIQVZFX0lOVFRZUEVTX0ggPSBASEFWRV9JTlRUWVBFU19IQAorSEFWRV9JU05BTkQgPSBASEFWRV9JU05BTkRACitIQVZFX0lTTkFORiA9IEBIQVZFX0lTTkFORkAKK0hBVkVfSVNOQU5MID0gQEhBVkVfSVNOQU5MQAorSEFWRV9JU1dCTEFOSyA9IEBIQVZFX0lTV0JMQU5LQAorSEFWRV9JU1dDTlRSTCA9IEBIQVZFX0lTV0NOVFJMQAorSEFWRV9KQVZBID0gQEhBVkVfSkFWQUAKK0hBVkVfSkFWQUMgPSBASEFWRV9KQVZBQ0AKK0hBVkVfSkFWQUNfRU5WVkFSID0gQEhBVkVfSkFWQUNfRU5WVkFSQAorSEFWRV9KQVZBQ19JTl9QQVRIID0gQEhBVkVfSkFWQUNfSU5fUEFUSEAKK0hBVkVfSkFWQV9FTlZWQVIgPSBASEFWRV9KQVZBX0VOVlZBUkAKK0hBVkVfSkFWQV9JTl9QQVRIID0gQEhBVkVfSkFWQV9JTl9QQVRIQAorSEFWRV9KSUtFUyA9IEBIQVZFX0pJS0VTQAorSEFWRV9KSUtFU19JTl9QQVRIID0gQEhBVkVfSklLRVNfSU5fUEFUSEAKK0hBVkVfSlJFID0gQEhBVkVfSlJFQAorSEFWRV9KUkVfSU5fUEFUSCA9IEBIQVZFX0pSRV9JTl9QQVRIQAorSEFWRV9KVklFVyA9IEBIQVZFX0pWSUVXQAorSEFWRV9KVklFV19JTl9QQVRIID0gQEhBVkVfSlZJRVdfSU5fUEFUSEAKK0hBVkVfTENITU9EID0gQEhBVkVfTENITU9EQAorSEFWRV9MQ0hPV04gPSBASEFWRV9MQ0hPV05ACitIQVZFX0xERVhQRiA9IEBIQVZFX0xERVhQRkAKK0hBVkVfTElOSyA9IEBIQVZFX0xJTktACitIQVZFX0xJTktBVCA9IEBIQVZFX0xJTktBVEAKK0hBVkVfTE9HMTBGID0gQEhBVkVfTE9HMTBGQAorSEFWRV9MT0cxMEwgPSBASEFWRV9MT0cxMExACitIQVZFX0xPRzFQID0gQEhBVkVfTE9HMVBACitIQVZFX0xPRzFQRiA9IEBIQVZFX0xPRzFQRkAKK0hBVkVfTE9HMVBMID0gQEhBVkVfTE9HMVBMQAorSEFWRV9MT0dCRiA9IEBIQVZFX0xPR0JGQAorSEFWRV9MT0dCTCA9IEBIQVZFX0xPR0JMQAorSEFWRV9MT0dGID0gQEhBVkVfTE9HRkAKK0hBVkVfTE9HTCA9IEBIQVZFX0xPR0xACitIQVZFX0xPTkdfTE9OR19JTlQgPSBASEFWRV9MT05HX0xPTkdfSU5UQAorSEFWRV9MU1RBVCA9IEBIQVZFX0xTVEFUQAorSEFWRV9NQlJMRU4gPSBASEFWRV9NQlJMRU5ACitIQVZFX01CUlRPV0MgPSBASEFWRV9NQlJUT1dDQAorSEFWRV9NQlNJTklUID0gQEhBVkVfTUJTSU5JVEAKK0hBVkVfTUJTTEVOID0gQEhBVkVfTUJTTEVOQAorSEFWRV9NQlNOUlRPV0NTID0gQEhBVkVfTUJTTlJUT1dDU0AKK0hBVkVfTUJTUlRPV0NTID0gQEhBVkVfTUJTUlRPV0NTQAorSEFWRV9NRU1DSFIgPSBASEFWRV9NRU1DSFJACitIQVZFX01FTVBDUFkgPSBASEFWRV9NRU1QQ1BZQAorSEFWRV9NS0RJUkFUID0gQEhBVkVfTUtESVJBVEAKK0hBVkVfTUtEVEVNUCA9IEBIQVZFX01LRFRFTVBACitIQVZFX01LRklGTyA9IEBIQVZFX01LRklGT0AKK0hBVkVfTUtGSUZPQVQgPSBASEFWRV9NS0ZJRk9BVEAKK0hBVkVfTUtOT0QgPSBASEFWRV9NS05PREAKK0hBVkVfTUtOT0RBVCA9IEBIQVZFX01LTk9EQVRACitIQVZFX01LT1NURU1QID0gQEhBVkVfTUtPU1RFTVBACitIQVZFX01LT1NURU1QUyA9IEBIQVZFX01LT1NURU1QU0AKK0hBVkVfTUtTVEVNUCA9IEBIQVZFX01LU1RFTVBACitIQVZFX01LU1RFTVBTID0gQEhBVkVfTUtTVEVNUFNACitIQVZFX01PREZGID0gQEhBVkVfTU9ERkZACitIQVZFX01PREZMID0gQEhBVkVfTU9ERkxACitIQVZFX01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUiA9IEBIQVZFX01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUkAKK0hBVkVfTkFOT1NMRUVQID0gQEhBVkVfTkFOT1NMRUVQQAorSEFWRV9PUEVOQVQgPSBASEFWRV9PUEVOQVRACitIQVZFX09TX0ggPSBASEFWRV9PU19IQAorSEFWRV9QQ0xPU0UgPSBASEFWRV9QQ0xPU0VACitIQVZFX1BJUEUgPSBASEFWRV9QSVBFQAorSEFWRV9QSVBFMiA9IEBIQVZFX1BJUEUyQAorSEFWRV9QT1BFTiA9IEBIQVZFX1BPUEVOQAorSEFWRV9QT1NJWF9PUEVOUFQgPSBASEFWRV9QT1NJWF9PUEVOUFRACitIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HID0gQEhBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkdACitIQVZFX1BPU0lYX1NQQVdOID0gQEhBVkVfUE9TSVhfU1BBV05ACitIQVZFX1BPU0lYX1NQQVdOQVRUUl9UID0gQEhBVkVfUE9TSVhfU1BBV05BVFRSX1RACitIQVZFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19UID0gQEhBVkVfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX1RACitIQVZFX1BPV0YgPSBASEFWRV9QT1dGQAorSEFWRV9QUkVBRCA9IEBIQVZFX1BSRUFEQAorSEFWRV9QVEhSRUFEX1NJR01BU0sgPSBASEFWRV9QVEhSRUFEX1NJR01BU0tACitIQVZFX1BUU05BTUUgPSBASEFWRV9QVFNOQU1FQAorSEFWRV9QVFNOQU1FX1IgPSBASEFWRV9QVFNOQU1FX1JACitIQVZFX1BXUklURSA9IEBIQVZFX1BXUklURUAKK0hBVkVfUkFJU0UgPSBASEFWRV9SQUlTRUAKK0hBVkVfUkFORE9NID0gQEhBVkVfUkFORE9NQAorSEFWRV9SQU5ET01fSCA9IEBIQVZFX1JBTkRPTV9IQAorSEFWRV9SQU5ET01fUiA9IEBIQVZFX1JBTkRPTV9SQAorSEFWRV9SQVdNRU1DSFIgPSBASEFWRV9SQVdNRU1DSFJACitIQVZFX1JFQURMSU5LID0gQEhBVkVfUkVBRExJTktACitIQVZFX1JFQURMSU5LQVQgPSBASEFWRV9SRUFETElOS0FUQAorSEFWRV9SRUFMUEFUSCA9IEBIQVZFX1JFQUxQQVRIQAorSEFWRV9SRU1BSU5ERVIgPSBASEFWRV9SRU1BSU5ERVJACitIQVZFX1JFTUFJTkRFUkYgPSBASEFWRV9SRU1BSU5ERVJGQAorSEFWRV9SRU5BTUVBVCA9IEBIQVZFX1JFTkFNRUFUQAorSEFWRV9SSU5UID0gQEhBVkVfUklOVEAKK0hBVkVfUklOVEwgPSBASEFWRV9SSU5UTEAKK0hBVkVfUlBNQVRDSCA9IEBIQVZFX1JQTUFUQ0hACitIQVZFX1NBTUVfTE9OR19ET1VCTEVfQVNfRE9VQkxFID0gQEhBVkVfU0FNRV9MT05HX0RPVUJMRV9BU19ET1VCTEVACitIQVZFX1NDSEVEX0ggPSBASEFWRV9TQ0hFRF9IQAorSEFWRV9TRVRFTlYgPSBASEFWRV9TRVRFTlZACitIQVZFX1NFVEhPU1ROQU1FID0gQEhBVkVfU0VUSE9TVE5BTUVACitIQVZFX1NJR0FDVElPTiA9IEBIQVZFX1NJR0FDVElPTkAKK0hBVkVfU0lHSEFORExFUl9UID0gQEhBVkVfU0lHSEFORExFUl9UQAorSEFWRV9TSUdJTkZPX1QgPSBASEFWRV9TSUdJTkZPX1RACitIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1QgPSBASEFWRV9TSUdORURfU0lHX0FUT01JQ19UQAorSEFWRV9TSUdORURfV0NIQVJfVCA9IEBIQVZFX1NJR05FRF9XQ0hBUl9UQAorSEFWRV9TSUdORURfV0lOVF9UID0gQEhBVkVfU0lHTkVEX1dJTlRfVEAKK0hBVkVfU0lHU0VUX1QgPSBASEFWRV9TSUdTRVRfVEAKK0hBVkVfU0lORiA9IEBIQVZFX1NJTkZACitIQVZFX1NJTkhGID0gQEhBVkVfU0lOSEZACitIQVZFX1NJTkwgPSBASEFWRV9TSU5MQAorSEFWRV9TTEVFUCA9IEBIQVZFX1NMRUVQQAorSEFWRV9TUEFXTl9IID0gQEhBVkVfU1BBV05fSEAKK0hBVkVfU1FSVEYgPSBASEFWRV9TUVJURkAKK0hBVkVfU1FSVEwgPSBASEFWRV9TUVJUTEAKK0hBVkVfU1RESU5UX0ggPSBASEFWRV9TVERJTlRfSEAKK0hBVkVfU1RQQ1BZID0gQEhBVkVfU1RQQ1BZQAorSEFWRV9TVFBOQ1BZID0gQEhBVkVfU1RQTkNQWUAKK0hBVkVfU1RSQ0FTRVNUUiA9IEBIQVZFX1NUUkNBU0VTVFJACitIQVZFX1NUUkNIUk5VTCA9IEBIQVZFX1NUUkNIUk5VTEAKK0hBVkVfU1RSUEJSSyA9IEBIQVZFX1NUUlBCUktACitIQVZFX1NUUlBUSU1FID0gQEhBVkVfU1RSUFRJTUVACitIQVZFX1NUUlNFUCA9IEBIQVZFX1NUUlNFUEAKK0hBVkVfU1RSVE9EID0gQEhBVkVfU1RSVE9EQAorSEFWRV9TVFJUT0xMID0gQEhBVkVfU1RSVE9MTEAKK0hBVkVfU1RSVE9VTEwgPSBASEFWRV9TVFJUT1VMTEAKK0hBVkVfU1RSVUNUX1JBTkRPTV9EQVRBID0gQEhBVkVfU1RSVUNUX1JBTkRPTV9EQVRBQAorSEFWRV9TVFJVQ1RfU0NIRURfUEFSQU0gPSBASEFWRV9TVFJVQ1RfU0NIRURfUEFSQU1ACitIQVZFX1NUUlVDVF9TSUdBQ1RJT05fU0FfU0lHQUNUSU9OID0gQEhBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT05ACitIQVZFX1NUUlZFUlNDTVAgPSBASEFWRV9TVFJWRVJTQ01QQAorSEFWRV9TWU1MSU5LID0gQEhBVkVfU1lNTElOS0AKK0hBVkVfU1lNTElOS0FUID0gQEhBVkVfU1lNTElOS0FUQAorSEFWRV9TWVNfQklUWVBFU19IID0gQEhBVkVfU1lTX0JJVFlQRVNfSEAKK0hBVkVfU1lTX0lOVFRZUEVTX0ggPSBASEFWRV9TWVNfSU5UVFlQRVNfSEAKK0hBVkVfU1lTX0xPQURBVkdfSCA9IEBIQVZFX1NZU19MT0FEQVZHX0hACitIQVZFX1NZU19QQVJBTV9IID0gQEhBVkVfU1lTX1BBUkFNX0hACitIQVZFX1NZU19UWVBFU19IID0gQEhBVkVfU1lTX1RZUEVTX0hACitIQVZFX1RBTkYgPSBASEFWRV9UQU5GQAorSEFWRV9UQU5IRiA9IEBIQVZFX1RBTkhGQAorSEFWRV9UQU5MID0gQEhBVkVfVEFOTEAKK0hBVkVfVElNRUdNID0gQEhBVkVfVElNRUdNQAorSEFWRV9UWVBFX1ZPTEFUSUxFX1NJR19BVE9NSUNfVCA9IEBIQVZFX1RZUEVfVk9MQVRJTEVfU0lHX0FUT01JQ19UQAorSEFWRV9VTklTVERfSCA9IEBIQVZFX1VOSVNURF9IQAorSEFWRV9VTkxJTktBVCA9IEBIQVZFX1VOTElOS0FUQAorSEFWRV9VTkxPQ0tQVCA9IEBIQVZFX1VOTE9DS1BUQAorSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UID0gQEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVEAKK0hBVkVfVVNMRUVQID0gQEhBVkVfVVNMRUVQQAorSEFWRV9VVElNRU5TQVQgPSBASEFWRV9VVElNRU5TQVRACitIQVZFX1ZBU1BSSU5URiA9IEBIQVZFX1ZBU1BSSU5URkAKK0hBVkVfVkRQUklOVEYgPSBASEFWRV9WRFBSSU5URkAKK0hBVkVfV0NIQVJfSCA9IEBIQVZFX1dDSEFSX0hACitIQVZFX1dDSEFSX1QgPSBASEFWRV9XQ0hBUl9UQAorSEFWRV9XQ1BDUFkgPSBASEFWRV9XQ1BDUFlACitIQVZFX1dDUE5DUFkgPSBASEFWRV9XQ1BOQ1BZQAorSEFWRV9XQ1JUT01CID0gQEhBVkVfV0NSVE9NQkAKK0hBVkVfV0NTQ0FTRUNNUCA9IEBIQVZFX1dDU0NBU0VDTVBACitIQVZFX1dDU0NBVCA9IEBIQVZFX1dDU0NBVEAKK0hBVkVfV0NTQ0hSID0gQEhBVkVfV0NTQ0hSQAorSEFWRV9XQ1NDTVAgPSBASEFWRV9XQ1NDTVBACitIQVZFX1dDU0NPTEwgPSBASEFWRV9XQ1NDT0xMQAorSEFWRV9XQ1NDUFkgPSBASEFWRV9XQ1NDUFlACitIQVZFX1dDU0NTUE4gPSBASEFWRV9XQ1NDU1BOQAorSEFWRV9XQ1NEVVAgPSBASEFWRV9XQ1NEVVBACitIQVZFX1dDU0xFTiA9IEBIQVZFX1dDU0xFTkAKK0hBVkVfV0NTTkNBU0VDTVAgPSBASEFWRV9XQ1NOQ0FTRUNNUEAKK0hBVkVfV0NTTkNBVCA9IEBIQVZFX1dDU05DQVRACitIQVZFX1dDU05DTVAgPSBASEFWRV9XQ1NOQ01QQAorSEFWRV9XQ1NOQ1BZID0gQEhBVkVfV0NTTkNQWUAKK0hBVkVfV0NTTkxFTiA9IEBIQVZFX1dDU05MRU5ACitIQVZFX1dDU05SVE9NQlMgPSBASEFWRV9XQ1NOUlRPTUJTQAorSEFWRV9XQ1NQQlJLID0gQEhBVkVfV0NTUEJSS0AKK0hBVkVfV0NTUkNIUiA9IEBIQVZFX1dDU1JDSFJACitIQVZFX1dDU1JUT01CUyA9IEBIQVZFX1dDU1JUT01CU0AKK0hBVkVfV0NTU1BOID0gQEhBVkVfV0NTU1BOQAorSEFWRV9XQ1NTVFIgPSBASEFWRV9XQ1NTVFJACitIQVZFX1dDU1RPSyA9IEBIQVZFX1dDU1RPS0AKK0hBVkVfV0NTV0lEVEggPSBASEFWRV9XQ1NXSURUSEAKK0hBVkVfV0NTWEZSTSA9IEBIQVZFX1dDU1hGUk1ACitIQVZFX1dDVFJBTlNfVCA9IEBIQVZFX1dDVFJBTlNfVEAKK0hBVkVfV0NUWVBFX0ggPSBASEFWRV9XQ1RZUEVfSEAKK0hBVkVfV0NUWVBFX1QgPSBASEFWRV9XQ1RZUEVfVEAKK0hBVkVfV0lOU09DSzJfSCA9IEBIQVZFX1dJTlNPQ0syX0hACitIQVZFX1dJTlRfVCA9IEBIQVZFX1dJTlRfVEAKK0hBVkVfV01FTUNIUiA9IEBIQVZFX1dNRU1DSFJACitIQVZFX1dNRU1DTVAgPSBASEFWRV9XTUVNQ01QQAorSEFWRV9XTUVNQ1BZID0gQEhBVkVfV01FTUNQWUAKK0hBVkVfV01FTU1PVkUgPSBASEFWRV9XTUVNTU9WRUAKK0hBVkVfV01FTVNFVCA9IEBIQVZFX1dNRU1TRVRACiBIQVZFX19CT09MID0gQEhBVkVfX0JPT0xACitIQVZFX19FWElUID0gQEhBVkVfX0VYSVRACitIRUxQMk1BTiA9IEBIRUxQMk1BTkAKK0lOQ0xVREVfTkVYVCA9IEBJTkNMVURFX05FWFRACitJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFID0gQElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVACitJTlNUQUxMID0gQElOU1RBTExACiBJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAogSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKIElOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAogSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVDMyX01BWF9MVF9JTlRNQVhfTUFYID0gQElOVDMyX01BWF9MVF9JTlRNQVhfTUFYQAorSU5UNjRfTUFYX0VRX0xPTkdfTUFYID0gQElOVDY0X01BWF9FUV9MT05HX01BWEAKIElOVExMSUJTID0gQElOVExMSUJTQAogSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSVNOQU5EX0xJQk0gPSBASVNOQU5EX0xJQk1ACitJU05BTkZfTElCTSA9IEBJU05BTkZfTElCTUAKK0lTTkFOTF9MSUJNID0gQElTTkFOTF9MSUJNQAorSVNOQU5fTElCTSA9IEBJU05BTl9MSUJNQAorTERFWFBMX0xJQk0gPSBATERFWFBMX0xJQk1ACitMREVYUF9MSUJNID0gQExERVhQX0xJQk1ACiBMREZMQUdTID0gQExERkxBR1NACiBMRVggPSBATEVYQAogTEVYTElCID0gQExFWExJQkAKK0xFWF9JU19GTEVYID0gQExFWF9JU19GTEVYQAogTEVYX09VVFBVVF9ST09UID0gQExFWF9PVVRQVVRfUk9PVEAKK0xJQkJJU09OX0xJQkRFUFMgPSBATElCQklTT05fTElCREVQU0AKK0xJQkJJU09OX0xUTElCREVQUyA9IEBMSUJCSVNPTl9MVExJQkRFUFNACiBMSUJJQ09OViA9IEBMSUJJQ09OVkAKIExJQklOVEwgPSBATElCSU5UTEAKK0xJQk1VTFRJVEhSRUFEID0gQExJQk1VTFRJVEhSRUFEQAogTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUFRIID0gQExJQlBUSEAKK0xJQlBUSF9QUkVGSVggPSBATElCUFRIX1BSRUZJWEAKIExJQlMgPSBATElCU0AKK0xJQlRIUkVBRCA9IEBMSUJUSFJFQURACitMSUJVTklTVFJJTkdfVU5JVFlQRVNfSCA9IEBMSUJVTklTVFJJTkdfVU5JVFlQRVNfSEAKK0xJQlVOSVNUUklOR19VTklXSURUSF9IID0gQExJQlVOSVNUUklOR19VTklXSURUSF9IQAorTE9DQUxDSEFSU0VUX1RFU1RTX0VOVklST05NRU5UID0gQExPQ0FMQ0hBUlNFVF9URVNUU19FTlZJUk9OTUVOVEAKK0xPQ0FMRV9GUl9VVEY4ID0gQExPQ0FMRV9GUl9VVEY4QAorTE9DQUxFX0pBID0gQExPQ0FMRV9KQUAKK0xPQ0FMRV9aSF9DTiA9IEBMT0NBTEVfWkhfQ05ACiBMVExJQklDT05WID0gQExUTElCSUNPTlZACiBMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJNVUxUSVRIUkVBRCA9IEBMVExJQk1VTFRJVEhSRUFEQAogTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xUTElCUFRIID0gQExUTElCUFRIQAorTFRMSUJUSFJFQUQgPSBATFRMSUJUSFJFQURACiBNNCA9IEBNNEAKK000X0RFQlVHRklMRSA9IEBNNF9ERUJVR0ZJTEVACitNNF9HTlUgPSBATTRfR05VQAogTUFLRUlORk8gPSBATUFLRUlORk9ACi1NS0lOU1RBTExESVJTID0gQE1LSU5TVEFMTERJUlNACitNS0RJUl9QID0gQE1LRElSX1BACiBNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAogTVNHTUVSR0UgPSBATVNHTUVSR0VACi1PMENGTEFHUyA9IEBPMENGTEFHU0AKLU8wQ1hYRkxBR1MgPSBATzBDWFhGTEFHU0AKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0VSUk5PX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRVJSTk9fSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0ZDTlRMX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRkNOVExfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0ZMT0FUX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRkxPQVRfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0dFVE9QVF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX0dFVE9QVF9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfSU5UVFlQRVNfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9JTlRUWVBFU19IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfTUFUSF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX01BVEhfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NDSEVEX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU0NIRURfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NJR05BTF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NJR05BTF9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1BBV05fSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TUEFXTl9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1REREVGX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1REREVGX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERJTlRfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERJTlRfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURElPX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RESU9fSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURExJQl9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURExJQl9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RSSU5HX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RSSU5HX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfU1RBVF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19TVEFUX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfVFlQRVNfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfVFlQRVNfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19XQUlUX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1lTX1dBSVRfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1RJTUVfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9USU1FX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9VTklTVERfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9VTklTVERfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDSEFSX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfV0NIQVJfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDVFlQRV9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDVFlQRV9IQAorTkVYVF9FUlJOT19IID0gQE5FWFRfRVJSTk9fSEAKK05FWFRfRkNOVExfSCA9IEBORVhUX0ZDTlRMX0hACitORVhUX0ZMT0FUX0ggPSBATkVYVF9GTE9BVF9IQAorTkVYVF9HRVRPUFRfSCA9IEBORVhUX0dFVE9QVF9IQAorTkVYVF9JTlRUWVBFU19IID0gQE5FWFRfSU5UVFlQRVNfSEAKK05FWFRfTUFUSF9IID0gQE5FWFRfTUFUSF9IQAorTkVYVF9TQ0hFRF9IID0gQE5FWFRfU0NIRURfSEAKK05FWFRfU0lHTkFMX0ggPSBATkVYVF9TSUdOQUxfSEAKK05FWFRfU1BBV05fSCA9IEBORVhUX1NQQVdOX0hACitORVhUX1NURERFRl9IID0gQE5FWFRfU1REREVGX0hACitORVhUX1NURElOVF9IID0gQE5FWFRfU1RESU5UX0hACitORVhUX1NURElPX0ggPSBATkVYVF9TVERJT19IQAorTkVYVF9TVERMSUJfSCA9IEBORVhUX1NURExJQl9IQAorTkVYVF9TVFJJTkdfSCA9IEBORVhUX1NUUklOR19IQAorTkVYVF9TWVNfU1RBVF9IID0gQE5FWFRfU1lTX1NUQVRfSEAKK05FWFRfU1lTX1RZUEVTX0ggPSBATkVYVF9TWVNfVFlQRVNfSEAKK05FWFRfU1lTX1dBSVRfSCA9IEBORVhUX1NZU19XQUlUX0hACitORVhUX1RJTUVfSCA9IEBORVhUX1RJTUVfSEAKK05FWFRfVU5JU1REX0ggPSBATkVYVF9VTklTVERfSEAKK05FWFRfV0NIQVJfSCA9IEBORVhUX1dDSEFSX0hACitORVhUX1dDVFlQRV9IID0gQE5FWFRfV0NUWVBFX0hACiBPQkpFWFQgPSBAT0JKRVhUQAogUEFDS0FHRSA9IEBQQUNLQUdFQAogUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX0NPUFlSSUdIVF9ZRUFSID0gQFBBQ0tBR0VfQ09QWVJJR0hUX1lFQVJACiBQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAogUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACiBQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACiBQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAogUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMID0gQFBFUkxACiBQT1NVQiA9IEBQT1NVQkAKK1BSQUdNQV9DT0xVTU5TID0gQFBSQUdNQV9DT0xVTU5TQAorUFJBR01BX1NZU1RFTV9IRUFERVIgPSBAUFJBR01BX1NZU1RFTV9IRUFERVJACitQUklQVFJfUFJFRklYID0gQFBSSVBUUl9QUkVGSVhACitQUklfTUFDUk9TX0JST0tFTiA9IEBQUklfTUFDUk9TX0JST0tFTkAKK1BUSFJFQURfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQyA9IEBQVEhSRUFEX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUNACitQVFJESUZGX1RfU1VGRklYID0gQFBUUkRJRkZfVF9TVUZGSVhACiBSQU5MSUIgPSBAUkFOTElCQAorUkVQTEFDRV9CVE9XQyA9IEBSRVBMQUNFX0JUT1dDQAorUkVQTEFDRV9DQUxMT0MgPSBAUkVQTEFDRV9DQUxMT0NACitSRVBMQUNFX0NBTk9OSUNBTElaRV9GSUxFX05BTUUgPSBAUkVQTEFDRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FQAorUkVQTEFDRV9DQlJURiA9IEBSRVBMQUNFX0NCUlRGQAorUkVQTEFDRV9DQlJUTCA9IEBSRVBMQUNFX0NCUlRMQAorUkVQTEFDRV9DRUlMID0gQFJFUExBQ0VfQ0VJTEAKK1JFUExBQ0VfQ0VJTEYgPSBAUkVQTEFDRV9DRUlMRkAKK1JFUExBQ0VfQ0VJTEwgPSBAUkVQTEFDRV9DRUlMTEAKK1JFUExBQ0VfQ0hPV04gPSBAUkVQTEFDRV9DSE9XTkAKK1JFUExBQ0VfQ0xPU0UgPSBAUkVQTEFDRV9DTE9TRUAKK1JFUExBQ0VfRFBSSU5URiA9IEBSRVBMQUNFX0RQUklOVEZACitSRVBMQUNFX0RVUCA9IEBSRVBMQUNFX0RVUEAKK1JFUExBQ0VfRFVQMiA9IEBSRVBMQUNFX0RVUDJACitSRVBMQUNFX0VYUDIgPSBAUkVQTEFDRV9FWFAyQAorUkVQTEFDRV9FWFAyTCA9IEBSRVBMQUNFX0VYUDJMQAorUkVQTEFDRV9FWFBNMSA9IEBSRVBMQUNFX0VYUE0xQAorUkVQTEFDRV9FWFBNMUYgPSBAUkVQTEFDRV9FWFBNMUZACitSRVBMQUNFX0ZBQlNMID0gQFJFUExBQ0VfRkFCU0xACitSRVBMQUNFX0ZDSE9XTkFUID0gQFJFUExBQ0VfRkNIT1dOQVRACitSRVBMQUNFX0ZDTE9TRSA9IEBSRVBMQUNFX0ZDTE9TRUAKK1JFUExBQ0VfRkNOVEwgPSBAUkVQTEFDRV9GQ05UTEAKK1JFUExBQ0VfRkRPUEVOID0gQFJFUExBQ0VfRkRPUEVOQAorUkVQTEFDRV9GRkxVU0ggPSBAUkVQTEFDRV9GRkxVU0hACitSRVBMQUNFX0ZMT09SID0gQFJFUExBQ0VfRkxPT1JACitSRVBMQUNFX0ZMT09SRiA9IEBSRVBMQUNFX0ZMT09SRkAKK1JFUExBQ0VfRkxPT1JMID0gQFJFUExBQ0VfRkxPT1JMQAorUkVQTEFDRV9GTUEgPSBAUkVQTEFDRV9GTUFACitSRVBMQUNFX0ZNQUYgPSBAUkVQTEFDRV9GTUFGQAorUkVQTEFDRV9GTUFMID0gQFJFUExBQ0VfRk1BTEAKK1JFUExBQ0VfRk1PRCA9IEBSRVBMQUNFX0ZNT0RACitSRVBMQUNFX0ZNT0RGID0gQFJFUExBQ0VfRk1PREZACitSRVBMQUNFX0ZNT0RMID0gQFJFUExBQ0VfRk1PRExACitSRVBMQUNFX0ZPUEVOID0gQFJFUExBQ0VfRk9QRU5ACitSRVBMQUNFX0ZQUklOVEYgPSBAUkVQTEFDRV9GUFJJTlRGQAorUkVQTEFDRV9GUFVSR0UgPSBAUkVQTEFDRV9GUFVSR0VACitSRVBMQUNFX0ZSRU9QRU4gPSBAUkVQTEFDRV9GUkVPUEVOQAorUkVQTEFDRV9GUkVYUCA9IEBSRVBMQUNFX0ZSRVhQQAorUkVQTEFDRV9GUkVYUEYgPSBAUkVQTEFDRV9GUkVYUEZACitSRVBMQUNFX0ZSRVhQTCA9IEBSRVBMQUNFX0ZSRVhQTEAKK1JFUExBQ0VfRlNFRUsgPSBAUkVQTEFDRV9GU0VFS0AKK1JFUExBQ0VfRlNFRUtPID0gQFJFUExBQ0VfRlNFRUtPQAorUkVQTEFDRV9GU1RBVCA9IEBSRVBMQUNFX0ZTVEFUQAorUkVQTEFDRV9GU1RBVEFUID0gQFJFUExBQ0VfRlNUQVRBVEAKK1JFUExBQ0VfRlRFTEwgPSBAUkVQTEFDRV9GVEVMTEAKK1JFUExBQ0VfRlRFTExPID0gQFJFUExBQ0VfRlRFTExPQAorUkVQTEFDRV9GVFJVTkNBVEUgPSBAUkVQTEFDRV9GVFJVTkNBVEVACitSRVBMQUNFX0ZVVElNRU5TID0gQFJFUExBQ0VfRlVUSU1FTlNACitSRVBMQUNFX0dFVENXRCA9IEBSRVBMQUNFX0dFVENXREAKK1JFUExBQ0VfR0VUREVMSU0gPSBAUkVQTEFDRV9HRVRERUxJTUAKK1JFUExBQ0VfR0VURE9NQUlOTkFNRSA9IEBSRVBMQUNFX0dFVERPTUFJTk5BTUVACitSRVBMQUNFX0dFVEdST1VQUyA9IEBSRVBMQUNFX0dFVEdST1VQU0AKK1JFUExBQ0VfR0VUTElORSA9IEBSRVBMQUNFX0dFVExJTkVACitSRVBMQUNFX0dFVExPR0lOX1IgPSBAUkVQTEFDRV9HRVRMT0dJTl9SQAorUkVQTEFDRV9HRVRQQUdFU0laRSA9IEBSRVBMQUNFX0dFVFBBR0VTSVpFQAorUkVQTEFDRV9IVUdFX1ZBTCA9IEBSRVBMQUNFX0hVR0VfVkFMQAorUkVQTEFDRV9IWVBPVCA9IEBSRVBMQUNFX0hZUE9UQAorUkVQTEFDRV9IWVBPVEYgPSBAUkVQTEFDRV9IWVBPVEZACitSRVBMQUNFX0hZUE9UTCA9IEBSRVBMQUNFX0hZUE9UTEAKK1JFUExBQ0VfSUxPR0IgPSBAUkVQTEFDRV9JTE9HQkAKK1JFUExBQ0VfSUxPR0JGID0gQFJFUExBQ0VfSUxPR0JGQAorUkVQTEFDRV9JU0FUVFkgPSBAUkVQTEFDRV9JU0FUVFlACitSRVBMQUNFX0lTRklOSVRFID0gQFJFUExBQ0VfSVNGSU5JVEVACitSRVBMQUNFX0lTSU5GID0gQFJFUExBQ0VfSVNJTkZACitSRVBMQUNFX0lTTkFOID0gQFJFUExBQ0VfSVNOQU5ACitSRVBMQUNFX0lTV0JMQU5LID0gQFJFUExBQ0VfSVNXQkxBTktACitSRVBMQUNFX0lTV0NOVFJMID0gQFJFUExBQ0VfSVNXQ05UUkxACitSRVBMQUNFX0lUT0xEID0gQFJFUExBQ0VfSVRPTERACitSRVBMQUNFX0xDSE9XTiA9IEBSRVBMQUNFX0xDSE9XTkAKK1JFUExBQ0VfTERFWFBMID0gQFJFUExBQ0VfTERFWFBMQAorUkVQTEFDRV9MSU5LID0gQFJFUExBQ0VfTElOS0AKK1JFUExBQ0VfTElOS0FUID0gQFJFUExBQ0VfTElOS0FUQAorUkVQTEFDRV9MT0NBTFRJTUVfUiA9IEBSRVBMQUNFX0xPQ0FMVElNRV9SQAorUkVQTEFDRV9MT0cgPSBAUkVQTEFDRV9MT0dACitSRVBMQUNFX0xPRzEwID0gQFJFUExBQ0VfTE9HMTBACitSRVBMQUNFX0xPRzEwRiA9IEBSRVBMQUNFX0xPRzEwRkAKK1JFUExBQ0VfTE9HMTBMID0gQFJFUExBQ0VfTE9HMTBMQAorUkVQTEFDRV9MT0cxUCA9IEBSRVBMQUNFX0xPRzFQQAorUkVQTEFDRV9MT0cxUEYgPSBAUkVQTEFDRV9MT0cxUEZACitSRVBMQUNFX0xPRzFQTCA9IEBSRVBMQUNFX0xPRzFQTEAKK1JFUExBQ0VfTE9HMiA9IEBSRVBMQUNFX0xPRzJACitSRVBMQUNFX0xPRzJGID0gQFJFUExBQ0VfTE9HMkZACitSRVBMQUNFX0xPRzJMID0gQFJFUExBQ0VfTE9HMkxACitSRVBMQUNFX0xPR0IgPSBAUkVQTEFDRV9MT0dCQAorUkVQTEFDRV9MT0dCRiA9IEBSRVBMQUNFX0xPR0JGQAorUkVQTEFDRV9MT0dCTCA9IEBSRVBMQUNFX0xPR0JMQAorUkVQTEFDRV9MT0dGID0gQFJFUExBQ0VfTE9HRkAKK1JFUExBQ0VfTE9HTCA9IEBSRVBMQUNFX0xPR0xACitSRVBMQUNFX0xTRUVLID0gQFJFUExBQ0VfTFNFRUtACitSRVBMQUNFX0xTVEFUID0gQFJFUExBQ0VfTFNUQVRACitSRVBMQUNFX01BTExPQyA9IEBSRVBMQUNFX01BTExPQ0AKK1JFUExBQ0VfTUJSTEVOID0gQFJFUExBQ0VfTUJSTEVOQAorUkVQTEFDRV9NQlJUT1dDID0gQFJFUExBQ0VfTUJSVE9XQ0AKK1JFUExBQ0VfTUJTSU5JVCA9IEBSRVBMQUNFX01CU0lOSVRACitSRVBMQUNFX01CU05SVE9XQ1MgPSBAUkVQTEFDRV9NQlNOUlRPV0NTQAorUkVQTEFDRV9NQlNSVE9XQ1MgPSBAUkVQTEFDRV9NQlNSVE9XQ1NACitSRVBMQUNFX01CU1RBVEVfVCA9IEBSRVBMQUNFX01CU1RBVEVfVEAKK1JFUExBQ0VfTUJUT1dDID0gQFJFUExBQ0VfTUJUT1dDQAorUkVQTEFDRV9NRU1DSFIgPSBAUkVQTEFDRV9NRU1DSFJACitSRVBMQUNFX01FTU1FTSA9IEBSRVBMQUNFX01FTU1FTUAKK1JFUExBQ0VfTUtESVIgPSBAUkVQTEFDRV9NS0RJUkAKK1JFUExBQ0VfTUtGSUZPID0gQFJFUExBQ0VfTUtGSUZPQAorUkVQTEFDRV9NS05PRCA9IEBSRVBMQUNFX01LTk9EQAorUkVQTEFDRV9NS1NURU1QID0gQFJFUExBQ0VfTUtTVEVNUEAKK1JFUExBQ0VfTUtUSU1FID0gQFJFUExBQ0VfTUtUSU1FQAorUkVQTEFDRV9NT0RGID0gQFJFUExBQ0VfTU9ERkAKK1JFUExBQ0VfTU9ERkYgPSBAUkVQTEFDRV9NT0RGRkAKK1JFUExBQ0VfTU9ERkwgPSBAUkVQTEFDRV9NT0RGTEAKK1JFUExBQ0VfTkFOID0gQFJFUExBQ0VfTkFOQAorUkVQTEFDRV9OQU5PU0xFRVAgPSBAUkVQTEFDRV9OQU5PU0xFRVBACitSRVBMQUNFX05VTEwgPSBAUkVQTEFDRV9OVUxMQAorUkVQTEFDRV9PQlNUQUNLX1BSSU5URiA9IEBSRVBMQUNFX09CU1RBQ0tfUFJJTlRGQAorUkVQTEFDRV9PUEVOID0gQFJFUExBQ0VfT1BFTkAKK1JFUExBQ0VfT1BFTkFUID0gQFJFUExBQ0VfT1BFTkFUQAorUkVQTEFDRV9QRVJST1IgPSBAUkVQTEFDRV9QRVJST1JACitSRVBMQUNFX1BPUEVOID0gQFJFUExBQ0VfUE9QRU5ACitSRVBMQUNFX1BPU0lYX1NQQVdOID0gQFJFUExBQ0VfUE9TSVhfU1BBV05ACitSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRSA9IEBSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRUAKK1JFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDIgPSBAUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMkAKK1JFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU4gPSBAUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURET1BFTkAKK1JFUExBQ0VfUFJFQUQgPSBAUkVQTEFDRV9QUkVBREAKK1JFUExBQ0VfUFJJTlRGID0gQFJFUExBQ0VfUFJJTlRGQAorUkVQTEFDRV9QVEhSRUFEX1NJR01BU0sgPSBAUkVQTEFDRV9QVEhSRUFEX1NJR01BU0tACitSRVBMQUNFX1BUU05BTUUgPSBAUkVQTEFDRV9QVFNOQU1FQAorUkVQTEFDRV9QVFNOQU1FX1IgPSBAUkVQTEFDRV9QVFNOQU1FX1JACitSRVBMQUNFX1BVVEVOViA9IEBSRVBMQUNFX1BVVEVOVkAKK1JFUExBQ0VfUFdSSVRFID0gQFJFUExBQ0VfUFdSSVRFQAorUkVQTEFDRV9SQUlTRSA9IEBSRVBMQUNFX1JBSVNFQAorUkVQTEFDRV9SQU5ET01fUiA9IEBSRVBMQUNFX1JBTkRPTV9SQAorUkVQTEFDRV9SRUFEID0gQFJFUExBQ0VfUkVBREAKK1JFUExBQ0VfUkVBRExJTksgPSBAUkVQTEFDRV9SRUFETElOS0AKK1JFUExBQ0VfUkVBTExPQyA9IEBSRVBMQUNFX1JFQUxMT0NACitSRVBMQUNFX1JFQUxQQVRIID0gQFJFUExBQ0VfUkVBTFBBVEhACitSRVBMQUNFX1JFTUFJTkRFUiA9IEBSRVBMQUNFX1JFTUFJTkRFUkAKK1JFUExBQ0VfUkVNQUlOREVSRiA9IEBSRVBMQUNFX1JFTUFJTkRFUkZACitSRVBMQUNFX1JFTUFJTkRFUkwgPSBAUkVQTEFDRV9SRU1BSU5ERVJMQAorUkVQTEFDRV9SRU1PVkUgPSBAUkVQTEFDRV9SRU1PVkVACitSRVBMQUNFX1JFTkFNRSA9IEBSRVBMQUNFX1JFTkFNRUAKK1JFUExBQ0VfUkVOQU1FQVQgPSBAUkVQTEFDRV9SRU5BTUVBVEAKK1JFUExBQ0VfUk1ESVIgPSBAUkVQTEFDRV9STURJUkAKK1JFUExBQ0VfUk9VTkQgPSBAUkVQTEFDRV9ST1VOREAKK1JFUExBQ0VfUk9VTkRGID0gQFJFUExBQ0VfUk9VTkRGQAorUkVQTEFDRV9ST1VOREwgPSBAUkVQTEFDRV9ST1VORExACitSRVBMQUNFX1NFVEVOViA9IEBSRVBMQUNFX1NFVEVOVkAKK1JFUExBQ0VfU0lHTkJJVCA9IEBSRVBMQUNFX1NJR05CSVRACitSRVBMQUNFX1NJR05CSVRfVVNJTkdfR0NDID0gQFJFUExBQ0VfU0lHTkJJVF9VU0lOR19HQ0NACitSRVBMQUNFX1NMRUVQID0gQFJFUExBQ0VfU0xFRVBACitSRVBMQUNFX1NOUFJJTlRGID0gQFJFUExBQ0VfU05QUklOVEZACitSRVBMQUNFX1NQUklOVEYgPSBAUkVQTEFDRV9TUFJJTlRGQAorUkVQTEFDRV9TUVJUTCA9IEBSRVBMQUNFX1NRUlRMQAorUkVQTEFDRV9TVEFUID0gQFJFUExBQ0VfU1RBVEAKK1JFUExBQ0VfU1RESU9fUkVBRF9GVU5DUyA9IEBSRVBMQUNFX1NURElPX1JFQURfRlVOQ1NACitSRVBMQUNFX1NURElPX1dSSVRFX0ZVTkNTID0gQFJFUExBQ0VfU1RESU9fV1JJVEVfRlVOQ1NACitSRVBMQUNFX1NUUE5DUFkgPSBAUkVQTEFDRV9TVFBOQ1BZQAorUkVQTEFDRV9TVFJDQVNFU1RSID0gQFJFUExBQ0VfU1RSQ0FTRVNUUkAKK1JFUExBQ0VfU1RSQ0hSTlVMID0gQFJFUExBQ0VfU1RSQ0hSTlVMQAorUkVQTEFDRV9TVFJEVVAgPSBAUkVQTEFDRV9TVFJEVVBACitSRVBMQUNFX1NUUkVSUk9SID0gQFJFUExBQ0VfU1RSRVJST1JACitSRVBMQUNFX1NUUkVSUk9SX1IgPSBAUkVQTEFDRV9TVFJFUlJPUl9SQAorUkVQTEFDRV9TVFJOQ0FUID0gQFJFUExBQ0VfU1RSTkNBVEAKK1JFUExBQ0VfU1RSTkRVUCA9IEBSRVBMQUNFX1NUUk5EVVBACitSRVBMQUNFX1NUUk5MRU4gPSBAUkVQTEFDRV9TVFJOTEVOQAorUkVQTEFDRV9TVFJTSUdOQUwgPSBAUkVQTEFDRV9TVFJTSUdOQUxACitSRVBMQUNFX1NUUlNUUiA9IEBSRVBMQUNFX1NUUlNUUkAKK1JFUExBQ0VfU1RSVE9EID0gQFJFUExBQ0VfU1RSVE9EQAorUkVQTEFDRV9TVFJUT0lNQVggPSBAUkVQTEFDRV9TVFJUT0lNQVhACitSRVBMQUNFX1NUUlRPS19SID0gQFJFUExBQ0VfU1RSVE9LX1JACitSRVBMQUNFX1NZTUxJTksgPSBAUkVQTEFDRV9TWU1MSU5LQAorUkVQTEFDRV9USU1FR00gPSBAUkVQTEFDRV9USU1FR01ACitSRVBMQUNFX1RNUEZJTEUgPSBAUkVQTEFDRV9UTVBGSUxFQAorUkVQTEFDRV9UT1dMT1dFUiA9IEBSRVBMQUNFX1RPV0xPV0VSQAorUkVQTEFDRV9UUlVOQyA9IEBSRVBMQUNFX1RSVU5DQAorUkVQTEFDRV9UUlVOQ0YgPSBAUkVQTEFDRV9UUlVOQ0ZACitSRVBMQUNFX1RSVU5DTCA9IEBSRVBMQUNFX1RSVU5DTEAKK1JFUExBQ0VfVFRZTkFNRV9SID0gQFJFUExBQ0VfVFRZTkFNRV9SQAorUkVQTEFDRV9VTkxJTksgPSBAUkVQTEFDRV9VTkxJTktACitSRVBMQUNFX1VOTElOS0FUID0gQFJFUExBQ0VfVU5MSU5LQVRACitSRVBMQUNFX1VOU0VURU5WID0gQFJFUExBQ0VfVU5TRVRFTlZACitSRVBMQUNFX1VTTEVFUCA9IEBSRVBMQUNFX1VTTEVFUEAKK1JFUExBQ0VfVVRJTUVOU0FUID0gQFJFUExBQ0VfVVRJTUVOU0FUQAorUkVQTEFDRV9WQVNQUklOVEYgPSBAUkVQTEFDRV9WQVNQUklOVEZACitSRVBMQUNFX1ZEUFJJTlRGID0gQFJFUExBQ0VfVkRQUklOVEZACitSRVBMQUNFX1ZGUFJJTlRGID0gQFJFUExBQ0VfVkZQUklOVEZACitSRVBMQUNFX1ZQUklOVEYgPSBAUkVQTEFDRV9WUFJJTlRGQAorUkVQTEFDRV9WU05QUklOVEYgPSBAUkVQTEFDRV9WU05QUklOVEZACitSRVBMQUNFX1ZTUFJJTlRGID0gQFJFUExBQ0VfVlNQUklOVEZACitSRVBMQUNFX1dDUlRPTUIgPSBAUkVQTEFDRV9XQ1JUT01CQAorUkVQTEFDRV9XQ1NOUlRPTUJTID0gQFJFUExBQ0VfV0NTTlJUT01CU0AKK1JFUExBQ0VfV0NTUlRPTUJTID0gQFJFUExBQ0VfV0NTUlRPTUJTQAorUkVQTEFDRV9XQ1NXSURUSCA9IEBSRVBMQUNFX1dDU1dJRFRIQAorUkVQTEFDRV9XQ1RPQiA9IEBSRVBMQUNFX1dDVE9CQAorUkVQTEFDRV9XQ1RPTUIgPSBAUkVQTEFDRV9XQ1RPTUJACitSRVBMQUNFX1dDV0lEVEggPSBAUkVQTEFDRV9XQ1dJRFRIQAorUkVQTEFDRV9XUklURSA9IEBSRVBMQUNFX1dSSVRFQAorU0NIRURfSCA9IEBTQ0hFRF9IQAogU0VUX01BS0UgPSBAU0VUX01BS0VACiBTSEVMTCA9IEBTSEVMTEAKK1NJR19BVE9NSUNfVF9TVUZGSVggPSBAU0lHX0FUT01JQ19UX1NVRkZJWEAKK1NJWkVfVF9TVUZGSVggPSBAU0laRV9UX1NVRkZJWEAKIFNUREJPT0xfSCA9IEBTVERCT09MX0hACitTVERERUZfSCA9IEBTVERERUZfSEAKK1NURElOVF9IID0gQFNURElOVF9IQAogU1RSSVAgPSBAU1RSSVBACi1VTklTVERfSCA9IEBVTklTVERfSEAKK1NZU19USU1FX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUMgPSBAU1lTX1RJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQ0AKK1RJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQyA9IEBUSU1FX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUNACitVSU5UMzJfTUFYX0xUX1VJTlRNQVhfTUFYID0gQFVJTlQzMl9NQVhfTFRfVUlOVE1BWF9NQVhACitVSU5UNjRfTUFYX0VRX1VMT05HX01BWCA9IEBVSU5UNjRfTUFYX0VRX1VMT05HX01BWEAKK1VOREVGSU5FX1NUUlRPS19SID0gQFVOREVGSU5FX1NUUlRPS19SQAorVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IID0gQFVOSVNURF9IX0hBVkVfV0lOU09DSzJfSEAKK1VOSVNURF9IX0hBVkVfV0lOU09DSzJfSF9BTkRfVVNFX1NPQ0tFVFMgPSBAVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IX0FORF9VU0VfU09DS0VUU0AKIFVTRV9OTFMgPSBAVVNFX05MU0AKIFZBTEdSSU5EID0gQFZBTEdSSU5EQAorVkFMR1JJTkRfUFJFQklTT04gPSBAVkFMR1JJTkRfUFJFQklTT05ACiBWRVJTSU9OID0gQFZFUlNJT05ACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKK1dBUk5fQ0ZMQUdTID0gQFdBUk5fQ0ZMQUdTQAorV0FSTl9DRkxBR1NfVEVTVCA9IEBXQVJOX0NGTEFHU19URVNUQAorV0FSTl9DWFhGTEFHUyA9IEBXQVJOX0NYWEZMQUdTQAorV0FSTl9DWFhGTEFHU19URVNUID0gQFdBUk5fQ1hYRkxBR1NfVEVTVEAKK1dDSEFSX1RfU1VGRklYID0gQFdDSEFSX1RfU1VGRklYQAogV0VSUk9SX0NGTEFHUyA9IEBXRVJST1JfQ0ZMQUdTQAorV0VSUk9SX0NYWEZMQUdTID0gQFdFUlJPUl9DWFhGTEFHU0AKK1dJTkRPV1NfNjRfQklUX09GRl9UID0gQFdJTkRPV1NfNjRfQklUX09GRl9UQAorV0lORE9XU182NF9CSVRfU1RfU0laRSA9IEBXSU5ET1dTXzY0X0JJVF9TVF9TSVpFQAorV0lOVF9UX1NVRkZJWCA9IEBXSU5UX1RfU1VGRklYQAogWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAorWFNMVFBST0MgPSBAWFNMVFBST0NACiBZQUNDID0gQFlBQ0NACiBZQUNDX0xJQlJBUlkgPSBAWUFDQ19MSUJSQVJZQAogWUFDQ19TQ1JJUFQgPSBAWUFDQ19TQ1JJUFRACitZRkxBR1MgPSBAWUZMQUdTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAogYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACiBhY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfUkFOTElCID0gQGFjX2N0X1JBTkxJQkAKLWFjX2N0X1NUUklQID0gQGFjX2N0X1NUUklQQAogYWNsb2NhbGRpciA9IEBhY2xvY2FsZGlyQAotYW1fX2Zhc3RkZXBDQ19GQUxTRSA9IEBhbV9fZmFzdGRlcENDX0ZBTFNFQAotYW1fX2Zhc3RkZXBDQ19UUlVFID0gQGFtX19mYXN0ZGVwQ0NfVFJVRUAKLWFtX19mYXN0ZGVwQ1hYX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAotYW1fX2Zhc3RkZXBDWFhfVFJVRSA9IEBhbV9fZmFzdGRlcENYWF9UUlVFQAogYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACiBhbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAogYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKQEAgLTIyMiwzOSArMTQzNCw0NyBAQAogYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKIGJ1aWxkX29zID0gQGJ1aWxkX29zQAogYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAogZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKIGV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorZ2xfTElCT0JKUyA9IEBnbF9MSUJPQkpTQAorZ2xfTFRMSUJPQkpTID0gQGdsX0xUTElCT0JKU0AKK2dsdGVzdHNfTElCT0JKUyA9IEBnbHRlc3RzX0xJQk9CSlNACitnbHRlc3RzX0xUTElCT0JKUyA9IEBnbHRlc3RzX0xUTElCT0JKU0AKK2dsdGVzdHNfV0lUTkVTUyA9IEBnbHRlc3RzX1dJVE5FU1NACiBob3N0ID0gQGhvc3RACiBob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACiBob3N0X2NwdSA9IEBob3N0X2NwdUAKIGhvc3Rfb3MgPSBAaG9zdF9vc0AKIGhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAogaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAogaW5mb2RpciA9IEBpbmZvZGlyQAogaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAogbGliZGlyID0gQGxpYmRpckAKIGxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xpc3BkaXIgPSBAbGlzcGRpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACiBsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACiBtYW5kaXIgPSBAbWFuZGlyQAogbWtkaXJfcCA9IEBta2Rpcl9wQAogb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKIHByZWZpeCA9IEBwcmVmaXhACiBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKIHNiaW5kaXIgPSBAc2JpbmRpckAKIHNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKIHN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKIHRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi1BTV9DRkxBR1MgPSAkKFdBUk5JTkdfQ0ZMQUdTKQotQlVJTFRfU09VUkNFUyA9ICQoR0VUT1BUX0gpICQoU1REQk9PTF9IKSAkKFVOSVNURF9IKQotRVhUUkFfRElTVCA9IGdldG9wdF8uaCBnZXRvcHRfaW50Lmggc3RkYm9vbF8uaAotTU9TVExZQ0xFQU5GSUxFUyA9IGdldG9wdC5oIGdldG9wdC5oLXQgc3RkYm9vbC5oIHN0ZGJvb2wuaC10IHVuaXN0ZC5oCi1saWJfTElCUkFSSUVTID0gJChZQUNDX0xJQlJBUlkpCi1FWFRSQV9MSUJSQVJJRVMgPSBsaWJ5LmEKLW5vaW5zdF9MSUJSQVJJRVMgPSBsaWJiaXNvbi5hCi1saWJ5X2FfU09VUkNFUyA9IG1haW4uYyB5eWVycm9yLmMKLWxpYmJpc29uX2FfU09VUkNFUyA9ICQobGliX1NPVVJDRVMpCi0KLSMgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICJib290c3RyYXAiLgordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK0FNX0NGTEFHUyA9ICQoV0FSTl9DRkxBR1MpCiAKICMgVGhpcyBpcyBmb3IgdGhvc2UgcHJvamVjdHMgd2hpY2ggdXNlICJnZXR0ZXh0aXplIC0taW50bCIgdG8gcHV0IGEgc291cmNlLWNvZGUKICMgY29weSBvZiBsaWJpbnRsIGludG8gdGhlaXIgcGFja2FnZS4gSW4gc3VjaCBwcm9qZWN0cywgZXZlcnkgTWFrZWZpbGUuYW0gbmVlZHMKQEAgLTI2NCwxNCArMTQ4NCwxNDkgQEAKICMgVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCB3aGVuIHRoZSB1c2VyIGRpc2FibGVzIE5MUyAoYmVjYXVzZSB0aGVuIHRoZSBpbnRsCiAjIGRpcmVjdG9yeSBjb250YWlucyBubyBsaWJpbnRsLmggZmlsZSkgb3Igd2hlbiB0aGUgcHJvamVjdCBkb2VzIG5vdCB1c2UKICMgImdldHRleHRpemUgLS1pbnRsIi4KLSMgKGNvbW1lbnRlZCBvdXQgYnkgYm9vdHN0cmFwKSBBTV9DUFBGTEFHUyArPSAtSSQodG9wX2J1aWxkZGlyKS9pbnRsCi1saWJfU09VUkNFUyA9IGdldC1lcnJuby5oIGdldC1lcnJuby5jIHN1YnBpcGUuaCBzdWJwaXBlLmMgXAotCSQoYml0c2V0c19zb3VyY2VzKSAkKGFkZGl0aW9uYWxfYml0c2V0c19zb3VyY2VzKSBcCi0JJCh0aW1ldmFyc19zb3VyY2VzKSBhcmdtYXRjaC5oIGFyZ21hdGNoLmMgYmFzZW5hbWUuYyBcCi0Jc3RyaXBzbGFzaC5jIGV4aXQuaCBnZXR0ZXh0LmggbWJzd2lkdGguaCBtYnN3aWR0aC5jIHN0cGNweS5oIFwKLQl2ZXJpZnkuaCB4YWxsb2MtZGllLmMgeHN0cm5kdXAuaCB4c3RybmR1cC5jCitBTV9DUFBGTEFHUyA9IC1JJCh0b3BfYnVpbGRkaXIpL2ludGwKIAotIyBJbXBsZW1lbnRhdGlvbiBvZiBiaXRzZXRzCisjIFRoZSBCVUlMVF9TT1VSQ0VTIGNyZWF0ZWQgYnkgdGhpcyBNYWtlZmlsZSBzbmlwcGV0IGFyZSBub3QgdXNlZCB2aWEgI2luY2x1ZGUKKyMgc3RhdGVtZW50cyBidXQgdGhyb3VnaCBkaXJlY3QgZmlsZSByZWZlcmVuY2UuIFRoZXJlZm9yZSB0aGlzIHNuaXBwZXQgbXVzdCBiZQorIyBwcmVzZW50IGluIGFsbCBNYWtlZmlsZS5hbSB0aGF0IG5lZWQgaXQuIFRoaXMgaXMgZW5zdXJlZCBieSB0aGUgYXBwbGljYWJpbGl0eQorIyAnYWxsJyBkZWZpbmVkIGFib3ZlLgorCisjIFRoZSBCVUlMVF9TT1VSQ0VTIGNyZWF0ZWQgYnkgdGhpcyBNYWtlZmlsZSBzbmlwcGV0IGFyZSBub3QgdXNlZCB2aWEgI2luY2x1ZGUKKyMgc3RhdGVtZW50cyBidXQgdGhyb3VnaCBkaXJlY3QgZmlsZSByZWZlcmVuY2UuIFRoZXJlZm9yZSB0aGlzIHNuaXBwZXQgbXVzdCBiZQorIyBwcmVzZW50IGluIGFsbCBNYWtlZmlsZS5hbSB0aGF0IG5lZWQgaXQuIFRoaXMgaXMgZW5zdXJlZCBieSB0aGUgYXBwbGljYWJpbGl0eQorIyAnYWxsJyBkZWZpbmVkIGFib3ZlLgorQlVJTFRfU09VUkNFUyA9ICQoQUxMT0NBX0gpIGNvbmZpZ21ha2UuaCAkKEVSUk5PX0gpIGZjbnRsLmggJChGTE9BVF9IKSBcCisJJChHRVRPUFRfSCkgaW50dHlwZXMuaCBtYXRoLmggJChTQ0hFRF9IKSBzaWduYWwuaCBcCisJYXJnLW5vbm51bGwuaCBjKytkZWZzLmggd2Fybi1vbi11c2UuaCBzcGF3bi5oICQoU1REQk9PTF9IKSBcCisJJChTVERERUZfSCkgJChTVERJTlRfSCkgc3RkaW8uaCBzdGRsaWIuaCBzdHJpbmcuaCBzeXMvc3RhdC5oIFwKKwlzeXMvdHlwZXMuaCBzeXMvd2FpdC5oIHRpbWUuaCB1bmlzdGQuaCBcCisJJChMSUJVTklTVFJJTkdfVU5JVFlQRVNfSCkgJChMSUJVTklTVFJJTkdfVU5JV0lEVEhfSCkgd2NoYXIuaCBcCisJd2N0eXBlLmgKK0NMRUFORklMRVMgPSBjb25maWdtYWtlLmggY29uZmlnbWFrZS5oLXQgY2hhcnNldC5hbGlhcyByZWYtYWRkLnNlZCBcCisJcmVmLWRlbC5zZWQKK0VYVFJBX0RJU1QgPSBhbGxvY2EuaW4uaCAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9hbm5vdW5jZS1nZW4gXAorCWFyZ21hdGNoLmggYy1zdHJjYXNlZXEuaCBjYWxsb2MuYyBjbG9leGVjLmggY2xvc2UuYyBcCisJY2xvc2Utc3RyZWFtLmggY2xvc2VvdXQuaCBzdHJpcHNsYXNoLmMgZGlybmFtZS5oIFwKKwkkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9kby1yZWxlYXNlLWNvbW1pdC1hbmQtdGFnIGRvc25hbWUuaCBcCisJZHVwMi5jIGVycm5vLmluLmggZXJyb3IuYyBlcnJvci5oIGV4aXRmYWlsLmggZmNudGwuYyBcCisJZmNudGwuaW4uaCBmZC1ob29rLmggZmxvYXQuYyBmbG9hdC5pbi5oIGl0b2xkLmMgZm9wZW4uYyBcCisJc3RkaW8tLS5oIHN0ZGlvLXNhZmVyLmggZnBlbmRpbmcuYyBmcGVuZGluZy5oIGZwcmludGYuYyBcCisJZnB1Y3cuaCBmcmV4cC5jIGZyZXhwLmMgZnJleHBsLmMgZnNldGVyci5jIGZzZXRlcnIuaCBcCisJc3RkaW8taW1wbC5oIGZzdGF0LmMgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvZ2VuZG9jcy5zaCBcCisJZ2V0ZGVsaW0uYyBnZXRkdGFibGVzaXplLmMgZ2V0bGluZS5jIGdldG9wdC5jIGdldG9wdC5pbi5oIFwKKwlnZXRvcHQxLmMgZ2V0b3B0X2ludC5oICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2NvbmZpZy5ycGF0aCBcCisJJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvZ2l0LXZlcnNpb24tZ2VuIFwKKwkkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9naXRsb2ctdG8tY2hhbmdlbG9nIFwKKwkkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9nbnUtd2ViLWRvYy11cGRhdGUgXAorCSQodG9wX3NyY2RpcikvR05VbWFrZWZpbGUgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvZ251cGxvYWQgXAorCWhhc2guaCAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9jb25maWcucnBhdGggaW50cHJvcHMuaCBcCisJaW50dHlwZXMuaW4uaCBmbG9hdCsuaCBpc25hbi5jIGlzbmFuZC5jIGZsb2F0Ky5oIGlzbmFuLmMgXAorCWlzbmFuZC1ub2xpYm0uaCBpc25hbmQuYyBmbG9hdCsuaCBpc25hbi5jIGlzbmFuZi5jIGZsb2F0Ky5oIFwKKwlpc25hbi5jIGlzbmFuZi1ub2xpYm0uaCBpc25hbmYuYyBmbG9hdCsuaCBpc25hbi5jIGlzbmFubC5jIFwKKwlmbG9hdCsuaCBpc25hbi5jIGlzbmFubC1ub2xpYm0uaCBpc25hbmwuYyBpc3dibGFuay5jIFwKKwkkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9qYXZhY29tcC5zaC5pbiBcCisJJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvamF2YWV4ZWMuc2guaW4gbGRleHBsLmMgY29uZmlnLmNoYXJzZXQgXAorCXJlZi1hZGQuc2luIHJlZi1kZWwuc2luICQodG9wX3NyY2RpcikvbWFpbnQubWsgbWFsbG9jLmMgXAorCW1hbGxvYy5jIG1hdGguaW4uaCBtYmNoYXIuaCBtYnJ0b3djLmMgbWJzaW5pdC5jIG1lbWNoci5jIFwKKwltZW1jaHIudmFsZ3JpbmQgbXN2Yy1pbnZhbC5jIG1zdmMtaW52YWwuaCBtc3ZjLW5vdGhyb3cuYyBcCisJbXN2Yy1ub3Rocm93Lmggb2JzdGFjay5jIG9ic3RhY2suaCBvYnN0YWNrX3ByaW50Zi5jIG9wZW4uYyBcCisJcGF0aG1heC5oIHBlcnJvci5jIHNwYXduX2ludC5oIHNwYXduaS5jIFwKKwlzcGF3bl9mYWN0aW9uX2FkZGNsb3NlLmMgc3Bhd25faW50Lmggc3Bhd25fZmFjdGlvbl9hZGRkdXAyLmMgXAorCXNwYXduX2ludC5oIHNwYXduX2ZhY3Rpb25fYWRkb3Blbi5jIHNwYXduX2ludC5oIFwKKwlzcGF3bl9mYWN0aW9uX2Rlc3Ryb3kuYyBzcGF3bl9mYWN0aW9uX2luaXQuYyBzcGF3bl9pbnQuaCBcCisJc3Bhd25hdHRyX2Rlc3Ryb3kuYyBzcGF3bmF0dHJfaW5pdC5jIHNwYXduYXR0cl9zZXRmbGFncy5jIFwKKwlzcGF3bmF0dHJfc2V0c2lnbWFzay5jIHNwYXducC5jIHByaW50Zi1mcmV4cC5oIHByaW50Zi1mcmV4cC5jIFwKKwlwcmludGYtZnJleHBsLmggcHJpbnRmLmMgcXVvdGUuaCBxdW90ZS5oIHF1b3RlYXJnLmggcmFpc2UuYyBcCisJcmF3bWVtY2hyLmMgcmF3bWVtY2hyLnZhbGdyaW5kICQodG9wX3NyY2RpcikvUkVBRE1FLXJlbGVhc2UgXAorCXJlYWxsb2MuYyBzY2hlZC5pbi5oIHNpZy1oYW5kbGVyLmggc2lnYWN0aW9uLmMgc2lnbmFsLmluLmggXAorCWZsb2F0Ky5oIHNpZ25iaXRkLmMgc2lnbmJpdGYuYyBzaWduYml0bC5jIHNpZ3Byb2NtYXNrLmMgXAorCSQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvX05vcmV0dXJuLmggXAorCSQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvYXJnLW5vbm51bGwuaCBcCisJJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmggXAorCSQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvd2Fybi1vbi11c2UuaCBzbnByaW50Zi5jIFwKKwlzcGF3bi5pbi5oIHNwcmludGYuYyBzdGF0LmMgc3RkYm9vbC5pbi5oIHN0ZGRlZi5pbi5oIFwKKwlzdGRpbnQuaW4uaCBzdGRpby5pbi5oIHN0ZGxpYi5pbi5oIHN0cGNweS5jIHN0cmNocm51bC5jIFwKKwlzdHJjaHJudWwudmFsZ3JpbmQgc3RyZHVwLmMgc3RyZXEuaCBzdHJlcnJvci5jIFwKKwlzdHJlcnJvci1vdmVycmlkZS5jIHN0cmVycm9yLW92ZXJyaWRlLmggc3RyZXJyb3Jfci5jIFwKKwlzdHJpbmcuaW4uaCBzdHJuZHVwLmMgc3Rybmxlbi5jIHN0cnRvbC5jIHN0cnRvdWwuYyBcCisJc3RydmVyc2NtcC5jIHN5c19zdGF0LmluLmggc3lzX3R5cGVzLmluLmggc3lzX3dhaXQuaW4uaCBcCisJJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvY29uZmlnLnJwYXRoIHRpbWUuaW4uaCB1bmlzdGQuaW4uaCBcCisJdW5pc3RkLS0uaCB1bmlzdGQtc2FmZXIuaCB1bml0eXBlcy5pbi5oIGxvY2FsY2hhcnNldC5oIFwKKwl1bml3aWR0aC5pbi5oIHVuaXdpZHRoL2Nqay5oIHVubG9ja2VkLWlvLmggdW5zZXRlbnYuYyBcCisJJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvdXBkYXRlLWNvcHlyaWdodCBcCisJJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvdXNlbGVzcy1pZi1iZWZvcmUtZnJlZSBhc25wcmludGYuYyBcCisJZmxvYXQrLmggcHJpbnRmLWFyZ3MuYyBwcmludGYtYXJncy5oIHByaW50Zi1wYXJzZS5jIFwKKwlwcmludGYtcGFyc2UuaCB2YXNucHJpbnRmLmMgdmFzbnByaW50Zi5oIFwKKwkkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC92Yy1saXN0LWZpbGVzIHZlcmlmeS5oIHZmcHJpbnRmLmMgXAorCXZzbnByaW50Zi5jIHZzcHJpbnRmLmMgd2FpdHBpZC5jIHdjaGFyLmluLmggd2N0eXBlLmluLmggXAorCXdjd2lkdGguYyB4YWxsb2MuaCB4YWxsb2Mtb3ZlcnNpemVkLmggeG1lbWR1cDAuYyB4bWVtZHVwMC5oCitNT1NUTFlDTEVBTkRJUlMgPSBzeXMgc3lzCitNT1NUTFlDTEVBTkZJTEVTID0gY29yZSAqLnN0YWNrZHVtcCBhbGxvY2EuaCBhbGxvY2EuaC10IGVycm5vLmggXAorCWVycm5vLmgtdCBmY250bC5oIGZjbnRsLmgtdCBmbG9hdC5oIGZsb2F0LmgtdCBnZXRvcHQuaCBcCisJZ2V0b3B0LmgtdCBpbnR0eXBlcy5oIGludHR5cGVzLmgtdCBtYXRoLmggbWF0aC5oLXQgc2NoZWQuaCBcCisJc2NoZWQuaC10IHNpZ25hbC5oIHNpZ25hbC5oLXQgYXJnLW5vbm51bGwuaCBhcmctbm9ubnVsbC5oLXQgXAorCWMrK2RlZnMuaCBjKytkZWZzLmgtdCB3YXJuLW9uLXVzZS5oIHdhcm4tb24tdXNlLmgtdCBzcGF3bi5oIFwKKwlzcGF3bi5oLXQgc3RkYm9vbC5oIHN0ZGJvb2wuaC10IHN0ZGRlZi5oIHN0ZGRlZi5oLXQgc3RkaW50LmggXAorCXN0ZGludC5oLXQgc3RkaW8uaCBzdGRpby5oLXQgc3RkbGliLmggc3RkbGliLmgtdCBzdHJpbmcuaCBcCisJc3RyaW5nLmgtdCBzeXMvc3RhdC5oIHN5cy9zdGF0LmgtdCBzeXMvdHlwZXMuaCBzeXMvdHlwZXMuaC10IFwKKwlzeXMvd2FpdC5oIHN5cy93YWl0LmgtdCB0aW1lLmggdGltZS5oLXQgdW5pc3RkLmggdW5pc3RkLmgtdCBcCisJdW5pdHlwZXMuaCB1bml0eXBlcy5oLXQgdW5pd2lkdGguaCB1bml3aWR0aC5oLXQgd2NoYXIuaCBcCisJd2NoYXIuaC10IHdjdHlwZS5oIHdjdHlwZS5oLXQKK1NVRkZJWEVTID0gLnNlZCAuc2luCitub2luc3RfTElCUkFSSUVTID0gbGliYmlzb24uYQorCisjIE5vbi1nbnVsaWIgc291cmNlcyBpbiBCaXNvbidzIGludGVybmFsIGxpYnJhcnkuCitsaWJiaXNvbl9hX1NPVVJDRVMgPSBhcmdtYXRjaC5jIGJpbmFyeS1pby5oIGJpbmFyeS1pby5jIGJpdHJvdGF0ZS5oIFwKKwliaXRyb3RhdGUuYyBjLWN0eXBlLmggYy1jdHlwZS5jIGMtc3RyY2FzZS5oIGMtc3RyY2FzZWNtcC5jIFwKKwljLXN0cm5jYXNlY21wLmMgY2xvZXhlYy5jIGNsb3NlLXN0cmVhbS5jIGNsb3Nlb3V0LmMgZGlybmFtZS5jIFwKKwliYXNlbmFtZS5jIGRpcm5hbWUtbGdwbC5jIGJhc2VuYW1lLWxncGwuYyBzdHJpcHNsYXNoLmMgXAorCWV4aXRmYWlsLmMgZmF0YWwtc2lnbmFsLmggZmF0YWwtc2lnbmFsLmMgZmQtaG9vay5jIFwKKwlmZC1zYWZlci1mbGFnLmMgZHVwLXNhZmVyLWZsYWcuYyBmb3Blbi1zYWZlci5jIGdldHRleHQuaCBcCisJaGFzaC5jIGxvY2FsY2hhcnNldC5oIGxvY2FsY2hhcnNldC5jIGdsdGhyZWFkL2xvY2suaCBcCisJZ2x0aHJlYWQvbG9jay5jIG1hdGguYyBtYmNoYXIuYyBtYnNjaHIuYyBtYnNyY2hyLmMgbWJzd2lkdGguaCBcCisJbWJzd2lkdGguYyBtYnVpdGVyLmggbWJ1aXRlci5jIHBpcGUyLmMgcGlwZTItc2FmZXIuYyBcCisJcHJpbnRmLWZyZXhwLmMgcHJpbnRmLWZyZXhwbC5jIHByb2duYW1lLmggcHJvZ25hbWUuYyBcCisJcXVvdGVhcmcuYyBzaWctaGFuZGxlci5jIHNpemVfbWF4Lmggc3Bhd24tcGlwZS5oIHNwYXduLXBpcGUuYyBcCisJdzMyc3Bhd24uaCBzdGRpby5jIHN0cm5sZW4xLmggc3RybmxlbjEuYyBnbHRocmVhZC90aHJlYWRsaWIuYyBcCisJdW5pc3RkLmMgZHVwLXNhZmVyLmMgZmQtc2FmZXIuYyBwaXBlLXNhZmVyLmMgJChhbV9fYXBwZW5kXzEpIFwKKwl3YWl0LXByb2Nlc3MuaCB3YWl0LXByb2Nlc3MuYyB3Y3R5cGUtaC5jIHhtYWxsb2MuYyBcCisJeGFsbG9jLWRpZS5jIHhzaXplLmggeHNpemUuYyB4c3RybmR1cC5oIHhzdHJuZHVwLmMgZ2V0LWVycm5vLmggXAorCWdldC1lcnJuby5jICQoYml0c2V0c19zb3VyY2VzKSAkKGFkZGl0aW9uYWxfYml0c2V0c19zb3VyY2VzKSBcCisJJCh0aW1ldmFyc19zb3VyY2VzKQorbGliYmlzb25fYV9MSUJBREQgPSAkKGdsX0xJQk9CSlMpCitsaWJiaXNvbl9hX0RFUEVOREVOQ0lFUyA9ICQoZ2xfTElCT0JKUykKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyA9IGNhbGxvYy5jIGNsb3NlLmMgc3RyaXBzbGFzaC5jIGR1cDIuYyBcCisJZXJyb3IuYyBmY250bC5jIGZsb2F0LmMgaXRvbGQuYyBmb3Blbi5jIGZwZW5kaW5nLmMgZnByaW50Zi5jIFwKKwlmcmV4cC5jIGZyZXhwLmMgZnJleHBsLmMgZnNldGVyci5jIGZzdGF0LmMgZ2V0ZGVsaW0uYyBcCisJZ2V0ZHRhYmxlc2l6ZS5jIGdldGxpbmUuYyBnZXRvcHQuYyBnZXRvcHQxLmMgaXNuYW4uYyBpc25hbmQuYyBcCisJaXNuYW4uYyBpc25hbmQuYyBpc25hbi5jIGlzbmFuZi5jIGlzbmFuLmMgaXNuYW5mLmMgaXNuYW4uYyBcCisJaXNuYW5sLmMgaXNuYW4uYyBpc25hbmwuYyBpc3dibGFuay5jIGxkZXhwbC5jIG1hbGxvYy5jIFwKKwltYWxsb2MuYyBtYnJ0b3djLmMgbWJzaW5pdC5jIG1lbWNoci5jIG1zdmMtaW52YWwuYyBcCisJbXN2Yy1ub3Rocm93LmMgb2JzdGFjay5jIG9ic3RhY2tfcHJpbnRmLmMgb3Blbi5jIHBlcnJvci5jIFwKKwlzcGF3bmkuYyBzcGF3bl9mYWN0aW9uX2FkZGNsb3NlLmMgc3Bhd25fZmFjdGlvbl9hZGRkdXAyLmMgXAorCXNwYXduX2ZhY3Rpb25fYWRkb3Blbi5jIHNwYXduX2ZhY3Rpb25fZGVzdHJveS5jIFwKKwlzcGF3bl9mYWN0aW9uX2luaXQuYyBzcGF3bmF0dHJfZGVzdHJveS5jIHNwYXduYXR0cl9pbml0LmMgXAorCXNwYXduYXR0cl9zZXRmbGFncy5jIHNwYXduYXR0cl9zZXRzaWdtYXNrLmMgc3Bhd25wLmMgXAorCXByaW50Zi1mcmV4cC5jIHByaW50Zi5jIHJhaXNlLmMgcmF3bWVtY2hyLmMgcmVhbGxvYy5jIFwKKwlzaWdhY3Rpb24uYyBzaWduYml0ZC5jIHNpZ25iaXRmLmMgc2lnbmJpdGwuYyBzaWdwcm9jbWFzay5jIFwKKwlzbnByaW50Zi5jIHNwcmludGYuYyBzdGF0LmMgc3RwY3B5LmMgc3RyY2hybnVsLmMgc3RyZHVwLmMgXAorCXN0cmVycm9yLmMgc3RyZXJyb3Itb3ZlcnJpZGUuYyBzdHJlcnJvcl9yLmMgc3RybmR1cC5jIFwKKwlzdHJubGVuLmMgc3RydG9sLmMgc3RydG91bC5jIHN0cnZlcnNjbXAuYyB1bnNldGVudi5jIFwKKwlhc25wcmludGYuYyBwcmludGYtYXJncy5jIHByaW50Zi1wYXJzZS5jIHZhc25wcmludGYuYyBcCisJdmZwcmludGYuYyB2c25wcmludGYuYyB2c3ByaW50Zi5jIHdhaXRwaWQuYyB3Y3dpZHRoLmMgXAorCXhtZW1kdXAwLmMKK2NoYXJzZXRfYWxpYXMgPSAkKERFU1RESVIpJChsaWJkaXIpL2NoYXJzZXQuYWxpYXMKK2NoYXJzZXRfdG1wID0gJChERVNURElSKSQobGliZGlyKS9jaGFyc2V0LnRtcAorCisjIEJlY2F1c2UgdGhpcyBNYWtlZmlsZSBzbmlwcGV0IGRlZmluZXMgYSB2YXJpYWJsZSB1c2VkIGJ5IG90aGVyCisjIGdudWxpYiBNYWtlZmlsZSBzbmlwcGV0cywgaXQgbXVzdCBiZSBwcmVzZW50IGluIGFsbCBNYWtlZmlsZS5hbSB0aGF0CisjIG5lZWQgaXQuIFRoaXMgaXMgZW5zdXJlZCBieSB0aGUgYXBwbGljYWJpbGl0eSAnYWxsJyBkZWZpbmVkIGFib3ZlLgorX05PUkVUVVJOX0ggPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L19Ob3JldHVybi5oCitBUkdfTk9OTlVMTF9IID0gYXJnLW5vbm51bGwuaAorQ1hYREVGU19IID0gYysrZGVmcy5oCitXQVJOX09OX1VTRV9IID0gd2Fybi1vbi11c2UuaAorCisjIEltcGxlbWVudGF0aW9uIG9mIGJpdHNldHMuCiBiaXRzZXRzX3NvdXJjZXMgPSBcCiAgIGFiaXRzZXQuYyBhYml0c2V0LmggYmJpdHNldC5oIGJpdHNldC5jIGJpdHNldC5oIGJpdHNldF9zdGF0cy5jCVwKICAgYml0c2V0X3N0YXRzLmggYml0c2V0di5jIGJpdHNldHYuaCBlYml0c2V0LmMgZWJpdHNldC5oIGxiaXRzZXQuYwlcCkBAIC0yODAsMzIgKzE2MzUsMzUgQEAKIAogIyBBZGRpdGlvbmFsIGJpdHNldCBvcGVyYXRpb25zLgogYWRkaXRpb25hbF9iaXRzZXRzX3NvdXJjZXMgPSBcCi0JYml0c2V0di1wcmludC5oIGJpdHNldHYtcHJpbnQuYworICBiaXRzZXR2LXByaW50LmggYml0c2V0di1wcmludC5jCiAKIAogIyB0aW1ldmFycywgc3RvbGVuIGZyb20gR0NDLgogdGltZXZhcnNfc291cmNlcyA9IFwKLQl0aW1ldmFyLmggdGltZXZhci5jIHRpbWV2YXIuZGVmCisgIHRpbWV2YXIuaCB0aW1ldmFyLmMgdGltZXZhci5kZWYKIAotbGliYmlzb25fYV9MSUJBREQgPSAkKExJQk9CSlMpICQoQUxMT0NBKQotbGliYmlzb25fYV9ERVBFTkRFTkNJRVMgPSAkKGxpYmJpc29uX2FfTElCQUREKQotYWxsOiAkKEJVSUxUX1NPVVJDRVMpCisKKyMgVGhlIFlhY2MgY29tcGF0aWJpbGl0eSBsaWJyYXJ5LgorbGliX0xJQlJBUklFUyA9ICQoWUFDQ19MSUJSQVJZKQorRVhUUkFfTElCUkFSSUVTID0gbGlieS5hCitsaWJ5X2FfU09VUkNFUyA9IG1haW4uYyB5eWVycm9yLmMKK2FsbDogJChCVUlMVF9TT1VSQ0VTKSBjb25maWcuaAogCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFsbC1hbQogCiAuU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5vIC5vYmoKKy5TVUZGSVhFUzogLnNlZCAuc2luIC5jIC5vIC5vYmoKICQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvZ251bGliLm1rICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQogCUBmb3IgZGVwIGluICQ/OyBkbyBcCiAJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKIAkgICAgKiQkZGVwKikgXAotCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCi0JCSYmIGV4aXQgMDsgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKIAkgICAgICBleGl0IDE7OyBcCiAJICBlc2FjOyBcCiAJZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251ICBsaWIvTWFrZWZpbGUnOyBcCi0JY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSAgbGliL01ha2VmaWxlCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbml0cyBsaWIvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbml0cyBsaWIvTWFrZWZpbGUKIC5QUkVDSU9VUzogTWFrZWZpbGUKIE1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKIAlAY2FzZSAnJD8nIGluIFwKQEAgLTMxNSw2ICsxNjczLDcgQEAKIAkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKIAkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAogCWVzYWM7CiskKHNyY2RpcikvZ251bGliLm1rOgogCiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKIAljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKQEAgLTMyMyw0NiArMTY4Miw2NCBAQAogCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAogJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKIAljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK2NvbmZpZy5oOiBzdGFtcC1oMQorCUBpZiB0ZXN0ICEgLWYgJEA7IHRoZW4gcm0gLWYgc3RhbXAtaDE7IGVsc2UgOjsgZmkKKwlAaWYgdGVzdCAhIC1mICRAOyB0aGVuICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHN0YW1wLWgxOyBlbHNlIDo7IGZpCisKK3N0YW1wLWgxOiAkKHNyY2RpcikvY29uZmlnLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAcm0gLWYgc3RhbXAtaDEKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzIGxpYi9jb25maWcuaAorJChzcmNkaXIpL2NvbmZpZy5pbi5oOiAgJChhbV9fY29uZmlndXJlX2RlcHMpIAorCSgkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9IRUFERVIpKQorCXJtIC1mIHN0YW1wLWgxCisJdG91Y2ggJEAKKworZGlzdGNsZWFuLWhkcjoKKwktcm0gLWYgY29uZmlnLmggc3RhbXAtaDEKIGluc3RhbGwtbGliTElCUkFSSUVTOiAkKGxpYl9MSUJSQVJJRVMpCiAJQCQoTk9STUFMX0lOU1RBTEwpCi0JdGVzdCAteiAiJChsaWJkaXIpIiB8fCAkKG1rZGlyX3ApICIkKERFU1RESVIpJChsaWJkaXIpIgotCUBsaXN0PSckKGxpYl9MSUJSQVJJRVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJQGxpc3Q9JyQobGliX0xJQlJBUklFUyknOyB0ZXN0IC1uICIkKGxpYmRpcikiIHx8IGxpc3Q9OyBcCisJbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKIAkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgZj0kKGFtX19zdHJpcF9kaXIpIFwKLQkgICAgZWNobyAiICQobGliTElCUkFSSUVTX0lOU1RBTEwpICckJHAnICckKERFU1RESVIpJChsaWJkaXIpLyQkZiciOyBcCi0JICAgICQobGliTElCUkFSSUVTX0lOU1RBTEwpICIkJHAiICIkKERFU1RESVIpJChsaWJkaXIpLyQkZiI7IFwKKwkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAogCSAgZWxzZSA6OyBmaTsgXAotCWRvbmUKKwlkb25lOyBcCisJdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCisJICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQobGliZGlyKSciOyBcCisJICAkKE1LRElSX1ApICIkKERFU1RESVIpJChsaWJkaXIpIiB8fCBleGl0IDE7IFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRsaXN0MiAnJChERVNURElSKSQobGliZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRsaXN0MiAiJChERVNURElSKSQobGliZGlyKSIgfHwgZXhpdCAkJD87IH0KIAlAJChQT1NUX0lOU1RBTEwpCi0JQGxpc3Q9JyQobGliX0xJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwlAbGlzdD0nJChsaWJfTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQobGliZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKIAkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgcD0kKGFtX19zdHJpcF9kaXIpIFwKLQkgICAgZWNobyAiICQoUkFOTElCKSAnJChERVNURElSKSQobGliZGlyKS8kJHAnIjsgXAotCSAgICAkKFJBTkxJQikgIiQoREVTVERJUikkKGxpYmRpcikvJCRwIjsgXAorCSAgICAkKGFtX19zdHJpcF9kaXIpIFwKKwkgICAgZWNobyAiICggY2QgJyQoREVTVERJUikkKGxpYmRpciknICYmICQoUkFOTElCKSAkJGYgKSI7IFwKKwkgICAgKCBjZCAiJChERVNURElSKSQobGliZGlyKSIgJiYgJChSQU5MSUIpICQkZiApIHx8IGV4aXQgJCQ/OyBcCiAJICBlbHNlIDo7IGZpOyBcCiAJZG9uZQogCiB1bmluc3RhbGwtbGliTElCUkFSSUVTOgogCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQobGliX0xJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIHA9JChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgcm0gLWYgJyQoREVTVERJUikkKGxpYmRpcikvJCRwJyI7IFwKLQkgIHJtIC1mICIkKERFU1RESVIpJChsaWJkaXIpLyQkcCI7IFwKLQlkb25lCisJQGxpc3Q9JyQobGliX0xJQlJBUklFUyknOyB0ZXN0IC1uICIkKGxpYmRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwlkaXI9JyQoREVTVERJUikkKGxpYmRpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCiAKIGNsZWFuLWxpYkxJQlJBUklFUzoKIAktdGVzdCAteiAiJChsaWJfTElCUkFSSUVTKSIgfHwgcm0gLWYgJChsaWJfTElCUkFSSUVTKQogCiBjbGVhbi1ub2luc3RMSUJSQVJJRVM6CiAJLXRlc3QgLXogIiQobm9pbnN0X0xJQlJBUklFUykiIHx8IHJtIC1mICQobm9pbnN0X0xJQlJBUklFUykKLWxpYmJpc29uLmE6ICQobGliYmlzb25fYV9PQkpFQ1RTKSAkKGxpYmJpc29uX2FfREVQRU5ERU5DSUVTKSAKLQktcm0gLWYgbGliYmlzb24uYQotCSQobGliYmlzb25fYV9BUikgbGliYmlzb24uYSAkKGxpYmJpc29uX2FfT0JKRUNUUykgJChsaWJiaXNvbl9hX0xJQkFERCkKLQkkKFJBTkxJQikgbGliYmlzb24uYQotbGlieS5hOiAkKGxpYnlfYV9PQkpFQ1RTKSAkKGxpYnlfYV9ERVBFTkRFTkNJRVMpIAotCS1ybSAtZiBsaWJ5LmEKLQkkKGxpYnlfYV9BUikgbGlieS5hICQobGlieV9hX09CSkVDVFMpICQobGlieV9hX0xJQkFERCkKLQkkKFJBTkxJQikgbGlieS5hCitsaWJiaXNvbi5hOiAkKGxpYmJpc29uX2FfT0JKRUNUUykgJChsaWJiaXNvbl9hX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJiaXNvbl9hX0RFUEVOREVOQ0lFUykgCisJJChBTV9WX2F0KS1ybSAtZiBsaWJiaXNvbi5hCisJJChBTV9WX0FSKSQobGliYmlzb25fYV9BUikgbGliYmlzb24uYSAkKGxpYmJpc29uX2FfT0JKRUNUUykgJChsaWJiaXNvbl9hX0xJQkFERCkKKwkkKEFNX1ZfYXQpJChSQU5MSUIpIGxpYmJpc29uLmEKK2xpYnkuYTogJChsaWJ5X2FfT0JKRUNUUykgJChsaWJ5X2FfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYnlfYV9ERVBFTkRFTkNJRVMpIAorCSQoQU1fVl9hdCktcm0gLWYgbGlieS5hCisJJChBTV9WX0FSKSQobGlieV9hX0FSKSBsaWJ5LmEgJChsaWJ5X2FfT0JKRUNUUykgJChsaWJ5X2FfTElCQUREKQorCSQoQU1fVl9hdCkkKFJBTkxJQikgbGlieS5hCiAKIG1vc3RseWNsZWFuLWNvbXBpbGU6CiAJLXJtIC1mICouJChPQkpFWFQpCkBAIC0zNzAsMTQ3ICsxNzQ3LDMwOSBAQAogZGlzdGNsZWFuLWNvbXBpbGU6CiAJLXJtIC1mICoudGFiLmMKIAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQCQoREVQRElSKS9kaXJuYW1lLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAkKERFUERJUikvZHVwLXNhZmVyLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAkKERFUERJUikvZXJyb3IuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQCQoREVQRElSKS9leGl0ZmFpbC5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAJChERVBESVIpL2ZkLXNhZmVyLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAkKERFUERJUikvZm9wZW4tc2FmZXIuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQCQoREVQRElSKS9nZXRvcHQuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQCQoREVQRElSKS9nZXRvcHQxLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAkKERFUERJUikvaGFyZC1sb2NhbGUuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQCQoREVQRElSKS9oYXNoLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAkKERFUERJUikvbWFsbG9jLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAkKERFUERJUikvb2JzdGFjay5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAJChERVBESVIpL3BpcGUtc2FmZXIuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQCQoREVQRElSKS9xdW90ZS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAJChERVBESVIpL3F1b3RlYXJnLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAkKERFUERJUikvc3RwY3B5LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAkKERFUERJUikvc3RyZHVwLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAkKERFUERJUikvc3RyZXJyb3IuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQCQoREVQRElSKS9zdHJuZHVwLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAkKERFUERJUikvc3Rybmxlbi5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAJChERVBESVIpL3N0cnRvbC5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAJChERVBESVIpL3N0cnRvdWwuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQCQoREVQRElSKS9zdHJ2ZXJzY21wLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAkKERFUERJUikveG1hbGxvYy5Qb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYWJpdHNldC5Qb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYXJnbWF0Y2guUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2FzbnByaW50Zi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYmFzZW5hbWUtbGdwbC5Qb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYmFzZW5hbWUuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2JpbmFyeS1pby5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYml0cm90YXRlLlBvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9iaXRzZXQuUG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2JpdHNldF9zdGF0cy5Qb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYml0c2V0di1wcmludC5Qb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYml0c2V0di5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYy1jdHlwZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYy1zdHJjYXNlY21wLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jLXN0cm5jYXNlY21wLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jYWxsb2MuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Nsb2V4ZWMuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Nsb3NlLXN0cmVhbS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY2xvc2UuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Nsb3Nlb3V0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9kaXJuYW1lLWxncGwuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Rpcm5hbWUuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2R1cC1zYWZlci1mbGFnLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9kdXAtc2FmZXIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2R1cDIuUG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2ViaXRzZXQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Vycm9yLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9leGl0ZmFpbC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZmF0YWwtc2lnbmFsLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9mY250bC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZmQtaG9vay5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZmQtc2FmZXItZmxhZy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZmQtc2FmZXIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Zsb2F0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9mb3Blbi1zYWZlci5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZm9wZW4uUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2ZwZW5kaW5nLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9mcHJpbnRmLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9mcmV4cC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZnJleHBsLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9mc2V0ZXJyLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9mc3RhdC5Qb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ2V0LWVycm5vLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nZXRkZWxpbS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ2V0ZHRhYmxlc2l6ZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ2V0bGluZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ2V0b3B0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nZXRvcHQxLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9oYXNoLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9pc25hbi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvaXNuYW5kLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9pc25hbmYuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2lzbmFubC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvaXN3YmxhbmsuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2l0b2xkLlBvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sYml0c2V0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sZGV4cGwuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xvY2FsY2hhcnNldC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbG9jay5Qb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbWFpbi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbWFsbG9jLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tYXRoLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tYmNoYXIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL21icnRvd2MuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL21ic2Noci5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbWJzaW5pdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbWJzcmNoci5Qb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbWJzd2lkdGguUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL21idWl0ZXIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL21lbWNoci5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbXN2Yy1pbnZhbC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbXN2Yy1ub3Rocm93LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vYnN0YWNrLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vYnN0YWNrX3ByaW50Zi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3Blbi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcGVycm9yLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9waXBlLXNhZmVyLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9waXBlMi1zYWZlci5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcGlwZTIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3ByaW50Zi1hcmdzLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wcmludGYtZnJleHAuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3ByaW50Zi1mcmV4cGwuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3ByaW50Zi1wYXJzZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcHJpbnRmLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wcm9nbmFtZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcXVvdGVhcmcuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3JhaXNlLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9yYXdtZW1jaHIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3JlYWxsb2MuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NpZy1oYW5kbGVyLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zaWdhY3Rpb24uUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NpZ25iaXRkLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zaWduYml0Zi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc2lnbmJpdGwuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NpZ3Byb2NtYXNrLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zbnByaW50Zi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3Bhd24tcGlwZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3Bhd25fZmFjdGlvbl9hZGRjbG9zZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3Bhd25fZmFjdGlvbl9hZGRkdXAyLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zcGF3bl9mYWN0aW9uX2FkZG9wZW4uUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NwYXduX2ZhY3Rpb25fZGVzdHJveS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3Bhd25fZmFjdGlvbl9pbml0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zcGF3bmF0dHJfZGVzdHJveS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3Bhd25hdHRyX2luaXQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NwYXduYXR0cl9zZXRmbGFncy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3Bhd25hdHRyX3NldHNpZ21hc2suUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NwYXduaS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3Bhd25wLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zcHJpbnRmLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zdGF0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zdGRpby5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3RwY3B5LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zdHJjaHJudWwuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3N0cmR1cC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3RyZXJyb3Itb3ZlcnJpZGUuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3N0cmVycm9yLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zdHJlcnJvcl9yLlBvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zdHJpcHNsYXNoLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zdWJwaXBlLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zdHJuZHVwLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zdHJubGVuLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zdHJubGVuMS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3RydG9sLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zdHJ0b3VsLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zdHJ2ZXJzY21wLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90aHJlYWRsaWIuUG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3RpbWV2YXIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3VuaXN0ZC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdW5zZXRlbnYuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Zhc25wcmludGYuUG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3ZiaXRzZXQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3ZmcHJpbnRmLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS92c25wcmludGYuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3ZzcHJpbnRmLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS93YWl0LXByb2Nlc3MuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3dhaXRwaWQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3djdHlwZS1oLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS93Y3dpZHRoLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS93aWR0aC5Qb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikveGFsbG9jLWRpZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikveG1hbGxvYy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikveG1lbWR1cDAuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3hzaXplLlBvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS94c3RybmR1cC5Qb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikveXllcnJvci5Qb0BhbV9fcXVvdGVACiAKIC5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgJDw7IFwKLUBhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACiBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgJDwKIAogLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2A7IFwKLUBhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKLXVuaW5zdGFsbC1pbmZvLWFtOgorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCitsb2NrLm86IGdsdGhyZWFkL2xvY2suYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsb2NrLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xvY2suVHBvIC1jIC1vIGxvY2subyBgdGVzdCAtZiAnZ2x0aHJlYWQvbG9jay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BnbHRocmVhZC9sb2NrLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xvY2suVHBvICQoREVQRElSKS9sb2NrLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ2x0aHJlYWQvbG9jay5jJyBvYmplY3Q9J2xvY2subycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbG9jay5vIGB0ZXN0IC1mICdnbHRocmVhZC9sb2NrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdsdGhyZWFkL2xvY2suYworCitsb2NrLm9iajogZ2x0aHJlYWQvbG9jay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxvY2sub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9sb2NrLlRwbyAtYyAtbyBsb2NrLm9iaiBgaWYgdGVzdCAtZiAnZ2x0aHJlYWQvbG9jay5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dsdGhyZWFkL2xvY2suYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ2x0aHJlYWQvbG9jay5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9sb2NrLlRwbyAkKERFUERJUikvbG9jay5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dsdGhyZWFkL2xvY2suYycgb2JqZWN0PSdsb2NrLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbG9jay5vYmogYGlmIHRlc3QgLWYgJ2dsdGhyZWFkL2xvY2suYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnbHRocmVhZC9sb2NrLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dsdGhyZWFkL2xvY2suYyc7IGZpYAorCit0aHJlYWRsaWIubzogZ2x0aHJlYWQvdGhyZWFkbGliLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdGhyZWFkbGliLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3RocmVhZGxpYi5UcG8gLWMgLW8gdGhyZWFkbGliLm8gYHRlc3QgLWYgJ2dsdGhyZWFkL3RocmVhZGxpYi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BnbHRocmVhZC90aHJlYWRsaWIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdGhyZWFkbGliLlRwbyAkKERFUERJUikvdGhyZWFkbGliLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ2x0aHJlYWQvdGhyZWFkbGliLmMnIG9iamVjdD0ndGhyZWFkbGliLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHRocmVhZGxpYi5vIGB0ZXN0IC1mICdnbHRocmVhZC90aHJlYWRsaWIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2x0aHJlYWQvdGhyZWFkbGliLmMKKwordGhyZWFkbGliLm9iajogZ2x0aHJlYWQvdGhyZWFkbGliLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdGhyZWFkbGliLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvdGhyZWFkbGliLlRwbyAtYyAtbyB0aHJlYWRsaWIub2JqIGBpZiB0ZXN0IC1mICdnbHRocmVhZC90aHJlYWRsaWIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnbHRocmVhZC90aHJlYWRsaWIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ2x0aHJlYWQvdGhyZWFkbGliLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3RocmVhZGxpYi5UcG8gJChERVBESVIpL3RocmVhZGxpYi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dsdGhyZWFkL3RocmVhZGxpYi5jJyBvYmplY3Q9J3RocmVhZGxpYi5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHRocmVhZGxpYi5vYmogYGlmIHRlc3QgLWYgJ2dsdGhyZWFkL3RocmVhZGxpYi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dsdGhyZWFkL3RocmVhZGxpYi5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nbHRocmVhZC90aHJlYWRsaWIuYyc7IGZpYAorCit3aWR0aC5vOiB1bml3aWR0aC93aWR0aC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHdpZHRoLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3dpZHRoLlRwbyAtYyAtbyB3aWR0aC5vIGB0ZXN0IC1mICd1bml3aWR0aC93aWR0aC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B1bml3aWR0aC93aWR0aC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS93aWR0aC5UcG8gJChERVBESVIpL3dpZHRoLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndW5pd2lkdGgvd2lkdGguYycgb2JqZWN0PSd3aWR0aC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB3aWR0aC5vIGB0ZXN0IC1mICd1bml3aWR0aC93aWR0aC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B1bml3aWR0aC93aWR0aC5jCisKK3dpZHRoLm9iajogdW5pd2lkdGgvd2lkdGguYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCB3aWR0aC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL3dpZHRoLlRwbyAtYyAtbyB3aWR0aC5vYmogYGlmIHRlc3QgLWYgJ3VuaXdpZHRoL3dpZHRoLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndW5pd2lkdGgvd2lkdGguYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdW5pd2lkdGgvd2lkdGguYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvd2lkdGguVHBvICQoREVQRElSKS93aWR0aC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3VuaXdpZHRoL3dpZHRoLmMnIG9iamVjdD0nd2lkdGgub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB3aWR0aC5vYmogYGlmIHRlc3QgLWYgJ3VuaXdpZHRoL3dpZHRoLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndW5pd2lkdGgvd2lkdGguYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdW5pd2lkdGgvd2lkdGguYyc7IGZpYAogCiBJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQogCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCiAJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKIAkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCiAJICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCiAJbWtpZCAtZklEICQkdW5pcXVlCiB0YWdzOiBUQUdTCiAKLVRBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgY29uZmlnLmluLmggJChUQUdTX0RFUEVOREVOQ0lFUykgXAogCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQl0YWdzPTsgXAorCXNldCB4OyBcCiAJaGVyZT1gcHdkYDsgXAotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSBjb25maWcuaW4uaCAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCiAJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKIAkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCiAJICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCiAJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICQkdGFncyAkJHVuaXF1ZTsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCiAJZmkKIGN0YWdzOiBDVEFHUwotQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKK0NUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpIGNvbmZpZy5pbi5oICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKIAkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JdGFncz07IFwKLQloZXJlPWBwd2RgOyBcCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpIGNvbmZpZy5pbi5oICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKIAl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAogCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKIAkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKIAkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdGFncyAkJHVuaXF1ZQorCSAgICAgJCR1bmlxdWUKIAogR1RBR1M6CiAJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmIGNkICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworY3Njb3BlbGlzdDogICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCknOyBcCisJY2FzZSAiJChzcmNkaXIpIiBpbiBcCisJICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCisJICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAorCWVzYWM7IFwKKwlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAorCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAorCSAgZWxzZSBcCisJICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCisJICBmaTsgXAorCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwogCiBkaXN0Y2xlYW4tdGFnczoKIAktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwogCiBkaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCi0JICBjYXNlICQkZmlsZSBpbiBcCi0JICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0JICAgICQodG9wX3NyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3wiYDs7IFwKLQkgIGVzYWM7IFwKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAogCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAotCSAgICBkaXI9Ii8kJGRpciI7IFwKLQkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAotCSAgZWxzZSBcCi0JICAgIGRpcj0nJzsgXAotCSAgZmk7IFwKIAkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKIAkgICAgZmk7IFwKLQkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKIAkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCiAJICAgIHx8IGV4aXQgMTsgXAogCSAgZmk7IFwKIAlkb25lCiBjaGVjay1hbTogYWxsLWFtCiBjaGVjazogJChCVUlMVF9TT1VSQ0VTKQogCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTElCUkFSSUVTKQorYWxsLWFtOiBNYWtlZmlsZSAkKExJQlJBUklFUykgY29uZmlnLmggYWxsLWxvY2FsCiBpbnN0YWxsZGlyczoKIAlmb3IgZGlyIGluICIkKERFU1RESVIpJChsaWJkaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQobWtkaXJfcCkgIiQkZGlyIjsgXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAogCWRvbmUKIGluc3RhbGw6ICQoQlVJTFRfU09VUkNFUykKIAkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWFtCkBAIC01MjMsMTcgKzIwNjIsMjQgQEAKIAogaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KIGluc3RhbGwtc3RyaXA6Ci0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCi0JICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCisJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAgIGluc3RhbGw7IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorCWZpCiBtb3N0bHljbGVhbi1nZW5lcmljOgogCS10ZXN0IC16ICIkKE1PU1RMWUNMRUFORklMRVMpIiB8fCBybSAtZiAkKE1PU1RMWUNMRUFORklMRVMpCiAKIGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKIAogZGlzdGNsZWFuLWdlbmVyaWM6CiAJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCiAKIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKIAlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCkBAIC01NDUsMTAgKzIwOTEsMTAgQEAKIAltb3N0bHljbGVhbi1hbQogCiBkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgJChERVBESVIpIC4vJChERVBESVIpCisJLXJtIC1yZiAuLyQoREVQRElSKQogCS1ybSAtZiBNYWtlZmlsZQogZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKKwlkaXN0Y2xlYW4taGRyIGRpc3RjbGVhbi1sb2NhbCBkaXN0Y2xlYW4tdGFncwogCiBkdmk6IGR2aS1hbQogCkBAIC01NTYsMjggKzIxMDIsNDkgQEAKIAogaHRtbDogaHRtbC1hbQogCitodG1sLWFtOgorCiBpbmZvOiBpbmZvLWFtCiAKIGluZm8tYW06CiAKIGluc3RhbGwtZGF0YS1hbToKIAotaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLWxpYkxJQlJBUklFUworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtZXhlYy1sb2NhbCBpbnN0YWxsLWxpYkxJQlJBUklFUworCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWh0bWwtYW06CiAKIGluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCiAKK2luc3RhbGwtaW5mby1hbToKKwogaW5zdGFsbC1tYW46CiAKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOgorCiBpbnN0YWxsY2hlY2stYW06CiAKIG1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmICQoREVQRElSKSAuLyQoREVQRElSKQorCS1ybSAtcmYgLi8kKERFUERJUikKIAktcm0gLWYgTWFrZWZpbGUKIG1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKIAogbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCiAKLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxvY2FsCiAKIHBkZjogcGRmLWFtCiAKQEAgLTU4NywzNyArMjE1NCwxNDQzIEBACiAKIHBzLWFtOgogCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1pbmZvLWFtIHVuaW5zdGFsbC1saWJMSUJSQVJJRVMKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWxpYkxJQlJBUklFUyB1bmluc3RhbGwtbG9jYWwKIAotLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYkxJQlJBUklFUyBjbGVhbi1ub2luc3RMSUJSQVJJRVMgY3RhZ3MgZGlzdGNsZWFuIFwKLQlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBcCisuTUFLRTogYWxsIGNoZWNrIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBhbGwtbG9jYWwgY2hlY2sgY2hlY2stYW0gY2xlYW4gXAorCWNsZWFuLWdlbmVyaWMgY2xlYW4tbGliTElCUkFSSUVTIGNsZWFuLW5vaW5zdExJQlJBUklFUyBcCisJY3Njb3BlbGlzdCBjdGFncyBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1oZHIgZGlzdGNsZWFuLWxvY2FsIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIFwKIAlkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAotCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBcCi0JaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLWxpYkxJQlJBUklFUyBpbnN0YWxsLW1hbiBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAotCXRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtaW5mby1hbSBcCi0JdW5pbnN0YWxsLWxpYkxJQlJBUklFUworCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gXAorCWluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1leGVjLWxvY2FsIGluc3RhbGwtaHRtbCBcCisJaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gXAorCWluc3RhbGwtbGliTElCUkFSSUVTIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKKwlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1sb2NhbCBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgXAorCXVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWxpYkxJQlJBUklFUyB1bmluc3RhbGwtbG9jYWwKIAogCisjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBjcmVhdGUgPGFsbG9jYS5oPiB3aGVuIHRoZSBzeXN0ZW0KKyMgZG9lc24ndCBoYXZlIG9uZSB0aGF0IHdvcmtzIHdpdGggdGhlIGdpdmVuIGNvbXBpbGVyLgorQEdMX0dFTkVSQVRFX0FMTE9DQV9IX1RSVUVAYWxsb2NhLmg6IGFsbG9jYS5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCitAR0xfR0VORVJBVEVfQUxMT0NBX0hfVFJVRUAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKK0BHTF9HRU5FUkFURV9BTExPQ0FfSF9UUlVFQAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCitAR0xfR0VORVJBVEVfQUxMT0NBX0hfVFJVRUAJICBjYXQgJChzcmNkaXIpL2FsbG9jYS5pbi5oOyBcCitAR0xfR0VORVJBVEVfQUxMT0NBX0hfVFJVRUAJfSA+ICRALXQgJiYgXAorQEdMX0dFTkVSQVRFX0FMTE9DQV9IX1RSVUVACW12IC1mICRALXQgJEAKK0BHTF9HRU5FUkFURV9BTExPQ0FfSF9GQUxTRUBhbGxvY2EuaDogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKK0BHTF9HRU5FUkFURV9BTExPQ0FfSF9GQUxTRUAJcm0gLWYgJEAKKworIyBMaXN0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIEdOVSBtYWtlZmlsZSBjb252ZW50aW9ucywgYW5kCisjIHByb3ZpZGVkIGJ5IGF1dG9jb25mIDIuNTljKy4KKyMgVGhlIEF1dG9tYWtlLWRlZmluZWQgcGtnKiBtYWNyb3MgYXJlIGFwcGVuZGVkLCBpbiB0aGUgb3JkZXIKKyMgbGlzdGVkIGluIHRoZSBBdXRvbWFrZSAxLjEwYSsgZG9jdW1lbnRhdGlvbi4KK2NvbmZpZ21ha2UuaDogTWFrZWZpbGUKKwkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJiYgXAorCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKKwkgIGVjaG8gJyNkZWZpbmUgUFJFRklYICIkKHByZWZpeCkiJzsgXAorCSAgZWNobyAnI2RlZmluZSBFWEVDX1BSRUZJWCAiJChleGVjX3ByZWZpeCkiJzsgXAorCSAgZWNobyAnI2RlZmluZSBCSU5ESVIgIiQoYmluZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIFNCSU5ESVIgIiQoc2JpbmRpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBMSUJFWEVDRElSICIkKGxpYmV4ZWNkaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgREFUQVJPT1RESVIgIiQoZGF0YXJvb3RkaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgREFUQURJUiAiJChkYXRhZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIFNZU0NPTkZESVIgIiQoc3lzY29uZmRpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBTSEFSRURTVEFURURJUiAiJChzaGFyZWRzdGF0ZWRpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBMT0NBTFNUQVRFRElSICIkKGxvY2Fsc3RhdGVkaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgSU5DTFVERURJUiAiJChpbmNsdWRlZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIE9MRElOQ0xVREVESVIgIiQob2xkaW5jbHVkZWRpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBET0NESVIgIiQoZG9jZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIElORk9ESVIgIiQoaW5mb2RpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBIVE1MRElSICIkKGh0bWxkaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgRFZJRElSICIkKGR2aWRpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBQREZESVIgIiQocGRmZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIFBTRElSICIkKHBzZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIExJQkRJUiAiJChsaWJkaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgTElTUERJUiAiJChsaXNwZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIExPQ0FMRURJUiAiJChsb2NhbGVkaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgTUFORElSICIkKG1hbmRpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBNQU5FWFQgIiQobWFuZXh0KSInOyBcCisJICBlY2hvICcjZGVmaW5lIFBLR0RBVEFESVIgIiQocGtnZGF0YWRpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBQS0dJTkNMVURFRElSICIkKHBrZ2luY2x1ZGVkaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgUEtHTElCRElSICIkKHBrZ2xpYmRpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBQS0dMSUJFWEVDRElSICIkKHBrZ2xpYmV4ZWNkaXIpIic7IFwKKwl9IHwgc2VkICcvIiIvZCcgPiAkQC10ICYmIFwKKwltdiAtZiAkQC10ICRACisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8ZXJybm8uaD4gd2hlbiB0aGUgc3lzdGVtCisjIGRvZXNuJ3QgaGF2ZSBvbmUgdGhhdCBpcyBQT1NJWCBjb21wbGlhbnQuCitAR0xfR0VORVJBVEVfRVJSTk9fSF9UUlVFQGVycm5vLmg6IGVycm5vLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKK0BHTF9HRU5FUkFURV9FUlJOT19IX1RSVUVACSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCitAR0xfR0VORVJBVEVfRVJSTk9fSF9UUlVFQAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKK0BHTF9HRU5FUkFURV9FUlJOT19IX1RSVUVACSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCitAR0xfR0VORVJBVEVfRVJSTk9fSF9UUlVFQAkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKK0BHTF9HRU5FUkFURV9FUlJOT19IX1RSVUVACSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorQEdMX0dFTkVSQVRFX0VSUk5PX0hfVFJVRUAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCitAR0xfR0VORVJBVEVfRVJSTk9fSF9UUlVFQAkgICAgICAtZSAnc3xAJydORVhUX0VSUk5PX0gnJ0B8JChORVhUX0VSUk5PX0gpfGcnIFwKK0BHTF9HRU5FUkFURV9FUlJOT19IX1RSVUVACSAgICAgIC1lICdzfEAnJ0VNVUxUSUhPUF9ISURERU4nJ0B8JChFTVVMVElIT1BfSElEREVOKXxnJyBcCitAR0xfR0VORVJBVEVfRVJSTk9fSF9UUlVFQAkgICAgICAtZSAnc3xAJydFTVVMVElIT1BfVkFMVUUnJ0B8JChFTVVMVElIT1BfVkFMVUUpfGcnIFwKK0BHTF9HRU5FUkFURV9FUlJOT19IX1RSVUVACSAgICAgIC1lICdzfEAnJ0VOT0xJTktfSElEREVOJydAfCQoRU5PTElOS19ISURERU4pfGcnIFwKK0BHTF9HRU5FUkFURV9FUlJOT19IX1RSVUVACSAgICAgIC1lICdzfEAnJ0VOT0xJTktfVkFMVUUnJ0B8JChFTk9MSU5LX1ZBTFVFKXxnJyBcCitAR0xfR0VORVJBVEVfRVJSTk9fSF9UUlVFQAkgICAgICAtZSAnc3xAJydFT1ZFUkZMT1dfSElEREVOJydAfCQoRU9WRVJGTE9XX0hJRERFTil8ZycgXAorQEdMX0dFTkVSQVRFX0VSUk5PX0hfVFJVRUAJICAgICAgLWUgJ3N8QCcnRU9WRVJGTE9XX1ZBTFVFJydAfCQoRU9WRVJGTE9XX1ZBTFVFKXxnJyBcCitAR0xfR0VORVJBVEVfRVJSTk9fSF9UUlVFQAkgICAgICA8ICQoc3JjZGlyKS9lcnJuby5pbi5oOyBcCitAR0xfR0VORVJBVEVfRVJSTk9fSF9UUlVFQAl9ID4gJEAtdCAmJiBcCitAR0xfR0VORVJBVEVfRVJSTk9fSF9UUlVFQAltdiAkQC10ICRACitAR0xfR0VORVJBVEVfRVJSTk9fSF9GQUxTRUBlcnJuby5oOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworQEdMX0dFTkVSQVRFX0VSUk5PX0hfRkFMU0VACXJtIC1mICRACisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8ZmNudGwuaD4gd2hlbiB0aGUgc3lzdGVtCisjIGRvZXNuJ3QgaGF2ZSBvbmUgdGhhdCB3b3JrcyB3aXRoIHRoZSBnaXZlbiBjb21waWxlci4KK2ZjbnRsLmg6IGZjbnRsLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJzsgXAorCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCisJICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnTkVYVF9GQ05UTF9IJydAfCQoTkVYVF9GQ05UTF9IKXxnJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0ZDTlRMJydALyQoR05VTElCX0ZDTlRMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX05PTkJMT0NLSU5HJydALyQoR05VTElCX05PTkJMT0NLSU5HKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX09QRU4nJ0AvJChHTlVMSUJfT1BFTikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9PUEVOQVQnJ0AvJChHTlVMSUJfT1BFTkFUKS9nJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9GQ05UTCcnQHwkKEhBVkVfRkNOVEwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX09QRU5BVCcnQHwkKEhBVkVfT1BFTkFUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9GQ05UTCcnQHwkKFJFUExBQ0VfRkNOVEwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX09QRU4nJ0B8JChSRVBMQUNFX09QRU4pfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX09QRU5BVCcnQHwkKFJFUExBQ0VfT1BFTkFUKXxnJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBML3IgJChDWFhERUZTX0gpJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVMTC9yICQoQVJHX05PTk5VTExfSCknIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFL3IgJChXQVJOX09OX1VTRV9IKScgXAorCSAgICAgIDwgJChzcmNkaXIpL2ZjbnRsLmluLmg7IFwKKwl9ID4gJEAtdCAmJiBcCisJbXYgJEAtdCAkQAorCisjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBjcmVhdGUgPGZsb2F0Lmg+IHdoZW4gdGhlIHN5c3RlbQorIyBkb2Vzbid0IGhhdmUgb25lIHRoYXQgd29ya3Mgd2l0aCB0aGUgZ2l2ZW4gY29tcGlsZXIuCitAR0xfR0VORVJBVEVfRkxPQVRfSF9UUlVFQGZsb2F0Lmg6IGZsb2F0LmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKK0BHTF9HRU5FUkFURV9GTE9BVF9IX1RSVUVACSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCitAR0xfR0VORVJBVEVfRkxPQVRfSF9UUlVFQAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKK0BHTF9HRU5FUkFURV9GTE9BVF9IX1RSVUVACSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCitAR0xfR0VORVJBVEVfRkxPQVRfSF9UUlVFQAkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKK0BHTF9HRU5FUkFURV9GTE9BVF9IX1RSVUVACSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorQEdMX0dFTkVSQVRFX0ZMT0FUX0hfVFJVRUAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCitAR0xfR0VORVJBVEVfRkxPQVRfSF9UUlVFQAkgICAgICAtZSAnc3xAJydORVhUX0ZMT0FUX0gnJ0B8JChORVhUX0ZMT0FUX0gpfGcnIFwKK0BHTF9HRU5FUkFURV9GTE9BVF9IX1RSVUVACSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfSVRPTEQnJ0B8JChSRVBMQUNFX0lUT0xEKXxnJyBcCitAR0xfR0VORVJBVEVfRkxPQVRfSF9UUlVFQAkgICAgICA8ICQoc3JjZGlyKS9mbG9hdC5pbi5oOyBcCitAR0xfR0VORVJBVEVfRkxPQVRfSF9UUlVFQAl9ID4gJEAtdCAmJiBcCitAR0xfR0VORVJBVEVfRkxPQVRfSF9UUlVFQAltdiAkQC10ICRACitAR0xfR0VORVJBVEVfRkxPQVRfSF9GQUxTRUBmbG9hdC5oOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworQEdMX0dFTkVSQVRFX0ZMT0FUX0hfRkFMU0VACXJtIC1mICRACisKICMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8Z2V0b3B0Lmg+IHdoZW4gdGhlIHN5c3RlbQogIyBkb2Vzbid0IGhhdmUgb25lIHRoYXQgd29ya3Mgd2l0aCB0aGUgZ2l2ZW4gY29tcGlsZXIuCi1nZXRvcHQuaDogZ2V0b3B0Xy5oCi0JY3AgJChzcmNkaXIpL2dldG9wdF8uaCAkQC10CitnZXRvcHQuaDogZ2V0b3B0LmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChBUkdfTk9OTlVMTF9IKQorCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJzsgXAorCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9HRVRPUFRfSCcnQHwkKEhBVkVfR0VUT1BUX0gpfGcnIFwKKwkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKwkgICAgICAtZSAnc3xAJydORVhUX0dFVE9QVF9IJydAfCQoTkVYVF9HRVRPUFRfSCl8ZycgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwvciAkKEFSR19OT05OVUxMX0gpJyBcCisJICAgICAgPCAkKHNyY2RpcikvZ2V0b3B0LmluLmg7IFwKKwl9ID4gJEAtdCAmJiBcCisJbXYgLWYgJEAtdCAkQAorCitkaXN0Y2xlYW4tbG9jYWw6IGNsZWFuLUdOVW1ha2VmaWxlCitjbGVhbi1HTlVtYWtlZmlsZToKKwl0ZXN0ICckKHNyY2RpciknID0gLiB8fCBybSAtZiAkKHRvcF9idWlsZGRpcikvR05VbWFrZWZpbGUKKworIyBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIgdG8gY3JlYXRlIDxpbnR0eXBlcy5oPiB3aGVuIHRoZSBzeXN0ZW0KKyMgZG9lc24ndCBoYXZlIG9uZSB0aGF0IHdvcmtzIHdpdGggdGhlIGdpdmVuIGNvbXBpbGVyLgoraW50dHlwZXMuaDogaW50dHlwZXMuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKENYWERFRlNfSCkgJChXQVJOX09OX1VTRV9IKSAkKEFSR19OT05OVUxMX0gpCisJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKwl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCisJICBzZWQgLWUgJ3MvQCcnSEFWRV9JTlRUWVBFU19IJydALyQoSEFWRV9JTlRUWVBFU19IKS9nJyBcCisJICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnTkVYVF9JTlRUWVBFU19IJydAfCQoTkVYVF9JTlRUWVBFU19IKXxnJyBcCisJICAgICAgLWUgJ3MvQCcnUFJJX01BQ1JPU19CUk9LRU4nJ0AvJChQUklfTUFDUk9TX0JST0tFTikvZycgXAorCSAgICAgIC1lICdzL0AnJ0FQUExFX1VOSVZFUlNBTF9CVUlMRCcnQC8kKEFQUExFX1VOSVZFUlNBTF9CVUlMRCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0hBVkVfTE9OR19MT05HX0lOVCcnQC8kKEhBVkVfTE9OR19MT05HX0lOVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0hBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCcnQC8kKEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ1BSSVBUUl9QUkVGSVgnJ0AvJChQUklQVFJfUFJFRklYKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0lNQVhBQlMnJ0AvJChHTlVMSUJfSU1BWEFCUykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9JTUFYRElWJydALyQoR05VTElCX0lNQVhESVYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSVE9JTUFYJydALyQoR05VTElCX1NUUlRPSU1BWCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJUT1VNQVgnJ0AvJChHTlVMSUJfU1RSVE9VTUFYKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnSEFWRV9ERUNMX0lNQVhBQlMnJ0AvJChIQVZFX0RFQ0xfSU1BWEFCUykvZycgXAorCSAgICAgIC1lICdzL0AnJ0hBVkVfREVDTF9JTUFYRElWJydALyQoSEFWRV9ERUNMX0lNQVhESVYpL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX0RFQ0xfU1RSVE9JTUFYJydALyQoSEFWRV9ERUNMX1NUUlRPSU1BWCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0hBVkVfREVDTF9TVFJUT1VNQVgnJ0AvJChIQVZFX0RFQ0xfU1RSVE9VTUFYKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnUkVQTEFDRV9TVFJUT0lNQVgnJ0AvJChSRVBMQUNFX1NUUlRPSU1BWCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0lOVDMyX01BWF9MVF9JTlRNQVhfTUFYJydALyQoSU5UMzJfTUFYX0xUX0lOVE1BWF9NQVgpL2cnIFwKKwkgICAgICAtZSAncy9AJydJTlQ2NF9NQVhfRVFfTE9OR19NQVgnJ0AvJChJTlQ2NF9NQVhfRVFfTE9OR19NQVgpL2cnIFwKKwkgICAgICAtZSAncy9AJydVSU5UMzJfTUFYX0xUX1VJTlRNQVhfTUFYJydALyQoVUlOVDMyX01BWF9MVF9VSU5UTUFYX01BWCkvZycgXAorCSAgICAgIC1lICdzL0AnJ1VJTlQ2NF9NQVhfRVFfVUxPTkdfTUFYJydALyQoVUlOVDY0X01BWF9FUV9VTE9OR19NQVgpL2cnIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwvciAkKENYWERFRlNfSCknIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxML3IgJChBUkdfTk9OTlVMTF9IKScgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UvciAkKFdBUk5fT05fVVNFX0gpJyBcCisJICAgICAgPCAkKHNyY2RpcikvaW50dHlwZXMuaW4uaDsgXAorCX0gPiAkQC10ICYmIFwKKwltdiAkQC10ICRACisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGluc3RhbGwgYSBzaW1wbGUgZmlsZSBpbiAkKGxpYmRpcikKKyMgd2hpY2ggaXMgc2hhcmVkIHdpdGggb3RoZXIgaW5zdGFsbGVkIHBhY2thZ2VzLiBXZSB1c2UgYSBsaXN0IG9mIHJlZmVyZW5jaW5nCisjIHBhY2thZ2VzIHNvIHRoYXQgIm1ha2UgdW5pbnN0YWxsIiB3aWxsIHJlbW92ZSB0aGUgZmlsZSBpZiBhbmQgb25seSBpZiBpdAorIyBpcyBub3QgdXNlZCBieSBhbm90aGVyIGluc3RhbGxlZCBwYWNrYWdlLgorIyBPbiBzeXN0ZW1zIHdpdGggZ2xpYmMtMi4xIG9yIG5ld2VyLCB0aGUgZmlsZSBpcyByZWR1bmRhbnQsIHRoZXJlZm9yZSB3ZQorIyBhdm9pZCBpbnN0YWxsaW5nIGl0LgorCithbGwtbG9jYWw6IGNoYXJzZXQuYWxpYXMgcmVmLWFkZC5zZWQgcmVmLWRlbC5zZWQKK2luc3RhbGwtZXhlYy1sb2NhbDogaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldAoraW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisJaWYgdGVzdCAkKEdMSUJDMjEpID0gbm87IHRoZW4gXAorCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorCSAgICBkYXJ3aW5bNTZdKikgXAorCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisJICAgICopIFwKKwkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCisJICBlc2FjIDsgXAorCWVsc2UgXAorCSAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDsgXAorCWZpIDsgXAorCWlmICQkbmVlZF9jaGFyc2V0X2FsaWFzOyB0aGVuIFwKKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKSA7IFwKKwlmaSA7IFwKKwlpZiB0ZXN0IC1mICQoY2hhcnNldF9hbGlhcyk7IHRoZW4gXAorCSAgc2VkIC1mIHJlZi1hZGQuc2VkICQoY2hhcnNldF9hbGlhcykgPiAkKGNoYXJzZXRfdG1wKSA7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkKGNoYXJzZXRfdG1wKSAkKGNoYXJzZXRfYWxpYXMpIDsgXAorCSAgcm0gLWYgJChjaGFyc2V0X3RtcCkgOyBcCisJZWxzZSBcCisJICBpZiAkJG5lZWRfY2hhcnNldF9hbGlhczsgdGhlbiBcCisJICAgIHNlZCAtZiByZWYtYWRkLnNlZCBjaGFyc2V0LmFsaWFzID4gJChjaGFyc2V0X3RtcCkgOyBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAkKGNoYXJzZXRfdG1wKSAkKGNoYXJzZXRfYWxpYXMpIDsgXAorCSAgICBybSAtZiAkKGNoYXJzZXRfdG1wKSA7IFwKKwkgIGZpIDsgXAorCWZpCisKK3VuaW5zdGFsbC1sb2NhbDogdW5pbnN0YWxsLWxvY2FsY2hhcnNldAordW5pbnN0YWxsLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisJaWYgdGVzdCAtZiAkKGNoYXJzZXRfYWxpYXMpOyB0aGVuIFwKKwkgIHNlZCAtZiByZWYtZGVsLnNlZCAkKGNoYXJzZXRfYWxpYXMpID4gJChjaGFyc2V0X3RtcCk7IFwKKwkgIGlmIGdyZXAgJ14jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTogJCQnICQoY2hhcnNldF90bXApIFwKKwkgICAgICA+IC9kZXYvbnVsbDsgdGhlbiBcCisJICAgIHJtIC1mICQoY2hhcnNldF9hbGlhcyk7IFwKKwkgIGVsc2UgXAorCSAgICAkKElOU1RBTExfREFUQSkgJChjaGFyc2V0X3RtcCkgJChjaGFyc2V0X2FsaWFzKTsgXAorCSAgZmk7IFwKKwkgIHJtIC1mICQoY2hhcnNldF90bXApOyBcCisJZmkKKworY2hhcnNldC5hbGlhczogY29uZmlnLmNoYXJzZXQKKwkkKEFNX1ZfR0VOKXJtIC1mIHQtJEAgJEAgJiYgXAorCSQoU0hFTEwpICQoc3JjZGlyKS9jb25maWcuY2hhcnNldCAnJChob3N0KScgPiB0LSRAICYmIFwKKwltdiB0LSRAICRACisuc2luLnNlZDoKKwkkKEFNX1ZfR0VOKXJtIC1mIHQtJEAgJEAgJiYgXAorCXNlZCAtZSAnL14jL2QnIC1lICdzL0AnJ1BBQ0tBR0UnJ0AvJChQQUNLQUdFKS9nJyAkPCA+IHQtJEAgJiYgXAorCW12IHQtJEAgJEAKKworIyBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIgdG8gY3JlYXRlIDxtYXRoLmg+IHdoZW4gdGhlIHN5c3RlbQorIyBkb2Vzbid0IGhhdmUgb25lIHRoYXQgd29ya3Mgd2l0aCB0aGUgZ2l2ZW4gY29tcGlsZXIuCittYXRoLmg6IG1hdGguaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKENYWERFRlNfSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCisJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKwl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKKwkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkUnJ0B8JChJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfTUFUSF9IJydAfCQoTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfTUFUSF9IKXxnJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0FDT1NGJydALyQoR05VTElCX0FDT1NGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0FDT1NMJydALyQoR05VTElCX0FDT1NMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0FTSU5GJydALyQoR05VTElCX0FTSU5GKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0FTSU5MJydALyQoR05VTElCX0FTSU5MKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0FUQU5GJydALyQoR05VTElCX0FUQU5GKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0FUQU5MJydALyQoR05VTElCX0FUQU5MKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0FUQU4yRicnQC8kKEdOVUxJQl9BVEFOMkYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfQ0JSVCcnQC8kKEdOVUxJQl9DQlJUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0NCUlRGJydALyQoR05VTElCX0NCUlRGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0NCUlRMJydALyQoR05VTElCX0NCUlRMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0NFSUwnJ0AvJChHTlVMSUJfQ0VJTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9DRUlMRicnQC8kKEdOVUxJQl9DRUlMRikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9DRUlMTCcnQC8kKEdOVUxJQl9DRUlMTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9DT1BZU0lHTicnQC8kKEdOVUxJQl9DT1BZU0lHTikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9DT1BZU0lHTkYnJ0AvJChHTlVMSUJfQ09QWVNJR05GKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0NPUFlTSUdOTCcnQC8kKEdOVUxJQl9DT1BZU0lHTkwpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfQ09TRicnQC8kKEdOVUxJQl9DT1NGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0NPU0wnJ0AvJChHTlVMSUJfQ09TTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9DT1NIRicnQC8kKEdOVUxJQl9DT1NIRikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9FWFBGJydALyQoR05VTElCX0VYUEYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRVhQTCcnQC8kKEdOVUxJQl9FWFBMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0VYUDInJ0AvJChHTlVMSUJfRVhQMikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9FWFAyRicnQC8kKEdOVUxJQl9FWFAyRikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9FWFAyTCcnQC8kKEdOVUxJQl9FWFAyTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9FWFBNMScnQC8kKEdOVUxJQl9FWFBNMSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9FWFBNMUYnJ0AvJChHTlVMSUJfRVhQTTFGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0VYUE0xTCcnQC8kKEdOVUxJQl9FWFBNMUwpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRkFCU0YnJ0AvJChHTlVMSUJfRkFCU0YpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRkFCU0wnJ0AvJChHTlVMSUJfRkFCU0wpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRkxPT1InJ0AvJChHTlVMSUJfRkxPT1IpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRkxPT1JGJydALyQoR05VTElCX0ZMT09SRikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GTE9PUkwnJ0AvJChHTlVMSUJfRkxPT1JMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0ZNQScnQC8kKEdOVUxJQl9GTUEpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRk1BRicnQC8kKEdOVUxJQl9GTUFGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0ZNQUwnJ0AvJChHTlVMSUJfRk1BTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GTU9EJydALyQoR05VTElCX0ZNT0QpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRk1PREYnJ0AvJChHTlVMSUJfRk1PREYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRk1PREwnJ0AvJChHTlVMSUJfRk1PREwpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRlJFWFBGJydALyQoR05VTElCX0ZSRVhQRikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GUkVYUCcnQC8kKEdOVUxJQl9GUkVYUCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GUkVYUEwnJ0AvJChHTlVMSUJfRlJFWFBMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0hZUE9UJydALyQoR05VTElCX0hZUE9UKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0hZUE9URicnQC8kKEdOVUxJQl9IWVBPVEYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfSFlQT1RMJydALyQoR05VTElCX0hZUE9UTCkvZycgXAorCSAgICAgIDwgJChzcmNkaXIpL21hdGguaW4uaCB8IFwKKwkgIHNlZCAtZSAncy9AJydHTlVMSUJfSUxPR0InJ0AvJChHTlVMSUJfSUxPR0IpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfSUxPR0JGJydALyQoR05VTElCX0lMT0dCRikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9JTE9HQkwnJ0AvJChHTlVMSUJfSUxPR0JMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0lTRklOSVRFJydALyQoR05VTElCX0lTRklOSVRFKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0lTSU5GJydALyQoR05VTElCX0lTSU5GKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0lTTkFOJydALyQoR05VTElCX0lTTkFOKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0lTTkFORicnQC8kKEdOVUxJQl9JU05BTkYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfSVNOQU5EJydALyQoR05VTElCX0lTTkFORCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9JU05BTkwnJ0AvJChHTlVMSUJfSVNOQU5MKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0xERVhQRicnQC8kKEdOVUxJQl9MREVYUEYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTERFWFBMJydALyQoR05VTElCX0xERVhQTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MT0cnJ0AvJChHTlVMSUJfTE9HKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0xPR0YnJ0AvJChHTlVMSUJfTE9HRikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MT0dMJydALyQoR05VTElCX0xPR0wpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTE9HMTAnJ0AvJChHTlVMSUJfTE9HMTApL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTE9HMTBGJydALyQoR05VTElCX0xPRzEwRikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MT0cxMEwnJ0AvJChHTlVMSUJfTE9HMTBMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0xPRzFQJydALyQoR05VTElCX0xPRzFQKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0xPRzFQRicnQC8kKEdOVUxJQl9MT0cxUEYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTE9HMVBMJydALyQoR05VTElCX0xPRzFQTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MT0cyJydALyQoR05VTElCX0xPRzIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTE9HMkYnJ0AvJChHTlVMSUJfTE9HMkYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTE9HMkwnJ0AvJChHTlVMSUJfTE9HMkwpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTE9HQicnQC8kKEdOVUxJQl9MT0dCKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0xPR0JGJydALyQoR05VTElCX0xPR0JGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0xPR0JMJydALyQoR05VTElCX0xPR0JMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01PREYnJ0AvJChHTlVMSUJfTU9ERikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NT0RGRicnQC8kKEdOVUxJQl9NT0RGRikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NT0RGTCcnQC8kKEdOVUxJQl9NT0RGTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QT1dGJydALyQoR05VTElCX1BPV0YpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUkVNQUlOREVSJydALyQoR05VTElCX1JFTUFJTkRFUikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRU1BSU5ERVJGJydALyQoR05VTElCX1JFTUFJTkRFUkYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUkVNQUlOREVSTCcnQC8kKEdOVUxJQl9SRU1BSU5ERVJMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1JJTlQnJ0AvJChHTlVMSUJfUklOVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SSU5URicnQC8kKEdOVUxJQl9SSU5URikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SSU5UTCcnQC8kKEdOVUxJQl9SSU5UTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9ST1VORCcnQC8kKEdOVUxJQl9ST1VORCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9ST1VOREYnJ0AvJChHTlVMSUJfUk9VTkRGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1JPVU5ETCcnQC8kKEdOVUxJQl9ST1VOREwpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU0lHTkJJVCcnQC8kKEdOVUxJQl9TSUdOQklUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NJTkYnJ0AvJChHTlVMSUJfU0lORikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TSU5MJydALyQoR05VTElCX1NJTkwpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU0lOSEYnJ0AvJChHTlVMSUJfU0lOSEYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU1FSVEYnJ0AvJChHTlVMSUJfU1FSVEYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU1FSVEwnJ0AvJChHTlVMSUJfU1FSVEwpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfVEFORicnQC8kKEdOVUxJQl9UQU5GKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1RBTkwnJ0AvJChHTlVMSUJfVEFOTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9UQU5IRicnQC8kKEdOVUxJQl9UQU5IRikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9UUlVOQycnQC8kKEdOVUxJQl9UUlVOQykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9UUlVOQ0YnJ0AvJChHTlVMSUJfVFJVTkNGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1RSVU5DTCcnQC8kKEdOVUxJQl9UUlVOQ0wpL2cnIFwKKwkgIHwgXAorCSAgc2VkIC1lICdzfEAnJ0hBVkVfQUNPU0YnJ0B8JChIQVZFX0FDT1NGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9BQ09TTCcnQHwkKEhBVkVfQUNPU0wpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0FTSU5GJydAfCQoSEFWRV9BU0lORil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfQVNJTkwnJ0B8JChIQVZFX0FTSU5MKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9BVEFORicnQHwkKEhBVkVfQVRBTkYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0FUQU5MJydAfCQoSEFWRV9BVEFOTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfQVRBTjJGJydAfCQoSEFWRV9BVEFOMkYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0NCUlQnJ0B8JChIQVZFX0NCUlQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0NCUlRGJydAfCQoSEFWRV9DQlJURil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfQ0JSVEwnJ0B8JChIQVZFX0NCUlRMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9DT1BZU0lHTicnQHwkKEhBVkVfQ09QWVNJR04pfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0NPUFlTSUdOTCcnQHwkKEhBVkVfQ09QWVNJR05MKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9DT1NGJydAfCQoSEFWRV9DT1NGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9DT1NMJydAfCQoSEFWRV9DT1NMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9DT1NIRicnQHwkKEhBVkVfQ09TSEYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0VYUEYnJ0B8JChIQVZFX0VYUEYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0VYUEwnJ0B8JChIQVZFX0VYUEwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0VYUE0xJydAfCQoSEFWRV9FWFBNMSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRVhQTTFGJydAfCQoSEFWRV9FWFBNMUYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0ZBQlNGJydAfCQoSEFWRV9GQUJTRil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRkFCU0wnJ0B8JChIQVZFX0ZBQlNMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9GTUEnJ0B8JChIQVZFX0ZNQSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRk1BRicnQHwkKEhBVkVfRk1BRil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRk1BTCcnQHwkKEhBVkVfRk1BTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRk1PREYnJ0B8JChIQVZFX0ZNT0RGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9GTU9ETCcnQHwkKEhBVkVfRk1PREwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0ZSRVhQRicnQHwkKEhBVkVfRlJFWFBGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9IWVBPVEYnJ0B8JChIQVZFX0hZUE9URil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfSFlQT1RMJydAfCQoSEFWRV9IWVBPVEwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0lMT0dCJydAfCQoSEFWRV9JTE9HQil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfSUxPR0JGJydAfCQoSEFWRV9JTE9HQkYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0lMT0dCTCcnQHwkKEhBVkVfSUxPR0JMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9JU05BTkYnJ0B8JChIQVZFX0lTTkFORil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfSVNOQU5EJydAfCQoSEFWRV9JU05BTkQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0lTTkFOTCcnQHwkKEhBVkVfSVNOQU5MKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9MREVYUEYnJ0B8JChIQVZFX0xERVhQRil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTE9HRicnQHwkKEhBVkVfTE9HRil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTE9HTCcnQHwkKEhBVkVfTE9HTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTE9HMTBGJydAfCQoSEFWRV9MT0cxMEYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0xPRzEwTCcnQHwkKEhBVkVfTE9HMTBMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9MT0cxUCcnQHwkKEhBVkVfTE9HMVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0xPRzFQRicnQHwkKEhBVkVfTE9HMVBGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9MT0cxUEwnJ0B8JChIQVZFX0xPRzFQTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTE9HQkYnJ0B8JChIQVZFX0xPR0JGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9MT0dCTCcnQHwkKEhBVkVfTE9HQkwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX01PREZGJydAfCQoSEFWRV9NT0RGRil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTU9ERkwnJ0B8JChIQVZFX01PREZMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9QT1dGJydAfCQoSEFWRV9QT1dGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9SRU1BSU5ERVInJ0B8JChIQVZFX1JFTUFJTkRFUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfUkVNQUlOREVSRicnQHwkKEhBVkVfUkVNQUlOREVSRil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfUklOVCcnQHwkKEhBVkVfUklOVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfUklOVEwnJ0B8JChIQVZFX1JJTlRMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TSU5GJydAfCQoSEFWRV9TSU5GKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TSU5MJydAfCQoSEFWRV9TSU5MKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TSU5IRicnQHwkKEhBVkVfU0lOSEYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1NRUlRGJydAfCQoSEFWRV9TUVJURil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1FSVEwnJ0B8JChIQVZFX1NRUlRMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9UQU5GJydAfCQoSEFWRV9UQU5GKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9UQU5MJydAfCQoSEFWRV9UQU5MKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9UQU5IRicnQHwkKEhBVkVfVEFOSEYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfQUNPU0wnJ0B8JChIQVZFX0RFQ0xfQUNPU0wpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfQVNJTkwnJ0B8JChIQVZFX0RFQ0xfQVNJTkwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfQVRBTkwnJ0B8JChIQVZFX0RFQ0xfQVRBTkwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfQ0JSVEYnJ0B8JChIQVZFX0RFQ0xfQ0JSVEYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfQ0JSVEwnJ0B8JChIQVZFX0RFQ0xfQ0JSVEwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfQ0VJTEYnJ0B8JChIQVZFX0RFQ0xfQ0VJTEYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfQ0VJTEwnJ0B8JChIQVZFX0RFQ0xfQ0VJTEwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfQ09QWVNJR05GJydAfCQoSEFWRV9ERUNMX0NPUFlTSUdORil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9DT1NMJydAfCQoSEFWRV9ERUNMX0NPU0wpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfRVhQTCcnQHwkKEhBVkVfREVDTF9FWFBMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0VYUDInJ0B8JChIQVZFX0RFQ0xfRVhQMil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9FWFAyRicnQHwkKEhBVkVfREVDTF9FWFAyRil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9FWFAyTCcnQHwkKEhBVkVfREVDTF9FWFAyTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9FWFBNMUwnJ0B8JChIQVZFX0RFQ0xfRVhQTTFMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0ZMT09SRicnQHwkKEhBVkVfREVDTF9GTE9PUkYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfRkxPT1JMJydAfCQoSEFWRV9ERUNMX0ZMT09STCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9GUkVYUEwnJ0B8JChIQVZFX0RFQ0xfRlJFWFBMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0xERVhQTCcnQHwkKEhBVkVfREVDTF9MREVYUEwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfTE9HTCcnQHwkKEhBVkVfREVDTF9MT0dMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0xPRzEwTCcnQHwkKEhBVkVfREVDTF9MT0cxMEwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfTE9HMicnQHwkKEhBVkVfREVDTF9MT0cyKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0xPRzJGJydAfCQoSEFWRV9ERUNMX0xPRzJGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0xPRzJMJydAfCQoSEFWRV9ERUNMX0xPRzJMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0xPR0InJ0B8JChIQVZFX0RFQ0xfTE9HQil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9SRU1BSU5ERVInJ0B8JChIQVZFX0RFQ0xfUkVNQUlOREVSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX1JFTUFJTkRFUkwnJ0B8JChIQVZFX0RFQ0xfUkVNQUlOREVSTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9SSU5URicnQHwkKEhBVkVfREVDTF9SSU5URil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9ST1VORCcnQHwkKEhBVkVfREVDTF9ST1VORCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9ST1VOREYnJ0B8JChIQVZFX0RFQ0xfUk9VTkRGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX1JPVU5ETCcnQHwkKEhBVkVfREVDTF9ST1VOREwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfU0lOTCcnQHwkKEhBVkVfREVDTF9TSU5MKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX1NRUlRMJydAfCQoSEFWRV9ERUNMX1NRUlRMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX1RBTkwnJ0B8JChIQVZFX0RFQ0xfVEFOTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9UUlVOQycnQHwkKEhBVkVfREVDTF9UUlVOQyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9UUlVOQ0YnJ0B8JChIQVZFX0RFQ0xfVFJVTkNGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX1RSVU5DTCcnQHwkKEhBVkVfREVDTF9UUlVOQ0wpfGcnIFwKKwkgIHwgXAorCSAgc2VkIC1lICdzfEAnJ1JFUExBQ0VfQ0JSVEYnJ0B8JChSRVBMQUNFX0NCUlRGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9DQlJUTCcnQHwkKFJFUExBQ0VfQ0JSVEwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0NFSUwnJ0B8JChSRVBMQUNFX0NFSUwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0NFSUxGJydAfCQoUkVQTEFDRV9DRUlMRil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfQ0VJTEwnJ0B8JChSRVBMQUNFX0NFSUxMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9FWFBNMScnQHwkKFJFUExBQ0VfRVhQTTEpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0VYUE0xRicnQHwkKFJFUExBQ0VfRVhQTTFGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9FWFAyJydAfCQoUkVQTEFDRV9FWFAyKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9FWFAyTCcnQHwkKFJFUExBQ0VfRVhQMkwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0ZBQlNMJydAfCQoUkVQTEFDRV9GQUJTTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRkxPT1InJ0B8JChSRVBMQUNFX0ZMT09SKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9GTE9PUkYnJ0B8JChSRVBMQUNFX0ZMT09SRil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRkxPT1JMJydAfCQoUkVQTEFDRV9GTE9PUkwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0ZNQScnQHwkKFJFUExBQ0VfRk1BKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9GTUFGJydAfCQoUkVQTEFDRV9GTUFGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9GTUFMJydAfCQoUkVQTEFDRV9GTUFMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9GTU9EJydAfCQoUkVQTEFDRV9GTU9EKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9GTU9ERicnQHwkKFJFUExBQ0VfRk1PREYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0ZNT0RMJydAfCQoUkVQTEFDRV9GTU9ETCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRlJFWFBGJydAfCQoUkVQTEFDRV9GUkVYUEYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0ZSRVhQJydAfCQoUkVQTEFDRV9GUkVYUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRlJFWFBMJydAfCQoUkVQTEFDRV9GUkVYUEwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0hVR0VfVkFMJydAfCQoUkVQTEFDRV9IVUdFX1ZBTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfSFlQT1QnJ0B8JChSRVBMQUNFX0hZUE9UKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9IWVBPVEYnJ0B8JChSRVBMQUNFX0hZUE9URil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfSFlQT1RMJydAfCQoUkVQTEFDRV9IWVBPVEwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0lMT0dCJydAfCQoUkVQTEFDRV9JTE9HQil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfSUxPR0JGJydAfCQoUkVQTEFDRV9JTE9HQkYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0lTRklOSVRFJydAfCQoUkVQTEFDRV9JU0ZJTklURSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfSVNJTkYnJ0B8JChSRVBMQUNFX0lTSU5GKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9JU05BTicnQHwkKFJFUExBQ0VfSVNOQU4pfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0lUT0xEJydAfCQoUkVQTEFDRV9JVE9MRCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTERFWFBMJydAfCQoUkVQTEFDRV9MREVYUEwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0xPRycnQHwkKFJFUExBQ0VfTE9HKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9MT0dGJydAfCQoUkVQTEFDRV9MT0dGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9MT0dMJydAfCQoUkVQTEFDRV9MT0dMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9MT0cxMCcnQHwkKFJFUExBQ0VfTE9HMTApfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0xPRzEwRicnQHwkKFJFUExBQ0VfTE9HMTBGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9MT0cxMEwnJ0B8JChSRVBMQUNFX0xPRzEwTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTE9HMVAnJ0B8JChSRVBMQUNFX0xPRzFQKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9MT0cxUEYnJ0B8JChSRVBMQUNFX0xPRzFQRil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTE9HMVBMJydAfCQoUkVQTEFDRV9MT0cxUEwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0xPRzInJ0B8JChSRVBMQUNFX0xPRzIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0xPRzJGJydAfCQoUkVQTEFDRV9MT0cyRil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTE9HMkwnJ0B8JChSRVBMQUNFX0xPRzJMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9MT0dCJydAfCQoUkVQTEFDRV9MT0dCKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9MT0dCRicnQHwkKFJFUExBQ0VfTE9HQkYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0xPR0JMJydAfCQoUkVQTEFDRV9MT0dCTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTU9ERicnQHwkKFJFUExBQ0VfTU9ERil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTU9ERkYnJ0B8JChSRVBMQUNFX01PREZGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9NT0RGTCcnQHwkKFJFUExBQ0VfTU9ERkwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX05BTicnQHwkKFJFUExBQ0VfTkFOKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9SRU1BSU5ERVInJ0B8JChSRVBMQUNFX1JFTUFJTkRFUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfUkVNQUlOREVSRicnQHwkKFJFUExBQ0VfUkVNQUlOREVSRil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfUkVNQUlOREVSTCcnQHwkKFJFUExBQ0VfUkVNQUlOREVSTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfUk9VTkQnJ0B8JChSRVBMQUNFX1JPVU5EKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9ST1VOREYnJ0B8JChSRVBMQUNFX1JPVU5ERil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfUk9VTkRMJydAfCQoUkVQTEFDRV9ST1VOREwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1NJR05CSVQnJ0B8JChSRVBMQUNFX1NJR05CSVQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1NJR05CSVRfVVNJTkdfR0NDJydAfCQoUkVQTEFDRV9TSUdOQklUX1VTSU5HX0dDQyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfU1FSVEwnJ0B8JChSRVBMQUNFX1NRUlRMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9UUlVOQycnQHwkKFJFUExBQ0VfVFJVTkMpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1RSVU5DRicnQHwkKFJFUExBQ0VfVFJVTkNGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9UUlVOQ0wnJ0B8JChSRVBMQUNFX1RSVU5DTCl8ZycgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTC9yICQoQ1hYREVGU19IKScgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwvciAkKEFSR19OT05OVUxMX0gpJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRS9yICQoV0FSTl9PTl9VU0VfSCknOyBcCisJfSA+ICRALXQgJiYgXAorCW12ICRALXQgJEAKKworIyBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIgdG8gY3JlYXRlIGEgcmVwbGFjZW1lbnQgZm9yIDxzY2hlZC5oPiB3aGVuCisjIHRoZSBzeXN0ZW0gZG9lc24ndCBoYXZlIG9uZS4KK0BHTF9HRU5FUkFURV9TQ0hFRF9IX1RSVUVAc2NoZWQuaDogc2NoZWQuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworQEdMX0dFTkVSQVRFX1NDSEVEX0hfVFJVRUAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKK0BHTF9HRU5FUkFURV9TQ0hFRF9IX1RSVUVACXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKK0BHTF9HRU5FUkFURV9TQ0hFRF9IX1RSVUVACSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCitAR0xfR0VORVJBVEVfU0NIRURfSF9UUlVFQAkgICAgICAtZSAnc3xAJydIQVZFX1NDSEVEX0gnJ0B8JChIQVZFX1NDSEVEX0gpfGcnIFwKK0BHTF9HRU5FUkFURV9TQ0hFRF9IX1RSVUVACSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorQEdMX0dFTkVSQVRFX1NDSEVEX0hfVFJVRUAJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCitAR0xfR0VORVJBVEVfU0NIRURfSF9UUlVFQAkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKK0BHTF9HRU5FUkFURV9TQ0hFRF9IX1RSVUVACSAgICAgIC1lICdzfEAnJ05FWFRfU0NIRURfSCcnQHwkKE5FWFRfU0NIRURfSCl8ZycgXAorQEdMX0dFTkVSQVRFX1NDSEVEX0hfVFJVRUAJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFJVQ1RfU0NIRURfUEFSQU0nJ0B8JChIQVZFX1NUUlVDVF9TQ0hFRF9QQVJBTSl8ZycgXAorQEdMX0dFTkVSQVRFX1NDSEVEX0hfVFJVRUAJICAgICAgPCAkKHNyY2Rpcikvc2NoZWQuaW4uaDsgXAorQEdMX0dFTkVSQVRFX1NDSEVEX0hfVFJVRUAJfSA+ICRALXQgJiYgXAorQEdMX0dFTkVSQVRFX1NDSEVEX0hfVFJVRUAJbXYgJEAtdCAkQAorQEdMX0dFTkVSQVRFX1NDSEVEX0hfRkFMU0VAc2NoZWQuaDogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKK0BHTF9HRU5FUkFURV9TQ0hFRF9IX0ZBTFNFQAlybSAtZiAkQAorCisjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBjcmVhdGUgPHNpZ25hbC5oPiB3aGVuIHRoZSBzeXN0ZW0KKyMgZG9lc24ndCBoYXZlIGEgY29tcGxldGUgb25lLgorc2lnbmFsLmg6IHNpZ25hbC5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hYREVGU19IKSAkKEFSR19OT05OVUxMX0gpICQoV0FSTl9PTl9VU0VfSCkKKwkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLycgJiYgXAorCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCisJICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnTkVYVF9TSUdOQUxfSCcnQHwkKE5FWFRfU0lHTkFMX0gpfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUFRIUkVBRF9TSUdNQVNLJydAfCQoR05VTElCX1BUSFJFQURfU0lHTUFTSyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SQUlTRScnQHwkKEdOVUxJQl9SQUlTRSl8ZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TSUdOQUxfSF9TSUdQSVBFJydALyQoR05VTElCX1NJR05BTF9IX1NJR1BJUEUpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU0lHUFJPQ01BU0snJ0AvJChHTlVMSUJfU0lHUFJPQ01BU0spL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU0lHQUNUSU9OJydALyQoR05VTElCX1NJR0FDVElPTikvZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkcnJ0B8JChIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9QVEhSRUFEX1NJR01BU0snJ0B8JChIQVZFX1BUSFJFQURfU0lHTUFTSyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfUkFJU0UnJ0B8JChIQVZFX1JBSVNFKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TSUdTRVRfVCcnQHwkKEhBVkVfU0lHU0VUX1QpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1NJR0lORk9fVCcnQHwkKEhBVkVfU0lHSU5GT19UKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TSUdBQ1RJT04nJ0B8JChIQVZFX1NJR0FDVElPTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT04nJ0B8JChIQVZFX1NUUlVDVF9TSUdBQ1RJT05fU0FfU0lHQUNUSU9OKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9UWVBFX1ZPTEFUSUxFX1NJR19BVE9NSUNfVCcnQHwkKEhBVkVfVFlQRV9WT0xBVElMRV9TSUdfQVRPTUlDX1QpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1NJR0hBTkRMRVJfVCcnQHwkKEhBVkVfU0lHSEFORExFUl9UKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9QVEhSRUFEX1NJR01BU0snJ0B8JChSRVBMQUNFX1BUSFJFQURfU0lHTUFTSyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfUkFJU0UnJ0B8JChSRVBMQUNFX1JBSVNFKXxnJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBML3IgJChDWFhERUZTX0gpJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVMTC9yICQoQVJHX05PTk5VTExfSCknIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFL3IgJChXQVJOX09OX1VTRV9IKScgXAorCSAgICAgIDwgJChzcmNkaXIpL3NpZ25hbC5pbi5oOyBcCisJfSA+ICRALXQgJiYgXAorCW12ICRALXQgJEAKKyMgVGhlIGFyZy1ub25udWxsLmggdGhhdCBnZXRzIGluc2VydGVkIGludG8gZ2VuZXJhdGVkIC5oIGZpbGVzIGlzIHRoZSBzYW1lIGFzCisjIGJ1aWxkLWF1eC9zbmlwcGV0L2FyZy1ub25udWxsLmgsIGV4Y2VwdCB0aGF0IGl0IGhhcyB0aGUgY29weXJpZ2h0IGhlYWRlciBjdXQKKyMgb2ZmLgorYXJnLW5vbm51bGwuaDogJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC9hcmctbm9ubnVsbC5oCisJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKwlzZWQgLW4gLWUgJy9HTF9BUkdfTk9OTlVMTC8sJCRwJyBcCisJICA8ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvYXJnLW5vbm51bGwuaCBcCisJICA+ICRALXQgJiYgXAorCW12ICRALXQgJEAKKyMgVGhlIGMrK2RlZnMuaCB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byBnZW5lcmF0ZWQgLmggZmlsZXMgaXMgdGhlIHNhbWUgYXMKKyMgYnVpbGQtYXV4L3NuaXBwZXQvYysrZGVmcy5oLCBleGNlcHQgdGhhdCBpdCBoYXMgdGhlIGNvcHlyaWdodCBoZWFkZXIgY3V0IG9mZi4KK2MrK2RlZnMuaDogJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmgKKwkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorCXNlZCAtbiAtZSAnL19HTF9DWFhERUZTLywkJHAnIFwKKwkgIDwgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmggXAorCSAgPiAkQC10ICYmIFwKKwltdiAkQC10ICRACisjIFRoZSB3YXJuLW9uLXVzZS5oIHRoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIGdlbmVyYXRlZCAuaCBmaWxlcyBpcyB0aGUgc2FtZSBhcworIyBidWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oLCBleGNlcHQgdGhhdCBpdCBoYXMgdGhlIGNvcHlyaWdodCBoZWFkZXIgY3V0CisjIG9mZi4KK3dhcm4tb24tdXNlLmg6ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvd2Fybi1vbi11c2UuaAorCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisJc2VkIC1uIC1lICcvXi5pZm5kZWYvLCQkcCcgXAorCSAgPCAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L3dhcm4tb24tdXNlLmggXAorCSAgPiAkQC10ICYmIFwKKwltdiAkQC10ICRACisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSBhIHJlcGxhY2VtZW50IGZvciA8c3Bhd24uaD4gd2hlbgorIyB0aGUgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBvbmUuCitzcGF3bi5oOiBzcGF3bi5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hYREVGU19IKSAkKEFSR19OT05OVUxMX0gpICQoV0FSTl9PTl9VU0VfSCkKKwkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKKwkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1BBV05fSCcnQHwkKEhBVkVfU1BBV05fSCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorCSAgICAgIC1lICdzfEAnJ05FWFRfU1BBV05fSCcnQHwkKE5FWFRfU1BBV05fSCl8ZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QT1NJWF9TUEFXTicnQC8kKEdOVUxJQl9QT1NJWF9TUEFXTikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QT1NJWF9TUEFXTlAnJ0AvJChHTlVMSUJfUE9TSVhfU1BBV05QKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19JTklUJydALyQoR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19JTklUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRScnQC8kKEdOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQUREQ0xPU0UpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDInJ0AvJChHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU4nJ0AvJChHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU4pL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0RFU1RST1knJ0AvJChHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0RFU1RST1kpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0lOSVQnJ0AvJChHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0lOSVQpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVEZMQUdTJydALyQoR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRGTEFHUykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VURkxBR1MnJ0AvJChHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVEZMQUdTKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRQR1JPVVAnJ0AvJChHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFBHUk9VUCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUUEdST1VQJydALyQoR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRQR1JPVVApL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNDSEVEUEFSQU0nJ0AvJChHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNDSEVEUEFSQU0pL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNDSEVEUEFSQU0nJ0AvJChHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNDSEVEUEFSQU0pL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNDSEVEUE9MSUNZJydALyQoR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBPTElDWSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQT0xJQ1knJ0AvJChHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNDSEVEUE9MSUNZKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdERUZBVUxUJydALyQoR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdERUZBVUxUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTSUdERUZBVUxUJydALyQoR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTSUdERUZBVUxUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdNQVNLJydALyQoR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdNQVNLKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTSUdNQVNLJydALyQoR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTSUdNQVNLKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BPU0lYX1NQQVdOQVRUUl9ERVNUUk9ZJydALyQoR05VTElCX1BPU0lYX1NQQVdOQVRUUl9ERVNUUk9ZKS9nJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9QT1NJWF9TUEFXTicnQHwkKEhBVkVfUE9TSVhfU1BBV04pfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1BPU0lYX1NQQVdOQVRUUl9UJydAfCQoSEFWRV9QT1NJWF9TUEFXTkFUVFJfVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX1QnJ0B8JChIQVZFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19UKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9QT1NJWF9TUEFXTicnQHwkKFJFUExBQ0VfUE9TSVhfU1BBV04pfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRScnQHwkKFJFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERENMT1NFKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMicnQHwkKFJFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERPUEVOJydAfCQoUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURET1BFTil8ZycgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTC9yICQoQ1hYREVGU19IKScgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwvciAkKEFSR19OT05OVUxMX0gpJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRS9yICQoV0FSTl9PTl9VU0VfSCknIFwKKwkgICAgICA8ICQoc3JjZGlyKS9zcGF3bi5pbi5oOyBcCisJfSA+ICRALXQgJiYgXAogCW12ICRALXQgJEAKIAogIyBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIgdG8gY3JlYXRlIDxzdGRib29sLmg+IHdoZW4gdGhlIHN5c3RlbQogIyBkb2Vzbid0IGhhdmUgb25lIHRoYXQgd29ya3MuCi1zdGRib29sLmg6IHN0ZGJvb2xfLmgKLQlzZWQgLWUgJ3MvQCcnSEFWRV9fQk9PTCcnQC8kKEhBVkVfX0JPT0wpL2cnIDwgJChzcmNkaXIpL3N0ZGJvb2xfLmggPiAkQC10CitAR0xfR0VORVJBVEVfU1REQk9PTF9IX1RSVUVAc3RkYm9vbC5oOiBzdGRib29sLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKK0BHTF9HRU5FUkFURV9TVERCT09MX0hfVFJVRUAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKK0BHTF9HRU5FUkFURV9TVERCT09MX0hfVFJVRUAJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJzsgXAorQEdMX0dFTkVSQVRFX1NUREJPT0xfSF9UUlVFQAkgIHNlZCAtZSAncy9AJydIQVZFX19CT09MJydALyQoSEFWRV9fQk9PTCkvZycgPCAkKHNyY2Rpcikvc3RkYm9vbC5pbi5oOyBcCitAR0xfR0VORVJBVEVfU1REQk9PTF9IX1RSVUVACX0gPiAkQC10ICYmIFwKK0BHTF9HRU5FUkFURV9TVERCT09MX0hfVFJVRUAJbXYgJEAtdCAkQAorQEdMX0dFTkVSQVRFX1NUREJPT0xfSF9GQUxTRUBzdGRib29sLmg6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCitAR0xfR0VORVJBVEVfU1REQk9PTF9IX0ZBTFNFQAlybSAtZiAkQAorCisjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBjcmVhdGUgPHN0ZGRlZi5oPiB3aGVuIHRoZSBzeXN0ZW0KKyMgZG9lc24ndCBoYXZlIG9uZSB0aGF0IHdvcmtzIHdpdGggdGhlIGdpdmVuIGNvbXBpbGVyLgorQEdMX0dFTkVSQVRFX1NURERFRl9IX1RSVUVAc3RkZGVmLmg6IHN0ZGRlZi5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCitAR0xfR0VORVJBVEVfU1REREVGX0hfVFJVRUAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKK0BHTF9HRU5FUkFURV9TVERERUZfSF9UUlVFQAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKK0BHTF9HRU5FUkFURV9TVERERUZfSF9UUlVFQAkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorQEdMX0dFTkVSQVRFX1NURERFRl9IX1RSVUVACSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorQEdMX0dFTkVSQVRFX1NURERFRl9IX1RSVUVACSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorQEdMX0dFTkVSQVRFX1NURERFRl9IX1RSVUVACSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorQEdMX0dFTkVSQVRFX1NURERFRl9IX1RSVUVACSAgICAgIC1lICdzfEAnJ05FWFRfU1REREVGX0gnJ0B8JChORVhUX1NURERFRl9IKXxnJyBcCitAR0xfR0VORVJBVEVfU1REREVGX0hfVFJVRUAJICAgICAgLWUgJ3N8QCcnSEFWRV9XQ0hBUl9UJydAfCQoSEFWRV9XQ0hBUl9UKXxnJyBcCitAR0xfR0VORVJBVEVfU1REREVGX0hfVFJVRUAJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9OVUxMJydAfCQoUkVQTEFDRV9OVUxMKXxnJyBcCitAR0xfR0VORVJBVEVfU1REREVGX0hfVFJVRUAJICAgICAgPCAkKHNyY2Rpcikvc3RkZGVmLmluLmg7IFwKK0BHTF9HRU5FUkFURV9TVERERUZfSF9UUlVFQAl9ID4gJEAtdCAmJiBcCitAR0xfR0VORVJBVEVfU1REREVGX0hfVFJVRUAJbXYgJEAtdCAkQAorQEdMX0dFTkVSQVRFX1NURERFRl9IX0ZBTFNFQHN0ZGRlZi5oOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworQEdMX0dFTkVSQVRFX1NURERFRl9IX0ZBTFNFQAlybSAtZiAkQAorCisjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBjcmVhdGUgPHN0ZGludC5oPiB3aGVuIHRoZSBzeXN0ZW0KKyMgZG9lc24ndCBoYXZlIG9uZSB0aGF0IHdvcmtzIHdpdGggdGhlIGdpdmVuIGNvbXBpbGVyLgorQEdMX0dFTkVSQVRFX1NURElOVF9IX1RSVUVAc3RkaW50Lmg6IHN0ZGludC5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCitAR0xfR0VORVJBVEVfU1RESU5UX0hfVFJVRUAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKK0BHTF9HRU5FUkFURV9TVERJTlRfSF9UUlVFQAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCitAR0xfR0VORVJBVEVfU1RESU5UX0hfVFJVRUAJICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKK0BHTF9HRU5FUkFURV9TVERJTlRfSF9UUlVFQAkgICAgICAtZSAncy9AJydIQVZFX1NURElOVF9IJydALyQoSEFWRV9TVERJTlRfSCkvZycgXAorQEdMX0dFTkVSQVRFX1NURElOVF9IX1RSVUVACSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorQEdMX0dFTkVSQVRFX1NURElOVF9IX1RSVUVACSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorQEdMX0dFTkVSQVRFX1NURElOVF9IX1RSVUVACSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorQEdMX0dFTkVSQVRFX1NURElOVF9IX1RSVUVACSAgICAgIC1lICdzfEAnJ05FWFRfU1RESU5UX0gnJ0B8JChORVhUX1NURElOVF9IKXxnJyBcCitAR0xfR0VORVJBVEVfU1RESU5UX0hfVFJVRUAJICAgICAgLWUgJ3MvQCcnSEFWRV9TWVNfVFlQRVNfSCcnQC8kKEhBVkVfU1lTX1RZUEVTX0gpL2cnIFwKK0BHTF9HRU5FUkFURV9TVERJTlRfSF9UUlVFQAkgICAgICAtZSAncy9AJydIQVZFX0lOVFRZUEVTX0gnJ0AvJChIQVZFX0lOVFRZUEVTX0gpL2cnIFwKK0BHTF9HRU5FUkFURV9TVERJTlRfSF9UUlVFQAkgICAgICAtZSAncy9AJydIQVZFX1NZU19JTlRUWVBFU19IJydALyQoSEFWRV9TWVNfSU5UVFlQRVNfSCkvZycgXAorQEdMX0dFTkVSQVRFX1NURElOVF9IX1RSVUVACSAgICAgIC1lICdzL0AnJ0hBVkVfU1lTX0JJVFlQRVNfSCcnQC8kKEhBVkVfU1lTX0JJVFlQRVNfSCkvZycgXAorQEdMX0dFTkVSQVRFX1NURElOVF9IX1RSVUVACSAgICAgIC1lICdzL0AnJ0hBVkVfV0NIQVJfSCcnQC8kKEhBVkVfV0NIQVJfSCkvZycgXAorQEdMX0dFTkVSQVRFX1NURElOVF9IX1RSVUVACSAgICAgIC1lICdzL0AnJ0hBVkVfTE9OR19MT05HX0lOVCcnQC8kKEhBVkVfTE9OR19MT05HX0lOVCkvZycgXAorQEdMX0dFTkVSQVRFX1NURElOVF9IX1RSVUVACSAgICAgIC1lICdzL0AnJ0hBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCcnQC8kKEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCkvZycgXAorQEdMX0dFTkVSQVRFX1NURElOVF9IX1RSVUVACSAgICAgIC1lICdzL0AnJ0FQUExFX1VOSVZFUlNBTF9CVUlMRCcnQC8kKEFQUExFX1VOSVZFUlNBTF9CVUlMRCkvZycgXAorQEdMX0dFTkVSQVRFX1NURElOVF9IX1RSVUVACSAgICAgIC1lICdzL0AnJ0JJVFNJWkVPRl9QVFJESUZGX1QnJ0AvJChCSVRTSVpFT0ZfUFRSRElGRl9UKS9nJyBcCitAR0xfR0VORVJBVEVfU1RESU5UX0hfVFJVRUAJICAgICAgLWUgJ3MvQCcnUFRSRElGRl9UX1NVRkZJWCcnQC8kKFBUUkRJRkZfVF9TVUZGSVgpL2cnIFwKK0BHTF9HRU5FUkFURV9TVERJTlRfSF9UUlVFQAkgICAgICAtZSAncy9AJydCSVRTSVpFT0ZfU0lHX0FUT01JQ19UJydALyQoQklUU0laRU9GX1NJR19BVE9NSUNfVCkvZycgXAorQEdMX0dFTkVSQVRFX1NURElOVF9IX1RSVUVACSAgICAgIC1lICdzL0AnJ0hBVkVfU0lHTkVEX1NJR19BVE9NSUNfVCcnQC8kKEhBVkVfU0lHTkVEX1NJR19BVE9NSUNfVCkvZycgXAorQEdMX0dFTkVSQVRFX1NURElOVF9IX1RSVUVACSAgICAgIC1lICdzL0AnJ1NJR19BVE9NSUNfVF9TVUZGSVgnJ0AvJChTSUdfQVRPTUlDX1RfU1VGRklYKS9nJyBcCitAR0xfR0VORVJBVEVfU1RESU5UX0hfVFJVRUAJICAgICAgLWUgJ3MvQCcnQklUU0laRU9GX1NJWkVfVCcnQC8kKEJJVFNJWkVPRl9TSVpFX1QpL2cnIFwKK0BHTF9HRU5FUkFURV9TVERJTlRfSF9UUlVFQAkgICAgICAtZSAncy9AJydTSVpFX1RfU1VGRklYJydALyQoU0laRV9UX1NVRkZJWCkvZycgXAorQEdMX0dFTkVSQVRFX1NURElOVF9IX1RSVUVACSAgICAgIC1lICdzL0AnJ0JJVFNJWkVPRl9XQ0hBUl9UJydALyQoQklUU0laRU9GX1dDSEFSX1QpL2cnIFwKK0BHTF9HRU5FUkFURV9TVERJTlRfSF9UUlVFQAkgICAgICAtZSAncy9AJydIQVZFX1NJR05FRF9XQ0hBUl9UJydALyQoSEFWRV9TSUdORURfV0NIQVJfVCkvZycgXAorQEdMX0dFTkVSQVRFX1NURElOVF9IX1RSVUVACSAgICAgIC1lICdzL0AnJ1dDSEFSX1RfU1VGRklYJydALyQoV0NIQVJfVF9TVUZGSVgpL2cnIFwKK0BHTF9HRU5FUkFURV9TVERJTlRfSF9UUlVFQAkgICAgICAtZSAncy9AJydCSVRTSVpFT0ZfV0lOVF9UJydALyQoQklUU0laRU9GX1dJTlRfVCkvZycgXAorQEdMX0dFTkVSQVRFX1NURElOVF9IX1RSVUVACSAgICAgIC1lICdzL0AnJ0hBVkVfU0lHTkVEX1dJTlRfVCcnQC8kKEhBVkVfU0lHTkVEX1dJTlRfVCkvZycgXAorQEdMX0dFTkVSQVRFX1NURElOVF9IX1RSVUVACSAgICAgIC1lICdzL0AnJ1dJTlRfVF9TVUZGSVgnJ0AvJChXSU5UX1RfU1VGRklYKS9nJyBcCitAR0xfR0VORVJBVEVfU1RESU5UX0hfVFJVRUAJICAgICAgPCAkKHNyY2Rpcikvc3RkaW50LmluLmg7IFwKK0BHTF9HRU5FUkFURV9TVERJTlRfSF9UUlVFQAl9ID4gJEAtdCAmJiBcCitAR0xfR0VORVJBVEVfU1RESU5UX0hfVFJVRUAJbXYgJEAtdCAkQAorQEdMX0dFTkVSQVRFX1NURElOVF9IX0ZBTFNFQHN0ZGludC5oOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworQEdMX0dFTkVSQVRFX1NURElOVF9IX0ZBTFNFQAlybSAtZiAkQAorCisjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBjcmVhdGUgPHN0ZGlvLmg+IHdoZW4gdGhlIHN5c3RlbQorIyBkb2Vzbid0IGhhdmUgb25lIHRoYXQgd29ya3Mgd2l0aCB0aGUgZ2l2ZW4gY29tcGlsZXIuCitzdGRpby5oOiBzdGRpby5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hYREVGU19IKSAkKEFSR19OT05OVUxMX0gpICQoV0FSTl9PTl9VU0VfSCkKKwkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLycgJiYgXAorCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCisJICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnTkVYVF9TVERJT19IJydAfCQoTkVYVF9TVERJT19IKXxnJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0RQUklOVEYnJ0AvJChHTlVMSUJfRFBSSU5URikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GQ0xPU0UnJ0AvJChHTlVMSUJfRkNMT1NFKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0ZET1BFTicnQC8kKEdOVUxJQl9GRE9QRU4pL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRkZMVVNIJydALyQoR05VTElCX0ZGTFVTSCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GR0VUQycnQC8kKEdOVUxJQl9GR0VUQykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GR0VUUycnQC8kKEdOVUxJQl9GR0VUUykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GT1BFTicnQC8kKEdOVUxJQl9GT1BFTikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GUFJJTlRGJydALyQoR05VTElCX0ZQUklOVEYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRlBSSU5URl9QT1NJWCcnQC8kKEdOVUxJQl9GUFJJTlRGX1BPU0lYKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0ZQVVJHRScnQC8kKEdOVUxJQl9GUFVSR0UpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRlBVVEMnJ0AvJChHTlVMSUJfRlBVVEMpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRlBVVFMnJ0AvJChHTlVMSUJfRlBVVFMpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRlJFQUQnJ0AvJChHTlVMSUJfRlJFQUQpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRlJFT1BFTicnQC8kKEdOVUxJQl9GUkVPUEVOKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0ZTQ0FORicnQC8kKEdOVUxJQl9GU0NBTkYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRlNFRUsnJ0AvJChHTlVMSUJfRlNFRUspL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRlNFRUtPJydALyQoR05VTElCX0ZTRUVLTykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GVEVMTCcnQC8kKEdOVUxJQl9GVEVMTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GVEVMTE8nJ0AvJChHTlVMSUJfRlRFTExPKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0ZXUklURScnQC8kKEdOVUxJQl9GV1JJVEUpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUQycnQC8kKEdOVUxJQl9HRVRDKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVENIQVInJ0AvJChHTlVMSUJfR0VUQ0hBUikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRERUxJTScnQC8kKEdOVUxJQl9HRVRERUxJTSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRMSU5FJydALyQoR05VTElCX0dFVExJTkUpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfT0JTVEFDS19QUklOVEYnJ0AvJChHTlVMSUJfT0JTVEFDS19QUklOVEYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfT0JTVEFDS19QUklOVEZfUE9TSVgnJ0AvJChHTlVMSUJfT0JTVEFDS19QUklOVEZfUE9TSVgpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUENMT1NFJydALyQoR05VTElCX1BDTE9TRSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QRVJST1InJ0AvJChHTlVMSUJfUEVSUk9SKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BPUEVOJydALyQoR05VTElCX1BPUEVOKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BSSU5URicnQC8kKEdOVUxJQl9QUklOVEYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUFJJTlRGX1BPU0lYJydALyQoR05VTElCX1BSSU5URl9QT1NJWCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QVVRDJydALyQoR05VTElCX1BVVEMpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUFVUQ0hBUicnQC8kKEdOVUxJQl9QVVRDSEFSKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BVVFMnJ0AvJChHTlVMSUJfUFVUUykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRU1PVkUnJ0AvJChHTlVMSUJfUkVNT1ZFKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1JFTkFNRScnQC8kKEdOVUxJQl9SRU5BTUUpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUkVOQU1FQVQnJ0AvJChHTlVMSUJfUkVOQU1FQVQpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU0NBTkYnJ0AvJChHTlVMSUJfU0NBTkYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU05QUklOVEYnJ0AvJChHTlVMSUJfU05QUklOVEYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU1BSSU5URl9QT1NJWCcnQC8kKEdOVUxJQl9TUFJJTlRGX1BPU0lYKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkcnJ0AvJChHTlVMSUJfU1RESU9fSF9OT05CTE9DS0lORykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVERJT19IX1NJR1BJUEUnJ0AvJChHTlVMSUJfU1RESU9fSF9TSUdQSVBFKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1RNUEZJTEUnJ0AvJChHTlVMSUJfVE1QRklMRSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WQVNQUklOVEYnJ0AvJChHTlVMSUJfVkFTUFJJTlRGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1ZEUFJJTlRGJydALyQoR05VTElCX1ZEUFJJTlRGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1ZGUFJJTlRGJydALyQoR05VTElCX1ZGUFJJTlRGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1ZGUFJJTlRGX1BPU0lYJydALyQoR05VTElCX1ZGUFJJTlRGX1BPU0lYKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1ZGU0NBTkYnJ0AvJChHTlVMSUJfVkZTQ0FORikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WU0NBTkYnJ0AvJChHTlVMSUJfVlNDQU5GKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1ZQUklOVEYnJ0AvJChHTlVMSUJfVlBSSU5URikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WUFJJTlRGX1BPU0lYJydALyQoR05VTElCX1ZQUklOVEZfUE9TSVgpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfVlNOUFJJTlRGJydALyQoR05VTElCX1ZTTlBSSU5URikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WU1BSSU5URl9QT1NJWCcnQC8kKEdOVUxJQl9WU1BSSU5URl9QT1NJWCkvZycgXAorCSAgICAgIDwgJChzcmNkaXIpL3N0ZGlvLmluLmggfCBcCisJICBzZWQgLWUgJ3N8QCcnSEFWRV9ERUNMX0ZQVVJHRScnQHwkKEhBVkVfREVDTF9GUFVSR0UpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfRlNFRUtPJydAfCQoSEFWRV9ERUNMX0ZTRUVLTyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9GVEVMTE8nJ0B8JChIQVZFX0RFQ0xfRlRFTExPKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0dFVERFTElNJydAfCQoSEFWRV9ERUNMX0dFVERFTElNKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0dFVExJTkUnJ0B8JChIQVZFX0RFQ0xfR0VUTElORSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9PQlNUQUNLX1BSSU5URicnQHwkKEhBVkVfREVDTF9PQlNUQUNLX1BSSU5URil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9TTlBSSU5URicnQHwkKEhBVkVfREVDTF9TTlBSSU5URil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9WU05QUklOVEYnJ0B8JChIQVZFX0RFQ0xfVlNOUFJJTlRGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9EUFJJTlRGJydAfCQoSEFWRV9EUFJJTlRGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9GU0VFS08nJ0B8JChIQVZFX0ZTRUVLTyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRlRFTExPJydAfCQoSEFWRV9GVEVMTE8pfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1BDTE9TRScnQHwkKEhBVkVfUENMT1NFKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9QT1BFTicnQHwkKEhBVkVfUE9QRU4pfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1JFTkFNRUFUJydAfCQoSEFWRV9SRU5BTUVBVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfVkFTUFJJTlRGJydAfCQoSEFWRV9WQVNQUklOVEYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1ZEUFJJTlRGJydAfCQoSEFWRV9WRFBSSU5URil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRFBSSU5URicnQHwkKFJFUExBQ0VfRFBSSU5URil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRkNMT1NFJydAfCQoUkVQTEFDRV9GQ0xPU0UpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0ZET1BFTicnQHwkKFJFUExBQ0VfRkRPUEVOKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9GRkxVU0gnJ0B8JChSRVBMQUNFX0ZGTFVTSCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRk9QRU4nJ0B8JChSRVBMQUNFX0ZPUEVOKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9GUFJJTlRGJydAfCQoUkVQTEFDRV9GUFJJTlRGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9GUFVSR0UnJ0B8JChSRVBMQUNFX0ZQVVJHRSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRlJFT1BFTicnQHwkKFJFUExBQ0VfRlJFT1BFTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRlNFRUsnJ0B8JChSRVBMQUNFX0ZTRUVLKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9GU0VFS08nJ0B8JChSRVBMQUNFX0ZTRUVLTyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRlRFTEwnJ0B8JChSRVBMQUNFX0ZURUxMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9GVEVMTE8nJ0B8JChSRVBMQUNFX0ZURUxMTyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfR0VUREVMSU0nJ0B8JChSRVBMQUNFX0dFVERFTElNKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9HRVRMSU5FJydAfCQoUkVQTEFDRV9HRVRMSU5FKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9PQlNUQUNLX1BSSU5URicnQHwkKFJFUExBQ0VfT0JTVEFDS19QUklOVEYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1BFUlJPUicnQHwkKFJFUExBQ0VfUEVSUk9SKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9QT1BFTicnQHwkKFJFUExBQ0VfUE9QRU4pfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1BSSU5URicnQHwkKFJFUExBQ0VfUFJJTlRGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9SRU1PVkUnJ0B8JChSRVBMQUNFX1JFTU9WRSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfUkVOQU1FJydAfCQoUkVQTEFDRV9SRU5BTUUpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1JFTkFNRUFUJydAfCQoUkVQTEFDRV9SRU5BTUVBVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfU05QUklOVEYnJ0B8JChSRVBMQUNFX1NOUFJJTlRGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9TUFJJTlRGJydAfCQoUkVQTEFDRV9TUFJJTlRGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9TVERJT19SRUFEX0ZVTkNTJydAfCQoUkVQTEFDRV9TVERJT19SRUFEX0ZVTkNTKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9TVERJT19XUklURV9GVU5DUycnQHwkKFJFUExBQ0VfU1RESU9fV1JJVEVfRlVOQ1MpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1RNUEZJTEUnJ0B8JChSRVBMQUNFX1RNUEZJTEUpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1ZBU1BSSU5URicnQHwkKFJFUExBQ0VfVkFTUFJJTlRGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9WRFBSSU5URicnQHwkKFJFUExBQ0VfVkRQUklOVEYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1ZGUFJJTlRGJydAfCQoUkVQTEFDRV9WRlBSSU5URil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfVlBSSU5URicnQHwkKFJFUExBQ0VfVlBSSU5URil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfVlNOUFJJTlRGJydAfCQoUkVQTEFDRV9WU05QUklOVEYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1ZTUFJJTlRGJydAfCQoUkVQTEFDRV9WU1BSSU5URil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0FTTV9TWU1CT0xfUFJFRklYJydAfCQoQVNNX1NZTUJPTF9QUkVGSVgpfGcnIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwvciAkKENYWERFRlNfSCknIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxML3IgJChBUkdfTk9OTlVMTF9IKScgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UvciAkKFdBUk5fT05fVVNFX0gpJzsgXAorCX0gPiAkQC10ICYmIFwKKwltdiAkQC10ICRACisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8c3RkbGliLmg+IHdoZW4gdGhlIHN5c3RlbQorIyBkb2Vzbid0IGhhdmUgb25lIHRoYXQgd29ya3Mgd2l0aCB0aGUgZ2l2ZW4gY29tcGlsZXIuCitzdGRsaWIuaDogc3RkbGliLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpIFwKKyAgJChfTk9SRVRVUk5fSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCisJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKwl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKKwkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorCSAgICAgIC1lICdzfEAnJ05FWFRfU1RETElCX0gnJ0B8JChORVhUX1NURExJQl9IKXxnJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX19FWElUJydALyQoR05VTElCX19FWElUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0FUT0xMJydALyQoR05VTElCX0FUT0xMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0NBTExPQ19QT1NJWCcnQC8kKEdOVUxJQl9DQUxMT0NfUE9TSVgpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRScnQC8kKEdOVUxJQl9DQU5PTklDQUxJWkVfRklMRV9OQU1FKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVExPQURBVkcnJ0AvJChHTlVMSUJfR0VUTE9BREFWRykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRTVUJPUFQnJ0AvJChHTlVMSUJfR0VUU1VCT1BUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0dSQU5UUFQnJ0AvJChHTlVMSUJfR1JBTlRQVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQUxMT0NfUE9TSVgnJ0AvJChHTlVMSUJfTUFMTE9DX1BPU0lYKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01CVE9XQycnQC8kKEdOVUxJQl9NQlRPV0MpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUtEVEVNUCcnQC8kKEdOVUxJQl9NS0RURU1QKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01LT1NURU1QJydALyQoR05VTElCX01LT1NURU1QKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01LT1NURU1QUycnQC8kKEdOVUxJQl9NS09TVEVNUFMpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUtTVEVNUCcnQC8kKEdOVUxJQl9NS1NURU1QKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01LU1RFTVBTJydALyQoR05VTElCX01LU1RFTVBTKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BPU0lYX09QRU5QVCcnQC8kKEdOVUxJQl9QT1NJWF9PUEVOUFQpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUFRTTkFNRScnQC8kKEdOVUxJQl9QVFNOQU1FKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BUU05BTUVfUicnQC8kKEdOVUxJQl9QVFNOQU1FX1IpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUFVURU5WJydALyQoR05VTElCX1BVVEVOVikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SQU5ET00nJ0AvJChHTlVMSUJfUkFORE9NKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1JBTkRPTV9SJydALyQoR05VTElCX1JBTkRPTV9SKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1JFQUxMT0NfUE9TSVgnJ0AvJChHTlVMSUJfUkVBTExPQ19QT1NJWCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRUFMUEFUSCcnQC8kKEdOVUxJQl9SRUFMUEFUSCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SUE1BVENIJydALyQoR05VTElCX1JQTUFUQ0gpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU0VURU5WJydALyQoR05VTElCX1NFVEVOVikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJUT0QnJ0AvJChHTlVMSUJfU1RSVE9EKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlRPTEwnJ0AvJChHTlVMSUJfU1RSVE9MTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJUT1VMTCcnQC8kKEdOVUxJQl9TVFJUT1VMTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TWVNURU1fUE9TSVgnJ0AvJChHTlVMSUJfU1lTVEVNX1BPU0lYKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1VOTE9DS1BUJydALyQoR05VTElCX1VOTE9DS1BUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1VOU0VURU5WJydALyQoR05VTElCX1VOU0VURU5WKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dDVE9NQicnQC8kKEdOVUxJQl9XQ1RPTUIpL2cnIFwKKwkgICAgICA8ICQoc3JjZGlyKS9zdGRsaWIuaW4uaCB8IFwKKwkgIHNlZCAtZSAnc3xAJydIQVZFX19FWElUJydAfCQoSEFWRV9fRVhJVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfQVRPTEwnJ0B8JChIQVZFX0FUT0xMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FJydAfCQoSEFWRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0dFVExPQURBVkcnJ0B8JChIQVZFX0RFQ0xfR0VUTE9BREFWRyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfR0VUU1VCT1BUJydAfCQoSEFWRV9HRVRTVUJPUFQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0dSQU5UUFQnJ0B8JChIQVZFX0dSQU5UUFQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX01LRFRFTVAnJ0B8JChIQVZFX01LRFRFTVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX01LT1NURU1QJydAfCQoSEFWRV9NS09TVEVNUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTUtPU1RFTVBTJydAfCQoSEFWRV9NS09TVEVNUFMpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX01LU1RFTVAnJ0B8JChIQVZFX01LU1RFTVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX01LU1RFTVBTJydAfCQoSEFWRV9NS1NURU1QUyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfUE9TSVhfT1BFTlBUJydAfCQoSEFWRV9QT1NJWF9PUEVOUFQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1BUU05BTUUnJ0B8JChIQVZFX1BUU05BTUUpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1BUU05BTUVfUicnQHwkKEhBVkVfUFRTTkFNRV9SKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9SQU5ET00nJ0B8JChIQVZFX1JBTkRPTSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfUkFORE9NX0gnJ0B8JChIQVZFX1JBTkRPTV9IKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9SQU5ET01fUicnQHwkKEhBVkVfUkFORE9NX1IpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1JFQUxQQVRIJydAfCQoSEFWRV9SRUFMUEFUSCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfUlBNQVRDSCcnQHwkKEhBVkVfUlBNQVRDSCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9TRVRFTlYnJ0B8JChIQVZFX0RFQ0xfU0VURU5WKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFJUT0QnJ0B8JChIQVZFX1NUUlRPRCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RSVE9MTCcnQHwkKEhBVkVfU1RSVE9MTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RSVE9VTEwnJ0B8JChIQVZFX1NUUlRPVUxMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFJVQ1RfUkFORE9NX0RBVEEnJ0B8JChIQVZFX1NUUlVDVF9SQU5ET01fREFUQSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1lTX0xPQURBVkdfSCcnQHwkKEhBVkVfU1lTX0xPQURBVkdfSCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfVU5MT0NLUFQnJ0B8JChIQVZFX1VOTE9DS1BUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX1VOU0VURU5WJydAfCQoSEFWRV9ERUNMX1VOU0VURU5WKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9DQUxMT0MnJ0B8JChSRVBMQUNFX0NBTExPQyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRScnQHwkKFJFUExBQ0VfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTUFMTE9DJydAfCQoUkVQTEFDRV9NQUxMT0MpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX01CVE9XQycnQHwkKFJFUExBQ0VfTUJUT1dDKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9NS1NURU1QJydAfCQoUkVQTEFDRV9NS1NURU1QKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9QVFNOQU1FJydAfCQoUkVQTEFDRV9QVFNOQU1FKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9QVFNOQU1FX1InJ0B8JChSRVBMQUNFX1BUU05BTUVfUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfUFVURU5WJydAfCQoUkVQTEFDRV9QVVRFTlYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1JBTkRPTV9SJydAfCQoUkVQTEFDRV9SQU5ET01fUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfUkVBTExPQycnQHwkKFJFUExBQ0VfUkVBTExPQyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfUkVBTFBBVEgnJ0B8JChSRVBMQUNFX1JFQUxQQVRIKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9TRVRFTlYnJ0B8JChSRVBMQUNFX1NFVEVOVil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfU1RSVE9EJydAfCQoUkVQTEFDRV9TVFJUT0QpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1VOU0VURU5WJydAfCQoUkVQTEFDRV9VTlNFVEVOVil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfV0NUT01CJydAfCQoUkVQTEFDRV9XQ1RPTUIpfGcnIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwvciAkKENYWERFRlNfSCknIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX05vcmV0dXJuL3IgJChfTk9SRVRVUk5fSCknIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxML3IgJChBUkdfTk9OTlVMTF9IKScgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UvciAkKFdBUk5fT05fVVNFX0gpJzsgXAorCX0gPiAkQC10ICYmIFwKKwltdiAkQC10ICRACisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8c3RyaW5nLmg+IHdoZW4gdGhlIHN5c3RlbQorIyBkb2Vzbid0IGhhdmUgb25lIHRoYXQgd29ya3Mgd2l0aCB0aGUgZ2l2ZW4gY29tcGlsZXIuCitzdHJpbmcuaDogc3RyaW5nLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJyAmJiBcCisJICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKwkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKwkgICAgICAtZSAnc3xAJydORVhUX1NUUklOR19IJydAfCQoTkVYVF9TVFJJTkdfSCl8ZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GRlNMJydALyQoR05VTElCX0ZGU0wpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRkZTTEwnJ0AvJChHTlVMSUJfRkZTTEwpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTTEVOJydALyQoR05VTElCX01CU0xFTikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNOTEVOJydALyQoR05VTElCX01CU05MRU4pL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTQ0hSJydALyQoR05VTElCX01CU0NIUikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNSQ0hSJydALyQoR05VTElCX01CU1JDSFIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTU1RSJydALyQoR05VTElCX01CU1NUUikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNDQVNFQ01QJydALyQoR05VTElCX01CU0NBU0VDTVApL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTTkNBU0VDTVAnJ0AvJChHTlVMSUJfTUJTTkNBU0VDTVApL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTUENBU0VDTVAnJ0AvJChHTlVMSUJfTUJTUENBU0VDTVApL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTQ0FTRVNUUicnQC8kKEdOVUxJQl9NQlNDQVNFU1RSKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01CU0NTUE4nJ0AvJChHTlVMSUJfTUJTQ1NQTikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNQQlJLJydALyQoR05VTElCX01CU1BCUkspL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTU1BOJydALyQoR05VTElCX01CU1NQTikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNTRVAnJ0AvJChHTlVMSUJfTUJTU0VQKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01CU1RPS19SJydALyQoR05VTElCX01CU1RPS19SKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01FTUNIUicnQC8kKEdOVUxJQl9NRU1DSFIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUVNTUVNJydALyQoR05VTElCX01FTU1FTSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NRU1QQ1BZJydALyQoR05VTElCX01FTVBDUFkpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUVNUkNIUicnQC8kKEdOVUxJQl9NRU1SQ0hSKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1JBV01FTUNIUicnQC8kKEdOVUxJQl9SQVdNRU1DSFIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU1RQQ1BZJydALyQoR05VTElCX1NUUENQWSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFBOQ1BZJydALyQoR05VTElCX1NUUE5DUFkpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSQ0hSTlVMJydALyQoR05VTElCX1NUUkNIUk5VTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJEVVAnJ0AvJChHTlVMSUJfU1RSRFVQKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUk5DQVQnJ0AvJChHTlVMSUJfU1RSTkNBVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJORFVQJydALyQoR05VTElCX1NUUk5EVVApL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSTkxFTicnQC8kKEdOVUxJQl9TVFJOTEVOKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlBCUksnJ0AvJChHTlVMSUJfU1RSUEJSSykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJTRVAnJ0AvJChHTlVMSUJfU1RSU0VQKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlNUUicnQC8kKEdOVUxJQl9TVFJTVFIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSQ0FTRVNUUicnQC8kKEdOVUxJQl9TVFJDQVNFU1RSKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlRPS19SJydALyQoR05VTElCX1NUUlRPS19SKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUkVSUk9SJydALyQoR05VTElCX1NUUkVSUk9SKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUkVSUk9SX1InJ0AvJChHTlVMSUJfU1RSRVJST1JfUikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJTSUdOQUwnJ0AvJChHTlVMSUJfU1RSU0lHTkFMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlZFUlNDTVAnJ0AvJChHTlVMSUJfU1RSVkVSU0NNUCkvZycgXAorCSAgICAgIDwgJChzcmNkaXIpL3N0cmluZy5pbi5oIHwgXAorCSAgc2VkIC1lICdzfEAnJ0hBVkVfRkZTTCcnQHwkKEhBVkVfRkZTTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRkZTTEwnJ0B8JChIQVZFX0ZGU0xMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9NQlNMRU4nJ0B8JChIQVZFX01CU0xFTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTUVNQ0hSJydAfCQoSEFWRV9NRU1DSFIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfTUVNTUVNJydAfCQoSEFWRV9ERUNMX01FTU1FTSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTUVNUENQWScnQHwkKEhBVkVfTUVNUENQWSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9NRU1SQ0hSJydAfCQoSEFWRV9ERUNMX01FTVJDSFIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1JBV01FTUNIUicnQHwkKEhBVkVfUkFXTUVNQ0hSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFBDUFknJ0B8JChIQVZFX1NUUENQWSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RQTkNQWScnQHwkKEhBVkVfU1RQTkNQWSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RSQ0hSTlVMJydAfCQoSEFWRV9TVFJDSFJOVUwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfU1RSRFVQJydAfCQoSEFWRV9ERUNMX1NUUkRVUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9TVFJORFVQJydAfCQoSEFWRV9ERUNMX1NUUk5EVVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfU1RSTkxFTicnQHwkKEhBVkVfREVDTF9TVFJOTEVOKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFJQQlJLJydAfCQoSEFWRV9TVFJQQlJLKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFJTRVAnJ0B8JChIQVZFX1NUUlNFUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RSQ0FTRVNUUicnQHwkKEhBVkVfU1RSQ0FTRVNUUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9TVFJUT0tfUicnQHwkKEhBVkVfREVDTF9TVFJUT0tfUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9TVFJFUlJPUl9SJydAfCQoSEFWRV9ERUNMX1NUUkVSUk9SX1IpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfU1RSU0lHTkFMJydAfCQoSEFWRV9ERUNMX1NUUlNJR05BTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RSVkVSU0NNUCcnQHwkKEhBVkVfU1RSVkVSU0NNUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfU1RQTkNQWScnQHwkKFJFUExBQ0VfU1RQTkNQWSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTUVNQ0hSJydAfCQoUkVQTEFDRV9NRU1DSFIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX01FTU1FTScnQHwkKFJFUExBQ0VfTUVNTUVNKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9TVFJDQVNFU1RSJydAfCQoUkVQTEFDRV9TVFJDQVNFU1RSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9TVFJDSFJOVUwnJ0B8JChSRVBMQUNFX1NUUkNIUk5VTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfU1RSRFVQJydAfCQoUkVQTEFDRV9TVFJEVVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1NUUlNUUicnQHwkKFJFUExBQ0VfU1RSU1RSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9TVFJFUlJPUicnQHwkKFJFUExBQ0VfU1RSRVJST1IpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1NUUkVSUk9SX1InJ0B8JChSRVBMQUNFX1NUUkVSUk9SX1IpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1NUUk5DQVQnJ0B8JChSRVBMQUNFX1NUUk5DQVQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1NUUk5EVVAnJ0B8JChSRVBMQUNFX1NUUk5EVVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1NUUk5MRU4nJ0B8JChSRVBMQUNFX1NUUk5MRU4pfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1NUUlNJR05BTCcnQHwkKFJFUExBQ0VfU1RSU0lHTkFMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9TVFJUT0tfUicnQHwkKFJFUExBQ0VfU1RSVE9LX1IpfGcnIFwKKwkgICAgICAtZSAnc3xAJydVTkRFRklORV9TVFJUT0tfUicnQHwkKFVOREVGSU5FX1NUUlRPS19SKXxnJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBML3IgJChDWFhERUZTX0gpJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVMTC9yICQoQVJHX05PTk5VTExfSCknIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFL3IgJChXQVJOX09OX1VTRV9IKSc7IFwKKwkgICAgICA8ICQoc3JjZGlyKS9zdHJpbmcuaW4uaDsgXAorCX0gPiAkQC10ICYmIFwKKwltdiAkQC10ICRACisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8c3lzL3N0YXQuaD4gd2hlbiB0aGUgc3lzdGVtCisjIGhhcyBvbmUgdGhhdCBpcyBpbmNvbXBsZXRlLgorc3lzL3N0YXQuaDogc3lzX3N0YXQuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKENYWERFRlNfSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCisJJChBTV9WX2F0KSQoTUtESVJfUCkgc3lzCisJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKwl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCisJICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKwkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKwkgICAgICAtZSAnc3xAJydORVhUX1NZU19TVEFUX0gnJ0B8JChORVhUX1NZU19TVEFUX0gpfGcnIFwKKwkgICAgICAtZSAnc3xAJydXSU5ET1dTXzY0X0JJVF9TVF9TSVpFJydAfCQoV0lORE9XU182NF9CSVRfU1RfU0laRSl8ZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GQ0hNT0RBVCcnQC8kKEdOVUxJQl9GQ0hNT0RBVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GU1RBVCcnQC8kKEdOVUxJQl9GU1RBVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GU1RBVEFUJydALyQoR05VTElCX0ZTVEFUQVQpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRlVUSU1FTlMnJ0AvJChHTlVMSUJfRlVUSU1FTlMpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTENITU9EJydALyQoR05VTElCX0xDSE1PRCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MU1RBVCcnQC8kKEdOVUxJQl9MU1RBVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS0RJUkFUJydALyQoR05VTElCX01LRElSQVQpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUtGSUZPJydALyQoR05VTElCX01LRklGTykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS0ZJRk9BVCcnQC8kKEdOVUxJQl9NS0ZJRk9BVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS05PRCcnQC8kKEdOVUxJQl9NS05PRCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS05PREFUJydALyQoR05VTElCX01LTk9EQVQpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU1RBVCcnQC8kKEdOVUxJQl9TVEFUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1VUSU1FTlNBVCcnQC8kKEdOVUxJQl9VVElNRU5TQVQpL2cnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0ZDSE1PREFUJydAfCQoSEFWRV9GQ0hNT0RBVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRlNUQVRBVCcnQHwkKEhBVkVfRlNUQVRBVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRlVUSU1FTlMnJ0B8JChIQVZFX0ZVVElNRU5TKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9MQ0hNT0QnJ0B8JChIQVZFX0xDSE1PRCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTFNUQVQnJ0B8JChIQVZFX0xTVEFUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9NS0RJUkFUJydAfCQoSEFWRV9NS0RJUkFUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9NS0ZJRk8nJ0B8JChIQVZFX01LRklGTyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTUtGSUZPQVQnJ0B8JChIQVZFX01LRklGT0FUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9NS05PRCcnQHwkKEhBVkVfTUtOT0QpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX01LTk9EQVQnJ0B8JChIQVZFX01LTk9EQVQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1VUSU1FTlNBVCcnQHwkKEhBVkVfVVRJTUVOU0FUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9GU1RBVCcnQHwkKFJFUExBQ0VfRlNUQVQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0ZTVEFUQVQnJ0B8JChSRVBMQUNFX0ZTVEFUQVQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0ZVVElNRU5TJydAfCQoUkVQTEFDRV9GVVRJTUVOUyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTFNUQVQnJ0B8JChSRVBMQUNFX0xTVEFUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9NS0RJUicnQHwkKFJFUExBQ0VfTUtESVIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX01LRklGTycnQHwkKFJFUExBQ0VfTUtGSUZPKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9NS05PRCcnQHwkKFJFUExBQ0VfTUtOT0QpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1NUQVQnJ0B8JChSRVBMQUNFX1NUQVQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1VUSU1FTlNBVCcnQHwkKFJFUExBQ0VfVVRJTUVOU0FUKXxnJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBML3IgJChDWFhERUZTX0gpJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVMTC9yICQoQVJHX05PTk5VTExfSCknIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFL3IgJChXQVJOX09OX1VTRV9IKScgXAorCSAgICAgIDwgJChzcmNkaXIpL3N5c19zdGF0LmluLmg7IFwKKwl9ID4gJEAtdCAmJiBcCisJbXYgJEAtdCAkQAorCisjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBjcmVhdGUgPHN5cy90eXBlcy5oPiB3aGVuIHRoZSBzeXN0ZW0KKyMgZG9lc24ndCBoYXZlIG9uZSB0aGF0IHdvcmtzIHdpdGggdGhlIGdpdmVuIGNvbXBpbGVyLgorc3lzL3R5cGVzLmg6IHN5c190eXBlcy5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJJChBTV9WX2F0KSQoTUtESVJfUCkgc3lzCisJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKwl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCisJICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKwkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKwkgICAgICAtZSAnc3xAJydORVhUX1NZU19UWVBFU19IJydAfCQoTkVYVF9TWVNfVFlQRVNfSCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1dJTkRPV1NfNjRfQklUX09GRl9UJydAfCQoV0lORE9XU182NF9CSVRfT0ZGX1QpfGcnIFwKKwkgICAgICA8ICQoc3JjZGlyKS9zeXNfdHlwZXMuaW4uaDsgXAorCX0gPiAkQC10ICYmIFwKKwltdiAkQC10ICRACisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8c3lzL3dhaXQuaD4gd2hlbiB0aGUgc3lzdGVtCisjIGhhcyBvbmUgdGhhdCBpcyBpbmNvbXBsZXRlLgorc3lzL3dhaXQuaDogc3lzX3dhaXQuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKENYWERFRlNfSCkgJChXQVJOX09OX1VTRV9IKQorCSQoQU1fVl9hdCkkKE1LRElSX1ApIHN5cworCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJzsgXAorCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCisJICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnTkVYVF9TWVNfV0FJVF9IJydAfCQoTkVYVF9TWVNfV0FJVF9IKXxnJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dBSVRQSUQnJ0AvJChHTlVMSUJfV0FJVFBJRCkvZycgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTC9yICQoQ1hYREVGU19IKScgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UvciAkKFdBUk5fT05fVVNFX0gpJyBcCisJICAgICAgPCAkKHNyY2Rpcikvc3lzX3dhaXQuaW4uaDsgXAorCX0gPiAkQC10ICYmIFwKKwltdiAkQC10ICRACisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8dGltZS5oPiB3aGVuIHRoZSBzeXN0ZW0KKyMgZG9lc24ndCBoYXZlIG9uZSB0aGF0IHdvcmtzIHdpdGggdGhlIGdpdmVuIGNvbXBpbGVyLgordGltZS5oOiB0aW1lLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJyAmJiBcCisJICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKwkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKwkgICAgICAtZSAnc3xAJydORVhUX1RJTUVfSCcnQHwkKE5FWFRfVElNRV9IKXxnJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01LVElNRScnQC8kKEdOVUxJQl9NS1RJTUUpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTkFOT1NMRUVQJydALyQoR05VTElCX05BTk9TTEVFUCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJQVElNRScnQC8kKEdOVUxJQl9TVFJQVElNRSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9USU1FR00nJ0AvJChHTlVMSUJfVElNRUdNKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1RJTUVfUicnQC8kKEdOVUxJQl9USU1FX1IpL2cnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfTE9DQUxUSU1FX1InJ0B8JChIQVZFX0RFQ0xfTE9DQUxUSU1FX1IpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX05BTk9TTEVFUCcnQHwkKEhBVkVfTkFOT1NMRUVQKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFJQVElNRScnQHwkKEhBVkVfU1RSUFRJTUUpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1RJTUVHTScnQHwkKEhBVkVfVElNRUdNKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9MT0NBTFRJTUVfUicnQHwkKFJFUExBQ0VfTE9DQUxUSU1FX1IpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX01LVElNRScnQHwkKFJFUExBQ0VfTUtUSU1FKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9OQU5PU0xFRVAnJ0B8JChSRVBMQUNFX05BTk9TTEVFUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfVElNRUdNJydAfCQoUkVQTEFDRV9USU1FR00pfGcnIFwKKwkgICAgICAtZSAnc3xAJydQVEhSRUFEX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUMnJ0B8JChQVEhSRUFEX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUMpfGcnIFwKKwkgICAgICAtZSAnc3xAJydTWVNfVElNRV9IX0RFRklORVNfU1RSVUNUX1RJTUVTUEVDJydAfCQoU1lTX1RJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1RJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQycnQHwkKFRJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQyl8ZycgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTC9yICQoQ1hYREVGU19IKScgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwvciAkKEFSR19OT05OVUxMX0gpJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRS9yICQoV0FSTl9PTl9VU0VfSCknIFwKKwkgICAgICA8ICQoc3JjZGlyKS90aW1lLmluLmg7IFwKKwl9ID4gJEAtdCAmJiBcCiAJbXYgJEAtdCAkQAogCiAjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBjcmVhdGUgYW4gZW1wdHkgcGxhY2Vob2xkZXIgZm9yCiAjIDx1bmlzdGQuaD4gd2hlbiB0aGUgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBvbmUuCi11bmlzdGQuaDoKLQllY2hvICcvKiBFbXB0eSBwbGFjZWhvbGRlciBmb3IgJEAuICAqLycgPiRACit1bmlzdGQuaDogdW5pc3RkLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJzsgXAorCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9VTklTVERfSCcnQHwkKEhBVkVfVU5JU1REX0gpfGcnIFwKKwkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKwkgICAgICAtZSAnc3xAJydORVhUX1VOSVNURF9IJydAfCQoTkVYVF9VTklTVERfSCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1dJTkRPV1NfNjRfQklUX09GRl9UJydAfCQoV0lORE9XU182NF9CSVRfT0ZGX1QpfGcnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfQ0hESVInJ0AvJChHTlVMSUJfQ0hESVIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfQ0hPV04nJ0AvJChHTlVMSUJfQ0hPV04pL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfQ0xPU0UnJ0AvJChHTlVMSUJfQ0xPU0UpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRFVQJydALyQoR05VTElCX0RVUCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9EVVAyJydALyQoR05VTElCX0RVUDIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRFVQMycnQC8kKEdOVUxJQl9EVVAzKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0VOVklST04nJ0AvJChHTlVMSUJfRU5WSVJPTikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9FVUlEQUNDRVNTJydALyQoR05VTElCX0VVSURBQ0NFU1MpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRkFDQ0VTU0FUJydALyQoR05VTElCX0ZBQ0NFU1NBVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GQ0hESVInJ0AvJChHTlVMSUJfRkNIRElSKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0ZDSE9XTkFUJydALyQoR05VTElCX0ZDSE9XTkFUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0ZEQVRBU1lOQycnQC8kKEdOVUxJQl9GREFUQVNZTkMpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRlNZTkMnJ0AvJChHTlVMSUJfRlNZTkMpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRlRSVU5DQVRFJydALyQoR05VTElCX0ZUUlVOQ0FURSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRDV0QnJ0AvJChHTlVMSUJfR0VUQ1dEKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVERPTUFJTk5BTUUnJ0AvJChHTlVMSUJfR0VURE9NQUlOTkFNRSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVREVEFCTEVTSVpFJydALyQoR05VTElCX0dFVERUQUJMRVNJWkUpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUR1JPVVBTJydALyQoR05VTElCX0dFVEdST1VQUykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRIT1NUTkFNRScnQC8kKEdOVUxJQl9HRVRIT1NUTkFNRSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRMT0dJTicnQC8kKEdOVUxJQl9HRVRMT0dJTikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRMT0dJTl9SJydALyQoR05VTElCX0dFVExPR0lOX1IpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUUEFHRVNJWkUnJ0AvJChHTlVMSUJfR0VUUEFHRVNJWkUpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUVVNFUlNIRUxMJydALyQoR05VTElCX0dFVFVTRVJTSEVMTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HUk9VUF9NRU1CRVInJ0AvJChHTlVMSUJfR1JPVVBfTUVNQkVSKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0lTQVRUWScnQC8kKEdOVUxJQl9JU0FUVFkpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTENIT1dOJydALyQoR05VTElCX0xDSE9XTikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MSU5LJydALyQoR05VTElCX0xJTkspL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTElOS0FUJydALyQoR05VTElCX0xJTktBVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MU0VFSycnQC8kKEdOVUxJQl9MU0VFSykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QSVBFJydALyQoR05VTElCX1BJUEUpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUElQRTInJ0AvJChHTlVMSUJfUElQRTIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUFJFQUQnJ0AvJChHTlVMSUJfUFJFQUQpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUFdSSVRFJydALyQoR05VTElCX1BXUklURSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRUFEJydALyQoR05VTElCX1JFQUQpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUkVBRExJTksnJ0AvJChHTlVMSUJfUkVBRExJTkspL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUkVBRExJTktBVCcnQC8kKEdOVUxJQl9SRUFETElOS0FUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1JNRElSJydALyQoR05VTElCX1JNRElSKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NFVEhPU1ROQU1FJydALyQoR05VTElCX1NFVEhPU1ROQU1FKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NMRUVQJydALyQoR05VTElCX1NMRUVQKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NZTUxJTksnJ0AvJChHTlVMSUJfU1lNTElOSykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TWU1MSU5LQVQnJ0AvJChHTlVMSUJfU1lNTElOS0FUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1RUWU5BTUVfUicnQC8kKEdOVUxJQl9UVFlOQU1FX1IpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfVU5JU1REX0hfR0VUT1BUJydALzAkKEdOVUxJQl9HTF9VTklTVERfSF9HRVRPUFQpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfVU5JU1REX0hfTk9OQkxPQ0tJTkcnJ0AvJChHTlVMSUJfVU5JU1REX0hfTk9OQkxPQ0tJTkcpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfVU5JU1REX0hfU0lHUElQRScnQC8kKEdOVUxJQl9VTklTVERfSF9TSUdQSVBFKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1VOTElOSycnQC8kKEdOVUxJQl9VTkxJTkspL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfVU5MSU5LQVQnJ0AvJChHTlVMSUJfVU5MSU5LQVQpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfVVNMRUVQJydALyQoR05VTElCX1VTTEVFUCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XUklURScnQC8kKEdOVUxJQl9XUklURSkvZycgXAorCSAgICAgIDwgJChzcmNkaXIpL3VuaXN0ZC5pbi5oIHwgXAorCSAgc2VkIC1lICdzfEAnJ0hBVkVfQ0hPV04nJ0B8JChIQVZFX0NIT1dOKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9EVVAyJydAfCQoSEFWRV9EVVAyKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9EVVAzJydAfCQoSEFWRV9EVVAzKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9FVUlEQUNDRVNTJydAfCQoSEFWRV9FVUlEQUNDRVNTKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9GQUNDRVNTQVQnJ0B8JChIQVZFX0ZBQ0NFU1NBVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRkNIRElSJydAfCQoSEFWRV9GQ0hESVIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0ZDSE9XTkFUJydAfCQoSEFWRV9GQ0hPV05BVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRkRBVEFTWU5DJydAfCQoSEFWRV9GREFUQVNZTkMpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0ZTWU5DJydAfCQoSEFWRV9GU1lOQyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRlRSVU5DQVRFJydAfCQoSEFWRV9GVFJVTkNBVEUpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0dFVERUQUJMRVNJWkUnJ0B8JChIQVZFX0dFVERUQUJMRVNJWkUpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0dFVEdST1VQUycnQHwkKEhBVkVfR0VUR1JPVVBTKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9HRVRIT1NUTkFNRScnQHwkKEhBVkVfR0VUSE9TVE5BTUUpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0dFVExPR0lOJydAfCQoSEFWRV9HRVRMT0dJTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfR0VUUEFHRVNJWkUnJ0B8JChIQVZFX0dFVFBBR0VTSVpFKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9HUk9VUF9NRU1CRVInJ0B8JChIQVZFX0dST1VQX01FTUJFUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTENIT1dOJydAfCQoSEFWRV9MQ0hPV04pfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0xJTksnJ0B8JChIQVZFX0xJTkspfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0xJTktBVCcnQHwkKEhBVkVfTElOS0FUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9QSVBFJydAfCQoSEFWRV9QSVBFKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9QSVBFMicnQHwkKEhBVkVfUElQRTIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1BSRUFEJydAfCQoSEFWRV9QUkVBRCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfUFdSSVRFJydAfCQoSEFWRV9QV1JJVEUpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1JFQURMSU5LJydAfCQoSEFWRV9SRUFETElOSyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfUkVBRExJTktBVCcnQHwkKEhBVkVfUkVBRExJTktBVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU0VUSE9TVE5BTUUnJ0B8JChIQVZFX1NFVEhPU1ROQU1FKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TTEVFUCcnQHwkKEhBVkVfU0xFRVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1NZTUxJTksnJ0B8JChIQVZFX1NZTUxJTkspfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1NZTUxJTktBVCcnQHwkKEhBVkVfU1lNTElOS0FUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9VTkxJTktBVCcnQHwkKEhBVkVfVU5MSU5LQVQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1VTTEVFUCcnQHwkKEhBVkVfVVNMRUVQKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0VOVklST04nJ0B8JChIQVZFX0RFQ0xfRU5WSVJPTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9GQ0hESVInJ0B8JChIQVZFX0RFQ0xfRkNIRElSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0ZEQVRBU1lOQycnQHwkKEhBVkVfREVDTF9GREFUQVNZTkMpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfR0VURE9NQUlOTkFNRScnQHwkKEhBVkVfREVDTF9HRVRET01BSU5OQU1FKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0dFVExPR0lOX1InJ0B8JChIQVZFX0RFQ0xfR0VUTE9HSU5fUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9HRVRQQUdFU0laRScnQHwkKEhBVkVfREVDTF9HRVRQQUdFU0laRSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9HRVRVU0VSU0hFTEwnJ0B8JChIQVZFX0RFQ0xfR0VUVVNFUlNIRUxMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX1NFVEhPU1ROQU1FJydAfCQoSEFWRV9ERUNMX1NFVEhPU1ROQU1FKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX1RUWU5BTUVfUicnQHwkKEhBVkVfREVDTF9UVFlOQU1FX1IpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX09TX0gnJ0B8JChIQVZFX09TX0gpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1NZU19QQVJBTV9IJydAfCQoSEFWRV9TWVNfUEFSQU1fSCl8ZycgXAorCSAgfCBcCisJICBzZWQgLWUgJ3N8QCcnUkVQTEFDRV9DSE9XTicnQHwkKFJFUExBQ0VfQ0hPV04pfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0NMT1NFJydAfCQoUkVQTEFDRV9DTE9TRSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRFVQJydAfCQoUkVQTEFDRV9EVVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0RVUDInJ0B8JChSRVBMQUNFX0RVUDIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0ZDSE9XTkFUJydAfCQoUkVQTEFDRV9GQ0hPV05BVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRlRSVU5DQVRFJydAfCQoUkVQTEFDRV9GVFJVTkNBVEUpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0dFVENXRCcnQHwkKFJFUExBQ0VfR0VUQ1dEKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9HRVRET01BSU5OQU1FJydAfCQoUkVQTEFDRV9HRVRET01BSU5OQU1FKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9HRVRMT0dJTl9SJydAfCQoUkVQTEFDRV9HRVRMT0dJTl9SKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9HRVRHUk9VUFMnJ0B8JChSRVBMQUNFX0dFVEdST1VQUyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfR0VUUEFHRVNJWkUnJ0B8JChSRVBMQUNFX0dFVFBBR0VTSVpFKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9JU0FUVFknJ0B8JChSRVBMQUNFX0lTQVRUWSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTENIT1dOJydAfCQoUkVQTEFDRV9MQ0hPV04pfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0xJTksnJ0B8JChSRVBMQUNFX0xJTkspfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0xJTktBVCcnQHwkKFJFUExBQ0VfTElOS0FUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9MU0VFSycnQHwkKFJFUExBQ0VfTFNFRUspfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1BSRUFEJydAfCQoUkVQTEFDRV9QUkVBRCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfUFdSSVRFJydAfCQoUkVQTEFDRV9QV1JJVEUpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1JFQUQnJ0B8JChSRVBMQUNFX1JFQUQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1JFQURMSU5LJydAfCQoUkVQTEFDRV9SRUFETElOSyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfUk1ESVInJ0B8JChSRVBMQUNFX1JNRElSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9TTEVFUCcnQHwkKFJFUExBQ0VfU0xFRVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1NZTUxJTksnJ0B8JChSRVBMQUNFX1NZTUxJTkspfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1RUWU5BTUVfUicnQHwkKFJFUExBQ0VfVFRZTkFNRV9SKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9VTkxJTksnJ0B8JChSRVBMQUNFX1VOTElOSyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfVU5MSU5LQVQnJ0B8JChSRVBMQUNFX1VOTElOS0FUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9VU0xFRVAnJ0B8JChSRVBMQUNFX1VTTEVFUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfV1JJVEUnJ0B8JChSRVBMQUNFX1dSSVRFKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IJydAfCQoVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IX0FORF9VU0VfU09DS0VUUycnQHwkKFVOSVNURF9IX0hBVkVfV0lOU09DSzJfSF9BTkRfVVNFX1NPQ0tFVFMpfGcnIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwvciAkKENYWERFRlNfSCknIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxML3IgJChBUkdfTk9OTlVMTF9IKScgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UvciAkKFdBUk5fT05fVVNFX0gpJzsgXAorCX0gPiAkQC10ICYmIFwKKwltdiAkQC10ICRACisKK3VuaXR5cGVzLmg6IHVuaXR5cGVzLmluLmgKKwkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKKwkgIGNhdCAkKHNyY2RpcikvdW5pdHlwZXMuaW4uaDsgXAorCX0gPiAkQC10ICYmIFwKKwltdiAtZiAkQC10ICRACisKK3VuaXdpZHRoLmg6IHVuaXdpZHRoLmluLmgKKwkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKKwkgIGNhdCAkKHNyY2RpcikvdW5pd2lkdGguaW4uaDsgXAorCX0gPiAkQC10ICYmIFwKKwltdiAtZiAkQC10ICRACisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8d2NoYXIuaD4gd2hlbiB0aGUgc3lzdGVtCisjIHZlcnNpb24gZG9lcyBub3Qgd29yayBzdGFuZGFsb25lLgord2NoYXIuaDogd2NoYXIuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKENYWERFRlNfSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCisJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKwl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCisJICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKwkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0ZFQVRVUkVTX0gnJ0B8JChIQVZFX0ZFQVRVUkVTX0gpfGcnIFwKKwkgICAgICAtZSAnc3xAJydORVhUX1dDSEFSX0gnJ0B8JChORVhUX1dDSEFSX0gpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1dDSEFSX0gnJ0B8JChIQVZFX1dDSEFSX0gpfGcnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfQlRPV0MnJ0AvJChHTlVMSUJfQlRPV0MpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfV0NUT0InJ0AvJChHTlVMSUJfV0NUT0IpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTSU5JVCcnQC8kKEdOVUxJQl9NQlNJTklUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01CUlRPV0MnJ0AvJChHTlVMSUJfTUJSVE9XQykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlJMRU4nJ0AvJChHTlVMSUJfTUJSTEVOKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01CU1JUT1dDUycnQC8kKEdOVUxJQl9NQlNSVE9XQ1MpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTTlJUT1dDUycnQC8kKEdOVUxJQl9NQlNOUlRPV0NTKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dDUlRPTUInJ0AvJChHTlVMSUJfV0NSVE9NQikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XQ1NSVE9NQlMnJ0AvJChHTlVMSUJfV0NTUlRPTUJTKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dDU05SVE9NQlMnJ0AvJChHTlVMSUJfV0NTTlJUT01CUykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XQ1dJRFRIJydALyQoR05VTElCX1dDV0lEVEgpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfV01FTUNIUicnQC8kKEdOVUxJQl9XTUVNQ0hSKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dNRU1DTVAnJ0AvJChHTlVMSUJfV01FTUNNUCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XTUVNQ1BZJydALyQoR05VTElCX1dNRU1DUFkpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfV01FTU1PVkUnJ0AvJChHTlVMSUJfV01FTU1PVkUpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfV01FTVNFVCcnQC8kKEdOVUxJQl9XTUVNU0VUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dDU0xFTicnQC8kKEdOVUxJQl9XQ1NMRU4pL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfV0NTTkxFTicnQC8kKEdOVUxJQl9XQ1NOTEVOKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dDU0NQWScnQC8kKEdOVUxJQl9XQ1NDUFkpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfV0NQQ1BZJydALyQoR05VTElCX1dDUENQWSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XQ1NOQ1BZJydALyQoR05VTElCX1dDU05DUFkpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfV0NQTkNQWScnQC8kKEdOVUxJQl9XQ1BOQ1BZKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dDU0NBVCcnQC8kKEdOVUxJQl9XQ1NDQVQpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfV0NTTkNBVCcnQC8kKEdOVUxJQl9XQ1NOQ0FUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dDU0NNUCcnQC8kKEdOVUxJQl9XQ1NDTVApL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfV0NTTkNNUCcnQC8kKEdOVUxJQl9XQ1NOQ01QKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dDU0NBU0VDTVAnJ0AvJChHTlVMSUJfV0NTQ0FTRUNNUCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XQ1NOQ0FTRUNNUCcnQC8kKEdOVUxJQl9XQ1NOQ0FTRUNNUCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XQ1NDT0xMJydALyQoR05VTElCX1dDU0NPTEwpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfV0NTWEZSTScnQC8kKEdOVUxJQl9XQ1NYRlJNKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dDU0RVUCcnQC8kKEdOVUxJQl9XQ1NEVVApL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfV0NTQ0hSJydALyQoR05VTElCX1dDU0NIUikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XQ1NSQ0hSJydALyQoR05VTElCX1dDU1JDSFIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfV0NTQ1NQTicnQC8kKEdOVUxJQl9XQ1NDU1BOKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dDU1NQTicnQC8kKEdOVUxJQl9XQ1NTUE4pL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfV0NTUEJSSycnQC8kKEdOVUxJQl9XQ1NQQlJLKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dDU1NUUicnQC8kKEdOVUxJQl9XQ1NTVFIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfV0NTVE9LJydALyQoR05VTElCX1dDU1RPSykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XQ1NXSURUSCcnQC8kKEdOVUxJQl9XQ1NXSURUSCkvZycgXAorCSAgICAgIDwgJChzcmNkaXIpL3djaGFyLmluLmggfCBcCisJICBzZWQgLWUgJ3N8QCcnSEFWRV9XSU5UX1QnJ0B8JChIQVZFX1dJTlRfVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfQlRPV0MnJ0B8JChIQVZFX0JUT1dDKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9NQlNJTklUJydAfCQoSEFWRV9NQlNJTklUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9NQlJUT1dDJydAfCQoSEFWRV9NQlJUT1dDKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9NQlJMRU4nJ0B8JChIQVZFX01CUkxFTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTUJTUlRPV0NTJydAfCQoSEFWRV9NQlNSVE9XQ1MpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX01CU05SVE9XQ1MnJ0B8JChIQVZFX01CU05SVE9XQ1MpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1dDUlRPTUInJ0B8JChIQVZFX1dDUlRPTUIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1dDU1JUT01CUycnQHwkKEhBVkVfV0NTUlRPTUJTKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XQ1NOUlRPTUJTJydAfCQoSEFWRV9XQ1NOUlRPTUJTKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XTUVNQ0hSJydAfCQoSEFWRV9XTUVNQ0hSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XTUVNQ01QJydAfCQoSEFWRV9XTUVNQ01QKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XTUVNQ1BZJydAfCQoSEFWRV9XTUVNQ1BZKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XTUVNTU9WRScnQHwkKEhBVkVfV01FTU1PVkUpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1dNRU1TRVQnJ0B8JChIQVZFX1dNRU1TRVQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1dDU0xFTicnQHwkKEhBVkVfV0NTTEVOKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XQ1NOTEVOJydAfCQoSEFWRV9XQ1NOTEVOKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XQ1NDUFknJ0B8JChIQVZFX1dDU0NQWSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfV0NQQ1BZJydAfCQoSEFWRV9XQ1BDUFkpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1dDU05DUFknJ0B8JChIQVZFX1dDU05DUFkpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1dDUE5DUFknJ0B8JChIQVZFX1dDUE5DUFkpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1dDU0NBVCcnQHwkKEhBVkVfV0NTQ0FUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XQ1NOQ0FUJydAfCQoSEFWRV9XQ1NOQ0FUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XQ1NDTVAnJ0B8JChIQVZFX1dDU0NNUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfV0NTTkNNUCcnQHwkKEhBVkVfV0NTTkNNUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfV0NTQ0FTRUNNUCcnQHwkKEhBVkVfV0NTQ0FTRUNNUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfV0NTTkNBU0VDTVAnJ0B8JChIQVZFX1dDU05DQVNFQ01QKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XQ1NDT0xMJydAfCQoSEFWRV9XQ1NDT0xMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XQ1NYRlJNJydAfCQoSEFWRV9XQ1NYRlJNKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XQ1NEVVAnJ0B8JChIQVZFX1dDU0RVUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfV0NTQ0hSJydAfCQoSEFWRV9XQ1NDSFIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1dDU1JDSFInJ0B8JChIQVZFX1dDU1JDSFIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1dDU0NTUE4nJ0B8JChIQVZFX1dDU0NTUE4pfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1dDU1NQTicnQHwkKEhBVkVfV0NTU1BOKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XQ1NQQlJLJydAfCQoSEFWRV9XQ1NQQlJLKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XQ1NTVFInJ0B8JChIQVZFX1dDU1NUUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfV0NTVE9LJydAfCQoSEFWRV9XQ1NUT0spfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1dDU1dJRFRIJydAfCQoSEFWRV9XQ1NXSURUSCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9XQ1RPQicnQHwkKEhBVkVfREVDTF9XQ1RPQil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9XQ1dJRFRIJydAfCQoSEFWRV9ERUNMX1dDV0lEVEgpfGcnIFwKKwkgIHwgXAorCSAgc2VkIC1lICdzfEAnJ1JFUExBQ0VfTUJTVEFURV9UJydAfCQoUkVQTEFDRV9NQlNUQVRFX1QpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0JUT1dDJydAfCQoUkVQTEFDRV9CVE9XQyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfV0NUT0InJ0B8JChSRVBMQUNFX1dDVE9CKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9NQlNJTklUJydAfCQoUkVQTEFDRV9NQlNJTklUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9NQlJUT1dDJydAfCQoUkVQTEFDRV9NQlJUT1dDKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9NQlJMRU4nJ0B8JChSRVBMQUNFX01CUkxFTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTUJTUlRPV0NTJydAfCQoUkVQTEFDRV9NQlNSVE9XQ1MpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX01CU05SVE9XQ1MnJ0B8JChSRVBMQUNFX01CU05SVE9XQ1MpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1dDUlRPTUInJ0B8JChSRVBMQUNFX1dDUlRPTUIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1dDU1JUT01CUycnQHwkKFJFUExBQ0VfV0NTUlRPTUJTKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9XQ1NOUlRPTUJTJydAfCQoUkVQTEFDRV9XQ1NOUlRPTUJTKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9XQ1dJRFRIJydAfCQoUkVQTEFDRV9XQ1dJRFRIKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9XQ1NXSURUSCcnQHwkKFJFUExBQ0VfV0NTV0lEVEgpfGcnIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwvciAkKENYWERFRlNfSCknIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxML3IgJChBUkdfTk9OTlVMTF9IKScgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UvciAkKFdBUk5fT05fVVNFX0gpJzsgXAorCX0gPiAkQC10ICYmIFwKKwltdiAkQC10ICRACisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8d2N0eXBlLmg+IHdoZW4gdGhlIHN5c3RlbQorIyBkb2Vzbid0IGhhdmUgb25lIHRoYXQgd29ya3Mgd2l0aCB0aGUgZ2l2ZW4gY29tcGlsZXIuCit3Y3R5cGUuaDogd2N0eXBlLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoV0FSTl9PTl9VU0VfSCkKKwkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKKwkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorCSAgICAgIC1lICdzL0AnJ0hBVkVfV0NUWVBFX0gnJ0AvJChIQVZFX1dDVFlQRV9IKS9nJyBcCisJICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnTkVYVF9XQ1RZUEVfSCcnQHwkKE5FWFRfV0NUWVBFX0gpfGcnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfSVNXQkxBTksnJ0AvJChHTlVMSUJfSVNXQkxBTkspL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfV0NUWVBFJydALyQoR05VTElCX1dDVFlQRSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9JU1dDVFlQRScnQC8kKEdOVUxJQl9JU1dDVFlQRSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XQ1RSQU5TJydALyQoR05VTElCX1dDVFJBTlMpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfVE9XQ1RSQU5TJydALyQoR05VTElCX1RPV0NUUkFOUykvZycgXAorCSAgICAgIC1lICdzL0AnJ0hBVkVfSVNXQkxBTksnJ0AvJChIQVZFX0lTV0JMQU5LKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnSEFWRV9JU1dDTlRSTCcnQC8kKEhBVkVfSVNXQ05UUkwpL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX1dDVFlQRV9UJydALyQoSEFWRV9XQ1RZUEVfVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0hBVkVfV0NUUkFOU19UJydALyQoSEFWRV9XQ1RSQU5TX1QpL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX1dJTlRfVCcnQC8kKEhBVkVfV0lOVF9UKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnUkVQTEFDRV9JU1dCTEFOSycnQC8kKFJFUExBQ0VfSVNXQkxBTkspL2cnIFwKKwkgICAgICAtZSAncy9AJydSRVBMQUNFX0lTV0NOVFJMJydALyQoUkVQTEFDRV9JU1dDTlRSTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ1JFUExBQ0VfVE9XTE9XRVInJ0AvJChSRVBMQUNFX1RPV0xPV0VSKS9nJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBML3IgJChDWFhERUZTX0gpJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRS9yICQoV0FSTl9PTl9VU0VfSCknIFwKKwkgICAgICA8ICQoc3JjZGlyKS93Y3R5cGUuaW4uaDsgXAorCX0gPiAkQC10ICYmIFwKKwltdiAkQC10ICRACisKK21vc3RseWNsZWFuLWxvY2FsOiBtb3N0bHljbGVhbi1nZW5lcmljCisJQGZvciBkaXIgaW4gJycgJChNT1NUTFlDTEVBTkRJUlMpOyBkbyBcCisJICBpZiB0ZXN0IC1uICIkJGRpciIgJiYgdGVzdCAtZCAkJGRpcjsgdGhlbiBcCisJICAgIGVjaG8gInJtZGlyICQkZGlyIjsgcm1kaXIgJCRkaXI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCToKKwogIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KICMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgogLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbGliL2FiaXRzZXQuYyBiL2xpYi9hYml0c2V0LmMKaW5kZXggMTdjMGE0YS4uNWZmYmE4MyAxMDA2NDQKLS0tIGEvbGliL2FiaXRzZXQuYworKysgYi9saWIvYWJpdHNldC5jCkBAIC0xLDEwICsxLDEzIEBACiAvKiBBcnJheSBiaXRzZXRzLgotICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMywgMjAwNiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4KKwogICAgQ29udHJpYnV0ZWQgYnkgTWljaGFlbCBIYXllcyAobS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubnopLgogCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLApAQCAtMTMsMTIgKzE2LDkgQEAKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgorI2luY2x1ZGUgPGNvbmZpZy5oPgogCiAjaW5jbHVkZSAiYWJpdHNldC5oIgogI2luY2x1ZGUgPHN0ZGRlZi5oPgpkaWZmIC0tZ2l0IGEvbGliL2FiaXRzZXQuaCBiL2xpYi9hYml0c2V0LmgKaW5kZXggYTIyYzkxOS4uYWQ4NThmYSAxMDA2NDQKLS0tIGEvbGliL2FiaXRzZXQuaAorKysgYi9saWIvYWJpdHNldC5oCkBAIC0xLDIwICsxLDIxIEBACiAvKiBGdW5jdGlvbnMgdG8gc3VwcG9ydCBhYml0c2V0cy4KLSAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKICAgIENvbnRyaWJ1dGVkIGJ5IE1pY2hhZWwgSGF5ZXMgKG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56KS4KIAotVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci10aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCi1Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLUZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpZm5kZWYgX0FCSVRTRVRfSAogI2RlZmluZSBfQUJJVFNFVF9ICmRpZmYgLS1naXQgYS9saWIvYWxsb2NhLmluLmggYi9saWIvYWxsb2NhLmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIwZjRiOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9hbGxvY2EuaW4uaApAQCAtMCwwICsxLDYzIEBACisvKiBNZW1vcnkgYWxsb2NhdGlvbiBvbiB0aGUgc3RhY2suCisKKyAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5OSwgMjAwMS0yMDA0LCAyMDA2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgICovCisKKy8qIEF2b2lkIHVzaW5nIHRoZSBzeW1ib2wgX0FMTE9DQV9IIGhlcmUsIGFzIEJpc29uIGFzc3VtZXMgX0FMTE9DQV9ICisgICBtZWFucyB0aGVyZSBpcyBhIHJlYWwgYWxsb2NhIGZ1bmN0aW9uLiAgKi8KKyNpZm5kZWYgX0dMX0FMTE9DQV9ICisjZGVmaW5lIF9HTF9BTExPQ0FfSAorCisvKiBhbGxvY2EgKE4pIHJldHVybnMgYSBwb2ludGVyIHRvIE4gYnl0ZXMgb2YgbWVtb3J5CisgICBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrLCB3aGljaCB3aWxsIGxhc3QgdW50aWwgdGhlIGZ1bmN0aW9uIHJldHVybnMuCisgICBVc2Ugb2YgYWxsb2NhIHNob3VsZCBiZSBhdm9pZGVkOgorICAgICAtIGluc2lkZSBhcmd1bWVudHMgb2YgZnVuY3Rpb24gY2FsbHMgLSB1bmRlZmluZWQgYmVoYXZpb3VyLAorICAgICAtIGluIGlubGluZSBmdW5jdGlvbnMgLSB0aGUgYWxsb2NhdGlvbiBtYXkgYWN0dWFsbHkgbGFzdCB1bnRpbCB0aGUKKyAgICAgICBjYWxsaW5nIGZ1bmN0aW9uIHJldHVybnMsCisgICAgIC0gZm9yIGh1Z2UgTiAoc2F5LCBOID49IDY1NTM2KSAtIHlvdSBuZXZlciBrbm93IGhvdyBsYXJnZSAob3Igc21hbGwpCisgICAgICAgdGhlIHN0YWNrIGlzLCBhbmQgd2hlbiB0aGUgc3RhY2sgY2Fubm90IGZ1bGZpbGwgdGhlIG1lbW9yeSBhbGxvY2F0aW9uCisgICAgICAgcmVxdWVzdCwgdGhlIHByb2dyYW0ganVzdCBjcmFzaGVzLgorICovCisKKyNpZm5kZWYgYWxsb2NhCisjIGlmZGVmIF9fR05VQ19fCisjICBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKyMgZWxpZiBkZWZpbmVkIF9BSVgKKyMgIGRlZmluZSBhbGxvY2EgX19hbGxvY2EKKyMgZWxpZiBkZWZpbmVkIF9NU0NfVkVSCisjICBpbmNsdWRlIDxtYWxsb2MuaD4KKyMgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQorIyBlbGlmIGRlZmluZWQgX19ERUNDICYmIGRlZmluZWQgX19WTVMKKyMgIGRlZmluZSBhbGxvY2EgX19BTExPQ0EKKyMgZWxpZiBkZWZpbmVkIF9fVEFOREVNICYmIGRlZmluZWQgX1ROU19FX1RBUkdFVAorIyAgaWZkZWYgIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjICBlbmRpZgordm9pZCAqX2FsbG9jYSAodW5zaWduZWQgc2hvcnQpOworIyAgcHJhZ21hIGludHJpbnNpYyAoX2FsbG9jYSkKKyMgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQorIyBlbHNlCisjICBpbmNsdWRlIDxzdGRkZWYuaD4KKyMgIGlmZGVmICBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorIyAgZW5kaWYKK3ZvaWQgKmFsbG9jYSAoc2l6ZV90KTsKKyMgZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgLyogX0dMX0FMTE9DQV9IICovCmRpZmYgLS1naXQgYS9saWIvYXJnbWF0Y2guYyBiL2xpYi9hcmdtYXRjaC5jCmluZGV4IDM2ZDU4NDUuLmE3MTMzNjQgMTAwNjQ0Ci0tLSBhL2xpYi9hcmdtYXRjaC5jCisrKyBiL2xpYi9hcmdtYXRjaC5jCkBAIC0xLDEyICsxLDEyIEBACiAvKiBhcmdtYXRjaC5jIC0tIGZpbmQgYSBtYXRjaCBmb3IgYSBzdHJpbmcgaW4gYW4gYXJyYXkKIAotICAgQ29weXJpZ2h0IChDKSAxOTkwLCAxOTk4LCAxOTk5LCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUKLSAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMTk5MCwgMTk5OC0xOTk5LCAyMDAxLTIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuCiAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKQEAgLTE0LDE1ICsxNCwxMiBAQAogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKIC8qIFdyaXR0ZW4gYnkgRGF2aWQgTWFjS2VuemllIDxkam1AYWkubWl0LmVkdT4KICAgIE1vZGlmaWVkIGJ5IEFraW0gRGVtYWlsbGUgPGRlbWFpbGxlQGluZi5lbnN0LmZyPiAqLwogCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgorI2luY2x1ZGUgPGNvbmZpZy5oPgogCiAvKiBTcGVjaWZpY2F0aW9uLiAgKi8KICNpbmNsdWRlICJhcmdtYXRjaC5oIgpAQCAtMzYsNyArMzMsNiBAQAogI2RlZmluZSBfKG1zZ2lkKSBnZXR0ZXh0IChtc2dpZCkKIAogI2luY2x1ZGUgImVycm9yLmgiCi0jaW5jbHVkZSAiZXhpdC5oIgogI2luY2x1ZGUgInF1b3RlYXJnLmgiCiAjaW5jbHVkZSAicXVvdGUuaCIKIApAQCAtODEsMTYgKzc3LDE2IEBACiAgICBzeW5vbnltcywgaS5lLiwgZm9yCiAgICAgICJ5ZXMiLCAieW9wIiAtPiAwCiAgICAgICJubyIsICJub3BlIiAtPiAxCi0gICAieSIgaXMgYSB2YWxpZCBhcmd1bWVudCwgZm9yIGAwJywgYW5kICJuIiBmb3IgYDEnLiAgKi8KKyAgICJ5IiBpcyBhIHZhbGlkIGFyZ3VtZW50LCBmb3IgMCwgYW5kICJuIiBmb3IgMS4gICovCiAKIHB0cmRpZmZfdAogYXJnbWF0Y2ggKGNvbnN0IGNoYXIgKmFyZywgY29uc3QgY2hhciAqY29uc3QgKmFyZ2xpc3QsCi0JICBjb25zdCBjaGFyICp2YWxsaXN0LCBzaXplX3QgdmFsc2l6ZSkKKyAgICAgICAgICBjb25zdCBjaGFyICp2YWxsaXN0LCBzaXplX3QgdmFsc2l6ZSkKIHsKLSAgc2l6ZV90IGk7CQkJLyogVGVtcG9yYXJ5IGluZGV4IGluIEFSR0xJU1QuICAqLwotICBzaXplX3QgYXJnbGVuOwkJLyogTGVuZ3RoIG9mIEFSRy4gICovCi0gIHB0cmRpZmZfdCBtYXRjaGluZCA9IC0xOwkvKiBJbmRleCBvZiBmaXJzdCBub25leGFjdCBtYXRjaC4gICovCi0gIGJvb2wgYW1iaWd1b3VzID0gZmFsc2U7CS8qIElmIHRydWUsIG11bHRpcGxlIG5vbmV4YWN0IG1hdGNoKGVzKS4gICovCisgIHNpemVfdCBpOyAgICAgICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSBpbmRleCBpbiBBUkdMSVNULiAgKi8KKyAgc2l6ZV90IGFyZ2xlbjsgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIEFSRy4gICovCisgIHB0cmRpZmZfdCBtYXRjaGluZCA9IC0xOyAgICAgIC8qIEluZGV4IG9mIGZpcnN0IG5vbmV4YWN0IG1hdGNoLiAgKi8KKyAgYm9vbCBhbWJpZ3VvdXMgPSBmYWxzZTsgICAgICAgLyogSWYgdHJ1ZSwgbXVsdGlwbGUgbm9uZXhhY3QgbWF0Y2goZXMpLiAgKi8KIAogICBhcmdsZW4gPSBzdHJsZW4gKGFyZyk7CiAKQEAgLTk4LDI2ICs5NCwyNiBAQAogICBmb3IgKGkgPSAwOyBhcmdsaXN0W2ldOyBpKyspCiAgICAgewogICAgICAgaWYgKCFzdHJuY21wIChhcmdsaXN0W2ldLCBhcmcsIGFyZ2xlbikpCi0JewotCSAgaWYgKHN0cmxlbiAoYXJnbGlzdFtpXSkgPT0gYXJnbGVuKQotCSAgICAvKiBFeGFjdCBtYXRjaCBmb3VuZC4gICovCi0JICAgIHJldHVybiBpOwotCSAgZWxzZSBpZiAobWF0Y2hpbmQgPT0gLTEpCi0JICAgIC8qIEZpcnN0IG5vbmV4YWN0IG1hdGNoIGZvdW5kLiAgKi8KLQkgICAgbWF0Y2hpbmQgPSBpOwotCSAgZWxzZQotCSAgICB7Ci0JICAgICAgLyogU2Vjb25kIG5vbmV4YWN0IG1hdGNoIGZvdW5kLiAgKi8KLQkgICAgICBpZiAodmFsbGlzdCA9PSBOVUxMCi0JCSAgfHwgbWVtY21wICh2YWxsaXN0ICsgdmFsc2l6ZSAqIG1hdGNoaW5kLAotCQkJICAgICB2YWxsaXN0ICsgdmFsc2l6ZSAqIGksIHZhbHNpemUpKQotCQl7Ci0JCSAgLyogVGhlcmUgaXMgYSByZWFsIGFtYmlndWl0eSwgb3Igd2UgY291bGQgbm90Ci0JCSAgICAgZGlzYW1iaWd1YXRlLiAqLwotCQkgIGFtYmlndW91cyA9IHRydWU7Ci0JCX0KLQkgICAgfQotCX0KKyAgICAgICAgeworICAgICAgICAgIGlmIChzdHJsZW4gKGFyZ2xpc3RbaV0pID09IGFyZ2xlbikKKyAgICAgICAgICAgIC8qIEV4YWN0IG1hdGNoIGZvdW5kLiAgKi8KKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgIGVsc2UgaWYgKG1hdGNoaW5kID09IC0xKQorICAgICAgICAgICAgLyogRmlyc3Qgbm9uZXhhY3QgbWF0Y2ggZm91bmQuICAqLworICAgICAgICAgICAgbWF0Y2hpbmQgPSBpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogU2Vjb25kIG5vbmV4YWN0IG1hdGNoIGZvdW5kLiAgKi8KKyAgICAgICAgICAgICAgaWYgKHZhbGxpc3QgPT0gTlVMTAorICAgICAgICAgICAgICAgICAgfHwgbWVtY21wICh2YWxsaXN0ICsgdmFsc2l6ZSAqIG1hdGNoaW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxsaXN0ICsgdmFsc2l6ZSAqIGksIHZhbHNpemUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIC8qIFRoZXJlIGlzIGEgcmVhbCBhbWJpZ3VpdHksIG9yIHdlIGNvdWxkIG5vdAorICAgICAgICAgICAgICAgICAgICAgZGlzYW1iaWd1YXRlLiAqLworICAgICAgICAgICAgICAgICAgYW1iaWd1b3VzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgIGlmIChhbWJpZ3VvdXMpCiAgICAgcmV0dXJuIC0yOwpAQCAtMTM0LDExICsxMzAsMTEgQEAKIGFyZ21hdGNoX2ludmFsaWQgKGNvbnN0IGNoYXIgKmNvbnRleHQsIGNvbnN0IGNoYXIgKnZhbHVlLCBwdHJkaWZmX3QgcHJvYmxlbSkKIHsKICAgY2hhciBjb25zdCAqZm9ybWF0ID0gKHByb2JsZW0gPT0gLTEKLQkJCT8gXygiaW52YWxpZCBhcmd1bWVudCAlcyBmb3IgJXMiKQotCQkJOiBfKCJhbWJpZ3VvdXMgYXJndW1lbnQgJXMgZm9yICVzIikpOworICAgICAgICAgICAgICAgICAgICAgICAgPyBfKCJpbnZhbGlkIGFyZ3VtZW50ICVzIGZvciAlcyIpCisgICAgICAgICAgICAgICAgICAgICAgICA6IF8oImFtYmlndW91cyBhcmd1bWVudCAlcyBmb3IgJXMiKSk7CiAKICAgZXJyb3IgKDAsIDAsIGZvcm1hdCwgcXVvdGVhcmdfbl9zdHlsZSAoMCwgQVJHTUFUQ0hfUVVPVElOR19TVFlMRSwgdmFsdWUpLAotCSBxdW90ZV9uICgxLCBjb250ZXh0KSk7CisgICAgICAgICBxdW90ZV9uICgxLCBjb250ZXh0KSk7CiB9CiAKIC8qIExpc3QgdGhlIHZhbGlkIGFyZ3VtZW50cyBmb3IgYXJnbWF0Y2guCkBAIC0xNDcsMjQgKzE0MywyNCBAQAogICAgVkFMU0laRSBpcyB0aGUgc2l6ZSBvZiB0aGUgZWxlbWVudHMgb2YgVkFMTElTVCAqLwogdm9pZAogYXJnbWF0Y2hfdmFsaWQgKGNvbnN0IGNoYXIgKmNvbnN0ICphcmdsaXN0LAotCQljb25zdCBjaGFyICp2YWxsaXN0LCBzaXplX3QgdmFsc2l6ZSkKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2YWxsaXN0LCBzaXplX3QgdmFsc2l6ZSkKIHsKICAgc2l6ZV90IGk7CiAgIGNvbnN0IGNoYXIgKmxhc3RfdmFsID0gTlVMTDsKIAogICAvKiBXZSB0cnkgdG8gcHV0IHN5bm9ueW1zIG9uIHRoZSBzYW1lIGxpbmUuICBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0CiAgICAgIHN5bm9ueW1zIGZvbGxvdyBlYWNoIG90aGVyICovCi0gIGZwcmludGYgKHN0ZGVyciwgXygiVmFsaWQgYXJndW1lbnRzIGFyZToiKSk7CisgIGZwdXRzIChfKCJWYWxpZCBhcmd1bWVudHMgYXJlOiIpLCBzdGRlcnIpOwogICBmb3IgKGkgPSAwOyBhcmdsaXN0W2ldOyBpKyspCiAgICAgaWYgKChpID09IDApCi0JfHwgbWVtY21wIChsYXN0X3ZhbCwgdmFsbGlzdCArIHZhbHNpemUgKiBpLCB2YWxzaXplKSkKKyAgICAgICAgfHwgbWVtY21wIChsYXN0X3ZhbCwgdmFsbGlzdCArIHZhbHNpemUgKiBpLCB2YWxzaXplKSkKICAgICAgIHsKLQlmcHJpbnRmIChzdGRlcnIsICJcbiAgLSBgJXMnIiwgYXJnbGlzdFtpXSk7Ci0JbGFzdF92YWwgPSB2YWxsaXN0ICsgdmFsc2l6ZSAqIGk7CisgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuICAtICVzIiwgcXVvdGUgKGFyZ2xpc3RbaV0pKTsKKyAgICAgICAgbGFzdF92YWwgPSB2YWxsaXN0ICsgdmFsc2l6ZSAqIGk7CiAgICAgICB9CiAgICAgZWxzZQogICAgICAgewotCWZwcmludGYgKHN0ZGVyciwgIiwgYCVzJyIsIGFyZ2xpc3RbaV0pOworICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIsICVzIiwgcXVvdGUgKGFyZ2xpc3RbaV0pKTsKICAgICAgIH0KICAgcHV0YyAoJ1xuJywgc3RkZXJyKTsKIH0KQEAgLTE3Nyw5ICsxNzMsOSBAQAogCiBwdHJkaWZmX3QKIF9feGFyZ21hdGNoX2ludGVybmFsIChjb25zdCBjaGFyICpjb250ZXh0LAotCQkgICAgICBjb25zdCBjaGFyICphcmcsIGNvbnN0IGNoYXIgKmNvbnN0ICphcmdsaXN0LAotCQkgICAgICBjb25zdCBjaGFyICp2YWxsaXN0LCBzaXplX3QgdmFsc2l6ZSwKLQkJICAgICAgYXJnbWF0Y2hfZXhpdF9mbiBleGl0X2ZuKQorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFyZywgY29uc3QgY2hhciAqY29uc3QgKmFyZ2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmFsbGlzdCwgc2l6ZV90IHZhbHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgYXJnbWF0Y2hfZXhpdF9mbiBleGl0X2ZuKQogewogICBwdHJkaWZmX3QgcmVzID0gYXJnbWF0Y2ggKGFyZywgYXJnbGlzdCwgdmFsbGlzdCwgdmFsc2l6ZSk7CiAgIGlmIChyZXMgPj0gMCkKQEAgLTE5OCw4ICsxOTQsOCBAQAogICAgcmV0dXJuIHRoZSBmaXJzdCBjb3JyZXNwb25kaW5nIGFyZ3VtZW50IGluIEFSR0xJU1QgKi8KIGNvbnN0IGNoYXIgKgogYXJnbWF0Y2hfdG9fYXJndW1lbnQgKGNvbnN0IGNoYXIgKnZhbHVlLAotCQkgICAgICBjb25zdCBjaGFyICpjb25zdCAqYXJnbGlzdCwKLQkJICAgICAgY29uc3QgY2hhciAqdmFsbGlzdCwgc2l6ZV90IHZhbHNpemUpCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29uc3QgKmFyZ2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmFsbGlzdCwgc2l6ZV90IHZhbHNpemUpCiB7CiAgIHNpemVfdCBpOwogCkBAIC0yNjcsMTQgKzI2MywxNCBAQAogCiAgIGlmICgoY3AgPSBnZXRlbnYgKCJWRVJTSU9OX0NPTlRST0wiKSkpCiAgICAgYmFja3VwX3R5cGUgPSBYQVJHTUFUQ0ggKCIkVkVSU0lPTl9DT05UUk9MIiwgY3AsCi0JCQkgICAgIGJhY2t1cF9hcmdzLCBiYWNrdXBfdmFscyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2t1cF9hcmdzLCBiYWNrdXBfdmFscyk7CiAKICAgaWYgKGFyZ2MgPT0gMikKICAgICBiYWNrdXBfdHlwZSA9IFhBUkdNQVRDSCAocHJvZ3JhbV9uYW1lLCBhcmd2WzFdLAotCQkJICAgICBiYWNrdXBfYXJncywgYmFja3VwX3ZhbHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrdXBfYXJncywgYmFja3VwX3ZhbHMpOwogCi0gIHByaW50ZiAoIlRoZSB2ZXJzaW9uIGNvbnRyb2wgaXMgYCVzJ1xuIiwKLQkgIEFSR01BVENIX1RPX0FSR1VNRU5UIChiYWNrdXBfdHlwZSwgYmFja3VwX2FyZ3MsIGJhY2t1cF92YWxzKSk7CisgIHByaW50ZiAoIlRoZSB2ZXJzaW9uIGNvbnRyb2wgaXMgJyVzJ1xuIiwKKyAgICAgICAgICBBUkdNQVRDSF9UT19BUkdVTUVOVCAoYmFja3VwX3R5cGUsIGJhY2t1cF9hcmdzLCBiYWNrdXBfdmFscykpOwogCiAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbGliL2FyZ21hdGNoLmggYi9saWIvYXJnbWF0Y2guaAppbmRleCBmMmRmZTU5Li43ZTg4Njk2IDEwMDY0NAotLS0gYS9saWIvYXJnbWF0Y2guaAorKysgYi9saWIvYXJnbWF0Y2guaApAQCAtMSwxMiArMSwxMiBAQAogLyogYXJnbWF0Y2guaCAtLSBkZWZpbml0aW9ucyBhbmQgcHJvdG90eXBlcyBmb3IgYXJnbWF0Y2guYwogCi0gICBDb3B5cmlnaHQgKEMpIDE5OTAsIDE5OTgsIDE5OTksIDIwMDEsIDIwMDIsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZQorICAgQ29weXJpZ2h0IChDKSAxOTkwLCAxOTk4LTE5OTksIDIwMDEtMjAwMiwgMjAwNC0yMDA1LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZQogICAgRm91bmRhdGlvbiwgSW5jLgogCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCkBAIC0xNCw4ICsxNCw3IEBACiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogLyogV3JpdHRlbiBieSBEYXZpZCBNYWNLZW56aWUgPGRqbUBhaS5taXQuZWR1PgogICAgTW9kaWZpZWQgYnkgQWtpbSBEZW1haWxsZSA8ZGVtYWlsbGVAaW5mLmVuc3QuZnI+ICovCkBAIC00MSwyMSArNDAsMjEgQEAKICAgIHRvIHRoZSBzYW1lIHZhbHVlcyBpbiBWQUxMSVNUKS4gICovCiAKIHB0cmRpZmZfdCBhcmdtYXRjaCAoY2hhciBjb25zdCAqYXJnLCBjaGFyIGNvbnN0ICpjb25zdCAqYXJnbGlzdCwKLQkJICAgIGNoYXIgY29uc3QgKnZhbGxpc3QsIHNpemVfdCB2YWxzaXplKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqdmFsbGlzdCwgc2l6ZV90IHZhbHNpemUpIF9HTF9BVFRSSUJVVEVfUFVSRTsKIAogIyBkZWZpbmUgQVJHTUFUQ0goQXJnLCBBcmdsaXN0LCBWYWxsaXN0KSBcCiAgIGFyZ21hdGNoIChBcmcsIEFyZ2xpc3QsIChjaGFyIGNvbnN0ICopIChWYWxsaXN0KSwgc2l6ZW9mICooVmFsbGlzdCkpCiAKIC8qIHhhcmdtYXRjaCBjYWxscyB0aGlzIGZ1bmN0aW9uIHdoZW4gaXQgZmFpbHMuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QKICAgIHJldHVybi4gIEJ5IGRlZmF1bHQsIHRoaXMgaXMgYSBmdW5jdGlvbiB0aGF0IGNhbGxzIEFSR01BVENIX0RJRSB3aGljaAotICAgaW4gdHVybiBkZWZhdWx0cyB0byBgZXhpdCAoZXhpdF9mYWlsdXJlKScuICAqLworICAgaW4gdHVybiBkZWZhdWx0cyB0byAnZXhpdCAoZXhpdF9mYWlsdXJlKScuICAqLwogdHlwZWRlZiB2b2lkICgqYXJnbWF0Y2hfZXhpdF9mbikgKHZvaWQpOwogZXh0ZXJuIGFyZ21hdGNoX2V4aXRfZm4gYXJnbWF0Y2hfZGllOwogCiAvKiBSZXBvcnQgb24gc3RkZXJyIHdoeSBhcmdtYXRjaCBmYWlsZWQuICBSZXBvcnQgY29ycmVjdCB2YWx1ZXMuICovCiAKIHZvaWQgYXJnbWF0Y2hfaW52YWxpZCAoY2hhciBjb25zdCAqY29udGV4dCwgY2hhciBjb25zdCAqdmFsdWUsCi0JCSAgICAgICBwdHJkaWZmX3QgcHJvYmxlbSk7CisgICAgICAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdCBwcm9ibGVtKTsKIAogLyogTGVmdCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBvbGQgbmFtZSBpbnZhbGlkX2FyZyAqLwogCkBAIC02NywzNyArNjYsMzggQEAKIC8qIFJlcG9ydCBvbiBzdGRlcnIgdGhlIGxpc3Qgb2YgcG9zc2libGUgYXJndW1lbnRzLiAgKi8KIAogdm9pZCBhcmdtYXRjaF92YWxpZCAoY2hhciBjb25zdCAqY29uc3QgKmFyZ2xpc3QsCi0JCSAgICAgY2hhciBjb25zdCAqdmFsbGlzdCwgc2l6ZV90IHZhbHNpemUpOworICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqdmFsbGlzdCwgc2l6ZV90IHZhbHNpemUpOwogCiAjIGRlZmluZSBBUkdNQVRDSF9WQUxJRChBcmdsaXN0LCBWYWxsaXN0KSBcCiAgIGFyZ21hdGNoX3ZhbGlkIChBcmdsaXN0LCAoY2hhciBjb25zdCAqKSAoVmFsbGlzdCksIHNpemVvZiAqKFZhbGxpc3QpKQogCiAKIAotLyogU2FtZSBhcyBhcmdtYXRjaCwgYnV0IHVwb24gZmFpbHVyZSwgcmVwb3J0cyBhIGV4cGxhbmF0aW9uIG9uIHRoZQotICAgZmFpbHVyZSwgYW5kIGV4aXRzIHVzaW5nIHRoZSBmdW5jdGlvbiBFWElUX0ZOLiAqLworLyogU2FtZSBhcyBhcmdtYXRjaCwgYnV0IHVwb24gZmFpbHVyZSwgcmVwb3J0IGFuIGV4cGxhbmF0aW9uIG9mIHRoZQorICAgZmFpbHVyZSwgYW5kIGV4aXQgdXNpbmcgdGhlIGZ1bmN0aW9uIEVYSVRfRk4uICovCiAKIHB0cmRpZmZfdCBfX3hhcmdtYXRjaF9pbnRlcm5hbCAoY2hhciBjb25zdCAqY29udGV4dCwKLQkJCQljaGFyIGNvbnN0ICphcmcsIGNoYXIgY29uc3QgKmNvbnN0ICphcmdsaXN0LAotCQkJCWNoYXIgY29uc3QgKnZhbGxpc3QsIHNpemVfdCB2YWxzaXplLAotCQkJCWFyZ21hdGNoX2V4aXRfZm4gZXhpdF9mbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKmFyZywgY2hhciBjb25zdCAqY29uc3QgKmFyZ2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKnZhbGxpc3QsIHNpemVfdCB2YWxzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdtYXRjaF9leGl0X2ZuIGV4aXRfZm4pOwogCiAvKiBQcm9ncmFtbWVyIGZyaWVuZGx5IGludGVyZmFjZSB0byBfX3hhcmdtYXRjaF9pbnRlcm5hbC4gKi8KIAotIyBkZWZpbmUgWEFSR01BVENIKENvbnRleHQsIEFyZywgQXJnbGlzdCwgVmFsbGlzdCkJCVwKLSAgKChWYWxsaXN0KSBbX194YXJnbWF0Y2hfaW50ZXJuYWwgKENvbnRleHQsIEFyZywgQXJnbGlzdCwJXAotCQkJCSAgICAoY2hhciBjb25zdCAqKSAoVmFsbGlzdCksCVwKLQkJCQkgICAgc2l6ZW9mICooVmFsbGlzdCksCQlcCi0JCQkJICAgIGFyZ21hdGNoX2RpZSldKQorIyBkZWZpbmUgWEFSR01BVENIKENvbnRleHQsIEFyZywgQXJnbGlzdCwgVmFsbGlzdCkgICAgICAgICAgICAgIFwKKyAgKChWYWxsaXN0KSBbX194YXJnbWF0Y2hfaW50ZXJuYWwgKENvbnRleHQsIEFyZywgQXJnbGlzdCwgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciBjb25zdCAqKSAoVmFsbGlzdCksICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICooVmFsbGlzdCksICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ21hdGNoX2RpZSldKQogCiAvKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQuICovCiAKIGNoYXIgY29uc3QgKmFyZ21hdGNoX3RvX2FyZ3VtZW50IChjaGFyIGNvbnN0ICp2YWx1ZSwKLQkJCQkgIGNoYXIgY29uc3QgKmNvbnN0ICphcmdsaXN0LAotCQkJCSAgY2hhciBjb25zdCAqdmFsbGlzdCwgc2l6ZV90IHZhbHNpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKmNvbnN0ICphcmdsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKnZhbGxpc3QsIHNpemVfdCB2YWxzaXplKQorICBfR0xfQVRUUklCVVRFX1BVUkU7CiAKLSMgZGVmaW5lIEFSR01BVENIX1RPX0FSR1VNRU5UKFZhbHVlLCBBcmdsaXN0LCBWYWxsaXN0KQkJCVwKLSAgYXJnbWF0Y2hfdG9fYXJndW1lbnQgKFZhbHVlLCBBcmdsaXN0LAkJCQkJXAotCQkJKGNoYXIgY29uc3QgKikgKFZhbGxpc3QpLCBzaXplb2YgKihWYWxsaXN0KSkKKyMgZGVmaW5lIEFSR01BVENIX1RPX0FSR1VNRU5UKFZhbHVlLCBBcmdsaXN0LCBWYWxsaXN0KSAgICAgICAgICAgICAgICAgIFwKKyAgYXJnbWF0Y2hfdG9fYXJndW1lbnQgKFZhbHVlLCBBcmdsaXN0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyIGNvbnN0ICopIChWYWxsaXN0KSwgc2l6ZW9mICooVmFsbGlzdCkpCiAKICNlbmRpZiAvKiBBUkdNQVRDSF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliL2FzbnByaW50Zi5jIGIvbGliL2FzbnByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZjcwYzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYXNucHJpbnRmLmMKQEAgLTAsMCArMSwzNCBAQAorLyogRm9ybWF0dGVkIG91dHB1dCB0byBzdHJpbmdzLgorICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAyLCAyMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlICJ2YXNucHJpbnRmLmgiCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworY2hhciAqCithc25wcmludGYgKGNoYXIgKnJlc3VsdGJ1Ziwgc2l6ZV90ICpsZW5ndGhwLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdzOworICBjaGFyICpyZXN1bHQ7CisKKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisgIHJlc3VsdCA9IHZhc25wcmludGYgKHJlc3VsdGJ1ZiwgbGVuZ3RocCwgZm9ybWF0LCBhcmdzKTsKKyAgdmFfZW5kIChhcmdzKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2xpYi9iYXNlbmFtZS1sZ3BsLmMgYi9saWIvYmFzZW5hbWUtbGdwbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZWY4YzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYmFzZW5hbWUtbGdwbC5jCkBAIC0wLDAgKzEsNzUgQEAKKy8qIGJhc2VuYW1lLmMgLS0gcmV0dXJuIHRoZSBsYXN0IGVsZW1lbnQgaW4gYSBmaWxlIG5hbWUKKworICAgQ29weXJpZ2h0IChDKSAxOTkwLCAxOTk4LTIwMDEsIDIwMDMtMjAwNiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSAiZGlybmFtZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qIFJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgbGFzdCBmaWxlIG5hbWUgY29tcG9uZW50IG9mIE5BTUUuICBJZgorICAgTkFNRSBoYXMgbm8gcmVsYXRpdmUgZmlsZSBuYW1lIGNvbXBvbmVudHMgYmVjYXVzZSBpdCBpcyBhIGZpbGUKKyAgIHN5c3RlbSByb290LCByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy4gICovCisKK2NoYXIgKgorbGFzdF9jb21wb25lbnQgKGNoYXIgY29uc3QgKm5hbWUpCit7CisgIGNoYXIgY29uc3QgKmJhc2UgPSBuYW1lICsgRklMRV9TWVNURU1fUFJFRklYX0xFTiAobmFtZSk7CisgIGNoYXIgY29uc3QgKnA7CisgIGJvb2wgc2F3X3NsYXNoID0gZmFsc2U7CisKKyAgd2hpbGUgKElTU0xBU0ggKCpiYXNlKSkKKyAgICBiYXNlKys7CisKKyAgZm9yIChwID0gYmFzZTsgKnA7IHArKykKKyAgICB7CisgICAgICBpZiAoSVNTTEFTSCAoKnApKQorICAgICAgICBzYXdfc2xhc2ggPSB0cnVlOworICAgICAgZWxzZSBpZiAoc2F3X3NsYXNoKQorICAgICAgICB7CisgICAgICAgICAgYmFzZSA9IHA7CisgICAgICAgICAgc2F3X3NsYXNoID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgcmV0dXJuIChjaGFyICopIGJhc2U7Cit9CisKKy8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBiYXNlbmFtZSBOQU1FLiAgVHlwaWNhbGx5IE5BTUUgaXMgdGhlCisgICB2YWx1ZSByZXR1cm5lZCBieSBiYXNlX25hbWUgb3IgbGFzdF9jb21wb25lbnQuICBBY3QgbGlrZSBzdHJsZW4KKyAgIChOQU1FKSwgZXhjZXB0IG9taXQgYWxsIHRyYWlsaW5nIHNsYXNoZXMuICAqLworCitzaXplX3QKK2Jhc2VfbGVuIChjaGFyIGNvbnN0ICpuYW1lKQoreworICBzaXplX3QgbGVuOworICBzaXplX3QgcHJlZml4X2xlbiA9IEZJTEVfU1lTVEVNX1BSRUZJWF9MRU4gKG5hbWUpOworCisgIGZvciAobGVuID0gc3RybGVuIChuYW1lKTsgIDEgPCBsZW4gJiYgSVNTTEFTSCAobmFtZVtsZW4gLSAxXSk7ICBsZW4tLSkKKyAgICBjb250aW51ZTsKKworICBpZiAoRE9VQkxFX1NMQVNIX0lTX0RJU1RJTkNUX1JPT1QgJiYgbGVuID09IDEKKyAgICAgICYmIElTU0xBU0ggKG5hbWVbMF0pICYmIElTU0xBU0ggKG5hbWVbMV0pICYmICEgbmFtZVsyXSkKKyAgICByZXR1cm4gMjsKKworICBpZiAoRklMRV9TWVNURU1fRFJJVkVfUFJFRklYX0NBTl9CRV9SRUxBVElWRSAmJiBwcmVmaXhfbGVuCisgICAgICAmJiBsZW4gPT0gcHJlZml4X2xlbiAmJiBJU1NMQVNIIChuYW1lW3ByZWZpeF9sZW5dKSkKKyAgICByZXR1cm4gcHJlZml4X2xlbiArIDE7CisKKyAgcmV0dXJuIGxlbjsKK30KZGlmZiAtLWdpdCBhL2xpYi9iYXNlbmFtZS5jIGIvbGliL2Jhc2VuYW1lLmMKaW5kZXggNWNjOTdjZC4uNWYxOGZmZCAxMDA2NDQKLS0tIGEvbGliL2Jhc2VuYW1lLmMKKysrIGIvbGliL2Jhc2VuYW1lLmMKQEAgLTEsMTIgKzEsMTIgQEAKIC8qIGJhc2VuYW1lLmMgLS0gcmV0dXJuIHRoZSBsYXN0IGVsZW1lbnQgaW4gYSBmaWxlIG5hbWUKIAotICAgQ29weXJpZ2h0IChDKSAxOTkwLCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUKLSAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMTk5MCwgMTk5OC0yMDAxLCAyMDAzLTIwMDYsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuCiAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKQEAgLTE0LDY2ICsxNCw0NSBAQAogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCisjaW5jbHVkZSA8Y29uZmlnLmg+CiAKICNpbmNsdWRlICJkaXJuYW1lLmgiCisKICNpbmNsdWRlIDxzdHJpbmcuaD4KLQotLyogSW4gZ2VuZXJhbCwgd2UgY2FuJ3QgdXNlIHRoZSBidWlsdGluIGBiYXNlbmFtZScgZnVuY3Rpb24gaWYgYXZhaWxhYmxlLAotICAgc2luY2UgaXQgaGFzIGRpZmZlcmVudCBtZWFuaW5ncyBpbiBkaWZmZXJlbnQgZW52aXJvbm1lbnRzLgotICAgSW4gc29tZSBlbnZpcm9ubWVudHMgdGhlIGJ1aWx0aW4gYGJhc2VuYW1lJyBtb2RpZmllcyBpdHMgYXJndW1lbnQuCi0KLSAgIFJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgbGFzdCBmaWxlIG5hbWUgY29tcG9uZW50IG9mIE5BTUUuICBJZgotICAgTkFNRSBoYXMgbm8gZmlsZSBuYW1lIGNvbXBvbmVudHMgYmVjYXVzZSBpdCBpcyBhbGwgc2xhc2hlcywgcmV0dXJuCi0gICBOQU1FIGlmIGl0IGlzIGVtcHR5LCB0aGUgYWRkcmVzcyBvZiBpdHMgbGFzdCBzbGFzaCBvdGhlcndpc2UuICAqLworI2luY2x1ZGUgInhhbGxvYy5oIgorI2luY2x1ZGUgInhzdHJuZHVwLmgiCiAKIGNoYXIgKgogYmFzZV9uYW1lIChjaGFyIGNvbnN0ICpuYW1lKQogewotICBjaGFyIGNvbnN0ICpiYXNlID0gbmFtZSArIEZJTEVfU1lTVEVNX1BSRUZJWF9MRU4gKG5hbWUpOwotICBjaGFyIGNvbnN0ICpwOworICBjaGFyIGNvbnN0ICpiYXNlID0gbGFzdF9jb21wb25lbnQgKG5hbWUpOworICBzaXplX3QgbGVuZ3RoOwogCi0gIGZvciAocCA9IGJhc2U7ICpwOyBwKyspCisgIC8qIElmIHRoZXJlIGlzIG5vIGxhc3QgY29tcG9uZW50LCB0aGVuIG5hbWUgaXMgYSBmaWxlIHN5c3RlbSByb290IG9yIHRoZQorICAgICBlbXB0eSBzdHJpbmcuICAqLworICBpZiAoISAqYmFzZSkKKyAgICByZXR1cm4geHN0cm5kdXAgKG5hbWUsIGJhc2VfbGVuIChuYW1lKSk7CisKKyAgLyogQ29sbGFwc2UgYSBzZXF1ZW5jZSBvZiB0cmFpbGluZyBzbGFzaGVzIGludG8gb25lLiAgKi8KKyAgbGVuZ3RoID0gYmFzZV9sZW4gKGJhc2UpOworICBpZiAoSVNTTEFTSCAoYmFzZVtsZW5ndGhdKSkKKyAgICBsZW5ndGgrKzsKKworICAvKiBPbiBzeXN0ZW1zIHdpdGggZHJpdmUgbGV0dGVycywgImEvYjpjIiBtdXN0IHJldHVybiAiLi9iOmMiIHJhdGhlcgorICAgICB0aGFuICJiOmMiIHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIGEgZHJpdmUgbGV0dGVyLiAgT24gc3lzdGVtcworICAgICB3aXRoIHB1cmUgUE9TSVggc2VtYW50aWNzLCB0aGlzIGlzIG5vdCBhbiBpc3N1ZS4gICovCisgIGlmIChGSUxFX1NZU1RFTV9QUkVGSVhfTEVOIChiYXNlKSkKICAgICB7Ci0gICAgICBpZiAoSVNTTEFTSCAoKnApKQotCXsKLQkgIC8qIFRyZWF0IG11bHRpcGxlIGFkamFjZW50IHNsYXNoZXMgbGlrZSBhIHNpbmdsZSBzbGFzaC4gICovCi0JICBkbyBwKys7Ci0JICB3aGlsZSAoSVNTTEFTSCAoKnApKTsKLQotCSAgLyogSWYgdGhlIGZpbGUgbmFtZSBlbmRzIGluIHNsYXNoLCB1c2UgdGhlIHRyYWlsaW5nIHNsYXNoIGFzCi0JICAgICB0aGUgYmFzZW5hbWUgaWYgbm8gbm9uLXNsYXNoZXMgaGF2ZSBiZWVuIGZvdW5kLiAgKi8KLQkgIGlmICghICpwKQotCSAgICB7Ci0JICAgICAgaWYgKElTU0xBU0ggKCpiYXNlKSkKLQkJYmFzZSA9IHAgLSAxOwotCSAgICAgIGJyZWFrOwotCSAgICB9Ci0KLQkgIC8qICpQIGlzIGEgbm9uLXNsYXNoIHByZWNlZGVkIGJ5IGEgc2xhc2guICAqLwotCSAgYmFzZSA9IHA7Ci0JfQorICAgICAgY2hhciAqcCA9IHhtYWxsb2MgKGxlbmd0aCArIDMpOworICAgICAgcFswXSA9ICcuJzsKKyAgICAgIHBbMV0gPSAnLyc7CisgICAgICBtZW1jcHkgKHAgKyAyLCBiYXNlLCBsZW5ndGgpOworICAgICAgcFtsZW5ndGggKyAyXSA9ICdcMCc7CisgICAgICByZXR1cm4gcDsKICAgICB9CiAKLSAgcmV0dXJuIChjaGFyICopIGJhc2U7Ci19Ci0KLS8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIG9mIHRoZSBiYXNlbmFtZSBOQU1FLiAgVHlwaWNhbGx5IE5BTUUgaXMgdGhlCi0gICB2YWx1ZSByZXR1cm5lZCBieSBiYXNlX25hbWUuICBBY3QgbGlrZSBzdHJsZW4gKE5BTUUpLCBleGNlcHQgb21pdAotICAgcmVkdW5kYW50IHRyYWlsaW5nIHNsYXNoZXMuICAqLwotCi1zaXplX3QKLWJhc2VfbGVuIChjaGFyIGNvbnN0ICpuYW1lKQotewotICBzaXplX3QgbGVuOwotCi0gIGZvciAobGVuID0gc3RybGVuIChuYW1lKTsgIDEgPCBsZW4gJiYgSVNTTEFTSCAobmFtZVtsZW4gLSAxXSk7ICBsZW4tLSkKLSAgICBjb250aW51ZTsKLQotICByZXR1cm4gbGVuOworICAvKiBGaW5hbGx5LCBjb3B5IHRoZSBiYXNlbmFtZS4gICovCisgIHJldHVybiB4c3RybmR1cCAoYmFzZSwgbGVuZ3RoKTsKIH0KZGlmZiAtLWdpdCBhL2xpYi9iYml0c2V0LmggYi9saWIvYmJpdHNldC5oCmluZGV4IDk1NmZjNWMuLmY4MTliMTcgMTAwNjQ0Ci0tLSBhL2xpYi9iYml0c2V0LmgKKysrIGIvbGliL2JiaXRzZXQuaApAQCAtMSwyMCArMSwyMiBAQAogLyogQmFzZSBiaXRzZXQgc3R1ZmYuCi0gICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDA0LCAyMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLgorCiAgICBDb250cmlidXRlZCBieSBNaWNoYWVsIEhheWVzIChtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5ueikuCiAKLVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci1pdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCi1UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi1NRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi1HTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAotWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi1Gb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAjaWZuZGVmIF9CQklUU0VUX0gKICNkZWZpbmUgX0JCSVRTRVRfSApkaWZmIC0tZ2l0IGEvbGliL2JpbmFyeS1pby5jIGIvbGliL2JpbmFyeS1pby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYmRiNDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYmluYXJ5LWlvLmMKQEAgLTAsMCArMSwzIEBACisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZGVmaW5lIEJJTkFSWV9JT19JTkxJTkUgX0dMX0VYVEVSTl9JTkxJTkUKKyNpbmNsdWRlICJiaW5hcnktaW8uaCIKZGlmZiAtLWdpdCBhL2xpYi9iaW5hcnktaW8uaCBiL2xpYi9iaW5hcnktaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjM3NmUzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2JpbmFyeS1pby5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qIEJpbmFyeSBtb2RlIEkvTy4KKyAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMywgMjAwNSwgMjAwOC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIF9CSU5BUllfSAorI2RlZmluZSBfQklOQVJZX0gKKworLyogRm9yIHN5c3RlbXMgdGhhdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRleHQgYW5kIGJpbmFyeSBJL08uCisgICBPX0JJTkFSWSBpcyBndWFyYW50ZWVkIGJ5IHRoZSBnbnVsaWIgPGZjbnRsLmg+LiAqLworI2luY2x1ZGUgPGZjbnRsLmg+CisKKy8qIFRoZSBNU1ZDNyA8c3RkaW8uaD4gZG9lc24ndCBsaWtlIHRvIGJlIGluY2x1ZGVkIGFmdGVyICcjZGVmaW5lIGZpbGVubyAuLi4nLAorICAgc28gd2UgaW5jbHVkZSBpdCBoZXJlIGZpcnN0LiAgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorCitfR0xfSU5MSU5FX0hFQURFUl9CRUdJTgorI2lmbmRlZiBCSU5BUllfSU9fSU5MSU5FCisjIGRlZmluZSBCSU5BUllfSU9fSU5MSU5FIF9HTF9JTkxJTkUKKyNlbmRpZgorCisvKiBzZXRfYmluYXJ5X21vZGUgKGZkLCBtb2RlKQorICAgc2V0cyB0aGUgYmluYXJ5L3RleHQgSS9PIG1vZGUgb2YgZmlsZSBkZXNjcmlwdG9yIGZkIHRvIHRoZSBnaXZlbiBtb2RlCisgICAobXVzdCBiZSBPX0JJTkFSWSBvciBPX1RFWFQpIGFuZCByZXR1cm5zIHRoZSBwcmV2aW91cyBtb2RlLiAgKi8KKyNpZiBPX0JJTkFSWQorIyBpZiBkZWZpbmVkIF9fRU1YX18gfHwgZGVmaW5lZCBfX0RKR1BQX18gfHwgZGVmaW5lZCBfX0NZR1dJTl9fCisjICBpbmNsdWRlIDxpby5oPiAvKiBkZWNsYXJlcyBzZXRtb2RlKCkgKi8KKyMgIGRlZmluZSBzZXRfYmluYXJ5X21vZGUgc2V0bW9kZQorIyBlbHNlCisjICBkZWZpbmUgc2V0X2JpbmFyeV9tb2RlIF9zZXRtb2RlCisjICB1bmRlZiBmaWxlbm8KKyMgIGRlZmluZSBmaWxlbm8gX2ZpbGVubworIyBlbmRpZgorI2Vsc2UKKyAgLyogT24gcmVhc29uYWJsZSBzeXN0ZW1zLCBiaW5hcnkgSS9PIGlzIHRoZSBvbmx5IGNob2ljZS4gICovCisgIC8qIFVzZSBhIGZ1bmN0aW9uIHJhdGhlciB0aGFuIGEgbWFjcm8sIHRvIGF2b2lkIGdjYyB3YXJuaW5ncworICAgICAid2FybmluZzogc3RhdGVtZW50IHdpdGggbm8gZWZmZWN0Ii4gICovCitCSU5BUllfSU9fSU5MSU5FIGludAorc2V0X2JpbmFyeV9tb2RlIChpbnQgZmQsIGludCBtb2RlKQoreworICAodm9pZCkgZmQ7CisgICh2b2lkKSBtb2RlOworICByZXR1cm4gT19CSU5BUlk7Cit9CisjZW5kaWYKKworLyogU0VUX0JJTkFSWSAoZmQpOworICAgY2hhbmdlcyB0aGUgZmlsZSBkZXNjcmlwdG9yIGZkIHRvIHBlcmZvcm0gYmluYXJ5IEkvTy4gICovCisjaWZkZWYgX19ESkdQUF9fCisjIGluY2x1ZGUgPHVuaXN0ZC5oPiAvKiBkZWNsYXJlcyBpc2F0dHkoKSAqLworICAvKiBBdm9pZCBwdXR0aW5nIHN0ZGluL3N0ZG91dCBpbiBiaW5hcnkgbW9kZSBpZiBpdCBpcyBjb25uZWN0ZWQgdG8KKyAgICAgdGhlIGNvbnNvbGUsIGJlY2F1c2UgdGhhdCB3b3VsZCBtYWtlIGl0IGltcG9zc2libGUgZm9yIHRoZSB1c2VyCisgICAgIHRvIGludGVycnVwdCB0aGUgcHJvZ3JhbSB0aHJvdWdoIEN0cmwtQyBvciBDdHJsLUJyZWFrLiAgKi8KKyMgZGVmaW5lIFNFVF9CSU5BUlkoZmQpICgodm9pZCkgKCFpc2F0dHkgKGZkKSA/IChzZXRfYmluYXJ5X21vZGUgKGZkLCBPX0JJTkFSWSksIDApIDogMCkpCisjZWxzZQorIyBkZWZpbmUgU0VUX0JJTkFSWShmZCkgKCh2b2lkKSBzZXRfYmluYXJ5X21vZGUgKGZkLCBPX0JJTkFSWSkpCisjZW5kaWYKKworX0dMX0lOTElORV9IRUFERVJfRU5ECisKKyNlbmRpZiAvKiBfQklOQVJZX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9iaXRyb3RhdGUuYyBiL2xpYi9iaXRyb3RhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGY2MDI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2JpdHJvdGF0ZS5jCkBAIC0wLDAgKzEsMyBAQAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2RlZmluZSBCSVRST1RBVEVfSU5MSU5FIF9HTF9FWFRFUk5fSU5MSU5FCisjaW5jbHVkZSAiYml0cm90YXRlLmgiCmRpZmYgLS1naXQgYS9saWIvYml0cm90YXRlLmggYi9saWIvYml0cm90YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE2NzU1OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9iaXRyb3RhdGUuaApAQCAtMCwwICsxLDEzMyBAQAorLyogYml0cm90YXRlLmggLSBSb3RhdGUgYml0cyBpbiBpbnRlZ2VycworICAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFdyaXR0ZW4gYnkgU2ltb24gSm9zZWZzc29uIDxzaW1vbkBqb3NlZnNzb24ub3JnPiwgMjAwOC4gKi8KKworI2lmbmRlZiBfR0xfQklUUk9UQVRFX0gKKyNkZWZpbmUgX0dMX0JJVFJPVEFURV9ICisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworX0dMX0lOTElORV9IRUFERVJfQkVHSU4KKyNpZm5kZWYgQklUUk9UQVRFX0lOTElORQorIyBkZWZpbmUgQklUUk9UQVRFX0lOTElORSBfR0xfSU5MSU5FCisjZW5kaWYKKworI2lmZGVmIFVJTlQ2NF9NQVgKKy8qIEdpdmVuIGFuIHVuc2lnbmVkIDY0LWJpdCBhcmd1bWVudCBYLCByZXR1cm4gdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcKKyAgIHRvIHJvdGF0aW5nIHRoZSBiaXRzIE4gc3RlcHMgdG8gdGhlIGxlZnQuICBOIG11c3QgYmUgYmV0d2VlbiAxIGFuZAorICAgNjMgaW5jbHVzaXZlLiAqLworQklUUk9UQVRFX0lOTElORSB1aW50NjRfdAorcm90bDY0ICh1aW50NjRfdCB4LCBpbnQgbikKK3sKKyAgcmV0dXJuICgoeCA8PCBuKSB8ICh4ID4+ICg2NCAtIG4pKSkgJiBVSU5UNjRfTUFYOworfQorCisvKiBHaXZlbiBhbiB1bnNpZ25lZCA2NC1iaXQgYXJndW1lbnQgWCwgcmV0dXJuIHRoZSB2YWx1ZSBjb3JyZXNwb25kaW5nCisgICB0byByb3RhdGluZyB0aGUgYml0cyBOIHN0ZXBzIHRvIHRoZSByaWdodC4gIE4gbXVzdCBiZSBiZXR3ZWVuIDEgdG8KKyAgIDYzIGluY2x1c2l2ZS4qLworQklUUk9UQVRFX0lOTElORSB1aW50NjRfdAorcm90cjY0ICh1aW50NjRfdCB4LCBpbnQgbikKK3sKKyAgcmV0dXJuICgoeCA+PiBuKSB8ICh4IDw8ICg2NCAtIG4pKSkgJiBVSU5UNjRfTUFYOworfQorI2VuZGlmCisKKy8qIEdpdmVuIGFuIHVuc2lnbmVkIDMyLWJpdCBhcmd1bWVudCBYLCByZXR1cm4gdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcKKyAgIHRvIHJvdGF0aW5nIHRoZSBiaXRzIE4gc3RlcHMgdG8gdGhlIGxlZnQuICBOIG11c3QgYmUgYmV0d2VlbiAxIGFuZAorICAgMzEgaW5jbHVzaXZlLiAqLworQklUUk9UQVRFX0lOTElORSB1aW50MzJfdAorcm90bDMyICh1aW50MzJfdCB4LCBpbnQgbikKK3sKKyAgcmV0dXJuICgoeCA8PCBuKSB8ICh4ID4+ICgzMiAtIG4pKSkgJiBVSU5UMzJfTUFYOworfQorCisvKiBHaXZlbiBhbiB1bnNpZ25lZCAzMi1iaXQgYXJndW1lbnQgWCwgcmV0dXJuIHRoZSB2YWx1ZSBjb3JyZXNwb25kaW5nCisgICB0byByb3RhdGluZyB0aGUgYml0cyBOIHN0ZXBzIHRvIHRoZSByaWdodC4gIE4gbXVzdCBiZSBiZXR3ZWVuIDEgdG8KKyAgIDMxIGluY2x1c2l2ZS4qLworQklUUk9UQVRFX0lOTElORSB1aW50MzJfdAorcm90cjMyICh1aW50MzJfdCB4LCBpbnQgbikKK3sKKyAgcmV0dXJuICgoeCA+PiBuKSB8ICh4IDw8ICgzMiAtIG4pKSkgJiBVSU5UMzJfTUFYOworfQorCisvKiBHaXZlbiBhIHNpemVfdCBhcmd1bWVudCBYLCByZXR1cm4gdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcKKyAgIHRvIHJvdGF0aW5nIHRoZSBiaXRzIE4gc3RlcHMgdG8gdGhlIGxlZnQuICBOIG11c3QgYmUgYmV0d2VlbiAxIGFuZAorICAgKENIQVJfQklUICogc2l6ZW9mIChzaXplX3QpIC0gMSkgaW5jbHVzaXZlLiAgKi8KK0JJVFJPVEFURV9JTkxJTkUgc2l6ZV90Cityb3RsX3N6IChzaXplX3QgeCwgaW50IG4pCit7CisgIHJldHVybiAoKHggPDwgbikgfCAoeCA+PiAoKENIQVJfQklUICogc2l6ZW9mIHgpIC0gbikpKSAmIFNJWkVfTUFYOworfQorCisvKiBHaXZlbiBhIHNpemVfdCBhcmd1bWVudCBYLCByZXR1cm4gdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcKKyAgIHRvIHJvdGF0aW5nIHRoZSBiaXRzIE4gc3RlcHMgdG8gdGhlIHJpZ2h0LiAgTiBtdXN0IGJlIGJldHdlZW4gMSB0bworICAgKENIQVJfQklUICogc2l6ZW9mIChzaXplX3QpIC0gMSkgaW5jbHVzaXZlLiAgKi8KK0JJVFJPVEFURV9JTkxJTkUgc2l6ZV90Cityb3RyX3N6IChzaXplX3QgeCwgaW50IG4pCit7CisgIHJldHVybiAoKHggPj4gbikgfCAoeCA8PCAoKENIQVJfQklUICogc2l6ZW9mIHgpIC0gbikpKSAmIFNJWkVfTUFYOworfQorCisvKiBHaXZlbiBhbiB1bnNpZ25lZCAxNi1iaXQgYXJndW1lbnQgWCwgcmV0dXJuIHRoZSB2YWx1ZSBjb3JyZXNwb25kaW5nCisgICB0byByb3RhdGluZyB0aGUgYml0cyBOIHN0ZXBzIHRvIHRoZSBsZWZ0LiAgTiBtdXN0IGJlIGJldHdlZW4gMSB0bworICAgMTUgaW5jbHVzaXZlLCBidXQgb24gbW9zdCByZWxldmFudCB0YXJnZXRzIE4gY2FuIGFsc28gYmUgMCBhbmQgMTYKKyAgIGJlY2F1c2UgJ2ludCcgaXMgYXQgbGVhc3QgMzIgYml0cyBhbmQgdGhlIGFyZ3VtZW50cyBtdXN0IHdpZGVuCisgICBiZWZvcmUgc2hpZnRpbmcuICovCitCSVRST1RBVEVfSU5MSU5FIHVpbnQxNl90Cityb3RsMTYgKHVpbnQxNl90IHgsIGludCBuKQoreworICByZXR1cm4gKCh4IDw8IG4pIHwgKHggPj4gKDE2IC0gbikpKSAmIFVJTlQxNl9NQVg7Cit9CisKKy8qIEdpdmVuIGFuIHVuc2lnbmVkIDE2LWJpdCBhcmd1bWVudCBYLCByZXR1cm4gdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcKKyAgIHRvIHJvdGF0aW5nIHRoZSBiaXRzIE4gc3RlcHMgdG8gdGhlIHJpZ2h0LiAgTiBtdXN0IGJlIGluIDEgdG8gMTUKKyAgIGluY2x1c2l2ZSwgYnV0IG9uIG1vc3QgcmVsZXZhbnQgdGFyZ2V0cyBOIGNhbiBhbHNvIGJlIDAgYW5kIDE2CisgICBiZWNhdXNlICdpbnQnIGlzIGF0IGxlYXN0IDMyIGJpdHMgYW5kIHRoZSBhcmd1bWVudHMgbXVzdCB3aWRlbgorICAgYmVmb3JlIHNoaWZ0aW5nLiAqLworQklUUk9UQVRFX0lOTElORSB1aW50MTZfdAorcm90cjE2ICh1aW50MTZfdCB4LCBpbnQgbikKK3sKKyAgcmV0dXJuICgoeCA+PiBuKSB8ICh4IDw8ICgxNiAtIG4pKSkgJiBVSU5UMTZfTUFYOworfQorCisvKiBHaXZlbiBhbiB1bnNpZ25lZCA4LWJpdCBhcmd1bWVudCBYLCByZXR1cm4gdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcKKyAgIHRvIHJvdGF0aW5nIHRoZSBiaXRzIE4gc3RlcHMgdG8gdGhlIGxlZnQuICBOIG11c3QgYmUgYmV0d2VlbiAxIHRvIDcKKyAgIGluY2x1c2l2ZSwgYnV0IG9uIG1vc3QgcmVsZXZhbnQgdGFyZ2V0cyBOIGNhbiBhbHNvIGJlIDAgYW5kIDgKKyAgIGJlY2F1c2UgJ2ludCcgaXMgYXQgbGVhc3QgMzIgYml0cyBhbmQgdGhlIGFyZ3VtZW50cyBtdXN0IHdpZGVuCisgICBiZWZvcmUgc2hpZnRpbmcuICovCitCSVRST1RBVEVfSU5MSU5FIHVpbnQ4X3QKK3JvdGw4ICh1aW50OF90IHgsIGludCBuKQoreworICByZXR1cm4gKCh4IDw8IG4pIHwgKHggPj4gKDggLSBuKSkpICYgVUlOVDhfTUFYOworfQorCisvKiBHaXZlbiBhbiB1bnNpZ25lZCA4LWJpdCBhcmd1bWVudCBYLCByZXR1cm4gdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcKKyAgIHRvIHJvdGF0aW5nIHRoZSBiaXRzIE4gc3RlcHMgdG8gdGhlIHJpZ2h0LiAgTiBtdXN0IGJlIGluIDEgdG8gNworICAgaW5jbHVzaXZlLCBidXQgb24gbW9zdCByZWxldmFudCB0YXJnZXRzIE4gY2FuIGFsc28gYmUgMCBhbmQgOAorICAgYmVjYXVzZSAnaW50JyBpcyBhdCBsZWFzdCAzMiBiaXRzIGFuZCB0aGUgYXJndW1lbnRzIG11c3Qgd2lkZW4KKyAgIGJlZm9yZSBzaGlmdGluZy4gKi8KK0JJVFJPVEFURV9JTkxJTkUgdWludDhfdAorcm90cjggKHVpbnQ4X3QgeCwgaW50IG4pCit7CisgIHJldHVybiAoKHggPj4gbikgfCAoeCA8PCAoOCAtIG4pKSkgJiBVSU5UOF9NQVg7Cit9CisKK19HTF9JTkxJTkVfSEVBREVSX0VORAorCisjZW5kaWYgLyogX0dMX0JJVFJPVEFURV9IICovCmRpZmYgLS1naXQgYS9saWIvYml0c2V0LmMgYi9saWIvYml0c2V0LmMKaW5kZXggMjkyNDU2Ny4uZDY0ZDVmOCAxMDA2NDQKLS0tIGEvbGliL2JpdHNldC5jCisrKyBiL2xpYi9iaXRzZXQuYwpAQCAtMSwxMCArMSwxMiBAQAogLyogR2VuZXJhbCBiaXRzZXRzLgotICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCiAgICBDb250cmlidXRlZCBieSBNaWNoYWVsIEhheWVzIChtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5ueikuCiAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCkBAIC0xMywxNiArMTUsMTQgQEAKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgorI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSAiYml0c2V0LmgiCiAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJiaXRzZXQuaCIKICNpbmNsdWRlICJhYml0c2V0LmgiCiAjaW5jbHVkZSAibGJpdHNldC5oIgogI2luY2x1ZGUgImViaXRzZXQuaCIKZGlmZiAtLWdpdCBhL2xpYi9iaXRzZXQuaCBiL2xpYi9iaXRzZXQuaAppbmRleCA0NWM4ODE4Li5mYmM3Yjc3IDEwMDY0NAotLS0gYS9saWIvYml0c2V0LmgKKysrIGIvbGliL2JpdHNldC5oCkBAIC0xLDIwICsxLDIxIEBACiAvKiBHZW5lcmljIGJpdHNldHMuCi0gICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDA0LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKICAgIENvbnRyaWJ1dGVkIGJ5IE1pY2hhZWwgSGF5ZXMgKG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56KS4KIAotVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci10aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCi1Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLUZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpZm5kZWYgX0JJVFNFVF9ICiAjZGVmaW5lIF9CSVRTRVRfSApkaWZmIC0tZ2l0IGEvbGliL2JpdHNldF9zdGF0cy5jIGIvbGliL2JpdHNldF9zdGF0cy5jCmluZGV4IDdiN2ZiMzQuLmJkZTliOTggMTAwNjQ0Ci0tLSBhL2xpYi9iaXRzZXRfc3RhdHMuYworKysgYi9saWIvYml0c2V0X3N0YXRzLmMKQEAgLTEsMTAgKzEsMTIgQEAKIC8qIEJpdHNldCBzdGF0aXN0aWNzLgotICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCiAgICBDb250cmlidXRlZCBieSBNaWNoYWVsIEhheWVzIChtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5ueikuCiAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCkBAIC0xMyw4ICsxNSw3IEBACiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogLyogVGhpcyBmaWxlIGlzIGEgd3JhcHBlciBiaXRzZXQgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBvdGhlciBiaXRzZXQKICAgIGltcGxlbWVudGF0aW9ucy4gIEl0IHByb3ZpZGVzIGJpdHNldCBjb21wYXRpYmlsaXR5IGNoZWNraW5nIGFuZApAQCAtMjMsMTYgKzI0LDE1IEBACiAgICBvcGVyYXRpb25zIGdldCB2ZWN0b3JlZCB0aHJvdWdoIGhlcmUgYW5kIHdlIHRoZW4gY2FsbCB0aGUgYXBwcm9wcmlhdGUKICAgIHJvdXRpbmVzLiAgKi8KIAotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgImJpdHNldF9zdGF0cy5oIgogCiAjaW5jbHVkZSAiYmJpdHNldC5oIgogI2luY2x1ZGUgImFiaXRzZXQuaCIKICNpbmNsdWRlICJlYml0c2V0LmgiCiAjaW5jbHVkZSAibGJpdHNldC5oIgogI2luY2x1ZGUgInZiaXRzZXQuaCIKLSNpbmNsdWRlICJiaXRzZXRfc3RhdHMuaCIKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMjUzLDE1ICsyNTMsMTUgQEAKICAgaWYgKGZpbGUpCiAgICAgewogICAgICAgaWYgKGZyZWFkICgmYml0c2V0X3N0YXRzX2luZm9fZGF0YSwgc2l6ZW9mIChiaXRzZXRfc3RhdHNfaW5mb19kYXRhKSwKLQkJIDEsIGZpbGUpICE9IDEpCi0JewotCSAgaWYgKGZlcnJvciAoZmlsZSkpCi0JICAgIHBlcnJvciAoXygiQ291bGQgbm90IHJlYWQgc3RhdHMgZmlsZS4iKSk7Ci0JICBlbHNlCi0JICAgIGZwcmludGYgKHN0ZGVyciwgXygiQmFkIHN0YXRzIGZpbGUgc2l6ZS5cbiIpKTsKLQl9CisgICAgICAgICAgICAgICAgIDEsIGZpbGUpICE9IDEpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoZmVycm9yIChmaWxlKSkKKyAgICAgICAgICAgIHBlcnJvciAoXygiY2Fubm90IHJlYWQgc3RhdHMgZmlsZSIpKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsIF8oImJhZCBzdGF0cyBmaWxlIHNpemVcbiIpKTsKKyAgICAgICAgfQogICAgICAgaWYgKGZjbG9zZSAoZmlsZSkgIT0gMCkKLQlwZXJyb3IgKF8oIkNvdWxkIG5vdCByZWFkIHN0YXRzIGZpbGUuIikpOworICAgICAgICBwZXJyb3IgKF8oImNhbm5vdCByZWFkIHN0YXRzIGZpbGUiKSk7CiAgICAgfQogICBiaXRzZXRfc3RhdHNfaW5mb19kYXRhLnJ1bnMrKzsKIH0KQEAgLTI4MywxMyArMjgzLDEzIEBACiAgIGlmIChmaWxlKQogICAgIHsKICAgICAgIGlmIChmd3JpdGUgKCZiaXRzZXRfc3RhdHNfaW5mb19kYXRhLCBzaXplb2YgKGJpdHNldF9zdGF0c19pbmZvX2RhdGEpLAotCQkgIDEsIGZpbGUpICE9IDEpCi0JcGVycm9yIChfKCJDb3VsZCBub3Qgd3JpdGUgc3RhdHMgZmlsZS4iKSk7CisgICAgICAgICAgICAgICAgICAxLCBmaWxlKSAhPSAxKQorICAgICAgICBwZXJyb3IgKF8oImNhbm5vdCB3cml0ZSBzdGF0cyBmaWxlIikpOwogICAgICAgaWYgKGZjbG9zZSAoZmlsZSkgIT0gMCkKLQlwZXJyb3IgKF8oIkNvdWxkIG5vdCB3cml0ZSBzdGF0cyBmaWxlLiIpKTsKKyAgICAgICAgcGVycm9yIChfKCJjYW5ub3Qgd3JpdGUgc3RhdHMgZmlsZSIpKTsKICAgICB9CiAgIGVsc2UKLSAgICBwZXJyb3IgKF8oIkNvdWxkIG5vdCBvcGVuIHN0YXRzIGZpbGUgZm9yIHdyaXRpbmcuIikpOworICAgIHBlcnJvciAoXygiY2Fubm90IG9wZW4gc3RhdHMgZmlsZSBmb3Igd3JpdGluZyIpKTsKIH0KIAogCkBAIC01NzYsMTEgKzU3Niw5IEBACiAgIGJpdHNldF9iaW5kZXggdG1wOwogICBiaXRzZXRfYmluZGV4IHNpemU7CiAgIGJpdHNldF9iaW5kZXggaTsKLSAgZW51bSBiaXRzZXRfdHlwZSB0eXBlOwogCiAgIGNvdW50ID0gQklUU0VUX0xJU1RfIChic2V0LT5zLmJzZXQsIGxpc3QsIG51bSwgbmV4dCk7CiAKLSAgdHlwZSA9IEJJVFNFVF9UWVBFXyAoYnNldC0+cy5ic2V0KTsKICAgQklUU0VUX1NUQVRTX0xJU1RTX0lOQyAoYnNldC0+cy5ic2V0KTsKIAogICAvKiBMb2cgaGlzdG9ncmFtIG9mIG51bWJlciBvZiBzZXQgYml0cy4gICovCmRpZmYgLS1naXQgYS9saWIvYml0c2V0X3N0YXRzLmggYi9saWIvYml0c2V0X3N0YXRzLmgKaW5kZXggNjM3OGM1Yy4uOTZlZmQ1NiAxMDA2NDQKLS0tIGEvbGliL2JpdHNldF9zdGF0cy5oCisrKyBiL2xpYi9iaXRzZXRfc3RhdHMuaApAQCAtMSwyMCArMSwyMSBAQAogLyogRnVuY3Rpb25zIHRvIHN1cHBvcnQgYml0c2V0IHN0YXRpc3RpY3MuCi0gICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDA0LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKICAgIENvbnRyaWJ1dGVkIGJ5IE1pY2hhZWwgSGF5ZXMgKG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56KS4KIAotVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci10aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCi1Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLUZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpZm5kZWYgX0JJVFNFVF9TVEFUU19ICiAjZGVmaW5lIF9CSVRTRVRfU1RBVFNfSApkaWZmIC0tZ2l0IGEvbGliL2JpdHNldHYtcHJpbnQuYyBiL2xpYi9iaXRzZXR2LXByaW50LmMKaW5kZXggMDA4Mzg3MS4uOTJiNjE3ZSAxMDA2NDQKLS0tIGEvbGliL2JpdHNldHYtcHJpbnQuYworKysgYi9saWIvYml0c2V0di1wcmludC5jCkBAIC0xLDkgKzEsMTEgQEAKIC8qIEJpdHNldCB2ZWN0b3JzLgotICAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDA0LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIDIwMDQsIDIwMDYsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKQEAgLTEyLDE1ICsxNCwxMyBAQAogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlICJiaXRzZXR2LXByaW50LmgiCiAKICNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlICJiaXRzZXR2LXByaW50LmgiCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IERpc3BsYXkgdGhlIE1BVFJJWCBhcnJheSBvZiBTSVpFIGJpdHNldHMgb2Ygc2l6ZSBTSVpFLiAgfApkaWZmIC0tZ2l0IGEvbGliL2JpdHNldHYtcHJpbnQuaCBiL2xpYi9iaXRzZXR2LXByaW50LmgKaW5kZXggZTU0YmU2OC4uMjc3MzZlZiAxMDA2NDQKLS0tIGEvbGliL2JpdHNldHYtcHJpbnQuaAorKysgYi9saWIvYml0c2V0di1wcmludC5oCkBAIC0xLDIwICsxLDIxIEBACiAvKiBCaXRzZXQgdmVjdG9ycy4KLSAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKICAgIENvbnRyaWJ1dGVkIGJ5IEFraW0gRGVtYWlsbGUgKGFraW1AZnJlZWZyaWVuZHMub3JnKS4KIAotVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci10aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCi1Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLUZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpZm5kZWYgX0JJVFNFVFZfUFJJTlRfSAogI2RlZmluZSBfQklUU0VUVl9QUklOVF9ICmRpZmYgLS1naXQgYS9saWIvYml0c2V0di5jIGIvbGliL2JpdHNldHYuYwppbmRleCBhZTc5ODUzLi5lM2JhZmI5IDEwMDY0NAotLS0gYS9saWIvYml0c2V0di5jCisrKyBiL2xpYi9iaXRzZXR2LmMKQEAgLTEsOSArMSwxMSBAQAogLyogQml0c2V0IHZlY3RvcnMuCi0gICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgMjAwNC0yMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCkBAIC0xMiwxNSArMTQsMTMgQEAKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgorI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSAiYml0c2V0di5oIgogCiAjaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSAiYml0c2V0di5oIgogCiAKIC8qIENyZWF0ZSBhIHZlY3RvciBvZiBOX1ZFQ1MgYml0c2V0cywgZWFjaCBvZiBOX0JJVFMsIGFuZCBvZgpkaWZmIC0tZ2l0IGEvbGliL2JpdHNldHYuaCBiL2xpYi9iaXRzZXR2LmgKaW5kZXggNjUyZjllMy4uMzRlMTYwNCAxMDA2NDQKLS0tIGEvbGliL2JpdHNldHYuaAorKysgYi9saWIvYml0c2V0di5oCkBAIC0xLDIwICsxLDIxIEBACiAvKiBCaXRzZXQgdmVjdG9ycy4KLSAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKICAgIENvbnRyaWJ1dGVkIGJ5IE1pY2hhZWwgSGF5ZXMgKG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56KS4KIAotVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci10aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCi1Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLUZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpZm5kZWYgX0JJVFNFVFZfSAogI2RlZmluZSBfQklUU0VUVl9ICmRpZmYgLS1naXQgYS9saWIvYy1jdHlwZS5jIGIvbGliL2MtY3R5cGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTJkN2E4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2MtY3R5cGUuYwpAQCAtMCwwICsxLDM5NSBAQAorLyogQ2hhcmFjdGVyIGhhbmRsaW5nIGluIEMgbG9jYWxlLgorCisgICBDb3B5cmlnaHQgMjAwMC0yMDAzLCAyMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyhhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNkZWZpbmUgTk9fQ19DVFlQRV9NQUNST1MKKyNpbmNsdWRlICJjLWN0eXBlLmgiCisKKy8qIFRoZSBmdW5jdGlvbiBpc2FzY2lpIGlzIG5vdCBsb2NhbGUgZGVwZW5kZW50LiBJdHMgdXNlIGluIEVCQ0RJQyBpcworICAgcXVlc3Rpb25hYmxlLiAqLworYm9vbAorY19pc2FzY2lpIChpbnQgYykKK3sKKyAgcmV0dXJuIChjID49IDB4MDAgJiYgYyA8PSAweDdmKTsKK30KKworYm9vbAorY19pc2FsbnVtIChpbnQgYykKK3sKKyNpZiBDX0NUWVBFX0NPTlNFQ1VUSVZFX0RJR0lUUyBcCisgICAgJiYgQ19DVFlQRV9DT05TRUNVVElWRV9VUFBFUkNBU0UgJiYgQ19DVFlQRV9DT05TRUNVVElWRV9MT1dFUkNBU0UKKyNpZiBDX0NUWVBFX0FTQ0lJCisgIHJldHVybiAoKGMgPj0gJzAnICYmIGMgPD0gJzknKQorICAgICAgICAgIHx8ICgoYyAmIH4weDIwKSA+PSAnQScgJiYgKGMgJiB+MHgyMCkgPD0gJ1onKSk7CisjZWxzZQorICByZXR1cm4gKChjID49ICcwJyAmJiBjIDw9ICc5JykKKyAgICAgICAgICB8fCAoYyA+PSAnQScgJiYgYyA8PSAnWicpCisgICAgICAgICAgfHwgKGMgPj0gJ2EnICYmIGMgPD0gJ3onKSk7CisjZW5kaWYKKyNlbHNlCisgIHN3aXRjaCAoYykKKyAgICB7CisgICAgY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOiBjYXNlICc1JzoKKyAgICBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKKyAgICBjYXNlICdBJzogY2FzZSAnQic6IGNhc2UgJ0MnOiBjYXNlICdEJzogY2FzZSAnRSc6IGNhc2UgJ0YnOgorICAgIGNhc2UgJ0cnOiBjYXNlICdIJzogY2FzZSAnSSc6IGNhc2UgJ0onOiBjYXNlICdLJzogY2FzZSAnTCc6CisgICAgY2FzZSAnTSc6IGNhc2UgJ04nOiBjYXNlICdPJzogY2FzZSAnUCc6IGNhc2UgJ1EnOiBjYXNlICdSJzoKKyAgICBjYXNlICdTJzogY2FzZSAnVCc6IGNhc2UgJ1UnOiBjYXNlICdWJzogY2FzZSAnVyc6IGNhc2UgJ1gnOgorICAgIGNhc2UgJ1knOiBjYXNlICdaJzoKKyAgICBjYXNlICdhJzogY2FzZSAnYic6IGNhc2UgJ2MnOiBjYXNlICdkJzogY2FzZSAnZSc6IGNhc2UgJ2YnOgorICAgIGNhc2UgJ2cnOiBjYXNlICdoJzogY2FzZSAnaSc6IGNhc2UgJ2onOiBjYXNlICdrJzogY2FzZSAnbCc6CisgICAgY2FzZSAnbSc6IGNhc2UgJ24nOiBjYXNlICdvJzogY2FzZSAncCc6IGNhc2UgJ3EnOiBjYXNlICdyJzoKKyAgICBjYXNlICdzJzogY2FzZSAndCc6IGNhc2UgJ3UnOiBjYXNlICd2JzogY2FzZSAndyc6IGNhc2UgJ3gnOgorICAgIGNhc2UgJ3knOiBjYXNlICd6JzoKKyAgICAgIHJldHVybiAxOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gMDsKKyAgICB9CisjZW5kaWYKK30KKworYm9vbAorY19pc2FscGhhIChpbnQgYykKK3sKKyNpZiBDX0NUWVBFX0NPTlNFQ1VUSVZFX1VQUEVSQ0FTRSAmJiBDX0NUWVBFX0NPTlNFQ1VUSVZFX0xPV0VSQ0FTRQorI2lmIENfQ1RZUEVfQVNDSUkKKyAgcmV0dXJuICgoYyAmIH4weDIwKSA+PSAnQScgJiYgKGMgJiB+MHgyMCkgPD0gJ1onKTsKKyNlbHNlCisgIHJldHVybiAoKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSB8fCAoYyA+PSAnYScgJiYgYyA8PSAneicpKTsKKyNlbmRpZgorI2Vsc2UKKyAgc3dpdGNoIChjKQorICAgIHsKKyAgICBjYXNlICdBJzogY2FzZSAnQic6IGNhc2UgJ0MnOiBjYXNlICdEJzogY2FzZSAnRSc6IGNhc2UgJ0YnOgorICAgIGNhc2UgJ0cnOiBjYXNlICdIJzogY2FzZSAnSSc6IGNhc2UgJ0onOiBjYXNlICdLJzogY2FzZSAnTCc6CisgICAgY2FzZSAnTSc6IGNhc2UgJ04nOiBjYXNlICdPJzogY2FzZSAnUCc6IGNhc2UgJ1EnOiBjYXNlICdSJzoKKyAgICBjYXNlICdTJzogY2FzZSAnVCc6IGNhc2UgJ1UnOiBjYXNlICdWJzogY2FzZSAnVyc6IGNhc2UgJ1gnOgorICAgIGNhc2UgJ1knOiBjYXNlICdaJzoKKyAgICBjYXNlICdhJzogY2FzZSAnYic6IGNhc2UgJ2MnOiBjYXNlICdkJzogY2FzZSAnZSc6IGNhc2UgJ2YnOgorICAgIGNhc2UgJ2cnOiBjYXNlICdoJzogY2FzZSAnaSc6IGNhc2UgJ2onOiBjYXNlICdrJzogY2FzZSAnbCc6CisgICAgY2FzZSAnbSc6IGNhc2UgJ24nOiBjYXNlICdvJzogY2FzZSAncCc6IGNhc2UgJ3EnOiBjYXNlICdyJzoKKyAgICBjYXNlICdzJzogY2FzZSAndCc6IGNhc2UgJ3UnOiBjYXNlICd2JzogY2FzZSAndyc6IGNhc2UgJ3gnOgorICAgIGNhc2UgJ3knOiBjYXNlICd6JzoKKyAgICAgIHJldHVybiAxOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gMDsKKyAgICB9CisjZW5kaWYKK30KKworYm9vbAorY19pc2JsYW5rIChpbnQgYykKK3sKKyAgcmV0dXJuIChjID09ICcgJyB8fCBjID09ICdcdCcpOworfQorCitib29sCitjX2lzY250cmwgKGludCBjKQoreworI2lmIENfQ1RZUEVfQVNDSUkKKyAgcmV0dXJuICgoYyAmIH4weDFmKSA9PSAwIHx8IGMgPT0gMHg3Zik7CisjZWxzZQorICBzd2l0Y2ggKGMpCisgICAgeworICAgIGNhc2UgJyAnOiBjYXNlICchJzogY2FzZSAnIic6IGNhc2UgJyMnOiBjYXNlICckJzogY2FzZSAnJSc6CisgICAgY2FzZSAnJic6IGNhc2UgJ1wnJzogY2FzZSAnKCc6IGNhc2UgJyknOiBjYXNlICcqJzogY2FzZSAnKyc6CisgICAgY2FzZSAnLCc6IGNhc2UgJy0nOiBjYXNlICcuJzogY2FzZSAnLyc6CisgICAgY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOiBjYXNlICc1JzoKKyAgICBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKKyAgICBjYXNlICc6JzogY2FzZSAnOyc6IGNhc2UgJzwnOiBjYXNlICc9JzogY2FzZSAnPic6IGNhc2UgJz8nOgorICAgIGNhc2UgJ0AnOgorICAgIGNhc2UgJ0EnOiBjYXNlICdCJzogY2FzZSAnQyc6IGNhc2UgJ0QnOiBjYXNlICdFJzogY2FzZSAnRic6CisgICAgY2FzZSAnRyc6IGNhc2UgJ0gnOiBjYXNlICdJJzogY2FzZSAnSic6IGNhc2UgJ0snOiBjYXNlICdMJzoKKyAgICBjYXNlICdNJzogY2FzZSAnTic6IGNhc2UgJ08nOiBjYXNlICdQJzogY2FzZSAnUSc6IGNhc2UgJ1InOgorICAgIGNhc2UgJ1MnOiBjYXNlICdUJzogY2FzZSAnVSc6IGNhc2UgJ1YnOiBjYXNlICdXJzogY2FzZSAnWCc6CisgICAgY2FzZSAnWSc6IGNhc2UgJ1onOgorICAgIGNhc2UgJ1snOiBjYXNlICdcXCc6IGNhc2UgJ10nOiBjYXNlICdeJzogY2FzZSAnXyc6IGNhc2UgJ2AnOgorICAgIGNhc2UgJ2EnOiBjYXNlICdiJzogY2FzZSAnYyc6IGNhc2UgJ2QnOiBjYXNlICdlJzogY2FzZSAnZic6CisgICAgY2FzZSAnZyc6IGNhc2UgJ2gnOiBjYXNlICdpJzogY2FzZSAnaic6IGNhc2UgJ2snOiBjYXNlICdsJzoKKyAgICBjYXNlICdtJzogY2FzZSAnbic6IGNhc2UgJ28nOiBjYXNlICdwJzogY2FzZSAncSc6IGNhc2UgJ3InOgorICAgIGNhc2UgJ3MnOiBjYXNlICd0JzogY2FzZSAndSc6IGNhc2UgJ3YnOiBjYXNlICd3JzogY2FzZSAneCc6CisgICAgY2FzZSAneSc6IGNhc2UgJ3onOgorICAgIGNhc2UgJ3snOiBjYXNlICd8JzogY2FzZSAnfSc6IGNhc2UgJ34nOgorICAgICAgcmV0dXJuIDA7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiAxOworICAgIH0KKyNlbmRpZgorfQorCitib29sCitjX2lzZGlnaXQgKGludCBjKQoreworI2lmIENfQ1RZUEVfQ09OU0VDVVRJVkVfRElHSVRTCisgIHJldHVybiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpOworI2Vsc2UKKyAgc3dpdGNoIChjKQorICAgIHsKKyAgICBjYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6IGNhc2UgJzUnOgorICAgIGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgorICAgICAgcmV0dXJuIDE7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiAwOworICAgIH0KKyNlbmRpZgorfQorCitib29sCitjX2lzbG93ZXIgKGludCBjKQoreworI2lmIENfQ1RZUEVfQ09OU0VDVVRJVkVfTE9XRVJDQVNFCisgIHJldHVybiAoYyA+PSAnYScgJiYgYyA8PSAneicpOworI2Vsc2UKKyAgc3dpdGNoIChjKQorICAgIHsKKyAgICBjYXNlICdhJzogY2FzZSAnYic6IGNhc2UgJ2MnOiBjYXNlICdkJzogY2FzZSAnZSc6IGNhc2UgJ2YnOgorICAgIGNhc2UgJ2cnOiBjYXNlICdoJzogY2FzZSAnaSc6IGNhc2UgJ2onOiBjYXNlICdrJzogY2FzZSAnbCc6CisgICAgY2FzZSAnbSc6IGNhc2UgJ24nOiBjYXNlICdvJzogY2FzZSAncCc6IGNhc2UgJ3EnOiBjYXNlICdyJzoKKyAgICBjYXNlICdzJzogY2FzZSAndCc6IGNhc2UgJ3UnOiBjYXNlICd2JzogY2FzZSAndyc6IGNhc2UgJ3gnOgorICAgIGNhc2UgJ3knOiBjYXNlICd6JzoKKyAgICAgIHJldHVybiAxOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gMDsKKyAgICB9CisjZW5kaWYKK30KKworYm9vbAorY19pc2dyYXBoIChpbnQgYykKK3sKKyNpZiBDX0NUWVBFX0FTQ0lJCisgIHJldHVybiAoYyA+PSAnIScgJiYgYyA8PSAnficpOworI2Vsc2UKKyAgc3dpdGNoIChjKQorICAgIHsKKyAgICBjYXNlICchJzogY2FzZSAnIic6IGNhc2UgJyMnOiBjYXNlICckJzogY2FzZSAnJSc6IGNhc2UgJyYnOgorICAgIGNhc2UgJ1wnJzogY2FzZSAnKCc6IGNhc2UgJyknOiBjYXNlICcqJzogY2FzZSAnKyc6IGNhc2UgJywnOgorICAgIGNhc2UgJy0nOiBjYXNlICcuJzogY2FzZSAnLyc6CisgICAgY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOiBjYXNlICc1JzoKKyAgICBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKKyAgICBjYXNlICc6JzogY2FzZSAnOyc6IGNhc2UgJzwnOiBjYXNlICc9JzogY2FzZSAnPic6IGNhc2UgJz8nOgorICAgIGNhc2UgJ0AnOgorICAgIGNhc2UgJ0EnOiBjYXNlICdCJzogY2FzZSAnQyc6IGNhc2UgJ0QnOiBjYXNlICdFJzogY2FzZSAnRic6CisgICAgY2FzZSAnRyc6IGNhc2UgJ0gnOiBjYXNlICdJJzogY2FzZSAnSic6IGNhc2UgJ0snOiBjYXNlICdMJzoKKyAgICBjYXNlICdNJzogY2FzZSAnTic6IGNhc2UgJ08nOiBjYXNlICdQJzogY2FzZSAnUSc6IGNhc2UgJ1InOgorICAgIGNhc2UgJ1MnOiBjYXNlICdUJzogY2FzZSAnVSc6IGNhc2UgJ1YnOiBjYXNlICdXJzogY2FzZSAnWCc6CisgICAgY2FzZSAnWSc6IGNhc2UgJ1onOgorICAgIGNhc2UgJ1snOiBjYXNlICdcXCc6IGNhc2UgJ10nOiBjYXNlICdeJzogY2FzZSAnXyc6IGNhc2UgJ2AnOgorICAgIGNhc2UgJ2EnOiBjYXNlICdiJzogY2FzZSAnYyc6IGNhc2UgJ2QnOiBjYXNlICdlJzogY2FzZSAnZic6CisgICAgY2FzZSAnZyc6IGNhc2UgJ2gnOiBjYXNlICdpJzogY2FzZSAnaic6IGNhc2UgJ2snOiBjYXNlICdsJzoKKyAgICBjYXNlICdtJzogY2FzZSAnbic6IGNhc2UgJ28nOiBjYXNlICdwJzogY2FzZSAncSc6IGNhc2UgJ3InOgorICAgIGNhc2UgJ3MnOiBjYXNlICd0JzogY2FzZSAndSc6IGNhc2UgJ3YnOiBjYXNlICd3JzogY2FzZSAneCc6CisgICAgY2FzZSAneSc6IGNhc2UgJ3onOgorICAgIGNhc2UgJ3snOiBjYXNlICd8JzogY2FzZSAnfSc6IGNhc2UgJ34nOgorICAgICAgcmV0dXJuIDE7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiAwOworICAgIH0KKyNlbmRpZgorfQorCitib29sCitjX2lzcHJpbnQgKGludCBjKQoreworI2lmIENfQ1RZUEVfQVNDSUkKKyAgcmV0dXJuIChjID49ICcgJyAmJiBjIDw9ICd+Jyk7CisjZWxzZQorICBzd2l0Y2ggKGMpCisgICAgeworICAgIGNhc2UgJyAnOiBjYXNlICchJzogY2FzZSAnIic6IGNhc2UgJyMnOiBjYXNlICckJzogY2FzZSAnJSc6CisgICAgY2FzZSAnJic6IGNhc2UgJ1wnJzogY2FzZSAnKCc6IGNhc2UgJyknOiBjYXNlICcqJzogY2FzZSAnKyc6CisgICAgY2FzZSAnLCc6IGNhc2UgJy0nOiBjYXNlICcuJzogY2FzZSAnLyc6CisgICAgY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOiBjYXNlICc1JzoKKyAgICBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKKyAgICBjYXNlICc6JzogY2FzZSAnOyc6IGNhc2UgJzwnOiBjYXNlICc9JzogY2FzZSAnPic6IGNhc2UgJz8nOgorICAgIGNhc2UgJ0AnOgorICAgIGNhc2UgJ0EnOiBjYXNlICdCJzogY2FzZSAnQyc6IGNhc2UgJ0QnOiBjYXNlICdFJzogY2FzZSAnRic6CisgICAgY2FzZSAnRyc6IGNhc2UgJ0gnOiBjYXNlICdJJzogY2FzZSAnSic6IGNhc2UgJ0snOiBjYXNlICdMJzoKKyAgICBjYXNlICdNJzogY2FzZSAnTic6IGNhc2UgJ08nOiBjYXNlICdQJzogY2FzZSAnUSc6IGNhc2UgJ1InOgorICAgIGNhc2UgJ1MnOiBjYXNlICdUJzogY2FzZSAnVSc6IGNhc2UgJ1YnOiBjYXNlICdXJzogY2FzZSAnWCc6CisgICAgY2FzZSAnWSc6IGNhc2UgJ1onOgorICAgIGNhc2UgJ1snOiBjYXNlICdcXCc6IGNhc2UgJ10nOiBjYXNlICdeJzogY2FzZSAnXyc6IGNhc2UgJ2AnOgorICAgIGNhc2UgJ2EnOiBjYXNlICdiJzogY2FzZSAnYyc6IGNhc2UgJ2QnOiBjYXNlICdlJzogY2FzZSAnZic6CisgICAgY2FzZSAnZyc6IGNhc2UgJ2gnOiBjYXNlICdpJzogY2FzZSAnaic6IGNhc2UgJ2snOiBjYXNlICdsJzoKKyAgICBjYXNlICdtJzogY2FzZSAnbic6IGNhc2UgJ28nOiBjYXNlICdwJzogY2FzZSAncSc6IGNhc2UgJ3InOgorICAgIGNhc2UgJ3MnOiBjYXNlICd0JzogY2FzZSAndSc6IGNhc2UgJ3YnOiBjYXNlICd3JzogY2FzZSAneCc6CisgICAgY2FzZSAneSc6IGNhc2UgJ3onOgorICAgIGNhc2UgJ3snOiBjYXNlICd8JzogY2FzZSAnfSc6IGNhc2UgJ34nOgorICAgICAgcmV0dXJuIDE7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiAwOworICAgIH0KKyNlbmRpZgorfQorCitib29sCitjX2lzcHVuY3QgKGludCBjKQoreworI2lmIENfQ1RZUEVfQVNDSUkKKyAgcmV0dXJuICgoYyA+PSAnIScgJiYgYyA8PSAnficpCisgICAgICAgICAgJiYgISgoYyA+PSAnMCcgJiYgYyA8PSAnOScpCisgICAgICAgICAgICAgICB8fCAoKGMgJiB+MHgyMCkgPj0gJ0EnICYmIChjICYgfjB4MjApIDw9ICdaJykpKTsKKyNlbHNlCisgIHN3aXRjaCAoYykKKyAgICB7CisgICAgY2FzZSAnISc6IGNhc2UgJyInOiBjYXNlICcjJzogY2FzZSAnJCc6IGNhc2UgJyUnOiBjYXNlICcmJzoKKyAgICBjYXNlICdcJyc6IGNhc2UgJygnOiBjYXNlICcpJzogY2FzZSAnKic6IGNhc2UgJysnOiBjYXNlICcsJzoKKyAgICBjYXNlICctJzogY2FzZSAnLic6IGNhc2UgJy8nOgorICAgIGNhc2UgJzonOiBjYXNlICc7JzogY2FzZSAnPCc6IGNhc2UgJz0nOiBjYXNlICc+JzogY2FzZSAnPyc6CisgICAgY2FzZSAnQCc6CisgICAgY2FzZSAnWyc6IGNhc2UgJ1xcJzogY2FzZSAnXSc6IGNhc2UgJ14nOiBjYXNlICdfJzogY2FzZSAnYCc6CisgICAgY2FzZSAneyc6IGNhc2UgJ3wnOiBjYXNlICd9JzogY2FzZSAnfic6CisgICAgICByZXR1cm4gMTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIDA7CisgICAgfQorI2VuZGlmCit9CisKK2Jvb2wKK2NfaXNzcGFjZSAoaW50IGMpCit7CisgIHJldHVybiAoYyA9PSAnICcgfHwgYyA9PSAnXHQnCisgICAgICAgICAgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1x2JyB8fCBjID09ICdcZicgfHwgYyA9PSAnXHInKTsKK30KKworYm9vbAorY19pc3VwcGVyIChpbnQgYykKK3sKKyNpZiBDX0NUWVBFX0NPTlNFQ1VUSVZFX1VQUEVSQ0FTRQorICByZXR1cm4gKGMgPj0gJ0EnICYmIGMgPD0gJ1onKTsKKyNlbHNlCisgIHN3aXRjaCAoYykKKyAgICB7CisgICAgY2FzZSAnQSc6IGNhc2UgJ0InOiBjYXNlICdDJzogY2FzZSAnRCc6IGNhc2UgJ0UnOiBjYXNlICdGJzoKKyAgICBjYXNlICdHJzogY2FzZSAnSCc6IGNhc2UgJ0knOiBjYXNlICdKJzogY2FzZSAnSyc6IGNhc2UgJ0wnOgorICAgIGNhc2UgJ00nOiBjYXNlICdOJzogY2FzZSAnTyc6IGNhc2UgJ1AnOiBjYXNlICdRJzogY2FzZSAnUic6CisgICAgY2FzZSAnUyc6IGNhc2UgJ1QnOiBjYXNlICdVJzogY2FzZSAnVic6IGNhc2UgJ1cnOiBjYXNlICdYJzoKKyAgICBjYXNlICdZJzogY2FzZSAnWic6CisgICAgICByZXR1cm4gMTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIDA7CisgICAgfQorI2VuZGlmCit9CisKK2Jvb2wKK2NfaXN4ZGlnaXQgKGludCBjKQoreworI2lmIENfQ1RZUEVfQ09OU0VDVVRJVkVfRElHSVRTIFwKKyAgICAmJiBDX0NUWVBFX0NPTlNFQ1VUSVZFX1VQUEVSQ0FTRSAmJiBDX0NUWVBFX0NPTlNFQ1VUSVZFX0xPV0VSQ0FTRQorI2lmIENfQ1RZUEVfQVNDSUkKKyAgcmV0dXJuICgoYyA+PSAnMCcgJiYgYyA8PSAnOScpCisgICAgICAgICAgfHwgKChjICYgfjB4MjApID49ICdBJyAmJiAoYyAmIH4weDIwKSA8PSAnRicpKTsKKyNlbHNlCisgIHJldHVybiAoKGMgPj0gJzAnICYmIGMgPD0gJzknKQorICAgICAgICAgIHx8IChjID49ICdBJyAmJiBjIDw9ICdGJykKKyAgICAgICAgICB8fCAoYyA+PSAnYScgJiYgYyA8PSAnZicpKTsKKyNlbmRpZgorI2Vsc2UKKyAgc3dpdGNoIChjKQorICAgIHsKKyAgICBjYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6IGNhc2UgJzUnOgorICAgIGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgorICAgIGNhc2UgJ0EnOiBjYXNlICdCJzogY2FzZSAnQyc6IGNhc2UgJ0QnOiBjYXNlICdFJzogY2FzZSAnRic6CisgICAgY2FzZSAnYSc6IGNhc2UgJ2InOiBjYXNlICdjJzogY2FzZSAnZCc6IGNhc2UgJ2UnOiBjYXNlICdmJzoKKyAgICAgIHJldHVybiAxOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gMDsKKyAgICB9CisjZW5kaWYKK30KKworaW50CitjX3RvbG93ZXIgKGludCBjKQoreworI2lmIENfQ1RZUEVfQ09OU0VDVVRJVkVfVVBQRVJDQVNFICYmIENfQ1RZUEVfQ09OU0VDVVRJVkVfTE9XRVJDQVNFCisgIHJldHVybiAoYyA+PSAnQScgJiYgYyA8PSAnWicgPyBjIC0gJ0EnICsgJ2EnIDogYyk7CisjZWxzZQorICBzd2l0Y2ggKGMpCisgICAgeworICAgIGNhc2UgJ0EnOiByZXR1cm4gJ2EnOworICAgIGNhc2UgJ0InOiByZXR1cm4gJ2InOworICAgIGNhc2UgJ0MnOiByZXR1cm4gJ2MnOworICAgIGNhc2UgJ0QnOiByZXR1cm4gJ2QnOworICAgIGNhc2UgJ0UnOiByZXR1cm4gJ2UnOworICAgIGNhc2UgJ0YnOiByZXR1cm4gJ2YnOworICAgIGNhc2UgJ0cnOiByZXR1cm4gJ2cnOworICAgIGNhc2UgJ0gnOiByZXR1cm4gJ2gnOworICAgIGNhc2UgJ0knOiByZXR1cm4gJ2knOworICAgIGNhc2UgJ0onOiByZXR1cm4gJ2onOworICAgIGNhc2UgJ0snOiByZXR1cm4gJ2snOworICAgIGNhc2UgJ0wnOiByZXR1cm4gJ2wnOworICAgIGNhc2UgJ00nOiByZXR1cm4gJ20nOworICAgIGNhc2UgJ04nOiByZXR1cm4gJ24nOworICAgIGNhc2UgJ08nOiByZXR1cm4gJ28nOworICAgIGNhc2UgJ1AnOiByZXR1cm4gJ3AnOworICAgIGNhc2UgJ1EnOiByZXR1cm4gJ3EnOworICAgIGNhc2UgJ1InOiByZXR1cm4gJ3InOworICAgIGNhc2UgJ1MnOiByZXR1cm4gJ3MnOworICAgIGNhc2UgJ1QnOiByZXR1cm4gJ3QnOworICAgIGNhc2UgJ1UnOiByZXR1cm4gJ3UnOworICAgIGNhc2UgJ1YnOiByZXR1cm4gJ3YnOworICAgIGNhc2UgJ1cnOiByZXR1cm4gJ3cnOworICAgIGNhc2UgJ1gnOiByZXR1cm4gJ3gnOworICAgIGNhc2UgJ1knOiByZXR1cm4gJ3knOworICAgIGNhc2UgJ1onOiByZXR1cm4gJ3onOworICAgIGRlZmF1bHQ6IHJldHVybiBjOworICAgIH0KKyNlbmRpZgorfQorCitpbnQKK2NfdG91cHBlciAoaW50IGMpCit7CisjaWYgQ19DVFlQRV9DT05TRUNVVElWRV9VUFBFUkNBU0UgJiYgQ19DVFlQRV9DT05TRUNVVElWRV9MT1dFUkNBU0UKKyAgcmV0dXJuIChjID49ICdhJyAmJiBjIDw9ICd6JyA/IGMgLSAnYScgKyAnQScgOiBjKTsKKyNlbHNlCisgIHN3aXRjaCAoYykKKyAgICB7CisgICAgY2FzZSAnYSc6IHJldHVybiAnQSc7CisgICAgY2FzZSAnYic6IHJldHVybiAnQic7CisgICAgY2FzZSAnYyc6IHJldHVybiAnQyc7CisgICAgY2FzZSAnZCc6IHJldHVybiAnRCc7CisgICAgY2FzZSAnZSc6IHJldHVybiAnRSc7CisgICAgY2FzZSAnZic6IHJldHVybiAnRic7CisgICAgY2FzZSAnZyc6IHJldHVybiAnRyc7CisgICAgY2FzZSAnaCc6IHJldHVybiAnSCc7CisgICAgY2FzZSAnaSc6IHJldHVybiAnSSc7CisgICAgY2FzZSAnaic6IHJldHVybiAnSic7CisgICAgY2FzZSAnayc6IHJldHVybiAnSyc7CisgICAgY2FzZSAnbCc6IHJldHVybiAnTCc7CisgICAgY2FzZSAnbSc6IHJldHVybiAnTSc7CisgICAgY2FzZSAnbic6IHJldHVybiAnTic7CisgICAgY2FzZSAnbyc6IHJldHVybiAnTyc7CisgICAgY2FzZSAncCc6IHJldHVybiAnUCc7CisgICAgY2FzZSAncSc6IHJldHVybiAnUSc7CisgICAgY2FzZSAncic6IHJldHVybiAnUic7CisgICAgY2FzZSAncyc6IHJldHVybiAnUyc7CisgICAgY2FzZSAndCc6IHJldHVybiAnVCc7CisgICAgY2FzZSAndSc6IHJldHVybiAnVSc7CisgICAgY2FzZSAndic6IHJldHVybiAnVic7CisgICAgY2FzZSAndyc6IHJldHVybiAnVyc7CisgICAgY2FzZSAneCc6IHJldHVybiAnWCc7CisgICAgY2FzZSAneSc6IHJldHVybiAnWSc7CisgICAgY2FzZSAneic6IHJldHVybiAnWic7CisgICAgZGVmYXVsdDogcmV0dXJuIGM7CisgICAgfQorI2VuZGlmCit9CmRpZmYgLS1naXQgYS9saWIvYy1jdHlwZS5oIGIvbGliL2MtY3R5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjMxMzA5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2MtY3R5cGUuaApAQCAtMCwwICsxLDI5NCBAQAorLyogQ2hhcmFjdGVyIGhhbmRsaW5nIGluIEMgbG9jYWxlLgorCisgICBUaGVzZSBmdW5jdGlvbnMgd29yayBsaWtlIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9ucyBpbiA8Y3R5cGUuaD4sCisgICBleGNlcHQgdGhhdCB0aGV5IGhhdmUgdGhlIEMgKFBPU0lYKSBsb2NhbGUgaGFyZHdpcmVkLCB3aGVyZWFzIHRoZQorICAgPGN0eXBlLmg+IGZ1bmN0aW9ucycgYmVoYXZpb3VyIGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgbG9jYWxlIHNldCB2aWEKKyAgIHNldGxvY2FsZS4KKworICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMsIDIwMDYsIDIwMDgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIENfQ1RZUEVfSAorI2RlZmluZSBDX0NUWVBFX0gKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworLyogVGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoaXMgZmlsZSBhc3N1bWUgdGhlICJDIiBsb2NhbGUgYW5kIGEgY2hhcmFjdGVyCisgICBzZXQgd2l0aG91dCBkaWFjcml0aWNzIChBU0NJSS1VUyBvciBFQkNESUMtVVMgb3Igc29tZXRoaW5nIGxpa2UgdGhhdCkuCisgICBFdmVuIGlmIHRoZSAiQyIgbG9jYWxlIG9uIGEgcGFydGljdWxhciBzeXN0ZW0gaXMgYW4gZXh0ZW5zaW9uIG9mIHRoZSBBU0NJSQorICAgY2hhcmFjdGVyIHNldCAobGlrZSBvbiBCZU9TLCB3aGVyZSBpdCBpcyBVVEYtOCwgb3Igb24gQW1pZ2FPUywgd2hlcmUgaXQKKyAgIGlzIElTTy04ODU5LTEpLCB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSByZWNvZ25pemUgb25seSB0aGUgQVNDSUkKKyAgIGNoYXJhY3RlcnMuICAqLworCisKKy8qIENoZWNrIHdoZXRoZXIgdGhlIEFTQ0lJIG9wdGltaXphdGlvbnMgYXBwbHkuICovCisKKy8qIEFOU0kgQzg5IChhbmQgSVNPIEM5OSA1LjIuMS4zIHRvbykgYWxyZWFkeSBndWFyYW50ZWVzIHRoYXQKKyAgICcwJywgJzEnLCAuLi4sICc5JyBoYXZlIGNvbnNlY3V0aXZlIGludGVnZXIgdmFsdWVzLiAgKi8KKyNkZWZpbmUgQ19DVFlQRV9DT05TRUNVVElWRV9ESUdJVFMgMQorCisjaWYgKCdBJyA8PSAnWicpIFwKKyAgICAmJiAoJ0EnICsgMSA9PSAnQicpICYmICgnQicgKyAxID09ICdDJykgJiYgKCdDJyArIDEgPT0gJ0QnKSBcCisgICAgJiYgKCdEJyArIDEgPT0gJ0UnKSAmJiAoJ0UnICsgMSA9PSAnRicpICYmICgnRicgKyAxID09ICdHJykgXAorICAgICYmICgnRycgKyAxID09ICdIJykgJiYgKCdIJyArIDEgPT0gJ0knKSAmJiAoJ0knICsgMSA9PSAnSicpIFwKKyAgICAmJiAoJ0onICsgMSA9PSAnSycpICYmICgnSycgKyAxID09ICdMJykgJiYgKCdMJyArIDEgPT0gJ00nKSBcCisgICAgJiYgKCdNJyArIDEgPT0gJ04nKSAmJiAoJ04nICsgMSA9PSAnTycpICYmICgnTycgKyAxID09ICdQJykgXAorICAgICYmICgnUCcgKyAxID09ICdRJykgJiYgKCdRJyArIDEgPT0gJ1InKSAmJiAoJ1InICsgMSA9PSAnUycpIFwKKyAgICAmJiAoJ1MnICsgMSA9PSAnVCcpICYmICgnVCcgKyAxID09ICdVJykgJiYgKCdVJyArIDEgPT0gJ1YnKSBcCisgICAgJiYgKCdWJyArIDEgPT0gJ1cnKSAmJiAoJ1cnICsgMSA9PSAnWCcpICYmICgnWCcgKyAxID09ICdZJykgXAorICAgICYmICgnWScgKyAxID09ICdaJykKKyNkZWZpbmUgQ19DVFlQRV9DT05TRUNVVElWRV9VUFBFUkNBU0UgMQorI2VuZGlmCisKKyNpZiAoJ2EnIDw9ICd6JykgXAorICAgICYmICgnYScgKyAxID09ICdiJykgJiYgKCdiJyArIDEgPT0gJ2MnKSAmJiAoJ2MnICsgMSA9PSAnZCcpIFwKKyAgICAmJiAoJ2QnICsgMSA9PSAnZScpICYmICgnZScgKyAxID09ICdmJykgJiYgKCdmJyArIDEgPT0gJ2cnKSBcCisgICAgJiYgKCdnJyArIDEgPT0gJ2gnKSAmJiAoJ2gnICsgMSA9PSAnaScpICYmICgnaScgKyAxID09ICdqJykgXAorICAgICYmICgnaicgKyAxID09ICdrJykgJiYgKCdrJyArIDEgPT0gJ2wnKSAmJiAoJ2wnICsgMSA9PSAnbScpIFwKKyAgICAmJiAoJ20nICsgMSA9PSAnbicpICYmICgnbicgKyAxID09ICdvJykgJiYgKCdvJyArIDEgPT0gJ3AnKSBcCisgICAgJiYgKCdwJyArIDEgPT0gJ3EnKSAmJiAoJ3EnICsgMSA9PSAncicpICYmICgncicgKyAxID09ICdzJykgXAorICAgICYmICgncycgKyAxID09ICd0JykgJiYgKCd0JyArIDEgPT0gJ3UnKSAmJiAoJ3UnICsgMSA9PSAndicpIFwKKyAgICAmJiAoJ3YnICsgMSA9PSAndycpICYmICgndycgKyAxID09ICd4JykgJiYgKCd4JyArIDEgPT0gJ3knKSBcCisgICAgJiYgKCd5JyArIDEgPT0gJ3onKQorI2RlZmluZSBDX0NUWVBFX0NPTlNFQ1VUSVZFX0xPV0VSQ0FTRSAxCisjZW5kaWYKKworI2lmICgnICcgPT0gMzIpICYmICgnIScgPT0gMzMpICYmICgnIicgPT0gMzQpICYmICgnIycgPT0gMzUpIFwKKyAgICAmJiAoJyUnID09IDM3KSAmJiAoJyYnID09IDM4KSAmJiAoJ1wnJyA9PSAzOSkgJiYgKCcoJyA9PSA0MCkgXAorICAgICYmICgnKScgPT0gNDEpICYmICgnKicgPT0gNDIpICYmICgnKycgPT0gNDMpICYmICgnLCcgPT0gNDQpIFwKKyAgICAmJiAoJy0nID09IDQ1KSAmJiAoJy4nID09IDQ2KSAmJiAoJy8nID09IDQ3KSAmJiAoJzAnID09IDQ4KSBcCisgICAgJiYgKCcxJyA9PSA0OSkgJiYgKCcyJyA9PSA1MCkgJiYgKCczJyA9PSA1MSkgJiYgKCc0JyA9PSA1MikgXAorICAgICYmICgnNScgPT0gNTMpICYmICgnNicgPT0gNTQpICYmICgnNycgPT0gNTUpICYmICgnOCcgPT0gNTYpIFwKKyAgICAmJiAoJzknID09IDU3KSAmJiAoJzonID09IDU4KSAmJiAoJzsnID09IDU5KSAmJiAoJzwnID09IDYwKSBcCisgICAgJiYgKCc9JyA9PSA2MSkgJiYgKCc+JyA9PSA2MikgJiYgKCc/JyA9PSA2MykgJiYgKCdBJyA9PSA2NSkgXAorICAgICYmICgnQicgPT0gNjYpICYmICgnQycgPT0gNjcpICYmICgnRCcgPT0gNjgpICYmICgnRScgPT0gNjkpIFwKKyAgICAmJiAoJ0YnID09IDcwKSAmJiAoJ0cnID09IDcxKSAmJiAoJ0gnID09IDcyKSAmJiAoJ0knID09IDczKSBcCisgICAgJiYgKCdKJyA9PSA3NCkgJiYgKCdLJyA9PSA3NSkgJiYgKCdMJyA9PSA3NikgJiYgKCdNJyA9PSA3NykgXAorICAgICYmICgnTicgPT0gNzgpICYmICgnTycgPT0gNzkpICYmICgnUCcgPT0gODApICYmICgnUScgPT0gODEpIFwKKyAgICAmJiAoJ1InID09IDgyKSAmJiAoJ1MnID09IDgzKSAmJiAoJ1QnID09IDg0KSAmJiAoJ1UnID09IDg1KSBcCisgICAgJiYgKCdWJyA9PSA4NikgJiYgKCdXJyA9PSA4NykgJiYgKCdYJyA9PSA4OCkgJiYgKCdZJyA9PSA4OSkgXAorICAgICYmICgnWicgPT0gOTApICYmICgnWycgPT0gOTEpICYmICgnXFwnID09IDkyKSAmJiAoJ10nID09IDkzKSBcCisgICAgJiYgKCdeJyA9PSA5NCkgJiYgKCdfJyA9PSA5NSkgJiYgKCdhJyA9PSA5NykgJiYgKCdiJyA9PSA5OCkgXAorICAgICYmICgnYycgPT0gOTkpICYmICgnZCcgPT0gMTAwKSAmJiAoJ2UnID09IDEwMSkgJiYgKCdmJyA9PSAxMDIpIFwKKyAgICAmJiAoJ2cnID09IDEwMykgJiYgKCdoJyA9PSAxMDQpICYmICgnaScgPT0gMTA1KSAmJiAoJ2onID09IDEwNikgXAorICAgICYmICgnaycgPT0gMTA3KSAmJiAoJ2wnID09IDEwOCkgJiYgKCdtJyA9PSAxMDkpICYmICgnbicgPT0gMTEwKSBcCisgICAgJiYgKCdvJyA9PSAxMTEpICYmICgncCcgPT0gMTEyKSAmJiAoJ3EnID09IDExMykgJiYgKCdyJyA9PSAxMTQpIFwKKyAgICAmJiAoJ3MnID09IDExNSkgJiYgKCd0JyA9PSAxMTYpICYmICgndScgPT0gMTE3KSAmJiAoJ3YnID09IDExOCkgXAorICAgICYmICgndycgPT0gMTE5KSAmJiAoJ3gnID09IDEyMCkgJiYgKCd5JyA9PSAxMjEpICYmICgneicgPT0gMTIyKSBcCisgICAgJiYgKCd7JyA9PSAxMjMpICYmICgnfCcgPT0gMTI0KSAmJiAoJ30nID09IDEyNSkgJiYgKCd+JyA9PSAxMjYpCisvKiBUaGUgY2hhcmFjdGVyIHNldCBpcyBBU0NJSSBvciBvbmUgb2YgaXRzIHZhcmlhbnRzIG9yIGV4dGVuc2lvbnMsIG5vdCBFQkNESUMuCisgICBUZXN0aW5nIHRoZSB2YWx1ZSBvZiAnXG4nIGFuZCAnXHInIGlzIG5vdCByZWxldmFudC4gICovCisjZGVmaW5lIENfQ1RZUEVfQVNDSUkgMQorI2VuZGlmCisKKworLyogRnVuY3Rpb24gZGVjbGFyYXRpb25zLiAqLworCisvKiBVbmxpa2UgdGhlIGZ1bmN0aW9ucyBpbiA8Y3R5cGUuaD4sIHdoaWNoIHJlcXVpcmUgYW4gYXJndW1lbnQgaW4gdGhlIHJhbmdlCisgICBvZiB0aGUgJ3Vuc2lnbmVkIGNoYXInIHR5cGUsIHRoZSBmdW5jdGlvbnMgaGVyZSBvcGVyYXRlIG9uIHZhbHVlcyB0aGF0IGFyZQorICAgaW4gdGhlICd1bnNpZ25lZCBjaGFyJyByYW5nZSBvciBpbiB0aGUgJ2NoYXInIHJhbmdlLiAgSW4gb3RoZXIgd29yZHMsCisgICB3aGVuIHlvdSBoYXZlIGEgJ2NoYXInIHZhbHVlLCB5b3UgbmVlZCB0byBjYXN0IGl0IGJlZm9yZSB1c2luZyBpdCBhcworICAgYXJndW1lbnQgdG8gYSA8Y3R5cGUuaD4gZnVuY3Rpb246CisKKyAgICAgICAgIGNvbnN0IGNoYXIgKnMgPSAuLi47CisgICAgICAgICBpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpICpzKSkgLi4uCisKKyAgIGJ1dCB5b3UgZG9uJ3QgbmVlZCB0byBjYXN0IGl0IGZvciB0aGUgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhpcyBmaWxlOgorCisgICAgICAgICBjb25zdCBjaGFyICpzID0gLi4uOworICAgICAgICAgaWYgKGNfaXNhbHBoYSAoKnMpKSAuLi4KKyAqLworCitleHRlcm4gYm9vbCBjX2lzYXNjaWkgKGludCBjKSBfR0xfQVRUUklCVVRFX0NPTlNUOyAvKiBub3QgbG9jYWxlIGRlcGVuZGVudCAqLworCitleHRlcm4gYm9vbCBjX2lzYWxudW0gKGludCBjKSBfR0xfQVRUUklCVVRFX0NPTlNUOworZXh0ZXJuIGJvb2wgY19pc2FscGhhIChpbnQgYykgX0dMX0FUVFJJQlVURV9DT05TVDsKK2V4dGVybiBib29sIGNfaXNibGFuayAoaW50IGMpIF9HTF9BVFRSSUJVVEVfQ09OU1Q7CitleHRlcm4gYm9vbCBjX2lzY250cmwgKGludCBjKSBfR0xfQVRUUklCVVRFX0NPTlNUOworZXh0ZXJuIGJvb2wgY19pc2RpZ2l0IChpbnQgYykgX0dMX0FUVFJJQlVURV9DT05TVDsKK2V4dGVybiBib29sIGNfaXNsb3dlciAoaW50IGMpIF9HTF9BVFRSSUJVVEVfQ09OU1Q7CitleHRlcm4gYm9vbCBjX2lzZ3JhcGggKGludCBjKSBfR0xfQVRUUklCVVRFX0NPTlNUOworZXh0ZXJuIGJvb2wgY19pc3ByaW50IChpbnQgYykgX0dMX0FUVFJJQlVURV9DT05TVDsKK2V4dGVybiBib29sIGNfaXNwdW5jdCAoaW50IGMpIF9HTF9BVFRSSUJVVEVfQ09OU1Q7CitleHRlcm4gYm9vbCBjX2lzc3BhY2UgKGludCBjKSBfR0xfQVRUUklCVVRFX0NPTlNUOworZXh0ZXJuIGJvb2wgY19pc3VwcGVyIChpbnQgYykgX0dMX0FUVFJJQlVURV9DT05TVDsKK2V4dGVybiBib29sIGNfaXN4ZGlnaXQgKGludCBjKSBfR0xfQVRUUklCVVRFX0NPTlNUOworCitleHRlcm4gaW50IGNfdG9sb3dlciAoaW50IGMpIF9HTF9BVFRSSUJVVEVfQ09OU1Q7CitleHRlcm4gaW50IGNfdG91cHBlciAoaW50IGMpIF9HTF9BVFRSSUJVVEVfQ09OU1Q7CisKKworI2lmIGRlZmluZWQgX19HTlVDX18gJiYgZGVmaW5lZCBfX09QVElNSVpFX18gJiYgIWRlZmluZWQgX19PUFRJTUlaRV9TSVpFX18gJiYgIWRlZmluZWQgTk9fQ19DVFlQRV9NQUNST1MKKworLyogQVNDSUkgb3B0aW1pemF0aW9ucy4gKi8KKworI3VuZGVmIGNfaXNhc2NpaQorI2RlZmluZSBjX2lzYXNjaWkoYykgXAorICAoeyBpbnQgX19jID0gKGMpOyBcCisgICAgIChfX2MgPj0gMHgwMCAmJiBfX2MgPD0gMHg3Zik7IFwKKyAgIH0pCisKKyNpZiBDX0NUWVBFX0NPTlNFQ1VUSVZFX0RJR0lUUyBcCisgICAgJiYgQ19DVFlQRV9DT05TRUNVVElWRV9VUFBFUkNBU0UgJiYgQ19DVFlQRV9DT05TRUNVVElWRV9MT1dFUkNBU0UKKyNpZiBDX0NUWVBFX0FTQ0lJCisjdW5kZWYgY19pc2FsbnVtCisjZGVmaW5lIGNfaXNhbG51bShjKSBcCisgICh7IGludCBfX2MgPSAoYyk7IFwKKyAgICAgKChfX2MgPj0gJzAnICYmIF9fYyA8PSAnOScpIFwKKyAgICAgIHx8ICgoX19jICYgfjB4MjApID49ICdBJyAmJiAoX19jICYgfjB4MjApIDw9ICdaJykpOyBcCisgICB9KQorI2Vsc2UKKyN1bmRlZiBjX2lzYWxudW0KKyNkZWZpbmUgY19pc2FsbnVtKGMpIFwKKyAgKHsgaW50IF9fYyA9IChjKTsgXAorICAgICAoKF9fYyA+PSAnMCcgJiYgX19jIDw9ICc5JykgXAorICAgICAgfHwgKF9fYyA+PSAnQScgJiYgX19jIDw9ICdaJykgXAorICAgICAgfHwgKF9fYyA+PSAnYScgJiYgX19jIDw9ICd6JykpOyBcCisgICB9KQorI2VuZGlmCisjZW5kaWYKKworI2lmIENfQ1RZUEVfQ09OU0VDVVRJVkVfVVBQRVJDQVNFICYmIENfQ1RZUEVfQ09OU0VDVVRJVkVfTE9XRVJDQVNFCisjaWYgQ19DVFlQRV9BU0NJSQorI3VuZGVmIGNfaXNhbHBoYQorI2RlZmluZSBjX2lzYWxwaGEoYykgXAorICAoeyBpbnQgX19jID0gKGMpOyBcCisgICAgICgoX19jICYgfjB4MjApID49ICdBJyAmJiAoX19jICYgfjB4MjApIDw9ICdaJyk7IFwKKyAgIH0pCisjZWxzZQorI3VuZGVmIGNfaXNhbHBoYQorI2RlZmluZSBjX2lzYWxwaGEoYykgXAorICAoeyBpbnQgX19jID0gKGMpOyBcCisgICAgICgoX19jID49ICdBJyAmJiBfX2MgPD0gJ1onKSB8fCAoX19jID49ICdhJyAmJiBfX2MgPD0gJ3onKSk7IFwKKyAgIH0pCisjZW5kaWYKKyNlbmRpZgorCisjdW5kZWYgY19pc2JsYW5rCisjZGVmaW5lIGNfaXNibGFuayhjKSBcCisgICh7IGludCBfX2MgPSAoYyk7IFwKKyAgICAgKF9fYyA9PSAnICcgfHwgX19jID09ICdcdCcpOyBcCisgICB9KQorCisjaWYgQ19DVFlQRV9BU0NJSQorI3VuZGVmIGNfaXNjbnRybAorI2RlZmluZSBjX2lzY250cmwoYykgXAorICAoeyBpbnQgX19jID0gKGMpOyBcCisgICAgICgoX19jICYgfjB4MWYpID09IDAgfHwgX19jID09IDB4N2YpOyBcCisgICB9KQorI2VuZGlmCisKKyNpZiBDX0NUWVBFX0NPTlNFQ1VUSVZFX0RJR0lUUworI3VuZGVmIGNfaXNkaWdpdAorI2RlZmluZSBjX2lzZGlnaXQoYykgXAorICAoeyBpbnQgX19jID0gKGMpOyBcCisgICAgIChfX2MgPj0gJzAnICYmIF9fYyA8PSAnOScpOyBcCisgICB9KQorI2VuZGlmCisKKyNpZiBDX0NUWVBFX0NPTlNFQ1VUSVZFX0xPV0VSQ0FTRQorI3VuZGVmIGNfaXNsb3dlcgorI2RlZmluZSBjX2lzbG93ZXIoYykgXAorICAoeyBpbnQgX19jID0gKGMpOyBcCisgICAgIChfX2MgPj0gJ2EnICYmIF9fYyA8PSAneicpOyBcCisgICB9KQorI2VuZGlmCisKKyNpZiBDX0NUWVBFX0FTQ0lJCisjdW5kZWYgY19pc2dyYXBoCisjZGVmaW5lIGNfaXNncmFwaChjKSBcCisgICh7IGludCBfX2MgPSAoYyk7IFwKKyAgICAgKF9fYyA+PSAnIScgJiYgX19jIDw9ICd+Jyk7IFwKKyAgIH0pCisjZW5kaWYKKworI2lmIENfQ1RZUEVfQVNDSUkKKyN1bmRlZiBjX2lzcHJpbnQKKyNkZWZpbmUgY19pc3ByaW50KGMpIFwKKyAgKHsgaW50IF9fYyA9IChjKTsgXAorICAgICAoX19jID49ICcgJyAmJiBfX2MgPD0gJ34nKTsgXAorICAgfSkKKyNlbmRpZgorCisjaWYgQ19DVFlQRV9BU0NJSQorI3VuZGVmIGNfaXNwdW5jdAorI2RlZmluZSBjX2lzcHVuY3QoYykgXAorICAoeyBpbnQgX2MgPSAoYyk7IFwKKyAgICAgKGNfaXNncmFwaCAoX2MpICYmICEgY19pc2FsbnVtIChfYykpOyBcCisgICB9KQorI2VuZGlmCisKKyN1bmRlZiBjX2lzc3BhY2UKKyNkZWZpbmUgY19pc3NwYWNlKGMpIFwKKyAgKHsgaW50IF9fYyA9IChjKTsgXAorICAgICAoX19jID09ICcgJyB8fCBfX2MgPT0gJ1x0JyBcCisgICAgICB8fCBfX2MgPT0gJ1xuJyB8fCBfX2MgPT0gJ1x2JyB8fCBfX2MgPT0gJ1xmJyB8fCBfX2MgPT0gJ1xyJyk7IFwKKyAgIH0pCisKKyNpZiBDX0NUWVBFX0NPTlNFQ1VUSVZFX1VQUEVSQ0FTRQorI3VuZGVmIGNfaXN1cHBlcgorI2RlZmluZSBjX2lzdXBwZXIoYykgXAorICAoeyBpbnQgX19jID0gKGMpOyBcCisgICAgIChfX2MgPj0gJ0EnICYmIF9fYyA8PSAnWicpOyBcCisgICB9KQorI2VuZGlmCisKKyNpZiBDX0NUWVBFX0NPTlNFQ1VUSVZFX0RJR0lUUyBcCisgICAgJiYgQ19DVFlQRV9DT05TRUNVVElWRV9VUFBFUkNBU0UgJiYgQ19DVFlQRV9DT05TRUNVVElWRV9MT1dFUkNBU0UKKyNpZiBDX0NUWVBFX0FTQ0lJCisjdW5kZWYgY19pc3hkaWdpdAorI2RlZmluZSBjX2lzeGRpZ2l0KGMpIFwKKyAgKHsgaW50IF9fYyA9IChjKTsgXAorICAgICAoKF9fYyA+PSAnMCcgJiYgX19jIDw9ICc5JykgXAorICAgICAgfHwgKChfX2MgJiB+MHgyMCkgPj0gJ0EnICYmIChfX2MgJiB+MHgyMCkgPD0gJ0YnKSk7IFwKKyAgIH0pCisjZWxzZQorI3VuZGVmIGNfaXN4ZGlnaXQKKyNkZWZpbmUgY19pc3hkaWdpdChjKSBcCisgICh7IGludCBfX2MgPSAoYyk7IFwKKyAgICAgKChfX2MgPj0gJzAnICYmIF9fYyA8PSAnOScpIFwKKyAgICAgIHx8IChfX2MgPj0gJ0EnICYmIF9fYyA8PSAnRicpIFwKKyAgICAgIHx8IChfX2MgPj0gJ2EnICYmIF9fYyA8PSAnZicpKTsgXAorICAgfSkKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBDX0NUWVBFX0NPTlNFQ1VUSVZFX1VQUEVSQ0FTRSAmJiBDX0NUWVBFX0NPTlNFQ1VUSVZFX0xPV0VSQ0FTRQorI3VuZGVmIGNfdG9sb3dlcgorI2RlZmluZSBjX3RvbG93ZXIoYykgXAorICAoeyBpbnQgX19jID0gKGMpOyBcCisgICAgIChfX2MgPj0gJ0EnICYmIF9fYyA8PSAnWicgPyBfX2MgLSAnQScgKyAnYScgOiBfX2MpOyBcCisgICB9KQorI3VuZGVmIGNfdG91cHBlcgorI2RlZmluZSBjX3RvdXBwZXIoYykgXAorICAoeyBpbnQgX19jID0gKGMpOyBcCisgICAgIChfX2MgPj0gJ2EnICYmIF9fYyA8PSAneicgPyBfX2MgLSAnYScgKyAnQScgOiBfX2MpOyBcCisgICB9KQorI2VuZGlmCisKKyNlbmRpZiAvKiBvcHRpbWl6aW5nIGZvciBzcGVlZCAqLworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBDX0NUWVBFX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9jLXN0cmNhc2UuaCBiL2xpYi9jLXN0cmNhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGVmMjM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2Mtc3RyY2FzZS5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qIENhc2UtaW5zZW5zaXRpdmUgc3RyaW5nIGNvbXBhcmlzb24gZnVuY3Rpb25zIGluIEMgbG9jYWxlLgorICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTYsIDIwMDEsIDIwMDMsIDIwMDUsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBDX1NUUkNBU0VfSAorI2RlZmluZSBDX1NUUkNBU0VfSAorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKworLyogVGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoaXMgZmlsZSBhc3N1bWUgdGhlICJDIiBsb2NhbGUgYW5kIGEgY2hhcmFjdGVyCisgICBzZXQgd2l0aG91dCBkaWFjcml0aWNzIChBU0NJSS1VUyBvciBFQkNESUMtVVMgb3Igc29tZXRoaW5nIGxpa2UgdGhhdCkuCisgICBFdmVuIGlmIHRoZSAiQyIgbG9jYWxlIG9uIGEgcGFydGljdWxhciBzeXN0ZW0gaXMgYW4gZXh0ZW5zaW9uIG9mIHRoZSBBU0NJSQorICAgY2hhcmFjdGVyIHNldCAobGlrZSBvbiBCZU9TLCB3aGVyZSBpdCBpcyBVVEYtOCwgb3Igb24gQW1pZ2FPUywgd2hlcmUgaXQKKyAgIGlzIElTTy04ODU5LTEpLCB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSByZWNvZ25pemUgb25seSB0aGUgQVNDSUkKKyAgIGNoYXJhY3RlcnMuICBNb3JlIHByZWNpc2VseSwgb25lIG9mIHRoZSBzdHJpbmcgYXJndW1lbnRzIG11c3QgYmUgYW4gQVNDSUkKKyAgIHN0cmluZzsgdGhlIG90aGVyIG9uZSBjYW4gYWxzbyBjb250YWluIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIChidXQgdGhlbgorICAgdGhlIGNvbXBhcmlzb24gcmVzdWx0IHdpbGwgYmUgbm9uemVybykuICAqLworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCisvKiBDb21wYXJlIHN0cmluZ3MgUzEgYW5kIFMyLCBpZ25vcmluZyBjYXNlLCByZXR1cm5pbmcgbGVzcyB0aGFuLCBlcXVhbCB0byBvcgorICAgZ3JlYXRlciB0aGFuIHplcm8gaWYgUzEgaXMgbGV4aWNvZ3JhcGhpY2FsbHkgbGVzcyB0aGFuLCBlcXVhbCB0byBvciBncmVhdGVyCisgICB0aGFuIFMyLiAgKi8KK2V4dGVybiBpbnQgY19zdHJjYXNlY21wIChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpIF9HTF9BVFRSSUJVVEVfUFVSRTsKKworLyogQ29tcGFyZSBubyBtb3JlIHRoYW4gTiBjaGFyYWN0ZXJzIG9mIHN0cmluZ3MgUzEgYW5kIFMyLCBpZ25vcmluZyBjYXNlLAorICAgcmV0dXJuaW5nIGxlc3MgdGhhbiwgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIHplcm8gaWYgUzEgaXMKKyAgIGxleGljb2dyYXBoaWNhbGx5IGxlc3MgdGhhbiwgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIFMyLiAgKi8KK2V4dGVybiBpbnQgY19zdHJuY2FzZWNtcCAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3QgbikKKyAgX0dMX0FUVFJJQlVURV9QVVJFOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKworI2VuZGlmIC8qIENfU1RSQ0FTRV9IICovCmRpZmYgLS1naXQgYS9saWIvYy1zdHJjYXNlY21wLmMgYi9saWIvYy1zdHJjYXNlY21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgzMzJjYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jLXN0cmNhc2VjbXAuYwpAQCAtMCwwICsxLDU2IEBACisvKiBjLXN0cmNhc2VjbXAuYyAtLSBjYXNlIGluc2Vuc2l0aXZlIHN0cmluZyBjb21wYXJhdG9yIGluIEMgbG9jYWxlCisgICBDb3B5cmlnaHQgKEMpIDE5OTgtMTk5OSwgMjAwNS0yMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlICJjLXN0cmNhc2UuaCIKKworI2luY2x1ZGUgPGxpbWl0cy5oPgorCisjaW5jbHVkZSAiYy1jdHlwZS5oIgorCitpbnQKK2Nfc3RyY2FzZWNtcCAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQoreworICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwMSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIHMxOworICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwMiA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIHMyOworICB1bnNpZ25lZCBjaGFyIGMxLCBjMjsKKworICBpZiAocDEgPT0gcDIpCisgICAgcmV0dXJuIDA7CisKKyAgZG8KKyAgICB7CisgICAgICBjMSA9IGNfdG9sb3dlciAoKnAxKTsKKyAgICAgIGMyID0gY190b2xvd2VyICgqcDIpOworCisgICAgICBpZiAoYzEgPT0gJ1wwJykKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICsrcDE7CisgICAgICArK3AyOworICAgIH0KKyAgd2hpbGUgKGMxID09IGMyKTsKKworICBpZiAoVUNIQVJfTUFYIDw9IElOVF9NQVgpCisgICAgcmV0dXJuIGMxIC0gYzI7CisgIGVsc2UKKyAgICAvKiBPbiBtYWNoaW5lcyB3aGVyZSAnY2hhcicgYW5kICdpbnQnIGFyZSB0eXBlcyBvZiB0aGUgc2FtZSBzaXplLCB0aGUKKyAgICAgICBkaWZmZXJlbmNlIG9mIHR3byAndW5zaWduZWQgY2hhcicgdmFsdWVzIC0gaW5jbHVkaW5nIHRoZSBzaWduIGJpdCAtCisgICAgICAgZG9lc24ndCBmaXQgaW4gYW4gJ2ludCcuICAqLworICAgIHJldHVybiAoYzEgPiBjMiA/IDEgOiBjMSA8IGMyID8gLTEgOiAwKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9jLXN0cmNhc2VlcS5oIGIvbGliL2Mtc3RyY2FzZWVxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM0YmRmZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jLXN0cmNhc2VlcS5oCkBAIC0wLDAgKzEsMTg0IEBACisvKiBPcHRpbWl6ZWQgY2FzZS1pbnNlbnNpdGl2ZSBzdHJpbmcgY29tcGFyaXNvbiBpbiBDIGxvY2FsZS4KKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCAyMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LiAgKi8KKworI2luY2x1ZGUgImMtc3RyY2FzZS5oIgorI2luY2x1ZGUgImMtY3R5cGUuaCIKKworLyogU1RSQ0FTRUVRIGFsbG93cyB0byBvcHRpbWl6ZSBzdHJpbmcgY29tcGFyaXNvbiB3aXRoIGEgc21hbGwgbGl0ZXJhbCBzdHJpbmcuCisgICAgIFNUUkNBU0VFUSAocywgIlVURi04IiwgJ1UnLCdUJywnRicsJy0nLCc4JywwLDAsMCwwKQorICAgaXMgc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQgdG8KKyAgICAgY19zdHJjYXNlY21wIChzLCAiVVRGLTgiKSA9PSAwCisgICBqdXN0IGZhc3Rlci4gICovCisKKy8qIEhlbHAgR0NDIHRvIGdlbmVyYXRlIGdvb2QgY29kZSBmb3Igc3RyaW5nIGNvbXBhcmlzb25zIHdpdGgKKyAgIGltbWVkaWF0ZSBzdHJpbmdzLiAqLworI2lmIGRlZmluZWQgKF9fR05VQ19fKSAmJiBkZWZpbmVkIChfX09QVElNSVpFX18pCisKKy8qIENhc2UgaW5zZW5zaXRpdmUgY29tcGFyaXNvbiBvZiBBU0NJSSBjaGFyYWN0ZXJzLiAgKi8KKyMgaWYgQ19DVFlQRV9BU0NJSQorIyAgZGVmaW5lIENBU0VFUShvdGhlcix1cHBlcikgXAorICAgICAoY19pc3VwcGVyICh1cHBlcikgPyAoKG90aGVyKSAmIH4weDIwKSA9PSAodXBwZXIpIDogKG90aGVyKSA9PSAodXBwZXIpKQorIyBlbGlmIENfQ1RZUEVfQ09OU0VDVVRJVkVfVVBQRVJDQVNFICYmIENfQ1RZUEVfQ09OU0VDVVRJVkVfTE9XRVJDQVNFCisjICBkZWZpbmUgQ0FTRUVRKG90aGVyLHVwcGVyKSBcCisgICAgIChjX2lzdXBwZXIgKHVwcGVyKSA/IChvdGhlcikgPT0gKHVwcGVyKSB8fCAob3RoZXIpID09ICh1cHBlcikgLSAnQScgKyAnYScgOiAob3RoZXIpID09ICh1cHBlcikpCisjIGVsc2UKKyMgIGRlZmluZSBDQVNFRVEob3RoZXIsdXBwZXIpIFwKKyAgICAgKGNfdG91cHBlciAob3RoZXIpID09ICh1cHBlcikpCisjIGVuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50CitzdHJjYXNlZXE5IChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpCit7CisgIHJldHVybiBjX3N0cmNhc2VjbXAgKHMxICsgOSwgczIgKyA5KSA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorc3RyY2FzZWVxOCAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBjaGFyIHMyOCkKK3sKKyAgaWYgKENBU0VFUSAoczFbOF0sIHMyOCkpCisgICAgeworICAgICAgaWYgKHMyOCA9PSAwKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHN0cmNhc2VlcTkgKHMxLCBzMik7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitzdHJjYXNlZXE3IChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIGNoYXIgczI3LCBjaGFyIHMyOCkKK3sKKyAgaWYgKENBU0VFUSAoczFbN10sIHMyNykpCisgICAgeworICAgICAgaWYgKHMyNyA9PSAwKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHN0cmNhc2VlcTggKHMxLCBzMiwgczI4KTsKKyAgICB9CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3N0cmNhc2VlcTYgKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgY2hhciBzMjYsIGNoYXIgczI3LCBjaGFyIHMyOCkKK3sKKyAgaWYgKENBU0VFUSAoczFbNl0sIHMyNikpCisgICAgeworICAgICAgaWYgKHMyNiA9PSAwKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHN0cmNhc2VlcTcgKHMxLCBzMiwgczI3LCBzMjgpOworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorc3RyY2FzZWVxNSAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBjaGFyIHMyNSwgY2hhciBzMjYsIGNoYXIgczI3LCBjaGFyIHMyOCkKK3sKKyAgaWYgKENBU0VFUSAoczFbNV0sIHMyNSkpCisgICAgeworICAgICAgaWYgKHMyNSA9PSAwKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHN0cmNhc2VlcTYgKHMxLCBzMiwgczI2LCBzMjcsIHMyOCk7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitzdHJjYXNlZXE0IChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIGNoYXIgczI0LCBjaGFyIHMyNSwgY2hhciBzMjYsIGNoYXIgczI3LCBjaGFyIHMyOCkKK3sKKyAgaWYgKENBU0VFUSAoczFbNF0sIHMyNCkpCisgICAgeworICAgICAgaWYgKHMyNCA9PSAwKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHN0cmNhc2VlcTUgKHMxLCBzMiwgczI1LCBzMjYsIHMyNywgczI4KTsKKyAgICB9CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3N0cmNhc2VlcTMgKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgY2hhciBzMjMsIGNoYXIgczI0LCBjaGFyIHMyNSwgY2hhciBzMjYsIGNoYXIgczI3LCBjaGFyIHMyOCkKK3sKKyAgaWYgKENBU0VFUSAoczFbM10sIHMyMykpCisgICAgeworICAgICAgaWYgKHMyMyA9PSAwKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHN0cmNhc2VlcTQgKHMxLCBzMiwgczI0LCBzMjUsIHMyNiwgczI3LCBzMjgpOworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorc3RyY2FzZWVxMiAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBjaGFyIHMyMiwgY2hhciBzMjMsIGNoYXIgczI0LCBjaGFyIHMyNSwgY2hhciBzMjYsIGNoYXIgczI3LCBjaGFyIHMyOCkKK3sKKyAgaWYgKENBU0VFUSAoczFbMl0sIHMyMikpCisgICAgeworICAgICAgaWYgKHMyMiA9PSAwKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHN0cmNhc2VlcTMgKHMxLCBzMiwgczIzLCBzMjQsIHMyNSwgczI2LCBzMjcsIHMyOCk7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitzdHJjYXNlZXExIChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIGNoYXIgczIxLCBjaGFyIHMyMiwgY2hhciBzMjMsIGNoYXIgczI0LCBjaGFyIHMyNSwgY2hhciBzMjYsIGNoYXIgczI3LCBjaGFyIHMyOCkKK3sKKyAgaWYgKENBU0VFUSAoczFbMV0sIHMyMSkpCisgICAgeworICAgICAgaWYgKHMyMSA9PSAwKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHN0cmNhc2VlcTIgKHMxLCBzMiwgczIyLCBzMjMsIHMyNCwgczI1LCBzMjYsIHMyNywgczI4KTsKKyAgICB9CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3N0cmNhc2VlcTAgKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgY2hhciBzMjAsIGNoYXIgczIxLCBjaGFyIHMyMiwgY2hhciBzMjMsIGNoYXIgczI0LCBjaGFyIHMyNSwgY2hhciBzMjYsIGNoYXIgczI3LCBjaGFyIHMyOCkKK3sKKyAgaWYgKENBU0VFUSAoczFbMF0sIHMyMCkpCisgICAgeworICAgICAgaWYgKHMyMCA9PSAwKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHN0cmNhc2VlcTEgKHMxLCBzMiwgczIxLCBzMjIsIHMyMywgczI0LCBzMjUsIHMyNiwgczI3LCBzMjgpOworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCisjZGVmaW5lIFNUUkNBU0VFUShzMSxzMixzMjAsczIxLHMyMixzMjMsczI0LHMyNSxzMjYsczI3LHMyOCkgXAorICBzdHJjYXNlZXEwIChzMSwgczIsIHMyMCwgczIxLCBzMjIsIHMyMywgczI0LCBzMjUsIHMyNiwgczI3LCBzMjgpCisKKyNlbHNlCisKKyNkZWZpbmUgU1RSQ0FTRUVRKHMxLHMyLHMyMCxzMjEsczIyLHMyMyxzMjQsczI1LHMyNixzMjcsczI4KSBcCisgIChjX3N0cmNhc2VjbXAgKHMxLCBzMikgPT0gMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvYy1zdHJuY2FzZWNtcC5jIGIvbGliL2Mtc3RybmNhc2VjbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2ZiNWZkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2Mtc3RybmNhc2VjbXAuYwpAQCAtMCwwICsxLDU2IEBACisvKiBjLXN0cm5jYXNlY21wLmMgLS0gY2FzZSBpbnNlbnNpdGl2ZSBzdHJpbmcgY29tcGFyYXRvciBpbiBDIGxvY2FsZQorICAgQ29weXJpZ2h0IChDKSAxOTk4LTE5OTksIDIwMDUtMjAwNiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaW5jbHVkZSAiYy1zdHJjYXNlLmgiCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2luY2x1ZGUgImMtY3R5cGUuaCIKKworaW50CitjX3N0cm5jYXNlY21wIChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIHNpemVfdCBuKQoreworICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwMSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIHMxOworICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwMiA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIHMyOworICB1bnNpZ25lZCBjaGFyIGMxLCBjMjsKKworICBpZiAocDEgPT0gcDIgfHwgbiA9PSAwKQorICAgIHJldHVybiAwOworCisgIGRvCisgICAgeworICAgICAgYzEgPSBjX3RvbG93ZXIgKCpwMSk7CisgICAgICBjMiA9IGNfdG9sb3dlciAoKnAyKTsKKworICAgICAgaWYgKC0tbiA9PSAwIHx8IGMxID09ICdcMCcpCisgICAgICAgIGJyZWFrOworCisgICAgICArK3AxOworICAgICAgKytwMjsKKyAgICB9CisgIHdoaWxlIChjMSA9PSBjMik7CisKKyAgaWYgKFVDSEFSX01BWCA8PSBJTlRfTUFYKQorICAgIHJldHVybiBjMSAtIGMyOworICBlbHNlCisgICAgLyogT24gbWFjaGluZXMgd2hlcmUgJ2NoYXInIGFuZCAnaW50JyBhcmUgdHlwZXMgb2YgdGhlIHNhbWUgc2l6ZSwgdGhlCisgICAgICAgZGlmZmVyZW5jZSBvZiB0d28gJ3Vuc2lnbmVkIGNoYXInIHZhbHVlcyAtIGluY2x1ZGluZyB0aGUgc2lnbiBiaXQgLQorICAgICAgIGRvZXNuJ3QgZml0IGluIGFuICdpbnQnLiAgKi8KKyAgICByZXR1cm4gKGMxID4gYzIgPyAxIDogYzEgPCBjMiA/IC0xIDogMCk7Cit9CmRpZmYgLS1naXQgYS9saWIvY2FsbG9jLmMgYi9saWIvY2FsbG9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNkYTE0ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jYWxsb2MuYwpAQCAtMCwwICsxLDczIEBACisvKiBjYWxsb2MoKSBmdW5jdGlvbiB0aGF0IGlzIGdsaWJjIGNvbXBhdGlibGUuCisgICBUaGlzIHdyYXBwZXIgZnVuY3Rpb24gaXMgcmVxdWlyZWQgYXQgbGVhc3Qgb24gVHJ1NjQgVU5JWCA1LjEgYW5kIG1pbmd3LgorICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogd3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcgYW5kIEJydW5vIEhhaWJsZSAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBPbmx5IHRoZSBBQ19GVU5DX0NBTExPQyBtYWNybyBkZWZpbmVzICdjYWxsb2MnIGFscmVhZHkgaW4gY29uZmlnLmguICAqLworI2lmZGVmIGNhbGxvYworIyBkZWZpbmUgTkVFRF9DQUxMT0NfR05VIDEKKyMgdW5kZWYgY2FsbG9jCisvKiBXaGVyZWFzIHRoZSBnbnVsaWIgbW9kdWxlICdjYWxsb2MtZ251JyBkZWZpbmVzIEhBVkVfQ0FMTE9DX0dOVS4gICovCisjZWxpZiBHTlVMSUJfQ0FMTE9DX0dOVSAmJiAhSEFWRV9DQUxMT0NfR05VCisjIGRlZmluZSBORUVEX0NBTExPQ19HTlUgMQorI2VuZGlmCisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKworLyogQ2FsbCB0aGUgc3lzdGVtJ3MgY2FsbG9jIGJlbG93LiAgKi8KKyN1bmRlZiBjYWxsb2MKKworLyogQWxsb2NhdGUgYW5kIHplcm8tZmlsbCBhbiBOeFMtYnl0ZSBibG9jayBvZiBtZW1vcnkgZnJvbSB0aGUgaGVhcC4KKyAgIElmIE4gb3IgUyBpcyB6ZXJvLCBhbGxvY2F0ZSBhbmQgemVyby1maWxsIGEgMS1ieXRlIGJsb2NrLiAgKi8KKwordm9pZCAqCitycGxfY2FsbG9jIChzaXplX3Qgbiwgc2l6ZV90IHMpCit7CisgIHZvaWQgKnJlc3VsdDsKKworI2lmIE5FRURfQ0FMTE9DX0dOVQorICBpZiAobiA9PSAwIHx8IHMgPT0gMCkKKyAgICB7CisgICAgICBuID0gMTsKKyAgICAgIHMgPSAxOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIERlZmVuZCBhZ2FpbnN0IGJ1Z2d5IGNhbGxvYyBpbXBsZW1lbnRhdGlvbnMgdGhhdCBtaXNoYW5kbGUKKyAgICAgICAgIHNpemVfdCBvdmVyZmxvdy4gICovCisgICAgICBzaXplX3QgYnl0ZXMgPSBuICogczsKKyAgICAgIGlmIChieXRlcyAvIHMgIT0gbikKKyAgICAgICAgeworICAgICAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgcmVzdWx0ID0gY2FsbG9jIChuLCBzKTsKKworI2lmICFIQVZFX0NBTExPQ19QT1NJWAorICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgZXJybm8gPSBFTk9NRU07CisjZW5kaWYKKworICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvbGliL2Nsb2V4ZWMuYyBiL2xpYi9jbG9leGVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkxOWU4NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jbG9leGVjLmMKQEAgLTAsMCArMSw4MyBAQAorLyogY2xvc2V4ZWMuYyAtIHNldCBvciBjbGVhciB0aGUgY2xvc2Utb24tZXhlYyBkZXNjcmlwdG9yIGZsYWcKKworICAgQ29weXJpZ2h0IChDKSAxOTkxLCAyMDA0LTIwMDYsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisgICBUaGUgY29kZSBpcyB0YWtlbiBmcm9tIGdsaWJjL21hbnVhbC9sbGlvLnRleGkgICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgImNsb2V4ZWMuaCIKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworLyogU2V0IHRoZSAnRkRfQ0xPRVhFQycgZmxhZyBvZiBERVNDIGlmIFZBTFVFIGlzIHRydWUsCisgICBvciBjbGVhciB0aGUgZmxhZyBpZiBWQUxVRSBpcyBmYWxzZS4KKyAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG9yIC0xIG9uIGVycm9yIHdpdGggJ2Vycm5vJyBzZXQuCisKKyAgIE5vdGUgdGhhdCBvbiBNaW5nVywgdGhpcyBmdW5jdGlvbiBkb2VzIE5PVCBwcm90ZWN0IERFU0MgZnJvbSBiZWluZworICAgaW5oZXJpdGVkIGludG8gc3Bhd25lZCBjaGlsZHJlbi4gIEluc3RlYWQsIGVpdGhlciB1c2UgZHVwX2Nsb2V4ZWMKKyAgIGZvbGxvd2VkIGJ5IGNsb3NpbmcgdGhlIG9yaWdpbmFsIERFU0MsIG9yIHVzZSBpbnRlcmZhY2VzIHN1Y2ggYXMKKyAgIG9wZW4gb3IgcGlwZTIgdGhhdCBhY2NlcHQgZmxhZ3MgbGlrZSBPX0NMT0VYRUMgdG8gY3JlYXRlIERFU0MKKyAgIG5vbi1pbmhlcml0YWJsZSBpbiB0aGUgZmlyc3QgcGxhY2UuICAqLworCitpbnQKK3NldF9jbG9leGVjX2ZsYWcgKGludCBkZXNjLCBib29sIHZhbHVlKQoreworI2lmZGVmIEZfU0VURkQKKworICBpbnQgZmxhZ3MgPSBmY250bCAoZGVzYywgRl9HRVRGRCwgMCk7CisKKyAgaWYgKDAgPD0gZmxhZ3MpCisgICAgeworICAgICAgaW50IG5ld2ZsYWdzID0gKHZhbHVlID8gZmxhZ3MgfCBGRF9DTE9FWEVDIDogZmxhZ3MgJiB+RkRfQ0xPRVhFQyk7CisKKyAgICAgIGlmIChmbGFncyA9PSBuZXdmbGFncworICAgICAgICAgIHx8IGZjbnRsIChkZXNjLCBGX1NFVEZELCBuZXdmbGFncykgIT0gLTEpCisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICByZXR1cm4gLTE7CisKKyNlbHNlIC8qICFGX1NFVEZEICovCisKKyAgLyogVXNlIGR1cDIgdG8gcmVqZWN0IGludmFsaWQgZmlsZSBkZXNjcmlwdG9yczsgdGhlIGNsb2V4ZWMgZmxhZworICAgICB3aWxsIGJlIHVuYWZmZWN0ZWQuICAqLworICBpZiAoZGVzYyA8IDApCisgICAgeworICAgICAgZXJybm8gPSBFQkFERjsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIGlmIChkdXAyIChkZXNjLCBkZXNjKSA8IDApCisgICAgLyogZXJybm8gaXMgRUJBREYgaGVyZS4gICovCisgICAgcmV0dXJuIC0xOworCisgIC8qIFRoZXJlIGlzIG5vdGhpbmcgd2UgY2FuIGRvIG9uIHRoaXMga2luZCBvZiBwbGF0Zm9ybS4gIFB1bnQuICAqLworICByZXR1cm4gMDsKKyNlbmRpZiAvKiAhRl9TRVRGRCAqLworfQorCisKKy8qIER1cGxpY2F0ZXMgYSBmaWxlIGhhbmRsZSBGRCwgd2hpbGUgbWFya2luZyB0aGUgY29weSB0byBiZSBjbG9zZWQKKyAgIHByaW9yIHRvIGV4ZWMgb3Igc3Bhd24uICBSZXR1cm5zIC0xIGFuZCBzZXRzIGVycm5vIGlmIEZEIGNvdWxkIG5vdAorICAgYmUgZHVwbGljYXRlZC4gICovCisKK2ludAorZHVwX2Nsb2V4ZWMgKGludCBmZCkKK3sKKyAgcmV0dXJuIGZjbnRsIChmZCwgRl9EVVBGRF9DTE9FWEVDLCAwKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9jbG9leGVjLmggYi9saWIvY2xvZXhlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZTlmODEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY2xvZXhlYy5oCkBAIC0wLDAgKzEsMzggQEAKKy8qIGNsb3NleGVjLmMgLSBzZXQgb3IgY2xlYXIgdGhlIGNsb3NlLW9uLWV4ZWMgZGVzY3JpcHRvciBmbGFnCisKKyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyovCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisKKy8qIFNldCB0aGUgJ0ZEX0NMT0VYRUMnIGZsYWcgb2YgREVTQyBpZiBWQUxVRSBpcyB0cnVlLAorICAgb3IgY2xlYXIgdGhlIGZsYWcgaWYgVkFMVUUgaXMgZmFsc2UuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBvciAtMSBvbiBlcnJvciB3aXRoICdlcnJubycgc2V0LgorCisgICBOb3RlIHRoYXQgb24gTWluZ1csIHRoaXMgZnVuY3Rpb24gZG9lcyBOT1QgcHJvdGVjdCBERVNDIGZyb20gYmVpbmcKKyAgIGluaGVyaXRlZCBpbnRvIHNwYXduZWQgY2hpbGRyZW4uICBJbnN0ZWFkLCBlaXRoZXIgdXNlIGR1cF9jbG9leGVjCisgICBmb2xsb3dlZCBieSBjbG9zaW5nIHRoZSBvcmlnaW5hbCBERVNDLCBvciB1c2UgaW50ZXJmYWNlcyBzdWNoIGFzCisgICBvcGVuIG9yIHBpcGUyIHRoYXQgYWNjZXB0IGZsYWdzIGxpa2UgT19DTE9FWEVDIHRvIGNyZWF0ZSBERVNDCisgICBub24taW5oZXJpdGFibGUgaW4gdGhlIGZpcnN0IHBsYWNlLiAgKi8KKworaW50IHNldF9jbG9leGVjX2ZsYWcgKGludCBkZXNjLCBib29sIHZhbHVlKTsKKworLyogRHVwbGljYXRlcyBhIGZpbGUgaGFuZGxlIEZELCB3aGlsZSBtYXJraW5nIHRoZSBjb3B5IHRvIGJlIGNsb3NlZAorICAgcHJpb3IgdG8gZXhlYyBvciBzcGF3bi4gIFJldHVybnMgLTEgYW5kIHNldHMgZXJybm8gaWYgRkQgY291bGQgbm90CisgICBiZSBkdXBsaWNhdGVkLiAgKi8KKworaW50IGR1cF9jbG9leGVjIChpbnQgZmQpOwpkaWZmIC0tZ2l0IGEvbGliL2Nsb3NlLXN0cmVhbS5jIGIvbGliL2Nsb3NlLXN0cmVhbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZmE1ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY2xvc2Utc3RyZWFtLmMKQEAgLTAsMCArMSw3OCBAQAorLyogQ2xvc2UgYSBzdHJlYW0sIHdpdGggbmljZXIgZXJyb3IgY2hlY2tpbmcgdGhhbiBmY2xvc2Uncy4KKworICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDIsIDIwMDQsIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSAiY2xvc2Utc3RyZWFtLmgiCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKworI2luY2x1ZGUgImZwZW5kaW5nLmgiCisKKyNpZiBVU0VfVU5MT0NLRURfSU8KKyMgaW5jbHVkZSAidW5sb2NrZWQtaW8uaCIKKyNlbmRpZgorCisvKiBDbG9zZSBTVFJFQU0uICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBFT0YgKHNldHRpbmcgZXJybm8pCisgICBvdGhlcndpc2UuICBBIGZhaWx1cmUgbWlnaHQgc2V0IGVycm5vIHRvIDAgaWYgdGhlIGVycm9yIG51bWJlcgorICAgY2Fubm90IGJlIGRldGVybWluZWQuCisKKyAgIEEgZmFpbHVyZSB3aXRoIGVycm5vIHNldCB0byBFUElQRSBtYXkgb3IgbWF5IG5vdCBpbmRpY2F0ZSBhbiBlcnJvcgorICAgc2l0dWF0aW9uIHdvcnRoIHNpZ25hbGluZyB0byB0aGUgdXNlci4gIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUKKyAgIGNsb3NlX3N0ZG91dF9zZXRfaWdub3JlX0VQSVBFIGZ1bmN0aW9uIGZvciBkZXRhaWxzLgorCisgICBJZiBhIHByb2dyYW0gd3JpdGVzICphbnl0aGluZyogdG8gU1RSRUFNLCB0aGF0IHByb2dyYW0gc2hvdWxkIGNsb3NlCisgICBTVFJFQU0gYW5kIG1ha2Ugc3VyZSB0aGF0IGl0IHN1Y2NlZWRzIGJlZm9yZSBleGl0aW5nLiAgT3RoZXJ3aXNlLAorICAgc3VwcG9zZSB0aGF0IHlvdSBnbyB0byB0aGUgZXh0cmVtZSBvZiBjaGVja2luZyB0aGUgcmV0dXJuIHN0YXR1cworICAgb2YgZXZlcnkgZnVuY3Rpb24gdGhhdCBkb2VzIGFuIGV4cGxpY2l0IHdyaXRlIHRvIFNUUkVBTS4gIFRoZSBsYXN0CisgICBwcmludGYgY2FuIHN1Y2NlZWQgaW4gd3JpdGluZyB0byB0aGUgaW50ZXJuYWwgc3RyZWFtIGJ1ZmZlciwgYW5kIHlldAorICAgdGhlIGZjbG9zZShTVFJFQU0pIGNvdWxkIHN0aWxsIGZhaWwgKGR1ZSBlLmcuLCB0byBhIGRpc2sgZnVsbCBlcnJvcikKKyAgIHdoZW4gaXQgdHJpZXMgdG8gd3JpdGUgb3V0IHRoYXQgYnVmZmVyZWQgZGF0YS4gIFRodXMsIHlvdSB3b3VsZCBiZQorICAgbGVmdCB3aXRoIGFuIGluY29tcGxldGUgb3V0cHV0IGZpbGUgYW5kIHRoZSBvZmZlbmRpbmcgcHJvZ3JhbSB3b3VsZAorICAgZXhpdCBzdWNjZXNzZnVsbHkuICBFdmVuIGNhbGxpbmcgZmZsdXNoIGlzIG5vdCBhbHdheXMgc3VmZmljaWVudCwKKyAgIHNpbmNlIHNvbWUgZmlsZSBzeXN0ZW1zIChORlMgYW5kIENPREEpIGJ1ZmZlciB3cml0dGVuL2ZsdXNoZWQgZGF0YQorICAgdW50aWwgYW4gYWN0dWFsIGNsb3NlIGNhbGwuCisKKyAgIEJlc2lkZXMsIGl0J3Mgd2FzdGVmdWwgdG8gY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGV2ZXJ5IGNhbGwKKyAgIHRoYXQgd3JpdGVzIHRvIFNUUkVBTSAtLSBqdXN0IGxldCB0aGUgaW50ZXJuYWwgc3RyZWFtIHN0YXRlIHJlY29yZAorICAgdGhlIGZhaWx1cmUuICBUaGF0J3Mgd2hhdCB0aGUgZmVycm9yIHRlc3QgaXMgY2hlY2tpbmcgYmVsb3cuICAqLworCitpbnQKK2Nsb3NlX3N0cmVhbSAoRklMRSAqc3RyZWFtKQoreworICBjb25zdCBib29sIHNvbWVfcGVuZGluZyA9IChfX2ZwZW5kaW5nIChzdHJlYW0pICE9IDApOworICBjb25zdCBib29sIHByZXZfZmFpbCA9IChmZXJyb3IgKHN0cmVhbSkgIT0gMCk7CisgIGNvbnN0IGJvb2wgZmNsb3NlX2ZhaWwgPSAoZmNsb3NlIChzdHJlYW0pICE9IDApOworCisgIC8qIFJldHVybiBhbiBlcnJvciBpbmRpY2F0aW9uIGlmIHRoZXJlIHdhcyBhIHByZXZpb3VzIGZhaWx1cmUgb3IgaWYKKyAgICAgZmNsb3NlIGZhaWxlZCwgd2l0aCBvbmUgZXhjZXB0aW9uOiBpZ25vcmUgYW4gZmNsb3NlIGZhaWx1cmUgaWYKKyAgICAgdGhlcmUgd2FzIG5vIHByZXZpb3VzIGVycm9yLCBubyBkYXRhIHJlbWFpbnMgdG8gYmUgZmx1c2hlZCwgYW5kCisgICAgIGZjbG9zZSBmYWlsZWQgd2l0aCBFQkFERi4gIFRoYXQgY2FuIGhhcHBlbiB3aGVuIGEgcHJvZ3JhbSBsaWtlIGNwCisgICAgIGlzIGludm9rZWQgbGlrZSB0aGlzICdjcCBhIGIgPiYtJyAoaS5lLiwgd2l0aCBzdGFuZGFyZCBvdXRwdXQKKyAgICAgY2xvc2VkKSBhbmQgZG9lc24ndCBnZW5lcmF0ZSBhbnkgb3V0cHV0IChoZW5jZSBubyBwcmV2aW91cyBlcnJvcgorICAgICBhbmQgbm90aGluZyB0byBiZSBmbHVzaGVkKS4gICovCisKKyAgaWYgKHByZXZfZmFpbCB8fCAoZmNsb3NlX2ZhaWwgJiYgKHNvbWVfcGVuZGluZyB8fCBlcnJubyAhPSBFQkFERikpKQorICAgIHsKKyAgICAgIGlmICghIGZjbG9zZV9mYWlsKQorICAgICAgICBlcnJubyA9IDA7CisgICAgICByZXR1cm4gRU9GOworICAgIH0KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYi9jbG9zZS1zdHJlYW0uaCBiL2xpYi9jbG9zZS1zdHJlYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTNkNDE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2Nsb3NlLXN0cmVhbS5oCkBAIC0wLDAgKzEsMiBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgY2xvc2Vfc3RyZWFtIChGSUxFICpzdHJlYW0pOwpkaWZmIC0tZ2l0IGEvbGliL2Nsb3NlLmMgYi9saWIvY2xvc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjdhY2NiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2Nsb3NlLmMKQEAgLTAsMCArMSw2OSBAQAorLyogY2xvc2UgcmVwbGFjZW1lbnQuCisgICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJmZC1ob29rLmgiCisjaW5jbHVkZSAibXN2Yy1pbnZhbC5oIgorCisjdW5kZWYgY2xvc2UKKworI2lmIEhBVkVfTVNWQ19JTlZBTElEX1BBUkFNRVRFUl9IQU5ETEVSCitzdGF0aWMgaW50CitjbG9zZV9ub3Rocm93IChpbnQgZmQpCit7CisgIGludCByZXN1bHQ7CisKKyAgVFJZX01TVkNfSU5WQUwKKyAgICB7CisgICAgICByZXN1bHQgPSBjbG9zZSAoZmQpOworICAgIH0KKyAgQ0FUQ0hfTVNWQ19JTlZBTAorICAgIHsKKyAgICAgIHJlc3VsdCA9IC0xOworICAgICAgZXJybm8gPSBFQkFERjsKKyAgICB9CisgIERPTkVfTVNWQ19JTlZBTDsKKworICByZXR1cm4gcmVzdWx0OworfQorI2Vsc2UKKyMgZGVmaW5lIGNsb3NlX25vdGhyb3cgY2xvc2UKKyNlbmRpZgorCisvKiBPdmVycmlkZSBjbG9zZSgpIHRvIGNhbGwgaW50byBvdGhlciBnbnVsaWIgbW9kdWxlcy4gICovCisKK2ludAorcnBsX2Nsb3NlIChpbnQgZmQpCit7CisjaWYgV0lORE9XU19TT0NLRVRTCisgIGludCByZXR2YWwgPSBleGVjdXRlX2FsbF9jbG9zZV9ob29rcyAoY2xvc2Vfbm90aHJvdywgZmQpOworI2Vsc2UKKyAgaW50IHJldHZhbCA9IGNsb3NlX25vdGhyb3cgKGZkKTsKKyNlbmRpZgorCisjaWYgUkVQTEFDRV9GQ0hESVIKKyAgaWYgKHJldHZhbCA+PSAwKQorICAgIF9nbF91bnJlZ2lzdGVyX2ZkIChmZCk7CisjZW5kaWYKKworICByZXR1cm4gcmV0dmFsOworfQpkaWZmIC0tZ2l0IGEvbGliL2Nsb3Nlb3V0LmMgYi9saWIvY2xvc2VvdXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWE0MDI0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2Nsb3Nlb3V0LmMKQEAgLTAsMCArMSwxMjQgQEAKKy8qIENsb3NlIHN0YW5kYXJkIG91dHB1dCBhbmQgc3RhbmRhcmQgZXJyb3IsIGV4aXRpbmcgd2l0aCBhIGRpYWdub3N0aWMgb24gZXJyb3IuCisKKyAgIENvcHlyaWdodCAoQykgMTk5OC0yMDAyLCAyMDA0LCAyMDA2LCAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlICJjbG9zZW91dC5oIgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImdldHRleHQuaCIKKyNkZWZpbmUgXyhtc2dpZCkgZ2V0dGV4dCAobXNnaWQpCisKKyNpbmNsdWRlICJjbG9zZS1zdHJlYW0uaCIKKyNpbmNsdWRlICJlcnJvci5oIgorI2luY2x1ZGUgImV4aXRmYWlsLmgiCisjaW5jbHVkZSAicXVvdGVhcmcuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKmZpbGVfbmFtZTsKKworLyogU2V0IHRoZSBmaWxlIG5hbWUgdG8gYmUgcmVwb3J0ZWQgaW4gdGhlIGV2ZW50IGFuIGVycm9yIGlzIGRldGVjdGVkCisgICBieSBjbG9zZV9zdGRvdXQuICAqLwordm9pZAorY2xvc2Vfc3Rkb3V0X3NldF9maWxlX25hbWUgKGNvbnN0IGNoYXIgKmZpbGUpCit7CisgIGZpbGVfbmFtZSA9IGZpbGU7Cit9CisKK3N0YXRpYyBib29sIGlnbm9yZV9FUElQRSAvKiA9IGZhbHNlICovOworCisvKiBTcGVjaWZ5IHRoZSByZWFjdGlvbiB0byBhbiBFUElQRSBlcnJvciBkdXJpbmcgdGhlIGNsb3Npbmcgb2Ygc3Rkb3V0OgorICAgICAtIElmIGlnbm9yZSA9IHRydWUsIGl0IHNoYWxsIGJlIGlnbm9yZWQuCisgICAgIC0gSWYgaWdub3JlID0gZmFsc2UsIGl0IHNoYWxsIGV2b2tlIGEgZGlhZ25vc3RpYywgYWxvbmcgd2l0aCBhIG5vbnplcm8KKyAgICAgICBleGl0IHN0YXR1cy4KKyAgIFRoZSBkZWZhdWx0IGlzIGlnbm9yZSA9IGZhbHNlLgorCisgICBUaGlzIHNldHRpbmcgbWF0dGVycyBvbmx5IGlmIHRoZSBTSUdQSVBFIHNpZ25hbCBpcyBpZ25vcmVkIChpLmUuIGl0cworICAgaGFuZGxlciBzZXQgdG8gU0lHX0lHTikgb3IgYmxvY2tlZC4gIE9ubHkgcGFydGljdWxhciBwcm9ncmFtcyBuZWVkIHRvCisgICB0ZW1wb3JhcmlseSBpZ25vcmUgU0lHUElQRS4gIElmIFNJR1BJUEUgaXMgaWdub3JlZCBvciBibG9ja2VkIGJlY2F1c2UKKyAgIGl0IHdhcyBpZ25vcmVkIG9yIGJsb2NrZWQgaW4gdGhlIHBhcmVudCBwcm9jZXNzIHdoZW4gaXQgY3JlYXRlZCB0aGUKKyAgIGNoaWxkIHByb2Nlc3MsIGl0IHVzdWFsbHkgaXMgYSBidWcgaW4gdGhlIHBhcmVudCBwcm9jZXNzOiBJdCBpcyBiYWQKKyAgIHByYWN0aWNlIHRvIGhhdmUgU0lHUElQRSBpZ25vcmVkIG9yIGJsb2NrZWQgd2hpbGUgY3JlYXRpbmcgYSBjaGlsZAorICAgcHJvY2Vzcy4KKworICAgRVBJUEUgb2NjdXJzIHdoZW4gd3JpdGluZyB0byBhIHBpcGUgb3Igc29ja2V0IHRoYXQgaGFzIG5vIHJlYWRlcnMgbm93LAorICAgd2hlbiBTSUdQSVBFIGlzIGlnbm9yZWQgb3IgYmxvY2tlZC4KKworICAgVGhlIGlnbm9yZSA9IGZhbHNlIHNldHRpbmcgaXMgc3VpdGFibGUgZm9yIGEgc2NlbmFyaW8gd2hlcmUgaXQgaXMgbm9ybWFsbHkKKyAgIGd1YXJhbnRlZWQgdGhhdCB0aGUgcGlwZSB3cml0ZXIgdGVybWluYXRlcyBiZWZvcmUgdGhlIHBpcGUgcmVhZGVyLiAgSW4KKyAgIHRoaXMgY2FzZSwgYW4gRVBJUEUgaXMgYW4gaW5kaWNhdGlvbiBvZiBhIHByZW1hdHVyZSB0ZXJtaW5hdGlvbiBvZiB0aGUKKyAgIHBpcGUgcmVhZGVyIGFuZCBzaG91bGQgbGVhZCB0byBhIGRpYWdub3N0aWMgYW5kIGEgbm9uemVybyBleGl0IHN0YXR1cy4KKworICAgVGhlIGlnbm9yZSA9IHRydWUgc2V0dGluZyBpcyBzdWl0YWJsZSBmb3IgYSBzY2VuYXJpbyB3aGVyZSB5b3UgZG9uJ3Qga25vdworICAgYWhlYWQgb2YgdGltZSB3aGV0aGVyIHRoZSBwaXBlIHdyaXRlciBvciB0aGUgcGlwZSByZWFkZXIgd2lsbCB0ZXJtaW5hdGUKKyAgIGZpcnN0LiAgSW4gdGhpcyBjYXNlLCBhbiBFUElQRSBpcyBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlIHBpcGUgd3JpdGVyIGNhbgorICAgc3RvcCBkb2luZyB1c2VsZXNzIHdyaXRlKCkgY2FsbHM7IHRoaXMgaXMgd2hhdCBjbG9zZV9zdGRvdXQgZG9lcyBhbnl3YXkuCisgICBFUElQRSBpcyBwYXJ0IG9mIHRoZSBub3JtYWwgcGlwZS9zb2NrZXQgc2h1dGRvd24gcHJvdG9jb2wgaW4gdGhpcyBjYXNlLAorICAgYW5kIHNob3VsZCBub3QgbGVhZCB0byBhIGRpYWdub3N0aWMgbWVzc2FnZS4gICovCisKK3ZvaWQKK2Nsb3NlX3N0ZG91dF9zZXRfaWdub3JlX0VQSVBFIChib29sIGlnbm9yZSkKK3sKKyAgaWdub3JlX0VQSVBFID0gaWdub3JlOworfQorCisvKiBDbG9zZSBzdGFuZGFyZCBvdXRwdXQuICBPbiBlcnJvciwgaXNzdWUgYSBkaWFnbm9zdGljIGFuZCBfZXhpdAorICAgd2l0aCBzdGF0dXMgJ2V4aXRfZmFpbHVyZScuCisKKyAgIEFsc28gY2xvc2Ugc3RhbmRhcmQgZXJyb3IuICBPbiBlcnJvciwgX2V4aXQgd2l0aCBzdGF0dXMgJ2V4aXRfZmFpbHVyZScuCisKKyAgIFNpbmNlIGNsb3NlX3N0ZG91dCBpcyBjb21tb25seSByZWdpc3RlcmVkIHZpYSAnYXRleGl0JywgUE9TSVgKKyAgIGFuZCB0aGUgQyBzdGFuZGFyZCBib3RoIHNheSB0aGF0IGl0IHNob3VsZCBub3QgY2FsbCAnZXhpdCcsCisgICBiZWNhdXNlIHRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQgaWYgJ2V4aXQnIGlzIGNhbGxlZCBtb3JlIHRoYW4KKyAgIG9uY2UuICBTbyBpdCBjYWxscyAnX2V4aXQnIGluc3RlYWQgb2YgJ2V4aXQnLiAgSWYgY2xvc2Vfc3Rkb3V0CisgICBpcyByZWdpc3RlcmVkIHZpYSBhdGV4aXQgYmVmb3JlIG90aGVyIGZ1bmN0aW9ucyBhcmUgcmVnaXN0ZXJlZCwKKyAgIHRoZSBvdGhlciBmdW5jdGlvbnMgY2FuIGFjdCBiZWZvcmUgdGhpcyBfZXhpdCBpcyBpbnZva2VkLgorCisgICBBcHBsaWNhdGlvbnMgdGhhdCB1c2UgY2xvc2Vfc3Rkb3V0IHNob3VsZCBmbHVzaCBhbnkgc3RyZWFtcworICAgb3RoZXIgdGhhbiBzdGRvdXQgYW5kIHN0ZGVyciBiZWZvcmUgZXhpdGluZywgc2luY2UgdGhlIGNhbGwgdG8KKyAgIF9leGl0IHdpbGwgYnlwYXNzIG90aGVyIGJ1ZmZlciBmbHVzaGluZy4gIEFwcGxpY2F0aW9ucyBzaG91bGQKKyAgIGJlIGZsdXNoaW5nIGFuZCBjbG9zaW5nIG90aGVyIHN0cmVhbXMgYW55d2F5LCB0byBjaGVjayBmb3IgSS9PCisgICBlcnJvcnMuICBBbHNvLCBhcHBsaWNhdGlvbnMgc2hvdWxkIG5vdCB1c2UgdG1wZmlsZSwgc2luY2UgX2V4aXQKKyAgIGNhbiBieXBhc3MgdGhlIHJlbW92YWwgb2YgdGhlc2UgZmlsZXMuCisKKyAgIEl0J3MgaW1wb3J0YW50IHRvIGRldGVjdCBzdWNoIGZhaWx1cmVzIGFuZCBleGl0IG5vbnplcm8gYmVjYXVzZSBtYW55CisgICB0b29scyAobW9zdCBub3RhYmx5ICdtYWtlJyBhbmQgb3RoZXIgYnVpbGQtbWFuYWdlbWVudCBzeXN0ZW1zKSBkZXBlbmQKKyAgIG9uIGJlaW5nIGFibGUgdG8gZGV0ZWN0IGZhaWx1cmUgaW4gb3RoZXIgdG9vbHMgdmlhIHRoZWlyIGV4aXQgc3RhdHVzLiAgKi8KKwordm9pZAorY2xvc2Vfc3Rkb3V0ICh2b2lkKQoreworICBpZiAoY2xvc2Vfc3RyZWFtIChzdGRvdXQpICE9IDAKKyAgICAgICYmICEoaWdub3JlX0VQSVBFICYmIGVycm5vID09IEVQSVBFKSkKKyAgICB7CisgICAgICBjaGFyIGNvbnN0ICp3cml0ZV9lcnJvciA9IF8oIndyaXRlIGVycm9yIik7CisgICAgICBpZiAoZmlsZV9uYW1lKQorICAgICAgICBlcnJvciAoMCwgZXJybm8sICIlczogJXMiLCBxdW90ZWFyZ19jb2xvbiAoZmlsZV9uYW1lKSwKKyAgICAgICAgICAgICAgIHdyaXRlX2Vycm9yKTsKKyAgICAgIGVsc2UKKyAgICAgICAgZXJyb3IgKDAsIGVycm5vLCAiJXMiLCB3cml0ZV9lcnJvcik7CisKKyAgICAgIF9leGl0IChleGl0X2ZhaWx1cmUpOworICAgIH0KKworICAgaWYgKGNsb3NlX3N0cmVhbSAoc3RkZXJyKSAhPSAwKQorICAgICBfZXhpdCAoZXhpdF9mYWlsdXJlKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9jbG9zZW91dC5oIGIvbGliL2Nsb3Nlb3V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMxMGIyOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jbG9zZW91dC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qIENsb3NlIHN0YW5kYXJkIG91dHB1dCBhbmQgc3RhbmRhcmQgZXJyb3IuCisKKyAgIENvcHlyaWdodCAoQykgMTk5OCwgMjAwMCwgMjAwMy0yMDA0LCAyMDA2LCAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIENMT1NFT1VUX0gKKyMgZGVmaW5lIENMT1NFT1VUX0ggMQorCisjIGluY2x1ZGUgPHN0ZGJvb2wuaD4KKworIyBpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjIGVuZGlmCisKK3ZvaWQgY2xvc2Vfc3Rkb3V0X3NldF9maWxlX25hbWUgKGNvbnN0IGNoYXIgKmZpbGUpOwordm9pZCBjbG9zZV9zdGRvdXRfc2V0X2lnbm9yZV9FUElQRSAoYm9vbCBpZ25vcmUpOwordm9pZCBjbG9zZV9zdGRvdXQgKHZvaWQpOworCisjIGlmZGVmIF9fY3BsdXNwbHVzCit9CisjIGVuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2NvbmZpZy5jaGFyc2V0IGIvbGliL2NvbmZpZy5jaGFyc2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhM2IzNDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY29uZmlnLmNoYXJzZXQKQEAgLTAsMCArMSw2ODQgQEAKKyMhIC9iaW4vc2gKKyMgT3V0cHV0IGEgc3lzdGVtIGRlcGVuZGVudCB0YWJsZSBvZiBjaGFyYWN0ZXIgZW5jb2RpbmcgYWxpYXNlcy4KKyMKKyMgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCwgMjAwNi0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisjICAgYW55IGxhdGVyIHZlcnNpb24uCisjCisjICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisjCisjIFRoZSB0YWJsZSBjb25zaXN0cyBvZiBsaW5lcyBvZiB0aGUgZm9ybQorIyAgICBBTElBUyAgQ0FOT05JQ0FMCisjCisjIEFMSUFTIGlzIHRoZSAoc3lzdGVtIGRlcGVuZGVudCkgcmVzdWx0IG9mICJubF9sYW5naW5mbyAoQ09ERVNFVCkiLgorIyBBTElBUyBpcyBjb21wYXJlZCBpbiBhIGNhc2Ugc2Vuc2l0aXZlIHdheS4KKyMKKyMgQ0FOT05JQ0FMIGlzIHRoZSBHTlUgY2Fub25pY2FsIG5hbWUgZm9yIHRoaXMgY2hhcmFjdGVyIGVuY29kaW5nLgorIyBJdCBtdXN0IGJlIGFuIGVuY29kaW5nIHN1cHBvcnRlZCBieSBsaWJpY29udi4gU3VwcG9ydCBieSBHTlUgbGliYyBpcworIyBhbHNvIGRlc2lyYWJsZS4gQ0FOT05JQ0FMIGlzIGNhc2UgaW5zZW5zaXRpdmUuIFVzdWFsbHkgYW4gdXBwZXIgY2FzZQorIyBNSU1FIGNoYXJzZXQgbmFtZSBpcyBwcmVmZXJyZWQuCisjIFRoZSBjdXJyZW50IGxpc3Qgb2YgR05VIGNhbm9uaWNhbCBjaGFyc2V0IG5hbWVzIGlzIGFzIGZvbGxvd3MuCisjCisjICAgICAgIG5hbWUgICAgICAgICAgICAgIE1JTUU/ICAgICAgICAgICAgIHVzZWQgYnkgd2hpY2ggc3lzdGVtcworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXJ3aW4gPSBNYWMgT1MgWCwgd29lMzIgPSBuYXRpdmUgV2luZG93cykKKyMKKyMgICBBU0NJSSwgQU5TSV9YMy40LTE5NjggICAgICAgZ2xpYmMgc29sYXJpcyBmcmVlYnNkIG5ldGJzZCBkYXJ3aW4gY3lnd2luCisjICAgSVNPLTg4NTktMSAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBuZXRic2Qgb3BlbmJzZCBkYXJ3aW4gY3lnd2luCisjICAgSVNPLTg4NTktMiAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBuZXRic2Qgb3BlbmJzZCBkYXJ3aW4gY3lnd2luCisjICAgSVNPLTg4NTktMyAgICAgICAgICAgICAgWSAgIGdsaWJjIHNvbGFyaXMgY3lnd2luCisjICAgSVNPLTg4NTktNCAgICAgICAgICAgICAgWSAgIG9zZiBzb2xhcmlzIGZyZWVic2QgbmV0YnNkIG9wZW5ic2QgZGFyd2luCisjICAgSVNPLTg4NTktNSAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBuZXRic2Qgb3BlbmJzZCBkYXJ3aW4gY3lnd2luCisjICAgSVNPLTg4NTktNiAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IHNvbGFyaXMgY3lnd2luCisjICAgSVNPLTg4NTktNyAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgbmV0YnNkIG9wZW5ic2QgZGFyd2luIGN5Z3dpbgorIyAgIElTTy04ODU5LTggICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBvc2Ygc29sYXJpcyBjeWd3aW4KKyMgICBJU08tODg1OS05ICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcyBkYXJ3aW4gY3lnd2luCisjICAgSVNPLTg4NTktMTMgICAgICAgICAgICAgICAgIGdsaWJjIG5ldGJzZCBvcGVuYnNkIGRhcndpbiBjeWd3aW4KKyMgICBJU08tODg1OS0xNCAgICAgICAgICAgICAgICAgZ2xpYmMgY3lnd2luCisjICAgSVNPLTg4NTktMTUgICAgICAgICAgICAgICAgIGdsaWJjIGFpeCBvc2Ygc29sYXJpcyBmcmVlYnNkIG5ldGJzZCBvcGVuYnNkIGRhcndpbiBjeWd3aW4KKyMgICBLT0k4LVIgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgc29sYXJpcyBmcmVlYnNkIG5ldGJzZCBvcGVuYnNkIGRhcndpbgorIyAgIEtPSTgtVSAgICAgICAgICAgICAgICAgIFkgICBnbGliYyBmcmVlYnNkIG5ldGJzZCBvcGVuYnNkIGRhcndpbiBjeWd3aW4KKyMgICBLT0k4LVQgICAgICAgICAgICAgICAgICAgICAgZ2xpYmMKKyMgICBDUDQzNyAgICAgICAgICAgICAgICAgICAgICAgZG9zCisjICAgQ1A3NzUgICAgICAgICAgICAgICAgICAgICAgIGRvcworIyAgIENQODUwICAgICAgICAgICAgICAgICAgICAgICBhaXggb3NmIGRvcworIyAgIENQODUyICAgICAgICAgICAgICAgICAgICAgICBkb3MKKyMgICBDUDg1NSAgICAgICAgICAgICAgICAgICAgICAgZG9zCisjICAgQ1A4NTYgICAgICAgICAgICAgICAgICAgICAgIGFpeAorIyAgIENQODU3ICAgICAgICAgICAgICAgICAgICAgICBkb3MKKyMgICBDUDg2MSAgICAgICAgICAgICAgICAgICAgICAgZG9zCisjICAgQ1A4NjIgICAgICAgICAgICAgICAgICAgICAgIGRvcworIyAgIENQODY0ICAgICAgICAgICAgICAgICAgICAgICBkb3MKKyMgICBDUDg2NSAgICAgICAgICAgICAgICAgICAgICAgZG9zCisjICAgQ1A4NjYgICAgICAgICAgICAgICAgICAgICAgIGZyZWVic2QgbmV0YnNkIG9wZW5ic2QgZGFyd2luIGRvcworIyAgIENQODY5ICAgICAgICAgICAgICAgICAgICAgICBkb3MKKyMgICBDUDg3NCAgICAgICAgICAgICAgICAgICAgICAgd29lMzIgZG9zCisjICAgQ1A5MjIgICAgICAgICAgICAgICAgICAgICAgIGFpeAorIyAgIENQOTMyICAgICAgICAgICAgICAgICAgICAgICBhaXggY3lnd2luIHdvZTMyIGRvcworIyAgIENQOTQzICAgICAgICAgICAgICAgICAgICAgICBhaXgKKyMgICBDUDk0OSAgICAgICAgICAgICAgICAgICAgICAgb3NmIGRhcndpbiB3b2UzMiBkb3MKKyMgICBDUDk1MCAgICAgICAgICAgICAgICAgICAgICAgd29lMzIgZG9zCisjICAgQ1AxMDQ2ICAgICAgICAgICAgICAgICAgICAgIGFpeAorIyAgIENQMTEyNCAgICAgICAgICAgICAgICAgICAgICBhaXgKKyMgICBDUDExMjUgICAgICAgICAgICAgICAgICAgICAgZG9zCisjICAgQ1AxMTI5ICAgICAgICAgICAgICAgICAgICAgIGFpeAorIyAgIENQMTEzMSAgICAgICAgICAgICAgICAgICAgICBkYXJ3aW4KKyMgICBDUDEyNTAgICAgICAgICAgICAgICAgICAgICAgd29lMzIKKyMgICBDUDEyNTEgICAgICAgICAgICAgICAgICAgICAgZ2xpYmMgc29sYXJpcyBuZXRic2Qgb3BlbmJzZCBkYXJ3aW4gY3lnd2luIHdvZTMyCisjICAgQ1AxMjUyICAgICAgICAgICAgICAgICAgICAgIGFpeCB3b2UzMgorIyAgIENQMTI1MyAgICAgICAgICAgICAgICAgICAgICB3b2UzMgorIyAgIENQMTI1NCAgICAgICAgICAgICAgICAgICAgICB3b2UzMgorIyAgIENQMTI1NSAgICAgICAgICAgICAgICAgICAgICBnbGliYyB3b2UzMgorIyAgIENQMTI1NiAgICAgICAgICAgICAgICAgICAgICB3b2UzMgorIyAgIENQMTI1NyAgICAgICAgICAgICAgICAgICAgICB3b2UzMgorIyAgIEdCMjMxMiAgICAgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IHNvbGFyaXMgZnJlZWJzZCBuZXRic2QgZGFyd2luCisjICAgRVVDLUpQICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBuZXRic2QgZGFyd2luCisjICAgRVVDLUtSICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBuZXRic2QgZGFyd2luIGN5Z3dpbgorIyAgIEVVQy1UVyAgICAgICAgICAgICAgICAgICAgICBnbGliYyBhaXggaHB1eCBpcml4IG9zZiBzb2xhcmlzIG5ldGJzZAorIyAgIEJJRzUgICAgICAgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBvc2Ygc29sYXJpcyBmcmVlYnNkIG5ldGJzZCBkYXJ3aW4gY3lnd2luCisjICAgQklHNS1IS1NDUyAgICAgICAgICAgICAgICAgIGdsaWJjIHNvbGFyaXMgZGFyd2luCisjICAgR0JLICAgICAgICAgICAgICAgICAgICAgICAgIGdsaWJjIGFpeCBvc2Ygc29sYXJpcyBkYXJ3aW4gY3lnd2luIHdvZTMyIGRvcworIyAgIEdCMTgwMzAgICAgICAgICAgICAgICAgICAgICBnbGliYyBzb2xhcmlzIG5ldGJzZCBkYXJ3aW4KKyMgICBTSElGVF9KSVMgICAgICAgICAgICAgICBZICAgaHB1eCBvc2Ygc29sYXJpcyBmcmVlYnNkIG5ldGJzZCBkYXJ3aW4KKyMgICBKT0hBQiAgICAgICAgICAgICAgICAgICAgICAgZ2xpYmMgc29sYXJpcyB3b2UzMgorIyAgIFRJUy02MjAgICAgICAgICAgICAgICAgICAgICBnbGliYyBhaXggaHB1eCBvc2Ygc29sYXJpcyBjeWd3aW4KKyMgICBWSVNDSUkgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMKKyMgICBUQ1ZONTcxMi0xICAgICAgICAgICAgICAgICAgZ2xpYmMKKyMgICBBUk1TQ0lJLTggICAgICAgICAgICAgICAgICAgZ2xpYmMgZGFyd2luCisjICAgR0VPUkdJQU4tUFMgICAgICAgICAgICAgICAgIGdsaWJjIGN5Z3dpbgorIyAgIFBUMTU0ICAgICAgICAgICAgICAgICAgICAgICBnbGliYworIyAgIEhQLVJPTUFOOCAgICAgICAgICAgICAgICAgICBocHV4CisjICAgSFAtQVJBQklDOCAgICAgICAgICAgICAgICAgIGhwdXgKKyMgICBIUC1HUkVFSzggICAgICAgICAgICAgICAgICAgaHB1eAorIyAgIEhQLUhFQlJFVzggICAgICAgICAgICAgICAgICBocHV4CisjICAgSFAtVFVSS0lTSDggICAgICAgICAgICAgICAgIGhwdXgKKyMgICBIUC1LQU5BOCAgICAgICAgICAgICAgICAgICAgaHB1eAorIyAgIERFQy1LQU5KSSAgICAgICAgICAgICAgICAgICBvc2YKKyMgICBERUMtSEFOWVUgICAgICAgICAgICAgICAgICAgb3NmCisjICAgVVRGLTggICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IG9zZiBzb2xhcmlzIG5ldGJzZCBkYXJ3aW4gY3lnd2luCisjCisjIE5vdGU6IE5hbWVzIHdoaWNoIGFyZSBub3QgbWFya2VkIGFzIGJlaW5nIGEgTUlNRSBuYW1lIHNob3VsZCBub3QgYmUgdXNlZCBpbgorIyBJbnRlcm5ldCBwcm90b2NvbHMgZm9yIGluZm9ybWF0aW9uIGludGVyY2hhbmdlIChtYWlsLCBuZXdzLCBldGMuKS4KKyMKKyMgTm90ZTogQVNDSUkgYW5kIEFOU0lfWDMuNC0xOTY4IGFyZSBzeW5vbnltb3VzIGNhbm9uaWNhbCBuYW1lcy4gQXBwbGljYXRpb25zCisjIG11c3QgdW5kZXJzdGFuZCBib3RoIG5hbWVzIGFuZCB0cmVhdCB0aGVtIGFzIGVxdWl2YWxlbnQuCisjCisjIFRoZSBmaXJzdCBhcmd1bWVudCBwYXNzZWQgdG8gdGhpcyBmaWxlIGlzIHRoZSBjYW5vbmljYWwgaG9zdCBzcGVjaWZpY2F0aW9uLAorIyAgICBDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTQorIyBvcgorIyAgICBDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU0KKworaG9zdD0iJDEiCitvcz1gZWNobyAiJGhvc3QiIHwgc2VkIC1lICdzL15bXi1dKi1bXi1dKi1cKC4qXCkkL1wxLydgCitlY2hvICIjIFRoaXMgZmlsZSBjb250YWlucyBhIHRhYmxlIG9mIGNoYXJhY3RlciBlbmNvZGluZyBhbGlhc2VzLCIKK2VjaG8gIiMgc3VpdGFibGUgZm9yIG9wZXJhdGluZyBzeXN0ZW0gJyR7b3N9Jy4iCitlY2hvICIjIEl0IHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbmZpZy5jaGFyc2V0LiIKKyMgTGlzdCBvZiByZWZlcmVuY2VzLCB1cGRhdGVkIGR1cmluZyBpbnN0YWxsYXRpb246CitlY2hvICIjIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTogIgorY2FzZSAiJG9zIiBpbgorICBsaW51eC1nbnVsaWJjMSopCisgICAgIyBMaW51eCBsaWJjNSBkb2Vzbid0IGhhdmUgbmxfbGFuZ2luZm8oQ09ERVNFVCk7IHRoZXJlZm9yZQorICAgICMgbG9jYWxjaGFyc2V0LmMgZmFsbHMgYmFjayB0byB1c2luZyB0aGUgZnVsbCBsb2NhbGUgbmFtZQorICAgICMgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorICAgIGVjaG8gIkMgQVNDSUkiCisgICAgZWNobyAiUE9TSVggQVNDSUkiCisgICAgZm9yIGwgaW4gYWYgYWZfWkEgY2EgY2FfRVMgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgXAorICAgICAgICAgICAgIGVuIGVuX0FVIGVuX0JXIGVuX0NBIGVuX0RLIGVuX0dCIGVuX0lFIGVuX05aIGVuX1VTIGVuX1pBIFwKKyAgICAgICAgICAgICBlbl9aVyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19ETyBlc19FQyBlc19FUyBlc19HVCBcCisgICAgICAgICAgICAgZXNfSE4gZXNfTVggZXNfUEEgZXNfUEUgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgXAorICAgICAgICAgICAgIGV0X0VFIGV1IGV1X0VTIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIFwKKyAgICAgICAgICAgICBmcl9MVSBnYSBnYV9JRSBnbCBnbF9FUyBpZCBpZF9JRCBpbiBpbl9JRCBpcyBpc19JUyBpdCBpdF9DSCBcCisgICAgICAgICAgICAgaXRfSVQga2wga2xfR0wgbmwgbmxfQkUgbmxfTkwgbm8gbm9fTk8gcHQgcHRfQlIgcHRfUFQgc3YgXAorICAgICAgICAgICAgIHN2X0ZJIHN2X1NFOyBkbworICAgICAgZWNobyAiJGwgSVNPLTg4NTktMSIKKyAgICAgIGVjaG8gIiRsLmlzby04ODU5LTEgSVNPLTg4NTktMSIKKyAgICAgIGVjaG8gIiRsLmlzby04ODU5LTE1IElTTy04ODU5LTE1IgorICAgICAgZWNobyAiJGwuaXNvLTg4NTktMTVAZXVybyBJU08tODg1OS0xNSIKKyAgICAgIGVjaG8gIiRsQGV1cm8gSVNPLTg4NTktMTUiCisgICAgICBlY2hvICIkbC5jcC00MzcgQ1A0MzciCisgICAgICBlY2hvICIkbC5jcC04NTAgQ1A4NTAiCisgICAgICBlY2hvICIkbC5jcC0xMjUyIENQMTI1MiIKKyAgICAgIGVjaG8gIiRsLmNwLTEyNTJAZXVybyBDUDEyNTIiCisgICAgICAjZWNobyAiJGwuYXRhcmktc3QgQVRBUkktU1QiICMgbm90IGEgY29tbW9ubHkgdXNlZCBlbmNvZGluZworICAgICAgZWNobyAiJGwudXRmLTggVVRGLTgiCisgICAgICBlY2hvICIkbC51dGYtOEBldXJvIFVURi04IgorICAgIGRvbmUKKyAgICBmb3IgbCBpbiBjcyBjc19DWiBociBocl9IUiBodSBodV9IVSBwbCBwbF9QTCBybyByb19STyBzayBza19TSyBzbCBcCisgICAgICAgICAgICAgc2xfU0kgc3Igc3JfQ1Mgc3JfWVU7IGRvCisgICAgICBlY2hvICIkbCBJU08tODg1OS0yIgorICAgICAgZWNobyAiJGwuaXNvLTg4NTktMiBJU08tODg1OS0yIgorICAgICAgZWNobyAiJGwuY3AtODUyIENQODUyIgorICAgICAgZWNobyAiJGwuY3AtMTI1MCBDUDEyNTAiCisgICAgICBlY2hvICIkbC51dGYtOCBVVEYtOCIKKyAgICBkb25lCisgICAgZm9yIGwgaW4gbWsgbWtfTUsgcnUgcnVfUlU7IGRvCisgICAgICBlY2hvICIkbCBJU08tODg1OS01IgorICAgICAgZWNobyAiJGwuaXNvLTg4NTktNSBJU08tODg1OS01IgorICAgICAgZWNobyAiJGwua29pOC1yIEtPSTgtUiIKKyAgICAgIGVjaG8gIiRsLmNwLTg2NiBDUDg2NiIKKyAgICAgIGVjaG8gIiRsLmNwLTEyNTEgQ1AxMjUxIgorICAgICAgZWNobyAiJGwudXRmLTggVVRGLTgiCisgICAgZG9uZQorICAgIGZvciBsIGluIGFyIGFyX1NBOyBkbworICAgICAgZWNobyAiJGwgSVNPLTg4NTktNiIKKyAgICAgIGVjaG8gIiRsLmlzby04ODU5LTYgSVNPLTg4NTktNiIKKyAgICAgIGVjaG8gIiRsLmNwLTg2NCBDUDg2NCIKKyAgICAgICNlY2hvICIkbC5jcC04NjggQ1A4NjgiICMgbm90IGEgY29tbW9ubHkgdXNlZCBlbmNvZGluZworICAgICAgZWNobyAiJGwuY3AtMTI1NiBDUDEyNTYiCisgICAgICBlY2hvICIkbC51dGYtOCBVVEYtOCIKKyAgICBkb25lCisgICAgZm9yIGwgaW4gZWwgZWxfR1IgZ3IgZ3JfR1I7IGRvCisgICAgICBlY2hvICIkbCBJU08tODg1OS03IgorICAgICAgZWNobyAiJGwuaXNvLTg4NTktNyBJU08tODg1OS03IgorICAgICAgZWNobyAiJGwuY3AtODY5IENQODY5IgorICAgICAgZWNobyAiJGwuY3AtMTI1MyBDUDEyNTMiCisgICAgICBlY2hvICIkbC5jcC0xMjUzQGV1cm8gQ1AxMjUzIgorICAgICAgZWNobyAiJGwudXRmLTggVVRGLTgiCisgICAgICBlY2hvICIkbC51dGYtOEBldXJvIFVURi04IgorICAgIGRvbmUKKyAgICBmb3IgbCBpbiBoZSBoZV9JTCBpdyBpd19JTDsgZG8KKyAgICAgIGVjaG8gIiRsIElTTy04ODU5LTgiCisgICAgICBlY2hvICIkbC5pc28tODg1OS04IElTTy04ODU5LTgiCisgICAgICBlY2hvICIkbC5jcC04NjIgQ1A4NjIiCisgICAgICBlY2hvICIkbC5jcC0xMjU1IENQMTI1NSIKKyAgICAgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorICAgIGRvbmUKKyAgICBmb3IgbCBpbiB0ciB0cl9UUjsgZG8KKyAgICAgIGVjaG8gIiRsIElTTy04ODU5LTkiCisgICAgICBlY2hvICIkbC5pc28tODg1OS05IElTTy04ODU5LTkiCisgICAgICBlY2hvICIkbC5jcC04NTcgQ1A4NTciCisgICAgICBlY2hvICIkbC5jcC0xMjU0IENQMTI1NCIKKyAgICAgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorICAgIGRvbmUKKyAgICBmb3IgbCBpbiBsdCBsdF9MVCBsdiBsdl9MVjsgZG8KKyAgICAgICNlY2hvICIkbCBCQUxUSUMiICMgbm90IGEgY29tbW9ubHkgdXNlZCBlbmNvZGluZywgd3JvbmcgZW5jb2RpbmcgbmFtZQorICAgICAgZWNobyAiJGwgSVNPLTg4NTktMTMiCisgICAgZG9uZQorICAgIGZvciBsIGluIHJ1X1VBIHVrIHVrX1VBOyBkbworICAgICAgZWNobyAiJGwgS09JOC1VIgorICAgIGRvbmUKKyAgICBmb3IgbCBpbiB6aCB6aF9DTjsgZG8KKyAgICAgICNlY2hvICIkbCBHQl8yMzEyLTgwIiAjIG5vdCBhIGNvbW1vbmx5IHVzZWQgZW5jb2RpbmcsIHdyb25nIGVuY29kaW5nIG5hbWUKKyAgICAgIGVjaG8gIiRsIEdCMjMxMiIKKyAgICBkb25lCisgICAgZm9yIGwgaW4gamEgamFfSlAgamFfSlAuRVVDOyBkbworICAgICAgZWNobyAiJGwgRVVDLUpQIgorICAgIGRvbmUKKyAgICBmb3IgbCBpbiBrbyBrb19LUjsgZG8KKyAgICAgIGVjaG8gIiRsIEVVQy1LUiIKKyAgICBkb25lCisgICAgZm9yIGwgaW4gdGggdGhfVEg7IGRvCisgICAgICBlY2hvICIkbCBUSVMtNjIwIgorICAgIGRvbmUKKyAgICBmb3IgbCBpbiBmYSBmYV9JUjsgZG8KKyAgICAgICNlY2hvICIkbCBJU0lSSS0zMzQyIiAjIGEgYnJva2VuIGVuY29kaW5nCisgICAgICBlY2hvICIkbC51dGYtOCBVVEYtOCIKKyAgICBkb25lCisgICAgOzsKKyAgbGludXgqIHwgKi1nbnUqKQorICAgICMgV2l0aCBnbGliYy0yLjEgb3IgbmV3ZXIsIHdlIGRvbid0IG5lZWQgYW55IGNhbm9uaWNhbGl6YXRpb24sCisgICAgIyBiZWNhdXNlIGdsaWJjIGhhcyBpY29udiBhbmQgYm90aCBnbGliYyBhbmQgbGliaWNvbnYgc3VwcG9ydCBhbGwKKyAgICAjIEdOVSBjYW5vbmljYWwgbmFtZXMgZGlyZWN0bHkuIFRoZXJlZm9yZSwgdGhlIE1ha2VmaWxlIGRvZXMgbm90CisgICAgIyBuZWVkIHRvIGluc3RhbGwgdGhlIGFsaWFzIGZpbGUgYXQgYWxsLgorICAgICMgVGhlIGZvbGxvd2luZyBhcHBsaWVzIG9ubHkgdG8gZ2xpYmMtMi4wLnggYW5kIG9sZGVyIGxpYmNzLgorICAgIGVjaG8gIklTT182NDYuSVJWOjE5ODMgQVNDSUkiCisgICAgOzsKKyAgYWl4KikKKyAgICBlY2hvICJJU084ODU5LTEgSVNPLTg4NTktMSIKKyAgICBlY2hvICJJU084ODU5LTIgSVNPLTg4NTktMiIKKyAgICBlY2hvICJJU084ODU5LTUgSVNPLTg4NTktNSIKKyAgICBlY2hvICJJU084ODU5LTYgSVNPLTg4NTktNiIKKyAgICBlY2hvICJJU084ODU5LTcgSVNPLTg4NTktNyIKKyAgICBlY2hvICJJU084ODU5LTggSVNPLTg4NTktOCIKKyAgICBlY2hvICJJU084ODU5LTkgSVNPLTg4NTktOSIKKyAgICBlY2hvICJJU084ODU5LTE1IElTTy04ODU5LTE1IgorICAgIGVjaG8gIklCTS04NTAgQ1A4NTAiCisgICAgZWNobyAiSUJNLTg1NiBDUDg1NiIKKyAgICBlY2hvICJJQk0tOTIxIElTTy04ODU5LTEzIgorICAgIGVjaG8gIklCTS05MjIgQ1A5MjIiCisgICAgZWNobyAiSUJNLTkzMiBDUDkzMiIKKyAgICBlY2hvICJJQk0tOTQzIENQOTQzIgorICAgIGVjaG8gIklCTS0xMDQ2IENQMTA0NiIKKyAgICBlY2hvICJJQk0tMTEyNCBDUDExMjQiCisgICAgZWNobyAiSUJNLTExMjkgQ1AxMTI5IgorICAgIGVjaG8gIklCTS0xMjUyIENQMTI1MiIKKyAgICBlY2hvICJJQk0tZXVjQ04gR0IyMzEyIgorICAgIGVjaG8gIklCTS1ldWNKUCBFVUMtSlAiCisgICAgZWNobyAiSUJNLWV1Y0tSIEVVQy1LUiIKKyAgICBlY2hvICJJQk0tZXVjVFcgRVVDLVRXIgorICAgIGVjaG8gImJpZzUgQklHNSIKKyAgICBlY2hvICJHQksgR0JLIgorICAgIGVjaG8gIlRJUy02MjAgVElTLTYyMCIKKyAgICBlY2hvICJVVEYtOCBVVEYtOCIKKyAgICA7OworICBocHV4KikKKyAgICBlY2hvICJpc284ODU5MSBJU08tODg1OS0xIgorICAgIGVjaG8gImlzbzg4NTkyIElTTy04ODU5LTIiCisgICAgZWNobyAiaXNvODg1OTUgSVNPLTg4NTktNSIKKyAgICBlY2hvICJpc284ODU5NiBJU08tODg1OS02IgorICAgIGVjaG8gImlzbzg4NTk3IElTTy04ODU5LTciCisgICAgZWNobyAiaXNvODg1OTggSVNPLTg4NTktOCIKKyAgICBlY2hvICJpc284ODU5OSBJU08tODg1OS05IgorICAgIGVjaG8gImlzbzg4NTkxNSBJU08tODg1OS0xNSIKKyAgICBlY2hvICJyb21hbjggSFAtUk9NQU44IgorICAgIGVjaG8gImFyYWJpYzggSFAtQVJBQklDOCIKKyAgICBlY2hvICJncmVlazggSFAtR1JFRUs4IgorICAgIGVjaG8gImhlYnJldzggSFAtSEVCUkVXOCIKKyAgICBlY2hvICJ0dXJraXNoOCBIUC1UVVJLSVNIOCIKKyAgICBlY2hvICJrYW5hOCBIUC1LQU5BOCIKKyAgICBlY2hvICJ0aXM2MjAgVElTLTYyMCIKKyAgICBlY2hvICJiaWc1IEJJRzUiCisgICAgZWNobyAiZXVjSlAgRVVDLUpQIgorICAgIGVjaG8gImV1Y0tSIEVVQy1LUiIKKyAgICBlY2hvICJldWNUVyBFVUMtVFciCisgICAgZWNobyAiaHAxNUNOIEdCMjMxMiIKKyAgICAjZWNobyAiY2NkYyA/IiAjIHdoYXQgaXMgdGhpcz8KKyAgICBlY2hvICJTSklTIFNISUZUX0pJUyIKKyAgICBlY2hvICJ1dGY4IFVURi04IgorICAgIDs7CisgIGlyaXgqKQorICAgIGVjaG8gIklTTzg4NTktMSBJU08tODg1OS0xIgorICAgIGVjaG8gIklTTzg4NTktMiBJU08tODg1OS0yIgorICAgIGVjaG8gIklTTzg4NTktNSBJU08tODg1OS01IgorICAgIGVjaG8gIklTTzg4NTktNyBJU08tODg1OS03IgorICAgIGVjaG8gIklTTzg4NTktOSBJU08tODg1OS05IgorICAgIGVjaG8gImV1Y0NOIEdCMjMxMiIKKyAgICBlY2hvICJldWNKUCBFVUMtSlAiCisgICAgZWNobyAiZXVjS1IgRVVDLUtSIgorICAgIGVjaG8gImV1Y1RXIEVVQy1UVyIKKyAgICA7OworICBvc2YqKQorICAgIGVjaG8gIklTTzg4NTktMSBJU08tODg1OS0xIgorICAgIGVjaG8gIklTTzg4NTktMiBJU08tODg1OS0yIgorICAgIGVjaG8gIklTTzg4NTktNCBJU08tODg1OS00IgorICAgIGVjaG8gIklTTzg4NTktNSBJU08tODg1OS01IgorICAgIGVjaG8gIklTTzg4NTktNyBJU08tODg1OS03IgorICAgIGVjaG8gIklTTzg4NTktOCBJU08tODg1OS04IgorICAgIGVjaG8gIklTTzg4NTktOSBJU08tODg1OS05IgorICAgIGVjaG8gIklTTzg4NTktMTUgSVNPLTg4NTktMTUiCisgICAgZWNobyAiY3A4NTAgQ1A4NTAiCisgICAgZWNobyAiYmlnNSBCSUc1IgorICAgIGVjaG8gImRlY2hhbnl1IERFQy1IQU5ZVSIKKyAgICBlY2hvICJkZWNoYW56aSBHQjIzMTIiCisgICAgZWNobyAiZGVja2FuamkgREVDLUtBTkpJIgorICAgIGVjaG8gImRlY2tvcmVhbiBFVUMtS1IiCisgICAgZWNobyAiZXVjSlAgRVVDLUpQIgorICAgIGVjaG8gImV1Y0tSIEVVQy1LUiIKKyAgICBlY2hvICJldWNUVyBFVUMtVFciCisgICAgZWNobyAiR0JLIEdCSyIKKyAgICBlY2hvICJLU0M1NjAxIENQOTQ5IgorICAgIGVjaG8gInNkZWNrYW5qaSBFVUMtSlAiCisgICAgZWNobyAiU0pJUyBTSElGVF9KSVMiCisgICAgZWNobyAiVEFDVElTIFRJUy02MjAiCisgICAgZWNobyAiVVRGLTggVVRGLTgiCisgICAgOzsKKyAgc29sYXJpcyopCisgICAgZWNobyAiNjQ2IEFTQ0lJIgorICAgIGVjaG8gIklTTzg4NTktMSBJU08tODg1OS0xIgorICAgIGVjaG8gIklTTzg4NTktMiBJU08tODg1OS0yIgorICAgIGVjaG8gIklTTzg4NTktMyBJU08tODg1OS0zIgorICAgIGVjaG8gIklTTzg4NTktNCBJU08tODg1OS00IgorICAgIGVjaG8gIklTTzg4NTktNSBJU08tODg1OS01IgorICAgIGVjaG8gIklTTzg4NTktNiBJU08tODg1OS02IgorICAgIGVjaG8gIklTTzg4NTktNyBJU08tODg1OS03IgorICAgIGVjaG8gIklTTzg4NTktOCBJU08tODg1OS04IgorICAgIGVjaG8gIklTTzg4NTktOSBJU08tODg1OS05IgorICAgIGVjaG8gIklTTzg4NTktMTUgSVNPLTg4NTktMTUiCisgICAgZWNobyAia29pOC1yIEtPSTgtUiIKKyAgICBlY2hvICJhbnNpLTEyNTEgQ1AxMjUxIgorICAgIGVjaG8gIkJJRzUgQklHNSIKKyAgICBlY2hvICJCaWc1LUhLU0NTIEJJRzUtSEtTQ1MiCisgICAgZWNobyAiZ2IyMzEyIEdCMjMxMiIKKyAgICBlY2hvICJHQksgR0JLIgorICAgIGVjaG8gIkdCMTgwMzAgR0IxODAzMCIKKyAgICBlY2hvICJjbnMxMTY0MyBFVUMtVFciCisgICAgZWNobyAiNTYwMSBFVUMtS1IiCisgICAgZWNobyAia29fS1Iuam9oYXA5MiBKT0hBQiIKKyAgICBlY2hvICJldWNKUCBFVUMtSlAiCisgICAgZWNobyAiUENLIFNISUZUX0pJUyIKKyAgICBlY2hvICJUSVM2MjAuMjUzMyBUSVMtNjIwIgorICAgICNlY2hvICJzdW5fZXVfZ3JlZWsgPyIgIyB3aGF0IGlzIHRoaXM/CisgICAgZWNobyAiVVRGLTggVVRGLTgiCisgICAgOzsKKyAgZnJlZWJzZCogfCBvczIqKQorICAgICMgRnJlZUJTRCA0LjIgZG9lc24ndCBoYXZlIG5sX2xhbmdpbmZvKENPREVTRVQpOyB0aGVyZWZvcmUKKyAgICAjIGxvY2FsY2hhcnNldC5jIGZhbGxzIGJhY2sgdG8gdXNpbmcgdGhlIGZ1bGwgbG9jYWxlIG5hbWUKKyAgICAjIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKyAgICAjIExpa2V3aXNlIGZvciBPUy8yLiBPUy8yIGhhcyBYRnJlZTg2IGp1c3QgbGlrZSBGcmVlQlNELiBKdXN0CisgICAgIyByZXVzZSBGcmVlQlNEJ3MgbG9jYWxlIGRhdGEgZm9yIE9TLzIuCisgICAgZWNobyAiQyBBU0NJSSIKKyAgICBlY2hvICJVUy1BU0NJSSBBU0NJSSIKKyAgICBmb3IgbCBpbiBsYV9MTiBsdF9MTjsgZG8KKyAgICAgIGVjaG8gIiRsLkFTQ0lJIEFTQ0lJIgorICAgIGRvbmUKKyAgICBmb3IgbCBpbiBkYV9ESyBkZV9BVCBkZV9DSCBkZV9ERSBlbl9BVSBlbl9DQSBlbl9HQiBlbl9VUyBlc19FUyBcCisgICAgICAgICAgICAgZmlfRkkgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgaXNfSVMgaXRfQ0ggaXRfSVQgbGFfTE4gXAorICAgICAgICAgICAgIGx0X0xOIG5sX0JFIG5sX05MIG5vX05PIHB0X1BUIHN2X1NFOyBkbworICAgICAgZWNobyAiJGwuSVNPXzg4NTktMSBJU08tODg1OS0xIgorICAgICAgZWNobyAiJGwuRElTXzg4NTktMTUgSVNPLTg4NTktMTUiCisgICAgZG9uZQorICAgIGZvciBsIGluIGNzX0NaIGhyX0hSIGh1X0hVIGxhX0xOIGx0X0xOIHBsX1BMIHNsX1NJOyBkbworICAgICAgZWNobyAiJGwuSVNPXzg4NTktMiBJU08tODg1OS0yIgorICAgIGRvbmUKKyAgICBmb3IgbCBpbiBsYV9MTiBsdF9MVDsgZG8KKyAgICAgIGVjaG8gIiRsLklTT184ODU5LTQgSVNPLTg4NTktNCIKKyAgICBkb25lCisgICAgZm9yIGwgaW4gcnVfUlUgcnVfU1U7IGRvCisgICAgICBlY2hvICIkbC5LT0k4LVIgS09JOC1SIgorICAgICAgZWNobyAiJGwuSVNPXzg4NTktNSBJU08tODg1OS01IgorICAgICAgZWNobyAiJGwuQ1A4NjYgQ1A4NjYiCisgICAgZG9uZQorICAgIGVjaG8gInVrX1VBLktPSTgtVSBLT0k4LVUiCisgICAgZWNobyAiemhfVFcuQklHNSBCSUc1IgorICAgIGVjaG8gInpoX1RXLkJpZzUgQklHNSIKKyAgICBlY2hvICJ6aF9DTi5FVUMgR0IyMzEyIgorICAgIGVjaG8gImphX0pQLkVVQyBFVUMtSlAiCisgICAgZWNobyAiamFfSlAuU0pJUyBTSElGVF9KSVMiCisgICAgZWNobyAiamFfSlAuU2hpZnRfSklTIFNISUZUX0pJUyIKKyAgICBlY2hvICJrb19LUi5FVUMgRVVDLUtSIgorICAgIDs7CisgIG5ldGJzZCopCisgICAgZWNobyAiNjQ2IEFTQ0lJIgorICAgIGVjaG8gIklTTzg4NTktMSBJU08tODg1OS0xIgorICAgIGVjaG8gIklTTzg4NTktMiBJU08tODg1OS0yIgorICAgIGVjaG8gIklTTzg4NTktNCBJU08tODg1OS00IgorICAgIGVjaG8gIklTTzg4NTktNSBJU08tODg1OS01IgorICAgIGVjaG8gIklTTzg4NTktNyBJU08tODg1OS03IgorICAgIGVjaG8gIklTTzg4NTktMTMgSVNPLTg4NTktMTMiCisgICAgZWNobyAiSVNPODg1OS0xNSBJU08tODg1OS0xNSIKKyAgICBlY2hvICJldWNDTiBHQjIzMTIiCisgICAgZWNobyAiZXVjSlAgRVVDLUpQIgorICAgIGVjaG8gImV1Y0tSIEVVQy1LUiIKKyAgICBlY2hvICJldWNUVyBFVUMtVFciCisgICAgZWNobyAiQklHNSBCSUc1IgorICAgIGVjaG8gIlNKSVMgU0hJRlRfSklTIgorICAgIDs7CisgIG9wZW5ic2QqKQorICAgIGVjaG8gIjY0NiBBU0NJSSIKKyAgICBlY2hvICJJU084ODU5LTEgSVNPLTg4NTktMSIKKyAgICBlY2hvICJJU084ODU5LTIgSVNPLTg4NTktMiIKKyAgICBlY2hvICJJU084ODU5LTQgSVNPLTg4NTktNCIKKyAgICBlY2hvICJJU084ODU5LTUgSVNPLTg4NTktNSIKKyAgICBlY2hvICJJU084ODU5LTcgSVNPLTg4NTktNyIKKyAgICBlY2hvICJJU084ODU5LTEzIElTTy04ODU5LTEzIgorICAgIGVjaG8gIklTTzg4NTktMTUgSVNPLTg4NTktMTUiCisgICAgOzsKKyAgZGFyd2luWzU2XSopCisgICAgIyBEYXJ3aW4gNi44IGRvZXNuJ3QgaGF2ZSBubF9sYW5naW5mbyhDT0RFU0VUKTsgdGhlcmVmb3JlCisgICAgIyBsb2NhbGNoYXJzZXQuYyBmYWxscyBiYWNrIHRvIHVzaW5nIHRoZSBmdWxsIGxvY2FsZSBuYW1lCisgICAgIyBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisgICAgZWNobyAiQyBBU0NJSSIKKyAgICBmb3IgbCBpbiBlbl9BVSBlbl9DQSBlbl9HQiBlbl9VUyBsYV9MTjsgZG8KKyAgICAgIGVjaG8gIiRsLlVTLUFTQ0lJIEFTQ0lJIgorICAgIGRvbmUKKyAgICBmb3IgbCBpbiBkYV9ESyBkZV9BVCBkZV9DSCBkZV9ERSBlbl9BVSBlbl9DQSBlbl9HQiBlbl9VUyBlc19FUyBcCisgICAgICAgICAgICAgZmlfRkkgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgaXNfSVMgaXRfQ0ggaXRfSVQgbmxfQkUgXAorICAgICAgICAgICAgIG5sX05MIG5vX05PIHB0X1BUIHN2X1NFOyBkbworICAgICAgZWNobyAiJGwgSVNPLTg4NTktMSIKKyAgICAgIGVjaG8gIiRsLklTTzg4NTktMSBJU08tODg1OS0xIgorICAgICAgZWNobyAiJGwuSVNPODg1OS0xNSBJU08tODg1OS0xNSIKKyAgICBkb25lCisgICAgZm9yIGwgaW4gbGFfTE47IGRvCisgICAgICBlY2hvICIkbC5JU084ODU5LTEgSVNPLTg4NTktMSIKKyAgICAgIGVjaG8gIiRsLklTTzg4NTktMTUgSVNPLTg4NTktMTUiCisgICAgZG9uZQorICAgIGZvciBsIGluIGNzX0NaIGhyX0hSIGh1X0hVIGxhX0xOIHBsX1BMIHNsX1NJOyBkbworICAgICAgZWNobyAiJGwuSVNPODg1OS0yIElTTy04ODU5LTIiCisgICAgZG9uZQorICAgIGZvciBsIGluIGxhX0xOIGx0X0xUOyBkbworICAgICAgZWNobyAiJGwuSVNPODg1OS00IElTTy04ODU5LTQiCisgICAgZG9uZQorICAgIGZvciBsIGluIHJ1X1JVOyBkbworICAgICAgZWNobyAiJGwuS09JOC1SIEtPSTgtUiIKKyAgICAgIGVjaG8gIiRsLklTTzg4NTktNSBJU08tODg1OS01IgorICAgICAgZWNobyAiJGwuQ1A4NjYgQ1A4NjYiCisgICAgZG9uZQorICAgIGZvciBsIGluIGJnX0JHOyBkbworICAgICAgZWNobyAiJGwuQ1AxMjUxIENQMTI1MSIKKyAgICBkb25lCisgICAgZWNobyAidWtfVUEuS09JOC1VIEtPSTgtVSIKKyAgICBlY2hvICJ6aF9UVy5CSUc1IEJJRzUiCisgICAgZWNobyAiemhfVFcuQmlnNSBCSUc1IgorICAgIGVjaG8gInpoX0NOLkVVQyBHQjIzMTIiCisgICAgZWNobyAiamFfSlAuRVVDIEVVQy1KUCIKKyAgICBlY2hvICJqYV9KUC5TSklTIFNISUZUX0pJUyIKKyAgICBlY2hvICJrb19LUi5FVUMgRVVDLUtSIgorICAgIDs7CisgIGRhcndpbiopCisgICAgIyBEYXJ3aW4gNy41IGhhcyBubF9sYW5naW5mbyhDT0RFU0VUKSwgYnV0IHNvbWV0aW1lcyBpdHMgdmFsdWUgaXMKKyAgICAjIHVzZWxlc3M6CisgICAgIyAtIEl0IHJldHVybnMgdGhlIGVtcHR5IHN0cmluZyB3aGVuIExBTkcgaXMgc2V0IHRvIGEgbG9jYWxlIG9mIHRoZQorICAgICMgICBmb3JtIGxsX0NDLCBhbHRob3VnaCBsbF9DQy9MQ19DVFlQRSBpcyBhIHN5bWxpbmsgdG8gYW4gVVRGLTgKKyAgICAjICAgTENfQ1RZUEUgZmlsZS4KKyAgICAjIC0gVGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBMQU5HLCBMQ19DVFlQRSwgTENfQUxMIGFyZSBub3Qgc2V0IGJ5CisgICAgIyAgIHRoZSBzeXN0ZW07IG5sX2xhbmdpbmZvKENPREVTRVQpIHJldHVybnMgIlVTLUFTQ0lJIiBpbiB0aGlzIGNhc2UuCisgICAgIyAtIFRoZSBkb2N1bWVudGF0aW9uIHNheXM6CisgICAgIyAgICAgIi4uLiBhbGwgY29kZSB0aGF0IGNhbGxzIEJTRCBzeXN0ZW0gcm91dGluZXMgc2hvdWxkIGVuc3VyZQorICAgICMgICAgICB0aGF0IHRoZSBjb25zdCAqY2hhciBwYXJhbWV0ZXJzIG9mIHRoZXNlIHJvdXRpbmVzIGFyZSBpbiBVVEYtOAorICAgICMgICAgICBlbmNvZGluZy4gQWxsIEJTRCBzeXN0ZW0gZnVuY3Rpb25zIGV4cGVjdCB0aGVpciBzdHJpbmcKKyAgICAjICAgICAgcGFyYW1ldGVycyB0byBiZSBpbiBVVEYtOCBlbmNvZGluZyBhbmQgbm90aGluZyBlbHNlLiIKKyAgICAjICAgSXQgYWxzbyBzYXlzCisgICAgIyAgICAgIkFuIGFkZGl0aW9uYWwgY2F2ZWF0IGlzIHRoYXQgc3RyaW5nIHBhcmFtZXRlcnMgZm9yIGZpbGVzLAorICAgICMgICAgICBwYXRocywgYW5kIG90aGVyIGZpbGUtc3lzdGVtIGVudGl0aWVzIG11c3QgYmUgaW4gY2Fub25pY2FsCisgICAgIyAgICAgIFVURi04LiBJbiBhIGNhbm9uaWNhbCBVVEYtOCBVbmljb2RlIHN0cmluZywgYWxsIGRlY29tcG9zYWJsZQorICAgICMgICAgICBjaGFyYWN0ZXJzIGFyZSBkZWNvbXBvc2VkIC4uLiIKKyAgICAjICAgYnV0IHRoaXMgaXMgbm90IHRydWU6IFlvdSBjYW4gcGFzcyBub24tZGVjb21wb3NlZCBVVEYtOCBzdHJpbmdzCisgICAgIyAgIHRvIGZpbGUgc3lzdGVtIGZ1bmN0aW9ucywgYW5kIGl0IGlzIHRoZSBPUyB3aGljaCB3aWxsIGNvbnZlcnQKKyAgICAjICAgdGhlbSB0byBkZWNvbXBvc2VkIFVURi04IGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGZpbGUgc3lzdGVtLgorICAgICMgLSBUaGUgQXBwbGUgVGVybWluYWwgYXBwbGljYXRpb24gZGlzcGxheXMgVVRGLTggYnkgZGVmYXVsdC4KKyAgICAjIC0gSG93ZXZlciwgb3RoZXIgYXBwbGljYXRpb25zIGFyZSBmcmVlIHRvIHVzZSBkaWZmZXJlbnQgZW5jb2RpbmdzOgorICAgICMgICAtIHh0ZXJtIHVzZXMgSVNPLTg4NTktMSBieSBkZWZhdWx0LgorICAgICMgICAtIFRleHRFZGl0IHVzZXMgTWFjUm9tYW4gYnkgZGVmYXVsdC4KKyAgICAjIFdlIHByZWZlciBVVEYtOCBvdmVyIGRlY29tcG9zZWQgVVRGLTgtTUFDIGJlY2F1c2Ugb25lIHNob3VsZAorICAgICMgbWluaW1pemUgdGhlIHVzZSBvZiBkZWNvbXBvc2VkIFVuaWNvZGUuIFVuZm9ydHVuYXRlbHksIHRocm91Z2ggdGhlCisgICAgIyBEYXJ3aW4gZmlsZSBzeXN0ZW0sIGRlY29tcG9zZWQgVVRGLTggc3RyaW5ncyBhcmUgbGVha2VkIGludG8gdXNlcgorICAgICMgc3BhY2UgbmV2ZXJ0aGVsZXNzLgorICAgICMgVGhlbiB0aGVyZSBhcmUgYWxzbyB0aGUgbG9jYWxlcyB3aXRoIGVuY29kaW5ncyBvdGhlciB0aGFuIFVTLUFTQ0lJCisgICAgIyBhbmQgVVRGLTguIFRoZXNlIGxvY2FsZXMgY2FuIGJlIG9jY2FzaW9uYWxseSB1c2VmdWwgdG8gdXNlcnMgKGUuZy4KKyAgICAjIHdoZW4gZ3JlcHBpbmcgdGhyb3VnaCBJU08tODg1OS0xIGVuY29kZWQgdGV4dCBmaWxlcyksIHdoZW4gYWxsIHRoZWlyCisgICAgIyBmaWxlIG5hbWVzIGFyZSBpbiBVUy1BU0NJSS4KKyAgICBlY2hvICJJU084ODU5LTEgSVNPLTg4NTktMSIKKyAgICBlY2hvICJJU084ODU5LTIgSVNPLTg4NTktMiIKKyAgICBlY2hvICJJU084ODU5LTQgSVNPLTg4NTktNCIKKyAgICBlY2hvICJJU084ODU5LTUgSVNPLTg4NTktNSIKKyAgICBlY2hvICJJU084ODU5LTcgSVNPLTg4NTktNyIKKyAgICBlY2hvICJJU084ODU5LTkgSVNPLTg4NTktOSIKKyAgICBlY2hvICJJU084ODU5LTEzIElTTy04ODU5LTEzIgorICAgIGVjaG8gIklTTzg4NTktMTUgSVNPLTg4NTktMTUiCisgICAgZWNobyAiS09JOC1SIEtPSTgtUiIKKyAgICBlY2hvICJLT0k4LVUgS09JOC1VIgorICAgIGVjaG8gIkNQODY2IENQODY2IgorICAgIGVjaG8gIkNQOTQ5IENQOTQ5IgorICAgIGVjaG8gIkNQMTEzMSBDUDExMzEiCisgICAgZWNobyAiQ1AxMjUxIENQMTI1MSIKKyAgICBlY2hvICJldWNDTiBHQjIzMTIiCisgICAgZWNobyAiR0IyMzEyIEdCMjMxMiIKKyAgICBlY2hvICJldWNKUCBFVUMtSlAiCisgICAgZWNobyAiZXVjS1IgRVVDLUtSIgorICAgIGVjaG8gIkJpZzUgQklHNSIKKyAgICBlY2hvICJCaWc1SEtTQ1MgQklHNS1IS1NDUyIKKyAgICBlY2hvICJHQksgR0JLIgorICAgIGVjaG8gIkdCMTgwMzAgR0IxODAzMCIKKyAgICBlY2hvICJTSklTIFNISUZUX0pJUyIKKyAgICBlY2hvICJBUk1TQ0lJLTggQVJNU0NJSS04IgorICAgIGVjaG8gIlBUMTU0IFBUMTU0IgorICAgICNlY2hvICJJU0NJSS1ERVYgPyIKKyAgICBlY2hvICIqIFVURi04IgorICAgIDs7CisgIGJlb3MqIHwgaGFpa3UqKQorICAgICMgQmVPUyBhbmQgSGFpa3UgaGF2ZSBhIHNpbmdsZSBsb2NhbGUsIGFuZCBpdCBoYXMgVVRGLTggZW5jb2RpbmcuCisgICAgZWNobyAiKiBVVEYtOCIKKyAgICA7OworICBtc2Rvc2RqZ3BwKikKKyAgICAjIERKR1BQIDIuMDMgZG9lc24ndCBoYXZlIG5sX2xhbmdpbmZvKENPREVTRVQpOyB0aGVyZWZvcmUKKyAgICAjIGxvY2FsY2hhcnNldC5jIGZhbGxzIGJhY2sgdG8gdXNpbmcgdGhlIGZ1bGwgbG9jYWxlIG5hbWUKKyAgICAjIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKyAgICBlY2hvICIjIgorICAgIGVjaG8gIiMgVGhlIGVuY29kaW5ncyBnaXZlbiBoZXJlIG1heSBub3QgYWxsIGJlIGNvcnJlY3QuIgorICAgIGVjaG8gIiMgSWYgeW91IGZpbmQgdGhhdCB0aGUgZW5jb2RpbmcgZ2l2ZW4gZm9yIHlvdXIgbGFuZ3VhZ2UgYW5kIgorICAgIGVjaG8gIiMgY291bnRyeSBpcyBub3QgdGhlIG9uZSB5b3VyIERPUyBtYWNoaW5lIGFjdHVhbGx5IHVzZXMsIGp1c3QiCisgICAgZWNobyAiIyBjb3JyZWN0IGl0IGluIHRoaXMgZmlsZSwgYW5kIHNlbmQgYSBtYWlsIHRvIgorICAgIGVjaG8gIiMgSnVhbiBNYW51ZWwgR3VlcnJlcm8gPGp1YW4uZ3VlcnJlcm9AZ214LmRlPiIKKyAgICBlY2hvICIjIGFuZCBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4uIgorICAgIGVjaG8gIiMiCisgICAgZWNobyAiQyBBU0NJSSIKKyAgICAjIElTTy04ODU5LTEgbGFuZ3VhZ2VzCisgICAgZWNobyAiY2EgQ1A4NTAiCisgICAgZWNobyAiY2FfRVMgQ1A4NTAiCisgICAgZWNobyAiZGEgQ1A4NjUiICAgICMgbm90IENQODUwID8/CisgICAgZWNobyAiZGFfREsgQ1A4NjUiICMgbm90IENQODUwID8/CisgICAgZWNobyAiZGUgQ1A4NTAiCisgICAgZWNobyAiZGVfQVQgQ1A4NTAiCisgICAgZWNobyAiZGVfQ0ggQ1A4NTAiCisgICAgZWNobyAiZGVfREUgQ1A4NTAiCisgICAgZWNobyAiZW4gQ1A4NTAiCisgICAgZWNobyAiZW5fQVUgQ1A4NTAiICMgbm90IENQNDM3ID8/CisgICAgZWNobyAiZW5fQ0EgQ1A4NTAiCisgICAgZWNobyAiZW5fR0IgQ1A4NTAiCisgICAgZWNobyAiZW5fTlogQ1A0MzciCisgICAgZWNobyAiZW5fVVMgQ1A0MzciCisgICAgZWNobyAiZW5fWkEgQ1A4NTAiICMgbm90IENQNDM3ID8/CisgICAgZWNobyAiZXMgQ1A4NTAiCisgICAgZWNobyAiZXNfQVIgQ1A4NTAiCisgICAgZWNobyAiZXNfQk8gQ1A4NTAiCisgICAgZWNobyAiZXNfQ0wgQ1A4NTAiCisgICAgZWNobyAiZXNfQ08gQ1A4NTAiCisgICAgZWNobyAiZXNfQ1IgQ1A4NTAiCisgICAgZWNobyAiZXNfQ1UgQ1A4NTAiCisgICAgZWNobyAiZXNfRE8gQ1A4NTAiCisgICAgZWNobyAiZXNfRUMgQ1A4NTAiCisgICAgZWNobyAiZXNfRVMgQ1A4NTAiCisgICAgZWNobyAiZXNfR1QgQ1A4NTAiCisgICAgZWNobyAiZXNfSE4gQ1A4NTAiCisgICAgZWNobyAiZXNfTVggQ1A4NTAiCisgICAgZWNobyAiZXNfTkkgQ1A4NTAiCisgICAgZWNobyAiZXNfUEEgQ1A4NTAiCisgICAgZWNobyAiZXNfUFkgQ1A4NTAiCisgICAgZWNobyAiZXNfUEUgQ1A4NTAiCisgICAgZWNobyAiZXNfU1YgQ1A4NTAiCisgICAgZWNobyAiZXNfVVkgQ1A4NTAiCisgICAgZWNobyAiZXNfVkUgQ1A4NTAiCisgICAgZWNobyAiZXQgQ1A4NTAiCisgICAgZWNobyAiZXRfRUUgQ1A4NTAiCisgICAgZWNobyAiZXUgQ1A4NTAiCisgICAgZWNobyAiZXVfRVMgQ1A4NTAiCisgICAgZWNobyAiZmkgQ1A4NTAiCisgICAgZWNobyAiZmlfRkkgQ1A4NTAiCisgICAgZWNobyAiZnIgQ1A4NTAiCisgICAgZWNobyAiZnJfQkUgQ1A4NTAiCisgICAgZWNobyAiZnJfQ0EgQ1A4NTAiCisgICAgZWNobyAiZnJfQ0ggQ1A4NTAiCisgICAgZWNobyAiZnJfRlIgQ1A4NTAiCisgICAgZWNobyAiZ2EgQ1A4NTAiCisgICAgZWNobyAiZ2FfSUUgQ1A4NTAiCisgICAgZWNobyAiZ2QgQ1A4NTAiCisgICAgZWNobyAiZ2RfR0IgQ1A4NTAiCisgICAgZWNobyAiZ2wgQ1A4NTAiCisgICAgZWNobyAiZ2xfRVMgQ1A4NTAiCisgICAgZWNobyAiaWQgQ1A4NTAiICAgICMgbm90IENQNDM3ID8/CisgICAgZWNobyAiaWRfSUQgQ1A4NTAiICMgbm90IENQNDM3ID8/CisgICAgZWNobyAiaXMgQ1A4NjEiICAgICMgbm90IENQODUwID8/CisgICAgZWNobyAiaXNfSVMgQ1A4NjEiICMgbm90IENQODUwID8/CisgICAgZWNobyAiaXQgQ1A4NTAiCisgICAgZWNobyAiaXRfQ0ggQ1A4NTAiCisgICAgZWNobyAiaXRfSVQgQ1A4NTAiCisgICAgZWNobyAibHQgQ1A3NzUiCisgICAgZWNobyAibHRfTFQgQ1A3NzUiCisgICAgZWNobyAibHYgQ1A3NzUiCisgICAgZWNobyAibHZfTFYgQ1A3NzUiCisgICAgZWNobyAibmIgQ1A4NjUiICAgICMgbm90IENQODUwID8/CisgICAgZWNobyAibmJfTk8gQ1A4NjUiICMgbm90IENQODUwID8/CisgICAgZWNobyAibmwgQ1A4NTAiCisgICAgZWNobyAibmxfQkUgQ1A4NTAiCisgICAgZWNobyAibmxfTkwgQ1A4NTAiCisgICAgZWNobyAibm4gQ1A4NjUiICAgICMgbm90IENQODUwID8/CisgICAgZWNobyAibm5fTk8gQ1A4NjUiICMgbm90IENQODUwID8/CisgICAgZWNobyAibm8gQ1A4NjUiICAgICMgbm90IENQODUwID8/CisgICAgZWNobyAibm9fTk8gQ1A4NjUiICMgbm90IENQODUwID8/CisgICAgZWNobyAicHQgQ1A4NTAiCisgICAgZWNobyAicHRfQlIgQ1A4NTAiCisgICAgZWNobyAicHRfUFQgQ1A4NTAiCisgICAgZWNobyAic3YgQ1A4NTAiCisgICAgZWNobyAic3ZfU0UgQ1A4NTAiCisgICAgIyBJU08tODg1OS0yIGxhbmd1YWdlcworICAgIGVjaG8gImNzIENQODUyIgorICAgIGVjaG8gImNzX0NaIENQODUyIgorICAgIGVjaG8gImhyIENQODUyIgorICAgIGVjaG8gImhyX0hSIENQODUyIgorICAgIGVjaG8gImh1IENQODUyIgorICAgIGVjaG8gImh1X0hVIENQODUyIgorICAgIGVjaG8gInBsIENQODUyIgorICAgIGVjaG8gInBsX1BMIENQODUyIgorICAgIGVjaG8gInJvIENQODUyIgorICAgIGVjaG8gInJvX1JPIENQODUyIgorICAgIGVjaG8gInNrIENQODUyIgorICAgIGVjaG8gInNrX1NLIENQODUyIgorICAgIGVjaG8gInNsIENQODUyIgorICAgIGVjaG8gInNsX1NJIENQODUyIgorICAgIGVjaG8gInNxIENQODUyIgorICAgIGVjaG8gInNxX0FMIENQODUyIgorICAgIGVjaG8gInNyIENQODUyIiAgICAjIENQODUyIG9yIENQODY2IG9yIENQODU1ID8/CisgICAgZWNobyAic3JfQ1MgQ1A4NTIiICMgQ1A4NTIgb3IgQ1A4NjYgb3IgQ1A4NTUgPz8KKyAgICBlY2hvICJzcl9ZVSBDUDg1MiIgIyBDUDg1MiBvciBDUDg2NiBvciBDUDg1NSA/PworICAgICMgSVNPLTg4NTktMyBsYW5ndWFnZXMKKyAgICBlY2hvICJtdCBDUDg1MCIKKyAgICBlY2hvICJtdF9NVCBDUDg1MCIKKyAgICAjIElTTy04ODU5LTUgbGFuZ3VhZ2VzCisgICAgZWNobyAiYmUgQ1A4NjYiCisgICAgZWNobyAiYmVfQkUgQ1A4NjYiCisgICAgZWNobyAiYmcgQ1A4NjYiICAgICMgbm90IENQODU1ID8/CisgICAgZWNobyAiYmdfQkcgQ1A4NjYiICMgbm90IENQODU1ID8/CisgICAgZWNobyAibWsgQ1A4NjYiICAgICMgbm90IENQODU1ID8/CisgICAgZWNobyAibWtfTUsgQ1A4NjYiICMgbm90IENQODU1ID8/CisgICAgZWNobyAicnUgQ1A4NjYiCisgICAgZWNobyAicnVfUlUgQ1A4NjYiCisgICAgZWNobyAidWsgQ1AxMTI1IgorICAgIGVjaG8gInVrX1VBIENQMTEyNSIKKyAgICAjIElTTy04ODU5LTYgbGFuZ3VhZ2VzCisgICAgZWNobyAiYXIgQ1A4NjQiCisgICAgZWNobyAiYXJfQUUgQ1A4NjQiCisgICAgZWNobyAiYXJfRFogQ1A4NjQiCisgICAgZWNobyAiYXJfRUcgQ1A4NjQiCisgICAgZWNobyAiYXJfSVEgQ1A4NjQiCisgICAgZWNobyAiYXJfSVIgQ1A4NjQiCisgICAgZWNobyAiYXJfSk8gQ1A4NjQiCisgICAgZWNobyAiYXJfS1cgQ1A4NjQiCisgICAgZWNobyAiYXJfTUEgQ1A4NjQiCisgICAgZWNobyAiYXJfT00gQ1A4NjQiCisgICAgZWNobyAiYXJfUUEgQ1A4NjQiCisgICAgZWNobyAiYXJfU0EgQ1A4NjQiCisgICAgZWNobyAiYXJfU1kgQ1A4NjQiCisgICAgIyBJU08tODg1OS03IGxhbmd1YWdlcworICAgIGVjaG8gImVsIENQODY5IgorICAgIGVjaG8gImVsX0dSIENQODY5IgorICAgICMgSVNPLTg4NTktOCBsYW5ndWFnZXMKKyAgICBlY2hvICJoZSBDUDg2MiIKKyAgICBlY2hvICJoZV9JTCBDUDg2MiIKKyAgICAjIElTTy04ODU5LTkgbGFuZ3VhZ2VzCisgICAgZWNobyAidHIgQ1A4NTciCisgICAgZWNobyAidHJfVFIgQ1A4NTciCisgICAgIyBKYXBhbmVzZQorICAgIGVjaG8gImphIENQOTMyIgorICAgIGVjaG8gImphX0pQIENQOTMyIgorICAgICMgQ2hpbmVzZQorICAgIGVjaG8gInpoX0NOIEdCSyIKKyAgICBlY2hvICJ6aF9UVyBDUDk1MCIgIyBub3QgQ1A5MzggPz8KKyAgICAjIEtvcmVhbgorICAgIGVjaG8gImtyIENQOTQ5IiAgICAjIG5vdCBDUDkzNCA/PworICAgIGVjaG8gImtyX0tSIENQOTQ5IiAjIG5vdCBDUDkzNCA/PworICAgICMgVGhhaQorICAgIGVjaG8gInRoIENQODc0IgorICAgIGVjaG8gInRoX1RIIENQODc0IgorICAgICMgT3RoZXIKKyAgICBlY2hvICJlbyBDUDg1MCIKKyAgICBlY2hvICJlb19FTyBDUDg1MCIKKyAgICA7OworZXNhYwpkaWZmIC0tZ2l0IGEvbGliL2NvbmZpZy5pbi5oIGIvbGliL2NvbmZpZy5pbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYmIwYzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY29uZmlnLmluLmgKQEAgLTAsMCArMSwyMjY3IEBACisvKiBsaWIvY29uZmlnLmluLmguICBHZW5lcmF0ZWQgZnJvbSBjb25maWd1cmUuYWMgYnkgYXV0b2hlYWRlci4gICovCisKKy8qIERlZmluZSBpZiBidWlsZGluZyB1bml2ZXJzYWwgKGludGVybmFsIGhlbHBlciBtYWNybykgKi8KKyN1bmRlZiBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQKKworLyogRGVmaW5lIHRvIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0eXBlICdwdHJkaWZmX3QnLiAqLworI3VuZGVmIEJJVFNJWkVPRl9QVFJESUZGX1QKKworLyogRGVmaW5lIHRvIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0eXBlICdzaWdfYXRvbWljX3QnLiAqLworI3VuZGVmIEJJVFNJWkVPRl9TSUdfQVRPTUlDX1QKKworLyogRGVmaW5lIHRvIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0eXBlICdzaXplX3QnLiAqLworI3VuZGVmIEJJVFNJWkVPRl9TSVpFX1QKKworLyogRGVmaW5lIHRvIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0eXBlICd3Y2hhcl90Jy4gKi8KKyN1bmRlZiBCSVRTSVpFT0ZfV0NIQVJfVAorCisvKiBEZWZpbmUgdG8gdGhlIG51bWJlciBvZiBiaXRzIGluIHR5cGUgJ3dpbnRfdCcuICovCisjdW5kZWYgQklUU0laRU9GX1dJTlRfVAorCisvKiBEZWZpbmUgaWYgeW91IHdpc2ggKnByaW50ZigpIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYSBzYWZlIGhhbmRsaW5nIG9mCisgICBub24tSUVFRS03NTQgJ2xvbmcgZG91YmxlJyB2YWx1ZXMuICovCisjdW5kZWYgQ0hFQ0tfUFJJTlRGX1NBRkUKKworLyogRGVmaW5lIHRvIG9uZSBvZiBgX2dldGI2NycsIGBHRVRCNjcnLCBgZ2V0YjY3JyBmb3IgQ3JheS0yIGFuZCBDcmF5LVlNUAorICAgc3lzdGVtcy4gVGhpcyBmdW5jdGlvbiBpcyByZXF1aXJlZCBmb3IgYGFsbG9jYS5jJyBzdXBwb3J0IG9uIHRob3NlIHN5c3RlbXMuCisgICAqLworI3VuZGVmIENSQVlfU1RBQ0tTRUdfRU5ECisKKy8qIERlZmluZSB0byAxIGlmIHVzaW5nIGBhbGxvY2EuYycuICovCisjdW5kZWYgQ19BTExPQ0EKKworLyogRGVmaW5lIGFzIHRoZSBiaXQgaW5kZXggaW4gdGhlIHdvcmQgd2hlcmUgdG8gZmluZCBiaXQgMCBvZiB0aGUgZXhwb25lbnQgb2YKKyAgICdkb3VibGUnLiAqLworI3VuZGVmIERCTF9FWFBCSVQwX0JJVAorCisvKiBEZWZpbmUgYXMgdGhlIHdvcmQgaW5kZXggd2hlcmUgdG8gZmluZCB0aGUgZXhwb25lbnQgb2YgJ2RvdWJsZScuICovCisjdW5kZWYgREJMX0VYUEJJVDBfV09SRAorCisvKiBEZWZpbmUgYXMgdGhlIGJpdCBpbmRleCBpbiB0aGUgd29yZCB3aGVyZSB0byBmaW5kIHRoZSBzaWduIG9mICdkb3VibGUnLiAqLworI3VuZGVmIERCTF9TSUdOQklUX0JJVAorCisvKiBEZWZpbmUgYXMgdGhlIHdvcmQgaW5kZXggd2hlcmUgdG8gZmluZCB0aGUgc2lnbiBvZiAnZG91YmxlJy4gKi8KKyN1bmRlZiBEQkxfU0lHTkJJVF9XT1JECisKKy8qIERlZmluZSB0byAxIGlmIC8vIGlzIGEgZmlsZSBzeXN0ZW0gcm9vdCBkaXN0aW5jdCBmcm9tIC8uICovCisjdW5kZWYgRE9VQkxFX1NMQVNIX0lTX0RJU1RJTkNUX1JPT1QKKworLyogRGVmaW5lIHRvIDEgaWYgdHJhbnNsYXRpb24gb2YgcHJvZ3JhbSBtZXNzYWdlcyB0byB0aGUgdXNlcidzIG5hdGl2ZQorICAgbGFuZ3VhZ2UgaXMgcmVxdWVzdGVkLiAqLworI3VuZGVmIEVOQUJMRV9OTFMKKworLyogRGVmaW5lIHRoaXMgdG8gMSBpZiBGX0RVUEZEIGJlaGF2aW9yIGRvZXMgbm90IG1hdGNoIFBPU0lYICovCisjdW5kZWYgRkNOVExfRFVQRkRfQlVHR1kKKworLyogRGVmaW5lIGFzIHRoZSBiaXQgaW5kZXggaW4gdGhlIHdvcmQgd2hlcmUgdG8gZmluZCBiaXQgMCBvZiB0aGUgZXhwb25lbnQgb2YKKyAgICdmbG9hdCcuICovCisjdW5kZWYgRkxUX0VYUEJJVDBfQklUCisKKy8qIERlZmluZSBhcyB0aGUgd29yZCBpbmRleCB3aGVyZSB0byBmaW5kIHRoZSBleHBvbmVudCBvZiAnZmxvYXQnLiAqLworI3VuZGVmIEZMVF9FWFBCSVQwX1dPUkQKKworLyogRGVmaW5lIGFzIHRoZSBiaXQgaW5kZXggaW4gdGhlIHdvcmQgd2hlcmUgdG8gZmluZCB0aGUgc2lnbiBvZiAnZmxvYXQnLiAqLworI3VuZGVmIEZMVF9TSUdOQklUX0JJVAorCisvKiBEZWZpbmUgYXMgdGhlIHdvcmQgaW5kZXggd2hlcmUgdG8gZmluZCB0aGUgc2lnbiBvZiAnZmxvYXQnLiAqLworI3VuZGVmIEZMVF9TSUdOQklUX1dPUkQKKworLyogRGVmaW5lIHRvIDEgaWYgZm9wZW4oKSBmYWlscyB0byByZWNvZ25pemUgYSB0cmFpbGluZyBzbGFzaC4gKi8KKyN1bmRlZiBGT1BFTl9UUkFJTElOR19TTEFTSF9CVUcKKworLyogRGVmaW5lIHRvIGEgQyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byAxIG9yIDAsIGRlcGVuZGluZworICAgd2hldGhlciB0aGUgZ251bGliIG1vZHVsZSBjbG9zZS1zdHJlYW0gc2hhbGwgYmUgY29uc2lkZXJlZCBwcmVzZW50LiAqLworI3VuZGVmIEdOVUxJQl9DTE9TRV9TVFJFQU0KKworLyogRGVmaW5lIHRvIGEgQyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byAxIG9yIDAsIGRlcGVuZGluZworICAgd2hldGhlciB0aGUgZ251bGliIG1vZHVsZSBkaXJuYW1lIHNoYWxsIGJlIGNvbnNpZGVyZWQgcHJlc2VudC4gKi8KKyN1bmRlZiBHTlVMSUJfRElSTkFNRQorCisvKiBEZWZpbmUgdG8gYSBDIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIDEgb3IgMCwgZGVwZW5kaW5nCisgICB3aGV0aGVyIHRoZSBnbnVsaWIgbW9kdWxlIGZkLXNhZmVyLWZsYWcgc2hhbGwgYmUgY29uc2lkZXJlZCBwcmVzZW50LiAqLworI3VuZGVmIEdOVUxJQl9GRF9TQUZFUl9GTEFHCisKKy8qIERlZmluZSB0byBhIEMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gMSBvciAwLCBkZXBlbmRpbmcKKyAgIHdoZXRoZXIgdGhlIGdudWxpYiBtb2R1bGUgZm9wZW4tc2FmZXIgc2hhbGwgYmUgY29uc2lkZXJlZCBwcmVzZW50LiAqLworI3VuZGVmIEdOVUxJQl9GT1BFTl9TQUZFUgorCisvKiBEZWZpbmUgdG8gYSBDIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIDEgb3IgMCwgZGVwZW5kaW5nCisgICB3aGV0aGVyIHRoZSBnbnVsaWIgbW9kdWxlIGZzY2FuZiBzaGFsbCBiZSBjb25zaWRlcmVkIHByZXNlbnQuICovCisjdW5kZWYgR05VTElCX0ZTQ0FORgorCisvKiBEZWZpbmUgdG8gYSBDIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIDEgb3IgMCwgZGVwZW5kaW5nCisgICB3aGV0aGVyIHRoZSBnbnVsaWIgbW9kdWxlIG1hbGxvYy1nbnUgc2hhbGwgYmUgY29uc2lkZXJlZCBwcmVzZW50LiAqLworI3VuZGVmIEdOVUxJQl9NQUxMT0NfR05VCisKKy8qIERlZmluZSB0byBhIEMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gMSBvciAwLCBkZXBlbmRpbmcKKyAgIHdoZXRoZXIgdGhlIGdudWxpYiBtb2R1bGUgcGlwZTItc2FmZXIgc2hhbGwgYmUgY29uc2lkZXJlZCBwcmVzZW50LiAqLworI3VuZGVmIEdOVUxJQl9QSVBFMl9TQUZFUgorCisvKiBEZWZpbmUgdG8gYSBDIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIDEgb3IgMCwgZGVwZW5kaW5nCisgICB3aGV0aGVyIHRoZSBnbnVsaWIgbW9kdWxlIHNjYW5mIHNoYWxsIGJlIGNvbnNpZGVyZWQgcHJlc2VudC4gKi8KKyN1bmRlZiBHTlVMSUJfU0NBTkYKKworLyogRGVmaW5lIHRvIGEgQyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byAxIG9yIDAsIGRlcGVuZGluZworICAgd2hldGhlciB0aGUgZ251bGliIG1vZHVsZSBzbnByaW50ZiBzaGFsbCBiZSBjb25zaWRlcmVkIHByZXNlbnQuICovCisjdW5kZWYgR05VTElCX1NOUFJJTlRGCisKKy8qIERlZmluZSB0byBhIEMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gMSBvciAwLCBkZXBlbmRpbmcKKyAgIHdoZXRoZXIgdGhlIGdudWxpYiBtb2R1bGUgc3RyZXJyb3Igc2hhbGwgYmUgY29uc2lkZXJlZCBwcmVzZW50LiAqLworI3VuZGVmIEdOVUxJQl9TVFJFUlJPUgorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIGNhbGxvYy1wb3NpeCBzaG91bGQgYmUgdGVzdGVkLiAqLworI3VuZGVmIEdOVUxJQl9URVNUX0NBTExPQ19QT1NJWAorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIGNsb2V4ZWMgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9DTE9FWEVDCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgY2xvc2Ugc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9DTE9TRQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIGR1cDIgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9EVVAyCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgZW52aXJvbiBzaG91bGQgYmUgdGVzdGVkLiAqLworI3VuZGVmIEdOVUxJQl9URVNUX0VOVklST04KKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBmY250bCBzaG91bGQgYmUgdGVzdGVkLiAqLworI3VuZGVmIEdOVUxJQl9URVNUX0ZDTlRMCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgZm9wZW4gc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9GT1BFTgorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIGZwcmludGYtcG9zaXggc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9GUFJJTlRGX1BPU0lYCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgZnJleHAgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9GUkVYUAorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIGZyZXhwbCBzaG91bGQgYmUgdGVzdGVkLiAqLworI3VuZGVmIEdOVUxJQl9URVNUX0ZSRVhQTAorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIGZzdGF0IHNob3VsZCBiZSB0ZXN0ZWQuICovCisjdW5kZWYgR05VTElCX1RFU1RfRlNUQVQKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBnZXRkZWxpbSBzaG91bGQgYmUgdGVzdGVkLiAqLworI3VuZGVmIEdOVUxJQl9URVNUX0dFVERFTElNCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgZ2V0ZHRhYmxlc2l6ZSBzaG91bGQgYmUgdGVzdGVkLiAqLworI3VuZGVmIEdOVUxJQl9URVNUX0dFVERUQUJMRVNJWkUKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBnZXRsaW5lIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjdW5kZWYgR05VTElCX1RFU1RfR0VUTElORQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIGdldG9wdC1nbnUgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9HRVRPUFRfR05VCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgaXNuYW4gc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9JU05BTgorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIGlzbmFuZCBzaG91bGQgYmUgdGVzdGVkLiAqLworI3VuZGVmIEdOVUxJQl9URVNUX0lTTkFORAorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIGlzbmFuZiBzaG91bGQgYmUgdGVzdGVkLiAqLworI3VuZGVmIEdOVUxJQl9URVNUX0lTTkFORgorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIGlzbmFubCBzaG91bGQgYmUgdGVzdGVkLiAqLworI3VuZGVmIEdOVUxJQl9URVNUX0lTTkFOTAorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIGlzd2JsYW5rIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjdW5kZWYgR05VTElCX1RFU1RfSVNXQkxBTksKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBsZGV4cGwgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9MREVYUEwKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBtYWxsb2MtcG9zaXggc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9NQUxMT0NfUE9TSVgKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBtYnJ0b3djIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjdW5kZWYgR05VTElCX1RFU1RfTUJSVE9XQworCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIG1ic2NociBzaG91bGQgYmUgdGVzdGVkLiAqLworI3VuZGVmIEdOVUxJQl9URVNUX01CU0NIUgorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIG1ic2luaXQgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9NQlNJTklUCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgbWJzcmNociBzaG91bGQgYmUgdGVzdGVkLiAqLworI3VuZGVmIEdOVUxJQl9URVNUX01CU1JDSFIKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBtZW1jaHIgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9NRU1DSFIKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBvYnN0YWNrLXByaW50ZiBzaG91bGQgYmUgdGVzdGVkLiAqLworI3VuZGVmIEdOVUxJQl9URVNUX09CU1RBQ0tfUFJJTlRGCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgb3BlbiBzaG91bGQgYmUgdGVzdGVkLiAqLworI3VuZGVmIEdOVUxJQl9URVNUX09QRU4KKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBwZXJyb3Igc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9QRVJST1IKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBwaXBlMiBzaG91bGQgYmUgdGVzdGVkLiAqLworI3VuZGVmIEdOVUxJQl9URVNUX1BJUEUyCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25hdHRyX2Rlc3Ryb3kgc2hvdWxkIGJlCisgICB0ZXN0ZWQuICovCisjdW5kZWYgR05VTElCX1RFU1RfUE9TSVhfU1BBV05BVFRSX0RFU1RST1kKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bmF0dHJfaW5pdCBzaG91bGQgYmUgdGVzdGVkLgorICAgKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9QT1NJWF9TUEFXTkFUVFJfSU5JVAorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9zZXRmbGFncyBzaG91bGQgYmUKKyAgIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9QT1NJWF9TUEFXTkFUVFJfU0VURkxBR1MKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bmF0dHJfc2V0c2lnbWFzayBzaG91bGQgYmUKKyAgIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9QT1NJWF9TUEFXTkFUVFJfU0VUU0lHTUFTSworCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXducCBzaG91bGQgYmUgdGVzdGVkLiAqLworI3VuZGVmIEdOVUxJQl9URVNUX1BPU0lYX1NQQVdOUAorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZSBzaG91bGQKKyAgIGJlIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQUREQ0xPU0UKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkZHVwMiBzaG91bGQKKyAgIGJlIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMgorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuIHNob3VsZAorICAgYmUgdGVzdGVkLiAqLworI3VuZGVmIEdOVUxJQl9URVNUX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERPUEVOCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3kgc2hvdWxkCisgICBiZSB0ZXN0ZWQuICovCisjdW5kZWYgR05VTElCX1RFU1RfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0RFU1RST1kKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfaW5pdCBzaG91bGQgYmUKKyAgIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfSU5JVAorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHByaW50Zi1wb3NpeCBzaG91bGQgYmUgdGVzdGVkLiAqLworI3VuZGVmIEdOVUxJQl9URVNUX1BSSU5URl9QT1NJWAorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHJhaXNlIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjdW5kZWYgR05VTElCX1RFU1RfUkFJU0UKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSByYXdtZW1jaHIgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9SQVdNRU1DSFIKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSByZWFsbG9jLXBvc2l4IHNob3VsZCBiZSB0ZXN0ZWQuICovCisjdW5kZWYgR05VTElCX1RFU1RfUkVBTExPQ19QT1NJWAorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHNpZ2FjdGlvbiBzaG91bGQgYmUgdGVzdGVkLiAqLworI3VuZGVmIEdOVUxJQl9URVNUX1NJR0FDVElPTgorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHNpZ25iaXQgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9TSUdOQklUCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgc2lncHJvY21hc2sgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9TSUdQUk9DTUFTSworCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHNucHJpbnRmIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjdW5kZWYgR05VTElCX1RFU1RfU05QUklOVEYKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBzcHJpbnRmLXBvc2l4IHNob3VsZCBiZSB0ZXN0ZWQuICovCisjdW5kZWYgR05VTElCX1RFU1RfU1BSSU5URl9QT1NJWAorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHN0YXQgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9TVEFUCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgc3RwY3B5IHNob3VsZCBiZSB0ZXN0ZWQuICovCisjdW5kZWYgR05VTElCX1RFU1RfU1RQQ1BZCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgc3RyY2hybnVsIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjdW5kZWYgR05VTElCX1RFU1RfU1RSQ0hSTlVMCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgc3RyZHVwIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjdW5kZWYgR05VTElCX1RFU1RfU1RSRFVQCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgc3RyZXJyb3Igc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9TVFJFUlJPUgorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHN0cmVycm9yX3Igc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9TVFJFUlJPUl9SCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgc3RybmR1cCBzaG91bGQgYmUgdGVzdGVkLiAqLworI3VuZGVmIEdOVUxJQl9URVNUX1NUUk5EVVAKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBzdHJubGVuIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjdW5kZWYgR05VTElCX1RFU1RfU1RSTkxFTgorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHN0cnZlcnNjbXAgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9TVFJWRVJTQ01QCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgdW5zZXRlbnYgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9VTlNFVEVOVgorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHZmcHJpbnRmLXBvc2l4IHNob3VsZCBiZSB0ZXN0ZWQuICovCisjdW5kZWYgR05VTElCX1RFU1RfVkZQUklOVEZfUE9TSVgKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSB2c25wcmludGYgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyN1bmRlZiBHTlVMSUJfVEVTVF9WU05QUklOVEYKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSB2c3ByaW50Zi1wb3NpeCBzaG91bGQgYmUgdGVzdGVkLiAqLworI3VuZGVmIEdOVUxJQl9URVNUX1ZTUFJJTlRGX1BPU0lYCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgd2FpdHBpZCBzaG91bGQgYmUgdGVzdGVkLiAqLworI3VuZGVmIEdOVUxJQl9URVNUX1dBSVRQSUQKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSB3Y3dpZHRoIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjdW5kZWYgR05VTElCX1RFU1RfV0NXSURUSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGFsYXJtJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0FMQVJNCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlICdhbGxvY2EnIGFmdGVyIGluY2x1ZGluZyA8YWxsb2NhLmg+LCBhIGhlYWRlciB0aGF0CisgICBtYXkgYmUgc3VwcGxpZWQgYnkgdGhpcyBkaXN0cmlidXRpb24uICovCisjdW5kZWYgSEFWRV9BTExPQ0EKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgPGFsbG9jYS5oPiBhbmQgaXQgc2hvdWxkIGJlIHVzZWQgKG5vdCBvbiBVbHRyaXgpLgorICAgKi8KKyN1bmRlZiBIQVZFX0FMTE9DQV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YnAtc3ltLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfQlBfU1lNX0gKKworLyogRGVmaW5lIGlmIHRoZSAnY2FsbG9jJyBmdW5jdGlvbiBpcyBQT1NJWCBjb21wbGlhbnQuICovCisjdW5kZWYgSEFWRV9DQUxMT0NfUE9TSVgKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjYXRnZXRzJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0NBVEdFVFMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIE1hYyBPUyBYIGZ1bmN0aW9uIENGTG9jYWxlQ29weUN1cnJlbnQgaW4gdGhlCisgICBDb3JlRm91bmRhdGlvbiBmcmFtZXdvcmsuICovCisjdW5kZWYgSEFWRV9DRkxPQ0FMRUNPUFlDVVJSRU5UCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBNYWMgT1MgWCBmdW5jdGlvbiBDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlIGluCisgICB0aGUgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLiAqLworI3VuZGVmIEhBVkVfQ0ZQUkVGRVJFTkNFU0NPUFlBUFBWQUxVRQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgY2xvY2tfdCcuICovCisjdW5kZWYgSEFWRV9DTE9DS19UCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY29uZnN0cicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9DT05GU1RSCisKKy8qIERlZmluZSBpZiB0aGUgY29weXNpZ25mIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGluIDxtYXRoLmg+IGFuZCBhdmFpbGFibGUgaW4KKyAgIGxpYmMuICovCisjdW5kZWYgSEFWRV9DT1BZU0lHTkZfSU5fTElCQworCisvKiBEZWZpbmUgaWYgdGhlIGNvcHlzaWdubCBmdW5jdGlvbiBpcyBkZWNsYXJlZCBpbiA8bWF0aC5oPiBhbmQgYXZhaWxhYmxlIGluCisgICBsaWJjLiAqLworI3VuZGVmIEhBVkVfQ09QWVNJR05MX0lOX0xJQkMKKworLyogRGVmaW5lIGlmIHRoZSBjb3B5c2lnbiBmdW5jdGlvbiBpcyBkZWNsYXJlZCBpbiA8bWF0aC5oPiBhbmQgYXZhaWxhYmxlIGluCisgICBsaWJjLiAqLworI3VuZGVmIEhBVkVfQ09QWVNJR05fSU5fTElCQworCisvKiBEZWZpbmUgaWYgdGhlIEdOVSBkY2dldHRleHQoKSBmdW5jdGlvbiBpcyBhbHJlYWR5IHByZXNlbnQgb3IgcHJlaW5zdGFsbGVkLgorICAgKi8KKyN1bmRlZiBIQVZFX0RDR0VUVEVYVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGNsZWFyZXJyX3VubG9ja2VkJywgYW5kIHRvIDAgaWYKKyAgIHlvdSBkb24ndC4gKi8KKyN1bmRlZiBIQVZFX0RFQ0xfQ0xFQVJFUlJfVU5MT0NLRUQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBjbG9jaycsIGFuZCB0byAwIGlmIHlvdSBkb24ndC4KKyAgICovCisjdW5kZWYgSEFWRV9ERUNMX0NMT0NLCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgY29weXNpZ24nLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI3VuZGVmIEhBVkVfREVDTF9DT1BZU0lHTgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGNvcHlzaWduZicsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjdW5kZWYgSEFWRV9ERUNMX0NPUFlTSUdORgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGNvcHlzaWdubCcsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjdW5kZWYgSEFWRV9ERUNMX0NPUFlTSUdOTAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGZlb2ZfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI3VuZGVmIEhBVkVfREVDTF9GRU9GX1VOTE9DS0VECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZmVycm9yX3VubG9ja2VkJywgYW5kIHRvIDAgaWYKKyAgIHlvdSBkb24ndC4gKi8KKyN1bmRlZiBIQVZFX0RFQ0xfRkVSUk9SX1VOTE9DS0VECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZmZsdXNoX3VubG9ja2VkJywgYW5kIHRvIDAgaWYKKyAgIHlvdSBkb24ndC4gKi8KKyN1bmRlZiBIQVZFX0RFQ0xfRkZMVVNIX1VOTE9DS0VECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZmdldHNfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZgorICAgeW91IGRvbid0LiAqLworI3VuZGVmIEhBVkVfREVDTF9GR0VUU19VTkxPQ0tFRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGZwdXRjX3VubG9ja2VkJywgYW5kIHRvIDAgaWYKKyAgIHlvdSBkb24ndC4gKi8KKyN1bmRlZiBIQVZFX0RFQ0xfRlBVVENfVU5MT0NLRUQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBmcHV0c191bmxvY2tlZCcsIGFuZCB0byAwIGlmCisgICB5b3UgZG9uJ3QuICovCisjdW5kZWYgSEFWRV9ERUNMX0ZQVVRTX1VOTE9DS0VECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZnJlYWRfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZgorICAgeW91IGRvbid0LiAqLworI3VuZGVmIEhBVkVfREVDTF9GUkVBRF9VTkxPQ0tFRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGZ3cml0ZV91bmxvY2tlZCcsIGFuZCB0byAwIGlmCisgICB5b3UgZG9uJ3QuICovCisjdW5kZWYgSEFWRV9ERUNMX0ZXUklURV9VTkxPQ0tFRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGdldGNoYXJfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZgorICAgeW91IGRvbid0LiAqLworI3VuZGVmIEhBVkVfREVDTF9HRVRDSEFSX1VOTE9DS0VECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZ2V0Y191bmxvY2tlZCcsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjdW5kZWYgSEFWRV9ERUNMX0dFVENfVU5MT0NLRUQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBnZXRkZWxpbScsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjdW5kZWYgSEFWRV9ERUNMX0dFVERFTElNCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZ2V0ZW52JywgYW5kIHRvIDAgaWYgeW91IGRvbid0LgorICAgKi8KKyN1bmRlZiBIQVZFX0RFQ0xfR0VURU5WCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZ2V0bGluZScsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjdW5kZWYgSEFWRV9ERUNMX0dFVExJTkUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBnZXRydXNhZ2UnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI3VuZGVmIEhBVkVfREVDTF9HRVRSVVNBR0UKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBpc3dibGFuaycsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjdW5kZWYgSEFWRV9ERUNMX0lTV0JMQU5LCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgbWJydG93YycsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjdW5kZWYgSEFWRV9ERUNMX01CUlRPV0MKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBtYnNpbml0JywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyN1bmRlZiBIQVZFX0RFQ0xfTUJTSU5JVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIGRlY2xhcmF0aW9uIG9mIG1ic3dpZHRoKCkgaW4gPHdjaGFyLmg+LCBhbmQgdG8gMAorICAgb3RoZXJ3aXNlLiAqLworI3VuZGVmIEhBVkVfREVDTF9NQlNXSURUSF9JTl9XQ0hBUl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgb2JzdGFja19wcmludGYnLCBhbmQgdG8gMCBpZgorICAgeW91IGRvbid0LiAqLworI3VuZGVmIEhBVkVfREVDTF9PQlNUQUNLX1BSSU5URgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHByb2dyYW1faW52b2NhdGlvbl9uYW1lJywgYW5kCisgICB0byAwIGlmIHlvdSBkb24ndC4gKi8KKyN1bmRlZiBIQVZFX0RFQ0xfUFJPR1JBTV9JTlZPQ0FUSU9OX05BTUUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZScsCisgICBhbmQgdG8gMCBpZiB5b3UgZG9uJ3QuICovCisjdW5kZWYgSEFWRV9ERUNMX1BST0dSQU1fSU5WT0NBVElPTl9TSE9SVF9OQU1FCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgcHV0Y2hhcl91bmxvY2tlZCcsIGFuZCB0byAwIGlmCisgICB5b3UgZG9uJ3QuICovCisjdW5kZWYgSEFWRV9ERUNMX1BVVENIQVJfVU5MT0NLRUQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBwdXRjX3VubG9ja2VkJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyN1bmRlZiBIQVZFX0RFQ0xfUFVUQ19VTkxPQ0tFRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHNucHJpbnRmJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyN1bmRlZiBIQVZFX0RFQ0xfU05QUklOVEYKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBzdHJkdXAnLCBhbmQgdG8gMCBpZiB5b3UgZG9uJ3QuCisgICAqLworI3VuZGVmIEhBVkVfREVDTF9TVFJEVVAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBzdHJlcnJvcl9yJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyN1bmRlZiBIQVZFX0RFQ0xfU1RSRVJST1JfUgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHN0cm5kdXAnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI3VuZGVmIEhBVkVfREVDTF9TVFJORFVQCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgc3RybmxlbicsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjdW5kZWYgSEFWRV9ERUNMX1NUUk5MRU4KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBzeXNjb25mJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyN1bmRlZiBIQVZFX0RFQ0xfU1lTQ09ORgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHRpbWVzJywgYW5kIHRvIDAgaWYgeW91IGRvbid0LgorICAgKi8KKyN1bmRlZiBIQVZFX0RFQ0xfVElNRVMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGB0b3dsb3dlcicsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjdW5kZWYgSEFWRV9ERUNMX1RPV0xPV0VSCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgdW5zZXRlbnYnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI3VuZGVmIEhBVkVfREVDTF9VTlNFVEVOVgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHZzbnByaW50ZicsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjdW5kZWYgSEFWRV9ERUNMX1ZTTlBSSU5URgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHdjd2lkdGgnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI3VuZGVmIEhBVkVfREVDTF9XQ1dJRFRICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgX3NucHJpbnRmJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyN1bmRlZiBIQVZFX0RFQ0xfX1NOUFJJTlRGCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgX19mcGVuZGluZycsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjdW5kZWYgSEFWRV9ERUNMX19fRlBFTkRJTkcKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlICdkdXAyJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0RVUDIKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBlbnZpcm9uLiAqLworI3VuZGVmIEhBVkVfRU5WSVJPTl9ERUNMCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmNudGwnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfRkNOVEwKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxmZWF0dXJlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0ZFQVRVUkVTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmbG9ja2ZpbGUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfRkxPQ0tGSUxFCisKKy8qIERlZmluZSBpZiB0aGUgZnJleHBsIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBpbiBsaWJjLiAqLworI3VuZGVmIEhBVkVfRlJFWFBMX0lOX0xJQkMKKworLyogRGVmaW5lIGlmIHRoZSBmcmV4cCBmdW5jdGlvbiBpcyBhdmFpbGFibGUgaW4gbGliYy4gKi8KKyN1bmRlZiBIQVZFX0ZSRVhQX0lOX0xJQkMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmdW5sb2NrZmlsZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9GVU5MT0NLRklMRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGRlbGltJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVERFTElNCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0ZHRhYmxlc2l6ZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVREVEFCTEVTSVpFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Z2V0b3B0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfR0VUT1BUX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRvcHRfbG9uZ19vbmx5JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVE9QVF9MT05HX09OTFkKKworLyogRGVmaW5lIGlmIHRoZSBHTlUgZ2V0dGV4dCgpIGZ1bmN0aW9uIGlzIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQuICovCisjdW5kZWYgSEFWRV9HRVRURVhUCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgaWNvbnYoKSBmdW5jdGlvbiBhbmQgaXQgd29ya3MuICovCisjdW5kZWYgSEFWRV9JQ09OVgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdpbnRtYXhfdCcgdHlwZSBpbiA8c3RkaW50Lmg+IG9yIDxpbnR0eXBlcy5oPi4gKi8KKyN1bmRlZiBIQVZFX0lOVE1BWF9UCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9JTlRUWVBFU19ICisKKy8qIERlZmluZSBpZiA8aW50dHlwZXMuaD4gZXhpc3RzLCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwgYW5kCisgICBkZWNsYXJlcyB1aW50bWF4X3QuICovCisjdW5kZWYgSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlzYXNjaWknIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfSVNBU0NJSQorCisvKiBEZWZpbmUgaWYgdGhlIGlzbmFuKGRvdWJsZSkgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGluIGxpYmMuICovCisjdW5kZWYgSEFWRV9JU05BTkRfSU5fTElCQworCisvKiBEZWZpbmUgaWYgdGhlIGlzbmFuKGZsb2F0KSBmdW5jdGlvbiBpcyBhdmFpbGFibGUgaW4gbGliYy4gKi8KKyN1bmRlZiBIQVZFX0lTTkFORl9JTl9MSUJDCisKKy8qIERlZmluZSBpZiB0aGUgaXNuYW4obG9uZyBkb3VibGUpIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBpbiBsaWJjLiAqLworI3VuZGVmIEhBVkVfSVNOQU5MX0lOX0xJQkMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpc3dibGFuaycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9JU1dCTEFOSworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlzd2NudHJsJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0lTV0NOVFJMCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSA8bGFuZ2luZm8uaD4gYW5kIG5sX2xhbmdpbmZvKENPREVTRVQpLiAqLworI3VuZGVmIEhBVkVfTEFOR0lORk9fQ09ERVNFVAorCisvKiBEZWZpbmUgaWYgdGhlIGxkZXhwbCgpIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZS4gKi8KKyN1bmRlZiBIQVZFX0xERVhQTAorCisvKiBEZWZpbmUgaWYgdGhlIGxkZXhwbCBmdW5jdGlvbiBpcyBhdmFpbGFibGUgaW4gbGliYy4gKi8KKyN1bmRlZiBIQVZFX0xERVhQTF9JTl9MSUJDCisKKy8qIERlZmluZSBpZiB0aGUgbGRleHAgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGluIGxpYmMuICovCisjdW5kZWYgSEFWRV9MREVYUF9JTl9MSUJDCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bG9jYWxlLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTE9DQUxFX0gKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgJ2xvbmcgbG9uZyBpbnQnLiAqLworI3VuZGVmIEhBVkVfTE9OR19MT05HX0lOVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxzdGF0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0xTVEFUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdXIgc3lzdGVtIGhhcyBhIEdOVSBsaWJjIGNvbXBhdGlibGUgJ21hbGxvYycgZnVuY3Rpb24sIGFuZAorICAgdG8gMCBvdGhlcndpc2UuICovCisjdW5kZWYgSEFWRV9NQUxMT0NfR05VCisKKy8qIERlZmluZSBpZiB0aGUgJ21hbGxvYycgZnVuY3Rpb24gaXMgUE9TSVggY29tcGxpYW50LiAqLworI3VuZGVmIEhBVkVfTUFMTE9DX1BPU0lYCisKKy8qIERlZmluZSB0byAxIGlmIG1tYXAoKSdzIE1BUF9BTk9OWU1PVVMgZmxhZyBpcyBhdmFpbGFibGUgYWZ0ZXIgaW5jbHVkaW5nCisgICBjb25maWcuaCBhbmQgPHN5cy9tbWFuLmg+LiAqLworI3VuZGVmIEhBVkVfTUFQX0FOT05ZTU9VUworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1hdGguaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9NQVRIX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtYnJ0b3djJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX01CUlRPV0MKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtYnNpbml0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX01CU0lOSVQKKworLyogRGVmaW5lIHRvIDEgaWYgPHdjaGFyLmg+IGRlY2xhcmVzIG1ic3RhdGVfdC4gKi8KKyN1bmRlZiBIQVZFX01CU1RBVEVfVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX01FTU9SWV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbXByb3RlY3QnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTVBST1RFQ1QKKworLyogRGVmaW5lIHRvIDEgb24gTVNWQyBwbGF0Zm9ybXMgdGhhdCBoYXZlIHRoZSAiaW52YWxpZCBwYXJhbWV0ZXIgaGFuZGxlciIKKyAgIGNvbmNlcHQuICovCisjdW5kZWYgSEFWRV9NU1ZDX0lOVkFMSURfUEFSQU1FVEVSX0hBTkRMRVIKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBubF9sYW5naW5mbycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9OTF9MQU5HSU5GTworCisvKiBEZWZpbmUgdG8gMSBpZiBsaWJjIGluY2x1ZGVzIG9ic3RhY2tzLiAqLworI3VuZGVmIEhBVkVfT0JTVEFDSworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG9ic3RhY2tfcHJpbnRmJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX09CU1RBQ0tfUFJJTlRGCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cGF0aHMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9QQVRIU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcGlwZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9QSVBFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcGlwZTInIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUElQRTIKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwb3NpeF9zcGF3bicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9QT1NJWF9TUEFXTgorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgcG9zaXhfc3Bhd25hdHRyX3QnLiAqLworI3VuZGVmIEhBVkVfUE9TSVhfU1BBV05BVFRSX1QKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190Jy4gKi8KKyN1bmRlZiBIQVZFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19UCisKKy8qIERlZmluZSBpZiB0aGUgPHB0aHJlYWQuaD4gZGVmaW5lcyBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRS4gKi8KKyN1bmRlZiBIQVZFX1BUSFJFQURfTVVURVhfUkVDVVJTSVZFCisKKy8qIERlZmluZSBpZiB0aGUgUE9TSVggbXVsdGl0aHJlYWRpbmcgbGlicmFyeSBoYXMgcmVhZC93cml0ZSBsb2Nrcy4gKi8KKyN1bmRlZiBIQVZFX1BUSFJFQURfUldMT0NLCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmFpc2UnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUkFJU0UKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByYXdtZW1jaHInIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUkFXTUVNQ0hSCisKKy8qIERlZmluZSB0byAxIGlmIGFjb3NmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9BQ09TRgorCisvKiBEZWZpbmUgdG8gMSBpZiBhY29zbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfQUNPU0wKKworLyogRGVmaW5lIHRvIDEgaWYgYXNpbmYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0FTSU5GCisKKy8qIERlZmluZSB0byAxIGlmIGFzaW5sIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9BU0lOTAorCisvKiBEZWZpbmUgdG8gMSBpZiBhdGFuZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfQVRBTkYKKworLyogRGVmaW5lIHRvIDEgaWYgYXRhbmwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0FUQU5MCisKKy8qIERlZmluZSB0byAxIGlmIGF0b2xsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9BVE9MTAorCisvKiBEZWZpbmUgdG8gMSBpZiBidG93YyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfQlRPV0MKKworLyogRGVmaW5lIHRvIDEgaWYgY2Fub25pY2FsaXplX2ZpbGVfbmFtZSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcKKyAgIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0NBTk9OSUNBTElaRV9GSUxFX05BTUUKKworLyogRGVmaW5lIHRvIDEgaWYgY2JydCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfQ0JSVAorCisvKiBEZWZpbmUgdG8gMSBpZiBjYnJ0ZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfQ0JSVEYKKworLyogRGVmaW5lIHRvIDEgaWYgY2JydGwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0NCUlRMCisKKy8qIERlZmluZSB0byAxIGlmIGNlaWxmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9DRUlMRgorCisvKiBEZWZpbmUgdG8gMSBpZiBjZWlsbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfQ0VJTEwKKworLyogRGVmaW5lIHRvIDEgaWYgY2hkaXIgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0NIRElSCisKKy8qIERlZmluZSB0byAxIGlmIGNob3duIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9DSE9XTgorCisvKiBEZWZpbmUgdG8gMSBpZiBjb3B5c2lnbiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfQ09QWVNJR04KKworLyogRGVmaW5lIHRvIDEgaWYgY29weXNpZ25mIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9DT1BZU0lHTkYKKworLyogRGVmaW5lIHRvIDEgaWYgY29weXNpZ25sIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9DT1BZU0lHTkwKKworLyogRGVmaW5lIHRvIDEgaWYgY29zZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfQ09TRgorCisvKiBEZWZpbmUgdG8gMSBpZiBjb3NoZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfQ09TSEYKKworLyogRGVmaW5lIHRvIDEgaWYgY29zbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfQ09TTAorCisvKiBEZWZpbmUgdG8gMSBpZiBkcHJpbnRmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9EUFJJTlRGCisKKy8qIERlZmluZSB0byAxIGlmIGR1cCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfRFVQCisKKy8qIERlZmluZSB0byAxIGlmIGR1cDIgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0RVUDIKKworLyogRGVmaW5lIHRvIDEgaWYgZHVwMyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfRFVQMworCisvKiBEZWZpbmUgdG8gMSBpZiBlbmR1c2Vyc2hlbGwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0VORFVTRVJTSEVMTAorCisvKiBEZWZpbmUgdG8gMSBpZiBlbnZpcm9uIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9FTlZJUk9OCisKKy8qIERlZmluZSB0byAxIGlmIGV1aWRhY2Nlc3MgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0VVSURBQ0NFU1MKKworLyogRGVmaW5lIHRvIDEgaWYgZXhwMiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfRVhQMgorCisvKiBEZWZpbmUgdG8gMSBpZiBleHAyZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfRVhQMkYKKworLyogRGVmaW5lIHRvIDEgaWYgZXhwMmwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0VYUDJMCisKKy8qIERlZmluZSB0byAxIGlmIGV4cGYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0VYUEYKKworLyogRGVmaW5lIHRvIDEgaWYgZXhwbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfRVhQTAorCisvKiBEZWZpbmUgdG8gMSBpZiBleHBtMSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfRVhQTTEKKworLyogRGVmaW5lIHRvIDEgaWYgZXhwbTFmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9FWFBNMUYKKworLyogRGVmaW5lIHRvIDEgaWYgZXhwbTFsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9FWFBNMUwKKworLyogRGVmaW5lIHRvIDEgaWYgZmFic2YgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0ZBQlNGCisKKy8qIERlZmluZSB0byAxIGlmIGZhYnNsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9GQUJTTAorCisvKiBEZWZpbmUgdG8gMSBpZiBmYWNjZXNzYXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0ZBQ0NFU1NBVAorCisvKiBEZWZpbmUgdG8gMSBpZiBmY2hkaXIgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0ZDSERJUgorCisvKiBEZWZpbmUgdG8gMSBpZiBmY2htb2RhdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfRkNITU9EQVQKKworLyogRGVmaW5lIHRvIDEgaWYgZmNob3duYXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0ZDSE9XTkFUCisKKy8qIERlZmluZSB0byAxIGlmIGZjbnRsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9GQ05UTAorCisvKiBEZWZpbmUgdG8gMSBpZiBmZGF0YXN5bmMgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0ZEQVRBU1lOQworCisvKiBEZWZpbmUgdG8gMSBpZiBmZnNsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9GRlNMCisKKy8qIERlZmluZSB0byAxIGlmIGZmc2xsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9GRlNMTAorCisvKiBEZWZpbmUgdG8gMSBpZiBmbG9vcmYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0ZMT09SRgorCisvKiBEZWZpbmUgdG8gMSBpZiBmbG9vcmwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0ZMT09STAorCisvKiBEZWZpbmUgdG8gMSBpZiBmbWEgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0ZNQQorCisvKiBEZWZpbmUgdG8gMSBpZiBmbWFmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9GTUFGCisKKy8qIERlZmluZSB0byAxIGlmIGZtYWwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0ZNQUwKKworLyogRGVmaW5lIHRvIDEgaWYgZm1vZCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfRk1PRAorCisvKiBEZWZpbmUgdG8gMSBpZiBmbW9kZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfRk1PREYKKworLyogRGVmaW5lIHRvIDEgaWYgZm1vZGwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0ZNT0RMCisKKy8qIERlZmluZSB0byAxIGlmIGZwdXJnZSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfRlBVUkdFCisKKy8qIERlZmluZSB0byAxIGlmIGZyZXhwZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfRlJFWFBGCisKKy8qIERlZmluZSB0byAxIGlmIGZyZXhwbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfRlJFWFBMCisKKy8qIERlZmluZSB0byAxIGlmIGZzZWVrbyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfRlNFRUtPCisKKy8qIERlZmluZSB0byAxIGlmIGZzdGF0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9GU1RBVAorCisvKiBEZWZpbmUgdG8gMSBpZiBmc3RhdGF0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9GU1RBVEFUCisKKy8qIERlZmluZSB0byAxIGlmIGZzeW5jIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9GU1lOQworCisvKiBEZWZpbmUgdG8gMSBpZiBmdGVsbG8gaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0ZURUxMTworCisvKiBEZWZpbmUgdG8gMSBpZiBmdHJ1bmNhdGUgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0ZUUlVOQ0FURQorCisvKiBEZWZpbmUgdG8gMSBpZiBmdXRpbWVucyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfRlVUSU1FTlMKKworLyogRGVmaW5lIHRvIDEgaWYgZ2V0Y3dkIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9HRVRDV0QKKworLyogRGVmaW5lIHRvIDEgaWYgZ2V0ZGVsaW0gaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0dFVERFTElNCisKKy8qIERlZmluZSB0byAxIGlmIGdldGRvbWFpbm5hbWUgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0dFVERPTUFJTk5BTUUKKworLyogRGVmaW5lIHRvIDEgaWYgZ2V0ZHRhYmxlc2l6ZSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfR0VURFRBQkxFU0laRQorCisvKiBEZWZpbmUgdG8gMSBpZiBnZXRncm91cHMgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0dFVEdST1VQUworCisvKiBEZWZpbmUgdG8gMSBpZiBnZXRob3N0bmFtZSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfR0VUSE9TVE5BTUUKKworLyogRGVmaW5lIHRvIDEgaWYgZ2V0bGluZSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfR0VUTElORQorCisvKiBEZWZpbmUgdG8gMSBpZiBnZXRsb2FkYXZnIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9HRVRMT0FEQVZHCisKKy8qIERlZmluZSB0byAxIGlmIGdldGxvZ2luIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9HRVRMT0dJTgorCisvKiBEZWZpbmUgdG8gMSBpZiBnZXRsb2dpbl9yIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9HRVRMT0dJTl9SCisKKy8qIERlZmluZSB0byAxIGlmIGdldHBhZ2VzaXplIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9HRVRQQUdFU0laRQorCisvKiBEZWZpbmUgdG8gMSBpZiBnZXRzIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9HRVRTCisKKy8qIERlZmluZSB0byAxIGlmIGdldHN1Ym9wdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfR0VUU1VCT1BUCisKKy8qIERlZmluZSB0byAxIGlmIGdldHVzZXJzaGVsbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfR0VUVVNFUlNIRUxMCisKKy8qIERlZmluZSB0byAxIGlmIGdyYW50cHQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0dSQU5UUFQKKworLyogRGVmaW5lIHRvIDEgaWYgZ3JvdXBfbWVtYmVyIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9HUk9VUF9NRU1CRVIKKworLyogRGVmaW5lIHRvIDEgaWYgaHlwb3RmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9IWVBPVEYKKworLyogRGVmaW5lIHRvIDEgaWYgaHlwb3RsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9IWVBPVEwKKworLyogRGVmaW5lIHRvIDEgaWYgaWxvZ2IgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0lMT0dCCisKKy8qIERlZmluZSB0byAxIGlmIGlsb2diZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfSUxPR0JGCisKKy8qIERlZmluZSB0byAxIGlmIGlsb2dibCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfSUxPR0JMCisKKy8qIERlZmluZSB0byAxIGlmIGltYXhhYnMgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0lNQVhBQlMKKworLyogRGVmaW5lIHRvIDEgaWYgaW1heGRpdiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfSU1BWERJVgorCisvKiBEZWZpbmUgdG8gMSBpZiBpbml0c3RhdGUgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0lOSVRTVEFURQorCisvKiBEZWZpbmUgdG8gMSBpZiBpbml0c3RhdGVfciBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfSU5JVFNUQVRFX1IKKworLyogRGVmaW5lIHRvIDEgaWYgaXNhdHR5IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9JU0FUVFkKKworLyogRGVmaW5lIHRvIDEgaWYgaXN3Y3R5cGUgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0lTV0NUWVBFCisKKy8qIERlZmluZSB0byAxIGlmIGxjaG1vZCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfTENITU9ECisKKy8qIERlZmluZSB0byAxIGlmIGxjaG93biBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfTENIT1dOCisKKy8qIERlZmluZSB0byAxIGlmIGxkZXhwZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfTERFWFBGCisKKy8qIERlZmluZSB0byAxIGlmIGxkZXhwbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfTERFWFBMCisKKy8qIERlZmluZSB0byAxIGlmIGxpbmsgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0xJTksKKworLyogRGVmaW5lIHRvIDEgaWYgbGlua2F0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9MSU5LQVQKKworLyogRGVmaW5lIHRvIDEgaWYgbG9nIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9MT0cKKworLyogRGVmaW5lIHRvIDEgaWYgbG9nMTAgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0xPRzEwCisKKy8qIERlZmluZSB0byAxIGlmIGxvZzEwZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfTE9HMTBGCisKKy8qIERlZmluZSB0byAxIGlmIGxvZzEwbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfTE9HMTBMCisKKy8qIERlZmluZSB0byAxIGlmIGxvZzFwIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9MT0cxUAorCisvKiBEZWZpbmUgdG8gMSBpZiBsb2cxcGYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0xPRzFQRgorCisvKiBEZWZpbmUgdG8gMSBpZiBsb2cxcGwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0xPRzFQTAorCisvKiBEZWZpbmUgdG8gMSBpZiBsb2cyIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9MT0cyCisKKy8qIERlZmluZSB0byAxIGlmIGxvZzJmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9MT0cyRgorCisvKiBEZWZpbmUgdG8gMSBpZiBsb2cybCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfTE9HMkwKKworLyogRGVmaW5lIHRvIDEgaWYgbG9nYiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfTE9HQgorCisvKiBEZWZpbmUgdG8gMSBpZiBsb2diZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfTE9HQkYKKworLyogRGVmaW5lIHRvIDEgaWYgbG9nYmwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0xPR0JMCisKKy8qIERlZmluZSB0byAxIGlmIGxvZ2YgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0xPR0YKKworLyogRGVmaW5lIHRvIDEgaWYgbG9nbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfTE9HTAorCisvKiBEZWZpbmUgdG8gMSBpZiBsc2VlayBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfTFNFRUsKKworLyogRGVmaW5lIHRvIDEgaWYgbHN0YXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX0xTVEFUCisKKy8qIERlZmluZSB0byAxIGlmIG1icmxlbiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfTUJSTEVOCisKKy8qIERlZmluZSB0byAxIGlmIG1icnRvd2MgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX01CUlRPV0MKKworLyogRGVmaW5lIHRvIDEgaWYgbWJzaW5pdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfTUJTSU5JVAorCisvKiBEZWZpbmUgdG8gMSBpZiBtYnNucnRvd2NzIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9NQlNOUlRPV0NTCisKKy8qIERlZmluZSB0byAxIGlmIG1ic3J0b3djcyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfTUJTUlRPV0NTCisKKy8qIERlZmluZSB0byAxIGlmIG1lbW1lbSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfTUVNTUVNCisKKy8qIERlZmluZSB0byAxIGlmIG1lbXBjcHkgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX01FTVBDUFkKKworLyogRGVmaW5lIHRvIDEgaWYgbWVtcmNociBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfTUVNUkNIUgorCisvKiBEZWZpbmUgdG8gMSBpZiBta2RpcmF0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9NS0RJUkFUCisKKy8qIERlZmluZSB0byAxIGlmIG1rZHRlbXAgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX01LRFRFTVAKKworLyogRGVmaW5lIHRvIDEgaWYgbWtmaWZvIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9NS0ZJRk8KKworLyogRGVmaW5lIHRvIDEgaWYgbWtmaWZvYXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX01LRklGT0FUCisKKy8qIERlZmluZSB0byAxIGlmIG1rbm9kIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9NS05PRAorCisvKiBEZWZpbmUgdG8gMSBpZiBta25vZGF0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9NS05PREFUCisKKy8qIERlZmluZSB0byAxIGlmIG1rb3N0ZW1wIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9NS09TVEVNUAorCisvKiBEZWZpbmUgdG8gMSBpZiBta29zdGVtcHMgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX01LT1NURU1QUworCisvKiBEZWZpbmUgdG8gMSBpZiBta3N0ZW1wIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9NS1NURU1QCisKKy8qIERlZmluZSB0byAxIGlmIG1rc3RlbXBzIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9NS1NURU1QUworCisvKiBEZWZpbmUgdG8gMSBpZiBtb2RmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9NT0RGCisKKy8qIERlZmluZSB0byAxIGlmIG1vZGZmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9NT0RGRgorCisvKiBEZWZpbmUgdG8gMSBpZiBtb2RmbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfTU9ERkwKKworLyogRGVmaW5lIHRvIDEgaWYgb3BlbmF0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9PUEVOQVQKKworLyogRGVmaW5lIHRvIDEgaWYgcGNsb3NlIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9QQ0xPU0UKKworLyogRGVmaW5lIHRvIDEgaWYgcGlwZSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfUElQRQorCisvKiBEZWZpbmUgdG8gMSBpZiBwaXBlMiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfUElQRTIKKworLyogRGVmaW5lIHRvIDEgaWYgcG9wZW4gaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1BPUEVOCisKKy8qIERlZmluZSB0byAxIGlmIHBvc2l4X29wZW5wdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfUE9TSVhfT1BFTlBUCisKKy8qIERlZmluZSB0byAxIGlmIHBvc2l4X3NwYXduIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTgorCisvKiBEZWZpbmUgdG8gMSBpZiBwb3NpeF9zcGF3bmF0dHJfZGVzdHJveSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcKKyAgIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9ERVNUUk9ZCisKKy8qIERlZmluZSB0byAxIGlmIHBvc2l4X3NwYXduYXR0cl9nZXRmbGFncyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcKKyAgIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9HRVRGTEFHUworCisvKiBEZWZpbmUgdG8gMSBpZiBwb3NpeF9zcGF3bmF0dHJfZ2V0cGdyb3VwIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZworICAgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05BVFRSX0dFVFBHUk9VUAorCisvKiBEZWZpbmUgdG8gMSBpZiBwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwYXJhbSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyCisgICB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBBUkFNCisKKy8qIERlZmluZSB0byAxIGlmIHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBvbGljeSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyCisgICB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBPTElDWQorCisvKiBEZWZpbmUgdG8gMSBpZiBwb3NpeF9zcGF3bmF0dHJfZ2V0c2lnZGVmYXVsdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyCisgICB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdERUZBVUxUCisKKy8qIERlZmluZSB0byAxIGlmIHBvc2l4X3NwYXduYXR0cl9nZXRzaWdtYXNrIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZworICAgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05BVFRSX0dFVFNJR01BU0sKKworLyogRGVmaW5lIHRvIDEgaWYgcG9zaXhfc3Bhd25hdHRyX2luaXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nCisgICBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfSU5JVAorCisvKiBEZWZpbmUgdG8gMSBpZiBwb3NpeF9zcGF3bmF0dHJfc2V0ZmxhZ3MgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nCisgICBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfU0VURkxBR1MKKworLyogRGVmaW5lIHRvIDEgaWYgcG9zaXhfc3Bhd25hdHRyX3NldHBncm91cCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcKKyAgIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9TRVRQR1JPVVAKKworLyogRGVmaW5lIHRvIDEgaWYgcG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcGFyYW0gaXMgZGVjbGFyZWQgZXZlbiBhZnRlcgorICAgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQQVJBTQorCisvKiBEZWZpbmUgdG8gMSBpZiBwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwb2xpY3kgaXMgZGVjbGFyZWQgZXZlbiBhZnRlcgorICAgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQT0xJQ1kKKworLyogRGVmaW5lIHRvIDEgaWYgcG9zaXhfc3Bhd25hdHRyX3NldHNpZ2RlZmF1bHQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlcgorICAgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfU0VUU0lHREVGQVVMVAorCisvKiBEZWZpbmUgdG8gMSBpZiBwb3NpeF9zcGF3bmF0dHJfc2V0c2lnbWFzayBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcKKyAgIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9TRVRTSUdNQVNLCisKKy8qIERlZmluZSB0byAxIGlmIHBvc2l4X3NwYXducCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05QCisKKy8qIERlZmluZSB0byAxIGlmIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyCisgICB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRQorCisvKiBEZWZpbmUgdG8gMSBpZiBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkZHVwMiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyCisgICB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BREREVVAyCisKKy8qIERlZmluZSB0byAxIGlmIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIKKyAgIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU4KKworLyogRGVmaW5lIHRvIDEgaWYgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3kgaXMgZGVjbGFyZWQgZXZlbiBhZnRlcgorICAgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfREVTVFJPWQorCisvKiBEZWZpbmUgdG8gMSBpZiBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfaW5pdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyCisgICB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19JTklUCisKKy8qIERlZmluZSB0byAxIGlmIHBvd2YgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1BPV0YKKworLyogRGVmaW5lIHRvIDEgaWYgcHJlYWQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1BSRUFECisKKy8qIERlZmluZSB0byAxIGlmIHB0aHJlYWRfc2lnbWFzayBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfUFRIUkVBRF9TSUdNQVNLCisKKy8qIERlZmluZSB0byAxIGlmIHB0c25hbWUgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1BUU05BTUUKKworLyogRGVmaW5lIHRvIDEgaWYgcHRzbmFtZV9yIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9QVFNOQU1FX1IKKworLyogRGVmaW5lIHRvIDEgaWYgcHdyaXRlIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9QV1JJVEUKKworLyogRGVmaW5lIHRvIDEgaWYgcmFuZG9tIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9SQU5ET00KKworLyogRGVmaW5lIHRvIDEgaWYgcmFuZG9tX3IgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1JBTkRPTV9SCisKKy8qIERlZmluZSB0byAxIGlmIHJhd21lbWNociBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfUkFXTUVNQ0hSCisKKy8qIERlZmluZSB0byAxIGlmIHJlYWRsaW5rIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9SRUFETElOSworCisvKiBEZWZpbmUgdG8gMSBpZiByZWFkbGlua2F0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9SRUFETElOS0FUCisKKy8qIERlZmluZSB0byAxIGlmIHJlYWxwYXRoIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9SRUFMUEFUSAorCisvKiBEZWZpbmUgdG8gMSBpZiByZW1haW5kZXIgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1JFTUFJTkRFUgorCisvKiBEZWZpbmUgdG8gMSBpZiByZW1haW5kZXJmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9SRU1BSU5ERVJGCisKKy8qIERlZmluZSB0byAxIGlmIHJlbWFpbmRlcmwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1JFTUFJTkRFUkwKKworLyogRGVmaW5lIHRvIDEgaWYgcmVuYW1lYXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1JFTkFNRUFUCisKKy8qIERlZmluZSB0byAxIGlmIHJpbnQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1JJTlQKKworLyogRGVmaW5lIHRvIDEgaWYgcmludGYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1JJTlRGCisKKy8qIERlZmluZSB0byAxIGlmIHJpbnRsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9SSU5UTAorCisvKiBEZWZpbmUgdG8gMSBpZiBybWRpciBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfUk1ESVIKKworLyogRGVmaW5lIHRvIDEgaWYgcm91bmQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1JPVU5ECisKKy8qIERlZmluZSB0byAxIGlmIHJvdW5kZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfUk9VTkRGCisKKy8qIERlZmluZSB0byAxIGlmIHJvdW5kbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfUk9VTkRMCisKKy8qIERlZmluZSB0byAxIGlmIHJwbWF0Y2ggaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1JQTUFUQ0gKKworLyogRGVmaW5lIHRvIDEgaWYgc2V0ZW52IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9TRVRFTlYKKworLyogRGVmaW5lIHRvIDEgaWYgc2V0aG9zdG5hbWUgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1NFVEhPU1ROQU1FCisKKy8qIERlZmluZSB0byAxIGlmIHNldHN0YXRlIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9TRVRTVEFURQorCisvKiBEZWZpbmUgdG8gMSBpZiBzZXRzdGF0ZV9yIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9TRVRTVEFURV9SCisKKy8qIERlZmluZSB0byAxIGlmIHNldHVzZXJzaGVsbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfU0VUVVNFUlNIRUxMCisKKy8qIERlZmluZSB0byAxIGlmIHNpZ2FjdGlvbiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfU0lHQUNUSU9OCisKKy8qIERlZmluZSB0byAxIGlmIHNpZ2FkZHNldCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfU0lHQUREU0VUCisKKy8qIERlZmluZSB0byAxIGlmIHNpZ2RlbHNldCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfU0lHREVMU0VUCisKKy8qIERlZmluZSB0byAxIGlmIHNpZ2VtcHR5c2V0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9TSUdFTVBUWVNFVAorCisvKiBEZWZpbmUgdG8gMSBpZiBzaWdmaWxsc2V0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9TSUdGSUxMU0VUCisKKy8qIERlZmluZSB0byAxIGlmIHNpZ2lzbWVtYmVyIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9TSUdJU01FTUJFUgorCisvKiBEZWZpbmUgdG8gMSBpZiBzaWdwZW5kaW5nIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9TSUdQRU5ESU5HCisKKy8qIERlZmluZSB0byAxIGlmIHNpZ3Byb2NtYXNrIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9TSUdQUk9DTUFTSworCisvKiBEZWZpbmUgdG8gMSBpZiBzaW5mIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9TSU5GCisKKy8qIERlZmluZSB0byAxIGlmIHNpbmhmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9TSU5IRgorCisvKiBEZWZpbmUgdG8gMSBpZiBzaW5sIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9TSU5MCisKKy8qIERlZmluZSB0byAxIGlmIHNsZWVwIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9TTEVFUAorCisvKiBEZWZpbmUgdG8gMSBpZiBzbnByaW50ZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfU05QUklOVEYKKworLyogRGVmaW5lIHRvIDEgaWYgc3FydGYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1NRUlRGCisKKy8qIERlZmluZSB0byAxIGlmIHNxcnRsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9TUVJUTAorCisvKiBEZWZpbmUgdG8gMSBpZiBzcmFuZG9tIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9TUkFORE9NCisKKy8qIERlZmluZSB0byAxIGlmIHNyYW5kb21fciBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfU1JBTkRPTV9SCisKKy8qIERlZmluZSB0byAxIGlmIHN0YXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1NUQVQKKworLyogRGVmaW5lIHRvIDEgaWYgc3RwY3B5IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9TVFBDUFkKKworLyogRGVmaW5lIHRvIDEgaWYgc3RwbmNweSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfU1RQTkNQWQorCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJjYXNlc3RyIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9TVFJDQVNFU1RSCisKKy8qIERlZmluZSB0byAxIGlmIHN0cmNocm51bCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfU1RSQ0hSTlVMCisKKy8qIERlZmluZSB0byAxIGlmIHN0cmR1cCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfU1RSRFVQCisKKy8qIERlZmluZSB0byAxIGlmIHN0cmVycm9yX3IgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1NUUkVSUk9SX1IKKworLyogRGVmaW5lIHRvIDEgaWYgc3RybmNhdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfU1RSTkNBVAorCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJuZHVwIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9TVFJORFVQCisKKy8qIERlZmluZSB0byAxIGlmIHN0cm5sZW4gaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1NUUk5MRU4KKworLyogRGVmaW5lIHRvIDEgaWYgc3RycGJyayBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfU1RSUEJSSworCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJzZXAgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1NUUlNFUAorCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJzaWduYWwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1NUUlNJR05BTAorCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJ0b2QgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1NUUlRPRAorCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJ0b2ltYXggaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1NUUlRPSU1BWAorCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJ0b2tfciBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfU1RSVE9LX1IKKworLyogRGVmaW5lIHRvIDEgaWYgc3RydG9sbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfU1RSVE9MTAorCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJ0b3VsbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfU1RSVE9VTEwKKworLyogRGVmaW5lIHRvIDEgaWYgc3RydG91bWF4IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9TVFJUT1VNQVgKKworLyogRGVmaW5lIHRvIDEgaWYgc3RydmVyc2NtcCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfU1RSVkVSU0NNUAorCisvKiBEZWZpbmUgdG8gMSBpZiBzeW1saW5rIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9TWU1MSU5LCisKKy8qIERlZmluZSB0byAxIGlmIHN5bWxpbmthdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfU1lNTElOS0FUCisKKy8qIERlZmluZSB0byAxIGlmIHRhbmYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1RBTkYKKworLyogRGVmaW5lIHRvIDEgaWYgdGFuaGYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1RBTkhGCisKKy8qIERlZmluZSB0byAxIGlmIHRhbmwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1RBTkwKKworLyogRGVmaW5lIHRvIDEgaWYgdG1wZmlsZSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfVE1QRklMRQorCisvKiBEZWZpbmUgdG8gMSBpZiB0b3djdHJhbnMgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1RPV0NUUkFOUworCisvKiBEZWZpbmUgdG8gMSBpZiB0cnVuYyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfVFJVTkMKKworLyogRGVmaW5lIHRvIDEgaWYgdHJ1bmNmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9UUlVOQ0YKKworLyogRGVmaW5lIHRvIDEgaWYgdHJ1bmNsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9UUlVOQ0wKKworLyogRGVmaW5lIHRvIDEgaWYgdHR5bmFtZV9yIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9UVFlOQU1FX1IKKworLyogRGVmaW5lIHRvIDEgaWYgdW5saW5rIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9VTkxJTksKKworLyogRGVmaW5lIHRvIDEgaWYgdW5saW5rYXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1VOTElOS0FUCisKKy8qIERlZmluZSB0byAxIGlmIHVubG9ja3B0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9VTkxPQ0tQVAorCisvKiBEZWZpbmUgdG8gMSBpZiB1bnNldGVudiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfVU5TRVRFTlYKKworLyogRGVmaW5lIHRvIDEgaWYgdXNsZWVwIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9VU0xFRVAKKworLyogRGVmaW5lIHRvIDEgaWYgdXRpbWVuc2F0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9VVElNRU5TQVQKKworLyogRGVmaW5lIHRvIDEgaWYgdmRwcmludGYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1ZEUFJJTlRGCisKKy8qIERlZmluZSB0byAxIGlmIHZzbnByaW50ZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfVlNOUFJJTlRGCisKKy8qIERlZmluZSB0byAxIGlmIHdhaXRwaWQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1dBSVRQSUQKKworLyogRGVmaW5lIHRvIDEgaWYgd2NwY3B5IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9XQ1BDUFkKKworLyogRGVmaW5lIHRvIDEgaWYgd2NwbmNweSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfV0NQTkNQWQorCisvKiBEZWZpbmUgdG8gMSBpZiB3Y3J0b21iIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9XQ1JUT01CCisKKy8qIERlZmluZSB0byAxIGlmIHdjc2Nhc2VjbXAgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1dDU0NBU0VDTVAKKworLyogRGVmaW5lIHRvIDEgaWYgd2NzY2F0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9XQ1NDQVQKKworLyogRGVmaW5lIHRvIDEgaWYgd2NzY2hyIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9XQ1NDSFIKKworLyogRGVmaW5lIHRvIDEgaWYgd2NzY21wIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9XQ1NDTVAKKworLyogRGVmaW5lIHRvIDEgaWYgd2NzY29sbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfV0NTQ09MTAorCisvKiBEZWZpbmUgdG8gMSBpZiB3Y3NjcHkgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1dDU0NQWQorCisvKiBEZWZpbmUgdG8gMSBpZiB3Y3Njc3BuIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9XQ1NDU1BOCisKKy8qIERlZmluZSB0byAxIGlmIHdjc2R1cCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfV0NTRFVQCisKKy8qIERlZmluZSB0byAxIGlmIHdjc2xlbiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfV0NTTEVOCisKKy8qIERlZmluZSB0byAxIGlmIHdjc25jYXNlY21wIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9XQ1NOQ0FTRUNNUAorCisvKiBEZWZpbmUgdG8gMSBpZiB3Y3NuY2F0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9XQ1NOQ0FUCisKKy8qIERlZmluZSB0byAxIGlmIHdjc25jbXAgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1dDU05DTVAKKworLyogRGVmaW5lIHRvIDEgaWYgd2NzbmNweSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfV0NTTkNQWQorCisvKiBEZWZpbmUgdG8gMSBpZiB3Y3NubGVuIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9XQ1NOTEVOCisKKy8qIERlZmluZSB0byAxIGlmIHdjc25ydG9tYnMgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1dDU05SVE9NQlMKKworLyogRGVmaW5lIHRvIDEgaWYgd2NzcGJyayBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfV0NTUEJSSworCisvKiBEZWZpbmUgdG8gMSBpZiB3Y3NyY2hyIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9XQ1NSQ0hSCisKKy8qIERlZmluZSB0byAxIGlmIHdjc3J0b21icyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfV0NTUlRPTUJTCisKKy8qIERlZmluZSB0byAxIGlmIHdjc3NwbiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfV0NTU1BOCisKKy8qIERlZmluZSB0byAxIGlmIHdjc3N0ciBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfV0NTU1RSCisKKy8qIERlZmluZSB0byAxIGlmIHdjc3RvayBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfV0NTVE9LCisKKy8qIERlZmluZSB0byAxIGlmIHdjc3dpZHRoIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9XQ1NXSURUSAorCisvKiBEZWZpbmUgdG8gMSBpZiB3Y3N4ZnJtIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9XQ1NYRlJNCisKKy8qIERlZmluZSB0byAxIGlmIHdjdG9iIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9XQ1RPQgorCisvKiBEZWZpbmUgdG8gMSBpZiB3Y3RyYW5zIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9XQ1RSQU5TCisKKy8qIERlZmluZSB0byAxIGlmIHdjdHlwZSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfV0NUWVBFCisKKy8qIERlZmluZSB0byAxIGlmIHdjd2lkdGggaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1dDV0lEVEgKKworLyogRGVmaW5lIHRvIDEgaWYgd21lbWNociBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI3VuZGVmIEhBVkVfUkFXX0RFQ0xfV01FTUNIUgorCisvKiBEZWZpbmUgdG8gMSBpZiB3bWVtY21wIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjdW5kZWYgSEFWRV9SQVdfREVDTF9XTUVNQ01QCisKKy8qIERlZmluZSB0byAxIGlmIHdtZW1jcHkgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1dNRU1DUFkKKworLyogRGVmaW5lIHRvIDEgaWYgd21lbW1vdmUgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1dNRU1NT1ZFCisKKy8qIERlZmluZSB0byAxIGlmIHdtZW1zZXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX1dNRU1TRVQKKworLyogRGVmaW5lIHRvIDEgaWYgX0V4aXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyN1bmRlZiBIQVZFX1JBV19ERUNMX19FWElUCisKKy8qIERlZmluZSBpZiB0aGUgJ3JlYWxsb2MnIGZ1bmN0aW9uIGlzIFBPU0lYIGNvbXBsaWFudC4gKi8KKyN1bmRlZiBIQVZFX1JFQUxMT0NfUE9TSVgKKworLyogRGVmaW5lIHRvIDEgaWYgJ2xvbmcgZG91YmxlJyBhbmQgJ2RvdWJsZScgaGF2ZSB0aGUgc2FtZSByZXByZXNlbnRhdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NBTUVfTE9OR19ET1VCTEVfQVNfRE9VQkxFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c2NoZWQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TQ0hFRF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2NoZWRfc2V0cGFyYW0nIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0NIRURfU0VUUEFSQU0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzY2hlZF9zZXRzY2hlZHVsZXInIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0NIRURfU0VUU0NIRURVTEVSCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0ZWdpZCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TRVRFR0lECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0ZXVpZCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TRVRFVUlECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0bG9jYWxlJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NFVExPQ0FMRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ2FjdGlvbicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TSUdBQ1RJT04KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzaWdhbHRzdGFjaycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TSUdBTFRTVEFDSworCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgc2lnaW5mb190Jy4gKi8KKyN1bmRlZiBIQVZFX1NJR0lORk9fVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ2ludGVycnVwdCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TSUdJTlRFUlJVUFQKKworLyogRGVmaW5lIHRvIDEgaWYgJ3NpZ19hdG9taWNfdCcgaXMgYSBzaWduZWQgaW50ZWdlciB0eXBlLiAqLworI3VuZGVmIEhBVkVfU0lHTkVEX1NJR19BVE9NSUNfVAorCisvKiBEZWZpbmUgdG8gMSBpZiAnd2NoYXJfdCcgaXMgYSBzaWduZWQgaW50ZWdlciB0eXBlLiAqLworI3VuZGVmIEhBVkVfU0lHTkVEX1dDSEFSX1QKKworLyogRGVmaW5lIHRvIDEgaWYgJ3dpbnRfdCcgaXMgYSBzaWduZWQgaW50ZWdlciB0eXBlLiAqLworI3VuZGVmIEhBVkVfU0lHTkVEX1dJTlRfVAorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgc2lnc2V0X3QnLiAqLworI3VuZGVmIEhBVkVfU0lHU0VUX1QKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHNpZ19hdG9taWNfdCcuICovCisjdW5kZWYgSEFWRV9TSUdfQVRPTUlDX1QKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzbnByaW50ZicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TTlBSSU5URgorCisvKiBEZWZpbmUgaWYgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgc25wcmludGYgZnVuY3Rpb24gaXMgdGhlIG51bWJlciBvZiBvZgorICAgYnl0ZXMgKGV4Y2x1ZGluZyB0aGUgdGVybWluYXRpbmcgTlVMKSB0aGF0IHdvdWxkIGhhdmUgYmVlbiBwcm9kdWNlZCBpZiB0aGUKKyAgIGJ1ZmZlciBoYWQgYmVlbiBsYXJnZSBlbm91Z2guICovCisjdW5kZWYgSEFWRV9TTlBSSU5URl9SRVRWQUxfQzk5CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3Bhd24uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TUEFXTl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RESU5UX0gKKworLyogRGVmaW5lIGlmIDxzdGRpbnQuaD4gZXhpc3RzLCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwgYW5kIGRlY2xhcmVzCisgICB1aW50bWF4X3QuICovCisjdW5kZWYgSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVgKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpb19leHQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVERJT19FWFRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NURExJQl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RwY3B5JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUENQWQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmNocm51bCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJDSFJOVUwKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJkdXAnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSRFVQCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyZXJyb3JfcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJFUlJPUl9SCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5ncy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NUUklOR1NfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NUUklOR19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RybmR1cCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJORFVQCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RybmxlbicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJOTEVOCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RydG91bCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJUT1VMCisKKy8qIERlZmluZSB0byAxIGlmIGBzYV9zaWdhY3Rpb24nIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qgc2lnYWN0aW9uJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9TSUdBQ1RJT05fU0FfU0lHQUNUSU9OCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBzdHJ1Y3QgdG1zJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9UTVMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJ2ZXJzY21wJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUlZFUlNDTVAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzeW1saW5rJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NZTUxJTksKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvYml0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19CSVRZUEVTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvaW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfSU5UVFlQRVNfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9tbWFuLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX01NQU5fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9wYXJhbS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19QQVJBTV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Jlc291cmNlLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1JFU09VUkNFX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2V0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfU1RBVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWVzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1RJTUVTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19USU1FX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfVFlQRVNfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy93YWl0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1dBSVRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHRpbWVzJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1RJTUVTCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdG93bG93ZXInIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfVE9XTE9XRVIKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9VTklTVERfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHVuc2V0ZW52JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1VOU0VURU5WCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlICd1bnNpZ25lZCBsb25nIGxvbmcgaW50Jy4gKi8KKyN1bmRlZiBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB2YXNucHJpbnRmJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1ZBU05QUklOVEYKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB2Zm9yaycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9WRk9SSworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHZzbnByaW50ZicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9WU05QUklOVEYKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB3YWl0aWQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfV0FJVElECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d2NoYXIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9XQ0hBUl9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3djaGFyX3QnIHR5cGUuICovCisjdW5kZWYgSEFWRV9XQ0hBUl9UCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd2NydG9tYicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9XQ1JUT01CCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd2NzbGVuJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1dDU0xFTgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHdjc25sZW4nIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfV0NTTkxFTgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHdjdHlwZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1dDVFlQRV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd2N3aWR0aCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9XQ1dJRFRICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d2luc29jazIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9XSU5TT0NLMl9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3dpbnRfdCcgdHlwZS4gKi8KKyN1bmRlZiBIQVZFX1dJTlRfVAorCisvKiBEZWZpbmUgdG8gMSBpZiBPX05PQVRJTUUgd29ya3MuICovCisjdW5kZWYgSEFWRV9XT1JLSU5HX09fTk9BVElNRQorCisvKiBEZWZpbmUgdG8gMSBpZiBPX05PRk9MTE9XIHdvcmtzLiAqLworI3VuZGVmIEhBVkVfV09SS0lOR19PX05PRk9MTE9XCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgcG9zaXhfc3Bhd24gYW5kIHBvc2l4X3NwYXducCBmdW5jdGlvbnMgYW5kIHRoZXkKKyAgIHdvcmsuICovCisjdW5kZWYgSEFWRV9XT1JLSU5HX1BPU0lYX1NQQVdOCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBfQm9vbCcuICovCisjdW5kZWYgSEFWRV9fQk9PTAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9zZXRfaW52YWxpZF9wYXJhbWV0ZXJfaGFuZGxlcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9fU0VUX0lOVkFMSURfUEFSQU1FVEVSX0hBTkRMRVIKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfX2ZwZW5kaW5nJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX19fRlBFTkRJTkcKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfX2ZzZXRlcnInIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfX19GU0VURVJSCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX194cGdfc3RyZXJyb3JfcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9fX1hQR19TVFJFUlJPUl9SCisKKy8qIERlZmluZSBhcyB0aGUgYml0IGluZGV4IGluIHRoZSB3b3JkIHdoZXJlIHRvIGZpbmQgYml0IDAgb2YgdGhlIGV4cG9uZW50IG9mCisgICAnbG9uZyBkb3VibGUnLiAqLworI3VuZGVmIExEQkxfRVhQQklUMF9CSVQKKworLyogRGVmaW5lIGFzIHRoZSB3b3JkIGluZGV4IHdoZXJlIHRvIGZpbmQgdGhlIGV4cG9uZW50IG9mICdsb25nIGRvdWJsZScuICovCisjdW5kZWYgTERCTF9FWFBCSVQwX1dPUkQKKworLyogRGVmaW5lIGFzIHRoZSBiaXQgaW5kZXggaW4gdGhlIHdvcmQgd2hlcmUgdG8gZmluZCB0aGUgc2lnbiBvZiAnbG9uZworICAgZG91YmxlJy4gKi8KKyN1bmRlZiBMREJMX1NJR05CSVRfQklUCisKKy8qIERlZmluZSBhcyB0aGUgd29yZCBpbmRleCB3aGVyZSB0byBmaW5kIHRoZSBzaWduIG9mICdsb25nIGRvdWJsZScuICovCisjdW5kZWYgTERCTF9TSUdOQklUX1dPUkQKKworLyogRGVmaW5lIHRvIHRoZSBHTlUgTTQgZXhlY3V0YWJsZSBuYW1lLiAqLworI3VuZGVmIE00CisKKy8qIERlZmluZSB0byAiLWciIGlmIEdOVSBNNCBzdXBwb3J0cyAtZywgb3RoZXJ3aXNlIHRvICIiLiAqLworI3VuZGVmIE00X0dOVV9PUFRJT04KKworLyogRGVmaW5lIHRvIGEgc3Vic3RpdHV0ZSB2YWx1ZSBmb3IgbW1hcCgpJ3MgTUFQX0FOT05ZTU9VUyBmbGFnLiAqLworI3VuZGVmIE1BUF9BTk9OWU1PVVMKKworLyogRGVmaW5lIGlmIHRoZSBtYnJ0b3djIGZ1bmN0aW9uIGhhcyB0aGUgTlVMTCBwd2MgYXJndW1lbnQgYnVnLiAqLworI3VuZGVmIE1CUlRPV0NfTlVMTF9BUkcxX0JVRworCisvKiBEZWZpbmUgaWYgdGhlIG1icnRvd2MgZnVuY3Rpb24gaGFzIHRoZSBOVUxMIHN0cmluZyBhcmd1bWVudCBidWcuICovCisjdW5kZWYgTUJSVE9XQ19OVUxMX0FSRzJfQlVHCisKKy8qIERlZmluZSBpZiB0aGUgbWJydG93YyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gMCBmb3IgYSBOVUwgY2hhcmFjdGVyLiAqLworI3VuZGVmIE1CUlRPV0NfTlVMX1JFVFZBTF9CVUcKKworLyogRGVmaW5lIGlmIHRoZSBtYnJ0b3djIGZ1bmN0aW9uIHJldHVybnMgYSB3cm9uZyByZXR1cm4gdmFsdWUuICovCisjdW5kZWYgTUJSVE9XQ19SRVRWQUxfQlVHCisKKy8qIERlZmluZSB0byAxIGlmIGFzc2VydGlvbnMgc2hvdWxkIGJlIGRpc2FibGVkLiAqLworI3VuZGVmIE5ERUJVRworCisvKiBEZWZpbmUgaWYgdGhlIHZhc25wcmludGYgaW1wbGVtZW50YXRpb24gbmVlZHMgc3BlY2lhbCBjb2RlIGZvciB0aGUgJ2EnIGFuZAorICAgJ0EnIGRpcmVjdGl2ZXMuICovCisjdW5kZWYgTkVFRF9QUklOVEZfRElSRUNUSVZFX0EKKworLyogRGVmaW5lIGlmIHRoZSB2YXNucHJpbnRmIGltcGxlbWVudGF0aW9uIG5lZWRzIHNwZWNpYWwgY29kZSBmb3IgdGhlICdGJworICAgZGlyZWN0aXZlLiAqLworI3VuZGVmIE5FRURfUFJJTlRGX0RJUkVDVElWRV9GCisKKy8qIERlZmluZSBpZiB0aGUgdmFzbnByaW50ZiBpbXBsZW1lbnRhdGlvbiBuZWVkcyBzcGVjaWFsIGNvZGUgZm9yIHRoZSAnbHMnCisgICBkaXJlY3RpdmUuICovCisjdW5kZWYgTkVFRF9QUklOVEZfRElSRUNUSVZFX0xTCisKKy8qIERlZmluZSBpZiB0aGUgdmFzbnByaW50ZiBpbXBsZW1lbnRhdGlvbiBuZWVkcyBzcGVjaWFsIGNvZGUgZm9yICdkb3VibGUnCisgICBhcmd1bWVudHMuICovCisjdW5kZWYgTkVFRF9QUklOVEZfRE9VQkxFCisKKy8qIERlZmluZSBpZiB0aGUgdmFzbnByaW50ZiBpbXBsZW1lbnRhdGlvbiBuZWVkcyBzcGVjaWFsIGNvZGUgZm9yIHN1cnZpdmluZworICAgb3V0LW9mLW1lbW9yeSBjb25kaXRpb25zLiAqLworI3VuZGVmIE5FRURfUFJJTlRGX0VOT01FTQorCisvKiBEZWZpbmUgaWYgdGhlIHZhc25wcmludGYgaW1wbGVtZW50YXRpb24gbmVlZHMgc3BlY2lhbCBjb2RlIGZvciB0aGUgJyBmbGFnLgorICAgKi8KKyN1bmRlZiBORUVEX1BSSU5URl9GTEFHX0dST1VQSU5HCisKKy8qIERlZmluZSBpZiB0aGUgdmFzbnByaW50ZiBpbXBsZW1lbnRhdGlvbiBuZWVkcyBzcGVjaWFsIGNvZGUgZm9yIHRoZSAnLScKKyAgIGZsYWcuICovCisjdW5kZWYgTkVFRF9QUklOVEZfRkxBR19MRUZUQURKVVNUCisKKy8qIERlZmluZSBpZiB0aGUgdmFzbnByaW50ZiBpbXBsZW1lbnRhdGlvbiBuZWVkcyBzcGVjaWFsIGNvZGUgZm9yIHRoZSAwIGZsYWcuCisgICAqLworI3VuZGVmIE5FRURfUFJJTlRGX0ZMQUdfWkVSTworCisvKiBEZWZpbmUgaWYgdGhlIHZhc25wcmludGYgaW1wbGVtZW50YXRpb24gbmVlZHMgc3BlY2lhbCBjb2RlIGZvciBpbmZpbml0ZQorICAgJ2RvdWJsZScgYXJndW1lbnRzLiAqLworI3VuZGVmIE5FRURfUFJJTlRGX0lORklOSVRFX0RPVUJMRQorCisvKiBEZWZpbmUgaWYgdGhlIHZhc25wcmludGYgaW1wbGVtZW50YXRpb24gbmVlZHMgc3BlY2lhbCBjb2RlIGZvciBpbmZpbml0ZQorICAgJ2xvbmcgZG91YmxlJyBhcmd1bWVudHMuICovCisjdW5kZWYgTkVFRF9QUklOVEZfSU5GSU5JVEVfTE9OR19ET1VCTEUKKworLyogRGVmaW5lIGlmIHRoZSB2YXNucHJpbnRmIGltcGxlbWVudGF0aW9uIG5lZWRzIHNwZWNpYWwgY29kZSBmb3IgJ2xvbmcKKyAgIGRvdWJsZScgYXJndW1lbnRzLiAqLworI3VuZGVmIE5FRURfUFJJTlRGX0xPTkdfRE9VQkxFCisKKy8qIERlZmluZSBpZiB0aGUgdmFzbnByaW50ZiBpbXBsZW1lbnRhdGlvbiBuZWVkcyBzcGVjaWFsIGNvZGUgZm9yIHN1cHBvcnRpbmcKKyAgIGxhcmdlIHByZWNpc2lvbnMgd2l0aG91dCBhcmJpdHJhcnkgYm91bmRzLiAqLworI3VuZGVmIE5FRURfUFJJTlRGX1VOQk9VTkRFRF9QUkVDSVNJT04KKworLyogRGVmaW5lIHRvIDEgaWYgeW91ciBDIGNvbXBpbGVyIGRvZXNuJ3QgYWNjZXB0IC1jIGFuZCAtbyB0b2dldGhlci4gKi8KKyN1bmRlZiBOT19NSU5VU19DX01JTlVTX08KKworLyogRGVmaW5lIHRvIDEgaWYgb3BlbigpIGZhaWxzIHRvIHJlY29nbml6ZSBhIHRyYWlsaW5nIHNsYXNoLiAqLworI3VuZGVmIE9QRU5fVFJBSUxJTkdfU0xBU0hfQlVHCisKKy8qIE5hbWUgb2YgcGFja2FnZSAqLworI3VuZGVmIFBBQ0tBR0UKKworLyogRGVmaW5lIHRvIHRoZSBhZGRyZXNzIHdoZXJlIGJ1ZyByZXBvcnRzIGZvciB0aGlzIHBhY2thZ2Ugc2hvdWxkIGJlIHNlbnQuICovCisjdW5kZWYgUEFDS0FHRV9CVUdSRVBPUlQKKworLyogVGhlIGNvcHlyaWdodCB5ZWFyIGZvciB0aGlzIHBhY2thZ2UgKi8KKyN1bmRlZiBQQUNLQUdFX0NPUFlSSUdIVF9ZRUFSCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX05BTUUKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfU1RSSU5HCisKKy8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1RBUk5BTUUKKworLyogRGVmaW5lIHRvIHRoZSBob21lIHBhZ2UgZm9yIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1VSTAorCisvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfVkVSU0lPTgorCisvKiB0aGUgbnVtYmVyIG9mIHBlbmRpbmcgb3V0cHV0IGJ5dGVzIG9uIHN0cmVhbSAnZnAnICovCisjdW5kZWYgUEVORElOR19PVVRQVVRfTl9CWVRFUworCisvKiBEZWZpbmUgaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZGVmaW5lcyB1bnVzYWJsZSBQUkkqIG1hY3Jvcy4gKi8KKyN1bmRlZiBQUklfTUFDUk9TX0JST0tFTgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgdGhhdCBpcyB0aGUgcmVzdWx0IG9mIGRlZmF1bHQgYXJndW1lbnQgcHJvbW90aW9ucyBvZgorICAgdHlwZSBtb2RlX3QuICovCisjdW5kZWYgUFJPTU9URURfTU9ERV9UCisKKy8qIERlZmluZSBpZiB0aGUgcHRocmVhZF9pbl91c2UoKSBkZXRlY3Rpb24gaXMgaGFyZC4gKi8KKyN1bmRlZiBQVEhSRUFEX0lOX1VTRV9ERVRFQ1RJT05fSEFSRAorCisvKiBEZWZpbmUgdG8gbCwgbGwsIHUsIHVsLCB1bGwsIGV0Yy4sIGFzIHN1aXRhYmxlIGZvciBjb25zdGFudHMgb2YgdHlwZQorICAgJ3B0cmRpZmZfdCcuICovCisjdW5kZWYgUFRSRElGRl9UX1NVRkZJWAorCisvKiBEZWZpbmUgaWYgZnByaW50ZiBpcyBvdmVycmlkZGVuIGJ5IGEgUE9TSVggY29tcGxpYW50IGdudWxpYiBpbXBsZW1lbnRhdGlvbi4KKyAgICovCisjdW5kZWYgUkVQTEFDRV9GUFJJTlRGX1BPU0lYCisKKy8qIERlZmluZSB0byAxIGlmIHN0YXQgbmVlZHMgaGVscCB3aGVuIHBhc3NlZCBhIGRpcmVjdG9yeSBuYW1lIHdpdGggYSB0cmFpbGluZworICAgc2xhc2ggKi8KKyN1bmRlZiBSRVBMQUNFX0ZVTkNfU1RBVF9ESVIKKworLyogRGVmaW5lIHRvIDEgaWYgc3RhdCBuZWVkcyBoZWxwIHdoZW4gcGFzc2VkIGEgZmlsZSBuYW1lIHdpdGggYSB0cmFpbGluZworICAgc2xhc2ggKi8KKyN1bmRlZiBSRVBMQUNFX0ZVTkNfU1RBVF9GSUxFCisKKy8qIERlZmluZSBpZiBwcmludGYgaXMgb3ZlcnJpZGRlbiBieSBhIFBPU0lYIGNvbXBsaWFudCBnbnVsaWIgaW1wbGVtZW50YXRpb24uCisgICAqLworI3VuZGVmIFJFUExBQ0VfUFJJTlRGX1BPU0lYCisKKy8qIERlZmluZSB0byAxIGlmIHN0cmVycm9yKDApIGRvZXMgbm90IHJldHVybiBhIG1lc3NhZ2UgaW1wbHlpbmcgc3VjY2Vzcy4gKi8KKyN1bmRlZiBSRVBMQUNFX1NUUkVSUk9SXzAKKworLyogRGVmaW5lIGlmIHZhc25wcmludGYgZXhpc3RzIGJ1dCBpcyBvdmVycmlkZGVuIGJ5IGdudWxpYi4gKi8KKyN1bmRlZiBSRVBMQUNFX1ZBU05QUklOVEYKKworLyogRGVmaW5lIGlmIHZmcHJpbnRmIGlzIG92ZXJyaWRkZW4gYnkgYSBQT1NJWCBjb21wbGlhbnQgZ251bGliCisgICBpbXBsZW1lbnRhdGlvbi4gKi8KKyN1bmRlZiBSRVBMQUNFX1ZGUFJJTlRGX1BPU0lYCisKKy8qIERlZmluZSB0byBsLCBsbCwgdSwgdWwsIHVsbCwgZXRjLiwgYXMgc3VpdGFibGUgZm9yIGNvbnN0YW50cyBvZiB0eXBlCisgICAnc2lnX2F0b21pY190Jy4gKi8KKyN1bmRlZiBTSUdfQVRPTUlDX1RfU1VGRklYCisKKy8qIERlZmluZSBhcyB0aGUgbWF4aW11bSB2YWx1ZSBvZiB0eXBlICdzaXplX3QnLCBpZiB0aGUgc3lzdGVtIGRvZXNuJ3QgZGVmaW5lCisgICBpdC4gKi8KKyNpZm5kZWYgU0laRV9NQVgKKyMgdW5kZWYgU0laRV9NQVgKKyNlbmRpZgorCisvKiBEZWZpbmUgdG8gbCwgbGwsIHUsIHVsLCB1bGwsIGV0Yy4sIGFzIHN1aXRhYmxlIGZvciBjb25zdGFudHMgb2YgdHlwZQorICAgJ3NpemVfdCcuICovCisjdW5kZWYgU0laRV9UX1NVRkZJWAorCisvKiBJZiB1c2luZyB0aGUgQyBpbXBsZW1lbnRhdGlvbiBvZiBhbGxvY2EsIGRlZmluZSBpZiB5b3Uga25vdyB0aGUKKyAgIGRpcmVjdGlvbiBvZiBzdGFjayBncm93dGggZm9yIHlvdXIgc3lzdGVtOyBvdGhlcndpc2UgaXQgd2lsbCBiZQorICAgYXV0b21hdGljYWxseSBkZWR1Y2VkIGF0IHJ1bnRpbWUuCisJU1RBQ0tfRElSRUNUSU9OID4gMCA9PiBncm93cyB0b3dhcmQgaGlnaGVyIGFkZHJlc3NlcworCVNUQUNLX0RJUkVDVElPTiA8IDAgPT4gZ3Jvd3MgdG93YXJkIGxvd2VyIGFkZHJlc3NlcworCVNUQUNLX0RJUkVDVElPTiA9IDAgPT4gZGlyZWN0aW9uIG9mIGdyb3d0aCB1bmtub3duICovCisjdW5kZWYgU1RBQ0tfRElSRUNUSU9OCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBgU19JUyonIG1hY3JvcyBpbiA8c3lzL3N0YXQuaD4gZG8gbm90IHdvcmsgcHJvcGVybHkuICovCisjdW5kZWYgU1RBVF9NQUNST1NfQlJPS0VOCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLworI3VuZGVmIFNURENfSEVBREVSUworCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJlcnJvcl9yIHJldHVybnMgY2hhciAqLiAqLworI3VuZGVmIFNUUkVSUk9SX1JfQ0hBUl9QCisKKy8qIERlZmluZSB0byB0aGUgcHJlZml4IG9mIEMgc3ltYm9scyBhdCB0aGUgYXNzZW1ibGVyIGFuZCBsaW5rZXIgbGV2ZWwsIGVpdGhlcgorICAgYW4gdW5kZXJzY29yZSBvciBlbXB0eS4gKi8KKyN1bmRlZiBVU0VSX0xBQkVMX1BSRUZJWAorCisvKiBEZWZpbmUgaWYgdGhlIFBPU0lYIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgY2FuIGJlIHVzZWQuICovCisjdW5kZWYgVVNFX1BPU0lYX1RIUkVBRFMKKworLyogRGVmaW5lIGlmIHJlZmVyZW5jZXMgdG8gdGhlIFBPU0lYIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgc2hvdWxkIGJlIG1hZGUKKyAgIHdlYWsuICovCisjdW5kZWYgVVNFX1BPU0lYX1RIUkVBRFNfV0VBSworCisvKiBEZWZpbmUgaWYgdGhlIEdOVSBQdGggbXVsdGl0aHJlYWRpbmcgbGlicmFyeSBjYW4gYmUgdXNlZC4gKi8KKyN1bmRlZiBVU0VfUFRIX1RIUkVBRFMKKworLyogRGVmaW5lIGlmIHJlZmVyZW5jZXMgdG8gdGhlIEdOVSBQdGggbXVsdGl0aHJlYWRpbmcgbGlicmFyeSBzaG91bGQgYmUgbWFkZQorICAgd2Vhay4gKi8KKyN1bmRlZiBVU0VfUFRIX1RIUkVBRFNfV0VBSworCisvKiBEZWZpbmUgaWYgdGhlIG9sZCBTb2xhcmlzIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgY2FuIGJlIHVzZWQuICovCisjdW5kZWYgVVNFX1NPTEFSSVNfVEhSRUFEUworCisvKiBEZWZpbmUgaWYgcmVmZXJlbmNlcyB0byB0aGUgb2xkIFNvbGFyaXMgbXVsdGl0aHJlYWRpbmcgbGlicmFyeSBzaG91bGQgYmUKKyAgIG1hZGUgd2Vhay4gKi8KKyN1bmRlZiBVU0VfU09MQVJJU19USFJFQURTX1dFQUsKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgZ2V0YyBldGMuIHRvIHVzZSB1bmxvY2tlZCBJL08gaWYgYXZhaWxhYmxlLgorICAgVW5sb2NrZWQgSS9PIGNhbiBpbXByb3ZlIHBlcmZvcm1hbmNlIGluIHVuaXRocmVhZGVkIGFwcHMsIGJ1dCBpdCBpcyBub3QKKyAgIHNhZmUgZm9yIG11bHRpdGhyZWFkZWQgYXBwcy4gKi8KKyN1bmRlZiBVU0VfVU5MT0NLRURfSU8KKworLyogRGVmaW5lIGlmIHRoZSBuYXRpdmUgV2luZG93cyBtdWx0aXRocmVhZGluZyBBUEkgY2FuIGJlIHVzZWQuICovCisjdW5kZWYgVVNFX1dJTkRPV1NfVEhSRUFEUworCisvKiBWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlICovCisjdW5kZWYgVkVSU0lPTgorCisvKiBEZWZpbmUgdG8gMSBpZiB1bnNldGVudiByZXR1cm5zIHZvaWQgaW5zdGVhZCBvZiBpbnQuICovCisjdW5kZWYgVk9JRF9VTlNFVEVOVgorCisvKiBEZWZpbmUgdG8gbCwgbGwsIHUsIHVsLCB1bGwsIGV0Yy4sIGFzIHN1aXRhYmxlIGZvciBjb25zdGFudHMgb2YgdHlwZQorICAgJ3djaGFyX3QnLiAqLworI3VuZGVmIFdDSEFSX1RfU1VGRklYCisKKy8qIERlZmluZSB0byBsLCBsbCwgdSwgdWwsIHVsbCwgZXRjLiwgYXMgc3VpdGFibGUgZm9yIGNvbnN0YW50cyBvZiB0eXBlCisgICAnd2ludF90Jy4gKi8KKyN1bmRlZiBXSU5UX1RfU1VGRklYCisKKy8qIERlZmluZSBpZiB1c2luZyB0aGUgZG1hbGxvYyBkZWJ1Z2dpbmcgbWFsbG9jIHBhY2thZ2UgKi8KKyN1bmRlZiBXSVRIX0RNQUxMT0MKKworLyogRGVmaW5lIFdPUkRTX0JJR0VORElBTiB0byAxIGlmIHlvdXIgcHJvY2Vzc29yIHN0b3JlcyB3b3JkcyB3aXRoIHRoZSBtb3N0CisgICBzaWduaWZpY2FudCBieXRlIGZpcnN0IChsaWtlIE1vdG9yb2xhIGFuZCBTUEFSQywgdW5saWtlIEludGVsKS4gKi8KKyNpZiBkZWZpbmVkIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRAorIyBpZiBkZWZpbmVkIF9fQklHX0VORElBTl9fCisjICBkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEKKyMgZW5kaWYKKyNlbHNlCisjIGlmbmRlZiBXT1JEU19CSUdFTkRJQU4KKyMgIHVuZGVmIFdPUkRTX0JJR0VORElBTgorIyBlbmRpZgorI2VuZGlmCisKKy8qIERlZmluZSB0byAxIHRvIGludGVybmF0aW9uYWxpemUgYmlzb24gcnVudGltZSBtZXNzYWdlcy4gKi8KKyN1bmRlZiBZWUVOQUJMRV9OTFMKKworLyogRGVmaW5lIHRvIDEgaWYgYGxleCcgZGVjbGFyZXMgYHl5dGV4dCcgYXMgYSBgY2hhciAqJyBieSBkZWZhdWx0LCBub3QgYQorICAgYGNoYXJbXScuICovCisjdW5kZWYgWVlURVhUX1BPSU5URVIKKworLyogRW5hYmxlIGxhcmdlIGlub2RlIG51bWJlcnMgb24gTWFjIE9TIFggMTAuNS4gICovCisjaWZuZGVmIF9EQVJXSU5fVVNFXzY0X0JJVF9JTk9ERQorIyBkZWZpbmUgX0RBUldJTl9VU0VfNjRfQklUX0lOT0RFIDEKKyNlbmRpZgorCisvKiBOdW1iZXIgb2YgYml0cyBpbiBhIGZpbGUgb2Zmc2V0LCBvbiBob3N0cyB3aGVyZSB0aGlzIGlzIHNldHRhYmxlLiAqLworI3VuZGVmIF9GSUxFX09GRlNFVF9CSVRTCisKKy8qIERlZmluZSB0byAxIGlmIEdudWxpYiBvdmVycmlkZXMgJ3N0cnVjdCBzdGF0JyBvbiBXaW5kb3dzIHNvIHRoYXQgc3RydWN0CisgICBzdGF0LnN0X3NpemUgYmVjb21lcyA2NC1iaXQuICovCisjdW5kZWYgX0dMX1dJTkRPV1NfNjRfQklUX1NUX1NJWkUKKworLyogRGVmaW5lIGZvciBsYXJnZSBmaWxlcywgb24gQUlYLXN0eWxlIGhvc3RzLiAqLworI3VuZGVmIF9MQVJHRV9GSUxFUworCisvKiBEZWZpbmUgdG8gMSBpZiBvbiBNSU5JWC4gKi8KKyN1bmRlZiBfTUlOSVgKKworLyogVGhlIF9Ob3JldHVybiBrZXl3b3JkIG9mIEMxMS4gICovCisjaWYgISAoZGVmaW5lZCBfTm9yZXR1cm4gXAorICAgICAgIHx8IChkZWZpbmVkIF9fU1REQ19WRVJTSU9OX18gJiYgMjAxMTEyIDw9IF9fU1REQ19WRVJTSU9OX18pKQorIyBpZiAoMyA8PSBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gMiAmJiA4IDw9IF9fR05VQ19NSU5PUl9fKSBcCisgICAgICB8fCAweDUxMTAgPD0gX19TVU5QUk9fQykKKyMgIGRlZmluZSBfTm9yZXR1cm4gX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpCisjIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUiAmJiAxMjAwIDw9IF9NU0NfVkVSCisjICBkZWZpbmUgX05vcmV0dXJuIF9fZGVjbHNwZWMgKG5vcmV0dXJuKQorIyBlbHNlCisjICBkZWZpbmUgX05vcmV0dXJuCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMiBpZiB0aGUgc3lzdGVtIGRvZXMgbm90IHByb3ZpZGUgUE9TSVguMSBmZWF0dXJlcyBleGNlcHQgd2l0aAorICAgdGhpcyBkZWZpbmVkLiAqLworI3VuZGVmIF9QT1NJWF8xX1NPVVJDRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgbmVlZCB0byBpbiBvcmRlciBmb3IgJ3N0YXQnIGFuZCBvdGhlciB0aGluZ3MgdG8gd29yay4gKi8KKyN1bmRlZiBfUE9TSVhfU09VUkNFCisKKy8qIERlZmluZSB0byA1MDAgb25seSBvbiBIUC1VWC4gKi8KKyN1bmRlZiBfWE9QRU5fU09VUkNFCisKKy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIEFJWCAzLCBJbnRlcml4LiAgKi8KKyNpZm5kZWYgX0FMTF9TT1VSQ0UKKyMgdW5kZWYgX0FMTF9TT1VSQ0UKKyNlbmRpZgorLyogRW5hYmxlIGdlbmVyYWwgZXh0ZW5zaW9ucyBvbiBNYWMgT1MgWC4gICovCisjaWZuZGVmIF9EQVJXSU5fQ19TT1VSQ0UKKyMgdW5kZWYgX0RBUldJTl9DX1NPVVJDRQorI2VuZGlmCisvKiBFbmFibGUgR05VIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IGhhdmUgdGhlbS4gICovCisjaWZuZGVmIF9HTlVfU09VUkNFCisjIHVuZGVmIF9HTlVfU09VUkNFCisjZW5kaWYKKy8qIEVuYWJsZSB0aHJlYWRpbmcgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKyNpZm5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisjIHVuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworI2VuZGlmCisvKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBIUCBOb25TdG9wLiAgKi8KKyNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKyMgdW5kZWYgX1RBTkRFTV9TT1VSQ0UKKyNlbmRpZgorLyogRW5hYmxlIGdlbmVyYWwgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKyNpZm5kZWYgX19FWFRFTlNJT05TX18KKyMgdW5kZWYgX19FWFRFTlNJT05TX18KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byBycGxfIGlmIHRoZSBnZXRvcHQgcmVwbGFjZW1lbnQgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgc2hvdWxkIGJlCisgICB1c2VkLiAqLworI3VuZGVmIF9fR0VUT1BUX1BSRUZJWAorCisvKiBfR0xfSU5MSU5FIGlzIGEgcG9ydGFibGUgYWx0ZXJuYXRpdmUgdG8gSVNPIEM5OSBwbGFpbiAnaW5saW5lJy4KKyAgIF9HTF9FWFRFUk5fSU5MSU5FIGlzIGEgcG9ydGFibGUgYWx0ZXJuYXRpdmUgdG8gJ2V4dGVybiBpbmxpbmUnLgorICAgX0dMX0lOTElORV9IRUFERVJfQkVHSU4gY29udGFpbnMgdXNlZnVsIHN0dWZmIHRvIHB1dAorICAgICBpbiBhbiBpbmNsdWRlIGZpbGUsIGJlZm9yZSB1c2VzIG9mIF9HTF9JTkxJTkUuCisgICAgIEl0IHN1cHByZXNzZXMgR0NDJ3MgYm9ndXMgIm5vIHByZXZpb3VzIHByb3RvdHlwZSBmb3IgJ0ZPTyciIGRpYWdub3N0aWMsCisgICAgIHdoZW4gRk9PIGlzIGFuIGlubGluZSBmdW5jdGlvbiBpbiB0aGUgaGVhZGVyOyBzZWUKKyAgICAgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTQxMTM+LgorICAgX0dMX0lOTElORV9IRUFERVJfRU5EIGNvbnRhaW5zIHVzZWZ1bCBzdHVmZiB0byBwdXQKKyAgICAgaW4gdGhlIHNhbWUgaW5jbHVkZSBmaWxlLCBhZnRlciB1c2VzIG9mIF9HTF9JTkxJTkUuCisKKyAgIFN1cHByZXNzIHRoZSB1c2Ugb2YgZXh0ZXJuIGlubGluZSBvbiBBcHBsZSdzIHBsYXRmb3JtcywKKyAgIGFzIExpYmMtODI1LjI1ICgyMDEyLTA5LTE5KSBpcyBpbmNvbXBhdGlibGUgd2l0aCBpdDsgc2VlCisgICA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1nbnVsaWIvMjAxMi0xMi9tc2cwMDAyMy5odG1sPi4KKyAgIFBlcmhhcHMgQXBwbGUgd2lsbCBmaXggdGhpcyBzb21lIGRheS4gICovCisjaWYgKChfX0dOVUNfXyBcCisgICAgICA/IGRlZmluZWQgX19HTlVDX1NURENfSU5MSU5FX18gJiYgX19HTlVDX1NURENfSU5MSU5FX18gXAorICAgICAgOiAxOTk5MDFMIDw9IF9fU1REQ19WRVJTSU9OX18pIFwKKyAgICAgJiYgIWRlZmluZWQgX19BUFBMRV9fKQorIyBkZWZpbmUgX0dMX0lOTElORSBpbmxpbmUKKyMgZGVmaW5lIF9HTF9FWFRFUk5fSU5MSU5FIGV4dGVybiBpbmxpbmUKKyNlbGlmIDIgPCBfX0dOVUNfXyArICg3IDw9IF9fR05VQ19NSU5PUl9fKSAmJiAhZGVmaW5lZCBfX0FQUExFX18KKyMgaWYgX19HTlVDX0dOVV9JTkxJTkVfXworICAgLyogX19nbnVfaW5saW5lX18gc3VwcHJlc3NlcyBhIEdDQyA0LjIgZGlhZ25vc3RpYy4gICovCisjICBkZWZpbmUgX0dMX0lOTElORSBleHRlcm4gaW5saW5lIF9fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXykpCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfSU5MSU5FIGV4dGVybiBpbmxpbmUKKyMgZW5kaWYKKyMgZGVmaW5lIF9HTF9FWFRFUk5fSU5MSU5FIGV4dGVybgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9JTkxJTkUgc3RhdGljIF9HTF9VTlVTRUQKKyMgZGVmaW5lIF9HTF9FWFRFUk5fSU5MSU5FIHN0YXRpYyBfR0xfVU5VU0VECisjZW5kaWYKKworI2lmIDQgPCBfX0dOVUNfXyArICg2IDw9IF9fR05VQ19NSU5PUl9fKQorIyBpZiBkZWZpbmVkIF9fR05VQ19TVERDX0lOTElORV9fICYmIF9fR05VQ19TVERDX0lOTElORV9fCisjICBkZWZpbmUgX0dMX0lOTElORV9IRUFERVJfQ09OU1RfUFJBR01BCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfSU5MSU5FX0hFQURFUl9DT05TVF9QUkFHTUEgXAorICAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1Xc3VnZ2VzdC1hdHRyaWJ1dGU9Y29uc3RcIiIpCisjIGVuZGlmCisjIGRlZmluZSBfR0xfSU5MSU5FX0hFQURFUl9CRUdJTiBcCisgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIHB1c2giKSBcCisgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV21pc3NpbmctcHJvdG90eXBlc1wiIikgXAorICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdtaXNzaW5nLWRlY2xhcmF0aW9uc1wiIikgXAorICAgIF9HTF9JTkxJTkVfSEVBREVSX0NPTlNUX1BSQUdNQQorIyBkZWZpbmUgX0dMX0lOTElORV9IRUFERVJfRU5EIFwKKyAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgcG9wIikKKyNlbHNlCisjIGRlZmluZSBfR0xfSU5MSU5FX0hFQURFUl9CRUdJTgorIyBkZWZpbmUgX0dMX0lOTElORV9IRUFERVJfRU5ECisjZW5kaWYKKworLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lc24ndCBkZWZpbmUuICovCisjdW5kZWYgZ2lkX3QKKworLyogRGVmaW5lIHRvIGBfX2lubGluZV9fJyBvciBgX19pbmxpbmUnIGlmIHRoYXQncyB3aGF0IHRoZSBDIGNvbXBpbGVyCisgICBjYWxscyBpdCwgb3IgdG8gbm90aGluZyBpZiAnaW5saW5lJyBpcyBub3Qgc3VwcG9ydGVkIHVuZGVyIGFueSBuYW1lLiAgKi8KKyNpZm5kZWYgX19jcGx1c3BsdXMKKyN1bmRlZiBpbmxpbmUKKyNlbmRpZgorCisvKiBEZWZpbmUgdG8gbG9uZyBvciBsb25nIGxvbmcgaWYgPHN0ZGludC5oPiBhbmQgPGludHR5cGVzLmg+IGRvbid0IGRlZmluZS4gKi8KKyN1bmRlZiBpbnRtYXhfdAorCisvKiBXb3JrIGFyb3VuZCBhIGJ1ZyBpbiBBcHBsZSBHQ0MgNC4wLjEgYnVpbGQgNTQ2NTogSW4gQzk5IG1vZGUsIGl0IHN1cHBvcnRzCisgICB0aGUgSVNPIEMgOTkgc2VtYW50aWNzIG9mICdleHRlcm4gaW5saW5lJyAodW5saWtlIHRoZSBHTlUgQyBzZW1hbnRpY3Mgb2YKKyAgIGVhcmxpZXIgdmVyc2lvbnMpLCBidXQgZG9lcyBub3QgZGlzcGxheSBpdCBieSBzZXR0aW5nIF9fR05VQ19TVERDX0lOTElORV9fLgorICAgX19BUFBMRV9fICYmIF9fTUFDSF9fIHRlc3QgZm9yIE1hYyBPUyBYLgorICAgX19BUFBMRV9DQ19fIHRlc3RzIGZvciB0aGUgQXBwbGUgY29tcGlsZXIgYW5kIGl0cyB2ZXJzaW9uLgorICAgX19TVERDX1ZFUlNJT05fXyB0ZXN0cyBmb3IgdGhlIEM5OSBtb2RlLiAgKi8KKyNpZiBkZWZpbmVkIF9fQVBQTEVfXyAmJiBkZWZpbmVkIF9fTUFDSF9fICYmIF9fQVBQTEVfQ0NfXyA+PSA1NDY1ICYmICFkZWZpbmVkIF9fY3BsdXNwbHVzICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCAmJiAhZGVmaW5lZCBfX0dOVUNfU1REQ19JTkxJTkVfXworIyBkZWZpbmUgX19HTlVDX1NURENfSU5MSU5FX18gMQorI2VuZGlmCisKKy8qIERlZmluZSB0byBhIHR5cGUgaWYgPHdjaGFyLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KKyN1bmRlZiBtYnN0YXRlX3QKKworLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworI3VuZGVmIG1vZGVfdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2Ygc3RfbmxpbmsgaW4gc3RydWN0IHN0YXQsIG9yIGEgc3VwZXJ0eXBlLiAqLworI3VuZGVmIG5saW5rX3QKKworLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworI3VuZGVmIHBpZF90CisKKy8qIERlZmluZSBhcyB0aGUgdHlwZSBvZiB0aGUgcmVzdWx0IG9mIHN1YnRyYWN0aW5nIHR3byBwb2ludGVycywgaWYgdGhlIHN5c3RlbQorICAgZG9lc24ndCBkZWZpbmUgaXQuICovCisjdW5kZWYgcHRyZGlmZl90CisKKy8qIERlZmluZSB0byB0aGUgZXF1aXZhbGVudCBvZiB0aGUgQzk5ICdyZXN0cmljdCcga2V5d29yZCwgb3IgdG8KKyAgIG5vdGhpbmcgaWYgdGhpcyBpcyBub3Qgc3VwcG9ydGVkLiAgRG8gbm90IGRlZmluZSBpZiByZXN0cmljdCBpcworICAgc3VwcG9ydGVkIGRpcmVjdGx5LiAgKi8KKyN1bmRlZiByZXN0cmljdAorLyogV29yayBhcm91bmQgYSBidWcgaW4gU3VuIEMrKzogaXQgZG9lcyBub3Qgc3VwcG9ydCBfUmVzdHJpY3Qgb3IKKyAgIF9fcmVzdHJpY3RfXywgZXZlbiB0aG91Z2ggdGhlIGNvcnJlc3BvbmRpbmcgU3VuIEMgY29tcGlsZXIgZW5kcyB1cCB3aXRoCisgICAiI2RlZmluZSByZXN0cmljdCBfUmVzdHJpY3QiIG9yICIjZGVmaW5lIHJlc3RyaWN0IF9fcmVzdHJpY3RfXyIgaW4gdGhlCisgICBwcmV2aW91cyBsaW5lLiAgUGVyaGFwcyBzb21lIGZ1dHVyZSB2ZXJzaW9uIG9mIFN1biBDKysgd2lsbCB3b3JrIHdpdGgKKyAgIHJlc3RyaWN0OyBpZiBzbywgaG9wZWZ1bGx5IGl0IGRlZmluZXMgX19SRVNUUklDVCBsaWtlIFN1biBDIGRvZXMuICAqLworI2lmIGRlZmluZWQgX19TVU5QUk9fQ0MgJiYgIWRlZmluZWQgX19SRVNUUklDVAorIyBkZWZpbmUgX1Jlc3RyaWN0CisjIGRlZmluZSBfX3Jlc3RyaWN0X18KKyNlbmRpZgorCisvKiBEZWZpbmUgYXMgYW4gaW50ZWdlciB0eXBlIHN1aXRhYmxlIGZvciBtZW1vcnkgbG9jYXRpb25zIHRoYXQgY2FuIGJlCisgICBhY2Nlc3NlZCBhdG9taWNhbGx5IGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mIGFzeW5jaHJvbm91cyBzaWduYWxzLiAqLworI3VuZGVmIHNpZ19hdG9taWNfdAorCisvKiBEZWZpbmUgdG8gYHVuc2lnbmVkIGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisjdW5kZWYgc2l6ZV90CisKKy8qIERlZmluZSBhcyBhIHNpZ25lZCB0eXBlIG9mIHRoZSBzYW1lIHNpemUgYXMgc2l6ZV90LiAqLworI3VuZGVmIHNzaXplX3QKKworLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lc24ndCBkZWZpbmUuICovCisjdW5kZWYgdWlkX3QKKworLyogRGVmaW5lIGFzIGEgbWFya2VyIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIGRlY2xhcmF0aW9ucyB0aGF0IG1pZ2h0IG5vdAorICAgIGJlIHVzZWQuICBUaGlzIGhlbHBzIHRvIHJlZHVjZSB3YXJuaW5ncywgc3VjaCBhcyBmcm9tCisgICAgR0NDIC1XdW51c2VkLXBhcmFtZXRlci4gICovCisjaWYgX19HTlVDX18gPj0gMyB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA3KQorIyBkZWZpbmUgX0dMX1VOVVNFRCBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCisjZWxzZQorIyBkZWZpbmUgX0dMX1VOVVNFRAorI2VuZGlmCisvKiBUaGUgbmFtZSBfVU5VU0VEX1BBUkFNRVRFUl8gaXMgYW4gZWFybGllciBzcGVsbGluZywgYWx0aG91Z2ggdGhlIG5hbWUKKyAgIGlzIGEgbWlzbm9tZXIgb3V0c2lkZSBvZiBwYXJhbWV0ZXIgbGlzdHMuICAqLworI2RlZmluZSBfVU5VU0VEX1BBUkFNRVRFUl8gX0dMX1VOVVNFRAorCisvKiBUaGUgX19wdXJlX18gYXR0cmlidXRlIHdhcyBhZGRlZCBpbiBnY2MgMi45Ni4gICovCisjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk2KQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9QVVJFIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpCisjZWxzZQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9QVVJFIC8qIGVtcHR5ICovCisjZW5kaWYKKworLyogVGhlIF9fY29uc3RfXyBhdHRyaWJ1dGUgd2FzIGFkZGVkIGluIGdjYyAyLjk1LiAgKi8KKyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTUpCisjIGRlZmluZSBfR0xfQVRUUklCVVRFX0NPTlNUIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfQ09OU1QgLyogZW1wdHkgKi8KKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWIvZGlybmFtZS1sZ3BsLmMgYi9saWIvZGlybmFtZS1sZ3BsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg5NWNiYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9kaXJuYW1lLWxncGwuYwpAQCAtMCwwICsxLDg2IEBACisvKiBkaXJuYW1lLmMgLS0gcmV0dXJuIGFsbCBidXQgdGhlIGxhc3QgZWxlbWVudCBpbiBhIGZpbGUgbmFtZQorCisgICBDb3B5cmlnaHQgKEMpIDE5OTAsIDE5OTgsIDIwMDAtMjAwMSwgMjAwMy0yMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlICJkaXJuYW1lLmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIHByZWZpeCBvZiBGSUxFIHRoYXQgd2lsbCBiZSB1c2VkIGJ5CisgICBkaXJfbmFtZS4gIElmIEZJTEUgaXMgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCB0aGlzIHJldHVybnMgemVybworICAgZXZlbiB0aG91Z2ggJ2Rpcl9uYW1lIChGSUxFKScgd2lsbCByZXR1cm4gIi4iLiAgV29ya3MgcHJvcGVybHkgZXZlbgorICAgaWYgdGhlcmUgYXJlIHRyYWlsaW5nIHNsYXNoZXMgKGJ5IGVmZmVjdGl2ZWx5IGlnbm9yaW5nIHRoZW0pLiAgKi8KKworc2l6ZV90CitkaXJfbGVuIChjaGFyIGNvbnN0ICpmaWxlKQoreworICBzaXplX3QgcHJlZml4X2xlbmd0aCA9IEZJTEVfU1lTVEVNX1BSRUZJWF9MRU4gKGZpbGUpOworICBzaXplX3QgbGVuZ3RoOworCisgIC8qIEFkdmFuY2UgcHJlZml4X2xlbmd0aCBiZXlvbmQgaW1wb3J0YW50IGxlYWRpbmcgc2xhc2hlcy4gICovCisgIHByZWZpeF9sZW5ndGggKz0gKHByZWZpeF9sZW5ndGggIT0gMAorICAgICAgICAgICAgICAgICAgICA/IChGSUxFX1NZU1RFTV9EUklWRV9QUkVGSVhfQ0FOX0JFX1JFTEFUSVZFCisgICAgICAgICAgICAgICAgICAgICAgICYmIElTU0xBU0ggKGZpbGVbcHJlZml4X2xlbmd0aF0pKQorICAgICAgICAgICAgICAgICAgICA6IChJU1NMQVNIIChmaWxlWzBdKQorICAgICAgICAgICAgICAgICAgICAgICA/ICgoRE9VQkxFX1NMQVNIX0lTX0RJU1RJTkNUX1JPT1QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIElTU0xBU0ggKGZpbGVbMV0pICYmICEgSVNTTEFTSCAoZmlsZVsyXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMiA6IDEpKQorICAgICAgICAgICAgICAgICAgICAgICA6IDApKTsKKworICAvKiBTdHJpcCB0aGUgYmFzZW5hbWUgYW5kIGFueSByZWR1bmRhbnQgc2xhc2hlcyBiZWZvcmUgaXQuICAqLworICBmb3IgKGxlbmd0aCA9IGxhc3RfY29tcG9uZW50IChmaWxlKSAtIGZpbGU7CisgICAgICAgcHJlZml4X2xlbmd0aCA8IGxlbmd0aDsgbGVuZ3RoLS0pCisgICAgaWYgKCEgSVNTTEFTSCAoZmlsZVtsZW5ndGggLSAxXSkpCisgICAgICBicmVhazsKKyAgcmV0dXJuIGxlbmd0aDsKK30KKworCisvKiBJbiBnZW5lcmFsLCB3ZSBjYW4ndCB1c2UgdGhlIGJ1aWx0aW4gJ2Rpcm5hbWUnIGZ1bmN0aW9uIGlmIGF2YWlsYWJsZSwKKyAgIHNpbmNlIGl0IGhhcyBkaWZmZXJlbnQgbWVhbmluZ3MgaW4gZGlmZmVyZW50IGVudmlyb25tZW50cy4KKyAgIEluIHNvbWUgZW52aXJvbm1lbnRzIHRoZSBidWlsdGluICdkaXJuYW1lJyBtb2RpZmllcyBpdHMgYXJndW1lbnQuCisKKyAgIFJldHVybiB0aGUgbGVhZGluZyBkaXJlY3RvcmllcyBwYXJ0IG9mIEZJTEUsIGFsbG9jYXRlZCB3aXRoIG1hbGxvYy4KKyAgIFdvcmtzIHByb3Blcmx5IGV2ZW4gaWYgdGhlcmUgYXJlIHRyYWlsaW5nIHNsYXNoZXMgKGJ5IGVmZmVjdGl2ZWx5CisgICBpZ25vcmluZyB0aGVtKS4gIFJldHVybiBOVUxMIG9uIGZhaWx1cmUuCisKKyAgIElmIGxzdGF0IChGSUxFKSB3b3VsZCBzdWNjZWVkLCB0aGVuIHsgY2hkaXIgKGRpcl9uYW1lIChGSUxFKSk7CisgICBsc3RhdCAoYmFzZV9uYW1lIChGSUxFKSk7IH0gd2lsbCBhY2Nlc3MgdGhlIHNhbWUgZmlsZS4gIExpa2V3aXNlLAorICAgaWYgdGhlIHNlcXVlbmNlIHsgY2hkaXIgKGRpcl9uYW1lIChGSUxFKSk7CisgICByZW5hbWUgKGJhc2VfbmFtZSAoRklMRSksICJmb28iKTsgfSBzdWNjZWVkcywgeW91IGhhdmUgcmVuYW1lZCBGSUxFCisgICB0byAiZm9vIiBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgRklMRSB3YXMgaW4uICAqLworCitjaGFyICoKK21kaXJfbmFtZSAoY2hhciBjb25zdCAqZmlsZSkKK3sKKyAgc2l6ZV90IGxlbmd0aCA9IGRpcl9sZW4gKGZpbGUpOworICBib29sIGFwcGVuZF9kb3QgPSAobGVuZ3RoID09IDAKKyAgICAgICAgICAgICAgICAgICAgIHx8IChGSUxFX1NZU1RFTV9EUklWRV9QUkVGSVhfQ0FOX0JFX1JFTEFUSVZFCisgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbGVuZ3RoID09IEZJTEVfU1lTVEVNX1BSRUZJWF9MRU4gKGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZmlsZVsyXSAhPSAnXDAnICYmICEgSVNTTEFTSCAoZmlsZVsyXSkpKTsKKyAgY2hhciAqZGlyID0gbWFsbG9jIChsZW5ndGggKyBhcHBlbmRfZG90ICsgMSk7CisgIGlmICghZGlyKQorICAgIHJldHVybiBOVUxMOworICBtZW1jcHkgKGRpciwgZmlsZSwgbGVuZ3RoKTsKKyAgaWYgKGFwcGVuZF9kb3QpCisgICAgZGlyW2xlbmd0aCsrXSA9ICcuJzsKKyAgZGlyW2xlbmd0aF0gPSAnXDAnOworICByZXR1cm4gZGlyOworfQpkaWZmIC0tZ2l0IGEvbGliL2Rpcm5hbWUuYyBiL2xpYi9kaXJuYW1lLmMKaW5kZXggZTJiOWQ2NC4uNjI3YzE2NCAxMDA2NDQKLS0tIGEvbGliL2Rpcm5hbWUuYworKysgYi9saWIvZGlybmFtZS5jCkBAIC0xLDEyICsxLDEyIEBACiAvKiBkaXJuYW1lLmMgLS0gcmV0dXJuIGFsbCBidXQgdGhlIGxhc3QgZWxlbWVudCBpbiBhIGZpbGUgbmFtZQogCi0gICBDb3B5cmlnaHQgKEMpIDE5OTAsIDE5OTgsIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZQorICAgQ29weXJpZ2h0IChDKSAxOTkwLCAxOTk4LCAyMDAwLTIwMDEsIDIwMDMtMjAwNiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUKICAgIEZvdW5kYXRpb24sIEluYy4KIAotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpAQCAtMTQsMTA4ICsxNCwyNSBAQAogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCisjaW5jbHVkZSA8Y29uZmlnLmg+CiAKICNpbmNsdWRlICJkaXJuYW1lLmgiCiAKKyNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlICJ4YWxsb2MuaCIKIAotLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgYGRpcm5hbWUgKEZJTEUpJywgb3IgemVybyBpZiBGSUxFIGlzCi0gICBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnkuICBXb3JrcyBwcm9wZXJseSBldmVuIGlmCi0gICB0aGVyZSBhcmUgdHJhaWxpbmcgc2xhc2hlcyAoYnkgZWZmZWN0aXZlbHkgaWdub3JpbmcgdGhlbSkuICAqLwotc2l6ZV90Ci1kaXJfbGVuIChjaGFyIGNvbnN0ICpmaWxlKQotewotICBzaXplX3QgcHJlZml4X2xlbmd0aCA9IEZJTEVfU1lTVEVNX1BSRUZJWF9MRU4gKGZpbGUpOwotICBzaXplX3QgbGVuZ3RoOwotCi0gIC8qIFN0cmlwIHRoZSBiYXNlbmFtZSBhbmQgYW55IHJlZHVuZGFudCBzbGFzaGVzIGJlZm9yZSBpdC4gICovCi0gIGZvciAobGVuZ3RoID0gYmFzZV9uYW1lIChmaWxlKSAtIGZpbGU7ICBwcmVmaXhfbGVuZ3RoIDwgbGVuZ3RoOyAgbGVuZ3RoLS0pCi0gICAgaWYgKCEgSVNTTEFTSCAoZmlsZVtsZW5ndGggLSAxXSkpCi0gICAgICByZXR1cm4gbGVuZ3RoOwotCi0gIC8qIEJ1dCBkb24ndCBzdHJpcCB0aGUgb25seSBzbGFzaCBmcm9tICIvIi4gICovCi0gIHJldHVybiBwcmVmaXhfbGVuZ3RoICsgSVNTTEFTSCAoZmlsZVtwcmVmaXhfbGVuZ3RoXSk7Ci19Ci0KLS8qIFJldHVybiB0aGUgbGVhZGluZyBkaXJlY3RvcmllcyBwYXJ0IG9mIEZJTEUsCi0gICBhbGxvY2F0ZWQgd2l0aCB4bWFsbG9jLgotICAgV29ya3MgcHJvcGVybHkgZXZlbiBpZiB0aGVyZSBhcmUgdHJhaWxpbmcgc2xhc2hlcwotICAgKGJ5IGVmZmVjdGl2ZWx5IGlnbm9yaW5nIHRoZW0pLiAgKi8KKy8qIEp1c3QgbGlrZSBtZGlyX25hbWUgKGRpcm5hbWUtbGdwbC5jKSwgZXhjZXB0LCByYXRoZXIgdGhhbgorICAgcmV0dXJuaW5nIE5VTEwgdXBvbiBtYWxsb2MgZmFpbHVyZSwgaGVyZSwgd2UgcmVwb3J0IHRoZQorICAgIm1lbW9yeSBleGhhdXN0ZWQiIGNvbmRpdGlvbiBhbmQgZXhpdC4gICovCiAKIGNoYXIgKgogZGlyX25hbWUgKGNoYXIgY29uc3QgKmZpbGUpCiB7Ci0gIHNpemVfdCBsZW5ndGggPSBkaXJfbGVuIChmaWxlKTsKLSAgYm9vbCBhcHBlbmRfZG90ID0gKGxlbmd0aCA9PSBGSUxFX1NZU1RFTV9QUkVGSVhfTEVOIChmaWxlKSk7Ci0gIGNoYXIgKmRpciA9IHhtYWxsb2MgKGxlbmd0aCArIGFwcGVuZF9kb3QgKyAxKTsKLSAgbWVtY3B5IChkaXIsIGZpbGUsIGxlbmd0aCk7Ci0gIGlmIChhcHBlbmRfZG90KQotICAgIGRpcltsZW5ndGgrK10gPSAnLic7Ci0gIGRpcltsZW5ndGhdID0gMDsKLSAgcmV0dXJuIGRpcjsKKyAgY2hhciAqcmVzdWx0ID0gbWRpcl9uYW1lIChmaWxlKTsKKyAgaWYgKCFyZXN1bHQpCisgICAgeGFsbG9jX2RpZSAoKTsKKyAgcmV0dXJuIHJlc3VsdDsKIH0KLQotI2lmZGVmIFRFU1RfRElSTkFNRQotLyoKLQotUnVuIHRoZSB0ZXN0IGxpa2UgdGhpcyAoZXhwZWN0IG5vIG91dHB1dCk6Ci0gIGdjYyAtREhBVkVfQ09ORklHX0ggLURURVNUX0RJUk5BTUUgLUkuLiAtTyAtV2FsbCBcCi0gICAgIGJhc2VuYW1lLmMgZGlybmFtZS5jIHhtYWxsb2MuYyBlcnJvci5jCi0gIHNlZCAtbiAnL15CRUdJTi1EQVRBJC8sL15FTkQtREFUQSQvcCcgZGlybmFtZS5jfGdyZXAgLXYgREFUQXwuL2Eub3V0Ci0KLUlmIGl0J3MgYmVlbiBidWlsdCBvbiBhIERPUyBvciBXaW5kb3dzIHBsYXRmb3JtcywgcnVuIGFub3RoZXIgdGVzdCBsaWtlCi10aGlzIChhZ2FpbiwgZXhwZWN0IG5vIG91dHB1dCk6Ci0gIHNlZCAtbiAnL15CRUdJTi1ET1MtREFUQSQvLC9eRU5ELURPUy1EQVRBJC9wJyBkaXJuYW1lLmN8Z3JlcCAtdiBEQVRBfC4vYS5vdXQKLQotQkVHSU4tREFUQQotZm9vLy8vLyAuCi1iYXIvZm9vLy8vLyBiYXIKLWZvby8gLgotLyAvCi0uIC4KLWEgLgotRU5ELURBVEEKLQotQkVHSU4tRE9TLURBVEEKLWM6Ly8vLy8gYzovCi1jOi8gYzovCi1jOi8uIGM6LwotYzpmb28gYzouCi1jOmZvby9iYXIgYzpmb28KLUVORC1ET1MtREFUQQotCi0qLwotCi0jIGRlZmluZSBNQVhfQlVGRl9MRU4gMTAyNAotIyBpbmNsdWRlIDxzdGRpby5oPgotCi1jaGFyICpwcm9ncmFtX25hbWU7Ci0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLSAgY2hhciBidWZmW01BWF9CVUZGX0xFTiArIDFdOwotCi0gIHByb2dyYW1fbmFtZSA9IGFyZ3ZbMF07Ci0KLSAgYnVmZltNQVhfQlVGRl9MRU5dID0gMDsKLSAgd2hpbGUgKGZnZXRzIChidWZmLCBNQVhfQlVGRl9MRU4sIHN0ZGluKSAmJiBidWZmWzBdKQotICAgIHsKLSAgICAgIGNoYXIgZmlsZVtNQVhfQlVGRl9MRU5dOwotICAgICAgY2hhciBleHBlY3RlZF9yZXN1bHRbTUFYX0JVRkZfTEVOXTsKLSAgICAgIGNoYXIgY29uc3QgKnJlc3VsdDsKLSAgICAgIHNzY2FuZiAoYnVmZiwgIiVzICVzIiwgZmlsZSwgZXhwZWN0ZWRfcmVzdWx0KTsKLSAgICAgIHJlc3VsdCA9IGRpcl9uYW1lIChmaWxlKTsKLSAgICAgIGlmIChzdHJjbXAgKHJlc3VsdCwgZXhwZWN0ZWRfcmVzdWx0KSkKLQlwcmludGYgKCIlczogZ290ICVzLCBleHBlY3RlZCAlc1xuIiwgZmlsZSwgcmVzdWx0LCBleHBlY3RlZF9yZXN1bHQpOwotICAgIH0KLSAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9kaXJuYW1lLmggYi9saWIvZGlybmFtZS5oCmluZGV4IDE2ODhhZTguLjUxYTY4NWMgMTAwNjQ0Ci0tLSBhL2xpYi9kaXJuYW1lLmgKKysrIGIvbGliL2Rpcm5hbWUuaApAQCAtMSwxMSArMSwxMiBAQAogLyogIFRha2UgZmlsZSBuYW1lcyBhcGFydCBpbnRvIGRpcmVjdG9yeSBhbmQgYmFzZSBuYW1lcy4KIAotICAgIENvcHlyaWdodCAoQykgMTk5OCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICBDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMDEsIDIwMDMtMjAwNiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuCiAKLSAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICAgYW55IGxhdGVyIHZlcnNpb24uCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKQEAgLTEzLDM0ICsxNCwzMiBAQAogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogI2lmbmRlZiBESVJOQU1FX0hfCiAjIGRlZmluZSBESVJOQU1FX0hfIDEKIAogIyBpbmNsdWRlIDxzdGRib29sLmg+CiAjIGluY2x1ZGUgPHN0ZGRlZi5oPgorIyBpbmNsdWRlICJkb3NuYW1lLmgiCiAKICMgaWZuZGVmIERJUkVDVE9SWV9TRVBBUkFUT1IKICMgIGRlZmluZSBESVJFQ1RPUllfU0VQQVJBVE9SICcvJwogIyBlbmRpZgogCi0jIGlmbmRlZiBJU1NMQVNICi0jICBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09IERJUkVDVE9SWV9TRVBBUkFUT1IpCisjIGlmbmRlZiBET1VCTEVfU0xBU0hfSVNfRElTVElOQ1RfUk9PVAorIyAgZGVmaW5lIERPVUJMRV9TTEFTSF9JU19ESVNUSU5DVF9ST09UIDAKICMgZW5kaWYKIAotIyBpZm5kZWYgRklMRV9TWVNURU1fUFJFRklYX0xFTgotIyAgZGVmaW5lIEZJTEVfU1lTVEVNX1BSRUZJWF9MRU4oRmlsZV9uYW1lKSAwCi0jIGVuZGlmCi0KLSMgZGVmaW5lIElTX0FCU09MVVRFX0ZJTEVfTkFNRShGKSBJU1NMQVNIICgoRilbRklMRV9TWVNURU1fUFJFRklYX0xFTiAoRildKQotIyBkZWZpbmUgSVNfUkVMQVRJVkVfRklMRV9OQU1FKEYpICghIElTX0FCU09MVVRFX0ZJTEVfTkFNRSAoRikpCi0KKyMgaWYgR05VTElCX0RJUk5BTUUKIGNoYXIgKmJhc2VfbmFtZSAoY2hhciBjb25zdCAqZmlsZSk7CiBjaGFyICpkaXJfbmFtZSAoY2hhciBjb25zdCAqZmlsZSk7Ci1zaXplX3QgYmFzZV9sZW4gKGNoYXIgY29uc3QgKmZpbGUpOwotc2l6ZV90IGRpcl9sZW4gKGNoYXIgY29uc3QgKmZpbGUpOworIyBlbmRpZgorCitjaGFyICptZGlyX25hbWUgKGNoYXIgY29uc3QgKmZpbGUpOworc2l6ZV90IGJhc2VfbGVuIChjaGFyIGNvbnN0ICpmaWxlKSBfR0xfQVRUUklCVVRFX1BVUkU7CitzaXplX3QgZGlyX2xlbiAoY2hhciBjb25zdCAqZmlsZSkgX0dMX0FUVFJJQlVURV9QVVJFOworY2hhciAqbGFzdF9jb21wb25lbnQgKGNoYXIgY29uc3QgKmZpbGUpIF9HTF9BVFRSSUJVVEVfUFVSRTsKIAogYm9vbCBzdHJpcF90cmFpbGluZ19zbGFzaGVzIChjaGFyICpmaWxlKTsKIApkaWZmIC0tZ2l0IGEvbGliL2Rvc25hbWUuaCBiL2xpYi9kb3NuYW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ2OGNlNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9kb3NuYW1lLmgKQEAgLTAsMCArMSw1MyBAQAorLyogRmlsZSBuYW1lcyBvbiBNUy1ET1MvV2luZG93cyBzeXN0ZW1zLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSwgMjAwNC0yMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworICAgRnJvbSBQYXVsIEVnZ2VydCBhbmQgSmltIE1leWVyaW5nLiAgKi8KKworI2lmbmRlZiBfRE9TTkFNRV9ICisjZGVmaW5lIF9ET1NOQU1FX0gKKworI2lmIChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXyB8fCAgICAgXAorICAgICBkZWZpbmVkIF9fTVNET1NfXyB8fCBkZWZpbmVkIF9fQ1lHV0lOX18gfHwgXAorICAgICBkZWZpbmVkIF9fRU1YX18gfHwgZGVmaW5lZCBfX0RKR1BQX18pCisgICAvKiBUaGlzIGludGVybmFsIG1hY3JvIGFzc3VtZXMgQVNDSUksIGJ1dCBhbGwgaG9zdHMgdGhhdCBzdXBwb3J0IGRyaXZlCisgICAgICBsZXR0ZXJzIHVzZSBBU0NJSS4gICovCisjIGRlZmluZSBfSVNfRFJJVkVfTEVUVEVSKEMpICgoKHVuc2lnbmVkIGludCkgKEMpIHwgKCdhJyAtICdBJykpIC0gJ2EnICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PSAneicgLSAnYScpCisjIGRlZmluZSBGSUxFX1NZU1RFTV9QUkVGSVhfTEVOKEZpbGVuYW1lKSBcCisgICAgICAgICAgKF9JU19EUklWRV9MRVRURVIgKChGaWxlbmFtZSlbMF0pICYmIChGaWxlbmFtZSlbMV0gPT0gJzonID8gMiA6IDApCisjIGlmbmRlZiBfX0NZR1dJTl9fCisjICBkZWZpbmUgRklMRV9TWVNURU1fRFJJVkVfUFJFRklYX0NBTl9CRV9SRUxBVElWRSAxCisjIGVuZGlmCisjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nIHx8IChDKSA9PSAnXFwnKQorI2Vsc2UKKyMgZGVmaW5lIEZJTEVfU1lTVEVNX1BSRUZJWF9MRU4oRmlsZW5hbWUpIDAKKyMgZGVmaW5lIElTU0xBU0goQykgKChDKSA9PSAnLycpCisjZW5kaWYKKworI2lmbmRlZiBGSUxFX1NZU1RFTV9EUklWRV9QUkVGSVhfQ0FOX0JFX1JFTEFUSVZFCisjIGRlZmluZSBGSUxFX1NZU1RFTV9EUklWRV9QUkVGSVhfQ0FOX0JFX1JFTEFUSVZFIDAKKyNlbmRpZgorCisjaWYgRklMRV9TWVNURU1fRFJJVkVfUFJFRklYX0NBTl9CRV9SRUxBVElWRQorIyAgZGVmaW5lIElTX0FCU09MVVRFX0ZJTEVfTkFNRShGKSBJU1NMQVNIICgoRilbRklMRV9TWVNURU1fUFJFRklYX0xFTiAoRildKQorIyBlbHNlCisjICBkZWZpbmUgSVNfQUJTT0xVVEVfRklMRV9OQU1FKEYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAoSVNTTEFTSCAoKEYpWzBdKSB8fCBGSUxFX1NZU1RFTV9QUkVGSVhfTEVOIChGKSAhPSAwKQorI2VuZGlmCisjZGVmaW5lIElTX1JFTEFUSVZFX0ZJTEVfTkFNRShGKSAoISBJU19BQlNPTFVURV9GSUxFX05BTUUgKEYpKQorCisjZW5kaWYgLyogRE9TTkFNRV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliL2R1cC1zYWZlci1mbGFnLmMgYi9saWIvZHVwLXNhZmVyLWZsYWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGQxYjIxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2R1cC1zYWZlci1mbGFnLmMKQEAgLTAsMCArMSwzOCBAQAorLyogRHVwbGljYXRlIGEgZmlsZSBkZXNjcmlwdG9yIHJlc3VsdCwgYXZvaWRpbmcgY2xvYmJlcmluZworICAgU1REe0lOLE9VVCxFUlJ9X0ZJTEVOTywgd2l0aCBzcGVjaWZpYyBmbGFncy4KKworICAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDA0LTIwMDYsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogV3JpdHRlbiBieSBQYXVsIEVnZ2VydCBhbmQgRXJpYyBCbGFrZS4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaW5jbHVkZSAidW5pc3RkLXNhZmVyLmgiCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisvKiBMaWtlIGR1cCwgYnV0IGRvIG5vdCByZXR1cm4gU1RESU5fRklMRU5PLCBTVERPVVRfRklMRU5PLCBvcgorICAgU1RERVJSX0ZJTEVOTy4gIElmIEZMQUcgY29udGFpbnMgT19DTE9FWEVDLCBiZWhhdmUgbGlrZQorICAgZmNudGwoRl9EVVBGRF9DTE9FWEVDKSByYXRoZXIgdGhhbiBmY250bChGX0RVUEZEKS4gICovCisKK2ludAorZHVwX3NhZmVyX2ZsYWcgKGludCBmZCwgaW50IGZsYWcpCit7CisgIHJldHVybiBmY250bCAoZmQsIChmbGFnICYgT19DTE9FWEVDKSA/IEZfRFVQRkRfQ0xPRVhFQyA6IEZfRFVQRkQsCisgICAgICAgICAgICAgICAgU1RERVJSX0ZJTEVOTyArIDEpOworfQpkaWZmIC0tZ2l0IGEvbGliL2R1cC1zYWZlci5jIGIvbGliL2R1cC1zYWZlci5jCmluZGV4IDhjYmVlNzAuLjBmNWQzYmUgMTAwNjQ0Ci0tLSBhL2xpYi9kdXAtc2FmZXIuYworKysgYi9saWIvZHVwLXNhZmVyLmMKQEAgLTEsMTAgKzEsMTEgQEAKIC8qIEludm9rZSBkdXAsIGJ1dCBhdm9pZCBzb21lIGdsaXRjaGVzLgotICAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDA0LTIwMDYsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCkBAIC0xMiwyMyArMTMsMTYgQEAKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAvKiBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0LiAgKi8KIAotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxjb25maWcuaD4KIAogI2luY2x1ZGUgInVuaXN0ZC1zYWZlci5oIgogCiAjaW5jbHVkZSA8ZmNudGwuaD4KLQogI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2lmbmRlZiBTVERFUlJfRklMRU5PCi0jIGRlZmluZSBTVERFUlJfRklMRU5PIDIKLSNlbmRpZgogCiAvKiBMaWtlIGR1cCwgYnV0IGRvIG5vdCByZXR1cm4gU1RESU5fRklMRU5PLCBTVERPVVRfRklMRU5PLCBvcgogICAgU1RERVJSX0ZJTEVOTy4gICovCkBAIC0zNiwxMSArMzAsNSBAQAogaW50CiBkdXBfc2FmZXIgKGludCBmZCkKIHsKLSNpZmRlZiBGX0RVUEZECiAgIHJldHVybiBmY250bCAoZmQsIEZfRFVQRkQsIFNUREVSUl9GSUxFTk8gKyAxKTsKLSNlbHNlCi0gIC8qIGZkX3NhZmVyIGNhbGxzIHVzIGJhY2ssIGJ1dCBldmVudHVhbGx5IHRoZSByZWN1cnNpb24gdW53aW5kcyBhbmQKLSAgICAgZG9lcyB0aGUgcmlnaHQgdGhpbmcuICAqLwotICByZXR1cm4gZmRfc2FmZXIgKGR1cCAoZmQpKTsKLSNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvbGliL2R1cDIuYyBiL2xpYi9kdXAyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZkMGYxYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9kdXAyLmMKQEAgLTAsMCArMSwxNTcgQEAKKy8qIER1cGxpY2F0ZSBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvciB0byBhIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuCisKKyAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwNC0yMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIHdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2lmIEhBVkVfRFVQMgorCisjIHVuZGVmIGR1cDIKKworIyBpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCisKKy8qIEdldCBkZWNsYXJhdGlvbnMgb2YgdGhlIG5hdGl2ZSBXaW5kb3dzIEFQSSBmdW5jdGlvbnMuICAqLworIyAgZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyMgIGluY2x1ZGUgPHdpbmRvd3MuaD4KKworIyAgaW5jbHVkZSAibXN2Yy1pbnZhbC5oIgorCisvKiBHZXQgX2dldF9vc2ZoYW5kbGUuICAqLworIyAgaW5jbHVkZSAibXN2Yy1ub3Rocm93LmgiCisKK3N0YXRpYyBpbnQKK21zX3dpbmRvd3NfZHVwMiAoaW50IGZkLCBpbnQgZGVzaXJlZF9mZCkKK3sKKyAgaW50IHJlc3VsdDsKKworICAvKiBJZiBmZCBpcyBjbG9zZWQsIG1pbmd3IGhhbmdzIG9uIGR1cDIgKGZkLCBmZCkuICBJZiBmZCBpcyBvcGVuLAorICAgICBkdXAyIChmZCwgZmQpIHJldHVybnMgMCwgYnV0IGFsbCBmdXJ0aGVyIGF0dGVtcHRzIHRvIHVzZSBmZCBpbgorICAgICBmdXR1cmUgZHVwMiBjYWxscyB3aWxsIGhhbmcuICAqLworICBpZiAoZmQgPT0gZGVzaXJlZF9mZCkKKyAgICB7CisgICAgICBpZiAoKEhBTkRMRSkgX2dldF9vc2ZoYW5kbGUgKGZkKSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAgICAgICAgeworICAgICAgICAgIGVycm5vID0gRUJBREY7CisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICByZXR1cm4gZmQ7CisgICAgfQorCisgIC8qIFdpbmUgMS4wLjEgcmV0dXJuIDAgd2hlbiBkZXNpcmVkX2ZkIGlzIG5lZ2F0aXZlIGJ1dCBub3QgLTE6CisgICAgIGh0dHA6Ly9idWdzLndpbmVocS5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjg5ICovCisgIGlmIChkZXNpcmVkX2ZkIDwgMCkKKyAgICB7CisgICAgICBlcnJubyA9IEVCQURGOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICBUUllfTVNWQ19JTlZBTAorICAgIHsKKyAgICAgIHJlc3VsdCA9IGR1cDIgKGZkLCBkZXNpcmVkX2ZkKTsKKyAgICB9CisgIENBVENIX01TVkNfSU5WQUwKKyAgICB7CisgICAgICBlcnJubyA9IEVCQURGOworICAgICAgcmVzdWx0ID0gLTE7CisgICAgfQorICBET05FX01TVkNfSU5WQUw7CisKKyAgaWYgKHJlc3VsdCA9PSAwKQorICAgIHJlc3VsdCA9IGRlc2lyZWRfZmQ7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworIyAgZGVmaW5lIGR1cDIgbXNfd2luZG93c19kdXAyCisKKyMgZW5kaWYKKworaW50CitycGxfZHVwMiAoaW50IGZkLCBpbnQgZGVzaXJlZF9mZCkKK3sKKyAgaW50IHJlc3VsdDsKKworIyBpZmRlZiBGX0dFVEZMCisgIC8qIE9uIExpbnV4IGtlcm5lbHMgMi42LjI2LTIuNi4yOSwgZHVwMiAoZmQsIGZkKSByZXR1cm5zIC1FQkFERi4KKyAgICAgT24gQ3lnd2luIDEuNS54LCBkdXAyICgxLCAxKSByZXR1cm5zIDAuCisgICAgIE9uIEhhaWt1LCBkdXAyIChmZCwgZmQpIG1pc3Rha2VubHkgY2xlYXJzIEZEX0NMT0VYRUMuICAqLworICBpZiAoZmQgPT0gZGVzaXJlZF9mZCkKKyAgICByZXR1cm4gZmNudGwgKGZkLCBGX0dFVEZMKSA9PSAtMSA/IC0xIDogZmQ7CisjIGVuZGlmCisKKyAgcmVzdWx0ID0gZHVwMiAoZmQsIGRlc2lyZWRfZmQpOworCisgIC8qIENvcnJlY3QgYW4gZXJybm8gdmFsdWUgb24gRnJlZUJTRCA2LjEgYW5kIEN5Z3dpbiAxLjUueC4gICovCisgIGlmIChyZXN1bHQgPT0gLTEgJiYgZXJybm8gPT0gRU1GSUxFKQorICAgIGVycm5vID0gRUJBREY7CisjIGlmIFJFUExBQ0VfRkNIRElSCisgIGlmIChmZCAhPSBkZXNpcmVkX2ZkICYmIHJlc3VsdCAhPSAtMSkKKyAgICByZXN1bHQgPSBfZ2xfcmVnaXN0ZXJfZHVwIChmZCwgcmVzdWx0KTsKKyMgZW5kaWYKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworI2Vsc2UgLyogIUhBVkVfRFVQMiAqLworCisvKiBPbiBvbGRlciBwbGF0Zm9ybXMsIGR1cDIgZGlkIG5vdCBleGlzdC4gICovCisKKyMgaWZuZGVmIEZfRFVQRkQKK3N0YXRpYyBpbnQKK2R1cGZkIChpbnQgZmQsIGludCBkZXNpcmVkX2ZkKQoreworICBpbnQgZHVwbGljYXRlZF9mZCA9IGR1cCAoZmQpOworICBpZiAoZHVwbGljYXRlZF9mZCA8IDAgfHwgZHVwbGljYXRlZF9mZCA9PSBkZXNpcmVkX2ZkKQorICAgIHJldHVybiBkdXBsaWNhdGVkX2ZkOworICBlbHNlCisgICAgeworICAgICAgaW50IHIgPSBkdXBmZCAoZmQsIGRlc2lyZWRfZmQpOworICAgICAgaW50IGUgPSBlcnJubzsKKyAgICAgIGNsb3NlIChkdXBsaWNhdGVkX2ZkKTsKKyAgICAgIGVycm5vID0gZTsKKyAgICAgIHJldHVybiByOworICAgIH0KK30KKyMgZW5kaWYKKworaW50CitkdXAyIChpbnQgZmQsIGludCBkZXNpcmVkX2ZkKQoreworICBpbnQgcmVzdWx0ID0gZmNudGwgKGZkLCBGX0dFVEZMKSA8IDAgPyAtMSA6IGZkOworICBpZiAocmVzdWx0ID09IC0xIHx8IGZkID09IGRlc2lyZWRfZmQpCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgY2xvc2UgKGRlc2lyZWRfZmQpOworIyBpZmRlZiBGX0RVUEZECisgIHJlc3VsdCA9IGZjbnRsIChmZCwgRl9EVVBGRCwgZGVzaXJlZF9mZCk7CisjICBpZiBSRVBMQUNFX0ZDSERJUgorICBpZiAoMCA8PSByZXN1bHQpCisgICAgcmVzdWx0ID0gX2dsX3JlZ2lzdGVyX2R1cCAoZmQsIHJlc3VsdCk7CisjICBlbmRpZgorIyBlbHNlCisgIHJlc3VsdCA9IGR1cGZkIChmZCwgZGVzaXJlZF9mZCk7CisjIGVuZGlmCisgIGlmIChyZXN1bHQgPT0gLTEgJiYgKGVycm5vID09IEVNRklMRSB8fCBlcnJubyA9PSBFSU5WQUwpKQorICAgIGVycm5vID0gRUJBREY7CisgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYgLyogIUhBVkVfRFVQMiAqLwpkaWZmIC0tZ2l0IGEvbGliL2ViaXRzZXQuYyBiL2xpYi9lYml0c2V0LmMKaW5kZXggY2VkZjBlMi4uOWYzNTQ5OSAxMDA2NDQKLS0tIGEvbGliL2ViaXRzZXQuYworKysgYi9saWIvZWJpdHNldC5jCkBAIC0xLDEwICsxLDEyIEBACiAvKiBGdW5jdGlvbnMgdG8gc3VwcG9ydCBleHBhbmRhYmxlIGJpdHNldHMuCi0gICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKICAgIENvbnRyaWJ1dGVkIGJ5IE1pY2hhZWwgSGF5ZXMgKG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56KS4KIAotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKQEAgLTEzLDE0ICsxNSwxMiBAQAogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCisjaW5jbHVkZSA8Y29uZmlnLmg+CiAKICNpbmNsdWRlICJlYml0c2V0LmgiCisKICNpbmNsdWRlICJvYnN0YWNrLmgiCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0xMzM1LDE3ICsxMzM1LDEyIEBACiBiaXRzZXQKIGViaXRzZXRfaW5pdCAoYml0c2V0IGJzZXQsIGJpdHNldF9iaW5kZXggbl9iaXRzKQogewotICBiaXRzZXRfd2luZGV4IHNpemU7Ci0KICAgYnNldC0+Yi52dGFibGUgPSAmZWJpdHNldF92dGFibGU7CiAKICAgYnNldC0+Yi5jc2l6ZSA9IEVCSVRTRVRfRUxUX1dPUkRTOwogCiAgIEVCSVRTRVRfWkVST19TRVQgKGJzZXQpOwogCi0gIHNpemUgPSBuX2JpdHMgPyAobl9iaXRzICsgRUJJVFNFVF9FTFRfQklUUyAtIDEpIC8gRUJJVFNFVF9FTFRfQklUUwotICAgIDogRUJJVFNFVF9JTklUSUFMX1NJWkU7Ci0KICAgRUJJVFNFVF9BU0laRSAoYnNldCkgPSAwOwogICBFQklUU0VUX0VMVFMgKGJzZXQpID0gMDsKICAgZWJpdHNldF9yZXNpemUgKGJzZXQsIG5fYml0cyk7CmRpZmYgLS1naXQgYS9saWIvZWJpdHNldC5oIGIvbGliL2ViaXRzZXQuaAppbmRleCBkYzYwMjczLi5hMjVlZDI4IDEwMDY0NAotLS0gYS9saWIvZWJpdHNldC5oCisrKyBiL2xpYi9lYml0c2V0LmgKQEAgLTEsMjAgKzEsMjEgQEAKIC8qIEZ1bmN0aW9ucyB0byBzdXBwb3J0IGViaXRzZXRzLgotICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwogICAgQ29udHJpYnV0ZWQgYnkgTWljaGFlbCBIYXllcyAobS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubnopLgogCi1UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0oYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAotVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi1idXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKLVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi1hbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogI2lmbmRlZiBfRUJJVFNFVF9ICiAjZGVmaW5lIF9FQklUU0VUX0gKZGlmZiAtLWdpdCBhL2xpYi9lcnJuby5pbi5oIGIvbGliL2Vycm5vLmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk2MTJjMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcnJuby5pbi5oCkBAIC0wLDAgKzEsMjc5IEBACisvKiBBIFBPU0lYLWxpa2UgPGVycm5vLmg+LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9FUlJOT19ICisKKyNpZiBfX0dOVUNfXyA+PSAzCitAUFJBR01BX1NZU1RFTV9IRUFERVJACisjZW5kaWYKK0BQUkFHTUFfQ09MVU1OU0AKKworLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworI0BJTkNMVURFX05FWFRAIEBORVhUX0VSUk5PX0hACisKKyNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX0VSUk5PX0gKKyNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX0VSUk5PX0gKKworCisvKiBPbiBuYXRpdmUgV2luZG93cyBwbGF0Zm9ybXMsIG1hbnkgbWFjcm9zIGFyZSBub3QgZGVmaW5lZC4gICovCisjIGlmIChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgISBkZWZpbmVkIF9fQ1lHV0lOX18KKworLyogVGhlc2UgYXJlIHRoZSBzYW1lIHZhbHVlcyBhcyBkZWZpbmVkIGJ5IE1TVkMgMTAsIGZvciBpbnRlcm9wZXJhYmlsaXR5LiAgKi8KKworIyAgaWZuZGVmIEVOT01TRworIyAgIGRlZmluZSBFTk9NU0cgICAgMTIyCisjICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VOT01TRyAxCisjICBlbmRpZgorCisjICBpZm5kZWYgRUlEUk0KKyMgICBkZWZpbmUgRUlEUk0gICAgIDExMQorIyAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FSURSTSAxCisjICBlbmRpZgorCisjICBpZm5kZWYgRU5PTElOSworIyAgIGRlZmluZSBFTk9MSU5LICAgMTIxCisjICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VOT0xJTksgMQorIyAgZW5kaWYKKworIyAgaWZuZGVmIEVQUk9UTworIyAgIGRlZmluZSBFUFJPVE8gICAgMTM0CisjICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VQUk9UTyAxCisjICBlbmRpZgorCisjICBpZm5kZWYgRUJBRE1TRworIyAgIGRlZmluZSBFQkFETVNHICAgMTA0CisjICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VCQURNU0cgMQorIyAgZW5kaWYKKworIyAgaWZuZGVmIEVPVkVSRkxPVworIyAgIGRlZmluZSBFT1ZFUkZMT1cgMTMyCisjICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VPVkVSRkxPVyAxCisjICBlbmRpZgorCisjICBpZm5kZWYgRU5PVFNVUAorIyAgIGRlZmluZSBFTk9UU1VQICAgMTI5CisjICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VOT1RTVVAgMQorIyAgZW5kaWYKKworIyAgaWZuZGVmIEVORVRSRVNFVAorIyAgIGRlZmluZSBFTkVUUkVTRVQgMTE3CisjICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VORVRSRVNFVCAxCisjICBlbmRpZgorCisjICBpZm5kZWYgRUNPTk5BQk9SVEVECisjICAgZGVmaW5lIEVDT05OQUJPUlRFRCAxMDYKKyMgICBkZWZpbmUgR05VTElCX2RlZmluZWRfRUNPTk5BQk9SVEVEIDEKKyMgIGVuZGlmCisKKyMgIGlmbmRlZiBFQ0FOQ0VMRUQKKyMgICBkZWZpbmUgRUNBTkNFTEVEIDEwNQorIyAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FQ0FOQ0VMRUQgMQorIyAgZW5kaWYKKworIyAgaWZuZGVmIEVPV05FUkRFQUQKKyMgICBkZWZpbmUgRU9XTkVSREVBRCAxMzMKKyMgICBkZWZpbmUgR05VTElCX2RlZmluZWRfRU9XTkVSREVBRCAxCisjICBlbmRpZgorCisjICBpZm5kZWYgRU5PVFJFQ09WRVJBQkxFCisjICAgZGVmaW5lIEVOT1RSRUNPVkVSQUJMRSAxMjcKKyMgICBkZWZpbmUgR05VTElCX2RlZmluZWRfRU5PVFJFQ09WRVJBQkxFIDEKKyMgIGVuZGlmCisKKyMgIGlmbmRlZiBFSU5QUk9HUkVTUworIyAgIGRlZmluZSBFSU5QUk9HUkVTUyAgICAgMTEyCisjICAgZGVmaW5lIEVBTFJFQURZICAgICAgICAxMDMKKyMgICBkZWZpbmUgRU5PVFNPQ0sgICAgICAgIDEyOAorIyAgIGRlZmluZSBFREVTVEFERFJSRVEgICAgMTA5CisjICAgZGVmaW5lIEVNU0dTSVpFICAgICAgICAxMTUKKyMgICBkZWZpbmUgRVBST1RPVFlQRSAgICAgIDEzNgorIyAgIGRlZmluZSBFTk9QUk9UT09QVCAgICAgMTIzCisjICAgZGVmaW5lIEVQUk9UT05PU1VQUE9SVCAxMzUKKyMgICBkZWZpbmUgRU9QTk9UU1VQUCAgICAgIDEzMAorIyAgIGRlZmluZSBFQUZOT1NVUFBPUlQgICAgMTAyCisjICAgZGVmaW5lIEVBRERSSU5VU0UgICAgICAxMDAKKyMgICBkZWZpbmUgRUFERFJOT1RBVkFJTCAgIDEwMQorIyAgIGRlZmluZSBFTkVURE9XTiAgICAgICAgMTE2CisjICAgZGVmaW5lIEVORVRVTlJFQUNIICAgICAxMTgKKyMgICBkZWZpbmUgRUNPTk5SRVNFVCAgICAgIDEwOAorIyAgIGRlZmluZSBFTk9CVUZTICAgICAgICAgMTE5CisjICAgZGVmaW5lIEVJU0NPTk4gICAgICAgICAxMTMKKyMgICBkZWZpbmUgRU5PVENPTk4gICAgICAgIDEyNgorIyAgIGRlZmluZSBFVElNRURPVVQgICAgICAgMTM4CisjICAgZGVmaW5lIEVDT05OUkVGVVNFRCAgICAxMDcKKyMgICBkZWZpbmUgRUxPT1AgICAgICAgICAgIDExNAorIyAgIGRlZmluZSBFSE9TVFVOUkVBQ0ggICAgMTEwCisjICAgZGVmaW5lIEVXT1VMREJMT0NLICAgICAxNDAKKyMgICBkZWZpbmUgR05VTElCX2RlZmluZWRfRVNPQ0sgMQorIyAgZW5kaWYKKworIyAgaWZuZGVmIEVUWFRCU1kKKyMgICBkZWZpbmUgRVRYVEJTWSAgICAgICAgIDEzOQorIyAgIGRlZmluZSBFTk9EQVRBICAgICAgICAgMTIwICAvKiBub3QgcmVxdWlyZWQgYnkgUE9TSVggKi8KKyMgICBkZWZpbmUgRU5PU1IgICAgICAgICAgIDEyNCAgLyogbm90IHJlcXVpcmVkIGJ5IFBPU0lYICovCisjICAgZGVmaW5lIEVOT1NUUiAgICAgICAgICAxMjUgIC8qIG5vdCByZXF1aXJlZCBieSBQT1NJWCAqLworIyAgIGRlZmluZSBFVElNRSAgICAgICAgICAgMTM3ICAvKiBub3QgcmVxdWlyZWQgYnkgUE9TSVggKi8KKyMgICBkZWZpbmUgRU9USEVSICAgICAgICAgIDEzMSAgLyogbm90IHJlcXVpcmVkIGJ5IFBPU0lYICovCisjICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VTVFJFQU1TIDEKKyMgIGVuZGlmCisKKy8qIFRoZXNlIGFyZSBpbnRlbnRpb25hbGx5IHRoZSBzYW1lIHZhbHVlcyBhcyB0aGUgV1NBKiBlcnJvciBudW1iZXJzLCBkZWZpbmVkCisgICBpbiA8d2luc29jazIuaD4uICAqLworIyAgZGVmaW5lIEVTT0NLVE5PU1VQUE9SVCAxMDA0NCAgLyogbm90IHJlcXVpcmVkIGJ5IFBPU0lYICovCisjICBkZWZpbmUgRVBGTk9TVVBQT1JUICAgIDEwMDQ2ICAvKiBub3QgcmVxdWlyZWQgYnkgUE9TSVggKi8KKyMgIGRlZmluZSBFU0hVVERPV04gICAgICAgMTAwNTggIC8qIG5vdCByZXF1aXJlZCBieSBQT1NJWCAqLworIyAgZGVmaW5lIEVUT09NQU5ZUkVGUyAgICAxMDA1OSAgLyogbm90IHJlcXVpcmVkIGJ5IFBPU0lYICovCisjICBkZWZpbmUgRUhPU1RET1dOICAgICAgIDEwMDY0ICAvKiBub3QgcmVxdWlyZWQgYnkgUE9TSVggKi8KKyMgIGRlZmluZSBFUFJPQ0xJTSAgICAgICAgMTAwNjcgIC8qIG5vdCByZXF1aXJlZCBieSBQT1NJWCAqLworIyAgZGVmaW5lIEVVU0VSUyAgICAgICAgICAxMDA2OCAgLyogbm90IHJlcXVpcmVkIGJ5IFBPU0lYICovCisjICBkZWZpbmUgRURRVU9UICAgICAgICAgIDEwMDY5CisjICBkZWZpbmUgRVNUQUxFICAgICAgICAgIDEwMDcwCisjICBkZWZpbmUgRVJFTU9URSAgICAgICAgIDEwMDcxICAvKiBub3QgcmVxdWlyZWQgYnkgUE9TSVggKi8KKyMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FV0lOU09DSyAxCisKKyMgZW5kaWYKKworCisvKiBPbiBPU0YvMSA1LjEsIHdoZW4gX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCBpcyBub3QgZGVmaW5lZCwgdGhlIG1hY3JvcworICAgRU1VTFRJSE9QLCBFTk9MSU5LLCBFT1ZFUkZMT1cgYXJlIG5vdCBkZWZpbmVkLiAgKi8KKyMgaWYgQEVNVUxUSUhPUF9ISURERU5ACisjICBkZWZpbmUgRU1VTFRJSE9QIEBFTVVMVElIT1BfVkFMVUVACisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfRU1VTFRJSE9QIDEKKyMgZW5kaWYKKyMgaWYgQEVOT0xJTktfSElEREVOQAorIyAgZGVmaW5lIEVOT0xJTksgICBARU5PTElOS19WQUxVRUAKKyMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FTk9MSU5LIDEKKyMgZW5kaWYKKyMgaWYgQEVPVkVSRkxPV19ISURERU5ACisjICBkZWZpbmUgRU9WRVJGTE9XIEBFT1ZFUkZMT1dfVkFMVUVACisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfRU9WRVJGTE9XIDEKKyMgZW5kaWYKKworCisvKiBPbiBPcGVuQlNEIDQuMCBhbmQgb24gbmF0aXZlIFdpbmRvd3MsIHRoZSBtYWNyb3MgRU5PTVNHLCBFSURSTSwgRU5PTElOSywKKyAgIEVQUk9UTywgRU1VTFRJSE9QLCBFQkFETVNHLCBFT1ZFUkZMT1csIEVOT1RTVVAsIEVDQU5DRUxFRCBhcmUgbm90IGRlZmluZWQuCisgICBMaWtld2lzZSwgb24gTm9uU3RvcCBLZXJuZWwsIEVEUVVPVCBpcyBub3QgZGVmaW5lZC4KKyAgIERlZmluZSB0aGVtIGhlcmUuICBWYWx1ZXMgPj0gMjAwMCBzZWVtIHNhZmUgdG8gdXNlOiBTb2xhcmlzIEVTVEFMRSA9IDE1MSwKKyAgIEhQLVVYIEVXT1VMREJMT0NLID0gMjQ2LCBJUklYIEVEUVVPVCA9IDExMzMuCisKKyAgIE5vdGU6IFdoZW4gb25lIG9mIHRoZXNlIHN5c3RlbXMgZGVmaW5lcyBzb21lIG9mIHRoZXNlIG1hY3JvcyBzb21lIGRheSwKKyAgIGJpbmFyaWVzIHdpbGwgaGF2ZSB0byBiZSByZWNvbXBpbGVkIHNvIHRoYXQgdGhleSByZWNvZ25pemVzIHRoZSBuZXcKKyAgIGVycm5vIHZhbHVlcyBmcm9tIHRoZSBzeXN0ZW0uICAqLworCisjIGlmbmRlZiBFTk9NU0cKKyMgIGRlZmluZSBFTk9NU0cgICAgMjAwMAorIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VOT01TRyAxCisjIGVuZGlmCisKKyMgaWZuZGVmIEVJRFJNCisjICBkZWZpbmUgRUlEUk0gICAgIDIwMDEKKyMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FSURSTSAxCisjIGVuZGlmCisKKyMgaWZuZGVmIEVOT0xJTksKKyMgIGRlZmluZSBFTk9MSU5LICAgMjAwMgorIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VOT0xJTksgMQorIyBlbmRpZgorCisjIGlmbmRlZiBFUFJPVE8KKyMgIGRlZmluZSBFUFJPVE8gICAgMjAwMworIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VQUk9UTyAxCisjIGVuZGlmCisKKyMgaWZuZGVmIEVNVUxUSUhPUAorIyAgZGVmaW5lIEVNVUxUSUhPUCAyMDA0CisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfRU1VTFRJSE9QIDEKKyMgZW5kaWYKKworIyBpZm5kZWYgRUJBRE1TRworIyAgZGVmaW5lIEVCQURNU0cgICAyMDA1CisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfRUJBRE1TRyAxCisjIGVuZGlmCisKKyMgaWZuZGVmIEVPVkVSRkxPVworIyAgZGVmaW5lIEVPVkVSRkxPVyAyMDA2CisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfRU9WRVJGTE9XIDEKKyMgZW5kaWYKKworIyBpZm5kZWYgRU5PVFNVUAorIyAgZGVmaW5lIEVOT1RTVVAgICAyMDA3CisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfRU5PVFNVUCAxCisjIGVuZGlmCisKKyMgaWZuZGVmIEVORVRSRVNFVAorIyAgZGVmaW5lIEVORVRSRVNFVCAyMDExCisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfRU5FVFJFU0VUIDEKKyMgZW5kaWYKKworIyBpZm5kZWYgRUNPTk5BQk9SVEVECisjICBkZWZpbmUgRUNPTk5BQk9SVEVEIDIwMTIKKyMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FQ09OTkFCT1JURUQgMQorIyBlbmRpZgorCisjIGlmbmRlZiBFU1RBTEUKKyMgIGRlZmluZSBFU1RBTEUgICAgMjAwOQorIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VTVEFMRSAxCisjIGVuZGlmCisKKyMgaWZuZGVmIEVEUVVPVAorIyAgZGVmaW5lIEVEUVVPVCAyMDEwCisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfRURRVU9UIDEKKyMgZW5kaWYKKworIyBpZm5kZWYgRUNBTkNFTEVECisjICBkZWZpbmUgRUNBTkNFTEVEIDIwMDgKKyMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FQ0FOQ0VMRUQgMQorIyBlbmRpZgorCisvKiBPbiBtYW55IHBsYXRmb3JtcywgdGhlIG1hY3JvcyBFT1dORVJERUFEIGFuZCBFTk9UUkVDT1ZFUkFCTEUgYXJlIG5vdAorICAgZGVmaW5lZC4gICovCisKKyMgaWZuZGVmIEVPV05FUkRFQUQKKyMgIGlmIGRlZmluZWQgX19zdW4KKyAgICAvKiBVc2UgdGhlIHNhbWUgdmFsdWVzIGFzIGRlZmluZWQgZm9yIFNvbGFyaXMgPj0gOCwgZm9yCisgICAgICAgaW50ZXJvcGVyYWJpbGl0eS4gICovCisjICAgZGVmaW5lIEVPV05FUkRFQUQgICAgICA1OAorIyAgIGRlZmluZSBFTk9UUkVDT1ZFUkFCTEUgNTkKKyMgIGVsaWYgKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXworICAgIC8qIFdlIGhhdmUgYSBjb25mbGljdCBoZXJlOiBwdGhyZWFkcy13aW4zMiBkZWZpbmVzIHRoZXNlIHZhbHVlcworICAgICAgIGRpZmZlcmVudGx5IHRoYW4gTVNWQyAxMC4gIEl0J3MgaGFpcnkgdG8gZGVjaWRlIHdoaWNoIG9uZSB0byB1c2UuICAqLworIyAgIGlmIGRlZmluZWQgX19NSU5HVzMyX18gJiYgIWRlZmluZWQgVVNFX1dJTkRPV1NfVEhSRUFEUworICAgICAvKiBVc2UgdGhlIHNhbWUgdmFsdWVzIGFzIGRlZmluZWQgYnkgcHRocmVhZHMtd2luMzIsIGZvcgorICAgICAgICBpbnRlcm9wZXJhYmlsaXR5LiAgKi8KKyMgICAgZGVmaW5lIEVPV05FUkRFQUQgICAgICA0MworIyAgICBkZWZpbmUgRU5PVFJFQ09WRVJBQkxFIDQ0CisjICAgZWxzZQorICAgICAvKiBVc2UgdGhlIHNhbWUgdmFsdWVzIGFzIGRlZmluZWQgYnkgTVNWQyAxMCwgZm9yCisgICAgICAgIGludGVyb3BlcmFiaWxpdHkuICAqLworIyAgICBkZWZpbmUgRU9XTkVSREVBRCAgICAgIDEzMworIyAgICBkZWZpbmUgRU5PVFJFQ09WRVJBQkxFIDEyNworIyAgIGVuZGlmCisjICBlbHNlCisjICAgZGVmaW5lIEVPV05FUkRFQUQgICAgICAyMDEzCisjICAgZGVmaW5lIEVOT1RSRUNPVkVSQUJMRSAyMDE0CisjICBlbmRpZgorIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VPV05FUkRFQUQgMQorIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VOT1RSRUNPVkVSQUJMRSAxCisjIGVuZGlmCisKKyMgaWZuZGVmIEVJTFNFUQorIyAgZGVmaW5lIEVJTFNFUSAyMDE1CisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfRUlMU0VRIDEKKyMgZW5kaWYKKworI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9FUlJOT19IICovCisjZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX0VSUk5PX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9lcnJvci5jIGIvbGliL2Vycm9yLmMKaW5kZXggNDU2OThiZS4uN2QyYmM3MSAxMDA2NDQKLS0tIGEvbGliL2Vycm9yLmMKKysrIGIvbGliL2Vycm9yLmMKQEAgLTEsMjQgKzEsMjMgQEAKIC8qIEVycm9yIGhhbmRsZXIgZm9yIG5vbmludGVyYWN0aXZlIHV0aWxpdGllcwotICAgQ29weXJpZ2h0IChDKSAxOTkwLTE5OTgsIDIwMDAtMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMTk5MC0xOTk4LCAyMDAwLTIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgogCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKIC8qIFdyaXR0ZW4gYnkgRGF2aWQgTWFjS2VuemllIDxkam1AZ251LmFpLm1pdC5lZHU+LiAgKi8KIAotI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpZiAhX0xJQkMKICMgaW5jbHVkZSA8Y29uZmlnLmg+CiAjZW5kaWYKIApAQCAtMzEsOSArMzAsMTMgQEAKIAogI2lmICFfTElCQyAmJiBFTkFCTEVfTkxTCiAjIGluY2x1ZGUgImdldHRleHQuaCIKKyMgZGVmaW5lIF8obXNnaWQpIGdldHRleHQgKG1zZ2lkKQogI2VuZGlmCiAKICNpZmRlZiBfTElCQworIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisjIGluY2x1ZGUgPHN0ZGJvb2wuaD4KKyMgaW5jbHVkZSA8c3RkaW50Lmg+CiAjIGluY2x1ZGUgPHdjaGFyLmg+CiAjIGRlZmluZSBtYnNydG93Y3MgX19tYnNydG93Y3MKICNlbmRpZgpAQCAtNTEsNyArNTQsNyBAQAogICAgZnVuY3Rpb24gd2l0aG91dCBwYXJhbWV0ZXJzIGluc3RlYWQuICAqLwogdm9pZCAoKmVycm9yX3ByaW50X3Byb2duYW1lKSAodm9pZCk7CiAKLS8qIFRoaXMgdmFyaWFibGUgaXMgaW5jcmVtZW50ZWQgZWFjaCB0aW1lIGBlcnJvcicgaXMgY2FsbGVkLiAgKi8KKy8qIFRoaXMgdmFyaWFibGUgaXMgaW5jcmVtZW50ZWQgZWFjaCB0aW1lICdlcnJvcicgaXMgY2FsbGVkLiAgKi8KIHVuc2lnbmVkIGludCBlcnJvcl9tZXNzYWdlX2NvdW50OwogCiAjaWZkZWYgX0xJQkMKQEAgLTU5LDE1ICs2MiwxNiBAQAogCiAjIGRlZmluZSBwcm9ncmFtX25hbWUgcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUKICMgaW5jbHVkZSA8ZXJybm8uaD4KKyMgaW5jbHVkZSA8bGltaXRzLmg+CiAjIGluY2x1ZGUgPGxpYmlvL2xpYmlvUC5oPgogCi0vKiBJbiBHTlUgbGliYyB3ZSB3YW50IGRvIG5vdCB3YW50IHRvIHVzZSB0aGUgY29tbW9uIG5hbWUgYGVycm9yJyBkaXJlY3RseS4KKy8qIEluIEdOVSBsaWJjIHdlIHdhbnQgZG8gbm90IHdhbnQgdG8gdXNlIHRoZSBjb21tb24gbmFtZSAnZXJyb3InIGRpcmVjdGx5LgogICAgSW5zdGVhZCBtYWtlIGl0IGEgd2VhayBhbGlhcy4gICovCiBleHRlcm4gdm9pZCBfX2Vycm9yIChpbnQgc3RhdHVzLCBpbnQgZXJybnVtLCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pCiAgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOwogZXh0ZXJuIHZvaWQgX19lcnJvcl9hdF9saW5lIChpbnQgc3RhdHVzLCBpbnQgZXJybnVtLCBjb25zdCBjaGFyICpmaWxlX25hbWUsCi0JCQkgICAgIHVuc2lnbmVkIGludCBsaW5lX251bWJlciwgY29uc3QgY2hhciAqbWVzc2FnZSwKLQkJCSAgICAgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGluZV9udW1iZXIsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikKICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDUsIDYpKSk7OwogIyBkZWZpbmUgZXJyb3IgX19lcnJvcgogIyBkZWZpbmUgZXJyb3JfYXRfbGluZSBfX2Vycm9yX2F0X2xpbmUKQEAgLTgxLDE1ICs4NSwyOSBAQAogCiAjZWxzZSAvKiBub3QgX0xJQkMgKi8KIAotIyBpZiAhSEFWRV9ERUNMX1NUUkVSUk9SX1IgJiYgU1RSRVJST1JfUl9DSEFSX1AKKyMgaW5jbHVkZSA8ZmNudGwuaD4KKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisKKyMgaWYgKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXworLyogR2V0IGRlY2xhcmF0aW9ucyBvZiB0aGUgbmF0aXZlIFdpbmRvd3MgQVBJIGZ1bmN0aW9ucy4gICovCisjICBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyAgaW5jbHVkZSA8d2luZG93cy5oPgorLyogR2V0IF9nZXRfb3NmaGFuZGxlLiAgKi8KKyMgIGluY2x1ZGUgIm1zdmMtbm90aHJvdy5oIgorIyBlbmRpZgorCisvKiBUaGUgZ251bGliIG92ZXJyaWRlIG9mIGZjbnRsIGlzIG5vdCBuZWVkZWQgaW4gdGhpcyBmaWxlLiAgKi8KKyMgdW5kZWYgZmNudGwKKworIyBpZiAhSEFWRV9ERUNMX1NUUkVSUk9SX1IKICMgIGlmbmRlZiBIQVZFX0RFQ0xfU1RSRVJST1JfUgogInRoaXMgY29uZmlndXJlLXRpbWUgZGVjbGFyYXRpb24gdGVzdCB3YXMgbm90IHJ1biIKICMgIGVuZGlmCisjICBpZiBTVFJFUlJPUl9SX0NIQVJfUAogY2hhciAqc3RyZXJyb3JfciAoKTsKLSMgZW5kaWYKLQotIyBpZm5kZWYgU0laRV9NQVgKLSMgIGRlZmluZSBTSVpFX01BWCAoKHNpemVfdCkgLTEpCisjICBlbHNlCitpbnQgc3RyZXJyb3JfciAoKTsKKyMgIGVuZGlmCiAjIGVuZGlmCiAKIC8qIFRoZSBjYWxsaW5nIHByb2dyYW0gc2hvdWxkIGRlZmluZSBwcm9ncmFtX25hbWUgYW5kIHNldCBpdCB0byB0aGUKQEAgLTk4LDEzICsxMTYsNTggQEAKIAogIyBpZiBIQVZFX1NUUkVSUk9SX1IgfHwgZGVmaW5lZCBzdHJlcnJvcl9yCiAjICBkZWZpbmUgX19zdHJlcnJvcl9yIHN0cmVycm9yX3IKKyMgZW5kaWYgLyogSEFWRV9TVFJFUlJPUl9SIHx8IGRlZmluZWQgc3RyZXJyb3JfciAqLworI2VuZGlmICAvKiBub3QgX0xJQkMgKi8KKworI2lmICFfTElCQworLyogUmV0dXJuIG5vbi16ZXJvIGlmIEZEIGlzIG9wZW4uICAqLworc3RhdGljIGludAoraXNfb3BlbiAoaW50IGZkKQoreworIyBpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCisgIC8qIE9uIG5hdGl2ZSBXaW5kb3dzOiBUaGUgaW5pdGlhbCBzdGF0ZSBvZiB1bmFzc2lnbmVkIHN0YW5kYXJkIGZpbGUKKyAgICAgZGVzY3JpcHRvcnMgaXMgdGhhdCB0aGV5IGFyZSBvcGVuIGJ1dCBwb2ludCB0byBhbiBJTlZBTElEX0hBTkRMRV9WQUxVRS4KKyAgICAgVGhlcmUgaXMgbm8gZmNudGwsIGFuZCB0aGUgZ251bGliIHJlcGxhY2VtZW50IGZjbnRsIGRvZXMgbm90IHN1cHBvcnQKKyAgICAgRl9HRVRGTC4gICovCisgIHJldHVybiAoSEFORExFKSBfZ2V0X29zZmhhbmRsZSAoZmQpICE9IElOVkFMSURfSEFORExFX1ZBTFVFOworIyBlbHNlCisjICBpZm5kZWYgRl9HRVRGTAorIyAgIGVycm9yIFBsZWFzZSBwb3J0IGZjbnRsIHRvIHlvdXIgcGxhdGZvcm0KKyMgIGVuZGlmCisgIHJldHVybiAwIDw9IGZjbnRsIChmZCwgRl9HRVRGTCk7CiAjIGVuZGlmCi0jZW5kaWYJLyogbm90IF9MSUJDICovCit9CisjZW5kaWYKKworc3RhdGljIHZvaWQKK2ZsdXNoX3N0ZG91dCAodm9pZCkKK3sKKyNpZiAhX0xJQkMKKyAgaW50IHN0ZG91dF9mZDsKKworIyBpZiBHTlVMSUJfRlJFT1BFTl9TQUZFUgorICAvKiBVc2Ugb2YgZ251bGliJ3MgZnJlb3Blbi1zYWZlciBtb2R1bGUgbm9ybWFsbHkgZW5zdXJlcyB0aGF0CisgICAgICAgZmlsZW5vIChzdGRvdXQpID09IDEKKyAgICAgd2hlbmV2ZXIgc3Rkb3V0IGlzIG9wZW4uICAqLworICBzdGRvdXRfZmQgPSBTVERPVVRfRklMRU5POworIyBlbHNlCisgIC8qIFBPU0lYIHN0YXRlcyB0aGF0IGZpbGVubyAoc3Rkb3V0KSBhZnRlciBmY2xvc2UgaXMgdW5zcGVjaWZpZWQuICBCdXQgaW4KKyAgICAgcHJhY3RpY2UgaXQgaXMgbm90IGEgcHJvYmxlbSwgYmVjYXVzZSBzdGRvdXQgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kCisgICAgIHRoZSBmZCBvZiBhIEZJTEUgc3RyZWFtIGlzIHN0b3JlZCBhcyBhIGZpZWxkIGluIGl0cyBhbGxvY2F0ZWQgbWVtb3J5LiAgKi8KKyAgc3Rkb3V0X2ZkID0gZmlsZW5vIChzdGRvdXQpOworIyBlbmRpZgorICAvKiBQT1NJWCBzdGF0ZXMgdGhhdCBmZmx1c2ggKHN0ZG91dCkgYWZ0ZXIgZmNsb3NlIGlzIHVuc3BlY2lmaWVkOyBpdAorICAgICBpcyBzYWZlIGluIGdsaWJjLCBidXQgbm90IG9uIGFsbCBvdGhlciBwbGF0Zm9ybXMuICBmZmx1c2ggKE5VTEwpCisgICAgIGlzIGFsd2F5cyBkZWZpbmVkLCBidXQgdG9vIGRyYWNvbmlhbi4gICovCisgIGlmICgwIDw9IHN0ZG91dF9mZCAmJiBpc19vcGVuIChzdGRvdXRfZmQpKQorI2VuZGlmCisgICAgZmZsdXNoIChzdGRvdXQpOworfQogCiBzdGF0aWMgdm9pZAogcHJpbnRfZXJybm9fbWVzc2FnZSAoaW50IGVycm51bSkKIHsKLSAgY2hhciBjb25zdCAqcyA9IE5VTEw7CisgIGNoYXIgY29uc3QgKnM7CiAKICNpZiBkZWZpbmVkIEhBVkVfU1RSRVJST1JfUiB8fCBfTElCQwogICBjaGFyIGVycmJ1ZlsxMDI0XTsKQEAgLTExMywyMyArMTc2LDIzIEBACiAjIGVsc2UKICAgaWYgKF9fc3RyZXJyb3JfciAoZXJybnVtLCBlcnJidWYsIHNpemVvZiBlcnJidWYpID09IDApCiAgICAgcyA9IGVycmJ1ZjsKKyAgZWxzZQorICAgIHMgPSAwOwogIyBlbmRpZgorI2Vsc2UKKyAgcyA9IHN0cmVycm9yIChlcnJudW0pOwogI2VuZGlmCiAKICNpZiAhX0xJQkMKLSAgaWYgKCEgcyAmJiAhIChzID0gc3RyZXJyb3IgKGVycm51bSkpKQorICBpZiAoISBzKQogICAgIHMgPSBfKCJVbmtub3duIHN5c3RlbSBlcnJvciIpOwogI2VuZGlmCiAKICNpZiBfTElCQwotICBpZiAoX0lPX2Z3aWRlIChzdGRlcnIsIDApID4gMCkKLSAgICB7Ci0gICAgICBfX2Z3cHJpbnRmIChzdGRlcnIsIEwiOiAlcyIsIHMpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCisgIF9fZnhwcmludGYgKE5VTEwsICI6ICVzIiwgcyk7CisjZWxzZQogICBmcHJpbnRmIChzdGRlcnIsICI6ICVzIiwgcyk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQKQEAgLTE0MCwyNiArMjAzLDY1IEBACiAgICAgewogIyBkZWZpbmUgQUxMT0NBX0xJTUlUIDIwMDAKICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKG1lc3NhZ2UpICsgMTsKLSAgICAgIGNvbnN0IHdjaGFyX3QgKndtZXNzYWdlID0gTCJvdXQgb2YgbWVtb3J5IjsKLSAgICAgIHdjaGFyX3QgKndidWYgPSAobGVuIDwgQUxMT0NBX0xJTUlUCi0JCSAgICAgICA/IGFsbG9jYSAobGVuICogc2l6ZW9mICp3YnVmKQotCQkgICAgICAgOiBsZW4gPD0gU0laRV9NQVggLyBzaXplb2YgKndidWYKLQkJICAgICAgID8gbWFsbG9jIChsZW4gKiBzaXplb2YgKndidWYpCi0JCSAgICAgICA6IE5VTEwpOworICAgICAgd2NoYXJfdCAqd21lc3NhZ2UgPSBOVUxMOworICAgICAgbWJzdGF0ZV90IHN0OworICAgICAgc2l6ZV90IHJlczsKKyAgICAgIGNvbnN0IGNoYXIgKnRtcDsKKyAgICAgIGJvb2wgdXNlX21hbGxvYyA9IGZhbHNlOwogCi0gICAgICBpZiAod2J1ZikKLQl7Ci0JICBzaXplX3QgcmVzOwotCSAgbWJzdGF0ZV90IHN0OwotCSAgY29uc3QgY2hhciAqdG1wID0gbWVzc2FnZTsKLQkgIG1lbXNldCAoJnN0LCAnXDAnLCBzaXplb2YgKHN0KSk7Ci0JICByZXMgPSBtYnNydG93Y3MgKHdidWYsICZ0bXAsIGxlbiwgJnN0KTsKLQkgIHdtZXNzYWdlID0gcmVzID09IChzaXplX3QpIC0xID8gTCI/Pz8iIDogd2J1ZjsKLQl9CisgICAgICB3aGlsZSAoMSkKKyAgICAgICAgeworICAgICAgICAgIGlmIChfX2xpYmNfdXNlX2FsbG9jYSAobGVuICogc2l6ZW9mICh3Y2hhcl90KSkpCisgICAgICAgICAgICB3bWVzc2FnZSA9ICh3Y2hhcl90ICopIGFsbG9jYSAobGVuICogc2l6ZW9mICh3Y2hhcl90KSk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoIXVzZV9tYWxsb2MpCisgICAgICAgICAgICAgICAgd21lc3NhZ2UgPSBOVUxMOworCisgICAgICAgICAgICAgIHdjaGFyX3QgKnAgPSAod2NoYXJfdCAqKSByZWFsbG9jICh3bWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAqIHNpemVvZiAod2NoYXJfdCkpOworICAgICAgICAgICAgICBpZiAocCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGZyZWUgKHdtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgIGZwdXR3c191bmxvY2tlZCAoTCJvdXQgb2YgbWVtb3J5XG4iLCBzdGRlcnIpOworICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgd21lc3NhZ2UgPSBwOworICAgICAgICAgICAgICB1c2VfbWFsbG9jID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIG1lbXNldCAoJnN0LCAnXDAnLCBzaXplb2YgKHN0KSk7CisgICAgICAgICAgdG1wID0gbWVzc2FnZTsKKworICAgICAgICAgIHJlcyA9IG1ic3J0b3djcyAod21lc3NhZ2UsICZ0bXAsIGxlbiwgJnN0KTsKKyAgICAgICAgICBpZiAocmVzICE9IGxlbikKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGxlbiA+PSBTSVpFX01BWCAvIDIsIDApKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBUaGlzIHJlYWxseSBzaG91bGQgbm90IGhhcHBlbiBpZiBldmVyeXRoaW5nIGlzIGZpbmUuICAqLworICAgICAgICAgICAgICByZXMgPSAoc2l6ZV90KSAtMTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBsZW4gKj0gMjsKKyAgICAgICAgfQorCisgICAgICBpZiAocmVzID09IChzaXplX3QpIC0xKQorICAgICAgICB7CisgICAgICAgICAgLyogVGhlIHN0cmluZyBjYW5ub3QgYmUgY29udmVydGVkLiAgKi8KKyAgICAgICAgICBpZiAodXNlX21hbGxvYykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZnJlZSAod21lc3NhZ2UpOworICAgICAgICAgICAgICB1c2VfbWFsbG9jID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgd21lc3NhZ2UgPSAod2NoYXJfdCAqKSBMIj8/PyI7CisgICAgICAgIH0KIAogICAgICAgX192ZndwcmludGYgKHN0ZGVyciwgd21lc3NhZ2UsIGFyZ3MpOwotICAgICAgaWYgKCEgKGxlbiA8IEFMTE9DQV9MSU1JVCkpCi0JZnJlZSAod2J1Zik7CisKKyAgICAgIGlmICh1c2VfbWFsbG9jKQorICAgICAgICBmcmVlICh3bWVzc2FnZSk7CiAgICAgfQogICBlbHNlCiAjZW5kaWYKQEAgLTE3MCwxMSArMjcyLDEwIEBACiAgIGlmIChlcnJudW0pCiAgICAgcHJpbnRfZXJybm9fbWVzc2FnZSAoZXJybnVtKTsKICNpZiBfTElCQwotICBpZiAoX0lPX2Z3aWRlIChzdGRlcnIsIDApID4gMCkKLSAgICBwdXR3YyAoTCdcbicsIHN0ZGVycik7Ci0gIGVsc2UKKyAgX19meHByaW50ZiAoTlVMTCwgIlxuIik7CisjZWxzZQorICBwdXRjICgnXG4nLCBzdGRlcnIpOwogI2VuZGlmCi0gICAgcHV0YyAoJ1xuJywgc3RkZXJyKTsKICAgZmZsdXNoIChzdGRlcnIpOwogICBpZiAoc3RhdHVzKQogICAgIGV4aXQgKHN0YXR1cyk7CkBAIC0xOTUsMTAgKzI5NiwxMCBAQAogICAgICBjYW5jZWxsYXRpb24uICBUaGVyZWZvcmUgZGlzYWJsZSBjYW5jZWxsYXRpb24gZm9yIG5vdy4gICovCiAgIGludCBzdGF0ZSA9IFBUSFJFQURfQ0FOQ0VMX0VOQUJMRTsKICAgX19saWJjX3B0Zl9jYWxsIChwdGhyZWFkX3NldGNhbmNlbHN0YXRlLCAoUFRIUkVBRF9DQU5DRUxfRElTQUJMRSwgJnN0YXRlKSwKLQkJICAgMCk7CisgICAgICAgICAgICAgICAgICAgMCk7CiAjZW5kaWYKIAotICBmZmx1c2ggKHN0ZG91dCk7CisgIGZsdXNoX3N0ZG91dCAoKTsKICNpZmRlZiBfTElCQwogICBfSU9fZmxvY2tmaWxlIChzdGRlcnIpOwogI2VuZGlmCkBAIC0yMDcsMTEgKzMwOCwxMCBAQAogICBlbHNlCiAgICAgewogI2lmIF9MSUJDCi0gICAgICBpZiAoX0lPX2Z3aWRlIChzdGRlcnIsIDApID4gMCkKLQlfX2Z3cHJpbnRmIChzdGRlcnIsIEwiJXM6ICIsIHByb2dyYW1fbmFtZSk7Ci0gICAgICBlbHNlCisgICAgICBfX2Z4cHJpbnRmIChOVUxMLCAiJXM6ICIsIHByb2dyYW1fbmFtZSk7CisjZWxzZQorICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICIsIHByb2dyYW1fbmFtZSk7CiAjZW5kaWYKLQlmcHJpbnRmIChzdGRlcnIsICIlczogIiwgcHJvZ3JhbV9uYW1lKTsKICAgICB9CiAKICAgdmFfc3RhcnQgKGFyZ3MsIG1lc3NhZ2UpOwpAQCAtMjMxLDcgKzMzMSw3IEBACiAKIHZvaWQKIGVycm9yX2F0X2xpbmUgKGludCBzdGF0dXMsIGludCBlcnJudW0sIGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwKLQkgICAgICAgdW5zaWduZWQgaW50IGxpbmVfbnVtYmVyLCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pCisgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGluZV9udW1iZXIsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLikKIHsKICAgdmFfbGlzdCBhcmdzOwogCkBAIC0yNDEsMTAgKzM0MSwxMCBAQAogICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBvbGRfbGluZV9udW1iZXI7CiAKICAgICAgIGlmIChvbGRfbGluZV9udW1iZXIgPT0gbGluZV9udW1iZXIKLQkgICYmIChmaWxlX25hbWUgPT0gb2xkX2ZpbGVfbmFtZQotCSAgICAgIHx8IHN0cmNtcCAob2xkX2ZpbGVfbmFtZSwgZmlsZV9uYW1lKSA9PSAwKSkKLQkvKiBTaW1wbHkgcmV0dXJuIGFuZCBwcmludCBub3RoaW5nLiAgKi8KLQlyZXR1cm47CisgICAgICAgICAgJiYgKGZpbGVfbmFtZSA9PSBvbGRfZmlsZV9uYW1lCisgICAgICAgICAgICAgIHx8IHN0cmNtcCAob2xkX2ZpbGVfbmFtZSwgZmlsZV9uYW1lKSA9PSAwKSkKKyAgICAgICAgLyogU2ltcGx5IHJldHVybiBhbmQgcHJpbnQgbm90aGluZy4gICovCisgICAgICAgIHJldHVybjsKIAogICAgICAgb2xkX2ZpbGVfbmFtZSA9IGZpbGVfbmFtZTsKICAgICAgIG9sZF9saW5lX251bWJlciA9IGxpbmVfbnVtYmVyOwpAQCAtMjU1LDEwICszNTUsMTAgQEAKICAgICAgY2FuY2VsbGF0aW9uLiAgVGhlcmVmb3JlIGRpc2FibGUgY2FuY2VsbGF0aW9uIGZvciBub3cuICAqLwogICBpbnQgc3RhdGUgPSBQVEhSRUFEX0NBTkNFTF9FTkFCTEU7CiAgIF9fbGliY19wdGZfY2FsbCAocHRocmVhZF9zZXRjYW5jZWxzdGF0ZSwgKFBUSFJFQURfQ0FOQ0VMX0RJU0FCTEUsICZzdGF0ZSksCi0JCSAgIDApOworICAgICAgICAgICAgICAgICAgIDApOwogI2VuZGlmCiAKLSAgZmZsdXNoIChzdGRvdXQpOworICBmbHVzaF9zdGRvdXQgKCk7CiAjaWZkZWYgX0xJQkMKICAgX0lPX2Zsb2NrZmlsZSAoc3RkZXJyKTsKICNlbmRpZgpAQCAtMjY3LDIyICszNjcsMTkgQEAKICAgZWxzZQogICAgIHsKICNpZiBfTElCQwotICAgICAgaWYgKF9JT19md2lkZSAoc3RkZXJyLCAwKSA+IDApCi0JX19md3ByaW50ZiAoc3RkZXJyLCBMIiVzOiAiLCBwcm9ncmFtX25hbWUpOwotICAgICAgZWxzZQorICAgICAgX19meHByaW50ZiAoTlVMTCwgIiVzOiIsIHByb2dyYW1fbmFtZSk7CisjZWxzZQorICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6IiwgcHJvZ3JhbV9uYW1lKTsKICNlbmRpZgotCWZwcmludGYgKHN0ZGVyciwgIiVzOiIsIHByb2dyYW1fbmFtZSk7CiAgICAgfQogCi0gIGlmIChmaWxlX25hbWUgIT0gTlVMTCkKLSAgICB7CiAjaWYgX0xJQkMKLSAgICAgIGlmIChfSU9fZndpZGUgKHN0ZGVyciwgMCkgPiAwKQotCV9fZndwcmludGYgKHN0ZGVyciwgTCIlczolZDogIiwgZmlsZV9uYW1lLCBsaW5lX251bWJlcik7Ci0gICAgICBlbHNlCisgIF9fZnhwcmludGYgKE5VTEwsIGZpbGVfbmFtZSAhPSBOVUxMID8gIiVzOiVkOiAiIDogIiAiLAorICAgICAgICAgICAgICBmaWxlX25hbWUsIGxpbmVfbnVtYmVyKTsKKyNlbHNlCisgIGZwcmludGYgKHN0ZGVyciwgZmlsZV9uYW1lICE9IE5VTEwgPyAiJXM6JWQ6ICIgOiAiICIsCisgICAgICAgICAgIGZpbGVfbmFtZSwgbGluZV9udW1iZXIpOwogI2VuZGlmCi0JZnByaW50ZiAoc3RkZXJyLCAiJXM6JWQ6ICIsIGZpbGVfbmFtZSwgbGluZV9udW1iZXIpOwotICAgIH0KIAogICB2YV9zdGFydCAoYXJncywgbWVzc2FnZSk7CiAgIGVycm9yX3RhaWwgKHN0YXR1cywgZXJybnVtLCBtZXNzYWdlLCBhcmdzKTsKZGlmZiAtLWdpdCBhL2xpYi9lcnJvci5oIGIvbGliL2Vycm9yLmgKaW5kZXggZTUyMjBhMi4uOWMyY2I4YiAxMDA2NDQKLS0tIGEvbGliL2Vycm9yLmgKKysrIGIvbGliL2Vycm9yLmgKQEAgLTEsNjUgKzEsNjQgQEAKIC8qIERlY2xhcmF0aW9uIGZvciBlcnJvci1yZXBvcnRpbmcgZnVuY3Rpb24KLSAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NywgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk3LCAyMDAzLCAyMDA2LCAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLgogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCiAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogI2lmbmRlZiBfRVJST1JfSAogI2RlZmluZSBfRVJST1JfSCAxCiAKLSNpZm5kZWYgX19hdHRyaWJ1dGVfXwotLyogVGhpcyBmZWF0dXJlIGlzIGF2YWlsYWJsZSBpbiBnY2MgdmVyc2lvbnMgMi41IGFuZCBsYXRlci4gICovCi0jIGlmIF9fR05VQ19fIDwgMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpCi0jICBkZWZpbmUgX19hdHRyaWJ1dGVfXyhTcGVjKSAvKiBlbXB0eSAqLwotIyBlbmRpZgotLyogVGhlIF9fLXByb3RlY3RlZCB2YXJpYW50cyBvZiBgZm9ybWF0JyBhbmQgYHByaW50ZicgYXR0cmlidXRlcwotICAgYXJlIGFjY2VwdGVkIGJ5IGdjYyB2ZXJzaW9ucyAyLjYuNCAoZWZmZWN0aXZlbHkgMi43KSBhbmQgbGF0ZXIuICAqLwotIyBpZiBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA3KQotIyAgZGVmaW5lIF9fZm9ybWF0X18gZm9ybWF0Ci0jICBkZWZpbmUgX19wcmludGZfXyBwcmludGYKLSMgZW5kaWYKKy8qIFRoZSBfX2F0dHJpYnV0ZV9fIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLgorICAgVGhlIF9fLXByb3RlY3RlZCB2YXJpYW50cyBvZiB0aGUgYXR0cmlidXRlcyAnZm9ybWF0JyBhbmQgJ3ByaW50ZicgYXJlCisgICBhY2NlcHRlZCBieSBnY2MgdmVyc2lvbnMgMi42LjQgKGVmZmVjdGl2ZWx5IDIuNykgYW5kIGxhdGVyLgorICAgV2UgZW5hYmxlIF9HTF9BVFRSSUJVVEVfRk9STUFUIG9ubHkgaWYgdGhlc2UgYXJlIHN1cHBvcnRlZCB0b28sIGJlY2F1c2UKKyAgIGdudWxpYiBhbmQgbGliaW50bCBkbyAnI2RlZmluZSBwcmludGYgX19wcmludGZfXycgd2hlbiB0aGV5IG92ZXJyaWRlCisgICB0aGUgJ3ByaW50ZicgZnVuY3Rpb24uICAqLworI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA3KQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9GT1JNQVQoc3BlYykgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gc3BlYykpCisjZWxzZQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9GT1JNQVQoc3BlYykgLyogZW1wdHkgKi8KICNlbmRpZgogCi0jaWZkZWYJX19jcGx1c3BsdXMKKyNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotLyogUHJpbnQgYSBtZXNzYWdlIHdpdGggYGZwcmludGYgKHN0ZGVyciwgRk9STUFULCAuLi4pJzsKKy8qIFByaW50IGEgbWVzc2FnZSB3aXRoICdmcHJpbnRmIChzdGRlcnIsIEZPUk1BVCwgLi4uKSc7CiAgICBpZiBFUlJOVU0gaXMgbm9uemVybywgZm9sbG93IGl0IHdpdGggIjogIiBhbmQgc3RyZXJyb3IgKEVSUk5VTSkuCi0gICBJZiBTVEFUVVMgaXMgbm9uemVybywgdGVybWluYXRlIHRoZSBwcm9ncmFtIHdpdGggYGV4aXQgKFNUQVRVUyknLiAgKi8KKyAgIElmIFNUQVRVUyBpcyBub256ZXJvLCB0ZXJtaW5hdGUgdGhlIHByb2dyYW0gd2l0aCAnZXhpdCAoU1RBVFVTKScuICAqLwogCiBleHRlcm4gdm9pZCBlcnJvciAoaW50IF9fc3RhdHVzLCBpbnQgX19lcnJudW0sIGNvbnN0IGNoYXIgKl9fZm9ybWF0LCAuLi4pCi0gICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOworICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVCAoKF9fcHJpbnRmX18sIDMsIDQpKTsKIAogZXh0ZXJuIHZvaWQgZXJyb3JfYXRfbGluZSAoaW50IF9fc3RhdHVzLCBpbnQgX19lcnJudW0sIGNvbnN0IGNoYXIgKl9fZm5hbWUsCi0JCQkgICB1bnNpZ25lZCBpbnQgX19saW5lbm8sIGNvbnN0IGNoYXIgKl9fZm9ybWF0LCAuLi4pCi0gICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCA1LCA2KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZW5vLCBjb25zdCBjaGFyICpfX2Zvcm1hdCwgLi4uKQorICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVCAoKF9fcHJpbnRmX18sIDUsIDYpKTsKIAogLyogSWYgTlVMTCwgZXJyb3Igd2lsbCBmbHVzaCBzdGRvdXQsIHRoZW4gcHJpbnQgb24gc3RkZXJyIHRoZSBwcm9ncmFtCiAgICBuYW1lLCBhIGNvbG9uIGFuZCBhIHNwYWNlLiAgT3RoZXJ3aXNlLCBlcnJvciB3aWxsIGNhbGwgdGhpcwogICAgZnVuY3Rpb24gd2l0aG91dCBwYXJhbWV0ZXJzIGluc3RlYWQuICAqLwogZXh0ZXJuIHZvaWQgKCplcnJvcl9wcmludF9wcm9nbmFtZSkgKHZvaWQpOwogCi0vKiBUaGlzIHZhcmlhYmxlIGlzIGluY3JlbWVudGVkIGVhY2ggdGltZSBgZXJyb3InIGlzIGNhbGxlZC4gICovCisvKiBUaGlzIHZhcmlhYmxlIGlzIGluY3JlbWVudGVkIGVhY2ggdGltZSAnZXJyb3InIGlzIGNhbGxlZC4gICovCiBleHRlcm4gdW5zaWduZWQgaW50IGVycm9yX21lc3NhZ2VfY291bnQ7CiAKIC8qIFNvbWV0aW1lcyB3ZSB3YW50IHRvIGhhdmUgYXQgbW9zdCBvbmUgZXJyb3IgcGVyIGxpbmUuICBUaGlzCiAgICB2YXJpYWJsZSBjb250cm9scyB3aGV0aGVyIHRoaXMgbW9kZSBpcyBzZWxlY3RlZCBvciBub3QuICAqLwogZXh0ZXJuIGludCBlcnJvcl9vbmVfcGVyX2xpbmU7CiAKLSNpZmRlZglfX2NwbHVzcGx1cworI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbGliL2V4aXQuaCBiL2xpYi9leGl0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkYmZiN2MuLjAwMDAwMDAKLS0tIGEvbGliL2V4aXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qIGV4aXQoKSBmdW5jdGlvbi4KLSAgIENvcHlyaWdodCAoQykgMTk5NSwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCi0KLSNpZm5kZWYgX0VYSVRfSAotI2RlZmluZSBfRVhJVF9ICi0KLS8qIEdldCBleGl0KCkgZGVjbGFyYXRpb24uICAqLwotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0vKiBTb21lIHN5c3RlbXMgZG8gbm90IGRlZmluZSBFWElUXyosIGV2ZW4gd2l0aCBTVERDX0hFQURFUlMuICAqLwotI2lmbmRlZiBFWElUX1NVQ0NFU1MKLSMgZGVmaW5lIEVYSVRfU1VDQ0VTUyAwCi0jZW5kaWYKLSNpZm5kZWYgRVhJVF9GQUlMVVJFCi0jIGRlZmluZSBFWElUX0ZBSUxVUkUgMQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfRVhJVF9IICovCmRpZmYgLS1naXQgYS9saWIvZXhpdGZhaWwuYyBiL2xpYi9leGl0ZmFpbC5jCmluZGV4IDI3ZDM4YzMuLmZkZDY3NGMgMTAwNjQ0Ci0tLSBhL2xpYi9leGl0ZmFpbC5jCisrKyBiL2xpYi9leGl0ZmFpbC5jCkBAIC0xLDExICsxLDExIEBACiAvKiBGYWlsdXJlIGV4aXQgc3RhdHVzCiAKLSAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDAzLCAyMDA1LTIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpAQCAtMTMsMTUgKzEzLDEyIEBACiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgorI2luY2x1ZGUgPGNvbmZpZy5oPgogCiAjaW5jbHVkZSAiZXhpdGZhaWwuaCIKLSNpbmNsdWRlICJleGl0LmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KIAogaW50IHZvbGF0aWxlIGV4aXRfZmFpbHVyZSA9IEVYSVRfRkFJTFVSRTsKZGlmZiAtLWdpdCBhL2xpYi9leGl0ZmFpbC5oIGIvbGliL2V4aXRmYWlsLmgKaW5kZXggZTQ2Y2Y5Yy4uMDc0ZjIxMiAxMDA2NDQKLS0tIGEvbGliL2V4aXRmYWlsLmgKKysrIGIvbGliL2V4aXRmYWlsLmgKQEAgLTEsMTEgKzEsMTEgQEAKIC8qIEZhaWx1cmUgZXhpdCBzdGF0dXMKIAotICAgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKQEAgLTEzLDggKzEzLDYgQEAKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKIGV4dGVybiBpbnQgdm9sYXRpbGUgZXhpdF9mYWlsdXJlOwpkaWZmIC0tZ2l0IGEvbGliL2ZhdGFsLXNpZ25hbC5jIGIvbGliL2ZhdGFsLXNpZ25hbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZTlkODIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZmF0YWwtc2lnbmFsLmMKQEAgLTAsMCArMSwyODYgQEAKKy8qIEVtZXJnZW5jeSBhY3Rpb25zIGluIGNhc2Ugb2YgYSBmYXRhbCBzaWduYWwuCisgICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCwgMjAwNi0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4sIDIwMDMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlICJmYXRhbC1zaWduYWwuaCIKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgInNpZy1oYW5kbGVyLmgiCisjaW5jbHVkZSAieGFsbG9jLmgiCisKKyNkZWZpbmUgU0laRU9GKGEpIChzaXplb2YoYSkgLyBzaXplb2YoYVswXSkpCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiBUaGUgbGlzdCBvZiBmYXRhbCBzaWduYWxzLgorICAgVGhlc2UgYXJlIHRob3NlIHNpZ25hbHMgd2hvc2UgZGVmYXVsdCBhY3Rpb24gaXMgdG8gdGVybWluYXRlIHRoZSBwcm9jZXNzCisgICB3aXRob3V0IGEgY29yZSBkdW1wLCBleGNlcHQKKyAgICAgU0lHS0lMTCAtIGJlY2F1c2UgaXQgY2Fubm90IGJlIGNhdWdodCwKKyAgICAgU0lHQUxSTSBTSUdVU1IxIFNJR1VTUjIgU0lHUE9MTCBTSUdJTyBTSUdMT1NUIC0gYmVjYXVzZSBhcHBsaWNhdGlvbnMKKyAgICAgICBvZnRlbiB1c2UgdGhlbSBmb3IgdGhlaXIgb3duIHB1cnBvc2UsCisgICAgIFNJR1BST0YgU0lHVlRBTFJNIC0gYmVjYXVzZSB0aGV5IGFyZSB1c2VkIGZvciBwcm9maWxpbmcsCisgICAgIFNJR1NUS0ZMVCAtIGJlY2F1c2UgaXQgaXMgbW9yZSBzaW1pbGFyIHRvIFNJR0ZQRSwgU0lHU0VHViwgU0lHQlVTLAorICAgICBTSUdTWVMgLSBiZWNhdXNlIGl0IGlzIG1vcmUgc2ltaWxhciB0byBTSUdBQlJULCBTSUdTRUdWLAorICAgICBTSUdQV1IgLSBiZWNhdXNlIGl0IG9mIHRvbyBzcGVjaWFsIHVzZSwKKyAgICAgU0lHUlRNSU4uLi5TSUdSVE1BWCAtIGJlY2F1c2UgdGhleSBhcmUgcmVzZXJ2ZWQgZm9yIGFwcGxpY2F0aW9uIHVzZS4KKyAgIHBsdXMKKyAgICAgU0lHWENQVSwgU0lHWEZTWiAtIGJlY2F1c2UgdGhleSBhcmUgcXVpdGUgc2ltaWxhciB0byBTSUdURVJNLiAgKi8KKworc3RhdGljIGludCBmYXRhbF9zaWduYWxzW10gPQorICB7CisgICAgLyogSVNPIEMgOTkgc2lnbmFscy4gICovCisjaWZkZWYgU0lHSU5UCisgICAgU0lHSU5ULAorI2VuZGlmCisjaWZkZWYgU0lHVEVSTQorICAgIFNJR1RFUk0sCisjZW5kaWYKKyAgICAvKiBQT1NJWDoyMDAxIHNpZ25hbHMuICAqLworI2lmZGVmIFNJR0hVUAorICAgIFNJR0hVUCwKKyNlbmRpZgorI2lmZGVmIFNJR1BJUEUKKyAgICBTSUdQSVBFLAorI2VuZGlmCisgICAgLyogQlNEIHNpZ25hbHMuICAqLworI2lmZGVmIFNJR1hDUFUKKyAgICBTSUdYQ1BVLAorI2VuZGlmCisjaWZkZWYgU0lHWEZTWgorICAgIFNJR1hGU1osCisjZW5kaWYKKyAgICAvKiBOYXRpdmUgV2luZG93cyBzaWduYWxzLiAgKi8KKyNpZmRlZiBTSUdCUkVBSworICAgIFNJR0JSRUFLLAorI2VuZGlmCisgICAgMAorICB9OworCisjZGVmaW5lIG51bV9mYXRhbF9zaWduYWxzIChTSVpFT0YgKGZhdGFsX3NpZ25hbHMpIC0gMSkKKworLyogRWxpbWluYXRlIHNpZ25hbHMgd2hvc2Ugc2lnbmFsIGhhbmRsZXIgaXMgU0lHX0lHTi4gICovCisKK3N0YXRpYyB2b2lkCitpbml0X2ZhdGFsX3NpZ25hbHMgKHZvaWQpCit7CisgIHN0YXRpYyBib29sIGZhdGFsX3NpZ25hbHNfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgaWYgKCFmYXRhbF9zaWduYWxzX2luaXRpYWxpemVkKQorICAgIHsKKyAgICAgIHNpemVfdCBpOworCisgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2ZhdGFsX3NpZ25hbHM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworCisgICAgICAgICAgaWYgKHNpZ2FjdGlvbiAoZmF0YWxfc2lnbmFsc1tpXSwgTlVMTCwgJmFjdGlvbikgPj0gMAorICAgICAgICAgICAgICAmJiBnZXRfaGFuZGxlciAoJmFjdGlvbikgPT0gU0lHX0lHTikKKyAgICAgICAgICAgIGZhdGFsX3NpZ25hbHNbaV0gPSAtMTsKKyAgICAgICAgfQorCisgICAgICBmYXRhbF9zaWduYWxzX2luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9Cit9CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKK3R5cGVkZWYgdm9pZCAoKmFjdGlvbl90KSAodm9pZCk7CisKKy8qIFR5cGUgb2YgYW4gZW50cnkgaW4gdGhlIGFjdGlvbnMgYXJyYXkuCisgICBUaGUgJ2FjdGlvbicgZmllbGQgaXMgYWNjZXNzZWQgZnJvbSB3aXRoaW4gdGhlIGZhdGFsX3NpZ25hbF9oYW5kbGVyKCksCisgICB0aGVyZWZvcmUgd2UgbWFyayBpdCBhcyAndm9sYXRpbGUnLiAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIHZvbGF0aWxlIGFjdGlvbl90IGFjdGlvbjsKK30KK2FjdGlvbnNfZW50cnlfdDsKKworLyogVGhlIHJlZ2lzdGVyZWQgY2xlYW51cCBhY3Rpb25zLiAgKi8KK3N0YXRpYyBhY3Rpb25zX2VudHJ5X3Qgc3RhdGljX2FjdGlvbnNbMzJdOworc3RhdGljIGFjdGlvbnNfZW50cnlfdCAqIHZvbGF0aWxlIGFjdGlvbnMgPSBzdGF0aWNfYWN0aW9uczsKK3N0YXRpYyBzaWdfYXRvbWljX3Qgdm9sYXRpbGUgYWN0aW9uc19jb3VudCA9IDA7CitzdGF0aWMgc2l6ZV90IGFjdGlvbnNfYWxsb2NhdGVkID0gU0laRU9GIChzdGF0aWNfYWN0aW9ucyk7CisKKworLyogVGhlIHNhdmVkIHNpZ25hbCBoYW5kbGVycy4KKyAgIFNpemUgMzIgd291bGQgbm90IGJlIHN1ZmZpY2llbnQ6IE9uIEhQLVVYLCBTSUdYQ1BVID0gMzMsIFNJR1hGU1ogPSAzNC4gICovCitzdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBzYXZlZF9zaWdhY3Rpb25zWzY0XTsKKworCisvKiBVbmluc3RhbGwgdGhlIGhhbmRsZXJzLiAgKi8KK3N0YXRpYyB2b2lkCit1bmluc3RhbGxfaGFuZGxlcnMgKHZvaWQpCit7CisgIHNpemVfdCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBudW1fZmF0YWxfc2lnbmFsczsgaSsrKQorICAgIGlmIChmYXRhbF9zaWduYWxzW2ldID49IDApCisgICAgICB7CisgICAgICAgIGludCBzaWcgPSBmYXRhbF9zaWduYWxzW2ldOworICAgICAgICBpZiAoc2F2ZWRfc2lnYWN0aW9uc1tzaWddLnNhX2hhbmRsZXIgPT0gU0lHX0lHTikKKyAgICAgICAgICBzYXZlZF9zaWdhY3Rpb25zW3NpZ10uc2FfaGFuZGxlciA9IFNJR19ERkw7CisgICAgICAgIHNpZ2FjdGlvbiAoc2lnLCAmc2F2ZWRfc2lnYWN0aW9uc1tzaWddLCBOVUxMKTsKKyAgICAgIH0KK30KKworCisvKiBUaGUgc2lnbmFsIGhhbmRsZXIuICBJdCBnZXRzIGNhbGxlZCBhc3luY2hyb25vdXNseS4gICovCitzdGF0aWMgdm9pZAorZmF0YWxfc2lnbmFsX2hhbmRsZXIgKGludCBzaWcpCit7CisgIGZvciAoOzspCisgICAgeworICAgICAgLyogR2V0IHRoZSBsYXN0IHJlZ2lzdGVyZWQgY2xlYW51cCBhY3Rpb24sIGluIGEgcmVlbnRyYW50IHdheS4gICovCisgICAgICBhY3Rpb25fdCBhY3Rpb247CisgICAgICBzaXplX3QgbiA9IGFjdGlvbnNfY291bnQ7CisgICAgICBpZiAobiA9PSAwKQorICAgICAgICBicmVhazsKKyAgICAgIG4tLTsKKyAgICAgIGFjdGlvbnNfY291bnQgPSBuOworICAgICAgYWN0aW9uID0gYWN0aW9uc1tuXS5hY3Rpb247CisgICAgICAvKiBFeGVjdXRlIHRoZSBhY3Rpb24uICAqLworICAgICAgYWN0aW9uICgpOworICAgIH0KKworICAvKiBOb3cgZXhlY3V0ZSB0aGUgc2lnbmFsJ3MgZGVmYXVsdCBhY3Rpb24uCisgICAgIElmIHRoZSBzaWduYWwgYmVpbmcgZGVsaXZlcmVkIHdhcyBibG9ja2VkLCB0aGUgcmUtcmFpc2VkIHNpZ25hbCB3b3VsZCBiZQorICAgICBkZWxpdmVyZWQgd2hlbiB0aGlzIGhhbmRsZXIgcmV0dXJucy4gIEJ1dCB0aGUgd2F5IHdlIGluc3RhbGwgdGhpcyBoYW5kbGVyLAorICAgICBubyBzaWduYWwgaXMgYmxvY2tlZCwgYW5kIHRoZSByZS1yYWlzZWQgc2lnbmFsIGlzIGRlbGl2ZXJlZCBhbHJlYWR5CisgICAgIGR1cmluZyByYWlzZSgpLiAgKi8KKyAgdW5pbnN0YWxsX2hhbmRsZXJzICgpOworICByYWlzZSAoc2lnKTsKK30KKworCisvKiBJbnN0YWxsIHRoZSBoYW5kbGVycy4gICovCitzdGF0aWMgdm9pZAoraW5zdGFsbF9oYW5kbGVycyAodm9pZCkKK3sKKyAgc2l6ZV90IGk7CisgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworCisgIGFjdGlvbi5zYV9oYW5kbGVyID0gJmZhdGFsX3NpZ25hbF9oYW5kbGVyOworICAvKiBJZiB3ZSBnZXQgYSBmYXRhbCBzaWduYWwgd2hpbGUgZXhlY3V0aW5nIGZhdGFsX3NpZ25hbF9oYW5kbGVyLCBlbnRlcgorICAgICBmYXRhbF9zaWduYWxfaGFuZGxlciByZWN1cnNpdmVseSwgc2luY2UgaXQgaXMgcmVlbnRyYW50LiAgSGVuY2Ugbm8KKyAgICAgU0FfUkVTRVRIQU5ELiAgKi8KKyAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfTk9ERUZFUjsKKyAgc2lnZW1wdHlzZXQgKCZhY3Rpb24uc2FfbWFzayk7CisgIGZvciAoaSA9IDA7IGkgPCBudW1fZmF0YWxfc2lnbmFsczsgaSsrKQorICAgIGlmIChmYXRhbF9zaWduYWxzW2ldID49IDApCisgICAgICB7CisgICAgICAgIGludCBzaWcgPSBmYXRhbF9zaWduYWxzW2ldOworCisgICAgICAgIGlmICghKHNpZyA8IHNpemVvZiAoc2F2ZWRfc2lnYWN0aW9ucykgLyBzaXplb2YgKHNhdmVkX3NpZ2FjdGlvbnNbMF0pKSkKKyAgICAgICAgICBhYm9ydCAoKTsKKyAgICAgICAgc2lnYWN0aW9uIChzaWcsICZhY3Rpb24sICZzYXZlZF9zaWdhY3Rpb25zW3NpZ10pOworICAgICAgfQorfQorCisKKy8qIFJlZ2lzdGVyIGEgY2xlYW51cCBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCB3aGVuIGEgY2F0Y2hhYmxlIGZhdGFsIHNpZ25hbAorICAgb2NjdXJzLiAgKi8KK3ZvaWQKK2F0X2ZhdGFsX3NpZ25hbCAoYWN0aW9uX3QgYWN0aW9uKQoreworICBzdGF0aWMgYm9vbCBjbGVhbnVwX2luaXRpYWxpemVkID0gZmFsc2U7CisgIGlmICghY2xlYW51cF9pbml0aWFsaXplZCkKKyAgICB7CisgICAgICBpbml0X2ZhdGFsX3NpZ25hbHMgKCk7CisgICAgICBpbnN0YWxsX2hhbmRsZXJzICgpOworICAgICAgY2xlYW51cF9pbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorCisgIGlmIChhY3Rpb25zX2NvdW50ID09IGFjdGlvbnNfYWxsb2NhdGVkKQorICAgIHsKKyAgICAgIC8qIEV4dGVuZCB0aGUgYWN0aW9ucyBhcnJheS4gIE5vdGUgdGhhdCB3ZSBjYW5ub3QgdXNlIHhyZWFsbG9jKCksCisgICAgICAgICBiZWNhdXNlIHRoZW4gdGhlIGNsZWFudXAoKSBmdW5jdGlvbiBjb3VsZCBhY2Nlc3MgYW4gYWxyZWFkeQorICAgICAgICAgZGVhbGxvY2F0ZWQgYXJyYXkuICAqLworICAgICAgYWN0aW9uc19lbnRyeV90ICpvbGRfYWN0aW9ucyA9IGFjdGlvbnM7CisgICAgICBzaXplX3Qgb2xkX2FjdGlvbnNfYWxsb2NhdGVkID0gYWN0aW9uc19hbGxvY2F0ZWQ7CisgICAgICBzaXplX3QgbmV3X2FjdGlvbnNfYWxsb2NhdGVkID0gMiAqIGFjdGlvbnNfYWxsb2NhdGVkOworICAgICAgYWN0aW9uc19lbnRyeV90ICpuZXdfYWN0aW9ucyA9CisgICAgICAgIFhOTUFMTE9DIChuZXdfYWN0aW9uc19hbGxvY2F0ZWQsIGFjdGlvbnNfZW50cnlfdCk7CisgICAgICBzaXplX3QgazsKKworICAgICAgLyogRG9uJ3QgdXNlIG1lbWNweSgpIGhlcmUsIGJlY2F1c2UgbWVtY3B5IHRha2VzIG5vbi12b2xhdGlsZSBhcmd1bWVudHMKKyAgICAgICAgIGFuZCBpcyB0aGVyZWZvcmUgbm90IGd1YXJhbnRlZWQgdG8gY29tcGxldGUgYWxsIG1lbW9yeSBzdG9yZXMgYmVmb3JlCisgICAgICAgICB0aGUgbmV4dCBzdGF0ZW1lbnQuICAqLworICAgICAgZm9yIChrID0gMDsgayA8IG9sZF9hY3Rpb25zX2FsbG9jYXRlZDsgaysrKQorICAgICAgICBuZXdfYWN0aW9uc1trXSA9IG9sZF9hY3Rpb25zW2tdOworICAgICAgYWN0aW9ucyA9IG5ld19hY3Rpb25zOworICAgICAgYWN0aW9uc19hbGxvY2F0ZWQgPSBuZXdfYWN0aW9uc19hbGxvY2F0ZWQ7CisgICAgICAvKiBOb3cgd2UgY2FuIGZyZWUgdGhlIG9sZCBhY3Rpb25zIGFycmF5LiAgKi8KKyAgICAgIGlmIChvbGRfYWN0aW9ucyAhPSBzdGF0aWNfYWN0aW9ucykKKyAgICAgICAgZnJlZSAob2xkX2FjdGlvbnMpOworICAgIH0KKyAgLyogVGhlIHR3byB1c2VzIG9mICd2b2xhdGlsZScgaW4gdGhlIHR5cGVzIGFib3ZlIChhbmQgSVNPIEMgOTkgc2VjdGlvbgorICAgICA1LjEuMi4zLig1KSkgZW5zdXJlIHRoYXQgd2UgaW5jcmVtZW50IHRoZSBhY3Rpb25zX2NvdW50IG9ubHkgYWZ0ZXIKKyAgICAgdGhlIG5ldyBhY3Rpb24gaGFzIGJlZW4gd3JpdHRlbiB0byB0aGUgbWVtb3J5IGxvY2F0aW9uCisgICAgIGFjdGlvbnNbYWN0aW9uc19jb3VudF0uICAqLworICBhY3Rpb25zW2FjdGlvbnNfY291bnRdLmFjdGlvbiA9IGFjdGlvbjsKKyAgYWN0aW9uc19jb3VudCsrOworfQorCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCitzdGF0aWMgc2lnc2V0X3QgZmF0YWxfc2lnbmFsX3NldDsKKworc3RhdGljIHZvaWQKK2luaXRfZmF0YWxfc2lnbmFsX3NldCAodm9pZCkKK3sKKyAgc3RhdGljIGJvb2wgZmF0YWxfc2lnbmFsX3NldF9pbml0aWFsaXplZCA9IGZhbHNlOworICBpZiAoIWZhdGFsX3NpZ25hbF9zZXRfaW5pdGlhbGl6ZWQpCisgICAgeworICAgICAgc2l6ZV90IGk7CisKKyAgICAgIGluaXRfZmF0YWxfc2lnbmFscyAoKTsKKworICAgICAgc2lnZW1wdHlzZXQgKCZmYXRhbF9zaWduYWxfc2V0KTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fZmF0YWxfc2lnbmFsczsgaSsrKQorICAgICAgICBpZiAoZmF0YWxfc2lnbmFsc1tpXSA+PSAwKQorICAgICAgICAgIHNpZ2FkZHNldCAoJmZhdGFsX3NpZ25hbF9zZXQsIGZhdGFsX3NpZ25hbHNbaV0pOworCisgICAgICBmYXRhbF9zaWduYWxfc2V0X2luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9Cit9CisKKy8qIFRlbXBvcmFyaWx5IGRlbGF5IHRoZSBjYXRjaGFibGUgZmF0YWwgc2lnbmFscy4gICovCit2b2lkCitibG9ja19mYXRhbF9zaWduYWxzICh2b2lkKQoreworICBpbml0X2ZhdGFsX3NpZ25hbF9zZXQgKCk7CisgIHNpZ3Byb2NtYXNrIChTSUdfQkxPQ0ssICZmYXRhbF9zaWduYWxfc2V0LCBOVUxMKTsKK30KKworLyogU3RvcCBkZWxheWluZyB0aGUgY2F0Y2hhYmxlIGZhdGFsIHNpZ25hbHMuICAqLwordm9pZAordW5ibG9ja19mYXRhbF9zaWduYWxzICh2b2lkKQoreworICBpbml0X2ZhdGFsX3NpZ25hbF9zZXQgKCk7CisgIHNpZ3Byb2NtYXNrIChTSUdfVU5CTE9DSywgJmZhdGFsX3NpZ25hbF9zZXQsIE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvbGliL2ZhdGFsLXNpZ25hbC5oIGIvbGliL2ZhdGFsLXNpZ25hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NjI4ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZmF0YWwtc2lnbmFsLmgKQEAgLTAsMCArMSw3NiBAQAorLyogRW1lcmdlbmN5IGFjdGlvbnMgaW4gY2FzZSBvZiBhIGZhdGFsIHNpZ25hbC4KKyAgIENvcHlyaWdodCAoQykgMjAwMy0yMDA0LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPiwgMjAwMy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworLyogSXQgaXMgb2Z0ZW4gdXNlZnVsIHRvIGRvIHNvbWUgY2xlYW51cCBhY3Rpb24gd2hlbiBhIHVzdWFsbHkgZmF0YWwgc2lnbmFsCisgICB0ZXJtaW5hdGVzIHRoZSBwcm9jZXNzLCBsaWtlIHJlbW92aW5nIGEgdGVtcG9yYXJ5IGZpbGUgb3Iga2lsbGluZyBhCisgICBzdWJwcm9jZXNzIHRoYXQgbWF5IGJlIHN0dWNrIHdhaXRpbmcgZm9yIGEgZGV2aWNlLCBwaXBlIG9yIG5ldHdvcmsgaW5wdXQuCisgICBTdWNoIHNpZ25hbHMgYXJlIFNJR0hVUCwgU0lHSU5ULCBTSUdQSVBFLCBTSUdURVJNLCBhbmQgcG9zc2libHkgb3RoZXJzLgorICAgVGhlIGxpbWl0YXRpb24gb2YgdGhpcyBmYWNpbGl0eSBpcyB0aGF0IGl0IGNhbm5vdCB3b3JrIGZvciBTSUdLSUxMLgorCisgICBTaWduYWxzIHdpdGggYSBTSUdfSUdOIGhhbmRsZXIgYXJlIGNvbnNpZGVyZWQgdG8gYmUgbm9uLWZhdGFsLiAgVGhlCisgICBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFzc3VtZSB0aGF0IHdoZW4gYSBTSUdfSUdOIGhhbmRsZXIgaXMgaW5zdGFsbGVkCisgICBmb3IgYSBzaWduYWwsIGl0IHdhcyBpbnN0YWxsZWQgYmVmb3JlIGFueSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIHdlcmUKKyAgIGNhbGxlZCBhbmQgaXQgc3RheXMgc28gZm9yIHRoZSB3aG9sZSBsaWZldGltZSBvZiB0aGUgcHJvY2Vzcy4gICovCisKKy8qIFJlZ2lzdGVyIGEgY2xlYW51cCBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCB3aGVuIGEgY2F0Y2hhYmxlIGZhdGFsIHNpZ25hbAorICAgb2NjdXJzLgorCisgICBSZXN0cmljdGlvbnMgZm9yIHRoZSBjbGVhbnVwIGZ1bmN0aW9uOgorICAgICAtIFRoZSBjbGVhbnVwIGZ1bmN0aW9uIGNhbiBkbyBhbGwga2luZHMgb2Ygc3lzdGVtIGNhbGxzLgorICAgICAtIEl0IGNhbiBhbHNvIGFjY2VzcyBhcHBsaWNhdGlvbiBkZXBlbmRlbnQgbWVtb3J5IGxvY2F0aW9ucyBhbmQgZGF0YQorICAgICAgIHN0cnVjdHVyZXMgcHJvdmlkZWQgdGhleSBhcmUgaW4gYSBjb25zaXN0ZW50IHN0YXRlLiBPbmUgd2F5IHRvIGVuc3VyZQorICAgICAgIHRoaXMgaXMgdGhyb3VnaCBibG9ja19mYXRhbF9zaWduYWxzKCkvdW5ibG9ja19mYXRhbF9zaWduYWxzKCksIHNlZQorICAgICAgIGJlbG93LiAgQW5vdGhlciAtIG1vcmUgdHJpY2t5IC0gd2F5IHRvIGVuc3VyZSB0aGlzIGlzIHRoZSBjYXJlZnVsIHVzZQorICAgICAgIG9mICd2b2xhdGlsZScuCisgICBIb3dldmVyLAorICAgICAtIG1hbGxvYygpIGFuZCBzaW1pbGFybHkgY29tcGxleCBmYWNpbGl0aWVzIGFyZSBub3Qgc2FmZSB0byBiZSBjYWxsZWQKKyAgICAgICBiZWNhdXNlIHRoZXkgYXJlIG5vdCBndWFyYW50ZWVkIHRvIGJlIGluIGEgY29uc2lzdGVudCBzdGF0ZS4KKyAgICAgLSBBbHNvLCB0aGUgY2xlYW51cCBmdW5jdGlvbiBtdXN0IG5vdCBibG9jayB0aGUgY2F0Y2hhYmxlIGZhdGFsIHNpZ25hbHMKKyAgICAgICBhbmQgbGVhdmUgdGhlbSBibG9ja2VkIHVwb24gcmV0dXJuLgorCisgICBUaGUgY2xlYW51cCBmdW5jdGlvbiBpcyBleGVjdXRlZCBhc3luY2hyb25vdXNseS4gIEl0IGlzIHVuc3BlY2lmaWVkCisgICB3aGV0aGVyIGR1cmluZyBpdHMgZXhlY3V0aW9uIHRoZSBjYXRjaGFibGUgZmF0YWwgc2lnbmFscyBhcmUgYmxvY2tlZAorICAgb3Igbm90LiAgKi8KK2V4dGVybiB2b2lkIGF0X2ZhdGFsX3NpZ25hbCAodm9pZCAoKmZ1bmN0aW9uKSAodm9pZCkpOworCisKKy8qIFNvbWV0aW1lcyBpdCBpcyBuZWNlc3NhcnkgdG8gYmxvY2sgdGhlIHVzdWFsbHkgZmF0YWwgc2lnbmFscyB3aGlsZSB0aGUKKyAgIGRhdGEgc3RydWN0dXJlcyBiZWluZyBhY2Nlc3NlZCBieSB0aGUgY2xlYW51cCBhY3Rpb24gYXJlIGJlaW5nIGJ1aWx0IG9yCisgICByZW9yZ2FuaXplZC4gIFRoaXMgaXMgdGhlIGNhc2UsIGZvciBleGFtcGxlLCB3aGVuIGEgdGVtcG9yYXJ5IGZpbGUgb3IKKyAgIGRpcmVjdG9yeSBpcyBjcmVhdGVkIHRocm91Z2ggbWtzdGVtcCgpIG9yIG1rZHRlbXAoKSwgYmVjYXVzZSB0aGVzZQorICAgZnVuY3Rpb25zIGNyZWF0ZSB0aGUgdGVtcG9yYXJ5IGZpbGUgb3IgZGlyZWN0b3J5IF9iZWZvcmVfIHJldHVybmluZyBpdHMKKyAgIG5hbWUgdG8gdGhlIGFwcGxpY2F0aW9uLiAgKi8KKworLyogVGVtcG9yYXJpbHkgZGVsYXkgdGhlIGNhdGNoYWJsZSBmYXRhbCBzaWduYWxzLgorICAgVGhlIHNpZ25hbHMgd2lsbCBiZSBibG9ja2VkICg9IGRlbGF5ZWQpIHVudGlsIHRoZSBuZXh0IGNhbGwgdG8KKyAgIHVuYmxvY2tfZmF0YWxfc2lnbmFscygpLiAgSWYgdGhlIHNpZ25hbHMgYXJlIGFscmVhZHkgYmxvY2tlZCwgYSBmdXJ0aGVyCisgICBjYWxsIHRvIGJsb2NrX2ZhdGFsX3NpZ25hbHMoKSBoYXMgbm8gZWZmZWN0LiAgKi8KK2V4dGVybiB2b2lkIGJsb2NrX2ZhdGFsX3NpZ25hbHMgKHZvaWQpOworCisvKiBTdG9wIGRlbGF5aW5nIHRoZSBjYXRjaGFibGUgZmF0YWwgc2lnbmFscy4gICovCitleHRlcm4gdm9pZCB1bmJsb2NrX2ZhdGFsX3NpZ25hbHMgKHZvaWQpOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvZmNudGwuYyBiL2xpYi9mY250bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZmI2YjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZmNudGwuYwpAQCAtMCwwICsxLDMxMSBAQAorLyogUHJvdmlkZSBmaWxlIGRlc2NyaXB0b3IgY29udHJvbC4KKworICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFdyaXR0ZW4gYnkgRXJpYyBCbGFrZSA8ZWJiOUBieXUubmV0Pi4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpZiAhSEFWRV9GQ05UTAorIyBkZWZpbmUgcnBsX2ZjbnRsIGZjbnRsCisjZW5kaWYKKyN1bmRlZiBmY250bAorCisjaWYgKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXworLyogR2V0IGRlY2xhcmF0aW9ucyBvZiB0aGUgbmF0aXZlIFdpbmRvd3MgQVBJIGZ1bmN0aW9ucy4gICovCisjIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjIGluY2x1ZGUgPHdpbmRvd3MuaD4KKworLyogR2V0IF9nZXRfb3NmaGFuZGxlLiAgKi8KKyMgaW5jbHVkZSAibXN2Yy1ub3Rocm93LmgiCisKKy8qIFVwcGVyIGJvdW5kIG9uIGdldGR0YWJsZXNpemUoKS4gIFNlZSBsaWIvZ2V0ZHRhYmxlc2l6ZS5jLiAgKi8KKyMgZGVmaW5lIE9QRU5fTUFYX01BWCAweDEwMDAwCisKKy8qIER1cGxpY2F0ZSBPTERGRCBpbnRvIHRoZSBmaXJzdCBhdmFpbGFibGUgc2xvdCBvZiBhdCBsZWFzdCBORVdGRCwKKyAgIHdoaWNoIG11c3QgYmUgcG9zaXRpdmUsIHdpdGggRkxBR1MgZGV0ZXJtaW5pbmcgd2hldGhlciB0aGUgZHVwbGljYXRlCisgICB3aWxsIGJlIGluaGVyaXRhYmxlLiAgKi8KK3N0YXRpYyBpbnQKK2R1cGZkIChpbnQgb2xkZmQsIGludCBuZXdmZCwgaW50IGZsYWdzKQoreworICAvKiBNaW5ndyBoYXMgbm8gd2F5IHRvIGNyZWF0ZSBhbiBhcmJpdHJhcnkgZmQuICBJdGVyYXRlIHVudGlsIGFsbAorICAgICBmaWxlIGRlc2NyaXB0b3JzIGxlc3MgdGhhbiBuZXdmZCBhcmUgZmlsbGVkIHVwLiAgKi8KKyAgSEFORExFIGN1cnJfcHJvY2VzcyA9IEdldEN1cnJlbnRQcm9jZXNzICgpOworICBIQU5ETEUgb2xkX2hhbmRsZSA9IChIQU5ETEUpIF9nZXRfb3NmaGFuZGxlIChvbGRmZCk7CisgIHVuc2lnbmVkIGNoYXIgZmRzX3RvX2Nsb3NlW09QRU5fTUFYX01BWCAvIENIQVJfQklUXTsKKyAgdW5zaWduZWQgaW50IGZkc190b19jbG9zZV9ib3VuZCA9IDA7CisgIGludCByZXN1bHQ7CisgIEJPT0wgaW5oZXJpdCA9IGZsYWdzICYgT19DTE9FWEVDID8gRkFMU0UgOiBUUlVFOworICBpbnQgbW9kZTsKKworICBpZiAobmV3ZmQgPCAwIHx8IGdldGR0YWJsZXNpemUgKCkgPD0gbmV3ZmQpCisgICAgeworICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICBpZiAob2xkX2hhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRQorICAgICAgfHwgKG1vZGUgPSBzZXRtb2RlIChvbGRmZCwgT19CSU5BUlkpKSA9PSAtMSkKKyAgICB7CisgICAgICAvKiBvbGRmZCBpcyBub3Qgb3Blbiwgb3IgaXMgYW4gdW5hc3NpZ25lZCBzdGFuZGFyZCBmaWxlCisgICAgICAgICBkZXNjcmlwdG9yLiAgKi8KKyAgICAgIGVycm5vID0gRUJBREY7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICBzZXRtb2RlIChvbGRmZCwgbW9kZSk7CisgIGZsYWdzIHw9IG1vZGU7CisKKyAgZm9yICg7OykKKyAgICB7CisgICAgICBIQU5ETEUgbmV3X2hhbmRsZTsKKyAgICAgIGludCBkdXBsaWNhdGVkX2ZkOworICAgICAgdW5zaWduZWQgaW50IGluZGV4OworCisgICAgICBpZiAoIUR1cGxpY2F0ZUhhbmRsZSAoY3Vycl9wcm9jZXNzLCAgICAgICAgICAgLyogU291cmNlUHJvY2Vzc0hhbmRsZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9oYW5kbGUsICAgICAgICAgICAgIC8qIFNvdXJjZUhhbmRsZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJfcHJvY2VzcywgICAgICAgICAgIC8qIFRhcmdldFByb2Nlc3NIYW5kbGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUEhBTkRMRSkgJm5ld19oYW5kbGUsICAvKiBUYXJnZXRIYW5kbGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRFdPUkQpIDAsICAgICAgICAgICAgICAvKiBEZXNpcmVkQWNjZXNzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdCwgICAgICAgICAgICAgICAgLyogSW5oZXJpdEhhbmRsZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVUExJQ0FURV9TQU1FX0FDQ0VTUykpIC8qIE9wdGlvbnMgKi8KKyAgICAgICAgeworICAgICAgICAgIC8qIFRPRE86IFRyYW5zbGF0ZSBHZXRMYXN0RXJyb3IgKCkgaW50byBlcnJuby4gICovCisgICAgICAgICAgZXJybm8gPSBFTUZJTEU7CisgICAgICAgICAgcmVzdWx0ID0gLTE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGR1cGxpY2F0ZWRfZmQgPSBfb3Blbl9vc2ZoYW5kbGUgKChpbnRwdHJfdCkgbmV3X2hhbmRsZSwgZmxhZ3MpOworICAgICAgaWYgKGR1cGxpY2F0ZWRfZmQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgQ2xvc2VIYW5kbGUgKG5ld19oYW5kbGUpOworICAgICAgICAgIGVycm5vID0gRU1GSUxFOworICAgICAgICAgIHJlc3VsdCA9IC0xOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBpZiAobmV3ZmQgPD0gZHVwbGljYXRlZF9mZCkKKyAgICAgICAgeworICAgICAgICAgIHJlc3VsdCA9IGR1cGxpY2F0ZWRfZmQ7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgLyogU2V0IHRoZSBiaXQgZHVwbGljYXRlZF9mZCBpbiBmZHNfdG9fY2xvc2VbXS4gICovCisgICAgICBpbmRleCA9ICh1bnNpZ25lZCBpbnQpIGR1cGxpY2F0ZWRfZmQgLyBDSEFSX0JJVDsKKyAgICAgIGlmIChmZHNfdG9fY2xvc2VfYm91bmQgPD0gaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoc2l6ZW9mIGZkc190b19jbG9zZSA8PSBpbmRleCkKKyAgICAgICAgICAgIC8qIE5lZWQgdG8gaW5jcmVhc2UgT1BFTl9NQVhfTUFYLiAgKi8KKyAgICAgICAgICAgIGFib3J0ICgpOworICAgICAgICAgIG1lbXNldCAoZmRzX3RvX2Nsb3NlICsgZmRzX3RvX2Nsb3NlX2JvdW5kLCAnXDAnLAorICAgICAgICAgICAgICAgICAgaW5kZXggKyAxIC0gZmRzX3RvX2Nsb3NlX2JvdW5kKTsKKyAgICAgICAgICBmZHNfdG9fY2xvc2VfYm91bmQgPSBpbmRleCArIDE7CisgICAgICAgIH0KKyAgICAgIGZkc190b19jbG9zZVtpbmRleF0gfD0gMSA8PCAoKHVuc2lnbmVkIGludCkgZHVwbGljYXRlZF9mZCAlIENIQVJfQklUKTsKKyAgICB9CisKKyAgLyogQ2xvc2UgdGhlIHByZXZpb3VzIGZkcyB0aGF0IHR1cm5lZCBvdXQgdG8gYmUgdG9vIHNtYWxsLiAgKi8KKyAgeworICAgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOworICAgIHVuc2lnbmVkIGludCBkdXBsaWNhdGVkX2ZkOworCisgICAgZm9yIChkdXBsaWNhdGVkX2ZkID0gMDsKKyAgICAgICAgIGR1cGxpY2F0ZWRfZmQgPCBmZHNfdG9fY2xvc2VfYm91bmQgKiBDSEFSX0JJVDsKKyAgICAgICAgIGR1cGxpY2F0ZWRfZmQrKykKKyAgICAgIGlmICgoZmRzX3RvX2Nsb3NlW2R1cGxpY2F0ZWRfZmQgLyBDSEFSX0JJVF0KKyAgICAgICAgICAgPj4gKGR1cGxpY2F0ZWRfZmQgJSBDSEFSX0JJVCkpCisgICAgICAgICAgJiAxKQorICAgICAgICBjbG9zZSAoZHVwbGljYXRlZF9mZCk7CisKKyAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworICB9CisKKyMgaWYgUkVQTEFDRV9GQ0hESVIKKyAgaWYgKDAgPD0gcmVzdWx0KQorICAgIHJlc3VsdCA9IF9nbF9yZWdpc3Rlcl9kdXAgKG9sZGZkLCByZXN1bHQpOworIyBlbmRpZgorICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmIC8qIFczMiAqLworCisvKiBQZXJmb3JtIHRoZSBzcGVjaWZpZWQgQUNUSU9OIG9uIHRoZSBmaWxlIGRlc2NyaXB0b3IgRkQsIHBvc3NpYmx5CisgICB1c2luZyB0aGUgYXJndW1lbnQgQVJHIGZ1cnRoZXIgZGVzY3JpYmVkIGJlbG93LiAgVGhpcyByZXBsYWNlbWVudAorICAgaGFuZGxlcyB0aGUgZm9sbG93aW5nIGFjdGlvbnMsIGFuZCBmb3J3YXJkcyBhbGwgb3RoZXJzIG9uIHRvIHRoZQorICAgbmF0aXZlIGZjbnRsLiAgQW4gdW5yZWNvZ25pemVkIEFDVElPTiByZXR1cm5zIC0xIHdpdGggZXJybm8gc2V0IHRvCisgICBFSU5WQUwuCisKKyAgIEZfRFVQRkQgLSBkdXBsaWNhdGUgRkQsIHdpdGggaW50IEFSRyBiZWluZyB0aGUgbWluaW11bSB0YXJnZXQgZmQuCisgICBJZiBzdWNjZXNzZnVsLCByZXR1cm4gdGhlIGR1cGxpY2F0ZSwgd2hpY2ggd2lsbCBiZSBpbmhlcml0YWJsZTsKKyAgIG90aGVyd2lzZSByZXR1cm4gLTEgYW5kIHNldCBlcnJuby4KKworICAgRl9EVVBGRF9DTE9FWEVDIC0gZHVwbGljYXRlIEZELCB3aXRoIGludCBBUkcgYmVpbmcgdGhlIG1pbmltdW0KKyAgIHRhcmdldCBmZC4gIElmIHN1Y2Nlc3NmdWwsIHJldHVybiB0aGUgZHVwbGljYXRlLCB3aGljaCB3aWxsIG5vdCBiZQorICAgaW5oZXJpdGFibGU7IG90aGVyd2lzZSByZXR1cm4gLTEgYW5kIHNldCBlcnJuby4KKworICAgRl9HRVRGRCAtIEFSRyBuZWVkIG5vdCBiZSBwcmVzZW50LiAgSWYgc3VjY2Vzc2Z1bCwgcmV0dXJuIGEKKyAgIG5vbi1uZWdhdGl2ZSB2YWx1ZSBjb250YWluaW5nIHRoZSBkZXNjcmlwdG9yIGZsYWdzIG9mIEZEIChvbmx5CisgICBGRF9DTE9FWEVDIGlzIHBvcnRhYmxlLCBidXQgb3RoZXIgZmxhZ3MgbWF5IGJlIHByZXNlbnQpOyBvdGhlcndpc2UKKyAgIHJldHVybiAtMSBhbmQgc2V0IGVycm5vLiAgKi8KKworaW50CitycGxfZmNudGwgKGludCBmZCwgaW50IGFjdGlvbiwgLyogYXJnICovLi4uKQoreworICB2YV9saXN0IGFyZzsKKyAgaW50IHJlc3VsdCA9IC0xOworICB2YV9zdGFydCAoYXJnLCBhY3Rpb24pOworICBzd2l0Y2ggKGFjdGlvbikKKyAgICB7CisKKyNpZiAhSEFWRV9GQ05UTAorICAgIGNhc2UgRl9EVVBGRDoKKyAgICAgIHsKKyAgICAgICAgaW50IHRhcmdldCA9IHZhX2FyZyAoYXJnLCBpbnQpOworICAgICAgICByZXN1bHQgPSBkdXBmZCAoZmQsIHRhcmdldCwgMCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorI2VsaWYgRkNOVExfRFVQRkRfQlVHR1kgfHwgUkVQTEFDRV9GQ0hESVIKKyAgICBjYXNlIEZfRFVQRkQ6CisgICAgICB7CisgICAgICAgIGludCB0YXJnZXQgPSB2YV9hcmcgKGFyZywgaW50KTsKKyAgICAgICAgLyogRGV0ZWN0IGludmFsaWQgdGFyZ2V0OyBuZWVkZWQgZm9yIGN5Z3dpbiAxLjUueC4gICovCisgICAgICAgIGlmICh0YXJnZXQgPCAwIHx8IGdldGR0YWJsZXNpemUgKCkgPD0gdGFyZ2V0KQorICAgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgLyogSGFpa3UgYWxwaGEgMiBsb3NlcyBmZCBmbGFncyBvbiBvcmlnaW5hbC4gICovCisgICAgICAgICAgICBpbnQgZmxhZ3MgPSBmY250bCAoZmQsIEZfR0VURkQpOworICAgICAgICAgICAgaWYgKGZsYWdzIDwgMCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IC0xOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1bHQgPSBmY250bCAoZmQsIGFjdGlvbiwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGlmICgwIDw9IHJlc3VsdCAmJiBmY250bCAoZmQsIEZfU0VURkQsIGZsYWdzKSA9PSAtMSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOworICAgICAgICAgICAgICAgIGNsb3NlIChyZXN1bHQpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IC0xOworICAgICAgICAgICAgICAgIGVycm5vID0gc2F2ZWRfZXJybm87CisgICAgICAgICAgICAgIH0KKyMgaWYgUkVQTEFDRV9GQ0hESVIKKyAgICAgICAgICAgIGlmICgwIDw9IHJlc3VsdCkKKyAgICAgICAgICAgICAgcmVzdWx0ID0gX2dsX3JlZ2lzdGVyX2R1cCAoZmQsIHJlc3VsdCk7CisjIGVuZGlmCisgICAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIH0gLyogRl9EVVBGRCAqLworI2VuZGlmIC8qIEZDTlRMX0RVUEZEX0JVR0dZIHx8IFJFUExBQ0VfRkNIRElSICovCisKKyAgICBjYXNlIEZfRFVQRkRfQ0xPRVhFQzoKKyAgICAgIHsKKyAgICAgICAgaW50IHRhcmdldCA9IHZhX2FyZyAoYXJnLCBpbnQpOworCisjaWYgIUhBVkVfRkNOVEwKKyAgICAgICAgcmVzdWx0ID0gZHVwZmQgKGZkLCB0YXJnZXQsIE9fQ0xPRVhFQyk7CisgICAgICAgIGJyZWFrOworI2Vsc2UgLyogSEFWRV9GQ05UTCAqLworICAgICAgICAvKiBUcnkgdGhlIHN5c3RlbSBjYWxsIGZpcnN0LCBpZiB0aGUgaGVhZGVycyBjbGFpbSBpdCBleGlzdHMKKyAgICAgICAgICAgKHRoYXQgaXMsIGlmIEdOVUxJQl9kZWZpbmVkX0ZfRFVQRkRfQ0xPRVhFQyBpcyAwKSwgc2luY2Ugd2UKKyAgICAgICAgICAgbWF5IGJlIHJ1bm5pbmcgd2l0aCBhIGdsaWJjIHRoYXQgaGFzIHRoZSBtYWNybyBidXQgd2l0aCBhbgorICAgICAgICAgICBvbGRlciBrZXJuZWwgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IGl0LiAgQ2FjaGUgdGhlCisgICAgICAgICAgIGluZm9ybWF0aW9uIG9uIHdoZXRoZXIgdGhlIHN5c3RlbSBjYWxsIHJlYWxseSB3b3JrcywgYnV0CisgICAgICAgICAgIGF2b2lkIGNhY2hpbmcgZmFpbHVyZSBpZiB0aGUgY29ycmVzcG9uZGluZyBGX0RVUEZEIGZhaWxzCisgICAgICAgICAgIGZvciBhbnkgcmVhc29uLiAgMCA9IHVua25vd24sIDEgPSB5ZXMsIC0xID0gbm8uICAqLworICAgICAgICBzdGF0aWMgaW50IGhhdmVfZHVwZmRfY2xvZXhlYyA9IEdOVUxJQl9kZWZpbmVkX0ZfRFVQRkRfQ0xPRVhFQyA/IC0xIDogMDsKKyAgICAgICAgaWYgKDAgPD0gaGF2ZV9kdXBmZF9jbG9leGVjKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZjbnRsIChmZCwgYWN0aW9uLCB0YXJnZXQpOworICAgICAgICAgICAgaWYgKDAgPD0gcmVzdWx0IHx8IGVycm5vICE9IEVJTlZBTCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGhhdmVfZHVwZmRfY2xvZXhlYyA9IDE7CisjIGlmIFJFUExBQ0VfRkNIRElSCisgICAgICAgICAgICAgICAgaWYgKDAgPD0gcmVzdWx0KQorICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gX2dsX3JlZ2lzdGVyX2R1cCAoZmQsIHJlc3VsdCk7CisjIGVuZGlmCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJwbF9mY250bCAoZmQsIEZfRFVQRkQsIHRhcmdldCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA8IDApCisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBoYXZlX2R1cGZkX2Nsb2V4ZWMgPSAtMTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHJlc3VsdCA9IHJwbF9mY250bCAoZmQsIEZfRFVQRkQsIHRhcmdldCk7CisgICAgICAgIGlmICgwIDw9IHJlc3VsdCAmJiBoYXZlX2R1cGZkX2Nsb2V4ZWMgPT0gLTEpCisgICAgICAgICAgeworICAgICAgICAgICAgaW50IGZsYWdzID0gZmNudGwgKHJlc3VsdCwgRl9HRVRGRCk7CisgICAgICAgICAgICBpZiAoZmxhZ3MgPCAwIHx8IGZjbnRsIChyZXN1bHQsIEZfU0VURkQsIGZsYWdzIHwgRkRfQ0xPRVhFQykgPT0gLTEpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgICAgICAgICAgICBjbG9zZSAocmVzdWx0KTsKKyAgICAgICAgICAgICAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IC0xOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBIQVZFX0ZDTlRMICovCisgICAgICB9IC8qIEZfRFVQRkRfQ0xPRVhFQyAqLworCisjaWYgIUhBVkVfRkNOVEwKKyAgICBjYXNlIEZfR0VURkQ6CisgICAgICB7CisjIGlmIChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgISBkZWZpbmVkIF9fQ1lHV0lOX18KKyAgICAgICAgSEFORExFIGhhbmRsZSA9IChIQU5ETEUpIF9nZXRfb3NmaGFuZGxlIChmZCk7CisgICAgICAgIERXT1JEIGZsYWdzOworICAgICAgICBpZiAoaGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFCisgICAgICAgICAgICB8fCBHZXRIYW5kbGVJbmZvcm1hdGlvbiAoaGFuZGxlLCAmZmxhZ3MpID09IDApCisgICAgICAgICAgZXJybm8gPSBFQkFERjsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJlc3VsdCA9IChmbGFncyAmIEhBTkRMRV9GTEFHX0lOSEVSSVQpID8gMCA6IEZEX0NMT0VYRUM7CisjIGVsc2UgLyogIVczMiAqLworICAgICAgICAvKiBVc2UgZHVwMiB0byByZWplY3QgaW52YWxpZCBmaWxlIGRlc2NyaXB0b3JzLiAgTm8gd2F5IHRvCisgICAgICAgICAgIGFjY2VzcyB0aGlzIGluZm9ybWF0aW9uLCBzbyBwdW50LiAgKi8KKyAgICAgICAgaWYgKDAgPD0gZHVwMiAoZmQsIGZkKSkKKyAgICAgICAgICByZXN1bHQgPSAwOworIyBlbmRpZiAvKiAhVzMyICovCisgICAgICAgIGJyZWFrOworICAgICAgfSAvKiBGX0dFVEZEICovCisjZW5kaWYgLyogIUhBVkVfRkNOVEwgKi8KKworICAgICAgLyogSW1wbGVtZW50aW5nIEZfU0VURkQgb24gbWluZ3cgaXMgbm90IHRyaXZpYWwgLSB0aGVyZSBpcyBubworICAgICAgICAgQVBJIGZvciBjaGFuZ2luZyB0aGUgT19OT0lOSEVSSVQgYml0IG9uIGFuIGZkLCBhbmQgbWVyZWx5CisgICAgICAgICBjaGFuZ2luZyB0aGUgSEFORExFX0ZMQUdfSU5IRVJJVCBiaXQgb24gdGhlIHVuZGVybHlpbmcgaGFuZGxlCisgICAgICAgICBjYW4gbGVhZCB0byBvZGQgc3RhdGUuICBJdCBtYXkgYmUgcG9zc2libGUgYnkgZHVwbGljYXRpbmcgdGhlCisgICAgICAgICBoYW5kbGUsIHVzaW5nIF9vcGVuX29zZmhhbmRsZSB3aXRoIHRoZSByaWdodCBmbGFncywgdGhlbgorICAgICAgICAgdXNpbmcgZHVwMiB0byBtb3ZlIHRoZSBkdXBsaWNhdGUgb250byB0aGUgb3JpZ2luYWwsIGJ1dCB0aGF0CisgICAgICAgICBpcyBub3Qgc3VwcG9ydGVkIGZvciBub3cuICAqLworCisgICAgZGVmYXVsdDoKKyAgICAgIHsKKyNpZiBIQVZFX0ZDTlRMCisgICAgICAgIHZvaWQgKnAgPSB2YV9hcmcgKGFyZywgdm9pZCAqKTsKKyAgICAgICAgcmVzdWx0ID0gZmNudGwgKGZkLCBhY3Rpb24sIHApOworI2Vsc2UKKyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICB2YV9lbmQgKGFyZyk7CisgIHJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9saWIvZmNudGwuaW4uaCBiL2xpYi9mY250bC5pbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNGMzMWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZmNudGwuaW4uaApAQCAtMCwwICsxLDM0NyBAQAorLyogTGlrZSA8ZmNudGwuaD4sIGJ1dCB3aXRoIG5vbi13b3JraW5nIGZsYWdzIGRlZmluZWQgdG8gMC4KKworICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIHdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQgKi8KKworI2lmIF9fR05VQ19fID49IDMKK0BQUkFHTUFfU1lTVEVNX0hFQURFUkAKKyNlbmRpZgorQFBSQUdNQV9DT0xVTU5TQAorCisjaWYgZGVmaW5lZCBfX25lZWRfc3lzdGVtX2ZjbnRsX2gKKy8qIFNwZWNpYWwgaW52b2NhdGlvbiBjb252ZW50aW9uLiAgKi8KKworLyogTmVlZGVkIGJlZm9yZSA8c3lzL3N0YXQuaD4uCisgICBNYXkgYWxzbyBkZWZpbmUgb2ZmX3QgdG8gYSA2NC1iaXQgdHlwZSBvbiBuYXRpdmUgV2luZG93cy4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisvKiBPbiBzb21lIHN5c3RlbXMgb3RoZXIgdGhhbiBnbGliYywgPHN5cy9zdGF0Lmg+IGlzIGEgcHJlcmVxdWlzaXRlIG9mCisgICA8ZmNudGwuaD4uICBPbiBnbGliYyBzeXN0ZW1zLCB3ZSB3b3VsZCBsaWtlIHRvIGF2b2lkIG5hbWVzcGFjZSBwb2xsdXRpb24uCisgICBCdXQgb24gZ2xpYmMgc3lzdGVtcywgPGZjbnRsLmg+IGluY2x1ZGVzIDxzeXMvc3RhdC5oPiBpbnNpZGUgYW4KKyAgIGV4dGVybiAiQyIgeyAuLi4gfSBibG9jaywgd2hpY2ggbGVhZHMgdG8gZXJyb3JzIGluIEMrKyBtb2RlIHdpdGggdGhlCisgICBvdmVycmlkZGVuIDxzeXMvc3RhdC5oPiBmcm9tIGdudWxpYi4gIFRoZXNlIGVycm9ycyBhcmUga25vd24gdG8gYmUgZ29uZQorICAgd2l0aCBnKysgdmVyc2lvbiA+PSA0LjMuICAqLworI2lmICEoZGVmaW5lZCBfX0dMSUJDX18gfHwgZGVmaW5lZCBfX1VDTElCQ19fKSB8fCAoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UgJiYgIShfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gMykpKQorIyBpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjQElOQ0xVREVfTkVYVEAgQE5FWFRfRkNOVExfSEAKKworI2Vsc2UKKy8qIE5vcm1hbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24uICAqLworCisjaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9GQ05UTF9ICisKKy8qIE5lZWRlZCBiZWZvcmUgPHN5cy9zdGF0Lmg+LgorICAgTWF5IGFsc28gZGVmaW5lIG9mZl90IHRvIGEgNjQtYml0IHR5cGUgb24gbmF0aXZlIFdpbmRvd3MuICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLyogT24gc29tZSBzeXN0ZW1zIG90aGVyIHRoYW4gZ2xpYmMsIDxzeXMvc3RhdC5oPiBpcyBhIHByZXJlcXVpc2l0ZSBvZgorICAgPGZjbnRsLmg+LiAgT24gZ2xpYmMgc3lzdGVtcywgd2Ugd291bGQgbGlrZSB0byBhdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9uLgorICAgQnV0IG9uIGdsaWJjIHN5c3RlbXMsIDxmY250bC5oPiBpbmNsdWRlcyA8c3lzL3N0YXQuaD4gaW5zaWRlIGFuCisgICBleHRlcm4gIkMiIHsgLi4uIH0gYmxvY2ssIHdoaWNoIGxlYWRzIHRvIGVycm9ycyBpbiBDKysgbW9kZSB3aXRoIHRoZQorICAgb3ZlcnJpZGRlbiA8c3lzL3N0YXQuaD4gZnJvbSBnbnVsaWIuICBUaGVzZSBlcnJvcnMgYXJlIGtub3duIHRvIGJlIGdvbmUKKyAgIHdpdGggZysrIHZlcnNpb24gPj0gNC4zLiAgKi8KKyNpZiAhKGRlZmluZWQgX19HTElCQ19fIHx8IGRlZmluZWQgX19VQ0xJQkNfXykgfHwgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFICYmICEoX19HTlVDX18gPiA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDMpKSkKKyMgaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworI0BJTkNMVURFX05FWFRAIEBORVhUX0ZDTlRMX0hACisKKyNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX0ZDTlRMX0gKKyNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX0ZDTlRMX0gKKworI2lmbmRlZiBfX0dMSUJDX18gLyogQXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zLiAgKi8KKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworLyogTmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zIGRlY2xhcmUgb3BlbigpLCBjcmVhdCgpIGluIDxpby5oPi4gICovCisjaWYgKEBHTlVMSUJfT1BFTkAgfHwgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSykgXAorICAgICYmICgoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fKQorIyBpbmNsdWRlIDxpby5oPgorI2VuZGlmCisKKworLyogVGhlIGRlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwgZXRjLiBhcmUgY29waWVkIGhlcmUuICAqLworCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwgaXMgY29waWVkIGhlcmUuICAqLworCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UgaXMgY29waWVkIGhlcmUuICAqLworCisKKy8qIERlY2xhcmUgb3ZlcnJpZGRlbiBmdW5jdGlvbnMuICAqLworCisjaWYgQEdOVUxJQl9GQ05UTEAKKyMgaWYgQFJFUExBQ0VfRkNOVExACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZjbnRsCisjICAgZGVmaW5lIGZjbnRsIHJwbF9mY250bAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZjbnRsLCBpbnQsIChpbnQgZmQsIGludCBhY3Rpb24sIC4uLikpOworX0dMX0NYWEFMSUFTX1JQTCAoZmNudGwsIGludCwgKGludCBmZCwgaW50IGFjdGlvbiwgLi4uKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9GQ05UTEAKK19HTF9GVU5DREVDTF9TWVMgKGZjbnRsLCBpbnQsIChpbnQgZmQsIGludCBhY3Rpb24sIC4uLikpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZjbnRsLCBpbnQsIChpbnQgZmQsIGludCBhY3Rpb24sIC4uLikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZmNudGwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmY250bAorIyBpZiBIQVZFX1JBV19ERUNMX0ZDTlRMCitfR0xfV0FSTl9PTl9VU0UgKGZjbnRsLCAiZmNudGwgaXMgbm90IGFsd2F5cyBQT1NJWCBjb21wbGlhbnQgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmY250bCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9PUEVOQAorIyBpZiBAUkVQTEFDRV9PUEVOQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBvcGVuCisjICAgZGVmaW5lIG9wZW4gcnBsX29wZW4KKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CisjIGVuZGlmCisvKiBPbiBIUC1VWCAxMSwgaW4gQysrIG1vZGUsIG9wZW4oKSBpcyBkZWZpbmVkIGFzIGFuIGlubGluZSBmdW5jdGlvbiB3aXRoIGEKKyAgIGRlZmF1bHQgYXJndW1lbnQuICBfR0xfQ1hYQUxJQVNXQVJOIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBjYXNlLiAgKi8KKyMgaWYgIWRlZmluZWQgX19ocHV4CitfR0xfQ1hYQUxJQVNXQVJOIChvcGVuKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgb3BlbgorLyogQXNzdW1lIG9wZW4gaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAob3BlbiwgIm9wZW4gaXMgbm90IGFsd2F5cyBQT1NJWCBjb21wbGlhbnQgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBvcGVuIGZvciBwb3J0YWJpbGl0eSIpOworI2VuZGlmCisKKyNpZiBAR05VTElCX09QRU5BVEAKKyMgaWYgQFJFUExBQ0VfT1BFTkFUQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBvcGVuYXQKKyMgICBkZWZpbmUgb3BlbmF0IHJwbF9vcGVuYXQKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChvcGVuYXQsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGUsIGludCBmbGFncywgLyogbW9kZV90IG1vZGUgKi8gLi4uKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKG9wZW5hdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgaW50IGZsYWdzLCAvKiBtb2RlX3QgbW9kZSAqLyAuLi4pKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX09QRU5BVEAKK19HTF9GVU5DREVDTF9TWVMgKG9wZW5hdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgaW50IGZsYWdzLCAvKiBtb2RlX3QgbW9kZSAqLyAuLi4pCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKG9wZW5hdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgaW50IGZsYWdzLCAvKiBtb2RlX3QgbW9kZSAqLyAuLi4pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG9wZW5hdCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG9wZW5hdAorIyBpZiBIQVZFX1JBV19ERUNMX09QRU5BVAorX0dMX1dBUk5fT05fVVNFIChvcGVuYXQsICJvcGVuYXQgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgb3BlbmF0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogRml4IHVwIHRoZSBGRF8qIG1hY3Jvcywgb25seSBrbm93biB0byBiZSBtaXNzaW5nIG9uIG1pbmd3LiAgKi8KKworI2lmbmRlZiBGRF9DTE9FWEVDCisjIGRlZmluZSBGRF9DTE9FWEVDIDEKKyNlbmRpZgorCisvKiBGaXggdXAgdGhlIHN1cHBvcnRlZCBGXyogbWFjcm9zLiAgSW50ZW50aW9uYWxseSBsZWF2ZSBvdGhlciBGXyoKKyAgIG1hY3JvcyB1bmRlZmluZWQuICBPbmx5IGtub3duIHRvIGJlIG1pc3Npbmcgb24gbWluZ3cuICAqLworCisjaWZuZGVmIEZfRFVQRkRfQ0xPRVhFQworIyBkZWZpbmUgRl9EVVBGRF9DTE9FWEVDIDB4NDAwMDAwMDAKKy8qIFdpdG5lc3MgdmFyaWFibGU6IDEgaWYgZ251bGliIGRlZmluZWQgRl9EVVBGRF9DTE9FWEVDLCAwIG90aGVyd2lzZS4gICovCisjIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9GX0RVUEZEX0NMT0VYRUMgMQorI2Vsc2UKKyMgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0ZfRFVQRkRfQ0xPRVhFQyAwCisjZW5kaWYKKworI2lmbmRlZiBGX0RVUEZECisjIGRlZmluZSBGX0RVUEZEIDEKKyNlbmRpZgorCisjaWZuZGVmIEZfR0VURkQKKyMgZGVmaW5lIEZfR0VURkQgMgorI2VuZGlmCisKKy8qIEZpeCB1cCB0aGUgT18qIG1hY3Jvcy4gICovCisKKyNpZiAhZGVmaW5lZCBPX0RJUkVDVCAmJiBkZWZpbmVkIE9fRElSRUNUSU8KKy8qIFRydTY0IHNwZWxscyBpdCAnT19ESVJFQ1RJTycuICAqLworIyBkZWZpbmUgT19ESVJFQ1QgT19ESVJFQ1RJTworI2VuZGlmCisKKyNpZiAhZGVmaW5lZCBPX0NMT0VYRUMgJiYgZGVmaW5lZCBPX05PSU5IRVJJVAorLyogTWluZ3cgc3BlbGxzIGl0ICdPX05PSU5IRVJJVCcuICAqLworIyBkZWZpbmUgT19DTE9FWEVDIE9fTk9JTkhFUklUCisjZW5kaWYKKworI2lmbmRlZiBPX0NMT0VYRUMKKyMgZGVmaW5lIE9fQ0xPRVhFQyAwCisjZW5kaWYKKworI2lmbmRlZiBPX0RJUkVDVAorIyBkZWZpbmUgT19ESVJFQ1QgMAorI2VuZGlmCisKKyNpZm5kZWYgT19ESVJFQ1RPUlkKKyMgZGVmaW5lIE9fRElSRUNUT1JZIDAKKyNlbmRpZgorCisjaWZuZGVmIE9fRFNZTkMKKyMgZGVmaW5lIE9fRFNZTkMgMAorI2VuZGlmCisKKyNpZm5kZWYgT19FWEVDCisjIGRlZmluZSBPX0VYRUMgT19SRE9OTFkgLyogVGhpcyBpcyBvZnRlbiBjbG9zZSBlbm91Z2ggaW4gb2xkZXIgc3lzdGVtcy4gICovCisjZW5kaWYKKworI2lmbmRlZiBPX0lHTk9SRV9DVFRZCisjIGRlZmluZSBPX0lHTk9SRV9DVFRZIDAKKyNlbmRpZgorCisjaWZuZGVmIE9fTkRFTEFZCisjIGRlZmluZSBPX05ERUxBWSAwCisjZW5kaWYKKworI2lmbmRlZiBPX05PQVRJTUUKKyMgZGVmaW5lIE9fTk9BVElNRSAwCisjZW5kaWYKKworI2lmbmRlZiBPX05PTkJMT0NLCisjIGRlZmluZSBPX05PTkJMT0NLIE9fTkRFTEFZCisjZW5kaWYKKworLyogSWYgdGhlIGdudWxpYiBtb2R1bGUgJ25vbmJsb2NraW5nJyBpcyBpbiB1c2UsIGd1YXJhbnRlZSBhIHdvcmtpbmcgbm9uLXplcm8KKyAgIHZhbHVlIG9mIE9fTk9OQkxPQ0suICBPdGhlcndpc2UsIE9fTk9OQkxPQ0sgaXMgZGVmaW5lZCAoYWJvdmUpIHRvIE9fTkRFTEFZCisgICBvciB0byAwIGFzIGZhbGxiYWNrLiAgKi8KKyNpZiBAR05VTElCX05PTkJMT0NLSU5HQAorIyBpZiBPX05PTkJMT0NLCisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfT19OT05CTE9DSyAwCisjIGVsc2UKKyMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9PX05PTkJMT0NLIDEKKyMgIHVuZGVmIE9fTk9OQkxPQ0sKKyMgIGRlZmluZSBPX05PTkJMT0NLIDB4NDAwMDAwMDAKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIE9fTk9DVFRZCisjIGRlZmluZSBPX05PQ1RUWSAwCisjZW5kaWYKKworI2lmbmRlZiBPX05PRk9MTE9XCisjIGRlZmluZSBPX05PRk9MTE9XIDAKKyNlbmRpZgorCisjaWZuZGVmIE9fTk9MSU5LCisjIGRlZmluZSBPX05PTElOSyAwCisjZW5kaWYKKworI2lmbmRlZiBPX05PTElOS1MKKyMgZGVmaW5lIE9fTk9MSU5LUyAwCisjZW5kaWYKKworI2lmbmRlZiBPX05PVFJBTlMKKyMgZGVmaW5lIE9fTk9UUkFOUyAwCisjZW5kaWYKKworI2lmbmRlZiBPX1JTWU5DCisjIGRlZmluZSBPX1JTWU5DIDAKKyNlbmRpZgorCisjaWZuZGVmIE9fU0VBUkNICisjIGRlZmluZSBPX1NFQVJDSCBPX1JET05MWSAvKiBUaGlzIGlzIG9mdGVuIGNsb3NlIGVub3VnaCBpbiBvbGRlciBzeXN0ZW1zLiAgKi8KKyNlbmRpZgorCisjaWZuZGVmIE9fU1lOQworIyBkZWZpbmUgT19TWU5DIDAKKyNlbmRpZgorCisjaWZuZGVmIE9fVFRZX0lOSVQKKyMgZGVmaW5lIE9fVFRZX0lOSVQgMAorI2VuZGlmCisKKyNpZiB+T19BQ0NNT0RFICYgKE9fUkRPTkxZIHwgT19XUk9OTFkgfCBPX1JEV1IgfCBPX0VYRUMgfCBPX1NFQVJDSCkKKyMgdW5kZWYgT19BQ0NNT0RFCisjIGRlZmluZSBPX0FDQ01PREUgKE9fUkRPTkxZIHwgT19XUk9OTFkgfCBPX1JEV1IgfCBPX0VYRUMgfCBPX1NFQVJDSCkKKyNlbmRpZgorCisvKiBGb3Igc3lzdGVtcyB0aGF0IGRpc3Rpbmd1aXNoIGJldHdlZW4gdGV4dCBhbmQgYmluYXJ5IEkvTy4KKyAgIE9fQklOQVJZIGlzIHVzdWFsbHkgZGVjbGFyZWQgaW4gZmNudGwuaCAgKi8KKyNpZiAhZGVmaW5lZCBPX0JJTkFSWSAmJiBkZWZpbmVkIF9PX0JJTkFSWQorICAvKiBGb3IgTVNDLWNvbXBhdGlibGUgY29tcGlsZXJzLiAgKi8KKyMgZGVmaW5lIE9fQklOQVJZIF9PX0JJTkFSWQorIyBkZWZpbmUgT19URVhUIF9PX1RFWFQKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfX0JFT1NfXyB8fCBkZWZpbmVkIF9fSEFJS1VfXworICAvKiBCZU9TIDUgYW5kIEhhaWt1IGhhdmUgT19CSU5BUlkgYW5kIE9fVEVYVCwgYnV0IHRoZXkgaGF2ZSBubyBlZmZlY3QuICAqLworIyB1bmRlZiBPX0JJTkFSWQorIyB1bmRlZiBPX1RFWFQKKyNlbmRpZgorCisjaWZuZGVmIE9fQklOQVJZCisjIGRlZmluZSBPX0JJTkFSWSAwCisjIGRlZmluZSBPX1RFWFQgMAorI2VuZGlmCisKKy8qIEZpeCB1cCB0aGUgQVRfKiBtYWNyb3MuICAqLworCisvKiBXb3JrIGFyb3VuZCBhIGJ1ZyBpbiBTb2xhcmlzIDkgYW5kIDEwOiBBVF9GRENXRCBpcyBwb3NpdGl2ZS4gIEl0cworICAgdmFsdWUgZXhjZWVkcyBJTlRfTUFYLCBzbyBpdHMgdXNlIGFzIGFuIGludCBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlCisgICBDIHN0YW5kYXJkLCBhbmQgR0NDIGFuZCBTdW4gQyBjb21wbGFpbiBpbiBzb21lIGNhc2VzLiAgSWYgdGhlIGJ1ZworICAgaXMgcHJlc2VudCwgdW5kZWYgQVRfRkRDV0QgaGVyZSwgc28gaXQgY2FuIGJlIHJlZGVmaW5lZCBiZWxvdy4gICovCisjaWYgMCA8IEFUX0ZEQ1dEICYmIEFUX0ZEQ1dEID09IDB4ZmZkMTk1NTMKKyMgdW5kZWYgQVRfRkRDV0QKKyNlbmRpZgorCisvKiBVc2UgdGhlIHNhbWUgYml0IHBhdHRlcm4gYXMgU29sYXJpcyA5LCBidXQgd2l0aCB0aGUgcHJvcGVyCisgICBzaWduZWRuZXNzLiAgVGhlIGJpdCBwYXR0ZXJuIGlzIGltcG9ydGFudCwgaW4gY2FzZSB0aGlzIGFjdHVhbGx5IGlzCisgICBTb2xhcmlzIHdpdGggdGhlIGFib3ZlIHdvcmthcm91bmQuICAqLworI2lmbmRlZiBBVF9GRENXRAorIyBkZWZpbmUgQVRfRkRDV0QgKC0zMDQxOTY1KQorI2VuZGlmCisKKy8qIFVzZSB0aGUgc2FtZSB2YWx1ZXMgYXMgU29sYXJpcyA5LiAgVGhpcyBzaG91bGRuJ3QgbWF0dGVyLCBidXQKKyAgIHRoZXJlJ3Mgbm8gcmVhbCByZWFzb24gdG8gZGlmZmVyLiAgKi8KKyNpZm5kZWYgQVRfU1lNTElOS19OT0ZPTExPVworIyBkZWZpbmUgQVRfU1lNTElOS19OT0ZPTExPVyA0MDk2CisjZW5kaWYKKworI2lmbmRlZiBBVF9SRU1PVkVESVIKKyMgZGVmaW5lIEFUX1JFTU9WRURJUiAxCisjZW5kaWYKKworLyogU29sYXJpcyA5IGxhY2tzIHRoZXNlIHR3bywgc28ganVzdCBwaWNrIHVuaXF1ZSB2YWx1ZXMuICAqLworI2lmbmRlZiBBVF9TWU1MSU5LX0ZPTExPVworIyBkZWZpbmUgQVRfU1lNTElOS19GT0xMT1cgMgorI2VuZGlmCisKKyNpZm5kZWYgQVRfRUFDQ0VTUworIyBkZWZpbmUgQVRfRUFDQ0VTUyA0CisjZW5kaWYKKworCisjZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX0ZDTlRMX0ggKi8KKyNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfRkNOVExfSCAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvZmQtaG9vay5jIGIvbGliL2ZkLWhvb2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjRmZmUyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2ZkLWhvb2suYwpAQCAtMCwwICsxLDExNiBAQAorLyogSG9vayBmb3IgbWFraW5nIG1ha2luZyBmaWxlIGRlc2NyaXB0b3IgZnVuY3Rpb25zIGNsb3NlKCksIGlvY3RsKCkgZXh0ZW5zaWJsZS4KKyAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4sIDIwMDkuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaW5jbHVkZSAiZmQtaG9vay5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qIEN1cnJlbnRseSwgdGhpcyBlbnRpcmUgY29kZSBpcyBvbmx5IG5lZWRlZCBmb3IgdGhlIGhhbmRsaW5nIG9mIHNvY2tldHMKKyAgIG9uIG5hdGl2ZSBXaW5kb3dzIHBsYXRmb3Jtcy4gICovCisjaWYgV0lORE9XU19TT0NLRVRTCisKKy8qIFRoZSBmaXJzdCBhbmQgbGFzdCBsaW5rIGluIHRoZSBkb3VibHkgbGlua2VkIGxpc3QuCisgICBJbml0aWFsbHkgdGhlIGxpc3QgaXMgZW1wdHkuICAqLworc3RhdGljIHN0cnVjdCBmZF9ob29rIGFuY2hvciA9IHsgJmFuY2hvciwgJmFuY2hvciwgTlVMTCwgTlVMTCB9OworCitpbnQKK2V4ZWN1dGVfY2xvc2VfaG9va3MgKGNvbnN0IHN0cnVjdCBmZF9ob29rICpyZW1haW5pbmdfbGlzdCwgZ2xfY2xvc2VfZm4gcHJpbWFyeSwKKyAgICAgICAgICAgICAgICAgICAgIGludCBmZCkKK3sKKyAgaWYgKHJlbWFpbmluZ19saXN0ID09ICZhbmNob3IpCisgICAgLyogRW5kIG9mIGxpc3QgcmVhY2hlZC4gICovCisgICAgcmV0dXJuIHByaW1hcnkgKGZkKTsKKyAgZWxzZQorICAgIHJldHVybiByZW1haW5pbmdfbGlzdC0+cHJpdmF0ZV9jbG9zZV9mbiAocmVtYWluaW5nX2xpc3QtPnByaXZhdGVfbmV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnksIGZkKTsKK30KKworaW50CitleGVjdXRlX2FsbF9jbG9zZV9ob29rcyAoZ2xfY2xvc2VfZm4gcHJpbWFyeSwgaW50IGZkKQoreworICByZXR1cm4gZXhlY3V0ZV9jbG9zZV9ob29rcyAoYW5jaG9yLnByaXZhdGVfbmV4dCwgcHJpbWFyeSwgZmQpOworfQorCitpbnQKK2V4ZWN1dGVfaW9jdGxfaG9va3MgKGNvbnN0IHN0cnVjdCBmZF9ob29rICpyZW1haW5pbmdfbGlzdCwgZ2xfaW9jdGxfZm4gcHJpbWFyeSwKKyAgICAgICAgICAgICAgICAgICAgIGludCBmZCwgaW50IHJlcXVlc3QsIHZvaWQgKmFyZykKK3sKKyAgaWYgKHJlbWFpbmluZ19saXN0ID09ICZhbmNob3IpCisgICAgLyogRW5kIG9mIGxpc3QgcmVhY2hlZC4gICovCisgICAgcmV0dXJuIHByaW1hcnkgKGZkLCByZXF1ZXN0LCBhcmcpOworICBlbHNlCisgICAgcmV0dXJuIHJlbWFpbmluZ19saXN0LT5wcml2YXRlX2lvY3RsX2ZuIChyZW1haW5pbmdfbGlzdC0+cHJpdmF0ZV9uZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeSwgZmQsIHJlcXVlc3QsIGFyZyk7Cit9CisKK2ludAorZXhlY3V0ZV9hbGxfaW9jdGxfaG9va3MgKGdsX2lvY3RsX2ZuIHByaW1hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZkLCBpbnQgcmVxdWVzdCwgdm9pZCAqYXJnKQoreworICByZXR1cm4gZXhlY3V0ZV9pb2N0bF9ob29rcyAoYW5jaG9yLnByaXZhdGVfbmV4dCwgcHJpbWFyeSwgZmQsIHJlcXVlc3QsIGFyZyk7Cit9CisKK3ZvaWQKK3JlZ2lzdGVyX2ZkX2hvb2sgKGNsb3NlX2hvb2tfZm4gY2xvc2VfaG9vaywgaW9jdGxfaG9va19mbiBpb2N0bF9ob29rLCBzdHJ1Y3QgZmRfaG9vayAqbGluaykKK3sKKyAgaWYgKGNsb3NlX2hvb2sgPT0gTlVMTCkKKyAgICBjbG9zZV9ob29rID0gZXhlY3V0ZV9jbG9zZV9ob29rczsKKyAgaWYgKGlvY3RsX2hvb2sgPT0gTlVMTCkKKyAgICBpb2N0bF9ob29rID0gZXhlY3V0ZV9pb2N0bF9ob29rczsKKworICBpZiAobGluay0+cHJpdmF0ZV9uZXh0ID09IE5VTEwgJiYgbGluay0+cHJpdmF0ZV9wcmV2ID09IE5VTEwpCisgICAgeworICAgICAgLyogQWRkIHRoZSBsaW5rIHRvIHRoZSBkb3VibHkgbGlua2VkIGxpc3QuICAqLworICAgICAgbGluay0+cHJpdmF0ZV9uZXh0ID0gYW5jaG9yLnByaXZhdGVfbmV4dDsKKyAgICAgIGxpbmstPnByaXZhdGVfcHJldiA9ICZhbmNob3I7CisgICAgICBsaW5rLT5wcml2YXRlX2Nsb3NlX2ZuID0gY2xvc2VfaG9vazsKKyAgICAgIGxpbmstPnByaXZhdGVfaW9jdGxfZm4gPSBpb2N0bF9ob29rOworICAgICAgYW5jaG9yLnByaXZhdGVfbmV4dC0+cHJpdmF0ZV9wcmV2ID0gbGluazsKKyAgICAgIGFuY2hvci5wcml2YXRlX25leHQgPSBsaW5rOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIFRoZSBsaW5rIGlzIGFscmVhZHkgaW4gdXNlLiAgKi8KKyAgICAgIGlmIChsaW5rLT5wcml2YXRlX2Nsb3NlX2ZuICE9IGNsb3NlX2hvb2sKKyAgICAgICAgICB8fCBsaW5rLT5wcml2YXRlX2lvY3RsX2ZuICE9IGlvY3RsX2hvb2spCisgICAgICAgIGFib3J0ICgpOworICAgIH0KK30KKwordm9pZAordW5yZWdpc3Rlcl9mZF9ob29rIChzdHJ1Y3QgZmRfaG9vayAqbGluaykKK3sKKyAgc3RydWN0IGZkX2hvb2sgKm5leHQgPSBsaW5rLT5wcml2YXRlX25leHQ7CisgIHN0cnVjdCBmZF9ob29rICpwcmV2ID0gbGluay0+cHJpdmF0ZV9wcmV2OworCisgIGlmIChuZXh0ICE9IE5VTEwgJiYgcHJldiAhPSBOVUxMKQorICAgIHsKKyAgICAgIC8qIFRoZSBsaW5rIGlzIGluIHVzZS4gIFJlbW92ZSBpdCBmcm9tIHRoZSBkb3VibHkgbGlua2VkIGxpc3QuICAqLworICAgICAgcHJldi0+cHJpdmF0ZV9uZXh0ID0gbmV4dDsKKyAgICAgIG5leHQtPnByaXZhdGVfcHJldiA9IHByZXY7CisgICAgICAvKiBDbGVhciB0aGUgbGluaywgdG8gbWFyayBpdCB1bnVzZWQuICAqLworICAgICAgbGluay0+cHJpdmF0ZV9uZXh0ID0gTlVMTDsKKyAgICAgIGxpbmstPnByaXZhdGVfcHJldiA9IE5VTEw7CisgICAgICBsaW5rLT5wcml2YXRlX2Nsb3NlX2ZuID0gTlVMTDsKKyAgICAgIGxpbmstPnByaXZhdGVfaW9jdGxfZm4gPSBOVUxMOworICAgIH0KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvZmQtaG9vay5oIGIvbGliL2ZkLWhvb2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjFlOWFkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2ZkLWhvb2suaApAQCAtMCwwICsxLDExOSBAQAorLyogSG9vayBmb3IgbWFraW5nIG1ha2luZyBmaWxlIGRlc2NyaXB0b3IgZnVuY3Rpb25zIGNsb3NlKCksIGlvY3RsKCkgZXh0ZW5zaWJsZS4KKyAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisKKyNpZm5kZWYgRkRfSE9PS19ICisjZGVmaW5lIEZEX0hPT0tfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworLyogQ3VycmVudGx5LCB0aGlzIGVudGlyZSBjb2RlIGlzIG9ubHkgbmVlZGVkIGZvciB0aGUgaGFuZGxpbmcgb2Ygc29ja2V0cworICAgb24gbmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zLiAgKi8KKyNpZiBXSU5ET1dTX1NPQ0tFVFMKKworCisvKiBUeXBlIG9mIGZ1bmN0aW9uIHRoYXQgY2xvc2VzIEZELiAgKi8KK3R5cGVkZWYgaW50ICgqZ2xfY2xvc2VfZm4pIChpbnQgZmQpOworCisvKiBUeXBlIG9mIGZ1bmN0aW9uIHRoYXQgYXBwbGllcyBhIGNvbnRyb2wgcmVxdWVzdCB0byBGRC4gICovCit0eXBlZGVmIGludCAoKmdsX2lvY3RsX2ZuKSAoaW50IGZkLCBpbnQgcmVxdWVzdCwgdm9pZCAqYXJnKTsKKworLyogQW4gZWxlbWVudCBvZiB0aGUgbGlzdCBvZiBmaWxlIGRlc2NyaXB0b3IgaG9va3MuCisgICBJbiBDTE9TIChDb21tb24gTGlzcCBPYmplY3QgU3lzdGVtKSBzcGVhaywgaXQgY29uc2lzdHMgb2YgYW4gImFyb3VuZCIKKyAgIG1ldGhvZCBmb3IgdGhlIGNsb3NlKCkgZnVuY3Rpb24gYW5kIGFuICJhcm91bmQiIG1ldGhvZCBmb3IgdGhlIGlvY3RsKCkKKyAgIGZ1bmN0aW9uLgorICAgVGhlIGZpZWxkcyBvZiB0aGlzIHN0cnVjdHVyZSBhcmUgY29uc2lkZXJlZCBwcml2YXRlLiAgKi8KK3N0cnVjdCBmZF9ob29rCit7CisgIC8qIERvdWJseSBsaW5rZWQgbGlzdC4gICovCisgIHN0cnVjdCBmZF9ob29rICpwcml2YXRlX25leHQ7CisgIHN0cnVjdCBmZF9ob29rICpwcml2YXRlX3ByZXY7CisgIC8qIEZ1bmN0aW9uIHRoYXQgdHJlYXRzIHRoZSB0eXBlcyBvZiBGRCB0aGF0IGl0IGtub3dzIGFib3V0IGFuZCBjYWxscworICAgICBleGVjdXRlX2Nsb3NlX2hvb2tzIChSRU1BSU5JTkdfTElTVCwgUFJJTUFSWSwgRkQpIGFzIGEgZmFsbGJhY2suICAqLworICBpbnQgKCpwcml2YXRlX2Nsb3NlX2ZuKSAoY29uc3Qgc3RydWN0IGZkX2hvb2sgKnJlbWFpbmluZ19saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY2xvc2VfZm4gcHJpbWFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmZCk7CisgIC8qIEZ1bmN0aW9uIHRoYXQgdHJlYXRzIHRoZSB0eXBlcyBvZiBGRCB0aGF0IGl0IGtub3dzIGFib3V0IGFuZCBjYWxscworICAgICBleGVjdXRlX2lvY3RsX2hvb2tzIChSRU1BSU5JTkdfTElTVCwgUFJJTUFSWSwgRkQsIFJFUVVFU1QsIEFSRykgYXMgYQorICAgICBmYWxsYmFjay4gICovCisgIGludCAoKnByaXZhdGVfaW9jdGxfZm4pIChjb25zdCBzdHJ1Y3QgZmRfaG9vayAqcmVtYWluaW5nX2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9pb2N0bF9mbiBwcmltYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZkLCBpbnQgcmVxdWVzdCwgdm9pZCAqYXJnKTsKK307CisKKy8qIFRoaXMgdHlwZSBvZiBmdW5jdGlvbiBjbG9zZXMgRkQsIGFwcGx5aW5nIHNwZWNpYWwga25vd2xlZGdlIGZvciB0aGUgRkQKKyAgIHR5cGVzIGl0IGtub3dzIGFib3V0LCBhbmQgY2FsbHMKKyAgIGV4ZWN1dGVfY2xvc2VfaG9va3MgKFJFTUFJTklOR19MSVNULCBQUklNQVJZLCBGRCkKKyAgIGZvciB0aGUgb3RoZXIgRkQgdHlwZXMuCisgICBJbiBDTE9TIHNwZWFrLCBSRU1BSU5JTkdfTElTVCBpcyB0aGUgcmVtYWluaW5nIGxpc3Qgb2YgImFyb3VuZCIgbWV0aG9kcywKKyAgIGFuZCBQUklNQVJZIGlzIHRoZSAicHJpbWFyeSIgbWV0aG9kIGZvciBjbG9zZSgpLiAgKi8KK3R5cGVkZWYgaW50ICgqY2xvc2VfaG9va19mbikgKGNvbnN0IHN0cnVjdCBmZF9ob29rICpyZW1haW5pbmdfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2Nsb3NlX2ZuIHByaW1hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmQpOworCisvKiBFeGVjdXRlIHRoZSBjbG9zZSBob29rcyBpbiBSRU1BSU5JTkdfTElTVCwgd2l0aCBQUklNQVJZIGFzICJwcmltYXJ5IiBtZXRob2QuCisgICBSZXR1cm4gMCBvciAtMSwgbGlrZSBjbG9zZSgpIHdvdWxkIGRvLiAgKi8KK2V4dGVybiBpbnQgZXhlY3V0ZV9jbG9zZV9ob29rcyAoY29uc3Qgc3RydWN0IGZkX2hvb2sgKnJlbWFpbmluZ19saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jbG9zZV9mbiBwcmltYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmQpOworCisvKiBFeGVjdXRlIGFsbCBjbG9zZSBob29rcywgd2l0aCBQUklNQVJZIGFzICJwcmltYXJ5IiBtZXRob2QuCisgICBSZXR1cm4gMCBvciAtMSwgbGlrZSBjbG9zZSgpIHdvdWxkIGRvLiAgKi8KK2V4dGVybiBpbnQgZXhlY3V0ZV9hbGxfY2xvc2VfaG9va3MgKGdsX2Nsb3NlX2ZuIHByaW1hcnksIGludCBmZCk7CisKKy8qIFRoaXMgdHlwZSBvZiBmdW5jdGlvbiBhcHBsaWVzIGEgY29udHJvbCByZXF1ZXN0IHRvIEZELCBhcHBseWluZyBzcGVjaWFsCisgICBrbm93bGVkZ2UgZm9yIHRoZSBGRCB0eXBlcyBpdCBrbm93cyBhYm91dCwgYW5kIGNhbGxzCisgICBleGVjdXRlX2lvY3RsX2hvb2tzIChSRU1BSU5JTkdfTElTVCwgUFJJTUFSWSwgRkQsIFJFUVVFU1QsIEFSRykKKyAgIGZvciB0aGUgb3RoZXIgRkQgdHlwZXMuCisgICBJbiBDTE9TIHNwZWFrLCBSRU1BSU5JTkdfTElTVCBpcyB0aGUgcmVtYWluaW5nIGxpc3Qgb2YgImFyb3VuZCIgbWV0aG9kcywKKyAgIGFuZCBQUklNQVJZIGlzIHRoZSAicHJpbWFyeSIgbWV0aG9kIGZvciBpb2N0bCgpLiAgKi8KK3R5cGVkZWYgaW50ICgqaW9jdGxfaG9va19mbikgKGNvbnN0IHN0cnVjdCBmZF9ob29rICpyZW1haW5pbmdfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2lvY3RsX2ZuIHByaW1hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmQsIGludCByZXF1ZXN0LCB2b2lkICphcmcpOworCisvKiBFeGVjdXRlIHRoZSBpb2N0bCBob29rcyBpbiBSRU1BSU5JTkdfTElTVCwgd2l0aCBQUklNQVJZIGFzICJwcmltYXJ5IiBtZXRob2QuCisgICBSZXR1cm4gMCBvciAtMSwgbGlrZSBpb2N0bCgpIHdvdWxkIGRvLiAgKi8KK2V4dGVybiBpbnQgZXhlY3V0ZV9pb2N0bF9ob29rcyAoY29uc3Qgc3RydWN0IGZkX2hvb2sgKnJlbWFpbmluZ19saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9pb2N0bF9mbiBwcmltYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmQsIGludCByZXF1ZXN0LCB2b2lkICphcmcpOworCisvKiBFeGVjdXRlIGFsbCBpb2N0bCBob29rcywgd2l0aCBQUklNQVJZIGFzICJwcmltYXJ5IiBtZXRob2QuCisgICBSZXR1cm4gMCBvciAtMSwgbGlrZSBpb2N0bCgpIHdvdWxkIGRvLiAgKi8KK2V4dGVybiBpbnQgZXhlY3V0ZV9hbGxfaW9jdGxfaG9va3MgKGdsX2lvY3RsX2ZuIHByaW1hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmQsIGludCByZXF1ZXN0LCB2b2lkICphcmcpOworCisvKiBBZGQgYSBmdW5jdGlvbiBwYWlyIHRvIHRoZSBsaXN0IG9mIGZpbGUgZGVzY3JpcHRvciBob29rcy4KKyAgIENMT1NFX0hPT0sgYW5kIElPQ1RMX0hPT0sgbWF5IGJlIE5VTEwsIGluZGljYXRpbmcgbm8gY2hhbmdlLgorICAgVGhlIExJTksgdmFyaWFibGUgcG9pbnRzIHRvIGEgcGllY2Ugb2YgbWVtb3J5IHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gYmUKKyAgIGFjY2Vzc2libGUgdW50aWwgdGhlIGNvcnJlc3BvbmRpbmcgY2FsbCB0byB1bnJlZ2lzdGVyX2ZkX2hvb2suICAqLworZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfZmRfaG9vayAoY2xvc2VfaG9va19mbiBjbG9zZV9ob29rLCBpb2N0bF9ob29rX2ZuIGlvY3RsX2hvb2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmRfaG9vayAqbGluayk7CisKKy8qIFJlbW92ZXMgYSBob29rIGZyb20gdGhlIGxpc3Qgb2YgZmlsZSBkZXNjcmlwdG9yIGhvb2tzLiAgKi8KK2V4dGVybiB2b2lkIHVucmVnaXN0ZXJfZmRfaG9vayAoc3RydWN0IGZkX2hvb2sgKmxpbmspOworCisKKyNlbmRpZgorCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBGRF9IT09LX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9mZC1zYWZlci1mbGFnLmMgYi9saWIvZmQtc2FmZXItZmxhZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOTBlZGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZmQtc2FmZXItZmxhZy5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qIEFkanVzdCBhIGZpbGUgZGVzY3JpcHRvciByZXN1bHQgc28gdGhhdCBpdCBhdm9pZHMgY2xvYmJlcmluZworICAgU1REe0lOLE9VVCxFUlJ9X0ZJTEVOTywgd2l0aCBzcGVjaWZpYyBmbGFncy4KKworICAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogV3JpdHRlbiBieSBQYXVsIEVnZ2VydCBhbmQgRXJpYyBCbGFrZS4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaW5jbHVkZSAidW5pc3RkLXNhZmVyLmgiCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisvKiBSZXR1cm4gRkQsIHVubGVzcyBGRCB3b3VsZCBiZSBhIGNvcHkgb2Ygc3RhbmRhcmQgaW5wdXQsIG91dHB1dCwgb3IKKyAgIGVycm9yOyBpbiB0aGF0IGNhc2UsIHJldHVybiBhIGR1cGxpY2F0ZSBvZiBGRCwgY2xvc2luZyBGRC4gIElmIEZMQUcKKyAgIGNvbnRhaW5zIE9fQ0xPRVhFQywgdGhlIHJldHVybmVkIEZEIHdpbGwgaGF2ZSBjbG9zZS1vbi1leGVjCisgICBzZW1hbnRpY3MuICBPbiBmYWlsdXJlIHRvIGR1cGxpY2F0ZSwgY2xvc2UgRkQsIHNldCBlcnJubywgYW5kCisgICByZXR1cm4gLTEuICBQcmVzZXJ2ZSBlcnJubyBpZiBGRCBpcyBuZWdhdGl2ZSwgc28gdGhhdCB0aGUgY2FsbGVyCisgICBjYW4gYWx3YXlzIGluc3BlY3QgZXJybm8gd2hlbiB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgbmVnYXRpdmUuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsbHkgd3JhcHBlZCBhcm91bmQgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGZpbGUKKyAgIGRlc2NyaXB0b3JzLCBlLmcuLCBmZF9zYWZlcl9mbGFnIChvcGVuICgiZmlsZSIsIE9fUkRPTkxZIHwgZmxhZyksIGZsYWcpLiAgKi8KKworaW50CitmZF9zYWZlcl9mbGFnIChpbnQgZmQsIGludCBmbGFnKQoreworICBpZiAoU1RESU5fRklMRU5PIDw9IGZkICYmIGZkIDw9IFNUREVSUl9GSUxFTk8pCisgICAgeworICAgICAgaW50IGYgPSBkdXBfc2FmZXJfZmxhZyAoZmQsIGZsYWcpOworICAgICAgaW50IGUgPSBlcnJubzsKKyAgICAgIGNsb3NlIChmZCk7CisgICAgICBlcnJubyA9IGU7CisgICAgICBmZCA9IGY7CisgICAgfQorCisgIHJldHVybiBmZDsKK30KZGlmZiAtLWdpdCBhL2xpYi9mZC1zYWZlci5jIGIvbGliL2ZkLXNhZmVyLmMKaW5kZXggNTkzM2JjYi4uMDUyODM3YiAxMDA2NDQKLS0tIGEvbGliL2ZkLXNhZmVyLmMKKysrIGIvbGliL2ZkLXNhZmVyLmMKQEAgLTEsMTEgKzEsMTEgQEAKIC8qIFJldHVybiBhIHNhZmVyIGNvcHkgb2YgYSBmaWxlIGRlc2NyaXB0b3IuCiAKLSAgIENvcHlyaWdodCAoQykgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMjAwNS0yMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKQEAgLTEzLDI2ICsxMywxNiBAQAogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKIC8qIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQuICAqLwogCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgorI2luY2x1ZGUgPGNvbmZpZy5oPgogCiAjaW5jbHVkZSAidW5pc3RkLXNhZmVyLmgiCiAKICNpbmNsdWRlIDxlcnJuby5oPgotCiAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaWZuZGVmIFNURElOX0ZJTEVOTwotIyBkZWZpbmUgU1RESU5fRklMRU5PIDAKLSNlbmRpZgotI2lmbmRlZiBTVERFUlJfRklMRU5PCi0jIGRlZmluZSBTVERFUlJfRklMRU5PIDIKLSNlbmRpZgogCiAvKiBSZXR1cm4gRkQsIHVubGVzcyBGRCB3b3VsZCBiZSBhIGNvcHkgb2Ygc3RhbmRhcmQgaW5wdXQsIG91dHB1dCwgb3IKICAgIGVycm9yOyBpbiB0aGF0IGNhc2UsIHJldHVybiBhIGR1cGxpY2F0ZSBvZiBGRCwgY2xvc2luZyBGRC4gIE9uCmRpZmYgLS1naXQgYS9saWIvZmxvYXQrLmggYi9saWIvZmxvYXQrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVlNTZhMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9mbG9hdCsuaApAQCAtMCwwICsxLDE0NyBAQAorLyogU3VwcGxlbWVudGFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmbG9hdGluZy1wb2ludCBmb3JtYXRzLgorICAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPiwgMjAwNy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIF9GTE9BVFBMVVNfSAorI2RlZmluZSBfRkxPQVRQTFVTX0gKKworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKKy8qIE51bWJlciBvZiBiaXRzIGluIHRoZSBtYW50aXNzYSBvZiBhIGZsb2F0aW5nLXBvaW50IG51bWJlciwgaW5jbHVkaW5nIHRoZQorICAgImhpZGRlbiBiaXQiLiAgKi8KKyNpZiBGTFRfUkFESVggPT0gMgorIyBkZWZpbmUgRkxUX01BTlRfQklUIEZMVF9NQU5UX0RJRworIyBkZWZpbmUgREJMX01BTlRfQklUIERCTF9NQU5UX0RJRworIyBkZWZpbmUgTERCTF9NQU5UX0JJVCBMREJMX01BTlRfRElHCisjZWxpZiBGTFRfUkFESVggPT0gNAorIyBkZWZpbmUgRkxUX01BTlRfQklUIChGTFRfTUFOVF9ESUcgKiAyKQorIyBkZWZpbmUgREJMX01BTlRfQklUIChEQkxfTUFOVF9ESUcgKiAyKQorIyBkZWZpbmUgTERCTF9NQU5UX0JJVCAoTERCTF9NQU5UX0RJRyAqIDIpCisjZWxpZiBGTFRfUkFESVggPT0gMTYKKyMgZGVmaW5lIEZMVF9NQU5UX0JJVCAoRkxUX01BTlRfRElHICogNCkKKyMgZGVmaW5lIERCTF9NQU5UX0JJVCAoREJMX01BTlRfRElHICogNCkKKyMgZGVmaW5lIExEQkxfTUFOVF9CSVQgKExEQkxfTUFOVF9ESUcgKiA0KQorI2VuZGlmCisKKy8qIEJpdCBtYXNrIHRoYXQgY2FuIGJlIHVzZWQgdG8gbWFzayB0aGUgZXhwb25lbnQsIGFzIGFuIHVuc2lnbmVkIG51bWJlci4gICovCisjZGVmaW5lIEZMVF9FWFBfTUFTSyAoKEZMVF9NQVhfRVhQIC0gRkxUX01JTl9FWFApIHwgNykKKyNkZWZpbmUgREJMX0VYUF9NQVNLICgoREJMX01BWF9FWFAgLSBEQkxfTUlOX0VYUCkgfCA3KQorI2RlZmluZSBMREJMX0VYUF9NQVNLICgoTERCTF9NQVhfRVhQIC0gTERCTF9NSU5fRVhQKSB8IDcpCisKKy8qIE51bWJlciBvZiBiaXRzIHVzZWQgZm9yIHRoZSBleHBvbmVudCBvZiBhIGZsb2F0aW5nLXBvaW50IG51bWJlciwgaW5jbHVkaW5nCisgICB0aGUgZXhwb25lbnQncyBzaWduLiAgKi8KKyNkZWZpbmUgRkxUX0VYUF9CSVQgXAorICAoRkxUX0VYUF9NQVNLIDwgMHgxMDAgPyA4IDogXAorICAgRkxUX0VYUF9NQVNLIDwgMHgyMDAgPyA5IDogXAorICAgRkxUX0VYUF9NQVNLIDwgMHg0MDAgPyAxMCA6IFwKKyAgIEZMVF9FWFBfTUFTSyA8IDB4ODAwID8gMTEgOiBcCisgICBGTFRfRVhQX01BU0sgPCAweDEwMDAgPyAxMiA6IFwKKyAgIEZMVF9FWFBfTUFTSyA8IDB4MjAwMCA/IDEzIDogXAorICAgRkxUX0VYUF9NQVNLIDwgMHg0MDAwID8gMTQgOiBcCisgICBGTFRfRVhQX01BU0sgPCAweDgwMDAgPyAxNSA6IFwKKyAgIEZMVF9FWFBfTUFTSyA8IDB4MTAwMDAgPyAxNiA6IFwKKyAgIEZMVF9FWFBfTUFTSyA8IDB4MjAwMDAgPyAxNyA6IFwKKyAgIEZMVF9FWFBfTUFTSyA8IDB4NDAwMDAgPyAxOCA6IFwKKyAgIEZMVF9FWFBfTUFTSyA8IDB4ODAwMDAgPyAxOSA6IFwKKyAgIEZMVF9FWFBfTUFTSyA8IDB4MTAwMDAwID8gMjAgOiBcCisgICBGTFRfRVhQX01BU0sgPCAweDIwMDAwMCA/IDIxIDogXAorICAgRkxUX0VYUF9NQVNLIDwgMHg0MDAwMDAgPyAyMiA6IFwKKyAgIEZMVF9FWFBfTUFTSyA8IDB4ODAwMDAwID8gMjMgOiBcCisgICBGTFRfRVhQX01BU0sgPCAweDEwMDAwMDAgPyAyNCA6IFwKKyAgIEZMVF9FWFBfTUFTSyA8IDB4MjAwMDAwMCA/IDI1IDogXAorICAgRkxUX0VYUF9NQVNLIDwgMHg0MDAwMDAwID8gMjYgOiBcCisgICBGTFRfRVhQX01BU0sgPCAweDgwMDAwMDAgPyAyNyA6IFwKKyAgIEZMVF9FWFBfTUFTSyA8IDB4MTAwMDAwMDAgPyAyOCA6IFwKKyAgIEZMVF9FWFBfTUFTSyA8IDB4MjAwMDAwMDAgPyAyOSA6IFwKKyAgIEZMVF9FWFBfTUFTSyA8IDB4NDAwMDAwMDAgPyAzMCA6IFwKKyAgIEZMVF9FWFBfTUFTSyA8PSAweDdmZmZmZmZmID8gMzEgOiBcCisgICAzMikKKyNkZWZpbmUgREJMX0VYUF9CSVQgXAorICAoREJMX0VYUF9NQVNLIDwgMHgxMDAgPyA4IDogXAorICAgREJMX0VYUF9NQVNLIDwgMHgyMDAgPyA5IDogXAorICAgREJMX0VYUF9NQVNLIDwgMHg0MDAgPyAxMCA6IFwKKyAgIERCTF9FWFBfTUFTSyA8IDB4ODAwID8gMTEgOiBcCisgICBEQkxfRVhQX01BU0sgPCAweDEwMDAgPyAxMiA6IFwKKyAgIERCTF9FWFBfTUFTSyA8IDB4MjAwMCA/IDEzIDogXAorICAgREJMX0VYUF9NQVNLIDwgMHg0MDAwID8gMTQgOiBcCisgICBEQkxfRVhQX01BU0sgPCAweDgwMDAgPyAxNSA6IFwKKyAgIERCTF9FWFBfTUFTSyA8IDB4MTAwMDAgPyAxNiA6IFwKKyAgIERCTF9FWFBfTUFTSyA8IDB4MjAwMDAgPyAxNyA6IFwKKyAgIERCTF9FWFBfTUFTSyA8IDB4NDAwMDAgPyAxOCA6IFwKKyAgIERCTF9FWFBfTUFTSyA8IDB4ODAwMDAgPyAxOSA6IFwKKyAgIERCTF9FWFBfTUFTSyA8IDB4MTAwMDAwID8gMjAgOiBcCisgICBEQkxfRVhQX01BU0sgPCAweDIwMDAwMCA/IDIxIDogXAorICAgREJMX0VYUF9NQVNLIDwgMHg0MDAwMDAgPyAyMiA6IFwKKyAgIERCTF9FWFBfTUFTSyA8IDB4ODAwMDAwID8gMjMgOiBcCisgICBEQkxfRVhQX01BU0sgPCAweDEwMDAwMDAgPyAyNCA6IFwKKyAgIERCTF9FWFBfTUFTSyA8IDB4MjAwMDAwMCA/IDI1IDogXAorICAgREJMX0VYUF9NQVNLIDwgMHg0MDAwMDAwID8gMjYgOiBcCisgICBEQkxfRVhQX01BU0sgPCAweDgwMDAwMDAgPyAyNyA6IFwKKyAgIERCTF9FWFBfTUFTSyA8IDB4MTAwMDAwMDAgPyAyOCA6IFwKKyAgIERCTF9FWFBfTUFTSyA8IDB4MjAwMDAwMDAgPyAyOSA6IFwKKyAgIERCTF9FWFBfTUFTSyA8IDB4NDAwMDAwMDAgPyAzMCA6IFwKKyAgIERCTF9FWFBfTUFTSyA8PSAweDdmZmZmZmZmID8gMzEgOiBcCisgICAzMikKKyNkZWZpbmUgTERCTF9FWFBfQklUIFwKKyAgKExEQkxfRVhQX01BU0sgPCAweDEwMCA/IDggOiBcCisgICBMREJMX0VYUF9NQVNLIDwgMHgyMDAgPyA5IDogXAorICAgTERCTF9FWFBfTUFTSyA8IDB4NDAwID8gMTAgOiBcCisgICBMREJMX0VYUF9NQVNLIDwgMHg4MDAgPyAxMSA6IFwKKyAgIExEQkxfRVhQX01BU0sgPCAweDEwMDAgPyAxMiA6IFwKKyAgIExEQkxfRVhQX01BU0sgPCAweDIwMDAgPyAxMyA6IFwKKyAgIExEQkxfRVhQX01BU0sgPCAweDQwMDAgPyAxNCA6IFwKKyAgIExEQkxfRVhQX01BU0sgPCAweDgwMDAgPyAxNSA6IFwKKyAgIExEQkxfRVhQX01BU0sgPCAweDEwMDAwID8gMTYgOiBcCisgICBMREJMX0VYUF9NQVNLIDwgMHgyMDAwMCA/IDE3IDogXAorICAgTERCTF9FWFBfTUFTSyA8IDB4NDAwMDAgPyAxOCA6IFwKKyAgIExEQkxfRVhQX01BU0sgPCAweDgwMDAwID8gMTkgOiBcCisgICBMREJMX0VYUF9NQVNLIDwgMHgxMDAwMDAgPyAyMCA6IFwKKyAgIExEQkxfRVhQX01BU0sgPCAweDIwMDAwMCA/IDIxIDogXAorICAgTERCTF9FWFBfTUFTSyA8IDB4NDAwMDAwID8gMjIgOiBcCisgICBMREJMX0VYUF9NQVNLIDwgMHg4MDAwMDAgPyAyMyA6IFwKKyAgIExEQkxfRVhQX01BU0sgPCAweDEwMDAwMDAgPyAyNCA6IFwKKyAgIExEQkxfRVhQX01BU0sgPCAweDIwMDAwMDAgPyAyNSA6IFwKKyAgIExEQkxfRVhQX01BU0sgPCAweDQwMDAwMDAgPyAyNiA6IFwKKyAgIExEQkxfRVhQX01BU0sgPCAweDgwMDAwMDAgPyAyNyA6IFwKKyAgIExEQkxfRVhQX01BU0sgPCAweDEwMDAwMDAwID8gMjggOiBcCisgICBMREJMX0VYUF9NQVNLIDwgMHgyMDAwMDAwMCA/IDI5IDogXAorICAgTERCTF9FWFBfTUFTSyA8IDB4NDAwMDAwMDAgPyAzMCA6IFwKKyAgIExEQkxfRVhQX01BU0sgPD0gMHg3ZmZmZmZmZiA/IDMxIDogXAorICAgMzIpCisKKy8qIE51bWJlciBvZiBiaXRzIHVzZWQgZm9yIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyOiB0aGUgbWFudGlzc2EgKG5vdAorICAgY291bnRpbmcgdGhlICJoaWRkZW4gYml0Iiwgc2luY2UgaXQgbWF5IG9yIG1heSBub3QgYmUgZXhwbGljaXQpLCB0aGUKKyAgIGV4cG9uZW50LCBhbmQgdGhlIHNpZ24uICAqLworI2RlZmluZSBGTFRfVE9UQUxfQklUICgoRkxUX01BTlRfQklUIC0gMSkgKyBGTFRfRVhQX0JJVCArIDEpCisjZGVmaW5lIERCTF9UT1RBTF9CSVQgKChEQkxfTUFOVF9CSVQgLSAxKSArIERCTF9FWFBfQklUICsgMSkKKyNkZWZpbmUgTERCTF9UT1RBTF9CSVQgKChMREJMX01BTlRfQklUIC0gMSkgKyBMREJMX0VYUF9CSVQgKyAxKQorCisvKiBOdW1iZXIgb2YgYnl0ZXMgdXNlZCBmb3IgYSBmbG9hdGluZy1wb2ludCBudW1iZXIuCisgICBUaGlzIGNhbiBiZSBzbWFsbGVyIHRoYW4gdGhlICdzaXplb2YnLiAgRm9yIGV4YW1wbGUsIG9uIGkzODYgc3lzdGVtcywKKyAgICdsb25nIGRvdWJsZScgbW9zdCBvZnRlbiBoYXZlIExEQkxfTUFOVF9CSVQgPSA2NCwgTERCTF9FWFBfQklUID0gMTYsIGhlbmNlCisgICBMREJMX1RPVEFMX0JJVCA9IDgwIGJpdHMsIGkuZS4gMTAgYnl0ZXMgb2YgY29uc2VjdXRpdmUgbWVtb3J5LCBidXQKKyAgIHNpemVvZiAobG9uZyBkb3VibGUpID0gMTIgb3IgPSAxNi4gICovCisjZGVmaW5lIFNJWkVPRl9GTFQgKChGTFRfVE9UQUxfQklUICsgQ0hBUl9CSVQgLSAxKSAvIENIQVJfQklUKQorI2RlZmluZSBTSVpFT0ZfREJMICgoREJMX1RPVEFMX0JJVCArIENIQVJfQklUIC0gMSkgLyBDSEFSX0JJVCkKKyNkZWZpbmUgU0laRU9GX0xEQkwgKChMREJMX1RPVEFMX0JJVCArIENIQVJfQklUIC0gMSkgLyBDSEFSX0JJVCkKKworLyogVmVyaWZ5IHRoYXQgU0laRU9GX0ZMVCA8PSBzaXplb2YgKGZsb2F0KSBldGMuICAqLwordHlwZWRlZiBpbnQgdmVyaWZ5X3NpemVvZl9mbHRbU0laRU9GX0ZMVCA8PSBzaXplb2YgKGZsb2F0KSA/IDEgOiAtMV07Cit0eXBlZGVmIGludCB2ZXJpZnlfc2l6ZW9mX2RibFtTSVpFT0ZfREJMIDw9IHNpemVvZiAoZG91YmxlKSA/IDEgOiAtIDFdOwordHlwZWRlZiBpbnQgdmVyaWZ5X3NpemVvZl9sZGJsW1NJWkVPRl9MREJMIDw9IHNpemVvZiAobG9uZyBkb3VibGUpID8gMSA6IC0gMV07CisKKyNlbmRpZiAvKiBfRkxPQVRQTFVTX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9mbG9hdC5jIGIvbGliL2Zsb2F0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEzMTg2NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9mbG9hdC5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qIEF1eGlsaWFyeSBkZWZpbml0aW9ucyBmb3IgPGZsb2F0Lmg+LgorICAgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPiwgMjAxMS4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaWYgKGRlZmluZWQgX0FSQ0hfUFBDIHx8IGRlZmluZWQgX1BPV0VSKSAmJiAoZGVmaW5lZCBfQUlYIHx8IGRlZmluZWQgX19saW51eF9fKSAmJiAoTERCTF9NQU5UX0RJRyA9PSAxMDYpICYmIGRlZmluZWQgX19HTlVDX18KK2NvbnN0IHVuaW9uIGdsX2xvbmdfZG91YmxlX3VuaW9uIGdsX0xEQkxfTUFYID0KKyAgeyB7IERCTF9NQVgsIERCTF9NQVggLyAoZG91YmxlKTEzNDIxNzcyOFVMIC8gKGRvdWJsZSkxMzQyMTc3MjhVTCB9IH07CisjZWxpZiBkZWZpbmVkIF9faTM4Nl9fCitjb25zdCB1bmlvbiBnbF9sb25nX2RvdWJsZV91bmlvbiBnbF9MREJMX01BWCA9CisgIHsgeyAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAzMjc2NiB9IH07CisjZWxzZQorLyogVGhpcyBkZWNsYXJhdGlvbiBpcyBzb2xlbHkgdG8gZW5zdXJlIHRoYXQgYWZ0ZXIgcHJlcHJvY2Vzc2luZworICAgdGhpcyBmaWxlIGlzIG5ldmVyIGVtcHR5LiAgKi8KK3R5cGVkZWYgaW50IGR1bW15OworI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvZmxvYXQuaW4uaCBiL2xpYi9mbG9hdC5pbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MjA1MTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZmxvYXQuaW4uaApAQCAtMCwwICsxLDE4OCBAQAorLyogQSBjb3JyZWN0IDxmbG9hdC5oPi4KKworICAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX0ZMT0FUX0gKKworI2lmIF9fR05VQ19fID49IDMKK0BQUkFHTUFfU1lTVEVNX0hFQURFUkAKKyNlbmRpZgorQFBSQUdNQV9DT0xVTU5TQAorCisvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisjQElOQ0xVREVfTkVYVEAgQE5FWFRfRkxPQVRfSEAKKworI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfRkxPQVRfSAorI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfRkxPQVRfSAorCisvKiAnbG9uZyBkb3VibGUnIHByb3BlcnRpZXMuICAqLworCisjaWYgZGVmaW5lZCBfX2kzODZfXyAmJiAoZGVmaW5lZCBfX0JFT1NfXyB8fCBkZWZpbmVkIF9fT3BlbkJTRF9fKQorLyogTnVtYmVyIG9mIG1hbnRpc3NhIHVuaXRzLCBpbiBiYXNlIEZMVF9SQURJWC4gICovCisjIHVuZGVmIExEQkxfTUFOVF9ESUcKKyMgZGVmaW5lIExEQkxfTUFOVF9ESUcgICA2NAorLyogTnVtYmVyIG9mIGRlY2ltYWwgZGlnaXRzIHRoYXQgaXMgc3VmZmljaWVudCBmb3IgcmVwcmVzZW50aW5nIGEgbnVtYmVyLiAgKi8KKyMgdW5kZWYgTERCTF9ESUcKKyMgZGVmaW5lIExEQkxfRElHICAgICAgICAxOAorLyogeC0xIHdoZXJlIHggaXMgdGhlIHNtYWxsZXN0IHJlcHJlc2VudGFibGUgbnVtYmVyID4gMS4gICovCisjIHVuZGVmIExEQkxfRVBTSUxPTgorIyBkZWZpbmUgTERCTF9FUFNJTE9OICAgIDEuMDg0MjAyMTcyNDg1NTA0NDM0MEUtMTlMCisvKiBNaW5pbXVtIGUgc3VjaCB0aGF0IEZMVF9SQURJWF4oZS0xKSBpcyBhIG5vcm1hbGl6ZWQgbnVtYmVyLiAgKi8KKyMgdW5kZWYgTERCTF9NSU5fRVhQCisjIGRlZmluZSBMREJMX01JTl9FWFAgICAgKC0xNjM4MSkKKy8qIE1heGltdW0gZSBzdWNoIHRoYXQgRkxUX1JBRElYXihlLTEpIGlzIGEgcmVwcmVzZW50YWJsZSBmaW5pdGUgbnVtYmVyLiAgKi8KKyMgdW5kZWYgTERCTF9NQVhfRVhQCisjIGRlZmluZSBMREJMX01BWF9FWFAgICAgMTYzODQKKy8qIE1pbmltdW0gcG9zaXRpdmUgbm9ybWFsaXplZCBudW1iZXIuICAqLworIyB1bmRlZiBMREJMX01JTgorIyBkZWZpbmUgTERCTF9NSU4gICAgICAgIDMuMzYyMTAzMTQzMTEyMDkzNTA2M0UtNDkzMkwKKy8qIE1heGltdW0gcmVwcmVzZW50YWJsZSBmaW5pdGUgbnVtYmVyLiAgKi8KKyMgdW5kZWYgTERCTF9NQVgKKyMgZGVmaW5lIExEQkxfTUFYICAgICAgICAxLjE4OTczMTQ5NTM1NzIzMTc2NTBFKzQ5MzJMCisvKiBNaW5pbXVtIGUgc3VjaCB0aGF0IDEwXmUgaXMgaW4gdGhlIHJhbmdlIG9mIG5vcm1hbGl6ZWQgbnVtYmVycy4gICovCisjIHVuZGVmIExEQkxfTUlOXzEwX0VYUAorIyBkZWZpbmUgTERCTF9NSU5fMTBfRVhQICgtNDkzMSkKKy8qIE1heGltdW0gZSBzdWNoIHRoYXQgMTBeZSBpcyBpbiB0aGUgcmFuZ2Ugb2YgcmVwcmVzZW50YWJsZSBmaW5pdGUgbnVtYmVycy4gICovCisjIHVuZGVmIExEQkxfTUFYXzEwX0VYUAorIyBkZWZpbmUgTERCTF9NQVhfMTBfRVhQIDQ5MzIKKyNlbmRpZgorCisvKiBPbiBGcmVlQlNEL3g4NiA2LjQsIHRoZSAnbG9uZyBkb3VibGUnIHR5cGUgcmVhbGx5IGhhcyBvbmx5IDUzIGJpdHMgb2YKKyAgIHByZWNpc2lvbiBpbiB0aGUgY29tcGlsZXIgYnV0IDY0IGJpdHMgb2YgcHJlY2lzaW9uIGF0IHJ1bnRpbWUuICBTZWUKKyAgIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWdudWxpYi8yMDA4LTA3L21zZzAwMDYzLmh0bWw+LiAgKi8KKyNpZiBkZWZpbmVkIF9faTM4Nl9fICYmIGRlZmluZWQgX19GcmVlQlNEX18KKy8qIE51bWJlciBvZiBtYW50aXNzYSB1bml0cywgaW4gYmFzZSBGTFRfUkFESVguICAqLworIyB1bmRlZiBMREJMX01BTlRfRElHCisjIGRlZmluZSBMREJMX01BTlRfRElHICAgNjQKKy8qIE51bWJlciBvZiBkZWNpbWFsIGRpZ2l0cyB0aGF0IGlzIHN1ZmZpY2llbnQgZm9yIHJlcHJlc2VudGluZyBhIG51bWJlci4gICovCisjIHVuZGVmIExEQkxfRElHCisjIGRlZmluZSBMREJMX0RJRyAgICAgICAgMTgKKy8qIHgtMSB3aGVyZSB4IGlzIHRoZSBzbWFsbGVzdCByZXByZXNlbnRhYmxlIG51bWJlciA+IDEuICAqLworIyB1bmRlZiBMREJMX0VQU0lMT04KKyMgZGVmaW5lIExEQkxfRVBTSUxPTiAxLjA4NDIwMjE3MjQ4NTUwNDQzNDAwNzQ1MjgwMDg2OTk0MTcxMTQyNmUtMTlMIC8qIDJeLTYzICovCisvKiBNaW5pbXVtIGUgc3VjaCB0aGF0IEZMVF9SQURJWF4oZS0xKSBpcyBhIG5vcm1hbGl6ZWQgbnVtYmVyLiAgKi8KKyMgdW5kZWYgTERCTF9NSU5fRVhQCisjIGRlZmluZSBMREJMX01JTl9FWFAgICAgKC0xNjM4MSkKKy8qIE1heGltdW0gZSBzdWNoIHRoYXQgRkxUX1JBRElYXihlLTEpIGlzIGEgcmVwcmVzZW50YWJsZSBmaW5pdGUgbnVtYmVyLiAgKi8KKyMgdW5kZWYgTERCTF9NQVhfRVhQCisjIGRlZmluZSBMREJMX01BWF9FWFAgICAgMTYzODQKKy8qIE1pbmltdW0gcG9zaXRpdmUgbm9ybWFsaXplZCBudW1iZXIuICAqLworIyB1bmRlZiBMREJMX01JTgorIyBkZWZpbmUgTERCTF9NSU4gICAgICAgIDMuMzYyMTAzMTQzMTEyMDkzNUUtNDkzMkwgLyogPSAweDFwLTE2MzgyTCAqLworLyogTWF4aW11bSByZXByZXNlbnRhYmxlIGZpbml0ZSBudW1iZXIuICAqLworIyB1bmRlZiBMREJMX01BWAorLyogTERCTF9NQVggaXMgcmVwcmVzZW50ZWQgYXMgeyAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAzMjc2NiB9LgorICAgQnV0IHRoZSBsYXJnZXN0IGxpdGVyYWwgdGhhdCBHQ0MgYWxsb3dzIHVzIHRvIHdyaXRlIGlzCisgICAweDAuZmZmZmZmZmZmZmZmZjhwMTYzODRMID0geyAweEZGRkZGODAwLCAweEZGRkZGRkZGLCAzMjc2NiB9LgorICAgU28sIGRlZmluZSBpdCBsaWtlIHRoaXMgdGhyb3VnaCBhIHJlZmVyZW5jZSB0byBhbiBleHRlcm5hbCB2YXJpYWJsZQorCisgICAgIGNvbnN0IHVuc2lnbmVkIGludCBMREJMX01BWFszXSA9IHsgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMzI3NjYgfTsKKyAgICAgZXh0ZXJuIGNvbnN0IGxvbmcgZG91YmxlIExEQkxfTUFYOworCisgICBVbmZvcnR1bmF0ZWx5LCB0aGlzIGlzIG5vdCBhIGNvbnN0YW50IGV4cHJlc3Npb24uICAqLwordW5pb24gZ2xfbG9uZ19kb3VibGVfdW5pb24KKyAgeworICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBsbzsgdW5zaWduZWQgaW50IGhpOyB1bnNpZ25lZCBpbnQgZXhwb25lbnQ7IH0geGQ7CisgICAgbG9uZyBkb3VibGUgbGQ7CisgIH07CitleHRlcm4gY29uc3QgdW5pb24gZ2xfbG9uZ19kb3VibGVfdW5pb24gZ2xfTERCTF9NQVg7CisjIGRlZmluZSBMREJMX01BWCAoZ2xfTERCTF9NQVgubGQpCisvKiBNaW5pbXVtIGUgc3VjaCB0aGF0IDEwXmUgaXMgaW4gdGhlIHJhbmdlIG9mIG5vcm1hbGl6ZWQgbnVtYmVycy4gICovCisjIHVuZGVmIExEQkxfTUlOXzEwX0VYUAorIyBkZWZpbmUgTERCTF9NSU5fMTBfRVhQICgtNDkzMSkKKy8qIE1heGltdW0gZSBzdWNoIHRoYXQgMTBeZSBpcyBpbiB0aGUgcmFuZ2Ugb2YgcmVwcmVzZW50YWJsZSBmaW5pdGUgbnVtYmVycy4gICovCisjIHVuZGVmIExEQkxfTUFYXzEwX0VYUAorIyBkZWZpbmUgTERCTF9NQVhfMTBfRVhQIDQ5MzIKKyNlbmRpZgorCisvKiBPbiBBSVggNy4xIHdpdGggZ2NjIDQuMiwgdGhlIHZhbHVlcyBvZiBMREJMX01JTl9FWFAsIExEQkxfTUlOLCBMREJMX01BWCBhcmUKKyAgIHdyb25nLgorICAgT24gTGludXgvUG93ZXJQQyB3aXRoIGdjYyA0LjQsIHRoZSB2YWx1ZSBvZiBMREJMX01BWCBpcyB3cm9uZy4gICovCisjaWYgKGRlZmluZWQgX0FSQ0hfUFBDIHx8IGRlZmluZWQgX1BPV0VSKSAmJiBkZWZpbmVkIF9BSVggJiYgKExEQkxfTUFOVF9ESUcgPT0gMTA2KSAmJiBkZWZpbmVkIF9fR05VQ19fCisjIHVuZGVmIExEQkxfTUlOX0VYUAorIyBkZWZpbmUgTERCTF9NSU5fRVhQIERCTF9NSU5fRVhQCisjIHVuZGVmIExEQkxfTUlOXzEwX0VYUAorIyBkZWZpbmUgTERCTF9NSU5fMTBfRVhQIERCTF9NSU5fMTBfRVhQCisjIHVuZGVmIExEQkxfTUlOCisjIGRlZmluZSBMREJMX01JTiAyLjIyNTA3Mzg1ODUwNzIwMTM4MzA5MDIzMjcxNzMzMjQwNDA2NDIyZS0zMDhMIC8qIERCTF9NSU4gPSAyXi0xMDIyICovCisjZW5kaWYKKyNpZiAoZGVmaW5lZCBfQVJDSF9QUEMgfHwgZGVmaW5lZCBfUE9XRVIpICYmIChkZWZpbmVkIF9BSVggfHwgZGVmaW5lZCBfX2xpbnV4X18pICYmIChMREJMX01BTlRfRElHID09IDEwNikgJiYgZGVmaW5lZCBfX0dOVUNfXworIyB1bmRlZiBMREJMX01BWAorLyogTERCTF9NQVggaXMgcmVwcmVzZW50ZWQgYXMgeyAweDdGRUZGRkZGLCAweEZGRkZGRkZGLCAweDdDOEZGRkZGLCAweEZGRkZGRkZGIH0uCisgICBJdCBpcyBub3QgZWFzeSB0byBkZWZpbmU6CisgICAgICNkZWZpbmUgTERCTF9NQVggMS43OTc2OTMxMzQ4NjIzMTU4MDc5MzcyODk3MTQwNTMwMjMwNzE2NmUzMDhMCisgICBpcyB0b28gc21hbGwsIHdoZXJlYXMKKyAgICAgI2RlZmluZSBMREJMX01BWCAxLjc5NzY5MzEzNDg2MjMxNTgwNzkzNzI4OTcxNDA1MzAyMzA3MTY3ZTMwOEwKKyAgIGlzIHRvbyBsYXJnZS4gIEFwcGFyZW50bHkgYSBidWcgaW4gR0NDIGRlY2ltYWwtdG8tYmluYXJ5IGNvbnZlcnNpb24uCisgICBBbHNvLCBJIGNhbid0IGdldCB2YWx1ZXMgbGFyZ2VyIHRoYW4KKyAgICAgI2RlZmluZSBMREJMNjMgKChsb25nIGRvdWJsZSkgKDFVTEwgPDwgNjMpKQorICAgICAjZGVmaW5lIExEQkw4ODIgKExEQkw2MyAqIExEQkw2MyAqIExEQkw2MyAqIExEQkw2MyAqIExEQkw2MyAqIExEQkw2MyAqIExEQkw2MyAqIExEQkw2MyAqIExEQkw2MyAqIExEQkw2MyAqIExEQkw2MyAqIExEQkw2MyAqIExEQkw2MyAqIExEQkw2MykKKyAgICAgI2RlZmluZSBMREJMOTQ1IChMREJMNjMgKiBMREJMNjMgKiBMREJMNjMgKiBMREJMNjMgKiBMREJMNjMgKiBMREJMNjMgKiBMREJMNjMgKiBMREJMNjMgKiBMREJMNjMgKiBMREJMNjMgKiBMREJMNjMgKiBMREJMNjMgKiBMREJMNjMgKiBMREJMNjMgKiBMREJMNjMpCisgICAgICNkZWZpbmUgTERCTDEwMDggKExEQkw2MyAqIExEQkw2MyAqIExEQkw2MyAqIExEQkw2MyAqIExEQkw2MyAqIExEQkw2MyAqIExEQkw2MyAqIExEQkw2MyAqIExEQkw2MyAqIExEQkw2MyAqIExEQkw2MyAqIExEQkw2MyAqIExEQkw2MyAqIExEQkw2MyAqIExEQkw2MyAqIExEQkw2MykKKyAgICAgI2RlZmluZSBMREJMX01BWCAoTERCTDEwMDggKiA2NTUzNS4wTCArIExEQkw5NDUgKiAobG9uZyBkb3VibGUpIDkyMjMzNzIwMzY4MjEyMjEzNzVVTEwgKyBMREJMODgyICogKGxvbmcgZG91YmxlKSA0NjExNjg2MDE4NDI3Mzg3OTA0VUxMKQorICAgd2hpY2ggaXMgcmVwcmVzZW50ZWQgYXMgeyAweDdGRUZGRkZGLCAweEZGRkZGRkZGLCAweDdDOEZGRkZGLCAweEY4MDAwMDAwIH0uCisgICBTbywgZGVmaW5lIGl0IGxpa2UgdGhpcyB0aHJvdWdoIGEgcmVmZXJlbmNlIHRvIGFuIGV4dGVybmFsIHZhcmlhYmxlCisKKyAgICAgY29uc3QgZG91YmxlIExEQkxfTUFYWzJdID0geyBEQkxfTUFYLCBEQkxfTUFYIC8gKGRvdWJsZSkxMzQyMTc3MjhVTCAvIChkb3VibGUpMTM0MjE3NzI4VUwgfTsKKyAgICAgZXh0ZXJuIGNvbnN0IGxvbmcgZG91YmxlIExEQkxfTUFYOworCisgICBvciB0aHJvdWdoIGEgcG9pbnRlciBjYXN0CisKKyAgICAgI2RlZmluZSBMREJMX01BWCBcCisgICAgICAgKCooY29uc3QgbG9uZyBkb3VibGUgKikgKGRvdWJsZVtdKSB7IERCTF9NQVgsIERCTF9NQVggLyAoZG91YmxlKTEzNDIxNzcyOFVMIC8gKGRvdWJsZSkxMzQyMTc3MjhVTCB9KQorCisgICBVbmZvcnR1bmF0ZWx5LCB0aGlzIGlzIG5vdCBhIGNvbnN0YW50IGV4cHJlc3Npb24sIGFuZCB0aGUgbGF0dGVyIGV4cHJlc3Npb24KKyAgIGRvZXMgbm90IHdvcmsgd2VsbCB3aGVuIEdDQyBpcyBvcHRpbWl6aW5nLi4gICovCit1bmlvbiBnbF9sb25nX2RvdWJsZV91bmlvbgorICB7CisgICAgc3RydWN0IHsgZG91YmxlIGhpOyBkb3VibGUgbG87IH0gZGQ7CisgICAgbG9uZyBkb3VibGUgbGQ7CisgIH07CitleHRlcm4gY29uc3QgdW5pb24gZ2xfbG9uZ19kb3VibGVfdW5pb24gZ2xfTERCTF9NQVg7CisjIGRlZmluZSBMREJMX01BWCAoZ2xfTERCTF9NQVgubGQpCisjZW5kaWYKKworLyogT24gSVJJWCA2LjUsIHdpdGggY2MsIHRoZSB2YWx1ZSBvZiBMREJMX01BTlRfRElHIGlzIHdyb25nLgorICAgT24gSVJJWCA2LjUsIHdpdGggZ2NjIDQuMiwgdGhlIHZhbHVlcyBvZiBMREJMX01JTl9FWFAsIExEQkxfTUlOLCBMREJMX0VQU0lMT04KKyAgIGFyZSB3cm9uZy4gICovCisjaWYgZGVmaW5lZCBfX3NnaSAmJiAoTERCTF9NQU5UX0RJRyA+PSAxMDYpCisjIHVuZGVmIExEQkxfTUFOVF9ESUcKKyMgZGVmaW5lIExEQkxfTUFOVF9ESUcgMTA2CisjIGlmIGRlZmluZWQgX19HTlVDX18KKyMgIHVuZGVmIExEQkxfTUlOX0VYUAorIyAgZGVmaW5lIExEQkxfTUlOX0VYUCBEQkxfTUlOX0VYUAorIyAgdW5kZWYgTERCTF9NSU5fMTBfRVhQCisjICBkZWZpbmUgTERCTF9NSU5fMTBfRVhQIERCTF9NSU5fMTBfRVhQCisjICB1bmRlZiBMREJMX01JTgorIyAgZGVmaW5lIExEQkxfTUlOIDIuMjI1MDczODU4NTA3MjAxMzgzMDkwMjMyNzE3MzMyNDA0MDY0MjJlLTMwOEwgLyogREJMX01JTiA9IDJeLTEwMjIgKi8KKyMgIHVuZGVmIExEQkxfRVBTSUxPTgorIyAgZGVmaW5lIExEQkxfRVBTSUxPTiAyLjQ2NTE5MDMyODgxNTY2MTg5MTkxMTY1MTc2NjUwODcwNjk2NzczZS0zMkwgLyogMl4tMTA1ICovCisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBSRVBMQUNFX0lUT0xEQAorLyogUHVsbCBpbiBhIGZ1bmN0aW9uIHRoYXQgZml4ZXMgdGhlICdpbnQnIHRvICdsb25nIGRvdWJsZScgY29udmVyc2lvbgorICAgb2YgZ2xpYmMgMi43LiAgKi8KK2V4dGVybgorIyBpZmRlZiBfX2NwbHVzcGx1cworIkMiCisjIGVuZGlmCit2b2lkIF9RcF9pdG9xIChsb25nIGRvdWJsZSAqLCBpbnQpOworc3RhdGljIHZvaWQgKCpfZ2xfZmxvYXRfZml4X2l0b2xkKSAobG9uZyBkb3VibGUgKiwgaW50KSA9IF9RcF9pdG9xOworI2VuZGlmCisKKyNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfRkxPQVRfSCAqLworI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9GTE9BVF9IICovCmRpZmYgLS1naXQgYS9saWIvZm9wZW4tc2FmZXIuYyBiL2xpYi9mb3Blbi1zYWZlci5jCmluZGV4IDRmMmZmYTEuLjM4YjAwOTMgMTAwNjQ0Ci0tLSBhL2xpYi9mb3Blbi1zYWZlci5jCisrKyBiL2xpYi9mb3Blbi1zYWZlci5jCkBAIC0xLDEwICsxLDExIEBACiAvKiBJbnZva2UgZm9wZW4sIGJ1dCBhdm9pZCBzb21lIGdsaXRjaGVzLgotICAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDA0LTIwMDYsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCkBAIC0xMiwxNCArMTMsMTEgQEAKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAvKiBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0LiAgKi8KIAotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxjb25maWcuaD4KIAogI2luY2x1ZGUgInN0ZGlvLXNhZmVyLmgiCiAKQEAgLTI3LDEwICsyNSw2IEBACiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSAidW5pc3RkLXNhZmVyLmgiCiAKLSNpZm5kZWYgU1RERVJSX0ZJTEVOTwotIyBkZWZpbmUgU1RERVJSX0ZJTEVOTyAyCi0jZW5kaWYKLQogLyogTGlrZSBmb3BlbiwgYnV0IGRvIG5vdCByZXR1cm4gc3RkaW4sIHN0ZG91dCwgb3Igc3RkZXJyLiAgKi8KIAogRklMRSAqCkBAIC00MywyNiArMzcsMjYgQEAKICAgICAgIGludCBmZCA9IGZpbGVubyAoZnApOwogCiAgICAgICBpZiAoMCA8PSBmZCAmJiBmZCA8PSBTVERFUlJfRklMRU5PKQotCXsKLQkgIGludCBmID0gZHVwX3NhZmVyIChmZCk7CisgICAgICAgIHsKKyAgICAgICAgICBpbnQgZiA9IGR1cF9zYWZlciAoZmQpOwogCi0JICBpZiAoZiA8IDApCi0JICAgIHsKLQkgICAgICBpbnQgZSA9IGVycm5vOwotCSAgICAgIGZjbG9zZSAoZnApOwotCSAgICAgIGVycm5vID0gZTsKLQkgICAgICByZXR1cm4gTlVMTDsKLQkgICAgfQorICAgICAgICAgIGlmIChmIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaW50IGUgPSBlcnJubzsKKyAgICAgICAgICAgICAgZmNsb3NlIChmcCk7CisgICAgICAgICAgICAgIGVycm5vID0gZTsKKyAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CiAKLQkgIGlmIChmY2xvc2UgKGZwKSAhPSAwCi0JICAgICAgfHwgISAoZnAgPSBmZG9wZW4gKGYsIG1vZGUpKSkKLQkgICAgewotCSAgICAgIGludCBlID0gZXJybm87Ci0JICAgICAgY2xvc2UgKGYpOwotCSAgICAgIGVycm5vID0gZTsKLQkgICAgICByZXR1cm4gTlVMTDsKLQkgICAgfQotCX0KKyAgICAgICAgICBpZiAoZmNsb3NlIChmcCkgIT0gMAorICAgICAgICAgICAgICB8fCAhIChmcCA9IGZkb3BlbiAoZiwgbW9kZSkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpbnQgZSA9IGVycm5vOworICAgICAgICAgICAgICBjbG9zZSAoZik7CisgICAgICAgICAgICAgIGVycm5vID0gZTsKKyAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKICAgcmV0dXJuIGZwOwpkaWZmIC0tZ2l0IGEvbGliL2ZvcGVuLmMgYi9saWIvZm9wZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDA4MTkyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2ZvcGVuLmMKQEAgLTAsMCArMSwxMTAgQEAKKy8qIE9wZW4gYSBzdHJlYW0gdG8gYSBmaWxlLgorICAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LCAyMDA3LiAgKi8KKworLyogSWYgdGhlIHVzZXIncyBjb25maWcuaCBoYXBwZW5zIHRvIGluY2x1ZGUgPHN0ZGlvLmg+LCBsZXQgaXQgaW5jbHVkZSBvbmx5CisgICB0aGUgc3lzdGVtJ3MgPHN0ZGlvLmg+IGhlcmUsIHNvIHRoYXQgb3JpZ19mb3BlbiBkb2Vzbid0IHJlY3Vyc2UgdG8KKyAgIHJwbF9mb3Blbi4gICovCisjZGVmaW5lIF9fbmVlZF9GSUxFCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIEdldCB0aGUgb3JpZ2luYWwgZGVmaW5pdGlvbiBvZiBmb3Blbi4gIEl0IG1pZ2h0IGJlIGRlZmluZWQgYXMgYSBtYWNyby4gICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyN1bmRlZiBfX25lZWRfRklMRQorCitzdGF0aWMgRklMRSAqCitvcmlnX2ZvcGVuIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSkKK3sKKyAgcmV0dXJuIGZvcGVuIChmaWxlbmFtZSwgbW9kZSk7Cit9CisKKy8qIFNwZWNpZmljYXRpb24uICAqLworLyogV3JpdGUgInN0ZGlvLmgiIGhlcmUsIG5vdCA8c3RkaW8uaD4sIG90aGVyd2lzZSBPU0YvMSA1LjEgRFRLIGNjIGVsaW1pbmF0ZXMKKyAgIHRoaXMgaW5jbHVkZSBiZWNhdXNlIG9mIHRoZSBwcmVsaW1pbmFyeSAjaW5jbHVkZSA8c3RkaW8uaD4gYWJvdmUuICAqLworI2luY2x1ZGUgInN0ZGlvLmgiCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworRklMRSAqCitycGxfZm9wZW4gKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICptb2RlKQoreworI2lmIChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgISBkZWZpbmVkIF9fQ1lHV0lOX18KKyAgaWYgKHN0cmNtcCAoZmlsZW5hbWUsICIvZGV2L251bGwiKSA9PSAwKQorICAgIGZpbGVuYW1lID0gIk5VTCI7CisjZW5kaWYKKworI2lmIEZPUEVOX1RSQUlMSU5HX1NMQVNIX0JVRworICAvKiBJZiB0aGUgZmlsZW5hbWUgZW5kcyBpbiBhIHNsYXNoIGFuZCBhIG1vZGUgdGhhdCByZXF1aXJlcyB3cml0ZSBhY2Nlc3MgaXMKKyAgICAgc3BlY2lmaWVkLCB0aGVuIGZhaWwuCisgICAgIFJhdGlvbmFsZTogUE9TSVggPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2My9iYXNlZGVmcy94YmRfY2hhcDA0Lmh0bWw+CisgICAgIHNheXMgdGhhdAorICAgICAgICJBIHBhdGhuYW1lIHRoYXQgY29udGFpbnMgYXQgbGVhc3Qgb25lIG5vbi1zbGFzaCBjaGFyYWN0ZXIgYW5kIHRoYXQKKyAgICAgICAgZW5kcyB3aXRoIG9uZSBvciBtb3JlIHRyYWlsaW5nIHNsYXNoZXMgc2hhbGwgYmUgcmVzb2x2ZWQgYXMgaWYgYQorICAgICAgICBzaW5nbGUgZG90IGNoYXJhY3RlciAoICcuJyApIHdlcmUgYXBwZW5kZWQgdG8gdGhlIHBhdGhuYW1lLiIKKyAgICAgYW5kCisgICAgICAgIlRoZSBzcGVjaWFsIGZpbGVuYW1lIGRvdCBzaGFsbCByZWZlciB0byB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZCBieQorICAgICAgICBpdHMgcHJlZGVjZXNzb3IuIgorICAgICBJZiB0aGUgbmFtZWQgZmlsZSBhbHJlYWR5IGV4aXN0cyBhcyBhIGRpcmVjdG9yeSwgdGhlbiBpZiBhIG1vZGUgdGhhdAorICAgICByZXF1aXJlcyB3cml0ZSBhY2Nlc3MgaXMgc3BlY2lmaWVkLCBmb3BlbigpIG11c3QgZmFpbCBiZWNhdXNlIFBPU0lYCisgICAgIDxodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjMvZnVuY3Rpb25zL2ZvcGVuLmh0bWw+IHNheXMgdGhhdCBpdAorICAgICBmYWlscyB3aXRoIGVycm5vID0gRUlTRElSIGluIHRoaXMgY2FzZS4KKyAgICAgSWYgdGhlIG5hbWVkIGZpbGUgZG9lcyBub3QgZXhpc3Qgb3IgZG9lcyBub3QgbmFtZSBhIGRpcmVjdG9yeSwgdGhlbgorICAgICBmb3BlbigpIG11c3QgZmFpbCBzaW5jZSB0aGUgZmlsZSBkb2VzIG5vdCBjb250YWluIGEgJy4nIGRpcmVjdG9yeS4gICovCisgIHsKKyAgICBzaXplX3QgbGVuID0gc3RybGVuIChmaWxlbmFtZSk7CisgICAgaWYgKGxlbiA+IDAgJiYgZmlsZW5hbWVbbGVuIC0gMV0gPT0gJy8nKQorICAgICAgeworICAgICAgICBpbnQgZmQ7CisgICAgICAgIHN0cnVjdCBzdGF0IHN0YXRidWY7CisgICAgICAgIEZJTEUgKmZwOworCisgICAgICAgIGlmIChtb2RlWzBdID09ICd3JyB8fCBtb2RlWzBdID09ICdhJykKKyAgICAgICAgICB7CisgICAgICAgICAgICBlcnJubyA9IEVJU0RJUjsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgIH0KKworICAgICAgICBmZCA9IG9wZW4gKGZpbGVuYW1lLCBPX1JET05MWSk7CisgICAgICAgIGlmIChmZCA8IDApCisgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgaWYgKGZzdGF0IChmZCwgJnN0YXRidWYpID49IDAgJiYgIVNfSVNESVIgKHN0YXRidWYuc3RfbW9kZSkpCisgICAgICAgICAgeworICAgICAgICAgICAgY2xvc2UgKGZkKTsKKyAgICAgICAgICAgIGVycm5vID0gRU5PVERJUjsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgIH0KKworICAgICAgICBmcCA9IGZkb3BlbiAoZmQsIG1vZGUpOworICAgICAgICBpZiAoZnAgPT0gTlVMTCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgICAgICAgIGNsb3NlIChmZCk7CisgICAgICAgICAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworICAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZwOworICAgICAgfQorICB9CisjIGVuZGlmCisKKyAgcmV0dXJuIG9yaWdfZm9wZW4gKGZpbGVuYW1lLCBtb2RlKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9mcGVuZGluZy5jIGIvbGliL2ZwZW5kaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU5MWQ1MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9mcGVuZGluZy5jCkBAIC0wLDAgKzEsMzAgQEAKKy8qIGZwZW5kaW5nLmMgLS0gcmV0dXJuIHRoZSBudW1iZXIgb2YgcGVuZGluZyBvdXRwdXQgYnl0ZXMgb24gYSBzdHJlYW0KKyAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwNCwgMjAwNi0yMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBXcml0dGVuIGJ5IEppbSBNZXllcmluZy4gKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSAiZnBlbmRpbmcuaCIKKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgcGVuZGluZyAoYWthIGJ1ZmZlcmVkLCB1bmZsdXNoZWQpCisgICBieXRlcyBvbiB0aGUgc3RyZWFtLCBGUCwgdGhhdCBpcyBvcGVuIGZvciB3cml0aW5nLiAgKi8KK3NpemVfdAorX19mcGVuZGluZyAoRklMRSAqZnApCit7CisgIHJldHVybiBQRU5ESU5HX09VVFBVVF9OX0JZVEVTOworfQpkaWZmIC0tZ2l0IGEvbGliL2ZwZW5kaW5nLmggYi9saWIvZnBlbmRpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzY1Mjg3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2ZwZW5kaW5nLmgKQEAgLTAsMCArMSwzMCBAQAorLyogRGVjbGFyZSBfX2ZwZW5kaW5nLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDMsIDIwMDUtMjAwNiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisgICBXcml0dGVuIGJ5IEppbSBNZXllcmluZy4gICovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWYgSEFWRV9ERUNMX19fRlBFTkRJTkcKKyMgaWYgSEFWRV9TVERJT19FWFRfSAorIyAgaW5jbHVkZSA8c3RkaW9fZXh0Lmg+CisjIGVuZGlmCisjZWxzZQorc2l6ZV90IF9fZnBlbmRpbmcgKEZJTEUgKik7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9mcHJpbnRmLmMgYi9saWIvZnByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZGI1ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZnByaW50Zi5jCkBAIC0wLDAgKzEsNzcgQEAKKy8qIEZvcm1hdHRlZCBvdXRwdXQgdG8gYSBzdHJlYW0uCisgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmIDEKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJmc2V0ZXJyLmgiCisjaW5jbHVkZSAidmFzbnByaW50Zi5oIgorCisvKiBQcmludCBmb3JtYXR0ZWQgb3V0cHV0IHRvIHRoZSBzdHJlYW0gRlAuCisgICBSZXR1cm4gc3RyaW5nIGxlbmd0aCBvZiBmb3JtYXR0ZWQgc3RyaW5nLiAgT24gZXJyb3IsIHJldHVybiBhIG5lZ2F0aXZlCisgICB2YWx1ZS4gICovCitpbnQKK2ZwcmludGYgKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgY2hhciBidWZbMjAwMF07CisgIGNoYXIgKm91dHB1dDsKKyAgc2l6ZV90IGxlbjsKKyAgc2l6ZV90IGxlbmJ1ZiA9IHNpemVvZiAoYnVmKTsKKyAgdmFfbGlzdCBhcmdzOworCisgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworICBvdXRwdXQgPSB2YXNucHJpbnRmIChidWYsICZsZW5idWYsIGZvcm1hdCwgYXJncyk7CisgIGxlbiA9IGxlbmJ1ZjsKKyAgdmFfZW5kIChhcmdzKTsKKworICBpZiAoIW91dHB1dCkKKyAgICB7CisgICAgICBmc2V0ZXJyIChmcCk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIGlmIChmd3JpdGUgKG91dHB1dCwgMSwgbGVuLCBmcCkgPCBsZW4pCisgICAgeworICAgICAgaWYgKG91dHB1dCAhPSBidWYpCisgICAgICAgIHsKKyAgICAgICAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgICAgICBmcmVlIChvdXRwdXQpOworICAgICAgICAgIGVycm5vID0gc2F2ZWRfZXJybm87CisgICAgICAgIH0KKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgaWYgKG91dHB1dCAhPSBidWYpCisgICAgZnJlZSAob3V0cHV0KTsKKworICBpZiAobGVuID4gSU5UX01BWCkKKyAgICB7CisgICAgICBlcnJubyA9IEVPVkVSRkxPVzsKKyAgICAgIGZzZXRlcnIgKGZwKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgcmV0dXJuIGxlbjsKK30KZGlmZiAtLWdpdCBhL2xpYi9mcHVjdy5oIGIvbGliL2ZwdWN3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNlNGM4MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9mcHVjdy5oCkBAIC0wLDAgKzEsMTA4IEBACisvKiBNYW5pcHVsYXRpbmcgdGhlIEZQVSBjb250cm9sIHdvcmQuCisgICBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LCAyMDA3LgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIF9GUFVDV19ICisjZGVmaW5lIF9GUFVDV19ICisKKy8qIFRoZSBpMzg2IGZsb2F0aW5nIHBvaW50IGhhcmR3YXJlICh0aGUgMzg3IGNvbXBhdGlibGUgRlBVLCBub3QgdGhlIG1vZGVybgorICAgU1NFL1NTRTIgaGFyZHdhcmUpIGhhcyBhIGNvbnRyb2xsYWJsZSByb3VuZGluZyBwcmVjaXNpb24uICBJdCBpcyBzcGVjaWZpZWQKKyAgIHRocm91Z2ggdGhlICdQQycgYml0cyBpbiB0aGUgRlBVIGNvbnRyb2wgd29yZCAoJ2ZjdHJsJyByZWdpc3RlcikuICAoU2VlCisgICB0aGUgR05VIGxpYmMgaTM4NiA8ZnB1X2NvbnRyb2wuaD4gaGVhZGVyIGZvciBkZXRhaWxzLikKKworICAgT24gc29tZSBwbGF0Zm9ybXMsIHN1Y2ggYXMgTGludXggb3IgU29sYXJpcywgdGhlIGRlZmF1bHQgcHJlY2lzaW9uIHNldHRpbmcKKyAgIGlzIHNldCB0byAiZXh0ZW5kZWQgcHJlY2lzaW9uIi4gIFRoaXMgbWVhbnMgdGhhdCAnbG9uZyBkb3VibGUnIGluc3RydWN0aW9ucworICAgb3BlcmF0ZSBjb3JyZWN0bHksIGJ1dCAnZG91YmxlJyBjb21wdXRhdGlvbnMgb2Z0ZW4gcHJvZHVjZSBzbGlnaHRseQorICAgZGlmZmVyZW50IHJlc3VsdHMgYXMgb24gc3RyaWN0bHkgSUVFRSA3NTQgY29uZm9ybWluZyBzeXN0ZW1zLgorCisgICBPbiBzb21lIHBsYXRmb3Jtcywgc3VjaCBhcyBOZXRCU0QsIHRoZSBkZWZhdWx0IHByZWNpc2lvbiBpcyBzZXQgdG8KKyAgICJkb3VibGUgcHJlY2lzaW9uIi4gIFRoaXMgbWVhbnMgdGhhdCAnbG9uZyBkb3VibGUnIGluc3RydWN0aW9ucyB3aWxsIG9wZXJhdGUKKyAgIG9ubHkgYXMgJ2RvdWJsZScsIGkuZS4gbGVhZCB0byB3cm9uZyByZXN1bHRzLiAgU2ltaWxhcmx5IG9uIEZyZWVCU0QgNi40LCBhdAorICAgbGVhc3QgZm9yIHRoZSBkaXZpc2lvbiBvZiAnbG9uZyBkb3VibGUnIG51bWJlcnMuCisKKyAgIFRoZSBGUFUgY29udHJvbCB3b3JkIGlzIHVuZGVyIGNvbnRyb2wgb2YgdGhlIGFwcGxpY2F0aW9uLCBpLmUuIGl0IGlzCisgICBub3QgcmVxdWlyZWQgdG8gYmUgc2V0IGVpdGhlciB3YXkgYnkgdGhlIEFCSS4gIChJbiBmYWN0LCB0aGUgaTM4NiBBQkkKKyAgIGh0dHA6Ly9yZWZzcGVjcy5mcmVlc3RhbmRhcmRzLm9yZy9lbGYvYWJpMzg2LTQucGRmIHBhZ2UgMy0xMiA9IHBhZ2UgMzgKKyAgIGlzIG5vdCBjbGVhciBhYm91dCBpdC4gIEJ1dCBpbiBhbnkgY2FzZSwgZ2NjIHRyZWF0cyB0aGUgY29udHJvbCB3b3JkCisgICBsaWtlIGEgInByZXNlcnZlZCIgcmVnaXN0ZXI6IGl0IGVtaXRzIGNvZGUgdGhhdCBhc3N1bWVzIHRoYXQgdGhlIGNvbnRyb2wKKyAgIHdvcmQgaXMgcHJlc2VydmVkIGFjcm9zcyBjYWxscywgYW5kIGl0IHJlc3RvcmVzIHRoZSBjb250cm9sIHdvcmQgYXQgdGhlCisgICBlbmQgb2YgZnVuY3Rpb25zIHRoYXQgbW9kaWZ5IGl0LikKKworICAgU2VlIFZpbmNlbnQgTGVmw6h2cmUncyBwYWdlIGh0dHA6Ly93d3cudmluYzE3Lm9yZy9yZXNlYXJjaC9leHRlbmRlZC5lbi5odG1sCisgICBmb3IgYSBnb29kIGV4cGxhbmF0aW9uLgorICAgU2VlIGh0dHA6Ly93d3cudXdzZy5pdS5lZHUvaHlwZXJtYWlsL2xpbnV4L2tlcm5lbC8wMTAzLjAvMDQ1My5odG1sIGZvcgorICAgc29tZSBhcmd1bWVudGF0aW9uIHdoaWNoIHNldHRpbmcgc2hvdWxkIGJlIHRoZSBkZWZhdWx0LiAgKi8KKworLyogVGhpcyBoZWFkZXIgZmlsZSBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGZhY2lsaXRpZXM6CisgICAgIGZwdWN3X3QgICAgICAgICAgICAgICAgICAgICAgICBpbnRlZ3JhbCB0eXBlIGhvbGRpbmcgdGhlIHZhbHVlIG9mICdmY3RybCcKKyAgICAgRlBVX1BDX01BU0sgICAgICAgICAgICAgICAgICAgIGJpdCBtYXNrIGRlbm90aW5nIHRoZSBwcmVjaXNpb24gY29udHJvbAorICAgICBGUFVfUENfRE9VQkxFICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uIGNvbnRyb2wgZm9yIDUzIGJpdHMgbWFudGlzc2EKKyAgICAgRlBVX1BDX0VYVEVOREVEICAgICAgICAgICAgICAgIHByZWNpc2lvbiBjb250cm9sIGZvciA2NCBiaXRzIG1hbnRpc3NhCisgICAgIEdFVF9GUFVDVyAoKSAgICAgICAgICAgICAgICAgICB5aWVsZHMgdGhlIGN1cnJlbnQgRlBVIGNvbnRyb2wgd29yZAorICAgICBTRVRfRlBVQ1cgKHdvcmQpICAgICAgICAgICAgICAgc2V0cyB0aGUgRlBVIGNvbnRyb2wgd29yZAorICAgICBERUNMX0xPTkdfRE9VQkxFX1JPVU5ESU5HICAgICAgdmFyaWFibGUgZGVjbGFyYXRpb24gZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRUdJTi9FTkRfTE9OR19ET1VCTEVfUk9VTkRJTkcKKyAgICAgQkVHSU5fTE9OR19ET1VCTEVfUk9VTkRJTkcgKCkgIHN0YXJ0cyBhIHNlcXVlbmNlIG9mIGluc3RydWN0aW9ucyB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9uZyBkb3VibGUnIHNhZmUgb3BlcmF0aW9uIHByZWNpc2lvbgorICAgICBFTkRfTE9OR19ET1VCTEVfUk9VTkRJTkcgKCkgICAgZW5kcyBhIHNlcXVlbmNlIG9mIGluc3RydWN0aW9ucyB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9uZyBkb3VibGUnIHNhZmUgb3BlcmF0aW9uIHByZWNpc2lvbgorICovCisKKy8qIElubGluZSBhc3NlbWJsZXIgbGlrZSB0aGlzIHdvcmtzIG9ubHkgd2l0aCBHTlUgQy4gICovCisjaWYgKGRlZmluZWQgX19pMzg2X18gfHwgZGVmaW5lZCBfX3g4Nl82NF9fKSAmJiBkZWZpbmVkIF9fR05VQ19fCisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgZnB1Y3dfdDsgLyogZ2xpYmMgY2FsbHMgdGhpcyBmcHVfY29udHJvbF90ICovCisKKyMgZGVmaW5lIEZQVV9QQ19NQVNLIDB4MDMwMAorIyBkZWZpbmUgRlBVX1BDX0RPVUJMRSAweDIwMCAgICAvKiBnbGliYyBjYWxscyB0aGlzIF9GUFVfRE9VQkxFICovCisjIGRlZmluZSBGUFVfUENfRVhURU5ERUQgMHgzMDAgIC8qIGdsaWJjIGNhbGxzIHRoaXMgX0ZQVV9FWFRFTkRFRCAqLworCisjIGRlZmluZSBHRVRfRlBVQ1coKSBcCisgICh7IGZwdWN3X3QgX2N3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZuc3RjdyAlMCIgOiAiPW0iICgqJl9jdykpOyAgICAgICAgIFwKKyAgICAgX2N3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICB9KQorIyBkZWZpbmUgU0VUX0ZQVUNXKHdvcmQpIFwKKyAgKHZvaWQpKHsgZnB1Y3dfdCBfbmN3ID0gKHdvcmQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgiZmxkY3cgJTAiIDogOiAibSIgKComX25jdykpOyAgXAorICAgICAgICAgfSkKKworIyBkZWZpbmUgREVDTF9MT05HX0RPVUJMRV9ST1VORElORyBcCisgIGZwdWN3X3Qgb2xkY3c7CisjIGRlZmluZSBCRUdJTl9MT05HX0RPVUJMRV9ST1VORElORygpIFwKKyAgKHZvaWQpKG9sZGN3ID0gR0VUX0ZQVUNXICgpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICBTRVRfRlBVQ1cgKChvbGRjdyAmIH5GUFVfUENfTUFTSykgfCBGUFVfUENfRVhURU5ERUQpKQorIyBkZWZpbmUgRU5EX0xPTkdfRE9VQkxFX1JPVU5ESU5HKCkgXAorICBTRVRfRlBVQ1cgKG9sZGN3KQorCisjZWxzZQorCit0eXBlZGVmIHVuc2lnbmVkIGludCBmcHVjd190OworCisjIGRlZmluZSBGUFVfUENfTUFTSyAwCisjIGRlZmluZSBGUFVfUENfRE9VQkxFIDAKKyMgZGVmaW5lIEZQVV9QQ19FWFRFTkRFRCAwCisKKyMgZGVmaW5lIEdFVF9GUFVDVygpIDAKKyMgZGVmaW5lIFNFVF9GUFVDVyh3b3JkKSAodm9pZCkod29yZCkKKworIyBkZWZpbmUgREVDTF9MT05HX0RPVUJMRV9ST1VORElORworIyBkZWZpbmUgQkVHSU5fTE9OR19ET1VCTEVfUk9VTkRJTkcoKQorIyBkZWZpbmUgRU5EX0xPTkdfRE9VQkxFX1JPVU5ESU5HKCkKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfRlBVQ1dfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2ZyZXhwLmMgYi9saWIvZnJleHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjVkMGMwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2ZyZXhwLmMKQEAgLTAsMCArMSwxNjggQEAKKy8qIFNwbGl0IGEgZG91YmxlIGludG8gZnJhY3Rpb24gYW5kIG1hbnRpc3NhLgorICAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFdyaXR0ZW4gYnkgUGFvbG8gQm9uemluaSA8Ym9uemluaUBnbnUub3JnPiwgMjAwMywgYW5kCisgICBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4sIDIwMDcuICAqLworCisjaWYgISBkZWZpbmVkIFVTRV9MT05HX0RPVUJMRQorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2lmZGVmIFVTRV9MT05HX0RPVUJMRQorIyBpbmNsdWRlICJpc25hbmwtbm9saWJtLmgiCisjIGluY2x1ZGUgImZwdWN3LmgiCisjZWxzZQorIyBpbmNsdWRlICJpc25hbmQtbm9saWJtLmgiCisjZW5kaWYKKworLyogVGhpcyBmaWxlIGFzc3VtZXMgRkxUX1JBRElYID0gMi4gIElmIEZMVF9SQURJWCBpcyBhIHBvd2VyIG9mIDIgZ3JlYXRlcgorICAgdGhhbiAyLCBvciBub3QgZXZlbiBhIHBvd2VyIG9mIDIsIHNvbWUgcm91bmRpbmcgZXJyb3JzIGNhbiBvY2N1ciwgc28gdGhhdAorICAgdGhlbiB0aGUgcmV0dXJuZWQgbWFudGlzc2EgaXMgb25seSBndWFyYW50ZWVkIHRvIGJlIDw9IDEuMCwgbm90IDwgMS4wLiAgKi8KKworI2lmZGVmIFVTRV9MT05HX0RPVUJMRQorIyBkZWZpbmUgRlVOQyBmcmV4cGwKKyMgZGVmaW5lIERPVUJMRSBsb25nIGRvdWJsZQorIyBkZWZpbmUgSVNOQU4gaXNuYW5sCisjIGRlZmluZSBERUNMX1JPVU5ESU5HIERFQ0xfTE9OR19ET1VCTEVfUk9VTkRJTkcKKyMgZGVmaW5lIEJFR0lOX1JPVU5ESU5HKCkgQkVHSU5fTE9OR19ET1VCTEVfUk9VTkRJTkcgKCkKKyMgZGVmaW5lIEVORF9ST1VORElORygpIEVORF9MT05HX0RPVUJMRV9ST1VORElORyAoKQorIyBkZWZpbmUgTF8obGl0ZXJhbCkgbGl0ZXJhbCMjTAorI2Vsc2UKKyMgZGVmaW5lIEZVTkMgZnJleHAKKyMgZGVmaW5lIERPVUJMRSBkb3VibGUKKyMgZGVmaW5lIElTTkFOIGlzbmFuZAorIyBkZWZpbmUgREVDTF9ST1VORElORworIyBkZWZpbmUgQkVHSU5fUk9VTkRJTkcoKQorIyBkZWZpbmUgRU5EX1JPVU5ESU5HKCkKKyMgZGVmaW5lIExfKGxpdGVyYWwpIGxpdGVyYWwKKyNlbmRpZgorCitET1VCTEUKK0ZVTkMgKERPVUJMRSB4LCBpbnQgKmV4cHB0cikKK3sKKyAgaW50IHNpZ247CisgIGludCBleHBvbmVudDsKKyAgREVDTF9ST1VORElORworCisgIC8qIFRlc3QgZm9yIE5hTiwgaW5maW5pdHksIGFuZCB6ZXJvLiAgKi8KKyAgaWYgKElTTkFOICh4KSB8fCB4ICsgeCA9PSB4KQorICAgIHsKKyAgICAgICpleHBwdHIgPSAwOworICAgICAgcmV0dXJuIHg7CisgICAgfQorCisgIHNpZ24gPSAwOworICBpZiAoeCA8IDApCisgICAgeworICAgICAgeCA9IC0geDsKKyAgICAgIHNpZ24gPSAtMTsKKyAgICB9CisKKyAgQkVHSU5fUk9VTkRJTkcgKCk7CisKKyAgeworICAgIC8qIFNpbmNlIHRoZSBleHBvbmVudCBpcyBhbiAnaW50JywgaXQgZml0cyBpbiA2NCBiaXRzLiAgVGhlcmVmb3JlIHRoZQorICAgICAgIGxvb3BzIGFyZSBleGVjdXRlZCBubyBtb3JlIHRoYW4gNjQgdGltZXMuICAqLworICAgIERPVUJMRSBwb3cyWzY0XTsgLyogcG93MltpXSA9IDJeMl5pICovCisgICAgRE9VQkxFIHBvd2hbNjRdOyAvKiBwb3doW2ldID0gMl4tMl5pICovCisgICAgaW50IGk7CisKKyAgICBleHBvbmVudCA9IDA7CisgICAgaWYgKHggPj0gTF8oMS4wKSkKKyAgICAgIHsKKyAgICAgICAgLyogQSBwb3NpdGl2ZSBleHBvbmVudC4gICovCisgICAgICAgIERPVUJMRSBwb3cyX2k7IC8qID0gcG93MltpXSAqLworICAgICAgICBET1VCTEUgcG93aF9pOyAvKiA9IHBvd2hbaV0gKi8KKworICAgICAgICAvKiBJbnZhcmlhbnRzOiBwb3cyX2kgPSAyXjJeaSwgcG93aF9pID0gMl4tMl5pLAorICAgICAgICAgICB4ICogMl5leHBvbmVudCA9IGFyZ3VtZW50LCB4ID49IDEuMC4gICovCisgICAgICAgIGZvciAoaSA9IDAsIHBvdzJfaSA9IExfKDIuMCksIHBvd2hfaSA9IExfKDAuNSk7CisgICAgICAgICAgICAgOworICAgICAgICAgICAgIGkrKywgcG93Ml9pID0gcG93Ml9pICogcG93Ml9pLCBwb3doX2kgPSBwb3doX2kgKiBwb3doX2kpCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKHggPj0gcG93Ml9pKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXhwb25lbnQgKz0gKDEgPDwgaSk7CisgICAgICAgICAgICAgICAgeCAqPSBwb3doX2k7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIHBvdzJbaV0gPSBwb3cyX2k7CisgICAgICAgICAgICBwb3doW2ldID0gcG93aF9pOworICAgICAgICAgIH0KKyAgICAgICAgLyogQXZvaWQgbWFraW5nIHggdG9vIHNtYWxsLCBhcyBpdCBjb3VsZCBiZWNvbWUgYSBkZW5vcm1hbGl6ZWQKKyAgICAgICAgICAgbnVtYmVyIGFuZCB0aHVzIGxvc2UgcHJlY2lzaW9uLiAgKi8KKyAgICAgICAgd2hpbGUgKGkgPiAwICYmIHggPCBwb3cyW2kgLSAxXSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpLS07CisgICAgICAgICAgICBwb3doX2kgPSBwb3doW2ldOworICAgICAgICAgIH0KKyAgICAgICAgZXhwb25lbnQgKz0gKDEgPDwgaSk7CisgICAgICAgIHggKj0gcG93aF9pOworICAgICAgICAvKiBIZXJlIDJeLTJeaSA8PSB4IDwgMS4wLiAgKi8KKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIEEgbmVnYXRpdmUgb3IgemVybyBleHBvbmVudC4gICovCisgICAgICAgIERPVUJMRSBwb3cyX2k7IC8qID0gcG93MltpXSAqLworICAgICAgICBET1VCTEUgcG93aF9pOyAvKiA9IHBvd2hbaV0gKi8KKworICAgICAgICAvKiBJbnZhcmlhbnRzOiBwb3cyX2kgPSAyXjJeaSwgcG93aF9pID0gMl4tMl5pLAorICAgICAgICAgICB4ICogMl5leHBvbmVudCA9IGFyZ3VtZW50LCB4IDwgMS4wLiAgKi8KKyAgICAgICAgZm9yIChpID0gMCwgcG93Ml9pID0gTF8oMi4wKSwgcG93aF9pID0gTF8oMC41KTsKKyAgICAgICAgICAgICA7CisgICAgICAgICAgICAgaSsrLCBwb3cyX2kgPSBwb3cyX2kgKiBwb3cyX2ksIHBvd2hfaSA9IHBvd2hfaSAqIHBvd2hfaSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoeCA8IHBvd2hfaSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGV4cG9uZW50IC09ICgxIDw8IGkpOworICAgICAgICAgICAgICAgIHggKj0gcG93Ml9pOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBwb3cyW2ldID0gcG93Ml9pOworICAgICAgICAgICAgcG93aFtpXSA9IHBvd2hfaTsKKyAgICAgICAgICB9CisgICAgICAgIC8qIEhlcmUgMl4tMl5pIDw9IHggPCAxLjAuICAqLworICAgICAgfQorCisgICAgLyogSW52YXJpYW50czogeCAqIDJeZXhwb25lbnQgPSBhcmd1bWVudCwgYW5kIDJeLTJeaSA8PSB4IDwgMS4wLiAgKi8KKyAgICB3aGlsZSAoaSA+IDApCisgICAgICB7CisgICAgICAgIGktLTsKKyAgICAgICAgaWYgKHggPCBwb3doW2ldKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGV4cG9uZW50IC09ICgxIDw8IGkpOworICAgICAgICAgICAgeCAqPSBwb3cyW2ldOworICAgICAgICAgIH0KKyAgICAgIH0KKyAgICAvKiBIZXJlIDAuNSA8PSB4IDwgMS4wLiAgKi8KKyAgfQorCisgIGlmIChzaWduIDwgMCkKKyAgICB4ID0gLSB4OworCisgIEVORF9ST1VORElORyAoKTsKKworICAqZXhwcHRyID0gZXhwb25lbnQ7CisgIHJldHVybiB4OworfQpkaWZmIC0tZ2l0IGEvbGliL2ZyZXhwbC5jIGIvbGliL2ZyZXhwbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NGNlZWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZnJleHBsLmMKQEAgLTAsMCArMSwzNSBAQAorLyogU3BsaXQgYSAnbG9uZyBkb3VibGUnIGludG8gZnJhY3Rpb24gYW5kIG1hbnRpc3NhLgorICAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2lmIEhBVkVfU0FNRV9MT05HX0RPVUJMRV9BU19ET1VCTEUKKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjIGluY2x1ZGUgPG1hdGguaD4KKworbG9uZyBkb3VibGUKK2ZyZXhwbCAobG9uZyBkb3VibGUgeCwgaW50ICpleHBwdHIpCit7CisgIHJldHVybiBmcmV4cCAoeCwgZXhwcHRyKTsKK30KKworI2Vsc2UKKworIyBkZWZpbmUgVVNFX0xPTkdfRE9VQkxFCisjIGluY2x1ZGUgImZyZXhwLmMiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2ZzZXRlcnIuYyBiL2xpYi9mc2V0ZXJyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI3M2E0NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9mc2V0ZXJyLmMKQEAgLTAsMCArMSw3OSBAQAorLyogU2V0IHRoZSBlcnJvciBpbmRpY2F0b3Igb2YgYSBzdHJlYW0uCisgICBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlICJmc2V0ZXJyLmgiCisKKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAic3RkaW8taW1wbC5oIgorCit2b2lkCitmc2V0ZXJyIChGSUxFICpmcCkKK3sKKyAgLyogTW9zdCBzeXN0ZW1zIHByb3ZpZGUgRklMRSBhcyBhIHN0cnVjdCBhbmQgdGhlIG5lY2Vzc2FyeSBiaXRtYXNrIGluCisgICAgIDxzdGRpby5oPiwgYmVjYXVzZSB0aGV5IG5lZWQgaXQgZm9yIGltcGxlbWVudGluZyBnZXRjKCkgYW5kIHB1dGMoKSBhcworICAgICBmYXN0IG1hY3Jvcy4gICovCisjaWYgZGVmaW5lZCBfSU9fZnRyeWxvY2tmaWxlIHx8IF9fR05VX0xJQlJBUllfXyA9PSAxIC8qIEdOVSBsaWJjLCBCZU9TLCBIYWlrdSwgTGludXggbGliYzUgKi8KKyAgZnAtPl9mbGFncyB8PSBfSU9fRVJSX1NFRU47CisjZWxpZiBkZWZpbmVkIF9fc2ZlcnJvciB8fCBkZWZpbmVkIF9fRHJhZ29uRmx5X18gLyogRnJlZUJTRCwgTmV0QlNELCBPcGVuQlNELCBEcmFnb25GbHksIE1hYyBPUyBYLCBDeWd3aW4gKi8KKyAgZnBfLT5fZmxhZ3MgfD0gX19TRVJSOworI2VsaWYgZGVmaW5lZCBfX0VNWF9fICAgICAgICAgICAgICAgLyogZW14K2djYyAqLworICBmcC0+X2ZsYWdzIHw9IF9JT0VSUjsKKyNlbGlmIGRlZmluZWQgX19taW5peCAgICAgICAgICAgICAgIC8qIE1pbml4ICovCisgIGZwLT5fZmxhZ3MgfD0gX0lPRVJSOworI2VsaWYgZGVmaW5lZCBfSU9FUlIgICAgICAgICAgICAgICAgLyogQUlYLCBIUC1VWCwgSVJJWCwgT1NGLzEsIFNvbGFyaXMsIE9wZW5TZXJ2ZXIsIG1pbmd3LCBOb25TdG9wIEtlcm5lbCAqLworICBmcF8tPl9mbGFnIHw9IF9JT0VSUjsKKyNlbGlmIGRlZmluZWQgX19VQ0xJQkNfXyAgICAgICAgICAgIC8qIHVDbGliYyAqLworICBmcC0+X19tb2RlZmxhZ3MgfD0gX19GTEFHX0VSUk9SOworI2VsaWYgZGVmaW5lZCBfX1FOWF9fICAgICAgICAgICAgICAgLyogUU5YICovCisgIGZwLT5fTW9kZSB8PSAweDIwMCAvKiBfTUVSUiAqLzsKKyNlbGlmIGRlZmluZWQgX19NSU5UX18gICAgICAgICAgICAgIC8qIEF0YXJpIEZyZWVNaU5UICovCisgIGZwLT5fX2Vycm9yID0gMTsKKyNlbGlmIGRlZmluZWQgRVBMQU45ICAgICAgICAgICAgICAgIC8qIFBsYW45ICovCisgIGlmIChmcC0+c3RhdGUgIT0gMCAvKiBDTE9TRUQgKi8pCisgICAgZnAtPnN0YXRlID0gNSAvKiBFUlIgKi87CisjZWxpZiAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1bmtub3duICAqLworICAvKiBQb3J0YWJsZSBmYWxsYmFjaywgYmFzZWQgb24gYW4gaWRlYSBieSBSaWNoIEZlbGtlci4KKyAgICAgV293ISA2IHN5c3RlbSBjYWxscyBmb3Igc29tZXRoaW5nIHRoYXQgaXMganVzdCBhIGJpdCBvcGVyYXRpb24hCisgICAgIE5vdCBhY3RpdmF0ZWQgb24gYW55IHN5c3RlbSwgYmVjYXVzZSB0aGVyZSBpcyBubyB3YXkgdG8gcmVwYWlyIEZQIHdoZW4KKyAgICAgdGhlIHNlcXVlbmNlIG9mIHN5c3RlbSBjYWxscyBmYWlscywgYW5kIGxpYnJhcnkgY29kZSBzaG91bGQgbm90IGNhbGwKKyAgICAgYWJvcnQoKS4gICovCisgIGludCBzYXZlZF9lcnJubzsKKyAgaW50IGZkOworICBpbnQgZmQyOworCisgIHNhdmVkX2Vycm5vID0gZXJybm87CisgIGZmbHVzaCAoZnApOworICBmZCA9IGZpbGVubyAoZnApOworICBmZDIgPSBkdXAgKGZkKTsKKyAgaWYgKGZkMiA+PSAwKQorICAgIHsKKyAgICAgIGNsb3NlIChmZCk7CisgICAgICBmcHV0YyAoJ1wwJywgZnApOyAvKiBUaGlzIHNob3VsZCBzZXQgdGhlIGVycm9yIGluZGljYXRvci4gICovCisgICAgICBmZmx1c2ggKGZwKTsgICAgICAvKiBPciB0aGlzLiAgKi8KKyAgICAgIGlmIChkdXAyIChmZDIsIGZkKSA8IDApCisgICAgICAgIC8qIFdoZWUuLi4gd2UgYm90Y2hlZCB0aGUgc3RyZWFtIGFuZCBub3cgY2Fubm90IHJlc3RvcmUgaXQhICAqLworICAgICAgICBhYm9ydCAoKTsKKyAgICAgIGNsb3NlIChmZDIpOworICAgIH0KKyAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyNlbHNlCisgI2Vycm9yICJQbGVhc2UgcG9ydCBnbnVsaWIgZnNldGVyci5jIHRvIHlvdXIgcGxhdGZvcm0hIExvb2sgYXQgdGhlIGRlZmluaXRpb25zIG9mIGZlcnJvciBhbmQgY2xlYXJlcnIgb24geW91ciBzeXN0ZW0sIHRoZW4gcmVwb3J0IHRoaXMgdG8gYnVnLWdudWxpYi4iCisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2xpYi9mc2V0ZXJyLmggYi9saWIvZnNldGVyci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YTFhZmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZnNldGVyci5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qIFNldCB0aGUgZXJyb3IgaW5kaWNhdG9yIG9mIGEgc3RyZWFtLgorICAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX0ZTRVRFUlJfSAorI2RlZmluZSBfRlNFVEVSUl9ICisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisvKiBTZXQgdGhlIGVycm9yIGluZGljYXRvciBvZiB0aGUgc3RyZWFtIEZQLgorICAgVGhlICJlcnJvciBpbmRpY2F0b3IiIGlzIHNldCB3aGVuIGFuIEkvTyBvcGVyYXRpb24gb24gdGhlIHN0cmVhbSBmYWlscywgYW5kCisgICBpcyBjbGVhcmVkICh0b2dldGhlciB3aXRoIHRoZSAiZW5kLW9mLWZpbGUiIGluZGljYXRvcikgYnkgY2xlYXJlcnIgKEZQKS4gICovCisKKyNpZiBIQVZFX19fRlNFVEVSUiAvKiBtdXNsIGxpYmMgKi8KKworIyBpbmNsdWRlIDxzdGRpb19leHQuaD4KKyMgZGVmaW5lIGZzZXRlcnIoZnApIF9fZnNldGVyciAoZnApCisKKyNlbHNlCisKKyMgaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworIyBlbmRpZgorCitleHRlcm4gdm9pZCBmc2V0ZXJyIChGSUxFICpmcCk7CisKKyMgaWZkZWYgX19jcGx1c3BsdXMKK30KKyMgZW5kaWYKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfRlNFVEVSUl9IICovCmRpZmYgLS1naXQgYS9saWIvZnN0YXQuYyBiL2xpYi9mc3RhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MThjYzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZnN0YXQuYwpAQCAtMCwwICsxLDg4IEBACisvKiBmc3RhdCgpIHJlcGxhY2VtZW50LgorICAgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIElmIHRoZSB1c2VyJ3MgY29uZmlnLmggaGFwcGVucyB0byBpbmNsdWRlIDxzeXMvc3RhdC5oPiwgbGV0IGl0IGluY2x1ZGUgb25seQorICAgdGhlIHN5c3RlbSdzIDxzeXMvc3RhdC5oPiBoZXJlLCBzbyB0aGF0IG9yaWdfZnN0YXQgZG9lc24ndCByZWN1cnNlIHRvCisgICBycGxfZnN0YXQuICAqLworI2RlZmluZSBfX25lZWRfc3lzdGVtX3N5c19zdGF0X2gKKyNpbmNsdWRlIDxjb25maWcuaD4KKworLyogR2V0IHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uIG9mIGZzdGF0LiAgSXQgbWlnaHQgYmUgZGVmaW5lZCBhcyBhIG1hY3JvLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2lmIF9HTF9XSU5ET1dTXzY0X0JJVF9TVF9TSVpFCisjIHVuZGVmIHN0YXQgLyogYXZvaWQgd2FybmluZyBvbiBtaW5ndzY0IHdpdGggX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgKi8KKyMgZGVmaW5lIHN0YXQgX3N0YXRpNjQKKyMgdW5kZWYgZnN0YXQgLyogYXZvaWQgd2FybmluZyBvbiBtaW5ndzY0IHdpdGggX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgKi8KKyMgZGVmaW5lIGZzdGF0IF9mc3RhdGk2NAorI2VuZGlmCisjdW5kZWYgX19uZWVkX3N5c3RlbV9zeXNfc3RhdF9oCisKK3N0YXRpYyBpbnQKK29yaWdfZnN0YXQgKGludCBmZCwgc3RydWN0IHN0YXQgKmJ1ZikKK3sKKyAgcmV0dXJuIGZzdGF0IChmZCwgYnVmKTsKK30KKworLyogU3BlY2lmaWNhdGlvbi4gICovCisvKiBXcml0ZSAic3lzL3N0YXQuaCIgaGVyZSwgbm90IDxzeXMvc3RhdC5oPiwgb3RoZXJ3aXNlIE9TRi8xIDUuMSBEVEsgY2MKKyAgIGVsaW1pbmF0ZXMgdGhpcyBpbmNsdWRlIGJlY2F1c2Ugb2YgdGhlIHByZWxpbWluYXJ5ICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICAgYWJvdmUuICAqLworI2luY2x1ZGUgInN5cy9zdGF0LmgiCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaWYgSEFWRV9NU1ZDX0lOVkFMSURfUEFSQU1FVEVSX0hBTkRMRVIKKyMgaW5jbHVkZSAibXN2Yy1pbnZhbC5oIgorI2VuZGlmCisKKyNpZiBIQVZFX01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUgorc3RhdGljIGludAorZnN0YXRfbm90aHJvdyAoaW50IGZkLCBzdHJ1Y3Qgc3RhdCAqYnVmKQoreworICBpbnQgcmVzdWx0OworCisgIFRSWV9NU1ZDX0lOVkFMCisgICAgeworICAgICAgcmVzdWx0ID0gb3JpZ19mc3RhdCAoZmQsIGJ1Zik7CisgICAgfQorICBDQVRDSF9NU1ZDX0lOVkFMCisgICAgeworICAgICAgcmVzdWx0ID0gLTE7CisgICAgICBlcnJubyA9IEVCQURGOworICAgIH0KKyAgRE9ORV9NU1ZDX0lOVkFMOworCisgIHJldHVybiByZXN1bHQ7Cit9CisjZWxzZQorIyBkZWZpbmUgZnN0YXRfbm90aHJvdyBvcmlnX2ZzdGF0CisjZW5kaWYKKworaW50CitycGxfZnN0YXQgKGludCBmZCwgc3RydWN0IHN0YXQgKmJ1ZikKK3sKKyNpZiBSRVBMQUNFX0ZDSERJUiAmJiBSRVBMQUNFX09QRU5fRElSRUNUT1JZCisgIC8qIEhhbmRsZSB0aGUgY2FzZSB3aGVuIHJwbF9vcGVuKCkgdXNlZCBhIGR1bW15IGZpbGUgZGVzY3JpcHRvciB0byB3b3JrCisgICAgIGFyb3VuZCBhbiBvcGVuKCkgdGhhdCBjYW4ndCBub3JtYWxseSB2aXNpdCBkaXJlY3Rvcmllcy4gICovCisgIGNvbnN0IGNoYXIgKm5hbWUgPSBfZ2xfZGlyZWN0b3J5X25hbWUgKGZkKTsKKyAgaWYgKG5hbWUgIT0gTlVMTCkKKyAgICByZXR1cm4gc3RhdCAobmFtZSwgYnVmKTsKKyNlbmRpZgorCisgIHJldHVybiBmc3RhdF9ub3Rocm93IChmZCwgYnVmKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9nZXQtZXJybm8uYyBiL2xpYi9nZXQtZXJybm8uYwppbmRleCA4ZThlZjU4Li5iNzdlY2MyIDEwMDY0NAotLS0gYS9saWIvZ2V0LWVycm5vLmMKKysrIGIvbGliL2dldC1lcnJuby5jCkBAIC0xLDExICsxLDExIEBACiAvKiBnZXQtZXJybm8uYyAtIGdldCBhbmQgc2V0IGVycm5vLgogCi0gICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDYsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpAQCAtMTMsMTkgKzEzLDE2IEBACiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogLyogV3JpdHRlbiBieSBQYXVsIEVnZ2VydC4gICovCiAKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGNvbmZpZy5oPgogCiAjaW5jbHVkZSAiZ2V0LWVycm5vLmgiCiAKKyNpbmNsdWRlIDxlcnJuby5oPgorCiAvKiBHZXQgYW5kIHNldCBlcnJuby4gIEEgc291cmNlIGZpbGUgdGhhdCBuZWVkcyB0byBzZXQgb3IgZ2V0IGVycm5vLAogICAgYnV0IGRvZXNuJ3QgbmVlZCB0byB0ZXN0IGZvciBzcGVjaWZpYyBlcnJubyB2YWx1ZXMsIGNhbiB1c2UgdGhlc2UKICAgIGZ1bmN0aW9ucyB0byBhdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9uLiAgRm9yIGV4YW1wbGUsIGEgZmlsZSB0aGF0CmRpZmYgLS1naXQgYS9saWIvZ2V0LWVycm5vLmggYi9saWIvZ2V0LWVycm5vLmgKaW5kZXggZDM5YThkZC4uOTlhYjUyZiAxMDA2NDQKLS0tIGEvbGliL2dldC1lcnJuby5oCisrKyBiL2xpYi9nZXQtZXJybm8uaApAQCAtMSwxMSArMSwxMSBAQAogLyogZ2V0LWVycm5vLmggLSBnZXQgYW5kIHNldCBlcnJuby4KIAotICAgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKQEAgLTEzLDggKzEzLDcgQEAKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiBleHRlcm4gaW50IGdldF9lcnJubyAodm9pZCk7CiBleHRlcm4gdm9pZCBzZXRfZXJybm8gKGludCk7CmRpZmYgLS1naXQgYS9saWIvZ2V0ZGVsaW0uYyBiL2xpYi9nZXRkZWxpbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3YWYwYTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2V0ZGVsaW0uYwpAQCAtMCwwICsxLDEzNSBAQAorLyogZ2V0ZGVsaW0uYyAtLS0gSW1wbGVtZW50YXRpb24gb2YgcmVwbGFjZW1lbnQgZ2V0ZGVsaW0gZnVuY3Rpb24uCisgICBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTYtMTk5OCwgMjAwMSwgMjAwMywgMjAwNS0yMDEyIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQKKyAgIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBQb3J0ZWQgZnJvbSBnbGliYyBieSBTaW1vbiBKb3NlZnNzb24uICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworLyogRG9uJ3QgdXNlIF9fYXR0cmlidXRlX18gX19ub25udWxsX18gaW4gdGhpcyBjb21waWxhdGlvbiB1bml0LiAgT3RoZXJ3aXNlIGdjYworICAgb3B0aW1pemVzIGF3YXkgdGhlIGxpbmVwdHIgPT0gTlVMTCB8fCBuID09IE5VTEwgfHwgZnAgPT0gTlVMTCB0ZXN0cyBiZWxvdy4gICovCisjZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmbmRlZiBTU0laRV9NQVgKKyMgZGVmaW5lIFNTSVpFX01BWCAoKHNzaXplX3QpIChTSVpFX01BWCAvIDIpKQorI2VuZGlmCisKKyNpZiBVU0VfVU5MT0NLRURfSU8KKyMgaW5jbHVkZSAidW5sb2NrZWQtaW8uaCIKKyMgZGVmaW5lIGdldGNfbWF5YmVfdW5sb2NrZWQoZnApICAgICAgICBnZXRjKGZwKQorI2VsaWYgIUhBVkVfRkxPQ0tGSUxFIHx8ICFIQVZFX0ZVTkxPQ0tGSUxFIHx8ICFIQVZFX0RFQ0xfR0VUQ19VTkxPQ0tFRAorIyB1bmRlZiBmbG9ja2ZpbGUKKyMgdW5kZWYgZnVubG9ja2ZpbGUKKyMgZGVmaW5lIGZsb2NrZmlsZSh4KSAoKHZvaWQpIDApCisjIGRlZmluZSBmdW5sb2NrZmlsZSh4KSAoKHZvaWQpIDApCisjIGRlZmluZSBnZXRjX21heWJlX3VubG9ja2VkKGZwKSAgICAgICAgZ2V0YyhmcCkKKyNlbHNlCisjIGRlZmluZSBnZXRjX21heWJlX3VubG9ja2VkKGZwKSAgICAgICAgZ2V0Y191bmxvY2tlZChmcCkKKyNlbmRpZgorCisvKiBSZWFkIHVwIHRvIChhbmQgaW5jbHVkaW5nKSBhIERFTElNSVRFUiBmcm9tIEZQIGludG8gKkxJTkVQVFIgKGFuZAorICAgTlVMLXRlcm1pbmF0ZSBpdCkuICAqTElORVBUUiBpcyBhIHBvaW50ZXIgcmV0dXJuZWQgZnJvbSBtYWxsb2MgKG9yCisgICBOVUxMKSwgcG9pbnRpbmcgdG8gKk4gY2hhcmFjdGVycyBvZiBzcGFjZS4gIEl0IGlzIHJlYWxsb2MnZWQgYXMKKyAgIG5lY2Vzc2FyeS4gIFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgKG5vdCBpbmNsdWRpbmcKKyAgIHRoZSBudWxsIHRlcm1pbmF0b3IpLCBvciAtMSBvbiBlcnJvciBvciBFT0YuICAqLworCitzc2l6ZV90CitnZXRkZWxpbSAoY2hhciAqKmxpbmVwdHIsIHNpemVfdCAqbiwgaW50IGRlbGltaXRlciwgRklMRSAqZnApCit7CisgIHNzaXplX3QgcmVzdWx0OworICBzaXplX3QgY3VyX2xlbiA9IDA7CisKKyAgaWYgKGxpbmVwdHIgPT0gTlVMTCB8fCBuID09IE5VTEwgfHwgZnAgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgZmxvY2tmaWxlIChmcCk7CisKKyAgaWYgKCpsaW5lcHRyID09IE5VTEwgfHwgKm4gPT0gMCkKKyAgICB7CisgICAgICBjaGFyICpuZXdfbGluZXB0cjsKKyAgICAgICpuID0gMTIwOworICAgICAgbmV3X2xpbmVwdHIgPSAoY2hhciAqKSByZWFsbG9jICgqbGluZXB0ciwgKm4pOworICAgICAgaWYgKG5ld19saW5lcHRyID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICByZXN1bHQgPSAtMTsKKyAgICAgICAgICBnb3RvIHVubG9ja19yZXR1cm47CisgICAgICAgIH0KKyAgICAgICpsaW5lcHRyID0gbmV3X2xpbmVwdHI7CisgICAgfQorCisgIGZvciAoOzspCisgICAgeworICAgICAgaW50IGk7CisKKyAgICAgIGkgPSBnZXRjX21heWJlX3VubG9ja2VkIChmcCk7CisgICAgICBpZiAoaSA9PSBFT0YpCisgICAgICAgIHsKKyAgICAgICAgICByZXN1bHQgPSAtMTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAvKiBNYWtlIGVub3VnaCBzcGFjZSBmb3IgbGVuKzEgKGZvciBmaW5hbCBOVUwpIGJ5dGVzLiAgKi8KKyAgICAgIGlmIChjdXJfbGVuICsgMSA+PSAqbikKKyAgICAgICAgeworICAgICAgICAgIHNpemVfdCBuZWVkZWRfbWF4ID0KKyAgICAgICAgICAgIFNTSVpFX01BWCA8IFNJWkVfTUFYID8gKHNpemVfdCkgU1NJWkVfTUFYICsgMSA6IFNJWkVfTUFYOworICAgICAgICAgIHNpemVfdCBuZWVkZWQgPSAyICogKm4gKyAxOyAgIC8qIEJlIGdlbmVyb3VzLiAqLworICAgICAgICAgIGNoYXIgKm5ld19saW5lcHRyOworCisgICAgICAgICAgaWYgKG5lZWRlZF9tYXggPCBuZWVkZWQpCisgICAgICAgICAgICBuZWVkZWQgPSBuZWVkZWRfbWF4OworICAgICAgICAgIGlmIChjdXJfbGVuICsgMSA+PSBuZWVkZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHJlc3VsdCA9IC0xOworICAgICAgICAgICAgICBlcnJubyA9IEVPVkVSRkxPVzsKKyAgICAgICAgICAgICAgZ290byB1bmxvY2tfcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgbmV3X2xpbmVwdHIgPSAoY2hhciAqKSByZWFsbG9jICgqbGluZXB0ciwgbmVlZGVkKTsKKyAgICAgICAgICBpZiAobmV3X2xpbmVwdHIgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmVzdWx0ID0gLTE7CisgICAgICAgICAgICAgIGdvdG8gdW5sb2NrX3JldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICpsaW5lcHRyID0gbmV3X2xpbmVwdHI7CisgICAgICAgICAgKm4gPSBuZWVkZWQ7CisgICAgICAgIH0KKworICAgICAgKCpsaW5lcHRyKVtjdXJfbGVuXSA9IGk7CisgICAgICBjdXJfbGVuKys7CisKKyAgICAgIGlmIChpID09IGRlbGltaXRlcikKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAoKmxpbmVwdHIpW2N1cl9sZW5dID0gJ1wwJzsKKyAgcmVzdWx0ID0gY3VyX2xlbiA/IGN1cl9sZW4gOiByZXN1bHQ7CisKKyB1bmxvY2tfcmV0dXJuOgorICBmdW5sb2NrZmlsZSAoZnApOyAvKiBkb2Vzbid0IHNldCBlcnJubyAqLworCisgIHJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9saWIvZ2V0ZHRhYmxlc2l6ZS5jIGIvbGliL2dldGR0YWJsZXNpemUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTUyNGZkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2dldGR0YWJsZXNpemUuYwpAQCAtMCwwICsxLDg2IEBACisvKiBnZXRkdGFibGVzaXplKCkgZnVuY3Rpb24gZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IGhhdmUgaXQuCisgICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LCAyMDA4LgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaWYgKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgIm1zdmMtaW52YWwuaCIKKworI2lmIEhBVkVfTVNWQ19JTlZBTElEX1BBUkFNRVRFUl9IQU5ETEVSCitzdGF0aWMgaW50Citfc2V0bWF4c3RkaW9fbm90aHJvdyAoaW50IG5ld21heCkKK3sKKyAgaW50IHJlc3VsdDsKKworICBUUllfTVNWQ19JTlZBTAorICAgIHsKKyAgICAgIHJlc3VsdCA9IF9zZXRtYXhzdGRpbyAobmV3bWF4KTsKKyAgICB9CisgIENBVENIX01TVkNfSU5WQUwKKyAgICB7CisgICAgICByZXN1bHQgPSAtMTsKKyAgICB9CisgIERPTkVfTVNWQ19JTlZBTDsKKworICByZXR1cm4gcmVzdWx0OworfQorIyBkZWZpbmUgX3NldG1heHN0ZGlvIF9zZXRtYXhzdGRpb19ub3Rocm93CisjZW5kaWYKKworLyogQ2FjaGUgZm9yIHRoZSBwcmV2aW91cyBnZXRkdGFibGVzaXplICgpIHJlc3VsdC4gICovCitzdGF0aWMgaW50IGR0YWJsZXNpemU7CisKK2ludAorZ2V0ZHRhYmxlc2l6ZSAodm9pZCkKK3sKKyAgaWYgKGR0YWJsZXNpemUgPT0gMCkKKyAgICB7CisgICAgICAvKiBXZSBhcmUgbG9va2luZyBmb3IgdGhlIG51bWJlciBOIHN1Y2ggdGhhdCB0aGUgdmFsaWQgZmlsZSBkZXNjcmlwdG9ycworICAgICAgICAgYXJlIDAuLk4tMS4gIEl0IGNhbiBiZSBvYnRhaW5lZCB0aHJvdWdoIGEgbG9vcCBhcyBmb2xsb3dzOgorICAgICAgICAgICB7CisgICAgICAgICAgICAgaW50IGZkOworICAgICAgICAgICAgIGZvciAoZmQgPSAzOyBmZCA8IDY1NTM2OyBmZCsrKQorICAgICAgICAgICAgICAgaWYgKGR1cDIgKDAsIGZkKSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgcmV0dXJuIGZkOworICAgICAgICAgICB9CisgICAgICAgICBPbiBXaW5kb3dzIFhQLCB0aGUgcmVzdWx0IGlzIDIwNDguCisgICAgICAgICBUaGUgZHJhd2JhY2sgb2YgdGhpcyBsb29wIGlzIHRoYXQgaXQgYWxsb2NhdGVzIG1lbW9yeSBmb3IgYSBsaWJjCisgICAgICAgICBpbnRlcm5hbCBhcnJheSB0aGF0IGlzIG5ldmVyIGZyZWVkLgorCisgICAgICAgICBUaGUgbnVtYmVyIE4gY2FuIGFsc28gYmUgb2J0YWluZWQgYXMgdGhlIHVwcGVyIGJvdW5kIGZvcgorICAgICAgICAgX2dldG1heHN0ZGlvICgpLiAgX2dldG1heHN0ZGlvICgpIHJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG9wZW4KKyAgICAgICAgIEZJTEUgb2JqZWN0cy4gIFRoZSBzYW5pdHkgY2hlY2sgaW4gX3NldG1heHN0ZGlvIHJldmVhbHMgdGhlIG1heGltdW0KKyAgICAgICAgIG51bWJlciBvZiBmaWxlIGRlc2NyaXB0b3JzLiAgVGhpcyB0b28gYWxsb2NhdGVzIG1lbW9yeSwgYnV0IGl0IGlzCisgICAgICAgICBmcmVlZCB3aGVuIHdlIGNhbGwgX3NldG1heHN0ZGlvIHdpdGggdGhlIG9yaWdpbmFsIHZhbHVlLiAgKi8KKyAgICAgIGludCBvcmlnX21heF9zdGRpbyA9IF9nZXRtYXhzdGRpbyAoKTsKKyAgICAgIHVuc2lnbmVkIGludCBib3VuZDsKKyAgICAgIGZvciAoYm91bmQgPSAweDEwMDAwOyBfc2V0bWF4c3RkaW8gKGJvdW5kKSA8IDA7IGJvdW5kID0gYm91bmQgLyAyKQorICAgICAgICA7CisgICAgICBfc2V0bWF4c3RkaW8gKG9yaWdfbWF4X3N0ZGlvKTsKKyAgICAgIGR0YWJsZXNpemUgPSBib3VuZDsKKyAgICB9CisgIHJldHVybiBkdGFibGVzaXplOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9nZXRsaW5lLmMgYi9saWIvZ2V0bGluZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MjI3NDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2V0bGluZS5jCkBAIC0wLDAgKzEsMjcgQEAKKy8qIGdldGxpbmUuYyAtLS0gSW1wbGVtZW50YXRpb24gb2YgcmVwbGFjZW1lbnQgZ2V0bGluZSBmdW5jdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMjAwNS0yMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0CisgICB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogV3JpdHRlbiBieSBTaW1vbiBKb3NlZnNzb24uICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKK3NzaXplX3QKK2dldGxpbmUgKGNoYXIgKipsaW5lcHRyLCBzaXplX3QgKm4sIEZJTEUgKnN0cmVhbSkKK3sKKyAgcmV0dXJuIGdldGRlbGltIChsaW5lcHRyLCBuLCAnXG4nLCBzdHJlYW0pOworfQpkaWZmIC0tZ2l0IGEvbGliL2dldG9wdC5jIGIvbGliL2dldG9wdC5jCmluZGV4IDgzYmQ2ZGIuLjQzNDJhMzQgMTAwNjQ0Ci0tLSBhL2xpYi9nZXRvcHQuYworKysgYi9saWIvZ2V0b3B0LmMKQEAgLTEsMjYgKzEsMjUgQEAKIC8qIEdldG9wdCBmb3IgR05VLgotICAgTk9URTogZ2V0b3B0IGlzIG5vdyBwYXJ0IG9mIHRoZSBDIGxpYnJhcnksIHNvIGlmIHlvdSBkb24ndCBrbm93IHdoYXQKKyAgIE5PVEU6IGdldG9wdCBpcyBwYXJ0IG9mIHRoZSBDIGxpYnJhcnksIHNvIGlmIHlvdSBkb24ndCBrbm93IHdoYXQKICAgICJLZWVwIHRoaXMgZmlsZSBuYW1lLXNwYWNlIGNsZWFuIiBtZWFucywgdGFsayB0byBkcmVwcGVyQGdudS5vcmcKICAgIGJlZm9yZSBjaGFuZ2luZyBpdCEKLSAgIENvcHlyaWdodCAoQykgMTk4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5OCw5OSwyMDAwLDIwMDEsMjAwMiwyMDAzLDIwMDQsMjAwNgotCUZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29weXJpZ2h0IChDKSAxOTg3LTE5OTYsIDE5OTgtMjAwNCwgMjAwNiwgMjAwOC0yMDEyIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4KICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgogCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAMCi0jaWZkZWYgSEFWRV9DT05GSUdfSAorI2lmbmRlZiBfTElCQwogIyBpbmNsdWRlIDxjb25maWcuaD4KICNlbmRpZgogCkBAIC0zMSwxMCArMzAsNiBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCi0jaWZkZWYgVk1TCi0jIGluY2x1ZGUgPHVuaXhsaWIuaD4KLSNlbmRpZgotCiAjaWZkZWYgX0xJQkMKICMgaW5jbHVkZSA8bGliaW50bC5oPgogI2Vsc2UKQEAgLTQ2LDQ0ICs0MSw0MSBAQAogIyBpbmNsdWRlIDx3Y2hhci5oPgogI2VuZGlmCiAKLSNpZm5kZWYgYXR0cmlidXRlX2hpZGRlbgotIyBkZWZpbmUgYXR0cmlidXRlX2hpZGRlbgotI2VuZGlmCisvKiBUaGlzIHZlcnNpb24gb2YgJ2dldG9wdCcgYXBwZWFycyB0byB0aGUgY2FsbGVyIGxpa2Ugc3RhbmRhcmQgVW5peCAnZ2V0b3B0JworICAgYnV0IGl0IGJlaGF2ZXMgZGlmZmVyZW50bHkgZm9yIHRoZSB1c2VyLCBzaW5jZSBpdCBhbGxvd3MgdGhlIHVzZXIKKyAgIHRvIGludGVyc3BlcnNlIHRoZSBvcHRpb25zIHdpdGggdGhlIG90aGVyIGFyZ3VtZW50cy4KIAotLyogVW5saWtlIHN0YW5kYXJkIFVuaXggYGdldG9wdCcsIGZ1bmN0aW9ucyBsaWtlIGBnZXRvcHRfbG9uZycKLSAgIGxldCB0aGUgdXNlciBpbnRlcnNwZXJzZSB0aGUgb3B0aW9ucyB3aXRoIHRoZSBvdGhlciBhcmd1bWVudHMuCi0KLSAgIEFzIGBnZXRvcHRfbG9uZycgd29ya3MsIGl0IHBlcm11dGVzIHRoZSBlbGVtZW50cyBvZiBBUkdWIHNvIHRoYXQsCisgICBBcyAnZ2V0b3B0X2xvbmcnIHdvcmtzLCBpdCBwZXJtdXRlcyB0aGUgZWxlbWVudHMgb2YgQVJHViBzbyB0aGF0LAogICAgd2hlbiBpdCBpcyBkb25lLCBhbGwgdGhlIG9wdGlvbnMgcHJlY2VkZSBldmVyeXRoaW5nIGVsc2UuICBUaHVzCiAgICBhbGwgYXBwbGljYXRpb24gcHJvZ3JhbXMgYXJlIGV4dGVuZGVkIHRvIGhhbmRsZSBmbGV4aWJsZSBhcmd1bWVudCBvcmRlci4KIAotICAgVXNpbmcgYGdldG9wdCcgb3Igc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUE9TSVhMWV9DT1JSRUNUCisgICBVc2luZyAnZ2V0b3B0JyBvciBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQT1NJWExZX0NPUlJFQ1QKICAgIGRpc2FibGVzIHBlcm11dGF0aW9uLgotICAgVGhlbiB0aGUgYXBwbGljYXRpb24ncyBiZWhhdmlvciBpcyBjb21wbGV0ZWx5IHN0YW5kYXJkLgorICAgVGhlbiB0aGUgYmVoYXZpb3IgaXMgY29tcGxldGVseSBzdGFuZGFyZC4KIAogICAgR05VIGFwcGxpY2F0aW9uIHByb2dyYW1zIGNhbiB1c2UgYSB0aGlyZCBhbHRlcm5hdGl2ZSBtb2RlIGluIHdoaWNoCiAgICB0aGV5IGNhbiBkaXN0aW5ndWlzaCB0aGUgcmVsYXRpdmUgb3JkZXIgb2Ygb3B0aW9ucyBhbmQgb3RoZXIgYXJndW1lbnRzLiAgKi8KIAogI2luY2x1ZGUgImdldG9wdF9pbnQuaCIKIAotLyogRm9yIGNvbW11bmljYXRpb24gZnJvbSBgZ2V0b3B0JyB0byB0aGUgY2FsbGVyLgotICAgV2hlbiBgZ2V0b3B0JyBmaW5kcyBhbiBvcHRpb24gdGhhdCB0YWtlcyBhbiBhcmd1bWVudCwKKy8qIEZvciBjb21tdW5pY2F0aW9uIGZyb20gJ2dldG9wdCcgdG8gdGhlIGNhbGxlci4KKyAgIFdoZW4gJ2dldG9wdCcgZmluZHMgYW4gb3B0aW9uIHRoYXQgdGFrZXMgYW4gYXJndW1lbnQsCiAgICB0aGUgYXJndW1lbnQgdmFsdWUgaXMgcmV0dXJuZWQgaGVyZS4KLSAgIEFsc28sIHdoZW4gYG9yZGVyaW5nJyBpcyBSRVRVUk5fSU5fT1JERVIsCisgICBBbHNvLCB3aGVuICdvcmRlcmluZycgaXMgUkVUVVJOX0lOX09SREVSLAogICAgZWFjaCBub24tb3B0aW9uIEFSR1YtZWxlbWVudCBpcyByZXR1cm5lZCBoZXJlLiAgKi8KIAogY2hhciAqb3B0YXJnOwogCiAvKiBJbmRleCBpbiBBUkdWIG9mIHRoZSBuZXh0IGVsZW1lbnQgdG8gYmUgc2Nhbm5lZC4KICAgIFRoaXMgaXMgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiB0byBhbmQgZnJvbSB0aGUgY2FsbGVyCi0gICBhbmQgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiBzdWNjZXNzaXZlIGNhbGxzIHRvIGBnZXRvcHQnLgorICAgYW5kIGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gc3VjY2Vzc2l2ZSBjYWxscyB0byAnZ2V0b3B0Jy4KIAotICAgT24gZW50cnkgdG8gYGdldG9wdCcsIHplcm8gbWVhbnMgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbDsgaW5pdGlhbGl6ZS4KKyAgIE9uIGVudHJ5IHRvICdnZXRvcHQnLCB6ZXJvIG1lYW5zIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGw7IGluaXRpYWxpemUuCiAKLSAgIFdoZW4gYGdldG9wdCcgcmV0dXJucyAtMSwgdGhpcyBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG9mIHRoZQorICAgV2hlbiAnZ2V0b3B0JyByZXR1cm5zIC0xLCB0aGlzIGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgb2YgdGhlCiAgICBub24tb3B0aW9uIGVsZW1lbnRzIHRoYXQgdGhlIGNhbGxlciBzaG91bGQgaXRzZWxmIHNjYW4uCiAKLSAgIE90aGVyd2lzZSwgYG9wdGluZCcgY29tbXVuaWNhdGVzIGZyb20gb25lIGNhbGwgdG8gdGhlIG5leHQKKyAgIE90aGVyd2lzZSwgJ29wdGluZCcgY29tbXVuaWNhdGVzIGZyb20gb25lIGNhbGwgdG8gdGhlIG5leHQKICAgIGhvdyBtdWNoIG9mIEFSR1YgaGFzIGJlZW4gc2Nhbm5lZCBzbyBmYXIuICAqLwogCiAvKiAxMDAzLjIgc2F5cyB0aGlzIG11c3QgYmUgMSBiZWZvcmUgYW55IGNhbGwuICAqLwpAQCAtMTI2LDE4ICsxMTgsMTggQEAKIAogIyBpZmRlZiBVU0VfTk9OT1BUSU9OX0ZMQUdTCiAjICBkZWZpbmUgU1dBUF9GTEFHUyhjaDEsIGNoMikgXAotICBpZiAoZC0+X19ub25vcHRpb25fZmxhZ3NfbGVuID4gMCkJCQkJCSAgICAgIFwKLSAgICB7CQkJCQkJCQkJICAgICAgXAotICAgICAgY2hhciBfX3RtcCA9IF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFnc1tjaDFdOwkJCSAgICAgIFwKLSAgICAgIF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFnc1tjaDFdID0gX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzW2NoMl07CSAgICAgIFwKLSAgICAgIF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFnc1tjaDJdID0gX190bXA7CQkJCSAgICAgIFwKKyAgaWYgKGQtPl9fbm9ub3B0aW9uX2ZsYWdzX2xlbiA+IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGNoYXIgX190bXAgPSBfX2dldG9wdF9ub25vcHRpb25fZmxhZ3NbY2gxXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFnc1tjaDFdID0gX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzW2NoMl07ICAgICAgICAgIFwKKyAgICAgIF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFnc1tjaDJdID0gX190bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9CiAjIGVsc2UKICMgIGRlZmluZSBTV0FQX0ZMQUdTKGNoMSwgY2gyKQogIyBlbmRpZgotI2Vsc2UJLyogIV9MSUJDICovCisjZWxzZSAgIC8qICFfTElCQyAqLwogIyBkZWZpbmUgU1dBUF9GTEFHUyhjaDEsIGNoMikKLSNlbmRpZgkvKiBfTElCQyAqLworI2VuZGlmICAvKiBfTElCQyAqLwogCiAvKiBFeGNoYW5nZSB0d28gYWRqYWNlbnQgc3Vic2VxdWVuY2VzIG9mIEFSR1YuCiAgICBPbmUgc3Vic2VxdWVuY2UgaXMgZWxlbWVudHMgW2ZpcnN0X25vbm9wdCxsYXN0X25vbm9wdCkKQEAgLTE0NSw3ICsxMzcsNyBAQAogICAgVGhlIG90aGVyIGlzIGVsZW1lbnRzIFtsYXN0X25vbm9wdCxvcHRpbmQpLCB3aGljaCBjb250YWlucyBhbGwKICAgIHRoZSBvcHRpb25zIHByb2Nlc3NlZCBzaW5jZSB0aG9zZSBub24tb3B0aW9ucyB3ZXJlIHNraXBwZWQuCiAKLSAgIGBmaXJzdF9ub25vcHQnIGFuZCBgbGFzdF9ub25vcHQnIGFyZSByZWxvY2F0ZWQgc28gdGhhdCB0aGV5IGRlc2NyaWJlCisgICAnZmlyc3Rfbm9ub3B0JyBhbmQgJ2xhc3Rfbm9ub3B0JyBhcmUgcmVsb2NhdGVkIHNvIHRoYXQgdGhleSBkZXNjcmliZQogICAgdGhlIG5ldyBpbmRpY2VzIG9mIHRoZSBub24tb3B0aW9ucyBpbiBBUkdWIGFmdGVyIHRoZXkgYXJlIG1vdmVkLiAgKi8KIAogc3RhdGljIHZvaWQKQEAgLTE2Miw2MyArMTU0LDYzIEBACiAgICAgIGJ1dCBpdCBjb25zaXN0cyBvZiB0d28gcGFydHMgdGhhdCBuZWVkIHRvIGJlIHN3YXBwZWQgbmV4dC4gICovCiAKICNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX05PTk9QVElPTl9GTEFHUwotICAvKiBGaXJzdCBtYWtlIHN1cmUgdGhlIGhhbmRsaW5nIG9mIHRoZSBgX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzJworICAvKiBGaXJzdCBtYWtlIHN1cmUgdGhlIGhhbmRsaW5nIG9mIHRoZSAnX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzJwogICAgICBzdHJpbmcgY2FuIHdvcmsgbm9ybWFsbHkuICBPdXIgdG9wIGFyZ3VtZW50IG11c3QgYmUgaW4gdGhlIHJhbmdlCiAgICAgIG9mIHRoZSBzdHJpbmcuICAqLwogICBpZiAoZC0+X19ub25vcHRpb25fZmxhZ3NfbGVuID4gMCAmJiB0b3AgPj0gZC0+X19ub25vcHRpb25fZmxhZ3NfbWF4X2xlbikKICAgICB7CiAgICAgICAvKiBXZSBtdXN0IGV4dGVuZCB0aGUgYXJyYXkuICBUaGUgdXNlciBwbGF5cyBnYW1lcyB3aXRoIHVzIGFuZAotCSBwcmVzZW50cyBuZXcgYXJndW1lbnRzLiAgKi8KKyAgICAgICAgIHByZXNlbnRzIG5ldyBhcmd1bWVudHMuICAqLwogICAgICAgY2hhciAqbmV3X3N0ciA9IG1hbGxvYyAodG9wICsgMSk7CiAgICAgICBpZiAobmV3X3N0ciA9PSBOVUxMKQotCWQtPl9fbm9ub3B0aW9uX2ZsYWdzX2xlbiA9IGQtPl9fbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4gPSAwOworICAgICAgICBkLT5fX25vbm9wdGlvbl9mbGFnc19sZW4gPSBkLT5fX25vbm9wdGlvbl9mbGFnc19tYXhfbGVuID0gMDsKICAgICAgIGVsc2UKLQl7Ci0JICBtZW1zZXQgKF9fbWVtcGNweSAobmV3X3N0ciwgX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzLAotCQkJICAgICBkLT5fX25vbm9wdGlvbl9mbGFnc19tYXhfbGVuKSwKLQkJICAnXDAnLCB0b3AgKyAxIC0gZC0+X19ub25vcHRpb25fZmxhZ3NfbWF4X2xlbik7Ci0JICBkLT5fX25vbm9wdGlvbl9mbGFnc19tYXhfbGVuID0gdG9wICsgMTsKLQkgIF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFncyA9IG5ld19zdHI7Ci0JfQorICAgICAgICB7CisgICAgICAgICAgbWVtc2V0IChfX21lbXBjcHkgKG5ld19zdHIsIF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC0+X19ub25vcHRpb25fZmxhZ3NfbWF4X2xlbiksCisgICAgICAgICAgICAgICAgICAnXDAnLCB0b3AgKyAxIC0gZC0+X19ub25vcHRpb25fZmxhZ3NfbWF4X2xlbik7CisgICAgICAgICAgZC0+X19ub25vcHRpb25fZmxhZ3NfbWF4X2xlbiA9IHRvcCArIDE7CisgICAgICAgICAgX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzID0gbmV3X3N0cjsKKyAgICAgICAgfQogICAgIH0KICNlbmRpZgogCiAgIHdoaWxlICh0b3AgPiBtaWRkbGUgJiYgbWlkZGxlID4gYm90dG9tKQogICAgIHsKICAgICAgIGlmICh0b3AgLSBtaWRkbGUgPiBtaWRkbGUgLSBib3R0b20pCi0JewotCSAgLyogQm90dG9tIHNlZ21lbnQgaXMgdGhlIHNob3J0IG9uZS4gICovCi0JICBpbnQgbGVuID0gbWlkZGxlIC0gYm90dG9tOwotCSAgcmVnaXN0ZXIgaW50IGk7CisgICAgICAgIHsKKyAgICAgICAgICAvKiBCb3R0b20gc2VnbWVudCBpcyB0aGUgc2hvcnQgb25lLiAgKi8KKyAgICAgICAgICBpbnQgbGVuID0gbWlkZGxlIC0gYm90dG9tOworICAgICAgICAgIHJlZ2lzdGVyIGludCBpOwogCi0JICAvKiBTd2FwIGl0IHdpdGggdGhlIHRvcCBwYXJ0IG9mIHRoZSB0b3Agc2VnbWVudC4gICovCi0JICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0JICAgIHsKLQkgICAgICB0ZW0gPSBhcmd2W2JvdHRvbSArIGldOwotCSAgICAgIGFyZ3ZbYm90dG9tICsgaV0gPSBhcmd2W3RvcCAtIChtaWRkbGUgLSBib3R0b20pICsgaV07Ci0JICAgICAgYXJndlt0b3AgLSAobWlkZGxlIC0gYm90dG9tKSArIGldID0gdGVtOwotCSAgICAgIFNXQVBfRkxBR1MgKGJvdHRvbSArIGksIHRvcCAtIChtaWRkbGUgLSBib3R0b20pICsgaSk7Ci0JICAgIH0KLQkgIC8qIEV4Y2x1ZGUgdGhlIG1vdmVkIGJvdHRvbSBzZWdtZW50IGZyb20gZnVydGhlciBzd2FwcGluZy4gICovCi0JICB0b3AgLT0gbGVuOwotCX0KKyAgICAgICAgICAvKiBTd2FwIGl0IHdpdGggdGhlIHRvcCBwYXJ0IG9mIHRoZSB0b3Agc2VnbWVudC4gICovCisgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB0ZW0gPSBhcmd2W2JvdHRvbSArIGldOworICAgICAgICAgICAgICBhcmd2W2JvdHRvbSArIGldID0gYXJndlt0b3AgLSAobWlkZGxlIC0gYm90dG9tKSArIGldOworICAgICAgICAgICAgICBhcmd2W3RvcCAtIChtaWRkbGUgLSBib3R0b20pICsgaV0gPSB0ZW07CisgICAgICAgICAgICAgIFNXQVBfRkxBR1MgKGJvdHRvbSArIGksIHRvcCAtIChtaWRkbGUgLSBib3R0b20pICsgaSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgLyogRXhjbHVkZSB0aGUgbW92ZWQgYm90dG9tIHNlZ21lbnQgZnJvbSBmdXJ0aGVyIHN3YXBwaW5nLiAgKi8KKyAgICAgICAgICB0b3AgLT0gbGVuOworICAgICAgICB9CiAgICAgICBlbHNlCi0JewotCSAgLyogVG9wIHNlZ21lbnQgaXMgdGhlIHNob3J0IG9uZS4gICovCi0JICBpbnQgbGVuID0gdG9wIC0gbWlkZGxlOwotCSAgcmVnaXN0ZXIgaW50IGk7CisgICAgICAgIHsKKyAgICAgICAgICAvKiBUb3Agc2VnbWVudCBpcyB0aGUgc2hvcnQgb25lLiAgKi8KKyAgICAgICAgICBpbnQgbGVuID0gdG9wIC0gbWlkZGxlOworICAgICAgICAgIHJlZ2lzdGVyIGludCBpOwogCi0JICAvKiBTd2FwIGl0IHdpdGggdGhlIGJvdHRvbSBwYXJ0IG9mIHRoZSBib3R0b20gc2VnbWVudC4gICovCi0JICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0JICAgIHsKLQkgICAgICB0ZW0gPSBhcmd2W2JvdHRvbSArIGldOwotCSAgICAgIGFyZ3ZbYm90dG9tICsgaV0gPSBhcmd2W21pZGRsZSArIGldOwotCSAgICAgIGFyZ3ZbbWlkZGxlICsgaV0gPSB0ZW07Ci0JICAgICAgU1dBUF9GTEFHUyAoYm90dG9tICsgaSwgbWlkZGxlICsgaSk7Ci0JICAgIH0KLQkgIC8qIEV4Y2x1ZGUgdGhlIG1vdmVkIHRvcCBzZWdtZW50IGZyb20gZnVydGhlciBzd2FwcGluZy4gICovCi0JICBib3R0b20gKz0gbGVuOwotCX0KKyAgICAgICAgICAvKiBTd2FwIGl0IHdpdGggdGhlIGJvdHRvbSBwYXJ0IG9mIHRoZSBib3R0b20gc2VnbWVudC4gICovCisgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB0ZW0gPSBhcmd2W2JvdHRvbSArIGldOworICAgICAgICAgICAgICBhcmd2W2JvdHRvbSArIGldID0gYXJndlttaWRkbGUgKyBpXTsKKyAgICAgICAgICAgICAgYXJndlttaWRkbGUgKyBpXSA9IHRlbTsKKyAgICAgICAgICAgICAgU1dBUF9GTEFHUyAoYm90dG9tICsgaSwgbWlkZGxlICsgaSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgLyogRXhjbHVkZSB0aGUgbW92ZWQgdG9wIHNlZ21lbnQgZnJvbSBmdXJ0aGVyIHN3YXBwaW5nLiAgKi8KKyAgICAgICAgICBib3R0b20gKz0gbGVuOworICAgICAgICB9CiAgICAgfQogCiAgIC8qIFVwZGF0ZSByZWNvcmRzIGZvciB0aGUgc2xvdHMgdGhlIG5vbi1vcHRpb25zIG5vdyBvY2N1cHkuICAqLwpAQCAtMjMwLDggKzIyMiw5IEBACiAvKiBJbml0aWFsaXplIHRoZSBpbnRlcm5hbCBkYXRhIHdoZW4gdGhlIGZpcnN0IGNhbGwgaXMgbWFkZS4gICovCiAKIHN0YXRpYyBjb25zdCBjaGFyICoKLV9nZXRvcHRfaW5pdGlhbGl6ZSAoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpvcHRzdHJpbmcsCi0JCSAgICBpbnQgcG9zaXhseV9jb3JyZWN0LCBzdHJ1Y3QgX2dldG9wdF9kYXRhICpkKQorX2dldG9wdF9pbml0aWFsaXplIChpbnQgYXJnYyBfR0xfVU5VU0VELAorICAgICAgICAgICAgICAgICAgICBjaGFyICoqYXJndiBfR0xfVU5VU0VELCBjb25zdCBjaGFyICpvcHRzdHJpbmcsCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfZ2V0b3B0X2RhdGEgKmQsIGludCBwb3NpeGx5X2NvcnJlY3QpCiB7CiAgIC8qIFN0YXJ0IHByb2Nlc3Npbmcgb3B0aW9ucyB3aXRoIEFSR1YtZWxlbWVudCAxIChzaW5jZSBBUkdWLWVsZW1lbnQgMAogICAgICBpcyB0aGUgcHJvZ3JhbSBuYW1lKTsgdGhlIHNlcXVlbmNlIG9mIHByZXZpb3VzbHkgc2tpcHBlZApAQCAtMjY1LDI1ICsyNTgsMjUgQEAKICAgICAgICYmIGFyZ2MgPT0gX19saWJjX2FyZ2MgJiYgYXJndiA9PSBfX2xpYmNfYXJndikKICAgICB7CiAgICAgICBpZiAoZC0+X19ub25vcHRpb25fZmxhZ3NfbWF4X2xlbiA9PSAwKQotCXsKLQkgIGlmIChfX2dldG9wdF9ub25vcHRpb25fZmxhZ3MgPT0gTlVMTAotCSAgICAgIHx8IF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFnc1swXSA9PSAnXDAnKQotCSAgICBkLT5fX25vbm9wdGlvbl9mbGFnc19tYXhfbGVuID0gLTE7Ci0JICBlbHNlCi0JICAgIHsKLQkgICAgICBjb25zdCBjaGFyICpvcmlnX3N0ciA9IF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFnczsKLQkgICAgICBpbnQgbGVuID0gZC0+X19ub25vcHRpb25fZmxhZ3NfbWF4X2xlbiA9IHN0cmxlbiAob3JpZ19zdHIpOwotCSAgICAgIGlmIChkLT5fX25vbm9wdGlvbl9mbGFnc19tYXhfbGVuIDwgYXJnYykKLQkJZC0+X19ub25vcHRpb25fZmxhZ3NfbWF4X2xlbiA9IGFyZ2M7Ci0JICAgICAgX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzID0KLQkJKGNoYXIgKikgbWFsbG9jIChkLT5fX25vbm9wdGlvbl9mbGFnc19tYXhfbGVuKTsKLQkgICAgICBpZiAoX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzID09IE5VTEwpCi0JCWQtPl9fbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4gPSAtMTsKLQkgICAgICBlbHNlCi0JCW1lbXNldCAoX19tZW1wY3B5IChfX2dldG9wdF9ub25vcHRpb25fZmxhZ3MsIG9yaWdfc3RyLCBsZW4pLAotCQkJJ1wwJywgZC0+X19ub25vcHRpb25fZmxhZ3NfbWF4X2xlbiAtIGxlbik7Ci0JICAgIH0KLQl9CisgICAgICAgIHsKKyAgICAgICAgICBpZiAoX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzID09IE5VTEwKKyAgICAgICAgICAgICAgfHwgX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzWzBdID09ICdcMCcpCisgICAgICAgICAgICBkLT5fX25vbm9wdGlvbl9mbGFnc19tYXhfbGVuID0gLTE7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjb25zdCBjaGFyICpvcmlnX3N0ciA9IF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFnczsKKyAgICAgICAgICAgICAgaW50IGxlbiA9IGQtPl9fbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4gPSBzdHJsZW4gKG9yaWdfc3RyKTsKKyAgICAgICAgICAgICAgaWYgKGQtPl9fbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4gPCBhcmdjKQorICAgICAgICAgICAgICAgIGQtPl9fbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4gPSBhcmdjOworICAgICAgICAgICAgICBfX2dldG9wdF9ub25vcHRpb25fZmxhZ3MgPQorICAgICAgICAgICAgICAgIChjaGFyICopIG1hbGxvYyAoZC0+X19ub25vcHRpb25fZmxhZ3NfbWF4X2xlbik7CisgICAgICAgICAgICAgIGlmIChfX2dldG9wdF9ub25vcHRpb25fZmxhZ3MgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBkLT5fX25vbm9wdGlvbl9mbGFnc19tYXhfbGVuID0gLTE7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtZW1zZXQgKF9fbWVtcGNweSAoX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzLCBvcmlnX3N0ciwgbGVuKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdcMCcsIGQtPl9fbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4gLSBsZW4pOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICBkLT5fX25vbm9wdGlvbl9mbGFnc19sZW4gPSBkLT5fX25vbm9wdGlvbl9mbGFnc19tYXhfbGVuOwogICAgIH0KICAgZWxzZQpAQCAtMjk4LDQ0ICsyOTEsNDggQEAKIAogICAgSWYgYW4gZWxlbWVudCBvZiBBUkdWIHN0YXJ0cyB3aXRoICctJywgYW5kIGlzIG5vdCBleGFjdGx5ICItIiBvciAiLS0iLAogICAgdGhlbiBpdCBpcyBhbiBvcHRpb24gZWxlbWVudC4gIFRoZSBjaGFyYWN0ZXJzIG9mIHRoaXMgZWxlbWVudAotICAgKGFzaWRlIGZyb20gdGhlIGluaXRpYWwgJy0nKSBhcmUgb3B0aW9uIGNoYXJhY3RlcnMuICBJZiBgZ2V0b3B0JworICAgKGFzaWRlIGZyb20gdGhlIGluaXRpYWwgJy0nKSBhcmUgb3B0aW9uIGNoYXJhY3RlcnMuICBJZiAnZ2V0b3B0JwogICAgaXMgY2FsbGVkIHJlcGVhdGVkbHksIGl0IHJldHVybnMgc3VjY2Vzc2l2ZWx5IGVhY2ggb2YgdGhlIG9wdGlvbiBjaGFyYWN0ZXJzCiAgICBmcm9tIGVhY2ggb2YgdGhlIG9wdGlvbiBlbGVtZW50cy4KIAotICAgSWYgYGdldG9wdCcgZmluZHMgYW5vdGhlciBvcHRpb24gY2hhcmFjdGVyLCBpdCByZXR1cm5zIHRoYXQgY2hhcmFjdGVyLAotICAgdXBkYXRpbmcgYG9wdGluZCcgYW5kIGBuZXh0Y2hhcicgc28gdGhhdCB0aGUgbmV4dCBjYWxsIHRvIGBnZXRvcHQnIGNhbgorICAgSWYgJ2dldG9wdCcgZmluZHMgYW5vdGhlciBvcHRpb24gY2hhcmFjdGVyLCBpdCByZXR1cm5zIHRoYXQgY2hhcmFjdGVyLAorICAgdXBkYXRpbmcgJ29wdGluZCcgYW5kICduZXh0Y2hhcicgc28gdGhhdCB0aGUgbmV4dCBjYWxsIHRvICdnZXRvcHQnIGNhbgogICAgcmVzdW1lIHRoZSBzY2FuIHdpdGggdGhlIGZvbGxvd2luZyBvcHRpb24gY2hhcmFjdGVyIG9yIEFSR1YtZWxlbWVudC4KIAotICAgSWYgdGhlcmUgYXJlIG5vIG1vcmUgb3B0aW9uIGNoYXJhY3RlcnMsIGBnZXRvcHQnIHJldHVybnMgLTEuCi0gICBUaGVuIGBvcHRpbmQnIGlzIHRoZSBpbmRleCBpbiBBUkdWIG9mIHRoZSBmaXJzdCBBUkdWLWVsZW1lbnQKKyAgIElmIHRoZXJlIGFyZSBubyBtb3JlIG9wdGlvbiBjaGFyYWN0ZXJzLCAnZ2V0b3B0JyByZXR1cm5zIC0xLgorICAgVGhlbiAnb3B0aW5kJyBpcyB0aGUgaW5kZXggaW4gQVJHViBvZiB0aGUgZmlyc3QgQVJHVi1lbGVtZW50CiAgICB0aGF0IGlzIG5vdCBhbiBvcHRpb24uICAoVGhlIEFSR1YtZWxlbWVudHMgaGF2ZSBiZWVuIHBlcm11dGVkCiAgICBzbyB0aGF0IHRob3NlIHRoYXQgYXJlIG5vdCBvcHRpb25zIG5vdyBjb21lIGxhc3QuKQogCiAgICBPUFRTVFJJTkcgaXMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgbGVnaXRpbWF0ZSBvcHRpb24gY2hhcmFjdGVycy4KICAgIElmIGFuIG9wdGlvbiBjaGFyYWN0ZXIgaXMgc2VlbiB0aGF0IGlzIG5vdCBsaXN0ZWQgaW4gT1BUU1RSSU5HLAotICAgcmV0dXJuICc/JyBhZnRlciBwcmludGluZyBhbiBlcnJvciBtZXNzYWdlLiAgSWYgeW91IHNldCBgb3B0ZXJyJyB0bworICAgcmV0dXJuICc/JyBhZnRlciBwcmludGluZyBhbiBlcnJvciBtZXNzYWdlLiAgSWYgeW91IHNldCAnb3B0ZXJyJyB0bwogICAgemVybywgdGhlIGVycm9yIG1lc3NhZ2UgaXMgc3VwcHJlc3NlZCBidXQgd2Ugc3RpbGwgcmV0dXJuICc/Jy4KIAogICAgSWYgYSBjaGFyIGluIE9QVFNUUklORyBpcyBmb2xsb3dlZCBieSBhIGNvbG9uLCB0aGF0IG1lYW5zIGl0IHdhbnRzIGFuIGFyZywKICAgIHNvIHRoZSBmb2xsb3dpbmcgdGV4dCBpbiB0aGUgc2FtZSBBUkdWLWVsZW1lbnQsIG9yIHRoZSB0ZXh0IG9mIHRoZSBmb2xsb3dpbmcKLSAgIEFSR1YtZWxlbWVudCwgaXMgcmV0dXJuZWQgaW4gYG9wdGFyZycuICBUd28gY29sb25zIG1lYW4gYW4gb3B0aW9uIHRoYXQKKyAgIEFSR1YtZWxlbWVudCwgaXMgcmV0dXJuZWQgaW4gJ29wdGFyZycuICBUd28gY29sb25zIG1lYW4gYW4gb3B0aW9uIHRoYXQKICAgIHdhbnRzIGFuIG9wdGlvbmFsIGFyZzsgaWYgdGhlcmUgaXMgdGV4dCBpbiB0aGUgY3VycmVudCBBUkdWLWVsZW1lbnQsCi0gICBpdCBpcyByZXR1cm5lZCBpbiBgb3B0YXJnJywgb3RoZXJ3aXNlIGBvcHRhcmcnIGlzIHNldCB0byB6ZXJvLgorICAgaXQgaXMgcmV0dXJuZWQgaW4gJ29wdGFyZycsIG90aGVyd2lzZSAnb3B0YXJnJyBpcyBzZXQgdG8gemVyby4KIAotICAgSWYgT1BUU1RSSU5HIHN0YXJ0cyB3aXRoIGAtJyBvciBgKycsIGl0IHJlcXVlc3RzIGRpZmZlcmVudCBtZXRob2RzIG9mCisgICBJZiBPUFRTVFJJTkcgc3RhcnRzIHdpdGggJy0nIG9yICcrJywgaXQgcmVxdWVzdHMgZGlmZmVyZW50IG1ldGhvZHMgb2YKICAgIGhhbmRsaW5nIHRoZSBub24tb3B0aW9uIEFSR1YtZWxlbWVudHMuCiAgICBTZWUgdGhlIGNvbW1lbnRzIGFib3V0IFJFVFVSTl9JTl9PUkRFUiBhbmQgUkVRVUlSRV9PUkRFUiwgYWJvdmUuCiAKLSAgIExvbmctbmFtZWQgb3B0aW9ucyBiZWdpbiB3aXRoIGAtLScgaW5zdGVhZCBvZiBgLScuCisgICBMb25nLW5hbWVkIG9wdGlvbnMgYmVnaW4gd2l0aCAnLS0nIGluc3RlYWQgb2YgJy0nLgogICAgVGhlaXIgbmFtZXMgbWF5IGJlIGFiYnJldmlhdGVkIGFzIGxvbmcgYXMgdGhlIGFiYnJldmlhdGlvbiBpcyB1bmlxdWUKICAgIG9yIGlzIGFuIGV4YWN0IG1hdGNoIGZvciBzb21lIGRlZmluZWQgb3B0aW9uLiAgSWYgdGhleSBoYXZlIGFuCiAgICBhcmd1bWVudCwgaXQgZm9sbG93cyB0aGUgb3B0aW9uIG5hbWUgaW4gdGhlIHNhbWUgQVJHVi1lbGVtZW50LCBzZXBhcmF0ZWQKLSAgIGZyb20gdGhlIG9wdGlvbiBuYW1lIGJ5IGEgYD0nLCBvciBlbHNlIHRoZSBpbiBuZXh0IEFSR1YtZWxlbWVudC4KLSAgIFdoZW4gYGdldG9wdCcgZmluZHMgYSBsb25nLW5hbWVkIG9wdGlvbiwgaXQgcmV0dXJucyAwIGlmIHRoYXQgb3B0aW9uJ3MKLSAgIGBmbGFnJyBmaWVsZCBpcyBub256ZXJvLCB0aGUgdmFsdWUgb2YgdGhlIG9wdGlvbidzIGB2YWwnIGZpZWxkCi0gICBpZiB0aGUgYGZsYWcnIGZpZWxkIGlzIHplcm8uCisgICBmcm9tIHRoZSBvcHRpb24gbmFtZSBieSBhICc9Jywgb3IgZWxzZSB0aGUgaW4gbmV4dCBBUkdWLWVsZW1lbnQuCisgICBXaGVuICdnZXRvcHQnIGZpbmRzIGEgbG9uZy1uYW1lZCBvcHRpb24sIGl0IHJldHVybnMgMCBpZiB0aGF0IG9wdGlvbidzCisgICAnZmxhZycgZmllbGQgaXMgbm9uemVybywgdGhlIHZhbHVlIG9mIHRoZSBvcHRpb24ncyAndmFsJyBmaWVsZAorICAgaWYgdGhlICdmbGFnJyBmaWVsZCBpcyB6ZXJvLgogCi0gICBMT05HT1BUUyBpcyBhIHZlY3RvciBvZiBgc3RydWN0IG9wdGlvbicgdGVybWluYXRlZCBieSBhbgorICAgVGhlIGVsZW1lbnRzIG9mIEFSR1YgYXJlbid0IHJlYWxseSBjb25zdCwgYmVjYXVzZSB3ZSBwZXJtdXRlIHRoZW0uCisgICBCdXQgd2UgcHJldGVuZCB0aGV5J3JlIGNvbnN0IGluIHRoZSBwcm90b3R5cGUgdG8gYmUgY29tcGF0aWJsZQorICAgd2l0aCBvdGhlciBzeXN0ZW1zLgorCisgICBMT05HT1BUUyBpcyBhIHZlY3RvciBvZiAnc3RydWN0IG9wdGlvbicgdGVybWluYXRlZCBieSBhbgogICAgZWxlbWVudCBjb250YWluaW5nIGEgbmFtZSB3aGljaCBpcyB6ZXJvLgogCiAgICBMT05HSU5EIHJldHVybnMgdGhlIGluZGV4IGluIExPTkdPUFQgb2YgdGhlIGxvbmctbmFtZWQgb3B0aW9uIGZvdW5kLgpAQCAtMzQzLDE5ICszNDAsMTQgQEAKICAgIHJlY2VudCBjYWxsLgogCiAgICBJZiBMT05HX09OTFkgaXMgbm9uemVybywgJy0nIGFzIHdlbGwgYXMgJy0tJyBjYW4gaW50cm9kdWNlCi0gICBsb25nLW5hbWVkIG9wdGlvbnMuCi0KLSAgIElmIFBPU0lYTFlfQ09SUkVDVCBpcyBub256ZXJvLCBiZWhhdmUgYXMgaWYgdGhlIFBPU0lYTFlfQ09SUkVDVAotICAgZW52aXJvbm1lbnQgdmFyaWFibGUgd2VyZSBzZXQuICAqLworICAgbG9uZy1uYW1lZCBvcHRpb25zLiAgKi8KIAogaW50CiBfZ2V0b3B0X2ludGVybmFsX3IgKGludCBhcmdjLCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqb3B0c3RyaW5nLAotCQkgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ29wdHMsIGludCAqbG9uZ2luZCwKLQkJICAgIGludCBsb25nX29ubHksIGludCBwb3NpeGx5X2NvcnJlY3QsIHN0cnVjdCBfZ2V0b3B0X2RhdGEgKmQpCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdvcHRzLCBpbnQgKmxvbmdpbmQsCisgICAgICAgICAgICAgICAgICAgIGludCBsb25nX29ubHksIHN0cnVjdCBfZ2V0b3B0X2RhdGEgKmQsIGludCBwb3NpeGx5X2NvcnJlY3QpCiB7CiAgIGludCBwcmludF9lcnJvcnMgPSBkLT5vcHRlcnI7Ci0gIGlmIChvcHRzdHJpbmdbMF0gPT0gJzonKQotICAgIHByaW50X2Vycm9ycyA9IDA7CiAKICAgaWYgKGFyZ2MgPCAxKQogICAgIHJldHVybiAtMTsKQEAgLTM2NSwxMSArMzU3LDE1IEBACiAgIGlmIChkLT5vcHRpbmQgPT0gMCB8fCAhZC0+X19pbml0aWFsaXplZCkKICAgICB7CiAgICAgICBpZiAoZC0+b3B0aW5kID09IDApCi0JZC0+b3B0aW5kID0gMTsJLyogRG9uJ3Qgc2NhbiBBUkdWWzBdLCB0aGUgcHJvZ3JhbSBuYW1lLiAgKi8KLSAgICAgIG9wdHN0cmluZyA9IF9nZXRvcHRfaW5pdGlhbGl6ZSAoYXJnYywgYXJndiwgb3B0c3RyaW5nLAotCQkJCSAgICAgIHBvc2l4bHlfY29ycmVjdCwgZCk7CisgICAgICAgIGQtPm9wdGluZCA9IDE7ICAvKiBEb24ndCBzY2FuIEFSR1ZbMF0sIHRoZSBwcm9ncmFtIG5hbWUuICAqLworICAgICAgb3B0c3RyaW5nID0gX2dldG9wdF9pbml0aWFsaXplIChhcmdjLCBhcmd2LCBvcHRzdHJpbmcsIGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l4bHlfY29ycmVjdCk7CiAgICAgICBkLT5fX2luaXRpYWxpemVkID0gMTsKICAgICB9CisgIGVsc2UgaWYgKG9wdHN0cmluZ1swXSA9PSAnLScgfHwgb3B0c3RyaW5nWzBdID09ICcrJykKKyAgICBvcHRzdHJpbmcrKzsKKyAgaWYgKG9wdHN0cmluZ1swXSA9PSAnOicpCisgICAgcHJpbnRfZXJyb3JzID0gMDsKIAogICAvKiBUZXN0IHdoZXRoZXIgQVJHVltvcHRpbmRdIHBvaW50cyB0byBhIG5vbi1vcHRpb24gYXJndW1lbnQuCiAgICAgIEVpdGhlciBpdCBkb2VzIG5vdCBoYXZlIG9wdGlvbiBzeW50YXgsIG9yIHRoZXJlIGlzIGFuIGVudmlyb25tZW50IGZsYWcKQEAgLTM3Nyw4ICszNzMsOCBAQAogICAgICBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgdXNlZCBpbiB0aGUgR05VIGxpYmMuICAqLwogI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfTk9OT1BUSU9OX0ZMQUdTCiAjIGRlZmluZSBOT05PUFRJT05fUCAoYXJndltkLT5vcHRpbmRdWzBdICE9ICctJyB8fCBhcmd2W2QtPm9wdGluZF1bMV0gPT0gJ1wwJyBcCi0JCSAgICAgIHx8IChkLT5vcHRpbmQgPCBkLT5fX25vbm9wdGlvbl9mbGFnc19sZW4JCSAgICAgIFwKLQkJCSAgJiYgX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzW2QtPm9wdGluZF0gPT0gJzEnKSkKKyAgICAgICAgICAgICAgICAgICAgICB8fCAoZC0+b3B0aW5kIDwgZC0+X19ub25vcHRpb25fZmxhZ3NfbGVuICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzW2QtPm9wdGluZF0gPT0gJzEnKSkKICNlbHNlCiAjIGRlZmluZSBOT05PUFRJT05fUCAoYXJndltkLT5vcHRpbmRdWzBdICE9ICctJyB8fCBhcmd2W2QtPm9wdGluZF1bMV0gPT0gJ1wwJykKICNlbmRpZgpAQCAtMzg4LDc4ICszODQsNzggQEAKICAgICAgIC8qIEFkdmFuY2UgdG8gdGhlIG5leHQgQVJHVi1lbGVtZW50LiAgKi8KIAogICAgICAgLyogR2l2ZSBGSVJTVF9OT05PUFQgJiBMQVNUX05PTk9QVCByYXRpb25hbCB2YWx1ZXMgaWYgT1BUSU5EIGhhcyBiZWVuCi0JIG1vdmVkIGJhY2sgYnkgdGhlIHVzZXIgKHdobyBtYXkgYWxzbyBoYXZlIGNoYW5nZWQgdGhlIGFyZ3VtZW50cykuICAqLworICAgICAgICAgbW92ZWQgYmFjayBieSB0aGUgdXNlciAod2hvIG1heSBhbHNvIGhhdmUgY2hhbmdlZCB0aGUgYXJndW1lbnRzKS4gICovCiAgICAgICBpZiAoZC0+X19sYXN0X25vbm9wdCA+IGQtPm9wdGluZCkKLQlkLT5fX2xhc3Rfbm9ub3B0ID0gZC0+b3B0aW5kOworICAgICAgICBkLT5fX2xhc3Rfbm9ub3B0ID0gZC0+b3B0aW5kOwogICAgICAgaWYgKGQtPl9fZmlyc3Rfbm9ub3B0ID4gZC0+b3B0aW5kKQotCWQtPl9fZmlyc3Rfbm9ub3B0ID0gZC0+b3B0aW5kOworICAgICAgICBkLT5fX2ZpcnN0X25vbm9wdCA9IGQtPm9wdGluZDsKIAogICAgICAgaWYgKGQtPl9fb3JkZXJpbmcgPT0gUEVSTVVURSkKLQl7Ci0JICAvKiBJZiB3ZSBoYXZlIGp1c3QgcHJvY2Vzc2VkIHNvbWUgb3B0aW9ucyBmb2xsb3dpbmcgc29tZSBub24tb3B0aW9ucywKLQkgICAgIGV4Y2hhbmdlIHRoZW0gc28gdGhhdCB0aGUgb3B0aW9ucyBjb21lIGZpcnN0LiAgKi8KKyAgICAgICAgeworICAgICAgICAgIC8qIElmIHdlIGhhdmUganVzdCBwcm9jZXNzZWQgc29tZSBvcHRpb25zIGZvbGxvd2luZyBzb21lIG5vbi1vcHRpb25zLAorICAgICAgICAgICAgIGV4Y2hhbmdlIHRoZW0gc28gdGhhdCB0aGUgb3B0aW9ucyBjb21lIGZpcnN0LiAgKi8KIAotCSAgaWYgKGQtPl9fZmlyc3Rfbm9ub3B0ICE9IGQtPl9fbGFzdF9ub25vcHQKLQkgICAgICAmJiBkLT5fX2xhc3Rfbm9ub3B0ICE9IGQtPm9wdGluZCkKLQkgICAgZXhjaGFuZ2UgKChjaGFyICoqKSBhcmd2LCBkKTsKLQkgIGVsc2UgaWYgKGQtPl9fbGFzdF9ub25vcHQgIT0gZC0+b3B0aW5kKQotCSAgICBkLT5fX2ZpcnN0X25vbm9wdCA9IGQtPm9wdGluZDsKKyAgICAgICAgICBpZiAoZC0+X19maXJzdF9ub25vcHQgIT0gZC0+X19sYXN0X25vbm9wdAorICAgICAgICAgICAgICAmJiBkLT5fX2xhc3Rfbm9ub3B0ICE9IGQtPm9wdGluZCkKKyAgICAgICAgICAgIGV4Y2hhbmdlICgoY2hhciAqKikgYXJndiwgZCk7CisgICAgICAgICAgZWxzZSBpZiAoZC0+X19sYXN0X25vbm9wdCAhPSBkLT5vcHRpbmQpCisgICAgICAgICAgICBkLT5fX2ZpcnN0X25vbm9wdCA9IGQtPm9wdGluZDsKIAotCSAgLyogU2tpcCBhbnkgYWRkaXRpb25hbCBub24tb3B0aW9ucwotCSAgICAgYW5kIGV4dGVuZCB0aGUgcmFuZ2Ugb2Ygbm9uLW9wdGlvbnMgcHJldmlvdXNseSBza2lwcGVkLiAgKi8KKyAgICAgICAgICAvKiBTa2lwIGFueSBhZGRpdGlvbmFsIG5vbi1vcHRpb25zCisgICAgICAgICAgICAgYW5kIGV4dGVuZCB0aGUgcmFuZ2Ugb2Ygbm9uLW9wdGlvbnMgcHJldmlvdXNseSBza2lwcGVkLiAgKi8KIAotCSAgd2hpbGUgKGQtPm9wdGluZCA8IGFyZ2MgJiYgTk9OT1BUSU9OX1ApCi0JICAgIGQtPm9wdGluZCsrOwotCSAgZC0+X19sYXN0X25vbm9wdCA9IGQtPm9wdGluZDsKLQl9CisgICAgICAgICAgd2hpbGUgKGQtPm9wdGluZCA8IGFyZ2MgJiYgTk9OT1BUSU9OX1ApCisgICAgICAgICAgICBkLT5vcHRpbmQrKzsKKyAgICAgICAgICBkLT5fX2xhc3Rfbm9ub3B0ID0gZC0+b3B0aW5kOworICAgICAgICB9CiAKLSAgICAgIC8qIFRoZSBzcGVjaWFsIEFSR1YtZWxlbWVudCBgLS0nIG1lYW5zIHByZW1hdHVyZSBlbmQgb2Ygb3B0aW9ucy4KLQkgU2tpcCBpdCBsaWtlIGEgbnVsbCBvcHRpb24sCi0JIHRoZW4gZXhjaGFuZ2Ugd2l0aCBwcmV2aW91cyBub24tb3B0aW9ucyBhcyBpZiBpdCB3ZXJlIGFuIG9wdGlvbiwKLQkgdGhlbiBza2lwIGV2ZXJ5dGhpbmcgZWxzZSBsaWtlIGEgbm9uLW9wdGlvbi4gICovCisgICAgICAvKiBUaGUgc3BlY2lhbCBBUkdWLWVsZW1lbnQgJy0tJyBtZWFucyBwcmVtYXR1cmUgZW5kIG9mIG9wdGlvbnMuCisgICAgICAgICBTa2lwIGl0IGxpa2UgYSBudWxsIG9wdGlvbiwKKyAgICAgICAgIHRoZW4gZXhjaGFuZ2Ugd2l0aCBwcmV2aW91cyBub24tb3B0aW9ucyBhcyBpZiBpdCB3ZXJlIGFuIG9wdGlvbiwKKyAgICAgICAgIHRoZW4gc2tpcCBldmVyeXRoaW5nIGVsc2UgbGlrZSBhIG5vbi1vcHRpb24uICAqLwogCiAgICAgICBpZiAoZC0+b3B0aW5kICE9IGFyZ2MgJiYgIXN0cmNtcCAoYXJndltkLT5vcHRpbmRdLCAiLS0iKSkKLQl7Ci0JICBkLT5vcHRpbmQrKzsKKyAgICAgICAgeworICAgICAgICAgIGQtPm9wdGluZCsrOwogCi0JICBpZiAoZC0+X19maXJzdF9ub25vcHQgIT0gZC0+X19sYXN0X25vbm9wdAotCSAgICAgICYmIGQtPl9fbGFzdF9ub25vcHQgIT0gZC0+b3B0aW5kKQotCSAgICBleGNoYW5nZSAoKGNoYXIgKiopIGFyZ3YsIGQpOwotCSAgZWxzZSBpZiAoZC0+X19maXJzdF9ub25vcHQgPT0gZC0+X19sYXN0X25vbm9wdCkKLQkgICAgZC0+X19maXJzdF9ub25vcHQgPSBkLT5vcHRpbmQ7Ci0JICBkLT5fX2xhc3Rfbm9ub3B0ID0gYXJnYzsKKyAgICAgICAgICBpZiAoZC0+X19maXJzdF9ub25vcHQgIT0gZC0+X19sYXN0X25vbm9wdAorICAgICAgICAgICAgICAmJiBkLT5fX2xhc3Rfbm9ub3B0ICE9IGQtPm9wdGluZCkKKyAgICAgICAgICAgIGV4Y2hhbmdlICgoY2hhciAqKikgYXJndiwgZCk7CisgICAgICAgICAgZWxzZSBpZiAoZC0+X19maXJzdF9ub25vcHQgPT0gZC0+X19sYXN0X25vbm9wdCkKKyAgICAgICAgICAgIGQtPl9fZmlyc3Rfbm9ub3B0ID0gZC0+b3B0aW5kOworICAgICAgICAgIGQtPl9fbGFzdF9ub25vcHQgPSBhcmdjOwogCi0JICBkLT5vcHRpbmQgPSBhcmdjOwotCX0KKyAgICAgICAgICBkLT5vcHRpbmQgPSBhcmdjOworICAgICAgICB9CiAKICAgICAgIC8qIElmIHdlIGhhdmUgZG9uZSBhbGwgdGhlIEFSR1YtZWxlbWVudHMsIHN0b3AgdGhlIHNjYW4KLQkgYW5kIGJhY2sgb3ZlciBhbnkgbm9uLW9wdGlvbnMgdGhhdCB3ZSBza2lwcGVkIGFuZCBwZXJtdXRlZC4gICovCisgICAgICAgICBhbmQgYmFjayBvdmVyIGFueSBub24tb3B0aW9ucyB0aGF0IHdlIHNraXBwZWQgYW5kIHBlcm11dGVkLiAgKi8KIAogICAgICAgaWYgKGQtPm9wdGluZCA9PSBhcmdjKQotCXsKLQkgIC8qIFNldCB0aGUgbmV4dC1hcmctaW5kZXggdG8gcG9pbnQgYXQgdGhlIG5vbi1vcHRpb25zCi0JICAgICB0aGF0IHdlIHByZXZpb3VzbHkgc2tpcHBlZCwgc28gdGhlIGNhbGxlciB3aWxsIGRpZ2VzdCB0aGVtLiAgKi8KLQkgIGlmIChkLT5fX2ZpcnN0X25vbm9wdCAhPSBkLT5fX2xhc3Rfbm9ub3B0KQotCSAgICBkLT5vcHRpbmQgPSBkLT5fX2ZpcnN0X25vbm9wdDsKLQkgIHJldHVybiAtMTsKLQl9CisgICAgICAgIHsKKyAgICAgICAgICAvKiBTZXQgdGhlIG5leHQtYXJnLWluZGV4IHRvIHBvaW50IGF0IHRoZSBub24tb3B0aW9ucworICAgICAgICAgICAgIHRoYXQgd2UgcHJldmlvdXNseSBza2lwcGVkLCBzbyB0aGUgY2FsbGVyIHdpbGwgZGlnZXN0IHRoZW0uICAqLworICAgICAgICAgIGlmIChkLT5fX2ZpcnN0X25vbm9wdCAhPSBkLT5fX2xhc3Rfbm9ub3B0KQorICAgICAgICAgICAgZC0+b3B0aW5kID0gZC0+X19maXJzdF9ub25vcHQ7CisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAKICAgICAgIC8qIElmIHdlIGhhdmUgY29tZSB0byBhIG5vbi1vcHRpb24gYW5kIGRpZCBub3QgcGVybXV0ZSBpdCwKLQkgZWl0aGVyIHN0b3AgdGhlIHNjYW4gb3IgZGVzY3JpYmUgaXQgdG8gdGhlIGNhbGxlciBhbmQgcGFzcyBpdCBieS4gICovCisgICAgICAgICBlaXRoZXIgc3RvcCB0aGUgc2NhbiBvciBkZXNjcmliZSBpdCB0byB0aGUgY2FsbGVyIGFuZCBwYXNzIGl0IGJ5LiAgKi8KIAogICAgICAgaWYgKE5PTk9QVElPTl9QKQotCXsKLQkgIGlmIChkLT5fX29yZGVyaW5nID09IFJFUVVJUkVfT1JERVIpCi0JICAgIHJldHVybiAtMTsKLQkgIGQtPm9wdGFyZyA9IGFyZ3ZbZC0+b3B0aW5kKytdOwotCSAgcmV0dXJuIDE7Ci0JfQorICAgICAgICB7CisgICAgICAgICAgaWYgKGQtPl9fb3JkZXJpbmcgPT0gUkVRVUlSRV9PUkRFUikKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICBkLT5vcHRhcmcgPSBhcmd2W2QtPm9wdGluZCsrXTsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQogCiAgICAgICAvKiBXZSBoYXZlIGZvdW5kIGFub3RoZXIgb3B0aW9uLUFSR1YtZWxlbWVudC4KLQkgU2tpcCB0aGUgaW5pdGlhbCBwdW5jdHVhdGlvbi4gICovCisgICAgICAgICBTa2lwIHRoZSBpbml0aWFsIHB1bmN0dWF0aW9uLiAgKi8KIAogICAgICAgZC0+X19uZXh0Y2hhciA9IChhcmd2W2QtPm9wdGluZF0gKyAxCi0JCSAgKyAobG9uZ29wdHMgIT0gTlVMTCAmJiBhcmd2W2QtPm9wdGluZF1bMV0gPT0gJy0nKSk7CisgICAgICAgICAgICAgICAgICArIChsb25nb3B0cyAhPSBOVUxMICYmIGFyZ3ZbZC0+b3B0aW5kXVsxXSA9PSAnLScpKTsKICAgICB9CiAKICAgLyogRGVjb2RlIHRoZSBjdXJyZW50IG9wdGlvbi1BUkdWLWVsZW1lbnQuICAqLwpAQCAtNDc5LDYwNiArNDc1LDY1MCBAQAogCiAgIGlmIChsb25nb3B0cyAhPSBOVUxMCiAgICAgICAmJiAoYXJndltkLT5vcHRpbmRdWzFdID09ICctJwotCSAgfHwgKGxvbmdfb25seSAmJiAoYXJndltkLT5vcHRpbmRdWzJdCi0JCQkgICAgfHwgIXN0cmNociAob3B0c3RyaW5nLCBhcmd2W2QtPm9wdGluZF1bMV0pKSkpKQorICAgICAgICAgIHx8IChsb25nX29ubHkgJiYgKGFyZ3ZbZC0+b3B0aW5kXVsyXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFzdHJjaHIgKG9wdHN0cmluZywgYXJndltkLT5vcHRpbmRdWzFdKSkpKSkKICAgICB7CiAgICAgICBjaGFyICpuYW1lZW5kOworICAgICAgdW5zaWduZWQgaW50IG5hbWVsZW47CiAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpwOwogICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqcGZvdW5kID0gTlVMTDsKKyAgICAgIHN0cnVjdCBvcHRpb25fbGlzdAorICAgICAgeworICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpwOworICAgICAgICBzdHJ1Y3Qgb3B0aW9uX2xpc3QgKm5leHQ7CisgICAgICB9ICphbWJpZ19saXN0ID0gTlVMTDsKICAgICAgIGludCBleGFjdCA9IDA7Ci0gICAgICBpbnQgYW1iaWcgPSAwOwogICAgICAgaW50IGluZGZvdW5kID0gLTE7CiAgICAgICBpbnQgb3B0aW9uX2luZGV4OwogCiAgICAgICBmb3IgKG5hbWVlbmQgPSBkLT5fX25leHRjaGFyOyAqbmFtZWVuZCAmJiAqbmFtZWVuZCAhPSAnPSc7IG5hbWVlbmQrKykKLQkvKiBEbyBub3RoaW5nLiAgKi8gOworICAgICAgICAvKiBEbyBub3RoaW5nLiAgKi8gOworICAgICAgbmFtZWxlbiA9IG5hbWVlbmQgLSBkLT5fX25leHRjaGFyOwogCiAgICAgICAvKiBUZXN0IGFsbCBsb25nIG9wdGlvbnMgZm9yIGVpdGhlciBleGFjdCBtYXRjaAotCSBvciBhYmJyZXZpYXRlZCBtYXRjaGVzLiAgKi8KKyAgICAgICAgIG9yIGFiYnJldmlhdGVkIG1hdGNoZXMuICAqLwogICAgICAgZm9yIChwID0gbG9uZ29wdHMsIG9wdGlvbl9pbmRleCA9IDA7IHAtPm5hbWU7IHArKywgb3B0aW9uX2luZGV4KyspCi0JaWYgKCFzdHJuY21wIChwLT5uYW1lLCBkLT5fX25leHRjaGFyLCBuYW1lZW5kIC0gZC0+X19uZXh0Y2hhcikpCi0JICB7Ci0JICAgIGlmICgodW5zaWduZWQgaW50KSAobmFtZWVuZCAtIGQtPl9fbmV4dGNoYXIpCi0JCT09ICh1bnNpZ25lZCBpbnQpIHN0cmxlbiAocC0+bmFtZSkpCi0JICAgICAgewotCQkvKiBFeGFjdCBtYXRjaCBmb3VuZC4gICovCi0JCXBmb3VuZCA9IHA7Ci0JCWluZGZvdW5kID0gb3B0aW9uX2luZGV4OwotCQlleGFjdCA9IDE7Ci0JCWJyZWFrOwotCSAgICAgIH0KLQkgICAgZWxzZSBpZiAocGZvdW5kID09IE5VTEwpCi0JICAgICAgewotCQkvKiBGaXJzdCBub25leGFjdCBtYXRjaCBmb3VuZC4gICovCi0JCXBmb3VuZCA9IHA7Ci0JCWluZGZvdW5kID0gb3B0aW9uX2luZGV4OwotCSAgICAgIH0KLQkgICAgZWxzZSBpZiAobG9uZ19vbmx5Ci0JCSAgICAgfHwgcGZvdW5kLT5oYXNfYXJnICE9IHAtPmhhc19hcmcKLQkJICAgICB8fCBwZm91bmQtPmZsYWcgIT0gcC0+ZmxhZwotCQkgICAgIHx8IHBmb3VuZC0+dmFsICE9IHAtPnZhbCkKLQkgICAgICAvKiBTZWNvbmQgb3IgbGF0ZXIgbm9uZXhhY3QgbWF0Y2ggZm91bmQuICAqLwotCSAgICAgIGFtYmlnID0gMTsKLQkgIH0KKyAgICAgICAgaWYgKCFzdHJuY21wIChwLT5uYW1lLCBkLT5fX25leHRjaGFyLCBuYW1lbGVuKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAobmFtZWxlbiA9PSAodW5zaWduZWQgaW50KSBzdHJsZW4gKHAtPm5hbWUpKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogRXhhY3QgbWF0Y2ggZm91bmQuICAqLworICAgICAgICAgICAgICAgIHBmb3VuZCA9IHA7CisgICAgICAgICAgICAgICAgaW5kZm91bmQgPSBvcHRpb25faW5kZXg7CisgICAgICAgICAgICAgICAgZXhhY3QgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChwZm91bmQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIEZpcnN0IG5vbmV4YWN0IG1hdGNoIGZvdW5kLiAgKi8KKyAgICAgICAgICAgICAgICBwZm91bmQgPSBwOworICAgICAgICAgICAgICAgIGluZGZvdW5kID0gb3B0aW9uX2luZGV4OworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChsb25nX29ubHkKKyAgICAgICAgICAgICAgICAgICAgIHx8IHBmb3VuZC0+aGFzX2FyZyAhPSBwLT5oYXNfYXJnCisgICAgICAgICAgICAgICAgICAgICB8fCBwZm91bmQtPmZsYWcgIT0gcC0+ZmxhZworICAgICAgICAgICAgICAgICAgICAgfHwgcGZvdW5kLT52YWwgIT0gcC0+dmFsKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogU2Vjb25kIG9yIGxhdGVyIG5vbmV4YWN0IG1hdGNoIGZvdW5kLiAgKi8KKyAgICAgICAgICAgICAgICBzdHJ1Y3Qgb3B0aW9uX2xpc3QgKm5ld3AgPSBtYWxsb2MgKHNpemVvZiAoKm5ld3ApKTsKKyAgICAgICAgICAgICAgICBuZXdwLT5wID0gcDsKKyAgICAgICAgICAgICAgICBuZXdwLT5uZXh0ID0gYW1iaWdfbGlzdDsKKyAgICAgICAgICAgICAgICBhbWJpZ19saXN0ID0gbmV3cDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KIAotICAgICAgaWYgKGFtYmlnICYmICFleGFjdCkKLQl7Ci0JICBpZiAocHJpbnRfZXJyb3JzKQotCSAgICB7CisgICAgICBpZiAoYW1iaWdfbGlzdCAhPSBOVUxMICYmICFleGFjdCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChwcmludF9lcnJvcnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0cnVjdCBvcHRpb25fbGlzdCBmaXJzdDsKKyAgICAgICAgICAgICAgZmlyc3QucCA9IHBmb3VuZDsKKyAgICAgICAgICAgICAgZmlyc3QubmV4dCA9IGFtYmlnX2xpc3Q7CisgICAgICAgICAgICAgIGFtYmlnX2xpc3QgPSAmZmlyc3Q7CisKICNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCi0JICAgICAgY2hhciAqYnVmOworICAgICAgICAgICAgICBjaGFyICpidWYgPSBOVUxMOworICAgICAgICAgICAgICBzaXplX3QgYnVmbGVuID0gMDsKIAotCSAgICAgIGlmIChfX2FzcHJpbnRmICgmYnVmLCBfKCIlczogb3B0aW9uIGAlcycgaXMgYW1iaWd1b3VzXG4iKSwKLQkJCSAgICAgIGFyZ3ZbMF0sIGFyZ3ZbZC0+b3B0aW5kXSkgPj0gMCkKLQkJewotCQkgIF9JT19mbG9ja2ZpbGUgKHN0ZGVycik7CisgICAgICAgICAgICAgIEZJTEUgKmZwID0gb3Blbl9tZW1zdHJlYW0gKCZidWYsICZidWZsZW4pOworICAgICAgICAgICAgICBpZiAoZnAgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBmcHJpbnRmIChmcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIiVzOiBvcHRpb24gJyVzJyBpcyBhbWJpZ3VvdXM7IHBvc3NpYmlsaXRpZXM6IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd2WzBdLCBhcmd2W2QtPm9wdGluZF0pOwogCi0JCSAgaW50IG9sZF9mbGFnczIgPSAoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczI7Ci0JCSAgKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyIHw9IF9JT19GTEFHUzJfTk9UQ0FOQ0VMOworICAgICAgICAgICAgICAgICAgZG8KKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYgKGZwLCAiICctLSVzJyIsIGFtYmlnX2xpc3QtPnAtPm5hbWUpOworICAgICAgICAgICAgICAgICAgICAgIGFtYmlnX2xpc3QgPSBhbWJpZ19saXN0LT5uZXh0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB3aGlsZSAoYW1iaWdfbGlzdCAhPSBOVUxMKTsKIAotCQkgIF9fZnhwcmludGYgKE5VTEwsICIlcyIsIGJ1Zik7CisgICAgICAgICAgICAgICAgICBmcHV0Y191bmxvY2tlZCAoJ1xuJywgZnApOwogCi0JCSAgKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyID0gb2xkX2ZsYWdzMjsKLQkJICBfSU9fZnVubG9ja2ZpbGUgKHN0ZGVycik7CisgICAgICAgICAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoZmNsb3NlIChmcCkgIT0gRU9GLCAxKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIF9JT19mbG9ja2ZpbGUgKHN0ZGVycik7CiAKLQkJICBmcmVlIChidWYpOwotCQl9CisgICAgICAgICAgICAgICAgICAgICAgaW50IG9sZF9mbGFnczIgPSAoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczI7CisgICAgICAgICAgICAgICAgICAgICAgKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyIHw9IF9JT19GTEFHUzJfTk9UQ0FOQ0VMOworCisgICAgICAgICAgICAgICAgICAgICAgX19meHByaW50ZiAoTlVMTCwgIiVzIiwgYnVmKTsKKworICAgICAgICAgICAgICAgICAgICAgICgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMiA9IG9sZF9mbGFnczI7CisgICAgICAgICAgICAgICAgICAgICAgX0lPX2Z1bmxvY2tmaWxlIChzdGRlcnIpOworCisgICAgICAgICAgICAgICAgICAgICAgZnJlZSAoYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KICNlbHNlCi0JICAgICAgZnByaW50ZiAoc3RkZXJyLCBfKCIlczogb3B0aW9uIGAlcycgaXMgYW1iaWd1b3VzXG4iKSwKLQkJICAgICAgIGFyZ3ZbMF0sIGFyZ3ZbZC0+b3B0aW5kXSk7CisgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgXygiJXM6IG9wdGlvbiAnJXMnIGlzIGFtYmlndW91czsgcG9zc2liaWxpdGllczoiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgYXJndlswXSwgYXJndltkLT5vcHRpbmRdKTsKKyAgICAgICAgICAgICAgZG8KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIgJy0tJXMnIiwgYW1iaWdfbGlzdC0+cC0+bmFtZSk7CisgICAgICAgICAgICAgICAgICBhbWJpZ19saXN0ID0gYW1iaWdfbGlzdC0+bmV4dDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHdoaWxlIChhbWJpZ19saXN0ICE9IE5VTEwpOworCisgICAgICAgICAgICAgIGZwdXRjICgnXG4nLCBzdGRlcnIpOwogI2VuZGlmCi0JICAgIH0KLQkgIGQtPl9fbmV4dGNoYXIgKz0gc3RybGVuIChkLT5fX25leHRjaGFyKTsKLQkgIGQtPm9wdGluZCsrOwotCSAgZC0+b3B0b3B0ID0gMDsKLQkgIHJldHVybiAnPyc7Ci0JfQorICAgICAgICAgICAgfQorICAgICAgICAgIGQtPl9fbmV4dGNoYXIgKz0gc3RybGVuIChkLT5fX25leHRjaGFyKTsKKyAgICAgICAgICBkLT5vcHRpbmQrKzsKKyAgICAgICAgICBkLT5vcHRvcHQgPSAwOworICAgICAgICAgIHJldHVybiAnPyc7CisgICAgICAgIH0KKworICAgICAgd2hpbGUgKGFtYmlnX2xpc3QgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgIHN0cnVjdCBvcHRpb25fbGlzdCAqcG4gPSBhbWJpZ19saXN0LT5uZXh0OworICAgICAgICAgIGZyZWUgKGFtYmlnX2xpc3QpOworICAgICAgICAgIGFtYmlnX2xpc3QgPSBwbjsKKyAgICAgICAgfQogCiAgICAgICBpZiAocGZvdW5kICE9IE5VTEwpCi0JewotCSAgb3B0aW9uX2luZGV4ID0gaW5kZm91bmQ7Ci0JICBkLT5vcHRpbmQrKzsKLQkgIGlmICgqbmFtZWVuZCkKLQkgICAgewotCSAgICAgIC8qIERvbid0IHRlc3QgaGFzX2FyZyB3aXRoID4sIGJlY2F1c2Ugc29tZSBDIGNvbXBpbGVycyBkb24ndAotCQkgYWxsb3cgaXQgdG8gYmUgdXNlZCBvbiBlbnVtcy4gICovCi0JICAgICAgaWYgKHBmb3VuZC0+aGFzX2FyZykKLQkJZC0+b3B0YXJnID0gbmFtZWVuZCArIDE7Ci0JICAgICAgZWxzZQotCQl7Ci0JCSAgaWYgKHByaW50X2Vycm9ycykKLQkJICAgIHsKKyAgICAgICAgeworICAgICAgICAgIG9wdGlvbl9pbmRleCA9IGluZGZvdW5kOworICAgICAgICAgIGQtPm9wdGluZCsrOworICAgICAgICAgIGlmICgqbmFtZWVuZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogRG9uJ3QgdGVzdCBoYXNfYXJnIHdpdGggPiwgYmVjYXVzZSBzb21lIEMgY29tcGlsZXJzIGRvbid0CisgICAgICAgICAgICAgICAgIGFsbG93IGl0IHRvIGJlIHVzZWQgb24gZW51bXMuICAqLworICAgICAgICAgICAgICBpZiAocGZvdW5kLT5oYXNfYXJnKQorICAgICAgICAgICAgICAgIGQtPm9wdGFyZyA9IG5hbWVlbmQgKyAxOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgaWYgKHByaW50X2Vycm9ycykKKyAgICAgICAgICAgICAgICAgICAgewogI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KLQkJICAgICAgY2hhciAqYnVmOwotCQkgICAgICBpbnQgbjsKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWY7CisgICAgICAgICAgICAgICAgICAgICAgaW50IG47CiAjZW5kaWYKIAotCQkgICAgICBpZiAoYXJndltkLT5vcHRpbmQgLSAxXVsxXSA9PSAnLScpCi0JCQl7Ci0JCQkgIC8qIC0tb3B0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3ZbZC0+b3B0aW5kIC0gMV1bMV0gPT0gJy0nKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtLW9wdGlvbiAqLwogI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KLQkJCSAgbiA9IF9fYXNwcmludGYgKCZidWYsIF8oIlwKLSVzOiBvcHRpb24gYC0tJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIpLAotCQkJCQkgIGFyZ3ZbMF0sIHBmb3VuZC0+bmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBfX2FzcHJpbnRmICgmYnVmLCBfKCJcCislczogb3B0aW9uICctLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3ZbMF0sIHBmb3VuZC0+bmFtZSk7CiAjZWxzZQotCQkJICBmcHJpbnRmIChzdGRlcnIsIF8oIlwKLSVzOiBvcHRpb24gYC0tJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIpLAotCQkJCSAgIGFyZ3ZbMF0sIHBmb3VuZC0+bmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgXygiXAorJXM6IG9wdGlvbiAnLS0lcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3ZbMF0sIHBmb3VuZC0+bmFtZSk7CiAjZW5kaWYKLQkJCX0KLQkJICAgICAgZWxzZQotCQkJewotCQkJICAvKiArb3B0aW9uIG9yIC1vcHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICtvcHRpb24gb3IgLW9wdGlvbiAqLwogI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KLQkJCSAgbiA9IF9fYXNwcmludGYgKCZidWYsIF8oIlwKLSVzOiBvcHRpb24gYCVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIpLAotCQkJCQkgIGFyZ3ZbMF0sIGFyZ3ZbZC0+b3B0aW5kIC0gMV1bMF0sCi0JCQkJCSAgcGZvdW5kLT5uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IF9fYXNwcmludGYgKCZidWYsIF8oIlwKKyVzOiBvcHRpb24gJyVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndlswXSwgYXJndltkLT5vcHRpbmQgLSAxXVswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBmb3VuZC0+bmFtZSk7CiAjZWxzZQotCQkJICBmcHJpbnRmIChzdGRlcnIsIF8oIlwKLSVzOiBvcHRpb24gYCVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIpLAotCQkJCSAgIGFyZ3ZbMF0sIGFyZ3ZbZC0+b3B0aW5kIC0gMV1bMF0sCi0JCQkJICAgcGZvdW5kLT5uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCBfKCJcCislczogb3B0aW9uICclYyVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndlswXSwgYXJndltkLT5vcHRpbmQgLSAxXVswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGZvdW5kLT5uYW1lKTsKICNlbmRpZgotCQkJfQorICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9JTl9MSUJJTwotCQkgICAgICBpZiAobiA+PSAwKQotCQkJewotCQkJICBfSU9fZmxvY2tmaWxlIChzdGRlcnIpOworICAgICAgICAgICAgICAgICAgICAgIGlmIChuID49IDApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIF9JT19mbG9ja2ZpbGUgKHN0ZGVycik7CiAKLQkJCSAgaW50IG9sZF9mbGFnczIgPSAoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczI7Ci0JCQkgICgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMgotCQkJICAgIHw9IF9JT19GTEFHUzJfTk9UQ0FOQ0VMOworICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2xkX2ZsYWdzMiA9ICgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfD0gX0lPX0ZMQUdTMl9OT1RDQU5DRUw7CiAKLQkJCSAgX19meHByaW50ZiAoTlVMTCwgIiVzIiwgYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX19meHByaW50ZiAoTlVMTCwgIiVzIiwgYnVmKTsKIAotCQkJICAoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczIgPSBvbGRfZmxhZ3MyOwotCQkJICBfSU9fZnVubG9ja2ZpbGUgKHN0ZGVycik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMiA9IG9sZF9mbGFnczI7CisgICAgICAgICAgICAgICAgICAgICAgICAgIF9JT19mdW5sb2NrZmlsZSAoc3RkZXJyKTsKIAotCQkJICBmcmVlIChidWYpOwotCQkJfQorICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIChidWYpOworICAgICAgICAgICAgICAgICAgICAgICAgfQogI2VuZGlmCi0JCSAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KIAotCQkgIGQtPl9fbmV4dGNoYXIgKz0gc3RybGVuIChkLT5fX25leHRjaGFyKTsKKyAgICAgICAgICAgICAgICAgIGQtPl9fbmV4dGNoYXIgKz0gc3RybGVuIChkLT5fX25leHRjaGFyKTsKIAotCQkgIGQtPm9wdG9wdCA9IHBmb3VuZC0+dmFsOwotCQkgIHJldHVybiAnPyc7Ci0JCX0KLQkgICAgfQotCSAgZWxzZSBpZiAocGZvdW5kLT5oYXNfYXJnID09IDEpCi0JICAgIHsKLQkgICAgICBpZiAoZC0+b3B0aW5kIDwgYXJnYykKLQkJZC0+b3B0YXJnID0gYXJndltkLT5vcHRpbmQrK107Ci0JICAgICAgZWxzZQotCQl7Ci0JCSAgaWYgKHByaW50X2Vycm9ycykKLQkJICAgIHsKKyAgICAgICAgICAgICAgICAgIGQtPm9wdG9wdCA9IHBmb3VuZC0+dmFsOworICAgICAgICAgICAgICAgICAgcmV0dXJuICc/JzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAocGZvdW5kLT5oYXNfYXJnID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChkLT5vcHRpbmQgPCBhcmdjKQorICAgICAgICAgICAgICAgIGQtPm9wdGFyZyA9IGFyZ3ZbZC0+b3B0aW5kKytdOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgaWYgKHByaW50X2Vycm9ycykKKyAgICAgICAgICAgICAgICAgICAgewogI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KLQkJICAgICAgY2hhciAqYnVmOworICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZjsKIAotCQkgICAgICBpZiAoX19hc3ByaW50ZiAoJmJ1ZiwgXygiXAotJXM6IG9wdGlvbiBgJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKSwKLQkJCQkgICAgICBhcmd2WzBdLCBhcmd2W2QtPm9wdGluZCAtIDFdKSA+PSAwKQotCQkJewotCQkJICBfSU9fZmxvY2tmaWxlIChzdGRlcnIpOworICAgICAgICAgICAgICAgICAgICAgIGlmIChfX2FzcHJpbnRmICgmYnVmLCBfKCJcCislczogb3B0aW9uICctLSVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3ZbMF0sIHBmb3VuZC0+bmFtZSkgPj0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX0lPX2Zsb2NrZmlsZSAoc3RkZXJyKTsKIAotCQkJICBpbnQgb2xkX2ZsYWdzMiA9ICgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMjsKLQkJCSAgKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyCi0JCQkgICAgfD0gX0lPX0ZMQUdTMl9OT1RDQU5DRUw7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvbGRfZmxhZ3MyID0gKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyOworICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8PSBfSU9fRkxBR1MyX05PVENBTkNFTDsKIAotCQkJICBfX2Z4cHJpbnRmIChOVUxMLCAiJXMiLCBidWYpOworICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z4cHJpbnRmIChOVUxMLCAiJXMiLCBidWYpOwogCi0JCQkgICgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMiA9IG9sZF9mbGFnczI7Ci0JCQkgIF9JT19mdW5sb2NrZmlsZSAoc3RkZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyID0gb2xkX2ZsYWdzMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX0lPX2Z1bmxvY2tmaWxlIChzdGRlcnIpOwogCi0JCQkgIGZyZWUgKGJ1Zik7Ci0JCQl9CisgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUgKGJ1Zik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAjZWxzZQotCQkgICAgICBmcHJpbnRmIChzdGRlcnIsCi0JCQkgICAgICAgXygiJXM6IG9wdGlvbiBgJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKSwKLQkJCSAgICAgICBhcmd2WzBdLCBhcmd2W2QtPm9wdGluZCAtIDFdKTsKKyAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiJXM6IG9wdGlvbiAnLS0lcycgcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3ZbMF0sIHBmb3VuZC0+bmFtZSk7CiAjZW5kaWYKLQkJICAgIH0KLQkJICBkLT5fX25leHRjaGFyICs9IHN0cmxlbiAoZC0+X19uZXh0Y2hhcik7Ci0JCSAgZC0+b3B0b3B0ID0gcGZvdW5kLT52YWw7Ci0JCSAgcmV0dXJuIG9wdHN0cmluZ1swXSA9PSAnOicgPyAnOicgOiAnPyc7Ci0JCX0KLQkgICAgfQotCSAgZC0+X19uZXh0Y2hhciArPSBzdHJsZW4gKGQtPl9fbmV4dGNoYXIpOwotCSAgaWYgKGxvbmdpbmQgIT0gTlVMTCkKLQkgICAgKmxvbmdpbmQgPSBvcHRpb25faW5kZXg7Ci0JICBpZiAocGZvdW5kLT5mbGFnKQotCSAgICB7Ci0JICAgICAgKihwZm91bmQtPmZsYWcpID0gcGZvdW5kLT52YWw7Ci0JICAgICAgcmV0dXJuIDA7Ci0JICAgIH0KLQkgIHJldHVybiBwZm91bmQtPnZhbDsKLQl9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGQtPl9fbmV4dGNoYXIgKz0gc3RybGVuIChkLT5fX25leHRjaGFyKTsKKyAgICAgICAgICAgICAgICAgIGQtPm9wdG9wdCA9IHBmb3VuZC0+dmFsOworICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdHN0cmluZ1swXSA9PSAnOicgPyAnOicgOiAnPyc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGQtPl9fbmV4dGNoYXIgKz0gc3RybGVuIChkLT5fX25leHRjaGFyKTsKKyAgICAgICAgICBpZiAobG9uZ2luZCAhPSBOVUxMKQorICAgICAgICAgICAgKmxvbmdpbmQgPSBvcHRpb25faW5kZXg7CisgICAgICAgICAgaWYgKHBmb3VuZC0+ZmxhZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgKihwZm91bmQtPmZsYWcpID0gcGZvdW5kLT52YWw7CisgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiBwZm91bmQtPnZhbDsKKyAgICAgICAgfQogCiAgICAgICAvKiBDYW4ndCBmaW5kIGl0IGFzIGEgbG9uZyBvcHRpb24uICBJZiB0aGlzIGlzIG5vdCBnZXRvcHRfbG9uZ19vbmx5LAotCSBvciB0aGUgb3B0aW9uIHN0YXJ0cyB3aXRoICctLScgb3IgaXMgbm90IGEgdmFsaWQgc2hvcnQKLQkgb3B0aW9uLCB0aGVuIGl0J3MgYW4gZXJyb3IuCi0JIE90aGVyd2lzZSBpbnRlcnByZXQgaXQgYXMgYSBzaG9ydCBvcHRpb24uICAqLworICAgICAgICAgb3IgdGhlIG9wdGlvbiBzdGFydHMgd2l0aCAnLS0nIG9yIGlzIG5vdCBhIHZhbGlkIHNob3J0CisgICAgICAgICBvcHRpb24sIHRoZW4gaXQncyBhbiBlcnJvci4KKyAgICAgICAgIE90aGVyd2lzZSBpbnRlcnByZXQgaXQgYXMgYSBzaG9ydCBvcHRpb24uICAqLwogICAgICAgaWYgKCFsb25nX29ubHkgfHwgYXJndltkLT5vcHRpbmRdWzFdID09ICctJwotCSAgfHwgc3RyY2hyIChvcHRzdHJpbmcsICpkLT5fX25leHRjaGFyKSA9PSBOVUxMKQotCXsKLQkgIGlmIChwcmludF9lcnJvcnMpCi0JICAgIHsKKyAgICAgICAgICB8fCBzdHJjaHIgKG9wdHN0cmluZywgKmQtPl9fbmV4dGNoYXIpID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAocHJpbnRfZXJyb3JzKQorICAgICAgICAgICAgewogI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KLQkgICAgICBjaGFyICpidWY7Ci0JICAgICAgaW50IG47CisgICAgICAgICAgICAgIGNoYXIgKmJ1ZjsKKyAgICAgICAgICAgICAgaW50IG47CiAjZW5kaWYKIAotCSAgICAgIGlmIChhcmd2W2QtPm9wdGluZF1bMV0gPT0gJy0nKQotCQl7Ci0JCSAgLyogLS1vcHRpb24gKi8KKyAgICAgICAgICAgICAgaWYgKGFyZ3ZbZC0+b3B0aW5kXVsxXSA9PSAnLScpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgLyogLS1vcHRpb24gKi8KICNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCi0JCSAgbiA9IF9fYXNwcmludGYgKCZidWYsIF8oIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uIGAtLSVzJ1xuIiksCi0JCQkJICBhcmd2WzBdLCBkLT5fX25leHRjaGFyKTsKKyAgICAgICAgICAgICAgICAgIG4gPSBfX2FzcHJpbnRmICgmYnVmLCBfKCIlczogdW5yZWNvZ25pemVkIG9wdGlvbiAnLS0lcydcbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3ZbMF0sIGQtPl9fbmV4dGNoYXIpOwogI2Vsc2UKLQkJICBmcHJpbnRmIChzdGRlcnIsIF8oIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uIGAtLSVzJ1xuIiksCi0JCQkgICBhcmd2WzBdLCBkLT5fX25leHRjaGFyKTsKKyAgICAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgXygiJXM6IHVucmVjb2duaXplZCBvcHRpb24gJy0tJXMnXG4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3ZbMF0sIGQtPl9fbmV4dGNoYXIpOwogI2VuZGlmCi0JCX0KLQkgICAgICBlbHNlCi0JCXsKLQkJICAvKiArb3B0aW9uIG9yIC1vcHRpb24gKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAvKiArb3B0aW9uIG9yIC1vcHRpb24gKi8KICNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCi0JCSAgbiA9IF9fYXNwcmludGYgKCZidWYsIF8oIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uIGAlYyVzJ1xuIiksCi0JCQkJICBhcmd2WzBdLCBhcmd2W2QtPm9wdGluZF1bMF0sIGQtPl9fbmV4dGNoYXIpOworICAgICAgICAgICAgICAgICAgbiA9IF9fYXNwcmludGYgKCZidWYsIF8oIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uICclYyVzJ1xuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndlswXSwgYXJndltkLT5vcHRpbmRdWzBdLCBkLT5fX25leHRjaGFyKTsKICNlbHNlCi0JCSAgZnByaW50ZiAoc3RkZXJyLCBfKCIlczogdW5yZWNvZ25pemVkIG9wdGlvbiBgJWMlcydcbiIpLAotCQkJICAgYXJndlswXSwgYXJndltkLT5vcHRpbmRdWzBdLCBkLT5fX25leHRjaGFyKTsKKyAgICAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgXygiJXM6IHVucmVjb2duaXplZCBvcHRpb24gJyVjJXMnXG4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3ZbMF0sIGFyZ3ZbZC0+b3B0aW5kXVswXSwgZC0+X19uZXh0Y2hhcik7CiAjZW5kaWYKLQkJfQorICAgICAgICAgICAgICAgIH0KIAogI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KLQkgICAgICBpZiAobiA+PSAwKQotCQl7Ci0JCSAgX0lPX2Zsb2NrZmlsZSAoc3RkZXJyKTsKKyAgICAgICAgICAgICAgaWYgKG4gPj0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBfSU9fZmxvY2tmaWxlIChzdGRlcnIpOwogCi0JCSAgaW50IG9sZF9mbGFnczIgPSAoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczI7Ci0JCSAgKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyIHw9IF9JT19GTEFHUzJfTk9UQ0FOQ0VMOworICAgICAgICAgICAgICAgICAgaW50IG9sZF9mbGFnczIgPSAoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczI7CisgICAgICAgICAgICAgICAgICAoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczIgfD0gX0lPX0ZMQUdTMl9OT1RDQU5DRUw7CiAKLQkJICBfX2Z4cHJpbnRmIChOVUxMLCAiJXMiLCBidWYpOworICAgICAgICAgICAgICAgICAgX19meHByaW50ZiAoTlVMTCwgIiVzIiwgYnVmKTsKIAotCQkgICgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMiA9IG9sZF9mbGFnczI7Ci0JCSAgX0lPX2Z1bmxvY2tmaWxlIChzdGRlcnIpOworICAgICAgICAgICAgICAgICAgKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyID0gb2xkX2ZsYWdzMjsKKyAgICAgICAgICAgICAgICAgIF9JT19mdW5sb2NrZmlsZSAoc3RkZXJyKTsKIAotCQkgIGZyZWUgKGJ1Zik7Ci0JCX0KKyAgICAgICAgICAgICAgICAgIGZyZWUgKGJ1Zik7CisgICAgICAgICAgICAgICAgfQogI2VuZGlmCi0JICAgIH0KLQkgIGQtPl9fbmV4dGNoYXIgPSAoY2hhciAqKSAiIjsKLQkgIGQtPm9wdGluZCsrOwotCSAgZC0+b3B0b3B0ID0gMDsKLQkgIHJldHVybiAnPyc7Ci0JfQorICAgICAgICAgICAgfQorICAgICAgICAgIGQtPl9fbmV4dGNoYXIgPSAoY2hhciAqKSAiIjsKKyAgICAgICAgICBkLT5vcHRpbmQrKzsKKyAgICAgICAgICBkLT5vcHRvcHQgPSAwOworICAgICAgICAgIHJldHVybiAnPyc7CisgICAgICAgIH0KICAgICB9CiAKICAgLyogTG9vayBhdCBhbmQgaGFuZGxlIHRoZSBuZXh0IHNob3J0IG9wdGlvbi1jaGFyYWN0ZXIuICAqLwogCiAgIHsKICAgICBjaGFyIGMgPSAqZC0+X19uZXh0Y2hhcisrOwotICAgIGNoYXIgKnRlbXAgPSBzdHJjaHIgKG9wdHN0cmluZywgYyk7CisgICAgY29uc3QgY2hhciAqdGVtcCA9IHN0cmNociAob3B0c3RyaW5nLCBjKTsKIAotICAgIC8qIEluY3JlbWVudCBgb3B0aW5kJyB3aGVuIHdlIHN0YXJ0IHRvIHByb2Nlc3MgaXRzIGxhc3QgY2hhcmFjdGVyLiAgKi8KKyAgICAvKiBJbmNyZW1lbnQgJ29wdGluZCcgd2hlbiB3ZSBzdGFydCB0byBwcm9jZXNzIGl0cyBsYXN0IGNoYXJhY3Rlci4gICovCiAgICAgaWYgKCpkLT5fX25leHRjaGFyID09ICdcMCcpCiAgICAgICArK2QtPm9wdGluZDsKIAotICAgIGlmICh0ZW1wID09IE5VTEwgfHwgYyA9PSAnOicpCisgICAgaWYgKHRlbXAgPT0gTlVMTCB8fCBjID09ICc6JyB8fCBjID09ICc7JykKICAgICAgIHsKLQlpZiAocHJpbnRfZXJyb3JzKQotCSAgeworICAgICAgICBpZiAocHJpbnRfZXJyb3JzKQorICAgICAgICAgIHsKICNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCi0JICAgICAgY2hhciAqYnVmOwotCSAgICAgIGludCBuOworICAgICAgICAgICAgICBjaGFyICpidWY7CisgICAgICAgICAgICAgIGludCBuOwogI2VuZGlmCiAKLQkgICAgaWYgKGQtPl9fcG9zaXhseV9jb3JyZWN0KQotCSAgICAgIHsKLQkJLyogMTAwMy4yIHNwZWNpZmllcyB0aGUgZm9ybWF0IG9mIHRoaXMgbWVzc2FnZS4gICovCiAjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9JTl9MSUJJTwotCQluID0gX19hc3ByaW50ZiAoJmJ1ZiwgXygiJXM6IGlsbGVnYWwgb3B0aW9uIC0tICVjXG4iKSwKLQkJCQlhcmd2WzBdLCBjKTsKKyAgICAgICAgICAgICAgbiA9IF9fYXNwcmludGYgKCZidWYsIF8oIiVzOiBpbnZhbGlkIG9wdGlvbiAtLSAnJWMnXG4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3ZbMF0sIGMpOwogI2Vsc2UKLQkJZnByaW50ZiAoc3RkZXJyLCBfKCIlczogaWxsZWdhbCBvcHRpb24gLS0gJWNcbiIpLCBhcmd2WzBdLCBjKTsKKyAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCBfKCIlczogaW52YWxpZCBvcHRpb24gLS0gJyVjJ1xuIiksIGFyZ3ZbMF0sIGMpOwogI2VuZGlmCi0JICAgICAgfQotCSAgICBlbHNlCi0JICAgICAgewotI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KLQkJbiA9IF9fYXNwcmludGYgKCZidWYsIF8oIiVzOiBpbnZhbGlkIG9wdGlvbiAtLSAlY1xuIiksCi0JCQkJYXJndlswXSwgYyk7Ci0jZWxzZQotCQlmcHJpbnRmIChzdGRlcnIsIF8oIiVzOiBpbnZhbGlkIG9wdGlvbiAtLSAlY1xuIiksIGFyZ3ZbMF0sIGMpOwotI2VuZGlmCi0JICAgICAgfQogCiAjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9JTl9MSUJJTwotCSAgICBpZiAobiA+PSAwKQotCSAgICAgIHsKLQkJX0lPX2Zsb2NrZmlsZSAoc3RkZXJyKTsKKyAgICAgICAgICAgIGlmIChuID49IDApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBfSU9fZmxvY2tmaWxlIChzdGRlcnIpOwogCi0JCWludCBvbGRfZmxhZ3MyID0gKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyOwotCQkoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczIgfD0gX0lPX0ZMQUdTMl9OT1RDQU5DRUw7CisgICAgICAgICAgICAgICAgaW50IG9sZF9mbGFnczIgPSAoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczI7CisgICAgICAgICAgICAgICAgKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyIHw9IF9JT19GTEFHUzJfTk9UQ0FOQ0VMOwogCi0JCV9fZnhwcmludGYgKE5VTEwsICIlcyIsIGJ1Zik7CisgICAgICAgICAgICAgICAgX19meHByaW50ZiAoTlVMTCwgIiVzIiwgYnVmKTsKIAotCQkoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczIgPSBvbGRfZmxhZ3MyOwotCQlfSU9fZnVubG9ja2ZpbGUgKHN0ZGVycik7CisgICAgICAgICAgICAgICAgKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyID0gb2xkX2ZsYWdzMjsKKyAgICAgICAgICAgICAgICBfSU9fZnVubG9ja2ZpbGUgKHN0ZGVycik7CiAKLQkJZnJlZSAoYnVmKTsKLQkgICAgICB9CisgICAgICAgICAgICAgICAgZnJlZSAoYnVmKTsKKyAgICAgICAgICAgICAgfQogI2VuZGlmCi0JICB9Ci0JZC0+b3B0b3B0ID0gYzsKLQlyZXR1cm4gJz8nOworICAgICAgICAgIH0KKyAgICAgICAgZC0+b3B0b3B0ID0gYzsKKyAgICAgICAgcmV0dXJuICc/JzsKICAgICAgIH0KICAgICAvKiBDb252ZW5pZW5jZS4gVHJlYXQgUE9TSVggLVcgZm9vIHNhbWUgYXMgbG9uZyBvcHRpb24gLS1mb28gKi8KICAgICBpZiAodGVtcFswXSA9PSAnVycgJiYgdGVtcFsxXSA9PSAnOycpCiAgICAgICB7Ci0JY2hhciAqbmFtZWVuZDsKLQljb25zdCBzdHJ1Y3Qgb3B0aW9uICpwOwotCWNvbnN0IHN0cnVjdCBvcHRpb24gKnBmb3VuZCA9IE5VTEw7Ci0JaW50IGV4YWN0ID0gMDsKLQlpbnQgYW1iaWcgPSAwOwotCWludCBpbmRmb3VuZCA9IDA7Ci0JaW50IG9wdGlvbl9pbmRleDsKKyAgICAgICAgY2hhciAqbmFtZWVuZDsKKyAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqcDsKKyAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqcGZvdW5kID0gTlVMTDsKKyAgICAgICAgaW50IGV4YWN0ID0gMDsKKyAgICAgICAgaW50IGFtYmlnID0gMDsKKyAgICAgICAgaW50IGluZGZvdW5kID0gMDsKKyAgICAgICAgaW50IG9wdGlvbl9pbmRleDsKIAotCS8qIFRoaXMgaXMgYW4gb3B0aW9uIHRoYXQgcmVxdWlyZXMgYW4gYXJndW1lbnQuICAqLwotCWlmICgqZC0+X19uZXh0Y2hhciAhPSAnXDAnKQotCSAgewotCSAgICBkLT5vcHRhcmcgPSBkLT5fX25leHRjaGFyOwotCSAgICAvKiBJZiB3ZSBlbmQgdGhpcyBBUkdWLWVsZW1lbnQgYnkgdGFraW5nIHRoZSByZXN0IGFzIGFuIGFyZywKLQkgICAgICAgd2UgbXVzdCBhZHZhbmNlIHRvIHRoZSBuZXh0IGVsZW1lbnQgbm93LiAgKi8KLQkgICAgZC0+b3B0aW5kKys7Ci0JICB9Ci0JZWxzZSBpZiAoZC0+b3B0aW5kID09IGFyZ2MpCi0JICB7Ci0JICAgIGlmIChwcmludF9lcnJvcnMpCi0JICAgICAgewotCQkvKiAxMDAzLjIgc3BlY2lmaWVzIHRoZSBmb3JtYXQgb2YgdGhpcyBtZXNzYWdlLiAgKi8KKyAgICAgICAgaWYgKGxvbmdvcHRzID09IE5VTEwpCisgICAgICAgICAgZ290byBub19sb25nczsKKworICAgICAgICAvKiBUaGlzIGlzIGFuIG9wdGlvbiB0aGF0IHJlcXVpcmVzIGFuIGFyZ3VtZW50LiAgKi8KKyAgICAgICAgaWYgKCpkLT5fX25leHRjaGFyICE9ICdcMCcpCisgICAgICAgICAgeworICAgICAgICAgICAgZC0+b3B0YXJnID0gZC0+X19uZXh0Y2hhcjsKKyAgICAgICAgICAgIC8qIElmIHdlIGVuZCB0aGlzIEFSR1YtZWxlbWVudCBieSB0YWtpbmcgdGhlIHJlc3QgYXMgYW4gYXJnLAorICAgICAgICAgICAgICAgd2UgbXVzdCBhZHZhbmNlIHRvIHRoZSBuZXh0IGVsZW1lbnQgbm93LiAgKi8KKyAgICAgICAgICAgIGQtPm9wdGluZCsrOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZC0+b3B0aW5kID09IGFyZ2MpCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKHByaW50X2Vycm9ycykKKyAgICAgICAgICAgICAgewogI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KLQkJY2hhciAqYnVmOworICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZjsKIAotCQlpZiAoX19hc3ByaW50ZiAoJmJ1ZiwKLQkJCQlfKCIlczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICVjXG4iKSwKLQkJCQlhcmd2WzBdLCBjKSA+PSAwKQotCQkgIHsKLQkJICAgIF9JT19mbG9ja2ZpbGUgKHN0ZGVycik7CisgICAgICAgICAgICAgICAgaWYgKF9fYXNwcmludGYgKCZidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIiVzOiBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgLS0gJyVjJ1xuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3ZbMF0sIGMpID49IDApCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIF9JT19mbG9ja2ZpbGUgKHN0ZGVycik7CiAKLQkJICAgIGludCBvbGRfZmxhZ3MyID0gKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyOwotCQkgICAgKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyIHw9IF9JT19GTEFHUzJfTk9UQ0FOQ0VMOworICAgICAgICAgICAgICAgICAgICBpbnQgb2xkX2ZsYWdzMiA9ICgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMjsKKyAgICAgICAgICAgICAgICAgICAgKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyIHw9IF9JT19GTEFHUzJfTk9UQ0FOQ0VMOwogCi0JCSAgICBfX2Z4cHJpbnRmIChOVUxMLCAiJXMiLCBidWYpOworICAgICAgICAgICAgICAgICAgICBfX2Z4cHJpbnRmIChOVUxMLCAiJXMiLCBidWYpOwogCi0JCSAgICAoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczIgPSBvbGRfZmxhZ3MyOwotCQkgICAgX0lPX2Z1bmxvY2tmaWxlIChzdGRlcnIpOworICAgICAgICAgICAgICAgICAgICAoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczIgPSBvbGRfZmxhZ3MyOworICAgICAgICAgICAgICAgICAgICBfSU9fZnVubG9ja2ZpbGUgKHN0ZGVycik7CiAKLQkJICAgIGZyZWUgKGJ1Zik7Ci0JCSAgfQorICAgICAgICAgICAgICAgICAgICBmcmVlIChidWYpOworICAgICAgICAgICAgICAgICAgfQogI2Vsc2UKLQkJZnByaW50ZiAoc3RkZXJyLCBfKCIlczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICVjXG4iKSwKLQkJCSBhcmd2WzBdLCBjKTsKKyAgICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgXygiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAnJWMnXG4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhcmd2WzBdLCBjKTsKICNlbmRpZgotCSAgICAgIH0KLQkgICAgZC0+b3B0b3B0ID0gYzsKLQkgICAgaWYgKG9wdHN0cmluZ1swXSA9PSAnOicpCi0JICAgICAgYyA9ICc6JzsKLQkgICAgZWxzZQotCSAgICAgIGMgPSAnPyc7Ci0JICAgIHJldHVybiBjOwotCSAgfQotCWVsc2UKLQkgIC8qIFdlIGFscmVhZHkgaW5jcmVtZW50ZWQgYGQtPm9wdGluZCcgb25jZTsKLQkgICAgIGluY3JlbWVudCBpdCBhZ2FpbiB3aGVuIHRha2luZyBuZXh0IEFSR1YtZWx0IGFzIGFyZ3VtZW50LiAgKi8KLQkgIGQtPm9wdGFyZyA9IGFyZ3ZbZC0+b3B0aW5kKytdOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBkLT5vcHRvcHQgPSBjOworICAgICAgICAgICAgaWYgKG9wdHN0cmluZ1swXSA9PSAnOicpCisgICAgICAgICAgICAgIGMgPSAnOic7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGMgPSAnPyc7CisgICAgICAgICAgICByZXR1cm4gYzsKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAvKiBXZSBhbHJlYWR5IGluY3JlbWVudGVkICdkLT5vcHRpbmQnIG9uY2U7CisgICAgICAgICAgICAgaW5jcmVtZW50IGl0IGFnYWluIHdoZW4gdGFraW5nIG5leHQgQVJHVi1lbHQgYXMgYXJndW1lbnQuICAqLworICAgICAgICAgIGQtPm9wdGFyZyA9IGFyZ3ZbZC0+b3B0aW5kKytdOwogCi0JLyogb3B0YXJnIGlzIG5vdyB0aGUgYXJndW1lbnQsIHNlZSBpZiBpdCdzIGluIHRoZQotCSAgIHRhYmxlIG9mIGxvbmdvcHRzLiAgKi8KKyAgICAgICAgLyogb3B0YXJnIGlzIG5vdyB0aGUgYXJndW1lbnQsIHNlZSBpZiBpdCdzIGluIHRoZQorICAgICAgICAgICB0YWJsZSBvZiBsb25nb3B0cy4gICovCiAKLQlmb3IgKGQtPl9fbmV4dGNoYXIgPSBuYW1lZW5kID0gZC0+b3B0YXJnOyAqbmFtZWVuZCAmJiAqbmFtZWVuZCAhPSAnPSc7Ci0JICAgICBuYW1lZW5kKyspCi0JICAvKiBEbyBub3RoaW5nLiAgKi8gOworICAgICAgICBmb3IgKGQtPl9fbmV4dGNoYXIgPSBuYW1lZW5kID0gZC0+b3B0YXJnOyAqbmFtZWVuZCAmJiAqbmFtZWVuZCAhPSAnPSc7CisgICAgICAgICAgICAgbmFtZWVuZCsrKQorICAgICAgICAgIC8qIERvIG5vdGhpbmcuICAqLyA7CiAKLQkvKiBUZXN0IGFsbCBsb25nIG9wdGlvbnMgZm9yIGVpdGhlciBleGFjdCBtYXRjaAotCSAgIG9yIGFiYnJldmlhdGVkIG1hdGNoZXMuICAqLwotCWZvciAocCA9IGxvbmdvcHRzLCBvcHRpb25faW5kZXggPSAwOyBwLT5uYW1lOyBwKyssIG9wdGlvbl9pbmRleCsrKQotCSAgaWYgKCFzdHJuY21wIChwLT5uYW1lLCBkLT5fX25leHRjaGFyLCBuYW1lZW5kIC0gZC0+X19uZXh0Y2hhcikpCi0JICAgIHsKLQkgICAgICBpZiAoKHVuc2lnbmVkIGludCkgKG5hbWVlbmQgLSBkLT5fX25leHRjaGFyKSA9PSBzdHJsZW4gKHAtPm5hbWUpKQotCQl7Ci0JCSAgLyogRXhhY3QgbWF0Y2ggZm91bmQuICAqLwotCQkgIHBmb3VuZCA9IHA7Ci0JCSAgaW5kZm91bmQgPSBvcHRpb25faW5kZXg7Ci0JCSAgZXhhY3QgPSAxOwotCQkgIGJyZWFrOwotCQl9Ci0JICAgICAgZWxzZSBpZiAocGZvdW5kID09IE5VTEwpCi0JCXsKLQkJICAvKiBGaXJzdCBub25leGFjdCBtYXRjaCBmb3VuZC4gICovCi0JCSAgcGZvdW5kID0gcDsKLQkJICBpbmRmb3VuZCA9IG9wdGlvbl9pbmRleDsKLQkJfQotCSAgICAgIGVsc2UKLQkJLyogU2Vjb25kIG9yIGxhdGVyIG5vbmV4YWN0IG1hdGNoIGZvdW5kLiAgKi8KLQkJYW1iaWcgPSAxOwotCSAgICB9Ci0JaWYgKGFtYmlnICYmICFleGFjdCkKLQkgIHsKLQkgICAgaWYgKHByaW50X2Vycm9ycykKLQkgICAgICB7CisgICAgICAgIC8qIFRlc3QgYWxsIGxvbmcgb3B0aW9ucyBmb3IgZWl0aGVyIGV4YWN0IG1hdGNoCisgICAgICAgICAgIG9yIGFiYnJldmlhdGVkIG1hdGNoZXMuICAqLworICAgICAgICBmb3IgKHAgPSBsb25nb3B0cywgb3B0aW9uX2luZGV4ID0gMDsgcC0+bmFtZTsgcCsrLCBvcHRpb25faW5kZXgrKykKKyAgICAgICAgICBpZiAoIXN0cm5jbXAgKHAtPm5hbWUsIGQtPl9fbmV4dGNoYXIsIG5hbWVlbmQgLSBkLT5fX25leHRjaGFyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCBpbnQpIChuYW1lZW5kIC0gZC0+X19uZXh0Y2hhcikgPT0gc3RybGVuIChwLT5uYW1lKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAvKiBFeGFjdCBtYXRjaCBmb3VuZC4gICovCisgICAgICAgICAgICAgICAgICBwZm91bmQgPSBwOworICAgICAgICAgICAgICAgICAgaW5kZm91bmQgPSBvcHRpb25faW5kZXg7CisgICAgICAgICAgICAgICAgICBleGFjdCA9IDE7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UgaWYgKHBmb3VuZCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIC8qIEZpcnN0IG5vbmV4YWN0IG1hdGNoIGZvdW5kLiAgKi8KKyAgICAgICAgICAgICAgICAgIHBmb3VuZCA9IHA7CisgICAgICAgICAgICAgICAgICBpbmRmb3VuZCA9IG9wdGlvbl9pbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UgaWYgKGxvbmdfb25seQorICAgICAgICAgICAgICAgICAgICAgICB8fCBwZm91bmQtPmhhc19hcmcgIT0gcC0+aGFzX2FyZworICAgICAgICAgICAgICAgICAgICAgICB8fCBwZm91bmQtPmZsYWcgIT0gcC0+ZmxhZworICAgICAgICAgICAgICAgICAgICAgICB8fCBwZm91bmQtPnZhbCAhPSBwLT52YWwpCisgICAgICAgICAgICAgICAgLyogU2Vjb25kIG9yIGxhdGVyIG5vbmV4YWN0IG1hdGNoIGZvdW5kLiAgKi8KKyAgICAgICAgICAgICAgICBhbWJpZyA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIGlmIChhbWJpZyAmJiAhZXhhY3QpCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKHByaW50X2Vycm9ycykKKyAgICAgICAgICAgICAgewogI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KLQkJY2hhciAqYnVmOworICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZjsKIAotCQlpZiAoX19hc3ByaW50ZiAoJmJ1ZiwgXygiJXM6IG9wdGlvbiBgLVcgJXMnIGlzIGFtYmlndW91c1xuIiksCi0JCQkJYXJndlswXSwgYXJndltkLT5vcHRpbmRdKSA+PSAwKQotCQkgIHsKLQkJICAgIF9JT19mbG9ja2ZpbGUgKHN0ZGVycik7CisgICAgICAgICAgICAgICAgaWYgKF9fYXNwcmludGYgKCZidWYsIF8oIiVzOiBvcHRpb24gJy1XICVzJyBpcyBhbWJpZ3VvdXNcbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd2WzBdLCBkLT5vcHRhcmcpID49IDApCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIF9JT19mbG9ja2ZpbGUgKHN0ZGVycik7CiAKLQkJICAgIGludCBvbGRfZmxhZ3MyID0gKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyOwotCQkgICAgKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyIHw9IF9JT19GTEFHUzJfTk9UQ0FOQ0VMOworICAgICAgICAgICAgICAgICAgICBpbnQgb2xkX2ZsYWdzMiA9ICgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMjsKKyAgICAgICAgICAgICAgICAgICAgKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyIHw9IF9JT19GTEFHUzJfTk9UQ0FOQ0VMOwogCi0JCSAgICBfX2Z4cHJpbnRmIChOVUxMLCAiJXMiLCBidWYpOworICAgICAgICAgICAgICAgICAgICBfX2Z4cHJpbnRmIChOVUxMLCAiJXMiLCBidWYpOwogCi0JCSAgICAoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczIgPSBvbGRfZmxhZ3MyOwotCQkgICAgX0lPX2Z1bmxvY2tmaWxlIChzdGRlcnIpOworICAgICAgICAgICAgICAgICAgICAoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczIgPSBvbGRfZmxhZ3MyOworICAgICAgICAgICAgICAgICAgICBfSU9fZnVubG9ja2ZpbGUgKHN0ZGVycik7CiAKLQkJICAgIGZyZWUgKGJ1Zik7Ci0JCSAgfQorICAgICAgICAgICAgICAgICAgICBmcmVlIChidWYpOworICAgICAgICAgICAgICAgICAgfQogI2Vsc2UKLQkJZnByaW50ZiAoc3RkZXJyLCBfKCIlczogb3B0aW9uIGAtVyAlcycgaXMgYW1iaWd1b3VzXG4iKSwKLQkJCSBhcmd2WzBdLCBhcmd2W2QtPm9wdGluZF0pOworICAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgXygiJXM6IG9wdGlvbiAnLVcgJXMnIGlzIGFtYmlndW91c1xuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgYXJndlswXSwgZC0+b3B0YXJnKTsKICNlbmRpZgotCSAgICAgIH0KLQkgICAgZC0+X19uZXh0Y2hhciArPSBzdHJsZW4gKGQtPl9fbmV4dGNoYXIpOwotCSAgICBkLT5vcHRpbmQrKzsKLQkgICAgcmV0dXJuICc/JzsKLQkgIH0KLQlpZiAocGZvdW5kICE9IE5VTEwpCi0JICB7Ci0JICAgIG9wdGlvbl9pbmRleCA9IGluZGZvdW5kOwotCSAgICBpZiAoKm5hbWVlbmQpCi0JICAgICAgewotCQkvKiBEb24ndCB0ZXN0IGhhc19hcmcgd2l0aCA+LCBiZWNhdXNlIHNvbWUgQyBjb21waWxlcnMgZG9uJ3QKLQkJICAgYWxsb3cgaXQgdG8gYmUgdXNlZCBvbiBlbnVtcy4gICovCi0JCWlmIChwZm91bmQtPmhhc19hcmcpCi0JCSAgZC0+b3B0YXJnID0gbmFtZWVuZCArIDE7Ci0JCWVsc2UKLQkJICB7Ci0JCSAgICBpZiAocHJpbnRfZXJyb3JzKQotCQkgICAgICB7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGQtPl9fbmV4dGNoYXIgKz0gc3RybGVuIChkLT5fX25leHRjaGFyKTsKKyAgICAgICAgICAgIGQtPm9wdGluZCsrOworICAgICAgICAgICAgcmV0dXJuICc/JzsKKyAgICAgICAgICB9CisgICAgICAgIGlmIChwZm91bmQgIT0gTlVMTCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBvcHRpb25faW5kZXggPSBpbmRmb3VuZDsKKyAgICAgICAgICAgIGlmICgqbmFtZWVuZCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIERvbid0IHRlc3QgaGFzX2FyZyB3aXRoID4sIGJlY2F1c2Ugc29tZSBDIGNvbXBpbGVycyBkb24ndAorICAgICAgICAgICAgICAgICAgIGFsbG93IGl0IHRvIGJlIHVzZWQgb24gZW51bXMuICAqLworICAgICAgICAgICAgICAgIGlmIChwZm91bmQtPmhhc19hcmcpCisgICAgICAgICAgICAgICAgICBkLT5vcHRhcmcgPSBuYW1lZW5kICsgMTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmludF9lcnJvcnMpCisgICAgICAgICAgICAgICAgICAgICAgewogI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KLQkJCWNoYXIgKmJ1ZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZjsKIAotCQkJaWYgKF9fYXNwcmludGYgKCZidWYsIF8oIlwKLSVzOiBvcHRpb24gYC1XICVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iKSwKLQkJCQkJYXJndlswXSwgcGZvdW5kLT5uYW1lKSA+PSAwKQotCQkJICB7Ci0JCQkgICAgX0lPX2Zsb2NrZmlsZSAoc3RkZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfX2FzcHJpbnRmICgmYnVmLCBfKCJcCislczogb3B0aW9uICctVyAlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndlswXSwgcGZvdW5kLT5uYW1lKSA+PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lPX2Zsb2NrZmlsZSAoc3RkZXJyKTsKIAotCQkJICAgIGludCBvbGRfZmxhZ3MyID0gKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyOwotCQkJICAgICgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMgotCQkJICAgICAgfD0gX0lPX0ZMQUdTMl9OT1RDQU5DRUw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9sZF9mbGFnczIgPSAoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8PSBfSU9fRkxBR1MyX05PVENBTkNFTDsKIAotCQkJICAgIF9fZnhwcmludGYgKE5VTEwsICIlcyIsIGJ1Zik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19meHByaW50ZiAoTlVMTCwgIiVzIiwgYnVmKTsKIAotCQkJICAgICgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMiA9IG9sZF9mbGFnczI7Ci0JCQkgICAgX0lPX2Z1bmxvY2tmaWxlIChzdGRlcnIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMiA9IG9sZF9mbGFnczI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lPX2Z1bmxvY2tmaWxlIChzdGRlcnIpOwogCi0JCQkgICAgZnJlZSAoYnVmKTsKLQkJCSAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUgKGJ1Zik7CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICNlbHNlCi0JCQlmcHJpbnRmIChzdGRlcnIsIF8oIlwKLSVzOiBvcHRpb24gYC1XICVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iKSwKLQkJCQkgYXJndlswXSwgcGZvdW5kLT5uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgXygiXAorJXM6IG9wdGlvbiAnLVcgJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndlswXSwgcGZvdW5kLT5uYW1lKTsKICNlbmRpZgotCQkgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgfQogCi0JCSAgICBkLT5fX25leHRjaGFyICs9IHN0cmxlbiAoZC0+X19uZXh0Y2hhcik7Ci0JCSAgICByZXR1cm4gJz8nOwotCQkgIH0KLQkgICAgICB9Ci0JICAgIGVsc2UgaWYgKHBmb3VuZC0+aGFzX2FyZyA9PSAxKQotCSAgICAgIHsKLQkJaWYgKGQtPm9wdGluZCA8IGFyZ2MpCi0JCSAgZC0+b3B0YXJnID0gYXJndltkLT5vcHRpbmQrK107Ci0JCWVsc2UKLQkJICB7Ci0JCSAgICBpZiAocHJpbnRfZXJyb3JzKQotCQkgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGQtPl9fbmV4dGNoYXIgKz0gc3RybGVuIChkLT5fX25leHRjaGFyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc/JzsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocGZvdW5kLT5oYXNfYXJnID09IDEpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZC0+b3B0aW5kIDwgYXJnYykKKyAgICAgICAgICAgICAgICAgIGQtPm9wdGFyZyA9IGFyZ3ZbZC0+b3B0aW5kKytdOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByaW50X2Vycm9ycykKKyAgICAgICAgICAgICAgICAgICAgICB7CiAjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9JTl9MSUJJTwotCQkJY2hhciAqYnVmOworICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmOwogCi0JCQlpZiAoX19hc3ByaW50ZiAoJmJ1ZiwgXygiXAotJXM6IG9wdGlvbiBgJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKSwKLQkJCQkJYXJndlswXSwgYXJndltkLT5vcHRpbmQgLSAxXSkgPj0gMCkKLQkJCSAgewotCQkJICAgIF9JT19mbG9ja2ZpbGUgKHN0ZGVycik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX19hc3ByaW50ZiAoJmJ1ZiwgXygiXAorJXM6IG9wdGlvbiAnLVcgJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd2WzBdLCBwZm91bmQtPm5hbWUpID49IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSU9fZmxvY2tmaWxlIChzdGRlcnIpOwogCi0JCQkgICAgaW50IG9sZF9mbGFnczIgPSAoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczI7Ci0JCQkgICAgKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyCi0JCQkgICAgICB8PSBfSU9fRkxBR1MyX05PVENBTkNFTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2xkX2ZsYWdzMiA9ICgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHw9IF9JT19GTEFHUzJfTk9UQ0FOQ0VMOwogCi0JCQkgICAgX19meHByaW50ZiAoTlVMTCwgIiVzIiwgYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z4cHJpbnRmIChOVUxMLCAiJXMiLCBidWYpOwogCi0JCQkgICAgKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyID0gb2xkX2ZsYWdzMjsKLQkJCSAgICBfSU9fZnVubG9ja2ZpbGUgKHN0ZGVycik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyID0gb2xkX2ZsYWdzMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSU9fZnVubG9ja2ZpbGUgKHN0ZGVycik7CiAKLQkJCSAgICBmcmVlIChidWYpOwotCQkJICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAoYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQogI2Vsc2UKLQkJCWZwcmludGYgKHN0ZGVyciwKLQkJCQkgXygiJXM6IG9wdGlvbiBgJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKSwKLQkJCQkgYXJndlswXSwgYXJndltkLT5vcHRpbmQgLSAxXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsIF8oIlwKKyVzOiBvcHRpb24gJy1XICVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd2WzBdLCBwZm91bmQtPm5hbWUpOwogI2VuZGlmCi0JCSAgICAgIH0KLQkJICAgIGQtPl9fbmV4dGNoYXIgKz0gc3RybGVuIChkLT5fX25leHRjaGFyKTsKLQkJICAgIHJldHVybiBvcHRzdHJpbmdbMF0gPT0gJzonID8gJzonIDogJz8nOwotCQkgIH0KLQkgICAgICB9Ci0JICAgIGQtPl9fbmV4dGNoYXIgKz0gc3RybGVuIChkLT5fX25leHRjaGFyKTsKLQkgICAgaWYgKGxvbmdpbmQgIT0gTlVMTCkKLQkgICAgICAqbG9uZ2luZCA9IG9wdGlvbl9pbmRleDsKLQkgICAgaWYgKHBmb3VuZC0+ZmxhZykKLQkgICAgICB7Ci0JCSoocGZvdW5kLT5mbGFnKSA9IHBmb3VuZC0+dmFsOwotCQlyZXR1cm4gMDsKLQkgICAgICB9Ci0JICAgIHJldHVybiBwZm91bmQtPnZhbDsKLQkgIH0KLQkgIGQtPl9fbmV4dGNoYXIgPSBOVUxMOwotCSAgcmV0dXJuICdXJzsJLyogTGV0IHRoZSBhcHBsaWNhdGlvbiBoYW5kbGUgaXQuICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGQtPl9fbmV4dGNoYXIgKz0gc3RybGVuIChkLT5fX25leHRjaGFyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdHN0cmluZ1swXSA9PSAnOicgPyAnOicgOiAnPyc7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZC0+b3B0YXJnID0gTlVMTDsKKyAgICAgICAgICAgIGQtPl9fbmV4dGNoYXIgKz0gc3RybGVuIChkLT5fX25leHRjaGFyKTsKKyAgICAgICAgICAgIGlmIChsb25naW5kICE9IE5VTEwpCisgICAgICAgICAgICAgICpsb25naW5kID0gb3B0aW9uX2luZGV4OworICAgICAgICAgICAgaWYgKHBmb3VuZC0+ZmxhZykKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICoocGZvdW5kLT5mbGFnKSA9IHBmb3VuZC0+dmFsOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcGZvdW5kLT52YWw7CisgICAgICAgICAgfQorCisgICAgICBub19sb25nczoKKyAgICAgICAgZC0+X19uZXh0Y2hhciA9IE5VTEw7CisgICAgICAgIHJldHVybiAnVyc7ICAgLyogTGV0IHRoZSBhcHBsaWNhdGlvbiBoYW5kbGUgaXQuICAgKi8KICAgICAgIH0KICAgICBpZiAodGVtcFsxXSA9PSAnOicpCiAgICAgICB7Ci0JaWYgKHRlbXBbMl0gPT0gJzonKQotCSAgewotCSAgICAvKiBUaGlzIGlzIGFuIG9wdGlvbiB0aGF0IGFjY2VwdHMgYW4gYXJndW1lbnQgb3B0aW9uYWxseS4gICovCi0JICAgIGlmICgqZC0+X19uZXh0Y2hhciAhPSAnXDAnKQotCSAgICAgIHsKLQkJZC0+b3B0YXJnID0gZC0+X19uZXh0Y2hhcjsKLQkJZC0+b3B0aW5kKys7Ci0JICAgICAgfQotCSAgICBlbHNlCi0JICAgICAgZC0+b3B0YXJnID0gTlVMTDsKLQkgICAgZC0+X19uZXh0Y2hhciA9IE5VTEw7Ci0JICB9Ci0JZWxzZQotCSAgewotCSAgICAvKiBUaGlzIGlzIGFuIG9wdGlvbiB0aGF0IHJlcXVpcmVzIGFuIGFyZ3VtZW50LiAgKi8KLQkgICAgaWYgKCpkLT5fX25leHRjaGFyICE9ICdcMCcpCi0JICAgICAgewotCQlkLT5vcHRhcmcgPSBkLT5fX25leHRjaGFyOwotCQkvKiBJZiB3ZSBlbmQgdGhpcyBBUkdWLWVsZW1lbnQgYnkgdGFraW5nIHRoZSByZXN0IGFzIGFuIGFyZywKLQkJICAgd2UgbXVzdCBhZHZhbmNlIHRvIHRoZSBuZXh0IGVsZW1lbnQgbm93LiAgKi8KLQkJZC0+b3B0aW5kKys7Ci0JICAgICAgfQotCSAgICBlbHNlIGlmIChkLT5vcHRpbmQgPT0gYXJnYykKLQkgICAgICB7Ci0JCWlmIChwcmludF9lcnJvcnMpCi0JCSAgewotCQkgICAgLyogMTAwMy4yIHNwZWNpZmllcyB0aGUgZm9ybWF0IG9mIHRoaXMgbWVzc2FnZS4gICovCisgICAgICAgIGlmICh0ZW1wWzJdID09ICc6JykKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBUaGlzIGlzIGFuIG9wdGlvbiB0aGF0IGFjY2VwdHMgYW4gYXJndW1lbnQgb3B0aW9uYWxseS4gICovCisgICAgICAgICAgICBpZiAoKmQtPl9fbmV4dGNoYXIgIT0gJ1wwJykKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGQtPm9wdGFyZyA9IGQtPl9fbmV4dGNoYXI7CisgICAgICAgICAgICAgICAgZC0+b3B0aW5kKys7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZC0+b3B0YXJnID0gTlVMTDsKKyAgICAgICAgICAgIGQtPl9fbmV4dGNoYXIgPSBOVUxMOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFRoaXMgaXMgYW4gb3B0aW9uIHRoYXQgcmVxdWlyZXMgYW4gYXJndW1lbnQuICAqLworICAgICAgICAgICAgaWYgKCpkLT5fX25leHRjaGFyICE9ICdcMCcpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkLT5vcHRhcmcgPSBkLT5fX25leHRjaGFyOworICAgICAgICAgICAgICAgIC8qIElmIHdlIGVuZCB0aGlzIEFSR1YtZWxlbWVudCBieSB0YWtpbmcgdGhlIHJlc3QgYXMgYW4gYXJnLAorICAgICAgICAgICAgICAgICAgIHdlIG11c3QgYWR2YW5jZSB0byB0aGUgbmV4dCBlbGVtZW50IG5vdy4gICovCisgICAgICAgICAgICAgICAgZC0+b3B0aW5kKys7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGQtPm9wdGluZCA9PSBhcmdjKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHByaW50X2Vycm9ycykKKyAgICAgICAgICAgICAgICAgIHsKICNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCi0JCSAgICBjaGFyICpidWY7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZjsKIAotCQkgICAgaWYgKF9fYXNwcmludGYgKCZidWYsIF8oIlwKLSVzOiBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgLS0gJWNcbiIpLAotCQkJCSAgICBhcmd2WzBdLCBjKSA+PSAwKQotCQkgICAgICB7Ci0JCQlfSU9fZmxvY2tmaWxlIChzdGRlcnIpOworICAgICAgICAgICAgICAgICAgICBpZiAoX19hc3ByaW50ZiAoJmJ1ZiwgXygiXAorJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAnJWMnXG4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3ZbMF0sIGMpID49IDApCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgX0lPX2Zsb2NrZmlsZSAoc3RkZXJyKTsKIAotCQkJaW50IG9sZF9mbGFnczIgPSAoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczI7Ci0JCQkoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczIgfD0gX0lPX0ZMQUdTMl9OT1RDQU5DRUw7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2xkX2ZsYWdzMiA9ICgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMiB8PSBfSU9fRkxBR1MyX05PVENBTkNFTDsKIAotCQkJX19meHByaW50ZiAoTlVMTCwgIiVzIiwgYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fZnhwcmludGYgKE5VTEwsICIlcyIsIGJ1Zik7CiAKLQkJCSgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMiA9IG9sZF9mbGFnczI7Ci0JCQlfSU9fZnVubG9ja2ZpbGUgKHN0ZGVycik7CisgICAgICAgICAgICAgICAgICAgICAgICAoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczIgPSBvbGRfZmxhZ3MyOworICAgICAgICAgICAgICAgICAgICAgICAgX0lPX2Z1bmxvY2tmaWxlIChzdGRlcnIpOwogCi0JCQlmcmVlIChidWYpOwotCQkgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIChidWYpOworICAgICAgICAgICAgICAgICAgICAgIH0KICNlbHNlCi0JCSAgICBmcHJpbnRmIChzdGRlcnIsCi0JCQkgICAgIF8oIiVzOiBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgLS0gJWNcbiIpLAotCQkJICAgICBhcmd2WzBdLCBjKTsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCIlczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICclYydcbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd2WzBdLCBjKTsKICNlbmRpZgotCQkgIH0KLQkJZC0+b3B0b3B0ID0gYzsKLQkJaWYgKG9wdHN0cmluZ1swXSA9PSAnOicpCi0JCSAgYyA9ICc6JzsKLQkJZWxzZQotCQkgIGMgPSAnPyc7Ci0JICAgICAgfQotCSAgICBlbHNlCi0JICAgICAgLyogV2UgYWxyZWFkeSBpbmNyZW1lbnRlZCBgb3B0aW5kJyBvbmNlOwotCQkgaW5jcmVtZW50IGl0IGFnYWluIHdoZW4gdGFraW5nIG5leHQgQVJHVi1lbHQgYXMgYXJndW1lbnQuICAqLwotCSAgICAgIGQtPm9wdGFyZyA9IGFyZ3ZbZC0+b3B0aW5kKytdOwotCSAgICBkLT5fX25leHRjaGFyID0gTlVMTDsKLQkgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkLT5vcHRvcHQgPSBjOworICAgICAgICAgICAgICAgIGlmIChvcHRzdHJpbmdbMF0gPT0gJzonKQorICAgICAgICAgICAgICAgICAgYyA9ICc6JzsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBjID0gJz8nOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIC8qIFdlIGFscmVhZHkgaW5jcmVtZW50ZWQgJ29wdGluZCcgb25jZTsKKyAgICAgICAgICAgICAgICAgaW5jcmVtZW50IGl0IGFnYWluIHdoZW4gdGFraW5nIG5leHQgQVJHVi1lbHQgYXMgYXJndW1lbnQuICAqLworICAgICAgICAgICAgICBkLT5vcHRhcmcgPSBhcmd2W2QtPm9wdGluZCsrXTsKKyAgICAgICAgICAgIGQtPl9fbmV4dGNoYXIgPSBOVUxMOworICAgICAgICAgIH0KICAgICAgIH0KICAgICByZXR1cm4gYzsKICAgfQpAQCAtMTA4NiwxNiArMTEyNiwxNyBAQAogCiBpbnQKIF9nZXRvcHRfaW50ZXJuYWwgKGludCBhcmdjLCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqb3B0c3RyaW5nLAotCQkgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdvcHRzLCBpbnQgKmxvbmdpbmQsCi0JCSAgaW50IGxvbmdfb25seSwgaW50IHBvc2l4bHlfY29ycmVjdCkKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdvcHRzLCBpbnQgKmxvbmdpbmQsIGludCBsb25nX29ubHksCisgICAgICAgICAgICAgICAgICBpbnQgcG9zaXhseV9jb3JyZWN0KQogewogICBpbnQgcmVzdWx0OwogCiAgIGdldG9wdF9kYXRhLm9wdGluZCA9IG9wdGluZDsKICAgZ2V0b3B0X2RhdGEub3B0ZXJyID0gb3B0ZXJyOwogCi0gIHJlc3VsdCA9IF9nZXRvcHRfaW50ZXJuYWxfciAoYXJnYywgYXJndiwgb3B0c3RyaW5nLCBsb25nb3B0cywgbG9uZ2luZCwKLQkJCSAgICAgICBsb25nX29ubHksIHBvc2l4bHlfY29ycmVjdCwgJmdldG9wdF9kYXRhKTsKKyAgcmVzdWx0ID0gX2dldG9wdF9pbnRlcm5hbF9yIChhcmdjLCBhcmd2LCBvcHRzdHJpbmcsIGxvbmdvcHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdpbmQsIGxvbmdfb25seSwgJmdldG9wdF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l4bHlfY29ycmVjdCk7CiAKICAgb3B0aW5kID0gZ2V0b3B0X2RhdGEub3B0aW5kOwogICBvcHRhcmcgPSBnZXRvcHRfZGF0YS5vcHRhcmc7CkBAIC0xMTE1LDE1ICsxMTU2LDI4IEBACiBpbnQKIGdldG9wdCAoaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2LCBjb25zdCBjaGFyICpvcHRzdHJpbmcpCiB7Ci0gIHJldHVybiBfZ2V0b3B0X2ludGVybmFsIChhcmdjLCAoY2hhciAqKikgYXJndiwgb3B0c3RyaW5nLCBOVUxMLCBOVUxMLCAwLAotCQkJICAgUE9TSVhMWV9DT1JSRUNUKTsKKyAgcmV0dXJuIF9nZXRvcHRfaW50ZXJuYWwgKGFyZ2MsIChjaGFyICoqKSBhcmd2LCBvcHRzdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc3RydWN0IG9wdGlvbiAqKSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCAqKSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgUE9TSVhMWV9DT1JSRUNUKTsKIH0KIAorI2lmZGVmIF9MSUJDCitpbnQKK19fcG9zaXhfZ2V0b3B0IChpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YsIGNvbnN0IGNoYXIgKm9wdHN0cmluZykKK3sKKyAgcmV0dXJuIF9nZXRvcHRfaW50ZXJuYWwgKGFyZ2MsIGFyZ3YsIG9wdHN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzdHJ1Y3Qgb3B0aW9uICopIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50ICopIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAxKTsKK30KKyNlbmRpZgorCiAMCiAjaWZkZWYgVEVTVAogCiAvKiBDb21waWxlIHdpdGggLURURVNUIHRvIG1ha2UgYW4gZXhlY3V0YWJsZSBmb3IgdXNlIGluIHRlc3RpbmcKLSAgIHRoZSBhYm92ZSBkZWZpbml0aW9uIG9mIGBnZXRvcHQnLiAgKi8KKyAgIHRoZSBhYm92ZSBkZWZpbml0aW9uIG9mICdnZXRvcHQnLiAgKi8KIAogaW50CiBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCkBAIC0xMTM3LDUxICsxMTkxLDUxIEBACiAKICAgICAgIGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJhYmM6ZDowMTIzNDU2Nzg5Iik7CiAgICAgICBpZiAoYyA9PSAtMSkKLQlicmVhazsKKyAgICAgICAgYnJlYWs7CiAKICAgICAgIHN3aXRjaCAoYykKLQl7Ci0JY2FzZSAnMCc6Ci0JY2FzZSAnMSc6Ci0JY2FzZSAnMic6Ci0JY2FzZSAnMyc6Ci0JY2FzZSAnNCc6Ci0JY2FzZSAnNSc6Ci0JY2FzZSAnNic6Ci0JY2FzZSAnNyc6Ci0JY2FzZSAnOCc6Ci0JY2FzZSAnOSc6Ci0JICBpZiAoZGlnaXRfb3B0aW5kICE9IDAgJiYgZGlnaXRfb3B0aW5kICE9IHRoaXNfb3B0aW9uX29wdGluZCkKLQkgICAgcHJpbnRmICgiZGlnaXRzIG9jY3VyIGluIHR3byBkaWZmZXJlbnQgYXJndi1lbGVtZW50cy5cbiIpOwotCSAgZGlnaXRfb3B0aW5kID0gdGhpc19vcHRpb25fb3B0aW5kOwotCSAgcHJpbnRmICgib3B0aW9uICVjXG4iLCBjKTsKLQkgIGJyZWFrOworICAgICAgICB7CisgICAgICAgIGNhc2UgJzAnOgorICAgICAgICBjYXNlICcxJzoKKyAgICAgICAgY2FzZSAnMic6CisgICAgICAgIGNhc2UgJzMnOgorICAgICAgICBjYXNlICc0JzoKKyAgICAgICAgY2FzZSAnNSc6CisgICAgICAgIGNhc2UgJzYnOgorICAgICAgICBjYXNlICc3JzoKKyAgICAgICAgY2FzZSAnOCc6CisgICAgICAgIGNhc2UgJzknOgorICAgICAgICAgIGlmIChkaWdpdF9vcHRpbmQgIT0gMCAmJiBkaWdpdF9vcHRpbmQgIT0gdGhpc19vcHRpb25fb3B0aW5kKQorICAgICAgICAgICAgcHJpbnRmICgiZGlnaXRzIG9jY3VyIGluIHR3byBkaWZmZXJlbnQgYXJndi1lbGVtZW50cy5cbiIpOworICAgICAgICAgIGRpZ2l0X29wdGluZCA9IHRoaXNfb3B0aW9uX29wdGluZDsKKyAgICAgICAgICBwcmludGYgKCJvcHRpb24gJWNcbiIsIGMpOworICAgICAgICAgIGJyZWFrOwogCi0JY2FzZSAnYSc6Ci0JICBwcmludGYgKCJvcHRpb24gYVxuIik7Ci0JICBicmVhazsKKyAgICAgICAgY2FzZSAnYSc6CisgICAgICAgICAgcHJpbnRmICgib3B0aW9uIGFcbiIpOworICAgICAgICAgIGJyZWFrOwogCi0JY2FzZSAnYic6Ci0JICBwcmludGYgKCJvcHRpb24gYlxuIik7Ci0JICBicmVhazsKKyAgICAgICAgY2FzZSAnYic6CisgICAgICAgICAgcHJpbnRmICgib3B0aW9uIGJcbiIpOworICAgICAgICAgIGJyZWFrOwogCi0JY2FzZSAnYyc6Ci0JICBwcmludGYgKCJvcHRpb24gYyB3aXRoIHZhbHVlIGAlcydcbiIsIG9wdGFyZyk7Ci0JICBicmVhazsKKyAgICAgICAgY2FzZSAnYyc6CisgICAgICAgICAgcHJpbnRmICgib3B0aW9uIGMgd2l0aCB2YWx1ZSAnJXMnXG4iLCBvcHRhcmcpOworICAgICAgICAgIGJyZWFrOwogCi0JY2FzZSAnPyc6Ci0JICBicmVhazsKKyAgICAgICAgY2FzZSAnPyc6CisgICAgICAgICAgYnJlYWs7CiAKLQlkZWZhdWx0OgotCSAgcHJpbnRmICgiPz8gZ2V0b3B0IHJldHVybmVkIGNoYXJhY3RlciBjb2RlIDAlbyA/P1xuIiwgYyk7Ci0JfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHByaW50ZiAoIj8/IGdldG9wdCByZXR1cm5lZCBjaGFyYWN0ZXIgY29kZSAwJW8gPz9cbiIsIGMpOworICAgICAgICB9CiAgICAgfQogCiAgIGlmIChvcHRpbmQgPCBhcmdjKQogICAgIHsKICAgICAgIHByaW50ZiAoIm5vbi1vcHRpb24gQVJHVi1lbGVtZW50czogIik7CiAgICAgICB3aGlsZSAob3B0aW5kIDwgYXJnYykKLQlwcmludGYgKCIlcyAiLCBhcmd2W29wdGluZCsrXSk7CisgICAgICAgIHByaW50ZiAoIiVzICIsIGFyZ3Zbb3B0aW5kKytdKTsKICAgICAgIHByaW50ZiAoIlxuIik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9saWIvZ2V0b3B0LmluLmggYi9saWIvZ2V0b3B0LmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZiNmRmYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nZXRvcHQuaW4uaApAQCAtMCwwICsxLDI1MyBAQAorLyogRGVjbGFyYXRpb25zIGZvciBnZXRvcHQuCisgICBDb3B5cmlnaHQgKEMpIDE5ODktMTk5NCwgMTk5Ni0xOTk5LCAyMDAxLCAyMDAzLTIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfR0VUT1BUX0gKKworI2lmIF9fR05VQ19fID49IDMKK0BQUkFHTUFfU1lTVEVNX0hFQURFUkAKKyNlbmRpZgorQFBSQUdNQV9DT0xVTU5TQAorCisvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gIFdlIG11c3QKKyAgIGFsc28gaW5mb3JtIHRoZSByZXBsYWNlbWVudCB1bmlzdGQuaCB0byBub3QgcmVjdXJzaXZlbHkgdXNlCisgICA8Z2V0b3B0Lmg+OyBvdXIgZGVmaW5pdGlvbnMgd2lsbCBiZSBwcmVzZW50IHNvb24gZW5vdWdoLiAgKi8KKyNpZiBASEFWRV9HRVRPUFRfSEAKKyMgZGVmaW5lIF9HTF9TWVNURU1fR0VUT1BUCisjIEBJTkNMVURFX05FWFRAIEBORVhUX0dFVE9QVF9IQAorIyB1bmRlZiBfR0xfU1lTVEVNX0dFVE9QVAorI2VuZGlmCisKKyNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX0dFVE9QVF9ICisKKyNpZm5kZWYgX19uZWVkX2dldG9wdAorIyBkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX0dFVE9QVF9IIDEKKyNlbmRpZgorCisvKiBTdGFuZGFsb25lIGFwcGxpY2F0aW9ucyBzaG91bGQgI2RlZmluZSBfX0dFVE9QVF9QUkVGSVggdG8gYW4KKyAgIGlkZW50aWZpZXIgdGhhdCBwcmVmaXhlcyB0aGUgZXh0ZXJuYWwgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMKKyAgIGRlZmluZWQgaW4gdGhpcyBoZWFkZXIuICBXaGVuIHRoaXMgaGFwcGVucywgaW5jbHVkZSB0aGUKKyAgIGhlYWRlcnMgdGhhdCBtaWdodCBkZWNsYXJlIGdldG9wdCBzbyB0aGF0IHRoZXkgd2lsbCBub3QgY2F1c2UKKyAgIGNvbmZ1c2lvbiBpZiBpbmNsdWRlZCBhZnRlciB0aGlzIGZpbGUgKGlmIHRoZSBzeXN0ZW0gaGFkIDxnZXRvcHQuaD4sCisgICB3ZSBoYXZlIGFscmVhZHkgaW5jbHVkZWQgaXQpLiAgVGhlbiBzeXN0ZW1hdGljYWxseSByZW5hbWUKKyAgIGlkZW50aWZpZXJzIHNvIHRoYXQgdGhleSBkbyBub3QgY29sbGlkZSB3aXRoIHRoZSBzeXN0ZW0gZnVuY3Rpb25zCisgICBhbmQgdmFyaWFibGVzLiAgUmVuYW1pbmcgYXZvaWRzIHByb2JsZW1zIHdpdGggc29tZSBjb21waWxlcnMgYW5kCisgICBsaW5rZXJzLiAgKi8KKyNpZiBkZWZpbmVkIF9fR0VUT1BUX1BSRUZJWCAmJiAhZGVmaW5lZCBfX25lZWRfZ2V0b3B0CisjIGlmICFASEFWRV9HRVRPUFRfSEAKKyMgIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyAgaW5jbHVkZSA8c3RkaW8uaD4KKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPgorIyBlbmRpZgorIyB1bmRlZiBfX25lZWRfZ2V0b3B0CisjIHVuZGVmIGdldG9wdAorIyB1bmRlZiBnZXRvcHRfbG9uZworIyB1bmRlZiBnZXRvcHRfbG9uZ19vbmx5CisjIHVuZGVmIG9wdGFyZworIyB1bmRlZiBvcHRlcnIKKyMgdW5kZWYgb3B0aW5kCisjIHVuZGVmIG9wdG9wdAorIyB1bmRlZiBvcHRpb24KKyMgZGVmaW5lIF9fR0VUT1BUX0NPTkNBVCh4LCB5KSB4ICMjIHkKKyMgZGVmaW5lIF9fR0VUT1BUX1hDT05DQVQoeCwgeSkgX19HRVRPUFRfQ09OQ0FUICh4LCB5KQorIyBkZWZpbmUgX19HRVRPUFRfSUQoeSkgX19HRVRPUFRfWENPTkNBVCAoX19HRVRPUFRfUFJFRklYLCB5KQorIyBkZWZpbmUgZ2V0b3B0IF9fR0VUT1BUX0lEIChnZXRvcHQpCisjIGRlZmluZSBnZXRvcHRfbG9uZyBfX0dFVE9QVF9JRCAoZ2V0b3B0X2xvbmcpCisjIGRlZmluZSBnZXRvcHRfbG9uZ19vbmx5IF9fR0VUT1BUX0lEIChnZXRvcHRfbG9uZ19vbmx5KQorIyBkZWZpbmUgb3B0YXJnIF9fR0VUT1BUX0lEIChvcHRhcmcpCisjIGRlZmluZSBvcHRlcnIgX19HRVRPUFRfSUQgKG9wdGVycikKKyMgZGVmaW5lIG9wdGluZCBfX0dFVE9QVF9JRCAob3B0aW5kKQorIyBkZWZpbmUgb3B0b3B0IF9fR0VUT1BUX0lEIChvcHRvcHQpCisjIGRlZmluZSBvcHRpb24gX19HRVRPUFRfSUQgKG9wdGlvbikKKyMgZGVmaW5lIF9nZXRvcHRfaW50ZXJuYWwgX19HRVRPUFRfSUQgKGdldG9wdF9pbnRlcm5hbCkKKyNlbmRpZgorCisvKiBTdGFuZGFsb25lIGFwcGxpY2F0aW9ucyBnZXQgY29ycmVjdCBwcm90b3R5cGVzIGZvciBnZXRvcHRfbG9uZyBhbmQKKyAgIGdldG9wdF9sb25nX29ubHk7IHRoZXkgZGVjbGFyZSAiY2hhciAqKmFyZ3YiLiAgbGliYyB1c2VzIHByb3RvdHlwZXMKKyAgIHdpdGggImNoYXIgKmNvbnN0ICphcmd2IiB0aGF0IGFyZSBpbmNvcnJlY3QgYmVjYXVzZSBnZXRvcHRfbG9uZyBhbmQKKyAgIGdldG9wdF9sb25nX29ubHkgY2FuIHBlcm11dGUgYXJndjsgdGhpcyBpcyByZXF1aXJlZCBmb3IgYmFja3dhcmQKKyAgIGNvbXBhdGliaWxpdHkgKGUuZy4sIGZvciBMU0IgMi4wLjEpLgorCisgICBUaGlzIHVzZWQgdG8gYmUgJyNpZiBkZWZpbmVkIF9fR0VUT1BUX1BSRUZJWCAmJiAhZGVmaW5lZCBfX25lZWRfZ2V0b3B0JywKKyAgIGJ1dCBpdCBjYXVzZWQgcmVkZWZpbml0aW9uIHdhcm5pbmdzIGlmIGJvdGggdW5pc3RkLmggYW5kIGdldG9wdC5oIHdlcmUKKyAgIGluY2x1ZGVkLCBzaW5jZSB1bmlzdGQuaCBpbmNsdWRlcyBnZXRvcHQuaCBoYXZpbmcgcHJldmlvdXNseSBkZWZpbmVkCisgICBfX25lZWRfZ2V0b3B0LgorCisgICBUaGUgb25seSBwbGFjZSB3aGVyZSBfX2dldG9wdF9hcmd2X2NvbnN0IGlzIHVzZWQgaXMgaW4gZGVmaW5pdGlvbnMKKyAgIG9mIGdldG9wdF9sb25nIGFuZCBnZXRvcHRfbG9uZ19vbmx5IGJlbG93LCBidXQgdGhlc2UgYXJlIHZpc2libGUKKyAgIG9ubHkgaWYgX19uZWVkX2dldG9wdCBpcyBub3QgZGVmaW5lZCwgc28gaXQgaXMgcXVpdGUgc2FmZSB0byByZXdyaXRlCisgICB0aGUgY29uZGl0aW9uYWwgYXMgZm9sbG93czoKKyovCisjaWYgIWRlZmluZWQgX19uZWVkX2dldG9wdAorIyBpZiBkZWZpbmVkIF9fR0VUT1BUX1BSRUZJWAorIyAgZGVmaW5lIF9fZ2V0b3B0X2FyZ3ZfY29uc3QgLyogZW1wdHkgKi8KKyMgZWxzZQorIyAgZGVmaW5lIF9fZ2V0b3B0X2FyZ3ZfY29uc3QgY29uc3QKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBJZiBfX0dOVV9MSUJSQVJZX18gaXMgbm90IGFscmVhZHkgZGVmaW5lZCwgZWl0aGVyIHdlIGFyZSBiZWluZyB1c2VkCisgICBzdGFuZGFsb25lLCBvciB0aGlzIGlzIHRoZSBmaXJzdCBoZWFkZXIgaW5jbHVkZWQgaW4gdGhlIHNvdXJjZSBmaWxlLgorICAgSWYgd2UgYXJlIGJlaW5nIHVzZWQgd2l0aCBnbGliYywgd2UgbmVlZCB0byBpbmNsdWRlIDxmZWF0dXJlcy5oPiwgYnV0CisgICB0aGF0IGRvZXMgbm90IGV4aXN0IGlmIHdlIGFyZSBzdGFuZGFsb25lLiAgU286IGlmIF9fR05VX0xJQlJBUllfXyBpcworICAgbm90IGRlZmluZWQsIGluY2x1ZGUgPGN0eXBlLmg+LCB3aGljaCB3aWxsIHB1bGwgaW4gPGZlYXR1cmVzLmg+IGZvciB1cworICAgaWYgaXQncyBmcm9tIGdsaWJjLiAgKFdoeSBjdHlwZS5oPyAgSXQncyBndWFyYW50ZWVkIHRvIGV4aXN0IGFuZCBpdAorICAgZG9lc24ndCBmbG9vZCB0aGUgbmFtZXNwYWNlIHdpdGggc3R1ZmYgdGhlIHdheSBzb21lIG90aGVyIGhlYWRlcnMgZG8uKSAgKi8KKyNpZiAhZGVmaW5lZCBfX0dOVV9MSUJSQVJZX18KKyMgaW5jbHVkZSA8Y3R5cGUuaD4KKyNlbmRpZgorCisjaWZuZGVmIF9fVEhST1cKKyMgaWZuZGVmIF9fR05VQ19QUkVSRVEKKyMgIGRlZmluZSBfX0dOVUNfUFJFUkVRKG1haiwgbWluKSAoMCkKKyMgZW5kaWYKKyMgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBfX0dOVUNfUFJFUkVRICgyLDgpCisjICBkZWZpbmUgX19USFJPVyAgICAgICB0aHJvdyAoKQorIyBlbHNlCisjICBkZWZpbmUgX19USFJPVworIyBlbmRpZgorI2VuZGlmCisKKy8qIFRoZSBkZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVMTCBpcyBjb3BpZWQgaGVyZS4gICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogRm9yIGNvbW11bmljYXRpb24gZnJvbSAnZ2V0b3B0JyB0byB0aGUgY2FsbGVyLgorICAgV2hlbiAnZ2V0b3B0JyBmaW5kcyBhbiBvcHRpb24gdGhhdCB0YWtlcyBhbiBhcmd1bWVudCwKKyAgIHRoZSBhcmd1bWVudCB2YWx1ZSBpcyByZXR1cm5lZCBoZXJlLgorICAgQWxzbywgd2hlbiAnb3JkZXJpbmcnIGlzIFJFVFVSTl9JTl9PUkRFUiwKKyAgIGVhY2ggbm9uLW9wdGlvbiBBUkdWLWVsZW1lbnQgaXMgcmV0dXJuZWQgaGVyZS4gICovCisKK2V4dGVybiBjaGFyICpvcHRhcmc7CisKKy8qIEluZGV4IGluIEFSR1Ygb2YgdGhlIG5leHQgZWxlbWVudCB0byBiZSBzY2FubmVkLgorICAgVGhpcyBpcyB1c2VkIGZvciBjb21tdW5pY2F0aW9uIHRvIGFuZCBmcm9tIHRoZSBjYWxsZXIKKyAgIGFuZCBmb3IgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHN1Y2Nlc3NpdmUgY2FsbHMgdG8gJ2dldG9wdCcuCisKKyAgIE9uIGVudHJ5IHRvICdnZXRvcHQnLCB6ZXJvIG1lYW5zIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGw7IGluaXRpYWxpemUuCisKKyAgIFdoZW4gJ2dldG9wdCcgcmV0dXJucyAtMSwgdGhpcyBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG9mIHRoZQorICAgbm9uLW9wdGlvbiBlbGVtZW50cyB0aGF0IHRoZSBjYWxsZXIgc2hvdWxkIGl0c2VsZiBzY2FuLgorCisgICBPdGhlcndpc2UsICdvcHRpbmQnIGNvbW11bmljYXRlcyBmcm9tIG9uZSBjYWxsIHRvIHRoZSBuZXh0CisgICBob3cgbXVjaCBvZiBBUkdWIGhhcyBiZWVuIHNjYW5uZWQgc28gZmFyLiAgKi8KKworZXh0ZXJuIGludCBvcHRpbmQ7CisKKy8qIENhbGxlcnMgc3RvcmUgemVybyBoZXJlIHRvIGluaGliaXQgdGhlIGVycm9yIG1lc3NhZ2UgJ2dldG9wdCcgcHJpbnRzCisgICBmb3IgdW5yZWNvZ25pemVkIG9wdGlvbnMuICAqLworCitleHRlcm4gaW50IG9wdGVycjsKKworLyogU2V0IHRvIGFuIG9wdGlvbiBjaGFyYWN0ZXIgd2hpY2ggd2FzIHVucmVjb2duaXplZC4gICovCisKK2V4dGVybiBpbnQgb3B0b3B0OworCisjaWZuZGVmIF9fbmVlZF9nZXRvcHQKKy8qIERlc2NyaWJlIHRoZSBsb25nLW5hbWVkIG9wdGlvbnMgcmVxdWVzdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KKyAgIFRoZSBMT05HX09QVElPTlMgYXJndW1lbnQgdG8gZ2V0b3B0X2xvbmcgb3IgZ2V0b3B0X2xvbmdfb25seSBpcyBhIHZlY3RvcgorICAgb2YgJ3N0cnVjdCBvcHRpb24nIHRlcm1pbmF0ZWQgYnkgYW4gZWxlbWVudCBjb250YWluaW5nIGEgbmFtZSB3aGljaCBpcworICAgemVyby4KKworICAgVGhlIGZpZWxkICdoYXNfYXJnJyBpczoKKyAgIG5vX2FyZ3VtZW50ICAgICAgICAgIChvciAwKSBpZiB0aGUgb3B0aW9uIGRvZXMgbm90IHRha2UgYW4gYXJndW1lbnQsCisgICByZXF1aXJlZF9hcmd1bWVudCAgICAob3IgMSkgaWYgdGhlIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCwKKyAgIG9wdGlvbmFsX2FyZ3VtZW50ICAgIChvciAyKSBpZiB0aGUgb3B0aW9uIHRha2VzIGFuIG9wdGlvbmFsIGFyZ3VtZW50LgorCisgICBJZiB0aGUgZmllbGQgJ2ZsYWcnIGlzIG5vdCBOVUxMLCBpdCBwb2ludHMgdG8gYSB2YXJpYWJsZSB0aGF0IGlzIHNldAorICAgdG8gdGhlIHZhbHVlIGdpdmVuIGluIHRoZSBmaWVsZCAndmFsJyB3aGVuIHRoZSBvcHRpb24gaXMgZm91bmQsIGJ1dAorICAgbGVmdCB1bmNoYW5nZWQgaWYgdGhlIG9wdGlvbiBpcyBub3QgZm91bmQuCisKKyAgIFRvIGhhdmUgYSBsb25nLW5hbWVkIG9wdGlvbiBkbyBzb21ldGhpbmcgb3RoZXIgdGhhbiBzZXQgYW4gJ2ludCcgdG8KKyAgIGEgY29tcGlsZWQtaW4gY29uc3RhbnQsIHN1Y2ggYXMgc2V0IGEgdmFsdWUgZnJvbSAnb3B0YXJnJywgc2V0IHRoZQorICAgb3B0aW9uJ3MgJ2ZsYWcnIGZpZWxkIHRvIHplcm8gYW5kIGl0cyAndmFsJyBmaWVsZCB0byBhIG5vbnplcm8KKyAgIHZhbHVlICh0aGUgZXF1aXZhbGVudCBzaW5nbGUtbGV0dGVyIG9wdGlvbiBjaGFyYWN0ZXIsIGlmIHRoZXJlIGlzCisgICBvbmUpLiAgRm9yIGxvbmcgb3B0aW9ucyB0aGF0IGhhdmUgYSB6ZXJvICdmbGFnJyBmaWVsZCwgJ2dldG9wdCcKKyAgIHJldHVybnMgdGhlIGNvbnRlbnRzIG9mIHRoZSAndmFsJyBmaWVsZC4gICovCisKKyMgaWYgIUdOVUxJQl9kZWZpbmVkX3N0cnVjdF9vcHRpb24KK3N0cnVjdCBvcHRpb24KK3sKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgLyogaGFzX2FyZyBjYW4ndCBiZSBhbiBlbnVtIGJlY2F1c2Ugc29tZSBjb21waWxlcnMgY29tcGxhaW4gYWJvdXQKKyAgICAgdHlwZSBtaXNtYXRjaGVzIGluIGFsbCB0aGUgY29kZSB0aGF0IGFzc3VtZXMgaXQgaXMgYW4gaW50LiAgKi8KKyAgaW50IGhhc19hcmc7CisgIGludCAqZmxhZzsKKyAgaW50IHZhbDsKK307CisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfc3RydWN0X29wdGlvbiAxCisjIGVuZGlmCisKKy8qIE5hbWVzIGZvciB0aGUgdmFsdWVzIG9mIHRoZSAnaGFzX2FyZycgZmllbGQgb2YgJ3N0cnVjdCBvcHRpb24nLiAgKi8KKworIyBkZWZpbmUgbm9fYXJndW1lbnQgICAgICAgICAgICAwCisjIGRlZmluZSByZXF1aXJlZF9hcmd1bWVudCAgICAgIDEKKyMgZGVmaW5lIG9wdGlvbmFsX2FyZ3VtZW50ICAgICAgMgorI2VuZGlmICAvKiBuZWVkIGdldG9wdCAqLworCisKKy8qIEdldCBkZWZpbml0aW9ucyBhbmQgcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIHRvIHByb2Nlc3MgdGhlCisgICBhcmd1bWVudHMgaW4gQVJHViAoQVJHQyBvZiB0aGVtLCBtaW51cyB0aGUgcHJvZ3JhbSBuYW1lKSBmb3IKKyAgIG9wdGlvbnMgZ2l2ZW4gaW4gT1BUUy4KKworICAgUmV0dXJuIHRoZSBvcHRpb24gY2hhcmFjdGVyIGZyb20gT1BUUyBqdXN0IHJlYWQuICBSZXR1cm4gLTEgd2hlbgorICAgdGhlcmUgYXJlIG5vIG1vcmUgb3B0aW9ucy4gIEZvciB1bnJlY29nbml6ZWQgb3B0aW9ucywgb3Igb3B0aW9ucworICAgbWlzc2luZyBhcmd1bWVudHMsICdvcHRvcHQnIGlzIHNldCB0byB0aGUgb3B0aW9uIGxldHRlciwgYW5kICc/JyBpcworICAgcmV0dXJuZWQuCisKKyAgIFRoZSBPUFRTIHN0cmluZyBpcyBhIGxpc3Qgb2YgY2hhcmFjdGVycyB3aGljaCBhcmUgcmVjb2duaXplZCBvcHRpb24KKyAgIGxldHRlcnMsIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgY29sb25zLCBzcGVjaWZ5aW5nIHRoYXQgdGhhdCBsZXR0ZXIKKyAgIHRha2VzIGFuIGFyZ3VtZW50LCB0byBiZSBwbGFjZWQgaW4gJ29wdGFyZycuCisKKyAgIElmIGEgbGV0dGVyIGluIE9QVFMgaXMgZm9sbG93ZWQgYnkgdHdvIGNvbG9ucywgaXRzIGFyZ3VtZW50IGlzCisgICBvcHRpb25hbC4gIFRoaXMgYmVoYXZpb3IgaXMgc3BlY2lmaWMgdG8gdGhlIEdOVSAnZ2V0b3B0Jy4KKworICAgVGhlIGFyZ3VtZW50ICctLScgY2F1c2VzIHByZW1hdHVyZSB0ZXJtaW5hdGlvbiBvZiBhcmd1bWVudAorICAgc2Nhbm5pbmcsIGV4cGxpY2l0bHkgdGVsbGluZyAnZ2V0b3B0JyB0aGF0IHRoZXJlIGFyZSBubyBtb3JlCisgICBvcHRpb25zLgorCisgICBJZiBPUFRTIGJlZ2lucyB3aXRoICctJywgdGhlbiBub24tb3B0aW9uIGFyZ3VtZW50cyBhcmUgdHJlYXRlZCBhcworICAgYXJndW1lbnRzIHRvIHRoZSBvcHRpb24gJ1wxJy4gIFRoaXMgYmVoYXZpb3IgaXMgc3BlY2lmaWMgdG8gdGhlIEdOVQorICAgJ2dldG9wdCcuICBJZiBPUFRTIGJlZ2lucyB3aXRoICcrJywgb3IgUE9TSVhMWV9DT1JSRUNUIGlzIHNldCBpbgorICAgdGhlIGVudmlyb25tZW50LCB0aGVuIGRvIG5vdCBwZXJtdXRlIGFyZ3VtZW50cy4gICovCisKK2V4dGVybiBpbnQgZ2V0b3B0IChpbnQgX19fYXJnYywgY2hhciAqY29uc3QgKl9fX2FyZ3YsIGNvbnN0IGNoYXIgKl9fc2hvcnRvcHRzKQorICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMiwgMykpOworCisjaWZuZGVmIF9fbmVlZF9nZXRvcHQKK2V4dGVybiBpbnQgZ2V0b3B0X2xvbmcgKGludCBfX19hcmdjLCBjaGFyICpfX2dldG9wdF9hcmd2X2NvbnN0ICpfX19hcmd2LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX19zaG9ydG9wdHMsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpfX2xvbmdvcHRzLCBpbnQgKl9fbG9uZ2luZCkKKyAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDIsIDMpKTsKK2V4dGVybiBpbnQgZ2V0b3B0X2xvbmdfb25seSAoaW50IF9fX2FyZ2MsIGNoYXIgKl9fZ2V0b3B0X2FyZ3ZfY29uc3QgKl9fX2FyZ3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9fc2hvcnRvcHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpfX2xvbmdvcHRzLCBpbnQgKl9fbG9uZ2luZCkKKyAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDIsIDMpKTsKKworI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKy8qIE1ha2Ugc3VyZSB3ZSBsYXRlciBjYW4gZ2V0IGFsbCB0aGUgZGVmaW5pdGlvbnMgYW5kIGRlY2xhcmF0aW9ucy4gICovCisjdW5kZWYgX19uZWVkX2dldG9wdAorCisjZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX0dFVE9QVF9IICovCisjZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX0dFVE9QVF9IICovCmRpZmYgLS1naXQgYS9saWIvZ2V0b3B0MS5jIGIvbGliL2dldG9wdDEuYwppbmRleCAyNWQ3OTI2Li5mYjJhOGY1IDEwMDY0NAotLS0gYS9saWIvZ2V0b3B0MS5jCisrKyBiL2xpYi9nZXRvcHQxLmMKQEAgLTEsMjkgKzEsMjUgQEAKIC8qIGdldG9wdF9sb25nIGFuZCBnZXRvcHRfbG9uZ19vbmx5IGVudHJ5IHBvaW50cyBmb3IgR05VIGdldG9wdC4KLSAgIENvcHlyaWdodCAoQykgMTk4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5Niw5Nyw5OCwyMDA0Ci0gICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29weXJpZ2h0IChDKSAxOTg3LTE5OTQsIDE5OTYtMTk5OCwgMjAwNCwgMjAwNiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4KICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgogCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAMCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgotCiAjaWZkZWYgX0xJQkMKICMgaW5jbHVkZSA8Z2V0b3B0Lmg+CiAjZWxzZQorIyBpbmNsdWRlIDxjb25maWcuaD4KICMgaW5jbHVkZSAiZ2V0b3B0LmgiCiAjZW5kaWYKICNpbmNsdWRlICJnZXRvcHRfaW50LmgiCkBAIC0zNiwyNSArMzIsMjUgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgogCi0jaWZuZGVmCU5VTEwKKyNpZm5kZWYgTlVMTAogI2RlZmluZSBOVUxMIDAKICNlbmRpZgogCiBpbnQKIGdldG9wdF9sb25nIChpbnQgYXJnYywgY2hhciAqX19nZXRvcHRfYXJndl9jb25zdCAqYXJndiwgY29uc3QgY2hhciAqb3B0aW9ucywKLQkgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdfb3B0aW9ucywgaW50ICpvcHRfaW5kZXgpCisgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ19vcHRpb25zLCBpbnQgKm9wdF9pbmRleCkKIHsKICAgcmV0dXJuIF9nZXRvcHRfaW50ZXJuYWwgKGFyZ2MsIChjaGFyICoqKSBhcmd2LCBvcHRpb25zLCBsb25nX29wdGlvbnMsCi0JCQkgICBvcHRfaW5kZXgsIDAsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X2luZGV4LCAwLCAwKTsKIH0KIAogaW50CiBfZ2V0b3B0X2xvbmdfciAoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpvcHRpb25zLAotCQljb25zdCBzdHJ1Y3Qgb3B0aW9uICpsb25nX29wdGlvbnMsIGludCAqb3B0X2luZGV4LAotCQlzdHJ1Y3QgX2dldG9wdF9kYXRhICpkKQorICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdfb3B0aW9ucywgaW50ICpvcHRfaW5kZXgsCisgICAgICAgICAgICAgICAgc3RydWN0IF9nZXRvcHRfZGF0YSAqZCkKIHsKICAgcmV0dXJuIF9nZXRvcHRfaW50ZXJuYWxfciAoYXJnYywgYXJndiwgb3B0aW9ucywgbG9uZ19vcHRpb25zLCBvcHRfaW5kZXgsCi0JCQkgICAgIDAsIDAsIGQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBkLCAwKTsKIH0KIAogLyogTGlrZSBnZXRvcHRfbG9uZywgYnV0ICctJyBhcyB3ZWxsIGFzICctLScgY2FuIGluZGljYXRlIGEgbG9uZyBvcHRpb24uCkBAIC02NCwyMCArNjAsMjAgQEAKIAogaW50CiBnZXRvcHRfbG9uZ19vbmx5IChpbnQgYXJnYywgY2hhciAqX19nZXRvcHRfYXJndl9jb25zdCAqYXJndiwKLQkJICBjb25zdCBjaGFyICpvcHRpb25zLAotCQkgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdfb3B0aW9ucywgaW50ICpvcHRfaW5kZXgpCisgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpvcHRpb25zLAorICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ19vcHRpb25zLCBpbnQgKm9wdF9pbmRleCkKIHsKICAgcmV0dXJuIF9nZXRvcHRfaW50ZXJuYWwgKGFyZ2MsIChjaGFyICoqKSBhcmd2LCBvcHRpb25zLCBsb25nX29wdGlvbnMsCi0JCQkgICBvcHRfaW5kZXgsIDEsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X2luZGV4LCAxLCAwKTsKIH0KIAogaW50CiBfZ2V0b3B0X2xvbmdfb25seV9yIChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKm9wdGlvbnMsCi0JCSAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ19vcHRpb25zLCBpbnQgKm9wdF9pbmRleCwKLQkJICAgICBzdHJ1Y3QgX2dldG9wdF9kYXRhICpkKQorICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ19vcHRpb25zLCBpbnQgKm9wdF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfZ2V0b3B0X2RhdGEgKmQpCiB7CiAgIHJldHVybiBfZ2V0b3B0X2ludGVybmFsX3IgKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGxvbmdfb3B0aW9ucywgb3B0X2luZGV4LAotCQkJICAgICAxLCAwLCBkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgZCwgMCk7CiB9CiAKIAwKQEAgLTk1LDc2ICs5MSw3NiBAQAogICAgIHsKICAgICAgIGludCB0aGlzX29wdGlvbl9vcHRpbmQgPSBvcHRpbmQgPyBvcHRpbmQgOiAxOwogICAgICAgaW50IG9wdGlvbl9pbmRleCA9IDA7Ci0gICAgICBzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9CisgICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9CiAgICAgICB7Ci0JeyJhZGQiLCAxLCAwLCAwfSwKLQl7ImFwcGVuZCIsIDAsIDAsIDB9LAotCXsiZGVsZXRlIiwgMSwgMCwgMH0sCi0JeyJ2ZXJib3NlIiwgMCwgMCwgMH0sCi0JeyJjcmVhdGUiLCAwLCAwLCAwfSwKLQl7ImZpbGUiLCAxLCAwLCAwfSwKLQl7MCwgMCwgMCwgMH0KKyAgICAgICAgeyJhZGQiLCAxLCAwLCAwfSwKKyAgICAgICAgeyJhcHBlbmQiLCAwLCAwLCAwfSwKKyAgICAgICAgeyJkZWxldGUiLCAxLCAwLCAwfSwKKyAgICAgICAgeyJ2ZXJib3NlIiwgMCwgMCwgMH0sCisgICAgICAgIHsiY3JlYXRlIiwgMCwgMCwgMH0sCisgICAgICAgIHsiZmlsZSIsIDEsIDAsIDB9LAorICAgICAgICB7MCwgMCwgMCwgMH0KICAgICAgIH07CiAKICAgICAgIGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgImFiYzpkOjAxMjM0NTY3ODkiLAotCQkgICAgICAgbG9uZ19vcHRpb25zLCAmb3B0aW9uX2luZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgbG9uZ19vcHRpb25zLCAmb3B0aW9uX2luZGV4KTsKICAgICAgIGlmIChjID09IC0xKQotCWJyZWFrOworICAgICAgICBicmVhazsKIAogICAgICAgc3dpdGNoIChjKQotCXsKLQljYXNlIDA6Ci0JICBwcmludGYgKCJvcHRpb24gJXMiLCBsb25nX29wdGlvbnNbb3B0aW9uX2luZGV4XS5uYW1lKTsKLQkgIGlmIChvcHRhcmcpCi0JICAgIHByaW50ZiAoIiB3aXRoIGFyZyAlcyIsIG9wdGFyZyk7Ci0JICBwcmludGYgKCJcbiIpOwotCSAgYnJlYWs7CisgICAgICAgIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgIHByaW50ZiAoIm9wdGlvbiAlcyIsIGxvbmdfb3B0aW9uc1tvcHRpb25faW5kZXhdLm5hbWUpOworICAgICAgICAgIGlmIChvcHRhcmcpCisgICAgICAgICAgICBwcmludGYgKCIgd2l0aCBhcmcgJXMiLCBvcHRhcmcpOworICAgICAgICAgIHByaW50ZiAoIlxuIik7CisgICAgICAgICAgYnJlYWs7CiAKLQljYXNlICcwJzoKLQljYXNlICcxJzoKLQljYXNlICcyJzoKLQljYXNlICczJzoKLQljYXNlICc0JzoKLQljYXNlICc1JzoKLQljYXNlICc2JzoKLQljYXNlICc3JzoKLQljYXNlICc4JzoKLQljYXNlICc5JzoKLQkgIGlmIChkaWdpdF9vcHRpbmQgIT0gMCAmJiBkaWdpdF9vcHRpbmQgIT0gdGhpc19vcHRpb25fb3B0aW5kKQotCSAgICBwcmludGYgKCJkaWdpdHMgb2NjdXIgaW4gdHdvIGRpZmZlcmVudCBhcmd2LWVsZW1lbnRzLlxuIik7Ci0JICBkaWdpdF9vcHRpbmQgPSB0aGlzX29wdGlvbl9vcHRpbmQ7Ci0JICBwcmludGYgKCJvcHRpb24gJWNcbiIsIGMpOwotCSAgYnJlYWs7CisgICAgICAgIGNhc2UgJzAnOgorICAgICAgICBjYXNlICcxJzoKKyAgICAgICAgY2FzZSAnMic6CisgICAgICAgIGNhc2UgJzMnOgorICAgICAgICBjYXNlICc0JzoKKyAgICAgICAgY2FzZSAnNSc6CisgICAgICAgIGNhc2UgJzYnOgorICAgICAgICBjYXNlICc3JzoKKyAgICAgICAgY2FzZSAnOCc6CisgICAgICAgIGNhc2UgJzknOgorICAgICAgICAgIGlmIChkaWdpdF9vcHRpbmQgIT0gMCAmJiBkaWdpdF9vcHRpbmQgIT0gdGhpc19vcHRpb25fb3B0aW5kKQorICAgICAgICAgICAgcHJpbnRmICgiZGlnaXRzIG9jY3VyIGluIHR3byBkaWZmZXJlbnQgYXJndi1lbGVtZW50cy5cbiIpOworICAgICAgICAgIGRpZ2l0X29wdGluZCA9IHRoaXNfb3B0aW9uX29wdGluZDsKKyAgICAgICAgICBwcmludGYgKCJvcHRpb24gJWNcbiIsIGMpOworICAgICAgICAgIGJyZWFrOwogCi0JY2FzZSAnYSc6Ci0JICBwcmludGYgKCJvcHRpb24gYVxuIik7Ci0JICBicmVhazsKKyAgICAgICAgY2FzZSAnYSc6CisgICAgICAgICAgcHJpbnRmICgib3B0aW9uIGFcbiIpOworICAgICAgICAgIGJyZWFrOwogCi0JY2FzZSAnYic6Ci0JICBwcmludGYgKCJvcHRpb24gYlxuIik7Ci0JICBicmVhazsKKyAgICAgICAgY2FzZSAnYic6CisgICAgICAgICAgcHJpbnRmICgib3B0aW9uIGJcbiIpOworICAgICAgICAgIGJyZWFrOwogCi0JY2FzZSAnYyc6Ci0JICBwcmludGYgKCJvcHRpb24gYyB3aXRoIHZhbHVlIGAlcydcbiIsIG9wdGFyZyk7Ci0JICBicmVhazsKKyAgICAgICAgY2FzZSAnYyc6CisgICAgICAgICAgcHJpbnRmICgib3B0aW9uIGMgd2l0aCB2YWx1ZSAnJXMnXG4iLCBvcHRhcmcpOworICAgICAgICAgIGJyZWFrOwogCi0JY2FzZSAnZCc6Ci0JICBwcmludGYgKCJvcHRpb24gZCB3aXRoIHZhbHVlIGAlcydcbiIsIG9wdGFyZyk7Ci0JICBicmVhazsKKyAgICAgICAgY2FzZSAnZCc6CisgICAgICAgICAgcHJpbnRmICgib3B0aW9uIGQgd2l0aCB2YWx1ZSAnJXMnXG4iLCBvcHRhcmcpOworICAgICAgICAgIGJyZWFrOwogCi0JY2FzZSAnPyc6Ci0JICBicmVhazsKKyAgICAgICAgY2FzZSAnPyc6CisgICAgICAgICAgYnJlYWs7CiAKLQlkZWZhdWx0OgotCSAgcHJpbnRmICgiPz8gZ2V0b3B0IHJldHVybmVkIGNoYXJhY3RlciBjb2RlIDAlbyA/P1xuIiwgYyk7Ci0JfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHByaW50ZiAoIj8/IGdldG9wdCByZXR1cm5lZCBjaGFyYWN0ZXIgY29kZSAwJW8gPz9cbiIsIGMpOworICAgICAgICB9CiAgICAgfQogCiAgIGlmIChvcHRpbmQgPCBhcmdjKQogICAgIHsKICAgICAgIHByaW50ZiAoIm5vbi1vcHRpb24gQVJHVi1lbGVtZW50czogIik7CiAgICAgICB3aGlsZSAob3B0aW5kIDwgYXJnYykKLQlwcmludGYgKCIlcyAiLCBhcmd2W29wdGluZCsrXSk7CisgICAgICAgIHByaW50ZiAoIiVzICIsIGFyZ3Zbb3B0aW5kKytdKTsKICAgICAgIHByaW50ZiAoIlxuIik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9saWIvZ2V0b3B0Xy5oIGIvbGliL2dldG9wdF8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M0MDZlNS4uMDAwMDAwMAotLS0gYS9saWIvZ2V0b3B0Xy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLS8qIERlY2xhcmF0aW9ucyBmb3IgZ2V0b3B0LgotICAgQ29weXJpZ2h0IChDKSAxOTg5LTE5OTQsMTk5Ni0xOTk5LDIwMDEsMjAwMywyMDA0LDIwMDUKLSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwotCi0jaWZuZGVmIF9HRVRPUFRfSAotCi0jaWZuZGVmIF9fbmVlZF9nZXRvcHQKLSMgZGVmaW5lIF9HRVRPUFRfSCAxCi0jZW5kaWYKLQotLyogU3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMgc2hvdWxkICNkZWZpbmUgX19HRVRPUFRfUFJFRklYIHRvIGFuCi0gICBpZGVudGlmaWVyIHRoYXQgcHJlZml4ZXMgdGhlIGV4dGVybmFsIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzCi0gICBkZWZpbmVkIGluIHRoaXMgaGVhZGVyLiAgV2hlbiB0aGlzIGhhcHBlbnMsIGluY2x1ZGUgdGhlCi0gICBoZWFkZXJzIHRoYXQgbWlnaHQgZGVjbGFyZSBnZXRvcHQgc28gdGhhdCB0aGV5IHdpbGwgbm90IGNhdXNlCi0gICBjb25mdXNpb24gaWYgaW5jbHVkZWQgYWZ0ZXIgdGhpcyBmaWxlLiAgVGhlbiBzeXN0ZW1hdGljYWxseSByZW5hbWUKLSAgIGlkZW50aWZpZXJzIHNvIHRoYXQgdGhleSBkbyBub3QgY29sbGlkZSB3aXRoIHRoZSBzeXN0ZW0gZnVuY3Rpb25zCi0gICBhbmQgdmFyaWFibGVzLiAgUmVuYW1pbmcgYXZvaWRzIHByb2JsZW1zIHdpdGggc29tZSBjb21waWxlcnMgYW5kCi0gICBsaW5rZXJzLiAgKi8KLSNpZiBkZWZpbmVkIF9fR0VUT1BUX1BSRUZJWCAmJiAhZGVmaW5lZCBfX25lZWRfZ2V0b3B0Ci0jIGluY2x1ZGUgPHN0ZGxpYi5oPgotIyBpbmNsdWRlIDxzdGRpby5oPgotIyBpbmNsdWRlIDx1bmlzdGQuaD4KLSMgdW5kZWYgX19uZWVkX2dldG9wdAotIyB1bmRlZiBnZXRvcHQKLSMgdW5kZWYgZ2V0b3B0X2xvbmcKLSMgdW5kZWYgZ2V0b3B0X2xvbmdfb25seQotIyB1bmRlZiBvcHRhcmcKLSMgdW5kZWYgb3B0ZXJyCi0jIHVuZGVmIG9wdGluZAotIyB1bmRlZiBvcHRvcHQKLSMgZGVmaW5lIF9fR0VUT1BUX0NPTkNBVCh4LCB5KSB4ICMjIHkKLSMgZGVmaW5lIF9fR0VUT1BUX1hDT05DQVQoeCwgeSkgX19HRVRPUFRfQ09OQ0FUICh4LCB5KQotIyBkZWZpbmUgX19HRVRPUFRfSUQoeSkgX19HRVRPUFRfWENPTkNBVCAoX19HRVRPUFRfUFJFRklYLCB5KQotIyBkZWZpbmUgZ2V0b3B0IF9fR0VUT1BUX0lEIChnZXRvcHQpCi0jIGRlZmluZSBnZXRvcHRfbG9uZyBfX0dFVE9QVF9JRCAoZ2V0b3B0X2xvbmcpCi0jIGRlZmluZSBnZXRvcHRfbG9uZ19vbmx5IF9fR0VUT1BUX0lEIChnZXRvcHRfbG9uZ19vbmx5KQotIyBkZWZpbmUgb3B0YXJnIF9fR0VUT1BUX0lEIChvcHRhcmcpCi0jIGRlZmluZSBvcHRlcnIgX19HRVRPUFRfSUQgKG9wdGVycikKLSMgZGVmaW5lIG9wdGluZCBfX0dFVE9QVF9JRCAob3B0aW5kKQotIyBkZWZpbmUgb3B0b3B0IF9fR0VUT1BUX0lEIChvcHRvcHQpCi0jZW5kaWYKLQotLyogU3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMgZ2V0IGNvcnJlY3QgcHJvdG90eXBlcyBmb3IgZ2V0b3B0X2xvbmcgYW5kCi0gICBnZXRvcHRfbG9uZ19vbmx5OyB0aGV5IGRlY2xhcmUgImNoYXIgKiphcmd2Ii4gIGxpYmMgdXNlcyBwcm90b3R5cGVzCi0gICB3aXRoICJjaGFyICpjb25zdCAqYXJndiIgdGhhdCBhcmUgaW5jb3JyZWN0IGJlY2F1c2UgZ2V0b3B0X2xvbmcgYW5kCi0gICBnZXRvcHRfbG9uZ19vbmx5IGNhbiBwZXJtdXRlIGFyZ3Y7IHRoaXMgaXMgcmVxdWlyZWQgZm9yIGJhY2t3YXJkCi0gICBjb21wYXRpYmlsaXR5IChlLmcuLCBmb3IgTFNCIDIuMC4xKS4KLQotICAgVGhpcyB1c2VkIHRvIGJlIGAjaWYgZGVmaW5lZCBfX0dFVE9QVF9QUkVGSVggJiYgIWRlZmluZWQgX19uZWVkX2dldG9wdCcsCi0gICBidXQgaXQgY2F1c2VkIHJlZGVmaW5pdGlvbiB3YXJuaW5ncyBpZiBib3RoIHVuaXN0ZC5oIGFuZCBnZXRvcHQuaCB3ZXJlCi0gICBpbmNsdWRlZCwgc2luY2UgdW5pc3RkLmggaW5jbHVkZXMgZ2V0b3B0LmggaGF2aW5nIHByZXZpb3VzbHkgZGVmaW5lZAotICAgX19uZWVkX2dldG9wdC4KLQotICAgVGhlIG9ubHkgcGxhY2Ugd2hlcmUgX19nZXRvcHRfYXJndl9jb25zdCBpcyB1c2VkIGlzIGluIGRlZmluaXRpb25zCi0gICBvZiBnZXRvcHRfbG9uZyBhbmQgZ2V0b3B0X2xvbmdfb25seSBiZWxvdywgYnV0IHRoZXNlIGFyZSB2aXNpYmxlCi0gICBvbmx5IGlmIF9fbmVlZF9nZXRvcHQgaXMgbm90IGRlZmluZWQsIHNvIGl0IGlzIHF1aXRlIHNhZmUgdG8gcmV3cml0ZQotICAgdGhlIGNvbmRpdGlvbmFsIGFzIGZvbGxvd3M6Ci0qLwotI2lmICFkZWZpbmVkIF9fbmVlZF9nZXRvcHQKLSMgaWYgZGVmaW5lZCBfX0dFVE9QVF9QUkVGSVgKLSMgIGRlZmluZSBfX2dldG9wdF9hcmd2X2NvbnN0IC8qIGVtcHR5ICovCi0jIGVsc2UKLSMgIGRlZmluZSBfX2dldG9wdF9hcmd2X2NvbnN0IGNvbnN0Ci0jIGVuZGlmCi0jZW5kaWYKLQotLyogSWYgX19HTlVfTElCUkFSWV9fIGlzIG5vdCBhbHJlYWR5IGRlZmluZWQsIGVpdGhlciB3ZSBhcmUgYmVpbmcgdXNlZAotICAgc3RhbmRhbG9uZSwgb3IgdGhpcyBpcyB0aGUgZmlyc3QgaGVhZGVyIGluY2x1ZGVkIGluIHRoZSBzb3VyY2UgZmlsZS4KLSAgIElmIHdlIGFyZSBiZWluZyB1c2VkIHdpdGggZ2xpYmMsIHdlIG5lZWQgdG8gaW5jbHVkZSA8ZmVhdHVyZXMuaD4sIGJ1dAotICAgdGhhdCBkb2VzIG5vdCBleGlzdCBpZiB3ZSBhcmUgc3RhbmRhbG9uZS4gIFNvOiBpZiBfX0dOVV9MSUJSQVJZX18gaXMKLSAgIG5vdCBkZWZpbmVkLCBpbmNsdWRlIDxjdHlwZS5oPiwgd2hpY2ggd2lsbCBwdWxsIGluIDxmZWF0dXJlcy5oPiBmb3IgdXMKLSAgIGlmIGl0J3MgZnJvbSBnbGliYy4gIChXaHkgY3R5cGUuaD8gIEl0J3MgZ3VhcmFudGVlZCB0byBleGlzdCBhbmQgaXQKLSAgIGRvZXNuJ3QgZmxvb2QgdGhlIG5hbWVzcGFjZSB3aXRoIHN0dWZmIHRoZSB3YXkgc29tZSBvdGhlciBoZWFkZXJzIGRvLikgICovCi0jaWYgIWRlZmluZWQgX19HTlVfTElCUkFSWV9fCi0jIGluY2x1ZGUgPGN0eXBlLmg+Ci0jZW5kaWYKLQotI2lmbmRlZiBfX1RIUk9XCi0jIGlmbmRlZiBfX0dOVUNfUFJFUkVRCi0jICBkZWZpbmUgX19HTlVDX1BSRVJFUShtYWosIG1pbikgKDApCi0jIGVuZGlmCi0jIGlmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgX19HTlVDX1BSRVJFUSAoMiw4KQotIyAgZGVmaW5lIF9fVEhST1cJdGhyb3cgKCkKLSMgZWxzZQotIyAgZGVmaW5lIF9fVEhST1cKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYJX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLS8qIEZvciBjb21tdW5pY2F0aW9uIGZyb20gYGdldG9wdCcgdG8gdGhlIGNhbGxlci4KLSAgIFdoZW4gYGdldG9wdCcgZmluZHMgYW4gb3B0aW9uIHRoYXQgdGFrZXMgYW4gYXJndW1lbnQsCi0gICB0aGUgYXJndW1lbnQgdmFsdWUgaXMgcmV0dXJuZWQgaGVyZS4KLSAgIEFsc28sIHdoZW4gYG9yZGVyaW5nJyBpcyBSRVRVUk5fSU5fT1JERVIsCi0gICBlYWNoIG5vbi1vcHRpb24gQVJHVi1lbGVtZW50IGlzIHJldHVybmVkIGhlcmUuICAqLwotCi1leHRlcm4gY2hhciAqb3B0YXJnOwotCi0vKiBJbmRleCBpbiBBUkdWIG9mIHRoZSBuZXh0IGVsZW1lbnQgdG8gYmUgc2Nhbm5lZC4KLSAgIFRoaXMgaXMgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiB0byBhbmQgZnJvbSB0aGUgY2FsbGVyCi0gICBhbmQgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiBzdWNjZXNzaXZlIGNhbGxzIHRvIGBnZXRvcHQnLgotCi0gICBPbiBlbnRyeSB0byBgZ2V0b3B0JywgemVybyBtZWFucyB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsOyBpbml0aWFsaXplLgotCi0gICBXaGVuIGBnZXRvcHQnIHJldHVybnMgLTEsIHRoaXMgaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvZiB0aGUKLSAgIG5vbi1vcHRpb24gZWxlbWVudHMgdGhhdCB0aGUgY2FsbGVyIHNob3VsZCBpdHNlbGYgc2Nhbi4KLQotICAgT3RoZXJ3aXNlLCBgb3B0aW5kJyBjb21tdW5pY2F0ZXMgZnJvbSBvbmUgY2FsbCB0byB0aGUgbmV4dAotICAgaG93IG11Y2ggb2YgQVJHViBoYXMgYmVlbiBzY2FubmVkIHNvIGZhci4gICovCi0KLWV4dGVybiBpbnQgb3B0aW5kOwotCi0vKiBDYWxsZXJzIHN0b3JlIHplcm8gaGVyZSB0byBpbmhpYml0IHRoZSBlcnJvciBtZXNzYWdlIGBnZXRvcHQnIHByaW50cwotICAgZm9yIHVucmVjb2duaXplZCBvcHRpb25zLiAgKi8KLQotZXh0ZXJuIGludCBvcHRlcnI7Ci0KLS8qIFNldCB0byBhbiBvcHRpb24gY2hhcmFjdGVyIHdoaWNoIHdhcyB1bnJlY29nbml6ZWQuICAqLwotCi1leHRlcm4gaW50IG9wdG9wdDsKLQotI2lmbmRlZiBfX25lZWRfZ2V0b3B0Ci0vKiBEZXNjcmliZSB0aGUgbG9uZy1uYW1lZCBvcHRpb25zIHJlcXVlc3RlZCBieSB0aGUgYXBwbGljYXRpb24uCi0gICBUaGUgTE9OR19PUFRJT05TIGFyZ3VtZW50IHRvIGdldG9wdF9sb25nIG9yIGdldG9wdF9sb25nX29ubHkgaXMgYSB2ZWN0b3IKLSAgIG9mIGBzdHJ1Y3Qgb3B0aW9uJyB0ZXJtaW5hdGVkIGJ5IGFuIGVsZW1lbnQgY29udGFpbmluZyBhIG5hbWUgd2hpY2ggaXMKLSAgIHplcm8uCi0KLSAgIFRoZSBmaWVsZCBgaGFzX2FyZycgaXM6Ci0gICBub19hcmd1bWVudAkJKG9yIDApIGlmIHRoZSBvcHRpb24gZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudCwKLSAgIHJlcXVpcmVkX2FyZ3VtZW50CShvciAxKSBpZiB0aGUgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50LAotICAgb3B0aW9uYWxfYXJndW1lbnQJKG9yIDIpIGlmIHRoZSBvcHRpb24gdGFrZXMgYW4gb3B0aW9uYWwgYXJndW1lbnQuCi0KLSAgIElmIHRoZSBmaWVsZCBgZmxhZycgaXMgbm90IE5VTEwsIGl0IHBvaW50cyB0byBhIHZhcmlhYmxlIHRoYXQgaXMgc2V0Ci0gICB0byB0aGUgdmFsdWUgZ2l2ZW4gaW4gdGhlIGZpZWxkIGB2YWwnIHdoZW4gdGhlIG9wdGlvbiBpcyBmb3VuZCwgYnV0Ci0gICBsZWZ0IHVuY2hhbmdlZCBpZiB0aGUgb3B0aW9uIGlzIG5vdCBmb3VuZC4KLQotICAgVG8gaGF2ZSBhIGxvbmctbmFtZWQgb3B0aW9uIGRvIHNvbWV0aGluZyBvdGhlciB0aGFuIHNldCBhbiBgaW50JyB0bwotICAgYSBjb21waWxlZC1pbiBjb25zdGFudCwgc3VjaCBhcyBzZXQgYSB2YWx1ZSBmcm9tIGBvcHRhcmcnLCBzZXQgdGhlCi0gICBvcHRpb24ncyBgZmxhZycgZmllbGQgdG8gemVybyBhbmQgaXRzIGB2YWwnIGZpZWxkIHRvIGEgbm9uemVybwotICAgdmFsdWUgKHRoZSBlcXVpdmFsZW50IHNpbmdsZS1sZXR0ZXIgb3B0aW9uIGNoYXJhY3RlciwgaWYgdGhlcmUgaXMKLSAgIG9uZSkuICBGb3IgbG9uZyBvcHRpb25zIHRoYXQgaGF2ZSBhIHplcm8gYGZsYWcnIGZpZWxkLCBgZ2V0b3B0JwotICAgcmV0dXJucyB0aGUgY29udGVudHMgb2YgdGhlIGB2YWwnIGZpZWxkLiAgKi8KLQotc3RydWN0IG9wdGlvbgotewotICBjb25zdCBjaGFyICpuYW1lOwotICAvKiBoYXNfYXJnIGNhbid0IGJlIGFuIGVudW0gYmVjYXVzZSBzb21lIGNvbXBpbGVycyBjb21wbGFpbiBhYm91dAotICAgICB0eXBlIG1pc21hdGNoZXMgaW4gYWxsIHRoZSBjb2RlIHRoYXQgYXNzdW1lcyBpdCBpcyBhbiBpbnQuICAqLwotICBpbnQgaGFzX2FyZzsKLSAgaW50ICpmbGFnOwotICBpbnQgdmFsOwotfTsKLQotLyogTmFtZXMgZm9yIHRoZSB2YWx1ZXMgb2YgdGhlIGBoYXNfYXJnJyBmaWVsZCBvZiBgc3RydWN0IG9wdGlvbicuICAqLwotCi0jIGRlZmluZSBub19hcmd1bWVudAkJMAotIyBkZWZpbmUgcmVxdWlyZWRfYXJndW1lbnQJMQotIyBkZWZpbmUgb3B0aW9uYWxfYXJndW1lbnQJMgotI2VuZGlmCS8qIG5lZWQgZ2V0b3B0ICovCi0KLQotLyogR2V0IGRlZmluaXRpb25zIGFuZCBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgdG8gcHJvY2VzcyB0aGUKLSAgIGFyZ3VtZW50cyBpbiBBUkdWIChBUkdDIG9mIHRoZW0sIG1pbnVzIHRoZSBwcm9ncmFtIG5hbWUpIGZvcgotICAgb3B0aW9ucyBnaXZlbiBpbiBPUFRTLgotCi0gICBSZXR1cm4gdGhlIG9wdGlvbiBjaGFyYWN0ZXIgZnJvbSBPUFRTIGp1c3QgcmVhZC4gIFJldHVybiAtMSB3aGVuCi0gICB0aGVyZSBhcmUgbm8gbW9yZSBvcHRpb25zLiAgRm9yIHVucmVjb2duaXplZCBvcHRpb25zLCBvciBvcHRpb25zCi0gICBtaXNzaW5nIGFyZ3VtZW50cywgYG9wdG9wdCcgaXMgc2V0IHRvIHRoZSBvcHRpb24gbGV0dGVyLCBhbmQgJz8nIGlzCi0gICByZXR1cm5lZC4KLQotICAgVGhlIE9QVFMgc3RyaW5nIGlzIGEgbGlzdCBvZiBjaGFyYWN0ZXJzIHdoaWNoIGFyZSByZWNvZ25pemVkIG9wdGlvbgotICAgbGV0dGVycywgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBjb2xvbnMsIHNwZWNpZnlpbmcgdGhhdCB0aGF0IGxldHRlcgotICAgdGFrZXMgYW4gYXJndW1lbnQsIHRvIGJlIHBsYWNlZCBpbiBgb3B0YXJnJy4KLQotICAgSWYgYSBsZXR0ZXIgaW4gT1BUUyBpcyBmb2xsb3dlZCBieSB0d28gY29sb25zLCBpdHMgYXJndW1lbnQgaXMKLSAgIG9wdGlvbmFsLiAgVGhpcyBiZWhhdmlvciBpcyBzcGVjaWZpYyB0byB0aGUgR05VIGBnZXRvcHQnLgotCi0gICBUaGUgYXJndW1lbnQgYC0tJyBjYXVzZXMgcHJlbWF0dXJlIHRlcm1pbmF0aW9uIG9mIGFyZ3VtZW50Ci0gICBzY2FubmluZywgZXhwbGljaXRseSB0ZWxsaW5nIGBnZXRvcHQnIHRoYXQgdGhlcmUgYXJlIG5vIG1vcmUKLSAgIG9wdGlvbnMuCi0KLSAgIElmIE9QVFMgYmVnaW5zIHdpdGggYC0tJywgdGhlbiBub24tb3B0aW9uIGFyZ3VtZW50cyBhcmUgdHJlYXRlZCBhcwotICAgYXJndW1lbnRzIHRvIHRoZSBvcHRpb24gJ1wwJy4gIFRoaXMgYmVoYXZpb3IgaXMgc3BlY2lmaWMgdG8gdGhlIEdOVQotICAgYGdldG9wdCcuICAqLwotCi1leHRlcm4gaW50IGdldG9wdCAoaW50IF9fX2FyZ2MsIGNoYXIgKmNvbnN0ICpfX19hcmd2LCBjb25zdCBjaGFyICpfX3Nob3J0b3B0cykKLSAgICAgICBfX1RIUk9XOwotCi0jaWZuZGVmIF9fbmVlZF9nZXRvcHQKLWV4dGVybiBpbnQgZ2V0b3B0X2xvbmcgKGludCBfX19hcmdjLCBjaGFyICpfX2dldG9wdF9hcmd2X2NvbnN0ICpfX19hcmd2LAotCQkJY29uc3QgY2hhciAqX19zaG9ydG9wdHMsCi0JCSAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqX19sb25nb3B0cywgaW50ICpfX2xvbmdpbmQpCi0gICAgICAgX19USFJPVzsKLWV4dGVybiBpbnQgZ2V0b3B0X2xvbmdfb25seSAoaW50IF9fX2FyZ2MsIGNoYXIgKl9fZ2V0b3B0X2FyZ3ZfY29uc3QgKl9fX2FyZ3YsCi0JCQkgICAgIGNvbnN0IGNoYXIgKl9fc2hvcnRvcHRzLAotCQkgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqX19sb25nb3B0cywgaW50ICpfX2xvbmdpbmQpCi0gICAgICAgX19USFJPVzsKLQotI2VuZGlmCi0KLSNpZmRlZglfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLS8qIE1ha2Ugc3VyZSB3ZSBsYXRlciBjYW4gZ2V0IGFsbCB0aGUgZGVmaW5pdGlvbnMgYW5kIGRlY2xhcmF0aW9ucy4gICovCi0jdW5kZWYgX19uZWVkX2dldG9wdAotCi0jZW5kaWYgLyogZ2V0b3B0LmggKi8KZGlmZiAtLWdpdCBhL2xpYi9nZXRvcHRfaW50LmggYi9saWIvZ2V0b3B0X2ludC5oCmluZGV4IDQwMTU3OWYuLjJkYTAyMGMgMTAwNjQ0Ci0tLSBhL2xpYi9nZXRvcHRfaW50LmgKKysrIGIvbGliL2dldG9wdF9pbnQuaApAQCAtMSwzNCArMSw2OSBAQAogLyogSW50ZXJuYWwgZGVjbGFyYXRpb25zIGZvciBnZXRvcHQuCi0gICBDb3B5cmlnaHQgKEMpIDE5ODktMTk5NCwxOTk2LTE5OTksMjAwMSwyMDAzLDIwMDQKLSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29weXJpZ2h0IChDKSAxOTg5LTE5OTQsIDE5OTYtMTk5OSwgMjAwMSwgMjAwMy0yMDA0LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLgogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCiAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogI2lmbmRlZiBfR0VUT1BUX0lOVF9ICi0jZGVmaW5lIF9HRVRPUFRfSU5UX0gJMQorI2RlZmluZSBfR0VUT1BUX0lOVF9IICAgMQorCisjaW5jbHVkZSA8Z2V0b3B0Lmg+CiAKIGV4dGVybiBpbnQgX2dldG9wdF9pbnRlcm5hbCAoaW50IF9fX2FyZ2MsIGNoYXIgKipfX19hcmd2LAotCQkJICAgICBjb25zdCBjaGFyICpfX3Nob3J0b3B0cywKLQkJICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKl9fbG9uZ29wdHMsIGludCAqX19sb25naW5kLAotCQkJICAgICBpbnQgX19sb25nX29ubHksIGludCBfX3Bvc2l4bHlfY29ycmVjdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9fc2hvcnRvcHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpfX2xvbmdvcHRzLCBpbnQgKl9fbG9uZ2luZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fbG9uZ19vbmx5LCBpbnQgX19wb3NpeGx5X2NvcnJlY3QpOwogCiAMCiAvKiBSZWVudHJhbnQgdmVyc2lvbnMgd2hpY2ggY2FuIGhhbmRsZSBwYXJzaW5nIG11bHRpcGxlIGFyZ3VtZW50CiAgICB2ZWN0b3JzIGF0IHRoZSBzYW1lIHRpbWUuICAqLwogCisvKiBEZXNjcmliZSBob3cgdG8gZGVhbCB3aXRoIG9wdGlvbnMgdGhhdCBmb2xsb3cgbm9uLW9wdGlvbiBBUkdWLWVsZW1lbnRzLgorCisgICBJZiB0aGUgY2FsbGVyIGRpZCBub3Qgc3BlY2lmeSBhbnl0aGluZywKKyAgIHRoZSBkZWZhdWx0IGlzIFJFUVVJUkVfT1JERVIgaWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCisgICBQT1NJWExZX0NPUlJFQ1QgaXMgZGVmaW5lZCwgUEVSTVVURSBvdGhlcndpc2UuCisKKyAgIFJFUVVJUkVfT1JERVIgbWVhbnMgZG9uJ3QgcmVjb2duaXplIHRoZW0gYXMgb3B0aW9uczsKKyAgIHN0b3Agb3B0aW9uIHByb2Nlc3Npbmcgd2hlbiB0aGUgZmlyc3Qgbm9uLW9wdGlvbiBpcyBzZWVuLgorICAgVGhpcyBpcyB3aGF0IFVuaXggZG9lcy4KKyAgIFRoaXMgbW9kZSBvZiBvcGVyYXRpb24gaXMgc2VsZWN0ZWQgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50CisgICB2YXJpYWJsZSBQT1NJWExZX0NPUlJFQ1QsIG9yIHVzaW5nICcrJyBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyCisgICBvZiB0aGUgbGlzdCBvZiBvcHRpb24gY2hhcmFjdGVycywgb3IgYnkgY2FsbGluZyBnZXRvcHQuCisKKyAgIFBFUk1VVEUgaXMgdGhlIGRlZmF1bHQuICBXZSBwZXJtdXRlIHRoZSBjb250ZW50cyBvZiBBUkdWIGFzIHdlCisgICBzY2FuLCBzbyB0aGF0IGV2ZW50dWFsbHkgYWxsIHRoZSBub24tb3B0aW9ucyBhcmUgYXQgdGhlIGVuZC4KKyAgIFRoaXMgYWxsb3dzIG9wdGlvbnMgdG8gYmUgZ2l2ZW4gaW4gYW55IG9yZGVyLCBldmVuIHdpdGggcHJvZ3JhbXMKKyAgIHRoYXQgd2VyZSBub3Qgd3JpdHRlbiB0byBleHBlY3QgdGhpcy4KKworICAgUkVUVVJOX0lOX09SREVSIGlzIGFuIG9wdGlvbiBhdmFpbGFibGUgdG8gcHJvZ3JhbXMgdGhhdCB3ZXJlCisgICB3cml0dGVuIHRvIGV4cGVjdCBvcHRpb25zIGFuZCBvdGhlciBBUkdWLWVsZW1lbnRzIGluIGFueSBvcmRlcgorICAgYW5kIHRoYXQgY2FyZSBhYm91dCB0aGUgb3JkZXJpbmcgb2YgdGhlIHR3by4gIFdlIGRlc2NyaWJlIGVhY2gKKyAgIG5vbi1vcHRpb24gQVJHVi1lbGVtZW50IGFzIGlmIGl0IHdlcmUgdGhlIGFyZ3VtZW50IG9mIGFuIG9wdGlvbgorICAgd2l0aCBjaGFyYWN0ZXIgY29kZSAxLiAgVXNpbmcgJy0nIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlCisgICBsaXN0IG9mIG9wdGlvbiBjaGFyYWN0ZXJzIHNlbGVjdHMgdGhpcyBtb2RlIG9mIG9wZXJhdGlvbi4KKworICAgVGhlIHNwZWNpYWwgYXJndW1lbnQgJy0tJyBmb3JjZXMgYW4gZW5kIG9mIG9wdGlvbi1zY2FubmluZyByZWdhcmRsZXNzCisgICBvZiB0aGUgdmFsdWUgb2YgJ29yZGVyaW5nJy4gIEluIHRoZSBjYXNlIG9mIFJFVFVSTl9JTl9PUkRFUiwgb25seQorICAgJy0tJyBjYW4gY2F1c2UgJ2dldG9wdCcgdG8gcmV0dXJuIC0xIHdpdGggJ29wdGluZCcgIT0gQVJHQy4gICovCisKK2VudW0gX19vcmQKKyAgeworICAgIFJFUVVJUkVfT1JERVIsIFBFUk1VVEUsIFJFVFVSTl9JTl9PUkRFUgorICB9OworCiAvKiBEYXRhIHR5cGUgZm9yIHJlZW50cmFudCBmdW5jdGlvbnMuICAqLwogc3RydWN0IF9nZXRvcHRfZGF0YQogewpAQCAtNTMsMzkgKzg4LDggQEAKICAgICAgYnkgYWR2YW5jaW5nIHRvIHRoZSBuZXh0IEFSR1YtZWxlbWVudC4gICovCiAgIGNoYXIgKl9fbmV4dGNoYXI7CiAKLSAgLyogRGVzY3JpYmUgaG93IHRvIGRlYWwgd2l0aCBvcHRpb25zIHRoYXQgZm9sbG93IG5vbi1vcHRpb24gQVJHVi1lbGVtZW50cy4KLQotICAgICBJZiB0aGUgY2FsbGVyIGRpZCBub3Qgc3BlY2lmeSBhbnl0aGluZywKLSAgICAgdGhlIGRlZmF1bHQgaXMgUkVRVUlSRV9PUkRFUiBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKLSAgICAgUE9TSVhMWV9DT1JSRUNUIGlzIGRlZmluZWQsIFBFUk1VVEUgb3RoZXJ3aXNlLgotCi0gICAgIFJFUVVJUkVfT1JERVIgbWVhbnMgZG9uJ3QgcmVjb2duaXplIHRoZW0gYXMgb3B0aW9uczsKLSAgICAgc3RvcCBvcHRpb24gcHJvY2Vzc2luZyB3aGVuIHRoZSBmaXJzdCBub24tb3B0aW9uIGlzIHNlZW4uCi0gICAgIFRoaXMgaXMgd2hhdCBVbml4IGRvZXMuCi0gICAgIFRoaXMgbW9kZSBvZiBvcGVyYXRpb24gaXMgc2VsZWN0ZWQgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50Ci0gICAgIHZhcmlhYmxlIFBPU0lYTFlfQ09SUkVDVCwgb3IgdXNpbmcgYCsnIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIKLSAgICAgb2YgdGhlIGxpc3Qgb2Ygb3B0aW9uIGNoYXJhY3RlcnMsIG9yIGJ5IGNhbGxpbmcgZ2V0b3B0LgotCi0gICAgIFBFUk1VVEUgaXMgdGhlIGRlZmF1bHQuICBXZSBwZXJtdXRlIHRoZSBjb250ZW50cyBvZiBBUkdWIGFzIHdlCi0gICAgIHNjYW4sIHNvIHRoYXQgZXZlbnR1YWxseSBhbGwgdGhlIG5vbi1vcHRpb25zIGFyZSBhdCB0aGUgZW5kLgotICAgICBUaGlzIGFsbG93cyBvcHRpb25zIHRvIGJlIGdpdmVuIGluIGFueSBvcmRlciwgZXZlbiB3aXRoIHByb2dyYW1zCi0gICAgIHRoYXQgd2VyZSBub3Qgd3JpdHRlbiB0byBleHBlY3QgdGhpcy4KLQotICAgICBSRVRVUk5fSU5fT1JERVIgaXMgYW4gb3B0aW9uIGF2YWlsYWJsZSB0byBwcm9ncmFtcyB0aGF0IHdlcmUKLSAgICAgd3JpdHRlbiB0byBleHBlY3Qgb3B0aW9ucyBhbmQgb3RoZXIgQVJHVi1lbGVtZW50cyBpbiBhbnkgb3JkZXIKLSAgICAgYW5kIHRoYXQgY2FyZSBhYm91dCB0aGUgb3JkZXJpbmcgb2YgdGhlIHR3by4gIFdlIGRlc2NyaWJlIGVhY2gKLSAgICAgbm9uLW9wdGlvbiBBUkdWLWVsZW1lbnQgYXMgaWYgaXQgd2VyZSB0aGUgYXJndW1lbnQgb2YgYW4gb3B0aW9uCi0gICAgIHdpdGggY2hhcmFjdGVyIGNvZGUgMS4gIFVzaW5nIGAtJyBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZQotICAgICBsaXN0IG9mIG9wdGlvbiBjaGFyYWN0ZXJzIHNlbGVjdHMgdGhpcyBtb2RlIG9mIG9wZXJhdGlvbi4KLQotICAgICBUaGUgc3BlY2lhbCBhcmd1bWVudCBgLS0nIGZvcmNlcyBhbiBlbmQgb2Ygb3B0aW9uLXNjYW5uaW5nIHJlZ2FyZGxlc3MKLSAgICAgb2YgdGhlIHZhbHVlIG9mIGBvcmRlcmluZycuICBJbiB0aGUgY2FzZSBvZiBSRVRVUk5fSU5fT1JERVIsIG9ubHkKLSAgICAgYC0tJyBjYW4gY2F1c2UgYGdldG9wdCcgdG8gcmV0dXJuIC0xIHdpdGggYG9wdGluZCcgIT0gQVJHQy4gICovCi0KLSAgZW51bQotICAgIHsKLSAgICAgIFJFUVVJUkVfT1JERVIsIFBFUk1VVEUsIFJFVFVSTl9JTl9PUkRFUgotICAgIH0gX19vcmRlcmluZzsKKyAgLyogU2VlIF9fb3JkIGFib3ZlLiAgKi8KKyAgZW51bSBfX29yZCBfX29yZGVyaW5nOwogCiAgIC8qIElmIHRoZSBQT1NJWExZX0NPUlJFQ1QgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0CiAgICAgIG9yIGdldG9wdCB3YXMgY2FsbGVkLiAgKi8KQEAgLTk1LDggKzk5LDggQEAKICAgLyogSGFuZGxlIHBlcm11dGF0aW9uIG9mIGFyZ3VtZW50cy4gICovCiAKICAgLyogRGVzY3JpYmUgdGhlIHBhcnQgb2YgQVJHViB0aGF0IGNvbnRhaW5zIG5vbi1vcHRpb25zIHRoYXQgaGF2ZQotICAgICBiZWVuIHNraXBwZWQuICBgZmlyc3Rfbm9ub3B0JyBpcyB0aGUgaW5kZXggaW4gQVJHViBvZiB0aGUgZmlyc3QKLSAgICAgb2YgdGhlbTsgYGxhc3Rfbm9ub3B0JyBpcyB0aGUgaW5kZXggYWZ0ZXIgdGhlIGxhc3Qgb2YgdGhlbS4gICovCisgICAgIGJlZW4gc2tpcHBlZC4gICdmaXJzdF9ub25vcHQnIGlzIHRoZSBpbmRleCBpbiBBUkdWIG9mIHRoZSBmaXJzdAorICAgICBvZiB0aGVtOyAnbGFzdF9ub25vcHQnIGlzIHRoZSBpbmRleCBhZnRlciB0aGUgbGFzdCBvZiB0aGVtLiAgKi8KIAogICBpbnQgX19maXJzdF9ub25vcHQ7CiAgIGludCBfX2xhc3Rfbm9ub3B0OwpAQCAtMTA0LDI4ICsxMDgsMjggQEAKICNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX05PTk9QVElPTl9GTEFHUwogICBpbnQgX19ub25vcHRpb25fZmxhZ3NfbWF4X2xlbjsKICAgaW50IF9fbm9ub3B0aW9uX2ZsYWdzX2xlbjsKLSMgZW5kaWYKKyNlbmRpZgogfTsKIAogLyogVGhlIGluaXRpYWxpemVyIGlzIG5lY2Vzc2FyeSB0byBzZXQgT1BUSU5EIGFuZCBPUFRFUlIgdG8gdGhlaXIKICAgIGRlZmF1bHQgdmFsdWVzIGFuZCB0byBjbGVhciB0aGUgaW5pdGlhbGl6YXRpb24gZmxhZy4gICovCi0jZGVmaW5lIF9HRVRPUFRfREFUQV9JTklUSUFMSVpFUgl7IDEsIDEgfQorI2RlZmluZSBfR0VUT1BUX0RBVEFfSU5JVElBTElaRVIgICAgICAgIHsgMSwgMSB9CiAKIGV4dGVybiBpbnQgX2dldG9wdF9pbnRlcm5hbF9yIChpbnQgX19fYXJnYywgY2hhciAqKl9fX2FyZ3YsCi0JCQkgICAgICAgY29uc3QgY2hhciAqX19zaG9ydG9wdHMsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqX19sb25nb3B0cywgaW50ICpfX2xvbmdpbmQsCi0JCQkgICAgICAgaW50IF9fbG9uZ19vbmx5LCBpbnQgX19wb3NpeGx5X2NvcnJlY3QsCi0JCQkgICAgICAgc3RydWN0IF9nZXRvcHRfZGF0YSAqX19kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX3Nob3J0b3B0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpfX2xvbmdvcHRzLCBpbnQgKl9fbG9uZ2luZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19sb25nX29ubHksIHN0cnVjdCBfZ2V0b3B0X2RhdGEgKl9fZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wb3NpeGx5X2NvcnJlY3QpOwogCiBleHRlcm4gaW50IF9nZXRvcHRfbG9uZ19yIChpbnQgX19fYXJnYywgY2hhciAqKl9fX2FyZ3YsCi0JCQkgICBjb25zdCBjaGFyICpfX3Nob3J0b3B0cywKLQkJCSAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKl9fbG9uZ29wdHMsIGludCAqX19sb25naW5kLAotCQkJICAgc3RydWN0IF9nZXRvcHRfZGF0YSAqX19kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9fc2hvcnRvcHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqX19sb25nb3B0cywgaW50ICpfX2xvbmdpbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX2dldG9wdF9kYXRhICpfX2RhdGEpOwogCiBleHRlcm4gaW50IF9nZXRvcHRfbG9uZ19vbmx5X3IgKGludCBfX19hcmdjLCBjaGFyICoqX19fYXJndiwKLQkJCQljb25zdCBjaGFyICpfX3Nob3J0b3B0cywKLQkJCQljb25zdCBzdHJ1Y3Qgb3B0aW9uICpfX2xvbmdvcHRzLAotCQkJCWludCAqX19sb25naW5kLAotCQkJCXN0cnVjdCBfZ2V0b3B0X2RhdGEgKl9fZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9fc2hvcnRvcHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpfX2xvbmdvcHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fbG9uZ2luZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9nZXRvcHRfZGF0YSAqX19kYXRhKTsKIAogI2VuZGlmIC8qIGdldG9wdF9pbnQuaCAqLwpkaWZmIC0tZ2l0IGEvbGliL2dldHRleHQuaCBiL2xpYi9nZXR0ZXh0LmgKaW5kZXggMjg1Y2IzMS4uNjVjYTFlNiAxMDA2NDQKLS0tIGEvbGliL2dldHRleHQuaAorKysgYi9saWIvZ2V0dGV4dC5oCkBAIC0xLDkgKzEsMTAgQEAKIC8qIENvbnZlbmllbmNlIGhlYWRlciBmb3IgY29uZGl0aW9uYWwgdXNlIG9mIEdOVSA8bGliaW50bC5oPi4KLSAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk4LCAyMDAwLTIwMDIsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCwgMjAwMC0yMDAyLCAyMDA0LTIwMDYsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuCiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQogICAgYW55IGxhdGVyIHZlcnNpb24uCiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLApAQCAtMTIsOCArMTMsNyBAQAogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogI2lmbmRlZiBfTElCR0VUVEVYVF9ICiAjZGVmaW5lIF9MSUJHRVRURVhUX0ggMQpAQCAtMjQsNiArMjQsMTggQEAKIC8qIEdldCBkZWNsYXJhdGlvbnMgb2YgR05VIG1lc3NhZ2UgY2F0YWxvZyBmdW5jdGlvbnMuICAqLwogIyBpbmNsdWRlIDxsaWJpbnRsLmg+CiAKKy8qIFlvdSBjYW4gc2V0IHRoZSBERUZBVUxUX1RFWFRfRE9NQUlOIG1hY3JvIHRvIHNwZWNpZnkgdGhlIGRvbWFpbiB1c2VkIGJ5CisgICB0aGUgZ2V0dGV4dCgpIGFuZCBuZ2V0dGV4dCgpIG1hY3Jvcy4gIFRoaXMgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gY2FsbGluZworICAgdGV4dGRvbWFpbigpLCBhbmQgaXMgdXNlZnVsIGZvciBsaWJyYXJpZXMuICAqLworIyBpZmRlZiBERUZBVUxUX1RFWFRfRE9NQUlOCisjICB1bmRlZiBnZXR0ZXh0CisjICBkZWZpbmUgZ2V0dGV4dChNc2dpZCkgXAorICAgICBkZ2V0dGV4dCAoREVGQVVMVF9URVhUX0RPTUFJTiwgTXNnaWQpCisjICB1bmRlZiBuZ2V0dGV4dAorIyAgZGVmaW5lIG5nZXR0ZXh0KE1zZ2lkMSwgTXNnaWQyLCBOKSBcCisgICAgIGRuZ2V0dGV4dCAoREVGQVVMVF9URVhUX0RPTUFJTiwgTXNnaWQxLCBNc2dpZDIsIE4pCisjIGVuZGlmCisKICNlbHNlCiAKIC8qIFNvbGFyaXMgL3Vzci9pbmNsdWRlL2xvY2FsZS5oIGluY2x1ZGVzIC91c3IvaW5jbHVkZS9saWJpbnRsLmgsIHdoaWNoCkBAIC00MSw3ICs1Myw3IEBACiAgICBpdCBub3csIHRvIG1ha2UgbGF0ZXIgaW5jbHVzaW9ucyBvZiA8bGliaW50bC5oPiBhIE5PUC4gICovCiAjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykgJiYgZGVmaW5lZChfX0dOVUdfXykgJiYgKF9fR05VQ19fID49IDMpCiAjIGluY2x1ZGUgPGNzdGRsaWI+Ci0jIGlmIChfX0dMSUJDX18gPj0gMikgfHwgX0dMSUJDWFhfSEFWRV9MSUJJTlRMX0gKKyMgaWYgKF9fR0xJQkNfXyA+PSAyICYmICFkZWZpbmVkIF9fVUNMSUJDX18pIHx8IF9HTElCQ1hYX0hBVkVfTElCSU5UTF9ICiAjICBpbmNsdWRlIDxsaWJpbnRsLmg+CiAjIGVuZGlmCiAjZW5kaWYKQEAgLTUxLDIxICs2Myw0MSBAQAogICAgZm9yIGludmFsaWQgdXNlcyBvZiB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSB0aGVzZSBmdW5jdGlvbnMuCiAgICBPbiBwcmUtQU5TSSBzeXN0ZW1zIHdpdGhvdXQgJ2NvbnN0JywgdGhlIGNvbmZpZy5oIGZpbGUgaXMgc3VwcG9zZWQgdG8KICAgIGNvbnRhaW4gIiNkZWZpbmUgY29uc3QiLiAgKi8KKyMgdW5kZWYgZ2V0dGV4dAogIyBkZWZpbmUgZ2V0dGV4dChNc2dpZCkgKChjb25zdCBjaGFyICopIChNc2dpZCkpCi0jIGRlZmluZSBkZ2V0dGV4dChEb21haW5uYW1lLCBNc2dpZCkgKChjb25zdCBjaGFyICopIChNc2dpZCkpCi0jIGRlZmluZSBkY2dldHRleHQoRG9tYWlubmFtZSwgTXNnaWQsIENhdGVnb3J5KSAoKGNvbnN0IGNoYXIgKikgKE1zZ2lkKSkKKyMgdW5kZWYgZGdldHRleHQKKyMgZGVmaW5lIGRnZXR0ZXh0KERvbWFpbm5hbWUsIE1zZ2lkKSAoKHZvaWQpIChEb21haW5uYW1lKSwgZ2V0dGV4dCAoTXNnaWQpKQorIyB1bmRlZiBkY2dldHRleHQKKyMgZGVmaW5lIGRjZ2V0dGV4dChEb21haW5uYW1lLCBNc2dpZCwgQ2F0ZWdvcnkpIFwKKyAgICAoKHZvaWQpIChDYXRlZ29yeSksIGRnZXR0ZXh0IChEb21haW5uYW1lLCBNc2dpZCkpCisjIHVuZGVmIG5nZXR0ZXh0CiAjIGRlZmluZSBuZ2V0dGV4dChNc2dpZDEsIE1zZ2lkMiwgTikgXAotICAgICgoTikgPT0gMSA/IChjb25zdCBjaGFyICopIChNc2dpZDEpIDogKGNvbnN0IGNoYXIgKikgKE1zZ2lkMikpCisgICAgKChOKSA9PSAxIFwKKyAgICAgPyAoKHZvaWQpIChNc2dpZDIpLCAoY29uc3QgY2hhciAqKSAoTXNnaWQxKSkgXAorICAgICA6ICgodm9pZCkgKE1zZ2lkMSksIChjb25zdCBjaGFyICopIChNc2dpZDIpKSkKKyMgdW5kZWYgZG5nZXR0ZXh0CiAjIGRlZmluZSBkbmdldHRleHQoRG9tYWlubmFtZSwgTXNnaWQxLCBNc2dpZDIsIE4pIFwKLSAgICAoKE4pID09IDEgPyAoY29uc3QgY2hhciAqKSAoTXNnaWQxKSA6IChjb25zdCBjaGFyICopIChNc2dpZDIpKQorICAgICgodm9pZCkgKERvbWFpbm5hbWUpLCBuZ2V0dGV4dCAoTXNnaWQxLCBNc2dpZDIsIE4pKQorIyB1bmRlZiBkY25nZXR0ZXh0CiAjIGRlZmluZSBkY25nZXR0ZXh0KERvbWFpbm5hbWUsIE1zZ2lkMSwgTXNnaWQyLCBOLCBDYXRlZ29yeSkgXAotICAgICgoTikgPT0gMSA/IChjb25zdCBjaGFyICopIChNc2dpZDEpIDogKGNvbnN0IGNoYXIgKikgKE1zZ2lkMikpCisgICAgKCh2b2lkKSAoQ2F0ZWdvcnkpLCBkbmdldHRleHQgKERvbWFpbm5hbWUsIE1zZ2lkMSwgTXNnaWQyLCBOKSkKKyMgdW5kZWYgdGV4dGRvbWFpbgogIyBkZWZpbmUgdGV4dGRvbWFpbihEb21haW5uYW1lKSAoKGNvbnN0IGNoYXIgKikgKERvbWFpbm5hbWUpKQotIyBkZWZpbmUgYmluZHRleHRkb21haW4oRG9tYWlubmFtZSwgRGlybmFtZSkgKChjb25zdCBjaGFyICopIChEaXJuYW1lKSkKLSMgZGVmaW5lIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KERvbWFpbm5hbWUsIENvZGVzZXQpICgoY29uc3QgY2hhciAqKSAoQ29kZXNldCkpCisjIHVuZGVmIGJpbmR0ZXh0ZG9tYWluCisjIGRlZmluZSBiaW5kdGV4dGRvbWFpbihEb21haW5uYW1lLCBEaXJuYW1lKSBcCisgICAgKCh2b2lkKSAoRG9tYWlubmFtZSksIChjb25zdCBjaGFyICopIChEaXJuYW1lKSkKKyMgdW5kZWYgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQKKyMgZGVmaW5lIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KERvbWFpbm5hbWUsIENvZGVzZXQpIFwKKyAgICAoKHZvaWQpIChEb21haW5uYW1lKSwgKGNvbnN0IGNoYXIgKikgKENvZGVzZXQpKQogCiAjZW5kaWYKIAorLyogUHJlZmVyIGdudWxpYidzIHNldGxvY2FsZSBvdmVycmlkZSBvdmVyIGxpYmludGwncyBzZXRsb2NhbGUgb3ZlcnJpZGUuICAqLworI2lmZGVmIEdOVUxJQl9kZWZpbmVkX3NldGxvY2FsZQorIyB1bmRlZiBzZXRsb2NhbGUKKyMgZGVmaW5lIHNldGxvY2FsZSBycGxfc2V0bG9jYWxlCisjZW5kaWYKKwogLyogQSBwc2V1ZG8gZnVuY3Rpb24gY2FsbCB0aGF0IHNlcnZlcyBhcyBhIG1hcmtlciBmb3IgdGhlIGF1dG9tYXRlZAogICAgZXh0cmFjdGlvbiBvZiBtZXNzYWdlcywgYnV0IGRvZXMgbm90IGNhbGwgZ2V0dGV4dCgpLiAgVGhlIHJ1bi10aW1lCiAgICB0cmFuc2xhdGlvbiBpcyBkb25lIGF0IGEgZGlmZmVyZW50IHBsYWNlIGluIHRoZSBjb2RlLgpAQCAtNzUsNCArMTA3LDE4MiBAQAogICAgaW5pdGlhbGl6ZXIgZm9yIHN0YXRpYyAnY2hhcltdJyBvciAnY29uc3QgY2hhcltdJyB2YXJpYWJsZXMuICAqLwogI2RlZmluZSBnZXR0ZXh0X25vb3AoU3RyaW5nKSBTdHJpbmcKIAorLyogVGhlIHNlcGFyYXRvciBiZXR3ZWVuIG1zZ2N0eHQgYW5kIG1zZ2lkIGluIGEgLm1vIGZpbGUuICAqLworI2RlZmluZSBHRVRURVhUX0NPTlRFWFRfR0xVRSAiXDAwNCIKKworLyogUHNldWRvIGZ1bmN0aW9uIGNhbGxzLCB0YWtpbmcgYSBNU0dDVFhUIGFuZCBhIE1TR0lEIGluc3RlYWQgb2YganVzdCBhCisgICBNU0dJRC4gIE1TR0NUWFQgYW5kIE1TR0lEIG11c3QgYmUgc3RyaW5nIGxpdGVyYWxzLiAgTVNHQ1RYVCBzaG91bGQgYmUKKyAgIHNob3J0IGFuZCByYXJlbHkgbmVlZCB0byBjaGFuZ2UuCisgICBUaGUgbGV0dGVyICdwJyBzdGFuZHMgZm9yICdwYXJ0aWN1bGFyJyBvciAnc3BlY2lhbCcuICAqLworI2lmZGVmIERFRkFVTFRfVEVYVF9ET01BSU4KKyMgZGVmaW5lIHBnZXR0ZXh0KE1zZ2N0eHQsIE1zZ2lkKSBcCisgICBwZ2V0dGV4dF9hdXggKERFRkFVTFRfVEVYVF9ET01BSU4sIE1zZ2N0eHQgR0VUVEVYVF9DT05URVhUX0dMVUUgTXNnaWQsIE1zZ2lkLCBMQ19NRVNTQUdFUykKKyNlbHNlCisjIGRlZmluZSBwZ2V0dGV4dChNc2djdHh0LCBNc2dpZCkgXAorICAgcGdldHRleHRfYXV4IChOVUxMLCBNc2djdHh0IEdFVFRFWFRfQ09OVEVYVF9HTFVFIE1zZ2lkLCBNc2dpZCwgTENfTUVTU0FHRVMpCisjZW5kaWYKKyNkZWZpbmUgZHBnZXR0ZXh0KERvbWFpbm5hbWUsIE1zZ2N0eHQsIE1zZ2lkKSBcCisgIHBnZXR0ZXh0X2F1eCAoRG9tYWlubmFtZSwgTXNnY3R4dCBHRVRURVhUX0NPTlRFWFRfR0xVRSBNc2dpZCwgTXNnaWQsIExDX01FU1NBR0VTKQorI2RlZmluZSBkY3BnZXR0ZXh0KERvbWFpbm5hbWUsIE1zZ2N0eHQsIE1zZ2lkLCBDYXRlZ29yeSkgXAorICBwZ2V0dGV4dF9hdXggKERvbWFpbm5hbWUsIE1zZ2N0eHQgR0VUVEVYVF9DT05URVhUX0dMVUUgTXNnaWQsIE1zZ2lkLCBDYXRlZ29yeSkKKyNpZmRlZiBERUZBVUxUX1RFWFRfRE9NQUlOCisjIGRlZmluZSBucGdldHRleHQoTXNnY3R4dCwgTXNnaWQsIE1zZ2lkUGx1cmFsLCBOKSBcCisgICBucGdldHRleHRfYXV4IChERUZBVUxUX1RFWFRfRE9NQUlOLCBNc2djdHh0IEdFVFRFWFRfQ09OVEVYVF9HTFVFIE1zZ2lkLCBNc2dpZCwgTXNnaWRQbHVyYWwsIE4sIExDX01FU1NBR0VTKQorI2Vsc2UKKyMgZGVmaW5lIG5wZ2V0dGV4dChNc2djdHh0LCBNc2dpZCwgTXNnaWRQbHVyYWwsIE4pIFwKKyAgIG5wZ2V0dGV4dF9hdXggKE5VTEwsIE1zZ2N0eHQgR0VUVEVYVF9DT05URVhUX0dMVUUgTXNnaWQsIE1zZ2lkLCBNc2dpZFBsdXJhbCwgTiwgTENfTUVTU0FHRVMpCisjZW5kaWYKKyNkZWZpbmUgZG5wZ2V0dGV4dChEb21haW5uYW1lLCBNc2djdHh0LCBNc2dpZCwgTXNnaWRQbHVyYWwsIE4pIFwKKyAgbnBnZXR0ZXh0X2F1eCAoRG9tYWlubmFtZSwgTXNnY3R4dCBHRVRURVhUX0NPTlRFWFRfR0xVRSBNc2dpZCwgTXNnaWQsIE1zZ2lkUGx1cmFsLCBOLCBMQ19NRVNTQUdFUykKKyNkZWZpbmUgZGNucGdldHRleHQoRG9tYWlubmFtZSwgTXNnY3R4dCwgTXNnaWQsIE1zZ2lkUGx1cmFsLCBOLCBDYXRlZ29yeSkgXAorICBucGdldHRleHRfYXV4IChEb21haW5uYW1lLCBNc2djdHh0IEdFVFRFWFRfQ09OVEVYVF9HTFVFIE1zZ2lkLCBNc2dpZCwgTXNnaWRQbHVyYWwsIE4sIENhdGVnb3J5KQorCisjaWZkZWYgX19HTlVDX18KK19faW5saW5lCisjZWxzZQorI2lmZGVmIF9fY3BsdXNwbHVzCitpbmxpbmUKKyNlbmRpZgorI2VuZGlmCitzdGF0aWMgY29uc3QgY2hhciAqCitwZ2V0dGV4dF9hdXggKGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICAgICAgICAgICAgY29uc3QgY2hhciAqbXNnX2N0eHRfaWQsIGNvbnN0IGNoYXIgKm1zZ2lkLAorICAgICAgICAgICAgICBpbnQgY2F0ZWdvcnkpCit7CisgIGNvbnN0IGNoYXIgKnRyYW5zbGF0aW9uID0gZGNnZXR0ZXh0IChkb21haW4sIG1zZ19jdHh0X2lkLCBjYXRlZ29yeSk7CisgIGlmICh0cmFuc2xhdGlvbiA9PSBtc2dfY3R4dF9pZCkKKyAgICByZXR1cm4gbXNnaWQ7CisgIGVsc2UKKyAgICByZXR1cm4gdHJhbnNsYXRpb247Cit9CisKKyNpZmRlZiBfX0dOVUNfXworX19pbmxpbmUKKyNlbHNlCisjaWZkZWYgX19jcGx1c3BsdXMKK2lubGluZQorI2VuZGlmCisjZW5kaWYKK3N0YXRpYyBjb25zdCBjaGFyICoKK25wZ2V0dGV4dF9hdXggKGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1zZ19jdHh0X2lkLCBjb25zdCBjaGFyICptc2dpZCwKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1zZ2lkX3BsdXJhbCwgdW5zaWduZWQgbG9uZyBpbnQgbiwKKyAgICAgICAgICAgICAgIGludCBjYXRlZ29yeSkKK3sKKyAgY29uc3QgY2hhciAqdHJhbnNsYXRpb24gPQorICAgIGRjbmdldHRleHQgKGRvbWFpbiwgbXNnX2N0eHRfaWQsIG1zZ2lkX3BsdXJhbCwgbiwgY2F0ZWdvcnkpOworICBpZiAodHJhbnNsYXRpb24gPT0gbXNnX2N0eHRfaWQgfHwgdHJhbnNsYXRpb24gPT0gbXNnaWRfcGx1cmFsKQorICAgIHJldHVybiAobiA9PSAxID8gbXNnaWQgOiBtc2dpZF9wbHVyYWwpOworICBlbHNlCisgICAgcmV0dXJuIHRyYW5zbGF0aW9uOworfQorCisvKiBUaGUgc2FtZSB0aGluZyBleHRlbmRlZCBmb3Igbm9uLWNvbnN0YW50IGFyZ3VtZW50cy4gIEhlcmUgTVNHQ1RYVCBhbmQgTVNHSUQKKyAgIGNhbiBiZSBhcmJpdHJhcnkgZXhwcmVzc2lvbnMuICBCdXQgZm9yIHN0cmluZyBsaXRlcmFscyB0aGVzZSBtYWNyb3MgYXJlCisgICBsZXNzIGVmZmljaWVudCB0aGFuIHRob3NlIGFib3ZlLiAgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgKCgoX19HTlVDX18gPj0gMyB8fCBfX0dOVUdfXyA+PSAyKSAmJiAhZGVmaW5lZCBfX1NUUklDVF9BTlNJX18pIFwKKyAgICAgLyogfHwgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMICovICkKKyMgZGVmaW5lIF9MSUJHRVRURVhUX0hBVkVfVkFSSUFCTEVfU0laRV9BUlJBWVMgMQorI2Vsc2UKKyMgZGVmaW5lIF9MSUJHRVRURVhUX0hBVkVfVkFSSUFCTEVfU0laRV9BUlJBWVMgMAorI2VuZGlmCisKKyNpZiAhX0xJQkdFVFRFWFRfSEFWRV9WQVJJQUJMRV9TSVpFX0FSUkFZUworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisKKyNkZWZpbmUgcGdldHRleHRfZXhwcihNc2djdHh0LCBNc2dpZCkgXAorICBkY3BnZXR0ZXh0X2V4cHIgKE5VTEwsIE1zZ2N0eHQsIE1zZ2lkLCBMQ19NRVNTQUdFUykKKyNkZWZpbmUgZHBnZXR0ZXh0X2V4cHIoRG9tYWlubmFtZSwgTXNnY3R4dCwgTXNnaWQpIFwKKyAgZGNwZ2V0dGV4dF9leHByIChEb21haW5uYW1lLCBNc2djdHh0LCBNc2dpZCwgTENfTUVTU0FHRVMpCisKKyNpZmRlZiBfX0dOVUNfXworX19pbmxpbmUKKyNlbHNlCisjaWZkZWYgX19jcGx1c3BsdXMKK2lubGluZQorI2VuZGlmCisjZW5kaWYKK3N0YXRpYyBjb25zdCBjaGFyICoKK2RjcGdldHRleHRfZXhwciAoY29uc3QgY2hhciAqZG9tYWluLAorICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptc2djdHh0LCBjb25zdCBjaGFyICptc2dpZCwKKyAgICAgICAgICAgICAgICAgaW50IGNhdGVnb3J5KQoreworICBzaXplX3QgbXNnY3R4dF9sZW4gPSBzdHJsZW4gKG1zZ2N0eHQpICsgMTsKKyAgc2l6ZV90IG1zZ2lkX2xlbiA9IHN0cmxlbiAobXNnaWQpICsgMTsKKyAgY29uc3QgY2hhciAqdHJhbnNsYXRpb247CisjaWYgX0xJQkdFVFRFWFRfSEFWRV9WQVJJQUJMRV9TSVpFX0FSUkFZUworICBjaGFyIG1zZ19jdHh0X2lkW21zZ2N0eHRfbGVuICsgbXNnaWRfbGVuXTsKKyNlbHNlCisgIGNoYXIgYnVmWzEwMjRdOworICBjaGFyICptc2dfY3R4dF9pZCA9CisgICAgKG1zZ2N0eHRfbGVuICsgbXNnaWRfbGVuIDw9IHNpemVvZiAoYnVmKQorICAgICA/IGJ1ZgorICAgICA6IChjaGFyICopIG1hbGxvYyAobXNnY3R4dF9sZW4gKyBtc2dpZF9sZW4pKTsKKyAgaWYgKG1zZ19jdHh0X2lkICE9IE5VTEwpCisjZW5kaWYKKyAgICB7CisgICAgICBtZW1jcHkgKG1zZ19jdHh0X2lkLCBtc2djdHh0LCBtc2djdHh0X2xlbiAtIDEpOworICAgICAgbXNnX2N0eHRfaWRbbXNnY3R4dF9sZW4gLSAxXSA9ICdcMDA0JzsKKyAgICAgIG1lbWNweSAobXNnX2N0eHRfaWQgKyBtc2djdHh0X2xlbiwgbXNnaWQsIG1zZ2lkX2xlbik7CisgICAgICB0cmFuc2xhdGlvbiA9IGRjZ2V0dGV4dCAoZG9tYWluLCBtc2dfY3R4dF9pZCwgY2F0ZWdvcnkpOworI2lmICFfTElCR0VUVEVYVF9IQVZFX1ZBUklBQkxFX1NJWkVfQVJSQVlTCisgICAgICBpZiAobXNnX2N0eHRfaWQgIT0gYnVmKQorICAgICAgICBmcmVlIChtc2dfY3R4dF9pZCk7CisjZW5kaWYKKyAgICAgIGlmICh0cmFuc2xhdGlvbiAhPSBtc2dfY3R4dF9pZCkKKyAgICAgICAgcmV0dXJuIHRyYW5zbGF0aW9uOworICAgIH0KKyAgcmV0dXJuIG1zZ2lkOworfQorCisjZGVmaW5lIG5wZ2V0dGV4dF9leHByKE1zZ2N0eHQsIE1zZ2lkLCBNc2dpZFBsdXJhbCwgTikgXAorICBkY25wZ2V0dGV4dF9leHByIChOVUxMLCBNc2djdHh0LCBNc2dpZCwgTXNnaWRQbHVyYWwsIE4sIExDX01FU1NBR0VTKQorI2RlZmluZSBkbnBnZXR0ZXh0X2V4cHIoRG9tYWlubmFtZSwgTXNnY3R4dCwgTXNnaWQsIE1zZ2lkUGx1cmFsLCBOKSBcCisgIGRjbnBnZXR0ZXh0X2V4cHIgKERvbWFpbm5hbWUsIE1zZ2N0eHQsIE1zZ2lkLCBNc2dpZFBsdXJhbCwgTiwgTENfTUVTU0FHRVMpCisKKyNpZmRlZiBfX0dOVUNfXworX19pbmxpbmUKKyNlbHNlCisjaWZkZWYgX19jcGx1c3BsdXMKK2lubGluZQorI2VuZGlmCisjZW5kaWYKK3N0YXRpYyBjb25zdCBjaGFyICoKK2RjbnBnZXR0ZXh0X2V4cHIgKGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1zZ2N0eHQsIGNvbnN0IGNoYXIgKm1zZ2lkLAorICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbXNnaWRfcGx1cmFsLCB1bnNpZ25lZCBsb25nIGludCBuLAorICAgICAgICAgICAgICAgICAgaW50IGNhdGVnb3J5KQoreworICBzaXplX3QgbXNnY3R4dF9sZW4gPSBzdHJsZW4gKG1zZ2N0eHQpICsgMTsKKyAgc2l6ZV90IG1zZ2lkX2xlbiA9IHN0cmxlbiAobXNnaWQpICsgMTsKKyAgY29uc3QgY2hhciAqdHJhbnNsYXRpb247CisjaWYgX0xJQkdFVFRFWFRfSEFWRV9WQVJJQUJMRV9TSVpFX0FSUkFZUworICBjaGFyIG1zZ19jdHh0X2lkW21zZ2N0eHRfbGVuICsgbXNnaWRfbGVuXTsKKyNlbHNlCisgIGNoYXIgYnVmWzEwMjRdOworICBjaGFyICptc2dfY3R4dF9pZCA9CisgICAgKG1zZ2N0eHRfbGVuICsgbXNnaWRfbGVuIDw9IHNpemVvZiAoYnVmKQorICAgICA/IGJ1ZgorICAgICA6IChjaGFyICopIG1hbGxvYyAobXNnY3R4dF9sZW4gKyBtc2dpZF9sZW4pKTsKKyAgaWYgKG1zZ19jdHh0X2lkICE9IE5VTEwpCisjZW5kaWYKKyAgICB7CisgICAgICBtZW1jcHkgKG1zZ19jdHh0X2lkLCBtc2djdHh0LCBtc2djdHh0X2xlbiAtIDEpOworICAgICAgbXNnX2N0eHRfaWRbbXNnY3R4dF9sZW4gLSAxXSA9ICdcMDA0JzsKKyAgICAgIG1lbWNweSAobXNnX2N0eHRfaWQgKyBtc2djdHh0X2xlbiwgbXNnaWQsIG1zZ2lkX2xlbik7CisgICAgICB0cmFuc2xhdGlvbiA9IGRjbmdldHRleHQgKGRvbWFpbiwgbXNnX2N0eHRfaWQsIG1zZ2lkX3BsdXJhbCwgbiwgY2F0ZWdvcnkpOworI2lmICFfTElCR0VUVEVYVF9IQVZFX1ZBUklBQkxFX1NJWkVfQVJSQVlTCisgICAgICBpZiAobXNnX2N0eHRfaWQgIT0gYnVmKQorICAgICAgICBmcmVlIChtc2dfY3R4dF9pZCk7CisjZW5kaWYKKyAgICAgIGlmICghKHRyYW5zbGF0aW9uID09IG1zZ19jdHh0X2lkIHx8IHRyYW5zbGF0aW9uID09IG1zZ2lkX3BsdXJhbCkpCisgICAgICAgIHJldHVybiB0cmFuc2xhdGlvbjsKKyAgICB9CisgIHJldHVybiAobiA9PSAxID8gbXNnaWQgOiBtc2dpZF9wbHVyYWwpOworfQorCiAjZW5kaWYgLyogX0xJQkdFVFRFWFRfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2dsdGhyZWFkL2xvY2suYyBiL2xpYi9nbHRocmVhZC9sb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMwZGYyOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nbHRocmVhZC9sb2NrLmMKQEAgLTAsMCArMSwxMDU3IEBACisvKiBMb2NraW5nIGluIG11bHRpdGhyZWFkZWQgc2l0dWF0aW9ucy4KKyAgIENvcHlyaWdodCAoQykgMjAwNS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LCAyMDA1LgorICAgQmFzZWQgb24gR0NDJ3MgZ3Roci1wb3NpeC5oLCBndGhyLXBvc2l4OTUuaCwgZ3Roci1zb2xhcmlzLmgsCisgICBndGhyLXdpbjMyLmguICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlICJnbHRocmVhZC9sb2NrLmgiCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworI2lmIFVTRV9QT1NJWF9USFJFQURTCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX2xvY2tfdCBkYXRhdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX3J3bG9ja190IGRhdGF0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworIyBpZiBIQVZFX1BUSFJFQURfUldMT0NLCisKKyMgIGlmICFkZWZpbmVkIFBUSFJFQURfUldMT0NLX0lOSVRJQUxJWkVSCisKK2ludAorZ2x0aHJlYWRfcndsb2NrX2luaXRfbXVsdGl0aHJlYWRlZCAoZ2xfcndsb2NrX3QgKmxvY2spCit7CisgIGludCBlcnI7CisKKyAgZXJyID0gcHRocmVhZF9yd2xvY2tfaW5pdCAoJmxvY2stPnJ3bG9jaywgTlVMTCk7CisgIGlmIChlcnIgIT0gMCkKKyAgICByZXR1cm4gZXJyOworICBsb2NrLT5pbml0aWFsaXplZCA9IDE7CisgIHJldHVybiAwOworfQorCitpbnQKK2dsdGhyZWFkX3J3bG9ja19yZGxvY2tfbXVsdGl0aHJlYWRlZCAoZ2xfcndsb2NrX3QgKmxvY2spCit7CisgIGlmICghbG9jay0+aW5pdGlhbGl6ZWQpCisgICAgeworICAgICAgaW50IGVycjsKKworICAgICAgZXJyID0gcHRocmVhZF9tdXRleF9sb2NrICgmbG9jay0+Z3VhcmQpOworICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICByZXR1cm4gZXJyOworICAgICAgaWYgKCFsb2NrLT5pbml0aWFsaXplZCkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdsdGhyZWFkX3J3bG9ja19pbml0X211bHRpdGhyZWFkZWQgKGxvY2spOworICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2sgKCZsb2NrLT5ndWFyZCk7CisgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVyciA9IHB0aHJlYWRfbXV0ZXhfdW5sb2NrICgmbG9jay0+Z3VhcmQpOworICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgcmV0dXJuIHB0aHJlYWRfcndsb2NrX3JkbG9jayAoJmxvY2stPnJ3bG9jayk7Cit9CisKK2ludAorZ2x0aHJlYWRfcndsb2NrX3dybG9ja19tdWx0aXRocmVhZGVkIChnbF9yd2xvY2tfdCAqbG9jaykKK3sKKyAgaWYgKCFsb2NrLT5pbml0aWFsaXplZCkKKyAgICB7CisgICAgICBpbnQgZXJyOworCisgICAgICBlcnIgPSBwdGhyZWFkX211dGV4X2xvY2sgKCZsb2NrLT5ndWFyZCk7CisgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgIHJldHVybiBlcnI7CisgICAgICBpZiAoIWxvY2stPmluaXRpYWxpemVkKQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ2x0aHJlYWRfcndsb2NrX2luaXRfbXVsdGl0aHJlYWRlZCAobG9jayk7CisgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jayAoJmxvY2stPmd1YXJkKTsKKyAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZXJyID0gcHRocmVhZF9tdXRleF91bmxvY2sgKCZsb2NrLT5ndWFyZCk7CisgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorICByZXR1cm4gcHRocmVhZF9yd2xvY2tfd3Jsb2NrICgmbG9jay0+cndsb2NrKTsKK30KKworaW50CitnbHRocmVhZF9yd2xvY2tfdW5sb2NrX211bHRpdGhyZWFkZWQgKGdsX3J3bG9ja190ICpsb2NrKQoreworICBpZiAoIWxvY2stPmluaXRpYWxpemVkKQorICAgIHJldHVybiBFSU5WQUw7CisgIHJldHVybiBwdGhyZWFkX3J3bG9ja191bmxvY2sgKCZsb2NrLT5yd2xvY2spOworfQorCitpbnQKK2dsdGhyZWFkX3J3bG9ja19kZXN0cm95X211bHRpdGhyZWFkZWQgKGdsX3J3bG9ja190ICpsb2NrKQoreworICBpbnQgZXJyOworCisgIGlmICghbG9jay0+aW5pdGlhbGl6ZWQpCisgICAgcmV0dXJuIEVJTlZBTDsKKyAgZXJyID0gcHRocmVhZF9yd2xvY2tfZGVzdHJveSAoJmxvY2stPnJ3bG9jayk7CisgIGlmIChlcnIgIT0gMCkKKyAgICByZXR1cm4gZXJyOworICBsb2NrLT5pbml0aWFsaXplZCA9IDA7CisgIHJldHVybiAwOworfQorCisjICBlbmRpZgorCisjIGVsc2UKKworaW50CitnbHRocmVhZF9yd2xvY2tfaW5pdF9tdWx0aXRocmVhZGVkIChnbF9yd2xvY2tfdCAqbG9jaykKK3sKKyAgaW50IGVycjsKKworICBlcnIgPSBwdGhyZWFkX211dGV4X2luaXQgKCZsb2NrLT5sb2NrLCBOVUxMKTsKKyAgaWYgKGVyciAhPSAwKQorICAgIHJldHVybiBlcnI7CisgIGVyciA9IHB0aHJlYWRfY29uZF9pbml0ICgmbG9jay0+d2FpdGluZ19yZWFkZXJzLCBOVUxMKTsKKyAgaWYgKGVyciAhPSAwKQorICAgIHJldHVybiBlcnI7CisgIGVyciA9IHB0aHJlYWRfY29uZF9pbml0ICgmbG9jay0+d2FpdGluZ193cml0ZXJzLCBOVUxMKTsKKyAgaWYgKGVyciAhPSAwKQorICAgIHJldHVybiBlcnI7CisgIGxvY2stPndhaXRpbmdfd3JpdGVyc19jb3VudCA9IDA7CisgIGxvY2stPnJ1bmNvdW50ID0gMDsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorZ2x0aHJlYWRfcndsb2NrX3JkbG9ja19tdWx0aXRocmVhZGVkIChnbF9yd2xvY2tfdCAqbG9jaykKK3sKKyAgaW50IGVycjsKKworICBlcnIgPSBwdGhyZWFkX211dGV4X2xvY2sgKCZsb2NrLT5sb2NrKTsKKyAgaWYgKGVyciAhPSAwKQorICAgIHJldHVybiBlcnI7CisgIC8qIFRlc3Qgd2hldGhlciBvbmx5IHJlYWRlcnMgYXJlIGN1cnJlbnRseSBydW5uaW5nLCBhbmQgd2hldGhlciB0aGUgcnVuY291bnQKKyAgICAgZmllbGQgd2lsbCBub3Qgb3ZlcmZsb3cuICAqLworICAvKiBQT1NJWCBzYXlzOiAiSXQgaXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZCB3aGV0aGVyIHRoZSBjYWxsaW5nIHRocmVhZAorICAgICBhY3F1aXJlcyB0aGUgbG9jayB3aGVuIGEgd3JpdGVyIGRvZXMgbm90IGhvbGQgdGhlIGxvY2sgYW5kIHRoZXJlIGFyZQorICAgICB3cml0ZXJzIGJsb2NrZWQgb24gdGhlIGxvY2suIiAgTGV0J3Mgc2F5LCBubzogZ2l2ZSB0aGUgd3JpdGVycyBhIGhpZ2hlcgorICAgICBwcmlvcml0eS4gICovCisgIHdoaWxlICghKGxvY2stPnJ1bmNvdW50ICsgMSA+IDAgJiYgbG9jay0+d2FpdGluZ193cml0ZXJzX2NvdW50ID09IDApKQorICAgIHsKKyAgICAgIC8qIFRoaXMgdGhyZWFkIGhhcyB0byB3YWl0IGZvciBhIHdoaWxlLiAgRW5xdWV1ZSBpdCBhbW9uZyB0aGUKKyAgICAgICAgIHdhaXRpbmdfcmVhZGVycy4gICovCisgICAgICBlcnIgPSBwdGhyZWFkX2NvbmRfd2FpdCAoJmxvY2stPndhaXRpbmdfcmVhZGVycywgJmxvY2stPmxvY2spOworICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2sgKCZsb2NrLT5sb2NrKTsKKyAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICB9CisgICAgfQorICBsb2NrLT5ydW5jb3VudCsrOworICByZXR1cm4gcHRocmVhZF9tdXRleF91bmxvY2sgKCZsb2NrLT5sb2NrKTsKK30KKworaW50CitnbHRocmVhZF9yd2xvY2tfd3Jsb2NrX211bHRpdGhyZWFkZWQgKGdsX3J3bG9ja190ICpsb2NrKQoreworICBpbnQgZXJyOworCisgIGVyciA9IHB0aHJlYWRfbXV0ZXhfbG9jayAoJmxvY2stPmxvY2spOworICBpZiAoZXJyICE9IDApCisgICAgcmV0dXJuIGVycjsKKyAgLyogVGVzdCB3aGV0aGVyIG5vIHJlYWRlcnMgb3Igd3JpdGVycyBhcmUgY3VycmVudGx5IHJ1bm5pbmcuICAqLworICB3aGlsZSAoIShsb2NrLT5ydW5jb3VudCA9PSAwKSkKKyAgICB7CisgICAgICAvKiBUaGlzIHRocmVhZCBoYXMgdG8gd2FpdCBmb3IgYSB3aGlsZS4gIEVucXVldWUgaXQgYW1vbmcgdGhlCisgICAgICAgICB3YWl0aW5nX3dyaXRlcnMuICAqLworICAgICAgbG9jay0+d2FpdGluZ193cml0ZXJzX2NvdW50Kys7CisgICAgICBlcnIgPSBwdGhyZWFkX2NvbmRfd2FpdCAoJmxvY2stPndhaXRpbmdfd3JpdGVycywgJmxvY2stPmxvY2spOworICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgbG9jay0+d2FpdGluZ193cml0ZXJzX2NvdW50LS07CisgICAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2sgKCZsb2NrLT5sb2NrKTsKKyAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICB9CisgICAgICBsb2NrLT53YWl0aW5nX3dyaXRlcnNfY291bnQtLTsKKyAgICB9CisgIGxvY2stPnJ1bmNvdW50LS07IC8qIHJ1bmNvdW50IGJlY29tZXMgLTEgKi8KKyAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdW5sb2NrICgmbG9jay0+bG9jayk7Cit9CisKK2ludAorZ2x0aHJlYWRfcndsb2NrX3VubG9ja19tdWx0aXRocmVhZGVkIChnbF9yd2xvY2tfdCAqbG9jaykKK3sKKyAgaW50IGVycjsKKworICBlcnIgPSBwdGhyZWFkX211dGV4X2xvY2sgKCZsb2NrLT5sb2NrKTsKKyAgaWYgKGVyciAhPSAwKQorICAgIHJldHVybiBlcnI7CisgIGlmIChsb2NrLT5ydW5jb3VudCA8IDApCisgICAgeworICAgICAgLyogRHJvcCBhIHdyaXRlciBsb2NrLiAgKi8KKyAgICAgIGlmICghKGxvY2stPnJ1bmNvdW50ID09IC0xKSkKKyAgICAgICAgeworICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrICgmbG9jay0+bG9jayk7CisgICAgICAgICAgcmV0dXJuIEVJTlZBTDsKKyAgICAgICAgfQorICAgICAgbG9jay0+cnVuY291bnQgPSAwOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIERyb3AgYSByZWFkZXIgbG9jay4gICovCisgICAgICBpZiAoIShsb2NrLT5ydW5jb3VudCA+IDApKQorICAgICAgICB7CisgICAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2sgKCZsb2NrLT5sb2NrKTsKKyAgICAgICAgICByZXR1cm4gRUlOVkFMOworICAgICAgICB9CisgICAgICBsb2NrLT5ydW5jb3VudC0tOworICAgIH0KKyAgaWYgKGxvY2stPnJ1bmNvdW50ID09IDApCisgICAgeworICAgICAgLyogUE9TSVggcmVjb21tZW5kcyB0aGF0ICJ3cml0ZSBsb2NrcyBzaGFsbCB0YWtlIHByZWNlZGVuY2Ugb3ZlciByZWFkCisgICAgICAgICBsb2NrcyIsIHRvIGF2b2lkICJ3cml0ZXIgc3RhcnZhdGlvbiIuICAqLworICAgICAgaWYgKGxvY2stPndhaXRpbmdfd3JpdGVyc19jb3VudCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBXYWtlIHVwIG9uZSBvZiB0aGUgd2FpdGluZyB3cml0ZXJzLiAgKi8KKyAgICAgICAgICBlcnIgPSBwdGhyZWFkX2NvbmRfc2lnbmFsICgmbG9jay0+d2FpdGluZ193cml0ZXJzKTsKKyAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrICgmbG9jay0+bG9jayk7CisgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIC8qIFdha2UgdXAgYWxsIHdhaXRpbmcgcmVhZGVycy4gICovCisgICAgICAgICAgZXJyID0gcHRocmVhZF9jb25kX2Jyb2FkY2FzdCAoJmxvY2stPndhaXRpbmdfcmVhZGVycyk7CisgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jayAoJmxvY2stPmxvY2spOworICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICByZXR1cm4gcHRocmVhZF9tdXRleF91bmxvY2sgKCZsb2NrLT5sb2NrKTsKK30KKworaW50CitnbHRocmVhZF9yd2xvY2tfZGVzdHJveV9tdWx0aXRocmVhZGVkIChnbF9yd2xvY2tfdCAqbG9jaykKK3sKKyAgaW50IGVycjsKKworICBlcnIgPSBwdGhyZWFkX211dGV4X2Rlc3Ryb3kgKCZsb2NrLT5sb2NrKTsKKyAgaWYgKGVyciAhPSAwKQorICAgIHJldHVybiBlcnI7CisgIGVyciA9IHB0aHJlYWRfY29uZF9kZXN0cm95ICgmbG9jay0+d2FpdGluZ19yZWFkZXJzKTsKKyAgaWYgKGVyciAhPSAwKQorICAgIHJldHVybiBlcnI7CisgIGVyciA9IHB0aHJlYWRfY29uZF9kZXN0cm95ICgmbG9jay0+d2FpdGluZ193cml0ZXJzKTsKKyAgaWYgKGVyciAhPSAwKQorICAgIHJldHVybiBlcnI7CisgIHJldHVybiAwOworfQorCisjIGVuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9yZWN1cnNpdmVfbG9ja190IGRhdGF0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjIGlmIEhBVkVfUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUKKworIyAgaWYgZGVmaW5lZCBQVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUSUFMSVpFUiB8fCBkZWZpbmVkIFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSX05QCisKK2ludAorZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfaW5pdF9tdWx0aXRocmVhZGVkIChnbF9yZWN1cnNpdmVfbG9ja190ICpsb2NrKQoreworICBwdGhyZWFkX211dGV4YXR0cl90IGF0dHJpYnV0ZXM7CisgIGludCBlcnI7CisKKyAgZXJyID0gcHRocmVhZF9tdXRleGF0dHJfaW5pdCAoJmF0dHJpYnV0ZXMpOworICBpZiAoZXJyICE9IDApCisgICAgcmV0dXJuIGVycjsKKyAgZXJyID0gcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSAoJmF0dHJpYnV0ZXMsIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFKTsKKyAgaWYgKGVyciAhPSAwKQorICAgIHsKKyAgICAgIHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgKCZhdHRyaWJ1dGVzKTsKKyAgICAgIHJldHVybiBlcnI7CisgICAgfQorICBlcnIgPSBwdGhyZWFkX211dGV4X2luaXQgKGxvY2ssICZhdHRyaWJ1dGVzKTsKKyAgaWYgKGVyciAhPSAwKQorICAgIHsKKyAgICAgIHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgKCZhdHRyaWJ1dGVzKTsKKyAgICAgIHJldHVybiBlcnI7CisgICAgfQorICBlcnIgPSBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95ICgmYXR0cmlidXRlcyk7CisgIGlmIChlcnIgIT0gMCkKKyAgICByZXR1cm4gZXJyOworICByZXR1cm4gMDsKK30KKworIyAgZWxzZQorCitpbnQKK2dsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2luaXRfbXVsdGl0aHJlYWRlZCAoZ2xfcmVjdXJzaXZlX2xvY2tfdCAqbG9jaykKK3sKKyAgcHRocmVhZF9tdXRleGF0dHJfdCBhdHRyaWJ1dGVzOworICBpbnQgZXJyOworCisgIGVyciA9IHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQgKCZhdHRyaWJ1dGVzKTsKKyAgaWYgKGVyciAhPSAwKQorICAgIHJldHVybiBlcnI7CisgIGVyciA9IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUgKCZhdHRyaWJ1dGVzLCBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSk7CisgIGlmIChlcnIgIT0gMCkKKyAgICB7CisgICAgICBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95ICgmYXR0cmlidXRlcyk7CisgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgZXJyID0gcHRocmVhZF9tdXRleF9pbml0ICgmbG9jay0+cmVjbXV0ZXgsICZhdHRyaWJ1dGVzKTsKKyAgaWYgKGVyciAhPSAwKQorICAgIHsKKyAgICAgIHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgKCZhdHRyaWJ1dGVzKTsKKyAgICAgIHJldHVybiBlcnI7CisgICAgfQorICBlcnIgPSBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95ICgmYXR0cmlidXRlcyk7CisgIGlmIChlcnIgIT0gMCkKKyAgICByZXR1cm4gZXJyOworICBsb2NrLT5pbml0aWFsaXplZCA9IDE7CisgIHJldHVybiAwOworfQorCitpbnQKK2dsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2xvY2tfbXVsdGl0aHJlYWRlZCAoZ2xfcmVjdXJzaXZlX2xvY2tfdCAqbG9jaykKK3sKKyAgaWYgKCFsb2NrLT5pbml0aWFsaXplZCkKKyAgICB7CisgICAgICBpbnQgZXJyOworCisgICAgICBlcnIgPSBwdGhyZWFkX211dGV4X2xvY2sgKCZsb2NrLT5ndWFyZCk7CisgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgIHJldHVybiBlcnI7CisgICAgICBpZiAoIWxvY2stPmluaXRpYWxpemVkKQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfaW5pdF9tdWx0aXRocmVhZGVkIChsb2NrKTsKKyAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrICgmbG9jay0+Z3VhcmQpOworICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlcnIgPSBwdGhyZWFkX211dGV4X3VubG9jayAoJmxvY2stPmd1YXJkKTsKKyAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisgIHJldHVybiBwdGhyZWFkX211dGV4X2xvY2sgKCZsb2NrLT5yZWNtdXRleCk7Cit9CisKK2ludAorZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfdW5sb2NrX211bHRpdGhyZWFkZWQgKGdsX3JlY3Vyc2l2ZV9sb2NrX3QgKmxvY2spCit7CisgIGlmICghbG9jay0+aW5pdGlhbGl6ZWQpCisgICAgcmV0dXJuIEVJTlZBTDsKKyAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdW5sb2NrICgmbG9jay0+cmVjbXV0ZXgpOworfQorCitpbnQKK2dsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2Rlc3Ryb3lfbXVsdGl0aHJlYWRlZCAoZ2xfcmVjdXJzaXZlX2xvY2tfdCAqbG9jaykKK3sKKyAgaW50IGVycjsKKworICBpZiAoIWxvY2stPmluaXRpYWxpemVkKQorICAgIHJldHVybiBFSU5WQUw7CisgIGVyciA9IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAoJmxvY2stPnJlY211dGV4KTsKKyAgaWYgKGVyciAhPSAwKQorICAgIHJldHVybiBlcnI7CisgIGxvY2stPmluaXRpYWxpemVkID0gMDsKKyAgcmV0dXJuIDA7Cit9CisKKyMgIGVuZGlmCisKKyMgZWxzZQorCitpbnQKK2dsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2luaXRfbXVsdGl0aHJlYWRlZCAoZ2xfcmVjdXJzaXZlX2xvY2tfdCAqbG9jaykKK3sKKyAgaW50IGVycjsKKworICBlcnIgPSBwdGhyZWFkX211dGV4X2luaXQgKCZsb2NrLT5tdXRleCwgTlVMTCk7CisgIGlmIChlcnIgIT0gMCkKKyAgICByZXR1cm4gZXJyOworICBsb2NrLT5vd25lciA9IChwdGhyZWFkX3QpIDA7CisgIGxvY2stPmRlcHRoID0gMDsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfbG9ja19tdWx0aXRocmVhZGVkIChnbF9yZWN1cnNpdmVfbG9ja190ICpsb2NrKQoreworICBwdGhyZWFkX3Qgc2VsZiA9IHB0aHJlYWRfc2VsZiAoKTsKKyAgaWYgKGxvY2stPm93bmVyICE9IHNlbGYpCisgICAgeworICAgICAgaW50IGVycjsKKworICAgICAgZXJyID0gcHRocmVhZF9tdXRleF9sb2NrICgmbG9jay0+bXV0ZXgpOworICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICByZXR1cm4gZXJyOworICAgICAgbG9jay0+b3duZXIgPSBzZWxmOworICAgIH0KKyAgaWYgKCsrKGxvY2stPmRlcHRoKSA9PSAwKSAvKiB3cmFwYXJvdW5kPyAqLworICAgIHsKKyAgICAgIGxvY2stPmRlcHRoLS07CisgICAgICByZXR1cm4gRUFHQUlOOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKK2ludAorZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfdW5sb2NrX211bHRpdGhyZWFkZWQgKGdsX3JlY3Vyc2l2ZV9sb2NrX3QgKmxvY2spCit7CisgIGlmIChsb2NrLT5vd25lciAhPSBwdGhyZWFkX3NlbGYgKCkpCisgICAgcmV0dXJuIEVQRVJNOworICBpZiAobG9jay0+ZGVwdGggPT0gMCkKKyAgICByZXR1cm4gRUlOVkFMOworICBpZiAoLS0obG9jay0+ZGVwdGgpID09IDApCisgICAgeworICAgICAgbG9jay0+b3duZXIgPSAocHRocmVhZF90KSAwOworICAgICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdW5sb2NrICgmbG9jay0+bXV0ZXgpOworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCitpbnQKK2dsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2Rlc3Ryb3lfbXVsdGl0aHJlYWRlZCAoZ2xfcmVjdXJzaXZlX2xvY2tfdCAqbG9jaykKK3sKKyAgaWYgKGxvY2stPm93bmVyICE9IChwdGhyZWFkX3QpIDApCisgICAgcmV0dXJuIEVCVVNZOworICByZXR1cm4gcHRocmVhZF9tdXRleF9kZXN0cm95ICgmbG9jay0+bXV0ZXgpOworfQorCisjIGVuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX29uY2VfdCBkYXRhdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgY29uc3QgcHRocmVhZF9vbmNlX3QgZnJlc2hfb25jZSA9IFBUSFJFQURfT05DRV9JTklUOworCitpbnQKK2dsdGhyZWFkX29uY2Vfc2luZ2xldGhyZWFkZWQgKHB0aHJlYWRfb25jZV90ICpvbmNlX2NvbnRyb2wpCit7CisgIC8qIFdlIGRvbid0IGtub3cgd2hldGhlciBwdGhyZWFkX29uY2VfdCBpcyBhbiBpbnRlZ2VyIHR5cGUsIGEgZmxvYXRpbmctcG9pbnQKKyAgICAgdHlwZSwgYSBwb2ludGVyIHR5cGUsIG9yIGEgc3RydWN0dXJlIHR5cGUuICAqLworICBjaGFyICpmaXJzdGJ5dGUgPSAoY2hhciAqKW9uY2VfY29udHJvbDsKKyAgaWYgKCpmaXJzdGJ5dGUgPT0gKihjb25zdCBjaGFyICopJmZyZXNoX29uY2UpCisgICAgeworICAgICAgLyogRmlyc3QgdGltZSB1c2Ugb2Ygb25jZV9jb250cm9sLiAgSW52ZXJ0IHRoZSBmaXJzdCBieXRlLiAgKi8KKyAgICAgICpmaXJzdGJ5dGUgPSB+ICooY29uc3QgY2hhciAqKSZmcmVzaF9vbmNlOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyNpZiBVU0VfUFRIX1RIUkVBRFMKKworLyogVXNlIHRoZSBHTlUgUHRoIHRocmVhZHMgbGlicmFyeS4gICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX2xvY2tfdCBkYXRhdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX3J3bG9ja190IGRhdGF0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX3JlY3Vyc2l2ZV9sb2NrX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX29uY2VfdCBkYXRhdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZAorZ2x0aHJlYWRfb25jZV9jYWxsICh2b2lkICphcmcpCit7CisgIHZvaWQgKCoqZ2xfb25jZV90ZW1wX2FkZHIpICh2b2lkKSA9ICh2b2lkICgqKikgKHZvaWQpKSBhcmc7CisgIHZvaWQgKCppbml0ZnVuY3Rpb24pICh2b2lkKSA9ICpnbF9vbmNlX3RlbXBfYWRkcjsKKyAgaW5pdGZ1bmN0aW9uICgpOworfQorCitpbnQKK2dsdGhyZWFkX29uY2VfbXVsdGl0aHJlYWRlZCAocHRoX29uY2VfdCAqb25jZV9jb250cm9sLCB2b2lkICgqaW5pdGZ1bmN0aW9uKSAodm9pZCkpCit7CisgIHZvaWQgKCp0ZW1wKSAodm9pZCkgPSBpbml0ZnVuY3Rpb247CisgIHJldHVybiAoIXB0aF9vbmNlIChvbmNlX2NvbnRyb2wsIGdsdGhyZWFkX29uY2VfY2FsbCwgJnRlbXApID8gZXJybm8gOiAwKTsKK30KKworaW50CitnbHRocmVhZF9vbmNlX3NpbmdsZXRocmVhZGVkIChwdGhfb25jZV90ICpvbmNlX2NvbnRyb2wpCit7CisgIC8qIFdlIGtub3cgdGhhdCBwdGhfb25jZV90IGlzIGFuIGludGVnZXIgdHlwZS4gICovCisgIGlmICgqb25jZV9jb250cm9sID09IFBUSF9PTkNFX0lOSVQpCisgICAgeworICAgICAgLyogRmlyc3QgdGltZSB1c2Ugb2Ygb25jZV9jb250cm9sLiAgSW52ZXJ0IHRoZSBtYXJrZXIuICAqLworICAgICAgKm9uY2VfY29udHJvbCA9IH4gUFRIX09OQ0VfSU5JVDsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCisjZW5kaWYKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisjaWYgVVNFX1NPTEFSSVNfVEhSRUFEUworCisvKiBVc2UgdGhlIG9sZCBTb2xhcmlzIHRocmVhZHMgbGlicmFyeS4gICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX2xvY2tfdCBkYXRhdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX3J3bG9ja190IGRhdGF0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX3JlY3Vyc2l2ZV9sb2NrX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2ludAorZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfaW5pdF9tdWx0aXRocmVhZGVkIChnbF9yZWN1cnNpdmVfbG9ja190ICpsb2NrKQoreworICBpbnQgZXJyOworCisgIGVyciA9IG11dGV4X2luaXQgKCZsb2NrLT5tdXRleCwgVVNZTkNfVEhSRUFELCBOVUxMKTsKKyAgaWYgKGVyciAhPSAwKQorICAgIHJldHVybiBlcnI7CisgIGxvY2stPm93bmVyID0gKHRocmVhZF90KSAwOworICBsb2NrLT5kZXB0aCA9IDA7CisgIHJldHVybiAwOworfQorCitpbnQKK2dsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2xvY2tfbXVsdGl0aHJlYWRlZCAoZ2xfcmVjdXJzaXZlX2xvY2tfdCAqbG9jaykKK3sKKyAgdGhyZWFkX3Qgc2VsZiA9IHRocl9zZWxmICgpOworICBpZiAobG9jay0+b3duZXIgIT0gc2VsZikKKyAgICB7CisgICAgICBpbnQgZXJyOworCisgICAgICBlcnIgPSBtdXRleF9sb2NrICgmbG9jay0+bXV0ZXgpOworICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICByZXR1cm4gZXJyOworICAgICAgbG9jay0+b3duZXIgPSBzZWxmOworICAgIH0KKyAgaWYgKCsrKGxvY2stPmRlcHRoKSA9PSAwKSAvKiB3cmFwYXJvdW5kPyAqLworICAgIHsKKyAgICAgIGxvY2stPmRlcHRoLS07CisgICAgICByZXR1cm4gRUFHQUlOOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKK2ludAorZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfdW5sb2NrX211bHRpdGhyZWFkZWQgKGdsX3JlY3Vyc2l2ZV9sb2NrX3QgKmxvY2spCit7CisgIGlmIChsb2NrLT5vd25lciAhPSB0aHJfc2VsZiAoKSkKKyAgICByZXR1cm4gRVBFUk07CisgIGlmIChsb2NrLT5kZXB0aCA9PSAwKQorICAgIHJldHVybiBFSU5WQUw7CisgIGlmICgtLShsb2NrLT5kZXB0aCkgPT0gMCkKKyAgICB7CisgICAgICBsb2NrLT5vd25lciA9ICh0aHJlYWRfdCkgMDsKKyAgICAgIHJldHVybiBtdXRleF91bmxvY2sgKCZsb2NrLT5tdXRleCk7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfZGVzdHJveV9tdWx0aXRocmVhZGVkIChnbF9yZWN1cnNpdmVfbG9ja190ICpsb2NrKQoreworICBpZiAobG9jay0+b3duZXIgIT0gKHRocmVhZF90KSAwKQorICAgIHJldHVybiBFQlVTWTsKKyAgcmV0dXJuIG11dGV4X2Rlc3Ryb3kgKCZsb2NrLT5tdXRleCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX29uY2VfdCBkYXRhdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitpbnQKK2dsdGhyZWFkX29uY2VfbXVsdGl0aHJlYWRlZCAoZ2xfb25jZV90ICpvbmNlX2NvbnRyb2wsIHZvaWQgKCppbml0ZnVuY3Rpb24pICh2b2lkKSkKK3sKKyAgaWYgKCFvbmNlX2NvbnRyb2wtPmluaXRlZCkKKyAgICB7CisgICAgICBpbnQgZXJyOworCisgICAgICAvKiBVc2UgdGhlIG11dGV4IHRvIGd1YXJhbnRlZSB0aGF0IGlmIGFub3RoZXIgdGhyZWFkIGlzIGFscmVhZHkgY2FsbGluZworICAgICAgICAgdGhlIGluaXRmdW5jdGlvbiwgdGhpcyB0aHJlYWQgd2FpdHMgdW50aWwgaXQncyBmaW5pc2hlZC4gICovCisgICAgICBlcnIgPSBtdXRleF9sb2NrICgmb25jZV9jb250cm9sLT5tdXRleCk7CisgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgIHJldHVybiBlcnI7CisgICAgICBpZiAoIW9uY2VfY29udHJvbC0+aW5pdGVkKQorICAgICAgICB7CisgICAgICAgICAgb25jZV9jb250cm9sLT5pbml0ZWQgPSAxOworICAgICAgICAgIGluaXRmdW5jdGlvbiAoKTsKKyAgICAgICAgfQorICAgICAgcmV0dXJuIG11dGV4X3VubG9jayAoJm9uY2VfY29udHJvbC0+bXV0ZXgpOworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCitpbnQKK2dsdGhyZWFkX29uY2Vfc2luZ2xldGhyZWFkZWQgKGdsX29uY2VfdCAqb25jZV9jb250cm9sKQoreworICAvKiBXZSBrbm93IHRoYXQgZ2xfb25jZV90IGNvbnRhaW5zIGFuIGludGVnZXIgdHlwZS4gICovCisgIGlmICghb25jZV9jb250cm9sLT5pbml0ZWQpCisgICAgeworICAgICAgLyogRmlyc3QgdGltZSB1c2Ugb2Ygb25jZV9jb250cm9sLiAgSW52ZXJ0IHRoZSBtYXJrZXIuICAqLworICAgICAgb25jZV9jb250cm9sLT5pbml0ZWQgPSB+IDA7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworI2VuZGlmCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworI2lmIFVTRV9XSU5ET1dTX1RIUkVBRFMKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZ2xfbG9ja190IGRhdGF0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3ZvaWQKK2dsdGhyZWFkX2xvY2tfaW5pdF9mdW5jIChnbF9sb2NrX3QgKmxvY2spCit7CisgIEluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24gKCZsb2NrLT5sb2NrKTsKKyAgbG9jay0+Z3VhcmQuZG9uZSA9IDE7Cit9CisKK2ludAorZ2x0aHJlYWRfbG9ja19sb2NrX2Z1bmMgKGdsX2xvY2tfdCAqbG9jaykKK3sKKyAgaWYgKCFsb2NrLT5ndWFyZC5kb25lKQorICAgIHsKKyAgICAgIGlmIChJbnRlcmxvY2tlZEluY3JlbWVudCAoJmxvY2stPmd1YXJkLnN0YXJ0ZWQpID09IDApCisgICAgICAgIC8qIFRoaXMgdGhyZWFkIGlzIHRoZSBmaXJzdCBvbmUgdG8gbmVlZCB0aGlzIGxvY2suICBJbml0aWFsaXplIGl0LiAgKi8KKyAgICAgICAgZ2x0aHJlYWRfbG9ja19pbml0IChsb2NrKTsKKyAgICAgIGVsc2UKKyAgICAgICAgLyogWWllbGQgdGhlIENQVSB3aGlsZSB3YWl0aW5nIGZvciBhbm90aGVyIHRocmVhZCB0byBmaW5pc2gKKyAgICAgICAgICAgaW5pdGlhbGl6aW5nIHRoaXMgbG9jay4gICovCisgICAgICAgIHdoaWxlICghbG9jay0+Z3VhcmQuZG9uZSkKKyAgICAgICAgICBTbGVlcCAoMCk7CisgICAgfQorICBFbnRlckNyaXRpY2FsU2VjdGlvbiAoJmxvY2stPmxvY2spOworICByZXR1cm4gMDsKK30KKworaW50CitnbHRocmVhZF9sb2NrX3VubG9ja19mdW5jIChnbF9sb2NrX3QgKmxvY2spCit7CisgIGlmICghbG9jay0+Z3VhcmQuZG9uZSkKKyAgICByZXR1cm4gRUlOVkFMOworICBMZWF2ZUNyaXRpY2FsU2VjdGlvbiAoJmxvY2stPmxvY2spOworICByZXR1cm4gMDsKK30KKworaW50CitnbHRocmVhZF9sb2NrX2Rlc3Ryb3lfZnVuYyAoZ2xfbG9ja190ICpsb2NrKQoreworICBpZiAoIWxvY2stPmd1YXJkLmRvbmUpCisgICAgcmV0dXJuIEVJTlZBTDsKKyAgRGVsZXRlQ3JpdGljYWxTZWN0aW9uICgmbG9jay0+bG9jayk7CisgIGxvY2stPmd1YXJkLmRvbmUgPSAwOworICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9yd2xvY2tfdCBkYXRhdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEluIHRoaXMgZmlsZSwgdGhlIHdhaXRxdWV1ZXMgYXJlIGltcGxlbWVudGVkIGFzIGNpcmN1bGFyIGFycmF5cy4gICovCisjZGVmaW5lIGdsX3dhaXRxdWV1ZV90IGdsX2NhcnJheV93YWl0cXVldWVfdAorCitzdGF0aWMgdm9pZAorZ2xfd2FpdHF1ZXVlX2luaXQgKGdsX3dhaXRxdWV1ZV90ICp3cSkKK3sKKyAgd3EtPmFycmF5ID0gTlVMTDsKKyAgd3EtPmNvdW50ID0gMDsKKyAgd3EtPmFsbG9jID0gMDsKKyAgd3EtPm9mZnNldCA9IDA7Cit9CisKKy8qIEVucXVldWVzIHRoZSBjdXJyZW50IHRocmVhZCwgcmVwcmVzZW50ZWQgYnkgYW4gZXZlbnQsIGluIGEgd2FpdCBxdWV1ZS4KKyAgIFJldHVybnMgSU5WQUxJRF9IQU5ETEVfVkFMVUUgaWYgYW4gYWxsb2NhdGlvbiBmYWlsdXJlIG9jY3Vycy4gICovCitzdGF0aWMgSEFORExFCitnbF93YWl0cXVldWVfYWRkIChnbF93YWl0cXVldWVfdCAqd3EpCit7CisgIEhBTkRMRSBldmVudDsKKyAgdW5zaWduZWQgaW50IGluZGV4OworCisgIGlmICh3cS0+Y291bnQgPT0gd3EtPmFsbG9jKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCBuZXdfYWxsb2MgPSAyICogd3EtPmFsbG9jICsgMTsKKyAgICAgIEhBTkRMRSAqbmV3X2FycmF5ID0KKyAgICAgICAgKEhBTkRMRSAqKSByZWFsbG9jICh3cS0+YXJyYXksIG5ld19hbGxvYyAqIHNpemVvZiAoSEFORExFKSk7CisgICAgICBpZiAobmV3X2FycmF5ID09IE5VTEwpCisgICAgICAgIC8qIE5vIG1vcmUgbWVtb3J5LiAgKi8KKyAgICAgICAgcmV0dXJuIElOVkFMSURfSEFORExFX1ZBTFVFOworICAgICAgLyogTm93IGlzIGEgZ29vZCBvcHBvcnR1bml0eSB0byByb3RhdGUgdGhlIGFycmF5IHNvIHRoYXQgaXRzIGNvbnRlbnRzCisgICAgICAgICBzdGFydHMgYXQgb2Zmc2V0IDAuICAqLworICAgICAgaWYgKHdxLT5vZmZzZXQgPiAwKQorICAgICAgICB7CisgICAgICAgICAgdW5zaWduZWQgaW50IG9sZF9jb3VudCA9IHdxLT5jb3VudDsKKyAgICAgICAgICB1bnNpZ25lZCBpbnQgb2xkX2FsbG9jID0gd3EtPmFsbG9jOworICAgICAgICAgIHVuc2lnbmVkIGludCBvbGRfb2Zmc2V0ID0gd3EtPm9mZnNldDsKKyAgICAgICAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICAgICAgICBpZiAob2xkX29mZnNldCArIG9sZF9jb3VudCA+IG9sZF9hbGxvYykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxpbWl0ID0gb2xkX29mZnNldCArIG9sZF9jb3VudCAtIG9sZF9hbGxvYzsKKyAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbWl0OyBpKyspCisgICAgICAgICAgICAgICAgbmV3X2FycmF5W29sZF9hbGxvYyArIGldID0gbmV3X2FycmF5W2ldOworICAgICAgICAgICAgfQorICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBvbGRfY291bnQ7IGkrKykKKyAgICAgICAgICAgIG5ld19hcnJheVtpXSA9IG5ld19hcnJheVtvbGRfb2Zmc2V0ICsgaV07CisgICAgICAgICAgd3EtPm9mZnNldCA9IDA7CisgICAgICAgIH0KKyAgICAgIHdxLT5hcnJheSA9IG5ld19hcnJheTsKKyAgICAgIHdxLT5hbGxvYyA9IG5ld19hbGxvYzsKKyAgICB9CisgIC8qIFdoZXRoZXIgdGhlIGNyZWF0ZWQgZXZlbnQgaXMgYSBtYW51YWwtcmVzZXQgb25lIG9yIGFuIGF1dG8tcmVzZXQgb25lLAorICAgICBkb2VzIG5vdCBtYXR0ZXIsIHNpbmNlIHdlIHdpbGwgd2FpdCBvbiBpdCBvbmx5IG9uY2UuICAqLworICBldmVudCA9IENyZWF0ZUV2ZW50IChOVUxMLCBUUlVFLCBGQUxTRSwgTlVMTCk7CisgIGlmIChldmVudCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAgICAvKiBObyB3YXkgdG8gYWxsb2NhdGUgYW4gZXZlbnQuICAqLworICAgIHJldHVybiBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKyAgaW5kZXggPSB3cS0+b2Zmc2V0ICsgd3EtPmNvdW50OworICBpZiAoaW5kZXggPj0gd3EtPmFsbG9jKQorICAgIGluZGV4IC09IHdxLT5hbGxvYzsKKyAgd3EtPmFycmF5W2luZGV4XSA9IGV2ZW50OworICB3cS0+Y291bnQrKzsKKyAgcmV0dXJuIGV2ZW50OworfQorCisvKiBOb3RpZmllcyB0aGUgZmlyc3QgdGhyZWFkIGZyb20gYSB3YWl0IHF1ZXVlIGFuZCBkZXF1ZXVlcyBpdC4gICovCitzdGF0aWMgdm9pZAorZ2xfd2FpdHF1ZXVlX25vdGlmeV9maXJzdCAoZ2xfd2FpdHF1ZXVlX3QgKndxKQoreworICBTZXRFdmVudCAod3EtPmFycmF5W3dxLT5vZmZzZXQgKyAwXSk7CisgIHdxLT5vZmZzZXQrKzsKKyAgd3EtPmNvdW50LS07CisgIGlmICh3cS0+Y291bnQgPT0gMCB8fCB3cS0+b2Zmc2V0ID09IHdxLT5hbGxvYykKKyAgICB3cS0+b2Zmc2V0ID0gMDsKK30KKworLyogTm90aWZpZXMgYWxsIHRocmVhZHMgZnJvbSBhIHdhaXQgcXVldWUgYW5kIGRlcXVldWVzIHRoZW0gYWxsLiAgKi8KK3N0YXRpYyB2b2lkCitnbF93YWl0cXVldWVfbm90aWZ5X2FsbCAoZ2xfd2FpdHF1ZXVlX3QgKndxKQoreworICB1bnNpZ25lZCBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgd3EtPmNvdW50OyBpKyspCisgICAgeworICAgICAgdW5zaWduZWQgaW50IGluZGV4ID0gd3EtPm9mZnNldCArIGk7CisgICAgICBpZiAoaW5kZXggPj0gd3EtPmFsbG9jKQorICAgICAgICBpbmRleCAtPSB3cS0+YWxsb2M7CisgICAgICBTZXRFdmVudCAod3EtPmFycmF5W2luZGV4XSk7CisgICAgfQorICB3cS0+Y291bnQgPSAwOworICB3cS0+b2Zmc2V0ID0gMDsKK30KKwordm9pZAorZ2x0aHJlYWRfcndsb2NrX2luaXRfZnVuYyAoZ2xfcndsb2NrX3QgKmxvY2spCit7CisgIEluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24gKCZsb2NrLT5sb2NrKTsKKyAgZ2xfd2FpdHF1ZXVlX2luaXQgKCZsb2NrLT53YWl0aW5nX3JlYWRlcnMpOworICBnbF93YWl0cXVldWVfaW5pdCAoJmxvY2stPndhaXRpbmdfd3JpdGVycyk7CisgIGxvY2stPnJ1bmNvdW50ID0gMDsKKyAgbG9jay0+Z3VhcmQuZG9uZSA9IDE7Cit9CisKK2ludAorZ2x0aHJlYWRfcndsb2NrX3JkbG9ja19mdW5jIChnbF9yd2xvY2tfdCAqbG9jaykKK3sKKyAgaWYgKCFsb2NrLT5ndWFyZC5kb25lKQorICAgIHsKKyAgICAgIGlmIChJbnRlcmxvY2tlZEluY3JlbWVudCAoJmxvY2stPmd1YXJkLnN0YXJ0ZWQpID09IDApCisgICAgICAgIC8qIFRoaXMgdGhyZWFkIGlzIHRoZSBmaXJzdCBvbmUgdG8gbmVlZCB0aGlzIGxvY2suICBJbml0aWFsaXplIGl0LiAgKi8KKyAgICAgICAgZ2x0aHJlYWRfcndsb2NrX2luaXQgKGxvY2spOworICAgICAgZWxzZQorICAgICAgICAvKiBZaWVsZCB0aGUgQ1BVIHdoaWxlIHdhaXRpbmcgZm9yIGFub3RoZXIgdGhyZWFkIHRvIGZpbmlzaAorICAgICAgICAgICBpbml0aWFsaXppbmcgdGhpcyBsb2NrLiAgKi8KKyAgICAgICAgd2hpbGUgKCFsb2NrLT5ndWFyZC5kb25lKQorICAgICAgICAgIFNsZWVwICgwKTsKKyAgICB9CisgIEVudGVyQ3JpdGljYWxTZWN0aW9uICgmbG9jay0+bG9jayk7CisgIC8qIFRlc3Qgd2hldGhlciBvbmx5IHJlYWRlcnMgYXJlIGN1cnJlbnRseSBydW5uaW5nLCBhbmQgd2hldGhlciB0aGUgcnVuY291bnQKKyAgICAgZmllbGQgd2lsbCBub3Qgb3ZlcmZsb3cuICAqLworICBpZiAoIShsb2NrLT5ydW5jb3VudCArIDEgPiAwKSkKKyAgICB7CisgICAgICAvKiBUaGlzIHRocmVhZCBoYXMgdG8gd2FpdCBmb3IgYSB3aGlsZS4gIEVucXVldWUgaXQgYW1vbmcgdGhlCisgICAgICAgICB3YWl0aW5nX3JlYWRlcnMuICAqLworICAgICAgSEFORExFIGV2ZW50ID0gZ2xfd2FpdHF1ZXVlX2FkZCAoJmxvY2stPndhaXRpbmdfcmVhZGVycyk7CisgICAgICBpZiAoZXZlbnQgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisgICAgICAgIHsKKyAgICAgICAgICBEV09SRCByZXN1bHQ7CisgICAgICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24gKCZsb2NrLT5sb2NrKTsKKyAgICAgICAgICAvKiBXYWl0IHVudGlsIGFub3RoZXIgdGhyZWFkIHNpZ25hbHMgdGhpcyBldmVudC4gICovCisgICAgICAgICAgcmVzdWx0ID0gV2FpdEZvclNpbmdsZU9iamVjdCAoZXZlbnQsIElORklOSVRFKTsKKyAgICAgICAgICBpZiAocmVzdWx0ID09IFdBSVRfRkFJTEVEIHx8IHJlc3VsdCA9PSBXQUlUX1RJTUVPVVQpCisgICAgICAgICAgICBhYm9ydCAoKTsKKyAgICAgICAgICBDbG9zZUhhbmRsZSAoZXZlbnQpOworICAgICAgICAgIC8qIFRoZSB0aHJlYWQgd2hpY2ggc2lnbmFsbGVkIHRoZSBldmVudCBhbHJlYWR5IGRpZCB0aGUgYm9va2tlZXBpbmc6CisgICAgICAgICAgICAgcmVtb3ZlZCB1cyBmcm9tIHRoZSB3YWl0aW5nX3JlYWRlcnMsIGluY3JlbWVudGVkIGxvY2stPnJ1bmNvdW50LiAgKi8KKyAgICAgICAgICBpZiAoIShsb2NrLT5ydW5jb3VudCA+IDApKQorICAgICAgICAgICAgYWJvcnQgKCk7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIC8qIEFsbG9jYXRpb24gZmFpbHVyZS4gIFdlaXJkLiAgKi8KKyAgICAgICAgICBkbworICAgICAgICAgICAgeworICAgICAgICAgICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbiAoJmxvY2stPmxvY2spOworICAgICAgICAgICAgICBTbGVlcCAoMSk7CisgICAgICAgICAgICAgIEVudGVyQ3JpdGljYWxTZWN0aW9uICgmbG9jay0+bG9jayk7CisgICAgICAgICAgICB9CisgICAgICAgICAgd2hpbGUgKCEobG9jay0+cnVuY291bnQgKyAxID4gMCkpOworICAgICAgICB9CisgICAgfQorICBsb2NrLT5ydW5jb3VudCsrOworICBMZWF2ZUNyaXRpY2FsU2VjdGlvbiAoJmxvY2stPmxvY2spOworICByZXR1cm4gMDsKK30KKworaW50CitnbHRocmVhZF9yd2xvY2tfd3Jsb2NrX2Z1bmMgKGdsX3J3bG9ja190ICpsb2NrKQoreworICBpZiAoIWxvY2stPmd1YXJkLmRvbmUpCisgICAgeworICAgICAgaWYgKEludGVybG9ja2VkSW5jcmVtZW50ICgmbG9jay0+Z3VhcmQuc3RhcnRlZCkgPT0gMCkKKyAgICAgICAgLyogVGhpcyB0aHJlYWQgaXMgdGhlIGZpcnN0IG9uZSB0byBuZWVkIHRoaXMgbG9jay4gIEluaXRpYWxpemUgaXQuICAqLworICAgICAgICBnbHRocmVhZF9yd2xvY2tfaW5pdCAobG9jayk7CisgICAgICBlbHNlCisgICAgICAgIC8qIFlpZWxkIHRoZSBDUFUgd2hpbGUgd2FpdGluZyBmb3IgYW5vdGhlciB0aHJlYWQgdG8gZmluaXNoCisgICAgICAgICAgIGluaXRpYWxpemluZyB0aGlzIGxvY2suICAqLworICAgICAgICB3aGlsZSAoIWxvY2stPmd1YXJkLmRvbmUpCisgICAgICAgICAgU2xlZXAgKDApOworICAgIH0KKyAgRW50ZXJDcml0aWNhbFNlY3Rpb24gKCZsb2NrLT5sb2NrKTsKKyAgLyogVGVzdCB3aGV0aGVyIG5vIHJlYWRlcnMgb3Igd3JpdGVycyBhcmUgY3VycmVudGx5IHJ1bm5pbmcuICAqLworICBpZiAoIShsb2NrLT5ydW5jb3VudCA9PSAwKSkKKyAgICB7CisgICAgICAvKiBUaGlzIHRocmVhZCBoYXMgdG8gd2FpdCBmb3IgYSB3aGlsZS4gIEVucXVldWUgaXQgYW1vbmcgdGhlCisgICAgICAgICB3YWl0aW5nX3dyaXRlcnMuICAqLworICAgICAgSEFORExFIGV2ZW50ID0gZ2xfd2FpdHF1ZXVlX2FkZCAoJmxvY2stPndhaXRpbmdfd3JpdGVycyk7CisgICAgICBpZiAoZXZlbnQgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisgICAgICAgIHsKKyAgICAgICAgICBEV09SRCByZXN1bHQ7CisgICAgICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24gKCZsb2NrLT5sb2NrKTsKKyAgICAgICAgICAvKiBXYWl0IHVudGlsIGFub3RoZXIgdGhyZWFkIHNpZ25hbHMgdGhpcyBldmVudC4gICovCisgICAgICAgICAgcmVzdWx0ID0gV2FpdEZvclNpbmdsZU9iamVjdCAoZXZlbnQsIElORklOSVRFKTsKKyAgICAgICAgICBpZiAocmVzdWx0ID09IFdBSVRfRkFJTEVEIHx8IHJlc3VsdCA9PSBXQUlUX1RJTUVPVVQpCisgICAgICAgICAgICBhYm9ydCAoKTsKKyAgICAgICAgICBDbG9zZUhhbmRsZSAoZXZlbnQpOworICAgICAgICAgIC8qIFRoZSB0aHJlYWQgd2hpY2ggc2lnbmFsbGVkIHRoZSBldmVudCBhbHJlYWR5IGRpZCB0aGUgYm9va2tlZXBpbmc6CisgICAgICAgICAgICAgcmVtb3ZlZCB1cyBmcm9tIHRoZSB3YWl0aW5nX3dyaXRlcnMsIHNldCBsb2NrLT5ydW5jb3VudCA9IC0xLiAgKi8KKyAgICAgICAgICBpZiAoIShsb2NrLT5ydW5jb3VudCA9PSAtMSkpCisgICAgICAgICAgICBhYm9ydCAoKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogQWxsb2NhdGlvbiBmYWlsdXJlLiAgV2VpcmQuICAqLworICAgICAgICAgIGRvCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uICgmbG9jay0+bG9jayk7CisgICAgICAgICAgICAgIFNsZWVwICgxKTsKKyAgICAgICAgICAgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24gKCZsb2NrLT5sb2NrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB3aGlsZSAoIShsb2NrLT5ydW5jb3VudCA9PSAwKSk7CisgICAgICAgIH0KKyAgICB9CisgIGxvY2stPnJ1bmNvdW50LS07IC8qIHJ1bmNvdW50IGJlY29tZXMgLTEgKi8KKyAgTGVhdmVDcml0aWNhbFNlY3Rpb24gKCZsb2NrLT5sb2NrKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorZ2x0aHJlYWRfcndsb2NrX3VubG9ja19mdW5jIChnbF9yd2xvY2tfdCAqbG9jaykKK3sKKyAgaWYgKCFsb2NrLT5ndWFyZC5kb25lKQorICAgIHJldHVybiBFSU5WQUw7CisgIEVudGVyQ3JpdGljYWxTZWN0aW9uICgmbG9jay0+bG9jayk7CisgIGlmIChsb2NrLT5ydW5jb3VudCA8IDApCisgICAgeworICAgICAgLyogRHJvcCBhIHdyaXRlciBsb2NrLiAgKi8KKyAgICAgIGlmICghKGxvY2stPnJ1bmNvdW50ID09IC0xKSkKKyAgICAgICAgYWJvcnQgKCk7CisgICAgICBsb2NrLT5ydW5jb3VudCA9IDA7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogRHJvcCBhIHJlYWRlciBsb2NrLiAgKi8KKyAgICAgIGlmICghKGxvY2stPnJ1bmNvdW50ID4gMCkpCisgICAgICAgIHsKKyAgICAgICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbiAoJmxvY2stPmxvY2spOworICAgICAgICAgIHJldHVybiBFUEVSTTsKKyAgICAgICAgfQorICAgICAgbG9jay0+cnVuY291bnQtLTsKKyAgICB9CisgIGlmIChsb2NrLT5ydW5jb3VudCA9PSAwKQorICAgIHsKKyAgICAgIC8qIFBPU0lYIHJlY29tbWVuZHMgdGhhdCAid3JpdGUgbG9ja3Mgc2hhbGwgdGFrZSBwcmVjZWRlbmNlIG92ZXIgcmVhZAorICAgICAgICAgbG9ja3MiLCB0byBhdm9pZCAid3JpdGVyIHN0YXJ2YXRpb24iLiAgKi8KKyAgICAgIGlmIChsb2NrLT53YWl0aW5nX3dyaXRlcnMuY291bnQgPiAwKQorICAgICAgICB7CisgICAgICAgICAgLyogV2FrZSB1cCBvbmUgb2YgdGhlIHdhaXRpbmcgd3JpdGVycy4gICovCisgICAgICAgICAgbG9jay0+cnVuY291bnQtLTsKKyAgICAgICAgICBnbF93YWl0cXVldWVfbm90aWZ5X2ZpcnN0ICgmbG9jay0+d2FpdGluZ193cml0ZXJzKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogV2FrZSB1cCBhbGwgd2FpdGluZyByZWFkZXJzLiAgKi8KKyAgICAgICAgICBsb2NrLT5ydW5jb3VudCArPSBsb2NrLT53YWl0aW5nX3JlYWRlcnMuY291bnQ7CisgICAgICAgICAgZ2xfd2FpdHF1ZXVlX25vdGlmeV9hbGwgKCZsb2NrLT53YWl0aW5nX3JlYWRlcnMpOworICAgICAgICB9CisgICAgfQorICBMZWF2ZUNyaXRpY2FsU2VjdGlvbiAoJmxvY2stPmxvY2spOworICByZXR1cm4gMDsKK30KKworaW50CitnbHRocmVhZF9yd2xvY2tfZGVzdHJveV9mdW5jIChnbF9yd2xvY2tfdCAqbG9jaykKK3sKKyAgaWYgKCFsb2NrLT5ndWFyZC5kb25lKQorICAgIHJldHVybiBFSU5WQUw7CisgIGlmIChsb2NrLT5ydW5jb3VudCAhPSAwKQorICAgIHJldHVybiBFQlVTWTsKKyAgRGVsZXRlQ3JpdGljYWxTZWN0aW9uICgmbG9jay0+bG9jayk7CisgIGlmIChsb2NrLT53YWl0aW5nX3JlYWRlcnMuYXJyYXkgIT0gTlVMTCkKKyAgICBmcmVlIChsb2NrLT53YWl0aW5nX3JlYWRlcnMuYXJyYXkpOworICBpZiAobG9jay0+d2FpdGluZ193cml0ZXJzLmFycmF5ICE9IE5VTEwpCisgICAgZnJlZSAobG9jay0+d2FpdGluZ193cml0ZXJzLmFycmF5KTsKKyAgbG9jay0+Z3VhcmQuZG9uZSA9IDA7CisgIHJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gZ2xfcmVjdXJzaXZlX2xvY2tfdCBkYXRhdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwordm9pZAorZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfaW5pdF9mdW5jIChnbF9yZWN1cnNpdmVfbG9ja190ICpsb2NrKQoreworICBsb2NrLT5vd25lciA9IDA7CisgIGxvY2stPmRlcHRoID0gMDsKKyAgSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbiAoJmxvY2stPmxvY2spOworICBsb2NrLT5ndWFyZC5kb25lID0gMTsKK30KKworaW50CitnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19sb2NrX2Z1bmMgKGdsX3JlY3Vyc2l2ZV9sb2NrX3QgKmxvY2spCit7CisgIGlmICghbG9jay0+Z3VhcmQuZG9uZSkKKyAgICB7CisgICAgICBpZiAoSW50ZXJsb2NrZWRJbmNyZW1lbnQgKCZsb2NrLT5ndWFyZC5zdGFydGVkKSA9PSAwKQorICAgICAgICAvKiBUaGlzIHRocmVhZCBpcyB0aGUgZmlyc3Qgb25lIHRvIG5lZWQgdGhpcyBsb2NrLiAgSW5pdGlhbGl6ZSBpdC4gICovCisgICAgICAgIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2luaXQgKGxvY2spOworICAgICAgZWxzZQorICAgICAgICAvKiBZaWVsZCB0aGUgQ1BVIHdoaWxlIHdhaXRpbmcgZm9yIGFub3RoZXIgdGhyZWFkIHRvIGZpbmlzaAorICAgICAgICAgICBpbml0aWFsaXppbmcgdGhpcyBsb2NrLiAgKi8KKyAgICAgICAgd2hpbGUgKCFsb2NrLT5ndWFyZC5kb25lKQorICAgICAgICAgIFNsZWVwICgwKTsKKyAgICB9CisgIHsKKyAgICBEV09SRCBzZWxmID0gR2V0Q3VycmVudFRocmVhZElkICgpOworICAgIGlmIChsb2NrLT5vd25lciAhPSBzZWxmKQorICAgICAgeworICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbiAoJmxvY2stPmxvY2spOworICAgICAgICBsb2NrLT5vd25lciA9IHNlbGY7CisgICAgICB9CisgICAgaWYgKCsrKGxvY2stPmRlcHRoKSA9PSAwKSAvKiB3cmFwYXJvdW5kPyAqLworICAgICAgeworICAgICAgICBsb2NrLT5kZXB0aC0tOworICAgICAgICByZXR1cm4gRUFHQUlOOworICAgICAgfQorICB9CisgIHJldHVybiAwOworfQorCitpbnQKK2dsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX3VubG9ja19mdW5jIChnbF9yZWN1cnNpdmVfbG9ja190ICpsb2NrKQoreworICBpZiAobG9jay0+b3duZXIgIT0gR2V0Q3VycmVudFRocmVhZElkICgpKQorICAgIHJldHVybiBFUEVSTTsKKyAgaWYgKGxvY2stPmRlcHRoID09IDApCisgICAgcmV0dXJuIEVJTlZBTDsKKyAgaWYgKC0tKGxvY2stPmRlcHRoKSA9PSAwKQorICAgIHsKKyAgICAgIGxvY2stPm93bmVyID0gMDsKKyAgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uICgmbG9jay0+bG9jayk7CisgICAgfQorICByZXR1cm4gMDsKK30KKworaW50CitnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19kZXN0cm95X2Z1bmMgKGdsX3JlY3Vyc2l2ZV9sb2NrX3QgKmxvY2spCit7CisgIGlmIChsb2NrLT5vd25lciAhPSAwKQorICAgIHJldHVybiBFQlVTWTsKKyAgRGVsZXRlQ3JpdGljYWxTZWN0aW9uICgmbG9jay0+bG9jayk7CisgIGxvY2stPmd1YXJkLmRvbmUgPSAwOworICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZ2xfb25jZV90IGRhdGF0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3ZvaWQKK2dsdGhyZWFkX29uY2VfZnVuYyAoZ2xfb25jZV90ICpvbmNlX2NvbnRyb2wsIHZvaWQgKCppbml0ZnVuY3Rpb24pICh2b2lkKSkKK3sKKyAgaWYgKG9uY2VfY29udHJvbC0+aW5pdGVkIDw9IDApCisgICAgeworICAgICAgaWYgKEludGVybG9ja2VkSW5jcmVtZW50ICgmb25jZV9jb250cm9sLT5zdGFydGVkKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgLyogVGhpcyB0aHJlYWQgaXMgdGhlIGZpcnN0IG9uZSB0byBjb21lIHRvIHRoaXMgb25jZV9jb250cm9sLiAgKi8KKyAgICAgICAgICBJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uICgmb25jZV9jb250cm9sLT5sb2NrKTsKKyAgICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbiAoJm9uY2VfY29udHJvbC0+bG9jayk7CisgICAgICAgICAgb25jZV9jb250cm9sLT5pbml0ZWQgPSAwOworICAgICAgICAgIGluaXRmdW5jdGlvbiAoKTsKKyAgICAgICAgICBvbmNlX2NvbnRyb2wtPmluaXRlZCA9IDE7CisgICAgICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24gKCZvbmNlX2NvbnRyb2wtPmxvY2spOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBVbmRvIGxhc3Qgb3BlcmF0aW9uLiAgKi8KKyAgICAgICAgICBJbnRlcmxvY2tlZERlY3JlbWVudCAoJm9uY2VfY29udHJvbC0+c3RhcnRlZCk7CisgICAgICAgICAgLyogU29tZSBvdGhlciB0aHJlYWQgaGFzIGFscmVhZHkgc3RhcnRlZCB0aGUgaW5pdGlhbGl6YXRpb24uCisgICAgICAgICAgICAgWWllbGQgdGhlIENQVSB3aGlsZSB3YWl0aW5nIGZvciB0aGUgb3RoZXIgdGhyZWFkIHRvIGZpbmlzaAorICAgICAgICAgICAgIGluaXRpYWxpemluZyBhbmQgdGFraW5nIHRoZSBsb2NrLiAgKi8KKyAgICAgICAgICB3aGlsZSAob25jZV9jb250cm9sLT5pbml0ZWQgPCAwKQorICAgICAgICAgICAgU2xlZXAgKDApOworICAgICAgICAgIGlmIChvbmNlX2NvbnRyb2wtPmluaXRlZCA8PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBUYWtlIHRoZSBsb2NrLiAgVGhpcyBibG9ja3MgdW50aWwgdGhlIG90aGVyIHRocmVhZCBoYXMKKyAgICAgICAgICAgICAgICAgZmluaXNoZWQgY2FsbGluZyB0aGUgaW5pdGZ1bmN0aW9uLiAgKi8KKyAgICAgICAgICAgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24gKCZvbmNlX2NvbnRyb2wtPmxvY2spOworICAgICAgICAgICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbiAoJm9uY2VfY29udHJvbC0+bG9jayk7CisgICAgICAgICAgICAgIGlmICghKG9uY2VfY29udHJvbC0+aW5pdGVkID4gMCkpCisgICAgICAgICAgICAgICAgYWJvcnQgKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKKyNlbmRpZgorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmRpZmYgLS1naXQgYS9saWIvZ2x0aHJlYWQvbG9jay5oIGIvbGliL2dsdGhyZWFkL2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzgyZDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2dsdGhyZWFkL2xvY2suaApAQCAtMCwwICsxLDkyNyBAQAorLyogTG9ja2luZyBpbiBtdWx0aXRocmVhZGVkIHNpdHVhdGlvbnMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPiwgMjAwNS4KKyAgIEJhc2VkIG9uIEdDQydzIGd0aHItcG9zaXguaCwgZ3Roci1wb3NpeDk1LmgsIGd0aHItc29sYXJpcy5oLAorICAgZ3Roci13aW4zMi5oLiAgKi8KKworLyogVGhpcyBmaWxlIGNvbnRhaW5zIGxvY2tpbmcgcHJpbWl0aXZlcyBmb3IgdXNlIHdpdGggYSBnaXZlbiB0aHJlYWQgbGlicmFyeS4KKyAgIEl0IGRvZXMgbm90IGNvbnRhaW4gcHJpbWl0aXZlcyBmb3IgY3JlYXRpbmcgdGhyZWFkcyBvciBmb3Igb3RoZXIKKyAgIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLgorCisgICBOb3JtYWwgKG5vbi1yZWN1cnNpdmUpIGxvY2tzOgorICAgICBUeXBlOiAgICAgICAgICAgICAgICBnbF9sb2NrX3QKKyAgICAgRGVjbGFyYXRpb246ICAgICAgICAgZ2xfbG9ja19kZWZpbmUoZXh0ZXJuLCBuYW1lKQorICAgICBJbml0aWFsaXplcjogICAgICAgICBnbF9sb2NrX2RlZmluZV9pbml0aWFsaXplZCgsIG5hbWUpCisgICAgIEluaXRpYWxpemF0aW9uOiAgICAgIGdsX2xvY2tfaW5pdCAobmFtZSk7CisgICAgIFRha2luZyB0aGUgbG9jazogICAgIGdsX2xvY2tfbG9jayAobmFtZSk7CisgICAgIFJlbGVhc2luZyB0aGUgbG9jazogIGdsX2xvY2tfdW5sb2NrIChuYW1lKTsKKyAgICAgRGUtaW5pdGlhbGl6YXRpb246ICAgZ2xfbG9ja19kZXN0cm95IChuYW1lKTsKKyAgIEVxdWl2YWxlbnQgZnVuY3Rpb25zIHdpdGggY29udHJvbCBvZiBlcnJvciBoYW5kbGluZzoKKyAgICAgSW5pdGlhbGl6YXRpb246ICAgICAgZXJyID0gZ2x0aHJlYWRfbG9ja19pbml0ICgmbmFtZSk7CisgICAgIFRha2luZyB0aGUgbG9jazogICAgIGVyciA9IGdsdGhyZWFkX2xvY2tfbG9jayAoJm5hbWUpOworICAgICBSZWxlYXNpbmcgdGhlIGxvY2s6ICBlcnIgPSBnbHRocmVhZF9sb2NrX3VubG9jayAoJm5hbWUpOworICAgICBEZS1pbml0aWFsaXphdGlvbjogICBlcnIgPSBnbHRocmVhZF9sb2NrX2Rlc3Ryb3kgKCZuYW1lKTsKKworICAgUmVhZC1Xcml0ZSAobm9uLXJlY3Vyc2l2ZSkgbG9ja3M6CisgICAgIFR5cGU6ICAgICAgICAgICAgICAgIGdsX3J3bG9ja190CisgICAgIERlY2xhcmF0aW9uOiAgICAgICAgIGdsX3J3bG9ja19kZWZpbmUoZXh0ZXJuLCBuYW1lKQorICAgICBJbml0aWFsaXplcjogICAgICAgICBnbF9yd2xvY2tfZGVmaW5lX2luaXRpYWxpemVkKCwgbmFtZSkKKyAgICAgSW5pdGlhbGl6YXRpb246ICAgICAgZ2xfcndsb2NrX2luaXQgKG5hbWUpOworICAgICBUYWtpbmcgdGhlIGxvY2s6ICAgICBnbF9yd2xvY2tfcmRsb2NrIChuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfcndsb2NrX3dybG9jayAobmFtZSk7CisgICAgIFJlbGVhc2luZyB0aGUgbG9jazogIGdsX3J3bG9ja191bmxvY2sgKG5hbWUpOworICAgICBEZS1pbml0aWFsaXphdGlvbjogICBnbF9yd2xvY2tfZGVzdHJveSAobmFtZSk7CisgICBFcXVpdmFsZW50IGZ1bmN0aW9ucyB3aXRoIGNvbnRyb2wgb2YgZXJyb3IgaGFuZGxpbmc6CisgICAgIEluaXRpYWxpemF0aW9uOiAgICAgIGVyciA9IGdsdGhyZWFkX3J3bG9ja19pbml0ICgmbmFtZSk7CisgICAgIFRha2luZyB0aGUgbG9jazogICAgIGVyciA9IGdsdGhyZWFkX3J3bG9ja19yZGxvY2sgKCZuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZ2x0aHJlYWRfcndsb2NrX3dybG9jayAoJm5hbWUpOworICAgICBSZWxlYXNpbmcgdGhlIGxvY2s6ICBlcnIgPSBnbHRocmVhZF9yd2xvY2tfdW5sb2NrICgmbmFtZSk7CisgICAgIERlLWluaXRpYWxpemF0aW9uOiAgIGVyciA9IGdsdGhyZWFkX3J3bG9ja19kZXN0cm95ICgmbmFtZSk7CisKKyAgIFJlY3Vyc2l2ZSBsb2NrczoKKyAgICAgVHlwZTogICAgICAgICAgICAgICAgZ2xfcmVjdXJzaXZlX2xvY2tfdAorICAgICBEZWNsYXJhdGlvbjogICAgICAgICBnbF9yZWN1cnNpdmVfbG9ja19kZWZpbmUoZXh0ZXJuLCBuYW1lKQorICAgICBJbml0aWFsaXplcjogICAgICAgICBnbF9yZWN1cnNpdmVfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQoLCBuYW1lKQorICAgICBJbml0aWFsaXphdGlvbjogICAgICBnbF9yZWN1cnNpdmVfbG9ja19pbml0IChuYW1lKTsKKyAgICAgVGFraW5nIHRoZSBsb2NrOiAgICAgZ2xfcmVjdXJzaXZlX2xvY2tfbG9jayAobmFtZSk7CisgICAgIFJlbGVhc2luZyB0aGUgbG9jazogIGdsX3JlY3Vyc2l2ZV9sb2NrX3VubG9jayAobmFtZSk7CisgICAgIERlLWluaXRpYWxpemF0aW9uOiAgIGdsX3JlY3Vyc2l2ZV9sb2NrX2Rlc3Ryb3kgKG5hbWUpOworICAgRXF1aXZhbGVudCBmdW5jdGlvbnMgd2l0aCBjb250cm9sIG9mIGVycm9yIGhhbmRsaW5nOgorICAgICBJbml0aWFsaXphdGlvbjogICAgICBlcnIgPSBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19pbml0ICgmbmFtZSk7CisgICAgIFRha2luZyB0aGUgbG9jazogICAgIGVyciA9IGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2xvY2sgKCZuYW1lKTsKKyAgICAgUmVsZWFzaW5nIHRoZSBsb2NrOiAgZXJyID0gZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfdW5sb2NrICgmbmFtZSk7CisgICAgIERlLWluaXRpYWxpemF0aW9uOiAgIGVyciA9IGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2Rlc3Ryb3kgKCZuYW1lKTsKKworICBPbmNlLW9ubHkgZXhlY3V0aW9uOgorICAgICBUeXBlOiAgICAgICAgICAgICAgICBnbF9vbmNlX3QKKyAgICAgSW5pdGlhbGl6ZXI6ICAgICAgICAgZ2xfb25jZV9kZWZpbmUoZXh0ZXJuLCBuYW1lKQorICAgICBFeGVjdXRpb246ICAgICAgICAgICBnbF9vbmNlIChuYW1lLCBpbml0ZnVuY3Rpb24pOworICAgRXF1aXZhbGVudCBmdW5jdGlvbnMgd2l0aCBjb250cm9sIG9mIGVycm9yIGhhbmRsaW5nOgorICAgICBFeGVjdXRpb246ICAgICAgICAgICBlcnIgPSBnbHRocmVhZF9vbmNlICgmbmFtZSwgaW5pdGZ1bmN0aW9uKTsKKyovCisKKworI2lmbmRlZiBfTE9DS19ICisjZGVmaW5lIF9MT0NLX0gKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworI2lmIFVTRV9QT1NJWF9USFJFQURTCisKKy8qIFVzZSB0aGUgUE9TSVggdGhyZWFkcyBsaWJyYXJ5LiAgKi8KKworIyBpbmNsdWRlIDxwdGhyZWFkLmg+CisKKyMgaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworIyBlbmRpZgorCisjIGlmIFBUSFJFQURfSU5fVVNFX0RFVEVDVElPTl9IQVJECisKKy8qIFRoZSBwdGhyZWFkX2luX3VzZSgpIGRldGVjdGlvbiBuZWVkcyB0byBiZSBkb25lIGF0IHJ1bnRpbWUuICAqLworIyAgZGVmaW5lIHB0aHJlYWRfaW5fdXNlKCkgXAorICAgICBnbHRocmVhZF9pbl91c2UgKCkKK2V4dGVybiBpbnQgZ2x0aHJlYWRfaW5fdXNlICh2b2lkKTsKKworIyBlbmRpZgorCisjIGlmIFVTRV9QT1NJWF9USFJFQURTX1dFQUsKKworLyogVXNlIHdlYWsgcmVmZXJlbmNlcyB0byB0aGUgUE9TSVggdGhyZWFkcyBsaWJyYXJ5LiAgKi8KKworLyogV2VhayByZWZlcmVuY2VzIGF2b2lkIGRyYWdnaW5nIGluIGV4dGVybmFsIGxpYnJhcmllcyBpZiB0aGUgb3RoZXIgcGFydHMKKyAgIG9mIHRoZSBwcm9ncmFtIGRvbid0IHVzZSB0aGVtLiAgSGVyZSB3ZSB1c2UgdGhlbSwgYmVjYXVzZSB3ZSBkb24ndCB3YW50CisgICBldmVyeSBwcm9ncmFtIHRoYXQgdXNlcyBsaWJpbnRsIHRvIGRlcGVuZCBvbiBsaWJwdGhyZWFkLiAgVGhpcyBhc3N1bWVzCisgICB0aGF0IGxpYnB0aHJlYWQgd291bGQgbm90IGJlIGxvYWRlZCBhZnRlciBsaWJpbnRsOyBpLmUuIGlmIGxpYmludGwgaXMKKyAgIGxvYWRlZCBmaXJzdCwgYnkgYW4gZXhlY3V0YWJsZSB0aGF0IGRvZXMgbm90IGRlcGVuZCBvbiBsaWJwdGhyZWFkLCBhbmQKKyAgIHRoZW4gYSBtb2R1bGUgaXMgZHluYW1pY2FsbHkgbG9hZGVkIHRoYXQgZGVwZW5kcyBvbiBsaWJwdGhyZWFkLCBsaWJpbnRsCisgICB3aWxsIG5vdCBiZSBtdWx0aXRocmVhZC1zYWZlLiAgKi8KKworLyogVGhlIHdheSB0byB0ZXN0IGF0IHJ1bnRpbWUgd2hldGhlciBsaWJwdGhyZWFkIGlzIHByZXNlbnQgaXMgdG8gdGVzdAorICAgd2hldGhlciBhIGZ1bmN0aW9uIHBvaW50ZXIncyB2YWx1ZSwgc3VjaCBhcyAmcHRocmVhZF9tdXRleF9pbml0LCBpcworICAgbm9uLU5VTEwuICBIb3dldmVyLCBzb21lIHZlcnNpb25zIG9mIEdDQyBoYXZlIGEgYnVnIHRocm91Z2ggd2hpY2gsIGluCisgICBQSUMgbW9kZSwgJmZvbyAhPSBOVUxMIGFsd2F5cyBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiB0aGVyZSBpcyBhIGRpcmVjdAorICAgY2FsbCB0byBmb28oLi4uKSBpbiB0aGUgc2FtZSBmdW5jdGlvbi4gIFRvIGF2b2lkIHRoaXMsIHdlIHRlc3QgdGhlCisgICBhZGRyZXNzIG9mIGEgZnVuY3Rpb24gaW4gbGlicHRocmVhZCB0aGF0IHdlIGRvbid0IHVzZS4gICovCisKKyMgIHByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhfaW5pdAorIyAgcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF9sb2NrCisjICBwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3VubG9jaworIyAgcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF9kZXN0cm95CisjICBwcmFnbWEgd2VhayBwdGhyZWFkX3J3bG9ja19pbml0CisjICBwcmFnbWEgd2VhayBwdGhyZWFkX3J3bG9ja19yZGxvY2sKKyMgIHByYWdtYSB3ZWFrIHB0aHJlYWRfcndsb2NrX3dybG9jaworIyAgcHJhZ21hIHdlYWsgcHRocmVhZF9yd2xvY2tfdW5sb2NrCisjICBwcmFnbWEgd2VhayBwdGhyZWFkX3J3bG9ja19kZXN0cm95CisjICBwcmFnbWEgd2VhayBwdGhyZWFkX29uY2UKKyMgIHByYWdtYSB3ZWFrIHB0aHJlYWRfY29uZF9pbml0CisjICBwcmFnbWEgd2VhayBwdGhyZWFkX2NvbmRfd2FpdAorIyAgcHJhZ21hIHdlYWsgcHRocmVhZF9jb25kX3NpZ25hbAorIyAgcHJhZ21hIHdlYWsgcHRocmVhZF9jb25kX2Jyb2FkY2FzdAorIyAgcHJhZ21hIHdlYWsgcHRocmVhZF9jb25kX2Rlc3Ryb3kKKyMgIHByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQKKyMgIHByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUKKyMgIHByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kKKyMgIGlmbmRlZiBwdGhyZWFkX3NlbGYKKyMgICBwcmFnbWEgd2VhayBwdGhyZWFkX3NlbGYKKyMgIGVuZGlmCisKKyMgIGlmICFQVEhSRUFEX0lOX1VTRV9ERVRFQ1RJT05fSEFSRAorIyAgIHByYWdtYSB3ZWFrIHB0aHJlYWRfY2FuY2VsCisjICAgZGVmaW5lIHB0aHJlYWRfaW5fdXNlKCkgKHB0aHJlYWRfY2FuY2VsICE9IE5VTEwpCisjICBlbmRpZgorCisjIGVsc2UKKworIyAgaWYgIVBUSFJFQURfSU5fVVNFX0RFVEVDVElPTl9IQVJECisjICAgZGVmaW5lIHB0aHJlYWRfaW5fdXNlKCkgMQorIyAgZW5kaWYKKworIyBlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9sb2NrX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwordHlwZWRlZiBwdGhyZWFkX211dGV4X3QgZ2xfbG9ja190OworIyBkZWZpbmUgZ2xfbG9ja19kZWZpbmUoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCisgICAgU1RPUkFHRUNMQVNTIHB0aHJlYWRfbXV0ZXhfdCBOQU1FOworIyBkZWZpbmUgZ2xfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCisgICAgU1RPUkFHRUNMQVNTIHB0aHJlYWRfbXV0ZXhfdCBOQU1FID0gZ2xfbG9ja19pbml0aWFsaXplcjsKKyMgZGVmaW5lIGdsX2xvY2tfaW5pdGlhbGl6ZXIgXAorICAgIFBUSFJFQURfTVVURVhfSU5JVElBTElaRVIKKyMgZGVmaW5lIGdsdGhyZWFkX2xvY2tfaW5pdChMT0NLKSBcCisgICAgKHB0aHJlYWRfaW5fdXNlICgpID8gcHRocmVhZF9tdXRleF9pbml0IChMT0NLLCBOVUxMKSA6IDApCisjIGRlZmluZSBnbHRocmVhZF9sb2NrX2xvY2soTE9DSykgXAorICAgIChwdGhyZWFkX2luX3VzZSAoKSA/IHB0aHJlYWRfbXV0ZXhfbG9jayAoTE9DSykgOiAwKQorIyBkZWZpbmUgZ2x0aHJlYWRfbG9ja191bmxvY2soTE9DSykgXAorICAgIChwdGhyZWFkX2luX3VzZSAoKSA/IHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChMT0NLKSA6IDApCisjIGRlZmluZSBnbHRocmVhZF9sb2NrX2Rlc3Ryb3koTE9DSykgXAorICAgIChwdGhyZWFkX2luX3VzZSAoKSA/IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAoTE9DSykgOiAwKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX3J3bG9ja190IGRhdGF0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworIyBpZiBIQVZFX1BUSFJFQURfUldMT0NLCisKKyMgIGlmZGVmIFBUSFJFQURfUldMT0NLX0lOSVRJQUxJWkVSCisKK3R5cGVkZWYgcHRocmVhZF9yd2xvY2tfdCBnbF9yd2xvY2tfdDsKKyMgICBkZWZpbmUgZ2xfcndsb2NrX2RlZmluZShTVE9SQUdFQ0xBU1MsIE5BTUUpIFwKKyAgICAgIFNUT1JBR0VDTEFTUyBwdGhyZWFkX3J3bG9ja190IE5BTUU7CisjICAgZGVmaW5lIGdsX3J3bG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCisgICAgICBTVE9SQUdFQ0xBU1MgcHRocmVhZF9yd2xvY2tfdCBOQU1FID0gZ2xfcndsb2NrX2luaXRpYWxpemVyOworIyAgIGRlZmluZSBnbF9yd2xvY2tfaW5pdGlhbGl6ZXIgXAorICAgICAgUFRIUkVBRF9SV0xPQ0tfSU5JVElBTElaRVIKKyMgICBkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX2luaXQoTE9DSykgXAorICAgICAgKHB0aHJlYWRfaW5fdXNlICgpID8gcHRocmVhZF9yd2xvY2tfaW5pdCAoTE9DSywgTlVMTCkgOiAwKQorIyAgIGRlZmluZSBnbHRocmVhZF9yd2xvY2tfcmRsb2NrKExPQ0spIFwKKyAgICAgIChwdGhyZWFkX2luX3VzZSAoKSA/IHB0aHJlYWRfcndsb2NrX3JkbG9jayAoTE9DSykgOiAwKQorIyAgIGRlZmluZSBnbHRocmVhZF9yd2xvY2tfd3Jsb2NrKExPQ0spIFwKKyAgICAgIChwdGhyZWFkX2luX3VzZSAoKSA/IHB0aHJlYWRfcndsb2NrX3dybG9jayAoTE9DSykgOiAwKQorIyAgIGRlZmluZSBnbHRocmVhZF9yd2xvY2tfdW5sb2NrKExPQ0spIFwKKyAgICAgIChwdGhyZWFkX2luX3VzZSAoKSA/IHB0aHJlYWRfcndsb2NrX3VubG9jayAoTE9DSykgOiAwKQorIyAgIGRlZmluZSBnbHRocmVhZF9yd2xvY2tfZGVzdHJveShMT0NLKSBcCisgICAgICAocHRocmVhZF9pbl91c2UgKCkgPyBwdGhyZWFkX3J3bG9ja19kZXN0cm95IChMT0NLKSA6IDApCisKKyMgIGVsc2UKKwordHlwZWRlZiBzdHJ1Y3QKKyAgICAgICAgeworICAgICAgICAgIGludCBpbml0aWFsaXplZDsKKyAgICAgICAgICBwdGhyZWFkX211dGV4X3QgZ3VhcmQ7ICAgLyogcHJvdGVjdHMgdGhlIGluaXRpYWxpemF0aW9uICovCisgICAgICAgICAgcHRocmVhZF9yd2xvY2tfdCByd2xvY2s7IC8qIHJlYWQtd3JpdGUgbG9jayAqLworICAgICAgICB9CisgICAgICAgIGdsX3J3bG9ja190OworIyAgIGRlZmluZSBnbF9yd2xvY2tfZGVmaW5lKFNUT1JBR0VDTEFTUywgTkFNRSkgXAorICAgICAgU1RPUkFHRUNMQVNTIGdsX3J3bG9ja190IE5BTUU7CisjICAgZGVmaW5lIGdsX3J3bG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCisgICAgICBTVE9SQUdFQ0xBU1MgZ2xfcndsb2NrX3QgTkFNRSA9IGdsX3J3bG9ja19pbml0aWFsaXplcjsKKyMgICBkZWZpbmUgZ2xfcndsb2NrX2luaXRpYWxpemVyIFwKKyAgICAgIHsgMCwgUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUiB9CisjICAgZGVmaW5lIGdsdGhyZWFkX3J3bG9ja19pbml0KExPQ0spIFwKKyAgICAgIChwdGhyZWFkX2luX3VzZSAoKSA/IGdsdGhyZWFkX3J3bG9ja19pbml0X211bHRpdGhyZWFkZWQgKExPQ0spIDogMCkKKyMgICBkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX3JkbG9jayhMT0NLKSBcCisgICAgICAocHRocmVhZF9pbl91c2UgKCkgPyBnbHRocmVhZF9yd2xvY2tfcmRsb2NrX211bHRpdGhyZWFkZWQgKExPQ0spIDogMCkKKyMgICBkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX3dybG9jayhMT0NLKSBcCisgICAgICAocHRocmVhZF9pbl91c2UgKCkgPyBnbHRocmVhZF9yd2xvY2tfd3Jsb2NrX211bHRpdGhyZWFkZWQgKExPQ0spIDogMCkKKyMgICBkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX3VubG9jayhMT0NLKSBcCisgICAgICAocHRocmVhZF9pbl91c2UgKCkgPyBnbHRocmVhZF9yd2xvY2tfdW5sb2NrX211bHRpdGhyZWFkZWQgKExPQ0spIDogMCkKKyMgICBkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX2Rlc3Ryb3koTE9DSykgXAorICAgICAgKHB0aHJlYWRfaW5fdXNlICgpID8gZ2x0aHJlYWRfcndsb2NrX2Rlc3Ryb3lfbXVsdGl0aHJlYWRlZCAoTE9DSykgOiAwKQorZXh0ZXJuIGludCBnbHRocmVhZF9yd2xvY2tfaW5pdF9tdWx0aXRocmVhZGVkIChnbF9yd2xvY2tfdCAqbG9jayk7CitleHRlcm4gaW50IGdsdGhyZWFkX3J3bG9ja19yZGxvY2tfbXVsdGl0aHJlYWRlZCAoZ2xfcndsb2NrX3QgKmxvY2spOworZXh0ZXJuIGludCBnbHRocmVhZF9yd2xvY2tfd3Jsb2NrX211bHRpdGhyZWFkZWQgKGdsX3J3bG9ja190ICpsb2NrKTsKK2V4dGVybiBpbnQgZ2x0aHJlYWRfcndsb2NrX3VubG9ja19tdWx0aXRocmVhZGVkIChnbF9yd2xvY2tfdCAqbG9jayk7CitleHRlcm4gaW50IGdsdGhyZWFkX3J3bG9ja19kZXN0cm95X211bHRpdGhyZWFkZWQgKGdsX3J3bG9ja190ICpsb2NrKTsKKworIyAgZW5kaWYKKworIyBlbHNlCisKK3R5cGVkZWYgc3RydWN0CisgICAgICAgIHsKKyAgICAgICAgICBwdGhyZWFkX211dGV4X3QgbG9jazsgLyogcHJvdGVjdHMgdGhlIHJlbWFpbmluZyBmaWVsZHMgKi8KKyAgICAgICAgICBwdGhyZWFkX2NvbmRfdCB3YWl0aW5nX3JlYWRlcnM7IC8qIHdhaXRpbmcgcmVhZGVycyAqLworICAgICAgICAgIHB0aHJlYWRfY29uZF90IHdhaXRpbmdfd3JpdGVyczsgLyogd2FpdGluZyB3cml0ZXJzICovCisgICAgICAgICAgdW5zaWduZWQgaW50IHdhaXRpbmdfd3JpdGVyc19jb3VudDsgLyogbnVtYmVyIG9mIHdhaXRpbmcgd3JpdGVycyAqLworICAgICAgICAgIGludCBydW5jb3VudDsgLyogbnVtYmVyIG9mIHJlYWRlcnMgcnVubmluZywgb3IgLTEgd2hlbiBhIHdyaXRlciBydW5zICovCisgICAgICAgIH0KKyAgICAgICAgZ2xfcndsb2NrX3Q7CisjIGRlZmluZSBnbF9yd2xvY2tfZGVmaW5lKFNUT1JBR0VDTEFTUywgTkFNRSkgXAorICAgIFNUT1JBR0VDTEFTUyBnbF9yd2xvY2tfdCBOQU1FOworIyBkZWZpbmUgZ2xfcndsb2NrX2RlZmluZV9pbml0aWFsaXplZChTVE9SQUdFQ0xBU1MsIE5BTUUpIFwKKyAgICBTVE9SQUdFQ0xBU1MgZ2xfcndsb2NrX3QgTkFNRSA9IGdsX3J3bG9ja19pbml0aWFsaXplcjsKKyMgZGVmaW5lIGdsX3J3bG9ja19pbml0aWFsaXplciBcCisgICAgeyBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSLCBQVEhSRUFEX0NPTkRfSU5JVElBTElaRVIsIFBUSFJFQURfQ09ORF9JTklUSUFMSVpFUiwgMCwgMCB9CisjIGRlZmluZSBnbHRocmVhZF9yd2xvY2tfaW5pdChMT0NLKSBcCisgICAgKHB0aHJlYWRfaW5fdXNlICgpID8gZ2x0aHJlYWRfcndsb2NrX2luaXRfbXVsdGl0aHJlYWRlZCAoTE9DSykgOiAwKQorIyBkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX3JkbG9jayhMT0NLKSBcCisgICAgKHB0aHJlYWRfaW5fdXNlICgpID8gZ2x0aHJlYWRfcndsb2NrX3JkbG9ja19tdWx0aXRocmVhZGVkIChMT0NLKSA6IDApCisjIGRlZmluZSBnbHRocmVhZF9yd2xvY2tfd3Jsb2NrKExPQ0spIFwKKyAgICAocHRocmVhZF9pbl91c2UgKCkgPyBnbHRocmVhZF9yd2xvY2tfd3Jsb2NrX211bHRpdGhyZWFkZWQgKExPQ0spIDogMCkKKyMgZGVmaW5lIGdsdGhyZWFkX3J3bG9ja191bmxvY2soTE9DSykgXAorICAgIChwdGhyZWFkX2luX3VzZSAoKSA/IGdsdGhyZWFkX3J3bG9ja191bmxvY2tfbXVsdGl0aHJlYWRlZCAoTE9DSykgOiAwKQorIyBkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX2Rlc3Ryb3koTE9DSykgXAorICAgIChwdGhyZWFkX2luX3VzZSAoKSA/IGdsdGhyZWFkX3J3bG9ja19kZXN0cm95X211bHRpdGhyZWFkZWQgKExPQ0spIDogMCkKK2V4dGVybiBpbnQgZ2x0aHJlYWRfcndsb2NrX2luaXRfbXVsdGl0aHJlYWRlZCAoZ2xfcndsb2NrX3QgKmxvY2spOworZXh0ZXJuIGludCBnbHRocmVhZF9yd2xvY2tfcmRsb2NrX211bHRpdGhyZWFkZWQgKGdsX3J3bG9ja190ICpsb2NrKTsKK2V4dGVybiBpbnQgZ2x0aHJlYWRfcndsb2NrX3dybG9ja19tdWx0aXRocmVhZGVkIChnbF9yd2xvY2tfdCAqbG9jayk7CitleHRlcm4gaW50IGdsdGhyZWFkX3J3bG9ja191bmxvY2tfbXVsdGl0aHJlYWRlZCAoZ2xfcndsb2NrX3QgKmxvY2spOworZXh0ZXJuIGludCBnbHRocmVhZF9yd2xvY2tfZGVzdHJveV9tdWx0aXRocmVhZGVkIChnbF9yd2xvY2tfdCAqbG9jayk7CisKKyMgZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX3JlY3Vyc2l2ZV9sb2NrX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyMgaWYgSEFWRV9QVEhSRUFEX01VVEVYX1JFQ1VSU0lWRQorCisjICBpZiBkZWZpbmVkIFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSIHx8IGRlZmluZWQgUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVJfTlAKKwordHlwZWRlZiBwdGhyZWFkX211dGV4X3QgZ2xfcmVjdXJzaXZlX2xvY2tfdDsKKyMgICBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfZGVmaW5lKFNUT1JBR0VDTEFTUywgTkFNRSkgXAorICAgICAgU1RPUkFHRUNMQVNTIHB0aHJlYWRfbXV0ZXhfdCBOQU1FOworIyAgIGRlZmluZSBnbF9yZWN1cnNpdmVfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCisgICAgICBTVE9SQUdFQ0xBU1MgcHRocmVhZF9tdXRleF90IE5BTUUgPSBnbF9yZWN1cnNpdmVfbG9ja19pbml0aWFsaXplcjsKKyMgICBpZmRlZiBQVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUSUFMSVpFUgorIyAgICBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfaW5pdGlhbGl6ZXIgXAorICAgICAgIFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSCisjICAgZWxzZQorIyAgICBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfaW5pdGlhbGl6ZXIgXAorICAgICAgIFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSX05QCisjICAgZW5kaWYKKyMgICBkZWZpbmUgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfaW5pdChMT0NLKSBcCisgICAgICAocHRocmVhZF9pbl91c2UgKCkgPyBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19pbml0X211bHRpdGhyZWFkZWQgKExPQ0spIDogMCkKKyMgICBkZWZpbmUgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfbG9jayhMT0NLKSBcCisgICAgICAocHRocmVhZF9pbl91c2UgKCkgPyBwdGhyZWFkX211dGV4X2xvY2sgKExPQ0spIDogMCkKKyMgICBkZWZpbmUgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfdW5sb2NrKExPQ0spIFwKKyAgICAgIChwdGhyZWFkX2luX3VzZSAoKSA/IHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChMT0NLKSA6IDApCisjICAgZGVmaW5lIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2Rlc3Ryb3koTE9DSykgXAorICAgICAgKHB0aHJlYWRfaW5fdXNlICgpID8gcHRocmVhZF9tdXRleF9kZXN0cm95IChMT0NLKSA6IDApCitleHRlcm4gaW50IGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2luaXRfbXVsdGl0aHJlYWRlZCAoZ2xfcmVjdXJzaXZlX2xvY2tfdCAqbG9jayk7CisKKyMgIGVsc2UKKwordHlwZWRlZiBzdHJ1Y3QKKyAgICAgICAgeworICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCByZWNtdXRleDsgLyogcmVjdXJzaXZlIG11dGV4ICovCisgICAgICAgICAgcHRocmVhZF9tdXRleF90IGd1YXJkOyAgICAvKiBwcm90ZWN0cyB0aGUgaW5pdGlhbGl6YXRpb24gKi8KKyAgICAgICAgICBpbnQgaW5pdGlhbGl6ZWQ7CisgICAgICAgIH0KKyAgICAgICAgZ2xfcmVjdXJzaXZlX2xvY2tfdDsKKyMgICBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfZGVmaW5lKFNUT1JBR0VDTEFTUywgTkFNRSkgXAorICAgICAgU1RPUkFHRUNMQVNTIGdsX3JlY3Vyc2l2ZV9sb2NrX3QgTkFNRTsKKyMgICBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkKFNUT1JBR0VDTEFTUywgTkFNRSkgXAorICAgICAgU1RPUkFHRUNMQVNTIGdsX3JlY3Vyc2l2ZV9sb2NrX3QgTkFNRSA9IGdsX3JlY3Vyc2l2ZV9sb2NrX2luaXRpYWxpemVyOworIyAgIGRlZmluZSBnbF9yZWN1cnNpdmVfbG9ja19pbml0aWFsaXplciBcCisgICAgICB7IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVIsIFBUSFJFQURfTVVURVhfSU5JVElBTElaRVIsIDAgfQorIyAgIGRlZmluZSBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19pbml0KExPQ0spIFwKKyAgICAgIChwdGhyZWFkX2luX3VzZSAoKSA/IGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2luaXRfbXVsdGl0aHJlYWRlZCAoTE9DSykgOiAwKQorIyAgIGRlZmluZSBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19sb2NrKExPQ0spIFwKKyAgICAgIChwdGhyZWFkX2luX3VzZSAoKSA/IGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2xvY2tfbXVsdGl0aHJlYWRlZCAoTE9DSykgOiAwKQorIyAgIGRlZmluZSBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja191bmxvY2soTE9DSykgXAorICAgICAgKHB0aHJlYWRfaW5fdXNlICgpID8gZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfdW5sb2NrX211bHRpdGhyZWFkZWQgKExPQ0spIDogMCkKKyMgICBkZWZpbmUgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfZGVzdHJveShMT0NLKSBcCisgICAgICAocHRocmVhZF9pbl91c2UgKCkgPyBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19kZXN0cm95X211bHRpdGhyZWFkZWQgKExPQ0spIDogMCkKK2V4dGVybiBpbnQgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfaW5pdF9tdWx0aXRocmVhZGVkIChnbF9yZWN1cnNpdmVfbG9ja190ICpsb2NrKTsKK2V4dGVybiBpbnQgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfbG9ja19tdWx0aXRocmVhZGVkIChnbF9yZWN1cnNpdmVfbG9ja190ICpsb2NrKTsKK2V4dGVybiBpbnQgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfdW5sb2NrX211bHRpdGhyZWFkZWQgKGdsX3JlY3Vyc2l2ZV9sb2NrX3QgKmxvY2spOworZXh0ZXJuIGludCBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19kZXN0cm95X211bHRpdGhyZWFkZWQgKGdsX3JlY3Vyc2l2ZV9sb2NrX3QgKmxvY2spOworCisjICBlbmRpZgorCisjIGVsc2UKKworLyogT2xkIHZlcnNpb25zIG9mIFBPU0lYIHRocmVhZHMgb24gU29sYXJpcyBkaWQgbm90IGhhdmUgcmVjdXJzaXZlIGxvY2tzLgorICAgV2UgaGF2ZSB0byBpbXBsZW1lbnQgdGhlbSBvdXJzZWx2ZXMuICAqLworCit0eXBlZGVmIHN0cnVjdAorICAgICAgICB7CisgICAgICAgICAgcHRocmVhZF9tdXRleF90IG11dGV4OworICAgICAgICAgIHB0aHJlYWRfdCBvd25lcjsKKyAgICAgICAgICB1bnNpZ25lZCBsb25nIGRlcHRoOworICAgICAgICB9CisgICAgICAgIGdsX3JlY3Vyc2l2ZV9sb2NrX3Q7CisjICBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfZGVmaW5lKFNUT1JBR0VDTEFTUywgTkFNRSkgXAorICAgICBTVE9SQUdFQ0xBU1MgZ2xfcmVjdXJzaXZlX2xvY2tfdCBOQU1FOworIyAgZGVmaW5lIGdsX3JlY3Vyc2l2ZV9sb2NrX2RlZmluZV9pbml0aWFsaXplZChTVE9SQUdFQ0xBU1MsIE5BTUUpIFwKKyAgICAgU1RPUkFHRUNMQVNTIGdsX3JlY3Vyc2l2ZV9sb2NrX3QgTkFNRSA9IGdsX3JlY3Vyc2l2ZV9sb2NrX2luaXRpYWxpemVyOworIyAgZGVmaW5lIGdsX3JlY3Vyc2l2ZV9sb2NrX2luaXRpYWxpemVyIFwKKyAgICAgeyBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSLCAocHRocmVhZF90KSAwLCAwIH0KKyMgIGRlZmluZSBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19pbml0KExPQ0spIFwKKyAgICAgKHB0aHJlYWRfaW5fdXNlICgpID8gZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfaW5pdF9tdWx0aXRocmVhZGVkIChMT0NLKSA6IDApCisjICBkZWZpbmUgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfbG9jayhMT0NLKSBcCisgICAgIChwdGhyZWFkX2luX3VzZSAoKSA/IGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2xvY2tfbXVsdGl0aHJlYWRlZCAoTE9DSykgOiAwKQorIyAgZGVmaW5lIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX3VubG9jayhMT0NLKSBcCisgICAgIChwdGhyZWFkX2luX3VzZSAoKSA/IGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX3VubG9ja19tdWx0aXRocmVhZGVkIChMT0NLKSA6IDApCisjICBkZWZpbmUgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfZGVzdHJveShMT0NLKSBcCisgICAgIChwdGhyZWFkX2luX3VzZSAoKSA/IGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2Rlc3Ryb3lfbXVsdGl0aHJlYWRlZCAoTE9DSykgOiAwKQorZXh0ZXJuIGludCBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19pbml0X211bHRpdGhyZWFkZWQgKGdsX3JlY3Vyc2l2ZV9sb2NrX3QgKmxvY2spOworZXh0ZXJuIGludCBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19sb2NrX211bHRpdGhyZWFkZWQgKGdsX3JlY3Vyc2l2ZV9sb2NrX3QgKmxvY2spOworZXh0ZXJuIGludCBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja191bmxvY2tfbXVsdGl0aHJlYWRlZCAoZ2xfcmVjdXJzaXZlX2xvY2tfdCAqbG9jayk7CitleHRlcm4gaW50IGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2Rlc3Ryb3lfbXVsdGl0aHJlYWRlZCAoZ2xfcmVjdXJzaXZlX2xvY2tfdCAqbG9jayk7CisKKyMgZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZ2xfb25jZV90IGRhdGF0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3R5cGVkZWYgcHRocmVhZF9vbmNlX3QgZ2xfb25jZV90OworIyBkZWZpbmUgZ2xfb25jZV9kZWZpbmUoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCisgICAgU1RPUkFHRUNMQVNTIHB0aHJlYWRfb25jZV90IE5BTUUgPSBQVEhSRUFEX09OQ0VfSU5JVDsKKyMgZGVmaW5lIGdsdGhyZWFkX29uY2UoT05DRV9DT05UUk9MLCBJTklURlVOQ1RJT04pIFwKKyAgICAocHRocmVhZF9pbl91c2UgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgID8gcHRocmVhZF9vbmNlIChPTkNFX0NPTlRST0wsIElOSVRGVU5DVElPTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICA6IChnbHRocmVhZF9vbmNlX3NpbmdsZXRocmVhZGVkIChPTkNFX0NPTlRST0wpID8gKElOSVRGVU5DVElPTiAoKSwgMCkgOiAwKSkKK2V4dGVybiBpbnQgZ2x0aHJlYWRfb25jZV9zaW5nbGV0aHJlYWRlZCAocHRocmVhZF9vbmNlX3QgKm9uY2VfY29udHJvbCk7CisKKyMgaWZkZWYgX19jcGx1c3BsdXMKK30KKyMgZW5kaWYKKworI2VuZGlmCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworI2lmIFVTRV9QVEhfVEhSRUFEUworCisvKiBVc2UgdGhlIEdOVSBQdGggdGhyZWFkcyBsaWJyYXJ5LiAgKi8KKworIyBpbmNsdWRlIDxwdGguaD4KKworIyBpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjIGVuZGlmCisKKyMgaWYgVVNFX1BUSF9USFJFQURTX1dFQUsKKworLyogVXNlIHdlYWsgcmVmZXJlbmNlcyB0byB0aGUgR05VIFB0aCB0aHJlYWRzIGxpYnJhcnkuICAqLworCisjICBwcmFnbWEgd2VhayBwdGhfbXV0ZXhfaW5pdAorIyAgcHJhZ21hIHdlYWsgcHRoX211dGV4X2FjcXVpcmUKKyMgIHByYWdtYSB3ZWFrIHB0aF9tdXRleF9yZWxlYXNlCisjICBwcmFnbWEgd2VhayBwdGhfcndsb2NrX2luaXQKKyMgIHByYWdtYSB3ZWFrIHB0aF9yd2xvY2tfYWNxdWlyZQorIyAgcHJhZ21hIHdlYWsgcHRoX3J3bG9ja19yZWxlYXNlCisjICBwcmFnbWEgd2VhayBwdGhfb25jZQorCisjICBwcmFnbWEgd2VhayBwdGhfY2FuY2VsCisjICBkZWZpbmUgcHRoX2luX3VzZSgpIChwdGhfY2FuY2VsICE9IE5VTEwpCisKKyMgZWxzZQorCisjICBkZWZpbmUgcHRoX2luX3VzZSgpIDEKKworIyBlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9sb2NrX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwordHlwZWRlZiBwdGhfbXV0ZXhfdCBnbF9sb2NrX3Q7CisjIGRlZmluZSBnbF9sb2NrX2RlZmluZShTVE9SQUdFQ0xBU1MsIE5BTUUpIFwKKyAgICBTVE9SQUdFQ0xBU1MgcHRoX211dGV4X3QgTkFNRTsKKyMgZGVmaW5lIGdsX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkKFNUT1JBR0VDTEFTUywgTkFNRSkgXAorICAgIFNUT1JBR0VDTEFTUyBwdGhfbXV0ZXhfdCBOQU1FID0gZ2xfbG9ja19pbml0aWFsaXplcjsKKyMgZGVmaW5lIGdsX2xvY2tfaW5pdGlhbGl6ZXIgXAorICAgIFBUSF9NVVRFWF9JTklUCisjIGRlZmluZSBnbHRocmVhZF9sb2NrX2luaXQoTE9DSykgXAorICAgIChwdGhfaW5fdXNlICgpICYmICFwdGhfbXV0ZXhfaW5pdCAoTE9DSykgPyBlcnJubyA6IDApCisjIGRlZmluZSBnbHRocmVhZF9sb2NrX2xvY2soTE9DSykgXAorICAgIChwdGhfaW5fdXNlICgpICYmICFwdGhfbXV0ZXhfYWNxdWlyZSAoTE9DSywgMCwgTlVMTCkgPyBlcnJubyA6IDApCisjIGRlZmluZSBnbHRocmVhZF9sb2NrX3VubG9jayhMT0NLKSBcCisgICAgKHB0aF9pbl91c2UgKCkgJiYgIXB0aF9tdXRleF9yZWxlYXNlIChMT0NLKSA/IGVycm5vIDogMCkKKyMgZGVmaW5lIGdsdGhyZWFkX2xvY2tfZGVzdHJveShMT0NLKSBcCisgICAgKCh2b2lkKShMT0NLKSwgMCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9yd2xvY2tfdCBkYXRhdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3R5cGVkZWYgcHRoX3J3bG9ja190IGdsX3J3bG9ja190OworIyAgZGVmaW5lIGdsX3J3bG9ja19kZWZpbmUoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCisgICAgIFNUT1JBR0VDTEFTUyBwdGhfcndsb2NrX3QgTkFNRTsKKyMgIGRlZmluZSBnbF9yd2xvY2tfZGVmaW5lX2luaXRpYWxpemVkKFNUT1JBR0VDTEFTUywgTkFNRSkgXAorICAgICBTVE9SQUdFQ0xBU1MgcHRoX3J3bG9ja190IE5BTUUgPSBnbF9yd2xvY2tfaW5pdGlhbGl6ZXI7CisjICBkZWZpbmUgZ2xfcndsb2NrX2luaXRpYWxpemVyIFwKKyAgICAgUFRIX1JXTE9DS19JTklUCisjICBkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX2luaXQoTE9DSykgXAorICAgICAocHRoX2luX3VzZSAoKSAmJiAhcHRoX3J3bG9ja19pbml0IChMT0NLKSA/IGVycm5vIDogMCkKKyMgIGRlZmluZSBnbHRocmVhZF9yd2xvY2tfcmRsb2NrKExPQ0spIFwKKyAgICAgKHB0aF9pbl91c2UgKCkgJiYgIXB0aF9yd2xvY2tfYWNxdWlyZSAoTE9DSywgUFRIX1JXTE9DS19SRCwgMCwgTlVMTCkgPyBlcnJubyA6IDApCisjICBkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX3dybG9jayhMT0NLKSBcCisgICAgIChwdGhfaW5fdXNlICgpICYmICFwdGhfcndsb2NrX2FjcXVpcmUgKExPQ0ssIFBUSF9SV0xPQ0tfUlcsIDAsIE5VTEwpID8gZXJybm8gOiAwKQorIyAgZGVmaW5lIGdsdGhyZWFkX3J3bG9ja191bmxvY2soTE9DSykgXAorICAgICAocHRoX2luX3VzZSAoKSAmJiAhcHRoX3J3bG9ja19yZWxlYXNlIChMT0NLKSA/IGVycm5vIDogMCkKKyMgIGRlZmluZSBnbHRocmVhZF9yd2xvY2tfZGVzdHJveShMT0NLKSBcCisgICAgICgodm9pZCkoTE9DSyksIDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9yZWN1cnNpdmVfbG9ja190IGRhdGF0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBJbiBQdGgsIG11dGV4ZXMgYXJlIHJlY3Vyc2l2ZSBieSBkZWZhdWx0LiAgKi8KK3R5cGVkZWYgcHRoX211dGV4X3QgZ2xfcmVjdXJzaXZlX2xvY2tfdDsKKyMgIGRlZmluZSBnbF9yZWN1cnNpdmVfbG9ja19kZWZpbmUoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCisgICAgIFNUT1JBR0VDTEFTUyBwdGhfbXV0ZXhfdCBOQU1FOworIyAgZGVmaW5lIGdsX3JlY3Vyc2l2ZV9sb2NrX2RlZmluZV9pbml0aWFsaXplZChTVE9SQUdFQ0xBU1MsIE5BTUUpIFwKKyAgICAgU1RPUkFHRUNMQVNTIHB0aF9tdXRleF90IE5BTUUgPSBnbF9yZWN1cnNpdmVfbG9ja19pbml0aWFsaXplcjsKKyMgIGRlZmluZSBnbF9yZWN1cnNpdmVfbG9ja19pbml0aWFsaXplciBcCisgICAgIFBUSF9NVVRFWF9JTklUCisjICBkZWZpbmUgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfaW5pdChMT0NLKSBcCisgICAgIChwdGhfaW5fdXNlICgpICYmICFwdGhfbXV0ZXhfaW5pdCAoTE9DSykgPyBlcnJubyA6IDApCisjICBkZWZpbmUgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfbG9jayhMT0NLKSBcCisgICAgIChwdGhfaW5fdXNlICgpICYmICFwdGhfbXV0ZXhfYWNxdWlyZSAoTE9DSywgMCwgTlVMTCkgPyBlcnJubyA6IDApCisjICBkZWZpbmUgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfdW5sb2NrKExPQ0spIFwKKyAgICAgKHB0aF9pbl91c2UgKCkgJiYgIXB0aF9tdXRleF9yZWxlYXNlIChMT0NLKSA/IGVycm5vIDogMCkKKyMgIGRlZmluZSBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19kZXN0cm95KExPQ0spIFwKKyAgICAgKCh2b2lkKShMT0NLKSwgMCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZ2xfb25jZV90IGRhdGF0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3R5cGVkZWYgcHRoX29uY2VfdCBnbF9vbmNlX3Q7CisjIGRlZmluZSBnbF9vbmNlX2RlZmluZShTVE9SQUdFQ0xBU1MsIE5BTUUpIFwKKyAgICBTVE9SQUdFQ0xBU1MgcHRoX29uY2VfdCBOQU1FID0gUFRIX09OQ0VfSU5JVDsKKyMgZGVmaW5lIGdsdGhyZWFkX29uY2UoT05DRV9DT05UUk9MLCBJTklURlVOQ1RJT04pIFwKKyAgICAocHRoX2luX3VzZSAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgID8gZ2x0aHJlYWRfb25jZV9tdWx0aXRocmVhZGVkIChPTkNFX0NPTlRST0wsIElOSVRGVU5DVElPTikgICAgICAgICAgICAgICAgXAorICAgICA6IChnbHRocmVhZF9vbmNlX3NpbmdsZXRocmVhZGVkIChPTkNFX0NPTlRST0wpID8gKElOSVRGVU5DVElPTiAoKSwgMCkgOiAwKSkKK2V4dGVybiBpbnQgZ2x0aHJlYWRfb25jZV9tdWx0aXRocmVhZGVkIChwdGhfb25jZV90ICpvbmNlX2NvbnRyb2wsIHZvaWQgKCppbml0ZnVuY3Rpb24pICh2b2lkKSk7CitleHRlcm4gaW50IGdsdGhyZWFkX29uY2Vfc2luZ2xldGhyZWFkZWQgKHB0aF9vbmNlX3QgKm9uY2VfY29udHJvbCk7CisKKyMgaWZkZWYgX19jcGx1c3BsdXMKK30KKyMgZW5kaWYKKworI2VuZGlmCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworI2lmIFVTRV9TT0xBUklTX1RIUkVBRFMKKworLyogVXNlIHRoZSBvbGQgU29sYXJpcyB0aHJlYWRzIGxpYnJhcnkuICAqLworCisjIGluY2x1ZGUgPHRocmVhZC5oPgorIyBpbmNsdWRlIDxzeW5jaC5oPgorCisjIGlmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyMgZW5kaWYKKworIyBpZiBVU0VfU09MQVJJU19USFJFQURTX1dFQUsKKworLyogVXNlIHdlYWsgcmVmZXJlbmNlcyB0byB0aGUgb2xkIFNvbGFyaXMgdGhyZWFkcyBsaWJyYXJ5LiAgKi8KKworIyAgcHJhZ21hIHdlYWsgbXV0ZXhfaW5pdAorIyAgcHJhZ21hIHdlYWsgbXV0ZXhfbG9jaworIyAgcHJhZ21hIHdlYWsgbXV0ZXhfdW5sb2NrCisjICBwcmFnbWEgd2VhayBtdXRleF9kZXN0cm95CisjICBwcmFnbWEgd2VhayByd2xvY2tfaW5pdAorIyAgcHJhZ21hIHdlYWsgcndfcmRsb2NrCisjICBwcmFnbWEgd2VhayByd193cmxvY2sKKyMgIHByYWdtYSB3ZWFrIHJ3X3VubG9jaworIyAgcHJhZ21hIHdlYWsgcndsb2NrX2Rlc3Ryb3kKKyMgIHByYWdtYSB3ZWFrIHRocl9zZWxmCisKKyMgIHByYWdtYSB3ZWFrIHRocl9zdXNwZW5kCisjICBkZWZpbmUgdGhyZWFkX2luX3VzZSgpICh0aHJfc3VzcGVuZCAhPSBOVUxMKQorCisjIGVsc2UKKworIyAgZGVmaW5lIHRocmVhZF9pbl91c2UoKSAxCisKKyMgZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZ2xfbG9ja190IGRhdGF0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3R5cGVkZWYgbXV0ZXhfdCBnbF9sb2NrX3Q7CisjIGRlZmluZSBnbF9sb2NrX2RlZmluZShTVE9SQUdFQ0xBU1MsIE5BTUUpIFwKKyAgICBTVE9SQUdFQ0xBU1MgbXV0ZXhfdCBOQU1FOworIyBkZWZpbmUgZ2xfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCisgICAgU1RPUkFHRUNMQVNTIG11dGV4X3QgTkFNRSA9IGdsX2xvY2tfaW5pdGlhbGl6ZXI7CisjIGRlZmluZSBnbF9sb2NrX2luaXRpYWxpemVyIFwKKyAgICBERUZBVUxUTVVURVgKKyMgZGVmaW5lIGdsdGhyZWFkX2xvY2tfaW5pdChMT0NLKSBcCisgICAgKHRocmVhZF9pbl91c2UgKCkgPyBtdXRleF9pbml0IChMT0NLLCBVU1lOQ19USFJFQUQsIE5VTEwpIDogMCkKKyMgZGVmaW5lIGdsdGhyZWFkX2xvY2tfbG9jayhMT0NLKSBcCisgICAgKHRocmVhZF9pbl91c2UgKCkgPyBtdXRleF9sb2NrIChMT0NLKSA6IDApCisjIGRlZmluZSBnbHRocmVhZF9sb2NrX3VubG9jayhMT0NLKSBcCisgICAgKHRocmVhZF9pbl91c2UgKCkgPyBtdXRleF91bmxvY2sgKExPQ0spIDogMCkKKyMgZGVmaW5lIGdsdGhyZWFkX2xvY2tfZGVzdHJveShMT0NLKSBcCisgICAgKHRocmVhZF9pbl91c2UgKCkgPyBtdXRleF9kZXN0cm95IChMT0NLKSA6IDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZ2xfcndsb2NrX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit0eXBlZGVmIHJ3bG9ja190IGdsX3J3bG9ja190OworIyBkZWZpbmUgZ2xfcndsb2NrX2RlZmluZShTVE9SQUdFQ0xBU1MsIE5BTUUpIFwKKyAgICBTVE9SQUdFQ0xBU1Mgcndsb2NrX3QgTkFNRTsKKyMgZGVmaW5lIGdsX3J3bG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCisgICAgU1RPUkFHRUNMQVNTIHJ3bG9ja190IE5BTUUgPSBnbF9yd2xvY2tfaW5pdGlhbGl6ZXI7CisjIGRlZmluZSBnbF9yd2xvY2tfaW5pdGlhbGl6ZXIgXAorICAgIERFRkFVTFRSV0xPQ0sKKyMgZGVmaW5lIGdsdGhyZWFkX3J3bG9ja19pbml0KExPQ0spIFwKKyAgICAodGhyZWFkX2luX3VzZSAoKSA/IHJ3bG9ja19pbml0IChMT0NLLCBVU1lOQ19USFJFQUQsIE5VTEwpIDogMCkKKyMgZGVmaW5lIGdsdGhyZWFkX3J3bG9ja19yZGxvY2soTE9DSykgXAorICAgICh0aHJlYWRfaW5fdXNlICgpID8gcndfcmRsb2NrIChMT0NLKSA6IDApCisjIGRlZmluZSBnbHRocmVhZF9yd2xvY2tfd3Jsb2NrKExPQ0spIFwKKyAgICAodGhyZWFkX2luX3VzZSAoKSA/IHJ3X3dybG9jayAoTE9DSykgOiAwKQorIyBkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX3VubG9jayhMT0NLKSBcCisgICAgKHRocmVhZF9pbl91c2UgKCkgPyByd191bmxvY2sgKExPQ0spIDogMCkKKyMgZGVmaW5lIGdsdGhyZWFkX3J3bG9ja19kZXN0cm95KExPQ0spIFwKKyAgICAodGhyZWFkX2luX3VzZSAoKSA/IHJ3bG9ja19kZXN0cm95IChMT0NLKSA6IDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9yZWN1cnNpdmVfbG9ja190IGRhdGF0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBPbGQgU29sYXJpcyB0aHJlYWRzIGRpZCBub3QgaGF2ZSByZWN1cnNpdmUgbG9ja3MuCisgICBXZSBoYXZlIHRvIGltcGxlbWVudCB0aGVtIG91cnNlbHZlcy4gICovCisKK3R5cGVkZWYgc3RydWN0CisgICAgICAgIHsKKyAgICAgICAgICBtdXRleF90IG11dGV4OworICAgICAgICAgIHRocmVhZF90IG93bmVyOworICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZGVwdGg7CisgICAgICAgIH0KKyAgICAgICAgZ2xfcmVjdXJzaXZlX2xvY2tfdDsKKyMgZGVmaW5lIGdsX3JlY3Vyc2l2ZV9sb2NrX2RlZmluZShTVE9SQUdFQ0xBU1MsIE5BTUUpIFwKKyAgICBTVE9SQUdFQ0xBU1MgZ2xfcmVjdXJzaXZlX2xvY2tfdCBOQU1FOworIyBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkKFNUT1JBR0VDTEFTUywgTkFNRSkgXAorICAgIFNUT1JBR0VDTEFTUyBnbF9yZWN1cnNpdmVfbG9ja190IE5BTUUgPSBnbF9yZWN1cnNpdmVfbG9ja19pbml0aWFsaXplcjsKKyMgZGVmaW5lIGdsX3JlY3Vyc2l2ZV9sb2NrX2luaXRpYWxpemVyIFwKKyAgICB7IERFRkFVTFRNVVRFWCwgKHRocmVhZF90KSAwLCAwIH0KKyMgZGVmaW5lIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2luaXQoTE9DSykgXAorICAgICh0aHJlYWRfaW5fdXNlICgpID8gZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfaW5pdF9tdWx0aXRocmVhZGVkIChMT0NLKSA6IDApCisjIGRlZmluZSBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19sb2NrKExPQ0spIFwKKyAgICAodGhyZWFkX2luX3VzZSAoKSA/IGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2xvY2tfbXVsdGl0aHJlYWRlZCAoTE9DSykgOiAwKQorIyBkZWZpbmUgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfdW5sb2NrKExPQ0spIFwKKyAgICAodGhyZWFkX2luX3VzZSAoKSA/IGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX3VubG9ja19tdWx0aXRocmVhZGVkIChMT0NLKSA6IDApCisjIGRlZmluZSBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19kZXN0cm95KExPQ0spIFwKKyAgICAodGhyZWFkX2luX3VzZSAoKSA/IGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2Rlc3Ryb3lfbXVsdGl0aHJlYWRlZCAoTE9DSykgOiAwKQorZXh0ZXJuIGludCBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19pbml0X211bHRpdGhyZWFkZWQgKGdsX3JlY3Vyc2l2ZV9sb2NrX3QgKmxvY2spOworZXh0ZXJuIGludCBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19sb2NrX211bHRpdGhyZWFkZWQgKGdsX3JlY3Vyc2l2ZV9sb2NrX3QgKmxvY2spOworZXh0ZXJuIGludCBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja191bmxvY2tfbXVsdGl0aHJlYWRlZCAoZ2xfcmVjdXJzaXZlX2xvY2tfdCAqbG9jayk7CitleHRlcm4gaW50IGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2Rlc3Ryb3lfbXVsdGl0aHJlYWRlZCAoZ2xfcmVjdXJzaXZlX2xvY2tfdCAqbG9jayk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX29uY2VfdCBkYXRhdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit0eXBlZGVmIHN0cnVjdAorICAgICAgICB7CisgICAgICAgICAgdm9sYXRpbGUgaW50IGluaXRlZDsKKyAgICAgICAgICBtdXRleF90IG11dGV4OworICAgICAgICB9CisgICAgICAgIGdsX29uY2VfdDsKKyMgZGVmaW5lIGdsX29uY2VfZGVmaW5lKFNUT1JBR0VDTEFTUywgTkFNRSkgXAorICAgIFNUT1JBR0VDTEFTUyBnbF9vbmNlX3QgTkFNRSA9IHsgMCwgREVGQVVMVE1VVEVYIH07CisjIGRlZmluZSBnbHRocmVhZF9vbmNlKE9OQ0VfQ09OVFJPTCwgSU5JVEZVTkNUSU9OKSBcCisgICAgKHRocmVhZF9pbl91c2UgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICA/IGdsdGhyZWFkX29uY2VfbXVsdGl0aHJlYWRlZCAoT05DRV9DT05UUk9MLCBJTklURlVOQ1RJT04pICAgICAgICAgICAgICAgIFwKKyAgICAgOiAoZ2x0aHJlYWRfb25jZV9zaW5nbGV0aHJlYWRlZCAoT05DRV9DT05UUk9MKSA/IChJTklURlVOQ1RJT04gKCksIDApIDogMCkpCitleHRlcm4gaW50IGdsdGhyZWFkX29uY2VfbXVsdGl0aHJlYWRlZCAoZ2xfb25jZV90ICpvbmNlX2NvbnRyb2wsIHZvaWQgKCppbml0ZnVuY3Rpb24pICh2b2lkKSk7CitleHRlcm4gaW50IGdsdGhyZWFkX29uY2Vfc2luZ2xldGhyZWFkZWQgKGdsX29uY2VfdCAqb25jZV9jb250cm9sKTsKKworIyBpZmRlZiBfX2NwbHVzcGx1cworfQorIyBlbmRpZgorCisjZW5kaWYKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisjaWYgVVNFX1dJTkRPV1NfVEhSRUFEUworCisjIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOICAvKiBhdm9pZCBpbmNsdWRpbmcganVuayAqLworIyBpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyMgaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworIyBlbmRpZgorCisvKiBXZSBjYW4gdXNlIENSSVRJQ0FMX1NFQ1RJT04gZGlyZWN0bHksIHJhdGhlciB0aGFuIHRoZSBuYXRpdmUgV2luZG93cyBFdmVudCwKKyAgIE11dGV4LCBTZW1hcGhvcmUgdHlwZXMsIGJlY2F1c2UKKyAgICAgLSB3ZSBuZWVkIG9ubHkgdG8gc3luY2hyb25pemUgaW5zaWRlIGEgc2luZ2xlIHByb2Nlc3MgKGFkZHJlc3Mgc3BhY2UpLAorICAgICAgIG5vdCBpbnRlci1wcm9jZXNzIGxvY2tpbmcsCisgICAgIC0gd2UgZG9uJ3QgbmVlZCB0byBzdXBwb3J0IHRyeWxvY2sgb3BlcmF0aW9ucy4gIChUcnlFbnRlckNyaXRpY2FsU2VjdGlvbgorICAgICAgIGRvZXMgbm90IHdvcmsgb24gV2luZG93cyA5NS85OC9NRS4gIFBhY2thZ2VzIHRoYXQgbmVlZCB0cnlsb2NrIHVzdWFsbHkKKyAgICAgICBkZWZpbmUgdGhlaXIgb3duIG11dGV4IHR5cGUuKSAgKi8KKworLyogVGhlcmUgaXMgbm8gd2F5IHRvIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZSBhIENSSVRJQ0FMX1NFQ1RJT04uICBJdCBuZWVkcworICAgdG8gYmUgZG9uZSBsYXppbHksIG9uY2Ugb25seS4gIEZvciB0aGlzIHdlIG5lZWQgc3BpbmxvY2tzLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGlsZSBpbnQgZG9uZTsgdm9sYXRpbGUgbG9uZyBzdGFydGVkOyB9IGdsX3NwaW5sb2NrX3Q7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX2xvY2tfdCBkYXRhdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit0eXBlZGVmIHN0cnVjdAorICAgICAgICB7CisgICAgICAgICAgZ2xfc3BpbmxvY2tfdCBndWFyZDsgLyogcHJvdGVjdHMgdGhlIGluaXRpYWxpemF0aW9uICovCisgICAgICAgICAgQ1JJVElDQUxfU0VDVElPTiBsb2NrOworICAgICAgICB9CisgICAgICAgIGdsX2xvY2tfdDsKKyMgZGVmaW5lIGdsX2xvY2tfZGVmaW5lKFNUT1JBR0VDTEFTUywgTkFNRSkgXAorICAgIFNUT1JBR0VDTEFTUyBnbF9sb2NrX3QgTkFNRTsKKyMgZGVmaW5lIGdsX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkKFNUT1JBR0VDTEFTUywgTkFNRSkgXAorICAgIFNUT1JBR0VDTEFTUyBnbF9sb2NrX3QgTkFNRSA9IGdsX2xvY2tfaW5pdGlhbGl6ZXI7CisjIGRlZmluZSBnbF9sb2NrX2luaXRpYWxpemVyIFwKKyAgICB7IHsgMCwgLTEgfSB9CisjIGRlZmluZSBnbHRocmVhZF9sb2NrX2luaXQoTE9DSykgXAorICAgIChnbHRocmVhZF9sb2NrX2luaXRfZnVuYyAoTE9DSyksIDApCisjIGRlZmluZSBnbHRocmVhZF9sb2NrX2xvY2soTE9DSykgXAorICAgIGdsdGhyZWFkX2xvY2tfbG9ja19mdW5jIChMT0NLKQorIyBkZWZpbmUgZ2x0aHJlYWRfbG9ja191bmxvY2soTE9DSykgXAorICAgIGdsdGhyZWFkX2xvY2tfdW5sb2NrX2Z1bmMgKExPQ0spCisjIGRlZmluZSBnbHRocmVhZF9sb2NrX2Rlc3Ryb3koTE9DSykgXAorICAgIGdsdGhyZWFkX2xvY2tfZGVzdHJveV9mdW5jIChMT0NLKQorZXh0ZXJuIHZvaWQgZ2x0aHJlYWRfbG9ja19pbml0X2Z1bmMgKGdsX2xvY2tfdCAqbG9jayk7CitleHRlcm4gaW50IGdsdGhyZWFkX2xvY2tfbG9ja19mdW5jIChnbF9sb2NrX3QgKmxvY2spOworZXh0ZXJuIGludCBnbHRocmVhZF9sb2NrX3VubG9ja19mdW5jIChnbF9sb2NrX3QgKmxvY2spOworZXh0ZXJuIGludCBnbHRocmVhZF9sb2NrX2Rlc3Ryb3lfZnVuYyAoZ2xfbG9ja190ICpsb2NrKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9yd2xvY2tfdCBkYXRhdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEl0IGlzIGltcG9zc2libGUgdG8gaW1wbGVtZW50IHJlYWQtd3JpdGUgbG9ja3MgdXNpbmcgcGxhaW4gbG9ja3MsIHdpdGhvdXQKKyAgIGludHJvZHVjaW5nIGFuIGV4dHJhIHRocmVhZCBkZWRpY2F0ZWQgdG8gbWFuYWdpbmcgcmVhZC13cml0ZSBsb2Nrcy4KKyAgIFRoZXJlZm9yZSBoZXJlIHdlIG5lZWQgdG8gdXNlIHRoZSBsb3ctbGV2ZWwgRXZlbnQgdHlwZS4gICovCisKK3R5cGVkZWYgc3RydWN0CisgICAgICAgIHsKKyAgICAgICAgICBIQU5ETEUgKmFycmF5OyAvKiBhcnJheSBvZiB3YWl0aW5nIHRocmVhZHMsIGVhY2ggcmVwcmVzZW50ZWQgYnkgYW4gZXZlbnQgKi8KKyAgICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQ7IC8qIG51bWJlciBvZiB3YWl0aW5nIHRocmVhZHMgKi8KKyAgICAgICAgICB1bnNpZ25lZCBpbnQgYWxsb2M7IC8qIGxlbmd0aCBvZiBhbGxvY2F0ZWQgYXJyYXkgKi8KKyAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0OyAvKiBpbmRleCBvZiBmaXJzdCB3YWl0aW5nIHRocmVhZCBpbiBhcnJheSAqLworICAgICAgICB9CisgICAgICAgIGdsX2NhcnJheV93YWl0cXVldWVfdDsKK3R5cGVkZWYgc3RydWN0CisgICAgICAgIHsKKyAgICAgICAgICBnbF9zcGlubG9ja190IGd1YXJkOyAvKiBwcm90ZWN0cyB0aGUgaW5pdGlhbGl6YXRpb24gKi8KKyAgICAgICAgICBDUklUSUNBTF9TRUNUSU9OIGxvY2s7IC8qIHByb3RlY3RzIHRoZSByZW1haW5pbmcgZmllbGRzICovCisgICAgICAgICAgZ2xfY2FycmF5X3dhaXRxdWV1ZV90IHdhaXRpbmdfcmVhZGVyczsgLyogd2FpdGluZyByZWFkZXJzICovCisgICAgICAgICAgZ2xfY2FycmF5X3dhaXRxdWV1ZV90IHdhaXRpbmdfd3JpdGVyczsgLyogd2FpdGluZyB3cml0ZXJzICovCisgICAgICAgICAgaW50IHJ1bmNvdW50OyAvKiBudW1iZXIgb2YgcmVhZGVycyBydW5uaW5nLCBvciAtMSB3aGVuIGEgd3JpdGVyIHJ1bnMgKi8KKyAgICAgICAgfQorICAgICAgICBnbF9yd2xvY2tfdDsKKyMgZGVmaW5lIGdsX3J3bG9ja19kZWZpbmUoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCisgICAgU1RPUkFHRUNMQVNTIGdsX3J3bG9ja190IE5BTUU7CisjIGRlZmluZSBnbF9yd2xvY2tfZGVmaW5lX2luaXRpYWxpemVkKFNUT1JBR0VDTEFTUywgTkFNRSkgXAorICAgIFNUT1JBR0VDTEFTUyBnbF9yd2xvY2tfdCBOQU1FID0gZ2xfcndsb2NrX2luaXRpYWxpemVyOworIyBkZWZpbmUgZ2xfcndsb2NrX2luaXRpYWxpemVyIFwKKyAgICB7IHsgMCwgLTEgfSB9CisjIGRlZmluZSBnbHRocmVhZF9yd2xvY2tfaW5pdChMT0NLKSBcCisgICAgKGdsdGhyZWFkX3J3bG9ja19pbml0X2Z1bmMgKExPQ0spLCAwKQorIyBkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX3JkbG9jayhMT0NLKSBcCisgICAgZ2x0aHJlYWRfcndsb2NrX3JkbG9ja19mdW5jIChMT0NLKQorIyBkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX3dybG9jayhMT0NLKSBcCisgICAgZ2x0aHJlYWRfcndsb2NrX3dybG9ja19mdW5jIChMT0NLKQorIyBkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX3VubG9jayhMT0NLKSBcCisgICAgZ2x0aHJlYWRfcndsb2NrX3VubG9ja19mdW5jIChMT0NLKQorIyBkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX2Rlc3Ryb3koTE9DSykgXAorICAgIGdsdGhyZWFkX3J3bG9ja19kZXN0cm95X2Z1bmMgKExPQ0spCitleHRlcm4gdm9pZCBnbHRocmVhZF9yd2xvY2tfaW5pdF9mdW5jIChnbF9yd2xvY2tfdCAqbG9jayk7CitleHRlcm4gaW50IGdsdGhyZWFkX3J3bG9ja19yZGxvY2tfZnVuYyAoZ2xfcndsb2NrX3QgKmxvY2spOworZXh0ZXJuIGludCBnbHRocmVhZF9yd2xvY2tfd3Jsb2NrX2Z1bmMgKGdsX3J3bG9ja190ICpsb2NrKTsKK2V4dGVybiBpbnQgZ2x0aHJlYWRfcndsb2NrX3VubG9ja19mdW5jIChnbF9yd2xvY2tfdCAqbG9jayk7CitleHRlcm4gaW50IGdsdGhyZWFkX3J3bG9ja19kZXN0cm95X2Z1bmMgKGdsX3J3bG9ja190ICpsb2NrKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX3JlY3Vyc2l2ZV9sb2NrX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFRoZSBuYXRpdmUgV2luZG93cyBkb2N1bWVudGF0aW9uIHNheXMgdGhhdCBDUklUSUNBTF9TRUNUSU9OIGFscmVhZHkKKyAgIGltcGxlbWVudHMgYSByZWN1cnNpdmUgbG9jay4gIEJ1dCB3ZSBuZWVkIG5vdCByZWx5IG9uIGl0OiBJdCdzIGVhc3kgdG8KKyAgIGltcGxlbWVudCBhIHJlY3Vyc2l2ZSBsb2NrIHdpdGhvdXQgdGhpcyBhc3N1bXB0aW9uLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QKKyAgICAgICAgeworICAgICAgICAgIGdsX3NwaW5sb2NrX3QgZ3VhcmQ7IC8qIHByb3RlY3RzIHRoZSBpbml0aWFsaXphdGlvbiAqLworICAgICAgICAgIERXT1JEIG93bmVyOworICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZGVwdGg7CisgICAgICAgICAgQ1JJVElDQUxfU0VDVElPTiBsb2NrOworICAgICAgICB9CisgICAgICAgIGdsX3JlY3Vyc2l2ZV9sb2NrX3Q7CisjIGRlZmluZSBnbF9yZWN1cnNpdmVfbG9ja19kZWZpbmUoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCisgICAgU1RPUkFHRUNMQVNTIGdsX3JlY3Vyc2l2ZV9sb2NrX3QgTkFNRTsKKyMgZGVmaW5lIGdsX3JlY3Vyc2l2ZV9sb2NrX2RlZmluZV9pbml0aWFsaXplZChTVE9SQUdFQ0xBU1MsIE5BTUUpIFwKKyAgICBTVE9SQUdFQ0xBU1MgZ2xfcmVjdXJzaXZlX2xvY2tfdCBOQU1FID0gZ2xfcmVjdXJzaXZlX2xvY2tfaW5pdGlhbGl6ZXI7CisjIGRlZmluZSBnbF9yZWN1cnNpdmVfbG9ja19pbml0aWFsaXplciBcCisgICAgeyB7IDAsIC0xIH0sIDAsIDAgfQorIyBkZWZpbmUgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfaW5pdChMT0NLKSBcCisgICAgKGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2luaXRfZnVuYyAoTE9DSyksIDApCisjIGRlZmluZSBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19sb2NrKExPQ0spIFwKKyAgICBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19sb2NrX2Z1bmMgKExPQ0spCisjIGRlZmluZSBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja191bmxvY2soTE9DSykgXAorICAgIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX3VubG9ja19mdW5jIChMT0NLKQorIyBkZWZpbmUgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfZGVzdHJveShMT0NLKSBcCisgICAgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfZGVzdHJveV9mdW5jIChMT0NLKQorZXh0ZXJuIHZvaWQgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfaW5pdF9mdW5jIChnbF9yZWN1cnNpdmVfbG9ja190ICpsb2NrKTsKK2V4dGVybiBpbnQgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfbG9ja19mdW5jIChnbF9yZWN1cnNpdmVfbG9ja190ICpsb2NrKTsKK2V4dGVybiBpbnQgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfdW5sb2NrX2Z1bmMgKGdsX3JlY3Vyc2l2ZV9sb2NrX3QgKmxvY2spOworZXh0ZXJuIGludCBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19kZXN0cm95X2Z1bmMgKGdsX3JlY3Vyc2l2ZV9sb2NrX3QgKmxvY2spOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9vbmNlX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwordHlwZWRlZiBzdHJ1Y3QKKyAgICAgICAgeworICAgICAgICAgIHZvbGF0aWxlIGludCBpbml0ZWQ7CisgICAgICAgICAgdm9sYXRpbGUgbG9uZyBzdGFydGVkOworICAgICAgICAgIENSSVRJQ0FMX1NFQ1RJT04gbG9jazsKKyAgICAgICAgfQorICAgICAgICBnbF9vbmNlX3Q7CisjIGRlZmluZSBnbF9vbmNlX2RlZmluZShTVE9SQUdFQ0xBU1MsIE5BTUUpIFwKKyAgICBTVE9SQUdFQ0xBU1MgZ2xfb25jZV90IE5BTUUgPSB7IC0xLCAtMSB9OworIyBkZWZpbmUgZ2x0aHJlYWRfb25jZShPTkNFX0NPTlRST0wsIElOSVRGVU5DVElPTikgXAorICAgIChnbHRocmVhZF9vbmNlX2Z1bmMgKE9OQ0VfQ09OVFJPTCwgSU5JVEZVTkNUSU9OKSwgMCkKK2V4dGVybiB2b2lkIGdsdGhyZWFkX29uY2VfZnVuYyAoZ2xfb25jZV90ICpvbmNlX2NvbnRyb2wsIHZvaWQgKCppbml0ZnVuY3Rpb24pICh2b2lkKSk7CisKKyMgaWZkZWYgX19jcGx1c3BsdXMKK30KKyMgZW5kaWYKKworI2VuZGlmCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworI2lmICEoVVNFX1BPU0lYX1RIUkVBRFMgfHwgVVNFX1BUSF9USFJFQURTIHx8IFVTRV9TT0xBUklTX1RIUkVBRFMgfHwgVVNFX1dJTkRPV1NfVEhSRUFEUykKKworLyogUHJvdmlkZSBkdW1teSBpbXBsZW1lbnRhdGlvbiBpZiB0aHJlYWRzIGFyZSBub3Qgc3VwcG9ydGVkLiAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZ2xfbG9ja190IGRhdGF0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3R5cGVkZWYgaW50IGdsX2xvY2tfdDsKKyMgZGVmaW5lIGdsX2xvY2tfZGVmaW5lKFNUT1JBR0VDTEFTUywgTkFNRSkKKyMgZGVmaW5lIGdsX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkKFNUT1JBR0VDTEFTUywgTkFNRSkKKyMgZGVmaW5lIGdsdGhyZWFkX2xvY2tfaW5pdChOQU1FKSAwCisjIGRlZmluZSBnbHRocmVhZF9sb2NrX2xvY2soTkFNRSkgMAorIyBkZWZpbmUgZ2x0aHJlYWRfbG9ja191bmxvY2soTkFNRSkgMAorIyBkZWZpbmUgZ2x0aHJlYWRfbG9ja19kZXN0cm95KE5BTUUpIDAKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9yd2xvY2tfdCBkYXRhdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3R5cGVkZWYgaW50IGdsX3J3bG9ja190OworIyBkZWZpbmUgZ2xfcndsb2NrX2RlZmluZShTVE9SQUdFQ0xBU1MsIE5BTUUpCisjIGRlZmluZSBnbF9yd2xvY2tfZGVmaW5lX2luaXRpYWxpemVkKFNUT1JBR0VDTEFTUywgTkFNRSkKKyMgZGVmaW5lIGdsdGhyZWFkX3J3bG9ja19pbml0KE5BTUUpIDAKKyMgZGVmaW5lIGdsdGhyZWFkX3J3bG9ja19yZGxvY2soTkFNRSkgMAorIyBkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX3dybG9jayhOQU1FKSAwCisjIGRlZmluZSBnbHRocmVhZF9yd2xvY2tfdW5sb2NrKE5BTUUpIDAKKyMgZGVmaW5lIGdsdGhyZWFkX3J3bG9ja19kZXN0cm95KE5BTUUpIDAKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX3JlY3Vyc2l2ZV9sb2NrX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3R5cGVkZWYgaW50IGdsX3JlY3Vyc2l2ZV9sb2NrX3Q7CisjIGRlZmluZSBnbF9yZWN1cnNpdmVfbG9ja19kZWZpbmUoU1RPUkFHRUNMQVNTLCBOQU1FKQorIyBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkKFNUT1JBR0VDTEFTUywgTkFNRSkKKyMgZGVmaW5lIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2luaXQoTkFNRSkgMAorIyBkZWZpbmUgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfbG9jayhOQU1FKSAwCisjIGRlZmluZSBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja191bmxvY2soTkFNRSkgMAorIyBkZWZpbmUgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfZGVzdHJveShOQU1FKSAwCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX29uY2VfdCBkYXRhdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit0eXBlZGVmIGludCBnbF9vbmNlX3Q7CisjIGRlZmluZSBnbF9vbmNlX2RlZmluZShTVE9SQUdFQ0xBU1MsIE5BTUUpIFwKKyAgICBTVE9SQUdFQ0xBU1MgZ2xfb25jZV90IE5BTUUgPSAwOworIyBkZWZpbmUgZ2x0aHJlYWRfb25jZShPTkNFX0NPTlRST0wsIElOSVRGVU5DVElPTikgXAorICAgICgqKE9OQ0VfQ09OVFJPTCkgPT0gMCA/ICgqKE9OQ0VfQ09OVFJPTCkgPSB+IDAsIElOSVRGVU5DVElPTiAoKSwgMCkgOiAwKQorCisjZW5kaWYKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKiBNYWNyb3Mgd2l0aCBidWlsdC1pbiBlcnJvciBoYW5kbGluZy4gICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX2xvY2tfdCBkYXRhdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGdsX2xvY2tfaW5pdChOQU1FKSBcCisgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaWYgKGdsdGhyZWFkX2xvY2tfaW5pdCAoJk5BTUUpKSBcCisgICAgICAgICBhYm9ydCAoKTsgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICB3aGlsZSAoMCkKKyNkZWZpbmUgZ2xfbG9ja19sb2NrKE5BTUUpIFwKKyAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpZiAoZ2x0aHJlYWRfbG9ja19sb2NrICgmTkFNRSkpIFwKKyAgICAgICAgIGFib3J0ICgpOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIHdoaWxlICgwKQorI2RlZmluZSBnbF9sb2NrX3VubG9jayhOQU1FKSBcCisgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGlmIChnbHRocmVhZF9sb2NrX3VubG9jayAoJk5BTUUpKSBcCisgICAgICAgICBhYm9ydCAoKTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgd2hpbGUgKDApCisjZGVmaW5lIGdsX2xvY2tfZGVzdHJveShOQU1FKSBcCisgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaWYgKGdsdGhyZWFkX2xvY2tfZGVzdHJveSAoJk5BTUUpKSBcCisgICAgICAgICBhYm9ydCAoKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICB3aGlsZSAoMCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9yd2xvY2tfdCBkYXRhdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZ2xfcndsb2NrX2luaXQoTkFNRSkgXAorICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpZiAoZ2x0aHJlYWRfcndsb2NrX2luaXQgKCZOQU1FKSkgXAorICAgICAgICAgYWJvcnQgKCk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIHdoaWxlICgwKQorI2RlZmluZSBnbF9yd2xvY2tfcmRsb2NrKE5BTUUpIFwKKyAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGlmIChnbHRocmVhZF9yd2xvY2tfcmRsb2NrICgmTkFNRSkpIFwKKyAgICAgICAgIGFib3J0ICgpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgd2hpbGUgKDApCisjZGVmaW5lIGdsX3J3bG9ja193cmxvY2soTkFNRSkgXAorICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaWYgKGdsdGhyZWFkX3J3bG9ja193cmxvY2sgKCZOQU1FKSkgXAorICAgICAgICAgYWJvcnQgKCk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICB3aGlsZSAoMCkKKyNkZWZpbmUgZ2xfcndsb2NrX3VubG9jayhOQU1FKSBcCisgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpZiAoZ2x0aHJlYWRfcndsb2NrX3VubG9jayAoJk5BTUUpKSBcCisgICAgICAgICBhYm9ydCAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIHdoaWxlICgwKQorI2RlZmluZSBnbF9yd2xvY2tfZGVzdHJveShOQU1FKSBcCisgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGlmIChnbHRocmVhZF9yd2xvY2tfZGVzdHJveSAoJk5BTUUpKSBcCisgICAgICAgICBhYm9ydCAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgd2hpbGUgKDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9yZWN1cnNpdmVfbG9ja190IGRhdGF0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGdsX3JlY3Vyc2l2ZV9sb2NrX2luaXQoTkFNRSkgXAorICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaWYgKGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2luaXQgKCZOQU1FKSkgXAorICAgICAgICAgYWJvcnQgKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICB3aGlsZSAoMCkKKyNkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfbG9jayhOQU1FKSBcCisgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpZiAoZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfbG9jayAoJk5BTUUpKSBcCisgICAgICAgICBhYm9ydCAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIHdoaWxlICgwKQorI2RlZmluZSBnbF9yZWN1cnNpdmVfbG9ja191bmxvY2soTkFNRSkgXAorICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGlmIChnbHRocmVhZF9yZWN1cnNpdmVfbG9ja191bmxvY2sgKCZOQU1FKSkgXAorICAgICAgICAgYWJvcnQgKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgd2hpbGUgKDApCisjZGVmaW5lIGdsX3JlY3Vyc2l2ZV9sb2NrX2Rlc3Ryb3koTkFNRSkgXAorICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaWYgKGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2Rlc3Ryb3kgKCZOQU1FKSkgXAorICAgICAgICAgYWJvcnQgKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICB3aGlsZSAoMCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZ2xfb25jZV90IGRhdGF0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZ2xfb25jZShOQU1FLCBJTklURlVOQ1RJT04pIFwKKyAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpZiAoZ2x0aHJlYWRfb25jZSAoJk5BTUUsIElOSVRGVU5DVElPTikpIFwKKyAgICAgICAgIGFib3J0ICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIHdoaWxlICgwKQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyNlbmRpZiAvKiBfTE9DS19IICovCmRpZmYgLS1naXQgYS9saWIvZ2x0aHJlYWQvdGhyZWFkbGliLmMgYi9saWIvZ2x0aHJlYWQvdGhyZWFkbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ2MjY4ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nbHRocmVhZC90aHJlYWRsaWIuYwpAQCAtMCwwICsxLDczIEBACisvKiBNdWx0aXRocmVhZGluZyBwcmltaXRpdmVzLgorICAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4sIDIwMDUuICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworI2lmIFVTRV9QT1NJWF9USFJFQURTCisKKy8qIFVzZSB0aGUgUE9TSVggdGhyZWFkcyBsaWJyYXJ5LiAgKi8KKworIyBpbmNsdWRlIDxwdGhyZWFkLmg+CisjIGluY2x1ZGUgPHN0ZGxpYi5oPgorCisjIGlmIFBUSFJFQURfSU5fVVNFX0RFVEVDVElPTl9IQVJECisKKy8qIFRoZSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBieSBhIGR1bW15IHRocmVhZC4gICovCitzdGF0aWMgdm9pZCAqCitkdW1teV90aHJlYWRfZnVuYyAodm9pZCAqYXJnKQoreworICByZXR1cm4gYXJnOworfQorCitpbnQKK2dsdGhyZWFkX2luX3VzZSAodm9pZCkKK3sKKyAgc3RhdGljIGludCB0ZXN0ZWQ7CisgIHN0YXRpYyBpbnQgcmVzdWx0OyAvKiAxOiBsaW5rZWQgd2l0aCAtbHB0aHJlYWQsIDA6IG9ubHkgd2l0aCBsaWJjICovCisKKyAgaWYgKCF0ZXN0ZWQpCisgICAgeworICAgICAgcHRocmVhZF90IHRocmVhZDsKKworICAgICAgaWYgKHB0aHJlYWRfY3JlYXRlICgmdGhyZWFkLCBOVUxMLCBkdW1teV90aHJlYWRfZnVuYywgTlVMTCkgIT0gMCkKKyAgICAgICAgLyogVGhyZWFkIGNyZWF0aW9uIGZhaWxlZC4gICovCisgICAgICAgIHJlc3VsdCA9IDA7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBUaHJlYWQgY3JlYXRpb24gd29ya3MuICAqLworICAgICAgICAgIHZvaWQgKnJldHZhbDsKKyAgICAgICAgICBpZiAocHRocmVhZF9qb2luICh0aHJlYWQsICZyZXR2YWwpICE9IDApCisgICAgICAgICAgICBhYm9ydCAoKTsKKyAgICAgICAgICByZXN1bHQgPSAxOworICAgICAgICB9CisgICAgICB0ZXN0ZWQgPSAxOworICAgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworIyBlbmRpZgorCisjZW5kaWYKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKiBUaGlzIGRlY2xhcmF0aW9uIGlzIHNvbGVseSB0byBlbnN1cmUgdGhhdCBhZnRlciBwcmVwcm9jZXNzaW5nCisgICB0aGlzIGZpbGUgaXMgbmV2ZXIgZW1wdHkuICAqLwordHlwZWRlZiBpbnQgZHVtbXk7CmRpZmYgLS1naXQgYS9saWIvZ251bGliLm1rIGIvbGliL2dudWxpYi5tawppbmRleCAzZTdiMjhkLi5mMDAxMTY5IDEwMDY0NAotLS0gYS9saWIvZ251bGliLm1rCisrKyBiL2xpYi9nbnVsaWIubWsKQEAgLTEsMjMgKzEsNTIxIEBACi0jIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSAiYm9vdHN0cmFwIi4KLWxpYl9TT1VSQ0VTICs9IGFyZ21hdGNoLmggYXJnbWF0Y2guYwotCi1saWJfU09VUkNFUyArPSBiYXNlbmFtZS5jIHN0cmlwc2xhc2guYworIyMgRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZIQorIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluLgorIyBDb3B5cmlnaHQgKEMpIDIwMDItMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIGZpbGUuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQKKyMgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjCisjIEdlbmVyYXRlZCBieSBnbnVsaWItdG9vbC4KKyMgUmVwcm9kdWNlIGJ5OiBnbnVsaWItdG9vbCAtLWltcG9ydCAtLWRpcj0uIC0tbG9jYWwtZGlyPWdsIC0tbGliPWxpYmJpc29uIC0tc291cmNlLWJhc2U9bGliIC0tbTQtYmFzZT1tNCAtLWRvYy1iYXNlPWRvYyAtLXRlc3RzLWJhc2U9dGVzdHMgLS1hdXgtZGlyPWJ1aWxkLWF1eCAtLW1ha2VmaWxlLW5hbWU9Z251bGliLm1rIC0tbm8tY29uZGl0aW9uYWwtZGVwZW5kZW5jaWVzIC0tbm8tbGlidG9vbCAtLW1hY3JvLXByZWZpeD1nbCBhcmdtYXRjaCBhc3NlcnQgYy1zdHJjYXNlIGNhbGxvYy1wb3NpeCBjbG9zZSBjbG9zZW91dCBjb25maWctaCBjb25maWdtYWtlIGRpcm5hbWUgZXJyb3IgZXh0ZW5zaW9ucyBmZGwgZm9wZW4tc2FmZXIgZnByaW50Zi1wb3NpeCBnZXRsaW5lIGdldG9wdC1nbnUgZ2V0dGV4dCBnaXQtdmVyc2lvbi1nZW4gZ2l0bG9nLXRvLWNoYW5nZWxvZyBncGwtMy4wIGhhc2ggaW50dHlwZXMgaXNuYW4gamF2YWNvbXAtc2NyaXB0IGphdmFleGVjLXNjcmlwdCBsZGV4cGwgbWFsbG9jLWdudSBtYnNjaHIgbWJzcmNociBtYnN3aWR0aCBvYnN0YWNrIG9ic3RhY2stcHJpbnRmIHBlcnJvciBwcmludGYtcG9zaXggcHJvZ25hbWUgcXVvdGUgcXVvdGVhcmcgcmVhZG1lLXJlbGVhc2UgcmVhbGxvYy1wb3NpeCBzbnByaW50Zi1wb3NpeCBzcGF3bi1waXBlIHNwcmludGYtcG9zaXggc3RkYm9vbCBzdHBjcHkgc3RyZHVwLXBvc2l4IHN0cmVycm9yIHN0cnRvdWwgc3RydmVyc2NtcCB1bmlzdGQgdW5pc3RkLXNhZmVyIHVubG9ja2VkLWlvIHVuc2V0ZW52IHVwZGF0ZS1jb3B5cmlnaHQgdmVyaWZ5IHZzbnByaW50Zi1wb3NpeCB2c3ByaW50Zi1wb3NpeCB3YXJuaW5ncyB4YWxsb2MgeGFsbG9jLWRpZSB4bWVtZHVwMCB4c3RybmR1cAogCiAKLWxpYl9TT1VSQ0VTICs9IGV4aXQuaAorTU9TVExZQ0xFQU5GSUxFUyArPSBjb3JlICouc3RhY2tkdW1wCisKK25vaW5zdF9MSUJSQVJJRVMgKz0gbGliYmlzb24uYQorCitsaWJiaXNvbl9hX1NPVVJDRVMgPQorbGliYmlzb25fYV9MSUJBREQgPSAkKGdsX0xJQk9CSlMpCitsaWJiaXNvbl9hX0RFUEVOREVOQ0lFUyA9ICQoZ2xfTElCT0JKUykKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyA9CisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgYWxsb2NhLW9wdAorCitCVUlMVF9TT1VSQ0VTICs9ICQoQUxMT0NBX0gpCisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8YWxsb2NhLmg+IHdoZW4gdGhlIHN5c3RlbQorIyBkb2Vzbid0IGhhdmUgb25lIHRoYXQgd29ya3Mgd2l0aCB0aGUgZ2l2ZW4gY29tcGlsZXIuCitpZiBHTF9HRU5FUkFURV9BTExPQ0FfSAorYWxsb2NhLmg6IGFsbG9jYS5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKwl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCisJICBjYXQgJChzcmNkaXIpL2FsbG9jYS5pbi5oOyBcCisJfSA+ICRALXQgJiYgXAorCW12IC1mICRALXQgJEAKK2Vsc2UKK2FsbG9jYS5oOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCXJtIC1mICRACitlbmRpZgorTU9TVExZQ0xFQU5GSUxFUyArPSBhbGxvY2EuaCBhbGxvY2EuaC10CisKK0VYVFJBX0RJU1QgKz0gYWxsb2NhLmluLmgKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBhbGxvY2Etb3B0CisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgYW5ub3VuY2UtZ2VuCiAKIAorRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9hbm5vdW5jZS1nZW4KKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBhbm5vdW5jZS1nZW4KKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBhcmdtYXRjaAorCitsaWJiaXNvbl9hX1NPVVJDRVMgKz0gYXJnbWF0Y2guYworCitFWFRSQV9ESVNUICs9IGFyZ21hdGNoLmgKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBhcmdtYXRjaAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGJpbmFyeS1pbworCitsaWJiaXNvbl9hX1NPVVJDRVMgKz0gYmluYXJ5LWlvLmggYmluYXJ5LWlvLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBiaW5hcnktaW8KKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBiaXRyb3RhdGUKKworbGliYmlzb25fYV9TT1VSQ0VTICs9IGJpdHJvdGF0ZS5oIGJpdHJvdGF0ZS5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgYml0cm90YXRlCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgYy1jdHlwZQorCitsaWJiaXNvbl9hX1NPVVJDRVMgKz0gYy1jdHlwZS5oIGMtY3R5cGUuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGMtY3R5cGUKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBjLXN0cmNhc2UKKworbGliYmlzb25fYV9TT1VSQ0VTICs9IGMtc3RyY2FzZS5oIGMtc3RyY2FzZWNtcC5jIGMtc3RybmNhc2VjbXAuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGMtc3RyY2FzZQorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGMtc3RyY2FzZWVxCisKKworRVhUUkFfRElTVCArPSBjLXN0cmNhc2VlcS5oCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgYy1zdHJjYXNlZXEKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBjYWxsb2MtcG9zaXgKKworCitFWFRSQV9ESVNUICs9IGNhbGxvYy5jCisKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyArPSBjYWxsb2MuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGNhbGxvYy1wb3NpeAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGNsb2V4ZWMKKworbGliYmlzb25fYV9TT1VSQ0VTICs9IGNsb2V4ZWMuYworCitFWFRSQV9ESVNUICs9IGNsb2V4ZWMuaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGNsb2V4ZWMKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBjbG9zZQorCisKK0VYVFJBX0RJU1QgKz0gY2xvc2UuYworCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0gY2xvc2UuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGNsb3NlCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgY2xvc2Utc3RyZWFtCisKK2xpYmJpc29uX2FfU09VUkNFUyArPSBjbG9zZS1zdHJlYW0uYworCitFWFRSQV9ESVNUICs9IGNsb3NlLXN0cmVhbS5oCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgY2xvc2Utc3RyZWFtCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgY2xvc2VvdXQKKworbGliYmlzb25fYV9TT1VSQ0VTICs9IGNsb3Nlb3V0LmMKKworRVhUUkFfRElTVCArPSBjbG9zZW91dC5oCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgY2xvc2VvdXQKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBjb25maWdtYWtlCisKKyMgTGlzdGVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBHTlUgbWFrZWZpbGUgY29udmVudGlvbnMsIGFuZAorIyBwcm92aWRlZCBieSBhdXRvY29uZiAyLjU5YysuCisjIFRoZSBBdXRvbWFrZS1kZWZpbmVkIHBrZyogbWFjcm9zIGFyZSBhcHBlbmRlZCwgaW4gdGhlIG9yZGVyCisjIGxpc3RlZCBpbiB0aGUgQXV0b21ha2UgMS4xMGErIGRvY3VtZW50YXRpb24uCitjb25maWdtYWtlLmg6IE1ha2VmaWxlCisJJChBTV9WX0dFTilybSAtZiAkQC10ICYmIFwKKwl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCisJICBlY2hvICcjZGVmaW5lIFBSRUZJWCAiJChwcmVmaXgpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgRVhFQ19QUkVGSVggIiQoZXhlY19wcmVmaXgpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgQklORElSICIkKGJpbmRpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBTQklORElSICIkKHNiaW5kaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgTElCRVhFQ0RJUiAiJChsaWJleGVjZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIERBVEFST09URElSICIkKGRhdGFyb290ZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIERBVEFESVIgIiQoZGF0YWRpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBTWVNDT05GRElSICIkKHN5c2NvbmZkaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgU0hBUkVEU1RBVEVESVIgIiQoc2hhcmVkc3RhdGVkaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgTE9DQUxTVEFURURJUiAiJChsb2NhbHN0YXRlZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIElOQ0xVREVESVIgIiQoaW5jbHVkZWRpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBPTERJTkNMVURFRElSICIkKG9sZGluY2x1ZGVkaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgRE9DRElSICIkKGRvY2RpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBJTkZPRElSICIkKGluZm9kaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgSFRNTERJUiAiJChodG1sZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIERWSURJUiAiJChkdmlkaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgUERGRElSICIkKHBkZmRpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBQU0RJUiAiJChwc2RpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBMSUJESVIgIiQobGliZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIExJU1BESVIgIiQobGlzcGRpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBMT0NBTEVESVIgIiQobG9jYWxlZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIE1BTkRJUiAiJChtYW5kaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgTUFORVhUICIkKG1hbmV4dCkiJzsgXAorCSAgZWNobyAnI2RlZmluZSBQS0dEQVRBRElSICIkKHBrZ2RhdGFkaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgUEtHSU5DTFVERURJUiAiJChwa2dpbmNsdWRlZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIFBLR0xJQkRJUiAiJChwa2dsaWJkaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgUEtHTElCRVhFQ0RJUiAiJChwa2dsaWJleGVjZGlyKSInOyBcCisJfSB8IHNlZCAnLyIiL2QnID4gJEAtdCAmJiBcCisJbXYgLWYgJEAtdCAkQAorCitCVUlMVF9TT1VSQ0VTICs9IGNvbmZpZ21ha2UuaAorQ0xFQU5GSUxFUyArPSBjb25maWdtYWtlLmggY29uZmlnbWFrZS5oLXQKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBjb25maWdtYWtlCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgZGlybmFtZQorCitsaWJiaXNvbl9hX1NPVVJDRVMgKz0gZGlybmFtZS5jIGJhc2VuYW1lLmMKKworRVhUUkFfRElTVCArPSBzdHJpcHNsYXNoLmMKKworRVhUUkFfbGliYmlzb25fYV9TT1VSQ0VTICs9IHN0cmlwc2xhc2guYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGRpcm5hbWUKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBkaXJuYW1lLWxncGwKKworbGliYmlzb25fYV9TT1VSQ0VTICs9IGRpcm5hbWUtbGdwbC5jIGJhc2VuYW1lLWxncGwuYyBzdHJpcHNsYXNoLmMKKworRVhUUkFfRElTVCArPSBkaXJuYW1lLmgKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBkaXJuYW1lLWxncGwKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBkby1yZWxlYXNlLWNvbW1pdC1hbmQtdGFnCisKKworRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9kby1yZWxlYXNlLWNvbW1pdC1hbmQtdGFnCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgZG8tcmVsZWFzZS1jb21taXQtYW5kLXRhZworCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGRvc25hbWUKKworCitFWFRSQV9ESVNUICs9IGRvc25hbWUuaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGRvc25hbWUKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBkdXAyCisKKworRVhUUkFfRElTVCArPSBkdXAyLmMKKworRVhUUkFfbGliYmlzb25fYV9TT1VSQ0VTICs9IGR1cDIuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGR1cDIKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBlcnJubworCitCVUlMVF9TT1VSQ0VTICs9ICQoRVJSTk9fSCkKKworIyBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIgdG8gY3JlYXRlIDxlcnJuby5oPiB3aGVuIHRoZSBzeXN0ZW0KKyMgZG9lc24ndCBoYXZlIG9uZSB0aGF0IGlzIFBPU0lYIGNvbXBsaWFudC4KK2lmIEdMX0dFTkVSQVRFX0VSUk5PX0gKK2Vycm5vLmg6IGVycm5vLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLycgJiYgXAorCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCisJICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnTkVYVF9FUlJOT19IJydAfCQoTkVYVF9FUlJOT19IKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnRU1VTFRJSE9QX0hJRERFTicnQHwkKEVNVUxUSUhPUF9ISURERU4pfGcnIFwKKwkgICAgICAtZSAnc3xAJydFTVVMVElIT1BfVkFMVUUnJ0B8JChFTVVMVElIT1BfVkFMVUUpfGcnIFwKKwkgICAgICAtZSAnc3xAJydFTk9MSU5LX0hJRERFTicnQHwkKEVOT0xJTktfSElEREVOKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnRU5PTElOS19WQUxVRScnQHwkKEVOT0xJTktfVkFMVUUpfGcnIFwKKwkgICAgICAtZSAnc3xAJydFT1ZFUkZMT1dfSElEREVOJydAfCQoRU9WRVJGTE9XX0hJRERFTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0VPVkVSRkxPV19WQUxVRScnQHwkKEVPVkVSRkxPV19WQUxVRSl8ZycgXAorCSAgICAgIDwgJChzcmNkaXIpL2Vycm5vLmluLmg7IFwKKwl9ID4gJEAtdCAmJiBcCisJbXYgJEAtdCAkQAorZWxzZQorZXJybm8uaDogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlybSAtZiAkQAorZW5kaWYKK01PU1RMWUNMRUFORklMRVMgKz0gZXJybm8uaCBlcnJuby5oLXQKKworRVhUUkFfRElTVCArPSBlcnJuby5pbi5oCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgZXJybm8KKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBlcnJvcgorCisKK0VYVFJBX0RJU1QgKz0gZXJyb3IuYyBlcnJvci5oCisKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyArPSBlcnJvci5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgZXJyb3IKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBleGl0ZmFpbAorCitsaWJiaXNvbl9hX1NPVVJDRVMgKz0gZXhpdGZhaWwuYworCitFWFRSQV9ESVNUICs9IGV4aXRmYWlsLmgKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBleGl0ZmFpbAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGZhdGFsLXNpZ25hbAorCitsaWJiaXNvbl9hX1NPVVJDRVMgKz0gZmF0YWwtc2lnbmFsLmggZmF0YWwtc2lnbmFsLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBmYXRhbC1zaWduYWwKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBmY250bAorCisKK0VYVFJBX0RJU1QgKz0gZmNudGwuYworCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0gZmNudGwuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGZjbnRsCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgZmNudGwtaAorCitCVUlMVF9TT1VSQ0VTICs9IGZjbnRsLmgKKworIyBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIgdG8gY3JlYXRlIDxmY250bC5oPiB3aGVuIHRoZSBzeXN0ZW0KKyMgZG9lc24ndCBoYXZlIG9uZSB0aGF0IHdvcmtzIHdpdGggdGhlIGdpdmVuIGNvbXBpbGVyLgorZmNudGwuaDogZmNudGwuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKENYWERFRlNfSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCisJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKwl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCisJICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKwkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKwkgICAgICAtZSAnc3xAJydORVhUX0ZDTlRMX0gnJ0B8JChORVhUX0ZDTlRMX0gpfGcnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRkNOVEwnJ0AvJChHTlVMSUJfRkNOVEwpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTk9OQkxPQ0tJTkcnJ0AvJChHTlVMSUJfTk9OQkxPQ0tJTkcpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfT1BFTicnQC8kKEdOVUxJQl9PUEVOKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX09QRU5BVCcnQC8kKEdOVUxJQl9PUEVOQVQpL2cnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0ZDTlRMJydAfCQoSEFWRV9GQ05UTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfT1BFTkFUJydAfCQoSEFWRV9PUEVOQVQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0ZDTlRMJydAfCQoUkVQTEFDRV9GQ05UTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfT1BFTicnQHwkKFJFUExBQ0VfT1BFTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfT1BFTkFUJydAfCQoUkVQTEFDRV9PUEVOQVQpfGcnIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwvciAkKENYWERFRlNfSCknIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxML3IgJChBUkdfTk9OTlVMTF9IKScgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UvciAkKFdBUk5fT05fVVNFX0gpJyBcCisJICAgICAgPCAkKHNyY2RpcikvZmNudGwuaW4uaDsgXAorCX0gPiAkQC10ICYmIFwKKwltdiAkQC10ICRACitNT1NUTFlDTEVBTkZJTEVTICs9IGZjbnRsLmggZmNudGwuaC10CisKK0VYVFJBX0RJU1QgKz0gZmNudGwuaW4uaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGZjbnRsLWgKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBmZC1ob29rCisKK2xpYmJpc29uX2FfU09VUkNFUyArPSBmZC1ob29rLmMKKworRVhUUkFfRElTVCArPSBmZC1ob29rLmgKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBmZC1ob29rCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgZmQtc2FmZXItZmxhZworCitsaWJiaXNvbl9hX1NPVVJDRVMgKz0gZmQtc2FmZXItZmxhZy5jIGR1cC1zYWZlci1mbGFnLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBmZC1zYWZlci1mbGFnCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgZmxvYXQKKworQlVJTFRfU09VUkNFUyArPSAkKEZMT0FUX0gpCisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8ZmxvYXQuaD4gd2hlbiB0aGUgc3lzdGVtCisjIGRvZXNuJ3QgaGF2ZSBvbmUgdGhhdCB3b3JrcyB3aXRoIHRoZSBnaXZlbiBjb21waWxlci4KK2lmIEdMX0dFTkVSQVRFX0ZMT0FUX0gKK2Zsb2F0Lmg6IGZsb2F0LmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLycgJiYgXAorCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCisJICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnTkVYVF9GTE9BVF9IJydAfCQoTkVYVF9GTE9BVF9IKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9JVE9MRCcnQHwkKFJFUExBQ0VfSVRPTEQpfGcnIFwKKwkgICAgICA8ICQoc3JjZGlyKS9mbG9hdC5pbi5oOyBcCisJfSA+ICRALXQgJiYgXAorCW12ICRALXQgJEAKK2Vsc2UKK2Zsb2F0Lmg6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJcm0gLWYgJEAKK2VuZGlmCitNT1NUTFlDTEVBTkZJTEVTICs9IGZsb2F0LmggZmxvYXQuaC10CisKK0VYVFJBX0RJU1QgKz0gZmxvYXQuYyBmbG9hdC5pbi5oIGl0b2xkLmMKKworRVhUUkFfbGliYmlzb25fYV9TT1VSQ0VTICs9IGZsb2F0LmMgaXRvbGQuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGZsb2F0CisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgZm9wZW4KKworCitFWFRSQV9ESVNUICs9IGZvcGVuLmMKKworRVhUUkFfbGliYmlzb25fYV9TT1VSQ0VTICs9IGZvcGVuLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBmb3BlbgorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGZvcGVuLXNhZmVyCisKK2xpYmJpc29uX2FfU09VUkNFUyArPSBmb3Blbi1zYWZlci5jCisKK0VYVFJBX0RJU1QgKz0gc3RkaW8tLS5oIHN0ZGlvLXNhZmVyLmgKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBmb3Blbi1zYWZlcgorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGZwZW5kaW5nCisKKworRVhUUkFfRElTVCArPSBmcGVuZGluZy5jIGZwZW5kaW5nLmgKKworRVhUUkFfbGliYmlzb25fYV9TT1VSQ0VTICs9IGZwZW5kaW5nLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBmcGVuZGluZworCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGZwcmludGYtcG9zaXgKKworCitFWFRSQV9ESVNUICs9IGZwcmludGYuYworCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0gZnByaW50Zi5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgZnByaW50Zi1wb3NpeAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGZwdWN3CisKKworRVhUUkFfRElTVCArPSBmcHVjdy5oCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgZnB1Y3cKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBmcmV4cC1ub2xpYm0KKworCitFWFRSQV9ESVNUICs9IGZyZXhwLmMKKworRVhUUkFfbGliYmlzb25fYV9TT1VSQ0VTICs9IGZyZXhwLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBmcmV4cC1ub2xpYm0KKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBmcmV4cGwtbm9saWJtCisKKworRVhUUkFfRElTVCArPSBmcmV4cC5jIGZyZXhwbC5jCisKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyArPSBmcmV4cC5jIGZyZXhwbC5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgZnJleHBsLW5vbGlibQorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGZzZXRlcnIKKworCitFWFRSQV9ESVNUICs9IGZzZXRlcnIuYyBmc2V0ZXJyLmggc3RkaW8taW1wbC5oCisKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyArPSBmc2V0ZXJyLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBmc2V0ZXJyCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgZnN0YXQKKworCitFWFRSQV9ESVNUICs9IGZzdGF0LmMKKworRVhUUkFfbGliYmlzb25fYV9TT1VSQ0VTICs9IGZzdGF0LmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBmc3RhdAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGdlbmRvY3MKKworCitFWFRSQV9ESVNUICs9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2dlbmRvY3Muc2gKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBnZW5kb2NzCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgZ2V0ZGVsaW0KKworCitFWFRSQV9ESVNUICs9IGdldGRlbGltLmMKKworRVhUUkFfbGliYmlzb25fYV9TT1VSQ0VTICs9IGdldGRlbGltLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBnZXRkZWxpbQorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGdldGR0YWJsZXNpemUKKworCitFWFRSQV9ESVNUICs9IGdldGR0YWJsZXNpemUuYworCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0gZ2V0ZHRhYmxlc2l6ZS5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgZ2V0ZHRhYmxlc2l6ZQorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGdldGxpbmUKKworCitFWFRSQV9ESVNUICs9IGdldGxpbmUuYworCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0gZ2V0bGluZS5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgZ2V0bGluZQorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGdldG9wdC1wb3NpeAogCiBCVUlMVF9TT1VSQ0VTICs9ICQoR0VUT1BUX0gpCi1FWFRSQV9ESVNUICs9IGdldG9wdF8uaCBnZXRvcHRfaW50LmgKIAogIyBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIgdG8gY3JlYXRlIDxnZXRvcHQuaD4gd2hlbiB0aGUgc3lzdGVtCiAjIGRvZXNuJ3QgaGF2ZSBvbmUgdGhhdCB3b3JrcyB3aXRoIHRoZSBnaXZlbiBjb21waWxlci4KLWdldG9wdC5oOiBnZXRvcHRfLmgKLQljcCAkKHNyY2RpcikvZ2V0b3B0Xy5oICRALXQKLQltdiAkQC10ICRACitnZXRvcHQuaDogZ2V0b3B0LmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChBUkdfTk9OTlVMTF9IKQorCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJzsgXAorCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9HRVRPUFRfSCcnQHwkKEhBVkVfR0VUT1BUX0gpfGcnIFwKKwkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKwkgICAgICAtZSAnc3xAJydORVhUX0dFVE9QVF9IJydAfCQoTkVYVF9HRVRPUFRfSCl8ZycgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwvciAkKEFSR19OT05OVUxMX0gpJyBcCisJICAgICAgPCAkKHNyY2RpcikvZ2V0b3B0LmluLmg7IFwKKwl9ID4gJEAtdCAmJiBcCisJbXYgLWYgJEAtdCAkQAogTU9TVExZQ0xFQU5GSUxFUyArPSBnZXRvcHQuaCBnZXRvcHQuaC10CiAKK0VYVFJBX0RJU1QgKz0gZ2V0b3B0LmMgZ2V0b3B0LmluLmggZ2V0b3B0MS5jIGdldG9wdF9pbnQuaAorCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0gZ2V0b3B0LmMgZ2V0b3B0MS5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgZ2V0b3B0LXBvc2l4CisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgZ2V0dGV4dAorCiAjIFRoaXMgaXMgZm9yIHRob3NlIHByb2plY3RzIHdoaWNoIHVzZSAiZ2V0dGV4dGl6ZSAtLWludGwiIHRvIHB1dCBhIHNvdXJjZS1jb2RlCiAjIGNvcHkgb2YgbGliaW50bCBpbnRvIHRoZWlyIHBhY2thZ2UuIEluIHN1Y2ggcHJvamVjdHMsIGV2ZXJ5IE1ha2VmaWxlLmFtIG5lZWRzCiAjIC1JJCh0b3BfYnVpbGRkaXIpL2ludGwsIHNvIHRoYXQgPGxpYmludGwuaD4gY2FuIGJlIGZvdW5kIGluIHRoaXMgZGlyZWN0b3J5LgpAQCAtMjYsNTMgKzUyNCwyMzk4IEBACiAjIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgd2hlbiB0aGUgdXNlciBkaXNhYmxlcyBOTFMgKGJlY2F1c2UgdGhlbiB0aGUgaW50bAogIyBkaXJlY3RvcnkgY29udGFpbnMgbm8gbGliaW50bC5oIGZpbGUpIG9yIHdoZW4gdGhlIHByb2plY3QgZG9lcyBub3QgdXNlCiAjICJnZXR0ZXh0aXplIC0taW50bCIuCi0jIChjb21tZW50ZWQgb3V0IGJ5IGJvb3RzdHJhcCkgQU1fQ1BQRkxBR1MgKz0gLUkkKHRvcF9idWlsZGRpcikvaW50bAorQU1fQ1BQRkxBR1MgKz0gLUkkKHRvcF9idWlsZGRpcikvaW50bAogCi1saWJfU09VUkNFUyArPSBnZXR0ZXh0LmgKK0VYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvY29uZmlnLnJwYXRoCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgZ2V0dGV4dAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGdldHRleHQtaAorCitsaWJiaXNvbl9hX1NPVVJDRVMgKz0gZ2V0dGV4dC5oCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgZ2V0dGV4dC1oCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgZ2l0LXZlcnNpb24tZ2VuCiAKIAorRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9naXQtdmVyc2lvbi1nZW4KKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBnaXQtdmVyc2lvbi1nZW4KKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBnaXRsb2ctdG8tY2hhbmdlbG9nCiAKIAorRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9naXRsb2ctdG8tY2hhbmdlbG9nCiAKLWxpYl9TT1VSQ0VTICs9IG1ic3dpZHRoLmggbWJzd2lkdGguYworIyMgZW5kICAgZ251bGliIG1vZHVsZSBnaXRsb2ctdG8tY2hhbmdlbG9nCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgZ251LXdlYi1kb2MtdXBkYXRlCiAKIAorRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9nbnUtd2ViLWRvYy11cGRhdGUKIAorIyMgZW5kICAgZ251bGliIG1vZHVsZSBnbnUtd2ViLWRvYy11cGRhdGUKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBnbnVtYWtlZmlsZQorCitkaXN0Y2xlYW4tbG9jYWw6IGNsZWFuLUdOVW1ha2VmaWxlCitjbGVhbi1HTlVtYWtlZmlsZToKKwl0ZXN0ICckKHNyY2RpciknID0gLiB8fCBybSAtZiAkKHRvcF9idWlsZGRpcikvR05VbWFrZWZpbGUKKworRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL0dOVW1ha2VmaWxlCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgZ251bWFrZWZpbGUKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBnbnVwbG9hZAorCisKK0VYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvZ251cGxvYWQKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBnbnVwbG9hZAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGhhc2gKKworbGliYmlzb25fYV9TT1VSQ0VTICs9IGhhc2guYworCitFWFRSQV9ESVNUICs9IGhhc2guaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGhhc2gKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBoYXZlbGliCisKKworRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9jb25maWcucnBhdGgKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBoYXZlbGliCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgaW50cHJvcHMKKworCitFWFRSQV9ESVNUICs9IGludHByb3BzLmgKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBpbnRwcm9wcworCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGludHR5cGVzLWluY29tcGxldGUKKworQlVJTFRfU09VUkNFUyArPSBpbnR0eXBlcy5oCisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8aW50dHlwZXMuaD4gd2hlbiB0aGUgc3lzdGVtCisjIGRvZXNuJ3QgaGF2ZSBvbmUgdGhhdCB3b3JrcyB3aXRoIHRoZSBnaXZlbiBjb21waWxlci4KK2ludHR5cGVzLmg6IGludHR5cGVzLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoV0FSTl9PTl9VU0VfSCkgJChBUkdfTk9OTlVMTF9IKQorCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJzsgXAorCSAgc2VkIC1lICdzL0AnJ0hBVkVfSU5UVFlQRVNfSCcnQC8kKEhBVkVfSU5UVFlQRVNfSCkvZycgXAorCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorCSAgICAgIC1lICdzfEAnJ05FWFRfSU5UVFlQRVNfSCcnQHwkKE5FWFRfSU5UVFlQRVNfSCl8ZycgXAorCSAgICAgIC1lICdzL0AnJ1BSSV9NQUNST1NfQlJPS0VOJydALyQoUFJJX01BQ1JPU19CUk9LRU4pL2cnIFwKKwkgICAgICAtZSAncy9AJydBUFBMRV9VTklWRVJTQUxfQlVJTEQnJ0AvJChBUFBMRV9VTklWRVJTQUxfQlVJTEQpL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX0xPTkdfTE9OR19JTlQnJ0AvJChIQVZFX0xPTkdfTE9OR19JTlQpL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQnJ0AvJChIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQpL2cnIFwKKwkgICAgICAtZSAncy9AJydQUklQVFJfUFJFRklYJydALyQoUFJJUFRSX1BSRUZJWCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9JTUFYQUJTJydALyQoR05VTElCX0lNQVhBQlMpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfSU1BWERJVicnQC8kKEdOVUxJQl9JTUFYRElWKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlRPSU1BWCcnQC8kKEdOVUxJQl9TVFJUT0lNQVgpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSVE9VTUFYJydALyQoR05VTElCX1NUUlRPVU1BWCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0hBVkVfREVDTF9JTUFYQUJTJydALyQoSEFWRV9ERUNMX0lNQVhBQlMpL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX0RFQ0xfSU1BWERJVicnQC8kKEhBVkVfREVDTF9JTUFYRElWKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnSEFWRV9ERUNMX1NUUlRPSU1BWCcnQC8kKEhBVkVfREVDTF9TVFJUT0lNQVgpL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX0RFQ0xfU1RSVE9VTUFYJydALyQoSEFWRV9ERUNMX1NUUlRPVU1BWCkvZycgXAorCSAgICAgIC1lICdzL0AnJ1JFUExBQ0VfU1RSVE9JTUFYJydALyQoUkVQTEFDRV9TVFJUT0lNQVgpL2cnIFwKKwkgICAgICAtZSAncy9AJydJTlQzMl9NQVhfTFRfSU5UTUFYX01BWCcnQC8kKElOVDMyX01BWF9MVF9JTlRNQVhfTUFYKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnSU5UNjRfTUFYX0VRX0xPTkdfTUFYJydALyQoSU5UNjRfTUFYX0VRX0xPTkdfTUFYKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnVUlOVDMyX01BWF9MVF9VSU5UTUFYX01BWCcnQC8kKFVJTlQzMl9NQVhfTFRfVUlOVE1BWF9NQVgpL2cnIFwKKwkgICAgICAtZSAncy9AJydVSU5UNjRfTUFYX0VRX1VMT05HX01BWCcnQC8kKFVJTlQ2NF9NQVhfRVFfVUxPTkdfTUFYKS9nJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBML3IgJChDWFhERUZTX0gpJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVMTC9yICQoQVJHX05PTk5VTExfSCknIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFL3IgJChXQVJOX09OX1VTRV9IKScgXAorCSAgICAgIDwgJChzcmNkaXIpL2ludHR5cGVzLmluLmg7IFwKKwl9ID4gJEAtdCAmJiBcCisJbXYgJEAtdCAkQAorTU9TVExZQ0xFQU5GSUxFUyArPSBpbnR0eXBlcy5oIGludHR5cGVzLmgtdAorCitFWFRSQV9ESVNUICs9IGludHR5cGVzLmluLmgKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBpbnR0eXBlcy1pbmNvbXBsZXRlCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgaXNuYW5kCisKKworRVhUUkFfRElTVCArPSBmbG9hdCsuaCBpc25hbi5jIGlzbmFuZC5jCisKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyArPSBpc25hbi5jIGlzbmFuZC5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgaXNuYW5kCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgaXNuYW5kLW5vbGlibQorCisKK0VYVFJBX0RJU1QgKz0gZmxvYXQrLmggaXNuYW4uYyBpc25hbmQtbm9saWJtLmggaXNuYW5kLmMKKworRVhUUkFfbGliYmlzb25fYV9TT1VSQ0VTICs9IGlzbmFuLmMgaXNuYW5kLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBpc25hbmQtbm9saWJtCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgaXNuYW5mCisKKworRVhUUkFfRElTVCArPSBmbG9hdCsuaCBpc25hbi5jIGlzbmFuZi5jCisKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyArPSBpc25hbi5jIGlzbmFuZi5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgaXNuYW5mCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgaXNuYW5mLW5vbGlibQorCisKK0VYVFJBX0RJU1QgKz0gZmxvYXQrLmggaXNuYW4uYyBpc25hbmYtbm9saWJtLmggaXNuYW5mLmMKKworRVhUUkFfbGliYmlzb25fYV9TT1VSQ0VTICs9IGlzbmFuLmMgaXNuYW5mLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBpc25hbmYtbm9saWJtCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgaXNuYW5sCisKKworRVhUUkFfRElTVCArPSBmbG9hdCsuaCBpc25hbi5jIGlzbmFubC5jCisKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyArPSBpc25hbi5jIGlzbmFubC5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgaXNuYW5sCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgaXNuYW5sLW5vbGlibQorCisKK0VYVFJBX0RJU1QgKz0gZmxvYXQrLmggaXNuYW4uYyBpc25hbmwtbm9saWJtLmggaXNuYW5sLmMKKworRVhUUkFfbGliYmlzb25fYV9TT1VSQ0VTICs9IGlzbmFuLmMgaXNuYW5sLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBpc25hbmwtbm9saWJtCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgaXN3YmxhbmsKKworCitFWFRSQV9ESVNUICs9IGlzd2JsYW5rLmMKKworRVhUUkFfbGliYmlzb25fYV9TT1VSQ0VTICs9IGlzd2JsYW5rLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBpc3dibGFuaworCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGphdmFjb21wLXNjcmlwdAorCisKK0VYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvamF2YWNvbXAuc2guaW4KKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBqYXZhY29tcC1zY3JpcHQKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBqYXZhZXhlYy1zY3JpcHQKKworCitFWFRSQV9ESVNUICs9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2phdmFleGVjLnNoLmluCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgamF2YWV4ZWMtc2NyaXB0CisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgbGRleHBsCisKKworRVhUUkFfRElTVCArPSBsZGV4cGwuYworCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0gbGRleHBsLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBsZGV4cGwKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBsb2NhbGNoYXJzZXQKKworbGliYmlzb25fYV9TT1VSQ0VTICs9IGxvY2FsY2hhcnNldC5oIGxvY2FsY2hhcnNldC5jCisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGluc3RhbGwgYSBzaW1wbGUgZmlsZSBpbiAkKGxpYmRpcikKKyMgd2hpY2ggaXMgc2hhcmVkIHdpdGggb3RoZXIgaW5zdGFsbGVkIHBhY2thZ2VzLiBXZSB1c2UgYSBsaXN0IG9mIHJlZmVyZW5jaW5nCisjIHBhY2thZ2VzIHNvIHRoYXQgIm1ha2UgdW5pbnN0YWxsIiB3aWxsIHJlbW92ZSB0aGUgZmlsZSBpZiBhbmQgb25seSBpZiBpdAorIyBpcyBub3QgdXNlZCBieSBhbm90aGVyIGluc3RhbGxlZCBwYWNrYWdlLgorIyBPbiBzeXN0ZW1zIHdpdGggZ2xpYmMtMi4xIG9yIG5ld2VyLCB0aGUgZmlsZSBpcyByZWR1bmRhbnQsIHRoZXJlZm9yZSB3ZQorIyBhdm9pZCBpbnN0YWxsaW5nIGl0LgorCithbGwtbG9jYWw6IGNoYXJzZXQuYWxpYXMgcmVmLWFkZC5zZWQgcmVmLWRlbC5zZWQKKworY2hhcnNldF9hbGlhcyA9ICQoREVTVERJUikkKGxpYmRpcikvY2hhcnNldC5hbGlhcworY2hhcnNldF90bXAgPSAkKERFU1RESVIpJChsaWJkaXIpL2NoYXJzZXQudG1wCitpbnN0YWxsLWV4ZWMtbG9jYWw6IGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQKK2luc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorCWlmIHRlc3QgJChHTElCQzIxKSA9IG5vOyB0aGVuIFwKKwkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKwkgICAgZGFyd2luWzU2XSopIFwKKwkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCisJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKwkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorCSAgICAqKSBcCisJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorCSAgZXNhYyA7IFwKKwllbHNlIFwKKwkgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7IFwKKwlmaSA7IFwKKwlpZiAkJG5lZWRfY2hhcnNldF9hbGlhczsgdGhlbiBcCisJICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGxpYmRpcikgOyBcCisJZmkgOyBcCisJaWYgdGVzdCAtZiAkKGNoYXJzZXRfYWxpYXMpOyB0aGVuIFwKKwkgIHNlZCAtZiByZWYtYWRkLnNlZCAkKGNoYXJzZXRfYWxpYXMpID4gJChjaGFyc2V0X3RtcCkgOyBcCisJICAkKElOU1RBTExfREFUQSkgJChjaGFyc2V0X3RtcCkgJChjaGFyc2V0X2FsaWFzKSA7IFwKKwkgIHJtIC1mICQoY2hhcnNldF90bXApIDsgXAorCWVsc2UgXAorCSAgaWYgJCRuZWVkX2NoYXJzZXRfYWxpYXM7IHRoZW4gXAorCSAgICBzZWQgLWYgcmVmLWFkZC5zZWQgY2hhcnNldC5hbGlhcyA+ICQoY2hhcnNldF90bXApIDsgXAorCSAgICAkKElOU1RBTExfREFUQSkgJChjaGFyc2V0X3RtcCkgJChjaGFyc2V0X2FsaWFzKSA7IFwKKwkgICAgcm0gLWYgJChjaGFyc2V0X3RtcCkgOyBcCisJICBmaSA7IFwKKwlmaQorCit1bmluc3RhbGwtbG9jYWw6IHVuaW5zdGFsbC1sb2NhbGNoYXJzZXQKK3VuaW5zdGFsbC1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorCWlmIHRlc3QgLWYgJChjaGFyc2V0X2FsaWFzKTsgdGhlbiBcCisJICBzZWQgLWYgcmVmLWRlbC5zZWQgJChjaGFyc2V0X2FsaWFzKSA+ICQoY2hhcnNldF90bXApOyBcCisJICBpZiBncmVwICdeIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6ICQkJyAkKGNoYXJzZXRfdG1wKSBcCisJICAgICAgPiAvZGV2L251bGw7IHRoZW4gXAorCSAgICBybSAtZiAkKGNoYXJzZXRfYWxpYXMpOyBcCisJICBlbHNlIFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICQoY2hhcnNldF90bXApICQoY2hhcnNldF9hbGlhcyk7IFwKKwkgIGZpOyBcCisJICBybSAtZiAkKGNoYXJzZXRfdG1wKTsgXAorCWZpCisKK2NoYXJzZXQuYWxpYXM6IGNvbmZpZy5jaGFyc2V0CisJJChBTV9WX0dFTilybSAtZiB0LSRAICRAICYmIFwKKwkkKFNIRUxMKSAkKHNyY2RpcikvY29uZmlnLmNoYXJzZXQgJyQoaG9zdCknID4gdC0kQCAmJiBcCisJbXYgdC0kQCAkQAorCitTVUZGSVhFUyArPSAuc2VkIC5zaW4KKy5zaW4uc2VkOgorCSQoQU1fVl9HRU4pcm0gLWYgdC0kQCAkQCAmJiBcCisJc2VkIC1lICcvXiMvZCcgLWUgJ3MvQCcnUEFDS0FHRScnQC8kKFBBQ0tBR0UpL2cnICQ8ID4gdC0kQCAmJiBcCisJbXYgdC0kQCAkQAorCitDTEVBTkZJTEVTICs9IGNoYXJzZXQuYWxpYXMgcmVmLWFkZC5zZWQgcmVmLWRlbC5zZWQKKworRVhUUkFfRElTVCArPSBjb25maWcuY2hhcnNldCByZWYtYWRkLnNpbiByZWYtZGVsLnNpbgorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGxvY2FsY2hhcnNldAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGxvY2sKKworbGliYmlzb25fYV9TT1VSQ0VTICs9IGdsdGhyZWFkL2xvY2suaCBnbHRocmVhZC9sb2NrLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBsb2NrCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgbWFpbnRhaW5lci1tYWtlZmlsZQorCitFWFRSQV9ESVNUICs9ICQodG9wX3NyY2RpcikvbWFpbnQubWsKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBtYWludGFpbmVyLW1ha2VmaWxlCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgbWFsbG9jLWdudQorCisKK0VYVFJBX0RJU1QgKz0gbWFsbG9jLmMKKworRVhUUkFfbGliYmlzb25fYV9TT1VSQ0VTICs9IG1hbGxvYy5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgbWFsbG9jLWdudQorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIG1hbGxvYy1wb3NpeAorCisKK0VYVFJBX0RJU1QgKz0gbWFsbG9jLmMKKworRVhUUkFfbGliYmlzb25fYV9TT1VSQ0VTICs9IG1hbGxvYy5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgbWFsbG9jLXBvc2l4CisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgbWF0aAorCitCVUlMVF9TT1VSQ0VTICs9IG1hdGguaAorbGliYmlzb25fYV9TT1VSQ0VTICs9IG1hdGguYworCisjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBjcmVhdGUgPG1hdGguaD4gd2hlbiB0aGUgc3lzdGVtCisjIGRvZXNuJ3QgaGF2ZSBvbmUgdGhhdCB3b3JrcyB3aXRoIHRoZSBnaXZlbiBjb21waWxlci4KK21hdGguaDogbWF0aC5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hYREVGU19IKSAkKEFSR19OT05OVUxMX0gpICQoV0FSTl9PTl9VU0VfSCkKKwkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLycgJiYgXAorCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCisJICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRScnQHwkKElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkUpfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKwkgICAgICAtZSAnc3xAJydORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9NQVRIX0gnJ0B8JChORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9NQVRIX0gpfGcnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfQUNPU0YnJ0AvJChHTlVMSUJfQUNPU0YpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfQUNPU0wnJ0AvJChHTlVMSUJfQUNPU0wpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfQVNJTkYnJ0AvJChHTlVMSUJfQVNJTkYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfQVNJTkwnJ0AvJChHTlVMSUJfQVNJTkwpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfQVRBTkYnJ0AvJChHTlVMSUJfQVRBTkYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfQVRBTkwnJ0AvJChHTlVMSUJfQVRBTkwpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfQVRBTjJGJydALyQoR05VTElCX0FUQU4yRikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9DQlJUJydALyQoR05VTElCX0NCUlQpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfQ0JSVEYnJ0AvJChHTlVMSUJfQ0JSVEYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfQ0JSVEwnJ0AvJChHTlVMSUJfQ0JSVEwpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfQ0VJTCcnQC8kKEdOVUxJQl9DRUlMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0NFSUxGJydALyQoR05VTElCX0NFSUxGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0NFSUxMJydALyQoR05VTElCX0NFSUxMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0NPUFlTSUdOJydALyQoR05VTElCX0NPUFlTSUdOKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0NPUFlTSUdORicnQC8kKEdOVUxJQl9DT1BZU0lHTkYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfQ09QWVNJR05MJydALyQoR05VTElCX0NPUFlTSUdOTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9DT1NGJydALyQoR05VTElCX0NPU0YpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfQ09TTCcnQC8kKEdOVUxJQl9DT1NMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0NPU0hGJydALyQoR05VTElCX0NPU0hGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0VYUEYnJ0AvJChHTlVMSUJfRVhQRikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9FWFBMJydALyQoR05VTElCX0VYUEwpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRVhQMicnQC8kKEdOVUxJQl9FWFAyKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0VYUDJGJydALyQoR05VTElCX0VYUDJGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0VYUDJMJydALyQoR05VTElCX0VYUDJMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0VYUE0xJydALyQoR05VTElCX0VYUE0xKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0VYUE0xRicnQC8kKEdOVUxJQl9FWFBNMUYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRVhQTTFMJydALyQoR05VTElCX0VYUE0xTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GQUJTRicnQC8kKEdOVUxJQl9GQUJTRikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GQUJTTCcnQC8kKEdOVUxJQl9GQUJTTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GTE9PUicnQC8kKEdOVUxJQl9GTE9PUikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GTE9PUkYnJ0AvJChHTlVMSUJfRkxPT1JGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0ZMT09STCcnQC8kKEdOVUxJQl9GTE9PUkwpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRk1BJydALyQoR05VTElCX0ZNQSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GTUFGJydALyQoR05VTElCX0ZNQUYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRk1BTCcnQC8kKEdOVUxJQl9GTUFMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0ZNT0QnJ0AvJChHTlVMSUJfRk1PRCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GTU9ERicnQC8kKEdOVUxJQl9GTU9ERikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GTU9ETCcnQC8kKEdOVUxJQl9GTU9ETCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GUkVYUEYnJ0AvJChHTlVMSUJfRlJFWFBGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0ZSRVhQJydALyQoR05VTElCX0ZSRVhQKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0ZSRVhQTCcnQC8kKEdOVUxJQl9GUkVYUEwpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfSFlQT1QnJ0AvJChHTlVMSUJfSFlQT1QpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfSFlQT1RGJydALyQoR05VTElCX0hZUE9URikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9IWVBPVEwnJ0AvJChHTlVMSUJfSFlQT1RMKS9nJyBcCisJICAgICAgPCAkKHNyY2RpcikvbWF0aC5pbi5oIHwgXAorCSAgc2VkIC1lICdzL0AnJ0dOVUxJQl9JTE9HQicnQC8kKEdOVUxJQl9JTE9HQikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9JTE9HQkYnJ0AvJChHTlVMSUJfSUxPR0JGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0lMT0dCTCcnQC8kKEdOVUxJQl9JTE9HQkwpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfSVNGSU5JVEUnJ0AvJChHTlVMSUJfSVNGSU5JVEUpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfSVNJTkYnJ0AvJChHTlVMSUJfSVNJTkYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfSVNOQU4nJ0AvJChHTlVMSUJfSVNOQU4pL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfSVNOQU5GJydALyQoR05VTElCX0lTTkFORikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9JU05BTkQnJ0AvJChHTlVMSUJfSVNOQU5EKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0lTTkFOTCcnQC8kKEdOVUxJQl9JU05BTkwpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTERFWFBGJydALyQoR05VTElCX0xERVhQRikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MREVYUEwnJ0AvJChHTlVMSUJfTERFWFBMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0xPRycnQC8kKEdOVUxJQl9MT0cpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTE9HRicnQC8kKEdOVUxJQl9MT0dGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0xPR0wnJ0AvJChHTlVMSUJfTE9HTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MT0cxMCcnQC8kKEdOVUxJQl9MT0cxMCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MT0cxMEYnJ0AvJChHTlVMSUJfTE9HMTBGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0xPRzEwTCcnQC8kKEdOVUxJQl9MT0cxMEwpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTE9HMVAnJ0AvJChHTlVMSUJfTE9HMVApL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTE9HMVBGJydALyQoR05VTElCX0xPRzFQRikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MT0cxUEwnJ0AvJChHTlVMSUJfTE9HMVBMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0xPRzInJ0AvJChHTlVMSUJfTE9HMikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MT0cyRicnQC8kKEdOVUxJQl9MT0cyRikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MT0cyTCcnQC8kKEdOVUxJQl9MT0cyTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MT0dCJydALyQoR05VTElCX0xPR0IpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTE9HQkYnJ0AvJChHTlVMSUJfTE9HQkYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTE9HQkwnJ0AvJChHTlVMSUJfTE9HQkwpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTU9ERicnQC8kKEdOVUxJQl9NT0RGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01PREZGJydALyQoR05VTElCX01PREZGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01PREZMJydALyQoR05VTElCX01PREZMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BPV0YnJ0AvJChHTlVMSUJfUE9XRikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRU1BSU5ERVInJ0AvJChHTlVMSUJfUkVNQUlOREVSKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1JFTUFJTkRFUkYnJ0AvJChHTlVMSUJfUkVNQUlOREVSRikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRU1BSU5ERVJMJydALyQoR05VTElCX1JFTUFJTkRFUkwpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUklOVCcnQC8kKEdOVUxJQl9SSU5UKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1JJTlRGJydALyQoR05VTElCX1JJTlRGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1JJTlRMJydALyQoR05VTElCX1JJTlRMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1JPVU5EJydALyQoR05VTElCX1JPVU5EKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1JPVU5ERicnQC8kKEdOVUxJQl9ST1VOREYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUk9VTkRMJydALyQoR05VTElCX1JPVU5ETCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TSUdOQklUJydALyQoR05VTElCX1NJR05CSVQpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU0lORicnQC8kKEdOVUxJQl9TSU5GKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NJTkwnJ0AvJChHTlVMSUJfU0lOTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TSU5IRicnQC8kKEdOVUxJQl9TSU5IRikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TUVJURicnQC8kKEdOVUxJQl9TUVJURikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TUVJUTCcnQC8kKEdOVUxJQl9TUVJUTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9UQU5GJydALyQoR05VTElCX1RBTkYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfVEFOTCcnQC8kKEdOVUxJQl9UQU5MKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1RBTkhGJydALyQoR05VTElCX1RBTkhGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1RSVU5DJydALyQoR05VTElCX1RSVU5DKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1RSVU5DRicnQC8kKEdOVUxJQl9UUlVOQ0YpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfVFJVTkNMJydALyQoR05VTElCX1RSVU5DTCkvZycgXAorCSAgfCBcCisJICBzZWQgLWUgJ3N8QCcnSEFWRV9BQ09TRicnQHwkKEhBVkVfQUNPU0YpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0FDT1NMJydAfCQoSEFWRV9BQ09TTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfQVNJTkYnJ0B8JChIQVZFX0FTSU5GKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9BU0lOTCcnQHwkKEhBVkVfQVNJTkwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0FUQU5GJydAfCQoSEFWRV9BVEFORil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfQVRBTkwnJ0B8JChIQVZFX0FUQU5MKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9BVEFOMkYnJ0B8JChIQVZFX0FUQU4yRil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfQ0JSVCcnQHwkKEhBVkVfQ0JSVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfQ0JSVEYnJ0B8JChIQVZFX0NCUlRGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9DQlJUTCcnQHwkKEhBVkVfQ0JSVEwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0NPUFlTSUdOJydAfCQoSEFWRV9DT1BZU0lHTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfQ09QWVNJR05MJydAfCQoSEFWRV9DT1BZU0lHTkwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0NPU0YnJ0B8JChIQVZFX0NPU0YpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0NPU0wnJ0B8JChIQVZFX0NPU0wpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0NPU0hGJydAfCQoSEFWRV9DT1NIRil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRVhQRicnQHwkKEhBVkVfRVhQRil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRVhQTCcnQHwkKEhBVkVfRVhQTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRVhQTTEnJ0B8JChIQVZFX0VYUE0xKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9FWFBNMUYnJ0B8JChIQVZFX0VYUE0xRil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRkFCU0YnJ0B8JChIQVZFX0ZBQlNGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9GQUJTTCcnQHwkKEhBVkVfRkFCU0wpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0ZNQScnQHwkKEhBVkVfRk1BKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9GTUFGJydAfCQoSEFWRV9GTUFGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9GTUFMJydAfCQoSEFWRV9GTUFMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9GTU9ERicnQHwkKEhBVkVfRk1PREYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0ZNT0RMJydAfCQoSEFWRV9GTU9ETCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRlJFWFBGJydAfCQoSEFWRV9GUkVYUEYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0hZUE9URicnQHwkKEhBVkVfSFlQT1RGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9IWVBPVEwnJ0B8JChIQVZFX0hZUE9UTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfSUxPR0InJ0B8JChIQVZFX0lMT0dCKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9JTE9HQkYnJ0B8JChIQVZFX0lMT0dCRil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfSUxPR0JMJydAfCQoSEFWRV9JTE9HQkwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0lTTkFORicnQHwkKEhBVkVfSVNOQU5GKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9JU05BTkQnJ0B8JChIQVZFX0lTTkFORCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfSVNOQU5MJydAfCQoSEFWRV9JU05BTkwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0xERVhQRicnQHwkKEhBVkVfTERFWFBGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9MT0dGJydAfCQoSEFWRV9MT0dGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9MT0dMJydAfCQoSEFWRV9MT0dMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9MT0cxMEYnJ0B8JChIQVZFX0xPRzEwRil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTE9HMTBMJydAfCQoSEFWRV9MT0cxMEwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0xPRzFQJydAfCQoSEFWRV9MT0cxUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTE9HMVBGJydAfCQoSEFWRV9MT0cxUEYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0xPRzFQTCcnQHwkKEhBVkVfTE9HMVBMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9MT0dCRicnQHwkKEhBVkVfTE9HQkYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0xPR0JMJydAfCQoSEFWRV9MT0dCTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTU9ERkYnJ0B8JChIQVZFX01PREZGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9NT0RGTCcnQHwkKEhBVkVfTU9ERkwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1BPV0YnJ0B8JChIQVZFX1BPV0YpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1JFTUFJTkRFUicnQHwkKEhBVkVfUkVNQUlOREVSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9SRU1BSU5ERVJGJydAfCQoSEFWRV9SRU1BSU5ERVJGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9SSU5UJydAfCQoSEFWRV9SSU5UKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9SSU5UTCcnQHwkKEhBVkVfUklOVEwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1NJTkYnJ0B8JChIQVZFX1NJTkYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1NJTkwnJ0B8JChIQVZFX1NJTkwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1NJTkhGJydAfCQoSEFWRV9TSU5IRil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1FSVEYnJ0B8JChIQVZFX1NRUlRGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TUVJUTCcnQHwkKEhBVkVfU1FSVEwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1RBTkYnJ0B8JChIQVZFX1RBTkYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1RBTkwnJ0B8JChIQVZFX1RBTkwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1RBTkhGJydAfCQoSEFWRV9UQU5IRil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9BQ09TTCcnQHwkKEhBVkVfREVDTF9BQ09TTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9BU0lOTCcnQHwkKEhBVkVfREVDTF9BU0lOTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9BVEFOTCcnQHwkKEhBVkVfREVDTF9BVEFOTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9DQlJURicnQHwkKEhBVkVfREVDTF9DQlJURil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9DQlJUTCcnQHwkKEhBVkVfREVDTF9DQlJUTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9DRUlMRicnQHwkKEhBVkVfREVDTF9DRUlMRil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9DRUlMTCcnQHwkKEhBVkVfREVDTF9DRUlMTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9DT1BZU0lHTkYnJ0B8JChIQVZFX0RFQ0xfQ09QWVNJR05GKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0NPU0wnJ0B8JChIQVZFX0RFQ0xfQ09TTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9FWFBMJydAfCQoSEFWRV9ERUNMX0VYUEwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfRVhQMicnQHwkKEhBVkVfREVDTF9FWFAyKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0VYUDJGJydAfCQoSEFWRV9ERUNMX0VYUDJGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0VYUDJMJydAfCQoSEFWRV9ERUNMX0VYUDJMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0VYUE0xTCcnQHwkKEhBVkVfREVDTF9FWFBNMUwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfRkxPT1JGJydAfCQoSEFWRV9ERUNMX0ZMT09SRil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9GTE9PUkwnJ0B8JChIQVZFX0RFQ0xfRkxPT1JMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0ZSRVhQTCcnQHwkKEhBVkVfREVDTF9GUkVYUEwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfTERFWFBMJydAfCQoSEFWRV9ERUNMX0xERVhQTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9MT0dMJydAfCQoSEFWRV9ERUNMX0xPR0wpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfTE9HMTBMJydAfCQoSEFWRV9ERUNMX0xPRzEwTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9MT0cyJydAfCQoSEFWRV9ERUNMX0xPRzIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfTE9HMkYnJ0B8JChIQVZFX0RFQ0xfTE9HMkYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfTE9HMkwnJ0B8JChIQVZFX0RFQ0xfTE9HMkwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfTE9HQicnQHwkKEhBVkVfREVDTF9MT0dCKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX1JFTUFJTkRFUicnQHwkKEhBVkVfREVDTF9SRU1BSU5ERVIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfUkVNQUlOREVSTCcnQHwkKEhBVkVfREVDTF9SRU1BSU5ERVJMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX1JJTlRGJydAfCQoSEFWRV9ERUNMX1JJTlRGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX1JPVU5EJydAfCQoSEFWRV9ERUNMX1JPVU5EKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX1JPVU5ERicnQHwkKEhBVkVfREVDTF9ST1VOREYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfUk9VTkRMJydAfCQoSEFWRV9ERUNMX1JPVU5ETCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9TSU5MJydAfCQoSEFWRV9ERUNMX1NJTkwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfU1FSVEwnJ0B8JChIQVZFX0RFQ0xfU1FSVEwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfVEFOTCcnQHwkKEhBVkVfREVDTF9UQU5MKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX1RSVU5DJydAfCQoSEFWRV9ERUNMX1RSVU5DKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX1RSVU5DRicnQHwkKEhBVkVfREVDTF9UUlVOQ0YpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfVFJVTkNMJydAfCQoSEFWRV9ERUNMX1RSVU5DTCl8ZycgXAorCSAgfCBcCisJICBzZWQgLWUgJ3N8QCcnUkVQTEFDRV9DQlJURicnQHwkKFJFUExBQ0VfQ0JSVEYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0NCUlRMJydAfCQoUkVQTEFDRV9DQlJUTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfQ0VJTCcnQHwkKFJFUExBQ0VfQ0VJTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfQ0VJTEYnJ0B8JChSRVBMQUNFX0NFSUxGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9DRUlMTCcnQHwkKFJFUExBQ0VfQ0VJTEwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0VYUE0xJydAfCQoUkVQTEFDRV9FWFBNMSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRVhQTTFGJydAfCQoUkVQTEFDRV9FWFBNMUYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0VYUDInJ0B8JChSRVBMQUNFX0VYUDIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0VYUDJMJydAfCQoUkVQTEFDRV9FWFAyTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRkFCU0wnJ0B8JChSRVBMQUNFX0ZBQlNMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9GTE9PUicnQHwkKFJFUExBQ0VfRkxPT1IpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0ZMT09SRicnQHwkKFJFUExBQ0VfRkxPT1JGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9GTE9PUkwnJ0B8JChSRVBMQUNFX0ZMT09STCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRk1BJydAfCQoUkVQTEFDRV9GTUEpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0ZNQUYnJ0B8JChSRVBMQUNFX0ZNQUYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0ZNQUwnJ0B8JChSRVBMQUNFX0ZNQUwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0ZNT0QnJ0B8JChSRVBMQUNFX0ZNT0QpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0ZNT0RGJydAfCQoUkVQTEFDRV9GTU9ERil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRk1PREwnJ0B8JChSRVBMQUNFX0ZNT0RMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9GUkVYUEYnJ0B8JChSRVBMQUNFX0ZSRVhQRil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRlJFWFAnJ0B8JChSRVBMQUNFX0ZSRVhQKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9GUkVYUEwnJ0B8JChSRVBMQUNFX0ZSRVhQTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfSFVHRV9WQUwnJ0B8JChSRVBMQUNFX0hVR0VfVkFMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9IWVBPVCcnQHwkKFJFUExBQ0VfSFlQT1QpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0hZUE9URicnQHwkKFJFUExBQ0VfSFlQT1RGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9IWVBPVEwnJ0B8JChSRVBMQUNFX0hZUE9UTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfSUxPR0InJ0B8JChSRVBMQUNFX0lMT0dCKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9JTE9HQkYnJ0B8JChSRVBMQUNFX0lMT0dCRil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfSVNGSU5JVEUnJ0B8JChSRVBMQUNFX0lTRklOSVRFKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9JU0lORicnQHwkKFJFUExBQ0VfSVNJTkYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0lTTkFOJydAfCQoUkVQTEFDRV9JU05BTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfSVRPTEQnJ0B8JChSRVBMQUNFX0lUT0xEKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9MREVYUEwnJ0B8JChSRVBMQUNFX0xERVhQTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTE9HJydAfCQoUkVQTEFDRV9MT0cpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0xPR0YnJ0B8JChSRVBMQUNFX0xPR0YpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0xPR0wnJ0B8JChSRVBMQUNFX0xPR0wpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0xPRzEwJydAfCQoUkVQTEFDRV9MT0cxMCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTE9HMTBGJydAfCQoUkVQTEFDRV9MT0cxMEYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0xPRzEwTCcnQHwkKFJFUExBQ0VfTE9HMTBMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9MT0cxUCcnQHwkKFJFUExBQ0VfTE9HMVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0xPRzFQRicnQHwkKFJFUExBQ0VfTE9HMVBGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9MT0cxUEwnJ0B8JChSRVBMQUNFX0xPRzFQTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTE9HMicnQHwkKFJFUExBQ0VfTE9HMil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTE9HMkYnJ0B8JChSRVBMQUNFX0xPRzJGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9MT0cyTCcnQHwkKFJFUExBQ0VfTE9HMkwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0xPR0InJ0B8JChSRVBMQUNFX0xPR0IpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0xPR0JGJydAfCQoUkVQTEFDRV9MT0dCRil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTE9HQkwnJ0B8JChSRVBMQUNFX0xPR0JMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9NT0RGJydAfCQoUkVQTEFDRV9NT0RGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9NT0RGRicnQHwkKFJFUExBQ0VfTU9ERkYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX01PREZMJydAfCQoUkVQTEFDRV9NT0RGTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTkFOJydAfCQoUkVQTEFDRV9OQU4pfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1JFTUFJTkRFUicnQHwkKFJFUExBQ0VfUkVNQUlOREVSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9SRU1BSU5ERVJGJydAfCQoUkVQTEFDRV9SRU1BSU5ERVJGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9SRU1BSU5ERVJMJydAfCQoUkVQTEFDRV9SRU1BSU5ERVJMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9ST1VORCcnQHwkKFJFUExBQ0VfUk9VTkQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1JPVU5ERicnQHwkKFJFUExBQ0VfUk9VTkRGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9ST1VOREwnJ0B8JChSRVBMQUNFX1JPVU5ETCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfU0lHTkJJVCcnQHwkKFJFUExBQ0VfU0lHTkJJVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfU0lHTkJJVF9VU0lOR19HQ0MnJ0B8JChSRVBMQUNFX1NJR05CSVRfVVNJTkdfR0NDKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9TUVJUTCcnQHwkKFJFUExBQ0VfU1FSVEwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1RSVU5DJydAfCQoUkVQTEFDRV9UUlVOQyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfVFJVTkNGJydAfCQoUkVQTEFDRV9UUlVOQ0YpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1RSVU5DTCcnQHwkKFJFUExBQ0VfVFJVTkNMKXxnJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBML3IgJChDWFhERUZTX0gpJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVMTC9yICQoQVJHX05PTk5VTExfSCknIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFL3IgJChXQVJOX09OX1VTRV9IKSc7IFwKKwl9ID4gJEAtdCAmJiBcCisJbXYgJEAtdCAkQAorTU9TVExZQ0xFQU5GSUxFUyArPSBtYXRoLmggbWF0aC5oLXQKKworRVhUUkFfRElTVCArPSBtYXRoLmluLmgKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBtYXRoCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgbWJjaGFyCisKK2xpYmJpc29uX2FfU09VUkNFUyArPSBtYmNoYXIuYworCitFWFRSQV9ESVNUICs9IG1iY2hhci5oCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgbWJjaGFyCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgbWJydG93YworCisKK0VYVFJBX0RJU1QgKz0gbWJydG93Yy5jCisKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyArPSBtYnJ0b3djLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBtYnJ0b3djCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgbWJzY2hyCisKK2xpYmJpc29uX2FfU09VUkNFUyArPSBtYnNjaHIuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIG1ic2NocgorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIG1ic2luaXQKKworCitFWFRSQV9ESVNUICs9IG1ic2luaXQuYworCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0gbWJzaW5pdC5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgbWJzaW5pdAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIG1ic3JjaHIKKworbGliYmlzb25fYV9TT1VSQ0VTICs9IG1ic3JjaHIuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIG1ic3JjaHIKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBtYnN3aWR0aAorCitsaWJiaXNvbl9hX1NPVVJDRVMgKz0gbWJzd2lkdGguaCBtYnN3aWR0aC5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgbWJzd2lkdGgKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBtYnVpdGVyCisKK2xpYmJpc29uX2FfU09VUkNFUyArPSBtYnVpdGVyLmggbWJ1aXRlci5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgbWJ1aXRlcgorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIG1lbWNocgorCisKK0VYVFJBX0RJU1QgKz0gbWVtY2hyLmMgbWVtY2hyLnZhbGdyaW5kCisKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyArPSBtZW1jaHIuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIG1lbWNocgorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIG1zdmMtaW52YWwKKworCitFWFRSQV9ESVNUICs9IG1zdmMtaW52YWwuYyBtc3ZjLWludmFsLmgKKworRVhUUkFfbGliYmlzb25fYV9TT1VSQ0VTICs9IG1zdmMtaW52YWwuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIG1zdmMtaW52YWwKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBtc3ZjLW5vdGhyb3cKKworCitFWFRSQV9ESVNUICs9IG1zdmMtbm90aHJvdy5jIG1zdmMtbm90aHJvdy5oCisKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyArPSBtc3ZjLW5vdGhyb3cuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIG1zdmMtbm90aHJvdworCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIG9ic3RhY2sKKworCitFWFRSQV9ESVNUICs9IG9ic3RhY2suYyBvYnN0YWNrLmgKKworRVhUUkFfbGliYmlzb25fYV9TT1VSQ0VTICs9IG9ic3RhY2suYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIG9ic3RhY2sKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBvYnN0YWNrLXByaW50ZgorCisKK0VYVFJBX0RJU1QgKz0gb2JzdGFja19wcmludGYuYworCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0gb2JzdGFja19wcmludGYuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIG9ic3RhY2stcHJpbnRmCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgb3BlbgorCisKK0VYVFJBX0RJU1QgKz0gb3Blbi5jCisKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyArPSBvcGVuLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBvcGVuCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgcGF0aG1heAorCisKK0VYVFJBX0RJU1QgKz0gcGF0aG1heC5oCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgcGF0aG1heAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHBlcnJvcgorCisKK0VYVFJBX0RJU1QgKz0gcGVycm9yLmMKKworRVhUUkFfbGliYmlzb25fYV9TT1VSQ0VTICs9IHBlcnJvci5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgcGVycm9yCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgcGlwZTIKKworbGliYmlzb25fYV9TT1VSQ0VTICs9IHBpcGUyLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBwaXBlMgorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHBpcGUyLXNhZmVyCisKK2xpYmJpc29uX2FfU09VUkNFUyArPSBwaXBlMi1zYWZlci5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgcGlwZTItc2FmZXIKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bi1pbnRlcm5hbAorCisKK0VYVFJBX0RJU1QgKz0gc3Bhd25faW50Lmggc3Bhd25pLmMKKworRVhUUkFfbGliYmlzb25fYV9TT1VSQ0VTICs9IHNwYXduaS5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd24taW50ZXJuYWwKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2UKKworCitFWFRSQV9ESVNUICs9IHNwYXduX2ZhY3Rpb25fYWRkY2xvc2UuYyBzcGF3bl9pbnQuaAorCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0gc3Bhd25fZmFjdGlvbl9hZGRjbG9zZS5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDIKKworCitFWFRSQV9ESVNUICs9IHNwYXduX2ZhY3Rpb25fYWRkZHVwMi5jIHNwYXduX2ludC5oCisKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyArPSBzcGF3bl9mYWN0aW9uX2FkZGR1cDIuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW4KKworCitFWFRSQV9ESVNUICs9IHNwYXduX2ZhY3Rpb25fYWRkb3Blbi5jIHNwYXduX2ludC5oCisKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyArPSBzcGF3bl9mYWN0aW9uX2FkZG9wZW4uYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3kKKworCitFWFRSQV9ESVNUICs9IHNwYXduX2ZhY3Rpb25fZGVzdHJveS5jCisKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyArPSBzcGF3bl9mYWN0aW9uX2Rlc3Ryb3kuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19kZXN0cm95CisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2luaXQKKworCitFWFRSQV9ESVNUICs9IHNwYXduX2ZhY3Rpb25faW5pdC5jIHNwYXduX2ludC5oCisKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyArPSBzcGF3bl9mYWN0aW9uX2luaXQuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19pbml0CisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25hdHRyX2Rlc3Ryb3kKKworCitFWFRSQV9ESVNUICs9IHNwYXduYXR0cl9kZXN0cm95LmMKKworRVhUUkFfbGliYmlzb25fYV9TT1VSQ0VTICs9IHNwYXduYXR0cl9kZXN0cm95LmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bmF0dHJfZGVzdHJveQorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9pbml0CisKKworRVhUUkFfRElTVCArPSBzcGF3bmF0dHJfaW5pdC5jCisKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyArPSBzcGF3bmF0dHJfaW5pdC5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25hdHRyX2luaXQKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bmF0dHJfc2V0ZmxhZ3MKKworCitFWFRSQV9ESVNUICs9IHNwYXduYXR0cl9zZXRmbGFncy5jCisKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyArPSBzcGF3bmF0dHJfc2V0ZmxhZ3MuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9zZXRmbGFncworCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9zZXRzaWdtYXNrCisKKworRVhUUkFfRElTVCArPSBzcGF3bmF0dHJfc2V0c2lnbWFzay5jCisKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyArPSBzcGF3bmF0dHJfc2V0c2lnbWFzay5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25hdHRyX3NldHNpZ21hc2sKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bnAKKworCitFWFRSQV9ESVNUICs9IHNwYXducC5jCisKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyArPSBzcGF3bnAuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXducAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHByaW50Zi1mcmV4cAorCitsaWJiaXNvbl9hX1NPVVJDRVMgKz0gcHJpbnRmLWZyZXhwLmMKKworRVhUUkFfRElTVCArPSBwcmludGYtZnJleHAuaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHByaW50Zi1mcmV4cAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHByaW50Zi1mcmV4cGwKKworbGliYmlzb25fYV9TT1VSQ0VTICs9IHByaW50Zi1mcmV4cGwuYworCitFWFRSQV9ESVNUICs9IHByaW50Zi1mcmV4cC5jIHByaW50Zi1mcmV4cGwuaAorCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0gcHJpbnRmLWZyZXhwLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBwcmludGYtZnJleHBsCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgcHJpbnRmLXBvc2l4CisKKworRVhUUkFfRElTVCArPSBwcmludGYuYworCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0gcHJpbnRmLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBwcmludGYtcG9zaXgKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBwcm9nbmFtZQorCitsaWJiaXNvbl9hX1NPVVJDRVMgKz0gcHJvZ25hbWUuaCBwcm9nbmFtZS5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgcHJvZ25hbWUKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBxdW90ZQorCisKK0VYVFJBX0RJU1QgKz0gcXVvdGUuaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHF1b3RlCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgcXVvdGVhcmcKKworbGliYmlzb25fYV9TT1VSQ0VTICs9IHF1b3RlYXJnLmMKKworRVhUUkFfRElTVCArPSBxdW90ZS5oIHF1b3RlYXJnLmgKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBxdW90ZWFyZworCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHJhaXNlCisKKworRVhUUkFfRElTVCArPSByYWlzZS5jCisKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyArPSByYWlzZS5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgcmFpc2UKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSByYXdtZW1jaHIKKworCitFWFRSQV9ESVNUICs9IHJhd21lbWNoci5jIHJhd21lbWNoci52YWxncmluZAorCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0gcmF3bWVtY2hyLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSByYXdtZW1jaHIKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSByZWFkbWUtcmVsZWFzZQorCisKK0VYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9SRUFETUUtcmVsZWFzZQorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHJlYWRtZS1yZWxlYXNlCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgcmVhbGxvYy1wb3NpeAorCisKK0VYVFJBX0RJU1QgKz0gcmVhbGxvYy5jCisKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyArPSByZWFsbG9jLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSByZWFsbG9jLXBvc2l4CisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc2NoZWQKKworQlVJTFRfU09VUkNFUyArPSAkKFNDSEVEX0gpCisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSBhIHJlcGxhY2VtZW50IGZvciA8c2NoZWQuaD4gd2hlbgorIyB0aGUgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBvbmUuCitpZiBHTF9HRU5FUkFURV9TQ0hFRF9ICitzY2hlZC5oOiBzY2hlZC5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKwl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCisJICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1NDSEVEX0gnJ0B8JChIQVZFX1NDSEVEX0gpfGcnIFwKKwkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKwkgICAgICAtZSAnc3xAJydORVhUX1NDSEVEX0gnJ0B8JChORVhUX1NDSEVEX0gpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1NUUlVDVF9TQ0hFRF9QQVJBTScnQHwkKEhBVkVfU1RSVUNUX1NDSEVEX1BBUkFNKXxnJyBcCisJICAgICAgPCAkKHNyY2Rpcikvc2NoZWQuaW4uaDsgXAorCX0gPiAkQC10ICYmIFwKKwltdiAkQC10ICRACitlbHNlCitzY2hlZC5oOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCXJtIC1mICRACitlbmRpZgorTU9TVExZQ0xFQU5GSUxFUyArPSBzY2hlZC5oIHNjaGVkLmgtdAorCitFWFRSQV9ESVNUICs9IHNjaGVkLmluLmgKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBzY2hlZAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHNpZ2FjdGlvbgorCitsaWJiaXNvbl9hX1NPVVJDRVMgKz0gc2lnLWhhbmRsZXIuYworCitFWFRSQV9ESVNUICs9IHNpZy1oYW5kbGVyLmggc2lnYWN0aW9uLmMKKworRVhUUkFfbGliYmlzb25fYV9TT1VSQ0VTICs9IHNpZ2FjdGlvbi5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc2lnYWN0aW9uCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc2lnbmFsLWgKKworQlVJTFRfU09VUkNFUyArPSBzaWduYWwuaAorCisjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBjcmVhdGUgPHNpZ25hbC5oPiB3aGVuIHRoZSBzeXN0ZW0KKyMgZG9lc24ndCBoYXZlIGEgY29tcGxldGUgb25lLgorc2lnbmFsLmg6IHNpZ25hbC5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hYREVGU19IKSAkKEFSR19OT05OVUxMX0gpICQoV0FSTl9PTl9VU0VfSCkKKwkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLycgJiYgXAorCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCisJICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnTkVYVF9TSUdOQUxfSCcnQHwkKE5FWFRfU0lHTkFMX0gpfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUFRIUkVBRF9TSUdNQVNLJydAfCQoR05VTElCX1BUSFJFQURfU0lHTUFTSyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SQUlTRScnQHwkKEdOVUxJQl9SQUlTRSl8ZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TSUdOQUxfSF9TSUdQSVBFJydALyQoR05VTElCX1NJR05BTF9IX1NJR1BJUEUpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU0lHUFJPQ01BU0snJ0AvJChHTlVMSUJfU0lHUFJPQ01BU0spL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU0lHQUNUSU9OJydALyQoR05VTElCX1NJR0FDVElPTikvZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkcnJ0B8JChIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9QVEhSRUFEX1NJR01BU0snJ0B8JChIQVZFX1BUSFJFQURfU0lHTUFTSyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfUkFJU0UnJ0B8JChIQVZFX1JBSVNFKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TSUdTRVRfVCcnQHwkKEhBVkVfU0lHU0VUX1QpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1NJR0lORk9fVCcnQHwkKEhBVkVfU0lHSU5GT19UKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TSUdBQ1RJT04nJ0B8JChIQVZFX1NJR0FDVElPTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT04nJ0B8JChIQVZFX1NUUlVDVF9TSUdBQ1RJT05fU0FfU0lHQUNUSU9OKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9UWVBFX1ZPTEFUSUxFX1NJR19BVE9NSUNfVCcnQHwkKEhBVkVfVFlQRV9WT0xBVElMRV9TSUdfQVRPTUlDX1QpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1NJR0hBTkRMRVJfVCcnQHwkKEhBVkVfU0lHSEFORExFUl9UKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9QVEhSRUFEX1NJR01BU0snJ0B8JChSRVBMQUNFX1BUSFJFQURfU0lHTUFTSyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfUkFJU0UnJ0B8JChSRVBMQUNFX1JBSVNFKXxnJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBML3IgJChDWFhERUZTX0gpJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVMTC9yICQoQVJHX05PTk5VTExfSCknIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFL3IgJChXQVJOX09OX1VTRV9IKScgXAorCSAgICAgIDwgJChzcmNkaXIpL3NpZ25hbC5pbi5oOyBcCisJfSA+ICRALXQgJiYgXAorCW12ICRALXQgJEAKK01PU1RMWUNMRUFORklMRVMgKz0gc2lnbmFsLmggc2lnbmFsLmgtdAorCitFWFRSQV9ESVNUICs9IHNpZ25hbC5pbi5oCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc2lnbmFsLWgKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzaWduYml0CisKKworRVhUUkFfRElTVCArPSBmbG9hdCsuaCBzaWduYml0ZC5jIHNpZ25iaXRmLmMgc2lnbmJpdGwuYworCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0gc2lnbmJpdGQuYyBzaWduYml0Zi5jIHNpZ25iaXRsLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBzaWduYml0CisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc2lncHJvY21hc2sKKworCitFWFRSQV9ESVNUICs9IHNpZ3Byb2NtYXNrLmMKKworRVhUUkFfbGliYmlzb25fYV9TT1VSQ0VTICs9IHNpZ3Byb2NtYXNrLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBzaWdwcm9jbWFzaworCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHNpemVfbWF4CisKK2xpYmJpc29uX2FfU09VUkNFUyArPSBzaXplX21heC5oCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc2l6ZV9tYXgKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzbmlwcGV0L19Ob3JldHVybgorCisjIEJlY2F1c2UgdGhpcyBNYWtlZmlsZSBzbmlwcGV0IGRlZmluZXMgYSB2YXJpYWJsZSB1c2VkIGJ5IG90aGVyCisjIGdudWxpYiBNYWtlZmlsZSBzbmlwcGV0cywgaXQgbXVzdCBiZSBwcmVzZW50IGluIGFsbCBNYWtlZmlsZS5hbSB0aGF0CisjIG5lZWQgaXQuIFRoaXMgaXMgZW5zdXJlZCBieSB0aGUgYXBwbGljYWJpbGl0eSAnYWxsJyBkZWZpbmVkIGFib3ZlLgorCitfTk9SRVRVUk5fSD0kKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L19Ob3JldHVybi5oCisKK0VYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC9fTm9yZXR1cm4uaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHNuaXBwZXQvX05vcmV0dXJuCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc25pcHBldC9hcmctbm9ubnVsbAorCisjIFRoZSBCVUlMVF9TT1VSQ0VTIGNyZWF0ZWQgYnkgdGhpcyBNYWtlZmlsZSBzbmlwcGV0IGFyZSBub3QgdXNlZCB2aWEgI2luY2x1ZGUKKyMgc3RhdGVtZW50cyBidXQgdGhyb3VnaCBkaXJlY3QgZmlsZSByZWZlcmVuY2UuIFRoZXJlZm9yZSB0aGlzIHNuaXBwZXQgbXVzdCBiZQorIyBwcmVzZW50IGluIGFsbCBNYWtlZmlsZS5hbSB0aGF0IG5lZWQgaXQuIFRoaXMgaXMgZW5zdXJlZCBieSB0aGUgYXBwbGljYWJpbGl0eQorIyAnYWxsJyBkZWZpbmVkIGFib3ZlLgorCitCVUlMVF9TT1VSQ0VTICs9IGFyZy1ub25udWxsLmgKKyMgVGhlIGFyZy1ub25udWxsLmggdGhhdCBnZXRzIGluc2VydGVkIGludG8gZ2VuZXJhdGVkIC5oIGZpbGVzIGlzIHRoZSBzYW1lIGFzCisjIGJ1aWxkLWF1eC9zbmlwcGV0L2FyZy1ub25udWxsLmgsIGV4Y2VwdCB0aGF0IGl0IGhhcyB0aGUgY29weXJpZ2h0IGhlYWRlciBjdXQKKyMgb2ZmLgorYXJnLW5vbm51bGwuaDogJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC9hcmctbm9ubnVsbC5oCisJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKwlzZWQgLW4gLWUgJy9HTF9BUkdfTk9OTlVMTC8sJCRwJyBcCisJICA8ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvYXJnLW5vbm51bGwuaCBcCisJICA+ICRALXQgJiYgXAorCW12ICRALXQgJEAKK01PU1RMWUNMRUFORklMRVMgKz0gYXJnLW5vbm51bGwuaCBhcmctbm9ubnVsbC5oLXQKKworQVJHX05PTk5VTExfSD1hcmctbm9ubnVsbC5oCisKK0VYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC9hcmctbm9ubnVsbC5oCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc25pcHBldC9hcmctbm9ubnVsbAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHNuaXBwZXQvYysrZGVmcworCisjIFRoZSBCVUlMVF9TT1VSQ0VTIGNyZWF0ZWQgYnkgdGhpcyBNYWtlZmlsZSBzbmlwcGV0IGFyZSBub3QgdXNlZCB2aWEgI2luY2x1ZGUKKyMgc3RhdGVtZW50cyBidXQgdGhyb3VnaCBkaXJlY3QgZmlsZSByZWZlcmVuY2UuIFRoZXJlZm9yZSB0aGlzIHNuaXBwZXQgbXVzdCBiZQorIyBwcmVzZW50IGluIGFsbCBNYWtlZmlsZS5hbSB0aGF0IG5lZWQgaXQuIFRoaXMgaXMgZW5zdXJlZCBieSB0aGUgYXBwbGljYWJpbGl0eQorIyAnYWxsJyBkZWZpbmVkIGFib3ZlLgorCitCVUlMVF9TT1VSQ0VTICs9IGMrK2RlZnMuaAorIyBUaGUgYysrZGVmcy5oIHRoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIGdlbmVyYXRlZCAuaCBmaWxlcyBpcyB0aGUgc2FtZSBhcworIyBidWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmgsIGV4Y2VwdCB0aGF0IGl0IGhhcyB0aGUgY29weXJpZ2h0IGhlYWRlciBjdXQgb2ZmLgorYysrZGVmcy5oOiAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaAorCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisJc2VkIC1uIC1lICcvX0dMX0NYWERFRlMvLCQkcCcgXAorCSAgPCAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaCBcCisJICA+ICRALXQgJiYgXAorCW12ICRALXQgJEAKK01PU1RMWUNMRUFORklMRVMgKz0gYysrZGVmcy5oIGMrK2RlZnMuaC10CisKK0NYWERFRlNfSD1jKytkZWZzLmgKKworRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHNuaXBwZXQvYysrZGVmcworCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHNuaXBwZXQvd2Fybi1vbi11c2UKKworQlVJTFRfU09VUkNFUyArPSB3YXJuLW9uLXVzZS5oCisjIFRoZSB3YXJuLW9uLXVzZS5oIHRoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIGdlbmVyYXRlZCAuaCBmaWxlcyBpcyB0aGUgc2FtZSBhcworIyBidWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oLCBleGNlcHQgdGhhdCBpdCBoYXMgdGhlIGNvcHlyaWdodCBoZWFkZXIgY3V0CisjIG9mZi4KK3dhcm4tb24tdXNlLmg6ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvd2Fybi1vbi11c2UuaAorCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisJc2VkIC1uIC1lICcvXi5pZm5kZWYvLCQkcCcgXAorCSAgPCAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L3dhcm4tb24tdXNlLmggXAorCSAgPiAkQC10ICYmIFwKKwltdiAkQC10ICRACitNT1NUTFlDTEVBTkZJTEVTICs9IHdhcm4tb24tdXNlLmggd2Fybi1vbi11c2UuaC10CisKK1dBUk5fT05fVVNFX0g9d2Fybi1vbi11c2UuaAorCitFWFRSQV9ESVNUICs9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvd2Fybi1vbi11c2UuaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHNuaXBwZXQvd2Fybi1vbi11c2UKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzbnByaW50ZgorCisKK0VYVFJBX0RJU1QgKz0gc25wcmludGYuYworCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0gc25wcmludGYuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHNucHJpbnRmCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc3Bhd24KKworQlVJTFRfU09VUkNFUyArPSBzcGF3bi5oCisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSBhIHJlcGxhY2VtZW50IGZvciA8c3Bhd24uaD4gd2hlbgorIyB0aGUgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBvbmUuCitzcGF3bi5oOiBzcGF3bi5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hYREVGU19IKSAkKEFSR19OT05OVUxMX0gpICQoV0FSTl9PTl9VU0VfSCkKKwkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKKwkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1BBV05fSCcnQHwkKEhBVkVfU1BBV05fSCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorCSAgICAgIC1lICdzfEAnJ05FWFRfU1BBV05fSCcnQHwkKE5FWFRfU1BBV05fSCl8ZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QT1NJWF9TUEFXTicnQC8kKEdOVUxJQl9QT1NJWF9TUEFXTikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QT1NJWF9TUEFXTlAnJ0AvJChHTlVMSUJfUE9TSVhfU1BBV05QKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19JTklUJydALyQoR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19JTklUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRScnQC8kKEdOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQUREQ0xPU0UpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDInJ0AvJChHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU4nJ0AvJChHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU4pL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0RFU1RST1knJ0AvJChHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0RFU1RST1kpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0lOSVQnJ0AvJChHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0lOSVQpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVEZMQUdTJydALyQoR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRGTEFHUykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VURkxBR1MnJ0AvJChHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVEZMQUdTKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRQR1JPVVAnJ0AvJChHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFBHUk9VUCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUUEdST1VQJydALyQoR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRQR1JPVVApL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNDSEVEUEFSQU0nJ0AvJChHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNDSEVEUEFSQU0pL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNDSEVEUEFSQU0nJ0AvJChHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNDSEVEUEFSQU0pL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNDSEVEUE9MSUNZJydALyQoR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBPTElDWSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQT0xJQ1knJ0AvJChHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNDSEVEUE9MSUNZKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdERUZBVUxUJydALyQoR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdERUZBVUxUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTSUdERUZBVUxUJydALyQoR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTSUdERUZBVUxUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdNQVNLJydALyQoR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdNQVNLKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTSUdNQVNLJydALyQoR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTSUdNQVNLKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BPU0lYX1NQQVdOQVRUUl9ERVNUUk9ZJydALyQoR05VTElCX1BPU0lYX1NQQVdOQVRUUl9ERVNUUk9ZKS9nJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9QT1NJWF9TUEFXTicnQHwkKEhBVkVfUE9TSVhfU1BBV04pfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1BPU0lYX1NQQVdOQVRUUl9UJydAfCQoSEFWRV9QT1NJWF9TUEFXTkFUVFJfVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX1QnJ0B8JChIQVZFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19UKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9QT1NJWF9TUEFXTicnQHwkKFJFUExBQ0VfUE9TSVhfU1BBV04pfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRScnQHwkKFJFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERENMT1NFKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMicnQHwkKFJFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERPUEVOJydAfCQoUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURET1BFTil8ZycgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTC9yICQoQ1hYREVGU19IKScgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwvciAkKEFSR19OT05OVUxMX0gpJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRS9yICQoV0FSTl9PTl9VU0VfSCknIFwKKwkgICAgICA8ICQoc3JjZGlyKS9zcGF3bi5pbi5oOyBcCisJfSA+ICRALXQgJiYgXAorCW12ICRALXQgJEAKK01PU1RMWUNMRUFORklMRVMgKz0gc3Bhd24uaCBzcGF3bi5oLXQKKworRVhUUkFfRElTVCArPSBzcGF3bi5pbi5oCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc3Bhd24KKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzcGF3bi1waXBlCisKK2xpYmJpc29uX2FfU09VUkNFUyArPSBzcGF3bi1waXBlLmggc3Bhd24tcGlwZS5jIHczMnNwYXduLmgKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBzcGF3bi1waXBlCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc3ByaW50Zi1wb3NpeAorCisKK0VYVFJBX0RJU1QgKz0gc3ByaW50Zi5jCisKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyArPSBzcHJpbnRmLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBzcHJpbnRmLXBvc2l4CisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc3RhdAorCisKK0VYVFJBX0RJU1QgKz0gc3RhdC5jCisKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyArPSBzdGF0LmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBzdGF0CisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc3RkYm9vbAogCiBCVUlMVF9TT1VSQ0VTICs9ICQoU1REQk9PTF9IKQotRVhUUkFfRElTVCArPSBzdGRib29sXy5oCiAKICMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8c3RkYm9vbC5oPiB3aGVuIHRoZSBzeXN0ZW0KICMgZG9lc24ndCBoYXZlIG9uZSB0aGF0IHdvcmtzLgotc3RkYm9vbC5oOiBzdGRib29sXy5oCi0Jc2VkIC1lICdzL0AnJ0hBVkVfX0JPT0wnJ0AvJChIQVZFX19CT09MKS9nJyA8ICQoc3JjZGlyKS9zdGRib29sXy5oID4gJEAtdAoraWYgR0xfR0VORVJBVEVfU1REQk9PTF9ICitzdGRib29sLmg6IHN0ZGJvb2wuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJzsgXAorCSAgc2VkIC1lICdzL0AnJ0hBVkVfX0JPT0wnJ0AvJChIQVZFX19CT09MKS9nJyA8ICQoc3JjZGlyKS9zdGRib29sLmluLmg7IFwKKwl9ID4gJEAtdCAmJiBcCiAJbXYgJEAtdCAkQAorZWxzZQorc3RkYm9vbC5oOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCXJtIC1mICRACitlbmRpZgogTU9TVExZQ0xFQU5GSUxFUyArPSBzdGRib29sLmggc3RkYm9vbC5oLXQKIAorRVhUUkFfRElTVCArPSBzdGRib29sLmluLmgKIAotbGliX1NPVVJDRVMgKz0gc3RwY3B5LmgKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc3RkYm9vbAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHN0ZGRlZgorCitCVUlMVF9TT1VSQ0VTICs9ICQoU1REREVGX0gpCisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8c3RkZGVmLmg+IHdoZW4gdGhlIHN5c3RlbQorIyBkb2Vzbid0IGhhdmUgb25lIHRoYXQgd29ya3Mgd2l0aCB0aGUgZ2l2ZW4gY29tcGlsZXIuCitpZiBHTF9HRU5FUkFURV9TVERERUZfSAorc3RkZGVmLmg6IHN0ZGRlZi5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKwl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKKwkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorCSAgICAgIC1lICdzfEAnJ05FWFRfU1REREVGX0gnJ0B8JChORVhUX1NURERFRl9IKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XQ0hBUl9UJydAfCQoSEFWRV9XQ0hBUl9UKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9OVUxMJydAfCQoUkVQTEFDRV9OVUxMKXxnJyBcCisJICAgICAgPCAkKHNyY2Rpcikvc3RkZGVmLmluLmg7IFwKKwl9ID4gJEAtdCAmJiBcCisJbXYgJEAtdCAkQAorZWxzZQorc3RkZGVmLmg6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJcm0gLWYgJEAKK2VuZGlmCitNT1NUTFlDTEVBTkZJTEVTICs9IHN0ZGRlZi5oIHN0ZGRlZi5oLXQKKworRVhUUkFfRElTVCArPSBzdGRkZWYuaW4uaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHN0ZGRlZgorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHN0ZGludAorCitCVUlMVF9TT1VSQ0VTICs9ICQoU1RESU5UX0gpCisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8c3RkaW50Lmg+IHdoZW4gdGhlIHN5c3RlbQorIyBkb2Vzbid0IGhhdmUgb25lIHRoYXQgd29ya3Mgd2l0aCB0aGUgZ2l2ZW4gY29tcGlsZXIuCitpZiBHTF9HRU5FUkFURV9TVERJTlRfSAorc3RkaW50Lmg6IHN0ZGludC5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKwl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCisJICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX1NURElOVF9IJydALyQoSEFWRV9TVERJTlRfSCkvZycgXAorCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorCSAgICAgIC1lICdzfEAnJ05FWFRfU1RESU5UX0gnJ0B8JChORVhUX1NURElOVF9IKXxnJyBcCisJICAgICAgLWUgJ3MvQCcnSEFWRV9TWVNfVFlQRVNfSCcnQC8kKEhBVkVfU1lTX1RZUEVTX0gpL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX0lOVFRZUEVTX0gnJ0AvJChIQVZFX0lOVFRZUEVTX0gpL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX1NZU19JTlRUWVBFU19IJydALyQoSEFWRV9TWVNfSU5UVFlQRVNfSCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0hBVkVfU1lTX0JJVFlQRVNfSCcnQC8kKEhBVkVfU1lTX0JJVFlQRVNfSCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0hBVkVfV0NIQVJfSCcnQC8kKEhBVkVfV0NIQVJfSCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0hBVkVfTE9OR19MT05HX0lOVCcnQC8kKEhBVkVfTE9OR19MT05HX0lOVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0hBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCcnQC8kKEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0FQUExFX1VOSVZFUlNBTF9CVUlMRCcnQC8kKEFQUExFX1VOSVZFUlNBTF9CVUlMRCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0JJVFNJWkVPRl9QVFJESUZGX1QnJ0AvJChCSVRTSVpFT0ZfUFRSRElGRl9UKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnUFRSRElGRl9UX1NVRkZJWCcnQC8kKFBUUkRJRkZfVF9TVUZGSVgpL2cnIFwKKwkgICAgICAtZSAncy9AJydCSVRTSVpFT0ZfU0lHX0FUT01JQ19UJydALyQoQklUU0laRU9GX1NJR19BVE9NSUNfVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0hBVkVfU0lHTkVEX1NJR19BVE9NSUNfVCcnQC8kKEhBVkVfU0lHTkVEX1NJR19BVE9NSUNfVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ1NJR19BVE9NSUNfVF9TVUZGSVgnJ0AvJChTSUdfQVRPTUlDX1RfU1VGRklYKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnQklUU0laRU9GX1NJWkVfVCcnQC8kKEJJVFNJWkVPRl9TSVpFX1QpL2cnIFwKKwkgICAgICAtZSAncy9AJydTSVpFX1RfU1VGRklYJydALyQoU0laRV9UX1NVRkZJWCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0JJVFNJWkVPRl9XQ0hBUl9UJydALyQoQklUU0laRU9GX1dDSEFSX1QpL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX1NJR05FRF9XQ0hBUl9UJydALyQoSEFWRV9TSUdORURfV0NIQVJfVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ1dDSEFSX1RfU1VGRklYJydALyQoV0NIQVJfVF9TVUZGSVgpL2cnIFwKKwkgICAgICAtZSAncy9AJydCSVRTSVpFT0ZfV0lOVF9UJydALyQoQklUU0laRU9GX1dJTlRfVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0hBVkVfU0lHTkVEX1dJTlRfVCcnQC8kKEhBVkVfU0lHTkVEX1dJTlRfVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ1dJTlRfVF9TVUZGSVgnJ0AvJChXSU5UX1RfU1VGRklYKS9nJyBcCisJICAgICAgPCAkKHNyY2Rpcikvc3RkaW50LmluLmg7IFwKKwl9ID4gJEAtdCAmJiBcCisJbXYgJEAtdCAkQAorZWxzZQorc3RkaW50Lmg6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJcm0gLWYgJEAKK2VuZGlmCitNT1NUTFlDTEVBTkZJTEVTICs9IHN0ZGludC5oIHN0ZGludC5oLXQKKworRVhUUkFfRElTVCArPSBzdGRpbnQuaW4uaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHN0ZGludAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHN0ZGlvCisKK0JVSUxUX1NPVVJDRVMgKz0gc3RkaW8uaAorbGliYmlzb25fYV9TT1VSQ0VTICs9IHN0ZGlvLmMKKworIyBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIgdG8gY3JlYXRlIDxzdGRpby5oPiB3aGVuIHRoZSBzeXN0ZW0KKyMgZG9lc24ndCBoYXZlIG9uZSB0aGF0IHdvcmtzIHdpdGggdGhlIGdpdmVuIGNvbXBpbGVyLgorc3RkaW8uaDogc3RkaW8uaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKENYWERFRlNfSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCisJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKwl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKKwkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorCSAgICAgIC1lICdzfEAnJ05FWFRfU1RESU9fSCcnQHwkKE5FWFRfU1RESU9fSCl8ZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9EUFJJTlRGJydALyQoR05VTElCX0RQUklOVEYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRkNMT1NFJydALyQoR05VTElCX0ZDTE9TRSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GRE9QRU4nJ0AvJChHTlVMSUJfRkRPUEVOKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0ZGTFVTSCcnQC8kKEdOVUxJQl9GRkxVU0gpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRkdFVEMnJ0AvJChHTlVMSUJfRkdFVEMpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRkdFVFMnJ0AvJChHTlVMSUJfRkdFVFMpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRk9QRU4nJ0AvJChHTlVMSUJfRk9QRU4pL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRlBSSU5URicnQC8kKEdOVUxJQl9GUFJJTlRGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0ZQUklOVEZfUE9TSVgnJ0AvJChHTlVMSUJfRlBSSU5URl9QT1NJWCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GUFVSR0UnJ0AvJChHTlVMSUJfRlBVUkdFKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0ZQVVRDJydALyQoR05VTElCX0ZQVVRDKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0ZQVVRTJydALyQoR05VTElCX0ZQVVRTKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0ZSRUFEJydALyQoR05VTElCX0ZSRUFEKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0ZSRU9QRU4nJ0AvJChHTlVMSUJfRlJFT1BFTikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GU0NBTkYnJ0AvJChHTlVMSUJfRlNDQU5GKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0ZTRUVLJydALyQoR05VTElCX0ZTRUVLKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0ZTRUVLTycnQC8kKEdOVUxJQl9GU0VFS08pL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRlRFTEwnJ0AvJChHTlVMSUJfRlRFTEwpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRlRFTExPJydALyQoR05VTElCX0ZURUxMTykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GV1JJVEUnJ0AvJChHTlVMSUJfRldSSVRFKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVEMnJ0AvJChHTlVMSUJfR0VUQykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRDSEFSJydALyQoR05VTElCX0dFVENIQVIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUREVMSU0nJ0AvJChHTlVMSUJfR0VUREVMSU0pL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUTElORScnQC8kKEdOVUxJQl9HRVRMSU5FKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX09CU1RBQ0tfUFJJTlRGJydALyQoR05VTElCX09CU1RBQ0tfUFJJTlRGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX09CU1RBQ0tfUFJJTlRGX1BPU0lYJydALyQoR05VTElCX09CU1RBQ0tfUFJJTlRGX1BPU0lYKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BDTE9TRScnQC8kKEdOVUxJQl9QQ0xPU0UpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUEVSUk9SJydALyQoR05VTElCX1BFUlJPUikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QT1BFTicnQC8kKEdOVUxJQl9QT1BFTikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QUklOVEYnJ0AvJChHTlVMSUJfUFJJTlRGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BSSU5URl9QT1NJWCcnQC8kKEdOVUxJQl9QUklOVEZfUE9TSVgpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUFVUQycnQC8kKEdOVUxJQl9QVVRDKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BVVENIQVInJ0AvJChHTlVMSUJfUFVUQ0hBUikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QVVRTJydALyQoR05VTElCX1BVVFMpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUkVNT1ZFJydALyQoR05VTElCX1JFTU9WRSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRU5BTUUnJ0AvJChHTlVMSUJfUkVOQU1FKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1JFTkFNRUFUJydALyQoR05VTElCX1JFTkFNRUFUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NDQU5GJydALyQoR05VTElCX1NDQU5GKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NOUFJJTlRGJydALyQoR05VTElCX1NOUFJJTlRGKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NQUklOVEZfUE9TSVgnJ0AvJChHTlVMSUJfU1BSSU5URl9QT1NJWCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HJydALyQoR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkcpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU1RESU9fSF9TSUdQSVBFJydALyQoR05VTElCX1NURElPX0hfU0lHUElQRSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9UTVBGSUxFJydALyQoR05VTElCX1RNUEZJTEUpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfVkFTUFJJTlRGJydALyQoR05VTElCX1ZBU1BSSU5URikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WRFBSSU5URicnQC8kKEdOVUxJQl9WRFBSSU5URikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WRlBSSU5URicnQC8kKEdOVUxJQl9WRlBSSU5URikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WRlBSSU5URl9QT1NJWCcnQC8kKEdOVUxJQl9WRlBSSU5URl9QT1NJWCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WRlNDQU5GJydALyQoR05VTElCX1ZGU0NBTkYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfVlNDQU5GJydALyQoR05VTElCX1ZTQ0FORikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WUFJJTlRGJydALyQoR05VTElCX1ZQUklOVEYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfVlBSSU5URl9QT1NJWCcnQC8kKEdOVUxJQl9WUFJJTlRGX1BPU0lYKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1ZTTlBSSU5URicnQC8kKEdOVUxJQl9WU05QUklOVEYpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfVlNQUklOVEZfUE9TSVgnJ0AvJChHTlVMSUJfVlNQUklOVEZfUE9TSVgpL2cnIFwKKwkgICAgICA8ICQoc3JjZGlyKS9zdGRpby5pbi5oIHwgXAorCSAgc2VkIC1lICdzfEAnJ0hBVkVfREVDTF9GUFVSR0UnJ0B8JChIQVZFX0RFQ0xfRlBVUkdFKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0ZTRUVLTycnQHwkKEhBVkVfREVDTF9GU0VFS08pfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfRlRFTExPJydAfCQoSEFWRV9ERUNMX0ZURUxMTyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9HRVRERUxJTScnQHwkKEhBVkVfREVDTF9HRVRERUxJTSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9HRVRMSU5FJydAfCQoSEFWRV9ERUNMX0dFVExJTkUpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfT0JTVEFDS19QUklOVEYnJ0B8JChIQVZFX0RFQ0xfT0JTVEFDS19QUklOVEYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfU05QUklOVEYnJ0B8JChIQVZFX0RFQ0xfU05QUklOVEYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfVlNOUFJJTlRGJydAfCQoSEFWRV9ERUNMX1ZTTlBSSU5URil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRFBSSU5URicnQHwkKEhBVkVfRFBSSU5URil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRlNFRUtPJydAfCQoSEFWRV9GU0VFS08pfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0ZURUxMTycnQHwkKEhBVkVfRlRFTExPKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9QQ0xPU0UnJ0B8JChIQVZFX1BDTE9TRSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfUE9QRU4nJ0B8JChIQVZFX1BPUEVOKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9SRU5BTUVBVCcnQHwkKEhBVkVfUkVOQU1FQVQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1ZBU1BSSU5URicnQHwkKEhBVkVfVkFTUFJJTlRGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9WRFBSSU5URicnQHwkKEhBVkVfVkRQUklOVEYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0RQUklOVEYnJ0B8JChSRVBMQUNFX0RQUklOVEYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0ZDTE9TRScnQHwkKFJFUExBQ0VfRkNMT1NFKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9GRE9QRU4nJ0B8JChSRVBMQUNFX0ZET1BFTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRkZMVVNIJydAfCQoUkVQTEFDRV9GRkxVU0gpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0ZPUEVOJydAfCQoUkVQTEFDRV9GT1BFTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRlBSSU5URicnQHwkKFJFUExBQ0VfRlBSSU5URil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRlBVUkdFJydAfCQoUkVQTEFDRV9GUFVSR0UpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0ZSRU9QRU4nJ0B8JChSRVBMQUNFX0ZSRU9QRU4pfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0ZTRUVLJydAfCQoUkVQTEFDRV9GU0VFSyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRlNFRUtPJydAfCQoUkVQTEFDRV9GU0VFS08pfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0ZURUxMJydAfCQoUkVQTEFDRV9GVEVMTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRlRFTExPJydAfCQoUkVQTEFDRV9GVEVMTE8pfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0dFVERFTElNJydAfCQoUkVQTEFDRV9HRVRERUxJTSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfR0VUTElORScnQHwkKFJFUExBQ0VfR0VUTElORSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfT0JTVEFDS19QUklOVEYnJ0B8JChSRVBMQUNFX09CU1RBQ0tfUFJJTlRGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9QRVJST1InJ0B8JChSRVBMQUNFX1BFUlJPUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfUE9QRU4nJ0B8JChSRVBMQUNFX1BPUEVOKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9QUklOVEYnJ0B8JChSRVBMQUNFX1BSSU5URil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfUkVNT1ZFJydAfCQoUkVQTEFDRV9SRU1PVkUpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1JFTkFNRScnQHwkKFJFUExBQ0VfUkVOQU1FKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9SRU5BTUVBVCcnQHwkKFJFUExBQ0VfUkVOQU1FQVQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1NOUFJJTlRGJydAfCQoUkVQTEFDRV9TTlBSSU5URil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfU1BSSU5URicnQHwkKFJFUExBQ0VfU1BSSU5URil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfU1RESU9fUkVBRF9GVU5DUycnQHwkKFJFUExBQ0VfU1RESU9fUkVBRF9GVU5DUyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfU1RESU9fV1JJVEVfRlVOQ1MnJ0B8JChSRVBMQUNFX1NURElPX1dSSVRFX0ZVTkNTKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9UTVBGSUxFJydAfCQoUkVQTEFDRV9UTVBGSUxFKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9WQVNQUklOVEYnJ0B8JChSRVBMQUNFX1ZBU1BSSU5URil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfVkRQUklOVEYnJ0B8JChSRVBMQUNFX1ZEUFJJTlRGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9WRlBSSU5URicnQHwkKFJFUExBQ0VfVkZQUklOVEYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1ZQUklOVEYnJ0B8JChSRVBMQUNFX1ZQUklOVEYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1ZTTlBSSU5URicnQHwkKFJFUExBQ0VfVlNOUFJJTlRGKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9WU1BSSU5URicnQHwkKFJFUExBQ0VfVlNQUklOVEYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydBU01fU1lNQk9MX1BSRUZJWCcnQHwkKEFTTV9TWU1CT0xfUFJFRklYKXxnJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBML3IgJChDWFhERUZTX0gpJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVMTC9yICQoQVJHX05PTk5VTExfSCknIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFL3IgJChXQVJOX09OX1VTRV9IKSc7IFwKKwl9ID4gJEAtdCAmJiBcCisJbXYgJEAtdCAkQAorTU9TVExZQ0xFQU5GSUxFUyArPSBzdGRpby5oIHN0ZGlvLmgtdAorCitFWFRSQV9ESVNUICs9IHN0ZGlvLmluLmgKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBzdGRpbworCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHN0ZGxpYgorCitCVUlMVF9TT1VSQ0VTICs9IHN0ZGxpYi5oCisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8c3RkbGliLmg+IHdoZW4gdGhlIHN5c3RlbQorIyBkb2Vzbid0IGhhdmUgb25lIHRoYXQgd29ya3Mgd2l0aCB0aGUgZ2l2ZW4gY29tcGlsZXIuCitzdGRsaWIuaDogc3RkbGliLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpIFwKKyAgJChfTk9SRVRVUk5fSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCisJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKwl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKKwkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorCSAgICAgIC1lICdzfEAnJ05FWFRfU1RETElCX0gnJ0B8JChORVhUX1NURExJQl9IKXxnJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX19FWElUJydALyQoR05VTElCX19FWElUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0FUT0xMJydALyQoR05VTElCX0FUT0xMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0NBTExPQ19QT1NJWCcnQC8kKEdOVUxJQl9DQUxMT0NfUE9TSVgpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRScnQC8kKEdOVUxJQl9DQU5PTklDQUxJWkVfRklMRV9OQU1FKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVExPQURBVkcnJ0AvJChHTlVMSUJfR0VUTE9BREFWRykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRTVUJPUFQnJ0AvJChHTlVMSUJfR0VUU1VCT1BUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0dSQU5UUFQnJ0AvJChHTlVMSUJfR1JBTlRQVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQUxMT0NfUE9TSVgnJ0AvJChHTlVMSUJfTUFMTE9DX1BPU0lYKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01CVE9XQycnQC8kKEdOVUxJQl9NQlRPV0MpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUtEVEVNUCcnQC8kKEdOVUxJQl9NS0RURU1QKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01LT1NURU1QJydALyQoR05VTElCX01LT1NURU1QKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01LT1NURU1QUycnQC8kKEdOVUxJQl9NS09TVEVNUFMpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUtTVEVNUCcnQC8kKEdOVUxJQl9NS1NURU1QKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01LU1RFTVBTJydALyQoR05VTElCX01LU1RFTVBTKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BPU0lYX09QRU5QVCcnQC8kKEdOVUxJQl9QT1NJWF9PUEVOUFQpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUFRTTkFNRScnQC8kKEdOVUxJQl9QVFNOQU1FKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1BUU05BTUVfUicnQC8kKEdOVUxJQl9QVFNOQU1FX1IpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUFVURU5WJydALyQoR05VTElCX1BVVEVOVikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SQU5ET00nJ0AvJChHTlVMSUJfUkFORE9NKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1JBTkRPTV9SJydALyQoR05VTElCX1JBTkRPTV9SKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1JFQUxMT0NfUE9TSVgnJ0AvJChHTlVMSUJfUkVBTExPQ19QT1NJWCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRUFMUEFUSCcnQC8kKEdOVUxJQl9SRUFMUEFUSCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SUE1BVENIJydALyQoR05VTElCX1JQTUFUQ0gpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU0VURU5WJydALyQoR05VTElCX1NFVEVOVikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJUT0QnJ0AvJChHTlVMSUJfU1RSVE9EKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlRPTEwnJ0AvJChHTlVMSUJfU1RSVE9MTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJUT1VMTCcnQC8kKEdOVUxJQl9TVFJUT1VMTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TWVNURU1fUE9TSVgnJ0AvJChHTlVMSUJfU1lTVEVNX1BPU0lYKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1VOTE9DS1BUJydALyQoR05VTElCX1VOTE9DS1BUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1VOU0VURU5WJydALyQoR05VTElCX1VOU0VURU5WKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dDVE9NQicnQC8kKEdOVUxJQl9XQ1RPTUIpL2cnIFwKKwkgICAgICA8ICQoc3JjZGlyKS9zdGRsaWIuaW4uaCB8IFwKKwkgIHNlZCAtZSAnc3xAJydIQVZFX19FWElUJydAfCQoSEFWRV9fRVhJVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfQVRPTEwnJ0B8JChIQVZFX0FUT0xMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FJydAfCQoSEFWRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0dFVExPQURBVkcnJ0B8JChIQVZFX0RFQ0xfR0VUTE9BREFWRyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfR0VUU1VCT1BUJydAfCQoSEFWRV9HRVRTVUJPUFQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0dSQU5UUFQnJ0B8JChIQVZFX0dSQU5UUFQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX01LRFRFTVAnJ0B8JChIQVZFX01LRFRFTVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX01LT1NURU1QJydAfCQoSEFWRV9NS09TVEVNUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTUtPU1RFTVBTJydAfCQoSEFWRV9NS09TVEVNUFMpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX01LU1RFTVAnJ0B8JChIQVZFX01LU1RFTVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX01LU1RFTVBTJydAfCQoSEFWRV9NS1NURU1QUyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfUE9TSVhfT1BFTlBUJydAfCQoSEFWRV9QT1NJWF9PUEVOUFQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1BUU05BTUUnJ0B8JChIQVZFX1BUU05BTUUpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1BUU05BTUVfUicnQHwkKEhBVkVfUFRTTkFNRV9SKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9SQU5ET00nJ0B8JChIQVZFX1JBTkRPTSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfUkFORE9NX0gnJ0B8JChIQVZFX1JBTkRPTV9IKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9SQU5ET01fUicnQHwkKEhBVkVfUkFORE9NX1IpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1JFQUxQQVRIJydAfCQoSEFWRV9SRUFMUEFUSCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfUlBNQVRDSCcnQHwkKEhBVkVfUlBNQVRDSCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9TRVRFTlYnJ0B8JChIQVZFX0RFQ0xfU0VURU5WKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFJUT0QnJ0B8JChIQVZFX1NUUlRPRCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RSVE9MTCcnQHwkKEhBVkVfU1RSVE9MTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RSVE9VTEwnJ0B8JChIQVZFX1NUUlRPVUxMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFJVQ1RfUkFORE9NX0RBVEEnJ0B8JChIQVZFX1NUUlVDVF9SQU5ET01fREFUQSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1lTX0xPQURBVkdfSCcnQHwkKEhBVkVfU1lTX0xPQURBVkdfSCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfVU5MT0NLUFQnJ0B8JChIQVZFX1VOTE9DS1BUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX1VOU0VURU5WJydAfCQoSEFWRV9ERUNMX1VOU0VURU5WKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9DQUxMT0MnJ0B8JChSRVBMQUNFX0NBTExPQyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRScnQHwkKFJFUExBQ0VfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTUFMTE9DJydAfCQoUkVQTEFDRV9NQUxMT0MpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX01CVE9XQycnQHwkKFJFUExBQ0VfTUJUT1dDKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9NS1NURU1QJydAfCQoUkVQTEFDRV9NS1NURU1QKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9QVFNOQU1FJydAfCQoUkVQTEFDRV9QVFNOQU1FKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9QVFNOQU1FX1InJ0B8JChSRVBMQUNFX1BUU05BTUVfUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfUFVURU5WJydAfCQoUkVQTEFDRV9QVVRFTlYpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1JBTkRPTV9SJydAfCQoUkVQTEFDRV9SQU5ET01fUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfUkVBTExPQycnQHwkKFJFUExBQ0VfUkVBTExPQyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfUkVBTFBBVEgnJ0B8JChSRVBMQUNFX1JFQUxQQVRIKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9TRVRFTlYnJ0B8JChSRVBMQUNFX1NFVEVOVil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfU1RSVE9EJydAfCQoUkVQTEFDRV9TVFJUT0QpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1VOU0VURU5WJydAfCQoUkVQTEFDRV9VTlNFVEVOVil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfV0NUT01CJydAfCQoUkVQTEFDRV9XQ1RPTUIpfGcnIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwvciAkKENYWERFRlNfSCknIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX05vcmV0dXJuL3IgJChfTk9SRVRVUk5fSCknIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxML3IgJChBUkdfTk9OTlVMTF9IKScgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UvciAkKFdBUk5fT05fVVNFX0gpJzsgXAorCX0gPiAkQC10ICYmIFwKKwltdiAkQC10ICRACitNT1NUTFlDTEVBTkZJTEVTICs9IHN0ZGxpYi5oIHN0ZGxpYi5oLXQKKworRVhUUkFfRElTVCArPSBzdGRsaWIuaW4uaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHN0ZGxpYgorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHN0cGNweQogCiAKK0VYVFJBX0RJU1QgKz0gc3RwY3B5LmMKKworRVhUUkFfbGliYmlzb25fYV9TT1VSQ0VTICs9IHN0cGNweS5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc3RwY3B5CisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc3RyY2hybnVsCiAKIAorRVhUUkFfRElTVCArPSBzdHJjaHJudWwuYyBzdHJjaHJudWwudmFsZ3JpbmQKKworRVhUUkFfbGliYmlzb25fYV9TT1VSQ0VTICs9IHN0cmNocm51bC5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc3RyY2hybnVsCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc3RyZHVwLXBvc2l4CiAKIAorRVhUUkFfRElTVCArPSBzdHJkdXAuYworCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0gc3RyZHVwLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBzdHJkdXAtcG9zaXgKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzdHJlcQogCiAKLUJVSUxUX1NPVVJDRVMgKz0gJChVTklTVERfSCkKK0VYVFJBX0RJU1QgKz0gc3RyZXEuaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHN0cmVxCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc3RyZXJyb3IKKworCitFWFRSQV9ESVNUICs9IHN0cmVycm9yLmMKKworRVhUUkFfbGliYmlzb25fYV9TT1VSQ0VTICs9IHN0cmVycm9yLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBzdHJlcnJvcgorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHN0cmVycm9yLW92ZXJyaWRlCisKKworRVhUUkFfRElTVCArPSBzdHJlcnJvci1vdmVycmlkZS5jIHN0cmVycm9yLW92ZXJyaWRlLmgKKworRVhUUkFfbGliYmlzb25fYV9TT1VSQ0VTICs9IHN0cmVycm9yLW92ZXJyaWRlLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBzdHJlcnJvci1vdmVycmlkZQorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHN0cmVycm9yX3ItcG9zaXgKKworCitFWFRSQV9ESVNUICs9IHN0cmVycm9yX3IuYworCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0gc3RyZXJyb3Jfci5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc3RyZXJyb3Jfci1wb3NpeAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHN0cmluZworCitCVUlMVF9TT1VSQ0VTICs9IHN0cmluZy5oCisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8c3RyaW5nLmg+IHdoZW4gdGhlIHN5c3RlbQorIyBkb2Vzbid0IGhhdmUgb25lIHRoYXQgd29ya3Mgd2l0aCB0aGUgZ2l2ZW4gY29tcGlsZXIuCitzdHJpbmcuaDogc3RyaW5nLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJyAmJiBcCisJICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKwkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKwkgICAgICAtZSAnc3xAJydORVhUX1NUUklOR19IJydAfCQoTkVYVF9TVFJJTkdfSCl8ZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GRlNMJydALyQoR05VTElCX0ZGU0wpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRkZTTEwnJ0AvJChHTlVMSUJfRkZTTEwpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTTEVOJydALyQoR05VTElCX01CU0xFTikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNOTEVOJydALyQoR05VTElCX01CU05MRU4pL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTQ0hSJydALyQoR05VTElCX01CU0NIUikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNSQ0hSJydALyQoR05VTElCX01CU1JDSFIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTU1RSJydALyQoR05VTElCX01CU1NUUikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNDQVNFQ01QJydALyQoR05VTElCX01CU0NBU0VDTVApL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTTkNBU0VDTVAnJ0AvJChHTlVMSUJfTUJTTkNBU0VDTVApL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTUENBU0VDTVAnJ0AvJChHTlVMSUJfTUJTUENBU0VDTVApL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTQ0FTRVNUUicnQC8kKEdOVUxJQl9NQlNDQVNFU1RSKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01CU0NTUE4nJ0AvJChHTlVMSUJfTUJTQ1NQTikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNQQlJLJydALyQoR05VTElCX01CU1BCUkspL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTU1BOJydALyQoR05VTElCX01CU1NQTikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNTRVAnJ0AvJChHTlVMSUJfTUJTU0VQKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01CU1RPS19SJydALyQoR05VTElCX01CU1RPS19SKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01FTUNIUicnQC8kKEdOVUxJQl9NRU1DSFIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUVNTUVNJydALyQoR05VTElCX01FTU1FTSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NRU1QQ1BZJydALyQoR05VTElCX01FTVBDUFkpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUVNUkNIUicnQC8kKEdOVUxJQl9NRU1SQ0hSKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1JBV01FTUNIUicnQC8kKEdOVUxJQl9SQVdNRU1DSFIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU1RQQ1BZJydALyQoR05VTElCX1NUUENQWSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFBOQ1BZJydALyQoR05VTElCX1NUUE5DUFkpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSQ0hSTlVMJydALyQoR05VTElCX1NUUkNIUk5VTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJEVVAnJ0AvJChHTlVMSUJfU1RSRFVQKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUk5DQVQnJ0AvJChHTlVMSUJfU1RSTkNBVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJORFVQJydALyQoR05VTElCX1NUUk5EVVApL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSTkxFTicnQC8kKEdOVUxJQl9TVFJOTEVOKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlBCUksnJ0AvJChHTlVMSUJfU1RSUEJSSykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJTRVAnJ0AvJChHTlVMSUJfU1RSU0VQKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlNUUicnQC8kKEdOVUxJQl9TVFJTVFIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSQ0FTRVNUUicnQC8kKEdOVUxJQl9TVFJDQVNFU1RSKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlRPS19SJydALyQoR05VTElCX1NUUlRPS19SKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUkVSUk9SJydALyQoR05VTElCX1NUUkVSUk9SKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUkVSUk9SX1InJ0AvJChHTlVMSUJfU1RSRVJST1JfUikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJTSUdOQUwnJ0AvJChHTlVMSUJfU1RSU0lHTkFMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlZFUlNDTVAnJ0AvJChHTlVMSUJfU1RSVkVSU0NNUCkvZycgXAorCSAgICAgIDwgJChzcmNkaXIpL3N0cmluZy5pbi5oIHwgXAorCSAgc2VkIC1lICdzfEAnJ0hBVkVfRkZTTCcnQHwkKEhBVkVfRkZTTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRkZTTEwnJ0B8JChIQVZFX0ZGU0xMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9NQlNMRU4nJ0B8JChIQVZFX01CU0xFTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTUVNQ0hSJydAfCQoSEFWRV9NRU1DSFIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfTUVNTUVNJydAfCQoSEFWRV9ERUNMX01FTU1FTSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTUVNUENQWScnQHwkKEhBVkVfTUVNUENQWSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9NRU1SQ0hSJydAfCQoSEFWRV9ERUNMX01FTVJDSFIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1JBV01FTUNIUicnQHwkKEhBVkVfUkFXTUVNQ0hSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFBDUFknJ0B8JChIQVZFX1NUUENQWSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RQTkNQWScnQHwkKEhBVkVfU1RQTkNQWSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RSQ0hSTlVMJydAfCQoSEFWRV9TVFJDSFJOVUwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfU1RSRFVQJydAfCQoSEFWRV9ERUNMX1NUUkRVUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9TVFJORFVQJydAfCQoSEFWRV9ERUNMX1NUUk5EVVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfU1RSTkxFTicnQHwkKEhBVkVfREVDTF9TVFJOTEVOKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFJQQlJLJydAfCQoSEFWRV9TVFJQQlJLKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFJTRVAnJ0B8JChIQVZFX1NUUlNFUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RSQ0FTRVNUUicnQHwkKEhBVkVfU1RSQ0FTRVNUUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9TVFJUT0tfUicnQHwkKEhBVkVfREVDTF9TVFJUT0tfUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9TVFJFUlJPUl9SJydAfCQoSEFWRV9ERUNMX1NUUkVSUk9SX1IpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfU1RSU0lHTkFMJydAfCQoSEFWRV9ERUNMX1NUUlNJR05BTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RSVkVSU0NNUCcnQHwkKEhBVkVfU1RSVkVSU0NNUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfU1RQTkNQWScnQHwkKFJFUExBQ0VfU1RQTkNQWSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTUVNQ0hSJydAfCQoUkVQTEFDRV9NRU1DSFIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX01FTU1FTScnQHwkKFJFUExBQ0VfTUVNTUVNKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9TVFJDQVNFU1RSJydAfCQoUkVQTEFDRV9TVFJDQVNFU1RSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9TVFJDSFJOVUwnJ0B8JChSRVBMQUNFX1NUUkNIUk5VTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfU1RSRFVQJydAfCQoUkVQTEFDRV9TVFJEVVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1NUUlNUUicnQHwkKFJFUExBQ0VfU1RSU1RSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9TVFJFUlJPUicnQHwkKFJFUExBQ0VfU1RSRVJST1IpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1NUUkVSUk9SX1InJ0B8JChSRVBMQUNFX1NUUkVSUk9SX1IpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1NUUk5DQVQnJ0B8JChSRVBMQUNFX1NUUk5DQVQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1NUUk5EVVAnJ0B8JChSRVBMQUNFX1NUUk5EVVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1NUUk5MRU4nJ0B8JChSRVBMQUNFX1NUUk5MRU4pfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1NUUlNJR05BTCcnQHwkKFJFUExBQ0VfU1RSU0lHTkFMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9TVFJUT0tfUicnQHwkKFJFUExBQ0VfU1RSVE9LX1IpfGcnIFwKKwkgICAgICAtZSAnc3xAJydVTkRFRklORV9TVFJUT0tfUicnQHwkKFVOREVGSU5FX1NUUlRPS19SKXxnJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBML3IgJChDWFhERUZTX0gpJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVMTC9yICQoQVJHX05PTk5VTExfSCknIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFL3IgJChXQVJOX09OX1VTRV9IKSc7IFwKKwkgICAgICA8ICQoc3JjZGlyKS9zdHJpbmcuaW4uaDsgXAorCX0gPiAkQC10ICYmIFwKKwltdiAkQC10ICRACitNT1NUTFlDTEVBTkZJTEVTICs9IHN0cmluZy5oIHN0cmluZy5oLXQKKworRVhUUkFfRElTVCArPSBzdHJpbmcuaW4uaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHN0cmluZworCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHN0cm5kdXAKKworCitFWFRSQV9ESVNUICs9IHN0cm5kdXAuYworCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0gc3RybmR1cC5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc3RybmR1cAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHN0cm5sZW4KKworCitFWFRSQV9ESVNUICs9IHN0cm5sZW4uYworCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0gc3Rybmxlbi5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc3RybmxlbgorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHN0cm5sZW4xCisKK2xpYmJpc29uX2FfU09VUkNFUyArPSBzdHJubGVuMS5oIHN0cm5sZW4xLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBzdHJubGVuMQorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHN0cnRvdWwKKworCitFWFRSQV9ESVNUICs9IHN0cnRvbC5jIHN0cnRvdWwuYworCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0gc3RydG9sLmMgc3RydG91bC5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc3RydG91bAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHN0cnZlcnNjbXAKKworCitFWFRSQV9ESVNUICs9IHN0cnZlcnNjbXAuYworCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0gc3RydmVyc2NtcC5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc3RydmVyc2NtcAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHN5c19zdGF0CisKK0JVSUxUX1NPVVJDRVMgKz0gc3lzL3N0YXQuaAorCisjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBjcmVhdGUgPHN5cy9zdGF0Lmg+IHdoZW4gdGhlIHN5c3RlbQorIyBoYXMgb25lIHRoYXQgaXMgaW5jb21wbGV0ZS4KK3N5cy9zdGF0Lmg6IHN5c19zdGF0LmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorCSQoQU1fVl9hdCkkKE1LRElSX1ApIHN5cworCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJzsgXAorCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCisJICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnTkVYVF9TWVNfU1RBVF9IJydAfCQoTkVYVF9TWVNfU1RBVF9IKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnV0lORE9XU182NF9CSVRfU1RfU0laRScnQHwkKFdJTkRPV1NfNjRfQklUX1NUX1NJWkUpfGcnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRkNITU9EQVQnJ0AvJChHTlVMSUJfRkNITU9EQVQpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRlNUQVQnJ0AvJChHTlVMSUJfRlNUQVQpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRlNUQVRBVCcnQC8kKEdOVUxJQl9GU1RBVEFUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0ZVVElNRU5TJydALyQoR05VTElCX0ZVVElNRU5TKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0xDSE1PRCcnQC8kKEdOVUxJQl9MQ0hNT0QpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTFNUQVQnJ0AvJChHTlVMSUJfTFNUQVQpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUtESVJBVCcnQC8kKEdOVUxJQl9NS0RJUkFUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01LRklGTycnQC8kKEdOVUxJQl9NS0ZJRk8pL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUtGSUZPQVQnJ0AvJChHTlVMSUJfTUtGSUZPQVQpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUtOT0QnJ0AvJChHTlVMSUJfTUtOT0QpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUtOT0RBVCcnQC8kKEdOVUxJQl9NS05PREFUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUQVQnJ0AvJChHTlVMSUJfU1RBVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9VVElNRU5TQVQnJ0AvJChHTlVMSUJfVVRJTUVOU0FUKS9nJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9GQ0hNT0RBVCcnQHwkKEhBVkVfRkNITU9EQVQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0ZTVEFUQVQnJ0B8JChIQVZFX0ZTVEFUQVQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0ZVVElNRU5TJydAfCQoSEFWRV9GVVRJTUVOUyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTENITU9EJydAfCQoSEFWRV9MQ0hNT0QpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0xTVEFUJydAfCQoSEFWRV9MU1RBVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTUtESVJBVCcnQHwkKEhBVkVfTUtESVJBVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTUtGSUZPJydAfCQoSEFWRV9NS0ZJRk8pfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX01LRklGT0FUJydAfCQoSEFWRV9NS0ZJRk9BVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTUtOT0QnJ0B8JChIQVZFX01LTk9EKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9NS05PREFUJydAfCQoSEFWRV9NS05PREFUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9VVElNRU5TQVQnJ0B8JChIQVZFX1VUSU1FTlNBVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRlNUQVQnJ0B8JChSRVBMQUNFX0ZTVEFUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9GU1RBVEFUJydAfCQoUkVQTEFDRV9GU1RBVEFUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9GVVRJTUVOUycnQHwkKFJFUExBQ0VfRlVUSU1FTlMpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0xTVEFUJydAfCQoUkVQTEFDRV9MU1RBVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTUtESVInJ0B8JChSRVBMQUNFX01LRElSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9NS0ZJRk8nJ0B8JChSRVBMQUNFX01LRklGTyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTUtOT0QnJ0B8JChSRVBMQUNFX01LTk9EKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9TVEFUJydAfCQoUkVQTEFDRV9TVEFUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9VVElNRU5TQVQnJ0B8JChSRVBMQUNFX1VUSU1FTlNBVCl8ZycgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTC9yICQoQ1hYREVGU19IKScgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwvciAkKEFSR19OT05OVUxMX0gpJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRS9yICQoV0FSTl9PTl9VU0VfSCknIFwKKwkgICAgICA8ICQoc3JjZGlyKS9zeXNfc3RhdC5pbi5oOyBcCisJfSA+ICRALXQgJiYgXAorCW12ICRALXQgJEAKK01PU1RMWUNMRUFORklMRVMgKz0gc3lzL3N0YXQuaCBzeXMvc3RhdC5oLXQKK01PU1RMWUNMRUFORElSUyArPSBzeXMKKworRVhUUkFfRElTVCArPSBzeXNfc3RhdC5pbi5oCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc3lzX3N0YXQKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzeXNfdHlwZXMKKworQlVJTFRfU09VUkNFUyArPSBzeXMvdHlwZXMuaAorCisjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBjcmVhdGUgPHN5cy90eXBlcy5oPiB3aGVuIHRoZSBzeXN0ZW0KKyMgZG9lc24ndCBoYXZlIG9uZSB0aGF0IHdvcmtzIHdpdGggdGhlIGdpdmVuIGNvbXBpbGVyLgorc3lzL3R5cGVzLmg6IHN5c190eXBlcy5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJJChBTV9WX2F0KSQoTUtESVJfUCkgc3lzCisJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKwl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCisJICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKwkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKwkgICAgICAtZSAnc3xAJydORVhUX1NZU19UWVBFU19IJydAfCQoTkVYVF9TWVNfVFlQRVNfSCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1dJTkRPV1NfNjRfQklUX09GRl9UJydAfCQoV0lORE9XU182NF9CSVRfT0ZGX1QpfGcnIFwKKwkgICAgICA8ICQoc3JjZGlyKS9zeXNfdHlwZXMuaW4uaDsgXAorCX0gPiAkQC10ICYmIFwKKwltdiAkQC10ICRACitNT1NUTFlDTEVBTkZJTEVTICs9IHN5cy90eXBlcy5oIHN5cy90eXBlcy5oLXQKKworRVhUUkFfRElTVCArPSBzeXNfdHlwZXMuaW4uaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHN5c190eXBlcworCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHN5c193YWl0CisKK0JVSUxUX1NPVVJDRVMgKz0gc3lzL3dhaXQuaAorCisjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBjcmVhdGUgPHN5cy93YWl0Lmg+IHdoZW4gdGhlIHN5c3RlbQorIyBoYXMgb25lIHRoYXQgaXMgaW5jb21wbGV0ZS4KK3N5cy93YWl0Lmg6IHN5c193YWl0LmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoV0FSTl9PTl9VU0VfSCkKKwkkKEFNX1ZfYXQpJChNS0RJUl9QKSBzeXMKKwkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKKwkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorCSAgICAgIC1lICdzfEAnJ05FWFRfU1lTX1dBSVRfSCcnQHwkKE5FWFRfU1lTX1dBSVRfSCl8ZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XQUlUUElEJydALyQoR05VTElCX1dBSVRQSUQpL2cnIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwvciAkKENYWERFRlNfSCknIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFL3IgJChXQVJOX09OX1VTRV9IKScgXAorCSAgICAgIDwgJChzcmNkaXIpL3N5c193YWl0LmluLmg7IFwKKwl9ID4gJEAtdCAmJiBcCisJbXYgJEAtdCAkQAorTU9TVExZQ0xFQU5GSUxFUyArPSBzeXMvd2FpdC5oIHN5cy93YWl0LmgtdAorTU9TVExZQ0xFQU5ESVJTICs9IHN5cworCitFWFRSQV9ESVNUICs9IHN5c193YWl0LmluLmgKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBzeXNfd2FpdAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHRocmVhZGxpYgorCitsaWJiaXNvbl9hX1NPVVJDRVMgKz0gZ2x0aHJlYWQvdGhyZWFkbGliLmMKKworRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9jb25maWcucnBhdGgKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSB0aHJlYWRsaWIKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSB0aW1lCisKK0JVSUxUX1NPVVJDRVMgKz0gdGltZS5oCisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8dGltZS5oPiB3aGVuIHRoZSBzeXN0ZW0KKyMgZG9lc24ndCBoYXZlIG9uZSB0aGF0IHdvcmtzIHdpdGggdGhlIGdpdmVuIGNvbXBpbGVyLgordGltZS5oOiB0aW1lLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJyAmJiBcCisJICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKwkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKwkgICAgICAtZSAnc3xAJydORVhUX1RJTUVfSCcnQHwkKE5FWFRfVElNRV9IKXxnJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01LVElNRScnQC8kKEdOVUxJQl9NS1RJTUUpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTkFOT1NMRUVQJydALyQoR05VTElCX05BTk9TTEVFUCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJQVElNRScnQC8kKEdOVUxJQl9TVFJQVElNRSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9USU1FR00nJ0AvJChHTlVMSUJfVElNRUdNKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1RJTUVfUicnQC8kKEdOVUxJQl9USU1FX1IpL2cnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfTE9DQUxUSU1FX1InJ0B8JChIQVZFX0RFQ0xfTE9DQUxUSU1FX1IpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX05BTk9TTEVFUCcnQHwkKEhBVkVfTkFOT1NMRUVQKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFJQVElNRScnQHwkKEhBVkVfU1RSUFRJTUUpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1RJTUVHTScnQHwkKEhBVkVfVElNRUdNKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9MT0NBTFRJTUVfUicnQHwkKFJFUExBQ0VfTE9DQUxUSU1FX1IpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX01LVElNRScnQHwkKFJFUExBQ0VfTUtUSU1FKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9OQU5PU0xFRVAnJ0B8JChSRVBMQUNFX05BTk9TTEVFUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfVElNRUdNJydAfCQoUkVQTEFDRV9USU1FR00pfGcnIFwKKwkgICAgICAtZSAnc3xAJydQVEhSRUFEX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUMnJ0B8JChQVEhSRUFEX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUMpfGcnIFwKKwkgICAgICAtZSAnc3xAJydTWVNfVElNRV9IX0RFRklORVNfU1RSVUNUX1RJTUVTUEVDJydAfCQoU1lTX1RJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1RJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQycnQHwkKFRJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQyl8ZycgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTC9yICQoQ1hYREVGU19IKScgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwvciAkKEFSR19OT05OVUxMX0gpJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRS9yICQoV0FSTl9PTl9VU0VfSCknIFwKKwkgICAgICA8ICQoc3JjZGlyKS90aW1lLmluLmg7IFwKKwl9ID4gJEAtdCAmJiBcCisJbXYgJEAtdCAkQAorTU9TVExZQ0xFQU5GSUxFUyArPSB0aW1lLmggdGltZS5oLXQKKworRVhUUkFfRElTVCArPSB0aW1lLmluLmgKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSB0aW1lCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgdW5pc3RkCisKK0JVSUxUX1NPVVJDRVMgKz0gdW5pc3RkLmgKK2xpYmJpc29uX2FfU09VUkNFUyArPSB1bmlzdGQuYwogCiAjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBjcmVhdGUgYW4gZW1wdHkgcGxhY2Vob2xkZXIgZm9yCiAjIDx1bmlzdGQuaD4gd2hlbiB0aGUgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBvbmUuCi11bmlzdGQuaDoKLQllY2hvICcvKiBFbXB0eSBwbGFjZWhvbGRlciBmb3IgJEAuICAqLycgPiRACi1NT1NUTFlDTEVBTkZJTEVTICs9IHVuaXN0ZC5oCit1bmlzdGQuaDogdW5pc3RkLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJzsgXAorCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9VTklTVERfSCcnQHwkKEhBVkVfVU5JU1REX0gpfGcnIFwKKwkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKwkgICAgICAtZSAnc3xAJydORVhUX1VOSVNURF9IJydAfCQoTkVYVF9VTklTVERfSCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1dJTkRPV1NfNjRfQklUX09GRl9UJydAfCQoV0lORE9XU182NF9CSVRfT0ZGX1QpfGcnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfQ0hESVInJ0AvJChHTlVMSUJfQ0hESVIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfQ0hPV04nJ0AvJChHTlVMSUJfQ0hPV04pL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfQ0xPU0UnJ0AvJChHTlVMSUJfQ0xPU0UpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRFVQJydALyQoR05VTElCX0RVUCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9EVVAyJydALyQoR05VTElCX0RVUDIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRFVQMycnQC8kKEdOVUxJQl9EVVAzKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0VOVklST04nJ0AvJChHTlVMSUJfRU5WSVJPTikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9FVUlEQUNDRVNTJydALyQoR05VTElCX0VVSURBQ0NFU1MpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRkFDQ0VTU0FUJydALyQoR05VTElCX0ZBQ0NFU1NBVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GQ0hESVInJ0AvJChHTlVMSUJfRkNIRElSKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0ZDSE9XTkFUJydALyQoR05VTElCX0ZDSE9XTkFUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0ZEQVRBU1lOQycnQC8kKEdOVUxJQl9GREFUQVNZTkMpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRlNZTkMnJ0AvJChHTlVMSUJfRlNZTkMpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRlRSVU5DQVRFJydALyQoR05VTElCX0ZUUlVOQ0FURSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRDV0QnJ0AvJChHTlVMSUJfR0VUQ1dEKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVERPTUFJTk5BTUUnJ0AvJChHTlVMSUJfR0VURE9NQUlOTkFNRSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVREVEFCTEVTSVpFJydALyQoR05VTElCX0dFVERUQUJMRVNJWkUpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUR1JPVVBTJydALyQoR05VTElCX0dFVEdST1VQUykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRIT1NUTkFNRScnQC8kKEdOVUxJQl9HRVRIT1NUTkFNRSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRMT0dJTicnQC8kKEdOVUxJQl9HRVRMT0dJTikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRMT0dJTl9SJydALyQoR05VTElCX0dFVExPR0lOX1IpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUUEFHRVNJWkUnJ0AvJChHTlVMSUJfR0VUUEFHRVNJWkUpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUVVNFUlNIRUxMJydALyQoR05VTElCX0dFVFVTRVJTSEVMTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HUk9VUF9NRU1CRVInJ0AvJChHTlVMSUJfR1JPVVBfTUVNQkVSKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0lTQVRUWScnQC8kKEdOVUxJQl9JU0FUVFkpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTENIT1dOJydALyQoR05VTElCX0xDSE9XTikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MSU5LJydALyQoR05VTElCX0xJTkspL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTElOS0FUJydALyQoR05VTElCX0xJTktBVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MU0VFSycnQC8kKEdOVUxJQl9MU0VFSykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QSVBFJydALyQoR05VTElCX1BJUEUpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUElQRTInJ0AvJChHTlVMSUJfUElQRTIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUFJFQUQnJ0AvJChHTlVMSUJfUFJFQUQpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUFdSSVRFJydALyQoR05VTElCX1BXUklURSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRUFEJydALyQoR05VTElCX1JFQUQpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUkVBRExJTksnJ0AvJChHTlVMSUJfUkVBRExJTkspL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUkVBRExJTktBVCcnQC8kKEdOVUxJQl9SRUFETElOS0FUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1JNRElSJydALyQoR05VTElCX1JNRElSKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NFVEhPU1ROQU1FJydALyQoR05VTElCX1NFVEhPU1ROQU1FKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NMRUVQJydALyQoR05VTElCX1NMRUVQKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NZTUxJTksnJ0AvJChHTlVMSUJfU1lNTElOSykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TWU1MSU5LQVQnJ0AvJChHTlVMSUJfU1lNTElOS0FUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1RUWU5BTUVfUicnQC8kKEdOVUxJQl9UVFlOQU1FX1IpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfVU5JU1REX0hfR0VUT1BUJydALzAkKEdOVUxJQl9HTF9VTklTVERfSF9HRVRPUFQpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfVU5JU1REX0hfTk9OQkxPQ0tJTkcnJ0AvJChHTlVMSUJfVU5JU1REX0hfTk9OQkxPQ0tJTkcpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfVU5JU1REX0hfU0lHUElQRScnQC8kKEdOVUxJQl9VTklTVERfSF9TSUdQSVBFKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1VOTElOSycnQC8kKEdOVUxJQl9VTkxJTkspL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfVU5MSU5LQVQnJ0AvJChHTlVMSUJfVU5MSU5LQVQpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfVVNMRUVQJydALyQoR05VTElCX1VTTEVFUCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XUklURScnQC8kKEdOVUxJQl9XUklURSkvZycgXAorCSAgICAgIDwgJChzcmNkaXIpL3VuaXN0ZC5pbi5oIHwgXAorCSAgc2VkIC1lICdzfEAnJ0hBVkVfQ0hPV04nJ0B8JChIQVZFX0NIT1dOKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9EVVAyJydAfCQoSEFWRV9EVVAyKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9EVVAzJydAfCQoSEFWRV9EVVAzKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9FVUlEQUNDRVNTJydAfCQoSEFWRV9FVUlEQUNDRVNTKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9GQUNDRVNTQVQnJ0B8JChIQVZFX0ZBQ0NFU1NBVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRkNIRElSJydAfCQoSEFWRV9GQ0hESVIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0ZDSE9XTkFUJydAfCQoSEFWRV9GQ0hPV05BVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRkRBVEFTWU5DJydAfCQoSEFWRV9GREFUQVNZTkMpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0ZTWU5DJydAfCQoSEFWRV9GU1lOQyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRlRSVU5DQVRFJydAfCQoSEFWRV9GVFJVTkNBVEUpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0dFVERUQUJMRVNJWkUnJ0B8JChIQVZFX0dFVERUQUJMRVNJWkUpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0dFVEdST1VQUycnQHwkKEhBVkVfR0VUR1JPVVBTKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9HRVRIT1NUTkFNRScnQHwkKEhBVkVfR0VUSE9TVE5BTUUpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0dFVExPR0lOJydAfCQoSEFWRV9HRVRMT0dJTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfR0VUUEFHRVNJWkUnJ0B8JChIQVZFX0dFVFBBR0VTSVpFKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9HUk9VUF9NRU1CRVInJ0B8JChIQVZFX0dST1VQX01FTUJFUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTENIT1dOJydAfCQoSEFWRV9MQ0hPV04pfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0xJTksnJ0B8JChIQVZFX0xJTkspfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0xJTktBVCcnQHwkKEhBVkVfTElOS0FUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9QSVBFJydAfCQoSEFWRV9QSVBFKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9QSVBFMicnQHwkKEhBVkVfUElQRTIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1BSRUFEJydAfCQoSEFWRV9QUkVBRCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfUFdSSVRFJydAfCQoSEFWRV9QV1JJVEUpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1JFQURMSU5LJydAfCQoSEFWRV9SRUFETElOSyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfUkVBRExJTktBVCcnQHwkKEhBVkVfUkVBRExJTktBVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU0VUSE9TVE5BTUUnJ0B8JChIQVZFX1NFVEhPU1ROQU1FKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TTEVFUCcnQHwkKEhBVkVfU0xFRVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1NZTUxJTksnJ0B8JChIQVZFX1NZTUxJTkspfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1NZTUxJTktBVCcnQHwkKEhBVkVfU1lNTElOS0FUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9VTkxJTktBVCcnQHwkKEhBVkVfVU5MSU5LQVQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1VTTEVFUCcnQHwkKEhBVkVfVVNMRUVQKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0VOVklST04nJ0B8JChIQVZFX0RFQ0xfRU5WSVJPTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9GQ0hESVInJ0B8JChIQVZFX0RFQ0xfRkNIRElSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0ZEQVRBU1lOQycnQHwkKEhBVkVfREVDTF9GREFUQVNZTkMpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfR0VURE9NQUlOTkFNRScnQHwkKEhBVkVfREVDTF9HRVRET01BSU5OQU1FKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0dFVExPR0lOX1InJ0B8JChIQVZFX0RFQ0xfR0VUTE9HSU5fUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9HRVRQQUdFU0laRScnQHwkKEhBVkVfREVDTF9HRVRQQUdFU0laRSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9HRVRVU0VSU0hFTEwnJ0B8JChIQVZFX0RFQ0xfR0VUVVNFUlNIRUxMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX1NFVEhPU1ROQU1FJydAfCQoSEFWRV9ERUNMX1NFVEhPU1ROQU1FKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX1RUWU5BTUVfUicnQHwkKEhBVkVfREVDTF9UVFlOQU1FX1IpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX09TX0gnJ0B8JChIQVZFX09TX0gpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1NZU19QQVJBTV9IJydAfCQoSEFWRV9TWVNfUEFSQU1fSCl8ZycgXAorCSAgfCBcCisJICBzZWQgLWUgJ3N8QCcnUkVQTEFDRV9DSE9XTicnQHwkKFJFUExBQ0VfQ0hPV04pfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0NMT1NFJydAfCQoUkVQTEFDRV9DTE9TRSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRFVQJydAfCQoUkVQTEFDRV9EVVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0RVUDInJ0B8JChSRVBMQUNFX0RVUDIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0ZDSE9XTkFUJydAfCQoUkVQTEFDRV9GQ0hPV05BVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRlRSVU5DQVRFJydAfCQoUkVQTEFDRV9GVFJVTkNBVEUpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0dFVENXRCcnQHwkKFJFUExBQ0VfR0VUQ1dEKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9HRVRET01BSU5OQU1FJydAfCQoUkVQTEFDRV9HRVRET01BSU5OQU1FKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9HRVRMT0dJTl9SJydAfCQoUkVQTEFDRV9HRVRMT0dJTl9SKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9HRVRHUk9VUFMnJ0B8JChSRVBMQUNFX0dFVEdST1VQUyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfR0VUUEFHRVNJWkUnJ0B8JChSRVBMQUNFX0dFVFBBR0VTSVpFKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9JU0FUVFknJ0B8JChSRVBMQUNFX0lTQVRUWSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTENIT1dOJydAfCQoUkVQTEFDRV9MQ0hPV04pfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0xJTksnJ0B8JChSRVBMQUNFX0xJTkspfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0xJTktBVCcnQHwkKFJFUExBQ0VfTElOS0FUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9MU0VFSycnQHwkKFJFUExBQ0VfTFNFRUspfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1BSRUFEJydAfCQoUkVQTEFDRV9QUkVBRCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfUFdSSVRFJydAfCQoUkVQTEFDRV9QV1JJVEUpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1JFQUQnJ0B8JChSRVBMQUNFX1JFQUQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1JFQURMSU5LJydAfCQoUkVQTEFDRV9SRUFETElOSyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfUk1ESVInJ0B8JChSRVBMQUNFX1JNRElSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9TTEVFUCcnQHwkKFJFUExBQ0VfU0xFRVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1NZTUxJTksnJ0B8JChSRVBMQUNFX1NZTUxJTkspfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1RUWU5BTUVfUicnQHwkKFJFUExBQ0VfVFRZTkFNRV9SKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9VTkxJTksnJ0B8JChSRVBMQUNFX1VOTElOSyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfVU5MSU5LQVQnJ0B8JChSRVBMQUNFX1VOTElOS0FUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9VU0xFRVAnJ0B8JChSRVBMQUNFX1VTTEVFUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfV1JJVEUnJ0B8JChSRVBMQUNFX1dSSVRFKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IJydAfCQoVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IX0FORF9VU0VfU09DS0VUUycnQHwkKFVOSVNURF9IX0hBVkVfV0lOU09DSzJfSF9BTkRfVVNFX1NPQ0tFVFMpfGcnIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwvciAkKENYWERFRlNfSCknIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxML3IgJChBUkdfTk9OTlVMTF9IKScgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UvciAkKFdBUk5fT05fVVNFX0gpJzsgXAorCX0gPiAkQC10ICYmIFwKKwltdiAkQC10ICRACitNT1NUTFlDTEVBTkZJTEVTICs9IHVuaXN0ZC5oIHVuaXN0ZC5oLXQKKworRVhUUkFfRElTVCArPSB1bmlzdGQuaW4uaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHVuaXN0ZAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHVuaXN0ZC1zYWZlcgorCitsaWJiaXNvbl9hX1NPVVJDRVMgKz0gZHVwLXNhZmVyLmMgZmQtc2FmZXIuYyBwaXBlLXNhZmVyLmMKKworRVhUUkFfRElTVCArPSB1bmlzdGQtLS5oIHVuaXN0ZC1zYWZlci5oCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgdW5pc3RkLXNhZmVyCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgdW5pdHlwZXMKKworQlVJTFRfU09VUkNFUyArPSAkKExJQlVOSVNUUklOR19VTklUWVBFU19IKQorCit1bml0eXBlcy5oOiB1bml0eXBlcy5pbi5oCisJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKwl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCisJICBjYXQgJChzcmNkaXIpL3VuaXR5cGVzLmluLmg7IFwKKwl9ID4gJEAtdCAmJiBcCisJbXYgLWYgJEAtdCAkQAorTU9TVExZQ0xFQU5GSUxFUyArPSB1bml0eXBlcy5oIHVuaXR5cGVzLmgtdAorCitFWFRSQV9ESVNUICs9IHVuaXR5cGVzLmluLmgKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSB1bml0eXBlcworCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHVuaXdpZHRoL2Jhc2UKKworQlVJTFRfU09VUkNFUyArPSAkKExJQlVOSVNUUklOR19VTklXSURUSF9IKQorCit1bml3aWR0aC5oOiB1bml3aWR0aC5pbi5oCisJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKwl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCisJICBjYXQgJChzcmNkaXIpL3VuaXdpZHRoLmluLmg7IFwKKwl9ID4gJEAtdCAmJiBcCisJbXYgLWYgJEAtdCAkQAorTU9TVExZQ0xFQU5GSUxFUyArPSB1bml3aWR0aC5oIHVuaXdpZHRoLmgtdAorCitFWFRSQV9ESVNUICs9IGxvY2FsY2hhcnNldC5oIHVuaXdpZHRoLmluLmgKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSB1bml3aWR0aC9iYXNlCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgdW5pd2lkdGgvd2lkdGgKKworaWYgTElCVU5JU1RSSU5HX0NPTVBJTEVfVU5JV0lEVEhfV0lEVEgKK2xpYmJpc29uX2FfU09VUkNFUyArPSB1bml3aWR0aC93aWR0aC5jCitlbmRpZgorCitFWFRSQV9ESVNUICs9IHVuaXdpZHRoL2Nqay5oCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgdW5pd2lkdGgvd2lkdGgKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSB1bmxvY2tlZC1pbwogCiAKK0VYVFJBX0RJU1QgKz0gdW5sb2NrZWQtaW8uaAogCi1saWJfU09VUkNFUyArPSB2ZXJpZnkuaAorIyMgZW5kICAgZ251bGliIG1vZHVsZSB1bmxvY2tlZC1pbworCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHVuc2V0ZW52CiAKIAotbGliX1NPVVJDRVMgKz0geGFsbG9jLWRpZS5jCitFWFRSQV9ESVNUICs9IHVuc2V0ZW52LmMKIAotbGliX1NPVVJDRVMgKz0geHN0cm5kdXAuaCB4c3RybmR1cC5jCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0gdW5zZXRlbnYuYwogCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHVuc2V0ZW52CisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgdXBkYXRlLWNvcHlyaWdodAorCisKK0VYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvdXBkYXRlLWNvcHlyaWdodAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHVwZGF0ZS1jb3B5cmlnaHQKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSB1c2VsZXNzLWlmLWJlZm9yZS1mcmVlCisKKworRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC91c2VsZXNzLWlmLWJlZm9yZS1mcmVlCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgdXNlbGVzcy1pZi1iZWZvcmUtZnJlZQorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHZhc25wcmludGYKKworCitFWFRSQV9ESVNUICs9IGFzbnByaW50Zi5jIGZsb2F0Ky5oIHByaW50Zi1hcmdzLmMgcHJpbnRmLWFyZ3MuaCBwcmludGYtcGFyc2UuYyBwcmludGYtcGFyc2UuaCB2YXNucHJpbnRmLmMgdmFzbnByaW50Zi5oCisKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyArPSBhc25wcmludGYuYyBwcmludGYtYXJncy5jIHByaW50Zi1wYXJzZS5jIHZhc25wcmludGYuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHZhc25wcmludGYKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSB2Yy1saXN0LWZpbGVzCisKKworRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC92Yy1saXN0LWZpbGVzCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgdmMtbGlzdC1maWxlcworCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHZlcmlmeQorCisKK0VYVFJBX0RJU1QgKz0gdmVyaWZ5LmgKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSB2ZXJpZnkKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSB2ZnByaW50Zi1wb3NpeAorCisKK0VYVFJBX0RJU1QgKz0gdmZwcmludGYuYworCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0gdmZwcmludGYuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHZmcHJpbnRmLXBvc2l4CisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgdnNucHJpbnRmCisKKworRVhUUkFfRElTVCArPSB2c25wcmludGYuYworCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0gdnNucHJpbnRmLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSB2c25wcmludGYKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSB2c3ByaW50Zi1wb3NpeAorCisKK0VYVFJBX0RJU1QgKz0gdnNwcmludGYuYworCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0gdnNwcmludGYuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHZzcHJpbnRmLXBvc2l4CisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgd2FpdC1wcm9jZXNzCisKK2xpYmJpc29uX2FfU09VUkNFUyArPSB3YWl0LXByb2Nlc3MuaCB3YWl0LXByb2Nlc3MuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHdhaXQtcHJvY2VzcworCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHdhaXRwaWQKKworCitFWFRSQV9ESVNUICs9IHdhaXRwaWQuYworCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0gd2FpdHBpZC5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgd2FpdHBpZAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHdjaGFyCisKK0JVSUxUX1NPVVJDRVMgKz0gd2NoYXIuaAorCisjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBjcmVhdGUgPHdjaGFyLmg+IHdoZW4gdGhlIHN5c3RlbQorIyB2ZXJzaW9uIGRvZXMgbm90IHdvcmsgc3RhbmRhbG9uZS4KK3djaGFyLmg6IHdjaGFyLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJzsgXAorCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCisJICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9GRUFUVVJFU19IJydAfCQoSEFWRV9GRUFUVVJFU19IKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnTkVYVF9XQ0hBUl9IJydAfCQoTkVYVF9XQ0hBUl9IKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XQ0hBUl9IJydAfCQoSEFWRV9XQ0hBUl9IKXxnJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0JUT1dDJydALyQoR05VTElCX0JUT1dDKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dDVE9CJydALyQoR05VTElCX1dDVE9CKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01CU0lOSVQnJ0AvJChHTlVMSUJfTUJTSU5JVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlJUT1dDJydALyQoR05VTElCX01CUlRPV0MpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUJSTEVOJydALyQoR05VTElCX01CUkxFTikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNSVE9XQ1MnJ0AvJChHTlVMSUJfTUJTUlRPV0NTKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01CU05SVE9XQ1MnJ0AvJChHTlVMSUJfTUJTTlJUT1dDUykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XQ1JUT01CJydALyQoR05VTElCX1dDUlRPTUIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfV0NTUlRPTUJTJydALyQoR05VTElCX1dDU1JUT01CUykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XQ1NOUlRPTUJTJydALyQoR05VTElCX1dDU05SVE9NQlMpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfV0NXSURUSCcnQC8kKEdOVUxJQl9XQ1dJRFRIKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dNRU1DSFInJ0AvJChHTlVMSUJfV01FTUNIUikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XTUVNQ01QJydALyQoR05VTElCX1dNRU1DTVApL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfV01FTUNQWScnQC8kKEdOVUxJQl9XTUVNQ1BZKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dNRU1NT1ZFJydALyQoR05VTElCX1dNRU1NT1ZFKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dNRU1TRVQnJ0AvJChHTlVMSUJfV01FTVNFVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XQ1NMRU4nJ0AvJChHTlVMSUJfV0NTTEVOKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dDU05MRU4nJ0AvJChHTlVMSUJfV0NTTkxFTikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XQ1NDUFknJ0AvJChHTlVMSUJfV0NTQ1BZKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dDUENQWScnQC8kKEdOVUxJQl9XQ1BDUFkpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfV0NTTkNQWScnQC8kKEdOVUxJQl9XQ1NOQ1BZKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dDUE5DUFknJ0AvJChHTlVMSUJfV0NQTkNQWSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XQ1NDQVQnJ0AvJChHTlVMSUJfV0NTQ0FUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dDU05DQVQnJ0AvJChHTlVMSUJfV0NTTkNBVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XQ1NDTVAnJ0AvJChHTlVMSUJfV0NTQ01QKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dDU05DTVAnJ0AvJChHTlVMSUJfV0NTTkNNUCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XQ1NDQVNFQ01QJydALyQoR05VTElCX1dDU0NBU0VDTVApL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfV0NTTkNBU0VDTVAnJ0AvJChHTlVMSUJfV0NTTkNBU0VDTVApL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfV0NTQ09MTCcnQC8kKEdOVUxJQl9XQ1NDT0xMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dDU1hGUk0nJ0AvJChHTlVMSUJfV0NTWEZSTSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XQ1NEVVAnJ0AvJChHTlVMSUJfV0NTRFVQKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dDU0NIUicnQC8kKEdOVUxJQl9XQ1NDSFIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfV0NTUkNIUicnQC8kKEdOVUxJQl9XQ1NSQ0hSKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dDU0NTUE4nJ0AvJChHTlVMSUJfV0NTQ1NQTikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XQ1NTUE4nJ0AvJChHTlVMSUJfV0NTU1BOKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dDU1BCUksnJ0AvJChHTlVMSUJfV0NTUEJSSykvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XQ1NTVFInJ0AvJChHTlVMSUJfV0NTU1RSKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1dDU1RPSycnQC8kKEdOVUxJQl9XQ1NUT0spL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfV0NTV0lEVEgnJ0AvJChHTlVMSUJfV0NTV0lEVEgpL2cnIFwKKwkgICAgICA8ICQoc3JjZGlyKS93Y2hhci5pbi5oIHwgXAorCSAgc2VkIC1lICdzfEAnJ0hBVkVfV0lOVF9UJydAfCQoSEFWRV9XSU5UX1QpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0JUT1dDJydAfCQoSEFWRV9CVE9XQyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTUJTSU5JVCcnQHwkKEhBVkVfTUJTSU5JVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTUJSVE9XQycnQHwkKEhBVkVfTUJSVE9XQyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTUJSTEVOJydAfCQoSEFWRV9NQlJMRU4pfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX01CU1JUT1dDUycnQHwkKEhBVkVfTUJTUlRPV0NTKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9NQlNOUlRPV0NTJydAfCQoSEFWRV9NQlNOUlRPV0NTKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XQ1JUT01CJydAfCQoSEFWRV9XQ1JUT01CKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XQ1NSVE9NQlMnJ0B8JChIQVZFX1dDU1JUT01CUyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfV0NTTlJUT01CUycnQHwkKEhBVkVfV0NTTlJUT01CUyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfV01FTUNIUicnQHwkKEhBVkVfV01FTUNIUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfV01FTUNNUCcnQHwkKEhBVkVfV01FTUNNUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfV01FTUNQWScnQHwkKEhBVkVfV01FTUNQWSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfV01FTU1PVkUnJ0B8JChIQVZFX1dNRU1NT1ZFKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XTUVNU0VUJydAfCQoSEFWRV9XTUVNU0VUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XQ1NMRU4nJ0B8JChIQVZFX1dDU0xFTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfV0NTTkxFTicnQHwkKEhBVkVfV0NTTkxFTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfV0NTQ1BZJydAfCQoSEFWRV9XQ1NDUFkpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1dDUENQWScnQHwkKEhBVkVfV0NQQ1BZKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XQ1NOQ1BZJydAfCQoSEFWRV9XQ1NOQ1BZKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XQ1BOQ1BZJydAfCQoSEFWRV9XQ1BOQ1BZKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XQ1NDQVQnJ0B8JChIQVZFX1dDU0NBVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfV0NTTkNBVCcnQHwkKEhBVkVfV0NTTkNBVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfV0NTQ01QJydAfCQoSEFWRV9XQ1NDTVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1dDU05DTVAnJ0B8JChIQVZFX1dDU05DTVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1dDU0NBU0VDTVAnJ0B8JChIQVZFX1dDU0NBU0VDTVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1dDU05DQVNFQ01QJydAfCQoSEFWRV9XQ1NOQ0FTRUNNUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfV0NTQ09MTCcnQHwkKEhBVkVfV0NTQ09MTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfV0NTWEZSTScnQHwkKEhBVkVfV0NTWEZSTSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfV0NTRFVQJydAfCQoSEFWRV9XQ1NEVVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1dDU0NIUicnQHwkKEhBVkVfV0NTQ0hSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XQ1NSQ0hSJydAfCQoSEFWRV9XQ1NSQ0hSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XQ1NDU1BOJydAfCQoSEFWRV9XQ1NDU1BOKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XQ1NTUE4nJ0B8JChIQVZFX1dDU1NQTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfV0NTUEJSSycnQHwkKEhBVkVfV0NTUEJSSyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfV0NTU1RSJydAfCQoSEFWRV9XQ1NTVFIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1dDU1RPSycnQHwkKEhBVkVfV0NTVE9LKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9XQ1NXSURUSCcnQHwkKEhBVkVfV0NTV0lEVEgpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfV0NUT0InJ0B8JChIQVZFX0RFQ0xfV0NUT0IpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfV0NXSURUSCcnQHwkKEhBVkVfREVDTF9XQ1dJRFRIKXxnJyBcCisJICB8IFwKKwkgIHNlZCAtZSAnc3xAJydSRVBMQUNFX01CU1RBVEVfVCcnQHwkKFJFUExBQ0VfTUJTVEFURV9UKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9CVE9XQycnQHwkKFJFUExBQ0VfQlRPV0MpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1dDVE9CJydAfCQoUkVQTEFDRV9XQ1RPQil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTUJTSU5JVCcnQHwkKFJFUExBQ0VfTUJTSU5JVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTUJSVE9XQycnQHwkKFJFUExBQ0VfTUJSVE9XQyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTUJSTEVOJydAfCQoUkVQTEFDRV9NQlJMRU4pfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX01CU1JUT1dDUycnQHwkKFJFUExBQ0VfTUJTUlRPV0NTKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9NQlNOUlRPV0NTJydAfCQoUkVQTEFDRV9NQlNOUlRPV0NTKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9XQ1JUT01CJydAfCQoUkVQTEFDRV9XQ1JUT01CKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9XQ1NSVE9NQlMnJ0B8JChSRVBMQUNFX1dDU1JUT01CUyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfV0NTTlJUT01CUycnQHwkKFJFUExBQ0VfV0NTTlJUT01CUyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfV0NXSURUSCcnQHwkKFJFUExBQ0VfV0NXSURUSCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfV0NTV0lEVEgnJ0B8JChSRVBMQUNFX1dDU1dJRFRIKXxnJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBML3IgJChDWFhERUZTX0gpJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVMTC9yICQoQVJHX05PTk5VTExfSCknIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFL3IgJChXQVJOX09OX1VTRV9IKSc7IFwKKwl9ID4gJEAtdCAmJiBcCisJbXYgJEAtdCAkQAorTU9TVExZQ0xFQU5GSUxFUyArPSB3Y2hhci5oIHdjaGFyLmgtdAorCitFWFRSQV9ESVNUICs9IHdjaGFyLmluLmgKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSB3Y2hhcgorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHdjdHlwZS1oCisKK0JVSUxUX1NPVVJDRVMgKz0gd2N0eXBlLmgKK2xpYmJpc29uX2FfU09VUkNFUyArPSB3Y3R5cGUtaC5jCisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8d2N0eXBlLmg+IHdoZW4gdGhlIHN5c3RlbQorIyBkb2Vzbid0IGhhdmUgb25lIHRoYXQgd29ya3Mgd2l0aCB0aGUgZ2l2ZW4gY29tcGlsZXIuCit3Y3R5cGUuaDogd2N0eXBlLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoV0FSTl9PTl9VU0VfSCkKKwkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKKwkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorCSAgICAgIC1lICdzL0AnJ0hBVkVfV0NUWVBFX0gnJ0AvJChIQVZFX1dDVFlQRV9IKS9nJyBcCisJICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnTkVYVF9XQ1RZUEVfSCcnQHwkKE5FWFRfV0NUWVBFX0gpfGcnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfSVNXQkxBTksnJ0AvJChHTlVMSUJfSVNXQkxBTkspL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfV0NUWVBFJydALyQoR05VTElCX1dDVFlQRSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9JU1dDVFlQRScnQC8kKEdOVUxJQl9JU1dDVFlQRSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XQ1RSQU5TJydALyQoR05VTElCX1dDVFJBTlMpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfVE9XQ1RSQU5TJydALyQoR05VTElCX1RPV0NUUkFOUykvZycgXAorCSAgICAgIC1lICdzL0AnJ0hBVkVfSVNXQkxBTksnJ0AvJChIQVZFX0lTV0JMQU5LKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnSEFWRV9JU1dDTlRSTCcnQC8kKEhBVkVfSVNXQ05UUkwpL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX1dDVFlQRV9UJydALyQoSEFWRV9XQ1RZUEVfVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0hBVkVfV0NUUkFOU19UJydALyQoSEFWRV9XQ1RSQU5TX1QpL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX1dJTlRfVCcnQC8kKEhBVkVfV0lOVF9UKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnUkVQTEFDRV9JU1dCTEFOSycnQC8kKFJFUExBQ0VfSVNXQkxBTkspL2cnIFwKKwkgICAgICAtZSAncy9AJydSRVBMQUNFX0lTV0NOVFJMJydALyQoUkVQTEFDRV9JU1dDTlRSTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ1JFUExBQ0VfVE9XTE9XRVInJ0AvJChSRVBMQUNFX1RPV0xPV0VSKS9nJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBML3IgJChDWFhERUZTX0gpJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRS9yICQoV0FSTl9PTl9VU0VfSCknIFwKKwkgICAgICA8ICQoc3JjZGlyKS93Y3R5cGUuaW4uaDsgXAorCX0gPiAkQC10ICYmIFwKKwltdiAkQC10ICRACitNT1NUTFlDTEVBTkZJTEVTICs9IHdjdHlwZS5oIHdjdHlwZS5oLXQKKworRVhUUkFfRElTVCArPSB3Y3R5cGUuaW4uaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHdjdHlwZS1oCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgd2N3aWR0aAorCisKK0VYVFJBX0RJU1QgKz0gd2N3aWR0aC5jCisKK0VYVFJBX2xpYmJpc29uX2FfU09VUkNFUyArPSB3Y3dpZHRoLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSB3Y3dpZHRoCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgeGFsbG9jCisKK2xpYmJpc29uX2FfU09VUkNFUyArPSB4bWFsbG9jLmMKKworRVhUUkFfRElTVCArPSB4YWxsb2MuaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHhhbGxvYworCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHhhbGxvYy1kaWUKKworbGliYmlzb25fYV9TT1VSQ0VTICs9IHhhbGxvYy1kaWUuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHhhbGxvYy1kaWUKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSB4YWxsb2Mtb3ZlcnNpemVkCisKKworRVhUUkFfRElTVCArPSB4YWxsb2Mtb3ZlcnNpemVkLmgKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSB4YWxsb2Mtb3ZlcnNpemVkCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgeG1lbWR1cDAKKworCitFWFRSQV9ESVNUICs9IHhtZW1kdXAwLmMgeG1lbWR1cDAuaAorCitFWFRSQV9saWJiaXNvbl9hX1NPVVJDRVMgKz0geG1lbWR1cDAuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHhtZW1kdXAwCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgeHNpemUKKworbGliYmlzb25fYV9TT1VSQ0VTICs9IHhzaXplLmggeHNpemUuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHhzaXplCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgeHN0cm5kdXAKKworbGliYmlzb25fYV9TT1VSQ0VTICs9IHhzdHJuZHVwLmggeHN0cm5kdXAuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHhzdHJuZHVwCisKKworbW9zdGx5Y2xlYW4tbG9jYWw6IG1vc3RseWNsZWFuLWdlbmVyaWMKKwlAZm9yIGRpciBpbiAnJyAkKE1PU1RMWUNMRUFORElSUyk7IGRvIFwKKwkgIGlmIHRlc3QgLW4gIiQkZGlyIiAmJiB0ZXN0IC1kICQkZGlyOyB0aGVuIFwKKwkgICAgZWNobyAicm1kaXIgJCRkaXIiOyBybWRpciAkJGRpcjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJOgpkaWZmIC0tZ2l0IGEvbGliL2hhcmQtbG9jYWxlLmMgYi9saWIvaGFyZC1sb2NhbGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTg1MzBmYy4uMDAwMDAwMAotLS0gYS9saWIvaGFyZC1sb2NhbGUuYworKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qIGhhcmQtbG9jYWxlLmMgLS0gRGV0ZXJtaW5lIHdoZXRoZXIgYSBsb2NhbGUgaXMgaGFyZC4KLQotICAgQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUKLSAgIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlICJoYXJkLWxvY2FsZS5oIgotCi0jaW5jbHVkZSA8bG9jYWxlLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJzdHJkdXAuaCIKLQotI2lmZGVmIF9fR0xJQkNfXwotIyBkZWZpbmUgR0xJQkNfVkVSU0lPTiBfX0dMSUJDX18KLSNlbHNlCi0jIGRlZmluZSBHTElCQ19WRVJTSU9OIDAKLSNlbmRpZgotCi0vKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgY3VycmVudCBDQVRFR09SWSBsb2NhbGUgaXMgaGFyZCwgaS5lLiBpZiB5b3UKLSAgIGNhbid0IGdldCBhd2F5IHdpdGggYXNzdW1pbmcgdHJhZGl0aW9uYWwgQyBvciBQT1NJWCBiZWhhdmlvci4gICovCi1ib29sCi1oYXJkX2xvY2FsZSAoaW50IGNhdGVnb3J5KQotewotICBib29sIGhhcmQgPSB0cnVlOwotICBjaGFyIGNvbnN0ICpwID0gc2V0bG9jYWxlIChjYXRlZ29yeSwgTlVMTCk7Ci0KLSAgaWYgKHApCi0gICAgewotICAgICAgaWYgKDIgPD0gR0xJQkNfVkVSU0lPTikKLQl7Ci0JICBpZiAoc3RyY21wIChwLCAiQyIpID09IDAgfHwgc3RyY21wIChwLCAiUE9TSVgiKSA9PSAwKQotCSAgICBoYXJkID0gZmFsc2U7Ci0JfQotICAgICAgZWxzZQotCXsKLQkgIGNoYXIgKmxvY2FsZSA9IHN0cmR1cCAocCk7Ci0JICBpZiAobG9jYWxlKQotCSAgICB7Ci0JICAgICAgLyogVGVtcG9yYXJpbHkgc2V0IHRoZSBsb2NhbGUgdG8gdGhlICJDIiBhbmQgIlBPU0lYIiBsb2NhbGVzCi0JCSB0byBmaW5kIHRoZWlyIG5hbWVzLCBzbyB0aGF0IHdlIGNhbiBkZXRlcm1pbmUgd2hldGhlciBvbmUKLQkJIG9yIHRoZSBvdGhlciBpcyB0aGUgY2FsbGVyJ3MgbG9jYWxlLiAgKi8KLQkgICAgICBpZiAoKChwID0gc2V0bG9jYWxlIChjYXRlZ29yeSwgIkMiKSkKLQkJICAgJiYgc3RyY21wIChwLCBsb2NhbGUpID09IDApCi0JCSAgfHwgKChwID0gc2V0bG9jYWxlIChjYXRlZ29yeSwgIlBPU0lYIikpCi0JCSAgICAgICYmIHN0cmNtcCAocCwgbG9jYWxlKSA9PSAwKSkKLQkJaGFyZCA9IGZhbHNlOwotCi0JICAgICAgLyogUmVzdG9yZSB0aGUgY2FsbGVyJ3MgbG9jYWxlLiAgKi8KLQkgICAgICBzZXRsb2NhbGUgKGNhdGVnb3J5LCBsb2NhbGUpOwotCSAgICAgIGZyZWUgKGxvY2FsZSk7Ci0JICAgIH0KLQl9Ci0gICAgfQotCi0gIHJldHVybiBoYXJkOwotfQpkaWZmIC0tZ2l0IGEvbGliL2hhcmQtbG9jYWxlLmggYi9saWIvaGFyZC1sb2NhbGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVjZWRjMC4uMDAwMDAwMAotLS0gYS9saWIvaGFyZC1sb2NhbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qIERldGVybWluZSB3aGV0aGVyIGEgbG9jYWxlIGlzIGhhcmQuCi0KLSAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCi0KLSNpZm5kZWYgSEFSRF9MT0NBTEVfSF8KLSMgZGVmaW5lIEhBUkRfTE9DQUxFX0hfIDEKLQotIyBpbmNsdWRlIDxzdGRib29sLmg+Ci0KLWJvb2wgaGFyZF9sb2NhbGUgKGludCk7Ci0KLSNlbmRpZiAvKiBIQVJEX0xPQ0FMRV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliL2hhc2guYyBiL2xpYi9oYXNoLmMKaW5kZXggZjg1YmQ1MS4uMTkzMzA1NyAxMDA2NDQKLS0tIGEvbGliL2hhc2guYworKysgYi9saWIvaGFzaC5jCkBAIC0xLDE0ICsxLDEzIEBACiAvKiBoYXNoIC0gaGFzaGluZyB0YWJsZSBwcm9jZXNzaW5nLgogCi0gICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZQotICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDQsIDIwMDYtMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAgICBXcml0dGVuIGJ5IEppbSBNZXllcmluZywgMTk5Mi4KIAotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpAQCAtMTYsMjIgKzE1LDIxIEBACiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogLyogQSBnZW5lcmljIGhhc2ggdGFibGUgcGFja2FnZS4gICovCiAKIC8qIERlZmluZSBVU0VfT0JTVEFDSyB0byAxIGlmIHlvdSB3YW50IHRoZSBhbGxvY2F0b3IgdG8gdXNlIG9ic3RhY2tzIGluc3RlYWQKICAgIG9mIG1hbGxvYy4gIElmIHlvdSBjaGFuZ2UgVVNFX09CU1RBQ0ssIHlvdSBoYXZlIHRvIHJlY29tcGlsZSEgICovCiAKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCisjaW5jbHVkZSA8Y29uZmlnLmg+CiAKICNpbmNsdWRlICJoYXNoLmgiCi0jaW5jbHVkZSAieGFsbG9jLmgiCiAKLSNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlICJiaXRyb3RhdGUuaCIKKyNpbmNsdWRlICJ4YWxsb2Mtb3ZlcnNpemVkLmgiCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCkBAIC00NSw5ICs0MywxMSBAQAogIyBlbmRpZgogI2VuZGlmCiAKLSNpZm5kZWYgU0laRV9NQVgKLSMgZGVmaW5lIFNJWkVfTUFYICgoc2l6ZV90KSAtMSkKLSNlbmRpZgorc3RydWN0IGhhc2hfZW50cnkKKyAgeworICAgIHZvaWQgKmRhdGE7CisgICAgc3RydWN0IGhhc2hfZW50cnkgKm5leHQ7CisgIH07CiAKIHN0cnVjdCBoYXNoX3RhYmxlCiAgIHsKQEAgLTYwLDEwICs2MCwxMCBAQAogICAgIHNpemVfdCBuX2J1Y2tldHNfdXNlZDsKICAgICBzaXplX3Qgbl9lbnRyaWVzOwogCi0gICAgLyogVHVuaW5nIGFyZ3VtZW50cywga2VwdCBpbiBhIHBoeXNpY2FseSBzZXBhcmF0ZSBzdHJ1Y3R1cmUuICAqLworICAgIC8qIFR1bmluZyBhcmd1bWVudHMsIGtlcHQgaW4gYSBwaHlzaWNhbGx5IHNlcGFyYXRlIHN0cnVjdHVyZS4gICovCiAgICAgY29uc3QgSGFzaF90dW5pbmcgKnR1bmluZzsKIAotICAgIC8qIFRocmVlIGZ1bmN0aW9ucyBhcmUgZ2l2ZW4gdG8gYGhhc2hfaW5pdGlhbGl6ZScsIHNlZSB0aGUgZG9jdW1lbnRhdGlvbgorICAgIC8qIFRocmVlIGZ1bmN0aW9ucyBhcmUgZ2l2ZW4gdG8gJ2hhc2hfaW5pdGlhbGl6ZScsIHNlZSB0aGUgZG9jdW1lbnRhdGlvbgogICAgICAgIGJsb2NrIGZvciB0aGlzIGZ1bmN0aW9uLiAgSW4gYSB3b3JkLCBIQVNIRVIgcmFuZG9taXplcyBhIHVzZXIgZW50cnkKICAgICAgICBpbnRvIGEgbnVtYmVyIHVwIGZyb20gMCB1cCB0byBzb21lIG1heGltdW0gbWludXMgMTsgQ09NUEFSQVRPUiByZXR1cm5zCiAgICAgICAgdHJ1ZSBpZiB0d28gdXNlciBlbnRyaWVzIGNvbXBhcmUgZXF1YWxseTsgYW5kIERBVEFfRlJFRVIgaXMgdGhlIGNsZWFudXAKQEAgLTg0LDI2ICs4NCwyNiBAQAogICB9OwogCiAvKiBBIGhhc2ggdGFibGUgY29udGFpbnMgbWFueSBpbnRlcm5hbCBlbnRyaWVzLCBlYWNoIGhvbGRpbmcgYSBwb2ludGVyIHRvCi0gICBzb21lIHVzZXIgcHJvdmlkZWQgZGF0YSAoYWxzbyBjYWxsZWQgYSB1c2VyIGVudHJ5KS4gIEFuIGVudHJ5IGluZGlzdGluY3RseQorICAgc29tZSB1c2VyLXByb3ZpZGVkIGRhdGEgKGFsc28gY2FsbGVkIGEgdXNlciBlbnRyeSkuICBBbiBlbnRyeSBpbmRpc3RpbmN0bHkKICAgIHJlZmVycyB0byBib3RoIHRoZSBpbnRlcm5hbCBlbnRyeSBhbmQgaXRzIGFzc29jaWF0ZWQgdXNlciBlbnRyeS4gIEEgdXNlcgogICAgZW50cnkgY29udGVudHMgbWF5IGJlIGhhc2hlZCBieSBhIHJhbmRvbWl6YXRpb24gZnVuY3Rpb24gKHRoZSBoYXNoaW5nCi0gICBmdW5jdGlvbiwgb3IganVzdCBgaGFzaGVyJyBmb3Igc2hvcnQpIGludG8gYSBudW1iZXIgKG9yIGBzbG90JykgYmV0d2VlbiAwCisgICBmdW5jdGlvbiwgb3IganVzdCAiaGFzaGVyIiBmb3Igc2hvcnQpIGludG8gYSBudW1iZXIgKG9yICJzbG90IikgYmV0d2VlbiAwCiAgICBhbmQgdGhlIGN1cnJlbnQgdGFibGUgc2l6ZS4gIEF0IGVhY2ggc2xvdCBwb3NpdGlvbiBpbiB0aGUgaGFzaCB0YWJsZSwKICAgIHN0YXJ0cyBhIGxpbmtlZCBjaGFpbiBvZiBlbnRyaWVzIGZvciB3aGljaCB0aGUgdXNlciBkYXRhIGFsbCBoYXNoIHRvIHRoaXMKICAgIHNsb3QuICBBIGJ1Y2tldCBpcyB0aGUgY29sbGVjdGlvbiBvZiBhbGwgZW50cmllcyBoYXNoaW5nIHRvIHRoZSBzYW1lIHNsb3QuCiAKLSAgIEEgZ29vZCBgaGFzaGVyJyBmdW5jdGlvbiB3aWxsIGRpc3RyaWJ1dGUgZW50cmllcyByYXRoZXIgZXZlbmx5IGluIGJ1Y2tldHMuCisgICBBIGdvb2QgImhhc2hlciIgZnVuY3Rpb24gd2lsbCBkaXN0cmlidXRlIGVudHJpZXMgcmF0aGVyIGV2ZW5seSBpbiBidWNrZXRzLgogICAgSW4gdGhlIGlkZWFsIGNhc2UsIHRoZSBsZW5ndGggb2YgZWFjaCBidWNrZXQgaXMgcm91Z2hseSB0aGUgbnVtYmVyIG9mCiAgICBlbnRyaWVzIGRpdmlkZWQgYnkgdGhlIHRhYmxlIHNpemUuICBGaW5kaW5nIHRoZSBzbG90IGZvciBhIGRhdGEgaXMgdXN1YWxseQotICAgZG9uZSBpbiBjb25zdGFudCB0aW1lIGJ5IHRoZSBgaGFzaGVyJywgYW5kIHRoZSBsYXRlciBmaW5kaW5nIG9mIGEgcHJlY2lzZQorICAgZG9uZSBpbiBjb25zdGFudCB0aW1lIGJ5IHRoZSAiaGFzaGVyIiwgYW5kIHRoZSBsYXRlciBmaW5kaW5nIG9mIGEgcHJlY2lzZQogICAgZW50cnkgaXMgbGluZWFyIGluIHRpbWUgd2l0aCB0aGUgc2l6ZSBvZiB0aGUgYnVja2V0LiAgQ29uc2VxdWVudGx5LCBhCiAgICBsYXJnZXIgaGFzaCB0YWJsZSBzaXplICh0aGF0IGlzLCBhIGxhcmdlciBudW1iZXIgb2YgYnVja2V0cykgaXMgcHJvbmUgdG8KLSAgIHlpZWxkaW5nIHNob3J0ZXIgY2hhaW5zLCAqZ2l2ZW4qIHRoZSBgaGFzaGVyJyBmdW5jdGlvbiBiZWhhdmVzIHByb3Blcmx5LgorICAgeWllbGRpbmcgc2hvcnRlciBjaGFpbnMsICpnaXZlbiogdGhlICJoYXNoZXIiIGZ1bmN0aW9uIGJlaGF2ZXMgcHJvcGVybHkuCiAKICAgIExvbmcgYnVja2V0cyBzbG93IGRvd24gdGhlIGxvb2t1cCBhbGdvcml0aG0uICBPbmUgbWlnaHQgdXNlIGJpZyBoYXNoIHRhYmxlCiAgICBzaXplcyBpbiBob3BlIHRvIHJlZHVjZSB0aGUgYXZlcmFnZSBsZW5ndGggb2YgYnVja2V0cywgYnV0IHRoaXMgbWlnaHQKICAgIGJlY29tZSBpbm9yZGluYXRlLCBhcyB1bnVzZWQgc2xvdHMgaW4gdGhlIGhhc2ggdGFibGUgdGFrZSBzb21lIHNwYWNlLiAgVGhlCi0gICBiZXN0IGJldCBpcyB0byBtYWtlIHN1cmUgeW91IGFyZSB1c2luZyBhIGdvb2QgYGhhc2hlcicgZnVuY3Rpb24gKGJld2FyZQorICAgYmVzdCBiZXQgaXMgdG8gbWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgYSBnb29kICJoYXNoZXIiIGZ1bmN0aW9uIChiZXdhcmUKICAgIHRoYXQgdGhvc2UgYXJlIG5vdCB0aGF0IGVhc3kgdG8gd3JpdGUhIDotKSwgYW5kIHRvIHVzZSBhIHRhYmxlIHNpemUKICAgIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGVudHJpZXMuICAqLwogCkBAIC0xMTMsOCArMTEzLDggQEAKICAgIDEuMCkuICBUaGUgZ3Jvd3RoIHRocmVzaG9sZCBkZWZhdWx0cyB0byAwLjgsIGFuZCB0aGUgZ3Jvd3RoIGZhY3RvcgogICAgZGVmYXVsdHMgdG8gMS40MTQsIG1lYW5pbmcgdGhhdCB0aGUgdGFibGUgd2lsbCBoYXZlIGRvdWJsZWQgaXRzIHNpemUKICAgIGV2ZXJ5IHNlY29uZCB0aW1lIDgwJSBvZiB0aGUgYnVja2V0cyBnZXQgdXNlZC4gICovCi0jZGVmaW5lIERFRkFVTFRfR1JPV1RIX1RIUkVTSE9MRCAwLjgKLSNkZWZpbmUgREVGQVVMVF9HUk9XVEhfRkFDVE9SIDEuNDE0CisjZGVmaW5lIERFRkFVTFRfR1JPV1RIX1RIUkVTSE9MRCAwLjhmCisjZGVmaW5lIERFRkFVTFRfR1JPV1RIX0ZBQ1RPUiAxLjQxNGYKIAogLyogSWYgYSBkZWxldGlvbiBlbXB0aWVzIGEgYnVja2V0IGFuZCBjYXVzZXMgdGhlIHJhdGlvIG9mIHVzZWQgYnVja2V0cyB0bwogICAgdGFibGUgc2l6ZSB0byBiZWNvbWUgc21hbGxlciB0aGFuIHRoZSBzaHJpbmsgdGhyZXNob2xkIChhIG51bWJlciBiZXR3ZWVuCkBAIC0xMjIsOCArMTIyLDggQEAKICAgIG51bWJlciBncmVhdGVyIHRoYW4gdGhlIHNocmluayB0aHJlc2hvbGQgYnV0IHNtYWxsZXIgdGhhbiAxLjApLiAgVGhlIHNocmluawogICAgdGhyZXNob2xkIGFuZCBmYWN0b3IgZGVmYXVsdCB0byAwLjAgYW5kIDEuMCwgbWVhbmluZyB0aGF0IHRoZSB0YWJsZSBuZXZlcgogICAgc2hyaW5rcy4gICovCi0jZGVmaW5lIERFRkFVTFRfU0hSSU5LX1RIUkVTSE9MRCAwLjAKLSNkZWZpbmUgREVGQVVMVF9TSFJJTktfRkFDVE9SIDEuMAorI2RlZmluZSBERUZBVUxUX1NIUklOS19USFJFU0hPTEQgMC4wZgorI2RlZmluZSBERUZBVUxUX1NIUklOS19GQUNUT1IgMS4wZgogCiAvKiBVc2UgdGhpcyB0byBpbml0aWFsaXplIG9yIHJlc2V0IGEgVFVOSU5HIHN0cnVjdHVyZSB0bwogICAgc29tZSBzZW5zaWJsZSB2YWx1ZXMuICovCkBAIC0xNzksMTYgKzE3OSwxNiBAQAogICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQogICAgIHsKICAgICAgIGlmIChidWNrZXQtPmRhdGEpCi0JewotCSAgc3RydWN0IGhhc2hfZW50cnkgY29uc3QgKmN1cnNvciA9IGJ1Y2tldDsKLQkgIHNpemVfdCBidWNrZXRfbGVuZ3RoID0gMTsKKyAgICAgICAgeworICAgICAgICAgIHN0cnVjdCBoYXNoX2VudHJ5IGNvbnN0ICpjdXJzb3IgPSBidWNrZXQ7CisgICAgICAgICAgc2l6ZV90IGJ1Y2tldF9sZW5ndGggPSAxOwogCi0JICB3aGlsZSAoY3Vyc29yID0gY3Vyc29yLT5uZXh0LCBjdXJzb3IpCi0JICAgIGJ1Y2tldF9sZW5ndGgrKzsKKyAgICAgICAgICB3aGlsZSAoY3Vyc29yID0gY3Vyc29yLT5uZXh0LCBjdXJzb3IpCisgICAgICAgICAgICBidWNrZXRfbGVuZ3RoKys7CiAKLQkgIGlmIChidWNrZXRfbGVuZ3RoID4gbWF4X2J1Y2tldF9sZW5ndGgpCi0JICAgIG1heF9idWNrZXRfbGVuZ3RoID0gYnVja2V0X2xlbmd0aDsKLQl9CisgICAgICAgICAgaWYgKGJ1Y2tldF9sZW5ndGggPiBtYXhfYnVja2V0X2xlbmd0aCkKKyAgICAgICAgICAgIG1heF9idWNrZXRfbGVuZ3RoID0gYnVja2V0X2xlbmd0aDsKKyAgICAgICAgfQogICAgIH0KIAogICByZXR1cm4gbWF4X2J1Y2tldF9sZW5ndGg7CkBAIC0yMDcsMTcgKzIwNywxNyBAQAogICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQogICAgIHsKICAgICAgIGlmIChidWNrZXQtPmRhdGEpCi0JewotCSAgc3RydWN0IGhhc2hfZW50cnkgY29uc3QgKmN1cnNvciA9IGJ1Y2tldDsKKyAgICAgICAgeworICAgICAgICAgIHN0cnVjdCBoYXNoX2VudHJ5IGNvbnN0ICpjdXJzb3IgPSBidWNrZXQ7CiAKLQkgIC8qIENvdW50IGJ1Y2tldCBoZWFkLiAgKi8KLQkgIG5fYnVja2V0c191c2VkKys7Ci0JICBuX2VudHJpZXMrKzsKKyAgICAgICAgICAvKiBDb3VudCBidWNrZXQgaGVhZC4gICovCisgICAgICAgICAgbl9idWNrZXRzX3VzZWQrKzsKKyAgICAgICAgICBuX2VudHJpZXMrKzsKIAotCSAgLyogQ291bnQgYnVja2V0IG92ZXJmbG93LiAgKi8KLQkgIHdoaWxlIChjdXJzb3IgPSBjdXJzb3ItPm5leHQsIGN1cnNvcikKLQkgICAgbl9lbnRyaWVzKys7Ci0JfQorICAgICAgICAgIC8qIENvdW50IGJ1Y2tldCBvdmVyZmxvdy4gICovCisgICAgICAgICAgd2hpbGUgKGN1cnNvciA9IGN1cnNvci0+bmV4dCwgY3Vyc29yKQorICAgICAgICAgICAgbl9lbnRyaWVzKys7CisgICAgICAgIH0KICAgICB9CiAKICAgaWYgKG5fYnVja2V0c191c2VkID09IHRhYmxlLT5uX2J1Y2tldHNfdXNlZCAmJiBuX2VudHJpZXMgPT0gdGFibGUtPm5fZW50cmllcykKQEAgLTIzNywxMCArMjM3LDIxIEBACiAgIGZwcmludGYgKHN0cmVhbSwgIiMgZW50cmllczogICAgICAgICAlbHVcbiIsICh1bnNpZ25lZCBsb25nIGludCkgbl9lbnRyaWVzKTsKICAgZnByaW50ZiAoc3RyZWFtLCAiIyBidWNrZXRzOiAgICAgICAgICVsdVxuIiwgKHVuc2lnbmVkIGxvbmcgaW50KSBuX2J1Y2tldHMpOwogICBmcHJpbnRmIChzdHJlYW0sICIjIGJ1Y2tldHMgdXNlZDogICAgJWx1ICglLjJmJSUpXG4iLAotCSAgICh1bnNpZ25lZCBsb25nIGludCkgbl9idWNrZXRzX3VzZWQsCi0JICAgKDEwMC4wICogbl9idWNrZXRzX3VzZWQpIC8gbl9idWNrZXRzKTsKKyAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KSBuX2J1Y2tldHNfdXNlZCwKKyAgICAgICAgICAgKDEwMC4wICogbl9idWNrZXRzX3VzZWQpIC8gbl9idWNrZXRzKTsKICAgZnByaW50ZiAoc3RyZWFtLCAibWF4IGJ1Y2tldCBsZW5ndGg6ICVsdVxuIiwKLQkgICAodW5zaWduZWQgbG9uZyBpbnQpIG1heF9idWNrZXRfbGVuZ3RoKTsKKyAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KSBtYXhfYnVja2V0X2xlbmd0aCk7Cit9CisKKy8qIEhhc2ggS0VZIGFuZCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBzZWxlY3RlZCBidWNrZXQuCisgICBJZiBUQUJMRS0+aGFzaGVyIG1pc2JlaGF2ZXMsIGFib3J0LiAgKi8KK3N0YXRpYyBzdHJ1Y3QgaGFzaF9lbnRyeSAqCitzYWZlX2hhc2hlciAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUsIGNvbnN0IHZvaWQgKmtleSkKK3sKKyAgc2l6ZV90IG4gPSB0YWJsZS0+aGFzaGVyIChrZXksIHRhYmxlLT5uX2J1Y2tldHMpOworICBpZiAoISAobiA8IHRhYmxlLT5uX2J1Y2tldHMpKQorICAgIGFib3J0ICgpOworICByZXR1cm4gdGFibGUtPmJ1Y2tldCArIG47CiB9CiAKIC8qIElmIEVOVFJZIG1hdGNoZXMgYW4gZW50cnkgYWxyZWFkeSBpbiB0aGUgaGFzaCB0YWJsZSwgcmV0dXJuIHRoZQpAQCAtMjQ5LDE4ICsyNjAsMTQgQEAKIHZvaWQgKgogaGFzaF9sb29rdXAgKGNvbnN0IEhhc2hfdGFibGUgKnRhYmxlLCBjb25zdCB2b2lkICplbnRyeSkKIHsKLSAgc3RydWN0IGhhc2hfZW50cnkgY29uc3QgKmJ1Y2tldAotICAgID0gdGFibGUtPmJ1Y2tldCArIHRhYmxlLT5oYXNoZXIgKGVudHJ5LCB0YWJsZS0+bl9idWNrZXRzKTsKKyAgc3RydWN0IGhhc2hfZW50cnkgY29uc3QgKmJ1Y2tldCA9IHNhZmVfaGFzaGVyICh0YWJsZSwgZW50cnkpOwogICBzdHJ1Y3QgaGFzaF9lbnRyeSBjb25zdCAqY3Vyc29yOwogCi0gIGlmICghIChidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0KSkKLSAgICBhYm9ydCAoKTsKLQogICBpZiAoYnVja2V0LT5kYXRhID09IE5VTEwpCiAgICAgcmV0dXJuIE5VTEw7CiAKICAgZm9yIChjdXJzb3IgPSBidWNrZXQ7IGN1cnNvcjsgY3Vyc29yID0gY3Vyc29yLT5uZXh0KQotICAgIGlmICh0YWJsZS0+Y29tcGFyYXRvciAoZW50cnksIGN1cnNvci0+ZGF0YSkpCisgICAgaWYgKGVudHJ5ID09IGN1cnNvci0+ZGF0YSB8fCB0YWJsZS0+Y29tcGFyYXRvciAoZW50cnksIGN1cnNvci0+ZGF0YSkpCiAgICAgICByZXR1cm4gY3Vyc29yLT5kYXRhOwogCiAgIHJldHVybiBOVUxMOwpAQCAtMjcxLDcgKzI3OCw5IEBACiAvKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgcGFnZSB0cmF2ZXJzZSB0aGUgaGFzaCB0YWJsZSBhbmQgcHJvY2VzcyB0aGUKICAgIGNvbnRhaW5lZCBlbnRyaWVzLiAgRm9yIHRoZSB0cmF2ZXJzYWwgdG8gd29yayBwcm9wZXJseSwgdGhlIGhhc2ggdGFibGUKICAgIHNob3VsZCBub3QgYmUgcmVzaXplZCBub3IgbW9kaWZpZWQgd2hpbGUgYW55IHBhcnRpY3VsYXIgZW50cnkgaXMgYmVpbmcKLSAgIHByb2Nlc3NlZC4gIEluIHBhcnRpY3VsYXIsIGVudHJpZXMgc2hvdWxkIG5vdCBiZSBhZGRlZCBvciByZW1vdmVkLiAgKi8KKyAgIHByb2Nlc3NlZC4gIEluIHBhcnRpY3VsYXIsIGVudHJpZXMgc2hvdWxkIG5vdCBiZSBhZGRlZCwgYW5kIGFuIGVudHJ5CisgICBtYXkgYmUgcmVtb3ZlZCBvbmx5IGlmIHRoZXJlIGlzIG5vIHNocmluayB0aHJlc2hvbGQgYW5kIHRoZSBlbnRyeSBiZWluZworICAgcmVtb3ZlZCBoYXMgYWxyZWFkeSBiZWVuIHBhc3NlZCB0byBoYXNoX2dldF9uZXh0LiAgKi8KIAogLyogUmV0dXJuIHRoZSBmaXJzdCBkYXRhIGluIHRoZSB0YWJsZSwgb3IgTlVMTCBpZiB0aGUgdGFibGUgaXMgZW1wdHkuICAqLwogCkBAIC0yOTEsMjMgKzMwMCwyNCBAQAogfQogCiAvKiBSZXR1cm4gdGhlIHVzZXIgZGF0YSBmb3IgdGhlIGVudHJ5IGZvbGxvd2luZyBFTlRSWSwgd2hlcmUgRU5UUlkgaGFzIGJlZW4KLSAgIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBlaXRoZXIgYGhhc2hfZ2V0X2ZpcnN0JyBvciBgaGFzaF9nZXRfbmV4dCcuCisgICByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gZWl0aGVyICdoYXNoX2dldF9maXJzdCcgb3IgJ2hhc2hfZ2V0X25leHQnLgogICAgUmV0dXJuIE5VTEwgaWYgdGhlcmUgYXJlIG5vIG1vcmUgZW50cmllcy4gICovCiAKIHZvaWQgKgogaGFzaF9nZXRfbmV4dCAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUsIGNvbnN0IHZvaWQgKmVudHJ5KQogewotICBzdHJ1Y3QgaGFzaF9lbnRyeSBjb25zdCAqYnVja2V0Ci0gICAgPSB0YWJsZS0+YnVja2V0ICsgdGFibGUtPmhhc2hlciAoZW50cnksIHRhYmxlLT5uX2J1Y2tldHMpOworICBzdHJ1Y3QgaGFzaF9lbnRyeSBjb25zdCAqYnVja2V0ID0gc2FmZV9oYXNoZXIgKHRhYmxlLCBlbnRyeSk7CiAgIHN0cnVjdCBoYXNoX2VudHJ5IGNvbnN0ICpjdXJzb3I7CiAKLSAgaWYgKCEgKGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQpKQotICAgIGFib3J0ICgpOwotCiAgIC8qIEZpbmQgbmV4dCBlbnRyeSBpbiB0aGUgc2FtZSBidWNrZXQuICAqLwotICBmb3IgKGN1cnNvciA9IGJ1Y2tldDsgY3Vyc29yOyBjdXJzb3IgPSBjdXJzb3ItPm5leHQpCi0gICAgaWYgKGN1cnNvci0+ZGF0YSA9PSBlbnRyeSAmJiBjdXJzb3ItPm5leHQpCi0gICAgICByZXR1cm4gY3Vyc29yLT5uZXh0LT5kYXRhOworICBjdXJzb3IgPSBidWNrZXQ7CisgIGRvCisgICAgeworICAgICAgaWYgKGN1cnNvci0+ZGF0YSA9PSBlbnRyeSAmJiBjdXJzb3ItPm5leHQpCisgICAgICAgIHJldHVybiBjdXJzb3ItPm5leHQtPmRhdGE7CisgICAgICBjdXJzb3IgPSBjdXJzb3ItPm5leHQ7CisgICAgfQorICB3aGlsZSAoY3Vyc29yICE9IE5VTEwpOwogCiAgIC8qIEZpbmQgZmlyc3QgZW50cnkgaW4gYW55IHN1YnNlcXVlbnQgYnVja2V0LiAgKi8KICAgd2hpbGUgKCsrYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdCkKQEAgLTMyNCw3ICszMzQsNyBAQAogCiBzaXplX3QKIGhhc2hfZ2V0X2VudHJpZXMgKGNvbnN0IEhhc2hfdGFibGUgKnRhYmxlLCB2b2lkICoqYnVmZmVyLAotCQkgIHNpemVfdCBidWZmZXJfc2l6ZSkKKyAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJfc2l6ZSkKIHsKICAgc2l6ZV90IGNvdW50ZXIgPSAwOwogICBzdHJ1Y3QgaGFzaF9lbnRyeSBjb25zdCAqYnVja2V0OwpAQCAtMzMzLDE0ICszNDMsMTQgQEAKICAgZm9yIChidWNrZXQgPSB0YWJsZS0+YnVja2V0OyBidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0OyBidWNrZXQrKykKICAgICB7CiAgICAgICBpZiAoYnVja2V0LT5kYXRhKQotCXsKLQkgIGZvciAoY3Vyc29yID0gYnVja2V0OyBjdXJzb3I7IGN1cnNvciA9IGN1cnNvci0+bmV4dCkKLQkgICAgewotCSAgICAgIGlmIChjb3VudGVyID49IGJ1ZmZlcl9zaXplKQotCQlyZXR1cm4gY291bnRlcjsKLQkgICAgICBidWZmZXJbY291bnRlcisrXSA9IGN1cnNvci0+ZGF0YTsKLQkgICAgfQotCX0KKyAgICAgICAgeworICAgICAgICAgIGZvciAoY3Vyc29yID0gYnVja2V0OyBjdXJzb3I7IGN1cnNvciA9IGN1cnNvci0+bmV4dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKGNvdW50ZXIgPj0gYnVmZmVyX3NpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50ZXI7CisgICAgICAgICAgICAgIGJ1ZmZlcltjb3VudGVyKytdID0gY3Vyc29yLT5kYXRhOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCiAgIHJldHVybiBjb3VudGVyOwpAQCAtMzU2LDcgKzM2Niw3IEBACiAKIHNpemVfdAogaGFzaF9kb19mb3JfZWFjaCAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUsIEhhc2hfcHJvY2Vzc29yIHByb2Nlc3NvciwKLQkJICB2b2lkICpwcm9jZXNzb3JfZGF0YSkKKyAgICAgICAgICAgICAgICAgIHZvaWQgKnByb2Nlc3Nvcl9kYXRhKQogewogICBzaXplX3QgY291bnRlciA9IDA7CiAgIHN0cnVjdCBoYXNoX2VudHJ5IGNvbnN0ICpidWNrZXQ7CkBAIC0zNjUsMTQgKzM3NSwxNCBAQAogICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQogICAgIHsKICAgICAgIGlmIChidWNrZXQtPmRhdGEpCi0JewotCSAgZm9yIChjdXJzb3IgPSBidWNrZXQ7IGN1cnNvcjsgY3Vyc29yID0gY3Vyc29yLT5uZXh0KQotCSAgICB7Ci0JICAgICAgaWYgKCEoKnByb2Nlc3NvcikgKGN1cnNvci0+ZGF0YSwgcHJvY2Vzc29yX2RhdGEpKQotCQlyZXR1cm4gY291bnRlcjsKLQkgICAgICBjb3VudGVyKys7Ci0JICAgIH0KLQl9CisgICAgICAgIHsKKyAgICAgICAgICBmb3IgKGN1cnNvciA9IGJ1Y2tldDsgY3Vyc29yOyBjdXJzb3IgPSBjdXJzb3ItPm5leHQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICghIHByb2Nlc3NvciAoY3Vyc29yLT5kYXRhLCBwcm9jZXNzb3JfZGF0YSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50ZXI7CisgICAgICAgICAgICAgIGNvdW50ZXIrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICByZXR1cm4gY291bnRlcjsKQEAgLTM5NCwxMCArNDA0LDggQEAKIHNpemVfdAogaGFzaF9zdHJpbmcgKGNvbnN0IGNoYXIgKnN0cmluZywgc2l6ZV90IG5fYnVja2V0cykKIHsKLSMgZGVmaW5lIFJPVEFURV9MRUZUKFZhbHVlLCBTaGlmdCkgXAotICAoKFZhbHVlKSA8PCAoU2hpZnQpIHwgKFZhbHVlKSA+PiAoKHNpemVvZiAoc2l6ZV90KSAqIENIQVJfQklUKSAtIChTaGlmdCkpKQogIyBkZWZpbmUgSEFTSF9PTkVfQ0hBUihWYWx1ZSwgQnl0ZSkgXAotICAoKEJ5dGUpICsgUk9UQVRFX0xFRlQgKFZhbHVlLCA3KSkKKyAgKChCeXRlKSArIHJvdGxfc3ogKFZhbHVlLCA3KSkKIAogICBzaXplX3QgdmFsdWUgPSAwOwogICB1bnNpZ25lZCBjaGFyIGNoOwpAQCAtNDA2LDE1ICs0MTQsMTQgQEAKICAgICB2YWx1ZSA9IEhBU0hfT05FX0NIQVIgKHZhbHVlLCBjaCk7CiAgIHJldHVybiB2YWx1ZSAlIG5fYnVja2V0czsKIAotIyB1bmRlZiBST1RBVEVfTEVGVAogIyB1bmRlZiBIQVNIX09ORV9DSEFSCiB9CiAKICNlbHNlIC8qIG5vdCBVU0VfRElGRl9IQVNIICovCiAKLS8qIFRoaXMgb25lIGNvbWVzIGZyb20gYHJlY29kZScsIGFuZCBwZXJmb3JtcyBhIGJpdCBiZXR0ZXIgdGhhbiB0aGUgYWJvdmUgYXMKKy8qIFRoaXMgb25lIGNvbWVzIGZyb20gJ3JlY29kZScsIGFuZCBwZXJmb3JtcyBhIGJpdCBiZXR0ZXIgdGhhbiB0aGUgYWJvdmUgYXMKICAgIHBlciBhIGZldyBleHBlcmltZW50cy4gIEl0IGlzIGluc3BpcmVkIGZyb20gYSBoYXNoaW5nIHJvdXRpbmUgZm91bmQgaW4gdGhlCi0gICB2ZXJ5IG9sZCBDeWJlciBgc25vb3AnLCBpdHNlbGYgd3JpdHRlbiBpbiB0eXBpY2FsIEdyZWcgTWFuc2ZpZWxkIHN0eWxlLgorICAgdmVyeSBvbGQgQ3liZXIgJ3Nub29wJywgaXRzZWxmIHdyaXR0ZW4gaW4gdHlwaWNhbCBHcmVnIE1hbnNmaWVsZCBzdHlsZS4KICAgIChCeSB0aGUgd2F5LCB3aGF0IGhhcHBlbmVkIHRvIHRoaXMgZXhjZWxsZW50IG1hbj8gIElzIGhlIHN0aWxsIGFsaXZlPykgICovCiAKIHNpemVfdApAQCAtNDMzLDcgKzQ0MCw3IEBACiAvKiBSZXR1cm4gdHJ1ZSBpZiBDQU5ESURBVEUgaXMgYSBwcmltZSBudW1iZXIuICBDQU5ESURBVEUgc2hvdWxkIGJlIGFuIG9kZAogICAgbnVtYmVyIGF0IGxlYXN0IGVxdWFsIHRvIDExLiAgKi8KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBib29sIF9HTF9BVFRSSUJVVEVfQ09OU1QKIGlzX3ByaW1lIChzaXplX3QgY2FuZGlkYXRlKQogewogICBzaXplX3QgZGl2aXNvciA9IDM7CkBAIC00NTIsNyArNDU5LDcgQEAKIC8qIFJvdW5kIGEgZ2l2ZW4gQ0FORElEQVRFIG51bWJlciB1cCB0byB0aGUgbmVhcmVzdCBwcmltZSwgYW5kIHJldHVybiB0aGF0CiAgICBwcmltZS4gIFByaW1lcyBsb3dlciB0aGFuIDEwIGFyZSBtZXJlbHkgc2tpcHBlZC4gICovCiAKLXN0YXRpYyBzaXplX3QKK3N0YXRpYyBzaXplX3QgX0dMX0FUVFJJQlVURV9DT05TVAogbmV4dF9wcmltZSAoc2l6ZV90IGNhbmRpZGF0ZSkKIHsKICAgLyogU2tpcCBzbWFsbCBwcmltZXMuICAqLwpAQCAtNDYyLDcgKzQ2OSw3IEBACiAgIC8qIE1ha2UgaXQgZGVmaW5pdGVseSBvZGQuICAqLwogICBjYW5kaWRhdGUgfD0gMTsKIAotICB3aGlsZSAoIWlzX3ByaW1lIChjYW5kaWRhdGUpKQorICB3aGlsZSAoU0laRV9NQVggIT0gY2FuZGlkYXRlICYmICFpc19wcmltZSAoY2FuZGlkYXRlKSkKICAgICBjYW5kaWRhdGUgKz0gMjsKIAogICByZXR1cm4gY2FuZGlkYXRlOwpAQCAtNDc0LDYgKzQ4MSwyNyBAQAogICAqdHVuaW5nID0gZGVmYXVsdF90dW5pbmc7CiB9CiAKKy8qIElmIHRoZSB1c2VyIHBhc3NlcyBhIE5VTEwgaGFzaGVyLCB3ZSBoYXNoIHRoZSByYXcgcG9pbnRlci4gICovCitzdGF0aWMgc2l6ZV90CityYXdfaGFzaGVyIChjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbikKK3sKKyAgLyogV2hlbiBoYXNoaW5nIHVuaXF1ZSBwb2ludGVycywgaXQgaXMgb2Z0ZW4gdGhlIGNhc2UgdGhhdCB0aGV5IHdlcmUKKyAgICAgZ2VuZXJhdGVkIGJ5IG1hbGxvYyBhbmQgdGh1cyBoYXZlIHRoZSBwcm9wZXJ0eSB0aGF0IHRoZSBsb3ctb3JkZXIKKyAgICAgYml0cyBhcmUgMC4gIEFzIHRoaXMgdGVuZHMgdG8gZ2l2ZSBwb29yZXIgcGVyZm9ybWFuY2Ugd2l0aCBzbWFsbAorICAgICB0YWJsZXMsIHdlIHJvdGF0ZSB0aGUgcG9pbnRlciB2YWx1ZSBiZWZvcmUgcGVyZm9ybWluZyBkaXZpc2lvbiwKKyAgICAgaW4gYW4gYXR0ZW1wdCB0byBpbXByb3ZlIGhhc2ggcXVhbGl0eS4gICovCisgIHNpemVfdCB2YWwgPSByb3RyX3N6ICgoc2l6ZV90KSBkYXRhLCAzKTsKKyAgcmV0dXJuIHZhbCAlIG47Cit9CisKKy8qIElmIHRoZSB1c2VyIHBhc3NlcyBhIE5VTEwgY29tcGFyYXRvciwgd2UgdXNlIHBvaW50ZXIgY29tcGFyaXNvbi4gICovCitzdGF0aWMgYm9vbAorcmF3X2NvbXBhcmF0b3IgKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisgIHJldHVybiBhID09IGI7Cit9CisKKwogLyogRm9yIHRoZSBnaXZlbiBoYXNoIFRBQkxFLCBjaGVjayB0aGUgdXNlciBzdXBwbGllZCB0dW5pbmcgc3RydWN0dXJlIGZvcgogICAgcmVhc29uYWJsZSB2YWx1ZXMsIGFuZCByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBubyBncm9zcyBlcnJvciB3aXRoIGl0LgogICAgT3RoZXJ3aXNlLCBkZWZpbml0aXZlbHkgcmVzZXQgdGhlIFRVTklORyBmaWVsZCB0byBzb21lIGFjY2VwdGFibGUgZGVmYXVsdApAQCAtNDg0LDEzICs1MTIsMTYgQEAKIGNoZWNrX3R1bmluZyAoSGFzaF90YWJsZSAqdGFibGUpCiB7CiAgIGNvbnN0IEhhc2hfdHVuaW5nICp0dW5pbmcgPSB0YWJsZS0+dHVuaW5nOworICBmbG9hdCBlcHNpbG9uOworICBpZiAodHVuaW5nID09ICZkZWZhdWx0X3R1bmluZykKKyAgICByZXR1cm4gdHJ1ZTsKIAogICAvKiBCZSBhIGJpdCBzdHJpY3RlciB0aGFuIG1hdGhlbWF0aWNzIHdvdWxkIHJlcXVpcmUsIHNvIHRoYXQKICAgICAgcm91bmRpbmcgZXJyb3JzIGluIHNpemUgY2FsY3VsYXRpb25zIGRvIG5vdCBjYXVzZSBhbGxvY2F0aW9ucyB0bwogICAgICBmYWlsIHRvIGdyb3cgb3Igc2hyaW5rIGFzIHRoZXkgc2hvdWxkLiAgVGhlIHNtYWxsZXN0IGFsbG9jYXRpb24KICAgICAgaXMgMTEgKGR1ZSB0byBuZXh0X3ByaW1lJ3MgYWxnb3JpdGhtKSwgc28gYW4gZXBzaWxvbiBvZiAwLjEKICAgICAgc2hvdWxkIGJlIGdvb2QgZW5vdWdoLiAgKi8KLSAgZmxvYXQgZXBzaWxvbiA9IDAuMWY7CisgIGVwc2lsb24gPSAwLjFmOwogCiAgIGlmIChlcHNpbG9uIDwgdHVuaW5nLT5ncm93dGhfdGhyZXNob2xkCiAgICAgICAmJiB0dW5pbmctPmdyb3d0aF90aHJlc2hvbGQgPCAxIC0gZXBzaWxvbgpAQCAtNTA1LDYgKzUzNiwyNiBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKKy8qIENvbXB1dGUgdGhlIHNpemUgb2YgdGhlIGJ1Y2tldCBhcnJheSBmb3IgdGhlIGdpdmVuIENBTkRJREFURSBhbmQKKyAgIFRVTklORywgb3IgcmV0dXJuIDAgaWYgdGhlcmUgaXMgbm8gcG9zc2libGUgd2F5IHRvIGFsbG9jYXRlIHRoYXQKKyAgIG1hbnkgZW50cmllcy4gICovCisKK3N0YXRpYyBzaXplX3QgX0dMX0FUVFJJQlVURV9QVVJFCitjb21wdXRlX2J1Y2tldF9zaXplIChzaXplX3QgY2FuZGlkYXRlLCBjb25zdCBIYXNoX3R1bmluZyAqdHVuaW5nKQoreworICBpZiAoIXR1bmluZy0+aXNfbl9idWNrZXRzKQorICAgIHsKKyAgICAgIGZsb2F0IG5ld19jYW5kaWRhdGUgPSBjYW5kaWRhdGUgLyB0dW5pbmctPmdyb3d0aF90aHJlc2hvbGQ7CisgICAgICBpZiAoU0laRV9NQVggPD0gbmV3X2NhbmRpZGF0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICBjYW5kaWRhdGUgPSBuZXdfY2FuZGlkYXRlOworICAgIH0KKyAgY2FuZGlkYXRlID0gbmV4dF9wcmltZSAoY2FuZGlkYXRlKTsKKyAgaWYgKHhhbGxvY19vdmVyc2l6ZWQgKGNhbmRpZGF0ZSwgc2l6ZW9mIChzdHJ1Y3QgaGFzaF9lbnRyeSAqKSkpCisgICAgcmV0dXJuIDA7CisgIHJldHVybiBjYW5kaWRhdGU7Cit9CisKIC8qIEFsbG9jYXRlIGFuZCByZXR1cm4gYSBuZXcgaGFzaCB0YWJsZSwgb3IgTlVMTCB1cG9uIGZhaWx1cmUuICBUaGUgaW5pdGlhbAogICAgbnVtYmVyIG9mIGJ1Y2tldHMgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBzbyBhcyB0byBfZ3VhcmFudGVlXyB0aGF0IHlvdQogICAgbWF5IGluc2VydCBhdCBsZWFzdCBDQU5ESURBVEUgZGlmZmVyZW50IHVzZXIgZW50cmllcyBiZWZvcmUgYW55IGdyb3d0aCBvZgpAQCAtNTE2LDM1ICs1NjcsNDAgQEAKIAogICAgVFVOSU5HIHBvaW50cyB0byBhIHN0cnVjdHVyZSBvZiB1c2VyLXN1cHBsaWVkIHZhbHVlcywgaW4gY2FzZSBzb21lIGZpbmUKICAgIHR1bmluZyBpcyB3YW50ZWQgb3ZlciB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUgaGFzaGVyLiAgSWYgVFVOSU5HIGlzCi0gICBOVUxMLCB0aGUgZGVmYXVsdCB0dW5pbmcgcGFyYW1ldGVycyBhcmUgdXNlZCBpbnN0ZWFkLgorICAgTlVMTCwgdGhlIGRlZmF1bHQgdHVuaW5nIHBhcmFtZXRlcnMgYXJlIHVzZWQgaW5zdGVhZC4gIElmIFRVTklORyBpcworICAgcHJvdmlkZWQgYnV0IHRoZSB2YWx1ZXMgcmVxdWVzdGVkIGFyZSBvdXQgb2YgYm91bmRzIG9yIG1pZ2h0IGNhdXNlCisgICByb3VuZGluZyBlcnJvcnMsIHJldHVybiBOVUxMLgogCi0gICBUaGUgdXNlci1zdXBwbGllZCBIQVNIRVIgZnVuY3Rpb24gc2hvdWxkIGJlIHByb3ZpZGVkLiAgSXQgYWNjZXB0cyB0d28KKyAgIFRoZSB1c2VyLXN1cHBsaWVkIEhBU0hFUiBmdW5jdGlvbiwgd2hlbiBub3QgTlVMTCwgYWNjZXB0cyB0d28KICAgIGFyZ3VtZW50cyBFTlRSWSBhbmQgVEFCTEVfU0laRS4gIEl0IGNvbXB1dGVzLCBieSBoYXNoaW5nIEVOVFJZIGNvbnRlbnRzLCBhCiAgICBzbG90IG51bWJlciBmb3IgdGhhdCBlbnRyeSB3aGljaCBzaG91bGQgYmUgaW4gdGhlIHJhbmdlIDAuLlRBQkxFX1NJWkUtMS4KICAgIFRoaXMgc2xvdCBudW1iZXIgaXMgdGhlbiByZXR1cm5lZC4KIAotICAgVGhlIHVzZXItc3VwcGxpZWQgQ09NUEFSQVRPUiBmdW5jdGlvbiBzaG91bGQgYmUgcHJvdmlkZWQuICBJdCBhY2NlcHRzIHR3bworICAgVGhlIHVzZXItc3VwcGxpZWQgQ09NUEFSQVRPUiBmdW5jdGlvbiwgd2hlbiBub3QgTlVMTCwgYWNjZXB0cyB0d28KICAgIGFyZ3VtZW50cyBwb2ludGluZyB0byB1c2VyIGRhdGEsIGl0IHRoZW4gcmV0dXJucyB0cnVlIGZvciBhIHBhaXIgb2YgZW50cmllcwogICAgdGhhdCBjb21wYXJlIGVxdWFsLCBvciBmYWxzZSBvdGhlcndpc2UuICBUaGlzIGZ1bmN0aW9uIGlzIGludGVybmFsbHkgY2FsbGVkCi0gICBvbiBlbnRyaWVzIHdoaWNoIGFyZSBhbHJlYWR5IGtub3duIHRvIGhhc2ggdG8gdGhlIHNhbWUgYnVja2V0IGluZGV4LgorICAgb24gZW50cmllcyB3aGljaCBhcmUgYWxyZWFkeSBrbm93biB0byBoYXNoIHRvIHRoZSBzYW1lIGJ1Y2tldCBpbmRleCwKKyAgIGJ1dCB3aGljaCBhcmUgZGlzdGluY3QgcG9pbnRlcnMuCiAKICAgIFRoZSB1c2VyLXN1cHBsaWVkIERBVEFfRlJFRVIgZnVuY3Rpb24sIHdoZW4gbm90IE5VTEwsIG1heSBiZSBsYXRlciBjYWxsZWQKICAgIHdpdGggdGhlIHVzZXIgZGF0YSBhcyBhbiBhcmd1bWVudCwganVzdCBiZWZvcmUgdGhlIGVudHJ5IGNvbnRhaW5pbmcgdGhlCi0gICBkYXRhIGdldHMgZnJlZWQuICBUaGlzIGhhcHBlbnMgZnJvbSB3aXRoaW4gYGhhc2hfZnJlZScgb3IgYGhhc2hfY2xlYXInLgorICAgZGF0YSBnZXRzIGZyZWVkLiAgVGhpcyBoYXBwZW5zIGZyb20gd2l0aGluICdoYXNoX2ZyZWUnIG9yICdoYXNoX2NsZWFyJy4KICAgIFlvdSBzaG91bGQgc3BlY2lmeSB0aGlzIGZ1bmN0aW9uIG9ubHkgaWYgeW91IHdhbnQgdGhlc2UgZnVuY3Rpb25zIHRvIGZyZWUKLSAgIGFsbCBvZiB5b3VyIGBkYXRhJyBkYXRhLiAgVGhpcyBpcyB0eXBpY2FsbHkgdGhlIGNhc2Ugd2hlbiB5b3VyIGRhdGEgaXMKKyAgIGFsbCBvZiB5b3VyICdkYXRhJyBkYXRhLiAgVGhpcyBpcyB0eXBpY2FsbHkgdGhlIGNhc2Ugd2hlbiB5b3VyIGRhdGEgaXMKICAgIHNpbXBseSBhbiBhdXhpbGlhcnkgc3RydWN0IHRoYXQgeW91IGhhdmUgbWFsbG9jJ2QgdG8gYWdncmVnYXRlIHNldmVyYWwKICAgIHZhbHVlcy4gICovCiAKIEhhc2hfdGFibGUgKgogaGFzaF9pbml0aWFsaXplIChzaXplX3QgY2FuZGlkYXRlLCBjb25zdCBIYXNoX3R1bmluZyAqdHVuaW5nLAotCQkgSGFzaF9oYXNoZXIgaGFzaGVyLCBIYXNoX2NvbXBhcmF0b3IgY29tcGFyYXRvciwKLQkJIEhhc2hfZGF0YV9mcmVlciBkYXRhX2ZyZWVyKQorICAgICAgICAgICAgICAgICBIYXNoX2hhc2hlciBoYXNoZXIsIEhhc2hfY29tcGFyYXRvciBjb21wYXJhdG9yLAorICAgICAgICAgICAgICAgICBIYXNoX2RhdGFfZnJlZXIgZGF0YV9mcmVlcikKIHsKICAgSGFzaF90YWJsZSAqdGFibGU7CiAKLSAgaWYgKGhhc2hlciA9PSBOVUxMIHx8IGNvbXBhcmF0b3IgPT0gTlVMTCkKLSAgICByZXR1cm4gTlVMTDsKKyAgaWYgKGhhc2hlciA9PSBOVUxMKQorICAgIGhhc2hlciA9IHJhd19oYXNoZXI7CisgIGlmIChjb21wYXJhdG9yID09IE5VTEwpCisgICAgY29tcGFyYXRvciA9IHJhd19jb21wYXJhdG9yOwogCiAgIHRhYmxlID0gbWFsbG9jIChzaXplb2YgKnRhYmxlKTsKICAgaWYgKHRhYmxlID09IE5VTEwpCkBAIC01NTYsMjggKzYxMiwyMCBAQAogICBpZiAoIWNoZWNrX3R1bmluZyAodGFibGUpKQogICAgIHsKICAgICAgIC8qIEZhaWwgaWYgdGhlIHR1bmluZyBvcHRpb25zIGFyZSBpbnZhbGlkLiAgVGhpcyBpcyB0aGUgb25seSBvY2Nhc2lvbgotCSB3aGVuIHRoZSB1c2VyIGdldHMgc29tZSBmZWVkYmFjayBhYm91dCBpdC4gIE9uY2UgdGhlIHRhYmxlIGlzIGNyZWF0ZWQsCi0JIGlmIHRoZSB1c2VyIHByb3ZpZGVzIGludmFsaWQgdHVuaW5nIG9wdGlvbnMsIHdlIHNpbGVudGx5IHJldmVydCB0bwotCSB1c2luZyB0aGUgZGVmYXVsdHMsIGFuZCBpZ25vcmUgZnVydGhlciByZXF1ZXN0IHRvIGNoYW5nZSB0aGUgdHVuaW5nCi0JIG9wdGlvbnMuICAqLworICAgICAgICAgd2hlbiB0aGUgdXNlciBnZXRzIHNvbWUgZmVlZGJhY2sgYWJvdXQgaXQuICBPbmNlIHRoZSB0YWJsZSBpcyBjcmVhdGVkLAorICAgICAgICAgaWYgdGhlIHVzZXIgcHJvdmlkZXMgaW52YWxpZCB0dW5pbmcgb3B0aW9ucywgd2Ugc2lsZW50bHkgcmV2ZXJ0IHRvCisgICAgICAgICB1c2luZyB0aGUgZGVmYXVsdHMsIGFuZCBpZ25vcmUgZnVydGhlciByZXF1ZXN0IHRvIGNoYW5nZSB0aGUgdHVuaW5nCisgICAgICAgICBvcHRpb25zLiAgKi8KICAgICAgIGdvdG8gZmFpbDsKICAgICB9CiAKLSAgaWYgKCF0dW5pbmctPmlzX25fYnVja2V0cykKLSAgICB7Ci0gICAgICBmbG9hdCBuZXdfY2FuZGlkYXRlID0gY2FuZGlkYXRlIC8gdHVuaW5nLT5ncm93dGhfdGhyZXNob2xkOwotICAgICAgaWYgKFNJWkVfTUFYIDw9IG5ld19jYW5kaWRhdGUpCi0JZ290byBmYWlsOwotICAgICAgY2FuZGlkYXRlID0gbmV3X2NhbmRpZGF0ZTsKLSAgICB9Ci0KLSAgaWYgKHhhbGxvY19vdmVyc2l6ZWQgKGNhbmRpZGF0ZSwgc2l6ZW9mICp0YWJsZS0+YnVja2V0KSkKLSAgICBnb3RvIGZhaWw7Ci0gIHRhYmxlLT5uX2J1Y2tldHMgPSBuZXh0X3ByaW1lIChjYW5kaWRhdGUpOwotICBpZiAoeGFsbG9jX292ZXJzaXplZCAodGFibGUtPm5fYnVja2V0cywgc2l6ZW9mICp0YWJsZS0+YnVja2V0KSkKKyAgdGFibGUtPm5fYnVja2V0cyA9IGNvbXB1dGVfYnVja2V0X3NpemUgKGNhbmRpZGF0ZSwgdHVuaW5nKTsKKyAgaWYgKCF0YWJsZS0+bl9idWNrZXRzKQogICAgIGdvdG8gZmFpbDsKIAogICB0YWJsZS0+YnVja2V0ID0gY2FsbG9jICh0YWJsZS0+bl9idWNrZXRzLCBzaXplb2YgKnRhYmxlLT5idWNrZXQpOworICBpZiAodGFibGUtPmJ1Y2tldCA9PSBOVUxMKQorICAgIGdvdG8gZmFpbDsKICAgdGFibGUtPmJ1Y2tldF9saW1pdCA9IHRhYmxlLT5idWNrZXQgKyB0YWJsZS0+bl9idWNrZXRzOwogICB0YWJsZS0+bl9idWNrZXRzX3VzZWQgPSAwOwogICB0YWJsZS0+bl9lbnRyaWVzID0gMDsKQEAgLTYwOSwzMCArNjU3LDMwIEBACiAgIGZvciAoYnVja2V0ID0gdGFibGUtPmJ1Y2tldDsgYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdDsgYnVja2V0KyspCiAgICAgewogICAgICAgaWYgKGJ1Y2tldC0+ZGF0YSkKLQl7Ci0JICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yOwotCSAgc3RydWN0IGhhc2hfZW50cnkgKm5leHQ7CisgICAgICAgIHsKKyAgICAgICAgICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yOworICAgICAgICAgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXh0OwogCi0JICAvKiBGcmVlIHRoZSBidWNrZXQgb3ZlcmZsb3cuICAqLwotCSAgZm9yIChjdXJzb3IgPSBidWNrZXQtPm5leHQ7IGN1cnNvcjsgY3Vyc29yID0gbmV4dCkKLQkgICAgewotCSAgICAgIGlmICh0YWJsZS0+ZGF0YV9mcmVlcikKLQkJKCp0YWJsZS0+ZGF0YV9mcmVlcikgKGN1cnNvci0+ZGF0YSk7Ci0JICAgICAgY3Vyc29yLT5kYXRhID0gTlVMTDsKKyAgICAgICAgICAvKiBGcmVlIHRoZSBidWNrZXQgb3ZlcmZsb3cuICAqLworICAgICAgICAgIGZvciAoY3Vyc29yID0gYnVja2V0LT5uZXh0OyBjdXJzb3I7IGN1cnNvciA9IG5leHQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICh0YWJsZS0+ZGF0YV9mcmVlcikKKyAgICAgICAgICAgICAgICB0YWJsZS0+ZGF0YV9mcmVlciAoY3Vyc29yLT5kYXRhKTsKKyAgICAgICAgICAgICAgY3Vyc29yLT5kYXRhID0gTlVMTDsKIAotCSAgICAgIG5leHQgPSBjdXJzb3ItPm5leHQ7Ci0JICAgICAgLyogUmVsaW5raW5nIGlzIGRvbmUgb25lIGVudHJ5IGF0IGEgdGltZSwgYXMgaXQgaXMgdG8gYmUgZXhwZWN0ZWQKLQkJIHRoYXQgb3ZlcmZsb3dzIGFyZSBlaXRoZXIgcmFyZSBvciBzaG9ydC4gICovCi0JICAgICAgY3Vyc29yLT5uZXh0ID0gdGFibGUtPmZyZWVfZW50cnlfbGlzdDsKLQkgICAgICB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0ID0gY3Vyc29yOwotCSAgICB9CisgICAgICAgICAgICAgIG5leHQgPSBjdXJzb3ItPm5leHQ7CisgICAgICAgICAgICAgIC8qIFJlbGlua2luZyBpcyBkb25lIG9uZSBlbnRyeSBhdCBhIHRpbWUsIGFzIGl0IGlzIHRvIGJlIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgIHRoYXQgb3ZlcmZsb3dzIGFyZSBlaXRoZXIgcmFyZSBvciBzaG9ydC4gICovCisgICAgICAgICAgICAgIGN1cnNvci0+bmV4dCA9IHRhYmxlLT5mcmVlX2VudHJ5X2xpc3Q7CisgICAgICAgICAgICAgIHRhYmxlLT5mcmVlX2VudHJ5X2xpc3QgPSBjdXJzb3I7CisgICAgICAgICAgICB9CiAKLQkgIC8qIEZyZWUgdGhlIGJ1Y2tldCBoZWFkLiAgKi8KLQkgIGlmICh0YWJsZS0+ZGF0YV9mcmVlcikKLQkgICAgKCp0YWJsZS0+ZGF0YV9mcmVlcikgKGJ1Y2tldC0+ZGF0YSk7Ci0JICBidWNrZXQtPmRhdGEgPSBOVUxMOwotCSAgYnVja2V0LT5uZXh0ID0gTlVMTDsKLQl9CisgICAgICAgICAgLyogRnJlZSB0aGUgYnVja2V0IGhlYWQuICAqLworICAgICAgICAgIGlmICh0YWJsZS0+ZGF0YV9mcmVlcikKKyAgICAgICAgICAgIHRhYmxlLT5kYXRhX2ZyZWVyIChidWNrZXQtPmRhdGEpOworICAgICAgICAgIGJ1Y2tldC0+ZGF0YSA9IE5VTEw7CisgICAgICAgICAgYnVja2V0LT5uZXh0ID0gTlVMTDsKKyAgICAgICAgfQogICAgIH0KIAogICB0YWJsZS0+bl9idWNrZXRzX3VzZWQgPSAwOwpAQCAtNjU1LDE1ICs3MDMsMTMgQEAKICAgaWYgKHRhYmxlLT5kYXRhX2ZyZWVyICYmIHRhYmxlLT5uX2VudHJpZXMpCiAgICAgewogICAgICAgZm9yIChidWNrZXQgPSB0YWJsZS0+YnVja2V0OyBidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0OyBidWNrZXQrKykKLQl7Ci0JICBpZiAoYnVja2V0LT5kYXRhKQotCSAgICB7Ci0JICAgICAgZm9yIChjdXJzb3IgPSBidWNrZXQ7IGN1cnNvcjsgY3Vyc29yID0gY3Vyc29yLT5uZXh0KQotCQl7Ci0JCSAgKCp0YWJsZS0+ZGF0YV9mcmVlcikgKGN1cnNvci0+ZGF0YSk7Ci0JCX0KLQkgICAgfQotCX0KKyAgICAgICAgeworICAgICAgICAgIGlmIChidWNrZXQtPmRhdGEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZvciAoY3Vyc29yID0gYnVja2V0OyBjdXJzb3I7IGN1cnNvciA9IGN1cnNvci0+bmV4dCkKKyAgICAgICAgICAgICAgICB0YWJsZS0+ZGF0YV9mcmVlciAoY3Vyc29yLT5kYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogI2lmIFVTRV9PQlNUQUNLCkBAIC02NzYsMTAgKzcyMiwxMCBAQAogICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQogICAgIHsKICAgICAgIGZvciAoY3Vyc29yID0gYnVja2V0LT5uZXh0OyBjdXJzb3I7IGN1cnNvciA9IG5leHQpCi0JewotCSAgbmV4dCA9IGN1cnNvci0+bmV4dDsKLQkgIGZyZWUgKGN1cnNvcik7Ci0JfQorICAgICAgICB7CisgICAgICAgICAgbmV4dCA9IGN1cnNvci0+bmV4dDsKKyAgICAgICAgICBmcmVlIChjdXJzb3IpOworICAgICAgICB9CiAgICAgfQogCiAgIC8qIEFsc28gcmVjbGFpbSB0aGUgaW50ZXJuYWwgbGlzdCBvZiBwcmV2aW91c2x5IGZyZWVkIGVudHJpZXMuICAqLwpAQCAtNjk4LDcgKzc0NCw3IEBACiAKIC8qIEluc2VydGlvbiBhbmQgZGVsZXRpb24uICAqLwogCi0vKiBHZXQgYSBuZXcgaGFzaCBlbnRyeSBmb3IgYSBidWNrZXQgb3ZlcmZsb3csIHBvc3NpYmx5IGJ5IHJlY2x5aW5nIGEKKy8qIEdldCBhIG5ldyBoYXNoIGVudHJ5IGZvciBhIGJ1Y2tldCBvdmVyZmxvdywgcG9zc2libHkgYnkgcmVjeWNsaW5nIGEKICAgIHByZXZpb3VzbHkgZnJlZWQgb25lLiAgSWYgdGhpcyBpcyBub3QgcG9zc2libGUsIGFsbG9jYXRlIGEgbmV3IG9uZS4gICovCiAKIHN0YXRpYyBzdHJ1Y3QgaGFzaF9lbnRyeSAqCkBAIC03NDIsMTUgKzc4OCwxMSBAQAogCiBzdGF0aWMgdm9pZCAqCiBoYXNoX2ZpbmRfZW50cnkgKEhhc2hfdGFibGUgKnRhYmxlLCBjb25zdCB2b2lkICplbnRyeSwKLQkJIHN0cnVjdCBoYXNoX2VudHJ5ICoqYnVja2V0X2hlYWQsIGJvb2wgZGVsZXRlKQorICAgICAgICAgICAgICAgICBzdHJ1Y3QgaGFzaF9lbnRyeSAqKmJ1Y2tldF9oZWFkLCBib29sIGRlbGV0ZSkKIHsKLSAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldAotICAgID0gdGFibGUtPmJ1Y2tldCArIHRhYmxlLT5oYXNoZXIgKGVudHJ5LCB0YWJsZS0+bl9idWNrZXRzKTsKKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldCA9IHNhZmVfaGFzaGVyICh0YWJsZSwgZW50cnkpOwogICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yOwogCi0gIGlmICghIChidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0KSkKLSAgICBhYm9ydCAoKTsKLQogICAqYnVja2V0X2hlYWQgPSBidWNrZXQ7CiAKICAgLyogVGVzdCBmb3IgZW1wdHkgYnVja2V0LiAgKi8KQEAgLTc1OCwyNiArODAwLDI2IEBACiAgICAgcmV0dXJuIE5VTEw7CiAKICAgLyogU2VlIGlmIHRoZSBlbnRyeSBpcyB0aGUgZmlyc3QgaW4gdGhlIGJ1Y2tldC4gICovCi0gIGlmICgoKnRhYmxlLT5jb21wYXJhdG9yKSAoZW50cnksIGJ1Y2tldC0+ZGF0YSkpCisgIGlmIChlbnRyeSA9PSBidWNrZXQtPmRhdGEgfHwgdGFibGUtPmNvbXBhcmF0b3IgKGVudHJ5LCBidWNrZXQtPmRhdGEpKQogICAgIHsKICAgICAgIHZvaWQgKmRhdGEgPSBidWNrZXQtPmRhdGE7CiAKICAgICAgIGlmIChkZWxldGUpCi0JewotCSAgaWYgKGJ1Y2tldC0+bmV4dCkKLQkgICAgewotCSAgICAgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXh0ID0gYnVja2V0LT5uZXh0OworICAgICAgICB7CisgICAgICAgICAgaWYgKGJ1Y2tldC0+bmV4dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc3RydWN0IGhhc2hfZW50cnkgKm5leHQgPSBidWNrZXQtPm5leHQ7CiAKLQkgICAgICAvKiBCdW1wIHRoZSBmaXJzdCBvdmVyZmxvdyBlbnRyeSBpbnRvIHRoZSBidWNrZXQgaGVhZCwgdGhlbiBzYXZlCi0JCSB0aGUgcHJldmlvdXMgZmlyc3Qgb3ZlcmZsb3cgZW50cnkgZm9yIGxhdGVyIHJlY3ljbGluZy4gICovCi0JICAgICAgKmJ1Y2tldCA9ICpuZXh0OwotCSAgICAgIGZyZWVfZW50cnkgKHRhYmxlLCBuZXh0KTsKLQkgICAgfQotCSAgZWxzZQotCSAgICB7Ci0JICAgICAgYnVja2V0LT5kYXRhID0gTlVMTDsKLQkgICAgfQotCX0KKyAgICAgICAgICAgICAgLyogQnVtcCB0aGUgZmlyc3Qgb3ZlcmZsb3cgZW50cnkgaW50byB0aGUgYnVja2V0IGhlYWQsIHRoZW4gc2F2ZQorICAgICAgICAgICAgICAgICB0aGUgcHJldmlvdXMgZmlyc3Qgb3ZlcmZsb3cgZW50cnkgZm9yIGxhdGVyIHJlY3ljbGluZy4gICovCisgICAgICAgICAgICAgICpidWNrZXQgPSAqbmV4dDsKKyAgICAgICAgICAgICAgZnJlZV9lbnRyeSAodGFibGUsIG5leHQpOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgYnVja2V0LT5kYXRhID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICByZXR1cm4gZGF0YTsKICAgICB9CkBAIC03ODUsMTYzICs4MjcsMjM0IEBACiAgIC8qIFNjYW4gdGhlIGJ1Y2tldCBvdmVyZmxvdy4gICovCiAgIGZvciAoY3Vyc29yID0gYnVja2V0OyBjdXJzb3ItPm5leHQ7IGN1cnNvciA9IGN1cnNvci0+bmV4dCkKICAgICB7Ci0gICAgICBpZiAoKCp0YWJsZS0+Y29tcGFyYXRvcikgKGVudHJ5LCBjdXJzb3ItPm5leHQtPmRhdGEpKQotCXsKLQkgIHZvaWQgKmRhdGEgPSBjdXJzb3ItPm5leHQtPmRhdGE7CisgICAgICBpZiAoZW50cnkgPT0gY3Vyc29yLT5uZXh0LT5kYXRhCisgICAgICAgICAgfHwgdGFibGUtPmNvbXBhcmF0b3IgKGVudHJ5LCBjdXJzb3ItPm5leHQtPmRhdGEpKQorICAgICAgICB7CisgICAgICAgICAgdm9pZCAqZGF0YSA9IGN1cnNvci0+bmV4dC0+ZGF0YTsKIAotCSAgaWYgKGRlbGV0ZSkKLQkgICAgewotCSAgICAgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXh0ID0gY3Vyc29yLT5uZXh0OworICAgICAgICAgIGlmIChkZWxldGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXh0ID0gY3Vyc29yLT5uZXh0OwogCi0JICAgICAgLyogVW5saW5rIHRoZSBlbnRyeSB0byBkZWxldGUsIHRoZW4gc2F2ZSB0aGUgZnJlZWQgZW50cnkgZm9yIGxhdGVyCi0JCSByZWN5Y2xpbmcuICAqLwotCSAgICAgIGN1cnNvci0+bmV4dCA9IG5leHQtPm5leHQ7Ci0JICAgICAgZnJlZV9lbnRyeSAodGFibGUsIG5leHQpOwotCSAgICB9CisgICAgICAgICAgICAgIC8qIFVubGluayB0aGUgZW50cnkgdG8gZGVsZXRlLCB0aGVuIHNhdmUgdGhlIGZyZWVkIGVudHJ5IGZvciBsYXRlcgorICAgICAgICAgICAgICAgICByZWN5Y2xpbmcuICAqLworICAgICAgICAgICAgICBjdXJzb3ItPm5leHQgPSBuZXh0LT5uZXh0OworICAgICAgICAgICAgICBmcmVlX2VudHJ5ICh0YWJsZSwgbmV4dCk7CisgICAgICAgICAgICB9CiAKLQkgIHJldHVybiBkYXRhOwotCX0KKyAgICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgfQogICAgIH0KIAogICAvKiBObyBlbnRyeSBmb3VuZC4gICovCiAgIHJldHVybiBOVUxMOwogfQogCisvKiBJbnRlcm5hbCBoZWxwZXIsIHRvIG1vdmUgZW50cmllcyBmcm9tIFNSQyB0byBEU1QuICBCb3RoIHRhYmxlcyBtdXN0CisgICBzaGFyZSB0aGUgc2FtZSBmcmVlIGVudHJ5IGxpc3QuICBJZiBTQUZFLCBvbmx5IG1vdmUgb3ZlcmZsb3cKKyAgIGVudHJpZXMsIHNhdmluZyBidWNrZXQgaGVhZHMgZm9yIGxhdGVyLCBzbyB0aGF0IG5vIGFsbG9jYXRpb25zIHdpbGwKKyAgIG9jY3VyLiAgUmV0dXJuIGZhbHNlIGlmIHRoZSBmcmVlIGVudHJ5IGxpc3QgaXMgZXhoYXVzdGVkIGFuZCBhbgorICAgYWxsb2NhdGlvbiBmYWlscy4gICovCisKK3N0YXRpYyBib29sCit0cmFuc2Zlcl9lbnRyaWVzIChIYXNoX3RhYmxlICpkc3QsIEhhc2hfdGFibGUgKnNyYywgYm9vbCBzYWZlKQoreworICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yOworICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV4dDsKKyAgZm9yIChidWNrZXQgPSBzcmMtPmJ1Y2tldDsgYnVja2V0IDwgc3JjLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQorICAgIGlmIChidWNrZXQtPmRhdGEpCisgICAgICB7CisgICAgICAgIHZvaWQgKmRhdGE7CisgICAgICAgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXdfYnVja2V0OworCisgICAgICAgIC8qIFdpdGhpbiBlYWNoIGJ1Y2tldCwgdHJhbnNmZXIgb3ZlcmZsb3cgZW50cmllcyBmaXJzdCBhbmQKKyAgICAgICAgICAgdGhlbiB0aGUgYnVja2V0IGhlYWQsIHRvIG1pbmltaXplIG1lbW9yeSBwcmVzc3VyZS4gIEFmdGVyCisgICAgICAgICAgIGFsbCwgdGhlIG9ubHkgdGltZSB3ZSBtaWdodCBhbGxvY2F0ZSBpcyB3aGVuIG1vdmluZyB0aGUKKyAgICAgICAgICAgYnVja2V0IGhlYWQsIGJ1dCBtb3Zpbmcgb3ZlcmZsb3cgZW50cmllcyBmaXJzdCBtYXkgY3JlYXRlCisgICAgICAgICAgIGZyZWUgZW50cmllcyB0aGF0IGNhbiBiZSByZWN5Y2xlZCBieSB0aGUgdGltZSB3ZSBmaW5hbGx5CisgICAgICAgICAgIGdldCB0byB0aGUgYnVja2V0IGhlYWQuICAqLworICAgICAgICBmb3IgKGN1cnNvciA9IGJ1Y2tldC0+bmV4dDsgY3Vyc29yOyBjdXJzb3IgPSBuZXh0KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGRhdGEgPSBjdXJzb3ItPmRhdGE7CisgICAgICAgICAgICBuZXdfYnVja2V0ID0gc2FmZV9oYXNoZXIgKGRzdCwgZGF0YSk7CisKKyAgICAgICAgICAgIG5leHQgPSBjdXJzb3ItPm5leHQ7CisKKyAgICAgICAgICAgIGlmIChuZXdfYnVja2V0LT5kYXRhKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogTWVyZWx5IHJlbGluayBhbiBleGlzdGluZyBlbnRyeSwgd2hlbiBtb3ZpbmcgZnJvbSBhCisgICAgICAgICAgICAgICAgICAgYnVja2V0IG92ZXJmbG93IGludG8gYSBidWNrZXQgb3ZlcmZsb3cuICAqLworICAgICAgICAgICAgICAgIGN1cnNvci0+bmV4dCA9IG5ld19idWNrZXQtPm5leHQ7CisgICAgICAgICAgICAgICAgbmV3X2J1Y2tldC0+bmV4dCA9IGN1cnNvcjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogRnJlZSBhbiBleGlzdGluZyBlbnRyeSwgd2hlbiBtb3ZpbmcgZnJvbSBhIGJ1Y2tldAorICAgICAgICAgICAgICAgICAgIG92ZXJmbG93IGludG8gYSBidWNrZXQgaGVhZGVyLiAgKi8KKyAgICAgICAgICAgICAgICBuZXdfYnVja2V0LT5kYXRhID0gZGF0YTsKKyAgICAgICAgICAgICAgICBkc3QtPm5fYnVja2V0c191c2VkKys7CisgICAgICAgICAgICAgICAgZnJlZV9lbnRyeSAoZHN0LCBjdXJzb3IpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAvKiBOb3cgbW92ZSB0aGUgYnVja2V0IGhlYWQuICBCZSBzdXJlIHRoYXQgaWYgd2UgZmFpbCBkdWUgdG8KKyAgICAgICAgICAgYWxsb2NhdGlvbiBmYWlsdXJlIHRoYXQgdGhlIHNyYyB0YWJsZSBpcyBpbiBhIGNvbnNpc3RlbnQKKyAgICAgICAgICAgc3RhdGUuICAqLworICAgICAgICBkYXRhID0gYnVja2V0LT5kYXRhOworICAgICAgICBidWNrZXQtPm5leHQgPSBOVUxMOworICAgICAgICBpZiAoc2FmZSkKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbmV3X2J1Y2tldCA9IHNhZmVfaGFzaGVyIChkc3QsIGRhdGEpOworCisgICAgICAgIGlmIChuZXdfYnVja2V0LT5kYXRhKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEFsbG9jYXRlIG9yIHJlY3ljbGUgYW4gZW50cnksIHdoZW4gbW92aW5nIGZyb20gYSBidWNrZXQKKyAgICAgICAgICAgICAgIGhlYWRlciBpbnRvIGEgYnVja2V0IG92ZXJmbG93LiAgKi8KKyAgICAgICAgICAgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXdfZW50cnkgPSBhbGxvY2F0ZV9lbnRyeSAoZHN0KTsKKworICAgICAgICAgICAgaWYgKG5ld19lbnRyeSA9PSBOVUxMKQorICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIG5ld19lbnRyeS0+ZGF0YSA9IGRhdGE7CisgICAgICAgICAgICBuZXdfZW50cnktPm5leHQgPSBuZXdfYnVja2V0LT5uZXh0OworICAgICAgICAgICAgbmV3X2J1Y2tldC0+bmV4dCA9IG5ld19lbnRyeTsKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBNb3ZlIGZyb20gb25lIGJ1Y2tldCBoZWFkZXIgdG8gYW5vdGhlci4gICovCisgICAgICAgICAgICBuZXdfYnVja2V0LT5kYXRhID0gZGF0YTsKKyAgICAgICAgICAgIGRzdC0+bl9idWNrZXRzX3VzZWQrKzsKKyAgICAgICAgICB9CisgICAgICAgIGJ1Y2tldC0+ZGF0YSA9IE5VTEw7CisgICAgICAgIHNyYy0+bl9idWNrZXRzX3VzZWQtLTsKKyAgICAgIH0KKyAgcmV0dXJuIHRydWU7Cit9CisKIC8qIEZvciBhbiBhbHJlYWR5IGV4aXN0aW5nIGhhc2ggdGFibGUsIGNoYW5nZSB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgdGhyb3VnaAogICAgc3BlY2lmeWluZyBDQU5ESURBVEUuICBUaGUgY29udGVudHMgb2YgdGhlIGhhc2ggdGFibGUgYXJlIHByZXNlcnZlZC4gIFRoZQogICAgbmV3IG51bWJlciBvZiBidWNrZXRzIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgc28gYXMgdG8gX2d1YXJhbnRlZV8gdGhhdAogICAgdGhlIHRhYmxlIG1heSByZWNlaXZlIGF0IGxlYXN0IENBTkRJREFURSBkaWZmZXJlbnQgdXNlciBlbnRyaWVzLCBpbmNsdWRpbmcKICAgIHRob3NlIGFscmVhZHkgaW4gdGhlIHRhYmxlLCBiZWZvcmUgYW55IG90aGVyIGdyb3d0aCBvZiB0aGUgaGFzaCB0YWJsZSBzaXplCiAgICBvY2N1cnMuICBJZiBUVU5JTkctPklTX05fQlVDS0VUUyBpcyB0cnVlLCB0aGVuIENBTkRJREFURSBzcGVjaWZpZXMgdGhlCi0gICBleGFjdCBudW1iZXIgb2YgYnVja2V0cyBkZXNpcmVkLiAgKi8KKyAgIGV4YWN0IG51bWJlciBvZiBidWNrZXRzIGRlc2lyZWQuICBSZXR1cm4gdHJ1ZSBpZmYgdGhlIHJlaGFzaCBzdWNjZWVkZWQuICAqLwogCiBib29sCiBoYXNoX3JlaGFzaCAoSGFzaF90YWJsZSAqdGFibGUsIHNpemVfdCBjYW5kaWRhdGUpCiB7CisgIEhhc2hfdGFibGUgc3RvcmFnZTsKICAgSGFzaF90YWJsZSAqbmV3X3RhYmxlOwotICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OwotICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yOwotICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV4dDsKKyAgc2l6ZV90IG5ld19zaXplID0gY29tcHV0ZV9idWNrZXRfc2l6ZSAoY2FuZGlkYXRlLCB0YWJsZS0+dHVuaW5nKTsKIAotICBuZXdfdGFibGUgPSBoYXNoX2luaXRpYWxpemUgKGNhbmRpZGF0ZSwgdGFibGUtPnR1bmluZywgdGFibGUtPmhhc2hlciwKLQkJCSAgICAgICB0YWJsZS0+Y29tcGFyYXRvciwgdGFibGUtPmRhdGFfZnJlZXIpOwotICBpZiAobmV3X3RhYmxlID09IE5VTEwpCisgIGlmICghbmV3X3NpemUpCiAgICAgcmV0dXJuIGZhbHNlOworICBpZiAobmV3X3NpemUgPT0gdGFibGUtPm5fYnVja2V0cykKKyAgICByZXR1cm4gdHJ1ZTsKKyAgbmV3X3RhYmxlID0gJnN0b3JhZ2U7CisgIG5ld190YWJsZS0+YnVja2V0ID0gY2FsbG9jIChuZXdfc2l6ZSwgc2l6ZW9mICpuZXdfdGFibGUtPmJ1Y2tldCk7CisgIGlmIChuZXdfdGFibGUtPmJ1Y2tldCA9PSBOVUxMKQorICAgIHJldHVybiBmYWxzZTsKKyAgbmV3X3RhYmxlLT5uX2J1Y2tldHMgPSBuZXdfc2l6ZTsKKyAgbmV3X3RhYmxlLT5idWNrZXRfbGltaXQgPSBuZXdfdGFibGUtPmJ1Y2tldCArIG5ld19zaXplOworICBuZXdfdGFibGUtPm5fYnVja2V0c191c2VkID0gMDsKKyAgbmV3X3RhYmxlLT5uX2VudHJpZXMgPSAwOworICBuZXdfdGFibGUtPnR1bmluZyA9IHRhYmxlLT50dW5pbmc7CisgIG5ld190YWJsZS0+aGFzaGVyID0gdGFibGUtPmhhc2hlcjsKKyAgbmV3X3RhYmxlLT5jb21wYXJhdG9yID0gdGFibGUtPmNvbXBhcmF0b3I7CisgIG5ld190YWJsZS0+ZGF0YV9mcmVlciA9IHRhYmxlLT5kYXRhX2ZyZWVyOworCisgIC8qIEluIG9yZGVyIGZvciB0aGUgdHJhbnNmZXIgdG8gc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlLCB3ZSBuZWVkCisgICAgIGFkZGl0aW9uYWwgb3ZlcmZsb3cgZW50cmllcyB3aGVuIGRpc3RpbmN0IGJ1Y2tldHMgaW4gdGhlIG9sZAorICAgICB0YWJsZSBjb2xsaWRlIGludG8gYSBjb21tb24gYnVja2V0IGluIHRoZSBuZXcgdGFibGUuICBUaGUgd29yc3QKKyAgICAgY2FzZSBwb3NzaWJsZSBpcyBhIGhhc2hlciB0aGF0IGdpdmVzIGEgZ29vZCBzcHJlYWQgd2l0aCB0aGUgb2xkCisgICAgIHNpemUsIGJ1dCByZXR1cm5zIGEgY29uc3RhbnQgd2l0aCB0aGUgbmV3IHNpemU7IGlmIHdlIHdlcmUgdG8KKyAgICAgZ3VhcmFudGVlIHRhYmxlLT5uX2J1Y2tldHNfdXNlZC0xIGZyZWUgZW50cmllcyBpbiBhZHZhbmNlLCB0aGVuCisgICAgIHRoZSB0cmFuc2ZlciB3b3VsZCBiZSBndWFyYW50ZWVkIHRvIG5vdCBhbGxvY2F0ZSBtZW1vcnkuCisgICAgIEhvd2V2ZXIsIGZvciBsYXJnZSB0YWJsZXMsIGEgZ3VhcmFudGVlIG9mIG5vIGZ1cnRoZXIgYWxsb2NhdGlvbgorICAgICBpbnRyb2R1Y2VzIGEgbG90IG9mIGV4dHJhIG1lbW9yeSBwcmVzc3VyZSwgYWxsIGZvciBhbiB1bmxpa2VseQorICAgICBjb3JuZXIgY2FzZSAobW9zdCByZWhhc2hlcyByZWR1Y2UsIHJhdGhlciB0aGFuIGluY3JlYXNlLCB0aGUKKyAgICAgbnVtYmVyIG9mIG92ZXJmbG93IGVudHJpZXMgbmVlZGVkKS4gIFNvLCB3ZSBpbnN0ZWFkIGVuc3VyZSB0aGF0CisgICAgIHRoZSB0cmFuc2ZlciBwcm9jZXNzIGNhbiBiZSByZXZlcnNlZCBpZiB3ZSBoaXQgYSBtZW1vcnkKKyAgICAgYWxsb2NhdGlvbiBmYWlsdXJlIG1pZC10cmFuc2Zlci4gICovCiAKICAgLyogTWVyZWx5IHJldXNlIHRoZSBleHRyYSBvbGQgc3BhY2UgaW50byB0aGUgbmV3IHRhYmxlLiAgKi8KICNpZiBVU0VfT0JTVEFDSwotICBvYnN0YWNrX2ZyZWUgKCZuZXdfdGFibGUtPmVudHJ5X3N0YWNrLCBOVUxMKTsKICAgbmV3X3RhYmxlLT5lbnRyeV9zdGFjayA9IHRhYmxlLT5lbnRyeV9zdGFjazsKICNlbmRpZgogICBuZXdfdGFibGUtPmZyZWVfZW50cnlfbGlzdCA9IHRhYmxlLT5mcmVlX2VudHJ5X2xpc3Q7CiAKLSAgZm9yIChidWNrZXQgPSB0YWJsZS0+YnVja2V0OyBidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0OyBidWNrZXQrKykKLSAgICBpZiAoYnVja2V0LT5kYXRhKQotICAgICAgZm9yIChjdXJzb3IgPSBidWNrZXQ7IGN1cnNvcjsgY3Vyc29yID0gbmV4dCkKLQl7Ci0JICB2b2lkICpkYXRhID0gY3Vyc29yLT5kYXRhOwotCSAgc3RydWN0IGhhc2hfZW50cnkgKm5ld19idWNrZXQKLQkgICAgPSAobmV3X3RhYmxlLT5idWNrZXQKLQkgICAgICAgKyBuZXdfdGFibGUtPmhhc2hlciAoZGF0YSwgbmV3X3RhYmxlLT5uX2J1Y2tldHMpKTsKKyAgaWYgKHRyYW5zZmVyX2VudHJpZXMgKG5ld190YWJsZSwgdGFibGUsIGZhbHNlKSkKKyAgICB7CisgICAgICAvKiBFbnRyaWVzIHRyYW5zZmVycmVkIHN1Y2Nlc3NmdWxseTsgdGllIHVwIHRoZSBsb29zZSBlbmRzLiAgKi8KKyAgICAgIGZyZWUgKHRhYmxlLT5idWNrZXQpOworICAgICAgdGFibGUtPmJ1Y2tldCA9IG5ld190YWJsZS0+YnVja2V0OworICAgICAgdGFibGUtPmJ1Y2tldF9saW1pdCA9IG5ld190YWJsZS0+YnVja2V0X2xpbWl0OworICAgICAgdGFibGUtPm5fYnVja2V0cyA9IG5ld190YWJsZS0+bl9idWNrZXRzOworICAgICAgdGFibGUtPm5fYnVja2V0c191c2VkID0gbmV3X3RhYmxlLT5uX2J1Y2tldHNfdXNlZDsKKyAgICAgIHRhYmxlLT5mcmVlX2VudHJ5X2xpc3QgPSBuZXdfdGFibGUtPmZyZWVfZW50cnlfbGlzdDsKKyAgICAgIC8qIHRhYmxlLT5uX2VudHJpZXMgYW5kIHRhYmxlLT5lbnRyeV9zdGFjayBhbHJlYWR5IGhvbGQgdGhlaXIgdmFsdWUuICAqLworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCi0JICBpZiAoISAobmV3X2J1Y2tldCA8IG5ld190YWJsZS0+YnVja2V0X2xpbWl0KSkKLQkgICAgYWJvcnQgKCk7CisgIC8qIFdlJ3ZlIGFsbG9jYXRlZCBuZXdfdGFibGUtPmJ1Y2tldCAoYW5kIHBvc3NpYmx5IHNvbWUgZW50cmllcyksCisgICAgIGV4aGF1c3RlZCB0aGUgZnJlZSBsaXN0LCBhbmQgbW92ZWQgc29tZSBidXQgbm90IGFsbCBlbnRyaWVzIGludG8KKyAgICAgbmV3X3RhYmxlLiAgV2UgbXVzdCB1bmRvIHRoZSBwYXJ0aWFsIG1vdmUgYmVmb3JlIHJldHVybmluZworICAgICBmYWlsdXJlLiAgVGhlIG9ubHkgd2F5IHRvIGdldCBpbnRvIHRoaXMgc2l0dWF0aW9uIGlzIGlmIG5ld190YWJsZQorICAgICB1c2VzIGZld2VyIGJ1Y2tldHMgdGhhbiB0aGUgb2xkIHRhYmxlLCBzbyB3ZSB3aWxsIHJlY2xhaW0gc29tZQorICAgICBmcmVlIGVudHJpZXMgYXMgb3ZlcmZsb3dzIGluIHRoZSBuZXcgdGFibGUgYXJlIHB1dCBiYWNrIGludG8KKyAgICAgZGlzdGluY3QgYnVja2V0cyBpbiB0aGUgb2xkIHRhYmxlLgogCi0JICBuZXh0ID0gY3Vyc29yLT5uZXh0OwotCi0JICBpZiAobmV3X2J1Y2tldC0+ZGF0YSkKLQkgICAgewotCSAgICAgIGlmIChjdXJzb3IgPT0gYnVja2V0KQotCQl7Ci0JCSAgLyogQWxsb2NhdGUgb3IgcmVjeWNsZSBhbiBlbnRyeSwgd2hlbiBtb3ZpbmcgZnJvbSBhIGJ1Y2tldAotCQkgICAgIGhlYWRlciBpbnRvIGEgYnVja2V0IG92ZXJmbG93LiAgKi8KLQkJICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV3X2VudHJ5ID0gYWxsb2NhdGVfZW50cnkgKG5ld190YWJsZSk7Ci0KLQkJICBpZiAobmV3X2VudHJ5ID09IE5VTEwpCi0JCSAgICByZXR1cm4gZmFsc2U7Ci0KLQkJICBuZXdfZW50cnktPmRhdGEgPSBkYXRhOwotCQkgIG5ld19lbnRyeS0+bmV4dCA9IG5ld19idWNrZXQtPm5leHQ7Ci0JCSAgbmV3X2J1Y2tldC0+bmV4dCA9IG5ld19lbnRyeTsKLQkJfQotCSAgICAgIGVsc2UKLQkJewotCQkgIC8qIE1lcmVseSByZWxpbmsgYW4gZXhpc3RpbmcgZW50cnksIHdoZW4gbW92aW5nIGZyb20gYQotCQkgICAgIGJ1Y2tldCBvdmVyZmxvdyBpbnRvIGEgYnVja2V0IG92ZXJmbG93LiAgKi8KLQkJICBjdXJzb3ItPm5leHQgPSBuZXdfYnVja2V0LT5uZXh0OwotCQkgIG5ld19idWNrZXQtPm5leHQgPSBjdXJzb3I7Ci0JCX0KLQkgICAgfQotCSAgZWxzZQotCSAgICB7Ci0JICAgICAgLyogRnJlZSBhbiBleGlzdGluZyBlbnRyeSwgd2hlbiBtb3ZpbmcgZnJvbSBhIGJ1Y2tldAotCQkgb3ZlcmZsb3cgaW50byBhIGJ1Y2tldCBoZWFkZXIuICBBbHNvIHRha2UgY2FyZSBvZiB0aGUKLQkJIHNpbXBsZSBjYXNlIG9mIG1vdmluZyBmcm9tIGEgYnVja2V0IGhlYWRlciBpbnRvIGEgYnVja2V0Ci0JCSBoZWFkZXIuICAqLwotCSAgICAgIG5ld19idWNrZXQtPmRhdGEgPSBkYXRhOwotCSAgICAgIG5ld190YWJsZS0+bl9idWNrZXRzX3VzZWQrKzsKLQkgICAgICBpZiAoY3Vyc29yICE9IGJ1Y2tldCkKLQkJZnJlZV9lbnRyeSAobmV3X3RhYmxlLCBjdXJzb3IpOwotCSAgICB9Ci0JfQotCi0gIGZyZWUgKHRhYmxlLT5idWNrZXQpOwotICB0YWJsZS0+YnVja2V0ID0gbmV3X3RhYmxlLT5idWNrZXQ7Ci0gIHRhYmxlLT5idWNrZXRfbGltaXQgPSBuZXdfdGFibGUtPmJ1Y2tldF9saW1pdDsKLSAgdGFibGUtPm5fYnVja2V0cyA9IG5ld190YWJsZS0+bl9idWNrZXRzOwotICB0YWJsZS0+bl9idWNrZXRzX3VzZWQgPSBuZXdfdGFibGUtPm5fYnVja2V0c191c2VkOworICAgICBUaGVyZSBhcmUgc29tZSBwYXRob2xvZ2ljYWwgY2FzZXMgd2hlcmUgYSBzaW5nbGUgcGFzcyB0aHJvdWdoIHRoZQorICAgICB0YWJsZSByZXF1aXJlcyBtb3JlIGludGVybWVkaWF0ZSBvdmVyZmxvdyBlbnRyaWVzIHRoYW4gdXNpbmcgdHdvCisgICAgIHBhc3Nlcy4gIFR3byBwYXNzZXMgZ2l2ZSB3b3JzZSBjYWNoZSBwZXJmb3JtYW5jZSBhbmQgdGFrZXMKKyAgICAgbG9uZ2VyLCBidXQgYXQgdGhpcyBwb2ludCwgd2UncmUgYWxyZWFkeSBvdXQgb2YgbWVtb3J5LCBzbyBzbG93CisgICAgIGFuZCBzYWZlIGlzIGJldHRlciB0aGFuIGZhaWx1cmUuICAqLwogICB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0ID0gbmV3X3RhYmxlLT5mcmVlX2VudHJ5X2xpc3Q7CisgIGlmICghICh0cmFuc2Zlcl9lbnRyaWVzICh0YWJsZSwgbmV3X3RhYmxlLCB0cnVlKQorICAgICAgICAgJiYgdHJhbnNmZXJfZW50cmllcyAodGFibGUsIG5ld190YWJsZSwgZmFsc2UpKSkKKyAgICBhYm9ydCAoKTsKICAgLyogdGFibGUtPm5fZW50cmllcyBhbHJlYWR5IGhvbGRzIGl0cyB2YWx1ZS4gICovCi0jaWYgVVNFX09CU1RBQ0sKLSAgdGFibGUtPmVudHJ5X3N0YWNrID0gbmV3X3RhYmxlLT5lbnRyeV9zdGFjazsKLSNlbmRpZgotICBmcmVlIChuZXdfdGFibGUpOwotCi0gIHJldHVybiB0cnVlOworICBmcmVlIChuZXdfdGFibGUtPmJ1Y2tldCk7CisgIHJldHVybiBmYWxzZTsKIH0KIAotLyogSWYgRU5UUlkgbWF0Y2hlcyBhbiBlbnRyeSBhbHJlYWR5IGluIHRoZSBoYXNoIHRhYmxlLCByZXR1cm4gdGhlIHBvaW50ZXIKLSAgIHRvIHRoZSBlbnRyeSBmcm9tIHRoZSB0YWJsZS4gIE90aGVyd2lzZSwgaW5zZXJ0IEVOVFJZIGFuZCByZXR1cm4gRU5UUlkuCi0gICBSZXR1cm4gTlVMTCBpZiB0aGUgc3RvcmFnZSByZXF1aXJlZCBmb3IgaW5zZXJ0aW9uIGNhbm5vdCBiZSBhbGxvY2F0ZWQuICAqLworLyogSW5zZXJ0IEVOVFJZIGludG8gaGFzaCBUQUJMRSBpZiB0aGVyZSBpcyBub3QgYWxyZWFkeSBhIG1hdGNoaW5nIGVudHJ5LgogCi12b2lkICoKLWhhc2hfaW5zZXJ0IChIYXNoX3RhYmxlICp0YWJsZSwgY29uc3Qgdm9pZCAqZW50cnkpCisgICBSZXR1cm4gLTEgdXBvbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLgorICAgUmV0dXJuIDEgaWYgaW5zZXJ0aW9uIHN1Y2NlZWRlZC4KKyAgIFJldHVybiAwIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBtYXRjaGluZyBlbnRyeSBpbiB0aGUgdGFibGUsCisgICBhbmQgaW4gdGhhdCBjYXNlLCBpZiBNQVRDSEVEX0VOVCBpcyBub24tTlVMTCwgc2V0ICpNQVRDSEVEX0VOVAorICAgdG8gdGhhdCBlbnRyeS4KKworICAgVGhpcyBpbnRlcmZhY2UgaXMgZWFzaWVyIHRvIHVzZSB0aGFuIGhhc2hfaW5zZXJ0IHdoZW4geW91IG11c3QKKyAgIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGxhdHRlciB0d28gY2FzZXMuICBNb3JlIGltcG9ydGFudGx5LAorICAgaGFzaF9pbnNlcnQgaXMgdW51c2FibGUgZm9yIHNvbWUgdHlwZXMgb2YgRU5UUlkgdmFsdWVzLiAgV2hlbiB1c2luZworICAgaGFzaF9pbnNlcnQsIHRoZSBvbmx5IHdheSB0byBkaXN0aW5ndWlzaCB0aG9zZSBjYXNlcyBpcyB0byBjb21wYXJlCisgICB0aGUgcmV0dXJuIHZhbHVlIGFuZCBFTlRSWS4gIFRoYXQgd29ya3Mgb25seSB3aGVuIHlvdSBjYW4gaGF2ZSB0d28KKyAgIGRpZmZlcmVudCBFTlRSWSB2YWx1ZXMgdGhhdCBwb2ludCB0byBkYXRhIHRoYXQgY29tcGFyZXMgImVxdWFsIi4gIFRodXMsCisgICB3aGVuIHRoZSBFTlRSWSB2YWx1ZSBpcyBhIHNpbXBsZSBzY2FsYXIsIHlvdSBtdXN0IHVzZQorICAgaGFzaF9pbnNlcnRfaWZfYWJzZW50LiAgRU5UUlkgbXVzdCBub3QgYmUgTlVMTC4gICovCitpbnQKK2hhc2hfaW5zZXJ0X2lmX2Fic2VudCAoSGFzaF90YWJsZSAqdGFibGUsIHZvaWQgY29uc3QgKmVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICB2b2lkIGNvbnN0ICoqbWF0Y2hlZF9lbnQpCiB7CiAgIHZvaWQgKmRhdGE7CiAgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7CiAKLSAgLyogVGhlIGNhbGxlciBjYW5ub3QgaW5zZXJ0IGEgTlVMTCBlbnRyeS4gICovCisgIC8qIFRoZSBjYWxsZXIgY2Fubm90IGluc2VydCBhIE5VTEwgZW50cnksIHNpbmNlIGhhc2hfbG9va3VwIHJldHVybnMgTlVMTAorICAgICB0byBpbmRpY2F0ZSAibm90IGZvdW5kIiwgYW5kIGhhc2hfZmluZF9lbnRyeSB1c2VzICJidWNrZXQtPmRhdGEgPT0gTlVMTCIKKyAgICAgdG8gaW5kaWNhdGUgYW4gZW1wdHkgYnVja2V0LiAgKi8KICAgaWYgKCEgZW50cnkpCiAgICAgYWJvcnQgKCk7CiAKICAgLyogSWYgdGhlcmUncyBhIG1hdGNoaW5nIGVudHJ5IGFscmVhZHkgaW4gdGhlIHRhYmxlLCByZXR1cm4gdGhhdC4gICovCiAgIGlmICgoZGF0YSA9IGhhc2hfZmluZF9lbnRyeSAodGFibGUsIGVudHJ5LCAmYnVja2V0LCBmYWxzZSkpICE9IE5VTEwpCi0gICAgcmV0dXJuIGRhdGE7Ci0KLSAgLyogRU5UUlkgaXMgbm90IG1hdGNoZWQsIGl0IHNob3VsZCBiZSBpbnNlcnRlZC4gICovCi0KLSAgaWYgKGJ1Y2tldC0+ZGF0YSkKICAgICB7Ci0gICAgICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV3X2VudHJ5ID0gYWxsb2NhdGVfZW50cnkgKHRhYmxlKTsKLQotICAgICAgaWYgKG5ld19lbnRyeSA9PSBOVUxMKQotCXJldHVybiBOVUxMOwotCi0gICAgICAvKiBBZGQgRU5UUlkgaW4gdGhlIG92ZXJmbG93IG9mIHRoZSBidWNrZXQuICAqLwotCi0gICAgICBuZXdfZW50cnktPmRhdGEgPSAodm9pZCAqKSBlbnRyeTsKLSAgICAgIG5ld19lbnRyeS0+bmV4dCA9IGJ1Y2tldC0+bmV4dDsKLSAgICAgIGJ1Y2tldC0+bmV4dCA9IG5ld19lbnRyeTsKLSAgICAgIHRhYmxlLT5uX2VudHJpZXMrKzsKLSAgICAgIHJldHVybiAodm9pZCAqKSBlbnRyeTsKKyAgICAgIGlmIChtYXRjaGVkX2VudCkKKyAgICAgICAgKm1hdGNoZWRfZW50ID0gZGF0YTsKKyAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAvKiBBZGQgRU5UUlkgcmlnaHQgaW4gdGhlIGJ1Y2tldCBoZWFkLiAgKi8KLQotICBidWNrZXQtPmRhdGEgPSAodm9pZCAqKSBlbnRyeTsKLSAgdGFibGUtPm5fZW50cmllcysrOwotICB0YWJsZS0+bl9idWNrZXRzX3VzZWQrKzsKLQogICAvKiBJZiB0aGUgZ3Jvd3RoIHRocmVzaG9sZCBvZiB0aGUgYnVja2V0cyBpbiB1c2UgaGFzIGJlZW4gcmVhY2hlZCwgaW5jcmVhc2UKICAgICAgdGhlIHRhYmxlIHNpemUgYW5kIHJlaGFzaC4gIFRoZXJlJ3Mgbm8gcG9pbnQgaW4gY2hlY2tpbmcgdGhlIG51bWJlciBvZgogICAgICBlbnRyaWVzOiAgaWYgdGhlIGhhc2hpbmcgZnVuY3Rpb24gaXMgaWxsLWNvbmRpdGlvbmVkLCByZWhhc2hpbmcgaXMgbm90CkBAIC05NTEsMjggKzEwNjQsODAgQEAKICAgICAgID4gdGFibGUtPnR1bmluZy0+Z3Jvd3RoX3RocmVzaG9sZCAqIHRhYmxlLT5uX2J1Y2tldHMpCiAgICAgewogICAgICAgLyogQ2hlY2sgbW9yZSBmdWxseSwgYmVmb3JlIHN0YXJ0aW5nIHJlYWwgd29yay4gIElmIHR1bmluZyBhcmd1bWVudHMKLQkgYmVjYW1lIGludmFsaWQsIHRoZSBzZWNvbmQgY2hlY2sgd2lsbCByZWx5IG9uIHByb3BlciBkZWZhdWx0cy4gICovCisgICAgICAgICBiZWNhbWUgaW52YWxpZCwgdGhlIHNlY29uZCBjaGVjayB3aWxsIHJlbHkgb24gcHJvcGVyIGRlZmF1bHRzLiAgKi8KICAgICAgIGNoZWNrX3R1bmluZyAodGFibGUpOwogICAgICAgaWYgKHRhYmxlLT5uX2J1Y2tldHNfdXNlZAotCSAgPiB0YWJsZS0+dHVuaW5nLT5ncm93dGhfdGhyZXNob2xkICogdGFibGUtPm5fYnVja2V0cykKLQl7Ci0JICBjb25zdCBIYXNoX3R1bmluZyAqdHVuaW5nID0gdGFibGUtPnR1bmluZzsKLQkgIGZsb2F0IGNhbmRpZGF0ZSA9Ci0JICAgICh0dW5pbmctPmlzX25fYnVja2V0cwotCSAgICAgPyAodGFibGUtPm5fYnVja2V0cyAqIHR1bmluZy0+Z3Jvd3RoX2ZhY3RvcikKLQkgICAgIDogKHRhYmxlLT5uX2J1Y2tldHMgKiB0dW5pbmctPmdyb3d0aF9mYWN0b3IKLQkJKiB0dW5pbmctPmdyb3d0aF90aHJlc2hvbGQpKTsKKyAgICAgICAgICA+IHRhYmxlLT50dW5pbmctPmdyb3d0aF90aHJlc2hvbGQgKiB0YWJsZS0+bl9idWNrZXRzKQorICAgICAgICB7CisgICAgICAgICAgY29uc3QgSGFzaF90dW5pbmcgKnR1bmluZyA9IHRhYmxlLT50dW5pbmc7CisgICAgICAgICAgZmxvYXQgY2FuZGlkYXRlID0KKyAgICAgICAgICAgICh0dW5pbmctPmlzX25fYnVja2V0cworICAgICAgICAgICAgID8gKHRhYmxlLT5uX2J1Y2tldHMgKiB0dW5pbmctPmdyb3d0aF9mYWN0b3IpCisgICAgICAgICAgICAgOiAodGFibGUtPm5fYnVja2V0cyAqIHR1bmluZy0+Z3Jvd3RoX2ZhY3RvcgorICAgICAgICAgICAgICAgICogdHVuaW5nLT5ncm93dGhfdGhyZXNob2xkKSk7CiAKLQkgIGlmIChTSVpFX01BWCA8PSBjYW5kaWRhdGUpCi0JICAgIHJldHVybiBOVUxMOworICAgICAgICAgIGlmIChTSVpFX01BWCA8PSBjYW5kaWRhdGUpCisgICAgICAgICAgICByZXR1cm4gLTE7CiAKLQkgIC8qIElmIHRoZSByZWhhc2ggZmFpbHMsIGFycmFuZ2UgdG8gcmV0dXJuIE5VTEwuICAqLwotCSAgaWYgKCFoYXNoX3JlaGFzaCAodGFibGUsIGNhbmRpZGF0ZSkpCi0JICAgIGVudHJ5ID0gTlVMTDsKLQl9CisgICAgICAgICAgLyogSWYgdGhlIHJlaGFzaCBmYWlscywgYXJyYW5nZSB0byByZXR1cm4gTlVMTC4gICovCisgICAgICAgICAgaWYgKCFoYXNoX3JlaGFzaCAodGFibGUsIGNhbmRpZGF0ZSkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgICAvKiBVcGRhdGUgdGhlIGJ1Y2tldCB3ZSBhcmUgaW50ZXJlc3RlZCBpbi4gICovCisgICAgICAgICAgaWYgKGhhc2hfZmluZF9lbnRyeSAodGFibGUsIGVudHJ5LCAmYnVja2V0LCBmYWxzZSkgIT0gTlVMTCkKKyAgICAgICAgICAgIGFib3J0ICgpOworICAgICAgICB9CiAgICAgfQogCi0gIHJldHVybiAodm9pZCAqKSBlbnRyeTsKKyAgLyogRU5UUlkgaXMgbm90IG1hdGNoZWQsIGl0IHNob3VsZCBiZSBpbnNlcnRlZC4gICovCisKKyAgaWYgKGJ1Y2tldC0+ZGF0YSkKKyAgICB7CisgICAgICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV3X2VudHJ5ID0gYWxsb2NhdGVfZW50cnkgKHRhYmxlKTsKKworICAgICAgaWYgKG5ld19lbnRyeSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgIC8qIEFkZCBFTlRSWSBpbiB0aGUgb3ZlcmZsb3cgb2YgdGhlIGJ1Y2tldC4gICovCisKKyAgICAgIG5ld19lbnRyeS0+ZGF0YSA9ICh2b2lkICopIGVudHJ5OworICAgICAgbmV3X2VudHJ5LT5uZXh0ID0gYnVja2V0LT5uZXh0OworICAgICAgYnVja2V0LT5uZXh0ID0gbmV3X2VudHJ5OworICAgICAgdGFibGUtPm5fZW50cmllcysrOworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgIC8qIEFkZCBFTlRSWSByaWdodCBpbiB0aGUgYnVja2V0IGhlYWQuICAqLworCisgIGJ1Y2tldC0+ZGF0YSA9ICh2b2lkICopIGVudHJ5OworICB0YWJsZS0+bl9lbnRyaWVzKys7CisgIHRhYmxlLT5uX2J1Y2tldHNfdXNlZCsrOworCisgIHJldHVybiAxOworfQorCisvKiBoYXNoX2luc2VydDAgaXMgdGhlIGRlcHJlY2F0ZWQgbmFtZSBmb3IgaGFzaF9pbnNlcnRfaWZfYWJzZW50LgorICAgLiAgKi8KK2ludAoraGFzaF9pbnNlcnQwIChIYXNoX3RhYmxlICp0YWJsZSwgdm9pZCBjb25zdCAqZW50cnksIHZvaWQgY29uc3QgKiptYXRjaGVkX2VudCkKK3sKKyAgcmV0dXJuIGhhc2hfaW5zZXJ0X2lmX2Fic2VudCAodGFibGUsIGVudHJ5LCBtYXRjaGVkX2VudCk7Cit9CisKKy8qIElmIEVOVFJZIG1hdGNoZXMgYW4gZW50cnkgYWxyZWFkeSBpbiB0aGUgaGFzaCB0YWJsZSwgcmV0dXJuIHRoZSBwb2ludGVyCisgICB0byB0aGUgZW50cnkgZnJvbSB0aGUgdGFibGUuICBPdGhlcndpc2UsIGluc2VydCBFTlRSWSBhbmQgcmV0dXJuIEVOVFJZLgorICAgUmV0dXJuIE5VTEwgaWYgdGhlIHN0b3JhZ2UgcmVxdWlyZWQgZm9yIGluc2VydGlvbiBjYW5ub3QgYmUgYWxsb2NhdGVkLgorICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGR1cGxpY2F0ZSBlbnRyaWVzIG9yIGluc2VydGlvbiBvZgorICAgTlVMTC4gICovCisKK3ZvaWQgKgoraGFzaF9pbnNlcnQgKEhhc2hfdGFibGUgKnRhYmxlLCB2b2lkIGNvbnN0ICplbnRyeSkKK3sKKyAgdm9pZCBjb25zdCAqbWF0Y2hlZF9lbnQ7CisgIGludCBlcnIgPSBoYXNoX2luc2VydF9pZl9hYnNlbnQgKHRhYmxlLCBlbnRyeSwgJm1hdGNoZWRfZW50KTsKKyAgcmV0dXJuIChlcnIgPT0gLTEKKyAgICAgICAgICA/IE5VTEwKKyAgICAgICAgICA6ICh2b2lkICopIChlcnIgPT0gMCA/IG1hdGNoZWRfZW50IDogZW50cnkpKTsKIH0KIAogLyogSWYgRU5UUlkgaXMgYWxyZWFkeSBpbiB0aGUgdGFibGUsIHJlbW92ZSBpdCBhbmQgcmV0dXJuIHRoZSBqdXN0LWRlbGV0ZWQKQEAgLTk5NSwyNyArMTE2MCw0NSBAQAogICAgICAgdGFibGUtPm5fYnVja2V0c191c2VkLS07CiAKICAgICAgIC8qIElmIHRoZSBzaHJpbmsgdGhyZXNob2xkIG9mIHRoZSBidWNrZXRzIGluIHVzZSBoYXMgYmVlbiByZWFjaGVkLAotCSByZWhhc2ggaW50byBhIHNtYWxsZXIgdGFibGUuICAqLworICAgICAgICAgcmVoYXNoIGludG8gYSBzbWFsbGVyIHRhYmxlLiAgKi8KIAogICAgICAgaWYgKHRhYmxlLT5uX2J1Y2tldHNfdXNlZAotCSAgPCB0YWJsZS0+dHVuaW5nLT5zaHJpbmtfdGhyZXNob2xkICogdGFibGUtPm5fYnVja2V0cykKLQl7Ci0JICAvKiBDaGVjayBtb3JlIGZ1bGx5LCBiZWZvcmUgc3RhcnRpbmcgcmVhbCB3b3JrLiAgSWYgdHVuaW5nIGFyZ3VtZW50cwotCSAgICAgYmVjYW1lIGludmFsaWQsIHRoZSBzZWNvbmQgY2hlY2sgd2lsbCByZWx5IG9uIHByb3BlciBkZWZhdWx0cy4gICovCi0JICBjaGVja190dW5pbmcgKHRhYmxlKTsKLQkgIGlmICh0YWJsZS0+bl9idWNrZXRzX3VzZWQKLQkgICAgICA8IHRhYmxlLT50dW5pbmctPnNocmlua190aHJlc2hvbGQgKiB0YWJsZS0+bl9idWNrZXRzKQotCSAgICB7Ci0JICAgICAgY29uc3QgSGFzaF90dW5pbmcgKnR1bmluZyA9IHRhYmxlLT50dW5pbmc7Ci0JICAgICAgc2l6ZV90IGNhbmRpZGF0ZSA9Ci0JCSh0dW5pbmctPmlzX25fYnVja2V0cwotCQkgPyB0YWJsZS0+bl9idWNrZXRzICogdHVuaW5nLT5zaHJpbmtfZmFjdG9yCi0JCSA6ICh0YWJsZS0+bl9idWNrZXRzICogdHVuaW5nLT5zaHJpbmtfZmFjdG9yCi0JCSAgICAqIHR1bmluZy0+Z3Jvd3RoX3RocmVzaG9sZCkpOworICAgICAgICAgIDwgdGFibGUtPnR1bmluZy0+c2hyaW5rX3RocmVzaG9sZCAqIHRhYmxlLT5uX2J1Y2tldHMpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBDaGVjayBtb3JlIGZ1bGx5LCBiZWZvcmUgc3RhcnRpbmcgcmVhbCB3b3JrLiAgSWYgdHVuaW5nIGFyZ3VtZW50cworICAgICAgICAgICAgIGJlY2FtZSBpbnZhbGlkLCB0aGUgc2Vjb25kIGNoZWNrIHdpbGwgcmVseSBvbiBwcm9wZXIgZGVmYXVsdHMuICAqLworICAgICAgICAgIGNoZWNrX3R1bmluZyAodGFibGUpOworICAgICAgICAgIGlmICh0YWJsZS0+bl9idWNrZXRzX3VzZWQKKyAgICAgICAgICAgICAgPCB0YWJsZS0+dHVuaW5nLT5zaHJpbmtfdGhyZXNob2xkICogdGFibGUtPm5fYnVja2V0cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY29uc3QgSGFzaF90dW5pbmcgKnR1bmluZyA9IHRhYmxlLT50dW5pbmc7CisgICAgICAgICAgICAgIHNpemVfdCBjYW5kaWRhdGUgPQorICAgICAgICAgICAgICAgICh0dW5pbmctPmlzX25fYnVja2V0cworICAgICAgICAgICAgICAgICA/IHRhYmxlLT5uX2J1Y2tldHMgKiB0dW5pbmctPnNocmlua19mYWN0b3IKKyAgICAgICAgICAgICAgICAgOiAodGFibGUtPm5fYnVja2V0cyAqIHR1bmluZy0+c2hyaW5rX2ZhY3RvcgorICAgICAgICAgICAgICAgICAgICAqIHR1bmluZy0+Z3Jvd3RoX3RocmVzaG9sZCkpOwogCi0JICAgICAgaGFzaF9yZWhhc2ggKHRhYmxlLCBjYW5kaWRhdGUpOwotCSAgICB9Ci0JfQorICAgICAgICAgICAgICBpZiAoIWhhc2hfcmVoYXNoICh0YWJsZSwgY2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAvKiBGYWlsdXJlIHRvIGFsbG9jYXRlIG1lbW9yeSBpbiBhbiBhdHRlbXB0IHRvCisgICAgICAgICAgICAgICAgICAgICBzaHJpbmsgdGhlIHRhYmxlIGlzIG5vdCBmYXRhbC4gIEJ1dCBzaW5jZSBtZW1vcnkKKyAgICAgICAgICAgICAgICAgICAgIGlzIGxvdywgd2UgY2FuIGF0IGxlYXN0IGJlIGtpbmQgYW5kIGZyZWUgYW55CisgICAgICAgICAgICAgICAgICAgICBzcGFyZSBlbnRyaWVzLCByYXRoZXIgdGhhbiBrZWVwaW5nIHRoZW0gdGllZCB1cAorICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGZyZWUgZW50cnkgbGlzdC4gICovCisjaWYgISBVU0VfT0JTVEFDSworICAgICAgICAgICAgICAgICAgc3RydWN0IGhhc2hfZW50cnkgKmN1cnNvciA9IHRhYmxlLT5mcmVlX2VudHJ5X2xpc3Q7CisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV4dDsKKyAgICAgICAgICAgICAgICAgIHdoaWxlIChjdXJzb3IpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gY3Vyc29yLT5uZXh0OworICAgICAgICAgICAgICAgICAgICAgIGZyZWUgKGN1cnNvcik7CisgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gbmV4dDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgdGFibGUtPmZyZWVfZW50cnlfbGlzdCA9IE5VTEw7CisjZW5kaWYKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKICAgcmV0dXJuIGRhdGE7CkBAIC0xMDI4LDIyICsxMjExLDIyIEBACiB2b2lkCiBoYXNoX3ByaW50IChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSkKIHsKLSAgc3RydWN0IGhhc2hfZW50cnkgY29uc3QgKmJ1Y2tldDsKKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldCA9IChzdHJ1Y3QgaGFzaF9lbnRyeSAqKSB0YWJsZS0+YnVja2V0OwogCi0gIGZvciAoYnVja2V0ID0gdGFibGUtPmJ1Y2tldDsgYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdDsgYnVja2V0KyspCisgIGZvciAoIDsgYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdDsgYnVja2V0KyspCiAgICAgewogICAgICAgc3RydWN0IGhhc2hfZW50cnkgKmN1cnNvcjsKIAogICAgICAgaWYgKGJ1Y2tldCkKLQlwcmludGYgKCIlbHU6XG4iLCAodW5zaWduZWQgbG9uZyBpbnQpIChidWNrZXQgLSB0YWJsZS0+YnVja2V0KSk7CisgICAgICAgIHByaW50ZiAoIiVsdTpcbiIsICh1bnNpZ25lZCBsb25nIGludCkgKGJ1Y2tldCAtIHRhYmxlLT5idWNrZXQpKTsKIAogICAgICAgZm9yIChjdXJzb3IgPSBidWNrZXQ7IGN1cnNvcjsgY3Vyc29yID0gY3Vyc29yLT5uZXh0KQotCXsKLQkgIGNoYXIgY29uc3QgKnMgPSBjdXJzb3ItPmRhdGE7Ci0JICAvKiBGSVhNRSAqLwotCSAgaWYgKHMpCi0JICAgIHByaW50ZiAoIiAgJXNcbiIsIHMpOwotCX0KKyAgICAgICAgeworICAgICAgICAgIGNoYXIgY29uc3QgKnMgPSBjdXJzb3ItPmRhdGE7CisgICAgICAgICAgLyogRklYTUUgKi8KKyAgICAgICAgICBpZiAocykKKyAgICAgICAgICAgIHByaW50ZiAoIiAgJXNcbiIsIHMpOworICAgICAgICB9CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9saWIvaGFzaC5oIGIvbGliL2hhc2guaAppbmRleCBhYjYzYTg2Li4wNmUzMDNiIDEwMDY0NAotLS0gYS9saWIvaGFzaC5oCisrKyBiL2xpYi9oYXNoLmgKQEAgLTEsMTEgKzEsMTIgQEAKIC8qIGhhc2ggLSBoYXNoaW5nIHRhYmxlIHByb2Nlc3NpbmcuCi0gICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDEsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDE5OTgtMTk5OSwgMjAwMSwgMjAwMywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4KICAgIFdyaXR0ZW4gYnkgSmltIE1leWVyaW5nIDxtZXllcmluZ0Bhc2NlbmQuY29tPiwgMTk5OC4KIAotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpAQCAtMTMsMTMgKzE0LDEyIEBACiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogLyogQSBnZW5lcmljIGhhc2ggdGFibGUgcGFja2FnZS4gICovCiAKIC8qIE1ha2Ugc3VyZSBVU0VfT0JTVEFDSyBpcyBkZWZpbmVkIHRvIDEgaWYgeW91IHdhbnQgdGhlIGFsbG9jYXRvciB0byB1c2UKLSAgIG9ic3RhY2tzIGluc3RlYWQgb2YgbWFsbG9jLCBhbmQgcmVjb21waWxlIGBoYXNoLmMnIHdpdGggc2FtZSBzZXR0aW5nLiAgKi8KKyAgIG9ic3RhY2tzIGluc3RlYWQgb2YgbWFsbG9jLCBhbmQgcmVjb21waWxlICdoYXNoLmMnIHdpdGggc2FtZSBzZXR0aW5nLiAgKi8KIAogI2lmbmRlZiBIQVNIX0hfCiAjIGRlZmluZSBIQVNIX0hfCkBAIC0yNywyNyArMjcsMzkgQEAKICMgaW5jbHVkZSA8c3RkaW8uaD4KICMgaW5jbHVkZSA8c3RkYm9vbC5oPgogCisvKiBUaGUgX19hdHRyaWJ1dGVfXyBmZWF0dXJlIGlzIGF2YWlsYWJsZSBpbiBnY2MgdmVyc2lvbnMgMi41IGFuZCBsYXRlci4KKyAgIFRoZSB3YXJuX3VudXNlZF9yZXN1bHQgYXR0cmlidXRlIGFwcGVhcmVkIGZpcnN0IGluIGdjYy0zLjQuMC4gICovCisjIGlmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0KQorIyAgZGVmaW5lIF9HTF9BVFRSSUJVVEVfV1VSIF9fYXR0cmlidXRlX18gKChfX3dhcm5fdW51c2VkX3Jlc3VsdF9fKSkKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9BVFRSSUJVVEVfV1VSIC8qIGVtcHR5ICovCisjIGVuZGlmCisKKyMgaWZuZGVmIF9HTF9BVFRSSUJVVEVfREVQUkVDQVRFRAorLyogVGhlIF9fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKSkgZmVhdHVyZQorICAgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAzLjEgYW5kIG5ld2VyLiAgKi8KKyMgIGlmIF9fR05VQ19fIDwgMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA8IDEpCisjICAgZGVmaW5lIF9HTF9BVFRSSUJVVEVfREVQUkVDQVRFRCAvKiBlbXB0eSAqLworIyAgZWxzZQorIyAgIGRlZmluZSBfR0xfQVRUUklCVVRFX0RFUFJFQ0FURUQgX19hdHRyaWJ1dGVfXyAoKF9fZGVwcmVjYXRlZF9fKSkKKyMgIGVuZGlmCisjIGVuZGlmCisKIHR5cGVkZWYgc2l6ZV90ICgqSGFzaF9oYXNoZXIpIChjb25zdCB2b2lkICosIHNpemVfdCk7CiB0eXBlZGVmIGJvb2wgKCpIYXNoX2NvbXBhcmF0b3IpIChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CiB0eXBlZGVmIHZvaWQgKCpIYXNoX2RhdGFfZnJlZXIpICh2b2lkICopOwogdHlwZWRlZiBib29sICgqSGFzaF9wcm9jZXNzb3IpICh2b2lkICosIHZvaWQgKik7CiAKLXN0cnVjdCBoYXNoX2VudHJ5Ci0gIHsKLSAgICB2b2lkICpkYXRhOwotICAgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXh0OwotICB9OwotCiBzdHJ1Y3QgaGFzaF90dW5pbmcKICAgewotICAgIC8qIFRoaXMgc3RydWN0dXJlIGlzIG1haW5seSB1c2VkIGZvciBgaGFzaF9pbml0aWFsaXplJywgc2VlIHRoZSBibG9jawotICAgICAgIGRvY3VtZW50YXRpb24gb2YgYGhhc2hfcmVzZXRfdHVuaW5nJyBmb3IgbW9yZSBjb21wbGV0ZSBjb21tZW50cy4gICovCisgICAgLyogVGhpcyBzdHJ1Y3R1cmUgaXMgbWFpbmx5IHVzZWQgZm9yICdoYXNoX2luaXRpYWxpemUnLCBzZWUgdGhlIGJsb2NrCisgICAgICAgZG9jdW1lbnRhdGlvbiBvZiAnaGFzaF9yZXNldF90dW5pbmcnIGZvciBtb3JlIGNvbXBsZXRlIGNvbW1lbnRzLiAgKi8KIAotICAgIGZsb2F0IHNocmlua190aHJlc2hvbGQ7CS8qIHJhdGlvIG9mIHVzZWQgYnVja2V0cyB0byB0cmlnZ2VyIGEgc2hyaW5rICovCi0gICAgZmxvYXQgc2hyaW5rX2ZhY3RvcjsJLyogcmF0aW8gb2YgbmV3IHNtYWxsZXIgc2l6ZSB0byBvcmlnaW5hbCBzaXplICovCi0gICAgZmxvYXQgZ3Jvd3RoX3RocmVzaG9sZDsJLyogcmF0aW8gb2YgdXNlZCBidWNrZXRzIHRvIHRyaWdnZXIgYSBncm93dGggKi8KLSAgICBmbG9hdCBncm93dGhfZmFjdG9yOwkvKiByYXRpbyBvZiBuZXcgYmlnZ2VyIHNpemUgdG8gb3JpZ2luYWwgc2l6ZSAqLwotICAgIGJvb2wgaXNfbl9idWNrZXRzOwkJLyogaWYgQ0FORElEQVRFIHJlYWxseSBtZWFucyB0YWJsZSBzaXplICovCisgICAgZmxvYXQgc2hyaW5rX3RocmVzaG9sZDsgICAgIC8qIHJhdGlvIG9mIHVzZWQgYnVja2V0cyB0byB0cmlnZ2VyIGEgc2hyaW5rICovCisgICAgZmxvYXQgc2hyaW5rX2ZhY3RvcjsgICAgICAgIC8qIHJhdGlvIG9mIG5ldyBzbWFsbGVyIHNpemUgdG8gb3JpZ2luYWwgc2l6ZSAqLworICAgIGZsb2F0IGdyb3d0aF90aHJlc2hvbGQ7ICAgICAvKiByYXRpbyBvZiB1c2VkIGJ1Y2tldHMgdG8gdHJpZ2dlciBhIGdyb3d0aCAqLworICAgIGZsb2F0IGdyb3d0aF9mYWN0b3I7ICAgICAgICAvKiByYXRpbyBvZiBuZXcgYmlnZ2VyIHNpemUgdG8gb3JpZ2luYWwgc2l6ZSAqLworICAgIGJvb2wgaXNfbl9idWNrZXRzOyAgICAgICAgICAvKiBpZiBDQU5ESURBVEUgcmVhbGx5IG1lYW5zIHRhYmxlIHNpemUgKi8KICAgfTsKIAogdHlwZWRlZiBzdHJ1Y3QgaGFzaF90dW5pbmcgSGFzaF90dW5pbmc7CkBAIC01NywzMiArNjksMzkgQEAKIHR5cGVkZWYgc3RydWN0IGhhc2hfdGFibGUgSGFzaF90YWJsZTsKIAogLyogSW5mb3JtYXRpb24gYW5kIGxvb2t1cC4gICovCi1zaXplX3QgaGFzaF9nZXRfbl9idWNrZXRzIChjb25zdCBIYXNoX3RhYmxlICopOwotc2l6ZV90IGhhc2hfZ2V0X25fYnVja2V0c191c2VkIChjb25zdCBIYXNoX3RhYmxlICopOwotc2l6ZV90IGhhc2hfZ2V0X25fZW50cmllcyAoY29uc3QgSGFzaF90YWJsZSAqKTsKLXNpemVfdCBoYXNoX2dldF9tYXhfYnVja2V0X2xlbmd0aCAoY29uc3QgSGFzaF90YWJsZSAqKTsKLWJvb2wgaGFzaF90YWJsZV9vayAoY29uc3QgSGFzaF90YWJsZSAqKTsKK3NpemVfdCBoYXNoX2dldF9uX2J1Y2tldHMgKGNvbnN0IEhhc2hfdGFibGUgKikgX0dMX0FUVFJJQlVURV9QVVJFOworc2l6ZV90IGhhc2hfZ2V0X25fYnVja2V0c191c2VkIChjb25zdCBIYXNoX3RhYmxlICopIF9HTF9BVFRSSUJVVEVfUFVSRTsKK3NpemVfdCBoYXNoX2dldF9uX2VudHJpZXMgKGNvbnN0IEhhc2hfdGFibGUgKikgX0dMX0FUVFJJQlVURV9QVVJFOworc2l6ZV90IGhhc2hfZ2V0X21heF9idWNrZXRfbGVuZ3RoIChjb25zdCBIYXNoX3RhYmxlICopIF9HTF9BVFRSSUJVVEVfUFVSRTsKK2Jvb2wgaGFzaF90YWJsZV9vayAoY29uc3QgSGFzaF90YWJsZSAqKSBfR0xfQVRUUklCVVRFX1BVUkU7CiB2b2lkIGhhc2hfcHJpbnRfc3RhdGlzdGljcyAoY29uc3QgSGFzaF90YWJsZSAqLCBGSUxFICopOwogdm9pZCAqaGFzaF9sb29rdXAgKGNvbnN0IEhhc2hfdGFibGUgKiwgY29uc3Qgdm9pZCAqKTsKIAogLyogV2Fsa2luZy4gICovCi12b2lkICpoYXNoX2dldF9maXJzdCAoY29uc3QgSGFzaF90YWJsZSAqKTsKK3ZvaWQgKmhhc2hfZ2V0X2ZpcnN0IChjb25zdCBIYXNoX3RhYmxlICopIF9HTF9BVFRSSUJVVEVfUFVSRTsKIHZvaWQgKmhhc2hfZ2V0X25leHQgKGNvbnN0IEhhc2hfdGFibGUgKiwgY29uc3Qgdm9pZCAqKTsKIHNpemVfdCBoYXNoX2dldF9lbnRyaWVzIChjb25zdCBIYXNoX3RhYmxlICosIHZvaWQgKiosIHNpemVfdCk7CiBzaXplX3QgaGFzaF9kb19mb3JfZWFjaCAoY29uc3QgSGFzaF90YWJsZSAqLCBIYXNoX3Byb2Nlc3Nvciwgdm9pZCAqKTsKIAogLyogQWxsb2NhdGlvbiBhbmQgY2xlYW4tdXAuICAqLwotc2l6ZV90IGhhc2hfc3RyaW5nIChjb25zdCBjaGFyICosIHNpemVfdCk7CitzaXplX3QgaGFzaF9zdHJpbmcgKGNvbnN0IGNoYXIgKiwgc2l6ZV90KSBfR0xfQVRUUklCVVRFX1BVUkU7CiB2b2lkIGhhc2hfcmVzZXRfdHVuaW5nIChIYXNoX3R1bmluZyAqKTsKIEhhc2hfdGFibGUgKmhhc2hfaW5pdGlhbGl6ZSAoc2l6ZV90LCBjb25zdCBIYXNoX3R1bmluZyAqLAotCQkJICAgICBIYXNoX2hhc2hlciwgSGFzaF9jb21wYXJhdG9yLAotCQkJICAgICBIYXNoX2RhdGFfZnJlZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoX2hhc2hlciwgSGFzaF9jb21wYXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoX2RhdGFfZnJlZXIpIF9HTF9BVFRSSUJVVEVfV1VSOwogdm9pZCBoYXNoX2NsZWFyIChIYXNoX3RhYmxlICopOwogdm9pZCBoYXNoX2ZyZWUgKEhhc2hfdGFibGUgKik7CiAKIC8qIEluc2VydGlvbiBhbmQgZGVsZXRpb24uICAqLwotYm9vbCBoYXNoX3JlaGFzaCAoSGFzaF90YWJsZSAqLCBzaXplX3QpOwotdm9pZCAqaGFzaF9pbnNlcnQgKEhhc2hfdGFibGUgKiwgY29uc3Qgdm9pZCAqKTsKK2Jvb2wgaGFzaF9yZWhhc2ggKEhhc2hfdGFibGUgKiwgc2l6ZV90KSBfR0xfQVRUUklCVVRFX1dVUjsKK3ZvaWQgKmhhc2hfaW5zZXJ0IChIYXNoX3RhYmxlICosIGNvbnN0IHZvaWQgKikgX0dMX0FUVFJJQlVURV9XVVI7CisKKy8qIERlcHJlY2F0ZSB0aGlzIGludGVyZmFjZS4gIEl0IGhhcyBiZWVuIHJlbmFtZWQgdG8gaGFzaF9pbnNlcnRfaWZfYWJzZW50LiAgKi8KK2ludCBoYXNoX2luc2VydDAgKEhhc2hfdGFibGUgKnRhYmxlLCAvKiBGSVhNRTogcmVtb3ZlIGluIDIwMTMgKi8KKyAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmVudHJ5LAorICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqKm1hdGNoZWRfZW50KSBfR0xfQVRUUklCVVRFX0RFUFJFQ0FURUQ7CitpbnQgaGFzaF9pbnNlcnRfaWZfYWJzZW50IChIYXNoX3RhYmxlICp0YWJsZSwgY29uc3Qgdm9pZCAqZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICoqbWF0Y2hlZF9lbnQpOwogdm9pZCAqaGFzaF9kZWxldGUgKEhhc2hfdGFibGUgKiwgY29uc3Qgdm9pZCAqKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvaW50cHJvcHMuaCBiL2xpYi9pbnRwcm9wcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ODVjNzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvaW50cHJvcHMuaApAQCAtMCwwICsxLDMxOSBAQAorLyogaW50cHJvcHMuaCAtLSBwcm9wZXJ0aWVzIG9mIGludGVnZXIgdHlwZXMKKworICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDUsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogV3JpdHRlbiBieSBQYXVsIEVnZ2VydC4gICovCisKKyNpZm5kZWYgX0dMX0lOVFBST1BTX0gKKyNkZWZpbmUgX0dMX0lOVFBST1BTX0gKKworI2luY2x1ZGUgPGxpbWl0cy5oPgorCisvKiBSZXR1cm4gYW4gaW50ZWdlciB2YWx1ZSwgY29udmVydGVkIHRvIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGludGVnZXIKKyAgIGV4cHJlc3Npb24gRSBhZnRlciBpbnRlZ2VyIHR5cGUgcHJvbW90aW9uLiAgViBpcyB0aGUgdW5jb252ZXJ0ZWQgdmFsdWUuICAqLworI2RlZmluZSBfR0xfSU5UX0NPTlZFUlQoZSwgdikgKDAgKiAoZSkgKyAodikpCisKKy8qIEFjdCBsaWtlIF9HTF9JTlRfQ09OVkVSVCAoRSwgLVYpIGJ1dCB3b3JrIGFyb3VuZCBhIGJ1ZyBpbiBJUklYIDYuNSBjYzsgc2VlCisgICA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1nbnVsaWIvMjAxMS0wNS9tc2cwMDQwNi5odG1sPi4gICovCisjZGVmaW5lIF9HTF9JTlRfTkVHQVRFX0NPTlZFUlQoZSwgdikgKDAgKiAoZSkgLSAodikpCisKKy8qIFRoZSBleHRyYSBjYXN0cyBpbiB0aGUgZm9sbG93aW5nIG1hY3JvcyB3b3JrIGFyb3VuZCBjb21waWxlciBidWdzLAorICAgZS5nLiwgaW4gQ3JheSBDIDUuMC4zLjAuICAqLworCisvKiBUcnVlIGlmIHRoZSBhcml0aG1ldGljIHR5cGUgVCBpcyBhbiBpbnRlZ2VyIHR5cGUuICBib29sIGNvdW50cyBhcworICAgYW4gaW50ZWdlci4gICovCisjZGVmaW5lIFRZUEVfSVNfSU5URUdFUih0KSAoKHQpIDEuNSA9PSAxKQorCisvKiBUcnVlIGlmIG5lZ2F0aXZlIHZhbHVlcyBvZiB0aGUgc2lnbmVkIGludGVnZXIgdHlwZSBUIHVzZSB0d28ncworICAgY29tcGxlbWVudCwgb25lcycgY29tcGxlbWVudCwgb3Igc2lnbmVkIG1hZ25pdHVkZSByZXByZXNlbnRhdGlvbiwKKyAgIHJlc3BlY3RpdmVseS4gIE11Y2ggR05VIGNvZGUgYXNzdW1lcyB0d28ncyBjb21wbGVtZW50LCBidXQgc29tZQorICAgcGVvcGxlIGxpa2UgdG8gYmUgcG9ydGFibGUgdG8gYWxsIHBvc3NpYmxlIEMgaG9zdHMuICAqLworI2RlZmluZSBUWVBFX1RXT1NfQ09NUExFTUVOVCh0KSAoKHQpIH4gKHQpIDAgPT0gKHQpIC0xKQorI2RlZmluZSBUWVBFX09ORVNfQ09NUExFTUVOVCh0KSAoKHQpIH4gKHQpIDAgPT0gMCkKKyNkZWZpbmUgVFlQRV9TSUdORURfTUFHTklUVURFKHQpICgodCkgfiAodCkgMCA8ICh0KSAtMSkKKworLyogVHJ1ZSBpZiB0aGUgc2lnbmVkIGludGVnZXIgZXhwcmVzc2lvbiBFIHVzZXMgdHdvJ3MgY29tcGxlbWVudC4gICovCisjZGVmaW5lIF9HTF9JTlRfVFdPU19DT01QTEVNRU5UKGUpICh+IF9HTF9JTlRfQ09OVkVSVCAoZSwgMCkgPT0gLTEpCisKKy8qIFRydWUgaWYgdGhlIGFyaXRobWV0aWMgdHlwZSBUIGlzIHNpZ25lZC4gICovCisjZGVmaW5lIFRZUEVfU0lHTkVEKHQpICghICgodCkgMCA8ICh0KSAtMSkpCisKKy8qIFJldHVybiAxIGlmIHRoZSBpbnRlZ2VyIGV4cHJlc3Npb24gRSwgYWZ0ZXIgaW50ZWdlciBwcm9tb3Rpb24sIGhhcworICAgYSBzaWduZWQgdHlwZS4gICovCisjZGVmaW5lIF9HTF9JTlRfU0lHTkVEKGUpIChfR0xfSU5UX05FR0FURV9DT05WRVJUIChlLCAxKSA8IDApCisKKworLyogTWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMgZm9yIGludGVnZXIgdHlwZXMgYW5kIGV4cHJlc3Npb25zLiAgVGhlc2UKKyAgIG1hY3JvcyBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciBpZiBUIGlzIHNpZ25lZCBhbmQgaGFzIHBhZGRpbmcgYml0cy4KKyAgIElmIHRoaXMgaXMgYSBwcm9ibGVtIGZvciB5b3UsIHBsZWFzZSBsZXQgdXMga25vdyBob3cgdG8gZml4IGl0IGZvcgorICAgeW91ciBob3N0LiAgKi8KKworLyogVGhlIG1heGltdW0gYW5kIG1pbmltdW0gdmFsdWVzIGZvciB0aGUgaW50ZWdlciB0eXBlIFQuICAqLworI2RlZmluZSBUWVBFX01JTklNVU0odCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoKHQpICghIFRZUEVfU0lHTkVEICh0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICA/ICh0KSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICA6IFRZUEVfU0lHTkVEX01BR05JVFVERSAodCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICA/IH4gKHQpIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICA6IH4gVFlQRV9NQVhJTVVNICh0KSkpCisjZGVmaW5lIFRZUEVfTUFYSU1VTSh0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgodCkgKCEgVFlQRV9TSUdORUQgKHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgID8gKHQpIC0xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIDogKCgoKHQpIDEgPDwgKHNpemVvZiAodCkgKiBDSEFSX0JJVCAtIDIpKSAtIDEpICogMiArIDEpKSkKKworLyogVGhlIG1heGltdW0gYW5kIG1pbmltdW0gdmFsdWVzIGZvciB0aGUgdHlwZSBvZiB0aGUgZXhwcmVzc2lvbiBFLAorICAgYWZ0ZXIgaW50ZWdlciBwcm9tb3Rpb24uICBFIHNob3VsZCBub3QgaGF2ZSBzaWRlIGVmZmVjdHMuICAqLworI2RlZmluZSBfR0xfSU5UX01JTklNVU0oZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoX0dMX0lOVF9TSUdORUQgKGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgPyAtIF9HTF9JTlRfVFdPU19DT01QTEVNRU5UIChlKSAtIF9HTF9TSUdORURfSU5UX01BWElNVU0gKGUpICAgICAgICAgXAorICAgOiBfR0xfSU5UX0NPTlZFUlQgKGUsIDApKQorI2RlZmluZSBfR0xfSU5UX01BWElNVU0oZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoX0dMX0lOVF9TSUdORUQgKGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgPyBfR0xfU0lHTkVEX0lOVF9NQVhJTVVNIChlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgOiBfR0xfSU5UX05FR0FURV9DT05WRVJUIChlLCAxKSkKKyNkZWZpbmUgX0dMX1NJR05FRF9JTlRfTUFYSU1VTShlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKCgoX0dMX0lOVF9DT05WRVJUIChlLCAxKSA8PCAoc2l6ZW9mICgoZSkgKyAwKSAqIENIQVJfQklUIC0gMikpIC0gMSkgKiAyICsgMSkKKworCisvKiBSZXR1cm4gMSBpZiB0aGUgX190eXBlb2ZfXyBrZXl3b3JkIHdvcmtzLiAgVGhpcyBjb3VsZCBiZSBkb25lIGJ5CisgICAnY29uZmlndXJlJywgYnV0IGZvciBub3cgaXQncyBlYXNpZXIgdG8gZG8gaXQgYnkgaGFuZC4gICovCisjaWYgMiA8PSBfX0dOVUNfXyB8fCAweDUxMTAgPD0gX19TVU5QUk9fQworIyBkZWZpbmUgX0dMX0hBVkVfX19UWVBFT0ZfXyAxCisjZWxzZQorIyBkZWZpbmUgX0dMX0hBVkVfX19UWVBFT0ZfXyAwCisjZW5kaWYKKworLyogUmV0dXJuIDEgaWYgdGhlIGludGVnZXIgdHlwZSBvciBleHByZXNzaW9uIFQgbWlnaHQgYmUgc2lnbmVkLiAgUmV0dXJuIDAKKyAgIGlmIGl0IGlzIGRlZmluaXRlbHkgdW5zaWduZWQuICBUaGlzIG1hY3JvIGRvZXMgbm90IGV2YWx1YXRlIGl0cyBhcmd1bWVudCwKKyAgIGFuZCBleHBhbmRzIHRvIGFuIGludGVnZXIgY29uc3RhbnQgZXhwcmVzc2lvbi4gICovCisjaWYgX0dMX0hBVkVfX19UWVBFT0ZfXworIyBkZWZpbmUgX0dMX1NJR05FRF9UWVBFX09SX0VYUFIodCkgVFlQRV9TSUdORUQgKF9fdHlwZW9mX18gKHQpKQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9TSUdORURfVFlQRV9PUl9FWFBSKHQpIDEKKyNlbmRpZgorCisvKiBCb3VuZCBvbiBsZW5ndGggb2YgdGhlIHN0cmluZyByZXByZXNlbnRpbmcgYW4gdW5zaWduZWQgaW50ZWdlcgorICAgdmFsdWUgcmVwcmVzZW50YWJsZSBpbiBCIGJpdHMuICBsb2cxMCAoMi4wKSA8IDE0Ni80ODUuICBUaGUKKyAgIHNtYWxsZXN0IHZhbHVlIG9mIEIgd2hlcmUgdGhpcyBib3VuZCBpcyBub3QgdGlnaHQgaXMgMjYyMS4gICovCisjZGVmaW5lIElOVF9CSVRTX1NUUkxFTl9CT1VORChiKSAoKChiKSAqIDE0NiArIDQ4NCkgLyA0ODUpCisKKy8qIEJvdW5kIG9uIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHJlcHJlc2VudGluZyBhbiBpbnRlZ2VyIHR5cGUgb3IgZXhwcmVzc2lvbiBULgorICAgU3VidHJhY3QgMSBmb3IgdGhlIHNpZ24gYml0IGlmIFQgaXMgc2lnbmVkLCBhbmQgdGhlbiBhZGQgMSBtb3JlIGZvcgorICAgYSBtaW51cyBzaWduIGlmIG5lZWRlZC4KKworICAgQmVjYXVzZSBfR0xfU0lHTkVEX1RZUEVfT1JfRVhQUiBzb21ldGltZXMgcmV0dXJucyAwIHdoZW4gaXRzIGFyZ3VtZW50IGlzCisgICBzaWduZWQsIHRoaXMgbWFjcm8gbWF5IG92ZXJlc3RpbWF0ZSB0aGUgdHJ1ZSBib3VuZCBieSBvbmUgYnl0ZSB3aGVuCisgICBhcHBsaWVkIHRvIHVuc2lnbmVkIHR5cGVzIG9mIHNpemUgMiwgNCwgMTYsIC4uLiBieXRlcy4gICovCisjZGVmaW5lIElOVF9TVFJMRU5fQk9VTkQodCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoSU5UX0JJVFNfU1RSTEVOX0JPVU5EIChzaXplb2YgKHQpICogQ0hBUl9CSVQgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLSBfR0xfU0lHTkVEX1RZUEVfT1JfRVhQUiAodCkpICAgICAgICBcCisgICArIF9HTF9TSUdORURfVFlQRV9PUl9FWFBSICh0KSkKKworLyogQm91bmQgb24gYnVmZmVyIHNpemUgbmVlZGVkIHRvIHJlcHJlc2VudCBhbiBpbnRlZ2VyIHR5cGUgb3IgZXhwcmVzc2lvbiBULAorICAgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsLiAgKi8KKyNkZWZpbmUgSU5UX0JVRlNJWkVfQk9VTkQodCkgKElOVF9TVFJMRU5fQk9VTkQgKHQpICsgMSkKKworCisvKiBSYW5nZSBvdmVyZmxvdyBjaGVja3MuCisKKyAgIFRoZSBJTlRfPG9wPl9SQU5HRV9PVkVSRkxPVyBtYWNyb3MgcmV0dXJuIDEgaWYgdGhlIGNvcnJlc3BvbmRpbmcgQworICAgb3BlcmF0b3JzIG1pZ2h0IG5vdCB5aWVsZCBudW1lcmljYWxseSBjb3JyZWN0IGFuc3dlcnMgZHVlIHRvCisgICBhcml0aG1ldGljIG92ZXJmbG93LiAgVGhleSBkbyBub3QgcmVseSBvbiB1bmRlZmluZWQgb3IKKyAgIGltcGxlbWVudGF0aW9uLWRlZmluZWQgYmVoYXZpb3IuICBUaGVpciBpbXBsZW1lbnRhdGlvbnMgYXJlIHNpbXBsZQorICAgYW5kIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IHRoZXkgYXJlIGEgYml0IGhhcmRlciB0byB1c2UgdGhhbiB0aGUKKyAgIElOVF88b3A+X09WRVJGTE9XIG1hY3JvcyBkZXNjcmliZWQgYmVsb3cuCisKKyAgIEV4YW1wbGUgdXNhZ2U6CisKKyAgICAgbG9uZyBpbnQgaSA9IC4uLjsKKyAgICAgbG9uZyBpbnQgaiA9IC4uLjsKKyAgICAgaWYgKElOVF9NVUxUSVBMWV9SQU5HRV9PVkVSRkxPVyAoaSwgaiwgTE9OR19NSU4sIExPTkdfTUFYKSkKKyAgICAgICBwcmludGYgKCJtdWx0aXBseSB3b3VsZCBvdmVyZmxvdyIpOworICAgICBlbHNlCisgICAgICAgcHJpbnRmICgicHJvZHVjdCBpcyAlbGQiLCBpICogaik7CisKKyAgIFJlc3RyaWN0aW9ucyBvbiAqX1JBTkdFX09WRVJGTE9XIG1hY3JvczoKKworICAgVGhlc2UgbWFjcm9zIGRvIG5vdCBjaGVjayBmb3IgYWxsIHBvc3NpYmxlIG51bWVyaWNhbCBwcm9ibGVtcyBvcgorICAgdW5kZWZpbmVkIG9yIHVuc3BlY2lmaWVkIGJlaGF2aW9yOiB0aGV5IGRvIG5vdCBjaGVjayBmb3IgZGl2aXNpb24KKyAgIGJ5IHplcm8sIGZvciBiYWQgc2hpZnQgY291bnRzLCBvciBmb3Igc2hpZnRpbmcgbmVnYXRpdmUgbnVtYmVycy4KKworICAgVGhlc2UgbWFjcm9zIG1heSBldmFsdWF0ZSB0aGVpciBhcmd1bWVudHMgemVybyBvciBtdWx0aXBsZSB0aW1lcywKKyAgIHNvIHRoZSBhcmd1bWVudHMgc2hvdWxkIG5vdCBoYXZlIHNpZGUgZWZmZWN0cy4gIFRoZSBhcml0aG1ldGljCisgICBhcmd1bWVudHMgKGluY2x1ZGluZyB0aGUgTUlOIGFuZCBNQVggYXJndW1lbnRzKSBtdXN0IGJlIG9mIHRoZSBzYW1lCisgICBpbnRlZ2VyIHR5cGUgYWZ0ZXIgdGhlIHVzdWFsIGFyaXRobWV0aWMgY29udmVyc2lvbnMsIGFuZCB0aGUgdHlwZQorICAgbXVzdCBoYXZlIG1pbmltdW0gdmFsdWUgTUlOIGFuZCBtYXhpbXVtIE1BWC4gIFVuc2lnbmVkIHR5cGVzIHNob3VsZAorICAgdXNlIGEgemVybyBNSU4gb2YgdGhlIHByb3BlciB0eXBlLgorCisgICBUaGVzZSBtYWNyb3MgYXJlIHR1bmVkIGZvciBjb25zdGFudCBNSU4gYW5kIE1BWC4gIEZvciBjb21tdXRhdGl2ZQorICAgb3BlcmF0aW9ucyBzdWNoIGFzIEEgKyBCLCB0aGV5IGFyZSBhbHNvIHR1bmVkIGZvciBjb25zdGFudCBCLiAgKi8KKworLyogUmV0dXJuIDEgaWYgQSArIEIgd291bGQgb3ZlcmZsb3cgaW4gW01JTixNQVhdIGFyaXRobWV0aWMuCisgICBTZWUgYWJvdmUgZm9yIHJlc3RyaWN0aW9ucy4gICovCisjZGVmaW5lIElOVF9BRERfUkFOR0VfT1ZFUkZMT1coYSwgYiwgbWluLCBtYXgpICAgICAgICAgIFwKKyAgKChiKSA8IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgPyAoYSkgPCAobWluKSAtIChiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICA6IChtYXgpIC0gKGIpIDwgKGEpKQorCisvKiBSZXR1cm4gMSBpZiBBIC0gQiB3b3VsZCBvdmVyZmxvdyBpbiBbTUlOLE1BWF0gYXJpdGhtZXRpYy4KKyAgIFNlZSBhYm92ZSBmb3IgcmVzdHJpY3Rpb25zLiAgKi8KKyNkZWZpbmUgSU5UX1NVQlRSQUNUX1JBTkdFX09WRVJGTE9XKGEsIGIsIG1pbiwgbWF4KSAgICAgXAorICAoKGIpIDwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICA/IChtYXgpICsgKGIpIDwgKGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIDogKGEpIDwgKG1pbikgKyAoYikpCisKKy8qIFJldHVybiAxIGlmIC0gQSB3b3VsZCBvdmVyZmxvdyBpbiBbTUlOLE1BWF0gYXJpdGhtZXRpYy4KKyAgIFNlZSBhYm92ZSBmb3IgcmVzdHJpY3Rpb25zLiAgKi8KKyNkZWZpbmUgSU5UX05FR0FURV9SQU5HRV9PVkVSRkxPVyhhLCBtaW4sIG1heCkgICAgICAgICAgXAorICAoKG1pbikgPCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICA/IChhKSA8IC0gKG1heCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIDogMCA8IChhKSkKKworLyogUmV0dXJuIDEgaWYgQSAqIEIgd291bGQgb3ZlcmZsb3cgaW4gW01JTixNQVhdIGFyaXRobWV0aWMuCisgICBTZWUgYWJvdmUgZm9yIHJlc3RyaWN0aW9ucy4gIEF2b2lkICYmIGFuZCB8fCBhcyB0aGV5IHRpY2tsZQorICAgYnVncyBpbiBTdW4gQyA1LjExIDIwMTAvMDgvMTMgYW5kIG90aGVyIGNvbXBpbGVyczsgc2VlCisgICA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1nbnVsaWIvMjAxMS0wNS9tc2cwMDQwMS5odG1sPi4gICovCisjZGVmaW5lIElOVF9NVUxUSVBMWV9SQU5HRV9PVkVSRkxPVyhhLCBiLCBtaW4sIG1heCkgICAgIFwKKyAgKChiKSA8IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgPyAoKGEpIDwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICA/IChhKSA8IChtYXgpIC8gKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIDogKGIpID09IC0xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgPyAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICA6IChtaW4pIC8gKGIpIDwgKGEpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIDogKGIpID09IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgPyAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICA6ICgoYSkgPCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgID8gKGEpIDwgKG1pbikgLyAoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgOiAobWF4KSAvIChiKSA8IChhKSkpCisKKy8qIFJldHVybiAxIGlmIEEgLyBCIHdvdWxkIG92ZXJmbG93IGluIFtNSU4sTUFYXSBhcml0aG1ldGljLgorICAgU2VlIGFib3ZlIGZvciByZXN0cmljdGlvbnMuICBEbyBub3QgY2hlY2sgZm9yIGRpdmlzaW9uIGJ5IHplcm8uICAqLworI2RlZmluZSBJTlRfRElWSURFX1JBTkdFX09WRVJGTE9XKGEsIGIsIG1pbiwgbWF4KSAgICAgICBcCisgICgobWluKSA8IDAgJiYgKGIpID09IC0xICYmIChhKSA8IC0gKG1heCkpCisKKy8qIFJldHVybiAxIGlmIEEgJSBCIHdvdWxkIG92ZXJmbG93IGluIFtNSU4sTUFYXSBhcml0aG1ldGljLgorICAgU2VlIGFib3ZlIGZvciByZXN0cmljdGlvbnMuICBEbyBub3QgY2hlY2sgZm9yIGRpdmlzaW9uIGJ5IHplcm8uCisgICBNYXRoZW1hdGljYWxseSwgJSBzaG91bGQgbmV2ZXIgb3ZlcmZsb3csIGJ1dCBvbiB4ODYtbGlrZSBob3N0cworICAgSU5UX01JTiAlIC0xIHRyYXBzLCBhbmQgdGhlIEMgc3RhbmRhcmQgcGVybWl0cyB0aGlzLCBzbyB0cmVhdCB0aGlzCisgICBhcyBhbiBvdmVyZmxvdyB0b28uICAqLworI2RlZmluZSBJTlRfUkVNQUlOREVSX1JBTkdFX09WRVJGTE9XKGEsIGIsIG1pbiwgbWF4KSAgICBcCisgIElOVF9ESVZJREVfUkFOR0VfT1ZFUkZMT1cgKGEsIGIsIG1pbiwgbWF4KQorCisvKiBSZXR1cm4gMSBpZiBBIDw8IEIgd291bGQgb3ZlcmZsb3cgaW4gW01JTixNQVhdIGFyaXRobWV0aWMuCisgICBTZWUgYWJvdmUgZm9yIHJlc3RyaWN0aW9ucy4gIEhlcmUsIE1JTiBhbmQgTUFYIGFyZSBmb3IgQSBvbmx5LCBhbmQgQiBuZWVkCisgICBub3QgYmUgb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGUgb3RoZXIgYXJndW1lbnRzLiAgVGhlIEMgc3RhbmRhcmQgc2F5cyB0aGF0CisgICBiZWhhdmlvciBpcyB1bmRlZmluZWQgZm9yIHNoaWZ0cyB1bmxlc3MgMCA8PSBCIDwgd29yZHdpZHRoLCBhbmQgdGhhdCB3aGVuCisgICBBIGlzIG5lZ2F0aXZlIHRoZW4gQSA8PCBCIGhhcyB1bmRlZmluZWQgYmVoYXZpb3IgYW5kIEEgPj4gQiBoYXMKKyAgIGltcGxlbWVudGF0aW9uLWRlZmluZWQgYmVoYXZpb3IsIGJ1dCBkbyBub3QgY2hlY2sgdGhlc2Ugb3RoZXIKKyAgIHJlc3RyaWN0aW9ucy4gICovCisjZGVmaW5lIElOVF9MRUZUX1NISUZUX1JBTkdFX09WRVJGTE9XKGEsIGIsIG1pbiwgbWF4KSAgIFwKKyAgKChhKSA8IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgPyAoYSkgPCAobWluKSA+PiAoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICA6IChtYXgpID4+IChiKSA8IChhKSkKKworCisvKiBUaGUgX0dMKl9PVkVSRkxPVyBtYWNyb3MgaGF2ZSB0aGUgc2FtZSByZXN0cmljdGlvbnMgYXMgdGhlCisgICAqX1JBTkdFX09WRVJGTE9XIG1hY3JvcywgZXhjZXB0IHRoYXQgdGhleSBkbyBub3QgYXNzdW1lIHRoYXQgb3BlcmFuZHMKKyAgIChlLmcuLCBBIGFuZCBCKSBoYXZlIHRoZSBzYW1lIHR5cGUgYXMgTUlOIGFuZCBNQVguICBJbnN0ZWFkLCB0aGV5IGFzc3VtZQorICAgdGhhdCB0aGUgcmVzdWx0IChlLmcuLCBBICsgQikgaGFzIHRoYXQgdHlwZS4gICovCisjZGVmaW5lIF9HTF9BRERfT1ZFUkZMT1coYSwgYiwgbWluLCBtYXgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgobWluKSA8IDAgPyBJTlRfQUREX1JBTkdFX09WRVJGTE9XIChhLCBiLCBtaW4sIG1heCkgICAgICAgICAgICAgICAgICBcCisgICA6IChhKSA8IDAgPyAoYikgPD0gKGEpICsgKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICA6IChiKSA8IDAgPyAoYSkgPD0gKGEpICsgKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICA6IChhKSArIChiKSA8IChiKSkKKyNkZWZpbmUgX0dMX1NVQlRSQUNUX09WRVJGTE9XKGEsIGIsIG1pbiwgbWF4KSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKChtaW4pIDwgMCA/IElOVF9TVUJUUkFDVF9SQU5HRV9PVkVSRkxPVyAoYSwgYiwgbWluLCBtYXgpICAgICAgICAgICAgIFwKKyAgIDogKGEpIDwgMCA/IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIDogKGIpIDwgMCA/IChhKSAtIChiKSA8PSAoYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIDogKGEpIDwgKGIpKQorI2RlZmluZSBfR0xfTVVMVElQTFlfT1ZFUkZMT1coYSwgYiwgbWluLCBtYXgpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoKChtaW4pID09IDAgJiYgKCgoYSkgPCAwICYmIDAgPCAoYikpIHx8ICgoYikgPCAwICYmIDAgPCAoYSkpKSkgICAgICAgXAorICAgfHwgSU5UX01VTFRJUExZX1JBTkdFX09WRVJGTE9XIChhLCBiLCBtaW4sIG1heCkpCisjZGVmaW5lIF9HTF9ESVZJREVfT1ZFUkZMT1coYSwgYiwgbWluLCBtYXgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgobWluKSA8IDAgPyAoYikgPT0gX0dMX0lOVF9ORUdBVEVfQ09OVkVSVCAobWluLCAxKSAmJiAoYSkgPCAtIChtYXgpICBcCisgICA6IChhKSA8IDAgPyAoYikgPD0gKGEpICsgKGIpIC0gMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICA6IChiKSA8IDAgJiYgKGEpICsgKGIpIDw9IChhKSkKKyNkZWZpbmUgX0dMX1JFTUFJTkRFUl9PVkVSRkxPVyhhLCBiLCBtaW4sIG1heCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKChtaW4pIDwgMCA/IChiKSA9PSBfR0xfSU5UX05FR0FURV9DT05WRVJUIChtaW4sIDEpICYmIChhKSA8IC0gKG1heCkgIFwKKyAgIDogKGEpIDwgMCA/IChhKSAlIChiKSAhPSAoKG1heCkgLSAoYikgKyAxKSAlIChiKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgIDogKGIpIDwgMCAmJiAhIF9HTF9VTlNJR05FRF9ORUdfTVVMVElQTEUgKGEsIGIsIG1heCkpCisKKy8qIFJldHVybiBhIG5vbnplcm8gdmFsdWUgaWYgQSBpcyBhIG1hdGhlbWF0aWNhbCBtdWx0aXBsZSBvZiBCLCB3aGVyZQorICAgQSBpcyB1bnNpZ25lZCwgQiBpcyBuZWdhdGl2ZSwgYW5kIE1BWCBpcyB0aGUgbWF4aW11bSB2YWx1ZSBvZiBBJ3MKKyAgIHR5cGUuICBBJ3MgdHlwZSBtdXN0IGJlIHRoZSBzYW1lIGFzIChBICUgQikncyB0eXBlLiAgTm9ybWFsbHkgKEEgJQorICAgLUIgPT0gMCkgc3VmZmljZXMsIGJ1dCB0aGluZ3MgZ2V0IHRyaWNreSBpZiAtQiB3b3VsZCBvdmVyZmxvdy4gICovCisjZGVmaW5lIF9HTF9VTlNJR05FRF9ORUdfTVVMVElQTEUoYSwgYiwgbWF4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgoKGIpIDwgLV9HTF9TSUdORURfSU5UX01BWElNVU0gKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgPyAoX0dMX1NJR05FRF9JTlRfTUFYSU1VTSAoYikgPT0gKG1heCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgPyAoYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgOiAoYSkgJSAoX0dMX0lOVF9DT05WRVJUIChhLCBfR0xfU0lHTkVEX0lOVF9NQVhJTVVNIChiKSkgKyAxKSkgICBcCisgICAgOiAoYSkgJSAtIChiKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICA9PSAwKQorCisKKy8qIEludGVnZXIgb3ZlcmZsb3cgY2hlY2tzLgorCisgICBUaGUgSU5UXzxvcD5fT1ZFUkZMT1cgbWFjcm9zIHJldHVybiAxIGlmIHRoZSBjb3JyZXNwb25kaW5nIEMgb3BlcmF0b3JzCisgICBtaWdodCBub3QgeWllbGQgbnVtZXJpY2FsbHkgY29ycmVjdCBhbnN3ZXJzIGR1ZSB0byBhcml0aG1ldGljIG92ZXJmbG93LgorICAgVGhleSB3b3JrIGNvcnJlY3RseSBvbiBhbGwga25vd24gcHJhY3RpY2FsIGhvc3RzLCBhbmQgZG8gbm90IHJlbHkKKyAgIG9uIHVuZGVmaW5lZCBiZWhhdmlvciBkdWUgdG8gc2lnbmVkIGFyaXRobWV0aWMgb3ZlcmZsb3cuCisKKyAgIEV4YW1wbGUgdXNhZ2U6CisKKyAgICAgbG9uZyBpbnQgaSA9IC4uLjsKKyAgICAgbG9uZyBpbnQgaiA9IC4uLjsKKyAgICAgaWYgKElOVF9NVUxUSVBMWV9PVkVSRkxPVyAoaSwgaikpCisgICAgICAgcHJpbnRmICgibXVsdGlwbHkgd291bGQgb3ZlcmZsb3ciKTsKKyAgICAgZWxzZQorICAgICAgIHByaW50ZiAoInByb2R1Y3QgaXMgJWxkIiwgaSAqIGopOworCisgICBUaGVzZSBtYWNyb3MgZG8gbm90IGNoZWNrIGZvciBhbGwgcG9zc2libGUgbnVtZXJpY2FsIHByb2JsZW1zIG9yCisgICB1bmRlZmluZWQgb3IgdW5zcGVjaWZpZWQgYmVoYXZpb3I6IHRoZXkgZG8gbm90IGNoZWNrIGZvciBkaXZpc2lvbgorICAgYnkgemVybywgZm9yIGJhZCBzaGlmdCBjb3VudHMsIG9yIGZvciBzaGlmdGluZyBuZWdhdGl2ZSBudW1iZXJzLgorCisgICBUaGVzZSBtYWNyb3MgbWF5IGV2YWx1YXRlIHRoZWlyIGFyZ3VtZW50cyB6ZXJvIG9yIG11bHRpcGxlIHRpbWVzLCBzbyB0aGUKKyAgIGFyZ3VtZW50cyBzaG91bGQgbm90IGhhdmUgc2lkZSBlZmZlY3RzLgorCisgICBUaGVzZSBtYWNyb3MgYXJlIHR1bmVkIGZvciB0aGVpciBsYXN0IGFyZ3VtZW50IGJlaW5nIGEgY29uc3RhbnQuCisKKyAgIFJldHVybiAxIGlmIHRoZSBpbnRlZ2VyIGV4cHJlc3Npb25zIEEgKiBCLCBBIC0gQiwgLUEsIEEgKiBCLCBBIC8gQiwKKyAgIEEgJSBCLCBhbmQgQSA8PCBCIHdvdWxkIG92ZXJmbG93LCByZXNwZWN0aXZlbHkuICAqLworCisjZGVmaW5lIElOVF9BRERfT1ZFUkZMT1coYSwgYikgXAorICBfR0xfQklOQVJZX09QX09WRVJGTE9XIChhLCBiLCBfR0xfQUREX09WRVJGTE9XKQorI2RlZmluZSBJTlRfU1VCVFJBQ1RfT1ZFUkZMT1coYSwgYikgXAorICBfR0xfQklOQVJZX09QX09WRVJGTE9XIChhLCBiLCBfR0xfU1VCVFJBQ1RfT1ZFUkZMT1cpCisjZGVmaW5lIElOVF9ORUdBVEVfT1ZFUkZMT1coYSkgXAorICBJTlRfTkVHQVRFX1JBTkdFX09WRVJGTE9XIChhLCBfR0xfSU5UX01JTklNVU0gKGEpLCBfR0xfSU5UX01BWElNVU0gKGEpKQorI2RlZmluZSBJTlRfTVVMVElQTFlfT1ZFUkZMT1coYSwgYikgXAorICBfR0xfQklOQVJZX09QX09WRVJGTE9XIChhLCBiLCBfR0xfTVVMVElQTFlfT1ZFUkZMT1cpCisjZGVmaW5lIElOVF9ESVZJREVfT1ZFUkZMT1coYSwgYikgXAorICBfR0xfQklOQVJZX09QX09WRVJGTE9XIChhLCBiLCBfR0xfRElWSURFX09WRVJGTE9XKQorI2RlZmluZSBJTlRfUkVNQUlOREVSX09WRVJGTE9XKGEsIGIpIFwKKyAgX0dMX0JJTkFSWV9PUF9PVkVSRkxPVyAoYSwgYiwgX0dMX1JFTUFJTkRFUl9PVkVSRkxPVykKKyNkZWZpbmUgSU5UX0xFRlRfU0hJRlRfT1ZFUkZMT1coYSwgYikgXAorICBJTlRfTEVGVF9TSElGVF9SQU5HRV9PVkVSRkxPVyAoYSwgYiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0lOVF9NSU5JTVVNIChhKSwgX0dMX0lOVF9NQVhJTVVNIChhKSkKKworLyogUmV0dXJuIDEgaWYgdGhlIGV4cHJlc3Npb24gQSA8b3A+IEIgd291bGQgb3ZlcmZsb3csCisgICB3aGVyZSBPUF9SRVNVTFRfT1ZFUkZMT1cgKEEsIEIsIE1JTiwgTUFYKSBkb2VzIHRoZSBhY3R1YWwgdGVzdCwKKyAgIGFzc3VtaW5nIE1JTiBhbmQgTUFYIGFyZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBmb3IgdGhlIHJlc3VsdCB0eXBlLgorICAgQXJndW1lbnRzIHNob3VsZCBiZSBmcmVlIG9mIHNpZGUgZWZmZWN0cy4gICovCisjZGVmaW5lIF9HTF9CSU5BUllfT1BfT1ZFUkZMT1coYSwgYiwgb3BfcmVzdWx0X292ZXJmbG93KSAgICAgICAgXAorICBvcF9yZXN1bHRfb3ZlcmZsb3cgKGEsIGIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICBfR0xfSU5UX01JTklNVU0gKDAgKiAoYikgKyAoYSkpLCAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgX0dMX0lOVF9NQVhJTVVNICgwICogKGIpICsgKGEpKSkKKworI2VuZGlmIC8qIF9HTF9JTlRQUk9QU19IICovCmRpZmYgLS1naXQgYS9saWIvaW50dHlwZXMuaW4uaCBiL2xpYi9pbnR0eXBlcy5pbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZGEyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvaW50dHlwZXMuaW4uaApAQCAtMCwwICsxLDExMzAgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwNi0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBQYXVsIEVnZ2VydCwgQnJ1bm8gSGFpYmxlLCBEZXJlayBQcmljZS4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGdudWxpYi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyoKKyAqIElTTyBDIDk5IDxpbnR0eXBlcy5oPiBmb3IgcGxhdGZvcm1zIHRoYXQgbGFjayBpdC4KKyAqIDxodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjN4YmQvaW50dHlwZXMuaC5odG1sPgorICovCisKKyNpZiBfX0dOVUNfXyA+PSAzCitAUFJBR01BX1NZU1RFTV9IRUFERVJACisjZW5kaWYKK0BQUkFHTUFfQ09MVU1OU0AKKworLyogSW5jbHVkZSB0aGUgb3JpZ2luYWwgPGludHR5cGVzLmg+IGlmIGl0IGV4aXN0cywgYW5kIGlmIHRoaXMgZmlsZQorICAgaGFzIG5vdCBiZWVuIGluY2x1ZGVkIHlldCBvciBpZiB0aGlzIGZpbGUgaW5jbHVkZXMgZ251bGliIHN0ZGludC5oCisgICB3aGljaCBpbiB0dXJuIGluY2x1ZGVzIHRoaXMgZmlsZS4KKyAgIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyNpZiAhIGRlZmluZWQgSU5UVFlQRVNfSCB8fCBkZWZpbmVkIF9HTF9KVVNUX0lOQ0xVREVfU1lTVEVNX0lOVFRZUEVTX0gKKyMgaWYgQEhBVkVfSU5UVFlQRVNfSEAKKworICAgLyogU29tZSBwcmUtQysrMTEgPHN0ZGludC5oPiBpbXBsZW1lbnRhdGlvbnMgbmVlZCB0aGlzLiAgKi8KKyMgIGlmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgISBkZWZpbmVkIF9fU1REQ19GT1JNQVRfTUFDUk9TCisjICAgZGVmaW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TIDEKKyMgIGVuZGlmCisKKyMgIEBJTkNMVURFX05FWFRAIEBORVhUX0lOVFRZUEVTX0hACisjIGVuZGlmCisjZW5kaWYKKworI2lmICEgZGVmaW5lZCBJTlRUWVBFU19IICYmICEgZGVmaW5lZCBfR0xfSlVTVF9JTkNMVURFX1NZU1RFTV9JTlRUWVBFU19ICisjZGVmaW5lIElOVFRZUEVTX0gKKworLyogSW5jbHVkZSA8c3RkaW50Lmg+IG9yIHRoZSBnbnVsaWIgcmVwbGFjZW1lbnQuCisgICBCdXQgYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zLiAgKi8KKyNpZm5kZWYgX19HTElCQ19fCisjIGluY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisvKiBHZXQgQ0hBUl9CSVQuICAqLworI2luY2x1ZGUgPGxpbWl0cy5oPgorCisjaWYgIShJTlRfTUlOID09IElOVDMyX01JTiAmJiBJTlRfTUFYID09IElOVDMyX01BWCkKKyMgZXJyb3IgIlRoaXMgZmlsZSBhc3N1bWVzIHRoYXQgJ2ludCcgaGFzIGV4YWN0bHkgMzIgYml0cy4gUGxlYXNlIHJlcG9ydCB5b3VyIHBsYXRmb3JtIGFuZCBjb21waWxlciB0byA8YnVnLWdudWxpYkBnbnUub3JnPi4iCisjZW5kaWYKKworLyogVGhlIGRlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwgZXRjLiBhcmUgY29waWVkIGhlcmUuICAqLworCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwgaXMgY29waWVkIGhlcmUuICAqLworCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UgaXMgY29waWVkIGhlcmUuICAqLworCisvKiA3LjguMSBNYWNyb3MgZm9yIGZvcm1hdCBzcGVjaWZpZXJzICovCisKKyNpZiBkZWZpbmVkIF9UTlNfUl9UQVJHRVQKKyAgIC8qIFRhbmRlbSBOb25TdG9wIFIgc2VyaWVzIGFuZCBjb21wYXRpYmxlIHBsYXRmb3JtcyByZWxlYXNlZCBiZWZvcmUKKyAgICAgIEp1bHkgMjAwNSBzdXBwb3J0ICVMZCBidXQgbm90ICVsbGQuICAqLworIyBkZWZpbmUgX0xPTkdfTE9OR19GT1JNQVRfUFJFRklYICJMIgorI2Vsc2UKKyMgZGVmaW5lIF9MT05HX0xPTkdfRk9STUFUX1BSRUZJWCAibGwiCisjZW5kaWYKKworI2lmICFkZWZpbmVkIFBSSWQ4IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgUFJJZDgKKyMgaWZkZWYgSU5UOF9NQVgKKyMgIGRlZmluZSBQUklkOCAiZCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWk4IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgUFJJaTgKKyMgaWZkZWYgSU5UOF9NQVgKKyMgIGRlZmluZSBQUklpOCAiaSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSW84IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgUFJJbzgKKyMgaWZkZWYgVUlOVDhfTUFYCisjICBkZWZpbmUgUFJJbzggIm8iCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUkl1OCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFBSSXU4CisjIGlmZGVmIFVJTlQ4X01BWAorIyAgZGVmaW5lIFBSSXU4ICJ1IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJeDggfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBQUkl4OAorIyBpZmRlZiBVSU5UOF9NQVgKKyMgIGRlZmluZSBQUkl4OCAieCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSVg4IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgUFJJWDgKKyMgaWZkZWYgVUlOVDhfTUFYCisjICBkZWZpbmUgUFJJWDggIlgiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklkMTYgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBQUklkMTYKKyMgaWZkZWYgSU5UMTZfTUFYCisjICBkZWZpbmUgUFJJZDE2ICJkIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJaTE2IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgUFJJaTE2CisjIGlmZGVmIElOVDE2X01BWAorIyAgZGVmaW5lIFBSSWkxNiAiaSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSW8xNiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFBSSW8xNgorIyBpZmRlZiBVSU5UMTZfTUFYCisjICBkZWZpbmUgUFJJbzE2ICJvIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJdTE2IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgUFJJdTE2CisjIGlmZGVmIFVJTlQxNl9NQVgKKyMgIGRlZmluZSBQUkl1MTYgInUiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUkl4MTYgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBQUkl4MTYKKyMgaWZkZWYgVUlOVDE2X01BWAorIyAgZGVmaW5lIFBSSXgxNiAieCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSVgxNiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFBSSVgxNgorIyBpZmRlZiBVSU5UMTZfTUFYCisjICBkZWZpbmUgUFJJWDE2ICJYIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJZDMyIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgUFJJZDMyCisjIGlmZGVmIElOVDMyX01BWAorIyAgZGVmaW5lIFBSSWQzMiAiZCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWkzMiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFBSSWkzMgorIyBpZmRlZiBJTlQzMl9NQVgKKyMgIGRlZmluZSBQUklpMzIgImkiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklvMzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBQUklvMzIKKyMgaWZkZWYgVUlOVDMyX01BWAorIyAgZGVmaW5lIFBSSW8zMiAibyIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXUzMiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFBSSXUzMgorIyBpZmRlZiBVSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJdTMyICJ1IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJeDMyIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgUFJJeDMyCisjIGlmZGVmIFVJTlQzMl9NQVgKKyMgIGRlZmluZSBQUkl4MzIgIngiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklYMzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBQUklYMzIKKyMgaWZkZWYgVUlOVDMyX01BWAorIyAgZGVmaW5lIFBSSVgzMiAiWCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIElOVDY0X01BWAorIyBpZiAoQEFQUExFX1VOSVZFUlNBTF9CVUlMREAgPyBkZWZpbmVkIF9MUDY0IDogQElOVDY0X01BWF9FUV9MT05HX01BWEApCisjICBkZWZpbmUgX1BSSTY0X1BSRUZJWCAibCIKKyMgZWxpZiBkZWZpbmVkIF9NU0NfVkVSIHx8IGRlZmluZWQgX19NSU5HVzMyX18KKyMgIGRlZmluZSBfUFJJNjRfUFJFRklYICJJNjQiCisjIGVsaWYgQEhBVkVfTE9OR19MT05HX0lOVEAgJiYgTE9OR19NQVggPj4gMzAgPT0gMQorIyAgZGVmaW5lIF9QUkk2NF9QUkVGSVggX0xPTkdfTE9OR19GT1JNQVRfUFJFRklYCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSWQ2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklkNjQKKyMgIGRlZmluZSBQUklkNjQgX1BSSTY0X1BSRUZJWCAiZCIKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJaTY0IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFBSSWk2NAorIyAgZGVmaW5lIFBSSWk2NCBfUFJJNjRfUFJFRklYICJpIgorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgVUlOVDY0X01BWAorIyBpZiAoQEFQUExFX1VOSVZFUlNBTF9CVUlMREAgPyBkZWZpbmVkIF9MUDY0IDogQFVJTlQ2NF9NQVhfRVFfVUxPTkdfTUFYQCkKKyMgIGRlZmluZSBfUFJJdTY0X1BSRUZJWCAibCIKKyMgZWxpZiBkZWZpbmVkIF9NU0NfVkVSIHx8IGRlZmluZWQgX19NSU5HVzMyX18KKyMgIGRlZmluZSBfUFJJdTY0X1BSRUZJWCAiSTY0IgorIyBlbGlmIEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRAICYmIFVMT05HX01BWCA+PiAzMSA9PSAxCisjICBkZWZpbmUgX1BSSXU2NF9QUkVGSVggX0xPTkdfTE9OR19GT1JNQVRfUFJFRklYCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSW82NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklvNjQKKyMgIGRlZmluZSBQUklvNjQgX1BSSXU2NF9QUkVGSVggIm8iCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSXU2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUkl1NjQKKyMgIGRlZmluZSBQUkl1NjQgX1BSSXU2NF9QUkVGSVggInUiCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSXg2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUkl4NjQKKyMgIGRlZmluZSBQUkl4NjQgX1BSSXU2NF9QUkVGSVggIngiCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSVg2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklYNjQKKyMgIGRlZmluZSBQUklYNjQgX1BSSXU2NF9QUkVGSVggIlgiCisjIGVuZGlmCisjZW5kaWYKKworI2lmICFkZWZpbmVkIFBSSWRMRUFTVDggfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBQUklkTEVBU1Q4CisjIGRlZmluZSBQUklkTEVBU1Q4ICJkIgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJaUxFQVNUOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFBSSWlMRUFTVDgKKyMgZGVmaW5lIFBSSWlMRUFTVDggImkiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklvTEVBU1Q4IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgUFJJb0xFQVNUOAorIyBkZWZpbmUgUFJJb0xFQVNUOCAibyIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXVMRUFTVDggfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBQUkl1TEVBU1Q4CisjIGRlZmluZSBQUkl1TEVBU1Q4ICJ1IgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJeExFQVNUOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFBSSXhMRUFTVDgKKyMgZGVmaW5lIFBSSXhMRUFTVDggIngiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklYTEVBU1Q4IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgUFJJWExFQVNUOAorIyBkZWZpbmUgUFJJWExFQVNUOCAiWCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWRMRUFTVDE2IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgUFJJZExFQVNUMTYKKyMgZGVmaW5lIFBSSWRMRUFTVDE2ICJkIgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJaUxFQVNUMTYgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBQUklpTEVBU1QxNgorIyBkZWZpbmUgUFJJaUxFQVNUMTYgImkiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklvTEVBU1QxNiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFBSSW9MRUFTVDE2CisjIGRlZmluZSBQUklvTEVBU1QxNiAibyIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXVMRUFTVDE2IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgUFJJdUxFQVNUMTYKKyMgZGVmaW5lIFBSSXVMRUFTVDE2ICJ1IgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJeExFQVNUMTYgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBQUkl4TEVBU1QxNgorIyBkZWZpbmUgUFJJeExFQVNUMTYgIngiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklYTEVBU1QxNiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFBSSVhMRUFTVDE2CisjIGRlZmluZSBQUklYTEVBU1QxNiAiWCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWRMRUFTVDMyIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgUFJJZExFQVNUMzIKKyMgZGVmaW5lIFBSSWRMRUFTVDMyICJkIgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJaUxFQVNUMzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBQUklpTEVBU1QzMgorIyBkZWZpbmUgUFJJaUxFQVNUMzIgImkiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklvTEVBU1QzMiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFBSSW9MRUFTVDMyCisjIGRlZmluZSBQUklvTEVBU1QzMiAibyIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXVMRUFTVDMyIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgUFJJdUxFQVNUMzIKKyMgZGVmaW5lIFBSSXVMRUFTVDMyICJ1IgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJeExFQVNUMzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBQUkl4TEVBU1QzMgorIyBkZWZpbmUgUFJJeExFQVNUMzIgIngiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklYTEVBU1QzMiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFBSSVhMRUFTVDMyCisjIGRlZmluZSBQUklYTEVBU1QzMiAiWCIKKyNlbmRpZgorI2lmZGVmIElOVDY0X01BWAorIyBpZiAhZGVmaW5lZCBQUklkTEVBU1Q2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklkTEVBU1Q2NAorIyAgZGVmaW5lIFBSSWRMRUFTVDY0IFBSSWQ2NAorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUklpTEVBU1Q2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklpTEVBU1Q2NAorIyAgZGVmaW5lIFBSSWlMRUFTVDY0IFBSSWk2NAorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgVUlOVDY0X01BWAorIyBpZiAhZGVmaW5lZCBQUklvTEVBU1Q2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklvTEVBU1Q2NAorIyAgZGVmaW5lIFBSSW9MRUFTVDY0IFBSSW82NAorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUkl1TEVBU1Q2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUkl1TEVBU1Q2NAorIyAgZGVmaW5lIFBSSXVMRUFTVDY0IFBSSXU2NAorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUkl4TEVBU1Q2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUkl4TEVBU1Q2NAorIyAgZGVmaW5lIFBSSXhMRUFTVDY0IFBSSXg2NAorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUklYTEVBU1Q2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklYTEVBU1Q2NAorIyAgZGVmaW5lIFBSSVhMRUFTVDY0IFBSSVg2NAorIyBlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCBQUklkRkFTVDggfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBQUklkRkFTVDgKKyMgaWYgSU5UX0ZBU1Q4X01BWCA+IElOVDMyX01BWAorIyAgZGVmaW5lIFBSSWRGQVNUOCBQUklkNjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSWRGQVNUOCAiZCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWlGQVNUOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFBSSWlGQVNUOAorIyBpZiBJTlRfRkFTVDhfTUFYID4gSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJaUZBU1Q4IFBSSWk2NAorIyBlbHNlCisjICBkZWZpbmUgUFJJaUZBU1Q4ICJpIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJb0ZBU1Q4IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgUFJJb0ZBU1Q4CisjIGlmIFVJTlRfRkFTVDhfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFBSSW9GQVNUOCBQUklvNjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSW9GQVNUOCAibyIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXVGQVNUOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFBSSXVGQVNUOAorIyBpZiBVSU5UX0ZBU1Q4X01BWCA+IFVJTlQzMl9NQVgKKyMgIGRlZmluZSBQUkl1RkFTVDggUFJJdTY0CisjIGVsc2UKKyMgIGRlZmluZSBQUkl1RkFTVDggInUiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUkl4RkFTVDggfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBQUkl4RkFTVDgKKyMgaWYgVUlOVF9GQVNUOF9NQVggPiBVSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJeEZBU1Q4IFBSSXg2NAorIyBlbHNlCisjICBkZWZpbmUgUFJJeEZBU1Q4ICJ4IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJWEZBU1Q4IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgUFJJWEZBU1Q4CisjIGlmIFVJTlRfRkFTVDhfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFBSSVhGQVNUOCBQUklYNjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSVhGQVNUOCAiWCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWRGQVNUMTYgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBQUklkRkFTVDE2CisjIGlmIElOVF9GQVNUMTZfTUFYID4gSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJZEZBU1QxNiBQUklkNjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSWRGQVNUMTYgImQiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklpRkFTVDE2IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgUFJJaUZBU1QxNgorIyBpZiBJTlRfRkFTVDE2X01BWCA+IElOVDMyX01BWAorIyAgZGVmaW5lIFBSSWlGQVNUMTYgUFJJaTY0CisjIGVsc2UKKyMgIGRlZmluZSBQUklpRkFTVDE2ICJpIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJb0ZBU1QxNiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFBSSW9GQVNUMTYKKyMgaWYgVUlOVF9GQVNUMTZfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFBSSW9GQVNUMTYgUFJJbzY0CisjIGVsc2UKKyMgIGRlZmluZSBQUklvRkFTVDE2ICJvIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJdUZBU1QxNiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFBSSXVGQVNUMTYKKyMgaWYgVUlOVF9GQVNUMTZfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFBSSXVGQVNUMTYgUFJJdTY0CisjIGVsc2UKKyMgIGRlZmluZSBQUkl1RkFTVDE2ICJ1IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJeEZBU1QxNiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFBSSXhGQVNUMTYKKyMgaWYgVUlOVF9GQVNUMTZfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFBSSXhGQVNUMTYgUFJJeDY0CisjIGVsc2UKKyMgIGRlZmluZSBQUkl4RkFTVDE2ICJ4IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJWEZBU1QxNiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFBSSVhGQVNUMTYKKyMgaWYgVUlOVF9GQVNUMTZfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFBSSVhGQVNUMTYgUFJJWDY0CisjIGVsc2UKKyMgIGRlZmluZSBQUklYRkFTVDE2ICJYIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJZEZBU1QzMiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFBSSWRGQVNUMzIKKyMgaWYgSU5UX0ZBU1QzMl9NQVggPiBJTlQzMl9NQVgKKyMgIGRlZmluZSBQUklkRkFTVDMyIFBSSWQ2NAorIyBlbHNlCisjICBkZWZpbmUgUFJJZEZBU1QzMiAiZCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWlGQVNUMzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBQUklpRkFTVDMyCisjIGlmIElOVF9GQVNUMzJfTUFYID4gSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJaUZBU1QzMiBQUklpNjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSWlGQVNUMzIgImkiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklvRkFTVDMyIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgUFJJb0ZBU1QzMgorIyBpZiBVSU5UX0ZBU1QzMl9NQVggPiBVSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJb0ZBU1QzMiBQUklvNjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSW9GQVNUMzIgIm8iCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUkl1RkFTVDMyIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgUFJJdUZBU1QzMgorIyBpZiBVSU5UX0ZBU1QzMl9NQVggPiBVSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJdUZBU1QzMiBQUkl1NjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSXVGQVNUMzIgInUiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUkl4RkFTVDMyIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgUFJJeEZBU1QzMgorIyBpZiBVSU5UX0ZBU1QzMl9NQVggPiBVSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJeEZBU1QzMiBQUkl4NjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSXhGQVNUMzIgIngiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklYRkFTVDMyIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgUFJJWEZBU1QzMgorIyBpZiBVSU5UX0ZBU1QzMl9NQVggPiBVSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJWEZBU1QzMiBQUklYNjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSVhGQVNUMzIgIlgiCisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBJTlQ2NF9NQVgKKyMgaWYgIWRlZmluZWQgUFJJZEZBU1Q2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklkRkFTVDY0CisjICBkZWZpbmUgUFJJZEZBU1Q2NCBQUklkNjQKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJaUZBU1Q2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklpRkFTVDY0CisjICBkZWZpbmUgUFJJaUZBU1Q2NCBQUklpNjQKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIFVJTlQ2NF9NQVgKKyMgaWYgIWRlZmluZWQgUFJJb0ZBU1Q2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklvRkFTVDY0CisjICBkZWZpbmUgUFJJb0ZBU1Q2NCBQUklvNjQKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJdUZBU1Q2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUkl1RkFTVDY0CisjICBkZWZpbmUgUFJJdUZBU1Q2NCBQUkl1NjQKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJeEZBU1Q2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUkl4RkFTVDY0CisjICBkZWZpbmUgUFJJeEZBU1Q2NCBQUkl4NjQKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJWEZBU1Q2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklYRkFTVDY0CisjICBkZWZpbmUgUFJJWEZBU1Q2NCBQUklYNjQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgUFJJZE1BWCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFBSSWRNQVgKKyMgaWYgQElOVDMyX01BWF9MVF9JTlRNQVhfTUFYQAorIyAgZGVmaW5lIFBSSWRNQVggUFJJZDY0CisjIGVsc2UKKyMgIGRlZmluZSBQUklkTUFYICJsZCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWlNQVggfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBQUklpTUFYCisjIGlmIEBJTlQzMl9NQVhfTFRfSU5UTUFYX01BWEAKKyMgIGRlZmluZSBQUklpTUFYIFBSSWk2NAorIyBlbHNlCisjICBkZWZpbmUgUFJJaU1BWCAibGkiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklvTUFYIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgUFJJb01BWAorIyBpZiBAVUlOVDMyX01BWF9MVF9VSU5UTUFYX01BWEAKKyMgIGRlZmluZSBQUklvTUFYIFBSSW82NAorIyBlbHNlCisjICBkZWZpbmUgUFJJb01BWCAibG8iCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUkl1TUFYIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgUFJJdU1BWAorIyBpZiBAVUlOVDMyX01BWF9MVF9VSU5UTUFYX01BWEAKKyMgIGRlZmluZSBQUkl1TUFYIFBSSXU2NAorIyBlbHNlCisjICBkZWZpbmUgUFJJdU1BWCAibHUiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUkl4TUFYIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgUFJJeE1BWAorIyBpZiBAVUlOVDMyX01BWF9MVF9VSU5UTUFYX01BWEAKKyMgIGRlZmluZSBQUkl4TUFYIFBSSXg2NAorIyBlbHNlCisjICBkZWZpbmUgUFJJeE1BWCAibHgiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklYTUFYIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgUFJJWE1BWAorIyBpZiBAVUlOVDMyX01BWF9MVF9VSU5UTUFYX01BWEAKKyMgIGRlZmluZSBQUklYTUFYIFBSSVg2NAorIyBlbHNlCisjICBkZWZpbmUgUFJJWE1BWCAibFgiCisjIGVuZGlmCisjZW5kaWYKKworI2lmICFkZWZpbmVkIFBSSWRQVFIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBQUklkUFRSCisjIGlmZGVmIElOVFBUUl9NQVgKKyMgIGRlZmluZSBQUklkUFRSIEBQUklQVFJfUFJFRklYQCAiZCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWlQVFIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBQUklpUFRSCisjIGlmZGVmIElOVFBUUl9NQVgKKyMgIGRlZmluZSBQUklpUFRSIEBQUklQVFJfUFJFRklYQCAiaSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSW9QVFIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBQUklvUFRSCisjIGlmZGVmIFVJTlRQVFJfTUFYCisjICBkZWZpbmUgUFJJb1BUUiBAUFJJUFRSX1BSRUZJWEAgIm8iCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUkl1UFRSIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgUFJJdVBUUgorIyBpZmRlZiBVSU5UUFRSX01BWAorIyAgZGVmaW5lIFBSSXVQVFIgQFBSSVBUUl9QUkVGSVhAICJ1IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJeFBUUiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFBSSXhQVFIKKyMgaWZkZWYgVUlOVFBUUl9NQVgKKyMgIGRlZmluZSBQUkl4UFRSIEBQUklQVFJfUFJFRklYQCAieCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSVhQVFIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBQUklYUFRSCisjIGlmZGVmIFVJTlRQVFJfTUFYCisjICBkZWZpbmUgUFJJWFBUUiBAUFJJUFRSX1BSRUZJWEAgIlgiCisjIGVuZGlmCisjZW5kaWYKKworI2lmICFkZWZpbmVkIFNDTmQ4IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgU0NOZDgKKyMgaWZkZWYgSU5UOF9NQVgKKyMgIGRlZmluZSBTQ05kOCAiaGhkIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOaTggfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBTQ05pOAorIyBpZmRlZiBJTlQ4X01BWAorIyAgZGVmaW5lIFNDTmk4ICJoaGkiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05vOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFNDTm84CisjIGlmZGVmIFVJTlQ4X01BWAorIyAgZGVmaW5lIFNDTm84ICJoaG8iCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ051OCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFNDTnU4CisjIGlmZGVmIFVJTlQ4X01BWAorIyAgZGVmaW5lIFNDTnU4ICJoaHUiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ054OCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFNDTng4CisjIGlmZGVmIFVJTlQ4X01BWAorIyAgZGVmaW5lIFNDTng4ICJoaHgiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05kMTYgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBTQ05kMTYKKyMgaWZkZWYgSU5UMTZfTUFYCisjICBkZWZpbmUgU0NOZDE2ICJoZCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTmkxNiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFNDTmkxNgorIyBpZmRlZiBJTlQxNl9NQVgKKyMgIGRlZmluZSBTQ05pMTYgImhpIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NObzE2IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgU0NObzE2CisjIGlmZGVmIFVJTlQxNl9NQVgKKyMgIGRlZmluZSBTQ05vMTYgImhvIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOdTE2IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgU0NOdTE2CisjIGlmZGVmIFVJTlQxNl9NQVgKKyMgIGRlZmluZSBTQ051MTYgImh1IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOeDE2IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgU0NOeDE2CisjIGlmZGVmIFVJTlQxNl9NQVgKKyMgIGRlZmluZSBTQ054MTYgImh4IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOZDMyIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgU0NOZDMyCisjIGlmZGVmIElOVDMyX01BWAorIyAgZGVmaW5lIFNDTmQzMiAiZCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTmkzMiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFNDTmkzMgorIyBpZmRlZiBJTlQzMl9NQVgKKyMgIGRlZmluZSBTQ05pMzIgImkiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05vMzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBTQ05vMzIKKyMgaWZkZWYgVUlOVDMyX01BWAorIyAgZGVmaW5lIFNDTm8zMiAibyIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTnUzMiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFNDTnUzMgorIyBpZmRlZiBVSU5UMzJfTUFYCisjICBkZWZpbmUgU0NOdTMyICJ1IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOeDMyIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgU0NOeDMyCisjIGlmZGVmIFVJTlQzMl9NQVgKKyMgIGRlZmluZSBTQ054MzIgIngiCisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBJTlQ2NF9NQVgKKyMgaWYgKEBBUFBMRV9VTklWRVJTQUxfQlVJTERAID8gZGVmaW5lZCBfTFA2NCA6IEBJTlQ2NF9NQVhfRVFfTE9OR19NQVhAKQorIyAgZGVmaW5lIF9TQ042NF9QUkVGSVggImwiCisjIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUiB8fCBkZWZpbmVkIF9fTUlOR1czMl9fCisjICBkZWZpbmUgX1NDTjY0X1BSRUZJWCAiSTY0IgorIyBlbGlmIEBIQVZFX0xPTkdfTE9OR19JTlRAICYmIExPTkdfTUFYID4+IDMwID09IDEKKyMgIGRlZmluZSBfU0NONjRfUFJFRklYIF9MT05HX0xPTkdfRk9STUFUX1BSRUZJWAorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ05kNjQgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NOZDY0CisjICBkZWZpbmUgU0NOZDY0IF9TQ042NF9QUkVGSVggImQiCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTmk2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBTQ05pNjQKKyMgIGRlZmluZSBTQ05pNjQgX1NDTjY0X1BSRUZJWCAiaSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIFVJTlQ2NF9NQVgKKyMgaWYgKEBBUFBMRV9VTklWRVJTQUxfQlVJTERAID8gZGVmaW5lZCBfTFA2NCA6IEBVSU5UNjRfTUFYX0VRX1VMT05HX01BWEApCisjICBkZWZpbmUgX1NDTnU2NF9QUkVGSVggImwiCisjIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUiB8fCBkZWZpbmVkIF9fTUlOR1czMl9fCisjICBkZWZpbmUgX1NDTnU2NF9QUkVGSVggIkk2NCIKKyMgZWxpZiBASEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UQCAmJiBVTE9OR19NQVggPj4gMzEgPT0gMQorIyAgZGVmaW5lIF9TQ051NjRfUFJFRklYIF9MT05HX0xPTkdfRk9STUFUX1BSRUZJWAorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ05vNjQgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NObzY0CisjICBkZWZpbmUgU0NObzY0IF9TQ051NjRfUFJFRklYICJvIgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ051NjQgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NOdTY0CisjICBkZWZpbmUgU0NOdTY0IF9TQ051NjRfUFJFRklYICJ1IgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ054NjQgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NOeDY0CisjICBkZWZpbmUgU0NOeDY0IF9TQ051NjRfUFJFRklYICJ4IgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCBTQ05kTEVBU1Q4IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgU0NOZExFQVNUOAorIyBkZWZpbmUgU0NOZExFQVNUOCAiaGhkIgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOaUxFQVNUOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFNDTmlMRUFTVDgKKyMgZGVmaW5lIFNDTmlMRUFTVDggImhoaSIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTm9MRUFTVDggfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBTQ05vTEVBU1Q4CisjIGRlZmluZSBTQ05vTEVBU1Q4ICJoaG8iCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ051TEVBU1Q4IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgU0NOdUxFQVNUOAorIyBkZWZpbmUgU0NOdUxFQVNUOCAiaGh1IgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOeExFQVNUOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFNDTnhMRUFTVDgKKyMgZGVmaW5lIFNDTnhMRUFTVDggImhoeCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTmRMRUFTVDE2IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgU0NOZExFQVNUMTYKKyMgZGVmaW5lIFNDTmRMRUFTVDE2ICJoZCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTmlMRUFTVDE2IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgU0NOaUxFQVNUMTYKKyMgZGVmaW5lIFNDTmlMRUFTVDE2ICJoaSIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTm9MRUFTVDE2IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgU0NOb0xFQVNUMTYKKyMgZGVmaW5lIFNDTm9MRUFTVDE2ICJobyIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTnVMRUFTVDE2IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgU0NOdUxFQVNUMTYKKyMgZGVmaW5lIFNDTnVMRUFTVDE2ICJodSIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTnhMRUFTVDE2IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgU0NOeExFQVNUMTYKKyMgZGVmaW5lIFNDTnhMRUFTVDE2ICJoeCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTmRMRUFTVDMyIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgU0NOZExFQVNUMzIKKyMgZGVmaW5lIFNDTmRMRUFTVDMyICJkIgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOaUxFQVNUMzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBTQ05pTEVBU1QzMgorIyBkZWZpbmUgU0NOaUxFQVNUMzIgImkiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05vTEVBU1QzMiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFNDTm9MRUFTVDMyCisjIGRlZmluZSBTQ05vTEVBU1QzMiAibyIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTnVMRUFTVDMyIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgU0NOdUxFQVNUMzIKKyMgZGVmaW5lIFNDTnVMRUFTVDMyICJ1IgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOeExFQVNUMzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBTQ054TEVBU1QzMgorIyBkZWZpbmUgU0NOeExFQVNUMzIgIngiCisjZW5kaWYKKyNpZmRlZiBJTlQ2NF9NQVgKKyMgaWYgIWRlZmluZWQgU0NOZExFQVNUNjQgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NOZExFQVNUNjQKKyMgIGRlZmluZSBTQ05kTEVBU1Q2NCBTQ05kNjQKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgU0NOaUxFQVNUNjQgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NOaUxFQVNUNjQKKyMgIGRlZmluZSBTQ05pTEVBU1Q2NCBTQ05pNjQKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIFVJTlQ2NF9NQVgKKyMgaWYgIWRlZmluZWQgU0NOb0xFQVNUNjQgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NOb0xFQVNUNjQKKyMgIGRlZmluZSBTQ05vTEVBU1Q2NCBTQ05vNjQKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgU0NOdUxFQVNUNjQgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NOdUxFQVNUNjQKKyMgIGRlZmluZSBTQ051TEVBU1Q2NCBTQ051NjQKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgU0NOeExFQVNUNjQgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NOeExFQVNUNjQKKyMgIGRlZmluZSBTQ054TEVBU1Q2NCBTQ054NjQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgU0NOZEZBU1Q4IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgU0NOZEZBU1Q4CisjIGlmIElOVF9GQVNUOF9NQVggPiBJTlQzMl9NQVgKKyMgIGRlZmluZSBTQ05kRkFTVDggU0NOZDY0CisjIGVsaWYgSU5UX0ZBU1Q4X01BWCA9PSAweDdmZmYKKyMgIGRlZmluZSBTQ05kRkFTVDggImhkIgorIyBlbGlmIElOVF9GQVNUOF9NQVggPT0gMHg3ZgorIyAgZGVmaW5lIFNDTmRGQVNUOCAiaGhkIgorIyBlbHNlCisjICBkZWZpbmUgU0NOZEZBU1Q4ICJkIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOaUZBU1Q4IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgU0NOaUZBU1Q4CisjIGlmIElOVF9GQVNUOF9NQVggPiBJTlQzMl9NQVgKKyMgIGRlZmluZSBTQ05pRkFTVDggU0NOaTY0CisjIGVsaWYgSU5UX0ZBU1Q4X01BWCA9PSAweDdmZmYKKyMgIGRlZmluZSBTQ05pRkFTVDggImhpIgorIyBlbGlmIElOVF9GQVNUOF9NQVggPT0gMHg3ZgorIyAgZGVmaW5lIFNDTmlGQVNUOCAiaGhpIgorIyBlbHNlCisjICBkZWZpbmUgU0NOaUZBU1Q4ICJpIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOb0ZBU1Q4IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgU0NOb0ZBU1Q4CisjIGlmIFVJTlRfRkFTVDhfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFNDTm9GQVNUOCBTQ05vNjQKKyMgZWxpZiBVSU5UX0ZBU1Q4X01BWCA9PSAweGZmZmYKKyMgIGRlZmluZSBTQ05vRkFTVDggImhvIgorIyBlbGlmIFVJTlRfRkFTVDhfTUFYID09IDB4ZmYKKyMgIGRlZmluZSBTQ05vRkFTVDggImhobyIKKyMgZWxzZQorIyAgZGVmaW5lIFNDTm9GQVNUOCAibyIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTnVGQVNUOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFNDTnVGQVNUOAorIyBpZiBVSU5UX0ZBU1Q4X01BWCA+IFVJTlQzMl9NQVgKKyMgIGRlZmluZSBTQ051RkFTVDggU0NOdTY0CisjIGVsaWYgVUlOVF9GQVNUOF9NQVggPT0gMHhmZmZmCisjICBkZWZpbmUgU0NOdUZBU1Q4ICJodSIKKyMgZWxpZiBVSU5UX0ZBU1Q4X01BWCA9PSAweGZmCisjICBkZWZpbmUgU0NOdUZBU1Q4ICJoaHUiCisjIGVsc2UKKyMgIGRlZmluZSBTQ051RkFTVDggInUiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ054RkFTVDggfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBTQ054RkFTVDgKKyMgaWYgVUlOVF9GQVNUOF9NQVggPiBVSU5UMzJfTUFYCisjICBkZWZpbmUgU0NOeEZBU1Q4IFNDTng2NAorIyBlbGlmIFVJTlRfRkFTVDhfTUFYID09IDB4ZmZmZgorIyAgZGVmaW5lIFNDTnhGQVNUOCAiaHgiCisjIGVsaWYgVUlOVF9GQVNUOF9NQVggPT0gMHhmZgorIyAgZGVmaW5lIFNDTnhGQVNUOCAiaGh4IgorIyBlbHNlCisjICBkZWZpbmUgU0NOeEZBU1Q4ICJ4IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOZEZBU1QxNiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFNDTmRGQVNUMTYKKyMgaWYgSU5UX0ZBU1QxNl9NQVggPiBJTlQzMl9NQVgKKyMgIGRlZmluZSBTQ05kRkFTVDE2IFNDTmQ2NAorIyBlbGlmIElOVF9GQVNUMTZfTUFYID09IDB4N2ZmZgorIyAgZGVmaW5lIFNDTmRGQVNUMTYgImhkIgorIyBlbHNlCisjICBkZWZpbmUgU0NOZEZBU1QxNiAiZCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTmlGQVNUMTYgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBTQ05pRkFTVDE2CisjIGlmIElOVF9GQVNUMTZfTUFYID4gSU5UMzJfTUFYCisjICBkZWZpbmUgU0NOaUZBU1QxNiBTQ05pNjQKKyMgZWxpZiBJTlRfRkFTVDE2X01BWCA9PSAweDdmZmYKKyMgIGRlZmluZSBTQ05pRkFTVDE2ICJoaSIKKyMgZWxzZQorIyAgZGVmaW5lIFNDTmlGQVNUMTYgImkiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05vRkFTVDE2IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgU0NOb0ZBU1QxNgorIyBpZiBVSU5UX0ZBU1QxNl9NQVggPiBVSU5UMzJfTUFYCisjICBkZWZpbmUgU0NOb0ZBU1QxNiBTQ05vNjQKKyMgZWxpZiBVSU5UX0ZBU1QxNl9NQVggPT0gMHhmZmZmCisjICBkZWZpbmUgU0NOb0ZBU1QxNiAiaG8iCisjIGVsc2UKKyMgIGRlZmluZSBTQ05vRkFTVDE2ICJvIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOdUZBU1QxNiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFNDTnVGQVNUMTYKKyMgaWYgVUlOVF9GQVNUMTZfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFNDTnVGQVNUMTYgU0NOdTY0CisjIGVsaWYgVUlOVF9GQVNUMTZfTUFYID09IDB4ZmZmZgorIyAgZGVmaW5lIFNDTnVGQVNUMTYgImh1IgorIyBlbHNlCisjICBkZWZpbmUgU0NOdUZBU1QxNiAidSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTnhGQVNUMTYgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBTQ054RkFTVDE2CisjIGlmIFVJTlRfRkFTVDE2X01BWCA+IFVJTlQzMl9NQVgKKyMgIGRlZmluZSBTQ054RkFTVDE2IFNDTng2NAorIyBlbGlmIFVJTlRfRkFTVDE2X01BWCA9PSAweGZmZmYKKyMgIGRlZmluZSBTQ054RkFTVDE2ICJoeCIKKyMgZWxzZQorIyAgZGVmaW5lIFNDTnhGQVNUMTYgIngiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05kRkFTVDMyIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgU0NOZEZBU1QzMgorIyBpZiBJTlRfRkFTVDMyX01BWCA+IElOVDMyX01BWAorIyAgZGVmaW5lIFNDTmRGQVNUMzIgU0NOZDY0CisjIGVsc2UKKyMgIGRlZmluZSBTQ05kRkFTVDMyICJkIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOaUZBU1QzMiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFNDTmlGQVNUMzIKKyMgaWYgSU5UX0ZBU1QzMl9NQVggPiBJTlQzMl9NQVgKKyMgIGRlZmluZSBTQ05pRkFTVDMyIFNDTmk2NAorIyBlbHNlCisjICBkZWZpbmUgU0NOaUZBU1QzMiAiaSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTm9GQVNUMzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBTQ05vRkFTVDMyCisjIGlmIFVJTlRfRkFTVDMyX01BWCA+IFVJTlQzMl9NQVgKKyMgIGRlZmluZSBTQ05vRkFTVDMyIFNDTm82NAorIyBlbHNlCisjICBkZWZpbmUgU0NOb0ZBU1QzMiAibyIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTnVGQVNUMzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBTQ051RkFTVDMyCisjIGlmIFVJTlRfRkFTVDMyX01BWCA+IFVJTlQzMl9NQVgKKyMgIGRlZmluZSBTQ051RkFTVDMyIFNDTnU2NAorIyBlbHNlCisjICBkZWZpbmUgU0NOdUZBU1QzMiAidSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTnhGQVNUMzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBTQ054RkFTVDMyCisjIGlmIFVJTlRfRkFTVDMyX01BWCA+IFVJTlQzMl9NQVgKKyMgIGRlZmluZSBTQ054RkFTVDMyIFNDTng2NAorIyBlbHNlCisjICBkZWZpbmUgU0NOeEZBU1QzMiAieCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIElOVDY0X01BWAorIyBpZiAhZGVmaW5lZCBTQ05kRkFTVDY0IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFNDTmRGQVNUNjQKKyMgIGRlZmluZSBTQ05kRkFTVDY0IFNDTmQ2NAorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ05pRkFTVDY0IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFNDTmlGQVNUNjQKKyMgIGRlZmluZSBTQ05pRkFTVDY0IFNDTmk2NAorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgVUlOVDY0X01BWAorIyBpZiAhZGVmaW5lZCBTQ05vRkFTVDY0IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFNDTm9GQVNUNjQKKyMgIGRlZmluZSBTQ05vRkFTVDY0IFNDTm82NAorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ051RkFTVDY0IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFNDTnVGQVNUNjQKKyMgIGRlZmluZSBTQ051RkFTVDY0IFNDTnU2NAorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ054RkFTVDY0IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFNDTnhGQVNUNjQKKyMgIGRlZmluZSBTQ054RkFTVDY0IFNDTng2NAorIyBlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCBTQ05kTUFYIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgU0NOZE1BWAorIyBpZiBASU5UMzJfTUFYX0xUX0lOVE1BWF9NQVhACisjICBkZWZpbmUgU0NOZE1BWCBTQ05kNjQKKyMgZWxzZQorIyAgZGVmaW5lIFNDTmRNQVggImxkIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOaU1BWCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFNDTmlNQVgKKyMgaWYgQElOVDMyX01BWF9MVF9JTlRNQVhfTUFYQAorIyAgZGVmaW5lIFNDTmlNQVggU0NOaTY0CisjIGVsc2UKKyMgIGRlZmluZSBTQ05pTUFYICJsaSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTm9NQVggfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBTQ05vTUFYCisjIGlmIEBVSU5UMzJfTUFYX0xUX1VJTlRNQVhfTUFYQAorIyAgZGVmaW5lIFNDTm9NQVggU0NObzY0CisjIGVsc2UKKyMgIGRlZmluZSBTQ05vTUFYICJsbyIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTnVNQVggfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBTQ051TUFYCisjIGlmIEBVSU5UMzJfTUFYX0xUX1VJTlRNQVhfTUFYQAorIyAgZGVmaW5lIFNDTnVNQVggU0NOdTY0CisjIGVsc2UKKyMgIGRlZmluZSBTQ051TUFYICJsdSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTnhNQVggfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBTQ054TUFYCisjIGlmIEBVSU5UMzJfTUFYX0xUX1VJTlRNQVhfTUFYQAorIyAgZGVmaW5lIFNDTnhNQVggU0NOeDY0CisjIGVsc2UKKyMgIGRlZmluZSBTQ054TUFYICJseCIKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgU0NOZFBUUiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFNDTmRQVFIKKyMgaWZkZWYgSU5UUFRSX01BWAorIyAgZGVmaW5lIFNDTmRQVFIgQFBSSVBUUl9QUkVGSVhAICJkIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOaVBUUiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFNDTmlQVFIKKyMgaWZkZWYgSU5UUFRSX01BWAorIyAgZGVmaW5lIFNDTmlQVFIgQFBSSVBUUl9QUkVGSVhAICJpIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOb1BUUiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjIHVuZGVmIFNDTm9QVFIKKyMgaWZkZWYgVUlOVFBUUl9NQVgKKyMgIGRlZmluZSBTQ05vUFRSIEBQUklQVFJfUFJFRklYQCAibyIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTnVQVFIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyB1bmRlZiBTQ051UFRSCisjIGlmZGVmIFVJTlRQVFJfTUFYCisjICBkZWZpbmUgU0NOdVBUUiBAUFJJUFRSX1BSRUZJWEAgInUiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ054UFRSIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgdW5kZWYgU0NOeFBUUgorIyBpZmRlZiBVSU5UUFRSX01BWAorIyAgZGVmaW5lIFNDTnhQVFIgQFBSSVBUUl9QUkVGSVhAICJ4IgorIyBlbmRpZgorI2VuZGlmCisKKy8qIDcuOC4yIEZ1bmN0aW9ucyBmb3IgZ3JlYXRlc3Qtd2lkdGggaW50ZWdlciB0eXBlcyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZiBAR05VTElCX0lNQVhBQlNACisjIGlmICFASEFWRV9ERUNMX0lNQVhBQlNACitleHRlcm4gaW50bWF4X3QgaW1heGFicyAoaW50bWF4X3QpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBpbWF4YWJzCisjIGlmIEhBVkVfUkFXX0RFQ0xfSU1BWEFCUworX0dMX1dBUk5fT05fVVNFIChpbWF4YWJzLCAiaW1heGFicyBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgaW1heGFicyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9JTUFYRElWQAorIyBpZiAhQEhBVkVfREVDTF9JTUFYRElWQAorIyAgaWYgIUdOVUxJQl9kZWZpbmVkX2ltYXhkaXZfdAordHlwZWRlZiBzdHJ1Y3QgeyBpbnRtYXhfdCBxdW90OyBpbnRtYXhfdCByZW07IH0gaW1heGRpdl90OworIyAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9pbWF4ZGl2X3QgMQorIyAgZW5kaWYKK2V4dGVybiBpbWF4ZGl2X3QgaW1heGRpdiAoaW50bWF4X3QsIGludG1heF90KTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgaW1heGRpdgorIyBpZiBIQVZFX1JBV19ERUNMX0lNQVhESVYKK19HTF9XQVJOX09OX1VTRSAoaW1heGRpdiwgImltYXhkaXYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGltYXhkaXYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfU1RSVE9JTUFYQAorIyBpZiBAUkVQTEFDRV9TVFJUT0lNQVhACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHN0cnRvaW1heAorIyAgIGRlZmluZSBzdHJ0b2ltYXggcnBsX3N0cnRvaW1heAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHN0cnRvaW1heCwgaW50bWF4X3QsCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzdHJ0b2ltYXgsIGludG1heF90LCAoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0RFQ0xfU1RSVE9JTUFYQAorIyAgIHVuZGVmIHN0cnRvaW1heAorX0dMX0ZVTkNERUNMX1NZUyAoc3RydG9pbWF4LCBpbnRtYXhfdCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzdHJ0b2ltYXgsIGludG1heF90LCAoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHN0cnRvaW1heCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHN0cnRvaW1heAorIyBpZiBIQVZFX1JBV19ERUNMX1NUUlRPSU1BWAorX0dMX1dBUk5fT05fVVNFIChzdHJ0b2ltYXgsICJzdHJ0b2ltYXggaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHN0cnRvaW1heCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9TVFJUT1VNQVhACisjIGlmICFASEFWRV9ERUNMX1NUUlRPVU1BWEAKKyMgIHVuZGVmIHN0cnRvdW1heAorX0dMX0ZVTkNERUNMX1NZUyAoc3RydG91bWF4LCB1aW50bWF4X3QsCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzdHJ0b3VtYXgsIHVpbnRtYXhfdCwgKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChzdHJ0b3VtYXgpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJ0b3VtYXgKKyMgaWYgSEFWRV9SQVdfREVDTF9TVFJUT1VNQVgKK19HTF9XQVJOX09OX1VTRSAoc3RydG91bWF4LCAic3RydG91bWF4IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHJ0b3VtYXggZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworLyogRG9uJ3QgYm90aGVyIGRlZmluaW5nIG9yIGRlY2xhcmluZyB3Y3N0b2ltYXggYW5kIHdjc3RvdW1heCwgc2luY2UKKyAgIHdpZGUtY2hhcmFjdGVyIGZ1bmN0aW9ucyBsaWtlIHRoaXMgYXJlIGhhcmRseSBldmVyIHVzZWZ1bC4gICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiAhZGVmaW5lZCBJTlRUWVBFU19IICYmICFkZWZpbmVkIF9HTF9KVVNUX0lOQ0xVREVfU1lTVEVNX0lOVFRZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9pc25hbi5jIGIvbGliL2lzbmFuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVhN2Q5MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9pc25hbi5jCkBAIC0wLDAgKzEsMTc3IEBACisvKiBUZXN0IGZvciBOYU4gdGhhdCBkb2VzIG5vdCBuZWVkIGxpYm0uCisgICBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4sIDIwMDcuICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2lmZGVmIFVTRV9MT05HX0RPVUJMRQorLyogU3BlY2lmaWNhdGlvbiBmb3VuZCBpbiBtYXRoLmggb3IgaXNuYW5sLW5vbGlibS5oLiAgKi8KK2V4dGVybiBpbnQgcnBsX2lzbmFubCAobG9uZyBkb3VibGUgeCkgX0dMX0FUVFJJQlVURV9DT05TVDsKKyNlbGlmICEgZGVmaW5lZCBVU0VfRkxPQVQKKy8qIFNwZWNpZmljYXRpb24gZm91bmQgaW4gbWF0aC5oIG9yIGlzbmFuZC1ub2xpYm0uaC4gICovCitleHRlcm4gaW50IHJwbF9pc25hbmQgKGRvdWJsZSB4KTsKKyNlbHNlIC8qIGRlZmluZWQgVVNFX0ZMT0FUICovCisvKiBTcGVjaWZpY2F0aW9uIGZvdW5kIGluIG1hdGguaCBvciBpc25hbmYtbm9saWJtLmguICAqLworZXh0ZXJuIGludCBycGxfaXNuYW5mIChmbG9hdCB4KTsKKyNlbmRpZgorCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImZsb2F0Ky5oIgorCisjaWZkZWYgVVNFX0xPTkdfRE9VQkxFCisjIGRlZmluZSBGVU5DIHJwbF9pc25hbmwKKyMgZGVmaW5lIERPVUJMRSBsb25nIGRvdWJsZQorIyBkZWZpbmUgTUFYX0VYUCBMREJMX01BWF9FWFAKKyMgZGVmaW5lIE1JTl9FWFAgTERCTF9NSU5fRVhQCisjIGlmIGRlZmluZWQgTERCTF9FWFBCSVQwX1dPUkQgJiYgZGVmaW5lZCBMREJMX0VYUEJJVDBfQklUCisjICBkZWZpbmUgS05PV05fRVhQQklUMF9MT0NBVElPTgorIyAgZGVmaW5lIEVYUEJJVDBfV09SRCBMREJMX0VYUEJJVDBfV09SRAorIyAgZGVmaW5lIEVYUEJJVDBfQklUIExEQkxfRVhQQklUMF9CSVQKKyMgZW5kaWYKKyMgZGVmaW5lIFNJWkUgU0laRU9GX0xEQkwKKyMgZGVmaW5lIExfKGxpdGVyYWwpIGxpdGVyYWwjI0wKKyNlbGlmICEgZGVmaW5lZCBVU0VfRkxPQVQKKyMgZGVmaW5lIEZVTkMgcnBsX2lzbmFuZAorIyBkZWZpbmUgRE9VQkxFIGRvdWJsZQorIyBkZWZpbmUgTUFYX0VYUCBEQkxfTUFYX0VYUAorIyBkZWZpbmUgTUlOX0VYUCBEQkxfTUlOX0VYUAorIyBpZiBkZWZpbmVkIERCTF9FWFBCSVQwX1dPUkQgJiYgZGVmaW5lZCBEQkxfRVhQQklUMF9CSVQKKyMgIGRlZmluZSBLTk9XTl9FWFBCSVQwX0xPQ0FUSU9OCisjICBkZWZpbmUgRVhQQklUMF9XT1JEIERCTF9FWFBCSVQwX1dPUkQKKyMgIGRlZmluZSBFWFBCSVQwX0JJVCBEQkxfRVhQQklUMF9CSVQKKyMgZW5kaWYKKyMgZGVmaW5lIFNJWkUgU0laRU9GX0RCTAorIyBkZWZpbmUgTF8obGl0ZXJhbCkgbGl0ZXJhbAorI2Vsc2UgLyogZGVmaW5lZCBVU0VfRkxPQVQgKi8KKyMgZGVmaW5lIEZVTkMgcnBsX2lzbmFuZgorIyBkZWZpbmUgRE9VQkxFIGZsb2F0CisjIGRlZmluZSBNQVhfRVhQIEZMVF9NQVhfRVhQCisjIGRlZmluZSBNSU5fRVhQIEZMVF9NSU5fRVhQCisjIGlmIGRlZmluZWQgRkxUX0VYUEJJVDBfV09SRCAmJiBkZWZpbmVkIEZMVF9FWFBCSVQwX0JJVAorIyAgZGVmaW5lIEtOT1dOX0VYUEJJVDBfTE9DQVRJT04KKyMgIGRlZmluZSBFWFBCSVQwX1dPUkQgRkxUX0VYUEJJVDBfV09SRAorIyAgZGVmaW5lIEVYUEJJVDBfQklUIEZMVF9FWFBCSVQwX0JJVAorIyBlbmRpZgorIyBkZWZpbmUgU0laRSBTSVpFT0ZfRkxUCisjIGRlZmluZSBMXyhsaXRlcmFsKSBsaXRlcmFsIyNmCisjZW5kaWYKKworI2RlZmluZSBFWFBfTUFTSyAoKE1BWF9FWFAgLSBNSU5fRVhQKSB8IDcpCisKKyNkZWZpbmUgTldPUkRTIFwKKyAgKChzaXplb2YgKERPVUJMRSkgKyBzaXplb2YgKHVuc2lnbmVkIGludCkgLSAxKSAvIHNpemVvZiAodW5zaWduZWQgaW50KSkKK3R5cGVkZWYgdW5pb24geyBET1VCTEUgdmFsdWU7IHVuc2lnbmVkIGludCB3b3JkW05XT1JEU107IH0gbWVtb3J5X2RvdWJsZTsKKworaW50CitGVU5DIChET1VCTEUgeCkKK3sKKyNpZmRlZiBLTk9XTl9FWFBCSVQwX0xPQ0FUSU9OCisjIGlmIGRlZmluZWQgVVNFX0xPTkdfRE9VQkxFICYmICgoZGVmaW5lZCBfX2lhNjQgJiYgTERCTF9NQU5UX0RJRyA9PSA2NCkgfHwgKGRlZmluZWQgX194ODZfNjRfXyB8fCBkZWZpbmVkIF9fYW1kNjRfXykgfHwgKGRlZmluZWQgX19pMzg2IHx8IGRlZmluZWQgX19pMzg2X18gfHwgZGVmaW5lZCBfSTM4NiB8fCBkZWZpbmVkIF9NX0lYODYgfHwgZGVmaW5lZCBfWDg2XykpICYmICFIQVZFX1NBTUVfTE9OR19ET1VCTEVfQVNfRE9VQkxFCisgIC8qIFNwZWNpYWwgQ1BVIGRlcGVuZGVudCBjb2RlIGlzIG5lZWRlZCB0byB0cmVhdCBiaXQgcGF0dGVybnMgb3V0c2lkZSB0aGUKKyAgICAgSUVFRSA3NTQgc3BlY2lmaWNhdGlvbiAoc3VjaCBhcyBQc2V1ZG8tTmFOcywgUHNldWRvLUluZmluaXRpZXMsCisgICAgIFBzZXVkby1aZXJvZXMsIFVubm9ybWFsaXplZCBOdW1iZXJzLCBhbmQgUHNldWRvLURlbm9ybWFscykgYXMgTmFOcy4KKyAgICAgVGhlc2UgYml0IHBhdHRlcm5zIGFyZToKKyAgICAgICAtIGV4cG9uZW50ID0gMHgwMDAxLi4weDdGRkYsIG1hbnRpc3NhIGJpdCA2MyA9IDAsCisgICAgICAgLSBleHBvbmVudCA9IDB4MDAwMCwgbWFudGlzc2EgYml0IDYzID0gMS4KKyAgICAgVGhlIE5hTiBiaXQgcGF0dGVybiBpczoKKyAgICAgICAtIGV4cG9uZW50ID0gMHg3RkZGLCBtYW50aXNzYSA+PSAweDgwMDAwMDAwMDAwMDAwMDEuICAqLworICBtZW1vcnlfZG91YmxlIG07CisgIHVuc2lnbmVkIGludCBleHBvbmVudDsKKworICBtLnZhbHVlID0geDsKKyAgZXhwb25lbnQgPSAobS53b3JkW0VYUEJJVDBfV09SRF0gPj4gRVhQQklUMF9CSVQpICYgRVhQX01BU0s7CisjICBpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyAgLyogQmlnIGVuZGlhbjogRVhQQklUMF9XT1JEID0gMCwgRVhQQklUMF9CSVQgPSAxNi4gICovCisgIGlmIChleHBvbmVudCA9PSAwKQorICAgIHJldHVybiAxICYgKG0ud29yZFswXSA+PiAxNSk7CisgIGVsc2UgaWYgKGV4cG9uZW50ID09IEVYUF9NQVNLKQorICAgIHJldHVybiAoKChtLndvcmRbMF0gXiAweDgwMDBVKSA8PCAxNikgfCBtLndvcmRbMV0gfCAobS53b3JkWzJdID4+IDE2KSkgIT0gMDsKKyAgZWxzZQorICAgIHJldHVybiAxICYgfihtLndvcmRbMF0gPj4gMTUpOworIyAgZWxzZQorICAvKiBMaXR0bGUgZW5kaWFuOiBFWFBCSVQwX1dPUkQgPSAyLCBFWFBCSVQwX0JJVCA9IDAuICAqLworICBpZiAoZXhwb25lbnQgPT0gMCkKKyAgICByZXR1cm4gKG0ud29yZFsxXSA+PiAzMSk7CisgIGVsc2UgaWYgKGV4cG9uZW50ID09IEVYUF9NQVNLKQorICAgIHJldHVybiAoKG0ud29yZFsxXSBeIDB4ODAwMDAwMDBVKSB8IG0ud29yZFswXSkgIT0gMDsKKyAgZWxzZQorICAgIHJldHVybiAobS53b3JkWzFdID4+IDMxKSBeIDE7CisjICBlbmRpZgorIyBlbHNlCisgIC8qIEJlIGNhcmVmdWwgdG8gbm90IGRvIGFueSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb24gb24geCwgc3VjaCBhcyB4ID09IHgsCisgICAgIGJlY2F1c2UgeCBtYXkgYmUgYSBzaWduYWxpbmcgTmFOLiAgKi8KKyMgIGlmIGRlZmluZWQgX19TVU5QUk9fQyB8fCBkZWZpbmVkIF9fSUNDIHx8IGRlZmluZWQgX01TQ19WRVIgXAorICAgICAgfHwgZGVmaW5lZCBfX0RFQ0MgfHwgZGVmaW5lZCBfX1RJTllDX18gXAorICAgICAgfHwgKGRlZmluZWQgX19zZ2kgJiYgIWRlZmluZWQgX19HTlVDX18pCisgIC8qIFRoZSBTdW4gQyA1LjAsIEludGVsIElDQyAxMC4wLCBNaWNyb3NvZnQgVmlzdWFsIEMvQysrIDkuMCwgQ29tcGFxIChleC1ERUMpCisgICAgIDYuNCwgYW5kIFRpbnlDQyBjb21waWxlcnMgZG9uJ3QgcmVjb2duaXplIHRoZSBpbml0aWFsaXplcnMgYXMgY29uc3RhbnQKKyAgICAgZXhwcmVzc2lvbnMuICBUaGUgQ29tcGFxIGNvbXBpbGVyIGFsc28gZmFpbHMgd2hlbiBjb25zdGFudC1mb2xkaW5nCisgICAgIDAuMCAvIDAuMCBldmVuIHdoZW4gY29uc3RhbnQtZm9sZGluZyBpcyBub3QgcmVxdWlyZWQuICBUaGUgTWljcm9zb2Z0CisgICAgIFZpc3VhbCBDL0MrKyBjb21waWxlciBhbHNvIGZhaWxzIHdoZW4gY29uc3RhbnQtZm9sZGluZyAxLjAgLyAwLjAgZXZlbgorICAgICB3aGVuIGNvbnN0YW50LWZvbGRpbmcgaXMgbm90IHJlcXVpcmVkLiBUaGUgU0dJIE1JUFNwcm8gQyBjb21waWxlcgorICAgICBjb21wbGFpbnMgYWJvdXQgImZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbiByZXN1bHQgaXMgb3V0IG9mIHJhbmdlIi4gICovCisgIHN0YXRpYyBET1VCTEUgemVybyA9IExfKDAuMCk7CisgIG1lbW9yeV9kb3VibGUgbmFuOworICBET1VCTEUgcGx1c19pbmYgPSBMXygxLjApIC8gemVybzsKKyAgRE9VQkxFIG1pbnVzX2luZiA9IC1MXygxLjApIC8gemVybzsKKyAgbmFuLnZhbHVlID0gemVybyAvIHplcm87CisjICBlbHNlCisgIHN0YXRpYyBtZW1vcnlfZG91YmxlIG5hbiA9IHsgTF8oMC4wKSAvIExfKDAuMCkgfTsKKyAgc3RhdGljIERPVUJMRSBwbHVzX2luZiA9IExfKDEuMCkgLyBMXygwLjApOworICBzdGF0aWMgRE9VQkxFIG1pbnVzX2luZiA9IC1MXygxLjApIC8gTF8oMC4wKTsKKyMgIGVuZGlmCisgIHsKKyAgICBtZW1vcnlfZG91YmxlIG07CisKKyAgICAvKiBBIE5hTiBjYW4gYmUgcmVjb2duaXplZCB0aHJvdWdoIGl0cyBleHBvbmVudC4gIEJ1dCBleGNsdWRlICtJbmZpbml0eSBhbmQKKyAgICAgICAtSW5maW5pdHksIHdoaWNoIGhhdmUgdGhlIHNhbWUgZXhwb25lbnQuICAqLworICAgIG0udmFsdWUgPSB4OworICAgIGlmICgoKG0ud29yZFtFWFBCSVQwX1dPUkRdIF4gbmFuLndvcmRbRVhQQklUMF9XT1JEXSkKKyAgICAgICAgICYgKEVYUF9NQVNLIDw8IEVYUEJJVDBfQklUKSkKKyAgICAgICAgPT0gMCkKKyAgICAgIHJldHVybiAobWVtY21wICgmbS52YWx1ZSwgJnBsdXNfaW5mLCBTSVpFKSAhPSAwCisgICAgICAgICAgICAgICYmIG1lbWNtcCAoJm0udmFsdWUsICZtaW51c19pbmYsIFNJWkUpICE9IDApOworICAgIGVsc2UKKyAgICAgIHJldHVybiAwOworICB9CisjIGVuZGlmCisjZWxzZQorICAvKiBUaGUgY29uZmlndXJhdGlvbiBkaWQgbm90IGZpbmQgc3VmZmljaWVudCBpbmZvcm1hdGlvbi4gIEdpdmUgdXAgYWJvdXQKKyAgICAgdGhlIHNpZ25hbGluZyBOYU5zLCBoYW5kbGUgb25seSB0aGUgcXVpZXQgTmFOcy4gICovCisgIGlmICh4ID09IHgpCisgICAgeworIyBpZiBkZWZpbmVkIFVTRV9MT05HX0RPVUJMRSAmJiAoKGRlZmluZWQgX19pYTY0ICYmIExEQkxfTUFOVF9ESUcgPT0gNjQpIHx8IChkZWZpbmVkIF9feDg2XzY0X18gfHwgZGVmaW5lZCBfX2FtZDY0X18pIHx8IChkZWZpbmVkIF9faTM4NiB8fCBkZWZpbmVkIF9faTM4Nl9fIHx8IGRlZmluZWQgX0kzODYgfHwgZGVmaW5lZCBfTV9JWDg2IHx8IGRlZmluZWQgX1g4Nl8pKSAmJiAhSEFWRV9TQU1FX0xPTkdfRE9VQkxFX0FTX0RPVUJMRQorICAgICAgLyogRGV0ZWN0IGFueSBzcGVjaWFsIGJpdCBwYXR0ZXJucyB0aGF0IHBhc3MgPT07IHNlZSBjb21tZW50IGFib3ZlLiAgKi8KKyAgICAgIG1lbW9yeV9kb3VibGUgbTE7CisgICAgICBtZW1vcnlfZG91YmxlIG0yOworCisgICAgICBtZW1zZXQgKCZtMS52YWx1ZSwgMCwgU0laRSk7CisgICAgICBtZW1zZXQgKCZtMi52YWx1ZSwgMCwgU0laRSk7CisgICAgICBtMS52YWx1ZSA9IHg7CisgICAgICBtMi52YWx1ZSA9IHggKyAoeCA/IDAuMEwgOiAtMC4wTCk7CisgICAgICBpZiAobWVtY21wICgmbTEudmFsdWUsICZtMi52YWx1ZSwgU0laRSkgIT0gMCkKKyAgICAgICAgcmV0dXJuIDE7CisjIGVuZGlmCisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIGVsc2UKKyAgICByZXR1cm4gMTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvbGliL2lzbmFuZC1ub2xpYm0uaCBiL2xpYi9pc25hbmQtbm9saWJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZmYjI3MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9pc25hbmQtbm9saWJtLmgKQEAgLTAsMCArMSwzMyBAQAorLyogVGVzdCBmb3IgTmFOIHRoYXQgZG9lcyBub3QgbmVlZCBsaWJtLgorICAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZiBIQVZFX0lTTkFORF9JTl9MSUJDCisvKiBHZXQgZGVjbGFyYXRpb24gb2YgaXNuYW4gbWFjcm8uICAqLworIyBpbmNsdWRlIDxtYXRoLmg+CisjIGlmIF9fR05VQ19fID49IDQKKyAgIC8qIEdDQyA0LjAgYW5kIG5ld2VyIHByb3ZpZGVzIHRocmVlIGJ1aWx0LWlucyBmb3IgaXNuYW4uICAqLworIyAgdW5kZWYgaXNuYW5kCisjICBkZWZpbmUgaXNuYW5kKHgpIF9fYnVpbHRpbl9pc25hbiAoKGRvdWJsZSkoeCkpCisjIGVsc2UKKyMgIHVuZGVmIGlzbmFuZAorIyAgZGVmaW5lIGlzbmFuZCh4KSBpc25hbiAoKGRvdWJsZSkoeCkpCisjIGVuZGlmCisjZWxzZQorLyogVGVzdCB3aGV0aGVyIFggaXMgYSBOYU4uICAqLworIyB1bmRlZiBpc25hbmQKKyMgZGVmaW5lIGlzbmFuZCBycGxfaXNuYW5kCitleHRlcm4gaW50IGlzbmFuZCAoZG91YmxlIHgpOworI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvaXNuYW5kLmMgYi9saWIvaXNuYW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY4MTVmMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9pc25hbmQuYwpAQCAtMCwwICsxLDE5IEBACisvKiBUZXN0IGZvciBOYU4gdGhhdCBkb2VzIG5vdCBuZWVkIGxpYm0uCisgICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4sIDIwMDguICAqLworCisjaW5jbHVkZSAiaXNuYW4uYyIKZGlmZiAtLWdpdCBhL2xpYi9pc25hbmYtbm9saWJtLmggYi9saWIvaXNuYW5mLW5vbGlibS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNTUwZTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvaXNuYW5mLW5vbGlibS5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qIFRlc3QgZm9yIE5hTiB0aGF0IGRvZXMgbm90IG5lZWQgbGlibS4KKyAgIENvcHlyaWdodCAoQykgMjAwNy0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWYgSEFWRV9JU05BTkZfSU5fTElCQworLyogR2V0IGRlY2xhcmF0aW9uIG9mIGlzbmFuIG1hY3JvIG9yIChvbGRlcikgaXNuYW5mIGZ1bmN0aW9uLiAgKi8KKyMgaW5jbHVkZSA8bWF0aC5oPgorIyBpZiBfX0dOVUNfXyA+PSA0CisgICAvKiBHQ0MgNC4wIGFuZCBuZXdlciBwcm92aWRlcyB0aHJlZSBidWlsdC1pbnMgZm9yIGlzbmFuLiAgKi8KKyMgIHVuZGVmIGlzbmFuZgorIyAgZGVmaW5lIGlzbmFuZih4KSBfX2J1aWx0aW5faXNuYW5mICgoZmxvYXQpKHgpKQorIyBlbGlmIGRlZmluZWQgaXNuYW4KKyMgIHVuZGVmIGlzbmFuZgorIyAgZGVmaW5lIGlzbmFuZih4KSBpc25hbiAoKGZsb2F0KSh4KSkKKyMgZWxzZQorICAgLyogR2V0IGRlY2xhcmF0aW9uIG9mIGlzbmFuZigpLCBpZiBub3QgZGVjbGFyZWQgaW4gPG1hdGguaD4uICAqLworIyAgaWYgZGVmaW5lZCBfX3NnaQorICAgLyogV2UgY2FuJ3QgaW5jbHVkZSA8aWVlZWZwLmg+LCBiZWNhdXNlIGl0IGNvbmZsaWN0cyB3aXRoIG91ciBkZWZpbml0aW9uIG9mCisgICAgICBpc25hbmQuICBUaGVyZWZvcmUgZGVjbGFyZSBpc25hbmYgc2VwYXJhdGVseS4gICovCitleHRlcm4gaW50IGlzbmFuZiAoZmxvYXQgeCk7CisjICBlbmRpZgorIyBlbmRpZgorI2Vsc2UKKy8qIFRlc3Qgd2hldGhlciBYIGlzIGEgTmFOLiAgKi8KKyMgdW5kZWYgaXNuYW5mCisjIGRlZmluZSBpc25hbmYgcnBsX2lzbmFuZgorZXh0ZXJuIGludCBpc25hbmYgKGZsb2F0IHgpOworI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvaXNuYW5mLmMgYi9saWIvaXNuYW5mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgxNjcwNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9pc25hbmYuYwpAQCAtMCwwICsxLDIwIEBACisvKiBUZXN0IGZvciBOYU4gdGhhdCBkb2VzIG5vdCBuZWVkIGxpYm0uCisgICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4sIDIwMDcuICAqLworCisjZGVmaW5lIFVTRV9GTE9BVAorI2luY2x1ZGUgImlzbmFuLmMiCmRpZmYgLS1naXQgYS9saWIvaXNuYW5sLW5vbGlibS5oIGIvbGliL2lzbmFubC1ub2xpYm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGQ5NjNkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2lzbmFubC1ub2xpYm0uaApAQCAtMCwwICsxLDMzIEBACisvKiBUZXN0IGZvciBOYU4gdGhhdCBkb2VzIG5vdCBuZWVkIGxpYm0uCisgICBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmIEhBVkVfSVNOQU5MX0lOX0xJQkMKKy8qIEdldCBkZWNsYXJhdGlvbiBvZiBpc25hbiBtYWNybyBvciAob2xkZXIpIGlzbmFubCBmdW5jdGlvbi4gICovCisjIGluY2x1ZGUgPG1hdGguaD4KKyMgaWYgX19HTlVDX18gPj0gNAorICAgLyogR0NDIDQuMCBhbmQgbmV3ZXIgcHJvdmlkZXMgdGhyZWUgYnVpbHQtaW5zIGZvciBpc25hbi4gICovCisjICB1bmRlZiBpc25hbmwKKyMgIGRlZmluZSBpc25hbmwoeCkgX19idWlsdGluX2lzbmFubCAoKGxvbmcgZG91YmxlKSh4KSkKKyMgZWxpZiBkZWZpbmVkIGlzbmFuCisjICB1bmRlZiBpc25hbmwKKyMgIGRlZmluZSBpc25hbmwoeCkgaXNuYW4gKChsb25nIGRvdWJsZSkoeCkpCisjIGVuZGlmCisjZWxzZQorLyogVGVzdCB3aGV0aGVyIFggaXMgYSBOYU4uICAqLworIyB1bmRlZiBpc25hbmwKKyMgZGVmaW5lIGlzbmFubCBycGxfaXNuYW5sCitleHRlcm4gaW50IGlzbmFubCAobG9uZyBkb3VibGUgeCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9pc25hbmwuYyBiL2xpYi9pc25hbmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTdhYzJhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2lzbmFubC5jCkBAIC0wLDAgKzEsMjAgQEAKKy8qIFRlc3QgZm9yIE5hTiB0aGF0IGRvZXMgbm90IG5lZWQgbGlibS4KKyAgIENvcHlyaWdodCAoQykgMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPiwgMjAwNy4gICovCisKKyNkZWZpbmUgVVNFX0xPTkdfRE9VQkxFCisjaW5jbHVkZSAiaXNuYW4uYyIKZGlmZiAtLWdpdCBhL2xpYi9pc3dibGFuay5jIGIvbGliL2lzd2JsYW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE4ZGU5OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9pc3dibGFuay5jCkBAIC0wLDAgKzEsMjYgQEAKKy8qIFRlc3Qgd2lkZSBjaGFyYWN0ZXIgZm9yIGJlaW5nIGJsYW5rLgorICAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlIDx3Y3R5cGUuaD4KKworaW50Citpc3dibGFuayAod2ludF90IHdjKQoreworICByZXR1cm4gd2MgPT0gJyAnIHx8IHdjID09ICdcdCc7Cit9CmRpZmYgLS1naXQgYS9saWIvaXRvbGQuYyBiL2xpYi9pdG9sZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZmY3ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvaXRvbGQuYwpAQCAtMCwwICsxLDI4IEBACisvKiBSZXBsYWNlbWVudCBmb3IgJ2ludCcgdG8gJ2xvbmcgZG91YmxlJyBjb252ZXJzaW9uIHJvdXRpbmUuCisgICBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LCAyMDExLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgPGZsb2F0Lmg+CisKK3ZvaWQKK19RcF9pdG9xIChsb25nIGRvdWJsZSAqcmVzdWx0LCBpbnQgYSkKK3sKKyAgLyogQ29udmVydCBmcm9tICdpbnQnIHRvICdkb3VibGUnLCB0aGVuIGZyb20gJ2RvdWJsZScgdG8gJ2xvbmcgZG91YmxlJy4gICovCisgICpyZXN1bHQgPSAoZG91YmxlKSBhOworfQpkaWZmIC0tZ2l0IGEvbGliL2xiaXRzZXQuYyBiL2xpYi9sYml0c2V0LmMKaW5kZXggN2Q0N2EwNS4uYWExOWY0NSAxMDA2NDQKLS0tIGEvbGliL2xiaXRzZXQuYworKysgYi9saWIvbGJpdHNldC5jCkBAIC0xLDEwICsxLDEzIEBACiAvKiBGdW5jdGlvbnMgdG8gc3VwcG9ydCBsaW5rIGxpc3QgYml0c2V0cy4KLSAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQsIDIwMDYsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuCisKICAgIENvbnRyaWJ1dGVkIGJ5IE1pY2hhZWwgSGF5ZXMgKG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56KS4KIAotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKQEAgLTEzLDE0ICsxNiwxMiBAQAogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCisjaW5jbHVkZSA8Y29uZmlnLmg+CiAKICNpbmNsdWRlICJsYml0c2V0LmgiCisKICNpbmNsdWRlICJvYnN0YWNrLmgiCiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC0zNTEsNyArMzUyLDcgQEAKIAogICAgICAgLyogRUxUIGlzIHRoZSBuZWFyZXN0IHRvIHRoZSBvbmUgd2Ugd2FudC4gIElmIGl0J3Mgbm90IHRoZSBvbmUKIAkgd2Ugd2FudCwgdGhlIG9uZSB3ZSB3YW50IGRvZXMgbm90IGV4aXN0LiAgKi8KLSAgICAgIGlmIChlbHQgJiYgKHdpbmRleCAtIGVsdC0+aW5kZXgpIDwgTEJJVFNFVF9FTFRfV09SRFMpCisgICAgICBpZiAod2luZGV4IC0gZWx0LT5pbmRleCA8IExCSVRTRVRfRUxUX1dPUkRTKQogCXsKIAkgIGJzZXQtPmIuY2luZGV4ID0gZWx0LT5pbmRleDsKIAkgIGJzZXQtPmIuY3NpemUgPSBMQklUU0VUX0VMVF9XT1JEUzsKQEAgLTkzNSwxNyArOTM2LDEyIEBACiBzdGF0aWMgdm9pZAogbGJpdHNldF9ub3QgKGJpdHNldCBkc3QsIGJpdHNldCBzcmMpCiB7Ci0gIGxiaXRzZXRfZWx0ICplbHQ7CiAgIGxiaXRzZXRfZWx0ICpzZWx0OwogICBsYml0c2V0X2VsdCAqZGVsdDsKICAgYml0c2V0X3dpbmRleCBpOwogICB1bnNpZ25lZCBpbnQgajsKICAgYml0c2V0X3dpbmRleCB3aW5kZXg7CiAKLSAgLyogVGhpcyBpcyBhbm90aGVyIHVuZnJpZW5kbHkgb3BlcmF0aW9uIGZvciBhIGxpbmtlZCBsaXN0Ci0gICAgIGJpdHNldCEgICovCi0gIGVsdCA9IExCSVRTRVRfVEFJTCAoZHN0KTsKLQogICB3aW5kZXggPSAoQklUU0VUX1NJWkVfIChkc3QpICsgQklUU0VUX1dPUkRfQklUUyAtIDEpIC8gQklUU0VUX1dPUkRfQklUUzsKIAogICBmb3IgKGkgPSAwOyBpIDwgd2luZGV4OyBpICs9IExCSVRTRVRfRUxUX1dPUkRTKQpkaWZmIC0tZ2l0IGEvbGliL2xiaXRzZXQuaCBiL2xpYi9sYml0c2V0LmgKaW5kZXggYWFhZDgzNC4uNzk4MDRkYSAxMDA2NDQKLS0tIGEvbGliL2xiaXRzZXQuaAorKysgYi9saWIvbGJpdHNldC5oCkBAIC0xLDIwICsxLDIxIEBACiAvKiBGdW5jdGlvbnMgdG8gc3VwcG9ydCBsYml0c2V0cy4KLSAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKICAgIENvbnRyaWJ1dGVkIGJ5IE1pY2hhZWwgSGF5ZXMgKG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56KS4KIAotVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci10aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCi1Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLUZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpZm5kZWYgX0xCSVRTRVRfSAogI2RlZmluZSBfTEJJVFNFVF9ICmRpZmYgLS1naXQgYS9saWIvbGRleHBsLmMgYi9saWIvbGRleHBsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZjZmZmOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9sZGV4cGwuYwpAQCAtMCwwICsxLDg5IEBACisvKiBFbXVsYXRpb24gZm9yIGxkZXhwbC4KKyAgIENvbnRyaWJ1dGVkIGJ5IFBhb2xvIEJvbnppbmkKKworICAgQ29weXJpZ2h0IDIwMDItMjAwMywgMjAwNy0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBnbnVsaWIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaWYgSEFWRV9TQU1FX0xPTkdfRE9VQkxFX0FTX0RPVUJMRQorCitsb25nIGRvdWJsZQorbGRleHBsIChsb25nIGRvdWJsZSB4LCBpbnQgZXhwKQoreworICByZXR1cm4gbGRleHAgKHgsIGV4cCk7Cit9CisKKyNlbHNlCisKKyMgaW5jbHVkZSA8ZmxvYXQuaD4KKyMgaW5jbHVkZSAiZnB1Y3cuaCIKKworbG9uZyBkb3VibGUKK2xkZXhwbCAobG9uZyBkb3VibGUgeCwgaW50IGV4cCkKK3sKKyAgbG9uZyBkb3VibGUgZmFjdG9yOworICBpbnQgYml0OworICBERUNMX0xPTkdfRE9VQkxFX1JPVU5ESU5HCisKKyAgQkVHSU5fTE9OR19ET1VCTEVfUk9VTkRJTkcgKCk7CisKKyAgLyogQ2hlY2sgZm9yIHplcm8sIG5hbiBhbmQgaW5maW5pdHkuICovCisgIGlmICghKGlzbmFubCAoeCkgfHwgeCArIHggPT0geCkpCisgICAgeworICAgICAgaWYgKGV4cCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICBleHAgPSAtZXhwOworICAgICAgICAgIGZhY3RvciA9IDAuNUw7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgZmFjdG9yID0gMi4wTDsKKworICAgICAgaWYgKGV4cCA+IDApCisgICAgICAgIGZvciAoYml0ID0gMTs7KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEludmFyaWFudDogSGVyZSBiaXQgPSAyXmksIGZhY3RvciA9IDJeLTJeaSBvciA9IDJeMl5pLAorICAgICAgICAgICAgICAgYW5kIGJpdCA8PSBleHAuICAqLworICAgICAgICAgICAgaWYgKGV4cCAmIGJpdCkKKyAgICAgICAgICAgICAgeCAqPSBmYWN0b3I7CisgICAgICAgICAgICBiaXQgPDw9IDE7CisgICAgICAgICAgICBpZiAoYml0ID4gZXhwKQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGZhY3RvciA9IGZhY3RvciAqIGZhY3RvcjsKKyAgICAgICAgICB9CisgICAgfQorCisgIEVORF9MT05HX0RPVUJMRV9ST1VORElORyAoKTsKKworICByZXR1cm4geDsKK30KKworI2VuZGlmCisKKyNpZiAwCitpbnQKK21haW4gKHZvaWQpCit7CisgIGxvbmcgZG91YmxlIHg7CisgIGludCB5OworICBmb3IgKHkgPSAwOyB5IDwgMjk7IHkrKykKKyAgICBwcmludGYgKCIlNWQgJS4xNkxnICUuMTZMZ1xuIiwgeSwgbGRleHBsICgwLjhMLCB5KSwgbGRleHBsICgwLjhMLCAteSkgKiBsZGV4cGwgKDAuOEwsIHkpKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2xpYmliZXJ0eS5oIGIvbGliL2xpYmliZXJ0eS5oCmluZGV4IGU4NjI5ZTQuLmFkN2IzNTggMTAwNjQ0Ci0tLSBhL2xpYi9saWJpYmVydHkuaAorKysgYi9saWIvbGliaWJlcnR5LmgKQEAgLTEsMTAgKzEsMTEgQEAKIC8qIEZha2UgbGliaWJlcnR5LmggZm9yIEJpc29uLgotICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCkBAIC0xMiw4ICsxMyw3IEBACiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogCiAvKiBCaXNvbiBkZXBlbmRzIG9uIGxpYmliZXJ0eSdzIGltcGxlbWVudGF0aW9uIG9mIGJpdHNldHMsIHdoaWNoCkBAIC0yNCw3ICsyNCw3IEBACiAjIGRlZmluZSBCSVNPTl9MSUJJQkVSVFlfSF8gMQogCiAjIGlmbmRlZiBfX2F0dHJpYnV0ZV9fCi0jICBpZiBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA4KSB8fCBfX1NUUklDVF9BTlNJX18KKyMgIGlmIF9fR05VQ19fIDwgMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDgpCiAjICAgZGVmaW5lIF9fYXR0cmlidXRlX18oeCkKICMgIGVuZGlmCiAjIGVuZGlmCmRpZmYgLS1naXQgYS9saWIvbG9jYWxjaGFyc2V0LmMgYi9saWIvbG9jYWxjaGFyc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQxNmM4NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9sb2NhbGNoYXJzZXQuYwpAQCAtMCwwICsxLDU1MyBAQAorLyogRGV0ZXJtaW5lIGEgY2Fub25pY2FsIG5hbWUgZm9yIHRoZSBjdXJyZW50IGxvY2FsZSdzIGNoYXJhY3RlciBlbmNvZGluZy4KKworICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDYsIDIwMDgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPi4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaW5jbHVkZSAibG9jYWxjaGFyc2V0LmgiCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpZiBkZWZpbmVkIF9fQVBQTEVfXyAmJiBkZWZpbmVkIF9fTUFDSF9fICYmIEhBVkVfTEFOR0lORk9fQ09ERVNFVAorIyBkZWZpbmUgREFSV0lONyAvKiBEYXJ3aW4gNyBvciBuZXdlciwgaS5lLiBNYWMgT1MgWCAxMC4zIG9yIG5ld2VyICovCisjZW5kaWYKKworI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fCisjIGRlZmluZSBXSU5ET1dTX05BVElWRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIF9fRU1YX18KKy8qIEFzc3VtZSBFTVggcHJvZ3JhbSBydW5zIG9uIE9TLzIsIGV2ZW4gaWYgY29tcGlsZWQgdW5kZXIgRE9TLiAgKi8KKyMgaWZuZGVmIE9TMgorIyAgZGVmaW5lIE9TMgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCBXSU5ET1dTX05BVElWRQorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyMgaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisjICBpbmNsdWRlIDxsYW5naW5mby5oPgorIyBlbHNlCisjICBpZiAwIC8qIHNlZSBjb21tZW50IGJlbG93ICovCisjICAgaW5jbHVkZSA8bG9jYWxlLmg+CisjICBlbmRpZgorIyBlbmRpZgorIyBpZmRlZiBfX0NZR1dJTl9fCisjICBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyAgaW5jbHVkZSA8d2luZG93cy5oPgorIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBXSU5ET1dTX05BVElWRQorIyBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyBpbmNsdWRlIDx3aW5kb3dzLmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkIE9TMgorIyBkZWZpbmUgSU5DTF9ET1MKKyMgaW5jbHVkZSA8b3MyLmg+CisjZW5kaWYKKworI2lmIEVOQUJMRV9SRUxPQ0FUQUJMRQorIyBpbmNsdWRlICJyZWxvY2F0YWJsZS5oIgorI2Vsc2UKKyMgZGVmaW5lIHJlbG9jYXRlKHBhdGhuYW1lKSAocGF0aG5hbWUpCisjZW5kaWYKKworLyogR2V0IExJQkRJUi4gICovCisjaWZuZGVmIExJQkRJUgorIyBpbmNsdWRlICJjb25maWdtYWtlLmgiCisjZW5kaWYKKworLyogRGVmaW5lIE9fTk9GT0xMT1cgdG8gMCBvbiBwbGF0Zm9ybXMgd2hlcmUgaXQgZG9lcyBub3QgZXhpc3QuICAqLworI2lmbmRlZiBPX05PRk9MTE9XCisjIGRlZmluZSBPX05PRk9MTE9XIDAKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBfX0NZR1dJTl9fIHx8IGRlZmluZWQgX19FTVhfXyB8fCBkZWZpbmVkIF9fREpHUFBfXworICAvKiBOYXRpdmUgV2luZG93cywgQ3lnd2luLCBPUy8yLCBET1MgKi8KKyMgZGVmaW5lIElTU0xBU0goQykgKChDKSA9PSAnLycgfHwgKEMpID09ICdcXCcpCisjZW5kaWYKKworI2lmbmRlZiBESVJFQ1RPUllfU0VQQVJBVE9SCisjIGRlZmluZSBESVJFQ1RPUllfU0VQQVJBVE9SICcvJworI2VuZGlmCisKKyNpZm5kZWYgSVNTTEFTSAorIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09IERJUkVDVE9SWV9TRVBBUkFUT1IpCisjZW5kaWYKKworI2lmIEhBVkVfREVDTF9HRVRDX1VOTE9DS0VECisjIHVuZGVmIGdldGMKKyMgZGVmaW5lIGdldGMgZ2V0Y191bmxvY2tlZAorI2VuZGlmCisKKy8qIFRoZSBmb2xsb3dpbmcgc3RhdGljIHZhcmlhYmxlIGlzIGRlY2xhcmVkICd2b2xhdGlsZScgdG8gYXZvaWQgYQorICAgcG9zc2libGUgbXVsdGl0aHJlYWQgcHJvYmxlbSBpbiB0aGUgZnVuY3Rpb24gZ2V0X2NoYXJzZXRfYWxpYXNlcy4gSWYgd2UKKyAgIGFyZSBydW5uaW5nIGluIGEgdGhyZWFkZWQgZW52aXJvbm1lbnQsIGFuZCBpZiB0d28gdGhyZWFkcyBpbml0aWFsaXplCisgICAnY2hhcnNldF9hbGlhc2VzJyBzaW11bHRhbmVvdXNseSwgYm90aCB3aWxsIHByb2R1Y2UgdGhlIHNhbWUgdmFsdWUsCisgICBhbmQgZXZlcnl0aGluZyB3aWxsIGJlIG9rIGlmIHRoZSB0d28gYXNzaWdubWVudHMgdG8gJ2NoYXJzZXRfYWxpYXNlcycKKyAgIGFyZSBhdG9taWMuIEJ1dCBJIGRvbid0IGtub3cgd2hhdCB3aWxsIGhhcHBlbiBpZiB0aGUgdHdvIGFzc2lnbm1lbnRzIG1peC4gICovCisjaWYgX19TVERDX18gIT0gMQorIyBkZWZpbmUgdm9sYXRpbGUgLyogZW1wdHkgKi8KKyNlbmRpZgorLyogUG9pbnRlciB0byB0aGUgY29udGVudHMgb2YgdGhlIGNoYXJzZXQuYWxpYXMgZmlsZSwgaWYgaXQgaGFzIGFscmVhZHkgYmVlbgorICAgcmVhZCwgZWxzZSBOVUxMLiAgSXRzIGZvcm1hdCBpczoKKyAgIEFMSUFTXzEgJ1wwJyBDQU5PTklDQUxfMSAnXDAnIC4uLiBBTElBU19uICdcMCcgQ0FOT05JQ0FMX24gJ1wwJyAnXDAnICAqLworc3RhdGljIGNvbnN0IGNoYXIgKiB2b2xhdGlsZSBjaGFyc2V0X2FsaWFzZXM7CisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUuICAqLworc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0X2NoYXJzZXRfYWxpYXNlcyAodm9pZCkKK3sKKyAgY29uc3QgY2hhciAqY3A7CisKKyAgY3AgPSBjaGFyc2V0X2FsaWFzZXM7CisgIGlmIChjcCA9PSBOVUxMKQorICAgIHsKKyNpZiAhKGRlZmluZWQgREFSV0lONyB8fCBkZWZpbmVkIFZNUyB8fCBkZWZpbmVkIFdJTkRPV1NfTkFUSVZFIHx8IGRlZmluZWQgX19DWUdXSU5fXykKKyAgICAgIGNvbnN0IGNoYXIgKmRpcjsKKyAgICAgIGNvbnN0IGNoYXIgKmJhc2UgPSAiY2hhcnNldC5hbGlhcyI7CisgICAgICBjaGFyICpmaWxlX25hbWU7CisKKyAgICAgIC8qIE1ha2UgaXQgcG9zc2libGUgdG8gb3ZlcnJpZGUgdGhlIGNoYXJzZXQuYWxpYXMgbG9jYXRpb24uICBUaGlzIGlzCisgICAgICAgICBuZWNlc3NhcnkgZm9yIHJ1bm5pbmcgdGhlIHRlc3RzdWl0ZSBiZWZvcmUgIm1ha2UgaW5zdGFsbCIuICAqLworICAgICAgZGlyID0gZ2V0ZW52ICgiQ0hBUlNFVEFMSUFTRElSIik7CisgICAgICBpZiAoZGlyID09IE5VTEwgfHwgZGlyWzBdID09ICdcMCcpCisgICAgICAgIGRpciA9IHJlbG9jYXRlIChMSUJESVIpOworCisgICAgICAvKiBDb25jYXRlbmF0ZSBkaXIgYW5kIGJhc2UgaW50byBmcmVzaGx5IGFsbG9jYXRlZCBmaWxlX25hbWUuICAqLworICAgICAgeworICAgICAgICBzaXplX3QgZGlyX2xlbiA9IHN0cmxlbiAoZGlyKTsKKyAgICAgICAgc2l6ZV90IGJhc2VfbGVuID0gc3RybGVuIChiYXNlKTsKKyAgICAgICAgaW50IGFkZF9zbGFzaCA9IChkaXJfbGVuID4gMCAmJiAhSVNTTEFTSCAoZGlyW2Rpcl9sZW4gLSAxXSkpOworICAgICAgICBmaWxlX25hbWUgPSAoY2hhciAqKSBtYWxsb2MgKGRpcl9sZW4gKyBhZGRfc2xhc2ggKyBiYXNlX2xlbiArIDEpOworICAgICAgICBpZiAoZmlsZV9uYW1lICE9IE5VTEwpCisgICAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5IChmaWxlX25hbWUsIGRpciwgZGlyX2xlbik7CisgICAgICAgICAgICBpZiAoYWRkX3NsYXNoKQorICAgICAgICAgICAgICBmaWxlX25hbWVbZGlyX2xlbl0gPSBESVJFQ1RPUllfU0VQQVJBVE9SOworICAgICAgICAgICAgbWVtY3B5IChmaWxlX25hbWUgKyBkaXJfbGVuICsgYWRkX3NsYXNoLCBiYXNlLCBiYXNlX2xlbiArIDEpOworICAgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKGZpbGVfbmFtZSA9PSBOVUxMKQorICAgICAgICAvKiBPdXQgb2YgbWVtb3J5LiAgVHJlYXQgdGhlIGZpbGUgYXMgZW1wdHkuICAqLworICAgICAgICBjcCA9ICIiOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgaW50IGZkOworCisgICAgICAgICAgLyogT3BlbiB0aGUgZmlsZS4gIFJlamVjdCBzeW1ib2xpYyBsaW5rcyBvbiBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0CisgICAgICAgICAgICAgT19OT0ZPTExPVy4gIFRoaXMgaXMgYSBzZWN1cml0eSBmZWF0dXJlLiAgV2l0aG91dCBpdCwgYW4gYXR0YWNrZXIKKyAgICAgICAgICAgICBjb3VsZCByZXRyaWV2ZSBwYXJ0cyBvZiB0aGUgY29udGVudHMgKG5hbWVseSwgdGhlIHRhaWwgb2YgdGhlCisgICAgICAgICAgICAgZmlyc3QgbGluZSB0aGF0IHN0YXJ0cyB3aXRoICIqICIpIG9mIGFuIGFyYml0cmFyeSBmaWxlIGJ5IHBsYWNpbmcKKyAgICAgICAgICAgICBhIHN5bWJvbGljIGxpbmsgdG8gdGhhdCBmaWxlIHVuZGVyIHRoZSBuYW1lICJjaGFyc2V0LmFsaWFzIiBpbgorICAgICAgICAgICAgIHNvbWUgd3JpdGFibGUgZGlyZWN0b3J5IGFuZCBkZWZpbmluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgICAgICAgICAgICBDSEFSU0VUQUxJQVNESVIgdG8gcG9pbnQgdG8gdGhhdCBkaXJlY3RvcnkuICAqLworICAgICAgICAgIGZkID0gb3BlbiAoZmlsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgT19SRE9OTFkgfCAoSEFWRV9XT1JLSU5HX09fTk9GT0xMT1cgPyBPX05PRk9MTE9XIDogMCkpOworICAgICAgICAgIGlmIChmZCA8IDApCisgICAgICAgICAgICAvKiBGaWxlIG5vdCBmb3VuZC4gIFRyZWF0IGl0IGFzIGVtcHR5LiAgKi8KKyAgICAgICAgICAgIGNwID0gIiI7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBGSUxFICpmcDsKKworICAgICAgICAgICAgICBmcCA9IGZkb3BlbiAoZmQsICJyIik7CisgICAgICAgICAgICAgIGlmIChmcCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIC8qIE91dCBvZiBtZW1vcnkuICBUcmVhdCB0aGUgZmlsZSBhcyBlbXB0eS4gICovCisgICAgICAgICAgICAgICAgICBjbG9zZSAoZmQpOworICAgICAgICAgICAgICAgICAgY3AgPSAiIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAvKiBQYXJzZSB0aGUgZmlsZSdzIGNvbnRlbnRzLiAgKi8KKyAgICAgICAgICAgICAgICAgIGNoYXIgKnJlc19wdHIgPSBOVUxMOworICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlc19zaXplID0gMDsKKworICAgICAgICAgICAgICAgICAgZm9yICg7OykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGludCBjOworICAgICAgICAgICAgICAgICAgICAgIGNoYXIgYnVmMVs1MCsxXTsKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyIGJ1ZjJbNTArMV07CisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGwxLCBsMjsKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyICpvbGRfcmVzX3B0cjsKKworICAgICAgICAgICAgICAgICAgICAgIGMgPSBnZXRjIChmcCk7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gRU9GKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1xuJyB8fCBjID09ICcgJyB8fCBjID09ICdcdCcpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAnIycpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNraXAgY29tbWVudCwgdG8gZW5kIG9mIGxpbmUuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBkbworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBnZXRjIChmcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICghKGMgPT0gRU9GIHx8IGMgPT0gJ1xuJykpOworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSBFT0YpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIHVuZ2V0YyAoYywgZnApOworICAgICAgICAgICAgICAgICAgICAgIGlmIChmc2NhbmYgKGZwLCAiJTUwcyAlNTBzIiwgYnVmMSwgYnVmMikgPCAyKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgbDEgPSBzdHJsZW4gKGJ1ZjEpOworICAgICAgICAgICAgICAgICAgICAgIGwyID0gc3RybGVuIChidWYyKTsKKyAgICAgICAgICAgICAgICAgICAgICBvbGRfcmVzX3B0ciA9IHJlc19wdHI7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc19zaXplID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc19zaXplID0gbDEgKyAxICsgbDIgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICByZXNfcHRyID0gKGNoYXIgKikgbWFsbG9jIChyZXNfc2l6ZSArIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzX3NpemUgKz0gbDEgKyAxICsgbDIgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICByZXNfcHRyID0gKGNoYXIgKikgcmVhbGxvYyAocmVzX3B0ciwgcmVzX3NpemUgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzX3B0ciA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdXQgb2YgbWVtb3J5LiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICByZXNfc2l6ZSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUgKG9sZF9yZXNfcHRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5IChyZXNfcHRyICsgcmVzX3NpemUgLSAobDIgKyAxKSAtIChsMSArIDEpLCBidWYxKTsKKyAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkgKHJlc19wdHIgKyByZXNfc2l6ZSAtIChsMiArIDEpLCBidWYyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZmNsb3NlIChmcCk7CisgICAgICAgICAgICAgICAgICBpZiAocmVzX3NpemUgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgY3AgPSAiIjsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICoocmVzX3B0ciArIHJlc19zaXplKSA9ICdcMCc7CisgICAgICAgICAgICAgICAgICAgICAgY3AgPSByZXNfcHRyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgZnJlZSAoZmlsZV9uYW1lKTsKKyAgICAgICAgfQorCisjZWxzZQorCisjIGlmIGRlZmluZWQgREFSV0lONworICAgICAgLyogVG8gYXZvaWQgdGhlIHRyb3VibGUgb2YgaW5zdGFsbGluZyBhIGZpbGUgdGhhdCBpcyBzaGFyZWQgYnkgbWFueQorICAgICAgICAgR05VIHBhY2thZ2VzIC0tIG1hbnkgcGFja2FnaW5nIHN5c3RlbXMgaGF2ZSBwcm9ibGVtcyB3aXRoIHRoaXMgLS0sCisgICAgICAgICBzaW1wbHkgaW5saW5lIHRoZSBhbGlhc2VzIGhlcmUuICAqLworICAgICAgY3AgPSAiSVNPODg1OS0xIiAiXDAiICJJU08tODg1OS0xIiAiXDAiCisgICAgICAgICAgICJJU084ODU5LTIiICJcMCIgIklTTy04ODU5LTIiICJcMCIKKyAgICAgICAgICAgIklTTzg4NTktNCIgIlwwIiAiSVNPLTg4NTktNCIgIlwwIgorICAgICAgICAgICAiSVNPODg1OS01IiAiXDAiICJJU08tODg1OS01IiAiXDAiCisgICAgICAgICAgICJJU084ODU5LTciICJcMCIgIklTTy04ODU5LTciICJcMCIKKyAgICAgICAgICAgIklTTzg4NTktOSIgIlwwIiAiSVNPLTg4NTktOSIgIlwwIgorICAgICAgICAgICAiSVNPODg1OS0xMyIgIlwwIiAiSVNPLTg4NTktMTMiICJcMCIKKyAgICAgICAgICAgIklTTzg4NTktMTUiICJcMCIgIklTTy04ODU5LTE1IiAiXDAiCisgICAgICAgICAgICJLT0k4LVIiICJcMCIgIktPSTgtUiIgIlwwIgorICAgICAgICAgICAiS09JOC1VIiAiXDAiICJLT0k4LVUiICJcMCIKKyAgICAgICAgICAgIkNQODY2IiAiXDAiICJDUDg2NiIgIlwwIgorICAgICAgICAgICAiQ1A5NDkiICJcMCIgIkNQOTQ5IiAiXDAiCisgICAgICAgICAgICJDUDExMzEiICJcMCIgIkNQMTEzMSIgIlwwIgorICAgICAgICAgICAiQ1AxMjUxIiAiXDAiICJDUDEyNTEiICJcMCIKKyAgICAgICAgICAgImV1Y0NOIiAiXDAiICJHQjIzMTIiICJcMCIKKyAgICAgICAgICAgIkdCMjMxMiIgIlwwIiAiR0IyMzEyIiAiXDAiCisgICAgICAgICAgICJldWNKUCIgIlwwIiAiRVVDLUpQIiAiXDAiCisgICAgICAgICAgICJldWNLUiIgIlwwIiAiRVVDLUtSIiAiXDAiCisgICAgICAgICAgICJCaWc1IiAiXDAiICJCSUc1IiAiXDAiCisgICAgICAgICAgICJCaWc1SEtTQ1MiICJcMCIgIkJJRzUtSEtTQ1MiICJcMCIKKyAgICAgICAgICAgIkdCSyIgIlwwIiAiR0JLIiAiXDAiCisgICAgICAgICAgICJHQjE4MDMwIiAiXDAiICJHQjE4MDMwIiAiXDAiCisgICAgICAgICAgICJTSklTIiAiXDAiICJTSElGVF9KSVMiICJcMCIKKyAgICAgICAgICAgIkFSTVNDSUktOCIgIlwwIiAiQVJNU0NJSS04IiAiXDAiCisgICAgICAgICAgICJQVDE1NCIgIlwwIiAiUFQxNTQiICJcMCIKKyAgICAgICAgIC8qIklTQ0lJLURFViIgIlwwIiAiPyIgIlwwIiovCisgICAgICAgICAgICIqIiAiXDAiICJVVEYtOCIgIlwwIjsKKyMgZW5kaWYKKworIyBpZiBkZWZpbmVkIFZNUworICAgICAgLyogVG8gYXZvaWQgdGhlIHRyb3VibGVzIG9mIGFuIGV4dHJhIGZpbGUgY2hhcnNldC5hbGlhc192bXMgaW4gdGhlCisgICAgICAgICBzb3VyY2VzIG9mIG1hbnkgR05VIHBhY2thZ2VzLCBzaW1wbHkgaW5saW5lIHRoZSBhbGlhc2VzIGhlcmUuICAqLworICAgICAgLyogVGhlIGxpc3Qgb2YgZW5jb2RpbmdzIGlzIHRha2VuIGZyb20gdGhlIE9wZW5WTVMgNy4zLTEgZG9jdW1lbnRhdGlvbgorICAgICAgICAgIkNvbXBhcSBDIFJ1bi1UaW1lIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCBmb3IgT3BlblZNUyBzeXN0ZW1zIgorICAgICAgICAgc2VjdGlvbiAxMC43ICJIYW5kbGluZyBEaWZmZXJlbnQgQ2hhcmFjdGVyIFNldHMiLiAgKi8KKyAgICAgIGNwID0gIklTTzg4NTktMSIgIlwwIiAiSVNPLTg4NTktMSIgIlwwIgorICAgICAgICAgICAiSVNPODg1OS0yIiAiXDAiICJJU08tODg1OS0yIiAiXDAiCisgICAgICAgICAgICJJU084ODU5LTUiICJcMCIgIklTTy04ODU5LTUiICJcMCIKKyAgICAgICAgICAgIklTTzg4NTktNyIgIlwwIiAiSVNPLTg4NTktNyIgIlwwIgorICAgICAgICAgICAiSVNPODg1OS04IiAiXDAiICJJU08tODg1OS04IiAiXDAiCisgICAgICAgICAgICJJU084ODU5LTkiICJcMCIgIklTTy04ODU5LTkiICJcMCIKKyAgICAgICAgICAgLyogSmFwYW5lc2UgKi8KKyAgICAgICAgICAgImV1Y0pQIiAiXDAiICJFVUMtSlAiICJcMCIKKyAgICAgICAgICAgIlNKSVMiICJcMCIgIlNISUZUX0pJUyIgIlwwIgorICAgICAgICAgICAiREVDS0FOSkkiICJcMCIgIkRFQy1LQU5KSSIgIlwwIgorICAgICAgICAgICAiU0RFQ0tBTkpJIiAiXDAiICJFVUMtSlAiICJcMCIKKyAgICAgICAgICAgLyogQ2hpbmVzZSAqLworICAgICAgICAgICAiZXVjVFciICJcMCIgIkVVQy1UVyIgIlwwIgorICAgICAgICAgICAiREVDSEFOWVUiICJcMCIgIkRFQy1IQU5ZVSIgIlwwIgorICAgICAgICAgICAiREVDSEFOWkkiICJcMCIgIkdCMjMxMiIgIlwwIgorICAgICAgICAgICAvKiBLb3JlYW4gKi8KKyAgICAgICAgICAgIkRFQ0tPUkVBTiIgIlwwIiAiRVVDLUtSIiAiXDAiOworIyBlbmRpZgorCisjIGlmIGRlZmluZWQgV0lORE9XU19OQVRJVkUgfHwgZGVmaW5lZCBfX0NZR1dJTl9fCisgICAgICAvKiBUbyBhdm9pZCB0aGUgdHJvdWJsZXMgb2YgaW5zdGFsbGluZyBhIHNlcGFyYXRlIGZpbGUgaW4gdGhlIHNhbWUKKyAgICAgICAgIGRpcmVjdG9yeSBhcyB0aGUgRExMIGFuZCBvZiByZXRyaWV2aW5nIHRoZSBETEwncyBkaXJlY3RvcnkgYXQKKyAgICAgICAgIHJ1bnRpbWUsIHNpbXBseSBpbmxpbmUgdGhlIGFsaWFzZXMgaGVyZS4gICovCisKKyAgICAgIGNwID0gIkNQOTM2IiAiXDAiICJHQksiICJcMCIKKyAgICAgICAgICAgIkNQMTM2MSIgIlwwIiAiSk9IQUIiICJcMCIKKyAgICAgICAgICAgIkNQMjAxMjciICJcMCIgIkFTQ0lJIiAiXDAiCisgICAgICAgICAgICJDUDIwODY2IiAiXDAiICJLT0k4LVIiICJcMCIKKyAgICAgICAgICAgIkNQMjA5MzYiICJcMCIgIkdCMjMxMiIgIlwwIgorICAgICAgICAgICAiQ1AyMTg2NiIgIlwwIiAiS09JOC1SVSIgIlwwIgorICAgICAgICAgICAiQ1AyODU5MSIgIlwwIiAiSVNPLTg4NTktMSIgIlwwIgorICAgICAgICAgICAiQ1AyODU5MiIgIlwwIiAiSVNPLTg4NTktMiIgIlwwIgorICAgICAgICAgICAiQ1AyODU5MyIgIlwwIiAiSVNPLTg4NTktMyIgIlwwIgorICAgICAgICAgICAiQ1AyODU5NCIgIlwwIiAiSVNPLTg4NTktNCIgIlwwIgorICAgICAgICAgICAiQ1AyODU5NSIgIlwwIiAiSVNPLTg4NTktNSIgIlwwIgorICAgICAgICAgICAiQ1AyODU5NiIgIlwwIiAiSVNPLTg4NTktNiIgIlwwIgorICAgICAgICAgICAiQ1AyODU5NyIgIlwwIiAiSVNPLTg4NTktNyIgIlwwIgorICAgICAgICAgICAiQ1AyODU5OCIgIlwwIiAiSVNPLTg4NTktOCIgIlwwIgorICAgICAgICAgICAiQ1AyODU5OSIgIlwwIiAiSVNPLTg4NTktOSIgIlwwIgorICAgICAgICAgICAiQ1AyODYwNSIgIlwwIiAiSVNPLTg4NTktMTUiICJcMCIKKyAgICAgICAgICAgIkNQMzg1OTgiICJcMCIgIklTTy04ODU5LTgiICJcMCIKKyAgICAgICAgICAgIkNQNTE5MzIiICJcMCIgIkVVQy1KUCIgIlwwIgorICAgICAgICAgICAiQ1A1MTkzNiIgIlwwIiAiR0IyMzEyIiAiXDAiCisgICAgICAgICAgICJDUDUxOTQ5IiAiXDAiICJFVUMtS1IiICJcMCIKKyAgICAgICAgICAgIkNQNTE5NTAiICJcMCIgIkVVQy1UVyIgIlwwIgorICAgICAgICAgICAiQ1A1NDkzNiIgIlwwIiAiR0IxODAzMCIgIlwwIgorICAgICAgICAgICAiQ1A2NTAwMSIgIlwwIiAiVVRGLTgiICJcMCI7CisjIGVuZGlmCisjZW5kaWYKKworICAgICAgY2hhcnNldF9hbGlhc2VzID0gY3A7CisgICAgfQorCisgIHJldHVybiBjcDsKK30KKworLyogRGV0ZXJtaW5lIHRoZSBjdXJyZW50IGxvY2FsZSdzIGNoYXJhY3RlciBlbmNvZGluZywgYW5kIGNhbm9uaWNhbGl6ZSBpdAorICAgaW50byBvbmUgb2YgdGhlIGNhbm9uaWNhbCBuYW1lcyBsaXN0ZWQgaW4gY29uZmlnLmNoYXJzZXQuCisgICBUaGUgcmVzdWx0IG11c3Qgbm90IGJlIGZyZWVkOyBpdCBpcyBzdGF0aWNhbGx5IGFsbG9jYXRlZC4KKyAgIElmIHRoZSBjYW5vbmljYWwgbmFtZSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCwgdGhlIHJlc3VsdCBpcyBhIG5vbi1jYW5vbmljYWwKKyAgIG5hbWUuICAqLworCisjaWZkZWYgU1RBVElDCitTVEFUSUMKKyNlbmRpZgorY29uc3QgY2hhciAqCitsb2NhbGVfY2hhcnNldCAodm9pZCkKK3sKKyAgY29uc3QgY2hhciAqY29kZXNldDsKKyAgY29uc3QgY2hhciAqYWxpYXNlczsKKworI2lmICEoZGVmaW5lZCBXSU5ET1dTX05BVElWRSB8fCBkZWZpbmVkIE9TMikKKworIyBpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKworICAvKiBNb3N0IHN5c3RlbXMgc3VwcG9ydCBubF9sYW5naW5mbyAoQ09ERVNFVCkgbm93YWRheXMuICAqLworICBjb2Rlc2V0ID0gbmxfbGFuZ2luZm8gKENPREVTRVQpOworCisjICBpZmRlZiBfX0NZR1dJTl9fCisgIC8qIEN5Z3dpbiA8IDEuNyBkb2VzIG5vdCBoYXZlIGxvY2FsZXMuICBubF9sYW5naW5mbyAoQ09ERVNFVCkgYWx3YXlzCisgICAgIHJldHVybnMgIlVTLUFTQ0lJIi4gIFJldHVybiB0aGUgc3VmZml4IG9mIHRoZSBsb2NhbGUgbmFtZSBmcm9tIHRoZQorICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKGlmIHByZXNlbnQpIG9yIHRoZSBjb2RlcGFnZSBhcyBhIG51bWJlci4gICovCisgIGlmIChjb2Rlc2V0ICE9IE5VTEwgJiYgc3RyY21wIChjb2Rlc2V0LCAiVVMtQVNDSUkiKSA9PSAwKQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKmxvY2FsZTsKKyAgICAgIHN0YXRpYyBjaGFyIGJ1ZlsyICsgMTAgKyAxXTsKKworICAgICAgbG9jYWxlID0gZ2V0ZW52ICgiTENfQUxMIik7CisgICAgICBpZiAobG9jYWxlID09IE5VTEwgfHwgbG9jYWxlWzBdID09ICdcMCcpCisgICAgICAgIHsKKyAgICAgICAgICBsb2NhbGUgPSBnZXRlbnYgKCJMQ19DVFlQRSIpOworICAgICAgICAgIGlmIChsb2NhbGUgPT0gTlVMTCB8fCBsb2NhbGVbMF0gPT0gJ1wwJykKKyAgICAgICAgICAgIGxvY2FsZSA9IGdldGVudiAoIkxBTkciKTsKKyAgICAgICAgfQorICAgICAgaWYgKGxvY2FsZSAhPSBOVUxMICYmIGxvY2FsZVswXSAhPSAnXDAnKQorICAgICAgICB7CisgICAgICAgICAgLyogSWYgdGhlIGxvY2FsZSBuYW1lIGNvbnRhaW5zIGFuIGVuY29kaW5nIGFmdGVyIHRoZSBkb3QsIHJldHVybgorICAgICAgICAgICAgIGl0LiAgKi8KKyAgICAgICAgICBjb25zdCBjaGFyICpkb3QgPSBzdHJjaHIgKGxvY2FsZSwgJy4nKTsKKworICAgICAgICAgIGlmIChkb3QgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY29uc3QgY2hhciAqbW9kaWZpZXI7CisKKyAgICAgICAgICAgICAgZG90Kys7CisgICAgICAgICAgICAgIC8qIExvb2sgZm9yIHRoZSBwb3NzaWJsZSBALi4uIHRyYWlsZXIgYW5kIHJlbW92ZSBpdCwgaWYgYW55LiAgKi8KKyAgICAgICAgICAgICAgbW9kaWZpZXIgPSBzdHJjaHIgKGRvdCwgJ0AnKTsKKyAgICAgICAgICAgICAgaWYgKG1vZGlmaWVyID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIGRvdDsKKyAgICAgICAgICAgICAgaWYgKG1vZGlmaWVyIC0gZG90IDwgc2l6ZW9mIChidWYpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIG1lbWNweSAoYnVmLCBkb3QsIG1vZGlmaWVyIC0gZG90KTsKKyAgICAgICAgICAgICAgICAgIGJ1ZiBbbW9kaWZpZXIgLSBkb3RdID0gJ1wwJzsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBidWY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIC8qIFRoZSBXaW5kb3dzIEFQSSBoYXMgYSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIGxvY2FsZSdzIGNvZGVwYWdlIGFzIGEKKyAgICAgICAgIG51bWJlcjogR2V0QUNQKCkuICBUaGlzIGVuY29kaW5nIGlzIHVzZWQgYnkgQ3lnd2luLCB1bmxlc3MgdGhlIHVzZXIKKyAgICAgICAgIGhhcyBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIENZR1dJTj1jb2RlcGFnZTpvZW0gKHdoaWNoIHZlcnkgZmV3CisgICAgICAgICBwZW9wbGUgZG8pLgorICAgICAgICAgT3V0cHV0IGRpcmVjdGVkIHRvIGNvbnNvbGUgd2luZG93cyBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgKHRvCisgICAgICAgICBHZXRPRU1DUCgpIGlmIHRoZSBjb25zb2xlIGlzIHVzaW5nIGEgcmFzdGVyIGZvbnQsIG9yIHRvCisgICAgICAgICBHZXRDb25zb2xlT3V0cHV0Q1AoKSBpZiBpdCBpcyB1c2luZyBhIFRydWVUeXBlIGZvbnQpLiAgQ3lnd2luIGRvZXMKKyAgICAgICAgIHRoaXMgY29udmVyc2lvbiB0cmFuc3BhcmVudGx5IChzZWUgd2luc3VwL2N5Z3dpbi9maGFuZGxlcl9jb25zb2xlLmNjKSwKKyAgICAgICAgIGNvbnZlcnRpbmcgdG8gR2V0Q29uc29sZU91dHB1dENQKCkuICBUaGlzIGxlYWRzIHRvIGNvcnJlY3QgcmVzdWx0cywKKyAgICAgICAgIGV4Y2VwdCB3aGVuIFNldENvbnNvbGVPdXRwdXRDUCBoYXMgYmVlbiBjYWxsZWQgYW5kIGEgcmFzdGVyIGZvbnQgaXMKKyAgICAgICAgIGluIHVzZS4gICovCisgICAgICBzcHJpbnRmIChidWYsICJDUCV1IiwgR2V0QUNQICgpKTsKKyAgICAgIGNvZGVzZXQgPSBidWY7CisgICAgfQorIyAgZW5kaWYKKworIyBlbHNlCisKKyAgLyogT24gb2xkIHN5c3RlbXMgd2hpY2ggbGFjayBpdCwgdXNlIHNldGxvY2FsZSBvciBnZXRlbnYuICAqLworICBjb25zdCBjaGFyICpsb2NhbGUgPSBOVUxMOworCisgIC8qIEJ1dCBtb3N0IG9sZCBzeXN0ZW1zIGRvbid0IGhhdmUgYSBjb21wbGV0ZSBzZXQgb2YgbG9jYWxlcy4gIFNvbWUKKyAgICAgKGxpa2UgU3VuT1MgNCBvciBESkdQUCkgaGF2ZSBvbmx5IHRoZSBDIGxvY2FsZS4gIFRoZXJlZm9yZSB3ZSBkb24ndAorICAgICB1c2Ugc2V0bG9jYWxlIGhlcmU7IGl0IHdvdWxkIHJldHVybiAiQyIgd2hlbiBpdCBkb2Vzbid0IHN1cHBvcnQgdGhlCisgICAgIGxvY2FsZSBuYW1lIHRoZSB1c2VyIGhhcyBzZXQuICAqLworIyAgaWYgMAorICBsb2NhbGUgPSBzZXRsb2NhbGUgKExDX0NUWVBFLCBOVUxMKTsKKyMgIGVuZGlmCisgIGlmIChsb2NhbGUgPT0gTlVMTCB8fCBsb2NhbGVbMF0gPT0gJ1wwJykKKyAgICB7CisgICAgICBsb2NhbGUgPSBnZXRlbnYgKCJMQ19BTEwiKTsKKyAgICAgIGlmIChsb2NhbGUgPT0gTlVMTCB8fCBsb2NhbGVbMF0gPT0gJ1wwJykKKyAgICAgICAgeworICAgICAgICAgIGxvY2FsZSA9IGdldGVudiAoIkxDX0NUWVBFIik7CisgICAgICAgICAgaWYgKGxvY2FsZSA9PSBOVUxMIHx8IGxvY2FsZVswXSA9PSAnXDAnKQorICAgICAgICAgICAgbG9jYWxlID0gZ2V0ZW52ICgiTEFORyIpOworICAgICAgICB9CisgICAgfQorCisgIC8qIE9uIHNvbWUgb2xkIHN5c3RlbXMsIG9uZSB1c2VkIHRvIHNldCBsb2NhbGUgPSAiaXNvODg1OV8xIi4gT24gb3RoZXJzLAorICAgICB5b3Ugc2V0IGl0IHRvICJsYW5ndWFnZV9DT1VOVFJZLmNoYXJzZXQiLiBJbiBhbnkgY2FzZSwgd2UgcmVzb2x2ZSBpdAorICAgICB0aHJvdWdoIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUuICAqLworICBjb2Rlc2V0ID0gbG9jYWxlOworCisjIGVuZGlmCisKKyNlbGlmIGRlZmluZWQgV0lORE9XU19OQVRJVkUKKworICBzdGF0aWMgY2hhciBidWZbMiArIDEwICsgMV07CisKKyAgLyogVGhlIFdpbmRvd3MgQVBJIGhhcyBhIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgbG9jYWxlJ3MgY29kZXBhZ2UgYXMgYQorICAgICBudW1iZXI6IEdldEFDUCgpLgorICAgICBXaGVuIHRoZSBvdXRwdXQgZ29lcyB0byBhIGNvbnNvbGUgd2luZG93LCBpdCBuZWVkcyB0byBiZSBwcm92aWRlZCBpbgorICAgICBHZXRPRU1DUCgpIGVuY29kaW5nIGlmIHRoZSBjb25zb2xlIGlzIHVzaW5nIGEgcmFzdGVyIGZvbnQsIG9yIGluCisgICAgIEdldENvbnNvbGVPdXRwdXRDUCgpIGVuY29kaW5nIGlmIGl0IGlzIHVzaW5nIGEgVHJ1ZVR5cGUgZm9udC4KKyAgICAgQnV0IGluIEdVSSBwcm9ncmFtcyBhbmQgZm9yIG91dHB1dCBzZW50IHRvIGZpbGVzIGFuZCBwaXBlcywgR2V0QUNQKCkKKyAgICAgZW5jb2RpbmcgaXMgdGhlIGJlc3QgYmV0LiAgKi8KKyAgc3ByaW50ZiAoYnVmLCAiQ1AldSIsIEdldEFDUCAoKSk7CisgIGNvZGVzZXQgPSBidWY7CisKKyNlbGlmIGRlZmluZWQgT1MyCisKKyAgY29uc3QgY2hhciAqbG9jYWxlOworICBzdGF0aWMgY2hhciBidWZbMiArIDEwICsgMV07CisgIFVMT05HIGNwWzNdOworICBVTE9ORyBjcGxlbjsKKworICAvKiBBbGxvdyB1c2VyIHRvIG92ZXJyaWRlIHRoZSBjb2Rlc2V0LCBhcyBzZXQgaW4gdGhlIG9wZXJhdGluZyBzeXN0ZW0sCisgICAgIHdpdGggc3RhbmRhcmQgbGFuZ3VhZ2UgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgKi8KKyAgbG9jYWxlID0gZ2V0ZW52ICgiTENfQUxMIik7CisgIGlmIChsb2NhbGUgPT0gTlVMTCB8fCBsb2NhbGVbMF0gPT0gJ1wwJykKKyAgICB7CisgICAgICBsb2NhbGUgPSBnZXRlbnYgKCJMQ19DVFlQRSIpOworICAgICAgaWYgKGxvY2FsZSA9PSBOVUxMIHx8IGxvY2FsZVswXSA9PSAnXDAnKQorICAgICAgICBsb2NhbGUgPSBnZXRlbnYgKCJMQU5HIik7CisgICAgfQorICBpZiAobG9jYWxlICE9IE5VTEwgJiYgbG9jYWxlWzBdICE9ICdcMCcpCisgICAgeworICAgICAgLyogSWYgdGhlIGxvY2FsZSBuYW1lIGNvbnRhaW5zIGFuIGVuY29kaW5nIGFmdGVyIHRoZSBkb3QsIHJldHVybiBpdC4gICovCisgICAgICBjb25zdCBjaGFyICpkb3QgPSBzdHJjaHIgKGxvY2FsZSwgJy4nKTsKKworICAgICAgaWYgKGRvdCAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgY29uc3QgY2hhciAqbW9kaWZpZXI7CisKKyAgICAgICAgICBkb3QrKzsKKyAgICAgICAgICAvKiBMb29rIGZvciB0aGUgcG9zc2libGUgQC4uLiB0cmFpbGVyIGFuZCByZW1vdmUgaXQsIGlmIGFueS4gICovCisgICAgICAgICAgbW9kaWZpZXIgPSBzdHJjaHIgKGRvdCwgJ0AnKTsKKyAgICAgICAgICBpZiAobW9kaWZpZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBkb3Q7CisgICAgICAgICAgaWYgKG1vZGlmaWVyIC0gZG90IDwgc2l6ZW9mIChidWYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBtZW1jcHkgKGJ1ZiwgZG90LCBtb2RpZmllciAtIGRvdCk7CisgICAgICAgICAgICAgIGJ1ZiBbbW9kaWZpZXIgLSBkb3RdID0gJ1wwJzsKKyAgICAgICAgICAgICAgcmV0dXJuIGJ1ZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAvKiBSZXNvbHZlIHRocm91Z2ggdGhlIGNoYXJzZXQuYWxpYXMgZmlsZS4gICovCisgICAgICBjb2Rlc2V0ID0gbG9jYWxlOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIE9TLzIgaGFzIGEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBsb2NhbGUncyBjb2RlcGFnZSBhcyBhIG51bWJlci4gICovCisgICAgICBpZiAoRG9zUXVlcnlDcCAoc2l6ZW9mIChjcCksIGNwLCAmY3BsZW4pKQorICAgICAgICBjb2Rlc2V0ID0gIiI7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBzcHJpbnRmIChidWYsICJDUCV1IiwgY3BbMF0pOworICAgICAgICAgIGNvZGVzZXQgPSBidWY7CisgICAgICAgIH0KKyAgICB9CisKKyNlbmRpZgorCisgIGlmIChjb2Rlc2V0ID09IE5VTEwpCisgICAgLyogVGhlIGNhbm9uaWNhbCBuYW1lIGNhbm5vdCBiZSBkZXRlcm1pbmVkLiAgKi8KKyAgICBjb2Rlc2V0ID0gIiI7CisKKyAgLyogUmVzb2x2ZSBhbGlhcy4gKi8KKyAgZm9yIChhbGlhc2VzID0gZ2V0X2NoYXJzZXRfYWxpYXNlcyAoKTsKKyAgICAgICAqYWxpYXNlcyAhPSAnXDAnOworICAgICAgIGFsaWFzZXMgKz0gc3RybGVuIChhbGlhc2VzKSArIDEsIGFsaWFzZXMgKz0gc3RybGVuIChhbGlhc2VzKSArIDEpCisgICAgaWYgKHN0cmNtcCAoY29kZXNldCwgYWxpYXNlcykgPT0gMAorICAgICAgICB8fCAoYWxpYXNlc1swXSA9PSAnKicgJiYgYWxpYXNlc1sxXSA9PSAnXDAnKSkKKyAgICAgIHsKKyAgICAgICAgY29kZXNldCA9IGFsaWFzZXMgKyBzdHJsZW4gKGFsaWFzZXMpICsgMTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgLyogRG9uJ3QgcmV0dXJuIGFuIGVtcHR5IHN0cmluZy4gIEdOVSBsaWJjIGFuZCBHTlUgbGliaWNvbnYgaW50ZXJwcmV0CisgICAgIHRoZSBlbXB0eSBzdHJpbmcgYXMgZGVub3RpbmcgInRoZSBsb2NhbGUncyBjaGFyYWN0ZXIgZW5jb2RpbmciLAorICAgICB0aHVzIEdOVSBsaWJpY29udiB3b3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gYSBzZWNvbmQgdGltZS4gICovCisgIGlmIChjb2Rlc2V0WzBdID09ICdcMCcpCisgICAgY29kZXNldCA9ICJBU0NJSSI7CisKKyNpZmRlZiBEQVJXSU43CisgIC8qIE1hYyBPUyBYIHNldHMgTUJfQ1VSX01BWCB0byAxIHdoZW4gTENfQUxMPUMsIGFuZCAiVVRGLTgiCisgICAgICh0aGUgZGVmYXVsdCBjb2Rlc2V0KSBkb2VzIG5vdCB3b3JrIHdoZW4gTUJfQ1VSX01BWCBpcyAxLiAgKi8KKyAgaWYgKHN0cmNtcCAoY29kZXNldCwgIlVURi04IikgPT0gMCAmJiBNQl9DVVJfTUFYIDw9IDEpCisgICAgY29kZXNldCA9ICJBU0NJSSI7CisjZW5kaWYKKworICByZXR1cm4gY29kZXNldDsKK30KZGlmZiAtLWdpdCBhL2xpYi9sb2NhbGNoYXJzZXQuaCBiL2xpYi9sb2NhbGNoYXJzZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWRjNTkzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2xvY2FsY2hhcnNldC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qIERldGVybWluZSBhIGNhbm9uaWNhbCBuYW1lIGZvciB0aGUgY3VycmVudCBsb2NhbGUncyBjaGFyYWN0ZXIgZW5jb2RpbmcuCisgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDSEFSU0VUIExpYnJhcnkuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBfTE9DQUxDSEFSU0VUX0gKKyNkZWZpbmUgX0xPQ0FMQ0hBUlNFVF9ICisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKKy8qIERldGVybWluZSB0aGUgY3VycmVudCBsb2NhbGUncyBjaGFyYWN0ZXIgZW5jb2RpbmcsIGFuZCBjYW5vbmljYWxpemUgaXQKKyAgIGludG8gb25lIG9mIHRoZSBjYW5vbmljYWwgbmFtZXMgbGlzdGVkIGluIGNvbmZpZy5jaGFyc2V0LgorICAgVGhlIHJlc3VsdCBtdXN0IG5vdCBiZSBmcmVlZDsgaXQgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQuCisgICBJZiB0aGUgY2Fub25pY2FsIG5hbWUgY2Fubm90IGJlIGRldGVybWluZWQsIHRoZSByZXN1bHQgaXMgYSBub24tY2Fub25pY2FsCisgICBuYW1lLiAgKi8KK2V4dGVybiBjb25zdCBjaGFyICogbG9jYWxlX2NoYXJzZXQgKHZvaWQpOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKworI2VuZGlmIC8qIF9MT0NBTENIQVJTRVRfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL21haW4uYyBiL2xpYi9tYWluLmMKaW5kZXggOThkZWRmOS4uNzk5NmM3ZiAxMDA2NDQKLS0tIGEvbGliL21haW4uYworKysgYi9saWIvbWFpbi5jCkBAIC0xLDIzICsxLDIxIEBACiAvKiBZYWNjIGxpYnJhcnkgbWFpbiBmdW5jdGlvbi4KIAotICAgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgogCi0gICBCaXNvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLSAgIEJpc29uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCBCaXNvbjsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAKZGlmZiAtLWdpdCBhL2xpYi9tYWxsb2MuYyBiL2xpYi9tYWxsb2MuYwppbmRleCA1OGZhNjExLi5lMGQ1Yzg5IDEwMDY0NAotLS0gYS9saWIvbWFsbG9jLmMKKysrIGIvbGliL21hbGxvYy5jCkBAIC0xLDkgKzEsMTAgQEAKIC8qIG1hbGxvYygpIGZ1bmN0aW9uIHRoYXQgaXMgZ2xpYmMgY29tcGF0aWJsZS4KLSAgIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgQ29weXJpZ2h0IChDKSAxOTk3LTE5OTgsIDIwMDYtMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKICAgIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKQEAgLTEyLDI1ICsxMyw0NCBAQAogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAotLyogd3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcgKi8KKy8qIHdyaXR0ZW4gYnkgSmltIE1leWVyaW5nIGFuZCBCcnVubyBIYWlibGUgKi8KIAotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZGVmaW5lIF9HTF9VU0VfU1RETElCX0FMTE9DIDEKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIE9ubHkgdGhlIEFDX0ZVTkNfTUFMTE9DIG1hY3JvIGRlZmluZXMgJ21hbGxvYycgYWxyZWFkeSBpbiBjb25maWcuaC4gICovCisjaWZkZWYgbWFsbG9jCisjIGRlZmluZSBORUVEX01BTExPQ19HTlUgMQorIyB1bmRlZiBtYWxsb2MKKy8qIFdoZXJlYXMgdGhlIGdudWxpYiBtb2R1bGUgJ21hbGxvYy1nbnUnIGRlZmluZXMgSEFWRV9NQUxMT0NfR05VLiAgKi8KKyNlbGlmIEdOVUxJQl9NQUxMT0NfR05VICYmICFIQVZFX01BTExPQ19HTlUKKyMgZGVmaW5lIE5FRURfTUFMTE9DX0dOVSAxCiAjZW5kaWYKLSN1bmRlZiBtYWxsb2MKIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCisjaW5jbHVkZSA8ZXJybm8uaD4KKwogLyogQWxsb2NhdGUgYW4gTi1ieXRlIGJsb2NrIG9mIG1lbW9yeSBmcm9tIHRoZSBoZWFwLgogICAgSWYgTiBpcyB6ZXJvLCBhbGxvY2F0ZSBhIDEtYnl0ZSBibG9jay4gICovCiAKIHZvaWQgKgogcnBsX21hbGxvYyAoc2l6ZV90IG4pCiB7CisgIHZvaWQgKnJlc3VsdDsKKworI2lmIE5FRURfTUFMTE9DX0dOVQogICBpZiAobiA9PSAwKQogICAgIG4gPSAxOwotICByZXR1cm4gbWFsbG9jIChuKTsKKyNlbmRpZgorCisgIHJlc3VsdCA9IG1hbGxvYyAobik7CisKKyNpZiAhSEFWRV9NQUxMT0NfUE9TSVgKKyAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgIGVycm5vID0gRU5PTUVNOworI2VuZGlmCisKKyAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2xpYi9tYXRoLmMgYi9saWIvbWF0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYjJkZWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbWF0aC5jCkBAIC0wLDAgKzEsMyBAQAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2RlZmluZSBfR0xfTUFUSF9JTkxJTkUgX0dMX0VYVEVSTl9JTkxJTkUKKyNpbmNsdWRlICJtYXRoLmgiCmRpZmYgLS1naXQgYS9saWIvbWF0aC5pbi5oIGIvbGliL21hdGguaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTJlMjA1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL21hdGguaW4uaApAQCAtMCwwICsxLDIyNzUgQEAKKy8qIEEgR05VLWxpa2UgPG1hdGguaD4uCisKKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDAzLCAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX01BVEhfSAorCisjaWYgX19HTlVDX18gPj0gMworQFBSQUdNQV9TWVNURU1fSEVBREVSQAorI2VuZGlmCitAUFJBR01BX0NPTFVNTlNACisKKy8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyNASU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRUAgQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX01BVEhfSEAKKworI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfTUFUSF9ICisjZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9NQVRIX0gKKworX0dMX0lOTElORV9IRUFERVJfQkVHSU4KKyNpZm5kZWYgX0dMX01BVEhfSU5MSU5FCisjIGRlZmluZSBfR0xfTUFUSF9JTkxJTkUgX0dMX0lOTElORQorI2VuZGlmCisKKy8qIFRoZSBkZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBMIGV0Yy4gYXJlIGNvcGllZCBoZXJlLiAgKi8KKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxMIGlzIGNvcGllZCBoZXJlLiAgKi8KKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisvKiBIZWxwZXIgbWFjcm9zIHRvIGRlZmluZSB0eXBlLWdlbmVyaWMgZnVuY3Rpb24gRlVOQyBhcyBvdmVybG9hZGVkIGZ1bmN0aW9ucywKKyAgIHJhdGhlciB0aGFuIGFzIG1hY3JvcyBsaWtlIGluIEMuICBQT1NJWCBkZWNsYXJlcyB0aGVzZSB3aXRoIGFuIGFyZ3VtZW50IG9mCisgICByZWFsLWZsb2F0aW5nICh0aGF0IGlzLCBvbmUgb2YgZmxvYXQsIGRvdWJsZSwgb3IgbG9uZyBkb3VibGUpLiAgKi8KKyMgZGVmaW5lIF9HTF9NQVRIX0NYWF9SRUFMX0ZMT0FUSU5HX0RFQ0xfMShmdW5jKSBcCitzdGF0aWMgaW5saW5lIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK19nbF9jeHhfICMjIGZ1bmMgIyMgZiAoZmxvYXQgZikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHJldHVybiBmdW5jIChmKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3RhdGljIGlubGluZSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitfZ2xfY3h4XyAjIyBmdW5jICMjIGQgKGRvdWJsZSBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICByZXR1cm4gZnVuYyAoZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3N0YXRpYyBpbmxpbmUgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorX2dsX2N4eF8gIyMgZnVuYyAjIyBsIChsb25nIGRvdWJsZSBsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcmV0dXJuIGZ1bmMgKGwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorIyBkZWZpbmUgX0dMX01BVEhfQ1hYX1JFQUxfRkxPQVRJTkdfREVDTF8yKGZ1bmMpIFwKK2lubGluZSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZnVuYyAoZmxvYXQgZikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcmV0dXJuIF9nbF9jeHhfICMjIGZ1bmMgIyMgZiAoZik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitpbmxpbmUgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2Z1bmMgKGRvdWJsZSBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHJldHVybiBfZ2xfY3h4XyAjIyBmdW5jICMjIGQgKGQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoraW5saW5lIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitmdW5jIChsb25nIGRvdWJsZSBsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICByZXR1cm4gX2dsX2N4eF8gIyMgZnVuYyAjIyBsIChsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisjZW5kaWYKKworLyogSGVscGVyIG1hY3JvcyB0byBkZWZpbmUgYSBwb3J0YWJpbGl0eSB3YXJuaW5nIGZvciB0aGUKKyAgIGNsYXNzaWZpY2F0aW9uIG1hY3JvIEZVTkMgY2FsbGVkIHdpdGggVkFMVUUuICBQT1NJWCBkZWNsYXJlcyB0aGUKKyAgIGNsYXNzaWZpY2F0aW9uIG1hY3JvcyB3aXRoIGFuIGFyZ3VtZW50IG9mIHJlYWwtZmxvYXRpbmcgKHRoYXQgaXMsCisgICBvbmUgb2YgZmxvYXQsIGRvdWJsZSwgb3IgbG9uZyBkb3VibGUpLiAgKi8KKyNkZWZpbmUgX0dMX1dBUk5fUkVBTF9GTE9BVElOR19ERUNMKGZ1bmMpIFwKK19HTF9NQVRIX0lOTElORSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorcnBsXyAjIyBmdW5jICMjIGYgKGZsb2F0IGYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcmV0dXJuIGZ1bmMgKGYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitfR0xfTUFUSF9JTkxJTkUgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3JwbF8gIyMgZnVuYyAjIyBkIChkb3VibGUgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHJldHVybiBmdW5jIChkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorX0dMX01BVEhfSU5MSU5FIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitycGxfICMjIGZ1bmMgIyMgbCAobG9uZyBkb3VibGUgbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICByZXR1cm4gZnVuYyAobCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK19HTF9XQVJOX09OX1VTRSAocnBsXyAjIyBmdW5jICMjIGYsICNmdW5jICIgaXMgdW5wb3J0YWJsZSAtICIgICAgICAgXAorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgIiAjZnVuYyAiIGZvciBwb3J0YWJpbGl0eSIpOyAgICBcCitfR0xfV0FSTl9PTl9VU0UgKHJwbF8gIyMgZnVuYyAjIyBkLCAjZnVuYyAiIGlzIHVucG9ydGFibGUgLSAiICAgICAgIFwKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlICIgI2Z1bmMgIiBmb3IgcG9ydGFiaWxpdHkiKTsgICAgXAorX0dMX1dBUk5fT05fVVNFIChycGxfICMjIGZ1bmMgIyMgbCwgI2Z1bmMgIiBpcyB1bnBvcnRhYmxlIC0gIiAgICAgICBcCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSAiICNmdW5jICIgZm9yIHBvcnRhYmlsaXR5IikKKyNkZWZpbmUgX0dMX1dBUk5fUkVBTF9GTE9BVElOR19JTVBMKGZ1bmMsIHZhbHVlKSBcCisgIChzaXplb2YgKHZhbHVlKSA9PSBzaXplb2YgKGZsb2F0KSA/IHJwbF8gIyMgZnVuYyAjIyBmICh2YWx1ZSkgICAgIFwKKyAgIDogc2l6ZW9mICh2YWx1ZSkgPT0gc2l6ZW9mIChkb3VibGUpID8gcnBsXyAjIyBmdW5jICMjIGQgKHZhbHVlKSAgXAorICAgOiBycGxfICMjIGZ1bmMgIyMgbCAodmFsdWUpKQorCisKKyNpZiBAUkVQTEFDRV9JVE9MREAKKy8qIFB1bGwgaW4gYSBmdW5jdGlvbiB0aGF0IGZpeGVzIHRoZSAnaW50JyB0byAnbG9uZyBkb3VibGUnIGNvbnZlcnNpb24KKyAgIG9mIGdsaWJjIDIuNy4gICovCitfR0xfRVhURVJOX0Mgdm9pZCBfUXBfaXRvcSAobG9uZyBkb3VibGUgKiwgaW50KTsKK3N0YXRpYyB2b2lkICgqX2dsX21hdGhfZml4X2l0b2xkKSAobG9uZyBkb3VibGUgKiwgaW50KSA9IF9RcF9pdG9xOworI2VuZGlmCisKKworLyogUE9TSVggYWxsb3dzIHBsYXRmb3JtcyB0aGF0IGRvbid0IHN1cHBvcnQgTkFOLiAgQnV0IGFsbCBtYWpvcgorICAgbWFjaGluZXMgaW4gdGhlIHBhc3QgMTUgeWVhcnMgaGF2ZSBzdXBwb3J0ZWQgc29tZXRoaW5nIGNsb3NlIHRvCisgICBJRUVFIE5hTiwgc28gd2UgZGVmaW5lIHRoaXMgdW5jb25kaXRpb25hbGx5LiAgV2UgYWxzbyBtdXN0IGRlZmluZQorICAgaXQgb24gcGxhdGZvcm1zIGxpa2UgU29sYXJpcyAxMCwgd2hlcmUgTkFOIGlzIHByZXNlbnQgYnV0IGRlZmluZWQKKyAgIGFzIGEgZnVuY3Rpb24gcG9pbnRlciByYXRoZXIgdGhhbiBhIGZsb2F0aW5nIHBvaW50IGNvbnN0YW50LiAgKi8KKyNpZiAhZGVmaW5lZCBOQU4gfHwgQFJFUExBQ0VfTkFOQAorIyBpZiAhR05VTElCX2RlZmluZWRfTkFOCisjICB1bmRlZiBOQU4KKyAgLyogVGhlIENvbXBhcSAoZXgtREVDKSBDIDYuNCBjb21waWxlciBhbmQgdGhlIE1pY3Jvc29mdCBNU1ZDIDkgY29tcGlsZXIKKyAgICAgY2hva2Ugb24gdGhlIGV4cHJlc3Npb24gMC4wIC8gMC4wLiAgKi8KKyMgIGlmIGRlZmluZWQgX19ERUNDIHx8IGRlZmluZWQgX01TQ19WRVIKK19HTF9NQVRIX0lOTElORSBmbG9hdAorX05hTiAoKQoreworICBzdGF0aWMgZmxvYXQgemVybyA9IDAuMGY7CisgIHJldHVybiB6ZXJvIC8gemVybzsKK30KKyMgICBkZWZpbmUgTkFOIChfTmFOKCkpCisjICBlbHNlCisjICAgZGVmaW5lIE5BTiAoMC4wZiAvIDAuMGYpCisjICBlbmRpZgorIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX05BTiAxCisjIGVuZGlmCisjZW5kaWYKKworLyogU29sYXJpcyAxMCBkZWZpbmVzIEhVR0VfVkFMLCBidXQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHJhdGhlcgorICAgdGhhbiBhIGZsb2F0aW5nIHBvaW50IGNvbnN0YW50LiAgKi8KKyNpZiBAUkVQTEFDRV9IVUdFX1ZBTEAKKyMgdW5kZWYgSFVHRV9WQUxGCisjIGRlZmluZSBIVUdFX1ZBTEYgKDEuMGYgLyAwLjBmKQorIyB1bmRlZiBIVUdFX1ZBTAorIyBkZWZpbmUgSFVHRV9WQUwgKDEuMCAvIDAuMCkKKyMgdW5kZWYgSFVHRV9WQUxMCisjIGRlZmluZSBIVUdFX1ZBTEwgKDEuMEwgLyAwLjBMKQorI2VuZGlmCisKKy8qIEhVR0VfVkFMRiBpcyBhICdmbG9hdCcgSW5maW5pdHkuICAqLworI2lmbmRlZiBIVUdFX1ZBTEYKKyMgaWYgZGVmaW5lZCBfTVNDX1ZFUgorLyogVGhlIE1pY3Jvc29mdCBNU1ZDIDkgY29tcGlsZXIgY2hva2VzIG9uIHRoZSBleHByZXNzaW9uIDEuMGYgLyAwLjBmLiAgKi8KKyMgIGRlZmluZSBIVUdFX1ZBTEYgKDFlMjVmICogMWUyNWYpCisjIGVsc2UKKyMgIGRlZmluZSBIVUdFX1ZBTEYgKDEuMGYgLyAwLjBmKQorIyBlbmRpZgorI2VuZGlmCisKKy8qIEhVR0VfVkFMIGlzIGEgJ2RvdWJsZScgSW5maW5pdHkuICAqLworI2lmbmRlZiBIVUdFX1ZBTAorIyBpZiBkZWZpbmVkIF9NU0NfVkVSCisvKiBUaGUgTWljcm9zb2Z0IE1TVkMgOSBjb21waWxlciBjaG9rZXMgb24gdGhlIGV4cHJlc3Npb24gMS4wIC8gMC4wLiAgKi8KKyMgIGRlZmluZSBIVUdFX1ZBTCAoMWUyNTAgKiAxZTI1MCkKKyMgZWxzZQorIyAgZGVmaW5lIEhVR0VfVkFMICgxLjAgLyAwLjApCisjIGVuZGlmCisjZW5kaWYKKworLyogSFVHRV9WQUxMIGlzIGEgJ2xvbmcgZG91YmxlJyBJbmZpbml0eS4gICovCisjaWZuZGVmIEhVR0VfVkFMTAorIyBpZiBkZWZpbmVkIF9NU0NfVkVSCisvKiBUaGUgTWljcm9zb2Z0IE1TVkMgOSBjb21waWxlciBjaG9rZXMgb24gdGhlIGV4cHJlc3Npb24gMS4wTCAvIDAuMEwuICAqLworIyAgZGVmaW5lIEhVR0VfVkFMTCAoMWUyNTBMICogMWUyNTBMKQorIyBlbHNlCisjICBkZWZpbmUgSFVHRV9WQUxMICgxLjBMIC8gMC4wTCkKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIEVuc3VyZSBGUF9JTE9HQjAgYW5kIEZQX0lMT0dCTkFOIGFyZSBkZWZpbmVkLiAgKi8KKyNpZiAhKGRlZmluZWQgRlBfSUxPR0IwICYmIGRlZmluZWQgRlBfSUxPR0JOQU4pCisjIGlmIGRlZmluZWQgX19OZXRCU0RfXyB8fCBkZWZpbmVkIF9fc2dpCisgIC8qIE5ldEJTRCwgSVJJWCA2LjU6IG1hdGNoIHdoYXQgaWxvZ2IoKSBkb2VzICovCisjICBkZWZpbmUgRlBfSUxPR0IwICAgKC0gMjE0NzQ4MzY0NyAtIDEpIC8qIElOVF9NSU4gKi8KKyMgIGRlZmluZSBGUF9JTE9HQk5BTiAoLSAyMTQ3NDgzNjQ3IC0gMSkgLyogSU5UX01JTiAqLworIyBlbGlmIGRlZmluZWQgX0FJWAorICAvKiBBSVggNS4xOiBtYXRjaCB3aGF0IGlsb2diKCkgZG9lcyBpbiBBSVggPj0gNS4yICovCisjICBkZWZpbmUgRlBfSUxPR0IwICAgKC0gMjE0NzQ4MzY0NyAtIDEpIC8qIElOVF9NSU4gKi8KKyMgIGRlZmluZSBGUF9JTE9HQk5BTiAyMTQ3NDgzNjQ3IC8qIElOVF9NQVggKi8KKyMgZWxpZiBkZWZpbmVkIF9fc3VuCisgIC8qIFNvbGFyaXMgOTogbWF0Y2ggd2hhdCBpbG9nYigpIGRvZXMgKi8KKyMgIGRlZmluZSBGUF9JTE9HQjAgICAoLSAyMTQ3NDgzNjQ3KSAvKiAtIElOVF9NQVggKi8KKyMgIGRlZmluZSBGUF9JTE9HQk5BTiAyMTQ3NDgzNjQ3IC8qIElOVF9NQVggKi8KKyMgZWxzZQorICAvKiBHbnVsaWIgZGVmaW5lZCB2YWx1ZXMuICAqLworIyAgZGVmaW5lIEZQX0lMT0dCMCAgICgtIDIxNDc0ODM2NDcpIC8qIC0gSU5UX01BWCAqLworIyAgZGVmaW5lIEZQX0lMT0dCTkFOICgtIDIxNDc0ODM2NDcgLSAxKSAvKiBJTlRfTUlOICovCisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9BQ09TRkAKKyMgaWYgIUBIQVZFX0FDT1NGQAorIyAgdW5kZWYgYWNvc2YKK19HTF9GVU5DREVDTF9TWVMgKGFjb3NmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGFjb3NmLCBmbG9hdCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKGFjb3NmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgYWNvc2YKKyMgaWYgSEFWRV9SQVdfREVDTF9BQ09TRgorX0dMX1dBUk5fT05fVVNFIChhY29zZiwgImFjb3NmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBhY29zZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9BQ09TTEAKKyMgaWYgIUBIQVZFX0FDT1NMQCB8fCAhQEhBVkVfREVDTF9BQ09TTEAKKyMgIHVuZGVmIGFjb3NsCitfR0xfRlVOQ0RFQ0xfU1lTIChhY29zbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChhY29zbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChhY29zbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGFjb3NsCisjIGlmIEhBVkVfUkFXX0RFQ0xfQUNPU0wKK19HTF9XQVJOX09OX1VTRSAoYWNvc2wsICJhY29zbCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgYWNvc2wgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9BU0lORkAKKyMgaWYgIUBIQVZFX0FTSU5GQAorIyAgdW5kZWYgYXNpbmYKK19HTF9GVU5DREVDTF9TWVMgKGFzaW5mLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGFzaW5mLCBmbG9hdCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKGFzaW5mKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgYXNpbmYKKyMgaWYgSEFWRV9SQVdfREVDTF9BU0lORgorX0dMX1dBUk5fT05fVVNFIChhc2luZiwgImFzaW5mIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBhc2luZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9BU0lOTEAKKyMgaWYgIUBIQVZFX0FTSU5MQCB8fCAhQEhBVkVfREVDTF9BU0lOTEAKKyMgIHVuZGVmIGFzaW5sCitfR0xfRlVOQ0RFQ0xfU1lTIChhc2lubCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChhc2lubCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChhc2lubCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGFzaW5sCisjIGlmIEhBVkVfUkFXX0RFQ0xfQVNJTkwKK19HTF9XQVJOX09OX1VTRSAoYXNpbmwsICJhc2lubCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgYXNpbmwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9BVEFORkAKKyMgaWYgIUBIQVZFX0FUQU5GQAorIyAgdW5kZWYgYXRhbmYKK19HTF9GVU5DREVDTF9TWVMgKGF0YW5mLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGF0YW5mLCBmbG9hdCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKGF0YW5mKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgYXRhbmYKKyMgaWYgSEFWRV9SQVdfREVDTF9BVEFORgorX0dMX1dBUk5fT05fVVNFIChhdGFuZiwgImF0YW5mIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBhdGFuZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9BVEFOTEAKKyMgaWYgIUBIQVZFX0FUQU5MQCB8fCAhQEhBVkVfREVDTF9BVEFOTEAKKyMgIHVuZGVmIGF0YW5sCitfR0xfRlVOQ0RFQ0xfU1lTIChhdGFubCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChhdGFubCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChhdGFubCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGF0YW5sCisjIGlmIEhBVkVfUkFXX0RFQ0xfQVRBTkwKK19HTF9XQVJOX09OX1VTRSAoYXRhbmwsICJhdGFubCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgYXRhbmwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9BVEFOMkZACisjIGlmICFASEFWRV9BVEFOMkZACisjICB1bmRlZiBhdGFuMmYKK19HTF9GVU5DREVDTF9TWVMgKGF0YW4yZiwgZmxvYXQsIChmbG9hdCB5LCBmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChhdGFuMmYsIGZsb2F0LCAoZmxvYXQgeSwgZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAoYXRhbjJmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgYXRhbjJmCisjIGlmIEhBVkVfUkFXX0RFQ0xfQVRBTjJGCitfR0xfV0FSTl9PTl9VU0UgKGF0YW4yZiwgImF0YW4yZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgYXRhbjJmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfQ0JSVEZACisjIGlmIEBSRVBMQUNFX0NCUlRGQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBjYnJ0ZgorIyAgIGRlZmluZSBjYnJ0ZiBycGxfY2JydGYKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChjYnJ0ZiwgZmxvYXQsIChmbG9hdCB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChjYnJ0ZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9ERUNMX0NCUlRGQAorX0dMX0ZVTkNERUNMX1NZUyAoY2JydGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGNicnRmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGNicnRmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgY2JydGYKKyMgaWYgSEFWRV9SQVdfREVDTF9DQlJURgorX0dMX1dBUk5fT05fVVNFIChjYnJ0ZiwgImNicnRmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBjYnJ0ZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9DQlJUQAorIyBpZiAhQEhBVkVfQ0JSVEAKK19HTF9GVU5DREVDTF9TWVMgKGNicnQsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChjYnJ0LCBkb3VibGUsIChkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAoY2JydCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGNicnQKKyMgaWYgSEFWRV9SQVdfREVDTF9DQlJUCitfR0xfV0FSTl9PTl9VU0UgKGNicnQsICJjYnJ0IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBjYnJ0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX0NCUlRMQAorIyBpZiBAUkVQTEFDRV9DQlJUTEAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgY2JydGwKKyMgICBkZWZpbmUgY2JydGwgcnBsX2NicnRsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoY2JydGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAoY2JydGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfREVDTF9DQlJUTEAKK19HTF9GVU5DREVDTF9TWVMgKGNicnRsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChjYnJ0bCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChjYnJ0bCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGNicnRsCisjIGlmIEhBVkVfUkFXX0RFQ0xfQ0JSVEwKK19HTF9XQVJOX09OX1VTRSAoY2JydGwsICJjYnJ0bCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgY2JydGwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9DRUlMRkAKKyMgaWYgQFJFUExBQ0VfQ0VJTEZACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGNlaWxmCisjICAgZGVmaW5lIGNlaWxmIHJwbF9jZWlsZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGNlaWxmLCBmbG9hdCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGNlaWxmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0RFQ0xfQ0VJTEZACisjICAgdW5kZWYgY2VpbGYKK19HTF9GVU5DREVDTF9TWVMgKGNlaWxmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChjZWlsZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChjZWlsZik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGNlaWxmCisjIGlmIEhBVkVfUkFXX0RFQ0xfQ0VJTEYKK19HTF9XQVJOX09OX1VTRSAoY2VpbGYsICJjZWlsZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgY2VpbGYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfQ0VJTEAKKyMgaWYgQFJFUExBQ0VfQ0VJTEAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGNlaWwgcnBsX2NlaWwKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChjZWlsLCBkb3VibGUsIChkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAoY2VpbCwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoY2VpbCwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGNlaWwpOworI2VuZGlmCisKKyNpZiBAR05VTElCX0NFSUxMQAorIyBpZiBAUkVQTEFDRV9DRUlMTEAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgY2VpbGwKKyMgICBkZWZpbmUgY2VpbGwgcnBsX2NlaWxsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoY2VpbGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAoY2VpbGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfREVDTF9DRUlMTEAKKyMgICB1bmRlZiBjZWlsbAorX0dMX0ZVTkNERUNMX1NZUyAoY2VpbGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGNlaWxsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGNlaWxsKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgY2VpbGwKKyMgaWYgSEFWRV9SQVdfREVDTF9DRUlMTAorX0dMX1dBUk5fT05fVVNFIChjZWlsbCwgImNlaWxsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBjZWlsbCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX0NPUFlTSUdORkAKKyMgaWYgIUBIQVZFX0RFQ0xfQ09QWVNJR05GQAorX0dMX0ZVTkNERUNMX1NZUyAoY29weXNpZ25mLCBmbG9hdCwgKGZsb2F0IHgsIGZsb2F0IHkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGNvcHlzaWduZiwgZmxvYXQsIChmbG9hdCB4LCBmbG9hdCB5KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChjb3B5c2lnbmYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBjb3B5c2lnbmYKKyMgaWYgSEFWRV9SQVdfREVDTF9DT1BZU0lHTkYKK19HTF9XQVJOX09OX1VTRSAoY29weXNpZ25mLCAiY29weXNpZ25mIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBjb3B5c2lnbmYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfQ09QWVNJR05ACisjIGlmICFASEFWRV9DT1BZU0lHTkAKK19HTF9GVU5DREVDTF9TWVMgKGNvcHlzaWduLCBkb3VibGUsIChkb3VibGUgeCwgZG91YmxlIHkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGNvcHlzaWduLCBkb3VibGUsIChkb3VibGUgeCwgZG91YmxlIHkpKTsKK19HTF9DWFhBTElBU1dBUk4gKGNvcHlzaWduKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgY29weXNpZ24KKyMgaWYgSEFWRV9SQVdfREVDTF9DT1BZU0lHTgorX0dMX1dBUk5fT05fVVNFIChjb3B5c2lnbiwgImNvcHlzaWduIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBjb3B5c2lnbiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9DT1BZU0lHTkxACisjIGlmICFASEFWRV9DT1BZU0lHTkxACitfR0xfRlVOQ0RFQ0xfU1lTIChjb3B5c2lnbmwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoY29weXNpZ25sLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHkpKTsKK19HTF9DWFhBTElBU1dBUk4gKGNvcHlzaWdubCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGNvcHlzaWdubAorIyBpZiBIQVZFX1JBV19ERUNMX0NPUFlTSUdOTAorX0dMX1dBUk5fT05fVVNFIChjb3B5c2lnbiwgImNvcHlzaWdubCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgY29weXNpZ25sIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfQ09TRkAKKyMgaWYgIUBIQVZFX0NPU0ZACisjICB1bmRlZiBjb3NmCitfR0xfRlVOQ0RFQ0xfU1lTIChjb3NmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGNvc2YsIGZsb2F0LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAoY29zZik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGNvc2YKKyMgaWYgSEFWRV9SQVdfREVDTF9DT1NGCitfR0xfV0FSTl9PTl9VU0UgKGNvc2YsICJjb3NmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBjb3NmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX0NPU0xACisjIGlmICFASEFWRV9DT1NMQCB8fCAhQEhBVkVfREVDTF9DT1NMQAorIyAgdW5kZWYgY29zbAorX0dMX0ZVTkNERUNMX1NZUyAoY29zbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChjb3NsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKGNvc2wpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBjb3NsCisjIGlmIEhBVkVfUkFXX0RFQ0xfQ09TTAorX0dMX1dBUk5fT05fVVNFIChjb3NsLCAiY29zbCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgY29zbCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX0NPU0hGQAorIyBpZiAhQEhBVkVfQ09TSEZACisjICB1bmRlZiBjb3NoZgorX0dMX0ZVTkNERUNMX1NZUyAoY29zaGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoY29zaGYsIGZsb2F0LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAoY29zaGYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBjb3NoZgorIyBpZiBIQVZFX1JBV19ERUNMX0NPU0hGCitfR0xfV0FSTl9PTl9VU0UgKGNvc2hmLCAiY29zaGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGNvc2hmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfRVhQRkAKKyMgaWYgIUBIQVZFX0VYUEZACisjICB1bmRlZiBleHBmCitfR0xfRlVOQ0RFQ0xfU1lTIChleHBmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGV4cGYsIGZsb2F0LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAoZXhwZik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGV4cGYKKyMgaWYgSEFWRV9SQVdfREVDTF9FWFBGCitfR0xfV0FSTl9PTl9VU0UgKGV4cGYsICJleHBmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBleHBmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX0VYUExACisjIGlmICFASEFWRV9FWFBMQCB8fCAhQEhBVkVfREVDTF9FWFBMQAorIyAgdW5kZWYgZXhwbAorX0dMX0ZVTkNERUNMX1NZUyAoZXhwbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChleHBsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKGV4cGwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBleHBsCisjIGlmIEhBVkVfUkFXX0RFQ0xfRVhQTAorX0dMX1dBUk5fT05fVVNFIChleHBsLCAiZXhwbCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZXhwbCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX0VYUDJGQAorIyBpZiAhQEhBVkVfREVDTF9FWFAyRkAKK19HTF9GVU5DREVDTF9TWVMgKGV4cDJmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGV4cDJmLCBmbG9hdCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKGV4cDJmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZXhwMmYKKyMgaWYgSEFWRV9SQVdfREVDTF9FWFAyRgorX0dMX1dBUk5fT05fVVNFIChleHAyZiwgImV4cDJmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBleHAyZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9FWFAyQAorIyBpZiBAUkVQTEFDRV9FWFAyQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBleHAyCisjICAgZGVmaW5lIGV4cDIgcnBsX2V4cDIKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChleHAyLCBkb3VibGUsIChkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAoZXhwMiwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0RFQ0xfRVhQMkAKK19HTF9GVU5DREVDTF9TWVMgKGV4cDIsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZXhwMiwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGV4cDIpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBleHAyCisjIGlmIEhBVkVfUkFXX0RFQ0xfRVhQMgorX0dMX1dBUk5fT05fVVNFIChleHAyLCAiZXhwMiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZXhwMiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9FWFAyTEAKKyMgaWYgQFJFUExBQ0VfRVhQMkxACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGV4cDJsCisjICAgZGVmaW5lIGV4cDJsIHJwbF9leHAybAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGV4cDJsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGV4cDJsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0RFQ0xfRVhQMkxACisjICAgdW5kZWYgZXhwMmwKK19HTF9GVU5DREVDTF9TWVMgKGV4cDJsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChleHAybCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChleHAybCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGV4cDJsCisjIGlmIEhBVkVfUkFXX0RFQ0xfRVhQMkwKK19HTF9XQVJOX09OX1VTRSAoZXhwMmwsICJleHAybCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZXhwMmwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9FWFBNMUZACisjIGlmIEBSRVBMQUNFX0VYUE0xRkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZXhwbTFmCisjICAgZGVmaW5lIGV4cG0xZiBycGxfZXhwbTFmCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZXhwbTFmLCBmbG9hdCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGV4cG0xZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9FWFBNMUZACitfR0xfRlVOQ0RFQ0xfU1lTIChleHBtMWYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGV4cG0xZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChleHBtMWYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBleHBtMWYKKyMgaWYgSEFWRV9SQVdfREVDTF9FWFBNMUYKK19HTF9XQVJOX09OX1VTRSAoZXhwbTFmLCAiZXhwbTFmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBleHBtMWYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfRVhQTTFACisjIGlmIEBSRVBMQUNFX0VYUE0xQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBleHBtMQorIyAgIGRlZmluZSBleHBtMSBycGxfZXhwbTEKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChleHBtMSwgZG91YmxlLCAoZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGV4cG0xLCBkb3VibGUsIChkb3VibGUgeCkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfRVhQTTFACitfR0xfRlVOQ0RFQ0xfU1lTIChleHBtMSwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChleHBtMSwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGV4cG0xKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZXhwbTEKKyMgaWYgSEFWRV9SQVdfREVDTF9FWFBNMQorX0dMX1dBUk5fT05fVVNFIChleHBtMSwgImV4cG0xIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBleHBtMSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9FWFBNMUxACisjIGlmICFASEFWRV9ERUNMX0VYUE0xTEAKKyMgIHVuZGVmIGV4cG0xbAorX0dMX0ZVTkNERUNMX1NZUyAoZXhwbTFsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGV4cG0xbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChleHBtMWwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBleHBtMWwKKyMgaWYgSEFWRV9SQVdfREVDTF9FWFBNMUwKK19HTF9XQVJOX09OX1VTRSAoZXhwbTFsLCAiZXhwbTFsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBleHBtMWwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9GQUJTRkAKKyMgaWYgIUBIQVZFX0ZBQlNGQAorIyAgdW5kZWYgZmFic2YKK19HTF9GVU5DREVDTF9TWVMgKGZhYnNmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZhYnNmLCBmbG9hdCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKGZhYnNmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZmFic2YKKyMgaWYgSEFWRV9SQVdfREVDTF9GQUJTRgorX0dMX1dBUk5fT05fVVNFIChmYWJzZiwgImZhYnNmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmYWJzZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9GQUJTTEAKKyMgaWYgQFJFUExBQ0VfRkFCU0xACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZhYnNsCisjICAgZGVmaW5lIGZhYnNsIHJwbF9mYWJzbAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZhYnNsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGZhYnNsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0ZBQlNMQAorIyAgIHVuZGVmIGZhYnNsCitfR0xfRlVOQ0RFQ0xfU1lTIChmYWJzbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZmFic2wsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZmFic2wpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmYWJzbAorIyBpZiBIQVZFX1JBV19ERUNMX0ZBQlNMCitfR0xfV0FSTl9PTl9VU0UgKGZhYnNsLCAiZmFic2wgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZhYnNsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfRkxPT1JGQAorIyBpZiBAUkVQTEFDRV9GTE9PUkZACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZsb29yZgorIyAgIGRlZmluZSBmbG9vcmYgcnBsX2Zsb29yZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZsb29yZiwgZmxvYXQsIChmbG9hdCB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmbG9vcmYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfREVDTF9GTE9PUkZACisjICAgdW5kZWYgZmxvb3JmCitfR0xfRlVOQ0RFQ0xfU1lTIChmbG9vcmYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZsb29yZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmbG9vcmYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmbG9vcmYKKyMgaWYgSEFWRV9SQVdfREVDTF9GTE9PUkYKK19HTF9XQVJOX09OX1VTRSAoZmxvb3JmLCAiZmxvb3JmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmbG9vcmYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfRkxPT1JACisjIGlmIEBSRVBMQUNFX0ZMT09SQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgZmxvb3IgcnBsX2Zsb29yCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZmxvb3IsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmbG9vciwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoZmxvb3IsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmbG9vcik7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfRkxPT1JMQAorIyBpZiBAUkVQTEFDRV9GTE9PUkxACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZsb29ybAorIyAgIGRlZmluZSBmbG9vcmwgcnBsX2Zsb29ybAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZsb29ybCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmbG9vcmwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfREVDTF9GTE9PUkxACisjICAgdW5kZWYgZmxvb3JsCitfR0xfRlVOQ0RFQ0xfU1lTIChmbG9vcmwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZsb29ybCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmbG9vcmwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmbG9vcmwKKyMgaWYgSEFWRV9SQVdfREVDTF9GTE9PUkwKK19HTF9XQVJOX09OX1VTRSAoZmxvb3JsLCAiZmxvb3JsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmbG9vcmwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9GTUFGQAorIyBpZiBAUkVQTEFDRV9GTUFGQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmbWFmCisjICAgZGVmaW5lIGZtYWYgcnBsX2ZtYWYKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmbWFmLCBmbG9hdCwgKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopKTsKK19HTF9DWFhBTElBU19SUEwgKGZtYWYsIGZsb2F0LCAoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikpOworIyBlbHNlCisjICBpZiAhQEhBVkVfRk1BRkAKK19HTF9GVU5DREVDTF9TWVMgKGZtYWYsIGZsb2F0LCAoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZtYWYsIGZsb2F0LCAoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZm1hZik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZtYWYKKyMgaWYgSEFWRV9SQVdfREVDTF9GTUFGCitfR0xfV0FSTl9PTl9VU0UgKGZtYWYsICJmbWFmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmbWFmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX0ZNQUAKKyMgaWYgQFJFUExBQ0VfRk1BQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmbWEKKyMgICBkZWZpbmUgZm1hIHJwbF9mbWEKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmbWEsIGRvdWJsZSwgKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHopKTsKK19HTF9DWFhBTElBU19SUEwgKGZtYSwgZG91YmxlLCAoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeikpOworIyBlbHNlCisjICBpZiAhQEhBVkVfRk1BQAorX0dMX0ZVTkNERUNMX1NZUyAoZm1hLCBkb3VibGUsIChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZm1hLCBkb3VibGUsIChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmbWEpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmbWEKKyMgaWYgSEFWRV9SQVdfREVDTF9GTUEKK19HTF9XQVJOX09OX1VTRSAoZm1hLCAiZm1hIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmbWEgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfRk1BTEAKKyMgaWYgQFJFUExBQ0VfRk1BTEAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZm1hbAorIyAgIGRlZmluZSBmbWFsIHJwbF9mbWFsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZm1hbCwgbG9uZyBkb3VibGUsCisgICAgICAgICAgICAgICAgICAobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSwgbG9uZyBkb3VibGUgeikpOworX0dMX0NYWEFMSUFTX1JQTCAoZm1hbCwgbG9uZyBkb3VibGUsCisgICAgICAgICAgICAgICAgICAobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSwgbG9uZyBkb3VibGUgeikpOworIyBlbHNlCisjICBpZiAhQEhBVkVfRk1BTEAKKyMgICB1bmRlZiBmbWFsCitfR0xfRlVOQ0RFQ0xfU1lTIChmbWFsLCBsb25nIGRvdWJsZSwKKyAgICAgICAgICAgICAgICAgIChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5LCBsb25nIGRvdWJsZSB6KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZm1hbCwgbG9uZyBkb3VibGUsCisgICAgICAgICAgICAgICAgICAobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSwgbG9uZyBkb3VibGUgeikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZm1hbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZtYWwKKyMgaWYgSEFWRV9SQVdfREVDTF9GTUFMCitfR0xfV0FSTl9PTl9VU0UgKGZtYWwsICJmbWFsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmbWFsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfRk1PREZACisjIGlmIEBSRVBMQUNFX0ZNT0RGQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmbW9kZgorIyAgIGRlZmluZSBmbW9kZiBycGxfZm1vZGYKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmbW9kZiwgZmxvYXQsIChmbG9hdCB4LCBmbG9hdCB5KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmbW9kZiwgZmxvYXQsIChmbG9hdCB4LCBmbG9hdCB5KSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9GTU9ERkAKKyMgICB1bmRlZiBmbW9kZgorX0dMX0ZVTkNERUNMX1NZUyAoZm1vZGYsIGZsb2F0LCAoZmxvYXQgeCwgZmxvYXQgeSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZtb2RmLCBmbG9hdCwgKGZsb2F0IHgsIGZsb2F0IHkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZtb2RmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZm1vZGYKKyMgaWYgSEFWRV9SQVdfREVDTF9GTU9ERgorX0dMX1dBUk5fT05fVVNFIChmbW9kZiwgImZtb2RmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmbW9kZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9GTU9EQAorIyBpZiBAUkVQTEFDRV9GTU9EQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmbW9kCisjICAgZGVmaW5lIGZtb2QgcnBsX2Ztb2QKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmbW9kLCBkb3VibGUsIChkb3VibGUgeCwgZG91YmxlIHkpKTsKK19HTF9DWFhBTElBU19SUEwgKGZtb2QsIGRvdWJsZSwgKGRvdWJsZSB4LCBkb3VibGUgeSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChmbW9kLCBkb3VibGUsIChkb3VibGUgeCwgZG91YmxlIHkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZtb2QpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmbW9kCisjIGlmIEhBVkVfUkFXX0RFQ0xfRk1PRAorX0dMX1dBUk5fT05fVVNFIChmbW9kLCAiZm1vZCBoYXMgcG9ydGFiaWxpdHkgcHJvYmxlbXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmbW9kIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX0ZNT0RMQAorIyBpZiBAUkVQTEFDRV9GTU9ETEAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZm1vZGwKKyMgICBkZWZpbmUgZm1vZGwgcnBsX2Ztb2RsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZm1vZGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZm1vZGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfRk1PRExACisjICAgdW5kZWYgZm1vZGwKK19HTF9GVU5DREVDTF9TWVMgKGZtb2RsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmbW9kbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmbW9kbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZtb2RsCisjIGlmIEhBVkVfUkFXX0RFQ0xfRk1PREwKK19HTF9XQVJOX09OX1VTRSAoZm1vZGwsICJmbW9kbCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZm1vZGwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBXcml0ZSB4IGFzCisgICAgIHggPSBtYW50aXNzYSAqIDJeZXhwCisgICB3aGVyZQorICAgICBJZiB4IGZpbml0ZSBhbmQgbm9uemVybzogMC41IDw9IHxtYW50aXNzYXwgPCAxLjAuCisgICAgIElmIHggaXMgemVybzogbWFudGlzc2EgPSB4LCBleHAgPSAwLgorICAgICBJZiB4IGlzIGluZmluaXRlIG9yIE5hTjogbWFudGlzc2EgPSB4LCBleHAgdW5zcGVjaWZpZWQuCisgICBTdG9yZSBleHAgaW4gKkVYUFBUUiBhbmQgcmV0dXJuIG1hbnRpc3NhLiAgKi8KKyNpZiBAR05VTElCX0ZSRVhQRkAKKyMgaWYgQFJFUExBQ0VfRlJFWFBGQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmcmV4cGYKKyMgICBkZWZpbmUgZnJleHBmIHJwbF9mcmV4cGYKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmcmV4cGYsIGZsb2F0LCAoZmxvYXQgeCwgaW50ICpleHBwdHIpIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmcmV4cGYsIGZsb2F0LCAoZmxvYXQgeCwgaW50ICpleHBwdHIpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0ZSRVhQRkAKKyMgICB1bmRlZiBmcmV4cGYKK19HTF9GVU5DREVDTF9TWVMgKGZyZXhwZiwgZmxvYXQsIChmbG9hdCB4LCBpbnQgKmV4cHB0cikgX0dMX0FSR19OT05OVUxMICgoMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmcmV4cGYsIGZsb2F0LCAoZmxvYXQgeCwgaW50ICpleHBwdHIpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZyZXhwZik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZyZXhwZgorIyBpZiBIQVZFX1JBV19ERUNMX0ZSRVhQRgorX0dMX1dBUk5fT05fVVNFIChmcmV4cGYsICJmcmV4cGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZyZXhwZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBXcml0ZSB4IGFzCisgICAgIHggPSBtYW50aXNzYSAqIDJeZXhwCisgICB3aGVyZQorICAgICBJZiB4IGZpbml0ZSBhbmQgbm9uemVybzogMC41IDw9IHxtYW50aXNzYXwgPCAxLjAuCisgICAgIElmIHggaXMgemVybzogbWFudGlzc2EgPSB4LCBleHAgPSAwLgorICAgICBJZiB4IGlzIGluZmluaXRlIG9yIE5hTjogbWFudGlzc2EgPSB4LCBleHAgdW5zcGVjaWZpZWQuCisgICBTdG9yZSBleHAgaW4gKkVYUFBUUiBhbmQgcmV0dXJuIG1hbnRpc3NhLiAgKi8KKyNpZiBAR05VTElCX0ZSRVhQQAorIyBpZiBAUkVQTEFDRV9GUkVYUEAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGZyZXhwIHJwbF9mcmV4cAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZyZXhwLCBkb3VibGUsIChkb3VibGUgeCwgaW50ICpleHBwdHIpIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmcmV4cCwgZG91YmxlLCAoZG91YmxlIHgsIGludCAqZXhwcHRyKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZyZXhwLCBkb3VibGUsIChkb3VibGUgeCwgaW50ICpleHBwdHIpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZyZXhwKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZnJleHAKKy8qIEFzc3VtZSBmcmV4cCBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFIChmcmV4cCwgImZyZXhwIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmcmV4cCBmb3IgcG9ydGFiaWxpdHkiKTsKKyNlbmRpZgorCisvKiBXcml0ZSB4IGFzCisgICAgIHggPSBtYW50aXNzYSAqIDJeZXhwCisgICB3aGVyZQorICAgICBJZiB4IGZpbml0ZSBhbmQgbm9uemVybzogMC41IDw9IHxtYW50aXNzYXwgPCAxLjAuCisgICAgIElmIHggaXMgemVybzogbWFudGlzc2EgPSB4LCBleHAgPSAwLgorICAgICBJZiB4IGlzIGluZmluaXRlIG9yIE5hTjogbWFudGlzc2EgPSB4LCBleHAgdW5zcGVjaWZpZWQuCisgICBTdG9yZSBleHAgaW4gKkVYUFBUUiBhbmQgcmV0dXJuIG1hbnRpc3NhLiAgKi8KKyNpZiBAR05VTElCX0ZSRVhQTEAgJiYgQFJFUExBQ0VfRlJFWFBMQAorIyBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgdW5kZWYgZnJleHBsCisjICBkZWZpbmUgZnJleHBsIHJwbF9mcmV4cGwKKyMgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZyZXhwbCwgbG9uZyBkb3VibGUsCisgICAgICAgICAgICAgICAgICAobG9uZyBkb3VibGUgeCwgaW50ICpleHBwdHIpIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmcmV4cGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCwgaW50ICpleHBwdHIpKTsKKyNlbHNlCisjIGlmICFASEFWRV9ERUNMX0ZSRVhQTEAKK19HTF9GVU5DREVDTF9TWVMgKGZyZXhwbCwgbG9uZyBkb3VibGUsCisgICAgICAgICAgICAgICAgICAobG9uZyBkb3VibGUgeCwgaW50ICpleHBwdHIpIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CisjIGVuZGlmCisjIGlmIEBHTlVMSUJfRlJFWFBMQAorX0dMX0NYWEFMSUFTX1NZUyAoZnJleHBsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgsIGludCAqZXhwcHRyKSk7CisjIGVuZGlmCisjZW5kaWYKKyNpZiBAR05VTElCX0ZSRVhQTEAgJiYgIShAUkVQTEFDRV9GUkVYUExAICYmICFASEFWRV9ERUNMX0ZSRVhQTEApCitfR0xfQ1hYQUxJQVNXQVJOIChmcmV4cGwpOworI2VuZGlmCisjaWYgIUBHTlVMSUJfRlJFWFBMQCAmJiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZyZXhwbAorIyBpZiBIQVZFX1JBV19ERUNMX0ZSRVhQTAorX0dMX1dBUk5fT05fVVNFIChmcmV4cGwsICJmcmV4cGwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZyZXhwbCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIFJldHVybiBzcXJ0KHheMit5XjIpLiAgKi8KKyNpZiBAR05VTElCX0hZUE9URkAKKyMgaWYgQFJFUExBQ0VfSFlQT1RGQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBoeXBvdGYKKyMgICBkZWZpbmUgaHlwb3RmIHJwbF9oeXBvdGYKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChoeXBvdGYsIGZsb2F0LCAoZmxvYXQgeCwgZmxvYXQgeSkpOworX0dMX0NYWEFMSUFTX1JQTCAoaHlwb3RmLCBmbG9hdCwgKGZsb2F0IHgsIGZsb2F0IHkpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0hZUE9URkAKK19HTF9GVU5DREVDTF9TWVMgKGh5cG90ZiwgZmxvYXQsIChmbG9hdCB4LCBmbG9hdCB5KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoaHlwb3RmLCBmbG9hdCwgKGZsb2F0IHgsIGZsb2F0IHkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGh5cG90Zik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGh5cG90ZgorIyBpZiBIQVZFX1JBV19ERUNMX0hZUE9URgorX0dMX1dBUk5fT05fVVNFIChoeXBvdGYsICJoeXBvdGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGh5cG90ZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBSZXR1cm4gc3FydCh4XjIreV4yKS4gICovCisjaWYgQEdOVUxJQl9IWVBPVEAKKyMgaWYgQFJFUExBQ0VfSFlQT1RACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGh5cG90CisjICAgZGVmaW5lIGh5cG90IHJwbF9oeXBvdAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGh5cG90LCBkb3VibGUsIChkb3VibGUgeCwgZG91YmxlIHkpKTsKK19HTF9DWFhBTElBU19SUEwgKGh5cG90LCBkb3VibGUsIChkb3VibGUgeCwgZG91YmxlIHkpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoaHlwb3QsIGRvdWJsZSwgKGRvdWJsZSB4LCBkb3VibGUgeSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoaHlwb3QpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBoeXBvdAorIyBpZiBIQVZFX1JBV19ERUNMX0hZUE9UCitfR0xfV0FSTl9PTl9VU0UgKGh5cG90ZiwgImh5cG90IGhhcyBwb3J0YWJpbGl0eSBwcm9ibGVtcyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGh5cG90IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIFJldHVybiBzcXJ0KHheMit5XjIpLiAgKi8KKyNpZiBAR05VTElCX0hZUE9UTEAKKyMgaWYgQFJFUExBQ0VfSFlQT1RMQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBoeXBvdGwKKyMgICBkZWZpbmUgaHlwb3RsIHJwbF9oeXBvdGwKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChoeXBvdGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkpOworX0dMX0NYWEFMSUFTX1JQTCAoaHlwb3RsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHkpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0hZUE9UTEAKK19HTF9GVU5DREVDTF9TWVMgKGh5cG90bCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoaHlwb3RsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGh5cG90bCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGh5cG90bAorIyBpZiBIQVZFX1JBV19ERUNMX0hZUE9UTAorX0dMX1dBUk5fT05fVVNFIChoeXBvdGwsICJoeXBvdGwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGh5cG90bCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX0lMT0dCRkAKKyMgaWYgQFJFUExBQ0VfSUxPR0JGQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBpbG9nYmYKKyMgICBkZWZpbmUgaWxvZ2JmIHJwbF9pbG9nYmYKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChpbG9nYmYsIGludCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGlsb2diZiwgaW50LCAoZmxvYXQgeCkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfSUxPR0JGQAorX0dMX0ZVTkNERUNMX1NZUyAoaWxvZ2JmLCBpbnQsIChmbG9hdCB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoaWxvZ2JmLCBpbnQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChpbG9nYmYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBpbG9nYmYKKyMgaWYgSEFWRV9SQVdfREVDTF9JTE9HQkYKK19HTF9XQVJOX09OX1VTRSAoaWxvZ2JmLCAiaWxvZ2JmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBpbG9nYmYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfSUxPR0JACisjIGlmIEBSRVBMQUNFX0lMT0dCQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBpbG9nYgorIyAgIGRlZmluZSBpbG9nYiBycGxfaWxvZ2IKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChpbG9nYiwgaW50LCAoZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGlsb2diLCBpbnQsIChkb3VibGUgeCkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfSUxPR0JACitfR0xfRlVOQ0RFQ0xfU1lTIChpbG9nYiwgaW50LCAoZG91YmxlIHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChpbG9nYiwgaW50LCAoZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGlsb2diKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgaWxvZ2IKKyMgaWYgSEFWRV9SQVdfREVDTF9JTE9HQgorX0dMX1dBUk5fT05fVVNFIChpbG9nYiwgImlsb2diIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBpbG9nYiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9JTE9HQkxACisjIGlmICFASEFWRV9JTE9HQkxACitfR0xfRlVOQ0RFQ0xfU1lTIChpbG9nYmwsIGludCwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGlsb2dibCwgaW50LCAobG9uZyBkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAoaWxvZ2JsKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgaWxvZ2JsCisjIGlmIEhBVkVfUkFXX0RFQ0xfSUxPR0JMCitfR0xfV0FSTl9PTl9VU0UgKGlsb2dibCwgImlsb2dibCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgaWxvZ2JsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogUmV0dXJuIHggKiAyXmV4cC4gICovCisjaWYgQEdOVUxJQl9MREVYUEZACisjIGlmICFASEFWRV9MREVYUEZACisjICB1bmRlZiBsZGV4cGYKK19HTF9GVU5DREVDTF9TWVMgKGxkZXhwZiwgZmxvYXQsIChmbG9hdCB4LCBpbnQgZXhwKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChsZGV4cGYsIGZsb2F0LCAoZmxvYXQgeCwgaW50IGV4cCkpOworX0dMX0NYWEFMSUFTV0FSTiAobGRleHBmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbGRleHBmCisjIGlmIEhBVkVfUkFXX0RFQ0xfTERFWFBGCitfR0xfV0FSTl9PTl9VU0UgKGxkZXhwZiwgImxkZXhwZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbGRleHBmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIFJldHVybiB4ICogMl5leHAuICAqLworI2lmIEBHTlVMSUJfTERFWFBMQCAmJiBAUkVQTEFDRV9MREVYUExACisjIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICB1bmRlZiBsZGV4cGwKKyMgIGRlZmluZSBsZGV4cGwgcnBsX2xkZXhwbAorIyBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobGRleHBsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgsIGludCBleHApKTsKK19HTF9DWFhBTElBU19SUEwgKGxkZXhwbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4LCBpbnQgZXhwKSk7CisjZWxzZQorIyBpZiAhQEhBVkVfREVDTF9MREVYUExACitfR0xfRlVOQ0RFQ0xfU1lTIChsZGV4cGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCwgaW50IGV4cCkpOworIyBlbmRpZgorIyBpZiBAR05VTElCX0xERVhQTEAKK19HTF9DWFhBTElBU19TWVMgKGxkZXhwbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4LCBpbnQgZXhwKSk7CisjIGVuZGlmCisjZW5kaWYKKyNpZiBAR05VTElCX0xERVhQTEAKK19HTF9DWFhBTElBU1dBUk4gKGxkZXhwbCk7CisjZW5kaWYKKyNpZiAhQEdOVUxJQl9MREVYUExAICYmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbGRleHBsCisjIGlmIEhBVkVfUkFXX0RFQ0xfTERFWFBMCitfR0xfV0FSTl9PTl9VU0UgKGxkZXhwbCwgImxkZXhwbCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbGRleHBsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfTE9HRkAKKyMgaWYgQFJFUExBQ0VfTE9HRkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbG9nZgorIyAgIGRlZmluZSBsb2dmIHJwbF9sb2dmCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobG9nZiwgZmxvYXQsIChmbG9hdCB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChsb2dmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0xPR0ZACisjICAgdW5kZWYgbG9nZgorX0dMX0ZVTkNERUNMX1NZUyAobG9nZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobG9nZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChsb2dmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbG9nZgorIyBpZiBIQVZFX1JBV19ERUNMX0xPR0YKK19HTF9XQVJOX09OX1VTRSAobG9nZiwgImxvZ2YgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGxvZ2YgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfTE9HQAorIyBpZiBAUkVQTEFDRV9MT0dACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGxvZworIyAgIGRlZmluZSBsb2cgcnBsX2xvZworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGxvZywgZG91YmxlLCAoZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGxvZywgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAobG9nLCBkb3VibGUsIChkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobG9nKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbG9nCisjIGlmIEhBVkVfUkFXX0RFQ0xfTE9HCitfR0xfV0FSTl9PTl9VU0UgKGxvZywgImxvZyBoYXMgcG9ydGFiaWxpdHkgcHJvYmxlbXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBsb2cgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfTE9HTEAKKyMgaWYgQFJFUExBQ0VfTE9HTEAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbG9nbAorIyAgIGRlZmluZSBsb2dsIHJwbF9sb2dsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobG9nbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChsb2dsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0xPR0xAIHx8ICFASEFWRV9ERUNMX0xPR0xACisjICAgdW5kZWYgbG9nbAorX0dMX0ZVTkNERUNMX1NZUyAobG9nbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobG9nbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChsb2dsKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbG9nbAorIyBpZiBIQVZFX1JBV19ERUNMX0xPR0wKK19HTF9XQVJOX09OX1VTRSAobG9nbCwgImxvZ2wgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGxvZ2wgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9MT0cxMEZACisjIGlmIEBSRVBMQUNFX0xPRzEwRkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbG9nMTBmCisjICAgZGVmaW5lIGxvZzEwZiBycGxfbG9nMTBmCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobG9nMTBmLCBmbG9hdCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGxvZzEwZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9MT0cxMEZACisjICAgdW5kZWYgbG9nMTBmCitfR0xfRlVOQ0RFQ0xfU1lTIChsb2cxMGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGxvZzEwZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChsb2cxMGYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBsb2cxMGYKKyMgaWYgSEFWRV9SQVdfREVDTF9MT0cxMEYKK19HTF9XQVJOX09OX1VTRSAobG9nMTBmLCAibG9nMTBmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBsb2cxMGYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfTE9HMTBACisjIGlmIEBSRVBMQUNFX0xPRzEwQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBsb2cxMAorIyAgIGRlZmluZSBsb2cxMCBycGxfbG9nMTAKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChsb2cxMCwgZG91YmxlLCAoZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGxvZzEwLCBkb3VibGUsIChkb3VibGUgeCkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChsb2cxMCwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGxvZzEwKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbG9nMTAKKyMgaWYgSEFWRV9SQVdfREVDTF9MT0cxMAorX0dMX1dBUk5fT05fVVNFIChsb2cxMCwgImxvZzEwIGhhcyBwb3J0YWJpbGl0eSBwcm9ibGVtcyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGxvZzEwIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX0xPRzEwTEAKKyMgaWYgQFJFUExBQ0VfTE9HMTBMQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBsb2cxMGwKKyMgICBkZWZpbmUgbG9nMTBsIHJwbF9sb2cxMGwKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChsb2cxMGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAobG9nMTBsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0xPRzEwTEAgfHwgIUBIQVZFX0RFQ0xfTE9HMTBMQAorIyAgIHVuZGVmIGxvZzEwbAorX0dMX0ZVTkNERUNMX1NZUyAobG9nMTBsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChsb2cxMGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobG9nMTBsKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbG9nMTBsCisjIGlmIEhBVkVfUkFXX0RFQ0xfTE9HMTBMCitfR0xfV0FSTl9PTl9VU0UgKGxvZzEwbCwgImxvZzEwbCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbG9nMTBsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfTE9HMVBGQAorIyBpZiBAUkVQTEFDRV9MT0cxUEZACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGxvZzFwZgorIyAgIGRlZmluZSBsb2cxcGYgcnBsX2xvZzFwZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGxvZzFwZiwgZmxvYXQsIChmbG9hdCB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChsb2cxcGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfTE9HMVBGQAorX0dMX0ZVTkNERUNMX1NZUyAobG9nMXBmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChsb2cxcGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobG9nMXBmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbG9nMXBmCisjIGlmIEhBVkVfUkFXX0RFQ0xfTE9HMVBGCitfR0xfV0FSTl9PTl9VU0UgKGxvZzFwZiwgImxvZzFwZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbG9nMXBmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX0xPRzFQQAorIyBpZiBAUkVQTEFDRV9MT0cxUEAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbG9nMXAKKyMgICBkZWZpbmUgbG9nMXAgcnBsX2xvZzFwCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobG9nMXAsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChsb2cxcCwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0xPRzFQQAorX0dMX0ZVTkNERUNMX1NZUyAobG9nMXAsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobG9nMXAsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChsb2cxcCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGxvZzFwCisjIGlmIEhBVkVfUkFXX0RFQ0xfTE9HMVAKK19HTF9XQVJOX09OX1VTRSAobG9nMXAsICJsb2cxcCBoYXMgcG9ydGFiaWxpdHkgcHJvYmxlbXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBsb2cxcCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9MT0cxUExACisjIGlmIEBSRVBMQUNFX0xPRzFQTEAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbG9nMXBsCisjICAgZGVmaW5lIGxvZzFwbCBycGxfbG9nMXBsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobG9nMXBsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGxvZzFwbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9MT0cxUExACitfR0xfRlVOQ0RFQ0xfU1lTIChsb2cxcGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGxvZzFwbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChsb2cxcGwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBsb2cxcGwKKyMgaWYgSEFWRV9SQVdfREVDTF9MT0cxUEwKK19HTF9XQVJOX09OX1VTRSAobG9nMXBsLCAibG9nMXBsIGhhcyBwb3J0YWJpbGl0eSBwcm9ibGVtcyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGxvZzFwbCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX0xPRzJGQAorIyBpZiBAUkVQTEFDRV9MT0cyRkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbG9nMmYKKyMgICBkZWZpbmUgbG9nMmYgcnBsX2xvZzJmCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobG9nMmYsIGZsb2F0LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAobG9nMmYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfREVDTF9MT0cyRkAKKyMgICB1bmRlZiBsb2cyZgorX0dMX0ZVTkNERUNMX1NZUyAobG9nMmYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGxvZzJmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGxvZzJmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbG9nMmYKKyMgaWYgSEFWRV9SQVdfREVDTF9MT0cyRgorX0dMX1dBUk5fT05fVVNFIChsb2cyZiwgImxvZzJmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBsb2cyZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9MT0cyQAorIyBpZiBAUkVQTEFDRV9MT0cyQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBsb2cyCisjICAgZGVmaW5lIGxvZzIgcnBsX2xvZzIKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChsb2cyLCBkb3VibGUsIChkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAobG9nMiwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0RFQ0xfTE9HMkAKKyMgICB1bmRlZiBsb2cyCitfR0xfRlVOQ0RFQ0xfU1lTIChsb2cyLCBkb3VibGUsIChkb3VibGUgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGxvZzIsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChsb2cyKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbG9nMgorIyBpZiBIQVZFX1JBV19ERUNMX0xPRzIKK19HTF9XQVJOX09OX1VTRSAobG9nMiwgImxvZzIgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGxvZzIgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfTE9HMkxACisjIGlmIEBSRVBMQUNFX0xPRzJMQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBsb2cybAorIyAgIGRlZmluZSBsb2cybCBycGxfbG9nMmwKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChsb2cybCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChsb2cybCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9ERUNMX0xPRzJMQAorX0dMX0ZVTkNERUNMX1NZUyAobG9nMmwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGxvZzJsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGxvZzJsKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbG9nMmwKKyMgaWYgSEFWRV9SQVdfREVDTF9MT0cyTAorX0dMX1dBUk5fT05fVVNFIChsb2cybCwgImxvZzJsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBsb2cybCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX0xPR0JGQAorIyBpZiBAUkVQTEFDRV9MT0dCRkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbG9nYmYKKyMgICBkZWZpbmUgbG9nYmYgcnBsX2xvZ2JmCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobG9nYmYsIGZsb2F0LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAobG9nYmYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfTE9HQkZACitfR0xfRlVOQ0RFQ0xfU1lTIChsb2diZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobG9nYmYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobG9nYmYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBsb2diZgorIyBpZiBIQVZFX1JBV19ERUNMX0xPR0JGCitfR0xfV0FSTl9PTl9VU0UgKGxvZ2JmLCAibG9nYmYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGxvZ2JmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX0xPR0JACisjIGlmIEBSRVBMQUNFX0xPR0JACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGxvZ2IKKyMgICBkZWZpbmUgbG9nYiBycGxfbG9nYgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGxvZ2IsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChsb2diLCBkb3VibGUsIChkb3VibGUgeCkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfREVDTF9MT0dCQAorX0dMX0ZVTkNERUNMX1NZUyAobG9nYiwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChsb2diLCBkb3VibGUsIChkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobG9nYik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGxvZ2IKKyMgaWYgSEFWRV9SQVdfREVDTF9MT0dCCitfR0xfV0FSTl9PTl9VU0UgKGxvZ2IsICJsb2diIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBsb2diIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX0xPR0JMQAorIyBpZiBAUkVQTEFDRV9MT0dCTEAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbG9nYmwKKyMgICBkZWZpbmUgbG9nYmwgcnBsX2xvZ2JsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobG9nYmwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAobG9nYmwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfTE9HQkxACitfR0xfRlVOQ0RFQ0xfU1lTIChsb2dibCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobG9nYmwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobG9nYmwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBsb2dibAorIyBpZiBIQVZFX1JBV19ERUNMX0xPR0JMCitfR0xfV0FSTl9PTl9VU0UgKGxvZ2JsLCAibG9nYmwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGxvZ2JsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfTU9ERkZACisjIGlmIEBSRVBMQUNFX01PREZGQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBtb2RmZgorIyAgIGRlZmluZSBtb2RmZiBycGxfbW9kZmYKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChtb2RmZiwgZmxvYXQsIChmbG9hdCB4LCBmbG9hdCAqaXB0cikgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKG1vZGZmLCBmbG9hdCwgKGZsb2F0IHgsIGZsb2F0ICppcHRyKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9NT0RGRkAKKyMgICB1bmRlZiBtb2RmZgorX0dMX0ZVTkNERUNMX1NZUyAobW9kZmYsIGZsb2F0LCAoZmxvYXQgeCwgZmxvYXQgKmlwdHIpIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobW9kZmYsIGZsb2F0LCAoZmxvYXQgeCwgZmxvYXQgKmlwdHIpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG1vZGZmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbW9kZmYKKyMgaWYgSEFWRV9SQVdfREVDTF9NT0RGRgorX0dMX1dBUk5fT05fVVNFIChtb2RmZiwgIm1vZGZmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBtb2RmZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9NT0RGQAorIyBpZiBAUkVQTEFDRV9NT0RGQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBtb2RmCisjICAgZGVmaW5lIG1vZGYgcnBsX21vZGYKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChtb2RmLCBkb3VibGUsIChkb3VibGUgeCwgZG91YmxlICppcHRyKSBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAobW9kZiwgZG91YmxlLCAoZG91YmxlIHgsIGRvdWJsZSAqaXB0cikpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChtb2RmLCBkb3VibGUsIChkb3VibGUgeCwgZG91YmxlICppcHRyKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChtb2RmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbW9kZgorIyBpZiBIQVZFX1JBV19ERUNMX01PREYKK19HTF9XQVJOX09OX1VTRSAobW9kZiwgIm1vZGYgaGFzIHBvcnRhYmlsaXR5IHByb2JsZW1zIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbW9kZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9NT0RGTEAKKyMgaWYgQFJFUExBQ0VfTU9ERkxACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIG1vZGZsCisjICAgZGVmaW5lIG1vZGZsIHJwbF9tb2RmbAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG1vZGZsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlICppcHRyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAobW9kZmwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgKmlwdHIpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX01PREZMQAorIyAgIHVuZGVmIG1vZGZsCitfR0xfRlVOQ0RFQ0xfU1lTIChtb2RmbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSAqaXB0cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChtb2RmbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSAqaXB0cikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobW9kZmwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBtb2RmbAorIyBpZiBIQVZFX1JBV19ERUNMX01PREZMCitfR0xfV0FSTl9PTl9VU0UgKG1vZGZsLCAibW9kZmwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG1vZGZsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfUE9XRkAKKyMgaWYgIUBIQVZFX1BPV0ZACisjICB1bmRlZiBwb3dmCitfR0xfRlVOQ0RFQ0xfU1lTIChwb3dmLCBmbG9hdCwgKGZsb2F0IHgsIGZsb2F0IHkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvd2YsIGZsb2F0LCAoZmxvYXQgeCwgZmxvYXQgeSkpOworX0dMX0NYWEFMSUFTV0FSTiAocG93Zik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHBvd2YKKyMgaWYgSEFWRV9SQVdfREVDTF9QT1dGCitfR0xfV0FSTl9PTl9VU0UgKHBvd2YsICJwb3dmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwb3dmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfUkVNQUlOREVSRkAKKyMgaWYgQFJFUExBQ0VfUkVNQUlOREVSRkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcmVtYWluZGVyZgorIyAgIGRlZmluZSByZW1haW5kZXJmIHJwbF9yZW1haW5kZXJmCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocmVtYWluZGVyZiwgZmxvYXQsIChmbG9hdCB4LCBmbG9hdCB5KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChyZW1haW5kZXJmLCBmbG9hdCwgKGZsb2F0IHgsIGZsb2F0IHkpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX1JFTUFJTkRFUkZACitfR0xfRlVOQ0RFQ0xfU1lTIChyZW1haW5kZXJmLCBmbG9hdCwgKGZsb2F0IHgsIGZsb2F0IHkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChyZW1haW5kZXJmLCBmbG9hdCwgKGZsb2F0IHgsIGZsb2F0IHkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHJlbWFpbmRlcmYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiByZW1haW5kZXJmCisjIGlmIEhBVkVfUkFXX0RFQ0xfUkVNQUlOREVSRgorX0dMX1dBUk5fT05fVVNFIChyZW1haW5kZXJmLCAicmVtYWluZGVyZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmVtYWluZGVyZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9SRU1BSU5ERVJACisjIGlmIEBSRVBMQUNFX1JFTUFJTkRFUkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcmVtYWluZGVyCisjICAgZGVmaW5lIHJlbWFpbmRlciBycGxfcmVtYWluZGVyCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocmVtYWluZGVyLCBkb3VibGUsIChkb3VibGUgeCwgZG91YmxlIHkpKTsKK19HTF9DWFhBTElBU19SUEwgKHJlbWFpbmRlciwgZG91YmxlLCAoZG91YmxlIHgsIGRvdWJsZSB5KSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9SRU1BSU5ERVJAIHx8ICFASEFWRV9ERUNMX1JFTUFJTkRFUkAKK19HTF9GVU5DREVDTF9TWVMgKHJlbWFpbmRlciwgZG91YmxlLCAoZG91YmxlIHgsIGRvdWJsZSB5KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocmVtYWluZGVyLCBkb3VibGUsIChkb3VibGUgeCwgZG91YmxlIHkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHJlbWFpbmRlcik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHJlbWFpbmRlcgorIyBpZiBIQVZFX1JBV19ERUNMX1JFTUFJTkRFUgorX0dMX1dBUk5fT05fVVNFIChyZW1haW5kZXIsICJyZW1haW5kZXIgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHJlbWFpbmRlciBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9SRU1BSU5ERVJMQAorIyBpZiBAUkVQTEFDRV9SRU1BSU5ERVJMQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiByZW1haW5kZXJsCisjICAgZGVmaW5lIHJlbWFpbmRlcmwgcnBsX3JlbWFpbmRlcmwKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChyZW1haW5kZXJsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHkpKTsKK19HTF9DWFhBTElBU19SUEwgKHJlbWFpbmRlcmwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfREVDTF9SRU1BSU5ERVJMQAorIyAgIHVuZGVmIHJlbWFpbmRlcmwKK19HTF9GVU5DREVDTF9TWVMgKHJlbWFpbmRlcmwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHJlbWFpbmRlcmwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocmVtYWluZGVybCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHJlbWFpbmRlcmwKKyMgaWYgSEFWRV9SQVdfREVDTF9SRU1BSU5ERVJMCitfR0xfV0FSTl9PTl9VU0UgKHJlbWFpbmRlcmwsICJyZW1haW5kZXJsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSByZW1haW5kZXJsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfUklOVEZACisjIGlmICFASEFWRV9ERUNMX1JJTlRGQAorX0dMX0ZVTkNERUNMX1NZUyAocmludGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocmludGYsIGZsb2F0LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAocmludGYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiByaW50ZgorIyBpZiBIQVZFX1JBV19ERUNMX1JJTlRGCitfR0xfV0FSTl9PTl9VU0UgKHJpbnRmLCAicmludGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHJpbnRmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX1JJTlRACisjIGlmICFASEFWRV9SSU5UQAorX0dMX0ZVTkNERUNMX1NZUyAocmludCwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHJpbnQsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChyaW50KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcmludAorIyBpZiBIQVZFX1JBV19ERUNMX1JJTlQKK19HTF9XQVJOX09OX1VTRSAocmludCwgInJpbnQgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHJpbnQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfUklOVExACisjIGlmICFASEFWRV9SSU5UTEAKK19HTF9GVU5DREVDTF9TWVMgKHJpbnRsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHJpbnRsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKHJpbnRsKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcmludGwKKyMgaWYgSEFWRV9SQVdfREVDTF9SSU5UTAorX0dMX1dBUk5fT05fVVNFIChyaW50bCwgInJpbnRsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSByaW50bCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX1JPVU5ERkAKKyMgaWYgQFJFUExBQ0VfUk9VTkRGQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiByb3VuZGYKKyMgICBkZWZpbmUgcm91bmRmIHJwbF9yb3VuZGYKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChyb3VuZGYsIGZsb2F0LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAocm91bmRmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0RFQ0xfUk9VTkRGQAorX0dMX0ZVTkNERUNMX1NZUyAocm91bmRmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChyb3VuZGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocm91bmRmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcm91bmRmCisjIGlmIEhBVkVfUkFXX0RFQ0xfUk9VTkRGCitfR0xfV0FSTl9PTl9VU0UgKHJvdW5kZiwgInJvdW5kZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcm91bmRmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX1JPVU5EQAorIyBpZiBAUkVQTEFDRV9ST1VOREAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcm91bmQKKyMgICBkZWZpbmUgcm91bmQgcnBsX3JvdW5kCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocm91bmQsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChyb3VuZCwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0RFQ0xfUk9VTkRACitfR0xfRlVOQ0RFQ0xfU1lTIChyb3VuZCwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChyb3VuZCwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHJvdW5kKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcm91bmQKKyMgaWYgSEFWRV9SQVdfREVDTF9ST1VORAorX0dMX1dBUk5fT05fVVNFIChyb3VuZCwgInJvdW5kIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSByb3VuZCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9ST1VORExACisjIGlmIEBSRVBMQUNFX1JPVU5ETEAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcm91bmRsCisjICAgZGVmaW5lIHJvdW5kbCBycGxfcm91bmRsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocm91bmRsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKHJvdW5kbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9ERUNMX1JPVU5ETEAKKyMgICB1bmRlZiByb3VuZGwKK19HTF9GVU5DREVDTF9TWVMgKHJvdW5kbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocm91bmRsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHJvdW5kbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHJvdW5kbAorIyBpZiBIQVZFX1JBV19ERUNMX1JPVU5ETAorX0dMX1dBUk5fT05fVVNFIChyb3VuZGwsICJyb3VuZGwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHJvdW5kbCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX1NJTkZACisjIGlmICFASEFWRV9TSU5GQAorIyAgdW5kZWYgc2luZgorX0dMX0ZVTkNERUNMX1NZUyAoc2luZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzaW5mLCBmbG9hdCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKHNpbmYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzaW5mCisjIGlmIEhBVkVfUkFXX0RFQ0xfU0lORgorX0dMX1dBUk5fT05fVVNFIChzaW5mLCAic2luZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc2luZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9TSU5MQAorIyBpZiAhQEhBVkVfU0lOTEAgfHwgIUBIQVZFX0RFQ0xfU0lOTEAKKyMgIHVuZGVmIHNpbmwKK19HTF9GVU5DREVDTF9TWVMgKHNpbmwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc2lubCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChzaW5sKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc2lubAorIyBpZiBIQVZFX1JBV19ERUNMX1NJTkwKK19HTF9XQVJOX09OX1VTRSAoc2lubCwgInNpbmwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHNpbmwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9TSU5IRkAKKyMgaWYgIUBIQVZFX1NJTkhGQAorIyAgdW5kZWYgc2luaGYKK19HTF9GVU5DREVDTF9TWVMgKHNpbmhmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHNpbmhmLCBmbG9hdCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKHNpbmhmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc2luaGYKKyMgaWYgSEFWRV9SQVdfREVDTF9TSU5IRgorX0dMX1dBUk5fT05fVVNFIChzaW5oZiwgInNpbmhmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzaW5oZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX1NRUlRGQAorIyBpZiAhQEhBVkVfU1FSVEZACisjICB1bmRlZiBzcXJ0ZgorX0dMX0ZVTkNERUNMX1NZUyAoc3FydGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc3FydGYsIGZsb2F0LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAoc3FydGYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzcXJ0ZgorIyBpZiBIQVZFX1JBV19ERUNMX1NRUlRGCitfR0xfV0FSTl9PTl9VU0UgKHNxcnRmLCAic3FydGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHNxcnRmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX1NRUlRMQAorIyBpZiBAUkVQTEFDRV9TUVJUTEAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgc3FydGwKKyMgICBkZWZpbmUgc3FydGwgcnBsX3NxcnRsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc3FydGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAoc3FydGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfU1FSVExAIHx8ICFASEFWRV9ERUNMX1NRUlRMQAorIyAgIHVuZGVmIHNxcnRsCitfR0xfRlVOQ0RFQ0xfU1lTIChzcXJ0bCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc3FydGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoc3FydGwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzcXJ0bAorIyBpZiBIQVZFX1JBV19ERUNMX1NRUlRMCitfR0xfV0FSTl9PTl9VU0UgKHNxcnRsLCAic3FydGwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHNxcnRsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfVEFORkAKKyMgaWYgIUBIQVZFX1RBTkZACisjICB1bmRlZiB0YW5mCitfR0xfRlVOQ0RFQ0xfU1lTICh0YW5mLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHRhbmYsIGZsb2F0LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAodGFuZik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHRhbmYKKyMgaWYgSEFWRV9SQVdfREVDTF9UQU5GCitfR0xfV0FSTl9PTl9VU0UgKHRhbmYsICJ0YW5mIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB0YW5mIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX1RBTkxACisjIGlmICFASEFWRV9UQU5MQCB8fCAhQEhBVkVfREVDTF9UQU5MQAorIyAgdW5kZWYgdGFubAorX0dMX0ZVTkNERUNMX1NZUyAodGFubCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh0YW5sLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKHRhbmwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB0YW5sCisjIGlmIEhBVkVfUkFXX0RFQ0xfVEFOTAorX0dMX1dBUk5fT05fVVNFICh0YW5sLCAidGFubCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgdGFubCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX1RBTkhGQAorIyBpZiAhQEhBVkVfVEFOSEZACisjICB1bmRlZiB0YW5oZgorX0dMX0ZVTkNERUNMX1NZUyAodGFuaGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAodGFuaGYsIGZsb2F0LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAodGFuaGYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB0YW5oZgorIyBpZiBIQVZFX1JBV19ERUNMX1RBTkhGCitfR0xfV0FSTl9PTl9VU0UgKHRhbmhmLCAidGFuaGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHRhbmhmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfVFJVTkNGQAorIyBpZiBAUkVQTEFDRV9UUlVOQ0ZACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSB0cnVuY2YgcnBsX3RydW5jZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHRydW5jZiwgZmxvYXQsIChmbG9hdCB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMICh0cnVuY2YsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfREVDTF9UUlVOQ0ZACitfR0xfRlVOQ0RFQ0xfU1lTICh0cnVuY2YsIGZsb2F0LCAoZmxvYXQgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHRydW5jZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOICh0cnVuY2YpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB0cnVuY2YKKyMgaWYgSEFWRV9SQVdfREVDTF9UUlVOQ0YKK19HTF9XQVJOX09OX1VTRSAodHJ1bmNmLCAidHJ1bmNmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB0cnVuY2YgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfVFJVTkNACisjIGlmIEBSRVBMQUNFX1RSVU5DQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgdHJ1bmMgcnBsX3RydW5jCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAodHJ1bmMsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMICh0cnVuYywgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0RFQ0xfVFJVTkNACitfR0xfRlVOQ0RFQ0xfU1lTICh0cnVuYywgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh0cnVuYywgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHRydW5jKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgdHJ1bmMKKyMgaWYgSEFWRV9SQVdfREVDTF9UUlVOQworX0dMX1dBUk5fT05fVVNFICh0cnVuYywgInRydW5jIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB0cnVuYyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9UUlVOQ0xACisjIGlmIEBSRVBMQUNFX1RSVU5DTEAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgdHJ1bmNsCisjICAgZGVmaW5lIHRydW5jbCBycGxfdHJ1bmNsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAodHJ1bmNsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKHRydW5jbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9ERUNMX1RSVU5DTEAKK19HTF9GVU5DREVDTF9TWVMgKHRydW5jbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAodHJ1bmNsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHRydW5jbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHRydW5jbAorIyBpZiBIQVZFX1JBV19ERUNMX1RSVU5DTAorX0dMX1dBUk5fT05fVVNFICh0cnVuY2wsICJ0cnVuY2wgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHRydW5jbCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIERlZmluaXRpb25zIG9mIGZ1bmN0aW9uLWxpa2UgbWFjcm9zIGNvbWUgaGVyZSwgYWZ0ZXIgdGhlIGZ1bmN0aW9uCisgICBkZWNsYXJhdGlvbnMuICAqLworCisKKyNpZiBAR05VTElCX0lTRklOSVRFQAorIyBpZiBAUkVQTEFDRV9JU0ZJTklURUAKK19HTF9FWFRFUk5fQyBpbnQgZ2xfaXNmaW5pdGVmIChmbG9hdCB4KTsKK19HTF9FWFRFUk5fQyBpbnQgZ2xfaXNmaW5pdGVkIChkb3VibGUgeCk7CitfR0xfRVhURVJOX0MgaW50IGdsX2lzZmluaXRlbCAobG9uZyBkb3VibGUgeCk7CisjICB1bmRlZiBpc2Zpbml0ZQorIyAgZGVmaW5lIGlzZmluaXRlKHgpIFwKKyAgIChzaXplb2YgKHgpID09IHNpemVvZiAobG9uZyBkb3VibGUpID8gZ2xfaXNmaW5pdGVsICh4KSA6IFwKKyAgICBzaXplb2YgKHgpID09IHNpemVvZiAoZG91YmxlKSA/IGdsX2lzZmluaXRlZCAoeCkgOiBcCisgICAgZ2xfaXNmaW5pdGVmICh4KSkKKyMgZW5kaWYKKyMgaWZkZWYgX19jcGx1c3BsdXMKKyMgIGlmZGVmIGlzZmluaXRlCitfR0xfTUFUSF9DWFhfUkVBTF9GTE9BVElOR19ERUNMXzEgKGlzZmluaXRlKQorIyAgIHVuZGVmIGlzZmluaXRlCitfR0xfTUFUSF9DWFhfUkVBTF9GTE9BVElOR19ERUNMXzIgKGlzZmluaXRlKQorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgaWYgZGVmaW5lZCBpc2Zpbml0ZQorX0dMX1dBUk5fUkVBTF9GTE9BVElOR19ERUNMIChpc2Zpbml0ZSk7CisjICB1bmRlZiBpc2Zpbml0ZQorIyAgZGVmaW5lIGlzZmluaXRlKHgpIF9HTF9XQVJOX1JFQUxfRkxPQVRJTkdfSU1QTCAoaXNmaW5pdGUsIHgpCisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9JU0lORkAKKyMgaWYgQFJFUExBQ0VfSVNJTkZACitfR0xfRVhURVJOX0MgaW50IGdsX2lzaW5mZiAoZmxvYXQgeCk7CitfR0xfRVhURVJOX0MgaW50IGdsX2lzaW5mZCAoZG91YmxlIHgpOworX0dMX0VYVEVSTl9DIGludCBnbF9pc2luZmwgKGxvbmcgZG91YmxlIHgpOworIyAgdW5kZWYgaXNpbmYKKyMgIGRlZmluZSBpc2luZih4KSBcCisgICAoc2l6ZW9mICh4KSA9PSBzaXplb2YgKGxvbmcgZG91YmxlKSA/IGdsX2lzaW5mbCAoeCkgOiBcCisgICAgc2l6ZW9mICh4KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBnbF9pc2luZmQgKHgpIDogXAorICAgIGdsX2lzaW5mZiAoeCkpCisjIGVuZGlmCisjIGlmZGVmIF9fY3BsdXNwbHVzCisjICBpZmRlZiBpc2luZgorX0dMX01BVEhfQ1hYX1JFQUxfRkxPQVRJTkdfREVDTF8xIChpc2luZikKKyMgICB1bmRlZiBpc2luZgorX0dMX01BVEhfQ1hYX1JFQUxfRkxPQVRJTkdfREVDTF8yIChpc2luZikKKyMgIGVuZGlmCisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIGlmIGRlZmluZWQgaXNpbmYKK19HTF9XQVJOX1JFQUxfRkxPQVRJTkdfREVDTCAoaXNpbmYpOworIyAgdW5kZWYgaXNpbmYKKyMgIGRlZmluZSBpc2luZih4KSBfR0xfV0FSTl9SRUFMX0ZMT0FUSU5HX0lNUEwgKGlzaW5mLCB4KQorIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfSVNOQU5GQAorLyogVGVzdCBmb3IgTmFOIGZvciAnZmxvYXQnIG51bWJlcnMuICAqLworIyBpZiBASEFWRV9JU05BTkZACisvKiBUaGUgb3JpZ2luYWwgPG1hdGguaD4gaW5jbHVkZWQgYWJvdmUgcHJvdmlkZXMgYSBkZWNsYXJhdGlvbiBvZiBpc25hbiBtYWNybworICAgb3IgKG9sZGVyKSBpc25hbmYgZnVuY3Rpb24uICAqLworIyAgaWYgX19HTlVDX18gPj0gNAorICAgIC8qIEdDQyA0LjAgYW5kIG5ld2VyIHByb3ZpZGVzIHRocmVlIGJ1aWx0LWlucyBmb3IgaXNuYW4uICAqLworIyAgIHVuZGVmIGlzbmFuZgorIyAgIGRlZmluZSBpc25hbmYoeCkgX19idWlsdGluX2lzbmFuZiAoKGZsb2F0KSh4KSkKKyMgIGVsaWYgZGVmaW5lZCBpc25hbgorIyAgIHVuZGVmIGlzbmFuZgorIyAgIGRlZmluZSBpc25hbmYoeCkgaXNuYW4gKChmbG9hdCkoeCkpCisjICBlbmRpZgorIyBlbHNlCisvKiBUZXN0IHdoZXRoZXIgWCBpcyBhIE5hTi4gICovCisjICB1bmRlZiBpc25hbmYKKyMgIGRlZmluZSBpc25hbmYgcnBsX2lzbmFuZgorX0dMX0VYVEVSTl9DIGludCBpc25hbmYgKGZsb2F0IHgpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX0lTTkFOREAKKy8qIFRlc3QgZm9yIE5hTiBmb3IgJ2RvdWJsZScgbnVtYmVycy4KKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBnbnVsaWIgZXh0ZW5zaW9uLCB1bmxpa2UgaXNuYW4oKSB3aGljaCBhcHBsaWVkIG9ubHkKKyAgIHRvICdkb3VibGUnIG51bWJlcnMgZWFybGllciBidXQgbm93IGlzIGEgdHlwZS1nZW5lcmljIG1hY3JvLiAgKi8KKyMgaWYgQEhBVkVfSVNOQU5EQAorLyogVGhlIG9yaWdpbmFsIDxtYXRoLmg+IGluY2x1ZGVkIGFib3ZlIHByb3ZpZGVzIGEgZGVjbGFyYXRpb24gb2YgaXNuYW4KKyAgIG1hY3JvLiAgKi8KKyMgIGlmIF9fR05VQ19fID49IDQKKyAgICAvKiBHQ0MgNC4wIGFuZCBuZXdlciBwcm92aWRlcyB0aHJlZSBidWlsdC1pbnMgZm9yIGlzbmFuLiAgKi8KKyMgICB1bmRlZiBpc25hbmQKKyMgICBkZWZpbmUgaXNuYW5kKHgpIF9fYnVpbHRpbl9pc25hbiAoKGRvdWJsZSkoeCkpCisjICBlbHNlCisjICAgdW5kZWYgaXNuYW5kCisjICAgZGVmaW5lIGlzbmFuZCh4KSBpc25hbiAoKGRvdWJsZSkoeCkpCisjICBlbmRpZgorIyBlbHNlCisvKiBUZXN0IHdoZXRoZXIgWCBpcyBhIE5hTi4gICovCisjICB1bmRlZiBpc25hbmQKKyMgIGRlZmluZSBpc25hbmQgcnBsX2lzbmFuZAorX0dMX0VYVEVSTl9DIGludCBpc25hbmQgKGRvdWJsZSB4KTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9JU05BTkxACisvKiBUZXN0IGZvciBOYU4gZm9yICdsb25nIGRvdWJsZScgbnVtYmVycy4gICovCisjIGlmIEBIQVZFX0lTTkFOTEAKKy8qIFRoZSBvcmlnaW5hbCA8bWF0aC5oPiBpbmNsdWRlZCBhYm92ZSBwcm92aWRlcyBhIGRlY2xhcmF0aW9uIG9mIGlzbmFuCisgICBtYWNybyBvciAob2xkZXIpIGlzbmFubCBmdW5jdGlvbi4gICovCisjICBpZiBfX0dOVUNfXyA+PSA0CisgICAgLyogR0NDIDQuMCBhbmQgbmV3ZXIgcHJvdmlkZXMgdGhyZWUgYnVpbHQtaW5zIGZvciBpc25hbi4gICovCisjICAgdW5kZWYgaXNuYW5sCisjICAgZGVmaW5lIGlzbmFubCh4KSBfX2J1aWx0aW5faXNuYW5sICgobG9uZyBkb3VibGUpKHgpKQorIyAgZWxpZiBkZWZpbmVkIGlzbmFuCisjICAgdW5kZWYgaXNuYW5sCisjICAgZGVmaW5lIGlzbmFubCh4KSBpc25hbiAoKGxvbmcgZG91YmxlKSh4KSkKKyMgIGVuZGlmCisjIGVsc2UKKy8qIFRlc3Qgd2hldGhlciBYIGlzIGEgTmFOLiAgKi8KKyMgIHVuZGVmIGlzbmFubAorIyAgZGVmaW5lIGlzbmFubCBycGxfaXNuYW5sCitfR0xfRVhURVJOX0MgaW50IGlzbmFubCAobG9uZyBkb3VibGUgeCkgX0dMX0FUVFJJQlVURV9DT05TVDsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBUaGlzIG11c3QgY29tZSAqYWZ0ZXIqIHRoZSBzbmlwcGV0cyBmb3IgR05VTElCX0lTTkFORiBhbmQgR05VTElCX0lTTkFOTCEgICovCisjaWYgQEdOVUxJQl9JU05BTkAKKyMgaWYgQFJFUExBQ0VfSVNOQU5ACisvKiBXZSBjYW4ndCBqdXN0IHVzZSB0aGUgaXNuYW5mIG1hY3JvIChlLmcuKSBhcyBleHBvc2VkIGJ5CisgICBpc25hbmYuaCAoZS5nLikgaGVyZSwgYmVjYXVzZSB0aG9zZSBtYXkgZW5kIHVwIGJlaW5nIG1hY3JvcworICAgdGhhdCByZWN1cnNpdmVseSBleHBhbmQgYmFjayB0byBpc25hbi4gIFNvIHVzZSB0aGUgZ251bGliCisgICByZXBsYWNlbWVudHMgZm9yIHRoZW0gZGlyZWN0bHkuICovCisjICBpZiBASEFWRV9JU05BTkZAICYmIF9fR05VQ19fID49IDQKKyMgICBkZWZpbmUgZ2xfaXNuYW5fZih4KSBfX2J1aWx0aW5faXNuYW5mICgoZmxvYXQpKHgpKQorIyAgZWxzZQorX0dMX0VYVEVSTl9DIGludCBycGxfaXNuYW5mIChmbG9hdCB4KTsKKyMgICBkZWZpbmUgZ2xfaXNuYW5fZih4KSBycGxfaXNuYW5mICh4KQorIyAgZW5kaWYKKyMgIGlmIEBIQVZFX0lTTkFOREAgJiYgX19HTlVDX18gPj0gNAorIyAgIGRlZmluZSBnbF9pc25hbl9kKHgpIF9fYnVpbHRpbl9pc25hbiAoKGRvdWJsZSkoeCkpCisjICBlbHNlCitfR0xfRVhURVJOX0MgaW50IHJwbF9pc25hbmQgKGRvdWJsZSB4KTsKKyMgICBkZWZpbmUgZ2xfaXNuYW5fZCh4KSBycGxfaXNuYW5kICh4KQorIyAgZW5kaWYKKyMgIGlmIEBIQVZFX0lTTkFOTEAgJiYgX19HTlVDX18gPj0gNAorIyAgIGRlZmluZSBnbF9pc25hbl9sKHgpIF9fYnVpbHRpbl9pc25hbmwgKChsb25nIGRvdWJsZSkoeCkpCisjICBlbHNlCitfR0xfRVhURVJOX0MgaW50IHJwbF9pc25hbmwgKGxvbmcgZG91YmxlIHgpIF9HTF9BVFRSSUJVVEVfQ09OU1Q7CisjICAgZGVmaW5lIGdsX2lzbmFuX2woeCkgcnBsX2lzbmFubCAoeCkKKyMgIGVuZGlmCisjICB1bmRlZiBpc25hbgorIyAgZGVmaW5lIGlzbmFuKHgpIFwKKyAgIChzaXplb2YgKHgpID09IHNpemVvZiAobG9uZyBkb3VibGUpID8gZ2xfaXNuYW5fbCAoeCkgOiBcCisgICAgc2l6ZW9mICh4KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBnbF9pc25hbl9kICh4KSA6IFwKKyAgICBnbF9pc25hbl9mICh4KSkKKyMgZWxpZiBfX0dOVUNfXyA+PSA0CisjICB1bmRlZiBpc25hbgorIyAgZGVmaW5lIGlzbmFuKHgpIFwKKyAgIChzaXplb2YgKHgpID09IHNpemVvZiAobG9uZyBkb3VibGUpID8gX19idWlsdGluX2lzbmFubCAoKGxvbmcgZG91YmxlKSh4KSkgOiBcCisgICAgc2l6ZW9mICh4KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2J1aWx0aW5faXNuYW4gKChkb3VibGUpKHgpKSA6IFwKKyAgICBfX2J1aWx0aW5faXNuYW5mICgoZmxvYXQpKHgpKSkKKyMgZW5kaWYKKyMgaWZkZWYgX19jcGx1c3BsdXMKKyMgIGlmZGVmIGlzbmFuCitfR0xfTUFUSF9DWFhfUkVBTF9GTE9BVElOR19ERUNMXzEgKGlzbmFuKQorIyAgIHVuZGVmIGlzbmFuCitfR0xfTUFUSF9DWFhfUkVBTF9GTE9BVElOR19ERUNMXzIgKGlzbmFuKQorIyAgZW5kaWYKKyMgZWxzZQorLyogRW5zdXJlIGlzbmFuIGlzIGEgbWFjcm8uICAqLworIyAgaWZuZGVmIGlzbmFuCisjICAgZGVmaW5lIGlzbmFuIGlzbmFuCisjICBlbmRpZgorIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyBpZiBkZWZpbmVkIGlzbmFuCitfR0xfV0FSTl9SRUFMX0ZMT0FUSU5HX0RFQ0wgKGlzbmFuKTsKKyMgIHVuZGVmIGlzbmFuCisjICBkZWZpbmUgaXNuYW4oeCkgX0dMX1dBUk5fUkVBTF9GTE9BVElOR19JTVBMIChpc25hbiwgeCkKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX1NJR05CSVRACisjIGlmIEBSRVBMQUNFX1NJR05CSVRfVVNJTkdfR0NDQAorIyAgdW5kZWYgc2lnbmJpdAorICAgLyogR0NDIDQuMCBhbmQgbmV3ZXIgcHJvdmlkZXMgdGhyZWUgYnVpbHQtaW5zIGZvciBzaWduYml0LiAgKi8KKyMgIGRlZmluZSBzaWduYml0KHgpIFwKKyAgIChzaXplb2YgKHgpID09IHNpemVvZiAobG9uZyBkb3VibGUpID8gX19idWlsdGluX3NpZ25iaXRsICh4KSA6IFwKKyAgICBzaXplb2YgKHgpID09IHNpemVvZiAoZG91YmxlKSA/IF9fYnVpbHRpbl9zaWduYml0ICh4KSA6IFwKKyAgICBfX2J1aWx0aW5fc2lnbmJpdGYgKHgpKQorIyBlbmRpZgorIyBpZiBAUkVQTEFDRV9TSUdOQklUQAorIyAgdW5kZWYgc2lnbmJpdAorX0dMX0VYVEVSTl9DIGludCBnbF9zaWduYml0ZiAoZmxvYXQgYXJnKTsKK19HTF9FWFRFUk5fQyBpbnQgZ2xfc2lnbmJpdGQgKGRvdWJsZSBhcmcpOworX0dMX0VYVEVSTl9DIGludCBnbF9zaWduYml0bCAobG9uZyBkb3VibGUgYXJnKTsKKyMgIGlmIF9fR05VQ19fID49IDIgJiYgIWRlZmluZWQgX19TVFJJQ1RfQU5TSV9fCisjICAgZGVmaW5lIF9HTF9OVU1fVUlOVF9XT1JEUyh0eXBlKSBcCisgICAgICAoKHNpemVvZiAodHlwZSkgKyBzaXplb2YgKHVuc2lnbmVkIGludCkgLSAxKSAvIHNpemVvZiAodW5zaWduZWQgaW50KSkKKyMgICBpZiBkZWZpbmVkIEZMVF9TSUdOQklUX1dPUkQgJiYgZGVmaW5lZCBGTFRfU0lHTkJJVF9CSVQgJiYgIWRlZmluZWQgZ2xfc2lnbmJpdGYKKyMgICAgZGVmaW5lIGdsX3NpZ25iaXRmX09QVElNSVpFRF9NQUNSTworIyAgICBkZWZpbmUgZ2xfc2lnbmJpdGYoYXJnKSBcCisgICAgICAgKHsgdW5pb24geyBmbG9hdCBfdmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX3dvcmRbX0dMX05VTV9VSU5UX1dPUkRTIChmbG9hdCldOyAgICAgICBcCisgICAgICAgICAgICAgICAgfSBfbTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgX20uX3ZhbHVlID0gKGFyZyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKF9tLl93b3JkW0ZMVF9TSUdOQklUX1dPUkRdID4+IEZMVF9TSUdOQklUX0JJVCkgJiAxOyAgICAgICAgICBcCisgICAgICAgIH0pCisjICAgZW5kaWYKKyMgICBpZiBkZWZpbmVkIERCTF9TSUdOQklUX1dPUkQgJiYgZGVmaW5lZCBEQkxfU0lHTkJJVF9CSVQgJiYgIWRlZmluZWQgZ2xfc2lnbmJpdGQKKyMgICAgZGVmaW5lIGdsX3NpZ25iaXRkX09QVElNSVpFRF9NQUNSTworIyAgICBkZWZpbmUgZ2xfc2lnbmJpdGQoYXJnKSBcCisgICAgICAgKHsgdW5pb24geyBkb3VibGUgX3ZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX3dvcmRbX0dMX05VTV9VSU5UX1dPUkRTIChkb3VibGUpXTsgICAgICBcCisgICAgICAgICAgICAgICAgfSBfbTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgX20uX3ZhbHVlID0gKGFyZyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKF9tLl93b3JkW0RCTF9TSUdOQklUX1dPUkRdID4+IERCTF9TSUdOQklUX0JJVCkgJiAxOyAgICAgICAgICBcCisgICAgICAgIH0pCisjICAgZW5kaWYKKyMgICBpZiBkZWZpbmVkIExEQkxfU0lHTkJJVF9XT1JEICYmIGRlZmluZWQgTERCTF9TSUdOQklUX0JJVCAmJiAhZGVmaW5lZCBnbF9zaWduYml0bAorIyAgICBkZWZpbmUgZ2xfc2lnbmJpdGxfT1BUSU1JWkVEX01BQ1JPCisjICAgIGRlZmluZSBnbF9zaWduYml0bChhcmcpIFwKKyAgICAgICAoeyB1bmlvbiB7IGxvbmcgZG91YmxlIF92YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfd29yZFtfR0xfTlVNX1VJTlRfV09SRFMgKGxvbmcgZG91YmxlKV07IFwKKyAgICAgICAgICAgICAgICB9IF9tOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBfbS5fdmFsdWUgPSAoYXJnKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoX20uX3dvcmRbTERCTF9TSUdOQklUX1dPUkRdID4+IExEQkxfU0lHTkJJVF9CSVQpICYgMTsgICAgICAgIFwKKyAgICAgICAgfSkKKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgIGRlZmluZSBzaWduYml0KHgpIFwKKyAgIChzaXplb2YgKHgpID09IHNpemVvZiAobG9uZyBkb3VibGUpID8gZ2xfc2lnbmJpdGwgKHgpIDogXAorICAgIHNpemVvZiAoeCkgPT0gc2l6ZW9mIChkb3VibGUpID8gZ2xfc2lnbmJpdGQgKHgpIDogXAorICAgIGdsX3NpZ25iaXRmICh4KSkKKyMgZW5kaWYKKyMgaWZkZWYgX19jcGx1c3BsdXMKKyMgIGlmZGVmIHNpZ25iaXQKK19HTF9NQVRIX0NYWF9SRUFMX0ZMT0FUSU5HX0RFQ0xfMSAoc2lnbmJpdCkKKyMgICB1bmRlZiBzaWduYml0CitfR0xfTUFUSF9DWFhfUkVBTF9GTE9BVElOR19ERUNMXzIgKHNpZ25iaXQpCisjICBlbmRpZgorIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyBpZiBkZWZpbmVkIHNpZ25iaXQKK19HTF9XQVJOX1JFQUxfRkxPQVRJTkdfREVDTCAoc2lnbmJpdCk7CisjICB1bmRlZiBzaWduYml0CisjICBkZWZpbmUgc2lnbmJpdCh4KSBfR0xfV0FSTl9SRUFMX0ZMT0FUSU5HX0lNUEwgKHNpZ25iaXQsIHgpCisjIGVuZGlmCisjZW5kaWYKKworX0dMX0lOTElORV9IRUFERVJfRU5ECisKKyNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfTUFUSF9IICovCisjZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX01BVEhfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL21iY2hhci5jIGIvbGliL21iY2hhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMzcyYTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbWJjaGFyLmMKQEAgLTAsMCArMSwzNyBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjZGVmaW5lIE1CQ0hBUl9JTkxJTkUgX0dMX0VYVEVSTl9JTkxJTkUKKworI2luY2x1ZGUgPGxpbWl0cy5oPgorCisjaW5jbHVkZSAibWJjaGFyLmgiCisKKyNpZiBJU19CQVNJQ19BU0NJSQorCisvKiBCaXQgdGFibGUgb2YgY2hhcmFjdGVycyBpbiB0aGUgSVNPIEMgImJhc2ljIGNoYXJhY3RlciBzZXQiLiAgKi8KK2NvbnN0IHVuc2lnbmVkIGludCBpc19iYXNpY190YWJsZSBbVUNIQVJfTUFYIC8gMzIgKyAxXSA9Cit7CisgIDB4MDAwMDFhMDAsICAgICAgICAgICAvKiAnXHQnICdcdicgJ1xmJyAqLworICAweGZmZmZmZmVmLCAgICAgICAgICAgLyogJyAnLi4uJyMnICclJy4uLic/JyAqLworICAweGZmZmZmZmZlLCAgICAgICAgICAgLyogJ0EnLi4uJ1onICdbJyAnXFwnICddJyAnXicgJ18nICovCisgIDB4N2ZmZmZmZmUgICAgICAgICAgICAvKiAnYScuLi4neicgJ3snICd8JyAnfScgJ34nICovCisgIC8qIFRoZSByZW1haW5pbmcgYml0cyBhcmUgMC4gICovCit9OworCisjZW5kaWYgLyogSVNfQkFTSUNfQVNDSUkgKi8KZGlmZiAtLWdpdCBhL2xpYi9tYmNoYXIuaCBiL2xpYi9tYmNoYXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDFmNzQzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL21iY2hhci5oCkBAIC0wLDAgKzEsMzU3IEBACisvKiBNdWx0aWJ5dGUgY2hhcmFjdGVyIGRhdGEgdHlwZS4KKyAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwNS0yMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LiAgKi8KKworLyogQSBtdWx0aWJ5dGUgY2hhcmFjdGVyIGlzIGEgc2hvcnQgc3Vic2VxdWVuY2Ugb2YgYSBjaGFyKiBzdHJpbmcsCisgICByZXByZXNlbnRpbmcgYSBzaW5nbGUgd2lkZSBjaGFyYWN0ZXIuCisKKyAgIFdlIHVzZSBtdWx0aWJ5dGUgY2hhcmFjdGVycyBpbnN0ZWFkIG9mIHdpZGUgY2hhcmFjdGVycyBiZWNhdXNlIG9mCisgICB0aGUgZm9sbG93aW5nIGdvYWxzOgorICAgMSkgY29ycmVjdCBtdWx0aWJ5dGUgaGFuZGxpbmcsIGkuZS4gb3BlcmF0ZSBhY2NvcmRpbmcgdG8gdGhlIExDX0NUWVBFCisgICAgICBsb2NhbGUsCisgICAyKSBlYXNlIG9mIG1haW50ZW5hbmNlLCBpLmUuIHRoZSBtYWludGFpbmVyIG5lZWRzIG5vdCBrbm93IGFsbCBkZXRhaWxzCisgICAgICBvZiB0aGUgSVNPIEMgOTkgc3RhbmRhcmQsCisgICAzKSBkb24ndCBmYWlsIGdyb3NzbHkgaWYgdGhlIGlucHV0IGlzIG5vdCBpbiB0aGUgZW5jb2Rpbmcgc2V0IGJ5IHRoZQorICAgICAgbG9jYWxlLCBiZWNhdXNlIG9mdGVuIGRpZmZlcmVudCBlbmNvZGluZ3MgYXJlIGluIHVzZSBpbiB0aGUgc2FtZQorICAgICAgY291bnRyaWVzIChJU08tODg1OS0xL1VURi04LCBFVUMtSlAvU2hpZnRfSklTLCAuLi4pLAorICAgNCkgZmFzdCBpbiB0aGUgY2FzZSBvZiBBU0NJSSBjaGFyYWN0ZXJzLAorICAgNSkgcG9ydGFiaWxpdHksIGkuZS4gZG9uJ3QgbWFrZSB1bnBvcnRhYmxlIGFzc3VtcHRpb25zIGFib3V0IHdjaGFyX3QuCisKKyAgIE11bHRpYnl0ZSBjaGFyYWN0ZXJzIGFyZSBvbmx5IGFjY2Vzc2VkIHRocm91Z2ggdGhlIG1iKiBtYWNyb3MuCisKKyAgIG1iX3B0ciAobWJjKQorICAgICByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG11bHRpYnl0ZSBzZXF1ZW5jZS4KKworICAgbWJfbGVuIChtYmMpCisgICAgIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBvY2N1cGllZCBieSB0aGUgbXVsdGlieXRlIHNlcXVlbmNlLgorICAgICBBbHdheXMgPiAwLgorCisgICBtYl9pc2VxIChtYmMsIHNjKQorICAgICByZXR1cm5zIHRydWUgaWYgbWJjIGlzIHRoZSBzdGFuZGFyZCBBU0NJSSBjaGFyYWN0ZXIgc2MuCisKKyAgIG1iX2lzbnVsIChtYmMpCisgICAgIHJldHVybnMgdHJ1ZSBpZiBtYmMgaXMgdGhlIG51bCBjaGFyYWN0ZXIuCisKKyAgIG1iX2NtcCAobWJjMSwgbWJjMikKKyAgICAgcmV0dXJucyBhIHBvc2l0aXZlLCB6ZXJvLCBvciBuZWdhdGl2ZSB2YWx1ZSBkZXBlbmRpbmcgb24gd2hldGhlciBtYmMxCisgICAgIHNvcnRzIGFmdGVyLCBzYW1lIG9yIGJlZm9yZSBtYmMyLgorCisgICBtYl9jYXNlY21wIChtYmMxLCBtYmMyKQorICAgICByZXR1cm5zIGEgcG9zaXRpdmUsIHplcm8sIG9yIG5lZ2F0aXZlIHZhbHVlIGRlcGVuZGluZyBvbiB3aGV0aGVyIG1iYzEKKyAgICAgc29ydHMgYWZ0ZXIsIHNhbWUgb3IgYmVmb3JlIG1iYzIsIG1vZHVsbyB1cHBlci9sb3dlcmNhc2UgY29udmVyc2lvbi4KKworICAgbWJfZXF1YWwgKG1iYzEsIG1iYzIpCisgICAgIHJldHVybnMgdHJ1ZSBpZiBtYmMxIGFuZCBtYmMyIGFyZSBlcXVhbC4KKworICAgbWJfY2FzZWVxdWFsIChtYmMxLCBtYmMyKQorICAgICByZXR1cm5zIHRydWUgaWYgbWJjMSBhbmQgbWJjMiBhcmUgZXF1YWwgbW9kdWxvIHVwcGVyL2xvd2VyY2FzZSBjb252ZXJzaW9uLgorCisgICBtYl9pc2FsbnVtIChtYmMpCisgICAgIHJldHVybnMgdHJ1ZSBpZiBtYmMgaXMgYWxwaGFudW1lcmljLgorCisgICBtYl9pc2FscGhhIChtYmMpCisgICAgIHJldHVybnMgdHJ1ZSBpZiBtYmMgaXMgYWxwaGFiZXRpYy4KKworICAgbWJfaXNhc2NpaShtYmMpCisgICAgIHJldHVybnMgdHJ1ZSBpZiBtYmMgaXMgcGxhaW4gQVNDSUkuCisKKyAgIG1iX2lzYmxhbmsgKG1iYykKKyAgICAgcmV0dXJucyB0cnVlIGlmIG1iYyBpcyBhIGJsYW5rLgorCisgICBtYl9pc2NudHJsIChtYmMpCisgICAgIHJldHVybnMgdHJ1ZSBpZiBtYmMgaXMgYSBjb250cm9sIGNoYXJhY3Rlci4KKworICAgbWJfaXNkaWdpdCAobWJjKQorICAgICByZXR1cm5zIHRydWUgaWYgbWJjIGlzIGEgZGVjaW1hbCBkaWdpdC4KKworICAgbWJfaXNncmFwaCAobWJjKQorICAgICByZXR1cm5zIHRydWUgaWYgbWJjIGlzIGEgZ3JhcGhpYyBjaGFyYWN0ZXIuCisKKyAgIG1iX2lzbG93ZXIgKG1iYykKKyAgICAgcmV0dXJucyB0cnVlIGlmIG1iYyBpcyBsb3dlcmNhc2UuCisKKyAgIG1iX2lzcHJpbnQgKG1iYykKKyAgICAgcmV0dXJucyB0cnVlIGlmIG1iYyBpcyBhIHByaW50YWJsZSBjaGFyYWN0ZXIuCisKKyAgIG1iX2lzcHVuY3QgKG1iYykKKyAgICAgcmV0dXJucyB0cnVlIGlmIG1iYyBpcyBhIHB1bmN0dWF0aW9uIGNoYXJhY3Rlci4KKworICAgbWJfaXNzcGFjZSAobWJjKQorICAgICByZXR1cm5zIHRydWUgaWYgbWJjIGlzIGEgc3BhY2UgY2hhcmFjdGVyLgorCisgICBtYl9pc3VwcGVyIChtYmMpCisgICAgIHJldHVybnMgdHJ1ZSBpZiBtYmMgaXMgdXBwZXJjYXNlLgorCisgICBtYl9pc3hkaWdpdCAobWJjKQorICAgICByZXR1cm5zIHRydWUgaWYgbWJjIGlzIGEgaGV4YWRlY2ltYWwgZGlnaXQuCisKKyAgIG1iX3dpZHRoIChtYmMpCisgICAgIHJldHVybnMgdGhlIG51bWJlciBvZiBjb2x1bW5zIG9uIHRoZSBvdXRwdXQgZGV2aWNlIG9jY3VwaWVkIGJ5IG1iYy4KKyAgICAgQWx3YXlzID49IDAuCisKKyAgIG1iX3B1dGMgKG1iYywgc3RyZWFtKQorICAgICBvdXRwdXRzIG1iYyBvbiBzdHJlYW0sIGEgYnl0ZSBvcmllbnRlZCBGSUxFIHN0cmVhbSBvcGVuZWQgZm9yIG91dHB1dC4KKworICAgbWJfc2V0YXNjaWkgKCZtYmMsIHNjKQorICAgICBhc3NpZ25zIHRoZSBzdGFuZGFyZCBBU0NJSSBjaGFyYWN0ZXIgc2MgdG8gbWJjLgorCisgICBtYl9jb3B5ICgmZGVzdG1iYywgJnNyY21iYykKKyAgICAgY29waWVzIHNyY21iYyB0byBkZXN0bWJjLgorCisgICBIZXJlIGFyZSB0aGUgZnVuY3Rpb24gcHJvdG90eXBlcyBvZiB0aGUgbWFjcm9zLgorCisgICBleHRlcm4gY29uc3QgY2hhciAqICBtYl9wdHIgKGNvbnN0IG1iY2hhcl90IG1iYyk7CisgICBleHRlcm4gc2l6ZV90ICAgICAgICBtYl9sZW4gKGNvbnN0IG1iY2hhcl90IG1iYyk7CisgICBleHRlcm4gYm9vbCAgICAgICAgICBtYl9pc2VxIChjb25zdCBtYmNoYXJfdCBtYmMsIGNoYXIgc2MpOworICAgZXh0ZXJuIGJvb2wgICAgICAgICAgbWJfaXNudWwgKGNvbnN0IG1iY2hhcl90IG1iYyk7CisgICBleHRlcm4gaW50ICAgICAgICAgICBtYl9jbXAgKGNvbnN0IG1iY2hhcl90IG1iYzEsIGNvbnN0IG1iY2hhcl90IG1iYzIpOworICAgZXh0ZXJuIGludCAgICAgICAgICAgbWJfY2FzZWNtcCAoY29uc3QgbWJjaGFyX3QgbWJjMSwgY29uc3QgbWJjaGFyX3QgbWJjMik7CisgICBleHRlcm4gYm9vbCAgICAgICAgICBtYl9lcXVhbCAoY29uc3QgbWJjaGFyX3QgbWJjMSwgY29uc3QgbWJjaGFyX3QgbWJjMik7CisgICBleHRlcm4gYm9vbCAgICAgICAgICBtYl9jYXNlZXF1YWwgKGNvbnN0IG1iY2hhcl90IG1iYzEsIGNvbnN0IG1iY2hhcl90IG1iYzIpOworICAgZXh0ZXJuIGJvb2wgICAgICAgICAgbWJfaXNhbG51bSAoY29uc3QgbWJjaGFyX3QgbWJjKTsKKyAgIGV4dGVybiBib29sICAgICAgICAgIG1iX2lzYWxwaGEgKGNvbnN0IG1iY2hhcl90IG1iYyk7CisgICBleHRlcm4gYm9vbCAgICAgICAgICBtYl9pc2FzY2lpIChjb25zdCBtYmNoYXJfdCBtYmMpOworICAgZXh0ZXJuIGJvb2wgICAgICAgICAgbWJfaXNibGFuayAoY29uc3QgbWJjaGFyX3QgbWJjKTsKKyAgIGV4dGVybiBib29sICAgICAgICAgIG1iX2lzY250cmwgKGNvbnN0IG1iY2hhcl90IG1iYyk7CisgICBleHRlcm4gYm9vbCAgICAgICAgICBtYl9pc2RpZ2l0IChjb25zdCBtYmNoYXJfdCBtYmMpOworICAgZXh0ZXJuIGJvb2wgICAgICAgICAgbWJfaXNncmFwaCAoY29uc3QgbWJjaGFyX3QgbWJjKTsKKyAgIGV4dGVybiBib29sICAgICAgICAgIG1iX2lzbG93ZXIgKGNvbnN0IG1iY2hhcl90IG1iYyk7CisgICBleHRlcm4gYm9vbCAgICAgICAgICBtYl9pc3ByaW50IChjb25zdCBtYmNoYXJfdCBtYmMpOworICAgZXh0ZXJuIGJvb2wgICAgICAgICAgbWJfaXNwdW5jdCAoY29uc3QgbWJjaGFyX3QgbWJjKTsKKyAgIGV4dGVybiBib29sICAgICAgICAgIG1iX2lzc3BhY2UgKGNvbnN0IG1iY2hhcl90IG1iYyk7CisgICBleHRlcm4gYm9vbCAgICAgICAgICBtYl9pc3VwcGVyIChjb25zdCBtYmNoYXJfdCBtYmMpOworICAgZXh0ZXJuIGJvb2wgICAgICAgICAgbWJfaXN4ZGlnaXQgKGNvbnN0IG1iY2hhcl90IG1iYyk7CisgICBleHRlcm4gaW50ICAgICAgICAgICBtYl93aWR0aCAoY29uc3QgbWJjaGFyX3QgbWJjKTsKKyAgIGV4dGVybiB2b2lkICAgICAgICAgIG1iX3B1dGMgKGNvbnN0IG1iY2hhcl90IG1iYywgRklMRSAqc3RyZWFtKTsKKyAgIGV4dGVybiB2b2lkICAgICAgICAgIG1iX3NldGFzY2lpIChtYmNoYXJfdCAqbmV3LCBjaGFyIHNjKTsKKyAgIGV4dGVybiB2b2lkICAgICAgICAgIG1iX2NvcHkgKG1iY2hhcl90ICpuZXcsIGNvbnN0IG1iY2hhcl90ICpvbGQpOworICovCisKKyNpZm5kZWYgX01CQ0hBUl9ICisjZGVmaW5lIF9NQkNIQVJfSCAxCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUKKyAgIDx3Y2hhci5oPi4KKyAgIEJTRC9PUyA0LjEgaGFzIGEgYnVnOiA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlCisgICA8d2NoYXIuaD4uICAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSA8d2N0eXBlLmg+CisKK19HTF9JTkxJTkVfSEVBREVSX0JFR0lOCisjaWZuZGVmIE1CQ0hBUl9JTkxJTkUKKyMgZGVmaW5lIE1CQ0hBUl9JTkxJTkUgX0dMX0lOTElORQorI2VuZGlmCisKKyNkZWZpbmUgTUJDSEFSX0JVRl9TSVpFIDI0CisKK3N0cnVjdCBtYmNoYXIKK3sKKyAgY29uc3QgY2hhciAqcHRyOyAgICAgIC8qIHBvaW50ZXIgdG8gY3VycmVudCBjaGFyYWN0ZXIgKi8KKyAgc2l6ZV90IGJ5dGVzOyAgICAgICAgIC8qIG51bWJlciBvZiBieXRlcyBvZiBjdXJyZW50IGNoYXJhY3RlciwgPiAwICovCisgIGJvb2wgd2NfdmFsaWQ7ICAgICAgICAvKiB0cnVlIGlmIHdjIGlzIGEgdmFsaWQgd2lkZSBjaGFyYWN0ZXIgKi8KKyAgd2NoYXJfdCB3YzsgICAgICAgICAgIC8qIGlmIHdjX3ZhbGlkOiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKi8KKyAgY2hhciBidWZbTUJDSEFSX0JVRl9TSVpFXTsgLyogcm9vbSBmb3IgdGhlIGJ5dGVzLCB1c2VkIGZvciBmaWxlIGlucHV0IG9ubHkgKi8KK307CisKKy8qIEVPRiAobm90IGEgcmVhbCBjaGFyYWN0ZXIpIGlzIHJlcHJlc2VudGVkIHdpdGggYnl0ZXMgPSAwIGFuZAorICAgd2NfdmFsaWQgPSBmYWxzZS4gICovCisKK3R5cGVkZWYgc3RydWN0IG1iY2hhciBtYmNoYXJfdDsKKworLyogQWNjZXNzIHRoZSBjdXJyZW50IGNoYXJhY3Rlci4gICovCisjZGVmaW5lIG1iX3B0cihtYmMpICgobWJjKS5wdHIpCisjZGVmaW5lIG1iX2xlbihtYmMpICgobWJjKS5ieXRlcykKKworLyogQ29tcGFyaXNvbiBvZiBjaGFyYWN0ZXJzLiAgKi8KKyNkZWZpbmUgbWJfaXNlcShtYmMsIHNjKSAoKG1iYykud2NfdmFsaWQgJiYgKG1iYykud2MgPT0gKHNjKSkKKyNkZWZpbmUgbWJfaXNudWwobWJjKSAoKG1iYykud2NfdmFsaWQgJiYgKG1iYykud2MgPT0gMCkKKyNkZWZpbmUgbWJfY21wKG1iYzEsIG1iYzIpIFwKKyAgKChtYmMxKS53Y192YWxpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgID8gKChtYmMyKS53Y192YWxpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgID8gKGludCkgKG1iYzEpLndjIC0gKGludCkgKG1iYzIpLndjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIDogLTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIDogKChtYmMyKS53Y192YWxpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgID8gMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIDogKG1iYzEpLmJ5dGVzID09IChtYmMyKS5ieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgPyBtZW1jbXAgKChtYmMxKS5wdHIsIChtYmMyKS5wdHIsIChtYmMxKS5ieXRlcykgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgOiAobWJjMSkuYnl0ZXMgPCAobWJjMikuYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICA/IChtZW1jbXAgKChtYmMxKS5wdHIsIChtYmMyKS5wdHIsIChtYmMxKS5ieXRlcykgPiAwID8gMSA6IC0xKSBcCisgICAgICAgICAgOiAobWVtY21wICgobWJjMSkucHRyLCAobWJjMikucHRyLCAobWJjMikuYnl0ZXMpID49IDAgPyAxIDogLTEpKSkKKyNkZWZpbmUgbWJfY2FzZWNtcChtYmMxLCBtYmMyKSBcCisgICgobWJjMSkud2NfdmFsaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICA/ICgobWJjMikud2NfdmFsaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICA/IChpbnQpIHRvd2xvd2VyICgobWJjMSkud2MpIC0gKGludCkgdG93bG93ZXIgKChtYmMyKS53YykgICAgICAgICBcCisgICAgICA6IC0xKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICA6ICgobWJjMikud2NfdmFsaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICA/IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICA6IChtYmMxKS5ieXRlcyA9PSAobWJjMikuYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgID8gbWVtY21wICgobWJjMSkucHRyLCAobWJjMikucHRyLCAobWJjMSkuYnl0ZXMpICAgICAgICAgICAgICAgICBcCisgICAgICAgIDogKG1iYzEpLmJ5dGVzIDwgKG1iYzIpLmJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgPyAobWVtY21wICgobWJjMSkucHRyLCAobWJjMikucHRyLCAobWJjMSkuYnl0ZXMpID4gMCA/IDEgOiAtMSkgXAorICAgICAgICAgIDogKG1lbWNtcCAoKG1iYzEpLnB0ciwgKG1iYzIpLnB0ciwgKG1iYzIpLmJ5dGVzKSA+PSAwID8gMSA6IC0xKSkpCisjZGVmaW5lIG1iX2VxdWFsKG1iYzEsIG1iYzIpIFwKKyAgKChtYmMxKS53Y192YWxpZCAmJiAobWJjMikud2NfdmFsaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgID8gKG1iYzEpLndjID09IChtYmMyKS53YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIDogKG1iYzEpLmJ5dGVzID09IChtYmMyKS5ieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgJiYgbWVtY21wICgobWJjMSkucHRyLCAobWJjMikucHRyLCAobWJjMSkuYnl0ZXMpID09IDApCisjZGVmaW5lIG1iX2Nhc2VlcXVhbChtYmMxLCBtYmMyKSBcCisgICgobWJjMSkud2NfdmFsaWQgJiYgKG1iYzIpLndjX3ZhbGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICA/IHRvd2xvd2VyICgobWJjMSkud2MpID09IHRvd2xvd2VyICgobWJjMikud2MpICAgICAgICAgICAgICAgICAgICAgICBcCisgICA6IChtYmMxKS5ieXRlcyA9PSAobWJjMikuYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICYmIG1lbWNtcCAoKG1iYzEpLnB0ciwgKG1iYzIpLnB0ciwgKG1iYzEpLmJ5dGVzKSA9PSAwKQorCisvKiA8Y3R5cGUuaD4sIDx3Y3R5cGUuaD4gY2xhc3NpZmljYXRpb24uICAqLworI2RlZmluZSBtYl9pc2FzY2lpKG1iYykgXAorICAoKG1iYykud2NfdmFsaWQgJiYgKG1iYykud2MgPj0gMCAmJiAobWJjKS53YyA8PSAxMjcpCisjZGVmaW5lIG1iX2lzYWxudW0obWJjKSAoKG1iYykud2NfdmFsaWQgJiYgaXN3YWxudW0gKChtYmMpLndjKSkKKyNkZWZpbmUgbWJfaXNhbHBoYShtYmMpICgobWJjKS53Y192YWxpZCAmJiBpc3dhbHBoYSAoKG1iYykud2MpKQorI2RlZmluZSBtYl9pc2JsYW5rKG1iYykgKChtYmMpLndjX3ZhbGlkICYmIGlzd2JsYW5rICgobWJjKS53YykpCisjZGVmaW5lIG1iX2lzY250cmwobWJjKSAoKG1iYykud2NfdmFsaWQgJiYgaXN3Y250cmwgKChtYmMpLndjKSkKKyNkZWZpbmUgbWJfaXNkaWdpdChtYmMpICgobWJjKS53Y192YWxpZCAmJiBpc3dkaWdpdCAoKG1iYykud2MpKQorI2RlZmluZSBtYl9pc2dyYXBoKG1iYykgKChtYmMpLndjX3ZhbGlkICYmIGlzd2dyYXBoICgobWJjKS53YykpCisjZGVmaW5lIG1iX2lzbG93ZXIobWJjKSAoKG1iYykud2NfdmFsaWQgJiYgaXN3bG93ZXIgKChtYmMpLndjKSkKKyNkZWZpbmUgbWJfaXNwcmludChtYmMpICgobWJjKS53Y192YWxpZCAmJiBpc3dwcmludCAoKG1iYykud2MpKQorI2RlZmluZSBtYl9pc3B1bmN0KG1iYykgKChtYmMpLndjX3ZhbGlkICYmIGlzd3B1bmN0ICgobWJjKS53YykpCisjZGVmaW5lIG1iX2lzc3BhY2UobWJjKSAoKG1iYykud2NfdmFsaWQgJiYgaXN3c3BhY2UgKChtYmMpLndjKSkKKyNkZWZpbmUgbWJfaXN1cHBlcihtYmMpICgobWJjKS53Y192YWxpZCAmJiBpc3d1cHBlciAoKG1iYykud2MpKQorI2RlZmluZSBtYl9pc3hkaWdpdChtYmMpICgobWJjKS53Y192YWxpZCAmJiBpc3d4ZGlnaXQgKChtYmMpLndjKSkKKworLyogRXh0cmEgPHdjaGFyLmg+IGZ1bmN0aW9uLiAgKi8KKworLyogVW5wcmludGFibGUgY2hhcmFjdGVycyBhcHBlYXIgYXMgYSBzbWFsbCBib3ggb2Ygd2lkdGggMS4gICovCisjZGVmaW5lIE1CX1VOUFJJTlRBQkxFX1dJRFRIIDEKKworTUJDSEFSX0lOTElORSBpbnQKK21iX3dpZHRoX2F1eCAod2ludF90IHdjKQoreworICBpbnQgdyA9IHdjd2lkdGggKHdjKTsKKyAgLyogRm9yIHVucHJpbnRhYmxlIGNoYXJhY3RlcnMsIGFyYml0cmFyaWx5IHJldHVybiAwIGZvciBjb250cm9sIGNoYXJhY3RlcnMKKyAgICAgYW5kIE1CX1VOUFJJTlRBQkxFX1dJRFRIIG90aGVyd2lzZS4gICovCisgIHJldHVybiAodyA+PSAwID8gdyA6IGlzd2NudHJsICh3YykgPyAwIDogTUJfVU5QUklOVEFCTEVfV0lEVEgpOworfQorCisjZGVmaW5lIG1iX3dpZHRoKG1iYykgXAorICAoKG1iYykud2NfdmFsaWQgPyBtYl93aWR0aF9hdXggKChtYmMpLndjKSA6IE1CX1VOUFJJTlRBQkxFX1dJRFRIKQorCisvKiBPdXRwdXQuICAqLworI2RlZmluZSBtYl9wdXRjKG1iYywgc3RyZWFtKSAgZndyaXRlICgobWJjKS5wdHIsIDEsIChtYmMpLmJ5dGVzLCAoc3RyZWFtKSkKKworLyogQXNzaWdubWVudC4gICovCisjZGVmaW5lIG1iX3NldGFzY2lpKG1iYywgc2MpIFwKKyAgKChtYmMpLT5wdHIgPSAobWJjKS0+YnVmLCAobWJjKS0+Ynl0ZXMgPSAxLCAobWJjKS0+d2NfdmFsaWQgPSAxLCBcCisgICAobWJjKS0+d2MgPSAobWJjKS0+YnVmWzBdID0gKHNjKSkKKworLyogQ29weWluZyBhIGNoYXJhY3Rlci4gICovCitNQkNIQVJfSU5MSU5FIHZvaWQKK21iX2NvcHkgKG1iY2hhcl90ICpuZXdfbWJjLCBjb25zdCBtYmNoYXJfdCAqb2xkX21iYykKK3sKKyAgaWYgKG9sZF9tYmMtPnB0ciA9PSAmb2xkX21iYy0+YnVmWzBdKQorICAgIHsKKyAgICAgIG1lbWNweSAoJm5ld19tYmMtPmJ1ZlswXSwgJm9sZF9tYmMtPmJ1ZlswXSwgb2xkX21iYy0+Ynl0ZXMpOworICAgICAgbmV3X21iYy0+cHRyID0gJm5ld19tYmMtPmJ1ZlswXTsKKyAgICB9CisgIGVsc2UKKyAgICBuZXdfbWJjLT5wdHIgPSBvbGRfbWJjLT5wdHI7CisgIG5ld19tYmMtPmJ5dGVzID0gb2xkX21iYy0+Ynl0ZXM7CisgIGlmICgobmV3X21iYy0+d2NfdmFsaWQgPSBvbGRfbWJjLT53Y192YWxpZCkpCisgICAgbmV3X21iYy0+d2MgPSBvbGRfbWJjLT53YzsKK30KKworCisvKiBpc19iYXNpYyhjKSB0ZXN0cyB3aGV0aGVyIHRoZSBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXIgYyBpcyBpbiB0aGUKKyAgIElTTyBDICJiYXNpYyBjaGFyYWN0ZXIgc2V0Ii4KKyAgIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiwgYW5kIGlzIGluIHRoaXMgZmlsZSBvbmx5IHRvIHNoYXJlIGNvZGUKKyAgIGJldHdlZW4gbWJpdGVyX211bHRpLmggYW5kIG1iZmlsZV9tdWx0aS5oLiAgKi8KKyNpZiAoJyAnID09IDMyKSAmJiAoJyEnID09IDMzKSAmJiAoJyInID09IDM0KSAmJiAoJyMnID09IDM1KSBcCisgICAgJiYgKCclJyA9PSAzNykgJiYgKCcmJyA9PSAzOCkgJiYgKCdcJycgPT0gMzkpICYmICgnKCcgPT0gNDApIFwKKyAgICAmJiAoJyknID09IDQxKSAmJiAoJyonID09IDQyKSAmJiAoJysnID09IDQzKSAmJiAoJywnID09IDQ0KSBcCisgICAgJiYgKCctJyA9PSA0NSkgJiYgKCcuJyA9PSA0NikgJiYgKCcvJyA9PSA0NykgJiYgKCcwJyA9PSA0OCkgXAorICAgICYmICgnMScgPT0gNDkpICYmICgnMicgPT0gNTApICYmICgnMycgPT0gNTEpICYmICgnNCcgPT0gNTIpIFwKKyAgICAmJiAoJzUnID09IDUzKSAmJiAoJzYnID09IDU0KSAmJiAoJzcnID09IDU1KSAmJiAoJzgnID09IDU2KSBcCisgICAgJiYgKCc5JyA9PSA1NykgJiYgKCc6JyA9PSA1OCkgJiYgKCc7JyA9PSA1OSkgJiYgKCc8JyA9PSA2MCkgXAorICAgICYmICgnPScgPT0gNjEpICYmICgnPicgPT0gNjIpICYmICgnPycgPT0gNjMpICYmICgnQScgPT0gNjUpIFwKKyAgICAmJiAoJ0InID09IDY2KSAmJiAoJ0MnID09IDY3KSAmJiAoJ0QnID09IDY4KSAmJiAoJ0UnID09IDY5KSBcCisgICAgJiYgKCdGJyA9PSA3MCkgJiYgKCdHJyA9PSA3MSkgJiYgKCdIJyA9PSA3MikgJiYgKCdJJyA9PSA3MykgXAorICAgICYmICgnSicgPT0gNzQpICYmICgnSycgPT0gNzUpICYmICgnTCcgPT0gNzYpICYmICgnTScgPT0gNzcpIFwKKyAgICAmJiAoJ04nID09IDc4KSAmJiAoJ08nID09IDc5KSAmJiAoJ1AnID09IDgwKSAmJiAoJ1EnID09IDgxKSBcCisgICAgJiYgKCdSJyA9PSA4MikgJiYgKCdTJyA9PSA4MykgJiYgKCdUJyA9PSA4NCkgJiYgKCdVJyA9PSA4NSkgXAorICAgICYmICgnVicgPT0gODYpICYmICgnVycgPT0gODcpICYmICgnWCcgPT0gODgpICYmICgnWScgPT0gODkpIFwKKyAgICAmJiAoJ1onID09IDkwKSAmJiAoJ1snID09IDkxKSAmJiAoJ1xcJyA9PSA5MikgJiYgKCddJyA9PSA5MykgXAorICAgICYmICgnXicgPT0gOTQpICYmICgnXycgPT0gOTUpICYmICgnYScgPT0gOTcpICYmICgnYicgPT0gOTgpIFwKKyAgICAmJiAoJ2MnID09IDk5KSAmJiAoJ2QnID09IDEwMCkgJiYgKCdlJyA9PSAxMDEpICYmICgnZicgPT0gMTAyKSBcCisgICAgJiYgKCdnJyA9PSAxMDMpICYmICgnaCcgPT0gMTA0KSAmJiAoJ2knID09IDEwNSkgJiYgKCdqJyA9PSAxMDYpIFwKKyAgICAmJiAoJ2snID09IDEwNykgJiYgKCdsJyA9PSAxMDgpICYmICgnbScgPT0gMTA5KSAmJiAoJ24nID09IDExMCkgXAorICAgICYmICgnbycgPT0gMTExKSAmJiAoJ3AnID09IDExMikgJiYgKCdxJyA9PSAxMTMpICYmICgncicgPT0gMTE0KSBcCisgICAgJiYgKCdzJyA9PSAxMTUpICYmICgndCcgPT0gMTE2KSAmJiAoJ3UnID09IDExNykgJiYgKCd2JyA9PSAxMTgpIFwKKyAgICAmJiAoJ3cnID09IDExOSkgJiYgKCd4JyA9PSAxMjApICYmICgneScgPT0gMTIxKSAmJiAoJ3onID09IDEyMikgXAorICAgICYmICgneycgPT0gMTIzKSAmJiAoJ3wnID09IDEyNCkgJiYgKCd9JyA9PSAxMjUpICYmICgnficgPT0gMTI2KQorLyogVGhlIGNoYXJhY3RlciBzZXQgaXMgSVNPLTY0Niwgbm90IEVCQ0RJQy4gKi8KKyMgZGVmaW5lIElTX0JBU0lDX0FTQ0lJIDEKKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCBpc19iYXNpY190YWJsZVtdOworCitNQkNIQVJfSU5MSU5FIGJvb2wKK2lzX2Jhc2ljIChjaGFyIGMpCit7CisgIHJldHVybiAoaXNfYmFzaWNfdGFibGUgWyh1bnNpZ25lZCBjaGFyKSBjID4+IDVdID4+ICgodW5zaWduZWQgY2hhcikgYyAmIDMxKSkKKyAgICAgICAgICYgMTsKK30KKworI2Vsc2UKKworTUJDSEFSX0lOTElORSBib29sCitpc19iYXNpYyAoY2hhciBjKQoreworICBzd2l0Y2ggKGMpCisgICAgeworICAgIGNhc2UgJ1x0JzogY2FzZSAnXHYnOiBjYXNlICdcZic6CisgICAgY2FzZSAnICc6IGNhc2UgJyEnOiBjYXNlICciJzogY2FzZSAnIyc6IGNhc2UgJyUnOgorICAgIGNhc2UgJyYnOiBjYXNlICdcJyc6IGNhc2UgJygnOiBjYXNlICcpJzogY2FzZSAnKic6CisgICAgY2FzZSAnKyc6IGNhc2UgJywnOiBjYXNlICctJzogY2FzZSAnLic6IGNhc2UgJy8nOgorICAgIGNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKKyAgICBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisgICAgY2FzZSAnOic6IGNhc2UgJzsnOiBjYXNlICc8JzogY2FzZSAnPSc6IGNhc2UgJz4nOgorICAgIGNhc2UgJz8nOgorICAgIGNhc2UgJ0EnOiBjYXNlICdCJzogY2FzZSAnQyc6IGNhc2UgJ0QnOiBjYXNlICdFJzoKKyAgICBjYXNlICdGJzogY2FzZSAnRyc6IGNhc2UgJ0gnOiBjYXNlICdJJzogY2FzZSAnSic6CisgICAgY2FzZSAnSyc6IGNhc2UgJ0wnOiBjYXNlICdNJzogY2FzZSAnTic6IGNhc2UgJ08nOgorICAgIGNhc2UgJ1AnOiBjYXNlICdRJzogY2FzZSAnUic6IGNhc2UgJ1MnOiBjYXNlICdUJzoKKyAgICBjYXNlICdVJzogY2FzZSAnVic6IGNhc2UgJ1cnOiBjYXNlICdYJzogY2FzZSAnWSc6CisgICAgY2FzZSAnWic6CisgICAgY2FzZSAnWyc6IGNhc2UgJ1xcJzogY2FzZSAnXSc6IGNhc2UgJ14nOiBjYXNlICdfJzoKKyAgICBjYXNlICdhJzogY2FzZSAnYic6IGNhc2UgJ2MnOiBjYXNlICdkJzogY2FzZSAnZSc6CisgICAgY2FzZSAnZic6IGNhc2UgJ2cnOiBjYXNlICdoJzogY2FzZSAnaSc6IGNhc2UgJ2onOgorICAgIGNhc2UgJ2snOiBjYXNlICdsJzogY2FzZSAnbSc6IGNhc2UgJ24nOiBjYXNlICdvJzoKKyAgICBjYXNlICdwJzogY2FzZSAncSc6IGNhc2UgJ3InOiBjYXNlICdzJzogY2FzZSAndCc6CisgICAgY2FzZSAndSc6IGNhc2UgJ3YnOiBjYXNlICd3JzogY2FzZSAneCc6IGNhc2UgJ3knOgorICAgIGNhc2UgJ3onOiBjYXNlICd7JzogY2FzZSAnfCc6IGNhc2UgJ30nOiBjYXNlICd+JzoKKyAgICAgIHJldHVybiAxOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKKyNlbmRpZgorCitfR0xfSU5MSU5FX0hFQURFUl9FTkQKKworI2VuZGlmIC8qIF9NQkNIQVJfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL21icnRvd2MuYyBiL2xpYi9tYnJ0b3djLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNmMzU0YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9tYnJ0b3djLmMKQEAgLTAsMCArMSw0MDIgQEAKKy8qIENvbnZlcnQgbXVsdGlieXRlIGNoYXJhY3RlciB0byB3aWRlIGNoYXJhY3Rlci4KKyAgIENvcHlyaWdodCAoQykgMTk5OS0yMDAyLCAyMDA1LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPiwgMjAwOC4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlIDx3Y2hhci5oPgorCisjaWYgR05VTElCX2RlZmluZWRfbWJzdGF0ZV90CisvKiBJbXBsZW1lbnQgbWJydG93YygpIG9uIHRvcCBvZiBtYnRvd2MoKS4gICovCisKKyMgaW5jbHVkZSA8ZXJybm8uaD4KKyMgaW5jbHVkZSA8c3RkbGliLmg+CisKKyMgaW5jbHVkZSAibG9jYWxjaGFyc2V0LmgiCisjIGluY2x1ZGUgInN0cmVxLmgiCisjIGluY2x1ZGUgInZlcmlmeS5oIgorCisKK3ZlcmlmeSAoc2l6ZW9mIChtYnN0YXRlX3QpID49IDQpOworCitzdGF0aWMgY2hhciBpbnRlcm5hbF9zdGF0ZVs0XTsKKworc2l6ZV90CittYnJ0b3djICh3Y2hhcl90ICpwd2MsIGNvbnN0IGNoYXIgKnMsIHNpemVfdCBuLCBtYnN0YXRlX3QgKnBzKQoreworICBjaGFyICpwc3RhdGUgPSAoY2hhciAqKXBzOworCisgIGlmIChzID09IE5VTEwpCisgICAgeworICAgICAgcHdjID0gTlVMTDsKKyAgICAgIHMgPSAiIjsKKyAgICAgIG4gPSAxOworICAgIH0KKworICBpZiAobiA9PSAwKQorICAgIHJldHVybiAoc2l6ZV90KSgtMik7CisKKyAgLyogSGVyZSBuID4gMC4gICovCisKKyAgaWYgKHBzdGF0ZSA9PSBOVUxMKQorICAgIHBzdGF0ZSA9IGludGVybmFsX3N0YXRlOworCisgIHsKKyAgICBzaXplX3QgbnN0YXRlID0gcHN0YXRlWzBdOworICAgIGNoYXIgYnVmWzRdOworICAgIGNvbnN0IGNoYXIgKnA7CisgICAgc2l6ZV90IG07CisKKyAgICBzd2l0Y2ggKG5zdGF0ZSkKKyAgICAgIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgICAgcCA9IHM7CisgICAgICAgIG0gPSBuOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMzoKKyAgICAgICAgYnVmWzJdID0gcHN0YXRlWzNdOworICAgICAgICAvKkZBTExUSFJPVUdIKi8KKyAgICAgIGNhc2UgMjoKKyAgICAgICAgYnVmWzFdID0gcHN0YXRlWzJdOworICAgICAgICAvKkZBTExUSFJPVUdIKi8KKyAgICAgIGNhc2UgMToKKyAgICAgICAgYnVmWzBdID0gcHN0YXRlWzFdOworICAgICAgICBwID0gYnVmOworICAgICAgICBtID0gbnN0YXRlOworICAgICAgICBidWZbbSsrXSA9IHNbMF07CisgICAgICAgIGlmIChuID49IDIgJiYgbSA8IDQpCisgICAgICAgICAgeworICAgICAgICAgICAgYnVmW20rK10gPSBzWzFdOworICAgICAgICAgICAgaWYgKG4gPj0gMyAmJiBtIDwgNCkKKyAgICAgICAgICAgICAgYnVmW20rK10gPSBzWzJdOworICAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIChzaXplX3QpKC0xKTsKKyAgICAgIH0KKworICAgIC8qIEhlcmUgbSA+IDAuICAqLworCisjIGlmIF9fR0xJQkNfXyB8fCBkZWZpbmVkIF9fVUNMSUJDX18KKyAgICAvKiBXb3JrIGFyb3VuZCBidWcgPGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9OTY3ND4gKi8KKyAgICBtYnRvd2MgKE5VTEwsIE5VTEwsIDApOworIyBlbmRpZgorICAgIHsKKyAgICAgIGludCByZXMgPSBtYnRvd2MgKHB3YywgcCwgbSk7CisKKyAgICAgIGlmIChyZXMgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChwd2MgIT0gTlVMTCAmJiAoKCpwd2MgPT0gMCkgIT0gKHJlcyA9PSAwKSkpCisgICAgICAgICAgICBhYm9ydCAoKTsKKyAgICAgICAgICBpZiAobnN0YXRlID49IChyZXMgPiAwID8gcmVzIDogMSkpCisgICAgICAgICAgICBhYm9ydCAoKTsKKyAgICAgICAgICByZXMgLT0gbnN0YXRlOworICAgICAgICAgIHBzdGF0ZVswXSA9IDA7CisgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgfQorCisgICAgICAvKiBtYnRvd2MgZG9lcyBub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiBpbnZhbGlkIGFuZCBpbmNvbXBsZXRlIG11bHRpYnl0ZQorICAgICAgICAgc2VxdWVuY2VzLiAgQnV0IG1icnRvd2MgbmVlZHMgdG8gbWFrZSB0aGlzIGRpc3RpbmN0aW9uLgorICAgICAgICAgVGhlcmUgYXJlIHR3byBwb3NzaWJsZSBhcHByb2FjaGVzOgorICAgICAgICAgICAtIFVzZSBpY29udigpIGFuZCBpdHMgcmV0dXJuIHZhbHVlLgorICAgICAgICAgICAtIFVzZSBidWlsdC1pbiBrbm93bGVkZ2UgYWJvdXQgdGhlIHBvc3NpYmxlIGVuY29kaW5ncy4KKyAgICAgICAgIEdpdmVuIHRoZSBsb3cgcXVhbGl0eSBvZiBpbXBsZW1lbnRhdGlvbiBvZiBpY29udigpIG9uIHRoZSBzeXN0ZW1zIHRoYXQKKyAgICAgICAgIGxhY2sgbWJydG93YygpLCB3ZSB1c2UgdGhlIHNlY29uZCBhcHByb2FjaC4KKyAgICAgICAgIFRoZSBwb3NzaWJsZSBlbmNvZGluZ3MgYXJlOgorICAgICAgICAgICAtIDgtYml0IGVuY29kaW5ncywKKyAgICAgICAgICAgLSBFVUMtSlAsIEVVQy1LUiwgR0IyMzEyLCBFVUMtVFcsIEJJRzUsIEdCMTgwMzAsIFNKSVMsCisgICAgICAgICAgIC0gVVRGLTguCisgICAgICAgICBVc2Ugc3BlY2lhbGl6ZWQgY29kZSBmb3IgZWFjaC4gICovCisgICAgICBpZiAobSA+PSA0IHx8IG0gPj0gTUJfQ1VSX01BWCkKKyAgICAgICAgZ290byBpbnZhbGlkOworICAgICAgLyogSGVyZSBNQl9DVVJfTUFYID4gMSBhbmQgMCA8IG0gPCA0LiAgKi8KKyAgICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcgPSBsb2NhbGVfY2hhcnNldCAoKTsKKworICAgICAgICBpZiAoU1RSRVFfT1BUIChlbmNvZGluZywgIlVURi04IiwgJ1UnLCAnVCcsICdGJywgJy0nLCAnOCcsIDAsIDAsIDAsIDApKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENmLiB1bmlzdHIvdTgtbWJsZW4uYy4gICovCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAodW5zaWduZWQgY2hhcikgcFswXTsKKworICAgICAgICAgICAgaWYgKGMgPj0gMHhjMikKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjIDwgMHhlMCkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG0gPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICBnb3RvIGluY29tcGxldGU7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA8IDB4ZjApCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgZ290byBpbmNvbXBsZXRlOworICAgICAgICAgICAgICAgICAgICBpZiAobSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzIgPSAodW5zaWduZWQgY2hhcikgcFsxXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjMiBeIDB4ODApIDwgMHg0MAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChjID49IDB4ZTEgfHwgYzIgPj0gMHhhMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoYyAhPSAweGVkIHx8IGMyIDwgMHhhMCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gaW5jb21wbGV0ZTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA8PSAweGY0KQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAobSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgIGdvdG8gaW5jb21wbGV0ZTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSAvKiBtID09IDIgfHwgbSA9PSAzICovCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMiA9ICh1bnNpZ25lZCBjaGFyKSBwWzFdOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGMyIF4gMHg4MCkgPCAweDQwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGMgPj0gMHhmMSB8fCBjMiA+PSAweDkwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChjIDwgMHhmNCB8fCAoYyA9PSAweGY0ICYmIGMyIDwgMHg5MCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0gPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gaW5jb21wbGV0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIC8qIG0gPT0gMyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMzID0gKHVuc2lnbmVkIGNoYXIpIHBbMl07CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjMyBeIDB4ODApIDwgMHg0MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGluY29tcGxldGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdvdG8gaW52YWxpZDsKKyAgICAgICAgICB9CisKKyAgICAgICAgLyogQXMgYSByZWZlcmVuY2UgZm9yIHRoaXMgY29kZSwgeW91IGNhbiB1c2UgdGhlIEdOVSBsaWJpY29udgorICAgICAgICAgICBpbXBsZW1lbnRhdGlvbi4gIExvb2sgZm9yIHVzZXMgb2YgdGhlIFJFVF9UT09GRVcgbWFjcm8uICAqLworCisgICAgICAgIGlmIChTVFJFUV9PUFQgKGVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAiRVVDLUpQIiwgJ0UnLCAnVScsICdDJywgJy0nLCAnSicsICdQJywgMCwgMCwgMCkpCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKG0gPT0gMSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9ICh1bnNpZ25lZCBjaGFyKSBwWzBdOworCisgICAgICAgICAgICAgICAgaWYgKChjID49IDB4YTEgJiYgYyA8IDB4ZmYpIHx8IGMgPT0gMHg4ZSB8fCBjID09IDB4OGYpCisgICAgICAgICAgICAgICAgICBnb3RvIGluY29tcGxldGU7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtID09IDIpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAodW5zaWduZWQgY2hhcikgcFswXTsKKworICAgICAgICAgICAgICAgIGlmIChjID09IDB4OGYpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzIgPSAodW5zaWduZWQgY2hhcikgcFsxXTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoYzIgPj0gMHhhMSAmJiBjMiA8IDB4ZmYpCisgICAgICAgICAgICAgICAgICAgICAgZ290byBpbmNvbXBsZXRlOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICBnb3RvIGludmFsaWQ7CisgICAgICAgICAgfQorICAgICAgICBpZiAoU1RSRVFfT1BUIChlbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgIkVVQy1LUiIsICdFJywgJ1UnLCAnQycsICctJywgJ0snLCAnUicsIDAsIDAsIDApCisgICAgICAgICAgICB8fCBTVFJFUV9PUFQgKGVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiR0IyMzEyIiwgJ0cnLCAnQicsICcyJywgJzMnLCAnMScsICcyJywgMCwgMCwgMCkKKyAgICAgICAgICAgIHx8IFNUUkVRX09QVCAoZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJCSUc1IiwgJ0InLCAnSScsICdHJywgJzUnLCAwLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAobSA9PSAxKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjID0gKHVuc2lnbmVkIGNoYXIpIHBbMF07CisKKyAgICAgICAgICAgICAgICBpZiAoYyA+PSAweGExICYmIGMgPCAweGZmKQorICAgICAgICAgICAgICAgICAgZ290byBpbmNvbXBsZXRlOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBnb3RvIGludmFsaWQ7CisgICAgICAgICAgfQorICAgICAgICBpZiAoU1RSRVFfT1BUIChlbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgIkVVQy1UVyIsICdFJywgJ1UnLCAnQycsICctJywgJ1QnLCAnVycsIDAsIDAsIDApKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtID09IDEpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAodW5zaWduZWQgY2hhcikgcFswXTsKKworICAgICAgICAgICAgICAgIGlmICgoYyA+PSAweGExICYmIGMgPCAweGZmKSB8fCBjID09IDB4OGUpCisgICAgICAgICAgICAgICAgICBnb3RvIGluY29tcGxldGU7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgLyogbSA9PSAyIHx8IG0gPT0gMyAqLworICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjID0gKHVuc2lnbmVkIGNoYXIpIHBbMF07CisKKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAweDhlKQorICAgICAgICAgICAgICAgICAgZ290byBpbmNvbXBsZXRlOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBnb3RvIGludmFsaWQ7CisgICAgICAgICAgfQorICAgICAgICBpZiAoU1RSRVFfT1BUIChlbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgIkdCMTgwMzAiLCAnRycsICdCJywgJzEnLCAnOCcsICcwJywgJzMnLCAnMCcsIDAsIDApKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtID09IDEpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAodW5zaWduZWQgY2hhcikgcFswXTsKKworICAgICAgICAgICAgICAgIGlmICgoYyA+PSAweDkwICYmIGMgPD0gMHhlMykgfHwgKGMgPj0gMHhmOCAmJiBjIDw9IDB4ZmUpKQorICAgICAgICAgICAgICAgICAgZ290byBpbmNvbXBsZXRlOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIC8qIG0gPT0gMiB8fCBtID09IDMgKi8KKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9ICh1bnNpZ25lZCBjaGFyKSBwWzBdOworCisgICAgICAgICAgICAgICAgaWYgKGMgPj0gMHg5MCAmJiBjIDw9IDB4ZTMpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzIgPSAodW5zaWduZWQgY2hhcikgcFsxXTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoYzIgPj0gMHgzMCAmJiBjMiA8PSAweDM5KQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gaW5jb21wbGV0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgLyogbSA9PSAzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMzID0gKHVuc2lnbmVkIGNoYXIpIHBbMl07CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYzMgPj0gMHg4MSAmJiBjMyA8PSAweGZlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBpbmNvbXBsZXRlOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICBnb3RvIGludmFsaWQ7CisgICAgICAgICAgfQorICAgICAgICBpZiAoU1RSRVFfT1BUIChlbmNvZGluZywgIlNKSVMiLCAnUycsICdKJywgJ0knLCAnUycsIDAsIDAsIDAsIDAsIDApKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtID09IDEpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAodW5zaWduZWQgY2hhcikgcFswXTsKKworICAgICAgICAgICAgICAgIGlmICgoYyA+PSAweDgxICYmIGMgPD0gMHg5ZikgfHwgKGMgPj0gMHhlMCAmJiBjIDw9IDB4ZWEpCisgICAgICAgICAgICAgICAgICAgIHx8IChjID49IDB4ZjAgJiYgYyA8PSAweGY5KSkKKyAgICAgICAgICAgICAgICAgIGdvdG8gaW5jb21wbGV0ZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZ290byBpbnZhbGlkOworICAgICAgICAgIH0KKworICAgICAgICAvKiBBbiB1bmtub3duIG11bHRpYnl0ZSBlbmNvZGluZy4gICovCisgICAgICAgIGdvdG8gaW5jb21wbGV0ZTsKKyAgICAgIH0KKworICAgICBpbmNvbXBsZXRlOgorICAgICAgeworICAgICAgICBzaXplX3QgayA9IG5zdGF0ZTsKKyAgICAgICAgLyogSGVyZSAwIDw9IGsgPCBtIDwgNC4gICovCisgICAgICAgIHBzdGF0ZVsrK2tdID0gc1swXTsKKyAgICAgICAgaWYgKGsgPCBtKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHBzdGF0ZVsrK2tdID0gc1sxXTsKKyAgICAgICAgICAgIGlmIChrIDwgbSkKKyAgICAgICAgICAgICAgcHN0YXRlWysra10gPSBzWzJdOworICAgICAgICAgIH0KKyAgICAgICAgaWYgKGsgIT0gbSkKKyAgICAgICAgICBhYm9ydCAoKTsKKyAgICAgIH0KKyAgICAgIHBzdGF0ZVswXSA9IG07CisgICAgICByZXR1cm4gKHNpemVfdCkoLTIpOworCisgICAgIGludmFsaWQ6CisgICAgICBlcnJubyA9IEVJTFNFUTsKKyAgICAgIC8qIFRoZSBjb252ZXJzaW9uIHN0YXRlIGlzIHVuZGVmaW5lZCwgc2F5cyBQT1NJWC4gICovCisgICAgICByZXR1cm4gKHNpemVfdCkoLTEpOworICAgIH0KKyAgfQorfQorCisjZWxzZQorLyogT3ZlcnJpZGUgdGhlIHN5c3RlbSdzIG1icnRvd2MoKSBmdW5jdGlvbi4gICovCisKKyMgdW5kZWYgbWJydG93YworCitzaXplX3QKK3JwbF9tYnJ0b3djICh3Y2hhcl90ICpwd2MsIGNvbnN0IGNoYXIgKnMsIHNpemVfdCBuLCBtYnN0YXRlX3QgKnBzKQoreworIyBpZiBNQlJUT1dDX05VTExfQVJHMl9CVUcgfHwgTUJSVE9XQ19SRVRWQUxfQlVHCisgIGlmIChzID09IE5VTEwpCisgICAgeworICAgICAgcHdjID0gTlVMTDsKKyAgICAgIHMgPSAiIjsKKyAgICAgIG4gPSAxOworICAgIH0KKyMgZW5kaWYKKworIyBpZiBNQlJUT1dDX1JFVFZBTF9CVUcKKyAgeworICAgIHN0YXRpYyBtYnN0YXRlX3QgaW50ZXJuYWxfc3RhdGU7CisKKyAgICAvKiBPdmVycmlkZSBtYnJ0b3djJ3MgaW50ZXJuYWwgc3RhdGUuICBXZSBjYW5ub3QgY2FsbCBtYnNpbml0KCkgb24gdGhlCisgICAgICAgaGlkZGVuIGludGVybmFsIHN0YXRlLCBidXQgd2UgY2FuIGNhbGwgaXQgb24gb3VyIHZhcmlhYmxlLiAgKi8KKyAgICBpZiAocHMgPT0gTlVMTCkKKyAgICAgIHBzID0gJmludGVybmFsX3N0YXRlOworCisgICAgaWYgKCFtYnNpbml0IChwcykpCisgICAgICB7CisgICAgICAgIC8qIFBhcnNlIHRoZSByZXN0IG9mIHRoZSBtdWx0aWJ5dGUgY2hhcmFjdGVyIGJ5dGUgZm9yIGJ5dGUuICAqLworICAgICAgICBzaXplX3QgY291bnQgPSAwOworICAgICAgICBmb3IgKDsgbiA+IDA7IHMrKywgbi0tKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHdjaGFyX3Qgd2M7CisgICAgICAgICAgICBzaXplX3QgcmV0ID0gbWJydG93YyAoJndjLCBzLCAxLCBwcyk7CisKKyAgICAgICAgICAgIGlmIChyZXQgPT0gKHNpemVfdCkoLTEpKQorICAgICAgICAgICAgICByZXR1cm4gKHNpemVfdCkoLTEpOworICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgIGlmIChyZXQgIT0gKHNpemVfdCkoLTIpKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogVGhlIG11bHRpYnl0ZSBjaGFyYWN0ZXIgaGFzIGJlZW4gY29tcGxldGVkLiAgKi8KKyAgICAgICAgICAgICAgICBpZiAocHdjICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAqcHdjID0gd2M7CisgICAgICAgICAgICAgICAgcmV0dXJuICh3YyA9PSAwID8gMCA6IGNvdW50KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIChzaXplX3QpKC0yKTsKKyAgICAgIH0KKyAgfQorIyBlbmRpZgorCisjIGlmIE1CUlRPV0NfTlVMX1JFVFZBTF9CVUcKKyAgeworICAgIHdjaGFyX3Qgd2M7CisgICAgc2l6ZV90IHJldCA9IG1icnRvd2MgKCZ3YywgcywgbiwgcHMpOworCisgICAgaWYgKHJldCAhPSAoc2l6ZV90KSgtMSkgJiYgcmV0ICE9IChzaXplX3QpKC0yKSkKKyAgICAgIHsKKyAgICAgICAgaWYgKHB3YyAhPSBOVUxMKQorICAgICAgICAgICpwd2MgPSB3YzsKKyAgICAgICAgaWYgKHdjID09IDApCisgICAgICAgICAgcmV0ID0gMDsKKyAgICAgIH0KKyAgICByZXR1cm4gcmV0OworICB9CisjIGVsc2UKKyAgeworIyAgIGlmIE1CUlRPV0NfTlVMTF9BUkcxX0JVRworICAgIHdjaGFyX3QgZHVtbXk7CisKKyAgICBpZiAocHdjID09IE5VTEwpCisgICAgICBwd2MgPSAmZHVtbXk7CisjICAgZW5kaWYKKworICAgIHJldHVybiBtYnJ0b3djIChwd2MsIHMsIG4sIHBzKTsKKyAgfQorIyBlbmRpZgorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9tYnNjaHIuYyBiL2xpYi9tYnNjaHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDIxZDk5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL21ic2Noci5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qIFNlYXJjaGluZyBhIHN0cmluZyBmb3IgYSBjaGFyYWN0ZXIuCisgICBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LCAyMDA3LgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibWJ1aXRlci5oIgorCisvKiBMb2NhdGUgdGhlIGZpcnN0IHNpbmdsZS1ieXRlIGNoYXJhY3RlciBDIGluIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIFNUUklORywKKyAgIGFuZCByZXR1cm4gYSBwb2ludGVyIHRvIGl0LiAgUmV0dXJuIE5VTEwgaWYgQyBpcyBub3QgZm91bmQgaW4gU1RSSU5HLiAgKi8KK2NoYXIgKgorbWJzY2hyIChjb25zdCBjaGFyICpzdHJpbmcsIGludCBjKQoreworICBpZiAoTUJfQ1VSX01BWCA+IDEKKyAgICAgIC8qIE9wdGltaXphdGlvbjogV2Uga25vdyB0aGF0IEFTQ0lJIGNoYXJhY3RlcnMgPCAweDMwIGRvbid0IG9jY3VyIGFzCisgICAgICAgICBwYXJ0IG9mIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIGxvbmdlciB0aGFuIDEgYnl0ZS4gIEhlbmNlLCBpZiBjIDwgMHgzMCwKKyAgICAgICAgIHRoZSBmYXN0ZXIgdW5pYnl0ZSBsb29wIGNhbiBiZSB1c2VkLiAgKi8KKyAgICAgICYmICh1bnNpZ25lZCBjaGFyKSBjID49IDB4MzApCisgICAgeworICAgICAgbWJ1aV9pdGVyYXRvcl90IGl0ZXI7CisKKyAgICAgIGZvciAobWJ1aV9pbml0IChpdGVyLCBzdHJpbmcpOzsgbWJ1aV9hZHZhbmNlIChpdGVyKSkKKyAgICAgICAgeworICAgICAgICAgIGlmICghbWJ1aV9hdmFpbCAoaXRlcikpCisgICAgICAgICAgICBnb3RvIG5vdGZvdW5kOworICAgICAgICAgIGlmIChtYl9sZW4gKG1idWlfY3VyIChpdGVyKSkgPT0gMQorICAgICAgICAgICAgICAmJiAodW5zaWduZWQgY2hhcikgKiBtYnVpX2N1cl9wdHIgKGl0ZXIpID09ICh1bnNpZ25lZCBjaGFyKSBjKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIHJldHVybiAoY2hhciAqKSBtYnVpX2N1cl9wdHIgKGl0ZXIpOworICAgICBub3Rmb3VuZDoKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiBzdHJjaHIgKHN0cmluZywgYyk7Cit9CmRpZmYgLS1naXQgYS9saWIvbWJzaW5pdC5jIGIvbGliL21ic2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzgxNDJlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL21ic2luaXQuYwpAQCAtMCwwICsxLDYxIEBACisvKiBUZXN0IGZvciBpbml0aWFsIGNvbnZlcnNpb24gc3RhdGUuCisgICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LCAyMDA4LgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgPHdjaGFyLmg+CisKKyNpbmNsdWRlICJ2ZXJpZnkuaCIKKworI2lmIChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgIWRlZmluZWQgX19DWUdXSU5fXworCisvKiBPbiBuYXRpdmUgV2luZG93cywgJ21ic3RhdGVfdCcgaXMgZGVmaW5lZCBhcyAnaW50Jy4gICovCisKK2ludAorbWJzaW5pdCAoY29uc3QgbWJzdGF0ZV90ICpwcykKK3sKKyAgcmV0dXJuIHBzID09IE5VTEwgfHwgKnBzID09IDA7Cit9CisKKyNlbHNlCisKKy8qIFBsYXRmb3JtcyB0aGF0IGxhY2sgbWJzaW5pdCgpIGFsc28gbGFjayBtYnJsZW4oKSwgbWJydG93YygpLCBtYnNydG93Y3MoKQorICAgYW5kIHdjcnRvbWIoKSwgd2NzcnRvbWJzKCkuCisgICBXZSBhc3N1bWUgdGhhdAorICAgICAtIHNpemVvZiAobWJzdGF0ZV90KSA+PSA0LAorICAgICAtIG9ubHkgc3RhdGVsZXNzIGVuY29kaW5ncyBhcmUgc3VwcG9ydGVkIChzdWNoIGFzIFVURi04IGFuZCBFVUMtSlAsIGJ1dAorICAgICAgIG5vdCBJU08tMjAyMiB2YXJpYW50cyksCisgICAgIC0gZm9yIGVhY2ggZW5jb2RpbmcsIHRoZSBudW1iZXIgb2YgYnl0ZXMgZm9yIGEgd2lkZSBjaGFyYWN0ZXIgaXMgPD0gNC4KKyAgICAgICAoVGhpcyBtYXhpbXVtIGlzIGF0dGFpbmVkIGZvciBVVEYtOCwgR0IxODAzMCwgRVVDLVRXLikKKyAgIFdlIGRlZmluZSB0aGUgbWVhbmluZyBvZiBtYnN0YXRlX3QgYXMgZm9sbG93czoKKyAgICAgLSBJbiBtYiAtPiB3YyBkaXJlY3Rpb24sIG1ic3RhdGVfdCdzIGZpcnN0IGJ5dGUgY29udGFpbnMgdGhlIG51bWJlciBvZgorICAgICAgIGJ1ZmZlcmVkIGJ5dGVzIChpbiB0aGUgcmFuZ2UgMC4uMyksIGZvbGxvd2VkIGJ5IHVwIHRvIDMgYnVmZmVyZWQgYnl0ZXMuCisgICAgIC0gSW4gd2MgLT4gbWIgZGlyZWN0aW9uLCBtYnN0YXRlX3QgY29udGFpbnMgbm8gaW5mb3JtYXRpb24uIEluIG90aGVyCisgICAgICAgd29yZHMsIGl0IGlzIGFsd2F5cyBpbiB0aGUgaW5pdGlhbCBzdGF0ZS4gICovCisKK3ZlcmlmeSAoc2l6ZW9mIChtYnN0YXRlX3QpID49IDQpOworCitpbnQKK21ic2luaXQgKGNvbnN0IG1ic3RhdGVfdCAqcHMpCit7CisgIGNvbnN0IGNoYXIgKnBzdGF0ZSA9IChjb25zdCBjaGFyICopcHM7CisKKyAgcmV0dXJuIHBzdGF0ZSA9PSBOVUxMIHx8IHBzdGF0ZVswXSA9PSAwOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9tYnNyY2hyLmMgYi9saWIvbWJzcmNoci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMzlhM2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbWJzcmNoci5jCkBAIC0wLDAgKzEsNDkgQEAKKy8qIFNlYXJjaGluZyBhIHN0cmluZyBmb3IgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBhIGNoYXJhY3Rlci4KKyAgIENvcHlyaWdodCAoQykgMjAwNy0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4sIDIwMDcuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJtYnVpdGVyLmgiCisKKy8qIExvY2F0ZSB0aGUgbGFzdCBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXIgQyBpbiB0aGUgY2hhcmFjdGVyIHN0cmluZyBTVFJJTkcsCisgICBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byBpdC4gIFJldHVybiBOVUxMIGlmIEMgaXMgbm90IGZvdW5kIGluIFNUUklORy4gICovCitjaGFyICoKK21ic3JjaHIgKGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGMpCit7CisgIGlmIChNQl9DVVJfTUFYID4gMQorICAgICAgLyogT3B0aW1pemF0aW9uOiBXZSBrbm93IHRoYXQgQVNDSUkgY2hhcmFjdGVycyA8IDB4MzAgZG9uJ3Qgb2NjdXIgYXMKKyAgICAgICAgIHBhcnQgb2YgbXVsdGlieXRlIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gMSBieXRlLiAgSGVuY2UsIGlmIGMgPCAweDMwLAorICAgICAgICAgdGhlIGZhc3RlciB1bmlieXRlIGxvb3AgY2FuIGJlIHVzZWQuICAqLworICAgICAgJiYgKHVuc2lnbmVkIGNoYXIpIGMgPj0gMHgzMCkKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpyZXN1bHQgPSBOVUxMOworICAgICAgbWJ1aV9pdGVyYXRvcl90IGl0ZXI7CisKKyAgICAgIGZvciAobWJ1aV9pbml0IChpdGVyLCBzdHJpbmcpOyBtYnVpX2F2YWlsIChpdGVyKTsgbWJ1aV9hZHZhbmNlIChpdGVyKSkKKyAgICAgICAgeworICAgICAgICAgIGlmIChtYl9sZW4gKG1idWlfY3VyIChpdGVyKSkgPT0gMQorICAgICAgICAgICAgICAmJiAodW5zaWduZWQgY2hhcikgKiBtYnVpX2N1cl9wdHIgKGl0ZXIpID09ICh1bnNpZ25lZCBjaGFyKSBjKQorICAgICAgICAgICAgcmVzdWx0ID0gbWJ1aV9jdXJfcHRyIChpdGVyKTsKKyAgICAgICAgfQorICAgICAgcmV0dXJuIChjaGFyICopIHJlc3VsdDsKKyAgICB9CisgIGVsc2UKKyAgICByZXR1cm4gc3RycmNociAoc3RyaW5nLCBjKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9tYnN3aWR0aC5jIGIvbGliL21ic3dpZHRoLmMKaW5kZXggYzllNzhkNi4uZDgxYjVjOCAxMDA2NDQKLS0tIGEvbGliL21ic3dpZHRoLmMKKysrIGIvbGliL21ic3dpZHRoLmMKQEAgLTEsMTAgKzEsMTAgQEAKIC8qIERldGVybWluZSB0aGUgbnVtYmVyIG9mIHNjcmVlbiBjb2x1bW5zIG5lZWRlZCBmb3IgYSBzdHJpbmcuCi0gICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCkBAIC0xMiwxNCArMTIsMTEgQEAKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAvKiBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPi4gICovCiAKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCisjaW5jbHVkZSA8Y29uZmlnLmg+CiAKIC8qIFNwZWNpZmljYXRpb24uICAqLwogI2luY2x1ZGUgIm1ic3dpZHRoLmgiCkBAIC0zMyw2NiArMzAsMTkgQEAKICNpbmNsdWRlIDxjdHlwZS5oPgogCiAvKiBHZXQgbWJzdGF0ZV90LCBtYnJ0b3djKCksIG1ic2luaXQoKSwgd2N3aWR0aCgpLiAgKi8KLSNpZiBIQVZFX1dDSEFSX0gKLS8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUKLSAgIDx3Y2hhci5oPi4KLSAgIEJTRC9PUyA0LjEgaGFzIGEgYnVnOiA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlCi0gICA8d2NoYXIuaD4uICAqLwotIyBpbmNsdWRlIDxzdGRpby5oPgotIyBpbmNsdWRlIDx0aW1lLmg+Ci0jIGluY2x1ZGUgPHdjaGFyLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDx3Y2hhci5oPgogCi0vKiBHZXQgaXN3cHJpbnQoKSwgaXN3Y250cmwoKS4gICovCi0jaWYgSEFWRV9XQ1RZUEVfSAotIyBpbmNsdWRlIDx3Y3R5cGUuaD4KLSNlbmRpZgotI2lmICFkZWZpbmVkIGlzd3ByaW50ICYmICFIQVZFX0lTV1BSSU5UCi0jIGRlZmluZSBpc3dwcmludCh3YykgMQotI2VuZGlmCi0jaWYgIWRlZmluZWQgaXN3Y250cmwgJiYgIUhBVkVfSVNXQ05UUkwKLSMgZGVmaW5lIGlzd2NudHJsKHdjKSAwCi0jZW5kaWYKKy8qIEdldCBpc3djbnRybCgpLiAgKi8KKyNpbmNsdWRlIDx3Y3R5cGUuaD4KIAotI2lmbmRlZiBtYnNpbml0Ci0jIGlmICFIQVZFX01CU0lOSVQKLSMgIGRlZmluZSBtYnNpbml0KHBzKSAxCi0jIGVuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX0RFQ0xfV0NXSURUSAotInRoaXMgY29uZmlndXJlLXRpbWUgZGVjbGFyYXRpb24gdGVzdCB3YXMgbm90IHJ1biIKLSNlbmRpZgotI2lmICFIQVZFX0RFQ0xfV0NXSURUSAotaW50IHdjd2lkdGggKCk7Ci0jZW5kaWYKLQotI2lmbmRlZiB3Y3dpZHRoCi0jIGlmICFIQVZFX1dDV0lEVEgKLS8qIHdjd2lkdGggZG9lc24ndCBleGlzdCwgc28gYXNzdW1lIGFsbCBwcmludGFibGUgY2hhcmFjdGVycyBoYXZlCi0gICB3aWR0aCAxLiAgKi8KLSMgIGRlZmluZSB3Y3dpZHRoKHdjKSAoKHdjKSA9PSAwID8gMCA6IGlzd3ByaW50ICh3YykgPyAxIDogLTEpCi0jIGVuZGlmCi0jZW5kaWYKLQotLyogR2V0IElTUFJJTlQuICAqLwotI2lmIGRlZmluZWQgKFNURENfSEVBREVSUykgfHwgKCFkZWZpbmVkIChpc2FzY2lpKSAmJiAhZGVmaW5lZCAoSEFWRV9JU0FTQ0lJKSkKLSMgZGVmaW5lIElOX0NUWVBFX0RPTUFJTihjKSAxCi0jZWxzZQotIyBkZWZpbmUgSU5fQ1RZUEVfRE9NQUlOKGMpIGlzYXNjaWkoYykKLSNlbmRpZgotLyogVW5kZWZpbmUgdG8gcHJvdGVjdCBhZ2FpbnN0IHRoZSBkZWZpbml0aW9uIGluIHdjdHlwZS5oIG9mIFNvbGFyaXMgMi42LiAgICovCi0jdW5kZWYgSVNQUklOVAotI2RlZmluZSBJU1BSSU5UKGMpIChJTl9DVFlQRV9ET01BSU4gKGMpICYmIGlzcHJpbnQgKGMpKQotI3VuZGVmIElTQ05UUkwKLSNkZWZpbmUgSVNDTlRSTChjKSAoSU5fQ1RZUEVfRE9NQUlOIChjKSAmJiBpc2NudHJsIChjKSkKKy8qIEdldCBJTlRfTUFYLiAgKi8KKyNpbmNsdWRlIDxsaW1pdHMuaD4KIAogLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgbmVlZGVkIHRvIHJlcHJlc2VudCB0aGUgbXVsdGlieXRlCiAgICBjaGFyYWN0ZXIgc3RyaW5nIHBvaW50ZWQgdG8gYnkgU1RSSU5HLiAgSWYgYSBub24tcHJpbnRhYmxlIGNoYXJhY3RlcgogICAgb2NjdXJzLCBhbmQgTUJTV19SRUpFQ1RfVU5QUklOVEFCTEUgaXMgc3BlY2lmaWVkLCAtMSBpcyByZXR1cm5lZC4KICAgIFdpdGggZmxhZ3MgPSBNQlNXX1JFSkVDVF9JTlZBTElEIHwgTUJTV19SRUpFQ1RfVU5QUklOVEFCTEUsIHRoaXMgaXMKLSAgIHRoZSBtdWx0aWJ5dGUgYW5hbG9ndWUgb2YgdGhlIHdjc3dpZHRoIGZ1bmN0aW9uLgotICAgSWYgU1RSSU5HIGlzIG5vdCBvZiBsZW5ndGggPCBJTlRfTUFYIC8gMiwgaW50ZWdlciBvdmVyZmxvdyBjYW4gb2NjdXIuICAqLworICAgdGhlIG11bHRpYnl0ZSBhbmFsb2d1ZSBvZiB0aGUgd2Nzd2lkdGggZnVuY3Rpb24uICAqLwogaW50CiBtYnN3aWR0aCAoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgZmxhZ3MpCiB7CkBAIC0xMDIsOCArNTIsNyBAQAogLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgbmVlZGVkIHRvIHJlcHJlc2VudCB0aGUgbXVsdGlieXRlCiAgICBjaGFyYWN0ZXIgc3RyaW5nIHBvaW50ZWQgdG8gYnkgU1RSSU5HIG9mIGxlbmd0aCBOQllURVMuICBJZiBhCiAgICBub24tcHJpbnRhYmxlIGNoYXJhY3RlciBvY2N1cnMsIGFuZCBNQlNXX1JFSkVDVF9VTlBSSU5UQUJMRSBpcwotICAgc3BlY2lmaWVkLCAtMSBpcyByZXR1cm5lZC4KLSAgIElmIE5CWVRFUyBpcyBub3QgPCBJTlRfTUFYIC8gMiwgaW50ZWdlciBvdmVyZmxvdyBjYW4gb2NjdXIuICAqLworICAgc3BlY2lmaWVkLCAtMSBpcyByZXR1cm5lZC4gICovCiBpbnQKIG1ic253aWR0aCAoY29uc3QgY2hhciAqc3RyaW5nLCBzaXplX3QgbmJ5dGVzLCBpbnQgZmxhZ3MpCiB7CkBAIC0xMTIsMTEwICs2MSwxMzMgQEAKICAgaW50IHdpZHRoOwogCiAgIHdpZHRoID0gMDsKLSNpZiBIQVZFX01CUlRPV0MKICAgaWYgKE1CX0NVUl9NQVggPiAxKQogICAgIHsKICAgICAgIHdoaWxlIChwIDwgcGxpbWl0KQotCXN3aXRjaCAoKnApCi0JICB7Ci0JICAgIGNhc2UgJyAnOiBjYXNlICchJzogY2FzZSAnIic6IGNhc2UgJyMnOiBjYXNlICclJzoKLQkgICAgY2FzZSAnJic6IGNhc2UgJ1wnJzogY2FzZSAnKCc6IGNhc2UgJyknOiBjYXNlICcqJzoKLQkgICAgY2FzZSAnKyc6IGNhc2UgJywnOiBjYXNlICctJzogY2FzZSAnLic6IGNhc2UgJy8nOgotCSAgICBjYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6Ci0JICAgIGNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKLQkgICAgY2FzZSAnOic6IGNhc2UgJzsnOiBjYXNlICc8JzogY2FzZSAnPSc6IGNhc2UgJz4nOgotCSAgICBjYXNlICc/JzoKLQkgICAgY2FzZSAnQSc6IGNhc2UgJ0InOiBjYXNlICdDJzogY2FzZSAnRCc6IGNhc2UgJ0UnOgotCSAgICBjYXNlICdGJzogY2FzZSAnRyc6IGNhc2UgJ0gnOiBjYXNlICdJJzogY2FzZSAnSic6Ci0JICAgIGNhc2UgJ0snOiBjYXNlICdMJzogY2FzZSAnTSc6IGNhc2UgJ04nOiBjYXNlICdPJzoKLQkgICAgY2FzZSAnUCc6IGNhc2UgJ1EnOiBjYXNlICdSJzogY2FzZSAnUyc6IGNhc2UgJ1QnOgotCSAgICBjYXNlICdVJzogY2FzZSAnVic6IGNhc2UgJ1cnOiBjYXNlICdYJzogY2FzZSAnWSc6Ci0JICAgIGNhc2UgJ1onOgotCSAgICBjYXNlICdbJzogY2FzZSAnXFwnOiBjYXNlICddJzogY2FzZSAnXic6IGNhc2UgJ18nOgotCSAgICBjYXNlICdhJzogY2FzZSAnYic6IGNhc2UgJ2MnOiBjYXNlICdkJzogY2FzZSAnZSc6Ci0JICAgIGNhc2UgJ2YnOiBjYXNlICdnJzogY2FzZSAnaCc6IGNhc2UgJ2knOiBjYXNlICdqJzoKLQkgICAgY2FzZSAnayc6IGNhc2UgJ2wnOiBjYXNlICdtJzogY2FzZSAnbic6IGNhc2UgJ28nOgotCSAgICBjYXNlICdwJzogY2FzZSAncSc6IGNhc2UgJ3InOiBjYXNlICdzJzogY2FzZSAndCc6Ci0JICAgIGNhc2UgJ3UnOiBjYXNlICd2JzogY2FzZSAndyc6IGNhc2UgJ3gnOiBjYXNlICd5JzoKLQkgICAgY2FzZSAneic6IGNhc2UgJ3snOiBjYXNlICd8JzogY2FzZSAnfSc6IGNhc2UgJ34nOgotCSAgICAgIC8qIFRoZXNlIGNoYXJhY3RlcnMgYXJlIHByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXJzLiAgKi8KLQkgICAgICBwKys7Ci0JICAgICAgd2lkdGgrKzsKLQkgICAgICBicmVhazsKLQkgICAgZGVmYXVsdDoKLQkgICAgICAvKiBJZiB3ZSBoYXZlIGEgbXVsdGlieXRlIHNlcXVlbmNlLCBzY2FuIGl0IHVwIHRvIGl0cyBlbmQuICAqLwotCSAgICAgIHsKLQkJbWJzdGF0ZV90IG1ic3RhdGU7Ci0JCW1lbXNldCAoJm1ic3RhdGUsIDAsIHNpemVvZiBtYnN0YXRlKTsKLQkJZG8KLQkJICB7Ci0JCSAgICB3Y2hhcl90IHdjOwotCQkgICAgc2l6ZV90IGJ5dGVzOwotCQkgICAgaW50IHc7CisgICAgICAgIHN3aXRjaCAoKnApCisgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSAnICc6IGNhc2UgJyEnOiBjYXNlICciJzogY2FzZSAnIyc6IGNhc2UgJyUnOgorICAgICAgICAgICAgY2FzZSAnJic6IGNhc2UgJ1wnJzogY2FzZSAnKCc6IGNhc2UgJyknOiBjYXNlICcqJzoKKyAgICAgICAgICAgIGNhc2UgJysnOiBjYXNlICcsJzogY2FzZSAnLSc6IGNhc2UgJy4nOiBjYXNlICcvJzoKKyAgICAgICAgICAgIGNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKKyAgICAgICAgICAgIGNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKKyAgICAgICAgICAgIGNhc2UgJzonOiBjYXNlICc7JzogY2FzZSAnPCc6IGNhc2UgJz0nOiBjYXNlICc+JzoKKyAgICAgICAgICAgIGNhc2UgJz8nOgorICAgICAgICAgICAgY2FzZSAnQSc6IGNhc2UgJ0InOiBjYXNlICdDJzogY2FzZSAnRCc6IGNhc2UgJ0UnOgorICAgICAgICAgICAgY2FzZSAnRic6IGNhc2UgJ0cnOiBjYXNlICdIJzogY2FzZSAnSSc6IGNhc2UgJ0onOgorICAgICAgICAgICAgY2FzZSAnSyc6IGNhc2UgJ0wnOiBjYXNlICdNJzogY2FzZSAnTic6IGNhc2UgJ08nOgorICAgICAgICAgICAgY2FzZSAnUCc6IGNhc2UgJ1EnOiBjYXNlICdSJzogY2FzZSAnUyc6IGNhc2UgJ1QnOgorICAgICAgICAgICAgY2FzZSAnVSc6IGNhc2UgJ1YnOiBjYXNlICdXJzogY2FzZSAnWCc6IGNhc2UgJ1knOgorICAgICAgICAgICAgY2FzZSAnWic6CisgICAgICAgICAgICBjYXNlICdbJzogY2FzZSAnXFwnOiBjYXNlICddJzogY2FzZSAnXic6IGNhc2UgJ18nOgorICAgICAgICAgICAgY2FzZSAnYSc6IGNhc2UgJ2InOiBjYXNlICdjJzogY2FzZSAnZCc6IGNhc2UgJ2UnOgorICAgICAgICAgICAgY2FzZSAnZic6IGNhc2UgJ2cnOiBjYXNlICdoJzogY2FzZSAnaSc6IGNhc2UgJ2onOgorICAgICAgICAgICAgY2FzZSAnayc6IGNhc2UgJ2wnOiBjYXNlICdtJzogY2FzZSAnbic6IGNhc2UgJ28nOgorICAgICAgICAgICAgY2FzZSAncCc6IGNhc2UgJ3EnOiBjYXNlICdyJzogY2FzZSAncyc6IGNhc2UgJ3QnOgorICAgICAgICAgICAgY2FzZSAndSc6IGNhc2UgJ3YnOiBjYXNlICd3JzogY2FzZSAneCc6IGNhc2UgJ3knOgorICAgICAgICAgICAgY2FzZSAneic6IGNhc2UgJ3snOiBjYXNlICd8JzogY2FzZSAnfSc6IGNhc2UgJ34nOgorICAgICAgICAgICAgICAvKiBUaGVzZSBjaGFyYWN0ZXJzIGFyZSBwcmludGFibGUgQVNDSUkgY2hhcmFjdGVycy4gICovCisgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgICAgd2lkdGgrKzsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAvKiBJZiB3ZSBoYXZlIGEgbXVsdGlieXRlIHNlcXVlbmNlLCBzY2FuIGl0IHVwIHRvIGl0cyBlbmQuICAqLworICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJzdGF0ZV90IG1ic3RhdGU7CisgICAgICAgICAgICAgICAgbWVtc2V0ICgmbWJzdGF0ZSwgMCwgc2l6ZW9mIG1ic3RhdGUpOworICAgICAgICAgICAgICAgIGRvCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qgd2M7CisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBieXRlczsKKyAgICAgICAgICAgICAgICAgICAgaW50IHc7CiAKLQkJICAgIGJ5dGVzID0gbWJydG93YyAoJndjLCBwLCBwbGltaXQgLSBwLCAmbWJzdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJ5dGVzID0gbWJydG93YyAoJndjLCBwLCBwbGltaXQgLSBwLCAmbWJzdGF0ZSk7CiAKLQkJICAgIGlmIChieXRlcyA9PSAoc2l6ZV90KSAtMSkKLQkJICAgICAgLyogQW4gaW52YWxpZCBtdWx0aWJ5dGUgc2VxdWVuY2Ugd2FzIGVuY291bnRlcmVkLiAgKi8KLQkJICAgICAgewotCQkJaWYgKCEoZmxhZ3MgJiBNQlNXX1JFSkVDVF9JTlZBTElEKSkKLQkJCSAgewotCQkJICAgIHArKzsKLQkJCSAgICB3aWR0aCsrOwotCQkJICAgIGJyZWFrOwotCQkJICB9Ci0JCQllbHNlCi0JCQkgIHJldHVybiAtMTsKLQkJICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZXMgPT0gKHNpemVfdCkgLTEpCisgICAgICAgICAgICAgICAgICAgICAgLyogQW4gaW52YWxpZCBtdWx0aWJ5dGUgc2VxdWVuY2Ugd2FzIGVuY291bnRlcmVkLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShmbGFncyAmIE1CU1dfUkVKRUNUX0lOVkFMSUQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICAgIH0KIAotCQkgICAgaWYgKGJ5dGVzID09IChzaXplX3QpIC0yKQotCQkgICAgICAvKiBBbiBpbmNvbXBsZXRlIG11bHRpYnl0ZSBjaGFyYWN0ZXIgYXQgdGhlIGVuZC4gICovCi0JCSAgICAgIHsKLQkJCWlmICghKGZsYWdzICYgTUJTV19SRUpFQ1RfSU5WQUxJRCkpCi0JCQkgIHsKLQkJCSAgICBwID0gcGxpbWl0OwotCQkJICAgIHdpZHRoKys7Ci0JCQkgICAgYnJlYWs7Ci0JCQkgIH0KLQkJCWVsc2UKLQkJCSAgcmV0dXJuIC0xOwotCQkgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChieXRlcyA9PSAoc2l6ZV90KSAtMikKKyAgICAgICAgICAgICAgICAgICAgICAvKiBBbiBpbmNvbXBsZXRlIG11bHRpYnl0ZSBjaGFyYWN0ZXIgYXQgdGhlIGVuZC4gICovCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoZmxhZ3MgJiBNQlNXX1JFSkVDVF9JTlZBTElEKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBwbGltaXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgICAgfQogCi0JCSAgICBpZiAoYnl0ZXMgPT0gMCkKLQkJICAgICAgLyogQSBudWxsIHdpZGUgY2hhcmFjdGVyIHdhcyBlbmNvdW50ZXJlZC4gICovCi0JCSAgICAgIGJ5dGVzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGVzID09IDApCisgICAgICAgICAgICAgICAgICAgICAgLyogQSBudWxsIHdpZGUgY2hhcmFjdGVyIHdhcyBlbmNvdW50ZXJlZC4gICovCisgICAgICAgICAgICAgICAgICAgICAgYnl0ZXMgPSAxOwogCi0JCSAgICB3ID0gd2N3aWR0aCAod2MpOwotCQkgICAgaWYgKHcgPj0gMCkKLQkJICAgICAgLyogQSBwcmludGFibGUgbXVsdGlieXRlIGNoYXJhY3Rlci4gICovCi0JCSAgICAgIHdpZHRoICs9IHc7Ci0JCSAgICBlbHNlCi0JCSAgICAgIC8qIEFuIHVucHJpbnRhYmxlIG11bHRpYnl0ZSBjaGFyYWN0ZXIuICAqLwotCQkgICAgICBpZiAoIShmbGFncyAmIE1CU1dfUkVKRUNUX1VOUFJJTlRBQkxFKSkKLQkJCXdpZHRoICs9IChpc3djbnRybCAod2MpID8gMCA6IDEpOwotCQkgICAgICBlbHNlCi0JCQlyZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgIHcgPSB3Y3dpZHRoICh3Yyk7CisgICAgICAgICAgICAgICAgICAgIGlmICh3ID49IDApCisgICAgICAgICAgICAgICAgICAgICAgLyogQSBwcmludGFibGUgbXVsdGlieXRlIGNoYXJhY3Rlci4gICovCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHcgPiBJTlRfTUFYIC0gd2lkdGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3ZlcmZsb3c7CisgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCArPSB3OworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIC8qIEFuIHVucHJpbnRhYmxlIG11bHRpYnl0ZSBjaGFyYWN0ZXIuICAqLworICAgICAgICAgICAgICAgICAgICAgIGlmICghKGZsYWdzICYgTUJTV19SRUpFQ1RfVU5QUklOVEFCTEUpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzd2NudHJsICh3YykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoID09IElOVF9NQVgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3ZlcmZsb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAKLQkJICAgIHAgKz0gYnl0ZXM7Ci0JCSAgfQotCQl3aGlsZSAoISBtYnNpbml0ICgmbWJzdGF0ZSkpOwotCSAgICAgIH0KLQkgICAgICBicmVhazsKLQkgIH0KKyAgICAgICAgICAgICAgICAgICAgcCArPSBieXRlczsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3aGlsZSAoISBtYnNpbml0ICgmbWJzdGF0ZSkpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KICAgICAgIHJldHVybiB3aWR0aDsKICAgICB9Ci0jZW5kaWYKIAogICB3aGlsZSAocCA8IHBsaW1pdCkKICAgICB7CiAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAodW5zaWduZWQgY2hhcikgKnArKzsKIAotICAgICAgaWYgKElTUFJJTlQgKGMpKQotCXdpZHRoKys7CisgICAgICBpZiAoaXNwcmludCAoYykpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAod2lkdGggPT0gSU5UX01BWCkKKyAgICAgICAgICAgIGdvdG8gb3ZlcmZsb3c7CisgICAgICAgICAgd2lkdGgrKzsKKyAgICAgICAgfQogICAgICAgZWxzZSBpZiAoIShmbGFncyAmIE1CU1dfUkVKRUNUX1VOUFJJTlRBQkxFKSkKLQl3aWR0aCArPSAoSVNDTlRSTCAoYykgPyAwIDogMSk7CisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIWlzY250cmwgKGMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAod2lkdGggPT0gSU5UX01BWCkKKyAgICAgICAgICAgICAgICBnb3RvIG92ZXJmbG93OworICAgICAgICAgICAgICB3aWR0aCsrOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICBlbHNlCi0JcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICByZXR1cm4gd2lkdGg7CisKKyBvdmVyZmxvdzoKKyAgcmV0dXJuIElOVF9NQVg7CiB9CmRpZmYgLS1naXQgYS9saWIvbWJzd2lkdGguaCBiL2xpYi9tYnN3aWR0aC5oCmluZGV4IDE5MzVlMGEuLjY5MGE1YTcgMTAwNjQ0Ci0tLSBhL2xpYi9tYnN3aWR0aC5oCisrKyBiL2xpYi9tYnN3aWR0aC5oCkBAIC0xLDEwICsxLDEwIEBACiAvKiBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiBzY3JlZW4gY29sdW1ucyBuZWVkZWQgZm9yIGEgc3RyaW5nLgotICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCwgMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCkBAIC0xMiw4ICsxMiw3IEBACiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogI2luY2x1ZGUgPHN0ZGRlZi5oPgogCkBAIC0zMCw3ICsyOSw3IEBACiAjZW5kaWYKIAogCi0jaWZkZWYJX19jcGx1c3BsdXMKKyNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIApAQCAtNDQsNyArNDMsNyBAQAogLyogSWYgdGhpcyBiaXQgaXMgc2V0LCByZXR1cm4gLTEgdXBvbiBmaW5kaW5nIGEgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXIuCiAgICBPdGhlcndpc2UsIGFzc3VtZSB1bnByaW50YWJsZSBjaGFyYWN0ZXJzIGhhdmUgd2lkdGggMCBpZiB0aGV5IGFyZQogICAgY29udHJvbCBjaGFyYWN0ZXJzIGFuZCAxIG90aGVyd2lzZS4gICovCi0jZGVmaW5lIE1CU1dfUkVKRUNUX1VOUFJJTlRBQkxFCTIKKyNkZWZpbmUgTUJTV19SRUpFQ1RfVU5QUklOVEFCTEUgMgogCiAKIC8qIFJldHVybnMgdGhlIG51bWJlciBvZiBzY3JlZW4gY29sdW1ucyBuZWVkZWQgZm9yIFNUUklORy4gICovCkBAIC01Niw2ICs1NSw2IEBACiBleHRlcm4gaW50IG1ic253aWR0aCAoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBpbnQgZmxhZ3MpOwogCiAKLSNpZmRlZglfX2NwbHVzcGx1cworI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9tYnVpdGVyLmMgYi9saWIvbWJ1aXRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNjc1ODAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbWJ1aXRlci5jCkBAIC0wLDAgKzEsMyBAQAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2RlZmluZSBNQlVJVEVSX0lOTElORSBfR0xfRVhURVJOX0lOTElORQorI2luY2x1ZGUgIm1idWl0ZXIuaCIKZGlmZiAtLWdpdCBhL2xpYi9tYnVpdGVyLmggYi9saWIvbWJ1aXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxOTRkOWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbWJ1aXRlci5oCkBAIC0wLDAgKzEsMjI5IEBACisvKiBJdGVyYXRpbmcgdGhyb3VnaCBtdWx0aWJ5dGUgc3RyaW5nczogbWFjcm9zIGZvciBtdWx0aS1ieXRlIGVuY29kaW5ncy4KKyAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwNSwgMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPi4gICovCisKKy8qIFRoZSBtYWNyb3MgaW4gdGhpcyBmaWxlIGltcGxlbWVudCBmb3J3YXJkIGl0ZXJhdGlvbiB0aHJvdWdoIGEKKyAgIG11bHRpLWJ5dGUgc3RyaW5nLCB3aXRob3V0IGtub3dpbmcgaXRzIGxlbmd0aCBhLXByaW9yaS4KKworICAgV2l0aCB0aGVzZSBtYWNyb3MsIGFuIGl0ZXJhdGlvbiBsb29wIHRoYXQgbG9va3MgbGlrZQorCisgICAgICBjaGFyICppdGVyOworICAgICAgZm9yIChpdGVyID0gYnVmOyAqaXRlciAhPSAnXDAnOyBpdGVyKyspCisgICAgICAgIHsKKyAgICAgICAgICBkb19zb21ldGhpbmcgKCppdGVyKTsKKyAgICAgICAgfQorCisgICBiZWNvbWVzCisKKyAgICAgIG1idWlfaXRlcmF0b3JfdCBpdGVyOworICAgICAgZm9yIChtYnVpX2luaXQgKGl0ZXIsIGJ1Zik7IG1idWlfYXZhaWwgKGl0ZXIpOyBtYnVpX2FkdmFuY2UgKGl0ZXIpKQorICAgICAgICB7CisgICAgICAgICAgZG9fc29tZXRoaW5nIChtYnVpX2N1cl9wdHIgKGl0ZXIpLCBtYl9sZW4gKG1idWlfY3VyIChpdGVyKSkpOworICAgICAgICB9CisKKyAgIFRoZSBiZW5lZml0IG9mIHRoZXNlIG1hY3JvcyBvdmVyIHBsYWluIHVzZSBvZiBtYnJ0b3djIGlzOgorICAgLSBIYW5kbGluZyBvZiBpbnZhbGlkIG11bHRpYnl0ZSBzZXF1ZW5jZXMgaXMgcG9zc2libGUgd2l0aG91dAorICAgICBtYWtpbmcgdGhlIGNvZGUgbW9yZSBjb21wbGljYXRlZCwgd2hpbGUgc3RpbGwgcHJlc2VydmluZyB0aGUKKyAgICAgaW52YWxpZCBtdWx0aWJ5dGUgc2VxdWVuY2VzLgorCisgICBDb21wYXJlZCB0byBtYml0ZXIuaCwgdGhlIG1hY3JvcyBoZXJlIGRvbid0IG5lZWQgdG8ga25vdyB0aGUgc3RyaW5nJ3MKKyAgIGxlbmd0aCBhLXByaW9yaS4gIFRoZSBkb3duc2lkZSBpcyB0aGF0IGF0IGVhY2ggc3RlcCwgdGhlIGxvb2stYWhlYWQKKyAgIHRoYXQgZ3VhcmRzIGFnYWluc3Qgb3ZlcnJ1bm5pbmcgdGhlIHRlcm1pbmF0aW5nICdcMCcgaXMgbW9yZSBleHBlbnNpdmUuCisgICBUaGUgbWJ1aV8qIG1hY3JvcyBhcmUgdGhlcmVmb3JlIHN1aXRhYmxlIHdoZW4gdGhlcmUgaXMgYSBoaWdoIHByb2JhYmlsaXR5CisgICB0aGF0IG9ubHkgdGhlIGZpcnN0IGZldyBtdWx0aWJ5dGUgY2hhcmFjdGVycyBuZWVkIHRvIGJlIGluc3BlY3RlZC4KKyAgIFdoZXJlYXMgdGhlIG1iaV8qIG1hY3JvcyBhcmUgYmV0dGVyIGlmIHVzdWFsbHkgdGhlIGl0ZXJhdGlvbiBydW5zCisgICB0aHJvdWdoIHRoZSBlbnRpcmUgc3RyaW5nLgorCisgICBtYnVpX2l0ZXJhdG9yX3QKKyAgICAgaXMgYSB0eXBlIHVzYWJsZSBmb3IgdmFyaWFibGUgZGVjbGFyYXRpb25zLgorCisgICBtYnVpX2luaXQgKGl0ZXIsIHN0YXJ0cHRyKQorICAgICBpbml0aWFsaXplcyB0aGUgaXRlcmF0b3IsIHN0YXJ0aW5nIGF0IHN0YXJ0cHRyLgorCisgICBtYnVpX2F2YWlsIChpdGVyKQorICAgICByZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIG1vcmUgbXVsdGlieXRlIGNoYXJhY3RlcnMgYXZhaWxhYmxlIGJlZm9yZQorICAgICB0aGUgZW5kIG9mIHN0cmluZyBpcyByZWFjaGVkLiBJbiB0aGlzIGNhc2UsIG1idWlfY3VyIChpdGVyKSBpcworICAgICBpbml0aWFsaXplZCB0byB0aGUgbmV4dCBtdWx0aWJ5dGUgY2hhcmFjdGVyLgorCisgICBtYnVpX2FkdmFuY2UgKGl0ZXIpCisgICAgIGFkdmFuY2VzIHRoZSBpdGVyYXRvciBieSBvbmUgbXVsdGlieXRlIGNoYXJhY3Rlci4KKworICAgbWJ1aV9jdXIgKGl0ZXIpCisgICAgIHJldHVybnMgdGhlIGN1cnJlbnQgbXVsdGlieXRlIGNoYXJhY3Rlciwgb2YgdHlwZSBtYmNoYXJfdC4gIEFsbCB0aGUKKyAgICAgbWFjcm9zIGRlZmluZWQgaW4gbWJjaGFyLmggY2FuIGJlIHVzZWQgb24gaXQuCisKKyAgIG1idWlfY3VyX3B0ciAoaXRlcikKKyAgICAgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjdXJyZW50IG11bHRpYnl0ZSBjaGFyYWN0ZXIuCisKKyAgIG1idWlfcmVsb2MgKGl0ZXIsIHB0cmRpZmYpCisgICAgIHJlbG9jYXRlcyBpdGVyYXRvciB3aGVuIHRoZSBzdHJpbmcgaXMgbW92ZWQgYnkgcHRyZGlmZiBieXRlcy4KKworICAgbWJ1aV9jb3B5ICgmZGVzdGl0ZXIsICZzcmNpdGVyKQorICAgICBjb3BpZXMgc3JjaXRlciB0byBkZXN0aXRlci4KKworICAgSGVyZSBhcmUgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZXMgb2YgdGhlIG1hY3Jvcy4KKworICAgZXh0ZXJuIHZvaWQgICAgICAgICAgbWJ1aV9pbml0IChtYnVpX2l0ZXJhdG9yX3QgaXRlciwgY29uc3QgY2hhciAqc3RhcnRwdHIpOworICAgZXh0ZXJuIGJvb2wgICAgICAgICAgbWJ1aV9hdmFpbCAobWJ1aV9pdGVyYXRvcl90IGl0ZXIpOworICAgZXh0ZXJuIHZvaWQgICAgICAgICAgbWJ1aV9hZHZhbmNlIChtYnVpX2l0ZXJhdG9yX3QgaXRlcik7CisgICBleHRlcm4gbWJjaGFyX3QgICAgICBtYnVpX2N1ciAobWJ1aV9pdGVyYXRvcl90IGl0ZXIpOworICAgZXh0ZXJuIGNvbnN0IGNoYXIgKiAgbWJ1aV9jdXJfcHRyIChtYnVpX2l0ZXJhdG9yX3QgaXRlcik7CisgICBleHRlcm4gdm9pZCAgICAgICAgICBtYnVpX3JlbG9jIChtYnVpX2l0ZXJhdG9yX3QgaXRlciwgcHRyZGlmZl90IHB0cmRpZmYpOworICAgZXh0ZXJuIHZvaWQgICAgICAgICAgbWJ1aV9jb3B5IChtYnVpX2l0ZXJhdG9yX3QgKm5ldywgY29uc3QgbWJ1aV9pdGVyYXRvcl90ICpvbGQpOworICovCisKKyNpZm5kZWYgX01CVUlURVJfSAorI2RlZmluZSBfTUJVSVRFUl9IIDEKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQorICAgPHdjaGFyLmg+LgorICAgQlNEL09TIDQuMSBoYXMgYSBidWc6IDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUKKyAgIDx3Y2hhci5oPi4gICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKworI2luY2x1ZGUgIm1iY2hhci5oIgorI2luY2x1ZGUgInN0cm5sZW4xLmgiCisKK19HTF9JTkxJTkVfSEVBREVSX0JFR0lOCisjaWZuZGVmIE1CVUlURVJfSU5MSU5FCisjIGRlZmluZSBNQlVJVEVSX0lOTElORSBfR0xfSU5MSU5FCisjZW5kaWYKKworc3RydWN0IG1idWl0ZXJfbXVsdGkKK3sKKyAgYm9vbCBpbl9zaGlmdDsgICAgICAgIC8qIHRydWUgaWYgbmV4dCBieXRlIG1heSBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgQVNDSUkgKi8KKyAgbWJzdGF0ZV90IHN0YXRlOyAgICAgIC8qIGlmIGluX3NoaWZ0OiBjdXJyZW50IHNoaWZ0IHN0YXRlICovCisgIGJvb2wgbmV4dF9kb25lOyAgICAgICAvKiB0cnVlIGlmIG1idWlfYXZhaWwgaGFzIGFscmVhZHkgZmlsbGVkIHRoZSBmb2xsb3dpbmcgKi8KKyAgc3RydWN0IG1iY2hhciBjdXI7ICAgIC8qIHRoZSBjdXJyZW50IGNoYXJhY3RlcjoKKyAgICAgICAgY29uc3QgY2hhciAqY3VyLnB0ciAgICAgICAgICAgICBwb2ludGVyIHRvIGN1cnJlbnQgY2hhcmFjdGVyCisgICAgICAgIFRoZSBmb2xsb3dpbmcgYXJlIG9ubHkgdmFsaWQgYWZ0ZXIgbWJ1aV9hdmFpbC4KKyAgICAgICAgc2l6ZV90IGN1ci5ieXRlcyAgICAgICAgICAgICAgICBudW1iZXIgb2YgYnl0ZXMgb2YgY3VycmVudCBjaGFyYWN0ZXIKKyAgICAgICAgYm9vbCBjdXIud2NfdmFsaWQgICAgICAgICAgICAgICB0cnVlIGlmIHdjIGlzIGEgdmFsaWQgd2lkZSBjaGFyYWN0ZXIKKyAgICAgICAgd2NoYXJfdCBjdXIud2MgICAgICAgICAgICAgICAgICBpZiB3Y192YWxpZDogdGhlIGN1cnJlbnQgY2hhcmFjdGVyCisgICAgICAgICovCit9OworCitNQlVJVEVSX0lOTElORSB2b2lkCittYnVpdGVyX211bHRpX25leHQgKHN0cnVjdCBtYnVpdGVyX211bHRpICppdGVyKQoreworICBpZiAoaXRlci0+bmV4dF9kb25lKQorICAgIHJldHVybjsKKyAgaWYgKGl0ZXItPmluX3NoaWZ0KQorICAgIGdvdG8gd2l0aF9zaGlmdDsKKyAgLyogSGFuZGxlIG1vc3QgQVNDSUkgY2hhcmFjdGVycyBxdWlja2x5LCB3aXRob3V0IGNhbGxpbmcgbWJydG93YygpLiAgKi8KKyAgaWYgKGlzX2Jhc2ljICgqaXRlci0+Y3VyLnB0cikpCisgICAgeworICAgICAgLyogVGhlc2UgY2hhcmFjdGVycyBhcmUgcGFydCBvZiB0aGUgYmFzaWMgY2hhcmFjdGVyIHNldC4gIElTTyBDIDk5CisgICAgICAgICBndWFyYW50ZWVzIHRoYXQgdGhlaXIgd2lkZSBjaGFyYWN0ZXIgY29kZSBpcyBpZGVudGljYWwgdG8gdGhlaXIKKyAgICAgICAgIGNoYXIgY29kZS4gICovCisgICAgICBpdGVyLT5jdXIuYnl0ZXMgPSAxOworICAgICAgaXRlci0+Y3VyLndjID0gKml0ZXItPmN1ci5wdHI7CisgICAgICBpdGVyLT5jdXIud2NfdmFsaWQgPSB0cnVlOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGFzc2VydCAobWJzaW5pdCAoJml0ZXItPnN0YXRlKSk7CisgICAgICBpdGVyLT5pbl9zaGlmdCA9IHRydWU7CisgICAgd2l0aF9zaGlmdDoKKyAgICAgIGl0ZXItPmN1ci5ieXRlcyA9IG1icnRvd2MgKCZpdGVyLT5jdXIud2MsIGl0ZXItPmN1ci5wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJubGVuMSAoaXRlci0+Y3VyLnB0ciwgTUJfQ1VSX01BWCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXRlci0+c3RhdGUpOworICAgICAgaWYgKGl0ZXItPmN1ci5ieXRlcyA9PSAoc2l6ZV90KSAtMSkKKyAgICAgICAgeworICAgICAgICAgIC8qIEFuIGludmFsaWQgbXVsdGlieXRlIHNlcXVlbmNlIHdhcyBlbmNvdW50ZXJlZC4gICovCisgICAgICAgICAgaXRlci0+Y3VyLmJ5dGVzID0gMTsKKyAgICAgICAgICBpdGVyLT5jdXIud2NfdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAvKiBXaGV0aGVyIHRvIHNldCBpdGVyLT5pbl9zaGlmdCA9IGZhbHNlIGFuZCByZXNldCBpdGVyLT5zdGF0ZQorICAgICAgICAgICAgIG9yIG5vdCBpcyBub3QgdmVyeSBpbXBvcnRhbnQ7IHRoZSBzdHJpbmcgaXMgYm9ndXMgYW55d2F5LiAgKi8KKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoaXRlci0+Y3VyLmJ5dGVzID09IChzaXplX3QpIC0yKQorICAgICAgICB7CisgICAgICAgICAgLyogQW4gaW5jb21wbGV0ZSBtdWx0aWJ5dGUgY2hhcmFjdGVyIGF0IHRoZSBlbmQuICAqLworICAgICAgICAgIGl0ZXItPmN1ci5ieXRlcyA9IHN0cmxlbiAoaXRlci0+Y3VyLnB0cik7CisgICAgICAgICAgaXRlci0+Y3VyLndjX3ZhbGlkID0gZmFsc2U7CisgICAgICAgICAgLyogV2hldGhlciB0byBzZXQgaXRlci0+aW5fc2hpZnQgPSBmYWxzZSBhbmQgcmVzZXQgaXRlci0+c3RhdGUKKyAgICAgICAgICAgICBvciBub3QgaXMgbm90IGltcG9ydGFudDsgdGhlIHN0cmluZyBlbmQgaXMgcmVhY2hlZCBhbnl3YXkuICAqLworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoaXRlci0+Y3VyLmJ5dGVzID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIEEgbnVsbCB3aWRlIGNoYXJhY3RlciB3YXMgZW5jb3VudGVyZWQuICAqLworICAgICAgICAgICAgICBpdGVyLT5jdXIuYnl0ZXMgPSAxOworICAgICAgICAgICAgICBhc3NlcnQgKCppdGVyLT5jdXIucHRyID09ICdcMCcpOworICAgICAgICAgICAgICBhc3NlcnQgKGl0ZXItPmN1ci53YyA9PSAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpdGVyLT5jdXIud2NfdmFsaWQgPSB0cnVlOworCisgICAgICAgICAgLyogV2hlbiBpbiB0aGUgaW5pdGlhbCBzdGF0ZSwgd2UgY2FuIGdvIGJhY2sgdHJlYXRpbmcgQVNDSUkKKyAgICAgICAgICAgICBjaGFyYWN0ZXJzIG1vcmUgcXVpY2tseS4gICovCisgICAgICAgICAgaWYgKG1ic2luaXQgKCZpdGVyLT5zdGF0ZSkpCisgICAgICAgICAgICBpdGVyLT5pbl9zaGlmdCA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorICBpdGVyLT5uZXh0X2RvbmUgPSB0cnVlOworfQorCitNQlVJVEVSX0lOTElORSB2b2lkCittYnVpdGVyX211bHRpX3JlbG9jIChzdHJ1Y3QgbWJ1aXRlcl9tdWx0aSAqaXRlciwgcHRyZGlmZl90IHB0cmRpZmYpCit7CisgIGl0ZXItPmN1ci5wdHIgKz0gcHRyZGlmZjsKK30KKworTUJVSVRFUl9JTkxJTkUgdm9pZAorbWJ1aXRlcl9tdWx0aV9jb3B5IChzdHJ1Y3QgbWJ1aXRlcl9tdWx0aSAqbmV3X2l0ZXIsIGNvbnN0IHN0cnVjdCBtYnVpdGVyX211bHRpICpvbGRfaXRlcikKK3sKKyAgaWYgKChuZXdfaXRlci0+aW5fc2hpZnQgPSBvbGRfaXRlci0+aW5fc2hpZnQpKQorICAgIG1lbWNweSAoJm5ld19pdGVyLT5zdGF0ZSwgJm9sZF9pdGVyLT5zdGF0ZSwgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKyAgZWxzZQorICAgIG1lbXNldCAoJm5ld19pdGVyLT5zdGF0ZSwgMCwgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKyAgbmV3X2l0ZXItPm5leHRfZG9uZSA9IG9sZF9pdGVyLT5uZXh0X2RvbmU7CisgIG1iX2NvcHkgKCZuZXdfaXRlci0+Y3VyLCAmb2xkX2l0ZXItPmN1cik7Cit9CisKKy8qIEl0ZXJhdGlvbiBtYWNyb3MuICAqLwordHlwZWRlZiBzdHJ1Y3QgbWJ1aXRlcl9tdWx0aSBtYnVpX2l0ZXJhdG9yX3Q7CisjZGVmaW5lIG1idWlfaW5pdChpdGVyLCBzdGFydHB0cikgXAorICAoKGl0ZXIpLmN1ci5wdHIgPSAoc3RhcnRwdHIpLCBcCisgICAoaXRlcikuaW5fc2hpZnQgPSBmYWxzZSwgbWVtc2V0ICgmKGl0ZXIpLnN0YXRlLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpLCBcCisgICAoaXRlcikubmV4dF9kb25lID0gZmFsc2UpCisjZGVmaW5lIG1idWlfYXZhaWwoaXRlcikgXAorICAobWJ1aXRlcl9tdWx0aV9uZXh0ICgmKGl0ZXIpKSwgIW1iX2lzbnVsICgoaXRlcikuY3VyKSkKKyNkZWZpbmUgbWJ1aV9hZHZhbmNlKGl0ZXIpIFwKKyAgKChpdGVyKS5jdXIucHRyICs9IChpdGVyKS5jdXIuYnl0ZXMsIChpdGVyKS5uZXh0X2RvbmUgPSBmYWxzZSkKKworLyogQWNjZXNzIHRvIHRoZSBjdXJyZW50IGNoYXJhY3Rlci4gICovCisjZGVmaW5lIG1idWlfY3VyKGl0ZXIpIChpdGVyKS5jdXIKKyNkZWZpbmUgbWJ1aV9jdXJfcHRyKGl0ZXIpIChpdGVyKS5jdXIucHRyCisKKy8qIFJlbG9jYXRpb24uICAqLworI2RlZmluZSBtYnVpX3JlbG9jKGl0ZXIsIHB0cmRpZmYpIG1idWl0ZXJfbXVsdGlfcmVsb2MgKCZpdGVyLCBwdHJkaWZmKQorCisvKiBDb3B5aW5nIGFuIGl0ZXJhdG9yLiAgKi8KKyNkZWZpbmUgbWJ1aV9jb3B5IG1idWl0ZXJfbXVsdGlfY29weQorCitfR0xfSU5MSU5FX0hFQURFUl9FTkQKKworI2VuZGlmIC8qIF9NQlVJVEVSX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9tZW1jaHIuYyBiL2xpYi9tZW1jaHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGZiMGVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL21lbWNoci5jCkBAIC0wLDAgKzEsMTcyIEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTMsIDE5OTYtMTk5NywgMTk5OS0yMDAwLCAyMDAzLTIwMDQsIDIwMDYsIDIwMDgtMjAxMgorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIEJhc2VkIG9uIHN0cmxlbiBpbXBsZW1lbnRhdGlvbiBieSBUb3Jiam9ybiBHcmFubHVuZCAodGVnZUBzaWNzLnNlKSwKKyAgIHdpdGggaGVscCBmcm9tIERhbiBTYWhsaW4gKGRhbkBzaWNzLnNlKSBhbmQKKyAgIGNvbW1lbnRhcnkgYnkgSmltIEJsYW5keSAoamltYkBhaS5taXQuZWR1KTsKKyAgIGFkYXB0YXRpb24gdG8gbWVtY2hyIHN1Z2dlc3RlZCBieSBEaWNrIEthcnBpbnNraSAoZGlja0BjY2EudWNzZi5lZHUpLAorICAgYW5kIGltcGxlbWVudGVkIGJ5IFJvbGFuZCBNY0dyYXRoIChyb2xhbmRAYWkubWl0LmVkdSkuCisKK05PVEU6IFRoZSBjYW5vbmljYWwgc291cmNlIG9mIHRoaXMgZmlsZSBpcyBtYWludGFpbmVkIHdpdGggdGhlIEdOVSBDIExpYnJhcnkuCitCdWdzIGNhbiBiZSByZXBvcnRlZCB0byBidWctZ2xpYmNAcHJlcC5haS5taXQuZWR1LgorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIGFueQorbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBfTElCQworIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2lmIGRlZmluZWQgX0xJQkMKKyMgaW5jbHVkZSA8bWVtY29weS5oPgorI2Vsc2UKKyMgZGVmaW5lIHJlZ19jaGFyIGNoYXIKKyNlbmRpZgorCisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpZiBIQVZFX0JQX1NZTV9IIHx8IGRlZmluZWQgX0xJQkMKKyMgaW5jbHVkZSA8YnAtc3ltLmg+CisjZWxzZQorIyBkZWZpbmUgQlBfU1lNKHN5bSkgc3ltCisjZW5kaWYKKworI3VuZGVmIF9fbWVtY2hyCisjaWZkZWYgX0xJQkMKKyMgdW5kZWYgbWVtY2hyCisjZW5kaWYKKworI2lmbmRlZiB3ZWFrX2FsaWFzCisjIGRlZmluZSBfX21lbWNociBtZW1jaHIKKyNlbmRpZgorCisvKiBTZWFyY2ggbm8gbW9yZSB0aGFuIE4gYnl0ZXMgb2YgUyBmb3IgQy4gICovCit2b2lkICoKK19fbWVtY2hyICh2b2lkIGNvbnN0ICpzLCBpbnQgY19pbiwgc2l6ZV90IG4pCit7CisgIC8qIE9uIDMyLWJpdCBoYXJkd2FyZSwgY2hvb3NpbmcgbG9uZ3dvcmQgdG8gYmUgYSAzMi1iaXQgdW5zaWduZWQKKyAgICAgbG9uZyBpbnN0ZWFkIG9mIGEgNjQtYml0IHVpbnRtYXhfdCB0ZW5kcyB0byBnaXZlIGJldHRlcgorICAgICBwZXJmb3JtYW5jZS4gIE9uIDY0LWJpdCBoYXJkd2FyZSwgdW5zaWduZWQgbG9uZyBpcyBnZW5lcmFsbHkgNjQKKyAgICAgYml0cyBhbHJlYWR5LiAgQ2hhbmdlIHRoaXMgdHlwZWRlZiB0byBleHBlcmltZW50IHdpdGgKKyAgICAgcGVyZm9ybWFuY2UuICAqLworICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IGxvbmd3b3JkOworCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNoYXJfcHRyOworICBjb25zdCBsb25nd29yZCAqbG9uZ3dvcmRfcHRyOworICBsb25nd29yZCByZXBlYXRlZF9vbmU7CisgIGxvbmd3b3JkIHJlcGVhdGVkX2M7CisgIHVuc2lnbmVkIHJlZ19jaGFyIGM7CisKKyAgYyA9ICh1bnNpZ25lZCBjaGFyKSBjX2luOworCisgIC8qIEhhbmRsZSB0aGUgZmlyc3QgZmV3IGJ5dGVzIGJ5IHJlYWRpbmcgb25lIGJ5dGUgYXQgYSB0aW1lLgorICAgICBEbyB0aGlzIHVudGlsIENIQVJfUFRSIGlzIGFsaWduZWQgb24gYSBsb25nd29yZCBib3VuZGFyeS4gICovCisgIGZvciAoY2hhcl9wdHIgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBzOworICAgICAgIG4gPiAwICYmIChzaXplX3QpIGNoYXJfcHRyICUgc2l6ZW9mIChsb25nd29yZCkgIT0gMDsKKyAgICAgICAtLW4sICsrY2hhcl9wdHIpCisgICAgaWYgKCpjaGFyX3B0ciA9PSBjKQorICAgICAgcmV0dXJuICh2b2lkICopIGNoYXJfcHRyOworCisgIGxvbmd3b3JkX3B0ciA9IChjb25zdCBsb25nd29yZCAqKSBjaGFyX3B0cjsKKworICAvKiBBbGwgdGhlc2UgZWx1Y2lkYXRvcnkgY29tbWVudHMgcmVmZXIgdG8gNC1ieXRlIGxvbmd3b3JkcywKKyAgICAgYnV0IHRoZSB0aGVvcnkgYXBwbGllcyBlcXVhbGx5IHdlbGwgdG8gYW55IHNpemUgbG9uZ3dvcmRzLiAgKi8KKworICAvKiBDb21wdXRlIGF1eGlsaWFyeSBsb25nd29yZCB2YWx1ZXM6CisgICAgIHJlcGVhdGVkX29uZSBpcyBhIHZhbHVlIHdoaWNoIGhhcyBhIDEgaW4gZXZlcnkgYnl0ZS4KKyAgICAgcmVwZWF0ZWRfYyBoYXMgYyBpbiBldmVyeSBieXRlLiAgKi8KKyAgcmVwZWF0ZWRfb25lID0gMHgwMTAxMDEwMTsKKyAgcmVwZWF0ZWRfYyA9IGMgfCAoYyA8PCA4KTsKKyAgcmVwZWF0ZWRfYyB8PSByZXBlYXRlZF9jIDw8IDE2OworICBpZiAoMHhmZmZmZmZmZlUgPCAobG9uZ3dvcmQpIC0xKQorICAgIHsKKyAgICAgIHJlcGVhdGVkX29uZSB8PSByZXBlYXRlZF9vbmUgPDwgMzEgPDwgMTsKKyAgICAgIHJlcGVhdGVkX2MgfD0gcmVwZWF0ZWRfYyA8PCAzMSA8PCAxOworICAgICAgaWYgKDggPCBzaXplb2YgKGxvbmd3b3JkKSkKKyAgICAgICAgeworICAgICAgICAgIHNpemVfdCBpOworCisgICAgICAgICAgZm9yIChpID0gNjQ7IGkgPCBzaXplb2YgKGxvbmd3b3JkKSAqIDg7IGkgKj0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmVwZWF0ZWRfb25lIHw9IHJlcGVhdGVkX29uZSA8PCBpOworICAgICAgICAgICAgICByZXBlYXRlZF9jIHw9IHJlcGVhdGVkX2MgPDwgaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAvKiBJbnN0ZWFkIG9mIHRoZSB0cmFkaXRpb25hbCBsb29wIHdoaWNoIHRlc3RzIGVhY2ggYnl0ZSwgd2Ugd2lsbCB0ZXN0IGEKKyAgICAgbG9uZ3dvcmQgYXQgYSB0aW1lLiAgVGhlIHRyaWNreSBwYXJ0IGlzIHRlc3RpbmcgaWYgKmFueSBvZiB0aGUgZm91cioKKyAgICAgYnl0ZXMgaW4gdGhlIGxvbmd3b3JkIGluIHF1ZXN0aW9uIGFyZSBlcXVhbCB0byBjLiAgV2UgZmlyc3QgdXNlIGFuIHhvcgorICAgICB3aXRoIHJlcGVhdGVkX2MuICBUaGlzIHJlZHVjZXMgdGhlIHRhc2sgdG8gdGVzdGluZyB3aGV0aGVyICphbnkgb2YgdGhlCisgICAgIGZvdXIqIGJ5dGVzIGluIGxvbmd3b3JkMSBpcyB6ZXJvLgorCisgICAgIFdlIGNvbXB1dGUgdG1wID0KKyAgICAgICAoKGxvbmd3b3JkMSAtIHJlcGVhdGVkX29uZSkgJiB+bG9uZ3dvcmQxKSAmIChyZXBlYXRlZF9vbmUgPDwgNykuCisgICAgIFRoYXQgaXMsIHdlIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBvcGVyYXRpb25zOgorICAgICAgIDEuIFN1YnRyYWN0IHJlcGVhdGVkX29uZS4KKyAgICAgICAyLiAmIH5sb25nd29yZDEuCisgICAgICAgMy4gJiBhIG1hc2sgY29uc2lzdGluZyBvZiAweDgwIGluIGV2ZXJ5IGJ5dGUuCisgICAgIENvbnNpZGVyIHdoYXQgaGFwcGVucyBpbiBlYWNoIGJ5dGU6CisgICAgICAgLSBJZiBhIGJ5dGUgb2YgbG9uZ3dvcmQxIGlzIHplcm8sIHN0ZXAgMSBhbmQgMiB0cmFuc2Zvcm0gaXQgaW50byAweGZmLAorICAgICAgICAgYW5kIHN0ZXAgMyB0cmFuc2Zvcm1zIGl0IGludG8gMHg4MC4gIEEgY2FycnkgY2FuIGFsc28gYmUgcHJvcGFnYXRlZAorICAgICAgICAgdG8gbW9yZSBzaWduaWZpY2FudCBieXRlcy4KKyAgICAgICAtIElmIGEgYnl0ZSBvZiBsb25nd29yZDEgaXMgbm9uemVybywgbGV0IGl0cyBsb3dlc3QgMSBiaXQgYmUgYXQKKyAgICAgICAgIHBvc2l0aW9uIGsgKDAgPD0gayA8PSA3KTsgc28gdGhlIGxvd2VzdCBrIGJpdHMgYXJlIDAuICBBZnRlciBzdGVwIDEsCisgICAgICAgICB0aGUgYnl0ZSBlbmRzIGluIGEgc2luZ2xlIGJpdCBvZiB2YWx1ZSAwIGFuZCBrIGJpdHMgb2YgdmFsdWUgMS4KKyAgICAgICAgIEFmdGVyIHN0ZXAgMiwgdGhlIHJlc3VsdCBpcyBqdXN0IGsgYml0cyBvZiB2YWx1ZSAxOiAyXmsgLSAxLiAgQWZ0ZXIKKyAgICAgICAgIHN0ZXAgMywgdGhlIHJlc3VsdCBpcyAwLiAgQW5kIG5vIGNhcnJ5IGlzIHByb2R1Y2VkLgorICAgICBTbywgaWYgbG9uZ3dvcmQxIGhhcyBvbmx5IG5vbi16ZXJvIGJ5dGVzLCB0bXAgaXMgemVyby4KKyAgICAgV2hlcmVhcyBpZiBsb25nd29yZDEgaGFzIGEgemVybyBieXRlLCBjYWxsIGogdGhlIHBvc2l0aW9uIG9mIHRoZSBsZWFzdAorICAgICBzaWduaWZpY2FudCB6ZXJvIGJ5dGUuICBUaGVuIHRoZSByZXN1bHQgaGFzIGEgemVybyBhdCBwb3NpdGlvbnMgMCwgLi4uLAorICAgICBqLTEgYW5kIGEgMHg4MCBhdCBwb3NpdGlvbiBqLiAgV2UgY2Fubm90IHByZWRpY3QgdGhlIHJlc3VsdCBhdCB0aGUgbW9yZQorICAgICBzaWduaWZpY2FudCBieXRlcyAocG9zaXRpb25zIGorMS4uMyksIGJ1dCBpdCBkb2VzIG5vdCBtYXR0ZXIgc2luY2Ugd2UKKyAgICAgYWxyZWFkeSBoYXZlIGEgbm9uLXplcm8gYml0IGF0IHBvc2l0aW9uIDgqais3LgorCisgICAgIFNvLCB0aGUgdGVzdCB3aGV0aGVyIGFueSBieXRlIGluIGxvbmd3b3JkMSBpcyB6ZXJvIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgdGVzdGluZyB3aGV0aGVyIHRtcCBpcyBub256ZXJvLiAgKi8KKworICB3aGlsZSAobiA+PSBzaXplb2YgKGxvbmd3b3JkKSkKKyAgICB7CisgICAgICBsb25nd29yZCBsb25nd29yZDEgPSAqbG9uZ3dvcmRfcHRyIF4gcmVwZWF0ZWRfYzsKKworICAgICAgaWYgKCgoKGxvbmd3b3JkMSAtIHJlcGVhdGVkX29uZSkgJiB+bG9uZ3dvcmQxKQorICAgICAgICAgICAmIChyZXBlYXRlZF9vbmUgPDwgNykpICE9IDApCisgICAgICAgIGJyZWFrOworICAgICAgbG9uZ3dvcmRfcHRyKys7CisgICAgICBuIC09IHNpemVvZiAobG9uZ3dvcmQpOworICAgIH0KKworICBjaGFyX3B0ciA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIGxvbmd3b3JkX3B0cjsKKworICAvKiBBdCB0aGlzIHBvaW50LCB3ZSBrbm93IHRoYXQgZWl0aGVyIG4gPCBzaXplb2YgKGxvbmd3b3JkKSwgb3Igb25lIG9mIHRoZQorICAgICBzaXplb2YgKGxvbmd3b3JkKSBieXRlcyBzdGFydGluZyBhdCBjaGFyX3B0ciBpcyA9PSBjLiAgT24gbGl0dGxlLWVuZGlhbgorICAgICBtYWNoaW5lcywgd2UgY291bGQgZGV0ZXJtaW5lIHRoZSBmaXJzdCBzdWNoIGJ5dGUgd2l0aG91dCBhbnkgZnVydGhlcgorICAgICBtZW1vcnkgYWNjZXNzZXMsIGp1c3QgYnkgbG9va2luZyBhdCB0aGUgdG1wIHJlc3VsdCBmcm9tIHRoZSBsYXN0IGxvb3AKKyAgICAgaXRlcmF0aW9uLiAgQnV0IHRoaXMgZG9lcyBub3Qgd29yayBvbiBiaWctZW5kaWFuIG1hY2hpbmVzLiAgQ2hvb3NlIGNvZGUKKyAgICAgdGhhdCB3b3JrcyBpbiBib3RoIGNhc2VzLiAgKi8KKworICBmb3IgKDsgbiA+IDA7IC0tbiwgKytjaGFyX3B0cikKKyAgICB7CisgICAgICBpZiAoKmNoYXJfcHRyID09IGMpCisgICAgICAgIHJldHVybiAodm9pZCAqKSBjaGFyX3B0cjsKKyAgICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisjaWZkZWYgd2Vha19hbGlhcword2Vha19hbGlhcyAoX19tZW1jaHIsIEJQX1NZTSAobWVtY2hyKSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL21lbWNoci52YWxncmluZCBiL2xpYi9tZW1jaHIudmFsZ3JpbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBmMjQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9tZW1jaHIudmFsZ3JpbmQKQEAgLTAsMCArMSwxNCBAQAorIyBTdXBwcmVzcyBhIHZhbGdyaW5kIG1lc3NhZ2UgYWJvdXQgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIG1lbWNocigpLgorIyBQT1NJWCBzdGF0ZXMgdGhhdCB3aGVuIHRoZSBjaGFyYWN0ZXIgaXMgZm91bmQsIG1lbWNociBtdXN0IG5vdCByZWFkIGV4dHJhCisjIGJ5dGVzIGluIGFuIG92ZXJlc3RpbWF0ZWQgbGVuZ3RoIChmb3IgZXhhbXBsZSwgd2hlcmUgbWVtY2hyIGlzIHVzZWQgdG8KKyMgaW1wbGVtZW50IHN0cm5sZW4pLiAgSG93ZXZlciwgd2UgdXNlIGEgc2FmZSB3b3JkIHJlYWQgdG8gcHJvdmlkZSBhIHNwZWVkdXAuCit7CisgICAgbWVtY2hyLXZhbHVlNAorICAgIE1lbWNoZWNrOlZhbHVlNAorICAgIGZ1bjpycGxfbWVtY2hyCit9Cit7CisgICAgbWVtY2hyLXZhbHVlOAorICAgIE1lbWNoZWNrOlZhbHVlOAorICAgIGZ1bjpycGxfbWVtY2hyCit9CmRpZmYgLS1naXQgYS9saWIvbXN2Yy1pbnZhbC5jIGIvbGliL21zdmMtaW52YWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTc2YTdlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL21zdmMtaW52YWwuYwpAQCAtMCwwICsxLDEyOSBAQAorLyogSW52YWxpZCBwYXJhbWV0ZXIgaGFuZGxlciBmb3IgTVNWQyBydW50aW1lIGxpYnJhcmllcy4KKyAgIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaW5jbHVkZSAibXN2Yy1pbnZhbC5oIgorCisjaWYgSEFWRV9NU1ZDX0lOVkFMSURfUEFSQU1FVEVSX0hBTkRMRVIgXAorICAgICYmICEoTVNWQ19JTlZBTElEX1BBUkFNRVRFUl9IQU5ETElORyA9PSBTQU5FX0xJQlJBUllfSEFORExJTkcpCisKKy8qIEdldCBfaW52YWxpZF9wYXJhbWV0ZXJfaGFuZGxlciB0eXBlIGFuZCBfc2V0X2ludmFsaWRfcGFyYW1ldGVyX2hhbmRsZXIKKyAgIGRlY2xhcmF0aW9uLiAgKi8KKyMgaW5jbHVkZSA8c3RkbGliLmg+CisKKyMgaWYgTVNWQ19JTlZBTElEX1BBUkFNRVRFUl9IQU5ETElORyA9PSBERUZBVUxUX0hBTkRMSU5HCisKK3N0YXRpYyB2b2lkIGNkZWNsCitnbF9tc3ZjX2ludmFsaWRfcGFyYW1ldGVyX2hhbmRsZXIgKGNvbnN0IHdjaGFyX3QgKmV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKmZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICpmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludHB0cl90IGR1bW15KQoreworfQorCisjIGVsc2UKKworLyogR2V0IGRlY2xhcmF0aW9ucyBvZiB0aGUgbmF0aXZlIFdpbmRvd3MgQVBJIGZ1bmN0aW9ucy4gICovCisjICBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyAgaW5jbHVkZSA8d2luZG93cy5oPgorCisjICBpZiBkZWZpbmVkIF9NU0NfVkVSCisKK3N0YXRpYyB2b2lkIGNkZWNsCitnbF9tc3ZjX2ludmFsaWRfcGFyYW1ldGVyX2hhbmRsZXIgKGNvbnN0IHdjaGFyX3QgKmV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKmZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICpmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludHB0cl90IGR1bW15KQoreworICBSYWlzZUV4Y2VwdGlvbiAoU1RBVFVTX0dOVUxJQl9JTlZBTElEX1BBUkFNRVRFUiwgMCwgMCwgTlVMTCk7Cit9CisKKyMgIGVsc2UKKworLyogQW4gaW5kZXggdG8gdGhyZWFkLWxvY2FsIHN0b3JhZ2UuICAqLworc3RhdGljIERXT1JEIHRsc19pbmRleDsKK3N0YXRpYyBpbnQgdGxzX2luaXRpYWxpemVkIC8qID0gMCAqLzsKKworLyogVXNlZCBhcyBhIGZhbGxiYWNrIG9ubHkuICAqLworc3RhdGljIHN0cnVjdCBnbF9tc3ZjX2ludmFsX3Blcl90aHJlYWQgbm90X3Blcl90aHJlYWQ7CisKK3N0cnVjdCBnbF9tc3ZjX2ludmFsX3Blcl90aHJlYWQgKgorZ2xfbXN2Y19pbnZhbF9jdXJyZW50ICh2b2lkKQoreworICBpZiAoIXRsc19pbml0aWFsaXplZCkKKyAgICB7CisgICAgICB0bHNfaW5kZXggPSBUbHNBbGxvYyAoKTsKKyAgICAgIHRsc19pbml0aWFsaXplZCA9IDE7CisgICAgfQorICBpZiAodGxzX2luZGV4ID09IFRMU19PVVRfT0ZfSU5ERVhFUykKKyAgICAvKiBUbHNBbGxvYyBoYWQgZmFpbGVkLiAgKi8KKyAgICByZXR1cm4gJm5vdF9wZXJfdGhyZWFkOworICBlbHNlCisgICAgeworICAgICAgc3RydWN0IGdsX21zdmNfaW52YWxfcGVyX3RocmVhZCAqcG9pbnRlciA9CisgICAgICAgIChzdHJ1Y3QgZ2xfbXN2Y19pbnZhbF9wZXJfdGhyZWFkICopIFRsc0dldFZhbHVlICh0bHNfaW5kZXgpOworICAgICAgaWYgKHBvaW50ZXIgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgIC8qIEZpcnN0IGNhbGwuICBBbGxvY2F0ZSBhIG5ldyAnc3RydWN0IGdsX21zdmNfaW52YWxfcGVyX3RocmVhZCcuICAqLworICAgICAgICAgIHBvaW50ZXIgPQorICAgICAgICAgICAgKHN0cnVjdCBnbF9tc3ZjX2ludmFsX3Blcl90aHJlYWQgKikKKyAgICAgICAgICAgIG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgZ2xfbXN2Y19pbnZhbF9wZXJfdGhyZWFkKSk7CisgICAgICAgICAgaWYgKHBvaW50ZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIC8qIENvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkuICBVc2UgdGhlIGdsb2JhbCBzdG9yYWdlLiAgKi8KKyAgICAgICAgICAgIHBvaW50ZXIgPSAmbm90X3Blcl90aHJlYWQ7CisgICAgICAgICAgVGxzU2V0VmFsdWUgKHRsc19pbmRleCwgcG9pbnRlcik7CisgICAgICAgIH0KKyAgICAgIHJldHVybiBwb2ludGVyOworICAgIH0KK30KKworc3RhdGljIHZvaWQgY2RlY2wKK2dsX21zdmNfaW52YWxpZF9wYXJhbWV0ZXJfaGFuZGxlciAoY29uc3Qgd2NoYXJfdCAqZXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKmZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50cHRyX3QgZHVtbXkpCit7CisgIHN0cnVjdCBnbF9tc3ZjX2ludmFsX3Blcl90aHJlYWQgKmN1cnJlbnQgPSBnbF9tc3ZjX2ludmFsX2N1cnJlbnQgKCk7CisgIGlmIChjdXJyZW50LT5yZXN0YXJ0X3ZhbGlkKQorICAgIGxvbmdqbXAgKGN1cnJlbnQtPnJlc3RhcnQsIDEpOworICBlbHNlCisgICAgLyogQW4gaW52YWxpZCBwYXJhbWV0ZXIgbm90aWZpY2F0aW9uIGZyb20gb3V0c2lkZSB0aGUgZ251bGliIGNvZGUuCisgICAgICAgR2l2ZSB0aGUgY2FsbGVyIGEgY2hhbmNlIHRvIGludGVydmVuZS4gICovCisgICAgUmFpc2VFeGNlcHRpb24gKFNUQVRVU19HTlVMSUJfSU5WQUxJRF9QQVJBTUVURVIsIDAsIDAsIE5VTEwpOworfQorCisjICBlbmRpZgorCisjIGVuZGlmCisKK3N0YXRpYyBpbnQgZ2xfbXN2Y19pbnZhbF9pbml0aWFsaXplZCAvKiA9IDAgKi87CisKK3ZvaWQKK2dsX21zdmNfaW52YWxfZW5zdXJlX2hhbmRsZXIgKHZvaWQpCit7CisgIGlmIChnbF9tc3ZjX2ludmFsX2luaXRpYWxpemVkID09IDApCisgICAgeworICAgICAgX3NldF9pbnZhbGlkX3BhcmFtZXRlcl9oYW5kbGVyIChnbF9tc3ZjX2ludmFsaWRfcGFyYW1ldGVyX2hhbmRsZXIpOworICAgICAgZ2xfbXN2Y19pbnZhbF9pbml0aWFsaXplZCA9IDE7CisgICAgfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9tc3ZjLWludmFsLmggYi9saWIvbXN2Yy1pbnZhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNjkzMGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbXN2Yy1pbnZhbC5oCkBAIC0wLDAgKzEsMjIyIEBACisvKiBJbnZhbGlkIHBhcmFtZXRlciBoYW5kbGVyIGZvciBNU1ZDIHJ1bnRpbWUgbGlicmFyaWVzLgorICAgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBfTVNWQ19JTlZBTF9ICisjZGVmaW5lIF9NU1ZDX0lOVkFMX0gKKworLyogV2l0aCBNU1ZDIHJ1bnRpbWUgbGlicmFyaWVzIHdpdGggdGhlICJpbnZhbGlkIHBhcmFtZXRlciBoYW5kbGVyIiBjb25jZXB0LAorICAgZnVuY3Rpb25zIGxpa2UgZnByaW50ZigpLCBkdXAyKCksIG9yIGNsb3NlKCkgY3Jhc2ggd2hlbiB0aGUgY2FsbGVyIHBhc3NlcworICAgYW4gaW52YWxpZCBhcmd1bWVudC4gIEJ1dCBQT1NJWCB3YW50cyBlcnJvciBjb2RlcyAoc3VjaCBhcyBFSU5WQUwgb3IgRUJBREYpCisgICBpbnN0ZWFkLgorICAgVGhpcyBmaWxlIGRlZmluZXMgbWFjcm9zIHRoYXQgdHVybiBzdWNoIGFuIGludmFsaWQgcGFyYW1ldGVyIG5vdGlmaWNhdGlvbgorICAgaW50byBhIG5vbi1sb2NhbCBleGl0LiAgQW4gZXJyb3IgY29kZSBjYW4gdGhlbiBiZSBwcm9kdWNlZCBhdCB0aGUgdGFyZ2V0CisgICBvZiB0aGlzIGV4aXQuICBZb3UgY2FuIHRodXMgd3JpdGUgY29kZSBsaWtlCisKKyAgICAgVFJZX01TVkNfSU5WQUwKKyAgICAgICB7CisgICAgICAgICA8Q29kZSB0aGF0IGNhbiB0cmlnZ2VyIGFuIGludmFsaWQgcGFyYW1ldGVyIG5vdGlmaWNhdGlvbgorICAgICAgICAgIGJ1dCBkb2VzIG5vdCBkbyAncmV0dXJuJywgJ2JyZWFrJywgJ2NvbnRpbnVlJywgbm9yICdnb3RvJy4+CisgICAgICAgfQorICAgICBDQVRDSF9NU1ZDX0lOVkFMCisgICAgICAgeworICAgICAgICAgPENvZGUgdGhhdCBoYW5kbGVzIGFuIGludmFsaWQgcGFyYW1ldGVyIG5vdGlmaWNhdGlvbgorICAgICAgICAgIGJ1dCBkb2VzIG5vdCBkbyAncmV0dXJuJywgJ2JyZWFrJywgJ2NvbnRpbnVlJywgbm9yICdnb3RvJy4+CisgICAgICAgfQorICAgICBET05FX01TVkNfSU5WQUw7CisKKyAgIFRoaXMgZW50aXJlIGJsb2NrIGV4cGFuZHMgdG8gYSBzaW5nbGUgc3RhdGVtZW50LgorCisgICBUaGUgaGFuZGxpbmcgb2YgaW52YWxpZCBwYXJhbWV0ZXJzIGNhbiBiZSBkb25lIGluIHRocmVlIHdheXM6CisKKyAgICAgKiBUaGUgZGVmYXVsdCB3YXksIHdoaWNoIGlzIHJlYXNvbmFibGUgZm9yIHByb2dyYW1zIChub3QgbGlicmFyaWVzKToKKyAgICAgICBBQ19ERUZJTkUoW01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExJTkddLCBbREVGQVVMVF9IQU5ETElOR10pCisKKyAgICAgKiBUaGUgd2F5IGZvciBsaWJyYXJpZXMgdGhhdCBtYWtlICJoYWlyeSIgY2FsbHMgKGxpa2UgY2xvc2UoLTEpLCBvcgorICAgICAgIGZjbG9zZShmcCkgd2hlcmUgZmlsZW5vKGZwKSBpcyBjbG9zZWQsIG9yIHNpbXBseSBnZXRkdGFibGVzaXplKCkpOgorICAgICAgIEFDX0RFRklORShbTVNWQ19JTlZBTElEX1BBUkFNRVRFUl9IQU5ETElOR10sIFtIQUlSWV9MSUJSQVJZX0hBTkRMSU5HXSkKKworICAgICAqIFRoZSB3YXkgZm9yIGxpYnJhcmllcyB0aGF0IG1ha2Ugbm8gImhhaXJ5IiBjYWxsczoKKyAgICAgICBBQ19ERUZJTkUoW01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExJTkddLCBbU0FORV9MSUJSQVJZX0hBTkRMSU5HXSkKKyAqLworCisjZGVmaW5lIERFRkFVTFRfSEFORExJTkcgICAgICAgMAorI2RlZmluZSBIQUlSWV9MSUJSQVJZX0hBTkRMSU5HIDEKKyNkZWZpbmUgU0FORV9MSUJSQVJZX0hBTkRMSU5HICAyCisKKyNpZiBIQVZFX01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUiBcCisgICAgJiYgIShNU1ZDX0lOVkFMSURfUEFSQU1FVEVSX0hBTkRMSU5HID09IFNBTkVfTElCUkFSWV9IQU5ETElORykKKy8qIEEgbmF0aXZlIFdpbmRvd3MgcGxhdGZvcm0gd2l0aCB0aGUgImludmFsaWQgcGFyYW1ldGVyIGhhbmRsZXIiIGNvbmNlcHQsCisgICBhbmQgZWl0aGVyIERFRkFVTFRfSEFORExJTkcgb3IgSEFJUllfTElCUkFSWV9IQU5ETElORy4gICovCisKKyMgaWYgTVNWQ19JTlZBTElEX1BBUkFNRVRFUl9IQU5ETElORyA9PSBERUZBVUxUX0hBTkRMSU5HCisvKiBEZWZhdWx0IGhhbmRsaW5nLiAgKi8KKworIyAgaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworIyAgZW5kaWYKKworLyogRW5zdXJlIHRoYXQgdGhlIGludmFsaWQgcGFyYW1ldGVyIGhhbmRsZXIgaW4gaW5zdGFsbGVkIHRoYXQganVzdCByZXR1cm5zLgorICAgQmVjYXVzZSB3ZSBhc3N1bWUgbm8gb3RoZXIgcGFydCBvZiB0aGUgcHJvZ3JhbSBpbnN0YWxscyBhIGRpZmZlcmVudAorICAgaW52YWxpZCBwYXJhbWV0ZXIgaGFuZGxlciwgdGhpcyBzb2x1dGlvbiBpcyBtdWx0aXRocmVhZC1zYWZlLiAgKi8KK2V4dGVybiB2b2lkIGdsX21zdmNfaW52YWxfZW5zdXJlX2hhbmRsZXIgKHZvaWQpOworCisjICBpZmRlZiBfX2NwbHVzcGx1cworfQorIyAgZW5kaWYKKworIyAgZGVmaW5lIFRSWV9NU1ZDX0lOVkFMIFwKKyAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgZ2xfbXN2Y19pbnZhbF9lbnN1cmVfaGFuZGxlciAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIGlmICgxKQorIyAgZGVmaW5lIENBVENIX01TVkNfSU5WQUwgXAorICAgICAgICAgZWxzZQorIyAgZGVmaW5lIERPTkVfTVNWQ19JTlZBTCBcCisgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB3aGlsZSAoMCkKKworIyBlbHNlCisvKiBIYW5kbGluZyBmb3IgaGFpcnkgbGlicmFyaWVzLiAgKi8KKworIyAgaW5jbHVkZSA8ZXhjcHQuaD4KKworLyogR251bGliIGNhbiBkZWZpbmUgaXRzIG93biBzdGF0dXMgY29kZXMsIGFzIGRlc2NyaWJlZCBpbiB0aGUgcGFnZQorICAgIlJhaXNpbmcgU29mdHdhcmUgRXhjZXB0aW9ucyIgb24gbWljcm9zb2Z0LmNvbQorICAgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9oZXQ3MWMzNy5hc3B4Pi4KKyAgIE91ciBzdGF0dXMgY29kZXMgYXJlIGNvbXBvc2VkIG9mCisgICAgIC0gMHhFMDAwMDAwMCwgbWFuZGF0b3J5IGZvciBhbGwgdXNlci1kZWZpbmVkIHN0YXR1cyBjb2RlcywKKyAgICAgLSAweDQ3NEU1NTAsIGEgQVBJIGlkZW50aWZpZXIgKCJHTlUiKSwKKyAgICAgLSAwLCAxLCAyLCAuLi4sIHVzZWQgdG8gZGlzdGluZ3Vpc2ggZGlmZmVyZW50IHN0YXR1cyBjb2RlcyBmcm9tIHRoZQorICAgICAgIHNhbWUgQVBJLiAgKi8KKyMgIGRlZmluZSBTVEFUVVNfR05VTElCX0lOVkFMSURfUEFSQU1FVEVSICgweEUwMDAwMDAwICsgMHg0NzRFNTUwICsgMCkKKworIyAgaWYgZGVmaW5lZCBfTVNDX1ZFUgorLyogQSBjb21waWxlciB0aGF0IHN1cHBvcnRzIF9fdHJ5L19fZXhjZXB0LCBhcyBkZXNjcmliZWQgaW4gdGhlIHBhZ2UKKyAgICJ0cnktZXhjZXB0IHN0YXRlbWVudCIgb24gbWljcm9zb2Z0LmNvbQorICAgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9zNThmdHcxOS5hc3B4Pi4KKyAgIFdpdGggX190cnkvX19leGNlcHQsIHdlIGNhbiB1c2UgdGhlIG11bHRpdGhyZWFkLXNhZmUgZXhjZXB0aW9uIGhhbmRsaW5nLiAgKi8KKworIyAgIGlmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyMgICBlbmRpZgorCisvKiBFbnN1cmUgdGhhdCB0aGUgaW52YWxpZCBwYXJhbWV0ZXIgaGFuZGxlciBpbiBpbnN0YWxsZWQgdGhhdCByYWlzZXMgYQorICAgc29mdHdhcmUgZXhjZXB0aW9uIHdpdGggY29kZSBTVEFUVVNfR05VTElCX0lOVkFMSURfUEFSQU1FVEVSLgorICAgQmVjYXVzZSB3ZSBhc3N1bWUgbm8gb3RoZXIgcGFydCBvZiB0aGUgcHJvZ3JhbSBpbnN0YWxscyBhIGRpZmZlcmVudAorICAgaW52YWxpZCBwYXJhbWV0ZXIgaGFuZGxlciwgdGhpcyBzb2x1dGlvbiBpcyBtdWx0aXRocmVhZC1zYWZlLiAgKi8KK2V4dGVybiB2b2lkIGdsX21zdmNfaW52YWxfZW5zdXJlX2hhbmRsZXIgKHZvaWQpOworCisjICAgaWZkZWYgX19jcGx1c3BsdXMKK30KKyMgICBlbmRpZgorCisjICAgZGVmaW5lIFRSWV9NU1ZDX0lOVkFMIFwKKyAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdsX21zdmNfaW52YWxfZW5zdXJlX2hhbmRsZXIgKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBfX3RyeQorIyAgIGRlZmluZSBDQVRDSF9NU1ZDX0lOVkFMIFwKKyAgICAgICAgICBfX2V4Y2VwdCAoR2V0RXhjZXB0aW9uQ29kZSAoKSA9PSBTVEFUVVNfR05VTElCX0lOVkFMSURfUEFSQU1FVEVSICAgICBcCisgICAgICAgICAgICAgICAgICAgID8gRVhDRVBUSU9OX0VYRUNVVEVfSEFORExFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICA6IEVYQ0VQVElPTl9DT05USU5VRV9TRUFSQ0gpCisjICAgZGVmaW5lIERPTkVfTVNWQ19JTlZBTCBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgd2hpbGUgKDApCisKKyMgIGVsc2UKKy8qIEFueSBjb21waWxlci4KKyAgIFdlIGNhbiBvbmx5IHVzZSBzZXRqbXAvbG9uZ2ptcC4gICovCisKKyMgICBpbmNsdWRlIDxzZXRqbXAuaD4KKworIyAgIGlmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyMgICBlbmRpZgorCitzdHJ1Y3QgZ2xfbXN2Y19pbnZhbF9wZXJfdGhyZWFkCit7CisgIC8qIFRoZSByZXN0YXJ0IHRoYXQgd2lsbCByZXN1bWUgZXhlY3V0aW9uIGF0IHRoZSBjb2RlIGJldHdlZW4KKyAgICAgQ0FUQ0hfTVNWQ19JTlZBTCBhbmQgRE9ORV9NU1ZDX0lOVkFMLiAgSXQgaXMgZW5hYmxlZCBvbmx5IGJldHdlZW4KKyAgICAgVFJZX01TVkNfSU5WQUwgYW5kIENBVENIX01TVkNfSU5WQUwuICAqLworICBqbXBfYnVmIHJlc3RhcnQ7CisKKyAgLyogVGVsbHMgd2hldGhlciB0aGUgY29udGVudHMgb2YgcmVzdGFydCBpcyB2YWxpZC4gICovCisgIGludCByZXN0YXJ0X3ZhbGlkOworfTsKKworLyogRW5zdXJlIHRoYXQgdGhlIGludmFsaWQgcGFyYW1ldGVyIGhhbmRsZXIgaW4gaW5zdGFsbGVkIHRoYXQgcGFzc2VzCisgICBjb250cm9sIHRvIHRoZSBnbF9tc3ZjX2ludmFsX3Jlc3RhcnQgaWYgaXQgaXMgdmFsaWQsIG9yIHJhaXNlcyBhCisgICBzb2Z0d2FyZSBleGNlcHRpb24gd2l0aCBjb2RlIFNUQVRVU19HTlVMSUJfSU5WQUxJRF9QQVJBTUVURVIgb3RoZXJ3aXNlLgorICAgQmVjYXVzZSB3ZSBhc3N1bWUgbm8gb3RoZXIgcGFydCBvZiB0aGUgcHJvZ3JhbSBpbnN0YWxscyBhIGRpZmZlcmVudAorICAgaW52YWxpZCBwYXJhbWV0ZXIgaGFuZGxlciwgdGhpcyBzb2x1dGlvbiBpcyBtdWx0aXRocmVhZC1zYWZlLiAgKi8KK2V4dGVybiB2b2lkIGdsX21zdmNfaW52YWxfZW5zdXJlX2hhbmRsZXIgKHZvaWQpOworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBwZXItdGhyZWFkIGRhdGEgZm9yIHRoZSBjdXJyZW50IHRocmVhZC4gICovCitleHRlcm4gc3RydWN0IGdsX21zdmNfaW52YWxfcGVyX3RocmVhZCAqZ2xfbXN2Y19pbnZhbF9jdXJyZW50ICh2b2lkKTsKKworIyAgIGlmZGVmIF9fY3BsdXNwbHVzCit9CisjICAgZW5kaWYKKworIyAgIGRlZmluZSBUUllfTVNWQ19JTlZBTCBcCisgICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBzdHJ1Y3QgZ2xfbXN2Y19pbnZhbF9wZXJfdGhyZWFkICptc3ZjX2ludmFsX2N1cnJlbnQ7ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZ2xfbXN2Y19pbnZhbF9lbnN1cmVfaGFuZGxlciAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIG1zdmNfaW52YWxfY3VycmVudCA9IGdsX21zdmNfaW52YWxfY3VycmVudCAoKTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAvKiBGaXJzdCwgaW5pdGlhbGl6ZSBnbF9tc3ZjX2ludmFsX3Jlc3RhcnQuICAqLyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYgKHNldGptcCAobXN2Y19pbnZhbF9jdXJyZW50LT5yZXN0YXJ0KSA9PSAwKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgLyogVGhlbiwgbWFyayBpdCBhcyB2YWxpZC4gICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIG1zdmNfaW52YWxfY3VycmVudC0+cmVzdGFydF92YWxpZCA9IDE7CisjICAgZGVmaW5lIENBVENIX01TVkNfSU5WQUwgXAorICAgICAgICAgICAgICAvKiBFeGVjdXRpb24gY29tcGxldGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgTWFyayBnbF9tc3ZjX2ludmFsX3Jlc3RhcnQgYXMgaW52YWxpZC4gICovICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIG1zdmNfaW52YWxfY3VycmVudC0+cmVzdGFydF92YWxpZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAvKiBFeGVjdXRpb24gdHJpZ2dlcmVkIGFuIGludmFsaWQgcGFyYW1ldGVyIG5vdGlmaWNhdGlvbi4gICAgICAgIFwKKyAgICAgICAgICAgICAgICAgTWFyayBnbF9tc3ZjX2ludmFsX3Jlc3RhcnQgYXMgaW52YWxpZC4gICovICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIG1zdmNfaW52YWxfY3VycmVudC0+cmVzdGFydF92YWxpZCA9IDA7CisjICAgZGVmaW5lIERPTkVfTVNWQ19JTlZBTCBcCisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHdoaWxlICgwKQorCisjICBlbmRpZgorCisjIGVuZGlmCisKKyNlbHNlCisvKiBBIHBsYXRmb3JtIHRoYXQgZG9lcyBub3QgbmVlZCB0byB0aGUgaW52YWxpZCBwYXJhbWV0ZXIgaGFuZGxlciwKKyAgIG9yIHdoZW4gU0FORV9MSUJSQVJZX0hBTkRMSU5HIGlzIGRlc2lyZWQuICAqLworCisvKiBUaGUgYnJhY2VzIGhlcmUgYXZvaWQgR0NDIHdhcm5pbmdzIGxpa2UKKyAgICJ3YXJuaW5nOiBzdWdnZXN0IGV4cGxpY2l0IGJyYWNlcyB0byBhdm9pZCBhbWJpZ3VvdXMgJ2Vsc2UnIi4gICovCisjIGRlZmluZSBUUllfTVNWQ19JTlZBTCBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKDEpCisjIGRlZmluZSBDQVRDSF9NU1ZDX0lOVkFMIFwKKyAgICAgICAgZWxzZQorIyBkZWZpbmUgRE9ORV9NU1ZDX0lOVkFMIFwKKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgd2hpbGUgKDApCisKKyNlbmRpZgorCisjZW5kaWYgLyogX01TVkNfSU5WQUxfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL21zdmMtbm90aHJvdy5jIGIvbGliL21zdmMtbm90aHJvdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1Y2YxODEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbXN2Yy1ub3Rocm93LmMKQEAgLTAsMCArMSw0OSBAQAorLyogV3JhcHBlcnMgdGhhdCBkb24ndCB0aHJvdyBpbnZhbGlkIHBhcmFtZXRlciBub3RpZmljYXRpb25zCisgICB3aXRoIE1TVkMgcnVudGltZSBsaWJyYXJpZXMuCisgICBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgIm1zdmMtbm90aHJvdy5oIgorCisvKiBHZXQgZGVjbGFyYXRpb25zIG9mIHRoZSBuYXRpdmUgV2luZG93cyBBUEkgZnVuY3Rpb25zLiAgKi8KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2luY2x1ZGUgIm1zdmMtaW52YWwuaCIKKworI3VuZGVmIF9nZXRfb3NmaGFuZGxlCisKKyNpZiBIQVZFX01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUgoraW50cHRyX3QKK19nbF9ub3Rocm93X2dldF9vc2ZoYW5kbGUgKGludCBmZCkKK3sKKyAgaW50cHRyX3QgcmVzdWx0OworCisgIFRSWV9NU1ZDX0lOVkFMCisgICAgeworICAgICAgcmVzdWx0ID0gX2dldF9vc2ZoYW5kbGUgKGZkKTsKKyAgICB9CisgIENBVENIX01TVkNfSU5WQUwKKyAgICB7CisgICAgICByZXN1bHQgPSAoaW50cHRyX3QpIElOVkFMSURfSEFORExFX1ZBTFVFOworICAgIH0KKyAgRE9ORV9NU1ZDX0lOVkFMOworCisgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9tc3ZjLW5vdGhyb3cuaCBiL2xpYi9tc3ZjLW5vdGhyb3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjcxOTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL21zdmMtbm90aHJvdy5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qIFdyYXBwZXJzIHRoYXQgZG9uJ3QgdGhyb3cgaW52YWxpZCBwYXJhbWV0ZXIgbm90aWZpY2F0aW9ucworICAgd2l0aCBNU1ZDIHJ1bnRpbWUgbGlicmFyaWVzLgorICAgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBfTVNWQ19OT1RIUk9XX0gKKyNkZWZpbmUgX01TVkNfTk9USFJPV19ICisKKy8qIFdpdGggTVNWQyBydW50aW1lIGxpYnJhcmllcyB3aXRoIHRoZSAiaW52YWxpZCBwYXJhbWV0ZXIgaGFuZGxlciIgY29uY2VwdCwKKyAgIGZ1bmN0aW9ucyBsaWtlIGZwcmludGYoKSwgZHVwMigpLCBvciBjbG9zZSgpIGNyYXNoIHdoZW4gdGhlIGNhbGxlciBwYXNzZXMKKyAgIGFuIGludmFsaWQgYXJndW1lbnQuICBCdXQgUE9TSVggd2FudHMgZXJyb3IgY29kZXMgKHN1Y2ggYXMgRUlOVkFMIG9yIEVCQURGKQorICAgaW5zdGVhZC4KKyAgIFRoaXMgZmlsZSBkZWZpbmVzIHdyYXBwZXJzIHRoYXQgdHVybiBzdWNoIGFuIGludmFsaWQgcGFyYW1ldGVyIG5vdGlmaWNhdGlvbgorICAgaW50byBhbiBlcnJvciBjb2RlLiAgKi8KKworI2lmIChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgISBkZWZpbmVkIF9fQ1lHV0lOX18KKworLyogR2V0IG9yaWdpbmFsIGRlY2xhcmF0aW9uIG9mIF9nZXRfb3NmaGFuZGxlLiAgKi8KKyMgaW5jbHVkZSA8aW8uaD4KKworIyBpZiBIQVZFX01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUgorCisvKiBPdmVycmlkZSBfZ2V0X29zZmhhbmRsZS4gICovCitleHRlcm4gaW50cHRyX3QgX2dsX25vdGhyb3dfZ2V0X29zZmhhbmRsZSAoaW50IGZkKTsKKyMgIGRlZmluZSBfZ2V0X29zZmhhbmRsZSBfZ2xfbm90aHJvd19nZXRfb3NmaGFuZGxlCisKKyMgZW5kaWYKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfTVNWQ19OT1RIUk9XX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9vYnN0YWNrLmMgYi9saWIvb2JzdGFjay5jCmluZGV4IDZkZjA2MTEuLmZjNTBmMWUgMTAwNjQ0Ci0tLSBhL2xpYi9vYnN0YWNrLmMKKysrIGIvbGliL29ic3RhY2suYwpAQCAtMSwzMSArMSwyNSBAQAogLyogb2JzdGFjay5jIC0gc3Vicm91dGluZXMgdXNlZCBpbXBsaWNpdGx5IGJ5IG9iamVjdCBzdGFjayBtYWNyb3MKIAotICAgQ29weXJpZ2h0IChDKSAxOTg4LCAxOTg5LCAxOTkwLCAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk2LCAxOTk3LAotICAgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDE5ODgtMTk5NCwgMTk5Ni0yMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogI2lmZGVmIF9MSUJDCiAjIGluY2x1ZGUgPG9ic3RhY2suaD4KICMgaW5jbHVkZSA8c2hsaWItY29tcGF0Lmg+CiAjZWxzZQorIyBpbmNsdWRlIDxjb25maWcuaD4KICMgaW5jbHVkZSAib2JzdGFjay5oIgogI2VuZGlmCiAKQEAgLTQwLDEwICszNCwxMCBAQAogICAgQyBMaWJyYXJ5LCBidXQgYWxzbyBpbmNsdWRlZCBpbiBtYW55IG90aGVyIEdOVSBkaXN0cmlidXRpb25zLiAgQ29tcGlsaW5nCiAgICBhbmQgbGlua2luZyBpbiB0aGlzIGNvZGUgaXMgYSB3YXN0ZSB3aGVuIHVzaW5nIHRoZSBHTlUgQyBsaWJyYXJ5CiAgICAoZXNwZWNpYWxseSBpZiBpdCBpcyBhIHNoYXJlZCBsaWJyYXJ5KS4gIFJhdGhlciB0aGFuIGhhdmluZyBldmVyeSBHTlUKLSAgIHByb2dyYW0gdW5kZXJzdGFuZCBgY29uZmlndXJlIC0td2l0aC1nbnUtbGliYycgYW5kIG9taXQgdGhlIG9iamVjdAorICAgcHJvZ3JhbSB1bmRlcnN0YW5kICdjb25maWd1cmUgLS13aXRoLWdudS1saWJjJyBhbmQgb21pdCB0aGUgb2JqZWN0CiAgICBmaWxlcywgaXQgaXMgc2ltcGxlciB0byBqdXN0IGRvIHRoaXMgaW4gdGhlIHNvdXJjZSBmb3IgZWFjaCBzdWNoIGZpbGUuICAqLwogCi0jaW5jbHVkZSA8c3RkaW8uaD4JCS8qIFJhbmRvbSB0aGluZyB0byBnZXQgX19HTlVfTElCUkFSWV9fLiAgKi8KKyNpbmNsdWRlIDxzdGRpby5oPiAgICAgICAgICAgICAgLyogUmFuZG9tIHRoaW5nIHRvIGdldCBfX0dOVV9MSUJSQVJZX18uICAqLwogI2lmICFkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgX19HTlVfTElCUkFSWV9fICYmIF9fR05VX0xJQlJBUllfXyA+IDEKICMgaW5jbHVkZSA8Z251LXZlcnNpb25zLmg+CiAjIGlmIF9HTlVfT0JTVEFDS19JTlRFUkZBQ0VfVkVSU0lPTiA9PSBPQlNUQUNLX0lOVEVSRkFDRV9WRVJTSU9OCkBAIC01NSwxMyArNDksNyBAQAogCiAjaWZuZGVmIEVMSURFX0NPREUKIAotCi0jIGlmIEhBVkVfSU5UVFlQRVNfSAotIyAgaW5jbHVkZSA8aW50dHlwZXMuaD4KLSMgZW5kaWYKLSMgaWYgSEFWRV9TVERJTlRfSCB8fCBkZWZpbmVkIF9MSUJDCi0jICBpbmNsdWRlIDxzdGRpbnQuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3RkaW50Lmg+CiAKIC8qIERldGVybWluZSBkZWZhdWx0IGFsaWdubWVudC4gICovCiB1bmlvbiBmb29yb3VuZApAQCAtODYsMjMgKzc0LDIzIEBACiAKIC8qIFdoZW4gd2UgY29weSBhIGxvbmcgYmxvY2sgb2YgZGF0YSwgdGhpcyBpcyB0aGUgdW5pdCB0byBkbyBpdCB3aXRoLgogICAgT24gc29tZSBtYWNoaW5lcywgY29weWluZyBzdWNjZXNzaXZlIGludHMgZG9lcyBub3Qgd29yazsKLSAgIGluIHN1Y2ggYSBjYXNlLCByZWRlZmluZSBDT1BZSU5HX1VOSVQgdG8gYGxvbmcnIChpZiB0aGF0IHdvcmtzKQotICAgb3IgYGNoYXInIGFzIGEgbGFzdCByZXNvcnQuICAqLworICAgaW4gc3VjaCBhIGNhc2UsIHJlZGVmaW5lIENPUFlJTkdfVU5JVCB0byAnbG9uZycgKGlmIHRoYXQgd29ya3MpCisgICBvciAnY2hhcicgYXMgYSBsYXN0IHJlc29ydC4gICovCiAjIGlmbmRlZiBDT1BZSU5HX1VOSVQKICMgIGRlZmluZSBDT1BZSU5HX1VOSVQgaW50CiAjIGVuZGlmCiAKIAotLyogVGhlIGZ1bmN0aW9ucyBhbGxvY2F0aW5nIG1vcmUgcm9vbSBieSBjYWxsaW5nIGBvYnN0YWNrX2NodW5rX2FsbG9jJwotICAganVtcCB0byB0aGUgaGFuZGxlciBwb2ludGVkIHRvIGJ5IGBvYnN0YWNrX2FsbG9jX2ZhaWxlZF9oYW5kbGVyJy4KKy8qIFRoZSBmdW5jdGlvbnMgYWxsb2NhdGluZyBtb3JlIHJvb20gYnkgY2FsbGluZyAnb2JzdGFja19jaHVua19hbGxvYycKKyAgIGp1bXAgdG8gdGhlIGhhbmRsZXIgcG9pbnRlZCB0byBieSAnb2JzdGFja19hbGxvY19mYWlsZWRfaGFuZGxlcicuCiAgICBUaGlzIGNhbiBiZSBzZXQgdG8gYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24gd2hpY2ggc2hvdWxkIGVpdGhlcgogICAgYWJvcnQgZ3JhY2VmdWxseSBvciB1c2UgbG9uZ2p1bXAgLSBidXQgc2hvdWxkbid0IHJldHVybi4gIFRoaXMKICAgIHZhcmlhYmxlIGJ5IGRlZmF1bHQgcG9pbnRzIHRvIHRoZSBpbnRlcm5hbCBmdW5jdGlvbgotICAgYHByaW50X2FuZF9hYm9ydCcuICAqLwotc3RhdGljIHZvaWQgcHJpbnRfYW5kX2Fib3J0ICh2b2lkKTsKKyAgICdwcmludF9hbmRfYWJvcnQnLiAgKi8KK3N0YXRpYyBfTm9yZXR1cm4gdm9pZCBwcmludF9hbmRfYWJvcnQgKHZvaWQpOwogdm9pZCAoKm9ic3RhY2tfYWxsb2NfZmFpbGVkX2hhbmRsZXIpICh2b2lkKSA9IHByaW50X2FuZF9hYm9ydDsKIAotLyogRXhpdCB2YWx1ZSB1c2VkIHdoZW4gYHByaW50X2FuZF9hYm9ydCcgaXMgdXNlZC4gICovCisvKiBFeGl0IHZhbHVlIHVzZWQgd2hlbiAncHJpbnRfYW5kX2Fib3J0JyBpcyB1c2VkLiAgKi8KICMgaW5jbHVkZSA8c3RkbGliLmg+CiAjIGlmZGVmIF9MSUJDCiBpbnQgb2JzdGFja19leGl0X2ZhaWx1cmUgPSBFWElUX0ZBSUxVUkU7CkBAIC0xNTEsOSArMTM5LDkgQEAKIAogaW50CiBfb2JzdGFja19iZWdpbiAoc3RydWN0IG9ic3RhY2sgKmgsCi0JCWludCBzaXplLCBpbnQgYWxpZ25tZW50LAotCQl2b2lkICooKmNodW5rZnVuKSAobG9uZyksCi0JCXZvaWQgKCpmcmVlZnVuKSAodm9pZCAqKSkKKyAgICAgICAgICAgICAgICBpbnQgc2l6ZSwgaW50IGFsaWdubWVudCwKKyAgICAgICAgICAgICAgICB2b2lkICooKmNodW5rZnVuKSAobG9uZyksCisgICAgICAgICAgICAgICAgdm9pZCAoKmZyZWVmdW4pICh2b2lkICopKQogewogICByZWdpc3RlciBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKmNodW5rOyAvKiBwb2ludHMgdG8gbmV3IGNodW5rICovCiAKQEAgLTE2MywxNiArMTUxLDE2IEBACiAgICAgLyogRGVmYXVsdCBzaXplIGlzIHdoYXQgR05VIG1hbGxvYyBjYW4gZml0IGluIGEgNDA5Ni1ieXRlIGJsb2NrLiAgKi8KICAgICB7CiAgICAgICAvKiAxMiBpcyBzaXplb2YgKG1oZWFkKSBhbmQgNCBpcyBFWFRSQSBmcm9tIEdOVSBtYWxsb2MuCi0JIFVzZSB0aGUgdmFsdWVzIGZvciByYW5nZSBjaGVja2luZywgYmVjYXVzZSBpZiByYW5nZSBjaGVja2luZyBpcyBvZmYsCi0JIHRoZSBleHRyYSBieXRlcyB3b24ndCBiZSBtaXNzZWQgdGVycmlibHksIGJ1dCBpZiByYW5nZSBjaGVja2luZyBpcyBvbgotCSBhbmQgd2UgdXNlZCBhIGxhcmdlciByZXF1ZXN0LCBhIHdob2xlIGV4dHJhIDQwOTYgYnl0ZXMgd291bGQgYmUKLQkgYWxsb2NhdGVkLgorICAgICAgICAgVXNlIHRoZSB2YWx1ZXMgZm9yIHJhbmdlIGNoZWNraW5nLCBiZWNhdXNlIGlmIHJhbmdlIGNoZWNraW5nIGlzIG9mZiwKKyAgICAgICAgIHRoZSBleHRyYSBieXRlcyB3b24ndCBiZSBtaXNzZWQgdGVycmlibHksIGJ1dCBpZiByYW5nZSBjaGVja2luZyBpcyBvbgorICAgICAgICAgYW5kIHdlIHVzZWQgYSBsYXJnZXIgcmVxdWVzdCwgYSB3aG9sZSBleHRyYSA0MDk2IGJ5dGVzIHdvdWxkIGJlCisgICAgICAgICBhbGxvY2F0ZWQuCiAKLQkgVGhlc2UgbnVtYmVyIGFyZSBpcnJlbGV2YW50IHRvIHRoZSBuZXcgR05VIG1hbGxvYy4gIEkgc3VzcGVjdCBpdCBpcwotCSBsZXNzIHNlbnNpdGl2ZSB0byB0aGUgc2l6ZSBvZiB0aGUgcmVxdWVzdC4gICovCisgICAgICAgICBUaGVzZSBudW1iZXIgYXJlIGlycmVsZXZhbnQgdG8gdGhlIG5ldyBHTlUgbWFsbG9jLiAgSSBzdXNwZWN0IGl0IGlzCisgICAgICAgICBsZXNzIHNlbnNpdGl2ZSB0byB0aGUgc2l6ZSBvZiB0aGUgcmVxdWVzdC4gICovCiAgICAgICBpbnQgZXh0cmEgPSAoKCgoMTIgKyBERUZBVUxUX1JPVU5ESU5HIC0gMSkgJiB+KERFRkFVTFRfUk9VTkRJTkcgLSAxKSkKLQkJICAgICsgNCArIERFRkFVTFRfUk9VTkRJTkcgLSAxKQotCQkgICAmIH4oREVGQVVMVF9ST1VORElORyAtIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgKyA0ICsgREVGQVVMVF9ST1VORElORyAtIDEpCisgICAgICAgICAgICAgICAgICAgJiB+KERFRkFVTFRfUk9VTkRJTkcgLSAxKSk7CiAgICAgICBzaXplID0gNDA5NiAtIGV4dHJhOwogICAgIH0KIApAQCAtMTg2LDcgKzE3NCw3IEBACiAgIGlmICghY2h1bmspCiAgICAgKCpvYnN0YWNrX2FsbG9jX2ZhaWxlZF9oYW5kbGVyKSAoKTsKICAgaC0+bmV4dF9mcmVlID0gaC0+b2JqZWN0X2Jhc2UgPSBfX1BUUl9BTElHTiAoKGNoYXIgKikgY2h1bmssIGNodW5rLT5jb250ZW50cywKLQkJCQkJICAgICAgIGFsaWdubWVudCAtIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQgLSAxKTsKICAgaC0+Y2h1bmtfbGltaXQgPSBjaHVuay0+bGltaXQKICAgICA9IChjaGFyICopIGNodW5rICsgaC0+Y2h1bmtfc2l6ZTsKICAgY2h1bmstPnByZXYgPSAwOwpAQCAtMTk4LDkgKzE4Niw5IEBACiAKIGludAogX29ic3RhY2tfYmVnaW5fMSAoc3RydWN0IG9ic3RhY2sgKmgsIGludCBzaXplLCBpbnQgYWxpZ25tZW50LAotCQkgIHZvaWQgKigqY2h1bmtmdW4pICh2b2lkICosIGxvbmcpLAotCQkgIHZvaWQgKCpmcmVlZnVuKSAodm9pZCAqLCB2b2lkICopLAotCQkgIHZvaWQgKmFyZykKKyAgICAgICAgICAgICAgICAgIHZvaWQgKigqY2h1bmtmdW4pICh2b2lkICosIGxvbmcpLAorICAgICAgICAgICAgICAgICAgdm9pZCAoKmZyZWVmdW4pICh2b2lkICosIHZvaWQgKiksCisgICAgICAgICAgICAgICAgICB2b2lkICphcmcpCiB7CiAgIHJlZ2lzdGVyIHN0cnVjdCBfb2JzdGFja19jaHVuayAqY2h1bms7IC8qIHBvaW50cyB0byBuZXcgY2h1bmsgKi8KIApAQCAtMjEwLDE2ICsxOTgsMTYgQEAKICAgICAvKiBEZWZhdWx0IHNpemUgaXMgd2hhdCBHTlUgbWFsbG9jIGNhbiBmaXQgaW4gYSA0MDk2LWJ5dGUgYmxvY2suICAqLwogICAgIHsKICAgICAgIC8qIDEyIGlzIHNpemVvZiAobWhlYWQpIGFuZCA0IGlzIEVYVFJBIGZyb20gR05VIG1hbGxvYy4KLQkgVXNlIHRoZSB2YWx1ZXMgZm9yIHJhbmdlIGNoZWNraW5nLCBiZWNhdXNlIGlmIHJhbmdlIGNoZWNraW5nIGlzIG9mZiwKLQkgdGhlIGV4dHJhIGJ5dGVzIHdvbid0IGJlIG1pc3NlZCB0ZXJyaWJseSwgYnV0IGlmIHJhbmdlIGNoZWNraW5nIGlzIG9uCi0JIGFuZCB3ZSB1c2VkIGEgbGFyZ2VyIHJlcXVlc3QsIGEgd2hvbGUgZXh0cmEgNDA5NiBieXRlcyB3b3VsZCBiZQotCSBhbGxvY2F0ZWQuCisgICAgICAgICBVc2UgdGhlIHZhbHVlcyBmb3IgcmFuZ2UgY2hlY2tpbmcsIGJlY2F1c2UgaWYgcmFuZ2UgY2hlY2tpbmcgaXMgb2ZmLAorICAgICAgICAgdGhlIGV4dHJhIGJ5dGVzIHdvbid0IGJlIG1pc3NlZCB0ZXJyaWJseSwgYnV0IGlmIHJhbmdlIGNoZWNraW5nIGlzIG9uCisgICAgICAgICBhbmQgd2UgdXNlZCBhIGxhcmdlciByZXF1ZXN0LCBhIHdob2xlIGV4dHJhIDQwOTYgYnl0ZXMgd291bGQgYmUKKyAgICAgICAgIGFsbG9jYXRlZC4KIAotCSBUaGVzZSBudW1iZXIgYXJlIGlycmVsZXZhbnQgdG8gdGhlIG5ldyBHTlUgbWFsbG9jLiAgSSBzdXNwZWN0IGl0IGlzCi0JIGxlc3Mgc2Vuc2l0aXZlIHRvIHRoZSBzaXplIG9mIHRoZSByZXF1ZXN0LiAgKi8KKyAgICAgICAgIFRoZXNlIG51bWJlciBhcmUgaXJyZWxldmFudCB0byB0aGUgbmV3IEdOVSBtYWxsb2MuICBJIHN1c3BlY3QgaXQgaXMKKyAgICAgICAgIGxlc3Mgc2Vuc2l0aXZlIHRvIHRoZSBzaXplIG9mIHRoZSByZXF1ZXN0LiAgKi8KICAgICAgIGludCBleHRyYSA9ICgoKCgxMiArIERFRkFVTFRfUk9VTkRJTkcgLSAxKSAmIH4oREVGQVVMVF9ST1VORElORyAtIDEpKQotCQkgICAgKyA0ICsgREVGQVVMVF9ST1VORElORyAtIDEpCi0JCSAgICYgfihERUZBVUxUX1JPVU5ESU5HIC0gMSkpOworICAgICAgICAgICAgICAgICAgICArIDQgKyBERUZBVUxUX1JPVU5ESU5HIC0gMSkKKyAgICAgICAgICAgICAgICAgICAmIH4oREVGQVVMVF9ST1VORElORyAtIDEpKTsKICAgICAgIHNpemUgPSA0MDk2IC0gZXh0cmE7CiAgICAgfQogCkBAIC0yMzQsNyArMjIyLDcgQEAKICAgaWYgKCFjaHVuaykKICAgICAoKm9ic3RhY2tfYWxsb2NfZmFpbGVkX2hhbmRsZXIpICgpOwogICBoLT5uZXh0X2ZyZWUgPSBoLT5vYmplY3RfYmFzZSA9IF9fUFRSX0FMSUdOICgoY2hhciAqKSBjaHVuaywgY2h1bmstPmNvbnRlbnRzLAotCQkJCQkgICAgICAgYWxpZ25tZW50IC0gMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudCAtIDEpOwogICBoLT5jaHVua19saW1pdCA9IGNodW5rLT5saW1pdAogICAgID0gKGNoYXIgKikgY2h1bmsgKyBoLT5jaHVua19zaXplOwogICBjaHVuay0+cHJldiA9IDA7CkBAIC0yNTUsNyArMjQzLDcgQEAKIHsKICAgcmVnaXN0ZXIgc3RydWN0IF9vYnN0YWNrX2NodW5rICpvbGRfY2h1bmsgPSBoLT5jaHVuazsKICAgcmVnaXN0ZXIgc3RydWN0IF9vYnN0YWNrX2NodW5rICpuZXdfY2h1bms7Ci0gIHJlZ2lzdGVyIGxvbmcJbmV3X3NpemU7CisgIHJlZ2lzdGVyIGxvbmcgbmV3X3NpemU7CiAgIHJlZ2lzdGVyIGxvbmcgb2JqX3NpemUgPSBoLT5uZXh0X2ZyZWUgLSBoLT5vYmplY3RfYmFzZTsKICAgcmVnaXN0ZXIgbG9uZyBpOwogICBsb25nIGFscmVhZHk7CkBAIC0yODQsMTIgKzI3MiwxMiBAQAogICBpZiAoaC0+YWxpZ25tZW50X21hc2sgKyAxID49IERFRkFVTFRfQUxJR05NRU5UKQogICAgIHsKICAgICAgIGZvciAoaSA9IG9ial9zaXplIC8gc2l6ZW9mIChDT1BZSU5HX1VOSVQpIC0gMTsKLQkgICBpID49IDA7IGktLSkKLQkoKENPUFlJTkdfVU5JVCAqKW9iamVjdF9iYXNlKVtpXQotCSAgPSAoKENPUFlJTkdfVU5JVCAqKWgtPm9iamVjdF9iYXNlKVtpXTsKKyAgICAgICAgICAgaSA+PSAwOyBpLS0pCisgICAgICAgICgoQ09QWUlOR19VTklUICopb2JqZWN0X2Jhc2UpW2ldCisgICAgICAgICAgPSAoKENPUFlJTkdfVU5JVCAqKWgtPm9iamVjdF9iYXNlKVtpXTsKICAgICAgIC8qIFdlIHVzZWQgdG8gY29weSB0aGUgb2RkIGZldyByZW1haW5pbmcgYnl0ZXMgYXMgb25lIGV4dHJhIENPUFlJTkdfVU5JVCwKLQkgYnV0IHRoYXQgY2FuIGNyb3NzIGEgcGFnZSBib3VuZGFyeSBvbiBhIG1hY2hpbmUKLQkgd2hpY2ggZG9lcyBub3QgZG8gc3RyaWN0IGFsaWdubWVudCBmb3IgQ09QWUlOR19VTklUUy4gICovCisgICAgICAgICBidXQgdGhhdCBjYW4gY3Jvc3MgYSBwYWdlIGJvdW5kYXJ5IG9uIGEgbWFjaGluZQorICAgICAgICAgd2hpY2ggZG9lcyBub3QgZG8gc3RyaWN0IGFsaWdubWVudCBmb3IgQ09QWUlOR19VTklUUy4gICovCiAgICAgICBhbHJlYWR5ID0gb2JqX3NpemUgLyBzaXplb2YgKENPUFlJTkdfVU5JVCkgKiBzaXplb2YgKENPUFlJTkdfVU5JVCk7CiAgICAgfQogICBlbHNlCkBAIC0zMDMsOCArMjkxLDggQEAKICAgICAgQnV0IG5vdCBpZiB0aGF0IGNodW5rIG1pZ2h0IGNvbnRhaW4gYW4gZW1wdHkgb2JqZWN0LiAgKi8KICAgaWYgKCEgaC0+bWF5YmVfZW1wdHlfb2JqZWN0CiAgICAgICAmJiAoaC0+b2JqZWN0X2Jhc2UKLQkgID09IF9fUFRSX0FMSUdOICgoY2hhciAqKSBvbGRfY2h1bmssIG9sZF9jaHVuay0+Y29udGVudHMsCi0JCQkgIGgtPmFsaWdubWVudF9tYXNrKSkpCisgICAgICAgICAgPT0gX19QVFJfQUxJR04gKChjaGFyICopIG9sZF9jaHVuaywgb2xkX2NodW5rLT5jb250ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaC0+YWxpZ25tZW50X21hc2spKSkKICAgICB7CiAgICAgICBuZXdfY2h1bmstPnByZXYgPSBvbGRfY2h1bmstPnByZXY7CiAgICAgICBDQUxMX0ZSRUVGVU4gKGgsIG9sZF9jaHVuayk7CkBAIC0zMzAsOCArMzE4LDggQEAKIGludAogX29ic3RhY2tfYWxsb2NhdGVkX3AgKHN0cnVjdCBvYnN0YWNrICpoLCB2b2lkICpvYmopCiB7Ci0gIHJlZ2lzdGVyIHN0cnVjdCBfb2JzdGFja19jaHVuayAqbHA7CS8qIGJlbG93IGFkZHIgb2YgYW55IG9iamVjdHMgaW4gdGhpcyBjaHVuayAqLwotICByZWdpc3RlciBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKnBscDsJLyogcG9pbnQgdG8gcHJldmlvdXMgY2h1bmsgaWYgYW55ICovCisgIHJlZ2lzdGVyIHN0cnVjdCBfb2JzdGFja19jaHVuayAqbHA7ICAgLyogYmVsb3cgYWRkciBvZiBhbnkgb2JqZWN0cyBpbiB0aGlzIGNodW5rICovCisgIHJlZ2lzdGVyIHN0cnVjdCBfb2JzdGFja19jaHVuayAqcGxwOyAgLyogcG9pbnQgdG8gcHJldmlvdXMgY2h1bmsgaWYgYW55ICovCiAKICAgbHAgPSAoaCktPmNodW5rOwogICAvKiBXZSB1c2UgPj0gcmF0aGVyIHRoYW4gPiBzaW5jZSB0aGUgb2JqZWN0IGNhbm5vdCBiZSBleGFjdGx5IGF0CkBAIC0zNTEsMTAgKzMzOSwxMCBAQAogIyB1bmRlZiBvYnN0YWNrX2ZyZWUKIAogdm9pZAotb2JzdGFja19mcmVlIChzdHJ1Y3Qgb2JzdGFjayAqaCwgdm9pZCAqb2JqKQorX19vYnN0YWNrX2ZyZWUgKHN0cnVjdCBvYnN0YWNrICpoLCB2b2lkICpvYmopCiB7Ci0gIHJlZ2lzdGVyIHN0cnVjdCBfb2JzdGFja19jaHVuayAqbHA7CS8qIGJlbG93IGFkZHIgb2YgYW55IG9iamVjdHMgaW4gdGhpcyBjaHVuayAqLwotICByZWdpc3RlciBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKnBscDsJLyogcG9pbnQgdG8gcHJldmlvdXMgY2h1bmsgaWYgYW55ICovCisgIHJlZ2lzdGVyIHN0cnVjdCBfb2JzdGFja19jaHVuayAqbHA7ICAgLyogYmVsb3cgYWRkciBvZiBhbnkgb2JqZWN0cyBpbiB0aGlzIGNodW5rICovCisgIHJlZ2lzdGVyIHN0cnVjdCBfb2JzdGFja19jaHVuayAqcGxwOyAgLyogcG9pbnQgdG8gcHJldmlvdXMgY2h1bmsgaWYgYW55ICovCiAKICAgbHAgPSBoLT5jaHVuazsKICAgLyogV2UgdXNlID49IGJlY2F1c2UgdGhlcmUgY2Fubm90IGJlIGFuIG9iamVjdCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgY2h1bmsuCkBAIC0zNjYsNyArMzU0LDcgQEAKICAgICAgIENBTExfRlJFRUZVTiAoaCwgbHApOwogICAgICAgbHAgPSBwbHA7CiAgICAgICAvKiBJZiB3ZSBzd2l0Y2ggY2h1bmtzLCB3ZSBjYW4ndCB0ZWxsIHdoZXRoZXIgdGhlIG5ldyBjdXJyZW50Ci0JIGNodW5rIGNvbnRhaW5zIGFuIGVtcHR5IG9iamVjdCwgc28gYXNzdW1lIHRoYXQgaXQgbWF5LiAgKi8KKyAgICAgICAgIGNodW5rIGNvbnRhaW5zIGFuIGVtcHR5IG9iamVjdCwgc28gYXNzdW1lIHRoYXQgaXQgbWF5LiAgKi8KICAgICAgIGgtPm1heWJlX2VtcHR5X29iamVjdCA9IDE7CiAgICAgfQogICBpZiAobHApCkBAIC00MTMsMTUgKzQwMSw3IEBACiAjICBpbmNsdWRlIDxsaWJpby9pb2xpYmlvLmg+CiAjIGVuZGlmCiAKLSMgaWZuZGVmIF9fYXR0cmlidXRlX18KLS8qIFRoaXMgZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDIuNSBhbmQgbGF0ZXIuICAqLwotIyAgaWYgX19HTlVDX18gPCAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fIDwgNSkKLSMgICBkZWZpbmUgX19hdHRyaWJ1dGVfXyhTcGVjKSAvKiBlbXB0eSAqLwotIyAgZW5kaWYKLSMgZW5kaWYKLQotc3RhdGljIHZvaWQKLV9fYXR0cmlidXRlX18gKChub3JldHVybikpCitzdGF0aWMgX05vcmV0dXJuIHZvaWQKIHByaW50X2FuZF9hYm9ydCAodm9pZCkKIHsKICAgLyogRG9uJ3QgY2hhbmdlIGFueSBvZiB0aGVzZSBzdHJpbmdzLiAgWWVzLCBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBhZGQKQEAgLTQzNyw0ICs0MTcsNCBAQAogICBleGl0IChvYnN0YWNrX2V4aXRfZmFpbHVyZSk7CiB9CiAKLSNlbmRpZgkvKiAhRUxJREVfQ09ERSAqLworI2VuZGlmICAvKiAhRUxJREVfQ09ERSAqLwpkaWZmIC0tZ2l0IGEvbGliL29ic3RhY2suaCBiL2xpYi9vYnN0YWNrLmgKaW5kZXggOTVkZDQzOC4uNmE0NGI0NCAxMDA2NDQKLS0tIGEvbGliL29ic3RhY2suaAorKysgYi9saWIvb2JzdGFjay5oCkBAIC0xLDIxICsxLDIwIEBACiAvKiBvYnN0YWNrLmggLSBvYmplY3Qgc3RhY2sgbWFjcm9zCi0gICBDb3B5cmlnaHQgKEMpIDE5ODgtMTk5NCwxOTk2LTE5OTksMjAwMywyMDA0LDIwMDUKLQlGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMTk4OC0xOTk0LCAxOTk2LTE5OTksIDIwMDMtMjAwNiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4KICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgogCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKIC8qIFN1bW1hcnk6CiAKQEAgLTMzLDExICszMiwxMSBAQAogc3RhY2sgaXMgb2YgbWF0dXJlLCBmaXhlZCBzaXplIGFuZCBmaXhlZCBhZGRyZXNzIG9iamVjdHMuCiAKIFRoZXNlIHJvdXRpbmVzIGdyYWIgbGFyZ2UgY2h1bmtzIG9mIG1lbW9yeSwgdXNpbmcgYSBmdW5jdGlvbiB5b3UKLXN1cHBseSwgY2FsbGVkIGBvYnN0YWNrX2NodW5rX2FsbG9jJy4gIE9uIG9jY2FzaW9uLCB0aGV5IGZyZWUgY2h1bmtzLAotYnkgY2FsbGluZyBgb2JzdGFja19jaHVua19mcmVlJy4gIFlvdSBtdXN0IGRlZmluZSB0aGVtIGFuZCBkZWNsYXJlCitzdXBwbHksIGNhbGxlZCAnb2JzdGFja19jaHVua19hbGxvYycuICBPbiBvY2Nhc2lvbiwgdGhleSBmcmVlIGNodW5rcywKK2J5IGNhbGxpbmcgJ29ic3RhY2tfY2h1bmtfZnJlZScuICBZb3UgbXVzdCBkZWZpbmUgdGhlbSBhbmQgZGVjbGFyZQogdGhlbSBiZWZvcmUgdXNpbmcgYW55IG9ic3RhY2sgbWFjcm9zLgogCi1FYWNoIGluZGVwZW5kZW50IHN0YWNrIGlzIHJlcHJlc2VudGVkIGJ5IGEgYHN0cnVjdCBvYnN0YWNrJy4KK0VhY2ggaW5kZXBlbmRlbnQgc3RhY2sgaXMgcmVwcmVzZW50ZWQgYnkgYSAnc3RydWN0IG9ic3RhY2snLgogRWFjaCBvZiB0aGUgb2JzdGFjayBtYWNyb3MgZXhwZWN0cyBhIHBvaW50ZXIgdG8gc3VjaCBhIHN0cnVjdHVyZQogYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgogCkBAIC04NiwxNyArODUsMTcgQEAKIGJyZWFrIHRoZSBvcmRpbmFyeSAnZ3Jvd3RoJyBtYWNyby4KIAogU3VtbWFyeToKLQlXZSBhbGxvY2F0ZSBsYXJnZSBjaHVua3MuCi0JV2UgY2FydmUgb3V0IG9uZSBvYmplY3QgYXQgYSB0aW1lIGZyb20gdGhlIGN1cnJlbnQgY2h1bmsuCi0JT25jZSBjYXJ2ZWQsIGFuIG9iamVjdCBuZXZlciBtb3Zlcy4KLQlXZSBhcmUgZnJlZSB0byBhcHBlbmQgZGF0YSBvZiBhbnkgc2l6ZSB0byB0aGUgY3VycmVudGx5Ci0JICBncm93aW5nIG9iamVjdC4KLQlFeGFjdGx5IG9uZSBvYmplY3QgaXMgZ3Jvd2luZyBpbiBhbiBvYnN0YWNrIGF0IGFueSBvbmUgdGltZS4KLQlZb3UgY2FuIHJ1biBvbmUgb2JzdGFjayBwZXIgY29udHJvbCBibG9jay4KLQlZb3UgbWF5IGhhdmUgYXMgbWFueSBjb250cm9sIGJsb2NrcyBhcyB5b3UgZGFyZS4KLQlCZWNhdXNlIG9mIHRoZSB3YXkgd2UgZG8gaXQsIHlvdSBjYW4gYHVud2luZCcgYW4gb2JzdGFjawotCSAgYmFjayB0byBhIHByZXZpb3VzIHN0YXRlLiAoWW91IG1heSByZW1vdmUgb2JqZWN0cyBtdWNoCi0JICBhcyB5b3Ugd291bGQgd2l0aCBhIHN0YWNrLikKKyAgICAgICAgV2UgYWxsb2NhdGUgbGFyZ2UgY2h1bmtzLgorICAgICAgICBXZSBjYXJ2ZSBvdXQgb25lIG9iamVjdCBhdCBhIHRpbWUgZnJvbSB0aGUgY3VycmVudCBjaHVuay4KKyAgICAgICAgT25jZSBjYXJ2ZWQsIGFuIG9iamVjdCBuZXZlciBtb3Zlcy4KKyAgICAgICAgV2UgYXJlIGZyZWUgdG8gYXBwZW5kIGRhdGEgb2YgYW55IHNpemUgdG8gdGhlIGN1cnJlbnRseQorICAgICAgICAgIGdyb3dpbmcgb2JqZWN0LgorICAgICAgICBFeGFjdGx5IG9uZSBvYmplY3QgaXMgZ3Jvd2luZyBpbiBhbiBvYnN0YWNrIGF0IGFueSBvbmUgdGltZS4KKyAgICAgICAgWW91IGNhbiBydW4gb25lIG9ic3RhY2sgcGVyIGNvbnRyb2wgYmxvY2suCisgICAgICAgIFlvdSBtYXkgaGF2ZSBhcyBtYW55IGNvbnRyb2wgYmxvY2tzIGFzIHlvdSBkYXJlLgorICAgICAgICBCZWNhdXNlIG9mIHRoZSB3YXkgd2UgZG8gaXQsIHlvdSBjYW4gInVud2luZCIgYW4gb2JzdGFjaworICAgICAgICAgIGJhY2sgdG8gYSBwcmV2aW91cyBzdGF0ZS4gKFlvdSBtYXkgcmVtb3ZlIG9iamVjdHMgbXVjaAorICAgICAgICAgIGFzIHlvdSB3b3VsZCB3aXRoIGEgc3RhY2suKQogKi8KIAogCkBAIC0xMDQsMTAgKzEwMyw2IEBACiAKICNpZm5kZWYgX09CU1RBQ0tfSAogI2RlZmluZSBfT0JTVEFDS19IIDEKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgogDAogLyogV2UgbmVlZCB0aGUgdHlwZSBvZiBhIHBvaW50ZXIgc3VidHJhY3Rpb24uICBJZiBfX1BUUkRJRkZfVFlQRV9fIGlzCiAgICBkZWZpbmVkLCBhcyB3aXRoIEdOVSBDLCB1c2UgdGhhdDsgdGhhdCB3YXkgd2UgZG9uJ3QgcG9sbHV0ZSB0aGUKQEAgLTEyNyw3NSArMTIyLDg0IEBACiAKICNkZWZpbmUgX19CUFRSX0FMSUdOKEIsIFAsIEEpICgoQikgKyAoKChQKSAtIChCKSArIChBKSkgJiB+KEEpKSkKIAotLyogU2ltaWxpYXIgdG8gX0JQVFJfQUxJR04gKEIsIFAsIEEpLCBleGNlcHQgb3B0aW1pemUgdGhlIGNvbW1vbiBjYXNlCisvKiBTaW1pbGFyIHRvIF9CUFRSX0FMSUdOIChCLCBQLCBBKSwgZXhjZXB0IG9wdGltaXplIHRoZSBjb21tb24gY2FzZQogICAgd2hlcmUgcG9pbnRlcnMgY2FuIGJlIGNvbnZlcnRlZCB0byBpbnRlZ2VycywgYWxpZ25lZCBhcyBpbnRlZ2VycywKICAgIGFuZCBjb252ZXJ0ZWQgYmFjayBhZ2Fpbi4gIElmIFBUUl9JTlRfVFlQRSBpcyBuYXJyb3dlciB0aGFuIGEKICAgIHBvaW50ZXIgKGUuZy4sIHRoZSBBUy80MDApLCBwbGF5IGl0IHNhZmUgYW5kIGNvbXB1dGUgdGhlIGFsaWdubWVudAogICAgcmVsYXRpdmUgdG8gQi4gIE90aGVyd2lzZSwgdXNlIHRoZSBmYXN0ZXIgc3RyYXRlZ3kgb2YgY29tcHV0aW5nIHRoZQogICAgYWxpZ25tZW50IHJlbGF0aXZlIHRvIDAuICAqLwogCi0jZGVmaW5lIF9fUFRSX0FMSUdOKEIsIFAsIEEpCQkJCQkJICAgIFwKKyNkZWZpbmUgX19QVFJfQUxJR04oQiwgUCwgQSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIF9fQlBUUl9BTElHTiAoc2l6ZW9mIChQVFJfSU5UX1RZUEUpIDwgc2l6ZW9mICh2b2lkICopID8gKEIpIDogKGNoYXIgKikgMCwgXAotCQlQLCBBKQorICAgICAgICAgICAgICAgIFAsIEEpCiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KIAotc3RydWN0IF9vYnN0YWNrX2NodW5rCQkvKiBMaXZlcyBhdCBmcm9udCBvZiBlYWNoIGNodW5rLiAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgICAgICAgICAgIC8qIExpdmVzIGF0IGZyb250IG9mIGVhY2ggY2h1bmsuICovCiB7Ci0gIGNoYXIgICpsaW1pdDsJCQkvKiAxIHBhc3QgZW5kIG9mIHRoaXMgY2h1bmsgKi8KLSAgc3RydWN0IF9vYnN0YWNrX2NodW5rICpwcmV2OwkvKiBhZGRyZXNzIG9mIHByaW9yIGNodW5rIG9yIE5VTEwgKi8KLSAgY2hhcgljb250ZW50c1s0XTsJCS8qIG9iamVjdHMgYmVnaW4gaGVyZSAqLworICBjaGFyICAqbGltaXQ7ICAgICAgICAgICAgICAgICAvKiAxIHBhc3QgZW5kIG9mIHRoaXMgY2h1bmsgKi8KKyAgc3RydWN0IF9vYnN0YWNrX2NodW5rICpwcmV2OyAgLyogYWRkcmVzcyBvZiBwcmlvciBjaHVuayBvciBOVUxMICovCisgIGNoYXIgIGNvbnRlbnRzWzRdOyAgICAgICAgICAgIC8qIG9iamVjdHMgYmVnaW4gaGVyZSAqLwogfTsKIAotc3RydWN0IG9ic3RhY2sJCS8qIGNvbnRyb2wgY3VycmVudCBvYmplY3QgaW4gY3VycmVudCBjaHVuayAqLworc3RydWN0IG9ic3RhY2sgICAgICAgICAgLyogY29udHJvbCBjdXJyZW50IG9iamVjdCBpbiBjdXJyZW50IGNodW5rICovCiB7Ci0gIGxvbmcJY2h1bmtfc2l6ZTsJCS8qIHByZWZlcnJlZCBzaXplIHRvIGFsbG9jYXRlIGNodW5rcyBpbiAqLwotICBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKmNodW5rOwkvKiBhZGRyZXNzIG9mIGN1cnJlbnQgc3RydWN0IG9ic3RhY2tfY2h1bmsgKi8KLSAgY2hhcgkqb2JqZWN0X2Jhc2U7CQkvKiBhZGRyZXNzIG9mIG9iamVjdCB3ZSBhcmUgYnVpbGRpbmcgKi8KLSAgY2hhcgkqbmV4dF9mcmVlOwkJLyogd2hlcmUgdG8gYWRkIG5leHQgY2hhciB0byBjdXJyZW50IG9iamVjdCAqLwotICBjaGFyCSpjaHVua19saW1pdDsJCS8qIGFkZHJlc3Mgb2YgY2hhciBhZnRlciBjdXJyZW50IGNodW5rICovCisgIGxvbmcgIGNodW5rX3NpemU7ICAgICAgICAgICAgIC8qIHByZWZlcnJlZCBzaXplIHRvIGFsbG9jYXRlIGNodW5rcyBpbiAqLworICBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKmNodW5rOyAvKiBhZGRyZXNzIG9mIGN1cnJlbnQgc3RydWN0IG9ic3RhY2tfY2h1bmsgKi8KKyAgY2hhciAgKm9iamVjdF9iYXNlOyAgICAgICAgICAgLyogYWRkcmVzcyBvZiBvYmplY3Qgd2UgYXJlIGJ1aWxkaW5nICovCisgIGNoYXIgICpuZXh0X2ZyZWU7ICAgICAgICAgICAgIC8qIHdoZXJlIHRvIGFkZCBuZXh0IGNoYXIgdG8gY3VycmVudCBvYmplY3QgKi8KKyAgY2hhciAgKmNodW5rX2xpbWl0OyAgICAgICAgICAgLyogYWRkcmVzcyBvZiBjaGFyIGFmdGVyIGN1cnJlbnQgY2h1bmsgKi8KICAgdW5pb24KICAgewogICAgIFBUUl9JTlRfVFlQRSB0ZW1waW50OwogICAgIHZvaWQgKnRlbXBwdHI7Ci0gIH0gdGVtcDsJCQkvKiBUZW1wb3JhcnkgZm9yIHNvbWUgbWFjcm9zLiAgKi8KLSAgaW50ICAgYWxpZ25tZW50X21hc2s7CQkvKiBNYXNrIG9mIGFsaWdubWVudCBmb3IgZWFjaCBvYmplY3QuICovCi0gIC8qIFRoZXNlIHByb3RvdHlwZXMgdmFyeSBiYXNlZCBvbiBgdXNlX2V4dHJhX2FyZycsIGFuZCB3ZSB1c2UKKyAgfSB0ZW1wOyAgICAgICAgICAgICAgICAgICAgICAgLyogVGVtcG9yYXJ5IGZvciBzb21lIG1hY3Jvcy4gICovCisgIGludCAgIGFsaWdubWVudF9tYXNrOyAgICAgICAgIC8qIE1hc2sgb2YgYWxpZ25tZW50IGZvciBlYWNoIG9iamVjdC4gKi8KKyAgLyogVGhlc2UgcHJvdG90eXBlcyB2YXJ5IGJhc2VkIG9uICd1c2VfZXh0cmFfYXJnJywgYW5kIHdlIHVzZQogICAgICBjYXN0cyB0byB0aGUgcHJvdG90eXBlbGVzcyBmdW5jdGlvbiB0eXBlIGluIGFsbCBhc3NpZ25tZW50cywKICAgICAgYnV0IGhhdmluZyBwcm90b3R5cGVzIGhlcmUgcXVpZXRzIC1Xc3RyaWN0LXByb3RvdHlwZXMuICAqLwogICBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKigqY2h1bmtmdW4pICh2b2lkICosIGxvbmcpOwogICB2b2lkICgqZnJlZWZ1bikgKHZvaWQgKiwgc3RydWN0IF9vYnN0YWNrX2NodW5rICopOwotICB2b2lkICpleHRyYV9hcmc7CQkvKiBmaXJzdCBhcmcgZm9yIGNodW5rIGFsbG9jL2RlYWxsb2MgZnVuY3MgKi8KLSAgdW5zaWduZWQgdXNlX2V4dHJhX2FyZzoxOwkvKiBjaHVuayBhbGxvYy9kZWFsbG9jIGZ1bmNzIHRha2UgZXh0cmEgYXJnICovCisgIHZvaWQgKmV4dHJhX2FyZzsgICAgICAgICAgICAgIC8qIGZpcnN0IGFyZyBmb3IgY2h1bmsgYWxsb2MvZGVhbGxvYyBmdW5jcyAqLworICB1bnNpZ25lZCB1c2VfZXh0cmFfYXJnOjE7ICAgICAvKiBjaHVuayBhbGxvYy9kZWFsbG9jIGZ1bmNzIHRha2UgZXh0cmEgYXJnICovCiAgIHVuc2lnbmVkIG1heWJlX2VtcHR5X29iamVjdDoxOy8qIFRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhhdCB0aGUgY3VycmVudAotCQkJCSAgIGNodW5rIGNvbnRhaW5zIGEgemVyby1sZW5ndGggb2JqZWN0LiAgVGhpcwotCQkJCSAgIHByZXZlbnRzIGZyZWVpbmcgdGhlIGNodW5rIGlmIHdlIGFsbG9jYXRlCi0JCQkJICAgYSBiaWdnZXIgY2h1bmsgdG8gcmVwbGFjZSBpdC4gKi8KLSAgdW5zaWduZWQgYWxsb2NfZmFpbGVkOjE7CS8qIE5vIGxvbmdlciB1c2VkLCBhcyB3ZSBub3cgY2FsbCB0aGUgZmFpbGVkCi0JCQkJICAgaGFuZGxlciBvbiBlcnJvciwgYnV0IHJldGFpbmVkIGZvciBiaW5hcnkKLQkJCQkgICBjb21wYXRpYmlsaXR5LiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmsgY29udGFpbnMgYSB6ZXJvLWxlbmd0aCBvYmplY3QuICBUaGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZlbnRzIGZyZWVpbmcgdGhlIGNodW5rIGlmIHdlIGFsbG9jYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgYmlnZ2VyIGNodW5rIHRvIHJlcGxhY2UgaXQuICovCisgIHVuc2lnbmVkIGFsbG9jX2ZhaWxlZDoxOyAgICAgIC8qIE5vIGxvbmdlciB1c2VkLCBhcyB3ZSBub3cgY2FsbCB0aGUgZmFpbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgb24gZXJyb3IsIGJ1dCByZXRhaW5lZCBmb3IgYmluYXJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGliaWxpdHkuICAqLwogfTsKIAogLyogRGVjbGFyZSB0aGUgZXh0ZXJuYWwgZnVuY3Rpb25zIHdlIHVzZTsgdGhleSBhcmUgaW4gb2JzdGFjay5jLiAgKi8KIAogZXh0ZXJuIHZvaWQgX29ic3RhY2tfbmV3Y2h1bmsgKHN0cnVjdCBvYnN0YWNrICosIGludCk7CiBleHRlcm4gaW50IF9vYnN0YWNrX2JlZ2luIChzdHJ1Y3Qgb2JzdGFjayAqLCBpbnQsIGludCwKLQkJCSAgICB2b2lkICooKikgKGxvbmcpLCB2b2lkICgqKSAodm9pZCAqKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKCopIChsb25nKSwgdm9pZCAoKikgKHZvaWQgKikpOwogZXh0ZXJuIGludCBfb2JzdGFja19iZWdpbl8xIChzdHJ1Y3Qgb2JzdGFjayAqLCBpbnQsIGludCwKLQkJCSAgICAgdm9pZCAqKCopICh2b2lkICosIGxvbmcpLAotCQkJICAgICB2b2lkICgqKSAodm9pZCAqLCB2b2lkICopLCB2b2lkICopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICooKikgKHZvaWQgKiwgbG9uZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCopICh2b2lkICosIHZvaWQgKiksIHZvaWQgKik7CiBleHRlcm4gaW50IF9vYnN0YWNrX21lbW9yeV91c2VkIChzdHJ1Y3Qgb2JzdGFjayAqKTsKIAotdm9pZCBvYnN0YWNrX2ZyZWUgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrLCB2b2lkICpibG9jayk7CisvKiBUaGUgZGVmYXVsdCBuYW1lIG9mIHRoZSBmdW5jdGlvbiBmb3IgZnJlZWluZyBhIGNodW5rIGlzICdvYnN0YWNrX2ZyZWUnLAorICAgYnV0IGdudWxpYiB1c2VycyBjYW4gb3ZlcnJpZGUgdGhpcyBieSBkZWZpbmluZyAnX19vYnN0YWNrX2ZyZWUnLiAgKi8KKyNpZm5kZWYgX19vYnN0YWNrX2ZyZWUKKyMgZGVmaW5lIF9fb2JzdGFja19mcmVlIG9ic3RhY2tfZnJlZQorI2VuZGlmCitleHRlcm4gdm9pZCBfX29ic3RhY2tfZnJlZSAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2ssIHZvaWQgKmJsb2NrKTsKIAogDAotLyogRXJyb3IgaGFuZGxlciBjYWxsZWQgd2hlbiBgb2JzdGFja19jaHVua19hbGxvYycgZmFpbGVkIHRvIGFsbG9jYXRlCisvKiBFcnJvciBoYW5kbGVyIGNhbGxlZCB3aGVuICdvYnN0YWNrX2NodW5rX2FsbG9jJyBmYWlsZWQgdG8gYWxsb2NhdGUKICAgIG1vcmUgbWVtb3J5LiAgVGhpcyBjYW4gYmUgc2V0IHRvIGEgdXNlciBkZWZpbmVkIGZ1bmN0aW9uIHdoaWNoCiAgICBzaG91bGQgZWl0aGVyIGFib3J0IGdyYWNlZnVsbHkgb3IgdXNlIGxvbmdqdW1wIC0gYnV0IHNob3VsZG4ndAogICAgcmV0dXJuLiAgVGhlIGRlZmF1bHQgYWN0aW9uIGlzIHRvIHByaW50IGEgbWVzc2FnZSBhbmQgYWJvcnQuICAqLwogZXh0ZXJuIHZvaWQgKCpvYnN0YWNrX2FsbG9jX2ZhaWxlZF9oYW5kbGVyKSAodm9pZCk7CiAKLS8qIEV4aXQgdmFsdWUgdXNlZCB3aGVuIGBwcmludF9hbmRfYWJvcnQnIGlzIHVzZWQuICAqLworLyogRXhpdCB2YWx1ZSB1c2VkIHdoZW4gJ3ByaW50X2FuZF9hYm9ydCcgaXMgdXNlZC4gICovCiBleHRlcm4gaW50IG9ic3RhY2tfZXhpdF9mYWlsdXJlOwogDAogLyogUG9pbnRlciB0byBiZWdpbm5pbmcgb2Ygb2JqZWN0IGJlaW5nIGFsbG9jYXRlZCBvciB0byBiZSBhbGxvY2F0ZWQgbmV4dC4KQEAgLTIxMCwzMiArMjE0LDMyIEBACiAKIC8qIFBvaW50ZXIgdG8gbmV4dCBieXRlIG5vdCB5ZXQgYWxsb2NhdGVkIGluIGN1cnJlbnQgY2h1bmsuICAqLwogCi0jZGVmaW5lIG9ic3RhY2tfbmV4dF9mcmVlKGgpCSgoaCktPm5leHRfZnJlZSkKKyNkZWZpbmUgb2JzdGFja19uZXh0X2ZyZWUoaCkgICAgKChoKS0+bmV4dF9mcmVlKQogCiAvKiBNYXNrIHNwZWNpZnlpbmcgbG93IGJpdHMgdGhhdCBzaG91bGQgYmUgY2xlYXIgaW4gYWRkcmVzcyBvZiBhbiBvYmplY3QuICAqLwogCiAjZGVmaW5lIG9ic3RhY2tfYWxpZ25tZW50X21hc2soaCkgKChoKS0+YWxpZ25tZW50X21hc2spCiAKIC8qIFRvIHByZXZlbnQgcHJvdG90eXBlIHdhcm5pbmdzIHByb3ZpZGUgY29tcGxldGUgYXJndW1lbnQgbGlzdC4gICovCi0jZGVmaW5lIG9ic3RhY2tfaW5pdChoKQkJCQkJCVwKLSAgX29ic3RhY2tfYmVnaW4gKChoKSwgMCwgMCwJCQkJCVwKLQkJICAodm9pZCAqKCopIChsb25nKSkgb2JzdGFja19jaHVua19hbGxvYywJXAotCQkgICh2b2lkICgqKSAodm9pZCAqKSkgb2JzdGFja19jaHVua19mcmVlKQorI2RlZmluZSBvYnN0YWNrX2luaXQoaCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX29ic3RhY2tfYmVnaW4gKChoKSwgMCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAodm9pZCAqKCopIChsb25nKSkgb2JzdGFja19jaHVua19hbGxvYywgICAgICAgXAorICAgICAgICAgICAgICAgICAgKHZvaWQgKCopICh2b2lkICopKSBvYnN0YWNrX2NodW5rX2ZyZWUpCiAKLSNkZWZpbmUgb2JzdGFja19iZWdpbihoLCBzaXplKQkJCQkJXAotICBfb2JzdGFja19iZWdpbiAoKGgpLCAoc2l6ZSksIDAsCQkJCVwKLQkJICAodm9pZCAqKCopIChsb25nKSkgb2JzdGFja19jaHVua19hbGxvYywJXAotCQkgICh2b2lkICgqKSAodm9pZCAqKSkgb2JzdGFja19jaHVua19mcmVlKQorI2RlZmluZSBvYnN0YWNrX2JlZ2luKGgsIHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX29ic3RhY2tfYmVnaW4gKChoKSwgKHNpemUpLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAodm9pZCAqKCopIChsb25nKSkgb2JzdGFja19jaHVua19hbGxvYywgICAgICAgXAorICAgICAgICAgICAgICAgICAgKHZvaWQgKCopICh2b2lkICopKSBvYnN0YWNrX2NodW5rX2ZyZWUpCiAKICNkZWZpbmUgb2JzdGFja19zcGVjaWZ5X2FsbG9jYXRpb24oaCwgc2l6ZSwgYWxpZ25tZW50LCBjaHVua2Z1biwgZnJlZWZ1bikgIFwKLSAgX29ic3RhY2tfYmVnaW4gKChoKSwgKHNpemUpLCAoYWxpZ25tZW50KSwJCQkJICAgXAotCQkgICh2b2lkICooKikgKGxvbmcpKSAoY2h1bmtmdW4pLAkJCSAgIFwKLQkJICAodm9pZCAoKikgKHZvaWQgKikpIChmcmVlZnVuKSkKKyAgX29ic3RhY2tfYmVnaW4gKChoKSwgKHNpemUpLCAoYWxpZ25tZW50KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICh2b2lkICooKikgKGxvbmcpKSAoY2h1bmtmdW4pLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICh2b2lkICgqKSAodm9pZCAqKSkgKGZyZWVmdW4pKQogCiAjZGVmaW5lIG9ic3RhY2tfc3BlY2lmeV9hbGxvY2F0aW9uX3dpdGhfYXJnKGgsIHNpemUsIGFsaWdubWVudCwgY2h1bmtmdW4sIGZyZWVmdW4sIGFyZykgXAotICBfb2JzdGFja19iZWdpbl8xICgoaCksIChzaXplKSwgKGFsaWdubWVudCksCQkJCVwKLQkJICAgICh2b2lkICooKikgKHZvaWQgKiwgbG9uZykpIChjaHVua2Z1biksCQlcCi0JCSAgICAodm9pZCAoKikgKHZvaWQgKiwgdm9pZCAqKSkgKGZyZWVmdW4pLCAoYXJnKSkKKyAgX29ic3RhY2tfYmVnaW5fMSAoKGgpLCAoc2l6ZSksIChhbGlnbm1lbnQpLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgKHZvaWQgKigqKSAodm9pZCAqLCBsb25nKSkgKGNodW5rZnVuKSwgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgKHZvaWQgKCopICh2b2lkICosIHZvaWQgKikpIChmcmVlZnVuKSwgKGFyZykpCiAKICNkZWZpbmUgb2JzdGFja19jaHVua2Z1bihoLCBuZXdjaHVua2Z1bikgXAogICAoKGgpIC0+IGNodW5rZnVuID0gKHN0cnVjdCBfb2JzdGFja19jaHVuayAqKCopKHZvaWQgKiwgbG9uZykpIChuZXdjaHVua2Z1bikpCkBAIC0yNDksNyArMjUzLDcgQEAKIAogI2RlZmluZSBvYnN0YWNrX21lbW9yeV91c2VkKGgpIF9vYnN0YWNrX21lbW9yeV91c2VkIChoKQogDAotI2lmIGRlZmluZWQgX19HTlVDX18gJiYgZGVmaW5lZCBfX1NURENfXyAmJiBfX1NURENfXworI2lmIGRlZmluZWQgX19HTlVDX18KIC8qIE5leHRTdGVwIDIuMCBjYyBpcyByZWFsbHkgZ2NjIDEuOTMgYnV0IGl0IGRlZmluZXMgX19HTlVDX18gPSAyIGFuZAogICAgZG9lcyBub3QgaW1wbGVtZW50IF9fZXh0ZW5zaW9uX18uICBCdXQgdGhhdCBjb21waWxlciBkb2Vzbid0IGRlZmluZQogICAgX19HTlVDX01JTk9SX18uICAqLwpAQCAtMjYwLDE2MCArMjY0LDE2MCBAQAogLyogRm9yIEdOVSBDLCBpZiBub3QgLXRyYWRpdGlvbmFsLAogICAgd2UgY2FuIGRlZmluZSB0aGVzZSBtYWNyb3MgdG8gY29tcHV0ZSBhbGwgYXJncyBvbmx5IG9uY2UKICAgIHdpdGhvdXQgdXNpbmcgYSBnbG9iYWwgdmFyaWFibGUuCi0gICBBbHNvLCB3ZSBjYW4gYXZvaWQgdXNpbmcgdGhlIGB0ZW1wJyBzbG90LCB0byBtYWtlIGZhc3RlciBjb2RlLiAgKi8KKyAgIEFsc28sIHdlIGNhbiBhdm9pZCB1c2luZyB0aGUgJ3RlbXAnIHNsb3QsIHRvIG1ha2UgZmFzdGVyIGNvZGUuICAqLwogCi0jIGRlZmluZSBvYnN0YWNrX29iamVjdF9zaXplKE9CU1RBQ0spCQkJCQlcCi0gIF9fZXh0ZW5zaW9uX18JCQkJCQkJCVwKLSAgKHsgc3RydWN0IG9ic3RhY2sgY29uc3QgKl9fbyA9IChPQlNUQUNLKTsJCQkJXAorIyBkZWZpbmUgb2JzdGFja19vYmplY3Rfc2l6ZShPQlNUQUNLKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoeyBzdHJ1Y3Qgb2JzdGFjayBjb25zdCAqX19vID0gKE9CU1RBQ0spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAodW5zaWduZWQpIChfX28tPm5leHRfZnJlZSAtIF9fby0+b2JqZWN0X2Jhc2UpOyB9KQogCi0jIGRlZmluZSBvYnN0YWNrX3Jvb20oT0JTVEFDSykJCQkJCQlcCi0gIF9fZXh0ZW5zaW9uX18JCQkJCQkJCVwKLSAgKHsgc3RydWN0IG9ic3RhY2sgY29uc3QgKl9fbyA9IChPQlNUQUNLKTsJCQkJXAorIyBkZWZpbmUgb2JzdGFja19yb29tKE9CU1RBQ0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoeyBzdHJ1Y3Qgb2JzdGFjayBjb25zdCAqX19vID0gKE9CU1RBQ0spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAodW5zaWduZWQpIChfX28tPmNodW5rX2xpbWl0IC0gX19vLT5uZXh0X2ZyZWUpOyB9KQogCi0jIGRlZmluZSBvYnN0YWNrX21ha2Vfcm9vbShPQlNUQUNLLGxlbmd0aCkJCQkJXAotX19leHRlbnNpb25fXwkJCQkJCQkJXAotKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsJCQkJCVwKLSAgIGludCBfX2xlbiA9IChsZW5ndGgpOwkJCQkJCVwKLSAgIGlmIChfX28tPmNodW5rX2xpbWl0IC0gX19vLT5uZXh0X2ZyZWUgPCBfX2xlbikJCQlcCi0gICAgIF9vYnN0YWNrX25ld2NodW5rIChfX28sIF9fbGVuKTsJCQkJCVwKKyMgZGVmaW5lIG9ic3RhY2tfbWFrZV9yb29tKE9CU1RBQ0ssbGVuZ3RoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK19fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGludCBfX2xlbiA9IChsZW5ndGgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGlmIChfX28tPmNodW5rX2xpbWl0IC0gX19vLT5uZXh0X2ZyZWUgPCBfX2xlbikgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgX29ic3RhY2tfbmV3Y2h1bmsgKF9fbywgX19sZW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICh2b2lkKSAwOyB9KQogCi0jIGRlZmluZSBvYnN0YWNrX2VtcHR5X3AoT0JTVEFDSykJCQkJCVwKLSAgX19leHRlbnNpb25fXwkJCQkJCQkJXAotICAoeyBzdHJ1Y3Qgb2JzdGFjayBjb25zdCAqX19vID0gKE9CU1RBQ0spOwkJCQlcCi0gICAgIChfX28tPmNodW5rLT5wcmV2ID09IDAJCQkJCQlcCi0gICAgICAmJiBfX28tPm5leHRfZnJlZSA9PSBfX1BUUl9BTElHTiAoKGNoYXIgKikgX19vLT5jaHVuaywJCVwKLQkJCQkJX19vLT5jaHVuay0+Y29udGVudHMsCQlcCi0JCQkJCV9fby0+YWxpZ25tZW50X21hc2spKTsgfSkKKyMgZGVmaW5lIG9ic3RhY2tfZW1wdHlfcChPQlNUQUNLKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKHsgc3RydWN0IG9ic3RhY2sgY29uc3QgKl9fbyA9IChPQlNUQUNLKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgKF9fby0+Y2h1bmstPnByZXYgPT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICYmIF9fby0+bmV4dF9mcmVlID09IF9fUFRSX0FMSUdOICgoY2hhciAqKSBfX28tPmNodW5rLCAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX28tPmNodW5rLT5jb250ZW50cywgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX28tPmFsaWdubWVudF9tYXNrKSk7IH0pCiAKLSMgZGVmaW5lIG9ic3RhY2tfZ3JvdyhPQlNUQUNLLHdoZXJlLGxlbmd0aCkJCQkJXAotX19leHRlbnNpb25fXwkJCQkJCQkJXAotKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsJCQkJCVwKLSAgIGludCBfX2xlbiA9IChsZW5ndGgpOwkJCQkJCVwKLSAgIGlmIChfX28tPm5leHRfZnJlZSArIF9fbGVuID4gX19vLT5jaHVua19saW1pdCkJCQlcCi0gICAgIF9vYnN0YWNrX25ld2NodW5rIChfX28sIF9fbGVuKTsJCQkJCVwKLSAgIG1lbWNweSAoX19vLT5uZXh0X2ZyZWUsIHdoZXJlLCBfX2xlbik7CQkJCVwKLSAgIF9fby0+bmV4dF9mcmVlICs9IF9fbGVuOwkJCQkJCVwKKyMgZGVmaW5lIG9ic3RhY2tfZ3JvdyhPQlNUQUNLLHdoZXJlLGxlbmd0aCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK19fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGludCBfX2xlbiA9IChsZW5ndGgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGlmIChfX28tPm5leHRfZnJlZSArIF9fbGVuID4gX19vLT5jaHVua19saW1pdCkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgX29ic3RhY2tfbmV3Y2h1bmsgKF9fbywgX19sZW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIG1lbWNweSAoX19vLT5uZXh0X2ZyZWUsIHdoZXJlLCBfX2xlbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIF9fby0+bmV4dF9mcmVlICs9IF9fbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICh2b2lkKSAwOyB9KQogCi0jIGRlZmluZSBvYnN0YWNrX2dyb3cwKE9CU1RBQ0ssd2hlcmUsbGVuZ3RoKQkJCQlcCi1fX2V4dGVuc2lvbl9fCQkJCQkJCQlcCi0oeyBzdHJ1Y3Qgb2JzdGFjayAqX19vID0gKE9CU1RBQ0spOwkJCQkJXAotICAgaW50IF9fbGVuID0gKGxlbmd0aCk7CQkJCQkJXAotICAgaWYgKF9fby0+bmV4dF9mcmVlICsgX19sZW4gKyAxID4gX19vLT5jaHVua19saW1pdCkJCQlcCi0gICAgIF9vYnN0YWNrX25ld2NodW5rIChfX28sIF9fbGVuICsgMSk7CQkJCVwKLSAgIG1lbWNweSAoX19vLT5uZXh0X2ZyZWUsIHdoZXJlLCBfX2xlbik7CQkJCVwKLSAgIF9fby0+bmV4dF9mcmVlICs9IF9fbGVuOwkJCQkJCVwKLSAgICooX19vLT5uZXh0X2ZyZWUpKysgPSAwOwkJCQkJCVwKKyMgZGVmaW5lIG9ic3RhY2tfZ3JvdzAoT0JTVEFDSyx3aGVyZSxsZW5ndGgpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK19fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGludCBfX2xlbiA9IChsZW5ndGgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGlmIChfX28tPm5leHRfZnJlZSArIF9fbGVuICsgMSA+IF9fby0+Y2h1bmtfbGltaXQpICAgICAgICAgICAgICAgICAgIFwKKyAgICAgX29ic3RhY2tfbmV3Y2h1bmsgKF9fbywgX19sZW4gKyAxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIG1lbWNweSAoX19vLT5uZXh0X2ZyZWUsIHdoZXJlLCBfX2xlbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIF9fby0+bmV4dF9mcmVlICs9IF9fbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICooX19vLT5uZXh0X2ZyZWUpKysgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICh2b2lkKSAwOyB9KQogCi0jIGRlZmluZSBvYnN0YWNrXzFncm93KE9CU1RBQ0ssZGF0dW0pCQkJCQlcCi1fX2V4dGVuc2lvbl9fCQkJCQkJCQlcCi0oeyBzdHJ1Y3Qgb2JzdGFjayAqX19vID0gKE9CU1RBQ0spOwkJCQkJXAotICAgaWYgKF9fby0+bmV4dF9mcmVlICsgMSA+IF9fby0+Y2h1bmtfbGltaXQpCQkJCVwKLSAgICAgX29ic3RhY2tfbmV3Y2h1bmsgKF9fbywgMSk7CQkJCQlcCi0gICBvYnN0YWNrXzFncm93X2Zhc3QgKF9fbywgZGF0dW0pOwkJCQkJXAorIyBkZWZpbmUgb2JzdGFja18xZ3JvdyhPQlNUQUNLLGRhdHVtKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgaWYgKF9fby0+bmV4dF9mcmVlICsgMSA+IF9fby0+Y2h1bmtfbGltaXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICBfb2JzdGFja19uZXdjaHVuayAoX19vLCAxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgb2JzdGFja18xZ3Jvd19mYXN0IChfX28sIGRhdHVtKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKHZvaWQpIDA7IH0pCiAKIC8qIFRoZXNlIGFzc3VtZSB0aGF0IHRoZSBvYnN0YWNrIGFsaWdubWVudCBpcyBnb29kIGVub3VnaCBmb3IgcG9pbnRlcnMKICAgIG9yIGludHMsIGFuZCB0aGF0IHRoZSBkYXRhIGFkZGVkIHNvIGZhciB0byB0aGUgY3VycmVudCBvYmplY3QKICAgIHNoYXJlcyB0aGF0IG11Y2ggYWxpZ25tZW50LiAgKi8KIAotIyBkZWZpbmUgb2JzdGFja19wdHJfZ3JvdyhPQlNUQUNLLGRhdHVtKQkJCQlcCi1fX2V4dGVuc2lvbl9fCQkJCQkJCQlcCi0oeyBzdHJ1Y3Qgb2JzdGFjayAqX19vID0gKE9CU1RBQ0spOwkJCQkJXAotICAgaWYgKF9fby0+bmV4dF9mcmVlICsgc2l6ZW9mICh2b2lkICopID4gX19vLT5jaHVua19saW1pdCkJCVwKLSAgICAgX29ic3RhY2tfbmV3Y2h1bmsgKF9fbywgc2l6ZW9mICh2b2lkICopKTsJCQkJXAotICAgb2JzdGFja19wdHJfZ3Jvd19mYXN0IChfX28sIGRhdHVtKTsgfSkJCQkJXAorIyBkZWZpbmUgb2JzdGFja19wdHJfZ3JvdyhPQlNUQUNLLGRhdHVtKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgaWYgKF9fby0+bmV4dF9mcmVlICsgc2l6ZW9mICh2b2lkICopID4gX19vLT5jaHVua19saW1pdCkgICAgICAgICAgICAgXAorICAgICBfb2JzdGFja19uZXdjaHVuayAoX19vLCBzaXplb2YgKHZvaWQgKikpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgb2JzdGFja19wdHJfZ3Jvd19mYXN0IChfX28sIGRhdHVtKTsgfSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCi0jIGRlZmluZSBvYnN0YWNrX2ludF9ncm93KE9CU1RBQ0ssZGF0dW0pCQkJCVwKLV9fZXh0ZW5zaW9uX18JCQkJCQkJCVwKLSh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCi0gICBpZiAoX19vLT5uZXh0X2ZyZWUgKyBzaXplb2YgKGludCkgPiBfX28tPmNodW5rX2xpbWl0KQkJXAotICAgICBfb2JzdGFja19uZXdjaHVuayAoX19vLCBzaXplb2YgKGludCkpOwkJCQlcCisjIGRlZmluZSBvYnN0YWNrX2ludF9ncm93KE9CU1RBQ0ssZGF0dW0pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vID0gKE9CU1RBQ0spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICBpZiAoX19vLT5uZXh0X2ZyZWUgKyBzaXplb2YgKGludCkgPiBfX28tPmNodW5rX2xpbWl0KSAgICAgICAgICAgICAgICBcCisgICAgIF9vYnN0YWNrX25ld2NodW5rIChfX28sIHNpemVvZiAoaW50KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBvYnN0YWNrX2ludF9ncm93X2Zhc3QgKF9fbywgZGF0dW0pOyB9KQogCi0jIGRlZmluZSBvYnN0YWNrX3B0cl9ncm93X2Zhc3QoT0JTVEFDSyxhcHRyKQkJCQlcCi1fX2V4dGVuc2lvbl9fCQkJCQkJCQlcCi0oeyBzdHJ1Y3Qgb2JzdGFjayAqX19vMSA9IChPQlNUQUNLKTsJCQkJCVwKLSAgICooY29uc3Qgdm9pZCAqKikgX19vMS0+bmV4dF9mcmVlID0gKGFwdHIpOwkJCQlcCi0gICBfX28xLT5uZXh0X2ZyZWUgKz0gc2l6ZW9mIChjb25zdCB2b2lkICopOwkJCQlcCisjIGRlZmluZSBvYnN0YWNrX3B0cl9ncm93X2Zhc3QoT0JTVEFDSyxhcHRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vMSA9IChPQlNUQUNLKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAqKGNvbnN0IHZvaWQgKiopIF9fbzEtPm5leHRfZnJlZSA9IChhcHRyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICBfX28xLT5uZXh0X2ZyZWUgKz0gc2l6ZW9mIChjb25zdCB2b2lkICopOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAodm9pZCkgMDsgfSkKIAotIyBkZWZpbmUgb2JzdGFja19pbnRfZ3Jvd19mYXN0KE9CU1RBQ0ssYWludCkJCQkJXAotX19leHRlbnNpb25fXwkJCQkJCQkJXAotKHsgc3RydWN0IG9ic3RhY2sgKl9fbzEgPSAoT0JTVEFDSyk7CQkJCQlcCi0gICAqKGludCAqKSBfX28xLT5uZXh0X2ZyZWUgPSAoYWludCk7CQkJCQlcCi0gICBfX28xLT5uZXh0X2ZyZWUgKz0gc2l6ZW9mIChpbnQpOwkJCQkJXAorIyBkZWZpbmUgb2JzdGFja19pbnRfZ3Jvd19mYXN0KE9CU1RBQ0ssYWludCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbzEgPSAoT0JTVEFDSyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgKihpbnQgKikgX19vMS0+bmV4dF9mcmVlID0gKGFpbnQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgX19vMS0+bmV4dF9mcmVlICs9IHNpemVvZiAoaW50KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKHZvaWQpIDA7IH0pCiAKLSMgZGVmaW5lIG9ic3RhY2tfYmxhbmsoT0JTVEFDSyxsZW5ndGgpCQkJCQlcCi1fX2V4dGVuc2lvbl9fCQkJCQkJCQlcCi0oeyBzdHJ1Y3Qgb2JzdGFjayAqX19vID0gKE9CU1RBQ0spOwkJCQkJXAotICAgaW50IF9fbGVuID0gKGxlbmd0aCk7CQkJCQkJXAotICAgaWYgKF9fby0+Y2h1bmtfbGltaXQgLSBfX28tPm5leHRfZnJlZSA8IF9fbGVuKQkJCVwKLSAgICAgX29ic3RhY2tfbmV3Y2h1bmsgKF9fbywgX19sZW4pOwkJCQkJXAotICAgb2JzdGFja19ibGFua19mYXN0IChfX28sIF9fbGVuKTsJCQkJCVwKKyMgZGVmaW5lIG9ic3RhY2tfYmxhbmsoT0JTVEFDSyxsZW5ndGgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK19fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGludCBfX2xlbiA9IChsZW5ndGgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGlmIChfX28tPmNodW5rX2xpbWl0IC0gX19vLT5uZXh0X2ZyZWUgPCBfX2xlbikgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgX29ic3RhY2tfbmV3Y2h1bmsgKF9fbywgX19sZW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIG9ic3RhY2tfYmxhbmtfZmFzdCAoX19vLCBfX2xlbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICh2b2lkKSAwOyB9KQogCi0jIGRlZmluZSBvYnN0YWNrX2FsbG9jKE9CU1RBQ0ssbGVuZ3RoKQkJCQkJXAotX19leHRlbnNpb25fXwkJCQkJCQkJXAotKHsgc3RydWN0IG9ic3RhY2sgKl9faCA9IChPQlNUQUNLKTsJCQkJCVwKLSAgIG9ic3RhY2tfYmxhbmsgKF9faCwgKGxlbmd0aCkpOwkJCQkJXAorIyBkZWZpbmUgb2JzdGFja19hbGxvYyhPQlNUQUNLLGxlbmd0aCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKHsgc3RydWN0IG9ic3RhY2sgKl9faCA9IChPQlNUQUNLKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgb2JzdGFja19ibGFuayAoX19oLCAobGVuZ3RoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgb2JzdGFja19maW5pc2ggKF9faCk7IH0pCiAKLSMgZGVmaW5lIG9ic3RhY2tfY29weShPQlNUQUNLLHdoZXJlLGxlbmd0aCkJCQkJXAotX19leHRlbnNpb25fXwkJCQkJCQkJXAotKHsgc3RydWN0IG9ic3RhY2sgKl9faCA9IChPQlNUQUNLKTsJCQkJCVwKLSAgIG9ic3RhY2tfZ3JvdyAoX19oLCAod2hlcmUpLCAobGVuZ3RoKSk7CQkJCVwKKyMgZGVmaW5lIG9ic3RhY2tfY29weShPQlNUQUNLLHdoZXJlLGxlbmd0aCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK19fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX2ggPSAoT0JTVEFDSyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIG9ic3RhY2tfZ3JvdyAoX19oLCAod2hlcmUpLCAobGVuZ3RoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIG9ic3RhY2tfZmluaXNoIChfX2gpOyB9KQogCi0jIGRlZmluZSBvYnN0YWNrX2NvcHkwKE9CU1RBQ0ssd2hlcmUsbGVuZ3RoKQkJCQlcCi1fX2V4dGVuc2lvbl9fCQkJCQkJCQlcCi0oeyBzdHJ1Y3Qgb2JzdGFjayAqX19oID0gKE9CU1RBQ0spOwkJCQkJXAotICAgb2JzdGFja19ncm93MCAoX19oLCAod2hlcmUpLCAobGVuZ3RoKSk7CQkJCVwKKyMgZGVmaW5lIG9ic3RhY2tfY29weTAoT0JTVEFDSyx3aGVyZSxsZW5ndGgpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK19fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX2ggPSAoT0JTVEFDSyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIG9ic3RhY2tfZ3JvdzAgKF9faCwgKHdoZXJlKSwgKGxlbmd0aCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIG9ic3RhY2tfZmluaXNoIChfX2gpOyB9KQogCiAvKiBUaGUgbG9jYWwgdmFyaWFibGUgaXMgbmFtZWQgX19vMSB0byBhdm9pZCBhIG5hbWUgY29uZmxpY3QKICAgIHdoZW4gb2JzdGFja19ibGFuayBpcyBjYWxsZWQuICAqLwotIyBkZWZpbmUgb2JzdGFja19maW5pc2goT0JTVEFDSykJCQkJCVwKLV9fZXh0ZW5zaW9uX18JCQkJCQkJCVwKLSh7IHN0cnVjdCBvYnN0YWNrICpfX28xID0gKE9CU1RBQ0spOwkJCQkJXAotICAgdm9pZCAqX192YWx1ZSA9ICh2b2lkICopIF9fbzEtPm9iamVjdF9iYXNlOwkJCQlcCi0gICBpZiAoX19vMS0+bmV4dF9mcmVlID09IF9fdmFsdWUpCQkJCQlcCi0gICAgIF9fbzEtPm1heWJlX2VtcHR5X29iamVjdCA9IDE7CQkJCQlcCi0gICBfX28xLT5uZXh0X2ZyZWUJCQkJCQkJXAotICAgICA9IF9fUFRSX0FMSUdOIChfX28xLT5vYmplY3RfYmFzZSwgX19vMS0+bmV4dF9mcmVlLAkJCVwKLQkJICAgIF9fbzEtPmFsaWdubWVudF9tYXNrKTsJCQkJXAotICAgaWYgKF9fbzEtPm5leHRfZnJlZSAtIChjaGFyICopX19vMS0+Y2h1bmsJCQkJXAotICAgICAgID4gX19vMS0+Y2h1bmtfbGltaXQgLSAoY2hhciAqKV9fbzEtPmNodW5rKQkJCVwKLSAgICAgX19vMS0+bmV4dF9mcmVlID0gX19vMS0+Y2h1bmtfbGltaXQ7CQkJCVwKLSAgIF9fbzEtPm9iamVjdF9iYXNlID0gX19vMS0+bmV4dF9mcmVlOwkJCQkJXAorIyBkZWZpbmUgb2JzdGFja19maW5pc2goT0JTVEFDSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbzEgPSAoT0JTVEFDSyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgdm9pZCAqX192YWx1ZSA9ICh2b2lkICopIF9fbzEtPm9iamVjdF9iYXNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgaWYgKF9fbzEtPm5leHRfZnJlZSA9PSBfX3ZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICBfX28xLT5tYXliZV9lbXB0eV9vYmplY3QgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgX19vMS0+bmV4dF9mcmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICA9IF9fUFRSX0FMSUdOIChfX28xLT5vYmplY3RfYmFzZSwgX19vMS0+bmV4dF9mcmVlLCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBfX28xLT5hbGlnbm1lbnRfbWFzayk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgaWYgKF9fbzEtPm5leHRfZnJlZSAtIChjaGFyICopX19vMS0+Y2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgID4gX19vMS0+Y2h1bmtfbGltaXQgLSAoY2hhciAqKV9fbzEtPmNodW5rKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICBfX28xLT5uZXh0X2ZyZWUgPSBfX28xLT5jaHVua19saW1pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgX19vMS0+b2JqZWN0X2Jhc2UgPSBfX28xLT5uZXh0X2ZyZWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgX192YWx1ZTsgfSkKIAotIyBkZWZpbmUgb2JzdGFja19mcmVlKE9CU1RBQ0ssIE9CSikJCQkJCVwKLV9fZXh0ZW5zaW9uX18JCQkJCQkJCVwKLSh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCi0gICB2b2lkICpfX29iaiA9IChPQkopOwkJCQkJCQlcCisjIGRlZmluZSBvYnN0YWNrX2ZyZWUoT0JTVEFDSywgT0JKKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vID0gKE9CU1RBQ0spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICB2b2lkICpfX29iaiA9IChPQkopOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBpZiAoX19vYmogPiAodm9pZCAqKV9fby0+Y2h1bmsgJiYgX19vYmogPCAodm9pZCAqKV9fby0+Y2h1bmtfbGltaXQpICBcCi0gICAgIF9fby0+bmV4dF9mcmVlID0gX19vLT5vYmplY3RfYmFzZSA9IChjaGFyICopX19vYmo7CQkJXAotICAgZWxzZSAob2JzdGFja19mcmVlKSAoX19vLCBfX29iaik7IH0pCisgICAgIF9fby0+bmV4dF9mcmVlID0gX19vLT5vYmplY3RfYmFzZSA9IChjaGFyICopX19vYmo7ICAgICAgICAgICAgICAgICBcCisgICBlbHNlIChfX29ic3RhY2tfZnJlZSkgKF9fbywgX19vYmopOyB9KQogDAotI2Vsc2UgLyogbm90IF9fR05VQ19fIG9yIG5vdCBfX1NURENfXyAqLworI2Vsc2UgLyogbm90IF9fR05VQ19fICovCiAKICMgZGVmaW5lIG9ic3RhY2tfb2JqZWN0X3NpemUoaCkgXAogICh1bnNpZ25lZCkgKChoKS0+bmV4dF9mcmVlIC0gKGgpLT5vYmplY3RfYmFzZSkKIAotIyBkZWZpbmUgb2JzdGFja19yb29tKGgpCQlcCisjIGRlZmluZSBvYnN0YWNrX3Jvb20oaCkgICAgICAgICAgICAgICAgXAogICh1bnNpZ25lZCkgKChoKS0+Y2h1bmtfbGltaXQgLSAoaCktPm5leHRfZnJlZSkKIAogIyBkZWZpbmUgb2JzdGFja19lbXB0eV9wKGgpIFwKLSAoKGgpLT5jaHVuay0+cHJldiA9PSAwCQkJCQkJCVwKLSAgJiYgKGgpLT5uZXh0X2ZyZWUgPT0gX19QVFJfQUxJR04gKChjaGFyICopIChoKS0+Y2h1bmssCQlcCi0JCQkJICAgIChoKS0+Y2h1bmstPmNvbnRlbnRzLAkJXAotCQkJCSAgICAoaCktPmFsaWdubWVudF9tYXNrKSkKKyAoKGgpLT5jaHVuay0+cHJldiA9PSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgJiYgKGgpLT5uZXh0X2ZyZWUgPT0gX19QVFJfQUxJR04gKChjaGFyICopIChoKS0+Y2h1bmssICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoKS0+Y2h1bmstPmNvbnRlbnRzLCAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoKS0+YWxpZ25tZW50X21hc2spKQogCiAvKiBOb3RlIHRoYXQgdGhlIGNhbGwgdG8gX29ic3RhY2tfbmV3Y2h1bmsgaXMgZW5jbG9zZWQgaW4gKC4uLiwgMCkKICAgIHNvIHRoYXQgd2UgY2FuIGF2b2lkIGhhdmluZyB2b2lkIGV4cHJlc3Npb25zCkBAIC00MjEsODggKzQyNSw4OCBAQAogICAgQ2FzdGluZyB0aGUgdGhpcmQgb3BlcmFuZCB0byB2b2lkIHdhcyB0cmllZCBiZWZvcmUsCiAgICBidXQgc29tZSBjb21waWxlcnMgd29uJ3QgYWNjZXB0IGl0LiAgKi8KIAotIyBkZWZpbmUgb2JzdGFja19tYWtlX3Jvb20oaCxsZW5ndGgpCQkJCQlcCi0oIChoKS0+dGVtcC50ZW1waW50ID0gKGxlbmd0aCksCQkJCQkJXAotICAoKChoKS0+bmV4dF9mcmVlICsgKGgpLT50ZW1wLnRlbXBpbnQgPiAoaCktPmNodW5rX2xpbWl0KQkJXAorIyBkZWZpbmUgb2JzdGFja19tYWtlX3Jvb20oaCxsZW5ndGgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKCAoaCktPnRlbXAudGVtcGludCA9IChsZW5ndGgpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoKChoKS0+bmV4dF9mcmVlICsgKGgpLT50ZW1wLnRlbXBpbnQgPiAoaCktPmNodW5rX2xpbWl0KSAgICAgICAgICAgICAgXAogICAgPyAoX29ic3RhY2tfbmV3Y2h1bmsgKChoKSwgKGgpLT50ZW1wLnRlbXBpbnQpLCAwKSA6IDApKQogCi0jIGRlZmluZSBvYnN0YWNrX2dyb3coaCx3aGVyZSxsZW5ndGgpCQkJCQlcCi0oIChoKS0+dGVtcC50ZW1waW50ID0gKGxlbmd0aCksCQkJCQkJXAotICAoKChoKS0+bmV4dF9mcmVlICsgKGgpLT50ZW1wLnRlbXBpbnQgPiAoaCktPmNodW5rX2xpbWl0KQkJXAotICAgPyAoX29ic3RhY2tfbmV3Y2h1bmsgKChoKSwgKGgpLT50ZW1wLnRlbXBpbnQpLCAwKSA6IDApLAkJXAotICBtZW1jcHkgKChoKS0+bmV4dF9mcmVlLCB3aGVyZSwgKGgpLT50ZW1wLnRlbXBpbnQpLAkJCVwKKyMgZGVmaW5lIG9ic3RhY2tfZ3JvdyhoLHdoZXJlLGxlbmd0aCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyggKGgpLT50ZW1wLnRlbXBpbnQgPSAobGVuZ3RoKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKCgoaCktPm5leHRfZnJlZSArIChoKS0+dGVtcC50ZW1waW50ID4gKGgpLT5jaHVua19saW1pdCkgICAgICAgICAgICAgIFwKKyAgID8gKF9vYnN0YWNrX25ld2NodW5rICgoaCksIChoKS0+dGVtcC50ZW1waW50KSwgMCkgOiAwKSwgICAgICAgICAgICAgIFwKKyAgbWVtY3B5ICgoaCktPm5leHRfZnJlZSwgd2hlcmUsIChoKS0+dGVtcC50ZW1waW50KSwgICAgICAgICAgICAgICAgICAgIFwKICAgKGgpLT5uZXh0X2ZyZWUgKz0gKGgpLT50ZW1wLnRlbXBpbnQpCiAKLSMgZGVmaW5lIG9ic3RhY2tfZ3JvdzAoaCx3aGVyZSxsZW5ndGgpCQkJCQlcCi0oIChoKS0+dGVtcC50ZW1waW50ID0gKGxlbmd0aCksCQkJCQkJXAotICAoKChoKS0+bmV4dF9mcmVlICsgKGgpLT50ZW1wLnRlbXBpbnQgKyAxID4gKGgpLT5jaHVua19saW1pdCkJCVwKLSAgID8gKF9vYnN0YWNrX25ld2NodW5rICgoaCksIChoKS0+dGVtcC50ZW1waW50ICsgMSksIDApIDogMCksCQlcCi0gIG1lbWNweSAoKGgpLT5uZXh0X2ZyZWUsIHdoZXJlLCAoaCktPnRlbXAudGVtcGludCksCQkJXAotICAoaCktPm5leHRfZnJlZSArPSAoaCktPnRlbXAudGVtcGludCwJCQkJCVwKKyMgZGVmaW5lIG9ic3RhY2tfZ3JvdzAoaCx3aGVyZSxsZW5ndGgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyggKGgpLT50ZW1wLnRlbXBpbnQgPSAobGVuZ3RoKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKCgoaCktPm5leHRfZnJlZSArIChoKS0+dGVtcC50ZW1waW50ICsgMSA+IChoKS0+Y2h1bmtfbGltaXQpICAgICAgICAgIFwKKyAgID8gKF9vYnN0YWNrX25ld2NodW5rICgoaCksIChoKS0+dGVtcC50ZW1waW50ICsgMSksIDApIDogMCksICAgICAgICAgIFwKKyAgbWVtY3B5ICgoaCktPm5leHRfZnJlZSwgd2hlcmUsIChoKS0+dGVtcC50ZW1waW50KSwgICAgICAgICAgICAgICAgICAgIFwKKyAgKGgpLT5uZXh0X2ZyZWUgKz0gKGgpLT50ZW1wLnRlbXBpbnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKigoaCktPm5leHRfZnJlZSkrKyA9IDApCiAKLSMgZGVmaW5lIG9ic3RhY2tfMWdyb3coaCxkYXR1bSkJCQkJCQlcCi0oICgoKGgpLT5uZXh0X2ZyZWUgKyAxID4gKGgpLT5jaHVua19saW1pdCkJCQkJXAotICAgPyAoX29ic3RhY2tfbmV3Y2h1bmsgKChoKSwgMSksIDApIDogMCksCQkJCVwKKyMgZGVmaW5lIG9ic3RhY2tfMWdyb3coaCxkYXR1bSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyggKCgoaCktPm5leHRfZnJlZSArIDEgPiAoaCktPmNodW5rX2xpbWl0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgID8gKF9vYnN0YWNrX25ld2NodW5rICgoaCksIDEpLCAwKSA6IDApLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgb2JzdGFja18xZ3Jvd19mYXN0IChoLCBkYXR1bSkpCiAKLSMgZGVmaW5lIG9ic3RhY2tfcHRyX2dyb3coaCxkYXR1bSkJCQkJCVwKLSggKCgoaCktPm5leHRfZnJlZSArIHNpemVvZiAoY2hhciAqKSA+IChoKS0+Y2h1bmtfbGltaXQpCQlcCi0gICA/IChfb2JzdGFja19uZXdjaHVuayAoKGgpLCBzaXplb2YgKGNoYXIgKikpLCAwKSA6IDApLAkJXAorIyBkZWZpbmUgb2JzdGFja19wdHJfZ3JvdyhoLGRhdHVtKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKCAoKChoKS0+bmV4dF9mcmVlICsgc2l6ZW9mIChjaGFyICopID4gKGgpLT5jaHVua19saW1pdCkgICAgICAgICAgICAgICAgXAorICAgPyAoX29ic3RhY2tfbmV3Y2h1bmsgKChoKSwgc2l6ZW9mIChjaGFyICopKSwgMCkgOiAwKSwgICAgICAgICAgICAgICAgXAogICBvYnN0YWNrX3B0cl9ncm93X2Zhc3QgKGgsIGRhdHVtKSkKIAotIyBkZWZpbmUgb2JzdGFja19pbnRfZ3JvdyhoLGRhdHVtKQkJCQkJXAotKCAoKChoKS0+bmV4dF9mcmVlICsgc2l6ZW9mIChpbnQpID4gKGgpLT5jaHVua19saW1pdCkJCQlcCi0gICA/IChfb2JzdGFja19uZXdjaHVuayAoKGgpLCBzaXplb2YgKGludCkpLCAwKSA6IDApLAkJCVwKKyMgZGVmaW5lIG9ic3RhY2tfaW50X2dyb3coaCxkYXR1bSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyggKCgoaCktPm5leHRfZnJlZSArIHNpemVvZiAoaW50KSA+IChoKS0+Y2h1bmtfbGltaXQpICAgICAgICAgICAgICAgICAgIFwKKyAgID8gKF9vYnN0YWNrX25ld2NodW5rICgoaCksIHNpemVvZiAoaW50KSksIDApIDogMCksICAgICAgICAgICAgICAgICAgIFwKICAgb2JzdGFja19pbnRfZ3Jvd19mYXN0IChoLCBkYXR1bSkpCiAKLSMgZGVmaW5lIG9ic3RhY2tfcHRyX2dyb3dfZmFzdChoLGFwdHIpCQkJCQlcCisjIGRlZmluZSBvYnN0YWNrX3B0cl9ncm93X2Zhc3QoaCxhcHRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICgoKGNvbnN0IHZvaWQgKiopICgoaCktPm5leHRfZnJlZSArPSBzaXplb2YgKHZvaWQgKikpKVstMV0gPSAoYXB0cikpCiAKLSMgZGVmaW5lIG9ic3RhY2tfaW50X2dyb3dfZmFzdChoLGFpbnQpCQkJCQlcCisjIGRlZmluZSBvYnN0YWNrX2ludF9ncm93X2Zhc3QoaCxhaW50KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICgoKGludCAqKSAoKGgpLT5uZXh0X2ZyZWUgKz0gc2l6ZW9mIChpbnQpKSlbLTFdID0gKGFpbnQpKQogCi0jIGRlZmluZSBvYnN0YWNrX2JsYW5rKGgsbGVuZ3RoKQkJCQkJXAotKCAoaCktPnRlbXAudGVtcGludCA9IChsZW5ndGgpLAkJCQkJCVwKLSAgKCgoaCktPmNodW5rX2xpbWl0IC0gKGgpLT5uZXh0X2ZyZWUgPCAoaCktPnRlbXAudGVtcGludCkJCVwKLSAgID8gKF9vYnN0YWNrX25ld2NodW5rICgoaCksIChoKS0+dGVtcC50ZW1waW50KSwgMCkgOiAwKSwJCVwKKyMgZGVmaW5lIG9ic3RhY2tfYmxhbmsoaCxsZW5ndGgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyggKGgpLT50ZW1wLnRlbXBpbnQgPSAobGVuZ3RoKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKCgoaCktPmNodW5rX2xpbWl0IC0gKGgpLT5uZXh0X2ZyZWUgPCAoaCktPnRlbXAudGVtcGludCkgICAgICAgICAgICAgIFwKKyAgID8gKF9vYnN0YWNrX25ld2NodW5rICgoaCksIChoKS0+dGVtcC50ZW1waW50KSwgMCkgOiAwKSwgICAgICAgICAgICAgIFwKICAgb2JzdGFja19ibGFua19mYXN0IChoLCAoaCktPnRlbXAudGVtcGludCkpCiAKLSMgZGVmaW5lIG9ic3RhY2tfYWxsb2MoaCxsZW5ndGgpCQkJCQlcCisjIGRlZmluZSBvYnN0YWNrX2FsbG9jKGgsbGVuZ3RoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgKG9ic3RhY2tfYmxhbmsgKChoKSwgKGxlbmd0aCkpLCBvYnN0YWNrX2ZpbmlzaCAoKGgpKSkKIAotIyBkZWZpbmUgb2JzdGFja19jb3B5KGgsd2hlcmUsbGVuZ3RoKQkJCQkJXAorIyBkZWZpbmUgb2JzdGFja19jb3B5KGgsd2hlcmUsbGVuZ3RoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogIChvYnN0YWNrX2dyb3cgKChoKSwgKHdoZXJlKSwgKGxlbmd0aCkpLCBvYnN0YWNrX2ZpbmlzaCAoKGgpKSkKIAotIyBkZWZpbmUgb2JzdGFja19jb3B5MChoLHdoZXJlLGxlbmd0aCkJCQkJCVwKKyMgZGVmaW5lIG9ic3RhY2tfY29weTAoaCx3aGVyZSxsZW5ndGgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAob2JzdGFja19ncm93MCAoKGgpLCAod2hlcmUpLCAobGVuZ3RoKSksIG9ic3RhY2tfZmluaXNoICgoaCkpKQogCi0jIGRlZmluZSBvYnN0YWNrX2ZpbmlzaChoKQkJCQkJCVwKLSggKChoKS0+bmV4dF9mcmVlID09IChoKS0+b2JqZWN0X2Jhc2UJCQkJCVwKLSAgID8gKCgoaCktPm1heWJlX2VtcHR5X29iamVjdCA9IDEpLCAwKQkJCQkJXAotICAgOiAwKSwJCQkJCQkJCVwKLSAgKGgpLT50ZW1wLnRlbXBwdHIgPSAoaCktPm9iamVjdF9iYXNlLAkJCQkJXAotICAoaCktPm5leHRfZnJlZQkJCQkJCQlcCi0gICAgPSBfX1BUUl9BTElHTiAoKGgpLT5vYmplY3RfYmFzZSwgKGgpLT5uZXh0X2ZyZWUsCQkJXAotCQkgICAoaCktPmFsaWdubWVudF9tYXNrKSwJCQkJXAotICAoKChoKS0+bmV4dF9mcmVlIC0gKGNoYXIgKikgKGgpLT5jaHVuawkJCQlcCi0gICAgPiAoaCktPmNodW5rX2xpbWl0IC0gKGNoYXIgKikgKGgpLT5jaHVuaykJCQkJXAotICAgPyAoKGgpLT5uZXh0X2ZyZWUgPSAoaCktPmNodW5rX2xpbWl0KSA6IDApLAkJCQlcCi0gIChoKS0+b2JqZWN0X2Jhc2UgPSAoaCktPm5leHRfZnJlZSwJCQkJCVwKKyMgZGVmaW5lIG9ic3RhY2tfZmluaXNoKGgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyggKChoKS0+bmV4dF9mcmVlID09IChoKS0+b2JqZWN0X2Jhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgID8gKCgoaCktPm1heWJlX2VtcHR5X29iamVjdCA9IDEpLCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIDogMCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGgpLT50ZW1wLnRlbXBwdHIgPSAoaCktPm9iamVjdF9iYXNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGgpLT5uZXh0X2ZyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICA9IF9fUFRSX0FMSUdOICgoaCktPm9iamVjdF9iYXNlLCAoaCktPm5leHRfZnJlZSwgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAoaCktPmFsaWdubWVudF9tYXNrKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKCgoaCktPm5leHRfZnJlZSAtIChjaGFyICopIChoKS0+Y2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICA+IChoKS0+Y2h1bmtfbGltaXQgLSAoY2hhciAqKSAoaCktPmNodW5rKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgID8gKChoKS0+bmV4dF9mcmVlID0gKGgpLT5jaHVua19saW1pdCkgOiAwKSwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGgpLT5vYmplY3RfYmFzZSA9IChoKS0+bmV4dF9mcmVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKGgpLT50ZW1wLnRlbXBwdHIpCiAKLSMgZGVmaW5lIG9ic3RhY2tfZnJlZShoLG9iaikJCQkJCQlcCi0oIChoKS0+dGVtcC50ZW1waW50ID0gKGNoYXIgKikgKG9iaikgLSAoY2hhciAqKSAoaCktPmNodW5rLAkJXAotICAoKCgoaCktPnRlbXAudGVtcGludCA+IDAJCQkJCQlcCi0gICAgJiYgKGgpLT50ZW1wLnRlbXBpbnQgPCAoaCktPmNodW5rX2xpbWl0IC0gKGNoYXIgKikgKGgpLT5jaHVuaykpCVwKLSAgID8gKGludCkgKChoKS0+bmV4dF9mcmVlID0gKGgpLT5vYmplY3RfYmFzZQkJCQlcCi0JICAgID0gKGgpLT50ZW1wLnRlbXBpbnQgKyAoY2hhciAqKSAoaCktPmNodW5rKQkJCVwKLSAgIDogKCgob2JzdGFja19mcmVlKSAoKGgpLCAoaCktPnRlbXAudGVtcGludCArIChjaGFyICopIChoKS0+Y2h1bmspLCAwKSwgMCkpKQorIyBkZWZpbmUgb2JzdGFja19mcmVlKGgsb2JqKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKCAoaCktPnRlbXAudGVtcGludCA9IChjaGFyICopIChvYmopIC0gKGNoYXIgKikgKGgpLT5jaHVuaywgICAgICAgICAgICAgXAorICAoKCgoaCktPnRlbXAudGVtcGludCA+IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICYmIChoKS0+dGVtcC50ZW1waW50IDwgKGgpLT5jaHVua19saW1pdCAtIChjaGFyICopIChoKS0+Y2h1bmspKSAgICAgXAorICAgPyAoaW50KSAoKGgpLT5uZXh0X2ZyZWUgPSAoaCktPm9iamVjdF9iYXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgPSAoaCktPnRlbXAudGVtcGludCArIChjaGFyICopIChoKS0+Y2h1bmspICAgICAgICAgICAgICAgICAgXAorICAgOiAoKChfX29ic3RhY2tfZnJlZSkgKChoKSwgKGgpLT50ZW1wLnRlbXBpbnQgKyAoY2hhciAqKSAoaCktPmNodW5rKSwgMCksIDApKSkKIAotI2VuZGlmIC8qIG5vdCBfX0dOVUNfXyBvciBub3QgX19TVERDX18gKi8KKyNlbmRpZiAvKiBub3QgX19HTlVDX18gKi8KIAogI2lmZGVmIF9fY3BsdXNwbHVzCi19CS8qIEMrKyAqLworfSAgICAgICAvKiBDKysgKi8KICNlbmRpZgogCiAjZW5kaWYgLyogb2JzdGFjay5oICovCmRpZmYgLS1naXQgYS9saWIvb2JzdGFja19wcmludGYuYyBiL2xpYi9vYnN0YWNrX3ByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYTA1MzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvb2JzdGFja19wcmludGYuYwpAQCAtMCwwICsxLDkxIEBACisvKiBGb3JtYXR0ZWQgb3V0cHV0IHRvIG9ic3RhY2tzLgorICAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAib2JzdGFjay5oIgorI2luY2x1ZGUgInZhc25wcmludGYuaCIKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qIEdyb3cgYW4gb2JzdGFjayB3aXRoIGZvcm1hdHRlZCBvdXRwdXQuICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcworICAgYWRkZWQgdG8gT0JTLiAgTm8gdHJhaWxpbmcgbnVsIGJ5dGUgaXMgYWRkZWQsIGFuZCB0aGUgb2JqZWN0IHNob3VsZAorICAgYmUgY2xvc2VkIHdpdGggb2JzdGFja19maW5pc2ggYmVmb3JlIHVzZS4KKworICAgVXBvbiBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvciwgY2FsbCBvYnN0YWNrX2FsbG9jX2ZhaWxlZF9oYW5kbGVyLgorICAgVXBvbiBvdGhlciBlcnJvciwgcmV0dXJuIC0xLiAgKi8KK2ludAorb2JzdGFja19wcmludGYgKHN0cnVjdCBvYnN0YWNrICpvYnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ3M7CisgIGludCByZXN1bHQ7CisKKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisgIHJlc3VsdCA9IG9ic3RhY2tfdnByaW50ZiAob2JzLCBmb3JtYXQsIGFyZ3MpOworICB2YV9lbmQgKGFyZ3MpOworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBHcm93IGFuIG9ic3RhY2sgd2l0aCBmb3JtYXR0ZWQgb3V0cHV0LiAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMKKyAgIGFkZGVkIHRvIE9CUy4gIE5vIHRyYWlsaW5nIG51bCBieXRlIGlzIGFkZGVkLCBhbmQgdGhlIG9iamVjdCBzaG91bGQKKyAgIGJlIGNsb3NlZCB3aXRoIG9ic3RhY2tfZmluaXNoIGJlZm9yZSB1c2UuCisKKyAgIFVwb24gbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IsIGNhbGwgb2JzdGFja19hbGxvY19mYWlsZWRfaGFuZGxlci4KKyAgIFVwb24gb3RoZXIgZXJyb3IsIHJldHVybiAtMS4gICovCitpbnQKK29ic3RhY2tfdnByaW50ZiAoc3RydWN0IG9ic3RhY2sgKm9icywgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCit7CisgIC8qIElmIHdlIGFyZSBjbG9zZSB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IG9ic3RhY2sgY2h1bmssIHVzZSBhCisgICAgIHN0YWNrLWFsbG9jYXRlZCBidWZmZXIgYW5kIGNvcHksIHRvIHJlZHVjZSB0aGUgbGlrZWxpaG9vZCBvZiBhCisgICAgIHNtYWxsLXNpemUgbWFsbG9jLiAgT3RoZXJ3aXNlLCBwcmludCBkaXJlY3RseSBpbnRvIHRoZQorICAgICBvYnN0YWNrLiAgKi8KKyAgZW51bSB7IENVVE9GRiA9IDEwMjQgfTsKKyAgY2hhciBidWZbQ1VUT0ZGXTsKKyAgY2hhciAqYmFzZSA9IG9ic3RhY2tfbmV4dF9mcmVlIChvYnMpOworICBzaXplX3QgbGVuID0gb2JzdGFja19yb29tIChvYnMpOworICBjaGFyICpzdHI7CisKKyAgaWYgKGxlbiA8IENVVE9GRikKKyAgICB7CisgICAgICBiYXNlID0gYnVmOworICAgICAgbGVuID0gQ1VUT0ZGOworICAgIH0KKyAgc3RyID0gdmFzbnByaW50ZiAoYmFzZSwgJmxlbiwgZm9ybWF0LCBhcmdzKTsKKyAgaWYgKCFzdHIpCisgICAgeworICAgICAgaWYgKGVycm5vID09IEVOT01FTSkKKyAgICAgICAgb2JzdGFja19hbGxvY19mYWlsZWRfaGFuZGxlciAoKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIGlmIChzdHIgPT0gYmFzZSAmJiBzdHIgIT0gYnVmKQorICAgIC8qIFRoZSBvdXRwdXQgd2FzIGFscmVhZHkgY29tcHV0ZWQgaW4gcGxhY2UsIGJ1dCB3ZSBuZWVkIHRvCisgICAgICAgYWNjb3VudCBmb3IgaXRzIHNpemUuICAqLworICAgIG9ic3RhY2tfYmxhbmtfZmFzdCAob2JzLCBsZW4pOworICBlbHNlCisgICAgeworICAgICAgLyogVGhlIG91dHB1dCBleGNlZWRlZCBhdmFpbGFibGUgb2JzdGFjayBzcGFjZSBvciB3ZSB1c2VkIGJ1ZjsKKyAgICAgICAgIGNvcHkgdGhlIHJlc3VsdGluZyBzdHJpbmcuICAqLworICAgICAgb2JzdGFja19ncm93IChvYnMsIHN0ciwgbGVuKTsKKyAgICAgIGlmIChzdHIgIT0gYnVmKQorICAgICAgICBmcmVlIChzdHIpOworICAgIH0KKyAgcmV0dXJuIGxlbjsKK30KZGlmZiAtLWdpdCBhL2xpYi9vcGVuLmMgYi9saWIvb3Blbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZmM4ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvb3Blbi5jCkBAIC0wLDAgKzEsMTgxIEBACisvKiBPcGVuIGEgZGVzY3JpcHRvciB0byBhIGZpbGUuCisgICBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4sIDIwMDcuICAqLworCisvKiBJZiB0aGUgdXNlcidzIGNvbmZpZy5oIGhhcHBlbnMgdG8gaW5jbHVkZSA8ZmNudGwuaD4sIGxldCBpdCBpbmNsdWRlIG9ubHkKKyAgIHRoZSBzeXN0ZW0ncyA8ZmNudGwuaD4gaGVyZSwgc28gdGhhdCBvcmlnX29wZW4gZG9lc24ndCByZWN1cnNlIHRvCisgICBycGxfb3Blbi4gICovCisjZGVmaW5lIF9fbmVlZF9zeXN0ZW1fZmNudGxfaAorI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBHZXQgdGhlIG9yaWdpbmFsIGRlZmluaXRpb24gb2Ygb3Blbi4gIEl0IG1pZ2h0IGJlIGRlZmluZWQgYXMgYSBtYWNyby4gICovCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyN1bmRlZiBfX25lZWRfc3lzdGVtX2ZjbnRsX2gKKworc3RhdGljIGludAorb3JpZ19vcGVuIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCBtb2RlX3QgbW9kZSkKK3sKKyAgcmV0dXJuIG9wZW4gKGZpbGVuYW1lLCBmbGFncywgbW9kZSk7Cit9CisKKy8qIFNwZWNpZmljYXRpb24uICAqLworLyogV3JpdGUgImZjbnRsLmgiIGhlcmUsIG5vdCA8ZmNudGwuaD4sIG90aGVyd2lzZSBPU0YvMSA1LjEgRFRLIGNjIGVsaW1pbmF0ZXMKKyAgIHRoaXMgaW5jbHVkZSBiZWNhdXNlIG9mIHRoZSBwcmVsaW1pbmFyeSAjaW5jbHVkZSA8ZmNudGwuaD4gYWJvdmUuICAqLworI2luY2x1ZGUgImZjbnRsLmgiCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpZm5kZWYgUkVQTEFDRV9PUEVOX0RJUkVDVE9SWQorIyBkZWZpbmUgUkVQTEFDRV9PUEVOX0RJUkVDVE9SWSAwCisjZW5kaWYKKworaW50CitvcGVuIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCit7CisgIG1vZGVfdCBtb2RlOworICBpbnQgZmQ7CisKKyAgbW9kZSA9IDA7CisgIGlmIChmbGFncyAmIE9fQ1JFQVQpCisgICAgeworICAgICAgdmFfbGlzdCBhcmc7CisgICAgICB2YV9zdGFydCAoYXJnLCBmbGFncyk7CisKKyAgICAgIC8qIFdlIGhhdmUgdG8gdXNlIFBST01PVEVEX01PREVfVCBpbnN0ZWFkIG9mIG1vZGVfdCwgb3RoZXJ3aXNlIEdDQyA0CisgICAgICAgICBjcmVhdGVzIGNyYXNoaW5nIGNvZGUgd2hlbiAnbW9kZV90JyBpcyBzbWFsbGVyIHRoYW4gJ2ludCcuICAqLworICAgICAgbW9kZSA9IHZhX2FyZyAoYXJnLCBQUk9NT1RFRF9NT0RFX1QpOworCisgICAgICB2YV9lbmQgKGFyZyk7CisgICAgfQorCisjaWYgR05VTElCX2RlZmluZWRfT19OT05CTE9DSworICAvKiBUaGUgb25seSBrbm93biBwbGF0Zm9ybSB0aGF0IGxhY2tzIE9fTk9OQkxPQ0sgaXMgbWluZ3csIGJ1dCBpdAorICAgICBhbHNvIGxhY2tzIG5hbWVkIHBpcGVzIGFuZCBVbml4IHNvY2tldHMsIHdoaWNoIGFyZSB0aGUgb25seSB0d28KKyAgICAgZmlsZSB0eXBlcyB0aGF0IHJlcXVpcmUgbm9uLWJsb2NraW5nIGhhbmRsaW5nIGluIG9wZW4oKS4KKyAgICAgVGhlcmVmb3JlLCBpdCBpcyBzYWZlIHRvIGlnbm9yZSBPX05PTkJMT0NLIGhlcmUuICBJdCBpcyBoYW5keQorICAgICB0aGF0IG1pbmd3IGFsc28gbGFja3Mgb3BlbmF0KCksIHNvIHRoYXQgaXMgYWxzbyBjb3ZlcmVkIGhlcmUuICAqLworICBmbGFncyAmPSB+T19OT05CTE9DSzsKKyNlbmRpZgorCisjaWYgKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXworICBpZiAoc3RyY21wIChmaWxlbmFtZSwgIi9kZXYvbnVsbCIpID09IDApCisgICAgZmlsZW5hbWUgPSAiTlVMIjsKKyNlbmRpZgorCisjaWYgT1BFTl9UUkFJTElOR19TTEFTSF9CVUcKKyAgLyogSWYgdGhlIGZpbGVuYW1lIGVuZHMgaW4gYSBzbGFzaCBhbmQgb25lIG9mIE9fQ1JFQVQsIE9fV1JPTkxZLCBPX1JEV1IKKyAgICAgaXMgc3BlY2lmaWVkLCB0aGVuIGZhaWwuCisgICAgIFJhdGlvbmFsZTogUE9TSVggPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2My9iYXNlZGVmcy94YmRfY2hhcDA0Lmh0bWw+CisgICAgIHNheXMgdGhhdAorICAgICAgICJBIHBhdGhuYW1lIHRoYXQgY29udGFpbnMgYXQgbGVhc3Qgb25lIG5vbi1zbGFzaCBjaGFyYWN0ZXIgYW5kIHRoYXQKKyAgICAgICAgZW5kcyB3aXRoIG9uZSBvciBtb3JlIHRyYWlsaW5nIHNsYXNoZXMgc2hhbGwgYmUgcmVzb2x2ZWQgYXMgaWYgYQorICAgICAgICBzaW5nbGUgZG90IGNoYXJhY3RlciAoICcuJyApIHdlcmUgYXBwZW5kZWQgdG8gdGhlIHBhdGhuYW1lLiIKKyAgICAgYW5kCisgICAgICAgIlRoZSBzcGVjaWFsIGZpbGVuYW1lIGRvdCBzaGFsbCByZWZlciB0byB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZCBieQorICAgICAgICBpdHMgcHJlZGVjZXNzb3IuIgorICAgICBJZiB0aGUgbmFtZWQgZmlsZSBhbHJlYWR5IGV4aXN0cyBhcyBhIGRpcmVjdG9yeSwgdGhlbgorICAgICAgIC0gaWYgT19DUkVBVCBpcyBzcGVjaWZpZWQsIG9wZW4oKSBtdXN0IGZhaWwgYmVjYXVzZSBvZiB0aGUgc2VtYW50aWNzCisgICAgICAgICBvZiBPX0NSRUFULAorICAgICAgIC0gaWYgT19XUk9OTFkgb3IgT19SRFdSIGlzIHNwZWNpZmllZCwgb3BlbigpIG11c3QgZmFpbCBiZWNhdXNlIFBPU0lYCisgICAgICAgICA8aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3N1c3YzL2Z1bmN0aW9ucy9vcGVuLmh0bWw+IHNheXMgdGhhdCBpdAorICAgICAgICAgZmFpbHMgd2l0aCBlcnJubyA9IEVJU0RJUiBpbiB0aGlzIGNhc2UuCisgICAgIElmIHRoZSBuYW1lZCBmaWxlIGRvZXMgbm90IGV4aXN0IG9yIGRvZXMgbm90IG5hbWUgYSBkaXJlY3RvcnksIHRoZW4KKyAgICAgICAtIGlmIE9fQ1JFQVQgaXMgc3BlY2lmaWVkLCBvcGVuKCkgbXVzdCBmYWlsIHNpbmNlIG9wZW4oKSBjYW5ub3QgY3JlYXRlCisgICAgICAgICBkaXJlY3RvcmllcywKKyAgICAgICAtIGlmIE9fV1JPTkxZIG9yIE9fUkRXUiBpcyBzcGVjaWZpZWQsIG9wZW4oKSBtdXN0IGZhaWwgYmVjYXVzZSB0aGUKKyAgICAgICAgIGZpbGUgZG9lcyBub3QgY29udGFpbiBhICcuJyBkaXJlY3RvcnkuICAqLworICBpZiAoZmxhZ3MgJiAoT19DUkVBVCB8IE9fV1JPTkxZIHwgT19SRFdSKSkKKyAgICB7CisgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChmaWxlbmFtZSk7CisgICAgICBpZiAobGVuID4gMCAmJiBmaWxlbmFtZVtsZW4gLSAxXSA9PSAnLycpCisgICAgICAgIHsKKyAgICAgICAgICBlcnJubyA9IEVJU0RJUjsKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICBmZCA9IG9yaWdfb3BlbiAoZmlsZW5hbWUsIGZsYWdzLCBtb2RlKTsKKworI2lmIFJFUExBQ0VfRkNIRElSCisgIC8qIEltcGxlbWVudGluZyBmY2hkaXIgYW5kIGZkb3BlbmRpciByZXF1aXJlcyB0aGUgYWJpbGl0eSB0byBvcGVuIGEKKyAgICAgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvci4gIElmIG9wZW4gZG9lc24ndCBzdXBwb3J0IHRoYXQgKGFzIG9uCisgICAgIG1pbmd3KSwgd2UgdXNlIGEgZHVtbXkgZmlsZSB0aGF0IGJlaGF2ZXMgdGhlIHNhbWUgYXMgZGlyZWN0b3JpZXMKKyAgICAgb24gTGludXggKGllLiBhbHdheXMgcmVwb3J0cyBFT0Ygb24gYXR0ZW1wdHMgdG8gcmVhZCgpKSwgYW5kCisgICAgIG92ZXJyaWRlIGZzdGF0KCkgaW4gZmNoZGlyLmMgdG8gaGlkZSB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgYQorICAgICBkdW1teS4gICovCisgIGlmIChSRVBMQUNFX09QRU5fRElSRUNUT1JZICYmIGZkIDwgMCAmJiBlcnJubyA9PSBFQUNDRVMKKyAgICAgICYmICgoZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fUkRPTkxZCisgICAgICAgICAgfHwgKE9fU0VBUkNIICE9IE9fUkRPTkxZICYmIChmbGFncyAmIE9fQUNDTU9ERSkgPT0gT19TRUFSQ0gpKSkKKyAgICB7CisgICAgICBzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworICAgICAgaWYgKHN0YXQgKGZpbGVuYW1lLCAmc3RhdGJ1ZikgPT0gMCAmJiBTX0lTRElSIChzdGF0YnVmLnN0X21vZGUpKQorICAgICAgICB7CisgICAgICAgICAgLyogTWF4aW11bSByZWN1cnNpb24gZGVwdGggb2YgMS4gICovCisgICAgICAgICAgZmQgPSBvcGVuICgiL2Rldi9udWxsIiwgZmxhZ3MsIG1vZGUpOworICAgICAgICAgIGlmICgwIDw9IGZkKQorICAgICAgICAgICAgZmQgPSBfZ2xfcmVnaXN0ZXJfZmQgKGZkLCBmaWxlbmFtZSk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgZXJybm8gPSBFQUNDRVM7CisgICAgfQorI2VuZGlmCisKKyNpZiBPUEVOX1RSQUlMSU5HX1NMQVNIX0JVRworICAvKiBJZiB0aGUgZmlsZW5hbWUgZW5kcyBpbiBhIHNsYXNoIGFuZCBmZCBkb2VzIG5vdCByZWZlciB0byBhIGRpcmVjdG9yeSwKKyAgICAgdGhlbiBmYWlsLgorICAgICBSYXRpb25hbGU6IFBPU0lYIDxodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjMvYmFzZWRlZnMveGJkX2NoYXAwNC5odG1sPgorICAgICBzYXlzIHRoYXQKKyAgICAgICAiQSBwYXRobmFtZSB0aGF0IGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBub24tc2xhc2ggY2hhcmFjdGVyIGFuZCB0aGF0CisgICAgICAgIGVuZHMgd2l0aCBvbmUgb3IgbW9yZSB0cmFpbGluZyBzbGFzaGVzIHNoYWxsIGJlIHJlc29sdmVkIGFzIGlmIGEKKyAgICAgICAgc2luZ2xlIGRvdCBjaGFyYWN0ZXIgKCAnLicgKSB3ZXJlIGFwcGVuZGVkIHRvIHRoZSBwYXRobmFtZS4iCisgICAgIGFuZAorICAgICAgICJUaGUgc3BlY2lhbCBmaWxlbmFtZSBkb3Qgc2hhbGwgcmVmZXIgdG8gdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkKKyAgICAgICAgaXRzIHByZWRlY2Vzc29yLiIKKyAgICAgSWYgdGhlIG5hbWVkIGZpbGUgd2l0aG91dCB0aGUgc2xhc2ggaXMgbm90IGEgZGlyZWN0b3J5LCBvcGVuKCkgbXVzdCBmYWlsCisgICAgIHdpdGggRU5PVERJUi4gICovCisgIGlmIChmZCA+PSAwKQorICAgIHsKKyAgICAgIC8qIFdlIGtub3cgbGVuIGlzIHBvc2l0aXZlLCBzaW5jZSBvcGVuIGRpZCBub3QgZmFpbCB3aXRoIEVOT0VOVC4gICovCisgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChmaWxlbmFtZSk7CisgICAgICBpZiAoZmlsZW5hbWVbbGVuIC0gMV0gPT0gJy8nKQorICAgICAgICB7CisgICAgICAgICAgc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKworICAgICAgICAgIGlmIChmc3RhdCAoZmQsICZzdGF0YnVmKSA+PSAwICYmICFTX0lTRElSIChzdGF0YnVmLnN0X21vZGUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjbG9zZSAoZmQpOworICAgICAgICAgICAgICBlcnJubyA9IEVOT1RESVI7CisgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisjaWYgUkVQTEFDRV9GQ0hESVIKKyAgaWYgKCFSRVBMQUNFX09QRU5fRElSRUNUT1JZICYmIDAgPD0gZmQpCisgICAgZmQgPSBfZ2xfcmVnaXN0ZXJfZmQgKGZkLCBmaWxlbmFtZSk7CisjZW5kaWYKKworICByZXR1cm4gZmQ7Cit9CmRpZmYgLS1naXQgYS9saWIvcGF0aG1heC5oIGIvbGliL3BhdGhtYXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2RiN2NiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3BhdGhtYXguaApAQCAtMCwwICsxLDgzIEBACisvKiBEZWZpbmUgUEFUSF9NQVggc29tZWhvdy4gIFJlcXVpcmVzIHN5cy90eXBlcy5oLgorICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk5LCAyMDAxLCAyMDAzLCAyMDA1LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX1BBVEhNQVhfSAorIyBkZWZpbmUgX1BBVEhNQVhfSAorCisvKiBQT1NJWDoyMDA4IGRlZmluZXMgUEFUSF9NQVggdG8gYmUgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIGEgZmlsZW5hbWUsCisgICBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIE5VTCBieXRlLgorICAgPGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Jhc2VkZWZzL2xpbWl0cy5oLmh0bWw+CisgICBQQVRIX01BWCBpcyBub3QgZGVmaW5lZCBvbiBzeXN0ZW1zIHdoaWNoIGhhdmUgbm8gbGltaXQgb24gZmlsZW5hbWUgbGVuZ3RoLAorICAgc3VjaCBhcyBHTlUvSHVyZC4KKworICAgVGhpcyBmaWxlIGRvZXMgKm5vdCogZGVmaW5lIFBBVEhfTUFYIGFsd2F5cy4gIFByb2dyYW1zIHRoYXQgdXNlIHRoaXMgZmlsZQorICAgY2FuIGhhbmRsZSB0aGUgR05VL0h1cmQgY2FzZSBpbiBzZXZlcmFsIHdheXM6CisgICAgIC0gRWl0aGVyIHdpdGggYSBwYWNrYWdlLXdpZGUgaGFuZGxpbmcsIG9yIHdpdGggYSBwZXItZmlsZSBoYW5kbGluZywKKyAgICAgLSBFaXRoZXIgdGhyb3VnaCBhCisgICAgICAgICAjaWZkZWYgUEFUSF9NQVgKKyAgICAgICBvciB0aHJvdWdoIGEgZmFsbGJhY2sgbGlrZQorICAgICAgICAgI2lmbmRlZiBQQVRIX01BWAorICAgICAgICAgIyBkZWZpbmUgUEFUSF9NQVggODE5MgorICAgICAgICAgI2VuZGlmCisgICAgICAgb3IgdGhyb3VnaCBhIGZhbGxiYWNrIGxpa2UKKyAgICAgICAgICNpZm5kZWYgUEFUSF9NQVgKKyAgICAgICAgICMgZGVmaW5lIFBBVEhfTUFYIHBhdGhjb25mICgiLyIsIF9QQ19QQVRIX01BWCkKKyAgICAgICAgICNlbmRpZgorICovCisKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisKKyMgaW5jbHVkZSA8bGltaXRzLmg+CisKKyMgaWZuZGVmIF9QT1NJWF9QQVRIX01BWAorIyAgZGVmaW5lIF9QT1NJWF9QQVRIX01BWCAyNTYKKyMgZW5kaWYKKworLyogRG9uJ3QgaW5jbHVkZSBzeXMvcGFyYW0uaCBpZiBpdCBhbHJlYWR5IGhhcyBiZWVuLiAgKi8KKyMgaWYgZGVmaW5lZCBIQVZFX1NZU19QQVJBTV9IICYmICFkZWZpbmVkIFBBVEhfTUFYICYmICFkZWZpbmVkIE1BWFBBVEhMRU4KKyMgIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorIyBlbmRpZgorCisjIGlmICFkZWZpbmVkIFBBVEhfTUFYICYmIGRlZmluZWQgTUFYUEFUSExFTgorIyAgZGVmaW5lIFBBVEhfTUFYIE1BWFBBVEhMRU4KKyMgZW5kaWYKKworIyBpZmRlZiBfX2hwdXgKKy8qIE9uIEhQLVVYLCBQQVRIX01BWCBkZXNpZ25hdGVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiBhIGZpbGVuYW1lLAorICAgKm5vdCogaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBOVUwgYnl0ZSwgYW5kIGlzIHNldCB0byAxMDIzLgorICAgQWRkaXRpb25hbGx5LCB3aGVuIF9YT1BFTl9TT1VSQ0UgaXMgZGVmaW5lZCB0byA1MDAgb3IgbW9yZSwgUEFUSF9NQVggaXMKKyAgIG5vdCBkZWZpbmVkIGF0IGFsbCBhbnkgbW9yZS4gICovCisjICB1bmRlZiBQQVRIX01BWAorIyAgZGVmaW5lIFBBVEhfTUFYIDEwMjQKKyMgZW5kaWYKKworIyBpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCisvKiBUaGUgcGFnZSAiTmFtaW5nIEZpbGVzLCBQYXRocywgYW5kIE5hbWVzcGFjZXMiIG9uIG1zZG4ubWljcm9zb2Z0LmNvbSwKKyAgIHNlY3Rpb24gIk1heGltdW0gUGF0aCBMZW5ndGggTGltaXRhdGlvbiIsCisgICA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2FhMzY1MjQ3KHY9dnMuODUpLmFzcHgjbWF4cGF0aD4KKyAgIGV4cGxhaW5zIHRoYXQgdGhlIG1heGltdW0gc2l6ZSBvZiBhIGZpbGVuYW1lLCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nCisgICBOVUwgYnl0ZSwgaXMgMjYwID0gMyArIDI1NiArIDEuCisgICBUaGlzIGlzIHRoZSBzYW1lIHZhbHVlIGFzCisgICAgIC0gRklMRU5BTUVfTUFYIGluIDxzdGRpby5oPiwKKyAgICAgLSBfTUFYX1BBVEggaW4gPHN0ZGxpYi5oPiwKKyAgICAgLSBNQVhfUEFUSCBpbiA8d2luZGVmLmg+LgorICAgVW5kZWZpbmUgdGhlIG9yaWdpbmFsIHZhbHVlLCBiZWNhdXNlIG1pbmd3J3MgPGxpbWl0cy5oPiBnZXRzIGl0IHdyb25nLiAgKi8KKyMgIHVuZGVmIFBBVEhfTUFYCisjICBkZWZpbmUgUEFUSF9NQVggMjYwCisjIGVuZGlmCisKKyNlbmRpZiAvKiBfUEFUSE1BWF9IICovCmRpZmYgLS1naXQgYS9saWIvcGVycm9yLmMgYi9saWIvcGVycm9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg1M2QxYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9wZXJyb3IuYwpAQCAtMCwwICsxLDQ5IEBACisvKiBQcmludCBhIG1lc3NhZ2UgZGVzY3JpYmluZyBlcnJvciBjb2RlLgorICAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSBhbmQgU2ltb24gSm9zZWZzc29uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAic3RyZXJyb3Itb3ZlcnJpZGUuaCIKKworLyogVXNlIHRoZSBzeXN0ZW0gZnVuY3Rpb25zLCBub3QgdGhlIGdudWxpYiBvdmVycmlkZXMgaW4gdGhpcyBmaWxlLiAgKi8KKyN1bmRlZiBmcHJpbnRmCisKK3ZvaWQKK3BlcnJvciAoY29uc3QgY2hhciAqc3RyaW5nKQoreworICBjaGFyIHN0YWNrYnVmW1NUQUNLQlVGX0xFTl07CisgIGludCByZXQ7CisKKyAgLyogT3VyIGltcGxlbWVudGF0aW9uIGd1YXJhbnRlZXMgdGhhdCB0aGlzIHdpbGwgYmUgYSBub24tZW1wdHkKKyAgICAgc3RyaW5nLCBldmVuIGlmIGl0IHJldHVybnMgRUlOVkFMOyBhbmQgc3RhY2tidWYgc2hvdWxkIGJlIHNpemVkCisgICAgIGxhcmdlIGVub3VnaCB0byBhdm9pZCBFUkFOR0UuICAqLworICByZXQgPSBzdHJlcnJvcl9yIChlcnJubywgc3RhY2tidWYsIHNpemVvZiBzdGFja2J1Zik7CisgIGlmIChyZXQgPT0gRVJBTkdFKQorICAgIGFib3J0ICgpOworCisgIGlmIChzdHJpbmcgIT0gTlVMTCAmJiAqc3RyaW5nICE9ICdcMCcpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICVzXG4iLCBzdHJpbmcsIHN0YWNrYnVmKTsKKyAgZWxzZQorICAgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBzdGFja2J1Zik7Cit9CmRpZmYgLS1naXQgYS9saWIvcGlwZS1zYWZlci5jIGIvbGliL3BpcGUtc2FmZXIuYwppbmRleCBmYjAyZDcyLi5kNmRjZTVmIDEwMDY0NAotLS0gYS9saWIvcGlwZS1zYWZlci5jCisrKyBiL2xpYi9waXBlLXNhZmVyLmMKQEAgLTEsMTAgKzEsMTAgQEAKIC8qIEludm9rZSBwaXBlLCBidXQgYXZvaWQgc29tZSBnbGl0Y2hlcy4KLSAgIENvcHlyaWdodCAoQykgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMjAwNS0yMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKQEAgLTEyLDM5ICsxMiw0NSBAQAogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKIC8qIFdyaXR0ZW4gYnkgSmltIE1leWVyaW5nLiAgKi8KIAotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxjb25maWcuaD4KIAogI2luY2x1ZGUgInVuaXN0ZC1zYWZlci5oIgogCiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KIAogLyogTGlrZSBwaXBlLCBidXQgZW5zdXJlIHRoYXQgbmVpdGhlciBvZiB0aGUgZmlsZSBkZXNjcmlwdG9ycyBpcwotICAgU1RESU5fRklMRU5PLCBTVERPVVRfRklMRU5PLCBvciBTVERFUlJfRklMRU5PLiAgKi8KKyAgIFNURElOX0ZJTEVOTywgU1RET1VUX0ZJTEVOTywgb3IgU1RERVJSX0ZJTEVOTy4gIEZhaWwgd2l0aCBFTk9TWVMgb24KKyAgIHBsYXRmb3JtcyB0aGF0IGxhY2sgcGlwZS4gICovCiAKIGludAogcGlwZV9zYWZlciAoaW50IGZkWzJdKQogewotICBpbnQgZmFpbCA9IHBpcGUgKGZkKTsKLSAgaWYgKGZhaWwpCi0gICAgcmV0dXJuIGZhaWw7CisjaWYgSEFWRV9QSVBFCisgIGlmIChwaXBlIChmZCkgPT0gMCkKKyAgICB7CisgICAgICBpbnQgaTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICBmZFtpXSA9IGZkX3NhZmVyIChmZFtpXSk7CisgICAgICAgICAgaWYgKGZkW2ldIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaW50IGUgPSBlcnJubzsKKyAgICAgICAgICAgICAgY2xvc2UgKGZkWzEgLSBpXSk7CisgICAgICAgICAgICAgIGVycm5vID0gZTsKKyAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAgewotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspCi0gICAgICB7Ci0JaW50IGYgPSBmZF9zYWZlciAoZmRbaV0pOwotCWlmIChmIDwgMCkKLQkgIHJldHVybiAtMTsKLQlmZFtpXSA9IGY7Ci0gICAgICB9Ci0gIH0KKyAgICAgIHJldHVybiAwOworICAgIH0KKyNlbHNlCisgIGVycm5vID0gRU5PU1lTOworI2VuZGlmCiAKLSAgcmV0dXJuIDA7CisgIHJldHVybiAtMTsKIH0KZGlmZiAtLWdpdCBhL2xpYi9waXBlMi1zYWZlci5jIGIvbGliL3BpcGUyLXNhZmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgxYTBmZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9waXBlMi1zYWZlci5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qIEludm9rZSBwaXBlMiwgYnV0IGF2b2lkIHNvbWUgZ2xpdGNoZXMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBXcml0dGVuIGJ5IEVyaWMgQmxha2UuICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgInVuaXN0ZC1zYWZlci5oIgorCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworLyogTGlrZSBwaXBlMiwgYnV0IGVuc3VyZSB0aGF0IG5laXRoZXIgb2YgdGhlIGZpbGUgZGVzY3JpcHRvcnMgaXMKKyAgIFNURElOX0ZJTEVOTywgU1RET1VUX0ZJTEVOTywgb3IgU1RERVJSX0ZJTEVOTy4gICovCisKK2ludAorcGlwZTJfc2FmZXIgKGludCBmZFsyXSwgaW50IGZsYWdzKQoreworICAvKiBUaGlzIGlzIGEgZ2VuZXJhbGl6YXRpb24gb2YgdGhlIHBpcGVfc2FmZXIgaW1wbGVtZW50YXRpb24uICAqLworICBpZiAocGlwZTIgKGZkLCBmbGFncykgPT0gMCkKKyAgICB7CisgICAgICBpbnQgaTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICBmZFtpXSA9IGZkX3NhZmVyX2ZsYWcgKGZkW2ldLCBmbGFncyk7CisgICAgICAgICAgaWYgKGZkW2ldIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaW50IGUgPSBlcnJubzsKKyAgICAgICAgICAgICAgY2xvc2UgKGZkWzEgLSBpXSk7CisgICAgICAgICAgICAgIGVycm5vID0gZTsKKyAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgcmV0dXJuIC0xOworfQpkaWZmIC0tZ2l0IGEvbGliL3BpcGUyLmMgYi9saWIvcGlwZTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjAzZmU1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3BpcGUyLmMKQEAgLTAsMCArMSwxNjggQEAKKy8qIENyZWF0ZSBhIHBpcGUsIHdpdGggc3BlY2lmaWMgb3BlbmluZyBmbGFncy4KKyAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlICJiaW5hcnktaW8uaCIKKyNpbmNsdWRlICJ2ZXJpZnkuaCIKKworI2lmIEdOVUxJQl9kZWZpbmVkX09fTk9OQkxPQ0sKKyMgaW5jbHVkZSAibm9uYmxvY2tpbmcuaCIKKyNlbmRpZgorCisjaWYgKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXworLyogTmF0aXZlIFdpbmRvd3MgQVBJLiAgKi8KKworIyBpbmNsdWRlIDxpby5oPgorCisjZW5kaWYKKworaW50CitwaXBlMiAoaW50IGZkWzJdLCBpbnQgZmxhZ3MpCit7CisgIC8qIE1pbmd3IF9waXBlKCkgY29ycnVwdHMgZmQgb24gZmFpbHVyZTsgYWxzbywgaWYgd2Ugc3VjY2VlZCBhdAorICAgICBjcmVhdGluZyB0aGUgcGlwZSBidXQgbGF0ZXIgZmFpbCBhdCBjaGFuZ2luZyBmY250bCwgd2Ugd2FudAorICAgICB0byBsZWF2ZSBmZCB1bmNoYW5nZWQ6IGh0dHA6Ly9hdXN0aW5ncm91cGJ1Z3MubmV0L3ZpZXcucGhwP2lkPTQ2NyAgKi8KKyAgaW50IHRtcFsyXTsKKyAgdG1wWzBdID0gZmRbMF07CisgIHRtcFsxXSA9IGZkWzFdOworCisjaWYgSEFWRV9QSVBFMgorIyB1bmRlZiBwaXBlMgorICAvKiBUcnkgdGhlIHN5c3RlbSBjYWxsIGZpcnN0LCBpZiBpdCBleGlzdHMuICAoV2UgbWF5IGJlIHJ1bm5pbmcgd2l0aCBhIGdsaWJjCisgICAgIHRoYXQgaGFzIHRoZSBmdW5jdGlvbiBidXQgd2l0aCBhbiBvbGRlciBrZXJuZWwgdGhhdCBsYWNrcyBpdC4pICAqLworICB7CisgICAgLyogQ2FjaGUgdGhlIGluZm9ybWF0aW9uIHdoZXRoZXIgdGhlIHN5c3RlbSBjYWxsIHJlYWxseSBleGlzdHMuICAqLworICAgIHN0YXRpYyBpbnQgaGF2ZV9waXBlMl9yZWFsbHk7IC8qIDAgPSB1bmtub3duLCAxID0geWVzLCAtMSA9IG5vICovCisgICAgaWYgKGhhdmVfcGlwZTJfcmVhbGx5ID49IDApCisgICAgICB7CisgICAgICAgIGludCByZXN1bHQgPSBwaXBlMiAoZmQsIGZsYWdzKTsKKyAgICAgICAgaWYgKCEocmVzdWx0IDwgMCAmJiBlcnJubyA9PSBFTk9TWVMpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGhhdmVfcGlwZTJfcmVhbGx5ID0gMTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgfQorICAgICAgICBoYXZlX3BpcGUyX3JlYWxseSA9IC0xOworICAgICAgfQorICB9CisjZW5kaWYKKworICAvKiBDaGVjayB0aGUgc3VwcG9ydGVkIGZsYWdzLiAgKi8KKyAgaWYgKChmbGFncyAmIH4oT19DTE9FWEVDIHwgT19OT05CTE9DSyB8IE9fQklOQVJZIHwgT19URVhUKSkgIT0gMCkKKyAgICB7CisgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyNpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCisvKiBOYXRpdmUgV2luZG93cyBBUEkuICAqLworCisgIGlmIChfcGlwZSAoZmQsIDQwOTYsIGZsYWdzICYgfk9fTk9OQkxPQ0spIDwgMCkKKyAgICB7CisgICAgICBmZFswXSA9IHRtcFswXTsKKyAgICAgIGZkWzFdID0gdG1wWzFdOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAvKiBPX05PTkJMT0NLIGhhbmRsaW5nLgorICAgICBPbiBuYXRpdmUgV2luZG93cyBwbGF0Zm9ybXMsIE9fTk9OQkxPQ0sgaXMgZGVmaW5lZCBieSBnbnVsaWIuICBVc2UgdGhlCisgICAgIGZ1bmN0aW9ucyBkZWZpbmVkIGJ5IHRoZSBnbnVsaWIgbW9kdWxlICdub25ibG9ja2luZycuICAqLworIyBpZiBHTlVMSUJfZGVmaW5lZF9PX05PTkJMT0NLCisgIGlmIChmbGFncyAmIE9fTk9OQkxPQ0spCisgICAgeworICAgICAgaWYgKHNldF9ub25ibG9ja2luZ19mbGFnIChmZFswXSwgdHJ1ZSkgIT0gMAorICAgICAgICAgIHx8IHNldF9ub25ibG9ja2luZ19mbGFnIChmZFsxXSwgdHJ1ZSkgIT0gMCkKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKyMgZWxzZQorICB7CisgICAgdmVyaWZ5IChPX05PTkJMT0NLID09IDApOworICB9CisjIGVuZGlmCisKKyAgcmV0dXJuIDA7CisKKyNlbHNlCisvKiBVbml4IEFQSS4gICovCisKKyAgaWYgKHBpcGUgKGZkKSA8IDApCisgICAgcmV0dXJuIC0xOworCisgIC8qIFBPU0lYIDxodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Z1bmN0aW9ucy9waXBlLmh0bWw+CisgICAgIHNheXMgdGhhdCBpbml0aWFsbHksIHRoZSBPX05PTkJMT0NLIGFuZCBGRF9DTE9FWEVDIGZsYWdzIGFyZSBjbGVhcmVkIG9uCisgICAgIGJvdGggZmRbMF0gYW5kIGZkWzFdLiAgKi8KKworICAvKiBPX05PTkJMT0NLIGhhbmRsaW5nLgorICAgICBPbiBVbml4IHBsYXRmb3JtcywgT19OT05CTE9DSyBpcyBkZWZpbmVkIGJ5IHRoZSBzeXN0ZW0uICBVc2UgZmNudGwoKS4gICovCisgIGlmIChmbGFncyAmIE9fTk9OQkxPQ0spCisgICAgeworICAgICAgaW50IGZjbnRsX2ZsYWdzOworCisgICAgICBpZiAoKGZjbnRsX2ZsYWdzID0gZmNudGwgKGZkWzFdLCBGX0dFVEZMLCAwKSkgPCAwCisgICAgICAgICAgfHwgZmNudGwgKGZkWzFdLCBGX1NFVEZMLCBmY250bF9mbGFncyB8IE9fTk9OQkxPQ0spID09IC0xCisgICAgICAgICAgfHwgKGZjbnRsX2ZsYWdzID0gZmNudGwgKGZkWzBdLCBGX0dFVEZMLCAwKSkgPCAwCisgICAgICAgICAgfHwgZmNudGwgKGZkWzBdLCBGX1NFVEZMLCBmY250bF9mbGFncyB8IE9fTk9OQkxPQ0spID09IC0xKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgIGlmIChmbGFncyAmIE9fQ0xPRVhFQykKKyAgICB7CisgICAgICBpbnQgZmNudGxfZmxhZ3M7CisKKyAgICAgIGlmICgoZmNudGxfZmxhZ3MgPSBmY250bCAoZmRbMV0sIEZfR0VURkQsIDApKSA8IDAKKyAgICAgICAgICB8fCBmY250bCAoZmRbMV0sIEZfU0VURkQsIGZjbnRsX2ZsYWdzIHwgRkRfQ0xPRVhFQykgPT0gLTEKKyAgICAgICAgICB8fCAoZmNudGxfZmxhZ3MgPSBmY250bCAoZmRbMF0sIEZfR0VURkQsIDApKSA8IDAKKyAgICAgICAgICB8fCBmY250bCAoZmRbMF0sIEZfU0VURkQsIGZjbnRsX2ZsYWdzIHwgRkRfQ0xPRVhFQykgPT0gLTEpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyMgaWYgT19CSU5BUlkKKyAgaWYgKGZsYWdzICYgT19CSU5BUlkpCisgICAgeworICAgICAgc2V0bW9kZSAoZmRbMV0sIE9fQklOQVJZKTsKKyAgICAgIHNldG1vZGUgKGZkWzBdLCBPX0JJTkFSWSk7CisgICAgfQorICBlbHNlIGlmIChmbGFncyAmIE9fVEVYVCkKKyAgICB7CisgICAgICBzZXRtb2RlIChmZFsxXSwgT19URVhUKTsKKyAgICAgIHNldG1vZGUgKGZkWzBdLCBPX1RFWFQpOworICAgIH0KKyMgZW5kaWYKKworICByZXR1cm4gMDsKKworI2VuZGlmCisKKyNpZiBHTlVMSUJfZGVmaW5lZF9PX05PTkJMT0NLIHx8IFwKKyAgISgoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fKQorIGZhaWw6CisgIHsKKyAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICBjbG9zZSAoZmRbMF0pOworICAgIGNsb3NlIChmZFsxXSk7CisgICAgZmRbMF0gPSB0bXBbMF07CisgICAgZmRbMV0gPSB0bXBbMV07CisgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICByZXR1cm4gLTE7CisgIH0KKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvbGliL3ByaW50Zi1hcmdzLmMgYi9saWIvcHJpbnRmLWFyZ3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2IyMGRjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3ByaW50Zi1hcmdzLmMKQEAgLTAsMCArMSwxODcgQEAKKy8qIERlY29tcG9zZWQgcHJpbnRmIGFyZ3VtZW50IGxpc3QuCisgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDItMjAwMywgMjAwNS0yMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFRoaXMgZmlsZSBjYW4gYmUgcGFyYW1ldHJpemVkIHdpdGggdGhlIGZvbGxvd2luZyBtYWNyb3M6CisgICAgIEVOQUJMRV9VTklTVERJTyAgICBTZXQgdG8gMSB0byBlbmFibGUgdGhlIHVuaXN0ZGlvIGV4dGVuc2lvbnMuCisgICAgIFBSSU5URl9GRVRDSEFSR1MgICBOYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBiZSBkZWZpbmVkLgorICAgICBTVEFUSUMgICAgICAgICAgICAgU2V0IHRvICdzdGF0aWMnIHRvIGRlY2xhcmUgdGhlIGZ1bmN0aW9uIHN0YXRpYy4gICovCisKKyNpZm5kZWYgUFJJTlRGX0ZFVENIQVJHUworIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpZm5kZWYgUFJJTlRGX0ZFVENIQVJHUworIyBpbmNsdWRlICJwcmludGYtYXJncy5oIgorI2VuZGlmCisKKyNpZmRlZiBTVEFUSUMKK1NUQVRJQworI2VuZGlmCitpbnQKK1BSSU5URl9GRVRDSEFSR1MgKHZhX2xpc3QgYXJncywgYXJndW1lbnRzICphKQoreworICBzaXplX3QgaTsKKyAgYXJndW1lbnQgKmFwOworCisgIGZvciAoaSA9IDAsIGFwID0gJmEtPmFyZ1swXTsgaSA8IGEtPmNvdW50OyBpKyssIGFwKyspCisgICAgc3dpdGNoIChhcC0+dHlwZSkKKyAgICAgIHsKKyAgICAgIGNhc2UgVFlQRV9TQ0hBUjoKKyAgICAgICAgYXAtPmEuYV9zY2hhciA9IHZhX2FyZyAoYXJncywgLypzaWduZWQgY2hhciovIGludCk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBUWVBFX1VDSEFSOgorICAgICAgICBhcC0+YS5hX3VjaGFyID0gdmFfYXJnIChhcmdzLCAvKnVuc2lnbmVkIGNoYXIqLyBpbnQpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgVFlQRV9TSE9SVDoKKyAgICAgICAgYXAtPmEuYV9zaG9ydCA9IHZhX2FyZyAoYXJncywgLypzaG9ydCovIGludCk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBUWVBFX1VTSE9SVDoKKyAgICAgICAgYXAtPmEuYV91c2hvcnQgPSB2YV9hcmcgKGFyZ3MsIC8qdW5zaWduZWQgc2hvcnQqLyBpbnQpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgVFlQRV9JTlQ6CisgICAgICAgIGFwLT5hLmFfaW50ID0gdmFfYXJnIChhcmdzLCBpbnQpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgVFlQRV9VSU5UOgorICAgICAgICBhcC0+YS5hX3VpbnQgPSB2YV9hcmcgKGFyZ3MsIHVuc2lnbmVkIGludCk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBUWVBFX0xPTkdJTlQ6CisgICAgICAgIGFwLT5hLmFfbG9uZ2ludCA9IHZhX2FyZyAoYXJncywgbG9uZyBpbnQpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgVFlQRV9VTE9OR0lOVDoKKyAgICAgICAgYXAtPmEuYV91bG9uZ2ludCA9IHZhX2FyZyAoYXJncywgdW5zaWduZWQgbG9uZyBpbnQpOworICAgICAgICBicmVhazsKKyNpZiBIQVZFX0xPTkdfTE9OR19JTlQKKyAgICAgIGNhc2UgVFlQRV9MT05HTE9OR0lOVDoKKyAgICAgICAgYXAtPmEuYV9sb25nbG9uZ2ludCA9IHZhX2FyZyAoYXJncywgbG9uZyBsb25nIGludCk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBUWVBFX1VMT05HTE9OR0lOVDoKKyAgICAgICAgYXAtPmEuYV91bG9uZ2xvbmdpbnQgPSB2YV9hcmcgKGFyZ3MsIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgY2FzZSBUWVBFX0RPVUJMRToKKyAgICAgICAgYXAtPmEuYV9kb3VibGUgPSB2YV9hcmcgKGFyZ3MsIGRvdWJsZSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBUWVBFX0xPTkdET1VCTEU6CisgICAgICAgIGFwLT5hLmFfbG9uZ2RvdWJsZSA9IHZhX2FyZyAoYXJncywgbG9uZyBkb3VibGUpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgVFlQRV9DSEFSOgorICAgICAgICBhcC0+YS5hX2NoYXIgPSB2YV9hcmcgKGFyZ3MsIGludCk7CisgICAgICAgIGJyZWFrOworI2lmIEhBVkVfV0lOVF9UCisgICAgICBjYXNlIFRZUEVfV0lERV9DSEFSOgorICAgICAgICAvKiBBbHRob3VnaCBJU08gQyA5OSA3LjI0LjEuKDIpIHNheXMgdGhhdCB3aW50X3QgaXMgInVuY2hhbmdlZCBieQorICAgICAgICAgICBkZWZhdWx0IGFyZ3VtZW50IHByb21vdGlvbnMiLCB0aGlzIGlzIG5vdCB0aGUgY2FzZSBpbiBtaW5ndzMyLAorICAgICAgICAgICB3aGVyZSB3aW50X3QgaXMgJ3Vuc2lnbmVkIHNob3J0Jy4gICovCisgICAgICAgIGFwLT5hLmFfd2lkZV9jaGFyID0KKyAgICAgICAgICAoc2l6ZW9mICh3aW50X3QpIDwgc2l6ZW9mIChpbnQpCisgICAgICAgICAgID8gKHdpbnRfdCkgdmFfYXJnIChhcmdzLCBpbnQpCisgICAgICAgICAgIDogdmFfYXJnIChhcmdzLCB3aW50X3QpKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgIGNhc2UgVFlQRV9TVFJJTkc6CisgICAgICAgIGFwLT5hLmFfc3RyaW5nID0gdmFfYXJnIChhcmdzLCBjb25zdCBjaGFyICopOworICAgICAgICAvKiBBIG51bGwgcG9pbnRlciBpcyBhbiBpbnZhbGlkIGFyZ3VtZW50IGZvciAiJXMiLCBidXQgaW4gcHJhY3RpY2UKKyAgICAgICAgICAgaXQgb2NjdXJzIHF1aXRlIGZyZXF1ZW50bHkgaW4gcHJpbnRmIHN0YXRlbWVudHMgdGhhdCBwcm9kdWNlCisgICAgICAgICAgIGRlYnVnIG91dHB1dC4gIFVzZSBhIGZhbGxiYWNrIGluIHRoaXMgY2FzZS4gICovCisgICAgICAgIGlmIChhcC0+YS5hX3N0cmluZyA9PSBOVUxMKQorICAgICAgICAgIGFwLT5hLmFfc3RyaW5nID0gIihOVUxMKSI7CisgICAgICAgIGJyZWFrOworI2lmIEhBVkVfV0NIQVJfVAorICAgICAgY2FzZSBUWVBFX1dJREVfU1RSSU5HOgorICAgICAgICBhcC0+YS5hX3dpZGVfc3RyaW5nID0gdmFfYXJnIChhcmdzLCBjb25zdCB3Y2hhcl90ICopOworICAgICAgICAvKiBBIG51bGwgcG9pbnRlciBpcyBhbiBpbnZhbGlkIGFyZ3VtZW50IGZvciAiJWxzIiwgYnV0IGluIHByYWN0aWNlCisgICAgICAgICAgIGl0IG9jY3VycyBxdWl0ZSBmcmVxdWVudGx5IGluIHByaW50ZiBzdGF0ZW1lbnRzIHRoYXQgcHJvZHVjZQorICAgICAgICAgICBkZWJ1ZyBvdXRwdXQuICBVc2UgYSBmYWxsYmFjayBpbiB0aGlzIGNhc2UuICAqLworICAgICAgICBpZiAoYXAtPmEuYV93aWRlX3N0cmluZyA9PSBOVUxMKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCB3Y2hhcl90IHdpZGVfbnVsbF9zdHJpbmdbXSA9CisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAod2NoYXJfdCknKCcsCisgICAgICAgICAgICAgICAgKHdjaGFyX3QpJ04nLCAod2NoYXJfdCknVScsICh3Y2hhcl90KSdMJywgKHdjaGFyX3QpJ0wnLAorICAgICAgICAgICAgICAgICh3Y2hhcl90KScpJywKKyAgICAgICAgICAgICAgICAod2NoYXJfdCkwCisgICAgICAgICAgICAgIH07CisgICAgICAgICAgICBhcC0+YS5hX3dpZGVfc3RyaW5nID0gd2lkZV9udWxsX3N0cmluZzsKKyAgICAgICAgICB9CisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICBjYXNlIFRZUEVfUE9JTlRFUjoKKyAgICAgICAgYXAtPmEuYV9wb2ludGVyID0gdmFfYXJnIChhcmdzLCB2b2lkICopOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgVFlQRV9DT1VOVF9TQ0hBUl9QT0lOVEVSOgorICAgICAgICBhcC0+YS5hX2NvdW50X3NjaGFyX3BvaW50ZXIgPSB2YV9hcmcgKGFyZ3MsIHNpZ25lZCBjaGFyICopOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgVFlQRV9DT1VOVF9TSE9SVF9QT0lOVEVSOgorICAgICAgICBhcC0+YS5hX2NvdW50X3Nob3J0X3BvaW50ZXIgPSB2YV9hcmcgKGFyZ3MsIHNob3J0ICopOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgVFlQRV9DT1VOVF9JTlRfUE9JTlRFUjoKKyAgICAgICAgYXAtPmEuYV9jb3VudF9pbnRfcG9pbnRlciA9IHZhX2FyZyAoYXJncywgaW50ICopOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgVFlQRV9DT1VOVF9MT05HSU5UX1BPSU5URVI6CisgICAgICAgIGFwLT5hLmFfY291bnRfbG9uZ2ludF9wb2ludGVyID0gdmFfYXJnIChhcmdzLCBsb25nIGludCAqKTsKKyAgICAgICAgYnJlYWs7CisjaWYgSEFWRV9MT05HX0xPTkdfSU5UCisgICAgICBjYXNlIFRZUEVfQ09VTlRfTE9OR0xPTkdJTlRfUE9JTlRFUjoKKyAgICAgICAgYXAtPmEuYV9jb3VudF9sb25nbG9uZ2ludF9wb2ludGVyID0gdmFfYXJnIChhcmdzLCBsb25nIGxvbmcgaW50ICopOworICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmIEVOQUJMRV9VTklTVERJTworICAgICAgLyogVGhlIHVuaXN0ZGlvIGV4dGVuc2lvbnMuICAqLworICAgICAgY2FzZSBUWVBFX1U4X1NUUklORzoKKyAgICAgICAgYXAtPmEuYV91OF9zdHJpbmcgPSB2YV9hcmcgKGFyZ3MsIGNvbnN0IHVpbnQ4X3QgKik7CisgICAgICAgIC8qIEEgbnVsbCBwb2ludGVyIGlzIGFuIGludmFsaWQgYXJndW1lbnQgZm9yICIlVSIsIGJ1dCBpbiBwcmFjdGljZQorICAgICAgICAgICBpdCBvY2N1cnMgcXVpdGUgZnJlcXVlbnRseSBpbiBwcmludGYgc3RhdGVtZW50cyB0aGF0IHByb2R1Y2UKKyAgICAgICAgICAgZGVidWcgb3V0cHV0LiAgVXNlIGEgZmFsbGJhY2sgaW4gdGhpcyBjYXNlLiAgKi8KKyAgICAgICAgaWYgKGFwLT5hLmFfdThfc3RyaW5nID09IE5VTEwpCisgICAgICAgICAgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgdThfbnVsbF9zdHJpbmdbXSA9CisgICAgICAgICAgICAgIHsgJygnLCAnTicsICdVJywgJ0wnLCAnTCcsICcpJywgMCB9OworICAgICAgICAgICAgYXAtPmEuYV91OF9zdHJpbmcgPSB1OF9udWxsX3N0cmluZzsKKyAgICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBUWVBFX1UxNl9TVFJJTkc6CisgICAgICAgIGFwLT5hLmFfdTE2X3N0cmluZyA9IHZhX2FyZyAoYXJncywgY29uc3QgdWludDE2X3QgKik7CisgICAgICAgIC8qIEEgbnVsbCBwb2ludGVyIGlzIGFuIGludmFsaWQgYXJndW1lbnQgZm9yICIlbFUiLCBidXQgaW4gcHJhY3RpY2UKKyAgICAgICAgICAgaXQgb2NjdXJzIHF1aXRlIGZyZXF1ZW50bHkgaW4gcHJpbnRmIHN0YXRlbWVudHMgdGhhdCBwcm9kdWNlCisgICAgICAgICAgIGRlYnVnIG91dHB1dC4gIFVzZSBhIGZhbGxiYWNrIGluIHRoaXMgY2FzZS4gICovCisgICAgICAgIGlmIChhcC0+YS5hX3UxNl9zdHJpbmcgPT0gTlVMTCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgdWludDE2X3QgdTE2X251bGxfc3RyaW5nW10gPQorICAgICAgICAgICAgICB7ICcoJywgJ04nLCAnVScsICdMJywgJ0wnLCAnKScsIDAgfTsKKyAgICAgICAgICAgIGFwLT5hLmFfdTE2X3N0cmluZyA9IHUxNl9udWxsX3N0cmluZzsKKyAgICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBUWVBFX1UzMl9TVFJJTkc6CisgICAgICAgIGFwLT5hLmFfdTMyX3N0cmluZyA9IHZhX2FyZyAoYXJncywgY29uc3QgdWludDMyX3QgKik7CisgICAgICAgIC8qIEEgbnVsbCBwb2ludGVyIGlzIGFuIGludmFsaWQgYXJndW1lbnQgZm9yICIlbGxVIiwgYnV0IGluIHByYWN0aWNlCisgICAgICAgICAgIGl0IG9jY3VycyBxdWl0ZSBmcmVxdWVudGx5IGluIHByaW50ZiBzdGF0ZW1lbnRzIHRoYXQgcHJvZHVjZQorICAgICAgICAgICBkZWJ1ZyBvdXRwdXQuICBVc2UgYSBmYWxsYmFjayBpbiB0aGlzIGNhc2UuICAqLworICAgICAgICBpZiAoYXAtPmEuYV91MzJfc3RyaW5nID09IE5VTEwpCisgICAgICAgICAgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHUzMl9udWxsX3N0cmluZ1tdID0KKyAgICAgICAgICAgICAgeyAnKCcsICdOJywgJ1UnLCAnTCcsICdMJywgJyknLCAwIH07CisgICAgICAgICAgICBhcC0+YS5hX3UzMl9zdHJpbmcgPSB1MzJfbnVsbF9zdHJpbmc7CisgICAgICAgICAgfQorICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgZGVmYXVsdDoKKyAgICAgICAgLyogVW5rbm93biB0eXBlLiAgKi8KKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgfQorICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYi9wcmludGYtYXJncy5oIGIvbGliL3ByaW50Zi1hcmdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE4MTFhZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9wcmludGYtYXJncy5oCkBAIC0wLDAgKzEsMTU4IEBACisvKiBEZWNvbXBvc2VkIHByaW50ZiBhcmd1bWVudCBsaXN0LgorICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAyLTIwMDMsIDIwMDYtMjAwNywgMjAxMS0yMDEyIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIF9QUklOVEZfQVJHU19ICisjZGVmaW5lIF9QUklOVEZfQVJHU19ICisKKy8qIFRoaXMgZmlsZSBjYW4gYmUgcGFyYW1ldHJpemVkIHdpdGggdGhlIGZvbGxvd2luZyBtYWNyb3M6CisgICAgIEVOQUJMRV9VTklTVERJTyAgICBTZXQgdG8gMSB0byBlbmFibGUgdGhlIHVuaXN0ZGlvIGV4dGVuc2lvbnMuCisgICAgIFBSSU5URl9GRVRDSEFSR1MgICBOYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBiZSBkZWNsYXJlZC4KKyAgICAgU1RBVElDICAgICAgICAgICAgIFNldCB0byAnc3RhdGljJyB0byBkZWNsYXJlIHRoZSBmdW5jdGlvbiBzdGF0aWMuICAqLworCisvKiBEZWZhdWx0IHBhcmFtZXRlcnMuICAqLworI2lmbmRlZiBQUklOVEZfRkVUQ0hBUkdTCisjIGRlZmluZSBQUklOVEZfRkVUQ0hBUkdTIHByaW50Zl9mZXRjaGFyZ3MKKyNlbmRpZgorCisvKiBHZXQgc2l6ZV90LiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLyogR2V0IHdjaGFyX3QuICAqLworI2lmIEhBVkVfV0NIQVJfVAorIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbmRpZgorCisvKiBHZXQgd2ludF90LiAgKi8KKyNpZiBIQVZFX1dJTlRfVAorIyBpbmNsdWRlIDx3Y2hhci5oPgorI2VuZGlmCisKKy8qIEdldCB2YV9saXN0LiAgKi8KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworCisvKiBBcmd1bWVudCB0eXBlcyAqLwordHlwZWRlZiBlbnVtCit7CisgIFRZUEVfTk9ORSwKKyAgVFlQRV9TQ0hBUiwKKyAgVFlQRV9VQ0hBUiwKKyAgVFlQRV9TSE9SVCwKKyAgVFlQRV9VU0hPUlQsCisgIFRZUEVfSU5ULAorICBUWVBFX1VJTlQsCisgIFRZUEVfTE9OR0lOVCwKKyAgVFlQRV9VTE9OR0lOVCwKKyNpZiBIQVZFX0xPTkdfTE9OR19JTlQKKyAgVFlQRV9MT05HTE9OR0lOVCwKKyAgVFlQRV9VTE9OR0xPTkdJTlQsCisjZW5kaWYKKyAgVFlQRV9ET1VCTEUsCisgIFRZUEVfTE9OR0RPVUJMRSwKKyAgVFlQRV9DSEFSLAorI2lmIEhBVkVfV0lOVF9UCisgIFRZUEVfV0lERV9DSEFSLAorI2VuZGlmCisgIFRZUEVfU1RSSU5HLAorI2lmIEhBVkVfV0NIQVJfVAorICBUWVBFX1dJREVfU1RSSU5HLAorI2VuZGlmCisgIFRZUEVfUE9JTlRFUiwKKyAgVFlQRV9DT1VOVF9TQ0hBUl9QT0lOVEVSLAorICBUWVBFX0NPVU5UX1NIT1JUX1BPSU5URVIsCisgIFRZUEVfQ09VTlRfSU5UX1BPSU5URVIsCisgIFRZUEVfQ09VTlRfTE9OR0lOVF9QT0lOVEVSCisjaWYgSEFWRV9MT05HX0xPTkdfSU5UCissIFRZUEVfQ09VTlRfTE9OR0xPTkdJTlRfUE9JTlRFUgorI2VuZGlmCisjaWYgRU5BQkxFX1VOSVNURElPCisgIC8qIFRoZSB1bmlzdGRpbyBleHRlbnNpb25zLiAgKi8KKywgVFlQRV9VOF9TVFJJTkcKKywgVFlQRV9VMTZfU1RSSU5HCissIFRZUEVfVTMyX1NUUklORworI2VuZGlmCit9IGFyZ190eXBlOworCisvKiBQb2x5bW9ycGhpYyBhcmd1bWVudCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgYXJnX3R5cGUgdHlwZTsKKyAgdW5pb24KKyAgeworICAgIHNpZ25lZCBjaGFyICAgICAgICAgICAgICAgICBhX3NjaGFyOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICBhX3VjaGFyOworICAgIHNob3J0ICAgICAgICAgICAgICAgICAgICAgICBhX3Nob3J0OworICAgIHVuc2lnbmVkIHNob3J0ICAgICAgICAgICAgICBhX3VzaG9ydDsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgYV9pbnQ7CisgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGFfdWludDsKKyAgICBsb25nIGludCAgICAgICAgICAgICAgICAgICAgYV9sb25naW50OworICAgIHVuc2lnbmVkIGxvbmcgaW50ICAgICAgICAgICBhX3Vsb25naW50OworI2lmIEhBVkVfTE9OR19MT05HX0lOVAorICAgIGxvbmcgbG9uZyBpbnQgICAgICAgICAgICAgICBhX2xvbmdsb25naW50OworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgICAgICBhX3Vsb25nbG9uZ2ludDsKKyNlbmRpZgorICAgIGZsb2F0ICAgICAgICAgICAgICAgICAgICAgICBhX2Zsb2F0OworICAgIGRvdWJsZSAgICAgICAgICAgICAgICAgICAgICBhX2RvdWJsZTsKKyAgICBsb25nIGRvdWJsZSAgICAgICAgICAgICAgICAgYV9sb25nZG91YmxlOworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBhX2NoYXI7CisjaWYgSEFWRV9XSU5UX1QKKyAgICB3aW50X3QgICAgICAgICAgICAgICAgICAgICAgYV93aWRlX2NoYXI7CisjZW5kaWYKKyAgICBjb25zdCBjaGFyKiAgICAgICAgICAgICAgICAgYV9zdHJpbmc7CisjaWYgSEFWRV9XQ0hBUl9UCisgICAgY29uc3Qgd2NoYXJfdCogICAgICAgICAgICAgIGFfd2lkZV9zdHJpbmc7CisjZW5kaWYKKyAgICB2b2lkKiAgICAgICAgICAgICAgICAgICAgICAgYV9wb2ludGVyOworICAgIHNpZ25lZCBjaGFyICogICAgICAgICAgICAgICBhX2NvdW50X3NjaGFyX3BvaW50ZXI7CisgICAgc2hvcnQgKiAgICAgICAgICAgICAgICAgICAgIGFfY291bnRfc2hvcnRfcG9pbnRlcjsKKyAgICBpbnQgKiAgICAgICAgICAgICAgICAgICAgICAgYV9jb3VudF9pbnRfcG9pbnRlcjsKKyAgICBsb25nIGludCAqICAgICAgICAgICAgICAgICAgYV9jb3VudF9sb25naW50X3BvaW50ZXI7CisjaWYgSEFWRV9MT05HX0xPTkdfSU5UCisgICAgbG9uZyBsb25nIGludCAqICAgICAgICAgICAgIGFfY291bnRfbG9uZ2xvbmdpbnRfcG9pbnRlcjsKKyNlbmRpZgorI2lmIEVOQUJMRV9VTklTVERJTworICAgIC8qIFRoZSB1bmlzdGRpbyBleHRlbnNpb25zLiAgKi8KKyAgICBjb25zdCB1aW50OF90ICogICAgICAgICAgICAgYV91OF9zdHJpbmc7CisgICAgY29uc3QgdWludDE2X3QgKiAgICAgICAgICAgIGFfdTE2X3N0cmluZzsKKyAgICBjb25zdCB1aW50MzJfdCAqICAgICAgICAgICAgYV91MzJfc3RyaW5nOworI2VuZGlmCisgIH0KKyAgYTsKK30KK2FyZ3VtZW50OworCisvKiBOdW1iZXIgb2YgZGlyZWN0bHkgYWxsb2NhdGVkIGFyZ3VtZW50cyAobm8gbWFsbG9jKCkgbmVlZGVkKS4gICovCisjZGVmaW5lIE5fRElSRUNUX0FMTE9DX0FSR1VNRU5UUyA3CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIHNpemVfdCBjb3VudDsKKyAgYXJndW1lbnQgKmFyZzsKKyAgYXJndW1lbnQgZGlyZWN0X2FsbG9jX2FyZ1tOX0RJUkVDVF9BTExPQ19BUkdVTUVOVFNdOworfQorYXJndW1lbnRzOworCisKKy8qIEZldGNoIHRoZSBhcmd1bWVudHMsIHB1dHRpbmcgdGhlbSBpbnRvIGEuICovCisjaWZkZWYgU1RBVElDCitTVEFUSUMKKyNlbHNlCitleHRlcm4KKyNlbmRpZgoraW50IFBSSU5URl9GRVRDSEFSR1MgKHZhX2xpc3QgYXJncywgYXJndW1lbnRzICphKTsKKworI2VuZGlmIC8qIF9QUklOVEZfQVJHU19IICovCmRpZmYgLS1naXQgYS9saWIvcHJpbnRmLWZyZXhwLmMgYi9saWIvcHJpbnRmLWZyZXhwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI0NzIwNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9wcmludGYtZnJleHAuYwpAQCAtMCwwICsxLDE5MCBAQAorLyogU3BsaXQgYSBkb3VibGUgaW50byBmcmFjdGlvbiBhbmQgbWFudGlzc2EsIGZvciBoZXhhZGVjaW1hbCBwcmludGYuCisgICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmICEgZGVmaW5lZCBVU0VfTE9OR19ET1VCTEUKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaWZkZWYgVVNFX0xPTkdfRE9VQkxFCisjIGluY2x1ZGUgInByaW50Zi1mcmV4cGwuaCIKKyNlbHNlCisjIGluY2x1ZGUgInByaW50Zi1mcmV4cC5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpZmRlZiBVU0VfTE9OR19ET1VCTEUKKyMgaW5jbHVkZSAiZnB1Y3cuaCIKKyNlbmRpZgorCisvKiBUaGlzIGZpbGUgYXNzdW1lcyBGTFRfUkFESVggPSAyLiAgSWYgRkxUX1JBRElYIGlzIGEgcG93ZXIgb2YgMiBncmVhdGVyCisgICB0aGFuIDIsIG9yIG5vdCBldmVuIGEgcG93ZXIgb2YgMiwgc29tZSByb3VuZGluZyBlcnJvcnMgY2FuIG9jY3VyLCBzbyB0aGF0CisgICB0aGVuIHRoZSByZXR1cm5lZCBtYW50aXNzYSBpcyBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgPD0gMi4wLCBub3QgPCAyLjAuICAqLworCisjaWZkZWYgVVNFX0xPTkdfRE9VQkxFCisjIGRlZmluZSBGVU5DIHByaW50Zl9mcmV4cGwKKyMgZGVmaW5lIERPVUJMRSBsb25nIGRvdWJsZQorIyBkZWZpbmUgTUlOX0VYUCBMREJMX01JTl9FWFAKKyMgaWYgSEFWRV9GUkVYUExfSU5fTElCQyAmJiBIQVZFX0xERVhQTF9JTl9MSUJDCisjICBkZWZpbmUgVVNFX0ZSRVhQX0xERVhQCisjICBkZWZpbmUgRlJFWFAgZnJleHBsCisjICBkZWZpbmUgTERFWFAgbGRleHBsCisjIGVuZGlmCisjIGRlZmluZSBERUNMX1JPVU5ESU5HIERFQ0xfTE9OR19ET1VCTEVfUk9VTkRJTkcKKyMgZGVmaW5lIEJFR0lOX1JPVU5ESU5HKCkgQkVHSU5fTE9OR19ET1VCTEVfUk9VTkRJTkcgKCkKKyMgZGVmaW5lIEVORF9ST1VORElORygpIEVORF9MT05HX0RPVUJMRV9ST1VORElORyAoKQorIyBkZWZpbmUgTF8obGl0ZXJhbCkgbGl0ZXJhbCMjTAorI2Vsc2UKKyMgZGVmaW5lIEZVTkMgcHJpbnRmX2ZyZXhwCisjIGRlZmluZSBET1VCTEUgZG91YmxlCisjIGRlZmluZSBNSU5fRVhQIERCTF9NSU5fRVhQCisjIGlmIEhBVkVfRlJFWFBfSU5fTElCQyAmJiBIQVZFX0xERVhQX0lOX0xJQkMKKyMgIGRlZmluZSBVU0VfRlJFWFBfTERFWFAKKyMgIGRlZmluZSBGUkVYUCBmcmV4cAorIyAgZGVmaW5lIExERVhQIGxkZXhwCisjIGVuZGlmCisjIGRlZmluZSBERUNMX1JPVU5ESU5HCisjIGRlZmluZSBCRUdJTl9ST1VORElORygpCisjIGRlZmluZSBFTkRfUk9VTkRJTkcoKQorIyBkZWZpbmUgTF8obGl0ZXJhbCkgbGl0ZXJhbAorI2VuZGlmCisKK0RPVUJMRQorRlVOQyAoRE9VQkxFIHgsIGludCAqZXhwcHRyKQoreworICBpbnQgZXhwb25lbnQ7CisgIERFQ0xfUk9VTkRJTkcKKworICBCRUdJTl9ST1VORElORyAoKTsKKworI2lmZGVmIFVTRV9GUkVYUF9MREVYUAorICAvKiBmcmV4cCBhbmQgbGRleHAgYXJlIHVzdWFsbHkgZmFzdGVyIHRoYW4gdGhlIGxvb3AgYmVsb3cuICAqLworICB4ID0gRlJFWFAgKHgsICZleHBvbmVudCk7CisKKyAgeCA9IHggKyB4OworICBleHBvbmVudCAtPSAxOworCisgIGlmIChleHBvbmVudCA8IE1JTl9FWFAgLSAxKQorICAgIHsKKyAgICAgIHggPSBMREVYUCAoeCwgZXhwb25lbnQgLSAoTUlOX0VYUCAtIDEpKTsKKyAgICAgIGV4cG9uZW50ID0gTUlOX0VYUCAtIDE7CisgICAgfQorI2Vsc2UKKyAgeworICAgIC8qIFNpbmNlIHRoZSBleHBvbmVudCBpcyBhbiAnaW50JywgaXQgZml0cyBpbiA2NCBiaXRzLiAgVGhlcmVmb3JlIHRoZQorICAgICAgIGxvb3BzIGFyZSBleGVjdXRlZCBubyBtb3JlIHRoYW4gNjQgdGltZXMuICAqLworICAgIERPVUJMRSBwb3cyWzY0XTsgLyogcG93MltpXSA9IDJeMl5pICovCisgICAgRE9VQkxFIHBvd2hbNjRdOyAvKiBwb3doW2ldID0gMl4tMl5pICovCisgICAgaW50IGk7CisKKyAgICBleHBvbmVudCA9IDA7CisgICAgaWYgKHggPj0gTF8oMS4wKSkKKyAgICAgIHsKKyAgICAgICAgLyogQSBub25uZWdhdGl2ZSBleHBvbmVudC4gICovCisgICAgICAgIHsKKyAgICAgICAgICBET1VCTEUgcG93Ml9pOyAvKiA9IHBvdzJbaV0gKi8KKyAgICAgICAgICBET1VCTEUgcG93aF9pOyAvKiA9IHBvd2hbaV0gKi8KKworICAgICAgICAgIC8qIEludmFyaWFudHM6IHBvdzJfaSA9IDJeMl5pLCBwb3doX2kgPSAyXi0yXmksCisgICAgICAgICAgICAgeCAqIDJeZXhwb25lbnQgPSBhcmd1bWVudCwgeCA+PSAxLjAuICAqLworICAgICAgICAgIGZvciAoaSA9IDAsIHBvdzJfaSA9IExfKDIuMCksIHBvd2hfaSA9IExfKDAuNSk7CisgICAgICAgICAgICAgICA7CisgICAgICAgICAgICAgICBpKyssIHBvdzJfaSA9IHBvdzJfaSAqIHBvdzJfaSwgcG93aF9pID0gcG93aF9pICogcG93aF9pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoeCA+PSBwb3cyX2kpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZXhwb25lbnQgKz0gKDEgPDwgaSk7CisgICAgICAgICAgICAgICAgICB4ICo9IHBvd2hfaTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBwb3cyW2ldID0gcG93Ml9pOworICAgICAgICAgICAgICBwb3doW2ldID0gcG93aF9pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qIEhlcmUgMS4wIDw9IHggPCAyXjJeaS4gICovCisgICAgICB9CisgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBBIG5lZ2F0aXZlIGV4cG9uZW50LiAgKi8KKyAgICAgICAgeworICAgICAgICAgIERPVUJMRSBwb3cyX2k7IC8qID0gcG93MltpXSAqLworICAgICAgICAgIERPVUJMRSBwb3doX2k7IC8qID0gcG93aFtpXSAqLworCisgICAgICAgICAgLyogSW52YXJpYW50czogcG93Ml9pID0gMl4yXmksIHBvd2hfaSA9IDJeLTJeaSwKKyAgICAgICAgICAgICB4ICogMl5leHBvbmVudCA9IGFyZ3VtZW50LCB4IDwgMS4wLCBleHBvbmVudCA+PSBNSU5fRVhQIC0gMS4gICovCisgICAgICAgICAgZm9yIChpID0gMCwgcG93Ml9pID0gTF8oMi4wKSwgcG93aF9pID0gTF8oMC41KTsKKyAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgICAgIGkrKywgcG93Ml9pID0gcG93Ml9pICogcG93Ml9pLCBwb3doX2kgPSBwb3doX2kgKiBwb3doX2kpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChleHBvbmVudCAtICgxIDw8IGkpIDwgTUlOX0VYUCAtIDEpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZXhwb25lbnQgLT0gKDEgPDwgaSk7CisgICAgICAgICAgICAgIHggKj0gcG93Ml9pOworICAgICAgICAgICAgICBpZiAoeCA+PSBMXygxLjApKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIHBvdzJbaV0gPSBwb3cyX2k7CisgICAgICAgICAgICAgIHBvd2hbaV0gPSBwb3doX2k7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyogSGVyZSBlaXRoZXIgeCA8IDEuMCBhbmQgZXhwb25lbnQgLSAyXmkgPCBNSU5fRVhQIC0gMSA8PSBleHBvbmVudCwKKyAgICAgICAgICAgb3IgMS4wIDw9IHggPCAyXjJeaSBhbmQgZXhwb25lbnQgPj0gTUlOX0VYUCAtIDEuICAqLworCisgICAgICAgIGlmICh4IDwgTF8oMS4wKSkKKyAgICAgICAgICAvKiBJbnZhcmlhbnRzOiB4ICogMl5leHBvbmVudCA9IGFyZ3VtZW50LCB4IDwgMS4wIGFuZAorICAgICAgICAgICAgIGV4cG9uZW50IC0gMl5pIDwgTUlOX0VYUCAtIDEgPD0gZXhwb25lbnQuICAqLworICAgICAgICAgIHdoaWxlIChpID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaS0tOworICAgICAgICAgICAgICBpZiAoZXhwb25lbnQgLSAoMSA8PCBpKSA+PSBNSU5fRVhQIC0gMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBleHBvbmVudCAtPSAoMSA8PCBpKTsKKyAgICAgICAgICAgICAgICAgIHggKj0gcG93MltpXTsKKyAgICAgICAgICAgICAgICAgIGlmICh4ID49IExfKDEuMCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAvKiBIZXJlIGVpdGhlciB4IDwgMS4wIGFuZCBleHBvbmVudCA9IE1JTl9FWFAgLSAxLAorICAgICAgICAgICBvciAxLjAgPD0geCA8IDJeMl5pIGFuZCBleHBvbmVudCA+PSBNSU5fRVhQIC0gMS4gICovCisgICAgICB9CisKKyAgICAvKiBJbnZhcmlhbnRzOiB4ICogMl5leHBvbmVudCA9IGFyZ3VtZW50LCBhbmQKKyAgICAgICBlaXRoZXIgeCA8IDEuMCBhbmQgZXhwb25lbnQgPSBNSU5fRVhQIC0gMSwKKyAgICAgICBvciAxLjAgPD0geCA8IDJeMl5pIGFuZCBleHBvbmVudCA+PSBNSU5fRVhQIC0gMS4gICovCisgICAgd2hpbGUgKGkgPiAwKQorICAgICAgeworICAgICAgICBpLS07CisgICAgICAgIGlmICh4ID49IHBvdzJbaV0pCisgICAgICAgICAgeworICAgICAgICAgICAgZXhwb25lbnQgKz0gKDEgPDwgaSk7CisgICAgICAgICAgICB4ICo9IHBvd2hbaV07CisgICAgICAgICAgfQorICAgICAgfQorICAgIC8qIEhlcmUgZWl0aGVyIHggPCAxLjAgYW5kIGV4cG9uZW50ID0gTUlOX0VYUCAtIDEsCisgICAgICAgb3IgMS4wIDw9IHggPCAyLjAgYW5kIGV4cG9uZW50ID49IE1JTl9FWFAgLSAxLiAgKi8KKyAgfQorI2VuZGlmCisKKyAgRU5EX1JPVU5ESU5HICgpOworCisgICpleHBwdHIgPSBleHBvbmVudDsKKyAgcmV0dXJuIHg7Cit9CmRpZmYgLS1naXQgYS9saWIvcHJpbnRmLWZyZXhwLmggYi9saWIvcHJpbnRmLWZyZXhwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg1ZDdkMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9wcmludGYtZnJleHAuaApAQCAtMCwwICsxLDIzIEBACisvKiBTcGxpdCBhIGRvdWJsZSBpbnRvIGZyYWN0aW9uIGFuZCBtYW50aXNzYSwgZm9yIGhleGFkZWNpbWFsIHByaW50Zi4KKyAgIENvcHlyaWdodCAoQykgMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBXcml0ZSBhIGZpbml0ZSwgcG9zaXRpdmUgbnVtYmVyIHggYXMKKyAgICAgeCA9IG1hbnRpc3NhICogMl5leHAKKyAgIHdoZXJlIGV4cCA+PSBEQkxfTUlOX0VYUCAtIDEsCisgICAgICAgICBtYW50aXNzYSA8IDIuMCwKKyAgICAgICAgIGlmIHggaXMgbm90IGEgZGVub3JtYWxpemVkIG51bWJlciB0aGVuIG1hbnRpc3NhID49IDEuMC4KKyAgIFN0b3JlIGV4cCBpbiAqRVhQUFRSIGFuZCByZXR1cm4gbWFudGlzc2EuICAqLworZXh0ZXJuIGRvdWJsZSBwcmludGZfZnJleHAgKGRvdWJsZSB4LCBpbnQgKmV4cHB0cik7CmRpZmYgLS1naXQgYS9saWIvcHJpbnRmLWZyZXhwbC5jIGIvbGliL3ByaW50Zi1mcmV4cGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjhkMmZmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3ByaW50Zi1mcmV4cGwuYwpAQCAtMCwwICsxLDM3IEBACisvKiBTcGxpdCBhICdsb25nIGRvdWJsZScgaW50byBmcmFjdGlvbiBhbmQgbWFudGlzc2EsIGZvciBoZXhhZGVjaW1hbCBwcmludGYuCisgICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaWYgSEFWRV9TQU1FX0xPTkdfRE9VQkxFX0FTX0RPVUJMRQorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyMgaW5jbHVkZSAicHJpbnRmLWZyZXhwbC5oIgorCisjIGluY2x1ZGUgInByaW50Zi1mcmV4cC5oIgorCitsb25nIGRvdWJsZQorcHJpbnRmX2ZyZXhwbCAobG9uZyBkb3VibGUgeCwgaW50ICpleHBwdHIpCit7CisgIHJldHVybiBwcmludGZfZnJleHAgKHgsIGV4cHB0cik7Cit9CisKKyNlbHNlCisKKyMgZGVmaW5lIFVTRV9MT05HX0RPVUJMRQorIyBpbmNsdWRlICJwcmludGYtZnJleHAuYyIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvcHJpbnRmLWZyZXhwbC5oIGIvbGliL3ByaW50Zi1mcmV4cGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDFkZGVkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3ByaW50Zi1mcmV4cGwuaApAQCAtMCwwICsxLDIzIEBACisvKiBTcGxpdCBhICdsb25nIGRvdWJsZScgaW50byBmcmFjdGlvbiBhbmQgbWFudGlzc2EsIGZvciBoZXhhZGVjaW1hbCBwcmludGYuCisgICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogV3JpdGUgYSBmaW5pdGUsIHBvc2l0aXZlIG51bWJlciB4IGFzCisgICAgIHggPSBtYW50aXNzYSAqIDJeZXhwCisgICB3aGVyZSBleHAgPj0gTERCTF9NSU5fRVhQIC0gMSwKKyAgICAgICAgIG1hbnRpc3NhIDwgMi4wLAorICAgICAgICAgaWYgeCBpcyBub3QgYSBkZW5vcm1hbGl6ZWQgbnVtYmVyIHRoZW4gbWFudGlzc2EgPj0gMS4wLgorICAgU3RvcmUgZXhwIGluICpFWFBQVFIgYW5kIHJldHVybiBtYW50aXNzYS4gICovCitleHRlcm4gbG9uZyBkb3VibGUgcHJpbnRmX2ZyZXhwbCAobG9uZyBkb3VibGUgeCwgaW50ICpleHBwdHIpOwpkaWZmIC0tZ2l0IGEvbGliL3ByaW50Zi1wYXJzZS5jIGIvbGliL3ByaW50Zi1wYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNWZkNDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHJpbnRmLXBhcnNlLmMKQEAgLTAsMCArMSw2MzggQEAKKy8qIEZvcm1hdHRlZCBvdXRwdXQgdG8gc3RyaW5ncy4KKyAgIENvcHlyaWdodCAoQykgMTk5OS0yMDAwLCAyMDAyLTIwMDMsIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBUaGlzIGZpbGUgY2FuIGJlIHBhcmFtZXRyaXplZCB3aXRoIHRoZSBmb2xsb3dpbmcgbWFjcm9zOgorICAgICBDSEFSX1QgICAgICAgICAgICAgVGhlIGVsZW1lbnQgdHlwZSBvZiB0aGUgZm9ybWF0IHN0cmluZy4KKyAgICAgQ0hBUl9UX09OTFlfQVNDSUkgIFNldCB0byAxIHRvIGVuYWJsZSB2ZXJpZmljYXRpb24gdGhhdCBhbGwgY2hhcmFjdGVycworICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGZvcm1hdCBzdHJpbmcgYXJlIEFTQ0lJLgorICAgICBESVJFQ1RJVkUgICAgICAgICAgU3RydWN0dXJlIGRlbm90aW5nIGEgZm9ybWF0IGRpcmVjdGl2ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIERlcGVuZHMgb24gQ0hBUl9ULgorICAgICBESVJFQ1RJVkVTICAgICAgICAgU3RydWN0dXJlIGRlbm90aW5nIHRoZSBzZXQgb2YgZm9ybWF0IGRpcmVjdGl2ZXMgb2YgYQorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0IHN0cmluZy4gIERlcGVuZHMgb24gQ0hBUl9ULgorICAgICBQUklOVEZfUEFSU0UgICAgICAgRnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBmb3JtYXQgc3RyaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgRGVwZW5kcyBvbiBDSEFSX1QuCisgICAgIFNUQVRJQyAgICAgICAgICAgICBTZXQgdG8gJ3N0YXRpYycgdG8gZGVjbGFyZSB0aGUgZnVuY3Rpb24gc3RhdGljLgorICAgICBFTkFCTEVfVU5JU1RESU8gICAgU2V0IHRvIDEgdG8gZW5hYmxlIHRoZSB1bmlzdGRpbyBleHRlbnNpb25zLiAgKi8KKworI2lmbmRlZiBQUklOVEZfUEFSU0UKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaWZuZGVmIFBSSU5URl9QQVJTRQorIyBpbmNsdWRlICJwcmludGYtcGFyc2UuaCIKKyNlbmRpZgorCisvKiBEZWZhdWx0IHBhcmFtZXRlcnMuICAqLworI2lmbmRlZiBQUklOVEZfUEFSU0UKKyMgZGVmaW5lIFBSSU5URl9QQVJTRSBwcmludGZfcGFyc2UKKyMgZGVmaW5lIENIQVJfVCBjaGFyCisjIGRlZmluZSBESVJFQ1RJVkUgY2hhcl9kaXJlY3RpdmUKKyMgZGVmaW5lIERJUkVDVElWRVMgY2hhcl9kaXJlY3RpdmVzCisjZW5kaWYKKworLyogR2V0IHNpemVfdCwgTlVMTC4gICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8qIEdldCBpbnRtYXhfdC4gICovCisjaWYgZGVmaW5lZCBJTl9MSUJJTlRMIHx8IGRlZmluZWQgSU5fTElCQVNQUklOVEYKKyMgaWYgSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVgKKyMgIGluY2x1ZGUgPHN0ZGludC5oPgorIyBlbmRpZgorIyBpZiBIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYCisjICBpbmNsdWRlIDxpbnR0eXBlcy5oPgorIyBlbmRpZgorI2Vsc2UKKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKworLyogbWFsbG9jKCksIHJlYWxsb2MoKSwgZnJlZSgpLiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyogbWVtY3B5KCkuICAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKiBlcnJuby4gICovCisjaW5jbHVkZSA8ZXJybm8uaD4KKworLyogQ2hlY2tlZCBzaXplX3QgY29tcHV0YXRpb25zLiAgKi8KKyNpbmNsdWRlICJ4c2l6ZS5oIgorCisjaWYgQ0hBUl9UX09OTFlfQVNDSUkKKy8qIGNfaXNhc2NpaSgpLiAgKi8KKyMgaW5jbHVkZSAiYy1jdHlwZS5oIgorI2VuZGlmCisKKyNpZmRlZiBTVEFUSUMKK1NUQVRJQworI2VuZGlmCitpbnQKK1BSSU5URl9QQVJTRSAoY29uc3QgQ0hBUl9UICpmb3JtYXQsIERJUkVDVElWRVMgKmQsIGFyZ3VtZW50cyAqYSkKK3sKKyAgY29uc3QgQ0hBUl9UICpjcCA9IGZvcm1hdDsgICAgLyogcG9pbnRlciBpbnRvIGZvcm1hdCAqLworICBzaXplX3QgYXJnX3Bvc24gPSAwOyAgICAgICAgICAvKiBudW1iZXIgb2YgcmVndWxhciBhcmd1bWVudHMgY29uc3VtZWQgKi8KKyAgc2l6ZV90IGRfYWxsb2NhdGVkOyAgICAgICAgICAgLyogYWxsb2NhdGVkIGVsZW1lbnRzIG9mIGQtPmRpciAqLworICBzaXplX3QgYV9hbGxvY2F0ZWQ7ICAgICAgICAgICAvKiBhbGxvY2F0ZWQgZWxlbWVudHMgb2YgYS0+YXJnICovCisgIHNpemVfdCBtYXhfd2lkdGhfbGVuZ3RoID0gMDsKKyAgc2l6ZV90IG1heF9wcmVjaXNpb25fbGVuZ3RoID0gMDsKKworICBkLT5jb3VudCA9IDA7CisgIGRfYWxsb2NhdGVkID0gTl9ESVJFQ1RfQUxMT0NfRElSRUNUSVZFUzsKKyAgZC0+ZGlyID0gZC0+ZGlyZWN0X2FsbG9jX2RpcjsKKworICBhLT5jb3VudCA9IDA7CisgIGFfYWxsb2NhdGVkID0gTl9ESVJFQ1RfQUxMT0NfQVJHVU1FTlRTOworICBhLT5hcmcgPSBhLT5kaXJlY3RfYWxsb2NfYXJnOworCisjZGVmaW5lIFJFR0lTVEVSX0FSRyhfaW5kZXhfLF90eXBlXykgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNpemVfdCBuID0gKF9pbmRleF8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChuID49IGFfYWxsb2NhdGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzaXplX3QgbWVtb3J5X3NpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhcmd1bWVudCAqbWVtb3J5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhX2FsbG9jYXRlZCA9IHh0aW1lcyAoYV9hbGxvY2F0ZWQsIDIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoYV9hbGxvY2F0ZWQgPD0gbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGFfYWxsb2NhdGVkID0geHN1bSAobiwgMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtZW1vcnlfc2l6ZSA9IHh0aW1lcyAoYV9hbGxvY2F0ZWQsIHNpemVvZiAoYXJndW1lbnQpKTsgICAgICAgICAgXAorICAgICAgICBpZiAoc2l6ZV9vdmVyZmxvd19wIChtZW1vcnlfc2l6ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIC8qIE92ZXJmbG93LCB3b3VsZCBsZWFkIHRvIG91dCBvZiBtZW1vcnkuICAqLyAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdvdG8gb3V0X29mX21lbW9yeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtZW1vcnkgPSAoYXJndW1lbnQgKikgKGEtPmFyZyAhPSBhLT5kaXJlY3RfYWxsb2NfYXJnICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcmVhbGxvYyAoYS0+YXJnLCBtZW1vcnlfc2l6ZSkgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbWFsbG9jIChtZW1vcnlfc2l6ZSkpOyAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAobWVtb3J5ID09IE5VTEwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIC8qIE91dCBvZiBtZW1vcnkuICAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdvdG8gb3V0X29mX21lbW9yeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoYS0+YXJnID09IGEtPmRpcmVjdF9hbGxvY19hcmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIG1lbWNweSAobWVtb3J5LCBhLT5hcmcsIGEtPmNvdW50ICogc2l6ZW9mIChhcmd1bWVudCkpOyAgICAgICAgXAorICAgICAgICBhLT5hcmcgPSBtZW1vcnk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHdoaWxlIChhLT5jb3VudCA8PSBuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgYS0+YXJnW2EtPmNvdW50KytdLnR5cGUgPSBUWVBFX05PTkU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChhLT5hcmdbbl0udHlwZSA9PSBUWVBFX05PTkUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgYS0+YXJnW25dLnR5cGUgPSAoX3R5cGVfKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKGEtPmFyZ1tuXS50eXBlICE9IChfdHlwZV8pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgLyogQW1iaWd1b3VzIHR5cGUgZm9yIHBvc2l0aW9uYWwgYXJndW1lbnQuICAqLyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgZ290byBlcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisKKyAgd2hpbGUgKCpjcCAhPSAnXDAnKQorICAgIHsKKyAgICAgIENIQVJfVCBjID0gKmNwKys7CisgICAgICBpZiAoYyA9PSAnJScpCisgICAgICAgIHsKKyAgICAgICAgICBzaXplX3QgYXJnX2luZGV4ID0gQVJHX05PTkU7CisgICAgICAgICAgRElSRUNUSVZFICpkcCA9ICZkLT5kaXJbZC0+Y291bnRdOyAvKiBwb2ludGVyIHRvIG5leHQgZGlyZWN0aXZlICovCisKKyAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBuZXh0IGRpcmVjdGl2ZS4gICovCisgICAgICAgICAgZHAtPmRpcl9zdGFydCA9IGNwIC0gMTsKKyAgICAgICAgICBkcC0+ZmxhZ3MgPSAwOworICAgICAgICAgIGRwLT53aWR0aF9zdGFydCA9IE5VTEw7CisgICAgICAgICAgZHAtPndpZHRoX2VuZCA9IE5VTEw7CisgICAgICAgICAgZHAtPndpZHRoX2FyZ19pbmRleCA9IEFSR19OT05FOworICAgICAgICAgIGRwLT5wcmVjaXNpb25fc3RhcnQgPSBOVUxMOworICAgICAgICAgIGRwLT5wcmVjaXNpb25fZW5kID0gTlVMTDsKKyAgICAgICAgICBkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCA9IEFSR19OT05FOworICAgICAgICAgIGRwLT5hcmdfaW5kZXggPSBBUkdfTk9ORTsKKworICAgICAgICAgIC8qIFRlc3QgZm9yIHBvc2l0aW9uYWwgYXJndW1lbnQuICAqLworICAgICAgICAgIGlmICgqY3AgPj0gJzAnICYmICpjcCA8PSAnOScpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNvbnN0IENIQVJfVCAqbnA7CisKKyAgICAgICAgICAgICAgZm9yIChucCA9IGNwOyAqbnAgPj0gJzAnICYmICpucCA8PSAnOSc7IG5wKyspCisgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgICBpZiAoKm5wID09ICckJykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBzaXplX3QgbiA9IDA7CisKKyAgICAgICAgICAgICAgICAgIGZvciAobnAgPSBjcDsgKm5wID49ICcwJyAmJiAqbnAgPD0gJzknOyBucCsrKQorICAgICAgICAgICAgICAgICAgICBuID0geHN1bSAoeHRpbWVzIChuLCAxMCksICpucCAtICcwJyk7CisgICAgICAgICAgICAgICAgICBpZiAobiA9PSAwKQorICAgICAgICAgICAgICAgICAgICAvKiBQb3NpdGlvbmFsIGFyZ3VtZW50IDAuICAqLworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgaWYgKHNpemVfb3ZlcmZsb3dfcCAobikpCisgICAgICAgICAgICAgICAgICAgIC8qIG4gdG9vIGxhcmdlLCB3b3VsZCBsZWFkIHRvIG91dCBvZiBtZW1vcnkgbGF0ZXIuICAqLworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgYXJnX2luZGV4ID0gbiAtIDE7CisgICAgICAgICAgICAgICAgICBjcCA9IG5wICsgMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBSZWFkIHRoZSBmbGFncy4gICovCisgICAgICAgICAgZm9yICg7OykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKCpjcCA9PSAnXCcnKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGRwLT5mbGFncyB8PSBGTEFHX0dST1VQOworICAgICAgICAgICAgICAgICAgY3ArKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UgaWYgKCpjcCA9PSAnLScpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZHAtPmZsYWdzIHw9IEZMQUdfTEVGVDsKKyAgICAgICAgICAgICAgICAgIGNwKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlIGlmICgqY3AgPT0gJysnKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGRwLT5mbGFncyB8PSBGTEFHX1NIT1dTSUdOOworICAgICAgICAgICAgICAgICAgY3ArKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UgaWYgKCpjcCA9PSAnICcpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZHAtPmZsYWdzIHw9IEZMQUdfU1BBQ0U7CisgICAgICAgICAgICAgICAgICBjcCsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZSBpZiAoKmNwID09ICcjJykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBkcC0+ZmxhZ3MgfD0gRkxBR19BTFQ7CisgICAgICAgICAgICAgICAgICBjcCsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZSBpZiAoKmNwID09ICcwJykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBkcC0+ZmxhZ3MgfD0gRkxBR19aRVJPOworICAgICAgICAgICAgICAgICAgY3ArKzsKKyAgICAgICAgICAgICAgICB9CisjaWYgX19HTElCQ19fID49IDIgJiYgIWRlZmluZWQgX19VQ0xJQkNfXworICAgICAgICAgICAgICBlbHNlIGlmICgqY3AgPT0gJ0knKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGRwLT5mbGFncyB8PSBGTEFHX0xPQ0FMSVpFRDsKKyAgICAgICAgICAgICAgICAgIGNwKys7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIC8qIFBhcnNlIHRoZSBmaWVsZCB3aWR0aC4gICovCisgICAgICAgICAgaWYgKCpjcCA9PSAnKicpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGRwLT53aWR0aF9zdGFydCA9IGNwOworICAgICAgICAgICAgICBjcCsrOworICAgICAgICAgICAgICBkcC0+d2lkdGhfZW5kID0gY3A7CisgICAgICAgICAgICAgIGlmIChtYXhfd2lkdGhfbGVuZ3RoIDwgMSkKKyAgICAgICAgICAgICAgICBtYXhfd2lkdGhfbGVuZ3RoID0gMTsKKworICAgICAgICAgICAgICAvKiBUZXN0IGZvciBwb3NpdGlvbmFsIGFyZ3VtZW50LiAgKi8KKyAgICAgICAgICAgICAgaWYgKCpjcCA+PSAnMCcgJiYgKmNwIDw9ICc5JykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSX1QgKm5wOworCisgICAgICAgICAgICAgICAgICBmb3IgKG5wID0gY3A7ICpucCA+PSAnMCcgJiYgKm5wIDw9ICc5JzsgbnArKykKKyAgICAgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgICAgICAgaWYgKCpucCA9PSAnJCcpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbiA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgKG5wID0gY3A7ICpucCA+PSAnMCcgJiYgKm5wIDw9ICc5JzsgbnArKykKKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSB4c3VtICh4dGltZXMgKG4sIDEwKSwgKm5wIC0gJzAnKTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9zaXRpb25hbCBhcmd1bWVudCAwLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpemVfb3ZlcmZsb3dfcCAobikpCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBuIHRvbyBsYXJnZSwgd291bGQgbGVhZCB0byBvdXQgb2YgbWVtb3J5IGxhdGVyLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgICAgZHAtPndpZHRoX2FyZ19pbmRleCA9IG4gLSAxOworICAgICAgICAgICAgICAgICAgICAgIGNwID0gbnAgKyAxOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAoZHAtPndpZHRoX2FyZ19pbmRleCA9PSBBUkdfTk9ORSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBkcC0+d2lkdGhfYXJnX2luZGV4ID0gYXJnX3Bvc24rKzsKKyAgICAgICAgICAgICAgICAgIGlmIChkcC0+d2lkdGhfYXJnX2luZGV4ID09IEFSR19OT05FKQorICAgICAgICAgICAgICAgICAgICAvKiBhcmdfcG9zbiB3cmFwcGVkIGFyb3VuZC4gICovCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBSRUdJU1RFUl9BUkcgKGRwLT53aWR0aF9hcmdfaW5kZXgsIFRZUEVfSU5UKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmICgqY3AgPj0gJzAnICYmICpjcCA8PSAnOScpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHNpemVfdCB3aWR0aF9sZW5ndGg7CisKKyAgICAgICAgICAgICAgZHAtPndpZHRoX3N0YXJ0ID0gY3A7CisgICAgICAgICAgICAgIGZvciAoOyAqY3AgPj0gJzAnICYmICpjcCA8PSAnOSc7IGNwKyspCisgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgICBkcC0+d2lkdGhfZW5kID0gY3A7CisgICAgICAgICAgICAgIHdpZHRoX2xlbmd0aCA9IGRwLT53aWR0aF9lbmQgLSBkcC0+d2lkdGhfc3RhcnQ7CisgICAgICAgICAgICAgIGlmIChtYXhfd2lkdGhfbGVuZ3RoIDwgd2lkdGhfbGVuZ3RoKQorICAgICAgICAgICAgICAgIG1heF93aWR0aF9sZW5ndGggPSB3aWR0aF9sZW5ndGg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBQYXJzZSB0aGUgcHJlY2lzaW9uLiAgKi8KKyAgICAgICAgICBpZiAoKmNwID09ICcuJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY3ArKzsKKyAgICAgICAgICAgICAgaWYgKCpjcCA9PSAnKicpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZHAtPnByZWNpc2lvbl9zdGFydCA9IGNwIC0gMTsKKyAgICAgICAgICAgICAgICAgIGNwKys7CisgICAgICAgICAgICAgICAgICBkcC0+cHJlY2lzaW9uX2VuZCA9IGNwOworICAgICAgICAgICAgICAgICAgaWYgKG1heF9wcmVjaXNpb25fbGVuZ3RoIDwgMikKKyAgICAgICAgICAgICAgICAgICAgbWF4X3ByZWNpc2lvbl9sZW5ndGggPSAyOworCisgICAgICAgICAgICAgICAgICAvKiBUZXN0IGZvciBwb3NpdGlvbmFsIGFyZ3VtZW50LiAgKi8KKyAgICAgICAgICAgICAgICAgIGlmICgqY3AgPj0gJzAnICYmICpjcCA8PSAnOScpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSX1QgKm5wOworCisgICAgICAgICAgICAgICAgICAgICAgZm9yIChucCA9IGNwOyAqbnAgPj0gJzAnICYmICpucCA8PSAnOSc7IG5wKyspCisgICAgICAgICAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKCpucCA9PSAnJCcpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuID0gMDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG5wID0gY3A7ICpucCA+PSAnMCcgJiYgKm5wIDw9ICc5JzsgbnArKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0geHN1bSAoeHRpbWVzIChuLCAxMCksICpucCAtICcwJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9zaXRpb25hbCBhcmd1bWVudCAwLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2l6ZV9vdmVyZmxvd19wIChuKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuIHRvbyBsYXJnZSwgd291bGQgbGVhZCB0byBvdXQgb2YgbWVtb3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0ZXIuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGRwLT5wcmVjaXNpb25fYXJnX2luZGV4ID0gbiAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNwID0gbnAgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBpZiAoZHAtPnByZWNpc2lvbl9hcmdfaW5kZXggPT0gQVJHX05PTkUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCA9IGFyZ19wb3NuKys7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKGRwLT5wcmVjaXNpb25fYXJnX2luZGV4ID09IEFSR19OT05FKQorICAgICAgICAgICAgICAgICAgICAgICAgLyogYXJnX3Bvc24gd3JhcHBlZCBhcm91bmQuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgUkVHSVNURVJfQVJHIChkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCwgVFlQRV9JTlQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHNpemVfdCBwcmVjaXNpb25fbGVuZ3RoOworCisgICAgICAgICAgICAgICAgICBkcC0+cHJlY2lzaW9uX3N0YXJ0ID0gY3AgLSAxOworICAgICAgICAgICAgICAgICAgZm9yICg7ICpjcCA+PSAnMCcgJiYgKmNwIDw9ICc5JzsgY3ArKykKKyAgICAgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgICAgICAgZHAtPnByZWNpc2lvbl9lbmQgPSBjcDsKKyAgICAgICAgICAgICAgICAgIHByZWNpc2lvbl9sZW5ndGggPSBkcC0+cHJlY2lzaW9uX2VuZCAtIGRwLT5wcmVjaXNpb25fc3RhcnQ7CisgICAgICAgICAgICAgICAgICBpZiAobWF4X3ByZWNpc2lvbl9sZW5ndGggPCBwcmVjaXNpb25fbGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICBtYXhfcHJlY2lzaW9uX2xlbmd0aCA9IHByZWNpc2lvbl9sZW5ndGg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgeworICAgICAgICAgICAgYXJnX3R5cGUgdHlwZTsKKworICAgICAgICAgICAgLyogUGFyc2UgYXJndW1lbnQgdHlwZS9zaXplIHNwZWNpZmllcnMuICAqLworICAgICAgICAgICAgeworICAgICAgICAgICAgICBpbnQgZmxhZ3MgPSAwOworCisgICAgICAgICAgICAgIGZvciAoOzspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgaWYgKCpjcCA9PSAnaCcpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBmbGFncyB8PSAoMSA8PCAoZmxhZ3MgJiAxKSk7CisgICAgICAgICAgICAgICAgICAgICAgY3ArKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKmNwID09ICdMJykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGZsYWdzIHw9IDQ7CisgICAgICAgICAgICAgICAgICAgICAgY3ArKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKmNwID09ICdsJykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICs9IDg7CisgICAgICAgICAgICAgICAgICAgICAgY3ArKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKmNwID09ICdqJykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGlmIChzaXplb2YgKGludG1heF90KSA+IHNpemVvZiAobG9uZykpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGludG1heF90ID0gbG9uZyBsb25nICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICs9IDE2OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNpemVvZiAoaW50bWF4X3QpID4gc2l6ZW9mIChpbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbnRtYXhfdCA9IGxvbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgKz0gODsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICBjcCsrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBlbHNlIGlmICgqY3AgPT0gJ3onIHx8ICpjcCA9PSAnWicpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAvKiAneicgaXMgc3RhbmRhcmRpemVkIGluIElTTyBDIDk5LCBidXQgZ2xpYmMgdXNlcyAnWicKKyAgICAgICAgICAgICAgICAgICAgICAgICBiZWNhdXNlIHRoZSB3YXJuaW5nIGZhY2lsaXR5IGluIGdjYy0yLjk1LjIgdW5kZXJzdGFuZHMKKyAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5ICdaJyAoc2VlIGdjYy0yLjk1LjIvZ2NjL2MtY29tbW9uLmM6MTc4NCkuICAqLworICAgICAgICAgICAgICAgICAgICAgIGlmIChzaXplb2YgKHNpemVfdCkgPiBzaXplb2YgKGxvbmcpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzaXplX3QgPSBsb25nIGxvbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgKz0gMTY7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZW9mIChzaXplX3QpID4gc2l6ZW9mIChpbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzaXplX3QgPSBsb25nICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICs9IDg7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgY3ArKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKmNwID09ICd0JykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGlmIChzaXplb2YgKHB0cmRpZmZfdCkgPiBzaXplb2YgKGxvbmcpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwdHJkaWZmX3QgPSBsb25nIGxvbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgKz0gMTY7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZW9mIChwdHJkaWZmX3QpID4gc2l6ZW9mIChpbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwdHJkaWZmX3QgPSBsb25nICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICs9IDg7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgY3ArKzsKKyAgICAgICAgICAgICAgICAgICAgfQorI2lmIGRlZmluZWQgX19BUFBMRV9fICYmIGRlZmluZWQgX19NQUNIX18KKyAgICAgICAgICAgICAgICAgIC8qIE9uIE1hYyBPUyBYIDEwLjMsIFBSSWRNQVggaXMgZGVmaW5lZCBhcyAicWQiLgorICAgICAgICAgICAgICAgICAgICAgV2UgY2Fubm90IGNoYW5nZSBpdCB0byAibGxkIiBiZWNhdXNlIFBSSWRNQVggbXVzdCBhbHNvCisgICAgICAgICAgICAgICAgICAgICBiZSB1bmRlcnN0b29kIGJ5IHRoZSBzeXN0ZW0ncyBwcmludGYgcm91dGluZXMuICAqLworICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKmNwID09ICdxJykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGlmICg2NCAvIDggPiBzaXplb2YgKGxvbmcpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbnQ2NF90ID0gbG9uZyBsb25nICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICs9IDE2OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW50NjRfdCA9IGxvbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgKz0gODsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICBjcCsrOworICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyNpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCisgICAgICAgICAgICAgICAgICAvKiBPbiBuYXRpdmUgV2luZG93cywgUFJJZE1BWCBpcyBkZWZpbmVkIGFzICJJNjRkIi4KKyAgICAgICAgICAgICAgICAgICAgIFdlIGNhbm5vdCBjaGFuZ2UgaXQgdG8gImxsZCIgYmVjYXVzZSBQUklkTUFYIG11c3QgYWxzbworICAgICAgICAgICAgICAgICAgICAgYmUgdW5kZXJzdG9vZCBieSB0aGUgc3lzdGVtJ3MgcHJpbnRmIHJvdXRpbmVzLiAgKi8KKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCpjcCA9PSAnSScgJiYgY3BbMV0gPT0gJzYnICYmIGNwWzJdID09ICc0JykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGlmICg2NCAvIDggPiBzaXplb2YgKGxvbmcpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX2ludDY0ID0gbG9uZyBsb25nICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICs9IDE2OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19pbnQ2NCA9IGxvbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgKz0gODsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICBjcCArPSAzOworICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIC8qIFJlYWQgdGhlIGNvbnZlcnNpb24gY2hhcmFjdGVyLiAgKi8KKyAgICAgICAgICAgICAgYyA9ICpjcCsrOworICAgICAgICAgICAgICBzd2l0Y2ggKGMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgJ2QnOiBjYXNlICdpJzoKKyNpZiBIQVZFX0xPTkdfTE9OR19JTlQKKyAgICAgICAgICAgICAgICAgIC8qIElmICdsb25nIGxvbmcnIGV4aXN0cyBhbmQgaXMgbGFyZ2VyIHRoYW4gJ2xvbmcnOiAgKi8KKyAgICAgICAgICAgICAgICAgIGlmIChmbGFncyA+PSAxNiB8fCAoZmxhZ3MgJiA0KSkKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IFRZUEVfTE9OR0xPTkdJTlQ7CisgICAgICAgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgIC8qIElmICdsb25nIGxvbmcnIGV4aXN0cyBhbmQgaXMgdGhlIHNhbWUgYXMgJ2xvbmcnLCB3ZSBwYXJzZQorICAgICAgICAgICAgICAgICAgICAgImxsZCIgaW50byBUWVBFX0xPTkdJTlQuICAqLworICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzID49IDgpCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBUWVBFX0xPTkdJTlQ7CisgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmbGFncyAmIDIpCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBUWVBFX1NDSEFSOworICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmxhZ3MgJiAxKQorICAgICAgICAgICAgICAgICAgICB0eXBlID0gVFlQRV9TSE9SVDsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IFRZUEVfSU5UOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAnbyc6IGNhc2UgJ3UnOiBjYXNlICd4JzogY2FzZSAnWCc6CisjaWYgSEFWRV9MT05HX0xPTkdfSU5UCisgICAgICAgICAgICAgICAgICAvKiBJZiAnbG9uZyBsb25nJyBleGlzdHMgYW5kIGlzIGxhcmdlciB0aGFuICdsb25nJzogICovCisgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgPj0gMTYgfHwgKGZsYWdzICYgNCkpCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBUWVBFX1VMT05HTE9OR0lOVDsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgLyogSWYgJ3Vuc2lnbmVkIGxvbmcgbG9uZycgZXhpc3RzIGFuZCBpcyB0aGUgc2FtZSBhcworICAgICAgICAgICAgICAgICAgICAgJ3Vuc2lnbmVkIGxvbmcnLCB3ZSBwYXJzZSAibGx1IiBpbnRvIFRZUEVfVUxPTkdJTlQuICAqLworICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzID49IDgpCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBUWVBFX1VMT05HSU5UOworICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmxhZ3MgJiAyKQorICAgICAgICAgICAgICAgICAgICB0eXBlID0gVFlQRV9VQ0hBUjsKKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgMSkKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IFRZUEVfVVNIT1JUOworICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB0eXBlID0gVFlQRV9VSU5UOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAnZic6IGNhc2UgJ0YnOiBjYXNlICdlJzogY2FzZSAnRSc6IGNhc2UgJ2cnOiBjYXNlICdHJzoKKyAgICAgICAgICAgICAgICBjYXNlICdhJzogY2FzZSAnQSc6CisgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgPj0gMTYgfHwgKGZsYWdzICYgNCkpCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBUWVBFX0xPTkdET1VCTEU7CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBUWVBFX0RPVUJMRTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ2MnOgorICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzID49IDgpCisjaWYgSEFWRV9XSU5UX1QKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IFRZUEVfV0lERV9DSEFSOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB0eXBlID0gVFlQRV9DSEFSOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisjaWYgSEFWRV9XSU5UX1QKKyAgICAgICAgICAgICAgICBjYXNlICdDJzoKKyAgICAgICAgICAgICAgICAgIHR5cGUgPSBUWVBFX1dJREVfQ0hBUjsKKyAgICAgICAgICAgICAgICAgIGMgPSAnYyc7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGNhc2UgJ3MnOgorICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzID49IDgpCisjaWYgSEFWRV9XQ0hBUl9UCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBUWVBFX1dJREVfU1RSSU5HOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB0eXBlID0gVFlQRV9TVFJJTkc7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyNpZiBIQVZFX1dDSEFSX1QKKyAgICAgICAgICAgICAgICBjYXNlICdTJzoKKyAgICAgICAgICAgICAgICAgIHR5cGUgPSBUWVBFX1dJREVfU1RSSU5HOworICAgICAgICAgICAgICAgICAgYyA9ICdzJzsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgICAgICAgICAgY2FzZSAncCc6CisgICAgICAgICAgICAgICAgICB0eXBlID0gVFlQRV9QT0lOVEVSOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAnbic6CisjaWYgSEFWRV9MT05HX0xPTkdfSU5UCisgICAgICAgICAgICAgICAgICAvKiBJZiAnbG9uZyBsb25nJyBleGlzdHMgYW5kIGlzIGxhcmdlciB0aGFuICdsb25nJzogICovCisgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgPj0gMTYgfHwgKGZsYWdzICYgNCkpCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBUWVBFX0NPVU5UX0xPTkdMT05HSU5UX1BPSU5URVI7CisgICAgICAgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgIC8qIElmICdsb25nIGxvbmcnIGV4aXN0cyBhbmQgaXMgdGhlIHNhbWUgYXMgJ2xvbmcnLCB3ZSBwYXJzZQorICAgICAgICAgICAgICAgICAgICAgImxsbiIgaW50byBUWVBFX0NPVU5UX0xPTkdJTlRfUE9JTlRFUi4gICovCisgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgPj0gOCkKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IFRZUEVfQ09VTlRfTE9OR0lOVF9QT0lOVEVSOworICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmxhZ3MgJiAyKQorICAgICAgICAgICAgICAgICAgICB0eXBlID0gVFlQRV9DT1VOVF9TQ0hBUl9QT0lOVEVSOworICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmxhZ3MgJiAxKQorICAgICAgICAgICAgICAgICAgICB0eXBlID0gVFlQRV9DT1VOVF9TSE9SVF9QT0lOVEVSOworICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB0eXBlID0gVFlQRV9DT1VOVF9JTlRfUE9JTlRFUjsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworI2lmIEVOQUJMRV9VTklTVERJTworICAgICAgICAgICAgICAgIC8qIFRoZSB1bmlzdGRpbyBleHRlbnNpb25zLiAgKi8KKyAgICAgICAgICAgICAgICBjYXNlICdVJzoKKyAgICAgICAgICAgICAgICAgIGlmIChmbGFncyA+PSAxNikKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IFRZUEVfVTMyX1NUUklORzsKKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZsYWdzID49IDgpCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBUWVBFX1UxNl9TVFJJTkc7CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBUWVBFX1U4X1NUUklORzsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgICAgICAgICAgY2FzZSAnJSc6CisgICAgICAgICAgICAgICAgICB0eXBlID0gVFlQRV9OT05FOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgIC8qIFVua25vd24gY29udmVyc2lvbiBjaGFyYWN0ZXIuICAqLworICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlICE9IFRZUEVfTk9ORSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRwLT5hcmdfaW5kZXggPSBhcmdfaW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKGRwLT5hcmdfaW5kZXggPT0gQVJHX05PTkUpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRwLT5hcmdfaW5kZXggPSBhcmdfcG9zbisrOworICAgICAgICAgICAgICAgICAgICBpZiAoZHAtPmFyZ19pbmRleCA9PSBBUkdfTk9ORSkKKyAgICAgICAgICAgICAgICAgICAgICAvKiBhcmdfcG9zbiB3cmFwcGVkIGFyb3VuZC4gICovCisgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBSRUdJU1RFUl9BUkcgKGRwLT5hcmdfaW5kZXgsIHR5cGUpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBkcC0+Y29udmVyc2lvbiA9IGM7CisgICAgICAgICAgICBkcC0+ZGlyX2VuZCA9IGNwOworICAgICAgICAgIH0KKworICAgICAgICAgIGQtPmNvdW50Kys7CisgICAgICAgICAgaWYgKGQtPmNvdW50ID49IGRfYWxsb2NhdGVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzaXplX3QgbWVtb3J5X3NpemU7CisgICAgICAgICAgICAgIERJUkVDVElWRSAqbWVtb3J5OworCisgICAgICAgICAgICAgIGRfYWxsb2NhdGVkID0geHRpbWVzIChkX2FsbG9jYXRlZCwgMik7CisgICAgICAgICAgICAgIG1lbW9yeV9zaXplID0geHRpbWVzIChkX2FsbG9jYXRlZCwgc2l6ZW9mIChESVJFQ1RJVkUpKTsKKyAgICAgICAgICAgICAgaWYgKHNpemVfb3ZlcmZsb3dfcCAobWVtb3J5X3NpemUpKQorICAgICAgICAgICAgICAgIC8qIE92ZXJmbG93LCB3b3VsZCBsZWFkIHRvIG91dCBvZiBtZW1vcnkuICAqLworICAgICAgICAgICAgICAgIGdvdG8gb3V0X29mX21lbW9yeTsKKyAgICAgICAgICAgICAgbWVtb3J5ID0gKERJUkVDVElWRSAqKSAoZC0+ZGlyICE9IGQtPmRpcmVjdF9hbGxvY19kaXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyByZWFsbG9jIChkLT5kaXIsIG1lbW9yeV9zaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1hbGxvYyAobWVtb3J5X3NpemUpKTsKKyAgICAgICAgICAgICAgaWYgKG1lbW9yeSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIC8qIE91dCBvZiBtZW1vcnkuICAqLworICAgICAgICAgICAgICAgIGdvdG8gb3V0X29mX21lbW9yeTsKKyAgICAgICAgICAgICAgaWYgKGQtPmRpciA9PSBkLT5kaXJlY3RfYWxsb2NfZGlyKQorICAgICAgICAgICAgICAgIG1lbWNweSAobWVtb3J5LCBkLT5kaXIsIGQtPmNvdW50ICogc2l6ZW9mIChESVJFQ1RJVkUpKTsKKyAgICAgICAgICAgICAgZC0+ZGlyID0gbWVtb3J5OworICAgICAgICAgICAgfQorICAgICAgICB9CisjaWYgQ0hBUl9UX09OTFlfQVNDSUkKKyAgICAgIGVsc2UgaWYgKCFjX2lzYXNjaWkgKGMpKQorICAgICAgICB7CisgICAgICAgICAgLyogTm9uLUFTQ0lJIGNoYXJhY3Rlci4gIE5vdCBzdXBwb3J0ZWQuICAqLworICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgZC0+ZGlyW2QtPmNvdW50XS5kaXJfc3RhcnQgPSBjcDsKKworICBkLT5tYXhfd2lkdGhfbGVuZ3RoID0gbWF4X3dpZHRoX2xlbmd0aDsKKyAgZC0+bWF4X3ByZWNpc2lvbl9sZW5ndGggPSBtYXhfcHJlY2lzaW9uX2xlbmd0aDsKKyAgcmV0dXJuIDA7CisKK2Vycm9yOgorICBpZiAoYS0+YXJnICE9IGEtPmRpcmVjdF9hbGxvY19hcmcpCisgICAgZnJlZSAoYS0+YXJnKTsKKyAgaWYgKGQtPmRpciAhPSBkLT5kaXJlY3RfYWxsb2NfZGlyKQorICAgIGZyZWUgKGQtPmRpcik7CisgIGVycm5vID0gRUlOVkFMOworICByZXR1cm4gLTE7CisKK291dF9vZl9tZW1vcnk6CisgIGlmIChhLT5hcmcgIT0gYS0+ZGlyZWN0X2FsbG9jX2FyZykKKyAgICBmcmVlIChhLT5hcmcpOworICBpZiAoZC0+ZGlyICE9IGQtPmRpcmVjdF9hbGxvY19kaXIpCisgICAgZnJlZSAoZC0+ZGlyKTsKKyAgZXJybm8gPSBFTk9NRU07CisgIHJldHVybiAtMTsKK30KKworI3VuZGVmIFBSSU5URl9QQVJTRQorI3VuZGVmIERJUkVDVElWRVMKKyN1bmRlZiBESVJFQ1RJVkUKKyN1bmRlZiBDSEFSX1RfT05MWV9BU0NJSQorI3VuZGVmIENIQVJfVApkaWZmIC0tZ2l0IGEvbGliL3ByaW50Zi1wYXJzZS5oIGIvbGliL3ByaW50Zi1wYXJzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NzA5OWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHJpbnRmLXBhcnNlLmgKQEAgLTAsMCArMSwxOTMgQEAKKy8qIFBhcnNlIHByaW50ZiBmb3JtYXQgc3RyaW5nLgorICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAyLTIwMDMsIDIwMDUsIDIwMDcsIDIwMTAtMjAxMiBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBfUFJJTlRGX1BBUlNFX0gKKyNkZWZpbmUgX1BSSU5URl9QQVJTRV9ICisKKy8qIFRoaXMgZmlsZSBjYW4gYmUgcGFyYW1ldHJpemVkIHdpdGggdGhlIGZvbGxvd2luZyBtYWNyb3M6CisgICAgIEVOQUJMRV9VTklTVERJTyAgICBTZXQgdG8gMSB0byBlbmFibGUgdGhlIHVuaXN0ZGlvIGV4dGVuc2lvbnMuCisgICAgIFNUQVRJQyAgICAgICAgICAgICBTZXQgdG8gJ3N0YXRpYycgdG8gZGVjbGFyZSB0aGUgZnVuY3Rpb24gc3RhdGljLiAgKi8KKworI2lmIEhBVkVfRkVBVFVSRVNfSAorIyBpbmNsdWRlIDxmZWF0dXJlcy5oPiAvKiBmb3IgX19HTElCQ19fLCBfX1VDTElCQ19fICovCisjZW5kaWYKKworI2luY2x1ZGUgInByaW50Zi1hcmdzLmgiCisKKworLyogRmxhZ3MgKi8KKyNkZWZpbmUgRkxBR19HUk9VUCAgICAgICAxICAgICAgLyogJyBmbGFnICovCisjZGVmaW5lIEZMQUdfTEVGVCAgICAgICAgMiAgICAgIC8qIC0gZmxhZyAqLworI2RlZmluZSBGTEFHX1NIT1dTSUdOICAgIDQgICAgICAvKiArIGZsYWcgKi8KKyNkZWZpbmUgRkxBR19TUEFDRSAgICAgICA4ICAgICAgLyogc3BhY2UgZmxhZyAqLworI2RlZmluZSBGTEFHX0FMVCAgICAgICAgMTYgICAgICAvKiAjIGZsYWcgKi8KKyNkZWZpbmUgRkxBR19aRVJPICAgICAgIDMyCisjaWYgX19HTElCQ19fID49IDIgJiYgIWRlZmluZWQgX19VQ0xJQkNfXworIyBkZWZpbmUgRkxBR19MT0NBTElaRUQgNjQgICAgICAvKiBJIGZsYWcsIHVzZXMgbG9jYWxpemVkIGRpZ2l0cyAqLworI2VuZGlmCisKKy8qIGFyZ19pbmRleCB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgbm8gYXJndW1lbnQgaXMgY29uc3VtZWQuICAqLworI2RlZmluZSBBUkdfTk9ORSAgICAgICAgKH4oc2l6ZV90KTApCisKKy8qIHh4eF9kaXJlY3RpdmU6IEEgcGFyc2VkIGRpcmVjdGl2ZS4KKyAgIHh4eF9kaXJlY3RpdmVzOiBBIHBhcnNlZCBmb3JtYXQgc3RyaW5nLiAgKi8KKworLyogTnVtYmVyIG9mIGRpcmVjdGx5IGFsbG9jYXRlZCBkaXJlY3RpdmVzIChubyBtYWxsb2MoKSBuZWVkZWQpLiAgKi8KKyNkZWZpbmUgTl9ESVJFQ1RfQUxMT0NfRElSRUNUSVZFUyA3CisKKy8qIEEgcGFyc2VkIGRpcmVjdGl2ZS4gICovCit0eXBlZGVmIHN0cnVjdAoreworICBjb25zdCBjaGFyKiBkaXJfc3RhcnQ7CisgIGNvbnN0IGNoYXIqIGRpcl9lbmQ7CisgIGludCBmbGFnczsKKyAgY29uc3QgY2hhciogd2lkdGhfc3RhcnQ7CisgIGNvbnN0IGNoYXIqIHdpZHRoX2VuZDsKKyAgc2l6ZV90IHdpZHRoX2FyZ19pbmRleDsKKyAgY29uc3QgY2hhciogcHJlY2lzaW9uX3N0YXJ0OworICBjb25zdCBjaGFyKiBwcmVjaXNpb25fZW5kOworICBzaXplX3QgcHJlY2lzaW9uX2FyZ19pbmRleDsKKyAgY2hhciBjb252ZXJzaW9uOyAvKiBkIGkgbyB1IHggWCBmIEYgZSBFIGcgRyBhIEEgYyBzIHAgbiBVICUgYnV0IG5vdCBDIFMgKi8KKyAgc2l6ZV90IGFyZ19pbmRleDsKK30KK2NoYXJfZGlyZWN0aXZlOworCisvKiBBIHBhcnNlZCBmb3JtYXQgc3RyaW5nLiAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIHNpemVfdCBjb3VudDsKKyAgY2hhcl9kaXJlY3RpdmUgKmRpcjsKKyAgc2l6ZV90IG1heF93aWR0aF9sZW5ndGg7CisgIHNpemVfdCBtYXhfcHJlY2lzaW9uX2xlbmd0aDsKKyAgY2hhcl9kaXJlY3RpdmUgZGlyZWN0X2FsbG9jX2RpcltOX0RJUkVDVF9BTExPQ19ESVJFQ1RJVkVTXTsKK30KK2NoYXJfZGlyZWN0aXZlczsKKworI2lmIEVOQUJMRV9VTklTVERJTworCisvKiBBIHBhcnNlZCBkaXJlY3RpdmUuICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgY29uc3QgdWludDhfdCogZGlyX3N0YXJ0OworICBjb25zdCB1aW50OF90KiBkaXJfZW5kOworICBpbnQgZmxhZ3M7CisgIGNvbnN0IHVpbnQ4X3QqIHdpZHRoX3N0YXJ0OworICBjb25zdCB1aW50OF90KiB3aWR0aF9lbmQ7CisgIHNpemVfdCB3aWR0aF9hcmdfaW5kZXg7CisgIGNvbnN0IHVpbnQ4X3QqIHByZWNpc2lvbl9zdGFydDsKKyAgY29uc3QgdWludDhfdCogcHJlY2lzaW9uX2VuZDsKKyAgc2l6ZV90IHByZWNpc2lvbl9hcmdfaW5kZXg7CisgIHVpbnQ4X3QgY29udmVyc2lvbjsgLyogZCBpIG8gdSB4IFggZiBGIGUgRSBnIEcgYSBBIGMgcyBwIG4gVSAlIGJ1dCBub3QgQyBTICovCisgIHNpemVfdCBhcmdfaW5kZXg7Cit9Cit1OF9kaXJlY3RpdmU7CisKKy8qIEEgcGFyc2VkIGZvcm1hdCBzdHJpbmcuICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgc2l6ZV90IGNvdW50OworICB1OF9kaXJlY3RpdmUgKmRpcjsKKyAgc2l6ZV90IG1heF93aWR0aF9sZW5ndGg7CisgIHNpemVfdCBtYXhfcHJlY2lzaW9uX2xlbmd0aDsKKyAgdThfZGlyZWN0aXZlIGRpcmVjdF9hbGxvY19kaXJbTl9ESVJFQ1RfQUxMT0NfRElSRUNUSVZFU107Cit9Cit1OF9kaXJlY3RpdmVzOworCisvKiBBIHBhcnNlZCBkaXJlY3RpdmUuICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgY29uc3QgdWludDE2X3QqIGRpcl9zdGFydDsKKyAgY29uc3QgdWludDE2X3QqIGRpcl9lbmQ7CisgIGludCBmbGFnczsKKyAgY29uc3QgdWludDE2X3QqIHdpZHRoX3N0YXJ0OworICBjb25zdCB1aW50MTZfdCogd2lkdGhfZW5kOworICBzaXplX3Qgd2lkdGhfYXJnX2luZGV4OworICBjb25zdCB1aW50MTZfdCogcHJlY2lzaW9uX3N0YXJ0OworICBjb25zdCB1aW50MTZfdCogcHJlY2lzaW9uX2VuZDsKKyAgc2l6ZV90IHByZWNpc2lvbl9hcmdfaW5kZXg7CisgIHVpbnQxNl90IGNvbnZlcnNpb247IC8qIGQgaSBvIHUgeCBYIGYgRiBlIEUgZyBHIGEgQSBjIHMgcCBuIFUgJSBidXQgbm90IEMgUyAqLworICBzaXplX3QgYXJnX2luZGV4OworfQordTE2X2RpcmVjdGl2ZTsKKworLyogQSBwYXJzZWQgZm9ybWF0IHN0cmluZy4gICovCit0eXBlZGVmIHN0cnVjdAoreworICBzaXplX3QgY291bnQ7CisgIHUxNl9kaXJlY3RpdmUgKmRpcjsKKyAgc2l6ZV90IG1heF93aWR0aF9sZW5ndGg7CisgIHNpemVfdCBtYXhfcHJlY2lzaW9uX2xlbmd0aDsKKyAgdTE2X2RpcmVjdGl2ZSBkaXJlY3RfYWxsb2NfZGlyW05fRElSRUNUX0FMTE9DX0RJUkVDVElWRVNdOworfQordTE2X2RpcmVjdGl2ZXM7CisKKy8qIEEgcGFyc2VkIGRpcmVjdGl2ZS4gICovCit0eXBlZGVmIHN0cnVjdAoreworICBjb25zdCB1aW50MzJfdCogZGlyX3N0YXJ0OworICBjb25zdCB1aW50MzJfdCogZGlyX2VuZDsKKyAgaW50IGZsYWdzOworICBjb25zdCB1aW50MzJfdCogd2lkdGhfc3RhcnQ7CisgIGNvbnN0IHVpbnQzMl90KiB3aWR0aF9lbmQ7CisgIHNpemVfdCB3aWR0aF9hcmdfaW5kZXg7CisgIGNvbnN0IHVpbnQzMl90KiBwcmVjaXNpb25fc3RhcnQ7CisgIGNvbnN0IHVpbnQzMl90KiBwcmVjaXNpb25fZW5kOworICBzaXplX3QgcHJlY2lzaW9uX2FyZ19pbmRleDsKKyAgdWludDMyX3QgY29udmVyc2lvbjsgLyogZCBpIG8gdSB4IFggZiBGIGUgRSBnIEcgYSBBIGMgcyBwIG4gVSAlIGJ1dCBub3QgQyBTICovCisgIHNpemVfdCBhcmdfaW5kZXg7Cit9Cit1MzJfZGlyZWN0aXZlOworCisvKiBBIHBhcnNlZCBmb3JtYXQgc3RyaW5nLiAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIHNpemVfdCBjb3VudDsKKyAgdTMyX2RpcmVjdGl2ZSAqZGlyOworICBzaXplX3QgbWF4X3dpZHRoX2xlbmd0aDsKKyAgc2l6ZV90IG1heF9wcmVjaXNpb25fbGVuZ3RoOworICB1MzJfZGlyZWN0aXZlIGRpcmVjdF9hbGxvY19kaXJbTl9ESVJFQ1RfQUxMT0NfRElSRUNUSVZFU107Cit9Cit1MzJfZGlyZWN0aXZlczsKKworI2VuZGlmCisKKworLyogUGFyc2VzIHRoZSBmb3JtYXQgc3RyaW5nLiAgRmlsbHMgaW4gdGhlIG51bWJlciBOIG9mIGRpcmVjdGl2ZXMsIGFuZCBmaWxscworICAgaW4gZGlyZWN0aXZlc1swXSwgLi4uLCBkaXJlY3RpdmVzW04tMV0sIGFuZCBzZXRzIGRpcmVjdGl2ZXNbTl0uZGlyX3N0YXJ0CisgICB0byB0aGUgZW5kIG9mIHRoZSBmb3JtYXQgc3RyaW5nLiAgQWxzbyBmaWxscyBpbiB0aGUgYXJnX3R5cGUgZmllbGRzIG9mIHRoZQorICAgYXJndW1lbnRzIGFuZCB0aGUgbmVlZGVkIGNvdW50IG9mIGFyZ3VtZW50cy4gICovCisjaWYgRU5BQkxFX1VOSVNURElPCitleHRlcm4gaW50CisgICAgICAgdWxjX3ByaW50Zl9wYXJzZSAoY29uc3QgY2hhciAqZm9ybWF0LCBjaGFyX2RpcmVjdGl2ZXMgKmQsIGFyZ3VtZW50cyAqYSk7CitleHRlcm4gaW50CisgICAgICAgdThfcHJpbnRmX3BhcnNlIChjb25zdCB1aW50OF90ICpmb3JtYXQsIHU4X2RpcmVjdGl2ZXMgKmQsIGFyZ3VtZW50cyAqYSk7CitleHRlcm4gaW50CisgICAgICAgdTE2X3ByaW50Zl9wYXJzZSAoY29uc3QgdWludDE2X3QgKmZvcm1hdCwgdTE2X2RpcmVjdGl2ZXMgKmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzICphKTsKK2V4dGVybiBpbnQKKyAgICAgICB1MzJfcHJpbnRmX3BhcnNlIChjb25zdCB1aW50MzJfdCAqZm9ybWF0LCB1MzJfZGlyZWN0aXZlcyAqZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMgKmEpOworI2Vsc2UKKyMgaWZkZWYgU1RBVElDCitTVEFUSUMKKyMgZWxzZQorZXh0ZXJuCisjIGVuZGlmCitpbnQgcHJpbnRmX3BhcnNlIChjb25zdCBjaGFyICpmb3JtYXQsIGNoYXJfZGlyZWN0aXZlcyAqZCwgYXJndW1lbnRzICphKTsKKyNlbmRpZgorCisjZW5kaWYgLyogX1BSSU5URl9QQVJTRV9IICovCmRpZmYgLS1naXQgYS9saWIvcHJpbnRmLmMgYi9saWIvcHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFjMzA2YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9wcmludGYuYwpAQCAtMCwwICsxLDQwIEBACisvKiBGb3JtYXR0ZWQgb3V0cHV0IHRvIGEgc3RyZWFtLgorICAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDEwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZiAxCisjIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworLyogUHJpbnQgZm9ybWF0dGVkIG91dHB1dCB0byBzdGFuZGFyZCBvdXRwdXQuCisgICBSZXR1cm4gc3RyaW5nIGxlbmd0aCBvZiBmb3JtYXR0ZWQgc3RyaW5nLiAgT24gZXJyb3IsIHJldHVybiBhIG5lZ2F0aXZlCisgICB2YWx1ZS4gICovCitpbnQKK3ByaW50ZiAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIGludCByZXR2YWw7CisgIHZhX2xpc3QgYXJnczsKKworICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKyAgcmV0dmFsID0gdmZwcmludGYgKHN0ZG91dCwgZm9ybWF0LCBhcmdzKTsKKyAgdmFfZW5kIChhcmdzKTsKKworICByZXR1cm4gcmV0dmFsOworfQpkaWZmIC0tZ2l0IGEvbGliL3Byb2duYW1lLmMgYi9saWIvcHJvZ25hbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGQ0ZGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3Byb2duYW1lLmMKQEAgLTAsMCArMSw5MiBAQAorLyogUHJvZ3JhbSBuYW1lIG1hbmFnZW1lbnQuCisgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMywgMjAwNS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4sIDIwMDEuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyN1bmRlZiBFTkFCTEVfUkVMT0NBVEFCTEUgLyogYXZvaWQgZGVmaW5pbmcgc2V0X3Byb2dyYW1fbmFtZSBhcyBhIG1hY3JvICovCisjaW5jbHVkZSAicHJvZ25hbWUuaCIKKworI2luY2x1ZGUgPGVycm5vLmg+IC8qIGdldCBwcm9ncmFtX2ludm9jYXRpb25fbmFtZSBkZWNsYXJhdGlvbiAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKworLyogU3RyaW5nIGNvbnRhaW5pbmcgbmFtZSB0aGUgcHJvZ3JhbSBpcyBjYWxsZWQgd2l0aC4KKyAgIFRvIGJlIGluaXRpYWxpemVkIGJ5IG1haW4oKS4gICovCitjb25zdCBjaGFyICpwcm9ncmFtX25hbWUgPSBOVUxMOworCisvKiBTZXQgcHJvZ3JhbV9uYW1lLCBiYXNlZCBvbiBhcmd2WzBdLgorICAgYXJndjAgbXVzdCBiZSBhIHN0cmluZyBhbGxvY2F0ZWQgd2l0aCBpbmRlZmluaXRlIGV4dGVudCwgYW5kIG11c3Qgbm90IGJlCisgICBtb2RpZmllZCBhZnRlciB0aGlzIGNhbGwuICAqLwordm9pZAorc2V0X3Byb2dyYW1fbmFtZSAoY29uc3QgY2hhciAqYXJndjApCit7CisgIC8qIGxpYnRvb2wgY3JlYXRlcyBhIHRlbXBvcmFyeSBleGVjdXRhYmxlIHdob3NlIG5hbWUgaXMgc29tZXRpbWVzIHByZWZpeGVkCisgICAgIHdpdGggImx0LSIgKGRlcGVuZHMgb24gdGhlIHBsYXRmb3JtKS4gIEl0IGFsc28gbWFrZXMgYXJndlswXSBhYnNvbHV0ZS4KKyAgICAgQnV0IHRoZSBuYW1lIG9mIHRoZSB0ZW1wb3JhcnkgZXhlY3V0YWJsZSBpcyBhIGRldGFpbCB0aGF0IHNob3VsZCBub3QgYmUKKyAgICAgdmlzaWJsZSB0byB0aGUgZW5kIHVzZXIgYW5kIHRvIHRoZSB0ZXN0IHN1aXRlLgorICAgICBSZW1vdmUgdGhpcyAiPGRpcm5hbWU+Ly5saWJzLyIgb3IgIjxkaXJuYW1lPi8ubGlicy9sdC0iIHByZWZpeCBoZXJlLiAgKi8KKyAgY29uc3QgY2hhciAqc2xhc2g7CisgIGNvbnN0IGNoYXIgKmJhc2U7CisKKyAgLyogU2FuaXR5IGNoZWNrLiAgUE9TSVggcmVxdWlyZXMgdGhlIGludm9raW5nIHByb2Nlc3MgdG8gcGFzcyBhIG5vbi1OVUxMCisgICAgIGFyZ3ZbMF0uICAqLworICBpZiAoYXJndjAgPT0gTlVMTCkKKyAgICB7CisgICAgICAvKiBJdCdzIGEgYnVnIGluIHRoZSBpbnZva2luZyBwcm9ncmFtLiAgSGVscCBkaWFnbm9zaW5nIGl0LiAgKi8KKyAgICAgIGZwdXRzICgiQSBOVUxMIGFyZ3ZbMF0gd2FzIHBhc3NlZCB0aHJvdWdoIGFuIGV4ZWMgc3lzdGVtIGNhbGwuXG4iLAorICAgICAgICAgICAgIHN0ZGVycik7CisgICAgICBhYm9ydCAoKTsKKyAgICB9CisKKyAgc2xhc2ggPSBzdHJyY2hyIChhcmd2MCwgJy8nKTsKKyAgYmFzZSA9IChzbGFzaCAhPSBOVUxMID8gc2xhc2ggKyAxIDogYXJndjApOworICBpZiAoYmFzZSAtIGFyZ3YwID49IDcgJiYgc3RybmNtcCAoYmFzZSAtIDcsICIvLmxpYnMvIiwgNykgPT0gMCkKKyAgICB7CisgICAgICBhcmd2MCA9IGJhc2U7CisgICAgICBpZiAoc3RybmNtcCAoYmFzZSwgImx0LSIsIDMpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBhcmd2MCA9IGJhc2UgKyAzOworICAgICAgICAgIC8qIE9uIGdsaWJjIHN5c3RlbXMsIHJlbW92ZSB0aGUgImx0LSIgcHJlZml4IGZyb20gdGhlIHZhcmlhYmxlCisgICAgICAgICAgICAgcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWUuICAqLworI2lmIEhBVkVfREVDTF9QUk9HUkFNX0lOVk9DQVRJT05fU0hPUlRfTkFNRQorICAgICAgICAgIHByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lID0gKGNoYXIgKikgYXJndjA7CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KKworICAvKiBCdXQgZG9uJ3Qgc3RyaXAgb2ZmIGEgbGVhZGluZyA8ZGlybmFtZT4vIGluIGdlbmVyYWwsIGJlY2F1c2Ugd2hlbiB0aGUgdXNlcgorICAgICBydW5zCisgICAgICAgICAvc29tZS9oaWRkZW4vcGxhY2UvYmluL2NwIGZvbyBmb28KKyAgICAgaGUgc2hvdWxkIGdldCB0aGUgZXJyb3IgbWVzc2FnZQorICAgICAgICAgL3NvbWUvaGlkZGVuL3BsYWNlL2Jpbi9jcDogYGZvbycgYW5kIGBmb28nIGFyZSB0aGUgc2FtZSBmaWxlCisgICAgIG5vdAorICAgICAgICAgY3A6IGBmb28nIGFuZCBgZm9vJyBhcmUgdGhlIHNhbWUgZmlsZQorICAgKi8KKworICBwcm9ncmFtX25hbWUgPSBhcmd2MDsKKworICAvKiBPbiBnbGliYyBzeXN0ZW1zLCB0aGUgZXJyb3IoKSBmdW5jdGlvbiBjb21lcyBmcm9tIGxpYmMgYW5kIHVzZXMgdGhlCisgICAgIHZhcmlhYmxlIHByb2dyYW1faW52b2NhdGlvbl9uYW1lLCBub3QgcHJvZ3JhbV9uYW1lLiAgU28gc2V0IHRoaXMgdmFyaWFibGUKKyAgICAgYXMgd2VsbC4gICovCisjaWYgSEFWRV9ERUNMX1BST0dSQU1fSU5WT0NBVElPTl9OQU1FCisgIHByb2dyYW1faW52b2NhdGlvbl9uYW1lID0gKGNoYXIgKikgYXJndjA7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2xpYi9wcm9nbmFtZS5oIGIvbGliL3Byb2duYW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc1YTAyZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9wcm9nbmFtZS5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qIFByb2dyYW0gbmFtZSBtYW5hZ2VtZW50LgorICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQsIDIwMDYsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LCAyMDAxLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIF9QUk9HTkFNRV9ICisjZGVmaW5lIF9QUk9HTkFNRV9ICisKKy8qIFByb2dyYW1zIHVzaW5nIHRoaXMgZmlsZSBzaG91bGQgZG8gdGhlIGZvbGxvd2luZyBpbiBtYWluKCk6CisgICAgIHNldF9wcm9ncmFtX25hbWUgKGFyZ3ZbMF0pOworICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKKy8qIFN0cmluZyBjb250YWluaW5nIG5hbWUgdGhlIHByb2dyYW0gaXMgY2FsbGVkIHdpdGguICAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKnByb2dyYW1fbmFtZTsKKworLyogU2V0IHByb2dyYW1fbmFtZSwgYmFzZWQgb24gYXJndlswXS4KKyAgIGFyZ3YwIG11c3QgYmUgYSBzdHJpbmcgYWxsb2NhdGVkIHdpdGggaW5kZWZpbml0ZSBleHRlbnQsIGFuZCBtdXN0IG5vdCBiZQorICAgbW9kaWZpZWQgYWZ0ZXIgdGhpcyBjYWxsLiAgKi8KK2V4dGVybiB2b2lkIHNldF9wcm9ncmFtX25hbWUgKGNvbnN0IGNoYXIgKmFyZ3YwKTsKKworI2lmIEVOQUJMRV9SRUxPQ0FUQUJMRQorCisvKiBTZXQgcHJvZ3JhbV9uYW1lLCBiYXNlZCBvbiBhcmd2WzBdLCBhbmQgb3JpZ2luYWwgaW5zdGFsbGF0aW9uIHByZWZpeCBhbmQKKyAgIGRpcmVjdG9yeSwgZm9yIHJlbG9jYXRhYmlsaXR5LiAgKi8KK2V4dGVybiB2b2lkIHNldF9wcm9ncmFtX25hbWVfYW5kX2luc3RhbGxkaXIgKGNvbnN0IGNoYXIgKmFyZ3YwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb3JpZ19pbnN0YWxscHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb3JpZ19pbnN0YWxsZGlyKTsKKyN1bmRlZiBzZXRfcHJvZ3JhbV9uYW1lCisjZGVmaW5lIHNldF9wcm9ncmFtX25hbWUoQVJHMCkgXAorICBzZXRfcHJvZ3JhbV9uYW1lX2FuZF9pbnN0YWxsZGlyIChBUkcwLCBJTlNUQUxMUFJFRklYLCBJTlNUQUxMRElSKQorCisvKiBSZXR1cm4gdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGN1cnJlbnQgZXhlY3V0YWJsZSwgYmFzZWQgb24gdGhlIGVhcmxpZXIKKyAgIGNhbGwgdG8gc2V0X3Byb2dyYW1fbmFtZV9hbmRfaW5zdGFsbGRpci4gIFJldHVybiBOVUxMIGlmIHVua25vd24uICAqLworZXh0ZXJuIGNoYXIgKmdldF9mdWxsX3Byb2dyYW1fbmFtZSAodm9pZCk7CisKKyNlbmRpZgorCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKworI2VuZGlmIC8qIF9QUk9HTkFNRV9IICovCmRpZmYgLS1naXQgYS9saWIvcXVvdGUuYyBiL2xpYi9xdW90ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmNjOTM5Li4wMDAwMDAwCi0tLSBhL2xpYi9xdW90ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyogcXVvdGUuYyAtIHF1b3RlIGFyZ3VtZW50cyBmb3Igb3V0cHV0Ci0gICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwotCi0vKiBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0IDxlZ2dlcnRAdHdpbnN1bi5jb20+ICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlICJxdW90ZWFyZy5oIgotI2luY2x1ZGUgInF1b3RlLmgiCi0KLS8qIFJldHVybiBhbiB1bmFtYmlndW91cyBwcmludGFibGUgcmVwcmVzZW50YXRpb24gb2YgTkFNRSwKLSAgIGFsbG9jYXRlZCBpbiBzbG90IE4sIHN1aXRhYmxlIGZvciBkaWFnbm9zdGljcy4gICovCi1jaGFyIGNvbnN0ICoKLXF1b3RlX24gKGludCBuLCBjaGFyIGNvbnN0ICpuYW1lKQotewotICByZXR1cm4gcXVvdGVhcmdfbl9zdHlsZSAobiwgbG9jYWxlX3F1b3Rpbmdfc3R5bGUsIG5hbWUpOwotfQotCi0vKiBSZXR1cm4gYW4gdW5hbWJpZ3VvdXMgcHJpbnRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIE5BTUUsCi0gICBzdWl0YWJsZSBmb3IgZGlhZ25vc3RpY3MuICAqLwotY2hhciBjb25zdCAqCi1xdW90ZSAoY2hhciBjb25zdCAqbmFtZSkKLXsKLSAgcmV0dXJuIHF1b3RlX24gKDAsIG5hbWUpOwotfQpkaWZmIC0tZ2l0IGEvbGliL3F1b3RlLmggYi9saWIvcXVvdGUuaAppbmRleCA1NDAwZWFkLi5lM2IzMzJkIDEwMDY0NAotLS0gYS9saWIvcXVvdGUuaAorKysgYi9saWIvcXVvdGUuaApAQCAtMSwxMiArMSwxMSBAQAogLyogcXVvdGUuaCAtIHByb3RvdHlwZXMgZm9yIHF1b3RlLmMKIAotICAgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUKLSAgIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMTk5OC0yMDAxLCAyMDAzLCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKQEAgLTE0LDkgKzEzLDM0IEBACiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAorI2lmbmRlZiBRVU9URV9IXworIyBkZWZpbmUgUVVPVEVfSF8gMQogCi1jaGFyIGNvbnN0ICpxdW90ZV9uIChpbnQgbiwgY2hhciBjb25zdCAqbmFtZSk7Ci1jaGFyIGNvbnN0ICpxdW90ZSAoY2hhciBjb25zdCAqbmFtZSk7CisjIGluY2x1ZGUgPHN0ZGRlZi5oPgorCisvKiBUaGUgcXVvdGluZyBvcHRpb25zIHVzZWQgYnkgcXVvdGVfbiBhbmQgcXVvdGUuICBJdHMgdHlwZSBpcyBpbmNvbXBsZXRlLAorICAgc28gaXQncyB1c2VmdWwgb25seSBpbiBleHByZXNzaW9ucyBsaWtlICcmcXVvdGVfcXVvdGluZ19vcHRpb25zJy4gICovCitleHRlcm4gc3RydWN0IHF1b3Rpbmdfb3B0aW9ucyBxdW90ZV9xdW90aW5nX29wdGlvbnM7CisKKy8qIFJldHVybiBhbiB1bmFtYmlndW91cyBwcmludGFibGUgcmVwcmVzZW50YXRpb24gb2YgQVJHIChvZiBzaXplCisgICBBUkdTSVpFKSwgYWxsb2NhdGVkIGluIHNsb3QgTiwgc3VpdGFibGUgZm9yIGRpYWdub3N0aWNzLiAgSWYKKyAgIEFSR1NJWkUgaXMgU0laRV9NQVgsIHVzZSB0aGUgc3RyaW5nIGxlbmd0aCBvZiB0aGUgYXJndW1lbnQgZm9yCisgICBBUkdTSVpFLiAgKi8KK2NoYXIgY29uc3QgKnF1b3RlX25fbWVtIChpbnQgbiwgY2hhciBjb25zdCAqYXJnLCBzaXplX3QgYXJnc2l6ZSk7CisKKy8qIFJldHVybiBhbiB1bmFtYmlndW91cyBwcmludGFibGUgcmVwcmVzZW50YXRpb24gb2YgQVJHIChvZiBzaXplCisgICBBUkdTSVpFKSwgc3VpdGFibGUgZm9yIGRpYWdub3N0aWNzLiAgSWYgQVJHU0laRSBpcyBTSVpFX01BWCwgdXNlCisgICB0aGUgc3RyaW5nIGxlbmd0aCBvZiB0aGUgYXJndW1lbnQgZm9yIEFSR1NJWkUuICAqLworY2hhciBjb25zdCAqcXVvdGVfbWVtIChjaGFyIGNvbnN0ICphcmcsIHNpemVfdCBhcmdzaXplKTsKKworLyogUmV0dXJuIGFuIHVuYW1iaWd1b3VzIHByaW50YWJsZSByZXByZXNlbnRhdGlvbiBvZiBBUkcsIGFsbG9jYXRlZCBpbgorICAgc2xvdCBOLCBzdWl0YWJsZSBmb3IgZGlhZ25vc3RpY3MuICAqLworY2hhciBjb25zdCAqcXVvdGVfbiAoaW50IG4sIGNoYXIgY29uc3QgKmFyZyk7CisKKy8qIFJldHVybiBhbiB1bmFtYmlndW91cyBwcmludGFibGUgcmVwcmVzZW50YXRpb24gb2YgQVJHLCBzdWl0YWJsZSBmb3IKKyAgIGRpYWdub3N0aWNzLiAgKi8KK2NoYXIgY29uc3QgKnF1b3RlIChjaGFyIGNvbnN0ICphcmcpOworCisjZW5kaWYgLyogIVFVT1RFX0hfICovCmRpZmYgLS1naXQgYS9saWIvcXVvdGVhcmcuYyBiL2xpYi9xdW90ZWFyZy5jCmluZGV4IDExMzIzOWYuLjdmYjg2NmQgMTAwNjQ0Ci0tLSBhL2xpYi9xdW90ZWFyZy5jCisrKyBiL2xpYi9xdW90ZWFyZy5jCkBAIC0xLDEyICsxLDExIEBACiAvKiBxdW90ZWFyZy5jIC0gcXVvdGUgYXJndW1lbnRzIGZvciBvdXRwdXQKIAotICAgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUKLSAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMTk5OC0yMDAyLCAyMDA0LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKQEAgLTE0LDE4ICsxMywyNSBAQAogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKIC8qIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQgPGVnZ2VydEB0d2luc3VuLmNvbT4gKi8KIAotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXaXRob3V0IHRoaXMgcHJhZ21hLCBnY2MgNC43LjAgMjAxMTExMjQgbWlzdGFrZW5seSBzdWdnZXN0cyB0aGF0CisgICB0aGUgcXVvdGluZ19vcHRpb25zX2Zyb21fc3R5bGUgZnVuY3Rpb24gbWlnaHQgYmUgY2FuZGlkYXRlIGZvcgorICAgYXR0cmlidXRlICdwdXJlJyAgKi8KKyNpZiAoX19HTlVDX18gPT0gNCAmJiA2IDw9IF9fR05VQ19NSU5PUl9fKSB8fCA0IDwgX19HTlVDX18KKyMgcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3VnZ2VzdC1hdHRyaWJ1dGU9cHVyZSIKICNlbmRpZgogCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKICNpbmNsdWRlICJxdW90ZWFyZy5oIgorI2luY2x1ZGUgInF1b3RlLmgiCiAKICNpbmNsdWRlICJ4YWxsb2MuaCIKKyNpbmNsdWRlICJjLXN0cmNhc2VlcS5oIgorI2luY2x1ZGUgImxvY2FsY2hhcnNldC5oIgogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxlcnJuby5oPgpAQCAtMzMsNDQgKzM5LDEzIEBACiAjaW5jbHVkZSA8c3RkYm9vbC5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSA8d2N0eXBlLmg+CiAKICNpbmNsdWRlICJnZXR0ZXh0LmgiCiAjZGVmaW5lIF8obXNnaWQpIGdldHRleHQgKG1zZ2lkKQogI2RlZmluZSBOXyhtc2dpZCkgbXNnaWQKIAotI2lmIEhBVkVfV0NIQVJfSAotCi0vKiBCU0QvT1MgNC4xIHdjaGFyLmggcmVxdWlyZXMgRklMRSBhbmQgc3RydWN0IHRtIHRvIGJlIGRlY2xhcmVkLiAgKi8KLSMgaW5jbHVkZSA8c3RkaW8uaD4KLSMgaW5jbHVkZSA8dGltZS5oPgotCi0jIGluY2x1ZGUgPHdjaGFyLmg+Ci0jZW5kaWYKLQotI2lmICFIQVZFX01CUlRPV0MKLS8qIERpc2FibGUgbXVsdGlieXRlIHByb2Nlc3NpbmcgZW50aXJlbHkuICBTaW5jZSBNQl9DVVJfTUFYIGlzIDEsIHRoZQotICAgb3RoZXIgbWFjcm9zIGFyZSBkZWZpbmVkIG9ubHkgZm9yIGRvY3VtZW50YXRpb24gYW5kIHRvIHNhdGlzZnkgQwotICAgc3ludGF4LiAgKi8KLSMgdW5kZWYgTUJfQ1VSX01BWAotIyBkZWZpbmUgTUJfQ1VSX01BWCAxCi0jIGRlZmluZSBtYnJ0b3djKHB3YywgcywgbiwgcHMpICgoKihwd2MpID0gKihzKSkgIT0gMCkKLSMgZGVmaW5lIGlzd3ByaW50KHdjKSBpc3ByaW50ICgodW5zaWduZWQgY2hhcikgKHdjKSkKLSMgdW5kZWYgSEFWRV9NQlNJTklUCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkIG1ic2luaXQgJiYgIUhBVkVfTUJTSU5JVAotIyBkZWZpbmUgbWJzaW5pdChwcykgMQotI2VuZGlmCi0KLSNpZm5kZWYgaXN3cHJpbnQKLSMgaWYgSEFWRV9XQ1RZUEVfSAotIyAgaW5jbHVkZSA8d2N0eXBlLmg+Ci0jIGVuZGlmCi0jIGlmICFkZWZpbmVkIGlzd3ByaW50ICYmICFIQVZFX0lTV1BSSU5UCi0jICBkZWZpbmUgaXN3cHJpbnQod2MpIDEKLSMgZW5kaWYKLSNlbmRpZgotCiAjaWZuZGVmIFNJWkVfTUFYCiAjIGRlZmluZSBTSVpFX01BWCAoKHNpemVfdCkgLTEpCiAjZW5kaWYKQEAgLTgyLDkgKzU3LDE4IEBACiAgIC8qIEJhc2ljIHF1b3Rpbmcgc3R5bGUuICAqLwogICBlbnVtIHF1b3Rpbmdfc3R5bGUgc3R5bGU7CiAKKyAgLyogQWRkaXRpb25hbCBmbGFncy4gIEJpdHdpc2UgY29tYmluYXRpb24gb2YgZW51bSBxdW90aW5nX2ZsYWdzLiAgKi8KKyAgaW50IGZsYWdzOworCiAgIC8qIFF1b3RlIHRoZSBjaGFyYWN0ZXJzIGluZGljYXRlZCBieSB0aGlzIGJpdCB2ZWN0b3IgZXZlbiBpZiB0aGUKICAgICAgcXVvdGluZyBzdHlsZSB3b3VsZCBub3Qgbm9ybWFsbHkgcmVxdWlyZSB0aGVtIHRvIGJlIHF1b3RlZC4gICovCiAgIHVuc2lnbmVkIGludCBxdW90ZV90aGVzZV90b29bKFVDSEFSX01BWCAvIElOVF9CSVRTKSArIDFdOworCisgIC8qIFRoZSBsZWZ0IHF1b3RlIGZvciBjdXN0b21fcXVvdGluZ19zdHlsZS4gICovCisgIGNoYXIgY29uc3QgKmxlZnRfcXVvdGU7CisKKyAgLyogVGhlIHJpZ2h0IHF1b3RlIGZvciBjdXN0b21fcXVvdGluZ19zdHlsZS4gICovCisgIGNoYXIgY29uc3QgKnJpZ2h0X3F1b3RlOwogfTsKIAogLyogTmFtZXMgb2YgcXVvdGluZyBzdHlsZXMuICAqLwpAQCAtOTQsNiArNzgsNyBAQAogICAic2hlbGwiLAogICAic2hlbGwtYWx3YXlzIiwKICAgImMiLAorICAiYy1tYXliZSIsCiAgICJlc2NhcGUiLAogICAibG9jYWxlIiwKICAgImNsb2NhbGUiLApAQCAtMTA3LDYgKzkyLDcgQEAKICAgc2hlbGxfcXVvdGluZ19zdHlsZSwKICAgc2hlbGxfYWx3YXlzX3F1b3Rpbmdfc3R5bGUsCiAgIGNfcXVvdGluZ19zdHlsZSwKKyAgY19tYXliZV9xdW90aW5nX3N0eWxlLAogICBlc2NhcGVfcXVvdGluZ19zdHlsZSwKICAgbG9jYWxlX3F1b3Rpbmdfc3R5bGUsCiAgIGNsb2NhbGVfcXVvdGluZ19zdHlsZQpAQCAtMTIyLDggKzEwOCw4IEBACiBjbG9uZV9xdW90aW5nX29wdGlvbnMgKHN0cnVjdCBxdW90aW5nX29wdGlvbnMgKm8pCiB7CiAgIGludCBlID0gZXJybm87Ci0gIHN0cnVjdCBxdW90aW5nX29wdGlvbnMgKnAgPSB4bWFsbG9jIChzaXplb2YgKnApOwotICAqcCA9ICoobyA/IG8gOiAmZGVmYXVsdF9xdW90aW5nX29wdGlvbnMpOworICBzdHJ1Y3QgcXVvdGluZ19vcHRpb25zICpwID0geG1lbWR1cCAobyA/IG8gOiAmZGVmYXVsdF9xdW90aW5nX29wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKm8pOwogICBlcnJubyA9IGU7CiAgIHJldHVybiBwOwogfQpAQCAtMTYwLDIwICsxNDYsODggQEAKICAgcmV0dXJuIHI7CiB9CiAKKy8qIEluIE8gKG9yIGluIHRoZSBkZWZhdWx0IGlmIE8gaXMgbnVsbCksCisgICBzZXQgdGhlIHZhbHVlIG9mIHRoZSBxdW90aW5nIG9wdGlvbnMgZmxhZyB0byBJLCB3aGljaCBjYW4gYmUgYQorICAgYml0d2lzZSBjb21iaW5hdGlvbiBvZiBlbnVtIHF1b3RpbmdfZmxhZ3MsIG9yIDAgZm9yIGRlZmF1bHQKKyAgIGJlaGF2aW9yLiAgUmV0dXJuIHRoZSBvbGQgdmFsdWUuICAqLworaW50CitzZXRfcXVvdGluZ19mbGFncyAoc3RydWN0IHF1b3Rpbmdfb3B0aW9ucyAqbywgaW50IGkpCit7CisgIGludCByOworICBpZiAoIW8pCisgICAgbyA9ICZkZWZhdWx0X3F1b3Rpbmdfb3B0aW9uczsKKyAgciA9IG8tPmZsYWdzOworICBvLT5mbGFncyA9IGk7CisgIHJldHVybiByOworfQorCit2b2lkCitzZXRfY3VzdG9tX3F1b3RpbmcgKHN0cnVjdCBxdW90aW5nX29wdGlvbnMgKm8sCisgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKmxlZnRfcXVvdGUsIGNoYXIgY29uc3QgKnJpZ2h0X3F1b3RlKQoreworICBpZiAoIW8pCisgICAgbyA9ICZkZWZhdWx0X3F1b3Rpbmdfb3B0aW9uczsKKyAgby0+c3R5bGUgPSBjdXN0b21fcXVvdGluZ19zdHlsZTsKKyAgaWYgKCFsZWZ0X3F1b3RlIHx8ICFyaWdodF9xdW90ZSkKKyAgICBhYm9ydCAoKTsKKyAgby0+bGVmdF9xdW90ZSA9IGxlZnRfcXVvdGU7CisgIG8tPnJpZ2h0X3F1b3RlID0gcmlnaHRfcXVvdGU7Cit9CisKKy8qIFJldHVybiBxdW90aW5nIG9wdGlvbnMgZm9yIFNUWUxFLCB3aXRoIG5vIGV4dHJhIHF1b3RpbmcuICAqLworc3RhdGljIHN0cnVjdCBxdW90aW5nX29wdGlvbnMgLyogTk9UIFBVUkUhISAqLworcXVvdGluZ19vcHRpb25zX2Zyb21fc3R5bGUgKGVudW0gcXVvdGluZ19zdHlsZSBzdHlsZSkKK3sKKyAgc3RydWN0IHF1b3Rpbmdfb3B0aW9ucyBvID0geyAwLCAwLCB7IDAgfSwgTlVMTCwgTlVMTCB9OworICBpZiAoc3R5bGUgPT0gY3VzdG9tX3F1b3Rpbmdfc3R5bGUpCisgICAgYWJvcnQgKCk7CisgIG8uc3R5bGUgPSBzdHlsZTsKKyAgcmV0dXJuIG87Cit9CisKIC8qIE1TR0lEIGFwcHJveGltYXRlcyBhIHF1b3RhdGlvbiBtYXJrLiAgUmV0dXJuIGl0cyB0cmFuc2xhdGlvbiBpZiBpdAotICAgaGFzIG9uZTsgb3RoZXJ3aXNlLCByZXR1cm4gZWl0aGVyIGl0IG9yICJcIiIsIGRlcGVuZGluZyBvbiBTLiAgKi8KKyAgIGhhcyBvbmU7IG90aGVyd2lzZSwgcmV0dXJuIGVpdGhlciBpdCBvciAiXCIiLCBkZXBlbmRpbmcgb24gUy4KKworICAgUyBpcyBlaXRoZXIgY2xvY2FsZV9xdW90aW5nX3N0eWxlIG9yIGxvY2FsZV9xdW90aW5nX3N0eWxlLiAgKi8KIHN0YXRpYyBjaGFyIGNvbnN0ICoKIGdldHRleHRfcXVvdGUgKGNoYXIgY29uc3QgKm1zZ2lkLCBlbnVtIHF1b3Rpbmdfc3R5bGUgcykKIHsKICAgY2hhciBjb25zdCAqdHJhbnNsYXRpb24gPSBfKG1zZ2lkKTsKLSAgaWYgKHRyYW5zbGF0aW9uID09IG1zZ2lkICYmIHMgPT0gY2xvY2FsZV9xdW90aW5nX3N0eWxlKQotICAgIHRyYW5zbGF0aW9uID0gIlwiIjsKLSAgcmV0dXJuIHRyYW5zbGF0aW9uOworICBjaGFyIGNvbnN0ICpsb2NhbGVfY29kZTsKKworICBpZiAodHJhbnNsYXRpb24gIT0gbXNnaWQpCisgICAgcmV0dXJuIHRyYW5zbGF0aW9uOworCisgIC8qIEZvciBVVEYtOCBhbmQgR0ItMTgwMzAsIHVzZSBzaW5nbGUgcXVvdGVzIFUrMjAxOCBhbmQgVSsyMDE5LgorICAgICBIZXJlIGlzIGEgbGlzdCBvZiBvdGhlciBsb2NhbGVzIHRoYXQgaW5jbHVkZSBVKzIwMTggYW5kIFUrMjAxOToKKworICAgICAgICBJU08tODg1OS03ICAgMHhBMSAgICAgICAgICAgICAgICAgS09JOC1UICAgICAgIDB4OTEKKyAgICAgICAgQ1A4NjkgICAgICAgIDB4OEIgICAgICAgICAgICAgICAgIENQODc0ICAgICAgICAweDkxCisgICAgICAgIENQOTMyICAgICAgICAweDgxIDB4NjUgICAgICAgICAgICBDUDkzNiAgICAgICAgMHhBMSAweEFFCisgICAgICAgIENQOTQ5ICAgICAgICAweEExIDB4QUUgICAgICAgICAgICBDUDk1MCAgICAgICAgMHhBMSAweEE1CisgICAgICAgIENQMTI1MCAgICAgICAweDkxICAgICAgICAgICAgICAgICBDUDEyNTEgICAgICAgMHg5MQorICAgICAgICBDUDEyNTIgICAgICAgMHg5MSAgICAgICAgICAgICAgICAgQ1AxMjUzICAgICAgIDB4OTEKKyAgICAgICAgQ1AxMjU0ICAgICAgIDB4OTEgICAgICAgICAgICAgICAgIENQMTI1NSAgICAgICAweDkxCisgICAgICAgIENQMTI1NiAgICAgICAweDkxICAgICAgICAgICAgICAgICBDUDEyNTcgICAgICAgMHg5MQorICAgICAgICBFVUMtSlAgICAgICAgMHhBMSAweEM2ICAgICAgICAgICAgRVVDLUtSICAgICAgIDB4QTEgMHhBRQorICAgICAgICBFVUMtVFcgICAgICAgMHhBMSAweEU0ICAgICAgICAgICAgQklHNSAgICAgICAgIDB4QTEgMHhBNQorICAgICAgICBCSUc1LUhLU0NTICAgMHhBMSAweEE1ICAgICAgICAgICAgRVVDLUNOICAgICAgIDB4QTEgMHhBRQorICAgICAgICBHQksgICAgICAgICAgMHhBMSAweEFFICAgICAgICAgICAgR2VvcmdpYW4tUFMgIDB4OTEKKyAgICAgICAgUFQxNTQgICAgICAgIDB4OTEKKworICAgICBOb25lIG9mIHRoZXNlIGlzIHN0aWxsIGluIHdpZGUgdXNlOyB1c2luZyBpY29udiBpcyBvdmVya2lsbC4gICovCisgIGxvY2FsZV9jb2RlID0gbG9jYWxlX2NoYXJzZXQgKCk7CisgIGlmIChTVFJDQVNFRVEgKGxvY2FsZV9jb2RlLCAiVVRGLTgiLCAnVScsJ1QnLCdGJywnLScsJzgnLDAsMCwwLDApKQorICAgIHJldHVybiBtc2dpZFswXSA9PSAnYCcgPyAiXHhlMlx4ODBceDk4IjogIlx4ZTJceDgwXHg5OSI7CisgIGlmIChTVFJDQVNFRVEgKGxvY2FsZV9jb2RlLCAiR0IxODAzMCIsICdHJywnQicsJzEnLCc4JywnMCcsJzMnLCcwJywwLDApKQorICAgIHJldHVybiBtc2dpZFswXSA9PSAnYCcgPyAiXHhhMVxhZSI6ICJceGExXHhhZiI7CisKKyAgcmV0dXJuIChzID09IGNsb2NhbGVfcXVvdGluZ19zdHlsZSA/ICJcIiIgOiAiJyIpOwogfQogCiAvKiBQbGFjZSBpbnRvIGJ1ZmZlciBCVUZGRVIgKG9mIHNpemUgQlVGRkVSU0laRSkgYSBxdW90ZWQgdmVyc2lvbiBvZgotICAgYXJndW1lbnQgQVJHIChvZiBzaXplIEFSR1NJWkUpLCB1c2luZyBRVU9USU5HX1NUWUxFIGFuZCB0aGUKLSAgIG5vbi1xdW90aW5nLXN0eWxlIHBhcnQgb2YgTyB0byBjb250cm9sIHF1b3RpbmcuCisgICBhcmd1bWVudCBBUkcgKG9mIHNpemUgQVJHU0laRSksIHVzaW5nIFFVT1RJTkdfU1RZTEUsIEZMQUdTLCBhbmQKKyAgIFFVT1RFX1RIRVNFX1RPTyB0byBjb250cm9sIHF1b3RpbmcuCiAgICBUZXJtaW5hdGUgdGhlIG91dHB1dCB3aXRoIGEgbnVsbCBjaGFyYWN0ZXIsIGFuZCByZXR1cm4gdGhlIHdyaXR0ZW4KICAgIHNpemUgb2YgdGhlIG91dHB1dCwgbm90IGNvdW50aW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsLgogICAgSWYgQlVGRkVSU0laRSBpcyB0b28gc21hbGwgdG8gc3RvcmUgdGhlIG91dHB1dCBzdHJpbmcsIHJldHVybiB0aGUKQEAgLTE4MSwxNCArMjM1LDE2IEBACiAgICBJZiBBUkdTSVpFIGlzIFNJWkVfTUFYLCB1c2UgdGhlIHN0cmluZyBsZW5ndGggb2YgdGhlIGFyZ3VtZW50IGZvciBBUkdTSVpFLgogCiAgICBUaGlzIGZ1bmN0aW9uIGFjdHMgbGlrZSBxdW90ZWFyZ19idWZmZXIgKEJVRkZFUiwgQlVGRkVSU0laRSwgQVJHLAotICAgQVJHU0laRSwgTyksIGV4Y2VwdCBpdCB1c2VzIFFVT1RJTkdfU1RZTEUgaW5zdGVhZCBvZiB0aGUgcXVvdGluZwotICAgc3R5bGUgc3BlY2lmaWVkIGJ5IE8sIGFuZCBPIG1heSBub3QgYmUgbnVsbC4gICovCisgICBBUkdTSVpFLCBPKSwgZXhjZXB0IGl0IGJyZWFrcyBPIGludG8gaXRzIGNvbXBvbmVudCBwaWVjZXMgYW5kIGlzCisgICBub3QgY2FyZWZ1bCBhYm91dCBlcnJuby4gICovCiAKIHN0YXRpYyBzaXplX3QKIHF1b3RlYXJnX2J1ZmZlcl9yZXN0eWxlZCAoY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmZmVyc2l6ZSwKLQkJCSAgY2hhciBjb25zdCAqYXJnLCBzaXplX3QgYXJnc2l6ZSwKLQkJCSAgZW51bSBxdW90aW5nX3N0eWxlIHF1b3Rpbmdfc3R5bGUsCi0JCQkgIHN0cnVjdCBxdW90aW5nX29wdGlvbnMgY29uc3QgKm8pCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKmFyZywgc2l6ZV90IGFyZ3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcXVvdGluZ19zdHlsZSBxdW90aW5nX3N0eWxlLCBpbnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb25zdCAqcXVvdGVfdGhlc2VfdG9vLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICpsZWZ0X3F1b3RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICpyaWdodF9xdW90ZSkKIHsKICAgc2l6ZV90IGk7CiAgIHNpemVfdCBsZW4gPSAwOwpAQCAtMTk2LDIwICsyNTIsMjYgQEAKICAgc2l6ZV90IHF1b3RlX3N0cmluZ19sZW4gPSAwOwogICBib29sIGJhY2tzbGFzaF9lc2NhcGVzID0gZmFsc2U7CiAgIGJvb2wgdW5pYnl0ZV9sb2NhbGUgPSBNQl9DVVJfTUFYID09IDE7CisgIGJvb2wgZWxpZGVfb3V0ZXJfcXVvdGVzID0gKGZsYWdzICYgUUFfRUxJREVfT1VURVJfUVVPVEVTKSAhPSAwOwogCiAjZGVmaW5lIFNUT1JFKGMpIFwKICAgICBkbyBcCiAgICAgICB7IFwKLQlpZiAobGVuIDwgYnVmZmVyc2l6ZSkgXAotCSAgYnVmZmVyW2xlbl0gPSAoYyk7IFwKLQlsZW4rKzsgXAorICAgICAgICBpZiAobGVuIDwgYnVmZmVyc2l6ZSkgXAorICAgICAgICAgIGJ1ZmZlcltsZW5dID0gKGMpOyBcCisgICAgICAgIGxlbisrOyBcCiAgICAgICB9IFwKICAgICB3aGlsZSAoMCkKIAogICBzd2l0Y2ggKHF1b3Rpbmdfc3R5bGUpCiAgICAgeworICAgIGNhc2UgY19tYXliZV9xdW90aW5nX3N0eWxlOgorICAgICAgcXVvdGluZ19zdHlsZSA9IGNfcXVvdGluZ19zdHlsZTsKKyAgICAgIGVsaWRlX291dGVyX3F1b3RlcyA9IHRydWU7CisgICAgICAvKiBGYWxsIHRocm91Z2guICAqLwogICAgIGNhc2UgY19xdW90aW5nX3N0eWxlOgotICAgICAgU1RPUkUgKCciJyk7CisgICAgICBpZiAoIWVsaWRlX291dGVyX3F1b3RlcykKKyAgICAgICAgU1RPUkUgKCciJyk7CiAgICAgICBiYWNrc2xhc2hfZXNjYXBlcyA9IHRydWU7CiAgICAgICBxdW90ZV9zdHJpbmcgPSAiXCIiOwogICAgICAgcXVvdGVfc3RyaW5nX2xlbiA9IDE7CkBAIC0yMTcsMzAxICsyNzksMzY2IEBACiAKICAgICBjYXNlIGVzY2FwZV9xdW90aW5nX3N0eWxlOgogICAgICAgYmFja3NsYXNoX2VzY2FwZXMgPSB0cnVlOworICAgICAgZWxpZGVfb3V0ZXJfcXVvdGVzID0gZmFsc2U7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgbG9jYWxlX3F1b3Rpbmdfc3R5bGU6CiAgICAgY2FzZSBjbG9jYWxlX3F1b3Rpbmdfc3R5bGU6CisgICAgY2FzZSBjdXN0b21fcXVvdGluZ19zdHlsZToKICAgICAgIHsKLQkvKiBUUkFOU0xBVE9SUzoKLQkgICBHZXQgdHJhbnNsYXRpb25zIGZvciBvcGVuIGFuZCBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrcy4KKyAgICAgICAgaWYgKHF1b3Rpbmdfc3R5bGUgIT0gY3VzdG9tX3F1b3Rpbmdfc3R5bGUpCisgICAgICAgICAgeworICAgICAgICAgICAgLyogVFJBTlNMQVRPUlM6CisgICAgICAgICAgICAgICBHZXQgdHJhbnNsYXRpb25zIGZvciBvcGVuIGFuZCBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrcy4KKyAgICAgICAgICAgICAgIFRoZSBtZXNzYWdlIGNhdGFsb2cgc2hvdWxkIHRyYW5zbGF0ZSAiYCIgdG8gYSBsZWZ0CisgICAgICAgICAgICAgICBxdW90YXRpb24gbWFyayBzdWl0YWJsZSBmb3IgdGhlIGxvY2FsZSwgYW5kIHNpbWlsYXJseSBmb3IKKyAgICAgICAgICAgICAgICInIi4gIEZvciBleGFtcGxlLCBhIEZyZW5jaCBVbmljb2RlIGxvY2FsIHNob3VsZCB0cmFuc2xhdGUKKyAgICAgICAgICAgICAgIHRoZXNlIHRvIFUrMDBBQiAoTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUKKyAgICAgICAgICAgICAgIFFVT1RBVElPTiBNQVJLKSwgYW5kIFUrMDBCQiAoUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFCisgICAgICAgICAgICAgICBRVU9UQVRJT04gTUFSSyksIHJlc3BlY3RpdmVseS4KIAotCSAgIFRoZSBtZXNzYWdlIGNhdGFsb2cgc2hvdWxkIHRyYW5zbGF0ZSAiYCIgdG8gYSBsZWZ0Ci0JICAgcXVvdGF0aW9uIG1hcmsgc3VpdGFibGUgZm9yIHRoZSBsb2NhbGUsIGFuZCBzaW1pbGFybHkgZm9yCi0JICAgIiciLiAgSWYgdGhlIGNhdGFsb2cgaGFzIG5vIHRyYW5zbGF0aW9uLAotCSAgIGxvY2FsZV9xdW90aW5nX3N0eWxlIHF1b3RlcyBgbGlrZSB0aGlzJywgYW5kCi0JICAgY2xvY2FsZV9xdW90aW5nX3N0eWxlIHF1b3RlcyAibGlrZSB0aGlzIi4KKyAgICAgICAgICAgICAgIElmIHRoZSBjYXRhbG9nIGhhcyBubyB0cmFuc2xhdGlvbiwgd2Ugd2lsbCB0cnkgdG8KKyAgICAgICAgICAgICAgIHVzZSBVbmljb2RlIFUrMjAxOCAoTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspIGFuZAorICAgICAgICAgICAgICAgVW5pY29kZSBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykuICBJZiB0aGUKKyAgICAgICAgICAgICAgIGN1cnJlbnQgbG9jYWxlIGlzIG5vdCBVbmljb2RlLCBsb2NhbGVfcXVvdGluZ19zdHlsZQorICAgICAgICAgICAgICAgd2lsbCBxdW90ZSAnbGlrZSB0aGlzJywgYW5kIGNsb2NhbGVfcXVvdGluZ19zdHlsZSB3aWxsCisgICAgICAgICAgICAgICBxdW90ZSAibGlrZSB0aGlzIi4gIFlvdSBzaG91bGQgYWx3YXlzIGluY2x1ZGUgdHJhbnNsYXRpb25zCisgICAgICAgICAgICAgICBmb3IgImAiIGFuZCAiJyIgZXZlbiBpZiBVKzIwMTggYW5kIFUrMjAxOSBhcmUgYXBwcm9wcmlhdGUKKyAgICAgICAgICAgICAgIGZvciB5b3VyIGxvY2FsZS4KIAotCSAgIEZvciBleGFtcGxlLCBhbiBBbWVyaWNhbiBFbmdsaXNoIFVuaWNvZGUgbG9jYWxlIHNob3VsZAotCSAgIHRyYW5zbGF0ZSAiYCIgdG8gVSsyMDFDIChMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSSyksIGFuZAotCSAgIHNob3VsZCB0cmFuc2xhdGUgIiciIHRvIFUrMjAxRCAoUklHSFQgRE9VQkxFIFFVT1RBVElPTgotCSAgIE1BUkspLiAgQSBCcml0aXNoIEVuZ2xpc2ggVW5pY29kZSBsb2NhbGUgc2hvdWxkIGluc3RlYWQKLQkgICB0cmFuc2xhdGUgdGhlc2UgdG8gVSsyMDE4IChMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykgYW5kCi0JICAgVSsyMDE5IChSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspLCByZXNwZWN0aXZlbHkuCi0KLQkgICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCi0JICAgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUXVvdGF0aW9uX21hcmsjR2x5cGhzPgotCSAgIGFuZCB1c2UgZ2x5cGhzIHN1aXRhYmxlIGZvciB5b3VyIGxhbmd1YWdlLiAgKi8KLQotCWNoYXIgY29uc3QgKmxlZnQgPSBnZXR0ZXh0X3F1b3RlIChOXygiYCIpLCBxdW90aW5nX3N0eWxlKTsKLQljaGFyIGNvbnN0ICpyaWdodCA9IGdldHRleHRfcXVvdGUgKE5fKCInIiksIHF1b3Rpbmdfc3R5bGUpOwotCWZvciAocXVvdGVfc3RyaW5nID0gbGVmdDsgKnF1b3RlX3N0cmluZzsgcXVvdGVfc3RyaW5nKyspCi0JICBTVE9SRSAoKnF1b3RlX3N0cmluZyk7Ci0JYmFja3NsYXNoX2VzY2FwZXMgPSB0cnVlOwotCXF1b3RlX3N0cmluZyA9IHJpZ2h0OwotCXF1b3RlX3N0cmluZ19sZW4gPSBzdHJsZW4gKHF1b3RlX3N0cmluZyk7CisgICAgICAgICAgICAgICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisgICAgICAgICAgICAgICA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFya3NfaW5fb3RoZXJfbGFuZ3VhZ2VzPgorICAgICAgICAgICAgICAgYW5kIHVzZSBnbHlwaHMgc3VpdGFibGUgZm9yIHlvdXIgbGFuZ3VhZ2UuICAqLworICAgICAgICAgICAgbGVmdF9xdW90ZSA9IGdldHRleHRfcXVvdGUgKE5fKCJgIiksIHF1b3Rpbmdfc3R5bGUpOworICAgICAgICAgICAgcmlnaHRfcXVvdGUgPSBnZXR0ZXh0X3F1b3RlIChOXygiJyIpLCBxdW90aW5nX3N0eWxlKTsKKyAgICAgICAgICB9CisgICAgICAgIGlmICghZWxpZGVfb3V0ZXJfcXVvdGVzKQorICAgICAgICAgIGZvciAocXVvdGVfc3RyaW5nID0gbGVmdF9xdW90ZTsgKnF1b3RlX3N0cmluZzsgcXVvdGVfc3RyaW5nKyspCisgICAgICAgICAgICBTVE9SRSAoKnF1b3RlX3N0cmluZyk7CisgICAgICAgIGJhY2tzbGFzaF9lc2NhcGVzID0gdHJ1ZTsKKyAgICAgICAgcXVvdGVfc3RyaW5nID0gcmlnaHRfcXVvdGU7CisgICAgICAgIHF1b3RlX3N0cmluZ19sZW4gPSBzdHJsZW4gKHF1b3RlX3N0cmluZyk7CiAgICAgICB9CiAgICAgICBicmVhazsKIAorICAgIGNhc2Ugc2hlbGxfcXVvdGluZ19zdHlsZToKKyAgICAgIHF1b3Rpbmdfc3R5bGUgPSBzaGVsbF9hbHdheXNfcXVvdGluZ19zdHlsZTsKKyAgICAgIGVsaWRlX291dGVyX3F1b3RlcyA9IHRydWU7CisgICAgICAvKiBGYWxsIHRocm91Z2guICAqLwogICAgIGNhc2Ugc2hlbGxfYWx3YXlzX3F1b3Rpbmdfc3R5bGU6Ci0gICAgICBTVE9SRSAoJ1wnJyk7CisgICAgICBpZiAoIWVsaWRlX291dGVyX3F1b3RlcykKKyAgICAgICAgU1RPUkUgKCdcJycpOwogICAgICAgcXVvdGVfc3RyaW5nID0gIiciOwogICAgICAgcXVvdGVfc3RyaW5nX2xlbiA9IDE7CiAgICAgICBicmVhazsKIAotICAgIGRlZmF1bHQ6CisgICAgY2FzZSBsaXRlcmFsX3F1b3Rpbmdfc3R5bGU6CisgICAgICBlbGlkZV9vdXRlcl9xdW90ZXMgPSBmYWxzZTsKICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGFib3J0ICgpOwogICAgIH0KIAogICBmb3IgKGkgPSAwOyAgISAoYXJnc2l6ZSA9PSBTSVpFX01BWCA/IGFyZ1tpXSA9PSAnXDAnIDogaSA9PSBhcmdzaXplKTsgIGkrKykKICAgICB7CiAgICAgICB1bnNpZ25lZCBjaGFyIGM7CiAgICAgICB1bnNpZ25lZCBjaGFyIGVzYzsKKyAgICAgIGJvb2wgaXNfcmlnaHRfcXVvdGUgPSBmYWxzZTsKIAogICAgICAgaWYgKGJhY2tzbGFzaF9lc2NhcGVzCi0JICAmJiBxdW90ZV9zdHJpbmdfbGVuCi0JICAmJiBpICsgcXVvdGVfc3RyaW5nX2xlbiA8PSBhcmdzaXplCi0JICAmJiBtZW1jbXAgKGFyZyArIGksIHF1b3RlX3N0cmluZywgcXVvdGVfc3RyaW5nX2xlbikgPT0gMCkKLQlTVE9SRSAoJ1xcJyk7CisgICAgICAgICAgJiYgcXVvdGVfc3RyaW5nX2xlbgorICAgICAgICAgICYmIGkgKyBxdW90ZV9zdHJpbmdfbGVuIDw9IGFyZ3NpemUKKyAgICAgICAgICAmJiBtZW1jbXAgKGFyZyArIGksIHF1b3RlX3N0cmluZywgcXVvdGVfc3RyaW5nX2xlbikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChlbGlkZV9vdXRlcl9xdW90ZXMpCisgICAgICAgICAgICBnb3RvIGZvcmNlX291dGVyX3F1b3Rpbmdfc3R5bGU7CisgICAgICAgICAgaXNfcmlnaHRfcXVvdGUgPSB0cnVlOworICAgICAgICB9CiAKICAgICAgIGMgPSBhcmdbaV07CiAgICAgICBzd2l0Y2ggKGMpCi0JewotCWNhc2UgJ1wwJzoKLQkgIGlmIChiYWNrc2xhc2hfZXNjYXBlcykKLQkgICAgewotCSAgICAgIFNUT1JFICgnXFwnKTsKLQkgICAgICBTVE9SRSAoJzAnKTsKLQkgICAgICBTVE9SRSAoJzAnKTsKLQkgICAgICBjID0gJzAnOwotCSAgICB9Ci0JICBicmVhazsKKyAgICAgICAgeworICAgICAgICBjYXNlICdcMCc6CisgICAgICAgICAgaWYgKGJhY2tzbGFzaF9lc2NhcGVzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoZWxpZGVfb3V0ZXJfcXVvdGVzKQorICAgICAgICAgICAgICAgIGdvdG8gZm9yY2Vfb3V0ZXJfcXVvdGluZ19zdHlsZTsKKyAgICAgICAgICAgICAgU1RPUkUgKCdcXCcpOworICAgICAgICAgICAgICAvKiBJZiBxdW90ZV9zdHJpbmcgd2VyZSB0byBiZWdpbiB3aXRoIGRpZ2l0cywgd2UnZCBuZWVkIHRvCisgICAgICAgICAgICAgICAgIHRlc3QgZm9yIHRoZSBlbmQgb2YgdGhlIGFyZyBhcyB3ZWxsLiAgSG93ZXZlciwgaXQncworICAgICAgICAgICAgICAgICBoYXJkIHRvIGltYWdpbmUgYW55IGxvY2FsZSB0aGF0IHdvdWxkIHVzZSBkaWdpdHMgaW4KKyAgICAgICAgICAgICAgICAgcXVvdGVzLCBhbmQgc2V0X2N1c3RvbV9xdW90aW5nIGlzIGRvY3VtZW50ZWQgbm90IHRvCisgICAgICAgICAgICAgICAgIGFjY2VwdCB0aGVtLiAgKi8KKyAgICAgICAgICAgICAgaWYgKGkgKyAxIDwgYXJnc2l6ZSAmJiAnMCcgPD0gYXJnW2kgKyAxXSAmJiBhcmdbaSArIDFdIDw9ICc5JykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBTVE9SRSAoJzAnKTsKKyAgICAgICAgICAgICAgICAgIFNUT1JFICgnMCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgYyA9ICcwJzsKKyAgICAgICAgICAgICAgLyogV2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSB0aGF0IHRoaXMgbGFzdCAnMCcgd2lsbCBiZQorICAgICAgICAgICAgICAgICBiYWNrc2xhc2gtZXNjYXBlZCBiZWNhdXNlLCBhZ2FpbiwgcXVvdGVfc3RyaW5nIHNob3VsZAorICAgICAgICAgICAgICAgICBub3Qgc3RhcnQgd2l0aCBpdCBhbmQgYmVjYXVzZSBxdW90ZV90aGVzZV90b28gaXMKKyAgICAgICAgICAgICAgICAgZG9jdW1lbnRlZCBhcyBub3QgYWNjZXB0aW5nIGl0LiAgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChmbGFncyAmIFFBX0VMSURFX05VTExfQllURVMpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICBicmVhazsKIAotCWNhc2UgJz8nOgotCSAgc3dpdGNoIChxdW90aW5nX3N0eWxlKQotCSAgICB7Ci0JICAgIGNhc2Ugc2hlbGxfcXVvdGluZ19zdHlsZToKLQkgICAgICBnb3RvIHVzZV9zaGVsbF9hbHdheXNfcXVvdGluZ19zdHlsZTsKKyAgICAgICAgY2FzZSAnPyc6CisgICAgICAgICAgc3dpdGNoIChxdW90aW5nX3N0eWxlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSBzaGVsbF9hbHdheXNfcXVvdGluZ19zdHlsZToKKyAgICAgICAgICAgICAgaWYgKGVsaWRlX291dGVyX3F1b3RlcykKKyAgICAgICAgICAgICAgICBnb3RvIGZvcmNlX291dGVyX3F1b3Rpbmdfc3R5bGU7CisgICAgICAgICAgICAgIGJyZWFrOwogCi0JICAgIGNhc2UgY19xdW90aW5nX3N0eWxlOgotCSAgICAgIGlmIChpICsgMiA8IGFyZ3NpemUgJiYgYXJnW2kgKyAxXSA9PSAnPycpCi0JCXN3aXRjaCAoYXJnW2kgKyAyXSkKLQkJICB7Ci0JCSAgY2FzZSAnISc6IGNhc2UgJ1wnJzoKLQkJICBjYXNlICcoJzogY2FzZSAnKSc6IGNhc2UgJy0nOiBjYXNlICcvJzoKLQkJICBjYXNlICc8JzogY2FzZSAnPSc6IGNhc2UgJz4nOgotCQkgICAgLyogRXNjYXBlIHRoZSBzZWNvbmQgJz8nIGluIHdoYXQgd291bGQgb3RoZXJ3aXNlIGJlCi0JCSAgICAgICBhIHRyaWdyYXBoLiAgKi8KLQkJICAgIGMgPSBhcmdbaSArIDJdOwotCQkgICAgaSArPSAyOwotCQkgICAgU1RPUkUgKCc/Jyk7Ci0JCSAgICBTVE9SRSAoJ1xcJyk7Ci0JCSAgICBTVE9SRSAoJz8nKTsKLQkJICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBjX3F1b3Rpbmdfc3R5bGU6CisgICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBRQV9TUExJVF9UUklHUkFQSFMpCisgICAgICAgICAgICAgICAgICAmJiBpICsgMiA8IGFyZ3NpemUgJiYgYXJnW2kgKyAxXSA9PSAnPycpCisgICAgICAgICAgICAgICAgc3dpdGNoIChhcmdbaSArIDJdKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAnISc6IGNhc2UgJ1wnJzoKKyAgICAgICAgICAgICAgICAgIGNhc2UgJygnOiBjYXNlICcpJzogY2FzZSAnLSc6IGNhc2UgJy8nOgorICAgICAgICAgICAgICAgICAgY2FzZSAnPCc6IGNhc2UgJz0nOiBjYXNlICc+JzoKKyAgICAgICAgICAgICAgICAgICAgLyogRXNjYXBlIHRoZSBzZWNvbmQgJz8nIGluIHdoYXQgd291bGQgb3RoZXJ3aXNlIGJlCisgICAgICAgICAgICAgICAgICAgICAgIGEgdHJpZ3JhcGguICAqLworICAgICAgICAgICAgICAgICAgICBpZiAoZWxpZGVfb3V0ZXJfcXVvdGVzKQorICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZm9yY2Vfb3V0ZXJfcXVvdGluZ19zdHlsZTsKKyAgICAgICAgICAgICAgICAgICAgYyA9IGFyZ1tpICsgMl07CisgICAgICAgICAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgICAgICAgICAgICAgU1RPUkUgKCc/Jyk7CisgICAgICAgICAgICAgICAgICAgIFNUT1JFICgnIicpOworICAgICAgICAgICAgICAgICAgICBTVE9SRSAoJyInKTsKKyAgICAgICAgICAgICAgICAgICAgU1RPUkUgKCc/Jyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0JCSAgZGVmYXVsdDoKLQkJICAgIGJyZWFrOwotCQkgIH0KLQkgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBicmVhazsKIAotCSAgICBkZWZhdWx0OgotCSAgICAgIGJyZWFrOwotCSAgICB9Ci0JICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOwogCi0JY2FzZSAnXGEnOiBlc2MgPSAnYSc7IGdvdG8gY19lc2NhcGU7Ci0JY2FzZSAnXGInOiBlc2MgPSAnYic7IGdvdG8gY19lc2NhcGU7Ci0JY2FzZSAnXGYnOiBlc2MgPSAnZic7IGdvdG8gY19lc2NhcGU7Ci0JY2FzZSAnXG4nOiBlc2MgPSAnbic7IGdvdG8gY19hbmRfc2hlbGxfZXNjYXBlOwotCWNhc2UgJ1xyJzogZXNjID0gJ3InOyBnb3RvIGNfYW5kX3NoZWxsX2VzY2FwZTsKLQljYXNlICdcdCc6IGVzYyA9ICd0JzsgZ290byBjX2FuZF9zaGVsbF9lc2NhcGU7Ci0JY2FzZSAnXHYnOiBlc2MgPSAndic7IGdvdG8gY19lc2NhcGU7Ci0JY2FzZSAnXFwnOiBlc2MgPSBjOyBnb3RvIGNfYW5kX3NoZWxsX2VzY2FwZTsKKyAgICAgICAgY2FzZSAnXGEnOiBlc2MgPSAnYSc7IGdvdG8gY19lc2NhcGU7CisgICAgICAgIGNhc2UgJ1xiJzogZXNjID0gJ2InOyBnb3RvIGNfZXNjYXBlOworICAgICAgICBjYXNlICdcZic6IGVzYyA9ICdmJzsgZ290byBjX2VzY2FwZTsKKyAgICAgICAgY2FzZSAnXG4nOiBlc2MgPSAnbic7IGdvdG8gY19hbmRfc2hlbGxfZXNjYXBlOworICAgICAgICBjYXNlICdccic6IGVzYyA9ICdyJzsgZ290byBjX2FuZF9zaGVsbF9lc2NhcGU7CisgICAgICAgIGNhc2UgJ1x0JzogZXNjID0gJ3QnOyBnb3RvIGNfYW5kX3NoZWxsX2VzY2FwZTsKKyAgICAgICAgY2FzZSAnXHYnOiBlc2MgPSAndic7IGdvdG8gY19lc2NhcGU7CisgICAgICAgIGNhc2UgJ1xcJzogZXNjID0gYzsKKyAgICAgICAgICAvKiBObyBuZWVkIHRvIGVzY2FwZSB0aGUgZXNjYXBlIGlmIHdlIGFyZSB0cnlpbmcgdG8gZWxpZGUKKyAgICAgICAgICAgICBvdXRlciBxdW90ZXMgYW5kIG5vdGhpbmcgZWxzZSBpcyBwcm9ibGVtYXRpYy4gICovCisgICAgICAgICAgaWYgKGJhY2tzbGFzaF9lc2NhcGVzICYmIGVsaWRlX291dGVyX3F1b3RlcyAmJiBxdW90ZV9zdHJpbmdfbGVuKQorICAgICAgICAgICAgZ290byBzdG9yZV9jOwogCi0JY19hbmRfc2hlbGxfZXNjYXBlOgotCSAgaWYgKHF1b3Rpbmdfc3R5bGUgPT0gc2hlbGxfcXVvdGluZ19zdHlsZSkKLQkgICAgZ290byB1c2Vfc2hlbGxfYWx3YXlzX3F1b3Rpbmdfc3R5bGU7Ci0JY19lc2NhcGU6Ci0JICBpZiAoYmFja3NsYXNoX2VzY2FwZXMpCi0JICAgIHsKLQkgICAgICBjID0gZXNjOwotCSAgICAgIGdvdG8gc3RvcmVfZXNjYXBlOwotCSAgICB9Ci0JICBicmVhazsKKyAgICAgICAgY19hbmRfc2hlbGxfZXNjYXBlOgorICAgICAgICAgIGlmIChxdW90aW5nX3N0eWxlID09IHNoZWxsX2Fsd2F5c19xdW90aW5nX3N0eWxlCisgICAgICAgICAgICAgICYmIGVsaWRlX291dGVyX3F1b3RlcykKKyAgICAgICAgICAgIGdvdG8gZm9yY2Vfb3V0ZXJfcXVvdGluZ19zdHlsZTsKKyAgICAgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworICAgICAgICBjX2VzY2FwZToKKyAgICAgICAgICBpZiAoYmFja3NsYXNoX2VzY2FwZXMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGMgPSBlc2M7CisgICAgICAgICAgICAgIGdvdG8gc3RvcmVfZXNjYXBlOworICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOwogCi0JY2FzZSAneyc6IGNhc2UgJ30nOiAvKiBzb21ldGltZXMgc3BlY2lhbCBpZiBpc29sYXRlZCAqLwotCSAgaWYgKCEgKGFyZ3NpemUgPT0gU0laRV9NQVggPyBhcmdbMV0gPT0gJ1wwJyA6IGFyZ3NpemUgPT0gMSkpCi0JICAgIGJyZWFrOwotCSAgLyogRmFsbCB0aHJvdWdoLiAgKi8KLQljYXNlICcjJzogY2FzZSAnfic6Ci0JICBpZiAoaSAhPSAwKQotCSAgICBicmVhazsKLQkgIC8qIEZhbGwgdGhyb3VnaC4gICovCi0JY2FzZSAnICc6Ci0JY2FzZSAnISc6IC8qIHNwZWNpYWwgaW4gYmFzaCAqLwotCWNhc2UgJyInOiBjYXNlICckJzogY2FzZSAnJic6Ci0JY2FzZSAnKCc6IGNhc2UgJyknOiBjYXNlICcqJzogY2FzZSAnOyc6Ci0JY2FzZSAnPCc6Ci0JY2FzZSAnPSc6IC8qIHNvbWV0aW1lcyBzcGVjaWFsIGluIDB0aCBvciAod2l0aCAic2V0IC1rIikgbGF0ZXIgYXJncyAqLwotCWNhc2UgJz4nOiBjYXNlICdbJzoKLQljYXNlICdeJzogLyogc3BlY2lhbCBpbiBvbGQgL2Jpbi9zaCwgZS5nLiBTdW5PUyA0LjEuNCAqLwotCWNhc2UgJ2AnOiBjYXNlICd8JzoKLQkgIC8qIEEgc2hlbGwgc3BlY2lhbCBjaGFyYWN0ZXIuICBJbiB0aGVvcnksICckJyBhbmQgJ2AnIGNvdWxkCi0JICAgICBiZSB0aGUgZmlyc3QgYnl0ZXMgb2YgbXVsdGlieXRlIGNoYXJhY3RlcnMsIHdoaWNoIG1lYW5zCi0JICAgICB3ZSBzaG91bGQgY2hlY2sgdGhlbSB3aXRoIG1icnRvd2MsIGJ1dCBpbiBwcmFjdGljZSB0aGlzCi0JICAgICBkb2Vzbid0IGhhcHBlbiBzbyBpdCdzIG5vdCB3b3J0aCB3b3JyeWluZyBhYm91dC4gICovCi0JICBpZiAocXVvdGluZ19zdHlsZSA9PSBzaGVsbF9xdW90aW5nX3N0eWxlKQotCSAgICBnb3RvIHVzZV9zaGVsbF9hbHdheXNfcXVvdGluZ19zdHlsZTsKLQkgIGJyZWFrOworICAgICAgICBjYXNlICd7JzogY2FzZSAnfSc6IC8qIHNvbWV0aW1lcyBzcGVjaWFsIGlmIGlzb2xhdGVkICovCisgICAgICAgICAgaWYgKCEgKGFyZ3NpemUgPT0gU0laRV9NQVggPyBhcmdbMV0gPT0gJ1wwJyA6IGFyZ3NpemUgPT0gMSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworICAgICAgICBjYXNlICcjJzogY2FzZSAnfic6CisgICAgICAgICAgaWYgKGkgIT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisgICAgICAgIGNhc2UgJyAnOgorICAgICAgICBjYXNlICchJzogLyogc3BlY2lhbCBpbiBiYXNoICovCisgICAgICAgIGNhc2UgJyInOiBjYXNlICckJzogY2FzZSAnJic6CisgICAgICAgIGNhc2UgJygnOiBjYXNlICcpJzogY2FzZSAnKic6IGNhc2UgJzsnOgorICAgICAgICBjYXNlICc8JzoKKyAgICAgICAgY2FzZSAnPSc6IC8qIHNvbWV0aW1lcyBzcGVjaWFsIGluIDB0aCBvciAod2l0aCAic2V0IC1rIikgbGF0ZXIgYXJncyAqLworICAgICAgICBjYXNlICc+JzogY2FzZSAnWyc6CisgICAgICAgIGNhc2UgJ14nOiAvKiBzcGVjaWFsIGluIG9sZCAvYmluL3NoLCBlLmcuIFN1bk9TIDQuMS40ICovCisgICAgICAgIGNhc2UgJ2AnOiBjYXNlICd8JzoKKyAgICAgICAgICAvKiBBIHNoZWxsIHNwZWNpYWwgY2hhcmFjdGVyLiAgSW4gdGhlb3J5LCAnJCcgYW5kICdgJyBjb3VsZAorICAgICAgICAgICAgIGJlIHRoZSBmaXJzdCBieXRlcyBvZiBtdWx0aWJ5dGUgY2hhcmFjdGVycywgd2hpY2ggbWVhbnMKKyAgICAgICAgICAgICB3ZSBzaG91bGQgY2hlY2sgdGhlbSB3aXRoIG1icnRvd2MsIGJ1dCBpbiBwcmFjdGljZSB0aGlzCisgICAgICAgICAgICAgZG9lc24ndCBoYXBwZW4gc28gaXQncyBub3Qgd29ydGggd29ycnlpbmcgYWJvdXQuICAqLworICAgICAgICAgIGlmIChxdW90aW5nX3N0eWxlID09IHNoZWxsX2Fsd2F5c19xdW90aW5nX3N0eWxlCisgICAgICAgICAgICAgICYmIGVsaWRlX291dGVyX3F1b3RlcykKKyAgICAgICAgICAgIGdvdG8gZm9yY2Vfb3V0ZXJfcXVvdGluZ19zdHlsZTsKKyAgICAgICAgICBicmVhazsKIAotCWNhc2UgJ1wnJzoKLQkgIHN3aXRjaCAocXVvdGluZ19zdHlsZSkKLQkgICAgewotCSAgICBjYXNlIHNoZWxsX3F1b3Rpbmdfc3R5bGU6Ci0JICAgICAgZ290byB1c2Vfc2hlbGxfYWx3YXlzX3F1b3Rpbmdfc3R5bGU7CisgICAgICAgIGNhc2UgJ1wnJzoKKyAgICAgICAgICBpZiAocXVvdGluZ19zdHlsZSA9PSBzaGVsbF9hbHdheXNfcXVvdGluZ19zdHlsZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKGVsaWRlX291dGVyX3F1b3RlcykKKyAgICAgICAgICAgICAgICBnb3RvIGZvcmNlX291dGVyX3F1b3Rpbmdfc3R5bGU7CisgICAgICAgICAgICAgIFNUT1JFICgnXCcnKTsKKyAgICAgICAgICAgICAgU1RPUkUgKCdcXCcpOworICAgICAgICAgICAgICBTVE9SRSAoJ1wnJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CiAKLQkgICAgY2FzZSBzaGVsbF9hbHdheXNfcXVvdGluZ19zdHlsZToKLQkgICAgICBTVE9SRSAoJ1wnJyk7Ci0JICAgICAgU1RPUkUgKCdcXCcpOwotCSAgICAgIFNUT1JFICgnXCcnKTsKLQkgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnJSc6IGNhc2UgJysnOiBjYXNlICcsJzogY2FzZSAnLSc6IGNhc2UgJy4nOiBjYXNlICcvJzoKKyAgICAgICAgY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOiBjYXNlICc1JzoKKyAgICAgICAgY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6IGNhc2UgJzonOgorICAgICAgICBjYXNlICdBJzogY2FzZSAnQic6IGNhc2UgJ0MnOiBjYXNlICdEJzogY2FzZSAnRSc6IGNhc2UgJ0YnOgorICAgICAgICBjYXNlICdHJzogY2FzZSAnSCc6IGNhc2UgJ0knOiBjYXNlICdKJzogY2FzZSAnSyc6IGNhc2UgJ0wnOgorICAgICAgICBjYXNlICdNJzogY2FzZSAnTic6IGNhc2UgJ08nOiBjYXNlICdQJzogY2FzZSAnUSc6IGNhc2UgJ1InOgorICAgICAgICBjYXNlICdTJzogY2FzZSAnVCc6IGNhc2UgJ1UnOiBjYXNlICdWJzogY2FzZSAnVyc6IGNhc2UgJ1gnOgorICAgICAgICBjYXNlICdZJzogY2FzZSAnWic6IGNhc2UgJ10nOiBjYXNlICdfJzogY2FzZSAnYSc6IGNhc2UgJ2InOgorICAgICAgICBjYXNlICdjJzogY2FzZSAnZCc6IGNhc2UgJ2UnOiBjYXNlICdmJzogY2FzZSAnZyc6IGNhc2UgJ2gnOgorICAgICAgICBjYXNlICdpJzogY2FzZSAnaic6IGNhc2UgJ2snOiBjYXNlICdsJzogY2FzZSAnbSc6IGNhc2UgJ24nOgorICAgICAgICBjYXNlICdvJzogY2FzZSAncCc6IGNhc2UgJ3EnOiBjYXNlICdyJzogY2FzZSAncyc6IGNhc2UgJ3QnOgorICAgICAgICBjYXNlICd1JzogY2FzZSAndic6IGNhc2UgJ3cnOiBjYXNlICd4JzogY2FzZSAneSc6IGNhc2UgJ3onOgorICAgICAgICAgIC8qIFRoZXNlIGNoYXJhY3RlcnMgZG9uJ3QgY2F1c2UgcHJvYmxlbXMsIG5vIG1hdHRlciB3aGF0IHRoZQorICAgICAgICAgICAgIHF1b3Rpbmcgc3R5bGUgaXMuICBUaGV5IGNhbm5vdCBzdGFydCBtdWx0aWJ5dGUgc2VxdWVuY2VzLgorICAgICAgICAgICAgIEEgZGlnaXQgb3IgYSBzcGVjaWFsIGxldHRlciB3b3VsZCBjYXVzZSB0cm91YmxlIGlmIGl0CisgICAgICAgICAgICAgYXBwZWFyZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBxdW90ZV9zdHJpbmcgYmVjYXVzZSB3ZSdkIHRoZW4KKyAgICAgICAgICAgICBlc2NhcGUgYnkgcHJlcGVuZGluZyBhIGJhY2tzbGFzaC4gIEhvd2V2ZXIsIGl0J3MgaGFyZCB0bworICAgICAgICAgICAgIGltYWdpbmUgYW55IGxvY2FsZSB0aGF0IHdvdWxkIHVzZSBkaWdpdHMgb3IgbGV0dGVycyBhcworICAgICAgICAgICAgIHF1b3RlcywgYW5kIHNldF9jdXN0b21fcXVvdGluZyBpcyBkb2N1bWVudGVkIG5vdCB0byBhY2NlcHQKKyAgICAgICAgICAgICB0aGVtLiAgQWxzbywgYSBkaWdpdCBvciBhIHNwZWNpYWwgbGV0dGVyIHdvdWxkIGNhdXNlCisgICAgICAgICAgICAgdHJvdWJsZSBpZiBpdCBhcHBlYXJlZCBpbiBxdW90ZV90aGVzZV90b28sIGJ1dCB0aGF0J3MgYWxzbworICAgICAgICAgICAgIGRvY3VtZW50ZWQgYXMgbm90IGFjY2VwdGluZyB0aGVtLiAgKi8KKyAgICAgICAgICBicmVhazsKIAotCSAgICBkZWZhdWx0OgotCSAgICAgIGJyZWFrOwotCSAgICB9Ci0JICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAvKiBJZiB3ZSBoYXZlIGEgbXVsdGlieXRlIHNlcXVlbmNlLCBjb3B5IGl0IHVudGlsIHdlIHJlYWNoCisgICAgICAgICAgICAgaXRzIGVuZCwgZmluZCBhbiBlcnJvciwgb3IgY29tZSBiYWNrIHRvIHRoZSBpbml0aWFsIHNoaWZ0CisgICAgICAgICAgICAgc3RhdGUuICBGb3IgQy1saWtlIHN0eWxlcywgaWYgdGhlIHNlcXVlbmNlIGhhcworICAgICAgICAgICAgIHVucHJpbnRhYmxlIGNoYXJhY3RlcnMsIGVzY2FwZSB0aGUgd2hvbGUgc2VxdWVuY2UsIHNpbmNlCisgICAgICAgICAgICAgd2UgY2FuJ3QgZWFzaWx5IGVzY2FwZSBzaW5nbGUgY2hhcmFjdGVycyB3aXRoaW4gaXQuICAqLworICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIExlbmd0aCBvZiBtdWx0aWJ5dGUgc2VxdWVuY2UgZm91bmQgc28gZmFyLiAgKi8KKyAgICAgICAgICAgIHNpemVfdCBtOwogCi0JY2FzZSAnJSc6IGNhc2UgJysnOiBjYXNlICcsJzogY2FzZSAnLSc6IGNhc2UgJy4nOiBjYXNlICcvJzoKLQljYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6IGNhc2UgJzUnOgotCWNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOiBjYXNlICc6JzoKLQljYXNlICdBJzogY2FzZSAnQic6IGNhc2UgJ0MnOiBjYXNlICdEJzogY2FzZSAnRSc6IGNhc2UgJ0YnOgotCWNhc2UgJ0cnOiBjYXNlICdIJzogY2FzZSAnSSc6IGNhc2UgJ0onOiBjYXNlICdLJzogY2FzZSAnTCc6Ci0JY2FzZSAnTSc6IGNhc2UgJ04nOiBjYXNlICdPJzogY2FzZSAnUCc6IGNhc2UgJ1EnOiBjYXNlICdSJzoKLQljYXNlICdTJzogY2FzZSAnVCc6IGNhc2UgJ1UnOiBjYXNlICdWJzogY2FzZSAnVyc6IGNhc2UgJ1gnOgotCWNhc2UgJ1knOiBjYXNlICdaJzogY2FzZSAnXSc6IGNhc2UgJ18nOiBjYXNlICdhJzogY2FzZSAnYic6Ci0JY2FzZSAnYyc6IGNhc2UgJ2QnOiBjYXNlICdlJzogY2FzZSAnZic6IGNhc2UgJ2cnOiBjYXNlICdoJzoKLQljYXNlICdpJzogY2FzZSAnaic6IGNhc2UgJ2snOiBjYXNlICdsJzogY2FzZSAnbSc6IGNhc2UgJ24nOgotCWNhc2UgJ28nOiBjYXNlICdwJzogY2FzZSAncSc6IGNhc2UgJ3InOiBjYXNlICdzJzogY2FzZSAndCc6Ci0JY2FzZSAndSc6IGNhc2UgJ3YnOiBjYXNlICd3JzogY2FzZSAneCc6IGNhc2UgJ3knOiBjYXNlICd6JzoKLQkgIC8qIFRoZXNlIGNoYXJhY3RlcnMgZG9uJ3QgY2F1c2UgcHJvYmxlbXMsIG5vIG1hdHRlciB3aGF0IHRoZQotCSAgICAgcXVvdGluZyBzdHlsZSBpcy4gIFRoZXkgY2Fubm90IHN0YXJ0IG11bHRpYnl0ZSBzZXF1ZW5jZXMuICAqLwotCSAgYnJlYWs7CisgICAgICAgICAgICBib29sIHByaW50YWJsZTsKIAotCWRlZmF1bHQ6Ci0JICAvKiBJZiB3ZSBoYXZlIGEgbXVsdGlieXRlIHNlcXVlbmNlLCBjb3B5IGl0IHVudGlsIHdlIHJlYWNoCi0JICAgICBpdHMgZW5kLCBmaW5kIGFuIGVycm9yLCBvciBjb21lIGJhY2sgdG8gdGhlIGluaXRpYWwgc2hpZnQKLQkgICAgIHN0YXRlLiAgRm9yIEMtbGlrZSBzdHlsZXMsIGlmIHRoZSBzZXF1ZW5jZSBoYXMKLQkgICAgIHVucHJpbnRhYmxlIGNoYXJhY3RlcnMsIGVzY2FwZSB0aGUgd2hvbGUgc2VxdWVuY2UsIHNpbmNlCi0JICAgICB3ZSBjYW4ndCBlYXNpbHkgZXNjYXBlIHNpbmdsZSBjaGFyYWN0ZXJzIHdpdGhpbiBpdC4gICovCi0JICB7Ci0JICAgIC8qIExlbmd0aCBvZiBtdWx0aWJ5dGUgc2VxdWVuY2UgZm91bmQgc28gZmFyLiAgKi8KLQkgICAgc2l6ZV90IG07CisgICAgICAgICAgICBpZiAodW5pYnl0ZV9sb2NhbGUpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtID0gMTsKKyAgICAgICAgICAgICAgICBwcmludGFibGUgPSBpc3ByaW50IChjKSAhPSAwOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYnN0YXRlX3QgbWJzdGF0ZTsKKyAgICAgICAgICAgICAgICBtZW1zZXQgKCZtYnN0YXRlLCAwLCBzaXplb2YgbWJzdGF0ZSk7CiAKLQkgICAgYm9vbCBwcmludGFibGU7CisgICAgICAgICAgICAgICAgbSA9IDA7CisgICAgICAgICAgICAgICAgcHJpbnRhYmxlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoYXJnc2l6ZSA9PSBTSVpFX01BWCkKKyAgICAgICAgICAgICAgICAgIGFyZ3NpemUgPSBzdHJsZW4gKGFyZyk7CiAKLQkgICAgaWYgKHVuaWJ5dGVfbG9jYWxlKQotCSAgICAgIHsKLQkJbSA9IDE7Ci0JCXByaW50YWJsZSA9IGlzcHJpbnQgKGMpICE9IDA7Ci0JICAgICAgfQotCSAgICBlbHNlCi0JICAgICAgewotCQltYnN0YXRlX3QgbWJzdGF0ZTsKLQkJbWVtc2V0ICgmbWJzdGF0ZSwgMCwgc2l6ZW9mIG1ic3RhdGUpOworICAgICAgICAgICAgICAgIGRvCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgdzsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ5dGVzID0gbWJydG93YyAoJncsICZhcmdbaSArIG1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzaXplIC0gKGkgKyBtKSwgJm1ic3RhdGUpOworICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZXMgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXMgPT0gKHNpemVfdCkgLTEpCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRhYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGVzID09IChzaXplX3QpIC0yKQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50YWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgKyBtIDwgYXJnc2l6ZSAmJiBhcmdbaSArIG1dKQorICAgICAgICAgICAgICAgICAgICAgICAgICBtKys7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3JrIGFyb3VuZCBhIGJ1ZyB3aXRoIG9sZGVyIHNoZWxscyB0aGF0ICJzZWUiIGEgJ1wnCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGlzIHJlYWxseSB0aGUgMm5kIGJ5dGUgb2YgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gcHJhY3RpY2UgdGhlIHByb2JsZW0gaXMgbGltaXRlZCB0byBBU0NJSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnMgPj0gJ0AnIHRoYXQgYXJlIHNoZWxsIHNwZWNpYWwgY2hhcnMuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCdbJyA9PSAweDViICYmIGVsaWRlX291dGVyX3F1b3RlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHF1b3Rpbmdfc3R5bGUgPT0gc2hlbGxfYWx3YXlzX3F1b3Rpbmdfc3R5bGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgajsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAxOyBqIDwgYnl0ZXM7IGorKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJnW2kgKyBtICsgal0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnWyc6IGNhc2UgJ1xcJzogY2FzZSAnXic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2AnOiBjYXNlICd8JzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZvcmNlX291dGVyX3F1b3Rpbmdfc3R5bGU7CiAKLQkJbSA9IDA7Ci0JCXByaW50YWJsZSA9IHRydWU7Ci0JCWlmIChhcmdzaXplID09IFNJWkVfTUFYKQotCQkgIGFyZ3NpemUgPSBzdHJsZW4gKGFyZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0JCWRvCi0JCSAgewotCQkgICAgd2NoYXJfdCB3OwotCQkgICAgc2l6ZV90IGJ5dGVzID0gbWJydG93YyAoJncsICZhcmdbaSArIG1dLAotCQkJCQkgICAgYXJnc2l6ZSAtIChpICsgbSksICZtYnN0YXRlKTsKLQkJICAgIGlmIChieXRlcyA9PSAwKQotCQkgICAgICBicmVhazsKLQkJICAgIGVsc2UgaWYgKGJ5dGVzID09IChzaXplX3QpIC0xKQotCQkgICAgICB7Ci0JCQlwcmludGFibGUgPSBmYWxzZTsKLQkJCWJyZWFrOwotCQkgICAgICB9Ci0JCSAgICBlbHNlIGlmIChieXRlcyA9PSAoc2l6ZV90KSAtMikKLQkJICAgICAgewotCQkJcHJpbnRhYmxlID0gZmFsc2U7Ci0JCQl3aGlsZSAoaSArIG0gPCBhcmdzaXplICYmIGFyZ1tpICsgbV0pCi0JCQkgIG0rKzsKLQkJCWJyZWFrOwotCQkgICAgICB9Ci0JCSAgICBlbHNlCi0JCSAgICAgIHsKLQkJCS8qIFdvcmsgYXJvdW5kIGEgYnVnIHdpdGggb2xkZXIgc2hlbGxzIHRoYXQgInNlZSIgYSAnXCcKLQkJCSAgIHRoYXQgaXMgcmVhbGx5IHRoZSAybmQgYnl0ZSBvZiBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIuCi0JCQkgICBJbiBwcmFjdGljZSB0aGUgcHJvYmxlbSBpcyBsaW1pdGVkIHRvIEFTQ0lJCi0JCQkgICBjaGFycyA+PSAnQCcgdGhhdCBhcmUgc2hlbGwgc3BlY2lhbCBjaGFycy4gICovCi0JCQlpZiAoJ1snID09IDB4NWIgJiYgcXVvdGluZ19zdHlsZSA9PSBzaGVsbF9xdW90aW5nX3N0eWxlKQotCQkJICB7Ci0JCQkgICAgc2l6ZV90IGo7Ci0JCQkgICAgZm9yIChqID0gMTsgaiA8IGJ5dGVzOyBqKyspCi0JCQkgICAgICBzd2l0Y2ggKGFyZ1tpICsgbSArIGpdKQotCQkJCXsKLQkJCQljYXNlICdbJzogY2FzZSAnXFwnOiBjYXNlICdeJzoKLQkJCQljYXNlICdgJzogY2FzZSAnfCc6Ci0JCQkJICBnb3RvIHVzZV9zaGVsbF9hbHdheXNfcXVvdGluZ19zdHlsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIGlzd3ByaW50ICh3KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRhYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBtICs9IGJ5dGVzOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3aGlsZSAoISBtYnNpbml0ICgmbWJzdGF0ZSkpOworICAgICAgICAgICAgICB9CiAKLQkJCQlkZWZhdWx0OgotCQkJCSAgYnJlYWs7Ci0JCQkJfQotCQkJICB9CisgICAgICAgICAgICBpZiAoMSA8IG0gfHwgKGJhY2tzbGFzaF9lc2NhcGVzICYmICEgcHJpbnRhYmxlKSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIE91dHB1dCBhIG11bHRpYnl0ZSBzZXF1ZW5jZSwgb3IgYW4gZXNjYXBlZAorICAgICAgICAgICAgICAgICAgIHVucHJpbnRhYmxlIHVuaWJ5dGUgY2hhcmFjdGVyLiAgKi8KKyAgICAgICAgICAgICAgICBzaXplX3QgaWxpbSA9IGkgKyBtOwogCi0JCQlpZiAoISBpc3dwcmludCAodykpCi0JCQkgIHByaW50YWJsZSA9IGZhbHNlOwotCQkJbSArPSBieXRlczsKLQkJICAgICAgfQotCQkgIH0KLQkJd2hpbGUgKCEgbWJzaW5pdCAoJm1ic3RhdGUpKTsKLQkgICAgICB9CisgICAgICAgICAgICAgICAgZm9yICg7OykKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJhY2tzbGFzaF9lc2NhcGVzICYmICEgcHJpbnRhYmxlKQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGlkZV9vdXRlcl9xdW90ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZm9yY2Vfb3V0ZXJfcXVvdGluZ19zdHlsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNUT1JFICgnXFwnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNUT1JFICgnMCcgKyAoYyA+PiA2KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBTVE9SRSAoJzAnICsgKChjID4+IDMpICYgNykpOworICAgICAgICAgICAgICAgICAgICAgICAgYyA9ICcwJyArIChjICYgNyk7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpc19yaWdodF9xdW90ZSkKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBTVE9SRSAoJ1xcJyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpc19yaWdodF9xdW90ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGlsaW0gPD0gaSArIDEpCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIFNUT1JFIChjKTsKKyAgICAgICAgICAgICAgICAgICAgYyA9IGFyZ1srK2ldOworICAgICAgICAgICAgICAgICAgfQogCi0JICAgIGlmICgxIDwgbSB8fCAoYmFja3NsYXNoX2VzY2FwZXMgJiYgISBwcmludGFibGUpKQotCSAgICAgIHsKLQkJLyogT3V0cHV0IGEgbXVsdGlieXRlIHNlcXVlbmNlLCBvciBhbiBlc2NhcGVkCi0JCSAgIHVucHJpbnRhYmxlIHVuaWJ5dGUgY2hhcmFjdGVyLiAgKi8KLQkJc2l6ZV90IGlsaW0gPSBpICsgbTsKKyAgICAgICAgICAgICAgICBnb3RvIHN0b3JlX2M7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KIAotCQlmb3IgKDs7KQotCQkgIHsKLQkJICAgIGlmIChiYWNrc2xhc2hfZXNjYXBlcyAmJiAhIHByaW50YWJsZSkKLQkJICAgICAgewotCQkJU1RPUkUgKCdcXCcpOwotCQkJU1RPUkUgKCcwJyArIChjID4+IDYpKTsKLQkJCVNUT1JFICgnMCcgKyAoKGMgPj4gMykgJiA3KSk7Ci0JCQljID0gJzAnICsgKGMgJiA3KTsKLQkJICAgICAgfQotCQkgICAgaWYgKGlsaW0gPD0gaSArIDEpCi0JCSAgICAgIGJyZWFrOwotCQkgICAgU1RPUkUgKGMpOwotCQkgICAgYyA9IGFyZ1srK2ldOwotCQkgIH0KLQotCQlnb3RvIHN0b3JlX2M7Ci0JICAgICAgfQotCSAgfQotCX0KLQotICAgICAgaWYgKCEgKGJhY2tzbGFzaF9lc2NhcGVzCi0JICAgICAmJiBvLT5xdW90ZV90aGVzZV90b29bYyAvIElOVF9CSVRTXSAmICgxIDw8IChjICUgSU5UX0JJVFMpKSkpCi0JZ290byBzdG9yZV9jOworICAgICAgaWYgKCEgKChiYWNrc2xhc2hfZXNjYXBlcyB8fCBlbGlkZV9vdXRlcl9xdW90ZXMpCisgICAgICAgICAgICAgJiYgcXVvdGVfdGhlc2VfdG9vCisgICAgICAgICAgICAgJiYgcXVvdGVfdGhlc2VfdG9vW2MgLyBJTlRfQklUU10gJiAoMSA8PCAoYyAlIElOVF9CSVRTKSkpCisgICAgICAgICAgJiYgIWlzX3JpZ2h0X3F1b3RlKQorICAgICAgICBnb3RvIHN0b3JlX2M7CiAKICAgICBzdG9yZV9lc2NhcGU6CisgICAgICBpZiAoZWxpZGVfb3V0ZXJfcXVvdGVzKQorICAgICAgICBnb3RvIGZvcmNlX291dGVyX3F1b3Rpbmdfc3R5bGU7CiAgICAgICBTVE9SRSAoJ1xcJyk7CiAKICAgICBzdG9yZV9jOgogICAgICAgU1RPUkUgKGMpOwogICAgIH0KIAotICBpZiAoaSA9PSAwICYmIHF1b3Rpbmdfc3R5bGUgPT0gc2hlbGxfcXVvdGluZ19zdHlsZSkKLSAgICBnb3RvIHVzZV9zaGVsbF9hbHdheXNfcXVvdGluZ19zdHlsZTsKKyAgaWYgKGxlbiA9PSAwICYmIHF1b3Rpbmdfc3R5bGUgPT0gc2hlbGxfYWx3YXlzX3F1b3Rpbmdfc3R5bGUKKyAgICAgICYmIGVsaWRlX291dGVyX3F1b3RlcykKKyAgICBnb3RvIGZvcmNlX291dGVyX3F1b3Rpbmdfc3R5bGU7CiAKLSAgaWYgKHF1b3RlX3N0cmluZykKKyAgaWYgKHF1b3RlX3N0cmluZyAmJiAhZWxpZGVfb3V0ZXJfcXVvdGVzKQogICAgIGZvciAoOyAqcXVvdGVfc3RyaW5nOyBxdW90ZV9zdHJpbmcrKykKICAgICAgIFNUT1JFICgqcXVvdGVfc3RyaW5nKTsKIApAQCAtNTE5LDkgKzY0NiwxMyBAQAogICAgIGJ1ZmZlcltsZW5dID0gJ1wwJzsKICAgcmV0dXJuIGxlbjsKIAotIHVzZV9zaGVsbF9hbHdheXNfcXVvdGluZ19zdHlsZToKKyBmb3JjZV9vdXRlcl9xdW90aW5nX3N0eWxlOgorICAvKiBEb24ndCByZXVzZSBxdW90ZV90aGVzZV90b28sIHNpbmNlIHRoZSBhZGRpdGlvbiBvZiBvdXRlciBxdW90ZXMKKyAgICAgc3VmZmljaWVudGx5IHF1b3RlcyB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlcnMuICAqLwogICByZXR1cm4gcXVvdGVhcmdfYnVmZmVyX3Jlc3R5bGVkIChidWZmZXIsIGJ1ZmZlcnNpemUsIGFyZywgYXJnc2l6ZSwKLQkJCQkgICBzaGVsbF9hbHdheXNfcXVvdGluZ19zdHlsZSwgbyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3Rpbmdfc3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICYgflFBX0VMSURFX09VVEVSX1FVT1RFUywgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdF9xdW90ZSwgcmlnaHRfcXVvdGUpOwogfQogCiAvKiBQbGFjZSBpbnRvIGJ1ZmZlciBCVUZGRVIgKG9mIHNpemUgQlVGRkVSU0laRSkgYSBxdW90ZWQgdmVyc2lvbiBvZgpAQCAtNTM1LDMxICs2NjYsODkgQEAKICAgIEFSR1NJWkUuICAqLwogc2l6ZV90CiBxdW90ZWFyZ19idWZmZXIgKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcnNpemUsCi0JCSBjaGFyIGNvbnN0ICphcmcsIHNpemVfdCBhcmdzaXplLAotCQkgc3RydWN0IHF1b3Rpbmdfb3B0aW9ucyBjb25zdCAqbykKKyAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqYXJnLCBzaXplX3QgYXJnc2l6ZSwKKyAgICAgICAgICAgICAgICAgc3RydWN0IHF1b3Rpbmdfb3B0aW9ucyBjb25zdCAqbykKIHsKICAgc3RydWN0IHF1b3Rpbmdfb3B0aW9ucyBjb25zdCAqcCA9IG8gPyBvIDogJmRlZmF1bHRfcXVvdGluZ19vcHRpb25zOwogICBpbnQgZSA9IGVycm5vOwogICBzaXplX3QgciA9IHF1b3RlYXJnX2J1ZmZlcl9yZXN0eWxlZCAoYnVmZmVyLCBidWZmZXJzaXplLCBhcmcsIGFyZ3NpemUsCi0JCQkJICAgICAgIHAtPnN0eWxlLCBwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPnN0eWxlLCBwLT5mbGFncywgcC0+cXVvdGVfdGhlc2VfdG9vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+bGVmdF9xdW90ZSwgcC0+cmlnaHRfcXVvdGUpOwogICBlcnJubyA9IGU7CiAgIHJldHVybiByOwogfQogCi0vKiBMaWtlIHF1b3RlYXJnX2J1ZmZlciAoLi4uLCBBUkcsIEFSR1NJWkUsIE8pLCBleGNlcHQgcmV0dXJuIG5ld2x5Ci0gICBhbGxvY2F0ZWQgc3RvcmFnZSBjb250YWluaW5nIHRoZSBxdW90ZWQgc3RyaW5nLiAgKi8KKy8qIEVxdWl2YWxlbnQgdG8gcXVvdGVhcmdfYWxsb2MgKEFSRywgQVJHU0laRSwgTlVMTCwgTykuICAqLwogY2hhciAqCiBxdW90ZWFyZ19hbGxvYyAoY2hhciBjb25zdCAqYXJnLCBzaXplX3QgYXJnc2l6ZSwKLQkJc3RydWN0IHF1b3Rpbmdfb3B0aW9ucyBjb25zdCAqbykKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgcXVvdGluZ19vcHRpb25zIGNvbnN0ICpvKQogeworICByZXR1cm4gcXVvdGVhcmdfYWxsb2NfbWVtIChhcmcsIGFyZ3NpemUsIE5VTEwsIG8pOworfQorCisvKiBMaWtlIHF1b3RlYXJnX2J1ZmZlciAoLi4uLCBBUkcsIEFSR1NJWkUsIE8pLCBleGNlcHQgcmV0dXJuIG5ld2x5CisgICBhbGxvY2F0ZWQgc3RvcmFnZSBjb250YWluaW5nIHRoZSBxdW90ZWQgc3RyaW5nLCBhbmQgc3RvcmUgdGhlCisgICByZXN1bHRpbmcgc2l6ZSBpbnRvICpTSVpFLCBpZiBub24tTlVMTC4gIFRoZSByZXN1bHQgY2FuIGNvbnRhaW4KKyAgIGVtYmVkZGVkIG51bGwgYnl0ZXMgb25seSBpZiBBUkdTSVpFIGlzIG5vdCBTSVpFX01BWCwgU0laRSBpcyBub3QKKyAgIE5VTEwsIGFuZCBzZXRfcXVvdGluZ19mbGFncyBoYXMgbm90IHNldCB0aGUgbnVsbCBieXRlIGVsaXNpb24KKyAgIGZsYWcuICAqLworY2hhciAqCitxdW90ZWFyZ19hbGxvY19tZW0gKGNoYXIgY29uc3QgKmFyZywgc2l6ZV90IGFyZ3NpemUsIHNpemVfdCAqc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IHF1b3Rpbmdfb3B0aW9ucyBjb25zdCAqbykKK3sKKyAgc3RydWN0IHF1b3Rpbmdfb3B0aW9ucyBjb25zdCAqcCA9IG8gPyBvIDogJmRlZmF1bHRfcXVvdGluZ19vcHRpb25zOwogICBpbnQgZSA9IGVycm5vOwotICBzaXplX3QgYnVmc2l6ZSA9IHF1b3RlYXJnX2J1ZmZlciAoMCwgMCwgYXJnLCBhcmdzaXplLCBvKSArIDE7Ci0gIGNoYXIgKmJ1ZiA9IHhtYWxsb2MgKGJ1ZnNpemUpOwotICBxdW90ZWFyZ19idWZmZXIgKGJ1ZiwgYnVmc2l6ZSwgYXJnLCBhcmdzaXplLCBvKTsKKyAgLyogRWxpZGUgZW1iZWRkZWQgbnVsbCBieXRlcyBpZiB3ZSBjYW4ndCByZXR1cm4gYSBzaXplLiAgKi8KKyAgaW50IGZsYWdzID0gcC0+ZmxhZ3MgfCAoc2l6ZSA/IDAgOiBRQV9FTElERV9OVUxMX0JZVEVTKTsKKyAgc2l6ZV90IGJ1ZnNpemUgPSBxdW90ZWFyZ19idWZmZXJfcmVzdHlsZWQgKDAsIDAsIGFyZywgYXJnc2l6ZSwgcC0+c3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgcC0+cXVvdGVfdGhlc2VfdG9vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+bGVmdF9xdW90ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPnJpZ2h0X3F1b3RlKSArIDE7CisgIGNoYXIgKmJ1ZiA9IHhjaGFyYWxsb2MgKGJ1ZnNpemUpOworICBxdW90ZWFyZ19idWZmZXJfcmVzdHlsZWQgKGJ1ZiwgYnVmc2l6ZSwgYXJnLCBhcmdzaXplLCBwLT5zdHlsZSwgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+cXVvdGVfdGhlc2VfdG9vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPmxlZnRfcXVvdGUsIHAtPnJpZ2h0X3F1b3RlKTsKICAgZXJybm8gPSBlOworICBpZiAoc2l6ZSkKKyAgICAqc2l6ZSA9IGJ1ZnNpemUgLSAxOwogICByZXR1cm4gYnVmOwogfQogCisvKiBBIHN0b3JhZ2Ugc2xvdCB3aXRoIHNpemUgYW5kIHBvaW50ZXIgdG8gYSB2YWx1ZS4gICovCitzdHJ1Y3Qgc2xvdHZlYworeworICBzaXplX3Qgc2l6ZTsKKyAgY2hhciAqdmFsOworfTsKKworLyogUHJlYWxsb2NhdGUgYSBzbG90IDAgYnVmZmVyLCBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuIGFsd2F5cyBxdW90ZQorICAgb25lIHNtYWxsIGNvbXBvbmVudCBvZiBhICJtZW1vcnkgZXhoYXVzdGVkIiBtZXNzYWdlIGluIHNsb3QgMC4gICovCitzdGF0aWMgY2hhciBzbG90MFsyNTZdOworc3RhdGljIHVuc2lnbmVkIGludCBuc2xvdHMgPSAxOworc3RhdGljIHN0cnVjdCBzbG90dmVjIHNsb3R2ZWMwID0ge3NpemVvZiBzbG90MCwgc2xvdDB9Oworc3RhdGljIHN0cnVjdCBzbG90dmVjICpzbG90dmVjID0gJnNsb3R2ZWMwOworCit2b2lkCitxdW90ZWFyZ19mcmVlICh2b2lkKQoreworICBzdHJ1Y3Qgc2xvdHZlYyAqc3YgPSBzbG90dmVjOworICB1bnNpZ25lZCBpbnQgaTsKKyAgZm9yIChpID0gMTsgaSA8IG5zbG90czsgaSsrKQorICAgIGZyZWUgKHN2W2ldLnZhbCk7CisgIGlmIChzdlswXS52YWwgIT0gc2xvdDApCisgICAgeworICAgICAgZnJlZSAoc3ZbMF0udmFsKTsKKyAgICAgIHNsb3R2ZWMwLnNpemUgPSBzaXplb2Ygc2xvdDA7CisgICAgICBzbG90dmVjMC52YWwgPSBzbG90MDsKKyAgICB9CisgIGlmIChzdiAhPSAmc2xvdHZlYzApCisgICAgeworICAgICAgZnJlZSAoc3YpOworICAgICAgc2xvdHZlYyA9ICZzbG90dmVjMDsKKyAgICB9CisgIG5zbG90cyA9IDE7Cit9CisKIC8qIFVzZSBzdG9yYWdlIHNsb3QgTiB0byByZXR1cm4gYSBxdW90ZWQgdmVyc2lvbiBvZiBhcmd1bWVudCBBUkcuCiAgICBBUkcgaXMgb2Ygc2l6ZSBBUkdTSVpFLCBidXQgaWYgdGhhdCBpcyBTSVpFX01BWCwgQVJHIGlzIGEKICAgIG51bGwtdGVybWluYXRlZCBzdHJpbmcuCkBAIC01NzAsNjAgKzc1OSw1NyBAQAogICAgdG8gYWxsb3cgZm9yIGZ1dHVyZSBleHRlbnNpb25zICh1c2luZyBuZWdhdGl2ZSB2YWx1ZXMpLiAgKi8KIHN0YXRpYyBjaGFyICoKIHF1b3RlYXJnX25fb3B0aW9ucyAoaW50IG4sIGNoYXIgY29uc3QgKmFyZywgc2l6ZV90IGFyZ3NpemUsCi0JCSAgICBzdHJ1Y3QgcXVvdGluZ19vcHRpb25zIGNvbnN0ICpvcHRpb25zKQorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcXVvdGluZ19vcHRpb25zIGNvbnN0ICpvcHRpb25zKQogewogICBpbnQgZSA9IGVycm5vOwogCi0gIC8qIFByZWFsbG9jYXRlIGEgc2xvdCAwIGJ1ZmZlciwgc28gdGhhdCB0aGUgY2FsbGVyIGNhbiBhbHdheXMgcXVvdGUKLSAgICAgb25lIHNtYWxsIGNvbXBvbmVudCBvZiBhICJtZW1vcnkgZXhoYXVzdGVkIiBtZXNzYWdlIGluIHNsb3QgMC4gICovCi0gIHN0YXRpYyBjaGFyIHNsb3QwWzI1Nl07Ci0gIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnNsb3RzID0gMTsKICAgdW5zaWduZWQgaW50IG4wID0gbjsKLSAgc3RydWN0IHNsb3R2ZWMKLSAgICB7Ci0gICAgICBzaXplX3Qgc2l6ZTsKLSAgICAgIGNoYXIgKnZhbDsKLSAgICB9OwotICBzdGF0aWMgc3RydWN0IHNsb3R2ZWMgc2xvdHZlYzAgPSB7c2l6ZW9mIHNsb3QwLCBzbG90MH07Ci0gIHN0YXRpYyBzdHJ1Y3Qgc2xvdHZlYyAqc2xvdHZlYyA9ICZzbG90dmVjMDsKKyAgc3RydWN0IHNsb3R2ZWMgKnN2ID0gc2xvdHZlYzsKIAogICBpZiAobiA8IDApCiAgICAgYWJvcnQgKCk7CiAKICAgaWYgKG5zbG90cyA8PSBuMCkKICAgICB7Ci0gICAgICAvKiBGSVhNRTogdGVjaG5pY2FsbHksIHRoZSB0eXBlIG9mIG4xIHNob3VsZCBiZSBgdW5zaWduZWQgaW50JywKLQkgYnV0IHRoYXQgZXZva2VzIGFuIHVuc3VwcHJlc3NpYmxlIHdhcm5pbmcgZnJvbSBnY2MtNC4wLjEgYW5kCi0JIG9sZGVyLiAgSWYgZ2NjIGV2ZXIgcHJvdmlkZXMgYW4gb3B0aW9uIHRvIHN1cHByZXNzIHRoYXQgd2FybmluZywKLQkgcmV2ZXJ0IHRvIHRoZSBvcmlnaW5hbCB0eXBlLCBzbyB0aGF0IHRoZSB0ZXN0IGluIHhhbGxvY19vdmVyc2l6ZWQKLQkgaXMgb25jZSBhZ2FpbiBwZXJmb3JtZWQgb25seSBhdCBjb21waWxlIHRpbWUuICAqLworICAgICAgLyogRklYTUU6IHRlY2huaWNhbGx5LCB0aGUgdHlwZSBvZiBuMSBzaG91bGQgYmUgJ3Vuc2lnbmVkIGludCcsCisgICAgICAgICBidXQgdGhhdCBldm9rZXMgYW4gdW5zdXBwcmVzc2libGUgd2FybmluZyBmcm9tIGdjYy00LjAuMSBhbmQKKyAgICAgICAgIG9sZGVyLiAgSWYgZ2NjIGV2ZXIgcHJvdmlkZXMgYW4gb3B0aW9uIHRvIHN1cHByZXNzIHRoYXQgd2FybmluZywKKyAgICAgICAgIHJldmVydCB0byB0aGUgb3JpZ2luYWwgdHlwZSwgc28gdGhhdCB0aGUgdGVzdCBpbiB4YWxsb2Nfb3ZlcnNpemVkCisgICAgICAgICBpcyBvbmNlIGFnYWluIHBlcmZvcm1lZCBvbmx5IGF0IGNvbXBpbGUgdGltZS4gICovCiAgICAgICBzaXplX3QgbjEgPSBuMCArIDE7CisgICAgICBib29sIHByZWFsbG9jYXRlZCA9IChzdiA9PSAmc2xvdHZlYzApOwogCi0gICAgICBpZiAoeGFsbG9jX292ZXJzaXplZCAobjEsIHNpemVvZiAqc2xvdHZlYykpCi0JeGFsbG9jX2RpZSAoKTsKKyAgICAgIGlmICh4YWxsb2Nfb3ZlcnNpemVkIChuMSwgc2l6ZW9mICpzdikpCisgICAgICAgIHhhbGxvY19kaWUgKCk7CiAKLSAgICAgIGlmIChzbG90dmVjID09ICZzbG90dmVjMCkKLQl7Ci0JICBzbG90dmVjID0geG1hbGxvYyAoc2l6ZW9mICpzbG90dmVjKTsKLQkgICpzbG90dmVjID0gc2xvdHZlYzA7Ci0JfQotICAgICAgc2xvdHZlYyA9IHhyZWFsbG9jIChzbG90dmVjLCBuMSAqIHNpemVvZiAqc2xvdHZlYyk7Ci0gICAgICBtZW1zZXQgKHNsb3R2ZWMgKyBuc2xvdHMsIDAsIChuMSAtIG5zbG90cykgKiBzaXplb2YgKnNsb3R2ZWMpOworICAgICAgc2xvdHZlYyA9IHN2ID0geHJlYWxsb2MgKHByZWFsbG9jYXRlZCA/IE5VTEwgOiBzdiwgbjEgKiBzaXplb2YgKnN2KTsKKyAgICAgIGlmIChwcmVhbGxvY2F0ZWQpCisgICAgICAgICpzdiA9IHNsb3R2ZWMwOworICAgICAgbWVtc2V0IChzdiArIG5zbG90cywgMCwgKG4xIC0gbnNsb3RzKSAqIHNpemVvZiAqc3YpOwogICAgICAgbnNsb3RzID0gbjE7CiAgICAgfQogCiAgIHsKLSAgICBzaXplX3Qgc2l6ZSA9IHNsb3R2ZWNbbl0uc2l6ZTsKLSAgICBjaGFyICp2YWwgPSBzbG90dmVjW25dLnZhbDsKLSAgICBzaXplX3QgcXNpemUgPSBxdW90ZWFyZ19idWZmZXIgKHZhbCwgc2l6ZSwgYXJnLCBhcmdzaXplLCBvcHRpb25zKTsKKyAgICBzaXplX3Qgc2l6ZSA9IHN2W25dLnNpemU7CisgICAgY2hhciAqdmFsID0gc3Zbbl0udmFsOworICAgIC8qIEVsaWRlIGVtYmVkZGVkIG51bGwgYnl0ZXMgc2luY2Ugd2UgZG9uJ3QgcmV0dXJuIGEgc2l6ZS4gICovCisgICAgaW50IGZsYWdzID0gb3B0aW9ucy0+ZmxhZ3MgfCBRQV9FTElERV9OVUxMX0JZVEVTOworICAgIHNpemVfdCBxc2l6ZSA9IHF1b3RlYXJnX2J1ZmZlcl9yZXN0eWxlZCAodmFsLCBzaXplLCBhcmcsIGFyZ3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLT5zdHlsZSwgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLT5xdW90ZV90aGVzZV90b28sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLT5sZWZ0X3F1b3RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy0+cmlnaHRfcXVvdGUpOwogCiAgICAgaWYgKHNpemUgPD0gcXNpemUpCiAgICAgICB7Ci0Jc2xvdHZlY1tuXS5zaXplID0gc2l6ZSA9IHFzaXplICsgMTsKLQlpZiAodmFsICE9IHNsb3QwKQotCSAgZnJlZSAodmFsKTsKLQlzbG90dmVjW25dLnZhbCA9IHZhbCA9IHhtYWxsb2MgKHNpemUpOwotCXF1b3RlYXJnX2J1ZmZlciAodmFsLCBzaXplLCBhcmcsIGFyZ3NpemUsIG9wdGlvbnMpOworICAgICAgICBzdltuXS5zaXplID0gc2l6ZSA9IHFzaXplICsgMTsKKyAgICAgICAgaWYgKHZhbCAhPSBzbG90MCkKKyAgICAgICAgICBmcmVlICh2YWwpOworICAgICAgICBzdltuXS52YWwgPSB2YWwgPSB4Y2hhcmFsbG9jIChzaXplKTsKKyAgICAgICAgcXVvdGVhcmdfYnVmZmVyX3Jlc3R5bGVkICh2YWwsIHNpemUsIGFyZywgYXJnc2l6ZSwgb3B0aW9ucy0+c3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsIG9wdGlvbnMtPnF1b3RlX3RoZXNlX3RvbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLT5sZWZ0X3F1b3RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMtPnJpZ2h0X3F1b3RlKTsKICAgICAgIH0KIAogICAgIGVycm5vID0gZTsKQEAgLTYzOCwxOSArODI0LDIxIEBACiB9CiAKIGNoYXIgKgorcXVvdGVhcmdfbl9tZW0gKGludCBuLCBjaGFyIGNvbnN0ICphcmcsIHNpemVfdCBhcmdzaXplKQoreworICByZXR1cm4gcXVvdGVhcmdfbl9vcHRpb25zIChuLCBhcmcsIGFyZ3NpemUsICZkZWZhdWx0X3F1b3Rpbmdfb3B0aW9ucyk7Cit9CisKK2NoYXIgKgogcXVvdGVhcmcgKGNoYXIgY29uc3QgKmFyZykKIHsKICAgcmV0dXJuIHF1b3RlYXJnX24gKDAsIGFyZyk7CiB9CiAKLS8qIFJldHVybiBxdW90aW5nIG9wdGlvbnMgZm9yIFNUWUxFLCB3aXRoIG5vIGV4dHJhIHF1b3RpbmcuICAqLwotc3RhdGljIHN0cnVjdCBxdW90aW5nX29wdGlvbnMKLXF1b3Rpbmdfb3B0aW9uc19mcm9tX3N0eWxlIChlbnVtIHF1b3Rpbmdfc3R5bGUgc3R5bGUpCitjaGFyICoKK3F1b3RlYXJnX21lbSAoY2hhciBjb25zdCAqYXJnLCBzaXplX3QgYXJnc2l6ZSkKIHsKLSAgc3RydWN0IHF1b3Rpbmdfb3B0aW9ucyBvOwotICBvLnN0eWxlID0gc3R5bGU7Ci0gIG1lbXNldCAoby5xdW90ZV90aGVzZV90b28sIDAsIHNpemVvZiBvLnF1b3RlX3RoZXNlX3Rvbyk7Ci0gIHJldHVybiBvOworICByZXR1cm4gcXVvdGVhcmdfbl9tZW0gKDAsIGFyZywgYXJnc2l6ZSk7CiB9CiAKIGNoYXIgKgpAQCAtNjYyLDcgKzg1MCw3IEBACiAKIGNoYXIgKgogcXVvdGVhcmdfbl9zdHlsZV9tZW0gKGludCBuLCBlbnVtIHF1b3Rpbmdfc3R5bGUgcywKLQkJICAgICAgY2hhciBjb25zdCAqYXJnLCBzaXplX3QgYXJnc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICphcmcsIHNpemVfdCBhcmdzaXplKQogewogICBzdHJ1Y3QgcXVvdGluZ19vcHRpb25zIGNvbnN0IG8gPSBxdW90aW5nX29wdGlvbnNfZnJvbV9zdHlsZSAocyk7CiAgIHJldHVybiBxdW90ZWFyZ19uX29wdGlvbnMgKG4sIGFyZywgYXJnc2l6ZSwgJm8pOwpAQCAtNjc1LDEyICs4NjMsMjQgQEAKIH0KIAogY2hhciAqCi1xdW90ZWFyZ19jaGFyIChjaGFyIGNvbnN0ICphcmcsIGNoYXIgY2gpCitxdW90ZWFyZ19zdHlsZV9tZW0gKGVudW0gcXVvdGluZ19zdHlsZSBzLCBjaGFyIGNvbnN0ICphcmcsIHNpemVfdCBhcmdzaXplKQoreworICByZXR1cm4gcXVvdGVhcmdfbl9zdHlsZV9tZW0gKDAsIHMsIGFyZywgYXJnc2l6ZSk7Cit9CisKK2NoYXIgKgorcXVvdGVhcmdfY2hhcl9tZW0gKGNoYXIgY29uc3QgKmFyZywgc2l6ZV90IGFyZ3NpemUsIGNoYXIgY2gpCiB7CiAgIHN0cnVjdCBxdW90aW5nX29wdGlvbnMgb3B0aW9uczsKICAgb3B0aW9ucyA9IGRlZmF1bHRfcXVvdGluZ19vcHRpb25zOwogICBzZXRfY2hhcl9xdW90aW5nICgmb3B0aW9ucywgY2gsIDEpOwotICByZXR1cm4gcXVvdGVhcmdfbl9vcHRpb25zICgwLCBhcmcsIFNJWkVfTUFYLCAmb3B0aW9ucyk7CisgIHJldHVybiBxdW90ZWFyZ19uX29wdGlvbnMgKDAsIGFyZywgYXJnc2l6ZSwgJm9wdGlvbnMpOworfQorCitjaGFyICoKK3F1b3RlYXJnX2NoYXIgKGNoYXIgY29uc3QgKmFyZywgY2hhciBjaCkKK3sKKyAgcmV0dXJuIHF1b3RlYXJnX2NoYXJfbWVtIChhcmcsIFNJWkVfTUFYLCBjaCk7CiB9CiAKIGNoYXIgKgpAQCAtNjg4LDMgKzg4OCw3NiBAQAogewogICByZXR1cm4gcXVvdGVhcmdfY2hhciAoYXJnLCAnOicpOwogfQorCitjaGFyICoKK3F1b3RlYXJnX2NvbG9uX21lbSAoY2hhciBjb25zdCAqYXJnLCBzaXplX3QgYXJnc2l6ZSkKK3sKKyAgcmV0dXJuIHF1b3RlYXJnX2NoYXJfbWVtIChhcmcsIGFyZ3NpemUsICc6Jyk7Cit9CisKK2NoYXIgKgorcXVvdGVhcmdfbl9jdXN0b20gKGludCBuLCBjaGFyIGNvbnN0ICpsZWZ0X3F1b3RlLAorICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKnJpZ2h0X3F1b3RlLCBjaGFyIGNvbnN0ICphcmcpCit7CisgIHJldHVybiBxdW90ZWFyZ19uX2N1c3RvbV9tZW0gKG4sIGxlZnRfcXVvdGUsIHJpZ2h0X3F1b3RlLCBhcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVfTUFYKTsKK30KKworY2hhciAqCitxdW90ZWFyZ19uX2N1c3RvbV9tZW0gKGludCBuLCBjaGFyIGNvbnN0ICpsZWZ0X3F1b3RlLAorICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICpyaWdodF9xdW90ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqYXJnLCBzaXplX3QgYXJnc2l6ZSkKK3sKKyAgc3RydWN0IHF1b3Rpbmdfb3B0aW9ucyBvID0gZGVmYXVsdF9xdW90aW5nX29wdGlvbnM7CisgIHNldF9jdXN0b21fcXVvdGluZyAoJm8sIGxlZnRfcXVvdGUsIHJpZ2h0X3F1b3RlKTsKKyAgcmV0dXJuIHF1b3RlYXJnX25fb3B0aW9ucyAobiwgYXJnLCBhcmdzaXplLCAmbyk7Cit9CisKK2NoYXIgKgorcXVvdGVhcmdfY3VzdG9tIChjaGFyIGNvbnN0ICpsZWZ0X3F1b3RlLCBjaGFyIGNvbnN0ICpyaWdodF9xdW90ZSwKKyAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqYXJnKQoreworICByZXR1cm4gcXVvdGVhcmdfbl9jdXN0b20gKDAsIGxlZnRfcXVvdGUsIHJpZ2h0X3F1b3RlLCBhcmcpOworfQorCitjaGFyICoKK3F1b3RlYXJnX2N1c3RvbV9tZW0gKGNoYXIgY29uc3QgKmxlZnRfcXVvdGUsIGNoYXIgY29uc3QgKnJpZ2h0X3F1b3RlLAorICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqYXJnLCBzaXplX3QgYXJnc2l6ZSkKK3sKKyAgcmV0dXJuIHF1b3RlYXJnX25fY3VzdG9tX21lbSAoMCwgbGVmdF9xdW90ZSwgcmlnaHRfcXVvdGUsIGFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc2l6ZSk7Cit9CisKKworLyogVGhlIHF1b3Rpbmcgb3B0aW9uIHVzZWQgYnkgdGhlIGZ1bmN0aW9ucyBvZiBxdW90ZS5oLiAgKi8KK3N0cnVjdCBxdW90aW5nX29wdGlvbnMgcXVvdGVfcXVvdGluZ19vcHRpb25zID0KKyAgeworICAgIGxvY2FsZV9xdW90aW5nX3N0eWxlLAorICAgIDAsCisgICAgeyAwIH0sCisgICAgTlVMTCwgTlVMTAorICB9OworCitjaGFyIGNvbnN0ICoKK3F1b3RlX25fbWVtIChpbnQgbiwgY2hhciBjb25zdCAqYXJnLCBzaXplX3QgYXJnc2l6ZSkKK3sKKyAgcmV0dXJuIHF1b3RlYXJnX25fb3B0aW9ucyAobiwgYXJnLCBhcmdzaXplLCAmcXVvdGVfcXVvdGluZ19vcHRpb25zKTsKK30KKworY2hhciBjb25zdCAqCitxdW90ZV9tZW0gKGNoYXIgY29uc3QgKmFyZywgc2l6ZV90IGFyZ3NpemUpCit7CisgIHJldHVybiBxdW90ZV9uX21lbSAoMCwgYXJnLCBhcmdzaXplKTsKK30KKworY2hhciBjb25zdCAqCitxdW90ZV9uIChpbnQgbiwgY2hhciBjb25zdCAqYXJnKQoreworICByZXR1cm4gcXVvdGVfbl9tZW0gKG4sIGFyZywgU0laRV9NQVgpOworfQorCitjaGFyIGNvbnN0ICoKK3F1b3RlIChjaGFyIGNvbnN0ICphcmcpCit7CisgIHJldHVybiBxdW90ZV9uICgwLCBhcmcpOworfQpkaWZmIC0tZ2l0IGEvbGliL3F1b3RlYXJnLmggYi9saWIvcXVvdGVhcmcuaAppbmRleCAyNGYyNmY3Li5lNmIwOGFiIDEwMDY0NAotLS0gYS9saWIvcXVvdGVhcmcuaAorKysgYi9saWIvcXVvdGVhcmcuaApAQCAtMSwxMiArMSwxMiBAQAogLyogcXVvdGVhcmcuaCAtIHF1b3RlIGFyZ3VtZW50cyBmb3Igb3V0cHV0CiAKLSAgIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwNCBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMiwgMjAwNCwgMjAwNiwgMjAwOC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4KIAotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpAQCAtMTQsOCArMTQsNyBAQAogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKIC8qIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQgPGVnZ2VydEB0d2luc3VuLmNvbT4gKi8KIApAQCAtMjQsMzQgKzIzLDIwOCBAQAogCiAjIGluY2x1ZGUgPHN0ZGRlZi5oPgogCi0vKiBCYXNpYyBxdW90aW5nIHN0eWxlcy4gICovCisvKiBCYXNpYyBxdW90aW5nIHN0eWxlcy4gIEZvciBlYWNoIHN0eWxlLCBhbiBleGFtcGxlIGlzIGdpdmVuIG9uIHRoZQorICAgaW5wdXQgc3RyaW5ncyAic2ltcGxlIiwgIlwwIFx0XG4nXCJcMDMzPyIiPy9cXCIsIGFuZCAiYTpiIiwgdXNpbmcKKyAgIHF1b3RlYXJnX2J1ZmZlciwgcXVvdGVhcmdfbWVtLCBhbmQgcXVvdGVhcmdfY29sb25fbWVtIHdpdGggdGhhdAorICAgc3R5bGUgYW5kIHRoZSBkZWZhdWx0IGZsYWdzIGFuZCBxdW90ZWQgY2hhcmFjdGVycy4gIE5vdGUgdGhhdCB0aGUKKyAgIGV4YW1wbGVzIGFyZSBzaG93biBoZXJlIGFzIHZhbGlkIEMgc3RyaW5ncyByYXRoZXIgdGhhbiB3aGF0CisgICBkaXNwbGF5cyBvbiBhIHRlcm1pbmFsICh3aXRoICI/Py8iIGFzIGEgdHJpZ3JhcGggZm9yICJcXCIpLiAgKi8KIGVudW0gcXVvdGluZ19zdHlsZQogICB7Ci0gICAgLyogT3V0cHV0IG5hbWVzIGFzLWlzIChscyAtLXF1b3Rpbmctc3R5bGU9bGl0ZXJhbCkuICAqLworICAgIC8qIE91dHB1dCBuYW1lcyBhcy1pcyAobHMgLS1xdW90aW5nLXN0eWxlPWxpdGVyYWwpLiAgQ2FuIHJlc3VsdCBpbgorICAgICAgIGVtYmVkZGVkIG51bGwgYnl0ZXMgaWYgUUFfRUxJREVfTlVMTF9CWVRFUyBpcyBub3QgaW4KKyAgICAgICBlZmZlY3QuCisKKyAgICAgICBxdW90ZWFyZ19idWZmZXI6CisgICAgICAgInNpbXBsZSIsICJcMCBcdFxuJ1wiXDAzMz8/L1xcIiwgImE6YiIKKyAgICAgICBxdW90ZWFyZzoKKyAgICAgICAic2ltcGxlIiwgIiBcdFxuJ1wiXDAzMz8/L1xcIiwgImE6YiIKKyAgICAgICBxdW90ZWFyZ19jb2xvbjoKKyAgICAgICAic2ltcGxlIiwgIiBcdFxuJ1wiXDAzMz8/L1xcIiwgImE6YiIKKyAgICAqLwogICAgIGxpdGVyYWxfcXVvdGluZ19zdHlsZSwKIAogICAgIC8qIFF1b3RlIG5hbWVzIGZvciB0aGUgc2hlbGwgaWYgdGhleSBjb250YWluIHNoZWxsIG1ldGFjaGFyYWN0ZXJzCi0gICAgICAgb3Igd291bGQgY2F1c2UgYW1iaWd1b3VzIG91dHB1dCAobHMgLS1xdW90aW5nLXN0eWxlPXNoZWxsKS4gICovCisgICAgICAgb3Igd291bGQgY2F1c2UgYW1iaWd1b3VzIG91dHB1dCAobHMgLS1xdW90aW5nLXN0eWxlPXNoZWxsKS4KKyAgICAgICBDYW4gcmVzdWx0IGluIGVtYmVkZGVkIG51bGwgYnl0ZXMgaWYgUUFfRUxJREVfTlVMTF9CWVRFUyBpcyBub3QKKyAgICAgICBpbiBlZmZlY3QuCisKKyAgICAgICBxdW90ZWFyZ19idWZmZXI6CisgICAgICAgInNpbXBsZSIsICInXDAgXHRcbidcXCcnXCJcMDMzPz8vXFwnIiwgImE6YiIKKyAgICAgICBxdW90ZWFyZzoKKyAgICAgICAic2ltcGxlIiwgIicgXHRcbidcXCcnXCJcMDMzPz8vXFwnIiwgImE6YiIKKyAgICAgICBxdW90ZWFyZ19jb2xvbjoKKyAgICAgICAic2ltcGxlIiwgIicgXHRcbidcXCcnXCJcMDMzPz8vXFwnIiwgIidhOmInIgorICAgICovCiAgICAgc2hlbGxfcXVvdGluZ19zdHlsZSwKIAogICAgIC8qIFF1b3RlIG5hbWVzIGZvciB0aGUgc2hlbGwsIGV2ZW4gaWYgdGhleSB3b3VsZCBub3JtYWxseSBub3QKLSAgICAgICByZXF1aXJlIHF1b3RpbmcgKGxzIC0tcXVvdGluZy1zdHlsZT1zaGVsbC1hbHdheXMpLiAgKi8KKyAgICAgICByZXF1aXJlIHF1b3RpbmcgKGxzIC0tcXVvdGluZy1zdHlsZT1zaGVsbC1hbHdheXMpLiAgQ2FuIHJlc3VsdAorICAgICAgIGluIGVtYmVkZGVkIG51bGwgYnl0ZXMgaWYgUUFfRUxJREVfTlVMTF9CWVRFUyBpcyBub3QgaW4gZWZmZWN0LgorICAgICAgIEJlaGF2ZXMgbGlrZSBzaGVsbF9xdW90aW5nX3N0eWxlIGlmIFFBX0VMSURFX09VVEVSX1FVT1RFUyBpcyBpbgorICAgICAgIGVmZmVjdC4KKworICAgICAgIHF1b3RlYXJnX2J1ZmZlcjoKKyAgICAgICAiJ3NpbXBsZSciLCAiJ1wwIFx0XG4nXFwnJ1wiXDAzMz8/L1xcJyIsICInYTpiJyIKKyAgICAgICBxdW90ZWFyZzoKKyAgICAgICAiJ3NpbXBsZSciLCAiJyBcdFxuJ1xcJydcIlwwMzM/Py9cXCciLCAiJ2E6YiciCisgICAgICAgcXVvdGVhcmdfY29sb246CisgICAgICAgIidzaW1wbGUnIiwgIicgXHRcbidcXCcnXCJcMDMzPz8vXFwnIiwgIidhOmInIgorICAgICovCiAgICAgc2hlbGxfYWx3YXlzX3F1b3Rpbmdfc3R5bGUsCiAKLSAgICAvKiBRdW90ZSBuYW1lcyBhcyBmb3IgYSBDIGxhbmd1YWdlIHN0cmluZyAobHMgLS1xdW90aW5nLXN0eWxlPWMpLiAgKi8KKyAgICAvKiBRdW90ZSBuYW1lcyBhcyBmb3IgYSBDIGxhbmd1YWdlIHN0cmluZyAobHMgLS1xdW90aW5nLXN0eWxlPWMpLgorICAgICAgIEJlaGF2ZXMgbGlrZSBjX21heWJlX3F1b3Rpbmdfc3R5bGUgaWYgUUFfRUxJREVfT1VURVJfUVVPVEVTIGlzCisgICAgICAgaW4gZWZmZWN0LiAgU3BsaXQgaW50byBjb25zZWN1dGl2ZSBzdHJpbmdzIGlmCisgICAgICAgUUFfU1BMSVRfVFJJR1JBUEhTLgorCisgICAgICAgcXVvdGVhcmdfYnVmZmVyOgorICAgICAgICJcInNpbXBsZVwiIiwgIlwiXFwwIFxcdFxcbidcXFwiXFwwMzM/Py9cXFxcXCIiLCAiXCJhOmJcIiIKKyAgICAgICBxdW90ZWFyZzoKKyAgICAgICAiXCJzaW1wbGVcIiIsICJcIlxcMCBcXHRcXG4nXFxcIlxcMDMzPz8vXFxcXFwiIiwgIlwiYTpiXCIiCisgICAgICAgcXVvdGVhcmdfY29sb246CisgICAgICAgIlwic2ltcGxlXCIiLCAiXCJcXDAgXFx0XFxuJ1xcXCJcXDAzMz8/L1xcXFxcIiIsICJcImFcXDpiXCIiCisgICAgKi8KICAgICBjX3F1b3Rpbmdfc3R5bGUsCiAKICAgICAvKiBMaWtlIGNfcXVvdGluZ19zdHlsZSBleGNlcHQgb21pdCB0aGUgc3Vycm91bmRpbmcgZG91YmxlLXF1b3RlCi0gICAgICAgY2hhcmFjdGVycyAobHMgLS1xdW90aW5nLXN0eWxlPWVzY2FwZSkuICAqLworICAgICAgIGNoYXJhY3RlcnMgaWYgbm8gcXVvdGVkIGNoYXJhY3RlcnMgYXJlIGVuY291bnRlcmVkLgorCisgICAgICAgcXVvdGVhcmdfYnVmZmVyOgorICAgICAgICJzaW1wbGUiLCAiXCJcXDAgXFx0XFxuJ1xcXCJcXDAzMz8/L1xcXFxcIiIsICJhOmIiCisgICAgICAgcXVvdGVhcmc6CisgICAgICAgInNpbXBsZSIsICJcIlxcMCBcXHRcXG4nXFxcIlxcMDMzPz8vXFxcXFwiIiwgImE6YiIKKyAgICAgICBxdW90ZWFyZ19jb2xvbjoKKyAgICAgICAic2ltcGxlIiwgIlwiXFwwIFxcdFxcbidcXFwiXFwwMzM/Py9cXFxcXCIiLCAiXCJhOmJcIiIKKyAgICAqLworICAgIGNfbWF5YmVfcXVvdGluZ19zdHlsZSwKKworICAgIC8qIExpa2UgY19xdW90aW5nX3N0eWxlIGV4Y2VwdCBhbHdheXMgb21pdCB0aGUgc3Vycm91bmRpbmcKKyAgICAgICBkb3VibGUtcXVvdGUgY2hhcmFjdGVycyBhbmQgaWdub3JlIFFBX1NQTElUX1RSSUdSQVBIUworICAgICAgIChscyAtLXF1b3Rpbmctc3R5bGU9ZXNjYXBlKS4KKworICAgICAgIHF1b3RlYXJnX2J1ZmZlcjoKKyAgICAgICAic2ltcGxlIiwgIlxcMCBcXHRcXG4nXCJcXDAzMz8/L1xcXFwiLCAiYTpiIgorICAgICAgIHF1b3RlYXJnOgorICAgICAgICJzaW1wbGUiLCAiXFwwIFxcdFxcbidcIlxcMDMzPz8vXFxcXCIsICJhOmIiCisgICAgICAgcXVvdGVhcmdfY29sb246CisgICAgICAgInNpbXBsZSIsICJcXDAgXFx0XFxuJ1wiXFwwMzM/Py9cXFxcIiwgImFcXDpiIgorICAgICovCiAgICAgZXNjYXBlX3F1b3Rpbmdfc3R5bGUsCiAKLSAgICAvKiBMaWtlIGNsb2NhbGVfcXVvdGluZ19zdHlsZSwgYnV0IHF1b3RlIGBsaWtlIHRoaXMnIGluc3RlYWQgb2YKLSAgICAgICAibGlrZSB0aGlzIiBpbiB0aGUgZGVmYXVsdCBDIGxvY2FsZSAobHMgLS1xdW90aW5nLXN0eWxlPWxvY2FsZSkuICAqLworICAgIC8qIExpa2UgY2xvY2FsZV9xdW90aW5nX3N0eWxlLCBidXQgdXNlIHNpbmdsZSBxdW90ZXMgaW4gdGhlCisgICAgICAgZGVmYXVsdCBDIGxvY2FsZSBvciBpZiB0aGUgcHJvZ3JhbSBkb2VzIG5vdCB1c2UgZ2V0dGV4dAorICAgICAgIChscyAtLXF1b3Rpbmctc3R5bGU9bG9jYWxlKS4gIEZvciBVVEYtOCBsb2NhbGVzLCBxdW90ZQorICAgICAgIGNoYXJhY3RlcnMgd2lsbCB1c2UgVW5pY29kZS4KKworICAgICAgIExDX01FU1NBR0VTPUMKKyAgICAgICBxdW90ZWFyZ19idWZmZXI6CisgICAgICAgImBzaW1wbGUnIiwgImBcXDAgXFx0XFxuXFwnXCJcXDAzMz8/L1xcXFwnIiwgImBhOmInIgorICAgICAgIHF1b3RlYXJnOgorICAgICAgICJgc2ltcGxlJyIsICJgXFwwIFxcdFxcblxcJ1wiXFwwMzM/Py9cXFxcJyIsICJgYTpiJyIKKyAgICAgICBxdW90ZWFyZ19jb2xvbjoKKyAgICAgICAiYHNpbXBsZSciLCAiYFxcMCBcXHRcXG5cXCdcIlxcMDMzPz8vXFxcXCciLCAiYGFcXDpiJyIKKworICAgICAgIExDX01FU1NBR0VTPXB0X1BULnV0ZjgKKyAgICAgICBxdW90ZWFyZ19idWZmZXI6CisgICAgICAgIlwzMDJcMjUzc2ltcGxlXDMwMlwyNzMiLAorICAgICAgICJcMzAyXDI1M1xcMCBcXHRcXG4nXCJcXDAzMz8/L1xcXFxcMzAyXDI1MyIsICJcMzAyXDI1M2E6YlwzMDJcMjczIgorICAgICAgIHF1b3RlYXJnOgorICAgICAgICJcMzAyXDI1M3NpbXBsZVwzMDJcMjczIiwKKyAgICAgICAiXDMwMlwyNTNcXDAgXFx0XFxuJ1wiXFwwMzM/Py9cXFxcXDMwMlwyNTMiLCAiXDMwMlwyNTNhOmJcMzAyXDI3MyIKKyAgICAgICBxdW90ZWFyZ19jb2xvbjoKKyAgICAgICAiXDMwMlwyNTNzaW1wbGVcMzAyXDI3MyIsCisgICAgICAgIlwzMDJcMjUzXFwwIFxcdFxcbidcIlxcMDMzPz8vXFxcXFwzMDJcMjUzIiwgIlwzMDJcMjUzYVxcOmJcMzAyXDI3MyIKKyAgICAqLwogICAgIGxvY2FsZV9xdW90aW5nX3N0eWxlLAogCiAgICAgLyogTGlrZSBjX3F1b3Rpbmdfc3R5bGUgZXhjZXB0IHVzZSBxdW90YXRpb24gbWFya3MgYXBwcm9wcmlhdGUgZm9yCi0gICAgICAgdGhlIGxvY2FsZSAobHMgLS1xdW90aW5nLXN0eWxlPWNsb2NhbGUpLiAgKi8KLSAgICBjbG9jYWxlX3F1b3Rpbmdfc3R5bGUKKyAgICAgICB0aGUgbG9jYWxlIGFuZCBpZ25vcmUgUUFfU1BMSVRfVFJJR1JBUEhTCisgICAgICAgKGxzIC0tcXVvdGluZy1zdHlsZT1jbG9jYWxlKS4KKworICAgICAgIExDX01FU1NBR0VTPUMKKyAgICAgICBxdW90ZWFyZ19idWZmZXI6CisgICAgICAgIlwic2ltcGxlXCIiLCAiXCJcXDAgXFx0XFxuJ1xcXCJcXDAzMz8/L1xcXFxcIiIsICJcImE6YlwiIgorICAgICAgIHF1b3RlYXJnOgorICAgICAgICJcInNpbXBsZVwiIiwgIlwiXFwwIFxcdFxcbidcXFwiXFwwMzM/Py9cXFxcXCIiLCAiXCJhOmJcIiIKKyAgICAgICBxdW90ZWFyZ19jb2xvbjoKKyAgICAgICAiXCJzaW1wbGVcIiIsICJcIlxcMCBcXHRcXG4nXFxcIlxcMDMzPz8vXFxcXFwiIiwgIlwiYVxcOmJcIiIKKworICAgICAgIExDX01FU1NBR0VTPXB0X1BULnV0ZjgKKyAgICAgICBxdW90ZWFyZ19idWZmZXI6CisgICAgICAgIlwzMDJcMjUzc2ltcGxlXDMwMlwyNzMiLAorICAgICAgICJcMzAyXDI1M1xcMCBcXHRcXG4nXCJcXDAzMz8/L1xcXFxcMzAyXDI1MyIsICJcMzAyXDI1M2E6YlwzMDJcMjczIgorICAgICAgIHF1b3RlYXJnOgorICAgICAgICJcMzAyXDI1M3NpbXBsZVwzMDJcMjczIiwKKyAgICAgICAiXDMwMlwyNTNcXDAgXFx0XFxuJ1wiXFwwMzM/Py9cXFxcXDMwMlwyNTMiLCAiXDMwMlwyNTNhOmJcMzAyXDI3MyIKKyAgICAgICBxdW90ZWFyZ19jb2xvbjoKKyAgICAgICAiXDMwMlwyNTNzaW1wbGVcMzAyXDI3MyIsCisgICAgICAgIlwzMDJcMjUzXFwwIFxcdFxcbidcIlxcMDMzPz8vXFxcXFwzMDJcMjUzIiwgIlwzMDJcMjUzYVxcOmJcMzAyXDI3MyIKKyAgICAqLworICAgIGNsb2NhbGVfcXVvdGluZ19zdHlsZSwKKworICAgIC8qIExpa2UgY2xvY2FsZV9xdW90aW5nX3N0eWxlIGV4Y2VwdCB1c2UgdGhlIGN1c3RvbSBxdW90YXRpb24gbWFya3MKKyAgICAgICBzZXQgYnkgc2V0X2N1c3RvbV9xdW90aW5nLiAgSWYgY3VzdG9tIHF1b3RhdGlvbiBtYXJrcyBhcmUgbm90CisgICAgICAgc2V0LCB0aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLgorCisgICAgICAgbGVmdF9xdW90ZSA9IHJpZ2h0X3F1b3RlID0gIiciCisgICAgICAgcXVvdGVhcmdfYnVmZmVyOgorICAgICAgICInc2ltcGxlJyIsICInXFwwIFxcdFxcblxcJ1wiXFwwMzM/Py9cXFxcJyIsICInYTpiJyIKKyAgICAgICBxdW90ZWFyZzoKKyAgICAgICAiJ3NpbXBsZSciLCAiJ1xcMCBcXHRcXG5cXCdcIlxcMDMzPz8vXFxcXCciLCAiJ2E6YiciCisgICAgICAgcXVvdGVhcmdfY29sb246CisgICAgICAgIidzaW1wbGUnIiwgIidcXDAgXFx0XFxuXFwnXCJcXDAzMz8/L1xcXFwnIiwgIidhXFw6YiciCisKKyAgICAgICBsZWZ0X3F1b3RlID0gIigiIGFuZCByaWdodF9xdW90ZSA9ICIpIgorICAgICAgIHF1b3RlYXJnX2J1ZmZlcjoKKyAgICAgICAiKHNpbXBsZSkiLCAiKFxcMCBcXHRcXG4nXCJcXDAzMz8/L1xcXFwpIiwgIihhOmIpIgorICAgICAgIHF1b3RlYXJnOgorICAgICAgICIoc2ltcGxlKSIsICIoXFwwIFxcdFxcbidcIlxcMDMzPz8vXFxcXCkiLCAiKGE6YikiCisgICAgICAgcXVvdGVhcmdfY29sb246CisgICAgICAgIihzaW1wbGUpIiwgIihcXDAgXFx0XFxuJ1wiXFwwMzM/Py9cXFxcKSIsICIoYVxcOmIpIgorCisgICAgICAgbGVmdF9xdW90ZSA9ICI6IiBhbmQgcmlnaHRfcXVvdGUgPSAiICIKKyAgICAgICBxdW90ZWFyZ19idWZmZXI6CisgICAgICAgIjpzaW1wbGUgIiwgIjpcXDBcXCBcXHRcXG4nXCJcXDAzMz8/L1xcXFwgIiwgIjphOmIgIgorICAgICAgIHF1b3RlYXJnOgorICAgICAgICI6c2ltcGxlICIsICI6XFwwXFwgXFx0XFxuJ1wiXFwwMzM/Py9cXFxcICIsICI6YTpiICIKKyAgICAgICBxdW90ZWFyZ19jb2xvbjoKKyAgICAgICAiOnNpbXBsZSAiLCAiOlxcMFxcIFxcdFxcbidcIlxcMDMzPz8vXFxcXCAiLCAiOmFcXDpiICIKKworICAgICAgIGxlZnRfcXVvdGUgPSAiXCInIiBhbmQgcmlnaHRfcXVvdGUgPSAiJ1wiIgorICAgICAgIE5vdGljZSB0aGF0IHRoaXMgaXMgdHJlYXRlZCBhcyBhIHNpbmdsZSBsZXZlbCBvZiBxdW90ZXMgb3IgdHdvCisgICAgICAgbGV2ZWxzIHdoZXJlIHRoZSBvdXRlciBxdW90ZSBuZWVkIG5vdCBiZSBlc2NhcGVkIHdpdGhpbiB0aGUgaW5uZXIKKyAgICAgICBxdW90ZXMuICBGb3IgdHdvIGxldmVscyB3aGVyZSB0aGUgb3V0ZXIgcXVvdGUgbXVzdCBiZSBlc2NhcGVkCisgICAgICAgd2l0aGluIHRoZSBpbm5lciBxdW90ZXMsIHlvdSBtdXN0IHVzZSBzZXBhcmF0ZSBxdW90ZWFyZworICAgICAgIGludm9jYXRpb25zLgorICAgICAgIHF1b3RlYXJnX2J1ZmZlcjoKKyAgICAgICAiXCInc2ltcGxlJ1wiIiwgIlwiJ1xcMCBcXHRcXG5cXCdcIlxcMDMzPz8vXFxcXCdcIiIsICJcIidhOmInXCIiCisgICAgICAgcXVvdGVhcmc6CisgICAgICAgIlwiJ3NpbXBsZSdcIiIsICJcIidcXDAgXFx0XFxuXFwnXCJcXDAzMz8/L1xcXFwnXCIiLCAiXCInYTpiJ1wiIgorICAgICAgIHF1b3RlYXJnX2NvbG9uOgorICAgICAgICJcIidzaW1wbGUnXCIiLCAiXCInXFwwIFxcdFxcblxcJ1wiXFwwMzM/Py9cXFxcJ1wiIiwgIlwiJ2FcXDpiJ1wiIgorICAgICovCisgICAgY3VzdG9tX3F1b3Rpbmdfc3R5bGUKKyAgfTsKKworLyogRmxhZ3MgZm9yIHVzZSBpbiBzZXRfcXVvdGluZ19mbGFncy4gICovCitlbnVtIHF1b3RpbmdfZmxhZ3MKKyAgeworICAgIC8qIEFsd2F5cyBlbGlkZSBudWxsIGJ5dGVzIGZyb20gc3R5bGVzIHRoYXQgZG8gbm90IHF1b3RlIHRoZW0sCisgICAgICAgZXZlbiB3aGVuIHRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdCBpcyBhdmFpbGFibGUgdG8gdGhlCisgICAgICAgY2FsbGVyLiAgKi8KKyAgICBRQV9FTElERV9OVUxMX0JZVEVTID0gMHgwMSwKKworICAgIC8qIE9taXQgdGhlIHN1cnJvdW5kaW5nIHF1b3RlIGNoYXJhY3RlcnMgaWYgbm8gZXNjYXBlZCBjaGFyYWN0ZXJzCisgICAgICAgYXJlIGVuY291bnRlcmVkLiAgTm90ZSB0aGF0IGlmIG5vIG90aGVyIGNoYXJhY3RlciBuZWVkcworICAgICAgIGVzY2FwaW5nLCB0aGVuIG5laXRoZXIgZG9lcyB0aGUgZXNjYXBlIGNoYXJhY3Rlci4gICovCisgICAgUUFfRUxJREVfT1VURVJfUVVPVEVTID0gMHgwMiwKKworICAgIC8qIEluIHRoZSBjX3F1b3Rpbmdfc3R5bGUgYW5kIGNfbWF5YmVfcXVvdGluZ19zdHlsZSwgc3BsaXQgQU5TSQorICAgICAgIHRyaWdyYXBoIHNlcXVlbmNlcyBpbnRvIGNvbmNhdGVuYXRlZCBzdHJpbmdzIChmb3IgZXhhbXBsZSwKKyAgICAgICAiPyIiPy8iIHJhdGhlciB0aGFuICI/Py8iLCB3aGljaCBjb3VsZCBiZSBjb25mdXNlZCB3aXRoCisgICAgICAgIlxcIikuICAqLworICAgIFFBX1NQTElUX1RSSUdSQVBIUyA9IDB4MDQKICAgfTsKIAogLyogRm9yIG5vdywgLS1xdW90aW5nLXN0eWxlPWxpdGVyYWwgaXMgdGhlIGRlZmF1bHQsIGJ1dCB0aGlzIG1heSBjaGFuZ2UuICAqLwpAQCAtODQsOSArMjU3LDMwIEBACiAgICBzZXQgdGhlIHZhbHVlIG9mIHRoZSBxdW90aW5nIG9wdGlvbnMgZm9yIGNoYXJhY3RlciBDIHRvIEkuCiAgICBSZXR1cm4gdGhlIG9sZCB2YWx1ZS4gIEN1cnJlbnRseSwgdGhlIG9ubHkgdmFsdWVzIGRlZmluZWQgZm9yIEkgYXJlCiAgICAwICh0aGUgZGVmYXVsdCkgYW5kIDEgKHdoaWNoIG1lYW5zIHRvIHF1b3RlIHRoZSBjaGFyYWN0ZXIgZXZlbiBpZgotICAgaXQgd291bGQgbm90IG90aGVyd2lzZSBiZSBxdW90ZWQpLiAgKi8KKyAgIGl0IHdvdWxkIG5vdCBvdGhlcndpc2UgYmUgcXVvdGVkKS4gIEMgbXVzdCBuZXZlciBiZSBhIGRpZ2l0IG9yIGEKKyAgIGxldHRlciB0aGF0IGhhcyBzcGVjaWFsIG1lYW5pbmcgYWZ0ZXIgYSBiYWNrc2xhc2ggKGZvciBleGFtcGxlLCAiXHQiCisgICBmb3IgdGFiKS4gICovCiBpbnQgc2V0X2NoYXJfcXVvdGluZyAoc3RydWN0IHF1b3Rpbmdfb3B0aW9ucyAqbywgY2hhciBjLCBpbnQgaSk7CiAKKy8qIEluIE8gKG9yIGluIHRoZSBkZWZhdWx0IGlmIE8gaXMgbnVsbCksCisgICBzZXQgdGhlIHZhbHVlIG9mIHRoZSBxdW90aW5nIG9wdGlvbnMgZmxhZyB0byBJLCB3aGljaCBjYW4gYmUgYQorICAgYml0d2lzZSBjb21iaW5hdGlvbiBvZiBlbnVtIHF1b3RpbmdfZmxhZ3MsIG9yIDAgZm9yIGRlZmF1bHQKKyAgIGJlaGF2aW9yLiAgUmV0dXJuIHRoZSBvbGQgdmFsdWUuICAqLworaW50IHNldF9xdW90aW5nX2ZsYWdzIChzdHJ1Y3QgcXVvdGluZ19vcHRpb25zICpvLCBpbnQgaSk7CisKKy8qIEluIE8gKG9yIGluIHRoZSBkZWZhdWx0IGlmIE8gaXMgbnVsbCksCisgICBzZXQgdGhlIHZhbHVlIG9mIHRoZSBxdW90aW5nIHN0eWxlIHRvIGN1c3RvbV9xdW90aW5nX3N0eWxlLAorICAgc2V0IHRoZSBsZWZ0IHF1b3RlIHRvIExFRlRfUVVPVEUsIGFuZCBzZXQgdGhlIHJpZ2h0IHF1b3RlIHRvCisgICBSSUdIVF9RVU9URS4gIEVhY2ggb2YgTEVGVF9RVU9URSBhbmQgUklHSFRfUVVPVEUgbXVzdCBiZQorICAgbnVsbC10ZXJtaW5hdGVkIGFuZCBjYW4gYmUgdGhlIGVtcHR5IHN0cmluZy4gIEJlY2F1c2UgYmFja3NsYXNoZXMgYXJlCisgICB1c2VkIGZvciBlc2NhcGluZywgaXQgZG9lcyBub3QgbWFrZSBzZW5zZSBmb3IgUklHSFRfUVVPVEUgdG8gY29udGFpbgorICAgYSBiYWNrc2xhc2guICBSSUdIVF9RVU9URSBtdXN0IG5vdCBiZWdpbiB3aXRoIGEgZGlnaXQgb3IgYSBsZXR0ZXIKKyAgIHRoYXQgaGFzIHNwZWNpYWwgbWVhbmluZyBhZnRlciBhIGJhY2tzbGFzaCAoZm9yIGV4YW1wbGUsICJcdCIgZm9yCisgICB0YWIpLiAgKi8KK3ZvaWQgc2V0X2N1c3RvbV9xdW90aW5nIChzdHJ1Y3QgcXVvdGluZ19vcHRpb25zICpvLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKmxlZnRfcXVvdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqcmlnaHRfcXVvdGUpOworCiAvKiBQbGFjZSBpbnRvIGJ1ZmZlciBCVUZGRVIgKG9mIHNpemUgQlVGRkVSU0laRSkgYSBxdW90ZWQgdmVyc2lvbiBvZgogICAgYXJndW1lbnQgQVJHIChvZiBzaXplIEFSR1NJWkUpLCB1c2luZyBPIHRvIGNvbnRyb2wgcXVvdGluZy4KICAgIElmIE8gaXMgbnVsbCwgdXNlIHRoZSBkZWZhdWx0LgpAQCAtOTQsMjYgKzI4OCw0OSBAQAogICAgc2l6ZSBvZiB0aGUgb3V0cHV0LCBub3QgY291bnRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwuCiAgICBJZiBCVUZGRVJTSVpFIGlzIHRvbyBzbWFsbCB0byBzdG9yZSB0aGUgb3V0cHV0IHN0cmluZywgcmV0dXJuIHRoZQogICAgdmFsdWUgdGhhdCB3b3VsZCBoYXZlIGJlZW4gcmV0dXJuZWQgaGFkIEJVRkZFUlNJWkUgYmVlbiBsYXJnZSBlbm91Z2guCi0gICBJZiBBUkdTSVpFIGlzIC0xLCB1c2UgdGhlIHN0cmluZyBsZW5ndGggb2YgdGhlIGFyZ3VtZW50IGZvciBBUkdTSVpFLiAgKi8KKyAgIElmIEFSR1NJWkUgaXMgLTEsIHVzZSB0aGUgc3RyaW5nIGxlbmd0aCBvZiB0aGUgYXJndW1lbnQgZm9yIEFSR1NJWkUuCisgICBPbiBvdXRwdXQsIEJVRkZFUiBtaWdodCBjb250YWluIGVtYmVkZGVkIG51bGwgYnl0ZXMgaWYgQVJHU0laRSB3YXMKKyAgIG5vdCAtMSwgdGhlIHN0eWxlIG9mIE8gZG9lcyBub3QgdXNlIGJhY2tzbGFzaCBlc2NhcGVzLCBhbmQgdGhlCisgICBmbGFncyBvZiBPIGRvIG5vdCByZXF1ZXN0IGVsaXNpb24gb2YgbnVsbCBieXRlcy4qLwogc2l6ZV90IHF1b3RlYXJnX2J1ZmZlciAoY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmZmVyc2l6ZSwKLQkJCWNoYXIgY29uc3QgKmFyZywgc2l6ZV90IGFyZ3NpemUsCi0JCQlzdHJ1Y3QgcXVvdGluZ19vcHRpb25zIGNvbnN0ICpvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKmFyZywgc2l6ZV90IGFyZ3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcXVvdGluZ19vcHRpb25zIGNvbnN0ICpvKTsKIAogLyogTGlrZSBxdW90ZWFyZ19idWZmZXIsIGV4Y2VwdCByZXR1cm4gdGhlIHJlc3VsdCBpbiBhIG5ld2x5IGFsbG9jYXRlZAotICAgYnVmZmVyLiAgSXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGZyZWUgdGhlIHJlc3VsdC4gICovCisgICBidWZmZXIuICBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZnJlZSB0aGUgcmVzdWx0LiAgVGhlCisgICByZXN1bHQgd2lsbCBub3QgY29udGFpbiBlbWJlZGRlZCBudWxsIGJ5dGVzLiAgKi8KIGNoYXIgKnF1b3RlYXJnX2FsbG9jIChjaGFyIGNvbnN0ICphcmcsIHNpemVfdCBhcmdzaXplLAotCQkgICAgICBzdHJ1Y3QgcXVvdGluZ19vcHRpb25zIGNvbnN0ICpvKTsKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcXVvdGluZ19vcHRpb25zIGNvbnN0ICpvKTsKKworLyogTGlrZSBxdW90ZWFyZ19hbGxvYywgZXhjZXB0IHRoYXQgdGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0LAorICAgZXhjbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUsIGlzIHN0b3JlZCBpbnRvIFNJWkUgaWYgaXQgaXMKKyAgIG5vbi1OVUxMLiAgVGhlIHJlc3VsdCBtaWdodCBjb250YWluIGVtYmVkZGVkIG51bGwgYnl0ZXMgaWYgQVJHU0laRQorICAgd2FzIG5vdCAtMSwgU0laRSB3YXMgbm90IE5VTEwsIHRoZSBzdHlsZSBvZiBPIGRvZXMgbm90IHVzZQorICAgYmFja3NsYXNoIGVzY2FwZXMsIGFuZCB0aGUgZmxhZ3Mgb2YgTyBkbyBub3QgcmVxdWVzdCBlbGlzaW9uIG9mCisgICBudWxsIGJ5dGVzLiovCitjaGFyICpxdW90ZWFyZ19hbGxvY19tZW0gKGNoYXIgY29uc3QgKmFyZywgc2l6ZV90IGFyZ3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqc2l6ZSwgc3RydWN0IHF1b3Rpbmdfb3B0aW9ucyBjb25zdCAqbyk7CiAKIC8qIFVzZSBzdG9yYWdlIHNsb3QgTiB0byByZXR1cm4gYSBxdW90ZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIEFSRy4KICAgIFVzZSB0aGUgZGVmYXVsdCBxdW90aW5nIG9wdGlvbnMuCiAgICBUaGUgcmV0dXJuZWQgdmFsdWUgcG9pbnRzIHRvIHN0YXRpYyBzdG9yYWdlIHRoYXQgY2FuIGJlCiAgICByZXVzZWQgYnkgdGhlIG5leHQgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgdmFsdWUgb2YgTi4KLSAgIE4gbXVzdCBiZSBub25uZWdhdGl2ZS4gICovCisgICBOIG11c3QgYmUgbm9ubmVnYXRpdmUuICBUaGUgb3V0cHV0IG9mIGFsbCBmdW5jdGlvbnMgaW4gdGhlCisgICBxdW90ZWFyZ19uIGZhbWlseSBhcmUgZ3VhcmFudGVlZCB0byBub3QgY29udGFpbiBlbWJlZGRlZCBudWxsCisgICBieXRlcy4qLwogY2hhciAqcXVvdGVhcmdfbiAoaW50IG4sIGNoYXIgY29uc3QgKmFyZyk7CiAKIC8qIEVxdWl2YWxlbnQgdG8gcXVvdGVhcmdfbiAoMCwgQVJHKS4gICovCiBjaGFyICpxdW90ZWFyZyAoY2hhciBjb25zdCAqYXJnKTsKIAorLyogVXNlIHN0b3JhZ2Ugc2xvdCBOIHRvIHJldHVybiBhIHF1b3RlZCB2ZXJzaW9uIG9mIHRoZSBhcmd1bWVudCBBUkcKKyAgIG9mIHNpemUgQVJHU0laRS4gIFRoaXMgaXMgbGlrZSBxdW90ZWFyZ19uIChOLCBBUkcpLCBleGNlcHQgaXQgY2FuCisgICBxdW90ZSBudWxsIGJ5dGVzLiAgKi8KK2NoYXIgKnF1b3RlYXJnX25fbWVtIChpbnQgbiwgY2hhciBjb25zdCAqYXJnLCBzaXplX3QgYXJnc2l6ZSk7CisKKy8qIEVxdWl2YWxlbnQgdG8gcXVvdGVhcmdfbl9tZW0gKDAsIEFSRywgQVJHU0laRSkuICAqLworY2hhciAqcXVvdGVhcmdfbWVtIChjaGFyIGNvbnN0ICphcmcsIHNpemVfdCBhcmdzaXplKTsKKwogLyogVXNlIHN0eWxlIFMgYW5kIHN0b3JhZ2Ugc2xvdCBOIHRvIHJldHVybiBhIHF1b3RlZCB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgQVJHLgogICAgVGhpcyBpcyBsaWtlIHF1b3RlYXJnX24gKE4sIEFSRyksIGV4Y2VwdCB0aGF0IGl0IHVzZXMgUyB3aXRoIG5vIG90aGVyCiAgICBvcHRpb25zIHRvIHNwZWNpZnkgdGhlIHF1b3RpbmcgbWV0aG9kLiAgKi8KQEAgLTEyMywxNSArMzQwLDUyIEBACiAgICBhcmd1bWVudCBBUkcgb2Ygc2l6ZSBBUkdTSVpFLiAgVGhpcyBpcyBsaWtlIHF1b3RlYXJnX25fc3R5bGUKICAgIChOLCBTLCBBUkcpLCBleGNlcHQgaXQgY2FuIHF1b3RlIG51bGwgYnl0ZXMuICAqLwogY2hhciAqcXVvdGVhcmdfbl9zdHlsZV9tZW0gKGludCBuLCBlbnVtIHF1b3Rpbmdfc3R5bGUgcywKLQkJCSAgICBjaGFyIGNvbnN0ICphcmcsIHNpemVfdCBhcmdzaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICphcmcsIHNpemVfdCBhcmdzaXplKTsKIAogLyogRXF1aXZhbGVudCB0byBxdW90ZWFyZ19uX3N0eWxlICgwLCBTLCBBUkcpLiAgKi8KIGNoYXIgKnF1b3RlYXJnX3N0eWxlIChlbnVtIHF1b3Rpbmdfc3R5bGUgcywgY2hhciBjb25zdCAqYXJnKTsKIAotLyogTGlrZSBxdW90ZWFyZyAoQVJHKSwgZXhjZXB0IGFsc28gcXVvdGUgYW55IGluc3RhbmNlcyBvZiBDSC4gICovCisvKiBFcXVpdmFsZW50IHRvIHF1b3RlYXJnX25fc3R5bGVfbWVtICgwLCBTLCBBUkcsIEFSR1NJWkUpLiAgKi8KK2NoYXIgKnF1b3RlYXJnX3N0eWxlX21lbSAoZW51bSBxdW90aW5nX3N0eWxlIHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKmFyZywgc2l6ZV90IGFyZ3NpemUpOworCisvKiBMaWtlIHF1b3RlYXJnIChBUkcpLCBleGNlcHQgYWxzbyBxdW90ZSBhbnkgaW5zdGFuY2VzIG9mIENILgorICAgU2VlIHNldF9jaGFyX3F1b3RpbmcgZm9yIGEgZGVzY3JpcHRpb24gb2YgYWNjZXB0YWJsZSBDSCB2YWx1ZXMuICAqLwogY2hhciAqcXVvdGVhcmdfY2hhciAoY2hhciBjb25zdCAqYXJnLCBjaGFyIGNoKTsKIAorLyogTGlrZSBxdW90ZWFyZ19jaGFyIChBUkcsIENIKSwgZXhjZXB0IGl0IGNhbiBxdW90ZSBudWxsIGJ5dGVzLiAgKi8KK2NoYXIgKnF1b3RlYXJnX2NoYXJfbWVtIChjaGFyIGNvbnN0ICphcmcsIHNpemVfdCBhcmdzaXplLCBjaGFyIGNoKTsKKwogLyogRXF1aXZhbGVudCB0byBxdW90ZWFyZ19jaGFyIChBUkcsICc6JykuICAqLwogY2hhciAqcXVvdGVhcmdfY29sb24gKGNoYXIgY29uc3QgKmFyZyk7CiAKKy8qIExpa2UgcXVvdGVhcmdfY29sb24gKEFSRyksIGV4Y2VwdCBpdCBjYW4gcXVvdGUgbnVsbCBieXRlcy4gICovCitjaGFyICpxdW90ZWFyZ19jb2xvbl9tZW0gKGNoYXIgY29uc3QgKmFyZywgc2l6ZV90IGFyZ3NpemUpOworCisvKiBMaWtlIHF1b3RlYXJnX25fc3R5bGUgKE4sIFMsIEFSRykgYnV0IHdpdGggUyBhcyBjdXN0b21fcXVvdGluZ19zdHlsZQorICAgd2l0aCBsZWZ0IHF1b3RlIGFzIExFRlRfUVVPVEUgYW5kIHJpZ2h0IHF1b3RlIGFzIFJJR0hUX1FVT1RFLiAgU2VlCisgICBzZXRfY3VzdG9tX3F1b3RpbmcgZm9yIGEgZGVzY3JpcHRpb24gb2YgYWNjZXB0YWJsZSBMRUZUX1FVT1RFIGFuZAorICAgUklHSFRfUVVPVEUgdmFsdWVzLiAgKi8KK2NoYXIgKnF1b3RlYXJnX25fY3VzdG9tIChpbnQgbiwgY2hhciBjb25zdCAqbGVmdF9xdW90ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICpyaWdodF9xdW90ZSwgY2hhciBjb25zdCAqYXJnKTsKKworLyogTGlrZSBxdW90ZWFyZ19uX2N1c3RvbSAoTiwgTEVGVF9RVU9URSwgUklHSFRfUVVPVEUsIEFSRykgZXhjZXB0IGl0CisgICBjYW4gcXVvdGUgbnVsbCBieXRlcy4gICovCitjaGFyICpxdW90ZWFyZ19uX2N1c3RvbV9tZW0gKGludCBuLCBjaGFyIGNvbnN0ICpsZWZ0X3F1b3RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICpyaWdodF9xdW90ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqYXJnLCBzaXplX3QgYXJnc2l6ZSk7CisKKy8qIEVxdWl2YWxlbnQgdG8gcXVvdGVhcmdfbl9jdXN0b20gKDAsIExFRlRfUVVPVEUsIFJJR0hUX1FVT1RFLCBBUkcpLiAgKi8KK2NoYXIgKnF1b3RlYXJnX2N1c3RvbSAoY2hhciBjb25zdCAqbGVmdF9xdW90ZSwgY2hhciBjb25zdCAqcmlnaHRfcXVvdGUsCisgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKmFyZyk7CisKKy8qIEVxdWl2YWxlbnQgdG8gcXVvdGVhcmdfbl9jdXN0b21fbWVtICgwLCBMRUZUX1FVT1RFLCBSSUdIVF9RVU9URSwgQVJHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSR1NJWkUpLiAgKi8KK2NoYXIgKnF1b3RlYXJnX2N1c3RvbV9tZW0gKGNoYXIgY29uc3QgKmxlZnRfcXVvdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICpyaWdodF9xdW90ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKmFyZywgc2l6ZV90IGFyZ3NpemUpOworCisvKiBGcmVlIGFueSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5LiAgKi8KK3ZvaWQgcXVvdGVhcmdfZnJlZSAodm9pZCk7CisKICNlbmRpZiAvKiAhUVVPVEVBUkdfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYi9yYWlzZS5jIGIvbGliL3JhaXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk3NWRjZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9yYWlzZS5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qIFByb3ZpZGUgYSBub24tdGhyZWFkcyByZXBsYWNlbWVudCBmb3IgdGhlIFBPU0lYIHJhaXNlIGZ1bmN0aW9uLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMywgMjAwNS0yMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIHdyaXR0ZW4gYnkgSmltIE1leWVyaW5nIGFuZCBCcnVubyBIYWlibGUgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlIDxzaWduYWwuaD4KKworI2lmIEhBVkVfUkFJU0UKKy8qIE5hdGl2ZSBXaW5kb3dzIHBsYXRmb3JtLiAgKi8KKworIyBpbmNsdWRlIDxlcnJuby5oPgorCisjIGluY2x1ZGUgIm1zdmMtaW52YWwuaCIKKworIyB1bmRlZiByYWlzZQorCisjIGlmIEhBVkVfTVNWQ19JTlZBTElEX1BBUkFNRVRFUl9IQU5ETEVSCitzdGF0aWMgaW50CityYWlzZV9ub3Rocm93IChpbnQgc2lnKQoreworICBpbnQgcmVzdWx0OworCisgIFRSWV9NU1ZDX0lOVkFMCisgICAgeworICAgICAgcmVzdWx0ID0gcmFpc2UgKHNpZyk7CisgICAgfQorICBDQVRDSF9NU1ZDX0lOVkFMCisgICAgeworICAgICAgcmVzdWx0ID0gLTE7CisgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICB9CisgIERPTkVfTVNWQ19JTlZBTDsKKworICByZXR1cm4gcmVzdWx0OworfQorIyBlbHNlCisjICBkZWZpbmUgcmFpc2Vfbm90aHJvdyByYWlzZQorIyBlbmRpZgorCisjZWxzZQorLyogQW4gb2xkIFVuaXggcGxhdGZvcm0uICAqLworCisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorCisjIGRlZmluZSBycGxfcmFpc2UgcmFpc2UKKworI2VuZGlmCisKK2ludAorcnBsX3JhaXNlIChpbnQgc2lnKQoreworI2lmIEdOVUxJQl9kZWZpbmVkX3NpZ25hbF9ibG9ja2luZyAmJiBHTlVMSUJfZGVmaW5lZF9TSUdQSVBFCisgIGlmIChzaWcgPT0gU0lHUElQRSkKKyAgICByZXR1cm4gX2dsX3JhaXNlX1NJR1BJUEUgKCk7CisjZW5kaWYKKworI2lmIEhBVkVfUkFJU0UKKyAgcmV0dXJuIHJhaXNlX25vdGhyb3cgKHNpZyk7CisjZWxzZQorICByZXR1cm4ga2lsbCAoZ2V0cGlkICgpLCBzaWcpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9saWIvcmF3bWVtY2hyLmMgYi9saWIvcmF3bWVtY2hyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk0YTBlMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9yYXdtZW1jaHIuYwpAQCAtMCwwICsxLDEzNiBAQAorLyogU2VhcmNoaW5nIGluIGEgc3RyaW5nLgorICAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgQyBpbiBTLiAgKi8KK3ZvaWQgKgorcmF3bWVtY2hyIChjb25zdCB2b2lkICpzLCBpbnQgY19pbikKK3sKKyAgLyogT24gMzItYml0IGhhcmR3YXJlLCBjaG9vc2luZyBsb25nd29yZCB0byBiZSBhIDMyLWJpdCB1bnNpZ25lZAorICAgICBsb25nIGluc3RlYWQgb2YgYSA2NC1iaXQgdWludG1heF90IHRlbmRzIHRvIGdpdmUgYmV0dGVyCisgICAgIHBlcmZvcm1hbmNlLiAgT24gNjQtYml0IGhhcmR3YXJlLCB1bnNpZ25lZCBsb25nIGlzIGdlbmVyYWxseSA2NAorICAgICBiaXRzIGFscmVhZHkuICBDaGFuZ2UgdGhpcyB0eXBlZGVmIHRvIGV4cGVyaW1lbnQgd2l0aAorICAgICBwZXJmb3JtYW5jZS4gICovCisgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgbG9uZ3dvcmQ7CisKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqY2hhcl9wdHI7CisgIGNvbnN0IGxvbmd3b3JkICpsb25nd29yZF9wdHI7CisgIGxvbmd3b3JkIHJlcGVhdGVkX29uZTsKKyAgbG9uZ3dvcmQgcmVwZWF0ZWRfYzsKKyAgdW5zaWduZWQgY2hhciBjOworCisgIGMgPSAodW5zaWduZWQgY2hhcikgY19pbjsKKworICAvKiBIYW5kbGUgdGhlIGZpcnN0IGZldyBieXRlcyBieSByZWFkaW5nIG9uZSBieXRlIGF0IGEgdGltZS4KKyAgICAgRG8gdGhpcyB1bnRpbCBDSEFSX1BUUiBpcyBhbGlnbmVkIG9uIGEgbG9uZ3dvcmQgYm91bmRhcnkuICAqLworICBmb3IgKGNoYXJfcHRyID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgczsKKyAgICAgICAoc2l6ZV90KSBjaGFyX3B0ciAlIHNpemVvZiAobG9uZ3dvcmQpICE9IDA7CisgICAgICAgKytjaGFyX3B0cikKKyAgICBpZiAoKmNoYXJfcHRyID09IGMpCisgICAgICByZXR1cm4gKHZvaWQgKikgY2hhcl9wdHI7CisKKyAgbG9uZ3dvcmRfcHRyID0gKGNvbnN0IGxvbmd3b3JkICopIGNoYXJfcHRyOworCisgIC8qIEFsbCB0aGVzZSBlbHVjaWRhdG9yeSBjb21tZW50cyByZWZlciB0byA0LWJ5dGUgbG9uZ3dvcmRzLAorICAgICBidXQgdGhlIHRoZW9yeSBhcHBsaWVzIGVxdWFsbHkgd2VsbCB0byBhbnkgc2l6ZSBsb25nd29yZHMuICAqLworCisgIC8qIENvbXB1dGUgYXV4aWxpYXJ5IGxvbmd3b3JkIHZhbHVlczoKKyAgICAgcmVwZWF0ZWRfb25lIGlzIGEgdmFsdWUgd2hpY2ggaGFzIGEgMSBpbiBldmVyeSBieXRlLgorICAgICByZXBlYXRlZF9jIGhhcyBjIGluIGV2ZXJ5IGJ5dGUuICAqLworICByZXBlYXRlZF9vbmUgPSAweDAxMDEwMTAxOworICByZXBlYXRlZF9jID0gYyB8IChjIDw8IDgpOworICByZXBlYXRlZF9jIHw9IHJlcGVhdGVkX2MgPDwgMTY7CisgIGlmICgweGZmZmZmZmZmVSA8IChsb25nd29yZCkgLTEpCisgICAgeworICAgICAgcmVwZWF0ZWRfb25lIHw9IHJlcGVhdGVkX29uZSA8PCAzMSA8PCAxOworICAgICAgcmVwZWF0ZWRfYyB8PSByZXBlYXRlZF9jIDw8IDMxIDw8IDE7CisgICAgICBpZiAoOCA8IHNpemVvZiAobG9uZ3dvcmQpKQorICAgICAgICB7CisgICAgICAgICAgc2l6ZV90IGk7CisKKyAgICAgICAgICBmb3IgKGkgPSA2NDsgaSA8IHNpemVvZiAobG9uZ3dvcmQpICogODsgaSAqPSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICByZXBlYXRlZF9vbmUgfD0gcmVwZWF0ZWRfb25lIDw8IGk7CisgICAgICAgICAgICAgIHJlcGVhdGVkX2MgfD0gcmVwZWF0ZWRfYyA8PCBpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgIC8qIEluc3RlYWQgb2YgdGhlIHRyYWRpdGlvbmFsIGxvb3Agd2hpY2ggdGVzdHMgZWFjaCBieXRlLCB3ZSB3aWxsCisgICAgIHRlc3QgYSBsb25nd29yZCBhdCBhIHRpbWUuICBUaGUgdHJpY2t5IHBhcnQgaXMgdGVzdGluZyBpZiAqYW55IG9mCisgICAgIHRoZSBmb3VyKiBieXRlcyBpbiB0aGUgbG9uZ3dvcmQgaW4gcXVlc3Rpb24gYXJlIGVxdWFsIHRvIE5VTCBvcgorICAgICBjLiAgV2UgZmlyc3QgdXNlIGFuIHhvciB3aXRoIHJlcGVhdGVkX2MuICBUaGlzIHJlZHVjZXMgdGhlIHRhc2sKKyAgICAgdG8gdGVzdGluZyB3aGV0aGVyICphbnkgb2YgdGhlIGZvdXIqIGJ5dGVzIGluIGxvbmd3b3JkMSBpcyB6ZXJvLgorCisgICAgIFdlIGNvbXB1dGUgdG1wID0KKyAgICAgICAoKGxvbmd3b3JkMSAtIHJlcGVhdGVkX29uZSkgJiB+bG9uZ3dvcmQxKSAmIChyZXBlYXRlZF9vbmUgPDwgNykuCisgICAgIFRoYXQgaXMsIHdlIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBvcGVyYXRpb25zOgorICAgICAgIDEuIFN1YnRyYWN0IHJlcGVhdGVkX29uZS4KKyAgICAgICAyLiAmIH5sb25nd29yZDEuCisgICAgICAgMy4gJiBhIG1hc2sgY29uc2lzdGluZyBvZiAweDgwIGluIGV2ZXJ5IGJ5dGUuCisgICAgIENvbnNpZGVyIHdoYXQgaGFwcGVucyBpbiBlYWNoIGJ5dGU6CisgICAgICAgLSBJZiBhIGJ5dGUgb2YgbG9uZ3dvcmQxIGlzIHplcm8sIHN0ZXAgMSBhbmQgMiB0cmFuc2Zvcm0gaXQgaW50byAweGZmLAorICAgICAgICAgYW5kIHN0ZXAgMyB0cmFuc2Zvcm1zIGl0IGludG8gMHg4MC4gIEEgY2FycnkgY2FuIGFsc28gYmUgcHJvcGFnYXRlZAorICAgICAgICAgdG8gbW9yZSBzaWduaWZpY2FudCBieXRlcy4KKyAgICAgICAtIElmIGEgYnl0ZSBvZiBsb25nd29yZDEgaXMgbm9uemVybywgbGV0IGl0cyBsb3dlc3QgMSBiaXQgYmUgYXQKKyAgICAgICAgIHBvc2l0aW9uIGsgKDAgPD0gayA8PSA3KTsgc28gdGhlIGxvd2VzdCBrIGJpdHMgYXJlIDAuICBBZnRlciBzdGVwIDEsCisgICAgICAgICB0aGUgYnl0ZSBlbmRzIGluIGEgc2luZ2xlIGJpdCBvZiB2YWx1ZSAwIGFuZCBrIGJpdHMgb2YgdmFsdWUgMS4KKyAgICAgICAgIEFmdGVyIHN0ZXAgMiwgdGhlIHJlc3VsdCBpcyBqdXN0IGsgYml0cyBvZiB2YWx1ZSAxOiAyXmsgLSAxLiAgQWZ0ZXIKKyAgICAgICAgIHN0ZXAgMywgdGhlIHJlc3VsdCBpcyAwLiAgQW5kIG5vIGNhcnJ5IGlzIHByb2R1Y2VkLgorICAgICBTbywgaWYgbG9uZ3dvcmQxIGhhcyBvbmx5IG5vbi16ZXJvIGJ5dGVzLCB0bXAgaXMgemVyby4KKyAgICAgV2hlcmVhcyBpZiBsb25nd29yZDEgaGFzIGEgemVybyBieXRlLCBjYWxsIGogdGhlIHBvc2l0aW9uIG9mIHRoZSBsZWFzdAorICAgICBzaWduaWZpY2FudCB6ZXJvIGJ5dGUuICBUaGVuIHRoZSByZXN1bHQgaGFzIGEgemVybyBhdCBwb3NpdGlvbnMgMCwgLi4uLAorICAgICBqLTEgYW5kIGEgMHg4MCBhdCBwb3NpdGlvbiBqLiAgV2UgY2Fubm90IHByZWRpY3QgdGhlIHJlc3VsdCBhdCB0aGUgbW9yZQorICAgICBzaWduaWZpY2FudCBieXRlcyAocG9zaXRpb25zIGorMS4uMyksIGJ1dCBpdCBkb2VzIG5vdCBtYXR0ZXIgc2luY2Ugd2UKKyAgICAgYWxyZWFkeSBoYXZlIGEgbm9uLXplcm8gYml0IGF0IHBvc2l0aW9uIDgqais3LgorCisgICAgIFRoZSB0ZXN0IHdoZXRoZXIgYW55IGJ5dGUgaW4gbG9uZ3dvcmQxIGlzIHplcm8gaXMgZXF1aXZhbGVudAorICAgICB0byB0ZXN0aW5nIHdoZXRoZXIgdG1wIGlzIG5vbnplcm8uCisKKyAgICAgVGhpcyB0ZXN0IGNhbiByZWFkIGJleW9uZCB0aGUgZW5kIG9mIGEgc3RyaW5nLCBkZXBlbmRpbmcgb24gd2hlcmUKKyAgICAgQ19JTiBpcyBlbmNvdW50ZXJlZC4gIEhvd2V2ZXIsIHRoaXMgaXMgY29uc2lkZXJlZCBzYWZlIHNpbmNlIHRoZQorICAgICBpbml0aWFsaXphdGlvbiBwaGFzZSBlbnN1cmVkIHRoYXQgdGhlIHJlYWQgd2lsbCBiZSBhbGlnbmVkLAorICAgICB0aGVyZWZvcmUsIHRoZSByZWFkIHdpbGwgbm90IGNyb3NzIHBhZ2UgYm91bmRhcmllcyBhbmQgd2lsbCBub3QKKyAgICAgY2F1c2UgYSBmYXVsdC4gICovCisKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgbG9uZ3dvcmQgbG9uZ3dvcmQxID0gKmxvbmd3b3JkX3B0ciBeIHJlcGVhdGVkX2M7CisKKyAgICAgIGlmICgoKChsb25nd29yZDEgLSByZXBlYXRlZF9vbmUpICYgfmxvbmd3b3JkMSkKKyAgICAgICAgICAgJiAocmVwZWF0ZWRfb25lIDw8IDcpKSAhPSAwKQorICAgICAgICBicmVhazsKKyAgICAgIGxvbmd3b3JkX3B0cisrOworICAgIH0KKworICBjaGFyX3B0ciA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIGxvbmd3b3JkX3B0cjsKKworICAvKiBBdCB0aGlzIHBvaW50LCB3ZSBrbm93IHRoYXQgb25lIG9mIHRoZSBzaXplb2YgKGxvbmd3b3JkKSBieXRlcworICAgICBzdGFydGluZyBhdCBjaGFyX3B0ciBpcyA9PSBjLiAgT24gbGl0dGxlLWVuZGlhbiBtYWNoaW5lcywgd2UKKyAgICAgY291bGQgZGV0ZXJtaW5lIHRoZSBmaXJzdCBzdWNoIGJ5dGUgd2l0aG91dCBhbnkgZnVydGhlciBtZW1vcnkKKyAgICAgYWNjZXNzZXMsIGp1c3QgYnkgbG9va2luZyBhdCB0aGUgdG1wIHJlc3VsdCBmcm9tIHRoZSBsYXN0IGxvb3AKKyAgICAgaXRlcmF0aW9uLiAgQnV0IHRoaXMgZG9lcyBub3Qgd29yayBvbiBiaWctZW5kaWFuIG1hY2hpbmVzLgorICAgICBDaG9vc2UgY29kZSB0aGF0IHdvcmtzIGluIGJvdGggY2FzZXMuICAqLworCisgIGNoYXJfcHRyID0gKHVuc2lnbmVkIGNoYXIgKikgbG9uZ3dvcmRfcHRyOworICB3aGlsZSAoKmNoYXJfcHRyICE9IGMpCisgICAgY2hhcl9wdHIrKzsKKyAgcmV0dXJuICh2b2lkICopIGNoYXJfcHRyOworfQpkaWZmIC0tZ2l0IGEvbGliL3Jhd21lbWNoci52YWxncmluZCBiL2xpYi9yYXdtZW1jaHIudmFsZ3JpbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM2MzkyMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9yYXdtZW1jaHIudmFsZ3JpbmQKQEAgLTAsMCArMSwxMiBAQAorIyBTdXBwcmVzcyBhIHZhbGdyaW5kIG1lc3NhZ2UgYWJvdXQgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHJhd21lbWNocigpLgorIyBUaGlzIHVzZSBpcyBPSyBiZWNhdXNlIGl0IHByb3ZpZGVzIG9ubHkgYSBzcGVlZHVwLgoreworICAgIHJhd21lbWNoci12YWx1ZTQKKyAgICBNZW1jaGVjazpWYWx1ZTQKKyAgICBmdW46cmF3bWVtY2hyCit9Cit7CisgICAgcmF3bWVtY2hyLXZhbHVlOAorICAgIE1lbWNoZWNrOlZhbHVlOAorICAgIGZ1bjpyYXdtZW1jaHIKK30KZGlmZiAtLWdpdCBhL2xpYi9yZWFsbG9jLmMgYi9saWIvcmVhbGxvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NTU2Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcmVhbGxvYy5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qIHJlYWxsb2MoKSBmdW5jdGlvbiB0aGF0IGlzIGdsaWJjIGNvbXBhdGlibGUuCisKKyAgIENvcHlyaWdodCAoQykgMTk5NywgMjAwMy0yMDA0LCAyMDA2LTIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIHdyaXR0ZW4gYnkgSmltIE1leWVyaW5nIGFuZCBCcnVubyBIYWlibGUgKi8KKworI2RlZmluZSBfR0xfVVNFX1NURExJQl9BTExPQyAxCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIE9ubHkgdGhlIEFDX0ZVTkNfUkVBTExPQyBtYWNybyBkZWZpbmVzICdyZWFsbG9jJyBhbHJlYWR5IGluIGNvbmZpZy5oLiAgKi8KKyNpZmRlZiByZWFsbG9jCisjIGRlZmluZSBORUVEX1JFQUxMT0NfR05VIDEKKy8qIFdoZXJlYXMgdGhlIGdudWxpYiBtb2R1bGUgJ3JlYWxsb2MtZ251JyBkZWZpbmVzIEhBVkVfUkVBTExPQ19HTlUuICAqLworI2VsaWYgR05VTElCX1JFQUxMT0NfR05VICYmICFIQVZFX1JFQUxMT0NfR05VCisjIGRlZmluZSBORUVEX1JFQUxMT0NfR05VIDEKKyNlbmRpZgorCisvKiBJbmZlciB0aGUgcHJvcGVydGllcyBvZiB0aGUgc3lzdGVtJ3MgbWFsbG9jIGZ1bmN0aW9uLgorICAgVGhlIGdudWxpYiBtb2R1bGUgJ21hbGxvYy1nbnUnIGRlZmluZXMgSEFWRV9NQUxMT0NfR05VLiAgKi8KKyNpZiBHTlVMSUJfTUFMTE9DX0dOVSAmJiBIQVZFX01BTExPQ19HTlUKKyMgZGVmaW5lIFNZU1RFTV9NQUxMT0NfR0xJQkNfQ09NUEFUSUJMRSAxCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKworLyogQ2hhbmdlIHRoZSBzaXplIG9mIGFuIGFsbG9jYXRlZCBibG9jayBvZiBtZW1vcnkgUCB0byBOIGJ5dGVzLAorICAgd2l0aCBlcnJvciBjaGVja2luZy4gIElmIE4gaXMgemVybywgY2hhbmdlIGl0IHRvIDEuICBJZiBQIGlzIE5VTEwsCisgICB1c2UgbWFsbG9jLiAgKi8KKwordm9pZCAqCitycGxfcmVhbGxvYyAodm9pZCAqcCwgc2l6ZV90IG4pCit7CisgIHZvaWQgKnJlc3VsdDsKKworI2lmIE5FRURfUkVBTExPQ19HTlUKKyAgaWYgKG4gPT0gMCkKKyAgICB7CisgICAgICBuID0gMTsKKworICAgICAgLyogSW4gdGhlb3J5IHJlYWxsb2MgbWlnaHQgZmFpbCwgc28gZG9uJ3QgcmVseSBvbiBpdCB0byBmcmVlLiAgKi8KKyAgICAgIGZyZWUgKHApOworICAgICAgcCA9IE5VTEw7CisgICAgfQorI2VuZGlmCisKKyAgaWYgKHAgPT0gTlVMTCkKKyAgICB7CisjaWYgR05VTElCX1JFQUxMT0NfR05VICYmICFORUVEX1JFQUxMT0NfR05VICYmICFTWVNURU1fTUFMTE9DX0dMSUJDX0NPTVBBVElCTEUKKyAgICAgIGlmIChuID09IDApCisgICAgICAgIG4gPSAxOworI2VuZGlmCisgICAgICByZXN1bHQgPSBtYWxsb2MgKG4pOworICAgIH0KKyAgZWxzZQorICAgIHJlc3VsdCA9IHJlYWxsb2MgKHAsIG4pOworCisjaWYgIUhBVkVfUkVBTExPQ19QT1NJWAorICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgZXJybm8gPSBFTk9NRU07CisjZW5kaWYKKworICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvbGliL3JlZi1hZGQuc2luIGIvbGliL3JlZi1hZGQuc2luCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYzA0M2YKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcmVmLWFkZC5zaW4KQEAgLTAsMCArMSwyOSBAQAorIyBBZGQgdGhpcyBwYWNrYWdlIHRvIGEgbGlzdCBvZiByZWZlcmVuY2VzIHN0b3JlZCBpbiBhIHRleHQgZmlsZS4KKyMKKyMgICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyAgIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIworIyBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPi4KKyMKKy9eIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6IC8geworICBzLyMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOi8vCisgIHRhCisgIDphCisgIHMvIEBQQUNLQUdFQCAvIEBQQUNLQUdFQCAvCisgIHRiCisgIHMvICQvIEBQQUNLQUdFQCAvCisgIDpiCisgIHMvXi8jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTovCit9CmRpZmYgLS1naXQgYS9saWIvcmVmLWRlbC5zaW4gYi9saWIvcmVmLWRlbC5zaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIwMzg4MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9yZWYtZGVsLnNpbgpAQCAtMCwwICsxLDI0IEBACisjIFJlbW92ZSB0aGlzIHBhY2thZ2UgZnJvbSBhIGxpc3Qgb2YgcmVmZXJlbmNlcyBzdG9yZWQgaW4gYSB0ZXh0IGZpbGUuCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyMKKyMgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGhhaWJsZUBjbGlzcC5jb25zLm9yZz4uCisjCisvXiMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAvIHsKKyAgcy8jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTovLworICBzLyBAUEFDS0FHRUAgLyAvCisgIHMvXi8jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTovCit9CmRpZmYgLS1naXQgYS9saWIvc2NoZWQuaW4uaCBiL2xpYi9zY2hlZC5pbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NTVmMDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc2NoZWQuaW4uaApAQCAtMCwwICsxLDU3IEBACisvKiBSZXBsYWNlbWVudCA8c2NoZWQuaD4gZm9yIHBsYXRmb3JtcyB0aGF0IGxhY2sgaXQuCisgICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU0NIRURfSAorCisjaWYgX19HTlVDX18gPj0gMworQFBSQUdNQV9TWVNURU1fSEVBREVSQAorI2VuZGlmCitAUFJBR01BX0NPTFVNTlNACisKKy8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyNpZiBASEFWRV9TQ0hFRF9IQAorIyBASU5DTFVERV9ORVhUQCBATkVYVF9TQ0hFRF9IQAorI2VuZGlmCisKKyNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NDSEVEX0gKKyNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX1NDSEVEX0gKKworLyogR2V0IHBpZF90LgorICAgVGhpcyBpcyBuZWVkZWQgb24gZ2xpYmMgMi4xMSAoc2VlCisgICBnbGliYyBidWcgPGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTMxOTg+KQorICAgYW5kIE1hYyBPUyBYIDEwLjUuICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaWYgIUBIQVZFX1NUUlVDVF9TQ0hFRF9QQVJBTUAKKworIyBpZiAhR05VTElCX2RlZmluZWRfc3RydWN0X3NjaGVkX3BhcmFtCitzdHJ1Y3Qgc2NoZWRfcGFyYW0KK3sKKyAgaW50IHNjaGVkX3ByaW9yaXR5OworfTsKKyMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9zdHJ1Y3Rfc2NoZWRfcGFyYW0gMQorIyBlbmRpZgorCisjZW5kaWYKKworI2lmICEoZGVmaW5lZCBTQ0hFRF9GSUZPICYmIGRlZmluZWQgU0NIRURfUlIgJiYgZGVmaW5lZCBTQ0hFRF9PVEhFUikKKyMgZGVmaW5lIFNDSEVEX0ZJRk8gICAxCisjIGRlZmluZSBTQ0hFRF9SUiAgICAgMgorIyBkZWZpbmUgU0NIRURfT1RIRVIgIDAKKyNlbmRpZgorCisjZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NDSEVEX0ggKi8KKyNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU0NIRURfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL3NpZy1oYW5kbGVyLmMgYi9saWIvc2lnLWhhbmRsZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmMzNjIxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3NpZy1oYW5kbGVyLmMKQEAgLTAsMCArMSwzIEBACisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZGVmaW5lIFNJR19IQU5ETEVSX0lOTElORSBfR0xfRVhURVJOX0lOTElORQorI2luY2x1ZGUgInNpZy1oYW5kbGVyLmgiCmRpZmYgLS1naXQgYS9saWIvc2lnLWhhbmRsZXIuaCBiL2xpYi9zaWctaGFuZGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYmExMzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc2lnLWhhbmRsZXIuaApAQCAtMCwwICsxLDUxIEBACisvKiBDb252ZW5pZW5jZSBkZWNsYXJhdGlvbnMgd2hlbiB3b3JraW5nIHdpdGggPHNpZ25hbC5oPi4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX0dMX1NJR19IQU5ETEVSX0gKKyNkZWZpbmUgX0dMX1NJR19IQU5ETEVSX0gKKworI2luY2x1ZGUgPHNpZ25hbC5oPgorCitfR0xfSU5MSU5FX0hFQURFUl9CRUdJTgorI2lmbmRlZiBTSUdfSEFORExFUl9JTkxJTkUKKyMgZGVmaW5lIFNJR19IQU5ETEVSX0lOTElORSBfR0xfSU5MSU5FCisjZW5kaWYKKworLyogQ29udmVuaWVuY2UgdHlwZSB3aGVuIHdvcmtpbmcgd2l0aCBzaWduYWwgaGFuZGxlcnMuICAqLwordHlwZWRlZiB2b2lkICgqc2FfaGFuZGxlcl90KSAoaW50KTsKKworLyogUmV0dXJuIHRoZSBoYW5kbGVyIG9mIGEgc2lnbmFsLCBhcyBhIHNhX2hhbmRsZXJfdCB2YWx1ZSByZWdhcmRsZXNzCisgICBvZiBpdHMgdHJ1ZSB0eXBlLiAgVGhlIHJlc3VsdGluZyBmdW5jdGlvbiBjYW4gYmUgY29tcGFyZWQgdG8KKyAgIHNwZWNpYWwgdmFsdWVzIGxpa2UgU0lHX0lHTiBidXQgaXQgaXMgbm90IHBvcnRhYmxlIHRvIGNhbGwgaXQuICAqLworU0lHX0hBTkRMRVJfSU5MSU5FIHNhX2hhbmRsZXJfdAorZ2V0X2hhbmRsZXIgKHN0cnVjdCBzaWdhY3Rpb24gY29uc3QgKmEpCit7CisjaWZkZWYgU0FfU0lHSU5GTworICAvKiBQT1NJWCBzYXlzIHRoYXQgc3BlY2lhbCB2YWx1ZXMgbGlrZSBTSUdfSUdOIGNhbiBvbmx5IG9jY3VyIHdoZW4KKyAgICAgYWN0aW9uLnNhX2ZsYWdzIGRvZXMgbm90IGNvbnRhaW4gU0FfU0lHSU5GTy4gIEJ1dCBpbiBMaW51eCAyLjQsCisgICAgIGZvciBleGFtcGxlLCBzYV9zaWdhY3Rpb24gYW5kIHNhX2hhbmRsZXIgYXJlIGFsaWFzZXMgYW5kIGEgc2lnbmFsCisgICAgIGlzIGlnbm9yZWQgaWYgc2Ffc2lnYWN0aW9uIChhZnRlciBjYXN0aW5nKSBlcXVhbHMgU0lHX0lHTi4gIFNvCisgICAgIHVzZSAoYW5kIGNhc3QpIHNhX3NpZ2FjdGlvbiBpbiB0aGF0IGNhc2UuICAqLworICBpZiAoYS0+c2FfZmxhZ3MgJiBTQV9TSUdJTkZPKQorICAgIHJldHVybiAoc2FfaGFuZGxlcl90KSBhLT5zYV9zaWdhY3Rpb247CisjZW5kaWYKKyAgcmV0dXJuIGEtPnNhX2hhbmRsZXI7Cit9CisKK19HTF9JTkxJTkVfSEVBREVSX0VORAorCisjZW5kaWYgLyogX0dMX1NJR19IQU5ETEVSX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9zaWdhY3Rpb24uYyBiL2xpYi9zaWdhY3Rpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTljNGVjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3NpZ2FjdGlvbi5jCkBAIC0wLDAgKzEsMjA0IEBACisvKiBQT1NJWCBjb21wYXRpYmxlIHNpZ25hbCBibG9ja2luZy4KKyAgIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBFcmljIEJsYWtlIDxlYmI5QGJ5dS5uZXQ+LCAyMDA4LgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgPHNpZ25hbC5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyogVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBzaWdhY3Rpb24gaXMgdGFpbG9yZWQgdG8gbmF0aXZlIFdpbmRvd3MgYmVoYXZpb3I6CisgICBzaWduYWwoKSBoYXMgU3lzViBzZW1hbnRpY3MgKGllLiB0aGUgaGFuZGxlciBpcyB1bmluc3RhbGxlZCBiZWZvcmUKKyAgIGl0IGlzIGludm9rZWQpLiAgVGhpcyBpcyBhbiBpbmhlcmVudCBkYXRhIHJhY2UgaWYgYW4gYXN5bmNocm9ub3VzCisgICBzaWduYWwgaXMgc2VudCB0d2ljZSBpbiBhIHJvdyBiZWZvcmUgd2UgY2FuIHJlaW5zdGFsbCBvdXIgaGFuZGxlciwKKyAgIGJ1dCB0aGVyZSdzIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0IGl0LiAgTWVhbndoaWxlLCBzaWdwcm9jbWFzaygpCisgICBpcyBub3QgcHJlc2VudCwgYW5kIHdoaWxlIHdlIGNhbiB1c2UgdGhlIGdudWxpYiByZXBsYWNlbWVudCB0bworICAgcHJvdmlkZSBjcml0aWNhbCBzZWN0aW9ucywgaXQgdG9vIHN1ZmZlcnMgZnJvbSBwb3RlbnRpYWwgZGF0YSByYWNlcworICAgaW4gdGhlIGZhY2Ugb2YgYW4gaWxsLXRpbWVkIGFzeW5jaHJvbm91cyBzaWduYWwuICBBbmQgd2UgY29tcG91bmQKKyAgIHRoZSBzaXR1YXRpb24gYnkgcmVhZGluZyBzdGF0aWMgc3RvcmFnZSBpbiBhIHNpZ25hbCBoYW5kbGVyLCB3aGljaAorICAgUE9TSVggd2FybnMgaXMgbm90IGdlbmVyaWNhbGx5IGFzeW5jLXNpZ25hbC1zYWZlLiAgT2ggd2VsbC4KKworICAgQWRkaXRpb25hbGx5OgorICAgICAtIFdlIGRvbid0IGltcGxlbWVudCBTQV9OT0NMRFNUT1Agb3IgU0FfTk9DTERXQUlULCBiZWNhdXNlIFNJR0NITEQKKyAgICAgICBpcyBub3QgZGVmaW5lZC4KKyAgICAgLSBXZSBkb24ndCBpbXBsZW1lbnQgU0FfT05TVEFDSywgYmVjYXVzZSBzaWdhbHRzdGFjaygpIGlzIG5vdCBwcmVzZW50LgorICAgICAtIFdlIGlnbm9yZSBTQV9SRVNUQVJULCBiZWNhdXNlIGJsb2NraW5nIG5hdGl2ZSBXaW5kb3dzIEFQSSBjYWxscyBhcmUKKyAgICAgICBub3QgaW50ZXJydXB0ZWQgYW55d2F5IHdoZW4gYW4gYXN5bmNocm9ub3VzIHNpZ25hbCBvY2N1cnMsIGFuZCB0aGUKKyAgICAgICBNU1ZDUlQgcnVudGltZSBuZXZlciBzZXRzIGVycm5vIHRvIEVJTlRSLgorICAgICAtIFdlIGRvbid0IGltcGxlbWVudCBTQV9TSUdJTkZPIGJlY2F1c2UgaXQgaXMgaW1wb3NzaWJsZSB0byBkbyBzbworICAgICAgIHBvcnRhYmx5LgorCisgICBQT1NJWCBzdGF0ZXMgdGhhdCBhbiBhcHBsaWNhdGlvbiBzaG91bGQgbm90IG1peCBzaWduYWwoKSBhbmQKKyAgIHNpZ2FjdGlvbigpLiAgV2Ugc3VwcG9ydCB0aGUgdXNlIG9mIHNpZ25hbCgpIHdpdGhpbiB0aGUgZ251bGliCisgICBzaWdwcm9jbWFzaygpIHN1YnN0aXR1dGUsIGJ1dCBhbGwgb3RoZXIgYXBwbGljYXRpb24gY29kZSBsaW5rZWQKKyAgIHdpdGggdGhpcyBtb2R1bGUgc2hvdWxkIHN0aWNrIHdpdGggb25seSBzaWdhY3Rpb24oKS4gICovCisKKy8qIENoZWNrIHNvbWUgb2Ygb3VyIGFzc3VtcHRpb25zLiAgKi8KKyNpZiBkZWZpbmVkIFNJR0NITEQgfHwgZGVmaW5lZCBIQVZFX1NJR0FMVFNUQUNLIHx8IGRlZmluZWQgSEFWRV9TSUdJTlRFUlJVUFQKKyMgZXJyb3IgIlJldmlzaXQgdGhlIGFzc3VtcHRpb25zIG1hZGUgaW4gdGhlIHNpZ2FjdGlvbiBtb2R1bGUiCisjZW5kaWYKKworLyogT3V0LW9mLXJhbmdlIHN1YnN0aXR1dGVzIG1ha2UgYSBnb29kIGZhbGxiYWNrIGZvciB1bmNhdGNoYWJsZQorICAgc2lnbmFscy4gICovCisjaWZuZGVmIFNJR0tJTEwKKyMgZGVmaW5lIFNJR0tJTEwgKC0xKQorI2VuZGlmCisjaWZuZGVmIFNJR1NUT1AKKyMgZGVmaW5lIFNJR1NUT1AgKC0xKQorI2VuZGlmCisKKy8qIE9uIG5hdGl2ZSBXaW5kb3dzLCBhcyBvZiAyMDA4LCB0aGUgc2lnbmFsIFNJR0FCUlRfQ09NUEFUIGlzIGFuIGFsaWFzCisgICBmb3IgdGhlIHNpZ25hbCBTSUdBQlJULiAgT25seSBvbmUgc2lnbmFsIGhhbmRsZXIgaXMgc3RvcmVkIGZvciBib3RoCisgICBTSUdBQlJUIGFuZCBTSUdBQlJUX0NPTVBBVC4gIFNJR0FCUlRfQ09NUEFUIGlzIG5vdCBhIHNpZ25hbCBvZiBpdHMgb3duLiAgKi8KKyNpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCisjIHVuZGVmIFNJR0FCUlRfQ09NUEFUCisjIGRlZmluZSBTSUdBQlJUX0NPTVBBVCA2CisjZW5kaWYKKworLyogQSBzaWduYWwgaGFuZGxlci4gICovCit0eXBlZGVmIHZvaWQgKCpoYW5kbGVyX3QpIChpbnQgc2lnbmFsKTsKKworLyogU2V0IG9mIGN1cnJlbnQgYWN0aW9ucy4gIElmIHNhX2hhbmRsZXIgZm9yIGFuIGVudHJ5IGlzIE5VTEwsIHRoZW4KKyAgIHRoYXQgc2lnbmFsIGlzIG5vdCBjdXJyZW50bHkgaGFuZGxlZCBieSB0aGUgc2lnYWN0aW9uIGhhbmRsZXIuICAqLworc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gdm9sYXRpbGUgYWN0aW9uX2FycmF5W05TSUddIC8qID0gMCAqLzsKKworLyogU2lnbmFsIGhhbmRsZXIgdGhhdCBpcyBpbnN0YWxsZWQgZm9yIHNpZ25hbHMuICAqLworc3RhdGljIHZvaWQKK3NpZ2FjdGlvbl9oYW5kbGVyIChpbnQgc2lnKQoreworICBoYW5kbGVyX3QgaGFuZGxlcjsKKyAgc2lnc2V0X3QgbWFzazsKKyAgc2lnc2V0X3Qgb2xkbWFzazsKKyAgaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisgIGlmIChzaWcgPCAwIHx8IE5TSUcgPD0gc2lnIHx8ICFhY3Rpb25fYXJyYXlbc2lnXS5zYV9oYW5kbGVyKQorICAgIHsKKyAgICAgIC8qIFVuZXhwZWN0ZWQgc2l0dWF0aW9uOyBiZSBjYXJlZnVsIHRvIGF2b2lkIHJlY3Vyc2l2ZSBhYm9ydC4gICovCisgICAgICBpZiAoc2lnID09IFNJR0FCUlQpCisgICAgICAgIHNpZ25hbCAoU0lHQUJSVCwgU0lHX0RGTCk7CisgICAgICBhYm9ydCAoKTsKKyAgICB9CisKKyAgLyogUmVpbnN0YWxsIHRoZSBzaWduYWwgaGFuZGxlciB3aGVuIHJlcXVpcmVkOyBvdGhlcndpc2UgdXBkYXRlIHRoZQorICAgICBib29ra2VlcGluZyBzbyB0aGF0IHRoZSB1c2VyJ3MgaGFuZGxlciBtYXkgY2FsbCBzaWdhY3Rpb24gYW5kIGdldAorICAgICBhY2N1cmF0ZSByZXN1bHRzLiAgV2Uga25vdyB0aGUgc2lnbmFsIGlzbid0IGN1cnJlbnRseSBibG9ja2VkLCBvcgorICAgICB3ZSB3b3VsZG4ndCBiZSBpbiBpdHMgaGFuZGxlciwgdGhlcmVmb3JlIHdlIGtub3cgdGhhdCB3ZSBhcmUgbm90CisgICAgIGludGVycnVwdGluZyBhIHNpZ2FjdGlvbigpIGNhbGwuICBUaGVyZSBpcyBhIHJhY2Ugd2hlcmUgYW55CisgICAgIGFzeW5jaHJvbm91cyBpbnN0YW5jZSBvZiB0aGUgc2FtZSBzaWduYWwgb2NjdXJyaW5nIGJlZm9yZSB3ZQorICAgICByZWluc3RhbGwgdGhlIGhhbmRsZXIgd2lsbCB0cmlnZ2VyIHRoZSBkZWZhdWx0IGhhbmRsZXI7IG9oCisgICAgIHdlbGwuICAqLworICBoYW5kbGVyID0gYWN0aW9uX2FycmF5W3NpZ10uc2FfaGFuZGxlcjsKKyAgaWYgKChhY3Rpb25fYXJyYXlbc2lnXS5zYV9mbGFncyAmIFNBX1JFU0VUSEFORCkgPT0gMCkKKyAgICBzaWduYWwgKHNpZywgc2lnYWN0aW9uX2hhbmRsZXIpOworICBlbHNlCisgICAgYWN0aW9uX2FycmF5W3NpZ10uc2FfaGFuZGxlciA9IE5VTEw7CisKKyAgLyogQmxvY2sgYXBwcm9wcmlhdGUgc2lnbmFscy4gICovCisgIG1hc2sgPSBhY3Rpb25fYXJyYXlbc2lnXS5zYV9tYXNrOworICBpZiAoKGFjdGlvbl9hcnJheVtzaWddLnNhX2ZsYWdzICYgU0FfTk9ERUZFUikgPT0gMCkKKyAgICBzaWdhZGRzZXQgKCZtYXNrLCBzaWcpOworICBzaWdwcm9jbWFzayAoU0lHX0JMT0NLLCAmbWFzaywgJm9sZG1hc2spOworCisgIC8qIEludm9rZSB0aGUgdXNlcidzIGhhbmRsZXIsIHRoZW4gcmVzdG9yZSBwcmlvciBtYXNrLiAgKi8KKyAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgaGFuZGxlciAoc2lnKTsKKyAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgc2lncHJvY21hc2sgKFNJR19TRVRNQVNLLCAmb2xkbWFzaywgTlVMTCk7CisgIGVycm5vID0gc2F2ZWRfZXJybm87Cit9CisKKy8qIENoYW5nZSBhbmQvb3IgcXVlcnkgdGhlIGFjdGlvbiB0aGF0IHdpbGwgYmUgdGFrZW4gb24gZGVsaXZlcnkgb2YKKyAgIHNpZ25hbCBTSUcuICBJZiBub3QgTlVMTCwgQUNUIGRlc2NyaWJlcyB0aGUgbmV3IGJlaGF2aW9yLiAgSWYgbm90CisgICBOVUxMLCBPQUNUIGlzIHNldCB0byB0aGUgcHJpb3IgYmVoYXZpb3IuICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBvcgorICAgc2V0IGVycm5vIGFuZCByZXR1cm4gLTEgb24gZmFpbHVyZS4gICovCitpbnQKK3NpZ2FjdGlvbiAoaW50IHNpZywgY29uc3Qgc3RydWN0IHNpZ2FjdGlvbiAqcmVzdHJpY3QgYWN0LAorICAgICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uICpyZXN0cmljdCBvYWN0KQoreworICBzaWdzZXRfdCBtYXNrOworICBzaWdzZXRfdCBvbGRtYXNrOworICBpbnQgc2F2ZWRfZXJybm87CisKKyAgaWYgKHNpZyA8IDAgfHwgTlNJRyA8PSBzaWcgfHwgc2lnID09IFNJR0tJTEwgfHwgc2lnID09IFNJR1NUT1AKKyAgICAgIHx8IChhY3QgJiYgYWN0LT5zYV9oYW5kbGVyID09IFNJR19FUlIpKQorICAgIHsKKyAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworI2lmZGVmIFNJR0FCUlRfQ09NUEFUCisgIGlmIChzaWcgPT0gU0lHQUJSVF9DT01QQVQpCisgICAgc2lnID0gU0lHQUJSVDsKKyNlbmRpZgorCisgIC8qIFBPU0lYIHJlcXVpcmVzIHNpZ2FjdGlvbigpIHRvIGJlIGFzeW5jLXNpZ25hbC1zYWZlLiAgSW4gb3RoZXIKKyAgICAgd29yZHMsIGlmIGFuIGFzeW5jaHJvbm91cyBzaWduYWwgY2FuIG9jY3VyIHdoaWxlIHdlIGFyZSBhbnl3aGVyZQorICAgICBpbnNpZGUgdGhpcyBmdW5jdGlvbiwgdGhlIHVzZXIncyBoYW5kbGVyIGNvdWxkIHRoZW4gY2FsbAorICAgICBzaWdhY3Rpb24oKSByZWN1cnNpdmVseSBhbmQgZXhwZWN0IGNvbnNpc3RlbnQgcmVzdWx0cy4gIFdlIG1lZXQKKyAgICAgdGhpcyBydWxlIGJ5IHVzaW5nIHNpZ3Byb2NtYXNrIHRvIGJsb2NrIGFsbCBzaWduYWxzIGJlZm9yZQorICAgICBtb2RpZnlpbmcgYW55IGRhdGEgc3RydWN0dXJlIHRoYXQgY291bGQgYmUgcmVhZCBmcm9tIGEgc2lnbmFsCisgICAgIGhhbmRsZXI7IHRoaXMgd29ya3Mgc2luY2Ugd2Uga25vdyB0aGF0IHRoZSBnbnVsaWIgc2lncHJvY21hc2sKKyAgICAgcmVwbGFjZW1lbnQgZG9lcyBub3QgdHJ5IHRvIHVzZSBzaWdhY3Rpb24oKSBmcm9tIGl0cyBoYW5kbGVyLiAgKi8KKyAgaWYgKCFhY3QgJiYgIW9hY3QpCisgICAgcmV0dXJuIDA7CisgIHNpZ2ZpbGxzZXQgKCZtYXNrKTsKKyAgc2lncHJvY21hc2sgKFNJR19CTE9DSywgJm1hc2ssICZvbGRtYXNrKTsKKyAgaWYgKG9hY3QpCisgICAgeworICAgICAgaWYgKGFjdGlvbl9hcnJheVtzaWddLnNhX2hhbmRsZXIpCisgICAgICAgICpvYWN0ID0gYWN0aW9uX2FycmF5W3NpZ107CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBTYWZlIHRvIGNoYW5nZSB0aGUgaGFuZGxlciBhdCB3aWxsIGhlcmUsIHNpbmNlIGFsbAorICAgICAgICAgICAgIHNpZ25hbHMgYXJlIGN1cnJlbnRseSBibG9ja2VkLiAgKi8KKyAgICAgICAgICBvYWN0LT5zYV9oYW5kbGVyID0gc2lnbmFsIChzaWcsIFNJR19ERkwpOworICAgICAgICAgIGlmIChvYWN0LT5zYV9oYW5kbGVyID09IFNJR19FUlIpCisgICAgICAgICAgICBnb3RvIGZhaWx1cmU7CisgICAgICAgICAgc2lnbmFsIChzaWcsIG9hY3QtPnNhX2hhbmRsZXIpOworICAgICAgICAgIG9hY3QtPnNhX2ZsYWdzID0gU0FfUkVTRVRIQU5EIHwgU0FfTk9ERUZFUjsKKyAgICAgICAgICBzaWdlbXB0eXNldCAoJm9hY3QtPnNhX21hc2spOworICAgICAgICB9CisgICAgfQorCisgIGlmIChhY3QpCisgICAgeworICAgICAgLyogU2FmZSB0byBpbnN0YWxsIHRoZSBoYW5kbGVyIGJlZm9yZSB1cGRhdGluZyBhY3Rpb25fYXJyYXksCisgICAgICAgICBzaW5jZSBhbGwgc2lnbmFscyBhcmUgY3VycmVudGx5IGJsb2NrZWQuICAqLworICAgICAgaWYgKGFjdC0+c2FfaGFuZGxlciA9PSBTSUdfREZMIHx8IGFjdC0+c2FfaGFuZGxlciA9PSBTSUdfSUdOKQorICAgICAgICB7CisgICAgICAgICAgaWYgKHNpZ25hbCAoc2lnLCBhY3QtPnNhX2hhbmRsZXIpID09IFNJR19FUlIpCisgICAgICAgICAgICBnb3RvIGZhaWx1cmU7CisgICAgICAgICAgYWN0aW9uX2FycmF5W3NpZ10uc2FfaGFuZGxlciA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGlmIChzaWduYWwgKHNpZywgc2lnYWN0aW9uX2hhbmRsZXIpID09IFNJR19FUlIpCisgICAgICAgICAgICBnb3RvIGZhaWx1cmU7CisgICAgICAgICAgYWN0aW9uX2FycmF5W3NpZ10gPSAqYWN0OworICAgICAgICB9CisgICAgfQorICBzaWdwcm9jbWFzayAoU0lHX1NFVE1BU0ssICZvbGRtYXNrLCBOVUxMKTsKKyAgcmV0dXJuIDA7CisKKyBmYWlsdXJlOgorICBzYXZlZF9lcnJubyA9IGVycm5vOworICBzaWdwcm9jbWFzayAoU0lHX1NFVE1BU0ssICZvbGRtYXNrLCBOVUxMKTsKKyAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgcmV0dXJuIC0xOworfQpkaWZmIC0tZ2l0IGEvbGliL3NpZ25hbC5pbi5oIGIvbGliL3NpZ25hbC5pbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYjFhZDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc2lnbmFsLmluLmgKQEAgLTAsMCArMSw0NDcgQEAKKy8qIEEgR05VLWxpa2UgPHNpZ25hbC5oPi4KKworICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZiBfX0dOVUNfXyA+PSAzCitAUFJBR01BX1NZU1RFTV9IRUFERVJACisjZW5kaWYKK0BQUkFHTUFfQ09MVU1OU0AKKworI2lmIGRlZmluZWQgX19uZWVkX3NpZ19hdG9taWNfdCB8fCBkZWZpbmVkIF9fbmVlZF9zaWdzZXRfdCB8fCBkZWZpbmVkIF9HTF9BTFJFQURZX0lOQ0xVRElOR19TSUdOQUxfSCB8fCAoZGVmaW5lZCBfU0lHTkFMX0ggJiYgIWRlZmluZWQgX19TSVpFT0ZfUFRIUkVBRF9NVVRFWF9UKQorLyogU3BlY2lhbCBpbnZvY2F0aW9uIGNvbnZlbnRpb246CisgICAtIEluc2lkZSBnbGliYyBoZWFkZXIgZmlsZXMuCisgICAtIE9uIGdsaWJjIHN5c3RlbXMgd2UgaGF2ZSBhIHNlcXVlbmNlIG9mIG5lc3RlZCBpbmNsdWRlcworICAgICA8c2lnbmFsLmg+IC0+IDx1Y29udGV4dC5oPiAtPiA8c2lnbmFsLmg+LgorICAgICBJbiB0aGlzIHNpdHVhdGlvbiwgdGhlIGZ1bmN0aW9ucyBhcmUgbm90IHlldCBkZWNsYXJlZCwgdGhlcmVmb3JlIHdlIGNhbm5vdAorICAgICBwcm92aWRlIHRoZSBDKysgYWxpYXNlcy4KKyAgIC0gT24gZ2xpYmMgc3lzdGVtcyB3aXRoIEdDQyA0LjMgd2UgaGF2ZSBhIHNlcXVlbmNlIG9mIG5lc3RlZCBpbmNsdWRlcworICAgICA8Y3NpZ25hbD4gLT4gPC91c3IvaW5jbHVkZS9zaWduYWwuaD4gLT4gPHN5cy91Y29udGV4dC5oPiAtPiA8c2lnbmFsLmg+LgorICAgICBJbiB0aGlzIHNpdHVhdGlvbiwgc29tZSBvZiB0aGUgZnVuY3Rpb25zIGFyZSBub3QgeWV0IGRlY2xhcmVkLCB0aGVyZWZvcmUKKyAgICAgd2UgY2Fubm90IHByb3ZpZGUgdGhlIEMrKyBhbGlhc2VzLiAgKi8KKworIyBASU5DTFVERV9ORVhUQCBATkVYVF9TSUdOQUxfSEAKKworI2Vsc2UKKy8qIE5vcm1hbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24uICAqLworCisjaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TSUdOQUxfSAorCisjZGVmaW5lIF9HTF9BTFJFQURZX0lOQ0xVRElOR19TSUdOQUxfSAorCisvKiBEZWZpbmUgcGlkX3QsIHVpZF90LgorICAgQWxzbywgbWluZ3cgZGVmaW5lcyBzaWdzZXRfdCBub3QgaW4gPHNpZ25hbC5oPiwgYnV0IGluIDxzeXMvdHlwZXMuaD4uCisgICBPbiBTb2xhcmlzIDEwLCA8c2lnbmFsLmg+IGluY2x1ZGVzIDxzeXMvdHlwZXMuaD4sIHdoaWNoIGV2ZW50dWFsbHkgaW5jbHVkZXMKKyAgIHVzOyBzbyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gbm93LCBiZWZvcmUgdGhlIHNlY29uZCBpbmNsdXNpb24gZ3VhcmQuICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisjQElOQ0xVREVfTkVYVEAgQE5FWFRfU0lHTkFMX0hACisKKyN1bmRlZiBfR0xfQUxSRUFEWV9JTkNMVURJTkdfU0lHTkFMX0gKKworI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU0lHTkFMX0gKKyNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX1NJR05BTF9ICisKKy8qIE1hYyBPUyBYIDEwLjMsIEZyZWVCU0QgNi40LCBPcGVuQlNEIDMuOCwgT1NGLzEgNC4wLCBTb2xhcmlzIDIuNiBkZWNsYXJlCisgICBwdGhyZWFkX3NpZ21hc2sgaW4gPHB0aHJlYWQuaD4sIG5vdCBpbiA8c2lnbmFsLmg+LgorICAgQnV0IGF2b2lkIG5hbWVzcGFjZSBwb2xsdXRpb24gb24gZ2xpYmMgc3lzdGVtcy4qLworI2lmIChAR05VTElCX1BUSFJFQURfU0lHTUFTS0AgfHwgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSykgXAorICAgICYmICgoZGVmaW5lZCBfX0FQUExFX18gJiYgZGVmaW5lZCBfX01BQ0hfXykgfHwgZGVmaW5lZCBfX0ZyZWVCU0RfXyB8fCBkZWZpbmVkIF9fT3BlbkJTRF9fIHx8IGRlZmluZWQgX19vc2ZfXyB8fCBkZWZpbmVkIF9fc3VuKSBcCisgICAgJiYgISBkZWZpbmVkIF9fR0xJQkNfXworIyBpbmNsdWRlIDxwdGhyZWFkLmg+CisjZW5kaWYKKworLyogVGhlIGRlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwgZXRjLiBhcmUgY29waWVkIGhlcmUuICAqLworCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwgaXMgY29waWVkIGhlcmUuICAqLworCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UgaXMgY29waWVkIGhlcmUuICAqLworCisvKiBPbiBBSVgsIHNpZ19hdG9taWNfdCBhbHJlYWR5IGluY2x1ZGVzIHZvbGF0aWxlLiAgQzk5IHJlcXVpcmVzIHRoYXQKKyAgICd2b2xhdGlsZSBzaWdfYXRvbWljX3QnIGlnbm9yZSB0aGUgZXh0cmEgbW9kaWZpZXIsIGJ1dCBDODkgZGlkIG5vdC4KKyAgIEhlbmNlLCByZWRlZmluZSB0aGlzIHRvIGEgbm9uLXZvbGF0aWxlIHR5cGUgYXMgbmVlZGVkLiAgKi8KKyNpZiAhIEBIQVZFX1RZUEVfVk9MQVRJTEVfU0lHX0FUT01JQ19UQAorIyBpZiAhR05VTElCX2RlZmluZWRfc2lnX2F0b21pY190Cit0eXBlZGVmIGludCBycGxfc2lnX2F0b21pY190OworIyAgdW5kZWYgc2lnX2F0b21pY190CisjICBkZWZpbmUgc2lnX2F0b21pY190IHJwbF9zaWdfYXRvbWljX3QKKyMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9zaWdfYXRvbWljX3QgMQorIyBlbmRpZgorI2VuZGlmCisKKy8qIEEgc2V0IG9yIG1hc2sgb2Ygc2lnbmFscy4gICovCisjaWYgIUBIQVZFX1NJR1NFVF9UQAorIyBpZiAhR05VTElCX2RlZmluZWRfc2lnc2V0X3QKK3R5cGVkZWYgdW5zaWduZWQgaW50IHNpZ3NldF90OworIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX3NpZ3NldF90IDEKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBEZWZpbmUgc2lnaGFuZGxlcl90LCB0aGUgdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMuICBBIEdOVSBleHRlbnNpb24uICAqLworI2lmICFASEFWRV9TSUdIQU5ETEVSX1RACisjIGlmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyMgZW5kaWYKKyMgaWYgIUdOVUxJQl9kZWZpbmVkX3NpZ2hhbmRsZXJfdAordHlwZWRlZiB2b2lkICgqc2lnaGFuZGxlcl90KSAoaW50KTsKKyMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9zaWdoYW5kbGVyX3QgMQorIyBlbmRpZgorIyBpZmRlZiBfX2NwbHVzcGx1cworfQorIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfU0lHTkFMX0hfU0lHUElQRUAKKyMgaWZuZGVmIFNJR1BJUEUKKy8qIERlZmluZSBTSUdQSVBFIHRvIGEgdmFsdWUgdGhhdCBkb2VzIG5vdCBvdmVybGFwIHdpdGggb3RoZXIgc2lnbmFscy4gICovCisjICBkZWZpbmUgU0lHUElQRSAxMworIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX1NJR1BJUEUgMQorLyogVG8gYWN0dWFsbHkgdXNlIFNJR1BJUEUsIHlvdSBhbHNvIG5lZWQgdGhlIGdudWxpYiBtb2R1bGVzICdzaWdwcm9jbWFzaycsCisgICAnd3JpdGUnLCAnc3RkaW8nLiAgKi8KKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIE1heGltdW0gc2lnbmFsIG51bWJlciArIDEuICAqLworI2lmbmRlZiBOU0lHCisjIGlmIGRlZmluZWQgX19UQU5ERU0KKyMgIGRlZmluZSBOU0lHIDMyCisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9QVEhSRUFEX1NJR01BU0tACisjIGlmIEBSRVBMQUNFX1BUSFJFQURfU0lHTUFTS0AKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcHRocmVhZF9zaWdtYXNrCisjICAgZGVmaW5lIHB0aHJlYWRfc2lnbWFzayBycGxfcHRocmVhZF9zaWdtYXNrCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocHRocmVhZF9zaWdtYXNrLCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGhvdywgY29uc3Qgc2lnc2V0X3QgKm5ld19tYXNrLCBzaWdzZXRfdCAqb2xkX21hc2spKTsKK19HTF9DWFhBTElBU19SUEwgKHB0aHJlYWRfc2lnbWFzaywgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBob3csIGNvbnN0IHNpZ3NldF90ICpuZXdfbWFzaywgc2lnc2V0X3QgKm9sZF9tYXNrKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9QVEhSRUFEX1NJR01BU0tACitfR0xfRlVOQ0RFQ0xfU1lTIChwdGhyZWFkX3NpZ21hc2ssIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgaG93LCBjb25zdCBzaWdzZXRfdCAqbmV3X21hc2ssIHNpZ3NldF90ICpvbGRfbWFzaykpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHB0aHJlYWRfc2lnbWFzaywgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBob3csIGNvbnN0IHNpZ3NldF90ICpuZXdfbWFzaywgc2lnc2V0X3QgKm9sZF9tYXNrKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwdGhyZWFkX3NpZ21hc2spOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwdGhyZWFkX3NpZ21hc2sKKyMgaWYgSEFWRV9SQVdfREVDTF9QVEhSRUFEX1NJR01BU0sKK19HTF9XQVJOX09OX1VTRSAocHRocmVhZF9zaWdtYXNrLCAicHRocmVhZF9zaWdtYXNrIGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHB0aHJlYWRfc2lnbWFzayBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX1JBSVNFQAorIyBpZiBAUkVQTEFDRV9SQUlTRUAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcmFpc2UKKyMgICBkZWZpbmUgcmFpc2UgcnBsX3JhaXNlCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocmFpc2UsIGludCwgKGludCBzaWcpKTsKK19HTF9DWFhBTElBU19SUEwgKHJhaXNlLCBpbnQsIChpbnQgc2lnKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9SQUlTRUAKK19HTF9GVU5DREVDTF9TWVMgKHJhaXNlLCBpbnQsIChpbnQgc2lnKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocmFpc2UsIGludCwgKGludCBzaWcpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHJhaXNlKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcmFpc2UKKy8qIEFzc3VtZSByYWlzZSBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFIChyYWlzZSwgInJhaXNlIGNhbiBjcmFzaCBvbiBuYXRpdmUgV2luZG93cyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHJhaXNlIGZvciBwb3J0YWJpbGl0eSIpOworI2VuZGlmCisKKworI2lmIEBHTlVMSUJfU0lHUFJPQ01BU0tACisjIGlmICFASEFWRV9QT1NJWF9TSUdOQUxCTE9DS0lOR0AKKworIyAgaWZuZGVmIEdOVUxJQl9kZWZpbmVkX3NpZ25hbF9ibG9ja2luZworIyAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9zaWduYWxfYmxvY2tpbmcgMQorIyAgZW5kaWYKKworLyogTWF4aW11bSBzaWduYWwgbnVtYmVyICsgMS4gICovCisjICBpZm5kZWYgTlNJRworIyAgIGRlZmluZSBOU0lHIDMyCisjICBlbmRpZgorCisvKiBUaGlzIGNvZGUgc3VwcG9ydHMgb25seSAzMiBzaWduYWxzLiAgKi8KKyMgIGlmICFHTlVMSUJfZGVmaW5lZF92ZXJpZnlfTlNJR19jb25zdHJhaW50Cit0eXBlZGVmIGludCB2ZXJpZnlfTlNJR19jb25zdHJhaW50W05TSUcgPD0gMzIgPyAxIDogLTFdOworIyAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF92ZXJpZnlfTlNJR19jb25zdHJhaW50IDEKKyMgIGVuZGlmCisKKyMgZW5kaWYKKworLyogVGVzdCB3aGV0aGVyIGEgZ2l2ZW4gc2lnbmFsIGlzIGNvbnRhaW5lZCBpbiBhIHNpZ25hbCBzZXQuICAqLworIyBpZiBASEFWRV9QT1NJWF9TSUdOQUxCTE9DS0lOR0AKKy8qIFRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIG1hY3JvIG9uIE1hYyBPUyBYLiAgKi8KKyMgIGlmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjICAgdW5kZWYgc2lnaXNtZW1iZXIKKyMgIGVuZGlmCisjIGVsc2UKK19HTF9GVU5DREVDTF9TWVMgKHNpZ2lzbWVtYmVyLCBpbnQsIChjb25zdCBzaWdzZXRfdCAqc2V0LCBpbnQgc2lnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHNpZ2lzbWVtYmVyLCBpbnQsIChjb25zdCBzaWdzZXRfdCAqc2V0LCBpbnQgc2lnKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChzaWdpc21lbWJlcik7CisKKy8qIEluaXRpYWxpemUgYSBzaWduYWwgc2V0IHRvIHRoZSBlbXB0eSBzZXQuICAqLworIyBpZiBASEFWRV9QT1NJWF9TSUdOQUxCTE9DS0lOR0AKKy8qIFRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIG1hY3JvIG9uIE1hYyBPUyBYLiAgKi8KKyMgIGlmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjICAgdW5kZWYgc2lnZW1wdHlzZXQKKyMgIGVuZGlmCisjIGVsc2UKK19HTF9GVU5DREVDTF9TWVMgKHNpZ2VtcHR5c2V0LCBpbnQsIChzaWdzZXRfdCAqc2V0KSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc2lnZW1wdHlzZXQsIGludCwgKHNpZ3NldF90ICpzZXQpKTsKK19HTF9DWFhBTElBU1dBUk4gKHNpZ2VtcHR5c2V0KTsKKworLyogQWRkIGEgc2lnbmFsIHRvIGEgc2lnbmFsIHNldC4gICovCisjIGlmIEBIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HQAorLyogVGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgbWFjcm8gb24gTWFjIE9TIFguICAqLworIyAgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgICB1bmRlZiBzaWdhZGRzZXQKKyMgIGVuZGlmCisjIGVsc2UKK19HTF9GVU5DREVDTF9TWVMgKHNpZ2FkZHNldCwgaW50LCAoc2lnc2V0X3QgKnNldCwgaW50IHNpZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc2lnYWRkc2V0LCBpbnQsIChzaWdzZXRfdCAqc2V0LCBpbnQgc2lnKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChzaWdhZGRzZXQpOworCisvKiBSZW1vdmUgYSBzaWduYWwgZnJvbSBhIHNpZ25hbCBzZXQuICAqLworIyBpZiBASEFWRV9QT1NJWF9TSUdOQUxCTE9DS0lOR0AKKy8qIFRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIG1hY3JvIG9uIE1hYyBPUyBYLiAgKi8KKyMgIGlmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjICAgdW5kZWYgc2lnZGVsc2V0CisjICBlbmRpZgorIyBlbHNlCitfR0xfRlVOQ0RFQ0xfU1lTIChzaWdkZWxzZXQsIGludCwgKHNpZ3NldF90ICpzZXQsIGludCBzaWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHNpZ2RlbHNldCwgaW50LCAoc2lnc2V0X3QgKnNldCwgaW50IHNpZykpOworX0dMX0NYWEFMSUFTV0FSTiAoc2lnZGVsc2V0KTsKKworLyogRmlsbCBhIHNpZ25hbCBzZXQgd2l0aCBhbGwgcG9zc2libGUgc2lnbmFscy4gICovCisjIGlmIEBIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HQAorLyogVGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgbWFjcm8gb24gTWFjIE9TIFguICAqLworIyAgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgICB1bmRlZiBzaWdmaWxsc2V0CisjICBlbmRpZgorIyBlbHNlCitfR0xfRlVOQ0RFQ0xfU1lTIChzaWdmaWxsc2V0LCBpbnQsIChzaWdzZXRfdCAqc2V0KSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc2lnZmlsbHNldCwgaW50LCAoc2lnc2V0X3QgKnNldCkpOworX0dMX0NYWEFMSUFTV0FSTiAoc2lnZmlsbHNldCk7CisKKy8qIFJldHVybiB0aGUgc2V0IG9mIHRob3NlIGJsb2NrZWQgc2lnbmFscyB0aGF0IGFyZSBwZW5kaW5nLiAgKi8KKyMgaWYgIUBIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HQAorX0dMX0ZVTkNERUNMX1NZUyAoc2lncGVuZGluZywgaW50LCAoc2lnc2V0X3QgKnNldCkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHNpZ3BlbmRpbmcsIGludCwgKHNpZ3NldF90ICpzZXQpKTsKK19HTF9DWFhBTElBU1dBUk4gKHNpZ3BlbmRpbmcpOworCisvKiBJZiBPTERfU0VUIGlzIG5vdCBOVUxMLCBwdXQgdGhlIGN1cnJlbnQgc2V0IG9mIGJsb2NrZWQgc2lnbmFscyBpbiAqT0xEX1NFVC4KKyAgIFRoZW4sIGlmIFNFVCBpcyBub3QgTlVMTCwgYWZmZWN0IHRoZSBjdXJyZW50IHNldCBvZiBibG9ja2VkIHNpZ25hbHMgYnkKKyAgIGNvbWJpbmluZyBpdCB3aXRoICpTRVQgYXMgaW5kaWNhdGVkIGluIE9QRVJBVElPTi4KKyAgIEluIHRoaXMgaW1wbGVtZW50YXRpb24sIHlvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIGEgc2lnbmFsIGhhbmRsZXIKKyAgIHdoaWxlIHRoZSBzaWduYWwgaXMgYmxvY2tlZC4gICovCisjIGlmICFASEFWRV9QT1NJWF9TSUdOQUxCTE9DS0lOR0AKKyMgIGRlZmluZSBTSUdfQkxPQ0sgICAwICAvKiBibG9ja2VkX3NldCA9IGJsb2NrZWRfc2V0IHwgKnNldDsgKi8KKyMgIGRlZmluZSBTSUdfU0VUTUFTSyAxICAvKiBibG9ja2VkX3NldCA9ICpzZXQ7ICovCisjICBkZWZpbmUgU0lHX1VOQkxPQ0sgMiAgLyogYmxvY2tlZF9zZXQgPSBibG9ja2VkX3NldCAmIH4qc2V0OyAqLworX0dMX0ZVTkNERUNMX1NZUyAoc2lncHJvY21hc2ssIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgb3BlcmF0aW9uLCBjb25zdCBzaWdzZXRfdCAqc2V0LCBzaWdzZXRfdCAqb2xkX3NldCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc2lncHJvY21hc2ssIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgb3BlcmF0aW9uLCBjb25zdCBzaWdzZXRfdCAqc2V0LCBzaWdzZXRfdCAqb2xkX3NldCkpOworX0dMX0NYWEFMSUFTV0FSTiAoc2lncHJvY21hc2spOworCisvKiBJbnN0YWxsIHRoZSBoYW5kbGVyIEZVTkMgZm9yIHNpZ25hbCBTSUcsIGFuZCByZXR1cm4gdGhlIHByZXZpb3VzCisgICBoYW5kbGVyLiAgKi8KKyMgaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworIyBlbmRpZgorIyBpZiAhR05VTElCX2RlZmluZWRfZnVuY3Rpb25fdGFraW5nX2ludF9yZXR1cm5pbmdfdm9pZF90Cit0eXBlZGVmIHZvaWQgKCpfZ2xfZnVuY3Rpb25fdGFraW5nX2ludF9yZXR1cm5pbmdfdm9pZF90KSAoaW50KTsKKyMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9mdW5jdGlvbl90YWtpbmdfaW50X3JldHVybmluZ192b2lkX3QgMQorIyBlbmRpZgorIyBpZmRlZiBfX2NwbHVzcGx1cworfQorIyBlbmRpZgorIyBpZiAhQEhBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkdACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBzaWduYWwgcnBsX3NpZ25hbAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHNpZ25hbCwgX2dsX2Z1bmN0aW9uX3Rha2luZ19pbnRfcmV0dXJuaW5nX3ZvaWRfdCwKKyAgICAgICAgICAgICAgICAgIChpbnQgc2lnLCBfZ2xfZnVuY3Rpb25fdGFraW5nX2ludF9yZXR1cm5pbmdfdm9pZF90IGZ1bmMpKTsKK19HTF9DWFhBTElBU19SUEwgKHNpZ25hbCwgX2dsX2Z1bmN0aW9uX3Rha2luZ19pbnRfcmV0dXJuaW5nX3ZvaWRfdCwKKyAgICAgICAgICAgICAgICAgIChpbnQgc2lnLCBfZ2xfZnVuY3Rpb25fdGFraW5nX2ludF9yZXR1cm5pbmdfdm9pZF90IGZ1bmMpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoc2lnbmFsLCBfZ2xfZnVuY3Rpb25fdGFraW5nX2ludF9yZXR1cm5pbmdfdm9pZF90LAorICAgICAgICAgICAgICAgICAgKGludCBzaWcsIF9nbF9mdW5jdGlvbl90YWtpbmdfaW50X3JldHVybmluZ192b2lkX3QgZnVuYykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoc2lnbmFsKTsKKworIyBpZiAhQEhBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkdAICYmIEdOVUxJQl9kZWZpbmVkX1NJR1BJUEUKKy8qIFJhaXNlIHNpZ25hbCBTSUdQSVBFLiAgKi8KK19HTF9FWFRFUk5fQyBpbnQgX2dsX3JhaXNlX1NJR1BJUEUgKHZvaWQpOworIyBlbmRpZgorCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHNpZ2FkZHNldAorIyBpZiBIQVZFX1JBV19ERUNMX1NJR0FERFNFVAorX0dMX1dBUk5fT05fVVNFIChzaWdhZGRzZXQsICJzaWdhZGRzZXQgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSB0aGUgZ251bGliIG1vZHVsZSBzaWdwcm9jbWFzayBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyMgdW5kZWYgc2lnZGVsc2V0CisjIGlmIEhBVkVfUkFXX0RFQ0xfU0lHREVMU0VUCitfR0xfV0FSTl9PTl9VU0UgKHNpZ2RlbHNldCwgInNpZ2RlbHNldCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIHRoZSBnbnVsaWIgbW9kdWxlIHNpZ3Byb2NtYXNrIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorIyB1bmRlZiBzaWdlbXB0eXNldAorIyBpZiBIQVZFX1JBV19ERUNMX1NJR0VNUFRZU0VUCitfR0xfV0FSTl9PTl9VU0UgKHNpZ2VtcHR5c2V0LCAic2lnZW1wdHlzZXQgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSB0aGUgZ251bGliIG1vZHVsZSBzaWdwcm9jbWFzayBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyMgdW5kZWYgc2lnZmlsbHNldAorIyBpZiBIQVZFX1JBV19ERUNMX1NJR0ZJTExTRVQKK19HTF9XQVJOX09OX1VTRSAoc2lnZmlsbHNldCwgInNpZ2ZpbGxzZXQgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSB0aGUgZ251bGliIG1vZHVsZSBzaWdwcm9jbWFzayBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyMgdW5kZWYgc2lnaXNtZW1iZXIKKyMgaWYgSEFWRV9SQVdfREVDTF9TSUdJU01FTUJFUgorX0dMX1dBUk5fT05fVVNFIChzaWdpc21lbWJlciwgInNpZ2lzbWVtYmVyIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgdGhlIGdudWxpYiBtb2R1bGUgc2lncHJvY21hc2sgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjIHVuZGVmIHNpZ3BlbmRpbmcKKyMgaWYgSEFWRV9SQVdfREVDTF9TSUdQRU5ESU5HCitfR0xfV0FSTl9PTl9VU0UgKHNpZ3BlbmRpbmcsICJzaWdwZW5kaW5nIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgdGhlIGdudWxpYiBtb2R1bGUgc2lncHJvY21hc2sgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjIHVuZGVmIHNpZ3Byb2NtYXNrCisjIGlmIEhBVkVfUkFXX0RFQ0xfU0lHUFJPQ01BU0sKK19HTF9XQVJOX09OX1VTRSAoc2lncHJvY21hc2ssICJzaWdwcm9jbWFzayBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIHRoZSBnbnVsaWIgbW9kdWxlIHNpZ3Byb2NtYXNrIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmIC8qIEBHTlVMSUJfU0lHUFJPQ01BU0tAICovCisKKworI2lmIEBHTlVMSUJfU0lHQUNUSU9OQAorIyBpZiAhQEhBVkVfU0lHQUNUSU9OQAorCisjICBpZiAhQEhBVkVfU0lHSU5GT19UQAorCisjICAgaWYgIUdOVUxJQl9kZWZpbmVkX3NpZ2luZm9fdHlwZXMKKworLyogUHJlc2VudCB0byBhbGxvdyBjb21waWxhdGlvbiwgYnV0IHVuc3VwcG9ydGVkIGJ5IGdudWxpYi4gICovCit1bmlvbiBzaWd2YWwKK3sKKyAgaW50IHNpdmFsX2ludDsKKyAgdm9pZCAqc2l2YWxfcHRyOworfTsKKworLyogUHJlc2VudCB0byBhbGxvdyBjb21waWxhdGlvbiwgYnV0IHVuc3VwcG9ydGVkIGJ5IGdudWxpYi4gICovCitzdHJ1Y3Qgc2lnaW5mb190Cit7CisgIGludCBzaV9zaWdubzsKKyAgaW50IHNpX2NvZGU7CisgIGludCBzaV9lcnJubzsKKyAgcGlkX3Qgc2lfcGlkOworICB1aWRfdCBzaV91aWQ7CisgIHZvaWQgKnNpX2FkZHI7CisgIGludCBzaV9zdGF0dXM7CisgIGxvbmcgc2lfYmFuZDsKKyAgdW5pb24gc2lndmFsIHNpX3ZhbHVlOworfTsKK3R5cGVkZWYgc3RydWN0IHNpZ2luZm9fdCBzaWdpbmZvX3Q7CisKKyMgICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX3NpZ2luZm9fdHlwZXMgMQorIyAgIGVuZGlmCisKKyMgIGVuZGlmIC8qICFASEFWRV9TSUdJTkZPX1RAICovCisKKy8qIFdlIGFzc3VtZSB0aGF0IHBsYXRmb3JtcyB3aGljaCBsYWNrIHRoZSBzaWdhY3Rpb24oKSBmdW5jdGlvbiBhbHNvIGxhY2sKKyAgIHRoZSAnc3RydWN0IHNpZ2FjdGlvbicgdHlwZSwgYW5kIHZpY2UgdmVyc2EuICAqLworCisjICBpZiAhR05VTElCX2RlZmluZWRfc3RydWN0X3NpZ2FjdGlvbgorCitzdHJ1Y3Qgc2lnYWN0aW9uCit7CisgIHVuaW9uCisgIHsKKyAgICB2b2lkICgqX3NhX2hhbmRsZXIpIChpbnQpOworICAgIC8qIFByZXNlbnQgdG8gYWxsb3cgY29tcGlsYXRpb24sIGJ1dCB1bnN1cHBvcnRlZCBieSBnbnVsaWIuICBQT1NJWAorICAgICAgIHNheXMgdGhhdCBpbXBsZW1lbnRhdGlvbnMgbWF5LCBidXQgbm90IG11c3QsIG1ha2Ugc2Ffc2lnYWN0aW9uCisgICAgICAgb3ZlcmxhcCB3aXRoIHNhX2hhbmRsZXIsIGJ1dCB3ZSBrbm93IG9mIG5vIGltcGxlbWVudGF0aW9uIHdoZXJlCisgICAgICAgdGhleSBkbyBub3Qgb3ZlcmxhcC4gICovCisgICAgdm9pZCAoKl9zYV9zaWdhY3Rpb24pIChpbnQsIHNpZ2luZm9fdCAqLCB2b2lkICopOworICB9IF9zYV9mdW5jOworICBzaWdzZXRfdCBzYV9tYXNrOworICAvKiBOb3QgYWxsIFBPU0lYIGZsYWdzIGFyZSBzdXBwb3J0ZWQuICAqLworICBpbnQgc2FfZmxhZ3M7Cit9OworIyAgIGRlZmluZSBzYV9oYW5kbGVyIF9zYV9mdW5jLl9zYV9oYW5kbGVyCisjICAgZGVmaW5lIHNhX3NpZ2FjdGlvbiBfc2FfZnVuYy5fc2Ffc2lnYWN0aW9uCisvKiBVbnN1cHBvcnRlZCBmbGFncyBhcmUgbm90IHByZXNlbnQuICAqLworIyAgIGRlZmluZSBTQV9SRVNFVEhBTkQgMQorIyAgIGRlZmluZSBTQV9OT0RFRkVSIDIKKyMgICBkZWZpbmUgU0FfUkVTVEFSVCA0CisKKyMgICBkZWZpbmUgR05VTElCX2RlZmluZWRfc3RydWN0X3NpZ2FjdGlvbiAxCisjICBlbmRpZgorCitfR0xfRlVOQ0RFQ0xfU1lTIChzaWdhY3Rpb24sIGludCwgKGludCwgY29uc3Qgc3RydWN0IHNpZ2FjdGlvbiAqcmVzdHJpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gKnJlc3RyaWN0KSk7CisKKyMgZWxpZiAhQEhBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT05ACisKKyMgIGRlZmluZSBzYV9zaWdhY3Rpb24gc2FfaGFuZGxlcgorCisjIGVuZGlmIC8qICFASEFWRV9TSUdBQ1RJT05ALCAhQEhBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT05AICovCisKK19HTF9DWFhBTElBU19TWVMgKHNpZ2FjdGlvbiwgaW50LCAoaW50LCBjb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uICpyZXN0cmljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiAqcmVzdHJpY3QpKTsKK19HTF9DWFhBTElBU1dBUk4gKHNpZ2FjdGlvbik7CisKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc2lnYWN0aW9uCisjIGlmIEhBVkVfUkFXX0RFQ0xfU0lHQUNUSU9OCitfR0xfV0FSTl9PTl9VU0UgKHNpZ2FjdGlvbiwgInNpZ2FjdGlvbiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIHRoZSBnbnVsaWIgbW9kdWxlIHNpZ2FjdGlvbiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBTb21lIHN5c3RlbXMgZG9uJ3QgaGF2ZSBTQV9OT0RFRkVSLiAgKi8KKyNpZm5kZWYgU0FfTk9ERUZFUgorIyBkZWZpbmUgU0FfTk9ERUZFUiAwCisjZW5kaWYKKworCisjZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NJR05BTF9IICovCisjZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NJR05BTF9IICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9zaWduYml0ZC5jIGIvbGliL3NpZ25iaXRkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYyOWZmNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9zaWduYml0ZC5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qIHNpZ25iaXQoKSBtYWNybzogRGV0ZXJtaW5lIHRoZSBzaWduIGJpdCBvZiBhIGZsb2F0aW5nLXBvaW50IG51bWJlci4KKyAgIENvcHlyaWdodCAoQykgMjAwNy0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImlzbmFuZC1ub2xpYm0uaCIKKyNpbmNsdWRlICJmbG9hdCsuaCIKKworI2lmZGVmIGdsX3NpZ25iaXRkX09QVElNSVpFRF9NQUNSTworIyB1bmRlZiBnbF9zaWduYml0ZAorI2VuZGlmCisKK2ludAorZ2xfc2lnbmJpdGQgKGRvdWJsZSBhcmcpCit7CisjaWYgZGVmaW5lZCBEQkxfU0lHTkJJVF9XT1JEICYmIGRlZmluZWQgREJMX1NJR05CSVRfQklUCisgIC8qIFRoZSB1c2Ugb2YgYSB1bmlvbiB0byBleHRyYWN0IHRoZSBiaXRzIG9mIHRoZSByZXByZXNlbnRhdGlvbiBvZiBhCisgICAgICdsb25nIGRvdWJsZScgaXMgc2FmZSBpbiBwcmFjdGljZSwgZGVzcGl0ZSBvZiB0aGUgImFsaWFzaW5nIHJ1bGVzIiBvZgorICAgICBDOTksIGJlY2F1c2UgdGhlIEdDQyBkb2NzIHNheQorICAgICAgICJFdmVuIHdpdGggJy1mc3RyaWN0LWFsaWFzaW5nJywgdHlwZS1wdW5uaW5nIGlzIGFsbG93ZWQsIHByb3ZpZGVkIHRoZQorICAgICAgICBtZW1vcnkgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgdW5pb24gdHlwZS4iCisgICAgIGFuZCBzaW1pbGFybHkgZm9yIG90aGVyIGNvbXBpbGVycy4gICovCisjIGRlZmluZSBOV09SRFMgXAorICAgICgoc2l6ZW9mIChkb3VibGUpICsgc2l6ZW9mICh1bnNpZ25lZCBpbnQpIC0gMSkgLyBzaXplb2YgKHVuc2lnbmVkIGludCkpCisgIHVuaW9uIHsgZG91YmxlIHZhbHVlOyB1bnNpZ25lZCBpbnQgd29yZFtOV09SRFNdOyB9IG07CisgIG0udmFsdWUgPSBhcmc7CisgIHJldHVybiAobS53b3JkW0RCTF9TSUdOQklUX1dPUkRdID4+IERCTF9TSUdOQklUX0JJVCkgJiAxOworI2VsaWYgSEFWRV9DT1BZU0lHTl9JTl9MSUJDCisgIHJldHVybiBjb3B5c2lnbiAoMS4wLCBhcmcpIDwgMDsKKyNlbHNlCisgIC8qIFRoaXMgZG9lcyBub3QgZG8gdGhlIHJpZ2h0IHRoaW5nIGZvciBOYU4sIGJ1dCB0aGlzIGlzIGlycmVsZXZhbnQgZm9yCisgICAgIG1vc3QgdXNlIGNhc2VzLiAgKi8KKyAgaWYgKGlzbmFuZCAoYXJnKSkKKyAgICByZXR1cm4gMDsKKyAgaWYgKGFyZyA8IDAuMCkKKyAgICByZXR1cm4gMTsKKyAgZWxzZSBpZiAoYXJnID09IDAuMCkKKyAgICB7CisgICAgICAvKiBEaXN0aW5ndWlzaCAwLjAgYW5kIC0wLjAuICAqLworICAgICAgc3RhdGljIGRvdWJsZSBwbHVzX3plcm8gPSAwLjA7CisgICAgICBkb3VibGUgYXJnX21lbSA9IGFyZzsKKyAgICAgIHJldHVybiAobWVtY21wICgmcGx1c196ZXJvLCAmYXJnX21lbSwgU0laRU9GX0RCTCkgIT0gMCk7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2xpYi9zaWduYml0Zi5jIGIvbGliL3NpZ25iaXRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk5Zjk5MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9zaWduYml0Zi5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qIHNpZ25iaXQoKSBtYWNybzogRGV0ZXJtaW5lIHRoZSBzaWduIGJpdCBvZiBhIGZsb2F0aW5nLXBvaW50IG51bWJlci4KKyAgIENvcHlyaWdodCAoQykgMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImlzbmFuZi1ub2xpYm0uaCIKKyNpbmNsdWRlICJmbG9hdCsuaCIKKworI2lmZGVmIGdsX3NpZ25iaXRmX09QVElNSVpFRF9NQUNSTworIyB1bmRlZiBnbF9zaWduYml0ZgorI2VuZGlmCisKK2ludAorZ2xfc2lnbmJpdGYgKGZsb2F0IGFyZykKK3sKKyNpZiBkZWZpbmVkIEZMVF9TSUdOQklUX1dPUkQgJiYgZGVmaW5lZCBGTFRfU0lHTkJJVF9CSVQKKyAgLyogVGhlIHVzZSBvZiBhIHVuaW9uIHRvIGV4dHJhY3QgdGhlIGJpdHMgb2YgdGhlIHJlcHJlc2VudGF0aW9uIG9mIGEKKyAgICAgJ2xvbmcgZG91YmxlJyBpcyBzYWZlIGluIHByYWN0aWNlLCBkZXNwaXRlIG9mIHRoZSAiYWxpYXNpbmcgcnVsZXMiIG9mCisgICAgIEM5OSwgYmVjYXVzZSB0aGUgR0NDIGRvY3Mgc2F5CisgICAgICAgIkV2ZW4gd2l0aCAnLWZzdHJpY3QtYWxpYXNpbmcnLCB0eXBlLXB1bm5pbmcgaXMgYWxsb3dlZCwgcHJvdmlkZWQgdGhlCisgICAgICAgIG1lbW9yeSBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSB1bmlvbiB0eXBlLiIKKyAgICAgYW5kIHNpbWlsYXJseSBmb3Igb3RoZXIgY29tcGlsZXJzLiAgKi8KKyMgZGVmaW5lIE5XT1JEUyBcCisgICAgKChzaXplb2YgKGZsb2F0KSArIHNpemVvZiAodW5zaWduZWQgaW50KSAtIDEpIC8gc2l6ZW9mICh1bnNpZ25lZCBpbnQpKQorICB1bmlvbiB7IGZsb2F0IHZhbHVlOyB1bnNpZ25lZCBpbnQgd29yZFtOV09SRFNdOyB9IG07CisgIG0udmFsdWUgPSBhcmc7CisgIHJldHVybiAobS53b3JkW0ZMVF9TSUdOQklUX1dPUkRdID4+IEZMVF9TSUdOQklUX0JJVCkgJiAxOworI2VsaWYgSEFWRV9DT1BZU0lHTkZfSU5fTElCQworICByZXR1cm4gY29weXNpZ25mICgxLjBmLCBhcmcpIDwgMDsKKyNlbHNlCisgIC8qIFRoaXMgZG9lcyBub3QgZG8gdGhlIHJpZ2h0IHRoaW5nIGZvciBOYU4sIGJ1dCB0aGlzIGlzIGlycmVsZXZhbnQgZm9yCisgICAgIG1vc3QgdXNlIGNhc2VzLiAgKi8KKyAgaWYgKGlzbmFuZiAoYXJnKSkKKyAgICByZXR1cm4gMDsKKyAgaWYgKGFyZyA8IDAuMGYpCisgICAgcmV0dXJuIDE7CisgIGVsc2UgaWYgKGFyZyA9PSAwLjBmKQorICAgIHsKKyAgICAgIC8qIERpc3Rpbmd1aXNoIDAuMGYgYW5kIC0wLjBmLiAgKi8KKyAgICAgIHN0YXRpYyBmbG9hdCBwbHVzX3plcm8gPSAwLjBmOworICAgICAgZmxvYXQgYXJnX21lbSA9IGFyZzsKKyAgICAgIHJldHVybiAobWVtY21wICgmcGx1c196ZXJvLCAmYXJnX21lbSwgU0laRU9GX0ZMVCkgIT0gMCk7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2xpYi9zaWduYml0bC5jIGIvbGliL3NpZ25iaXRsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVhZmNmMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9zaWduYml0bC5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qIHNpZ25iaXQoKSBtYWNybzogRGV0ZXJtaW5lIHRoZSBzaWduIGJpdCBvZiBhIGZsb2F0aW5nLXBvaW50IG51bWJlci4KKyAgIENvcHlyaWdodCAoQykgMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImlzbmFubC1ub2xpYm0uaCIKKyNpbmNsdWRlICJmbG9hdCsuaCIKKworI2lmZGVmIGdsX3NpZ25iaXRsX09QVElNSVpFRF9NQUNSTworIyB1bmRlZiBnbF9zaWduYml0bAorI2VuZGlmCisKK2ludAorZ2xfc2lnbmJpdGwgKGxvbmcgZG91YmxlIGFyZykKK3sKKyNpZiBkZWZpbmVkIExEQkxfU0lHTkJJVF9XT1JEICYmIGRlZmluZWQgTERCTF9TSUdOQklUX0JJVAorICAvKiBUaGUgdXNlIG9mIGEgdW5pb24gdG8gZXh0cmFjdCB0aGUgYml0cyBvZiB0aGUgcmVwcmVzZW50YXRpb24gb2YgYQorICAgICAnbG9uZyBkb3VibGUnIGlzIHNhZmUgaW4gcHJhY3RpY2UsIGRlc3BpdGUgb2YgdGhlICJhbGlhc2luZyBydWxlcyIgb2YKKyAgICAgQzk5LCBiZWNhdXNlIHRoZSBHQ0MgZG9jcyBzYXkKKyAgICAgICAiRXZlbiB3aXRoICctZnN0cmljdC1hbGlhc2luZycsIHR5cGUtcHVubmluZyBpcyBhbGxvd2VkLCBwcm92aWRlZCB0aGUKKyAgICAgICAgbWVtb3J5IGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlIHVuaW9uIHR5cGUuIgorICAgICBhbmQgc2ltaWxhcmx5IGZvciBvdGhlciBjb21waWxlcnMuICAqLworIyBkZWZpbmUgTldPUkRTIFwKKyAgICAoKHNpemVvZiAobG9uZyBkb3VibGUpICsgc2l6ZW9mICh1bnNpZ25lZCBpbnQpIC0gMSkgLyBzaXplb2YgKHVuc2lnbmVkIGludCkpCisgIHVuaW9uIHsgbG9uZyBkb3VibGUgdmFsdWU7IHVuc2lnbmVkIGludCB3b3JkW05XT1JEU107IH0gbTsKKyAgbS52YWx1ZSA9IGFyZzsKKyAgcmV0dXJuIChtLndvcmRbTERCTF9TSUdOQklUX1dPUkRdID4+IExEQkxfU0lHTkJJVF9CSVQpICYgMTsKKyNlbGlmIEhBVkVfQ09QWVNJR05MX0lOX0xJQkMKKyAgcmV0dXJuIGNvcHlzaWdubCAoMS4wTCwgYXJnKSA8IDA7CisjZWxzZQorICAvKiBUaGlzIGRvZXMgbm90IGRvIHRoZSByaWdodCB0aGluZyBmb3IgTmFOLCBidXQgdGhpcyBpcyBpcnJlbGV2YW50IGZvcgorICAgICBtb3N0IHVzZSBjYXNlcy4gICovCisgIGlmIChpc25hbmwgKGFyZykpCisgICAgcmV0dXJuIDA7CisgIGlmIChhcmcgPCAwLjBMKQorICAgIHJldHVybiAxOworICBlbHNlIGlmIChhcmcgPT0gMC4wTCkKKyAgICB7CisgICAgICAvKiBEaXN0aW5ndWlzaCAwLjBMIGFuZCAtMC4wTC4gICovCisgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgcGx1c196ZXJvID0gMC4wTDsKKyAgICAgIGxvbmcgZG91YmxlIGFyZ19tZW0gPSBhcmc7CisgICAgICByZXR1cm4gKG1lbWNtcCAoJnBsdXNfemVybywgJmFyZ19tZW0sIFNJWkVPRl9MREJMKSAhPSAwKTsKKyAgICB9CisgIGVsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvbGliL3NpZ3Byb2NtYXNrLmMgYi9saWIvc2lncHJvY21hc2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmYzYjI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3NpZ3Byb2NtYXNrLmMKQEAgLTAsMCArMSwzNDkgQEAKKy8qIFBPU0lYIGNvbXBhdGlibGUgc2lnbmFsIGJsb2NraW5nLgorICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPiwgMjAwNi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlIDxzaWduYWwuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpZiBIQVZFX01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUgorIyBpbmNsdWRlICJtc3ZjLWludmFsLmgiCisjZW5kaWYKKworLyogV2UgYXNzdW1lIHRoYXQgYSBwbGF0Zm9ybSB3aXRob3V0IFBPU0lYIHNpZ25hbCBibG9ja2luZyBmdW5jdGlvbnMKKyAgIGFsc28gZG9lcyBub3QgaGF2ZSB0aGUgUE9TSVggc2lnYWN0aW9uKCkgZnVuY3Rpb24sIG9ubHkgdGhlCisgICBzaWduYWwoKSBmdW5jdGlvbi4gIFdlIGFsc28gYXNzdW1lIHNpZ25hbCgpIGhhcyBTeXNWIHNlbWFudGljcywKKyAgIHdoZXJlIGFueSBoYW5kbGVyIGlzIHVuaW5zdGFsbGVkIHByaW9yIHRvIGJlaW5nIGludm9rZWQuICBUaGlzIGlzCisgICB0cnVlIGZvciBuYXRpdmUgV2luZG93cyBwbGF0Zm9ybXMuICAqLworCisvKiBXZSB1c2UgcmF3IHNpZ25hbCgpLCBidXQgYWxzbyBwcm92aWRlIGEgd3JhcHBlciBycGxfc2lnbmFsKCkgc28KKyAgIHRoYXQgYXBwbGljYXRpb25zIGNhbiBxdWVyeSBvciBjaGFuZ2UgYSBibG9ja2VkIHNpZ25hbC4gICovCisjdW5kZWYgc2lnbmFsCisKKy8qIFByb3ZpZGUgaW52YWxpZCBzaWduYWwgbnVtYmVycyBhcyBmYWxsYmFja3MgaWYgdGhlIHVuY2F0Y2hhYmxlCisgICBzaWduYWxzIGFyZSBub3QgZGVmaW5lZC4gICovCisjaWZuZGVmIFNJR0tJTEwKKyMgZGVmaW5lIFNJR0tJTEwgKC0xKQorI2VuZGlmCisjaWZuZGVmIFNJR1NUT1AKKyMgZGVmaW5lIFNJR1NUT1AgKC0xKQorI2VuZGlmCisKKy8qIE9uIG5hdGl2ZSBXaW5kb3dzLCBhcyBvZiAyMDA4LCB0aGUgc2lnbmFsIFNJR0FCUlRfQ09NUEFUIGlzIGFuIGFsaWFzCisgICBmb3IgdGhlIHNpZ25hbCBTSUdBQlJULiAgT25seSBvbmUgc2lnbmFsIGhhbmRsZXIgaXMgc3RvcmVkIGZvciBib3RoCisgICBTSUdBQlJUIGFuZCBTSUdBQlJUX0NPTVBBVC4gIFNJR0FCUlRfQ09NUEFUIGlzIG5vdCBhIHNpZ25hbCBvZiBpdHMgb3duLiAgKi8KKyNpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCisjIHVuZGVmIFNJR0FCUlRfQ09NUEFUCisjIGRlZmluZSBTSUdBQlJUX0NPTVBBVCA2CisjZW5kaWYKKyNpZmRlZiBTSUdBQlJUX0NPTVBBVAorIyBkZWZpbmUgU0lHQUJSVF9DT01QQVRfTUFTSyAoMVUgPDwgU0lHQUJSVF9DT01QQVQpCisjZWxzZQorIyBkZWZpbmUgU0lHQUJSVF9DT01QQVRfTUFTSyAwCisjZW5kaWYKKwordHlwZWRlZiB2b2lkICgqaGFuZGxlcl90KSAoaW50KTsKKworI2lmIEhBVkVfTVNWQ19JTlZBTElEX1BBUkFNRVRFUl9IQU5ETEVSCitzdGF0aWMgaGFuZGxlcl90CitzaWduYWxfbm90aHJvdyAoaW50IHNpZywgaGFuZGxlcl90IGhhbmRsZXIpCit7CisgIGhhbmRsZXJfdCByZXN1bHQ7CisKKyAgVFJZX01TVkNfSU5WQUwKKyAgICB7CisgICAgICByZXN1bHQgPSBzaWduYWwgKHNpZywgaGFuZGxlcik7CisgICAgfQorICBDQVRDSF9NU1ZDX0lOVkFMCisgICAgeworICAgICAgcmVzdWx0ID0gU0lHX0VSUjsKKyAgICAgIGVycm5vID0gRUlOVkFMOworICAgIH0KKyAgRE9ORV9NU1ZDX0lOVkFMOworCisgIHJldHVybiByZXN1bHQ7Cit9CisjIGRlZmluZSBzaWduYWwgc2lnbmFsX25vdGhyb3cKKyNlbmRpZgorCisvKiBIYW5kbGluZyBvZiBnbnVsaWIgZGVmaW5lZCBzaWduYWxzLiAgKi8KKworI2lmIEdOVUxJQl9kZWZpbmVkX1NJR1BJUEUKK3N0YXRpYyBoYW5kbGVyX3QgU0lHUElQRV9oYW5kbGVyID0gU0lHX0RGTDsKKyNlbmRpZgorCisjaWYgR05VTElCX2RlZmluZWRfU0lHUElQRQorc3RhdGljIGhhbmRsZXJfdAorZXh0X3NpZ25hbCAoaW50IHNpZywgaGFuZGxlcl90IGhhbmRsZXIpCit7CisgIHN3aXRjaCAoc2lnKQorICAgIHsKKyAgICBjYXNlIFNJR1BJUEU6CisgICAgICB7CisgICAgICAgIGhhbmRsZXJfdCBvbGRfaGFuZGxlciA9IFNJR1BJUEVfaGFuZGxlcjsKKyAgICAgICAgU0lHUElQRV9oYW5kbGVyID0gaGFuZGxlcjsKKyAgICAgICAgcmV0dXJuIG9sZF9oYW5kbGVyOworICAgICAgfQorICAgIGRlZmF1bHQ6IC8qIFN5c3RlbSBkZWZpbmVkIHNpZ25hbCAqLworICAgICAgcmV0dXJuIHNpZ25hbCAoc2lnLCBoYW5kbGVyKTsKKyAgICB9Cit9CisjIHVuZGVmIHNpZ25hbAorIyBkZWZpbmUgc2lnbmFsIGV4dF9zaWduYWwKKyNlbmRpZgorCitpbnQKK3NpZ2lzbWVtYmVyIChjb25zdCBzaWdzZXRfdCAqc2V0LCBpbnQgc2lnKQoreworICBpZiAoc2lnID49IDAgJiYgc2lnIDwgTlNJRykKKyAgICB7CisgICAgICAjaWZkZWYgU0lHQUJSVF9DT01QQVQKKyAgICAgIGlmIChzaWcgPT0gU0lHQUJSVF9DT01QQVQpCisgICAgICAgIHNpZyA9IFNJR0FCUlQ7CisgICAgICAjZW5kaWYKKworICAgICAgcmV0dXJuICgqc2V0ID4+IHNpZykgJiAxOworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCitpbnQKK3NpZ2VtcHR5c2V0IChzaWdzZXRfdCAqc2V0KQoreworICAqc2V0ID0gMDsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc2lnYWRkc2V0IChzaWdzZXRfdCAqc2V0LCBpbnQgc2lnKQoreworICBpZiAoc2lnID49IDAgJiYgc2lnIDwgTlNJRykKKyAgICB7CisgICAgICAjaWZkZWYgU0lHQUJSVF9DT01QQVQKKyAgICAgIGlmIChzaWcgPT0gU0lHQUJSVF9DT01QQVQpCisgICAgICAgIHNpZyA9IFNJR0FCUlQ7CisgICAgICAjZW5kaWYKKworICAgICAgKnNldCB8PSAxVSA8PCBzaWc7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9Cit9CisKK2ludAorc2lnZGVsc2V0IChzaWdzZXRfdCAqc2V0LCBpbnQgc2lnKQoreworICBpZiAoc2lnID49IDAgJiYgc2lnIDwgTlNJRykKKyAgICB7CisgICAgICAjaWZkZWYgU0lHQUJSVF9DT01QQVQKKyAgICAgIGlmIChzaWcgPT0gU0lHQUJSVF9DT01QQVQpCisgICAgICAgIHNpZyA9IFNJR0FCUlQ7CisgICAgICAjZW5kaWYKKworICAgICAgKnNldCAmPSB+KDFVIDw8IHNpZyk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9Cit9CisKKworaW50CitzaWdmaWxsc2V0IChzaWdzZXRfdCAqc2V0KQoreworICAqc2V0ID0gKCgyVSA8PCAoTlNJRyAtIDEpKSAtIDEpICYgfiBTSUdBQlJUX0NPTVBBVF9NQVNLOworICByZXR1cm4gMDsKK30KKworLyogU2V0IG9mIGN1cnJlbnRseSBibG9ja2VkIHNpZ25hbHMuICAqLworc3RhdGljIHZvbGF0aWxlIHNpZ3NldF90IGJsb2NrZWRfc2V0IC8qID0gMCAqLzsKKworLyogU2V0IG9mIGN1cnJlbnRseSBibG9ja2VkIGFuZCBwZW5kaW5nIHNpZ25hbHMuICAqLworc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBwZW5kaW5nX2FycmF5W05TSUddIC8qID0geyAwIH0gKi87CisKKy8qIFNpZ25hbCBoYW5kbGVyIHRoYXQgaXMgaW5zdGFsbGVkIGZvciBibG9ja2VkIHNpZ25hbHMuICAqLworc3RhdGljIHZvaWQKK2Jsb2NrZWRfaGFuZGxlciAoaW50IHNpZykKK3sKKyAgLyogUmVpbnN0YWxsIHRoZSBoYW5kbGVyLCBpbiBjYXNlIHRoZSBzaWduYWwgb2NjdXJzIG11bHRpcGxlIHRpbWVzCisgICAgIHdoaWxlIGJsb2NrZWQuICBUaGVyZSBpcyBhbiBpbmhlcmVudCByYWNlIHdoZXJlIGFuIGFzeW5jaHJvbm91cworICAgICBzaWduYWwgaW4gYmV0d2VlbiB3aGVuIHRoZSBrZXJuZWwgdW5pbnN0YWxsZWQgdGhlIGhhbmRsZXIgYW5kCisgICAgIHdoZW4gd2UgcmVpbnN0YWxsIGl0IHdpbGwgdHJpZ2dlciB0aGUgZGVmYXVsdCBoYW5kbGVyOyBvaAorICAgICB3ZWxsLiAgKi8KKyAgc2lnbmFsIChzaWcsIGJsb2NrZWRfaGFuZGxlcik7CisgIGlmIChzaWcgPj0gMCAmJiBzaWcgPCBOU0lHKQorICAgIHBlbmRpbmdfYXJyYXlbc2lnXSA9IDE7Cit9CisKK2ludAorc2lncGVuZGluZyAoc2lnc2V0X3QgKnNldCkKK3sKKyAgc2lnc2V0X3QgcGVuZGluZyA9IDA7CisgIGludCBzaWc7CisKKyAgZm9yIChzaWcgPSAwOyBzaWcgPCBOU0lHOyBzaWcrKykKKyAgICBpZiAocGVuZGluZ19hcnJheVtzaWddKQorICAgICAgcGVuZGluZyB8PSAxVSA8PCBzaWc7CisgICpzZXQgPSBwZW5kaW5nOworICByZXR1cm4gMDsKK30KKworLyogVGhlIHByZXZpb3VzIHNpZ25hbCBoYW5kbGVycy4KKyAgIE9ubHkgdGhlIGFycmF5IGVsZW1lbnRzIGNvcnJlc3BvbmRpbmcgdG8gYmxvY2tlZCBzaWduYWxzIGFyZSByZWxldmFudC4gICovCitzdGF0aWMgdm9sYXRpbGUgaGFuZGxlcl90IG9sZF9oYW5kbGVyc1tOU0lHXTsKKworaW50CitzaWdwcm9jbWFzayAoaW50IG9wZXJhdGlvbiwgY29uc3Qgc2lnc2V0X3QgKnNldCwgc2lnc2V0X3QgKm9sZF9zZXQpCit7CisgIGlmIChvbGRfc2V0ICE9IE5VTEwpCisgICAgKm9sZF9zZXQgPSBibG9ja2VkX3NldDsKKworICBpZiAoc2V0ICE9IE5VTEwpCisgICAgeworICAgICAgc2lnc2V0X3QgbmV3X2Jsb2NrZWRfc2V0OworICAgICAgc2lnc2V0X3QgdG9fdW5ibG9jazsKKyAgICAgIHNpZ3NldF90IHRvX2Jsb2NrOworCisgICAgICBzd2l0Y2ggKG9wZXJhdGlvbikKKyAgICAgICAgeworICAgICAgICBjYXNlIFNJR19CTE9DSzoKKyAgICAgICAgICBuZXdfYmxvY2tlZF9zZXQgPSBibG9ja2VkX3NldCB8ICpzZXQ7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0lHX1NFVE1BU0s6CisgICAgICAgICAgbmV3X2Jsb2NrZWRfc2V0ID0gKnNldDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTSUdfVU5CTE9DSzoKKyAgICAgICAgICBuZXdfYmxvY2tlZF9zZXQgPSBibG9ja2VkX3NldCAmIH4qc2V0OworICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgdG9fdW5ibG9jayA9IGJsb2NrZWRfc2V0ICYgfm5ld19ibG9ja2VkX3NldDsKKyAgICAgIHRvX2Jsb2NrID0gbmV3X2Jsb2NrZWRfc2V0ICYgfmJsb2NrZWRfc2V0OworCisgICAgICBpZiAodG9fYmxvY2sgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGludCBzaWc7CisKKyAgICAgICAgICBmb3IgKHNpZyA9IDA7IHNpZyA8IE5TSUc7IHNpZysrKQorICAgICAgICAgICAgaWYgKCh0b19ibG9jayA+PiBzaWcpICYgMSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBlbmRpbmdfYXJyYXlbc2lnXSA9IDA7CisgICAgICAgICAgICAgICAgaWYgKChvbGRfaGFuZGxlcnNbc2lnXSA9IHNpZ25hbCAoc2lnLCBibG9ja2VkX2hhbmRsZXIpKSAhPSBTSUdfRVJSKQorICAgICAgICAgICAgICAgICAgYmxvY2tlZF9zZXQgfD0gMVUgPDwgc2lnOworICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgaWYgKHRvX3VuYmxvY2sgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgIHNpZ19hdG9taWNfdCByZWNlaXZlZFtOU0lHXTsKKyAgICAgICAgICBpbnQgc2lnOworCisgICAgICAgICAgZm9yIChzaWcgPSAwOyBzaWcgPCBOU0lHOyBzaWcrKykKKyAgICAgICAgICAgIGlmICgodG9fdW5ibG9jayA+PiBzaWcpICYgMSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChzaWduYWwgKHNpZywgb2xkX2hhbmRsZXJzW3NpZ10pICE9IGJsb2NrZWRfaGFuZGxlcikKKyAgICAgICAgICAgICAgICAgIC8qIFRoZSBhcHBsaWNhdGlvbiBjaGFuZ2VkIGEgc2lnbmFsIGhhbmRsZXIgd2hpbGUgdGhlIHNpZ25hbAorICAgICAgICAgICAgICAgICAgICAgd2FzIGJsb2NrZWQsIGJ5cGFzc2luZyBvdXIgcnBsX3NpZ25hbCByZXBsYWNlbWVudC4KKyAgICAgICAgICAgICAgICAgICAgIFdlIGRvbid0IHN1cHBvcnQgdGhpcy4gICovCisgICAgICAgICAgICAgICAgICBhYm9ydCAoKTsKKyAgICAgICAgICAgICAgICByZWNlaXZlZFtzaWddID0gcGVuZGluZ19hcnJheVtzaWddOworICAgICAgICAgICAgICAgIGJsb2NrZWRfc2V0ICY9IH4oMVUgPDwgc2lnKTsKKyAgICAgICAgICAgICAgICBwZW5kaW5nX2FycmF5W3NpZ10gPSAwOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHJlY2VpdmVkW3NpZ10gPSAwOworCisgICAgICAgICAgZm9yIChzaWcgPSAwOyBzaWcgPCBOU0lHOyBzaWcrKykKKyAgICAgICAgICAgIGlmIChyZWNlaXZlZFtzaWddKQorICAgICAgICAgICAgICByYWlzZSAoc2lnKTsKKyAgICAgICAgfQorICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIEluc3RhbGwgdGhlIGhhbmRsZXIgRlVOQyBmb3Igc2lnbmFsIFNJRywgYW5kIHJldHVybiB0aGUgcHJldmlvdXMKKyAgIGhhbmRsZXIuICAqLworaGFuZGxlcl90CitycGxfc2lnbmFsIChpbnQgc2lnLCBoYW5kbGVyX3QgaGFuZGxlcikKK3sKKyAgLyogV2UgbXVzdCBwcm92aWRlIGEgd3JhcHBlciwgc28gdGhhdCBhIHVzZXIgY2FuIHF1ZXJ5IHdoYXQgaGFuZGxlcgorICAgICB0aGV5IGluc3RhbGxlZCBldmVuIGlmIHRoYXQgc2lnbmFsIGlzIGN1cnJlbnRseSBibG9ja2VkLiAgKi8KKyAgaWYgKHNpZyA+PSAwICYmIHNpZyA8IE5TSUcgJiYgc2lnICE9IFNJR0tJTEwgJiYgc2lnICE9IFNJR1NUT1AKKyAgICAgICYmIGhhbmRsZXIgIT0gU0lHX0VSUikKKyAgICB7CisgICAgICAjaWZkZWYgU0lHQUJSVF9DT01QQVQKKyAgICAgIGlmIChzaWcgPT0gU0lHQUJSVF9DT01QQVQpCisgICAgICAgIHNpZyA9IFNJR0FCUlQ7CisgICAgICAjZW5kaWYKKworICAgICAgaWYgKGJsb2NrZWRfc2V0ICYgKDFVIDw8IHNpZykpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBQT1NJWCBzdGF0ZXMgdGhhdCBzaWdwcm9jbWFzayBhbmQgc2lnbmFsIGFyZSBib3RoCisgICAgICAgICAgICAgYXN5bmMtc2lnbmFsLXNhZmUuICBUaGlzIGlzIG5vdCB0cnVlIG9mIG91cgorICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIC0gdGhlcmUgaXMgYSBzbGlnaHQgZGF0YSByYWNlIHdoZXJlIGFuCisgICAgICAgICAgICAgYXN5bmNocm9ub3VzIGludGVycnVwdCBvbiBzaWduYWwgQSBjYW4gb2NjdXIgYWZ0ZXIgd2UKKyAgICAgICAgICAgICBpbnN0YWxsIGJsb2NrZWRfaGFuZGxlciBidXQgYmVmb3JlIHdlIGhhdmUgdXBkYXRlZAorICAgICAgICAgICAgIG9sZF9oYW5kbGVycyBmb3Igc2lnbmFsIEIsIHN1Y2ggdGhhdCBoYW5kbGVyIEEgY2FuIHNlZQorICAgICAgICAgICAgIHN0YWxlIGluZm9ybWF0aW9uIGlmIGl0IGNhbGxzIHNpZ25hbChCKS4gIE9oIHdlbGwgLQorICAgICAgICAgICAgIHNpZ25hbCBoYW5kbGVycyByZWFsbHkgc2hvdWxkbid0IHRyeSB0byBtYW5pcHVsYXRlIHRoZQorICAgICAgICAgICAgIGluc3RhbGxlZCBoYW5kbGVycyBvZiB1bnJlbGF0ZWQgc2lnbmFscy4gICovCisgICAgICAgICAgaGFuZGxlcl90IHJlc3VsdCA9IG9sZF9oYW5kbGVyc1tzaWddOworICAgICAgICAgIG9sZF9oYW5kbGVyc1tzaWddID0gaGFuZGxlcjsKKyAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBzaWduYWwgKHNpZywgaGFuZGxlcik7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICByZXR1cm4gU0lHX0VSUjsKKyAgICB9Cit9CisKKyNpZiBHTlVMSUJfZGVmaW5lZF9TSUdQSVBFCisvKiBSYWlzZSB0aGUgc2lnbmFsIFNJR1BJUEUuICAqLworaW50CitfZ2xfcmFpc2VfU0lHUElQRSAodm9pZCkKK3sKKyAgaWYgKGJsb2NrZWRfc2V0ICYgKDFVIDw8IFNJR1BJUEUpKQorICAgIHBlbmRpbmdfYXJyYXlbU0lHUElQRV0gPSAxOworICBlbHNlCisgICAgeworICAgICAgaGFuZGxlcl90IGhhbmRsZXIgPSBTSUdQSVBFX2hhbmRsZXI7CisgICAgICBpZiAoaGFuZGxlciA9PSBTSUdfREZMKQorICAgICAgICBleGl0ICgxMjggKyBTSUdQSVBFKTsKKyAgICAgIGVsc2UgaWYgKGhhbmRsZXIgIT0gU0lHX0lHTikKKyAgICAgICAgKCpoYW5kbGVyKSAoU0lHUElQRSk7CisgICAgfQorICByZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL3NpemVfbWF4LmggYi9saWIvc2l6ZV9tYXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjQyNDQxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3NpemVfbWF4LmgKQEAgLTAsMCArMSwzMCBAQAorLyogc2l6ZV9tYXguaCAtLSBkZWNsYXJlIFNJWkVfTUFYIHRocm91Z2ggc3lzdGVtIGhlYWRlcnMKKyAgIENvcHlyaWdodCAoQykgMjAwNS0yMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IFNpbW9uIEpvc2Vmc3Nvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdOVUxJQl9TSVpFX01BWF9ICisjZGVmaW5lIEdOVUxJQl9TSVpFX01BWF9ICisKKy8qIEdldCBTSVpFX01BWCBkZWNsYXJhdGlvbiBvbiBzeXN0ZW1zIGxpa2UgU29sYXJpcyA3LzgvOS4gICovCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorLyogR2V0IFNJWkVfTUFYIGRlY2xhcmF0aW9uIG9uIHN5c3RlbXMgbGlrZSBnbGliYyAyLiAgKi8KKyMgaWYgSEFWRV9TVERJTlRfSAorIyAgaW5jbHVkZSA8c3RkaW50Lmg+CisjIGVuZGlmCisvKiBPbiBzeXN0ZW1zIHdoZXJlIHRoZXNlIGluY2x1ZGUgZmlsZXMgZG9uJ3QgZGVmaW5lIGl0LCBTSVpFX01BWCBpcyBkZWZpbmVkCisgICBpbiBjb25maWcuaC4gICovCisKKyNlbmRpZiAvKiBHTlVMSUJfU0laRV9NQVhfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL3NucHJpbnRmLmMgYi9saWIvc25wcmludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTA4NDQyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3NucHJpbnRmLmMKQEAgLTAsMCArMSw3MSBAQAorLyogRm9ybWF0dGVkIG91dHB1dCB0byBzdHJpbmdzLgorICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IFNpbW9uIEpvc2Vmc3NvbiBhbmQgUGF1bCBFZ2dlcnQuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgInZhc25wcmludGYuaCIKKworLyogUHJpbnQgZm9ybWF0dGVkIG91dHB1dCB0byBzdHJpbmcgU1RSLiAgU2ltaWxhciB0byBzcHJpbnRmLCBidXQKKyAgIGFkZGl0aW9uYWwgbGVuZ3RoIFNJWkUgbGltaXQgaG93IG11Y2ggaXMgd3JpdHRlbiBpbnRvIFNUUi4gIFJldHVybnMKKyAgIHN0cmluZyBsZW5ndGggb2YgZm9ybWF0dGVkIHN0cmluZyAod2hpY2ggbWF5IGJlIGxhcmdlciB0aGFuIFNJWkUpLgorICAgU1RSIG1heSBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIG5vdGhpbmcgd2lsbCBiZSB3cml0dGVuLiAgT24gZXJyb3IsCisgICByZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZS4gICovCitpbnQKK3NucHJpbnRmIChjaGFyICpzdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgY2hhciAqb3V0cHV0OworICBzaXplX3QgbGVuOworICBzaXplX3QgbGVuYnVmID0gc2l6ZTsKKyAgdmFfbGlzdCBhcmdzOworCisgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworICBvdXRwdXQgPSB2YXNucHJpbnRmIChzdHIsICZsZW5idWYsIGZvcm1hdCwgYXJncyk7CisgIGxlbiA9IGxlbmJ1ZjsKKyAgdmFfZW5kIChhcmdzKTsKKworICBpZiAoIW91dHB1dCkKKyAgICByZXR1cm4gLTE7CisKKyAgaWYgKG91dHB1dCAhPSBzdHIpCisgICAgeworICAgICAgaWYgKHNpemUpCisgICAgICAgIHsKKyAgICAgICAgICBzaXplX3QgcHJ1bmVkX2xlbiA9IChsZW4gPCBzaXplID8gbGVuIDogc2l6ZSAtIDEpOworICAgICAgICAgIG1lbWNweSAoc3RyLCBvdXRwdXQsIHBydW5lZF9sZW4pOworICAgICAgICAgIHN0cltwcnVuZWRfbGVuXSA9ICdcMCc7CisgICAgICAgIH0KKworICAgICAgZnJlZSAob3V0cHV0KTsKKyAgICB9CisKKyAgaWYgKElOVF9NQVggPCBsZW4pCisgICAgeworICAgICAgZXJybm8gPSBFT1ZFUkZMT1c7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIHJldHVybiBsZW47Cit9CmRpZmYgLS1naXQgYS9saWIvc3Bhd24tcGlwZS5jIGIvbGliL3NwYXduLXBpcGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTYzMjU3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3NwYXduLXBpcGUuYwpAQCAtMCwwICsxLDQ1MiBAQAorLyogQ3JlYXRpb24gb2Ygc3VicHJvY2Vzc2VzLCBjb21tdW5pY2F0aW5nIHZpYSBwaXBlcy4KKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDA0LCAyMDA2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPiwgMjAwMS4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgInNwYXduLXBpcGUuaCIKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImVycm9yLmgiCisjaW5jbHVkZSAiZmF0YWwtc2lnbmFsLmgiCisjaW5jbHVkZSAidW5pc3RkLXNhZmVyLmgiCisjaW5jbHVkZSAid2FpdC1wcm9jZXNzLmgiCisjaW5jbHVkZSAiZ2V0dGV4dC5oIgorCisjZGVmaW5lIF8oc3RyKSBnZXR0ZXh0IChzdHIpCisKKyNpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCisKKy8qIE5hdGl2ZSBXaW5kb3dzIEFQSS4gICovCisjIGluY2x1ZGUgPHByb2Nlc3MuaD4KKyMgaW5jbHVkZSAidzMyc3Bhd24uaCIKKworI2Vsc2UKKworLyogVW5peCBBUEkuICAqLworIyBpbmNsdWRlIDxzcGF3bi5oPgorCisjZW5kaWYKKworLyogVGhlIHJlc3VsdHMgb2Ygb3BlbigpIGluIHRoaXMgZmlsZSBhcmUgbm90IHVzZWQgd2l0aCBmY2hkaXIsCisgICB0aGVyZWZvcmUgc2F2ZSBzb21lIHVubmVjZXNzYXJ5IHdvcmsgaW4gZmNoZGlyLmMuICAqLworI3VuZGVmIG9wZW4KKyN1bmRlZiBjbG9zZQorCisKKyNpZmRlZiBFSU5UUgorCisvKiBFSU5UUiBoYW5kbGluZyBmb3IgY2xvc2UoKS4KKyAgIFRoZXNlIGZ1bmN0aW9ucyBjYW4gcmV0dXJuIC0xL0VJTlRSIGV2ZW4gdGhvdWdoIHdlIGRvbid0IGhhdmUgYW55CisgICBzaWduYWwgaGFuZGxlcnMgc2V0IHVwLCBuYW1lbHkgd2hlbiB3ZSBnZXQgaW50ZXJydXB0ZWQgdmlhIFNJR1NUT1AuICAqLworCitzdGF0aWMgaW50Citub25pbnRyX2Nsb3NlIChpbnQgZmQpCit7CisgIGludCByZXR2YWw7CisKKyAgZG8KKyAgICByZXR2YWwgPSBjbG9zZSAoZmQpOworICB3aGlsZSAocmV0dmFsIDwgMCAmJiBlcnJubyA9PSBFSU5UUik7CisKKyAgcmV0dXJuIHJldHZhbDsKK30KKyNkZWZpbmUgY2xvc2Ugbm9uaW50cl9jbG9zZQorCisjaWYgKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXworc3RhdGljIGludAorbm9uaW50cl9vcGVuIChjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IG9mbGFnLCBtb2RlX3QgbW9kZSkKK3sKKyAgaW50IHJldHZhbDsKKworICBkbworICAgIHJldHZhbCA9IG9wZW4gKHBhdGhuYW1lLCBvZmxhZywgbW9kZSk7CisgIHdoaWxlIChyZXR2YWwgPCAwICYmIGVycm5vID09IEVJTlRSKTsKKworICByZXR1cm4gcmV0dmFsOworfQorIyB1bmRlZiBvcGVuIC8qIGF2b2lkIHdhcm5pbmcgb24gVk1TICovCisjIGRlZmluZSBvcGVuIG5vbmludHJfb3BlbgorI2VuZGlmCisKKyNlbmRpZgorCisKKy8qIE9wZW4gYSBwaXBlIGNvbm5lY3RlZCB0byBhIGNoaWxkIHByb2Nlc3MuCisgKgorICogICAgICAgICAgIHdyaXRlICAgICAgIHN5c3RlbSAgICAgICAgICAgICAgICByZWFkCisgKiAgICBwYXJlbnQgIC0+ICAgZmRbMV0gICAtPiAgIFNURElOX0ZJTEVOTyAgICAtPiAgIGNoaWxkICAgICAgIGlmIHBpcGVfc3RkaW4KKyAqICAgIHBhcmVudCAgPC0gICBmZFswXSAgIDwtICAgU1RET1VUX0ZJTEVOTyAgIDwtICAgY2hpbGQgICAgICAgaWYgcGlwZV9zdGRvdXQKKyAqICAgICAgICAgICByZWFkICAgICAgICBzeXN0ZW0gICAgICAgICAgICAgICAgd3JpdGUKKyAqCisgKiBBdCBsZWFzdCBvbmUgb2YgcGlwZV9zdGRpbiwgcGlwZV9zdGRvdXQgbXVzdCBiZSB0cnVlLgorICogcGlwZV9zdGRpbiBhbmQgcHJvZ19zdGRpbiB0b2dldGhlciBkZXRlcm1pbmUgdGhlIGNoaWxkJ3Mgc3RhbmRhcmQgaW5wdXQuCisgKiBwaXBlX3N0ZG91dCBhbmQgcHJvZ19zdGRvdXQgdG9nZXRoZXIgZGV0ZXJtaW5lIHRoZSBjaGlsZCdzIHN0YW5kYXJkIG91dHB1dC4KKyAqIElmIHBpcGVfc3RkaW4gaXMgdHJ1ZSwgcHJvZ19zdGRpbiBpcyBpZ25vcmVkLgorICogSWYgcGlwZV9zdGRvdXQgaXMgdHJ1ZSwgcHJvZ19zdGRvdXQgaXMgaWdub3JlZC4KKyAqLworc3RhdGljIHBpZF90CitjcmVhdGVfcGlwZSAoY29uc3QgY2hhciAqcHJvZ25hbWUsCisgICAgICAgICAgICAgY29uc3QgY2hhciAqcHJvZ19wYXRoLCBjaGFyICoqcHJvZ19hcmd2LAorICAgICAgICAgICAgIGJvb2wgcGlwZV9zdGRpbiwgYm9vbCBwaXBlX3N0ZG91dCwKKyAgICAgICAgICAgICBjb25zdCBjaGFyICpwcm9nX3N0ZGluLCBjb25zdCBjaGFyICpwcm9nX3N0ZG91dCwKKyAgICAgICAgICAgICBib29sIG51bGxfc3RkZXJyLAorICAgICAgICAgICAgIGJvb2wgc2xhdmVfcHJvY2VzcywgYm9vbCBleGl0X29uX2Vycm9yLAorICAgICAgICAgICAgIGludCBmZFsyXSkKK3sKKyNpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCisKKyAgLyogTmF0aXZlIFdpbmRvd3MgQVBJLgorICAgICBUaGlzIHVzZXMgX3BpcGUoKSwgZHVwMigpLCBhbmQgc3Bhd252KCkuICBJdCBjb3VsZCBhbHNvIGJlIGltcGxlbWVudGVkCisgICAgIHVzaW5nIHRoZSBsb3ctbGV2ZWwgZnVuY3Rpb25zIENyZWF0ZVBpcGUoKSwgRHVwbGljYXRlSGFuZGxlKCksCisgICAgIENyZWF0ZVByb2Nlc3MoKSBhbmQgX29wZW5fb3NmaGFuZGxlKCk7IHNlZSB0aGUgR05VIG1ha2UgYW5kIEdOVSBjbGlzcAorICAgICBhbmQgY3ZzIHNvdXJjZSBjb2RlLiAgKi8KKyAgaW50IGlmZFsyXTsKKyAgaW50IG9mZFsyXTsKKyAgaW50IG9yaWdfc3RkaW47CisgIGludCBvcmlnX3N0ZG91dDsKKyAgaW50IG9yaWdfc3RkZXJyOworICBpbnQgY2hpbGQ7CisgIGludCBudWxsb3V0ZmQ7CisgIGludCBzdGRpbmZkOworICBpbnQgc3Rkb3V0ZmQ7CisgIGludCBzYXZlZF9lcnJubzsKKworICAvKiBGSVhNRTogTmVlZCB0byBmcmVlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgcHJlcGFyZV9zcGF3bi4gICovCisgIHByb2dfYXJndiA9IHByZXBhcmVfc3Bhd24gKHByb2dfYXJndik7CisKKyAgaWYgKHBpcGVfc3Rkb3V0KQorICAgIGlmIChwaXBlMl9zYWZlciAoaWZkLCBPX0JJTkFSWSB8IE9fQ0xPRVhFQykgPCAwKQorICAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgZXJybm8sIF8oImNhbm5vdCBjcmVhdGUgcGlwZSIpKTsKKyAgaWYgKHBpcGVfc3RkaW4pCisgICAgaWYgKHBpcGUyX3NhZmVyIChvZmQsIE9fQklOQVJZIHwgT19DTE9FWEVDKSA8IDApCisgICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCBlcnJubywgXygiY2Fubm90IGNyZWF0ZSBwaXBlIikpOworLyogRGF0YSBmbG93IGRpYWdyYW06CisgKgorICogICAgICAgICAgIHdyaXRlICAgICAgICBzeXN0ZW0gICAgICAgICByZWFkCisgKiAgICBwYXJlbnQgIC0+ICAgb2ZkWzFdICAgLT4gICBvZmRbMF0gICAtPiAgIGNoaWxkICAgICAgIGlmIHBpcGVfc3RkaW4KKyAqICAgIHBhcmVudCAgPC0gICBpZmRbMF0gICA8LSAgIGlmZFsxXSAgIDwtICAgY2hpbGQgICAgICAgaWYgcGlwZV9zdGRvdXQKKyAqICAgICAgICAgICByZWFkICAgICAgICAgc3lzdGVtICAgICAgICAgd3JpdGUKKyAqCisgKi8KKworICAvKiBTYXZlIHN0YW5kYXJkIGZpbGUgaGFuZGxlcyBvZiBwYXJlbnQgcHJvY2Vzcy4gICovCisgIGlmIChwaXBlX3N0ZGluIHx8IHByb2dfc3RkaW4gIT0gTlVMTCkKKyAgICBvcmlnX3N0ZGluID0gZHVwX3NhZmVyX25vaW5oZXJpdCAoU1RESU5fRklMRU5PKTsKKyAgaWYgKHBpcGVfc3Rkb3V0IHx8IHByb2dfc3Rkb3V0ICE9IE5VTEwpCisgICAgb3JpZ19zdGRvdXQgPSBkdXBfc2FmZXJfbm9pbmhlcml0IChTVERPVVRfRklMRU5PKTsKKyAgaWYgKG51bGxfc3RkZXJyKQorICAgIG9yaWdfc3RkZXJyID0gZHVwX3NhZmVyX25vaW5oZXJpdCAoU1RERVJSX0ZJTEVOTyk7CisgIGNoaWxkID0gLTE7CisKKyAgLyogQ3JlYXRlIHN0YW5kYXJkIGZpbGUgaGFuZGxlcyBvZiBjaGlsZCBwcm9jZXNzLiAgKi8KKyAgbnVsbG91dGZkID0gLTE7CisgIHN0ZGluZmQgPSAtMTsKKyAgc3Rkb3V0ZmQgPSAtMTsKKyAgaWYgKCghcGlwZV9zdGRpbiB8fCBkdXAyIChvZmRbMF0sIFNURElOX0ZJTEVOTykgPj0gMCkKKyAgICAgICYmICghcGlwZV9zdGRvdXQgfHwgZHVwMiAoaWZkWzFdLCBTVERPVVRfRklMRU5PKSA+PSAwKQorICAgICAgJiYgKCFudWxsX3N0ZGVycgorICAgICAgICAgIHx8ICgobnVsbG91dGZkID0gb3BlbiAoIk5VTCIsIE9fUkRXUiwgMCkpID49IDAKKyAgICAgICAgICAgICAgJiYgKG51bGxvdXRmZCA9PSBTVERFUlJfRklMRU5PCisgICAgICAgICAgICAgICAgICB8fCAoZHVwMiAobnVsbG91dGZkLCBTVERFUlJfRklMRU5PKSA+PSAwCisgICAgICAgICAgICAgICAgICAgICAgJiYgY2xvc2UgKG51bGxvdXRmZCkgPj0gMCkpKSkKKyAgICAgICYmIChwaXBlX3N0ZGluCisgICAgICAgICAgfHwgcHJvZ19zdGRpbiA9PSBOVUxMCisgICAgICAgICAgfHwgKChzdGRpbmZkID0gb3BlbiAocHJvZ19zdGRpbiwgT19SRE9OTFksIDApKSA+PSAwCisgICAgICAgICAgICAgICYmIChzdGRpbmZkID09IFNURElOX0ZJTEVOTworICAgICAgICAgICAgICAgICAgfHwgKGR1cDIgKHN0ZGluZmQsIFNURElOX0ZJTEVOTykgPj0gMAorICAgICAgICAgICAgICAgICAgICAgICYmIGNsb3NlIChzdGRpbmZkKSA+PSAwKSkpKQorICAgICAgJiYgKHBpcGVfc3Rkb3V0CisgICAgICAgICAgfHwgcHJvZ19zdGRvdXQgPT0gTlVMTAorICAgICAgICAgIHx8ICgoc3Rkb3V0ZmQgPSBvcGVuIChwcm9nX3N0ZG91dCwgT19XUk9OTFksIDApKSA+PSAwCisgICAgICAgICAgICAgICYmIChzdGRvdXRmZCA9PSBTVERPVVRfRklMRU5PCisgICAgICAgICAgICAgICAgICB8fCAoZHVwMiAoc3Rkb3V0ZmQsIFNURE9VVF9GSUxFTk8pID49IDAKKyAgICAgICAgICAgICAgICAgICAgICAmJiBjbG9zZSAoc3Rkb3V0ZmQpID49IDApKSkpKQorICAgIC8qIFRoZSBjaGlsZCBwcm9jZXNzIGRvZXNuJ3QgaW5oZXJpdCBpZmRbMF0sIGlmZFsxXSwgb2ZkWzBdLCBvZmRbMV0sCisgICAgICAgYnV0IGl0IGluaGVyaXRzIGFsbCBvcGVuKCllZCBvciBkdXAyKCllZCBmaWxlIGhhbmRsZXMgKHdoaWNoIGlzIHdoYXQKKyAgICAgICB3ZSB3YW50IGluIHRoZSBjYXNlIG9mIFNURCpfRklMRU5PKS4gICovCisgICAgLyogVXNlIHNwYXdudnBlIGFuZCBwYXNzIHRoZSBlbnZpcm9ubWVudCBleHBsaWNpdGx5LiAgVGhpcyBpcyBuZWVkZWQgaWYKKyAgICAgICB0aGUgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhlIGVudmlyb25tZW50IHVzaW5nIHB1dGVudigpIG9yIFt1bl1zZXRlbnYoKS4KKyAgICAgICBPbiBXaW5kb3dzLCBwcm9ncmFtcyBoYXZlIHR3byBlbnZpcm9ubWVudHMsIG9uZSBpbiB0aGUgImVudmlyb25tZW50CisgICAgICAgYmxvY2siIG9mIHRoZSBwcm9jZXNzIGFuZCBtYW5hZ2VkIHRocm91Z2ggU2V0RW52aXJvbm1lbnRWYXJpYWJsZSgpLCBhbmQKKyAgICAgICBvbmUgaW5zaWRlIHRoZSBwcm9jZXNzLCBpbiB0aGUgbG9jYXRpb24gcmV0cmlldmVkIGJ5IHRoZSAnZW52aXJvbicKKyAgICAgICBtYWNyby4gIFdoZW4gdXNpbmcgc3Bhd252cCgpIHdpdGhvdXQgJ2UnLCB0aGUgY2hpbGQgcHJvY2VzcyBpbmhlcml0cyBhCisgICAgICAgY29weSBvZiB0aGUgZW52aXJvbm1lbnQgYmxvY2sgLSBpZ25vcmluZyB0aGUgZWZmZWN0cyBvZiBwdXRlbnYoKSBhbmQKKyAgICAgICBbdW5dc2V0ZW52KCkuICAqLworICAgIHsKKyAgICAgIGNoaWxkID0gc3Bhd252cGUgKFBfTk9XQUlULCBwcm9nX3BhdGgsIChjb25zdCBjaGFyICoqKSBwcm9nX2FyZ3YsCisgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKikgZW52aXJvbik7CisgICAgICBpZiAoY2hpbGQgPCAwICYmIGVycm5vID09IEVOT0VYRUMpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBwcm9nIGlzIG5vdCBhIG5hdGl2ZSBleGVjdXRhYmxlLiAgVHJ5IHRvIGV4ZWN1dGUgaXQgYXMgYQorICAgICAgICAgICAgIHNoZWxsIHNjcmlwdC4gIE5vdGUgdGhhdCBwcmVwYXJlX3NwYXduKCkgaGFzIGFscmVhZHkgcHJlcGVuZGVkCisgICAgICAgICAgICAgYSBoaWRkZW4gZWxlbWVudCAic2guZXhlIiB0byBwcm9nX2FyZ3YuICAqLworICAgICAgICAgIC0tcHJvZ19hcmd2OworICAgICAgICAgIGNoaWxkID0gc3Bhd252cGUgKFBfTk9XQUlULCBwcm9nX2FyZ3ZbMF0sIChjb25zdCBjaGFyICoqKSBwcm9nX2FyZ3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKiopIGVudmlyb24pOworICAgICAgICB9CisgICAgfQorICBpZiAoY2hpbGQgPT0gLTEpCisgICAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgaWYgKHN0ZGluZmQgPj0gMCkKKyAgICBjbG9zZSAoc3RkaW5mZCk7CisgIGlmIChzdGRvdXRmZCA+PSAwKQorICAgIGNsb3NlIChzdGRvdXRmZCk7CisgIGlmIChudWxsb3V0ZmQgPj0gMCkKKyAgICBjbG9zZSAobnVsbG91dGZkKTsKKworICAvKiBSZXN0b3JlIHN0YW5kYXJkIGZpbGUgaGFuZGxlcyBvZiBwYXJlbnQgcHJvY2Vzcy4gICovCisgIGlmIChudWxsX3N0ZGVycikKKyAgICB1bmR1cF9zYWZlcl9ub2luaGVyaXQgKG9yaWdfc3RkZXJyLCBTVERFUlJfRklMRU5PKTsKKyAgaWYgKHBpcGVfc3Rkb3V0IHx8IHByb2dfc3Rkb3V0ICE9IE5VTEwpCisgICAgdW5kdXBfc2FmZXJfbm9pbmhlcml0IChvcmlnX3N0ZG91dCwgU1RET1VUX0ZJTEVOTyk7CisgIGlmIChwaXBlX3N0ZGluIHx8IHByb2dfc3RkaW4gIT0gTlVMTCkKKyAgICB1bmR1cF9zYWZlcl9ub2luaGVyaXQgKG9yaWdfc3RkaW4sIFNURElOX0ZJTEVOTyk7CisKKyAgaWYgKHBpcGVfc3RkaW4pCisgICAgY2xvc2UgKG9mZFswXSk7CisgIGlmIChwaXBlX3N0ZG91dCkKKyAgICBjbG9zZSAoaWZkWzFdKTsKKyAgaWYgKGNoaWxkID09IC0xKQorICAgIHsKKyAgICAgIGlmIChleGl0X29uX2Vycm9yIHx8ICFudWxsX3N0ZGVycikKKyAgICAgICAgZXJyb3IgKGV4aXRfb25fZXJyb3IgPyBFWElUX0ZBSUxVUkUgOiAwLCBzYXZlZF9lcnJubywKKyAgICAgICAgICAgICAgIF8oIiVzIHN1YnByb2Nlc3MgZmFpbGVkIiksIHByb2duYW1lKTsKKyAgICAgIGlmIChwaXBlX3N0ZG91dCkKKyAgICAgICAgY2xvc2UgKGlmZFswXSk7CisgICAgICBpZiAocGlwZV9zdGRpbikKKyAgICAgICAgY2xvc2UgKG9mZFsxXSk7CisgICAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICBpZiAocGlwZV9zdGRvdXQpCisgICAgZmRbMF0gPSBpZmRbMF07CisgIGlmIChwaXBlX3N0ZGluKQorICAgIGZkWzFdID0gb2ZkWzFdOworICByZXR1cm4gY2hpbGQ7CisKKyNlbHNlCisKKyAgLyogVW5peCBBUEkuICAqLworICBpbnQgaWZkWzJdOworICBpbnQgb2ZkWzJdOworICBzaWdzZXRfdCBibG9ja2VkX3NpZ25hbHM7CisgIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190IGFjdGlvbnM7CisgIGJvb2wgYWN0aW9uc19hbGxvY2F0ZWQ7CisgIHBvc2l4X3NwYXduYXR0cl90IGF0dHJzOworICBib29sIGF0dHJzX2FsbG9jYXRlZDsKKyAgaW50IGVycjsKKyAgcGlkX3QgY2hpbGQ7CisKKyAgaWYgKHBpcGVfc3Rkb3V0KQorICAgIGlmIChwaXBlX3NhZmVyIChpZmQpIDwgMCkKKyAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIGVycm5vLCBfKCJjYW5ub3QgY3JlYXRlIHBpcGUiKSk7CisgIGlmIChwaXBlX3N0ZGluKQorICAgIGlmIChwaXBlX3NhZmVyIChvZmQpIDwgMCkKKyAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIGVycm5vLCBfKCJjYW5ub3QgY3JlYXRlIHBpcGUiKSk7CisvKiBEYXRhIGZsb3cgZGlhZ3JhbToKKyAqCisgKiAgICAgICAgICAgd3JpdGUgICAgICAgIHN5c3RlbSAgICAgICAgIHJlYWQKKyAqICAgIHBhcmVudCAgLT4gICBvZmRbMV0gICAtPiAgIG9mZFswXSAgIC0+ICAgY2hpbGQgICAgICAgaWYgcGlwZV9zdGRpbgorICogICAgcGFyZW50ICA8LSAgIGlmZFswXSAgIDwtICAgaWZkWzFdICAgPC0gICBjaGlsZCAgICAgICBpZiBwaXBlX3N0ZG91dAorICogICAgICAgICAgIHJlYWQgICAgICAgICBzeXN0ZW0gICAgICAgICB3cml0ZQorICoKKyAqLworCisgIGlmIChzbGF2ZV9wcm9jZXNzKQorICAgIHsKKyAgICAgIHNpZ3Byb2NtYXNrIChTSUdfU0VUTUFTSywgTlVMTCwgJmJsb2NrZWRfc2lnbmFscyk7CisgICAgICBibG9ja19mYXRhbF9zaWduYWxzICgpOworICAgIH0KKyAgYWN0aW9uc19hbGxvY2F0ZWQgPSBmYWxzZTsKKyAgYXR0cnNfYWxsb2NhdGVkID0gZmFsc2U7CisgIGlmICgoZXJyID0gcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2luaXQgKCZhY3Rpb25zKSkgIT0gMAorICAgICAgfHwgKGFjdGlvbnNfYWxsb2NhdGVkID0gdHJ1ZSwKKyAgICAgICAgICAocGlwZV9zdGRpbgorICAgICAgICAgICAmJiAoZXJyID0gcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDIgKCZhY3Rpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZFswXSwgU1RESU5fRklMRU5PKSkKKyAgICAgICAgICAgICAgIT0gMCkKKyAgICAgICAgICB8fCAocGlwZV9zdGRvdXQKKyAgICAgICAgICAgICAgJiYgKGVyciA9IHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyICgmYWN0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmRbMV0sIFNURE9VVF9GSUxFTk8pKQorICAgICAgICAgICAgICAgICAhPSAwKQorICAgICAgICAgIHx8IChwaXBlX3N0ZGluCisgICAgICAgICAgICAgICYmIChlcnIgPSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2UgKCZhY3Rpb25zLCBvZmRbMF0pKQorICAgICAgICAgICAgICAgICAhPSAwKQorICAgICAgICAgIHx8IChwaXBlX3N0ZG91dAorICAgICAgICAgICAgICAmJiAoZXJyID0gcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlICgmYWN0aW9ucywgaWZkWzFdKSkKKyAgICAgICAgICAgICAgICAgIT0gMCkKKyAgICAgICAgICB8fCAocGlwZV9zdGRpbgorICAgICAgICAgICAgICAmJiAoZXJyID0gcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlICgmYWN0aW9ucywgb2ZkWzFdKSkKKyAgICAgICAgICAgICAgICAgIT0gMCkKKyAgICAgICAgICB8fCAocGlwZV9zdGRvdXQKKyAgICAgICAgICAgICAgJiYgKGVyciA9IHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZSAoJmFjdGlvbnMsIGlmZFswXSkpCisgICAgICAgICAgICAgICAgICE9IDApCisgICAgICAgICAgfHwgKG51bGxfc3RkZXJyCisgICAgICAgICAgICAgICYmIChlcnIgPSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3BlbiAoJmFjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RERVJSX0ZJTEVOTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL2Rldi9udWxsIiwgT19SRFdSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKQorICAgICAgICAgICAgICAgICAhPSAwKQorICAgICAgICAgIHx8ICghcGlwZV9zdGRpbgorICAgICAgICAgICAgICAmJiBwcm9nX3N0ZGluICE9IE5VTEwKKyAgICAgICAgICAgICAgJiYgKGVyciA9IHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuICgmYWN0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVERJTl9GSUxFTk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ19zdGRpbiwgT19SRE9OTFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpCisgICAgICAgICAgICAgICAgICE9IDApCisgICAgICAgICAgfHwgKCFwaXBlX3N0ZG91dAorICAgICAgICAgICAgICAmJiBwcm9nX3N0ZG91dCAhPSBOVUxMCisgICAgICAgICAgICAgICYmIChlcnIgPSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3BlbiAoJmFjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RET1VUX0ZJTEVOTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9nX3N0ZG91dCwgT19XUk9OTFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpCisgICAgICAgICAgICAgICAgICE9IDApCisgICAgICAgICAgfHwgKHNsYXZlX3Byb2Nlc3MKKyAgICAgICAgICAgICAgJiYgKChlcnIgPSBwb3NpeF9zcGF3bmF0dHJfaW5pdCAoJmF0dHJzKSkgIT0gMAorICAgICAgICAgICAgICAgICAgfHwgKGF0dHJzX2FsbG9jYXRlZCA9IHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgKGVyciA9IHBvc2l4X3NwYXduYXR0cl9zZXRzaWdtYXNrICgmYXR0cnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYmxvY2tlZF9zaWduYWxzKSkKKyAgICAgICAgICAgICAgICAgICAgICAhPSAwCisgICAgICAgICAgICAgICAgICAgICAgfHwgKGVyciA9IHBvc2l4X3NwYXduYXR0cl9zZXRmbGFncyAoJmF0dHJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQT1NJWF9TUEFXTl9TRVRTSUdNQVNLKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAhPSAwKSkpCisgICAgICAgICAgfHwgKGVyciA9IHBvc2l4X3NwYXducCAoJmNoaWxkLCBwcm9nX3BhdGgsICZhY3Rpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzX2FsbG9jYXRlZCA/ICZhdHRycyA6IE5VTEwsIHByb2dfYXJndiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9uKSkKKyAgICAgICAgICAgICAhPSAwKSkKKyAgICB7CisgICAgICBpZiAoYWN0aW9uc19hbGxvY2F0ZWQpCisgICAgICAgIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19kZXN0cm95ICgmYWN0aW9ucyk7CisgICAgICBpZiAoYXR0cnNfYWxsb2NhdGVkKQorICAgICAgICBwb3NpeF9zcGF3bmF0dHJfZGVzdHJveSAoJmF0dHJzKTsKKyAgICAgIGlmIChzbGF2ZV9wcm9jZXNzKQorICAgICAgICB1bmJsb2NrX2ZhdGFsX3NpZ25hbHMgKCk7CisgICAgICBpZiAoZXhpdF9vbl9lcnJvciB8fCAhbnVsbF9zdGRlcnIpCisgICAgICAgIGVycm9yIChleGl0X29uX2Vycm9yID8gRVhJVF9GQUlMVVJFIDogMCwgZXJyLAorICAgICAgICAgICAgICAgXygiJXMgc3VicHJvY2VzcyBmYWlsZWQiKSwgcHJvZ25hbWUpOworICAgICAgaWYgKHBpcGVfc3Rkb3V0KQorICAgICAgICB7CisgICAgICAgICAgY2xvc2UgKGlmZFswXSk7CisgICAgICAgICAgY2xvc2UgKGlmZFsxXSk7CisgICAgICAgIH0KKyAgICAgIGlmIChwaXBlX3N0ZGluKQorICAgICAgICB7CisgICAgICAgICAgY2xvc2UgKG9mZFswXSk7CisgICAgICAgICAgY2xvc2UgKG9mZFsxXSk7CisgICAgICAgIH0KKyAgICAgIGVycm5vID0gZXJyOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3kgKCZhY3Rpb25zKTsKKyAgaWYgKGF0dHJzX2FsbG9jYXRlZCkKKyAgICBwb3NpeF9zcGF3bmF0dHJfZGVzdHJveSAoJmF0dHJzKTsKKyAgaWYgKHNsYXZlX3Byb2Nlc3MpCisgICAgeworICAgICAgcmVnaXN0ZXJfc2xhdmVfc3VicHJvY2VzcyAoY2hpbGQpOworICAgICAgdW5ibG9ja19mYXRhbF9zaWduYWxzICgpOworICAgIH0KKyAgaWYgKHBpcGVfc3RkaW4pCisgICAgY2xvc2UgKG9mZFswXSk7CisgIGlmIChwaXBlX3N0ZG91dCkKKyAgICBjbG9zZSAoaWZkWzFdKTsKKworICBpZiAocGlwZV9zdGRvdXQpCisgICAgZmRbMF0gPSBpZmRbMF07CisgIGlmIChwaXBlX3N0ZGluKQorICAgIGZkWzFdID0gb2ZkWzFdOworICByZXR1cm4gY2hpbGQ7CisKKyNlbmRpZgorfQorCisvKiBPcGVuIGEgYmlkaXJlY3Rpb25hbCBwaXBlLgorICoKKyAqICAgICAgICAgICB3cml0ZSAgICAgICBzeXN0ZW0gICAgICAgICAgICAgICAgcmVhZAorICogICAgcGFyZW50ICAtPiAgIGZkWzFdICAgLT4gICBTVERJTl9GSUxFTk8gICAgLT4gICBjaGlsZAorICogICAgcGFyZW50ICA8LSAgIGZkWzBdICAgPC0gICBTVERPVVRfRklMRU5PICAgPC0gICBjaGlsZAorICogICAgICAgICAgIHJlYWQgICAgICAgIHN5c3RlbSAgICAgICAgICAgICAgICB3cml0ZQorICoKKyAqLworcGlkX3QKK2NyZWF0ZV9waXBlX2JpZGkgKGNvbnN0IGNoYXIgKnByb2duYW1lLAorICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHJvZ19wYXRoLCBjaGFyICoqcHJvZ19hcmd2LAorICAgICAgICAgICAgICAgICAgYm9vbCBudWxsX3N0ZGVyciwKKyAgICAgICAgICAgICAgICAgIGJvb2wgc2xhdmVfcHJvY2VzcywgYm9vbCBleGl0X29uX2Vycm9yLAorICAgICAgICAgICAgICAgICAgaW50IGZkWzJdKQoreworICBwaWRfdCByZXN1bHQgPSBjcmVhdGVfcGlwZSAocHJvZ25hbWUsIHByb2dfcGF0aCwgcHJvZ19hcmd2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgdHJ1ZSwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxfc3RkZXJyLCBzbGF2ZV9wcm9jZXNzLCBleGl0X29uX2Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQpOworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBPcGVuIGEgcGlwZSBmb3IgaW5wdXQgZnJvbSBhIGNoaWxkIHByb2Nlc3MuCisgKiBUaGUgY2hpbGQncyBzdGRpbiBjb21lcyBmcm9tIGEgZmlsZS4KKyAqCisgKiAgICAgICAgICAgcmVhZCAgICAgICAgc3lzdGVtICAgICAgICAgICAgICAgIHdyaXRlCisgKiAgICBwYXJlbnQgIDwtICAgZmRbMF0gICA8LSAgIFNURE9VVF9GSUxFTk8gICA8LSAgIGNoaWxkCisgKgorICovCitwaWRfdAorY3JlYXRlX3BpcGVfaW4gKGNvbnN0IGNoYXIgKnByb2duYW1lLAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnByb2dfcGF0aCwgY2hhciAqKnByb2dfYXJndiwKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwcm9nX3N0ZGluLCBib29sIG51bGxfc3RkZXJyLAorICAgICAgICAgICAgICAgIGJvb2wgc2xhdmVfcHJvY2VzcywgYm9vbCBleGl0X29uX2Vycm9yLAorICAgICAgICAgICAgICAgIGludCBmZFsxXSkKK3sKKyAgaW50IGlvZmRbMl07CisgIHBpZF90IHJlc3VsdCA9IGNyZWF0ZV9waXBlIChwcm9nbmFtZSwgcHJvZ19wYXRoLCBwcm9nX2FyZ3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgdHJ1ZSwgcHJvZ19zdGRpbiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxfc3RkZXJyLCBzbGF2ZV9wcm9jZXNzLCBleGl0X29uX2Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9mZCk7CisgIGlmIChyZXN1bHQgIT0gLTEpCisgICAgZmRbMF0gPSBpb2ZkWzBdOworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBPcGVuIGEgcGlwZSBmb3Igb3V0cHV0IHRvIGEgY2hpbGQgcHJvY2Vzcy4KKyAqIFRoZSBjaGlsZCdzIHN0ZG91dCBnb2VzIHRvIGEgZmlsZS4KKyAqCisgKiAgICAgICAgICAgd3JpdGUgICAgICAgc3lzdGVtICAgICAgICAgICAgICAgIHJlYWQKKyAqICAgIHBhcmVudCAgLT4gICBmZFswXSAgIC0+ICAgU1RESU5fRklMRU5PICAgIC0+ICAgY2hpbGQKKyAqCisgKi8KK3BpZF90CitjcmVhdGVfcGlwZV9vdXQgKGNvbnN0IGNoYXIgKnByb2duYW1lLAorICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwcm9nX3BhdGgsIGNoYXIgKipwcm9nX2FyZ3YsCisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnByb2dfc3Rkb3V0LCBib29sIG51bGxfc3RkZXJyLAorICAgICAgICAgICAgICAgICBib29sIHNsYXZlX3Byb2Nlc3MsIGJvb2wgZXhpdF9vbl9lcnJvciwKKyAgICAgICAgICAgICAgICAgaW50IGZkWzFdKQoreworICBpbnQgaW9mZFsyXTsKKyAgcGlkX3QgcmVzdWx0ID0gY3JlYXRlX3BpcGUgKHByb2duYW1lLCBwcm9nX3BhdGgsIHByb2dfYXJndiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIGZhbHNlLCBOVUxMLCBwcm9nX3N0ZG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxfc3RkZXJyLCBzbGF2ZV9wcm9jZXNzLCBleGl0X29uX2Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9mZCk7CisgIGlmIChyZXN1bHQgIT0gLTEpCisgICAgZmRbMF0gPSBpb2ZkWzFdOworICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvbGliL3NwYXduLXBpcGUuaCBiL2xpYi9zcGF3bi1waXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE4YWU4ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9zcGF3bi1waXBlLmgKQEAgLTAsMCArMSwxNDcgQEAKKy8qIENyZWF0aW9uIG9mIHN1YnByb2Nlc3NlcywgY29tbXVuaWNhdGluZyB2aWEgcGlwZXMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMywgMjAwNiwgMjAwOC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGhhaWJsZUBjbGlzcC5jb25zLm9yZz4sIDIwMDEuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX1NQQVdOX1BJUEVfSAorI2RlZmluZSBfU1BBV05fUElQRV9ICisKKy8qIEdldCBwaWRfdC4gICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKKy8qIEFsbCB0aGVzZSBmdW5jdGlvbnMgY3JlYXRlIGEgc3VicHJvY2VzcyBhbmQgZG9uJ3Qgd2FpdCBmb3IgaXRzIHRlcm1pbmF0aW9uLgorICAgVGhleSByZXR1cm4gdGhlIHByb2Nlc3MgaWQgb2YgdGhlIHN1YnByb2Nlc3MuICBUaGV5IGFsc28gcmV0dXJuIGluIGZkW10KKyAgIG9uZSBvciB0d28gZmlsZSBkZXNjcmlwdG9ycyBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBzdWJwcm9jZXNzLgorICAgSWYgdGhlIHN1YnByb2Nlc3MgY3JlYXRpb24gZmFpbHM6IGlmIGV4aXRfb25fZXJyb3IgaXMgdHJ1ZSwgdGhlIG1haW4KKyAgIHByb2Nlc3MgZXhpdHMgd2l0aCBhbiBlcnJvciBtZXNzYWdlOyBvdGhlcndpc2UsIGFuIGVycm9yIG1lc3NhZ2UgaXMgZ2l2ZW4KKyAgIGlmIG51bGxfc3RkZXJyIGlzIGZhbHNlLCB0aGVuIC0xIGlzIHJldHVybmVkLCB3aXRoIGVycm5vIHNldCwgYW5kIGZkW10KKyAgIHJlbWFpbiB1bmluaXRpYWxpemVkLgorCisgICBBZnRlciBmaW5pc2hpbmcgY29tbXVuaWNhdGlvbiwgdGhlIGNhbGxlciBzaG91bGQgY2FsbCB3YWl0X3N1YnByb2Nlc3MoKQorICAgdG8gZ2V0IHJpZCBvZiB0aGUgc3VicHJvY2VzcyBpbiB0aGUgcHJvY2VzcyB0YWJsZS4KKworICAgSWYgc2xhdmVfcHJvY2VzcyBpcyB0cnVlLCB0aGUgY2hpbGQgcHJvY2VzcyB3aWxsIGJlIHRlcm1pbmF0ZWQgd2hlbiBpdHMKKyAgIGNyZWF0b3IgcmVjZWl2ZXMgYSBjYXRjaGFibGUgZmF0YWwgc2lnbmFsIG9yIGV4aXRzIG5vcm1hbGx5LiAgSWYKKyAgIHNsYXZlX3Byb2Nlc3MgaXMgZmFsc2UsIHRoZSBjaGlsZCBwcm9jZXNzIHdpbGwgY29udGludWUgcnVubmluZyBpbiB0aGlzCisgICBjYXNlLCB1bnRpbCBpdCBpcyBsdWNreSBlbm91Z2ggdG8gYXR0ZW1wdCB0byBjb21tdW5pY2F0ZSB3aXRoIGl0cyBjcmVhdG9yCisgICBhbmQgdGh1cyBnZXQgYSBTSUdQSVBFIHNpZ25hbC4KKworICAgSWYgZXhpdF9vbl9lcnJvciBpcyBmYWxzZSwgYSBjaGlsZCBwcm9jZXNzIGlkIG9mIC0xIHNob3VsZCBiZSB0cmVhdGVkIHRoZQorICAgc2FtZSB3YXkgYXMgYSBzdWJwcm9jZXNzIHdoaWNoIGFjY2VwdHMgbm8gaW5wdXQsIHByb2R1Y2VzIG5vIG91dHB1dCBhbmQKKyAgIHRlcm1pbmF0ZXMgd2l0aCBleGl0IGNvZGUgMTI3LiAgV2h5PyAgU29tZSBlcnJvcnMgZHVyaW5nIHBvc2l4X3NwYXducCgpCisgICBjYXVzZSB0aGUgZnVuY3Rpb24gcG9zaXhfc3Bhd25wKCkgdG8gcmV0dXJuIGFuIGVycm9yIGNvZGU7IHNvbWUgb3RoZXIKKyAgIGVycm9ycyBjYXVzZSB0aGUgc3VicHJvY2VzcyB0byBleGl0IHdpdGggcmV0dXJuIGNvZGUgMTI3LiAgSXQgaXMKKyAgIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudCB3aGljaCBlcnJvciBpcyByZXBvcnRlZCB3aGljaCB3YXkuICBUaGUgY2FsbGVyCisgICBtdXN0IHRyZWF0IGJvdGggY2FzZXMgYXMgZXF1aXZhbGVudC4KKworICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBubyBzaWduYWwgaXMgYmxvY2tlZCBvciBpZ25vcmVkIChpLmUuIGhhdmUgYQorICAgc2lnbmFsIGhhbmRsZXIgd2l0aCB2YWx1ZSBTSUdfSUdOKSB3aGlsZSBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGNhbGxlZC4KKyAgIFRoZSByZWFzb24gaXMgdGhhdCBjaGlsZCBwcm9jZXNzZXMgaW5oZXJpdCB0aGUgbWFzayBvZiBibG9ja2VkIHNpZ25hbHMKKyAgIGZyb20gdGhlaXIgcGFyZW50IChib3RoIHRocm91Z2ggcG9zaXhfc3Bhd24oKSBhbmQgZm9yaygpL2V4ZWMoKSk7CisgICBsaWtld2lzZSwgc2lnbmFscyBpZ25vcmVkIGluIHRoZSBwYXJlbnQgYXJlIGFsc28gaWdub3JlZCBpbiB0aGUgY2hpbGQKKyAgIChleGNlcHQgcG9zc2libHkgZm9yIFNJR0NITEQpLiAgQW5kIFBPU0lYOjIwMDEgc2F5cyBbaW4gdGhlIGRlc2NyaXB0aW9uCisgICBvZiBleGVjKCldOgorICAgICAgICJpdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBtYW55IGV4aXN0aW5nIGFwcGxpY2F0aW9ucyB3cm9uZ2x5CisgICAgICAgIGFzc3VtZSB0aGF0IHRoZXkgc3RhcnQgd2l0aCBjZXJ0YWluIHNpZ25hbHMgc2V0IHRvIHRoZSBkZWZhdWx0CisgICAgICAgIGFjdGlvbiBhbmQvb3IgdW5ibG9ja2VkLiBJbiBwYXJ0aWN1bGFyLCBhcHBsaWNhdGlvbnMgd3JpdHRlbgorICAgICAgICB3aXRoIGEgc2ltcGxlciBzaWduYWwgbW9kZWwgdGhhdCBkb2VzIG5vdCBpbmNsdWRlIGJsb2NraW5nIG9mCisgICAgICAgIHNpZ25hbHMsIHN1Y2ggYXMgdGhlIG9uZSBpbiB0aGUgSVNPIEMgc3RhbmRhcmQsIG1heSBub3QgYmVoYXZlCisgICAgICAgIHByb3Blcmx5IGlmIGludm9rZWQgd2l0aCBzb21lIHNpZ25hbHMgYmxvY2tlZC4gVGhlcmVmb3JlLCBpdCBpcworICAgICAgICBiZXN0IG5vdCB0byBibG9jayBvciBpZ25vcmUgc2lnbmFscyBhY3Jvc3MgZXhlY3Mgd2l0aG91dCBleHBsaWNpdAorICAgICAgICByZWFzb24gdG8gZG8gc28sIGFuZCBlc3BlY2lhbGx5IG5vdCB0byBibG9jayBzaWduYWxzIGFjcm9zcyBleGVjcworICAgICAgICBvZiBhcmJpdHJhcnkgKG5vdCBjbG9zZWx5IGNvLW9wZXJhdGluZykgcHJvZ3JhbXMuIiAgKi8KKworLyogT3BlbiBhIHBpcGUgZm9yIG91dHB1dCB0byBhIGNoaWxkIHByb2Nlc3MuCisgKiBUaGUgY2hpbGQncyBzdGRvdXQgZ29lcyB0byBhIGZpbGUuCisgKgorICogICAgICAgICAgIHdyaXRlICAgICAgIHN5c3RlbSAgICAgICAgICAgICAgICByZWFkCisgKiAgICBwYXJlbnQgIC0+ICAgZmRbMF0gICAtPiAgIFNURElOX0ZJTEVOTyAgICAtPiAgIGNoaWxkCisgKgorICogTm90ZTogV2hlbiB3cml0aW5nIHRvIGEgY2hpbGQgcHJvY2VzcywgaXQgaXMgdXNlZnVsIHRvIGlnbm9yZSB0aGUgU0lHUElQRQorICogc2lnbmFsIGFuZCB0aGUgRVBJUEUgZXJyb3IgY29kZS4KKyAqLworZXh0ZXJuIHBpZF90IGNyZWF0ZV9waXBlX291dCAoY29uc3QgY2hhciAqcHJvZ25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwcm9nX3BhdGgsIGNoYXIgKipwcm9nX2FyZ3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwcm9nX3N0ZG91dCwgYm9vbCBudWxsX3N0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2xhdmVfcHJvY2VzcywgYm9vbCBleGl0X29uX2Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZkWzFdKTsKKworLyogT3BlbiBhIHBpcGUgZm9yIGlucHV0IGZyb20gYSBjaGlsZCBwcm9jZXNzLgorICogVGhlIGNoaWxkJ3Mgc3RkaW4gY29tZXMgZnJvbSBhIGZpbGUuCisgKgorICogICAgICAgICAgIHJlYWQgICAgICAgIHN5c3RlbSAgICAgICAgICAgICAgICB3cml0ZQorICogICAgcGFyZW50ICA8LSAgIGZkWzBdICAgPC0gICBTVERPVVRfRklMRU5PICAgPC0gICBjaGlsZAorICoKKyAqLworZXh0ZXJuIHBpZF90IGNyZWF0ZV9waXBlX2luIChjb25zdCBjaGFyICpwcm9nbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHJvZ19wYXRoLCBjaGFyICoqcHJvZ19hcmd2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwcm9nX3N0ZGluLCBib29sIG51bGxfc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNsYXZlX3Byb2Nlc3MsIGJvb2wgZXhpdF9vbl9lcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZkWzFdKTsKKworLyogT3BlbiBhIGJpZGlyZWN0aW9uYWwgcGlwZS4KKyAqCisgKiAgICAgICAgICAgd3JpdGUgICAgICAgc3lzdGVtICAgICAgICAgICAgICAgIHJlYWQKKyAqICAgIHBhcmVudCAgLT4gICBmZFsxXSAgIC0+ICAgU1RESU5fRklMRU5PICAgIC0+ICAgY2hpbGQKKyAqICAgIHBhcmVudCAgPC0gICBmZFswXSAgIDwtICAgU1RET1VUX0ZJTEVOTyAgIDwtICAgY2hpbGQKKyAqICAgICAgICAgICByZWFkICAgICAgICBzeXN0ZW0gICAgICAgICAgICAgICAgd3JpdGUKKyAqCisgKiBOb3RlOiBXaGVuIHdyaXRpbmcgdG8gYSBjaGlsZCBwcm9jZXNzLCBpdCBpcyB1c2VmdWwgdG8gaWdub3JlIHRoZSBTSUdQSVBFCisgKiBzaWduYWwgYW5kIHRoZSBFUElQRSBlcnJvciBjb2RlLgorICoKKyAqIE5vdGU6IFRoZSBwYXJlbnQgcHJvY2VzcyBtdXN0IGJlIGNhcmVmdWwgdG8gYXZvaWQgZGVhZGxvY2suCisgKiAxKSBJZiB5b3Ugd3JpdGUgbW9yZSB0aGFuIFBJUEVfTUFYIGJ5dGVzIG9yLCBtb3JlIGdlbmVyYWxseSwgaWYgeW91IHdyaXRlCisgKiAgICBtb3JlIGJ5dGVzIHRoYW4gdGhlIHN1YnByb2Nlc3MgY2FuIGhhbmRsZSBhdCBvbmNlLCB0aGUgc3VicHJvY2VzcworICogICAgbWF5IHdyaXRlIGl0cyBkYXRhIGFuZCB3YWl0IG9uIHlvdSB0byByZWFkIGl0LCBidXQgeW91IGFyZSBjdXJyZW50bHkKKyAqICAgIGJ1c3kgd3JpdGluZy4KKyAqIDIpIFdoZW4geW91IGRvbid0IGtub3cgYWhlYWQgb2YgdGltZSBob3cgbWFueSBieXRlcyB0aGUgc3VicHJvY2VzcworICogICAgd2lsbCBwcm9kdWNlLCB0aGUgdXN1YWwgdGVjaG5pcXVlIG9mIGNhbGxpbmcgcmVhZCAoZmQsIGJ1ZiwgQlVGU0laKQorICogICAgd2l0aCBhIGZpeGVkIEJVRlNJWiB3aWxsLCBvbiBMaW51eCAyLjIuMTcgYW5kIG9uIEJTRCBzeXN0ZW1zLCBjYXVzZQorICogICAgdGhlIHJlYWQoKSBjYWxsIHRvIGJsb2NrIHVudGlsICphbGwqIG9mIHRoZSBidWZmZXIgaGFzIGJlZW4gZmlsbGVkLgorICogICAgQnV0IHRoZSBzdWJwcm9jZXNzIGNhbm5vdCBwcm9kdWNlIG1vcmUgZGF0YSB1bnRpbCB5b3UgZ2F2ZSBpdCBtb3JlCisgKiAgICBpbnB1dC4gIEJ1dCB5b3UgYXJlIGN1cnJlbnRseSBidXN5IHJlYWRpbmcgZnJvbSBpdC4KKyAqLworZXh0ZXJuIHBpZF90IGNyZWF0ZV9waXBlX2JpZGkgKGNvbnN0IGNoYXIgKnByb2duYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnByb2dfcGF0aCwgY2hhciAqKnByb2dfYXJndiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG51bGxfc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2xhdmVfcHJvY2VzcywgYm9vbCBleGl0X29uX2Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmZFsyXSk7CisKKy8qIFRoZSBuYW1lIG9mIHRoZSAiYWx3YXlzIHNpbGVudCIgZGV2aWNlLiAgKi8KKyNpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCisvKiBOYXRpdmUgV2luZG93cyBBUEkuICAqLworIyBkZWZpbmUgREVWX05VTEwgIk5VTCIKKyNlbHNlCisvKiBVbml4IEFQSS4gICovCisjIGRlZmluZSBERVZfTlVMTCAiL2Rldi9udWxsIgorI2VuZGlmCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworCisjZW5kaWYgLyogX1NQQVdOX1BJUEVfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL3NwYXduLmluLmggYi9saWIvc3Bhd24uaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjI1ZDE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3NwYXduLmluLmgKQEAgLTAsMCArMSw4ODEgQEAKKy8qIERlZmluaXRpb25zIGZvciBQT1NJWCBzcGF3biBpbnRlcmZhY2UuCisgICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDMtMjAwNCwgMjAwOC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NQQVdOX0gKKworI2lmIF9fR05VQ19fID49IDMKK0BQUkFHTUFfU1lTVEVNX0hFQURFUkAKKyNlbmRpZgorQFBSQUdNQV9DT0xVTU5TQAorCisvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisjaWYgQEhBVkVfU1BBV05fSEAKKyMgQElOQ0xVREVfTkVYVEAgQE5FWFRfU1BBV05fSEAKKyNlbmRpZgorCisjaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TUEFXTl9ICisjZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9TUEFXTl9ICisKKy8qIEdldCBkZWZpbml0aW9ucyBvZiAnc3RydWN0IHNjaGVkX3BhcmFtJyBhbmQgJ3NpZ3NldF90Jy4KKyAgIEJ1dCBhdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9uIG9uIGdsaWJjIHN5c3RlbXMuICAqLworI2lmICEoZGVmaW5lZCBfX0dMSUJDX18gJiYgIWRlZmluZWQgX19VQ0xJQkNfXykKKyMgaW5jbHVkZSA8c2NoZWQuaD4KKyMgaW5jbHVkZSA8c2lnbmFsLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaWZuZGVmIF9fVEhST1cKKyMgZGVmaW5lIF9fVEhST1cKKyNlbmRpZgorCisvKiBHQ0MgMi45NSBhbmQgbGF0ZXIgaGF2ZSAiX19yZXN0cmljdCI7IEM5OSBjb21waWxlcnMgaGF2ZQorICAgInJlc3RyaWN0IiwgYW5kICJjb25maWd1cmUiIG1heSBoYXZlIGRlZmluZWQgInJlc3RyaWN0Ii4KKyAgIE90aGVyIGNvbXBpbGVycyB1c2UgX19yZXN0cmljdCwgX19yZXN0cmljdF9fLCBhbmQgX1Jlc3RyaWN0LCBhbmQKKyAgICdjb25maWd1cmUnIG1pZ2h0ICNkZWZpbmUgJ3Jlc3RyaWN0JyB0byB0aG9zZSB3b3Jkcywgc28gcGljayBhCisgICBkaWZmZXJlbnQgbmFtZS4gICovCisjaWZuZGVmIF9SZXN0cmljdF8KKyMgaWYgMTk5OTAxTCA8PSBfX1NURENfVkVSU0lPTl9fCisjICBkZWZpbmUgX1Jlc3RyaWN0XyByZXN0cmljdAorIyBlbGlmIDIgPCBfX0dOVUNfXyB8fCAoMiA9PSBfX0dOVUNfXyAmJiA5NSA8PSBfX0dOVUNfTUlOT1JfXykKKyMgIGRlZmluZSBfUmVzdHJpY3RfIF9fcmVzdHJpY3QKKyMgZWxzZQorIyAgZGVmaW5lIF9SZXN0cmljdF8KKyMgZW5kaWYKKyNlbmRpZgorLyogZ2NjIDMuMSBhbmQgdXAgc3VwcG9ydCB0aGUgW3Jlc3RyaWN0XSBzeW50YXguICBEb24ndCB0cnVzdAorICAgc3lzL2NkZWZzLmgncyBkZWZpbml0aW9uIG9mIF9fcmVzdHJpY3RfYXJyLCB0aG91Z2gsIGFzIGl0CisgICBtaXNoYW5kbGVzIGdjYyAtYW5zaSAtcGVkYW50aWMuICAqLworI2lmbmRlZiBfUmVzdHJpY3RfYXJyXworIyBpZiAoKDE5OTkwMUwgPD0gX19TVERDX1ZFUlNJT05fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHx8ICgoMyA8IF9fR05VQ19fIHx8ICgzID09IF9fR05VQ19fICYmIDEgPD0gX19HTlVDX01JTk9SX18pKSAgICAgXAorICAgICAgICAgICAmJiAhZGVmaW5lZCBfX1NUUklDVF9BTlNJX18pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAmJiAhZGVmaW5lZCBfX0dOVUdfXykKKyMgIGRlZmluZSBfUmVzdHJpY3RfYXJyXyBfUmVzdHJpY3RfCisjIGVsc2UKKyMgIGRlZmluZSBfUmVzdHJpY3RfYXJyXworIyBlbmRpZgorI2VuZGlmCisKKy8qIFRoZSBkZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBMIGV0Yy4gYXJlIGNvcGllZCBoZXJlLiAgKi8KKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxMIGlzIGNvcGllZCBoZXJlLiAgKi8KKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKworCisvKiBEYXRhIHN0cnVjdHVyZSB0byBjb250YWluIGF0dHJpYnV0ZXMgZm9yIHRocmVhZCBjcmVhdGlvbi4gICovCisjaWYgQFJFUExBQ0VfUE9TSVhfU1BBV05ACisjIGRlZmluZSBwb3NpeF9zcGF3bmF0dHJfdCBycGxfcG9zaXhfc3Bhd25hdHRyX3QKKyNlbmRpZgorI2lmIEBSRVBMQUNFX1BPU0lYX1NQQVdOQCB8fCAhQEhBVkVfUE9TSVhfU1BBV05BVFRSX1RACisjIGlmICFHTlVMSUJfZGVmaW5lZF9wb3NpeF9zcGF3bmF0dHJfdAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgc2hvcnQgaW50IF9mbGFnczsKKyAgcGlkX3QgX3BncnA7CisgIHNpZ3NldF90IF9zZDsKKyAgc2lnc2V0X3QgX3NzOworICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gX3NwOworICBpbnQgX3BvbGljeTsKKyAgaW50IF9fcGFkWzE2XTsKK30gcG9zaXhfc3Bhd25hdHRyX3Q7CisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfcG9zaXhfc3Bhd25hdHRyX3QgMQorIyBlbmRpZgorI2VuZGlmCisKKworLyogRGF0YSBzdHJ1Y3R1cmUgdG8gY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWN0aW9ucyB0byBiZQorICAgcGVyZm9ybWVkIGluIHRoZSBuZXcgcHJvY2VzcyB3aXRoIHJlc3BlY3QgdG8gZmlsZSBkZXNjcmlwdG9ycy4gICovCisjaWYgQFJFUExBQ0VfUE9TSVhfU1BBV05ACisjIGRlZmluZSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCBycGxfcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QKKyNlbmRpZgorI2lmIEBSRVBMQUNFX1BPU0lYX1NQQVdOQCB8fCAhQEhBVkVfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX1RACisjIGlmICFHTlVMSUJfZGVmaW5lZF9wb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgaW50IF9hbGxvY2F0ZWQ7CisgIGludCBfdXNlZDsKKyAgc3RydWN0IF9fc3Bhd25fYWN0aW9uICpfYWN0aW9uczsKKyAgaW50IF9fcGFkWzE2XTsKK30gcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3Q7CisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgMQorIyBlbmRpZgorI2VuZGlmCisKKworLyogRmxhZ3MgdG8gYmUgc2V0IGluIHRoZSAncG9zaXhfc3Bhd25hdHRyX3QnLiAgKi8KKyNpZiBASEFWRV9QT1NJWF9TUEFXTkAKKy8qIFVzZSB0aGUgdmFsdWVzIGZyb20gdGhlIHN5c3RlbSwgYnV0IHByb3ZpZGUgdGhlIG1pc3Npbmcgb25lcy4gICovCisjIGlmbmRlZiBQT1NJWF9TUEFXTl9TRVRTQ0hFRFBBUkFNCisjICBkZWZpbmUgUE9TSVhfU1BBV05fU0VUU0NIRURQQVJBTSAwCisjIGVuZGlmCisjIGlmbmRlZiBQT1NJWF9TUEFXTl9TRVRTQ0hFRFVMRVIKKyMgIGRlZmluZSBQT1NJWF9TUEFXTl9TRVRTQ0hFRFVMRVIgMAorIyBlbmRpZgorI2Vsc2UKKyMgaWYgQFJFUExBQ0VfUE9TSVhfU1BBV05ACisvKiBVc2UgdGhlIHZhbHVlcyBmcm9tIHRoZSBzeXN0ZW0sIGZvciBiZXR0ZXIgY29tcGF0aWJpbGl0eS4gICovCisvKiBCdXQgdGhpcyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IEFJWCBleHRlbnNpb25zLiAgKi8KKyMgIHVuZGVmIFBPU0lYX1NQQVdOX0ZPUktfSEFORExFUlMKKyMgZWxzZQorIyAgZGVmaW5lIFBPU0lYX1NQQVdOX1JFU0VUSURTICAgICAgICAgICAweDAxCisjICBkZWZpbmUgUE9TSVhfU1BBV05fU0VUUEdST1VQICAgICAgICAgIDB4MDIKKyMgIGRlZmluZSBQT1NJWF9TUEFXTl9TRVRTSUdERUYgICAgICAgICAgMHgwNAorIyAgZGVmaW5lIFBPU0lYX1NQQVdOX1NFVFNJR01BU0sgICAgICAgICAweDA4CisjICBkZWZpbmUgUE9TSVhfU1BBV05fU0VUU0NIRURQQVJBTSAgICAgIDB4MTAKKyMgIGRlZmluZSBQT1NJWF9TUEFXTl9TRVRTQ0hFRFVMRVIgICAgICAgMHgyMAorIyBlbmRpZgorI2VuZGlmCisvKiBBIEdOVSBleHRlbnNpb24uICBVc2UgdGhlIG5leHQgZnJlZSBiaXQgcG9zaXRpb24uICAqLworI2RlZmluZSBQT1NJWF9TUEFXTl9VU0VWRk9SSyBcCisgICgoUE9TSVhfU1BBV05fUkVTRVRJRFMgfCAoUE9TSVhfU1BBV05fUkVTRVRJRFMgLSAxKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB8IFBPU0lYX1NQQVdOX1NFVFBHUk9VUCB8IChQT1NJWF9TUEFXTl9TRVRQR1JPVVAgLSAxKSAgICAgICAgICAgICAgICAgXAorICAgIHwgUE9TSVhfU1BBV05fU0VUU0lHREVGIHwgKFBPU0lYX1NQQVdOX1NFVFNJR0RFRiAtIDEpICAgICAgICAgICAgICAgICBcCisgICAgfCBQT1NJWF9TUEFXTl9TRVRTSUdNQVNLIHwgKFBPU0lYX1NQQVdOX1NFVFNJR01BU0sgLSAxKSAgICAgICAgICAgICAgIFwKKyAgICB8IFBPU0lYX1NQQVdOX1NFVFNDSEVEUEFSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHwgKFBPU0lYX1NQQVdOX1NFVFNDSEVEUEFSQU0gPiAwID8gUE9TSVhfU1BBV05fU0VUU0NIRURQQVJBTSAtIDEgOiAwKSBcCisgICAgfCBQT1NJWF9TUEFXTl9TRVRTQ0hFRFVMRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB8IChQT1NJWF9TUEFXTl9TRVRTQ0hFRFVMRVIgPiAwID8gUE9TSVhfU1BBV05fU0VUU0NIRURVTEVSIC0gMSA6IDApKSAgXAorICAgKyAxKQorI2lmICFHTlVMSUJfZGVmaW5lZF92ZXJpZnlfUE9TSVhfU1BBV05fVVNFVkZPUktfbm9fb3ZlcmxhcAordHlwZWRlZiBpbnQgdmVyaWZ5X1BPU0lYX1NQQVdOX1VTRVZGT1JLX25vX292ZXJsYXAKKyAgICAgICAgICAgIFsoKChQT1NJWF9TUEFXTl9SRVNFVElEUyB8IFBPU0lYX1NQQVdOX1NFVFBHUk9VUAorICAgICAgICAgICAgICAgIHwgUE9TSVhfU1BBV05fU0VUU0lHREVGIHwgUE9TSVhfU1BBV05fU0VUU0lHTUFTSworICAgICAgICAgICAgICAgIHwgUE9TSVhfU1BBV05fU0VUU0NIRURQQVJBTSB8IFBPU0lYX1NQQVdOX1NFVFNDSEVEVUxFUikKKyAgICAgICAgICAgICAgICYgUE9TSVhfU1BBV05fVVNFVkZPUkspCisgICAgICAgICAgICAgID09IDApCisgICAgICAgICAgICAgPyAxIDogLTFdOworIyBkZWZpbmUgR05VTElCX2RlZmluZWRfdmVyaWZ5X1BPU0lYX1NQQVdOX1VTRVZGT1JLX25vX292ZXJsYXAgMQorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfUE9TSVhfU1BBV05ACisvKiBTcGF3biBhIG5ldyBwcm9jZXNzIGV4ZWN1dGluZyBQQVRIIHdpdGggdGhlIGF0dHJpYnV0ZXMgZGVzY3JpYmVzIGluICpBVFRSUC4KKyAgIEJlZm9yZSBydW5uaW5nIHRoZSBwcm9jZXNzIHBlcmZvcm0gdGhlIGFjdGlvbnMgZGVzY3JpYmVkIGluIEZJTEUtQUNUSU9OUy4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludHMgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICovCisjIGlmIEBSRVBMQUNFX1BPU0lYX1NQQVdOQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgcG9zaXhfc3Bhd24gcnBsX3Bvc2l4X3NwYXduCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocG9zaXhfc3Bhd24sIGludCwKKyAgICAgICAgICAgICAgICAgIChwaWRfdCAqX1Jlc3RyaWN0XyBfX3BpZCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfUmVzdHJpY3RfIF9fcGF0aCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqX1Jlc3RyaWN0XyBfX2ZpbGVfYWN0aW9ucywKKyAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHJwLAorICAgICAgICAgICAgICAgICAgIGNoYXIgKmNvbnN0IGFyZ3ZbX1Jlc3RyaWN0X2Fycl9dLAorICAgICAgICAgICAgICAgICAgIGNoYXIgKmNvbnN0IGVudnBbX1Jlc3RyaWN0X2Fycl9dKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMiwgNSwgNikpKTsKK19HTF9DWFhBTElBU19SUEwgKHBvc2l4X3NwYXduLCBpbnQsCisgICAgICAgICAgICAgICAgICAocGlkX3QgKl9SZXN0cmljdF8gX19waWQsCisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX1Jlc3RyaWN0XyBfX3BhdGgsCisgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9SZXN0cmljdF8gX19maWxlX2FjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRycCwKKyAgICAgICAgICAgICAgICAgICBjaGFyICpjb25zdCBhcmd2W19SZXN0cmljdF9hcnJfXSwKKyAgICAgICAgICAgICAgICAgICBjaGFyICpjb25zdCBlbnZwW19SZXN0cmljdF9hcnJfXSkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfUE9TSVhfU1BBV05ACitfR0xfRlVOQ0RFQ0xfU1lTIChwb3NpeF9zcGF3biwgaW50LAorICAgICAgICAgICAgICAgICAgKHBpZF90ICpfUmVzdHJpY3RfIF9fcGlkLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9SZXN0cmljdF8gX19wYXRoLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfUmVzdHJpY3RfIF9fZmlsZV9hY3Rpb25zLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0cnAsCisgICAgICAgICAgICAgICAgICAgY2hhciAqY29uc3QgYXJndltfUmVzdHJpY3RfYXJyX10sCisgICAgICAgICAgICAgICAgICAgY2hhciAqY29uc3QgZW52cFtfUmVzdHJpY3RfYXJyX10pCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyLCA1LCA2KSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X3NwYXduLCBpbnQsCisgICAgICAgICAgICAgICAgICAocGlkX3QgKl9SZXN0cmljdF8gX19waWQsCisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX1Jlc3RyaWN0XyBfX3BhdGgsCisgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9SZXN0cmljdF8gX19maWxlX2FjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRycCwKKyAgICAgICAgICAgICAgICAgICBjaGFyICpjb25zdCBhcmd2W19SZXN0cmljdF9hcnJfXSwKKyAgICAgICAgICAgICAgICAgICBjaGFyICpjb25zdCBlbnZwW19SZXN0cmljdF9hcnJfXSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocG9zaXhfc3Bhd24pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bgorIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOCitfR0xfV0FSTl9PTl9VU0UgKHBvc2l4X3NwYXduLCAicG9zaXhfc3Bhd24gaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX1BPU0lYX1NQQVdOUEAKKy8qIFNpbWlsYXIgdG8gJ3Bvc2l4X3NwYXduJyBidXQgc2VhcmNoIGZvciBGSUxFIGluIHRoZSBQQVRILgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50cyBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCisjIGlmIEBSRVBMQUNFX1BPU0lYX1NQQVdOQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgcG9zaXhfc3Bhd25wIHJwbF9wb3NpeF9zcGF3bnAKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwb3NpeF9zcGF3bnAsIGludCwKKyAgICAgICAgICAgICAgICAgIChwaWRfdCAqX19waWQsIGNvbnN0IGNoYXIgKl9fZmlsZSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqX19maWxlX2FjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9fYXR0cnAsCisgICAgICAgICAgICAgICAgICAgY2hhciAqY29uc3QgYXJndltdLCBjaGFyICpjb25zdCBlbnZwW10pCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyLCA1LCA2KSkpOworX0dMX0NYWEFMSUFTX1JQTCAocG9zaXhfc3Bhd25wLCBpbnQsCisgICAgICAgICAgICAgICAgICAocGlkX3QgKl9fcGlkLCBjb25zdCBjaGFyICpfX2ZpbGUsCisgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9fZmlsZV9hY3Rpb25zLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHJwLAorICAgICAgICAgICAgICAgICAgIGNoYXIgKmNvbnN0IGFyZ3ZbXSwgY2hhciAqY29uc3QgZW52cFtdKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9QT1NJWF9TUEFXTkAKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXducCwgaW50LAorICAgICAgICAgICAgICAgICAgKHBpZF90ICpfX3BpZCwgY29uc3QgY2hhciAqX19maWxlLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfX2ZpbGVfYWN0aW9ucywKKyAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX19hdHRycCwKKyAgICAgICAgICAgICAgICAgICBjaGFyICpjb25zdCBhcmd2W10sIGNoYXIgKmNvbnN0IGVudnBbXSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIsIDUsIDYpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocG9zaXhfc3Bhd25wLCBpbnQsCisgICAgICAgICAgICAgICAgICAocGlkX3QgKl9fcGlkLCBjb25zdCBjaGFyICpfX2ZpbGUsCisgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9fZmlsZV9hY3Rpb25zLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHJwLAorICAgICAgICAgICAgICAgICAgIGNoYXIgKmNvbnN0IGFyZ3ZbXSwgY2hhciAqY29uc3QgZW52cFtdKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwb3NpeF9zcGF3bnApOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bnAKKyMgaWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTlAKK19HTF9XQVJOX09OX1VTRSAocG9zaXhfc3Bhd25wLCAicG9zaXhfc3Bhd25wIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bnAgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfSU5JVEAKKy8qIEluaXRpYWxpemUgZGF0YSBzdHJ1Y3R1cmUgd2l0aCBhdHRyaWJ1dGVzIGZvciAnc3Bhd24nIHRvIGRlZmF1bHQgdmFsdWVzLiAgKi8KKyMgaWYgQFJFUExBQ0VfUE9TSVhfU1BBV05ACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBwb3NpeF9zcGF3bmF0dHJfaW5pdCBycGxfcG9zaXhfc3Bhd25hdHRyX2luaXQKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwb3NpeF9zcGF3bmF0dHJfaW5pdCwgaW50LCAocG9zaXhfc3Bhd25hdHRyX3QgKl9fYXR0cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHBvc2l4X3NwYXduYXR0cl9pbml0LCBpbnQsIChwb3NpeF9zcGF3bmF0dHJfdCAqX19hdHRyKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9QT1NJWF9TUEFXTkAKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduYXR0cl9pbml0LCBpbnQsIChwb3NpeF9zcGF3bmF0dHJfdCAqX19hdHRyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X3NwYXduYXR0cl9pbml0LCBpbnQsIChwb3NpeF9zcGF3bmF0dHJfdCAqX19hdHRyKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwb3NpeF9zcGF3bmF0dHJfaW5pdCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHBvc2l4X3NwYXduYXR0cl9pbml0CisjIGlmIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05BVFRSX0lOSVQKK19HTF9XQVJOX09OX1VTRSAocG9zaXhfc3Bhd25hdHRyX2luaXQsICJwb3NpeF9zcGF3bmF0dHJfaW5pdCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25hdHRyX2luaXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0RFU1RST1lACisvKiBGcmVlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggQVRUUi4gICovCisjIGlmIEBSRVBMQUNFX1BPU0lYX1NQQVdOQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgcG9zaXhfc3Bhd25hdHRyX2Rlc3Ryb3kgcnBsX3Bvc2l4X3NwYXduYXR0cl9kZXN0cm95CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocG9zaXhfc3Bhd25hdHRyX2Rlc3Ryb3ksIGludCwgKHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwb3NpeF9zcGF3bmF0dHJfZGVzdHJveSwgaW50LCAocG9zaXhfc3Bhd25hdHRyX3QgKl9fYXR0cikpOworIyBlbHNlCisjICBpZiAhQEhBVkVfUE9TSVhfU1BBV05ACitfR0xfRlVOQ0RFQ0xfU1lTIChwb3NpeF9zcGF3bmF0dHJfZGVzdHJveSwgaW50LCAocG9zaXhfc3Bhd25hdHRyX3QgKl9fYXR0cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwb3NpeF9zcGF3bmF0dHJfZGVzdHJveSwgaW50LCAocG9zaXhfc3Bhd25hdHRyX3QgKl9fYXR0cikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocG9zaXhfc3Bhd25hdHRyX2Rlc3Ryb3kpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bmF0dHJfZGVzdHJveQorIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9ERVNUUk9ZCitfR0xfV0FSTl9PTl9VU0UgKHBvc2l4X3NwYXduYXR0cl9kZXN0cm95LAorICAgICAgICAgICAgICAgICAicG9zaXhfc3Bhd25hdHRyX2Rlc3Ryb3kgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9kZXN0cm95IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdERUZBVUxUQAorLyogU3RvcmUgc2lnbmFsIG1hc2sgZm9yIHNpZ25hbHMgd2l0aCBkZWZhdWx0IGhhbmRsaW5nIGZyb20gQVRUUiBpbgorICAgU0lHREVGQVVMVC4gICovCisjIGlmIEBSRVBMQUNFX1BPU0lYX1NQQVdOQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgcG9zaXhfc3Bhd25hdHRyX2dldHNpZ2RlZmF1bHQgcnBsX3Bvc2l4X3NwYXduYXR0cl9nZXRzaWdkZWZhdWx0CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocG9zaXhfc3Bhd25hdHRyX2dldHNpZ2RlZmF1bHQsIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgc2lnc2V0X3QgKl9SZXN0cmljdF8gX19zaWdkZWZhdWx0KQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocG9zaXhfc3Bhd25hdHRyX2dldHNpZ2RlZmF1bHQsIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgc2lnc2V0X3QgKl9SZXN0cmljdF8gX19zaWdkZWZhdWx0KSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9QT1NJWF9TUEFXTkAKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduYXR0cl9nZXRzaWdkZWZhdWx0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIHNpZ3NldF90ICpfUmVzdHJpY3RfIF9fc2lnZGVmYXVsdCkKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwb3NpeF9zcGF3bmF0dHJfZ2V0c2lnZGVmYXVsdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBzaWdzZXRfdCAqX1Jlc3RyaWN0XyBfX3NpZ2RlZmF1bHQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHBvc2l4X3NwYXduYXR0cl9nZXRzaWdkZWZhdWx0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcG9zaXhfc3Bhd25hdHRyX2dldHNpZ2RlZmF1bHQKKyMgaWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfR0VUU0lHREVGQVVMVAorX0dMX1dBUk5fT05fVVNFIChwb3NpeF9zcGF3bmF0dHJfZ2V0c2lnZGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgInBvc2l4X3NwYXduYXR0cl9nZXRzaWdkZWZhdWx0IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bmF0dHJfZ2V0c2lnZGVmYXVsdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0lHREVGQVVMVEAKKy8qIFNldCBzaWduYWwgbWFzayBmb3Igc2lnbmFscyB3aXRoIGRlZmF1bHQgaGFuZGxpbmcgaW4gQVRUUiB0byBTSUdERUZBVUxULiAgKi8KKyMgaWYgQFJFUExBQ0VfUE9TSVhfU1BBV05ACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBwb3NpeF9zcGF3bmF0dHJfc2V0c2lnZGVmYXVsdCBycGxfcG9zaXhfc3Bhd25hdHRyX3NldHNpZ2RlZmF1bHQKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwb3NpeF9zcGF3bmF0dHJfc2V0c2lnZGVmYXVsdCwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzaWdzZXRfdCAqX1Jlc3RyaWN0XyBfX3NpZ2RlZmF1bHQpCisgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwb3NpeF9zcGF3bmF0dHJfc2V0c2lnZGVmYXVsdCwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzaWdzZXRfdCAqX1Jlc3RyaWN0XyBfX3NpZ2RlZmF1bHQpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX1BPU0lYX1NQQVdOQAorX0dMX0ZVTkNERUNMX1NZUyAocG9zaXhfc3Bhd25hdHRyX3NldHNpZ2RlZmF1bHQsIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnc2V0X3QgKl9SZXN0cmljdF8gX19zaWdkZWZhdWx0KQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X3NwYXduYXR0cl9zZXRzaWdkZWZhdWx0LCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ3NldF90ICpfUmVzdHJpY3RfIF9fc2lnZGVmYXVsdCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocG9zaXhfc3Bhd25hdHRyX3NldHNpZ2RlZmF1bHQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bmF0dHJfc2V0c2lnZGVmYXVsdAorIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9TRVRTSUdERUZBVUxUCitfR0xfV0FSTl9PTl9VU0UgKHBvc2l4X3NwYXduYXR0cl9zZXRzaWdkZWZhdWx0LAorICAgICAgICAgICAgICAgICAicG9zaXhfc3Bhd25hdHRyX3NldHNpZ2RlZmF1bHQgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9zZXRzaWdkZWZhdWx0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdNQVNLQAorLyogU3RvcmUgc2lnbmFsIG1hc2sgZm9yIHRoZSBuZXcgcHJvY2VzcyBmcm9tIEFUVFIgaW4gU0lHTUFTSy4gICovCisjIGlmIEBSRVBMQUNFX1BPU0lYX1NQQVdOQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgcG9zaXhfc3Bhd25hdHRyX2dldHNpZ21hc2sgcnBsX3Bvc2l4X3NwYXduYXR0cl9nZXRzaWdtYXNrCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocG9zaXhfc3Bhd25hdHRyX2dldHNpZ21hc2ssIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgc2lnc2V0X3QgKl9SZXN0cmljdF8gX19zaWdtYXNrKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocG9zaXhfc3Bhd25hdHRyX2dldHNpZ21hc2ssIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgc2lnc2V0X3QgKl9SZXN0cmljdF8gX19zaWdtYXNrKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9QT1NJWF9TUEFXTkAKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduYXR0cl9nZXRzaWdtYXNrLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIHNpZ3NldF90ICpfUmVzdHJpY3RfIF9fc2lnbWFzaykKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwb3NpeF9zcGF3bmF0dHJfZ2V0c2lnbWFzaywgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBzaWdzZXRfdCAqX1Jlc3RyaWN0XyBfX3NpZ21hc2spKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHBvc2l4X3NwYXduYXR0cl9nZXRzaWdtYXNrKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcG9zaXhfc3Bhd25hdHRyX2dldHNpZ21hc2sKKyMgaWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfR0VUU0lHTUFTSworX0dMX1dBUk5fT05fVVNFIChwb3NpeF9zcGF3bmF0dHJfZ2V0c2lnbWFzaywKKyAgICAgICAgICAgICAgICAgInBvc2l4X3NwYXduYXR0cl9nZXRzaWdtYXNrIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bmF0dHJfZ2V0c2lnbWFzayBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0lHTUFTS0AKKy8qIFNldCBzaWduYWwgbWFzayBmb3IgdGhlIG5ldyBwcm9jZXNzIGluIEFUVFIgdG8gU0lHTUFTSy4gICovCisjIGlmIEBSRVBMQUNFX1BPU0lYX1NQQVdOQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgcG9zaXhfc3Bhd25hdHRyX3NldHNpZ21hc2sgcnBsX3Bvc2l4X3NwYXduYXR0cl9zZXRzaWdtYXNrCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocG9zaXhfc3Bhd25hdHRyX3NldHNpZ21hc2ssIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnc2V0X3QgKl9SZXN0cmljdF8gX19zaWdtYXNrKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocG9zaXhfc3Bhd25hdHRyX3NldHNpZ21hc2ssIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnc2V0X3QgKl9SZXN0cmljdF8gX19zaWdtYXNrKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9QT1NJWF9TUEFXTkAKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduYXR0cl9zZXRzaWdtYXNrLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ3NldF90ICpfUmVzdHJpY3RfIF9fc2lnbWFzaykKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwb3NpeF9zcGF3bmF0dHJfc2V0c2lnbWFzaywgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzaWdzZXRfdCAqX1Jlc3RyaWN0XyBfX3NpZ21hc2spKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHBvc2l4X3NwYXduYXR0cl9zZXRzaWdtYXNrKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcG9zaXhfc3Bhd25hdHRyX3NldHNpZ21hc2sKKyMgaWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfU0VUU0lHTUFTSworX0dMX1dBUk5fT05fVVNFIChwb3NpeF9zcGF3bmF0dHJfc2V0c2lnbWFzaywKKyAgICAgICAgICAgICAgICAgInBvc2l4X3NwYXduYXR0cl9zZXRzaWdtYXNrIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bmF0dHJfc2V0c2lnbWFzayBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VURkxBR1NACisvKiBHZXQgZmxhZyB3b3JkIGZyb20gdGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUuICAqLworIyBpZiBAUkVQTEFDRV9QT1NJWF9TUEFXTkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHBvc2l4X3NwYXduYXR0cl9nZXRmbGFncyBycGxfcG9zaXhfc3Bhd25hdHRyX2dldGZsYWdzCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocG9zaXhfc3Bhd25hdHRyX2dldGZsYWdzLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIHNob3J0IGludCAqX1Jlc3RyaWN0XyBfX2ZsYWdzKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocG9zaXhfc3Bhd25hdHRyX2dldGZsYWdzLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIHNob3J0IGludCAqX1Jlc3RyaWN0XyBfX2ZsYWdzKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9QT1NJWF9TUEFXTkAKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduYXR0cl9nZXRmbGFncywgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBzaG9ydCBpbnQgKl9SZXN0cmljdF8gX19mbGFncykKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwb3NpeF9zcGF3bmF0dHJfZ2V0ZmxhZ3MsIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgc2hvcnQgaW50ICpfUmVzdHJpY3RfIF9fZmxhZ3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHBvc2l4X3NwYXduYXR0cl9nZXRmbGFncyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHBvc2l4X3NwYXduYXR0cl9nZXRmbGFncworIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9HRVRGTEFHUworX0dMX1dBUk5fT05fVVNFIChwb3NpeF9zcGF3bmF0dHJfZ2V0ZmxhZ3MsCisgICAgICAgICAgICAgICAgICJwb3NpeF9zcGF3bmF0dHJfZ2V0ZmxhZ3MgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9nZXRmbGFncyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VURkxBR1NACisvKiBTdG9yZSBmbGFncyBpbiB0aGUgYXR0cmlidXRlIHN0cnVjdHVyZS4gICovCisjIGlmIEBSRVBMQUNFX1BPU0lYX1NQQVdOQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgcG9zaXhfc3Bhd25hdHRyX3NldGZsYWdzIHJwbF9wb3NpeF9zcGF3bmF0dHJfc2V0ZmxhZ3MKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwb3NpeF9zcGF3bmF0dHJfc2V0ZmxhZ3MsIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bmF0dHJfdCAqX19hdHRyLCBzaG9ydCBpbnQgX19mbGFncykKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHBvc2l4X3NwYXduYXR0cl9zZXRmbGFncywgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHIsIHNob3J0IGludCBfX2ZsYWdzKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9QT1NJWF9TUEFXTkAKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduYXR0cl9zZXRmbGFncywgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHIsIHNob3J0IGludCBfX2ZsYWdzKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X3NwYXduYXR0cl9zZXRmbGFncywgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHIsIHNob3J0IGludCBfX2ZsYWdzKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwb3NpeF9zcGF3bmF0dHJfc2V0ZmxhZ3MpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bmF0dHJfc2V0ZmxhZ3MKKyMgaWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfU0VURkxBR1MKK19HTF9XQVJOX09OX1VTRSAocG9zaXhfc3Bhd25hdHRyX3NldGZsYWdzLAorICAgICAgICAgICAgICAgICAicG9zaXhfc3Bhd25hdHRyX3NldGZsYWdzIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bmF0dHJfc2V0ZmxhZ3MgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFBHUk9VUEAKKy8qIEdldCBwcm9jZXNzIGdyb3VwIElEIGZyb20gdGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUuICAqLworIyBpZiBAUkVQTEFDRV9QT1NJWF9TUEFXTkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHBvc2l4X3NwYXduYXR0cl9nZXRwZ3JvdXAgcnBsX3Bvc2l4X3NwYXduYXR0cl9nZXRwZ3JvdXAKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwb3NpeF9zcGF3bmF0dHJfZ2V0cGdyb3VwLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIHBpZF90ICpfUmVzdHJpY3RfIF9fcGdyb3VwKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocG9zaXhfc3Bhd25hdHRyX2dldHBncm91cCwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBwaWRfdCAqX1Jlc3RyaWN0XyBfX3Bncm91cCkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfUE9TSVhfU1BBV05ACitfR0xfRlVOQ0RFQ0xfU1lTIChwb3NpeF9zcGF3bmF0dHJfZ2V0cGdyb3VwLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIHBpZF90ICpfUmVzdHJpY3RfIF9fcGdyb3VwKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X3NwYXduYXR0cl9nZXRwZ3JvdXAsIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgcGlkX3QgKl9SZXN0cmljdF8gX19wZ3JvdXApKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHBvc2l4X3NwYXduYXR0cl9nZXRwZ3JvdXApOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bmF0dHJfZ2V0cGdyb3VwCisjIGlmIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05BVFRSX0dFVFBHUk9VUAorX0dMX1dBUk5fT05fVVNFIChwb3NpeF9zcGF3bmF0dHJfZ2V0cGdyb3VwLAorICAgICAgICAgICAgICAgICAicG9zaXhfc3Bhd25hdHRyX2dldHBncm91cCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25hdHRyX2dldHBncm91cCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUUEdST1VQQAorLyogU3RvcmUgcHJvY2VzcyBncm91cCBJRCBpbiB0aGUgYXR0cmlidXRlIHN0cnVjdHVyZS4gICovCisjIGlmIEBSRVBMQUNFX1BPU0lYX1NQQVdOQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgcG9zaXhfc3Bhd25hdHRyX3NldHBncm91cCBycGxfcG9zaXhfc3Bhd25hdHRyX3NldHBncm91cAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHBvc2l4X3NwYXduYXR0cl9zZXRwZ3JvdXAsIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bmF0dHJfdCAqX19hdHRyLCBwaWRfdCBfX3Bncm91cCkKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHBvc2l4X3NwYXduYXR0cl9zZXRwZ3JvdXAsIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bmF0dHJfdCAqX19hdHRyLCBwaWRfdCBfX3Bncm91cCkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfUE9TSVhfU1BBV05ACitfR0xfRlVOQ0RFQ0xfU1lTIChwb3NpeF9zcGF3bmF0dHJfc2V0cGdyb3VwLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25hdHRyX3QgKl9fYXR0ciwgcGlkX3QgX19wZ3JvdXApCisgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocG9zaXhfc3Bhd25hdHRyX3NldHBncm91cCwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHIsIHBpZF90IF9fcGdyb3VwKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwb3NpeF9zcGF3bmF0dHJfc2V0cGdyb3VwKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcG9zaXhfc3Bhd25hdHRyX3NldHBncm91cAorIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9TRVRQR1JPVVAKK19HTF9XQVJOX09OX1VTRSAocG9zaXhfc3Bhd25hdHRyX3NldHBncm91cCwKKyAgICAgICAgICAgICAgICAgInBvc2l4X3NwYXduYXR0cl9zZXRwZ3JvdXAgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9zZXRwZ3JvdXAgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNDSEVEUE9MSUNZQAorLyogR2V0IHNjaGVkdWxpbmcgcG9saWN5IGZyb20gdGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUuICAqLworIyBpZiBAUkVQTEFDRV9QT1NJWF9TUEFXTkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBvbGljeSBycGxfcG9zaXhfc3Bhd25hdHRyX2dldHNjaGVkcG9saWN5CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocG9zaXhfc3Bhd25hdHRyX2dldHNjaGVkcG9saWN5LCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIGludCAqX1Jlc3RyaWN0XyBfX3NjaGVkcG9saWN5KQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocG9zaXhfc3Bhd25hdHRyX2dldHNjaGVkcG9saWN5LCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIGludCAqX1Jlc3RyaWN0XyBfX3NjaGVkcG9saWN5KSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9QT1NJWF9TUEFXTkAgfHwgUE9TSVhfU1BBV05fU0VUU0NIRURVTEVSID09IDAKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBvbGljeSwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBpbnQgKl9SZXN0cmljdF8gX19zY2hlZHBvbGljeSkKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwb2xpY3ksIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgaW50ICpfUmVzdHJpY3RfIF9fc2NoZWRwb2xpY3kpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBvbGljeSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBvbGljeQorIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBPTElDWQorX0dMX1dBUk5fT05fVVNFIChwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwb2xpY3ksCisgICAgICAgICAgICAgICAgICJwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwb2xpY3kgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBvbGljeSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQT0xJQ1lACisvKiBTdG9yZSBzY2hlZHVsaW5nIHBvbGljeSBpbiB0aGUgYXR0cmlidXRlIHN0cnVjdHVyZS4gICovCisjIGlmIEBSRVBMQUNFX1BPU0lYX1NQQVdOQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgcG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcG9saWN5IHJwbF9wb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwb2xpY3kKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwb2xpY3ksIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bmF0dHJfdCAqX19hdHRyLCBpbnQgX19zY2hlZHBvbGljeSkKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBvbGljeSwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHIsIGludCBfX3NjaGVkcG9saWN5KSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9QT1NJWF9TUEFXTkAgfHwgUE9TSVhfU1BBV05fU0VUU0NIRURVTEVSID09IDAKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBvbGljeSwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHIsIGludCBfX3NjaGVkcG9saWN5KQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBvbGljeSwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHIsIGludCBfX3NjaGVkcG9saWN5KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwb2xpY3kpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwb2xpY3kKKyMgaWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQT0xJQ1kKK19HTF9XQVJOX09OX1VTRSAocG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcG9saWN5LAorICAgICAgICAgICAgICAgICAicG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcG9saWN5IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwb2xpY3kgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNDSEVEUEFSQU1ACisvKiBHZXQgc2NoZWR1bGluZyBwYXJhbWV0ZXJzIGZyb20gdGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUuICAqLworIyBpZiBAUkVQTEFDRV9QT1NJWF9TUEFXTkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBhcmFtIHJwbF9wb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwYXJhbQorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBhcmFtLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX1Jlc3RyaWN0XyBfX3NjaGVkcGFyYW0pCisgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwYXJhbSwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9SZXN0cmljdF8gX19zY2hlZHBhcmFtKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9QT1NJWF9TUEFXTkAgfHwgUE9TSVhfU1BBV05fU0VUU0NIRURQQVJBTSA9PSAwCitfR0xfRlVOQ0RFQ0xfU1lTIChwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwYXJhbSwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9SZXN0cmljdF8gX19zY2hlZHBhcmFtKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBhcmFtLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX1Jlc3RyaWN0XyBfX3NjaGVkcGFyYW0pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBhcmFtKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcG9zaXhfc3Bhd25hdHRyX2dldHNjaGVkcGFyYW0KKyMgaWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfR0VUU0NIRURQQVJBTQorX0dMX1dBUk5fT05fVVNFIChwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwYXJhbSwKKyAgICAgICAgICAgICAgICAgInBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBhcmFtIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwYXJhbSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQQVJBTUAKKy8qIFN0b3JlIHNjaGVkdWxpbmcgcGFyYW1ldGVycyBpbiB0aGUgYXR0cmlidXRlIHN0cnVjdHVyZS4gICovCisjIGlmIEBSRVBMQUNFX1BPU0lYX1NQQVdOQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgcG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcGFyYW0gcnBsX3Bvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBhcmFtCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcGFyYW0sIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfUmVzdHJpY3RfIF9fc2NoZWRwYXJhbSkKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBhcmFtLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX1Jlc3RyaWN0XyBfX3NjaGVkcGFyYW0pKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX1BPU0lYX1NQQVdOQCB8fCBQT1NJWF9TUEFXTl9TRVRTQ0hFRFBBUkFNID09IDAKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBhcmFtLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX1Jlc3RyaWN0XyBfX3NjaGVkcGFyYW0pCisgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcGFyYW0sIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfUmVzdHJpY3RfIF9fc2NoZWRwYXJhbSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcGFyYW0pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwYXJhbQorIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9TRVRTQ0hFRFBBUkFNCitfR0xfV0FSTl9PTl9VU0UgKHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBhcmFtLAorICAgICAgICAgICAgICAgICAicG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcGFyYW0gaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBhcmFtIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0lOSVRACisvKiBJbml0aWFsaXplIGRhdGEgc3RydWN0dXJlIGZvciBmaWxlIGF0dHJpYnV0ZSBmb3IgJ3NwYXduJyBjYWxsLiAgKi8KKyMgaWYgQFJFUExBQ0VfUE9TSVhfU1BBV05ACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfaW5pdCBycGxfcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2luaXQKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfaW5pdCwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfX2ZpbGVfYWN0aW9ucykKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19pbml0LCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9fZmlsZV9hY3Rpb25zKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9QT1NJWF9TUEFXTkAKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19pbml0LCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9fZmlsZV9hY3Rpb25zKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19pbml0LCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9fZmlsZV9hY3Rpb25zKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfaW5pdCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19pbml0CisjIGlmIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0lOSVQKK19HTF9XQVJOX09OX1VTRSAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2luaXQsCisgICAgICAgICAgICAgICAgICJwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfaW5pdCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2luaXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0RFU1RST1lACisvKiBGcmVlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggRklMRS1BQ1RJT05TLiAgKi8KKyMgaWYgQFJFUExBQ0VfUE9TSVhfU1BBV05ACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfZGVzdHJveSBycGxfcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3kKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfZGVzdHJveSwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfX2ZpbGVfYWN0aW9ucykKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19kZXN0cm95LCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9fZmlsZV9hY3Rpb25zKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9QT1NJWF9TUEFXTkAKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19kZXN0cm95LCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9fZmlsZV9hY3Rpb25zKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19kZXN0cm95LCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9fZmlsZV9hY3Rpb25zKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfZGVzdHJveSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19kZXN0cm95CisjIGlmIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0RFU1RST1kKK19HTF9XQVJOX09OX1VTRSAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3ksCisgICAgICAgICAgICAgICAgICJwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfZGVzdHJveSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3kgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU5ACisvKiBBZGQgYW4gYWN0aW9uIHRvIEZJTEUtQUNUSU9OUyB3aGljaCB0ZWxscyB0aGUgaW1wbGVtZW50YXRpb24gdG8gY2FsbAorICAgJ29wZW4nIGZvciB0aGUgZ2l2ZW4gZmlsZSBkdXJpbmcgdGhlICdzcGF3bicgY2FsbC4gICovCisjIGlmIEBSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERPUEVOQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW4gcnBsX3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW4sIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqX1Jlc3RyaWN0XyBfX2ZpbGVfYWN0aW9ucywKKyAgICAgICAgICAgICAgICAgICBpbnQgX19mZCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfUmVzdHJpY3RfIF9fcGF0aCwgaW50IF9fb2ZsYWcsIG1vZGVfdCBfX21vZGUpCisgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDMpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3BlbiwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfUmVzdHJpY3RfIF9fZmlsZV9hY3Rpb25zLAorICAgICAgICAgICAgICAgICAgIGludCBfX2ZkLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9SZXN0cmljdF8gX19wYXRoLCBpbnQgX19vZmxhZywgbW9kZV90IF9fbW9kZSkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfUE9TSVhfU1BBV05ACitfR0xfRlVOQ0RFQ0xfU1lTIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3BlbiwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfUmVzdHJpY3RfIF9fZmlsZV9hY3Rpb25zLAorICAgICAgICAgICAgICAgICAgIGludCBfX2ZkLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9SZXN0cmljdF8gX19wYXRoLCBpbnQgX19vZmxhZywgbW9kZV90IF9fbW9kZSkKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSwgMykpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3BlbiwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfUmVzdHJpY3RfIF9fZmlsZV9hY3Rpb25zLAorICAgICAgICAgICAgICAgICAgIGludCBfX2ZkLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9SZXN0cmljdF8gX19wYXRoLCBpbnQgX19vZmxhZywgbW9kZV90IF9fbW9kZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW4pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3BlbgorIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERPUEVOCitfR0xfV0FSTl9PTl9VU0UgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuLAorICAgICAgICAgICAgICAgICAicG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW4gaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRUAKKy8qIEFkZCBhbiBhY3Rpb24gdG8gRklMRS1BQ1RJT05TIHdoaWNoIHRlbGxzIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBjYWxsCisgICAnY2xvc2UnIGZvciB0aGUgZ2l2ZW4gZmlsZSBkZXNjcmlwdG9yIGR1cmluZyB0aGUgJ3NwYXduJyBjYWxsLiAgKi8KKyMgaWYgQFJFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERENMT1NFQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlIHJwbF9wb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2UKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2UsIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqX19maWxlX2FjdGlvbnMsIGludCBfX2ZkKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9fZmlsZV9hY3Rpb25zLCBpbnQgX19mZCkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfUE9TSVhfU1BBV05ACitfR0xfRlVOQ0RFQ0xfU1lTIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2UsIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqX19maWxlX2FjdGlvbnMsIGludCBfX2ZkKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZSwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfX2ZpbGVfYWN0aW9ucywgaW50IF9fZmQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZQorIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRQorX0dMX1dBUk5fT05fVVNFIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2UsCisgICAgICAgICAgICAgICAgICJwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2UgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMkAKKy8qIEFkZCBhbiBhY3Rpb24gdG8gRklMRS1BQ1RJT05TIHdoaWNoIHRlbGxzIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBjYWxsCisgICAnZHVwMicgZm9yIHRoZSBnaXZlbiBmaWxlIGRlc2NyaXB0b3JzIGR1cmluZyB0aGUgJ3NwYXduJyBjYWxsLiAgKi8KKyMgaWYgQFJFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDJACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkZHVwMiBycGxfcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDIKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkZHVwMiwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfX2ZpbGVfYWN0aW9ucywKKyAgICAgICAgICAgICAgICAgICBpbnQgX19mZCwgaW50IF9fbmV3ZmQpCisgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkZHVwMiwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfX2ZpbGVfYWN0aW9ucywKKyAgICAgICAgICAgICAgICAgICBpbnQgX19mZCwgaW50IF9fbmV3ZmQpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX1BPU0lYX1NQQVdOQAorX0dMX0ZVTkNERUNMX1NZUyAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDIsIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqX19maWxlX2FjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgaW50IF9fZmQsIGludCBfX25ld2ZkKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9fZmlsZV9hY3Rpb25zLAorICAgICAgICAgICAgICAgICAgIGludCBfX2ZkLCBpbnQgX19uZXdmZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDIpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkZHVwMgorIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BREREVVAyCitfR0xfV0FSTl9PTl9VU0UgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyLAorICAgICAgICAgICAgICAgICAicG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDIgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TUEFXTl9IICovCisjZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NQQVdOX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9zcGF3bl9mYWN0aW9uX2FkZGNsb3NlLmMgYi9saWIvc3Bhd25fZmFjdGlvbl9hZGRjbG9zZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMjZiYmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc3Bhd25fZmFjdGlvbl9hZGRjbG9zZS5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMCwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaW5jbHVkZSA8c3Bhd24uaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpZiAhX0xJQkMKKyMgZGVmaW5lIF9fc3lzY29uZihvcGVuX21heCkgZ2V0ZHRhYmxlc2l6ZSAoKQorI2VuZGlmCisKKyNpZiAhSEFWRV9XT1JLSU5HX1BPU0lYX1NQQVdOCisjIGluY2x1ZGUgInNwYXduX2ludC5oIgorI2VuZGlmCisKKy8qIEFkZCBhbiBhY3Rpb24gdG8gRklMRS1BQ1RJT05TIHdoaWNoIHRlbGxzIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBjYWxsCisgICAnY2xvc2UnIGZvciB0aGUgZ2l2ZW4gZmlsZSBkZXNjcmlwdG9yIGR1cmluZyB0aGUgJ3NwYXduJyBjYWxsLiAgKi8KK2ludAorcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqZmlsZV9hY3Rpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmQpCisjdW5kZWYgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlCit7CisgIGludCBtYXhmZCA9IF9fc3lzY29uZiAoX1NDX09QRU5fTUFYKTsKKworICAvKiBUZXN0IGZvciB0aGUgdmFsaWRpdHkgb2YgdGhlIGZpbGUgZGVzY3JpcHRvci4gICovCisgIGlmIChmZCA8IDAgfHwgZmQgPj0gbWF4ZmQpCisgICAgcmV0dXJuIEVCQURGOworCisjaWYgSEFWRV9XT1JLSU5HX1BPU0lYX1NQQVdOCisgIHJldHVybiBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2UgKGZpbGVfYWN0aW9ucywgZmQpOworI2Vsc2UKKyAgLyogQWxsb2NhdGUgbW9yZSBtZW1vcnkgaWYgbmVlZGVkLiAgKi8KKyAgaWYgKGZpbGVfYWN0aW9ucy0+X3VzZWQgPT0gZmlsZV9hY3Rpb25zLT5fYWxsb2NhdGVkCisgICAgICAmJiBfX3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19yZWFsbG9jIChmaWxlX2FjdGlvbnMpICE9IDApCisgICAgLyogVGhpcyBjYW4gb25seSBtZWFuIHdlIHJhbiBvdXQgb2YgbWVtb3J5LiAgKi8KKyAgICByZXR1cm4gRU5PTUVNOworCisgIHsKKyAgICBzdHJ1Y3QgX19zcGF3bl9hY3Rpb24gKnJlYzsKKworICAgIC8qIEFkZCB0aGUgbmV3IHZhbHVlLiAgKi8KKyAgICByZWMgPSAmZmlsZV9hY3Rpb25zLT5fYWN0aW9uc1tmaWxlX2FjdGlvbnMtPl91c2VkXTsKKyAgICByZWMtPnRhZyA9IHNwYXduX2RvX2Nsb3NlOworICAgIHJlYy0+YWN0aW9uLm9wZW5fYWN0aW9uLmZkID0gZmQ7CisKKyAgICAvKiBBY2NvdW50IGZvciB0aGUgbmV3IGVudHJ5LiAgKi8KKyAgICArK2ZpbGVfYWN0aW9ucy0+X3VzZWQ7CisKKyAgICByZXR1cm4gMDsKKyAgfQorI2VuZGlmCit9CmRpZmYgLS1naXQgYS9saWIvc3Bhd25fZmFjdGlvbl9hZGRkdXAyLmMgYi9saWIvc3Bhd25fZmFjdGlvbl9hZGRkdXAyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhkYWE1MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9zcGF3bl9mYWN0aW9uX2FkZGR1cDIuYwpAQCAtMCwwICsxLDcwIEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgPHNwYXduLmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaWYgIV9MSUJDCisjIGRlZmluZSBfX3N5c2NvbmYob3Blbl9tYXgpIGdldGR0YWJsZXNpemUgKCkKKyNlbmRpZgorCisjaWYgIUhBVkVfV09SS0lOR19QT1NJWF9TUEFXTgorIyBpbmNsdWRlICJzcGF3bl9pbnQuaCIKKyNlbmRpZgorCisvKiBBZGQgYW4gYWN0aW9uIHRvIEZJTEUtQUNUSU9OUyB3aGljaCB0ZWxscyB0aGUgaW1wbGVtZW50YXRpb24gdG8gY2FsbAorICAgJ2R1cDInIGZvciB0aGUgZ2l2ZW4gZmlsZSBkZXNjcmlwdG9ycyBkdXJpbmcgdGhlICdzcGF3bicgY2FsbC4gICovCitpbnQKK3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqZmlsZV9hY3Rpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmZCwgaW50IG5ld2ZkKQorI3VuZGVmIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyCit7CisgIGludCBtYXhmZCA9IF9fc3lzY29uZiAoX1NDX09QRU5fTUFYKTsKKworICAvKiBUZXN0IGZvciB0aGUgdmFsaWRpdHkgb2YgdGhlIGZpbGUgZGVzY3JpcHRvci4gICovCisgIGlmIChmZCA8IDAgfHwgbmV3ZmQgPCAwIHx8IGZkID49IG1heGZkIHx8IG5ld2ZkID49IG1heGZkKQorICAgIHJldHVybiBFQkFERjsKKworI2lmIEhBVkVfV09SS0lOR19QT1NJWF9TUEFXTgorICByZXR1cm4gcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDIgKGZpbGVfYWN0aW9ucywgZmQsIG5ld2ZkKTsKKyNlbHNlCisgIC8qIEFsbG9jYXRlIG1vcmUgbWVtb3J5IGlmIG5lZWRlZC4gICovCisgIGlmIChmaWxlX2FjdGlvbnMtPl91c2VkID09IGZpbGVfYWN0aW9ucy0+X2FsbG9jYXRlZAorICAgICAgJiYgX19wb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfcmVhbGxvYyAoZmlsZV9hY3Rpb25zKSAhPSAwKQorICAgIC8qIFRoaXMgY2FuIG9ubHkgbWVhbiB3ZSByYW4gb3V0IG9mIG1lbW9yeS4gICovCisgICAgcmV0dXJuIEVOT01FTTsKKworICB7CisgICAgc3RydWN0IF9fc3Bhd25fYWN0aW9uICpyZWM7CisKKyAgICAvKiBBZGQgdGhlIG5ldyB2YWx1ZS4gICovCisgICAgcmVjID0gJmZpbGVfYWN0aW9ucy0+X2FjdGlvbnNbZmlsZV9hY3Rpb25zLT5fdXNlZF07CisgICAgcmVjLT50YWcgPSBzcGF3bl9kb19kdXAyOworICAgIHJlYy0+YWN0aW9uLmR1cDJfYWN0aW9uLmZkID0gZmQ7CisgICAgcmVjLT5hY3Rpb24uZHVwMl9hY3Rpb24ubmV3ZmQgPSBuZXdmZDsKKworICAgIC8qIEFjY291bnQgZm9yIHRoZSBuZXcgZW50cnkuICAqLworICAgICsrZmlsZV9hY3Rpb25zLT5fdXNlZDsKKworICAgIHJldHVybiAwOworICB9CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2xpYi9zcGF3bl9mYWN0aW9uX2FkZG9wZW4uYyBiL2xpYi9zcGF3bl9mYWN0aW9uX2FkZG9wZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTNmYzJjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3NwYXduX2ZhY3Rpb25fYWRkb3Blbi5jCkBAIC0wLDAgKzEsNzMgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMCwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaW5jbHVkZSA8c3Bhd24uaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpZiAhX0xJQkMKKyMgZGVmaW5lIF9fc3lzY29uZihvcGVuX21heCkgZ2V0ZHRhYmxlc2l6ZSAoKQorI2VuZGlmCisKKyNpZiAhSEFWRV9XT1JLSU5HX1BPU0lYX1NQQVdOCisjIGluY2x1ZGUgInNwYXduX2ludC5oIgorI2VuZGlmCisKKy8qIEFkZCBhbiBhY3Rpb24gdG8gRklMRS1BQ1RJT05TIHdoaWNoIHRlbGxzIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBjYWxsCisgICAnb3BlbicgZm9yIHRoZSBnaXZlbiBmaWxlIGR1cmluZyB0aGUgJ3NwYXduJyBjYWxsLiAgKi8KK2ludAorcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW4gKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpmaWxlX2FjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZkLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgb2ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV90IG1vZGUpCisjdW5kZWYgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW4KK3sKKyAgaW50IG1heGZkID0gX19zeXNjb25mIChfU0NfT1BFTl9NQVgpOworCisgIC8qIFRlc3QgZm9yIHRoZSB2YWxpZGl0eSBvZiB0aGUgZmlsZSBkZXNjcmlwdG9yLiAgKi8KKyAgaWYgKGZkIDwgMCB8fCBmZCA+PSBtYXhmZCkKKyAgICByZXR1cm4gRUJBREY7CisKKyNpZiBIQVZFX1dPUktJTkdfUE9TSVhfU1BBV04KKyAgcmV0dXJuIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuIChmaWxlX2FjdGlvbnMsIGZkLCBwYXRoLCBvZmxhZywgbW9kZSk7CisjZWxzZQorICAvKiBBbGxvY2F0ZSBtb3JlIG1lbW9yeSBpZiBuZWVkZWQuICAqLworICBpZiAoZmlsZV9hY3Rpb25zLT5fdXNlZCA9PSBmaWxlX2FjdGlvbnMtPl9hbGxvY2F0ZWQKKyAgICAgICYmIF9fcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3JlYWxsb2MgKGZpbGVfYWN0aW9ucykgIT0gMCkKKyAgICAvKiBUaGlzIGNhbiBvbmx5IG1lYW4gd2UgcmFuIG91dCBvZiBtZW1vcnkuICAqLworICAgIHJldHVybiBFTk9NRU07CisKKyAgeworICAgIHN0cnVjdCBfX3NwYXduX2FjdGlvbiAqcmVjOworCisgICAgLyogQWRkIHRoZSBuZXcgdmFsdWUuICAqLworICAgIHJlYyA9ICZmaWxlX2FjdGlvbnMtPl9hY3Rpb25zW2ZpbGVfYWN0aW9ucy0+X3VzZWRdOworICAgIHJlYy0+dGFnID0gc3Bhd25fZG9fb3BlbjsKKyAgICByZWMtPmFjdGlvbi5vcGVuX2FjdGlvbi5mZCA9IGZkOworICAgIHJlYy0+YWN0aW9uLm9wZW5fYWN0aW9uLnBhdGggPSBwYXRoOworICAgIHJlYy0+YWN0aW9uLm9wZW5fYWN0aW9uLm9mbGFnID0gb2ZsYWc7CisgICAgcmVjLT5hY3Rpb24ub3Blbl9hY3Rpb24ubW9kZSA9IG1vZGU7CisKKyAgICAvKiBBY2NvdW50IGZvciB0aGUgbmV3IGVudHJ5LiAgKi8KKyAgICArK2ZpbGVfYWN0aW9ucy0+X3VzZWQ7CisKKyAgICByZXR1cm4gMDsKKyAgfQorI2VuZGlmCit9CmRpZmYgLS1naXQgYS9saWIvc3Bhd25fZmFjdGlvbl9kZXN0cm95LmMgYi9saWIvc3Bhd25fZmFjdGlvbl9kZXN0cm95LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc0ZDNkOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9zcGF3bl9mYWN0aW9uX2Rlc3Ryb3kuYwpAQCAtMCwwICsxLDMxIEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgPHNwYXduLmg+CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyogSW5pdGlhbGl6ZSBkYXRhIHN0cnVjdHVyZSBmb3IgZmlsZSBhdHRyaWJ1dGUgZm9yICdzcGF3bicgY2FsbC4gICovCitpbnQKK3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19kZXN0cm95IChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqZmlsZV9hY3Rpb25zKQoreworICAvKiBGcmVlIHRoZSBtZW1vcnkgYWxsb2NhdGVkLiAgKi8KKyAgZnJlZSAoZmlsZV9hY3Rpb25zLT5fYWN0aW9ucyk7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliL3NwYXduX2ZhY3Rpb25faW5pdC5jIGIvbGliL3NwYXduX2ZhY3Rpb25faW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3M2M3ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc3Bhd25fZmFjdGlvbl9pbml0LmMKQEAgLTAsMCArMSw1NiBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlIDxzcGF3bi5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgInNwYXduX2ludC5oIgorCisKKy8qIEZ1bmN0aW9uIHVzZWQgdG8gaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIGFsbG9jYXRlZCBhcnJheS4gIFRoaXMKKyAgIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSAnYWRkJy1mdW5jdGlvbnMuICAqLworaW50CitfX3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19yZWFsbG9jIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqZmlsZV9hY3Rpb25zKQoreworICBpbnQgbmV3YWxsb2MgPSBmaWxlX2FjdGlvbnMtPl9hbGxvY2F0ZWQgKyA4OworICB2b2lkICpuZXdtZW0gPSByZWFsbG9jIChmaWxlX2FjdGlvbnMtPl9hY3Rpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdhbGxvYyAqIHNpemVvZiAoc3RydWN0IF9fc3Bhd25fYWN0aW9uKSk7CisKKyAgaWYgKG5ld21lbSA9PSBOVUxMKQorICAgIC8qIE5vdCBlbm91Z2ggbWVtb3J5LiAgKi8KKyAgICByZXR1cm4gRU5PTUVNOworCisgIGZpbGVfYWN0aW9ucy0+X2FjdGlvbnMgPSAoc3RydWN0IF9fc3Bhd25fYWN0aW9uICopIG5ld21lbTsKKyAgZmlsZV9hY3Rpb25zLT5fYWxsb2NhdGVkID0gbmV3YWxsb2M7CisKKyAgcmV0dXJuIDA7Cit9CisKKworLyogSW5pdGlhbGl6ZSBkYXRhIHN0cnVjdHVyZSBmb3IgZmlsZSBhdHRyaWJ1dGUgZm9yICdzcGF3bicgY2FsbC4gICovCitpbnQKK3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19pbml0IChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqZmlsZV9hY3Rpb25zKQoreworICAvKiBTaW1wbHkgY2xlYXIgYWxsIHRoZSBlbGVtZW50cy4gICovCisgIG1lbXNldCAoZmlsZV9hY3Rpb25zLCAnXDAnLCBzaXplb2YgKCpmaWxlX2FjdGlvbnMpKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWIvc3Bhd25faW50LmggYi9saWIvc3Bhd25faW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg1YzZmNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9zcGF3bl9pbnQuaApAQCAtMCwwICsxLDYyIEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKy8qIERhdGEgc3RydWN0dXJlIHRvIGNvbnRhaW4gdGhlIGFjdGlvbiBpbmZvcm1hdGlvbi4gICovCitzdHJ1Y3QgX19zcGF3bl9hY3Rpb24KK3sKKyAgZW51bQorICB7CisgICAgc3Bhd25fZG9fY2xvc2UsCisgICAgc3Bhd25fZG9fZHVwMiwKKyAgICBzcGF3bl9kb19vcGVuCisgIH0gdGFnOworCisgIHVuaW9uCisgIHsKKyAgICBzdHJ1Y3QKKyAgICB7CisgICAgICBpbnQgZmQ7CisgICAgfSBjbG9zZV9hY3Rpb247CisgICAgc3RydWN0CisgICAgeworICAgICAgaW50IGZkOworICAgICAgaW50IG5ld2ZkOworICAgIH0gZHVwMl9hY3Rpb247CisgICAgc3RydWN0CisgICAgeworICAgICAgaW50IGZkOworICAgICAgY29uc3QgY2hhciAqcGF0aDsKKyAgICAgIGludCBvZmxhZzsKKyAgICAgIG1vZGVfdCBtb2RlOworICAgIH0gb3Blbl9hY3Rpb247CisgIH0gYWN0aW9uOworfTsKKworI2lmICFfTElCQworIyBkZWZpbmUgX19wb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfcmVhbGxvYyBnbF9wb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfcmVhbGxvYworI2VuZGlmCitleHRlcm4gaW50IF9fcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3JlYWxsb2MgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9hY3Rpb25zKTsKKworI2lmICFfTElCQworIyBkZWZpbmUgX19zcGF3bmkgZ2xfcG9zaXhfc3Bhd25faW50ZXJuYWwKKyNlbmRpZgorZXh0ZXJuIGludCBfX3NwYXduaSAocGlkX3QgKnBpZCwgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpmaWxlX2FjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqYXR0cnAsIGNoYXIgKmNvbnN0IGFyZ3ZbXSwKKyAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNvbnN0IGVudnBbXSwgaW50IHVzZV9wYXRoKTsKZGlmZiAtLWdpdCBhL2xpYi9zcGF3bmF0dHJfZGVzdHJveS5jIGIvbGliL3NwYXduYXR0cl9kZXN0cm95LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAyNWVlNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9zcGF3bmF0dHJfZGVzdHJveS5jCkBAIC0wLDAgKzEsMjggQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMCwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaW5jbHVkZSA8c3Bhd24uaD4KKworLyogSW5pdGlhbGl6ZSBkYXRhIHN0cnVjdHVyZSBmb3IgZmlsZSBhdHRyaWJ1dGUgZm9yICdzcGF3bicgY2FsbC4gICovCitpbnQKK3Bvc2l4X3NwYXduYXR0cl9kZXN0cm95IChwb3NpeF9zcGF3bmF0dHJfdCAqYXR0cikKK3sKKyAgLyogTm90aGluZyB0byBkbyBpbiB0aGUgbW9tZW50LiAgKi8KKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWIvc3Bhd25hdHRyX2luaXQuYyBiL2xpYi9zcGF3bmF0dHJfaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NTFiNGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc3Bhd25hdHRyX2luaXQuYwpAQCAtMCwwICsxLDMzIEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgPHNwYXduLmg+CisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogSW5pdGlhbGl6ZSBkYXRhIHN0cnVjdHVyZSBmb3IgZmlsZSBhdHRyaWJ1dGUgZm9yICdzcGF3bicgY2FsbC4gICovCitpbnQKK3Bvc2l4X3NwYXduYXR0cl9pbml0IChwb3NpeF9zcGF3bmF0dHJfdCAqYXR0cikKK3sKKyAgLyogQWxsIGVsZW1lbnRzIGhhdmUgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gdGhlIGRlZmF1bHQgdmFsdWVzIHdoaWNoCisgICAgIGlzIGdlbmVyYWxseSB6ZXJvLiAgKi8KKyAgbWVtc2V0IChhdHRyLCAnXDAnLCBzaXplb2YgKCphdHRyKSk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWIvc3Bhd25hdHRyX3NldGZsYWdzLmMgYi9saWIvc3Bhd25hdHRyX3NldGZsYWdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRlZjQwYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9zcGF3bmF0dHJfc2V0ZmxhZ3MuYwpAQCAtMCwwICsxLDQ1IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDQsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgPHNwYXduLmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIEFMTF9GTEFHUyAoUE9TSVhfU1BBV05fUkVTRVRJRFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgfCBQT1NJWF9TUEFXTl9TRVRQR1JPVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgfCBQT1NJWF9TUEFXTl9TRVRTSUdERUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgfCBQT1NJWF9TUEFXTl9TRVRTSUdNQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgfCBQT1NJWF9TUEFXTl9TRVRTQ0hFRFBBUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgfCBQT1NJWF9TUEFXTl9TRVRTQ0hFRFVMRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgfCBQT1NJWF9TUEFXTl9VU0VWRk9SSykKKworLyogU3RvcmUgZmxhZ3MgaW4gdGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUuICAqLworaW50Citwb3NpeF9zcGF3bmF0dHJfc2V0ZmxhZ3MgKHBvc2l4X3NwYXduYXR0cl90ICphdHRyLCBzaG9ydCBpbnQgZmxhZ3MpCit7CisgIC8qIENoZWNrIG5vIGludmFsaWQgYml0cyBhcmUgc2V0LiAgKi8KKyAgaWYgKGZsYWdzICYgfkFMTF9GTEFHUykKKyAgICByZXR1cm4gRUlOVkFMOworCisgIC8qIFN0b3JlIHRoZSBmbGFnIHdvcmQuICAqLworICBhdHRyLT5fZmxhZ3MgPSBmbGFnczsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYi9zcGF3bmF0dHJfc2V0c2lnbWFzay5jIGIvbGliL3NwYXduYXR0cl9zZXRzaWdtYXNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y4ZTYxYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9zcGF3bmF0dHJfc2V0c2lnbWFzay5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMCwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaW5jbHVkZSA8c3Bhd24uaD4KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKiBTZXQgc2lnbmFsIG1hc2sgZm9yIHRoZSBuZXcgcHJvY2VzcyBpbiBBVFRSIHRvIFNJR01BU0suICAqLworaW50Citwb3NpeF9zcGF3bmF0dHJfc2V0c2lnbWFzayAocG9zaXhfc3Bhd25hdHRyX3QgKmF0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnc2V0X3QgKnNpZ21hc2spCit7CisgIC8qIENvcHkgdGhlIHNpZ3NldF90IGRhdGEgdG8gdGhlIHVzZXIgYnVmZmVyLiAgKi8KKyAgbWVtY3B5ICgmYXR0ci0+X3NzLCBzaWdtYXNrLCBzaXplb2YgKHNpZ3NldF90KSk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWIvc3Bhd25pLmMgYi9saWIvc3Bhd25pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ5YTRiOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9zcGF3bmkuYwpAQCAtMCwwICsxLDM3NCBAQAorLyogR3V0cyBvZiBQT1NJWCBzcGF3biBpbnRlcmZhY2UuICBHZW5lcmljIFBPU0lYLjEgdmVyc2lvbi4KKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA2LCAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlIDxzcGF3bi5oPgorI2luY2x1ZGUgInNwYXduX2ludC5oIgorCisjaW5jbHVkZSA8YWxsb2NhLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaWZuZGVmIE9fTEFSR0VGSUxFCisjIGRlZmluZSBPX0xBUkdFRklMRSAwCisjZW5kaWYKKworI2lmIF9MSUJDIHx8IEhBVkVfUEFUSFNfSAorIyBpbmNsdWRlIDxwYXRocy5oPgorI2Vsc2UKKyMgZGVmaW5lIF9QQVRIX0JTSEVMTCAiL2Jpbi9zaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpZiBfTElCQworIyBpbmNsdWRlIDxub3QtY2FuY2VsLmg+CisjZWxzZQorIyBkZWZpbmUgY2xvc2Vfbm90X2NhbmNlbCBjbG9zZQorIyBkZWZpbmUgb3Blbl9ub3RfY2FuY2VsIG9wZW4KKyNlbmRpZgorCisjaWYgX0xJQkMKKyMgaW5jbHVkZSA8bG9jYWwtc2V0eGlkLmg+CisjZWxzZQorIyBpZiAhSEFWRV9TRVRFVUlECisjICBkZWZpbmUgc2V0ZXVpZChpZCkgc2V0cmVzdWlkICgtMSwgaWQsIC0xKQorIyBlbmRpZgorIyBpZiAhSEFWRV9TRVRFR0lECisjICBkZWZpbmUgc2V0ZWdpZChpZCkgc2V0cmVzZ2lkICgtMSwgaWQsIC0xKQorIyBlbmRpZgorIyBkZWZpbmUgbG9jYWxfc2V0ZXVpZChpZCkgc2V0ZXVpZCAoaWQpCisjIGRlZmluZSBsb2NhbF9zZXRlZ2lkKGlkKSBzZXRlZ2lkIChpZCkKKyNlbmRpZgorCisjaWYgX0xJQkMKKyMgZGVmaW5lIGFsbG9jYSBfX2FsbG9jYQorIyBkZWZpbmUgZXhlY3ZlIF9fZXhlY3ZlCisjIGRlZmluZSBkdXAyIF9fZHVwMgorIyBkZWZpbmUgZm9yayBfX2ZvcmsKKyMgZGVmaW5lIGdldGdpZCBfX2dldGdpZAorIyBkZWZpbmUgZ2V0dWlkIF9fZ2V0dWlkCisjIGRlZmluZSBzY2hlZF9zZXRwYXJhbSBfX3NjaGVkX3NldHBhcmFtCisjIGRlZmluZSBzY2hlZF9zZXRzY2hlZHVsZXIgX19zY2hlZF9zZXRzY2hlZHVsZXIKKyMgZGVmaW5lIHNldHBnaWQgX19zZXRwZ2lkCisjIGRlZmluZSBzaWdhY3Rpb24gX19zaWdhY3Rpb24KKyMgZGVmaW5lIHNpZ2lzbWVtYmVyIF9fc2lnaXNtZW1iZXIKKyMgZGVmaW5lIHNpZ3Byb2NtYXNrIF9fc2lncHJvY21hc2sKKyMgZGVmaW5lIHN0cmNocm51bCBfX3N0cmNocm51bAorIyBkZWZpbmUgdmZvcmsgX192Zm9yaworI2Vsc2UKKyMgdW5kZWYgaW50ZXJuYWxfZnVuY3Rpb24KKyMgZGVmaW5lIGludGVybmFsX2Z1bmN0aW9uIC8qIGVtcHR5ICovCisjZW5kaWYKKworCisvKiBUaGUgVW5peCBzdGFuZGFyZCBjb250YWlucyBhIGxvbmcgZXhwbGFuYXRpb24gb2YgdGhlIHdheSB0byBzaWduYWwKKyAgIGFuIGVycm9yIGFmdGVyIHRoZSBmb3JrKCkgd2FzIHN1Y2Nlc3NmdWwuICBTaW5jZSBubyBuZXcgd2FpdCBzdGF0dXMKKyAgIHdhcyB3YW50ZWQgdGhlcmUgaXMgbm8gd2F5IHRvIHNpZ25hbCBhbiBlcnJvciB1c2luZyBvbmUgb2YgdGhlCisgICBhdmFpbGFibGUgbWV0aG9kcy4gIFRoZSBjb21taXR0ZWUgY2hvc2UgdG8gc2lnbmFsIGFuIGVycm9yIGJ5IGEKKyAgIG5vcm1hbCBwcm9ncmFtIGV4aXQgd2l0aCB0aGUgZXhpdCBjb2RlIDEyNy4gICovCisjZGVmaW5lIFNQQVdOX0VSUk9SICAgICAxMjcKKworCisjaWYgKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXworCisvKiBOYXRpdmUgV2luZG93cyBBUEkuICAqLworaW50CitfX3NwYXduaSAocGlkX3QgKnBpZCwgY29uc3QgY2hhciAqZmlsZSwKKyAgICAgICAgICBjb25zdCBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqZmlsZV9hY3Rpb25zLAorICAgICAgICAgIGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICphdHRycCwgY2hhciAqY29uc3QgYXJndltdLAorICAgICAgICAgIGNoYXIgKmNvbnN0IGVudnBbXSwgaW50IHVzZV9wYXRoKQoreworICAvKiBOb3QgeWV0IGltcGxlbWVudGVkLiAgKi8KKyAgcmV0dXJuIEVOT1NZUzsKK30KKworI2Vsc2UKKworCisvKiBUaGUgZmlsZSBpcyBhY2Nlc3NpYmxlIGJ1dCBpdCBpcyBub3QgYW4gZXhlY3V0YWJsZSBmaWxlLiAgSW52b2tlCisgICB0aGUgc2hlbGwgdG8gaW50ZXJwcmV0IGl0IGFzIGEgc2NyaXB0LiAgKi8KK3N0YXRpYyB2b2lkCitpbnRlcm5hbF9mdW5jdGlvbgorc2NyaXB0X2V4ZWN1dGUgKGNvbnN0IGNoYXIgKmZpbGUsIGNoYXIgKmNvbnN0IGFyZ3ZbXSwgY2hhciAqY29uc3QgZW52cFtdKQoreworICAvKiBDb3VudCB0aGUgYXJndW1lbnRzLiAgKi8KKyAgaW50IGFyZ2MgPSAwOworICB3aGlsZSAoYXJndlthcmdjKytdKQorICAgIDsKKworICAvKiBDb25zdHJ1Y3QgYW4gYXJndW1lbnQgbGlzdCBmb3IgdGhlIHNoZWxsLiAgKi8KKyAgeworICAgIGNoYXIgKipuZXdfYXJndiA9IChjaGFyICoqKSBhbGxvY2EgKChhcmdjICsgMSkgKiBzaXplb2YgKGNoYXIgKikpOworICAgIG5ld19hcmd2WzBdID0gKGNoYXIgKikgX1BBVEhfQlNIRUxMOworICAgIG5ld19hcmd2WzFdID0gKGNoYXIgKikgZmlsZTsKKyAgICB3aGlsZSAoYXJnYyA+IDEpCisgICAgICB7CisgICAgICAgIG5ld19hcmd2W2FyZ2NdID0gYXJndlthcmdjIC0gMV07CisgICAgICAgIC0tYXJnYzsKKyAgICAgIH0KKworICAgIC8qIEV4ZWN1dGUgdGhlIHNoZWxsLiAgKi8KKyAgICBleGVjdmUgKG5ld19hcmd2WzBdLCBuZXdfYXJndiwgZW52cCk7CisgIH0KK30KKworCisvKiBTcGF3biBhIG5ldyBwcm9jZXNzIGV4ZWN1dGluZyBQQVRIIHdpdGggdGhlIGF0dHJpYnV0ZXMgZGVzY3JpYmVzIGluICpBVFRSUC4KKyAgIEJlZm9yZSBydW5uaW5nIHRoZSBwcm9jZXNzIHBlcmZvcm0gdGhlIGFjdGlvbnMgZGVzY3JpYmVkIGluIEZJTEUtQUNUSU9OUy4gKi8KK2ludAorX19zcGF3bmkgKHBpZF90ICpwaWQsIGNvbnN0IGNoYXIgKmZpbGUsCisgICAgICAgICAgY29uc3QgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKmZpbGVfYWN0aW9ucywKKyAgICAgICAgICBjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqYXR0cnAsIGNoYXIgKmNvbnN0IGFyZ3ZbXSwKKyAgICAgICAgICBjaGFyICpjb25zdCBlbnZwW10sIGludCB1c2VfcGF0aCkKK3sKKyAgcGlkX3QgbmV3X3BpZDsKKyAgY2hhciAqcGF0aCwgKnAsICpuYW1lOworICBzaXplX3QgbGVuOworICBzaXplX3QgcGF0aGxlbjsKKworICAvKiBEbyB0aGlzIG9uY2UuICAqLworICBzaG9ydCBpbnQgZmxhZ3MgPSBhdHRycCA9PSBOVUxMID8gMCA6IGF0dHJwLT5fZmxhZ3M7CisKKyAgLyogQXZvaWQgZ2NjIHdhcm5pbmcKKyAgICAgICAidmFyaWFibGUgJ2ZsYWdzJyBtaWdodCBiZSBjbG9iYmVyZWQgYnkgJ2xvbmdqbXAnIG9yICd2Zm9yayciICAqLworICAodm9pZCkgJmZsYWdzOworCisgIC8qIEdlbmVyYXRlIHRoZSBuZXcgcHJvY2Vzcy4gICovCisjaWYgSEFWRV9WRk9SSworICBpZiAoKGZsYWdzICYgUE9TSVhfU1BBV05fVVNFVkZPUkspICE9IDAKKyAgICAgIC8qIElmIG5vIG1ham9yIHdvcmsgaXMgZG9uZSwgYWxsb3cgdXNpbmcgdmZvcmsuICBOb3RlIHRoYXQgd2UKKyAgICAgICAgIG1pZ2h0IHBlcmZvcm0gdGhlIHBhdGggc2VhcmNoaW5nLiAgQnV0IHRoaXMgd291bGQgYmUgZG9uZSBieQorICAgICAgICAgYSBjYWxsIHRvIGV4ZWN2cCgpLCB0b28sIGFuZCBzdWNoIGEgY2FsbCBtdXN0IGJlIE9LIGFjY29yZGluZworICAgICAgICAgdG8gUE9TSVguICAqLworICAgICAgfHwgKChmbGFncyAmIChQT1NJWF9TUEFXTl9TRVRTSUdNQVNLIHwgUE9TSVhfU1BBV05fU0VUU0lHREVGCisgICAgICAgICAgICAgICAgICAgIHwgUE9TSVhfU1BBV05fU0VUU0NIRURQQVJBTSB8IFBPU0lYX1NQQVdOX1NFVFNDSEVEVUxFUgorICAgICAgICAgICAgICAgICAgICB8IFBPU0lYX1NQQVdOX1NFVFBHUk9VUCB8IFBPU0lYX1NQQVdOX1JFU0VUSURTKSkgPT0gMAorICAgICAgICAgICYmIGZpbGVfYWN0aW9ucyA9PSBOVUxMKSkKKyAgICBuZXdfcGlkID0gdmZvcmsgKCk7CisgIGVsc2UKKyNlbmRpZgorICAgIG5ld19waWQgPSBmb3JrICgpOworCisgIGlmIChuZXdfcGlkICE9IDApCisgICAgeworICAgICAgaWYgKG5ld19waWQgPCAwKQorICAgICAgICByZXR1cm4gZXJybm87CisKKyAgICAgIC8qIFRoZSBjYWxsIHdhcyBzdWNjZXNzZnVsLiAgU3RvcmUgdGhlIFBJRCBpZiBuZWNlc3NhcnkuICAqLworICAgICAgaWYgKHBpZCAhPSBOVUxMKQorICAgICAgICAqcGlkID0gbmV3X3BpZDsKKworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIC8qIFNldCBzaWduYWwgbWFzay4gICovCisgIGlmICgoZmxhZ3MgJiBQT1NJWF9TUEFXTl9TRVRTSUdNQVNLKSAhPSAwCisgICAgICAmJiBzaWdwcm9jbWFzayAoU0lHX1NFVE1BU0ssICZhdHRycC0+X3NzLCBOVUxMKSAhPSAwKQorICAgIF9leGl0IChTUEFXTl9FUlJPUik7CisKKyAgLyogU2V0IHNpZ25hbCBkZWZhdWx0IGFjdGlvbi4gICovCisgIGlmICgoZmxhZ3MgJiBQT1NJWF9TUEFXTl9TRVRTSUdERUYpICE9IDApCisgICAgeworICAgICAgLyogV2UgaGF2ZSB0byBpdGVyYXRlIG92ZXIgYWxsIHNpZ25hbHMuICBUaGlzIGNvdWxkIHBvc3NpYmx5IGJlCisgICAgICAgICBkb25lIGJldHRlciBidXQgaXQgcmVxdWlyZXMgc3lzdGVtIHNwZWNpZmljIHNvbHV0aW9ucyBzaW5jZQorICAgICAgICAgdGhlIHNpZ3NldF90IGRhdGEgdHlwZSBjYW4gYmUgdmVyeSBkaWZmZXJlbnQgb24gZGlmZmVyZW50CisgICAgICAgICBhcmNoaXRlY3R1cmVzLiAgKi8KKyAgICAgIGludCBzaWc7CisgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIHNhOworCisgICAgICBtZW1zZXQgKCZzYSwgJ1wwJywgc2l6ZW9mIChzYSkpOworICAgICAgc2Euc2FfaGFuZGxlciA9IFNJR19ERkw7CisKKyAgICAgIGZvciAoc2lnID0gMTsgc2lnIDw9IE5TSUc7ICsrc2lnKQorICAgICAgICBpZiAoc2lnaXNtZW1iZXIgKCZhdHRycC0+X3NkLCBzaWcpICE9IDAKKyAgICAgICAgICAgICYmIHNpZ2FjdGlvbiAoc2lnLCAmc2EsIE5VTEwpICE9IDApCisgICAgICAgICAgX2V4aXQgKFNQQVdOX0VSUk9SKTsKKworICAgIH0KKworI2lmIChfTElCQyA/IGRlZmluZWQgX1BPU0lYX1BSSU9SSVRZX1NDSEVEVUxJTkcgOiBIQVZFX1NDSEVEX1NFVFBBUkFNICYmIEhBVkVfU0NIRURfU0VUU0NIRURVTEVSKQorICAvKiBTZXQgdGhlIHNjaGVkdWxpbmcgYWxnb3JpdGhtIGFuZCBwYXJhbWV0ZXJzLiAgKi8KKyAgaWYgKChmbGFncyAmIChQT1NJWF9TUEFXTl9TRVRTQ0hFRFBBUkFNIHwgUE9TSVhfU1BBV05fU0VUU0NIRURVTEVSKSkKKyAgICAgID09IFBPU0lYX1NQQVdOX1NFVFNDSEVEUEFSQU0pCisgICAgeworICAgICAgaWYgKHNjaGVkX3NldHBhcmFtICgwLCAmYXR0cnAtPl9zcCkgPT0gLTEpCisgICAgICAgIF9leGl0IChTUEFXTl9FUlJPUik7CisgICAgfQorICBlbHNlIGlmICgoZmxhZ3MgJiBQT1NJWF9TUEFXTl9TRVRTQ0hFRFVMRVIpICE9IDApCisgICAgeworICAgICAgaWYgKHNjaGVkX3NldHNjaGVkdWxlciAoMCwgYXR0cnAtPl9wb2xpY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxhZ3MgJiBQT1NJWF9TUEFXTl9TRVRTQ0hFRFBBUkFNKSAhPSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICZhdHRycC0+X3NwIDogTlVMTCkgPT0gLTEpCisgICAgICAgIF9leGl0IChTUEFXTl9FUlJPUik7CisgICAgfQorI2VuZGlmCisKKyAgLyogU2V0IHRoZSBwcm9jZXNzIGdyb3VwIElELiAgKi8KKyAgaWYgKChmbGFncyAmIFBPU0lYX1NQQVdOX1NFVFBHUk9VUCkgIT0gMAorICAgICAgJiYgc2V0cGdpZCAoMCwgYXR0cnAtPl9wZ3JwKSAhPSAwKQorICAgIF9leGl0IChTUEFXTl9FUlJPUik7CisKKyAgLyogU2V0IHRoZSBlZmZlY3RpdmUgdXNlciBhbmQgZ3JvdXAgSURzLiAgKi8KKyAgaWYgKChmbGFncyAmIFBPU0lYX1NQQVdOX1JFU0VUSURTKSAhPSAwCisgICAgICAmJiAobG9jYWxfc2V0ZXVpZCAoZ2V0dWlkICgpKSAhPSAwCisgICAgICAgICAgfHwgbG9jYWxfc2V0ZWdpZCAoZ2V0Z2lkICgpKSAhPSAwKSkKKyAgICBfZXhpdCAoU1BBV05fRVJST1IpOworCisgIC8qIEV4ZWN1dGUgdGhlIGZpbGUgYWN0aW9ucy4gICovCisgIGlmIChmaWxlX2FjdGlvbnMgIT0gTlVMTCkKKyAgICB7CisgICAgICBpbnQgY250OworCisgICAgICBmb3IgKGNudCA9IDA7IGNudCA8IGZpbGVfYWN0aW9ucy0+X3VzZWQ7ICsrY250KQorICAgICAgICB7CisgICAgICAgICAgc3RydWN0IF9fc3Bhd25fYWN0aW9uICphY3Rpb24gPSAmZmlsZV9hY3Rpb25zLT5fYWN0aW9uc1tjbnRdOworCisgICAgICAgICAgc3dpdGNoIChhY3Rpb24tPnRhZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2Ugc3Bhd25fZG9fY2xvc2U6CisgICAgICAgICAgICAgIGlmIChjbG9zZV9ub3RfY2FuY2VsIChhY3Rpb24tPmFjdGlvbi5jbG9zZV9hY3Rpb24uZmQpICE9IDApCisgICAgICAgICAgICAgICAgLyogU2lnbmFsIHRoZSBlcnJvci4gICovCisgICAgICAgICAgICAgICAgX2V4aXQgKFNQQVdOX0VSUk9SKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2Ugc3Bhd25fZG9fb3BlbjoKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBuZXdfZmQgPSBvcGVuX25vdF9jYW5jZWwgKGFjdGlvbi0+YWN0aW9uLm9wZW5fYWN0aW9uLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLT5hY3Rpb24ub3Blbl9hY3Rpb24ub2ZsYWcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9fTEFSR0VGSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi0+YWN0aW9uLm9wZW5fYWN0aW9uLm1vZGUpOworCisgICAgICAgICAgICAgICAgaWYgKG5ld19mZCA9PSAtMSkKKyAgICAgICAgICAgICAgICAgIC8qIFRoZSAnb3BlbicgY2FsbCBmYWlsZWQuICAqLworICAgICAgICAgICAgICAgICAgX2V4aXQgKFNQQVdOX0VSUk9SKTsKKworICAgICAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGUgZGVzaXJlZCBmaWxlIGRlc2NyaXB0b3IgaXMgdXNlZC4gICovCisgICAgICAgICAgICAgICAgaWYgKG5ld19mZCAhPSBhY3Rpb24tPmFjdGlvbi5vcGVuX2FjdGlvbi5mZCkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGR1cDIgKG5ld19mZCwgYWN0aW9uLT5hY3Rpb24ub3Blbl9hY3Rpb24uZmQpCisgICAgICAgICAgICAgICAgICAgICAgICAhPSBhY3Rpb24tPmFjdGlvbi5vcGVuX2FjdGlvbi5mZCkKKyAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgJ2R1cDInIGNhbGwgZmFpbGVkLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICBfZXhpdCAoU1BBV05fRVJST1IpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChjbG9zZV9ub3RfY2FuY2VsIChuZXdfZmQpICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgLyogVGhlICdjbG9zZScgY2FsbCBmYWlsZWQuICAqLworICAgICAgICAgICAgICAgICAgICAgIF9leGl0IChTUEFXTl9FUlJPUik7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2Ugc3Bhd25fZG9fZHVwMjoKKyAgICAgICAgICAgICAgaWYgKGR1cDIgKGFjdGlvbi0+YWN0aW9uLmR1cDJfYWN0aW9uLmZkLAorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLT5hY3Rpb24uZHVwMl9hY3Rpb24ubmV3ZmQpCisgICAgICAgICAgICAgICAgICAhPSBhY3Rpb24tPmFjdGlvbi5kdXAyX2FjdGlvbi5uZXdmZCkKKyAgICAgICAgICAgICAgICAvKiBUaGUgJ2R1cDInIGNhbGwgZmFpbGVkLiAgKi8KKyAgICAgICAgICAgICAgICBfZXhpdCAoU1BBV05fRVJST1IpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICBpZiAoISB1c2VfcGF0aCB8fCBzdHJjaHIgKGZpbGUsICcvJykgIT0gTlVMTCkKKyAgICB7CisgICAgICAvKiBUaGUgRklMRSBwYXJhbWV0ZXIgaXMgYWN0dWFsbHkgYSBwYXRoLiAgKi8KKyAgICAgIGV4ZWN2ZSAoZmlsZSwgYXJndiwgZW52cCk7CisKKyAgICAgIGlmIChlcnJubyA9PSBFTk9FWEVDKQorICAgICAgICBzY3JpcHRfZXhlY3V0ZSAoZmlsZSwgYXJndiwgZW52cCk7CisKKyAgICAgIC8qIE9oLCBvaC4gICdleGVjdmUnIHJldHVybnMuICBUaGlzIGlzIGJhZC4gICovCisgICAgICBfZXhpdCAoU1BBV05fRVJST1IpOworICAgIH0KKworICAvKiBXZSBoYXZlIHRvIHNlYXJjaCBmb3IgRklMRSBvbiB0aGUgcGF0aC4gICovCisgIHBhdGggPSBnZXRlbnYgKCJQQVRIIik7CisgIGlmIChwYXRoID09IE5VTEwpCisgICAgeworI2lmIEhBVkVfQ09ORlNUUgorICAgICAgLyogVGhlcmUgaXMgbm8gJ1BBVEgnIGluIHRoZSBlbnZpcm9ubWVudC4KKyAgICAgICAgIFRoZSBkZWZhdWx0IHNlYXJjaCBwYXRoIGlzIHRoZSBjdXJyZW50IGRpcmVjdG9yeQorICAgICAgICAgZm9sbG93ZWQgYnkgdGhlIHBhdGggJ2NvbmZzdHInIHJldHVybnMgZm9yICdfQ1NfUEFUSCcuICAqLworICAgICAgbGVuID0gY29uZnN0ciAoX0NTX1BBVEgsIChjaGFyICopIE5VTEwsIDApOworICAgICAgcGF0aCA9IChjaGFyICopIGFsbG9jYSAoMSArIGxlbik7CisgICAgICBwYXRoWzBdID0gJzonOworICAgICAgKHZvaWQpIGNvbmZzdHIgKF9DU19QQVRILCBwYXRoICsgMSwgbGVuKTsKKyNlbHNlCisgICAgICAvKiBQcmV0ZW5kIHRoYXQgdGhlIFBBVEggY29udGFpbnMgb25seSB0aGUgY3VycmVudCBkaXJlY3RvcnkuICAqLworICAgICAgcGF0aCA9ICIiOworI2VuZGlmCisgICAgfQorCisgIGxlbiA9IHN0cmxlbiAoZmlsZSkgKyAxOworICBwYXRobGVuID0gc3RybGVuIChwYXRoKTsKKyAgbmFtZSA9IGFsbG9jYSAocGF0aGxlbiArIGxlbiArIDEpOworICAvKiBDb3B5IHRoZSBmaWxlIG5hbWUgYXQgdGhlIHRvcC4gICovCisgIG5hbWUgPSAoY2hhciAqKSBtZW1jcHkgKG5hbWUgKyBwYXRobGVuICsgMSwgZmlsZSwgbGVuKTsKKyAgLyogQW5kIGFkZCB0aGUgc2xhc2guICAqLworICAqLS1uYW1lID0gJy8nOworCisgIHAgPSBwYXRoOworICBkbworICAgIHsKKyAgICAgIGNoYXIgKnN0YXJ0cDsKKworICAgICAgcGF0aCA9IHA7CisgICAgICBwID0gc3RyY2hybnVsIChwYXRoLCAnOicpOworCisgICAgICBpZiAocCA9PSBwYXRoKQorICAgICAgICAvKiBUd28gYWRqYWNlbnQgY29sb25zLCBvciBhIGNvbG9uIGF0IHRoZSBiZWdpbm5pbmcgb3IgdGhlIGVuZAorICAgICAgICAgICBvZiAnUEFUSCcgbWVhbnMgdG8gc2VhcmNoIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gICovCisgICAgICAgIHN0YXJ0cCA9IG5hbWUgKyAxOworICAgICAgZWxzZQorICAgICAgICBzdGFydHAgPSAoY2hhciAqKSBtZW1jcHkgKG5hbWUgLSAocCAtIHBhdGgpLCBwYXRoLCBwIC0gcGF0aCk7CisKKyAgICAgIC8qIFRyeSB0byBleGVjdXRlIHRoaXMgbmFtZS4gIElmIGl0IHdvcmtzLCBleGVjdiB3aWxsIG5vdCByZXR1cm4uICAqLworICAgICAgZXhlY3ZlIChzdGFydHAsIGFyZ3YsIGVudnApOworCisgICAgICBpZiAoZXJybm8gPT0gRU5PRVhFQykKKyAgICAgICAgc2NyaXB0X2V4ZWN1dGUgKHN0YXJ0cCwgYXJndiwgZW52cCk7CisKKyAgICAgIHN3aXRjaCAoZXJybm8pCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBFQUNDRVM6CisgICAgICAgIGNhc2UgRU5PRU5UOgorICAgICAgICBjYXNlIEVTVEFMRToKKyAgICAgICAgY2FzZSBFTk9URElSOgorICAgICAgICAgIC8qIFRob3NlIGVycm9ycyBpbmRpY2F0ZSB0aGUgZmlsZSBpcyBtaXNzaW5nIG9yIG5vdCBleGVjdXRhYmxlCisgICAgICAgICAgICAgYnkgdXMsIGluIHdoaWNoIGNhc2Ugd2Ugd2FudCB0byBqdXN0IHRyeSB0aGUgbmV4dCBwYXRoCisgICAgICAgICAgICAgZGlyZWN0b3J5LiAgKi8KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIC8qIFNvbWUgb3RoZXIgZXJyb3IgbWVhbnMgd2UgZm91bmQgYW4gZXhlY3V0YWJsZSBmaWxlLCBidXQKKyAgICAgICAgICAgICBzb21ldGhpbmcgd2VudCB3cm9uZyBleGVjdXRpbmcgaXQ7IHJldHVybiB0aGUgZXJyb3IgdG8gb3VyCisgICAgICAgICAgICAgY2FsbGVyLiAgKi8KKyAgICAgICAgICBfZXhpdCAoU1BBV05fRVJST1IpOworICAgICAgICB9CisgICAgfQorICB3aGlsZSAoKnArKyAhPSAnXDAnKTsKKworICAvKiBSZXR1cm4gd2l0aCBhbiBlcnJvci4gICovCisgIF9leGl0IChTUEFXTl9FUlJPUik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL3NwYXducC5jIGIvbGliL3NwYXducC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NDkzZWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc3Bhd25wLmMKQEAgLTAsMCArMSwzMyBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlIDxzcGF3bi5oPgorCisjaW5jbHVkZSAic3Bhd25faW50LmgiCisKKy8qIFNwYXduIGEgbmV3IHByb2Nlc3MgZXhlY3V0aW5nIEZJTEUgd2l0aCB0aGUgYXR0cmlidXRlcyBkZXNjcmliZXMgaW4gKkFUVFJQLgorICAgQmVmb3JlIHJ1bm5pbmcgdGhlIHByb2Nlc3MgcGVyZm9ybSB0aGUgYWN0aW9ucyBkZXNjcmliZWQgaW4gRklMRS1BQ1RJT05TLiAqLworaW50Citwb3NpeF9zcGF3bnAgKHBpZF90ICpwaWQsIGNvbnN0IGNoYXIgKmZpbGUsCisgICAgICAgICAgICAgIGNvbnN0IHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpmaWxlX2FjdGlvbnMsCisgICAgICAgICAgICAgIGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICphdHRycCwgY2hhciAqY29uc3QgYXJndltdLAorICAgICAgICAgICAgICBjaGFyICpjb25zdCBlbnZwW10pCit7CisgIHJldHVybiBfX3NwYXduaSAocGlkLCBmaWxlLCBmaWxlX2FjdGlvbnMsIGF0dHJwLCBhcmd2LCBlbnZwLCAxKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9zcHJpbnRmLmMgYi9saWIvc3ByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4Yzk3NjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc3ByaW50Zi5jCkBAIC0wLDAgKzEsODAgQEAKKy8qIEZvcm1hdHRlZCBvdXRwdXQgdG8gc3RyaW5ncy4KKyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNi0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWYgMQorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgInZhc25wcmludGYuaCIKKworI2lmbmRlZiBTSVpFX01BWAorIyBkZWZpbmUgU0laRV9NQVggKChzaXplX3QpIC0xKQorI2VuZGlmCisKKy8qIFByaW50IGZvcm1hdHRlZCBvdXRwdXQgdG8gc3RyaW5nIFNUUi4KKyAgIFJldHVybiBzdHJpbmcgbGVuZ3RoIG9mIGZvcm1hdHRlZCBzdHJpbmcuICBPbiBlcnJvciwgcmV0dXJuIGEgbmVnYXRpdmUKKyAgIHZhbHVlLiAgKi8KK2ludAorc3ByaW50ZiAoY2hhciAqc3RyLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgY2hhciAqb3V0cHV0OworICBzaXplX3QgbGVuOworICBzaXplX3QgbGVuYnVmOworICB2YV9saXN0IGFyZ3M7CisKKyAgLyogdmFzbnByaW50ZiBmYWlscyB3aXRoIEVPVkVSRkxPVyB3aGVuIHRoZSBidWZmZXIgc2l6ZSBhcmd1bWVudCBpcyBsYXJnZXIKKyAgICAgdGhhbiBJTlRfTUFYIChpZiB0aGF0IGZpdHMgaW50byBhICdzaXplX3QnIGF0IGFsbCkuCisgICAgIEFsc28gbm90ZSB0aGF0IGdsaWJjJ3MgaWNvbnYgZmFpbHMgd2l0aCBFMkJJRyB3aGVuIHdlIHBhc3MgYSBsZW5ndGggdGhhdAorICAgICBpcyBzbyBsYXJnZSB0aGF0IHN0ciArIGxlbmJ1ZiB3cmFwcyBhcm91bmQsIGkuZS4KKyAgICAgKHVpbnRwdHJfdCkgKHN0ciArIGxlbmJ1ZikgPCAodWludHB0cl90KSBzdHIuCisgICAgIFRoZXJlZm9yZSBzZXQgbGVuYnVmID0gbWluIChTSVpFX01BWCwgSU5UX01BWCwgLSAodWludHB0cl90KSBzdHIgLSAxKS4gICovCisgIGxlbmJ1ZiA9IChTSVpFX01BWCA8IElOVF9NQVggPyBTSVpFX01BWCA6IElOVF9NQVgpOworICBpZiAobGVuYnVmID4gfiAodWludHB0cl90KSBzdHIpCisgICAgbGVuYnVmID0gfiAodWludHB0cl90KSBzdHI7CisKKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisgIG91dHB1dCA9IHZhc25wcmludGYgKHN0ciwgJmxlbmJ1ZiwgZm9ybWF0LCBhcmdzKTsKKyAgbGVuID0gbGVuYnVmOworICB2YV9lbmQgKGFyZ3MpOworCisgIGlmICghb3V0cHV0KQorICAgIHJldHVybiAtMTsKKworICBpZiAob3V0cHV0ICE9IHN0cikKKyAgICB7CisgICAgICAvKiBsZW4gaXMgbmVhciBTSVpFX01BWC4gICovCisgICAgICBmcmVlIChvdXRwdXQpOworICAgICAgZXJybm8gPSBFT1ZFUkZMT1c7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIGlmIChsZW4gPiBJTlRfTUFYKQorICAgIHsKKyAgICAgIGVycm5vID0gRU9WRVJGTE9XOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICByZXR1cm4gbGVuOworfQpkaWZmIC0tZ2l0IGEvbGliL3N0YXQuYyBiL2xpYi9zdGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBiY2I4OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9zdGF0LmMKQEAgLTAsMCArMSwxMzggQEAKKy8qIFdvcmsgYXJvdW5kIHBsYXRmb3JtIGJ1Z3MgaW4gc3RhdC4KKyAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiB3cml0dGVuIGJ5IEVyaWMgQmxha2UgKi8KKworLyogSWYgdGhlIHVzZXIncyBjb25maWcuaCBoYXBwZW5zIHRvIGluY2x1ZGUgPHN5cy9zdGF0Lmg+LCBsZXQgaXQgaW5jbHVkZSBvbmx5CisgICB0aGUgc3lzdGVtJ3MgPHN5cy9zdGF0Lmg+IGhlcmUsIHNvIHRoYXQgb3JpZ19zdGF0IGRvZXNuJ3QgcmVjdXJzZSB0bworICAgcnBsX3N0YXQuICAqLworI2RlZmluZSBfX25lZWRfc3lzdGVtX3N5c19zdGF0X2gKKyNpbmNsdWRlIDxjb25maWcuaD4KKworLyogR2V0IHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uIG9mIHN0YXQuICBJdCBtaWdodCBiZSBkZWZpbmVkIGFzIGEgbWFjcm8uICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjdW5kZWYgX19uZWVkX3N5c3RlbV9zeXNfc3RhdF9oCisKKyNpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCisjIGlmIF9HTF9XSU5ET1dTXzY0X0JJVF9TVF9TSVpFCisjICB1bmRlZiBzdGF0IC8qIGF2b2lkIHdhcm5pbmcgb24gbWluZ3c2NCB3aXRoIF9GSUxFX09GRlNFVF9CSVRTPTY0ICovCisjICBkZWZpbmUgc3RhdCBfc3RhdGk2NAorIyAgZGVmaW5lIFJFUExBQ0VfRlVOQ19TVEFUX0RJUiAxCisjICB1bmRlZiBSRVBMQUNFX0ZVTkNfU1RBVF9GSUxFCisjIGVsaWYgUkVQTEFDRV9GVU5DX1NUQVRfRklMRQorLyogbWluZ3c2NCBoYXMgYSBicm9rZW4gc3RhdCgpIGZ1bmN0aW9uLCBiYXNlZCBvbiBfc3RhdCgpLCBpbiBsaWJtaW5nd2V4LmEuCisgICBCeXBhc3MgaXQuICAqLworIyAgZGVmaW5lIHN0YXQgX3N0YXQKKyMgIGRlZmluZSBSRVBMQUNFX0ZVTkNfU1RBVF9ESVIgMQorIyAgdW5kZWYgUkVQTEFDRV9GVU5DX1NUQVRfRklMRQorIyBlbmRpZgorI2VuZGlmCisKK3N0YXRpYyBpbnQKK29yaWdfc3RhdCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIHN0cnVjdCBzdGF0ICpidWYpCit7CisgIHJldHVybiBzdGF0IChmaWxlbmFtZSwgYnVmKTsKK30KKworLyogU3BlY2lmaWNhdGlvbi4gICovCisvKiBXcml0ZSAic3lzL3N0YXQuaCIgaGVyZSwgbm90IDxzeXMvc3RhdC5oPiwgb3RoZXJ3aXNlIE9TRi8xIDUuMSBEVEsgY2MKKyAgIGVsaW1pbmF0ZXMgdGhpcyBpbmNsdWRlIGJlY2F1c2Ugb2YgdGhlIHByZWxpbWluYXJ5ICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICAgYWJvdmUuICAqLworI2luY2x1ZGUgInN5cy9zdGF0LmgiCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJkb3NuYW1lLmgiCisjaW5jbHVkZSAidmVyaWZ5LmgiCisKKyNpZiBSRVBMQUNFX0ZVTkNfU1RBVF9ESVIKKyMgaW5jbHVkZSAicGF0aG1heC5oIgorICAvKiBUaGUgb25seSBrbm93biBzeXN0ZW1zIHdoZXJlIFJFUExBQ0VfRlVOQ19TVEFUX0RJUiBpcyBuZWVkZWQgYWxzbworICAgICBoYXZlIGEgY29uc3RhbnQgUEFUSF9NQVguICAqLworIyBpZm5kZWYgUEFUSF9NQVgKKyMgIGVycm9yICJQbGVhc2UgcG9ydCB0aGlzIHJlcGxhY2VtZW50IHRvIHlvdXIgcGxhdGZvcm0iCisjIGVuZGlmCisjZW5kaWYKKworLyogU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgTkFNRSBpbnRvIFNULiAgV29yayBhcm91bmQgYnVncyB3aXRoCisgICB0cmFpbGluZyBzbGFzaGVzLiAgTWluZ3cgaGFzIG90aGVyIGJ1Z3MgKHN1Y2ggYXMgc3RfaW5vIGFsd2F5cworICAgYmVpbmcgMCBvbiBzdWNjZXNzKSB3aGljaCB0aGlzIHdyYXBwZXIgZG9lcyBub3Qgd29yayBhcm91bmQuICBCdXQKKyAgIGF0IGxlYXN0IHRoaXMgaW1wbGVtZW50YXRpb24gcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gZW11bGF0ZSBmY2hkaXIKKyAgIGNvcnJlY3RseS4gICovCisKK2ludAorcnBsX3N0YXQgKGNoYXIgY29uc3QgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCkKK3sKKyAgaW50IHJlc3VsdCA9IG9yaWdfc3RhdCAobmFtZSwgc3QpOworI2lmIFJFUExBQ0VfRlVOQ19TVEFUX0ZJTEUKKyAgLyogU29sYXJpcyA5IG1pc3Rha2VubHkgc3VjY2VlZHMgd2hlbiBnaXZlbiBhIG5vbi1kaXJlY3Rvcnkgd2l0aCBhCisgICAgIHRyYWlsaW5nIHNsYXNoLiAgKi8KKyAgaWYgKHJlc3VsdCA9PSAwICYmICFTX0lTRElSIChzdC0+c3RfbW9kZSkpCisgICAgeworICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAobmFtZSk7CisgICAgICBpZiAoSVNTTEFTSCAobmFtZVtsZW4gLSAxXSkpCisgICAgICAgIHsKKyAgICAgICAgICBlcnJubyA9IEVOT1RESVI7CisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIFJFUExBQ0VfRlVOQ19TVEFUX0ZJTEUgKi8KKyNpZiBSRVBMQUNFX0ZVTkNfU1RBVF9ESVIKKworICBpZiAocmVzdWx0ID09IC0xICYmIGVycm5vID09IEVOT0VOVCkKKyAgICB7CisgICAgICAvKiBEdWUgdG8gbWluZ3cncyBvZGRpdGllcywgdGhlcmUgYXJlIHNvbWUgZGlyZWN0b3JpZXMgKGxpa2UKKyAgICAgICAgIGM6XCkgd2hlcmUgc3RhdCgpIG9ubHkgc3VjY2VlZHMgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLCBhbmQKKyAgICAgICAgIG90aGVyIGRpcmVjdG9yaWVzIChsaWtlIGM6XHdpbmRvd3MpIHdoZXJlIHN0YXQoKSBvbmx5CisgICAgICAgICBzdWNjZWVkcyB3aXRob3V0IGEgdHJhaWxpbmcgc2xhc2guICBCdXQgd2Ugd2FudCB0aGUgdHdvIHRvIGJlCisgICAgICAgICBzeW5vbnltb3VzLCBzaW5jZSBjaGRpcigpIG1hbmFnZXMgZWl0aGVyIHN0eWxlLiAgTGlrZXdpc2UsIE1pbmd3IGFsc28KKyAgICAgICAgIHJlcG9ydHMgRU5PRU5UIGZvciBuYW1lcyBsb25nZXIgdGhhbiBQQVRIX01BWCwgd2hlbiB3ZSB3YW50CisgICAgICAgICBFTkFNRVRPT0xPTkcsIGFuZCBmb3Igc3RhdCgiZmlsZS8iKSwgd2hlbiB3ZSB3YW50IEVOT1RESVIuCisgICAgICAgICBGb3J0dW5hdGVseSwgbWluZ3cgUEFUSF9NQVggaXMgc21hbGwgZW5vdWdoIGZvciBzdGFjaworICAgICAgICAgYWxsb2NhdGlvbi4gICovCisgICAgICBjaGFyIGZpeGVkX25hbWVbUEFUSF9NQVggKyAxXSA9IHswfTsKKyAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKG5hbWUpOworICAgICAgYm9vbCBjaGVja19kaXIgPSBmYWxzZTsKKyAgICAgIHZlcmlmeSAoUEFUSF9NQVggPD0gNDA5Nik7CisgICAgICBpZiAoUEFUSF9NQVggPD0gbGVuKQorICAgICAgICBlcnJubyA9IEVOQU1FVE9PTE9ORzsKKyAgICAgIGVsc2UgaWYgKGxlbikKKyAgICAgICAgeworICAgICAgICAgIHN0cmNweSAoZml4ZWRfbmFtZSwgbmFtZSk7CisgICAgICAgICAgaWYgKElTU0xBU0ggKGZpeGVkX25hbWVbbGVuIC0gMV0pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjaGVja19kaXIgPSB0cnVlOworICAgICAgICAgICAgICB3aGlsZSAobGVuICYmIElTU0xBU0ggKGZpeGVkX25hbWVbbGVuIC0gMV0pKQorICAgICAgICAgICAgICAgIGZpeGVkX25hbWVbLS1sZW5dID0gJ1wwJzsKKyAgICAgICAgICAgICAgaWYgKCFsZW4pCisgICAgICAgICAgICAgICAgZml4ZWRfbmFtZVswXSA9ICcvJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBmaXhlZF9uYW1lW2xlbisrXSA9ICcvJzsKKyAgICAgICAgICByZXN1bHQgPSBvcmlnX3N0YXQgKGZpeGVkX25hbWUsIHN0KTsKKyAgICAgICAgICBpZiAocmVzdWx0ID09IDAgJiYgY2hlY2tfZGlyICYmICFTX0lTRElSIChzdC0+c3RfbW9kZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHJlc3VsdCA9IC0xOworICAgICAgICAgICAgICBlcnJubyA9IEVOT1RESVI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogUkVQTEFDRV9GVU5DX1NUQVRfRElSICovCisgIHJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9saWIvc3RkYm9vbC5pbi5oIGIvbGliL3N0ZGJvb2wuaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjhjYWVlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3N0ZGJvb2wuaW4uaApAQCAtMCwwICsxLDEzMiBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMsIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAxLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX0dMX1NUREJPT0xfSAorI2RlZmluZSBfR0xfU1REQk9PTF9ICisKKy8qIElTTyBDIDk5IDxzdGRib29sLmg+IGZvciBwbGF0Zm9ybXMgdGhhdCBsYWNrIGl0LiAgKi8KKworLyogVXNhZ2Ugc3VnZ2VzdGlvbnM6CisKKyAgIFByb2dyYW1zIHRoYXQgdXNlIDxzdGRib29sLmg+IHNob3VsZCBiZSBhd2FyZSBvZiBzb21lIGxpbWl0YXRpb25zCisgICBhbmQgc3RhbmRhcmRzIGNvbXBsaWFuY2UgaXNzdWVzLgorCisgICBTdGFuZGFyZHMgY29tcGxpYW5jZToKKworICAgICAgIC0gPHN0ZGJvb2wuaD4gbXVzdCBiZSAjaW5jbHVkZWQgYmVmb3JlICdib29sJywgJ2ZhbHNlJywgJ3RydWUnCisgICAgICAgICBjYW4gYmUgdXNlZC4KKworICAgICAgIC0gWW91IGNhbm5vdCBhc3N1bWUgdGhhdCBzaXplb2YgKGJvb2wpID09IDEuCisKKyAgICAgICAtIFByb2dyYW1zIHNob3VsZCBub3QgdW5kZWZpbmUgdGhlIG1hY3JvcyBib29sLCB0cnVlLCBhbmQgZmFsc2UsCisgICAgICAgICBhcyBDOTkgbGlzdHMgdGhhdCBhcyBhbiAib2Jzb2xlc2NlbnQgZmVhdHVyZSIuCisKKyAgIExpbWl0YXRpb25zIG9mIHRoaXMgc3Vic3RpdHV0ZSwgd2hlbiB1c2VkIGluIGEgQzg5IGVudmlyb25tZW50OgorCisgICAgICAgLSA8c3RkYm9vbC5oPiBtdXN0IGJlICNpbmNsdWRlZCBiZWZvcmUgdGhlICdfQm9vbCcgdHlwZSBjYW4gYmUgdXNlZC4KKworICAgICAgIC0gWW91IGNhbm5vdCBhc3N1bWUgdGhhdCBfQm9vbCBpcyBhIHR5cGVkZWY7IGl0IG1pZ2h0IGJlIGEgbWFjcm8uCisKKyAgICAgICAtIEJpdC1maWVsZHMgb2YgdHlwZSAnYm9vbCcgYXJlIG5vdCBzdXBwb3J0ZWQuICBQb3J0YWJsZSBjb2RlCisgICAgICAgICBzaG91bGQgdXNlICd1bnNpZ25lZCBpbnQgZm9vIDogMTsnIHJhdGhlciB0aGFuICdib29sIGZvbyA6IDE7Jy4KKworICAgICAgIC0gSW4gQzk5LCBjYXN0cyBhbmQgYXV0b21hdGljIGNvbnZlcnNpb25zIHRvICdfQm9vbCcgb3IgJ2Jvb2wnIGFyZQorICAgICAgICAgcGVyZm9ybWVkIGluIHN1Y2ggYSB3YXkgdGhhdCBldmVyeSBub256ZXJvIHZhbHVlIGdldHMgY29udmVydGVkCisgICAgICAgICB0byAndHJ1ZScsIGFuZCB6ZXJvIGdldHMgY29udmVydGVkIHRvICdmYWxzZScuICBUaGlzIGRvZXNuJ3Qgd29yaworICAgICAgICAgd2l0aCB0aGlzIHN1YnN0aXR1dGUuICBXaXRoIHRoaXMgc3Vic3RpdHV0ZSwgb25seSB0aGUgdmFsdWVzIDAgYW5kIDEKKyAgICAgICAgIGdpdmUgdGhlIGV4cGVjdGVkIHJlc3VsdCB3aGVuIGNvbnZlcnRlZCB0byBfQm9vbCcgb3IgJ2Jvb2wnLgorCisgICAgICAgLSBDOTkgYWxsb3dzIHRoZSB1c2Ugb2YgKF9Cb29sKTAuMCBpbiBjb25zdGFudCBleHByZXNzaW9ucywgYnV0CisgICAgICAgICB0aGlzIHN1YnN0aXR1dGUgY2Fubm90IGFsd2F5cyBwcm92aWRlIHRoaXMgcHJvcGVydHkuCisKKyAgIEFsc28sIGl0IGlzIHN1Z2dlc3RlZCB0aGF0IHByb2dyYW1zIHVzZSAnYm9vbCcgcmF0aGVyIHRoYW4gJ19Cb29sJzsKKyAgIHRoaXMgaXNuJ3QgcmVxdWlyZWQsIGJ1dCAnYm9vbCcgaXMgbW9yZSBjb21tb24uICAqLworCisKKy8qIDcuMTYuIEJvb2xlYW4gdHlwZSBhbmQgdmFsdWVzICovCisKKy8qIEJlT1MgPHN5cy9zb2NrZXQuaD4gYWxyZWFkeSAjZGVmaW5lcyBmYWxzZSAwLCB0cnVlIDEuICBXZSB1c2UgdGhlIHNhbWUKKyAgIGRlZmluaXRpb25zIGJlbG93LCBidXQgdGVtcG9yYXJpbHkgd2UgaGF2ZSB0byAjdW5kZWYgdGhlbS4gICovCisjaWYgZGVmaW5lZCBfX0JFT1NfXyAmJiAhZGVmaW5lZCBfX0hBSUtVX18KKyMgaW5jbHVkZSA8T1MuaD4gLyogZGVmaW5lcyBib29sIGJ1dCBub3QgX0Jvb2wgKi8KKyMgdW5kZWYgZmFsc2UKKyMgdW5kZWYgdHJ1ZQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworIyBkZWZpbmUgX0Jvb2wgYm9vbAorIyBkZWZpbmUgYm9vbCBib29sCisjZWxzZQorIyBpZiBkZWZpbmVkIF9fQkVPU19fICYmICFkZWZpbmVkIF9fSEFJS1VfXworICAvKiBBIGNvbXBpbGVyIGtub3duIHRvIGhhdmUgJ2Jvb2wnLiAgKi8KKyAgLyogSWYgdGhlIGNvbXBpbGVyIGFscmVhZHkgaGFzIGJvdGggJ2Jvb2wnIGFuZCAnX0Jvb2wnLCB3ZSBjYW4gYXNzdW1lIHRoZXkKKyAgICAgYXJlIHRoZSBzYW1lIHR5cGVzLiAgKi8KKyMgIGlmICFASEFWRV9fQk9PTEAKK3R5cGVkZWYgYm9vbCBfQm9vbDsKKyMgIGVuZGlmCisjIGVsc2UKKyMgIGlmICFkZWZpbmVkIF9fR05VQ19fCisgICAvKiBJZiBASEFWRV9fQk9PTEA6CisgICAgICAgIFNvbWUgSFAtVVggY2MgYW5kIEFJWCBJQk0gQyBjb21waWxlciB2ZXJzaW9ucyBoYXZlIGNvbXBpbGVyIGJ1Z3Mgd2hlbgorICAgICAgICB0aGUgYnVpbHQtaW4gX0Jvb2wgdHlwZSBpcyB1c2VkLiAgU2VlCisgICAgICAgICAgaHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMDMtMTIvbXNnMDIzMDMuaHRtbAorICAgICAgICAgIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctY29yZXV0aWxzLzIwMDUtMTEvbXNnMDAxNjEuaHRtbAorICAgICAgICAgIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctY29yZXV0aWxzLzIwMDUtMTAvbXNnMDAwODYuaHRtbAorICAgICAgICBTaW1pbGFyIGJ1Z3MgYXJlIGxpa2VseSB3aXRoIG90aGVyIGNvbXBpbGVycyBhcyB3ZWxsOyB0aGlzIGZpbGUKKyAgICAgICAgd291bGRuJ3QgYmUgdXNlZCBpZiA8c3RkYm9vbC5oPiB3YXMgd29ya2luZy4KKyAgICAgICAgU28gd2Ugb3ZlcnJpZGUgdGhlIF9Cb29sIHR5cGUuCisgICAgICBJZiAhQEhBVkVfX0JPT0xAOgorICAgICAgICBOZWVkIHRvIGRlZmluZSBfQm9vbCBvdXJzZWx2ZXMuIEFzICdzaWduZWQgY2hhcicgb3IgYXMgYW4gZW51bSB0eXBlPworICAgICAgICBVc2Ugb2YgYSB0eXBlZGVmLCB3aXRoIFN1blBSTyBDLCBsZWFkcyB0byBhIHN0dXBpZAorICAgICAgICAgICJ3YXJuaW5nOiBfQm9vbCBpcyBhIGtleXdvcmQgaW4gSVNPIEM5OSIuCisgICAgICAgIFVzZSBvZiBhbiBlbnVtIHR5cGUsIHdpdGggSVJJWCBjYywgbGVhZHMgdG8gYSBzdHVwaWQKKyAgICAgICAgICAid2FybmluZygxMTg1KTogZW51bWVyYXRlZCB0eXBlIG1peGVkIHdpdGggYW5vdGhlciB0eXBlIi4KKyAgICAgICAgRXZlbiB0aGUgZXhpc3RlbmNlIG9mIGFuIGVudW0gdHlwZSwgd2l0aG91dCBhIHR5cGVkZWYsCisgICAgICAgICAgIkludmFsaWQgZW51bWVyYXRvci4gKGJhZGVudW0pIiB3aXRoIEhQLVVYIGNjIG9uIFRydTY0LgorICAgICAgICBUaGUgb25seSBiZW5lZml0IG9mIHRoZSBlbnVtLCBkZWJ1Z2dhYmlsaXR5LCBpcyBub3QgaW1wb3J0YW50CisgICAgICAgIHdpdGggdGhlc2UgY29tcGlsZXJzLiAgU28gdXNlICdzaWduZWQgY2hhcicgYW5kIG5vIGVudW0uICAqLworIyAgIGRlZmluZSBfQm9vbCBzaWduZWQgY2hhcgorIyAgZWxzZQorICAgLyogV2l0aCB0aGlzIGNvbXBpbGVyLCB0cnVzdCB0aGUgX0Jvb2wgdHlwZSBpZiB0aGUgY29tcGlsZXIgaGFzIGl0LiAgKi8KKyMgICBpZiAhQEhBVkVfX0JPT0xACisgICAvKiBGb3IgdGhlIHNha2Ugb2Ygc3ltYm9saWMgbmFtZXMgaW4gZ2RiLCBkZWZpbmUgdHJ1ZSBhbmQgZmFsc2UgYXMKKyAgICAgIGVudW0gY29uc3RhbnRzLCBub3Qgb25seSBhcyBtYWNyb3MuCisgICAgICBJdCBpcyB0ZW1wdGluZyB0byB3cml0ZQorICAgICAgICAgdHlwZWRlZiBlbnVtIHsgZmFsc2UgPSAwLCB0cnVlID0gMSB9IF9Cb29sOworICAgICAgc28gdGhhdCBnZGIgcHJpbnRzIHZhbHVlcyBvZiB0eXBlICdib29sJyBzeW1ib2xpY2FsbHkuICBCdXQgdGhlbgorICAgICAgdmFsdWVzIG9mIHR5cGUgJ19Cb29sJyBtaWdodCBwcm9tb3RlIHRvICdpbnQnIG9yICd1bnNpZ25lZCBpbnQnCisgICAgICAoc2VlIElTTyBDIDk5IDYuNy4yLjIuKDQpKTsgaG93ZXZlciwgJ19Cb29sJyBtdXN0IHByb21vdGUgdG8gJ2ludCcKKyAgICAgIChzZWUgSVNPIEMgOTkgNi4zLjEuMS4oMikpLiAgU28gYWRkIGEgbmVnYXRpdmUgdmFsdWUgdG8gdGhlCisgICAgICBlbnVtOyB0aGlzIGVuc3VyZXMgdGhhdCAnX0Jvb2wnIHByb21vdGVzIHRvICdpbnQnLiAgKi8KK3R5cGVkZWYgZW51bSB7IF9Cb29sX211c3RfcHJvbW90ZV90b19pbnQgPSAtMSwgZmFsc2UgPSAwLCB0cnVlID0gMSB9IF9Cb29sOworIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorIyBkZWZpbmUgYm9vbCBfQm9vbAorI2VuZGlmCisKKy8qIFRoZSBvdGhlciBtYWNyb3MgbXVzdCBiZSB1c2FibGUgaW4gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCisjIGRlZmluZSBmYWxzZSBmYWxzZQorIyBkZWZpbmUgdHJ1ZSB0cnVlCisjZWxzZQorIyBkZWZpbmUgZmFsc2UgMAorIyBkZWZpbmUgdHJ1ZSAxCisjZW5kaWYKKworI2RlZmluZSBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCAxCisKKyNlbmRpZiAvKiBfR0xfU1REQk9PTF9IICovCmRpZmYgLS1naXQgYS9saWIvc3RkYm9vbF8uaCBiL2xpYi9zdGRib29sXy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmE4MGJhLi4wMDAwMDAwCi0tLSBhL2xpYi9zdGRib29sXy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSAgIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAxLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KLQotI2lmbmRlZiBfU1REQk9PTF9ICi0jZGVmaW5lIF9TVERCT09MX0gKLQotLyogSVNPIEMgOTkgPHN0ZGJvb2wuaD4gZm9yIHBsYXRmb3JtcyB0aGF0IGxhY2sgaXQuICAqLwotCi0vKiBVc2FnZSBzdWdnZXN0aW9uczoKLQotICAgUHJvZ3JhbXMgdGhhdCB1c2UgPHN0ZGJvb2wuaD4gc2hvdWxkIGJlIGF3YXJlIG9mIHNvbWUgbGltaXRhdGlvbnMKLSAgIGFuZCBzdGFuZGFyZHMgY29tcGxpYW5jZSBpc3N1ZXMuCi0KLSAgIFN0YW5kYXJkcyBjb21wbGlhbmNlOgotCi0gICAgICAgLSA8c3RkYm9vbC5oPiBtdXN0IGJlICNpbmNsdWRlZCBiZWZvcmUgJ2Jvb2wnLCAnZmFsc2UnLCAndHJ1ZScKLSAgICAgICAgIGNhbiBiZSB1c2VkLgotCi0gICAgICAgLSBZb3UgY2Fubm90IGFzc3VtZSB0aGF0IHNpemVvZiAoYm9vbCkgPT0gMS4KLQotICAgICAgIC0gUHJvZ3JhbXMgc2hvdWxkIG5vdCB1bmRlZmluZSB0aGUgbWFjcm9zIGJvb2wsIHRydWUsIGFuZCBmYWxzZSwKLSAgICAgICAgIGFzIEM5OSBsaXN0cyB0aGF0IGFzIGFuICJvYnNvbGVzY2VudCBmZWF0dXJlIi4KLQotICAgTGltaXRhdGlvbnMgb2YgdGhpcyBzdWJzdGl0dXRlLCB3aGVuIHVzZWQgaW4gYSBDODkgZW52aXJvbm1lbnQ6Ci0KLSAgICAgICAtIDxzdGRib29sLmg+IG11c3QgYmUgI2luY2x1ZGVkIGJlZm9yZSB0aGUgJ19Cb29sJyB0eXBlIGNhbiBiZSB1c2VkLgotCi0gICAgICAgLSBZb3UgY2Fubm90IGFzc3VtZSB0aGF0IF9Cb29sIGlzIGEgdHlwZWRlZjsgaXQgbWlnaHQgYmUgYSBtYWNyby4KLQotICAgICAgIC0gSW4gQzk5LCBjYXN0cyBhbmQgYXV0b21hdGljIGNvbnZlcnNpb25zIHRvICdfQm9vbCcgb3IgJ2Jvb2wnIGFyZQotICAgICAgICAgcGVyZm9ybWVkIGluIHN1Y2ggYSB3YXkgdGhhdCBldmVyeSBub256ZXJvIHZhbHVlIGdldHMgY29udmVydGVkCi0gICAgICAgICB0byAndHJ1ZScsIGFuZCB6ZXJvIGdldHMgY29udmVydGVkIHRvICdmYWxzZScuICBUaGlzIGRvZXNuJ3Qgd29yawotICAgICAgICAgd2l0aCB0aGlzIHN1YnN0aXR1dGUuICBXaXRoIHRoaXMgc3Vic3RpdHV0ZSwgb25seSB0aGUgdmFsdWVzIDAgYW5kIDEKLSAgICAgICAgIGdpdmUgdGhlIGV4cGVjdGVkIHJlc3VsdCB3aGVuIGNvbnZlcnRlZCB0byBfQm9vbCcgb3IgJ2Jvb2wnLgotCi0gICBBbHNvLCBpdCBpcyBzdWdnZXN0ZWQgdGhhdCBwcm9ncmFtcyB1c2UgJ2Jvb2wnIHJhdGhlciB0aGFuICdfQm9vbCc7Ci0gICB0aGlzIGlzbid0IHJlcXVpcmVkLCBidXQgJ2Jvb2wnIGlzIG1vcmUgY29tbW9uLiAgKi8KLQotCi0vKiA3LjE2LiBCb29sZWFuIHR5cGUgYW5kIHZhbHVlcyAqLwotCi0vKiBCZU9TIDxzeXMvc29ja2V0Lmg+IGFscmVhZHkgI2RlZmluZXMgZmFsc2UgMCwgdHJ1ZSAxLiAgV2UgdXNlIHRoZSBzYW1lCi0gICBkZWZpbml0aW9ucyBiZWxvdywgYnV0IHRlbXBvcmFyaWx5IHdlIGhhdmUgdG8gI3VuZGVmIHRoZW0uICAqLwotI2lmZGVmIF9fQkVPU19fCi0jIGluY2x1ZGUgPE9TLmg+IC8qIGRlZmluZXMgYm9vbCBidXQgbm90IF9Cb29sICovCi0jIHVuZGVmIGZhbHNlCi0jIHVuZGVmIHRydWUKLSNlbmRpZgotCi0vKiBGb3IgdGhlIHNha2Ugb2Ygc3ltYm9saWMgbmFtZXMgaW4gZ2RiLCB3ZSBkZWZpbmUgdHJ1ZSBhbmQgZmFsc2UgYXMKLSAgIGVudW0gY29uc3RhbnRzLCBub3Qgb25seSBhcyBtYWNyb3MuCi0gICBJdCBpcyB0ZW1wdGluZyB0byB3cml0ZQotICAgICAgdHlwZWRlZiBlbnVtIHsgZmFsc2UgPSAwLCB0cnVlID0gMSB9IF9Cb29sOwotICAgc28gdGhhdCBnZGIgcHJpbnRzIHZhbHVlcyBvZiB0eXBlICdib29sJyBzeW1ib2xpY2FsbHkuIEJ1dCBpZiB3ZSBkbwotICAgdGhpcywgdmFsdWVzIG9mIHR5cGUgJ19Cb29sJyBtYXkgcHJvbW90ZSB0byAnaW50JyBvciAndW5zaWduZWQgaW50JwotICAgKHNlZSBJU08gQyA5OSA2LjcuMi4yLig0KSk7IGhvd2V2ZXIsICdfQm9vbCcgbXVzdCBwcm9tb3RlIHRvICdpbnQnCi0gICAoc2VlIElTTyBDIDk5IDYuMy4xLjEuKDIpKS4gIFNvIHdlIGFkZCBhIG5lZ2F0aXZlIHZhbHVlIHRvIHRoZQotICAgZW51bTsgdGhpcyBlbnN1cmVzIHRoYXQgJ19Cb29sJyBwcm9tb3RlcyB0byAnaW50Jy4gICovCi0jaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9fQkVPU19fCi0gIC8qIEEgY29tcGlsZXIga25vd24gdG8gaGF2ZSAnYm9vbCcuICAqLwotICAvKiBJZiB0aGUgY29tcGlsZXIgYWxyZWFkeSBoYXMgYm90aCAnYm9vbCcgYW5kICdfQm9vbCcsIHdlIGNhbiBhc3N1bWUgdGhleQotICAgICBhcmUgdGhlIHNhbWUgdHlwZXMuICAqLwotIyBpZiAhQEhBVkVfX0JPT0xACi10eXBlZGVmIGJvb2wgX0Jvb2w7Ci0jIGVuZGlmCi0jZWxzZQotIyBpZiAhZGVmaW5lZCBfX0dOVUNfXwotICAgLyogSWYgQEhBVkVfX0JPT0xAOgotICAgICAgICBTb21lIEhQLVVYIGNjIGFuZCBBSVggSUJNIEMgY29tcGlsZXIgdmVyc2lvbnMgaGF2ZSBjb21waWxlciBidWdzIHdoZW4KLSAgICAgICAgdGhlIGJ1aWx0LWluIF9Cb29sIHR5cGUgaXMgdXNlZC4gIFNlZQotICAgICAgICAgIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDAzLTEyL21zZzAyMzAzLmh0bWwKLSAgICAgICAgICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWNvcmV1dGlscy8yMDA1LTExL21zZzAwMTYxLmh0bWwKLSAgICAgICAgICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWNvcmV1dGlscy8yMDA1LTEwL21zZzAwMDg2Lmh0bWwKLSAgICAgICAgU2ltaWxhciBidWdzIGFyZSBsaWtlbHkgd2l0aCBvdGhlciBjb21waWxlcnMgYXMgd2VsbDsgdGhpcyBmaWxlCi0gICAgICAgIHdvdWxkbid0IGJlIHVzZWQgaWYgPHN0ZGJvb2wuaD4gd2FzIHdvcmtpbmcuCi0gICAgICAgIFNvIHdlIG92ZXJyaWRlIHRoZSBfQm9vbCB0eXBlLgotICAgICAgSWYgIUBIQVZFX19CT09MQDoKLSAgICAgICAgTmVlZCB0byBkZWZpbmUgX0Jvb2wgb3Vyc2VsdmVzLiBBcyAnc2lnbmVkIGNoYXInIG9yIGFzIGFuIGVudW0gdHlwZT8KLSAgICAgICAgVXNlIG9mIGEgdHlwZWRlZiwgd2l0aCBTdW5QUk8gQywgbGVhZHMgdG8gYSBzdHVwaWQKLSAgICAgICAgICAid2FybmluZzogX0Jvb2wgaXMgYSBrZXl3b3JkIGluIElTTyBDOTkiLgotICAgICAgICBVc2Ugb2YgYW4gZW51bSB0eXBlLCB3aXRoIElSSVggY2MsIGxlYWRzIHRvIGEgc3R1cGlkCi0gICAgICAgICAgIndhcm5pbmcoMTE4NSk6IGVudW1lcmF0ZWQgdHlwZSBtaXhlZCB3aXRoIGFub3RoZXIgdHlwZSIuCi0gICAgICAgIFRoZSBvbmx5IGJlbmVmaXQgb2YgdGhlIGVudW0gdHlwZSwgZGVidWdnYWJpbGl0eSwgaXMgbm90IGltcG9ydGFudAotICAgICAgICB3aXRoIHRoZXNlIGNvbXBpbGVycy4gIFNvIHVzZSAnc2lnbmVkIGNoYXInIGFuZCBubyB0eXBlZGVmLiAgKi8KLSMgIGRlZmluZSBfQm9vbCBzaWduZWQgY2hhcgotZW51bSB7IGZhbHNlID0gMCwgdHJ1ZSA9IDEgfTsKLSMgZWxzZQotICAgLyogV2l0aCB0aGlzIGNvbXBpbGVyLCB0cnVzdCB0aGUgX0Jvb2wgdHlwZSBpZiB0aGUgY29tcGlsZXIgaGFzIGl0LiAgKi8KLSMgIGlmICFASEFWRV9fQk9PTEAKLXR5cGVkZWYgZW51bSB7IF9Cb29sX211c3RfcHJvbW90ZV90b19pbnQgPSAtMSwgZmFsc2UgPSAwLCB0cnVlID0gMSB9IF9Cb29sOwotIyAgZW5kaWYKLSMgZW5kaWYKLSNlbmRpZgotI2RlZmluZSBib29sIF9Cb29sCi0KLS8qIFRoZSBvdGhlciBtYWNyb3MgbXVzdCBiZSB1c2FibGUgaW4gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuICAqLwotI2RlZmluZSBmYWxzZSAwCi0jZGVmaW5lIHRydWUgMQotI2RlZmluZSBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCAxCi0KLSNlbmRpZiAvKiBfU1REQk9PTF9IICovCmRpZmYgLS1naXQgYS9saWIvc3RkZGVmLmluLmggYi9saWIvc3RkZGVmLmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdmY2FlYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9zdGRkZWYuaW4uaApAQCAtMCwwICsxLDg2IEBACisvKiBBIHN1YnN0aXR1dGUgZm9yIFBPU0lYIDIwMDggPHN0ZGRlZi5oPiwgZm9yIHBsYXRmb3JtcyB0aGF0IGhhdmUgaXNzdWVzLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBXcml0dGVuIGJ5IEVyaWMgQmxha2UuICAqLworCisvKgorICogUE9TSVggMjAwOCA8c3RkZGVmLmg+IGZvciBwbGF0Zm9ybXMgdGhhdCBoYXZlIGlzc3Vlcy4KKyAqIDxodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjN4YmQvc3RkZGVmLmguaHRtbD4KKyAqLworCisjaWYgX19HTlVDX18gPj0gMworQFBSQUdNQV9TWVNURU1fSEVBREVSQAorI2VuZGlmCitAUFJBR01BX0NPTFVNTlNACisKKyNpZiBkZWZpbmVkIF9fbmVlZF93Y2hhcl90IHx8IGRlZmluZWQgX19uZWVkX3NpemVfdCAgXAorICB8fCBkZWZpbmVkIF9fbmVlZF9wdHJkaWZmX3QgfHwgZGVmaW5lZCBfX25lZWRfTlVMTCBcCisgIHx8IGRlZmluZWQgX19uZWVkX3dpbnRfdAorLyogU3BlY2lhbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24gaW5zaWRlIGdjYyBoZWFkZXIgZmlsZXMuICBJbgorICAgcGFydGljdWxhciwgZ2NjIHByb3ZpZGVzIGEgdmVyc2lvbiBvZiA8c3RkZGVmLmg+IHRoYXQgYmxpbmRseQorICAgcmVkZWZpbmVzIE5VTEwgZXZlbiB3aGVuIF9fbmVlZF93aW50X3Qgd2FzIGRlZmluZWQsIGV2ZW4gdGhvdWdoCisgICB3aW50X3QgaXMgbm90IG5vcm1hbGx5IHByb3ZpZGVkIGJ5IDxzdGRkZWYuaD4uICBIZW5jZSwgd2UgbXVzdAorICAgcmVtZW1iZXIgaWYgc3BlY2lhbCBpbnZvY2F0aW9uIGhhcyBldmVyIGJlZW4gdXNlZCB0byBvYnRhaW4gd2ludF90LAorICAgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvIGNsZWFuIHVwIE5VTEwgeWV0IGFnYWluLiAgKi8KKworIyBpZiAhKGRlZmluZWQgX0BHVUFSRF9QUkVGSVhAX1NURERFRl9IICYmIGRlZmluZWQgX0dMX1NURERFRl9XSU5UX1QpCisjICBpZmRlZiBfX25lZWRfd2ludF90CisjICAgdW5kZWYgX0BHVUFSRF9QUkVGSVhAX1NURERFRl9ICisjICAgZGVmaW5lIF9HTF9TVERERUZfV0lOVF9UCisjICBlbmRpZgorIyAgQElOQ0xVREVfTkVYVEAgQE5FWFRfU1REREVGX0hACisjIGVuZGlmCisKKyNlbHNlCisvKiBOb3JtYWwgaW52b2NhdGlvbiBjb252ZW50aW9uLiAgKi8KKworIyBpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NURERFRl9ICisKKy8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKworIyAgQElOQ0xVREVfTkVYVEAgQE5FWFRfU1REREVGX0hACisKKyMgIGlmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1REREVGX0gKKyMgICBkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX1NURERFRl9ICisKKy8qIE9uIE5ldEJTRCA1LjAsIHRoZSBkZWZpbml0aW9uIG9mIE5VTEwgbGFja3MgcHJvcGVyIHBhcmVudGhlc2VzLiAgKi8KKyNpZiBAUkVQTEFDRV9OVUxMQAorIyB1bmRlZiBOVUxMCisjIGlmZGVmIF9fY3BsdXNwbHVzCisgICAvKiBJU08gQysrIHNheXMgdGhhdCB0aGUgbWFjcm8gTlVMTCBtdXN0IGV4cGFuZCB0byBhbiBpbnRlZ2VyIGNvbnN0YW50CisgICAgICBleHByZXNzaW9uLCBoZW5jZSAnKCh2b2lkICopIDApJyBpcyBub3QgYWxsb3dlZCBpbiBDKysuICAqLworIyAgaWYgX19HTlVHX18gPj0gMworICAgIC8qIEdOVSBDKysgaGFzIGEgX19udWxsIG1hY3JvIHRoYXQgYmVoYXZlcyBsaWtlIGFuIGludGVnZXIgKCdpbnQnIG9yCisgICAgICAgJ2xvbmcnKSBidXQgaGFzIHRoZSBzYW1lIHNpemUgYXMgYSBwb2ludGVyLiAgVXNlIHRoYXQsIHRvIGF2b2lkCisgICAgICAgd2FybmluZ3MuICAqLworIyAgIGRlZmluZSBOVUxMIF9fbnVsbAorIyAgZWxzZQorIyAgIGRlZmluZSBOVUxMIDBMCisjICBlbmRpZgorIyBlbHNlCisjICBkZWZpbmUgTlVMTCAoKHZvaWQgKikgMCkKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBTb21lIHBsYXRmb3JtcyBsYWNrIHdjaGFyX3QuICAqLworI2lmICFASEFWRV9XQ0hBUl9UQAorIyBkZWZpbmUgd2NoYXJfdCBpbnQKKyNlbmRpZgorCisjICBlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1REREVGX0ggKi8KKyMgZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NURERFRl9IICovCisjZW5kaWYgLyogX19uZWVkX1hYWCAqLwpkaWZmIC0tZ2l0IGEvbGliL3N0ZGludC5pbi5oIGIvbGliL3N0ZGludC5pbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYTBlYjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc3RkaW50LmluLmgKQEAgLTAsMCArMSw2MzYgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCAyMDA0LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0LCBCcnVubyBIYWlibGUsIFNhbSBTdGVpbmdvbGQsIFBldGVyIEJ1cndvb2QuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBnbnVsaWIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyoKKyAqIElTTyBDIDk5IDxzdGRpbnQuaD4gZm9yIHBsYXRmb3JtcyB0aGF0IGxhY2sgaXQuCisgKiA8aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3N1c3YzeGJkL3N0ZGludC5oLmh0bWw+CisgKi8KKworI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1RESU5UX0gKKworI2lmIF9fR05VQ19fID49IDMKK0BQUkFHTUFfU1lTVEVNX0hFQURFUkAKKyNlbmRpZgorQFBSQUdNQV9DT0xVTU5TQAorCisvKiBXaGVuIGluY2x1ZGluZyBhIHN5c3RlbSBmaWxlIHRoYXQgaW4gdHVybiBpbmNsdWRlcyA8aW50dHlwZXMuaD4sCisgICB1c2UgdGhlIHN5c3RlbSA8aW50dHlwZXMuaD4sIG5vdCBvdXIgc3Vic3RpdHV0ZS4gIFRoaXMgYXZvaWRzCisgICBwcm9ibGVtcyB3aXRoIChmb3IgZXhhbXBsZSkgVk1TLCB3aG9zZSA8c3lzL2JpdHlwZXMuaD4gaW5jbHVkZXMKKyAgIDxpbnR0eXBlcy5oPi4gICovCisjZGVmaW5lIF9HTF9KVVNUX0lOQ0xVREVfU1lTVEVNX0lOVFRZUEVTX0gKKworLyogT24gQW5kcm9pZCAoQmlvbmljIGxpYmMpLCA8c3lzL3R5cGVzLmg+IGluY2x1ZGVzIHRoaXMgZmlsZSBiZWZvcmUKKyAgIGhhdmluZyBkZWZpbmVkICd0aW1lX3QnLiAgVGhlcmVmb3JlIGluIHRoaXMgY2FzZSBhdm9pZCBpbmNsdWRpbmcKKyAgIG90aGVyIHN5c3RlbSBoZWFkZXIgZmlsZXM7IGp1c3QgaW5jbHVkZSB0aGUgc3lzdGVtJ3MgPHN0ZGludC5oPi4KKyAgIElkZWFsbHkgd2Ugc2hvdWxkIHRlc3QgX19CSU9OSUNfXyBoZXJlLCBidXQgaXQgaXMgb25seSBkZWZpbmVkIGFmdGVyCisgICA8c3lzL2NkZWZzLmg+IGhhcyBiZWVuIGluY2x1ZGVkOyBoZW5jZSB0ZXN0IF9fQU5EUk9JRF9fIGluc3RlYWQuICAqLworI2lmIGRlZmluZWQgX19BTkRST0lEX18gXAorICAgICYmIGRlZmluZWQgX1NZU19UWVBFU19IXyAmJiAhZGVmaW5lZCBfU1NJWkVfVF9ERUZJTkVEXworIyBASU5DTFVERV9ORVhUQCBATkVYVF9TVERJTlRfSEAKKyNlbHNlCisKKy8qIEdldCB0aG9zZSB0eXBlcyB0aGF0IGFyZSBhbHJlYWR5IGRlZmluZWQgaW4gb3RoZXIgc3lzdGVtIGluY2x1ZGUKKyAgIGZpbGVzLCBzbyB0aGF0IHdlIGNhbiAiI2RlZmluZSBpbnQ4X3Qgc2lnbmVkIGNoYXIiIGJlbG93IHdpdGhvdXQKKyAgIHdvcnJ5aW5nIGFib3V0IGEgbGF0ZXIgc3lzdGVtIGluY2x1ZGUgZmlsZSBjb250YWluaW5nIGEgInR5cGVkZWYKKyAgIHNpZ25lZCBjaGFyIGludDhfdDsiIHRoYXQgd2lsbCBnZXQgbWVzc2VkIHVwIGJ5IG91ciBtYWNyby4gIE91cgorICAgbWFjcm9zIHNob3VsZCBhbGwgYmUgY29uc2lzdGVudCB3aXRoIHRoZSBzeXN0ZW0gdmVyc2lvbnMsIGV4Y2VwdAorICAgZm9yIHRoZSAiZmFzdCIgdHlwZXMgYW5kIG1hY3Jvcywgd2hpY2ggd2UgcmVjb21tZW5kIGFnYWluc3QgdXNpbmcKKyAgIGluIHB1YmxpYyBpbnRlcmZhY2VzIGR1ZSB0byBjb21waWxlciBkaWZmZXJlbmNlcy4gICovCisKKyNpZiBASEFWRV9TVERJTlRfSEAKKyMgaWYgZGVmaW5lZCBfX3NnaSAmJiAhIGRlZmluZWQgX19jOTkKKyAgIC8qIEJ5cGFzcyBJUklYJ3MgPHN0ZGludC5oPiBpZiBpbiBDODkgbW9kZSwgc2luY2UgaXQgbWVyZWx5IGFubm95cyB1c2VycworICAgICAgd2l0aCAiVGhpcyBoZWFkZXIgZmlsZSBpcyB0byBiZSB1c2VkIG9ubHkgZm9yIGM5OSBtb2RlIGNvbXBpbGF0aW9ucyIKKyAgICAgIGRpYWdub3N0aWNzLiAgKi8KKyMgIGRlZmluZSBfX1NURElOVF9IX18KKyMgZW5kaWYKKworICAvKiBTb21lIHByZS1DKysxMSA8c3RkaW50Lmg+IGltcGxlbWVudGF0aW9ucyBuZWVkIHRoaXMuICAqLworIyBpZmRlZiBfX2NwbHVzcGx1cworIyAgaWZuZGVmIF9fU1REQ19DT05TVEFOVF9NQUNST1MKKyMgICBkZWZpbmUgX19TVERDX0NPTlNUQU5UX01BQ1JPUyAxCisjICBlbmRpZgorIyAgaWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKKyMgICBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyAxCisjICBlbmRpZgorIyBlbmRpZgorCisgIC8qIE90aGVyIHN5c3RlbXMgbWF5IGhhdmUgYW4gaW5jb21wbGV0ZSBvciBidWdneSA8c3RkaW50Lmg+LgorICAgICBJbmNsdWRlIGl0IGJlZm9yZSA8aW50dHlwZXMuaD4sIHNpbmNlIGFueSAiI2luY2x1ZGUgPHN0ZGludC5oPiIKKyAgICAgaW4gPGludHR5cGVzLmg+IHdvdWxkIHJlaW5jbHVkZSB1cywgc2tpcHBpbmcgb3VyIGNvbnRlbnRzIGJlY2F1c2UKKyAgICAgX0BHVUFSRF9QUkVGSVhAX1NURElOVF9IIGlzIGRlZmluZWQuCisgICAgIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyMgQElOQ0xVREVfTkVYVEAgQE5FWFRfU1RESU5UX0hACisjZW5kaWYKKworI2lmICEgZGVmaW5lZCBfQEdVQVJEX1BSRUZJWEBfU1RESU5UX0ggJiYgISBkZWZpbmVkIF9HTF9KVVNUX0lOQ0xVREVfU1lTVEVNX1NURElOVF9ICisjZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9TVERJTlRfSAorCisvKiA8c3lzL3R5cGVzLmg+IGRlZmluZXMgc29tZSBvZiB0aGUgc3RkaW50LmggdHlwZXMgYXMgd2VsbCwgb24gZ2xpYmMsCisgICBJUklYIDYuNSwgYW5kIE9wZW5CU0QgMy44ICh2aWEgPG1hY2hpbmUvdHlwZXMuaD4pLgorICAgQUlYIDUuMiA8c3lzL3R5cGVzLmg+IGlzbid0IG5lZWRlZCBhbmQgY2F1c2VzIHRyb3VibGVzLgorICAgTWFjIE9TIFggMTAuNC42IDxzeXMvdHlwZXMuaD4gaW5jbHVkZXMgPHN0ZGludC5oPiAod2hpY2ggaXMgdXMpLCBidXQKKyAgIHJlbGllcyBvbiB0aGUgc3lzdGVtIDxzdGRpbnQuaD4gZGVmaW5pdGlvbnMsIHNvIGluY2x1ZGUKKyAgIDxzeXMvdHlwZXMuaD4gYWZ0ZXIgQE5FWFRfU1RESU5UX0hALiAgKi8KKyNpZiBASEFWRV9TWVNfVFlQRVNfSEAgJiYgISBkZWZpbmVkIF9BSVgKKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworLyogR2V0IFNDSEFSX01JTiwgU0NIQVJfTUFYLCBVQ0hBUl9NQVgsIElOVF9NSU4sIElOVF9NQVgsCisgICBMT05HX01JTiwgTE9OR19NQVgsIFVMT05HX01BWC4gICovCisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpZiBASEFWRV9JTlRUWVBFU19IQAorICAvKiBJbiBPcGVuQlNEIDMuOCwgPGludHR5cGVzLmg+IGluY2x1ZGVzIDxtYWNoaW5lL3R5cGVzLmg+LCB3aGljaCBkZWZpbmVzCisgICAgIGludHs4LDE2LDMyLDY0fV90LCB1aW50ezgsMTYsMzIsNjR9X3QgYW5kIF9fQklUX1RZUEVTX0RFRklORURfXy4KKyAgICAgPGludHR5cGVzLmg+IGFsc28gZGVmaW5lcyBpbnRwdHJfdCBhbmQgdWludHB0cl90LiAgKi8KKyMgaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbGlmIEBIQVZFX1NZU19JTlRUWVBFU19IQAorICAvKiBTb2xhcmlzIDcgPHN5cy9pbnR0eXBlcy5oPiBoYXMgdGhlIHR5cGVzIGV4Y2VwdCB0aGUgKl9mYXN0Kl90IHR5cGVzLCBhbmQKKyAgICAgdGhlIG1hY3JvcyBleGNlcHQgZm9yICpfRkFTVCpfKiwgSU5UUFRSX01JTiwgUFRSRElGRl9NSU4sIFBUUkRJRkZfTUFYLiAgKi8KKyMgaW5jbHVkZSA8c3lzL2ludHR5cGVzLmg+CisjZW5kaWYKKworI2lmIEBIQVZFX1NZU19CSVRZUEVTX0hAICYmICEgZGVmaW5lZCBfX0JJVF9UWVBFU19ERUZJTkVEX18KKyAgLyogTGludXggbGliYzQgPj0gNC42LjcgYW5kIGxpYmM1IGhhdmUgYSA8c3lzL2JpdHlwZXMuaD4gdGhhdCBkZWZpbmVzCisgICAgIGludHs4LDE2LDMyLDY0fV90IGFuZCBfX0JJVF9UWVBFU19ERUZJTkVEX18uICBJbiBsaWJjNSA+PSA1LjIuMiBpdCBpcworICAgICBpbmNsdWRlZCBieSA8c3lzL3R5cGVzLmg+LiAgKi8KKyMgaW5jbHVkZSA8c3lzL2JpdHlwZXMuaD4KKyNlbmRpZgorCisjdW5kZWYgX0dMX0pVU1RfSU5DTFVERV9TWVNURU1fSU5UVFlQRVNfSAorCisvKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBmb3IgYW4gaW50ZWdlciB0eXBlIHVuZGVyIHRoZSB1c3VhbCBhc3N1bXB0aW9uLgorICAgUmV0dXJuIGFuIHVuc3BlY2lmaWVkIHZhbHVlIGlmIEJJVFMgPT0gMCwgYWRkaW5nIGEgY2hlY2sgdG8gcGFjaWZ5CisgICBwaWNreSBjb21waWxlcnMuICAqLworCisjZGVmaW5lIF9TVERJTlRfTUlOKHNpZ25lZCwgYml0cywgemVybykgXAorICAoKHNpZ25lZCkgPyAoLSAoKHplcm8pICsgMSkgPDwgKChiaXRzKSA/IChiaXRzKSAtIDEgOiAwKSkgOiAoemVybykpCisKKyNkZWZpbmUgX1NURElOVF9NQVgoc2lnbmVkLCBiaXRzLCB6ZXJvKSBcCisgICgoc2lnbmVkKSBcCisgICA/IH4gX1NURElOVF9NSU4gKHNpZ25lZCwgYml0cywgemVybykgXAorICAgOiAvKiBUaGUgZXhwcmVzc2lvbiBmb3IgdGhlIHVuc2lnbmVkIGNhc2UuICBUaGUgc3VidHJhY3Rpb24gb2YgKHNpZ25lZCkgXAorICAgICAgICBpcyBhIG5vcCBpbiB0aGUgdW5zaWduZWQgY2FzZSBhbmQgYXZvaWRzICJzaWduZWQgaW50ZWdlciBvdmVyZmxvdyIgXAorICAgICAgICB3YXJuaW5ncyBpbiB0aGUgc2lnbmVkIGNhc2UuICAqLyBcCisgICAgICgoKCh6ZXJvKSArIDEpIDw8ICgoYml0cykgPyAoYml0cykgLSAxIC0gKHNpZ25lZCkgOiAwKSkgLSAxKSAqIDIgKyAxKQorCisjaWYgIUdOVUxJQl9kZWZpbmVkX3N0ZGludF90eXBlcworCisvKiA3LjE4LjEuMS4gRXhhY3Qtd2lkdGggaW50ZWdlciB0eXBlcyAqLworCisvKiBIZXJlIHdlIGFzc3VtZSBhIHN0YW5kYXJkIGFyY2hpdGVjdHVyZSB3aGVyZSB0aGUgaGFyZHdhcmUgaW50ZWdlcgorICAgdHlwZXMgaGF2ZSA4LCAxNiwgMzIsIG9wdGlvbmFsbHkgNjQgYml0cy4gICovCisKKyN1bmRlZiBpbnQ4X3QKKyN1bmRlZiB1aW50OF90Cit0eXBlZGVmIHNpZ25lZCBjaGFyIGdsX2ludDhfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBnbF91aW50OF90OworI2RlZmluZSBpbnQ4X3QgZ2xfaW50OF90CisjZGVmaW5lIHVpbnQ4X3QgZ2xfdWludDhfdAorCisjdW5kZWYgaW50MTZfdAorI3VuZGVmIHVpbnQxNl90Cit0eXBlZGVmIHNob3J0IGludCBnbF9pbnQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgZ2xfdWludDE2X3Q7CisjZGVmaW5lIGludDE2X3QgZ2xfaW50MTZfdAorI2RlZmluZSB1aW50MTZfdCBnbF91aW50MTZfdAorCisjdW5kZWYgaW50MzJfdAorI3VuZGVmIHVpbnQzMl90Cit0eXBlZGVmIGludCBnbF9pbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgZ2xfdWludDMyX3Q7CisjZGVmaW5lIGludDMyX3QgZ2xfaW50MzJfdAorI2RlZmluZSB1aW50MzJfdCBnbF91aW50MzJfdAorCisvKiBJZiB0aGUgc3lzdGVtIGRlZmluZXMgSU5UNjRfTUFYLCBhc3N1bWUgaW50NjRfdCB3b3Jrcy4gIFRoYXQgd2F5LAorICAgaWYgdGhlIHVuZGVybHlpbmcgcGxhdGZvcm0gZGVmaW5lcyBpbnQ2NF90IHRvIGJlIGEgNjQtYml0IGxvbmcgbG9uZworICAgaW50LCB0aGUgY29kZSBiZWxvdyB3b24ndCBtaXN0YWtlbmx5IGRlZmluZSBpdCB0byBiZSBhIDY0LWJpdCBsb25nCisgICBpbnQsIHdoaWNoIHdvdWxkIG1lc3MgdXAgQysrIG5hbWUgbWFuZ2xpbmcuICBXZSBtdXN0IHVzZSAjaWZkZWYKKyAgIHJhdGhlciB0aGFuICNpZiwgdG8gYXZvaWQgYW4gZXJyb3Igd2l0aCBIUC1VWCAxMC4yMCBjYy4gICovCisKKyNpZmRlZiBJTlQ2NF9NQVgKKyMgZGVmaW5lIEdMX0lOVDY0X1QKKyNlbHNlCisvKiBEbyBub3QgdW5kZWZpbmUgaW50NjRfdCBpZiBnbnVsaWIgaXMgbm90IGJlaW5nIHVzZWQgd2l0aCA2NC1iaXQKKyAgIHR5cGVzLCBzaW5jZSBvdGhlcndpc2UgaXQgYnJlYWtzIHBsYXRmb3JtcyBsaWtlIFRhbmRlbS9OU0suICAqLworIyBpZiBMT05HX01BWCA+PiAzMSA+PiAzMSA9PSAxCisjICB1bmRlZiBpbnQ2NF90Cit0eXBlZGVmIGxvbmcgaW50IGdsX2ludDY0X3Q7CisjICBkZWZpbmUgaW50NjRfdCBnbF9pbnQ2NF90CisjICBkZWZpbmUgR0xfSU5UNjRfVAorIyBlbGlmIGRlZmluZWQgX01TQ19WRVIKKyMgIHVuZGVmIGludDY0X3QKK3R5cGVkZWYgX19pbnQ2NCBnbF9pbnQ2NF90OworIyAgZGVmaW5lIGludDY0X3QgZ2xfaW50NjRfdAorIyAgZGVmaW5lIEdMX0lOVDY0X1QKKyMgZWxpZiBASEFWRV9MT05HX0xPTkdfSU5UQAorIyAgdW5kZWYgaW50NjRfdAordHlwZWRlZiBsb25nIGxvbmcgaW50IGdsX2ludDY0X3Q7CisjICBkZWZpbmUgaW50NjRfdCBnbF9pbnQ2NF90CisjICBkZWZpbmUgR0xfSU5UNjRfVAorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBVSU5UNjRfTUFYCisjIGRlZmluZSBHTF9VSU5UNjRfVAorI2Vsc2UKKyMgaWYgVUxPTkdfTUFYID4+IDMxID4+IDMxID4+IDEgPT0gMQorIyAgdW5kZWYgdWludDY0X3QKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgZ2xfdWludDY0X3Q7CisjICBkZWZpbmUgdWludDY0X3QgZ2xfdWludDY0X3QKKyMgIGRlZmluZSBHTF9VSU5UNjRfVAorIyBlbGlmIGRlZmluZWQgX01TQ19WRVIKKyMgIHVuZGVmIHVpbnQ2NF90Cit0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgZ2xfdWludDY0X3Q7CisjICBkZWZpbmUgdWludDY0X3QgZ2xfdWludDY0X3QKKyMgIGRlZmluZSBHTF9VSU5UNjRfVAorIyBlbGlmIEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRACisjICB1bmRlZiB1aW50NjRfdAordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IGdsX3VpbnQ2NF90OworIyAgZGVmaW5lIHVpbnQ2NF90IGdsX3VpbnQ2NF90CisjICBkZWZpbmUgR0xfVUlOVDY0X1QKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBBdm9pZCBjb2xsaXNpb24gd2l0aCBTb2xhcmlzIDIuNS4xIDxwdGhyZWFkLmg+IGV0Yy4gICovCisjZGVmaW5lIF9VSU5UOF9UCisjZGVmaW5lIF9VSU5UMzJfVAorI2RlZmluZSBfVUlOVDY0X1QKKworCisvKiA3LjE4LjEuMi4gTWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVzICovCisKKy8qIEhlcmUgd2UgYXNzdW1lIGEgc3RhbmRhcmQgYXJjaGl0ZWN0dXJlIHdoZXJlIHRoZSBoYXJkd2FyZSBpbnRlZ2VyCisgICB0eXBlcyBoYXZlIDgsIDE2LCAzMiwgb3B0aW9uYWxseSA2NCBiaXRzLiBUaGVyZWZvcmUgdGhlIGxlYXN0Tl90IHR5cGVzCisgICBhcmUgdGhlIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgTl90IHR5cGVzLiAgKi8KKworI3VuZGVmIGludF9sZWFzdDhfdAorI3VuZGVmIHVpbnRfbGVhc3Q4X3QKKyN1bmRlZiBpbnRfbGVhc3QxNl90CisjdW5kZWYgdWludF9sZWFzdDE2X3QKKyN1bmRlZiBpbnRfbGVhc3QzMl90CisjdW5kZWYgdWludF9sZWFzdDMyX3QKKyN1bmRlZiBpbnRfbGVhc3Q2NF90CisjdW5kZWYgdWludF9sZWFzdDY0X3QKKyNkZWZpbmUgaW50X2xlYXN0OF90IGludDhfdAorI2RlZmluZSB1aW50X2xlYXN0OF90IHVpbnQ4X3QKKyNkZWZpbmUgaW50X2xlYXN0MTZfdCBpbnQxNl90CisjZGVmaW5lIHVpbnRfbGVhc3QxNl90IHVpbnQxNl90CisjZGVmaW5lIGludF9sZWFzdDMyX3QgaW50MzJfdAorI2RlZmluZSB1aW50X2xlYXN0MzJfdCB1aW50MzJfdAorI2lmZGVmIEdMX0lOVDY0X1QKKyMgZGVmaW5lIGludF9sZWFzdDY0X3QgaW50NjRfdAorI2VuZGlmCisjaWZkZWYgR0xfVUlOVDY0X1QKKyMgZGVmaW5lIHVpbnRfbGVhc3Q2NF90IHVpbnQ2NF90CisjZW5kaWYKKworLyogNy4xOC4xLjMuIEZhc3Rlc3QgbWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVzICovCisKKy8qIE5vdGU6IE90aGVyIDxzdGRpbnQuaD4gc3Vic3RpdHV0ZXMgbWF5IGRlZmluZSB0aGVzZSB0eXBlcyBkaWZmZXJlbnRseS4KKyAgIEl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byB1c2UgdGhlc2UgdHlwZXMgaW4gcHVibGljIGhlYWRlciBmaWxlcy4gKi8KKworLyogSGVyZSB3ZSBhc3N1bWUgYSBzdGFuZGFyZCBhcmNoaXRlY3R1cmUgd2hlcmUgdGhlIGhhcmR3YXJlIGludGVnZXIKKyAgIHR5cGVzIGhhdmUgOCwgMTYsIDMyLCBvcHRpb25hbGx5IDY0IGJpdHMuIFRoZXJlZm9yZSB0aGUgZmFzdE5fdCB0eXBlcworICAgYXJlIHRha2VuIGZyb20gdGhlIHNhbWUgbGlzdCBvZiB0eXBlcy4gIFRoZSBmb2xsb3dpbmcgY29kZSBub3JtYWxseQorICAgdXNlcyB0eXBlcyBjb25zaXN0ZW50IHdpdGggZ2xpYmMsIGFzIHRoYXQgbGVzc2VucyB0aGUgY2hhbmNlIG9mCisgICBpbmNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBHTlUgaG9zdHMuICAqLworCisjdW5kZWYgaW50X2Zhc3Q4X3QKKyN1bmRlZiB1aW50X2Zhc3Q4X3QKKyN1bmRlZiBpbnRfZmFzdDE2X3QKKyN1bmRlZiB1aW50X2Zhc3QxNl90CisjdW5kZWYgaW50X2Zhc3QzMl90CisjdW5kZWYgdWludF9mYXN0MzJfdAorI3VuZGVmIGludF9mYXN0NjRfdAorI3VuZGVmIHVpbnRfZmFzdDY0X3QKK3R5cGVkZWYgc2lnbmVkIGNoYXIgZ2xfaW50X2Zhc3Q4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgZ2xfdWludF9mYXN0OF90OworCisjaWZkZWYgX19zdW4KKy8qIERlZmluZSB0eXBlcyBjb21wYXRpYmxlIHdpdGggU3VuT1MgNS4xMCwgc28gdGhhdCBjb2RlIGNvbXBpbGVkIHVuZGVyCisgICBlYXJsaWVyIFN1bk9TIHZlcnNpb25zIHdvcmtzIHdpdGggY29kZSBjb21waWxlZCB1bmRlciBTdW5PUyA1LjEwLiAgKi8KK3R5cGVkZWYgaW50IGdsX2ludF9mYXN0MzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IGdsX3VpbnRfZmFzdDMyX3Q7CisjZWxzZQordHlwZWRlZiBsb25nIGludCBnbF9pbnRfZmFzdDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IGdsX3VpbnRfZmFzdDMyX3Q7CisjZW5kaWYKK3R5cGVkZWYgZ2xfaW50X2Zhc3QzMl90IGdsX2ludF9mYXN0MTZfdDsKK3R5cGVkZWYgZ2xfdWludF9mYXN0MzJfdCBnbF91aW50X2Zhc3QxNl90OworCisjZGVmaW5lIGludF9mYXN0OF90IGdsX2ludF9mYXN0OF90CisjZGVmaW5lIHVpbnRfZmFzdDhfdCBnbF91aW50X2Zhc3Q4X3QKKyNkZWZpbmUgaW50X2Zhc3QxNl90IGdsX2ludF9mYXN0MTZfdAorI2RlZmluZSB1aW50X2Zhc3QxNl90IGdsX3VpbnRfZmFzdDE2X3QKKyNkZWZpbmUgaW50X2Zhc3QzMl90IGdsX2ludF9mYXN0MzJfdAorI2RlZmluZSB1aW50X2Zhc3QzMl90IGdsX3VpbnRfZmFzdDMyX3QKKyNpZmRlZiBHTF9JTlQ2NF9UCisjIGRlZmluZSBpbnRfZmFzdDY0X3QgaW50NjRfdAorI2VuZGlmCisjaWZkZWYgR0xfVUlOVDY0X1QKKyMgZGVmaW5lIHVpbnRfZmFzdDY0X3QgdWludDY0X3QKKyNlbmRpZgorCisvKiA3LjE4LjEuNC4gSW50ZWdlciB0eXBlcyBjYXBhYmxlIG9mIGhvbGRpbmcgb2JqZWN0IHBvaW50ZXJzICovCisKKyN1bmRlZiBpbnRwdHJfdAorI3VuZGVmIHVpbnRwdHJfdAordHlwZWRlZiBsb25nIGludCBnbF9pbnRwdHJfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgZ2xfdWludHB0cl90OworI2RlZmluZSBpbnRwdHJfdCBnbF9pbnRwdHJfdAorI2RlZmluZSB1aW50cHRyX3QgZ2xfdWludHB0cl90CisKKy8qIDcuMTguMS41LiBHcmVhdGVzdC13aWR0aCBpbnRlZ2VyIHR5cGVzICovCisKKy8qIE5vdGU6IFRoZXNlIHR5cGVzIGFyZSBjb21waWxlciBkZXBlbmRlbnQuIEl0IG1heSBiZSB1bndpc2UgdG8gdXNlIHRoZW0gaW4KKyAgIHB1YmxpYyBoZWFkZXIgZmlsZXMuICovCisKKy8qIElmIHRoZSBzeXN0ZW0gZGVmaW5lcyBJTlRNQVhfTUFYLCBhc3N1bWUgdGhhdCBpbnRtYXhfdCB3b3JrcywgYW5kCisgICBzaW1pbGFybHkgZm9yIFVJTlRNQVhfTUFYIGFuZCB1aW50bWF4X3QuICBUaGlzIGF2b2lkcyBwcm9ibGVtcyB3aXRoCisgICBhc3N1bWluZyBvbmUgdHlwZSB3aGVyZSBhbm90aGVyIGlzIHVzZWQgYnkgdGhlIHN5c3RlbS4gICovCisKKyNpZm5kZWYgSU5UTUFYX01BWAorIyB1bmRlZiBJTlRNQVhfQworIyB1bmRlZiBpbnRtYXhfdAorIyBpZiBASEFWRV9MT05HX0xPTkdfSU5UQCAmJiBMT05HX01BWCA+PiAzMCA9PSAxCit0eXBlZGVmIGxvbmcgbG9uZyBpbnQgZ2xfaW50bWF4X3Q7CisjICBkZWZpbmUgaW50bWF4X3QgZ2xfaW50bWF4X3QKKyMgZWxpZiBkZWZpbmVkIEdMX0lOVDY0X1QKKyMgIGRlZmluZSBpbnRtYXhfdCBpbnQ2NF90CisjIGVsc2UKK3R5cGVkZWYgbG9uZyBpbnQgZ2xfaW50bWF4X3Q7CisjICBkZWZpbmUgaW50bWF4X3QgZ2xfaW50bWF4X3QKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFVJTlRNQVhfTUFYCisjIHVuZGVmIFVJTlRNQVhfQworIyB1bmRlZiB1aW50bWF4X3QKKyMgaWYgQEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVEAgJiYgVUxPTkdfTUFYID4+IDMxID09IDEKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBnbF91aW50bWF4X3Q7CisjICBkZWZpbmUgdWludG1heF90IGdsX3VpbnRtYXhfdAorIyBlbGlmIGRlZmluZWQgR0xfVUlOVDY0X1QKKyMgIGRlZmluZSB1aW50bWF4X3QgdWludDY0X3QKKyMgZWxzZQordHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBnbF91aW50bWF4X3Q7CisjICBkZWZpbmUgdWludG1heF90IGdsX3VpbnRtYXhfdAorIyBlbmRpZgorI2VuZGlmCisKKy8qIFZlcmlmeSB0aGF0IGludG1heF90IGFuZCB1aW50bWF4X3QgaGF2ZSB0aGUgc2FtZSBzaXplLiAgVG9vIG11Y2ggY29kZQorICAgYnJlYWtzIGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlLiAgSWYgdGhpcyBjaGVjayBmYWlscywgdGhlIHJlYXNvbiBpcyBsaWtlbHkKKyAgIHRvIGJlIGZvdW5kIGluIHRoZSBhdXRvY29uZiBtYWNyb3MuICAqLwordHlwZWRlZiBpbnQgX3ZlcmlmeV9pbnRtYXhfc2l6ZVtzaXplb2YgKGludG1heF90KSA9PSBzaXplb2YgKHVpbnRtYXhfdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAxIDogLTFdOworCisjZGVmaW5lIEdOVUxJQl9kZWZpbmVkX3N0ZGludF90eXBlcyAxCisjZW5kaWYgLyogIUdOVUxJQl9kZWZpbmVkX3N0ZGludF90eXBlcyAqLworCisvKiA3LjE4LjIuIExpbWl0cyBvZiBzcGVjaWZpZWQtd2lkdGggaW50ZWdlciB0eXBlcyAqLworCisvKiA3LjE4LjIuMS4gTGltaXRzIG9mIGV4YWN0LXdpZHRoIGludGVnZXIgdHlwZXMgKi8KKworLyogSGVyZSB3ZSBhc3N1bWUgYSBzdGFuZGFyZCBhcmNoaXRlY3R1cmUgd2hlcmUgdGhlIGhhcmR3YXJlIGludGVnZXIKKyAgIHR5cGVzIGhhdmUgOCwgMTYsIDMyLCBvcHRpb25hbGx5IDY0IGJpdHMuICAqLworCisjdW5kZWYgSU5UOF9NSU4KKyN1bmRlZiBJTlQ4X01BWAorI3VuZGVmIFVJTlQ4X01BWAorI2RlZmluZSBJTlQ4X01JTiAgKH4gSU5UOF9NQVgpCisjZGVmaW5lIElOVDhfTUFYICAxMjcKKyNkZWZpbmUgVUlOVDhfTUFYICAyNTUKKworI3VuZGVmIElOVDE2X01JTgorI3VuZGVmIElOVDE2X01BWAorI3VuZGVmIFVJTlQxNl9NQVgKKyNkZWZpbmUgSU5UMTZfTUlOICAofiBJTlQxNl9NQVgpCisjZGVmaW5lIElOVDE2X01BWCAgMzI3NjcKKyNkZWZpbmUgVUlOVDE2X01BWCAgNjU1MzUKKworI3VuZGVmIElOVDMyX01JTgorI3VuZGVmIElOVDMyX01BWAorI3VuZGVmIFVJTlQzMl9NQVgKKyNkZWZpbmUgSU5UMzJfTUlOICAofiBJTlQzMl9NQVgpCisjZGVmaW5lIElOVDMyX01BWCAgMjE0NzQ4MzY0NworI2RlZmluZSBVSU5UMzJfTUFYICA0Mjk0OTY3Mjk1VQorCisjaWYgZGVmaW5lZCBHTF9JTlQ2NF9UICYmICEgZGVmaW5lZCBJTlQ2NF9NQVgKKy8qIFByZWZlciAoLSBJTlRNQVhfQyAoMSkgPDwgNjMpIG92ZXIgKH4gSU5UNjRfTUFYKSBiZWNhdXNlIFN1blBSTyBDIDUuMAorICAgZXZhbHVhdGVzIHRoZSBsYXR0ZXIgaW5jb3JyZWN0bHkgaW4gcHJlcHJvY2Vzc29yIGV4cHJlc3Npb25zLiAgKi8KKyMgZGVmaW5lIElOVDY0X01JTiAgKC0gSU5UTUFYX0MgKDEpIDw8IDYzKQorIyBkZWZpbmUgSU5UNjRfTUFYICBJTlRNQVhfQyAoOTIyMzM3MjAzNjg1NDc3NTgwNykKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBHTF9VSU5UNjRfVCAmJiAhIGRlZmluZWQgVUlOVDY0X01BWAorIyBkZWZpbmUgVUlOVDY0X01BWCAgVUlOVE1BWF9DICgxODQ0Njc0NDA3MzcwOTU1MTYxNSkKKyNlbmRpZgorCisvKiA3LjE4LjIuMi4gTGltaXRzIG9mIG1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcyAqLworCisvKiBIZXJlIHdlIGFzc3VtZSBhIHN0YW5kYXJkIGFyY2hpdGVjdHVyZSB3aGVyZSB0aGUgaGFyZHdhcmUgaW50ZWdlcgorICAgdHlwZXMgaGF2ZSA4LCAxNiwgMzIsIG9wdGlvbmFsbHkgNjQgYml0cy4gVGhlcmVmb3JlIHRoZSBsZWFzdE5fdCB0eXBlcworICAgYXJlIHRoZSBzYW1lIGFzIHRoZSBjb3JyZXNwb25kaW5nIE5fdCB0eXBlcy4gICovCisKKyN1bmRlZiBJTlRfTEVBU1Q4X01JTgorI3VuZGVmIElOVF9MRUFTVDhfTUFYCisjdW5kZWYgVUlOVF9MRUFTVDhfTUFYCisjZGVmaW5lIElOVF9MRUFTVDhfTUlOICBJTlQ4X01JTgorI2RlZmluZSBJTlRfTEVBU1Q4X01BWCAgSU5UOF9NQVgKKyNkZWZpbmUgVUlOVF9MRUFTVDhfTUFYICBVSU5UOF9NQVgKKworI3VuZGVmIElOVF9MRUFTVDE2X01JTgorI3VuZGVmIElOVF9MRUFTVDE2X01BWAorI3VuZGVmIFVJTlRfTEVBU1QxNl9NQVgKKyNkZWZpbmUgSU5UX0xFQVNUMTZfTUlOICBJTlQxNl9NSU4KKyNkZWZpbmUgSU5UX0xFQVNUMTZfTUFYICBJTlQxNl9NQVgKKyNkZWZpbmUgVUlOVF9MRUFTVDE2X01BWCAgVUlOVDE2X01BWAorCisjdW5kZWYgSU5UX0xFQVNUMzJfTUlOCisjdW5kZWYgSU5UX0xFQVNUMzJfTUFYCisjdW5kZWYgVUlOVF9MRUFTVDMyX01BWAorI2RlZmluZSBJTlRfTEVBU1QzMl9NSU4gIElOVDMyX01JTgorI2RlZmluZSBJTlRfTEVBU1QzMl9NQVggIElOVDMyX01BWAorI2RlZmluZSBVSU5UX0xFQVNUMzJfTUFYICBVSU5UMzJfTUFYCisKKyN1bmRlZiBJTlRfTEVBU1Q2NF9NSU4KKyN1bmRlZiBJTlRfTEVBU1Q2NF9NQVgKKyNpZmRlZiBHTF9JTlQ2NF9UCisjIGRlZmluZSBJTlRfTEVBU1Q2NF9NSU4gIElOVDY0X01JTgorIyBkZWZpbmUgSU5UX0xFQVNUNjRfTUFYICBJTlQ2NF9NQVgKKyNlbmRpZgorCisjdW5kZWYgVUlOVF9MRUFTVDY0X01BWAorI2lmZGVmIEdMX1VJTlQ2NF9UCisjIGRlZmluZSBVSU5UX0xFQVNUNjRfTUFYICBVSU5UNjRfTUFYCisjZW5kaWYKKworLyogNy4xOC4yLjMuIExpbWl0cyBvZiBmYXN0ZXN0IG1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcyAqLworCisvKiBIZXJlIHdlIGFzc3VtZSBhIHN0YW5kYXJkIGFyY2hpdGVjdHVyZSB3aGVyZSB0aGUgaGFyZHdhcmUgaW50ZWdlcgorICAgdHlwZXMgaGF2ZSA4LCAxNiwgMzIsIG9wdGlvbmFsbHkgNjQgYml0cy4gVGhlcmVmb3JlIHRoZSBmYXN0Tl90IHR5cGVzCisgICBhcmUgdGFrZW4gZnJvbSB0aGUgc2FtZSBsaXN0IG9mIHR5cGVzLiAgKi8KKworI3VuZGVmIElOVF9GQVNUOF9NSU4KKyN1bmRlZiBJTlRfRkFTVDhfTUFYCisjdW5kZWYgVUlOVF9GQVNUOF9NQVgKKyNkZWZpbmUgSU5UX0ZBU1Q4X01JTiAgU0NIQVJfTUlOCisjZGVmaW5lIElOVF9GQVNUOF9NQVggIFNDSEFSX01BWAorI2RlZmluZSBVSU5UX0ZBU1Q4X01BWCAgVUNIQVJfTUFYCisKKyN1bmRlZiBJTlRfRkFTVDE2X01JTgorI3VuZGVmIElOVF9GQVNUMTZfTUFYCisjdW5kZWYgVUlOVF9GQVNUMTZfTUFYCisjZGVmaW5lIElOVF9GQVNUMTZfTUlOICBJTlRfRkFTVDMyX01JTgorI2RlZmluZSBJTlRfRkFTVDE2X01BWCAgSU5UX0ZBU1QzMl9NQVgKKyNkZWZpbmUgVUlOVF9GQVNUMTZfTUFYICBVSU5UX0ZBU1QzMl9NQVgKKworI3VuZGVmIElOVF9GQVNUMzJfTUlOCisjdW5kZWYgSU5UX0ZBU1QzMl9NQVgKKyN1bmRlZiBVSU5UX0ZBU1QzMl9NQVgKKyNpZmRlZiBfX3N1bgorIyBkZWZpbmUgSU5UX0ZBU1QzMl9NSU4gIElOVF9NSU4KKyMgZGVmaW5lIElOVF9GQVNUMzJfTUFYICBJTlRfTUFYCisjIGRlZmluZSBVSU5UX0ZBU1QzMl9NQVggIFVJTlRfTUFYCisjZWxzZQorIyBkZWZpbmUgSU5UX0ZBU1QzMl9NSU4gIExPTkdfTUlOCisjIGRlZmluZSBJTlRfRkFTVDMyX01BWCAgTE9OR19NQVgKKyMgZGVmaW5lIFVJTlRfRkFTVDMyX01BWCAgVUxPTkdfTUFYCisjZW5kaWYKKworI3VuZGVmIElOVF9GQVNUNjRfTUlOCisjdW5kZWYgSU5UX0ZBU1Q2NF9NQVgKKyNpZmRlZiBHTF9JTlQ2NF9UCisjIGRlZmluZSBJTlRfRkFTVDY0X01JTiAgSU5UNjRfTUlOCisjIGRlZmluZSBJTlRfRkFTVDY0X01BWCAgSU5UNjRfTUFYCisjZW5kaWYKKworI3VuZGVmIFVJTlRfRkFTVDY0X01BWAorI2lmZGVmIEdMX1VJTlQ2NF9UCisjIGRlZmluZSBVSU5UX0ZBU1Q2NF9NQVggIFVJTlQ2NF9NQVgKKyNlbmRpZgorCisvKiA3LjE4LjIuNC4gTGltaXRzIG9mIGludGVnZXIgdHlwZXMgY2FwYWJsZSBvZiBob2xkaW5nIG9iamVjdCBwb2ludGVycyAqLworCisjdW5kZWYgSU5UUFRSX01JTgorI3VuZGVmIElOVFBUUl9NQVgKKyN1bmRlZiBVSU5UUFRSX01BWAorI2RlZmluZSBJTlRQVFJfTUlOICBMT05HX01JTgorI2RlZmluZSBJTlRQVFJfTUFYICBMT05HX01BWAorI2RlZmluZSBVSU5UUFRSX01BWCAgVUxPTkdfTUFYCisKKy8qIDcuMTguMi41LiBMaW1pdHMgb2YgZ3JlYXRlc3Qtd2lkdGggaW50ZWdlciB0eXBlcyAqLworCisjaWZuZGVmIElOVE1BWF9NQVgKKyMgdW5kZWYgSU5UTUFYX01JTgorIyBpZmRlZiBJTlQ2NF9NQVgKKyMgIGRlZmluZSBJTlRNQVhfTUlOICBJTlQ2NF9NSU4KKyMgIGRlZmluZSBJTlRNQVhfTUFYICBJTlQ2NF9NQVgKKyMgZWxzZQorIyAgZGVmaW5lIElOVE1BWF9NSU4gIElOVDMyX01JTgorIyAgZGVmaW5lIElOVE1BWF9NQVggIElOVDMyX01BWAorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgVUlOVE1BWF9NQVgKKyMgaWZkZWYgVUlOVDY0X01BWAorIyAgZGVmaW5lIFVJTlRNQVhfTUFYICBVSU5UNjRfTUFYCisjIGVsc2UKKyMgIGRlZmluZSBVSU5UTUFYX01BWCAgVUlOVDMyX01BWAorIyBlbmRpZgorI2VuZGlmCisKKy8qIDcuMTguMy4gTGltaXRzIG9mIG90aGVyIGludGVnZXIgdHlwZXMgKi8KKworLyogcHRyZGlmZl90IGxpbWl0cyAqLworI3VuZGVmIFBUUkRJRkZfTUlOCisjdW5kZWYgUFRSRElGRl9NQVgKKyNpZiBAQVBQTEVfVU5JVkVSU0FMX0JVSUxEQAorIyBpZmRlZiBfTFA2NAorIyAgZGVmaW5lIFBUUkRJRkZfTUlOICBfU1RESU5UX01JTiAoMSwgNjQsIDBsKQorIyAgZGVmaW5lIFBUUkRJRkZfTUFYICBfU1RESU5UX01BWCAoMSwgNjQsIDBsKQorIyBlbHNlCisjICBkZWZpbmUgUFRSRElGRl9NSU4gIF9TVERJTlRfTUlOICgxLCAzMiwgMCkKKyMgIGRlZmluZSBQVFJESUZGX01BWCAgX1NURElOVF9NQVggKDEsIDMyLCAwKQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIFBUUkRJRkZfTUlOICBcCisgICAgX1NURElOVF9NSU4gKDEsIEBCSVRTSVpFT0ZfUFRSRElGRl9UQCwgMEBQVFJESUZGX1RfU1VGRklYQCkKKyMgZGVmaW5lIFBUUkRJRkZfTUFYICBcCisgICAgX1NURElOVF9NQVggKDEsIEBCSVRTSVpFT0ZfUFRSRElGRl9UQCwgMEBQVFJESUZGX1RfU1VGRklYQCkKKyNlbmRpZgorCisvKiBzaWdfYXRvbWljX3QgbGltaXRzICovCisjdW5kZWYgU0lHX0FUT01JQ19NSU4KKyN1bmRlZiBTSUdfQVRPTUlDX01BWAorI2RlZmluZSBTSUdfQVRPTUlDX01JTiAgXAorICAgX1NURElOVF9NSU4gKEBIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1RALCBAQklUU0laRU9GX1NJR19BVE9NSUNfVEAsIFwKKyAgICAgICAgICAgICAgICAwQFNJR19BVE9NSUNfVF9TVUZGSVhAKQorI2RlZmluZSBTSUdfQVRPTUlDX01BWCAgXAorICAgX1NURElOVF9NQVggKEBIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1RALCBAQklUU0laRU9GX1NJR19BVE9NSUNfVEAsIFwKKyAgICAgICAgICAgICAgICAwQFNJR19BVE9NSUNfVF9TVUZGSVhAKQorCisKKy8qIHNpemVfdCBsaW1pdCAqLworI3VuZGVmIFNJWkVfTUFYCisjaWYgQEFQUExFX1VOSVZFUlNBTF9CVUlMREAKKyMgaWZkZWYgX0xQNjQKKyMgIGRlZmluZSBTSVpFX01BWCAgX1NURElOVF9NQVggKDAsIDY0LCAwdWwpCisjIGVsc2UKKyMgIGRlZmluZSBTSVpFX01BWCAgX1NURElOVF9NQVggKDAsIDMyLCAwdWwpCisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgU0laRV9NQVggIF9TVERJTlRfTUFYICgwLCBAQklUU0laRU9GX1NJWkVfVEAsIDBAU0laRV9UX1NVRkZJWEApCisjZW5kaWYKKworLyogd2NoYXJfdCBsaW1pdHMgKi8KKy8qIEdldCBXQ0hBUl9NSU4sIFdDSEFSX01BWC4KKyAgIFRoaXMgaW5jbHVkZSBpcyBub3Qgb24gdGhlIHRvcCwgYWJvdmUsIGJlY2F1c2Ugb24gT1NGLzEgNC4wIHdlIGhhdmUgYQorICAgc2VxdWVuY2Ugb2YgbmVzdGVkIGluY2x1ZGVzCisgICA8d2NoYXIuaD4gLT4gPHN0ZGlvLmg+IC0+IDxnZXRvcHQuaD4gLT4gPHN0ZGxpYi5oPiwgYW5kIHRoZSBsYXR0ZXIgaW5jbHVkZXMKKyAgIDxzdGRpbnQuaD4gYW5kIGFzc3VtZXMgaXRzIHR5cGVzIGFyZSBhbHJlYWR5IGRlZmluZWQuICAqLworI2lmIEBIQVZFX1dDSEFSX0hAICYmICEgKGRlZmluZWQgV0NIQVJfTUlOICYmIGRlZmluZWQgV0NIQVJfTUFYKQorICAvKiBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUKKyAgICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovCisjIGluY2x1ZGUgPHN0ZGRlZi5oPgorIyBpbmNsdWRlIDxzdGRpby5oPgorIyBpbmNsdWRlIDx0aW1lLmg+CisjIGRlZmluZSBfR0xfSlVTVF9JTkNMVURFX1NZU1RFTV9XQ0hBUl9ICisjIGluY2x1ZGUgPHdjaGFyLmg+CisjIHVuZGVmIF9HTF9KVVNUX0lOQ0xVREVfU1lTVEVNX1dDSEFSX0gKKyNlbmRpZgorI3VuZGVmIFdDSEFSX01JTgorI3VuZGVmIFdDSEFSX01BWAorI2RlZmluZSBXQ0hBUl9NSU4gIFwKKyAgIF9TVERJTlRfTUlOIChASEFWRV9TSUdORURfV0NIQVJfVEAsIEBCSVRTSVpFT0ZfV0NIQVJfVEAsIDBAV0NIQVJfVF9TVUZGSVhAKQorI2RlZmluZSBXQ0hBUl9NQVggIFwKKyAgIF9TVERJTlRfTUFYIChASEFWRV9TSUdORURfV0NIQVJfVEAsIEBCSVRTSVpFT0ZfV0NIQVJfVEAsIDBAV0NIQVJfVF9TVUZGSVhAKQorCisvKiB3aW50X3QgbGltaXRzICovCisjdW5kZWYgV0lOVF9NSU4KKyN1bmRlZiBXSU5UX01BWAorI2RlZmluZSBXSU5UX01JTiAgXAorICAgX1NURElOVF9NSU4gKEBIQVZFX1NJR05FRF9XSU5UX1RALCBAQklUU0laRU9GX1dJTlRfVEAsIDBAV0lOVF9UX1NVRkZJWEApCisjZGVmaW5lIFdJTlRfTUFYICBcCisgICBfU1RESU5UX01BWCAoQEhBVkVfU0lHTkVEX1dJTlRfVEAsIEBCSVRTSVpFT0ZfV0lOVF9UQCwgMEBXSU5UX1RfU1VGRklYQCkKKworLyogNy4xOC40LiBNYWNyb3MgZm9yIGludGVnZXIgY29uc3RhbnRzICovCisKKy8qIDcuMTguNC4xLiBNYWNyb3MgZm9yIG1pbmltdW0td2lkdGggaW50ZWdlciBjb25zdGFudHMgKi8KKy8qIEFjY29yZGluZyB0byBJU08gQyA5OSBUZWNobmljYWwgQ29ycmlnZW5kdW0gMSAqLworCisvKiBIZXJlIHdlIGFzc3VtZSBhIHN0YW5kYXJkIGFyY2hpdGVjdHVyZSB3aGVyZSB0aGUgaGFyZHdhcmUgaW50ZWdlcgorICAgdHlwZXMgaGF2ZSA4LCAxNiwgMzIsIG9wdGlvbmFsbHkgNjQgYml0cywgYW5kIGludCBpcyAzMiBiaXRzLiAgKi8KKworI3VuZGVmIElOVDhfQworI3VuZGVmIFVJTlQ4X0MKKyNkZWZpbmUgSU5UOF9DKHgpIHgKKyNkZWZpbmUgVUlOVDhfQyh4KSB4CisKKyN1bmRlZiBJTlQxNl9DCisjdW5kZWYgVUlOVDE2X0MKKyNkZWZpbmUgSU5UMTZfQyh4KSB4CisjZGVmaW5lIFVJTlQxNl9DKHgpIHgKKworI3VuZGVmIElOVDMyX0MKKyN1bmRlZiBVSU5UMzJfQworI2RlZmluZSBJTlQzMl9DKHgpIHgKKyNkZWZpbmUgVUlOVDMyX0MoeCkgeCAjIyBVCisKKyN1bmRlZiBJTlQ2NF9DCisjdW5kZWYgVUlOVDY0X0MKKyNpZiBMT05HX01BWCA+PiAzMSA+PiAzMSA9PSAxCisjIGRlZmluZSBJTlQ2NF9DKHgpIHgjI0wKKyNlbGlmIGRlZmluZWQgX01TQ19WRVIKKyMgZGVmaW5lIElOVDY0X0MoeCkgeCMjaTY0CisjZWxpZiBASEFWRV9MT05HX0xPTkdfSU5UQAorIyBkZWZpbmUgSU5UNjRfQyh4KSB4IyNMTAorI2VuZGlmCisjaWYgVUxPTkdfTUFYID4+IDMxID4+IDMxID4+IDEgPT0gMQorIyBkZWZpbmUgVUlOVDY0X0MoeCkgeCMjVUwKKyNlbGlmIGRlZmluZWQgX01TQ19WRVIKKyMgZGVmaW5lIFVJTlQ2NF9DKHgpIHgjI3VpNjQKKyNlbGlmIEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRACisjIGRlZmluZSBVSU5UNjRfQyh4KSB4IyNVTEwKKyNlbmRpZgorCisvKiA3LjE4LjQuMi4gTWFjcm9zIGZvciBncmVhdGVzdC13aWR0aCBpbnRlZ2VyIGNvbnN0YW50cyAqLworCisjaWZuZGVmIElOVE1BWF9DCisjIGlmIEBIQVZFX0xPTkdfTE9OR19JTlRAICYmIExPTkdfTUFYID4+IDMwID09IDEKKyMgIGRlZmluZSBJTlRNQVhfQyh4KSAgIHgjI0xMCisjIGVsaWYgZGVmaW5lZCBHTF9JTlQ2NF9UCisjICBkZWZpbmUgSU5UTUFYX0MoeCkgICBJTlQ2NF9DKHgpCisjIGVsc2UKKyMgIGRlZmluZSBJTlRNQVhfQyh4KSAgIHgjI0wKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFVJTlRNQVhfQworIyBpZiBASEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UQCAmJiBVTE9OR19NQVggPj4gMzEgPT0gMQorIyAgZGVmaW5lIFVJTlRNQVhfQyh4KSAgeCMjVUxMCisjIGVsaWYgZGVmaW5lZCBHTF9VSU5UNjRfVAorIyAgZGVmaW5lIFVJTlRNQVhfQyh4KSAgVUlOVDY0X0MoeCkKKyMgZWxzZQorIyAgZGVmaW5lIFVJTlRNQVhfQyh4KSAgeCMjVUwKKyMgZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NURElOVF9IICovCisjZW5kaWYgLyogIShkZWZpbmVkIF9fQU5EUk9JRF9fICYmIC4uLikgKi8KKyNlbmRpZiAvKiAhZGVmaW5lZCBfQEdVQVJEX1BSRUZJWEBfU1RESU5UX0ggJiYgIWRlZmluZWQgX0dMX0pVU1RfSU5DTFVERV9TWVNURU1fU1RESU5UX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9zdGRpby0tLmggYi9saWIvc3RkaW8tLS5oCmluZGV4IGIyNzY1ZmQuLjMwN2ZiZGUgMTAwNjQ0Ci0tLSBhL2xpYi9zdGRpby0tLmgKKysrIGIvbGliL3N0ZGlvLS0uaApAQCAtMSwxMSArMSwxMSBAQAogLyogTGlrZSBzdGRpby5oLCBidXQgcmVkZWZpbmUgc29tZSBuYW1lcyB0byBhdm9pZCBnbGl0Y2hlcy4KIAotICAgQ29weXJpZ2h0IChDKSAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpAQCAtMTMsMTMgKzEzLDI5IEBACiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogLyogV3JpdHRlbiBieSBQYXVsIEVnZ2VydC4gICovCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgInN0ZGlvLXNhZmVyLmgiCiAKLSN1bmRlZiBmb3BlbgotI2RlZmluZSBmb3BlbiBmb3Blbl9zYWZlcgorI2lmIEdOVUxJQl9GT1BFTl9TQUZFUgorIyB1bmRlZiBmb3BlbgorIyBkZWZpbmUgZm9wZW4gZm9wZW5fc2FmZXIKKyNlbmRpZgorCisjaWYgR05VTElCX0ZSRU9QRU5fU0FGRVIKKyMgdW5kZWYgZnJlb3BlbgorIyBkZWZpbmUgZnJlb3BlbiBmcmVvcGVuX3NhZmVyCisjZW5kaWYKKworI2lmIEdOVUxJQl9UTVBGSUxFX1NBRkVSCisjIHVuZGVmIHRtcGZpbGUKKyMgZGVmaW5lIHRtcGZpbGUgdG1wZmlsZV9zYWZlcgorI2VuZGlmCisKKyNpZiBHTlVMSUJfUE9QRU5fU0FGRVIKKyMgdW5kZWYgcG9wZW4KKyMgZGVmaW5lIHBvcGVuIHBvcGVuX3NhZmVyCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9zdGRpby1pbXBsLmggYi9saWIvc3RkaW8taW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMGI0ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc3RkaW8taW1wbC5oCkBAIC0wLDAgKzEsMTEyIEBACisvKiBJbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIEZJTEUgc3RyZWFtcy4KKyAgIENvcHlyaWdodCAoQykgMjAwNy0yMDA4LCAyMDEwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIE1hbnkgc3RkaW8gaW1wbGVtZW50YXRpb25zIGhhdmUgdGhlIHNhbWUgbG9naWMgYW5kIHRoZXJlZm9yZSBjYW4gc2hhcmUKKyAgIHRoZSBzYW1lIGltcGxlbWVudGF0aW9uIG9mIHN0ZGlvIGV4dGVuc2lvbiBBUEksIGV4Y2VwdCB0aGF0IHNvbWUgZmllbGRzCisgICBoYXZlIGRpZmZlcmVudCBuYW1pbmcgY29udmVudGlvbnMsIG9yIHRoZWlyIGFjY2VzcyByZXF1aXJlcyBzb21lIGNhc3RzLiAgKi8KKworCisvKiBCU0Qgc3RkaW8gZGVyaXZlZCBpbXBsZW1lbnRhdGlvbnMuICAqLworCisjaWYgZGVmaW5lZCBfX05ldEJTRF9fICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5ldEJTRCAqLworLyogR2V0IF9fTmV0QlNEX1ZlcnNpb25fXy4gICovCisjIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxlcnJuby5oPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIGRldGVjdGluZyBQbGFuOS4gICovCisKKyNpZiBkZWZpbmVkIF9fc2ZlcnJvciB8fCBkZWZpbmVkIF9fRHJhZ29uRmx5X18gLyogRnJlZUJTRCwgTmV0QlNELCBPcGVuQlNELCBEcmFnb25GbHksIE1hYyBPUyBYLCBDeWd3aW4gKi8KKworIyBpZiBkZWZpbmVkIF9fRHJhZ29uRmx5X18gICAgICAgICAgLyogRHJhZ29uRmx5ICovCisgIC8qIFNlZSA8aHR0cDovL3d3dy5kcmFnb25mbHlic2Qub3JnL2N2c3dlYi9zcmMvbGliL2xpYmMvc3RkaW8vcHJpdl9zdGRpby5oP3Jldj1IRUFEJmNvbnRlbnQtdHlwZT10ZXh0L3gtY3Zzd2ViLW1hcmt1cD4uICAqLworIyAgZGVmaW5lIGZwXyAoKHN0cnVjdCB7IHN0cnVjdCBfX0ZJTEVfcHVibGljIHB1YjsgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB7IHVuc2lnbmVkIGNoYXIgKl9iYXNlOyBpbnQgX3NpemU7IH0gX2JmOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY29va2llOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX2Nsb3NlOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX3JlYWQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfc2VlazsgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl93cml0ZTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB7IHVuc2lnbmVkIGNoYXIgKl9iYXNlOyBpbnQgX3NpemU7IH0gX3ViOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF91cjsgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX3VidWZbM107IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9uYnVmWzFdOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgY2hhciAqX2Jhc2U7IGludCBfc2l6ZTsgfSBfbGI7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX2Jsa3NpemU7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmcG9zX3QgX29mZnNldDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1vcmUgZmllbGRzLCBub3QgcmVsZXZhbnQgaGVyZS4gICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgfSAqKSBmcCkKKyAgLyogU2VlIDxodHRwOi8vd3d3LmRyYWdvbmZseWJzZC5vcmcvY3Zzd2ViL3NyYy9pbmNsdWRlL3N0ZGlvLmg/cmV2PUhFQUQmY29udGVudC10eXBlPXRleHQveC1jdnN3ZWItbWFya3VwPi4gICovCisjICBkZWZpbmUgX3AgcHViLl9wCisjICBkZWZpbmUgX2ZsYWdzIHB1Yi5fZmxhZ3MKKyMgIGRlZmluZSBfciBwdWIuX3IKKyMgIGRlZmluZSBfdyBwdWIuX3cKKyMgZWxzZQorIyAgZGVmaW5lIGZwXyBmcAorIyBlbmRpZgorCisjIGlmIChkZWZpbmVkIF9fTmV0QlNEX18gJiYgX19OZXRCU0RfVmVyc2lvbl9fID49IDEwNTI3MDAwMCkgfHwgZGVmaW5lZCBfX09wZW5CU0RfXyAvKiBOZXRCU0QgPj0gMS41WkEsIE9wZW5CU0QgKi8KKyAgLyogU2VlIDxodHRwOi8vY3Zzd2ViLm5ldGJzZC5vcmcvYnNkd2ViLmNnaS9zcmMvbGliL2xpYmMvc3RkaW8vZmlsZWV4dC5oP3Jldj1IRUFEJmNvbnRlbnQtdHlwZT10ZXh0L3gtY3Zzd2ViLW1hcmt1cD4KKyAgICAgYW5kIDxodHRwOi8vd3d3Lm9wZW5ic2Qub3JnL2NnaS1iaW4vY3Zzd2ViL3NyYy9saWIvbGliYy9zdGRpby9maWxlZXh0Lmg/cmV2PUhFQUQmY29udGVudC10eXBlPXRleHQveC1jdnN3ZWItbWFya3VwPiAqLworICBzdHJ1Y3QgX19zZmlsZWV4dAorICAgIHsKKyAgICAgIHN0cnVjdCAgX19zYnVmIF91YjsgLyogdW5nZXRjIGJ1ZmZlciAqLworICAgICAgLyogTW9yZSBmaWVsZHMsIG5vdCByZWxldmFudCBoZXJlLiAgKi8KKyAgICB9OworIyAgZGVmaW5lIGZwX3ViICgoc3RydWN0IF9fc2ZpbGVleHQgKikgZnAtPl9leHQuX2Jhc2UpLT5fdWIKKyMgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRnJlZUJTRCwgTmV0QlNEIDw9IDEuNVosIERyYWdvbkZseSwgTWFjIE9TIFgsIEN5Z3dpbiAqLworIyAgZGVmaW5lIGZwX3ViIGZwXy0+X3ViCisjIGVuZGlmCisKKyMgZGVmaW5lIEhBU1VCKGZwKSAoZnBfdWIuX2Jhc2UgIT0gTlVMTCkKKworI2VuZGlmCisKKworLyogU3lzdGVtViBkZXJpdmVkIGltcGxlbWVudGF0aW9ucy4gICovCisKKyNpZmRlZiBfX1RBTkRFTSAgICAgICAgICAgICAgICAgICAgIC8qIE5vblN0b3AgS2VybmVsICovCisjIGlmbmRlZiBfSU9FUlIKKy8qIFRoZXNlIHZhbHVlcyB3ZXJlIGRldGVybWluZWQgYnkgdGhlIHByb2dyYW0gJ3N0ZGlvZXh0LWZsYWdzJyBhdAorICAgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctZ251bGliLzIwMTAtMTIvbXNnMDAxNjUuaHRtbD4uICAqLworIyAgZGVmaW5lIF9JT0VSUiAgIDB4NDAKKyMgIGRlZmluZSBfSU9SRUFEICAweDgwCisjICBkZWZpbmUgX0lPV1JUICAgIDB4NAorIyAgZGVmaW5lIF9JT1JXICAgMHgxMDAKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfSU9FUlIKKworIyBpZiBkZWZpbmVkIF9fc3VuICYmIGRlZmluZWQgX0xQNjQgLyogU29sYXJpcy97U1BBUkMsQU1ENjR9IDY0LWJpdCAqLworIyAgZGVmaW5lIGZwXyAoKHN0cnVjdCB7IHVuc2lnbmVkIGNoYXIgKl9wdHI7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfYmFzZTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKl9lbmQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIF9jbnQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX2ZpbGU7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX2ZsYWc7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgfSAqKSBmcCkKKyMgZWxzZQorIyAgZGVmaW5lIGZwXyBmcAorIyBlbmRpZgorCisjIGlmIGRlZmluZWQgX1NDT19EUyAgICAgICAgICAgICAgICAvKiBPcGVuU2VydmVyICovCisjICBkZWZpbmUgX2NudCBfX2NudAorIyAgZGVmaW5lIF9wdHIgX19wdHIKKyMgIGRlZmluZSBfYmFzZSBfX2Jhc2UKKyMgIGRlZmluZSBfZmxhZyBfX2ZsYWcKKyMgZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvc3RkaW8tc2FmZXIuaCBiL2xpYi9zdGRpby1zYWZlci5oCmluZGV4IDBiOWE5YWIuLmFjOGE0NTAgMTAwNjQ0Ci0tLSBhL2xpYi9zdGRpby1zYWZlci5oCisrKyBiL2xpYi9zdGRpby1zYWZlci5oCkBAIC0xLDExICsxLDExIEBACiAvKiBJbnZva2Ugc3RkaW8gZnVuY3Rpb25zLCBidXQgYXZvaWQgc29tZSBnbGl0Y2hlcy4KIAotICAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzLCAyMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKQEAgLTEzLDExICsxMywyNCBAQAogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKIC8qIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQuICAqLwogCiAjaW5jbHVkZSA8c3RkaW8uaD4KIAorI2lmIEdOVUxJQl9GT1BFTl9TQUZFUgogRklMRSAqZm9wZW5fc2FmZXIgKGNoYXIgY29uc3QgKiwgY2hhciBjb25zdCAqKTsKKyNlbmRpZgorCisjaWYgR05VTElCX0ZSRU9QRU5fU0FGRVIKK0ZJTEUgKmZyZW9wZW5fc2FmZXIgKGNoYXIgY29uc3QgKiwgY2hhciBjb25zdCAqLCBGSUxFICopOworI2VuZGlmCisKKyNpZiBHTlVMSUJfUE9QRU5fU0FGRVIKK0ZJTEUgKnBvcGVuX3NhZmVyIChjaGFyIGNvbnN0ICosIGNoYXIgY29uc3QgKik7CisjZW5kaWYKKworI2lmIEdOVUxJQl9UTVBGSUxFX1NBRkVSCitGSUxFICp0bXBmaWxlX3NhZmVyICh2b2lkKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL3N0ZGlvLmMgYi9saWIvc3RkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmVkODI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3N0ZGlvLmMKQEAgLTAsMCArMSwzIEBACisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZGVmaW5lIF9HTF9TVERJT19JTkxJTkUgX0dMX0VYVEVSTl9JTkxJTkUKKyNpbmNsdWRlICJzdGRpby5oIgpkaWZmIC0tZ2l0IGEvbGliL3N0ZGlvLmluLmggYi9saWIvc3RkaW8uaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2I1MmQyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3N0ZGlvLmluLmgKQEAgLTAsMCArMSwxMzQ1IEBACisvKiBBIEdOVS1saWtlIDxzdGRpby5oPi4KKworICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmIF9fR05VQ19fID49IDMKK0BQUkFHTUFfU1lTVEVNX0hFQURFUkAKKyNlbmRpZgorQFBSQUdNQV9DT0xVTU5TQAorCisjaWYgZGVmaW5lZCBfX25lZWRfRklMRSB8fCBkZWZpbmVkIF9fbmVlZF9fX0ZJTEUgfHwgZGVmaW5lZCBfR0xfQUxSRUFEWV9JTkNMVURJTkdfU1RESU9fSAorLyogU3BlY2lhbCBpbnZvY2F0aW9uIGNvbnZlbnRpb246CisgICAtIEluc2lkZSBnbGliYyBoZWFkZXIgZmlsZXMuCisgICAtIE9uIE9TRi8xIDUuMSB3ZSBoYXZlIGEgc2VxdWVuY2Ugb2YgbmVzdGVkIGluY2x1ZGVzCisgICAgIDxzdGRpby5oPiAtPiA8Z2V0b3B0Lmg+IC0+IDxjdHlwZS5oPiAtPiA8c3lzL2xvY2FsZWRlZi5oPiAtPgorICAgICA8c3lzL2xjX2NvcmUuaD4gLT4gPG5sX3R5cGVzLmg+IC0+IDxtZXNnLmg+IC0+IDxzdGRpby5oPi4KKyAgICAgSW4gdGhpcyBzaXR1YXRpb24sIHRoZSBmdW5jdGlvbnMgYXJlIG5vdCB5ZXQgZGVjbGFyZWQsIHRoZXJlZm9yZSB3ZSBjYW5ub3QKKyAgICAgcHJvdmlkZSB0aGUgQysrIGFsaWFzZXMuICAqLworCisjQElOQ0xVREVfTkVYVEAgQE5FWFRfU1RESU9fSEAKKworI2Vsc2UKKy8qIE5vcm1hbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24uICAqLworCisjaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TVERJT19ICisKKyNkZWZpbmUgX0dMX0FMUkVBRFlfSU5DTFVESU5HX1NURElPX0gKKworLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworI0BJTkNMVURFX05FWFRAIEBORVhUX1NURElPX0hACisKKyN1bmRlZiBfR0xfQUxSRUFEWV9JTkNMVURJTkdfU1RESU9fSAorCisjaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TVERJT19ICisjZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9TVERJT19ICisKK19HTF9JTkxJTkVfSEVBREVSX0JFR0lOCisjaWZuZGVmIF9HTF9TVERJT19JTkxJTkUKKyMgZGVmaW5lIF9HTF9TVERJT19JTkxJTkUgX0dMX0lOTElORQorI2VuZGlmCisKKy8qIEdldCB2YV9saXN0LiAgTmVlZGVkIG9uIG1hbnkgc3lzdGVtcywgaW5jbHVkaW5nIGdsaWJjIDIuOC4gICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLyogR2V0IG9mZl90IGFuZCBzc2l6ZV90LiAgTmVlZGVkIG9uIG1hbnkgc3lzdGVtcywgaW5jbHVkaW5nIGdsaWJjIDIuOAorICAgYW5kIGVnbGliYyAyLjExLjIuCisgICBNYXkgYWxzbyBkZWZpbmUgb2ZmX3QgdG8gYSA2NC1iaXQgdHlwZSBvbiBuYXRpdmUgV2luZG93cy4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKy8qIFRoZSBfX2F0dHJpYnV0ZV9fIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLgorICAgVGhlIF9fLXByb3RlY3RlZCB2YXJpYW50cyBvZiB0aGUgYXR0cmlidXRlcyAnZm9ybWF0JyBhbmQgJ3ByaW50ZicgYXJlCisgICBhY2NlcHRlZCBieSBnY2MgdmVyc2lvbnMgMi42LjQgKGVmZmVjdGl2ZWx5IDIuNykgYW5kIGxhdGVyLgorICAgV2UgZW5hYmxlIF9HTF9BVFRSSUJVVEVfRk9STUFUIG9ubHkgaWYgdGhlc2UgYXJlIHN1cHBvcnRlZCB0b28sIGJlY2F1c2UKKyAgIGdudWxpYiBhbmQgbGliaW50bCBkbyAnI2RlZmluZSBwcmludGYgX19wcmludGZfXycgd2hlbiB0aGV5IG92ZXJyaWRlCisgICB0aGUgJ3ByaW50ZicgZnVuY3Rpb24uICAqLworI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA3KQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9GT1JNQVQoc3BlYykgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gc3BlYykpCisjZWxzZQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9GT1JNQVQoc3BlYykgLyogZW1wdHkgKi8KKyNlbmRpZgorCisvKiBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEYKKyAgIGluZGljYXRlcyB0byBHQ0MgdGhhdCB0aGUgZnVuY3Rpb24gdGFrZXMgYSBmb3JtYXQgc3RyaW5nIGFuZCBhcmd1bWVudHMsCisgICB3aGVyZSB0aGUgZm9ybWF0IHN0cmluZyBkaXJlY3RpdmVzIGFyZSB0aGUgb25lcyBzdGFuZGFyZGl6ZWQgYnkgSVNPIEM5OQorICAgYW5kIFBPU0lYLiAgKi8KKyNpZiBfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNCkKKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URihmb3JtYXRzdHJpbmdfcGFyYW1ldGVyLCBmaXJzdF9hcmd1bWVudCkgXAorICAgX0dMX0FUVFJJQlVURV9GT1JNQVQgKChfX2dudV9wcmludGZfXywgZm9ybWF0c3RyaW5nX3BhcmFtZXRlciwgZmlyc3RfYXJndW1lbnQpKQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URihmb3JtYXRzdHJpbmdfcGFyYW1ldGVyLCBmaXJzdF9hcmd1bWVudCkgXAorICAgX0dMX0FUVFJJQlVURV9GT1JNQVQgKChfX3ByaW50Zl9fLCBmb3JtYXRzdHJpbmdfcGFyYW1ldGVyLCBmaXJzdF9hcmd1bWVudCkpCisjZW5kaWYKKworLyogX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGX1NZU1RFTSBpcyBsaWtlIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URiwKKyAgIGV4Y2VwdCB0aGF0IGl0IGluZGljYXRlcyB0byBHQ0MgdGhhdCB0aGUgc3VwcG9ydGVkIGZvcm1hdCBzdHJpbmcgZGlyZWN0aXZlcworICAgYXJlIHRoZSBvbmVzIG9mIHRoZSBzeXN0ZW0gcHJpbnRmKCksIHJhdGhlciB0aGFuIHRoZSBvbmVzIHN0YW5kYXJkaXplZCBieQorICAgSVNPIEM5OSBhbmQgUE9TSVguICAqLworI2RlZmluZSBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEZfU1lTVEVNKGZvcm1hdHN0cmluZ19wYXJhbWV0ZXIsIGZpcnN0X2FyZ3VtZW50KSBcCisgIF9HTF9BVFRSSUJVVEVfRk9STUFUICgoX19wcmludGZfXywgZm9ybWF0c3RyaW5nX3BhcmFtZXRlciwgZmlyc3RfYXJndW1lbnQpKQorCisvKiBfR0xfQVRUUklCVVRFX0ZPUk1BVF9TQ0FORgorICAgaW5kaWNhdGVzIHRvIEdDQyB0aGF0IHRoZSBmdW5jdGlvbiB0YWtlcyBhIGZvcm1hdCBzdHJpbmcgYW5kIGFyZ3VtZW50cywKKyAgIHdoZXJlIHRoZSBmb3JtYXQgc3RyaW5nIGRpcmVjdGl2ZXMgYXJlIHRoZSBvbmVzIHN0YW5kYXJkaXplZCBieSBJU08gQzk5CisgICBhbmQgUE9TSVguICAqLworI2lmIF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0KQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9GT1JNQVRfU0NBTkYoZm9ybWF0c3RyaW5nX3BhcmFtZXRlciwgZmlyc3RfYXJndW1lbnQpIFwKKyAgIF9HTF9BVFRSSUJVVEVfRk9STUFUICgoX19nbnVfc2NhbmZfXywgZm9ybWF0c3RyaW5nX3BhcmFtZXRlciwgZmlyc3RfYXJndW1lbnQpKQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfRk9STUFUX1NDQU5GKGZvcm1hdHN0cmluZ19wYXJhbWV0ZXIsIGZpcnN0X2FyZ3VtZW50KSBcCisgICBfR0xfQVRUUklCVVRFX0ZPUk1BVCAoKF9fc2NhbmZfXywgZm9ybWF0c3RyaW5nX3BhcmFtZXRlciwgZmlyc3RfYXJndW1lbnQpKQorI2VuZGlmCisKKy8qIF9HTF9BVFRSSUJVVEVfRk9STUFUX1NDQU5GX1NZU1RFTSBpcyBsaWtlIF9HTF9BVFRSSUJVVEVfRk9STUFUX1NDQU5GLAorICAgZXhjZXB0IHRoYXQgaXQgaW5kaWNhdGVzIHRvIEdDQyB0aGF0IHRoZSBzdXBwb3J0ZWQgZm9ybWF0IHN0cmluZyBkaXJlY3RpdmVzCisgICBhcmUgdGhlIG9uZXMgb2YgdGhlIHN5c3RlbSBzY2FuZigpLCByYXRoZXIgdGhhbiB0aGUgb25lcyBzdGFuZGFyZGl6ZWQgYnkKKyAgIElTTyBDOTkgYW5kIFBPU0lYLiAgKi8KKyNkZWZpbmUgX0dMX0FUVFJJQlVURV9GT1JNQVRfU0NBTkZfU1lTVEVNKGZvcm1hdHN0cmluZ19wYXJhbWV0ZXIsIGZpcnN0X2FyZ3VtZW50KSBcCisgIF9HTF9BVFRSSUJVVEVfRk9STUFUICgoX19zY2FuZl9fLCBmb3JtYXRzdHJpbmdfcGFyYW1ldGVyLCBmaXJzdF9hcmd1bWVudCkpCisKKy8qIFNvbGFyaXMgMTAgZGVjbGFyZXMgcmVuYW1lYXQgaW4gPHVuaXN0ZC5oPiwgbm90IGluIDxzdGRpby5oPi4gICovCisvKiBCdXQgaW4gYW55IGNhc2UgYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zLiAgKi8KKyNpZiAoQEdOVUxJQl9SRU5BTUVBVEAgfHwgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSykgJiYgZGVmaW5lZCBfX3N1biBcCisgICAgJiYgISBkZWZpbmVkIF9fR0xJQkNfXworIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisKKy8qIFRoZSBkZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBMIGV0Yy4gYXJlIGNvcGllZCBoZXJlLiAgKi8KKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxMIGlzIGNvcGllZCBoZXJlLiAgKi8KKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKworLyogTWFjcm9zIGZvciBzdHJpbmdpZmljYXRpb24uICAqLworI2RlZmluZSBfR0xfU1RESU9fU1RSSU5HSVpFKHRva2VuKSAjdG9rZW4KKyNkZWZpbmUgX0dMX1NURElPX01BQ1JPRVhQQU5EX0FORF9TVFJJTkdJWkUodG9rZW4pIF9HTF9TVERJT19TVFJJTkdJWkUodG9rZW4pCisKKworI2lmIEBHTlVMSUJfRFBSSU5URkAKKyMgaWYgQFJFUExBQ0VfRFBSSU5URkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGRwcmludGYgcnBsX2RwcmludGYKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChkcHJpbnRmLCBpbnQsIChpbnQgZmQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEYgKDIsIDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChkcHJpbnRmLCBpbnQsIChpbnQgZmQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9EUFJJTlRGQAorX0dMX0ZVTkNERUNMX1NZUyAoZHByaW50ZiwgaW50LCAoaW50IGZkLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgyLCAzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGRwcmludGYsIGludCwgKGludCBmZCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGRwcmludGYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBkcHJpbnRmCisjIGlmIEhBVkVfUkFXX0RFQ0xfRFBSSU5URgorX0dMX1dBUk5fT05fVVNFIChkcHJpbnRmLCAiZHByaW50ZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZHByaW50ZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9GQ0xPU0VACisvKiBDbG9zZSBTVFJFQU0gYW5kIGl0cyB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvci4gICovCisjIGlmIEBSRVBMQUNFX0ZDTE9TRUAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGZjbG9zZSBycGxfZmNsb3NlCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZmNsb3NlLCBpbnQsIChGSUxFICpzdHJlYW0pIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmY2xvc2UsIGludCwgKEZJTEUgKnN0cmVhbSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChmY2xvc2UsIGludCwgKEZJTEUgKnN0cmVhbSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZmNsb3NlKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZmNsb3NlCisvKiBBc3N1bWUgZmNsb3NlIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKGZjbG9zZSwgImZjbG9zZSBpcyBub3QgYWx3YXlzIFBPU0lYIGNvbXBsaWFudCAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZjbG9zZSBmb3IgcG9ydGFibGUgUE9TSVggY29tcGxpYW5jZSIpOworI2VuZGlmCisKKyNpZiBAR05VTElCX0ZET1BFTkAKKyMgaWYgQFJFUExBQ0VfRkRPUEVOQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmZG9wZW4KKyMgICBkZWZpbmUgZmRvcGVuIHJwbF9mZG9wZW4KKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmZG9wZW4sIEZJTEUgKiwgKGludCBmZCwgY29uc3QgY2hhciAqbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZmRvcGVuLCBGSUxFICosIChpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoZmRvcGVuLCBGSUxFICosIChpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZkb3Blbik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZkb3BlbgorLyogQXNzdW1lIGZkb3BlbiBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFIChmZG9wZW4sICJmZG9wZW4gb24gbmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zIGlzIG5vdCBQT1NJWCBjb21wbGlhbnQgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmZG9wZW4gZm9yIHBvcnRhYmlsaXR5Iik7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfRkZMVVNIQAorLyogRmx1c2ggYWxsIHBlbmRpbmcgZGF0YSBvbiBTVFJFQU0gYWNjb3JkaW5nIHRvIFBPU0lYIHJ1bGVzLiAgQm90aAorICAgb3V0cHV0IGFuZCBzZWVrYWJsZSBpbnB1dCBzdHJlYW1zIGFyZSBzdXBwb3J0ZWQuCisgICBOb3RlISBMT1NTIE9GIERBVEEgY2FuIG9jY3VyIGlmIGZmbHVzaCBpcyBhcHBsaWVkIG9uIGFuIGlucHV0IHN0cmVhbQorICAgdGhhdCBpcyBfbm90X3NlZWthYmxlXyBvciBvbiBhbiB1cGRhdGUgc3RyZWFtIHRoYXQgaXMgX25vdF9zZWVrYWJsZV8KKyAgIGFuZCBpbiB3aGljaCB0aGUgbW9zdCByZWNlbnQgb3BlcmF0aW9uIHdhcyBpbnB1dC4gIFNlZWthYmlsaXR5IGNhbgorICAgYmUgdGVzdGVkIHdpdGggbHNlZWsoZmlsZW5vKGZwKSwwLFNFRUtfQ1VSKS4gICovCisjIGlmIEBSRVBMQUNFX0ZGTFVTSEAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGZmbHVzaCBycGxfZmZsdXNoCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZmZsdXNoLCBpbnQsIChGSUxFICpnbF9zdHJlYW0pKTsKK19HTF9DWFhBTElBU19SUEwgKGZmbHVzaCwgaW50LCAoRklMRSAqZ2xfc3RyZWFtKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZmbHVzaCwgaW50LCAoRklMRSAqZ2xfc3RyZWFtKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmZmx1c2gpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmZmx1c2gKKy8qIEFzc3VtZSBmZmx1c2ggaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAoZmZsdXNoLCAiZmZsdXNoIGlzIG5vdCBhbHdheXMgUE9TSVggY29tcGxpYW50IC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZmZsdXNoIGZvciBwb3J0YWJsZSBQT1NJWCBjb21wbGlhbmNlIik7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfRkdFVENACisjIGlmIEBSRVBMQUNFX1NURElPX1JFQURfRlVOQ1NAICYmIEBHTlVMSUJfU1RESU9fSF9OT05CTE9DS0lOR0AKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZmdldGMKKyMgICBkZWZpbmUgZmdldGMgcnBsX2ZnZXRjCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZmdldGMsIGludCwgKEZJTEUgKnN0cmVhbSkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKGZnZXRjLCBpbnQsIChGSUxFICpzdHJlYW0pKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoZmdldGMsIGludCwgKEZJTEUgKnN0cmVhbSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZmdldGMpOworI2VuZGlmCisKKyNpZiBAR05VTElCX0ZHRVRTQAorIyBpZiBAUkVQTEFDRV9TVERJT19SRUFEX0ZVTkNTQCAmJiBAR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkdACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZnZXRzCisjICAgZGVmaW5lIGZnZXRzIHJwbF9mZ2V0cworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZnZXRzLCBjaGFyICosIChjaGFyICpzLCBpbnQgbiwgRklMRSAqc3RyZWFtKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMykpKTsKK19HTF9DWFhBTElBU19SUEwgKGZnZXRzLCBjaGFyICosIChjaGFyICpzLCBpbnQgbiwgRklMRSAqc3RyZWFtKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZnZXRzLCBjaGFyICosIChjaGFyICpzLCBpbnQgbiwgRklMRSAqc3RyZWFtKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmZ2V0cyk7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfRk9QRU5ACisjIGlmIEBSRVBMQUNFX0ZPUEVOQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmb3BlbgorIyAgIGRlZmluZSBmb3BlbiBycGxfZm9wZW4KKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmb3BlbiwgRklMRSAqLCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZm9wZW4sIEZJTEUgKiwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICptb2RlKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZvcGVuLCBGSUxFICosIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZm9wZW4pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmb3BlbgorLyogQXNzdW1lIGZvcGVuIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKGZvcGVuLCAiZm9wZW4gb24gbmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zIGlzIG5vdCBQT1NJWCBjb21wbGlhbnQgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmb3BlbiBmb3IgcG9ydGFiaWxpdHkiKTsKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9GUFJJTlRGX1BPU0lYQCB8fCBAR05VTElCX0ZQUklOVEZACisjIGlmIChAR05VTElCX0ZQUklOVEZfUE9TSVhAICYmIEBSRVBMQUNFX0ZQUklOVEZAKSBcCisgICAgIHx8IChAR05VTElCX0ZQUklOVEZAICYmIEBSRVBMQUNFX1NURElPX1dSSVRFX0ZVTkNTQCAmJiAoQEdOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HQCB8fCBAR05VTElCX1NURElPX0hfU0lHUElQRUApKQorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgZnByaW50ZiBycGxfZnByaW50ZgorIyAgZW5kaWYKKyMgIGRlZmluZSBHTlVMSUJfb3ZlcnJpZGVzX2ZwcmludGYgMQorIyAgaWYgQEdOVUxJQl9GUFJJTlRGX1BPU0lYQCB8fCBAR05VTElCX1ZGUFJJTlRGX1BPU0lYQAorX0dMX0ZVTkNERUNMX1JQTCAoZnByaW50ZiwgaW50LCAoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEYgKDIsIDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbHNlCitfR0xfRlVOQ0RFQ0xfUlBMIChmcHJpbnRmLCBpbnQsIChGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URl9TWVNURU0gKDIsIDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1JQTCAoZnByaW50ZiwgaW50LCAoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZwcmludGYsIGludCwgKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZnByaW50Zik7CisjZW5kaWYKKyNpZiAhQEdOVUxJQl9GUFJJTlRGX1BPU0lYQCAmJiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIGlmICFHTlVMSUJfb3ZlcnJpZGVzX2ZwcmludGYKKyMgIHVuZGVmIGZwcmludGYKKyMgZW5kaWYKKy8qIEFzc3VtZSBmcHJpbnRmIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKGZwcmludGYsICJmcHJpbnRmIGlzIG5vdCBhbHdheXMgUE9TSVggY29tcGxpYW50IC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZnByaW50Zi1wb3NpeCBmb3IgcG9ydGFibGUgIgorICAgICAgICAgICAgICAgICAiUE9TSVggY29tcGxpYW5jZSIpOworI2VuZGlmCisKKyNpZiBAR05VTElCX0ZQVVJHRUAKKy8qIERpc2NhcmQgYWxsIHBlbmRpbmcgYnVmZmVyZWQgSS9PIGRhdGEgb24gU1RSRUFNLgorICAgU1RSRUFNIG11c3Qgbm90IGJlIHdpZGUtY2hhcmFjdGVyIG9yaWVudGVkLgorICAgV2hlbiBkaXNjYXJkaW5nIHBlbmRpbmcgb3V0cHV0LCB0aGUgZmlsZSBwb3NpdGlvbiBpcyBzZXQgYmFjayB0byB3aGVyZSBpdAorICAgd2FzIGJlZm9yZSB0aGUgd3JpdGUgY2FsbHMuICBXaGVuIGRpc2NhcmRpbmcgcGVuZGluZyBpbnB1dCwgdGhlIGZpbGUKKyAgIHBvc2l0aW9uIGlzIGFkdmFuY2VkIHRvIG1hdGNoIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzbHkgcmVhZCBpbnB1dC4KKyAgIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWwuICBVcG9uIGVycm9yLCByZXR1cm4gLTEgYW5kIHNldCBlcnJuby4gICovCisjIGlmIEBSRVBMQUNFX0ZQVVJHRUAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGZwdXJnZSBycGxfZnB1cmdlCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZnB1cmdlLCBpbnQsIChGSUxFICpnbF9zdHJlYW0pIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmcHVyZ2UsIGludCwgKEZJTEUgKmdsX3N0cmVhbSkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfREVDTF9GUFVSR0VACitfR0xfRlVOQ0RFQ0xfU1lTIChmcHVyZ2UsIGludCwgKEZJTEUgKmdsX3N0cmVhbSkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmcHVyZ2UsIGludCwgKEZJTEUgKmdsX3N0cmVhbSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZnB1cmdlKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZnB1cmdlCisjIGlmIEhBVkVfUkFXX0RFQ0xfRlBVUkdFCitfR0xfV0FSTl9PTl9VU0UgKGZwdXJnZSwgImZwdXJnZSBpcyBub3QgYWx3YXlzIHByZXNlbnQgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmcHVyZ2UgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfRlBVVENACisjIGlmIEBSRVBMQUNFX1NURElPX1dSSVRFX0ZVTkNTQCAmJiAoQEdOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HQCB8fCBAR05VTElCX1NURElPX0hfU0lHUElQRUApCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZwdXRjCisjICAgZGVmaW5lIGZwdXRjIHJwbF9mcHV0YworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZwdXRjLCBpbnQsIChpbnQgYywgRklMRSAqc3RyZWFtKSBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZnB1dGMsIGludCwgKGludCBjLCBGSUxFICpzdHJlYW0pKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoZnB1dGMsIGludCwgKGludCBjLCBGSUxFICpzdHJlYW0pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZwdXRjKTsKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9GUFVUU0AKKyMgaWYgQFJFUExBQ0VfU1RESU9fV1JJVEVfRlVOQ1NAICYmIChAR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkdAIHx8IEBHTlVMSUJfU1RESU9fSF9TSUdQSVBFQCkKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZnB1dHMKKyMgICBkZWZpbmUgZnB1dHMgcnBsX2ZwdXRzCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZnB1dHMsIGludCwgKGNvbnN0IGNoYXIgKnN0cmluZywgRklMRSAqc3RyZWFtKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKGZwdXRzLCBpbnQsIChjb25zdCBjaGFyICpzdHJpbmcsIEZJTEUgKnN0cmVhbSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChmcHV0cywgaW50LCAoY29uc3QgY2hhciAqc3RyaW5nLCBGSUxFICpzdHJlYW0pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZwdXRzKTsKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9GUkVBREAKKyMgaWYgQFJFUExBQ0VfU1RESU9fUkVBRF9GVU5DU0AgJiYgQEdOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmcmVhZAorIyAgIGRlZmluZSBmcmVhZCBycGxfZnJlYWQKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmcmVhZCwgc2l6ZV90LCAodm9pZCAqcHRyLCBzaXplX3Qgcywgc2l6ZV90IG4sIEZJTEUgKnN0cmVhbSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDQpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmcmVhZCwgc2l6ZV90LCAodm9pZCAqcHRyLCBzaXplX3Qgcywgc2l6ZV90IG4sIEZJTEUgKnN0cmVhbSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChmcmVhZCwgc2l6ZV90LCAodm9pZCAqcHRyLCBzaXplX3Qgcywgc2l6ZV90IG4sIEZJTEUgKnN0cmVhbSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZnJlYWQpOworI2VuZGlmCisKKyNpZiBAR05VTElCX0ZSRU9QRU5ACisjIGlmIEBSRVBMQUNFX0ZSRU9QRU5ACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZyZW9wZW4KKyMgICBkZWZpbmUgZnJlb3BlbiBycGxfZnJlb3BlbgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZyZW9wZW4sIEZJTEUgKiwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSwgRklMRSAqc3RyZWFtKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMiwgMykpKTsKK19HTF9DWFhBTElBU19SUEwgKGZyZW9wZW4sIEZJTEUgKiwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSwgRklMRSAqc3RyZWFtKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZyZW9wZW4sIEZJTEUgKiwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSwgRklMRSAqc3RyZWFtKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmcmVvcGVuKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZnJlb3BlbgorLyogQXNzdW1lIGZyZW9wZW4gaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAoZnJlb3BlbiwKKyAgICAgICAgICAgICAgICAgImZyZW9wZW4gb24gbmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zIGlzIG5vdCBQT1NJWCBjb21wbGlhbnQgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmcmVvcGVuIGZvciBwb3J0YWJpbGl0eSIpOworI2VuZGlmCisKKyNpZiBAR05VTElCX0ZTQ0FORkAKKyMgaWYgQFJFUExBQ0VfU1RESU9fUkVBRF9GVU5DU0AgJiYgQEdOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmc2NhbmYKKyMgICBkZWZpbmUgZnNjYW5mIHJwbF9mc2NhbmYKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmc2NhbmYsIGludCwgKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfU0NBTkZfU1lTVEVNICgyLCAzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmc2NhbmYsIGludCwgKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoZnNjYW5mLCBpbnQsIChGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmc2NhbmYpOworI2VuZGlmCisKKworLyogU2V0IHVwIHRoZSBmb2xsb3dpbmcgd2FybmluZ3MsIGJhc2VkIG9uIHdoaWNoIG1vZHVsZXMgYXJlIGluIHVzZS4KKyAgIEdOVSBDb2RpbmcgU3RhbmRhcmRzIGRpc2NvdXJhZ2UgdGhlIHVzZSBvZiBmc2Vlaywgc2luY2UgaXQgaW1wb3NlcworICAgYW4gYXJiaXRyYXJ5IGxpbWl0YXRpb24gb24gc29tZSAzMi1iaXQgaG9zdHMuICBSZW1lbWJlciB0aGF0IHRoZQorICAgZnNlZWsgbW9kdWxlIGRlcGVuZHMgb24gdGhlIGZzZWVrbyBtb2R1bGUsIHNvIHdlIG9ubHkgaGF2ZSB0aHJlZQorICAgY2FzZXMgdG8gY29uc2lkZXI6CisKKyAgIDEuIFRoZSBkZXZlbG9wZXIgaXMgbm90IHVzaW5nIGVpdGhlciBtb2R1bGUuICBJc3N1ZSBhIHdhcm5pbmcgdW5kZXIKKyAgIEdOVUxJQl9QT1NJWENIRUNLIGZvciBib3RoIGZ1bmN0aW9ucywgdG8gcmVtaW5kIHRoZW0gdGhhdCBib3RoCisgICBmdW5jdGlvbnMgaGF2ZSBidWdzIG9uIHNvbWUgc3lzdGVtcy4gIF9HTF9OT19MQVJHRV9GSUxFUyBoYXMgbm8KKyAgIGltcGFjdCBvbiB0aGlzIHdhcm5pbmcuCisKKyAgIDIuIFRoZSBkZXZlbG9wZXIgaXMgdXNpbmcgYm90aCBtb2R1bGVzLiAgVGhleSBtYXkgYmUgdW5hd2FyZSBvZiB0aGUKKyAgIGFyYml0cmFyeSBsaW1pdGF0aW9ucyBvZiBmc2Vlaywgc28gaXNzdWUgYSB3YXJuaW5nIHVuZGVyCisgICBHTlVMSUJfUE9TSVhDSEVDSy4gIE9uIHRoZSBvdGhlciBoYW5kLCB0aGV5IG1heSBiZSB1c2luZyBib3RoCisgICBtb2R1bGVzIGludGVudGlvbmFsbHksIHNvIHRoZSBkZXZlbG9wZXIgY2FuIGRlZmluZQorICAgX0dMX05PX0xBUkdFX0ZJTEVTIGluIHRoZSBjb21waWxhdGlvbiB1bml0cyB3aGVyZSB0aGUgdXNlIG9mIGZzZWVrCisgICBpcyBzYWZlLCB0byBzaWxlbmNlIHRoZSB3YXJuaW5nLgorCisgICAzLiBUaGUgZGV2ZWxvcGVyIGlzIHVzaW5nIHRoZSBmc2Vla28gbW9kdWxlLCBidXQgbm90IGZzZWVrLiAgR251bGliCisgICBndWFyYW50ZWVzIHRoYXQgZnNlZWsgd2lsbCBzdGlsbCB3b3JrIGFyb3VuZCBwbGF0Zm9ybSBidWdzIGluIHRoYXQKKyAgIGNhc2UsIGJ1dCB3ZSBwcmVzdW1lIHRoYXQgdGhlIGRldmVsb3BlciBpcyBhd2FyZSBvZiB0aGUgcGl0ZmFsbHMgb2YKKyAgIGZzZWVrIGFuZCB3YXMgdHJ5aW5nIHRvIGF2b2lkIGl0LCBzbyBpc3N1ZSBhIHdhcm5pbmcgZXZlbiB3aGVuCisgICBHTlVMSUJfUE9TSVhDSEVDSyBpcyB1bmRlZmluZWQuICBBZ2FpbiwgX0dMX05PX0xBUkdFX0ZJTEVTIGNhbiBiZQorICAgZGVmaW5lZCB0byBzaWxlbmNlIHRoZSB3YXJuaW5nIGluIHBhcnRpY3VsYXIgY29tcGlsYXRpb24gdW5pdHMuCisgICBJbiBDKysgY29tcGlsYXRpb25zIHdpdGggR05VTElCX05BTUVTUEFDRSwgaW4gb3JkZXIgdG8gYXZvaWQgdGhhdAorICAgZnNlZWsgZ2V0cyBkZWZpbmVkIGFzIGEgbWFjcm8sIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlIGRldmVsb3BlcgorICAgdXNlcyB0aGUgZnNlZWsgbW9kdWxlLCBldmVuIGlmIGhlIGlzIG5vdCBjYWxsaW5nIHRoZSBmc2VlayBmdW5jdGlvbi4KKworICAgTW9zdCBnbnVsaWIgY2xpZW50cyB0aGF0IHBlcmZvcm0gc3RyZWFtIG9wZXJhdGlvbnMgc2hvdWxkIGZhbGwgaW50bworICAgY2F0ZWdvcnkgMy4gICovCisKKyNpZiBAR05VTElCX0ZTRUVLQAorIyBpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLICYmICFkZWZpbmVkIF9HTF9OT19MQVJHRV9GSUxFUworIyAgZGVmaW5lIF9HTF9GU0VFS19XQVJOIC8qIENhdGVnb3J5IDIsIGFib3ZlLiAgKi8KKyMgIHVuZGVmIGZzZWVrCisjIGVuZGlmCisjIGlmIEBSRVBMQUNFX0ZTRUVLQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmc2VlaworIyAgIGRlZmluZSBmc2VlayBycGxfZnNlZWsKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmc2VlaywgaW50LCAoRklMRSAqZnAsIGxvbmcgb2Zmc2V0LCBpbnQgd2hlbmNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKGZzZWVrLCBpbnQsIChGSUxFICpmcCwgbG9uZyBvZmZzZXQsIGludCB3aGVuY2UpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoZnNlZWssIGludCwgKEZJTEUgKmZwLCBsb25nIG9mZnNldCwgaW50IHdoZW5jZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZnNlZWspOworI2VuZGlmCisKKyNpZiBAR05VTElCX0ZTRUVLT0AKKyMgaWYgIUBHTlVMSUJfRlNFRUtAICYmICFkZWZpbmVkIF9HTF9OT19MQVJHRV9GSUxFUworIyAgZGVmaW5lIF9HTF9GU0VFS19XQVJOIC8qIENhdGVnb3J5IDMsIGFib3ZlLiAgKi8KKyMgIHVuZGVmIGZzZWVrCisjIGVuZGlmCisjIGlmIEBSRVBMQUNFX0ZTRUVLT0AKKy8qIFByb3ZpZGUgYW4gZnNlZWtvIGZ1bmN0aW9uIHRoYXQgaXMgYXdhcmUgb2YgYSBwcmVjZWRpbmcgZmZsdXNoKCksIGFuZCB3aGljaAorICAgZGV0ZWN0cyBwaXBlcy4gICovCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZzZWVrbworIyAgIGRlZmluZSBmc2Vla28gcnBsX2ZzZWVrbworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZzZWVrbywgaW50LCAoRklMRSAqZnAsIG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZnNlZWtvLCBpbnQsIChGSUxFICpmcCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKSk7CisjIGVsc2UKKyMgIGlmICEgQEhBVkVfREVDTF9GU0VFS09ACitfR0xfRlVOQ0RFQ0xfU1lTIChmc2Vla28sIGludCwgKEZJTEUgKmZwLCBvZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmc2Vla28sIGludCwgKEZJTEUgKmZwLCBvZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZzZWVrbyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIGRlZmluZSBfR0xfRlNFRUtfV0FSTiAvKiBDYXRlZ29yeSAxLCBhYm92ZS4gICovCisjIHVuZGVmIGZzZWVrCisjIHVuZGVmIGZzZWVrbworIyBpZiBIQVZFX1JBV19ERUNMX0ZTRUVLTworX0dMX1dBUk5fT05fVVNFIChmc2Vla28sICJmc2Vla28gaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZzZWVrbyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX0dMX0ZTRUVLX1dBUk4KKyMgdW5kZWYgX0dMX0ZTRUVLX1dBUk4KKy8qIEhlcmUsIGVpdGhlciBmc2VlayBpcyB1bmRlZmluZWQgKGJ1dCBDODkgZ3VhcmFudGVlcyB0aGF0IGl0IGlzCisgICBkZWNsYXJlZCksIG9yIGl0IGlzIGRlZmluZWQgYXMgcnBsX2ZzZWVrIChkZWNsYXJlZCBhYm92ZSkuICAqLworX0dMX1dBUk5fT05fVVNFIChmc2VlaywgImZzZWVrIGNhbm5vdCBoYW5kbGUgZmlsZXMgbGFyZ2VyIHRoYW4gNCBHQiAiCisgICAgICAgICAgICAgICAgICJvbiAzMi1iaXQgcGxhdGZvcm1zIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGZzZWVrbyBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgb2YgbGFyZ2UgZmlsZXMiKTsKKyNlbmRpZgorCisKKy8qIGZ0ZWxsLCBmdGVsbG8uICBTZWUgdGhlIGNvbW1lbnRzIG9uIGZzZWVrL2ZzZWVrby4gICovCisKKyNpZiBAR05VTElCX0ZURUxMQAorIyBpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLICYmICFkZWZpbmVkIF9HTF9OT19MQVJHRV9GSUxFUworIyAgZGVmaW5lIF9HTF9GVEVMTF9XQVJOIC8qIENhdGVnb3J5IDIsIGFib3ZlLiAgKi8KKyMgIHVuZGVmIGZ0ZWxsCisjIGVuZGlmCisjIGlmIEBSRVBMQUNFX0ZURUxMQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmdGVsbAorIyAgIGRlZmluZSBmdGVsbCBycGxfZnRlbGwKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmdGVsbCwgbG9uZywgKEZJTEUgKmZwKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZnRlbGwsIGxvbmcsIChGSUxFICpmcCkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChmdGVsbCwgbG9uZywgKEZJTEUgKmZwKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmdGVsbCk7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfRlRFTExPQAorIyBpZiAhQEdOVUxJQl9GVEVMTEAgJiYgIWRlZmluZWQgX0dMX05PX0xBUkdFX0ZJTEVTCisjICBkZWZpbmUgX0dMX0ZURUxMX1dBUk4gLyogQ2F0ZWdvcnkgMywgYWJvdmUuICAqLworIyAgdW5kZWYgZnRlbGwKKyMgZW5kaWYKKyMgaWYgQFJFUExBQ0VfRlRFTExPQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmdGVsbG8KKyMgICBkZWZpbmUgZnRlbGxvIHJwbF9mdGVsbG8KKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmdGVsbG8sIG9mZl90LCAoRklMRSAqZnApIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmdGVsbG8sIG9mZl90LCAoRklMRSAqZnApKTsKKyMgZWxzZQorIyAgaWYgISBASEFWRV9ERUNMX0ZURUxMT0AKK19HTF9GVU5DREVDTF9TWVMgKGZ0ZWxsbywgb2ZmX3QsIChGSUxFICpmcCkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmdGVsbG8sIG9mZl90LCAoRklMRSAqZnApKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZ0ZWxsbyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIGRlZmluZSBfR0xfRlRFTExfV0FSTiAvKiBDYXRlZ29yeSAxLCBhYm92ZS4gICovCisjIHVuZGVmIGZ0ZWxsCisjIHVuZGVmIGZ0ZWxsbworIyBpZiBIQVZFX1JBV19ERUNMX0ZURUxMTworX0dMX1dBUk5fT05fVVNFIChmdGVsbG8sICJmdGVsbG8gaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZ0ZWxsbyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX0dMX0ZURUxMX1dBUk4KKyMgdW5kZWYgX0dMX0ZURUxMX1dBUk4KKy8qIEhlcmUsIGVpdGhlciBmdGVsbCBpcyB1bmRlZmluZWQgKGJ1dCBDODkgZ3VhcmFudGVlcyB0aGF0IGl0IGlzCisgICBkZWNsYXJlZCksIG9yIGl0IGlzIGRlZmluZWQgYXMgcnBsX2Z0ZWxsIChkZWNsYXJlZCBhYm92ZSkuICAqLworX0dMX1dBUk5fT05fVVNFIChmdGVsbCwgImZ0ZWxsIGNhbm5vdCBoYW5kbGUgZmlsZXMgbGFyZ2VyIHRoYW4gNCBHQiAiCisgICAgICAgICAgICAgICAgICJvbiAzMi1iaXQgcGxhdGZvcm1zIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGZ0ZWxsbyBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgb2YgbGFyZ2UgZmlsZXMiKTsKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX0ZXUklURUAKKyMgaWYgQFJFUExBQ0VfU1RESU9fV1JJVEVfRlVOQ1NAICYmIChAR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkdAIHx8IEBHTlVMSUJfU1RESU9fSF9TSUdQSVBFQCkKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZndyaXRlCisjICAgZGVmaW5lIGZ3cml0ZSBycGxfZndyaXRlCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZndyaXRlLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgcywgc2l6ZV90IG4sIEZJTEUgKnN0cmVhbSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDQpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmd3JpdGUsIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzLCBzaXplX3QgbiwgRklMRSAqc3RyZWFtKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZ3cml0ZSwgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHMsIHNpemVfdCBuLCBGSUxFICpzdHJlYW0pKTsKKworLyogV29yayBhcm91bmQgZ2xpYmMgYnVnIDExOTU5CisgICA8aHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTE5NTk+LAorICAgd2hpY2ggc29tZXRpbWVzIGNhdXNlcyBhbiB1bndhbnRlZCBkaWFnbm9zdGljIGZvciBmd3JpdGUgY2FsbHMuCisgICBUaGlzIGFmZmVjdHMgb25seSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBhdHRyaWJ1dGVzLCBzbyBpdCdzIG5vdAorICAgbmVlZGVkIGZvciBDKysuICAqLworIyAgaWYgIWRlZmluZWQgX19jcGx1c3BsdXMgJiYgMCA8IF9fVVNFX0ZPUlRJRllfTEVWRUwKK19HTF9TVERJT19JTkxJTkUgc2l6ZV90IF9HTF9BUkdfTk9OTlVMTCAoKDEsIDQpKQorcnBsX2Z3cml0ZSAoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgcywgc2l6ZV90IG4sIEZJTEUgKnN0cmVhbSkKK3sKKyAgc2l6ZV90IHIgPSBmd3JpdGUgKHB0ciwgcywgbiwgc3RyZWFtKTsKKyAgKHZvaWQpIHI7CisgIHJldHVybiByOworfQorIyAgIHVuZGVmIGZ3cml0ZQorIyAgIGRlZmluZSBmd3JpdGUgcnBsX2Z3cml0ZQorIyAgZW5kaWYKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZ3cml0ZSk7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfR0VUQ0AKKyMgaWYgQFJFUExBQ0VfU1RESU9fUkVBRF9GVU5DU0AgJiYgQEdOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBnZXRjCisjICAgZGVmaW5lIGdldGMgcnBsX2ZnZXRjCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZmdldGMsIGludCwgKEZJTEUgKnN0cmVhbSkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUExfMSAoZ2V0YywgcnBsX2ZnZXRjLCBpbnQsIChGSUxFICpzdHJlYW0pKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoZ2V0YywgaW50LCAoRklMRSAqc3RyZWFtKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChnZXRjKTsKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9HRVRDSEFSQAorIyBpZiBAUkVQTEFDRV9TVERJT19SRUFEX0ZVTkNTQCAmJiBAR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkdACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGdldGNoYXIKKyMgICBkZWZpbmUgZ2V0Y2hhciBycGxfZ2V0Y2hhcgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGdldGNoYXIsIGludCwgKHZvaWQpKTsKK19HTF9DWFhBTElBU19SUEwgKGdldGNoYXIsIGludCwgKHZvaWQpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoZ2V0Y2hhciwgaW50LCAodm9pZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZ2V0Y2hhcik7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfR0VUREVMSU1ACisvKiBSZWFkIGlucHV0LCB1cCB0byAoYW5kIGluY2x1ZGluZykgdGhlIG5leHQgb2NjdXJyZW5jZSBvZiBERUxJTUlURVIsIGZyb20KKyAgIFNUUkVBTSwgc3RvcmUgaXQgaW4gKkxJTkVQVFIgKGFuZCBOVUwtdGVybWluYXRlIGl0KS4KKyAgICpMSU5FUFRSIGlzIGEgcG9pbnRlciByZXR1cm5lZCBmcm9tIG1hbGxvYyAob3IgTlVMTCksIHBvaW50aW5nIHRvICpMSU5FU0laRQorICAgYnl0ZXMgb2Ygc3BhY2UuICBJdCBpcyByZWFsbG9jJ2QgYXMgbmVjZXNzYXJ5LgorICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBhbmQgc3RvcmVkIGF0ICpMSU5FUFRSIChub3QgaW5jbHVkaW5nIHRoZQorICAgTlVMIHRlcm1pbmF0b3IpLCBvciAtMSBvbiBlcnJvciBvciBFT0YuICAqLworIyBpZiBAUkVQTEFDRV9HRVRERUxJTUAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZ2V0ZGVsaW0KKyMgICBkZWZpbmUgZ2V0ZGVsaW0gcnBsX2dldGRlbGltCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZ2V0ZGVsaW0sIHNzaXplX3QsCisgICAgICAgICAgICAgICAgICAoY2hhciAqKmxpbmVwdHIsIHNpemVfdCAqbGluZXNpemUsIGludCBkZWxpbWl0ZXIsCisgICAgICAgICAgICAgICAgICAgRklMRSAqc3RyZWFtKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMiwgNCkpKTsKK19HTF9DWFhBTElBU19SUEwgKGdldGRlbGltLCBzc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKipsaW5lcHRyLCBzaXplX3QgKmxpbmVzaXplLCBpbnQgZGVsaW1pdGVyLAorICAgICAgICAgICAgICAgICAgIEZJTEUgKnN0cmVhbSkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfREVDTF9HRVRERUxJTUAKK19HTF9GVU5DREVDTF9TWVMgKGdldGRlbGltLCBzc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKipsaW5lcHRyLCBzaXplX3QgKmxpbmVzaXplLCBpbnQgZGVsaW1pdGVyLAorICAgICAgICAgICAgICAgICAgIEZJTEUgKnN0cmVhbSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIsIDQpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZ2V0ZGVsaW0sIHNzaXplX3QsCisgICAgICAgICAgICAgICAgICAoY2hhciAqKmxpbmVwdHIsIHNpemVfdCAqbGluZXNpemUsIGludCBkZWxpbWl0ZXIsCisgICAgICAgICAgICAgICAgICAgRklMRSAqc3RyZWFtKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChnZXRkZWxpbSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGdldGRlbGltCisjIGlmIEhBVkVfUkFXX0RFQ0xfR0VUREVMSU0KK19HTF9XQVJOX09OX1VTRSAoZ2V0ZGVsaW0sICJnZXRkZWxpbSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZ2V0ZGVsaW0gZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfR0VUTElORUAKKy8qIFJlYWQgYSBsaW5lLCB1cCB0byAoYW5kIGluY2x1ZGluZykgdGhlIG5leHQgbmV3bGluZSwgZnJvbSBTVFJFQU0sIHN0b3JlIGl0CisgICBpbiAqTElORVBUUiAoYW5kIE5VTC10ZXJtaW5hdGUgaXQpLgorICAgKkxJTkVQVFIgaXMgYSBwb2ludGVyIHJldHVybmVkIGZyb20gbWFsbG9jIChvciBOVUxMKSwgcG9pbnRpbmcgdG8gKkxJTkVTSVpFCisgICBieXRlcyBvZiBzcGFjZS4gIEl0IGlzIHJlYWxsb2MnZCBhcyBuZWNlc3NhcnkuCisgICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyByZWFkIGFuZCBzdG9yZWQgYXQgKkxJTkVQVFIgKG5vdCBpbmNsdWRpbmcgdGhlCisgICBOVUwgdGVybWluYXRvciksIG9yIC0xIG9uIGVycm9yIG9yIEVPRi4gICovCisjIGlmIEBSRVBMQUNFX0dFVExJTkVACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGdldGxpbmUKKyMgICBkZWZpbmUgZ2V0bGluZSBycGxfZ2V0bGluZQorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGdldGxpbmUsIHNzaXplX3QsCisgICAgICAgICAgICAgICAgICAoY2hhciAqKmxpbmVwdHIsIHNpemVfdCAqbGluZXNpemUsIEZJTEUgKnN0cmVhbSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIsIDMpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChnZXRsaW5lLCBzc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKipsaW5lcHRyLCBzaXplX3QgKmxpbmVzaXplLCBGSUxFICpzdHJlYW0pKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0RFQ0xfR0VUTElORUAKK19HTF9GVU5DREVDTF9TWVMgKGdldGxpbmUsIHNzaXplX3QsCisgICAgICAgICAgICAgICAgICAoY2hhciAqKmxpbmVwdHIsIHNpemVfdCAqbGluZXNpemUsIEZJTEUgKnN0cmVhbSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIsIDMpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZ2V0bGluZSwgc3NpemVfdCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqbGluZXB0ciwgc2l6ZV90ICpsaW5lc2l6ZSwgRklMRSAqc3RyZWFtKSk7CisjIGVuZGlmCisjIGlmIEBIQVZFX0RFQ0xfR0VUTElORUAKK19HTF9DWFhBTElBU1dBUk4gKGdldGxpbmUpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBnZXRsaW5lCisjIGlmIEhBVkVfUkFXX0RFQ0xfR0VUTElORQorX0dMX1dBUk5fT05fVVNFIChnZXRsaW5lLCAiZ2V0bGluZSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZ2V0bGluZSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBJdCBpcyB2ZXJ5IHJhcmUgdGhhdCB0aGUgZGV2ZWxvcGVyIGV2ZXIgaGFzIGZ1bGwgY29udHJvbCBvZiBzdGRpbiwKKyAgIHNvIGFueSB1c2Ugb2YgZ2V0cyB3YXJyYW50cyBhbiB1bmNvbmRpdGlvbmFsIHdhcm5pbmc7IGJlc2lkZXMsIEMxMQorICAgcmVtb3ZlZCBpdC4gICovCisjdW5kZWYgZ2V0cworI2lmIEhBVkVfUkFXX0RFQ0xfR0VUUworX0dMX1dBUk5fT05fVVNFIChnZXRzLCAiZ2V0cyBpcyBhIHNlY3VyaXR5IGhvbGUgLSB1c2UgZmdldHMgaW5zdGVhZCIpOworI2VuZGlmCisKKworI2lmIEBHTlVMSUJfT0JTVEFDS19QUklOVEZAIHx8IEBHTlVMSUJfT0JTVEFDS19QUklOVEZfUE9TSVhACitzdHJ1Y3Qgb2JzdGFjazsKKy8qIEdyb3cgYW4gb2JzdGFjayB3aXRoIGZvcm1hdHRlZCBvdXRwdXQuICBSZXR1cm4gdGhlIG51bWJlciBvZgorICAgYnl0ZXMgYWRkZWQgdG8gT0JTLiAgTm8gdHJhaWxpbmcgbnVsIGJ5dGUgaXMgYWRkZWQsIGFuZCB0aGUKKyAgIG9iamVjdCBzaG91bGQgYmUgY2xvc2VkIHdpdGggb2JzdGFja19maW5pc2ggYmVmb3JlIHVzZS4gIFVwb24KKyAgIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yLCBjYWxsIG9ic3RhY2tfYWxsb2NfZmFpbGVkX2hhbmRsZXIuICBVcG9uCisgICBvdGhlciBlcnJvciwgcmV0dXJuIC0xLiAgKi8KKyMgaWYgQFJFUExBQ0VfT0JTVEFDS19QUklOVEZACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBvYnN0YWNrX3ByaW50ZiBycGxfb2JzdGFja19wcmludGYKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChvYnN0YWNrX3ByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKHN0cnVjdCBvYnN0YWNrICpvYnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgyLCAzKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKG9ic3RhY2tfcHJpbnRmLCBpbnQsCisgICAgICAgICAgICAgICAgICAoc3RydWN0IG9ic3RhY2sgKm9icywgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0RFQ0xfT0JTVEFDS19QUklOVEZACitfR0xfRlVOQ0RFQ0xfU1lTIChvYnN0YWNrX3ByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKHN0cnVjdCBvYnN0YWNrICpvYnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgyLCAzKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChvYnN0YWNrX3ByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKHN0cnVjdCBvYnN0YWNrICpvYnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChvYnN0YWNrX3ByaW50Zik7CisjIGlmIEBSRVBMQUNFX09CU1RBQ0tfUFJJTlRGQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgb2JzdGFja192cHJpbnRmIHJwbF9vYnN0YWNrX3ZwcmludGYKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChvYnN0YWNrX3ZwcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgb2JzdGFjayAqb2JzLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URiAoMiwgMCkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChvYnN0YWNrX3ZwcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgb2JzdGFjayAqb2JzLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykpOworIyBlbHNlCisjICBpZiAhQEhBVkVfREVDTF9PQlNUQUNLX1BSSU5URkAKK19HTF9GVU5DREVDTF9TWVMgKG9ic3RhY2tfdnByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKHN0cnVjdCBvYnN0YWNrICpvYnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgyLCAwKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChvYnN0YWNrX3ZwcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgb2JzdGFjayAqb2JzLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAob2JzdGFja192cHJpbnRmKTsKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9QQ0xPU0VACisjIGlmICFASEFWRV9QQ0xPU0VACitfR0xfRlVOQ0RFQ0xfU1lTIChwY2xvc2UsIGludCwgKEZJTEUgKnN0cmVhbSkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBjbG9zZSwgaW50LCAoRklMRSAqc3RyZWFtKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChwY2xvc2UpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwY2xvc2UKKyMgaWYgSEFWRV9SQVdfREVDTF9QQ0xPU0UKK19HTF9XQVJOX09OX1VTRSAocGNsb3NlLCAicGNsb3NlIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwY2xvc2UgZm9yIG1vcmUgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9QRVJST1JACisvKiBQcmludCBhIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGRlc2NyaWJpbmcgdGhlIHZhbHVlIG9mIEVSUk5PLAorICAgKGlmIFNUUklORyBpcyBub3QgTlVMTCBhbmQgbm90IGVtcHR5KSBwcmVmaXhlZCB3aXRoIFNUUklORyBhbmQgIjogIiwKKyAgIGFuZCB0ZXJtaW5hdGVkIHdpdGggYSBuZXdsaW5lLiAgKi8KKyMgaWYgQFJFUExBQ0VfUEVSUk9SQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgcGVycm9yIHJwbF9wZXJyb3IKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwZXJyb3IsIHZvaWQsIChjb25zdCBjaGFyICpzdHJpbmcpKTsKK19HTF9DWFhBTElBU19SUEwgKHBlcnJvciwgdm9pZCwgKGNvbnN0IGNoYXIgKnN0cmluZykpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChwZXJyb3IsIHZvaWQsIChjb25zdCBjaGFyICpzdHJpbmcpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHBlcnJvcik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHBlcnJvcgorLyogQXNzdW1lIHBlcnJvciBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFIChwZXJyb3IsICJwZXJyb3IgaXMgbm90IGFsd2F5cyBQT1NJWCBjb21wbGlhbnQgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwZXJyb3IgZm9yIHBvcnRhYmlsaXR5Iik7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfUE9QRU5ACisjIGlmIEBSRVBMQUNFX1BPUEVOQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBwb3BlbgorIyAgIGRlZmluZSBwb3BlbiBycGxfcG9wZW4KKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwb3BlbiwgRklMRSAqLCAoY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICptb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHBvcGVuLCBGSUxFICosIChjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKm1vZGUpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX1BPUEVOQAorX0dMX0ZVTkNERUNMX1NZUyAocG9wZW4sIEZJTEUgKiwgKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocG9wZW4sIEZJTEUgKiwgKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqbW9kZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocG9wZW4pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3BlbgorIyBpZiBIQVZFX1JBV19ERUNMX1BPUEVOCitfR0xfV0FSTl9PTl9VU0UgKHBvcGVuLCAicG9wZW4gaXMgYnVnZ3kgb24gc29tZSBwbGF0Zm9ybXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwb3BlbiBvciBwaXBlIGZvciBtb3JlIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfUFJJTlRGX1BPU0lYQCB8fCBAR05VTElCX1BSSU5URkAKKyMgaWYgKEBHTlVMSUJfUFJJTlRGX1BPU0lYQCAmJiBAUkVQTEFDRV9QUklOVEZAKSBcCisgICAgIHx8IChAR05VTElCX1BSSU5URkAgJiYgQFJFUExBQ0VfU1RESU9fV1JJVEVfRlVOQ1NAICYmIChAR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkdAIHx8IEBHTlVMSUJfU1RESU9fSF9TSUdQSVBFQCkpCisjICBpZiBkZWZpbmVkIF9fR05VQ19fCisjICAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKy8qIERvbid0IGJyZWFrIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsTSxOKSkpLiAgKi8KKyMgICAgZGVmaW5lIHByaW50ZiBfX3ByaW50Zl9fCisjICAgZW5kaWYKKyMgICBpZiBAR05VTElCX1BSSU5URl9QT1NJWEAgfHwgQEdOVUxJQl9WRlBSSU5URl9QT1NJWEAKK19HTF9GVU5DREVDTF9SUExfMSAoX19wcmludGZfXywgaW50LAorICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gKEBBU01fU1lNQk9MX1BSRUZJWEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX1NURElPX01BQ1JPRVhQQU5EX0FORF9TVFJJTkdJWkUocnBsX3ByaW50ZikpCisgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URiAoMSwgMikKKyAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgICBlbHNlCitfR0xfRlVOQ0RFQ0xfUlBMXzEgKF9fcHJpbnRmX18sIGludCwKKyAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIChAQVNNX1NZTUJPTF9QUkVGSVhACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9TVERJT19NQUNST0VYUEFORF9BTkRfU1RSSU5HSVpFKHJwbF9wcmludGYpKQorICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEZfU1lTVEVNICgxLCAyKQorICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgIGVuZGlmCitfR0xfQ1hYQUxJQVNfUlBMXzEgKHByaW50ZiwgX19wcmludGZfXywgaW50LCAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKTsKKyMgIGVsc2UKKyMgICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgICBkZWZpbmUgcHJpbnRmIHJwbF9wcmludGYKKyMgICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocHJpbnRmLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEYgKDEsIDIpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocHJpbnRmLCBpbnQsIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworIyAgZW5kaWYKKyMgIGRlZmluZSBHTlVMSUJfb3ZlcnJpZGVzX3ByaW50ZiAxCisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKHByaW50ZiwgaW50LCAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHByaW50Zik7CisjZW5kaWYKKyNpZiAhQEdOVUxJQl9QUklOVEZfUE9TSVhAICYmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgaWYgIUdOVUxJQl9vdmVycmlkZXNfcHJpbnRmCisjICB1bmRlZiBwcmludGYKKyMgZW5kaWYKKy8qIEFzc3VtZSBwcmludGYgaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAocHJpbnRmLCAicHJpbnRmIGlzIG5vdCBhbHdheXMgUE9TSVggY29tcGxpYW50IC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcHJpbnRmLXBvc2l4IGZvciBwb3J0YWJsZSAiCisgICAgICAgICAgICAgICAgICJQT1NJWCBjb21wbGlhbmNlIik7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfUFVUQ0AKKyMgaWYgQFJFUExBQ0VfU1RESU9fV1JJVEVfRlVOQ1NAICYmIChAR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkdAIHx8IEBHTlVMSUJfU1RESU9fSF9TSUdQSVBFQCkKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcHV0YworIyAgIGRlZmluZSBwdXRjIHJwbF9mcHV0YworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZwdXRjLCBpbnQsIChpbnQgYywgRklMRSAqc3RyZWFtKSBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTF8xIChwdXRjLCBycGxfZnB1dGMsIGludCwgKGludCBjLCBGSUxFICpzdHJlYW0pKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAocHV0YywgaW50LCAoaW50IGMsIEZJTEUgKnN0cmVhbSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocHV0Yyk7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfUFVUQ0hBUkAKKyMgaWYgQFJFUExBQ0VfU1RESU9fV1JJVEVfRlVOQ1NAICYmIChAR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkdAIHx8IEBHTlVMSUJfU1RESU9fSF9TSUdQSVBFQCkKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcHV0Y2hhcgorIyAgIGRlZmluZSBwdXRjaGFyIHJwbF9wdXRjaGFyCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocHV0Y2hhciwgaW50LCAoaW50IGMpKTsKK19HTF9DWFhBTElBU19SUEwgKHB1dGNoYXIsIGludCwgKGludCBjKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKHB1dGNoYXIsIGludCwgKGludCBjKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwdXRjaGFyKTsKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9QVVRTQAorIyBpZiBAUkVQTEFDRV9TVERJT19XUklURV9GVU5DU0AgJiYgKEBHTlVMSUJfU1RESU9fSF9OT05CTE9DS0lOR0AgfHwgQEdOVUxJQl9TVERJT19IX1NJR1BJUEVAKQorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBwdXRzCisjICAgZGVmaW5lIHB1dHMgcnBsX3B1dHMKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwdXRzLCBpbnQsIChjb25zdCBjaGFyICpzdHJpbmcpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwdXRzLCBpbnQsIChjb25zdCBjaGFyICpzdHJpbmcpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAocHV0cywgaW50LCAoY29uc3QgY2hhciAqc3RyaW5nKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwdXRzKTsKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9SRU1PVkVACisjIGlmIEBSRVBMQUNFX1JFTU9WRUAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcmVtb3ZlCisjICAgZGVmaW5lIHJlbW92ZSBycGxfcmVtb3ZlCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocmVtb3ZlLCBpbnQsIChjb25zdCBjaGFyICpuYW1lKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocmVtb3ZlLCBpbnQsIChjb25zdCBjaGFyICpuYW1lKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKHJlbW92ZSwgaW50LCAoY29uc3QgY2hhciAqbmFtZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocmVtb3ZlKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcmVtb3ZlCisvKiBBc3N1bWUgcmVtb3ZlIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKHJlbW92ZSwgInJlbW92ZSBjYW5ub3QgaGFuZGxlIGRpcmVjdG9yaWVzIG9uIHNvbWUgcGxhdGZvcm1zIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmVtb3ZlIGZvciBtb3JlIHBvcnRhYmlsaXR5Iik7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfUkVOQU1FQAorIyBpZiBAUkVQTEFDRV9SRU5BTUVACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHJlbmFtZQorIyAgIGRlZmluZSByZW5hbWUgcnBsX3JlbmFtZQorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHJlbmFtZSwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKm9sZF9maWxlbmFtZSwgY29uc3QgY2hhciAqbmV3X2ZpbGVuYW1lKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHJlbmFtZSwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKm9sZF9maWxlbmFtZSwgY29uc3QgY2hhciAqbmV3X2ZpbGVuYW1lKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKHJlbmFtZSwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKm9sZF9maWxlbmFtZSwgY29uc3QgY2hhciAqbmV3X2ZpbGVuYW1lKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChyZW5hbWUpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiByZW5hbWUKKy8qIEFzc3VtZSByZW5hbWUgaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAocmVuYW1lLCAicmVuYW1lIGlzIGJ1Z2d5IG9uIHNvbWUgcGxhdGZvcm1zIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmVuYW1lIGZvciBtb3JlIHBvcnRhYmlsaXR5Iik7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfUkVOQU1FQVRACisjIGlmIEBSRVBMQUNFX1JFTkFNRUFUQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiByZW5hbWVhdAorIyAgIGRlZmluZSByZW5hbWVhdCBycGxfcmVuYW1lYXQKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChyZW5hbWVhdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZDEsIGNoYXIgY29uc3QgKmZpbGUxLCBpbnQgZmQyLCBjaGFyIGNvbnN0ICpmaWxlMikKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIsIDQpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChyZW5hbWVhdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZDEsIGNoYXIgY29uc3QgKmZpbGUxLCBpbnQgZmQyLCBjaGFyIGNvbnN0ICpmaWxlMikpOworIyBlbHNlCisjICBpZiAhQEhBVkVfUkVOQU1FQVRACitfR0xfRlVOQ0RFQ0xfU1lTIChyZW5hbWVhdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZDEsIGNoYXIgY29uc3QgKmZpbGUxLCBpbnQgZmQyLCBjaGFyIGNvbnN0ICpmaWxlMikKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIsIDQpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocmVuYW1lYXQsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQxLCBjaGFyIGNvbnN0ICpmaWxlMSwgaW50IGZkMiwgY2hhciBjb25zdCAqZmlsZTIpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHJlbmFtZWF0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcmVuYW1lYXQKKyMgaWYgSEFWRV9SQVdfREVDTF9SRU5BTUVBVAorX0dMX1dBUk5fT05fVVNFIChyZW5hbWVhdCwgInJlbmFtZWF0IGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHJlbmFtZWF0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX1NDQU5GQAorIyBpZiBAUkVQTEFDRV9TVERJT19SRUFEX0ZVTkNTQCAmJiBAR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkdACisjICBpZiBkZWZpbmVkIF9fR05VQ19fCisjICAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICAgdW5kZWYgc2NhbmYKKy8qIERvbid0IGJyZWFrIF9fYXR0cmlidXRlX18oKGZvcm1hdChzY2FuZixNLE4pKSkuICAqLworIyAgICBkZWZpbmUgc2NhbmYgX19zY2FuZl9fCisjICAgZW5kaWYKK19HTF9GVU5DREVDTF9SUExfMSAoX19zY2FuZl9fLCBpbnQsCisgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgX19hc21fXyAoQEFTTV9TWU1CT0xfUFJFRklYQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfU1RESU9fTUFDUk9FWFBBTkRfQU5EX1NUUklOR0laRShycGxfc2NhbmYpKQorICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9TQ0FORl9TWVNURU0gKDEsIDIpCisgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMXzEgKHNjYW5mLCBfX3NjYW5mX18sIGludCwgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisjICBlbHNlCisjICAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICAgdW5kZWYgc2NhbmYKKyMgICAgZGVmaW5lIHNjYW5mIHJwbF9zY2FuZgorIyAgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChzY2FuZiwgaW50LCAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9TQ0FORl9TWVNURU0gKDEsIDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoc2NhbmYsIGludCwgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisjICBlbmRpZgorIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChzY2FuZiwgaW50LCAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHNjYW5mKTsKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9TTlBSSU5URkAKKyMgaWYgQFJFUExBQ0VfU05QUklOVEZACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBzbnByaW50ZiBycGxfc25wcmludGYKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChzbnByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKnN0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgzLCA0KQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMykpKTsKK19HTF9DWFhBTElBU19SUEwgKHNucHJpbnRmLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY2hhciAqc3RyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0RFQ0xfU05QUklOVEZACitfR0xfRlVOQ0RFQ0xfU1lTIChzbnByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKnN0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgzLCA0KQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMykpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzbnByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKnN0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzbnByaW50Zik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHNucHJpbnRmCisjIGlmIEhBVkVfUkFXX0RFQ0xfU05QUklOVEYKK19HTF9XQVJOX09OX1VTRSAoc25wcmludGYsICJzbnByaW50ZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc25wcmludGYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworLyogU29tZSBwZW9wbGUgd291bGQgYXJndWUgdGhhdCBhbGwgc3ByaW50ZiB1c2VzIHNob3VsZCBiZSB3YXJuZWQgYWJvdXQKKyAgIChmb3IgZXhhbXBsZSwgT3BlbkJTRCBpc3N1ZXMgYSBsaW5rIHdhcm5pbmcgZm9yIGl0KSwKKyAgIHNpbmNlIGl0IGNhbiBjYXVzZSBzZWN1cml0eSBob2xlcyBkdWUgdG8gYnVmZmVyIG92ZXJydW5zLgorICAgSG93ZXZlciwgd2UgYmVsaWV2ZSB0aGF0IHNwcmludGYgY2FuIGJlIHVzZWQgc2FmZWx5LCBhbmQgaXMgbW9yZQorICAgZWZmaWNpZW50IHRoYW4gc25wcmludGYgaW4gdGhvc2Ugc2FmZSBjYXNlczsgYW5kIGFzIHByb29mIG9mIG91cgorICAgYmVsaWVmLCB3ZSB1c2Ugc3ByaW50ZiBpbiBzZXZlcmFsIGdudWxpYiBtb2R1bGVzLiAgU28gdGhpcyBoZWFkZXIKKyAgIGludGVudGlvbmFsbHkgYXZvaWRzIGFkZGluZyBhIHdhcm5pbmcgdG8gc3ByaW50ZiBleGNlcHQgd2hlbgorICAgR05VTElCX1BPU0lYQ0hFQ0sgaXMgZGVmaW5lZC4gICovCisKKyNpZiBAR05VTElCX1NQUklOVEZfUE9TSVhACisjIGlmIEBSRVBMQUNFX1NQUklOVEZACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBzcHJpbnRmIHJwbF9zcHJpbnRmCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc3ByaW50ZiwgaW50LCAoY2hhciAqc3RyLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgyLCAzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoc3ByaW50ZiwgaW50LCAoY2hhciAqc3RyLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChzcHJpbnRmLCBpbnQsIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzcHJpbnRmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc3ByaW50ZgorLyogQXNzdW1lIHNwcmludGYgaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAoc3ByaW50ZiwgInNwcmludGYgaXMgbm90IGFsd2F5cyBQT1NJWCBjb21wbGlhbnQgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzcHJpbnRmLXBvc2l4IGZvciBwb3J0YWJsZSAiCisgICAgICAgICAgICAgICAgICJQT1NJWCBjb21wbGlhbmNlIik7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfVE1QRklMRUAKKyMgaWYgQFJFUExBQ0VfVE1QRklMRUAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHRtcGZpbGUgcnBsX3RtcGZpbGUKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh0bXBmaWxlLCBGSUxFICosICh2b2lkKSk7CitfR0xfQ1hYQUxJQVNfUlBMICh0bXBmaWxlLCBGSUxFICosICh2b2lkKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKHRtcGZpbGUsIEZJTEUgKiwgKHZvaWQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHRtcGZpbGUpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB0bXBmaWxlCisjIGlmIEhBVkVfUkFXX0RFQ0xfVE1QRklMRQorX0dMX1dBUk5fT05fVVNFICh0bXBmaWxlLCAidG1wZmlsZSBpcyBub3QgdXNhYmxlIG9uIG1pbmd3IC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgdG1wZmlsZSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9WQVNQUklOVEZACisvKiBXcml0ZSBmb3JtYXR0ZWQgb3V0cHV0IHRvIGEgc3RyaW5nIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB3aXRoIG1hbGxvYygpLgorICAgSWYgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHN1Y2NlZWRzLCBzdG9yZSB0aGUgYWRkcmVzcyBvZiB0aGUgc3RyaW5nIGluCisgICAqUkVTVUxUIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiByZXN1bHRpbmcgYnl0ZXMsIGV4Y2x1ZGluZyB0aGUgdHJhaWxpbmcKKyAgIE5VTC4gIFVwb24gbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IsIG9yIHNvbWUgb3RoZXIgZXJyb3IsIHJldHVybiAtMS4gICovCisjIGlmIEBSRVBMQUNFX1ZBU1BSSU5URkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGFzcHJpbnRmIHJwbF9hc3ByaW50ZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGFzcHJpbnRmLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY2hhciAqKnJlc3VsdCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEYgKDIsIDMpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoYXNwcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqcmVzdWx0LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworIyBlbHNlCisjICBpZiAhQEhBVkVfVkFTUFJJTlRGQAorX0dMX0ZVTkNERUNMX1NZUyAoYXNwcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqcmVzdWx0LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URiAoMiwgMykKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoYXNwcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqcmVzdWx0LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoYXNwcmludGYpOworIyBpZiBAUkVQTEFDRV9WQVNQUklOVEZACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSB2YXNwcmludGYgcnBsX3Zhc3ByaW50ZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHZhc3ByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKipyZXN1bHQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgyLCAwKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHZhc3ByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKipyZXN1bHQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9WQVNQUklOVEZACitfR0xfRlVOQ0RFQ0xfU1lTICh2YXNwcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqcmVzdWx0LCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URiAoMiwgMCkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAodmFzcHJpbnRmLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY2hhciAqKnJlc3VsdCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHZhc3ByaW50Zik7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfVkRQUklOVEZACisjIGlmIEBSRVBMQUNFX1ZEUFJJTlRGQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgdmRwcmludGYgcnBsX3ZkcHJpbnRmCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAodmRwcmludGYsIGludCwgKGludCBmZCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEYgKDIsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAodmRwcmludGYsIGludCwgKGludCBmZCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX1ZEUFJJTlRGQAorX0dMX0ZVTkNERUNMX1NZUyAodmRwcmludGYsIGludCwgKGludCBmZCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEYgKDIsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyAgZW5kaWYKKy8qIE5lZWQgdG8gY2FzdCwgYmVjYXVzZSBvbiBTb2xhcmlzLCB0aGUgdGhpcmQgcGFyYW1ldGVyIHdpbGwgbGlrZWx5IGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YV9saXN0IGFyZ3MuICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUICh2ZHByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAoaW50IGZkLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAodmRwcmludGYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB2ZHByaW50ZgorIyBpZiBIQVZFX1JBV19ERUNMX1ZEUFJJTlRGCitfR0xfV0FSTl9PTl9VU0UgKHZkcHJpbnRmLCAidmRwcmludGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHZkcHJpbnRmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX1ZGUFJJTlRGX1BPU0lYQCB8fCBAR05VTElCX1ZGUFJJTlRGQAorIyBpZiAoQEdOVUxJQl9WRlBSSU5URl9QT1NJWEAgJiYgQFJFUExBQ0VfVkZQUklOVEZAKSBcCisgICAgIHx8IChAR05VTElCX1ZGUFJJTlRGQCAmJiBAUkVQTEFDRV9TVERJT19XUklURV9GVU5DU0AgJiYgKEBHTlVMSUJfU1RESU9fSF9OT05CTE9DS0lOR0AgfHwgQEdOVUxJQl9TVERJT19IX1NJR1BJUEVAKSkKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHZmcHJpbnRmIHJwbF92ZnByaW50ZgorIyAgZW5kaWYKKyMgIGRlZmluZSBHTlVMSUJfb3ZlcnJpZGVzX3ZmcHJpbnRmIDEKKyMgIGlmIEBHTlVMSUJfVkZQUklOVEZfUE9TSVhACitfR0xfRlVOQ0RFQ0xfUlBMICh2ZnByaW50ZiwgaW50LCAoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgyLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVsc2UKK19HTF9GVU5DREVDTF9SUEwgKHZmcHJpbnRmLCBpbnQsIChGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEZfU1lTVEVNICgyLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfUlBMICh2ZnByaW50ZiwgaW50LCAoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKSk7CisjIGVsc2UKKy8qIE5lZWQgdG8gY2FzdCwgYmVjYXVzZSBvbiBTb2xhcmlzLCB0aGUgdGhpcmQgcGFyYW1ldGVyIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ZhX2xpc3QgYXJncworICAgYW5kIEdDQydzIGZpeGluY2x1ZGVzIGRpZCBub3QgY2hhbmdlIHRoaXMgdG8gX19nbnVjX3ZhX2xpc3QuICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUICh2ZnByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOICh2ZnByaW50Zik7CisjZW5kaWYKKyNpZiAhQEdOVUxJQl9WRlBSSU5URl9QT1NJWEAgJiYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyBpZiAhR05VTElCX292ZXJyaWRlc192ZnByaW50ZgorIyAgdW5kZWYgdmZwcmludGYKKyMgZW5kaWYKKy8qIEFzc3VtZSB2ZnByaW50ZiBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFICh2ZnByaW50ZiwgInZmcHJpbnRmIGlzIG5vdCBhbHdheXMgUE9TSVggY29tcGxpYW50IC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgdmZwcmludGYtcG9zaXggZm9yIHBvcnRhYmxlICIKKyAgICAgICAgICAgICAgICAgICAgICAiUE9TSVggY29tcGxpYW5jZSIpOworI2VuZGlmCisKKyNpZiBAR05VTElCX1ZGU0NBTkZACisjIGlmIEBSRVBMQUNFX1NURElPX1JFQURfRlVOQ1NAICYmIEBHTlVMSUJfU1RESU9fSF9OT05CTE9DS0lOR0AKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgdmZzY2FuZgorIyAgIGRlZmluZSB2ZnNjYW5mIHJwbF92ZnNjYW5mCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAodmZzY2FuZiwgaW50LAorICAgICAgICAgICAgICAgICAgKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9TQ0FORl9TWVNURU0gKDIsIDApCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAodmZzY2FuZiwgaW50LAorICAgICAgICAgICAgICAgICAgKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAodmZzY2FuZiwgaW50LAorICAgICAgICAgICAgICAgICAgKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHZmc2NhbmYpOworI2VuZGlmCisKKyNpZiBAR05VTElCX1ZQUklOVEZfUE9TSVhAIHx8IEBHTlVMSUJfVlBSSU5URkAKKyMgaWYgKEBHTlVMSUJfVlBSSU5URl9QT1NJWEAgJiYgQFJFUExBQ0VfVlBSSU5URkApIFwKKyAgICAgfHwgKEBHTlVMSUJfVlBSSU5URkAgJiYgQFJFUExBQ0VfU1RESU9fV1JJVEVfRlVOQ1NAICYmIChAR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkdAIHx8IEBHTlVMSUJfU1RESU9fSF9TSUdQSVBFQCkpCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSB2cHJpbnRmIHJwbF92cHJpbnRmCisjICBlbmRpZgorIyAgZGVmaW5lIEdOVUxJQl9vdmVycmlkZXNfdnByaW50ZiAxCisjICBpZiBAR05VTElCX1ZQUklOVEZfUE9TSVhAIHx8IEBHTlVMSUJfVkZQUklOVEZfUE9TSVhACitfR0xfRlVOQ0RFQ0xfUlBMICh2cHJpbnRmLCBpbnQsIChjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgxLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZWxzZQorX0dMX0ZVTkNERUNMX1JQTCAodnByaW50ZiwgaW50LCAoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URl9TWVNURU0gKDEsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1JQTCAodnByaW50ZiwgaW50LCAoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZWxzZQorLyogTmVlZCB0byBjYXN0LCBiZWNhdXNlIG9uIFNvbGFyaXMsIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YV9saXN0IGFyZ3MKKyAgIGFuZCBHQ0MncyBmaXhpbmNsdWRlcyBkaWQgbm90IGNoYW5nZSB0aGlzIHRvIF9fZ251Y192YV9saXN0LiAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVCAodnByaW50ZiwgaW50LCAoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHZwcmludGYpOworI2VuZGlmCisjaWYgIUBHTlVMSUJfVlBSSU5URl9QT1NJWEAgJiYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyBpZiAhR05VTElCX292ZXJyaWRlc192cHJpbnRmCisjICB1bmRlZiB2cHJpbnRmCisjIGVuZGlmCisvKiBBc3N1bWUgdnByaW50ZiBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFICh2cHJpbnRmLCAidnByaW50ZiBpcyBub3QgYWx3YXlzIFBPU0lYIGNvbXBsaWFudCAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHZwcmludGYtcG9zaXggZm9yIHBvcnRhYmxlICIKKyAgICAgICAgICAgICAgICAgIlBPU0lYIGNvbXBsaWFuY2UiKTsKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9WU0NBTkZACisjIGlmIEBSRVBMQUNFX1NURElPX1JFQURfRlVOQ1NAICYmIEBHTlVMSUJfU1RESU9fSF9OT05CTE9DS0lOR0AKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgdnNjYW5mCisjICAgZGVmaW5lIHZzY2FuZiBycGxfdnNjYW5mCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAodnNjYW5mLCBpbnQsIChjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9TQ0FORl9TWVNURU0gKDEsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHZzY2FuZiwgaW50LCAoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAodnNjYW5mLCBpbnQsIChjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAodnNjYW5mKTsKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9WU05QUklOVEZACisjIGlmIEBSRVBMQUNFX1ZTTlBSSU5URkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHZzbnByaW50ZiBycGxfdnNucHJpbnRmCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAodnNucHJpbnRmLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY2hhciAqc3RyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEYgKDMsIDApCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgzKSkpOworX0dMX0NYWEFMSUFTX1JQTCAodnNucHJpbnRmLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY2hhciAqc3RyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0RFQ0xfVlNOUFJJTlRGQAorX0dMX0ZVTkNERUNMX1NZUyAodnNucHJpbnRmLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY2hhciAqc3RyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEYgKDMsIDApCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgzKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHZzbnByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKnN0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOICh2c25wcmludGYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB2c25wcmludGYKKyMgaWYgSEFWRV9SQVdfREVDTF9WU05QUklOVEYKK19HTF9XQVJOX09OX1VTRSAodnNucHJpbnRmLCAidnNucHJpbnRmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB2c25wcmludGYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfVlNQUklOVEZfUE9TSVhACisjIGlmIEBSRVBMQUNFX1ZTUFJJTlRGQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgdnNwcmludGYgcnBsX3ZzcHJpbnRmCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAodnNwcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgyLCAwKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHZzcHJpbnRmLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY2hhciAqc3RyLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykpOworIyBlbHNlCisvKiBOZWVkIHRvIGNhc3QsIGJlY2F1c2Ugb24gU29sYXJpcywgdGhlIHRoaXJkIHBhcmFtZXRlciBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFfbGlzdCBhcmdzCisgICBhbmQgR0NDJ3MgZml4aW5jbHVkZXMgZGlkIG5vdCBjaGFuZ2UgdGhpcyB0byBfX2dudWNfdmFfbGlzdC4gICovCitfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKHZzcHJpbnRmLCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOICh2c3ByaW50Zik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHZzcHJpbnRmCisvKiBBc3N1bWUgdnNwcmludGYgaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAodnNwcmludGYsICJ2c3ByaW50ZiBpcyBub3QgYWx3YXlzIFBPU0lYIGNvbXBsaWFudCAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHZzcHJpbnRmLXBvc2l4IGZvciBwb3J0YWJsZSAiCisgICAgICAgICAgICAgICAgICAgICAgIlBPU0lYIGNvbXBsaWFuY2UiKTsKKyNlbmRpZgorCitfR0xfSU5MSU5FX0hFQURFUl9FTkQKKworI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TVERJT19IICovCisjZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NURElPX0ggKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL3N0ZGxpYi5pbi5oIGIvbGliL3N0ZGxpYi5pbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NTU4NDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc3RkbGliLmluLmgKQEAgLTAsMCArMSw5MzcgQEAKKy8qIEEgR05VLWxpa2UgPHN0ZGxpYi5oPi4KKworICAgQ29weXJpZ2h0IChDKSAxOTk1LCAyMDAxLTIwMDQsIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmIF9fR05VQ19fID49IDMKK0BQUkFHTUFfU1lTVEVNX0hFQURFUkAKKyNlbmRpZgorQFBSQUdNQV9DT0xVTU5TQAorCisjaWYgZGVmaW5lZCBfX25lZWRfbWFsbG9jX2FuZF9jYWxsb2MKKy8qIFNwZWNpYWwgaW52b2NhdGlvbiBjb252ZW50aW9uIGluc2lkZSBnbGliYyBoZWFkZXIgZmlsZXMuICAqLworCisjQElOQ0xVREVfTkVYVEAgQE5FWFRfU1RETElCX0hACisKKyNlbHNlCisvKiBOb3JtYWwgaW52b2NhdGlvbiBjb252ZW50aW9uLiAgKi8KKworI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1RETElCX0gKKworLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworI0BJTkNMVURFX05FWFRAIEBORVhUX1NURExJQl9IQAorCisjaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TVERMSUJfSAorI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfU1RETElCX0gKKworLyogTmV0QlNEIDUuMCBtaXMtZGVmaW5lcyBOVUxMLiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLyogTWlyQlNEIDEwIGRlZmluZXMgV0VYSVRTVEFUVVMgaW4gPHN5cy93YWl0Lmg+LCBub3QgaW4gPHN0ZGxpYi5oPi4gICovCisjaWYgQEdOVUxJQl9TWVNURU1fUE9TSVhAICYmICFkZWZpbmVkIFdFWElUU1RBVFVTCisjIGluY2x1ZGUgPHN5cy93YWl0Lmg+CisjZW5kaWYKKworLyogU29sYXJpcyBkZWNsYXJlcyBnZXRsb2FkYXZnKCkgaW4gPHN5cy9sb2FkYXZnLmg+LiAgKi8KKyNpZiAoQEdOVUxJQl9HRVRMT0FEQVZHQCB8fCBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLKSAmJiBASEFWRV9TWVNfTE9BREFWR19IQAorIyBpbmNsdWRlIDxzeXMvbG9hZGF2Zy5oPgorI2VuZGlmCisKKy8qIE5hdGl2ZSBXaW5kb3dzIHBsYXRmb3JtcyBkZWNsYXJlIG1rdGVtcCgpIGluIDxpby5oPi4gICovCisjaWYgMCAmJiAoKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXykKKyMgaW5jbHVkZSA8aW8uaD4KKyNlbmRpZgorCisjaWYgQEdOVUxJQl9SQU5ET01fUkAKKworLyogT1NGLzEgNS4xIGRlY2xhcmVzICdzdHJ1Y3QgcmFuZG9tX2RhdGEnIGluIDxyYW5kb20uaD4sIHdoaWNoIGlzIGluY2x1ZGVkCisgICBmcm9tIDxzdGRsaWIuaD4gaWYgX1JFRU5UUkFOVCBpcyBkZWZpbmVkLiAgSW5jbHVkZSBpdCB3aGVuZXZlciB3ZSBuZWVkCisgICAnc3RydWN0IHJhbmRvbV9kYXRhJy4gICovCisjIGlmIEBIQVZFX1JBTkRPTV9IQAorIyAgaW5jbHVkZSA8cmFuZG9tLmg+CisjIGVuZGlmCisKKyMgaWYgIUBIQVZFX1NUUlVDVF9SQU5ET01fREFUQUAgfHwgQFJFUExBQ0VfUkFORE9NX1JAIHx8ICFASEFWRV9SQU5ET01fUkAKKyMgIGluY2x1ZGUgPHN0ZGludC5oPgorIyBlbmRpZgorCisjIGlmICFASEFWRV9TVFJVQ1RfUkFORE9NX0RBVEFACisvKiBEZWZpbmUgJ3N0cnVjdCByYW5kb21fZGF0YScuCisgICBCdXQgYWxsb3cgbXVsdGlwbGUgZ251bGliIGdlbmVyYXRlZCA8c3RkbGliLmg+IHJlcGxhY2VtZW50cyB0byBjb2V4aXN0LiAgKi8KKyMgIGlmICFHTlVMSUJfZGVmaW5lZF9zdHJ1Y3RfcmFuZG9tX2RhdGEKK3N0cnVjdCByYW5kb21fZGF0YQoreworICBpbnQzMl90ICpmcHRyOyAgICAgICAgICAgICAgICAvKiBGcm9udCBwb2ludGVyLiAgKi8KKyAgaW50MzJfdCAqcnB0cjsgICAgICAgICAgICAgICAgLyogUmVhciBwb2ludGVyLiAgKi8KKyAgaW50MzJfdCAqc3RhdGU7ICAgICAgICAgICAgICAgLyogQXJyYXkgb2Ygc3RhdGUgdmFsdWVzLiAgKi8KKyAgaW50IHJhbmRfdHlwZTsgICAgICAgICAgICAgICAgLyogVHlwZSBvZiByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4gICovCisgIGludCByYW5kX2RlZzsgICAgICAgICAgICAgICAgIC8qIERlZ3JlZSBvZiByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4gICovCisgIGludCByYW5kX3NlcDsgICAgICAgICAgICAgICAgIC8qIERpc3RhbmNlIGJldHdlZW4gZnJvbnQgYW5kIHJlYXIuICAqLworICBpbnQzMl90ICplbmRfcHRyOyAgICAgICAgICAgICAvKiBQb2ludGVyIGJlaGluZCBzdGF0ZSB0YWJsZS4gICovCit9OworIyAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9zdHJ1Y3RfcmFuZG9tX2RhdGEgMQorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgKEBHTlVMSUJfTUtTVEVNUEAgfHwgQEdOVUxJQl9NS1NURU1QU0AgfHwgQEdOVUxJQl9HRVRTVUJPUFRAIHx8IGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0spICYmICEgZGVmaW5lZCBfX0dMSUJDX18gJiYgISgoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fKQorLyogT24gTWFjIE9TIFggMTAuMywgb25seSA8dW5pc3RkLmg+IGRlY2xhcmVzIG1rc3RlbXAuICAqLworLyogT24gTWFjIE9TIFggMTAuNSwgb25seSA8dW5pc3RkLmg+IGRlY2xhcmVzIG1rc3RlbXBzLiAgKi8KKy8qIE9uIEN5Z3dpbiAxLjcuMSwgb25seSA8dW5pc3RkLmg+IGRlY2xhcmVzIGdldHN1Ym9wdC4gICovCisvKiBCdXQgYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zIGFuZCBuYXRpdmUgV2luZG93cy4gICovCisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKy8qIFRoZSBfX2F0dHJpYnV0ZV9fIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLgorICAgVGhlIGF0dHJpYnV0ZSBfX3B1cmVfXyB3YXMgYWRkZWQgaW4gZ2NjIDIuOTYuICAqLworI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NikKKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfUFVSRSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfUFVSRSAvKiBlbXB0eSAqLworI2VuZGlmCisKKy8qIFRoZSBkZWZpbml0aW9uIG9mIF9Ob3JldHVybiBpcyBjb3BpZWQgaGVyZS4gICovCisKKy8qIFRoZSBkZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBMIGV0Yy4gYXJlIGNvcGllZCBoZXJlLiAgKi8KKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxMIGlzIGNvcGllZCBoZXJlLiAgKi8KKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKworCisvKiBTb21lIHN5c3RlbXMgZG8gbm90IGRlZmluZSBFWElUXyosIGRlc3BpdGUgb3RoZXJ3aXNlIHN1cHBvcnRpbmcgQzg5LiAgKi8KKyNpZm5kZWYgRVhJVF9TVUNDRVNTCisjIGRlZmluZSBFWElUX1NVQ0NFU1MgMAorI2VuZGlmCisvKiBUYW5kZW0vTlNLIGFuZCBvdGhlciBwbGF0Zm9ybXMgdGhhdCBkZWZpbmUgRVhJVF9GQUlMVVJFIGFzIC0xIGludGVyZmVyZQorICAgd2l0aCBwcm9wZXIgb3BlcmF0aW9uIG9mIHhhcmdzLiAgKi8KKyNpZm5kZWYgRVhJVF9GQUlMVVJFCisjIGRlZmluZSBFWElUX0ZBSUxVUkUgMQorI2VsaWYgRVhJVF9GQUlMVVJFICE9IDEKKyMgdW5kZWYgRVhJVF9GQUlMVVJFCisjIGRlZmluZSBFWElUX0ZBSUxVUkUgMQorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfX0VYSVRACisvKiBUZXJtaW5hdGUgdGhlIGN1cnJlbnQgcHJvY2VzcyB3aXRoIHRoZSBnaXZlbiByZXR1cm4gY29kZSwgd2l0aG91dCBydW5uaW5nCisgICB0aGUgJ2F0ZXhpdCcgaGFuZGxlcnMuICAqLworIyBpZiAhQEhBVkVfX0VYSVRACitfR0xfRlVOQ0RFQ0xfU1lTIChfRXhpdCwgX05vcmV0dXJuIHZvaWQsIChpbnQgc3RhdHVzKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChfRXhpdCwgdm9pZCwgKGludCBzdGF0dXMpKTsKK19HTF9DWFhBTElBU1dBUk4gKF9FeGl0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgX0V4aXQKKyMgaWYgSEFWRV9SQVdfREVDTF9fRVhJVAorX0dMX1dBUk5fT05fVVNFIChfRXhpdCwgIl9FeGl0IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBfRXhpdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX0FUT0xMQAorLyogUGFyc2UgYSBzaWduZWQgZGVjaW1hbCBpbnRlZ2VyLgorICAgUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGludGVnZXIuICBFcnJvcnMgYXJlIG5vdCBkZXRlY3RlZC4gICovCisjIGlmICFASEFWRV9BVE9MTEAKK19HTF9GVU5DREVDTF9TWVMgKGF0b2xsLCBsb25nIGxvbmcsIChjb25zdCBjaGFyICpzdHJpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChhdG9sbCwgbG9uZyBsb25nLCAoY29uc3QgY2hhciAqc3RyaW5nKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChhdG9sbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGF0b2xsCisjIGlmIEhBVkVfUkFXX0RFQ0xfQVRPTEwKK19HTF9XQVJOX09OX1VTRSAoYXRvbGwsICJhdG9sbCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgYXRvbGwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfQ0FMTE9DX1BPU0lYQAorIyBpZiBAUkVQTEFDRV9DQUxMT0NACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGNhbGxvYworIyAgIGRlZmluZSBjYWxsb2MgcnBsX2NhbGxvYworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGNhbGxvYywgdm9pZCAqLCAoc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSkpOworX0dMX0NYWEFMSUFTX1JQTCAoY2FsbG9jLCB2b2lkICosIChzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGNhbGxvYywgdm9pZCAqLCAoc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoY2FsbG9jKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgY2FsbG9jCisvKiBBc3N1bWUgY2FsbG9jIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKGNhbGxvYywgImNhbGxvYyBpcyBub3QgUE9TSVggY29tcGxpYW50IGV2ZXJ5d2hlcmUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBjYWxsb2MtcG9zaXggZm9yIHBvcnRhYmlsaXR5Iik7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRUAKKyMgaWYgQFJFUExBQ0VfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRUAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGNhbm9uaWNhbGl6ZV9maWxlX25hbWUgcnBsX2Nhbm9uaWNhbGl6ZV9maWxlX25hbWUKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChjYW5vbmljYWxpemVfZmlsZV9uYW1lLCBjaGFyICosIChjb25zdCBjaGFyICpuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoY2Fub25pY2FsaXplX2ZpbGVfbmFtZSwgY2hhciAqLCAoY29uc3QgY2hhciAqbmFtZSkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRUAKK19HTF9GVU5DREVDTF9TWVMgKGNhbm9uaWNhbGl6ZV9maWxlX25hbWUsIGNoYXIgKiwgKGNvbnN0IGNoYXIgKm5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoY2Fub25pY2FsaXplX2ZpbGVfbmFtZSwgY2hhciAqLCAoY29uc3QgY2hhciAqbmFtZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoY2Fub25pY2FsaXplX2ZpbGVfbmFtZSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGNhbm9uaWNhbGl6ZV9maWxlX25hbWUKKyMgaWYgSEFWRV9SQVdfREVDTF9DQU5PTklDQUxJWkVfRklMRV9OQU1FCitfR0xfV0FSTl9PTl9VU0UgKGNhbm9uaWNhbGl6ZV9maWxlX25hbWUsCisgICAgICAgICAgICAgICAgICJjYW5vbmljYWxpemVfZmlsZV9uYW1lIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBjYW5vbmljYWxpemUtbGdwbCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9HRVRMT0FEQVZHQAorLyogU3RvcmUgbWF4KE5FTEVNLDMpIGxvYWQgYXZlcmFnZSBudW1iZXJzIGluIExPQURBVkdbXS4KKyAgIFRoZSB0aHJlZSBudW1iZXJzIGFyZSB0aGUgbG9hZCBhdmVyYWdlIG9mIHRoZSBsYXN0IDEgbWludXRlLCB0aGUgbGFzdCA1CisgICBtaW51dGVzLCBhbmQgdGhlIGxhc3QgMTUgbWludXRlcywgcmVzcGVjdGl2ZWx5LgorICAgTE9BREFWRyBpcyBhbiBhcnJheSBvZiBORUxFTSBudW1iZXJzLiAgKi8KKyMgaWYgIUBIQVZFX0RFQ0xfR0VUTE9BREFWR0AKK19HTF9GVU5DREVDTF9TWVMgKGdldGxvYWRhdmcsIGludCwgKGRvdWJsZSBsb2FkYXZnW10sIGludCBuZWxlbSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGdldGxvYWRhdmcsIGludCwgKGRvdWJsZSBsb2FkYXZnW10sIGludCBuZWxlbSkpOworX0dMX0NYWEFMSUFTV0FSTiAoZ2V0bG9hZGF2Zyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGdldGxvYWRhdmcKKyMgaWYgSEFWRV9SQVdfREVDTF9HRVRMT0FEQVZHCitfR0xfV0FSTl9PTl9VU0UgKGdldGxvYWRhdmcsICJnZXRsb2FkYXZnIGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGdldGxvYWRhdmcgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfR0VUU1VCT1BUQAorLyogQXNzdW1pbmcgKk9QVElPTlAgaXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBlbGVtZW50cyBvZiB0aGUgZm9ybQorICAgInRva2VuIiBvciAidG9rZW49dmFsdWUiLCBnZXRzdWJvcHQgcGFyc2VzIHRoZSBmaXJzdCBvZiB0aGVzZSBlbGVtZW50cy4KKyAgIElmIHRoZSBmaXJzdCBlbGVtZW50IHJlZmVycyB0byBhICJ0b2tlbiIgdGhhdCBpcyBtZW1iZXIgb2YgdGhlIGdpdmVuCisgICBOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2YgdG9rZW5zOgorICAgICAtIEl0IHJlcGxhY2VzIHRoZSBjb21tYSB3aXRoIGEgTlVMIGJ5dGUsIHVwZGF0ZXMgKk9QVElPTlAgdG8gcG9pbnQgcGFzdAorICAgICAgIHRoZSBmaXJzdCBvcHRpb24gYW5kIHRoZSBjb21tYSwgc2V0cyAqVkFMVUVQIHRvIHRoZSB2YWx1ZSBvZiB0aGUKKyAgICAgICBlbGVtZW50IChvciBOVUxMIGlmIGl0IGRvZXNuJ3QgY29udGFpbiBhbiAiPSIgc2lnbiksCisgICAgIC0gSXQgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlICJ0b2tlbiIgaW4gdGhlIGdpdmVuIGFycmF5IG9mIHRva2Vucy4KKyAgIE90aGVyd2lzZSBpdCByZXR1cm5zIC0xLCBhbmQgKk9QVElPTlAgYW5kICpWQUxVRVAgYXJlIHVuZGVmaW5lZC4KKyAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBQT1NJWDoyMDAxIHNwZWNpZmljYXRpb24uCisgICBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjN4c2gvZ2V0c3Vib3B0Lmh0bWwgKi8KKyMgaWYgIUBIQVZFX0dFVFNVQk9QVEAKK19HTF9GVU5DREVDTF9TWVMgKGdldHN1Ym9wdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKipvcHRpb25wLCBjaGFyICpjb25zdCAqdG9rZW5zLCBjaGFyICoqdmFsdWVwKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMiwgMykpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGdldHN1Ym9wdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKipvcHRpb25wLCBjaGFyICpjb25zdCAqdG9rZW5zLCBjaGFyICoqdmFsdWVwKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChnZXRzdWJvcHQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBnZXRzdWJvcHQKKyMgaWYgSEFWRV9SQVdfREVDTF9HRVRTVUJPUFQKK19HTF9XQVJOX09OX1VTRSAoZ2V0c3Vib3B0LCAiZ2V0c3Vib3B0IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBnZXRzdWJvcHQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfR1JBTlRQVEAKKy8qIENoYW5nZSB0aGUgb3duZXJzaGlwIGFuZCBhY2Nlc3MgcGVybWlzc2lvbiBvZiB0aGUgc2xhdmUgc2lkZSBvZiB0aGUKKyAgIHBzZXVkby10ZXJtaW5hbCB3aG9zZSBtYXN0ZXIgc2lkZSBpcyBzcGVjaWZpZWQgYnkgRkQuICAqLworIyBpZiAhQEhBVkVfR1JBTlRQVEAKK19HTF9GVU5DREVDTF9TWVMgKGdyYW50cHQsIGludCwgKGludCBmZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZ3JhbnRwdCwgaW50LCAoaW50IGZkKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChncmFudHB0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZ3JhbnRwdAorIyBpZiBIQVZFX1JBV19ERUNMX0dSQU5UUFQKK19HTF9XQVJOX09OX1VTRSAoZ3JhbnRwdCwgImdyYW50cHQgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZ3JhbnRwdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBJZiBfR0xfVVNFX1NURExJQl9BTExPQyBpcyBub256ZXJvLCB0aGUgaW5jbHVkaW5nIG1vZHVsZSBkb2VzIG5vdAorICAgcmVseSBvbiBHTlUgb3IgUE9TSVggc2VtYW50aWNzIGZvciBtYWxsb2MgYW5kIHJlYWxsb2MgKGZvciBleGFtcGxlLAorICAgYnkgbmV2ZXIgc3BlY2lmeWluZyBhIHplcm8gc2l6ZSksIHNvIGl0IGRvZXMgbm90IG5lZWQgbWFsbG9jIG9yCisgICByZWFsbG9jIHRvIGJlIHJlZGVmaW5lZC4gICovCisjaWYgQEdOVUxJQl9NQUxMT0NfUE9TSVhACisjIGlmIEBSRVBMQUNFX01BTExPQ0AKKyMgIGlmICEoKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKSBcCisgICAgICAgIHx8IF9HTF9VU0VfU1RETElCX0FMTE9DKQorIyAgIHVuZGVmIG1hbGxvYworIyAgIGRlZmluZSBtYWxsb2MgcnBsX21hbGxvYworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG1hbGxvYywgdm9pZCAqLCAoc2l6ZV90IHNpemUpKTsKK19HTF9DWFhBTElBU19SUEwgKG1hbGxvYywgdm9pZCAqLCAoc2l6ZV90IHNpemUpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAobWFsbG9jLCB2b2lkICosIChzaXplX3Qgc2l6ZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobWFsbG9jKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sgJiYgIV9HTF9VU0VfU1RETElCX0FMTE9DCisjIHVuZGVmIG1hbGxvYworLyogQXNzdW1lIG1hbGxvYyBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFIChtYWxsb2MsICJtYWxsb2MgaXMgbm90IFBPU0lYIGNvbXBsaWFudCBldmVyeXdoZXJlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWFsbG9jLXBvc2l4IGZvciBwb3J0YWJpbGl0eSIpOworI2VuZGlmCisKKy8qIENvbnZlcnQgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyIHRvIGEgd2lkZSBjaGFyYWN0ZXIuICAqLworI2lmIEBHTlVMSUJfTUJUT1dDQAorIyBpZiBAUkVQTEFDRV9NQlRPV0NACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIG1idG93YworIyAgIGRlZmluZSBtYnRvd2MgcnBsX21idG93YworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG1idG93YywgaW50LCAod2NoYXJfdCAqcHdjLCBjb25zdCBjaGFyICpzLCBzaXplX3QgbikpOworX0dMX0NYWEFMSUFTX1JQTCAobWJ0b3djLCBpbnQsICh3Y2hhcl90ICpwd2MsIGNvbnN0IGNoYXIgKnMsIHNpemVfdCBuKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKG1idG93YywgaW50LCAod2NoYXJfdCAqcHdjLCBjb25zdCBjaGFyICpzLCBzaXplX3QgbikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobWJ0b3djKTsKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9NS0RURU1QQAorLyogQ3JlYXRlIGEgdW5pcXVlIHRlbXBvcmFyeSBkaXJlY3RvcnkgZnJvbSBURU1QTEFURS4KKyAgIFRoZSBsYXN0IHNpeCBjaGFyYWN0ZXJzIG9mIFRFTVBMQVRFIG11c3QgYmUgIlhYWFhYWCI7CisgICB0aGV5IGFyZSByZXBsYWNlZCB3aXRoIGEgc3RyaW5nIHRoYXQgbWFrZXMgdGhlIGRpcmVjdG9yeSBuYW1lIHVuaXF1ZS4KKyAgIFJldHVybnMgVEVNUExBVEUsIG9yIGEgbnVsbCBwb2ludGVyIGlmIGl0IGNhbm5vdCBnZXQgYSB1bmlxdWUgbmFtZS4KKyAgIFRoZSBkaXJlY3RvcnkgaXMgY3JlYXRlZCBtb2RlIDcwMC4gICovCisjIGlmICFASEFWRV9NS0RURU1QQAorX0dMX0ZVTkNERUNMX1NZUyAobWtkdGVtcCwgY2hhciAqLCAoY2hhciAqIC8qdGVtcGxhdGUqLykgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKG1rZHRlbXAsIGNoYXIgKiwgKGNoYXIgKiAvKnRlbXBsYXRlKi8pKTsKK19HTF9DWFhBTElBU1dBUk4gKG1rZHRlbXApOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBta2R0ZW1wCisjIGlmIEhBVkVfUkFXX0RFQ0xfTUtEVEVNUAorX0dMX1dBUk5fT05fVVNFIChta2R0ZW1wLCAibWtkdGVtcCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWtkdGVtcCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9NS09TVEVNUEAKKy8qIENyZWF0ZSBhIHVuaXF1ZSB0ZW1wb3JhcnkgZmlsZSBmcm9tIFRFTVBMQVRFLgorICAgVGhlIGxhc3Qgc2l4IGNoYXJhY3RlcnMgb2YgVEVNUExBVEUgbXVzdCBiZSAiWFhYWFhYIjsKKyAgIHRoZXkgYXJlIHJlcGxhY2VkIHdpdGggYSBzdHJpbmcgdGhhdCBtYWtlcyB0aGUgZmlsZSBuYW1lIHVuaXF1ZS4KKyAgIFRoZSBmbGFncyBhcmUgYSBiaXRtYXNrLCBwb3NzaWJseSBpbmNsdWRpbmcgT19DTE9FWEVDIChkZWZpbmVkIGluIDxmY250bC5oPikKKyAgIGFuZCBPX1RFWFQsIE9fQklOQVJZIChkZWZpbmVkIGluICJiaW5hcnktaW8uaCIpLgorICAgVGhlIGZpbGUgaXMgdGhlbiBjcmVhdGVkLCB3aXRoIHRoZSBzcGVjaWZpZWQgZmxhZ3MsIGVuc3VyaW5nIGl0IGRpZG4ndCBleGlzdAorICAgYmVmb3JlLgorICAgVGhlIGZpbGUgaXMgY3JlYXRlZCByZWFkLXdyaXRlIChtYXNrIGF0IGxlYXN0IDA2MDAgJiB+dW1hc2spLCBidXQgaXQgbWF5IGJlCisgICB3b3JsZC1yZWFkYWJsZSBhbmQgd29ybGQtd3JpdGFibGUgKG1hc2sgMDY2NiAmIH51bWFzayksIGRlcGVuZGluZyBvbiB0aGUKKyAgIGltcGxlbWVudGF0aW9uLgorICAgUmV0dXJucyB0aGUgb3BlbiBmaWxlIGRlc2NyaXB0b3IgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIC0xIGFuZCBlcnJubworICAgc2V0LiAgKi8KKyMgaWYgIUBIQVZFX01LT1NURU1QQAorX0dMX0ZVTkNERUNMX1NZUyAobWtvc3RlbXAsIGludCwgKGNoYXIgKiAvKnRlbXBsYXRlKi8sIGludCAvKmZsYWdzKi8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobWtvc3RlbXAsIGludCwgKGNoYXIgKiAvKnRlbXBsYXRlKi8sIGludCAvKmZsYWdzKi8pKTsKK19HTF9DWFhBTElBU1dBUk4gKG1rb3N0ZW1wKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbWtvc3RlbXAKKyMgaWYgSEFWRV9SQVdfREVDTF9NS09TVEVNUAorX0dMX1dBUk5fT05fVVNFIChta29zdGVtcCwgIm1rb3N0ZW1wIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBta29zdGVtcCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9NS09TVEVNUFNACisvKiBDcmVhdGUgYSB1bmlxdWUgdGVtcG9yYXJ5IGZpbGUgZnJvbSBURU1QTEFURS4KKyAgIFRoZSBsYXN0IHNpeCBjaGFyYWN0ZXJzIG9mIFRFTVBMQVRFIGJlZm9yZSBhIHN1ZmZpeCBvZiBsZW5ndGgKKyAgIFNVRkZJWExFTiBtdXN0IGJlICJYWFhYWFgiOworICAgdGhleSBhcmUgcmVwbGFjZWQgd2l0aCBhIHN0cmluZyB0aGF0IG1ha2VzIHRoZSBmaWxlIG5hbWUgdW5pcXVlLgorICAgVGhlIGZsYWdzIGFyZSBhIGJpdG1hc2ssIHBvc3NpYmx5IGluY2x1ZGluZyBPX0NMT0VYRUMgKGRlZmluZWQgaW4gPGZjbnRsLmg+KQorICAgYW5kIE9fVEVYVCwgT19CSU5BUlkgKGRlZmluZWQgaW4gImJpbmFyeS1pby5oIikuCisgICBUaGUgZmlsZSBpcyB0aGVuIGNyZWF0ZWQsIHdpdGggdGhlIHNwZWNpZmllZCBmbGFncywgZW5zdXJpbmcgaXQgZGlkbid0IGV4aXN0CisgICBiZWZvcmUuCisgICBUaGUgZmlsZSBpcyBjcmVhdGVkIHJlYWQtd3JpdGUgKG1hc2sgYXQgbGVhc3QgMDYwMCAmIH51bWFzayksIGJ1dCBpdCBtYXkgYmUKKyAgIHdvcmxkLXJlYWRhYmxlIGFuZCB3b3JsZC13cml0YWJsZSAobWFzayAwNjY2ICYgfnVtYXNrKSwgZGVwZW5kaW5nIG9uIHRoZQorICAgaW1wbGVtZW50YXRpb24uCisgICBSZXR1cm5zIHRoZSBvcGVuIGZpbGUgZGVzY3JpcHRvciBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgLTEgYW5kIGVycm5vCisgICBzZXQuICAqLworIyBpZiAhQEhBVkVfTUtPU1RFTVBTQAorX0dMX0ZVTkNERUNMX1NZUyAobWtvc3RlbXBzLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY2hhciAqIC8qdGVtcGxhdGUqLywgaW50IC8qc3VmZml4bGVuKi8sIGludCAvKmZsYWdzKi8pCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobWtvc3RlbXBzLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY2hhciAqIC8qdGVtcGxhdGUqLywgaW50IC8qc3VmZml4bGVuKi8sIGludCAvKmZsYWdzKi8pKTsKK19HTF9DWFhBTElBU1dBUk4gKG1rb3N0ZW1wcyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG1rb3N0ZW1wcworIyBpZiBIQVZFX1JBV19ERUNMX01LT1NURU1QUworX0dMX1dBUk5fT05fVVNFIChta29zdGVtcHMsICJta29zdGVtcHMgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG1rb3N0ZW1wcyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9NS1NURU1QQAorLyogQ3JlYXRlIGEgdW5pcXVlIHRlbXBvcmFyeSBmaWxlIGZyb20gVEVNUExBVEUuCisgICBUaGUgbGFzdCBzaXggY2hhcmFjdGVycyBvZiBURU1QTEFURSBtdXN0IGJlICJYWFhYWFgiOworICAgdGhleSBhcmUgcmVwbGFjZWQgd2l0aCBhIHN0cmluZyB0aGF0IG1ha2VzIHRoZSBmaWxlIG5hbWUgdW5pcXVlLgorICAgVGhlIGZpbGUgaXMgdGhlbiBjcmVhdGVkLCBlbnN1cmluZyBpdCBkaWRuJ3QgZXhpc3QgYmVmb3JlLgorICAgVGhlIGZpbGUgaXMgY3JlYXRlZCByZWFkLXdyaXRlIChtYXNrIGF0IGxlYXN0IDA2MDAgJiB+dW1hc2spLCBidXQgaXQgbWF5IGJlCisgICB3b3JsZC1yZWFkYWJsZSBhbmQgd29ybGQtd3JpdGFibGUgKG1hc2sgMDY2NiAmIH51bWFzayksIGRlcGVuZGluZyBvbiB0aGUKKyAgIGltcGxlbWVudGF0aW9uLgorICAgUmV0dXJucyB0aGUgb3BlbiBmaWxlIGRlc2NyaXB0b3IgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIC0xIGFuZCBlcnJubworICAgc2V0LiAgKi8KKyMgaWYgQFJFUExBQ0VfTUtTVEVNUEAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIG1rc3RlbXAgcnBsX21rc3RlbXAKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChta3N0ZW1wLCBpbnQsIChjaGFyICogLyp0ZW1wbGF0ZSovKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAobWtzdGVtcCwgaW50LCAoY2hhciAqIC8qdGVtcGxhdGUqLykpOworIyBlbHNlCisjICBpZiAhIEBIQVZFX01LU1RFTVBACitfR0xfRlVOQ0RFQ0xfU1lTIChta3N0ZW1wLCBpbnQsIChjaGFyICogLyp0ZW1wbGF0ZSovKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKG1rc3RlbXAsIGludCwgKGNoYXIgKiAvKnRlbXBsYXRlKi8pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG1rc3RlbXApOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBta3N0ZW1wCisjIGlmIEhBVkVfUkFXX0RFQ0xfTUtTVEVNUAorX0dMX1dBUk5fT05fVVNFIChta3N0ZW1wLCAibWtzdGVtcCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWtzdGVtcCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9NS1NURU1QU0AKKy8qIENyZWF0ZSBhIHVuaXF1ZSB0ZW1wb3JhcnkgZmlsZSBmcm9tIFRFTVBMQVRFLgorICAgVGhlIGxhc3Qgc2l4IGNoYXJhY3RlcnMgb2YgVEVNUExBVEUgcHJpb3IgdG8gYSBzdWZmaXggb2YgbGVuZ3RoCisgICBTVUZGSVhMRU4gbXVzdCBiZSAiWFhYWFhYIjsKKyAgIHRoZXkgYXJlIHJlcGxhY2VkIHdpdGggYSBzdHJpbmcgdGhhdCBtYWtlcyB0aGUgZmlsZSBuYW1lIHVuaXF1ZS4KKyAgIFRoZSBmaWxlIGlzIHRoZW4gY3JlYXRlZCwgZW5zdXJpbmcgaXQgZGlkbid0IGV4aXN0IGJlZm9yZS4KKyAgIFRoZSBmaWxlIGlzIGNyZWF0ZWQgcmVhZC13cml0ZSAobWFzayBhdCBsZWFzdCAwNjAwICYgfnVtYXNrKSwgYnV0IGl0IG1heSBiZQorICAgd29ybGQtcmVhZGFibGUgYW5kIHdvcmxkLXdyaXRhYmxlIChtYXNrIDA2NjYgJiB+dW1hc2spLCBkZXBlbmRpbmcgb24gdGhlCisgICBpbXBsZW1lbnRhdGlvbi4KKyAgIFJldHVybnMgdGhlIG9wZW4gZmlsZSBkZXNjcmlwdG9yIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSAtMSBhbmQgZXJybm8KKyAgIHNldC4gICovCisjIGlmICFASEFWRV9NS1NURU1QU0AKK19HTF9GVU5DREVDTF9TWVMgKG1rc3RlbXBzLCBpbnQsIChjaGFyICogLyp0ZW1wbGF0ZSovLCBpbnQgLypzdWZmaXhsZW4qLykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChta3N0ZW1wcywgaW50LCAoY2hhciAqIC8qdGVtcGxhdGUqLywgaW50IC8qc3VmZml4bGVuKi8pKTsKK19HTF9DWFhBTElBU1dBUk4gKG1rc3RlbXBzKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbWtzdGVtcHMKKyMgaWYgSEFWRV9SQVdfREVDTF9NS1NURU1QUworX0dMX1dBUk5fT05fVVNFIChta3N0ZW1wcywgIm1rc3RlbXBzIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBta3N0ZW1wcyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9QT1NJWF9PUEVOUFRACisvKiBSZXR1cm4gYW4gRkQgb3BlbiB0byB0aGUgbWFzdGVyIHNpZGUgb2YgYSBwc2V1ZG8tdGVybWluYWwuICBGbGFncyBzaG91bGQKKyAgIGluY2x1ZGUgT19SRFdSLCBhbmQgbWF5IGFsc28gaW5jbHVkZSBPX05PQ1RUWS4gICovCisjIGlmICFASEFWRV9QT1NJWF9PUEVOUFRACitfR0xfRlVOQ0RFQ0xfU1lTIChwb3NpeF9vcGVucHQsIGludCwgKGludCBmbGFncykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocG9zaXhfb3BlbnB0LCBpbnQsIChpbnQgZmxhZ3MpKTsKK19HTF9DWFhBTElBU1dBUk4gKHBvc2l4X29wZW5wdCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHBvc2l4X29wZW5wdAorIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX09QRU5QVAorX0dMX1dBUk5fT05fVVNFIChwb3NpeF9vcGVucHQsICJwb3NpeF9vcGVucHQgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcG9zaXhfb3BlbnB0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX1BUU05BTUVACisvKiBSZXR1cm4gdGhlIHBhdGhuYW1lIG9mIHRoZSBwc2V1ZG8tdGVybWluYWwgc2xhdmUgYXNzb2NpYXRlZCB3aXRoCisgICB0aGUgbWFzdGVyIEZEIGlzIG9wZW4gb24sIG9yIE5VTEwgb24gZXJyb3JzLiAgKi8KKyMgaWYgQFJFUExBQ0VfUFRTTkFNRUAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcHRzbmFtZQorIyAgIGRlZmluZSBwdHNuYW1lIHJwbF9wdHNuYW1lCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocHRzbmFtZSwgY2hhciAqLCAoaW50IGZkKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwdHNuYW1lLCBjaGFyICosIChpbnQgZmQpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX1BUU05BTUVACitfR0xfRlVOQ0RFQ0xfU1lTIChwdHNuYW1lLCBjaGFyICosIChpbnQgZmQpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwdHNuYW1lLCBjaGFyICosIChpbnQgZmQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHB0c25hbWUpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwdHNuYW1lCisjIGlmIEhBVkVfUkFXX0RFQ0xfUFRTTkFNRQorX0dMX1dBUk5fT05fVVNFIChwdHNuYW1lLCAicHRzbmFtZSBpcyBub3QgcG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwdHNuYW1lIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX1BUU05BTUVfUkAKKy8qIFNldCB0aGUgcGF0aG5hbWUgb2YgdGhlIHBzZXVkby10ZXJtaW5hbCBzbGF2ZSBhc3NvY2lhdGVkIHdpdGgKKyAgIHRoZSBtYXN0ZXIgRkQgaXMgb3BlbiBvbiBhbmQgcmV0dXJuIDAsIG9yIHNldCBlcnJubyBhbmQgcmV0dXJuCisgICBub24temVybyBvbiBlcnJvcnMuICAqLworIyBpZiBAUkVQTEFDRV9QVFNOQU1FX1JACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHB0c25hbWVfcgorIyAgIGRlZmluZSBwdHNuYW1lX3IgcnBsX3B0c25hbWVfcgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHB0c25hbWVfciwgaW50LCAoaW50IGZkLCBjaGFyICpidWYsIHNpemVfdCBsZW4pKTsKK19HTF9DWFhBTElBU19SUEwgKHB0c25hbWVfciwgaW50LCAoaW50IGZkLCBjaGFyICpidWYsIHNpemVfdCBsZW4pKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX1BUU05BTUVfUkAKK19HTF9GVU5DREVDTF9TWVMgKHB0c25hbWVfciwgaW50LCAoaW50IGZkLCBjaGFyICpidWYsIHNpemVfdCBsZW4pKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwdHNuYW1lX3IsIGludCwgKGludCBmZCwgY2hhciAqYnVmLCBzaXplX3QgbGVuKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwdHNuYW1lX3IpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwdHNuYW1lX3IKKyMgaWYgSEFWRV9SQVdfREVDTF9QVFNOQU1FX1IKK19HTF9XQVJOX09OX1VTRSAocHRzbmFtZV9yLCAicHRzbmFtZV9yIGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHB0c25hbWVfciBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9QVVRFTlZACisjIGlmIEBSRVBMQUNFX1BVVEVOVkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcHV0ZW52CisjICAgZGVmaW5lIHB1dGVudiBycGxfcHV0ZW52CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocHV0ZW52LCBpbnQsIChjaGFyICpzdHJpbmcpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwdXRlbnYsIGludCwgKGNoYXIgKnN0cmluZykpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChwdXRlbnYsIGludCwgKGNoYXIgKnN0cmluZykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocHV0ZW52KTsKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX1JBTkRPTV9SQAorIyBpZiAhQEhBVkVfUkFORE9NX1JACisjICBpZm5kZWYgUkFORF9NQVgKKyMgICBkZWZpbmUgUkFORF9NQVggMjE0NzQ4MzY0NworIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX1JBTkRPTUAKKyMgaWYgIUBIQVZFX1JBTkRPTUAKK19HTF9GVU5DREVDTF9TWVMgKHJhbmRvbSwgbG9uZywgKHZvaWQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHJhbmRvbSwgbG9uZywgKHZvaWQpKTsKK19HTF9DWFhBTElBU1dBUk4gKHJhbmRvbSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHJhbmRvbQorIyBpZiBIQVZFX1JBV19ERUNMX1JBTkRPTQorX0dMX1dBUk5fT05fVVNFIChyYW5kb20sICJyYW5kb20gaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHJhbmRvbSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9SQU5ET01ACisjIGlmICFASEFWRV9SQU5ET01ACitfR0xfRlVOQ0RFQ0xfU1lTIChzcmFuZG9tLCB2b2lkLCAodW5zaWduZWQgaW50IHNlZWQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHNyYW5kb20sIHZvaWQsICh1bnNpZ25lZCBpbnQgc2VlZCkpOworX0dMX0NYWEFMSUFTV0FSTiAoc3JhbmRvbSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHNyYW5kb20KKyMgaWYgSEFWRV9SQVdfREVDTF9TUkFORE9NCitfR0xfV0FSTl9PTl9VU0UgKHNyYW5kb20sICJzcmFuZG9tIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSByYW5kb20gZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfUkFORE9NQAorIyBpZiAhQEhBVkVfUkFORE9NQAorX0dMX0ZVTkNERUNMX1NZUyAoaW5pdHN0YXRlLCBjaGFyICosCisgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50IHNlZWQsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGluaXRzdGF0ZSwgY2hhciAqLAorICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCBzZWVkLCBjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSkpOworX0dMX0NYWEFMSUFTV0FSTiAoaW5pdHN0YXRlKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgaW5pdHN0YXRlCisjIGlmIEhBVkVfUkFXX0RFQ0xfSU5JVFNUQVRFX1IKK19HTF9XQVJOX09OX1VTRSAoaW5pdHN0YXRlLCAiaW5pdHN0YXRlIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSByYW5kb20gZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfUkFORE9NQAorIyBpZiAhQEhBVkVfUkFORE9NQAorX0dMX0ZVTkNERUNMX1NZUyAoc2V0c3RhdGUsIGNoYXIgKiwgKGNoYXIgKmFyZ19zdGF0ZSkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHNldHN0YXRlLCBjaGFyICosIChjaGFyICphcmdfc3RhdGUpKTsKK19HTF9DWFhBTElBU1dBUk4gKHNldHN0YXRlKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc2V0c3RhdGUKKyMgaWYgSEFWRV9SQVdfREVDTF9TRVRTVEFURV9SCitfR0xfV0FSTl9PTl9VU0UgKHNldHN0YXRlLCAic2V0c3RhdGUgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHJhbmRvbSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX1JBTkRPTV9SQAorIyBpZiBAUkVQTEFDRV9SQU5ET01fUkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcmFuZG9tX3IKKyMgICBkZWZpbmUgcmFuZG9tX3IgcnBsX3JhbmRvbV9yCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocmFuZG9tX3IsIGludCwgKHN0cnVjdCByYW5kb21fZGF0YSAqYnVmLCBpbnQzMl90ICpyZXN1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocmFuZG9tX3IsIGludCwgKHN0cnVjdCByYW5kb21fZGF0YSAqYnVmLCBpbnQzMl90ICpyZXN1bHQpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX1JBTkRPTV9SQAorX0dMX0ZVTkNERUNMX1NZUyAocmFuZG9tX3IsIGludCwgKHN0cnVjdCByYW5kb21fZGF0YSAqYnVmLCBpbnQzMl90ICpyZXN1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHJhbmRvbV9yLCBpbnQsIChzdHJ1Y3QgcmFuZG9tX2RhdGEgKmJ1ZiwgaW50MzJfdCAqcmVzdWx0KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChyYW5kb21fcik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHJhbmRvbV9yCisjIGlmIEhBVkVfUkFXX0RFQ0xfUkFORE9NX1IKK19HTF9XQVJOX09OX1VTRSAocmFuZG9tX3IsICJyYW5kb21fciBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmFuZG9tX3IgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfUkFORE9NX1JACisjIGlmIEBSRVBMQUNFX1JBTkRPTV9SQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBzcmFuZG9tX3IKKyMgICBkZWZpbmUgc3JhbmRvbV9yIHJwbF9zcmFuZG9tX3IKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChzcmFuZG9tX3IsIGludCwKKyAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQgc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpyYW5kX3N0YXRlKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHNyYW5kb21fciwgaW50LAorICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCBzZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKnJhbmRfc3RhdGUpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX1JBTkRPTV9SQAorX0dMX0ZVTkNERUNMX1NZUyAoc3JhbmRvbV9yLCBpbnQsCisgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50IHNlZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqcmFuZF9zdGF0ZSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc3JhbmRvbV9yLCBpbnQsCisgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50IHNlZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqcmFuZF9zdGF0ZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoc3JhbmRvbV9yKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc3JhbmRvbV9yCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1JBTkRPTV9SCitfR0xfV0FSTl9PTl9VU0UgKHNyYW5kb21fciwgInNyYW5kb21fciBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmFuZG9tX3IgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfUkFORE9NX1JACisjIGlmIEBSRVBMQUNFX1JBTkRPTV9SQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBpbml0c3RhdGVfcgorIyAgIGRlZmluZSBpbml0c3RhdGVfciBycGxfaW5pdHN0YXRlX3IKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChpbml0c3RhdGVfciwgaW50LAorICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCBzZWVkLCBjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKnJhbmRfc3RhdGUpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyLCA0KSkpOworX0dMX0NYWEFMSUFTX1JQTCAoaW5pdHN0YXRlX3IsIGludCwKKyAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQgc2VlZCwgY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsCisgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpyYW5kX3N0YXRlKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9SQU5ET01fUkAKK19HTF9GVU5DREVDTF9TWVMgKGluaXRzdGF0ZV9yLCBpbnQsCisgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50IHNlZWQsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLAorICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqcmFuZF9zdGF0ZSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIsIDQpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoaW5pdHN0YXRlX3IsIGludCwKKyAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQgc2VlZCwgY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsCisgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpyYW5kX3N0YXRlKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChpbml0c3RhdGVfcik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGluaXRzdGF0ZV9yCisjIGlmIEhBVkVfUkFXX0RFQ0xfSU5JVFNUQVRFX1IKK19HTF9XQVJOX09OX1VTRSAoaW5pdHN0YXRlX3IsICJpbml0c3RhdGVfciBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmFuZG9tX3IgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfUkFORE9NX1JACisjIGlmIEBSRVBMQUNFX1JBTkRPTV9SQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBzZXRzdGF0ZV9yCisjICAgZGVmaW5lIHNldHN0YXRlX3IgcnBsX3NldHN0YXRlX3IKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChzZXRzdGF0ZV9yLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY2hhciAqYXJnX3N0YXRlLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKnJhbmRfc3RhdGUpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoc2V0c3RhdGVfciwgaW50LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKmFyZ19zdGF0ZSwgc3RydWN0IHJhbmRvbV9kYXRhICpyYW5kX3N0YXRlKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9SQU5ET01fUkAKK19HTF9GVU5DREVDTF9TWVMgKHNldHN0YXRlX3IsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICphcmdfc3RhdGUsIHN0cnVjdCByYW5kb21fZGF0YSAqcmFuZF9zdGF0ZSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc2V0c3RhdGVfciwgaW50LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKmFyZ19zdGF0ZSwgc3RydWN0IHJhbmRvbV9kYXRhICpyYW5kX3N0YXRlKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzZXRzdGF0ZV9yKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc2V0c3RhdGVfcgorIyBpZiBIQVZFX1JBV19ERUNMX1NFVFNUQVRFX1IKK19HTF9XQVJOX09OX1VTRSAoc2V0c3RhdGVfciwgInNldHN0YXRlX3IgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHJhbmRvbV9yIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfUkVBTExPQ19QT1NJWEAKKyMgaWYgQFJFUExBQ0VfUkVBTExPQ0AKKyMgIGlmICEoKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKSBcCisgICAgICAgIHx8IF9HTF9VU0VfU1RETElCX0FMTE9DKQorIyAgIHVuZGVmIHJlYWxsb2MKKyMgICBkZWZpbmUgcmVhbGxvYyBycGxfcmVhbGxvYworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHJlYWxsb2MsIHZvaWQgKiwgKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpKTsKK19HTF9DWFhBTElBU19SUEwgKHJlYWxsb2MsIHZvaWQgKiwgKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAocmVhbGxvYywgdm9pZCAqLCAodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocmVhbGxvYyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLICYmICFfR0xfVVNFX1NURExJQl9BTExPQworIyB1bmRlZiByZWFsbG9jCisvKiBBc3N1bWUgcmVhbGxvYyBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFIChyZWFsbG9jLCAicmVhbGxvYyBpcyBub3QgUE9TSVggY29tcGxpYW50IGV2ZXJ5d2hlcmUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSByZWFsbG9jLXBvc2l4IGZvciBwb3J0YWJpbGl0eSIpOworI2VuZGlmCisKKyNpZiBAR05VTElCX1JFQUxQQVRIQAorIyBpZiBAUkVQTEFDRV9SRUFMUEFUSEAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHJlYWxwYXRoIHJwbF9yZWFscGF0aAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHJlYWxwYXRoLCBjaGFyICosIChjb25zdCBjaGFyICpuYW1lLCBjaGFyICpyZXNvbHZlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChyZWFscGF0aCwgY2hhciAqLCAoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqcmVzb2x2ZWQpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX1JFQUxQQVRIQAorX0dMX0ZVTkNERUNMX1NZUyAocmVhbHBhdGgsIGNoYXIgKiwgKGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnJlc29sdmVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChyZWFscGF0aCwgY2hhciAqLCAoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqcmVzb2x2ZWQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHJlYWxwYXRoKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcmVhbHBhdGgKKyMgaWYgSEFWRV9SQVdfREVDTF9SRUFMUEFUSAorX0dMX1dBUk5fT05fVVNFIChyZWFscGF0aCwgInJlYWxwYXRoIGlzIHVucG9ydGFibGUgLSB1c2UgZ251bGliIG1vZHVsZSAiCisgICAgICAgICAgICAgICAgICJjYW5vbmljYWxpemUgb3IgY2Fub25pY2FsaXplLWxncGwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfUlBNQVRDSEAKKy8qIFRlc3QgYSB1c2VyIHJlc3BvbnNlIHRvIGEgcXVlc3Rpb24uCisgICBSZXR1cm4gMSBpZiBpdCBpcyBhZmZpcm1hdGl2ZSwgMCBpZiBpdCBpcyBuZWdhdGl2ZSwgb3IgLTEgaWYgbm90IGNsZWFyLiAgKi8KKyMgaWYgIUBIQVZFX1JQTUFUQ0hACitfR0xfRlVOQ0RFQ0xfU1lTIChycG1hdGNoLCBpbnQsIChjb25zdCBjaGFyICpyZXNwb25zZSkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHJwbWF0Y2gsIGludCwgKGNvbnN0IGNoYXIgKnJlc3BvbnNlKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChycG1hdGNoKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcnBtYXRjaAorIyBpZiBIQVZFX1JBV19ERUNMX1JQTUFUQ0gKK19HTF9XQVJOX09OX1VTRSAocnBtYXRjaCwgInJwbWF0Y2ggaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHJwbWF0Y2ggZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfU0VURU5WQAorLyogU2V0IE5BTUUgdG8gVkFMVUUgaW4gdGhlIGVudmlyb25tZW50LgorICAgSWYgUkVQTEFDRSBpcyBub256ZXJvLCBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgdmFsdWUuICAqLworIyBpZiBAUkVQTEFDRV9TRVRFTlZACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHNldGVudgorIyAgIGRlZmluZSBzZXRlbnYgcnBsX3NldGVudgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHNldGVudiwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgcmVwbGFjZSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzZXRlbnYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwgaW50IHJlcGxhY2UpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0RFQ0xfU0VURU5WQAorX0dMX0ZVTkNERUNMX1NZUyAoc2V0ZW52LCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsIGludCByZXBsYWNlKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzZXRlbnYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwgaW50IHJlcGxhY2UpKTsKKyMgZW5kaWYKKyMgaWYgIShAUkVQTEFDRV9TRVRFTlZAICYmICFASEFWRV9ERUNMX1NFVEVOVkApCitfR0xfQ1hYQUxJQVNXQVJOIChzZXRlbnYpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzZXRlbnYKKyMgaWYgSEFWRV9SQVdfREVDTF9TRVRFTlYKK19HTF9XQVJOX09OX1VTRSAoc2V0ZW52LCAic2V0ZW52IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzZXRlbnYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfU1RSVE9EQAorIC8qIFBhcnNlIGEgZG91YmxlIGZyb20gU1RSSU5HLCB1cGRhdGluZyBFTkRQIGlmIGFwcHJvcHJpYXRlLiAgKi8KKyMgaWYgQFJFUExBQ0VfU1RSVE9EQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgc3RydG9kIHJwbF9zdHJ0b2QKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChzdHJ0b2QsIGRvdWJsZSwgKGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKmVuZHApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHN0cnRvZCwgZG91YmxlLCAoY29uc3QgY2hhciAqc3RyLCBjaGFyICoqZW5kcCkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfU1RSVE9EQAorX0dMX0ZVTkNERUNMX1NZUyAoc3RydG9kLCBkb3VibGUsIChjb25zdCBjaGFyICpzdHIsIGNoYXIgKiplbmRwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc3RydG9kLCBkb3VibGUsIChjb25zdCBjaGFyICpzdHIsIGNoYXIgKiplbmRwKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzdHJ0b2QpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJ0b2QKKyMgaWYgSEFWRV9SQVdfREVDTF9TVFJUT0QKK19HTF9XQVJOX09OX1VTRSAoc3RydG9kLCAic3RydG9kIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHJ0b2QgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfU1RSVE9MTEAKKy8qIFBhcnNlIGEgc2lnbmVkIGludGVnZXIgd2hvc2UgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBzdGFydHMgYXQgU1RSSU5HLgorICAgVGhlIGludGVnZXIgaXMgZXhwZWN0ZWQgdG8gYmUgaW4gYmFzZSBCQVNFICgyIDw9IEJBU0UgPD0gMzYpOyBpZiBCQVNFID09IDAsCisgICBpdCBtYXkgYmUgZGVjaW1hbCBvciBvY3RhbCAod2l0aCBwcmVmaXggIjAiKSBvciBoZXhhZGVjaW1hbCAod2l0aCBwcmVmaXgKKyAgICIweCIpLgorICAgSWYgRU5EUFRSIGlzIG5vdCBOVUxMLCB0aGUgYWRkcmVzcyBvZiB0aGUgZmlyc3QgYnl0ZSBhZnRlciB0aGUgaW50ZWdlciBpcworICAgc3RvcmVkIGluICpFTkRQVFIuCisgICBVcG9uIG92ZXJmbG93LCB0aGUgcmV0dXJuIHZhbHVlIGlzIExMT05HX01BWCBvciBMTE9OR19NSU4sIGFuZCBlcnJubyBpcyBzZXQKKyAgIHRvIEVSQU5HRS4gICovCisjIGlmICFASEFWRV9TVFJUT0xMQAorX0dMX0ZVTkNERUNMX1NZUyAoc3RydG9sbCwgbG9uZyBsb25nLAorICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKnN0cmluZywgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc3RydG9sbCwgbG9uZyBsb25nLAorICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKnN0cmluZywgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UpKTsKK19HTF9DWFhBTElBU1dBUk4gKHN0cnRvbGwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJ0b2xsCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RSVE9MTAorX0dMX1dBUk5fT05fVVNFIChzdHJ0b2xsLCAic3RydG9sbCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RydG9sbCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9TVFJUT1VMTEAKKy8qIFBhcnNlIGFuIHVuc2lnbmVkIGludGVnZXIgd2hvc2UgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBzdGFydHMgYXQgU1RSSU5HLgorICAgVGhlIGludGVnZXIgaXMgZXhwZWN0ZWQgdG8gYmUgaW4gYmFzZSBCQVNFICgyIDw9IEJBU0UgPD0gMzYpOyBpZiBCQVNFID09IDAsCisgICBpdCBtYXkgYmUgZGVjaW1hbCBvciBvY3RhbCAod2l0aCBwcmVmaXggIjAiKSBvciBoZXhhZGVjaW1hbCAod2l0aCBwcmVmaXgKKyAgICIweCIpLgorICAgSWYgRU5EUFRSIGlzIG5vdCBOVUxMLCB0aGUgYWRkcmVzcyBvZiB0aGUgZmlyc3QgYnl0ZSBhZnRlciB0aGUgaW50ZWdlciBpcworICAgc3RvcmVkIGluICpFTkRQVFIuCisgICBVcG9uIG92ZXJmbG93LCB0aGUgcmV0dXJuIHZhbHVlIGlzIFVMTE9OR19NQVgsIGFuZCBlcnJubyBpcyBzZXQgdG8KKyAgIEVSQU5HRS4gICovCisjIGlmICFASEFWRV9TVFJUT1VMTEAKK19HTF9GVU5DREVDTF9TWVMgKHN0cnRvdWxsLCB1bnNpZ25lZCBsb25nIGxvbmcsCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqc3RyaW5nLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzdHJ0b3VsbCwgdW5zaWduZWQgbG9uZyBsb25nLAorICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKnN0cmluZywgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UpKTsKK19HTF9DWFhBTElBU1dBUk4gKHN0cnRvdWxsKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc3RydG91bGwKKyMgaWYgSEFWRV9SQVdfREVDTF9TVFJUT1VMTAorX0dMX1dBUk5fT05fVVNFIChzdHJ0b3VsbCwgInN0cnRvdWxsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHJ0b3VsbCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9VTkxPQ0tQVEAKKy8qIFVubG9jayB0aGUgc2xhdmUgc2lkZSBvZiB0aGUgcHNldWRvLXRlcm1pbmFsIHdob3NlIG1hc3RlciBzaWRlIGlzIHNwZWNpZmllZAorICAgYnkgRkQsIHNvIHRoYXQgaXQgY2FuIGJlIG9wZW5lZC4gICovCisjIGlmICFASEFWRV9VTkxPQ0tQVEAKK19HTF9GVU5DREVDTF9TWVMgKHVubG9ja3B0LCBpbnQsIChpbnQgZmQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHVubG9ja3B0LCBpbnQsIChpbnQgZmQpKTsKK19HTF9DWFhBTElBU1dBUk4gKHVubG9ja3B0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgdW5sb2NrcHQKKyMgaWYgSEFWRV9SQVdfREVDTF9VTkxPQ0tQVAorX0dMX1dBUk5fT05fVVNFICh1bmxvY2twdCwgInVubG9ja3B0IGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHVubG9ja3B0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX1VOU0VURU5WQAorLyogUmVtb3ZlIHRoZSB2YXJpYWJsZSBOQU1FIGZyb20gdGhlIGVudmlyb25tZW50LiAgKi8KKyMgaWYgQFJFUExBQ0VfVU5TRVRFTlZACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHVuc2V0ZW52CisjICAgZGVmaW5lIHVuc2V0ZW52IHJwbF91bnNldGVudgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHVuc2V0ZW52LCBpbnQsIChjb25zdCBjaGFyICpuYW1lKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAodW5zZXRlbnYsIGludCwgKGNvbnN0IGNoYXIgKm5hbWUpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0RFQ0xfVU5TRVRFTlZACitfR0xfRlVOQ0RFQ0xfU1lTICh1bnNldGVudiwgaW50LCAoY29uc3QgY2hhciAqbmFtZSkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh1bnNldGVudiwgaW50LCAoY29uc3QgY2hhciAqbmFtZSkpOworIyBlbmRpZgorIyBpZiAhKEBSRVBMQUNFX1VOU0VURU5WQCAmJiAhQEhBVkVfREVDTF9VTlNFVEVOVkApCitfR0xfQ1hYQUxJQVNXQVJOICh1bnNldGVudik7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHVuc2V0ZW52CisjIGlmIEhBVkVfUkFXX0RFQ0xfVU5TRVRFTlYKK19HTF9XQVJOX09OX1VTRSAodW5zZXRlbnYsICJ1bnNldGVudiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgdW5zZXRlbnYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworLyogQ29udmVydCBhIHdpZGUgY2hhcmFjdGVyIHRvIGEgbXVsdGlieXRlIGNoYXJhY3Rlci4gICovCisjaWYgQEdOVUxJQl9XQ1RPTUJACisjIGlmIEBSRVBMQUNFX1dDVE9NQkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgd2N0b21iCisjICAgZGVmaW5lIHdjdG9tYiBycGxfd2N0b21iCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAod2N0b21iLCBpbnQsIChjaGFyICpzLCB3Y2hhcl90IHdjKSk7CitfR0xfQ1hYQUxJQVNfUlBMICh3Y3RvbWIsIGludCwgKGNoYXIgKnMsIHdjaGFyX3Qgd2MpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAod2N0b21iLCBpbnQsIChjaGFyICpzLCB3Y2hhcl90IHdjKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOICh3Y3RvbWIpOworI2VuZGlmCisKKworI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TVERMSUJfSCAqLworI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TVERMSUJfSCAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvc3RwY3B5LmMgYi9saWIvc3RwY3B5LmMKaW5kZXggYWNkYTIxYS4uZTg1N2FiZSAxMDA2NDQKLS0tIGEvbGliL3N0cGNweS5jCisrKyBiL2xpYi9zdHBjcHkuYwpAQCAtMSwxMiArMSwxMyBAQAogLyogc3RwY3B5LmMgLS0gY29weSBhIHN0cmluZyBhbmQgcmV0dXJuIHBvaW50ZXIgdG8gZW5kIG9mIG5ldyBzdHJpbmcKLSAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5NSwgMTk5NywgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5NSwgMTk5Ny0xOTk4LCAyMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLgogCiAgICBOT1RFOiBUaGUgY2Fub25pY2FsIHNvdXJjZSBvZiB0aGlzIGZpbGUgaXMgbWFpbnRhaW5lZCB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5LgogICAgQnVncyBjYW4gYmUgcmVwb3J0ZWQgdG8gYnVnLWdsaWJjQHByZXAuYWkubWl0LmVkdS4KIAotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgYW55CiAgICBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKQEAgLTE1LDE4ICsxNiwxNiBAQAogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCi0gICBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgorI2luY2x1ZGUgPGNvbmZpZy5oPgogCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKICN1bmRlZiBfX3N0cGNweQotI3VuZGVmIHN0cGNweQorI2lmZGVmIF9MSUJDCisjIHVuZGVmIHN0cGNweQorI2VuZGlmCiAKICNpZm5kZWYgd2Vha19hbGlhcwogIyBkZWZpbmUgX19zdHBjcHkgc3RwY3B5CmRpZmYgLS1naXQgYS9saWIvc3RwY3B5LmggYi9saWIvc3RwY3B5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzYzRjZTAuLjAwMDAwMDAKLS0tIGEvbGliL3N0cGNweS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyogU3RyaW5nIGNvcHlpbmcuCi0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDIwMDEsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwotCi0jaWZuZGVmIF9TVFBDUFlfSAotI2RlZmluZSBfU1RQQ1BZX0gKLQotI2lmIEhBVkVfU1RQQ1BZCi0KLS8qIEdldCBzdHBjcHkoKSBkZWNsYXJhdGlvbi4gICovCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNlbHNlCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotLyogQ29weSBTUkMgdG8gRFNULCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1pbmF0aW5nICdcMCcgaW4gRFNULiAgKi8KLWV4dGVybiBjaGFyICpzdHBjcHkgKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjKTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfU1RQQ1BZX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9zdHJjaHJudWwuYyBiL2xpYi9zdHJjaHJudWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmU0MjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3N0cmNocm51bC5jCkBAIC0wLDAgKzEsMTQyIEBACisvKiBTZWFyY2hpbmcgaW4gYSBzdHJpbmcuCisgICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDctMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBDIGluIFMgb3IgdGhlIGZpbmFsIE5VTCBieXRlLiAgKi8KK2NoYXIgKgorc3RyY2hybnVsIChjb25zdCBjaGFyICpzLCBpbnQgY19pbikKK3sKKyAgLyogT24gMzItYml0IGhhcmR3YXJlLCBjaG9vc2luZyBsb25nd29yZCB0byBiZSBhIDMyLWJpdCB1bnNpZ25lZAorICAgICBsb25nIGluc3RlYWQgb2YgYSA2NC1iaXQgdWludG1heF90IHRlbmRzIHRvIGdpdmUgYmV0dGVyCisgICAgIHBlcmZvcm1hbmNlLiAgT24gNjQtYml0IGhhcmR3YXJlLCB1bnNpZ25lZCBsb25nIGlzIGdlbmVyYWxseSA2NAorICAgICBiaXRzIGFscmVhZHkuICBDaGFuZ2UgdGhpcyB0eXBlZGVmIHRvIGV4cGVyaW1lbnQgd2l0aAorICAgICBwZXJmb3JtYW5jZS4gICovCisgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgbG9uZ3dvcmQ7CisKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqY2hhcl9wdHI7CisgIGNvbnN0IGxvbmd3b3JkICpsb25nd29yZF9wdHI7CisgIGxvbmd3b3JkIHJlcGVhdGVkX29uZTsKKyAgbG9uZ3dvcmQgcmVwZWF0ZWRfYzsKKyAgdW5zaWduZWQgY2hhciBjOworCisgIGMgPSAodW5zaWduZWQgY2hhcikgY19pbjsKKyAgaWYgKCFjKQorICAgIHJldHVybiByYXdtZW1jaHIgKHMsIDApOworCisgIC8qIEhhbmRsZSB0aGUgZmlyc3QgZmV3IGJ5dGVzIGJ5IHJlYWRpbmcgb25lIGJ5dGUgYXQgYSB0aW1lLgorICAgICBEbyB0aGlzIHVudGlsIENIQVJfUFRSIGlzIGFsaWduZWQgb24gYSBsb25nd29yZCBib3VuZGFyeS4gICovCisgIGZvciAoY2hhcl9wdHIgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBzOworICAgICAgIChzaXplX3QpIGNoYXJfcHRyICUgc2l6ZW9mIChsb25nd29yZCkgIT0gMDsKKyAgICAgICArK2NoYXJfcHRyKQorICAgIGlmICghKmNoYXJfcHRyIHx8ICpjaGFyX3B0ciA9PSBjKQorICAgICAgcmV0dXJuIChjaGFyICopIGNoYXJfcHRyOworCisgIGxvbmd3b3JkX3B0ciA9IChjb25zdCBsb25nd29yZCAqKSBjaGFyX3B0cjsKKworICAvKiBBbGwgdGhlc2UgZWx1Y2lkYXRvcnkgY29tbWVudHMgcmVmZXIgdG8gNC1ieXRlIGxvbmd3b3JkcywKKyAgICAgYnV0IHRoZSB0aGVvcnkgYXBwbGllcyBlcXVhbGx5IHdlbGwgdG8gYW55IHNpemUgbG9uZ3dvcmRzLiAgKi8KKworICAvKiBDb21wdXRlIGF1eGlsaWFyeSBsb25nd29yZCB2YWx1ZXM6CisgICAgIHJlcGVhdGVkX29uZSBpcyBhIHZhbHVlIHdoaWNoIGhhcyBhIDEgaW4gZXZlcnkgYnl0ZS4KKyAgICAgcmVwZWF0ZWRfYyBoYXMgYyBpbiBldmVyeSBieXRlLiAgKi8KKyAgcmVwZWF0ZWRfb25lID0gMHgwMTAxMDEwMTsKKyAgcmVwZWF0ZWRfYyA9IGMgfCAoYyA8PCA4KTsKKyAgcmVwZWF0ZWRfYyB8PSByZXBlYXRlZF9jIDw8IDE2OworICBpZiAoMHhmZmZmZmZmZlUgPCAobG9uZ3dvcmQpIC0xKQorICAgIHsKKyAgICAgIHJlcGVhdGVkX29uZSB8PSByZXBlYXRlZF9vbmUgPDwgMzEgPDwgMTsKKyAgICAgIHJlcGVhdGVkX2MgfD0gcmVwZWF0ZWRfYyA8PCAzMSA8PCAxOworICAgICAgaWYgKDggPCBzaXplb2YgKGxvbmd3b3JkKSkKKyAgICAgICAgeworICAgICAgICAgIHNpemVfdCBpOworCisgICAgICAgICAgZm9yIChpID0gNjQ7IGkgPCBzaXplb2YgKGxvbmd3b3JkKSAqIDg7IGkgKj0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmVwZWF0ZWRfb25lIHw9IHJlcGVhdGVkX29uZSA8PCBpOworICAgICAgICAgICAgICByZXBlYXRlZF9jIHw9IHJlcGVhdGVkX2MgPDwgaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAvKiBJbnN0ZWFkIG9mIHRoZSB0cmFkaXRpb25hbCBsb29wIHdoaWNoIHRlc3RzIGVhY2ggYnl0ZSwgd2Ugd2lsbAorICAgICB0ZXN0IGEgbG9uZ3dvcmQgYXQgYSB0aW1lLiAgVGhlIHRyaWNreSBwYXJ0IGlzIHRlc3RpbmcgaWYgKmFueSBvZgorICAgICB0aGUgZm91ciogYnl0ZXMgaW4gdGhlIGxvbmd3b3JkIGluIHF1ZXN0aW9uIGFyZSBlcXVhbCB0byBOVUwgb3IKKyAgICAgYy4gIFdlIGZpcnN0IHVzZSBhbiB4b3Igd2l0aCByZXBlYXRlZF9jLiAgVGhpcyByZWR1Y2VzIHRoZSB0YXNrCisgICAgIHRvIHRlc3Rpbmcgd2hldGhlciAqYW55IG9mIHRoZSBmb3VyKiBieXRlcyBpbiBsb25nd29yZDEgb3IKKyAgICAgbG9uZ3dvcmQyIGlzIHplcm8uCisKKyAgICAgTGV0J3MgY29uc2lkZXIgbG9uZ3dvcmQxLiAgV2UgY29tcHV0ZSB0bXAgPQorICAgICAgICgobG9uZ3dvcmQxIC0gcmVwZWF0ZWRfb25lKSAmIH5sb25nd29yZDEpICYgKHJlcGVhdGVkX29uZSA8PCA3KS4KKyAgICAgVGhhdCBpcywgd2UgcGVyZm9ybSB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnM6CisgICAgICAgMS4gU3VidHJhY3QgcmVwZWF0ZWRfb25lLgorICAgICAgIDIuICYgfmxvbmd3b3JkMS4KKyAgICAgICAzLiAmIGEgbWFzayBjb25zaXN0aW5nIG9mIDB4ODAgaW4gZXZlcnkgYnl0ZS4KKyAgICAgQ29uc2lkZXIgd2hhdCBoYXBwZW5zIGluIGVhY2ggYnl0ZToKKyAgICAgICAtIElmIGEgYnl0ZSBvZiBsb25nd29yZDEgaXMgemVybywgc3RlcCAxIGFuZCAyIHRyYW5zZm9ybSBpdCBpbnRvIDB4ZmYsCisgICAgICAgICBhbmQgc3RlcCAzIHRyYW5zZm9ybXMgaXQgaW50byAweDgwLiAgQSBjYXJyeSBjYW4gYWxzbyBiZSBwcm9wYWdhdGVkCisgICAgICAgICB0byBtb3JlIHNpZ25pZmljYW50IGJ5dGVzLgorICAgICAgIC0gSWYgYSBieXRlIG9mIGxvbmd3b3JkMSBpcyBub256ZXJvLCBsZXQgaXRzIGxvd2VzdCAxIGJpdCBiZSBhdAorICAgICAgICAgcG9zaXRpb24gayAoMCA8PSBrIDw9IDcpOyBzbyB0aGUgbG93ZXN0IGsgYml0cyBhcmUgMC4gIEFmdGVyIHN0ZXAgMSwKKyAgICAgICAgIHRoZSBieXRlIGVuZHMgaW4gYSBzaW5nbGUgYml0IG9mIHZhbHVlIDAgYW5kIGsgYml0cyBvZiB2YWx1ZSAxLgorICAgICAgICAgQWZ0ZXIgc3RlcCAyLCB0aGUgcmVzdWx0IGlzIGp1c3QgayBiaXRzIG9mIHZhbHVlIDE6IDJeayAtIDEuICBBZnRlcgorICAgICAgICAgc3RlcCAzLCB0aGUgcmVzdWx0IGlzIDAuICBBbmQgbm8gY2FycnkgaXMgcHJvZHVjZWQuCisgICAgIFNvLCBpZiBsb25nd29yZDEgaGFzIG9ubHkgbm9uLXplcm8gYnl0ZXMsIHRtcCBpcyB6ZXJvLgorICAgICBXaGVyZWFzIGlmIGxvbmd3b3JkMSBoYXMgYSB6ZXJvIGJ5dGUsIGNhbGwgaiB0aGUgcG9zaXRpb24gb2YgdGhlIGxlYXN0CisgICAgIHNpZ25pZmljYW50IHplcm8gYnl0ZS4gIFRoZW4gdGhlIHJlc3VsdCBoYXMgYSB6ZXJvIGF0IHBvc2l0aW9ucyAwLCAuLi4sCisgICAgIGotMSBhbmQgYSAweDgwIGF0IHBvc2l0aW9uIGouICBXZSBjYW5ub3QgcHJlZGljdCB0aGUgcmVzdWx0IGF0IHRoZSBtb3JlCisgICAgIHNpZ25pZmljYW50IGJ5dGVzIChwb3NpdGlvbnMgaisxLi4zKSwgYnV0IGl0IGRvZXMgbm90IG1hdHRlciBzaW5jZSB3ZQorICAgICBhbHJlYWR5IGhhdmUgYSBub24temVybyBiaXQgYXQgcG9zaXRpb24gOCpqKzcuCisKKyAgICAgVGhlIHRlc3Qgd2hldGhlciBhbnkgYnl0ZSBpbiBsb25nd29yZDEgb3IgbG9uZ3dvcmQyIGlzIHplcm8gaXMgZXF1aXZhbGVudAorICAgICB0byB0ZXN0aW5nIHdoZXRoZXIgdG1wMSBpcyBub256ZXJvIG9yIHRtcDIgaXMgbm9uemVyby4gIFdlIGNhbiBjb21iaW5lCisgICAgIHRoaXMgaW50byBhIHNpbmdsZSB0ZXN0LCB3aGV0aGVyICh0bXAxIHwgdG1wMikgaXMgbm9uemVyby4KKworICAgICBUaGlzIHRlc3QgY2FuIHJlYWQgbW9yZSB0aGFuIG9uZSBieXRlIGJleW9uZCB0aGUgZW5kIG9mIGEgc3RyaW5nLAorICAgICBkZXBlbmRpbmcgb24gd2hlcmUgdGhlIHRlcm1pbmF0aW5nIE5VTCBpcyBlbmNvdW50ZXJlZC4gIEhvd2V2ZXIsCisgICAgIHRoaXMgaXMgY29uc2lkZXJlZCBzYWZlIHNpbmNlIHRoZSBpbml0aWFsaXphdGlvbiBwaGFzZSBlbnN1cmVkCisgICAgIHRoYXQgdGhlIHJlYWQgd2lsbCBiZSBhbGlnbmVkLCB0aGVyZWZvcmUsIHRoZSByZWFkIHdpbGwgbm90IGNyb3NzCisgICAgIHBhZ2UgYm91bmRhcmllcyBhbmQgd2lsbCBub3QgY2F1c2UgYSBmYXVsdC4gICovCisKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgbG9uZ3dvcmQgbG9uZ3dvcmQxID0gKmxvbmd3b3JkX3B0ciBeIHJlcGVhdGVkX2M7CisgICAgICBsb25nd29yZCBsb25nd29yZDIgPSAqbG9uZ3dvcmRfcHRyOworCisgICAgICBpZiAoKCgoKGxvbmd3b3JkMSAtIHJlcGVhdGVkX29uZSkgJiB+bG9uZ3dvcmQxKQorICAgICAgICAgICAgfCAoKGxvbmd3b3JkMiAtIHJlcGVhdGVkX29uZSkgJiB+bG9uZ3dvcmQyKSkKKyAgICAgICAgICAgJiAocmVwZWF0ZWRfb25lIDw8IDcpKSAhPSAwKQorICAgICAgICBicmVhazsKKyAgICAgIGxvbmd3b3JkX3B0cisrOworICAgIH0KKworICBjaGFyX3B0ciA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIGxvbmd3b3JkX3B0cjsKKworICAvKiBBdCB0aGlzIHBvaW50LCB3ZSBrbm93IHRoYXQgb25lIG9mIHRoZSBzaXplb2YgKGxvbmd3b3JkKSBieXRlcworICAgICBzdGFydGluZyBhdCBjaGFyX3B0ciBpcyA9PSAwIG9yID09IGMuICBPbiBsaXR0bGUtZW5kaWFuIG1hY2hpbmVzLAorICAgICB3ZSBjb3VsZCBkZXRlcm1pbmUgdGhlIGZpcnN0IHN1Y2ggYnl0ZSB3aXRob3V0IGFueSBmdXJ0aGVyIG1lbW9yeQorICAgICBhY2Nlc3NlcywganVzdCBieSBsb29raW5nIGF0IHRoZSB0bXAgcmVzdWx0IGZyb20gdGhlIGxhc3QgbG9vcAorICAgICBpdGVyYXRpb24uICBCdXQgdGhpcyBkb2VzIG5vdCB3b3JrIG9uIGJpZy1lbmRpYW4gbWFjaGluZXMuCisgICAgIENob29zZSBjb2RlIHRoYXQgd29ya3MgaW4gYm90aCBjYXNlcy4gICovCisKKyAgY2hhcl9wdHIgPSAodW5zaWduZWQgY2hhciAqKSBsb25nd29yZF9wdHI7CisgIHdoaWxlICgqY2hhcl9wdHIgJiYgKCpjaGFyX3B0ciAhPSBjKSkKKyAgICBjaGFyX3B0cisrOworICByZXR1cm4gKGNoYXIgKikgY2hhcl9wdHI7Cit9CmRpZmYgLS1naXQgYS9saWIvc3RyY2hybnVsLnZhbGdyaW5kIGIvbGliL3N0cmNocm51bC52YWxncmluZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTRmYTEzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3N0cmNocm51bC52YWxncmluZApAQCAtMCwwICsxLDEyIEBACisjIFN1cHByZXNzIGEgdmFsZ3JpbmQgbWVzc2FnZSBhYm91dCB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gc3RyY2hybnVsKCkuCisjIFRoaXMgdXNlIGlzIE9LIGJlY2F1c2UgaXQgcHJvdmlkZXMgb25seSBhIHNwZWVkdXAuCit7CisgICAgc3RyY2hybnVsLXZhbHVlNAorICAgIE1lbWNoZWNrOlZhbHVlNAorICAgIGZ1bjpzdHJjaHJudWwKK30KK3sKKyAgICBzdHJjaHJudWwtdmFsdWU4CisgICAgTWVtY2hlY2s6VmFsdWU4CisgICAgZnVuOnN0cmNocm51bAorfQpkaWZmIC0tZ2l0IGEvbGliL3N0cmR1cC5jIGIvbGliL3N0cmR1cC5jCmluZGV4IGQ2ZDAxMTYuLmEzZjhjODYgMTAwNjQ0Ci0tLSBhL2xpYi9zdHJkdXAuYworKysgYi9saWIvc3RyZHVwLmMKQEAgLTEsMTEgKzEsMTEgQEAKLS8qIENvcHlyaWdodCAoQykgMTk5MSwgMTk5NiwgMTk5NywgMTk5OCwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlCisvKiBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTYtMTk5OCwgMjAwMi0yMDA0LCAyMDA2LTIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlCiAgICBGb3VuZGF0aW9uLCBJbmMuCiAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgogCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKICAgIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKQEAgLTE0LDIzICsxNCwyMSBAQAogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAotI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpZm5kZWYgX0xJQkMKICMgaW5jbHVkZSA8Y29uZmlnLmg+CiAjZW5kaWYKIAotI2lmbmRlZiBfTElCQwogLyogR2V0IHNwZWNpZmljYXRpb24uICAqLwotIyBpbmNsdWRlICJzdHJkdXAuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKwogI3VuZGVmIF9fc3RyZHVwCi0jdW5kZWYgc3RyZHVwCisjaWZkZWYgX0xJQkMKKyMgdW5kZWYgc3RyZHVwCisjZW5kaWYKIAogI2lmbmRlZiB3ZWFrX2FsaWFzCiAjIGRlZmluZSBfX3N0cmR1cCBzdHJkdXAKZGlmZiAtLWdpdCBhL2xpYi9zdHJkdXAuaCBiL2xpYi9zdHJkdXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBkNWZiOS4uMDAwMDAwMAotLS0gYS9saWIvc3RyZHVwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKiBzdHJkdXAuaCAtLSBkdXBsaWNhdGUgYSBzdHJpbmcKLSAgIENvcHlyaWdodCAoQykgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCi0KLSNpZm5kZWYgU1RSRFVQX0hfCi0jZGVmaW5lIFNUUkRVUF9IXwotCi0vKiBHZXQgc3RyZHVwIGRlY2xhcmF0aW9uLCBpZiBhdmFpbGFibGUuICAqLwotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWYgZGVmaW5lZCBIQVZFX0RFQ0xfU1RSRFVQICYmICFIQVZFX0RFQ0xfU1RSRFVQICYmICFkZWZpbmVkIHN0cmR1cAotLyogRHVwbGljYXRlIFMsIHJldHVybmluZyBhbiBpZGVudGljYWwgbWFsbG9jJ2Qgc3RyaW5nLiAgKi8KLWV4dGVybiBjaGFyICpzdHJkdXAgKGNvbnN0IGNoYXIgKnMpOwotI2VuZGlmCi0KLSNlbmRpZiAvKiBTVFJEVVBfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYi9zdHJlcS5oIGIvbGliL3N0cmVxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMxMmY3ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9zdHJlcS5oCkBAIC0wLDAgKzEsMTc2IEBACisvKiBPcHRpbWl6ZWQgc3RyaW5nIGNvbXBhcmlzb24uCisgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPi4gICovCisKKyNpZm5kZWYgX0dMX1NUUkVRX0gKKyNkZWZpbmUgX0dMX1NUUkVRX0gKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKiBTVFJFUV9PUFQgYWxsb3dzIHRvIG9wdGltaXplIHN0cmluZyBjb21wYXJpc29uIHdpdGggYSBzbWFsbCBsaXRlcmFsIHN0cmluZy4KKyAgICAgU1RSRVFfT1BUIChzLCAiRVVDLUtSIiwgJ0UnLCAnVScsICdDJywgJy0nLCAnSycsICdSJywgMCwgMCwgMCkKKyAgIGlzIHNlbWFudGljYWxseSBlcXVpdmFsZW50IHRvCisgICAgIHN0cmNtcCAocywgIkVVQy1LUiIpID09IDAKKyAgIGp1c3QgZmFzdGVyLiAgKi8KKworLyogSGVscCBHQ0MgdG8gZ2VuZXJhdGUgZ29vZCBjb2RlIGZvciBzdHJpbmcgY29tcGFyaXNvbnMgd2l0aAorICAgaW1tZWRpYXRlIHN0cmluZ3MuICovCisjaWYgZGVmaW5lZCAoX19HTlVDX18pICYmIGRlZmluZWQgKF9fT1BUSU1JWkVfXykKKworc3RhdGljIGlubGluZSBpbnQKK3N0cmVxOSAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQoreworICByZXR1cm4gc3RyY21wIChzMSArIDksIHMyICsgOSkgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3N0cmVxOCAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBjaGFyIHMyOCkKK3sKKyAgaWYgKHMxWzhdID09IHMyOCkKKyAgICB7CisgICAgICBpZiAoczI4ID09IDApCisgICAgICAgIHJldHVybiAxOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gc3RyZXE5IChzMSwgczIpOworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorc3RyZXE3IChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIGNoYXIgczI3LCBjaGFyIHMyOCkKK3sKKyAgaWYgKHMxWzddID09IHMyNykKKyAgICB7CisgICAgICBpZiAoczI3ID09IDApCisgICAgICAgIHJldHVybiAxOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gc3RyZXE4IChzMSwgczIsIHMyOCk7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitzdHJlcTYgKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgY2hhciBzMjYsIGNoYXIgczI3LCBjaGFyIHMyOCkKK3sKKyAgaWYgKHMxWzZdID09IHMyNikKKyAgICB7CisgICAgICBpZiAoczI2ID09IDApCisgICAgICAgIHJldHVybiAxOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gc3RyZXE3IChzMSwgczIsIHMyNywgczI4KTsKKyAgICB9CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3N0cmVxNSAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBjaGFyIHMyNSwgY2hhciBzMjYsIGNoYXIgczI3LCBjaGFyIHMyOCkKK3sKKyAgaWYgKHMxWzVdID09IHMyNSkKKyAgICB7CisgICAgICBpZiAoczI1ID09IDApCisgICAgICAgIHJldHVybiAxOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gc3RyZXE2IChzMSwgczIsIHMyNiwgczI3LCBzMjgpOworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorc3RyZXE0IChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIGNoYXIgczI0LCBjaGFyIHMyNSwgY2hhciBzMjYsIGNoYXIgczI3LCBjaGFyIHMyOCkKK3sKKyAgaWYgKHMxWzRdID09IHMyNCkKKyAgICB7CisgICAgICBpZiAoczI0ID09IDApCisgICAgICAgIHJldHVybiAxOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gc3RyZXE1IChzMSwgczIsIHMyNSwgczI2LCBzMjcsIHMyOCk7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitzdHJlcTMgKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgY2hhciBzMjMsIGNoYXIgczI0LCBjaGFyIHMyNSwgY2hhciBzMjYsIGNoYXIgczI3LCBjaGFyIHMyOCkKK3sKKyAgaWYgKHMxWzNdID09IHMyMykKKyAgICB7CisgICAgICBpZiAoczIzID09IDApCisgICAgICAgIHJldHVybiAxOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gc3RyZXE0IChzMSwgczIsIHMyNCwgczI1LCBzMjYsIHMyNywgczI4KTsKKyAgICB9CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3N0cmVxMiAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBjaGFyIHMyMiwgY2hhciBzMjMsIGNoYXIgczI0LCBjaGFyIHMyNSwgY2hhciBzMjYsIGNoYXIgczI3LCBjaGFyIHMyOCkKK3sKKyAgaWYgKHMxWzJdID09IHMyMikKKyAgICB7CisgICAgICBpZiAoczIyID09IDApCisgICAgICAgIHJldHVybiAxOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gc3RyZXEzIChzMSwgczIsIHMyMywgczI0LCBzMjUsIHMyNiwgczI3LCBzMjgpOworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorc3RyZXExIChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIGNoYXIgczIxLCBjaGFyIHMyMiwgY2hhciBzMjMsIGNoYXIgczI0LCBjaGFyIHMyNSwgY2hhciBzMjYsIGNoYXIgczI3LCBjaGFyIHMyOCkKK3sKKyAgaWYgKHMxWzFdID09IHMyMSkKKyAgICB7CisgICAgICBpZiAoczIxID09IDApCisgICAgICAgIHJldHVybiAxOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gc3RyZXEyIChzMSwgczIsIHMyMiwgczIzLCBzMjQsIHMyNSwgczI2LCBzMjcsIHMyOCk7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitzdHJlcTAgKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgY2hhciBzMjAsIGNoYXIgczIxLCBjaGFyIHMyMiwgY2hhciBzMjMsIGNoYXIgczI0LCBjaGFyIHMyNSwgY2hhciBzMjYsIGNoYXIgczI3LCBjaGFyIHMyOCkKK3sKKyAgaWYgKHMxWzBdID09IHMyMCkKKyAgICB7CisgICAgICBpZiAoczIwID09IDApCisgICAgICAgIHJldHVybiAxOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gc3RyZXExIChzMSwgczIsIHMyMSwgczIyLCBzMjMsIHMyNCwgczI1LCBzMjYsIHMyNywgczI4KTsKKyAgICB9CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworI2RlZmluZSBTVFJFUV9PUFQoczEsczIsczIwLHMyMSxzMjIsczIzLHMyNCxzMjUsczI2LHMyNyxzMjgpIFwKKyAgc3RyZXEwIChzMSwgczIsIHMyMCwgczIxLCBzMjIsIHMyMywgczI0LCBzMjUsIHMyNiwgczI3LCBzMjgpCisKKyNlbHNlCisKKyNkZWZpbmUgU1RSRVFfT1BUKHMxLHMyLHMyMCxzMjEsczIyLHMyMyxzMjQsczI1LHMyNixzMjcsczI4KSBcCisgIChzdHJjbXAgKHMxLCBzMikgPT0gMCkKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfR0xfU1RSRVFfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL3N0cmVycm9yLW92ZXJyaWRlLmMgYi9saWIvc3RyZXJyb3Itb3ZlcnJpZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2NhYzY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3N0cmVycm9yLW92ZXJyaWRlLmMKQEAgLTAsMCArMSwzMDIgQEAKKy8qIHN0cmVycm9yLW92ZXJyaWRlLmMgLS0tIFBPU0lYIGNvbXBhdGlibGUgc3lzdGVtIGVycm9yIHJvdXRpbmUKKworICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LCAyMDEwLiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSAic3RyZXJyb3Itb3ZlcnJpZGUuaCIKKworI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpZiBHTlVMSUJfZGVmaW5lZF9FV0lOU09DSyAvKiBuYXRpdmUgV2luZG93cyBwbGF0Zm9ybXMgKi8KKyMgaWYgSEFWRV9XSU5TT0NLMl9ICisjICBpbmNsdWRlIDx3aW5zb2NrMi5oPgorIyBlbmRpZgorI2VuZGlmCisKKy8qIElmIEVSUk5VTSBtYXBzIHRvIGFuIGVycm5vIHZhbHVlIGRlZmluZWQgYnkgZ251bGliLCByZXR1cm4gYSBzdHJpbmcKKyAgIGRlc2NyaWJpbmcgdGhlIGVycm9yLiAgT3RoZXJ3aXNlIHJldHVybiBOVUxMLiAgKi8KK2NvbnN0IGNoYXIgKgorc3RyZXJyb3Jfb3ZlcnJpZGUgKGludCBlcnJudW0pCit7CisgIC8qIFRoZXNlIGVycm9yIG1lc3NhZ2VzIGFyZSB0YWtlbiBmcm9tIGdsaWJjL3N5c2RlcHMvZ251L2Vycmxpc3QuYy4gICovCisgIHN3aXRjaCAoZXJybnVtKQorICAgIHsKKyNpZiBSRVBMQUNFX1NUUkVSUk9SXzAKKyAgICBjYXNlIDA6CisgICAgICByZXR1cm4gIlN1Y2Nlc3MiOworI2VuZGlmCisKKyNpZiBHTlVMSUJfZGVmaW5lZF9FU09DSyAvKiBuYXRpdmUgV2luZG93cyBwbGF0Zm9ybXMgd2l0aCBvbGRlciA8ZXJybm8uaD4gKi8KKyAgICBjYXNlIEVJTlBST0dSRVNTOgorICAgICAgcmV0dXJuICJPcGVyYXRpb24gbm93IGluIHByb2dyZXNzIjsKKyAgICBjYXNlIEVBTFJFQURZOgorICAgICAgcmV0dXJuICJPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcyI7CisgICAgY2FzZSBFTk9UU09DSzoKKyAgICAgIHJldHVybiAiU29ja2V0IG9wZXJhdGlvbiBvbiBub24tc29ja2V0IjsKKyAgICBjYXNlIEVERVNUQUREUlJFUToKKyAgICAgIHJldHVybiAiRGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZCI7CisgICAgY2FzZSBFTVNHU0laRToKKyAgICAgIHJldHVybiAiTWVzc2FnZSB0b28gbG9uZyI7CisgICAgY2FzZSBFUFJPVE9UWVBFOgorICAgICAgcmV0dXJuICJQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQiOworICAgIGNhc2UgRU5PUFJPVE9PUFQ6CisgICAgICByZXR1cm4gIlByb3RvY29sIG5vdCBhdmFpbGFibGUiOworICAgIGNhc2UgRVBST1RPTk9TVVBQT1JUOgorICAgICAgcmV0dXJuICJQcm90b2NvbCBub3Qgc3VwcG9ydGVkIjsKKyAgICBjYXNlIEVPUE5PVFNVUFA6CisgICAgICByZXR1cm4gIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIjsKKyAgICBjYXNlIEVBRk5PU1VQUE9SVDoKKyAgICAgIHJldHVybiAiQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCI7CisgICAgY2FzZSBFQUREUklOVVNFOgorICAgICAgcmV0dXJuICJBZGRyZXNzIGFscmVhZHkgaW4gdXNlIjsKKyAgICBjYXNlIEVBRERSTk9UQVZBSUw6CisgICAgICByZXR1cm4gIkNhbm5vdCBhc3NpZ24gcmVxdWVzdGVkIGFkZHJlc3MiOworICAgIGNhc2UgRU5FVERPV046CisgICAgICByZXR1cm4gIk5ldHdvcmsgaXMgZG93biI7CisgICAgY2FzZSBFTkVUVU5SRUFDSDoKKyAgICAgIHJldHVybiAiTmV0d29yayBpcyB1bnJlYWNoYWJsZSI7CisgICAgY2FzZSBFQ09OTlJFU0VUOgorICAgICAgcmV0dXJuICJDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIiOworICAgIGNhc2UgRU5PQlVGUzoKKyAgICAgIHJldHVybiAiTm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZSI7CisgICAgY2FzZSBFSVNDT05OOgorICAgICAgcmV0dXJuICJUcmFuc3BvcnQgZW5kcG9pbnQgaXMgYWxyZWFkeSBjb25uZWN0ZWQiOworICAgIGNhc2UgRU5PVENPTk46CisgICAgICByZXR1cm4gIlRyYW5zcG9ydCBlbmRwb2ludCBpcyBub3QgY29ubmVjdGVkIjsKKyAgICBjYXNlIEVUSU1FRE9VVDoKKyAgICAgIHJldHVybiAiQ29ubmVjdGlvbiB0aW1lZCBvdXQiOworICAgIGNhc2UgRUNPTk5SRUZVU0VEOgorICAgICAgcmV0dXJuICJDb25uZWN0aW9uIHJlZnVzZWQiOworICAgIGNhc2UgRUxPT1A6CisgICAgICByZXR1cm4gIlRvbyBtYW55IGxldmVscyBvZiBzeW1ib2xpYyBsaW5rcyI7CisgICAgY2FzZSBFSE9TVFVOUkVBQ0g6CisgICAgICByZXR1cm4gIk5vIHJvdXRlIHRvIGhvc3QiOworICAgIGNhc2UgRVdPVUxEQkxPQ0s6CisgICAgICByZXR1cm4gIk9wZXJhdGlvbiB3b3VsZCBibG9jayI7CisjZW5kaWYKKyNpZiBHTlVMSUJfZGVmaW5lZF9FU1RSRUFNUyAvKiBuYXRpdmUgV2luZG93cyBwbGF0Zm9ybXMgd2l0aCBvbGRlciA8ZXJybm8uaD4gKi8KKyAgICBjYXNlIEVUWFRCU1k6CisgICAgICByZXR1cm4gIlRleHQgZmlsZSBidXN5IjsKKyAgICBjYXNlIEVOT0RBVEE6CisgICAgICByZXR1cm4gIk5vIGRhdGEgYXZhaWxhYmxlIjsKKyAgICBjYXNlIEVOT1NSOgorICAgICAgcmV0dXJuICJPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMiOworICAgIGNhc2UgRU5PU1RSOgorICAgICAgcmV0dXJuICJEZXZpY2Ugbm90IGEgc3RyZWFtIjsKKyAgICBjYXNlIEVUSU1FOgorICAgICAgcmV0dXJuICJUaW1lciBleHBpcmVkIjsKKyAgICBjYXNlIEVPVEhFUjoKKyAgICAgIHJldHVybiAiT3RoZXIgZXJyb3IiOworI2VuZGlmCisjaWYgR05VTElCX2RlZmluZWRfRVdJTlNPQ0sgLyogbmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zICovCisgICAgY2FzZSBFU09DS1ROT1NVUFBPUlQ6CisgICAgICByZXR1cm4gIlNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQiOworICAgIGNhc2UgRVBGTk9TVVBQT1JUOgorICAgICAgcmV0dXJuICJQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZCI7CisgICAgY2FzZSBFU0hVVERPV046CisgICAgICByZXR1cm4gIkNhbm5vdCBzZW5kIGFmdGVyIHRyYW5zcG9ydCBlbmRwb2ludCBzaHV0ZG93biI7CisgICAgY2FzZSBFVE9PTUFOWVJFRlM6CisgICAgICByZXR1cm4gIlRvbyBtYW55IHJlZmVyZW5jZXM6IGNhbm5vdCBzcGxpY2UiOworICAgIGNhc2UgRUhPU1RET1dOOgorICAgICAgcmV0dXJuICJIb3N0IGlzIGRvd24iOworICAgIGNhc2UgRVBST0NMSU06CisgICAgICByZXR1cm4gIlRvbyBtYW55IHByb2Nlc3NlcyI7CisgICAgY2FzZSBFVVNFUlM6CisgICAgICByZXR1cm4gIlRvbyBtYW55IHVzZXJzIjsKKyAgICBjYXNlIEVEUVVPVDoKKyAgICAgIHJldHVybiAiRGlzayBxdW90YSBleGNlZWRlZCI7CisgICAgY2FzZSBFU1RBTEU6CisgICAgICByZXR1cm4gIlN0YWxlIE5GUyBmaWxlIGhhbmRsZSI7CisgICAgY2FzZSBFUkVNT1RFOgorICAgICAgcmV0dXJuICJPYmplY3QgaXMgcmVtb3RlIjsKKyMgaWYgSEFWRV9XSU5TT0NLMl9ICisgICAgICAvKiBXU0FfSU5WQUxJRF9IQU5ETEUgbWFwcyB0byBFQkFERiAqLworICAgICAgLyogV1NBX05PVF9FTk9VR0hfTUVNT1JZIG1hcHMgdG8gRU5PTUVNICovCisgICAgICAvKiBXU0FfSU5WQUxJRF9QQVJBTUVURVIgbWFwcyB0byBFSU5WQUwgKi8KKyAgICBjYXNlIFdTQV9PUEVSQVRJT05fQUJPUlRFRDoKKyAgICAgIHJldHVybiAiT3ZlcmxhcHBlZCBvcGVyYXRpb24gYWJvcnRlZCI7CisgICAgY2FzZSBXU0FfSU9fSU5DT01QTEVURToKKyAgICAgIHJldHVybiAiT3ZlcmxhcHBlZCBJL08gZXZlbnQgb2JqZWN0IG5vdCBpbiBzaWduYWxlZCBzdGF0ZSI7CisgICAgY2FzZSBXU0FfSU9fUEVORElORzoKKyAgICAgIHJldHVybiAiT3ZlcmxhcHBlZCBvcGVyYXRpb25zIHdpbGwgY29tcGxldGUgbGF0ZXIiOworICAgICAgLyogV1NBRUlOVFIgbWFwcyB0byBFSU5UUiAqLworICAgICAgLyogV1NBRUJBREYgbWFwcyB0byBFQkFERiAqLworICAgICAgLyogV1NBRUFDQ0VTIG1hcHMgdG8gRUFDQ0VTICovCisgICAgICAvKiBXU0FFRkFVTFQgbWFwcyB0byBFRkFVTFQgKi8KKyAgICAgIC8qIFdTQUVJTlZBTCBtYXBzIHRvIEVJTlZBTCAqLworICAgICAgLyogV1NBRU1GSUxFIG1hcHMgdG8gRU1GSUxFICovCisgICAgICAvKiBXU0FFV09VTERCTE9DSyBtYXBzIHRvIEVXT1VMREJMT0NLICovCisgICAgICAvKiBXU0FFSU5QUk9HUkVTUyBtYXBzIHRvIEVJTlBST0dSRVNTICovCisgICAgICAvKiBXU0FFQUxSRUFEWSBtYXBzIHRvIEVBTFJFQURZICovCisgICAgICAvKiBXU0FFTk9UU09DSyBtYXBzIHRvIEVOT1RTT0NLICovCisgICAgICAvKiBXU0FFREVTVEFERFJSRVEgbWFwcyB0byBFREVTVEFERFJSRVEgKi8KKyAgICAgIC8qIFdTQUVNU0dTSVpFIG1hcHMgdG8gRU1TR1NJWkUgKi8KKyAgICAgIC8qIFdTQUVQUk9UT1RZUEUgbWFwcyB0byBFUFJPVE9UWVBFICovCisgICAgICAvKiBXU0FFTk9QUk9UT09QVCBtYXBzIHRvIEVOT1BST1RPT1BUICovCisgICAgICAvKiBXU0FFUFJPVE9OT1NVUFBPUlQgbWFwcyB0byBFUFJPVE9OT1NVUFBPUlQgKi8KKyAgICAgIC8qIFdTQUVTT0NLVE5PU1VQUE9SVCBpcyBFU09DS1ROT1NVUFBPUlQgKi8KKyAgICAgIC8qIFdTQUVPUE5PVFNVUFAgbWFwcyB0byBFT1BOT1RTVVBQICovCisgICAgICAvKiBXU0FFUEZOT1NVUFBPUlQgaXMgRVBGTk9TVVBQT1JUICovCisgICAgICAvKiBXU0FFQUZOT1NVUFBPUlQgbWFwcyB0byBFQUZOT1NVUFBPUlQgKi8KKyAgICAgIC8qIFdTQUVBRERSSU5VU0UgbWFwcyB0byBFQUREUklOVVNFICovCisgICAgICAvKiBXU0FFQUREUk5PVEFWQUlMIG1hcHMgdG8gRUFERFJOT1RBVkFJTCAqLworICAgICAgLyogV1NBRU5FVERPV04gbWFwcyB0byBFTkVURE9XTiAqLworICAgICAgLyogV1NBRU5FVFVOUkVBQ0ggbWFwcyB0byBFTkVUVU5SRUFDSCAqLworICAgICAgLyogV1NBRU5FVFJFU0VUIG1hcHMgdG8gRU5FVFJFU0VUICovCisgICAgICAvKiBXU0FFQ09OTkFCT1JURUQgbWFwcyB0byBFQ09OTkFCT1JURUQgKi8KKyAgICAgIC8qIFdTQUVDT05OUkVTRVQgbWFwcyB0byBFQ09OTlJFU0VUICovCisgICAgICAvKiBXU0FFTk9CVUZTIG1hcHMgdG8gRU5PQlVGUyAqLworICAgICAgLyogV1NBRUlTQ09OTiBtYXBzIHRvIEVJU0NPTk4gKi8KKyAgICAgIC8qIFdTQUVOT1RDT05OIG1hcHMgdG8gRU5PVENPTk4gKi8KKyAgICAgIC8qIFdTQUVTSFVURE9XTiBpcyBFU0hVVERPV04gKi8KKyAgICAgIC8qIFdTQUVUT09NQU5ZUkVGUyBpcyBFVE9PTUFOWVJFRlMgKi8KKyAgICAgIC8qIFdTQUVUSU1FRE9VVCBtYXBzIHRvIEVUSU1FRE9VVCAqLworICAgICAgLyogV1NBRUNPTk5SRUZVU0VEIG1hcHMgdG8gRUNPTk5SRUZVU0VEICovCisgICAgICAvKiBXU0FFTE9PUCBtYXBzIHRvIEVMT09QICovCisgICAgICAvKiBXU0FFTkFNRVRPT0xPTkcgbWFwcyB0byBFTkFNRVRPT0xPTkcgKi8KKyAgICAgIC8qIFdTQUVIT1NURE9XTiBpcyBFSE9TVERPV04gKi8KKyAgICAgIC8qIFdTQUVIT1NUVU5SRUFDSCBtYXBzIHRvIEVIT1NUVU5SRUFDSCAqLworICAgICAgLyogV1NBRU5PVEVNUFRZIG1hcHMgdG8gRU5PVEVNUFRZICovCisgICAgICAvKiBXU0FFUFJPQ0xJTSBpcyBFUFJPQ0xJTSAqLworICAgICAgLyogV1NBRVVTRVJTIGlzIEVVU0VSUyAqLworICAgICAgLyogV1NBRURRVU9UIGlzIEVEUVVPVCAqLworICAgICAgLyogV1NBRVNUQUxFIGlzIEVTVEFMRSAqLworICAgICAgLyogV1NBRVJFTU9URSBpcyBFUkVNT1RFICovCisgICAgY2FzZSBXU0FTWVNOT1RSRUFEWToKKyAgICAgIHJldHVybiAiTmV0d29yayBzdWJzeXN0ZW0gaXMgdW5hdmFpbGFibGUiOworICAgIGNhc2UgV1NBVkVSTk9UU1VQUE9SVEVEOgorICAgICAgcmV0dXJuICJXaW5zb2NrLmRsbCB2ZXJzaW9uIG91dCBvZiByYW5nZSI7CisgICAgY2FzZSBXU0FOT1RJTklUSUFMSVNFRDoKKyAgICAgIHJldHVybiAiU3VjY2Vzc2Z1bCBXU0FTdGFydHVwIG5vdCB5ZXQgcGVyZm9ybWVkIjsKKyAgICBjYXNlIFdTQUVESVNDT046CisgICAgICByZXR1cm4gIkdyYWNlZnVsIHNodXRkb3duIGluIHByb2dyZXNzIjsKKyAgICBjYXNlIFdTQUVOT01PUkU6IGNhc2UgV1NBX0VfTk9fTU9SRToKKyAgICAgIHJldHVybiAiTm8gbW9yZSByZXN1bHRzIjsKKyAgICBjYXNlIFdTQUVDQU5DRUxMRUQ6IGNhc2UgV1NBX0VfQ0FOQ0VMTEVEOgorICAgICAgcmV0dXJuICJDYWxsIHdhcyBjYW5jZWxlZCI7CisgICAgY2FzZSBXU0FFSU5WQUxJRFBST0NUQUJMRToKKyAgICAgIHJldHVybiAiUHJvY2VkdXJlIGNhbGwgdGFibGUgaXMgaW52YWxpZCI7CisgICAgY2FzZSBXU0FFSU5WQUxJRFBST1ZJREVSOgorICAgICAgcmV0dXJuICJTZXJ2aWNlIHByb3ZpZGVyIGlzIGludmFsaWQiOworICAgIGNhc2UgV1NBRVBST1ZJREVSRkFJTEVESU5JVDoKKyAgICAgIHJldHVybiAiU2VydmljZSBwcm92aWRlciBmYWlsZWQgdG8gaW5pdGlhbGl6ZSI7CisgICAgY2FzZSBXU0FTWVNDQUxMRkFJTFVSRToKKyAgICAgIHJldHVybiAiU3lzdGVtIGNhbGwgZmFpbHVyZSI7CisgICAgY2FzZSBXU0FTRVJWSUNFX05PVF9GT1VORDoKKyAgICAgIHJldHVybiAiU2VydmljZSBub3QgZm91bmQiOworICAgIGNhc2UgV1NBVFlQRV9OT1RfRk9VTkQ6CisgICAgICByZXR1cm4gIkNsYXNzIHR5cGUgbm90IGZvdW5kIjsKKyAgICBjYXNlIFdTQUVSRUZVU0VEOgorICAgICAgcmV0dXJuICJEYXRhYmFzZSBxdWVyeSB3YXMgcmVmdXNlZCI7CisgICAgY2FzZSBXU0FIT1NUX05PVF9GT1VORDoKKyAgICAgIHJldHVybiAiSG9zdCBub3QgZm91bmQiOworICAgIGNhc2UgV1NBVFJZX0FHQUlOOgorICAgICAgcmV0dXJuICJOb25hdXRob3JpdGF0aXZlIGhvc3Qgbm90IGZvdW5kIjsKKyAgICBjYXNlIFdTQU5PX1JFQ09WRVJZOgorICAgICAgcmV0dXJuICJOb25yZWNvdmVyYWJsZSBlcnJvciI7CisgICAgY2FzZSBXU0FOT19EQVRBOgorICAgICAgcmV0dXJuICJWYWxpZCBuYW1lLCBubyBkYXRhIHJlY29yZCBvZiByZXF1ZXN0ZWQgdHlwZSI7CisgICAgICAvKiBXU0FfUU9TXyogb21pdHRlZCAqLworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBHTlVMSUJfZGVmaW5lZF9FTk9NU0cKKyAgICBjYXNlIEVOT01TRzoKKyAgICAgIHJldHVybiAiTm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUiOworI2VuZGlmCisKKyNpZiBHTlVMSUJfZGVmaW5lZF9FSURSTQorICAgIGNhc2UgRUlEUk06CisgICAgICByZXR1cm4gIklkZW50aWZpZXIgcmVtb3ZlZCI7CisjZW5kaWYKKworI2lmIEdOVUxJQl9kZWZpbmVkX0VOT0xJTksKKyAgICBjYXNlIEVOT0xJTks6CisgICAgICByZXR1cm4gIkxpbmsgaGFzIGJlZW4gc2V2ZXJlZCI7CisjZW5kaWYKKworI2lmIEdOVUxJQl9kZWZpbmVkX0VQUk9UTworICAgIGNhc2UgRVBST1RPOgorICAgICAgcmV0dXJuICJQcm90b2NvbCBlcnJvciI7CisjZW5kaWYKKworI2lmIEdOVUxJQl9kZWZpbmVkX0VNVUxUSUhPUAorICAgIGNhc2UgRU1VTFRJSE9QOgorICAgICAgcmV0dXJuICJNdWx0aWhvcCBhdHRlbXB0ZWQiOworI2VuZGlmCisKKyNpZiBHTlVMSUJfZGVmaW5lZF9FQkFETVNHCisgICAgY2FzZSBFQkFETVNHOgorICAgICAgcmV0dXJuICJCYWQgbWVzc2FnZSI7CisjZW5kaWYKKworI2lmIEdOVUxJQl9kZWZpbmVkX0VPVkVSRkxPVworICAgIGNhc2UgRU9WRVJGTE9XOgorICAgICAgcmV0dXJuICJWYWx1ZSB0b28gbGFyZ2UgZm9yIGRlZmluZWQgZGF0YSB0eXBlIjsKKyNlbmRpZgorCisjaWYgR05VTElCX2RlZmluZWRfRU5PVFNVUAorICAgIGNhc2UgRU5PVFNVUDoKKyAgICAgIHJldHVybiAiTm90IHN1cHBvcnRlZCI7CisjZW5kaWYKKworI2lmIEdOVUxJQl9kZWZpbmVkX0VORVRSRVNFVAorICAgIGNhc2UgRU5FVFJFU0VUOgorICAgICAgcmV0dXJuICJOZXR3b3JrIGRyb3BwZWQgY29ubmVjdGlvbiBvbiByZXNldCI7CisjZW5kaWYKKworI2lmIEdOVUxJQl9kZWZpbmVkX0VDT05OQUJPUlRFRAorICAgIGNhc2UgRUNPTk5BQk9SVEVEOgorICAgICAgcmV0dXJuICJTb2Z0d2FyZSBjYXVzZWQgY29ubmVjdGlvbiBhYm9ydCI7CisjZW5kaWYKKworI2lmIEdOVUxJQl9kZWZpbmVkX0VTVEFMRQorICAgIGNhc2UgRVNUQUxFOgorICAgICAgcmV0dXJuICJTdGFsZSBORlMgZmlsZSBoYW5kbGUiOworI2VuZGlmCisKKyNpZiBHTlVMSUJfZGVmaW5lZF9FRFFVT1QKKyAgICBjYXNlIEVEUVVPVDoKKyAgICAgIHJldHVybiAiRGlzayBxdW90YSBleGNlZWRlZCI7CisjZW5kaWYKKworI2lmIEdOVUxJQl9kZWZpbmVkX0VDQU5DRUxFRAorICAgIGNhc2UgRUNBTkNFTEVEOgorICAgICAgcmV0dXJuICJPcGVyYXRpb24gY2FuY2VsZWQiOworI2VuZGlmCisKKyNpZiBHTlVMSUJfZGVmaW5lZF9FT1dORVJERUFECisgICAgY2FzZSBFT1dORVJERUFEOgorICAgICAgcmV0dXJuICJPd25lciBkaWVkIjsKKyNlbmRpZgorCisjaWYgR05VTElCX2RlZmluZWRfRU5PVFJFQ09WRVJBQkxFCisgICAgY2FzZSBFTk9UUkVDT1ZFUkFCTEU6CisgICAgICByZXR1cm4gIlN0YXRlIG5vdCByZWNvdmVyYWJsZSI7CisjZW5kaWYKKworI2lmIEdOVUxJQl9kZWZpbmVkX0VJTFNFUQorICAgIGNhc2UgRUlMU0VROgorICAgICAgcmV0dXJuICJJbnZhbGlkIG9yIGluY29tcGxldGUgbXVsdGlieXRlIG9yIHdpZGUgY2hhcmFjdGVyIjsKKyNlbmRpZgorCisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2xpYi9zdHJlcnJvci1vdmVycmlkZS5oIGIvbGliL3N0cmVycm9yLW92ZXJyaWRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ2ODY4MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9zdHJlcnJvci1vdmVycmlkZS5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qIHN0cmVycm9yLW92ZXJyaWRlLmggLS0tIFBPU0lYIGNvbXBhdGlibGUgc3lzdGVtIGVycm9yIHJvdXRpbmUKKworICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX0dMX1NUUkVSUk9SX09WRVJSSURFX0gKKyMgZGVmaW5lIF9HTF9TVFJFUlJPUl9PVkVSUklERV9ICisKKyMgaW5jbHVkZSA8ZXJybm8uaD4KKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8qIFJlYXNvbmFibGUgYnVmZmVyIHNpemUgdGhhdCBzaG91bGQgbmV2ZXIgdHJpZ2dlciBFUkFOR0U7IGlmIHRoaXMKKyAgIHByb3ZlcyB0b28gc21hbGwsIHdlIGludGVudGlvbmFsbHkgYWJvcnQoKSwgdG8gcmVtaW5kIHVzIHRvIGZpeAorICAgdGhpcyB2YWx1ZS4gICovCisjIGRlZmluZSBTVEFDS0JVRl9MRU4gMjU2CisKKy8qIElmIEVSUk5VTSBtYXBzIHRvIGFuIGVycm5vIHZhbHVlIGRlZmluZWQgYnkgZ251bGliLCByZXR1cm4gYSBzdHJpbmcKKyAgIGRlc2NyaWJpbmcgdGhlIGVycm9yLiAgT3RoZXJ3aXNlIHJldHVybiBOVUxMLiAgKi8KKyMgaWYgUkVQTEFDRV9TVFJFUlJPUl8wIFwKKyAgICAgfHwgR05VTElCX2RlZmluZWRfRVNPQ0sgXAorICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FU1RSRUFNUyBcCisgICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VXSU5TT0NLIFwKKyAgICAgfHwgR05VTElCX2RlZmluZWRfRU5PTVNHIFwKKyAgICAgfHwgR05VTElCX2RlZmluZWRfRUlEUk0gXAorICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FTk9MSU5LIFwKKyAgICAgfHwgR05VTElCX2RlZmluZWRfRVBST1RPIFwKKyAgICAgfHwgR05VTElCX2RlZmluZWRfRU1VTFRJSE9QIFwKKyAgICAgfHwgR05VTElCX2RlZmluZWRfRUJBRE1TRyBcCisgICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VPVkVSRkxPVyBcCisgICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VOT1RTVVAgXAorICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FTkVUUkVTRVQgXAorICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FQ09OTkFCT1JURUQgXAorICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FU1RBTEUgXAorICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FRFFVT1QgXAorICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FQ0FOQ0VMRUQgXAorICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FT1dORVJERUFEIFwKKyAgICAgfHwgR05VTElCX2RlZmluZWRfRU5PVFJFQ09WRVJBQkxFIFwKKyAgICAgfHwgR05VTElCX2RlZmluZWRfRUlMU0VRCitleHRlcm4gY29uc3QgY2hhciAqc3RyZXJyb3Jfb3ZlcnJpZGUgKGludCBlcnJudW0pOworIyBlbHNlCisjICBkZWZpbmUgc3RyZXJyb3Jfb3ZlcnJpZGUoaWdub3JlZCkgTlVMTAorIyBlbmRpZgorCisjZW5kaWYgLyogX0dMX1NUUkVSUk9SX09WRVJSSURFX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9zdHJlcnJvci5jIGIvbGliL3N0cmVycm9yLmMKaW5kZXggNjIzODIxZC4uNTg3YmQyMSAxMDA2NDQKLS0tIGEvbGliL3N0cmVycm9yLmMKKysrIGIvbGliL3N0cmVycm9yLmMKQEAgLTEsMTIgKzEsMTEgQEAKLS8qIHN0cmVycm9yLmMgLS0tIEFOU0kgQyBjb21wYXRpYmxlIHN5c3RlbSBlcnJvciByb3V0aW5lCisvKiBzdHJlcnJvci5jIC0tLSBQT1NJWCBjb21wYXRpYmxlIHN5c3RlbSBlcnJvciByb3V0aW5lCiAKLSAgIENvcHlyaWdodCAoQykgMTk4NiwgMTk4OCwgMTk4OSwgMTk5MSwgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpAQCAtMTQsMzYgKzEzLDU4IEBACiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxjb25maWcuaD4KIAotI2luY2x1ZGUgPGxpbWl0cy5oPgorLyogU3BlY2lmaWNhdGlvbi4gICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLS8qIERvbid0IGluY2x1ZGUgPHN0ZGlvLmg+LCBzaW5jZSBpdCBtYXkgb3IgbWF5IG5vdCBkZWNsYXJlCi0gICBzeXNfZXJybGlzdCBhbmQgaXRzIGRlY2xhcmF0aW9ucyBtYXkgY29sbGlkZSB3aXRoIG91cnMuICBKdXN0Ci0gICBkZWNsYXJlIHRoZSBzdHVmZiB0aGF0IHdlIG5lZWQgZGlyZWN0bHkuICBTdGFuZGFyZCBob3N0ZWQgQzg5Ci0gICBpbXBsZW1lbnRhdGlvbnMgZGVmaW5lIHN0cmVycm9yIGFuZCB0aGV5IGRvbid0IG5lZWQgdGhpcyBzdHJlcnJvcgotICAgZnVuY3Rpb24sIHNvIHRha2Ugc29tZSBsaWJlcnRpZXMgd2l0aCB0aGUgc3RhbmRhcmQgdG8gY2F0ZXIgdG8KLSAgIGFuY2llbnQgb3IgbGltaXRlZCBmcmVlc3RhbmRpbmcgaW1wbGVtZW50YXRpb25zLiAgKi8KLWludCBzcHJpbnRmIChjaGFyICosIGNoYXIgY29uc3QgKiwgLi4uKTsKLWV4dGVybiBpbnQgc3lzX25lcnI7Ci1leHRlcm4gY2hhciAqc3lzX2Vycmxpc3RbXTsKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJpbnRwcm9wcy5oIgorI2luY2x1ZGUgInN0cmVycm9yLW92ZXJyaWRlLmgiCisjaW5jbHVkZSAidmVyaWZ5LmgiCisKKy8qIFVzZSB0aGUgc3lzdGVtIGZ1bmN0aW9ucywgbm90IHRoZSBnbnVsaWIgb3ZlcnJpZGVzIGluIHRoaXMgZmlsZS4gICovCisjdW5kZWYgc3ByaW50ZgogCiBjaGFyICoKIHN0cmVycm9yIChpbnQgbikKKyN1bmRlZiBzdHJlcnJvcgogewotICBzdGF0aWMgY2hhciBjb25zdCBmbXRbXSA9ICJVbmtub3duIGVycm9yICglZCkiOwotICBzdGF0aWMgY2hhciBtZXNnW3NpemVvZiBmbXQgKyBzaXplb2YgbiAqIENIQVJfQklUIC8gM107CisgIHN0YXRpYyBjaGFyIGJ1ZltTVEFDS0JVRl9MRU5dOworICBzaXplX3QgbGVuOwogCi0gIGlmIChuIDwgMCB8fCBuID49IHN5c19uZXJyKQorICAvKiBDYXN0IGF3YXkgY29uc3QsIGR1ZSB0byB0aGUgaGlzdG9yaWNhbCBzaWduYXR1cmUgb2Ygc3RyZXJyb3I7CisgICAgIGNhbGxlcnMgc2hvdWxkIG5vdCBiZSBtb2RpZnlpbmcgdGhlIHN0cmluZy4gICovCisgIGNvbnN0IGNoYXIgKm1zZyA9IHN0cmVycm9yX292ZXJyaWRlIChuKTsKKyAgaWYgKG1zZykKKyAgICByZXR1cm4gKGNoYXIgKikgbXNnOworCisgIG1zZyA9IHN0cmVycm9yIChuKTsKKworICAvKiBPdXIgc3RyZXJyb3JfciBpbXBsZW1lbnRhdGlvbiBtaWdodCB1c2UgdGhlIHN5c3RlbSdzIHN0cmVycm9yCisgICAgIGJ1ZmZlciwgc28gYWxsIG90aGVyIGNsaWVudHMgb2Ygc3RyZXJyb3IgaGF2ZSB0byBzZWUgdGhlIGVycm9yCisgICAgIGNvcGllZCBpbnRvIGEgYnVmZmVyIHRoYXQgd2UgbWFuYWdlLiAgVGhpcyBpcyBub3QgdGhyZWFkLXNhZmUsCisgICAgIGV2ZW4gaWYgdGhlIHN5c3RlbSBzdHJlcnJvciBpcywgYnV0IHBvcnRhYmxlIHByb2dyYW1zIHNob3VsZG4ndAorICAgICBiZSB1c2luZyBzdHJlcnJvciBpZiB0aGV5IGNhcmUgYWJvdXQgdGhyZWFkLXNhZmV0eS4gICovCisgIGlmICghbXNnIHx8ICEqbXNnKQogICAgIHsKLSAgICAgIHNwcmludGYgKG1lc2csIGZtdCwgbik7Ci0gICAgICByZXR1cm4gbWVzZzsKKyAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IGZtdFtdID0gIlVua25vd24gZXJyb3IgJWQiOworICAgICAgdmVyaWZ5IChzaXplb2YgYnVmID49IHNpemVvZiAoZm10KSArIElOVF9TVFJMRU5fQk9VTkQgKG4pKTsKKyAgICAgIHNwcmludGYgKGJ1ZiwgZm10LCBuKTsKKyAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgcmV0dXJuIGJ1ZjsKICAgICB9Ci0gIGVsc2UKLSAgICByZXR1cm4gc3lzX2Vycmxpc3Rbbl07CisKKyAgLyogRml4IFNUQUNLQlVGX0xFTiBpZiB0aGlzIGV2ZXIgYWJvcnRzLiAgKi8KKyAgbGVuID0gc3RybGVuIChtc2cpOworICBpZiAoc2l6ZW9mIGJ1ZiA8PSBsZW4pCisgICAgYWJvcnQgKCk7CisKKyAgcmV0dXJuIG1lbWNweSAoYnVmLCBtc2csIGxlbiArIDEpOwogfQpkaWZmIC0tZ2l0IGEvbGliL3N0cmVycm9yX3IuYyBiL2xpYi9zdHJlcnJvcl9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZmNmZjNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9zdHJlcnJvcl9yLmMKQEAgLTAsMCArMSwzMjYgQEAKKy8qIHN0cmVycm9yX3IuYyAtLS0gUE9TSVggY29tcGF0aWJsZSBzeXN0ZW0gZXJyb3Igcm91dGluZQorCisgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4sIDIwMTAuICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIEVuYWJsZSBkZWNsYXJhdGlvbiBvZiBzeXNfbmVyciBhbmQgc3lzX2Vycmxpc3QgaW4gPGVycm5vLmg+IG9uIE5ldEJTRC4gICovCisjZGVmaW5lIF9ORVRCU0RfU09VUkNFIDEKKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJzdHJlcnJvci1vdmVycmlkZS5oIgorCisjaWYgKF9fR0xJQkNfXyA+PSAyIHx8IGRlZmluZWQgX19VQ0xJQkNfXyB8fCBkZWZpbmVkIF9fQ1lHV0lOX18pICYmIEhBVkVfX19YUEdfU1RSRVJST1JfUiAvKiBnbGliYyA+PSAyLjMuNCwgY3lnd2luID49IDEuNy45ICovCisKKyMgZGVmaW5lIFVTRV9YUEdfU1RSRVJST1JfUiAxCitleHRlcm4gaW50IF9feHBnX3N0cmVycm9yX3IgKGludCBlcnJudW0sIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CisKKyNlbGlmIEhBVkVfREVDTF9TVFJFUlJPUl9SICYmICEoX19HTElCQ19fID49IDIgfHwgZGVmaW5lZCBfX1VDTElCQ19fIHx8IGRlZmluZWQgX19DWUdXSU5fXykKKworLyogVGhlIHN5c3RlbSdzIHN0cmVycm9yX3IgZnVuY3Rpb24gaXMgT0ssIGV4Y2VwdCB0aGF0IGl0cyB0aGlyZCBhcmd1bWVudAorICAgaXMgJ2ludCcsIG5vdCAnc2l6ZV90Jywgb3IgaXRzIHJldHVybiB0eXBlIGlzIHdyb25nLiAgKi8KKworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKworIyBkZWZpbmUgVVNFX1NZU1RFTV9TVFJFUlJPUl9SIDEKKworI2Vsc2UgLyogKF9fR0xJQkNfXyA+PSAyIHx8IGRlZmluZWQgX19VQ0xJQkNfXyB8fCBkZWZpbmVkIF9fQ1lHV0lOX18gPyAhSEFWRV9fX1hQR19TVFJFUlJPUl9SIDogIUhBVkVfREVDTF9TVFJFUlJPUl9SKSAqLworCisvKiBVc2UgdGhlIHN5c3RlbSdzIHN0cmVycm9yKCkuICBFeGNsdWRlIGdsaWJjIGFuZCBjeWd3aW4gYmVjYXVzZSB0aGUKKyAgIHN5c3RlbSBzdHJlcnJvcl9yIGhhcyB0aGUgd3JvbmcgcmV0dXJuIHR5cGUsIGFuZCBjeWd3aW4gMS43LjkKKyAgIHN0cmVycm9yX3IgY2xvYmJlcnMgc3RyZXJyb3IuICAqLworIyB1bmRlZiBzdHJlcnJvcgorCisjIGRlZmluZSBVU0VfU1lTVEVNX1NUUkVSUk9SIDEKKworIyBpZiBkZWZpbmVkIF9fTmV0QlNEX18gfHwgZGVmaW5lZCBfX2hwdXggfHwgKChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgIWRlZmluZWQgX19DWUdXSU5fXykgfHwgZGVmaW5lZCBfX3NnaSB8fCAoZGVmaW5lZCBfX3N1biAmJiAhZGVmaW5lZCBfTFA2NCkgfHwgZGVmaW5lZCBfX0NZR1dJTl9fCisKKy8qIE5vIGxvY2tpbmcgbmVlZGVkLiAgKi8KKworLyogR2V0IGNhdGdldHMgaW50ZXJuYXRpb25hbGl6YXRpb24gZnVuY3Rpb25zLiAgKi8KKyMgIGlmIEhBVkVfQ0FUR0VUUworIyAgIGluY2x1ZGUgPG5sX3R5cGVzLmg+CisjICBlbmRpZgorCisvKiBHZXQgc3lzX25lcnIsIHN5c19lcnJsaXN0IG9uIEhQLVVYIChvdGhlcndpc2Ugb25seSBkZWNsYXJlZCBpbiBDKysgbW9kZSkuCisgICBHZXQgc3lzX25lcnIsIHN5c19lcnJsaXN0IG9uIElSSVggKG90aGVyd2lzZSBvbmx5IGRlY2xhcmVkIHdpdGggX1NHSUFQSSkuICAqLworIyAgaWYgZGVmaW5lZCBfX2hwdXggfHwgZGVmaW5lZCBfX3NnaQorZXh0ZXJuIGludCBzeXNfbmVycjsKK2V4dGVybiBjaGFyICpzeXNfZXJybGlzdFtdOworIyAgZW5kaWYKKworLyogR2V0IHN5c19uZXJyIG9uIFNvbGFyaXMuICAqLworIyAgaWYgZGVmaW5lZCBfX3N1biAmJiAhZGVmaW5lZCBfTFA2NAorZXh0ZXJuIGludCBzeXNfbmVycjsKKyMgIGVuZGlmCisKKyMgZWxzZQorCisjICBpbmNsdWRlICJnbHRocmVhZC9sb2NrLmgiCisKKy8qIFRoaXMgbG9jayBwcm90ZWN0cyB0aGUgYnVmZmVyIHJldHVybmVkIGJ5IHN0cmVycm9yKCkuICBXZSBhc3N1bWUgdGhhdAorICAgbm8gb3RoZXIgdXNlcyBvZiBzdHJlcnJvcigpIGV4aXN0IGluIHRoZSBwcm9ncmFtLiAgKi8KK2dsX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkKHN0YXRpYywgc3RyZXJyb3JfbG9jaykKKworIyBlbmRpZgorCisjZW5kaWYKKworLyogT24gTVNWQywgdGhlcmUgaXMgbm8gc25wcmludGYoKSBmdW5jdGlvbiwganVzdCBhIF9zbnByaW50ZigpLgorICAgSXQgaXMgb2YgbG93ZXIgcXVhbGl0eSwgYnV0IHN1ZmZpY2llbnQgZm9yIHRoZSBzaW1wbGUgdXNlIGhlcmUuCisgICBXZSBvbmx5IGhhdmUgdG8gbWFrZSBzdXJlIHRvIE5VTCB0ZXJtaW5hdGUgdGhlIHJlc3VsdCAoX3NucHJpbnRmCisgICBkb2VzIG5vdCBOVUwgdGVybWluYXRlLCBsaWtlIHN0cm5jcHkpLiAgKi8KKyNpZiAhSEFWRV9TTlBSSU5URgorc3RhdGljIGludAorbG9jYWxfc25wcmludGYgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaW50IHJlc3VsdDsKKworICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKyAgcmVzdWx0ID0gX3ZzbnByaW50ZiAoYnVmLCBidWZsZW4sIGZvcm1hdCwgYXJncyk7CisgIHZhX2VuZCAoYXJncyk7CisgIGlmIChidWZsZW4gPiAwICYmIChyZXN1bHQgPCAwIHx8IHJlc3VsdCA+PSBidWZsZW4pKQorICAgIGJ1ZltidWZsZW4gLSAxXSA9ICdcMCc7CisgIHJldHVybiByZXN1bHQ7Cit9CisjIGRlZmluZSBzbnByaW50ZiBsb2NhbF9zbnByaW50ZgorI2VuZGlmCisKKy8qIENvcHkgYXMgbXVjaCBvZiBNU0cgaW50byBCVUYgYXMgcG9zc2libGUsIHdpdGhvdXQgY29ycnVwdGluZyBlcnJuby4KKyAgIFJldHVybiAwIGlmIE1TRyBmaXQgaW4gQlVGTEVOLCBvdGhlcndpc2UgcmV0dXJuIEVSQU5HRS4gICovCitzdGF0aWMgaW50CitzYWZlX2NvcHkgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwgY29uc3QgY2hhciAqbXNnKQoreworICBzaXplX3QgbGVuID0gc3RybGVuIChtc2cpOworICBpbnQgcmV0OworCisgIGlmIChsZW4gPCBidWZsZW4pCisgICAgeworICAgICAgLyogQWx0aG91Z2ggUE9TSVggYWxsb3dzIG1lbWNweSgpIHRvIGNvcnJ1cHQgZXJybm8sIHdlIGRvbid0CisgICAgICAgICBrbm93IG9mIGFueSBpbXBsZW1lbnRhdGlvbiB3aGVyZSB0aGlzIGlzIGEgcmVhbCBwcm9ibGVtLiAgKi8KKyAgICAgIG1lbWNweSAoYnVmLCBtc2csIGxlbiArIDEpOworICAgICAgcmV0ID0gMDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBtZW1jcHkgKGJ1ZiwgbXNnLCBidWZsZW4gLSAxKTsKKyAgICAgIGJ1ZltidWZsZW4gLSAxXSA9ICdcMCc7CisgICAgICByZXQgPSBFUkFOR0U7CisgICAgfQorICByZXR1cm4gcmV0OworfQorCisKK2ludAorc3RyZXJyb3JfciAoaW50IGVycm51bSwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQorI3VuZGVmIHN0cmVycm9yX3IKK3sKKyAgLyogRmlsdGVyIHRoaXMgb3V0IG5vdywgc28gdGhhdCByZXN0IG9mIHRoaXMgcmVwbGFjZW1lbnQga25vd3MgdGhhdAorICAgICB0aGVyZSBpcyByb29tIGZvciBhIG5vbi1lbXB0eSBtZXNzYWdlIGFuZCB0cmFpbGluZyBOVUwuICAqLworICBpZiAoYnVmbGVuIDw9IDEpCisgICAgeworICAgICAgaWYgKGJ1ZmxlbikKKyAgICAgICAgKmJ1ZiA9ICdcMCc7CisgICAgICByZXR1cm4gRVJBTkdFOworICAgIH0KKyAgKmJ1ZiA9ICdcMCc7CisKKyAgLyogQ2hlY2sgZm9yIGdudWxpYiBvdmVycmlkZXMuICAqLworICB7CisgICAgY2hhciBjb25zdCAqbXNnID0gc3RyZXJyb3Jfb3ZlcnJpZGUgKGVycm51bSk7CisKKyAgICBpZiAobXNnKQorICAgICAgcmV0dXJuIHNhZmVfY29weSAoYnVmLCBidWZsZW4sIG1zZyk7CisgIH0KKworICB7CisgICAgaW50IHJldDsKKyAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKworI2lmIFVTRV9YUEdfU1RSRVJST1JfUgorCisgICAgeworICAgICAgcmV0ID0gX194cGdfc3RyZXJyb3JfciAoZXJybnVtLCBidWYsIGJ1Zmxlbik7CisgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0ID0gZXJybm87CisgICAgICBpZiAoISpidWYpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBnbGliYyAyLjEzIHdvdWxkIG5vdCB0b3VjaCBidWYgb24gZXJyLCBzbyB3ZSBoYXZlIHRvIGZhbGwKKyAgICAgICAgICAgICBiYWNrIHRvIEdOVSBzdHJlcnJvcl9yIHdoaWNoIGFsd2F5cyByZXR1cm5zIGEgdGhyZWFkLXNhZmUKKyAgICAgICAgICAgICB1bnRydW5jYXRlZCBzdHJpbmcgdG8gKHBhcnRpYWxseSkgY29weSBpbnRvIG91ciBidWYuICAqLworICAgICAgICAgIHNhZmVfY29weSAoYnVmLCBidWZsZW4sIHN0cmVycm9yX3IgKGVycm51bSwgYnVmLCBidWZsZW4pKTsKKyAgICAgICAgfQorICAgIH0KKworI2VsaWYgVVNFX1NZU1RFTV9TVFJFUlJPUl9SCisKKyAgICBpZiAoYnVmbGVuID4gSU5UX01BWCkKKyAgICAgIGJ1ZmxlbiA9IElOVF9NQVg7CisKKyMgaWZkZWYgX19ocHV4CisgICAgLyogT24gSFAtVVggMTEuMzEsIHN0cmVycm9yX3IgYWx3YXlzIGZhaWxzIHdoZW4gYnVmbGVuIDwgODA7IGl0CisgICAgICAgYWxzbyBmYWlscyB0byBjaGFuZ2UgYnVmIG9uIEVJTlZBTC4gICovCisgICAgeworICAgICAgY2hhciBzdGFja2J1Zls4MF07CisKKyAgICAgIGlmIChidWZsZW4gPCBzaXplb2Ygc3RhY2tidWYpCisgICAgICAgIHsKKyAgICAgICAgICByZXQgPSBzdHJlcnJvcl9yIChlcnJudW0sIHN0YWNrYnVmLCBzaXplb2Ygc3RhY2tidWYpOworICAgICAgICAgIGlmIChyZXQgPT0gMCkKKyAgICAgICAgICAgIHJldCA9IHNhZmVfY29weSAoYnVmLCBidWZsZW4sIHN0YWNrYnVmKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICByZXQgPSBzdHJlcnJvcl9yIChlcnJudW0sIGJ1ZiwgYnVmbGVuKTsKKyAgICB9CisjIGVsc2UKKyAgICByZXQgPSBzdHJlcnJvcl9yIChlcnJudW0sIGJ1ZiwgYnVmbGVuKTsKKworICAgIC8qIFNvbWUgb2xkIGltcGxlbWVudGF0aW9ucyBtYXkgcmV0dXJuICgtMSwgRUlOVkFMKSBpbnN0ZWFkIG9mIEVJTlZBTC4gICovCisgICAgaWYgKHJldCA8IDApCisgICAgICByZXQgPSBlcnJubzsKKyMgZW5kaWYKKworIyBpZmRlZiBfQUlYCisgICAgLyogQUlYIHJldHVybnMgMCByYXRoZXIgdGhhbiBFUkFOR0Ugd2hlbiB0cnVuY2F0aW5nIHN0cmluZ3M7IHRyeQorICAgICAgIGFnYWluIHVudGlsIHdlIGFyZSBzdXJlIHdlIGdvdCB0aGUgZW50aXJlIHN0cmluZy4gICovCisgICAgaWYgKCFyZXQgJiYgc3RybGVuIChidWYpID09IGJ1ZmxlbiAtIDEpCisgICAgICB7CisgICAgICAgIGNoYXIgc3RhY2tidWZbU1RBQ0tCVUZfTEVOXTsKKyAgICAgICAgc2l6ZV90IGxlbjsKKyAgICAgICAgc3RyZXJyb3JfciAoZXJybnVtLCBzdGFja2J1Ziwgc2l6ZW9mIHN0YWNrYnVmKTsKKyAgICAgICAgbGVuID0gc3RybGVuIChzdGFja2J1Zik7CisgICAgICAgIC8qIFNUQUNLQlVGX0xFTiBzaG91bGQgaGF2ZSBiZWVuIGxhcmdlIGVub3VnaC4gICovCisgICAgICAgIGlmIChsZW4gKyAxID09IHNpemVvZiBzdGFja2J1ZikKKyAgICAgICAgICBhYm9ydCAoKTsKKyAgICAgICAgaWYgKGJ1ZmxlbiA8PSBsZW4pCisgICAgICAgICAgcmV0ID0gRVJBTkdFOworICAgICAgfQorIyBlbHNlCisgICAgLyogU29sYXJpcyAxMCBkb2VzIG5vdCBwb3B1bGF0ZSBidWYgb24gRVJBTkdFLiAgT3BlbkJTRCA0LjcKKyAgICAgICB0cnVuY2F0ZXMgZWFybHkgb24gRVJBTkdFIHJhdGhlciB0aGFuIHJldHVybiBhIHBhcnRpYWwgaW50ZWdlci4KKyAgICAgICBXZSBwcmVmZXIgdGhlIG1heGltYWwgc3RyaW5nLiAgV2Ugc2V0IGJ1ZlswXSBlYXJsaWVyLCBhbmQgd2UKKyAgICAgICBrbm93IG9mIG5vIGltcGxlbWVudGF0aW9uIHRoYXQgbW9kaWZpZXMgYnVmIHRvIGJlIGFuCisgICAgICAgdW50ZXJtaW5hdGVkIHN0cmluZywgc28gdGhpcyBzdHJsZW4gc2hvdWxkIGJlIHBvcnRhYmxlIGluCisgICAgICAgcHJhY3RpY2UgKHJhdGhlciB0aGFuIHB1bGxpbmcgaW4gYSBzYWZlciBzdHJubGVuKS4gICovCisgICAgaWYgKHJldCA9PSBFUkFOR0UgJiYgc3RybGVuIChidWYpIDwgYnVmbGVuIC0gMSkKKyAgICAgIHsKKyAgICAgICAgY2hhciBzdGFja2J1ZltTVEFDS0JVRl9MRU5dOworCisgICAgICAgIC8qIFNUQUNLQlVGX0xFTiBzaG91bGQgaGF2ZSBiZWVuIGxhcmdlIGVub3VnaC4gICovCisgICAgICAgIGlmIChzdHJlcnJvcl9yIChlcnJudW0sIHN0YWNrYnVmLCBzaXplb2Ygc3RhY2tidWYpID09IEVSQU5HRSkKKyAgICAgICAgICBhYm9ydCAoKTsKKyAgICAgICAgc2FmZV9jb3B5IChidWYsIGJ1Zmxlbiwgc3RhY2tidWYpOworICAgICAgfQorIyBlbmRpZgorCisjZWxzZSAvKiBVU0VfU1lTVEVNX1NUUkVSUk9SICovCisKKyAgICAvKiBUcnkgdG8gZG8gd2hhdCBzdHJlcnJvciAoZXJybnVtKSBkb2VzLCBidXQgd2l0aG91dCBjbG9iYmVyaW5nIHRoZQorICAgICAgIGJ1ZmZlciB1c2VkIGJ5IHN0cmVycm9yKCkuICAqLworCisjIGlmIGRlZmluZWQgX19OZXRCU0RfXyB8fCBkZWZpbmVkIF9faHB1eCB8fCAoKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhZGVmaW5lZCBfX0NZR1dJTl9fKSB8fCBkZWZpbmVkIF9fQ1lHV0lOX18gLyogTmV0QlNELCBIUC1VWCwgbmF0aXZlIFdpbmRvd3MsIEN5Z3dpbiAqLworCisgICAgLyogTmV0QlNEOiAgICAgICAgIHN5c19uZXJyLCBzeXNfZXJybGlzdCBhcmUgZGVjbGFyZWQgdGhyb3VnaCBfTkVUQlNEX1NPVVJDRQorICAgICAgICAgICAgICAgICAgICAgICBhbmQgPGVycm5vLmg+IGFib3ZlLgorICAgICAgIEhQLVVYOiAgICAgICAgICBzeXNfbmVyciwgc3lzX2Vycmxpc3QgYXJlIGRlY2xhcmVkIGV4cGxpY2l0bHkgYWJvdmUuCisgICAgICAgbmF0aXZlIFdpbmRvd3M6IHN5c19uZXJyLCBzeXNfZXJybGlzdCBhcmUgZGVjbGFyZWQgaW4gPHN0ZGxpYi5oPi4KKyAgICAgICBDeWd3aW46ICAgICAgICAgc3lzX25lcnIsIHN5c19lcnJsaXN0IGFyZSBkZWNsYXJlZCBpbiA8ZXJybm8uaD4uICAqLworICAgIGlmIChlcnJudW0gPj0gMCAmJiBlcnJudW0gPCBzeXNfbmVycikKKyAgICAgIHsKKyMgIGlmIEhBVkVfQ0FUR0VUUyAmJiAoZGVmaW5lZCBfX05ldEJTRF9fIHx8IGRlZmluZWQgX19ocHV4KQorIyAgIGlmIGRlZmluZWQgX19OZXRCU0RfXworICAgICAgICBubF9jYXRkIGNhdGQgPSBjYXRvcGVuICgibGliYyIsIE5MX0NBVF9MT0NBTEUpOworICAgICAgICBjb25zdCBjaGFyICplcnJtc2cgPQorICAgICAgICAgIChjYXRkICE9IChubF9jYXRkKS0xCisgICAgICAgICAgID8gY2F0Z2V0cyAoY2F0ZCwgMSwgZXJybnVtLCBzeXNfZXJybGlzdFtlcnJudW1dKQorICAgICAgICAgICA6IHN5c19lcnJsaXN0W2Vycm51bV0pOworIyAgIGVuZGlmCisjICAgaWYgZGVmaW5lZCBfX2hwdXgKKyAgICAgICAgbmxfY2F0ZCBjYXRkID0gY2F0b3BlbiAoInBlcnJvciIsIE5MX0NBVF9MT0NBTEUpOworICAgICAgICBjb25zdCBjaGFyICplcnJtc2cgPQorICAgICAgICAgIChjYXRkICE9IChubF9jYXRkKS0xCisgICAgICAgICAgID8gY2F0Z2V0cyAoY2F0ZCwgMSwgMSArIGVycm51bSwgc3lzX2Vycmxpc3RbZXJybnVtXSkKKyAgICAgICAgICAgOiBzeXNfZXJybGlzdFtlcnJudW1dKTsKKyMgICBlbmRpZgorIyAgZWxzZQorICAgICAgICBjb25zdCBjaGFyICplcnJtc2cgPSBzeXNfZXJybGlzdFtlcnJudW1dOworIyAgZW5kaWYKKyAgICAgICAgaWYgKGVycm1zZyA9PSBOVUxMIHx8ICplcnJtc2cgPT0gJ1wwJykKKyAgICAgICAgICByZXQgPSBFSU5WQUw7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXQgPSBzYWZlX2NvcHkgKGJ1ZiwgYnVmbGVuLCBlcnJtc2cpOworIyAgaWYgSEFWRV9DQVRHRVRTICYmIChkZWZpbmVkIF9fTmV0QlNEX18gfHwgZGVmaW5lZCBfX2hwdXgpCisgICAgICAgIGlmIChjYXRkICE9IChubF9jYXRkKS0xKQorICAgICAgICAgIGNhdGNsb3NlIChjYXRkKTsKKyMgIGVuZGlmCisgICAgICB9CisgICAgZWxzZQorICAgICAgcmV0ID0gRUlOVkFMOworCisjIGVsaWYgZGVmaW5lZCBfX3NnaSB8fCAoZGVmaW5lZCBfX3N1biAmJiAhZGVmaW5lZCBfTFA2NCkgLyogSVJJWCwgU29sYXJpcyA8PSA5IDMyLWJpdCAqLworCisgICAgLyogRm9yIGEgdmFsaWQgZXJyb3IgbnVtYmVyLCB0aGUgc3lzdGVtJ3Mgc3RyZXJyb3IoKSBmdW5jdGlvbiByZXR1cm5zCisgICAgICAgYSBwb2ludGVyIHRvIGEgbm90IGNvcGllZCBzdHJpbmcsIG5vdCB0byBhIGJ1ZmZlci4gICovCisgICAgaWYgKGVycm51bSA+PSAwICYmIGVycm51bSA8IHN5c19uZXJyKQorICAgICAgeworICAgICAgICBjaGFyICplcnJtc2cgPSBzdHJlcnJvciAoZXJybnVtKTsKKworICAgICAgICBpZiAoZXJybXNnID09IE5VTEwgfHwgKmVycm1zZyA9PSAnXDAnKQorICAgICAgICAgIHJldCA9IEVJTlZBTDsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldCA9IHNhZmVfY29weSAoYnVmLCBidWZsZW4sIGVycm1zZyk7CisgICAgICB9CisgICAgZWxzZQorICAgICAgcmV0ID0gRUlOVkFMOworCisjIGVsc2UKKworICAgIGdsX2xvY2tfbG9jayAoc3RyZXJyb3JfbG9jayk7CisKKyAgICB7CisgICAgICBjaGFyICplcnJtc2cgPSBzdHJlcnJvciAoZXJybnVtKTsKKworICAgICAgLyogRm9yIGludmFsaWQgZXJyb3IgbnVtYmVycywgc3RyZXJyb3IoKSBvbgorICAgICAgICAgICAtIElSSVggNi41IHJldHVybnMgTlVMTCwKKyAgICAgICAgICAgLSBIUC1VWCAxMSByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4gICovCisgICAgICBpZiAoZXJybXNnID09IE5VTEwgfHwgKmVycm1zZyA9PSAnXDAnKQorICAgICAgICByZXQgPSBFSU5WQUw7CisgICAgICBlbHNlCisgICAgICAgIHJldCA9IHNhZmVfY29weSAoYnVmLCBidWZsZW4sIGVycm1zZyk7CisgICAgfQorCisgICAgZ2xfbG9ja191bmxvY2sgKHN0cmVycm9yX2xvY2spOworCisjIGVuZGlmCisKKyNlbmRpZgorCisgICAgaWYgKHJldCA9PSBFSU5WQUwgJiYgISpidWYpCisgICAgICBzbnByaW50ZiAoYnVmLCBidWZsZW4sICJVbmtub3duIGVycm9yICVkIiwgZXJybnVtKTsKKworICAgIGVycm5vID0gc2F2ZWRfZXJybm87CisgICAgcmV0dXJuIHJldDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvbGliL3N0cmluZy5pbi5oIGIvbGliL3N0cmluZy5pbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZDc1MjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc3RyaW5nLmluLmgKQEAgLTAsMCArMSwxMDI5IEBACisvKiBBIEdOVS1saWtlIDxzdHJpbmcuaD4uCisKKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk2LCAyMDAxLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1RSSU5HX0gKKworI2lmIF9fR05VQ19fID49IDMKK0BQUkFHTUFfU1lTVEVNX0hFQURFUkAKKyNlbmRpZgorQFBSQUdNQV9DT0xVTU5TQAorCisvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisjQElOQ0xVREVfTkVYVEAgQE5FWFRfU1RSSU5HX0hACisKKyNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NUUklOR19ICisjZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9TVFJJTkdfSAorCisvKiBOZXRCU0QgNS4wIG1pcy1kZWZpbmVzIE5VTEwuICAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisvKiBNaXJCU0QgZGVmaW5lcyBtYnNsZW4gYXMgYSBtYWNyby4gICovCisjaWYgQEdOVUxJQl9NQlNMRU5AICYmIGRlZmluZWQgX19NaXJCU0RfXworIyBpbmNsdWRlIDx3Y2hhci5oPgorI2VuZGlmCisKKy8qIFRoZSBfX2F0dHJpYnV0ZV9fIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLgorICAgVGhlIGF0dHJpYnV0ZSBfX3B1cmVfXyB3YXMgYWRkZWQgaW4gZ2NjIDIuOTYuICAqLworI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NikKKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfUFVSRSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfUFVSRSAvKiBlbXB0eSAqLworI2VuZGlmCisKKy8qIE5ldEJTRCA1LjAgZGVjbGFyZXMgc3Ryc2lnbmFsIGluIDx1bmlzdGQuaD4sIG5vdCBpbiA8c3RyaW5nLmg+LiAgKi8KKy8qIEJ1dCBpbiBhbnkgY2FzZSBhdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9uIG9uIGdsaWJjIHN5c3RlbXMuICAqLworI2lmIChAR05VTElCX1NUUlNJR05BTEAgfHwgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSykgJiYgZGVmaW5lZCBfX05ldEJTRF9fIFwKKyAgICAmJiAhIGRlZmluZWQgX19HTElCQ19fCisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKy8qIFRoZSBkZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBMIGV0Yy4gYXJlIGNvcGllZCBoZXJlLiAgKi8KKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxMIGlzIGNvcGllZCBoZXJlLiAgKi8KKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKworCisvKiBGaW5kIHRoZSBpbmRleCBvZiB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgc2V0IGJpdC4gICovCisjaWYgQEdOVUxJQl9GRlNMQAorIyBpZiAhQEhBVkVfRkZTTEAKK19HTF9GVU5DREVDTF9TWVMgKGZmc2wsIGludCwgKGxvbmcgaW50IGkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZmc2wsIGludCwgKGxvbmcgaW50IGkpKTsKK19HTF9DWFhBTElBU1dBUk4gKGZmc2wpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmZnNsCisjIGlmIEhBVkVfUkFXX0RFQ0xfRkZTTAorX0dMX1dBUk5fT05fVVNFIChmZnNsLCAiZmZzbCBpcyBub3QgcG9ydGFibGUgLSB1c2UgdGhlIGZmc2wgbW9kdWxlIik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBGaW5kIHRoZSBpbmRleCBvZiB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgc2V0IGJpdC4gICovCisjaWYgQEdOVUxJQl9GRlNMTEAKKyMgaWYgIUBIQVZFX0ZGU0xMQAorX0dMX0ZVTkNERUNMX1NZUyAoZmZzbGwsIGludCwgKGxvbmcgbG9uZyBpbnQgaSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZmZzbGwsIGludCwgKGxvbmcgbG9uZyBpbnQgaSkpOworX0dMX0NYWEFMSUFTV0FSTiAoZmZzbGwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmZnNsbAorIyBpZiBIQVZFX1JBV19ERUNMX0ZGU0xMCitfR0xfV0FSTl9PTl9VU0UgKGZmc2xsLCAiZmZzbGwgaXMgbm90IHBvcnRhYmxlIC0gdXNlIHRoZSBmZnNsbCBtb2R1bGUiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIFJldHVybiB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgQyB3aXRoaW4gTiBieXRlcyBvZiBTLCBvciBOVUxMLiAgKi8KKyNpZiBAR05VTElCX01FTUNIUkAKKyMgaWYgQFJFUExBQ0VfTUVNQ0hSQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgbWVtY2hyIHJwbF9tZW1jaHIKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChtZW1jaHIsIHZvaWQgKiwgKHZvaWQgY29uc3QgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAobWVtY2hyLCB2b2lkICosICh2b2lkIGNvbnN0ICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pKTsKKyMgZWxzZQorIyAgaWYgISBASEFWRV9NRU1DSFJACitfR0xfRlVOQ0RFQ0xfU1lTIChtZW1jaHIsIHZvaWQgKiwgKHZvaWQgY29uc3QgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKKyAgLyogT24gc29tZSBzeXN0ZW1zLCB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYW4gb3ZlcmxvYWRlZCBmdW5jdGlvbjoKKyAgICAgICBleHRlcm4gIkMiIHsgY29uc3Qgdm9pZCAqIHN0ZDo6bWVtY2hyIChjb25zdCB2b2lkICosIGludCwgc2l6ZV90KTsgfQorICAgICAgIGV4dGVybiAiQysrIiB7IHZvaWQgKiBzdGQ6Om1lbWNociAodm9pZCAqLCBpbnQsIHNpemVfdCk7IH0gICovCitfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyIChtZW1jaHIsCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICosICh2b2lkIGNvbnN0ICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCBjb25zdCAqLCAodm9pZCBjb25zdCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSk7CisjIGVuZGlmCisjIGlmICgoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEwKSAmJiAhZGVmaW5lZCBfX1VDTElCQ19fKSBcCisgICAgICYmIChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNCkpCitfR0xfQ1hYQUxJQVNXQVJOMSAobWVtY2hyLCB2b2lkICosICh2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pKTsKK19HTF9DWFhBTElBU1dBUk4xIChtZW1jaHIsIHZvaWQgY29uc3QgKiwKKyAgICAgICAgICAgICAgICAgICAodm9pZCBjb25zdCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU1dBUk4gKG1lbWNocik7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG1lbWNocgorLyogQXNzdW1lIG1lbWNociBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFIChtZW1jaHIsICJtZW1jaHIgaGFzIHBsYXRmb3JtLXNwZWNpZmljIGJ1Z3MgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBtZW1jaHIgZm9yIHBvcnRhYmlsaXR5IiApOworI2VuZGlmCisKKy8qIFJldHVybiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBORUVETEUgaW4gSEFZU1RBQ0suICAqLworI2lmIEBHTlVMSUJfTUVNTUVNQAorIyBpZiBAUkVQTEFDRV9NRU1NRU1ACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBtZW1tZW0gcnBsX21lbW1lbQorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG1lbW1lbSwgdm9pZCAqLAorICAgICAgICAgICAgICAgICAgKHZvaWQgY29uc3QgKl9faGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrX2xlbiwKKyAgICAgICAgICAgICAgICAgICB2b2lkIGNvbnN0ICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlX2xlbikKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMykpKTsKK19HTF9DWFhBTElBU19SUEwgKG1lbW1lbSwgdm9pZCAqLAorICAgICAgICAgICAgICAgICAgKHZvaWQgY29uc3QgKl9faGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrX2xlbiwKKyAgICAgICAgICAgICAgICAgICB2b2lkIGNvbnN0ICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlX2xlbikpOworIyBlbHNlCisjICBpZiAhIEBIQVZFX0RFQ0xfTUVNTUVNQAorX0dMX0ZVTkNERUNMX1NZUyAobWVtbWVtLCB2b2lkICosCisgICAgICAgICAgICAgICAgICAodm9pZCBjb25zdCAqX19oYXlzdGFjaywgc2l6ZV90IF9faGF5c3RhY2tfbGVuLAorICAgICAgICAgICAgICAgICAgIHZvaWQgY29uc3QgKl9fbmVlZGxlLCBzaXplX3QgX19uZWVkbGVfbGVuKQorICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAzKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKG1lbW1lbSwgdm9pZCAqLAorICAgICAgICAgICAgICAgICAgKHZvaWQgY29uc3QgKl9faGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrX2xlbiwKKyAgICAgICAgICAgICAgICAgICB2b2lkIGNvbnN0ICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlX2xlbikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobWVtbWVtKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbWVtbWVtCisjIGlmIEhBVkVfUkFXX0RFQ0xfTUVNTUVNCitfR0xfV0FSTl9PTl9VU0UgKG1lbW1lbSwgIm1lbW1lbSBpcyB1bnBvcnRhYmxlIGFuZCBvZnRlbiBxdWFkcmF0aWMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBtZW1tZW0tc2ltcGxlIGZvciBwb3J0YWJpbGl0eSwgIgorICAgICAgICAgICAgICAgICAiYW5kIG1vZHVsZSBtZW1tZW0gZm9yIHNwZWVkIiApOworIyBlbmRpZgorI2VuZGlmCisKKy8qIENvcHkgTiBieXRlcyBvZiBTUkMgdG8gREVTVCwgcmV0dXJuIHBvaW50ZXIgdG8gYnl0ZXMgYWZ0ZXIgdGhlCisgICBsYXN0IHdyaXR0ZW4gYnl0ZS4gICovCisjaWYgQEdOVUxJQl9NRU1QQ1BZQAorIyBpZiAhIEBIQVZFX01FTVBDUFlACitfR0xfRlVOQ0RFQ0xfU1lTIChtZW1wY3B5LCB2b2lkICosCisgICAgICAgICAgICAgICAgICAodm9pZCAqcmVzdHJpY3QgX19kZXN0LCB2b2lkIGNvbnN0ICpyZXN0cmljdCBfX3NyYywKKyAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKG1lbXBjcHksIHZvaWQgKiwKKyAgICAgICAgICAgICAgICAgICh2b2lkICpyZXN0cmljdCBfX2Rlc3QsIHZvaWQgY29uc3QgKnJlc3RyaWN0IF9fc3JjLAorICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pKTsKK19HTF9DWFhBTElBU1dBUk4gKG1lbXBjcHkpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBtZW1wY3B5CisjIGlmIEhBVkVfUkFXX0RFQ0xfTUVNUENQWQorX0dMX1dBUk5fT05fVVNFIChtZW1wY3B5LCAibWVtcGNweSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWVtcGNweSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBTZWFyY2ggYmFja3dhcmRzIHRocm91Z2ggYSBibG9jayBmb3IgYSBieXRlIChzcGVjaWZpZWQgYXMgYW4gaW50KS4gICovCisjaWYgQEdOVUxJQl9NRU1SQ0hSQAorIyBpZiAhIEBIQVZFX0RFQ0xfTUVNUkNIUkAKK19HTF9GVU5DREVDTF9TWVMgKG1lbXJjaHIsIHZvaWQgKiwgKHZvaWQgY29uc3QgKiwgaW50LCBzaXplX3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorICAvKiBPbiBzb21lIHN5c3RlbXMsIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhbiBvdmVybG9hZGVkIGZ1bmN0aW9uOgorICAgICAgIGV4dGVybiAiQysrIiB7IGNvbnN0IHZvaWQgKiBzdGQ6Om1lbXJjaHIgKGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOyB9CisgICAgICAgZXh0ZXJuICJDKysiIHsgdm9pZCAqIHN0ZDo6bWVtcmNociAodm9pZCAqLCBpbnQsIHNpemVfdCk7IH0gICovCitfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyIChtZW1yY2hyLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqLCAodm9pZCBjb25zdCAqLCBpbnQsIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIGNvbnN0ICosICh2b2lkIGNvbnN0ICosIGludCwgc2l6ZV90KSk7CisjIGlmICgoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEwKSAmJiAhZGVmaW5lZCBfX1VDTElCQ19fKSBcCisgICAgICYmIChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNCkpCitfR0xfQ1hYQUxJQVNXQVJOMSAobWVtcmNociwgdm9pZCAqLCAodm9pZCAqLCBpbnQsIHNpemVfdCkpOworX0dMX0NYWEFMSUFTV0FSTjEgKG1lbXJjaHIsIHZvaWQgY29uc3QgKiwgKHZvaWQgY29uc3QgKiwgaW50LCBzaXplX3QpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTV0FSTiAobWVtcmNocik7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG1lbXJjaHIKKyMgaWYgSEFWRV9SQVdfREVDTF9NRU1SQ0hSCitfR0xfV0FSTl9PTl9VU0UgKG1lbXJjaHIsICJtZW1yY2hyIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBtZW1yY2hyIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgQyBpbiBTLiAgTW9yZSBlZmZpY2llbnQgdGhhbgorICAgbWVtY2hyKFMsQyxOKSwgYXQgdGhlIGV4cGVuc2Ugb2YgdW5kZWZpbmVkIGJlaGF2aW9yIGlmIEMgZG9lcyBub3QKKyAgIG9jY3VyIHdpdGhpbiBOIGJ5dGVzLiAgKi8KKyNpZiBAR05VTElCX1JBV01FTUNIUkAKKyMgaWYgISBASEFWRV9SQVdNRU1DSFJACitfR0xfRlVOQ0RFQ0xfU1lTIChyYXdtZW1jaHIsIHZvaWQgKiwgKHZvaWQgY29uc3QgKl9fcywgaW50IF9fY19pbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorICAvKiBPbiBzb21lIHN5c3RlbXMsIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhbiBvdmVybG9hZGVkIGZ1bmN0aW9uOgorICAgICAgIGV4dGVybiAiQysrIiB7IGNvbnN0IHZvaWQgKiBzdGQ6OnJhd21lbWNociAoY29uc3Qgdm9pZCAqLCBpbnQpOyB9CisgICAgICAgZXh0ZXJuICJDKysiIHsgdm9pZCAqIHN0ZDo6cmF3bWVtY2hyICh2b2lkICosIGludCk7IH0gICovCitfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyIChyYXdtZW1jaHIsCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICosICh2b2lkIGNvbnN0ICpfX3MsIGludCBfX2NfaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCBjb25zdCAqLCAodm9pZCBjb25zdCAqX19zLCBpbnQgX19jX2luKSk7CisjIGlmICgoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEwKSAmJiAhZGVmaW5lZCBfX1VDTElCQ19fKSBcCisgICAgICYmIChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNCkpCitfR0xfQ1hYQUxJQVNXQVJOMSAocmF3bWVtY2hyLCB2b2lkICosICh2b2lkICpfX3MsIGludCBfX2NfaW4pKTsKK19HTF9DWFhBTElBU1dBUk4xIChyYXdtZW1jaHIsIHZvaWQgY29uc3QgKiwgKHZvaWQgY29uc3QgKl9fcywgaW50IF9fY19pbikpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNXQVJOIChyYXdtZW1jaHIpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiByYXdtZW1jaHIKKyMgaWYgSEFWRV9SQVdfREVDTF9SQVdNRU1DSFIKK19HTF9XQVJOX09OX1VTRSAocmF3bWVtY2hyLCAicmF3bWVtY2hyIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSByYXdtZW1jaHIgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworLyogQ29weSBTUkMgdG8gRFNULCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1pbmF0aW5nICdcMCcgaW4gRFNULiAgKi8KKyNpZiBAR05VTElCX1NUUENQWUAKKyMgaWYgISBASEFWRV9TVFBDUFlACitfR0xfRlVOQ0RFQ0xfU1lTIChzdHBjcHksIGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpyZXN0cmljdCBfX2RzdCwgY2hhciBjb25zdCAqcmVzdHJpY3QgX19zcmMpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc3RwY3B5LCBjaGFyICosCisgICAgICAgICAgICAgICAgICAoY2hhciAqcmVzdHJpY3QgX19kc3QsIGNoYXIgY29uc3QgKnJlc3RyaWN0IF9fc3JjKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChzdHBjcHkpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHBjcHkKKyMgaWYgSEFWRV9SQVdfREVDTF9TVFBDUFkKK19HTF9XQVJOX09OX1VTRSAoc3RwY3B5LCAic3RwY3B5IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHBjcHkgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworLyogQ29weSBubyBtb3JlIHRoYW4gTiBieXRlcyBvZiBTUkMgdG8gRFNULCByZXR1cm5pbmcgYSBwb2ludGVyIHBhc3QgdGhlCisgICBsYXN0IG5vbi1OVUwgYnl0ZSB3cml0dGVuIGludG8gRFNULiAgKi8KKyNpZiBAR05VTElCX1NUUE5DUFlACisjIGlmIEBSRVBMQUNFX1NUUE5DUFlACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHN0cG5jcHkKKyMgICBkZWZpbmUgc3RwbmNweSBycGxfc3RwbmNweQorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHN0cG5jcHksIGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpyZXN0cmljdCBfX2RzdCwgY2hhciBjb25zdCAqcmVzdHJpY3QgX19zcmMsCisgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzdHBuY3B5LCBjaGFyICosCisgICAgICAgICAgICAgICAgICAoY2hhciAqcmVzdHJpY3QgX19kc3QsIGNoYXIgY29uc3QgKnJlc3RyaWN0IF9fc3JjLAorICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pKTsKKyMgZWxzZQorIyAgaWYgISBASEFWRV9TVFBOQ1BZQAorX0dMX0ZVTkNERUNMX1NZUyAoc3RwbmNweSwgY2hhciAqLAorICAgICAgICAgICAgICAgICAgKGNoYXIgKnJlc3RyaWN0IF9fZHN0LCBjaGFyIGNvbnN0ICpyZXN0cmljdCBfX3NyYywKKyAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzdHBuY3B5LCBjaGFyICosCisgICAgICAgICAgICAgICAgICAoY2hhciAqcmVzdHJpY3QgX19kc3QsIGNoYXIgY29uc3QgKnJlc3RyaWN0IF9fc3JjLAorICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHN0cG5jcHkpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHBuY3B5CisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RQTkNQWQorX0dMX1dBUk5fT05fVVNFIChzdHBuY3B5LCAic3RwbmNweSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RwbmNweSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLyogc3RyY2hyKCkgZG9lcyBub3Qgd29yayB3aXRoIG11bHRpYnl0ZSBzdHJpbmdzIGlmIHRoZSBsb2NhbGUgZW5jb2RpbmcgaXMKKyAgIEdCMTgwMzAgYW5kIHRoZSBjaGFyYWN0ZXIgdG8gYmUgc2VhcmNoZWQgaXMgYSBkaWdpdC4gICovCisjIHVuZGVmIHN0cmNocgorLyogQXNzdW1lIHN0cmNociBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFIChzdHJjaHIsICJzdHJjaHIgY2Fubm90IHdvcmsgY29ycmVjdGx5IG9uIGNoYXJhY3RlciBzdHJpbmdzICIKKyAgICAgICAgICAgICAgICAgImluIHNvbWUgbXVsdGlieXRlIGxvY2FsZXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgbWJzY2hyIGlmIHlvdSBjYXJlIGFib3V0IGludGVybmF0aW9uYWxpemF0aW9uIik7CisjZW5kaWYKKworLyogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBDIGluIFMgb3IgdGhlIGZpbmFsIE5VTCBieXRlLiAgKi8KKyNpZiBAR05VTElCX1NUUkNIUk5VTEAKKyMgaWYgQFJFUExBQ0VfU1RSQ0hSTlVMQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgc3RyY2hybnVsIHJwbF9zdHJjaHJudWwKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChzdHJjaHJudWwsIGNoYXIgKiwgKGNvbnN0IGNoYXIgKl9fcywgaW50IF9fY19pbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoc3RyY2hybnVsLCBjaGFyICosCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqc3RyLCBpbnQgY2gpKTsKKyMgZWxzZQorIyAgaWYgISBASEFWRV9TVFJDSFJOVUxACitfR0xfRlVOQ0RFQ0xfU1lTIChzdHJjaHJudWwsIGNoYXIgKiwgKGNoYXIgY29uc3QgKl9fcywgaW50IF9fY19pbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKKyAgLyogT24gc29tZSBzeXN0ZW1zLCB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYW4gb3ZlcmxvYWRlZCBmdW5jdGlvbjoKKyAgICAgICBleHRlcm4gIkMrKyIgeyBjb25zdCBjaGFyICogc3RkOjpzdHJjaHJudWwgKGNvbnN0IGNoYXIgKiwgaW50KTsgfQorICAgICAgIGV4dGVybiAiQysrIiB7IGNoYXIgKiBzdGQ6OnN0cmNocm51bCAoY2hhciAqLCBpbnQpOyB9ICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUMiAoc3RyY2hybnVsLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCAoY2hhciBjb25zdCAqX19zLCBpbnQgX19jX2luKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKiwgKGNoYXIgY29uc3QgKl9fcywgaW50IF9fY19pbikpOworIyBlbmRpZgorIyBpZiAoKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxMCkgJiYgIWRlZmluZWQgX19VQ0xJQkNfXykgXAorICAgICAmJiAoX19HTlVDX18gPiA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDQpKQorX0dMX0NYWEFMSUFTV0FSTjEgKHN0cmNocm51bCwgY2hhciAqLCAoY2hhciAqX19zLCBpbnQgX19jX2luKSk7CitfR0xfQ1hYQUxJQVNXQVJOMSAoc3RyY2hybnVsLCBjaGFyIGNvbnN0ICosIChjaGFyIGNvbnN0ICpfX3MsIGludCBfX2NfaW4pKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTV0FSTiAoc3RyY2hybnVsKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc3RyY2hybnVsCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RSQ0hSTlVMCitfR0xfV0FSTl9PTl9VU0UgKHN0cmNocm51bCwgInN0cmNocm51bCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RyY2hybnVsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIER1cGxpY2F0ZSBTLCByZXR1cm5pbmcgYW4gaWRlbnRpY2FsIG1hbGxvYydkIHN0cmluZy4gICovCisjaWYgQEdOVUxJQl9TVFJEVVBACisjIGlmIEBSRVBMQUNFX1NUUkRVUEAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgc3RyZHVwCisjICAgZGVmaW5lIHN0cmR1cCBycGxfc3RyZHVwCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc3RyZHVwLCBjaGFyICosIChjaGFyIGNvbnN0ICpfX3MpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzdHJkdXAsIGNoYXIgKiwgKGNoYXIgY29uc3QgKl9fcykpOworIyBlbHNlCisjICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSAmJiBkZWZpbmVkIHN0cmR1cAorICAgIC8qIHN0cmR1cCBleGlzdHMgYXMgYSBmdW5jdGlvbiBhbmQgYXMgYSBtYWNyby4gIEdldCByaWQgb2YgdGhlIG1hY3JvLiAgKi8KKyMgICB1bmRlZiBzdHJkdXAKKyMgIGVuZGlmCisjICBpZiAhKEBIQVZFX0RFQ0xfU1RSRFVQQCB8fCBkZWZpbmVkIHN0cmR1cCkKK19HTF9GVU5DREVDTF9TWVMgKHN0cmR1cCwgY2hhciAqLCAoY2hhciBjb25zdCAqX19zKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHN0cmR1cCwgY2hhciAqLCAoY2hhciBjb25zdCAqX19zKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzdHJkdXApOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJkdXAKKyMgaWYgSEFWRV9SQVdfREVDTF9TVFJEVVAKK19HTF9XQVJOX09OX1VTRSAoc3RyZHVwLCAic3RyZHVwIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHJkdXAgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworLyogQXBwZW5kIG5vIG1vcmUgdGhhbiBOIGNoYXJhY3RlcnMgZnJvbSBTUkMgb250byBERVNULiAgKi8KKyNpZiBAR05VTElCX1NUUk5DQVRACisjIGlmIEBSRVBMQUNFX1NUUk5DQVRACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHN0cm5jYXQKKyMgICBkZWZpbmUgc3RybmNhdCBycGxfc3RybmNhdAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHN0cm5jYXQsIGNoYXIgKiwgKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IG4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzdHJuY2F0LCBjaGFyICosIChjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBuKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKHN0cm5jYXQsIGNoYXIgKiwgKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IG4pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHN0cm5jYXQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJuY2F0CisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RSTkNBVAorX0dMX1dBUk5fT05fVVNFIChzdHJuY2F0LCAic3RybmNhdCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RybmNhdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBSZXR1cm4gYSBuZXdseSBhbGxvY2F0ZWQgY29weSBvZiBhdCBtb3N0IE4gYnl0ZXMgb2YgU1RSSU5HLiAgKi8KKyNpZiBAR05VTElCX1NUUk5EVVBACisjIGlmIEBSRVBMQUNFX1NUUk5EVVBACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHN0cm5kdXAKKyMgICBkZWZpbmUgc3RybmR1cCBycGxfc3RybmR1cAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHN0cm5kdXAsIGNoYXIgKiwgKGNoYXIgY29uc3QgKl9fc3RyaW5nLCBzaXplX3QgX19uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoc3RybmR1cCwgY2hhciAqLCAoY2hhciBjb25zdCAqX19zdHJpbmcsIHNpemVfdCBfX24pKTsKKyMgZWxzZQorIyAgaWYgISBASEFWRV9ERUNMX1NUUk5EVVBACitfR0xfRlVOQ0RFQ0xfU1lTIChzdHJuZHVwLCBjaGFyICosIChjaGFyIGNvbnN0ICpfX3N0cmluZywgc2l6ZV90IF9fbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzdHJuZHVwLCBjaGFyICosIChjaGFyIGNvbnN0ICpfX3N0cmluZywgc2l6ZV90IF9fbikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoc3RybmR1cCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHN0cm5kdXAKKyMgaWYgSEFWRV9SQVdfREVDTF9TVFJORFVQCitfR0xfV0FSTl9PTl9VU0UgKHN0cm5kdXAsICJzdHJuZHVwIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHJuZHVwIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIEZpbmQgdGhlIGxlbmd0aCAobnVtYmVyIG9mIGJ5dGVzKSBvZiBTVFJJTkcsIGJ1dCBzY2FuIGF0IG1vc3QKKyAgIE1BWExFTiBieXRlcy4gIElmIG5vICdcMCcgdGVybWluYXRvciBpcyBmb3VuZCBpbiB0aGF0IG1hbnkgYnl0ZXMsCisgICByZXR1cm4gTUFYTEVOLiAgKi8KKyNpZiBAR05VTElCX1NUUk5MRU5ACisjIGlmIEBSRVBMQUNFX1NUUk5MRU5ACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHN0cm5sZW4KKyMgICBkZWZpbmUgc3RybmxlbiBycGxfc3RybmxlbgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHN0cm5sZW4sIHNpemVfdCwgKGNoYXIgY29uc3QgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoc3Rybmxlbiwgc2l6ZV90LCAoY2hhciBjb25zdCAqX19zdHJpbmcsIHNpemVfdCBfX21heGxlbikpOworIyBlbHNlCisjICBpZiAhIEBIQVZFX0RFQ0xfU1RSTkxFTkAKK19HTF9GVU5DREVDTF9TWVMgKHN0cm5sZW4sIHNpemVfdCwgKGNoYXIgY29uc3QgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHN0cm5sZW4sIHNpemVfdCwgKGNoYXIgY29uc3QgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHN0cm5sZW4pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJubGVuCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RSTkxFTgorX0dMX1dBUk5fT05fVVNFIChzdHJubGVuLCAic3RybmxlbiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RybmxlbiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLyogc3RyY3NwbigpIGFzc3VtZXMgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBhIGxpc3Qgb2Ygc2luZ2xlLWJ5dGUgY2hhcmFjdGVycy4KKyAgIEV2ZW4gaW4gdGhpcyBzaW1wbGUgY2FzZSwgaXQgZG9lcyBub3Qgd29yayB3aXRoIG11bHRpYnl0ZSBzdHJpbmdzIGlmIHRoZQorICAgbG9jYWxlIGVuY29kaW5nIGlzIEdCMTgwMzAgYW5kIG9uZSBvZiB0aGUgY2hhcmFjdGVycyB0byBiZSBzZWFyY2hlZCBpcyBhCisgICBkaWdpdC4gICovCisjIHVuZGVmIHN0cmNzcG4KKy8qIEFzc3VtZSBzdHJjc3BuIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKHN0cmNzcG4sICJzdHJjc3BuIGNhbm5vdCB3b3JrIGNvcnJlY3RseSBvbiBjaGFyYWN0ZXIgc3RyaW5ncyAiCisgICAgICAgICAgICAgICAgICJpbiBtdWx0aWJ5dGUgbG9jYWxlcyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBtYnNjc3BuIGlmIHlvdSBjYXJlIGFib3V0IGludGVybmF0aW9uYWxpemF0aW9uIik7CisjZW5kaWYKKworLyogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBpbiBTIG9mIGFueSBjaGFyYWN0ZXIgaW4gQUNDRVBULiAgKi8KKyNpZiBAR05VTElCX1NUUlBCUktACisjIGlmICEgQEhBVkVfU1RSUEJSS0AKK19HTF9GVU5DREVDTF9TWVMgKHN0cnBicmssIGNoYXIgKiwgKGNoYXIgY29uc3QgKl9fcywgY2hhciBjb25zdCAqX19hY2NlcHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyBlbmRpZgorICAvKiBPbiBzb21lIHN5c3RlbXMsIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhbiBvdmVybG9hZGVkIGZ1bmN0aW9uOgorICAgICAgIGV4dGVybiAiQyIgeyBjb25zdCBjaGFyICogc3RycGJyayAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOyB9CisgICAgICAgZXh0ZXJuICJDKysiIHsgY2hhciAqIHN0cnBicmsgKGNoYXIgKiwgY29uc3QgY2hhciAqKTsgfSAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVDIgKHN0cnBicmssCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIChjaGFyIGNvbnN0ICpfX3MsIGNoYXIgY29uc3QgKl9fYWNjZXB0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgKGNoYXIgY29uc3QgKl9fcywgY2hhciBjb25zdCAqX19hY2NlcHQpKTsKKyMgaWYgKChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMTApICYmICFkZWZpbmVkIF9fVUNMSUJDX18pIFwKKyAgICAgJiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0KSkKK19HTF9DWFhBTElBU1dBUk4xIChzdHJwYnJrLCBjaGFyICosIChjaGFyICpfX3MsIGNoYXIgY29uc3QgKl9fYWNjZXB0KSk7CitfR0xfQ1hYQUxJQVNXQVJOMSAoc3RycGJyaywgY2hhciBjb25zdCAqLAorICAgICAgICAgICAgICAgICAgIChjaGFyIGNvbnN0ICpfX3MsIGNoYXIgY29uc3QgKl9fYWNjZXB0KSk7CisjIGVsc2UKK19HTF9DWFhBTElBU1dBUk4gKHN0cnBicmspOworIyBlbmRpZgorIyBpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisvKiBzdHJwYnJrKCkgYXNzdW1lcyB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGEgbGlzdCBvZiBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXJzLgorICAgRXZlbiBpbiB0aGlzIHNpbXBsZSBjYXNlLCBpdCBkb2VzIG5vdCB3b3JrIHdpdGggbXVsdGlieXRlIHN0cmluZ3MgaWYgdGhlCisgICBsb2NhbGUgZW5jb2RpbmcgaXMgR0IxODAzMCBhbmQgb25lIG9mIHRoZSBjaGFyYWN0ZXJzIHRvIGJlIHNlYXJjaGVkIGlzIGEKKyAgIGRpZ2l0LiAgKi8KKyMgIHVuZGVmIHN0cnBicmsKK19HTF9XQVJOX09OX1VTRSAoc3RycGJyaywgInN0cnBicmsgY2Fubm90IHdvcmsgY29ycmVjdGx5IG9uIGNoYXJhY3RlciBzdHJpbmdzICIKKyAgICAgICAgICAgICAgICAgImluIG11bHRpYnl0ZSBsb2NhbGVzIC0gIgorICAgICAgICAgICAgICAgICAidXNlIG1ic3BicmsgaWYgeW91IGNhcmUgYWJvdXQgaW50ZXJuYXRpb25hbGl6YXRpb24iKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc3RycGJyaworIyBpZiBIQVZFX1JBV19ERUNMX1NUUlBCUksKK19HTF9XQVJOX09OX1VTRSAoc3RycGJyaywgInN0cnBicmsgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHN0cnBicmsgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy8qIHN0cnNwbigpIGFzc3VtZXMgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBhIGxpc3Qgb2Ygc2luZ2xlLWJ5dGUgY2hhcmFjdGVycy4KKyAgIEV2ZW4gaW4gdGhpcyBzaW1wbGUgY2FzZSwgaXQgY2Fubm90IHdvcmsgd2l0aCBtdWx0aWJ5dGUgc3RyaW5ncy4gICovCisjIHVuZGVmIHN0cnNwbgorLyogQXNzdW1lIHN0cnNwbiBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFIChzdHJzcG4sICJzdHJzcG4gY2Fubm90IHdvcmsgY29ycmVjdGx5IG9uIGNoYXJhY3RlciBzdHJpbmdzICIKKyAgICAgICAgICAgICAgICAgImluIG11bHRpYnl0ZSBsb2NhbGVzIC0gIgorICAgICAgICAgICAgICAgICAidXNlIG1ic3NwbiBpZiB5b3UgY2FyZSBhYm91dCBpbnRlcm5hdGlvbmFsaXphdGlvbiIpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisvKiBzdHJyY2hyKCkgZG9lcyBub3Qgd29yayB3aXRoIG11bHRpYnl0ZSBzdHJpbmdzIGlmIHRoZSBsb2NhbGUgZW5jb2RpbmcgaXMKKyAgIEdCMTgwMzAgYW5kIHRoZSBjaGFyYWN0ZXIgdG8gYmUgc2VhcmNoZWQgaXMgYSBkaWdpdC4gICovCisjIHVuZGVmIHN0cnJjaHIKKy8qIEFzc3VtZSBzdHJyY2hyIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKHN0cnJjaHIsICJzdHJyY2hyIGNhbm5vdCB3b3JrIGNvcnJlY3RseSBvbiBjaGFyYWN0ZXIgc3RyaW5ncyAiCisgICAgICAgICAgICAgICAgICJpbiBzb21lIG11bHRpYnl0ZSBsb2NhbGVzIC0gIgorICAgICAgICAgICAgICAgICAidXNlIG1ic3JjaHIgaWYgeW91IGNhcmUgYWJvdXQgaW50ZXJuYXRpb25hbGl6YXRpb24iKTsKKyNlbmRpZgorCisvKiBTZWFyY2ggdGhlIG5leHQgZGVsaW1pdGVyIChjaGFyIGxpc3RlZCBpbiBERUxJTSkgc3RhcnRpbmcgYXQgKlNUUklOR1AuCisgICBJZiBvbmUgaXMgZm91bmQsIG92ZXJ3cml0ZSBpdCB3aXRoIGEgTlVMLCBhbmQgYWR2YW5jZSAqU1RSSU5HUAorICAgdG8gcG9pbnQgdG8gdGhlIG5leHQgY2hhciBhZnRlciBpdC4gIE90aGVyd2lzZSwgc2V0ICpTVFJJTkdQIHRvIE5VTEwuCisgICBJZiAqU1RSSU5HUCB3YXMgYWxyZWFkeSBOVUxMLCBub3RoaW5nIGhhcHBlbnMuCisgICBSZXR1cm4gdGhlIG9sZCB2YWx1ZSBvZiAqU1RSSU5HUC4KKworICAgVGhpcyBpcyBhIHZhcmlhbnQgb2Ygc3RydG9rKCkgdGhhdCBpcyBtdWx0aXRocmVhZC1zYWZlIGFuZCBzdXBwb3J0cworICAgZW1wdHkgZmllbGRzLgorCisgICBDYXZlYXQ6IEl0IG1vZGlmaWVzIHRoZSBvcmlnaW5hbCBzdHJpbmcuCisgICBDYXZlYXQ6IFRoZXNlIGZ1bmN0aW9ucyBjYW5ub3QgYmUgdXNlZCBvbiBjb25zdGFudCBzdHJpbmdzLgorICAgQ2F2ZWF0OiBUaGUgaWRlbnRpdHkgb2YgdGhlIGRlbGltaXRpbmcgY2hhcmFjdGVyIGlzIGxvc3QuCisgICBDYXZlYXQ6IEl0IGRvZXNuJ3Qgd29yayB3aXRoIG11bHRpYnl0ZSBzdHJpbmdzIHVubGVzcyBhbGwgb2YgdGhlIGRlbGltaXRlcgorICAgICAgICAgICBjaGFyYWN0ZXJzIGFyZSBBU0NJSSBjaGFyYWN0ZXJzIDwgMHgzMC4KKworICAgU2VlIGFsc28gc3RydG9rX3IoKS4gICovCisjaWYgQEdOVUxJQl9TVFJTRVBACisjIGlmICEgQEhBVkVfU1RSU0VQQAorX0dMX0ZVTkNERUNMX1NZUyAoc3Ryc2VwLCBjaGFyICosCisgICAgICAgICAgICAgICAgICAoY2hhciAqKnJlc3RyaWN0IF9fc3RyaW5ncCwgY2hhciBjb25zdCAqcmVzdHJpY3QgX19kZWxpbSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzdHJzZXAsIGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqcmVzdHJpY3QgX19zdHJpbmdwLCBjaGFyIGNvbnN0ICpyZXN0cmljdCBfX2RlbGltKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChzdHJzZXApOworIyBpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjICB1bmRlZiBzdHJzZXAKK19HTF9XQVJOX09OX1VTRSAoc3Ryc2VwLCAic3Ryc2VwIGNhbm5vdCB3b3JrIGNvcnJlY3RseSBvbiBjaGFyYWN0ZXIgc3RyaW5ncyAiCisgICAgICAgICAgICAgICAgICJpbiBtdWx0aWJ5dGUgbG9jYWxlcyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBtYnNzZXAgaWYgeW91IGNhcmUgYWJvdXQgaW50ZXJuYXRpb25hbGl6YXRpb24iKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc3Ryc2VwCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RSU0VQCitfR0xfV0FSTl9PTl9VU0UgKHN0cnNlcCwgInN0cnNlcCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3Ryc2VwIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX1NUUlNUUkAKKyMgaWYgQFJFUExBQ0VfU1RSU1RSQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgc3Ryc3RyIHJwbF9zdHJzdHIKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChzdHJzdHIsIGNoYXIgKiwgKGNvbnN0IGNoYXIgKmhheXN0YWNrLCBjb25zdCBjaGFyICpuZWVkbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHN0cnN0ciwgY2hhciAqLCAoY29uc3QgY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSkpOworIyBlbHNlCisgIC8qIE9uIHNvbWUgc3lzdGVtcywgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGFuIG92ZXJsb2FkZWQgZnVuY3Rpb246CisgICAgICAgZXh0ZXJuICJDKysiIHsgY29uc3QgY2hhciAqIHN0cnN0ciAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOyB9CisgICAgICAgZXh0ZXJuICJDKysiIHsgY2hhciAqIHN0cnN0ciAoY2hhciAqLCBjb25zdCBjaGFyICopOyB9ICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUMiAoc3Ryc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCAoY29uc3QgY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSksCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIChjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKSk7CisjIGVuZGlmCisjIGlmICgoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEwKSAmJiAhZGVmaW5lZCBfX1VDTElCQ19fKSBcCisgICAgICYmIChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNCkpCitfR0xfQ1hYQUxJQVNXQVJOMSAoc3Ryc3RyLCBjaGFyICosIChjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKSk7CitfR0xfQ1hYQUxJQVNXQVJOMSAoc3Ryc3RyLCBjb25zdCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKmhheXN0YWNrLCBjb25zdCBjaGFyICpuZWVkbGUpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTV0FSTiAoc3Ryc3RyKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy8qIHN0cnN0cigpIGRvZXMgbm90IHdvcmsgd2l0aCBtdWx0aWJ5dGUgc3RyaW5ncyBpZiB0aGUgbG9jYWxlIGVuY29kaW5nIGlzCisgICBkaWZmZXJlbnQgZnJvbSBVVEYtODoKKyAgIFBPU0lYIHNheXMgdGhhdCBpdCBvcGVyYXRlcyBvbiAic3RyaW5ncyIsIGFuZCAic3RyaW5nIiBpbiBQT1NJWCBpcyBkZWZpbmVkCisgICBhcyBhIHNlcXVlbmNlIG9mIGJ5dGVzLCBub3Qgb2YgY2hhcmFjdGVycy4gICovCisjIHVuZGVmIHN0cnN0cgorLyogQXNzdW1lIHN0cnN0ciBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFIChzdHJzdHIsICJzdHJzdHIgaXMgcXVhZHJhdGljIG9uIG1hbnkgc3lzdGVtcywgYW5kIGNhbm5vdCAiCisgICAgICAgICAgICAgICAgICJ3b3JrIGNvcnJlY3RseSBvbiBjaGFyYWN0ZXIgc3RyaW5ncyBpbiBtb3N0ICIKKyAgICAgICAgICAgICAgICAgIm11bHRpYnl0ZSBsb2NhbGVzIC0gIgorICAgICAgICAgICAgICAgICAidXNlIG1ic3N0ciBpZiB5b3UgY2FyZSBhYm91dCBpbnRlcm5hdGlvbmFsaXphdGlvbiwgIgorICAgICAgICAgICAgICAgICAib3IgdXNlIHN0cnN0ciBpZiB5b3UgY2FyZSBhYm91dCBzcGVlZCIpOworI2VuZGlmCisKKy8qIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgTkVFRExFIGluIEhBWVNUQUNLLCB1c2luZyBjYXNlLWluc2Vuc2l0aXZlCisgICBjb21wYXJpc29uLiAgKi8KKyNpZiBAR05VTElCX1NUUkNBU0VTVFJACisjIGlmIEBSRVBMQUNFX1NUUkNBU0VTVFJACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBzdHJjYXNlc3RyIHJwbF9zdHJjYXNlc3RyCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc3RyY2FzZXN0ciwgY2hhciAqLAorICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKmhheXN0YWNrLCBjb25zdCBjaGFyICpuZWVkbGUpCisgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzdHJjYXNlc3RyLCBjaGFyICosCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSkpOworIyBlbHNlCisjICBpZiAhIEBIQVZFX1NUUkNBU0VTVFJACitfR0xfRlVOQ0RFQ0xfU1lTIChzdHJjYXNlc3RyLCBjaGFyICosCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCisgIC8qIE9uIHNvbWUgc3lzdGVtcywgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGFuIG92ZXJsb2FkZWQgZnVuY3Rpb246CisgICAgICAgZXh0ZXJuICJDKysiIHsgY29uc3QgY2hhciAqIHN0cmNhc2VzdHIgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsgfQorICAgICAgIGV4dGVybiAiQysrIiB7IGNoYXIgKiBzdHJjYXNlc3RyIChjaGFyICosIGNvbnN0IGNoYXIgKik7IH0gICovCitfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyIChzdHJjYXNlc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCAoY29uc3QgY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSksCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIChjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKSk7CisjIGVuZGlmCisjIGlmICgoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEwKSAmJiAhZGVmaW5lZCBfX1VDTElCQ19fKSBcCisgICAgICYmIChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNCkpCitfR0xfQ1hYQUxJQVNXQVJOMSAoc3RyY2FzZXN0ciwgY2hhciAqLCAoY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSkpOworX0dMX0NYWEFMSUFTV0FSTjEgKHN0cmNhc2VzdHIsIGNvbnN0IGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNXQVJOIChzdHJjYXNlc3RyKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy8qIHN0cmNhc2VzdHIoKSBkb2VzIG5vdCB3b3JrIHdpdGggbXVsdGlieXRlIHN0cmluZ3M6CisgICBJdCBpcyBhIGdsaWJjIGV4dGVuc2lvbiwgYW5kIGdsaWJjIGltcGxlbWVudHMgaXQgb25seSBmb3IgdW5pYnl0ZQorICAgbG9jYWxlcy4gICovCisjIHVuZGVmIHN0cmNhc2VzdHIKKyMgaWYgSEFWRV9SQVdfREVDTF9TVFJDQVNFU1RSCitfR0xfV0FSTl9PTl9VU0UgKHN0cmNhc2VzdHIsICJzdHJjYXNlc3RyIGRvZXMgd29yayBjb3JyZWN0bHkgb24gY2hhcmFjdGVyICIKKyAgICAgICAgICAgICAgICAgInN0cmluZ3MgaW4gbXVsdGlieXRlIGxvY2FsZXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgbWJzY2FzZXN0ciBpZiB5b3UgY2FyZSBhYm91dCAiCisgICAgICAgICAgICAgICAgICJpbnRlcm5hdGlvbmFsaXphdGlvbiwgb3IgdXNlIGMtc3RyY2FzZXN0ciBpZiB5b3Ugd2FudCAiCisgICAgICAgICAgICAgICAgICJhIGxvY2FsZSBpbmRlcGVuZGVudCBmdW5jdGlvbiIpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIFBhcnNlIFMgaW50byB0b2tlbnMgc2VwYXJhdGVkIGJ5IGNoYXJhY3RlcnMgaW4gREVMSU0uCisgICBJZiBTIGlzIE5VTEwsIHRoZSBzYXZlZCBwb2ludGVyIGluIFNBVkVfUFRSIGlzIHVzZWQgYXMKKyAgIHRoZSBuZXh0IHN0YXJ0aW5nIHBvaW50LiAgRm9yIGV4YW1wbGU6CisgICAgICAgIGNoYXIgc1tdID0gIi1hYmMtPS1kZWYiOworICAgICAgICBjaGFyICpzcDsKKyAgICAgICAgeCA9IHN0cnRva19yKHMsICItIiwgJnNwKTsgICAgICAvLyB4ID0gImFiYyIsIHNwID0gIj0tZGVmIgorICAgICAgICB4ID0gc3RydG9rX3IoTlVMTCwgIi09IiwgJnNwKTsgIC8vIHggPSAiZGVmIiwgc3AgPSBOVUxMCisgICAgICAgIHggPSBzdHJ0b2tfcihOVUxMLCAiPSIsICZzcCk7ICAgLy8geCA9IE5VTEwKKyAgICAgICAgICAgICAgICAvLyBzID0gImFiY1wwLWRlZlwwIgorCisgICBUaGlzIGlzIGEgdmFyaWFudCBvZiBzdHJ0b2soKSB0aGF0IGlzIG11bHRpdGhyZWFkLXNhZmUuCisKKyAgIEZvciB0aGUgUE9TSVggZG9jdW1lbnRhdGlvbiBmb3IgdGhpcyBmdW5jdGlvbiwgc2VlOgorICAgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3N1c3YzeHNoL3N0cnRvay5odG1sCisKKyAgIENhdmVhdDogSXQgbW9kaWZpZXMgdGhlIG9yaWdpbmFsIHN0cmluZy4KKyAgIENhdmVhdDogVGhlc2UgZnVuY3Rpb25zIGNhbm5vdCBiZSB1c2VkIG9uIGNvbnN0YW50IHN0cmluZ3MuCisgICBDYXZlYXQ6IFRoZSBpZGVudGl0eSBvZiB0aGUgZGVsaW1pdGluZyBjaGFyYWN0ZXIgaXMgbG9zdC4KKyAgIENhdmVhdDogSXQgZG9lc24ndCB3b3JrIHdpdGggbXVsdGlieXRlIHN0cmluZ3MgdW5sZXNzIGFsbCBvZiB0aGUgZGVsaW1pdGVyCisgICAgICAgICAgIGNoYXJhY3RlcnMgYXJlIEFTQ0lJIGNoYXJhY3RlcnMgPCAweDMwLgorCisgICBTZWUgYWxzbyBzdHJzZXAoKS4gICovCisjaWYgQEdOVUxJQl9TVFJUT0tfUkAKKyMgaWYgQFJFUExBQ0VfU1RSVE9LX1JACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHN0cnRva19yCisjICAgZGVmaW5lIHN0cnRva19yIHJwbF9zdHJ0b2tfcgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHN0cnRva19yLCBjaGFyICosCisgICAgICAgICAgICAgICAgICAoY2hhciAqcmVzdHJpY3QgcywgY2hhciBjb25zdCAqcmVzdHJpY3QgZGVsaW0sCisgICAgICAgICAgICAgICAgICAgY2hhciAqKnJlc3RyaWN0IHNhdmVfcHRyKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMiwgMykpKTsKK19HTF9DWFhBTElBU19SUEwgKHN0cnRva19yLCBjaGFyICosCisgICAgICAgICAgICAgICAgICAoY2hhciAqcmVzdHJpY3QgcywgY2hhciBjb25zdCAqcmVzdHJpY3QgZGVsaW0sCisgICAgICAgICAgICAgICAgICAgY2hhciAqKnJlc3RyaWN0IHNhdmVfcHRyKSk7CisjIGVsc2UKKyMgIGlmIEBVTkRFRklORV9TVFJUT0tfUkAgfHwgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyAgIHVuZGVmIHN0cnRva19yCisjICBlbmRpZgorIyAgaWYgISBASEFWRV9ERUNMX1NUUlRPS19SQAorX0dMX0ZVTkNERUNMX1NZUyAoc3RydG9rX3IsIGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpyZXN0cmljdCBzLCBjaGFyIGNvbnN0ICpyZXN0cmljdCBkZWxpbSwKKyAgICAgICAgICAgICAgICAgICBjaGFyICoqcmVzdHJpY3Qgc2F2ZV9wdHIpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyLCAzKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHN0cnRva19yLCBjaGFyICosCisgICAgICAgICAgICAgICAgICAoY2hhciAqcmVzdHJpY3QgcywgY2hhciBjb25zdCAqcmVzdHJpY3QgZGVsaW0sCisgICAgICAgICAgICAgICAgICAgY2hhciAqKnJlc3RyaWN0IHNhdmVfcHRyKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzdHJ0b2tfcik7CisjIGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKK19HTF9XQVJOX09OX1VTRSAoc3RydG9rX3IsICJzdHJ0b2tfciBjYW5ub3Qgd29yayBjb3JyZWN0bHkgb24gY2hhcmFjdGVyICIKKyAgICAgICAgICAgICAgICAgInN0cmluZ3MgaW4gbXVsdGlieXRlIGxvY2FsZXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgbWJzdG9rX3IgaWYgeW91IGNhcmUgYWJvdXQgaW50ZXJuYXRpb25hbGl6YXRpb24iKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc3RydG9rX3IKKyMgaWYgSEFWRV9SQVdfREVDTF9TVFJUT0tfUgorX0dMX1dBUk5fT05fVVNFIChzdHJ0b2tfciwgInN0cnRva19yIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHJ0b2tfciBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBub3Qgc3BlY2lmaWVkIGJ5IFBPU0lYLiAgVGhleSBhcmUgZ251bGliCisgICBleHRlbnNpb25zLiAgKi8KKworI2lmIEBHTlVMSUJfTUJTTEVOQAorLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgbXVsdGlieXRlIGNoYXJhY3RlcnMgaW4gdGhlIGNoYXJhY3RlciBzdHJpbmcgU1RSSU5HLgorICAgVGhpcyBjb25zaWRlcnMgbXVsdGlieXRlIGNoYXJhY3RlcnMsIHVubGlrZSBzdHJsZW4sIHdoaWNoIGNvdW50cyBieXRlcy4gICovCisjIGlmZGVmIF9fTWlyQlNEX18gIC8qIE1pckJTRCBkZWZpbmVzIG1ic2xlbiBhcyBhIG1hY3JvLiAgT3ZlcnJpZGUgaXQuICAqLworIyAgdW5kZWYgbWJzbGVuCisjIGVuZGlmCisjIGlmIEBIQVZFX01CU0xFTkAgIC8qIEFJWCwgT1NGLzEsIE1pckJTRCBkZWZpbmUgbWJzbGVuIGFscmVhZHkgaW4gbGliYy4gICovCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBtYnNsZW4gcnBsX21ic2xlbgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG1ic2xlbiwgc2l6ZV90LCAoY29uc3QgY2hhciAqc3RyaW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChtYnNsZW4sIHNpemVfdCwgKGNvbnN0IGNoYXIgKnN0cmluZykpOworIyBlbHNlCitfR0xfRlVOQ0RFQ0xfU1lTIChtYnNsZW4sIHNpemVfdCwgKGNvbnN0IGNoYXIgKnN0cmluZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1NZUyAobWJzbGVuLCBzaXplX3QsIChjb25zdCBjaGFyICpzdHJpbmcpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG1ic2xlbik7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfTUJTTkxFTkAKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIGluIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIHN0YXJ0aW5nCisgICBhdCBTVFJJTkcgYW5kIGVuZGluZyBhdCBTVFJJTkcgKyBMRU4uICAqLworX0dMX0VYVEVSTl9DIHNpemVfdCBtYnNubGVuIChjb25zdCBjaGFyICpzdHJpbmcsIHNpemVfdCBsZW4pCisgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSk7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfTUJTQ0hSQAorLyogTG9jYXRlIHRoZSBmaXJzdCBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXIgQyBpbiB0aGUgY2hhcmFjdGVyIHN0cmluZyBTVFJJTkcsCisgICBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byBpdC4gIFJldHVybiBOVUxMIGlmIEMgaXMgbm90IGZvdW5kIGluIFNUUklORy4KKyAgIFVubGlrZSBzdHJjaHIoKSwgdGhpcyBmdW5jdGlvbiB3b3JrcyBjb3JyZWN0bHkgaW4gbXVsdGlieXRlIGxvY2FsZXMgd2l0aAorICAgZW5jb2RpbmdzIHN1Y2ggYXMgR0IxODAzMC4gICovCisjIGlmIGRlZmluZWQgX19ocHV4CisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBtYnNjaHIgcnBsX21ic2NociAvKiBhdm9pZCBjb2xsaXNpb24gd2l0aCBIUC1VWCBmdW5jdGlvbiAqLworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG1ic2NociwgY2hhciAqLCAoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAobWJzY2hyLCBjaGFyICosIChjb25zdCBjaGFyICpzdHJpbmcsIGludCBjKSk7CisjIGVsc2UKK19HTF9GVU5DREVDTF9TWVMgKG1ic2NociwgY2hhciAqLCAoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1NZUyAobWJzY2hyLCBjaGFyICosIChjb25zdCBjaGFyICpzdHJpbmcsIGludCBjKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChtYnNjaHIpOworI2VuZGlmCisKKyNpZiBAR05VTElCX01CU1JDSFJACisvKiBMb2NhdGUgdGhlIGxhc3Qgc2luZ2xlLWJ5dGUgY2hhcmFjdGVyIEMgaW4gdGhlIGNoYXJhY3RlciBzdHJpbmcgU1RSSU5HLAorICAgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gaXQuICBSZXR1cm4gTlVMTCBpZiBDIGlzIG5vdCBmb3VuZCBpbiBTVFJJTkcuCisgICBVbmxpa2Ugc3RycmNocigpLCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGNvcnJlY3RseSBpbiBtdWx0aWJ5dGUgbG9jYWxlcyB3aXRoCisgICBlbmNvZGluZ3Mgc3VjaCBhcyBHQjE4MDMwLiAgKi8KKyMgaWYgZGVmaW5lZCBfX2hwdXggfHwgZGVmaW5lZCBfX0lOVEVSSVgKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIG1ic3JjaHIgcnBsX21ic3JjaHIgLyogYXZvaWQgY29sbGlzaW9uIHdpdGggc3lzdGVtIGZ1bmN0aW9uICovCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobWJzcmNociwgY2hhciAqLCAoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChtYnNyY2hyLCBjaGFyICosIChjb25zdCBjaGFyICpzdHJpbmcsIGludCBjKSk7CisjIGVsc2UKK19HTF9GVU5DREVDTF9TWVMgKG1ic3JjaHIsIGNoYXIgKiwgKGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1NZUyAobWJzcmNociwgY2hhciAqLCAoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgYykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobWJzcmNocik7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfTUJTU1RSQAorLyogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgY2hhcmFjdGVyIHN0cmluZyBORUVETEUgaW4gdGhlIGNoYXJhY3RlcgorICAgc3RyaW5nIEhBWVNUQUNLLiAgUmV0dXJuIE5VTEwgaWYgTkVFRExFIGlzIG5vdCBmb3VuZCBpbiBIQVlTVEFDSy4KKyAgIFVubGlrZSBzdHJzdHIoKSwgdGhpcyBmdW5jdGlvbiB3b3JrcyBjb3JyZWN0bHkgaW4gbXVsdGlieXRlIGxvY2FsZXMgd2l0aAorICAgZW5jb2RpbmdzIGRpZmZlcmVudCBmcm9tIFVURi04LiAgKi8KK19HTF9FWFRFUk5fQyBjaGFyICogbWJzc3RyIChjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKQorICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpOworI2VuZGlmCisKKyNpZiBAR05VTElCX01CU0NBU0VDTVBACisvKiBDb21wYXJlIHRoZSBjaGFyYWN0ZXIgc3RyaW5ncyBTMSBhbmQgUzIsIGlnbm9yaW5nIGNhc2UsIHJldHVybmluZyBsZXNzIHRoYW4sCisgICBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gemVybyBpZiBTMSBpcyBsZXhpY29ncmFwaGljYWxseSBsZXNzIHRoYW4sIGVxdWFsIHRvCisgICBvciBncmVhdGVyIHRoYW4gUzIuCisgICBOb3RlOiBUaGlzIGZ1bmN0aW9uIG1heSwgaW4gbXVsdGlieXRlIGxvY2FsZXMsIHJldHVybiAwIGZvciBzdHJpbmdzIG9mCisgICBkaWZmZXJlbnQgbGVuZ3RocyEKKyAgIFVubGlrZSBzdHJjYXNlY21wKCksIHRoaXMgZnVuY3Rpb24gd29ya3MgY29ycmVjdGx5IGluIG11bHRpYnl0ZSBsb2NhbGVzLiAgKi8KK19HTF9FWFRFUk5fQyBpbnQgbWJzY2FzZWNtcCAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQorICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpOworI2VuZGlmCisKKyNpZiBAR05VTElCX01CU05DQVNFQ01QQAorLyogQ29tcGFyZSB0aGUgaW5pdGlhbCBzZWdtZW50IG9mIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIFMxIGNvbnNpc3Rpbmcgb2YgYXQgbW9zdAorICAgTiBjaGFyYWN0ZXJzIHdpdGggdGhlIGluaXRpYWwgc2VnbWVudCBvZiB0aGUgY2hhcmFjdGVyIHN0cmluZyBTMiBjb25zaXN0aW5nCisgICBvZiBhdCBtb3N0IE4gY2hhcmFjdGVycywgaWdub3JpbmcgY2FzZSwgcmV0dXJuaW5nIGxlc3MgdGhhbiwgZXF1YWwgdG8gb3IKKyAgIGdyZWF0ZXIgdGhhbiB6ZXJvIGlmIHRoZSBpbml0aWFsIHNlZ21lbnQgb2YgUzEgaXMgbGV4aWNvZ3JhcGhpY2FsbHkgbGVzcworICAgdGhhbiwgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIHRoZSBpbml0aWFsIHNlZ21lbnQgb2YgUzIuCisgICBOb3RlOiBUaGlzIGZ1bmN0aW9uIG1heSwgaW4gbXVsdGlieXRlIGxvY2FsZXMsIHJldHVybiAwIGZvciBpbml0aWFsIHNlZ21lbnRzCisgICBvZiBkaWZmZXJlbnQgbGVuZ3RocyEKKyAgIFVubGlrZSBzdHJuY2FzZWNtcCgpLCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGNvcnJlY3RseSBpbiBtdWx0aWJ5dGUgbG9jYWxlcy4KKyAgIEJ1dCBiZXdhcmUgdGhhdCBOIGlzIG5vdCBhIGJ5dGUgY291bnQgYnV0IGEgY2hhcmFjdGVyIGNvdW50ISAgKi8KK19HTF9FWFRFUk5fQyBpbnQgbWJzbmNhc2VjbXAgKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IG4pCisgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSk7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfTUJTUENBU0VDTVBACisvKiBDb21wYXJlIHRoZSBpbml0aWFsIHNlZ21lbnQgb2YgdGhlIGNoYXJhY3RlciBzdHJpbmcgU1RSSU5HIGNvbnNpc3Rpbmcgb2YKKyAgIGF0IG1vc3QgbWJzbGVuIChQUkVGSVgpIGNoYXJhY3RlcnMgd2l0aCB0aGUgY2hhcmFjdGVyIHN0cmluZyBQUkVGSVgsCisgICBpZ25vcmluZyBjYXNlLiAgSWYgdGhlIHR3byBtYXRjaCwgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgYnl0ZQorICAgYWZ0ZXIgdGhpcyBwcmVmaXggaW4gU1RSSU5HLiAgT3RoZXJ3aXNlLCByZXR1cm4gTlVMTC4KKyAgIE5vdGU6IFRoaXMgZnVuY3Rpb24gbWF5LCBpbiBtdWx0aWJ5dGUgbG9jYWxlcywgcmV0dXJuIG5vbi1OVUxMIGlmIFNUUklORworICAgaXMgb2Ygc21hbGxlciBsZW5ndGggdGhhbiBQUkVGSVghCisgICBVbmxpa2Ugc3RybmNhc2VjbXAoKSwgdGhpcyBmdW5jdGlvbiB3b3JrcyBjb3JyZWN0bHkgaW4gbXVsdGlieXRlCisgICBsb2NhbGVzLiAgKi8KK19HTF9FWFRFUk5fQyBjaGFyICogbWJzcGNhc2VjbXAgKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqcHJlZml4KQorICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpOworI2VuZGlmCisKKyNpZiBAR05VTElCX01CU0NBU0VTVFJACisvKiBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIE5FRURMRSBpbiB0aGUgY2hhcmFjdGVyCisgICBzdHJpbmcgSEFZU1RBQ0ssIHVzaW5nIGNhc2UtaW5zZW5zaXRpdmUgY29tcGFyaXNvbi4KKyAgIE5vdGU6IFRoaXMgZnVuY3Rpb24gbWF5LCBpbiBtdWx0aWJ5dGUgbG9jYWxlcywgcmV0dXJuIHN1Y2Nlc3MgZXZlbiBpZgorICAgc3RybGVuIChoYXlzdGFjaykgPCBzdHJsZW4gKG5lZWRsZSkgIQorICAgVW5saWtlIHN0cmNhc2VzdHIoKSwgdGhpcyBmdW5jdGlvbiB3b3JrcyBjb3JyZWN0bHkgaW4gbXVsdGlieXRlIGxvY2FsZXMuICAqLworX0dMX0VYVEVSTl9DIGNoYXIgKiBtYnNjYXNlc3RyIChjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKQorICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpOworI2VuZGlmCisKKyNpZiBAR05VTElCX01CU0NTUE5ACisvKiBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIGluIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIFNUUklORyBvZiBhbnkgY2hhcmFjdGVyCisgICBpbiB0aGUgY2hhcmFjdGVyIHN0cmluZyBBQ0NFUFQuICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBmcm9tIHRoZQorICAgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcgdG8gdGhpcyBvY2N1cnJlbmNlLCBvciB0byB0aGUgZW5kIG9mIHRoZSBzdHJpbmcKKyAgIGlmIG5vbmUgZXhpc3RzLgorICAgVW5saWtlIHN0cmNzcG4oKSwgdGhpcyBmdW5jdGlvbiB3b3JrcyBjb3JyZWN0bHkgaW4gbXVsdGlieXRlIGxvY2FsZXMuICAqLworX0dMX0VYVEVSTl9DIHNpemVfdCBtYnNjc3BuIChjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKmFjY2VwdCkKKyAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKTsKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9NQlNQQlJLQAorLyogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBpbiB0aGUgY2hhcmFjdGVyIHN0cmluZyBTVFJJTkcgb2YgYW55IGNoYXJhY3RlcgorICAgaW4gdGhlIGNoYXJhY3RlciBzdHJpbmcgQUNDRVBULiAgUmV0dXJuIHRoZSBwb2ludGVyIHRvIGl0LCBvciBOVUxMIGlmIG5vbmUKKyAgIGV4aXN0cy4KKyAgIFVubGlrZSBzdHJwYnJrKCksIHRoaXMgZnVuY3Rpb24gd29ya3MgY29ycmVjdGx5IGluIG11bHRpYnl0ZSBsb2NhbGVzLiAgKi8KKyMgaWYgZGVmaW5lZCBfX2hwdXgKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIG1ic3BicmsgcnBsX21ic3BicmsgLyogYXZvaWQgY29sbGlzaW9uIHdpdGggSFAtVVggZnVuY3Rpb24gKi8KKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChtYnNwYnJrLCBjaGFyICosIChjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKmFjY2VwdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChtYnNwYnJrLCBjaGFyICosIChjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKmFjY2VwdCkpOworIyBlbHNlCitfR0xfRlVOQ0RFQ0xfU1lTIChtYnNwYnJrLCBjaGFyICosIChjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKmFjY2VwdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfU1lTIChtYnNwYnJrLCBjaGFyICosIChjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKmFjY2VwdCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobWJzcGJyayk7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfTUJTU1BOQAorLyogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBpbiB0aGUgY2hhcmFjdGVyIHN0cmluZyBTVFJJTkcgb2YgYW55IGNoYXJhY3RlcgorICAgbm90IGluIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIFJFSkVDVC4gIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlCisgICBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZyB0byB0aGlzIG9jY3VycmVuY2UsIG9yIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmluZworICAgaWYgbm9uZSBleGlzdHMuCisgICBVbmxpa2Ugc3Ryc3BuKCksIHRoaXMgZnVuY3Rpb24gd29ya3MgY29ycmVjdGx5IGluIG11bHRpYnl0ZSBsb2NhbGVzLiAgKi8KK19HTF9FWFRFUk5fQyBzaXplX3QgbWJzc3BuIChjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKnJlamVjdCkKKyAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKTsKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9NQlNTRVBACisvKiBTZWFyY2ggdGhlIG5leHQgZGVsaW1pdGVyIChtdWx0aWJ5dGUgY2hhcmFjdGVyIGxpc3RlZCBpbiB0aGUgY2hhcmFjdGVyCisgICBzdHJpbmcgREVMSU0pIHN0YXJ0aW5nIGF0IHRoZSBjaGFyYWN0ZXIgc3RyaW5nICpTVFJJTkdQLgorICAgSWYgb25lIGlzIGZvdW5kLCBvdmVyd3JpdGUgaXQgd2l0aCBhIE5VTCwgYW5kIGFkdmFuY2UgKlNUUklOR1AgdG8gcG9pbnQKKyAgIHRvIHRoZSBuZXh0IG11bHRpYnl0ZSBjaGFyYWN0ZXIgYWZ0ZXIgaXQuICBPdGhlcndpc2UsIHNldCAqU1RSSU5HUCB0byBOVUxMLgorICAgSWYgKlNUUklOR1Agd2FzIGFscmVhZHkgTlVMTCwgbm90aGluZyBoYXBwZW5zLgorICAgUmV0dXJuIHRoZSBvbGQgdmFsdWUgb2YgKlNUUklOR1AuCisKKyAgIFRoaXMgaXMgYSB2YXJpYW50IG9mIG1ic3Rva19yKCkgdGhhdCBzdXBwb3J0cyBlbXB0eSBmaWVsZHMuCisKKyAgIENhdmVhdDogSXQgbW9kaWZpZXMgdGhlIG9yaWdpbmFsIHN0cmluZy4KKyAgIENhdmVhdDogVGhlc2UgZnVuY3Rpb25zIGNhbm5vdCBiZSB1c2VkIG9uIGNvbnN0YW50IHN0cmluZ3MuCisgICBDYXZlYXQ6IFRoZSBpZGVudGl0eSBvZiB0aGUgZGVsaW1pdGluZyBjaGFyYWN0ZXIgaXMgbG9zdC4KKworICAgU2VlIGFsc28gbWJzdG9rX3IoKS4gICovCitfR0xfRVhURVJOX0MgY2hhciAqIG1ic3NlcCAoY2hhciAqKnN0cmluZ3AsIGNvbnN0IGNoYXIgKmRlbGltKQorICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSk7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfTUJTVE9LX1JACisvKiBQYXJzZSB0aGUgY2hhcmFjdGVyIHN0cmluZyBTVFJJTkcgaW50byB0b2tlbnMgc2VwYXJhdGVkIGJ5IGNoYXJhY3RlcnMgaW4KKyAgIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIERFTElNLgorICAgSWYgU1RSSU5HIGlzIE5VTEwsIHRoZSBzYXZlZCBwb2ludGVyIGluIFNBVkVfUFRSIGlzIHVzZWQgYXMKKyAgIHRoZSBuZXh0IHN0YXJ0aW5nIHBvaW50LiAgRm9yIGV4YW1wbGU6CisgICAgICAgIGNoYXIgc1tdID0gIi1hYmMtPS1kZWYiOworICAgICAgICBjaGFyICpzcDsKKyAgICAgICAgeCA9IG1ic3Rva19yKHMsICItIiwgJnNwKTsgICAgICAvLyB4ID0gImFiYyIsIHNwID0gIj0tZGVmIgorICAgICAgICB4ID0gbWJzdG9rX3IoTlVMTCwgIi09IiwgJnNwKTsgIC8vIHggPSAiZGVmIiwgc3AgPSBOVUxMCisgICAgICAgIHggPSBtYnN0b2tfcihOVUxMLCAiPSIsICZzcCk7ICAgLy8geCA9IE5VTEwKKyAgICAgICAgICAgICAgICAvLyBzID0gImFiY1wwLWRlZlwwIgorCisgICBDYXZlYXQ6IEl0IG1vZGlmaWVzIHRoZSBvcmlnaW5hbCBzdHJpbmcuCisgICBDYXZlYXQ6IFRoZXNlIGZ1bmN0aW9ucyBjYW5ub3QgYmUgdXNlZCBvbiBjb25zdGFudCBzdHJpbmdzLgorICAgQ2F2ZWF0OiBUaGUgaWRlbnRpdHkgb2YgdGhlIGRlbGltaXRpbmcgY2hhcmFjdGVyIGlzIGxvc3QuCisKKyAgIFNlZSBhbHNvIG1ic3NlcCgpLiAgKi8KK19HTF9FWFRFUk5fQyBjaGFyICogbWJzdG9rX3IgKGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqZGVsaW0sIGNoYXIgKipzYXZlX3B0cikKKyAgICAgX0dMX0FSR19OT05OVUxMICgoMiwgMykpOworI2VuZGlmCisKKy8qIE1hcCBhbnkgaW50LCB0eXBpY2FsbHkgZnJvbSBlcnJubywgaW50byBhbiBlcnJvciBtZXNzYWdlLiAgKi8KKyNpZiBAR05VTElCX1NUUkVSUk9SQAorIyBpZiBAUkVQTEFDRV9TVFJFUlJPUkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgc3RyZXJyb3IKKyMgICBkZWZpbmUgc3RyZXJyb3IgcnBsX3N0cmVycm9yCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc3RyZXJyb3IsIGNoYXIgKiwgKGludCkpOworX0dMX0NYWEFMSUFTX1JQTCAoc3RyZXJyb3IsIGNoYXIgKiwgKGludCkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChzdHJlcnJvciwgY2hhciAqLCAoaW50KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzdHJlcnJvcik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHN0cmVycm9yCisvKiBBc3N1bWUgc3RyZXJyb3IgaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAoc3RyZXJyb3IsICJzdHJlcnJvciBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RyZXJyb3IgdG8gZ3VhcmFudGVlIG5vbi1OVUxMIHJlc3VsdCIpOworI2VuZGlmCisKKy8qIE1hcCBhbnkgaW50LCB0eXBpY2FsbHkgZnJvbSBlcnJubywgaW50byBhbiBlcnJvciBtZXNzYWdlLiAgTXVsdGl0aHJlYWQtc2FmZS4KKyAgIFVzZXMgdGhlIFBPU0lYIGRlY2xhcmF0aW9uLCBub3QgdGhlIGdsaWJjIGRlY2xhcmF0aW9uLiAgKi8KKyNpZiBAR05VTElCX1NUUkVSUk9SX1JACisjIGlmIEBSRVBMQUNFX1NUUkVSUk9SX1JACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHN0cmVycm9yX3IKKyMgICBkZWZpbmUgc3RyZXJyb3JfciBycGxfc3RyZXJyb3JfcgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHN0cmVycm9yX3IsIGludCwgKGludCBlcnJudW0sIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHN0cmVycm9yX3IsIGludCwgKGludCBlcnJudW0sIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikpOworIyBlbHNlCisjICBpZiAhQEhBVkVfREVDTF9TVFJFUlJPUl9SQAorX0dMX0ZVTkNERUNMX1NZUyAoc3RyZXJyb3JfciwgaW50LCAoaW50IGVycm51bSwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHN0cmVycm9yX3IsIGludCwgKGludCBlcnJudW0sIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikpOworIyBlbmRpZgorIyBpZiBASEFWRV9ERUNMX1NUUkVSUk9SX1JACitfR0xfQ1hYQUxJQVNXQVJOIChzdHJlcnJvcl9yKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc3RyZXJyb3JfcgorIyBpZiBIQVZFX1JBV19ERUNMX1NUUkVSUk9SX1IKK19HTF9XQVJOX09OX1VTRSAoc3RyZXJyb3JfciwgInN0cmVycm9yX3IgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHN0cmVycm9yX3ItcG9zaXggZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfU1RSU0lHTkFMQAorIyBpZiBAUkVQTEFDRV9TVFJTSUdOQUxACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBzdHJzaWduYWwgcnBsX3N0cnNpZ25hbAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHN0cnNpZ25hbCwgY2hhciAqLCAoaW50IF9fc2lnKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzdHJzaWduYWwsIGNoYXIgKiwgKGludCBfX3NpZykpOworIyBlbHNlCisjICBpZiAhIEBIQVZFX0RFQ0xfU1RSU0lHTkFMQAorX0dMX0ZVTkNERUNMX1NZUyAoc3Ryc2lnbmFsLCBjaGFyICosIChpbnQgX19zaWcpKTsKKyMgIGVuZGlmCisvKiBOZWVkIHRvIGNhc3QsIGJlY2F1c2Ugb24gQ3lnd2luIDEuNS54IHN5c3RlbXMsIHRoZSByZXR1cm4gdHlwZSBpcworICAgJ2NvbnN0IGNoYXIgKicuICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUIChzdHJzaWduYWwsIGNoYXIgKiwgKGludCBfX3NpZykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoc3Ryc2lnbmFsKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc3Ryc2lnbmFsCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RSU0lHTkFMCitfR0xfV0FSTl9PTl9VU0UgKHN0cnNpZ25hbCwgInN0cnNpZ25hbCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3Ryc2lnbmFsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX1NUUlZFUlNDTVBACisjIGlmICFASEFWRV9TVFJWRVJTQ01QQAorX0dMX0ZVTkNERUNMX1NZUyAoc3RydmVyc2NtcCwgaW50LCAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc3RydmVyc2NtcCwgaW50LCAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopKTsKK19HTF9DWFhBTElBU1dBUk4gKHN0cnZlcnNjbXApOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJ2ZXJzY21wCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RSVkVSU0NNUAorX0dMX1dBUk5fT05fVVNFIChzdHJ2ZXJzY21wLCAic3RydmVyc2NtcCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RydmVyc2NtcCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1RSSU5HX0ggKi8KKyNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1RSSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9zdHJpcHNsYXNoLmMgYi9saWIvc3RyaXBzbGFzaC5jCmluZGV4IDliNTVkYTQuLmVmNDU4YzYgMTAwNjQ0Ci0tLSBhL2xpYi9zdHJpcHNsYXNoLmMKKysrIGIvbGliL3N0cmlwc2xhc2guYwpAQCAtMSwxMSArMSwxMiBAQAogLyogc3RyaXBzbGFzaC5jIC0tIHJlbW92ZSByZWR1bmRhbnQgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIGEgZmlsZSBuYW1lCiAKLSAgIENvcHlyaWdodCAoQykgMTk5MCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMTk5MCwgMjAwMSwgMjAwMy0yMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLgogCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCkBAIC0xMywyOCArMTQsMzIgQEAKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgorI2luY2x1ZGUgPGNvbmZpZy5oPgogCiAjaW5jbHVkZSAiZGlybmFtZS5oIgogCi0vKiBSZW1vdmUgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIEZJTEUuCi0gICBSZXR1cm4gdHJ1ZSBpZiBhIHRyYWlsaW5nIHNsYXNoIHdhcyByZW1vdmVkLgotICAgVGhpcyBpcyB1c2VmdWwgd2hlbiB1c2luZyBmaWxlIG5hbWUgY29tcGxldGlvbiBmcm9tIGEgc2hlbGwgdGhhdAotICAgYWRkcyBhICIvIiBhZnRlciBkaXJlY3RvcnkgbmFtZXMgKHN1Y2ggYXMgdGNzaCBhbmQgYmFzaCksIGJlY2F1c2UKLSAgIHRoZSBVbml4IHJlbmFtZSBhbmQgcm1kaXIgc3lzdGVtIGNhbGxzIHJldHVybiBhbiAiSW52YWxpZCBhcmd1bWVudCIgZXJyb3IKLSAgIHdoZW4gZ2l2ZW4gYSBmaWxlIHRoYXQgZW5kcyBpbiAiLyIgKGV4Y2VwdCBmb3IgdGhlIHJvb3QgZGlyZWN0b3J5KS4gICovCisvKiBSZW1vdmUgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIEZJTEUuICBSZXR1cm4gdHJ1ZSBpZiBhIHRyYWlsaW5nIHNsYXNoCisgICB3YXMgcmVtb3ZlZC4gIFRoaXMgaXMgdXNlZnVsIHdoZW4gdXNpbmcgZmlsZSBuYW1lIGNvbXBsZXRpb24gZnJvbSBhCisgICBzaGVsbCB0aGF0IGFkZHMgYSAiLyIgYWZ0ZXIgZGlyZWN0b3J5IG5hbWVzIChzdWNoIGFzIHRjc2ggYW5kCisgICBiYXNoKSwgYmVjYXVzZSBvbiBzeW1saW5rcyB0byBkaXJlY3Rvcmllcywgc2V2ZXJhbCBzeXN0ZW0gY2FsbHMKKyAgIGhhdmUgZGlmZmVyZW50IHNlbWFudGljcyBhY2NvcmRpbmcgdG8gd2hldGhlciBhIHRyYWlsaW5nIHNsYXNoIGlzCisgICBwcmVzZW50LiAgKi8KIAogYm9vbAogc3RyaXBfdHJhaWxpbmdfc2xhc2hlcyAoY2hhciAqZmlsZSkKIHsKLSAgY2hhciAqYmFzZSA9IGJhc2VfbmFtZSAoZmlsZSk7Ci0gIGNoYXIgKmJhc2VfbGltID0gYmFzZSArIGJhc2VfbGVuIChiYXNlKTsKLSAgYm9vbCBoYWRfc2xhc2ggPSAoKmJhc2VfbGltICE9ICdcMCcpOworICBjaGFyICpiYXNlID0gbGFzdF9jb21wb25lbnQgKGZpbGUpOworICBjaGFyICpiYXNlX2xpbTsKKyAgYm9vbCBoYWRfc2xhc2g7CisKKyAgLyogbGFzdF9jb21wb25lbnQgcmV0dXJucyAiIiBmb3IgZmlsZSBzeXN0ZW0gcm9vdHMsIGJ1dCB3ZSBuZWVkIHRvIHR1cm4KKyAgICAgIi8vLyIgaW50byAiLyIuICAqLworICBpZiAoISAqYmFzZSkKKyAgICBiYXNlID0gZmlsZTsKKyAgYmFzZV9saW0gPSBiYXNlICsgYmFzZV9sZW4gKGJhc2UpOworICBoYWRfc2xhc2ggPSAoKmJhc2VfbGltICE9ICdcMCcpOwogICAqYmFzZV9saW0gPSAnXDAnOwogICByZXR1cm4gaGFkX3NsYXNoOwogfQpkaWZmIC0tZ2l0IGEvbGliL3N0cm5kdXAuYyBiL2xpYi9zdHJuZHVwLmMKaW5kZXggMjYyNjM3My4uNDA1Mzg3MSAxMDA2NDQKLS0tIGEvbGliL3N0cm5kdXAuYworKysgYi9saWIvc3RybmR1cC5jCkBAIC0xLDEyICsxLDExIEBACi0vKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDUsIDIwMDYgRnJlZQotICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLyogQSByZXBsYWNlbWVudCBmdW5jdGlvbiwgZm9yIHN5c3RlbXMgdGhhdCBsYWNrIHN0cm5kdXAuCiAKLSAgIE5PVEU6IFRoZSBjYW5vbmljYWwgc291cmNlIG9mIHRoaXMgZmlsZSBpcyBtYWludGFpbmVkIHdpdGggdGhlIEdOVSBDIExpYnJhcnkuCi0gICBCdWdzIGNhbiBiZSByZXBvcnRlZCB0byBidWctZ2xpYmNAcHJlcC5haS5taXQuZWR1LgorICAgQ29weXJpZ2h0IChDKSAxOTk2LTE5OTgsIDIwMDEtMjAwMywgMjAwNS0yMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CiAgICBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKQEAgLTE1LDQxICsxNCwxOCBAQAogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKLSNpZiAhX0xJQkMKLSMgaW5jbHVkZSAic3RybmR1cC5oIgotI2VuZGlmCisjaW5jbHVkZSA8Y29uZmlnLmg+CiAKLSNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAotI2lmICFfTElCQwotIyBpbmNsdWRlICJzdHJubGVuLmgiCi0jIGlmbmRlZiBfX3N0cm5sZW4KLSMgIGRlZmluZSBfX3N0cm5sZW4gc3RybmxlbgotIyBlbmRpZgotI2VuZGlmCi0KLSN1bmRlZiBfX3N0cm5kdXAKLSNpZiBfTElCQwotIyB1bmRlZiBzdHJuZHVwCi0jZW5kaWYKLQotI2lmbmRlZiB3ZWFrX2FsaWFzCi0jIGRlZmluZSBfX3N0cm5kdXAgc3RybmR1cAotI2VuZGlmCisjaW5jbHVkZSA8c3RkbGliLmg+CiAKIGNoYXIgKgotX19zdHJuZHVwIChzLCBuKQotICAgICBjb25zdCBjaGFyICpzOwotICAgICBzaXplX3QgbjsKK3N0cm5kdXAgKGNoYXIgY29uc3QgKnMsIHNpemVfdCBuKQogewotICBzaXplX3QgbGVuID0gX19zdHJubGVuIChzLCBuKTsKKyAgc2l6ZV90IGxlbiA9IHN0cm5sZW4gKHMsIG4pOwogICBjaGFyICpuZXcgPSBtYWxsb2MgKGxlbiArIDEpOwogCiAgIGlmIChuZXcgPT0gTlVMTCkKQEAgLTU4LDkgKzM0LDMgQEAKICAgbmV3W2xlbl0gPSAnXDAnOwogICByZXR1cm4gbWVtY3B5IChuZXcsIHMsIGxlbik7CiB9Ci0jaWZkZWYgbGliY19oaWRkZW5fZGVmCi1saWJjX2hpZGRlbl9kZWYgKF9fc3RybmR1cCkKLSNlbmRpZgotI2lmZGVmIHdlYWtfYWxpYXMKLXdlYWtfYWxpYXMgKF9fc3RybmR1cCwgc3RybmR1cCkKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL3N0cm5kdXAuaCBiL2xpYi9zdHJuZHVwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYWU0OTMuLjAwMDAwMDAKLS0tIGEvbGliL3N0cm5kdXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qIER1cGxpY2F0ZSBhIHNpemUtYm91bmRlZCBzdHJpbmcuCi0gICBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwotCi0jaWYgSEFWRV9TVFJORFVQCi0KLS8qIEdldCBzdHJuZHVwKCkgZGVjbGFyYXRpb24uICAqLwotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jZWxzZQotCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0KLS8qIFJldHVybiBhIG5ld2x5IGFsbG9jYXRlZCBjb3B5IG9mIGF0IG1vc3QgTiBieXRlcyBvZiBTVFJJTkcuICAqLwotZXh0ZXJuIGNoYXIgKnN0cm5kdXAgKGNvbnN0IGNoYXIgKnN0cmluZywgc2l6ZV90IG4pOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9zdHJubGVuLmMgYi9saWIvc3Rybmxlbi5jCmluZGV4IDA5YmE3ODguLmQzNjE4MGQgMTAwNjQ0Ci0tLSBhL2xpYi9zdHJubGVuLmMKKysrIGIvbGliL3N0cm5sZW4uYwpAQCAtMSwxMCArMSwxMCBAQAogLyogRmluZCB0aGUgbGVuZ3RoIG9mIFNUUklORywgYnV0IHNjYW4gYXQgbW9zdCBNQVhMRU4gY2hhcmFjdGVycy4KLSAgIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMjAwNS0yMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAgICBXcml0dGVuIGJ5IFNpbW9uIEpvc2Vmc3Nvbi4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCiAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCkBAIC0xMywxNCArMTMsMTEgQEAKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCisjaW5jbHVkZSA8Y29uZmlnLmg+CiAKLSNpbmNsdWRlICJzdHJubGVuLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CiAKIC8qIEZpbmQgdGhlIGxlbmd0aCBvZiBTVFJJTkcsIGJ1dCBzY2FuIGF0IG1vc3QgTUFYTEVOIGNoYXJhY3RlcnMuCiAgICBJZiBubyAnXDAnIHRlcm1pbmF0b3IgaXMgZm91bmQgaW4gdGhhdCBtYW55IGNoYXJhY3RlcnMsIHJldHVybiBNQVhMRU4uICAqLwpkaWZmIC0tZ2l0IGEvbGliL3N0cm5sZW4uaCBiL2xpYi9zdHJubGVuLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhNzRkYmEuLjAwMDAwMDAKLS0tIGEvbGliL3N0cm5sZW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qIEZpbmQgdGhlIGxlbmd0aCBvZiBTVFJJTkcsIGJ1dCBzY2FuIGF0IG1vc3QgTUFYTEVOIGNoYXJhY3RlcnMuCi0gICBDb3B5cmlnaHQgKEMpIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0gICBXcml0dGVuIGJ5IFNpbW9uIEpvc2Vmc3Nvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCi0KLSNpZm5kZWYgU1RSTkxFTl9ICi0jZGVmaW5lIFNUUk5MRU5fSAotCi0vKiBHZXQgc3RybmxlbiBkZWNsYXJhdGlvbiwgaWYgYXZhaWxhYmxlLiAgKi8KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2lmIGRlZmluZWQgSEFWRV9ERUNMX1NUUk5MRU4gJiYgIUhBVkVfREVDTF9TVFJOTEVOCi0vKiBGaW5kIHRoZSBsZW5ndGggKG51bWJlciBvZiBieXRlcykgb2YgU1RSSU5HLCBidXQgc2NhbiBhdCBtb3N0Ci0gICBNQVhMRU4gYnl0ZXMuICBJZiBubyAnXDAnIHRlcm1pbmF0b3IgaXMgZm91bmQgaW4gdGhhdCBtYW55IGJ5dGVzLAotICAgcmV0dXJuIE1BWExFTi4gICovCi1leHRlcm4gc2l6ZV90IHN0cm5sZW4oY29uc3QgY2hhciAqc3RyaW5nLCBzaXplX3QgbWF4bGVuKTsKLSNlbmRpZgotCi0jZW5kaWYgLyogU1RSTkxFTl9IICovCmRpZmYgLS1naXQgYS9saWIvc3RybmxlbjEuYyBiL2xpYi9zdHJubGVuMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZGM1MDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc3RybmxlbjEuYwpAQCAtMCwwICsxLDM1IEBACisvKiBGaW5kIHRoZSBsZW5ndGggb2YgU1RSSU5HICsgMSwgYnV0IHNjYW4gYXQgbW9zdCBNQVhMRU4gYnl0ZXMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgInN0cm5sZW4xLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogRmluZCB0aGUgbGVuZ3RoIG9mIFNUUklORyArIDEsIGJ1dCBzY2FuIGF0IG1vc3QgTUFYTEVOIGJ5dGVzLgorICAgSWYgbm8gJ1wwJyB0ZXJtaW5hdG9yIGlzIGZvdW5kIGluIHRoYXQgbWFueSBjaGFyYWN0ZXJzLCByZXR1cm4gTUFYTEVOLiAgKi8KKy8qIFRoaXMgaXMgdGhlIHNhbWUgYXMgc3RybmxlbiAoc3RyaW5nLCBtYXhsZW4gLSAxKSArIDEuICAqLworc2l6ZV90CitzdHJubGVuMSAoY29uc3QgY2hhciAqc3RyaW5nLCBzaXplX3QgbWF4bGVuKQoreworICBjb25zdCBjaGFyICplbmQgPSAoY29uc3QgY2hhciAqKSBtZW1jaHIgKHN0cmluZywgJ1wwJywgbWF4bGVuKTsKKyAgaWYgKGVuZCAhPSBOVUxMKQorICAgIHJldHVybiBlbmQgLSBzdHJpbmcgKyAxOworICBlbHNlCisgICAgcmV0dXJuIG1heGxlbjsKK30KZGlmZiAtLWdpdCBhL2xpYi9zdHJubGVuMS5oIGIvbGliL3N0cm5sZW4xLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM0ZjBjMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9zdHJubGVuMS5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qIEZpbmQgdGhlIGxlbmd0aCBvZiBTVFJJTkcgKyAxLCBidXQgc2NhbiBhdCBtb3N0IE1BWExFTiBieXRlcy4KKyAgIENvcHlyaWdodCAoQykgMjAwNSwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIF9TVFJOTEVOMV9ICisjZGVmaW5lIF9TVFJOTEVOMV9ICisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworLyogRmluZCB0aGUgbGVuZ3RoIG9mIFNUUklORyArIDEsIGJ1dCBzY2FuIGF0IG1vc3QgTUFYTEVOIGJ5dGVzLgorICAgSWYgbm8gJ1wwJyB0ZXJtaW5hdG9yIGlzIGZvdW5kIGluIHRoYXQgbWFueSBjaGFyYWN0ZXJzLCByZXR1cm4gTUFYTEVOLiAgKi8KKy8qIFRoaXMgaXMgdGhlIHNhbWUgYXMgc3RybmxlbiAoc3RyaW5nLCBtYXhsZW4gLSAxKSArIDEuICAqLworZXh0ZXJuIHNpemVfdCBzdHJubGVuMSAoY29uc3QgY2hhciAqc3RyaW5nLCBzaXplX3QgbWF4bGVuKQorICBfR0xfQVRUUklCVVRFX1BVUkU7CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworCisjZW5kaWYgLyogX1NUUk5MRU4xX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9zdHJ0b2wuYyBiL2xpYi9zdHJ0b2wuYwppbmRleCA5YmZiZTNjLi5iZjk5MmE4IDEwMDY0NAotLS0gYS9saWIvc3RydG9sLmMKKysrIGIvbGliL3N0cnRvbC5jCkBAIC0xLDE0ICsxLDE0IEBACiAvKiBDb252ZXJ0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIG51bWJlciBpbnRvIGFuIGludGVnZXIgdmFsdWUuCiAKLSAgIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMywgMjAwNQotICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5MiwgMTk5NC0xOTk5LCAyMDAzLCAyMDA1LTIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuCiAKICAgIE5PVEU6IFRoZSBjYW5vbmljYWwgc291cmNlIG9mIHRoaXMgZmlsZSBpcyBtYWludGFpbmVkIHdpdGggdGhlIEdOVSBDCiAgICBMaWJyYXJ5LiAgQnVncyBjYW4gYmUgcmVwb3J0ZWQgdG8gYnVnLWdsaWJjQGdudS5vcmcuCiAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIGFueQogICAgbGF0ZXIgdmVyc2lvbi4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCkBAIC0xNywyMiArMTcsMTYgQEAKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAjaWZkZWYgX0xJQkMKICMgZGVmaW5lIFVTRV9OVU1CRVJfR1JPVVBJTkcKKyNlbHNlCisjIGluY2x1ZGUgPGNvbmZpZy5oPgogI2VuZGlmCiAKICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPGVycm5vLmg+Ci0jaWZuZGVmIGVycm5vCi1leHRlcm4gaW50IGVycm5vOwotI2VuZGlmCiAjaWZuZGVmIF9fc2V0X2Vycm5vCiAjIGRlZmluZSBfX3NldF9lcnJubyhWYWwpIGVycm5vID0gKFZhbCkKICNlbmRpZgpAQCAtNDYsNyArNDAsNyBAQAogIyBpbmNsdWRlICIuLi9sb2NhbGUvbG9jYWxlaW5mby5oIgogI2VuZGlmCiAKLS8qIE5vbnplcm8gaWYgd2UgYXJlIGRlZmluaW5nIGBzdHJ0b3VsJyBvciBgc3RydG91bGwnLCBvcGVyYXRpbmcgb24KKy8qIE5vbnplcm8gaWYgd2UgYXJlIGRlZmluaW5nICdzdHJ0b3VsJyBvciAnc3RydG91bGwnLCBvcGVyYXRpbmcgb24KICAgIHVuc2lnbmVkIGludGVnZXJzLiAgKi8KICNpZm5kZWYgVU5TSUdORUQKICMgZGVmaW5lIFVOU0lHTkVEIDAKQEAgLTExNiwxMyArMTEwLDEzIEBACiAjIGVuZGlmCiAjZW5kaWYKIAotLyogSWYgUVVBRCBpcyBkZWZpbmVkLCB3ZSBhcmUgZGVmaW5pbmcgYHN0cnRvbGwnIG9yIGBzdHJ0b3VsbCcsCi0gICBvcGVyYXRpbmcgb24gYGxvbmcgbG9uZyBpbnQncy4gICovCisvKiBJZiBRVUFEIGlzIGRlZmluZWQsIHdlIGFyZSBkZWZpbmluZyAnc3RydG9sbCcgb3IgJ3N0cnRvdWxsJywKKyAgIG9wZXJhdGluZyBvbiAnbG9uZyBsb25nIGludCdzLiAgKi8KICNpZmRlZiBRVUFECiAjIGRlZmluZSBMT05HIGxvbmcgbG9uZwotIyBkZWZpbmUgU1RSVE9MX0xPTkdfTUlOIExPTkdfTE9OR19NSU4KLSMgZGVmaW5lIFNUUlRPTF9MT05HX01BWCBMT05HX0xPTkdfTUFYCi0jIGRlZmluZSBTVFJUT0xfVUxPTkdfTUFYIFVMT05HX0xPTkdfTUFYCisjIGRlZmluZSBTVFJUT0xfTE9OR19NSU4gTExPTkdfTUlOCisjIGRlZmluZSBTVFJUT0xfTE9OR19NQVggTExPTkdfTUFYCisjIGRlZmluZSBTVFJUT0xfVUxPTkdfTUFYIFVMTE9OR19NQVgKIAogLyogVGhlIGV4dHJhIGNhc3RzIGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zIHdvcmsgYXJvdW5kIGNvbXBpbGVyIGJ1Z3MsCiAgICBlLmcuLCBpbiBDcmF5IEMgNS4wLjMuMC4gICovCkBAIC0xNDQsMjggKzEzOCwyOCBAQAogICAgeW91ciBob3N0LiAgKi8KICMgZGVmaW5lIFRZUEVfTUlOSU1VTSh0KSBcCiAgICAoKHQpICghIFRZUEVfU0lHTkVEICh0KSBcCi0JID8gKHQpIDAgXAotCSA6IFRZUEVfU0lHTkVEX01BR05JVFVERSAodCkgXAotCSA/IH4gKHQpIDAgXAotCSA6IH4gKHQpIDAgPDwgKHNpemVvZiAodCkgKiBDSEFSX0JJVCAtIDEpKSkKKyAgICAgICAgID8gKHQpIDAgXAorICAgICAgICAgOiBUWVBFX1NJR05FRF9NQUdOSVRVREUgKHQpIFwKKyAgICAgICAgID8gfiAodCkgMCBcCisgICAgICAgICA6IH4gVFlQRV9NQVhJTVVNICh0KSkpCiAjIGRlZmluZSBUWVBFX01BWElNVU0odCkgXAogICAgKCh0KSAoISBUWVBFX1NJR05FRCAodCkgXAotCSA/ICh0KSAtMSBcCi0JIDogfiAofiAodCkgMCA8PCAoc2l6ZW9mICh0KSAqIENIQVJfQklUIC0gMSkpKSkKKyAgICAgICAgID8gKHQpIC0xIFwKKyAgICAgICAgIDogKCgoKHQpIDEgPDwgKHNpemVvZiAodCkgKiBDSEFSX0JJVCAtIDIpKSAtIDEpICogMiArIDEpKSkKIAotIyBpZm5kZWYgVUxPTkdfTE9OR19NQVgKLSMgIGRlZmluZSBVTE9OR19MT05HX01BWCBUWVBFX01BWElNVU0gKHVuc2lnbmVkIGxvbmcgbG9uZykKKyMgaWZuZGVmIFVMTE9OR19NQVgKKyMgIGRlZmluZSBVTExPTkdfTUFYIFRZUEVfTUFYSU1VTSAodW5zaWduZWQgbG9uZyBsb25nKQogIyBlbmRpZgotIyBpZm5kZWYgTE9OR19MT05HX01BWAotIyAgZGVmaW5lIExPTkdfTE9OR19NQVggVFlQRV9NQVhJTVVNIChsb25nIGxvbmcgaW50KQorIyBpZm5kZWYgTExPTkdfTUFYCisjICBkZWZpbmUgTExPTkdfTUFYIFRZUEVfTUFYSU1VTSAobG9uZyBsb25nIGludCkKICMgZW5kaWYKLSMgaWZuZGVmIExPTkdfTE9OR19NSU4KLSMgIGRlZmluZSBMT05HX0xPTkdfTUlOIFRZUEVfTUlOSU1VTSAobG9uZyBsb25nIGludCkKKyMgaWZuZGVmIExMT05HX01JTgorIyAgZGVmaW5lIExMT05HX01JTiBUWVBFX01JTklNVU0gKGxvbmcgbG9uZyBpbnQpCiAjIGVuZGlmCiAKICMgaWYgX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDcKICAgIC8qIFdvcmsgYXJvdW5kIGdjYyBidWcgd2l0aCB1c2luZyB0aGlzIGNvbnN0YW50LiAgKi8KLSAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgaW50IG1heHF1YWQgPSBVTE9OR19MT05HX01BWDsKKyAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgaW50IG1heHF1YWQgPSBVTExPTkdfTUFYOwogIyAgdW5kZWYgU1RSVE9MX1VMT05HX01BWAogIyAgZGVmaW5lIFNUUlRPTF9VTE9OR19NQVggbWF4cXVhZAogIyBlbmRpZgpAQCAtMTkyLDExICsxODYsOCBAQAogIyBkZWZpbmUgTE9DQUxFX1BBUkFNX1BST1RPCiAjZW5kaWYKIAotI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBIQVZFX1dDSEFSX0gKLSMgaW5jbHVkZSA8d2NoYXIuaD4KLSNlbmRpZgotCiAjaWZkZWYgVVNFX1dJREVfQ0hBUgorIyBpbmNsdWRlIDx3Y2hhci5oPgogIyBpbmNsdWRlIDx3Y3R5cGUuaD4KICMgZGVmaW5lIExfKENoKSBMIyNDaAogIyBkZWZpbmUgVUNIQVJfVFlQRSB3aW50X3QKQEAgLTIxMSwxMSArMjAyLDYgQEAKICMgIGRlZmluZSBUT1VQUEVSKENoKSB0b3d1cHBlciAoQ2gpCiAjIGVuZGlmCiAjZWxzZQotIyBpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCAoIWRlZmluZWQgaXNhc2NpaSAmJiAhZGVmaW5lZCBIQVZFX0lTQVNDSUkpCi0jICBkZWZpbmUgSU5fQ1RZUEVfRE9NQUlOKGMpIDEKLSMgZWxzZQotIyAgZGVmaW5lIElOX0NUWVBFX0RPTUFJTihjKSBpc2FzY2lpKGMpCi0jIGVuZGlmCiAjIGRlZmluZSBMXyhDaCkgQ2gKICMgZGVmaW5lIFVDSEFSX1RZUEUgdW5zaWduZWQgY2hhcgogIyBkZWZpbmUgU1RSSU5HX1RZUEUgY2hhcgpAQCAtMjI0LDkgKzIxMCw5IEBACiAjICBkZWZpbmUgSVNBTFBIQShDaCkgX19pc2FscGhhX2wgKChDaCksIGxvYykKICMgIGRlZmluZSBUT1VQUEVSKENoKSBfX3RvdXBwZXJfbCAoKENoKSwgbG9jKQogIyBlbHNlCi0jICBkZWZpbmUgSVNTUEFDRShDaCkgKElOX0NUWVBFX0RPTUFJTiAoQ2gpICYmIGlzc3BhY2UgKENoKSkKLSMgIGRlZmluZSBJU0FMUEhBKENoKSAoSU5fQ1RZUEVfRE9NQUlOIChDaCkgJiYgaXNhbHBoYSAoQ2gpKQotIyAgZGVmaW5lIFRPVVBQRVIoQ2gpIChJTl9DVFlQRV9ET01BSU4gKENoKSA/IHRvdXBwZXIgKENoKSA6IChDaCkpCisjICBkZWZpbmUgSVNTUEFDRShDaCkgaXNzcGFjZSAoQ2gpCisjICBkZWZpbmUgSVNBTFBIQShDaCkgaXNhbHBoYSAoQ2gpCisjICBkZWZpbmUgVE9VUFBFUihDaCkgdG91cHBlciAoQ2gpCiAjIGVuZGlmCiAjZW5kaWYKIApAQCAtMjQxLDcgKzIyNyw3IEBACiAKIAogCi0vKiBDb252ZXJ0IE5QVFIgdG8gYW4gYHVuc2lnbmVkIGxvbmcgaW50JyBvciBgbG9uZyBpbnQnIGluIGJhc2UgQkFTRS4KKy8qIENvbnZlcnQgTlBUUiB0byBhbiAndW5zaWduZWQgbG9uZyBpbnQnIG9yICdsb25nIGludCcgaW4gYmFzZSBCQVNFLgogICAgSWYgQkFTRSBpcyAwIHRoZSBiYXNlIGlzIGRldGVybWluZWQgYnkgdGhlIHByZXNlbmNlIG9mIGEgbGVhZGluZwogICAgemVybywgaW5kaWNhdGluZyBvY3RhbCBvciBhIGxlYWRpbmcgIjB4IiBvciAiMFgiLCBpbmRpY2F0aW5nIGhleGFkZWNpbWFsLgogICAgSWYgQkFTRSBpcyA8IDIgb3IgPiAzNiwgaXQgaXMgcmVzZXQgdG8gMTAuCkBAIC0yNTAsNyArMjM2LDcgQEAKIAogSU5UCiBJTlRFUk5BTCAoc3RydG9sKSAoY29uc3QgU1RSSU5HX1RZUEUgKm5wdHIsIFNUUklOR19UWVBFICoqZW5kcHRyLAotCQkgICBpbnQgYmFzZSwgaW50IGdyb3VwIExPQ0FMRV9QQVJBTV9QUk9UTykKKyAgICAgICAgICAgICAgICAgICBpbnQgYmFzZSwgaW50IGdyb3VwIExPQ0FMRV9QQVJBTV9QUk9UTykKIHsKICAgaW50IG5lZ2F0aXZlOwogICByZWdpc3RlciB1bnNpZ25lZCBMT05HIGludCBjdXRvZmY7CkBAIC0yNzUsMTggKzI2MSwxOCBAQAogICAgIHsKICAgICAgIGdyb3VwaW5nID0gX05MX0NVUlJFTlQgKExDX05VTUVSSUMsIEdST1VQSU5HKTsKICAgICAgIGlmICgqZ3JvdXBpbmcgPD0gMCB8fCAqZ3JvdXBpbmcgPT0gQ0hBUl9NQVgpCi0JZ3JvdXBpbmcgPSBOVUxMOworICAgICAgICBncm91cGluZyA9IE5VTEw7CiAgICAgICBlbHNlCi0JewotCSAgLyogRmlndXJlIG91dCB0aGUgdGhvdXNhbmRzIHNlcGFyYXRvciBjaGFyYWN0ZXIuICAqLworICAgICAgICB7CisgICAgICAgICAgLyogRmlndXJlIG91dCB0aGUgdGhvdXNhbmRzIHNlcGFyYXRvciBjaGFyYWN0ZXIuICAqLwogIyBpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgX0hBVkVfQlRPV0MKLQkgIHRob3VzYW5kcyA9IF9fYnRvd2MgKCpfTkxfQ1VSUkVOVCAoTENfTlVNRVJJQywgVEhPVVNBTkRTX1NFUCkpOwotCSAgaWYgKHRob3VzYW5kcyA9PSBXRU9GKQotCSAgICB0aG91c2FuZHMgPSBMJ1wwJzsKKyAgICAgICAgICB0aG91c2FuZHMgPSBfX2J0b3djICgqX05MX0NVUlJFTlQgKExDX05VTUVSSUMsIFRIT1VTQU5EU19TRVApKTsKKyAgICAgICAgICBpZiAodGhvdXNhbmRzID09IFdFT0YpCisgICAgICAgICAgICB0aG91c2FuZHMgPSBMJ1wwJzsKICMgZW5kaWYKLQkgIGlmICh0aG91c2FuZHMgPT0gTCdcMCcpCi0JICAgIGdyb3VwaW5nID0gTlVMTDsKLQl9CisgICAgICAgICAgaWYgKHRob3VzYW5kcyA9PSBMJ1wwJykKKyAgICAgICAgICAgIGdyb3VwaW5nID0gTlVMTDsKKyAgICAgICAgfQogICAgIH0KICAgZWxzZQogICAgIGdyb3VwaW5nID0gTlVMTDsKQEAgLTMyNCwxMiArMzEwLDEyIEBACiAgIGlmICgqcyA9PSBMXygnMCcpKQogICAgIHsKICAgICAgIGlmICgoYmFzZSA9PSAwIHx8IGJhc2UgPT0gMTYpICYmIFRPVVBQRVIgKHNbMV0pID09IExfKCdYJykpCi0JewotCSAgcyArPSAyOwotCSAgYmFzZSA9IDE2OwotCX0KKyAgICAgICAgeworICAgICAgICAgIHMgKz0gMjsKKyAgICAgICAgICBiYXNlID0gMTY7CisgICAgICAgIH0KICAgICAgIGVsc2UgaWYgKGJhc2UgPT0gMCkKLQliYXNlID0gODsKKyAgICAgICAgYmFzZSA9IDg7CiAgICAgfQogICBlbHNlIGlmIChiYXNlID09IDApCiAgICAgYmFzZSA9IDEwOwpAQCAtMzQzLDE0ICszMjksMTQgQEAKICAgICAgIC8qIEZpbmQgdGhlIGVuZCBvZiB0aGUgZGlnaXQgc3RyaW5nIGFuZCBjaGVjayBpdHMgZ3JvdXBpbmcuICAqLwogICAgICAgZW5kID0gczsKICAgICAgIGZvciAoYyA9ICplbmQ7IGMgIT0gTF8oJ1wwJyk7IGMgPSAqKytlbmQpCi0JaWYgKCh3Y2hhcl90KSBjICE9IHRob3VzYW5kcwotCSAgICAmJiAoKHdjaGFyX3QpIGMgPCBMXygnMCcpIHx8ICh3Y2hhcl90KSBjID4gTF8oJzknKSkKLQkgICAgJiYgKCFJU0FMUEhBIChjKSB8fCAoaW50KSAoVE9VUFBFUiAoYykgLSBMXygnQScpICsgMTApID49IGJhc2UpKQotCSAgYnJlYWs7CisgICAgICAgIGlmICgod2NoYXJfdCkgYyAhPSB0aG91c2FuZHMKKyAgICAgICAgICAgICYmICgod2NoYXJfdCkgYyA8IExfKCcwJykgfHwgKHdjaGFyX3QpIGMgPiBMXygnOScpKQorICAgICAgICAgICAgJiYgKCFJU0FMUEhBIChjKSB8fCAoaW50KSAoVE9VUFBFUiAoYykgLSBMXygnQScpICsgMTApID49IGJhc2UpKQorICAgICAgICAgIGJyZWFrOwogICAgICAgaWYgKCpzID09IHRob3VzYW5kcykKLQllbmQgPSBzOworICAgICAgICBlbmQgPSBzOwogICAgICAgZWxzZQotCWVuZCA9IGNvcnJlY3RseV9ncm91cGVkX3ByZWZpeCAocywgZW5kLCB0aG91c2FuZHMsIGdyb3VwaW5nKTsKKyAgICAgICAgZW5kID0gY29ycmVjdGx5X2dyb3VwZWRfcHJlZml4IChzLCBlbmQsIHRob3VzYW5kcywgZ3JvdXBpbmcpOwogICAgIH0KICAgZWxzZQogI2VuZGlmCkBAIC0zNjQsMjMgKzM1MCwyMyBAQAogICBmb3IgKGMgPSAqczsgYyAhPSBMXygnXDAnKTsgYyA9ICorK3MpCiAgICAgewogICAgICAgaWYgKHMgPT0gZW5kKQotCWJyZWFrOworICAgICAgICBicmVhazsKICAgICAgIGlmIChjID49IExfKCcwJykgJiYgYyA8PSBMXygnOScpKQotCWMgLT0gTF8oJzAnKTsKKyAgICAgICAgYyAtPSBMXygnMCcpOwogICAgICAgZWxzZSBpZiAoSVNBTFBIQSAoYykpCi0JYyA9IFRPVVBQRVIgKGMpIC0gTF8oJ0EnKSArIDEwOworICAgICAgICBjID0gVE9VUFBFUiAoYykgLSBMXygnQScpICsgMTA7CiAgICAgICBlbHNlCi0JYnJlYWs7CisgICAgICAgIGJyZWFrOwogICAgICAgaWYgKChpbnQpIGMgPj0gYmFzZSkKLQlicmVhazsKKyAgICAgICAgYnJlYWs7CiAgICAgICAvKiBDaGVjayBmb3Igb3ZlcmZsb3cuICAqLwogICAgICAgaWYgKGkgPiBjdXRvZmYgfHwgKGkgPT0gY3V0b2ZmICYmIGMgPiBjdXRsaW0pKQotCW92ZXJmbG93ID0gMTsKKyAgICAgICAgb3ZlcmZsb3cgPSAxOwogICAgICAgZWxzZQotCXsKLQkgIGkgKj0gKHVuc2lnbmVkIExPTkcgaW50KSBiYXNlOwotCSAgaSArPSBjOwotCX0KKyAgICAgICAgeworICAgICAgICAgIGkgKj0gKHVuc2lnbmVkIExPTkcgaW50KSBiYXNlOworICAgICAgICAgIGkgKz0gYzsKKyAgICAgICAgfQogICAgIH0KIAogICAvKiBDaGVjayBpZiBhbnl0aGluZyBhY3R1YWxseSBoYXBwZW5lZC4gICovCkBAIC0zOTQsMTEgKzM4MCwxMSBAQAogCiAjaWYgIVVOU0lHTkVECiAgIC8qIENoZWNrIGZvciBhIHZhbHVlIHRoYXQgaXMgd2l0aGluIHRoZSByYW5nZSBvZgotICAgICBgdW5zaWduZWQgTE9ORyBpbnQnLCBidXQgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgYExPTkcgaW50Jy4gICovCisgICAgICd1bnNpZ25lZCBMT05HIGludCcsIGJ1dCBvdXRzaWRlIHRoZSByYW5nZSBvZiAnTE9ORyBpbnQnLiAgKi8KICAgaWYgKG92ZXJmbG93ID09IDAKICAgICAgICYmIGkgPiAobmVnYXRpdmUKLQkgICAgICA/IC0oKHVuc2lnbmVkIExPTkcgaW50KSAoU1RSVE9MX0xPTkdfTUlOICsgMSkpICsgMQotCSAgICAgIDogKHVuc2lnbmVkIExPTkcgaW50KSBTVFJUT0xfTE9OR19NQVgpKQorICAgICAgICAgICAgICA/IC0oKHVuc2lnbmVkIExPTkcgaW50KSAoU1RSVE9MX0xPTkdfTUlOICsgMSkpICsgMQorICAgICAgICAgICAgICA6ICh1bnNpZ25lZCBMT05HIGludCkgU1RSVE9MX0xPTkdfTUFYKSkKICAgICBvdmVyZmxvdyA9IDE7CiAjZW5kaWYKIApAQCAtNDE5LDE1ICs0MDUsMTUgQEAKICAgLyogV2UgbXVzdCBoYW5kbGUgYSBzcGVjaWFsIGNhc2UgaGVyZTogdGhlIGJhc2UgaXMgMCBvciAxNiBhbmQgdGhlCiAgICAgIGZpcnN0IHR3byBjaGFyYWN0ZXJzIGFyZSAnMCcgYW5kICd4JywgYnV0IHRoZSByZXN0IGFyZSBubwogICAgICBoZXhhZGVjaW1hbCBkaWdpdHMuICBUaGlzIGlzIG5vIGVycm9yIGNhc2UuICBXZSByZXR1cm4gMCBhbmQKLSAgICAgRU5EUFRSIHBvaW50cyB0byB0aGUgYHhgLiAgKi8KKyAgICAgRU5EUFRSIHBvaW50cyB0byB0aGUgJ3gnLiAgKi8KICAgaWYgKGVuZHB0ciAhPSBOVUxMKQogICAgIHsKICAgICAgIGlmIChzYXZlIC0gbnB0ciA+PSAyICYmIFRPVVBQRVIgKHNhdmVbLTFdKSA9PSBMXygnWCcpCi0JICAmJiBzYXZlWy0yXSA9PSBMXygnMCcpKQotCSplbmRwdHIgPSAoU1RSSU5HX1RZUEUgKikgJnNhdmVbLTFdOworICAgICAgICAgICYmIHNhdmVbLTJdID09IExfKCcwJykpCisgICAgICAgICplbmRwdHIgPSAoU1RSSU5HX1RZUEUgKikgJnNhdmVbLTFdOwogICAgICAgZWxzZQotCS8qICBUaGVyZSB3YXMgbm8gbnVtYmVyIHRvIGNvbnZlcnQuICAqLwotCSplbmRwdHIgPSAoU1RSSU5HX1RZUEUgKikgbnB0cjsKKyAgICAgICAgLyogIFRoZXJlIHdhcyBubyBudW1iZXIgdG8gY29udmVydC4gICovCisgICAgICAgICplbmRwdHIgPSAoU1RSSU5HX1RZUEUgKikgbnB0cjsKICAgICB9CiAKICAgcmV0dXJuIDBMOwpAQCAtNDQxLDcgKzQyNyw3IEBACiB3ZWFrX2Z1bmN0aW9uCiAjZW5kaWYKIHN0cnRvbCAoY29uc3QgU1RSSU5HX1RZUEUgKm5wdHIsIFNUUklOR19UWVBFICoqZW5kcHRyLAotCWludCBiYXNlIExPQ0FMRV9QQVJBTV9QUk9UTykKKyAgICAgICAgaW50IGJhc2UgTE9DQUxFX1BBUkFNX1BST1RPKQogewogICByZXR1cm4gSU5URVJOQUwgKHN0cnRvbCkgKG5wdHIsIGVuZHB0ciwgYmFzZSwgMCBMT0NBTEVfUEFSQU0pOwogfQpkaWZmIC0tZ2l0IGEvbGliL3N0cnRvdWwuYyBiL2xpYi9zdHJ0b3VsLmMKaW5kZXggNzljZWVkMi4uZTk5ZGE0MSAxMDA2NDQKLS0tIGEvbGliL3N0cnRvdWwuYworKysgYi9saWIvc3RydG91bC5jCkBAIC0xLDIwICsxLDE5IEBACi0vKiBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvKiBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgogCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKLSNkZWZpbmUJVU5TSUdORUQJMQorI2RlZmluZSBVTlNJR05FRCAgICAgICAgMQogCiAjaW5jbHVkZSAic3RydG9sLmMiCmRpZmYgLS1naXQgYS9saWIvc3RydmVyc2NtcC5jIGIvbGliL3N0cnZlcnNjbXAuYwppbmRleCA2Mjc2YmNhLi40OTA3NzNkIDEwMDY0NAotLS0gYS9saWIvc3RydmVyc2NtcC5jCisrKyBiL2xpYi9zdHJ2ZXJzY21wLmMKQEAgLTEsMTEgKzEsMTIgQEAKIC8qIENvbXBhcmUgc3RyaW5ncyB3aGlsZSB0cmVhdGluZyBkaWdpdHMgY2hhcmFjdGVycyBudW1lcmljYWxseS4KLSAgIENvcHlyaWdodCAoQykgMTk5NywgMjAwMCwgMjAwMiwgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMTk5NywgMjAwMCwgMjAwMiwgMjAwNCwgMjAwNiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4KICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgogICAgQ29udHJpYnV0ZWQgYnkgSmVhbi1GcmFuw6dvaXMgQmlnbm9sbGVzIDxiaWdub2xsZUBlY29sZWRvYy5pYnAuZnI+LCAxOTk3LgogCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKICAgIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKQEAgLTE0LDEwICsxNSw5IEBACiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCi0jaWZkZWYgSEFWRV9DT05GSUdfSAorI2lmICFfTElCQwogIyBpbmNsdWRlIDxjb25maWcuaD4KICNlbmRpZgogCkBAIC0zNywxMiArMzcsMTIgQEAKIAogCiAvKiBJU0RJR0lUIGRpZmZlcnMgZnJvbSBpc2RpZ2l0LCBhcyBmb2xsb3dzOgotICAgLSBJdHMgYXJnIG1heSBiZSBhbnkgaW50IG9yIHVuc2lnbmVkIGludDsgaXQgbmVlZCBub3QgYmUgYW4gdW5zaWduZWQgY2hhci4KLSAgIC0gSXQncyBndWFyYW50ZWVkIHRvIGV2YWx1YXRlIGl0cyBhcmd1bWVudCBleGFjdGx5IG9uY2UuCisgICAtIEl0cyBhcmcgbWF5IGJlIGFueSBpbnQgb3IgdW5zaWduZWQgaW50OyBpdCBuZWVkIG5vdCBiZSBhbiB1bnNpZ25lZCBjaGFyCisgICAgIG9yIEVPRi4KICAgIC0gSXQncyB0eXBpY2FsbHkgZmFzdGVyLgogICAgUE9TSVggc2F5cyB0aGF0IG9ubHkgJzAnIHRocm91Z2ggJzknIGFyZSBkaWdpdHMuICBQcmVmZXIgSVNESUdJVCB0bwotICAgSVNESUdJVF9MT0NBTEUgdW5sZXNzIGl0J3MgaW1wb3J0YW50IHRvIHVzZSB0aGUgbG9jYWxlJ3MgZGVmaW5pdGlvbgotICAgb2YgYGRpZ2l0JyBldmVuIHdoZW4gdGhlIGhvc3QgZG9lcyBub3QgY29uZm9ybSB0byBQT1NJWC4gICovCisgICBpc2RpZ2l0IHVubGVzcyBpdCdzIGltcG9ydGFudCB0byB1c2UgdGhlIGxvY2FsZSdzIGRlZmluaXRpb24KKyAgIG9mICJkaWdpdCIgZXZlbiB3aGVuIHRoZSBob3N0IGRvZXMgbm90IGNvbmZvcm0gdG8gUE9TSVguICAqLwogI2RlZmluZSBJU0RJR0lUKGMpICgodW5zaWduZWQgaW50KSAoYykgLSAnMCcgPD0gOSkKIAogI3VuZGVmIF9fc3RydmVyc2NtcApAQCAtMTE3LDggKzExNyw4IEBACiAKICAgICBjYXNlIExFTjoKICAgICAgIHdoaWxlIChJU0RJR0lUICgqcDErKykpCi0JaWYgKCFJU0RJR0lUICgqcDIrKykpCi0JICByZXR1cm4gMTsKKyAgICAgICAgaWYgKCFJU0RJR0lUICgqcDIrKykpCisgICAgICAgICAgcmV0dXJuIDE7CiAKICAgICAgIHJldHVybiBJU0RJR0lUICgqcDIpID8gLTEgOiBkaWZmOwogCmRpZmYgLS1naXQgYS9saWIvc3RydmVyc2NtcC5oIGIvbGliL3N0cnZlcnNjbXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VkZWFjNS4uMDAwMDAwMAotLS0gYS9saWIvc3RydmVyc2NtcC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyogQ29tcGFyZSBzdHJpbmdzIHdoaWxlIHRyZWF0aW5nIGRpZ2l0cyBjaGFyYWN0ZXJzIG51bWVyaWNhbGx5LgotCi0gICBDb3B5cmlnaHQgKEMpIDE5OTcsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwotCi0jaWZuZGVmIFNUUlZFUlNDTVBfSF8KLSMgZGVmaW5lIFNUUlZFUlNDTVBfSF8KLQotaW50IHN0cnZlcnNjbXAgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKLQotI2VuZGlmIC8qIG5vdCBTVFJWRVJTQ01QX0hfICovCmRpZmYgLS1naXQgYS9saWIvc3VicGlwZS5jIGIvbGliL3N1YnBpcGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ2YWE4ZS4uMDAwMDAwMAotLS0gYS9saWIvc3VicGlwZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLS8qIFN1YnByb2Nlc3NlcyB3aXRoIHBpcGVzLgotCi0gICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwotCi0vKiBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0IDxlZ2dlcnRAdHdpbnN1bi5jb20+Ci0gICBhbmQgRmxvcmlhbiBLcm9obSA8ZmxvcmlhbkBlZGFtYWlsLmZpc2hraWxsLmlibS5jb20+LiAgKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgInN1YnBpcGUuaCIKLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNpZiAhIGRlZmluZWQgU0lHQ0hMRCAmJiBkZWZpbmVkIFNJR0NMRAotIyBkZWZpbmUgU0lHQ0hMRCBTSUdDTEQKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNpZiBIQVZFX1VOSVNURF9ICi0jIGluY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0jaWZuZGVmIFNURElOX0ZJTEVOTwotIyBkZWZpbmUgU1RESU5fRklMRU5PIDAKLSNlbmRpZgotI2lmbmRlZiBTVERPVVRfRklMRU5PCi0jIGRlZmluZSBTVERPVVRfRklMRU5PIDEKLSNlbmRpZgotI2lmICEgSEFWRV9EVVAyICYmICEgZGVmaW5lZCBkdXAyCi0jIGluY2x1ZGUgPGZjbnRsLmg+Ci0jIGRlZmluZSBkdXAyKGYsIHQpIChjbG9zZSAodCksIGZjbnRsIChmLCBGX0RVUEZELCB0KSkKLSNlbmRpZgotCi0jaWYgSEFWRV9TWVNfV0FJVF9ICi0jIGluY2x1ZGUgPHN5cy93YWl0Lmg+Ci0jZW5kaWYKLSNpZm5kZWYgV0VYSVRTVEFUVVMKLSMgZGVmaW5lIFdFWElUU1RBVFVTKHN0YXRfdmFsKSAoKHVuc2lnbmVkIGludCkgKHN0YXRfdmFsKSA+PiA4KQotI2VuZGlmCi0jaWZuZGVmIFdJRkVYSVRFRAotIyBkZWZpbmUgV0lGRVhJVEVEKHN0YXRfdmFsKSAoKChzdGF0X3ZhbCkgJiAyNTUpID09IDApCi0jZW5kaWYKLQotI2lmIEhBVkVfVkZPUktfSAotIyBpbmNsdWRlIDx2Zm9yay5oPgotI2VuZGlmCi0jaWYgISBIQVZFX1dPUktJTkdfVkZPUksKLSMgZGVmaW5lIHZmb3JrIGZvcmsKLSNlbmRpZgotCi0jaW5jbHVkZSAiZXJyb3IuaCIKLSNpbmNsdWRlICJ1bmlzdGQtc2FmZXIuaCIKLQotI2luY2x1ZGUgImdldHRleHQuaCIKLSNkZWZpbmUgXyhNc2dpZCkgIGdldHRleHQgKE1zZ2lkKQotCi0jaWZuZGVmIF9fYXR0cmlidXRlX18KLS8qIFRoaXMgZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDIuNSBhbmQgbGF0ZXIuICAqLwotIyBpZiAhIGRlZmluZWQgX19HTlVDX18gfHwgX19HTlVDX18gPCAyIHx8IFwKLShfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fIDwgNSkgfHwgX19TVFJJQ1RfQU5TSV9fCi0jICBkZWZpbmUgX19hdHRyaWJ1dGVfXyhTcGVjKSAvKiBlbXB0eSAqLwotIyBlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgQVRUUklCVVRFX1VOVVNFRAotIyBkZWZpbmUgQVRUUklCVVRFX1VOVVNFRCBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCi0jZW5kaWYKLQotCi0vKiBJbml0aWFsaXplIHRoaXMgbW9kdWxlLiAgKi8KLQotdm9pZAotaW5pdF9zdWJwaXBlICh2b2lkKQotewotI2lmZGVmIFNJR0NITEQKLSAgLyogU3lzdGVtIFYgZm9yayt3YWl0IGRvZXMgbm90IHdvcmsgaWYgU0lHQ0hMRCBpcyBpZ25vcmVkLiAgKi8KLSAgc2lnbmFsIChTSUdDSExELCBTSUdfREZMKTsKLSNlbmRpZgotfQotCi0KLS8qIENyZWF0ZSBhIHN1YnByb2Nlc3MgdGhhdCBpcyBydW4gYXMgYSBmaWx0ZXIuICBBUkdWIGlzIHRoZQotICAgTlVMTC10ZXJtaW5hdGVkIGFyZ3VtZW50IHZlY3RvciBmb3IgdGhlIHN1YnByb2Nlc3MuICBTdG9yZSByZWFkIGFuZAotICAgd3JpdGUgZmlsZSBkZXNjcmlwdG9ycyBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBzdWJwcm9jZXNzIGludG8KLSAgIEZEWzBdIGFuZCBGRFsxXTogaW5wdXQgbWVhbnQgZm9yIHRoZSBwcm9jZXNzIGNhbiBiZSB3cml0dGVuIGludG8KLSAgIEZEWzBdLCBhbmQgb3V0cHV0IGZyb20gdGhlIHByb2Nlc3MgY2FuIGJlIHJlYWQgZnJvbSBGRFsxXS4gIFJldHVybgotICAgdGhlIHN1YnByb2Nlc3MgaWQuCi0KLSAgIFRvIGF2b2lkIGRlYWRsb2NrLCB0aGUgaW52b2tlciBtdXN0IG5vdCBsZXQgaW5jb21pbmcgZGF0YSBwaWxlIHVwCi0gICBpbiBGRFsxXSB3aGlsZSB3cml0aW5nIGRhdGEgdG8gRkRbMF0uICAqLwotCi1waWRfdAotY3JlYXRlX3N1YnBpcGUgKGNoYXIgY29uc3QgKiBjb25zdCAqYXJndiwgaW50IGZkWzJdKQotewotICBpbnQgcGlwZV9mZFsyXTsKLSAgaW50IGNoaWxkX2ZkWzJdOwotICBwaWRfdCBwaWQ7Ci0KLSAgaWYgKHBpcGUgKGNoaWxkX2ZkKSAhPSAwCi0gICAgICB8fCAoY2hpbGRfZmRbMF0gPSBmZF9zYWZlciAoY2hpbGRfZmRbMF0pKSA8IDAKLSAgICAgIHx8IChmZFswXSA9IGZkX3NhZmVyIChjaGlsZF9mZFsxXSkpIDwgMAotICAgICAgfHwgcGlwZSAocGlwZV9mZCkgIT0gMAotICAgICAgfHwgKGZkWzFdID0gZmRfc2FmZXIgKHBpcGVfZmRbMF0pKSA8IDAKLSAgICAgIHx8IChjaGlsZF9mZFsxXSA9IGZkX3NhZmVyIChwaXBlX2ZkWzFdKSkgPCAwKQotICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIGVycm5vLAotCSAgICJwaXBlIik7Ci0KLSAgcGlkID0gdmZvcmsgKCk7Ci0gIGlmIChwaWQgPCAwKQotICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIGVycm5vLAotCSAgICJmb3JrIik7Ci0KLSAgaWYgKCEgcGlkKQotICAgIHsKLSAgICAgIC8qIENoaWxkLiAgKi8KLSAgICAgIGNsb3NlIChmZFswXSk7Ci0gICAgICBjbG9zZSAoZmRbMV0pOwotICAgICAgZHVwMiAoY2hpbGRfZmRbMF0sIFNURElOX0ZJTEVOTyk7Ci0gICAgICBjbG9zZSAoY2hpbGRfZmRbMF0pOwotICAgICAgZHVwMiAoY2hpbGRfZmRbMV0sIFNURE9VVF9GSUxFTk8pOwotICAgICAgY2xvc2UgKGNoaWxkX2ZkWzFdKTsKLQotICAgICAgLyogVGhlIGNhc3QgdG8gKGNoYXIgKiopIHJhdGhlciB0aGFuIChjaGFyICogY29uc3QgKikgaXMgbmVlZGVkCi0JIGZvciBwb3J0YWJpbGl0eSB0byBvbGRlciBob3N0cyB3aXRoIGEgbm9uc3RhbmRhcmQgcHJvdG90eXBlCi0JIGZvciBleGVjdnAuICAqLwotICAgICAgZXhlY3ZwIChhcmd2WzBdLCAoY2hhciAqKikgYXJndik7Ci0KLSAgICAgIF9leGl0IChlcnJubyA9PSBFTk9FTlQgPyAxMjcgOiAxMjYpOwotICAgIH0KLQotICAvKiBQYXJlbnQuICAqLwotICBjbG9zZSAoY2hpbGRfZmRbMF0pOwotICBjbG9zZSAoY2hpbGRfZmRbMV0pOwotICByZXR1cm4gcGlkOwotfQotCi0KLS8qIFdhaXQgZm9yIHRoZSBzdWJwcm9jZXNzIHRvIGV4aXQuICAqLwotCi12b2lkCi1yZWFwX3N1YnBpcGUgKHBpZF90IHBpZCwgY2hhciBjb25zdCAqcHJvZ3JhbSkKLXsKLSNpZiBIQVZFX1dBSVRQSUQgfHwgZGVmaW5lZCB3YWl0cGlkCi0gIGludCB3c3RhdHVzOwotICBpZiAod2FpdHBpZCAocGlkLCAmd3N0YXR1cywgMCkgPCAwKQotICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIGVycm5vLAotCSAgICJ3YWl0cGlkIik7Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBpbnQgc3RhdHVzID0gV0lGRVhJVEVEICh3c3RhdHVzKSA/IFdFWElUU1RBVFVTICh3c3RhdHVzKSA6IC0xOwotICAgICAgaWYgKHN0YXR1cykKLQllcnJvciAoRVhJVF9GQUlMVVJFLCAwLAotCSAgICAgICBfKHN0YXR1cyA9PSAxMjYKLQkJID8gInN1YnNpZGlhcnkgcHJvZ3JhbSBgJXMnIGNvdWxkIG5vdCBiZSBpbnZva2VkIgotCQkgOiBzdGF0dXMgPT0gMTI3Ci0JCSA/ICJzdWJzaWRpYXJ5IHByb2dyYW0gYCVzJyBub3QgZm91bmQiCi0JCSA6IHN0YXR1cyA8IDAKLQkJID8gInN1YnNpZGlhcnkgcHJvZ3JhbSBgJXMnIGZhaWxlZCIKLQkJIDogInN1YnNpZGlhcnkgcHJvZ3JhbSBgJXMnIGZhaWxlZCAoZXhpdCBzdGF0dXMgJWQpIiksCi0JICAgICAgIHByb2dyYW0sIHN0YXR1cyk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQKLWVuZF9vZl9vdXRwdXRfc3VicGlwZSAocGlkX3QgcGlkIEFUVFJJQlVURV9VTlVTRUQsCi0JCSAgICAgICBpbnQgZmRbMl0gQVRUUklCVVRFX1VOVVNFRCkKLXsKLX0KZGlmZiAtLWdpdCBhL2xpYi9zdWJwaXBlLmggYi9saWIvc3VicGlwZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDgzZDMyLi4wMDAwMDAwCi0tLSBhL2xpYi9zdWJwaXBlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKiBTdWJwcm9jZXNzZXMgd2l0aCBwaXBlcy4KLSAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCi0KLS8qIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQgPGVnZ2VydEB0d2luc3VuLmNvbT4KLSAgIGFuZCBGbG9yaWFuIEtyb2htIDxmbG9yaWFuQGVkYW1haWwuZmlzaGtpbGwuaWJtLmNvbT4uICAqLwotCi0jaWYgSEFWRV9TWVNfVFlQRVNfSAotIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotCi12b2lkIGluaXRfc3VicGlwZSAodm9pZCk7Ci1waWRfdCBjcmVhdGVfc3VicGlwZSAoY2hhciBjb25zdCAqIGNvbnN0ICosIGludFsyXSk7Ci12b2lkIGVuZF9vZl9vdXRwdXRfc3VicGlwZSAocGlkX3QsIGludFsyXSk7Ci12b2lkIHJlYXBfc3VicGlwZSAocGlkX3QsIGNoYXIgY29uc3QgKik7CmRpZmYgLS1naXQgYS9saWIvc3lzX3N0YXQuaW4uaCBiL2xpYi9zeXNfc3RhdC5pbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMDVkZGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc3lzX3N0YXQuaW4uaApAQCAtMCwwICsxLDcyOCBAQAorLyogUHJvdmlkZSBhIG1vcmUgY29tcGxldGUgc3lzL3N0YXQgaGVhZGVyIGZpbGUuCisgICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBXcml0dGVuIGJ5IEVyaWMgQmxha2UsIFBhdWwgRWdnZXJ0LCBhbmQgSmltIE1leWVyaW5nLiAgKi8KKworLyogVGhpcyBmaWxlIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgb24gcGxhdGZvcm1zIHdoZXJlIDxzeXMvc3RhdC5oPiBpcworICAgaW5jb21wbGV0ZS4gIEl0IGlzIGludGVuZGVkIHRvIHByb3ZpZGUgZGVmaW5pdGlvbnMgYW5kIHByb3RvdHlwZXMKKyAgIG5lZWRlZCBieSBhbiBhcHBsaWNhdGlvbi4gIFN0YXJ0IHdpdGggd2hhdCB0aGUgc3lzdGVtIHByb3ZpZGVzLiAgKi8KKworI2lmIF9fR05VQ19fID49IDMKK0BQUkFHTUFfU1lTVEVNX0hFQURFUkAKKyNlbmRpZgorQFBSQUdNQV9DT0xVTU5TQAorCisjaWYgZGVmaW5lZCBfX25lZWRfc3lzdGVtX3N5c19zdGF0X2gKKy8qIFNwZWNpYWwgaW52b2NhdGlvbiBjb252ZW50aW9uLiAgKi8KKworI0BJTkNMVURFX05FWFRAIEBORVhUX1NZU19TVEFUX0hACisKKyNlbHNlCisvKiBOb3JtYWwgaW52b2NhdGlvbiBjb252ZW50aW9uLiAgKi8KKworI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1lTX1NUQVRfSAorCisvKiBHZXQgbmxpbmtfdC4KKyAgIE1heSBhbHNvIGRlZmluZSBvZmZfdCB0byBhIDY0LWJpdCB0eXBlIG9uIG5hdGl2ZSBXaW5kb3dzLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworLyogR2V0IHN0cnVjdCB0aW1lc3BlYy4gICovCisjaW5jbHVkZSA8dGltZS5oPgorCisvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisjQElOQ0xVREVfTkVYVEAgQE5FWFRfU1lTX1NUQVRfSEAKKworI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1lTX1NUQVRfSAorI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfU1lTX1NUQVRfSAorCisvKiBUaGUgZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTCBldGMuIGFyZSBjb3BpZWQgaGVyZS4gICovCisKKy8qIFRoZSBkZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVMTCBpcyBjb3BpZWQgaGVyZS4gICovCisKKy8qIFRoZSBkZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRSBpcyBjb3BpZWQgaGVyZS4gICovCisKKy8qIEJlZm9yZSBkb2luZyAiI2RlZmluZSBta2RpciBycGxfbWtkaXIiIGJlbG93LCB3ZSBuZWVkIHRvIGluY2x1ZGUgYWxsCisgICBoZWFkZXJzIHRoYXQgbWF5IGRlY2xhcmUgbWtkaXIoKS4gIE5hdGl2ZSBXaW5kb3dzIHBsYXRmb3JtcyBkZWNsYXJlIG1rZGlyCisgICBpbiA8aW8uaD4gYW5kL29yIDxkaXJlY3QuaD4sIG5vdCBpbiA8dW5pc3RkLmg+LiAgKi8KKyNpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCisjIGluY2x1ZGUgPGlvLmg+ICAgICAvKiBtaW5ndzMyLCBtaW5ndzY0ICovCisjIGluY2x1ZGUgPGRpcmVjdC5oPiAvKiBtaW5ndzY0LCBNU1ZDIDkgKi8KKyNlbmRpZgorCisvKiBOYXRpdmUgV2luZG93cyBwbGF0Zm9ybXMgZGVjbGFyZSB1bWFzaygpIGluIDxpby5oPi4gICovCisjaWYgMCAmJiAoKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXykKKyMgaW5jbHVkZSA8aW8uaD4KKyNlbmRpZgorCisvKiBMYXJnZSBGaWxlIFN1cHBvcnQgb24gbmF0aXZlIFdpbmRvd3MuICAqLworI2lmIEBXSU5ET1dTXzY0X0JJVF9TVF9TSVpFQAorIyBkZWZpbmUgc3RhdCBfc3RhdGk2NAorI2VuZGlmCisKKyNpZm5kZWYgU19JRklGTworIyBpZmRlZiBfU19JRklGTworIyAgZGVmaW5lIFNfSUZJRk8gX1NfSUZJRk8KKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFNfSUZNVAorIyBkZWZpbmUgU19JRk1UIDAxNzAwMDAKKyNlbmRpZgorCisjaWYgU1RBVF9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFNfSVNCTEsKKyMgdW5kZWYgU19JU0NIUgorIyB1bmRlZiBTX0lTRElSCisjIHVuZGVmIFNfSVNGSUZPCisjIHVuZGVmIFNfSVNMTksKKyMgdW5kZWYgU19JU05BTQorIyB1bmRlZiBTX0lTTVBCCisjIHVuZGVmIFNfSVNNUEMKKyMgdW5kZWYgU19JU05XSworIyB1bmRlZiBTX0lTUkVHCisjIHVuZGVmIFNfSVNTT0NLCisjZW5kaWYKKworI2lmbmRlZiBTX0lTQkxLCisjIGlmZGVmIFNfSUZCTEsKKyMgIGRlZmluZSBTX0lTQkxLKG0pICgoKG0pICYgU19JRk1UKSA9PSBTX0lGQkxLKQorIyBlbHNlCisjICBkZWZpbmUgU19JU0JMSyhtKSAwCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBTX0lTQ0hSCisjIGlmZGVmIFNfSUZDSFIKKyMgIGRlZmluZSBTX0lTQ0hSKG0pICgoKG0pICYgU19JRk1UKSA9PSBTX0lGQ0hSKQorIyBlbHNlCisjICBkZWZpbmUgU19JU0NIUihtKSAwCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBTX0lTRElSCisjIGlmZGVmIFNfSUZESVIKKyMgIGRlZmluZSBTX0lTRElSKG0pICgoKG0pICYgU19JRk1UKSA9PSBTX0lGRElSKQorIyBlbHNlCisjICBkZWZpbmUgU19JU0RJUihtKSAwCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBTX0lTRE9PUiAvKiBTb2xhcmlzIDIuNSBhbmQgdXAgKi8KKyMgZGVmaW5lIFNfSVNET09SKG0pIDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNGSUZPCisjIGlmZGVmIFNfSUZJRk8KKyMgIGRlZmluZSBTX0lTRklGTyhtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRklGTykKKyMgZWxzZQorIyAgZGVmaW5lIFNfSVNGSUZPKG0pIDAKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNMTksKKyMgaWZkZWYgU19JRkxOSworIyAgZGVmaW5lIFNfSVNMTksobSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZMTkspCisjIGVsc2UKKyMgIGRlZmluZSBTX0lTTE5LKG0pIDAKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNNUEIgLyogVjcgKi8KKyMgaWZkZWYgU19JRk1QQgorIyAgZGVmaW5lIFNfSVNNUEIobSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZNUEIpCisjICBkZWZpbmUgU19JU01QQyhtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRk1QQykKKyMgZWxzZQorIyAgZGVmaW5lIFNfSVNNUEIobSkgMAorIyAgZGVmaW5lIFNfSVNNUEMobSkgMAorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgU19JU05BTSAvKiBYZW5peCAqLworIyBpZmRlZiBTX0lGTkFNCisjICBkZWZpbmUgU19JU05BTShtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRk5BTSkKKyMgZWxzZQorIyAgZGVmaW5lIFNfSVNOQU0obSkgMAorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgU19JU05XSyAvKiBIUC9VWCAqLworIyBpZmRlZiBTX0lGTldLCisjICBkZWZpbmUgU19JU05XSyhtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRk5XSykKKyMgZWxzZQorIyAgZGVmaW5lIFNfSVNOV0sobSkgMAorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgU19JU1BPUlQgLyogU29sYXJpcyAxMCBhbmQgdXAgKi8KKyMgZGVmaW5lIFNfSVNQT1JUKG0pIDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNSRUcKKyMgaWZkZWYgU19JRlJFRworIyAgZGVmaW5lIFNfSVNSRUcobSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZSRUcpCisjIGVsc2UKKyMgIGRlZmluZSBTX0lTUkVHKG0pIDAKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNTT0NLCisjIGlmZGVmIFNfSUZTT0NLCisjICBkZWZpbmUgU19JU1NPQ0sobSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZTT0NLKQorIyBlbHNlCisjICBkZWZpbmUgU19JU1NPQ0sobSkgMAorIyBlbmRpZgorI2VuZGlmCisKKworI2lmbmRlZiBTX1RZUEVJU01RCisjIGRlZmluZSBTX1RZUEVJU01RKHApIDAKKyNlbmRpZgorCisjaWZuZGVmIFNfVFlQRUlTVE1PCisjIGRlZmluZSBTX1RZUEVJU1RNTyhwKSAwCisjZW5kaWYKKworCisjaWZuZGVmIFNfVFlQRUlTU0VNCisjIGlmZGVmIFNfSU5TRU0KKyMgIGRlZmluZSBTX1RZUEVJU1NFTShwKSAoU19JU05BTSAoKHApLT5zdF9tb2RlKSAmJiAocCktPnN0X3JkZXYgPT0gU19JTlNFTSkKKyMgZWxzZQorIyAgZGVmaW5lIFNfVFlQRUlTU0VNKHApIDAKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFNfVFlQRUlTU0hNCisjIGlmZGVmIFNfSU5TSEQKKyMgIGRlZmluZSBTX1RZUEVJU1NITShwKSAoU19JU05BTSAoKHApLT5zdF9tb2RlKSAmJiAocCktPnN0X3JkZXYgPT0gU19JTlNIRCkKKyMgZWxzZQorIyAgZGVmaW5lIFNfVFlQRUlTU0hNKHApIDAKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBoaWdoIHBlcmZvcm1hbmNlICgiY29udGlndW91cyBkYXRhIikgKi8KKyNpZm5kZWYgU19JU0NURworIyBkZWZpbmUgU19JU0NURyhwKSAwCisjZW5kaWYKKworLyogQ3JheSBETUYgKGRhdGEgbWlncmF0aW9uIGZhY2lsaXR5KTogb2ZmIGxpbmUsIHdpdGggZGF0YSAgKi8KKyNpZm5kZWYgU19JU09GRAorIyBkZWZpbmUgU19JU09GRChwKSAwCisjZW5kaWYKKworLyogQ3JheSBETUYgKGRhdGEgbWlncmF0aW9uIGZhY2lsaXR5KTogb2ZmIGxpbmUsIHdpdGggbm8gZGF0YSAgKi8KKyNpZm5kZWYgU19JU09GTAorIyBkZWZpbmUgU19JU09GTChwKSAwCisjZW5kaWYKKworLyogNC40QlNEIHdoaXRlb3V0ICovCisjaWZuZGVmIFNfSVNXSFQKKyMgZGVmaW5lIFNfSVNXSFQobSkgMAorI2VuZGlmCisKKy8qIElmIGFueSBvZiB0aGUgZm9sbG93aW5nIGFyZSB1bmRlZmluZWQsCisgICBkZWZpbmUgdGhlbSB0byB0aGVpciBkZSBmYWN0byBzdGFuZGFyZCB2YWx1ZXMuICAqLworI2lmICFTX0lTVUlECisjIGRlZmluZSBTX0lTVUlEIDA0MDAwCisjZW5kaWYKKyNpZiAhU19JU0dJRAorIyBkZWZpbmUgU19JU0dJRCAwMjAwMAorI2VuZGlmCisKKy8qIFNfSVNWVFggaXMgYSBjb21tb24gZXh0ZW5zaW9uIHRvIFBPU0lYLiAgKi8KKyNpZm5kZWYgU19JU1ZUWAorIyBkZWZpbmUgU19JU1ZUWCAwMTAwMAorI2VuZGlmCisKKyNpZiAhU19JUlVTUiAmJiBTX0lSRUFECisjIGRlZmluZSBTX0lSVVNSIFNfSVJFQUQKKyNlbmRpZgorI2lmICFTX0lSVVNSCisjIGRlZmluZSBTX0lSVVNSIDAwNDAwCisjZW5kaWYKKyNpZiAhU19JUkdSUAorIyBkZWZpbmUgU19JUkdSUCAoU19JUlVTUiA+PiAzKQorI2VuZGlmCisjaWYgIVNfSVJPVEgKKyMgZGVmaW5lIFNfSVJPVEggKFNfSVJVU1IgPj4gNikKKyNlbmRpZgorCisjaWYgIVNfSVdVU1IgJiYgU19JV1JJVEUKKyMgZGVmaW5lIFNfSVdVU1IgU19JV1JJVEUKKyNlbmRpZgorI2lmICFTX0lXVVNSCisjIGRlZmluZSBTX0lXVVNSIDAwMjAwCisjZW5kaWYKKyNpZiAhU19JV0dSUAorIyBkZWZpbmUgU19JV0dSUCAoU19JV1VTUiA+PiAzKQorI2VuZGlmCisjaWYgIVNfSVdPVEgKKyMgZGVmaW5lIFNfSVdPVEggKFNfSVdVU1IgPj4gNikKKyNlbmRpZgorCisjaWYgIVNfSVhVU1IgJiYgU19JRVhFQworIyBkZWZpbmUgU19JWFVTUiBTX0lFWEVDCisjZW5kaWYKKyNpZiAhU19JWFVTUgorIyBkZWZpbmUgU19JWFVTUiAwMDEwMAorI2VuZGlmCisjaWYgIVNfSVhHUlAKKyMgZGVmaW5lIFNfSVhHUlAgKFNfSVhVU1IgPj4gMykKKyNlbmRpZgorI2lmICFTX0lYT1RICisjIGRlZmluZSBTX0lYT1RIIChTX0lYVVNSID4+IDYpCisjZW5kaWYKKworI2lmICFTX0lSV1hVCisjIGRlZmluZSBTX0lSV1hVIChTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVhVU1IpCisjZW5kaWYKKyNpZiAhU19JUldYRworIyBkZWZpbmUgU19JUldYRyAoU19JUkdSUCB8IFNfSVdHUlAgfCBTX0lYR1JQKQorI2VuZGlmCisjaWYgIVNfSVJXWE8KKyMgZGVmaW5lIFNfSVJXWE8gKFNfSVJPVEggfCBTX0lXT1RIIHwgU19JWE9USCkKKyNlbmRpZgorCisvKiBTX0lYVUdPIGlzIGEgY29tbW9uIGV4dGVuc2lvbiB0byBQT1NJWC4gICovCisjaWYgIVNfSVhVR08KKyMgZGVmaW5lIFNfSVhVR08gKFNfSVhVU1IgfCBTX0lYR1JQIHwgU19JWE9USCkKKyNlbmRpZgorCisjaWZuZGVmIFNfSVJXWFVHTworIyBkZWZpbmUgU19JUldYVUdPIChTX0lSV1hVIHwgU19JUldYRyB8IFNfSVJXWE8pCisjZW5kaWYKKworLyogTWFjcm9zIGZvciBmdXRpbWVucyBhbmQgdXRpbWVuc2F0LiAgKi8KKyNpZm5kZWYgVVRJTUVfTk9XCisjIGRlZmluZSBVVElNRV9OT1cgKC0xKQorIyBkZWZpbmUgVVRJTUVfT01JVCAoLTIpCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9GQ0hNT0RBVEAKKyMgaWYgIUBIQVZFX0ZDSE1PREFUQAorX0dMX0ZVTkNERUNMX1NZUyAoZmNobW9kYXQsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGUsIG1vZGVfdCBtb2RlLCBpbnQgZmxhZykKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmY2htb2RhdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgbW9kZV90IG1vZGUsIGludCBmbGFnKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChmY2htb2RhdCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZjaG1vZGF0CisjIGlmIEhBVkVfUkFXX0RFQ0xfRkNITU9EQVQKK19HTF9XQVJOX09OX1VTRSAoZmNobW9kYXQsICJmY2htb2RhdCBpcyBub3QgcG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBvcGVuYXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9GU1RBVEAKKyMgaWYgQFJFUExBQ0VfRlNUQVRACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZzdGF0CisjICAgZGVmaW5lIGZzdGF0IHJwbF9mc3RhdAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZzdGF0LCBpbnQsIChpbnQgZmQsIHN0cnVjdCBzdGF0ICpidWYpIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmc3RhdCwgaW50LCAoaW50IGZkLCBzdHJ1Y3Qgc3RhdCAqYnVmKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZzdGF0LCBpbnQsIChpbnQgZmQsIHN0cnVjdCBzdGF0ICpidWYpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZzdGF0KTsKKyNlbGlmIEBXSU5ET1dTXzY0X0JJVF9TVF9TSVpFQAorLyogQWJvdmUsIHdlIGRlZmluZSBzdGF0IHRvIF9zdGF0aTY0LiAgKi8KKyMgZGVmaW5lIGZzdGF0IF9mc3RhdGk2NAorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmc3RhdAorIyBpZiBIQVZFX1JBV19ERUNMX0ZTVEFUCitfR0xfV0FSTl9PTl9VU0UgKGZzdGF0LCAiZnN0YXQgaGFzIHBvcnRhYmlsaXR5IHByb2JsZW1zIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZnN0YXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9GU1RBVEFUQAorIyBpZiBAUkVQTEFDRV9GU1RBVEFUQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmc3RhdGF0CisjICAgZGVmaW5lIGZzdGF0YXQgcnBsX2ZzdGF0YXQKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmc3RhdGF0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCBjaGFyIGNvbnN0ICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QsIGludCBmbGFncykKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIsIDMpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmc3RhdGF0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCBjaGFyIGNvbnN0ICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QsIGludCBmbGFncykpOworIyBlbHNlCisjICBpZiAhQEhBVkVfRlNUQVRBVEAKK19HTF9GVU5DREVDTF9TWVMgKGZzdGF0YXQsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQsIGNoYXIgY29uc3QgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCwgaW50IGZsYWdzKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMiwgMykpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmc3RhdGF0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCBjaGFyIGNvbnN0ICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QsIGludCBmbGFncykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZnN0YXRhdCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZzdGF0YXQKKyMgaWYgSEFWRV9SQVdfREVDTF9GU1RBVEFUCitfR0xfV0FSTl9PTl9VU0UgKGZzdGF0YXQsICJmc3RhdGF0IGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG9wZW5hdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX0ZVVElNRU5TQAorLyogVXNlIHRoZSBycGxfIHByZWZpeCBhbHNvIG9uIFNvbGFyaXMgPD0gOSwgYmVjYXVzZSBvbiBTb2xhcmlzIDkgb3VyIGZ1dGltZW5zCisgICBpbXBsZW1lbnRhdGlvbiByZWxpZXMgb24gZnV0aW1lc2F0LCB3aGljaCBvbiBTb2xhcmlzIDEwIG1ha2VzIGFuIGludm9jYXRpb24KKyAgIHRvIGZ1dGltZW5zIHRoYXQgaXMgbWVhbnQgdG8gaW52b2tlIHRoZSBsaWJjJ3MgZnV0aW1lbnMoKSwgbm90IGdudWxpYidzCisgICBmdXRpbWVucygpLiAgKi8KKyMgaWYgQFJFUExBQ0VfRlVUSU1FTlNAIHx8ICghQEhBVkVfRlVUSU1FTlNAICYmIGRlZmluZWQgX19zdW4pCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZ1dGltZW5zCisjICAgZGVmaW5lIGZ1dGltZW5zIHJwbF9mdXRpbWVucworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZ1dGltZW5zLCBpbnQsIChpbnQgZmQsIHN0cnVjdCB0aW1lc3BlYyBjb25zdCB0aW1lc1syXSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZnV0aW1lbnMsIGludCwgKGludCBmZCwgc3RydWN0IHRpbWVzcGVjIGNvbnN0IHRpbWVzWzJdKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9GVVRJTUVOU0AKK19HTF9GVU5DREVDTF9TWVMgKGZ1dGltZW5zLCBpbnQsIChpbnQgZmQsIHN0cnVjdCB0aW1lc3BlYyBjb25zdCB0aW1lc1syXSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZ1dGltZW5zLCBpbnQsIChpbnQgZmQsIHN0cnVjdCB0aW1lc3BlYyBjb25zdCB0aW1lc1syXSkpOworIyBlbmRpZgorIyBpZiBASEFWRV9GVVRJTUVOU0AKK19HTF9DWFhBTElBU1dBUk4gKGZ1dGltZW5zKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZnV0aW1lbnMKKyMgaWYgSEFWRV9SQVdfREVDTF9GVVRJTUVOUworX0dMX1dBUk5fT05fVVNFIChmdXRpbWVucywgImZ1dGltZW5zIGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZ1dGltZW5zIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfTENITU9EQAorLyogQ2hhbmdlIHRoZSBtb2RlIG9mIEZJTEVOQU1FIHRvIE1PREUsIHdpdGhvdXQgZGVyZWZlcmVuY2luZyBpdCBpZiBGSUxFTkFNRQorICAgZGVub3RlcyBhIHN5bWJvbGljIGxpbmsuICAqLworIyBpZiAhQEhBVkVfTENITU9EQAorLyogVGhlIGxjaG1vZCByZXBsYWNlbWVudCBmb2xsb3dzIHN5bWJvbGljIGxpbmtzLiAgQ2FsbGVycyBzaG91bGQgdGFrZQorICAgdGhpcyBpbnRvIGFjY291bnQ7IGxjaG1vZCBzaG91bGQgYmUgYXBwbGllZCBvbmx5IHRvIGFyZ3VtZW50cyB0aGF0CisgICBhcmUga25vd24gdG8gbm90IGJlIHN5bWJvbGljIGxpbmtzLiAgT24gaG9zdHMgdGhhdCBsYWNrIGxjaG1vZCwKKyAgIHRoaXMgY2FuIGxlYWQgdG8gcmFjZSBjb25kaXRpb25zIGJldHdlZW4gdGhlIGNoZWNrIGFuZCB0aGUKKyAgIGludm9jYXRpb24gb2YgbGNobW9kLCBidXQgd2Uga25vdyBvZiBubyB3b3JrYXJvdW5kcyB0aGF0IGFyZQorICAgcmVsaWFibGUgaW4gZ2VuZXJhbC4gIFlvdSBtaWdodCB0cnkgcmVxdWVzdGluZyBzdXBwb3J0IGZvciBsY2htb2QKKyAgIGZyb20geW91ciBvcGVyYXRpbmcgc3lzdGVtIHN1cHBsaWVyLiAgKi8KKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGxjaG1vZCBjaG1vZAorIyAgZW5kaWYKKy8qIE5lZWQgdG8gY2FzdCwgYmVjYXVzZSBvbiBtaW5ndywgdGhlIHNlY29uZCBwYXJhbWV0ZXIgb2YgY2htb2QgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLiAgKi8KK19HTF9DWFhBTElBU19SUExfQ0FTVF8xIChsY2htb2QsIGNobW9kLCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBtb2RlX3QgbW9kZSkpOworIyBlbHNlCisjICBpZiAwIC8qIGFzc3VtZSBhbHJlYWR5IGRlY2xhcmVkICovCitfR0xfRlVOQ0RFQ0xfU1lTIChsY2htb2QsIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBtb2RlX3QgbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGxjaG1vZCwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIG1vZGVfdCBtb2RlKSk7CisjIGVuZGlmCisjIGlmIEBIQVZFX0xDSE1PREAKK19HTF9DWFhBTElBU1dBUk4gKGxjaG1vZCk7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGxjaG1vZAorIyBpZiBIQVZFX1JBV19ERUNMX0xDSE1PRAorX0dMX1dBUk5fT05fVVNFIChsY2htb2QsICJsY2htb2QgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGxjaG1vZCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX0xTVEFUQAorIyBpZiAhIEBIQVZFX0xTVEFUQAorLyogbWluZ3cgZG9lcyBub3Qgc3VwcG9ydCBzeW1saW5rcywgdGhlcmVmb3JlIGl0IGRvZXMgbm90IGhhdmUgbHN0YXQuICBCdXQKKyAgIHdpdGhvdXQgbGlua3MsIHN0YXQgZG9lcyBqdXN0IGZpbmUuICAqLworIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgbHN0YXQgc3RhdAorIyAgZW5kaWYKK19HTF9DWFhBTElBU19SUExfMSAobHN0YXQsIHN0YXQsIGludCwgKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpidWYpKTsKKyMgZWxpZiBAUkVQTEFDRV9MU1RBVEAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbHN0YXQKKyMgICBkZWZpbmUgbHN0YXQgcnBsX2xzdGF0CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobHN0YXQsIGludCwgKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpidWYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAobHN0YXQsIGludCwgKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpidWYpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAobHN0YXQsIGludCwgKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpidWYpKTsKKyMgZW5kaWYKKyMgaWYgQEhBVkVfTFNUQVRACitfR0xfQ1hYQUxJQVNXQVJOIChsc3RhdCk7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGxzdGF0CisjIGlmIEhBVkVfUkFXX0RFQ0xfTFNUQVQKK19HTF9XQVJOX09OX1VTRSAobHN0YXQsICJsc3RhdCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbHN0YXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQFJFUExBQ0VfTUtESVJACisjIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICB1bmRlZiBta2RpcgorIyAgZGVmaW5lIG1rZGlyIHJwbF9ta2RpcgorIyBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobWtkaXIsIGludCwgKGNoYXIgY29uc3QgKm5hbWUsIG1vZGVfdCBtb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKG1rZGlyLCBpbnQsIChjaGFyIGNvbnN0ICpuYW1lLCBtb2RlX3QgbW9kZSkpOworI2Vsc2UKKy8qIG1pbmd3J3MgX21rZGlyKCkgZnVuY3Rpb24gaGFzIDEgYXJndW1lbnQsIGJ1dCB3ZSBwYXNzIDIgYXJndW1lbnRzLgorICAgQWRkaXRpb25hbGx5LCBpdCBkZWNsYXJlcyBfbWtkaXIgKGFuZCBkZXBlbmRpbmcgb24gY29tcGlsZSBmbGFncywgYW4KKyAgIGFsaWFzIG1rZGlyKSwgb25seSBpbiB0aGUgbm9uc3RhbmRhcmQgaW5jbHVkZXMgPGRpcmVjdC5oPiBhbmQgPGlvLmg+LAorICAgd2hpY2ggYXJlIGluY2x1ZGVkIGFib3ZlLiAgKi8KKyMgaWYgKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXworCisjICBpZiAhR05VTElCX2RlZmluZWRfcnBsX21rZGlyCitzdGF0aWMgaW50CitycGxfbWtkaXIgKGNoYXIgY29uc3QgKm5hbWUsIG1vZGVfdCBtb2RlKQoreworICByZXR1cm4gX21rZGlyIChuYW1lKTsKK30KKyMgICBkZWZpbmUgR05VTElCX2RlZmluZWRfcnBsX21rZGlyIDEKKyMgIGVuZGlmCisKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIG1rZGlyIHJwbF9ta2RpcgorIyAgZW5kaWYKK19HTF9DWFhBTElBU19SUEwgKG1rZGlyLCBpbnQsIChjaGFyIGNvbnN0ICpuYW1lLCBtb2RlX3QgbW9kZSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChta2RpciwgaW50LCAoY2hhciBjb25zdCAqbmFtZSwgbW9kZV90IG1vZGUpKTsKKyMgZW5kaWYKKyNlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobWtkaXIpOworCisKKyNpZiBAR05VTElCX01LRElSQVRACisjIGlmICFASEFWRV9NS0RJUkFUQAorX0dMX0ZVTkNERUNMX1NZUyAobWtkaXJhdCwgaW50LCAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlLCBtb2RlX3QgbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKG1rZGlyYXQsIGludCwgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgbW9kZV90IG1vZGUpKTsKK19HTF9DWFhBTElBU1dBUk4gKG1rZGlyYXQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBta2RpcmF0CisjIGlmIEhBVkVfUkFXX0RFQ0xfTUtESVJBVAorX0dMX1dBUk5fT05fVVNFIChta2RpcmF0LCAibWtkaXJhdCBpcyBub3QgcG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBvcGVuYXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9NS0ZJRk9ACisjIGlmIEBSRVBMQUNFX01LRklGT0AKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbWtmaWZvCisjICAgZGVmaW5lIG1rZmlmbyBycGxfbWtmaWZvCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobWtmaWZvLCBpbnQsIChjaGFyIGNvbnN0ICpmaWxlLCBtb2RlX3QgbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAobWtmaWZvLCBpbnQsIChjaGFyIGNvbnN0ICpmaWxlLCBtb2RlX3QgbW9kZSkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfTUtGSUZPQAorX0dMX0ZVTkNERUNMX1NZUyAobWtmaWZvLCBpbnQsIChjaGFyIGNvbnN0ICpmaWxlLCBtb2RlX3QgbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKG1rZmlmbywgaW50LCAoY2hhciBjb25zdCAqZmlsZSwgbW9kZV90IG1vZGUpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG1rZmlmbyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG1rZmlmbworIyBpZiBIQVZFX1JBV19ERUNMX01LRklGTworX0dMX1dBUk5fT05fVVNFIChta2ZpZm8sICJta2ZpZm8gaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWtmaWZvIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfTUtGSUZPQVRACisjIGlmICFASEFWRV9NS0ZJRk9BVEAKK19HTF9GVU5DREVDTF9TWVMgKG1rZmlmb2F0LCBpbnQsIChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGUsIG1vZGVfdCBtb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKG1rZmlmb2F0LCBpbnQsIChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGUsIG1vZGVfdCBtb2RlKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChta2ZpZm9hdCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG1rZmlmb2F0CisjIGlmIEhBVkVfUkFXX0RFQ0xfTUtGSUZPQVQKK19HTF9XQVJOX09OX1VTRSAobWtmaWZvYXQsICJta2ZpZm9hdCBpcyBub3QgcG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBta2ZpZm9hdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX01LTk9EQAorIyBpZiBAUkVQTEFDRV9NS05PREAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbWtub2QKKyMgICBkZWZpbmUgbWtub2QgcnBsX21rbm9kCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobWtub2QsIGludCwgKGNoYXIgY29uc3QgKmZpbGUsIG1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAobWtub2QsIGludCwgKGNoYXIgY29uc3QgKmZpbGUsIG1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX01LTk9EQAorX0dMX0ZVTkNERUNMX1NZUyAobWtub2QsIGludCwgKGNoYXIgY29uc3QgKmZpbGUsIG1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKKy8qIE5lZWQgdG8gY2FzdCwgYmVjYXVzZSBvbiBPU0YvMSA1LjEsIHRoZSB0aGlyZCBwYXJhbWV0ZXIgaXMgJy4uLicuICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUIChta25vZCwgaW50LCAoY2hhciBjb25zdCAqZmlsZSwgbW9kZV90IG1vZGUsIGRldl90IGRldikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobWtub2QpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBta25vZAorIyBpZiBIQVZFX1JBV19ERUNMX01LTk9ECitfR0xfV0FSTl9PTl9VU0UgKG1rbm9kLCAibWtub2QgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWtub2QgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9NS05PREFUQAorIyBpZiAhQEhBVkVfTUtOT0RBVEAKK19HTF9GVU5DREVDTF9TWVMgKG1rbm9kYXQsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGUsIG1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobWtub2RhdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgbW9kZV90IG1vZGUsIGRldl90IGRldikpOworX0dMX0NYWEFMSUFTV0FSTiAobWtub2RhdCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG1rbm9kYXQKKyMgaWYgSEFWRV9SQVdfREVDTF9NS05PREFUCitfR0xfV0FSTl9PTl9VU0UgKG1rbm9kYXQsICJta25vZGF0IGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG1rZmlmb2F0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfU1RBVEAKKyMgaWYgQFJFUExBQ0VfU1RBVEAKKy8qIFdlIGNhbid0IHVzZSB0aGUgb2JqZWN0LWxpa2UgI2RlZmluZSBzdGF0IHJwbF9zdGF0LCBiZWNhdXNlIG9mCisgICBzdHJ1Y3Qgc3RhdC4gIFRoaXMgbWVhbnMgdGhhdCBycGxfc3RhdCB3aWxsIG5vdCBiZSB1c2VkIGlmIHRoZSB1c2VyCisgICBkb2VzIChzdGF0KShhLGIpLiAgT2ggd2VsbC4gICovCisjICBpZiBkZWZpbmVkIF9BSVggJiYgZGVmaW5lZCBzdGF0ICYmIGRlZmluZWQgX0xBUkdFX0ZJTEVTCisgICAgLyogV2l0aCBfTEFSR0VfRklMRVMgZGVmaW5lZCwgQUlYIChvbmx5KSBkZWZpbmVzIHN0YXQgdG8gc3RhdDY0LAorICAgICAgIHNvIHdlIGhhdmUgdG8gcmVwbGFjZSBzdGF0NjQoKSBpbnN0ZWFkIG9mIHN0YXQoKS4gKi8KKyMgICB1bmRlZiBzdGF0NjQKKyMgICBkZWZpbmUgc3RhdDY0KG5hbWUsIHN0KSBycGxfc3RhdCAobmFtZSwgc3QpCisjICBlbGlmIEBXSU5ET1dTXzY0X0JJVF9TVF9TSVpFQAorICAgIC8qIEFib3ZlLCB3ZSBkZWZpbmUgc3RhdCB0byBfc3RhdGk2NC4gICovCisjICAgaWYgZGVmaW5lZCBfX01JTkdXMzJfXyAmJiBkZWZpbmVkIF9zdGF0aTY0CisjICAgIGlmbmRlZiBfVVNFXzMyQklUX1RJTUVfVAorICAgICAgLyogVGhlIHN5c3RlbSBoZWFkZXJzIGRlZmluZSBfc3RhdGk2NCB0byBfc3RhdDY0LiAgKi8KKyMgICAgIHVuZGVmIF9zdGF0NjQKKyMgICAgIGRlZmluZSBfc3RhdDY0KG5hbWUsIHN0KSBycGxfc3RhdCAobmFtZSwgc3QpCisjICAgIGVuZGlmCisjICAgZWxpZiBkZWZpbmVkIF9NU0NfVkVSICYmIGRlZmluZWQgX3N0YXRpNjQKKyMgICAgaWZkZWYgX1VTRV8zMkJJVF9USU1FX1QKKyAgICAgIC8qIFRoZSBzeXN0ZW0gaGVhZGVycyBkZWZpbmUgX3N0YXRpNjQgdG8gX3N0YXQzMmk2NC4gICovCisjICAgICB1bmRlZiBfc3RhdDMyaTY0CisjICAgICBkZWZpbmUgX3N0YXQzMmk2NChuYW1lLCBzdCkgcnBsX3N0YXQgKG5hbWUsIHN0KQorIyAgICBlbHNlCisgICAgICAvKiBUaGUgc3lzdGVtIGhlYWRlcnMgZGVmaW5lIF9zdGF0aTY0IHRvIF9zdGF0NjQuICAqLworIyAgICAgdW5kZWYgX3N0YXQ2NAorIyAgICAgZGVmaW5lIF9zdGF0NjQobmFtZSwgc3QpIHJwbF9zdGF0IChuYW1lLCBzdCkKKyMgICAgZW5kaWYKKyMgICBlbHNlCisjICAgIHVuZGVmIF9zdGF0aTY0CisjICAgIGRlZmluZSBfc3RhdGk2NChuYW1lLCBzdCkgcnBsX3N0YXQgKG5hbWUsIHN0KQorIyAgIGVuZGlmCisjICBlbGlmIGRlZmluZWQgX19NSU5HVzMyX18gJiYgZGVmaW5lZCBzdGF0CisjICAgaWZkZWYgX1VTRV8zMkJJVF9USU1FX1QKKyAgICAgLyogVGhlIHN5c3RlbSBoZWFkZXJzIGRlZmluZSBzdGF0IHRvIF9zdGF0MzJpNjQuICAqLworIyAgICB1bmRlZiBfc3RhdDMyaTY0CisjICAgIGRlZmluZSBfc3RhdDMyaTY0KG5hbWUsIHN0KSBycGxfc3RhdCAobmFtZSwgc3QpCisjICAgZWxzZQorICAgICAvKiBUaGUgc3lzdGVtIGhlYWRlcnMgZGVmaW5lIHN0YXQgdG8gX3N0YXQ2NC4gICovCisjICAgIHVuZGVmIF9zdGF0NjQKKyMgICAgZGVmaW5lIF9zdGF0NjQobmFtZSwgc3QpIHJwbF9zdGF0IChuYW1lLCBzdCkKKyMgICBlbmRpZgorIyAgZWxpZiBkZWZpbmVkIF9NU0NfVkVSICYmIGRlZmluZWQgc3RhdAorIyAgIGlmZGVmIF9VU0VfMzJCSVRfVElNRV9UCisgICAgIC8qIFRoZSBzeXN0ZW0gaGVhZGVycyBkZWZpbmUgc3RhdCB0byBfc3RhdDMyLiAgKi8KKyMgICAgdW5kZWYgX3N0YXQzMgorIyAgICBkZWZpbmUgX3N0YXQzMihuYW1lLCBzdCkgcnBsX3N0YXQgKG5hbWUsIHN0KQorIyAgIGVsc2UKKyAgICAgLyogVGhlIHN5c3RlbSBoZWFkZXJzIGRlZmluZSBzdGF0IHRvIF9zdGF0NjRpMzIuICAqLworIyAgICB1bmRlZiBfc3RhdDY0aTMyCisjICAgIGRlZmluZSBfc3RhdDY0aTMyKG5hbWUsIHN0KSBycGxfc3RhdCAobmFtZSwgc3QpCisjICAgZW5kaWYKKyMgIGVsc2UgLyogIShfQUlYIHx8X19NSU5HVzMyX18gfHwgIF9NU0NfVkVSKSAqLworIyAgIHVuZGVmIHN0YXQKKyMgICBkZWZpbmUgc3RhdChuYW1lLCBzdCkgcnBsX3N0YXQgKG5hbWUsIHN0KQorIyAgZW5kaWYgLyogIV9MQVJHRV9GSUxFUyAqLworX0dMX0VYVEVSTl9DIGludCBzdGF0IChjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqYnVmKQorICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc3RhdAorIyBpZiBIQVZFX1JBV19ERUNMX1NUQVQKK19HTF9XQVJOX09OX1VTRSAoc3RhdCwgInN0YXQgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHN0YXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9VVElNRU5TQVRACisvKiBVc2UgdGhlIHJwbF8gcHJlZml4IGFsc28gb24gU29sYXJpcyA8PSA5LCBiZWNhdXNlIG9uIFNvbGFyaXMgOSBvdXIgdXRpbWVuc2F0CisgICBpbXBsZW1lbnRhdGlvbiByZWxpZXMgb24gZnV0aW1lc2F0LCB3aGljaCBvbiBTb2xhcmlzIDEwIG1ha2VzIGFuIGludm9jYXRpb24KKyAgIHRvIHV0aW1lbnNhdCB0aGF0IGlzIG1lYW50IHRvIGludm9rZSB0aGUgbGliYydzIHV0aW1lbnNhdCgpLCBub3QgZ251bGliJ3MKKyAgIHV0aW1lbnNhdCgpLiAgKi8KKyMgaWYgQFJFUExBQ0VfVVRJTUVOU0FUQCB8fCAoIUBIQVZFX1VUSU1FTlNBVEAgJiYgZGVmaW5lZCBfX3N1bikKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgdXRpbWVuc2F0CisjICAgZGVmaW5lIHV0aW1lbnNhdCBycGxfdXRpbWVuc2F0CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAodXRpbWVuc2F0LCBpbnQsIChpbnQgZmQsIGNoYXIgY29uc3QgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyBjb25zdCB0aW1lc1syXSwgaW50IGZsYWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHV0aW1lbnNhdCwgaW50LCAoaW50IGZkLCBjaGFyIGNvbnN0ICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgdGltZXNbMl0sIGludCBmbGFnKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9VVElNRU5TQVRACitfR0xfRlVOQ0RFQ0xfU1lTICh1dGltZW5zYXQsIGludCwgKGludCBmZCwgY2hhciBjb25zdCAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjIGNvbnN0IHRpbWVzWzJdLCBpbnQgZmxhZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHV0aW1lbnNhdCwgaW50LCAoaW50IGZkLCBjaGFyIGNvbnN0ICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgdGltZXNbMl0sIGludCBmbGFnKSk7CisjIGVuZGlmCisjIGlmIEBIQVZFX1VUSU1FTlNBVEAKK19HTF9DWFhBTElBU1dBUk4gKHV0aW1lbnNhdCk7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHV0aW1lbnNhdAorIyBpZiBIQVZFX1JBV19ERUNMX1VUSU1FTlNBVAorX0dMX1dBUk5fT05fVVNFICh1dGltZW5zYXQsICJ1dGltZW5zYXQgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgdXRpbWVuc2F0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TWVNfU1RBVF9IICovCisjZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NZU19TVEFUX0ggKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL3N5c190eXBlcy5pbi5oIGIvbGliL3N5c190eXBlcy5pbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMzlkOTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc3lzX3R5cGVzLmluLmgKQEAgLTAsMCArMSw1MSBAQAorLyogUHJvdmlkZSBhIG1vcmUgY29tcGxldGUgc3lzL3R5cGVzLmguCisKKyAgIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZiBfX0dOVUNfXyA+PSAzCitAUFJBR01BX1NZU1RFTV9IRUFERVJACisjZW5kaWYKK0BQUkFHTUFfQ09MVU1OU0AKKworI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1lTX1RZUEVTX0gKKworLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworI0BJTkNMVURFX05FWFRAIEBORVhUX1NZU19UWVBFU19IQAorCisjaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TWVNfVFlQRVNfSAorI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfU1lTX1RZUEVTX0gKKworLyogT3ZlcnJpZGUgb2ZmX3QgaWYgTGFyZ2UgRmlsZSBTdXBwb3J0IGlzIHJlcXVlc3RlZCBvbiBuYXRpdmUgV2luZG93cy4gICovCisjaWYgQFdJTkRPV1NfNjRfQklUX09GRl9UQAorLyogU2FtZSBhcyBpbnQ2NF90IGluIDxzdGRpbnQuaD4uICAqLworIyBpZiBkZWZpbmVkIF9NU0NfVkVSCisjICBkZWZpbmUgb2ZmX3QgX19pbnQ2NAorIyBlbHNlCisjICBkZWZpbmUgb2ZmX3QgbG9uZyBsb25nIGludAorIyBlbmRpZgorLyogSW5kaWNhdG9yLCBmb3IgZ251bGliIGludGVybmFsIHB1cnBvc2VzLiAgKi8KKyMgZGVmaW5lIF9HTF9XSU5ET1dTXzY0X0JJVF9PRkZfVCAxCisjZW5kaWYKKworLyogTVNWQyA5IGRlZmluZXMgc2l6ZV90IGluIDxzdGRkZWYuaD4sIG5vdCBpbiA8c3lzL3R5cGVzLmg+LiAgKi8KKy8qIEJ1dCBhdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9uIG9uIGdsaWJjIHN5c3RlbXMuICAqLworI2lmICgoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fKSBcCisgICAgJiYgISBkZWZpbmVkIF9fR0xJQkNfXworIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbmRpZgorCisjZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NZU19UWVBFU19IICovCisjZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NZU19UWVBFU19IICovCmRpZmYgLS1naXQgYS9saWIvc3lzX3dhaXQuaW4uaCBiL2xpYi9zeXNfd2FpdC5pbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNjRlYmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc3lzX3dhaXQuaW4uaApAQCAtMCwwICsxLDEyOSBAQAorLyogQSBQT1NJWC1saWtlIDxzeXMvd2FpdC5oPi4KKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDAzLCAyMDA1LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworCisjaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TWVNfV0FJVF9ICisKKyNpZiBfX0dOVUNfXyA+PSAzCitAUFJBR01BX1NZU1RFTV9IRUFERVJACisjZW5kaWYKK0BQUkFHTUFfQ09MVU1OU0AKKworLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworI2lmICEoKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXykKKyMgQElOQ0xVREVfTkVYVEAgQE5FWFRfU1lTX1dBSVRfSEAKKyNlbmRpZgorCisjaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TWVNfV0FJVF9ICisjZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9TWVNfV0FJVF9ICisKKy8qIEdldCBwaWRfdC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKworLyogVGhlIGRlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwgZXRjLiBhcmUgY29waWVkIGhlcmUuICAqLworCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UgaXMgY29waWVkIGhlcmUuICAqLworCisKKyNpZiAhKChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgISBkZWZpbmVkIF9fQ1lHV0lOX18pCisvKiBVbml4IEFQSS4gICovCisKKy8qIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFwcGx5IHRvIGFuIGFyZ3VtZW50IHgsIHRoYXQgaXMgYSBzdGF0dXMgb2YgYSBwcm9jZXNzLAorICAgYXMgcmV0dXJuZWQgYnkgd2FpdHBpZCgpLgorICAgT24gbmVhcmx5IGFsbCBzeXN0ZW1zLCBpbmNsdWRpbmcgTGludXgveDg2LCBXRVhJVFNUQVRVUyBhcmUgYml0cyAxNS4uOCBhbmQKKyAgIFdURVJNU0lHIGFyZSBiaXRzIDcuLjAsIHdoaWxlIEJlT1MgdXNlcyB0aGUgb3Bwb3NpdGUuICBUaGVyZWZvcmUgcHJvZ3JhbXMKKyAgIGhhdmUgdG8gdXNlIHRoZSBhYnN0cmFjdCBtYWNyb3MuICAqLworCisvKiBGb3IgdmFsaWQgeCwgZXhhY3RseSBvbmUgb2YgV0lGU0lHTkFMRUQoeCksIFdJRkVYSVRFRCh4KSwgV0lGU1RPUFBFRCh4KQorICAgaXMgdHJ1ZS4gICovCisjIGlmbmRlZiBXSUZTSUdOQUxFRAorIyAgZGVmaW5lIFdJRlNJR05BTEVEKHgpIChXVEVSTVNJRyAoeCkgIT0gMCAmJiBXVEVSTVNJRyh4KSAhPSAweDdmKQorIyBlbmRpZgorIyBpZm5kZWYgV0lGRVhJVEVECisjICBkZWZpbmUgV0lGRVhJVEVEKHgpIChXVEVSTVNJRyAoeCkgPT0gMCkKKyMgZW5kaWYKKyMgaWZuZGVmIFdJRlNUT1BQRUQKKyMgIGRlZmluZSBXSUZTVE9QUEVEKHgpIChXVEVSTVNJRyAoeCkgPT0gMHg3ZikKKyMgZW5kaWYKKworLyogVGhlIHRlcm1pbmF0aW9uIHNpZ25hbC4gT25seSB0byBiZSBhY2Nlc3NlZCBpZiBXSUZTSUdOQUxFRCh4KSBpcyB0cnVlLiAgKi8KKyMgaWZuZGVmIFdURVJNU0lHCisjICBkZWZpbmUgV1RFUk1TSUcoeCkgKCh4KSAmIDB4N2YpCisjIGVuZGlmCisKKy8qIFRoZSBleGl0IHN0YXR1cy4gT25seSB0byBiZSBhY2Nlc3NlZCBpZiBXSUZFWElURUQoeCkgaXMgdHJ1ZS4gICovCisjIGlmbmRlZiBXRVhJVFNUQVRVUworIyAgZGVmaW5lIFdFWElUU1RBVFVTKHgpICgoKHgpID4+IDgpICYgMHhmZikKKyMgZW5kaWYKKworLyogVGhlIHN0b3BwaW5nIHNpZ25hbC4gT25seSB0byBiZSBhY2Nlc3NlZCBpZiBXSUZTVE9QUEVEKHgpIGlzIHRydWUuICAqLworIyBpZm5kZWYgV1NUT1BTSUcKKyMgIGRlZmluZSBXU1RPUFNJRyh4KSAoKCh4KSA+PiA4KSAmIDB4N2YpCisjIGVuZGlmCisKKy8qIFRydWUgaWYgdGhlIHByb2Nlc3MgZHVtcGVkIGNvcmUuICBOb3Qgc3RhbmRhcmRpemVkIGJ5IFBPU0lYLiAgKi8KKyMgaWZuZGVmIFdDT1JFRFVNUAorIyAgZGVmaW5lIFdDT1JFRFVNUCh4KSAoKHgpICYgMHg4MCkKKyMgZW5kaWYKKworI2Vsc2UKKy8qIE5hdGl2ZSBXaW5kb3dzIEFQSS4gICovCisKKyMgaW5jbHVkZSA8c2lnbmFsLmg+IC8qIGZvciBTSUdURVJNICovCisKKy8qIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFwcGx5IHRvIGFuIGFyZ3VtZW50IHgsIHRoYXQgaXMgYSBzdGF0dXMgb2YgYSBwcm9jZXNzLAorICAgYXMgcmV0dXJuZWQgYnkgd2FpdHBpZCgpIG9yLCBlcXVpdmFsZW50bHksIF9jd2FpdCgpIG9yIEdldEV4aXRDb2RlUHJvY2VzcygpLgorICAgVGhpcyB2YWx1ZSBpcyBzaW1wbHkgYW4gJ2ludCcsIG5vdCBjb21wb3NlZCBvZiBiaXQgZmllbGRzLiAgKi8KKworLyogV2hlbiBhbiB1bmhhbmRsZWQgZmF0YWwgc2lnbmFsIHRlcm1pbmF0ZXMgYSBwcm9jZXNzLCB0aGUgZXhpdCBjb2RlIGlzIDMuICAqLworIyBkZWZpbmUgV0lGU0lHTkFMRUQoeCkgKCh4KSA9PSAzKQorIyBkZWZpbmUgV0lGRVhJVEVEKHgpICgoeCkgIT0gMykKKyMgZGVmaW5lIFdJRlNUT1BQRUQoeCkgMAorCisvKiBUaGUgc2lnbmFsIHRoYXQgdGVybWluYXRlZCBhIHByb2Nlc3MgaXMgbm90IGtub3duIHBvc3RodW0uICAqLworIyBkZWZpbmUgV1RFUk1TSUcoeCkgU0lHVEVSTQorCisjIGRlZmluZSBXRVhJVFNUQVRVUyh4KSAoeCkKKworLyogVGhlcmUgYXJlIG5vIHN0b3BwaW5nIHNpZ25hbHMuICAqLworIyBkZWZpbmUgV1NUT1BTSUcoeCkgMAorCisvKiBUaGVyZSBhcmUgbm8gY29yZSBkdW1wcy4gICovCisjIGRlZmluZSBXQ09SRURVTVAoeCkgMAorCisjZW5kaWYKKworCisvKiBEZWNsYXJhdGlvbnMgb2YgZnVuY3Rpb25zLiAgKi8KKworI2lmIEBHTlVMSUJfV0FJVFBJREAKKyMgaWYgKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXworX0dMX0ZVTkNERUNMX1NZUyAod2FpdHBpZCwgcGlkX3QsIChwaWRfdCBwaWQsIGludCAqc3RhdHVzcCwgaW50IG9wdGlvbnMpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdhaXRwaWQsIHBpZF90LCAocGlkX3QgcGlkLCBpbnQgKnN0YXR1c3AsIGludCBvcHRpb25zKSk7CitfR0xfQ1hYQUxJQVNXQVJOICh3YWl0cGlkKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2FpdHBpZAorIyBpZiBIQVZFX1JBV19ERUNMX1dBSVRQSUQKK19HTF9XQVJOX09OX1VTRSAod2FpdHBpZCwgIndhaXRwaWQgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHN5c193YWl0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TWVNfV0FJVF9IICovCisjZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NZU19XQUlUX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi90aW1lLmluLmggYi9saWIvdGltZS5pbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0Y2RlMDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdGltZS5pbi5oCkBAIC0wLDAgKzEsMjQ4IEBACisvKiBBIG1vcmUtc3RhbmRhcmQgPHRpbWUuaD4uCisKKyAgIENvcHlyaWdodCAoQykgMjAwNy0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZiBfX0dOVUNfXyA+PSAzCitAUFJBR01BX1NZU1RFTV9IRUFERVJACisjZW5kaWYKK0BQUkFHTUFfQ09MVU1OU0AKKworLyogRG9uJ3QgZ2V0IGluIHRoZSB3YXkgb2YgZ2xpYmMgd2hlbiBpdCBpbmNsdWRlcyB0aW1lLmggbWVyZWx5IHRvCisgICBkZWNsYXJlIGEgZmV3IHN0YW5kYXJkIHN5bWJvbHMsIHJhdGhlciB0aGFuIHRvIGRlY2xhcmUgYWxsIHRoZQorICAgc3ltYm9scy4gIEFsc28sIFNvbGFyaXMgOCA8dGltZS5oPiBldmVudHVhbGx5IGluY2x1ZGVzIGl0c2VsZgorICAgcmVjdXJzaXZlbHk7IGlmIHRoYXQgaXMgaGFwcGVuaW5nLCBqdXN0IGluY2x1ZGUgdGhlIHN5c3RlbSA8dGltZS5oPgorICAgd2l0aG91dCBhZGRpbmcgb3VyIG93biBkZWNsYXJhdGlvbnMuICAqLworI2lmIChkZWZpbmVkIF9fbmVlZF90aW1lX3QgfHwgZGVmaW5lZCBfX25lZWRfY2xvY2tfdCBcCisgICAgIHx8IGRlZmluZWQgX19uZWVkX3RpbWVzcGVjIFwKKyAgICAgfHwgZGVmaW5lZCBfQEdVQVJEX1BSRUZJWEBfVElNRV9IKQorCisjIEBJTkNMVURFX05FWFRAIEBORVhUX1RJTUVfSEAKKworI2Vsc2UKKworIyBkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX1RJTUVfSAorCisjIEBJTkNMVURFX05FWFRAIEBORVhUX1RJTUVfSEAKKworLyogTmV0QlNEIDUuMCBtaXMtZGVmaW5lcyBOVUxMLiAgKi8KKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8qIFRoZSBkZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBMIGV0Yy4gYXJlIGNvcGllZCBoZXJlLiAgKi8KKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxMIGlzIGNvcGllZCBoZXJlLiAgKi8KKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKworLyogU29tZSBzeXN0ZW1zIGRvbid0IGRlZmluZSBzdHJ1Y3QgdGltZXNwZWMgKGUuZy4sIEFJWCA0LjEsIFVsdHJpeCA0LjMpLgorICAgT3IgdGhleSBkZWZpbmUgaXQgd2l0aCB0aGUgd3JvbmcgbWVtYmVyIG5hbWVzIG9yIGRlZmluZSBpdCBpbiA8c3lzL3RpbWUuaD4KKyAgIChlLmcuLCBGcmVlQlNEIGNpcmNhIDE5OTcpLiAgU3RvY2sgTWluZ3cgZG9lcyBub3QgZGVmaW5lIGl0LCBidXQgdGhlCisgICBwdGhyZWFkcy13aW4zMiBsaWJyYXJ5IGRlZmluZXMgaXQgaW4gPHB0aHJlYWQuaD4uICAqLworIyBpZiAhIEBUSU1FX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUNACisjICBpZiBAU1lTX1RJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQ0AKKyMgICBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyAgZWxpZiBAUFRIUkVBRF9IX0RFRklORVNfU1RSVUNUX1RJTUVTUEVDQAorIyAgIGluY2x1ZGUgPHB0aHJlYWQuaD4KKy8qIFRoZSBwdGhyZWFkcy13aW4zMiA8cHRocmVhZC5oPiBhbHNvIGRlZmluZXMgYSBjb3VwbGUgb2YgYnJva2VuIG1hY3Jvcy4gICovCisjICAgdW5kZWYgYXNjdGltZV9yCisjICAgdW5kZWYgY3RpbWVfcgorIyAgIHVuZGVmIGdtdGltZV9yCisjICAgdW5kZWYgbG9jYWx0aW1lX3IKKyMgICB1bmRlZiByYW5kX3IKKyMgICB1bmRlZiBzdHJ0b2tfcgorIyAgZWxzZQorCisjICAgaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworIyAgIGVuZGlmCisKKyMgICBpZiAhR05VTElCX2RlZmluZWRfc3RydWN0X3RpbWVzcGVjCisjICAgIHVuZGVmIHRpbWVzcGVjCisjICAgIGRlZmluZSB0aW1lc3BlYyBycGxfdGltZXNwZWMKK3N0cnVjdCB0aW1lc3BlYworeworICB0aW1lX3QgdHZfc2VjOworICBsb25nIGludCB0dl9uc2VjOworfTsKKyMgICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX3N0cnVjdF90aW1lc3BlYyAxCisjICAgZW5kaWYKKworIyAgIGlmZGVmIF9fY3BsdXNwbHVzCit9CisjICAgZW5kaWYKKworIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZiAhR05VTElCX2RlZmluZWRfc3RydWN0X3RpbWVfdF9tdXN0X2JlX2ludGVncmFsCisvKiBQZXIgaHR0cDovL2F1c3Rpbmdyb3VwYnVncy5uZXQvdmlldy5waHA/aWQ9MzI3LCBQT1NJWCByZXF1aXJlcworICAgdGltZV90IHRvIGJlIGFuIGludGVnZXIgdHlwZSwgZXZlbiB0aG91Z2ggQzk5IHBlcm1pdHMgZmxvYXRpbmcKKyAgIHBvaW50LiAgV2UgZG9uJ3Qga25vdyBvZiBhbnkgaW1wbGVtZW50YXRpb24gdGhhdCB1c2VzIGZsb2F0aW5nCisgICBwb2ludCwgYW5kIGl0IGlzIG11Y2ggZWFzaWVyIHRvIHdyaXRlIGNvZGUgdGhhdCBkb2Vzbid0IGhhdmUgdG8KKyAgIHdvcnJ5IGFib3V0IHRoYXQgY29ybmVyIGNhc2UsIHNvIHdlIGZvcmNlIHRoZSBpc3N1ZS4gICovCitzdHJ1Y3QgX190aW1lX3RfbXVzdF9iZV9pbnRlZ3JhbCB7CisgIHVuc2lnbmVkIGludCBfX2Zsb2F0aW5nX3RpbWVfdF91bnN1cHBvcnRlZCA6ICh0aW1lX3QpIDE7Cit9OworIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX3N0cnVjdF90aW1lX3RfbXVzdF9iZV9pbnRlZ3JhbCAxCisjIGVuZGlmCisKKy8qIFNsZWVwIGZvciBhdCBsZWFzdCBSUVRQIHNlY29uZHMgdW5sZXNzIGludGVycnVwdGVkLCAgSWYgaW50ZXJydXB0ZWQsCisgICByZXR1cm4gLTEgYW5kIHN0b3JlIHRoZSByZW1haW5pbmcgdGltZSBpbnRvIFJNVFAuICBTZWUKKyAgIDxodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjN4c2gvbmFub3NsZWVwLmh0bWw+LiAgKi8KKyMgaWYgQEdOVUxJQl9OQU5PU0xFRVBACisjICBpZiBAUkVQTEFDRV9OQU5PU0xFRVBACisjICAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICAgZGVmaW5lIG5hbm9zbGVlcCBycGxfbmFub3NsZWVwCisjICAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG5hbm9zbGVlcCwgaW50LAorICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1lc3BlYyBjb25zdCAqX19ycXRwLCBzdHJ1Y3QgdGltZXNwZWMgKl9fcm10cCkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChuYW5vc2xlZXAsIGludCwKKyAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXNwZWMgY29uc3QgKl9fcnF0cCwgc3RydWN0IHRpbWVzcGVjICpfX3JtdHApKTsKKyMgIGVsc2UKKyMgICBpZiAhIEBIQVZFX05BTk9TTEVFUEAKK19HTF9GVU5DREVDTF9TWVMgKG5hbm9zbGVlcCwgaW50LAorICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1lc3BlYyBjb25zdCAqX19ycXRwLCBzdHJ1Y3QgdGltZXNwZWMgKl9fcm10cCkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKG5hbm9zbGVlcCwgaW50LAorICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1lc3BlYyBjb25zdCAqX19ycXRwLCBzdHJ1Y3QgdGltZXNwZWMgKl9fcm10cCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG5hbm9zbGVlcCk7CisjIGVuZGlmCisKKy8qIFJldHVybiB0aGUgJ3RpbWVfdCcgcmVwcmVzZW50YXRpb24gb2YgVFAgYW5kIG5vcm1hbGl6ZSBUUC4gICovCisjIGlmIEBHTlVMSUJfTUtUSU1FQAorIyAgaWYgQFJFUExBQ0VfTUtUSU1FQAorIyAgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgIGRlZmluZSBta3RpbWUgcnBsX21rdGltZQorIyAgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChta3RpbWUsIHRpbWVfdCwgKHN0cnVjdCB0bSAqX190cCkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKG1rdGltZSwgdGltZV90LCAoc3RydWN0IHRtICpfX3RwKSk7CisjICBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChta3RpbWUsIHRpbWVfdCwgKHN0cnVjdCB0bSAqX190cCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG1rdGltZSk7CisjIGVuZGlmCisKKy8qIENvbnZlcnQgVElNRVIgdG8gUkVTVUxULCBhc3N1bWluZyBsb2NhbCB0aW1lIGFuZCBVVEMgcmVzcGVjdGl2ZWx5LiAgU2VlCisgICA8aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3N1c3YzeHNoL2xvY2FsdGltZV9yLmh0bWw+IGFuZAorICAgPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hzaC9nbXRpbWVfci5odG1sPi4gICovCisjIGlmIEBHTlVMSUJfVElNRV9SQAorIyAgaWYgQFJFUExBQ0VfTE9DQUxUSU1FX1JACisjICAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICAgdW5kZWYgbG9jYWx0aW1lX3IKKyMgICAgZGVmaW5lIGxvY2FsdGltZV9yIHJwbF9sb2NhbHRpbWVfcgorIyAgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChsb2NhbHRpbWVfciwgc3RydWN0IHRtICosICh0aW1lX3QgY29uc3QgKnJlc3RyaWN0IF9fdGltZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKnJlc3RyaWN0IF9fcmVzdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAobG9jYWx0aW1lX3IsIHN0cnVjdCB0bSAqLCAodGltZV90IGNvbnN0ICpyZXN0cmljdCBfX3RpbWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpyZXN0cmljdCBfX3Jlc3VsdCkpOworIyAgZWxzZQorIyAgIGlmICEgQEhBVkVfREVDTF9MT0NBTFRJTUVfUkAKK19HTF9GVU5DREVDTF9TWVMgKGxvY2FsdGltZV9yLCBzdHJ1Y3QgdG0gKiwgKHRpbWVfdCBjb25zdCAqcmVzdHJpY3QgX190aW1lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqcmVzdHJpY3QgX19yZXN1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGxvY2FsdGltZV9yLCBzdHJ1Y3QgdG0gKiwgKHRpbWVfdCBjb25zdCAqcmVzdHJpY3QgX190aW1lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqcmVzdHJpY3QgX19yZXN1bHQpKTsKKyMgIGVuZGlmCisjICBpZiBASEFWRV9ERUNMX0xPQ0FMVElNRV9SQAorX0dMX0NYWEFMSUFTV0FSTiAobG9jYWx0aW1lX3IpOworIyAgZW5kaWYKKyMgIGlmIEBSRVBMQUNFX0xPQ0FMVElNRV9SQAorIyAgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgIHVuZGVmIGdtdGltZV9yCisjICAgIGRlZmluZSBnbXRpbWVfciBycGxfZ210aW1lX3IKKyMgICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZ210aW1lX3IsIHN0cnVjdCB0bSAqLCAodGltZV90IGNvbnN0ICpyZXN0cmljdCBfX3RpbWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpyZXN0cmljdCBfX3Jlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKGdtdGltZV9yLCBzdHJ1Y3QgdG0gKiwgKHRpbWVfdCBjb25zdCAqcmVzdHJpY3QgX190aW1lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqcmVzdHJpY3QgX19yZXN1bHQpKTsKKyMgIGVsc2UKKyMgICBpZiAhIEBIQVZFX0RFQ0xfTE9DQUxUSU1FX1JACitfR0xfRlVOQ0RFQ0xfU1lTIChnbXRpbWVfciwgc3RydWN0IHRtICosICh0aW1lX3QgY29uc3QgKnJlc3RyaWN0IF9fdGltZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKnJlc3RyaWN0IF9fcmVzdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyAgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChnbXRpbWVfciwgc3RydWN0IHRtICosICh0aW1lX3QgY29uc3QgKnJlc3RyaWN0IF9fdGltZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKnJlc3RyaWN0IF9fcmVzdWx0KSk7CisjICBlbmRpZgorIyAgaWYgQEhBVkVfREVDTF9MT0NBTFRJTUVfUkAKK19HTF9DWFhBTElBU1dBUk4gKGdtdGltZV9yKTsKKyMgIGVuZGlmCisjIGVuZGlmCisKKy8qIFBhcnNlIEJVRiBhcyBhIHRpbWUgc3RhbXAsIGFzc3VtaW5nIEZPUk1BVCBzcGVjaWZpZXMgaXRzIGxheW91dCwgYW5kIHN0b3JlCisgICB0aGUgcmVzdWx0aW5nIGJyb2tlbi1kb3duIHRpbWUgaW50byBUTS4gIFNlZQorICAgPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hzaC9zdHJwdGltZS5odG1sPi4gICovCisjIGlmIEBHTlVMSUJfU1RSUFRJTUVACisjICBpZiAhIEBIQVZFX1NUUlBUSU1FQAorX0dMX0ZVTkNERUNMX1NZUyAoc3RycHRpbWUsIGNoYXIgKiwgKGNoYXIgY29uc3QgKnJlc3RyaWN0IF9fYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKnJlc3RyaWN0IF9fZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqcmVzdHJpY3QgX190bSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIsIDMpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc3RycHRpbWUsIGNoYXIgKiwgKGNoYXIgY29uc3QgKnJlc3RyaWN0IF9fYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKnJlc3RyaWN0IF9fZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqcmVzdHJpY3QgX190bSkpOworX0dMX0NYWEFMSUFTV0FSTiAoc3RycHRpbWUpOworIyBlbmRpZgorCisvKiBDb252ZXJ0IFRNIHRvIGEgdGltZV90IHZhbHVlLCBhc3N1bWluZyBVVEMuICAqLworIyBpZiBAR05VTElCX1RJTUVHTUAKKyMgIGlmIEBSRVBMQUNFX1RJTUVHTUAKKyMgICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgICB1bmRlZiB0aW1lZ20KKyMgICAgZGVmaW5lIHRpbWVnbSBycGxfdGltZWdtCisjICAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHRpbWVnbSwgdGltZV90LCAoc3RydWN0IHRtICpfX3RtKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAodGltZWdtLCB0aW1lX3QsIChzdHJ1Y3QgdG0gKl9fdG0pKTsKKyMgIGVsc2UKKyMgICBpZiAhIEBIQVZFX1RJTUVHTUAKK19HTF9GVU5DREVDTF9TWVMgKHRpbWVnbSwgdGltZV90LCAoc3RydWN0IHRtICpfX3RtKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh0aW1lZ20sIHRpbWVfdCwgKHN0cnVjdCB0bSAqX190bSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHRpbWVnbSk7CisjIGVuZGlmCisKKy8qIEVuY291cmFnZSBhcHBsaWNhdGlvbnMgdG8gYXZvaWQgdW5zYWZlIGZ1bmN0aW9ucyB0aGF0IGNhbiBvdmVycnVuCisgICBidWZmZXJzIHdoZW4gZ2l2ZW4gb3V0bGFuZGlzaCBzdHJ1Y3QgdG0gdmFsdWVzLiAgUG9ydGFibGUKKyAgIGFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHN0cmZ0aW1lIChvciBldmVuIHNwcmludGYpIGluc3RlYWQuICAqLworIyBpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjICB1bmRlZiBhc2N0aW1lCitfR0xfV0FSTl9PTl9VU0UgKGFzY3RpbWUsICJhc2N0aW1lIGNhbiBvdmVycnVuIGJ1ZmZlcnMgaW4gc29tZSBjYXNlcyAtICIKKyAgICAgICAgICAgICAgICAgImJldHRlciB1c2Ugc3RyZnRpbWUgKG9yIGV2ZW4gc3ByaW50ZikgaW5zdGVhZCIpOworIyBlbmRpZgorIyBpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjICB1bmRlZiBhc2N0aW1lX3IKK19HTF9XQVJOX09OX1VTRSAoYXNjdGltZSwgImFzY3RpbWVfciBjYW4gb3ZlcnJ1biBidWZmZXJzIGluIHNvbWUgY2FzZXMgLSAiCisgICAgICAgICAgICAgICAgICJiZXR0ZXIgdXNlIHN0cmZ0aW1lIChvciBldmVuIHNwcmludGYpIGluc3RlYWQiKTsKKyMgZW5kaWYKKyMgaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyAgdW5kZWYgY3RpbWUKK19HTF9XQVJOX09OX1VTRSAoYXNjdGltZSwgImN0aW1lIGNhbiBvdmVycnVuIGJ1ZmZlcnMgaW4gc29tZSBjYXNlcyAtICIKKyAgICAgICAgICAgICAgICAgImJldHRlciB1c2Ugc3RyZnRpbWUgKG9yIGV2ZW4gc3ByaW50ZikgaW5zdGVhZCIpOworIyBlbmRpZgorIyBpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjICB1bmRlZiBjdGltZV9yCitfR0xfV0FSTl9PTl9VU0UgKGFzY3RpbWUsICJjdGltZV9yIGNhbiBvdmVycnVuIGJ1ZmZlcnMgaW4gc29tZSBjYXNlcyAtICIKKyAgICAgICAgICAgICAgICAgImJldHRlciB1c2Ugc3RyZnRpbWUgKG9yIGV2ZW4gc3ByaW50ZikgaW5zdGVhZCIpOworIyBlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi90aW1ldmFyLmMgYi9saWIvdGltZXZhci5jCmluZGV4IGQ5YjUzM2MuLjM1NWVjYjUgMTAwNjQ0Ci0tLSBhL2xpYi90aW1ldmFyLmMKKysrIGIvbGliL3RpbWV2YXIuYwpAQCAtMSwxMCArMSwxMyBAQAogLyogVGltaW5nIHZhcmlhYmxlcyBmb3IgbWVhc3VyaW5nIGNvbXBpbGVyIHBlcmZvcm1hbmNlLgotICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAyLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDIsIDIwMDQsIDIwMDYsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuCisKICAgIENvbnRyaWJ1dGVkIGJ5IEFsZXggU2FtdWVsIDxzYW11ZWxAY29kZXNvdXJjZXJ5LmNvbT4KIAotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKQEAgLTEzLDEyICsxNiw5IEBACiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxjb25maWcuaD4KIAogI2lmIElOX0dDQwogCmRpZmYgLS1naXQgYS9saWIvdGltZXZhci5kZWYgYi9saWIvdGltZXZhci5kZWYKaW5kZXggMDRhYzM5Mi4uMTE0M2U5OSAxMDA2NDQKLS0tIGEvbGliL3RpbWV2YXIuZGVmCisrKyBiL2xpYi90aW1ldmFyLmRlZgpAQCAtMSwyNCArMSwyNCBAQAogLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBmb3IgdGltaW5nIHZhcmlhYmxlcyB1c2VkIHRvIC0qLSBDIC0qLQogICAgbWVhc3VyZSBydW4tdGltZSBwZXJmb3JtYW5jZSBvZiB0aGUgY29tcGlsZXIuCi0gICBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCiAgICBDb250cmlidXRlZCBieSBBa2ltIERlbWFpbGxlIDxha2ltQGZyZWVmcmllbmRzLm9yZz4uCiAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgogCi0gICBCaXNvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLSAgIEJpc29uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCBCaXNvbjsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAvKiBUaGlzIGZpbGUgY29udGFpbnMgdGltaW5nIHZhcmlhYmxlIGRlZmluaXRpb25zLCB1c2VkIGJ5IHRpbWV2YXIuaAogICAgYW5kIHRpbWV2YXIuYy4KQEAgLTQzLDExICs0MywxNiBAQAogREVGVElNRVZBUiAoVFZfU0VUUyAgICAgICAgICAgICAgICAgICwgImNvbXB1dGluZyB0aGUgc2V0cyIpCiBERUZUSU1FVkFSIChUVl9MUjAgICAgICAgICAgICAgICAgICAgLCAiTFIoMCkiKQogREVGVElNRVZBUiAoVFZfTEFMUiAgICAgICAgICAgICAgICAgICwgIkxBTFIoMSkiKQorREVGVElNRVZBUiAoVFZfSUVMUl9QSEFTRTEgICAgICAgICAgICwgIklFTFIoMSkgUGhhc2UgMSIpCitERUZUSU1FVkFSIChUVl9JRUxSX1BIQVNFMiAgICAgICAgICAgLCAiSUVMUigxKSBQaGFzZSAyIikKK0RFRlRJTUVWQVIgKFRWX0lFTFJfUEhBU0UzICAgICAgICAgICAsICJJRUxSKDEpIFBoYXNlIDMiKQorREVGVElNRVZBUiAoVFZfSUVMUl9QSEFTRTQgICAgICAgICAgICwgIklFTFIoMSkgUGhhc2UgNCIpCiBERUZUSU1FVkFSIChUVl9DT05GTElDVFMgICAgICAgICAgICAgLCAiY29uZmxpY3RzIikKIAogLyogVGltZSBzcGVudCBvdXRwdXRpbmcgcmVzdWx0cy4gICovCiBERUZUSU1FVkFSIChUVl9SRVBPUlQgICAgICAgICAgICAgICAgLCAib3V0cHV0aW5nIHJlcG9ydCIpCiBERUZUSU1FVkFSIChUVl9HUkFQSCAgICAgICAgICAgICAgICAgLCAib3V0cHV0aW5nIGdyYXBoIikKK0RFRlRJTUVWQVIgKFRWX1hNTCAgICAgICAgICAgICAgICAgICAsICJvdXRwdXRpbmcgeG1sIikKIERFRlRJTUVWQVIgKFRWX0FDVElPTlMgICAgICAgICAgICAgICAsICJwYXJzZXIgYWN0aW9uIHRhYmxlcyIpCiBERUZUSU1FVkFSIChUVl9QQVJTRVIgICAgICAgICAgICAgICAgLCAib3V0cHV0aW5nIHBhcnNlciIpCiBERUZUSU1FVkFSIChUVl9NNCAgICAgICAgICAgICAgICAgICAgLCAicnVubmluZyBtNCIpCmRpZmYgLS1naXQgYS9saWIvdGltZXZhci5oIGIvbGliL3RpbWV2YXIuaAppbmRleCBiYmViNDAyLi5hMjhiNGNmIDEwMDY0NAotLS0gYS9saWIvdGltZXZhci5oCisrKyBiL2xpYi90aW1ldmFyLmgKQEAgLTEsMTAgKzEsMTMgQEAKIC8qIFRpbWluZyB2YXJpYWJsZXMgZm9yIG1lYXN1cmluZyBjb21waWxlciBwZXJmb3JtYW5jZS4KLSAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMiwgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAyLCAyMDA0LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLgorCiAgICBDb250cmlidXRlZCBieSBBbGV4IFNhbXVlbCA8c2FtdWVsQGNvZGVzb3VyY2VyeS5jb20+CiAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCkBAIC0xMyw4ICsxNiw3IEBACiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogI2lmbmRlZiBHQ0NfVElNRVZBUl9ICiAjZGVmaW5lIEdDQ19USU1FVkFSX0gKZGlmZiAtLWdpdCBhL2xpYi91bmlzdGQtLS5oIGIvbGliL3VuaXN0ZC0tLmgKaW5kZXggMWZlNmNlOC4uNzhiOWU0YSAxMDA2NDQKLS0tIGEvbGliL3VuaXN0ZC0tLmgKKysrIGIvbGliL3VuaXN0ZC0tLmgKQEAgLTEsMTEgKzEsMTEgQEAKIC8qIExpa2UgdW5pc3RkLmgsIGJ1dCByZWRlZmluZSBzb21lIG5hbWVzIHRvIGF2b2lkIGdsaXRjaGVzLgogCi0gICBDb3B5cmlnaHQgKEMpIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpAQCAtMTMsOCArMTMsNyBAQAogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKIC8qIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQuICAqLwogCkBAIC0yNiwzICsyNSw4IEBACiAKICN1bmRlZiBwaXBlCiAjZGVmaW5lIHBpcGUgcGlwZV9zYWZlcgorCisjaWYgR05VTElCX1BJUEUyX1NBRkVSCisjIHVuZGVmIHBpcGUyCisjIGRlZmluZSBwaXBlMiBwaXBlMl9zYWZlcgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvdW5pc3RkLXNhZmVyLmggYi9saWIvdW5pc3RkLXNhZmVyLmgKaW5kZXggZjk1OTk5ZC4uNjg0YmY3OSAxMDA2NDQKLS0tIGEvbGliL3VuaXN0ZC1zYWZlci5oCisrKyBiL2xpYi91bmlzdGQtc2FmZXIuaApAQCAtMSwxMSArMSwxMSBAQAogLyogSW52b2tlIHVuaXN0ZC1saWtlIGZ1bmN0aW9ucywgYnV0IGF2b2lkIHNvbWUgZ2xpdGNoZXMuCiAKLSAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMywgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMywgMjAwNSwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCkBAIC0xMywxMSArMTMsMTkgQEAKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCi0vKiBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0LiAgKi8KKy8qIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQgYW5kIEVyaWMgQmxha2UuICAqLwogCiBpbnQgZHVwX3NhZmVyIChpbnQpOwogaW50IGZkX3NhZmVyIChpbnQpOwogaW50IHBpcGVfc2FmZXIgKGludFsyXSk7CisKKyNpZiBHTlVMSUJfRkRfU0FGRVJfRkxBRworaW50IGR1cF9zYWZlcl9mbGFnIChpbnQsIGludCk7CitpbnQgZmRfc2FmZXJfZmxhZyAoaW50LCBpbnQpOworI2VuZGlmCisKKyNpZiBHTlVMSUJfUElQRTJfU0FGRVIKK2ludCBwaXBlMl9zYWZlciAoaW50WzJdLCBpbnQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvdW5pc3RkLmMgYi9saWIvdW5pc3RkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM2YThlMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi91bmlzdGQuYwpAQCAtMCwwICsxLDMgQEAKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNkZWZpbmUgX0dMX1VOSVNURF9JTkxJTkUgX0dMX0VYVEVSTl9JTkxJTkUKKyNpbmNsdWRlICJ1bmlzdGQuaCIKZGlmZiAtLWdpdCBhL2xpYi91bmlzdGQuaW4uaCBiL2xpYi91bmlzdGQuaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTcxZjc3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3VuaXN0ZC5pbi5oCkBAIC0wLDAgKzEsMTU0MSBAQAorLyogU3Vic3RpdHV0ZSBmb3IgYW5kIHdyYXBwZXIgYXJvdW5kIDx1bmlzdGQuaD4uCisgICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWYgX19HTlVDX18gPj0gMworQFBSQUdNQV9TWVNURU1fSEVBREVSQAorI2VuZGlmCitAUFJBR01BX0NPTFVNTlNACisKKy8qIFNwZWNpYWwgaW52b2NhdGlvbiBjb252ZW50aW9uOgorICAgLSBPbiBtaW5ndywgc2V2ZXJhbCBoZWFkZXJzLCBpbmNsdWRpbmcgPHdpbnNvY2syLmg+LCBpbmNsdWRlIDx1bmlzdGQuaD4sCisgICAgIGJ1dCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGJvdGggdGhlIHN5c3RlbSA8dW5pc3RkLmg+IGFuZCA8d2luc29jazIuaD4KKyAgICAgYXJlIGNvbXBsZXRlbHkgaW5jbHVkZWQgYmVmb3JlIHdlIHJlcGxhY2UgZ2V0aG9zdG5hbWUuICAqLworI2lmIEBHTlVMSUJfR0VUSE9TVE5BTUVAICYmIEBVTklTVERfSF9IQVZFX1dJTlNPQ0syX0hAIFwKKyAgJiYgIWRlZmluZWQgX0dMX1dJTlNPQ0syX0hfV0lUTkVTUyAmJiBkZWZpbmVkIF9XSU5TT0NLMl9ICisvKiA8dW5pc3RkLmg+IGlzIGJlaW5nIGluZGlyZWN0bHkgaW5jbHVkZWQgZm9yIHRoZSBmaXJzdCB0aW1lIGZyb20KKyAgIDx3aW5zb2NrMi5oPjsgYXZvaWQgZGVjbGFyaW5nIGFueSBvdmVycmlkZXMuICAqLworIyBpZiBASEFWRV9VTklTVERfSEAKKyMgIEBJTkNMVURFX05FWFRAIEBORVhUX1VOSVNURF9IQAorIyBlbHNlCisjICBlcnJvciB1bmV4cGVjdGVkOyByZXBvcnQgdGhpcyB0byBidWctZ251bGliQGdudS5vcmcKKyMgZW5kaWYKKyMgZGVmaW5lIF9HTF9XSU5TT0NLMl9IX1dJVE5FU1MKKworLyogTm9ybWFsIGludm9jYXRpb24uICAqLworI2VsaWYgIWRlZmluZWQgX0BHVUFSRF9QUkVGSVhAX1VOSVNURF9ICisKKy8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyNpZiBASEFWRV9VTklTVERfSEAKKyMgQElOQ0xVREVfTkVYVEAgQE5FWFRfVU5JU1REX0hACisjZW5kaWYKKworLyogR2V0IGFsbCBwb3NzaWJsZSBkZWNsYXJhdGlvbnMgb2YgZ2V0aG9zdG5hbWUoKS4gICovCisjaWYgQEdOVUxJQl9HRVRIT1NUTkFNRUAgJiYgQFVOSVNURF9IX0hBVkVfV0lOU09DSzJfSEAgXAorICAmJiAhZGVmaW5lZCBfR0xfSU5DTFVESU5HX1dJTlNPQ0syX0gKKyMgZGVmaW5lIF9HTF9JTkNMVURJTkdfV0lOU09DSzJfSAorIyBpbmNsdWRlIDx3aW5zb2NrMi5oPgorIyB1bmRlZiBfR0xfSU5DTFVESU5HX1dJTlNPQ0syX0gKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgX0BHVUFSRF9QUkVGSVhAX1VOSVNURF9IICYmICFkZWZpbmVkIF9HTF9JTkNMVURJTkdfV0lOU09DSzJfSAorI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfVU5JU1REX0gKKworLyogTmV0QlNEIDUuMCBtaXMtZGVmaW5lcyBOVUxMLiAgQWxzbyBnZXQgc2l6ZV90LiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLyogbWluZ3cgZG9lc24ndCBkZWZpbmUgdGhlIFNFRUtfKiBvciAqX0ZJTEVOTyBtYWNyb3MgaW4gPHVuaXN0ZC5oPi4gICovCisvKiBDeWd3aW4gMS43LjEgZGVjbGFyZXMgc3ltbGlua2F0IGluIDxzdGRpby5oPiwgbm90IGluIDx1bmlzdGQuaD4uICAqLworLyogQnV0IGF2b2lkIG5hbWVzcGFjZSBwb2xsdXRpb24gb24gZ2xpYmMgc3lzdGVtcy4gICovCisjaWYgKCEoZGVmaW5lZCBTRUVLX0NVUiAmJiBkZWZpbmVkIFNFRUtfRU5EICYmIGRlZmluZWQgU0VFS19TRVQpIFwKKyAgICAgfHwgKChAR05VTElCX1NZTUxJTktBVEAgfHwgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSykgXAorICAgICAgICAgJiYgZGVmaW5lZCBfX0NZR1dJTl9fKSkgXAorICAgICYmICEgZGVmaW5lZCBfX0dMSUJDX18KKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyNlbmRpZgorCisvKiBDeWd3aW4gMS43LjEgZGVjbGFyZXMgdW5saW5rYXQgaW4gPGZjbnRsLmg+LCBub3QgaW4gPHVuaXN0ZC5oPi4gICovCisvKiBCdXQgYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zLiAgKi8KKyNpZiAoQEdOVUxJQl9VTkxJTktBVEAgfHwgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSykgJiYgZGVmaW5lZCBfX0NZR1dJTl9fIFwKKyAgICAmJiAhIGRlZmluZWQgX19HTElCQ19fCisjIGluY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKworLyogbWluZ3cgZmFpbHMgdG8gZGVjbGFyZSBfZXhpdCBpbiA8dW5pc3RkLmg+LiAgKi8KKy8qIG1pbmd3LCBNU1ZDLCBCZU9TLCBIYWlrdSBkZWNsYXJlIGVudmlyb24gaW4gPHN0ZGxpYi5oPiwgbm90IGluCisgICA8dW5pc3RkLmg+LiAgKi8KKy8qIFNvbGFyaXMgZGVjbGFyZXMgZ2V0Y3dkIG5vdCBvbmx5IGluIDx1bmlzdGQuaD4gYnV0IGFsc28gaW4gPHN0ZGxpYi5oPi4gICovCisvKiBCdXQgYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zLiAgKi8KKyNpZm5kZWYgX19HTElCQ19fCisjIGluY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisKKy8qIE5hdGl2ZSBXaW5kb3dzIHBsYXRmb3JtcyBkZWNsYXJlIGNoZGlyLCBnZXRjd2QsIHJtZGlyIGluCisgICA8aW8uaD4gYW5kL29yIDxkaXJlY3QuaD4sIG5vdCBpbiA8dW5pc3RkLmg+LgorICAgVGhleSBhbHNvIGRlY2xhcmUgYWNjZXNzKCksIGNobW9kKCksIGNsb3NlKCksIGR1cCgpLCBkdXAyKCksIGlzYXR0eSgpLAorICAgbHNlZWsoKSwgcmVhZCgpLCB1bmxpbmsoKSwgd3JpdGUoKSBpbiA8aW8uaD4uICAqLworI2lmICgoQEdOVUxJQl9DSERJUkAgfHwgQEdOVUxJQl9HRVRDV0RAIHx8IEBHTlVMSUJfUk1ESVJAIFwKKyAgICAgIHx8IGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0spIFwKKyAgICAgJiYgKChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgISBkZWZpbmVkIF9fQ1lHV0lOX18pKQorIyBpbmNsdWRlIDxpby5oPiAgICAgLyogbWluZ3czMiwgbWluZ3c2NCAqLworIyBpbmNsdWRlIDxkaXJlY3QuaD4gLyogbWluZ3c2NCwgTVNWQyA5ICovCisjZWxpZiAoQEdOVUxJQl9DTE9TRUAgfHwgQEdOVUxJQl9EVVBAIHx8IEBHTlVMSUJfRFVQMkAgfHwgQEdOVUxJQl9JU0FUVFlAIFwKKyAgICAgICB8fCBAR05VTElCX0xTRUVLQCB8fCBAR05VTElCX1JFQURAIHx8IEBHTlVMSUJfVU5MSU5LQCB8fCBAR05VTElCX1dSSVRFQCBcCisgICAgICAgfHwgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSykgXAorICAgICAgJiYgKChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgISBkZWZpbmVkIF9fQ1lHV0lOX18pCisjIGluY2x1ZGUgPGlvLmg+CisjZW5kaWYKKworLyogQUlYIGFuZCBPU0YvMSA1LjEgZGVjbGFyZSBnZXRkb21haW5uYW1lIGluIDxuZXRkYi5oPiwgbm90IGluIDx1bmlzdGQuaD4uCisgICBOb25TdG9wIEtlcm5lbCBkZWNsYXJlcyBnZXRob3N0bmFtZSBpbiA8bmV0ZGIuaD4sIG5vdCBpbiA8dW5pc3RkLmg+LiAgKi8KKy8qIEJ1dCBhdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9uIG9uIGdsaWJjIHN5c3RlbXMuICAqLworI2lmICgoQEdOVUxJQl9HRVRET01BSU5OQU1FQCAmJiAoZGVmaW5lZCBfQUlYIHx8IGRlZmluZWQgX19vc2ZfXykpIFwKKyAgICAgfHwgKEBHTlVMSUJfR0VUSE9TVE5BTUVAICYmIGRlZmluZWQgX19UQU5ERU0pKSBcCisgICAgJiYgIWRlZmluZWQgX19HTElCQ19fCisjIGluY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKworLyogTVNWQyBkZWZpbmVzIG9mZl90IGluIDxzeXMvdHlwZXMuaD4uCisgICBNYXkgYWxzbyBkZWZpbmUgb2ZmX3QgdG8gYSA2NC1iaXQgdHlwZSBvbiBuYXRpdmUgV2luZG93cy4gICovCisjaWYgIUBIQVZFX1VOSVNURF9IQCB8fCBAV0lORE9XU182NF9CSVRfT0ZGX1RACisvKiBHZXQgb2ZmX3QuICAqLworIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaWYgKEBHTlVMSUJfUkVBREAgfHwgQEdOVUxJQl9XUklURUAgXAorICAgICB8fCBAR05VTElCX1JFQURMSU5LQCB8fCBAR05VTElCX1JFQURMSU5LQVRAIFwKKyAgICAgfHwgQEdOVUxJQl9QUkVBREAgfHwgQEdOVUxJQl9QV1JJVEVAIHx8IGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0spCisvKiBHZXQgc3NpemVfdC4gICovCisjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKy8qIEdldCBnZXRvcHQoKSwgb3B0YXJnLCBvcHRpbmQsIG9wdGVyciwgb3B0b3B0LgorICAgQnV0IGF2b2lkIG5hbWVzcGFjZSBwb2xsdXRpb24gb24gZ2xpYmMgc3lzdGVtcy4gICovCisjaWYgQEdOVUxJQl9VTklTVERfSF9HRVRPUFRAICYmICFkZWZpbmVkIF9fR0xJQkNfXyAmJiAhZGVmaW5lZCBfR0xfU1lTVEVNX0dFVE9QVAorIyBpbmNsdWRlIDxnZXRvcHQuaD4KKyNlbmRpZgorCitfR0xfSU5MSU5FX0hFQURFUl9CRUdJTgorI2lmbmRlZiBfR0xfVU5JU1REX0lOTElORQorIyBkZWZpbmUgX0dMX1VOSVNURF9JTkxJTkUgX0dMX0lOTElORQorI2VuZGlmCisKKy8qIFRoZSBkZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBMIGV0Yy4gYXJlIGNvcGllZCBoZXJlLiAgKi8KKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxMIGlzIGNvcGllZCBoZXJlLiAgKi8KKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKworCisvKiBIaWRlIHNvbWUgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGZyb20gPHdpbnNvY2syLmg+LiAgKi8KKworI2lmIEBHTlVMSUJfR0VUSE9TVE5BTUVAICYmIEBVTklTVERfSF9IQVZFX1dJTlNPQ0syX0hACisjIGlmICFkZWZpbmVkIF9AR1VBUkRfUFJFRklYQF9TWVNfU09DS0VUX0gKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgc29ja2V0CisjICAgZGVmaW5lIHNvY2tldCAgICAgICAgICAgICAgc29ja2V0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisjICAgdW5kZWYgY29ubmVjdAorIyAgIGRlZmluZSBjb25uZWN0ICAgICAgICAgICAgIGNvbm5lY3RfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKyMgICB1bmRlZiBhY2NlcHQKKyMgICBkZWZpbmUgYWNjZXB0ICAgICAgICAgICAgICBhY2NlcHRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKyMgICB1bmRlZiBiaW5kCisjICAgZGVmaW5lIGJpbmQgICAgICAgICAgICAgICAgYmluZF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorIyAgIHVuZGVmIGdldHBlZXJuYW1lCisjICAgZGVmaW5lIGdldHBlZXJuYW1lICAgICAgICAgZ2V0cGVlcm5hbWVfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKyMgICB1bmRlZiBnZXRzb2NrbmFtZQorIyAgIGRlZmluZSBnZXRzb2NrbmFtZSAgICAgICAgIGdldHNvY2tuYW1lX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisjICAgdW5kZWYgZ2V0c29ja29wdAorIyAgIGRlZmluZSBnZXRzb2Nrb3B0ICAgICAgICAgIGdldHNvY2tvcHRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKyMgICB1bmRlZiBsaXN0ZW4KKyMgICBkZWZpbmUgbGlzdGVuICAgICAgICAgICAgICBsaXN0ZW5fdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKyMgICB1bmRlZiByZWN2CisjICAgZGVmaW5lIHJlY3YgICAgICAgICAgICAgICAgcmVjdl91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorIyAgIHVuZGVmIHNlbmQKKyMgICBkZWZpbmUgc2VuZCAgICAgICAgICAgICAgICBzZW5kX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisjICAgdW5kZWYgcmVjdmZyb20KKyMgICBkZWZpbmUgcmVjdmZyb20gICAgICAgICAgICByZWN2ZnJvbV91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorIyAgIHVuZGVmIHNlbmR0bworIyAgIGRlZmluZSBzZW5kdG8gICAgICAgICAgICAgIHNlbmR0b191c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorIyAgIHVuZGVmIHNldHNvY2tvcHQKKyMgICBkZWZpbmUgc2V0c29ja29wdCAgICAgICAgICBzZXRzb2Nrb3B0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisjICAgdW5kZWYgc2h1dGRvd24KKyMgICBkZWZpbmUgc2h1dGRvd24gICAgICAgICAgICBzaHV0ZG93bl91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorIyAgZWxzZQorICAgIF9HTF9XQVJOX09OX1VTRSAoc29ja2V0LAorICAgICAgICAgICAgICAgICAgICAgInNvY2tldCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKyAgICBfR0xfV0FSTl9PTl9VU0UgKGNvbm5lY3QsCisgICAgICAgICAgICAgICAgICAgICAiY29ubmVjdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKyAgICBfR0xfV0FSTl9PTl9VU0UgKGFjY2VwdCwKKyAgICAgICAgICAgICAgICAgICAgICJhY2NlcHQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisgICAgX0dMX1dBUk5fT05fVVNFIChiaW5kLAorICAgICAgICAgICAgICAgICAgICAgImJpbmQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisgICAgX0dMX1dBUk5fT05fVVNFIChnZXRwZWVybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICJnZXRwZWVybmFtZSgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKyAgICBfR0xfV0FSTl9PTl9VU0UgKGdldHNvY2tuYW1lLAorICAgICAgICAgICAgICAgICAgICAgImdldHNvY2tuYW1lKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworICAgIF9HTF9XQVJOX09OX1VTRSAoZ2V0c29ja29wdCwKKyAgICAgICAgICAgICAgICAgICAgICJnZXRzb2Nrb3B0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworICAgIF9HTF9XQVJOX09OX1VTRSAobGlzdGVuLAorICAgICAgICAgICAgICAgICAgICAgImxpc3RlbigpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKyAgICBfR0xfV0FSTl9PTl9VU0UgKHJlY3YsCisgICAgICAgICAgICAgICAgICAgICAicmVjdigpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKyAgICBfR0xfV0FSTl9PTl9VU0UgKHNlbmQsCisgICAgICAgICAgICAgICAgICAgICAic2VuZCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKyAgICBfR0xfV0FSTl9PTl9VU0UgKHJlY3Zmcm9tLAorICAgICAgICAgICAgICAgICAgICAgInJlY3Zmcm9tKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworICAgIF9HTF9XQVJOX09OX1VTRSAoc2VuZHRvLAorICAgICAgICAgICAgICAgICAgICAgInNlbmR0bygpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKyAgICBfR0xfV0FSTl9PTl9VU0UgKHNldHNvY2tvcHQsCisgICAgICAgICAgICAgICAgICAgICAic2V0c29ja29wdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKyAgICBfR0xfV0FSTl9PTl9VU0UgKHNodXRkb3duLAorICAgICAgICAgICAgICAgICAgICAgInNodXRkb3duKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgX0BHVUFSRF9QUkVGSVhAX1NZU19TRUxFQ1RfSAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBzZWxlY3QKKyMgICBkZWZpbmUgc2VsZWN0ICAgICAgICAgICAgICBzZWxlY3RfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc2VsZWN0X2gKKyMgIGVsc2UKKyAgICBfR0xfV0FSTl9PTl9VU0UgKHNlbGVjdCwKKyAgICAgICAgICAgICAgICAgICAgICJzZWxlY3QoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc2VsZWN0Lmg+Iik7CisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKworLyogT1MvMiBFTVggbGFja3MgdGhlc2UgbWFjcm9zLiAgKi8KKyNpZm5kZWYgU1RESU5fRklMRU5PCisjIGRlZmluZSBTVERJTl9GSUxFTk8gMAorI2VuZGlmCisjaWZuZGVmIFNURE9VVF9GSUxFTk8KKyMgZGVmaW5lIFNURE9VVF9GSUxFTk8gMQorI2VuZGlmCisjaWZuZGVmIFNUREVSUl9GSUxFTk8KKyMgZGVmaW5lIFNUREVSUl9GSUxFTk8gMgorI2VuZGlmCisKKy8qIEVuc3VyZSAqX09LIG1hY3JvcyBleGlzdC4gICovCisjaWZuZGVmIEZfT0sKKyMgZGVmaW5lIEZfT0sgMAorIyBkZWZpbmUgWF9PSyAxCisjIGRlZmluZSBXX09LIDIKKyMgZGVmaW5lIFJfT0sgNAorI2VuZGlmCisKKworLyogRGVjbGFyZSBvdmVycmlkZGVuIGZ1bmN0aW9ucy4gICovCisKKworI2lmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy8qIFRoZSBhY2Nlc3MoKSBmdW5jdGlvbiBpcyBhIHNlY3VyaXR5IHJpc2suICAqLworX0dMX1dBUk5fT05fVVNFIChhY2Nlc3MsICJ0aGUgYWNjZXNzIGZ1bmN0aW9uIGlzIGEgc2VjdXJpdHkgcmlzayAtICIKKyAgICAgICAgICAgICAgICAgInVzZSB0aGUgZ251bGliIG1vZHVsZSBmYWNjZXNzYXQgaW5zdGVhZCIpOworI2VuZGlmCisKKworI2lmIEBHTlVMSUJfQ0hESVJACitfR0xfQ1hYQUxJQVNfU1lTIChjaGRpciwgaW50LCAoY29uc3QgY2hhciAqZmlsZSkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU1dBUk4gKGNoZGlyKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgY2hkaXIKKyMgaWYgSEFWRV9SQVdfREVDTF9DSERJUgorX0dMX1dBUk5fT05fVVNFIChjaG93biwgImNoZGlyIGlzIG5vdCBhbHdheXMgaW4gPHVuaXN0ZC5oPiAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGNoZGlyIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfQ0hPV05ACisvKiBDaGFuZ2UgdGhlIG93bmVyIG9mIEZJTEUgdG8gVUlEIChpZiBVSUQgaXMgbm90IC0xKSBhbmQgdGhlIGdyb3VwIG9mIEZJTEUKKyAgIHRvIEdJRCAoaWYgR0lEIGlzIG5vdCAtMSkuICBGb2xsb3cgc3ltYm9saWMgbGlua3MuCisgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgLTEgYW5kIGVycm5vIHNldC4KKyAgIFNlZSB0aGUgUE9TSVg6MjAwOCBzcGVjaWZpY2F0aW9uCisgICA8aHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvZnVuY3Rpb25zL2Nob3duLmh0bWwuICAqLworIyBpZiBAUkVQTEFDRV9DSE9XTkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgY2hvd24KKyMgICBkZWZpbmUgY2hvd24gcnBsX2Nob3duCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoY2hvd24sIGludCwgKGNvbnN0IGNoYXIgKmZpbGUsIHVpZF90IHVpZCwgZ2lkX3QgZ2lkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKGNob3duLCBpbnQsIChjb25zdCBjaGFyICpmaWxlLCB1aWRfdCB1aWQsIGdpZF90IGdpZCkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfQ0hPV05ACitfR0xfRlVOQ0RFQ0xfU1lTIChjaG93biwgaW50LCAoY29uc3QgY2hhciAqZmlsZSwgdWlkX3QgdWlkLCBnaWRfdCBnaWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGNob3duLCBpbnQsIChjb25zdCBjaGFyICpmaWxlLCB1aWRfdCB1aWQsIGdpZF90IGdpZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoY2hvd24pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBjaG93bgorIyBpZiBIQVZFX1JBV19ERUNMX0NIT1dOCitfR0xfV0FSTl9PTl9VU0UgKGNob3duLCAiY2hvd24gZmFpbHMgdG8gZm9sbG93IHN5bWxpbmtzIG9uIHNvbWUgc3lzdGVtcyBhbmQgIgorICAgICAgICAgICAgICAgICAiZG9lc24ndCB0cmVhdCBhIHVpZCBvciBnaWQgb2YgLTEgb24gc29tZSBzeXN0ZW1zIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgY2hvd24gZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9DTE9TRUAKKyMgaWYgQFJFUExBQ0VfQ0xPU0VACisvKiBBdXRvbWF0aWNhbGx5IGluY2x1ZGVkIGJ5IG1vZHVsZXMgdGhhdCBuZWVkIGEgcmVwbGFjZW1lbnQgZm9yIGNsb3NlLiAgKi8KKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgY2xvc2UKKyMgICBkZWZpbmUgY2xvc2UgcnBsX2Nsb3NlCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoY2xvc2UsIGludCwgKGludCBmZCkpOworX0dMX0NYWEFMSUFTX1JQTCAoY2xvc2UsIGludCwgKGludCBmZCkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChjbG9zZSwgaW50LCAoaW50IGZkKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChjbG9zZSk7CisjZWxpZiBAVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IX0FORF9VU0VfU09DS0VUU0AKKyMgdW5kZWYgY2xvc2UKKyMgZGVmaW5lIGNsb3NlIGNsb3NlX3VzZWRfd2l0aG91dF9yZXF1ZXN0aW5nX2dudWxpYl9tb2R1bGVfY2xvc2UKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgY2xvc2UKKy8qIEFzc3VtZSBjbG9zZSBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFIChjbG9zZSwgImNsb3NlIGRvZXMgbm90IHBvcnRhYmx5IHdvcmsgb24gc29ja2V0cyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGNsb3NlIGZvciBwb3J0YWJpbGl0eSIpOworI2VuZGlmCisKKworI2lmIEBHTlVMSUJfRFVQQAorIyBpZiBAUkVQTEFDRV9EVVBACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBkdXAgcnBsX2R1cAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGR1cCwgaW50LCAoaW50IG9sZGZkKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChkdXAsIGludCwgKGludCBvbGRmZCkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChkdXAsIGludCwgKGludCBvbGRmZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZHVwKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZHVwCisjIGlmIEhBVkVfUkFXX0RFQ0xfRFVQCitfR0xfV0FSTl9PTl9VU0UgKGR1cCwgImR1cCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZHVwIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfRFVQMkAKKy8qIENvcHkgdGhlIGZpbGUgZGVzY3JpcHRvciBPTERGRCBpbnRvIGZpbGUgZGVzY3JpcHRvciBORVdGRC4gIERvIG5vdGhpbmcgaWYKKyAgIE5FV0ZEID0gT0xERkQsIG90aGVyd2lzZSBjbG9zZSBORVdGRCBmaXJzdCBpZiBpdCBpcyBvcGVuLgorICAgUmV0dXJuIG5ld2ZkIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSAtMSBhbmQgZXJybm8gc2V0LgorICAgU2VlIHRoZSBQT1NJWDoyMDA4IHNwZWNpZmljYXRpb24KKyAgIDxodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9mdW5jdGlvbnMvZHVwMi5odG1sPi4gICovCisjIGlmIEBSRVBMQUNFX0RVUDJACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBkdXAyIHJwbF9kdXAyCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZHVwMiwgaW50LCAoaW50IG9sZGZkLCBpbnQgbmV3ZmQpKTsKK19HTF9DWFhBTElBU19SUEwgKGR1cDIsIGludCwgKGludCBvbGRmZCwgaW50IG5ld2ZkKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9EVVAyQAorX0dMX0ZVTkNERUNMX1NZUyAoZHVwMiwgaW50LCAoaW50IG9sZGZkLCBpbnQgbmV3ZmQpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChkdXAyLCBpbnQsIChpbnQgb2xkZmQsIGludCBuZXdmZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZHVwMik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGR1cDIKKyMgaWYgSEFWRV9SQVdfREVDTF9EVVAyCitfR0xfV0FSTl9PTl9VU0UgKGR1cDIsICJkdXAyIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBkdXAyIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfRFVQM0AKKy8qIENvcHkgdGhlIGZpbGUgZGVzY3JpcHRvciBPTERGRCBpbnRvIGZpbGUgZGVzY3JpcHRvciBORVdGRCwgd2l0aCB0aGUKKyAgIHNwZWNpZmllZCBmbGFncy4KKyAgIFRoZSBmbGFncyBhcmUgYSBiaXRtYXNrLCBwb3NzaWJseSBpbmNsdWRpbmcgT19DTE9FWEVDIChkZWZpbmVkIGluIDxmY250bC5oPikKKyAgIGFuZCBPX1RFWFQsIE9fQklOQVJZIChkZWZpbmVkIGluICJiaW5hcnktaW8uaCIpLgorICAgQ2xvc2UgTkVXRkQgZmlyc3QgaWYgaXQgaXMgb3Blbi4KKyAgIFJldHVybiBuZXdmZCBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgLTEgYW5kIGVycm5vIHNldC4KKyAgIFNlZSB0aGUgTGludXggbWFuIHBhZ2UgYXQKKyAgIDxodHRwOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL21hbi1wYWdlcy9vbmxpbmUvcGFnZXMvbWFuMi9kdXAzLjIuaHRtbD4uICAqLworIyBpZiBASEFWRV9EVVAzQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgZHVwMyBycGxfZHVwMworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGR1cDMsIGludCwgKGludCBvbGRmZCwgaW50IG5ld2ZkLCBpbnQgZmxhZ3MpKTsKK19HTF9DWFhBTElBU19SUEwgKGR1cDMsIGludCwgKGludCBvbGRmZCwgaW50IG5ld2ZkLCBpbnQgZmxhZ3MpKTsKKyMgZWxzZQorX0dMX0ZVTkNERUNMX1NZUyAoZHVwMywgaW50LCAoaW50IG9sZGZkLCBpbnQgbmV3ZmQsIGludCBmbGFncykpOworX0dMX0NYWEFMSUFTX1NZUyAoZHVwMywgaW50LCAoaW50IG9sZGZkLCBpbnQgbmV3ZmQsIGludCBmbGFncykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZHVwMyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGR1cDMKKyMgaWYgSEFWRV9SQVdfREVDTF9EVVAzCitfR0xfV0FSTl9PTl9VU0UgKGR1cDMsICJkdXAzIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBkdXAzIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfRU5WSVJPTkAKKyMgaWYgIUBIQVZFX0RFQ0xfRU5WSVJPTkAKKy8qIFNldCBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIHZhbHVlcy4gIEFuIGFycmF5IG9mIHN0cmluZ3Mgb2YgdGhlIGZvcm0KKyAgICJWQVJJQUJMRT1WQUxVRSIsIHRlcm1pbmF0ZWQgd2l0aCBhIE5VTEwuICAqLworIyAgaWYgZGVmaW5lZCBfX0FQUExFX18gJiYgZGVmaW5lZCBfX01BQ0hfXworIyAgIGluY2x1ZGUgPGNydF9leHRlcm5zLmg+CisjICAgZGVmaW5lIGVudmlyb24gKCpfTlNHZXRFbnZpcm9uICgpKQorIyAgZWxzZQorIyAgIGlmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyMgICBlbmRpZgorZXh0ZXJuIGNoYXIgKiplbnZpcm9uOworIyAgIGlmZGVmIF9fY3BsdXNwbHVzCit9CisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIGlmIEhBVkVfUkFXX0RFQ0xfRU5WSVJPTgorX0dMX1VOSVNURF9JTkxJTkUgY2hhciAqKioKK3JwbF9lbnZpcm9uICh2b2lkKQoreworICByZXR1cm4gJmVudmlyb247Cit9CitfR0xfV0FSTl9PTl9VU0UgKHJwbF9lbnZpcm9uLCAiZW52aXJvbiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZW52aXJvbiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgIHVuZGVmIGVudmlyb24KKyMgIGRlZmluZSBlbnZpcm9uICgqcnBsX2Vudmlyb24gKCkpCisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9FVUlEQUNDRVNTQAorLyogTGlrZSBhY2Nlc3MoKSwgZXhjZXB0IHRoYXQgaXQgdXNlcyB0aGUgZWZmZWN0aXZlIHVzZXIgaWQgYW5kIGdyb3VwIGlkIG9mCisgICB0aGUgY3VycmVudCBwcm9jZXNzLiAgKi8KKyMgaWYgIUBIQVZFX0VVSURBQ0NFU1NACitfR0xfRlVOQ0RFQ0xfU1lTIChldWlkYWNjZXNzLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IG1vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChldWlkYWNjZXNzLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IG1vZGUpKTsKK19HTF9DWFhBTElBU1dBUk4gKGV1aWRhY2Nlc3MpOworIyBpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisvKiBMaWtlIGFjY2VzcygpLCB0aGlzIGZ1bmN0aW9uIGlzIGEgc2VjdXJpdHkgcmlzay4gICovCitfR0xfV0FSTl9PTl9VU0UgKGV1aWRhY2Nlc3MsICJ0aGUgZXVpZGFjY2VzcyBmdW5jdGlvbiBpcyBhIHNlY3VyaXR5IHJpc2sgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgdGhlIGdudWxpYiBtb2R1bGUgZmFjY2Vzc2F0IGluc3RlYWQiKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZXVpZGFjY2VzcworIyBpZiBIQVZFX1JBV19ERUNMX0VVSURBQ0NFU1MKK19HTF9XQVJOX09OX1VTRSAoZXVpZGFjY2VzcywgImV1aWRhY2Nlc3MgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGV1aWRhY2Nlc3MgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9GQUNDRVNTQVRACisjIGlmICFASEFWRV9GQUNDRVNTQVRACitfR0xfRlVOQ0RFQ0xfU1lTIChmYWNjZXNzYXQsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGUsIGludCBtb2RlLCBpbnQgZmxhZykKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmYWNjZXNzYXQsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGUsIGludCBtb2RlLCBpbnQgZmxhZykpOworX0dMX0NYWEFMSUFTV0FSTiAoZmFjY2Vzc2F0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZmFjY2Vzc2F0CisjIGlmIEhBVkVfUkFXX0RFQ0xfRkFDQ0VTU0FUCitfR0xfV0FSTl9PTl9VU0UgKGZhY2Nlc3NhdCwgImZhY2Nlc3NhdCBpcyBub3QgcG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmYWNjZXNzYXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9GQ0hESVJACisvKiBDaGFuZ2UgdGhlIHByb2Nlc3MnIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIGRpcmVjdG9yeSBvbiB3aGljaAorICAgdGhlIGdpdmVuIGZpbGUgZGVzY3JpcHRvciBpcyBvcGVuLgorICAgUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIC0xIGFuZCBlcnJubyBzZXQuCisgICBTZWUgdGhlIFBPU0lYOjIwMDggc3BlY2lmaWNhdGlvbgorICAgPGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Z1bmN0aW9ucy9mY2hkaXIuaHRtbD4uICAqLworIyBpZiAhIEBIQVZFX0ZDSERJUkAKK19HTF9GVU5DREVDTF9TWVMgKGZjaGRpciwgaW50LCAoaW50IC8qZmQqLykpOworCisvKiBHbnVsaWIgaW50ZXJuYWwgaG9va3MgbmVlZGVkIHRvIG1haW50YWluIHRoZSBmY2hkaXIgbWV0YWRhdGEuICAqLworX0dMX0VYVEVSTl9DIGludCBfZ2xfcmVnaXN0ZXJfZmQgKGludCBmZCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCisgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKTsKK19HTF9FWFRFUk5fQyB2b2lkIF9nbF91bnJlZ2lzdGVyX2ZkIChpbnQgZmQpOworX0dMX0VYVEVSTl9DIGludCBfZ2xfcmVnaXN0ZXJfZHVwIChpbnQgb2xkZmQsIGludCBuZXdmZCk7CitfR0xfRVhURVJOX0MgY29uc3QgY2hhciAqX2dsX2RpcmVjdG9yeV9uYW1lIChpbnQgZmQpOworCisjIGVsc2UKKyMgIGlmICFASEFWRV9ERUNMX0ZDSERJUkAKK19HTF9GVU5DREVDTF9TWVMgKGZjaGRpciwgaW50LCAoaW50IC8qZmQqLykpOworIyAgZW5kaWYKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZjaGRpciwgaW50LCAoaW50IC8qZmQqLykpOworX0dMX0NYWEFMSUFTV0FSTiAoZmNoZGlyKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZmNoZGlyCisjIGlmIEhBVkVfUkFXX0RFQ0xfRkNIRElSCitfR0xfV0FSTl9PTl9VU0UgKGZjaGRpciwgImZjaGRpciBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZmNoZGlyIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfRkNIT1dOQVRACisjIGlmIEBSRVBMQUNFX0ZDSE9XTkFUQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmY2hvd25hdAorIyAgIGRlZmluZSBmY2hvd25hdCBycGxfZmNob3duYXQKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmY2hvd25hdCwgaW50LCAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZF90IG93bmVyLCBnaWRfdCBncm91cCwgaW50IGZsYWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZmNob3duYXQsIGludCwgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWRfdCBvd25lciwgZ2lkX3QgZ3JvdXAsIGludCBmbGFnKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9GQ0hPV05BVEAKK19HTF9GVU5DREVDTF9TWVMgKGZjaG93bmF0LCBpbnQsIChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkX3Qgb3duZXIsIGdpZF90IGdyb3VwLCBpbnQgZmxhZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZmNob3duYXQsIGludCwgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWRfdCBvd25lciwgZ2lkX3QgZ3JvdXAsIGludCBmbGFnKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmY2hvd25hdCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZjaG93bmF0CisjIGlmIEhBVkVfUkFXX0RFQ0xfRkNIT1dOQVQKK19HTF9XQVJOX09OX1VTRSAoZmNob3duYXQsICJmY2hvd25hdCBpcyBub3QgcG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBvcGVuYXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9GREFUQVNZTkNACisvKiBTeW5jaHJvbml6ZSBjaGFuZ2VzIHRvIGEgZmlsZS4KKyAgIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSAtMSBhbmQgZXJybm8gc2V0LgorICAgU2VlIFBPU0lYOjIwMDggc3BlY2lmaWNhdGlvbgorICAgPGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Z1bmN0aW9ucy9mZGF0YXN5bmMuaHRtbD4uICAqLworIyBpZiAhQEhBVkVfRkRBVEFTWU5DQCB8fCAhQEhBVkVfREVDTF9GREFUQVNZTkNACitfR0xfRlVOQ0RFQ0xfU1lTIChmZGF0YXN5bmMsIGludCwgKGludCBmZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZmRhdGFzeW5jLCBpbnQsIChpbnQgZmQpKTsKK19HTF9DWFhBTElBU1dBUk4gKGZkYXRhc3luYyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZkYXRhc3luYworIyBpZiBIQVZFX1JBV19ERUNMX0ZEQVRBU1lOQworX0dMX1dBUk5fT05fVVNFIChmZGF0YXN5bmMsICJmZGF0YXN5bmMgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZkYXRhc3luYyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX0ZTWU5DQAorLyogU3luY2hyb25pemUgY2hhbmdlcywgaW5jbHVkaW5nIG1ldGFkYXRhLCB0byBhIGZpbGUuCisgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgLTEgYW5kIGVycm5vIHNldC4KKyAgIFNlZSBQT1NJWDoyMDA4IHNwZWNpZmljYXRpb24KKyAgIDxodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9mdW5jdGlvbnMvZnN5bmMuaHRtbD4uICAqLworIyBpZiAhQEhBVkVfRlNZTkNACitfR0xfRlVOQ0RFQ0xfU1lTIChmc3luYywgaW50LCAoaW50IGZkKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmc3luYywgaW50LCAoaW50IGZkKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChmc3luYyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZzeW5jCisjIGlmIEhBVkVfUkFXX0RFQ0xfRlNZTkMKK19HTF9XQVJOX09OX1VTRSAoZnN5bmMsICJmc3luYyBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZnN5bmMgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9GVFJVTkNBVEVACisvKiBDaGFuZ2UgdGhlIHNpemUgb2YgdGhlIGZpbGUgdG8gd2hpY2ggRkQgaXMgb3BlbmVkIHRvIGJlY29tZSBlcXVhbCB0byBMRU5HVEguCisgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgLTEgYW5kIGVycm5vIHNldC4KKyAgIFNlZSB0aGUgUE9TSVg6MjAwOCBzcGVjaWZpY2F0aW9uCisgICA8aHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvZnVuY3Rpb25zL2Z0cnVuY2F0ZS5odG1sPi4gICovCisjIGlmIEBSRVBMQUNFX0ZUUlVOQ0FURUAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZnRydW5jYXRlCisjICAgZGVmaW5lIGZ0cnVuY2F0ZSBycGxfZnRydW5jYXRlCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZnRydW5jYXRlLCBpbnQsIChpbnQgZmQsIG9mZl90IGxlbmd0aCkpOworX0dMX0NYWEFMSUFTX1JQTCAoZnRydW5jYXRlLCBpbnQsIChpbnQgZmQsIG9mZl90IGxlbmd0aCkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfRlRSVU5DQVRFQAorX0dMX0ZVTkNERUNMX1NZUyAoZnRydW5jYXRlLCBpbnQsIChpbnQgZmQsIG9mZl90IGxlbmd0aCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZ0cnVuY2F0ZSwgaW50LCAoaW50IGZkLCBvZmZfdCBsZW5ndGgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZ0cnVuY2F0ZSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZ0cnVuY2F0ZQorIyBpZiBIQVZFX1JBV19ERUNMX0ZUUlVOQ0FURQorX0dMX1dBUk5fT05fVVNFIChmdHJ1bmNhdGUsICJmdHJ1bmNhdGUgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZ0cnVuY2F0ZSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX0dFVENXREAKKy8qIEdldCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSwgYW5kIHB1dCBpdCBpbiBTSVpFIGJ5dGVzCisgICBvZiBCVUYuCisgICBSZXR1cm4gQlVGIGlmIHN1Y2Nlc3NmdWwsIG9yIE5VTEwgaWYgdGhlIGRpcmVjdG9yeSBjb3VsZG4ndCBiZSBkZXRlcm1pbmVkCisgICBvciBTSVpFIHdhcyB0b28gc21hbGwuCisgICBTZWUgdGhlIFBPU0lYOjIwMDggc3BlY2lmaWNhdGlvbgorICAgPGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Z1bmN0aW9ucy9nZXRjd2QuaHRtbD4uCisgICBBZGRpdGlvbmFsbHksIHRoZSBnbnVsaWIgbW9kdWxlICdnZXRjd2QnIGd1YXJhbnRlZXMgdGhlIGZvbGxvd2luZyBHTlUKKyAgIGV4dGVuc2lvbjogSWYgQlVGIGlzIE5VTEwsIGFuIGFycmF5IGlzIGFsbG9jYXRlZCB3aXRoICdtYWxsb2MnOyB0aGUgYXJyYXkKKyAgIGlzIFNJWkUgYnl0ZXMgbG9uZywgdW5sZXNzIFNJWkUgPT0gMCwgaW4gd2hpY2ggY2FzZSBpdCBpcyBhcyBiaWcgYXMKKyAgIG5lY2Vzc2FyeS4gICovCisjIGlmIEBSRVBMQUNFX0dFVENXREAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGdldGN3ZCBycGxfZ2V0Y3dkCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZ2V0Y3dkLCBjaGFyICosIChjaGFyICpidWYsIHNpemVfdCBzaXplKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChnZXRjd2QsIGNoYXIgKiwgKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpKTsKKyMgZWxzZQorLyogTmVlZCB0byBjYXN0LCBiZWNhdXNlIG9uIG1pbmd3LCB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUuICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUIChnZXRjd2QsIGNoYXIgKiwgKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGdldGN3ZCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGdldGN3ZAorIyBpZiBIQVZFX1JBV19ERUNMX0dFVENXRAorX0dMX1dBUk5fT05fVVNFIChnZXRjd2QsICJnZXRjd2QgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGdldGN3ZCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX0dFVERPTUFJTk5BTUVACisvKiBSZXR1cm4gdGhlIE5JUyBkb21haW4gbmFtZSBvZiB0aGUgbWFjaGluZS4KKyAgIFdBUk5JTkchIFRoZSBOSVMgZG9tYWluIG5hbWUgaXMgdW5yZWxhdGVkIHRvIHRoZSBmdWxseSBxdWFsaWZpZWQgaG9zdCBuYW1lCisgICAgICAgICAgICBvZiB0aGUgbWFjaGluZS4gIEl0IGlzIGFsc28gdW5yZWxhdGVkIHRvIGVtYWlsIGFkZHJlc3Nlcy4KKyAgIFdBUk5JTkchIFRoZSBOSVMgZG9tYWluIG5hbWUgaXMgdXN1YWxseSB0aGUgZW1wdHkgc3RyaW5nIG9yICIobm9uZSkiIHdoZW4KKyAgICAgICAgICAgIG5vdCB1c2luZyBOSVMuCisKKyAgIFB1dCB1cCB0byBMRU4gYnl0ZXMgb2YgdGhlIE5JUyBkb21haW4gbmFtZSBpbnRvIE5BTUUuCisgICBOdWxsIHRlcm1pbmF0ZSBpdCBpZiB0aGUgbmFtZSBpcyBzaG9ydGVyIHRoYW4gTEVOLgorICAgSWYgdGhlIE5JUyBkb21haW4gbmFtZSBpcyBsb25nZXIgdGhhbiBMRU4sIHNldCBlcnJubyA9IEVJTlZBTCBhbmQgcmV0dXJuIC0xLgorICAgUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIHNldCBlcnJubyBhbmQgcmV0dXJuIC0xLiAgKi8KKyMgaWYgQFJFUExBQ0VfR0VURE9NQUlOTkFNRUAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZ2V0ZG9tYWlubmFtZQorIyAgIGRlZmluZSBnZXRkb21haW5uYW1lIHJwbF9nZXRkb21haW5uYW1lCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZ2V0ZG9tYWlubmFtZSwgaW50LCAoY2hhciAqbmFtZSwgc2l6ZV90IGxlbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKGdldGRvbWFpbm5hbWUsIGludCwgKGNoYXIgKm5hbWUsIHNpemVfdCBsZW4pKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0RFQ0xfR0VURE9NQUlOTkFNRUAKK19HTF9GVU5DREVDTF9TWVMgKGdldGRvbWFpbm5hbWUsIGludCwgKGNoYXIgKm5hbWUsIHNpemVfdCBsZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZ2V0ZG9tYWlubmFtZSwgaW50LCAoY2hhciAqbmFtZSwgc2l6ZV90IGxlbikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZ2V0ZG9tYWlubmFtZSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGdldGRvbWFpbm5hbWUKKyMgaWYgSEFWRV9SQVdfREVDTF9HRVRET01BSU5OQU1FCitfR0xfV0FSTl9PTl9VU0UgKGdldGRvbWFpbm5hbWUsICJnZXRkb21haW5uYW1lIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBnZXRkb21haW5uYW1lIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfR0VURFRBQkxFU0laRUAKKy8qIFJldHVybiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZmlsZSBkZXNjcmlwdG9ycyBpbiB0aGUgY3VycmVudCBwcm9jZXNzLgorICAgSW4gUE9TSVgsIHRoaXMgaXMgc2FtZSBhcyBzeXNjb25mIChfU0NfT1BFTl9NQVgpLiAgKi8KKyMgaWYgIUBIQVZFX0dFVERUQUJMRVNJWkVACitfR0xfRlVOQ0RFQ0xfU1lTIChnZXRkdGFibGVzaXplLCBpbnQsICh2b2lkKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChnZXRkdGFibGVzaXplLCBpbnQsICh2b2lkKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChnZXRkdGFibGVzaXplKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZ2V0ZHRhYmxlc2l6ZQorIyBpZiBIQVZFX1JBV19ERUNMX0dFVERUQUJMRVNJWkUKK19HTF9XQVJOX09OX1VTRSAoZ2V0ZHRhYmxlc2l6ZSwgImdldGR0YWJsZXNpemUgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGdldGR0YWJsZXNpemUgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9HRVRHUk9VUFNACisvKiBSZXR1cm4gdGhlIHN1cHBsZW1lbnRhbCBncm91cHMgdGhhdCB0aGUgY3VycmVudCBwcm9jZXNzIGJlbG9uZ3MgdG8uCisgICBJdCBpcyB1bnNwZWNpZmllZCB3aGV0aGVyIHRoZSBlZmZlY3RpdmUgZ3JvdXAgaWQgaXMgaW4gdGhlIGxpc3QuCisgICBJZiBOIGlzIDAsIHJldHVybiB0aGUgZ3JvdXAgY291bnQ7IG90aGVyd2lzZSwgTiBkZXNjcmliZXMgaG93IG1hbnkKKyAgIGVudHJpZXMgYXJlIGF2YWlsYWJsZSBpbiBHUk9VUFMuICBSZXR1cm4gLTEgYW5kIHNldCBlcnJubyBpZiBOIGlzCisgICBub3QgMCBhbmQgbm90IGxhcmdlIGVub3VnaC4gIEZhaWxzIHdpdGggRU5PU1lTIG9uIHNvbWUgc3lzdGVtcy4gICovCisjIGlmIEBSRVBMQUNFX0dFVEdST1VQU0AKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZ2V0Z3JvdXBzCisjICAgZGVmaW5lIGdldGdyb3VwcyBycGxfZ2V0Z3JvdXBzCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZ2V0Z3JvdXBzLCBpbnQsIChpbnQgbiwgZ2lkX3QgKmdyb3VwcykpOworX0dMX0NYWEFMSUFTX1JQTCAoZ2V0Z3JvdXBzLCBpbnQsIChpbnQgbiwgZ2lkX3QgKmdyb3VwcykpOworIyBlbHNlCisjICBpZiAhQEhBVkVfR0VUR1JPVVBTQAorX0dMX0ZVTkNERUNMX1NZUyAoZ2V0Z3JvdXBzLCBpbnQsIChpbnQgbiwgZ2lkX3QgKmdyb3VwcykpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGdldGdyb3VwcywgaW50LCAoaW50IG4sIGdpZF90ICpncm91cHMpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGdldGdyb3Vwcyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGdldGdyb3VwcworIyBpZiBIQVZFX1JBV19ERUNMX0dFVEdST1VQUworX0dMX1dBUk5fT05fVVNFIChnZXRncm91cHMsICJnZXRncm91cHMgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGdldGdyb3VwcyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX0dFVEhPU1ROQU1FQAorLyogUmV0dXJuIHRoZSBzdGFuZGFyZCBob3N0IG5hbWUgb2YgdGhlIG1hY2hpbmUuCisgICBXQVJOSU5HISBUaGUgaG9zdCBuYW1lIG1heSBvciBtYXkgbm90IGJlIGZ1bGx5IHF1YWxpZmllZC4KKworICAgUHV0IHVwIHRvIExFTiBieXRlcyBvZiB0aGUgaG9zdCBuYW1lIGludG8gTkFNRS4KKyAgIE51bGwgdGVybWluYXRlIGl0IGlmIHRoZSBuYW1lIGlzIHNob3J0ZXIgdGhhbiBMRU4uCisgICBJZiB0aGUgaG9zdCBuYW1lIGlzIGxvbmdlciB0aGFuIExFTiwgc2V0IGVycm5vID0gRUlOVkFMIGFuZCByZXR1cm4gLTEuCisgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2Ugc2V0IGVycm5vIGFuZCByZXR1cm4gLTEuICAqLworIyBpZiBAVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBnZXRob3N0bmFtZQorIyAgIGRlZmluZSBnZXRob3N0bmFtZSBycGxfZ2V0aG9zdG5hbWUKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChnZXRob3N0bmFtZSwgaW50LCAoY2hhciAqbmFtZSwgc2l6ZV90IGxlbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChnZXRob3N0bmFtZSwgaW50LCAoY2hhciAqbmFtZSwgc2l6ZV90IGxlbikpOworIyBlbHNlCisjICBpZiAhQEhBVkVfR0VUSE9TVE5BTUVACitfR0xfRlVOQ0RFQ0xfU1lTIChnZXRob3N0bmFtZSwgaW50LCAoY2hhciAqbmFtZSwgc2l6ZV90IGxlbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorLyogTmVlZCB0byBjYXN0LCBiZWNhdXNlIG9uIFNvbGFyaXMgMTAgYW5kIE9TRi8xIDUuMSBzeXN0ZW1zLCB0aGUgc2Vjb25kCisgICBwYXJhbWV0ZXIgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4uICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUIChnZXRob3N0bmFtZSwgaW50LCAoY2hhciAqbmFtZSwgc2l6ZV90IGxlbikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZ2V0aG9zdG5hbWUpOworI2VsaWYgQFVOSVNURF9IX0hBVkVfV0lOU09DSzJfSEAKKyMgdW5kZWYgZ2V0aG9zdG5hbWUKKyMgZGVmaW5lIGdldGhvc3RuYW1lIGdldGhvc3RuYW1lX3VzZWRfd2l0aG91dF9yZXF1ZXN0aW5nX2dudWxpYl9tb2R1bGVfZ2V0aG9zdG5hbWUKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZ2V0aG9zdG5hbWUKKyMgaWYgSEFWRV9SQVdfREVDTF9HRVRIT1NUTkFNRQorX0dMX1dBUk5fT05fVVNFIChnZXRob3N0bmFtZSwgImdldGhvc3RuYW1lIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBnZXRob3N0bmFtZSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX0dFVExPR0lOQAorLyogUmV0dXJucyB0aGUgdXNlcidzIGxvZ2luIG5hbWUsIG9yIE5VTEwgaWYgaXQgY2Fubm90IGJlIGZvdW5kLiAgVXBvbiBlcnJvciwKKyAgIHJldHVybnMgTlVMTCB3aXRoIGVycm5vIHNldC4KKworICAgU2VlIDxodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjN4c2gvZ2V0bG9naW4uaHRtbD4uCisKKyAgIE1vc3QgcHJvZ3JhbXMgZG9uJ3QgbmVlZCB0byB1c2UgdGhpcyBmdW5jdGlvbiwgYmVjYXVzZSB0aGUgaW5mb3JtYXRpb24gaXMKKyAgIGF2YWlsYWJsZSB0aHJvdWdoIGVudmlyb25tZW50IHZhcmlhYmxlczoKKyAgICAgJHtMT0dOQU1FLSRVU0VSfSAgICAgICAgb24gVW5peCBwbGF0Zm9ybXMsCisgICAgICRVU0VSTkFNRSAgICAgICAgICAgICAgIG9uIG5hdGl2ZSBXaW5kb3dzIHBsYXRmb3Jtcy4KKyAqLworIyBpZiAhQEhBVkVfR0VUTE9HSU5ACitfR0xfRlVOQ0RFQ0xfU1lTIChnZXRsb2dpbiwgY2hhciAqLCAodm9pZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZ2V0bG9naW4sIGNoYXIgKiwgKHZvaWQpKTsKK19HTF9DWFhBTElBU1dBUk4gKGdldGxvZ2luKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZ2V0bG9naW4KKyMgaWYgSEFWRV9SQVdfREVDTF9HRVRMT0dJTgorX0dMX1dBUk5fT05fVVNFIChnZXRsb2dpbiwgImdldGxvZ2luIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBnZXRsb2dpbiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX0dFVExPR0lOX1JACisvKiBDb3BpZXMgdGhlIHVzZXIncyBsb2dpbiBuYW1lIHRvIE5BTUUuCisgICBUaGUgYXJyYXkgcG9pbnRlZCB0byBieSBOQU1FIGhhcyByb29tIGZvciBTSVpFIGJ5dGVzLgorCisgICBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bC4gIFVwb24gZXJyb3IsIGFuIGVycm9yIG51bWJlciBpcyByZXR1cm5lZCwgb3IgLTEgaW4KKyAgIHRoZSBjYXNlIHRoYXQgdGhlIGxvZ2luIG5hbWUgY2Fubm90IGJlIGZvdW5kIGJ1dCBubyBzcGVjaWZpYyBlcnJvciBpcworICAgcHJvdmlkZWQgKHRoaXMgY2FzZSBpcyBob3BlZnVsbHkgcmFyZSBidXQgaXMgbGVmdCBvcGVuIGJ5IHRoZSBQT1NJWCBzcGVjKS4KKworICAgU2VlIDxodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjN4c2gvZ2V0bG9naW4uaHRtbD4uCisKKyAgIE1vc3QgcHJvZ3JhbXMgZG9uJ3QgbmVlZCB0byB1c2UgdGhpcyBmdW5jdGlvbiwgYmVjYXVzZSB0aGUgaW5mb3JtYXRpb24gaXMKKyAgIGF2YWlsYWJsZSB0aHJvdWdoIGVudmlyb25tZW50IHZhcmlhYmxlczoKKyAgICAgJHtMT0dOQU1FLSRVU0VSfSAgICAgICAgb24gVW5peCBwbGF0Zm9ybXMsCisgICAgICRVU0VSTkFNRSAgICAgICAgICAgICAgIG9uIG5hdGl2ZSBXaW5kb3dzIHBsYXRmb3Jtcy4KKyAqLworIyBpZiBAUkVQTEFDRV9HRVRMT0dJTl9SQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgZ2V0bG9naW5fciBycGxfZ2V0bG9naW5fcgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGdldGxvZ2luX3IsIGludCwgKGNoYXIgKm5hbWUsIHNpemVfdCBzaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZ2V0bG9naW5fciwgaW50LCAoY2hhciAqbmFtZSwgc2l6ZV90IHNpemUpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0RFQ0xfR0VUTE9HSU5fUkAKK19HTF9GVU5DREVDTF9TWVMgKGdldGxvZ2luX3IsIGludCwgKGNoYXIgKm5hbWUsIHNpemVfdCBzaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKKy8qIE5lZWQgdG8gY2FzdCwgYmVjYXVzZSBvbiBTb2xhcmlzIDEwIHN5c3RlbXMsIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUuICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUIChnZXRsb2dpbl9yLCBpbnQsIChjaGFyICpuYW1lLCBzaXplX3Qgc2l6ZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZ2V0bG9naW5fcik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGdldGxvZ2luX3IKKyMgaWYgSEFWRV9SQVdfREVDTF9HRVRMT0dJTl9SCitfR0xfV0FSTl9PTl9VU0UgKGdldGxvZ2luX3IsICJnZXRsb2dpbl9yIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBnZXRsb2dpbl9yIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfR0VUUEFHRVNJWkVACisjIGlmIEBSRVBMQUNFX0dFVFBBR0VTSVpFQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgZ2V0cGFnZXNpemUgcnBsX2dldHBhZ2VzaXplCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZ2V0cGFnZXNpemUsIGludCwgKHZvaWQpKTsKK19HTF9DWFhBTElBU19SUEwgKGdldHBhZ2VzaXplLCBpbnQsICh2b2lkKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9HRVRQQUdFU0laRUAKKyMgICBpZiAhZGVmaW5lZCBnZXRwYWdlc2l6ZQorLyogVGhpcyBpcyBmb3IgUE9TSVggc3lzdGVtcy4gICovCisjICAgIGlmICFkZWZpbmVkIF9nbF9nZXRwYWdlc2l6ZSAmJiBkZWZpbmVkIF9TQ19QQUdFU0laRQorIyAgICAgaWYgISAoZGVmaW5lZCBfX1ZNUyAmJiBfX1ZNU19WRVIgPCA3MDAwMDAwMCkKKyMgICAgICBkZWZpbmUgX2dsX2dldHBhZ2VzaXplKCkgc3lzY29uZiAoX1NDX1BBR0VTSVpFKQorIyAgICAgZW5kaWYKKyMgICAgZW5kaWYKKy8qIFRoaXMgaXMgZm9yIG9sZGVyIFZNUy4gICovCisjICAgIGlmICFkZWZpbmVkIF9nbF9nZXRwYWdlc2l6ZSAmJiBkZWZpbmVkIF9fVk1TCisjICAgICBpZmRlZiBfX0FMUEhBCisjICAgICAgZGVmaW5lIF9nbF9nZXRwYWdlc2l6ZSgpIDgxOTIKKyMgICAgIGVsc2UKKyMgICAgICBkZWZpbmUgX2dsX2dldHBhZ2VzaXplKCkgNTEyCisjICAgICBlbmRpZgorIyAgICBlbmRpZgorLyogVGhpcyBpcyBmb3IgQmVPUy4gICovCisjICAgIGlmICFkZWZpbmVkIF9nbF9nZXRwYWdlc2l6ZSAmJiBASEFWRV9PU19IQAorIyAgICAgaW5jbHVkZSA8T1MuaD4KKyMgICAgIGlmIGRlZmluZWQgQl9QQUdFX1NJWkUKKyMgICAgICBkZWZpbmUgX2dsX2dldHBhZ2VzaXplKCkgQl9QQUdFX1NJWkUKKyMgICAgIGVuZGlmCisjICAgIGVuZGlmCisvKiBUaGlzIGlzIGZvciBBbWlnYU9TNC4wLiAgKi8KKyMgICAgaWYgIWRlZmluZWQgX2dsX2dldHBhZ2VzaXplICYmIGRlZmluZWQgX19hbWlnYW9zNF9fCisjICAgICBkZWZpbmUgX2dsX2dldHBhZ2VzaXplKCkgMjA0OAorIyAgICBlbmRpZgorLyogVGhpcyBpcyBmb3Igb2xkZXIgVW5peCBzeXN0ZW1zLiAgKi8KKyMgICAgaWYgIWRlZmluZWQgX2dsX2dldHBhZ2VzaXplICYmIEBIQVZFX1NZU19QQVJBTV9IQAorIyAgICAgaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjICAgICBpZmRlZiBFWEVDX1BBR0VTSVpFCisjICAgICAgZGVmaW5lIF9nbF9nZXRwYWdlc2l6ZSgpIEVYRUNfUEFHRVNJWkUKKyMgICAgIGVsc2UKKyMgICAgICBpZmRlZiBOQlBHCisjICAgICAgIGlmbmRlZiBDTFNJWkUKKyMgICAgICAgIGRlZmluZSBDTFNJWkUgMQorIyAgICAgICBlbmRpZgorIyAgICAgICBkZWZpbmUgX2dsX2dldHBhZ2VzaXplKCkgKE5CUEcgKiBDTFNJWkUpCisjICAgICAgZWxzZQorIyAgICAgICBpZmRlZiBOQlBDCisjICAgICAgICBkZWZpbmUgX2dsX2dldHBhZ2VzaXplKCkgTkJQQworIyAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgICAgZGVmaW5lIGdldHBhZ2VzaXplKCkgX2dsX2dldHBhZ2VzaXplICgpCisjICAgIGVsc2UKKyMgICAgIGlmICFHTlVMSUJfZGVmaW5lZF9nZXRwYWdlc2l6ZV9mdW5jdGlvbgorX0dMX1VOSVNURF9JTkxJTkUgaW50CitnZXRwYWdlc2l6ZSAoKQoreworICByZXR1cm4gX2dsX2dldHBhZ2VzaXplICgpOworfQorIyAgICAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9nZXRwYWdlc2l6ZV9mdW5jdGlvbiAxCisjICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgIGVuZGlmCisjICBlbmRpZgorLyogTmVlZCB0byBjYXN0LCBiZWNhdXNlIG9uIEN5Z3dpbiAxLjUueCBzeXN0ZW1zLCB0aGUgcmV0dXJuIHR5cGUgaXMgc2l6ZV90LiAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVCAoZ2V0cGFnZXNpemUsIGludCwgKHZvaWQpKTsKKyMgZW5kaWYKKyMgaWYgQEhBVkVfREVDTF9HRVRQQUdFU0laRUAKK19HTF9DWFhBTElBU1dBUk4gKGdldHBhZ2VzaXplKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZ2V0cGFnZXNpemUKKyMgaWYgSEFWRV9SQVdfREVDTF9HRVRQQUdFU0laRQorX0dMX1dBUk5fT05fVVNFIChnZXRwYWdlc2l6ZSwgImdldHBhZ2VzaXplIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBnZXRwYWdlc2l6ZSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX0dFVFVTRVJTSEVMTEAKKy8qIFJldHVybiB0aGUgbmV4dCB2YWxpZCBsb2dpbiBzaGVsbCBvbiB0aGUgc3lzdGVtLCBvciBOVUxMIHdoZW4gdGhlIGVuZCBvZgorICAgdGhlIGxpc3QgaGFzIGJlZW4gcmVhY2hlZC4gICovCisjIGlmICFASEFWRV9ERUNMX0dFVFVTRVJTSEVMTEAKK19HTF9GVU5DREVDTF9TWVMgKGdldHVzZXJzaGVsbCwgY2hhciAqLCAodm9pZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZ2V0dXNlcnNoZWxsLCBjaGFyICosICh2b2lkKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChnZXR1c2Vyc2hlbGwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBnZXR1c2Vyc2hlbGwKKyMgaWYgSEFWRV9SQVdfREVDTF9HRVRVU0VSU0hFTEwKK19HTF9XQVJOX09OX1VTRSAoZ2V0dXNlcnNoZWxsLCAiZ2V0dXNlcnNoZWxsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBnZXR1c2Vyc2hlbGwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfR0VUVVNFUlNIRUxMQAorLyogUmV3aW5kIHRvIHBvaW50ZXIgdGhhdCBpcyBhZHZhbmNlZCBhdCBlYWNoIGdldHVzZXJzaGVsbCgpIGNhbGwuICAqLworIyBpZiAhQEhBVkVfREVDTF9HRVRVU0VSU0hFTExACitfR0xfRlVOQ0RFQ0xfU1lTIChzZXR1c2Vyc2hlbGwsIHZvaWQsICh2b2lkKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzZXR1c2Vyc2hlbGwsIHZvaWQsICh2b2lkKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChzZXR1c2Vyc2hlbGwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzZXR1c2Vyc2hlbGwKKyMgaWYgSEFWRV9SQVdfREVDTF9TRVRVU0VSU0hFTEwKK19HTF9XQVJOX09OX1VTRSAoc2V0dXNlcnNoZWxsLCAic2V0dXNlcnNoZWxsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBnZXR1c2Vyc2hlbGwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfR0VUVVNFUlNIRUxMQAorLyogRnJlZSB0aGUgcG9pbnRlciB0aGF0IGlzIGFkdmFuY2VkIGF0IGVhY2ggZ2V0dXNlcnNoZWxsKCkgY2FsbCBhbmQKKyAgIGFzc29jaWF0ZWQgcmVzb3VyY2VzLiAgKi8KKyMgaWYgIUBIQVZFX0RFQ0xfR0VUVVNFUlNIRUxMQAorX0dMX0ZVTkNERUNMX1NZUyAoZW5kdXNlcnNoZWxsLCB2b2lkLCAodm9pZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZW5kdXNlcnNoZWxsLCB2b2lkLCAodm9pZCkpOworX0dMX0NYWEFMSUFTV0FSTiAoZW5kdXNlcnNoZWxsKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZW5kdXNlcnNoZWxsCisjIGlmIEhBVkVfUkFXX0RFQ0xfRU5EVVNFUlNIRUxMCitfR0xfV0FSTl9PTl9VU0UgKGVuZHVzZXJzaGVsbCwgImVuZHVzZXJzaGVsbCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZ2V0dXNlcnNoZWxsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfR1JPVVBfTUVNQkVSQAorLyogRGV0ZXJtaW5lIHdoZXRoZXIgZ3JvdXAgaWQgaXMgaW4gY2FsbGluZyB1c2VyJ3MgZ3JvdXAgbGlzdC4gICovCisjIGlmICFASEFWRV9HUk9VUF9NRU1CRVJACitfR0xfRlVOQ0RFQ0xfU1lTIChncm91cF9tZW1iZXIsIGludCwgKGdpZF90IGdpZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZ3JvdXBfbWVtYmVyLCBpbnQsIChnaWRfdCBnaWQpKTsKK19HTF9DWFhBTElBU1dBUk4gKGdyb3VwX21lbWJlcik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGdyb3VwX21lbWJlcgorIyBpZiBIQVZFX1JBV19ERUNMX0dST1VQX01FTUJFUgorX0dMX1dBUk5fT05fVVNFIChncm91cF9tZW1iZXIsICJncm91cF9tZW1iZXIgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGdyb3VwLW1lbWJlciBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX0lTQVRUWUAKKyMgaWYgQFJFUExBQ0VfSVNBVFRZQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBpc2F0dHkKKyMgICBkZWZpbmUgaXNhdHR5IHJwbF9pc2F0dHkKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChpc2F0dHksIGludCwgKGludCBmZCkpOworX0dMX0NYWEFMSUFTX1JQTCAoaXNhdHR5LCBpbnQsIChpbnQgZmQpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoaXNhdHR5LCBpbnQsIChpbnQgZmQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGlzYXR0eSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGlzYXR0eQorIyBpZiBIQVZFX1JBV19ERUNMX0lTQVRUWQorX0dMX1dBUk5fT05fVVNFIChpc2F0dHksICJpc2F0dHkgaGFzIHBvcnRhYmlsaXR5IHByb2JsZW1zIG9uIG5hdGl2ZSBXaW5kb3dzIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgaXNhdHR5IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfTENIT1dOQAorLyogQ2hhbmdlIHRoZSBvd25lciBvZiBGSUxFIHRvIFVJRCAoaWYgVUlEIGlzIG5vdCAtMSkgYW5kIHRoZSBncm91cCBvZiBGSUxFCisgICB0byBHSUQgKGlmIEdJRCBpcyBub3QgLTEpLiAgRG8gbm90IGZvbGxvdyBzeW1ib2xpYyBsaW5rcy4KKyAgIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSAtMSBhbmQgZXJybm8gc2V0LgorICAgU2VlIHRoZSBQT1NJWDoyMDA4IHNwZWNpZmljYXRpb24KKyAgIDxodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9mdW5jdGlvbnMvbGNob3duLmh0bWw+LiAgKi8KKyMgaWYgQFJFUExBQ0VfTENIT1dOQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBsY2hvd24KKyMgICBkZWZpbmUgbGNob3duIHJwbF9sY2hvd24KKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChsY2hvd24sIGludCwgKGNoYXIgY29uc3QgKmZpbGUsIHVpZF90IG93bmVyLCBnaWRfdCBncm91cCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAobGNob3duLCBpbnQsIChjaGFyIGNvbnN0ICpmaWxlLCB1aWRfdCBvd25lciwgZ2lkX3QgZ3JvdXApKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0xDSE9XTkAKK19HTF9GVU5DREVDTF9TWVMgKGxjaG93biwgaW50LCAoY2hhciBjb25zdCAqZmlsZSwgdWlkX3Qgb3duZXIsIGdpZF90IGdyb3VwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobGNob3duLCBpbnQsIChjaGFyIGNvbnN0ICpmaWxlLCB1aWRfdCBvd25lciwgZ2lkX3QgZ3JvdXApKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGxjaG93bik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGxjaG93bgorIyBpZiBIQVZFX1JBV19ERUNMX0xDSE9XTgorX0dMX1dBUk5fT05fVVNFIChsY2hvd24sICJsY2hvd24gaXMgdW5wb3J0YWJsZSB0byBwcmUtUE9TSVguMS0yMDAxIHN5c3RlbXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBsY2hvd24gZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9MSU5LQAorLyogQ3JlYXRlIGEgbmV3IGhhcmQgbGluayBmb3IgYW4gZXhpc3RpbmcgZmlsZS4KKyAgIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSAtMSBhbmQgZXJybm8gc2V0LgorICAgU2VlIFBPU0lYOjIwMDggc3BlY2lmaWNhdGlvbgorICAgPGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Z1bmN0aW9ucy9saW5rLmh0bWw+LiAgKi8KKyMgaWYgQFJFUExBQ0VfTElOS0AKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGxpbmsgcnBsX2xpbmsKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChsaW5rLCBpbnQsIChjb25zdCBjaGFyICpwYXRoMSwgY29uc3QgY2hhciAqcGF0aDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChsaW5rLCBpbnQsIChjb25zdCBjaGFyICpwYXRoMSwgY29uc3QgY2hhciAqcGF0aDIpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0xJTktACitfR0xfRlVOQ0RFQ0xfU1lTIChsaW5rLCBpbnQsIChjb25zdCBjaGFyICpwYXRoMSwgY29uc3QgY2hhciAqcGF0aDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobGluaywgaW50LCAoY29uc3QgY2hhciAqcGF0aDEsIGNvbnN0IGNoYXIgKnBhdGgyKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChsaW5rKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbGluaworIyBpZiBIQVZFX1JBV19ERUNMX0xJTksKK19HTF9XQVJOX09OX1VTRSAobGluaywgImxpbmsgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGxpbmsgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9MSU5LQVRACisvKiBDcmVhdGUgYSBuZXcgaGFyZCBsaW5rIGZvciBhbiBleGlzdGluZyBmaWxlLCByZWxhdGl2ZSB0byB0d28KKyAgIGRpcmVjdG9yaWVzLiAgRkxBRyBjb250cm9scyB3aGV0aGVyIHN5bWxpbmtzIGFyZSBmb2xsb3dlZC4KKyAgIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSAtMSBhbmQgZXJybm8gc2V0LiAgKi8KKyMgaWYgQFJFUExBQ0VfTElOS0FUQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBsaW5rYXQKKyMgICBkZWZpbmUgbGlua2F0IHJwbF9saW5rYXQKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChsaW5rYXQsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQxLCBjb25zdCBjaGFyICpwYXRoMSwgaW50IGZkMiwgY29uc3QgY2hhciAqcGF0aDIsCisgICAgICAgICAgICAgICAgICAgaW50IGZsYWcpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyLCA0KSkpOworX0dMX0NYWEFMSUFTX1JQTCAobGlua2F0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkMSwgY29uc3QgY2hhciAqcGF0aDEsIGludCBmZDIsIGNvbnN0IGNoYXIgKnBhdGgyLAorICAgICAgICAgICAgICAgICAgIGludCBmbGFnKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9MSU5LQVRACitfR0xfRlVOQ0RFQ0xfU1lTIChsaW5rYXQsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQxLCBjb25zdCBjaGFyICpwYXRoMSwgaW50IGZkMiwgY29uc3QgY2hhciAqcGF0aDIsCisgICAgICAgICAgICAgICAgICAgaW50IGZsYWcpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyLCA0KSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGxpbmthdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZDEsIGNvbnN0IGNoYXIgKnBhdGgxLCBpbnQgZmQyLCBjb25zdCBjaGFyICpwYXRoMiwKKyAgICAgICAgICAgICAgICAgICBpbnQgZmxhZykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobGlua2F0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbGlua2F0CisjIGlmIEhBVkVfUkFXX0RFQ0xfTElOS0FUCitfR0xfV0FSTl9PTl9VU0UgKGxpbmthdCwgImxpbmthdCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbGlua2F0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfTFNFRUtACisvKiBTZXQgdGhlIG9mZnNldCBvZiBGRCByZWxhdGl2ZSB0byBTRUVLX1NFVCwgU0VFS19DVVIsIG9yIFNFRUtfRU5ELgorICAgUmV0dXJuIHRoZSBuZXcgb2Zmc2V0IGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSAtMSBhbmQgZXJybm8gc2V0LgorICAgU2VlIHRoZSBQT1NJWDoyMDA4IHNwZWNpZmljYXRpb24KKyAgIDxodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9mdW5jdGlvbnMvbHNlZWsuaHRtbD4uICAqLworIyBpZiBAUkVQTEFDRV9MU0VFS0AKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGxzZWVrIHJwbF9sc2VlaworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGxzZWVrLCBvZmZfdCwgKGludCBmZCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChsc2Vlaywgb2ZmX3QsIChpbnQgZmQsIG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChsc2Vlaywgb2ZmX3QsIChpbnQgZmQsIG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobHNlZWspOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBsc2VlaworIyBpZiBIQVZFX1JBV19ERUNMX0xTRUVLCitfR0xfV0FSTl9PTl9VU0UgKGxzZWVrLCAibHNlZWsgZG9lcyBub3QgZmFpbCB3aXRoIEVTUElQRSBvbiBwaXBlcyBvbiBzb21lICIKKyAgICAgICAgICAgICAgICAgInN5c3RlbXMgLSB1c2UgZ251bGliIG1vZHVsZSBsc2VlayBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX1BJUEVACisvKiBDcmVhdGUgYSBwaXBlLCBkZWZhdWx0aW5nIHRvIE9fQklOQVJZIG1vZGUuCisgICBTdG9yZSB0aGUgcmVhZC1lbmQgYXMgZmRbMF0gYW5kIHRoZSB3cml0ZS1lbmQgYXMgZmRbMV0uCisgICBSZXR1cm4gMCB1cG9uIHN1Y2Nlc3MsIG9yIC0xIHdpdGggZXJybm8gc2V0IHVwb24gZmFpbHVyZS4gICovCisjIGlmICFASEFWRV9QSVBFQAorX0dMX0ZVTkNERUNMX1NZUyAocGlwZSwgaW50LCAoaW50IGZkWzJdKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocGlwZSwgaW50LCAoaW50IGZkWzJdKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChwaXBlKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcGlwZQorIyBpZiBIQVZFX1JBV19ERUNMX1BJUEUKK19HTF9XQVJOX09OX1VTRSAocGlwZSwgInBpcGUgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBpcGUtcG9zaXggZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9QSVBFMkAKKy8qIENyZWF0ZSBhIHBpcGUsIGFwcGx5aW5nIHRoZSBnaXZlbiBmbGFncyB3aGVuIG9wZW5pbmcgdGhlIHJlYWQtZW5kIG9mIHRoZQorICAgcGlwZSBhbmQgdGhlIHdyaXRlLWVuZCBvZiB0aGUgcGlwZS4KKyAgIFRoZSBmbGFncyBhcmUgYSBiaXRtYXNrLCBwb3NzaWJseSBpbmNsdWRpbmcgT19DTE9FWEVDIChkZWZpbmVkIGluIDxmY250bC5oPikKKyAgIGFuZCBPX1RFWFQsIE9fQklOQVJZIChkZWZpbmVkIGluICJiaW5hcnktaW8uaCIpLgorICAgU3RvcmUgdGhlIHJlYWQtZW5kIGFzIGZkWzBdIGFuZCB0aGUgd3JpdGUtZW5kIGFzIGZkWzFdLgorICAgUmV0dXJuIDAgdXBvbiBzdWNjZXNzLCBvciAtMSB3aXRoIGVycm5vIHNldCB1cG9uIGZhaWx1cmUuCisgICBTZWUgYWxzbyB0aGUgTGludXggbWFuIHBhZ2UgYXQKKyAgIDxodHRwOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL21hbi1wYWdlcy9vbmxpbmUvcGFnZXMvbWFuMi9waXBlMi4yLmh0bWw+LiAgKi8KKyMgaWYgQEhBVkVfUElQRTJACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBwaXBlMiBycGxfcGlwZTIKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwaXBlMiwgaW50LCAoaW50IGZkWzJdLCBpbnQgZmxhZ3MpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwaXBlMiwgaW50LCAoaW50IGZkWzJdLCBpbnQgZmxhZ3MpKTsKKyMgZWxzZQorX0dMX0ZVTkNERUNMX1NZUyAocGlwZTIsIGludCwgKGludCBmZFsyXSwgaW50IGZsYWdzKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1NZUyAocGlwZTIsIGludCwgKGludCBmZFsyXSwgaW50IGZsYWdzKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwaXBlMik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHBpcGUyCisjIGlmIEhBVkVfUkFXX0RFQ0xfUElQRTIKK19HTF9XQVJOX09OX1VTRSAocGlwZTIsICJwaXBlMiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcGlwZTIgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9QUkVBREAKKy8qIFJlYWQgYXQgbW9zdCBCVUZTSVpFIGJ5dGVzIGZyb20gRkQgaW50byBCVUYsIHN0YXJ0aW5nIGF0IE9GRlNFVC4KKyAgIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHBsYWNlZCBpbnRvIEJVRiBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UKKyAgIHNldCBlcnJubyBhbmQgcmV0dXJuIC0xLiAgMCBpbmRpY2F0ZXMgRU9GLgorICAgU2VlIHRoZSBQT1NJWDoyMDA4IHNwZWNpZmljYXRpb24KKyAgIDxodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9mdW5jdGlvbnMvcHJlYWQuaHRtbD4uICAqLworIyBpZiBAUkVQTEFDRV9QUkVBREAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcHJlYWQKKyMgICBkZWZpbmUgcHJlYWQgcnBsX3ByZWFkCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocHJlYWQsIHNzaXplX3QsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBidWZzaXplLCBvZmZfdCBvZmZzZXQpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocHJlYWQsIHNzaXplX3QsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBidWZzaXplLCBvZmZfdCBvZmZzZXQpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX1BSRUFEQAorX0dMX0ZVTkNERUNMX1NZUyAocHJlYWQsIHNzaXplX3QsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBidWZzaXplLCBvZmZfdCBvZmZzZXQpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHByZWFkLCBzc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgYnVmc2l6ZSwgb2ZmX3Qgb2Zmc2V0KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwcmVhZCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHByZWFkCisjIGlmIEhBVkVfUkFXX0RFQ0xfUFJFQUQKK19HTF9XQVJOX09OX1VTRSAocHJlYWQsICJwcmVhZCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcHJlYWQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9QV1JJVEVACisvKiBXcml0ZSBhdCBtb3N0IEJVRlNJWkUgYnl0ZXMgZnJvbSBCVUYgaW50byBGRCwgc3RhcnRpbmcgYXQgT0ZGU0VULgorICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UKKyAgIHNldCBlcnJubyBhbmQgcmV0dXJuIC0xLiAgMCBpbmRpY2F0ZXMgbm90aGluZyB3cml0dGVuLiAgU2VlIHRoZQorICAgUE9TSVg6MjAwOCBzcGVjaWZpY2F0aW9uCisgICA8aHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvZnVuY3Rpb25zL3B3cml0ZS5odG1sPi4gICovCisjIGlmIEBSRVBMQUNFX1BXUklURUAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcHdyaXRlCisjICAgZGVmaW5lIHB3cml0ZSBycGxfcHdyaXRlCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocHdyaXRlLCBzc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgYnVmc2l6ZSwgb2ZmX3Qgb2Zmc2V0KQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHB3cml0ZSwgc3NpemVfdCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUsIG9mZl90IG9mZnNldCkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfUFdSSVRFQAorX0dMX0ZVTkNERUNMX1NZUyAocHdyaXRlLCBzc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgYnVmc2l6ZSwgb2ZmX3Qgb2Zmc2V0KQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwd3JpdGUsIHNzaXplX3QsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBidWZzaXplLCBvZmZfdCBvZmZzZXQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHB3cml0ZSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHB3cml0ZQorIyBpZiBIQVZFX1JBV19ERUNMX1BXUklURQorX0dMX1dBUk5fT05fVVNFIChwd3JpdGUsICJwd3JpdGUgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHB3cml0ZSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX1JFQURACisvKiBSZWFkIHVwIHRvIENPVU5UIGJ5dGVzIGZyb20gZmlsZSBkZXNjcmlwdG9yIEZEIGludG8gdGhlIGJ1ZmZlciBzdGFydGluZworICAgYXQgQlVGLiAgU2VlIHRoZSBQT1NJWDoyMDA4IHNwZWNpZmljYXRpb24KKyAgIDxodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9mdW5jdGlvbnMvcmVhZC5odG1sPi4gICovCisjIGlmIEBSRVBMQUNFX1JFQURACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHJlYWQKKyMgICBkZWZpbmUgcmVhZCBycGxfcmVhZAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHJlYWQsIHNzaXplX3QsIChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHJlYWQsIHNzaXplX3QsIChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KSk7CisjIGVsc2UKKy8qIE5lZWQgdG8gY2FzdCwgYmVjYXVzZSBvbiBtaW5ndywgdGhlIHRoaXJkIHBhcmFtZXRlciBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudAorICAgYW5kIHRoZSByZXR1cm4gdHlwZSBpcyAnaW50Jy4gICovCitfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKHJlYWQsIHNzaXplX3QsIChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChyZWFkKTsKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX1JFQURMSU5LQAorLyogUmVhZCB0aGUgY29udGVudHMgb2YgdGhlIHN5bWJvbGljIGxpbmsgRklMRSBhbmQgcGxhY2UgdGhlIGZpcnN0IEJVRlNJWkUKKyAgIGJ5dGVzIG9mIGl0IGludG8gQlVGLiAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgcGxhY2VkIGludG8gQlVGIGlmCisgICBzdWNjZXNzZnVsLCBvdGhlcndpc2UgLTEgYW5kIGVycm5vIHNldC4KKyAgIFNlZSB0aGUgUE9TSVg6MjAwOCBzcGVjaWZpY2F0aW9uCisgICA8aHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvZnVuY3Rpb25zL3JlYWRsaW5rLmh0bWw+LiAgKi8KKyMgaWYgQFJFUExBQ0VfUkVBRExJTktACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSByZWFkbGluayBycGxfcmVhZGxpbmsKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChyZWFkbGluaywgc3NpemVfdCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBidWZzaXplKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHJlYWRsaW5rLCBzc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX1JFQURMSU5LQAorX0dMX0ZVTkNERUNMX1NZUyAocmVhZGxpbmssIHNzaXplX3QsCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6ZSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocmVhZGxpbmssIHNzaXplX3QsCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6ZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocmVhZGxpbmspOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiByZWFkbGluaworIyBpZiBIQVZFX1JBV19ERUNMX1JFQURMSU5LCitfR0xfV0FSTl9PTl9VU0UgKHJlYWRsaW5rLCAicmVhZGxpbmsgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHJlYWRsaW5rIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfUkVBRExJTktBVEAKKyMgaWYgIUBIQVZFX1JFQURMSU5LQVRACitfR0xfRlVOQ0RFQ0xfU1lTIChyZWFkbGlua2F0LCBzc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3QgbGVuKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMiwgMykpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHJlYWRsaW5rYXQsIHNzaXplX3QsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBsZW4pKTsKK19HTF9DWFhBTElBU1dBUk4gKHJlYWRsaW5rYXQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiByZWFkbGlua2F0CisjIGlmIEhBVkVfUkFXX0RFQ0xfUkVBRExJTktBVAorX0dMX1dBUk5fT05fVVNFIChyZWFkbGlua2F0LCAicmVhZGxpbmthdCBpcyBub3QgcG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSByZWFkbGlua2F0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfUk1ESVJACisvKiBSZW1vdmUgdGhlIGRpcmVjdG9yeSBESVIuICAqLworIyBpZiBAUkVQTEFDRV9STURJUkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHJtZGlyIHJwbF9ybWRpcgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHJtZGlyLCBpbnQsIChjaGFyIGNvbnN0ICpuYW1lKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocm1kaXIsIGludCwgKGNoYXIgY29uc3QgKm5hbWUpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAocm1kaXIsIGludCwgKGNoYXIgY29uc3QgKm5hbWUpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHJtZGlyKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcm1kaXIKKyMgaWYgSEFWRV9SQVdfREVDTF9STURJUgorX0dMX1dBUk5fT05fVVNFIChybWRpciwgInJtZGlyIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBybWRpciBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX1NFVEhPU1ROQU1FQAorLyogU2V0IHRoZSBob3N0IG5hbWUgb2YgdGhlIG1hY2hpbmUuCisgICBUaGUgaG9zdCBuYW1lIG1heSBvciBtYXkgbm90IGJlIGZ1bGx5IHF1YWxpZmllZC4KKworICAgUHV0IExFTiBieXRlcyBvZiBOQU1FIGludG8gdGhlIGhvc3QgbmFtZS4KKyAgIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSwgc2V0IGVycm5vIGFuZCByZXR1cm4gLTEuCisKKyAgIFBsYXRmb3JtcyB3aXRoIG5vIGFiaWxpdHkgdG8gc2V0IHRoZSBob3N0bmFtZSByZXR1cm4gLTEgYW5kIHNldAorICAgZXJybm8gPSBFTk9TWVMuICAqLworIyBpZiAhQEhBVkVfU0VUSE9TVE5BTUVAIHx8ICFASEFWRV9ERUNMX1NFVEhPU1ROQU1FQAorX0dMX0ZVTkNERUNMX1NZUyAoc2V0aG9zdG5hbWUsIGludCwgKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBsZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorLyogTmVlZCB0byBjYXN0LCBiZWNhdXNlIG9uIFNvbGFyaXMgMTEgMjAxMS0xMCwgTWFjIE9TIFggMTAuNSwgSVJJWCA2LjUKKyAgIGFuZCBGcmVlQlNEIDYuNCB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyBpbnQuICBPbiBTb2xhcmlzIDExCisgICAyMDExLTEwLCB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIG5vdCBjb25zdC4gICovCitfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKHNldGhvc3RuYW1lLCBpbnQsIChjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbGVuKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChzZXRob3N0bmFtZSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHNldGhvc3RuYW1lCisjIGlmIEhBVkVfUkFXX0RFQ0xfU0VUSE9TVE5BTUUKK19HTF9XQVJOX09OX1VTRSAoc2V0aG9zdG5hbWUsICJzZXRob3N0bmFtZSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc2V0aG9zdG5hbWUgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9TTEVFUEAKKy8qIFBhdXNlIHRoZSBleGVjdXRpb24gb2YgdGhlIGN1cnJlbnQgdGhyZWFkIGZvciBOIHNlY29uZHMuCisgICBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBsZWZ0IHRvIHNsZWVwLgorICAgU2VlIHRoZSBQT1NJWDoyMDA4IHNwZWNpZmljYXRpb24KKyAgIDxodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9mdW5jdGlvbnMvc2xlZXAuaHRtbD4uICAqLworIyBpZiBAUkVQTEFDRV9TTEVFUEAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgc2xlZXAKKyMgICBkZWZpbmUgc2xlZXAgcnBsX3NsZWVwCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc2xlZXAsIHVuc2lnbmVkIGludCwgKHVuc2lnbmVkIGludCBuKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzbGVlcCwgdW5zaWduZWQgaW50LCAodW5zaWduZWQgaW50IG4pKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX1NMRUVQQAorX0dMX0ZVTkNERUNMX1NZUyAoc2xlZXAsIHVuc2lnbmVkIGludCwgKHVuc2lnbmVkIGludCBuKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc2xlZXAsIHVuc2lnbmVkIGludCwgKHVuc2lnbmVkIGludCBuKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzbGVlcCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHNsZWVwCisjIGlmIEhBVkVfUkFXX0RFQ0xfU0xFRVAKK19HTF9XQVJOX09OX1VTRSAoc2xlZXAsICJzbGVlcCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc2xlZXAgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9TWU1MSU5LQAorIyBpZiBAUkVQTEFDRV9TWU1MSU5LQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBzeW1saW5rCisjICAgZGVmaW5lIHN5bWxpbmsgcnBsX3N5bWxpbmsKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChzeW1saW5rLCBpbnQsIChjaGFyIGNvbnN0ICpjb250ZW50cywgY2hhciBjb25zdCAqZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHN5bWxpbmssIGludCwgKGNoYXIgY29uc3QgKmNvbnRlbnRzLCBjaGFyIGNvbnN0ICpmaWxlKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9TWU1MSU5LQAorX0dMX0ZVTkNERUNMX1NZUyAoc3ltbGluaywgaW50LCAoY2hhciBjb25zdCAqY29udGVudHMsIGNoYXIgY29uc3QgKmZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc3ltbGluaywgaW50LCAoY2hhciBjb25zdCAqY29udGVudHMsIGNoYXIgY29uc3QgKmZpbGUpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHN5bWxpbmspOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzeW1saW5rCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1lNTElOSworX0dMX1dBUk5fT05fVVNFIChzeW1saW5rLCAic3ltbGluayBpcyBub3QgcG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzeW1saW5rIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfU1lNTElOS0FUQAorIyBpZiAhQEhBVkVfU1lNTElOS0FUQAorX0dMX0ZVTkNERUNMX1NZUyAoc3ltbGlua2F0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoY2hhciBjb25zdCAqY29udGVudHMsIGludCBmZCwgY2hhciBjb25zdCAqZmlsZSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDMpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzeW1saW5rYXQsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyIGNvbnN0ICpjb250ZW50cywgaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChzeW1saW5rYXQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzeW1saW5rYXQKKyMgaWYgSEFWRV9SQVdfREVDTF9TWU1MSU5LQVQKK19HTF9XQVJOX09OX1VTRSAoc3ltbGlua2F0LCAic3ltbGlua2F0IGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHN5bWxpbmthdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX1RUWU5BTUVfUkAKKy8qIFN0b3JlIGF0IG1vc3QgQlVGTEVOIGNoYXJhY3RlcnMgb2YgdGhlIHBhdGhuYW1lIG9mIHRoZSB0ZXJtaW5hbCBGRCBpcworICAgb3BlbiBvbiBpbiBCVUYuICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgYW4gZXJyb3IgbnVtYmVyLiAgKi8KKyMgaWYgQFJFUExBQ0VfVFRZTkFNRV9SQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiB0dHluYW1lX3IKKyMgICBkZWZpbmUgdHR5bmFtZV9yIHJwbF90dHluYW1lX3IKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh0dHluYW1lX3IsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHR0eW5hbWVfciwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9ERUNMX1RUWU5BTUVfUkAKK19HTF9GVU5DREVDTF9TWVMgKHR0eW5hbWVfciwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKSBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHR0eW5hbWVfciwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOICh0dHluYW1lX3IpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB0dHluYW1lX3IKKyMgaWYgSEFWRV9SQVdfREVDTF9UVFlOQU1FX1IKK19HTF9XQVJOX09OX1VTRSAodHR5bmFtZV9yLCAidHR5bmFtZV9yIGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHR0eW5hbWVfciBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX1VOTElOS0AKKyMgaWYgQFJFUExBQ0VfVU5MSU5LQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiB1bmxpbmsKKyMgICBkZWZpbmUgdW5saW5rIHJwbF91bmxpbmsKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh1bmxpbmssIGludCwgKGNoYXIgY29uc3QgKmZpbGUpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMICh1bmxpbmssIGludCwgKGNoYXIgY29uc3QgKmZpbGUpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAodW5saW5rLCBpbnQsIChjaGFyIGNvbnN0ICpmaWxlKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOICh1bmxpbmspOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB1bmxpbmsKKyMgaWYgSEFWRV9SQVdfREVDTF9VTkxJTksKK19HTF9XQVJOX09OX1VTRSAodW5saW5rLCAidW5saW5rIGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHVubGluayBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX1VOTElOS0FUQAorIyBpZiBAUkVQTEFDRV9VTkxJTktBVEAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgdW5saW5rYXQKKyMgICBkZWZpbmUgdW5saW5rYXQgcnBsX3VubGlua2F0CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAodW5saW5rYXQsIGludCwgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgaW50IGZsYWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAodW5saW5rYXQsIGludCwgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgaW50IGZsYWcpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX1VOTElOS0FUQAorX0dMX0ZVTkNERUNMX1NZUyAodW5saW5rYXQsIGludCwgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgaW50IGZsYWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHVubGlua2F0LCBpbnQsIChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGUsIGludCBmbGFnKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOICh1bmxpbmthdCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHVubGlua2F0CisjIGlmIEhBVkVfUkFXX0RFQ0xfVU5MSU5LQVQKK19HTF9XQVJOX09OX1VTRSAodW5saW5rYXQsICJ1bmxpbmthdCBpcyBub3QgcG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBvcGVuYXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9VU0xFRVBACisvKiBQYXVzZSB0aGUgZXhlY3V0aW9uIG9mIHRoZSBjdXJyZW50IHRocmVhZCBmb3IgTiBtaWNyb3NlY29uZHMuCisgICBSZXR1cm5zIDAgb24gY29tcGxldGlvbiwgb3IgLTEgb24gcmFuZ2UgZXJyb3IuCisgICBTZWUgdGhlIFBPU0lYOjIwMDEgc3BlY2lmaWNhdGlvbgorICAgPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hzaC91c2xlZXAuaHRtbD4uICAqLworIyBpZiBAUkVQTEFDRV9VU0xFRVBACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHVzbGVlcAorIyAgIGRlZmluZSB1c2xlZXAgcnBsX3VzbGVlcAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHVzbGVlcCwgaW50LCAodXNlY29uZHNfdCBuKSk7CitfR0xfQ1hYQUxJQVNfUlBMICh1c2xlZXAsIGludCwgKHVzZWNvbmRzX3QgbikpOworIyBlbHNlCisjICBpZiAhQEhBVkVfVVNMRUVQQAorX0dMX0ZVTkNERUNMX1NZUyAodXNsZWVwLCBpbnQsICh1c2Vjb25kc190IG4pKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh1c2xlZXAsIGludCwgKHVzZWNvbmRzX3QgbikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAodXNsZWVwKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgdXNsZWVwCisjIGlmIEhBVkVfUkFXX0RFQ0xfVVNMRUVQCitfR0xfV0FSTl9PTl9VU0UgKHVzbGVlcCwgInVzbGVlcCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgdXNsZWVwIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfV1JJVEVACisvKiBXcml0ZSB1cCB0byBDT1VOVCBieXRlcyBzdGFydGluZyBhdCBCVUYgdG8gZmlsZSBkZXNjcmlwdG9yIEZELgorICAgU2VlIHRoZSBQT1NJWDoyMDA4IHNwZWNpZmljYXRpb24KKyAgIDxodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9mdW5jdGlvbnMvd3JpdGUuaHRtbD4uICAqLworIyBpZiBAUkVQTEFDRV9XUklURUAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgd3JpdGUKKyMgICBkZWZpbmUgd3JpdGUgcnBsX3dyaXRlCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAod3JpdGUsIHNzaXplX3QsIChpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMICh3cml0ZSwgc3NpemVfdCwgKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpKTsKKyMgZWxzZQorLyogTmVlZCB0byBjYXN0LCBiZWNhdXNlIG9uIG1pbmd3LCB0aGUgdGhpcmQgcGFyYW1ldGVyIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50CisgICBhbmQgdGhlIHJldHVybiB0eXBlIGlzICdpbnQnLiAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVCAod3JpdGUsIHNzaXplX3QsIChpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOICh3cml0ZSk7CisjZW5kaWYKKworX0dMX0lOTElORV9IRUFERVJfRU5ECisKKyNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfVU5JU1REX0ggKi8KKyNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfVU5JU1REX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi91bml0eXBlcy5pbi5oIGIvbGliL3VuaXR5cGVzLmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY0MmI3YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi91bml0eXBlcy5pbi5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qIEVsZW1lbnRhcnkgdHlwZXMgYW5kIG1hY3JvcyBmb3IgdGhlIEdOVSBVbmlTdHJpbmcgbGlicmFyeS4KKyAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNS0yMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX1VOSVRZUEVTX0gKKyNkZWZpbmUgX1VOSVRZUEVTX0gKKworLyogR2V0IHVpbnQ4X3QsIHVpbnQxNl90LCB1aW50MzJfdC4gICovCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKy8qIFR5cGUgcmVwcmVzZW50aW5nIGEgVW5pY29kZSBjaGFyYWN0ZXIuICAqLwordHlwZWRlZiB1aW50MzJfdCB1Y3M0X3Q7CisKKy8qIEF0dHJpYnV0ZSBvZiBhIGZ1bmN0aW9uIHdob3NlIHJlc3VsdCBkZXBlbmRzIG9ubHkgb24gdGhlIGFyZ3VtZW50cworICAgKG5vdCBwb2ludGVycyEpIGFuZCB3aGljaCBoYXMgbm8gc2lkZSBlZmZlY3RzLiAgKi8KKyNpZm5kZWYgX1VDX0FUVFJJQlVURV9DT05TVAorIyBpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTUpCisjICBkZWZpbmUgX1VDX0FUVFJJQlVURV9DT05TVCBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSkKKyMgZWxzZQorIyAgZGVmaW5lIF9VQ19BVFRSSUJVVEVfQ09OU1QKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBBdHRyaWJ1dGUgb2YgYSBmdW5jdGlvbiB3aG9zZSByZXN1bHQgZGVwZW5kcyBvbmx5IG9uIHRoZSBhcmd1bWVudHMKKyAgIChwb3NzaWJseSBwb2ludGVycykgYW5kIGdsb2JhbCBtZW1vcnksIGFuZCB3aGljaCBoYXMgbm8gc2lkZSBlZmZlY3RzLiAgKi8KKyNpZm5kZWYgX1VDX0FUVFJJQlVURV9QVVJFCisjIGlmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NikKKyMgIGRlZmluZSBfVUNfQVRUUklCVVRFX1BVUkUgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSkKKyMgZWxzZQorIyAgZGVmaW5lIF9VQ19BVFRSSUJVVEVfUFVSRQorIyBlbmRpZgorI2VuZGlmCisKKyNlbmRpZiAvKiBfVU5JVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL3VuaXdpZHRoLmluLmggYi9saWIvdW5pd2lkdGguaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTBjZTE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3VuaXdpZHRoLmluLmgKQEAgLTAsMCArMSw3MiBAQAorLyogRGlzcGxheSB3aWR0aCBmdW5jdGlvbnMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgMjAwNSwgMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBfVU5JV0lEVEhfSAorI2RlZmluZSBfVU5JV0lEVEhfSAorCisjaW5jbHVkZSAidW5pdHlwZXMuaCIKKworLyogR2V0IHNpemVfdC4gICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8qIEdldCBsb2NhbGVfY2hhcnNldCgpIGRlY2xhcmF0aW9uLiAgKi8KKyNpbmNsdWRlICJsb2NhbGNoYXJzZXQuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKKy8qIERpc3BsYXkgd2lkdGguICAqLworCisvKiBUaGVzZSBmdW5jdGlvbnMgYXJlIGxvY2FsZSBkZXBlbmRlbnQuICBUaGUgZW5jb2RpbmcgYXJndW1lbnQgaWRlbnRpZmllcworICAgdGhlIGVuY29kaW5nIChlLmcuICJJU08tODg1OS0yIiBmb3IgUG9saXNoKS4gICovCisKKy8qIERldGVybWluZSBudW1iZXIgb2YgY29sdW1uIHBvc2l0aW9ucyByZXF1aXJlZCBmb3IgVUMuICAqLworZXh0ZXJuIGludAorICAgICAgIHVjX3dpZHRoICh1Y3M0X3QgdWMsIGNvbnN0IGNoYXIgKmVuY29kaW5nKQorICAgICAgIF9VQ19BVFRSSUJVVEVfUFVSRTsKKworLyogRGV0ZXJtaW5lIG51bWJlciBvZiBjb2x1bW4gcG9zaXRpb25zIHJlcXVpcmVkIGZvciBmaXJzdCBOIHVuaXRzCisgICAob3IgZmV3ZXIgaWYgUyBlbmRzIGJlZm9yZSB0aGlzKSBpbiBTLiAgKi8KK2V4dGVybiBpbnQKKyAgICAgICB1OF93aWR0aCAoY29uc3QgdWludDhfdCAqcywgc2l6ZV90IG4sIGNvbnN0IGNoYXIgKmVuY29kaW5nKQorICAgICAgIF9VQ19BVFRSSUJVVEVfUFVSRTsKK2V4dGVybiBpbnQKKyAgICAgICB1MTZfd2lkdGggKGNvbnN0IHVpbnQxNl90ICpzLCBzaXplX3QgbiwgY29uc3QgY2hhciAqZW5jb2RpbmcpCisgICAgICAgX1VDX0FUVFJJQlVURV9QVVJFOworZXh0ZXJuIGludAorICAgICAgIHUzMl93aWR0aCAoY29uc3QgdWludDMyX3QgKnMsIHNpemVfdCBuLCBjb25zdCBjaGFyICplbmNvZGluZykKKyAgICAgICBfVUNfQVRUUklCVVRFX1BVUkU7CisKKy8qIERldGVybWluZSBudW1iZXIgb2YgY29sdW1uIHBvc2l0aW9ucyByZXF1aXJlZCBmb3IgUy4gICovCitleHRlcm4gaW50CisgICAgICAgdThfc3Ryd2lkdGggKGNvbnN0IHVpbnQ4X3QgKnMsIGNvbnN0IGNoYXIgKmVuY29kaW5nKQorICAgICAgIF9VQ19BVFRSSUJVVEVfUFVSRTsKK2V4dGVybiBpbnQKKyAgICAgICB1MTZfc3Ryd2lkdGggKGNvbnN0IHVpbnQxNl90ICpzLCBjb25zdCBjaGFyICplbmNvZGluZykKKyAgICAgICBfVUNfQVRUUklCVVRFX1BVUkU7CitleHRlcm4gaW50CisgICAgICAgdTMyX3N0cndpZHRoIChjb25zdCB1aW50MzJfdCAqcywgY29uc3QgY2hhciAqZW5jb2RpbmcpCisgICAgICAgX1VDX0FUVFJJQlVURV9QVVJFOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfVU5JV0lEVEhfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL3VuaXdpZHRoL2Nqay5oIGIvbGliL3VuaXdpZHRoL2Nqay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NWM5NGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdW5pd2lkdGgvY2prLmgKQEAgLTAsMCArMSwzNyBAQAorLyogVGVzdCBmb3IgQ0pLIGVuY29kaW5nLgorICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIDIwMDUtMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4sIDIwMDIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlICJzdHJlcS5oIgorCitzdGF0aWMgaW50Citpc19jamtfZW5jb2RpbmcgKGNvbnN0IGNoYXIgKmVuY29kaW5nKQoreworICBpZiAoMAorICAgICAgLyogTGVnYWN5IEphcGFuZXNlIGVuY29kaW5ncyAqLworICAgICAgfHwgU1RSRVFfT1BUIChlbmNvZGluZywgIkVVQy1KUCIsICdFJywgJ1UnLCAnQycsICctJywgJ0onLCAnUCcsIDAsIDAsIDApCisgICAgICAvKiBMZWdhY3kgQ2hpbmVzZSBlbmNvZGluZ3MgKi8KKyAgICAgIHx8IFNUUkVRX09QVCAoZW5jb2RpbmcsICJHQjIzMTIiLCAnRycsICdCJywgJzInLCAnMycsICcxJywgJzInLCAwLCAwLCAwKQorICAgICAgfHwgU1RSRVFfT1BUIChlbmNvZGluZywgIkdCSyIsICdHJywgJ0InLCAnSycsIDAsIDAsIDAsIDAsIDAsIDApCisgICAgICB8fCBTVFJFUV9PUFQgKGVuY29kaW5nLCAiRVVDLVRXIiwgJ0UnLCAnVScsICdDJywgJy0nLCAnVCcsICdXJywgMCwgMCwgMCkKKyAgICAgIHx8IFNUUkVRX09QVCAoZW5jb2RpbmcsICJCSUc1IiwgJ0InLCAnSScsICdHJywgJzUnLCAwLCAwLCAwLCAwLCAwKQorICAgICAgLyogTGVnYWN5IEtvcmVhbiBlbmNvZGluZ3MgKi8KKyAgICAgIHx8IFNUUkVRX09QVCAoZW5jb2RpbmcsICJFVUMtS1IiLCAnRScsICdVJywgJ0MnLCAnLScsICdLJywgJ1InLCAwLCAwLCAwKQorICAgICAgfHwgU1RSRVFfT1BUIChlbmNvZGluZywgIkNQOTQ5IiwgJ0MnLCAnUCcsICc5JywgJzQnLCAnOScsIDAsIDAsIDAsIDApCisgICAgICB8fCBTVFJFUV9PUFQgKGVuY29kaW5nLCAiSk9IQUIiLCAnSicsICdPJywgJ0gnLCAnQScsICdCJywgMCwgMCwgMCwgMCkpCisgICAgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliL3VuaXdpZHRoL3dpZHRoLmMgYi9saWIvdW5pd2lkdGgvd2lkdGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmUyYzMzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3VuaXdpZHRoL3dpZHRoLmMKQEAgLTAsMCArMSwzNjggQEAKKy8qIERldGVybWluZSBkaXNwbGF5IHdpZHRoIG9mIFVuaWNvZGUgY2hhcmFjdGVyLgorICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LCAyMDAyLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgInVuaXdpZHRoLmgiCisKKyNpbmNsdWRlICJjamsuaCIKKworLyoKKyAqIE5vbi1zcGFjaW5nIGF0dHJpYnV0ZSB0YWJsZS4KKyAqIENvbnNpc3RzIG9mOgorICogLSBOb24tc3BhY2luZyBjaGFyYWN0ZXJzOyBnZW5lcmF0ZWQgZnJvbSBQcm9wTGlzdC50eHQgb3IKKyAqICAgImdyZXAgJ15bXjtdKjtbXjtdKjtbXjtdKjtbXjtdKjtOU007JyBVbmljb2RlRGF0YS50eHQiCisgKiAtIEZvcm1hdCBjb250cm9sIGNoYXJhY3RlcnM7IGdlbmVyYXRlZCBmcm9tCisgKiAgICJncmVwICdeW147XSo7W147XSo7Q2Y7JyBVbmljb2RlRGF0YS50eHQiCisgKiAtIFplcm8gd2lkdGggY2hhcmFjdGVyczsgZ2VuZXJhdGVkIGZyb20KKyAqICAgImdyZXAgJ15bXjtdKjtaRVJPIFdJRFRIICcgVW5pY29kZURhdGEudHh0IgorICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBub25zcGFjaW5nX3RhYmxlX2RhdGFbMjcqNjRdID0geworICAvKiAweDAwMDAtMHgwMWZmICovCisgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MDAwMC0weDAwM2YgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgLyogMHgwMDQwLTB4MDA3ZiAqLworICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAvKiAweDAwODAtMHgwMGJmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MDBjMC0weDAwZmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgwMTAwLTB4MDEzZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDAxNDAtMHgwMTdmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MDE4MC0weDAxYmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgwMWMwLTB4MDFmZiAqLworICAvKiAweDAyMDAtMHgwM2ZmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MDIwMC0weDAyM2YgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgwMjQwLTB4MDI3ZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDAyODAtMHgwMmJmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MDJjMC0weDAyZmYgKi8KKyAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgLyogMHgwMzAwLTB4MDMzZiAqLworICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAvKiAweDAzNDAtMHgwMzdmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MDM4MC0weDAzYmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgwM2MwLTB4MDNmZiAqLworICAvKiAweDA0MDAtMHgwNWZmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MDQwMC0weDA0M2YgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgwNDQwLTB4MDQ3ZiAqLworICAweGY4LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDA0ODAtMHgwNGJmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MDRjMC0weDA0ZmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgwNTAwLTB4MDUzZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDA1NDAtMHgwNTdmICovCisgIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmYsIC8qIDB4MDU4MC0weDA1YmYgKi8KKyAgMHhiNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgwNWMwLTB4MDVmZiAqLworICAvKiAweDA2MDAtMHgwN2ZmICovCisgIDB4MGYsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MDYwMC0weDA2M2YgKi8KKyAgMHgwMCwgMHhmOCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgLyogMHgwNjQwLTB4MDY3ZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDA2ODAtMHgwNmJmICovCisgIDB4MDAsIDB4MDAsIDB4YzAsIDB4YmYsIDB4OWYsIDB4M2QsIDB4MDAsIDB4MDAsIC8qIDB4MDZjMC0weDA2ZmYgKi8KKyAgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgLyogMHgwNzAwLTB4MDczZiAqLworICAweGZmLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDA3NDAtMHgwNzdmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4ZmYsIDB4MDEsIDB4MDAsIC8qIDB4MDc4MC0weDA3YmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwZiwgMHgwMCwgLyogMHgwN2MwLTB4MDdmZiAqLworICAvKiAweDA4MDAtMHgwOWZmICovCisgIDB4MDAsIDB4MDAsIDB4YzAsIDB4ZmIsIDB4ZWYsIDB4M2UsIDB4MDAsIDB4MDAsIC8qIDB4MDgwMC0weDA4M2YgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgwODQwLTB4MDg3ZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDA4ODAtMHgwOGJmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MDhjMC0weDA4ZmYgKi8KKyAgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgLyogMHgwOTAwLTB4MDkzZiAqLworICAweGZlLCAweDIxLCAweGZlLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDA5NDAtMHgwOTdmICovCisgIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIC8qIDB4MDk4MC0weDA5YmYgKi8KKyAgMHgxZSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgwOWMwLTB4MDlmZiAqLworICAvKiAweDBhMDAtMHgwYmZmICovCisgIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIC8qIDB4MGEwMC0weDBhM2YgKi8KKyAgMHg4NiwgMHgzOSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMywgMHgwMCwgLyogMHgwYTQwLTB4MGE3ZiAqLworICAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAvKiAweDBhODAtMHgwYWJmICovCisgIDB4YmUsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MGFjMC0weDBhZmYgKi8KKyAgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgLyogMHgwYjAwLTB4MGIzZiAqLworICAweDFlLCAweDIwLCAweDQwLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDBiNDAtMHgwYjdmICovCisgIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MGI4MC0weDBiYmYgKi8KKyAgMHgwMSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgwYmMwLTB4MGJmZiAqLworICAvKiAweDBjMDAtMHgwZGZmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIC8qIDB4MGMwMC0weDBjM2YgKi8KKyAgMHhjMSwgMHgzZCwgMHg2MCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgwYzQwLTB4MGM3ZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAvKiAweDBjODAtMHgwY2JmICovCisgIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MGNjMC0weDBjZmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgwZDAwLTB4MGQzZiAqLworICAweDFlLCAweDIwLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDBkNDAtMHgwZDdmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MGQ4MC0weDBkYmYgKi8KKyAgMHgwMCwgMHgwNCwgMHg1YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgwZGMwLTB4MGRmZiAqLworICAvKiAweDBlMDAtMHgwZmZmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDcsIC8qIDB4MGUwMC0weDBlM2YgKi8KKyAgMHg4MCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgwZTQwLTB4MGU3ZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDFiLCAvKiAweDBlODAtMHgwZWJmICovCisgIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MGVjMC0weDBlZmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMiwgLyogMHgwZjAwLTB4MGYzZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDdmLCAvKiAweDBmNDAtMHgwZjdmICovCisgIDB4ZGYsIDB4ZTAsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MWYsIC8qIDB4MGY4MC0weDBmYmYgKi8KKyAgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgwZmMwLTB4MGZmZiAqLworICAvKiAweDEwMDAtMHgxMWZmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4ZmQsIDB4NjYsIC8qIDB4MTAwMC0weDEwM2YgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMywgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgLyogMHgxMDQwLTB4MTA3ZiAqLworICAweDY0LCAweDIwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDEwODAtMHgxMGJmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MTBjMC0weDEwZmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgxMTAwLTB4MTEzZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDExNDAtMHgxMTdmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MTE4MC0weDExYmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgxMWMwLTB4MTFmZiAqLworICAvKiAweDEyMDAtMHgxM2ZmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MTIwMC0weDEyM2YgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgxMjQwLTB4MTI3ZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDEyODAtMHgxMmJmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MTJjMC0weDEyZmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgxMzAwLTB4MTMzZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDEzNDAtMHgxMzdmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MTM4MC0weDEzYmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgxM2MwLTB4MTNmZiAqLworICAvKiAweDE2MDAtMHgxN2ZmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MTYwMC0weDE2M2YgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgxNjQwLTB4MTY3ZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDE2ODAtMHgxNmJmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MTZjMC0weDE2ZmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgLyogMHgxNzAwLTB4MTczZiAqLworICAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAvKiAweDE3NDAtMHgxNzdmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4M2YsIC8qIDB4MTc4MC0weDE3YmYgKi8KKyAgMHg0MCwgMHhmZSwgMHgwZiwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgxN2MwLTB4MTdmZiAqLworICAvKiAweDE4MDAtMHgxOWZmICovCisgIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MTgwMC0weDE4M2YgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgxODQwLTB4MTg3ZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAvKiAweDE4ODAtMHgxOGJmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MThjMC0weDE4ZmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NywgMHgwMSwgMHgwNCwgMHgwZSwgLyogMHgxOTAwLTB4MTkzZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDE5NDAtMHgxOTdmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MTk4MC0weDE5YmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgxOWMwLTB4MTlmZiAqLworICAvKiAweDFhMDAtMHgxYmZmICovCisgIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MWEwMC0weDFhM2YgKi8KKyAgMHgwMCwgMHgwMCwgMHg0MCwgMHg3ZiwgMHhlNSwgMHgxZiwgMHhmOCwgMHg5ZiwgLyogMHgxYTQwLTB4MWE3ZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDFhODAtMHgxYWJmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MWFjMC0weDFhZmYgKi8KKyAgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHgxNywgLyogMHgxYjAwLTB4MWIzZiAqLworICAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDBmLCAweDAwLCAvKiAweDFiNDAtMHgxYjdmICovCisgIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDMsIDB4MDAsIDB4MDAsIC8qIDB4MWI4MC0weDFiYmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMywgMHgwMywgMHgwMCwgLyogMHgxYmMwLTB4MWJmZiAqLworICAvKiAweDFjMDAtMHgxZGZmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4Y2YsIDB4MDAsIC8qIDB4MWMwMC0weDFjM2YgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgxYzQwLTB4MWM3ZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDFjODAtMHgxY2JmICovCisgIDB4MDAsIDB4MDAsIDB4ZjcsIDB4ZmYsIDB4ZmQsIDB4MjEsIDB4MDAsIDB4MDAsIC8qIDB4MWNjMC0weDFjZmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgxZDAwLTB4MWQzZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDFkNDAtMHgxZDdmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MWQ4MC0weDFkYmYgKi8KKyAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmMCwgLyogMHgxZGMwLTB4MWRmZiAqLworICAvKiAweDIwMDAtMHgyMWZmICovCisgIDB4MDAsIDB4ZjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MDAsIC8qIDB4MjAwMC0weDIwM2YgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHhmYywgMHgwMCwgMHgwMCwgLyogMHgyMDQwLTB4MjA3ZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDIwODAtMHgyMGJmICovCisgIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDEsIDB4MDAsIC8qIDB4MjBjMC0weDIwZmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgyMTAwLTB4MjEzZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDIxNDAtMHgyMTdmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MjE4MC0weDIxYmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgyMWMwLTB4MjFmZiAqLworICAvKiAweDJjMDAtMHgyZGZmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MmMwMC0weDJjM2YgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgyYzQwLTB4MmM3ZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDJjODAtMHgyY2JmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDMsIDB4MDAsIC8qIDB4MmNjMC0weDJjZmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgyZDAwLTB4MmQzZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAvKiAweDJkNDAtMHgyZDdmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MmQ4MC0weDJkYmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgLyogMHgyZGMwLTB4MmRmZiAqLworICAvKiAweDMwMDAtMHgzMWZmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MDAsIDB4MDAsIC8qIDB4MzAwMC0weDMwM2YgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgzMDQwLTB4MzA3ZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDMwODAtMHgzMGJmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MzBjMC0weDMwZmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgzMTAwLTB4MzEzZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDMxNDAtMHgzMTdmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MzE4MC0weDMxYmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgzMWMwLTB4MzFmZiAqLworICAvKiAweGE2MDAtMHhhN2ZmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4YTYwMC0weGE2M2YgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNywgMHgzMCwgLyogMHhhNjQwLTB4YTY3ZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweGE2ODAtMHhhNmJmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIC8qIDB4YTZjMC0weGE2ZmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHhhNzAwLTB4YTczZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweGE3NDAtMHhhNzdmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4YTc4MC0weGE3YmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHhhN2MwLTB4YTdmZiAqLworICAvKiAweGE4MDAtMHhhOWZmICovCisgIDB4NDQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4YTgwMC0weGE4M2YgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHhhODQwLTB4YTg3ZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweGE4ODAtMHhhOGJmICovCisgIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDMsIDB4MDAsIC8qIDB4YThjMC0weGE4ZmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgzZiwgMHgwMCwgMHgwMCwgLyogMHhhOTAwLTB4YTkzZiAqLworICAweDgwLCAweGZmLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweGE5NDAtMHhhOTdmICovCisgIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MTMsIC8qIDB4YTk4MC0weGE5YmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHhhOWMwLTB4YTlmZiAqLworICAvKiAweGFhMDAtMHhhYmZmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2UsIDB4NjYsIDB4MDAsIC8qIDB4YWEwMC0weGFhM2YgKi8KKyAgMHgwOCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHhhYTQwLTB4YWE3ZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlkLCAweGMxLCAvKiAweGFhODAtMHhhYWJmICovCisgIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4YWFjMC0weGFhZmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHhhYjAwLTB4YWIzZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweGFiNDAtMHhhYjdmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4YWI4MC0weGFiYmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgyMSwgMHgwMCwgMHgwMCwgLyogMHhhYmMwLTB4YWJmZiAqLworICAvKiAweGZhMDAtMHhmYmZmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4ZmEwMC0weGZhM2YgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHhmYTQwLTB4ZmE3ZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweGZhODAtMHhmYWJmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4ZmFjMC0weGZhZmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHhmYjAwLTB4ZmIzZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweGZiNDAtMHhmYjdmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4ZmI4MC0weGZiYmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHhmYmMwLTB4ZmJmZiAqLworICAvKiAweGZlMDAtMHhmZmZmICovCisgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4ZmUwMC0weGZlM2YgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHhmZTQwLTB4ZmU3ZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweGZlODAtMHhmZWJmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIC8qIDB4ZmVjMC0weGZlZmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHhmZjAwLTB4ZmYzZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweGZmNDAtMHhmZjdmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4ZmY4MC0weGZmYmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgLyogMHhmZmMwLTB4ZmZmZiAqLworICAvKiAweDEwMDAwLTB4MTAxZmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgxMDAwMC0weDEwMDNmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MTAwNDAtMHgxMDA3ZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDEwMDgwLTB4MTAwYmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgxMDBjMC0weDEwMGZmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MTAxMDAtMHgxMDEzZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDEwMTQwLTB4MTAxN2YgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgxMDE4MC0weDEwMWJmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIC8qIDB4MTAxYzAtMHgxMDFmZiAqLworICAvKiAweDEwYTAwLTB4MTBiZmYgKi8KKyAgMHg2ZSwgMHhmMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NywgLyogMHgxMGEwMC0weDEwYTNmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MTBhNDAtMHgxMGE3ZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDEwYTgwLTB4MTBhYmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgxMGFjMC0weDEwYWZmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MTBiMDAtMHgxMGIzZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDEwYjQwLTB4MTBiN2YgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgxMGI4MC0weDEwYmJmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MTBiYzAtMHgxMGJmZiAqLworICAvKiAweDExMDAwLTB4MTExZmYgKi8KKyAgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgLyogMHgxMTAwMC0weDExMDNmICovCisgIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MTEwNDAtMHgxMTA3ZiAqLworICAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDI2LCAvKiAweDExMDgwLTB4MTEwYmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgxMTBjMC0weDExMGZmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MTExMDAtMHgxMTEzZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDExMTQwLTB4MTExN2YgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgxMTE4MC0weDExMWJmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MTExYzAtMHgxMTFmZiAqLworICAvKiAweDFkMDAwLTB4MWQxZmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgxZDAwMC0weDFkMDNmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MWQwNDAtMHgxZDA3ZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDFkMDgwLTB4MWQwYmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgxZDBjMC0weDFkMGZmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MWQxMDAtMHgxZDEzZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAzLCAweGY4LCAweGZmLCAvKiAweDFkMTQwLTB4MWQxN2YgKi8KKyAgMHhlNywgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMCwgMHgwMCwgLyogMHgxZDE4MC0weDFkMWJmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MWQxYzAtMHgxZDFmZiAqLworICAvKiAweDFkMjAwLTB4MWQzZmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgxZDIwMC0weDFkMjNmICovCisgIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MWQyNDAtMHgxZDI3ZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDFkMjgwLTB4MWQyYmYgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgxZDJjMC0weDFkMmZmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MWQzMDAtMHgxZDMzZiAqLworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiAweDFkMzQwLTB4MWQzN2YgKi8KKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogMHgxZDM4MC0weDFkM2JmICovCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgIC8qIDB4MWQzYzAtMHgxZDNmZiAqLworfTsKK3N0YXRpYyBjb25zdCBzaWduZWQgY2hhciBub25zcGFjaW5nX3RhYmxlX2luZFsyNDBdID0geworICAgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsIC8qIDB4MDAwMC0weDBmZmYgKi8KKyAgIDgsICA5LCAtMSwgMTAsIDExLCAxMiwgMTMsIC0xLCAvKiAweDEwMDAtMHgxZmZmICovCisgIDE0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIDE1LCAtMSwgLyogMHgyMDAwLTB4MmZmZiAqLworICAxNiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC8qIDB4MzAwMC0weDNmZmYgKi8KKyAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKiAweDQwMDAtMHg0ZmZmICovCisgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLyogMHg1MDAwLTB4NWZmZiAqLworICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC8qIDB4NjAwMC0weDZmZmYgKi8KKyAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKiAweDcwMDAtMHg3ZmZmICovCisgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLyogMHg4MDAwLTB4OGZmZiAqLworICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC8qIDB4OTAwMC0weDlmZmYgKi8KKyAgLTEsIC0xLCAtMSwgMTcsIDE4LCAxOSwgLTEsIC0xLCAvKiAweGEwMDAtMHhhZmZmICovCisgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLyogMHhiMDAwLTB4YmZmZiAqLworICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC8qIDB4YzAwMC0weGNmZmYgKi8KKyAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKiAweGQwMDAtMHhkZmZmICovCisgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLyogMHhlMDAwLTB4ZWZmZiAqLworICAtMSwgLTEsIC0xLCAtMSwgLTEsIDIwLCAtMSwgMjEsIC8qIDB4ZjAwMC0weGZmZmYgKi8KKyAgMjIsIC0xLCAtMSwgLTEsIC0xLCAyMywgLTEsIC0xLCAvKiAweDEwMDAwLTB4MTBmZmYgKi8KKyAgMjQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKiAweDExMDAwLTB4MTFmZmYgKi8KKyAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKiAweDEyMDAwLTB4MTJmZmYgKi8KKyAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKiAweDEzMDAwLTB4MTNmZmYgKi8KKyAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKiAweDE0MDAwLTB4MTRmZmYgKi8KKyAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKiAweDE1MDAwLTB4MTVmZmYgKi8KKyAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKiAweDE2MDAwLTB4MTZmZmYgKi8KKyAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKiAweDE3MDAwLTB4MTdmZmYgKi8KKyAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKiAweDE4MDAwLTB4MThmZmYgKi8KKyAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKiAweDE5MDAwLTB4MTlmZmYgKi8KKyAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKiAweDFhMDAwLTB4MWFmZmYgKi8KKyAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKiAweDFiMDAwLTB4MWJmZmYgKi8KKyAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKiAweDFjMDAwLTB4MWNmZmYgKi8KKyAgMjUsIDI2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xICAvKiAweDFkMDAwLTB4MWRmZmYgKi8KK307CisKKy8qIERldGVybWluZSBudW1iZXIgb2YgY29sdW1uIHBvc2l0aW9ucyByZXF1aXJlZCBmb3IgVUMuICAqLworaW50Cit1Y193aWR0aCAodWNzNF90IHVjLCBjb25zdCBjaGFyICplbmNvZGluZykKK3sKKyAgLyogVGVzdCBmb3Igbm9uLXNwYWNpbmcgb3IgY29udHJvbCBjaGFyYWN0ZXIuICAqLworICBpZiAoKHVjID4+IDkpIDwgMjQwKQorICAgIHsKKyAgICAgIGludCBpbmQgPSBub25zcGFjaW5nX3RhYmxlX2luZFt1YyA+PiA5XTsKKyAgICAgIGlmIChpbmQgPj0gMCkKKyAgICAgICAgaWYgKChub25zcGFjaW5nX3RhYmxlX2RhdGFbNjQqaW5kICsgKCh1YyA+PiAzKSAmIDYzKV0gPj4gKHVjICYgNykpICYgMSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAodWMgPiAwICYmIHVjIDwgMHhhMCkKKyAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICB9CisgICAgfQorICBlbHNlIGlmICgodWMgPj4gOSkgPT0gKDB4ZTAwMDAgPj4gOSkpCisgICAgeworICAgICAgaWYgKHVjID49IDB4ZTAxMDApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAodWMgPD0gMHhlMDFlZikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBpZiAodWMgPj0gMHhlMDAyMCA/IHVjIDw9IDB4ZTAwN2YgOiB1YyA9PSAweGUwMDAxKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgIC8qIFRlc3QgZm9yIGRvdWJsZS13aWR0aCBjaGFyYWN0ZXIuCisgICAqIEdlbmVyYXRlZCBmcm9tICJncmVwICdeW147XVx7NCw1XH07W1dGXScgRWFzdEFzaWFuV2lkdGgudHh0IgorICAgKiBhbmQgICAgICAgICAgICAiZ3JlcCAnXlteO11cezQsNVx9O1teV0ZdJyBFYXN0QXNpYW5XaWR0aC50eHQiCisgICAqLworICBpZiAodWMgPj0gMHgxMTAwCisgICAgICAmJiAoKHVjIDwgMHgxMTYwKSAvKiBIYW5ndWwgSmFtbyAqLworICAgICAgICAgIHx8ICh1YyA+PSAweDIzMjkgJiYgdWMgPCAweDIzMmIpIC8qIEFuZ2xlIEJyYWNrZXRzICovCisgICAgICAgICAgfHwgKHVjID49IDB4MmU4MCAmJiB1YyA8IDB4YTRkMCAgLyogQ0pLIC4uLiBZaSAqLworICAgICAgICAgICAgICAmJiAhKHVjID09IDB4MzAzZikgJiYgISh1YyA+PSAweDRkYzAgJiYgdWMgPCAweDRlMDApKQorICAgICAgICAgIHx8ICh1YyA+PSAweGFjMDAgJiYgdWMgPCAweGQ3YTQpIC8qIEhhbmd1bCBTeWxsYWJsZXMgKi8KKyAgICAgICAgICB8fCAodWMgPj0gMHhmOTAwICYmIHVjIDwgMHhmYjAwKSAvKiBDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzICovCisgICAgICAgICAgfHwgKHVjID49IDB4ZmUxMCAmJiB1YyA8IDB4ZmUyMCkgLyogUHJlc2VudGF0aW9uIEZvcm1zIGZvciBWZXJ0aWNhbCAqLworICAgICAgICAgIHx8ICh1YyA+PSAweGZlMzAgJiYgdWMgPCAweGZlNzApIC8qIENKSyBDb21wYXRpYmlsaXR5IEZvcm1zICovCisgICAgICAgICAgfHwgKHVjID49IDB4ZmYwMCAmJiB1YyA8IDB4ZmY2MSkgLyogRnVsbHdpZHRoIEZvcm1zICovCisgICAgICAgICAgfHwgKHVjID49IDB4ZmZlMCAmJiB1YyA8IDB4ZmZlNykgLyogRnVsbHdpZHRoIFNpZ25zICovCisgICAgICAgICAgfHwgKHVjID49IDB4MjAwMDAgJiYgdWMgPD0gMHgyZmZmZikgLyogU3VwcGxlbWVudGFyeSBJZGVvZ3JhcGhpYyBQbGFuZSAqLworICAgICAgICAgIHx8ICh1YyA+PSAweDMwMDAwICYmIHVjIDw9IDB4M2ZmZmYpIC8qIFRlcnRpYXJ5IElkZW9ncmFwaGljIFBsYW5lICovCisgICAgICkgICApCisgICAgcmV0dXJuIDI7CisgIC8qIEluIGFuY2llbnQgQ0pLIGVuY29kaW5ncywgQ3lyaWxsaWMgYW5kIG1vc3Qgb3RoZXIgY2hhcmFjdGVycyBhcmUKKyAgICAgZG91YmxlLXdpZHRoIGFzIHdlbGwuICAqLworICBpZiAodWMgPj0gMHgwMEExICYmIHVjIDwgMHhGRjYxICYmIHVjICE9IDB4MjBBOQorICAgICAgJiYgaXNfY2prX2VuY29kaW5nIChlbmNvZGluZykpCisgICAgcmV0dXJuIDI7CisgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvbGliL3VubG9ja2VkLWlvLmggYi9saWIvdW5sb2NrZWQtaW8uaAppbmRleCBkMDA5MzAzLi42NWJmYmM0IDEwMDY0NAotLS0gYS9saWIvdW5sb2NrZWQtaW8uaAorKysgYi9saWIvdW5sb2NrZWQtaW8uaApAQCAtMSwyMCArMSwxOSBAQAogLyogUHJlZmVyIGZhc3Rlciwgbm9uLXRocmVhZC1zYWZlIHN0ZGlvIGZ1bmN0aW9ucyBpZiBhdmFpbGFibGUuCiAKLSAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDA0LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogLyogV3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcuICAqLwogCmRpZmYgLS1naXQgYS9saWIvdW5zZXRlbnYuYyBiL2xpYi91bnNldGVudi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYmU5YTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdW5zZXRlbnYuYwpAQCAtMCwwICsxLDEyNyBAQAorLyogQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk1LTIwMDIsIDIwMDUtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIERvbid0IHVzZSBfX2F0dHJpYnV0ZV9fIF9fbm9ubnVsbF9fIGluIHRoaXMgY29tcGlsYXRpb24gdW5pdC4gIE90aGVyd2lzZSBnY2MKKyAgIG9wdGltaXplcyBhd2F5IHRoZSBuYW1lID09IE5VTEwgdGVzdCBiZWxvdy4gICovCisjZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpCisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpZiAhX0xJQkMKKyMgZGVmaW5lIF9fc2V0X2Vycm5vKGV2KSAoKGVycm5vKSA9IChldikpCisjZW5kaWYKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaWYgIV9MSUJDCisjIGRlZmluZSBfX2Vudmlyb24gICAgICBlbnZpcm9uCisjZW5kaWYKKworI2lmIF9MSUJDCisvKiBUaGlzIGxvY2sgcHJvdGVjdHMgYWdhaW5zdCBzaW11bHRhbmVvdXMgbW9kaWZpY2F0aW9ucyBvZiAnZW52aXJvbicuICAqLworIyBpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorX19saWJjX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkIChzdGF0aWMsIGVudmxvY2spCisjIGRlZmluZSBMT0NLICAgX19saWJjX2xvY2tfbG9jayAoZW52bG9jaykKKyMgZGVmaW5lIFVOTE9DSyBfX2xpYmNfbG9ja191bmxvY2sgKGVudmxvY2spCisjZWxzZQorIyBkZWZpbmUgTE9DSworIyBkZWZpbmUgVU5MT0NLCisjZW5kaWYKKworLyogSW4gdGhlIEdOVSBDIGxpYnJhcnkgd2UgbXVzdCBrZWVwIHRoZSBuYW1lc3BhY2UgY2xlYW4uICAqLworI2lmZGVmIF9MSUJDCisjIGRlZmluZSB1bnNldGVudiBfX3Vuc2V0ZW52CisjZW5kaWYKKworI2lmIF9MSUJDIHx8ICFIQVZFX1VOU0VURU5WCisKK2ludAordW5zZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIHNpemVfdCBsZW47CisgIGNoYXIgKiplcDsKKworICBpZiAobmFtZSA9PSBOVUxMIHx8ICpuYW1lID09ICdcMCcgfHwgc3RyY2hyIChuYW1lLCAnPScpICE9IE5VTEwpCisgICAgeworICAgICAgX19zZXRfZXJybm8gKEVJTlZBTCk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIGxlbiA9IHN0cmxlbiAobmFtZSk7CisKKyAgTE9DSzsKKworICBlcCA9IF9fZW52aXJvbjsKKyAgd2hpbGUgKCplcCAhPSBOVUxMKQorICAgIGlmICghc3RybmNtcCAoKmVwLCBuYW1lLCBsZW4pICYmICgqZXApW2xlbl0gPT0gJz0nKQorICAgICAgeworICAgICAgICAvKiBGb3VuZCBpdC4gIFJlbW92ZSB0aGlzIHBvaW50ZXIgYnkgbW92aW5nIGxhdGVyIG9uZXMgYmFjay4gICovCisgICAgICAgIGNoYXIgKipkcCA9IGVwOworCisgICAgICAgIGRvCisgICAgICAgICAgZHBbMF0gPSBkcFsxXTsKKyAgICAgICAgd2hpbGUgKCpkcCsrKTsKKyAgICAgICAgLyogQ29udGludWUgdGhlIGxvb3AgaW4gY2FzZSBOQU1FIGFwcGVhcnMgYWdhaW4uICAqLworICAgICAgfQorICAgIGVsc2UKKyAgICAgICsrZXA7CisKKyAgVU5MT0NLOworCisgIHJldHVybiAwOworfQorCisjaWZkZWYgX0xJQkMKKyMgdW5kZWYgdW5zZXRlbnYKK3dlYWtfYWxpYXMgKF9fdW5zZXRlbnYsIHVuc2V0ZW52KQorI2VuZGlmCisKKyNlbHNlIC8qIEhBVkVfVU5TRVRFTlYgKi8KKworIyB1bmRlZiB1bnNldGVudgorIyBpZiAhSEFWRV9ERUNMX1VOU0VURU5WCisjICBpZiBWT0lEX1VOU0VURU5WCitleHRlcm4gdm9pZCB1bnNldGVudiAoY29uc3QgY2hhciAqKTsKKyMgIGVsc2UKK2V4dGVybiBpbnQgdW5zZXRlbnYgKGNvbnN0IGNoYXIgKik7CisjICBlbmRpZgorIyBlbmRpZgorCisvKiBDYWxsIHRoZSB1bmRlcmx5aW5nIHVuc2V0ZW52LCBpbiBjYXNlIHRoZXJlIGlzIGhpZGRlbiBib29ra2VlcGluZworICAgdGhhdCBuZWVkcyB1cGRhdGluZyBiZXlvbmQganVzdCBtb2RpZnlpbmcgZW52aXJvbi4gICovCitpbnQKK3JwbF91bnNldGVudiAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgaW50IHJlc3VsdCA9IDA7CisgIGlmICghbmFtZSB8fCAhKm5hbWUgfHwgc3RyY2hyIChuYW1lLCAnPScpKQorICAgIHsKKyAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgd2hpbGUgKGdldGVudiAobmFtZSkpCisjIGlmICFWT0lEX1VOU0VURU5WCisgICAgcmVzdWx0ID0KKyMgZW5kaWYKKyAgICAgIHVuc2V0ZW52IChuYW1lKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworI2VuZGlmIC8qIEhBVkVfVU5TRVRFTlYgKi8KZGlmZiAtLWdpdCBhL2xpYi92YXNucHJpbnRmLmMgYi9saWIvdmFzbnByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZmM1MjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdmFzbnByaW50Zi5jCkBAIC0wLDAgKzEsNTYwNiBAQAorLyogdnNwcmludGYgd2l0aCBhdXRvbWF0aWMgbWVtb3J5IGFsbG9jYXRpb24uCisgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDItMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBUaGlzIGZpbGUgY2FuIGJlIHBhcmFtZXRyaXplZCB3aXRoIHRoZSBmb2xsb3dpbmcgbWFjcm9zOgorICAgICBWQVNOUFJJTlRGICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIGJlaW5nIGRlZmluZWQuCisgICAgIEZDSEFSX1QgICAgICAgICAgICBUaGUgZWxlbWVudCB0eXBlIG9mIHRoZSBmb3JtYXQgc3RyaW5nLgorICAgICBEQ0hBUl9UICAgICAgICAgICAgVGhlIGVsZW1lbnQgdHlwZSBvZiB0aGUgZGVzdGluYXRpb24gKHJlc3VsdCkgc3RyaW5nLgorICAgICBGQ0hBUl9UX09OTFlfQVNDSUkgU2V0IHRvIDEgdG8gZW5hYmxlIHZlcmlmaWNhdGlvbiB0aGF0IGFsbCBjaGFyYWN0ZXJzCisgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgZm9ybWF0IHN0cmluZyBhcmUgQVNDSUkuIE1VU1QgYmUgc2V0IGlmCisgICAgICAgICAgICAgICAgICAgICAgICBGQ0hBUl9UIGFuZCBEQ0hBUl9UIGFyZSBub3QgdGhlIHNhbWUgdHlwZS4KKyAgICAgRElSRUNUSVZFICAgICAgICAgIFN0cnVjdHVyZSBkZW5vdGluZyBhIGZvcm1hdCBkaXJlY3RpdmUuCisgICAgICAgICAgICAgICAgICAgICAgICBEZXBlbmRzIG9uIEZDSEFSX1QuCisgICAgIERJUkVDVElWRVMgICAgICAgICBTdHJ1Y3R1cmUgZGVub3RpbmcgdGhlIHNldCBvZiBmb3JtYXQgZGlyZWN0aXZlcyBvZiBhCisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQgc3RyaW5nLiAgRGVwZW5kcyBvbiBGQ0hBUl9ULgorICAgICBQUklOVEZfUEFSU0UgICAgICAgRnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBmb3JtYXQgc3RyaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgRGVwZW5kcyBvbiBGQ0hBUl9ULgorICAgICBEQ0hBUl9DUFkgICAgICAgICAgbWVtY3B5IGxpa2UgZnVuY3Rpb24gZm9yIERDSEFSX1RbXSBhcnJheXMuCisgICAgIERDSEFSX1NFVCAgICAgICAgICBtZW1zZXQgbGlrZSBmdW5jdGlvbiBmb3IgRENIQVJfVFtdIGFycmF5cy4KKyAgICAgRENIQVJfTUJTTkxFTiAgICAgIG1ic25sZW4gbGlrZSBmdW5jdGlvbiBmb3IgRENIQVJfVFtdIGFycmF5cy4KKyAgICAgU05QUklOVEYgICAgICAgICAgIFRoZSBzeXN0ZW0ncyBzbnByaW50ZiAob3Igc2ltaWxhcikgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG1heSBiZSBlaXRoZXIgc25wcmludGYgb3Igc3dwcmludGYuCisgICAgIFRDSEFSX1QgICAgICAgICAgICBUaGUgZWxlbWVudCB0eXBlIG9mIHRoZSBhcmd1bWVudCBhbmQgcmVzdWx0IHN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHNhaWQgU05QUklOVEYgZnVuY3Rpb24uICBUaGlzIG1heSBiZSBlaXRoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgb3Igd2NoYXJfdC4gIFRoZSBjb2RlIGV4cGxvaXRzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoVENIQVJfVCkgfCBzaXplb2YgKERDSEFSX1QpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25vZiAoVENIQVJfVCkgPD0gYWxpZ25vZiAoRENIQVJfVCkuCisgICAgIERDSEFSX0lTX1RDSEFSICAgICBTZXQgdG8gMSBpZiBEQ0hBUl9UIGFuZCBUQ0hBUl9UIGFyZSB0aGUgc2FtZSB0eXBlLgorICAgICBEQ0hBUl9DT05WX0ZST01fRU5DT0RJTkcgQSBmdW5jdGlvbiB0byBjb252ZXJ0IGZyb20gY2hhcltdIHRvIERDSEFSW10uCisgICAgIERDSEFSX0lTX1VJTlQ4X1QgICBTZXQgdG8gMSBpZiBEQ0hBUl9UIGlzIHVpbnQ4X3QuCisgICAgIERDSEFSX0lTX1VJTlQxNl9UICBTZXQgdG8gMSBpZiBEQ0hBUl9UIGlzIHVpbnQxNl90LgorICAgICBEQ0hBUl9JU19VSU5UMzJfVCAgU2V0IHRvIDEgaWYgRENIQVJfVCBpcyB1aW50MzJfdC4gICovCisKKy8qIFRlbGwgZ2xpYmMncyA8c3RkaW8uaD4gdG8gcHJvdmlkZSBhIHByb3RvdHlwZSBmb3Igc25wcmludGYoKS4KKyAgIFRoaXMgbXVzdCBjb21lIGJlZm9yZSA8Y29uZmlnLmg+IGJlY2F1c2UgPGNvbmZpZy5oPiBtYXkgaW5jbHVkZQorICAgPGZlYXR1cmVzLmg+LCBhbmQgb25jZSA8ZmVhdHVyZXMuaD4gaGFzIGJlZW4gaW5jbHVkZWQsIGl0J3MgdG9vIGxhdGUuICAqLworI2lmbmRlZiBfR05VX1NPVVJDRQorIyBkZWZpbmUgX0dOVV9TT1VSQ0UgICAgMQorI2VuZGlmCisKKyNpZm5kZWYgVkFTTlBSSU5URgorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorI2lmbmRlZiBJTl9MSUJJTlRMCisjIGluY2x1ZGUgPGFsbG9jYS5oPgorI2VuZGlmCisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2lmbmRlZiBWQVNOUFJJTlRGCisjIGlmIFdJREVfQ0hBUl9WRVJTSU9OCisjICBpbmNsdWRlICJ2YXNud3ByaW50Zi5oIgorIyBlbHNlCisjICBpbmNsdWRlICJ2YXNucHJpbnRmLmgiCisjIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPGxvY2FsZS5oPiAgICAgLyogbG9jYWxlY29udigpICovCisjaW5jbHVkZSA8c3RkaW8uaD4gICAgICAvKiBzbnByaW50ZigpLCBzcHJpbnRmKCkgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4gICAgIC8qIGFib3J0KCksIG1hbGxvYygpLCByZWFsbG9jKCksIGZyZWUoKSAqLworI2luY2x1ZGUgPHN0cmluZy5oPiAgICAgLyogbWVtY3B5KCksIHN0cmxlbigpICovCisjaW5jbHVkZSA8ZXJybm8uaD4gICAgICAvKiBlcnJubyAqLworI2luY2x1ZGUgPGxpbWl0cy5oPiAgICAgLyogQ0hBUl9CSVQgKi8KKyNpbmNsdWRlIDxmbG9hdC5oPiAgICAgIC8qIERCTF9NQVhfRVhQLCBMREJMX01BWF9FWFAgKi8KKyNpZiBIQVZFX05MX0xBTkdJTkZPCisjIGluY2x1ZGUgPGxhbmdpbmZvLmg+CisjZW5kaWYKKyNpZm5kZWYgVkFTTlBSSU5URgorIyBpZiBXSURFX0NIQVJfVkVSU0lPTgorIyAgaW5jbHVkZSAid3ByaW50Zi1wYXJzZS5oIgorIyBlbHNlCisjICBpbmNsdWRlICJwcmludGYtcGFyc2UuaCIKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBDaGVja2VkIHNpemVfdCBjb21wdXRhdGlvbnMuICAqLworI2luY2x1ZGUgInhzaXplLmgiCisKKyNpbmNsdWRlICJ2ZXJpZnkuaCIKKworI2lmIChORUVEX1BSSU5URl9ET1VCTEUgfHwgTkVFRF9QUklOVEZfTE9OR19ET1VCTEUpICYmICFkZWZpbmVkIElOX0xJQklOVEwKKyMgaW5jbHVkZSA8bWF0aC5oPgorIyBpbmNsdWRlICJmbG9hdCsuaCIKKyNlbmRpZgorCisjaWYgKE5FRURfUFJJTlRGX0RPVUJMRSB8fCBORUVEX1BSSU5URl9JTkZJTklURV9ET1VCTEUpICYmICFkZWZpbmVkIElOX0xJQklOVEwKKyMgaW5jbHVkZSA8bWF0aC5oPgorIyBpbmNsdWRlICJpc25hbmQtbm9saWJtLmgiCisjZW5kaWYKKworI2lmIChORUVEX1BSSU5URl9MT05HX0RPVUJMRSB8fCBORUVEX1BSSU5URl9JTkZJTklURV9MT05HX0RPVUJMRSkgJiYgIWRlZmluZWQgSU5fTElCSU5UTAorIyBpbmNsdWRlIDxtYXRoLmg+CisjIGluY2x1ZGUgImlzbmFubC1ub2xpYm0uaCIKKyMgaW5jbHVkZSAiZnB1Y3cuaCIKKyNlbmRpZgorCisjaWYgKE5FRURfUFJJTlRGX0RJUkVDVElWRV9BIHx8IE5FRURfUFJJTlRGX0RPVUJMRSkgJiYgIWRlZmluZWQgSU5fTElCSU5UTAorIyBpbmNsdWRlIDxtYXRoLmg+CisjIGluY2x1ZGUgImlzbmFuZC1ub2xpYm0uaCIKKyMgaW5jbHVkZSAicHJpbnRmLWZyZXhwLmgiCisjZW5kaWYKKworI2lmIChORUVEX1BSSU5URl9ESVJFQ1RJVkVfQSB8fCBORUVEX1BSSU5URl9MT05HX0RPVUJMRSkgJiYgIWRlZmluZWQgSU5fTElCSU5UTAorIyBpbmNsdWRlIDxtYXRoLmg+CisjIGluY2x1ZGUgImlzbmFubC1ub2xpYm0uaCIKKyMgaW5jbHVkZSAicHJpbnRmLWZyZXhwbC5oIgorIyBpbmNsdWRlICJmcHVjdy5oIgorI2VuZGlmCisKKy8qIERlZmF1bHQgcGFyYW1ldGVycy4gICovCisjaWZuZGVmIFZBU05QUklOVEYKKyMgaWYgV0lERV9DSEFSX1ZFUlNJT04KKyMgIGRlZmluZSBWQVNOUFJJTlRGIHZhc253cHJpbnRmCisjICBkZWZpbmUgRkNIQVJfVCB3Y2hhcl90CisjICBkZWZpbmUgRENIQVJfVCB3Y2hhcl90CisjICBkZWZpbmUgVENIQVJfVCB3Y2hhcl90CisjICBkZWZpbmUgRENIQVJfSVNfVENIQVIgMQorIyAgZGVmaW5lIERJUkVDVElWRSB3Y2hhcl90X2RpcmVjdGl2ZQorIyAgZGVmaW5lIERJUkVDVElWRVMgd2NoYXJfdF9kaXJlY3RpdmVzCisjICBkZWZpbmUgUFJJTlRGX1BBUlNFIHdwcmludGZfcGFyc2UKKyMgIGRlZmluZSBEQ0hBUl9DUFkgd21lbWNweQorIyAgZGVmaW5lIERDSEFSX1NFVCB3bWVtc2V0CisjIGVsc2UKKyMgIGRlZmluZSBWQVNOUFJJTlRGIHZhc25wcmludGYKKyMgIGRlZmluZSBGQ0hBUl9UIGNoYXIKKyMgIGRlZmluZSBEQ0hBUl9UIGNoYXIKKyMgIGRlZmluZSBUQ0hBUl9UIGNoYXIKKyMgIGRlZmluZSBEQ0hBUl9JU19UQ0hBUiAxCisjICBkZWZpbmUgRElSRUNUSVZFIGNoYXJfZGlyZWN0aXZlCisjICBkZWZpbmUgRElSRUNUSVZFUyBjaGFyX2RpcmVjdGl2ZXMKKyMgIGRlZmluZSBQUklOVEZfUEFSU0UgcHJpbnRmX3BhcnNlCisjICBkZWZpbmUgRENIQVJfQ1BZIG1lbWNweQorIyAgZGVmaW5lIERDSEFSX1NFVCBtZW1zZXQKKyMgZW5kaWYKKyNlbmRpZgorI2lmIFdJREVfQ0hBUl9WRVJTSU9OCisgIC8qIFRDSEFSX1QgaXMgd2NoYXJfdC4gICovCisjIGRlZmluZSBVU0VfU05QUklOVEYgMQorIyBpZiBIQVZFX0RFQ0xfX1NOV1BSSU5URgorICAgLyogT24gV2luZG93cywgdGhlIGZ1bmN0aW9uIHN3cHJpbnRmKCkgaGFzIGEgZGlmZmVyZW50IHNpZ25hdHVyZSB0aGFuCisgICAgICBvbiBVbml4OyB3ZSB1c2UgdGhlIGZ1bmN0aW9uIF9zbndwcmludGYoKSBvciAtIG9uIG1pbmd3IC0gc253cHJpbnRmKCkKKyAgICAgIGluc3RlYWQuICBUaGUgbWluZ3cgZnVuY3Rpb24gc253cHJpbnRmKCkgaGFzIGZld2VyIGJ1Z3MgdGhhbiB0aGUKKyAgICAgIE1TVkNSVCBmdW5jdGlvbiBfc253cHJpbnRmKCksIHNvIHByZWZlciB0aGF0LiAgKi8KKyMgIGlmIGRlZmluZWQgX19NSU5HVzMyX18KKyMgICBkZWZpbmUgU05QUklOVEYgc253cHJpbnRmCisjICBlbHNlCisjICAgZGVmaW5lIFNOUFJJTlRGIF9zbndwcmludGYKKyMgIGVuZGlmCisjIGVsc2UKKyAgIC8qIFVuaXguICAqLworIyAgZGVmaW5lIFNOUFJJTlRGIHN3cHJpbnRmCisjIGVuZGlmCisjZWxzZQorICAvKiBUQ0hBUl9UIGlzIGNoYXIuICAqLworICAvKiBVc2Ugc25wcmludGYgaWYgaXQgZXhpc3RzIHVuZGVyIHRoZSBuYW1lICdzbnByaW50Zicgb3IgJ19zbnByaW50ZicuCisgICAgIEJ1dCBkb24ndCB1c2UgaXQgb24gQmVPUywgc2luY2UgQmVPUyBzbnByaW50ZiBwcm9kdWNlcyBubyBvdXRwdXQgaWYgdGhlCisgICAgIHNpemUgYXJndW1lbnQgaXMgPj0gMHgzMDAwMDAwLgorICAgICBBbHNvIGRvbid0IHVzZSBpdCBvbiBMaW51eCBsaWJjNSwgc2luY2UgdGhlcmUgc25wcmludGYgd2l0aCBzaXplID0gMQorICAgICB3cml0ZXMgYW55IG91dHB1dCB3aXRob3V0IGJvdW5kcywgbGlrZSBzcHJpbnRmLiAgKi8KKyMgaWYgKEhBVkVfREVDTF9fU05QUklOVEYgfHwgSEFWRV9TTlBSSU5URikgJiYgIWRlZmluZWQgX19CRU9TX18gJiYgIShfX0dOVV9MSUJSQVJZX18gPT0gMSkKKyMgIGRlZmluZSBVU0VfU05QUklOVEYgMQorIyBlbHNlCisjICBkZWZpbmUgVVNFX1NOUFJJTlRGIDAKKyMgZW5kaWYKKyMgaWYgSEFWRV9ERUNMX19TTlBSSU5URgorICAgLyogV2luZG93cy4gIFRoZSBtaW5ndyBmdW5jdGlvbiBzbnByaW50ZigpIGhhcyBmZXdlciBidWdzIHRoYW4gdGhlIE1TVkNSVAorICAgICAgZnVuY3Rpb24gX3NucHJpbnRmKCksIHNvIHByZWZlciB0aGF0LiAgKi8KKyMgIGlmIGRlZmluZWQgX19NSU5HVzMyX18KKyMgICBkZWZpbmUgU05QUklOVEYgc25wcmludGYKKyAgICAvKiBIZXJlIHdlIG5lZWQgdG8gY2FsbCB0aGUgbmF0aXZlIHNucHJpbnRmLCBub3QgcnBsX3NucHJpbnRmLiAgKi8KKyMgICB1bmRlZiBzbnByaW50ZgorIyAgZWxzZQorIyAgIGRlZmluZSBTTlBSSU5URiBfc25wcmludGYKKyMgIGVuZGlmCisjIGVsc2UKKyAgIC8qIFVuaXguICAqLworIyAgZGVmaW5lIFNOUFJJTlRGIHNucHJpbnRmCisgICAvKiBIZXJlIHdlIG5lZWQgdG8gY2FsbCB0aGUgbmF0aXZlIHNucHJpbnRmLCBub3QgcnBsX3NucHJpbnRmLiAgKi8KKyMgIHVuZGVmIHNucHJpbnRmCisjIGVuZGlmCisjZW5kaWYKKy8qIEhlcmUgd2UgbmVlZCB0byBjYWxsIHRoZSBuYXRpdmUgc3ByaW50Ziwgbm90IHJwbF9zcHJpbnRmLiAgKi8KKyN1bmRlZiBzcHJpbnRmCisKKy8qIEdDQyA+PSA0LjAgd2l0aCAtV2FsbCBlbWl0cyB1bmp1c3RpZmllZCAiLi4uIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQiCisgICB3YXJuaW5ncyBpbiB0aGlzIGZpbGUuICBVc2UgLURsaW50IHRvIHN1cHByZXNzIHRoZW0uICAqLworI2lmZGVmIGxpbnQKKyMgZGVmaW5lIElGX0xJTlQoQ29kZSkgQ29kZQorI2Vsc2UKKyMgZGVmaW5lIElGX0xJTlQoQ29kZSkgLyogZW1wdHkgKi8KKyNlbmRpZgorCisvKiBBdm9pZCBzb21lIHdhcm5pbmdzIGZyb20gImdjYyAtV3NoYWRvdyIuCisgICBUaGlzIGZpbGUgZG9lc24ndCB1c2UgdGhlIGV4cCgpIGFuZCByZW1haW5kZXIoKSBmdW5jdGlvbnMuICAqLworI3VuZGVmIGV4cAorI2RlZmluZSBleHAgZXhwbworI3VuZGVmIHJlbWFpbmRlcgorI2RlZmluZSByZW1haW5kZXIgcmVtCisKKyNpZiAoIVVTRV9TTlBSSU5URiB8fCAhSEFWRV9TTlBSSU5URl9SRVRWQUxfQzk5KSAmJiAhV0lERV9DSEFSX1ZFUlNJT04KKyMgaWYgKEhBVkVfU1RSTkxFTiAmJiAhZGVmaW5lZCBfQUlYKQorIyAgZGVmaW5lIGxvY2FsX3N0cm5sZW4gc3RybmxlbgorIyBlbHNlCisjICBpZm5kZWYgbG9jYWxfc3Rybmxlbl9kZWZpbmVkCisjICAgZGVmaW5lIGxvY2FsX3N0cm5sZW5fZGVmaW5lZCAxCitzdGF0aWMgc2l6ZV90Citsb2NhbF9zdHJubGVuIChjb25zdCBjaGFyICpzdHJpbmcsIHNpemVfdCBtYXhsZW4pCit7CisgIGNvbnN0IGNoYXIgKmVuZCA9IG1lbWNociAoc3RyaW5nLCAnXDAnLCBtYXhsZW4pOworICByZXR1cm4gZW5kID8gKHNpemVfdCkgKGVuZCAtIHN0cmluZykgOiBtYXhsZW47Cit9CisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiAoKCghVVNFX1NOUFJJTlRGIHx8ICFIQVZFX1NOUFJJTlRGX1JFVFZBTF9DOTkpICYmIFdJREVfQ0hBUl9WRVJTSU9OKSB8fCAoKCFVU0VfU05QUklOVEYgfHwgIUhBVkVfU05QUklOVEZfUkVUVkFMX0M5OSB8fCAoTkVFRF9QUklOVEZfRElSRUNUSVZFX0xTICYmICFkZWZpbmVkIElOX0xJQklOVEwpKSAmJiAhV0lERV9DSEFSX1ZFUlNJT04gJiYgRENIQVJfSVNfVENIQVIpKSAmJiBIQVZFX1dDSEFSX1QKKyMgaWYgSEFWRV9XQ1NMRU4KKyMgIGRlZmluZSBsb2NhbF93Y3NsZW4gd2NzbGVuCisjIGVsc2UKKyAgIC8qIFNvbGFyaXMgMi41LjEgaGFzIHdjc2xlbigpIGluIGEgc2VwYXJhdGUgbGlicmFyeSBsaWJ3LnNvLiBUbyBhdm9pZAorICAgICAgYSBkZXBlbmRlbmN5IHRvd2FyZHMgdGhpcyBsaWJyYXJ5LCBoZXJlIGlzIGEgbG9jYWwgc3Vic3RpdHV0ZS4KKyAgICAgIERlZmluZSB0aGlzIHN1YnN0aXR1dGUgb25seSBvbmNlLCBldmVuIGlmIHRoaXMgZmlsZSBpcyBpbmNsdWRlZAorICAgICAgdHdpY2UgaW4gdGhlIHNhbWUgY29tcGlsYXRpb24gdW5pdC4gICovCisjICBpZm5kZWYgbG9jYWxfd2NzbGVuX2RlZmluZWQKKyMgICBkZWZpbmUgbG9jYWxfd2NzbGVuX2RlZmluZWQgMQorc3RhdGljIHNpemVfdAorbG9jYWxfd2NzbGVuIChjb25zdCB3Y2hhcl90ICpzKQoreworICBjb25zdCB3Y2hhcl90ICpwdHI7CisKKyAgZm9yIChwdHIgPSBzOyAqcHRyICE9ICh3Y2hhcl90KSAwOyBwdHIrKykKKyAgICA7CisgIHJldHVybiBwdHIgLSBzOworfQorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgKCFVU0VfU05QUklOVEYgfHwgIUhBVkVfU05QUklOVEZfUkVUVkFMX0M5OSkgJiYgSEFWRV9XQ0hBUl9UICYmIFdJREVfQ0hBUl9WRVJTSU9OCisjIGlmIEhBVkVfV0NTTkxFTgorIyAgZGVmaW5lIGxvY2FsX3djc25sZW4gd2NzbmxlbgorIyBlbHNlCisjICBpZm5kZWYgbG9jYWxfd2Nzbmxlbl9kZWZpbmVkCisjICAgZGVmaW5lIGxvY2FsX3djc25sZW5fZGVmaW5lZCAxCitzdGF0aWMgc2l6ZV90Citsb2NhbF93Y3NubGVuIChjb25zdCB3Y2hhcl90ICpzLCBzaXplX3QgbWF4bGVuKQoreworICBjb25zdCB3Y2hhcl90ICpwdHI7CisKKyAgZm9yIChwdHIgPSBzOyBtYXhsZW4gPiAwICYmICpwdHIgIT0gKHdjaGFyX3QpIDA7IHB0cisrLCBtYXhsZW4tLSkKKyAgICA7CisgIHJldHVybiBwdHIgLSBzOworfQorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgKE5FRURfUFJJTlRGX0RJUkVDVElWRV9BIHx8IE5FRURfUFJJTlRGX0xPTkdfRE9VQkxFIHx8IE5FRURfUFJJTlRGX0lORklOSVRFX0xPTkdfRE9VQkxFIHx8IE5FRURfUFJJTlRGX0RPVUJMRSB8fCBORUVEX1BSSU5URl9JTkZJTklURV9ET1VCTEUpICYmICFkZWZpbmVkIElOX0xJQklOVEwKKy8qIERldGVybWluZSB0aGUgZGVjaW1hbC1wb2ludCBjaGFyYWN0ZXIgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGxvY2FsZS4gICovCisjIGlmbmRlZiBkZWNpbWFsX3BvaW50X2NoYXJfZGVmaW5lZAorIyAgZGVmaW5lIGRlY2ltYWxfcG9pbnRfY2hhcl9kZWZpbmVkIDEKK3N0YXRpYyBjaGFyCitkZWNpbWFsX3BvaW50X2NoYXIgKHZvaWQpCit7CisgIGNvbnN0IGNoYXIgKnBvaW50OworICAvKiBEZXRlcm1pbmUgaXQgaW4gYSBtdWx0aXRocmVhZC1zYWZlIHdheS4gIFdlIGtub3cgbmxfbGFuZ2luZm8gaXMKKyAgICAgbXVsdGl0aHJlYWQtc2FmZSBvbiBnbGliYyBzeXN0ZW1zIGFuZCBNYWMgT1MgWCBzeXN0ZW1zLCBidXQgaXMgbm90IHJlcXVpcmVkCisgICAgIHRvIGJlIG11bHRpdGhyZWFkLXNhZmUgYnkgUE9TSVguICBzcHJpbnRmKCksIGhvd2V2ZXIsIGlzIG11bHRpdGhyZWFkLXNhZmUuCisgICAgIGxvY2FsZWNvbnYoKSBpcyByYXJlbHkgbXVsdGl0aHJlYWQtc2FmZS4gICovCisjICBpZiBIQVZFX05MX0xBTkdJTkZPICYmIChfX0dMSUJDX18gfHwgZGVmaW5lZCBfX1VDTElCQ19fIHx8IChkZWZpbmVkIF9fQVBQTEVfXyAmJiBkZWZpbmVkIF9fTUFDSF9fKSkKKyAgcG9pbnQgPSBubF9sYW5naW5mbyAoUkFESVhDSEFSKTsKKyMgIGVsaWYgMQorICBjaGFyIHBvaW50YnVmWzVdOworICBzcHJpbnRmIChwb2ludGJ1ZiwgIiUjLjBmIiwgMS4wKTsKKyAgcG9pbnQgPSAmcG9pbnRidWZbMV07CisjICBlbHNlCisgIHBvaW50ID0gbG9jYWxlY29udiAoKSAtPiBkZWNpbWFsX3BvaW50OworIyAgZW5kaWYKKyAgLyogVGhlIGRlY2ltYWwgcG9pbnQgaXMgYWx3YXlzIGEgc2luZ2xlIGJ5dGU6IGVpdGhlciAnLicgb3IgJywnLiAgKi8KKyAgcmV0dXJuIChwb2ludFswXSAhPSAnXDAnID8gcG9pbnRbMF0gOiAnLicpOworfQorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBORUVEX1BSSU5URl9JTkZJTklURV9ET1VCTEUgJiYgIU5FRURfUFJJTlRGX0RPVUJMRSAmJiAhZGVmaW5lZCBJTl9MSUJJTlRMCisKKy8qIEVxdWl2YWxlbnQgdG8gIWlzZmluaXRlKHgpIHx8IHggPT0gMCwgYnV0IGRvZXMgbm90IHJlcXVpcmUgbGlibS4gICovCitzdGF0aWMgaW50Citpc19pbmZpbml0ZV9vcl96ZXJvIChkb3VibGUgeCkKK3sKKyAgcmV0dXJuIGlzbmFuZCAoeCkgfHwgeCArIHggPT0geDsKK30KKworI2VuZGlmCisKKyNpZiBORUVEX1BSSU5URl9JTkZJTklURV9MT05HX0RPVUJMRSAmJiAhTkVFRF9QUklOVEZfTE9OR19ET1VCTEUgJiYgIWRlZmluZWQgSU5fTElCSU5UTAorCisvKiBFcXVpdmFsZW50IHRvICFpc2Zpbml0ZSh4KSB8fCB4ID09IDAsIGJ1dCBkb2VzIG5vdCByZXF1aXJlIGxpYm0uICAqLworc3RhdGljIGludAoraXNfaW5maW5pdGVfb3JfemVyb2wgKGxvbmcgZG91YmxlIHgpCit7CisgIHJldHVybiBpc25hbmwgKHgpIHx8IHggKyB4ID09IHg7Cit9CisKKyNlbmRpZgorCisjaWYgKE5FRURfUFJJTlRGX0xPTkdfRE9VQkxFIHx8IE5FRURfUFJJTlRGX0RPVUJMRSkgJiYgIWRlZmluZWQgSU5fTElCSU5UTAorCisvKiBDb252ZXJ0aW5nICdsb25nIGRvdWJsZScgdG8gZGVjaW1hbCB3aXRob3V0IHJhcmUgcm91bmRpbmcgYnVncyByZXF1aXJlcworICAgcmVhbCBiaWdudW1zLiAgV2UgdXNlIHRoZSBuYW1pbmcgY29udmVudGlvbnMgb2YgR05VIGdtcCwgYnV0IHZhc3RseSBzaW1wbGVyCisgICAoYW5kIHNsb3dlcikgYWxnb3JpdGhtcy4gICovCisKK3R5cGVkZWYgdW5zaWduZWQgaW50IG1wX2xpbWJfdDsKKyMgZGVmaW5lIEdNUF9MSU1CX0JJVFMgMzIKK3ZlcmlmeSAoc2l6ZW9mIChtcF9saW1iX3QpICogQ0hBUl9CSVQgPT0gR01QX0xJTUJfQklUUyk7CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIG1wX3R3b2xpbWJfdDsKKyMgZGVmaW5lIEdNUF9UV09MSU1CX0JJVFMgNjQKK3ZlcmlmeSAoc2l6ZW9mIChtcF90d29saW1iX3QpICogQ0hBUl9CSVQgPT0gR01QX1RXT0xJTUJfQklUUyk7CisKKy8qIFJlcHJlc2VudGF0aW9uIG9mIGEgYmlnbnVtID49IDAuICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgc2l6ZV90IG5saW1iczsKKyAgbXBfbGltYl90ICpsaW1iczsgLyogQml0cyBpbiBsaXR0bGUtZW5kaWFuIG9yZGVyLCBhbGxvY2F0ZWQgd2l0aCBtYWxsb2MoKS4gICovCit9IG1wbl90OworCisvKiBDb21wdXRlIHRoZSBwcm9kdWN0IG9mIHR3byBiaWdudW1zID49IDAuCisgICBSZXR1cm4gdGhlIGFsbG9jYXRlZCBtZW1vcnkgaW4gY2FzZSBvZiBzdWNjZXNzLCBOVUxMIGluIGNhc2Ugb2YgbWVtb3J5CisgICBhbGxvY2F0aW9uIGZhaWx1cmUuICAqLworc3RhdGljIHZvaWQgKgorbXVsdGlwbHkgKG1wbl90IHNyYzEsIG1wbl90IHNyYzIsIG1wbl90ICpkZXN0KQoreworICBjb25zdCBtcF9saW1iX3QgKnAxOworICBjb25zdCBtcF9saW1iX3QgKnAyOworICBzaXplX3QgbGVuMTsKKyAgc2l6ZV90IGxlbjI7CisKKyAgaWYgKHNyYzEubmxpbWJzIDw9IHNyYzIubmxpbWJzKQorICAgIHsKKyAgICAgIGxlbjEgPSBzcmMxLm5saW1iczsKKyAgICAgIHAxID0gc3JjMS5saW1iczsKKyAgICAgIGxlbjIgPSBzcmMyLm5saW1iczsKKyAgICAgIHAyID0gc3JjMi5saW1iczsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBsZW4xID0gc3JjMi5ubGltYnM7CisgICAgICBwMSA9IHNyYzIubGltYnM7CisgICAgICBsZW4yID0gc3JjMS5ubGltYnM7CisgICAgICBwMiA9IHNyYzEubGltYnM7CisgICAgfQorICAvKiBOb3cgMCA8PSBsZW4xIDw9IGxlbjIuICAqLworICBpZiAobGVuMSA9PSAwKQorICAgIHsKKyAgICAgIC8qIHNyYzEgb3Igc3JjMiBpcyB6ZXJvLiAgKi8KKyAgICAgIGRlc3QtPm5saW1icyA9IDA7CisgICAgICBkZXN0LT5saW1icyA9IChtcF9saW1iX3QgKikgbWFsbG9jICgxKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBIZXJlIDEgPD0gbGVuMSA8PSBsZW4yLiAgKi8KKyAgICAgIHNpemVfdCBkbGVuOworICAgICAgbXBfbGltYl90ICpkcDsKKyAgICAgIHNpemVfdCBrLCBpLCBqOworCisgICAgICBkbGVuID0gbGVuMSArIGxlbjI7CisgICAgICBkcCA9IChtcF9saW1iX3QgKikgbWFsbG9jIChkbGVuICogc2l6ZW9mIChtcF9saW1iX3QpKTsKKyAgICAgIGlmIChkcCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIGZvciAoayA9IGxlbjI7IGsgPiAwOyApCisgICAgICAgIGRwWy0ta10gPSAwOworICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjE7IGkrKykKKyAgICAgICAgeworICAgICAgICAgIG1wX2xpbWJfdCBkaWdpdDEgPSBwMVtpXTsKKyAgICAgICAgICBtcF90d29saW1iX3QgY2FycnkgPSAwOworICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsZW4yOyBqKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG1wX2xpbWJfdCBkaWdpdDIgPSBwMltqXTsKKyAgICAgICAgICAgICAgY2FycnkgKz0gKG1wX3R3b2xpbWJfdCkgZGlnaXQxICogKG1wX3R3b2xpbWJfdCkgZGlnaXQyOworICAgICAgICAgICAgICBjYXJyeSArPSBkcFtpICsgal07CisgICAgICAgICAgICAgIGRwW2kgKyBqXSA9IChtcF9saW1iX3QpIGNhcnJ5OworICAgICAgICAgICAgICBjYXJyeSA9IGNhcnJ5ID4+IEdNUF9MSU1CX0JJVFM7CisgICAgICAgICAgICB9CisgICAgICAgICAgZHBbaSArIGxlbjJdID0gKG1wX2xpbWJfdCkgY2Fycnk7CisgICAgICAgIH0KKyAgICAgIC8qIE5vcm1hbGlzZS4gICovCisgICAgICB3aGlsZSAoZGxlbiA+IDAgJiYgZHBbZGxlbiAtIDFdID09IDApCisgICAgICAgIGRsZW4tLTsKKyAgICAgIGRlc3QtPm5saW1icyA9IGRsZW47CisgICAgICBkZXN0LT5saW1icyA9IGRwOworICAgIH0KKyAgcmV0dXJuIGRlc3QtPmxpbWJzOworfQorCisvKiBDb21wdXRlIHRoZSBxdW90aWVudCBvZiBhIGJpZ251bSBhID49IDAgYW5kIGEgYmlnbnVtIGIgPiAwLgorICAgYSBpcyB3cml0dGVuIGFzICBhID0gcSAqIGIgKyByICB3aXRoIDAgPD0gciA8IGIuICBxIGlzIHRoZSBxdW90aWVudCwgcgorICAgdGhlIHJlbWFpbmRlci4KKyAgIEZpbmFsbHksIHJvdW5kLXRvLWV2ZW4gaXMgcGVyZm9ybWVkOiBJZiByID4gYi8yIG9yIGlmIHIgPSBiLzIgYW5kIHEgaXMgb2RkLAorICAgcSBpcyBpbmNyZW1lbnRlZC4KKyAgIFJldHVybiB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpbiBjYXNlIG9mIHN1Y2Nlc3MsIE5VTEwgaW4gY2FzZSBvZiBtZW1vcnkKKyAgIGFsbG9jYXRpb24gZmFpbHVyZS4gICovCitzdGF0aWMgdm9pZCAqCitkaXZpZGUgKG1wbl90IGEsIG1wbl90IGIsIG1wbl90ICpxKQoreworICAvKiBBbGdvcml0aG06CisgICAgIEZpcnN0IG5vcm1hbGlzZSBhIGFuZCBiOiBhPVthW20tMV0sLi4uLGFbMF1dLCBiPVtiW24tMV0sLi4uLGJbMF1dCisgICAgIHdpdGggbT49MCBhbmQgbj4wIChpbiBiYXNlIGJldGEgPSAyXkdNUF9MSU1CX0JJVFMpLgorICAgICBJZiBtPG4sIHRoZW4gcTo9MCBhbmQgcjo9YS4KKyAgICAgSWYgbT49bj0xLCBwZXJmb3JtIGEgc2luZ2xlLXByZWNpc2lvbiBkaXZpc2lvbjoKKyAgICAgICByOj0wLCBqOj1tLAorICAgICAgIHdoaWxlIGo+MCBkbworICAgICAgICAge0hlcmUgKHFbbS0xXSpiZXRhXihtLTEpKy4uLitxW2pdKmJldGFeaikgKiBiWzBdICsgcipiZXRhXmogPQorICAgICAgICAgICAgICAgPSBhW20tMV0qYmV0YV4obS0xKSsuLi4rYVtqXSpiZXRhXmogdW5kIDA8PXI8YlswXTxiZXRhfQorICAgICAgICAgajo9ai0xLCByOj1yKmJldGErYVtqXSwgcVtqXTo9Zmxvb3Ioci9iWzBdKSwgcjo9ci1iWzBdKnFbal0uCisgICAgICAgTm9ybWFsaXNlIFtxW20tMV0sLi4uLHFbMF1dLCB5aWVsZHMgcS4KKyAgICAgSWYgbT49bj4xLCBwZXJmb3JtIGEgbXVsdGlwbGUtcHJlY2lzaW9uIGRpdmlzaW9uOgorICAgICAgIFdlIGhhdmUgYS9iIDwgYmV0YV4obS1uKzEpLgorICAgICAgIHM6PWludERzaXplLTEtKGhpZ2hlc3QgYml0IGluIGJbbi0xXSksIDA8PXM8aW50RHNpemUuCisgICAgICAgU2hpZnQgYSBhbmQgYiBsZWZ0IGJ5IHMgYml0cywgY29weWluZyB0aGVtLiByOj1hLgorICAgICAgIHI9W3JbbV0sLi4uLHJbMF1dLCBiPVtiW24tMV0sLi4uLGJbMF1dIHdpdGggYltuLTFdPj1iZXRhLzIuCisgICAgICAgRm9yIGo9bS1uLC4uLiwwOiB7SGVyZSAwIDw9IHIgPCBiKmJldGFeKGorMSkufQorICAgICAgICAgQ29tcHV0ZSBxKiA6CisgICAgICAgICAgIHEqIDo9IGZsb29yKChyW2orbl0qYmV0YStyW2orbi0xXSkvYltuLTFdKS4KKyAgICAgICAgICAgSW4gY2FzZSBvZiBvdmVyZmxvdyAocSogPj0gYmV0YSkgc2V0IHEqIDo9IGJldGEtMS4KKyAgICAgICAgICAgQ29tcHV0ZSBjMiA6PSAoKHJbaituXSpiZXRhK3JbaituLTFdKSAtIHEqICogYltuLTFdKSpiZXRhICsgcltqK24tMl0KKyAgICAgICAgICAgYW5kIGMzIDo9IGJbbi0yXSAqIHEqLgorICAgICAgICAgICB7V2UgaGF2ZSAwIDw9IGMyIDwgMipiZXRhXjIsIGV2ZW4gMCA8PSBjMiA8IGJldGFeMiBpZiBubyBvdmVyZmxvdworICAgICAgICAgICAgb2NjdXJyZWQuICBGdXJ0aGVybW9yZSAwIDw9IGMzIDwgYmV0YV4yLgorICAgICAgICAgICAgSWYgdGhlcmUgd2FzIG92ZXJmbG93IGFuZAorICAgICAgICAgICAgcltqK25dKmJldGErcltqK24tMV0gLSBxKiAqIGJbbi0xXSA+PSBiZXRhLCBpLmUuIGMyID49IGJldGFeMiwKKyAgICAgICAgICAgIHRoZSBuZXh0IHRlc3QgY2FuIGJlIHNraXBwZWQufQorICAgICAgICAgICBXaGlsZSBjMyA+IGMyLCB7SGVyZSAwIDw9IGMyIDwgYzMgPCBiZXRhXjJ9CisgICAgICAgICAgICAgUHV0IHEqIDo9IHEqIC0gMSwgYzIgOj0gYzIgKyBiW24tMV0qYmV0YSwgYzMgOj0gYzMgLSBiW24tMl0uCisgICAgICAgICAgIElmIHEqID4gMDoKKyAgICAgICAgICAgICBQdXQgciA6PSByIC0gYiAqIHEqICogYmV0YV5qLiBJbiBkZXRhaWw6CisgICAgICAgICAgICAgICBbcltuK2pdLC4uLixyW2pdXSA6PSBbcltuK2pdLC4uLixyW2pdXSAtIHEqICogW2Jbbi0xXSwuLi4sYlswXV0uCisgICAgICAgICAgICAgICBoZW5jZTogdTo9MCwgZm9yIGk6PTAgdG8gbi0xIGRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1IDo9IHUgKyBxKiAqIGJbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByW2oraV06PXJbaitpXS0odSBtb2QgYmV0YSkgKCsgYmV0YSwgaWYgY2FycnkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTo9dSBkaXYgYmV0YSAoKyAxLCBpZiBjYXJyeSBpbiBzdWJ0cmFjdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICByW24ral06PXJbbitqXS11LgorICAgICAgICAgICAgICAge1NpbmNlIGFsd2F5cyB1ID0gKHEqICogW2JbaS0xXSwuLi4sYlswXV0gZGl2IGJldGFeaSkgKyAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCBxKiArIDEgPD0gYmV0YSwKKyAgICAgICAgICAgICAgICB0aGUgY2FycnkgdSBkb2VzIG5vdCBvdmVyZmxvdy59CisgICAgICAgICAgICAgSWYgYSBuZWdhdGl2ZSBjYXJyeSBvY2N1cnMsIHB1dCBxKiA6PSBxKiAtIDEKKyAgICAgICAgICAgICAgIGFuZCBbcltuK2pdLC4uLixyW2pdXSA6PSBbcltuK2pdLC4uLixyW2pdXSArIFswLGJbbi0xXSwuLi4sYlswXV0uCisgICAgICAgICBTZXQgcVtqXSA6PSBxKi4KKyAgICAgICBOb3JtYWxpc2UgW3FbbS1uXSwuLixxWzBdXTsgdGhpcyB5aWVsZHMgdGhlIHF1b3RpZW50IHEuCisgICAgICAgU2hpZnQgW3Jbbi0xXSwuLi4sclswXV0gcmlnaHQgYnkgcyBiaXRzIGFuZCBub3JtYWxpc2U7IHRoaXMgeWllbGRzIHRoZQorICAgICAgIHJlc3Qgci4KKyAgICAgICBUaGUgcm9vbSBmb3IgcVtqXSBjYW4gYmUgYWxsb2NhdGVkIGF0IHRoZSBtZW1vcnkgbG9jYXRpb24gb2YgcltuK2pdLgorICAgICBGaW5hbGx5LCByb3VuZC10by1ldmVuOgorICAgICAgIFNoaWZ0IHIgbGVmdCBieSAxIGJpdC4KKyAgICAgICBJZiByID4gYiBvciBpZiByID0gYiBhbmQgcVswXSBpcyBvZGQsIHEgOj0gcSsxLgorICAgKi8KKyAgY29uc3QgbXBfbGltYl90ICphX3B0ciA9IGEubGltYnM7CisgIHNpemVfdCBhX2xlbiA9IGEubmxpbWJzOworICBjb25zdCBtcF9saW1iX3QgKmJfcHRyID0gYi5saW1iczsKKyAgc2l6ZV90IGJfbGVuID0gYi5ubGltYnM7CisgIG1wX2xpbWJfdCAqcm9vbXB0cjsKKyAgbXBfbGltYl90ICp0bXBfcm9vbXB0ciA9IE5VTEw7CisgIG1wX2xpbWJfdCAqcV9wdHI7CisgIHNpemVfdCBxX2xlbjsKKyAgbXBfbGltYl90ICpyX3B0cjsKKyAgc2l6ZV90IHJfbGVuOworCisgIC8qIEFsbG9jYXRlIHJvb20gZm9yIGFfbGVuKzIgZGlnaXRzLgorICAgICAoTmVlZCBhX2xlbisxIGRpZ2l0cyBmb3IgdGhlIHJlYWwgZGl2aXNpb24gYW5kIDEgbW9yZSBkaWdpdCBmb3IgdGhlCisgICAgIGZpbmFsIHJvdW5kaW5nIG9mIHEuKSAgKi8KKyAgcm9vbXB0ciA9IChtcF9saW1iX3QgKikgbWFsbG9jICgoYV9sZW4gKyAyKSAqIHNpemVvZiAobXBfbGltYl90KSk7CisgIGlmIChyb29tcHRyID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgLyogTm9ybWFsaXNlIGEuICAqLworICB3aGlsZSAoYV9sZW4gPiAwICYmIGFfcHRyW2FfbGVuIC0gMV0gPT0gMCkKKyAgICBhX2xlbi0tOworCisgIC8qIE5vcm1hbGlzZSBiLiAgKi8KKyAgZm9yICg7OykKKyAgICB7CisgICAgICBpZiAoYl9sZW4gPT0gMCkKKyAgICAgICAgLyogRGl2aXNpb24gYnkgemVyby4gICovCisgICAgICAgIGFib3J0ICgpOworICAgICAgaWYgKGJfcHRyW2JfbGVuIC0gMV0gPT0gMCkKKyAgICAgICAgYl9sZW4tLTsKKyAgICAgIGVsc2UKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgIC8qIEhlcmUgbSA9IGFfbGVuID49IDAgYW5kIG4gPSBiX2xlbiA+IDAuICAqLworCisgIGlmIChhX2xlbiA8IGJfbGVuKQorICAgIHsKKyAgICAgIC8qIG08bjogdHJpdmlhbCBjYXNlLiAgcT0wLCByIDo9IGNvcHkgb2YgYS4gICovCisgICAgICByX3B0ciA9IHJvb21wdHI7CisgICAgICByX2xlbiA9IGFfbGVuOworICAgICAgbWVtY3B5IChyX3B0ciwgYV9wdHIsIGFfbGVuICogc2l6ZW9mIChtcF9saW1iX3QpKTsKKyAgICAgIHFfcHRyID0gcm9vbXB0ciArIGFfbGVuOworICAgICAgcV9sZW4gPSAwOworICAgIH0KKyAgZWxzZSBpZiAoYl9sZW4gPT0gMSkKKyAgICB7CisgICAgICAvKiBuPTE6IHNpbmdsZSBwcmVjaXNpb24gZGl2aXNpb24uCisgICAgICAgICBiZXRhXihtLTEpIDw9IGEgPCBiZXRhXm0gID09PiAgYmV0YV4obS0yKSA8PSBhL2IgPCBiZXRhXm0gICovCisgICAgICByX3B0ciA9IHJvb21wdHI7CisgICAgICBxX3B0ciA9IHJvb21wdHIgKyAxOworICAgICAgeworICAgICAgICBtcF9saW1iX3QgZGVuID0gYl9wdHJbMF07CisgICAgICAgIG1wX2xpbWJfdCByZW1haW5kZXIgPSAwOworICAgICAgICBjb25zdCBtcF9saW1iX3QgKnNvdXJjZXB0ciA9IGFfcHRyICsgYV9sZW47CisgICAgICAgIG1wX2xpbWJfdCAqZGVzdHB0ciA9IHFfcHRyICsgYV9sZW47CisgICAgICAgIHNpemVfdCBjb3VudDsKKyAgICAgICAgZm9yIChjb3VudCA9IGFfbGVuOyBjb3VudCA+IDA7IGNvdW50LS0pCisgICAgICAgICAgeworICAgICAgICAgICAgbXBfdHdvbGltYl90IG51bSA9CisgICAgICAgICAgICAgICgobXBfdHdvbGltYl90KSByZW1haW5kZXIgPDwgR01QX0xJTUJfQklUUykgfCAqLS1zb3VyY2VwdHI7CisgICAgICAgICAgICAqLS1kZXN0cHRyID0gbnVtIC8gZGVuOworICAgICAgICAgICAgcmVtYWluZGVyID0gbnVtICUgZGVuOworICAgICAgICAgIH0KKyAgICAgICAgLyogTm9ybWFsaXNlIGFuZCBzdG9yZSByLiAgKi8KKyAgICAgICAgaWYgKHJlbWFpbmRlciA+IDApCisgICAgICAgICAgeworICAgICAgICAgICAgcl9wdHJbMF0gPSByZW1haW5kZXI7CisgICAgICAgICAgICByX2xlbiA9IDE7CisgICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgcl9sZW4gPSAwOworICAgICAgICAvKiBOb3JtYWxpc2UgcS4gICovCisgICAgICAgIHFfbGVuID0gYV9sZW47CisgICAgICAgIGlmIChxX3B0cltxX2xlbiAtIDFdID09IDApCisgICAgICAgICAgcV9sZW4tLTsKKyAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBuPjE6IG11bHRpcGxlIHByZWNpc2lvbiBkaXZpc2lvbi4KKyAgICAgICAgIGJldGFeKG0tMSkgPD0gYSA8IGJldGFebSwgYmV0YV4obi0xKSA8PSBiIDwgYmV0YV5uICA9PT4KKyAgICAgICAgIGJldGFeKG0tbi0xKSA8PSBhL2IgPCBiZXRhXihtLW4rMSkuICAqLworICAgICAgLyogRGV0ZXJtaW5lIHMuICAqLworICAgICAgc2l6ZV90IHM7CisgICAgICB7CisgICAgICAgIG1wX2xpbWJfdCBtc2QgPSBiX3B0cltiX2xlbiAtIDFdOyAvKiA9IGJbbi0xXSwgPiAwICovCisgICAgICAgIC8qIERldGVybWluZSBzID0gR01QX0xJTUJfQklUUyAtIGludGVnZXJfbGVuZ3RoIChtc2QpLgorICAgICAgICAgICBDb2RlIGNvcGllZCBmcm9tIGdudWxpYidzIGludGVnZXJfbGVuZ3RoLmMuICAqLworIyBpZiBfX0dOVUNfXyA+IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gNCkKKyAgICAgICAgcyA9IF9fYnVpbHRpbl9jbHogKG1zZCk7CisjIGVsc2UKKyMgIGlmIGRlZmluZWQgREJMX0VYUEJJVDBfV09SRCAmJiBkZWZpbmVkIERCTF9FWFBCSVQwX0JJVAorICAgICAgICBpZiAoR01QX0xJTUJfQklUUyA8PSBEQkxfTUFOVF9CSVQpCisgICAgICAgICAgeworICAgICAgICAgICAgLyogVXNlICdkb3VibGUnIG9wZXJhdGlvbnMuCisgICAgICAgICAgICAgICBBc3N1bWVzIGFuIElFRUUgNzU0ICdkb3VibGUnIGltcGxlbWVudGF0aW9uLiAgKi8KKyMgICBkZWZpbmUgREJMX0VYUF9NQVNLICgoREJMX01BWF9FWFAgLSBEQkxfTUlOX0VYUCkgfCA3KQorIyAgIGRlZmluZSBEQkxfRVhQX0JJQVMgKERCTF9FWFBfTUFTSyAvIDIgLSAxKQorIyAgIGRlZmluZSBOV09SRFMgXAorICAgICAoKHNpemVvZiAoZG91YmxlKSArIHNpemVvZiAodW5zaWduZWQgaW50KSAtIDEpIC8gc2l6ZW9mICh1bnNpZ25lZCBpbnQpKQorICAgICAgICAgICAgdW5pb24geyBkb3VibGUgdmFsdWU7IHVuc2lnbmVkIGludCB3b3JkW05XT1JEU107IH0gbTsKKworICAgICAgICAgICAgLyogVXNlIGEgc2luZ2xlIGludGVnZXIgdG8gZmxvYXRpbmctcG9pbnQgY29udmVyc2lvbi4gICovCisgICAgICAgICAgICBtLnZhbHVlID0gbXNkOworCisgICAgICAgICAgICBzID0gR01QX0xJTUJfQklUUworICAgICAgICAgICAgICAgIC0gKCgobS53b3JkW0RCTF9FWFBCSVQwX1dPUkRdID4+IERCTF9FWFBCSVQwX0JJVCkgJiBEQkxfRVhQX01BU0spCisgICAgICAgICAgICAgICAgICAgLSBEQkxfRVhQX0JJQVMpOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZQorIyAgIHVuZGVmIE5XT1JEUworIyAgZW5kaWYKKyAgICAgICAgICB7CisgICAgICAgICAgICBzID0gMzE7CisgICAgICAgICAgICBpZiAobXNkID49IDB4MTAwMDApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtc2QgPSBtc2QgPj4gMTY7CisgICAgICAgICAgICAgICAgcyAtPSAxNjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1zZCA+PSAweDEwMCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1zZCA9IG1zZCA+PiA4OworICAgICAgICAgICAgICAgIHMgLT0gODsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1zZCA+PSAweDEwKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbXNkID0gbXNkID4+IDQ7CisgICAgICAgICAgICAgICAgcyAtPSA0OworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobXNkID49IDB4NCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1zZCA9IG1zZCA+PiAyOworICAgICAgICAgICAgICAgIHMgLT0gMjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1zZCA+PSAweDIpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtc2QgPSBtc2QgPj4gMTsKKyAgICAgICAgICAgICAgICBzIC09IDE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisjIGVuZGlmCisgICAgICB9CisgICAgICAvKiAwIDw9IHMgPCBHTVBfTElNQl9CSVRTLgorICAgICAgICAgQ29weSBiLCBzaGlmdGluZyBpdCBsZWZ0IGJ5IHMgYml0cy4gICovCisgICAgICBpZiAocyA+IDApCisgICAgICAgIHsKKyAgICAgICAgICB0bXBfcm9vbXB0ciA9IChtcF9saW1iX3QgKikgbWFsbG9jIChiX2xlbiAqIHNpemVvZiAobXBfbGltYl90KSk7CisgICAgICAgICAgaWYgKHRtcF9yb29tcHRyID09IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZyZWUgKHJvb21wdHIpOworICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBtcF9saW1iX3QgKnNvdXJjZXB0ciA9IGJfcHRyOworICAgICAgICAgICAgbXBfbGltYl90ICpkZXN0cHRyID0gdG1wX3Jvb21wdHI7CisgICAgICAgICAgICBtcF90d29saW1iX3QgYWNjdSA9IDA7CisgICAgICAgICAgICBzaXplX3QgY291bnQ7CisgICAgICAgICAgICBmb3IgKGNvdW50ID0gYl9sZW47IGNvdW50ID4gMDsgY291bnQtLSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFjY3UgKz0gKG1wX3R3b2xpbWJfdCkgKnNvdXJjZXB0cisrIDw8IHM7CisgICAgICAgICAgICAgICAgKmRlc3RwdHIrKyA9IChtcF9saW1iX3QpIGFjY3U7CisgICAgICAgICAgICAgICAgYWNjdSA9IGFjY3UgPj4gR01QX0xJTUJfQklUUzsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogYWNjdSBtdXN0IGJlIHplcm8sIHNpbmNlIHRoYXQgd2FzIGhvdyBzIHdhcyBkZXRlcm1pbmVkLiAgKi8KKyAgICAgICAgICAgIGlmIChhY2N1ICE9IDApCisgICAgICAgICAgICAgIGFib3J0ICgpOworICAgICAgICAgIH0KKyAgICAgICAgICBiX3B0ciA9IHRtcF9yb29tcHRyOworICAgICAgICB9CisgICAgICAvKiBDb3B5IGEsIHNoaWZ0aW5nIGl0IGxlZnQgYnkgcyBiaXRzLCB5aWVsZHMgci4KKyAgICAgICAgIE1lbW9yeSBsYXlvdXQ6CisgICAgICAgICBBdCB0aGUgYmVnaW5uaW5nOiByID0gcm9vbXB0clswLi5hX2xlbl0sCisgICAgICAgICBhdCB0aGUgZW5kOiByID0gcm9vbXB0clswLi5iX2xlbi0xXSwgcSA9IHJvb21wdHJbYl9sZW4uLmFfbGVuXSAgKi8KKyAgICAgIHJfcHRyID0gcm9vbXB0cjsKKyAgICAgIGlmIChzID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBtZW1jcHkgKHJfcHRyLCBhX3B0ciwgYV9sZW4gKiBzaXplb2YgKG1wX2xpbWJfdCkpOworICAgICAgICAgIHJfcHRyW2FfbGVuXSA9IDA7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IG1wX2xpbWJfdCAqc291cmNlcHRyID0gYV9wdHI7CisgICAgICAgICAgbXBfbGltYl90ICpkZXN0cHRyID0gcl9wdHI7CisgICAgICAgICAgbXBfdHdvbGltYl90IGFjY3UgPSAwOworICAgICAgICAgIHNpemVfdCBjb3VudDsKKyAgICAgICAgICBmb3IgKGNvdW50ID0gYV9sZW47IGNvdW50ID4gMDsgY291bnQtLSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgYWNjdSArPSAobXBfdHdvbGltYl90KSAqc291cmNlcHRyKysgPDwgczsKKyAgICAgICAgICAgICAgKmRlc3RwdHIrKyA9IChtcF9saW1iX3QpIGFjY3U7CisgICAgICAgICAgICAgIGFjY3UgPSBhY2N1ID4+IEdNUF9MSU1CX0JJVFM7CisgICAgICAgICAgICB9CisgICAgICAgICAgKmRlc3RwdHIrKyA9IChtcF9saW1iX3QpIGFjY3U7CisgICAgICAgIH0KKyAgICAgIHFfcHRyID0gcm9vbXB0ciArIGJfbGVuOworICAgICAgcV9sZW4gPSBhX2xlbiAtIGJfbGVuICsgMTsgLyogcSB3aWxsIGhhdmUgbS1uKzEgbGltYnMgKi8KKyAgICAgIHsKKyAgICAgICAgc2l6ZV90IGogPSBhX2xlbiAtIGJfbGVuOyAvKiBtLW4gKi8KKyAgICAgICAgbXBfbGltYl90IGJfbXNkID0gYl9wdHJbYl9sZW4gLSAxXTsgLyogYltuLTFdICovCisgICAgICAgIG1wX2xpbWJfdCBiXzJtc2QgPSBiX3B0cltiX2xlbiAtIDJdOyAvKiBiW24tMl0gKi8KKyAgICAgICAgbXBfdHdvbGltYl90IGJfbXNkZCA9IC8qIGJbbi0xXSpiZXRhK2Jbbi0yXSAqLworICAgICAgICAgICgobXBfdHdvbGltYl90KSBiX21zZCA8PCBHTVBfTElNQl9CSVRTKSB8IGJfMm1zZDsKKyAgICAgICAgLyogRGl2aXNpb24gbG9vcCwgdHJhdmVyc2VkIG0tbisxIHRpbWVzLgorICAgICAgICAgICBqIGNvdW50cyBkb3duLCBiIGlzIHVuY2hhbmdlZCwgYmV0YS8yIDw9IGJbbi0xXSA8IGJldGEuICAqLworICAgICAgICBmb3IgKDs7KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIG1wX2xpbWJfdCBxX3N0YXI7CisgICAgICAgICAgICBtcF9saW1iX3QgYzE7CisgICAgICAgICAgICBpZiAocl9wdHJbaiArIGJfbGVuXSA8IGJfbXNkKSAvKiByW2orbl0gPCBiW24tMV0gPyAqLworICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogRGl2aWRlIHJbaituXSpiZXRhK3JbaituLTFdIGJ5IGJbbi0xXSwgbm8gb3ZlcmZsb3cuICAqLworICAgICAgICAgICAgICAgIG1wX3R3b2xpbWJfdCBudW0gPQorICAgICAgICAgICAgICAgICAgKChtcF90d29saW1iX3QpIHJfcHRyW2ogKyBiX2xlbl0gPDwgR01QX0xJTUJfQklUUykKKyAgICAgICAgICAgICAgICAgIHwgcl9wdHJbaiArIGJfbGVuIC0gMV07CisgICAgICAgICAgICAgICAgcV9zdGFyID0gbnVtIC8gYl9tc2Q7CisgICAgICAgICAgICAgICAgYzEgPSBudW0gJSBiX21zZDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogT3ZlcmZsb3csIGhlbmNlIHJbaituXSpiZXRhK3JbaituLTFdID49IGJldGEqYltuLTFdLiAgKi8KKyAgICAgICAgICAgICAgICBxX3N0YXIgPSAobXBfbGltYl90KX4obXBfbGltYl90KTA7IC8qIHEqID0gYmV0YS0xICovCisgICAgICAgICAgICAgICAgLyogVGVzdCB3aGV0aGVyIHJbaituXSpiZXRhK3JbaituLTFdIC0gKGJldGEtMSkqYltuLTFdID49IGJldGEKKyAgICAgICAgICAgICAgICAgICA8PT0+IHJbaituXSpiZXRhK3JbaituLTFdICsgYltuLTFdID49IGJldGEqYltuLTFdK2JldGEKKyAgICAgICAgICAgICAgICAgICA8PT0+IGJbbi0xXSA8IGZsb29yKChyW2orbl0qYmV0YStyW2orbi0xXStiW24tMV0pL2JldGEpCisgICAgICAgICAgICAgICAgICAgICAgICB7PD0gYmV0YSAhfS4KKyAgICAgICAgICAgICAgICAgICBJZiB5ZXMsIGp1bXAgZGlyZWN0bHkgdG8gdGhlIHN1YnRyYWN0aW9uIGxvb3AuCisgICAgICAgICAgICAgICAgICAgKE90aGVyd2lzZSwgcltqK25dKmJldGErcltqK24tMV0gLSAoYmV0YS0xKSpiW24tMV0gPCBiZXRhCisgICAgICAgICAgICAgICAgICAgIDw9PT4gZmxvb3IoKHJbaituXSpiZXRhK3JbaituLTFdK2Jbbi0xXSkvYmV0YSkgPSBiW24tMV0gKSAqLworICAgICAgICAgICAgICAgIGlmIChyX3B0cltqICsgYl9sZW5dID4gYl9tc2QKKyAgICAgICAgICAgICAgICAgICAgfHwgKGMxID0gcl9wdHJbaiArIGJfbGVuIC0gMV0gKyBiX21zZCkgPCBiX21zZCkKKyAgICAgICAgICAgICAgICAgIC8qIHJbaituXSA+PSBiW24tMV0rMSBvcgorICAgICAgICAgICAgICAgICAgICAgcltqK25dID0gYltuLTFdIGFuZCB0aGUgYWRkaXRpb24gcltqK24tMV0rYltuLTFdIGdpdmVzIGEKKyAgICAgICAgICAgICAgICAgICAgIGNhcnJ5LiAgKi8KKyAgICAgICAgICAgICAgICAgIGdvdG8gc3VidHJhY3Q7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIHFfc3RhciA9IHEqLAorICAgICAgICAgICAgICAgYzEgPSAocltqK25dKmJldGErcltqK24tMV0pIC0gcSogKiBiW24tMV0gKD49MCwgPGJldGEpLiAgKi8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbXBfdHdvbGltYl90IGMyID0gLyogYzEqYmV0YStyW2orbi0yXSAqLworICAgICAgICAgICAgICAgICgobXBfdHdvbGltYl90KSBjMSA8PCBHTVBfTElNQl9CSVRTKSB8IHJfcHRyW2ogKyBiX2xlbiAtIDJdOworICAgICAgICAgICAgICBtcF90d29saW1iX3QgYzMgPSAvKiBiW24tMl0gKiBxKiAqLworICAgICAgICAgICAgICAgIChtcF90d29saW1iX3QpIGJfMm1zZCAqIChtcF90d29saW1iX3QpIHFfc3RhcjsKKyAgICAgICAgICAgICAgLyogV2hpbGUgYzIgPCBjMywgaW5jcmVhc2UgYzIgYW5kIGRlY3JlYXNlIGMzLgorICAgICAgICAgICAgICAgICBDb25zaWRlciBjMy1jMi4gIFdoaWxlIGl0IGlzID4gMCwgZGVjcmVhc2UgaXQgYnkKKyAgICAgICAgICAgICAgICAgYltuLTFdKmJldGErYltuLTJdLiAgQmVjYXVzZSBvZiBiW24tMV0qYmV0YStiW24tMl0gPj0gYmV0YV4yLzIKKyAgICAgICAgICAgICAgICAgdGhpcyBjYW4gaGFwcGVuIG9ubHkgdHdpY2UuICAqLworICAgICAgICAgICAgICBpZiAoYzMgPiBjMikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBxX3N0YXIgPSBxX3N0YXIgLSAxOyAvKiBxKiA6PSBxKiAtIDEgKi8KKyAgICAgICAgICAgICAgICAgIGlmIChjMyAtIGMyID4gYl9tc2RkKQorICAgICAgICAgICAgICAgICAgICBxX3N0YXIgPSBxX3N0YXIgLSAxOyAvKiBxKiA6PSBxKiAtIDEgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocV9zdGFyID4gMCkKKyAgICAgICAgICAgICAgc3VidHJhY3Q6CisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBTdWJ0cmFjdCByIDo9IHIgLSBiICogcSogKiBiZXRhXmouICAqLworICAgICAgICAgICAgICAgIG1wX2xpbWJfdCBjcjsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjb25zdCBtcF9saW1iX3QgKnNvdXJjZXB0ciA9IGJfcHRyOworICAgICAgICAgICAgICAgICAgbXBfbGltYl90ICpkZXN0cHRyID0gcl9wdHIgKyBqOworICAgICAgICAgICAgICAgICAgbXBfdHdvbGltYl90IGNhcnJ5ID0gMDsKKyAgICAgICAgICAgICAgICAgIHNpemVfdCBjb3VudDsKKyAgICAgICAgICAgICAgICAgIGZvciAoY291bnQgPSBiX2xlbjsgY291bnQgPiAwOyBjb3VudC0tKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgLyogSGVyZSAwIDw9IGNhcnJ5IDw9IHEqLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICBjYXJyeSA9CisgICAgICAgICAgICAgICAgICAgICAgICBjYXJyeQorICAgICAgICAgICAgICAgICAgICAgICAgKyAobXBfdHdvbGltYl90KSBxX3N0YXIgKiAobXBfdHdvbGltYl90KSAqc291cmNlcHRyKysKKyAgICAgICAgICAgICAgICAgICAgICAgICsgKG1wX2xpbWJfdCkgfigqZGVzdHB0cik7CisgICAgICAgICAgICAgICAgICAgICAgLyogSGVyZSAwIDw9IGNhcnJ5IDw9IGJldGEqcSogKyBiZXRhLTEuICAqLworICAgICAgICAgICAgICAgICAgICAgICpkZXN0cHRyKysgPSB+KG1wX2xpbWJfdCkgY2Fycnk7CisgICAgICAgICAgICAgICAgICAgICAgY2FycnkgPSBjYXJyeSA+PiBHTVBfTElNQl9CSVRTOyAvKiA8PSBxKiAqLworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBjciA9IChtcF9saW1iX3QpIGNhcnJ5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBTdWJ0cmFjdCBjciBmcm9tIHJfcHRyW2ogKyBiX2xlbl0sIHRoZW4gZm9yZ2V0IGFib3V0CisgICAgICAgICAgICAgICAgICAgcl9wdHJbaiArIGJfbGVuXS4gICovCisgICAgICAgICAgICAgICAgaWYgKGNyID4gcl9wdHJbaiArIGJfbGVuXSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogU3VidHJhY3Rpb24gZ2F2ZSBhIGNhcnJ5LiAgKi8KKyAgICAgICAgICAgICAgICAgICAgcV9zdGFyID0gcV9zdGFyIC0gMTsgLyogcSogOj0gcSogLSAxICovCisgICAgICAgICAgICAgICAgICAgIC8qIEFkZCBiIGJhY2suICAqLworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXBfbGltYl90ICpzb3VyY2VwdHIgPSBiX3B0cjsKKyAgICAgICAgICAgICAgICAgICAgICBtcF9saW1iX3QgKmRlc3RwdHIgPSByX3B0ciArIGo7CisgICAgICAgICAgICAgICAgICAgICAgbXBfbGltYl90IGNhcnJ5ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb3VudCA9IGJfbGVuOyBjb3VudCA+IDA7IGNvdW50LS0pCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1wX2xpbWJfdCBzb3VyY2UxID0gKnNvdXJjZXB0cisrOworICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9saW1iX3Qgc291cmNlMiA9ICpkZXN0cHRyOworICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdHB0cisrID0gc291cmNlMSArIHNvdXJjZTIgKyBjYXJyeTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FycnkgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYXJyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNvdXJjZTEgPj0gKG1wX2xpbWJfdCkgfnNvdXJjZTIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzb3VyY2UxID4gKG1wX2xpbWJfdCkgfnNvdXJjZTIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8qIEZvcmdldCBhYm91dCB0aGUgY2FycnkgYW5kIGFib3V0IHJbaituXS4gICovCisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIHEqIGlzIGRldGVybWluZWQuICBTdG9yZSBpdCBhcyBxW2pdLiAgKi8KKyAgICAgICAgICAgIHFfcHRyW2pdID0gcV9zdGFyOworICAgICAgICAgICAgaWYgKGogPT0gMCkKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBqLS07CisgICAgICAgICAgfQorICAgICAgfQorICAgICAgcl9sZW4gPSBiX2xlbjsKKyAgICAgIC8qIE5vcm1hbGlzZSBxLiAgKi8KKyAgICAgIGlmIChxX3B0cltxX2xlbiAtIDFdID09IDApCisgICAgICAgIHFfbGVuLS07CisjIGlmIDAgLyogTm90IG5lZWRlZCBoZXJlLCBzaW5jZSB3ZSBuZWVkIHIgb25seSB0byBjb21wYXJlIGl0IHdpdGggYi8yLCBhbmQKKyAgICAgICAgICBiIGlzIHNoaWZ0ZWQgbGVmdCBieSBzIGJpdHMuICAqLworICAgICAgLyogU2hpZnQgciByaWdodCBieSBzIGJpdHMuICAqLworICAgICAgaWYgKHMgPiAwKQorICAgICAgICB7CisgICAgICAgICAgbXBfbGltYl90IHB0ciA9IHJfcHRyICsgcl9sZW47CisgICAgICAgICAgbXBfdHdvbGltYl90IGFjY3UgPSAwOworICAgICAgICAgIHNpemVfdCBjb3VudDsKKyAgICAgICAgICBmb3IgKGNvdW50ID0gcl9sZW47IGNvdW50ID4gMDsgY291bnQtLSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgYWNjdSA9IChtcF90d29saW1iX3QpIChtcF9saW1iX3QpIGFjY3UgPDwgR01QX0xJTUJfQklUUzsKKyAgICAgICAgICAgICAgYWNjdSArPSAobXBfdHdvbGltYl90KSAqLS1wdHIgPDwgKEdNUF9MSU1CX0JJVFMgLSBzKTsKKyAgICAgICAgICAgICAgKnB0ciA9IChtcF9saW1iX3QpIChhY2N1ID4+IEdNUF9MSU1CX0JJVFMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisjIGVuZGlmCisgICAgICAvKiBOb3JtYWxpc2Ugci4gICovCisgICAgICB3aGlsZSAocl9sZW4gPiAwICYmIHJfcHRyW3JfbGVuIC0gMV0gPT0gMCkKKyAgICAgICAgcl9sZW4tLTsKKyAgICB9CisgIC8qIENvbXBhcmUgciA8PCAxIHdpdGggYi4gICovCisgIGlmIChyX2xlbiA+IGJfbGVuKQorICAgIGdvdG8gaW5jcmVtZW50X3E7CisgIHsKKyAgICBzaXplX3QgaTsKKyAgICBmb3IgKGkgPSBiX2xlbjs7KQorICAgICAgeworICAgICAgICBtcF9saW1iX3Qgcl9pID0KKyAgICAgICAgICAoaSA8PSByX2xlbiAmJiBpID4gMCA/IHJfcHRyW2kgLSAxXSA+PiAoR01QX0xJTUJfQklUUyAtIDEpIDogMCkKKyAgICAgICAgICB8IChpIDwgcl9sZW4gPyByX3B0cltpXSA8PCAxIDogMCk7CisgICAgICAgIG1wX2xpbWJfdCBiX2kgPSAoaSA8IGJfbGVuID8gYl9wdHJbaV0gOiAwKTsKKyAgICAgICAgaWYgKHJfaSA+IGJfaSkKKyAgICAgICAgICBnb3RvIGluY3JlbWVudF9xOworICAgICAgICBpZiAocl9pIDwgYl9pKQorICAgICAgICAgIGdvdG8ga2VlcF9xOworICAgICAgICBpZiAoaSA9PSAwKQorICAgICAgICAgIGJyZWFrOworICAgICAgICBpLS07CisgICAgICB9CisgIH0KKyAgaWYgKHFfbGVuID4gMCAmJiAoKHFfcHRyWzBdICYgMSkgIT0gMCkpCisgICAgLyogcSBpcyBvZGQuICAqLworICAgIGluY3JlbWVudF9xOgorICAgIHsKKyAgICAgIHNpemVfdCBpOworICAgICAgZm9yIChpID0gMDsgaSA8IHFfbGVuOyBpKyspCisgICAgICAgIGlmICgrKyhxX3B0cltpXSkgIT0gMCkKKyAgICAgICAgICBnb3RvIGtlZXBfcTsKKyAgICAgIHFfcHRyW3FfbGVuKytdID0gMTsKKyAgICB9CisgIGtlZXBfcToKKyAgaWYgKHRtcF9yb29tcHRyICE9IE5VTEwpCisgICAgZnJlZSAodG1wX3Jvb21wdHIpOworICBxLT5saW1icyA9IHFfcHRyOworICBxLT5ubGltYnMgPSBxX2xlbjsKKyAgcmV0dXJuIHJvb21wdHI7Cit9CisKKy8qIENvbnZlcnQgYSBiaWdudW0gYSA+PSAwLCBtdWx0aXBsaWVkIHdpdGggMTBeZXh0cmFfemVyb2VzLCB0byBkZWNpbWFsCisgICByZXByZXNlbnRhdGlvbi4KKyAgIERlc3Ryb3lzIHRoZSBjb250ZW50cyBvZiBhLgorICAgUmV0dXJuIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IC0gY29udGFpbmluZyB0aGUgZGVjaW1hbCBkaWdpdHMgaW4gbG93LXRvLWhpZ2gKKyAgIG9yZGVyLCB0ZXJtaW5hdGVkIHdpdGggYSBOVUwgY2hhcmFjdGVyIC0gaW4gY2FzZSBvZiBzdWNjZXNzLCBOVUxMIGluIGNhc2UKKyAgIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuICAqLworc3RhdGljIGNoYXIgKgorY29udmVydF90b19kZWNpbWFsIChtcG5fdCBhLCBzaXplX3QgZXh0cmFfemVyb2VzKQoreworICBtcF9saW1iX3QgKmFfcHRyID0gYS5saW1iczsKKyAgc2l6ZV90IGFfbGVuID0gYS5ubGltYnM7CisgIC8qIDAuMDMzNDUgaXMgc2xpZ2h0bHkgbGFyZ2VyIHRoYW4gbG9nKDIpLyg5KmxvZygxMCkpLiAgKi8KKyAgc2l6ZV90IGNfbGVuID0gOSAqICgoc2l6ZV90KShhX2xlbiAqIChHTVBfTElNQl9CSVRTICogMC4wMzM0NWYpKSArIDEpOworICBjaGFyICpjX3B0ciA9IChjaGFyICopIG1hbGxvYyAoeHN1bSAoY19sZW4sIGV4dHJhX3plcm9lcykpOworICBpZiAoY19wdHIgIT0gTlVMTCkKKyAgICB7CisgICAgICBjaGFyICpkX3B0ciA9IGNfcHRyOworICAgICAgZm9yICg7IGV4dHJhX3plcm9lcyA+IDA7IGV4dHJhX3plcm9lcy0tKQorICAgICAgICAqZF9wdHIrKyA9ICcwJzsKKyAgICAgIHdoaWxlIChhX2xlbiA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBEaXZpZGUgYSBieSAxMF45LCBpbi1wbGFjZS4gICovCisgICAgICAgICAgbXBfbGltYl90IHJlbWFpbmRlciA9IDA7CisgICAgICAgICAgbXBfbGltYl90ICpwdHIgPSBhX3B0ciArIGFfbGVuOworICAgICAgICAgIHNpemVfdCBjb3VudDsKKyAgICAgICAgICBmb3IgKGNvdW50ID0gYV9sZW47IGNvdW50ID4gMDsgY291bnQtLSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbXBfdHdvbGltYl90IG51bSA9CisgICAgICAgICAgICAgICAgKChtcF90d29saW1iX3QpIHJlbWFpbmRlciA8PCBHTVBfTElNQl9CSVRTKSB8ICotLXB0cjsKKyAgICAgICAgICAgICAgKnB0ciA9IG51bSAvIDEwMDAwMDAwMDA7CisgICAgICAgICAgICAgIHJlbWFpbmRlciA9IG51bSAlIDEwMDAwMDAwMDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgLyogU3RvcmUgdGhlIHJlbWFpbmRlciBhcyA5IGRlY2ltYWwgZGlnaXRzLiAgKi8KKyAgICAgICAgICBmb3IgKGNvdW50ID0gOTsgY291bnQgPiAwOyBjb3VudC0tKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAqZF9wdHIrKyA9ICcwJyArIChyZW1haW5kZXIgJSAxMCk7CisgICAgICAgICAgICAgIHJlbWFpbmRlciA9IHJlbWFpbmRlciAvIDEwOworICAgICAgICAgICAgfQorICAgICAgICAgIC8qIE5vcm1hbGl6ZSBhLiAgKi8KKyAgICAgICAgICBpZiAoYV9wdHJbYV9sZW4gLSAxXSA9PSAwKQorICAgICAgICAgICAgYV9sZW4tLTsKKyAgICAgICAgfQorICAgICAgLyogUmVtb3ZlIGxlYWRpbmcgemVyb2VzLiAgKi8KKyAgICAgIHdoaWxlIChkX3B0ciA+IGNfcHRyICYmIGRfcHRyWy0xXSA9PSAnMCcpCisgICAgICAgIGRfcHRyLS07CisgICAgICAvKiBCdXQga2VlcCBhdCBsZWFzdCBvbmUgemVyby4gICovCisgICAgICBpZiAoZF9wdHIgPT0gY19wdHIpCisgICAgICAgICpkX3B0cisrID0gJzAnOworICAgICAgLyogVGVybWluYXRlIHRoZSBzdHJpbmcuICAqLworICAgICAgKmRfcHRyID0gJ1wwJzsKKyAgICB9CisgIHJldHVybiBjX3B0cjsKK30KKworIyBpZiBORUVEX1BSSU5URl9MT05HX0RPVUJMRQorCisvKiBBc3N1bWluZyB4IGlzIGZpbml0ZSBhbmQgPj0gMDoKKyAgIHdyaXRlIHggYXMgeCA9IDJeZSAqIG0sIHdoZXJlIG0gaXMgYSBiaWdudW0uCisgICBSZXR1cm4gdGhlIGFsbG9jYXRlZCBtZW1vcnkgaW4gY2FzZSBvZiBzdWNjZXNzLCBOVUxMIGluIGNhc2Ugb2YgbWVtb3J5CisgICBhbGxvY2F0aW9uIGZhaWx1cmUuICAqLworc3RhdGljIHZvaWQgKgorZGVjb2RlX2xvbmdfZG91YmxlIChsb25nIGRvdWJsZSB4LCBpbnQgKmVwLCBtcG5fdCAqbXApCit7CisgIG1wbl90IG07CisgIGludCBleHA7CisgIGxvbmcgZG91YmxlIHk7CisgIHNpemVfdCBpOworCisgIC8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgcmVzdWx0LiAgKi8KKyAgbS5ubGltYnMgPSAoTERCTF9NQU5UX0JJVCArIEdNUF9MSU1CX0JJVFMgLSAxKSAvIEdNUF9MSU1CX0JJVFM7CisgIG0ubGltYnMgPSAobXBfbGltYl90ICopIG1hbGxvYyAobS5ubGltYnMgKiBzaXplb2YgKG1wX2xpbWJfdCkpOworICBpZiAobS5saW1icyA9PSBOVUxMKQorICAgIHJldHVybiBOVUxMOworICAvKiBTcGxpdCBpbnRvIGV4cG9uZW50aWFsIHBhcnQgYW5kIG1hbnRpc3NhLiAgKi8KKyAgeSA9IGZyZXhwbCAoeCwgJmV4cCk7CisgIGlmICghKHkgPj0gMC4wTCAmJiB5IDwgMS4wTCkpCisgICAgYWJvcnQgKCk7CisgIC8qIHggPSAyXmV4cCAqIHkgPSAyXihleHAgLSBMREJMX01BTlRfQklUKSAqICh5ICogMl5MREJMX01BTlRfQklUKSwgYW5kIHRoZQorICAgICBsYXR0ZXIgaXMgYW4gaW50ZWdlci4gICovCisgIC8qIENvbnZlcnQgdGhlIG1hbnRpc3NhICh5ICogMl5MREJMX01BTlRfQklUKSB0byBhIHNlcXVlbmNlIG9mIGxpbWJzLgorICAgICBJJ20gbm90IHN1cmUgd2hldGhlciBpdCdzIHNhZmUgdG8gY2FzdCBhICdsb25nIGRvdWJsZScgdmFsdWUgYmV0d2VlbgorICAgICAyXjMxIGFuZCAyXjMyIHRvICd1bnNpZ25lZCBpbnQnLCB0aGVyZWZvcmUgcGxheSBzYWZlIGFuZCBjYXN0IG9ubHkKKyAgICAgJ2xvbmcgZG91YmxlJyB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyXjE2ICh0byAndW5zaWduZWQgaW50JyBvciAnaW50JywKKyAgICAgZG9lc24ndCBtYXR0ZXIpLiAgKi8KKyMgIGlmIChMREJMX01BTlRfQklUICUgR01QX0xJTUJfQklUUykgIT0gMAorIyAgIGlmIChMREJMX01BTlRfQklUICUgR01QX0xJTUJfQklUUykgPiBHTVBfTElNQl9CSVRTIC8gMgorICAgIHsKKyAgICAgIG1wX2xpbWJfdCBoaSwgbG87CisgICAgICB5ICo9IChtcF9saW1iX3QpIDEgPDwgKExEQkxfTUFOVF9CSVQgJSAoR01QX0xJTUJfQklUUyAvIDIpKTsKKyAgICAgIGhpID0gKGludCkgeTsKKyAgICAgIHkgLT0gaGk7CisgICAgICBpZiAoISh5ID49IDAuMEwgJiYgeSA8IDEuMEwpKQorICAgICAgICBhYm9ydCAoKTsKKyAgICAgIHkgKj0gKG1wX2xpbWJfdCkgMSA8PCAoR01QX0xJTUJfQklUUyAvIDIpOworICAgICAgbG8gPSAoaW50KSB5OworICAgICAgeSAtPSBsbzsKKyAgICAgIGlmICghKHkgPj0gMC4wTCAmJiB5IDwgMS4wTCkpCisgICAgICAgIGFib3J0ICgpOworICAgICAgbS5saW1ic1tMREJMX01BTlRfQklUIC8gR01QX0xJTUJfQklUU10gPSAoaGkgPDwgKEdNUF9MSU1CX0JJVFMgLyAyKSkgfCBsbzsKKyAgICB9CisjICAgZWxzZQorICAgIHsKKyAgICAgIG1wX2xpbWJfdCBkOworICAgICAgeSAqPSAobXBfbGltYl90KSAxIDw8IChMREJMX01BTlRfQklUICUgR01QX0xJTUJfQklUUyk7CisgICAgICBkID0gKGludCkgeTsKKyAgICAgIHkgLT0gZDsKKyAgICAgIGlmICghKHkgPj0gMC4wTCAmJiB5IDwgMS4wTCkpCisgICAgICAgIGFib3J0ICgpOworICAgICAgbS5saW1ic1tMREJMX01BTlRfQklUIC8gR01QX0xJTUJfQklUU10gPSBkOworICAgIH0KKyMgICBlbmRpZgorIyAgZW5kaWYKKyAgZm9yIChpID0gTERCTF9NQU5UX0JJVCAvIEdNUF9MSU1CX0JJVFM7IGkgPiAwOyApCisgICAgeworICAgICAgbXBfbGltYl90IGhpLCBsbzsKKyAgICAgIHkgKj0gKG1wX2xpbWJfdCkgMSA8PCAoR01QX0xJTUJfQklUUyAvIDIpOworICAgICAgaGkgPSAoaW50KSB5OworICAgICAgeSAtPSBoaTsKKyAgICAgIGlmICghKHkgPj0gMC4wTCAmJiB5IDwgMS4wTCkpCisgICAgICAgIGFib3J0ICgpOworICAgICAgeSAqPSAobXBfbGltYl90KSAxIDw8IChHTVBfTElNQl9CSVRTIC8gMik7CisgICAgICBsbyA9IChpbnQpIHk7CisgICAgICB5IC09IGxvOworICAgICAgaWYgKCEoeSA+PSAwLjBMICYmIHkgPCAxLjBMKSkKKyAgICAgICAgYWJvcnQgKCk7CisgICAgICBtLmxpbWJzWy0taV0gPSAoaGkgPDwgKEdNUF9MSU1CX0JJVFMgLyAyKSkgfCBsbzsKKyAgICB9CisjICBpZiAwIC8qIE9uIEZyZWVCU0QgNi4xL3g4NiwgJ2xvbmcgZG91YmxlJyBudW1iZXJzIHNvbWV0aW1lcyBoYXZlIGV4Y2VzcworICAgICAgICAgICBwcmVjaXNpb24uICAqLworICBpZiAoISh5ID09IDAuMEwpKQorICAgIGFib3J0ICgpOworIyAgZW5kaWYKKyAgLyogTm9ybWFsaXNlLiAgKi8KKyAgd2hpbGUgKG0ubmxpbWJzID4gMCAmJiBtLmxpbWJzW20ubmxpbWJzIC0gMV0gPT0gMCkKKyAgICBtLm5saW1icy0tOworICAqbXAgPSBtOworICAqZXAgPSBleHAgLSBMREJMX01BTlRfQklUOworICByZXR1cm4gbS5saW1iczsKK30KKworIyBlbmRpZgorCisjIGlmIE5FRURfUFJJTlRGX0RPVUJMRQorCisvKiBBc3N1bWluZyB4IGlzIGZpbml0ZSBhbmQgPj0gMDoKKyAgIHdyaXRlIHggYXMgeCA9IDJeZSAqIG0sIHdoZXJlIG0gaXMgYSBiaWdudW0uCisgICBSZXR1cm4gdGhlIGFsbG9jYXRlZCBtZW1vcnkgaW4gY2FzZSBvZiBzdWNjZXNzLCBOVUxMIGluIGNhc2Ugb2YgbWVtb3J5CisgICBhbGxvY2F0aW9uIGZhaWx1cmUuICAqLworc3RhdGljIHZvaWQgKgorZGVjb2RlX2RvdWJsZSAoZG91YmxlIHgsIGludCAqZXAsIG1wbl90ICptcCkKK3sKKyAgbXBuX3QgbTsKKyAgaW50IGV4cDsKKyAgZG91YmxlIHk7CisgIHNpemVfdCBpOworCisgIC8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgcmVzdWx0LiAgKi8KKyAgbS5ubGltYnMgPSAoREJMX01BTlRfQklUICsgR01QX0xJTUJfQklUUyAtIDEpIC8gR01QX0xJTUJfQklUUzsKKyAgbS5saW1icyA9IChtcF9saW1iX3QgKikgbWFsbG9jIChtLm5saW1icyAqIHNpemVvZiAobXBfbGltYl90KSk7CisgIGlmIChtLmxpbWJzID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisgIC8qIFNwbGl0IGludG8gZXhwb25lbnRpYWwgcGFydCBhbmQgbWFudGlzc2EuICAqLworICB5ID0gZnJleHAgKHgsICZleHApOworICBpZiAoISh5ID49IDAuMCAmJiB5IDwgMS4wKSkKKyAgICBhYm9ydCAoKTsKKyAgLyogeCA9IDJeZXhwICogeSA9IDJeKGV4cCAtIERCTF9NQU5UX0JJVCkgKiAoeSAqIDJeREJMX01BTlRfQklUKSwgYW5kIHRoZQorICAgICBsYXR0ZXIgaXMgYW4gaW50ZWdlci4gICovCisgIC8qIENvbnZlcnQgdGhlIG1hbnRpc3NhICh5ICogMl5EQkxfTUFOVF9CSVQpIHRvIGEgc2VxdWVuY2Ugb2YgbGltYnMuCisgICAgIEknbSBub3Qgc3VyZSB3aGV0aGVyIGl0J3Mgc2FmZSB0byBjYXN0IGEgJ2RvdWJsZScgdmFsdWUgYmV0d2VlbgorICAgICAyXjMxIGFuZCAyXjMyIHRvICd1bnNpZ25lZCBpbnQnLCB0aGVyZWZvcmUgcGxheSBzYWZlIGFuZCBjYXN0IG9ubHkKKyAgICAgJ2RvdWJsZScgdmFsdWVzIGJldHdlZW4gMCBhbmQgMl4xNiAodG8gJ3Vuc2lnbmVkIGludCcgb3IgJ2ludCcsCisgICAgIGRvZXNuJ3QgbWF0dGVyKS4gICovCisjICBpZiAoREJMX01BTlRfQklUICUgR01QX0xJTUJfQklUUykgIT0gMAorIyAgIGlmIChEQkxfTUFOVF9CSVQgJSBHTVBfTElNQl9CSVRTKSA+IEdNUF9MSU1CX0JJVFMgLyAyCisgICAgeworICAgICAgbXBfbGltYl90IGhpLCBsbzsKKyAgICAgIHkgKj0gKG1wX2xpbWJfdCkgMSA8PCAoREJMX01BTlRfQklUICUgKEdNUF9MSU1CX0JJVFMgLyAyKSk7CisgICAgICBoaSA9IChpbnQpIHk7CisgICAgICB5IC09IGhpOworICAgICAgaWYgKCEoeSA+PSAwLjAgJiYgeSA8IDEuMCkpCisgICAgICAgIGFib3J0ICgpOworICAgICAgeSAqPSAobXBfbGltYl90KSAxIDw8IChHTVBfTElNQl9CSVRTIC8gMik7CisgICAgICBsbyA9IChpbnQpIHk7CisgICAgICB5IC09IGxvOworICAgICAgaWYgKCEoeSA+PSAwLjAgJiYgeSA8IDEuMCkpCisgICAgICAgIGFib3J0ICgpOworICAgICAgbS5saW1ic1tEQkxfTUFOVF9CSVQgLyBHTVBfTElNQl9CSVRTXSA9IChoaSA8PCAoR01QX0xJTUJfQklUUyAvIDIpKSB8IGxvOworICAgIH0KKyMgICBlbHNlCisgICAgeworICAgICAgbXBfbGltYl90IGQ7CisgICAgICB5ICo9IChtcF9saW1iX3QpIDEgPDwgKERCTF9NQU5UX0JJVCAlIEdNUF9MSU1CX0JJVFMpOworICAgICAgZCA9IChpbnQpIHk7CisgICAgICB5IC09IGQ7CisgICAgICBpZiAoISh5ID49IDAuMCAmJiB5IDwgMS4wKSkKKyAgICAgICAgYWJvcnQgKCk7CisgICAgICBtLmxpbWJzW0RCTF9NQU5UX0JJVCAvIEdNUF9MSU1CX0JJVFNdID0gZDsKKyAgICB9CisjICAgZW5kaWYKKyMgIGVuZGlmCisgIGZvciAoaSA9IERCTF9NQU5UX0JJVCAvIEdNUF9MSU1CX0JJVFM7IGkgPiAwOyApCisgICAgeworICAgICAgbXBfbGltYl90IGhpLCBsbzsKKyAgICAgIHkgKj0gKG1wX2xpbWJfdCkgMSA8PCAoR01QX0xJTUJfQklUUyAvIDIpOworICAgICAgaGkgPSAoaW50KSB5OworICAgICAgeSAtPSBoaTsKKyAgICAgIGlmICghKHkgPj0gMC4wICYmIHkgPCAxLjApKQorICAgICAgICBhYm9ydCAoKTsKKyAgICAgIHkgKj0gKG1wX2xpbWJfdCkgMSA8PCAoR01QX0xJTUJfQklUUyAvIDIpOworICAgICAgbG8gPSAoaW50KSB5OworICAgICAgeSAtPSBsbzsKKyAgICAgIGlmICghKHkgPj0gMC4wICYmIHkgPCAxLjApKQorICAgICAgICBhYm9ydCAoKTsKKyAgICAgIG0ubGltYnNbLS1pXSA9IChoaSA8PCAoR01QX0xJTUJfQklUUyAvIDIpKSB8IGxvOworICAgIH0KKyAgaWYgKCEoeSA9PSAwLjApKQorICAgIGFib3J0ICgpOworICAvKiBOb3JtYWxpc2UuICAqLworICB3aGlsZSAobS5ubGltYnMgPiAwICYmIG0ubGltYnNbbS5ubGltYnMgLSAxXSA9PSAwKQorICAgIG0ubmxpbWJzLS07CisgICptcCA9IG07CisgICplcCA9IGV4cCAtIERCTF9NQU5UX0JJVDsKKyAgcmV0dXJuIG0ubGltYnM7Cit9CisKKyMgZW5kaWYKKworLyogQXNzdW1pbmcgeCA9IDJeZSAqIG0gaXMgZmluaXRlIGFuZCA+PSAwLCBhbmQgbiBpcyBhbiBpbnRlZ2VyOgorICAgUmV0dXJucyB0aGUgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiByb3VuZCAoeCAqIDEwXm4pLgorICAgUmV0dXJuIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IC0gY29udGFpbmluZyB0aGUgZGVjaW1hbCBkaWdpdHMgaW4gbG93LXRvLWhpZ2gKKyAgIG9yZGVyLCB0ZXJtaW5hdGVkIHdpdGggYSBOVUwgY2hhcmFjdGVyIC0gaW4gY2FzZSBvZiBzdWNjZXNzLCBOVUxMIGluIGNhc2UKKyAgIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuICAqLworc3RhdGljIGNoYXIgKgorc2NhbGUxMF9yb3VuZF9kZWNpbWFsX2RlY29kZWQgKGludCBlLCBtcG5fdCBtLCB2b2lkICptZW1vcnksIGludCBuKQoreworICBpbnQgczsKKyAgc2l6ZV90IGV4dHJhX3plcm9lczsKKyAgdW5zaWduZWQgaW50IGFic19uOworICB1bnNpZ25lZCBpbnQgYWJzX3M7CisgIG1wX2xpbWJfdCAqcG93NV9wdHI7CisgIHNpemVfdCBwb3c1X2xlbjsKKyAgdW5zaWduZWQgaW50IHNfbGltYnM7CisgIHVuc2lnbmVkIGludCBzX2JpdHM7CisgIG1wbl90IHBvdzU7CisgIG1wbl90IHo7CisgIHZvaWQgKnpfbWVtb3J5OworICBjaGFyICpkaWdpdHM7CisKKyAgaWYgKG1lbW9yeSA9PSBOVUxMKQorICAgIHJldHVybiBOVUxMOworICAvKiB4ID0gMl5lICogbSwgaGVuY2UKKyAgICAgeSA9IHJvdW5kICgyXmUgKiAxMF5uICogbSkgPSByb3VuZCAoMl4oZStuKSAqIDVebiAqIG0pCisgICAgICAgPSByb3VuZCAoMl5zICogNV5uICogbSkuICAqLworICBzID0gZSArIG47CisgIGV4dHJhX3plcm9lcyA9IDA7CisgIC8qIEZhY3RvciBvdXQgYSBjb21tb24gcG93ZXIgb2YgMTAgaWYgcG9zc2libGUuICAqLworICBpZiAocyA+IDAgJiYgbiA+IDApCisgICAgeworICAgICAgZXh0cmFfemVyb2VzID0gKHMgPCBuID8gcyA6IG4pOworICAgICAgcyAtPSBleHRyYV96ZXJvZXM7CisgICAgICBuIC09IGV4dHJhX3plcm9lczsKKyAgICB9CisgIC8qIEhlcmUgeSA9IHJvdW5kICgyXnMgKiA1Xm4gKiBtKSAqIDEwXmV4dHJhX3plcm9lcy4KKyAgICAgQmVmb3JlIGNvbnZlcnRpbmcgdG8gZGVjaW1hbCwgd2UgbmVlZCB0byBjb21wdXRlCisgICAgIHogPSByb3VuZCAoMl5zICogNV5uICogbSkuICAqLworICAvKiBDb21wdXRlIDVefG58LCBwb3NzaWJseSBzaGlmdGVkIGJ5IHxzfCBiaXRzIGlmIG4gYW5kIHMgaGF2ZSB0aGUgc2FtZQorICAgICBzaWduLiAgMi4zMjIgaXMgc2xpZ2h0bHkgbGFyZ2VyIHRoYW4gbG9nKDUpL2xvZygyKS4gICovCisgIGFic19uID0gKG4gPj0gMCA/IG4gOiAtbik7CisgIGFic19zID0gKHMgPj0gMCA/IHMgOiAtcyk7CisgIHBvdzVfcHRyID0gKG1wX2xpbWJfdCAqKSBtYWxsb2MgKCgoaW50KShhYnNfbiAqICgyLjMyMmYgLyBHTVBfTElNQl9CSVRTKSkgKyAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGFic19zIC8gR01QX0xJTUJfQklUUyArIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc2l6ZW9mIChtcF9saW1iX3QpKTsKKyAgaWYgKHBvdzVfcHRyID09IE5VTEwpCisgICAgeworICAgICAgZnJlZSAobWVtb3J5KTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgLyogSW5pdGlhbGl6ZSB3aXRoIDEuICAqLworICBwb3c1X3B0clswXSA9IDE7CisgIHBvdzVfbGVuID0gMTsKKyAgLyogTXVsdGlwbHkgd2l0aCA1XnxufC4gICovCisgIGlmIChhYnNfbiA+IDApCisgICAgeworICAgICAgc3RhdGljIG1wX2xpbWJfdCBjb25zdCBzbWFsbF9wb3c1WzEzICsgMV0gPQorICAgICAgICB7CisgICAgICAgICAgMSwgNSwgMjUsIDEyNSwgNjI1LCAzMTI1LCAxNTYyNSwgNzgxMjUsIDM5MDYyNSwgMTk1MzEyNSwgOTc2NTYyNSwKKyAgICAgICAgICA0ODgyODEyNSwgMjQ0MTQwNjI1LCAxMjIwNzAzMTI1CisgICAgICAgIH07CisgICAgICB1bnNpZ25lZCBpbnQgbjEzOworICAgICAgZm9yIChuMTMgPSAwOyBuMTMgPD0gYWJzX247IG4xMyArPSAxMykKKyAgICAgICAgeworICAgICAgICAgIG1wX2xpbWJfdCBkaWdpdDEgPSBzbWFsbF9wb3c1W24xMyArIDEzIDw9IGFic19uID8gMTMgOiBhYnNfbiAtIG4xM107CisgICAgICAgICAgc2l6ZV90IGo7CisgICAgICAgICAgbXBfdHdvbGltYl90IGNhcnJ5ID0gMDsKKyAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG93NV9sZW47IGorKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbXBfbGltYl90IGRpZ2l0MiA9IHBvdzVfcHRyW2pdOworICAgICAgICAgICAgICBjYXJyeSArPSAobXBfdHdvbGltYl90KSBkaWdpdDEgKiAobXBfdHdvbGltYl90KSBkaWdpdDI7CisgICAgICAgICAgICAgIHBvdzVfcHRyW2pdID0gKG1wX2xpbWJfdCkgY2Fycnk7CisgICAgICAgICAgICAgIGNhcnJ5ID0gY2FycnkgPj4gR01QX0xJTUJfQklUUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoY2FycnkgPiAwKQorICAgICAgICAgICAgcG93NV9wdHJbcG93NV9sZW4rK10gPSAobXBfbGltYl90KSBjYXJyeTsKKyAgICAgICAgfQorICAgIH0KKyAgc19saW1icyA9IGFic19zIC8gR01QX0xJTUJfQklUUzsKKyAgc19iaXRzID0gYWJzX3MgJSBHTVBfTElNQl9CSVRTOworICBpZiAobiA+PSAwID8gcyA+PSAwIDogcyA8PSAwKQorICAgIHsKKyAgICAgIC8qIE11bHRpcGx5IHdpdGggMl58c3wuICAqLworICAgICAgaWYgKHNfYml0cyA+IDApCisgICAgICAgIHsKKyAgICAgICAgICBtcF9saW1iX3QgKnB0ciA9IHBvdzVfcHRyOworICAgICAgICAgIG1wX3R3b2xpbWJfdCBhY2N1ID0gMDsKKyAgICAgICAgICBzaXplX3QgY291bnQ7CisgICAgICAgICAgZm9yIChjb3VudCA9IHBvdzVfbGVuOyBjb3VudCA+IDA7IGNvdW50LS0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGFjY3UgKz0gKG1wX3R3b2xpbWJfdCkgKnB0ciA8PCBzX2JpdHM7CisgICAgICAgICAgICAgICpwdHIrKyA9IChtcF9saW1iX3QpIGFjY3U7CisgICAgICAgICAgICAgIGFjY3UgPSBhY2N1ID4+IEdNUF9MSU1CX0JJVFM7CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKGFjY3UgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAqcHRyID0gKG1wX2xpbWJfdCkgYWNjdTsKKyAgICAgICAgICAgICAgcG93NV9sZW4rKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgaWYgKHNfbGltYnMgPiAwKQorICAgICAgICB7CisgICAgICAgICAgc2l6ZV90IGNvdW50OworICAgICAgICAgIGZvciAoY291bnQgPSBwb3c1X2xlbjsgY291bnQgPiAwOykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY291bnQtLTsKKyAgICAgICAgICAgICAgcG93NV9wdHJbc19saW1icyArIGNvdW50XSA9IHBvdzVfcHRyW2NvdW50XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBmb3IgKGNvdW50ID0gc19saW1iczsgY291bnQgPiAwOykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY291bnQtLTsKKyAgICAgICAgICAgICAgcG93NV9wdHJbY291bnRdID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBwb3c1X2xlbiArPSBzX2xpbWJzOworICAgICAgICB9CisgICAgICBwb3c1LmxpbWJzID0gcG93NV9wdHI7CisgICAgICBwb3c1Lm5saW1icyA9IHBvdzVfbGVuOworICAgICAgaWYgKG4gPj0gMCkKKyAgICAgICAgeworICAgICAgICAgIC8qIE11bHRpcGx5IG0gd2l0aCBwb3c1LiAgTm8gZGl2aXNpb24gbmVlZGVkLiAgKi8KKyAgICAgICAgICB6X21lbW9yeSA9IG11bHRpcGx5IChtLCBwb3c1LCAmeik7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIC8qIERpdmlkZSBtIGJ5IHBvdzUgYW5kIHJvdW5kLiAgKi8KKyAgICAgICAgICB6X21lbW9yeSA9IGRpdmlkZSAobSwgcG93NSwgJnopOworICAgICAgICB9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcG93NS5saW1icyA9IHBvdzVfcHRyOworICAgICAgcG93NS5ubGltYnMgPSBwb3c1X2xlbjsKKyAgICAgIGlmIChuID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBuID49IDAsIHMgPCAwLgorICAgICAgICAgICAgIE11bHRpcGx5IG0gd2l0aCBwb3c1LCB0aGVuIGRpdmlkZSBieSAyXnxzfC4gICovCisgICAgICAgICAgbXBuX3QgbnVtZXJhdG9yOworICAgICAgICAgIG1wbl90IGRlbm9taW5hdG9yOworICAgICAgICAgIHZvaWQgKnRtcF9tZW1vcnk7CisgICAgICAgICAgdG1wX21lbW9yeSA9IG11bHRpcGx5IChtLCBwb3c1LCAmbnVtZXJhdG9yKTsKKyAgICAgICAgICBpZiAodG1wX21lbW9yeSA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmcmVlIChwb3c1X3B0cik7CisgICAgICAgICAgICAgIGZyZWUgKG1lbW9yeSk7CisgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgIC8qIENvbnN0cnVjdCAyXnxzfC4gICovCisgICAgICAgICAgeworICAgICAgICAgICAgbXBfbGltYl90ICpwdHIgPSBwb3c1X3B0ciArIHBvdzVfbGVuOworICAgICAgICAgICAgc2l6ZV90IGk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc19saW1iczsgaSsrKQorICAgICAgICAgICAgICBwdHJbaV0gPSAwOworICAgICAgICAgICAgcHRyW3NfbGltYnNdID0gKG1wX2xpbWJfdCkgMSA8PCBzX2JpdHM7CisgICAgICAgICAgICBkZW5vbWluYXRvci5saW1icyA9IHB0cjsKKyAgICAgICAgICAgIGRlbm9taW5hdG9yLm5saW1icyA9IHNfbGltYnMgKyAxOworICAgICAgICAgIH0KKyAgICAgICAgICB6X21lbW9yeSA9IGRpdmlkZSAobnVtZXJhdG9yLCBkZW5vbWluYXRvciwgJnopOworICAgICAgICAgIGZyZWUgKHRtcF9tZW1vcnkpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBuIDwgMCwgcyA+IDAuCisgICAgICAgICAgICAgTXVsdGlwbHkgbSB3aXRoIDJecywgdGhlbiBkaXZpZGUgYnkgcG93NS4gICovCisgICAgICAgICAgbXBuX3QgbnVtZXJhdG9yOworICAgICAgICAgIG1wX2xpbWJfdCAqbnVtX3B0cjsKKyAgICAgICAgICBudW1fcHRyID0gKG1wX2xpbWJfdCAqKSBtYWxsb2MgKChtLm5saW1icyArIHNfbGltYnMgKyAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzaXplb2YgKG1wX2xpbWJfdCkpOworICAgICAgICAgIGlmIChudW1fcHRyID09IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZyZWUgKHBvdzVfcHRyKTsKKyAgICAgICAgICAgICAgZnJlZSAobWVtb3J5KTsKKyAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgeworICAgICAgICAgICAgbXBfbGltYl90ICpkZXN0cHRyID0gbnVtX3B0cjsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc2l6ZV90IGk7CisgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzX2xpbWJzOyBpKyspCisgICAgICAgICAgICAgICAgKmRlc3RwdHIrKyA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc19iaXRzID4gMCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IG1wX2xpbWJfdCAqc291cmNlcHRyID0gbS5saW1iczsKKyAgICAgICAgICAgICAgICBtcF90d29saW1iX3QgYWNjdSA9IDA7CisgICAgICAgICAgICAgICAgc2l6ZV90IGNvdW50OworICAgICAgICAgICAgICAgIGZvciAoY291bnQgPSBtLm5saW1iczsgY291bnQgPiAwOyBjb3VudC0tKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhY2N1ICs9IChtcF90d29saW1iX3QpICpzb3VyY2VwdHIrKyA8PCBzX2JpdHM7CisgICAgICAgICAgICAgICAgICAgICpkZXN0cHRyKysgPSAobXBfbGltYl90KSBhY2N1OworICAgICAgICAgICAgICAgICAgICBhY2N1ID0gYWNjdSA+PiBHTVBfTElNQl9CSVRTOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChhY2N1ID4gMCkKKyAgICAgICAgICAgICAgICAgICpkZXN0cHRyKysgPSAobXBfbGltYl90KSBhY2N1OworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBtcF9saW1iX3QgKnNvdXJjZXB0ciA9IG0ubGltYnM7CisgICAgICAgICAgICAgICAgc2l6ZV90IGNvdW50OworICAgICAgICAgICAgICAgIGZvciAoY291bnQgPSBtLm5saW1iczsgY291bnQgPiAwOyBjb3VudC0tKQorICAgICAgICAgICAgICAgICAgKmRlc3RwdHIrKyA9ICpzb3VyY2VwdHIrKzsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgbnVtZXJhdG9yLmxpbWJzID0gbnVtX3B0cjsKKyAgICAgICAgICAgIG51bWVyYXRvci5ubGltYnMgPSBkZXN0cHRyIC0gbnVtX3B0cjsKKyAgICAgICAgICB9CisgICAgICAgICAgel9tZW1vcnkgPSBkaXZpZGUgKG51bWVyYXRvciwgcG93NSwgJnopOworICAgICAgICAgIGZyZWUgKG51bV9wdHIpOworICAgICAgICB9CisgICAgfQorICBmcmVlIChwb3c1X3B0cik7CisgIGZyZWUgKG1lbW9yeSk7CisKKyAgLyogSGVyZSB5ID0gcm91bmQgKHggKiAxMF5uKSA9IHogKiAxMF5leHRyYV96ZXJvZXMuICAqLworCisgIGlmICh6X21lbW9yeSA9PSBOVUxMKQorICAgIHJldHVybiBOVUxMOworICBkaWdpdHMgPSBjb252ZXJ0X3RvX2RlY2ltYWwgKHosIGV4dHJhX3plcm9lcyk7CisgIGZyZWUgKHpfbWVtb3J5KTsKKyAgcmV0dXJuIGRpZ2l0czsKK30KKworIyBpZiBORUVEX1BSSU5URl9MT05HX0RPVUJMRQorCisvKiBBc3N1bWluZyB4IGlzIGZpbml0ZSBhbmQgPj0gMCwgYW5kIG4gaXMgYW4gaW50ZWdlcjoKKyAgIFJldHVybnMgdGhlIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2Ygcm91bmQgKHggKiAxMF5uKS4KKyAgIFJldHVybiB0aGUgYWxsb2NhdGVkIG1lbW9yeSAtIGNvbnRhaW5pbmcgdGhlIGRlY2ltYWwgZGlnaXRzIGluIGxvdy10by1oaWdoCisgICBvcmRlciwgdGVybWluYXRlZCB3aXRoIGEgTlVMIGNoYXJhY3RlciAtIGluIGNhc2Ugb2Ygc3VjY2VzcywgTlVMTCBpbiBjYXNlCisgICBvZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLiAgKi8KK3N0YXRpYyBjaGFyICoKK3NjYWxlMTBfcm91bmRfZGVjaW1hbF9sb25nX2RvdWJsZSAobG9uZyBkb3VibGUgeCwgaW50IG4pCit7CisgIGludCBlIElGX0xJTlQoPSAwKTsKKyAgbXBuX3QgbTsKKyAgdm9pZCAqbWVtb3J5ID0gZGVjb2RlX2xvbmdfZG91YmxlICh4LCAmZSwgJm0pOworICByZXR1cm4gc2NhbGUxMF9yb3VuZF9kZWNpbWFsX2RlY29kZWQgKGUsIG0sIG1lbW9yeSwgbik7Cit9CisKKyMgZW5kaWYKKworIyBpZiBORUVEX1BSSU5URl9ET1VCTEUKKworLyogQXNzdW1pbmcgeCBpcyBmaW5pdGUgYW5kID49IDAsIGFuZCBuIGlzIGFuIGludGVnZXI6CisgICBSZXR1cm5zIHRoZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHJvdW5kICh4ICogMTBebikuCisgICBSZXR1cm4gdGhlIGFsbG9jYXRlZCBtZW1vcnkgLSBjb250YWluaW5nIHRoZSBkZWNpbWFsIGRpZ2l0cyBpbiBsb3ctdG8taGlnaAorICAgb3JkZXIsIHRlcm1pbmF0ZWQgd2l0aCBhIE5VTCBjaGFyYWN0ZXIgLSBpbiBjYXNlIG9mIHN1Y2Nlc3MsIE5VTEwgaW4gY2FzZQorICAgb2YgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4gICovCitzdGF0aWMgY2hhciAqCitzY2FsZTEwX3JvdW5kX2RlY2ltYWxfZG91YmxlIChkb3VibGUgeCwgaW50IG4pCit7CisgIGludCBlIElGX0xJTlQoPSAwKTsKKyAgbXBuX3QgbTsKKyAgdm9pZCAqbWVtb3J5ID0gZGVjb2RlX2RvdWJsZSAoeCwgJmUsICZtKTsKKyAgcmV0dXJuIHNjYWxlMTBfcm91bmRfZGVjaW1hbF9kZWNvZGVkIChlLCBtLCBtZW1vcnksIG4pOworfQorCisjIGVuZGlmCisKKyMgaWYgTkVFRF9QUklOVEZfTE9OR19ET1VCTEUKKworLyogQXNzdW1pbmcgeCBpcyBmaW5pdGUgYW5kID4gMDoKKyAgIFJldHVybiBhbiBhcHByb3hpbWF0aW9uIGZvciBuIHdpdGggMTBebiA8PSB4IDwgMTBeKG4rMSkuCisgICBUaGUgYXBwcm94aW1hdGlvbiBpcyB1c3VhbGx5IHRoZSByaWdodCBuLCBidXQgbWF5IGJlIG9mZiBieSAxIHNvbWV0aW1lcy4gICovCitzdGF0aWMgaW50CitmbG9vcmxvZzEwbCAobG9uZyBkb3VibGUgeCkKK3sKKyAgaW50IGV4cDsKKyAgbG9uZyBkb3VibGUgeTsKKyAgZG91YmxlIHo7CisgIGRvdWJsZSBsOworCisgIC8qIFNwbGl0IGludG8gZXhwb25lbnRpYWwgcGFydCBhbmQgbWFudGlzc2EuICAqLworICB5ID0gZnJleHBsICh4LCAmZXhwKTsKKyAgaWYgKCEoeSA+PSAwLjBMICYmIHkgPCAxLjBMKSkKKyAgICBhYm9ydCAoKTsKKyAgaWYgKHkgPT0gMC4wTCkKKyAgICByZXR1cm4gSU5UX01JTjsKKyAgaWYgKHkgPCAwLjVMKQorICAgIHsKKyAgICAgIHdoaWxlICh5IDwgKDEuMEwgLyAoMSA8PCAoR01QX0xJTUJfQklUUyAvIDIpKSAvICgxIDw8IChHTVBfTElNQl9CSVRTIC8gMikpKSkKKyAgICAgICAgeworICAgICAgICAgIHkgKj0gMS4wTCAqICgxIDw8IChHTVBfTElNQl9CSVRTIC8gMikpICogKDEgPDwgKEdNUF9MSU1CX0JJVFMgLyAyKSk7CisgICAgICAgICAgZXhwIC09IEdNUF9MSU1CX0JJVFM7CisgICAgICAgIH0KKyAgICAgIGlmICh5IDwgKDEuMEwgLyAoMSA8PCAxNikpKQorICAgICAgICB7CisgICAgICAgICAgeSAqPSAxLjBMICogKDEgPDwgMTYpOworICAgICAgICAgIGV4cCAtPSAxNjsKKyAgICAgICAgfQorICAgICAgaWYgKHkgPCAoMS4wTCAvICgxIDw8IDgpKSkKKyAgICAgICAgeworICAgICAgICAgIHkgKj0gMS4wTCAqICgxIDw8IDgpOworICAgICAgICAgIGV4cCAtPSA4OworICAgICAgICB9CisgICAgICBpZiAoeSA8ICgxLjBMIC8gKDEgPDwgNCkpKQorICAgICAgICB7CisgICAgICAgICAgeSAqPSAxLjBMICogKDEgPDwgNCk7CisgICAgICAgICAgZXhwIC09IDQ7CisgICAgICAgIH0KKyAgICAgIGlmICh5IDwgKDEuMEwgLyAoMSA8PCAyKSkpCisgICAgICAgIHsKKyAgICAgICAgICB5ICo9IDEuMEwgKiAoMSA8PCAyKTsKKyAgICAgICAgICBleHAgLT0gMjsKKyAgICAgICAgfQorICAgICAgaWYgKHkgPCAoMS4wTCAvICgxIDw8IDEpKSkKKyAgICAgICAgeworICAgICAgICAgIHkgKj0gMS4wTCAqICgxIDw8IDEpOworICAgICAgICAgIGV4cCAtPSAxOworICAgICAgICB9CisgICAgfQorICBpZiAoISh5ID49IDAuNUwgJiYgeSA8IDEuMEwpKQorICAgIGFib3J0ICgpOworICAvKiBDb21wdXRlIGFuIGFwcHJveGltYXRpb24gZm9yIGwgPSBsb2cyKHgpID0gZXhwICsgbG9nMih5KS4gICovCisgIGwgPSBleHA7CisgIHogPSB5OworICBpZiAoeiA8IDAuNzA3MTA2NzgxMTg2NTQ3NTI0NDQpCisgICAgeworICAgICAgeiAqPSAxLjQxNDIxMzU2MjM3MzA5NTA0ODg7CisgICAgICBsIC09IDAuNTsKKyAgICB9CisgIGlmICh6IDwgMC44NDA4OTY0MTUyNTM3MTQ1NDMxKQorICAgIHsKKyAgICAgIHogKj0gMS4xODkyMDcxMTUwMDI3MjEwNjY3OworICAgICAgbCAtPSAwLjI1OworICAgIH0KKyAgaWYgKHogPCAwLjkxNzAwNDA0MzIwNDY3MTIzMTc1KQorICAgIHsKKyAgICAgIHogKj0gMS4wOTA1MDc3MzI2NjUyNTc2NTkyOworICAgICAgbCAtPSAwLjEyNTsKKyAgICB9CisgIGlmICh6IDwgMC45NTc2MDMyODA2OTg1NzM2NDY5KQorICAgIHsKKyAgICAgIHogKj0gMS4wNDQyNzM3ODI0Mjc0MTM4NDAzOworICAgICAgbCAtPSAwLjA2MjU7CisgICAgfQorICAvKiBOb3cgMC45NSA8PSB6IDw9IDEuMDEuICAqLworICB6ID0gMSAtIHo7CisgIC8qIGxvZzIoMS16KSA9IDEvbG9nKDIpICogKC0geiAtIHpeMi8yIC0gel4zLzMgLSB6XjQvNCAtIC4uLikKKyAgICAgRm91ciB0ZXJtcyBhcmUgZW5vdWdoIHRvIGdldCBhbiBhcHByb3hpbWF0aW9uIHdpdGggZXJyb3IgPCAxMF4tNy4gICovCisgIGwgLT0gMS40NDI2OTUwNDA4ODg5NjM0MDc0ICogeiAqICgxLjAgKyB6ICogKDAuNSArIHogKiAoKDEuMCAvIDMpICsgeiAqIDAuMjUpKSk7CisgIC8qIEZpbmFsbHkgbXVsdGlwbHkgd2l0aCBsb2coMikvbG9nKDEwKSwgeWllbGRzIGFuIGFwcHJveGltYXRpb24gZm9yCisgICAgIGxvZzEwKHgpLiAgKi8KKyAgbCAqPSAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIzOworICAvKiBSb3VuZCBkb3duIHRvIHRoZSBuZXh0IGludGVnZXIuICAqLworICByZXR1cm4gKGludCkgbCArIChsIDwgMCA/IC0xIDogMCk7Cit9CisKKyMgZW5kaWYKKworIyBpZiBORUVEX1BSSU5URl9ET1VCTEUKKworLyogQXNzdW1pbmcgeCBpcyBmaW5pdGUgYW5kID4gMDoKKyAgIFJldHVybiBhbiBhcHByb3hpbWF0aW9uIGZvciBuIHdpdGggMTBebiA8PSB4IDwgMTBeKG4rMSkuCisgICBUaGUgYXBwcm94aW1hdGlvbiBpcyB1c3VhbGx5IHRoZSByaWdodCBuLCBidXQgbWF5IGJlIG9mZiBieSAxIHNvbWV0aW1lcy4gICovCitzdGF0aWMgaW50CitmbG9vcmxvZzEwIChkb3VibGUgeCkKK3sKKyAgaW50IGV4cDsKKyAgZG91YmxlIHk7CisgIGRvdWJsZSB6OworICBkb3VibGUgbDsKKworICAvKiBTcGxpdCBpbnRvIGV4cG9uZW50aWFsIHBhcnQgYW5kIG1hbnRpc3NhLiAgKi8KKyAgeSA9IGZyZXhwICh4LCAmZXhwKTsKKyAgaWYgKCEoeSA+PSAwLjAgJiYgeSA8IDEuMCkpCisgICAgYWJvcnQgKCk7CisgIGlmICh5ID09IDAuMCkKKyAgICByZXR1cm4gSU5UX01JTjsKKyAgaWYgKHkgPCAwLjUpCisgICAgeworICAgICAgd2hpbGUgKHkgPCAoMS4wIC8gKDEgPDwgKEdNUF9MSU1CX0JJVFMgLyAyKSkgLyAoMSA8PCAoR01QX0xJTUJfQklUUyAvIDIpKSkpCisgICAgICAgIHsKKyAgICAgICAgICB5ICo9IDEuMCAqICgxIDw8IChHTVBfTElNQl9CSVRTIC8gMikpICogKDEgPDwgKEdNUF9MSU1CX0JJVFMgLyAyKSk7CisgICAgICAgICAgZXhwIC09IEdNUF9MSU1CX0JJVFM7CisgICAgICAgIH0KKyAgICAgIGlmICh5IDwgKDEuMCAvICgxIDw8IDE2KSkpCisgICAgICAgIHsKKyAgICAgICAgICB5ICo9IDEuMCAqICgxIDw8IDE2KTsKKyAgICAgICAgICBleHAgLT0gMTY7CisgICAgICAgIH0KKyAgICAgIGlmICh5IDwgKDEuMCAvICgxIDw8IDgpKSkKKyAgICAgICAgeworICAgICAgICAgIHkgKj0gMS4wICogKDEgPDwgOCk7CisgICAgICAgICAgZXhwIC09IDg7CisgICAgICAgIH0KKyAgICAgIGlmICh5IDwgKDEuMCAvICgxIDw8IDQpKSkKKyAgICAgICAgeworICAgICAgICAgIHkgKj0gMS4wICogKDEgPDwgNCk7CisgICAgICAgICAgZXhwIC09IDQ7CisgICAgICAgIH0KKyAgICAgIGlmICh5IDwgKDEuMCAvICgxIDw8IDIpKSkKKyAgICAgICAgeworICAgICAgICAgIHkgKj0gMS4wICogKDEgPDwgMik7CisgICAgICAgICAgZXhwIC09IDI7CisgICAgICAgIH0KKyAgICAgIGlmICh5IDwgKDEuMCAvICgxIDw8IDEpKSkKKyAgICAgICAgeworICAgICAgICAgIHkgKj0gMS4wICogKDEgPDwgMSk7CisgICAgICAgICAgZXhwIC09IDE7CisgICAgICAgIH0KKyAgICB9CisgIGlmICghKHkgPj0gMC41ICYmIHkgPCAxLjApKQorICAgIGFib3J0ICgpOworICAvKiBDb21wdXRlIGFuIGFwcHJveGltYXRpb24gZm9yIGwgPSBsb2cyKHgpID0gZXhwICsgbG9nMih5KS4gICovCisgIGwgPSBleHA7CisgIHogPSB5OworICBpZiAoeiA8IDAuNzA3MTA2NzgxMTg2NTQ3NTI0NDQpCisgICAgeworICAgICAgeiAqPSAxLjQxNDIxMzU2MjM3MzA5NTA0ODg7CisgICAgICBsIC09IDAuNTsKKyAgICB9CisgIGlmICh6IDwgMC44NDA4OTY0MTUyNTM3MTQ1NDMxKQorICAgIHsKKyAgICAgIHogKj0gMS4xODkyMDcxMTUwMDI3MjEwNjY3OworICAgICAgbCAtPSAwLjI1OworICAgIH0KKyAgaWYgKHogPCAwLjkxNzAwNDA0MzIwNDY3MTIzMTc1KQorICAgIHsKKyAgICAgIHogKj0gMS4wOTA1MDc3MzI2NjUyNTc2NTkyOworICAgICAgbCAtPSAwLjEyNTsKKyAgICB9CisgIGlmICh6IDwgMC45NTc2MDMyODA2OTg1NzM2NDY5KQorICAgIHsKKyAgICAgIHogKj0gMS4wNDQyNzM3ODI0Mjc0MTM4NDAzOworICAgICAgbCAtPSAwLjA2MjU7CisgICAgfQorICAvKiBOb3cgMC45NSA8PSB6IDw9IDEuMDEuICAqLworICB6ID0gMSAtIHo7CisgIC8qIGxvZzIoMS16KSA9IDEvbG9nKDIpICogKC0geiAtIHpeMi8yIC0gel4zLzMgLSB6XjQvNCAtIC4uLikKKyAgICAgRm91ciB0ZXJtcyBhcmUgZW5vdWdoIHRvIGdldCBhbiBhcHByb3hpbWF0aW9uIHdpdGggZXJyb3IgPCAxMF4tNy4gICovCisgIGwgLT0gMS40NDI2OTUwNDA4ODg5NjM0MDc0ICogeiAqICgxLjAgKyB6ICogKDAuNSArIHogKiAoKDEuMCAvIDMpICsgeiAqIDAuMjUpKSk7CisgIC8qIEZpbmFsbHkgbXVsdGlwbHkgd2l0aCBsb2coMikvbG9nKDEwKSwgeWllbGRzIGFuIGFwcHJveGltYXRpb24gZm9yCisgICAgIGxvZzEwKHgpLiAgKi8KKyAgbCAqPSAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIzOworICAvKiBSb3VuZCBkb3duIHRvIHRoZSBuZXh0IGludGVnZXIuICAqLworICByZXR1cm4gKGludCkgbCArIChsIDwgMCA/IC0xIDogMCk7Cit9CisKKyMgZW5kaWYKKworLyogVGVzdHMgd2hldGhlciBhIHN0cmluZyBvZiBkaWdpdHMgY29uc2lzdHMgb2YgZXhhY3RseSBQUkVDSVNJT04gemVyb2VzIGFuZAorICAgYSBzaW5nbGUgJzEnIGRpZ2l0LiAgKi8KK3N0YXRpYyBpbnQKK2lzX2JvcmRlcmxpbmUgKGNvbnN0IGNoYXIgKmRpZ2l0cywgc2l6ZV90IHByZWNpc2lvbikKK3sKKyAgZm9yICg7IHByZWNpc2lvbiA+IDA7IHByZWNpc2lvbi0tLCBkaWdpdHMrKykKKyAgICBpZiAoKmRpZ2l0cyAhPSAnMCcpCisgICAgICByZXR1cm4gMDsKKyAgaWYgKCpkaWdpdHMgIT0gJzEnKQorICAgIHJldHVybiAwOworICBkaWdpdHMrKzsKKyAgcmV0dXJuICpkaWdpdHMgPT0gJ1wwJzsKK30KKworI2VuZGlmCisKKyNpZiAhVVNFX1NOUFJJTlRGIHx8ICFIQVZFX1NOUFJJTlRGX1JFVFZBTF9DOTkKKworLyogVXNlIGEgZGlmZmVyZW50IGZ1bmN0aW9uIG5hbWUsIHRvIG1ha2UgaXQgcG9zc2libGUgdGhhdCB0aGUgJ3djaGFyX3QnCisgICBwYXJhbWV0cml6YXRpb24gYW5kIHRoZSAnY2hhcicgcGFyYW1ldHJpemF0aW9uIGdldCBjb21waWxlZCBpbiB0aGUgc2FtZQorICAgdHJhbnNsYXRpb24gdW5pdC4gICovCisjIGlmIFdJREVfQ0hBUl9WRVJTSU9OCisjICBkZWZpbmUgTUFYX1JPT01fTkVFREVEIHdtYXhfcm9vbV9uZWVkZWQKKyMgZWxzZQorIyAgZGVmaW5lIE1BWF9ST09NX05FRURFRCBtYXhfcm9vbV9uZWVkZWQKKyMgZW5kaWYKKworLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIFRDSEFSX1QgdW5pdHMgbmVlZGVkIGFzIHRlbXBvcmFyeSBzcGFjZSBmb3IgdGhlIHJlc3VsdAorICAgb2Ygc3ByaW50ZiBvciBTTlBSSU5URiBvZiBhIHNpbmdsZSBjb252ZXJzaW9uIGRpcmVjdGl2ZS4gICovCitzdGF0aWMgc2l6ZV90CitNQVhfUk9PTV9ORUVERUQgKGNvbnN0IGFyZ3VtZW50cyAqYXAsIHNpemVfdCBhcmdfaW5kZXgsIEZDSEFSX1QgY29udmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgYXJnX3R5cGUgdHlwZSwgaW50IGZsYWdzLCBzaXplX3Qgd2lkdGgsIGludCBoYXNfcHJlY2lzaW9uLAorICAgICAgICAgICAgICAgICBzaXplX3QgcHJlY2lzaW9uLCBpbnQgcGFkX291cnNlbHZlcykKK3sKKyAgc2l6ZV90IHRtcF9sZW5ndGg7CisKKyAgc3dpdGNoIChjb252ZXJzaW9uKQorICAgIHsKKyAgICBjYXNlICdkJzogY2FzZSAnaSc6IGNhc2UgJ3UnOgorIyBpZiBIQVZFX0xPTkdfTE9OR19JTlQKKyAgICAgIGlmICh0eXBlID09IFRZUEVfTE9OR0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HTE9OR0lOVCkKKyAgICAgICAgdG1wX2xlbmd0aCA9CisgICAgICAgICAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgbG9uZyBsb25nKSAqIENIQVJfQklUCisgICAgICAgICAgICAgICAgICAgICAgICAgICogMC4zMDEwMyAvKiBiaW5hcnkgLT4gZGVjaW1hbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICArIDE7IC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisgICAgICBlbHNlCisjIGVuZGlmCisgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HSU5UKQorICAgICAgICB0bXBfbGVuZ3RoID0KKyAgICAgICAgICAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBsb25nKSAqIENIQVJfQklUCisgICAgICAgICAgICAgICAgICAgICAgICAgICogMC4zMDEwMyAvKiBiaW5hcnkgLT4gZGVjaW1hbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICArIDE7IC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisgICAgICBlbHNlCisgICAgICAgIHRtcF9sZW5ndGggPQorICAgICAgICAgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGludCkgKiBDSEFSX0JJVAorICAgICAgICAgICAgICAgICAgICAgICAgICAqIDAuMzAxMDMgLyogYmluYXJ5IC0+IGRlY2ltYWwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgKyAxOyAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworICAgICAgaWYgKHRtcF9sZW5ndGggPCBwcmVjaXNpb24pCisgICAgICAgIHRtcF9sZW5ndGggPSBwcmVjaXNpb247CisgICAgICAvKiBNdWx0aXBseSBieSAyLCBhcyBhbiBlc3RpbWF0ZSBmb3IgRkxBR19HUk9VUC4gICovCisgICAgICB0bXBfbGVuZ3RoID0geHN1bSAodG1wX2xlbmd0aCwgdG1wX2xlbmd0aCk7CisgICAgICAvKiBBZGQgMSwgdG8gYWNjb3VudCBmb3IgYSBsZWFkaW5nIHNpZ24uICAqLworICAgICAgdG1wX2xlbmd0aCA9IHhzdW0gKHRtcF9sZW5ndGgsIDEpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICdvJzoKKyMgaWYgSEFWRV9MT05HX0xPTkdfSU5UCisgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdMT05HSU5UIHx8IHR5cGUgPT0gVFlQRV9VTE9OR0xPTkdJTlQpCisgICAgICAgIHRtcF9sZW5ndGggPQorICAgICAgICAgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGxvbmcgbG9uZykgKiBDSEFSX0JJVAorICAgICAgICAgICAgICAgICAgICAgICAgICAqIDAuMzMzMzM0IC8qIGJpbmFyeSAtPiBvY3RhbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICArIDE7IC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisgICAgICBlbHNlCisjIGVuZGlmCisgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HSU5UKQorICAgICAgICB0bXBfbGVuZ3RoID0KKyAgICAgICAgICAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBsb25nKSAqIENIQVJfQklUCisgICAgICAgICAgICAgICAgICAgICAgICAgICogMC4zMzMzMzQgLyogYmluYXJ5IC0+IG9jdGFsICovCisgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICsgMTsgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKyAgICAgIGVsc2UKKyAgICAgICAgdG1wX2xlbmd0aCA9CisgICAgICAgICAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgaW50KSAqIENIQVJfQklUCisgICAgICAgICAgICAgICAgICAgICAgICAgICogMC4zMzMzMzQgLyogYmluYXJ5IC0+IG9jdGFsICovCisgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICsgMTsgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKyAgICAgIGlmICh0bXBfbGVuZ3RoIDwgcHJlY2lzaW9uKQorICAgICAgICB0bXBfbGVuZ3RoID0gcHJlY2lzaW9uOworICAgICAgLyogQWRkIDEsIHRvIGFjY291bnQgZm9yIGEgbGVhZGluZyBzaWduLiAgKi8KKyAgICAgIHRtcF9sZW5ndGggPSB4c3VtICh0bXBfbGVuZ3RoLCAxKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAneCc6IGNhc2UgJ1gnOgorIyBpZiBIQVZFX0xPTkdfTE9OR19JTlQKKyAgICAgIGlmICh0eXBlID09IFRZUEVfTE9OR0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HTE9OR0lOVCkKKyAgICAgICAgdG1wX2xlbmd0aCA9CisgICAgICAgICAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgbG9uZyBsb25nKSAqIENIQVJfQklUCisgICAgICAgICAgICAgICAgICAgICAgICAgICogMC4yNSAvKiBiaW5hcnkgLT4gaGV4YWRlY2ltYWwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgKyAxOyAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworICAgICAgZWxzZQorIyBlbmRpZgorICAgICAgaWYgKHR5cGUgPT0gVFlQRV9MT05HSU5UIHx8IHR5cGUgPT0gVFlQRV9VTE9OR0lOVCkKKyAgICAgICAgdG1wX2xlbmd0aCA9CisgICAgICAgICAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgbG9uZykgKiBDSEFSX0JJVAorICAgICAgICAgICAgICAgICAgICAgICAgICAqIDAuMjUgLyogYmluYXJ5IC0+IGhleGFkZWNpbWFsICovCisgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICsgMTsgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKyAgICAgIGVsc2UKKyAgICAgICAgdG1wX2xlbmd0aCA9CisgICAgICAgICAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgaW50KSAqIENIQVJfQklUCisgICAgICAgICAgICAgICAgICAgICAgICAgICogMC4yNSAvKiBiaW5hcnkgLT4gaGV4YWRlY2ltYWwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgKyAxOyAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworICAgICAgaWYgKHRtcF9sZW5ndGggPCBwcmVjaXNpb24pCisgICAgICAgIHRtcF9sZW5ndGggPSBwcmVjaXNpb247CisgICAgICAvKiBBZGQgMiwgdG8gYWNjb3VudCBmb3IgYSBsZWFkaW5nIHNpZ24gb3IgYWx0ZXJuYXRlIGZvcm0uICAqLworICAgICAgdG1wX2xlbmd0aCA9IHhzdW0gKHRtcF9sZW5ndGgsIDIpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICdmJzogY2FzZSAnRic6CisgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdET1VCTEUpCisgICAgICAgIHRtcF9sZW5ndGggPQorICAgICAgICAgICh1bnNpZ25lZCBpbnQpIChMREJMX01BWF9FWFAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKiAwLjMwMTAzIC8qIGJpbmFyeSAtPiBkZWNpbWFsICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICogMiAvKiBlc3RpbWF0ZSBmb3IgRkxBR19HUk9VUCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKyAgICAgICAgICArIDEwOyAvKiBzaWduLCBkZWNpbWFsIHBvaW50IGV0Yy4gKi8KKyAgICAgIGVsc2UKKyAgICAgICAgdG1wX2xlbmd0aCA9CisgICAgICAgICAgKHVuc2lnbmVkIGludCkgKERCTF9NQVhfRVhQCisgICAgICAgICAgICAgICAgICAgICAgICAgICogMC4zMDEwMyAvKiBiaW5hcnkgLT4gZGVjaW1hbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAqIDIgLyogZXN0aW1hdGUgZm9yIEZMQUdfR1JPVVAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgKyAxIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisgICAgICAgICAgKyAxMDsgLyogc2lnbiwgZGVjaW1hbCBwb2ludCBldGMuICovCisgICAgICB0bXBfbGVuZ3RoID0geHN1bSAodG1wX2xlbmd0aCwgcHJlY2lzaW9uKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAnZSc6IGNhc2UgJ0UnOiBjYXNlICdnJzogY2FzZSAnRyc6CisgICAgICB0bXBfbGVuZ3RoID0KKyAgICAgICAgMTI7IC8qIHNpZ24sIGRlY2ltYWwgcG9pbnQsIGV4cG9uZW50IGV0Yy4gKi8KKyAgICAgIHRtcF9sZW5ndGggPSB4c3VtICh0bXBfbGVuZ3RoLCBwcmVjaXNpb24pOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICdhJzogY2FzZSAnQSc6CisgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdET1VCTEUpCisgICAgICAgIHRtcF9sZW5ndGggPQorICAgICAgICAgICh1bnNpZ25lZCBpbnQpIChMREJMX0RJRworICAgICAgICAgICAgICAgICAgICAgICAgICAqIDAuODMxIC8qIGRlY2ltYWwgLT4gaGV4YWRlY2ltYWwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgKyAxOyAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworICAgICAgZWxzZQorICAgICAgICB0bXBfbGVuZ3RoID0KKyAgICAgICAgICAodW5zaWduZWQgaW50KSAoREJMX0RJRworICAgICAgICAgICAgICAgICAgICAgICAgICAqIDAuODMxIC8qIGRlY2ltYWwgLT4gaGV4YWRlY2ltYWwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgKyAxOyAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworICAgICAgaWYgKHRtcF9sZW5ndGggPCBwcmVjaXNpb24pCisgICAgICAgIHRtcF9sZW5ndGggPSBwcmVjaXNpb247CisgICAgICAvKiBBY2NvdW50IGZvciBzaWduLCBkZWNpbWFsIHBvaW50IGV0Yy4gKi8KKyAgICAgIHRtcF9sZW5ndGggPSB4c3VtICh0bXBfbGVuZ3RoLCAxMik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgJ2MnOgorIyBpZiBIQVZFX1dJTlRfVCAmJiAhV0lERV9DSEFSX1ZFUlNJT04KKyAgICAgIGlmICh0eXBlID09IFRZUEVfV0lERV9DSEFSKQorICAgICAgICB0bXBfbGVuZ3RoID0gTUJfQ1VSX01BWDsKKyAgICAgIGVsc2UKKyMgZW5kaWYKKyAgICAgICAgdG1wX2xlbmd0aCA9IDE7CisgICAgICBicmVhazsKKworICAgIGNhc2UgJ3MnOgorIyBpZiBIQVZFX1dDSEFSX1QKKyAgICAgIGlmICh0eXBlID09IFRZUEVfV0lERV9TVFJJTkcpCisgICAgICAgIHsKKyMgIGlmIFdJREVfQ0hBUl9WRVJTSU9OCisgICAgICAgICAgLyogSVNPIEMgc2F5cyBhYm91dCAlbHMgaW4gZndwcmludGY6CisgICAgICAgICAgICAgICAiSWYgdGhlIHByZWNpc2lvbiBpcyBub3Qgc3BlY2lmaWVkIG9yIGlzIGdyZWF0ZXIgdGhhbiB0aGUgc2l6ZQorICAgICAgICAgICAgICAgIG9mIHRoZSBhcnJheSwgdGhlIGFycmF5IHNoYWxsIGNvbnRhaW4gYSBudWxsIHdpZGUgY2hhcmFjdGVyLiIKKyAgICAgICAgICAgICBTbyBpZiB0aGVyZSBpcyBhIHByZWNpc2lvbiwgd2UgbXVzdCBub3QgdXNlIHdjc2xlbi4gICovCisgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqYXJnID0gYXAtPmFyZ1thcmdfaW5kZXhdLmEuYV93aWRlX3N0cmluZzsKKworICAgICAgICAgIGlmIChoYXNfcHJlY2lzaW9uKQorICAgICAgICAgICAgdG1wX2xlbmd0aCA9IGxvY2FsX3djc25sZW4gKGFyZywgcHJlY2lzaW9uKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB0bXBfbGVuZ3RoID0gbG9jYWxfd2NzbGVuIChhcmcpOworIyAgZWxzZQorICAgICAgICAgIC8qIElTTyBDIHNheXMgYWJvdXQgJWxzIGluIGZwcmludGY6CisgICAgICAgICAgICAgICAiSWYgYSBwcmVjaXNpb24gaXMgc3BlY2lmaWVkLCBubyBtb3JlIHRoYW4gdGhhdCBtYW55IGJ5dGVzIGFyZQorICAgICAgICAgICAgICAgIHdyaXR0ZW4gKGluY2x1ZGluZyBzaGlmdCBzZXF1ZW5jZXMsIGlmIGFueSksIGFuZCB0aGUgYXJyYXkKKyAgICAgICAgICAgICAgICBzaGFsbCBjb250YWluIGEgbnVsbCB3aWRlIGNoYXJhY3RlciBpZiwgdG8gZXF1YWwgdGhlIG11bHRpYnl0ZQorICAgICAgICAgICAgICAgIGNoYXJhY3RlciBzZXF1ZW5jZSBsZW5ndGggZ2l2ZW4gYnkgdGhlIHByZWNpc2lvbiwgdGhlIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgd291bGQgbmVlZCB0byBhY2Nlc3MgYSB3aWRlIGNoYXJhY3RlciBvbmUgcGFzdCB0aGUgZW5kIG9mIHRoZQorICAgICAgICAgICAgICAgIGFycmF5LiIKKyAgICAgICAgICAgICBTbyBpZiB0aGVyZSBpcyBhIHByZWNpc2lvbiwgd2UgbXVzdCBub3QgdXNlIHdjc2xlbi4gICovCisgICAgICAgICAgLyogVGhpcyBjYXNlIGhhcyBhbHJlYWR5IGJlZW4gaGFuZGxlZCBzZXBhcmF0ZWx5IGluIFZBU05QUklOVEYuICAqLworICAgICAgICAgIGFib3J0ICgpOworIyAgZW5kaWYKKyAgICAgICAgfQorICAgICAgZWxzZQorIyBlbmRpZgorICAgICAgICB7CisjIGlmIFdJREVfQ0hBUl9WRVJTSU9OCisgICAgICAgICAgLyogSVNPIEMgc2F5cyBhYm91dCAlcyBpbiBmd3ByaW50ZjoKKyAgICAgICAgICAgICAgICJJZiB0aGUgcHJlY2lzaW9uIGlzIG5vdCBzcGVjaWZpZWQgb3IgaXMgZ3JlYXRlciB0aGFuIHRoZSBzaXplCisgICAgICAgICAgICAgICAgb2YgdGhlIGNvbnZlcnRlZCBhcnJheSwgdGhlIGNvbnZlcnRlZCBhcnJheSBzaGFsbCBjb250YWluIGEKKyAgICAgICAgICAgICAgICBudWxsIHdpZGUgY2hhcmFjdGVyLiIKKyAgICAgICAgICAgICBTbyBpZiB0aGVyZSBpcyBhIHByZWNpc2lvbiwgd2UgbXVzdCBub3QgdXNlIHN0cmxlbi4gICovCisgICAgICAgICAgLyogVGhpcyBjYXNlIGhhcyBhbHJlYWR5IGJlZW4gaGFuZGxlZCBzZXBhcmF0ZWx5IGluIFZBU05QUklOVEYuICAqLworICAgICAgICAgIGFib3J0ICgpOworIyBlbHNlCisgICAgICAgICAgLyogSVNPIEMgc2F5cyBhYm91dCAlcyBpbiBmcHJpbnRmOgorICAgICAgICAgICAgICAgIklmIHRoZSBwcmVjaXNpb24gaXMgbm90IHNwZWNpZmllZCBvciBncmVhdGVyIHRoYW4gdGhlIHNpemUgb2YKKyAgICAgICAgICAgICAgICB0aGUgYXJyYXksIHRoZSBhcnJheSBzaGFsbCBjb250YWluIGEgbnVsbCBjaGFyYWN0ZXIuIgorICAgICAgICAgICAgIFNvIGlmIHRoZXJlIGlzIGEgcHJlY2lzaW9uLCB3ZSBtdXN0IG5vdCB1c2Ugc3RybGVuLiAgKi8KKyAgICAgICAgICBjb25zdCBjaGFyICphcmcgPSBhcC0+YXJnW2FyZ19pbmRleF0uYS5hX3N0cmluZzsKKworICAgICAgICAgIGlmIChoYXNfcHJlY2lzaW9uKQorICAgICAgICAgICAgdG1wX2xlbmd0aCA9IGxvY2FsX3N0cm5sZW4gKGFyZywgcHJlY2lzaW9uKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB0bXBfbGVuZ3RoID0gc3RybGVuIChhcmcpOworIyBlbmRpZgorICAgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgJ3AnOgorICAgICAgdG1wX2xlbmd0aCA9CisgICAgICAgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHZvaWQgKikgKiBDSEFSX0JJVAorICAgICAgICAgICAgICAgICAgICAgICAgKiAwLjI1IC8qIGJpbmFyeSAtPiBoZXhhZGVjaW1hbCAqLworICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgKyAxIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisgICAgICAgICAgKyAyOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIDB4ICovCisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBhYm9ydCAoKTsKKyAgICB9CisKKyAgaWYgKCFwYWRfb3Vyc2VsdmVzKQorICAgIHsKKyMgaWYgRU5BQkxFX1VOSVNURElPCisgICAgICAvKiBQYWRkaW5nIGNvbnNpZGVycyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMsIHRoZXJlZm9yZSB0aGUgbnVtYmVyIG9mCisgICAgICAgICBlbGVtZW50cyBhZnRlciBwYWRkaW5nIG1heSBiZQorICAgICAgICAgICA+IG1heCAodG1wX2xlbmd0aCwgd2lkdGgpCisgICAgICAgICBidXQgaXMgY2VydGFpbmx5CisgICAgICAgICAgIDw9IHRtcF9sZW5ndGggKyB3aWR0aC4gICovCisgICAgICB0bXBfbGVuZ3RoID0geHN1bSAodG1wX2xlbmd0aCwgd2lkdGgpOworIyBlbHNlCisgICAgICAvKiBQYWRkaW5nIGNvbnNpZGVycyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLCBzYXlzIFBPU0lYLiAgKi8KKyAgICAgIGlmICh0bXBfbGVuZ3RoIDwgd2lkdGgpCisgICAgICAgIHRtcF9sZW5ndGggPSB3aWR0aDsKKyMgZW5kaWYKKyAgICB9CisKKyAgdG1wX2xlbmd0aCA9IHhzdW0gKHRtcF9sZW5ndGgsIDEpOyAvKiBhY2NvdW50IGZvciB0cmFpbGluZyBOVUwgKi8KKworICByZXR1cm4gdG1wX2xlbmd0aDsKK30KKworI2VuZGlmCisKK0RDSEFSX1QgKgorVkFTTlBSSU5URiAoRENIQVJfVCAqcmVzdWx0YnVmLCBzaXplX3QgKmxlbmd0aHAsCisgICAgICAgICAgICBjb25zdCBGQ0hBUl9UICpmb3JtYXQsIHZhX2xpc3QgYXJncykKK3sKKyAgRElSRUNUSVZFUyBkOworICBhcmd1bWVudHMgYTsKKworICBpZiAoUFJJTlRGX1BBUlNFIChmb3JtYXQsICZkLCAmYSkgPCAwKQorICAgIC8qIGVycm5vIGlzIGFscmVhZHkgc2V0LiAgKi8KKyAgICByZXR1cm4gTlVMTDsKKworI2RlZmluZSBDTEVBTlVQKCkgXAorICBpZiAoZC5kaXIgIT0gZC5kaXJlY3RfYWxsb2NfZGlyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZyZWUgKGQuZGlyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAoYS5hcmcgIT0gYS5kaXJlY3RfYWxsb2NfYXJnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZyZWUgKGEuYXJnKTsKKworICBpZiAoUFJJTlRGX0ZFVENIQVJHUyAoYXJncywgJmEpIDwgMCkKKyAgICB7CisgICAgICBDTEVBTlVQICgpOworICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgeworICAgIHNpemVfdCBidWZfbmVlZGVkbGVuZ3RoOworICAgIFRDSEFSX1QgKmJ1ZjsKKyAgICBUQ0hBUl9UICpidWZfbWFsbG9jZWQ7CisgICAgY29uc3QgRkNIQVJfVCAqY3A7CisgICAgc2l6ZV90IGk7CisgICAgRElSRUNUSVZFICpkcDsKKyAgICAvKiBPdXRwdXQgc3RyaW5nIGFjY3VtdWxhdG9yLiAgKi8KKyAgICBEQ0hBUl9UICpyZXN1bHQ7CisgICAgc2l6ZV90IGFsbG9jYXRlZDsKKyAgICBzaXplX3QgbGVuZ3RoOworCisgICAgLyogQWxsb2NhdGUgYSBzbWFsbCBidWZmZXIgdGhhdCB3aWxsIGhvbGQgYSBkaXJlY3RpdmUgcGFzc2VkIHRvCisgICAgICAgc3ByaW50ZiBvciBzbnByaW50Zi4gICovCisgICAgYnVmX25lZWRlZGxlbmd0aCA9CisgICAgICB4c3VtNCAoNywgZC5tYXhfd2lkdGhfbGVuZ3RoLCBkLm1heF9wcmVjaXNpb25fbGVuZ3RoLCA2KTsKKyNpZiBIQVZFX0FMTE9DQQorICAgIGlmIChidWZfbmVlZGVkbGVuZ3RoIDwgNDAwMCAvIHNpemVvZiAoVENIQVJfVCkpCisgICAgICB7CisgICAgICAgIGJ1ZiA9IChUQ0hBUl9UICopIGFsbG9jYSAoYnVmX25lZWRlZGxlbmd0aCAqIHNpemVvZiAoVENIQVJfVCkpOworICAgICAgICBidWZfbWFsbG9jZWQgPSBOVUxMOworICAgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgICAgeworICAgICAgICBzaXplX3QgYnVmX21lbXNpemUgPSB4dGltZXMgKGJ1Zl9uZWVkZWRsZW5ndGgsIHNpemVvZiAoVENIQVJfVCkpOworICAgICAgICBpZiAoc2l6ZV9vdmVyZmxvd19wIChidWZfbWVtc2l6ZSkpCisgICAgICAgICAgZ290byBvdXRfb2ZfbWVtb3J5XzE7CisgICAgICAgIGJ1ZiA9IChUQ0hBUl9UICopIG1hbGxvYyAoYnVmX21lbXNpemUpOworICAgICAgICBpZiAoYnVmID09IE5VTEwpCisgICAgICAgICAgZ290byBvdXRfb2ZfbWVtb3J5XzE7CisgICAgICAgIGJ1Zl9tYWxsb2NlZCA9IGJ1ZjsKKyAgICAgIH0KKworICAgIGlmIChyZXN1bHRidWYgIT0gTlVMTCkKKyAgICAgIHsKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0YnVmOworICAgICAgICBhbGxvY2F0ZWQgPSAqbGVuZ3RocDsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICAgIHJlc3VsdCA9IE5VTEw7CisgICAgICAgIGFsbG9jYXRlZCA9IDA7CisgICAgICB9CisgICAgbGVuZ3RoID0gMDsKKyAgICAvKiBJbnZhcmlhbnRzOgorICAgICAgIHJlc3VsdCBpcyBlaXRoZXIgPT0gcmVzdWx0YnVmIG9yID09IE5VTEwgb3IgbWFsbG9jLWFsbG9jYXRlZC4KKyAgICAgICBJZiBsZW5ndGggPiAwLCB0aGVuIHJlc3VsdCAhPSBOVUxMLiAgKi8KKworICAgIC8qIEVuc3VyZXMgdGhhdCBhbGxvY2F0ZWQgPj0gbmVlZGVkLiAgQWJvcnRzIHRocm91Z2ggYSBqdW1wIHRvCisgICAgICAgb3V0X29mX21lbW9yeSBpZiBuZWVkZWQgaXMgU0laRV9NQVggb3Igb3RoZXJ3aXNlIHRvbyBiaWcuICAqLworI2RlZmluZSBFTlNVUkVfQUxMT0NBVElPTihuZWVkZWQpIFwKKyAgICBpZiAoKG5lZWRlZCkgPiBhbGxvY2F0ZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHNpemVfdCBtZW1vcnlfc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgRENIQVJfVCAqbWVtb3J5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGFsbG9jYXRlZCA9IChhbGxvY2F0ZWQgPiAwID8geHRpbWVzIChhbGxvY2F0ZWQsIDIpIDogMTIpOyAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKChuZWVkZWQpID4gYWxsb2NhdGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGFsbG9jYXRlZCA9IChuZWVkZWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG1lbW9yeV9zaXplID0geHRpbWVzIChhbGxvY2F0ZWQsIHNpemVvZiAoRENIQVJfVCkpOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHNpemVfb3ZlcmZsb3dfcCAobWVtb3J5X3NpemUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdvdG8gb3V0X29mX21lbW9yeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChyZXN1bHQgPT0gcmVzdWx0YnVmIHx8IHJlc3VsdCA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBtZW1vcnkgPSAoRENIQVJfVCAqKSBtYWxsb2MgKG1lbW9yeV9zaXplKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgbWVtb3J5ID0gKERDSEFSX1QgKikgcmVhbGxvYyAocmVzdWx0LCBtZW1vcnlfc2l6ZSk7ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKG1lbW9yeSA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdvdG8gb3V0X29mX21lbW9yeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChyZXN1bHQgPT0gcmVzdWx0YnVmICYmIGxlbmd0aCA+IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBEQ0hBUl9DUFkgKG1lbW9yeSwgcmVzdWx0LCBsZW5ndGgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXN1bHQgPSBtZW1vcnk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB9CisKKyAgICBmb3IgKGNwID0gZm9ybWF0LCBpID0gMCwgZHAgPSAmZC5kaXJbMF07IDsgY3AgPSBkcC0+ZGlyX2VuZCwgaSsrLCBkcCsrKQorICAgICAgeworICAgICAgICBpZiAoY3AgIT0gZHAtPmRpcl9zdGFydCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBzaXplX3QgbiA9IGRwLT5kaXJfc3RhcnQgLSBjcDsKKyAgICAgICAgICAgIHNpemVfdCBhdWdtZW50ZWRfbGVuZ3RoID0geHN1bSAobGVuZ3RoLCBuKTsKKworICAgICAgICAgICAgRU5TVVJFX0FMTE9DQVRJT04gKGF1Z21lbnRlZF9sZW5ndGgpOworICAgICAgICAgICAgLyogVGhpcyBjb3BpZXMgYSBwaWVjZSBvZiBGQ0hBUl9UW10gaW50byBhIERDSEFSX1RbXS4gIEhlcmUgd2UKKyAgICAgICAgICAgICAgIG5lZWQgdGhhdCB0aGUgZm9ybWF0IHN0cmluZyBjb250YWlucyBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgIGlmIEZDSEFSX1QgYW5kIERDSEFSX1QgYXJlIG5vdCB0aGUgc2FtZSB0eXBlLiAgKi8KKyAgICAgICAgICAgIGlmIChzaXplb2YgKEZDSEFSX1QpID09IHNpemVvZiAoRENIQVJfVCkpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEQ0hBUl9DUFkgKHJlc3VsdCArIGxlbmd0aCwgKGNvbnN0IERDSEFSX1QgKikgY3AsIG4pOworICAgICAgICAgICAgICAgIGxlbmd0aCA9IGF1Z21lbnRlZF9sZW5ndGg7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRvCisgICAgICAgICAgICAgICAgICByZXN1bHRbbGVuZ3RoKytdID0gKHVuc2lnbmVkIGNoYXIpICpjcCsrOworICAgICAgICAgICAgICAgIHdoaWxlICgtLW4gPiAwKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgaWYgKGkgPT0gZC5jb3VudCkKKyAgICAgICAgICBicmVhazsKKworICAgICAgICAvKiBFeGVjdXRlIGEgc2luZ2xlIGRpcmVjdGl2ZS4gICovCisgICAgICAgIGlmIChkcC0+Y29udmVyc2lvbiA9PSAnJScpCisgICAgICAgICAgeworICAgICAgICAgICAgc2l6ZV90IGF1Z21lbnRlZF9sZW5ndGg7CisKKyAgICAgICAgICAgIGlmICghKGRwLT5hcmdfaW5kZXggPT0gQVJHX05PTkUpKQorICAgICAgICAgICAgICBhYm9ydCAoKTsKKyAgICAgICAgICAgIGF1Z21lbnRlZF9sZW5ndGggPSB4c3VtIChsZW5ndGgsIDEpOworICAgICAgICAgICAgRU5TVVJFX0FMTE9DQVRJT04gKGF1Z21lbnRlZF9sZW5ndGgpOworICAgICAgICAgICAgcmVzdWx0W2xlbmd0aF0gPSAnJSc7CisgICAgICAgICAgICBsZW5ndGggPSBhdWdtZW50ZWRfbGVuZ3RoOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghKGRwLT5hcmdfaW5kZXggIT0gQVJHX05PTkUpKQorICAgICAgICAgICAgICBhYm9ydCAoKTsKKworICAgICAgICAgICAgaWYgKGRwLT5jb252ZXJzaW9uID09ICduJykKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoYS5hcmdbZHAtPmFyZ19pbmRleF0udHlwZSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRV9DT1VOVF9TQ0hBUl9QT0lOVEVSOgorICAgICAgICAgICAgICAgICAgICAqYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2NvdW50X3NjaGFyX3BvaW50ZXIgPSBsZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFX0NPVU5UX1NIT1JUX1BPSU5URVI6CisgICAgICAgICAgICAgICAgICAgICphLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfY291bnRfc2hvcnRfcG9pbnRlciA9IGxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVfQ09VTlRfSU5UX1BPSU5URVI6CisgICAgICAgICAgICAgICAgICAgICphLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfY291bnRfaW50X3BvaW50ZXIgPSBsZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFX0NPVU5UX0xPTkdJTlRfUE9JTlRFUjoKKyAgICAgICAgICAgICAgICAgICAgKmEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9jb3VudF9sb25naW50X3BvaW50ZXIgPSBsZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworI2lmIEhBVkVfTE9OR19MT05HX0lOVAorICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFX0NPVU5UX0xPTkdMT05HSU5UX1BPSU5URVI6CisgICAgICAgICAgICAgICAgICAgICphLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfY291bnRfbG9uZ2xvbmdpbnRfcG9pbnRlciA9IGxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGFib3J0ICgpOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisjaWYgRU5BQkxFX1VOSVNURElPCisgICAgICAgICAgICAvKiBUaGUgdW5pc3RkaW8gZXh0ZW5zaW9ucy4gICovCisgICAgICAgICAgICBlbHNlIGlmIChkcC0+Y29udmVyc2lvbiA9PSAnVScpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhcmdfdHlwZSB0eXBlID0gYS5hcmdbZHAtPmFyZ19pbmRleF0udHlwZTsKKyAgICAgICAgICAgICAgICBpbnQgZmxhZ3MgPSBkcC0+ZmxhZ3M7CisgICAgICAgICAgICAgICAgaW50IGhhc193aWR0aDsKKyAgICAgICAgICAgICAgICBzaXplX3Qgd2lkdGg7CisgICAgICAgICAgICAgICAgaW50IGhhc19wcmVjaXNpb247CisgICAgICAgICAgICAgICAgc2l6ZV90IHByZWNpc2lvbjsKKworICAgICAgICAgICAgICAgIGhhc193aWR0aCA9IDA7CisgICAgICAgICAgICAgICAgd2lkdGggPSAwOworICAgICAgICAgICAgICAgIGlmIChkcC0+d2lkdGhfc3RhcnQgIT0gZHAtPndpZHRoX2VuZCkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRwLT53aWR0aF9hcmdfaW5kZXggIT0gQVJHX05PTkUpCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFyZzsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoYS5hcmdbZHAtPndpZHRoX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ICgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYS5hcmdbZHAtPndpZHRoX2FyZ19pbmRleF0uYS5hX2ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmcgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIkEgbmVnYXRpdmUgZmllbGQgd2lkdGggaXMgdGFrZW4gYXMgYSAnLScgZmxhZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dlZCBieSBhIHBvc2l0aXZlIGZpZWxkIHdpZHRoLiIgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gRkxBR19MRUZUOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gKHVuc2lnbmVkIGludCkgKC1hcmcpOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gYXJnOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZDSEFSX1QgKmRpZ2l0cCA9IGRwLT53aWR0aF9zdGFydDsKKworICAgICAgICAgICAgICAgICAgICAgICAgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSB4c3VtICh4dGltZXMgKHdpZHRoLCAxMCksICpkaWdpdHArKyAtICcwJyk7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZGlnaXRwICE9IGRwLT53aWR0aF9lbmQpOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaGFzX3dpZHRoID0gMTsKKyAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGhhc19wcmVjaXNpb24gPSAwOworICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IDA7CisgICAgICAgICAgICAgICAgaWYgKGRwLT5wcmVjaXNpb25fc3RhcnQgIT0gZHAtPnByZWNpc2lvbl9lbmQpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCAhPSBBUkdfTk9ORSkKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXJnOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShhLmFyZ1tkcC0+cHJlY2lzaW9uX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ICgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYS5hcmdbZHAtPnByZWNpc2lvbl9hcmdfaW5kZXhdLmEuYV9pbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiAiQSBuZWdhdGl2ZSBwcmVjaXNpb24gaXMgdGFrZW4gYXMgaWYgdGhlIHByZWNpc2lvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlcmUgb21pdHRlZC4iICAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZyA+PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gYXJnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc19wcmVjaXNpb24gPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRkNIQVJfVCAqZGlnaXRwID0gZHAtPnByZWNpc2lvbl9zdGFydCArIDE7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZGlnaXRwICE9IGRwLT5wcmVjaXNpb25fZW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSB4c3VtICh4dGltZXMgKHByZWNpc2lvbiwgMTApLCAqZGlnaXRwKysgLSAnMCcpOworICAgICAgICAgICAgICAgICAgICAgICAgaGFzX3ByZWNpc2lvbiA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFX1U4X1NUUklORzoKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV91OF9zdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYXJnX2VuZDsKKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY2hhcmFjdGVyczsKKworICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNfcHJlY2lzaW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2Ugb25seSBQUkVDSVNJT04gY2hhcmFjdGVycywgZnJvbSB0aGUgbGVmdC4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19lbmQgPSBhcmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcHJlY2lzaW9uID4gMDsgcHJlY2lzaW9uLS0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gdThfc3RybWJsZW4gKGFyZ19lbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlc3VsdCA9PSByZXN1bHRidWYgfHwgcmVzdWx0ID09IE5VTEwpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAocmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmX21hbGxvY2VkICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIChidWZfbWFsbG9jZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMRUFOVVAgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8gPSBFSUxTRVE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19lbmQgKz0gY291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhhc193aWR0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVXNlIHRoZSBlbnRpcmUgc3RyaW5nLCBhbmQgY291bnQgdGhlIG51bWJlciBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnX2VuZCA9IGFyZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVycyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gdThfc3RybWJsZW4gKGFyZ19lbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlc3VsdCA9PSByZXN1bHRidWYgfHwgcmVzdWx0ID09IE5VTEwpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAocmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmX21hbGxvY2VkICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIChidWZfbWFsbG9jZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMRUFOVVAgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8gPSBFSUxTRVE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19lbmQgKz0gY291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVXNlIHRoZSBlbnRpcmUgc3RyaW5nLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnX2VuZCA9IGFyZyArIHU4X3N0cmxlbiAoYXJnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGRvZXNuJ3QgbWF0dGVyLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVycyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzX3dpZHRoICYmIHdpZHRoID4gY2hhcmFjdGVycworICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhKGRwLT5mbGFncyAmIEZMQUdfTEVGVCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuID0gd2lkdGggLSBjaGFyYWN0ZXJzOworICAgICAgICAgICAgICAgICAgICAgICAgICBFTlNVUkVfQUxMT0NBVElPTiAoeHN1bSAobGVuZ3RoLCBuKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIERDSEFSX1NFVCAocmVzdWx0ICsgbGVuZ3RoLCAnICcsIG4pOworICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggKz0gbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworIyBpZiBEQ0hBUl9JU19VSU5UOF9UCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4gPSBhcmdfZW5kIC0gYXJnOworICAgICAgICAgICAgICAgICAgICAgICAgRU5TVVJFX0FMTE9DQVRJT04gKHhzdW0gKGxlbmd0aCwgbikpOworICAgICAgICAgICAgICAgICAgICAgICAgRENIQVJfQ1BZIChyZXN1bHQgKyBsZW5ndGgsIGFyZywgbik7CisgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggKz0gbjsKKyAgICAgICAgICAgICAgICAgICAgICB9CisjIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICB7IC8qIENvbnZlcnQuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgRENIQVJfVCAqY29udmVydGVkID0gcmVzdWx0ICsgbGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNvbnZlcnRlZF9sZW4gPSBhbGxvY2F0ZWQgLSBsZW5ndGg7CisjICBpZiBEQ0hBUl9JU19UQ0hBUgorICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udmVydCBmcm9tIFVURi04IHRvIGxvY2FsZSBlbmNvZGluZy4gICovCisgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICB1OF9jb252X3RvX2VuY29kaW5nIChsb2NhbGVfY2hhcnNldCAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbnZlaF9xdWVzdGlvbl9tYXJrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcsIGFyZ19lbmQgLSBhcmcsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZCwgJmNvbnZlcnRlZF9sZW4pOworIyAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udmVydCBmcm9tIFVURi04IHRvIFVURi0xNi9VVEYtMzIuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydGVkID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgVThfVE9fRENIQVIgKGFyZywgYXJnX2VuZCAtIGFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZCwgJmNvbnZlcnRlZF9sZW4pOworIyAgZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb252ZXJ0ZWQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlc3VsdCA9PSByZXN1bHRidWYgfHwgcmVzdWx0ID09IE5VTEwpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAocmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmX21hbGxvY2VkICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIChidWZfbWFsbG9jZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMRUFOVVAgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnZlcnRlZCAhPSByZXN1bHQgKyBsZW5ndGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTlNVUkVfQUxMT0NBVElPTiAoeHN1bSAobGVuZ3RoLCBjb252ZXJ0ZWRfbGVuKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRENIQVJfQ1BZIChyZXN1bHQgKyBsZW5ndGgsIGNvbnZlcnRlZCwgY29udmVydGVkX2xlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAoY29udmVydGVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoICs9IGNvbnZlcnRlZF9sZW47CisgICAgICAgICAgICAgICAgICAgICAgfQorIyBlbmRpZgorCisgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc193aWR0aCAmJiB3aWR0aCA+IGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGRwLT5mbGFncyAmIEZMQUdfTEVGVCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuID0gd2lkdGggLSBjaGFyYWN0ZXJzOworICAgICAgICAgICAgICAgICAgICAgICAgICBFTlNVUkVfQUxMT0NBVElPTiAoeHN1bSAobGVuZ3RoLCBuKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIERDSEFSX1NFVCAocmVzdWx0ICsgbGVuZ3RoLCAnICcsIG4pOworICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggKz0gbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFX1UxNl9TVFJJTkc6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MTZfdCAqYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3UxNl9zdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDE2X3QgKmFyZ19lbmQ7CisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNoYXJhY3RlcnM7CisKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzX3ByZWNpc2lvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVXNlIG9ubHkgUFJFQ0lTSU9OIGNoYXJhY3RlcnMsIGZyb20gdGhlIGxlZnQuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdfZW5kID0gYXJnOworICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHByZWNpc2lvbiA+IDA7IHByZWNpc2lvbi0tKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCA9IHUxNl9zdHJtYmxlbiAoYXJnX2VuZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVzdWx0ID09IHJlc3VsdGJ1ZiB8fCByZXN1bHQgPT0gTlVMTCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIChyZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZfbWFsbG9jZWQgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUgKGJ1Zl9tYWxsb2NlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0xFQU5VUCAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJubyA9IEVJTFNFUTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnX2VuZCArPSBjb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaGFzX3dpZHRoKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2UgdGhlIGVudGlyZSBzdHJpbmcsIGFuZCBjb3VudCB0aGUgbnVtYmVyIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdfZW5kID0gYXJnOworICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7OykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQgPSB1MTZfc3RybWJsZW4gKGFyZ19lbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlc3VsdCA9PSByZXN1bHRidWYgfHwgcmVzdWx0ID09IE5VTEwpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAocmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmX21hbGxvY2VkICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIChidWZfbWFsbG9jZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMRUFOVVAgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8gPSBFSUxTRVE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19lbmQgKz0gY291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVXNlIHRoZSBlbnRpcmUgc3RyaW5nLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnX2VuZCA9IGFyZyArIHUxNl9zdHJsZW4gKGFyZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBkb2Vzbid0IG1hdHRlci4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc193aWR0aCAmJiB3aWR0aCA+IGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIShkcC0+ZmxhZ3MgJiBGTEFHX0xFRlQpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbiA9IHdpZHRoIC0gY2hhcmFjdGVyczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRU5TVVJFX0FMTE9DQVRJT04gKHhzdW0gKGxlbmd0aCwgbikpOworICAgICAgICAgICAgICAgICAgICAgICAgICBEQ0hBUl9TRVQgKHJlc3VsdCArIGxlbmd0aCwgJyAnLCBuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoICs9IG47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyMgaWYgRENIQVJfSVNfVUlOVDE2X1QKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbiA9IGFyZ19lbmQgLSBhcmc7CisgICAgICAgICAgICAgICAgICAgICAgICBFTlNVUkVfQUxMT0NBVElPTiAoeHN1bSAobGVuZ3RoLCBuKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBEQ0hBUl9DUFkgKHJlc3VsdCArIGxlbmd0aCwgYXJnLCBuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCArPSBuOworICAgICAgICAgICAgICAgICAgICAgIH0KKyMgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIHsgLyogQ29udmVydC4gICovCisgICAgICAgICAgICAgICAgICAgICAgICBEQ0hBUl9UICpjb252ZXJ0ZWQgPSByZXN1bHQgKyBsZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY29udmVydGVkX2xlbiA9IGFsbG9jYXRlZCAtIGxlbmd0aDsKKyMgIGlmIERDSEFSX0lTX1RDSEFSCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb252ZXJ0IGZyb20gVVRGLTE2IHRvIGxvY2FsZSBlbmNvZGluZy4gICovCisgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICB1MTZfY29udl90b19lbmNvZGluZyAobG9jYWxlX2NoYXJzZXQgKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29udmVoX3F1ZXN0aW9uX21hcmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcsIGFyZ19lbmQgLSBhcmcsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQsICZjb252ZXJ0ZWRfbGVuKTsKKyMgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnZlcnQgZnJvbSBVVEYtMTYgdG8gVVRGLTgvVVRGLTMyLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgIFUxNl9UT19EQ0hBUiAoYXJnLCBhcmdfZW5kIC0gYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZCwgJmNvbnZlcnRlZF9sZW4pOworIyAgZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb252ZXJ0ZWQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlc3VsdCA9PSByZXN1bHRidWYgfHwgcmVzdWx0ID09IE5VTEwpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAocmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmX21hbGxvY2VkICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIChidWZfbWFsbG9jZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMRUFOVVAgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnZlcnRlZCAhPSByZXN1bHQgKyBsZW5ndGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTlNVUkVfQUxMT0NBVElPTiAoeHN1bSAobGVuZ3RoLCBjb252ZXJ0ZWRfbGVuKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRENIQVJfQ1BZIChyZXN1bHQgKyBsZW5ndGgsIGNvbnZlcnRlZCwgY29udmVydGVkX2xlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAoY29udmVydGVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoICs9IGNvbnZlcnRlZF9sZW47CisgICAgICAgICAgICAgICAgICAgICAgfQorIyBlbmRpZgorCisgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc193aWR0aCAmJiB3aWR0aCA+IGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGRwLT5mbGFncyAmIEZMQUdfTEVGVCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuID0gd2lkdGggLSBjaGFyYWN0ZXJzOworICAgICAgICAgICAgICAgICAgICAgICAgICBFTlNVUkVfQUxMT0NBVElPTiAoeHN1bSAobGVuZ3RoLCBuKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIERDSEFSX1NFVCAocmVzdWx0ICsgbGVuZ3RoLCAnICcsIG4pOworICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggKz0gbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFX1UzMl9TVFJJTkc6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCAqYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3UzMl9zdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QgKmFyZ19lbmQ7CisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNoYXJhY3RlcnM7CisKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzX3ByZWNpc2lvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVXNlIG9ubHkgUFJFQ0lTSU9OIGNoYXJhY3RlcnMsIGZyb20gdGhlIGxlZnQuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdfZW5kID0gYXJnOworICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHByZWNpc2lvbiA+IDA7IHByZWNpc2lvbi0tKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCA9IHUzMl9zdHJtYmxlbiAoYXJnX2VuZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVzdWx0ID09IHJlc3VsdGJ1ZiB8fCByZXN1bHQgPT0gTlVMTCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIChyZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZfbWFsbG9jZWQgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUgKGJ1Zl9tYWxsb2NlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0xFQU5VUCAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJubyA9IEVJTFNFUTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnX2VuZCArPSBjb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaGFzX3dpZHRoKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2UgdGhlIGVudGlyZSBzdHJpbmcsIGFuZCBjb3VudCB0aGUgbnVtYmVyIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdfZW5kID0gYXJnOworICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7OykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQgPSB1MzJfc3RybWJsZW4gKGFyZ19lbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlc3VsdCA9PSByZXN1bHRidWYgfHwgcmVzdWx0ID09IE5VTEwpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAocmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmX21hbGxvY2VkICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIChidWZfbWFsbG9jZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMRUFOVVAgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8gPSBFSUxTRVE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19lbmQgKz0gY291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVXNlIHRoZSBlbnRpcmUgc3RyaW5nLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnX2VuZCA9IGFyZyArIHUzMl9zdHJsZW4gKGFyZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBkb2Vzbid0IG1hdHRlci4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc193aWR0aCAmJiB3aWR0aCA+IGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIShkcC0+ZmxhZ3MgJiBGTEFHX0xFRlQpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbiA9IHdpZHRoIC0gY2hhcmFjdGVyczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRU5TVVJFX0FMTE9DQVRJT04gKHhzdW0gKGxlbmd0aCwgbikpOworICAgICAgICAgICAgICAgICAgICAgICAgICBEQ0hBUl9TRVQgKHJlc3VsdCArIGxlbmd0aCwgJyAnLCBuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoICs9IG47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyMgaWYgRENIQVJfSVNfVUlOVDMyX1QKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbiA9IGFyZ19lbmQgLSBhcmc7CisgICAgICAgICAgICAgICAgICAgICAgICBFTlNVUkVfQUxMT0NBVElPTiAoeHN1bSAobGVuZ3RoLCBuKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBEQ0hBUl9DUFkgKHJlc3VsdCArIGxlbmd0aCwgYXJnLCBuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCArPSBuOworICAgICAgICAgICAgICAgICAgICAgIH0KKyMgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIHsgLyogQ29udmVydC4gICovCisgICAgICAgICAgICAgICAgICAgICAgICBEQ0hBUl9UICpjb252ZXJ0ZWQgPSByZXN1bHQgKyBsZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY29udmVydGVkX2xlbiA9IGFsbG9jYXRlZCAtIGxlbmd0aDsKKyMgIGlmIERDSEFSX0lTX1RDSEFSCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb252ZXJ0IGZyb20gVVRGLTMyIHRvIGxvY2FsZSBlbmNvZGluZy4gICovCisgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICB1MzJfY29udl90b19lbmNvZGluZyAobG9jYWxlX2NoYXJzZXQgKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29udmVoX3F1ZXN0aW9uX21hcmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcsIGFyZ19lbmQgLSBhcmcsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQsICZjb252ZXJ0ZWRfbGVuKTsKKyMgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnZlcnQgZnJvbSBVVEYtMzIgdG8gVVRGLTgvVVRGLTE2LiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgIFUzMl9UT19EQ0hBUiAoYXJnLCBhcmdfZW5kIC0gYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZCwgJmNvbnZlcnRlZF9sZW4pOworIyAgZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb252ZXJ0ZWQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlc3VsdCA9PSByZXN1bHRidWYgfHwgcmVzdWx0ID09IE5VTEwpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAocmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmX21hbGxvY2VkICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIChidWZfbWFsbG9jZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMRUFOVVAgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnZlcnRlZCAhPSByZXN1bHQgKyBsZW5ndGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTlNVUkVfQUxMT0NBVElPTiAoeHN1bSAobGVuZ3RoLCBjb252ZXJ0ZWRfbGVuKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRENIQVJfQ1BZIChyZXN1bHQgKyBsZW5ndGgsIGNvbnZlcnRlZCwgY29udmVydGVkX2xlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAoY29udmVydGVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoICs9IGNvbnZlcnRlZF9sZW47CisgICAgICAgICAgICAgICAgICAgICAgfQorIyBlbmRpZgorCisgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc193aWR0aCAmJiB3aWR0aCA+IGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGRwLT5mbGFncyAmIEZMQUdfTEVGVCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuID0gd2lkdGggLSBjaGFyYWN0ZXJzOworICAgICAgICAgICAgICAgICAgICAgICAgICBFTlNVUkVfQUxMT0NBVElPTiAoeHN1bSAobGVuZ3RoLCBuKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIERDSEFSX1NFVCAocmVzdWx0ICsgbGVuZ3RoLCAnICcsIG4pOworICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggKz0gbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYWJvcnQgKCk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyNlbmRpZgorI2lmICghVVNFX1NOUFJJTlRGIHx8ICFIQVZFX1NOUFJJTlRGX1JFVFZBTF9DOTkgfHwgKE5FRURfUFJJTlRGX0RJUkVDVElWRV9MUyAmJiAhZGVmaW5lZCBJTl9MSUJJTlRMKSkgJiYgSEFWRV9XQ0hBUl9UCisgICAgICAgICAgICBlbHNlIGlmIChkcC0+Y29udmVyc2lvbiA9PSAncycKKyMgaWYgV0lERV9DSEFSX1ZFUlNJT04KKyAgICAgICAgICAgICAgICAgICAgICYmIGEuYXJnW2RwLT5hcmdfaW5kZXhdLnR5cGUgIT0gVFlQRV9XSURFX1NUUklORworIyBlbHNlCisgICAgICAgICAgICAgICAgICAgICAmJiBhLmFyZ1tkcC0+YXJnX2luZGV4XS50eXBlID09IFRZUEVfV0lERV9TVFJJTkcKKyMgZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogVGhlIG5vcm1hbCBoYW5kbGluZyBvZiB0aGUgJ3MnIGRpcmVjdGl2ZSBiZWxvdyByZXF1aXJlcworICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpbmcgYSB0ZW1wb3JhcnkgYnVmZmVyLiAgVGhlIGRldGVybWluYXRpb24gb2YgaXRzCisgICAgICAgICAgICAgICAgICAgbGVuZ3RoICh0bXBfbGVuZ3RoKSwgaW4gdGhlIGNhc2Ugd2hlbiBhIHByZWNpc2lvbiBpcworICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCwgYmVsb3cgcmVxdWlyZXMgYSBjb252ZXJzaW9uIGJldHdlZW4gYSBjaGFyW10KKyAgICAgICAgICAgICAgICAgICBzdHJpbmcgYW5kIGEgd2NoYXJfdFtdIHdpZGUgc3RyaW5nLiAgSXQgY291bGQgYmUgZG9uZSwgYnV0CisgICAgICAgICAgICAgICAgICAgd2UgaGF2ZSBubyBndWFyYW50ZWUgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gb2Ygc3ByaW50ZiB3aWxsCisgICAgICAgICAgICAgICAgICAgdXNlIHRoZSBleGFjdGx5IHNhbWUgYWxnb3JpdGhtLiAgV2l0aG91dCB0aGlzIGd1YXJhbnRlZSwgaXQKKyAgICAgICAgICAgICAgICAgICBpcyBwb3NzaWJsZSB0byBoYXZlIGJ1ZmZlciBvdmVycnVuIGJ1Z3MuICBJbiBvcmRlciB0byBhdm9pZAorICAgICAgICAgICAgICAgICAgIHN1Y2ggYnVncywgd2UgaW1wbGVtZW50IHRoZSBlbnRpcmUgcHJvY2Vzc2luZyBvZiB0aGUgJ3MnCisgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlIG91cnNlbHZlcy4gICovCisgICAgICAgICAgICAgICAgaW50IGZsYWdzID0gZHAtPmZsYWdzOworICAgICAgICAgICAgICAgIGludCBoYXNfd2lkdGg7CisgICAgICAgICAgICAgICAgc2l6ZV90IHdpZHRoOworICAgICAgICAgICAgICAgIGludCBoYXNfcHJlY2lzaW9uOworICAgICAgICAgICAgICAgIHNpemVfdCBwcmVjaXNpb247CisKKyAgICAgICAgICAgICAgICBoYXNfd2lkdGggPSAwOworICAgICAgICAgICAgICAgIHdpZHRoID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoZHAtPndpZHRoX3N0YXJ0ICE9IGRwLT53aWR0aF9lbmQpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChkcC0+d2lkdGhfYXJnX2luZGV4ICE9IEFSR19OT05FKQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcmc7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGEuYXJnW2RwLT53aWR0aF9hcmdfaW5kZXhdLnR5cGUgPT0gVFlQRV9JTlQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGEuYXJnW2RwLT53aWR0aF9hcmdfaW5kZXhdLmEuYV9pbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICJBIG5lZ2F0aXZlIGZpZWxkIHdpZHRoIGlzIHRha2VuIGFzIGEgJy0nIGZsYWcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93ZWQgYnkgYSBwb3NpdGl2ZSBmaWVsZCB3aWR0aC4iICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzIHw9IEZMQUdfTEVGVDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9ICh1bnNpZ25lZCBpbnQpICgtYXJnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IGFyZzsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGQ0hBUl9UICpkaWdpdHAgPSBkcC0+d2lkdGhfc3RhcnQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0geHN1bSAoeHRpbWVzICh3aWR0aCwgMTApLCAqZGlnaXRwKysgLSAnMCcpOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGRpZ2l0cCAhPSBkcC0+d2lkdGhfZW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGhhc193aWR0aCA9IDE7CisgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBoYXNfcHJlY2lzaW9uID0gMDsKKyAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSA2OworICAgICAgICAgICAgICAgIGlmIChkcC0+cHJlY2lzaW9uX3N0YXJ0ICE9IGRwLT5wcmVjaXNpb25fZW5kKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoZHAtPnByZWNpc2lvbl9hcmdfaW5kZXggIT0gQVJHX05PTkUpCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFyZzsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoYS5hcmdbZHAtPnByZWNpc2lvbl9hcmdfaW5kZXhdLnR5cGUgPT0gVFlQRV9JTlQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGEuYXJnW2RwLT5wcmVjaXNpb25fYXJnX2luZGV4XS5hLmFfaW50OworICAgICAgICAgICAgICAgICAgICAgICAgLyogIkEgbmVnYXRpdmUgcHJlY2lzaW9uIGlzIHRha2VuIGFzIGlmIHRoZSBwcmVjaXNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZXJlIG9taXR0ZWQuIiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmcgPj0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IGFyZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNfcHJlY2lzaW9uID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZDSEFSX1QgKmRpZ2l0cCA9IGRwLT5wcmVjaXNpb25fc3RhcnQgKyAxOworCisgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGRpZ2l0cCAhPSBkcC0+cHJlY2lzaW9uX2VuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0geHN1bSAoeHRpbWVzIChwcmVjaXNpb24sIDEwKSwgKmRpZ2l0cCsrIC0gJzAnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc19wcmVjaXNpb24gPSAxOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKworIyBpZiBXSURFX0NIQVJfVkVSU0lPTgorICAgICAgICAgICAgICAgIC8qICVzIGluIHZhc253cHJpbnRmLiAgU2VlIHRoZSBzcGVjaWZpY2F0aW9uIG9mIGZ3cHJpbnRmLiAgKi8KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfc3RyaW5nOworICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYXJnX2VuZDsKKyAgICAgICAgICAgICAgICAgIHNpemVfdCBjaGFyYWN0ZXJzOworCisgICAgICAgICAgICAgICAgICBpZiAoaGFzX3ByZWNpc2lvbikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIC8qIFVzZSBvbmx5IGFzIG1hbnkgYnl0ZXMgYXMgbmVlZGVkIHRvIHByb2R1Y2UgUFJFQ0lTSU9OCisgICAgICAgICAgICAgICAgICAgICAgICAgd2lkZSBjaGFyYWN0ZXJzLCBmcm9tIHRoZSBsZWZ0LiAgKi8KKyMgIGlmIEhBVkVfTUJSVE9XQworICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCBzdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKyMgIGVuZGlmCisgICAgICAgICAgICAgICAgICAgICAgYXJnX2VuZCA9IGFyZzsKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcHJlY2lzaW9uID4gMDsgcHJlY2lzaW9uLS0pCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudDsKKyMgIGlmIEhBVkVfTUJSVE9XQworICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IG1icmxlbiAoYXJnX2VuZCwgTUJfQ1VSX01BWCwgJnN0YXRlKTsKKyMgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSBtYmxlbiAoYXJnX2VuZCwgTUJfQ1VSX01BWCk7CisjICBlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3VuZCB0aGUgdGVybWluYXRpbmcgTlVMLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnZhbGlkIG9yIGluY29tcGxldGUgbXVsdGlieXRlIGNoYXJhY3Rlci4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZXN1bHQgPT0gcmVzdWx0YnVmIHx8IHJlc3VsdCA9PSBOVUxMKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAocmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZfbWFsbG9jZWQgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAoYnVmX21hbGxvY2VkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMRUFOVVAgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJubyA9IEVJTFNFUTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnX2VuZCArPSBjb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVycysrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBlbHNlIGlmIChoYXNfd2lkdGgpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAvKiBVc2UgdGhlIGVudGlyZSBzdHJpbmcsIGFuZCBjb3VudCB0aGUgbnVtYmVyIG9mIHdpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzLiAgKi8KKyMgIGlmIEhBVkVfTUJSVE9XQworICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCBzdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKyMgIGVuZGlmCisgICAgICAgICAgICAgICAgICAgICAgYXJnX2VuZCA9IGFyZzsKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQ7CisjICBpZiBIQVZFX01CUlRPV0MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSBtYnJsZW4gKGFyZ19lbmQsIE1CX0NVUl9NQVgsICZzdGF0ZSk7CisjICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gbWJsZW4gKGFyZ19lbmQsIE1CX0NVUl9NQVgpOworIyAgZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRm91bmQgdGhlIHRlcm1pbmF0aW5nIE5VTC4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW52YWxpZCBvciBpbmNvbXBsZXRlIG11bHRpYnl0ZSBjaGFyYWN0ZXIuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVzdWx0ID09IHJlc3VsdGJ1ZiB8fCByZXN1bHQgPT0gTlVMTCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUgKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmX21hbGxvY2VkICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUgKGJ1Zl9tYWxsb2NlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTEVBTlVQICgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8gPSBFSUxTRVE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19lbmQgKz0gY291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgLyogVXNlIHRoZSBlbnRpcmUgc3RyaW5nLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICBhcmdfZW5kID0gYXJnICsgc3RybGVuIChhcmcpOworICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBkb2Vzbid0IG1hdHRlci4gICovCisgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVycyA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgaWYgKGhhc193aWR0aCAmJiB3aWR0aCA+IGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICAgICAgICAmJiAhKGRwLT5mbGFncyAmIEZMQUdfTEVGVCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbiA9IHdpZHRoIC0gY2hhcmFjdGVyczsKKyAgICAgICAgICAgICAgICAgICAgICBFTlNVUkVfQUxMT0NBVElPTiAoeHN1bSAobGVuZ3RoLCBuKSk7CisgICAgICAgICAgICAgICAgICAgICAgRENIQVJfU0VUIChyZXN1bHQgKyBsZW5ndGgsICcgJywgbik7CisgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoICs9IG47CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgaWYgKGhhc19wcmVjaXNpb24gfHwgaGFzX3dpZHRoKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgLyogV2Uga25vdyB0aGUgbnVtYmVyIG9mIHdpZGUgY2hhcmFjdGVycyBpbiBhZHZhbmNlLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVtYWluaW5nOworIyAgaWYgSEFWRV9NQlJUT1dDCisgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90IHN0YXRlOworICAgICAgICAgICAgICAgICAgICAgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworIyAgZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICBFTlNVUkVfQUxMT0NBVElPTiAoeHN1bSAobGVuZ3RoLCBjaGFyYWN0ZXJzKSk7CisgICAgICAgICAgICAgICAgICAgICAgZm9yIChyZW1haW5pbmcgPSBjaGFyYWN0ZXJzOyByZW1haW5pbmcgPiAwOyByZW1haW5pbmctLSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCB3YzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50OworIyAgaWYgSEFWRV9NQlJUT1dDCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gbWJydG93YyAoJndjLCBhcmcsIGFyZ19lbmQgLSBhcmcsICZzdGF0ZSk7CisjICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gbWJ0b3djICgmd2MsIGFyZywgYXJnX2VuZCAtIGFyZyk7CisjICBlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPD0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtYnJ0b3djIG5vdCBjb25zaXN0ZW50IHdpdGggbWJybGVuLCBvciBtYnRvd2MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgY29uc2lzdGVudCB3aXRoIG1ibGVuLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2xlbmd0aCsrXSA9IHdjOworICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0gY291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXJnID09IGFyZ19lbmQpKQorICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQgKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworIyAgaWYgSEFWRV9NQlJUT1dDCisgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90IHN0YXRlOworICAgICAgICAgICAgICAgICAgICAgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworIyAgZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYXJnIDwgYXJnX2VuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCB3YzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50OworIyAgaWYgSEFWRV9NQlJUT1dDCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gbWJydG93YyAoJndjLCBhcmcsIGFyZ19lbmQgLSBhcmcsICZzdGF0ZSk7CisjICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gbWJ0b3djICgmd2MsIGFyZywgYXJnX2VuZCAtIGFyZyk7CisjICBlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPD0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtYnJ0b3djIG5vdCBjb25zaXN0ZW50IHdpdGggbWJybGVuLCBvciBtYnRvd2MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgY29uc2lzdGVudCB3aXRoIG1ibGVuLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRU5TVVJFX0FMTE9DQVRJT04gKHhzdW0gKGxlbmd0aCwgMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbbGVuZ3RoKytdID0gd2M7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZyArPSBjb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICBpZiAoaGFzX3dpZHRoICYmIHdpZHRoID4gY2hhcmFjdGVycworICAgICAgICAgICAgICAgICAgICAgICYmIChkcC0+ZmxhZ3MgJiBGTEFHX0xFRlQpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4gPSB3aWR0aCAtIGNoYXJhY3RlcnM7CisgICAgICAgICAgICAgICAgICAgICAgRU5TVVJFX0FMTE9DQVRJT04gKHhzdW0gKGxlbmd0aCwgbikpOworICAgICAgICAgICAgICAgICAgICAgIERDSEFSX1NFVCAocmVzdWx0ICsgbGVuZ3RoLCAnICcsIG4pOworICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCArPSBuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorIyBlbHNlCisgICAgICAgICAgICAgICAgLyogJWxzIGluIHZhc25wcmludGYuICBTZWUgdGhlIHNwZWNpZmljYXRpb24gb2YgZnByaW50Zi4gICovCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3dpZGVfc3RyaW5nOworICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqYXJnX2VuZDsKKyAgICAgICAgICAgICAgICAgIHNpemVfdCBjaGFyYWN0ZXJzOworIyAgaWYgIURDSEFSX0lTX1RDSEFSCisgICAgICAgICAgICAgICAgICAvKiBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0IFRDSEFSX1QgaXMgJ2NoYXInLiAgKi8KKyAgICAgICAgICAgICAgICAgIHZlcmlmeSAoc2l6ZW9mIChUQ0hBUl9UKSA9PSAxKTsKKyAgICAgICAgICAgICAgICAgIFRDSEFSX1QgKnRtcHNyYzsKKyAgICAgICAgICAgICAgICAgIERDSEFSX1QgKnRtcGRzdDsKKyAgICAgICAgICAgICAgICAgIHNpemVfdCB0bXBkc3RfbGVuOworIyAgZW5kaWYKKyAgICAgICAgICAgICAgICAgIHNpemVfdCB3OworCisgICAgICAgICAgICAgICAgICBpZiAoaGFzX3ByZWNpc2lvbikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIC8qIFVzZSBvbmx5IGFzIG1hbnkgd2lkZSBjaGFyYWN0ZXJzIGFzIG5lZWRlZCB0byBwcm9kdWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgYXQgbW9zdCBQUkVDSVNJT04gYnl0ZXMsIGZyb20gdGhlIGxlZnQuICAqLworIyAgaWYgSEFWRV9XQ1JUT01CICYmICFkZWZpbmVkIEdOVUxJQl9kZWZpbmVkX21ic3RhdGVfdAorICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCBzdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKyMgIGVuZGlmCisgICAgICAgICAgICAgICAgICAgICAgYXJnX2VuZCA9IGFyZzsKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocHJlY2lzaW9uID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjYnVmWzY0XTsgLyogQXNzdW1lIE1CX0NVUl9NQVggPD0gNjQuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCphcmdfZW5kID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRm91bmQgdGhlIHRlcm1pbmF0aW5nIG51bGwgd2lkZSBjaGFyYWN0ZXIuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworIyAgaWYgSEFWRV9XQ1JUT01CICYmICFkZWZpbmVkIEdOVUxJQl9kZWZpbmVkX21ic3RhdGVfdAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IHdjcnRvbWIgKGNidWYsICphcmdfZW5kLCAmc3RhdGUpOworIyAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IHdjdG9tYiAoY2J1ZiwgKmFyZ19lbmQpOworIyAgZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDYW5ub3QgY29udmVydC4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZXN1bHQgPT0gcmVzdWx0YnVmIHx8IHJlc3VsdCA9PSBOVUxMKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAocmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZfbWFsbG9jZWQgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAoYnVmX21hbGxvY2VkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMRUFOVVAgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJubyA9IEVJTFNFUTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZWNpc2lvbiA8IGNvdW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdfZW5kKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMgKz0gY291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiAtPSBjb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorIyAgaWYgRENIQVJfSVNfVENIQVIKKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhhc193aWR0aCkKKyMgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyMgIGVuZGlmCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAvKiBVc2UgdGhlIGVudGlyZSBzdHJpbmcsIGFuZCBjb3VudCB0aGUgbnVtYmVyIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXMuICAqLworIyAgaWYgSEFWRV9XQ1JUT01CICYmICFkZWZpbmVkIEdOVUxJQl9kZWZpbmVkX21ic3RhdGVfdAorICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCBzdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKyMgIGVuZGlmCisgICAgICAgICAgICAgICAgICAgICAgYXJnX2VuZCA9IGFyZzsKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNidWZbNjRdOyAvKiBBc3N1bWUgTUJfQ1VSX01BWCA8PSA2NC4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKmFyZ19lbmQgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3VuZCB0aGUgdGVybWluYXRpbmcgbnVsbCB3aWRlIGNoYXJhY3Rlci4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisjICBpZiBIQVZFX1dDUlRPTUIgJiYgIWRlZmluZWQgR05VTElCX2RlZmluZWRfbWJzdGF0ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gd2NydG9tYiAoY2J1ZiwgKmFyZ19lbmQsICZzdGF0ZSk7CisjICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gd2N0b21iIChjYnVmLCAqYXJnX2VuZCk7CisjICBlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENhbm5vdCBjb252ZXJ0LiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlc3VsdCA9PSByZXN1bHRidWYgfHwgcmVzdWx0ID09IE5VTEwpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIChyZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1Zl9tYWxsb2NlZCAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIChidWZfbWFsbG9jZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0xFQU5VUCAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vID0gRUlMU0VROworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdfZW5kKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMgKz0gY291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyMgIGlmIERDSEFSX0lTX1RDSEFSCisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAvKiBVc2UgdGhlIGVudGlyZSBzdHJpbmcuICAqLworICAgICAgICAgICAgICAgICAgICAgIGFyZ19lbmQgPSBhcmcgKyBsb2NhbF93Y3NsZW4gKGFyZyk7CisgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIG51bWJlciBvZiBieXRlcyBkb2Vzbid0IG1hdHRlci4gICovCisgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVycyA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyMgIGVuZGlmCisKKyMgIGlmICFEQ0hBUl9JU19UQ0hBUgorICAgICAgICAgICAgICAgICAgLyogQ29udmVydCB0aGUgc3RyaW5nIGludG8gYSBwaWVjZSBvZiB0ZW1wb3JhcnkgbWVtb3J5LiAgKi8KKyAgICAgICAgICAgICAgICAgIHRtcHNyYyA9IChUQ0hBUl9UICopIG1hbGxvYyAoY2hhcmFjdGVycyAqIHNpemVvZiAoVENIQVJfVCkpOworICAgICAgICAgICAgICAgICAgaWYgKHRtcHNyYyA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBnb3RvIG91dF9vZl9tZW1vcnk7CisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRDSEFSX1QgKnRtcHB0ciA9IHRtcHNyYzsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlbWFpbmluZzsKKyMgICBpZiBIQVZFX1dDUlRPTUIgJiYgIWRlZmluZWQgR05VTElCX2RlZmluZWRfbWJzdGF0ZV90CisgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCBzdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisjICAgZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgZm9yIChyZW1haW5pbmcgPSBjaGFyYWN0ZXJzOyByZW1haW5pbmcgPiAwOyApCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjYnVmWzY0XTsgLyogQXNzdW1lIE1CX0NVUl9NQVggPD0gNjQuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50OworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKmFyZyA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCAoKTsKKyMgICBpZiBIQVZFX1dDUlRPTUIgJiYgIWRlZmluZWQgR05VTElCX2RlZmluZWRfbWJzdGF0ZV90CisgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IHdjcnRvbWIgKGNidWYsICphcmcsICZzdGF0ZSk7CisjICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSB3Y3RvbWIgKGNidWYsICphcmcpOworIyAgIGVuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPD0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5jb25zaXN0ZW5jeS4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ICgpOworICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5ICh0bXBwdHIsIGNidWYsIGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcHB0ciArPSBjb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZysrOworICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nIC09IGNvdW50OworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXJnID09IGFyZ19lbmQpKQorICAgICAgICAgICAgICAgICAgICAgIGFib3J0ICgpOworICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAvKiBDb252ZXJ0IGZyb20gVENIQVJfVFtdIHRvIERDSEFSX1RbXS4gICovCisgICAgICAgICAgICAgICAgICB0bXBkc3QgPQorICAgICAgICAgICAgICAgICAgICBEQ0hBUl9DT05WX0ZST01fRU5DT0RJTkcgKGxvY2FsZV9jaGFyc2V0ICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb252ZWhfcXVlc3Rpb25fbWFyaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBzcmMsIGNoYXJhY3RlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAmdG1wZHN0X2xlbik7CisgICAgICAgICAgICAgICAgICBpZiAodG1wZHN0ID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgICAgICAgICAgICAgICAgICBmcmVlICh0bXBzcmMpOworICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlc3VsdCA9PSByZXN1bHRidWYgfHwgcmVzdWx0ID09IE5VTEwpKQorICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAocmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmX21hbGxvY2VkICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIChidWZfbWFsbG9jZWQpOworICAgICAgICAgICAgICAgICAgICAgIENMRUFOVVAgKCk7CisgICAgICAgICAgICAgICAgICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZnJlZSAodG1wc3JjKTsKKyMgIGVuZGlmCisKKyAgICAgICAgICAgICAgICAgIGlmIChoYXNfd2lkdGgpCisgICAgICAgICAgICAgICAgICAgIHsKKyMgIGlmIEVOQUJMRV9VTklTVERJTworICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHNpZGUgUE9TSVgsIGl0J3MgcHJlZmVyYWJsZSB0byBjb21wYXJlIHRoZSB3aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgIGFnYWluc3QgdGhlIG51bWJlciBvZiBfY2hhcmFjdGVyc18gb2YgdGhlIGNvbnZlcnRlZAorICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICB3ID0gRENIQVJfTUJTTkxFTiAocmVzdWx0ICsgbGVuZ3RoLCBjaGFyYWN0ZXJzKTsKKyMgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgd2lkdGggaXMgY29tcGFyZWQgYWdhaW5zdCB0aGUgbnVtYmVyIG9mIF9ieXRlc18KKyAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgY29udmVydGVkIHZhbHVlLCBzYXlzIFBPU0lYLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICB3ID0gY2hhcmFjdGVyczsKKyMgIGVuZGlmCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgLyogdyBkb2Vzbid0IG1hdHRlci4gICovCisgICAgICAgICAgICAgICAgICAgIHcgPSAwOworCisgICAgICAgICAgICAgICAgICBpZiAoaGFzX3dpZHRoICYmIHdpZHRoID4gdworICAgICAgICAgICAgICAgICAgICAgICYmICEoZHAtPmZsYWdzICYgRkxBR19MRUZUKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuID0gd2lkdGggLSB3OworICAgICAgICAgICAgICAgICAgICAgIEVOU1VSRV9BTExPQ0FUSU9OICh4c3VtIChsZW5ndGgsIG4pKTsKKyAgICAgICAgICAgICAgICAgICAgICBEQ0hBUl9TRVQgKHJlc3VsdCArIGxlbmd0aCwgJyAnLCBuKTsKKyAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggKz0gbjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisjICBpZiBEQ0hBUl9JU19UQ0hBUgorICAgICAgICAgICAgICAgICAgaWYgKGhhc19wcmVjaXNpb24gfHwgaGFzX3dpZHRoKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgLyogV2Uga25vdyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIGFkdmFuY2UuICAqLworICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZW1haW5pbmc7CisjICAgaWYgSEFWRV9XQ1JUT01CICYmICFkZWZpbmVkIEdOVUxJQl9kZWZpbmVkX21ic3RhdGVfdAorICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCBzdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKyMgICBlbmRpZgorICAgICAgICAgICAgICAgICAgICAgIEVOU1VSRV9BTExPQ0FUSU9OICh4c3VtIChsZW5ndGgsIGNoYXJhY3RlcnMpKTsKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgKHJlbWFpbmluZyA9IGNoYXJhY3RlcnM7IHJlbWFpbmluZyA+IDA7ICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjYnVmWzY0XTsgLyogQXNzdW1lIE1CX0NVUl9NQVggPD0gNjQuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCphcmcgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCAoKTsKKyMgICBpZiBIQVZFX1dDUlRPTUIgJiYgIWRlZmluZWQgR05VTElCX2RlZmluZWRfbWJzdGF0ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gd2NydG9tYiAoY2J1ZiwgKmFyZywgJnN0YXRlKTsKKyMgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gd2N0b21iIChjYnVmLCAqYXJnKTsKKyMgICBlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPD0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbmNvbnNpc3RlbmN5LiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5IChyZXN1bHQgKyBsZW5ndGgsIGNidWYsIGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoICs9IGNvdW50OworICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nIC09IGNvdW50OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGlmICghKGFyZyA9PSBhcmdfZW5kKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ICgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyMgICBpZiBIQVZFX1dDUlRPTUIgJiYgIWRlZmluZWQgR05VTElCX2RlZmluZWRfbWJzdGF0ZV90CisgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90IHN0YXRlOworICAgICAgICAgICAgICAgICAgICAgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworIyAgIGVuZGlmCisgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGFyZyA8IGFyZ19lbmQpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY2J1Zls2NF07IC8qIEFzc3VtZSBNQl9DVVJfTUFYIDw9IDY0LiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50OworCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqYXJnID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQgKCk7CisjICAgaWYgSEFWRV9XQ1JUT01CICYmICFkZWZpbmVkIEdOVUxJQl9kZWZpbmVkX21ic3RhdGVfdAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IHdjcnRvbWIgKGNidWYsICphcmcsICZzdGF0ZSk7CisjICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IHdjdG9tYiAoY2J1ZiwgKmFyZyk7CisjICAgZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50IDw9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2Fubm90IGNvbnZlcnQuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVzdWx0ID09IHJlc3VsdGJ1ZiB8fCByZXN1bHQgPT0gTlVMTCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUgKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmX21hbGxvY2VkICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUgKGJ1Zl9tYWxsb2NlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTEVBTlVQICgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8gPSBFSUxTRVE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIEVOU1VSRV9BTExPQ0FUSU9OICh4c3VtIChsZW5ndGgsIGNvdW50KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSAocmVzdWx0ICsgbGVuZ3RoLCBjYnVmLCBjb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCArPSBjb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnKys7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyMgIGVsc2UKKyAgICAgICAgICAgICAgICAgIEVOU1VSRV9BTExPQ0FUSU9OICh4c3VtIChsZW5ndGgsIHRtcGRzdF9sZW4pKTsKKyAgICAgICAgICAgICAgICAgIERDSEFSX0NQWSAocmVzdWx0ICsgbGVuZ3RoLCB0bXBkc3QsIHRtcGRzdF9sZW4pOworICAgICAgICAgICAgICAgICAgZnJlZSAodG1wZHN0KTsKKyAgICAgICAgICAgICAgICAgIGxlbmd0aCArPSB0bXBkc3RfbGVuOworIyAgZW5kaWYKKworICAgICAgICAgICAgICAgICAgaWYgKGhhc193aWR0aCAmJiB3aWR0aCA+IHcKKyAgICAgICAgICAgICAgICAgICAgICAmJiAoZHAtPmZsYWdzICYgRkxBR19MRUZUKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuID0gd2lkdGggLSB3OworICAgICAgICAgICAgICAgICAgICAgIEVOU1VSRV9BTExPQ0FUSU9OICh4c3VtIChsZW5ndGgsIG4pKTsKKyAgICAgICAgICAgICAgICAgICAgICBEQ0hBUl9TRVQgKHJlc3VsdCArIGxlbmd0aCwgJyAnLCBuKTsKKyAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggKz0gbjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyMgZW5kaWYKKyAgICAgICAgICAgICAgfQorI2VuZGlmCisjaWYgKE5FRURfUFJJTlRGX0RJUkVDVElWRV9BIHx8IE5FRURfUFJJTlRGX0xPTkdfRE9VQkxFIHx8IE5FRURfUFJJTlRGX0RPVUJMRSkgJiYgIWRlZmluZWQgSU5fTElCSU5UTAorICAgICAgICAgICAgZWxzZSBpZiAoKGRwLT5jb252ZXJzaW9uID09ICdhJyB8fCBkcC0+Y29udmVyc2lvbiA9PSAnQScpCisjIGlmICEoTkVFRF9QUklOVEZfRElSRUNUSVZFX0EgfHwgKE5FRURfUFJJTlRGX0xPTkdfRE9VQkxFICYmIE5FRURfUFJJTlRGX0RPVUJMRSkpCisgICAgICAgICAgICAgICAgICAgICAmJiAoMAorIyAgaWYgTkVFRF9QUklOVEZfRE9VQkxFCisgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYS5hcmdbZHAtPmFyZ19pbmRleF0udHlwZSA9PSBUWVBFX0RPVUJMRQorIyAgZW5kaWYKKyMgIGlmIE5FRURfUFJJTlRGX0xPTkdfRE9VQkxFCisgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYS5hcmdbZHAtPmFyZ19pbmRleF0udHlwZSA9PSBUWVBFX0xPTkdET1VCTEUKKyMgIGVuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICApCisjIGVuZGlmCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFyZ190eXBlIHR5cGUgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS50eXBlOworICAgICAgICAgICAgICAgIGludCBmbGFncyA9IGRwLT5mbGFnczsKKyAgICAgICAgICAgICAgICBpbnQgaGFzX3dpZHRoOworICAgICAgICAgICAgICAgIHNpemVfdCB3aWR0aDsKKyAgICAgICAgICAgICAgICBpbnQgaGFzX3ByZWNpc2lvbjsKKyAgICAgICAgICAgICAgICBzaXplX3QgcHJlY2lzaW9uOworICAgICAgICAgICAgICAgIHNpemVfdCB0bXBfbGVuZ3RoOworICAgICAgICAgICAgICAgIERDSEFSX1QgdG1wYnVmWzcwMF07CisgICAgICAgICAgICAgICAgRENIQVJfVCAqdG1wOworICAgICAgICAgICAgICAgIERDSEFSX1QgKnBhZF9wdHI7CisgICAgICAgICAgICAgICAgRENIQVJfVCAqcDsKKworICAgICAgICAgICAgICAgIGhhc193aWR0aCA9IDA7CisgICAgICAgICAgICAgICAgd2lkdGggPSAwOworICAgICAgICAgICAgICAgIGlmIChkcC0+d2lkdGhfc3RhcnQgIT0gZHAtPndpZHRoX2VuZCkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRwLT53aWR0aF9hcmdfaW5kZXggIT0gQVJHX05PTkUpCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFyZzsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoYS5hcmdbZHAtPndpZHRoX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ICgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYS5hcmdbZHAtPndpZHRoX2FyZ19pbmRleF0uYS5hX2ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmcgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIkEgbmVnYXRpdmUgZmllbGQgd2lkdGggaXMgdGFrZW4gYXMgYSAnLScgZmxhZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dlZCBieSBhIHBvc2l0aXZlIGZpZWxkIHdpZHRoLiIgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gRkxBR19MRUZUOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gKHVuc2lnbmVkIGludCkgKC1hcmcpOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gYXJnOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZDSEFSX1QgKmRpZ2l0cCA9IGRwLT53aWR0aF9zdGFydDsKKworICAgICAgICAgICAgICAgICAgICAgICAgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSB4c3VtICh4dGltZXMgKHdpZHRoLCAxMCksICpkaWdpdHArKyAtICcwJyk7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZGlnaXRwICE9IGRwLT53aWR0aF9lbmQpOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaGFzX3dpZHRoID0gMTsKKyAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGhhc19wcmVjaXNpb24gPSAwOworICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IDA7CisgICAgICAgICAgICAgICAgaWYgKGRwLT5wcmVjaXNpb25fc3RhcnQgIT0gZHAtPnByZWNpc2lvbl9lbmQpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCAhPSBBUkdfTk9ORSkKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXJnOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShhLmFyZ1tkcC0+cHJlY2lzaW9uX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ICgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYS5hcmdbZHAtPnByZWNpc2lvbl9hcmdfaW5kZXhdLmEuYV9pbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiAiQSBuZWdhdGl2ZSBwcmVjaXNpb24gaXMgdGFrZW4gYXMgaWYgdGhlIHByZWNpc2lvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlcmUgb21pdHRlZC4iICAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZyA+PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gYXJnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc19wcmVjaXNpb24gPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRkNIQVJfVCAqZGlnaXRwID0gZHAtPnByZWNpc2lvbl9zdGFydCArIDE7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZGlnaXRwICE9IGRwLT5wcmVjaXNpb25fZW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSB4c3VtICh4dGltZXMgKHByZWNpc2lvbiwgMTApLCAqZGlnaXRwKysgLSAnMCcpOworICAgICAgICAgICAgICAgICAgICAgICAgaGFzX3ByZWNpc2lvbiA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogQWxsb2NhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyIG9mIHN1ZmZpY2llbnQgc2l6ZS4gICovCisgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gVFlQRV9MT05HRE9VQkxFKQorICAgICAgICAgICAgICAgICAgdG1wX2xlbmd0aCA9CisgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpICgoTERCTF9ESUcgKyAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAwLjgzMSAvKiBkZWNpbWFsIC0+IGhleGFkZWNpbWFsICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgKyAxOyAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHRtcF9sZW5ndGggPQorICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KSAoKERCTF9ESUcgKyAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAwLjgzMSAvKiBkZWNpbWFsIC0+IGhleGFkZWNpbWFsICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgKyAxOyAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworICAgICAgICAgICAgICAgIGlmICh0bXBfbGVuZ3RoIDwgcHJlY2lzaW9uKQorICAgICAgICAgICAgICAgICAgdG1wX2xlbmd0aCA9IHByZWNpc2lvbjsKKyAgICAgICAgICAgICAgICAvKiBBY2NvdW50IGZvciBzaWduLCBkZWNpbWFsIHBvaW50IGV0Yy4gKi8KKyAgICAgICAgICAgICAgICB0bXBfbGVuZ3RoID0geHN1bSAodG1wX2xlbmd0aCwgMTIpOworCisgICAgICAgICAgICAgICAgaWYgKHRtcF9sZW5ndGggPCB3aWR0aCkKKyAgICAgICAgICAgICAgICAgIHRtcF9sZW5ndGggPSB3aWR0aDsKKworICAgICAgICAgICAgICAgIHRtcF9sZW5ndGggPSB4c3VtICh0bXBfbGVuZ3RoLCAxKTsgLyogYWNjb3VudCBmb3IgdHJhaWxpbmcgTlVMICovCisKKyAgICAgICAgICAgICAgICBpZiAodG1wX2xlbmd0aCA8PSBzaXplb2YgKHRtcGJ1ZikgLyBzaXplb2YgKERDSEFSX1QpKQorICAgICAgICAgICAgICAgICAgdG1wID0gdG1wYnVmOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRtcF9tZW1zaXplID0geHRpbWVzICh0bXBfbGVuZ3RoLCBzaXplb2YgKERDSEFSX1QpKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoc2l6ZV9vdmVyZmxvd19wICh0bXBfbWVtc2l6ZSkpCisgICAgICAgICAgICAgICAgICAgICAgLyogT3ZlcmZsb3csIHdvdWxkIGxlYWQgdG8gb3V0IG9mIG1lbW9yeS4gICovCisgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXRfb2ZfbWVtb3J5OworICAgICAgICAgICAgICAgICAgICB0bXAgPSAoRENIQVJfVCAqKSBtYWxsb2MgKHRtcF9tZW1zaXplKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgIC8qIE91dCBvZiBtZW1vcnkuICAqLworICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0X29mX21lbW9yeTsKKyAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHBhZF9wdHIgPSBOVUxMOworICAgICAgICAgICAgICAgIHAgPSB0bXA7CisgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gVFlQRV9MT05HRE9VQkxFKQorICAgICAgICAgICAgICAgICAgeworIyBpZiBORUVEX1BSSU5URl9ESVJFQ1RJVkVfQSB8fCBORUVEX1BSSU5URl9MT05HX0RPVUJMRQorICAgICAgICAgICAgICAgICAgICBsb25nIGRvdWJsZSBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfbG9uZ2RvdWJsZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoaXNuYW5sIChhcmcpKQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkcC0+Y29udmVyc2lvbiA9PSAnQScpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gJ04nOyAqcCsrID0gJ0EnOyAqcCsrID0gJ04nOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gJ24nOyAqcCsrID0gJ2EnOyAqcCsrID0gJ24nOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpZ24gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgREVDTF9MT05HX0RPVUJMRV9ST1VORElORworCisgICAgICAgICAgICAgICAgICAgICAgICBCRUdJTl9MT05HX0RPVUJMRV9ST1VORElORyAoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25iaXQgKGFyZykpIC8qIGFyZyA8IDAuMEwgb3IgbmVnYXRpdmUgemVybyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbiA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IC1hcmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ24gPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gJy0nOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmxhZ3MgJiBGTEFHX1NIT1dTSUdOKQorICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gJysnOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmxhZ3MgJiBGTEFHX1NQQUNFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gJyAnOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnID4gMC4wTCAmJiBhcmcgKyBhcmcgPT0gYXJnKQorICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRwLT5jb252ZXJzaW9uID09ICdBJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICdJJzsgKnArKyA9ICdOJzsgKnArKyA9ICdGJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnaSc7ICpwKysgPSAnbic7ICpwKysgPSAnZic7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBvbmVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRvdWJsZSBtYW50aXNzYTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmcgPiAwLjBMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFudGlzc2EgPSBwcmludGZfZnJleHBsIChhcmcsICZleHBvbmVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbnRpc3NhID0gMC4wTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNfcHJlY2lzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHByZWNpc2lvbiA8ICh1bnNpZ25lZCBpbnQpICgoTERCTF9ESUcgKyAxKSAqIDAuODMxKSArIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJvdW5kIHRoZSBtYW50aXNzYS4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZG91YmxlIHRhaWwgPSBtYW50aXNzYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHE7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChxID0gcHJlY2lzaW9uOyA7IHEtLSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGlnaXQgPSAoaW50KSB0YWlsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFpbCAtPSBkaWdpdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlnaXQgJiAxID8gdGFpbCA+PSAwLjVMIDogdGFpbCA+IDAuNUwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWlsID0gMSAtIHRhaWw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFpbCA9IC0gdGFpbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFpbCAqPSAxNi4wTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWlsICE9IDAuMEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChxID0gcHJlY2lzaW9uOyBxID4gMDsgcS0tKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFpbCAqPSAwLjA2MjVMOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW50aXNzYSArPSB0YWlsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICcwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gZHAtPmNvbnZlcnNpb24gLSAnQScgKyAnWCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkX3B0ciA9IHA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRpZ2l0OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdCA9IChpbnQpIG1hbnRpc3NhOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFudGlzc2EgLT0gZGlnaXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gJzAnICsgZGlnaXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGZsYWdzICYgRkxBR19BTFQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbWFudGlzc2EgPiAwLjBMIHx8IHByZWNpc2lvbiA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gZGVjaW1hbF9wb2ludF9jaGFyICgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgbG9vcCB0ZXJtaW5hdGVzIGJlY2F1c2Ugd2UgYXNzdW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBGTFRfUkFESVggaXMgYSBwb3dlciBvZiAyLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobWFudGlzc2EgPiAwLjBMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW50aXNzYSAqPSAxNi4wTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXQgPSAoaW50KSBtYW50aXNzYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFudGlzc2EgLT0gZGlnaXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSBkaWdpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoZGlnaXQgPCAxMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnMCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZHAtPmNvbnZlcnNpb24gLSAxMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmVjaXNpb24gPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbi0tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwcmVjaXNpb24gPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gJzAnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24tLTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9IGRwLT5jb252ZXJzaW9uIC0gJ0EnICsgJ1AnOworIyAgaWYgV0lERV9DSEFSX1ZFUlNJT04KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IHdjaGFyX3QgZGVjaW1hbF9mb3JtYXRbXSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAnJScsICcrJywgJ2QnLCAnXDAnIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOUFJJTlRGIChwLCA2ICsgMSwgZGVjaW1hbF9mb3JtYXQsIGV4cG9uZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgqcCAhPSAnXDAnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwKys7CisjICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2l6ZW9mIChEQ0hBUl9UKSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZiAoKGNoYXIgKikgcCwgIiUrZCIsIGV4cG9uZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnAgIT0gJ1wwJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBleHBidWZbNiArIDFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYgKGV4cGJ1ZiwgIiUrZCIsIGV4cG9uZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGVwID0gZXhwYnVmOyAoKnAgPSAqZXApICE9ICdcMCc7IGVwKyspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyMgIGVuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgRU5EX0xPTkdfRE9VQkxFX1JPVU5ESU5HICgpOworICAgICAgICAgICAgICAgICAgICAgIH0KKyMgZWxzZQorICAgICAgICAgICAgICAgICAgICBhYm9ydCAoKTsKKyMgZW5kaWYKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICB7CisjIGlmIE5FRURfUFJJTlRGX0RJUkVDVElWRV9BIHx8IE5FRURfUFJJTlRGX0RPVUJMRQorICAgICAgICAgICAgICAgICAgICBkb3VibGUgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2RvdWJsZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoaXNuYW5kIChhcmcpKQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkcC0+Y29udmVyc2lvbiA9PSAnQScpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gJ04nOyAqcCsrID0gJ0EnOyAqcCsrID0gJ04nOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gJ24nOyAqcCsrID0gJ2EnOyAqcCsrID0gJ24nOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpZ24gPSAwOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmJpdCAoYXJnKSkgLyogYXJnIDwgMC4wIG9yIG5lZ2F0aXZlIHplcm8gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24gPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAtYXJnOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaWduIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICctJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgRkxBR19TSE9XU0lHTikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICcrJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgRkxBR19TUEFDRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICcgJzsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZyA+IDAuMCAmJiBhcmcgKyBhcmcgPT0gYXJnKQorICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRwLT5jb252ZXJzaW9uID09ICdBJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICdJJzsgKnArKyA9ICdOJzsgKnArKyA9ICdGJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnaSc7ICpwKysgPSAnbic7ICpwKysgPSAnZic7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBvbmVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgbWFudGlzc2E7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnID4gMC4wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFudGlzc2EgPSBwcmludGZfZnJleHAgKGFyZywgJmV4cG9uZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFudGlzc2EgPSAwLjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzX3ByZWNpc2lvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmVjaXNpb24gPCAodW5zaWduZWQgaW50KSAoKERCTF9ESUcgKyAxKSAqIDAuODMxKSArIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJvdW5kIHRoZSBtYW50aXNzYS4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB0YWlsID0gbWFudGlzc2E7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBxOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocSA9IHByZWNpc2lvbjsgOyBxLS0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRpZ2l0ID0gKGludCkgdGFpbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhaWwgLT0gZGlnaXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpZ2l0ICYgMSA/IHRhaWwgPj0gMC41IDogdGFpbCA+IDAuNSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhaWwgPSAxIC0gdGFpbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWlsID0gLSB0YWlsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWlsICo9IDE2LjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFpbCAhPSAwLjApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChxID0gcHJlY2lzaW9uOyBxID4gMDsgcS0tKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFpbCAqPSAwLjA2MjU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbnRpc3NhICs9IHRhaWw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gJzAnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSBkcC0+Y29udmVyc2lvbiAtICdBJyArICdYJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRfcHRyID0gcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGlnaXQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0ID0gKGludCkgbWFudGlzc2E7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW50aXNzYSAtPSBkaWdpdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnMCcgKyBkaWdpdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBGTEFHX0FMVCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtYW50aXNzYSA+IDAuMCB8fCBwcmVjaXNpb24gPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9IGRlY2ltYWxfcG9pbnRfY2hhciAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGxvb3AgdGVybWluYXRlcyBiZWNhdXNlIHdlIGFzc3VtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgRkxUX1JBRElYIGlzIGEgcG93ZXIgb2YgMi4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG1hbnRpc3NhID4gMC4wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW50aXNzYSAqPSAxNi4wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdCA9IChpbnQpIG1hbnRpc3NhOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW50aXNzYSAtPSBkaWdpdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9IGRpZ2l0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIChkaWdpdCA8IDEwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcwJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkcC0+Y29udmVyc2lvbiAtIDEwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZWNpc2lvbiA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uLS07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHByZWNpc2lvbiA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnMCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbi0tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gZHAtPmNvbnZlcnNpb24gLSAnQScgKyAnUCc7CisjICBpZiBXSURFX0NIQVJfVkVSU0lPTgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3Qgd2NoYXJfdCBkZWNpbWFsX2Zvcm1hdFtdID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICclJywgJysnLCAnZCcsICdcMCcgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05QUklOVEYgKHAsIDYgKyAxLCBkZWNpbWFsX2Zvcm1hdCwgZXhwb25lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCpwICE9ICdcMCcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHArKzsKKyMgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaXplb2YgKERDSEFSX1QpID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmICgoY2hhciAqKSBwLCAiJStkIiwgZXhwb25lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgqcCAhPSAnXDAnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGV4cGJ1Zls2ICsgMV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZiAoZXhwYnVmLCAiJStkIiwgZXhwb25lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZXAgPSBleHBidWY7ICgqcCA9ICplcCkgIT0gJ1wwJzsgZXArKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorIyAgZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIH0KKyMgZWxzZQorICAgICAgICAgICAgICAgICAgICBhYm9ydCAoKTsKKyMgZW5kaWYKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBUaGUgZ2VuZXJhdGVkIHN0cmluZyBub3cgZXh0ZW5kcyBmcm9tIHRtcCB0byBwLCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgIHplcm8gcGFkZGluZyBpbnNlcnRpb24gcG9pbnQgYmVpbmcgYXQgcGFkX3B0ci4gICovCisgICAgICAgICAgICAgICAgaWYgKGhhc193aWR0aCAmJiBwIC0gdG1wIDwgd2lkdGgpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwYWQgPSB3aWR0aCAtIChwIC0gdG1wKTsKKyAgICAgICAgICAgICAgICAgICAgRENIQVJfVCAqZW5kID0gcCArIHBhZDsKKworICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBGTEFHX0xFRlQpCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFkIHdpdGggc3BhY2VzIG9uIHRoZSByaWdodC4gICovCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcGFkID4gMDsgcGFkLS0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnICc7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoZmxhZ3MgJiBGTEFHX1pFUk8pICYmIHBhZF9wdHIgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBQYWQgd2l0aCB6ZXJvZXMuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgRENIQVJfVCAqcSA9IGVuZDsKKworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHAgPiBwYWRfcHRyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAqLS1xID0gKi0tcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBwYWQgPiAwOyBwYWQtLSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICcwJzsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBQYWQgd2l0aCBzcGFjZXMgb24gdGhlIGxlZnQuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgRENIQVJfVCAqcSA9IGVuZDsKKworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHAgPiB0bXApCisgICAgICAgICAgICAgICAgICAgICAgICAgICotLXEgPSAqLS1wOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHBhZCA+IDA7IHBhZC0tKQorICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gJyAnOworICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBwID0gZW5kOworICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgc2l6ZV90IGNvdW50ID0gcCAtIHRtcDsKKworICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID49IHRtcF9sZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIC8qIHRtcF9sZW5ndGggd2FzIGluY29ycmVjdGx5IGNhbGN1bGF0ZWQgLSBmaXggdGhlCisgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgYWJvdmUhICAqLworICAgICAgICAgICAgICAgICAgICBhYm9ydCAoKTsKKworICAgICAgICAgICAgICAgICAgLyogTWFrZSByb29tIGZvciB0aGUgcmVzdWx0LiAgKi8KKyAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA+PSBhbGxvY2F0ZWQgLSBsZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbiA9IHhzdW0gKGxlbmd0aCwgY291bnQpOworCisgICAgICAgICAgICAgICAgICAgICAgRU5TVVJFX0FMTE9DQVRJT04gKG4pOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgIC8qIEFwcGVuZCB0aGUgcmVzdWx0LiAgKi8KKyAgICAgICAgICAgICAgICAgIG1lbWNweSAocmVzdWx0ICsgbGVuZ3RoLCB0bXAsIGNvdW50ICogc2l6ZW9mIChEQ0hBUl9UKSk7CisgICAgICAgICAgICAgICAgICBpZiAodG1wICE9IHRtcGJ1ZikKKyAgICAgICAgICAgICAgICAgICAgZnJlZSAodG1wKTsKKyAgICAgICAgICAgICAgICAgIGxlbmd0aCArPSBjb3VudDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyNlbmRpZgorI2lmIChORUVEX1BSSU5URl9JTkZJTklURV9ET1VCTEUgfHwgTkVFRF9QUklOVEZfRE9VQkxFIHx8IE5FRURfUFJJTlRGX0lORklOSVRFX0xPTkdfRE9VQkxFIHx8IE5FRURfUFJJTlRGX0xPTkdfRE9VQkxFKSAmJiAhZGVmaW5lZCBJTl9MSUJJTlRMCisgICAgICAgICAgICBlbHNlIGlmICgoZHAtPmNvbnZlcnNpb24gPT0gJ2YnIHx8IGRwLT5jb252ZXJzaW9uID09ICdGJworICAgICAgICAgICAgICAgICAgICAgIHx8IGRwLT5jb252ZXJzaW9uID09ICdlJyB8fCBkcC0+Y29udmVyc2lvbiA9PSAnRScKKyAgICAgICAgICAgICAgICAgICAgICB8fCBkcC0+Y29udmVyc2lvbiA9PSAnZycgfHwgZHAtPmNvbnZlcnNpb24gPT0gJ0cnCisgICAgICAgICAgICAgICAgICAgICAgfHwgZHAtPmNvbnZlcnNpb24gPT0gJ2EnIHx8IGRwLT5jb252ZXJzaW9uID09ICdBJykKKyAgICAgICAgICAgICAgICAgICAgICYmICgwCisjIGlmIE5FRURfUFJJTlRGX0RPVUJMRQorICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGEuYXJnW2RwLT5hcmdfaW5kZXhdLnR5cGUgPT0gVFlQRV9ET1VCTEUKKyMgZWxpZiBORUVEX1BSSU5URl9JTkZJTklURV9ET1VCTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoYS5hcmdbZHAtPmFyZ19pbmRleF0udHlwZSA9PSBUWVBFX0RPVUJMRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgc3lzdGVtcyAobWluZ3cpIHdoaWNoIHByb2R1Y2Ugd3Jvbmcgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBJbmYsIC1JbmYsIGFuZCBOYU4gYWxzbyBkbyBzbyBmb3IgLTAuMC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlcmVmb3JlIHdlIHRyZWF0IHRoaXMgY2FzZSBoZXJlIGFzIHdlbGwuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBpc19pbmZpbml0ZV9vcl96ZXJvIChhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfZG91YmxlKSkKKyMgZW5kaWYKKyMgaWYgTkVFRF9QUklOVEZfTE9OR19ET1VCTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICB8fCBhLmFyZ1tkcC0+YXJnX2luZGV4XS50eXBlID09IFRZUEVfTE9OR0RPVUJMRQorIyBlbGlmIE5FRURfUFJJTlRGX0lORklOSVRFX0xPTkdfRE9VQkxFCisgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGEuYXJnW2RwLT5hcmdfaW5kZXhdLnR5cGUgPT0gVFlQRV9MT05HRE9VQkxFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNvbWUgc3lzdGVtcyBwcm9kdWNlIHdyb25nIG91dHB1dCBmb3IgSW5mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSW5mLCBhbmQgTmFOLiAgU29tZSBzeXN0ZW1zIGluIHRoaXMgY2F0ZWdvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElSSVggNS4zKSBhbHNvIGRvIHNvIGZvciAtMC4wLiAgVGhlcmVmb3JlIHdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWF0IHRoaXMgY2FzZSBoZXJlIGFzIHdlbGwuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBpc19pbmZpbml0ZV9vcl96ZXJvbCAoYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2xvbmdkb3VibGUpKQorIyBlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgKSkKKyAgICAgICAgICAgICAgeworIyBpZiAoTkVFRF9QUklOVEZfRE9VQkxFIHx8IE5FRURfUFJJTlRGX0lORklOSVRFX0RPVUJMRSkgJiYgKE5FRURfUFJJTlRGX0xPTkdfRE9VQkxFIHx8IE5FRURfUFJJTlRGX0lORklOSVRFX0xPTkdfRE9VQkxFKQorICAgICAgICAgICAgICAgIGFyZ190eXBlIHR5cGUgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS50eXBlOworIyBlbmRpZgorICAgICAgICAgICAgICAgIGludCBmbGFncyA9IGRwLT5mbGFnczsKKyAgICAgICAgICAgICAgICBpbnQgaGFzX3dpZHRoOworICAgICAgICAgICAgICAgIHNpemVfdCB3aWR0aDsKKyAgICAgICAgICAgICAgICBpbnQgaGFzX3ByZWNpc2lvbjsKKyAgICAgICAgICAgICAgICBzaXplX3QgcHJlY2lzaW9uOworICAgICAgICAgICAgICAgIHNpemVfdCB0bXBfbGVuZ3RoOworICAgICAgICAgICAgICAgIERDSEFSX1QgdG1wYnVmWzcwMF07CisgICAgICAgICAgICAgICAgRENIQVJfVCAqdG1wOworICAgICAgICAgICAgICAgIERDSEFSX1QgKnBhZF9wdHI7CisgICAgICAgICAgICAgICAgRENIQVJfVCAqcDsKKworICAgICAgICAgICAgICAgIGhhc193aWR0aCA9IDA7CisgICAgICAgICAgICAgICAgd2lkdGggPSAwOworICAgICAgICAgICAgICAgIGlmIChkcC0+d2lkdGhfc3RhcnQgIT0gZHAtPndpZHRoX2VuZCkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRwLT53aWR0aF9hcmdfaW5kZXggIT0gQVJHX05PTkUpCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFyZzsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoYS5hcmdbZHAtPndpZHRoX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ICgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYS5hcmdbZHAtPndpZHRoX2FyZ19pbmRleF0uYS5hX2ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmcgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIkEgbmVnYXRpdmUgZmllbGQgd2lkdGggaXMgdGFrZW4gYXMgYSAnLScgZmxhZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dlZCBieSBhIHBvc2l0aXZlIGZpZWxkIHdpZHRoLiIgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gRkxBR19MRUZUOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gKHVuc2lnbmVkIGludCkgKC1hcmcpOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gYXJnOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZDSEFSX1QgKmRpZ2l0cCA9IGRwLT53aWR0aF9zdGFydDsKKworICAgICAgICAgICAgICAgICAgICAgICAgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSB4c3VtICh4dGltZXMgKHdpZHRoLCAxMCksICpkaWdpdHArKyAtICcwJyk7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZGlnaXRwICE9IGRwLT53aWR0aF9lbmQpOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaGFzX3dpZHRoID0gMTsKKyAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGhhc19wcmVjaXNpb24gPSAwOworICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IDA7CisgICAgICAgICAgICAgICAgaWYgKGRwLT5wcmVjaXNpb25fc3RhcnQgIT0gZHAtPnByZWNpc2lvbl9lbmQpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCAhPSBBUkdfTk9ORSkKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXJnOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShhLmFyZ1tkcC0+cHJlY2lzaW9uX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ICgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYS5hcmdbZHAtPnByZWNpc2lvbl9hcmdfaW5kZXhdLmEuYV9pbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiAiQSBuZWdhdGl2ZSBwcmVjaXNpb24gaXMgdGFrZW4gYXMgaWYgdGhlIHByZWNpc2lvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlcmUgb21pdHRlZC4iICAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZyA+PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gYXJnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc19wcmVjaXNpb24gPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRkNIQVJfVCAqZGlnaXRwID0gZHAtPnByZWNpc2lvbl9zdGFydCArIDE7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZGlnaXRwICE9IGRwLT5wcmVjaXNpb25fZW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSB4c3VtICh4dGltZXMgKHByZWNpc2lvbiwgMTApLCAqZGlnaXRwKysgLSAnMCcpOworICAgICAgICAgICAgICAgICAgICAgICAgaGFzX3ByZWNpc2lvbiA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogUE9TSVggc3BlY2lmaWVzIHRoZSBkZWZhdWx0IHByZWNpc2lvbiB0byBiZSA2IGZvciAlZiwgJUYsCisgICAgICAgICAgICAgICAgICAgJWUsICVFLCBidXQgbm90IGZvciAlZywgJUcuICBJbXBsZW1lbnRhdGlvbnMgYXBwZWFyIHRvIHVzZQorICAgICAgICAgICAgICAgICAgIHRoZSBzYW1lIGRlZmF1bHQgcHJlY2lzaW9uIGFsc28gZm9yICVnLCAlRy4gIEJ1dCBmb3IgJWEsICVBLAorICAgICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0IHByZWNpc2lvbiBpcyAwLiAgKi8KKyAgICAgICAgICAgICAgICBpZiAoIWhhc19wcmVjaXNpb24pCisgICAgICAgICAgICAgICAgICBpZiAoIShkcC0+Y29udmVyc2lvbiA9PSAnYScgfHwgZHAtPmNvbnZlcnNpb24gPT0gJ0EnKSkKKyAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gNjsKKworICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIGEgdGVtcG9yYXJ5IGJ1ZmZlciBvZiBzdWZmaWNpZW50IHNpemUuICAqLworIyBpZiBORUVEX1BSSU5URl9ET1VCTEUgJiYgTkVFRF9QUklOVEZfTE9OR19ET1VCTEUKKyAgICAgICAgICAgICAgICB0bXBfbGVuZ3RoID0gKHR5cGUgPT0gVFlQRV9MT05HRE9VQkxFID8gTERCTF9ESUcgKyAxIDogREJMX0RJRyArIDEpOworIyBlbGlmIE5FRURfUFJJTlRGX0lORklOSVRFX0RPVUJMRSAmJiBORUVEX1BSSU5URl9MT05HX0RPVUJMRQorICAgICAgICAgICAgICAgIHRtcF9sZW5ndGggPSAodHlwZSA9PSBUWVBFX0xPTkdET1VCTEUgPyBMREJMX0RJRyArIDEgOiAwKTsKKyMgZWxpZiBORUVEX1BSSU5URl9MT05HX0RPVUJMRQorICAgICAgICAgICAgICAgIHRtcF9sZW5ndGggPSBMREJMX0RJRyArIDE7CisjIGVsaWYgTkVFRF9QUklOVEZfRE9VQkxFCisgICAgICAgICAgICAgICAgdG1wX2xlbmd0aCA9IERCTF9ESUcgKyAxOworIyBlbHNlCisgICAgICAgICAgICAgICAgdG1wX2xlbmd0aCA9IDA7CisjIGVuZGlmCisgICAgICAgICAgICAgICAgaWYgKHRtcF9sZW5ndGggPCBwcmVjaXNpb24pCisgICAgICAgICAgICAgICAgICB0bXBfbGVuZ3RoID0gcHJlY2lzaW9uOworIyBpZiBORUVEX1BSSU5URl9MT05HX0RPVUJMRQorIyAgaWYgTkVFRF9QUklOVEZfRE9VQkxFIHx8IE5FRURfUFJJTlRGX0lORklOSVRFX0RPVUJMRQorICAgICAgICAgICAgICAgIGlmICh0eXBlID09IFRZUEVfTE9OR0RPVUJMRSkKKyMgIGVuZGlmCisgICAgICAgICAgICAgICAgICBpZiAoZHAtPmNvbnZlcnNpb24gPT0gJ2YnIHx8IGRwLT5jb252ZXJzaW9uID09ICdGJykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZG91YmxlIGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9sb25nZG91YmxlOworICAgICAgICAgICAgICAgICAgICAgIGlmICghKGlzbmFubCAoYXJnKSB8fCBhcmcgKyBhcmcgPT0gYXJnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYXJnIGlzIGZpbml0ZSBhbmQgbm9uemVyby4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBvbmVudCA9IGZsb29ybG9nMTBsIChhcmcgPCAwID8gLWFyZyA6IGFyZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHBvbmVudCA+PSAwICYmIHRtcF9sZW5ndGggPCBleHBvbmVudCArIHByZWNpc2lvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBfbGVuZ3RoID0gZXhwb25lbnQgKyBwcmVjaXNpb247CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyMgZW5kaWYKKyMgaWYgTkVFRF9QUklOVEZfRE9VQkxFCisjICBpZiBORUVEX1BSSU5URl9MT05HX0RPVUJMRSB8fCBORUVEX1BSSU5URl9JTkZJTklURV9MT05HX0RPVUJMRQorICAgICAgICAgICAgICAgIGlmICh0eXBlID09IFRZUEVfRE9VQkxFKQorIyAgZW5kaWYKKyAgICAgICAgICAgICAgICAgIGlmIChkcC0+Y29udmVyc2lvbiA9PSAnZicgfHwgZHAtPmNvbnZlcnNpb24gPT0gJ0YnKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9kb3VibGU7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoaXNuYW5kIChhcmcpIHx8IGFyZyArIGFyZyA9PSBhcmcpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhcmcgaXMgZmluaXRlIGFuZCBub256ZXJvLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4cG9uZW50ID0gZmxvb3Jsb2cxMCAoYXJnIDwgMCA/IC1hcmcgOiBhcmcpOworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwb25lbnQgPj0gMCAmJiB0bXBfbGVuZ3RoIDwgZXhwb25lbnQgKyBwcmVjaXNpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wX2xlbmd0aCA9IGV4cG9uZW50ICsgcHJlY2lzaW9uOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisjIGVuZGlmCisgICAgICAgICAgICAgICAgLyogQWNjb3VudCBmb3Igc2lnbiwgZGVjaW1hbCBwb2ludCBldGMuICovCisgICAgICAgICAgICAgICAgdG1wX2xlbmd0aCA9IHhzdW0gKHRtcF9sZW5ndGgsIDEyKTsKKworICAgICAgICAgICAgICAgIGlmICh0bXBfbGVuZ3RoIDwgd2lkdGgpCisgICAgICAgICAgICAgICAgICB0bXBfbGVuZ3RoID0gd2lkdGg7CisKKyAgICAgICAgICAgICAgICB0bXBfbGVuZ3RoID0geHN1bSAodG1wX2xlbmd0aCwgMSk7IC8qIGFjY291bnQgZm9yIHRyYWlsaW5nIE5VTCAqLworCisgICAgICAgICAgICAgICAgaWYgKHRtcF9sZW5ndGggPD0gc2l6ZW9mICh0bXBidWYpIC8gc2l6ZW9mIChEQ0hBUl9UKSkKKyAgICAgICAgICAgICAgICAgIHRtcCA9IHRtcGJ1ZjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHNpemVfdCB0bXBfbWVtc2l6ZSA9IHh0aW1lcyAodG1wX2xlbmd0aCwgc2l6ZW9mIChEQ0hBUl9UKSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNpemVfb3ZlcmZsb3dfcCAodG1wX21lbXNpemUpKQorICAgICAgICAgICAgICAgICAgICAgIC8qIE92ZXJmbG93LCB3b3VsZCBsZWFkIHRvIG91dCBvZiBtZW1vcnkuICAqLworICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0X29mX21lbW9yeTsKKyAgICAgICAgICAgICAgICAgICAgdG1wID0gKERDSEFSX1QgKikgbWFsbG9jICh0bXBfbWVtc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAvKiBPdXQgb2YgbWVtb3J5LiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dF9vZl9tZW1vcnk7CisgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBwYWRfcHRyID0gTlVMTDsKKyAgICAgICAgICAgICAgICBwID0gdG1wOworCisjIGlmIE5FRURfUFJJTlRGX0xPTkdfRE9VQkxFIHx8IE5FRURfUFJJTlRGX0lORklOSVRFX0xPTkdfRE9VQkxFCisjICBpZiBORUVEX1BSSU5URl9ET1VCTEUgfHwgTkVFRF9QUklOVEZfSU5GSU5JVEVfRE9VQkxFCisgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gVFlQRV9MT05HRE9VQkxFKQorIyAgZW5kaWYKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbG9uZyBkb3VibGUgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2xvbmdkb3VibGU7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzbmFubCAoYXJnKSkKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHAtPmNvbnZlcnNpb24gPj0gJ0EnICYmIGRwLT5jb252ZXJzaW9uIDw9ICdaJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnTic7ICpwKysgPSAnQSc7ICpwKysgPSAnTic7CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnbic7ICpwKysgPSAnYSc7ICpwKysgPSAnbic7CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2lnbiA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBERUNMX0xPTkdfRE9VQkxFX1JPVU5ESU5HCisKKyAgICAgICAgICAgICAgICAgICAgICAgIEJFR0lOX0xPTkdfRE9VQkxFX1JPVU5ESU5HICgpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmJpdCAoYXJnKSkgLyogYXJnIDwgMC4wTCBvciBuZWdhdGl2ZSB6ZXJvICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gLWFyZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbiA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnLSc7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmbGFncyAmIEZMQUdfU0hPV1NJR04pCisgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnKyc7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmbGFncyAmIEZMQUdfU1BBQ0UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnICc7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmcgPiAwLjBMICYmIGFyZyArIGFyZyA9PSBhcmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHAtPmNvbnZlcnNpb24gPj0gJ0EnICYmIGRwLT5jb252ZXJzaW9uIDw9ICdaJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICdJJzsgKnArKyA9ICdOJzsgKnArKyA9ICdGJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnaSc7ICpwKysgPSAnbic7ICpwKysgPSAnZic7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworIyAgaWYgTkVFRF9QUklOVEZfTE9OR19ET1VCTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRfcHRyID0gcDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkcC0+Y29udmVyc2lvbiA9PSAnZicgfHwgZHAtPmNvbnZlcnNpb24gPT0gJ0YnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpkaWdpdHM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuZGlnaXRzOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0cyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGUxMF9yb3VuZF9kZWNpbWFsX2xvbmdfZG91YmxlIChhcmcsIHByZWNpc2lvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaWdpdHMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkRfTE9OR19ET1VCTEVfUk9VTkRJTkcgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dF9vZl9tZW1vcnk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZGlnaXRzID0gc3RybGVuIChkaWdpdHMpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZGlnaXRzID4gcHJlY2lzaW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbmRpZ2l0czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9IGRpZ2l0c1tuZGlnaXRzXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmRpZ2l0cyA+IHByZWNpc2lvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gJzAnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIZXJlIG5kaWdpdHMgPD0gcHJlY2lzaW9uLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChmbGFncyAmIEZMQUdfQUxUKSB8fCBwcmVjaXNpb24gPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSBkZWNpbWFsX3BvaW50X2NoYXIgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcHJlY2lzaW9uID4gbmRpZ2l0czsgcHJlY2lzaW9uLS0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnMCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmRpZ2l0cyA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLW5kaWdpdHM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9IGRpZ2l0c1tuZGlnaXRzXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIChkaWdpdHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRwLT5jb252ZXJzaW9uID09ICdlJyB8fCBkcC0+Y29udmVyc2lvbiA9PSAnRScpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBvbmVudDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnID09IDAuMEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb25lbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICcwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBGTEFHX0FMVCkgfHwgcHJlY2lzaW9uID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSBkZWNpbWFsX3BvaW50X2NoYXIgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHByZWNpc2lvbiA+IDA7IHByZWNpc2lvbi0tKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICcwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFyZyA+IDAuMEwuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFkanVzdGVkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZGlnaXRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5kaWdpdHM7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gZmxvb3Jsb2cxMGwgKGFyZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXRzID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlMTBfcm91bmRfZGVjaW1hbF9sb25nX2RvdWJsZSAoYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXByZWNpc2lvbiAtIGV4cG9uZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlnaXRzID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVORF9MT05HX0RPVUJMRV9ST1VORElORyAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXRfb2ZfbWVtb3J5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5kaWdpdHMgPSBzdHJsZW4gKGRpZ2l0cyk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmRpZ2l0cyA9PSBwcmVjaXNpb24gKyAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5kaWdpdHMgPCBwcmVjaXNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbmRpZ2l0cyA+IHByZWNpc2lvbiArIDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgZXhwb25lbnQgd2FzIG5vdCBndWVzc2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNlbHkgZW5vdWdoLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ICgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGp1c3RlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vbmUgb2YgdHdvIHZhbHVlcyBvZiBleHBvbmVudCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJpZ2h0IG9uZS4gIFByZXZlbnQgYW4gZW5kbGVzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcC4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIChkaWdpdHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZGlnaXRzID09IHByZWNpc2lvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50IC09IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb25lbnQgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhlcmUgbmRpZ2l0cyA9IHByZWNpc2lvbisxLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19ib3JkZXJsaW5lIChkaWdpdHMsIHByZWNpc2lvbikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXliZSB0aGUgZXhwb25lbnQgZ3Vlc3Mgd2FzIHRvbyBoaWdoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGEgc21hbGxlciBleHBvbmVudCBjYW4gYmUgcmVhY2hlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHR1cm5pbmcgYSAxMC4uLjAgaW50byA5Li4uOXguICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmRpZ2l0czIgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGUxMF9yb3VuZF9kZWNpbWFsX2xvbmdfZG91YmxlIChhcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpcHJlY2lzaW9uIC0gZXhwb25lbnQgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlnaXRzMiA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIChkaWdpdHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkRfTE9OR19ET1VCTEVfUk9VTkRJTkcgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0X29mX21lbW9yeTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RybGVuIChkaWdpdHMyKSA9PSBwcmVjaXNpb24gKyAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIChkaWdpdHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdHMgPSBkaWdpdHMyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudCAtPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUgKGRpZ2l0czIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIZXJlIG5kaWdpdHMgPSBwcmVjaXNpb24rMS4gICovCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSBkaWdpdHNbLS1uZGlnaXRzXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBGTEFHX0FMVCkgfHwgcHJlY2lzaW9uID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSBkZWNpbWFsX3BvaW50X2NoYXIgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5kaWdpdHMgPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLW5kaWdpdHM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSBkaWdpdHNbbmRpZ2l0c107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAoZGlnaXRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9IGRwLT5jb252ZXJzaW9uOyAvKiAnZScgb3IgJ0UnICovCisjICAgaWYgV0lERV9DSEFSX1ZFUlNJT04KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCB3Y2hhcl90IGRlY2ltYWxfZm9ybWF0W10gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAnJScsICcrJywgJy4nLCAnMicsICdkJywgJ1wwJyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOUFJJTlRGIChwLCA2ICsgMSwgZGVjaW1hbF9mb3JtYXQsIGV4cG9uZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnAgIT0gJ1wwJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwKys7CisjICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2l6ZW9mIChEQ0hBUl9UKSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYgKChjaGFyICopIHAsICIlKy4yZCIsIGV4cG9uZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgqcCAhPSAnXDAnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBleHBidWZbNiArIDFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmIChleHBidWYsICIlKy4yZCIsIGV4cG9uZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZXAgPSBleHBidWY7ICgqcCA9ICplcCkgIT0gJ1wwJzsgZXArKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyMgICBlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRwLT5jb252ZXJzaW9uID09ICdnJyB8fCBkcC0+Y29udmVyc2lvbiA9PSAnRycpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmVjaXNpb24gPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcmVjaXNpb24gPj0gMS4gICovCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZyA9PSAwLjBMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBleHBvbmVudCBpcyAwLCA+PSAtNCwgPCBwcmVjaXNpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIGZpeGVkLXBvaW50IG5vdGF0aW9uLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmRpZ2l0cyA9IHByZWNpc2lvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiB0cmFpbGluZyB6ZXJvZXMgdGhhdCBoYXZlIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcm9wcGVkLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuemVyb2VzID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsYWdzICYgRkxBR19BTFQgPyAwIDogcHJlY2lzaW9uIC0gMSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbmRpZ2l0czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnMCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGZsYWdzICYgRkxBR19BTFQpIHx8IG5kaWdpdHMgPiBuemVyb2VzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9IGRlY2ltYWxfcG9pbnRfY2hhciAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmRpZ2l0cyA+IG56ZXJvZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbmRpZ2l0czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICcwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFyZyA+IDAuMEwuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4cG9uZW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFkanVzdGVkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZGlnaXRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5kaWdpdHM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbnplcm9lczsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb25lbnQgPSBmbG9vcmxvZzEwbCAoYXJnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdGVkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdHMgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGUxMF9yb3VuZF9kZWNpbWFsX2xvbmdfZG91YmxlIChhcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKHByZWNpc2lvbiAtIDEpIC0gZXhwb25lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaWdpdHMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5EX0xPTkdfRE9VQkxFX1JPVU5ESU5HICgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dF9vZl9tZW1vcnk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmRpZ2l0cyA9IHN0cmxlbiAoZGlnaXRzKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZGlnaXRzID09IHByZWNpc2lvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZGlnaXRzIDwgcHJlY2lzaW9uIC0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBuZGlnaXRzID4gcHJlY2lzaW9uICsgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBleHBvbmVudCB3YXMgbm90IGd1ZXNzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2VseSBlbm91Z2guICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkanVzdGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm9uZSBvZiB0d28gdmFsdWVzIG9mIGV4cG9uZW50IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmlnaHQgb25lLiAgUHJldmVudCBhbiBlbmRsZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ICgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUgKGRpZ2l0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5kaWdpdHMgPCBwcmVjaXNpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudCAtPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50ICs9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0ZWQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIZXJlIG5kaWdpdHMgPSBwcmVjaXNpb24uICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2JvcmRlcmxpbmUgKGRpZ2l0cywgcHJlY2lzaW9uIC0gMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXliZSB0aGUgZXhwb25lbnQgZ3Vlc3Mgd2FzIHRvbyBoaWdoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGEgc21hbGxlciBleHBvbmVudCBjYW4gYmUgcmVhY2hlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHR1cm5pbmcgYSAxMC4uLjAgaW50byA5Li4uOXguICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmRpZ2l0czIgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGUxMF9yb3VuZF9kZWNpbWFsX2xvbmdfZG91YmxlIChhcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKHByZWNpc2lvbiAtIDEpIC0gZXhwb25lbnQgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlnaXRzMiA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIChkaWdpdHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkRfTE9OR19ET1VCTEVfUk9VTkRJTkcgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0X29mX21lbW9yeTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RybGVuIChkaWdpdHMyKSA9PSBwcmVjaXNpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUgKGRpZ2l0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0cyA9IGRpZ2l0czI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50IC09IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAoZGlnaXRzMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhlcmUgbmRpZ2l0cyA9IHByZWNpc2lvbi4gICovCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERldGVybWluZSB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm9lcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBoYXZlIHRvIGJlIGRyb3BwZWQuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnplcm9lcyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGZsYWdzICYgRkxBR19BTFQpID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuemVyb2VzIDwgbmRpZ2l0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZGlnaXRzW256ZXJvZXNdID09ICcwJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuemVyb2VzKys7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBleHBvbmVudCBpcyBub3cgZGV0ZXJtaW5lZC4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwb25lbnQgPj0gLTQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBleHBvbmVudCA8IChsb25nKXByZWNpc2lvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpeGVkLXBvaW50IG5vdGF0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heChleHBvbmVudCwwKSsxIGRpZ2l0cywgdGhlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNpbWFsIHBvaW50LCB0aGVuIHRoZSByZW1haW5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdHMgd2l0aG91dCB0cmFpbGluZyB6ZXJvZXMuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHBvbmVudCA+PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY291bnQgPSBleHBvbmVudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdGU6IGNvdW50IDw9IHByZWNpc2lvbiA9IG5kaWdpdHMuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSBkaWdpdHNbLS1uZGlnaXRzXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChmbGFncyAmIEZMQUdfQUxUKSB8fCBuZGlnaXRzID4gbnplcm9lcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gZGVjaW1hbF9wb2ludF9jaGFyICgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5kaWdpdHMgPiBuemVyb2VzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1uZGlnaXRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSBkaWdpdHNbbmRpZ2l0c107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY291bnQgPSAtZXhwb25lbnQgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gJzAnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gZGVjaW1hbF9wb2ludF9jaGFyICgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnMCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuZGlnaXRzID4gbnplcm9lcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLW5kaWdpdHM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gZGlnaXRzW25kaWdpdHNdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRXhwb25lbnRpYWwgbm90YXRpb24uICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSBkaWdpdHNbLS1uZGlnaXRzXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGZsYWdzICYgRkxBR19BTFQpIHx8IG5kaWdpdHMgPiBuemVyb2VzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gZGVjaW1hbF9wb2ludF9jaGFyICgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmRpZ2l0cyA+IG56ZXJvZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1uZGlnaXRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9IGRpZ2l0c1tuZGlnaXRzXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9IGRwLT5jb252ZXJzaW9uIC0gJ0cnICsgJ0UnOyAvKiAnZScgb3IgJ0UnICovCisjICAgaWYgV0lERV9DSEFSX1ZFUlNJT04KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3Qgd2NoYXJfdCBkZWNpbWFsX2Zvcm1hdFtdID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAnJScsICcrJywgJy4nLCAnMicsICdkJywgJ1wwJyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05QUklOVEYgKHAsIDYgKyAxLCBkZWNpbWFsX2Zvcm1hdCwgZXhwb25lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnAgIT0gJ1wwJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHArKzsKKyMgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpemVvZiAoRENIQVJfVCkgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZiAoKGNoYXIgKikgcCwgIiUrLjJkIiwgZXhwb25lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnAgIT0gJ1wwJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGV4cGJ1Zls2ICsgMV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmIChleHBidWYsICIlKy4yZCIsIGV4cG9uZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChlcCA9IGV4cGJ1ZjsgKCpwID0gKmVwKSAhPSAnXDAnOyBlcCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyMgICBlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUgKGRpZ2l0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ICgpOworIyAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFyZyBpcyBmaW5pdGUuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGFyZyA9PSAwLjBMKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ICgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkX3B0ciA9IHA7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHAtPmNvbnZlcnNpb24gPT0gJ2YnIHx8IGRwLT5jb252ZXJzaW9uID09ICdGJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICcwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChmbGFncyAmIEZMQUdfQUxUKSB8fCBwcmVjaXNpb24gPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSBkZWNpbWFsX3BvaW50X2NoYXIgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcHJlY2lzaW9uID4gMDsgcHJlY2lzaW9uLS0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnMCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRwLT5jb252ZXJzaW9uID09ICdlJyB8fCBkcC0+Y29udmVyc2lvbiA9PSAnRScpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnMCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBGTEFHX0FMVCkgfHwgcHJlY2lzaW9uID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gZGVjaW1hbF9wb2ludF9jaGFyICgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHByZWNpc2lvbiA+IDA7IHByZWNpc2lvbi0tKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gJzAnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9IGRwLT5jb252ZXJzaW9uOyAvKiAnZScgb3IgJ0UnICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnKyc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnMCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnMCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZHAtPmNvbnZlcnNpb24gPT0gJ2cnIHx8IGRwLT5jb252ZXJzaW9uID09ICdHJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICcwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgRkxBR19BTFQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5kaWdpdHMgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJlY2lzaW9uID4gMCA/IHByZWNpc2lvbiAtIDEgOiAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSBkZWNpbWFsX3BvaW50X2NoYXIgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbmRpZ2l0cyA+IDA7IC0tbmRpZ2l0cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICcwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZHAtPmNvbnZlcnNpb24gPT0gJ2EnIHx8IGRwLT5jb252ZXJzaW9uID09ICdBJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICcwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9IGRwLT5jb252ZXJzaW9uIC0gJ0EnICsgJ1gnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRfcHRyID0gcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICcwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChmbGFncyAmIEZMQUdfQUxUKSB8fCBwcmVjaXNpb24gPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSBkZWNpbWFsX3BvaW50X2NoYXIgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcHJlY2lzaW9uID4gMDsgcHJlY2lzaW9uLS0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnMCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gZHAtPmNvbnZlcnNpb24gLSAnQScgKyAnUCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnKyc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnMCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQgKCk7CisjICBlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIEVORF9MT05HX0RPVUJMRV9ST1VORElORyAoKTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisjICBpZiBORUVEX1BSSU5URl9ET1VCTEUgfHwgTkVFRF9QUklOVEZfSU5GSU5JVEVfRE9VQkxFCisgICAgICAgICAgICAgICAgZWxzZQorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgTkVFRF9QUklOVEZfRE9VQkxFIHx8IE5FRURfUFJJTlRGX0lORklOSVRFX0RPVUJMRQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkb3VibGUgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2RvdWJsZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoaXNuYW5kIChhcmcpKQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkcC0+Y29udmVyc2lvbiA+PSAnQScgJiYgZHAtPmNvbnZlcnNpb24gPD0gJ1onKQorICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICdOJzsgKnArKyA9ICdBJzsgKnArKyA9ICdOJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICduJzsgKnArKyA9ICdhJzsgKnArKyA9ICduJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaWduID0gMDsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25iaXQgKGFyZykpIC8qIGFyZyA8IDAuMCBvciBuZWdhdGl2ZSB6ZXJvICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gLWFyZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbiA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnLSc7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmbGFncyAmIEZMQUdfU0hPV1NJR04pCisgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnKyc7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmbGFncyAmIEZMQUdfU1BBQ0UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnICc7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmcgPiAwLjAgJiYgYXJnICsgYXJnID09IGFyZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkcC0+Y29udmVyc2lvbiA+PSAnQScgJiYgZHAtPmNvbnZlcnNpb24gPD0gJ1onKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gJ0knOyAqcCsrID0gJ04nOyAqcCsrID0gJ0YnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICdpJzsgKnArKyA9ICduJzsgKnArKyA9ICdmJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICB7CisjICBpZiBORUVEX1BSSU5URl9ET1VCTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRfcHRyID0gcDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkcC0+Y29udmVyc2lvbiA9PSAnZicgfHwgZHAtPmNvbnZlcnNpb24gPT0gJ0YnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpkaWdpdHM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuZGlnaXRzOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0cyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGUxMF9yb3VuZF9kZWNpbWFsX2RvdWJsZSAoYXJnLCBwcmVjaXNpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlnaXRzID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXRfb2ZfbWVtb3J5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZGlnaXRzID0gc3RybGVuIChkaWdpdHMpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZGlnaXRzID4gcHJlY2lzaW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbmRpZ2l0czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9IGRpZ2l0c1tuZGlnaXRzXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmRpZ2l0cyA+IHByZWNpc2lvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gJzAnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIZXJlIG5kaWdpdHMgPD0gcHJlY2lzaW9uLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChmbGFncyAmIEZMQUdfQUxUKSB8fCBwcmVjaXNpb24gPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSBkZWNpbWFsX3BvaW50X2NoYXIgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcHJlY2lzaW9uID4gbmRpZ2l0czsgcHJlY2lzaW9uLS0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnMCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmRpZ2l0cyA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLW5kaWdpdHM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9IGRpZ2l0c1tuZGlnaXRzXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIChkaWdpdHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRwLT5jb252ZXJzaW9uID09ICdlJyB8fCBkcC0+Y29udmVyc2lvbiA9PSAnRScpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBvbmVudDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnID09IDAuMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gJzAnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChmbGFncyAmIEZMQUdfQUxUKSB8fCBwcmVjaXNpb24gPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9IGRlY2ltYWxfcG9pbnRfY2hhciAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcHJlY2lzaW9uID4gMDsgcHJlY2lzaW9uLS0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gJzAnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYXJnID4gMC4wLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhZGp1c3RlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmRpZ2l0czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuZGlnaXRzOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudCA9IGZsb29ybG9nMTAgKGFyZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXRzID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlMTBfcm91bmRfZGVjaW1hbF9kb3VibGUgKGFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpcHJlY2lzaW9uIC0gZXhwb25lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaWdpdHMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0X29mX21lbW9yeTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZGlnaXRzID0gc3RybGVuIChkaWdpdHMpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5kaWdpdHMgPT0gcHJlY2lzaW9uICsgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZGlnaXRzIDwgcHJlY2lzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG5kaWdpdHMgPiBwcmVjaXNpb24gKyAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIGV4cG9uZW50IHdhcyBub3QgZ3Vlc3NlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzZWx5IGVub3VnaC4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRqdXN0ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb25lIG9mIHR3byB2YWx1ZXMgb2YgZXhwb25lbnQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByaWdodCBvbmUuICBQcmV2ZW50IGFuIGVuZGxlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3AuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAoZGlnaXRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmRpZ2l0cyA9PSBwcmVjaXNpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudCAtPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50ICs9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0ZWQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIZXJlIG5kaWdpdHMgPSBwcmVjaXNpb24rMS4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfYm9yZGVybGluZSAoZGlnaXRzLCBwcmVjaXNpb24pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWF5YmUgdGhlIGV4cG9uZW50IGd1ZXNzIHdhcyB0b28gaGlnaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhIHNtYWxsZXIgZXhwb25lbnQgY2FuIGJlIHJlYWNoZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSB0dXJuaW5nIGEgMTAuLi4wIGludG8gOS4uLjl4LiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpkaWdpdHMyID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlMTBfcm91bmRfZGVjaW1hbF9kb3VibGUgKGFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpcHJlY2lzaW9uIC0gZXhwb25lbnQgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlnaXRzMiA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIChkaWdpdHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dF9vZl9tZW1vcnk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmxlbiAoZGlnaXRzMikgPT0gcHJlY2lzaW9uICsgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAoZGlnaXRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXRzID0gZGlnaXRzMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb25lbnQgLT0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIChkaWdpdHMyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSGVyZSBuZGlnaXRzID0gcHJlY2lzaW9uKzEuICAqLworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gZGlnaXRzWy0tbmRpZ2l0c107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGZsYWdzICYgRkxBR19BTFQpIHx8IHByZWNpc2lvbiA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gZGVjaW1hbF9wb2ludF9jaGFyICgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuZGlnaXRzID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1uZGlnaXRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gZGlnaXRzW25kaWdpdHNdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUgKGRpZ2l0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSBkcC0+Y29udmVyc2lvbjsgLyogJ2UnIG9yICdFJyAqLworIyAgIGlmIFdJREVfQ0hBUl9WRVJTSU9OCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3Qgd2NoYXJfdCBkZWNpbWFsX2Zvcm1hdFtdID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByb2R1Y2UgdGhlIHNhbWUgbnVtYmVyIG9mIGV4cG9uZW50IGRpZ2l0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdGhlIG5hdGl2ZSBwcmludGYgaW1wbGVtZW50YXRpb24uICAqLworIyAgICBpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICclJywgJysnLCAnLicsICczJywgJ2QnLCAnXDAnIH07CisjICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJyUnLCAnKycsICcuJywgJzInLCAnZCcsICdcMCcgfTsKKyMgICAgZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTlBSSU5URiAocCwgNiArIDEsIGRlY2ltYWxfZm9ybWF0LCBleHBvbmVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCpwICE9ICdcMCcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCsrOworIyAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGRlY2ltYWxfZm9ybWF0W10gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJvZHVjZSB0aGUgc2FtZSBudW1iZXIgb2YgZXhwb25lbnQgZGlnaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB0aGUgbmF0aXZlIHByaW50ZiBpbXBsZW1lbnRhdGlvbi4gICovCisjICAgIGlmIChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgISBkZWZpbmVkIF9fQ1lHV0lOX18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlKy4zZCI7CisjICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlKy4yZCI7CisjICAgIGVuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpemVvZiAoRENIQVJfVCkgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZiAoKGNoYXIgKikgcCwgZGVjaW1hbF9mb3JtYXQsIGV4cG9uZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCpwICE9ICdcMCcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBleHBidWZbNiArIDFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZiAoZXhwYnVmLCBkZWNpbWFsX2Zvcm1hdCwgZXhwb25lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGVwID0gZXhwYnVmOyAoKnAgPSAqZXApICE9ICdcMCc7IGVwKyspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisjICAgZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChkcC0+Y29udmVyc2lvbiA9PSAnZycgfHwgZHAtPmNvbnZlcnNpb24gPT0gJ0cnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlY2lzaW9uID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJlY2lzaW9uID49IDEuICAqLworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmcgPT0gMC4wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBleHBvbmVudCBpcyAwLCA+PSAtNCwgPCBwcmVjaXNpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIGZpeGVkLXBvaW50IG5vdGF0aW9uLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmRpZ2l0cyA9IHByZWNpc2lvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiB0cmFpbGluZyB6ZXJvZXMgdGhhdCBoYXZlIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcm9wcGVkLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuemVyb2VzID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsYWdzICYgRkxBR19BTFQgPyAwIDogcHJlY2lzaW9uIC0gMSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbmRpZ2l0czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnMCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGZsYWdzICYgRkxBR19BTFQpIHx8IG5kaWdpdHMgPiBuemVyb2VzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9IGRlY2ltYWxfcG9pbnRfY2hhciAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmRpZ2l0cyA+IG56ZXJvZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbmRpZ2l0czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICcwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFyZyA+IDAuMC4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhwb25lbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWRqdXN0ZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpkaWdpdHM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmRpZ2l0czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuemVyb2VzOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudCA9IGZsb29ybG9nMTAgKGFyZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXRzID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlMTBfcm91bmRfZGVjaW1hbF9kb3VibGUgKGFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKHByZWNpc2lvbiAtIDEpIC0gZXhwb25lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaWdpdHMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0X29mX21lbW9yeTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZGlnaXRzID0gc3RybGVuIChkaWdpdHMpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5kaWdpdHMgPT0gcHJlY2lzaW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5kaWdpdHMgPCBwcmVjaXNpb24gLSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG5kaWdpdHMgPiBwcmVjaXNpb24gKyAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIGV4cG9uZW50IHdhcyBub3QgZ3Vlc3NlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzZWx5IGVub3VnaC4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRqdXN0ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb25lIG9mIHR3byB2YWx1ZXMgb2YgZXhwb25lbnQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByaWdodCBvbmUuICBQcmV2ZW50IGFuIGVuZGxlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3AuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAoZGlnaXRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmRpZ2l0cyA8IHByZWNpc2lvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50IC09IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb25lbnQgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhlcmUgbmRpZ2l0cyA9IHByZWNpc2lvbi4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfYm9yZGVybGluZSAoZGlnaXRzLCBwcmVjaXNpb24gLSAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1heWJlIHRoZSBleHBvbmVudCBndWVzcyB3YXMgdG9vIGhpZ2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYSBzbWFsbGVyIGV4cG9uZW50IGNhbiBiZSByZWFjaGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgdHVybmluZyBhIDEwLi4uMCBpbnRvIDkuLi45eC4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZGlnaXRzMiA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZTEwX3JvdW5kX2RlY2ltYWxfZG91YmxlIChhcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShwcmVjaXNpb24gLSAxKSAtIGV4cG9uZW50ICsgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpZ2l0czIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAoZGlnaXRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXRfb2ZfbWVtb3J5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJsZW4gKGRpZ2l0czIpID09IHByZWNpc2lvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAoZGlnaXRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXRzID0gZGlnaXRzMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb25lbnQgLT0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIChkaWdpdHMyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSGVyZSBuZGlnaXRzID0gcHJlY2lzaW9uLiAgKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVyb2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGhhdmUgdG8gYmUgZHJvcHBlZC4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuemVyb2VzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBGTEFHX0FMVCkgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG56ZXJvZXMgPCBuZGlnaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBkaWdpdHNbbnplcm9lc10gPT0gJzAnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG56ZXJvZXMrKzsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIGV4cG9uZW50IGlzIG5vdyBkZXRlcm1pbmVkLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHBvbmVudCA+PSAtNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGV4cG9uZW50IDwgKGxvbmcpcHJlY2lzaW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRml4ZWQtcG9pbnQgbm90YXRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4KGV4cG9uZW50LDApKzEgZGlnaXRzLCB0aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgcG9pbnQsIHRoZW4gdGhlIHJlbWFpbmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0cyB3aXRob3V0IHRyYWlsaW5nIHplcm9lcy4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cG9uZW50ID49IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjb3VudCA9IGV4cG9uZW50ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90ZTogY291bnQgPD0gcHJlY2lzaW9uID0gbmRpZ2l0cy4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9IGRpZ2l0c1stLW5kaWdpdHNdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGZsYWdzICYgRkxBR19BTFQpIHx8IG5kaWdpdHMgPiBuemVyb2VzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSBkZWNpbWFsX3BvaW50X2NoYXIgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmRpZ2l0cyA+IG56ZXJvZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLW5kaWdpdHM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9IGRpZ2l0c1tuZGlnaXRzXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjb3VudCA9IC1leHBvbmVudCAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnMCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSBkZWNpbWFsX3BvaW50X2NoYXIgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICcwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5kaWdpdHMgPiBuemVyb2VzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbmRpZ2l0czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSBkaWdpdHNbbmRpZ2l0c107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeHBvbmVudGlhbCBub3RhdGlvbi4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9IGRpZ2l0c1stLW5kaWdpdHNdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBGTEFHX0FMVCkgfHwgbmRpZ2l0cyA+IG56ZXJvZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSBkZWNpbWFsX3BvaW50X2NoYXIgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuZGlnaXRzID4gbnplcm9lcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLW5kaWdpdHM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gZGlnaXRzW25kaWdpdHNdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gZHAtPmNvbnZlcnNpb24gLSAnRycgKyAnRSc7IC8qICdlJyBvciAnRScgKi8KKyMgICBpZiBXSURFX0NIQVJfVkVSU0lPTgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCB3Y2hhcl90IGRlY2ltYWxfZm9ybWF0W10gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcm9kdWNlIHRoZSBzYW1lIG51bWJlciBvZiBleHBvbmVudCBkaWdpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdGhlIG5hdGl2ZSBwcmludGYgaW1wbGVtZW50YXRpb24uICAqLworIyAgICBpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJyUnLCAnKycsICcuJywgJzMnLCAnZCcsICdcMCcgfTsKKyMgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICclJywgJysnLCAnLicsICcyJywgJ2QnLCAnXDAnIH07CisjICAgIGVuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTlBSSU5URiAocCwgNiArIDEsIGRlY2ltYWxfZm9ybWF0LCBleHBvbmVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgqcCAhPSAnXDAnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCsrOworIyAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBkZWNpbWFsX2Zvcm1hdFtdID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJvZHVjZSB0aGUgc2FtZSBudW1iZXIgb2YgZXhwb25lbnQgZGlnaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHRoZSBuYXRpdmUgcHJpbnRmIGltcGxlbWVudGF0aW9uLiAgKi8KKyMgICAgaWYgKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSsuM2QiOworIyAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlKy4yZCI7CisjICAgIGVuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2l6ZW9mIChEQ0hBUl9UKSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZiAoKGNoYXIgKikgcCwgZGVjaW1hbF9mb3JtYXQsIGV4cG9uZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnAgIT0gJ1wwJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBleHBidWZbNiArIDFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYgKGV4cGJ1ZiwgZGVjaW1hbF9mb3JtYXQsIGV4cG9uZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGVwID0gZXhwYnVmOyAoKnAgPSAqZXApICE9ICdcMCc7IGVwKyspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisjICAgZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIChkaWdpdHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCAoKTsKKyMgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhcmcgaXMgZmluaXRlLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShhcmcgPT0gMC4wKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ICgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkX3B0ciA9IHA7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHAtPmNvbnZlcnNpb24gPT0gJ2YnIHx8IGRwLT5jb252ZXJzaW9uID09ICdGJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICcwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChmbGFncyAmIEZMQUdfQUxUKSB8fCBwcmVjaXNpb24gPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSBkZWNpbWFsX3BvaW50X2NoYXIgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcHJlY2lzaW9uID4gMDsgcHJlY2lzaW9uLS0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnMCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRwLT5jb252ZXJzaW9uID09ICdlJyB8fCBkcC0+Y29udmVyc2lvbiA9PSAnRScpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnMCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBGTEFHX0FMVCkgfHwgcHJlY2lzaW9uID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gZGVjaW1hbF9wb2ludF9jaGFyICgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHByZWNpc2lvbiA+IDA7IHByZWNpc2lvbi0tKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gJzAnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9IGRwLT5jb252ZXJzaW9uOyAvKiAnZScgb3IgJ0UnICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnKyc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByb2R1Y2UgdGhlIHNhbWUgbnVtYmVyIG9mIGV4cG9uZW50IGRpZ2l0cyBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbmF0aXZlIHByaW50ZiBpbXBsZW1lbnRhdGlvbi4gICovCisjICAgaWYgKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gJzAnOworIyAgIGVuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnMCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnMCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZHAtPmNvbnZlcnNpb24gPT0gJ2cnIHx8IGRwLT5jb252ZXJzaW9uID09ICdHJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICcwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgRkxBR19BTFQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5kaWdpdHMgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJlY2lzaW9uID4gMCA/IHByZWNpc2lvbiAtIDEgOiAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSBkZWNpbWFsX3BvaW50X2NoYXIgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbmRpZ2l0cyA+IDA7IC0tbmRpZ2l0cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICcwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQgKCk7CisjICBlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorIyBlbmRpZgorCisgICAgICAgICAgICAgICAgLyogVGhlIGdlbmVyYXRlZCBzdHJpbmcgbm93IGV4dGVuZHMgZnJvbSB0bXAgdG8gcCwgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICB6ZXJvIHBhZGRpbmcgaW5zZXJ0aW9uIHBvaW50IGJlaW5nIGF0IHBhZF9wdHIuICAqLworICAgICAgICAgICAgICAgIGlmIChoYXNfd2lkdGggJiYgcCAtIHRtcCA8IHdpZHRoKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGFkID0gd2lkdGggLSAocCAtIHRtcCk7CisgICAgICAgICAgICAgICAgICAgIERDSEFSX1QgKmVuZCA9IHAgKyBwYWQ7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgRkxBR19MRUZUKQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhZCB3aXRoIHNwYWNlcyBvbiB0aGUgcmlnaHQuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHBhZCA+IDA7IHBhZC0tKQorICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gJyAnOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKGZsYWdzICYgRkxBR19aRVJPKSAmJiBwYWRfcHRyICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFkIHdpdGggemVyb2VzLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIERDSEFSX1QgKnEgPSBlbmQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwID4gcGFkX3B0cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKi0tcSA9ICotLXA7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcGFkID4gMDsgcGFkLS0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAnMCc7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFkIHdpdGggc3BhY2VzIG9uIHRoZSBsZWZ0LiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIERDSEFSX1QgKnEgPSBlbmQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwID4gdG1wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAqLS1xID0gKi0tcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBwYWQgPiAwOyBwYWQtLSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICcgJzsKKyAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcCA9IGVuZDsKKyAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHNpemVfdCBjb3VudCA9IHAgLSB0bXA7CisKKyAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA+PSB0bXBfbGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICAvKiB0bXBfbGVuZ3RoIHdhcyBpbmNvcnJlY3RseSBjYWxjdWxhdGVkIC0gZml4IHRoZQorICAgICAgICAgICAgICAgICAgICAgICBjb2RlIGFib3ZlISAgKi8KKyAgICAgICAgICAgICAgICAgICAgYWJvcnQgKCk7CisKKyAgICAgICAgICAgICAgICAgIC8qIE1ha2Ugcm9vbSBmb3IgdGhlIHJlc3VsdC4gICovCisgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPj0gYWxsb2NhdGVkIC0gbGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4gPSB4c3VtIChsZW5ndGgsIGNvdW50KTsKKworICAgICAgICAgICAgICAgICAgICAgIEVOU1VSRV9BTExPQ0FUSU9OIChuKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAvKiBBcHBlbmQgdGhlIHJlc3VsdC4gICovCisgICAgICAgICAgICAgICAgICBtZW1jcHkgKHJlc3VsdCArIGxlbmd0aCwgdG1wLCBjb3VudCAqIHNpemVvZiAoRENIQVJfVCkpOworICAgICAgICAgICAgICAgICAgaWYgKHRtcCAhPSB0bXBidWYpCisgICAgICAgICAgICAgICAgICAgIGZyZWUgKHRtcCk7CisgICAgICAgICAgICAgICAgICBsZW5ndGggKz0gY291bnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFyZ190eXBlIHR5cGUgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS50eXBlOworICAgICAgICAgICAgICAgIGludCBmbGFncyA9IGRwLT5mbGFnczsKKyNpZiAhVVNFX1NOUFJJTlRGIHx8ICFIQVZFX1NOUFJJTlRGX1JFVFZBTF9DOTkgfHwgIURDSEFSX0lTX1RDSEFSIHx8IEVOQUJMRV9VTklTVERJTyB8fCBORUVEX1BSSU5URl9GTEFHX0xFRlRBREpVU1QgfHwgTkVFRF9QUklOVEZfRkxBR19aRVJPIHx8IE5FRURfUFJJTlRGX1VOQk9VTkRFRF9QUkVDSVNJT04KKyAgICAgICAgICAgICAgICBpbnQgaGFzX3dpZHRoOworICAgICAgICAgICAgICAgIHNpemVfdCB3aWR0aDsKKyNlbmRpZgorI2lmICFVU0VfU05QUklOVEYgfHwgIUhBVkVfU05QUklOVEZfUkVUVkFMX0M5OSB8fCBORUVEX1BSSU5URl9VTkJPVU5ERURfUFJFQ0lTSU9OCisgICAgICAgICAgICAgICAgaW50IGhhc19wcmVjaXNpb247CisgICAgICAgICAgICAgICAgc2l6ZV90IHByZWNpc2lvbjsKKyNlbmRpZgorI2lmIE5FRURfUFJJTlRGX1VOQk9VTkRFRF9QUkVDSVNJT04KKyAgICAgICAgICAgICAgICBpbnQgcHJlY19vdXJzZWx2ZXM7CisjZWxzZQorIyAgICAgICAgICAgICAgIGRlZmluZSBwcmVjX291cnNlbHZlcyAwCisjZW5kaWYKKyNpZiBORUVEX1BSSU5URl9GTEFHX0xFRlRBREpVU1QKKyMgICAgICAgICAgICAgICBkZWZpbmUgcGFkX291cnNlbHZlcyAxCisjZWxpZiAhRENIQVJfSVNfVENIQVIgfHwgRU5BQkxFX1VOSVNURElPIHx8IE5FRURfUFJJTlRGX0ZMQUdfWkVSTyB8fCBORUVEX1BSSU5URl9VTkJPVU5ERURfUFJFQ0lTSU9OCisgICAgICAgICAgICAgICAgaW50IHBhZF9vdXJzZWx2ZXM7CisjZWxzZQorIyAgICAgICAgICAgICAgIGRlZmluZSBwYWRfb3Vyc2VsdmVzIDAKKyNlbmRpZgorICAgICAgICAgICAgICAgIFRDSEFSX1QgKmZicDsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcHJlZml4X2NvdW50OworICAgICAgICAgICAgICAgIGludCBwcmVmaXhlc1syXSBJRl9MSU5UICg9IHsgMCB9KTsKKyAgICAgICAgICAgICAgICBpbnQgb3JpZ19lcnJubzsKKyNpZiAhVVNFX1NOUFJJTlRGCisgICAgICAgICAgICAgICAgc2l6ZV90IHRtcF9sZW5ndGg7CisgICAgICAgICAgICAgICAgVENIQVJfVCB0bXBidWZbNzAwXTsKKyAgICAgICAgICAgICAgICBUQ0hBUl9UICp0bXA7CisjZW5kaWYKKworI2lmICFVU0VfU05QUklOVEYgfHwgIUhBVkVfU05QUklOVEZfUkVUVkFMX0M5OSB8fCAhRENIQVJfSVNfVENIQVIgfHwgRU5BQkxFX1VOSVNURElPIHx8IE5FRURfUFJJTlRGX0ZMQUdfTEVGVEFESlVTVCB8fCBORUVEX1BSSU5URl9GTEFHX1pFUk8gfHwgTkVFRF9QUklOVEZfVU5CT1VOREVEX1BSRUNJU0lPTgorICAgICAgICAgICAgICAgIGhhc193aWR0aCA9IDA7CisgICAgICAgICAgICAgICAgd2lkdGggPSAwOworICAgICAgICAgICAgICAgIGlmIChkcC0+d2lkdGhfc3RhcnQgIT0gZHAtPndpZHRoX2VuZCkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRwLT53aWR0aF9hcmdfaW5kZXggIT0gQVJHX05PTkUpCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFyZzsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoYS5hcmdbZHAtPndpZHRoX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ICgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYS5hcmdbZHAtPndpZHRoX2FyZ19pbmRleF0uYS5hX2ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmcgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIkEgbmVnYXRpdmUgZmllbGQgd2lkdGggaXMgdGFrZW4gYXMgYSAnLScgZmxhZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dlZCBieSBhIHBvc2l0aXZlIGZpZWxkIHdpZHRoLiIgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gRkxBR19MRUZUOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gKHVuc2lnbmVkIGludCkgKC1hcmcpOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gYXJnOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZDSEFSX1QgKmRpZ2l0cCA9IGRwLT53aWR0aF9zdGFydDsKKworICAgICAgICAgICAgICAgICAgICAgICAgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSB4c3VtICh4dGltZXMgKHdpZHRoLCAxMCksICpkaWdpdHArKyAtICcwJyk7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZGlnaXRwICE9IGRwLT53aWR0aF9lbmQpOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaGFzX3dpZHRoID0gMTsKKyAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorCisjaWYgIVVTRV9TTlBSSU5URiB8fCAhSEFWRV9TTlBSSU5URl9SRVRWQUxfQzk5IHx8IE5FRURfUFJJTlRGX1VOQk9VTkRFRF9QUkVDSVNJT04KKyAgICAgICAgICAgICAgICBoYXNfcHJlY2lzaW9uID0gMDsKKyAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSA2OworICAgICAgICAgICAgICAgIGlmIChkcC0+cHJlY2lzaW9uX3N0YXJ0ICE9IGRwLT5wcmVjaXNpb25fZW5kKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoZHAtPnByZWNpc2lvbl9hcmdfaW5kZXggIT0gQVJHX05PTkUpCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFyZzsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoYS5hcmdbZHAtPnByZWNpc2lvbl9hcmdfaW5kZXhdLnR5cGUgPT0gVFlQRV9JTlQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGEuYXJnW2RwLT5wcmVjaXNpb25fYXJnX2luZGV4XS5hLmFfaW50OworICAgICAgICAgICAgICAgICAgICAgICAgLyogIkEgbmVnYXRpdmUgcHJlY2lzaW9uIGlzIHRha2VuIGFzIGlmIHRoZSBwcmVjaXNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZXJlIG9taXR0ZWQuIiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmcgPj0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IGFyZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNfcHJlY2lzaW9uID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZDSEFSX1QgKmRpZ2l0cCA9IGRwLT5wcmVjaXNpb25fc3RhcnQgKyAxOworCisgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGRpZ2l0cCAhPSBkcC0+cHJlY2lzaW9uX2VuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0geHN1bSAoeHRpbWVzIChwcmVjaXNpb24sIDEwKSwgKmRpZ2l0cCsrIC0gJzAnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc19wcmVjaXNpb24gPSAxOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgICAgICAgICAgLyogRGVjaWRlIHdoZXRoZXIgdG8gaGFuZGxlIHRoZSBwcmVjaXNpb24gb3Vyc2VsdmVzLiAgKi8KKyNpZiBORUVEX1BSSU5URl9VTkJPVU5ERURfUFJFQ0lTSU9OCisgICAgICAgICAgICAgICAgc3dpdGNoIChkcC0+Y29udmVyc2lvbikKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgJ2QnOiBjYXNlICdpJzogY2FzZSAndSc6CisgICAgICAgICAgICAgICAgICBjYXNlICdvJzoKKyAgICAgICAgICAgICAgICAgIGNhc2UgJ3gnOiBjYXNlICdYJzogY2FzZSAncCc6CisgICAgICAgICAgICAgICAgICAgIHByZWNfb3Vyc2VsdmVzID0gaGFzX3ByZWNpc2lvbiAmJiAocHJlY2lzaW9uID4gMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcHJlY19vdXJzZWx2ZXMgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgICAgICAgICAgLyogRGVjaWRlIHdoZXRoZXIgdG8gcGVyZm9ybSB0aGUgcGFkZGluZyBvdXJzZWx2ZXMuICAqLworI2lmICFORUVEX1BSSU5URl9GTEFHX0xFRlRBREpVU1QgJiYgKCFEQ0hBUl9JU19UQ0hBUiB8fCBFTkFCTEVfVU5JU1RESU8gfHwgTkVFRF9QUklOVEZfRkxBR19aRVJPIHx8IE5FRURfUFJJTlRGX1VOQk9VTkRFRF9QUkVDSVNJT04pCisgICAgICAgICAgICAgICAgc3dpdGNoIChkcC0+Y29udmVyc2lvbikKKyAgICAgICAgICAgICAgICAgIHsKKyMgaWYgIURDSEFSX0lTX1RDSEFSIHx8IEVOQUJMRV9VTklTVERJTworICAgICAgICAgICAgICAgICAgLyogSWYgd2UgbmVlZCBjb252ZXJzaW9uIGZyb20gVENIQVJfVFtdIHRvIERDSEFSX1RbXSwgd2UgbmVlZAorICAgICAgICAgICAgICAgICAgICAgdG8gcGVyZm9ybSB0aGUgcGFkZGluZyBhZnRlciB0aGlzIGNvbnZlcnNpb24uICBGdW5jdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgIHdpdGggdW5pc3RkaW8gZXh0ZW5zaW9ucyBwZXJmb3JtIHRoZSBwYWRkaW5nIGJhc2VkIG9uCisgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgY291bnQgcmF0aGVyIHRoYW4gZWxlbWVudCBjb3VudC4gICovCisgICAgICAgICAgICAgICAgICBjYXNlICdjJzogY2FzZSAncyc6CisjIGVuZGlmCisjIGlmIE5FRURfUFJJTlRGX0ZMQUdfWkVSTworICAgICAgICAgICAgICAgICAgY2FzZSAnZic6IGNhc2UgJ0YnOiBjYXNlICdlJzogY2FzZSAnRSc6IGNhc2UgJ2cnOiBjYXNlICdHJzoKKyAgICAgICAgICAgICAgICAgIGNhc2UgJ2EnOiBjYXNlICdBJzoKKyMgZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgcGFkX291cnNlbHZlcyA9IDE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcGFkX291cnNlbHZlcyA9IHByZWNfb3Vyc2VsdmVzOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorCisjaWYgIVVTRV9TTlBSSU5URgorICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIGEgdGVtcG9yYXJ5IGJ1ZmZlciBvZiBzdWZmaWNpZW50IHNpemUgZm9yIGNhbGxpbmcKKyAgICAgICAgICAgICAgICAgICBzcHJpbnRmLiAgKi8KKyAgICAgICAgICAgICAgICB0bXBfbGVuZ3RoID0KKyAgICAgICAgICAgICAgICAgIE1BWF9ST09NX05FRURFRCAoJmEsIGRwLT5hcmdfaW5kZXgsIGRwLT5jb252ZXJzaW9uLCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgd2lkdGgsIGhhc19wcmVjaXNpb24sIHByZWNpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkX291cnNlbHZlcyk7CisKKyAgICAgICAgICAgICAgICBpZiAodG1wX2xlbmd0aCA8PSBzaXplb2YgKHRtcGJ1ZikgLyBzaXplb2YgKFRDSEFSX1QpKQorICAgICAgICAgICAgICAgICAgdG1wID0gdG1wYnVmOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRtcF9tZW1zaXplID0geHRpbWVzICh0bXBfbGVuZ3RoLCBzaXplb2YgKFRDSEFSX1QpKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoc2l6ZV9vdmVyZmxvd19wICh0bXBfbWVtc2l6ZSkpCisgICAgICAgICAgICAgICAgICAgICAgLyogT3ZlcmZsb3csIHdvdWxkIGxlYWQgdG8gb3V0IG9mIG1lbW9yeS4gICovCisgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXRfb2ZfbWVtb3J5OworICAgICAgICAgICAgICAgICAgICB0bXAgPSAoVENIQVJfVCAqKSBtYWxsb2MgKHRtcF9tZW1zaXplKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgIC8qIE91dCBvZiBtZW1vcnkuICAqLworICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0X29mX21lbW9yeTsKKyAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgICAgICAgICAgLyogQ29uc3RydWN0IHRoZSBmb3JtYXQgc3RyaW5nIGZvciBjYWxsaW5nIHNucHJpbnRmIG9yCisgICAgICAgICAgICAgICAgICAgc3ByaW50Zi4gICovCisgICAgICAgICAgICAgICAgZmJwID0gYnVmOworICAgICAgICAgICAgICAgICpmYnArKyA9ICclJzsKKyNpZiBORUVEX1BSSU5URl9GTEFHX0dST1VQSU5HCisgICAgICAgICAgICAgICAgLyogVGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gZG9lc24ndCBzdXBwb3J0IHRoZSAnIGZsYWcuCisgICAgICAgICAgICAgICAgICAgUHJvZHVjZSBubyBncm91cGluZyBjaGFyYWN0ZXJzIGluIHRoaXMgY2FzZTsgdGhpcyBpcworICAgICAgICAgICAgICAgICAgIGFjY2VwdGFibGUgYmVjYXVzZSB0aGUgZ3JvdXBpbmcgaXMgbG9jYWxlIGRlcGVuZGVudC4gICovCisjZWxzZQorICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIEZMQUdfR1JPVVApCisgICAgICAgICAgICAgICAgICAqZmJwKysgPSAnXCcnOworI2VuZGlmCisgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgRkxBR19MRUZUKQorICAgICAgICAgICAgICAgICAgKmZicCsrID0gJy0nOworICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIEZMQUdfU0hPV1NJR04pCisgICAgICAgICAgICAgICAgICAqZmJwKysgPSAnKyc7CisgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgRkxBR19TUEFDRSkKKyAgICAgICAgICAgICAgICAgICpmYnArKyA9ICcgJzsKKyAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBGTEFHX0FMVCkKKyAgICAgICAgICAgICAgICAgICpmYnArKyA9ICcjJzsKKyNpZiBfX0dMSUJDX18gPj0gMiAmJiAhZGVmaW5lZCBfX1VDTElCQ19fCisgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgRkxBR19MT0NBTElaRUQpCisgICAgICAgICAgICAgICAgICAqZmJwKysgPSAnSSc7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBpZiAoIXBhZF9vdXJzZWx2ZXMpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIEZMQUdfWkVSTykKKyAgICAgICAgICAgICAgICAgICAgICAqZmJwKysgPSAnMCc7CisgICAgICAgICAgICAgICAgICAgIGlmIChkcC0+d2lkdGhfc3RhcnQgIT0gZHAtPndpZHRoX2VuZCkKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbiA9IGRwLT53aWR0aF9lbmQgLSBkcC0+d2lkdGhfc3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgd2lkdGggc3BlY2lmaWNhdGlvbiBpcyBrbm93biB0byBjb25zaXN0IG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHN0YW5kYXJkIEFTQ0lJIGNoYXJhY3RlcnMuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpemVvZiAoRkNIQVJfVCkgPT0gc2l6ZW9mIChUQ0hBUl9UKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSAoZmJwLCBkcC0+d2lkdGhfc3RhcnQsIG4gKiBzaXplb2YgKFRDSEFSX1QpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYnAgKz0gbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRkNIQVJfVCAqbXAgPSBkcC0+d2lkdGhfc3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpmYnArKyA9ICh1bnNpZ25lZCBjaGFyKSAqbXArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoLS1uID4gMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFwcmVjX291cnNlbHZlcykKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRwLT5wcmVjaXNpb25fc3RhcnQgIT0gZHAtPnByZWNpc2lvbl9lbmQpCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4gPSBkcC0+cHJlY2lzaW9uX2VuZCAtIGRwLT5wcmVjaXNpb25fc3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgcHJlY2lzaW9uIHNwZWNpZmljYXRpb24gaXMga25vd24gdG8gY29uc2lzdCBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBzdGFuZGFyZCBBU0NJSSBjaGFyYWN0ZXJzLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaXplb2YgKEZDSEFSX1QpID09IHNpemVvZiAoVENIQVJfVCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkgKGZicCwgZHAtPnByZWNpc2lvbl9zdGFydCwgbiAqIHNpemVvZiAoVENIQVJfVCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZicCArPSBuOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGQ0hBUl9UICptcCA9IGRwLT5wcmVjaXNpb25fc3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpmYnArKyA9ICh1bnNpZ25lZCBjaGFyKSAqbXArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoLS1uID4gMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICAgICAgICB7CisjaWYgSEFWRV9MT05HX0xPTkdfSU5UCisgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVfTE9OR0xPTkdJTlQ6CisgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVfVUxPTkdMT05HSU5UOgorIyBpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCisgICAgICAgICAgICAgICAgICAgICpmYnArKyA9ICdJJzsKKyAgICAgICAgICAgICAgICAgICAgKmZicCsrID0gJzYnOworICAgICAgICAgICAgICAgICAgICAqZmJwKysgPSAnNCc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworIyBlbHNlCisgICAgICAgICAgICAgICAgICAgICpmYnArKyA9ICdsJzsKKyAgICAgICAgICAgICAgICAgICAgLypGQUxMVEhST1VHSCovCisjIGVuZGlmCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRV9MT05HSU5UOgorICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFX1VMT05HSU5UOgorI2lmIEhBVkVfV0lOVF9UCisgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVfV0lERV9DSEFSOgorI2VuZGlmCisjaWYgSEFWRV9XQ0hBUl9UCisgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVfV0lERV9TVFJJTkc6CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgKmZicCsrID0gJ2wnOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRV9MT05HRE9VQkxFOgorICAgICAgICAgICAgICAgICAgICAqZmJwKysgPSAnTCc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICB9CisjaWYgTkVFRF9QUklOVEZfRElSRUNUSVZFX0YKKyAgICAgICAgICAgICAgICBpZiAoZHAtPmNvbnZlcnNpb24gPT0gJ0YnKQorICAgICAgICAgICAgICAgICAgKmZicCA9ICdmJzsKKyAgICAgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICpmYnAgPSBkcC0+Y29udmVyc2lvbjsKKyNpZiBVU0VfU05QUklOVEYKKyMgaWYgISgoKF9fR0xJQkNfXyA+IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAzKSkgJiYgIWRlZmluZWQgX19VQ0xJQkNfXykgfHwgKChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgISBkZWZpbmVkIF9fQ1lHV0lOX18pKQorICAgICAgICAgICAgICAgIGZicFsxXSA9ICclJzsKKyAgICAgICAgICAgICAgICBmYnBbMl0gPSAnbic7CisgICAgICAgICAgICAgICAgZmJwWzNdID0gJ1wwJzsKKyMgZWxzZQorICAgICAgICAgICAgICAgIC8qIE9uIGdsaWJjMiBzeXN0ZW1zIGZyb20gZ2xpYmMgPj0gMi4zIC0gcHJvYmFibHkgYWxzbyBvbGRlcgorICAgICAgICAgICAgICAgICAgIG9uZXMgLSB3ZSBrbm93IHRoYXQgc25wcmludGYncyByZXR1cm4gdmFsdWUgY29uZm9ybXMgdG8KKyAgICAgICAgICAgICAgICAgICBJU08gQyA5OTogdGhlIHRlc3RzIGdsX1NOUFJJTlRGX1JFVFZBTF9DOTkgYW5kCisgICAgICAgICAgICAgICAgICAgZ2xfU05QUklOVEZfVFJVTkNBVElPTl9DOTkgcGFzcy4KKyAgICAgICAgICAgICAgICAgICBUaGVyZWZvcmUgd2UgY2FuIGF2b2lkIHVzaW5nICVuIGluIHRoaXMgc2l0dWF0aW9uLgorICAgICAgICAgICAgICAgICAgIE9uIGdsaWJjMiBzeXN0ZW1zIGZyb20gMjAwNC0xMC0xOCBvciBuZXdlciwgdGhlIHVzZSBvZiAlbgorICAgICAgICAgICAgICAgICAgIGluIGZvcm1hdCBzdHJpbmdzIGluIHdyaXRhYmxlIG1lbW9yeSBtYXkgY3Jhc2ggdGhlIHByb2dyYW0KKyAgICAgICAgICAgICAgICAgICAoaWYgY29tcGlsZWQgd2l0aCBfRk9SVElGWV9TT1VSQ0U9MiksIHNvIHdlIHNob3VsZCBhdm9pZCBpdAorICAgICAgICAgICAgICAgICAgIGluIHRoaXMgc2l0dWF0aW9uLiAgKi8KKyAgICAgICAgICAgICAgICAvKiBPbiBuYXRpdmUgV2luZG93cyBzeXN0ZW1zIChzdWNoIGFzIG1pbmd3KSwgd2UgY2FuIGF2b2lkIHVzaW5nCisgICAgICAgICAgICAgICAgICAgJW4gYmVjYXVzZToKKyAgICAgICAgICAgICAgICAgICAgIC0gQWx0aG91Z2ggdGhlIGdsX1NOUFJJTlRGX1RSVU5DQVRJT05fQzk5IHRlc3QgZmFpbHMsCisgICAgICAgICAgICAgICAgICAgICAgIHNucHJpbnRmIGRvZXMgbm90IHdyaXRlIG1vcmUgdGhhbiB0aGUgc3BlY2lmaWVkIG51bWJlcgorICAgICAgICAgICAgICAgICAgICAgICBvZiBieXRlcy4gKHNucHJpbnRmIChidWYsIDMsICIlZCAlZCIsIDQ1NjcsIDg5KSB3cml0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgJzQnLCAnNScsICc2JyBpbnRvIGJ1Ziwgbm90ICc0JywgJzUnLCAnXDAnLikKKyAgICAgICAgICAgICAgICAgICAgIC0gQWx0aG91Z2ggdGhlIGdsX1NOUFJJTlRGX1JFVFZBTF9DOTkgdGVzdCBmYWlscywgc25wcmludGYKKyAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dzIHVzIHRvIHJlY29nbml6ZSB0aGUgY2FzZSBvZiBhbiBpbnN1ZmZpY2llbnQKKyAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyIHNpemU6IGl0IHJldHVybnMgLTEgaW4gdGhpcyBjYXNlLgorICAgICAgICAgICAgICAgICAgIE9uIG5hdGl2ZSBXaW5kb3dzIHN5c3RlbXMgKHN1Y2ggYXMgbWluZ3cpIHdoZXJlIHRoZSBPUyBpcworICAgICAgICAgICAgICAgICAgIFdpbmRvd3MgVmlzdGEsIHRoZSB1c2Ugb2YgJW4gaW4gZm9ybWF0IHN0cmluZ3MgYnkgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgIGNyYXNoZXMgdGhlIHByb2dyYW0uIFNlZQorICAgICAgICAgICAgICAgICAgICAgPGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MvMjAwNy0wNi9tc2cwMDEyMi5odG1sPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgIDxodHRwOi8vbXNkbjIubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zMTc1NzgyKFZTLjgwKS5hc3B4PgorICAgICAgICAgICAgICAgICAgIFNvIHdlIHNob3VsZCBhdm9pZCAlbiBpbiB0aGlzIHNpdHVhdGlvbi4gICovCisgICAgICAgICAgICAgICAgZmJwWzFdID0gJ1wwJzsKKyMgZW5kaWYKKyNlbHNlCisgICAgICAgICAgICAgICAgZmJwWzFdID0gJ1wwJzsKKyNlbmRpZgorCisgICAgICAgICAgICAgICAgLyogQ29uc3RydWN0IHRoZSBhcmd1bWVudHMgZm9yIGNhbGxpbmcgc25wcmludGYgb3Igc3ByaW50Zi4gICovCisgICAgICAgICAgICAgICAgcHJlZml4X2NvdW50ID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoIXBhZF9vdXJzZWx2ZXMgJiYgZHAtPndpZHRoX2FyZ19pbmRleCAhPSBBUkdfTk9ORSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCEoYS5hcmdbZHAtPndpZHRoX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCisgICAgICAgICAgICAgICAgICAgICAgYWJvcnQgKCk7CisgICAgICAgICAgICAgICAgICAgIHByZWZpeGVzW3ByZWZpeF9jb3VudCsrXSA9IGEuYXJnW2RwLT53aWR0aF9hcmdfaW5kZXhdLmEuYV9pbnQ7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFwcmVjX291cnNlbHZlcyAmJiBkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCAhPSBBUkdfTk9ORSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCEoYS5hcmdbZHAtPnByZWNpc2lvbl9hcmdfaW5kZXhdLnR5cGUgPT0gVFlQRV9JTlQpKQorICAgICAgICAgICAgICAgICAgICAgIGFib3J0ICgpOworICAgICAgICAgICAgICAgICAgICBwcmVmaXhlc1twcmVmaXhfY291bnQrK10gPSBhLmFyZ1tkcC0+cHJlY2lzaW9uX2FyZ19pbmRleF0uYS5hX2ludDsKKyAgICAgICAgICAgICAgICAgIH0KKworI2lmIFVTRV9TTlBSSU5URgorICAgICAgICAgICAgICAgIC8qIFRoZSBTTlBSSU5URiByZXN1bHQgaXMgYXBwZW5kZWQgYWZ0ZXIgcmVzdWx0WzAuLmxlbmd0aF0uCisgICAgICAgICAgICAgICAgICAgVGhlIGxhdHRlciBpcyBhbiBhcnJheSBvZiBEQ0hBUl9UOyBTTlBSSU5URiBhcHBlbmRzIGFuCisgICAgICAgICAgICAgICAgICAgYXJyYXkgb2YgVENIQVJfVCB0byBpdC4gIFRoaXMgaXMgcG9zc2libGUgYmVjYXVzZQorICAgICAgICAgICAgICAgICAgIHNpemVvZiAoVENIQVJfVCkgZGl2aWRlcyBzaXplb2YgKERDSEFSX1QpIGFuZAorICAgICAgICAgICAgICAgICAgIGFsaWdub2YgKFRDSEFSX1QpIDw9IGFsaWdub2YgKERDSEFSX1QpLiAgKi8KKyMgZGVmaW5lIFRDSEFSU19QRVJfRENIQVIgKHNpemVvZiAoRENIQVJfVCkgLyBzaXplb2YgKFRDSEFSX1QpKQorICAgICAgICAgICAgICAgIC8qIEVuc3VyZSB0aGF0IG1heGxlbiBiZWxvdyB3aWxsIGJlID49IDIuICBOZWVkZWQgb24gQmVPUywKKyAgICAgICAgICAgICAgICAgICB3aGVyZSBhbiBzbnByaW50ZigpIHdpdGggbWF4bGVuPT0xIGFjdHMgbGlrZSBzcHJpbnRmKCkuICAqLworICAgICAgICAgICAgICAgIEVOU1VSRV9BTExPQ0FUSU9OICh4c3VtIChsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyICsgVENIQVJTX1BFUl9EQ0hBUiAtIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gVENIQVJTX1BFUl9EQ0hBUikpOworICAgICAgICAgICAgICAgIC8qIFByZXBhcmUgY2hlY2tpbmcgd2hldGhlciBzbnByaW50ZiByZXR1cm5zIHRoZSBjb3VudAorICAgICAgICAgICAgICAgICAgIHZpYSAlbi4gICovCisgICAgICAgICAgICAgICAgKihUQ0hBUl9UICopIChyZXN1bHQgKyBsZW5ndGgpID0gJ1wwJzsKKyNlbmRpZgorCisgICAgICAgICAgICAgICAgb3JpZ19lcnJubyA9IGVycm5vOworCisgICAgICAgICAgICAgICAgZm9yICg7OykKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gLTE7CisKKyNpZiBVU0VfU05QUklOVEYKKyAgICAgICAgICAgICAgICAgICAgaW50IHJldGNvdW50ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1heGxlbiA9IGFsbG9jYXRlZCAtIGxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgLyogU05QUklOVEYgY2FuIGZhaWwgaWYgaXRzIHNlY29uZCBhcmd1bWVudCBpcworICAgICAgICAgICAgICAgICAgICAgICA+IElOVF9NQVguICAqLworICAgICAgICAgICAgICAgICAgICBpZiAobWF4bGVuID4gSU5UX01BWCAvIFRDSEFSU19QRVJfRENIQVIpCisgICAgICAgICAgICAgICAgICAgICAgbWF4bGVuID0gSU5UX01BWCAvIFRDSEFSU19QRVJfRENIQVI7CisgICAgICAgICAgICAgICAgICAgIG1heGxlbiA9IG1heGxlbiAqIFRDSEFSU19QRVJfRENIQVI7CisjIGRlZmluZSBTTlBSSU5URl9CVUYoYXJnKSBcCisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocHJlZml4X2NvdW50KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICByZXRjb3VudCA9IFNOUFJJTlRGICgoVENIQVJfVCAqKSAocmVzdWx0ICsgbGVuZ3RoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4bGVuLCBidWYsICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZywgJmNvdW50KTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldGNvdW50ID0gU05QUklOVEYgKChUQ0hBUl9UICopIChyZXN1bHQgKyBsZW5ndGgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhsZW4sIGJ1ZiwgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4ZXNbMF0sIGFyZywgJmNvdW50KTsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0Y291bnQgPSBTTlBSSU5URiAoKFRDSEFSX1QgKikgKHJlc3VsdCArIGxlbmd0aCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heGxlbiwgYnVmLCAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhlc1swXSwgcHJlZml4ZXNbMV0sIGFyZywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvdW50KTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQgKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICB9CisjZWxzZQorIyBkZWZpbmUgU05QUklOVEZfQlVGKGFyZykgXAorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHByZWZpeF9jb3VudCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSBzcHJpbnRmICh0bXAsIGJ1ZiwgYXJnKTsgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSBzcHJpbnRmICh0bXAsIGJ1ZiwgcHJlZml4ZXNbMF0sIGFyZyk7ICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSBzcHJpbnRmICh0bXAsIGJ1ZiwgcHJlZml4ZXNbMF0sIHByZWZpeGVzWzFdLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgICAgICAgICAgICAgZXJybm8gPSAwOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRV9TQ0hBUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9zY2hhcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU05QUklOVEZfQlVGIChhcmcpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFX1VDSEFSOgorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3VjaGFyOworICAgICAgICAgICAgICAgICAgICAgICAgICBTTlBSSU5URl9CVUYgKGFyZyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVfU0hPUlQ6CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfc2hvcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRV9VU0hPUlQ6CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfdXNob3J0OworICAgICAgICAgICAgICAgICAgICAgICAgICBTTlBSSU5URl9CVUYgKGFyZyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVfSU5UOgorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU05QUklOVEZfQlVGIChhcmcpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFX1VJTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfdWludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU05QUklOVEZfQlVGIChhcmcpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFX0xPTkdJTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9sb25naW50OworICAgICAgICAgICAgICAgICAgICAgICAgICBTTlBSSU5URl9CVUYgKGFyZyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVfVUxPTkdJTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV91bG9uZ2ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU05QUklOVEZfQlVGIChhcmcpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisjaWYgSEFWRV9MT05HX0xPTkdfSU5UCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFX0xPTkdMT05HSU5UOgorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxvbmcgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9sb25nbG9uZ2ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU05QUklOVEZfQlVGIChhcmcpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFX1VMT05HTE9OR0lOVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfdWxvbmdsb25naW50OworICAgICAgICAgICAgICAgICAgICAgICAgICBTTlBSSU5URl9CVUYgKGFyZyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRV9ET1VCTEU6CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfZG91YmxlOworICAgICAgICAgICAgICAgICAgICAgICAgICBTTlBSSU5URl9CVUYgKGFyZyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVfTE9OR0RPVUJMRToKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkb3VibGUgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2xvbmdkb3VibGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRV9DSEFSOgorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2NoYXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworI2lmIEhBVkVfV0lOVF9UCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFX1dJREVfQ0hBUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2ludF90IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV93aWRlX2NoYXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFX1NUUklORzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3N0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU05QUklOVEZfQlVGIChhcmcpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisjaWYgSEFWRV9XQ0hBUl9UCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFX1dJREVfU1RSSU5HOgorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICphcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfd2lkZV9zdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFX1BPSU5URVI6CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9wb2ludGVyOworICAgICAgICAgICAgICAgICAgICAgICAgICBTTlBSSU5URl9CVUYgKGFyZyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQgKCk7CisgICAgICAgICAgICAgICAgICAgICAgfQorCisjaWYgVVNFX1NOUFJJTlRGCisgICAgICAgICAgICAgICAgICAgIC8qIFBvcnRhYmlsaXR5OiBOb3QgYWxsIGltcGxlbWVudGF0aW9ucyBvZiBzbnByaW50ZigpCisgICAgICAgICAgICAgICAgICAgICAgIGFyZSBJU08gQyA5OSBjb21wbGlhbnQuICBEZXRlcm1pbmUgdGhlIG51bWJlciBvZgorICAgICAgICAgICAgICAgICAgICAgICBieXRlcyB0aGF0IHNucHJpbnRmKCkgaGFzIHByb2R1Y2VkIG9yIHdvdWxkIGhhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZWQuICAqLworICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPj0gMCkKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBWZXJpZnkgdGhhdCBzbnByaW50ZigpIGhhcyBOVUwtdGVybWluYXRlZCBpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC4gICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPCBtYXhsZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKFRDSEFSX1QgKikgKHJlc3VsdCArIGxlbmd0aCkpIFtjb3VudF0gIT0gJ1wwJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb3J0YWJpbGl0eSBoYWNrLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRjb3VudCA+IGNvdW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IHJldGNvdW50OworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNucHJpbnRmKCkgZG9lc24ndCB1bmRlcnN0YW5kIHRoZSAnJW4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmUuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZicFsxXSAhPSAnXDAnKQorICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRG9uJ3QgdXNlIHRoZSAnJW4nIGRpcmVjdGl2ZTsgaW5zdGVhZCwgbG9vaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0IHRoZSBzbnByaW50ZigpIHJldHVybiB2YWx1ZS4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJwWzFdID0gJ1wwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9vayBhdCB0aGUgc25wcmludGYoKSByZXR1cm4gdmFsdWUuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRjb3VudCA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisjIGlmICFIQVZFX1NOUFJJTlRGX1JFVFZBTF9DOTkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSFAtVVggMTAuMjAgc25wcmludGYoKSBpcyBkb3VibHkgZGVmaWNpZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlICclbicgZGlyZWN0aXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYW5kKiBpdCByZXR1cm5zIC0xIChyYXRoZXIgdGhhbiB0aGUgbGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgd291bGQgaGF2ZSBiZWVuIHJlcXVpcmVkKSB3aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgaXMgdG9vIHNtYWxsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXQgYSBmYWlsdXJlIGF0IHRoaXMgcG9pbnQgY2FuIGFsc28gY29tZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIG90aGVyIHJlYXNvbnMgdGhhbiBhIHRvbyBzbWFsbCBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2ggYXMgYW4gaW52YWxpZCB3aWRlIHN0cmluZyBhcmd1bWVudCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgJWxzIGRpcmVjdGl2ZSwgb3IgcG9zc2libHkgYW4gaW52YWxpZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdGluZy1wb2ludCBhcmd1bWVudC4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB0bXBfbGVuZ3RoID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVhfUk9PTV9ORUVERUQgKCZhLCBkcC0+YXJnX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHAtPmNvbnZlcnNpb24sIHR5cGUsIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhhc19wcmVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24sIHBhZF9vdXJzZWx2ZXMpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXhsZW4gPCB0bXBfbGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1ha2UgbW9yZSByb29tLiAgQnV0IHRyeSB0byBkbyB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHJlYWxsb2NhdGlvbiBvbmx5IG9uY2UuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJpZ2dlcl9uZWVkID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHN1bSAobGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4c3VtICh0bXBfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ0hBUlNfUEVSX0RDSEFSIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBUQ0hBUlNfUEVSX0RDSEFSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFuZCBhbHdheXMgZ3JvdyBwcm9wb3J0aW9uYWxseS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChUaGVyZSBtYXkgYmUgc2V2ZXJhbCBhcmd1bWVudHMsIGVhY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRpbmcgYSBsaXR0bGUgbW9yZSByb29tIHRoYW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyBvbmUuKSAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBiaWdnZXJfbmVlZDIgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4c3VtICh4dGltZXMgKGFsbG9jYXRlZCwgMiksIDEyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaWdnZXJfbmVlZCA8IGJpZ2dlcl9uZWVkMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlnZ2VyX25lZWQgPSBiaWdnZXJfbmVlZDI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTlNVUkVfQUxMT0NBVElPTiAoYmlnZ2VyX25lZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorIyBlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gcmV0Y291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYKKworICAgICAgICAgICAgICAgICAgICAvKiBBdHRlbXB0IHRvIGhhbmRsZSBmYWlsdXJlLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBTTlBSSU5URiBvciBzcHJpbnRmIGZhaWxlZC4gIFNhdmUgYW5kIHVzZSB0aGUgZXJybm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgaXQgaGFzIHNldCwgaWYgYW55LiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZXN1bHQgPT0gcmVzdWx0YnVmIHx8IHJlc3VsdCA9PSBOVUxMKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAocmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZfbWFsbG9jZWQgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAoYnVmX21hbGxvY2VkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENMRUFOVVAgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJubyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgIChzYXZlZF9lcnJubyAhPSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNhdmVkX2Vycm5vCisgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChkcC0+Y29udmVyc2lvbiA9PSAnYycgfHwgZHAtPmNvbnZlcnNpb24gPT0gJ3MnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IEVJTFNFUQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBFSU5WQUwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgICAgICAgIH0KKworI2lmIFVTRV9TTlBSSU5URgorICAgICAgICAgICAgICAgICAgICAvKiBIYW5kbGUgb3ZlcmZsb3cgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIuCisgICAgICAgICAgICAgICAgICAgICAgIElmIHN1Y2ggYW4gb3ZlcmZsb3cgb2NjdXJzLCBhIEM5OSBjb21wbGlhbnQgc25wcmludGYoKQorICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5zIGEgY291bnQgPj0gbWF4bGVuLiAgSG93ZXZlciwgYSBub24tY29tcGxpYW50CisgICAgICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKCkgZnVuY3Rpb24gcmV0dXJucyBvbmx5IGNvdW50ID0gbWF4bGVuIC0gMS4gIFRvCisgICAgICAgICAgICAgICAgICAgICAgIGNvdmVyIGJvdGggY2FzZXMsIHRlc3Qgd2hldGhlciBjb3VudCA+PSBtYXhsZW4gLSAxLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCBpbnQpIGNvdW50ICsgMSA+PSBtYXhsZW4pCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgbWF4bGVuIGFscmVhZHkgaGFzIGF0dGFpbmVkIGl0cyBhbGxvd2VkIG1heGltdW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0aW5nIG1vcmUgbWVtb3J5IHdpbGwgbm90IGluY3JlYXNlIG1heGxlbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RlYWQgb2YgbG9vcGluZywgYmFpbCBvdXQuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heGxlbiA9PSBJTlRfTUFYIC8gVENIQVJTX1BFUl9EQ0hBUikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdmVyZmxvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5lZWQgYXQgbGVhc3QgKGNvdW50ICsgMSkgKiBzaXplb2YgKFRDSEFSX1QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXMuICAoVGhlICsxIGlzIGZvciB0aGUgdHJhaWxpbmcgTlVMLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXQgYXNrIGZvciAoY291bnQgKyAyKSAqIHNpemVvZiAoVENIQVJfVCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlcywgc28gdGhhdCBpbiB0aGUgbmV4dCByb3VuZCwgd2UgbGlrZWx5IGdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4bGVuID4gKHVuc2lnbmVkIGludCkgY291bnQgKyAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNvIHdlIGRvbid0IGdldCBoZXJlIGFnYWluLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuZCBhbGxvY2F0ZSBwcm9wb3J0aW9uYWxseSwgdG8gYXZvaWQgbG9vcGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0ZXJuYWxseSBpZiBzbnByaW50ZigpIHJlcG9ydHMgYSB0b28gc21hbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudC4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1heCAoeHN1bSAobGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIGNvdW50ICsgMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgVENIQVJTX1BFUl9EQ0hBUiAtIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIFRDSEFSU19QRVJfRENIQVIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHRpbWVzIChhbGxvY2F0ZWQsIDIpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOU1VSRV9BTExPQ0FUSU9OIChuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorCisjaWYgTkVFRF9QUklOVEZfVU5CT1VOREVEX1BSRUNJU0lPTgorICAgICAgICAgICAgICAgICAgICBpZiAocHJlY19vdXJzZWx2ZXMpCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogSGFuZGxlIHRoZSBwcmVjaXNpb24uICAqLworICAgICAgICAgICAgICAgICAgICAgICAgVENIQVJfVCAqcHJlY19wdHIgPQorIyBpZiBVU0VfU05QUklOVEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKFRDSEFSX1QgKikgKHJlc3VsdCArIGxlbmd0aCk7CisjIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wOworIyBlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHByZWZpeF9jb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtb3ZlOworCisgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhfY291bnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgLyogUHV0IHRoZSBhZGRpdGlvbmFsIHplcm9lcyBhZnRlciB0aGUgc2lnbi4gICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPj0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICgqcHJlY19wdHIgPT0gJy0nIHx8ICpwcmVjX3B0ciA9PSAnKycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKnByZWNfcHRyID09ICcgJykpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeF9jb3VudCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBQdXQgdGhlIGFkZGl0aW9uYWwgemVyb2VzIGFmdGVyIHRoZSAweCBwcmVmaXggaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbGFncyAmIEZMQUdfQUxUKSB8fCAoZHAtPmNvbnZlcnNpb24gPT0gJ3AnKS4gICovCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb3VudCA+PSAyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmVjX3B0clswXSA9PSAnMCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChwcmVjX3B0clsxXSA9PSAneCcgfHwgcHJlY19wdHJbMV0gPT0gJ1gnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4X2NvdW50ID0gMjsKKworICAgICAgICAgICAgICAgICAgICAgICAgbW92ZSA9IGNvdW50IC0gcHJlZml4X2NvdW50OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZWNpc2lvbiA+IG1vdmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnNlcnQgemVyb2VzLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5zZXJ0ID0gcHJlY2lzaW9uIC0gbW92ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ0hBUl9UICpwcmVjX2VuZDsKKworIyBpZiBVU0VfU05QUklOVEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbiA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4c3VtIChsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY291bnQgKyBpbnNlcnQgKyBUQ0hBUlNfUEVSX0RDSEFSIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gVENIQVJTX1BFUl9EQ0hBUik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoICs9IChjb3VudCArIFRDSEFSU19QRVJfRENIQVIgLSAxKSAvIFRDSEFSU19QRVJfRENIQVI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5TVVJFX0FMTE9DQVRJT04gKG4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCAtPSAoY291bnQgKyBUQ0hBUlNfUEVSX0RDSEFSIC0gMSkgLyBUQ0hBUlNfUEVSX0RDSEFSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNfcHRyID0gKFRDSEFSX1QgKikgKHJlc3VsdCArIGxlbmd0aCk7CisjIGVuZGlmCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjX2VuZCA9IHByZWNfcHRyICsgY291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY19wdHIgKz0gcHJlZml4X2NvdW50OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHByZWNfZW5kID4gcHJlY19wdHIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNfZW5kLS07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNfZW5kW2luc2VydF0gPSBwcmVjX2VuZFswXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNfZW5kICs9IGluc2VydDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi0tcHJlY19lbmQgPSAnMCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHByZWNfZW5kID4gcHJlY19wdHIpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gaW5zZXJ0OworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmCisKKyNpZiAhVVNFX1NOUFJJTlRGCisgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA+PSB0bXBfbGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICAgIC8qIHRtcF9sZW5ndGggd2FzIGluY29ycmVjdGx5IGNhbGN1bGF0ZWQgLSBmaXggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSBhYm92ZSEgICovCisgICAgICAgICAgICAgICAgICAgICAgYWJvcnQgKCk7CisjZW5kaWYKKworI2lmICFEQ0hBUl9JU19UQ0hBUgorICAgICAgICAgICAgICAgICAgICAvKiBDb252ZXJ0IGZyb20gVENIQVJfVFtdIHRvIERDSEFSX1RbXS4gICovCisgICAgICAgICAgICAgICAgICAgIGlmIChkcC0+Y29udmVyc2lvbiA9PSAnYycgfHwgZHAtPmNvbnZlcnNpb24gPT0gJ3MnKQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHR5cGUgPSBUWVBFX0NIQVIgb3IgVFlQRV9XSURFX0NIQVIgb3IgVFlQRV9TVFJJTkcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRZUEVfV0lERV9TVFJJTkcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVzdWx0IHN0cmluZyBpcyBub3QgY2VydGFpbmx5IEFTQ0lJLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRDSEFSX1QgKnRtcHNyYzsKKyAgICAgICAgICAgICAgICAgICAgICAgIERDSEFSX1QgKnRtcGRzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB0bXBkc3RfbGVuOworICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBjb2RlIGFzc3VtZXMgdGhhdCBUQ0hBUl9UIGlzICdjaGFyJy4gICovCisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJpZnkgKHNpemVvZiAoVENIQVJfVCkgPT0gMSk7CisjIGlmIFVTRV9TTlBSSU5URgorICAgICAgICAgICAgICAgICAgICAgICAgdG1wc3JjID0gKFRDSEFSX1QgKikgKHJlc3VsdCArIGxlbmd0aCk7CisjIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcHNyYyA9IHRtcDsKKyMgZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcGRzdCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgIERDSEFSX0NPTlZfRlJPTV9FTkNPRElORyAobG9jYWxlX2NoYXJzZXQgKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbnZlaF9xdWVzdGlvbl9tYXJrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHNyYywgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAmdG1wZHN0X2xlbik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wZHN0ID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZXN1bHQgPT0gcmVzdWx0YnVmIHx8IHJlc3VsdCA9PSBOVUxMKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUgKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1Zl9tYWxsb2NlZCAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAoYnVmX21hbGxvY2VkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTEVBTlVQICgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vID0gc2F2ZWRfZXJybm87CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIEVOU1VSRV9BTExPQ0FUSU9OICh4c3VtIChsZW5ndGgsIHRtcGRzdF9sZW4pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERDSEFSX0NQWSAocmVzdWx0ICsgbGVuZ3RoLCB0bXBkc3QsIHRtcGRzdF9sZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAodG1wZHN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gdG1wZHN0X2xlbjsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgcmVzdWx0IHN0cmluZyBpcyBBU0NJSS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbXBsZSAxOjEgY29udmVyc2lvbi4gICovCisjIGlmIFVTRV9TTlBSSU5URgorICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgc2l6ZW9mIChEQ0hBUl9UKSA9PSBzaXplb2YgKFRDSEFSX1QpLCBpdCdzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vLW9wIGNvbnZlcnNpb24sIGluLXBsYWNlIG9uIHRoZSBhcnJheSBzdGFydGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQgKHJlc3VsdCArIGxlbmd0aCkuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpemVvZiAoRENIQVJfVCkgIT0gc2l6ZW9mIChUQ0hBUl9UKSkKKyMgZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRDSEFSX1QgKnRtcHNyYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQ0hBUl9UICp0bXBkc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG47CisKKyMgaWYgVVNFX1NOUFJJTlRGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSByZXN1bHRidWYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHNyYyA9IChUQ0hBUl9UICopIChyZXN1bHQgKyBsZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFTlNVUkVfQUxMT0NBVElPTiB3aWxsIG5vdCBtb3ZlIHRtcHNyYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmVjYXVzZSBpdCdzIHBhcnQgb2YgcmVzdWx0YnVmKS4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOU1VSRV9BTExPQ0FUSU9OICh4c3VtIChsZW5ndGgsIGNvdW50KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFTlNVUkVfQUxMT0NBVElPTiB3aWxsIG1vdmUgdGhlIGFycmF5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiZWNhdXNlIGl0IHVzZXMgcmVhbGxvYygpLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5TVVJFX0FMTE9DQVRJT04gKHhzdW0gKGxlbmd0aCwgY291bnQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wc3JjID0gKFRDSEFSX1QgKikgKHJlc3VsdCArIGxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisjIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBzcmMgPSB0bXA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5TVVJFX0FMTE9DQVRJT04gKHhzdW0gKGxlbmd0aCwgY291bnQpKTsKKyMgZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBkc3QgPSByZXN1bHQgKyBsZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29weSBiYWNrd2FyZHMsIGJlY2F1c2Ugb2Ygb3ZlcmxhcHBpbmcuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHNyYyArPSBjb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBkc3QgKz0gY291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gY291bnQ7IG4gPiAwOyBuLS0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLS10bXBkc3QgPSAodW5zaWduZWQgY2hhcikgKi0tdG1wc3JjOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmCisKKyNpZiBEQ0hBUl9JU19UQ0hBUiAmJiAhVVNFX1NOUFJJTlRGCisgICAgICAgICAgICAgICAgICAgIC8qIE1ha2Ugcm9vbSBmb3IgdGhlIHJlc3VsdC4gICovCisgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IGFsbG9jYXRlZCAtIGxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWVkIGF0IGxlYXN0IGNvdW50IGVsZW1lbnRzLiAgQnV0IGFsbG9jYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wb3J0aW9uYWxseS4gICovCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbiA9CisgICAgICAgICAgICAgICAgICAgICAgICAgIHhtYXggKHhzdW0gKGxlbmd0aCwgY291bnQpLCB4dGltZXMgKGFsbG9jYXRlZCwgMikpOworCisgICAgICAgICAgICAgICAgICAgICAgICBFTlNVUkVfQUxMT0NBVElPTiAobik7CisgICAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgICAgICAgICAgICAgLyogSGVyZSBjb3VudCA8PSBhbGxvY2F0ZWQgLSBsZW5ndGguICAqLworCisgICAgICAgICAgICAgICAgICAgIC8qIFBlcmZvcm0gcGFkZGluZy4gICovCisjaWYgIURDSEFSX0lTX1RDSEFSIHx8IEVOQUJMRV9VTklTVERJTyB8fCBORUVEX1BSSU5URl9GTEFHX0xFRlRBREpVU1QgfHwgTkVFRF9QUklOVEZfRkxBR19aRVJPIHx8IE5FRURfUFJJTlRGX1VOQk9VTkRFRF9QUkVDSVNJT04KKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhZF9vdXJzZWx2ZXMgJiYgaGFzX3dpZHRoKQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB3OworIyBpZiBFTkFCTEVfVU5JU1RESU8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHNpZGUgUE9TSVgsIGl0J3MgcHJlZmVyYWJsZSB0byBjb21wYXJlIHRoZSB3aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdhaW5zdCB0aGUgbnVtYmVyIG9mIF9jaGFyYWN0ZXJzXyBvZiB0aGUgY29udmVydGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS4gICovCisgICAgICAgICAgICAgICAgICAgICAgICB3ID0gRENIQVJfTUJTTkxFTiAocmVzdWx0ICsgbGVuZ3RoLCBjb3VudCk7CisjIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSB3aWR0aCBpcyBjb21wYXJlZCBhZ2FpbnN0IHRoZSBudW1iZXIgb2YgX2J5dGVzXworICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGNvbnZlcnRlZCB2YWx1ZSwgc2F5cyBQT1NJWC4gICovCisgICAgICAgICAgICAgICAgICAgICAgICB3ID0gY291bnQ7CisjIGVuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodyA8IHdpZHRoKQorICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBhZCA9IHdpZHRoIC0gdzsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1ha2Ugcm9vbSBmb3IgdGhlIHJlc3VsdC4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhzdW0gKGNvdW50LCBwYWQpID4gYWxsb2NhdGVkIC0gbGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWVkIGF0IGxlYXN0IGNvdW50ICsgcGFkIGVsZW1lbnRzLiAgQnV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRlIHByb3BvcnRpb25hbGx5LiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtYXggKHhzdW0zIChsZW5ndGgsIGNvdW50LCBwYWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh0aW1lcyAoYWxsb2NhdGVkLCAyKSk7CisKKyMgaWYgVVNFX1NOUFJJTlRGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCArPSBjb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5TVVJFX0FMTE9DQVRJT04gKG4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggLT0gY291bnQ7CisjIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5TVVJFX0FMTE9DQVRJT04gKG4pOworIyBlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhlcmUgY291bnQgKyBwYWQgPD0gYWxsb2NhdGVkIC0gbGVuZ3RoLiAgKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyMgaWYgIURDSEFSX0lTX1RDSEFSIHx8IFVTRV9TTlBSSU5URgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRENIQVJfVCAqIGNvbnN0IHJwID0gcmVzdWx0ICsgbGVuZ3RoOworIyBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQ0hBUl9UICogY29uc3QgcnAgPSB0bXA7CisjIGVuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQ0hBUl9UICpwID0gcnAgKyBjb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERDSEFSX1QgKmVuZCA9IHAgKyBwYWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQ0hBUl9UICpwYWRfcHRyOworIyBpZiAhRENIQVJfSVNfVENIQVIgfHwgRU5BQkxFX1VOSVNURElPCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHAtPmNvbnZlcnNpb24gPT0gJ2MnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZHAtPmNvbnZlcnNpb24gPT0gJ3MnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBObyB6ZXJvLXBhZGRpbmcgZm9yIHN0cmluZyBkaXJlY3RpdmVzLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkX3B0ciA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisjIGVuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRfcHRyID0gKCpycCA9PSAnLScgPyBycCArIDEgOiBycCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gemVyby1wYWRkaW5nIG9mICJpbmYiIGFuZCAibmFuIi4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgqcGFkX3B0ciA+PSAnQScgJiYgKnBhZF9wdHIgPD0gJ1onKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKnBhZF9wdHIgPj0gJ2EnICYmICpwYWRfcHRyIDw9ICd6JykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRfcHRyID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIGdlbmVyYXRlZCBzdHJpbmcgbm93IGV4dGVuZHMgZnJvbSBycCB0byBwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgemVybyBwYWRkaW5nIGluc2VydGlvbiBwb2ludCBiZWluZyBhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkX3B0ci4gICovCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gY291bnQgKyBwYWQ7IC8qID0gZW5kIC0gcnAgKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgRkxBR19MRUZUKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFkIHdpdGggc3BhY2VzIG9uIHRoZSByaWdodC4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHBhZCA+IDA7IHBhZC0tKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICcgJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKGZsYWdzICYgRkxBR19aRVJPKSAmJiBwYWRfcHRyICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQYWQgd2l0aCB6ZXJvZXMuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERDSEFSX1QgKnEgPSBlbmQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocCA+IHBhZF9wdHIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLS1xID0gKi0tcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcGFkID4gMDsgcGFkLS0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gJzAnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQYWQgd2l0aCBzcGFjZXMgb24gdGhlIGxlZnQuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERDSEFSX1QgKnEgPSBlbmQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocCA+IHJwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi0tcSA9ICotLXA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHBhZCA+IDA7IHBhZC0tKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICcgJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgICAgICAgICAgICAgIC8qIEhlcmUgc3RpbGwgY291bnQgPD0gYWxsb2NhdGVkIC0gbGVuZ3RoLiAgKi8KKworI2lmICFEQ0hBUl9JU19UQ0hBUiB8fCBVU0VfU05QUklOVEYKKyAgICAgICAgICAgICAgICAgICAgLyogVGhlIHNucHJpbnRmKCkgcmVzdWx0IGRpZCBmaXQuICAqLworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgLyogQXBwZW5kIHRoZSBzcHJpbnRmKCkgcmVzdWx0LiAgKi8KKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5IChyZXN1bHQgKyBsZW5ndGgsIHRtcCwgY291bnQgKiBzaXplb2YgKERDSEFSX1QpKTsKKyNlbmRpZgorI2lmICFVU0VfU05QUklOVEYKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRtcCAhPSB0bXBidWYpCisgICAgICAgICAgICAgICAgICAgICAgZnJlZSAodG1wKTsKKyNlbmRpZgorCisjaWYgTkVFRF9QUklOVEZfRElSRUNUSVZFX0YKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRwLT5jb252ZXJzaW9uID09ICdGJykKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb252ZXJ0IHRoZSAlZiByZXN1bHQgdG8gdXBwZXIgY2FzZSBmb3IgJUYuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgRENIQVJfVCAqcnAgPSByZXN1bHQgKyBsZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmM7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHJjID0gY291bnQ7IHJjID4gMDsgcmMtLSwgcnArKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpycCA+PSAnYScgJiYgKnJwIDw9ICd6JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcnAgPSAqcnAgLSAnYScgKyAnQSc7CisgICAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoICs9IGNvdW50OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlcnJubyA9IG9yaWdfZXJybm87CisjdW5kZWYgcGFkX291cnNlbHZlcworI3VuZGVmIHByZWNfb3Vyc2VsdmVzCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICB9CisKKyAgICAvKiBBZGQgdGhlIGZpbmFsIE5VTC4gICovCisgICAgRU5TVVJFX0FMTE9DQVRJT04gKHhzdW0gKGxlbmd0aCwgMSkpOworICAgIHJlc3VsdFtsZW5ndGhdID0gJ1wwJzsKKworICAgIGlmIChyZXN1bHQgIT0gcmVzdWx0YnVmICYmIGxlbmd0aCArIDEgPCBhbGxvY2F0ZWQpCisgICAgICB7CisgICAgICAgIC8qIFNocmluayB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpZiBwb3NzaWJsZS4gICovCisgICAgICAgIERDSEFSX1QgKm1lbW9yeTsKKworICAgICAgICBtZW1vcnkgPSAoRENIQVJfVCAqKSByZWFsbG9jIChyZXN1bHQsIChsZW5ndGggKyAxKSAqIHNpemVvZiAoRENIQVJfVCkpOworICAgICAgICBpZiAobWVtb3J5ICE9IE5VTEwpCisgICAgICAgICAgcmVzdWx0ID0gbWVtb3J5OworICAgICAgfQorCisgICAgaWYgKGJ1Zl9tYWxsb2NlZCAhPSBOVUxMKQorICAgICAgZnJlZSAoYnVmX21hbGxvY2VkKTsKKyAgICBDTEVBTlVQICgpOworICAgICpsZW5ndGhwID0gbGVuZ3RoOworICAgIC8qIE5vdGUgdGhhdCB3ZSBjYW4gcHJvZHVjZSBhIGJpZyBzdHJpbmcgb2YgYSBsZW5ndGggPiBJTlRfTUFYLiAgUE9TSVgKKyAgICAgICBzYXlzIHRoYXQgc25wcmludGYoKSBmYWlscyB3aXRoIGVycm5vID0gRU9WRVJGTE9XIGluIHRoaXMgY2FzZSwgYnV0CisgICAgICAgdGhhdCdzIG9ubHkgYmVjYXVzZSBzbnByaW50ZigpIHJldHVybnMgYW4gJ2ludCcuICBUaGlzIGZ1bmN0aW9uIGRvZXMKKyAgICAgICBub3QgaGF2ZSB0aGlzIGxpbWl0YXRpb24uICAqLworICAgIHJldHVybiByZXN1bHQ7CisKKyNpZiBVU0VfU05QUklOVEYKKyAgb3ZlcmZsb3c6CisgICAgaWYgKCEocmVzdWx0ID09IHJlc3VsdGJ1ZiB8fCByZXN1bHQgPT0gTlVMTCkpCisgICAgICBmcmVlIChyZXN1bHQpOworICAgIGlmIChidWZfbWFsbG9jZWQgIT0gTlVMTCkKKyAgICAgIGZyZWUgKGJ1Zl9tYWxsb2NlZCk7CisgICAgQ0xFQU5VUCAoKTsKKyAgICBlcnJubyA9IEVPVkVSRkxPVzsKKyAgICByZXR1cm4gTlVMTDsKKyNlbmRpZgorCisgIG91dF9vZl9tZW1vcnk6CisgICAgaWYgKCEocmVzdWx0ID09IHJlc3VsdGJ1ZiB8fCByZXN1bHQgPT0gTlVMTCkpCisgICAgICBmcmVlIChyZXN1bHQpOworICAgIGlmIChidWZfbWFsbG9jZWQgIT0gTlVMTCkKKyAgICAgIGZyZWUgKGJ1Zl9tYWxsb2NlZCk7CisgIG91dF9vZl9tZW1vcnlfMToKKyAgICBDTEVBTlVQICgpOworICAgIGVycm5vID0gRU5PTUVNOworICAgIHJldHVybiBOVUxMOworICB9Cit9CisKKyN1bmRlZiBNQVhfUk9PTV9ORUVERUQKKyN1bmRlZiBUQ0hBUlNfUEVSX0RDSEFSCisjdW5kZWYgU05QUklOVEYKKyN1bmRlZiBVU0VfU05QUklOVEYKKyN1bmRlZiBEQ0hBUl9TRVQKKyN1bmRlZiBEQ0hBUl9DUFkKKyN1bmRlZiBQUklOVEZfUEFSU0UKKyN1bmRlZiBESVJFQ1RJVkVTCisjdW5kZWYgRElSRUNUSVZFCisjdW5kZWYgRENIQVJfSVNfVENIQVIKKyN1bmRlZiBUQ0hBUl9UCisjdW5kZWYgRENIQVJfVAorI3VuZGVmIEZDSEFSX1QKKyN1bmRlZiBWQVNOUFJJTlRGCmRpZmYgLS1naXQgYS9saWIvdmFzbnByaW50Zi5oIGIvbGliL3Zhc25wcmludGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDg2OTE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3Zhc25wcmludGYuaApAQCAtMCwwICsxLDc5IEBACisvKiB2c3ByaW50ZiB3aXRoIGF1dG9tYXRpYyBtZW1vcnkgYWxsb2NhdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDA0LCAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBfVkFTTlBSSU5URl9ICisjZGVmaW5lIF9WQVNOUFJJTlRGX0gKKworLyogR2V0IHZhX2xpc3QuICAqLworI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisvKiBHZXQgc2l6ZV90LiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLyogVGhlIF9fYXR0cmlidXRlX18gZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDIuNSBhbmQgbGF0ZXIuCisgICBUaGUgX18tcHJvdGVjdGVkIHZhcmlhbnRzIG9mIHRoZSBhdHRyaWJ1dGVzICdmb3JtYXQnIGFuZCAncHJpbnRmJyBhcmUKKyAgIGFjY2VwdGVkIGJ5IGdjYyB2ZXJzaW9ucyAyLjYuNCAoZWZmZWN0aXZlbHkgMi43KSBhbmQgbGF0ZXIuCisgICBXZSBlbmFibGUgX0dMX0FUVFJJQlVURV9GT1JNQVQgb25seSBpZiB0aGVzZSBhcmUgc3VwcG9ydGVkIHRvbywgYmVjYXVzZQorICAgZ251bGliIGFuZCBsaWJpbnRsIGRvICcjZGVmaW5lIHByaW50ZiBfX3ByaW50Zl9fJyB3aGVuIHRoZXkgb3ZlcnJpZGUKKyAgIHRoZSAncHJpbnRmJyBmdW5jdGlvbi4gICovCisjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDcpCisjIGRlZmluZSBfR0xfQVRUUklCVVRFX0ZPUk1BVChzcGVjKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyBzcGVjKSkKKyNlbHNlCisjIGRlZmluZSBfR0xfQVRUUklCVVRFX0ZPUk1BVChzcGVjKSAvKiBlbXB0eSAqLworI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogV3JpdGUgZm9ybWF0dGVkIG91dHB1dCB0byBhIHN0cmluZyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgd2l0aCBtYWxsb2MoKS4KKyAgIFlvdSBjYW4gcGFzcyBhIHByZWFsbG9jYXRlZCBidWZmZXIgZm9yIHRoZSByZXN1bHQgaW4gUkVTVUxUQlVGIGFuZCBpdHMKKyAgIHNpemUgaW4gKkxFTkdUSFA7IG90aGVyd2lzZSB5b3UgcGFzcyBSRVNVTFRCVUYgPSBOVUxMLgorICAgSWYgc3VjY2Vzc2Z1bCwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBzdHJpbmcgKHRoaXMgbWF5IGJlID0gUkVTVUxUQlVGCisgICBpZiBubyBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIHdhcyBuZWNlc3NhcnkpIGFuZCBzZXQgKkxFTkdUSFAgdG8gdGhlCisgICBudW1iZXIgb2YgcmVzdWx0aW5nIGJ5dGVzLCBleGNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gIFVwb24gZXJyb3IsIHNldAorICAgZXJybm8gYW5kIHJldHVybiBOVUxMLgorCisgICBXaGVuIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gb2NjdXJzLCB0aGUgcHJlYWxsb2NhdGVkIGJ1ZmZlciBpcyBsZWZ0CisgICBhbG9uZSAod2l0aCBwb3NzaWJseSBtb2RpZmllZCBjb250ZW50cykuICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZQorICAgYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBvciBzdGFjay1hbGxvY2F0ZWQgYnVmZmVyLCBsaWtlIHRoaXM6CisKKyAgICAgICAgICBjaGFyIGJ1ZlsxMDBdOworICAgICAgICAgIHNpemVfdCBsZW4gPSBzaXplb2YgKGJ1Zik7CisgICAgICAgICAgY2hhciAqb3V0cHV0ID0gdmFzbnByaW50ZiAoYnVmLCAmbGVuLCBmb3JtYXQsIGFyZ3MpOworICAgICAgICAgIGlmIChvdXRwdXQgPT0gTlVMTCkKKyAgICAgICAgICAgIC4uLiBlcnJvciBoYW5kbGluZyAuLi47CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAuLi4gdXNlIHRoZSBvdXRwdXQgc3RyaW5nIC4uLjsKKyAgICAgICAgICAgICAgaWYgKG91dHB1dCAhPSBidWYpCisgICAgICAgICAgICAgICAgZnJlZSAob3V0cHV0KTsKKyAgICAgICAgICAgIH0KKyAgKi8KKyNpZiBSRVBMQUNFX1ZBU05QUklOVEYKKyMgZGVmaW5lIGFzbnByaW50ZiBycGxfYXNucHJpbnRmCisjIGRlZmluZSB2YXNucHJpbnRmIHJwbF92YXNucHJpbnRmCisjZW5kaWYKK2V4dGVybiBjaGFyICogYXNucHJpbnRmIChjaGFyICpyZXN1bHRidWYsIHNpemVfdCAqbGVuZ3RocCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVQgKChfX3ByaW50Zl9fLCAzLCA0KSk7CitleHRlcm4gY2hhciAqIHZhc25wcmludGYgKGNoYXIgKnJlc3VsdGJ1Ziwgc2l6ZV90ICpsZW5ndGhwLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVCAoKF9fcHJpbnRmX18sIDMsIDApKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9WQVNOUFJJTlRGX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi92Yml0c2V0LmMgYi9saWIvdmJpdHNldC5jCmluZGV4IGQwZmUzMGYuLmZiZTZlN2MgMTAwNjQ0Ci0tLSBhL2xpYi92Yml0c2V0LmMKKysrIGIvbGliL3ZiaXRzZXQuYwpAQCAtMSwxMCArMSwxMiBAQAogLyogVmFyaWFibGUgYXJyYXkgYml0c2V0cy4KLSAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDYsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwogICAgQ29udHJpYnV0ZWQgYnkgTWljaGFlbCBIYXllcyAobS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubnopLgogCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLApAQCAtMTMsMTQgKzE1LDEyIEBACiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxjb25maWcuaD4KIAogI2luY2x1ZGUgInZiaXRzZXQuaCIKKwogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogCmRpZmYgLS1naXQgYS9saWIvdmJpdHNldC5oIGIvbGliL3ZiaXRzZXQuaAppbmRleCBiYWIwMTFjLi41YjNlODEwIDEwMDY0NAotLS0gYS9saWIvdmJpdHNldC5oCisrKyBiL2xpYi92Yml0c2V0LmgKQEAgLTEsMjAgKzEsMjEgQEAKIC8qIEZ1bmN0aW9ucyB0byBzdXBwb3J0IHZiaXRzZXRzLgotICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwogICAgQ29udHJpYnV0ZWQgYnkgTWljaGFlbCBIYXllcyAobS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubnopLgogCi1UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0oYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAotVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi1idXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKLVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi1hbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogI2lmbmRlZiBfVkJJVFNFVF9ICiAjZGVmaW5lIF9WQklUU0VUX0gKZGlmZiAtLWdpdCBhL2xpYi92ZXJpZnkuaCBiL2xpYi92ZXJpZnkuaAppbmRleCBkNjAzYjE3Li4wYzMyMGIxIDEwMDY0NAotLS0gYS9saWIvdmVyaWZ5LmgKKysrIGIvbGliL3ZlcmlmeS5oCkBAIC0xLDExICsxLDExIEBACiAvKiBDb21waWxlLXRpbWUgYXNzZXJ0LWxpa2UgbWFjcm9zLgogCi0gICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCkBAIC0xMywyNiArMTMsNDMgQEAKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAvKiBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0LCBCcnVubyBIYWlibGUsIGFuZCBKaW0gTWV5ZXJpbmcuICAqLwogCi0jaWZuZGVmIFZFUklGWV9ICi0jIGRlZmluZSBWRVJJRllfSCAxCisjaWZuZGVmIF9HTF9WRVJJRllfSAorIyBkZWZpbmUgX0dMX1ZFUklGWV9ICisKKworLyogRGVmaW5lIF9HTF9IQVZFX19TVEFUSUNfQVNTRVJUIHRvIDEgaWYgX1N0YXRpY19hc3NlcnQgd29ya3MgYXMgcGVyIEMxMS4KKyAgIFRoaXMgaXMgc3VwcG9ydGVkIGJ5IEdDQyA0LjYuMCBhbmQgbGF0ZXIsIGluIEMgbW9kZSwgYW5kIGl0cyB1c2UKKyAgIGhlcmUgZ2VuZXJhdGVzIGVhc2llci10by1yZWFkIGRpYWdub3N0aWNzIHdoZW4gdmVyaWZ5IChSKSBmYWlscy4KKworICAgRGVmaW5lIF9HTF9IQVZFX1NUQVRJQ19BU1NFUlQgdG8gMSBpZiBzdGF0aWNfYXNzZXJ0IHdvcmtzIGFzIHBlciBDKysxMS4KKyAgIFRoaXMgd2lsbCBsaWtlbHkgYmUgc3VwcG9ydGVkIGJ5IGZ1dHVyZSBHQ0MgdmVyc2lvbnMsIGluIEMrKyBtb2RlLgorCisgICBVc2UgdGhpcyBvbmx5IHdpdGggR0NDLiAgSWYgd2Ugd2VyZSB3aWxsaW5nIHRvIHNsb3cgJ2NvbmZpZ3VyZScKKyAgIGRvd24gd2UgY291bGQgYWxzbyB1c2UgaXQgd2l0aCBvdGhlciBjb21waWxlcnMsIGJ1dCBzaW5jZSB0aGlzCisgICBhZmZlY3RzIG9ubHkgdGhlIHF1YWxpdHkgb2YgZGlhZ25vc3RpY3MsIHdoeSBib3RoZXI/ICAqLworIyBpZiAoNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDYgPD0gX19HTlVDX01JTk9SX18pKSAmJiAhZGVmaW5lZCBfX2NwbHVzcGx1cworIyAgZGVmaW5lIF9HTF9IQVZFX19TVEFUSUNfQVNTRVJUIDEKKyMgZW5kaWYKKy8qIFRoZSBjb25kaXRpb24gKDk5IDwgX19HTlVDX18pIGlzIHRlbXBvcmFyeSwgdW50aWwgd2Uga25vdyBhYm91dCB0aGUKKyAgIGZpcnN0IEcrKyByZWxlYXNlIHRoYXQgc3VwcG9ydHMgc3RhdGljX2Fzc2VydC4gICovCisjIGlmICg5OSA8IF9fR05VQ19fKSAmJiBkZWZpbmVkIF9fY3BsdXNwbHVzCisjICBkZWZpbmUgX0dMX0hBVkVfU1RBVElDX0FTU0VSVCAxCisjIGVuZGlmCiAKIC8qIEVhY2ggb2YgdGhlc2UgbWFjcm9zIHZlcmlmaWVzIHRoYXQgaXRzIGFyZ3VtZW50IFIgaXMgbm9uemVyby4gIFRvCiAgICBiZSBwb3J0YWJsZSwgUiBzaG91bGQgYmUgYW4gaW50ZWdlciBjb25zdGFudCBleHByZXNzaW9uLiAgVW5saWtlCiAgICBhc3NlcnQgKFIpLCB0aGVyZSBpcyBubyBydW4tdGltZSBvdmVyaGVhZC4KIAotICAgVGhlcmUgYXJlIHR3byBtYWNyb3MsIHNpbmNlIG5vIHNpbmdsZSBtYWNybyBjYW4gYmUgdXNlZCBpbiBhbGwKLSAgIGNvbnRleHRzIGluIEMuICB2ZXJpZnlfdHJ1ZSAoUikgaXMgZm9yIHNjYWxhciBjb250ZXh0cywgaW5jbHVkaW5nCi0gICBpbnRlZ2VyIGNvbnN0YW50IGV4cHJlc3Npb24gY29udGV4dHMuICB2ZXJpZnkgKFIpIGlzIGZvciBkZWNsYXJhdGlvbgotICAgY29udGV4dHMsIGUuZy4sIHRoZSB0b3AgbGV2ZWwuCisgICBJZiBfU3RhdGljX2Fzc2VydCB3b3JrcywgdmVyaWZ5IChSKSB1c2VzIGl0IGRpcmVjdGx5LiAgU2ltaWxhcmx5LAorICAgX0dMX1ZFUklGWV9UUlVFIHdvcmtzIGJ5IHBhY2thZ2luZyBhIF9TdGF0aWNfYXNzZXJ0IGluc2lkZSBhIHN0cnVjdAorICAgdGhhdCBpcyBhbiBvcGVyYW5kIG9mIHNpemVvZi4KIAotICAgU3ltYm9scyBlbmRpbmcgaW4gIl9fIiBhcmUgcHJpdmF0ZSB0byB0aGlzIGhlYWRlci4KLQotICAgVGhlIGNvZGUgYmVsb3cgdXNlcyBzZXZlcmFsIGlkZWFzLgorICAgVGhlIGNvZGUgYmVsb3cgdXNlcyBzZXZlcmFsIGlkZWFzIGZvciBDKysgY29tcGlsZXJzLCBhbmQgZm9yIEMKKyAgIGNvbXBpbGVycyB0aGF0IGRvIG5vdCBzdXBwb3J0IF9TdGF0aWNfYXNzZXJ0OgogCiAgICAqIFRoZSBmaXJzdCBzdGVwIGlzICgoUikgPyAxIDogLTEpLiAgR2l2ZW4gYW4gZXhwcmVzc2lvbiBSLCBvZgogICAgICBpbnRlZ3JhbCBvciBib29sZWFuIG9yIGZsb2F0aW5nLXBvaW50IHR5cGUsIHRoaXMgeWllbGRzIGFuCkBAIC00MCw3ICs1Nyw5IEBACiAgICAgIGNvbnN0YW50IGFuZCBub25uZWdhdGl2ZS4KIAogICAgKiBOZXh0IHRoaXMgZXhwcmVzc2lvbiBXIGlzIHdyYXBwZWQgaW4gYSB0eXBlCi0gICAgIHN0cnVjdCB2ZXJpZnlfdHlwZV9fIHsgdW5zaWduZWQgaW50IHZlcmlmeV9lcnJvcl9pZl9uZWdhdGl2ZV9zaXplX186IFc7IH0uCisgICAgIHN0cnVjdCBfZ2xfdmVyaWZ5X3R5cGUgeworICAgICAgIHVuc2lnbmVkIGludCBfZ2xfdmVyaWZ5X2Vycm9yX2lmX25lZ2F0aXZlOiBXOworICAgICB9LgogICAgICBJZiBXIGlzIG5lZ2F0aXZlLCB0aGlzIHlpZWxkcyBhIGNvbXBpbGUtdGltZSBlcnJvci4gIE5vIGNvbXBpbGVyIGNhbgogICAgICBkZWFsIHdpdGggYSBiaXQtZmllbGQgb2YgbmVnYXRpdmUgc2l6ZS4KIApAQCAtNTQsNyArNzMsNyBAQAogCiAgICAgICAgdm9pZCBmdW5jdGlvbiAoaW50IG4pIHsgdmVyaWZ5IChuIDwgMCk7IH0KIAotICAgKiBGb3IgdGhlIHZlcmlmeSBtYWNybywgdGhlIHN0cnVjdCB2ZXJpZnlfdHlwZV9fIHdpbGwgbmVlZCB0bworICAgKiBGb3IgdGhlIHZlcmlmeSBtYWNybywgdGhlIHN0cnVjdCBfZ2xfdmVyaWZ5X3R5cGUgd2lsbCBuZWVkIHRvCiAgICAgIHNvbWVob3cgYmUgZW1iZWRkZWQgaW50byBhIGRlY2xhcmF0aW9uLiAgVG8gYmUgcG9ydGFibGUsIHRoaXMKICAgICAgZGVjbGFyYXRpb24gbXVzdCBkZWNsYXJlIGFuIG9iamVjdCwgYSBjb25zdGFudCwgYSBmdW5jdGlvbiwgb3IgYQogICAgICB0eXBlZGVmIG5hbWUuICBJZiB0aGUgZGVjbGFyZWQgZW50aXR5IHVzZXMgdGhlIHR5cGUgZGlyZWN0bHksCkBAIC03MCwxMyArODksMTQgQEAKICAgICAgaWYgdGhlIGVudGl0eSBuYW1lcyBhcmUgbm90IGRpc2FtYmlndWF0ZWQuICBBIHdvcmthcm91bmQgaXMgdG8KICAgICAgYXR0YWNoIHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyIHRvIHRoZSBlbnRpdHkgbmFtZToKIAotICAgICAgICNkZWZpbmUgR0xfQ09OQ0FUMCh4LCB5KSB4IyN5Ci0gICAgICAgI2RlZmluZSBHTF9DT05DQVQoeCwgeSkgR0xfQ09OQ0FUMCAoeCwgeSkKLSAgICAgICBleHRlcm4gc3RydWN0IHsuLi59ICogR0xfQ09OQ0FUKGR1bW15LF9fTElORV9fKTsKKyAgICAgICAjZGVmaW5lIF9HTF9DT05DQVQwKHgsIHkpIHgjI3kKKyAgICAgICAjZGVmaW5lIF9HTF9DT05DQVQoeCwgeSkgX0dMX0NPTkNBVDAgKHgsIHkpCisgICAgICAgZXh0ZXJuIHN0cnVjdCB7Li4ufSAqIF9HTF9DT05DQVQgKGR1bW15LCBfX0xJTkVfXyk7CiAKICAgICAgQnV0IHRoaXMgaGFzIHRoZSBwcm9ibGVtIHRoYXQgdHdvIGludm9jYXRpb25zIG9mIHZlcmlmeSBmcm9tCiAgICAgIHdpdGhpbiB0aGUgc2FtZSBtYWNybyB3b3VsZCBjb2xsaWRlLCBzaW5jZSB0aGUgX19MSU5FX18gdmFsdWUKLSAgICAgd291bGQgYmUgdGhlIHNhbWUgZm9yIGJvdGggaW52b2NhdGlvbnMuCisgICAgIHdvdWxkIGJlIHRoZSBzYW1lIGZvciBib3RoIGludm9jYXRpb25zLiAgKFRoZSBHQ0MgX19DT1VOVEVSX18KKyAgICAgbWFjcm8gc29sdmVzIHRoaXMgcHJvYmxlbSwgYnV0IGlzIG5vdCBwb3J0YWJsZS4pCiAKICAgICAgQSBzb2x1dGlvbiBpcyB0byB1c2UgdGhlIHNpemVvZiBvcGVyYXRvci4gIEl0IHlpZWxkcyBhIG51bWJlciwKICAgICAgZ2V0dGluZyByaWQgb2YgdGhlIGlkZW50aXR5IG9mIHRoZSB0eXBlLiAgRGVjbGFyYXRpb25zIGxpa2UKQEAgLTkxLDExICsxMTEsMTEgQEAKICAgICAgV2hpY2ggb2YgdGhlIGZvbGxvd2luZyBhbHRlcm5hdGl2ZXMgY2FuIGJlIHVzZWQ/CiAKICAgICAgICBleHRlcm4gaW50IGR1bW15IFtzaXplb2YgKHN0cnVjdCB7Li4ufSldOwotICAgICAgIGV4dGVybiBpbnQgZHVtbXkgW3NpemVvZiAoc3RydWN0IHZlcmlmeV90eXBlX18gey4uLn0pXTsKKyAgICAgICBleHRlcm4gaW50IGR1bW15IFtzaXplb2YgKHN0cnVjdCBfZ2xfdmVyaWZ5X3R5cGUgey4uLn0pXTsKICAgICAgICBleHRlcm4gdm9pZCBkdW1teSAoaW50IFtzaXplb2YgKHN0cnVjdCB7Li4ufSldKTsKLSAgICAgICBleHRlcm4gdm9pZCBkdW1teSAoaW50IFtzaXplb2YgKHN0cnVjdCB2ZXJpZnlfdHlwZV9fIHsuLi59KV0pOworICAgICAgIGV4dGVybiB2b2lkIGR1bW15IChpbnQgW3NpemVvZiAoc3RydWN0IF9nbF92ZXJpZnlfdHlwZSB7Li4ufSldKTsKICAgICAgICBleHRlcm4gaW50ICgqZHVtbXkgKHZvaWQpKSBbc2l6ZW9mIChzdHJ1Y3Qgey4uLn0pXTsKLSAgICAgICBleHRlcm4gaW50ICgqZHVtbXkgKHZvaWQpKSBbc2l6ZW9mIChzdHJ1Y3QgdmVyaWZ5X3R5cGVfXyB7Li4ufSldOworICAgICAgIGV4dGVybiBpbnQgKCpkdW1teSAodm9pZCkpIFtzaXplb2YgKHN0cnVjdCBfZ2xfdmVyaWZ5X3R5cGUgey4uLn0pXTsKIAogICAgICBJbiB0aGUgc2Vjb25kIGFuZCBzaXh0aCBjYXNlLCB0aGUgc3RydWN0IHR5cGUgaXMgZXhwb3J0ZWQgdG8gdGhlCiAgICAgIG91dGVyIHNjb3BlOyB0d28gc3VjaCBkZWNsYXJhdGlvbnMgdGhlcmVmb3JlIGNvbGxpZGUuICBHQ0Mgd2FybnMKQEAgLTEwNCwzOCArMTI0LDEyMiBAQAogCiAgICAgICAgZXh0ZXJuIGludCAoKmR1bW15ICh2b2lkKSkgW3NpemVvZiAoc3RydWN0IHsuLi59KV07CiAKLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiBleHBsb2l0cyB0aGUgZmFjdCB0aGF0IEdDQyBkb2VzIG5vdCB3YXJuIGFib3V0Ci0gICAgIHRoZSBsYXN0IGRlY2xhcmF0aW9uIG1lbnRpb25lZCBhYm92ZS4gIElmIGEgZnV0dXJlIHZlcnNpb24gb2YgR0NDCi0gICAgIGludHJvZHVjZXMgYSB3YXJuaW5nIGZvciB0aGlzLCB0aGUgcHJvYmxlbSBjb3VsZCBiZSB3b3JrZWQgYXJvdW5kCi0gICAgIGJ5IHVzaW5nIGNvZGUgc3BlY2lhbGl6ZWQgdG8gR0NDLCBlLmcuLDoKKyAgICogR0NDIHdhcm5zIGFib3V0IGR1cGxpY2F0ZSBkZWNsYXJhdGlvbnMgb2YgdGhlIGR1bW15IGZ1bmN0aW9uIGlmCisgICAgIC1XcmVkdW5kYW50LWRlY2xzIGlzIHVzZWQuICBHQ0MgNC4zIGFuZCBsYXRlciBoYXZlIGEgYnVpbHRpbgorICAgICBfX0NPVU5URVJfXyBtYWNybyB0aGF0IGNhbiBsZXQgdXMgZ2VuZXJhdGUgdW5pcXVlIGlkZW50aWZpZXJzIGZvcgorICAgICBlYWNoIGR1bW15IGZ1bmN0aW9uLCB0byBzdXBwcmVzcyB0aGlzIHdhcm5pbmcuCiAKLSAgICAgICAjaWYgNCA8PSBfX0dOVUNfXwotICAgICAgICMgZGVmaW5lIHZlcmlmeShSKSBcCi0JICAgZXh0ZXJuIGludCAoKiB2ZXJpZnlfZnVuY3Rpb25fXyAodm9pZCkpIFwKLQkJICAgICAgW19fYnVpbHRpbl9jb25zdGFudF9wIChSKSAmJiAoUikgPyAxIDogLTFdCi0gICAgICAgI2VuZGlmCisgICAqIFRoaXMgaW1wbGVtZW50YXRpb24gZXhwbG9pdHMgdGhlIGZhY3QgdGhhdCBvbGRlciB2ZXJzaW9ucyBvZiBHQ0MsCisgICAgIHdoaWNoIGRvIG5vdCBzdXBwb3J0IF9TdGF0aWNfYXNzZXJ0LCBhbHNvIGRvIG5vdCB3YXJuIGFib3V0IHRoZQorICAgICBsYXN0IGRlY2xhcmF0aW9uIG1lbnRpb25lZCBhYm92ZS4KKworICAgKiBHQ0Mgd2FybnMgaWYgLVduZXN0ZWQtZXh0ZXJucyBpcyBlbmFibGVkIGFuZCB2ZXJpZnkoKSBpcyB1c2VkCisgICAgIHdpdGhpbiBhIGZ1bmN0aW9uIGJvZHk7IGJ1dCBpbnNpZGUgYSBmdW5jdGlvbiwgeW91IGNhbiBhbHdheXMKKyAgICAgYXJyYW5nZSB0byB1c2UgdmVyaWZ5X2V4cHIoKSBpbnN0ZWFkLgogCiAgICAqIEluIEMrKywgYW55IHN0cnVjdCBkZWZpbml0aW9uIGluc2lkZSBzaXplb2YgaXMgaW52YWxpZC4KICAgICAgVXNlIGEgdGVtcGxhdGUgdHlwZSB0byB3b3JrIGFyb3VuZCB0aGUgcHJvYmxlbS4gICovCiAKKy8qIENvbmNhdGVuYXRlIHR3byBwcmVwcm9jZXNzb3IgdG9rZW5zLiAgKi8KKyMgZGVmaW5lIF9HTF9DT05DQVQoeCwgeSkgX0dMX0NPTkNBVDAgKHgsIHkpCisjIGRlZmluZSBfR0xfQ09OQ0FUMCh4LCB5KSB4IyN5CiAKLS8qIFZlcmlmeSByZXF1aXJlbWVudCBSIGF0IGNvbXBpbGUtdGltZSwgYXMgYW4gaW50ZWdlciBjb25zdGFudCBleHByZXNzaW9uLgotICAgUmV0dXJuIDEuICAqLworLyogX0dMX0NPVU5URVIgaXMgYW4gaW50ZWdlciwgcHJlZmVyYWJseSBvbmUgdGhhdCBjaGFuZ2VzIGVhY2ggdGltZSB3ZQorICAgdXNlIGl0LiAgVXNlIF9fQ09VTlRFUl9fIGlmIGl0IHdvcmtzLCBmYWxsaW5nIGJhY2sgb24gX19MSU5FX18KKyAgIG90aGVyd2lzZS4gIF9fTElORV9fIGlzbid0IHBlcmZlY3QsIGJ1dCBpdCdzIGJldHRlciB0aGFuIGEKKyAgIGNvbnN0YW50LiAgKi8KKyMgaWYgZGVmaW5lZCBfX0NPVU5URVJfXyAmJiBfX0NPVU5URVJfXyAhPSBfX0NPVU5URVJfXworIyAgZGVmaW5lIF9HTF9DT1VOVEVSIF9fQ09VTlRFUl9fCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQ09VTlRFUiBfX0xJTkVfXworIyBlbmRpZgorCisvKiBHZW5lcmF0ZSBhIHN5bWJvbCB3aXRoIHRoZSBnaXZlbiBwcmVmaXgsIG1ha2luZyBpdCB1bmlxdWUgaWYKKyAgIHBvc3NpYmxlLiAgKi8KKyMgZGVmaW5lIF9HTF9HRU5TWU0ocHJlZml4KSBfR0xfQ09OQ0FUIChwcmVmaXgsIF9HTF9DT1VOVEVSKQorCisvKiBWZXJpZnkgcmVxdWlyZW1lbnQgUiBhdCBjb21waWxlLXRpbWUsIGFzIGFuIGludGVnZXIgY29uc3RhbnQgZXhwcmVzc2lvbgorICAgdGhhdCByZXR1cm5zIDEuICBJZiBSIGlzIGZhbHNlLCBmYWlsIGF0IGNvbXBpbGUtdGltZSwgcHJlZmVyYWJseQorICAgd2l0aCBhIGRpYWdub3N0aWMgdGhhdCBpbmNsdWRlcyB0aGUgc3RyaW5nLWxpdGVyYWwgRElBR05PU1RJQy4gICovCisKKyMgZGVmaW5lIF9HTF9WRVJJRllfVFJVRShSLCBESUFHTk9TVElDKSBcCisgICAgKCEhc2l6ZW9mIChfR0xfVkVSSUZZX1RZUEUgKFIsIERJQUdOT1NUSUMpKSkKIAogIyBpZmRlZiBfX2NwbHVzcGx1cworIyAgaWYgIUdOVUxJQl9kZWZpbmVkX3N0cnVjdF9fZ2xfdmVyaWZ5X3R5cGUKIHRlbXBsYXRlIDxpbnQgdz4KLSAgc3RydWN0IHZlcmlmeV90eXBlX18geyB1bnNpZ25lZCBpbnQgdmVyaWZ5X2Vycm9yX2lmX25lZ2F0aXZlX3NpemVfXzogdzsgfTsKLSMgIGRlZmluZSB2ZXJpZnlfdHJ1ZShSKSBcCi0gICAgICghIXNpemVvZiAodmVyaWZ5X3R5cGVfXzwoUikgPyAxIDogLTE+KSkKKyAgc3RydWN0IF9nbF92ZXJpZnlfdHlwZSB7CisgICAgdW5zaWduZWQgaW50IF9nbF92ZXJpZnlfZXJyb3JfaWZfbmVnYXRpdmU6IHc7CisgIH07CisjICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX3N0cnVjdF9fZ2xfdmVyaWZ5X3R5cGUgMQorIyAgZW5kaWYKKyMgIGRlZmluZSBfR0xfVkVSSUZZX1RZUEUoUiwgRElBR05PU1RJQykgXAorICAgIF9nbF92ZXJpZnlfdHlwZTwoUikgPyAxIDogLTE+CisjIGVsaWYgZGVmaW5lZCBfR0xfSEFWRV9fU1RBVElDX0FTU0VSVAorIyAgZGVmaW5lIF9HTF9WRVJJRllfVFlQRShSLCBESUFHTk9TVElDKSBcCisgICAgIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX1N0YXRpY19hc3NlcnQgKFIsIERJQUdOT1NUSUMpOyAgICAgICAgICBcCisgICAgICAgaW50IF9nbF9kdW1teTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfQogIyBlbHNlCi0jICBkZWZpbmUgdmVyaWZ5X3RydWUoUikgXAotICAgICAoISFzaXplb2YgXAotICAgICAgKHN0cnVjdCB7IHVuc2lnbmVkIGludCB2ZXJpZnlfZXJyb3JfaWZfbmVnYXRpdmVfc2l6ZV9fOiAoUikgPyAxIDogLTE7IH0pKQorIyAgZGVmaW5lIF9HTF9WRVJJRllfVFlQRShSLCBESUFHTk9TVElDKSBcCisgICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBfZ2xfdmVyaWZ5X2Vycm9yX2lmX25lZ2F0aXZlOiAoUikgPyAxIDogLTE7IH0KICMgZW5kaWYKIAogLyogVmVyaWZ5IHJlcXVpcmVtZW50IFIgYXQgY29tcGlsZS10aW1lLCBhcyBhIGRlY2xhcmF0aW9uIHdpdGhvdXQgYQorICAgdHJhaWxpbmcgJzsnLiAgSWYgUiBpcyBmYWxzZSwgZmFpbCBhdCBjb21waWxlLXRpbWUsIHByZWZlcmFibHkKKyAgIHdpdGggYSBkaWFnbm9zdGljIHRoYXQgaW5jbHVkZXMgdGhlIHN0cmluZy1saXRlcmFsIERJQUdOT1NUSUMuCisKKyAgIFVuZm9ydHVuYXRlbHksIHVubGlrZSBDMTEsIHRoaXMgaW1wbGVtZW50YXRpb24gbXVzdCBhcHBlYXIgYXMgYW4KKyAgIG9yZGluYXJ5IGRlY2xhcmF0aW9uLCBhbmQgY2Fubm90IGFwcGVhciBpbnNpZGUgc3RydWN0IHsgLi4uIH0uICAqLworCisjIGlmZGVmIF9HTF9IQVZFX19TVEFUSUNfQVNTRVJUCisjICBkZWZpbmUgX0dMX1ZFUklGWSBfU3RhdGljX2Fzc2VydAorIyBlbHNlCisjICBkZWZpbmUgX0dMX1ZFUklGWShSLCBESUFHTk9TVElDKQkJCQkgICAgICAgXAorICAgICBleHRlcm4gaW50ICgqX0dMX0dFTlNZTSAoX2dsX3ZlcmlmeV9mdW5jdGlvbikgKHZvaWQpKQkgICAgICAgXAorICAgICAgIFtfR0xfVkVSSUZZX1RSVUUgKFIsIERJQUdOT1NUSUMpXQorIyBlbmRpZgorCisvKiBfR0xfU1RBVElDX0FTU0VSVF9IIGlzIGRlZmluZWQgaWYgdGhpcyBjb2RlIGlzIGNvcGllZCBpbnRvIGFzc2VydC5oLiAgKi8KKyMgaWZkZWYgX0dMX1NUQVRJQ19BU1NFUlRfSAorIyAgaWYgIWRlZmluZWQgX0dMX0hBVkVfX1NUQVRJQ19BU1NFUlQgJiYgIWRlZmluZWQgX1N0YXRpY19hc3NlcnQKKyMgICBkZWZpbmUgX1N0YXRpY19hc3NlcnQoUiwgRElBR05PU1RJQykgX0dMX1ZFUklGWSAoUiwgRElBR05PU1RJQykKKyMgIGVuZGlmCisjICBpZiAhZGVmaW5lZCBfR0xfSEFWRV9TVEFUSUNfQVNTRVJUICYmICFkZWZpbmVkIHN0YXRpY19hc3NlcnQKKyMgICBkZWZpbmUgc3RhdGljX2Fzc2VydCBfU3RhdGljX2Fzc2VydCAvKiBDMTEgcmVxdWlyZXMgdGhpcyAjZGVmaW5lLiAgKi8KKyMgIGVuZGlmCisjIGVuZGlmCisKKy8qIEBhc3NlcnQuaCBvbWl0IHN0YXJ0QCAgKi8KKworLyogRWFjaCBvZiB0aGVzZSBtYWNyb3MgdmVyaWZpZXMgdGhhdCBpdHMgYXJndW1lbnQgUiBpcyBub256ZXJvLiAgVG8KKyAgIGJlIHBvcnRhYmxlLCBSIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGNvbnN0YW50IGV4cHJlc3Npb24uICBVbmxpa2UKKyAgIGFzc2VydCAoUiksIHRoZXJlIGlzIG5vIHJ1bi10aW1lIG92ZXJoZWFkLgorCisgICBUaGVyZSBhcmUgdHdvIG1hY3Jvcywgc2luY2Ugbm8gc2luZ2xlIG1hY3JvIGNhbiBiZSB1c2VkIGluIGFsbAorICAgY29udGV4dHMgaW4gQy4gIHZlcmlmeV90cnVlIChSKSBpcyBmb3Igc2NhbGFyIGNvbnRleHRzLCBpbmNsdWRpbmcKKyAgIGludGVnZXIgY29uc3RhbnQgZXhwcmVzc2lvbiBjb250ZXh0cy4gIHZlcmlmeSAoUikgaXMgZm9yIGRlY2xhcmF0aW9uCisgICBjb250ZXh0cywgZS5nLiwgdGhlIHRvcCBsZXZlbC4gICovCisKKy8qIFZlcmlmeSByZXF1aXJlbWVudCBSIGF0IGNvbXBpbGUtdGltZSwgYXMgYW4gaW50ZWdlciBjb25zdGFudCBleHByZXNzaW9uLgorICAgUmV0dXJuIDEuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdmVyaWZ5X2V4cHIgKFIsIDEpLgorCisgICB2ZXJpZnlfdHJ1ZSBpcyBvYnNvbGVzY2VudDsgcGxlYXNlIHVzZSB2ZXJpZnlfZXhwciBpbnN0ZWFkLiAgKi8KKworIyBkZWZpbmUgdmVyaWZ5X3RydWUoUikgX0dMX1ZFUklGWV9UUlVFIChSLCAidmVyaWZ5X3RydWUgKCIgI1IgIikiKQorCisvKiBWZXJpZnkgcmVxdWlyZW1lbnQgUiBhdCBjb21waWxlLXRpbWUuICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZQorICAgZXhwcmVzc2lvbiBFLiAgKi8KKworIyBkZWZpbmUgdmVyaWZ5X2V4cHIoUiwgRSkgXAorICAgIChfR0xfVkVSSUZZX1RSVUUgKFIsICJ2ZXJpZnlfZXhwciAoIiAjUiAiLCAiICNFICIpIikgPyAoRSkgOiAoRSkpCisKKy8qIFZlcmlmeSByZXF1aXJlbWVudCBSIGF0IGNvbXBpbGUtdGltZSwgYXMgYSBkZWNsYXJhdGlvbiB3aXRob3V0IGEKICAgIHRyYWlsaW5nICc7Jy4gICovCiAKLSMgZGVmaW5lIHZlcmlmeShSKSBleHRlcm4gaW50ICgqIHZlcmlmeV9mdW5jdGlvbl9fICh2b2lkKSkgW3ZlcmlmeV90cnVlIChSKV0KKyMgZGVmaW5lIHZlcmlmeShSKSBfR0xfVkVSSUZZIChSLCAidmVyaWZ5ICgiICNSICIpIikKKworLyogQGFzc2VydC5oIG9taXQgZW5kQCAgKi8KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvdmZwcmludGYuYyBiL2xpYi92ZnByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMTc3OTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdmZwcmludGYuYwpAQCAtMCwwICsxLDc0IEBACisvKiBGb3JtYXR0ZWQgb3V0cHV0IHRvIGEgc3RyZWFtLgorICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZiAxCisjIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAiZnNldGVyci5oIgorI2luY2x1ZGUgInZhc25wcmludGYuaCIKKworLyogUHJpbnQgZm9ybWF0dGVkIG91dHB1dCB0byB0aGUgc3RyZWFtIEZQLgorICAgUmV0dXJuIHN0cmluZyBsZW5ndGggb2YgZm9ybWF0dGVkIHN0cmluZy4gIE9uIGVycm9yLCByZXR1cm4gYSBuZWdhdGl2ZQorICAgdmFsdWUuICAqLworaW50Cit2ZnByaW50ZiAoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQoreworICBjaGFyIGJ1ZlsyMDAwXTsKKyAgY2hhciAqb3V0cHV0OworICBzaXplX3QgbGVuOworICBzaXplX3QgbGVuYnVmID0gc2l6ZW9mIChidWYpOworCisgIG91dHB1dCA9IHZhc25wcmludGYgKGJ1ZiwgJmxlbmJ1ZiwgZm9ybWF0LCBhcmdzKTsKKyAgbGVuID0gbGVuYnVmOworCisgIGlmICghb3V0cHV0KQorICAgIHsKKyAgICAgIGZzZXRlcnIgKGZwKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgaWYgKGZ3cml0ZSAob3V0cHV0LCAxLCBsZW4sIGZwKSA8IGxlbikKKyAgICB7CisgICAgICBpZiAob3V0cHV0ICE9IGJ1ZikKKyAgICAgICAgeworICAgICAgICAgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOworICAgICAgICAgIGZyZWUgKG91dHB1dCk7CisgICAgICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICAgICAgfQorICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICBpZiAob3V0cHV0ICE9IGJ1ZikKKyAgICBmcmVlIChvdXRwdXQpOworCisgIGlmIChsZW4gPiBJTlRfTUFYKQorICAgIHsKKyAgICAgIGVycm5vID0gRU9WRVJGTE9XOworICAgICAgZnNldGVyciAoZnApOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICByZXR1cm4gbGVuOworfQpkaWZmIC0tZ2l0IGEvbGliL3ZzbnByaW50Zi5jIGIvbGliL3ZzbnByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGI5MDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdnNucHJpbnRmLmMKQEAgLTAsMCArMSw3MCBAQAorLyogRm9ybWF0dGVkIG91dHB1dCB0byBzdHJpbmdzLgorICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IFNpbW9uIEpvc2Vmc3NvbiBhbmQgWW9hbm4gVmFuZG9vcnNlbGFlcmUgPHlvYW5uQHByZWx1ZGUtaWRzLm9yZz4uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmIDEKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJ2YXNucHJpbnRmLmgiCisKKy8qIFByaW50IGZvcm1hdHRlZCBvdXRwdXQgdG8gc3RyaW5nIFNUUi4gIFNpbWlsYXIgdG8gdnNwcmludGYsIGJ1dAorICAgYWRkaXRpb25hbCBsZW5ndGggU0laRSBsaW1pdCBob3cgbXVjaCBpcyB3cml0dGVuIGludG8gU1RSLiAgUmV0dXJucworICAgc3RyaW5nIGxlbmd0aCBvZiBmb3JtYXR0ZWQgc3RyaW5nICh3aGljaCBtYXkgYmUgbGFyZ2VyIHRoYW4gU0laRSkuCisgICBTVFIgbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2Ugbm90aGluZyB3aWxsIGJlIHdyaXR0ZW4uICBPbiBlcnJvciwKKyAgIHJldHVybiBhIG5lZ2F0aXZlIHZhbHVlLiAgKi8KK2ludAordnNucHJpbnRmIChjaGFyICpzdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKK3sKKyAgY2hhciAqb3V0cHV0OworICBzaXplX3QgbGVuOworICBzaXplX3QgbGVuYnVmID0gc2l6ZTsKKworICBvdXRwdXQgPSB2YXNucHJpbnRmIChzdHIsICZsZW5idWYsIGZvcm1hdCwgYXJncyk7CisgIGxlbiA9IGxlbmJ1ZjsKKworICBpZiAoIW91dHB1dCkKKyAgICByZXR1cm4gLTE7CisKKyAgaWYgKG91dHB1dCAhPSBzdHIpCisgICAgeworICAgICAgaWYgKHNpemUpCisgICAgICAgIHsKKyAgICAgICAgICBzaXplX3QgcHJ1bmVkX2xlbiA9IChsZW4gPCBzaXplID8gbGVuIDogc2l6ZSAtIDEpOworICAgICAgICAgIG1lbWNweSAoc3RyLCBvdXRwdXQsIHBydW5lZF9sZW4pOworICAgICAgICAgIHN0cltwcnVuZWRfbGVuXSA9ICdcMCc7CisgICAgICAgIH0KKworICAgICAgZnJlZSAob3V0cHV0KTsKKyAgICB9CisKKyAgaWYgKGxlbiA+IElOVF9NQVgpCisgICAgeworICAgICAgZXJybm8gPSBFT1ZFUkZMT1c7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIHJldHVybiBsZW47Cit9CmRpZmYgLS1naXQgYS9saWIvdnNwcmludGYuYyBiL2xpYi92c3ByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMGFkM2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdnNwcmludGYuYwpAQCAtMCwwICsxLDc3IEBACisvKiBGb3JtYXR0ZWQgb3V0cHV0IHRvIHN0cmluZ3MuCisgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmIDEKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJ2YXNucHJpbnRmLmgiCisKKyNpZm5kZWYgU0laRV9NQVgKKyMgZGVmaW5lIFNJWkVfTUFYICgoc2l6ZV90KSAtMSkKKyNlbmRpZgorCisvKiBQcmludCBmb3JtYXR0ZWQgb3V0cHV0IHRvIHN0cmluZyBTVFIuCisgICBSZXR1cm4gc3RyaW5nIGxlbmd0aCBvZiBmb3JtYXR0ZWQgc3RyaW5nLiAgT24gZXJyb3IsIHJldHVybiBhIG5lZ2F0aXZlCisgICB2YWx1ZS4gICovCitpbnQKK3ZzcHJpbnRmIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQoreworICBjaGFyICpvdXRwdXQ7CisgIHNpemVfdCBsZW47CisgIHNpemVfdCBsZW5idWY7CisKKyAgLyogdmFzbnByaW50ZiBmYWlscyB3aXRoIEVPVkVSRkxPVyB3aGVuIHRoZSBidWZmZXIgc2l6ZSBhcmd1bWVudCBpcyBsYXJnZXIKKyAgICAgdGhhbiBJTlRfTUFYIChpZiB0aGF0IGZpdHMgaW50byBhICdzaXplX3QnIGF0IGFsbCkuCisgICAgIEFsc28gbm90ZSB0aGF0IGdsaWJjJ3MgaWNvbnYgZmFpbHMgd2l0aCBFMkJJRyB3aGVuIHdlIHBhc3MgYSBsZW5ndGggdGhhdAorICAgICBpcyBzbyBsYXJnZSB0aGF0IHN0ciArIGxlbmJ1ZiB3cmFwcyBhcm91bmQsIGkuZS4KKyAgICAgKHVpbnRwdHJfdCkgKHN0ciArIGxlbmJ1ZikgPCAodWludHB0cl90KSBzdHIuCisgICAgIFRoZXJlZm9yZSBzZXQgbGVuYnVmID0gbWluIChTSVpFX01BWCwgSU5UX01BWCwgLSAodWludHB0cl90KSBzdHIgLSAxKS4gICovCisgIGxlbmJ1ZiA9IChTSVpFX01BWCA8IElOVF9NQVggPyBTSVpFX01BWCA6IElOVF9NQVgpOworICBpZiAobGVuYnVmID4gfiAodWludHB0cl90KSBzdHIpCisgICAgbGVuYnVmID0gfiAodWludHB0cl90KSBzdHI7CisKKyAgb3V0cHV0ID0gdmFzbnByaW50ZiAoc3RyLCAmbGVuYnVmLCBmb3JtYXQsIGFyZ3MpOworICBsZW4gPSBsZW5idWY7CisKKyAgaWYgKCFvdXRwdXQpCisgICAgcmV0dXJuIC0xOworCisgIGlmIChvdXRwdXQgIT0gc3RyKQorICAgIHsKKyAgICAgIC8qIGxlbiBpcyBuZWFyIFNJWkVfTUFYLiAgKi8KKyAgICAgIGZyZWUgKG91dHB1dCk7CisgICAgICBlcnJubyA9IEVPVkVSRkxPVzsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgaWYgKGxlbiA+IElOVF9NQVgpCisgICAgeworICAgICAgZXJybm8gPSBFT1ZFUkZMT1c7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIHJldHVybiBsZW47Cit9CmRpZmYgLS1naXQgYS9saWIvdzMyc3Bhd24uaCBiL2xpYi93MzJzcGF3bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YTM5MDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdzMyc3Bhd24uaApAQCAtMCwwICsxLDIyMiBAQAorLyogQXV4aWxpYXJ5IGZ1bmN0aW9ucyBmb3IgdGhlIGNyZWF0aW9uIG9mIHN1YnByb2Nlc3Nlcy4gIE5hdGl2ZSBXaW5kb3dzIEFQSS4KKyAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMy0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4sIDIwMDMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIEdldCBkZWNsYXJhdGlvbnMgb2YgdGhlIG5hdGl2ZSBXaW5kb3dzIEFQSSBmdW5jdGlvbnMuICAqLworI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjaW5jbHVkZSA8d2luZG93cy5oPgorCisvKiBHZXQgX29wZW5fb3NmaGFuZGxlKCkuICAqLworI2luY2x1ZGUgPGlvLmg+CisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworLyogR2V0IF9nZXRfb3NmaGFuZGxlKCkuICAqLworI2luY2x1ZGUgIm1zdmMtbm90aHJvdy5oIgorCisjaW5jbHVkZSAiY2xvZXhlYy5oIgorI2luY2x1ZGUgInhhbGxvYy5oIgorCisvKiBEdXBsaWNhdGVzIGEgZmlsZSBoYW5kbGUsIG1ha2luZyB0aGUgY29weSB1bmluaGVyaXRhYmxlLgorICAgUmV0dXJucyAtMSBmb3IgYSBmaWxlIGhhbmRsZSB0aGF0IGlzIGVxdWl2YWxlbnQgdG8gY2xvc2VkLiAgKi8KK3N0YXRpYyBpbnQKK2R1cF9ub2luaGVyaXQgKGludCBmZCkKK3sKKyAgZmQgPSBkdXBfY2xvZXhlYyAoZmQpOworICBpZiAoZmQgPCAwICYmIGVycm5vID09IEVNRklMRSkKKyAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCBlcnJubywgXygiX29wZW5fb3NmaGFuZGxlIGZhaWxlZCIpKTsKKworICByZXR1cm4gZmQ7Cit9CisKKy8qIFJldHVybnMgYSBmaWxlIGRlc2NyaXB0b3IgZXF1aXZhbGVudCB0byBGRCwgZXhjZXB0IHRoYXQgdGhlIHJlc3VsdGluZyBmaWxlCisgICBkZXNjcmlwdG9yIGlzIG5vbmUgb2YgU1RESU5fRklMRU5PLCBTVERPVVRfRklMRU5PLCBTVERFUlJfRklMRU5PLgorICAgRkQgbXVzdCBiZSBvcGVuIGFuZCBub24taW5oZXJpdGFibGUuICBUaGUgcmVzdWx0IHdpbGwgYmUgbm9uLWluaGVyaXRhYmxlIGFzCisgICB3ZWxsLgorICAgSWYgRkQgPCAwLCBGRCBpdHNlbGYgaXMgcmV0dXJuZWQuICAqLworc3RhdGljIGludAorZmRfc2FmZXJfbm9pbmhlcml0IChpbnQgZmQpCit7CisgIGlmIChTVERJTl9GSUxFTk8gPD0gZmQgJiYgZmQgPD0gU1RERVJSX0ZJTEVOTykKKyAgICB7CisgICAgICAvKiBUaGUgcmVjdXJzaW9uIGRlcHRoIGlzIGF0IG1vc3QgMy4gICovCisgICAgICBpbnQgbmZkID0gZmRfc2FmZXJfbm9pbmhlcml0IChkdXBfbm9pbmhlcml0IChmZCkpOworICAgICAgaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisgICAgICBjbG9zZSAoZmQpOworICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICAgIHJldHVybiBuZmQ7CisgICAgfQorICByZXR1cm4gZmQ7Cit9CisKKy8qIER1cGxpY2F0ZXMgYSBmaWxlIGhhbmRsZSwgbWFraW5nIHRoZSBjb3B5IHVuaW5oZXJpdGFibGUgYW5kIGVuc3VyaW5nIHRoZQorICAgcmVzdWx0IGlzIG5vbmUgb2YgU1RESU5fRklMRU5PLCBTVERPVVRfRklMRU5PLCBTVERFUlJfRklMRU5PLgorICAgUmV0dXJucyAtMSBmb3IgYSBmaWxlIGhhbmRsZSB0aGF0IGlzIGVxdWl2YWxlbnQgdG8gY2xvc2VkLiAgKi8KK3N0YXRpYyBpbnQKK2R1cF9zYWZlcl9ub2luaGVyaXQgKGludCBmZCkKK3sKKyAgcmV0dXJuIGZkX3NhZmVyX25vaW5oZXJpdCAoZHVwX25vaW5oZXJpdCAoZmQpKTsKK30KKworLyogVW5kb2VzIHRoZSBlZmZlY3Qgb2YgVEVNUEZEID0gZHVwX3NhZmVyX25vaW5oZXJpdCAoT1JJR0ZEKTsgICovCitzdGF0aWMgdm9pZAordW5kdXBfc2FmZXJfbm9pbmhlcml0IChpbnQgdGVtcGZkLCBpbnQgb3JpZ2ZkKQoreworICBpZiAodGVtcGZkID49IDApCisgICAgeworICAgICAgaWYgKGR1cDIgKHRlbXBmZCwgb3JpZ2ZkKSA8IDApCisgICAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIGVycm5vLCBfKCJjYW5ub3QgcmVzdG9yZSBmZCAlZDogZHVwMiBmYWlsZWQiKSwKKyAgICAgICAgICAgICAgIG9yaWdmZCk7CisgICAgICBjbG9zZSAodGVtcGZkKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBvcmlnZmQgd2FzIGNsb3NlZCBvciBvcGVuIHRvIG5vIGhhbmRsZSBhdCBhbGwuICBTZXQgaXQgdG8gYSBjbG9zZWQKKyAgICAgICAgIHN0YXRlLiAgVGhpcyBpcyAobmVhcmx5KSBlcXVpdmFsZW50IHRvIHRoZSBvcmlnaW5hbCBzdGF0ZS4gICovCisgICAgICBjbG9zZSAob3JpZ2ZkKTsKKyAgICB9Cit9CisKKy8qIFByZXBhcmVzIGFuIGFyZ3VtZW50IHZlY3RvciBiZWZvcmUgY2FsbGluZyBzcGF3bigpLgorICAgTm90ZSB0aGF0IHNwYXduKCkgZG9lcyBub3QgYnkgaXRzZWxmIGNhbGwgdGhlIGNvbW1hbmQgaW50ZXJwcmV0ZXIKKyAgICAgKGdldGVudiAoIkNPTVNQRUMiKSAhPSBOVUxMID8gZ2V0ZW52ICgiQ09NU1BFQyIpIDoKKyAgICAgICh7IE9TVkVSU0lPTklORk8gdjsgdi5kd09TVmVyc2lvbkluZm9TaXplID0gc2l6ZW9mKE9TVkVSU0lPTklORk8pOworICAgICAgICAgR2V0VmVyc2lvbkV4KCZ2KTsKKyAgICAgICAgIHYuZHdQbGF0Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMl9OVDsKKyAgICAgIH0pID8gImNtZC5leGUiIDogImNvbW1hbmQuY29tIikuCisgICBJbnN0ZWFkIGl0IHNpbXBseSBjb25jYXRlbmF0ZXMgdGhlIGFyZ3VtZW50cywgc2VwYXJhdGVkIGJ5ICcgJywgYW5kIGNhbGxzCisgICBDcmVhdGVQcm9jZXNzKCkuICBXZSBtdXN0IHF1b3RlIHRoZSBhcmd1bWVudHMgc2luY2UgV2luZG93cyBDcmVhdGVQcm9jZXNzKCkKKyAgIGludGVycHJldHMgY2hhcmFjdGVycyBsaWtlICcgJywgJ1x0JywgJ1xcJywgJyInIChidXQgbm90ICc8JyBhbmQgJz4nKSBpbiBhCisgICBzcGVjaWFsIHdheToKKyAgIC0gU3BhY2UgYW5kIHRhYiBhcmUgaW50ZXJwcmV0ZWQgYXMgZGVsaW1pdGVycy4gVGhleSBhcmUgbm90IHRyZWF0ZWQgYXMKKyAgICAgZGVsaW1pdGVycyBpZiB0aGV5IGFyZSBzdXJyb3VuZGVkIGJ5IGRvdWJsZSBxdW90ZXM6ICIuLi4iLgorICAgLSBVbmVzY2FwZWQgZG91YmxlIHF1b3RlcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBpbnB1dC4gVGhlaXIgb25seSBlZmZlY3QgaXMKKyAgICAgdGhhdCB3aXRoaW4gZG91YmxlIHF1b3Rlcywgc3BhY2UgYW5kIHRhYiBhcmUgdHJlYXRlZCBsaWtlIG5vcm1hbAorICAgICBjaGFyYWN0ZXJzLgorICAgLSBCYWNrc2xhc2hlcyBub3QgZm9sbG93ZWQgYnkgZG91YmxlIHF1b3RlcyBhcmUgbm90IHNwZWNpYWwuCisgICAtIEJ1dCAyKm4rMSBiYWNrc2xhc2hlcyBmb2xsb3dlZCBieSBhIGRvdWJsZSBxdW90ZSBiZWNvbWUKKyAgICAgbiBiYWNrc2xhc2hlcyBmb2xsb3dlZCBieSBhIGRvdWJsZSBxdW90ZSAobiA+PSAwKToKKyAgICAgICBcIiAtPiAiCisgICAgICAgXFxcIiAtPiBcIgorICAgICAgIFxcXFxcIiAtPiBcXCIKKyAgIC0gJyonLCAnPycgY2hhcmFjdGVycyBtYXkgZ2V0IGV4cGFuZGVkIHRocm91Z2ggd2lsZGNhcmQgZXhwYW5zaW9uIGluIHRoZQorICAgICBjYWxsZWU6IEJ5IGRlZmF1bHQsIGluIHRoZSBjYWxsZWUsIHRoZSBpbml0aWFsaXphdGlvbiBjb2RlIGJlZm9yZSBtYWluKCkKKyAgICAgdGFrZXMgdGhlIHJlc3VsdCBvZiBHZXRDb21tYW5kTGluZSgpLCB3aWxkY2FyZC1leHBhbmRzIGl0LCBhbmQgcGFzc2VzIGl0CisgICAgIHRvIG1haW4oKS4gVGhlIGV4Y2VwdGlvbnMgdG8gdGhpcyBydWxlIGFyZToKKyAgICAgICAtIHByb2dyYW1zIHRoYXQgaW5zcGVjdCBHZXRDb21tYW5kTGluZSgpIGFuZCBpZ25vcmUgYXJndiwKKyAgICAgICAtIG1pbmd3IHByb2dyYW1zIHRoYXQgaGF2ZSBhIGdsb2JhbCB2YXJpYWJsZSAnaW50IF9DUlRfZ2xvYiA9IDA7JywKKyAgICAgICAtIEN5Z3dpbiBwcm9ncmFtcywgd2hlbiBpbnZva2VkIGZyb20gYSBDeWd3aW4gcHJvZ3JhbS4KKyAqLworI2RlZmluZSBTSEVMTF9TUEVDSUFMX0NIQVJTICJcIlxcIFwwMDFcMDAyXDAwM1wwMDRcMDA1XDAwNlwwMDdcMDEwXDAxMVwwMTJcMDEzXDAxNFwwMTVcMDE2XDAxN1wwMjBcMDIxXDAyMlwwMjNcMDI0XDAyNVwwMjZcMDI3XDAzMFwwMzFcMDMyXDAzM1wwMzRcMDM1XDAzNlwwMzcqPyIKKyNkZWZpbmUgU0hFTExfU1BBQ0VfQ0hBUlMgIiBcMDAxXDAwMlwwMDNcMDA0XDAwNVwwMDZcMDA3XDAxMFwwMTFcMDEyXDAxM1wwMTRcMDE1XDAxNlwwMTdcMDIwXDAyMVwwMjJcMDIzXDAyNFwwMjVcMDI2XDAyN1wwMzBcMDMxXDAzMlwwMzNcMDM0XDAzNVwwMzZcMDM3Igorc3RhdGljIGNoYXIgKioKK3ByZXBhcmVfc3Bhd24gKGNoYXIgKiphcmd2KQoreworICBzaXplX3QgYXJnYzsKKyAgY2hhciAqKm5ld19hcmd2OworICBzaXplX3QgaTsKKworICAvKiBDb3VudCBudW1iZXIgb2YgYXJndW1lbnRzLiAgKi8KKyAgZm9yIChhcmdjID0gMDsgYXJndlthcmdjXSAhPSBOVUxMOyBhcmdjKyspCisgICAgOworCisgIC8qIEFsbG9jYXRlIG5ldyBhcmd1bWVudCB2ZWN0b3IuICAqLworICBuZXdfYXJndiA9IFhOTUFMTE9DICgxICsgYXJnYyArIDEsIGNoYXIgKik7CisKKyAgLyogQWRkIGFuIGVsZW1lbnQgdXBmcm9udCB0aGF0IGNhbiBiZSB1c2VkIHdoZW4gYXJndlswXSB0dXJucyBvdXQgdG8gYmUgYQorICAgICBzY3JpcHQsIG5vdCBhIHByb2dyYW0uCisgICAgIE9uIFVuaXgsIHRoaXMgd291bGQgYmUgIi9iaW4vc2giLiBPbiBuYXRpdmUgV2luZG93cywgInNoIiBpcyBhY3R1YWxseQorICAgICAic2guZXhlIi4gIFdlIGhhdmUgdG8gb21pdCB0aGUgZGlyZWN0b3J5IHBhcnQgYW5kIHJlbHkgb24gdGhlIHNlYXJjaCBpbgorICAgICBQQVRILCBiZWNhdXNlIHRoZSBtaW5ndyAibW91bnQgcG9pbnRzIiBhcmUgbm90IHZpc2libGUgaW5zaWRlIFdpbmRvd3MKKyAgICAgQ3JlYXRlUHJvY2VzcygpLiAgKi8KKyAgKm5ld19hcmd2KysgPSAic2guZXhlIjsKKworICAvKiBQdXQgcXVvdGVkIGFyZ3VtZW50cyBpbnRvIHRoZSBuZXcgYXJndW1lbnQgdmVjdG9yLiAgKi8KKyAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpzdHJpbmcgPSBhcmd2W2ldOworCisgICAgICBpZiAoc3RyaW5nWzBdID09ICdcMCcpCisgICAgICAgIG5ld19hcmd2W2ldID0geHN0cmR1cCAoIlwiXCIiKTsKKyAgICAgIGVsc2UgaWYgKHN0cnBicmsgKHN0cmluZywgU0hFTExfU1BFQ0lBTF9DSEFSUykgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgIGJvb2wgcXVvdGVfYXJvdW5kID0gKHN0cnBicmsgKHN0cmluZywgU0hFTExfU1BBQ0VfQ0hBUlMpICE9IE5VTEwpOworICAgICAgICAgIHNpemVfdCBsZW5ndGg7CisgICAgICAgICAgdW5zaWduZWQgaW50IGJhY2tzbGFzaGVzOworICAgICAgICAgIGNvbnN0IGNoYXIgKnM7CisgICAgICAgICAgY2hhciAqcXVvdGVkX3N0cmluZzsKKyAgICAgICAgICBjaGFyICpwOworCisgICAgICAgICAgbGVuZ3RoID0gMDsKKyAgICAgICAgICBiYWNrc2xhc2hlcyA9IDA7CisgICAgICAgICAgaWYgKHF1b3RlX2Fyb3VuZCkKKyAgICAgICAgICAgIGxlbmd0aCsrOworICAgICAgICAgIGZvciAocyA9IHN0cmluZzsgKnMgIT0gJ1wwJzsgcysrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjaGFyIGMgPSAqczsKKyAgICAgICAgICAgICAgaWYgKGMgPT0gJyInKQorICAgICAgICAgICAgICAgIGxlbmd0aCArPSBiYWNrc2xhc2hlcyArIDE7CisgICAgICAgICAgICAgIGxlbmd0aCsrOworICAgICAgICAgICAgICBpZiAoYyA9PSAnXFwnKQorICAgICAgICAgICAgICAgIGJhY2tzbGFzaGVzKys7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiYWNrc2xhc2hlcyA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKHF1b3RlX2Fyb3VuZCkKKyAgICAgICAgICAgIGxlbmd0aCArPSBiYWNrc2xhc2hlcyArIDE7CisKKyAgICAgICAgICBxdW90ZWRfc3RyaW5nID0gKGNoYXIgKikgeG1hbGxvYyAobGVuZ3RoICsgMSk7CisKKyAgICAgICAgICBwID0gcXVvdGVkX3N0cmluZzsKKyAgICAgICAgICBiYWNrc2xhc2hlcyA9IDA7CisgICAgICAgICAgaWYgKHF1b3RlX2Fyb3VuZCkKKyAgICAgICAgICAgICpwKysgPSAnIic7CisgICAgICAgICAgZm9yIChzID0gc3RyaW5nOyAqcyAhPSAnXDAnOyBzKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNoYXIgYyA9ICpzOworICAgICAgICAgICAgICBpZiAoYyA9PSAnIicpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGo7CisgICAgICAgICAgICAgICAgICBmb3IgKGogPSBiYWNrc2xhc2hlcyArIDE7IGogPiAwOyBqLS0pCisgICAgICAgICAgICAgICAgICAgICpwKysgPSAnXFwnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgKnArKyA9IGM7CisgICAgICAgICAgICAgIGlmIChjID09ICdcXCcpCisgICAgICAgICAgICAgICAgYmFja3NsYXNoZXMrKzsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJhY2tzbGFzaGVzID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAocXVvdGVfYXJvdW5kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgajsKKyAgICAgICAgICAgICAgZm9yIChqID0gYmFja3NsYXNoZXM7IGogPiAwOyBqLS0pCisgICAgICAgICAgICAgICAgKnArKyA9ICdcXCc7CisgICAgICAgICAgICAgICpwKysgPSAnIic7CisgICAgICAgICAgICB9CisgICAgICAgICAgKnAgPSAnXDAnOworCisgICAgICAgICAgbmV3X2FyZ3ZbaV0gPSBxdW90ZWRfc3RyaW5nOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIG5ld19hcmd2W2ldID0gKGNoYXIgKikgc3RyaW5nOworICAgIH0KKyAgbmV3X2FyZ3ZbYXJnY10gPSBOVUxMOworCisgIHJldHVybiBuZXdfYXJndjsKK30KZGlmZiAtLWdpdCBhL2xpYi93YWl0LXByb2Nlc3MuYyBiL2xpYi93YWl0LXByb2Nlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGVkNzkzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3dhaXQtcHJvY2Vzcy5jCkBAIC0wLDAgKzEsMzYxIEBACisvKiBXYWl0aW5nIGZvciBhIHN1YnByb2Nlc3MgdG8gZmluaXNoLgorICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMsIDIwMDUtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAxLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaW5jbHVkZSAid2FpdC1wcm9jZXNzLmgiCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKworI2luY2x1ZGUgImVycm9yLmgiCisjaW5jbHVkZSAiZmF0YWwtc2lnbmFsLmgiCisjaW5jbHVkZSAieGFsbG9jLmgiCisjaW5jbHVkZSAiZ2V0dGV4dC5oIgorCisjZGVmaW5lIF8oc3RyKSBnZXR0ZXh0IChzdHIpCisKKyNkZWZpbmUgU0laRU9GKGEpIChzaXplb2YoYSkgLyBzaXplb2YoYVswXSkpCisKKworI2lmIGRlZmluZWQgX01TQ19WRVIgfHwgZGVmaW5lZCBfX01JTkdXMzJfXworCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKy8qIFRoZSByZXR1cm4gdmFsdWUgb2Ygc3Bhd252cCgpIGlzIHJlYWxseSBhIHByb2Nlc3MgaGFuZGxlIGFzIHJldHVybmVkCisgICBieSBDcmVhdGVQcm9jZXNzKCkuICBUaGVyZWZvcmUgd2UgY2FuIGtpbGwgaXQgdXNpbmcgVGVybWluYXRlUHJvY2Vzcy4gICovCisjZGVmaW5lIGtpbGwocGlkLHNpZykgVGVybWluYXRlUHJvY2VzcyAoKEhBTkRMRSkgKHBpZCksIHNpZykKKworI2VuZGlmCisKKworLyogVHlwZSBvZiBhbiBlbnRyeSBpbiB0aGUgc2xhdmVzIGFycmF5LgorICAgVGhlICd1c2VkJyBiaXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoaXMgZW50cnkgaXMgY3VycmVudGx5IGluIHVzZS4KKyAgIChJZiBwaWRfdCB3YXMgYW4gYXRvbWljIHR5cGUgbGlrZSBzaWdfYXRvbWljX3QsIHdlIGNvdWxkIGp1c3Qgc2V0IHRoZQorICAgJ2NoaWxkJyBmaWVsZCB0byAwIHdoZW4gdW5yZWdpc3RlcmluZyBhIHNsYXZlIHByb2Nlc3MsIGFuZCB3b3VsZG4ndCBuZWVkCisgICB0aGUgJ3VzZWQnIGZpZWxkLikKKyAgIFRoZSAndXNlZCcgYW5kICdjaGlsZCcgZmllbGRzIGFyZSBhY2Nlc3NlZCBmcm9tIHdpdGhpbiB0aGUgY2xlYW51cF9zbGF2ZXMoKQorICAgYWN0aW9uLCB0aGVyZWZvcmUgd2UgbWFyayB0aGVtIGFzICd2b2xhdGlsZScuICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgdm9sYXRpbGUgc2lnX2F0b21pY190IHVzZWQ7CisgIHZvbGF0aWxlIHBpZF90IGNoaWxkOworfQorc2xhdmVzX2VudHJ5X3Q7CisKKy8qIFRoZSByZWdpc3RlcmVkIHNsYXZlIHN1YnByb2Nlc3Nlcy4gICovCitzdGF0aWMgc2xhdmVzX2VudHJ5X3Qgc3RhdGljX3NsYXZlc1szMl07CitzdGF0aWMgc2xhdmVzX2VudHJ5X3QgKiB2b2xhdGlsZSBzbGF2ZXMgPSBzdGF0aWNfc2xhdmVzOworc3RhdGljIHNpZ19hdG9taWNfdCB2b2xhdGlsZSBzbGF2ZXNfY291bnQgPSAwOworc3RhdGljIHNpemVfdCBzbGF2ZXNfYWxsb2NhdGVkID0gU0laRU9GIChzdGF0aWNfc2xhdmVzKTsKKworLyogVGhlIHRlcm1pbmF0aW9uIHNpZ25hbCBmb3Igc2xhdmUgc3VicHJvY2Vzc2VzLgorICAgMjAwMy0xMC0wNzogIFRlcm1pbmF0b3IgYmVjb21lcyBHb3Zlcm5hdG9yLiAgKi8KKyNpZmRlZiBTSUdIVVAKKyMgZGVmaW5lIFRFUk1JTkFUT1IgU0lHSFVQCisjZWxzZQorIyBkZWZpbmUgVEVSTUlOQVRPUiBTSUdURVJNCisjZW5kaWYKKworLyogVGhlIGNsZWFudXAgYWN0aW9uLiAgSXQgZ2V0cyBjYWxsZWQgYXN5bmNocm9ub3VzbHkuICAqLworc3RhdGljIHZvaWQKK2NsZWFudXBfc2xhdmVzICh2b2lkKQoreworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIC8qIEdldCB0aGUgbGFzdCByZWdpc3RlcmVkIHNsYXZlLiAgKi8KKyAgICAgIHNpemVfdCBuID0gc2xhdmVzX2NvdW50OworICAgICAgaWYgKG4gPT0gMCkKKyAgICAgICAgYnJlYWs7CisgICAgICBuLS07CisgICAgICBzbGF2ZXNfY291bnQgPSBuOworICAgICAgLyogU2tpcCB1bnVzZWQgZW50cmllcyBpbiB0aGUgc2xhdmVzIGFycmF5LiAgKi8KKyAgICAgIGlmIChzbGF2ZXNbbl0udXNlZCkKKyAgICAgICAgeworICAgICAgICAgIHBpZF90IHNsYXZlID0gc2xhdmVzW25dLmNoaWxkOworCisgICAgICAgICAgLyogS2lsbCB0aGUgc2xhdmUuICAqLworICAgICAgICAgIGtpbGwgKHNsYXZlLCBURVJNSU5BVE9SKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLyogUmVnaXN0ZXIgYSBzdWJwcm9jZXNzIGFzIGJlaW5nIGEgc2xhdmUgcHJvY2Vzcy4gIFRoaXMgbWVhbnMgdGhhdCB0aGUKKyAgIHN1YnByb2Nlc3Mgd2lsbCBiZSB0ZXJtaW5hdGVkIHdoZW4gaXRzIGNyZWF0b3IgcmVjZWl2ZXMgYSBjYXRjaGFibGUgZmF0YWwKKyAgIHNpZ25hbCBvciBleGl0cyBub3JtYWxseS4gIFJlZ2lzdHJhdGlvbiBlbmRzIHdoZW4gd2FpdF9zdWJwcm9jZXNzKCkKKyAgIG5vdGljZXMgdGhhdCB0aGUgc3VicHJvY2VzcyBoYXMgZXhpdGVkLiAgKi8KK3ZvaWQKK3JlZ2lzdGVyX3NsYXZlX3N1YnByb2Nlc3MgKHBpZF90IGNoaWxkKQoreworICBzdGF0aWMgYm9vbCBjbGVhbnVwX3NsYXZlc19yZWdpc3RlcmVkID0gZmFsc2U7CisgIGlmICghY2xlYW51cF9zbGF2ZXNfcmVnaXN0ZXJlZCkKKyAgICB7CisgICAgICBhdGV4aXQgKGNsZWFudXBfc2xhdmVzKTsKKyAgICAgIGF0X2ZhdGFsX3NpZ25hbCAoY2xlYW51cF9zbGF2ZXMpOworICAgICAgY2xlYW51cF9zbGF2ZXNfcmVnaXN0ZXJlZCA9IHRydWU7CisgICAgfQorCisgIC8qIFRyeSB0byBzdG9yZSB0aGUgbmV3IHNsYXZlIGluIGFuIHVudXNlZCBlbnRyeSBvZiB0aGUgc2xhdmVzIGFycmF5LiAgKi8KKyAgeworICAgIHNsYXZlc19lbnRyeV90ICpzID0gc2xhdmVzOworICAgIHNsYXZlc19lbnRyeV90ICpzX2VuZCA9IHMgKyBzbGF2ZXNfY291bnQ7CisKKyAgICBmb3IgKDsgcyA8IHNfZW5kOyBzKyspCisgICAgICBpZiAoIXMtPnVzZWQpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBUaGUgdHdvIHVzZXMgb2YgJ3ZvbGF0aWxlJyBpbiB0aGUgc2xhdmVzX2VudHJ5X3QgdHlwZSBhYm92ZQorICAgICAgICAgICAgIChhbmQgSVNPIEMgOTkgc2VjdGlvbiA1LjEuMi4zLig1KSkgZW5zdXJlIHRoYXQgd2UgbWFyayB0aGUKKyAgICAgICAgICAgICBlbnRyeSBhcyB1c2VkIG9ubHkgYWZ0ZXIgdGhlIGNoaWxkIHBpZCBoYXMgYmVlbiB3cml0dGVuIHRvIHRoZQorICAgICAgICAgICAgIG1lbW9yeSBsb2NhdGlvbiBzLT5jaGlsZC4gICovCisgICAgICAgICAgcy0+Y2hpbGQgPSBjaGlsZDsKKyAgICAgICAgICBzLT51c2VkID0gMTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgfQorCisgIGlmIChzbGF2ZXNfY291bnQgPT0gc2xhdmVzX2FsbG9jYXRlZCkKKyAgICB7CisgICAgICAvKiBFeHRlbmQgdGhlIHNsYXZlcyBhcnJheS4gIE5vdGUgdGhhdCB3ZSBjYW5ub3QgdXNlIHhyZWFsbG9jKCksCisgICAgICAgICBiZWNhdXNlIHRoZW4gdGhlIGNsZWFudXBfc2xhdmVzKCkgZnVuY3Rpb24gY291bGQgYWNjZXNzIGFuIGFscmVhZHkKKyAgICAgICAgIGRlYWxsb2NhdGVkIGFycmF5LiAgKi8KKyAgICAgIHNsYXZlc19lbnRyeV90ICpvbGRfc2xhdmVzID0gc2xhdmVzOworICAgICAgc2l6ZV90IG5ld19zbGF2ZXNfYWxsb2NhdGVkID0gMiAqIHNsYXZlc19hbGxvY2F0ZWQ7CisgICAgICBzbGF2ZXNfZW50cnlfdCAqbmV3X3NsYXZlcyA9CisgICAgICAgIChzbGF2ZXNfZW50cnlfdCAqKQorICAgICAgICBtYWxsb2MgKG5ld19zbGF2ZXNfYWxsb2NhdGVkICogc2l6ZW9mIChzbGF2ZXNfZW50cnlfdCkpOworICAgICAgaWYgKG5ld19zbGF2ZXMgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgIC8qIHhhbGxvY19kaWUoKSB3aWxsIGNhbGwgZXhpdCgpIHdoaWNoIHdpbGwgaW52b2tlIGNsZWFudXBfc2xhdmVzKCkuCisgICAgICAgICAgICAgQWRkaXRpb25hbGx5IHdlIG5lZWQgdG8ga2lsbCBjaGlsZCwgYmVjYXVzZSBpdCdzIG5vdCB5ZXQgYW1vbmcKKyAgICAgICAgICAgICB0aGUgc2xhdmVzIGxpc3QuICAqLworICAgICAgICAgIGtpbGwgKGNoaWxkLCBURVJNSU5BVE9SKTsKKyAgICAgICAgICB4YWxsb2NfZGllICgpOworICAgICAgICB9CisgICAgICBtZW1jcHkgKG5ld19zbGF2ZXMsIG9sZF9zbGF2ZXMsCisgICAgICAgICAgICAgIHNsYXZlc19hbGxvY2F0ZWQgKiBzaXplb2YgKHNsYXZlc19lbnRyeV90KSk7CisgICAgICBzbGF2ZXMgPSBuZXdfc2xhdmVzOworICAgICAgc2xhdmVzX2FsbG9jYXRlZCA9IG5ld19zbGF2ZXNfYWxsb2NhdGVkOworICAgICAgLyogTm93IHdlIGNhbiBmcmVlIHRoZSBvbGQgc2xhdmVzIGFycmF5LiAgKi8KKyAgICAgIGlmIChvbGRfc2xhdmVzICE9IHN0YXRpY19zbGF2ZXMpCisgICAgICAgIGZyZWUgKG9sZF9zbGF2ZXMpOworICAgIH0KKyAgLyogVGhlIHRocmVlIHVzZXMgb2YgJ3ZvbGF0aWxlJyBpbiB0aGUgdHlwZXMgYWJvdmUgKGFuZCBJU08gQyA5OSBzZWN0aW9uCisgICAgIDUuMS4yLjMuKDUpKSBlbnN1cmUgdGhhdCB3ZSBpbmNyZW1lbnQgdGhlIHNsYXZlc19jb3VudCBvbmx5IGFmdGVyIHRoZQorICAgICBuZXcgc2xhdmUgYW5kIGl0cyAndXNlZCcgYml0IGhhdmUgYmVlbiB3cml0dGVuIHRvIHRoZSBtZW1vcnkgbG9jYXRpb25zCisgICAgIHRoYXQgbWFrZSB1cCBzbGF2ZXNbc2xhdmVzX2NvdW50XS4gICovCisgIHNsYXZlc1tzbGF2ZXNfY291bnRdLmNoaWxkID0gY2hpbGQ7CisgIHNsYXZlc1tzbGF2ZXNfY291bnRdLnVzZWQgPSAxOworICBzbGF2ZXNfY291bnQrKzsKK30KKworLyogVW5yZWdpc3RlciBhIGNoaWxkIGZyb20gdGhlIGxpc3Qgb2Ygc2xhdmUgc3VicHJvY2Vzc2VzLiAgKi8KK3N0YXRpYyB2b2lkCit1bnJlZ2lzdGVyX3NsYXZlX3N1YnByb2Nlc3MgKHBpZF90IGNoaWxkKQoreworICAvKiBUaGUgZWFzaWVzdCB3YXkgdG8gcmVtb3ZlIGFuIGVudHJ5IGZyb20gYSBsaXN0IHRoYXQgY2FuIGJlIHVzZWQgYnkKKyAgICAgYW4gYXN5bmNocm9ub3VzIHNpZ25hbCBoYW5kbGVyIGlzIGp1c3QgdG8gbWFyayBpdCBhcyB1bnVzZWQuICBGb3IgdGhpcywKKyAgICAgd2UgcmVseSBvbiBzaWdfYXRvbWljX3QuICAqLworICBzbGF2ZXNfZW50cnlfdCAqcyA9IHNsYXZlczsKKyAgc2xhdmVzX2VudHJ5X3QgKnNfZW5kID0gcyArIHNsYXZlc19jb3VudDsKKworICBmb3IgKDsgcyA8IHNfZW5kOyBzKyspCisgICAgaWYgKHMtPnVzZWQgJiYgcy0+Y2hpbGQgPT0gY2hpbGQpCisgICAgICBzLT51c2VkID0gMDsKK30KKworCisvKiBXYWl0IGZvciBhIHN1YnByb2Nlc3MgdG8gZmluaXNoLiAgUmV0dXJuIGl0cyBleGl0IGNvZGUuCisgICBJZiBpdCBkaWRuJ3QgdGVybWluYXRlIGNvcnJlY3RseSwgZXhpdCBpZiBleGl0X29uX2Vycm9yIGlzIHRydWUsIG90aGVyd2lzZQorICAgcmV0dXJuIDEyNy4gICovCitpbnQKK3dhaXRfc3VicHJvY2VzcyAocGlkX3QgY2hpbGQsIGNvbnN0IGNoYXIgKnByb2duYW1lLAorICAgICAgICAgICAgICAgICBib29sIGlnbm9yZV9zaWdwaXBlLCBib29sIG51bGxfc3RkZXJyLAorICAgICAgICAgICAgICAgICBib29sIHNsYXZlX3Byb2Nlc3MsIGJvb2wgZXhpdF9vbl9lcnJvciwKKyAgICAgICAgICAgICAgICAgaW50ICp0ZXJtc2lncCkKK3sKKyNpZiBIQVZFX1dBSVRJRCAmJiBkZWZpbmVkIFdOT1dBSVQgJiYgMAorICAvKiBDb21tZW50ZWQgb3V0IGJlY2F1c2Ugd2FpdGlkKCkgd2l0aG91dCBXRVhJVEVEIGFuZCB3aXRoIFdOT1dBSVQgZG9lc24ndAorICAgICB3b3JrOiBPbiBTb2xhcmlzIDcgYW5kIE9TRi8xIDQuMCwgaXQgcmV0dXJucyAtMSBhbmQgc2V0cyBlcnJubyA9IEVDSElMRCwKKyAgICAgYW5kIG9uIEhQLVVYIDEwLjIwIGl0IGp1c3QgaGFuZ3MuICAqLworICAvKiBVc2Ugb2Ygd2FpdGlkKCkgd2l0aCBXTk9XQUlUIGF2b2lkcyBhIHJhY2UgY29uZGl0aW9uOiBJZiBzbGF2ZV9wcm9jZXNzIGlzCisgICAgIHRydWUsIGFuZCB0aGlzIHByb2Nlc3Mgc2xlZXBzIGEgdmVyeSBsb25nIHRpbWUgYmV0d2VlbiB0aGUgcmV0dXJuIGZyb20KKyAgICAgd2FpdHBpZCgpIGFuZCB0aGUgZXhlY3V0aW9uIG9mIHVucmVnaXN0ZXJfc2xhdmVfc3VicHJvY2VzcygpLCBhbmQKKyAgICAgbWVhbndoaWxlIGFub3RoZXIgcHJvY2VzcyBhY3F1aXJlcyB0aGUgc2FtZSBQSUQgYXMgY2hpbGQsIGFuZCB0aGVuIC0gc3RpbGwKKyAgICAgYmVmb3JlIHVucmVnaXN0ZXJfc2xhdmVfc3VicHJvY2VzcygpIC0gdGhpcyBwcm9jZXNzIGdldHMgYSBmYXRhbCBzaWduYWwsCisgICAgIGl0IHdvdWxkIGtpbGwgdGhlIG90aGVyIHRvdGFsbHkgdW5yZWxhdGVkIHByb2Nlc3MuICAqLworICBzaWdpbmZvX3QgaW5mbzsKKworICBpZiAodGVybXNpZ3AgIT0gTlVMTCkKKyAgICAqdGVybXNpZ3AgPSAwOworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIGlmICh3YWl0aWQgKFBfUElELCBjaGlsZCwgJmluZm8sIFdFWElURUQgfCAoc2xhdmVfcHJvY2VzcyA/IFdOT1dBSVQgOiAwKSkKKyAgICAgICAgICA8IDApCisgICAgICAgIHsKKyMgaWZkZWYgRUlOVFIKKyAgICAgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpCisgICAgICAgICAgICBjb250aW51ZTsKKyMgZW5kaWYKKyAgICAgICAgICBpZiAoZXhpdF9vbl9lcnJvciB8fCAhbnVsbF9zdGRlcnIpCisgICAgICAgICAgICBlcnJvciAoZXhpdF9vbl9lcnJvciA/IEVYSVRfRkFJTFVSRSA6IDAsIGVycm5vLAorICAgICAgICAgICAgICAgICAgIF8oIiVzIHN1YnByb2Nlc3MiKSwgcHJvZ25hbWUpOworICAgICAgICAgIHJldHVybiAxMjc7CisgICAgICAgIH0KKworICAgICAgLyogaW5mby5zaV9jb2RlIGlzIHNldCB0byBvbmUgb2YgQ0xEX0VYSVRFRCwgQ0xEX0tJTExFRCwgQ0xEX0RVTVBFRCwKKyAgICAgICAgIENMRF9UUkFQUEVELCBDTERfU1RPUFBFRCwgQ0xEX0NPTlRJTlVFRC4gIExvb3AgdW50aWwgdGhlIHByb2dyYW0KKyAgICAgICAgIHRlcm1pbmF0ZXMuICAqLworICAgICAgaWYgKGluZm8uc2lfY29kZSA9PSBDTERfRVhJVEVECisgICAgICAgICAgfHwgaW5mby5zaV9jb2RlID09IENMRF9LSUxMRUQgfHwgaW5mby5zaV9jb2RlID09IENMRF9EVU1QRUQpCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAvKiBUaGUgY2hpbGQgcHJvY2VzcyBoYXMgZXhpdGVkIG9yIHdhcyBzaWduYWxsZWQuICAqLworCisgIGlmIChzbGF2ZV9wcm9jZXNzKQorICAgIHsKKyAgICAgIC8qIFVucmVnaXN0ZXIgdGhlIGNoaWxkIGZyb20gdGhlIGxpc3Qgb2Ygc2xhdmUgc3VicHJvY2Vzc2VzLCBzbyB0aGF0CisgICAgICAgICBsYXRlciwgd2hlbiB3ZSBleGl0LCB3ZSBkb24ndCBraWxsIGEgdG90YWxseSB1bnJlbGF0ZWQgcHJvY2VzcyB3aGljaAorICAgICAgICAgbWF5IGhhdmUgYWNxdWlyZWQgdGhlIHNhbWUgcGlkLiAgKi8KKyAgICAgIHVucmVnaXN0ZXJfc2xhdmVfc3VicHJvY2VzcyAoY2hpbGQpOworCisgICAgICAvKiBOb3cgcmVtb3ZlIHRoZSB6b21iaWUgZnJvbSB0aGUgcHJvY2VzcyBsaXN0LiAgKi8KKyAgICAgIGZvciAoOzspCisgICAgICAgIHsKKyAgICAgICAgICBpZiAod2FpdGlkIChQX1BJRCwgY2hpbGQsICZpbmZvLCBXRVhJVEVEKSA8IDApCisgICAgICAgICAgICB7CisjIGlmZGVmIEVJTlRSCisgICAgICAgICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyMgZW5kaWYKKyAgICAgICAgICAgICAgaWYgKGV4aXRfb25fZXJyb3IgfHwgIW51bGxfc3RkZXJyKQorICAgICAgICAgICAgICAgIGVycm9yIChleGl0X29uX2Vycm9yID8gRVhJVF9GQUlMVVJFIDogMCwgZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgIF8oIiVzIHN1YnByb2Nlc3MiKSwgcHJvZ25hbWUpOworICAgICAgICAgICAgICByZXR1cm4gMTI3OworICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgIHN3aXRjaCAoaW5mby5zaV9jb2RlKQorICAgIHsKKyAgICBjYXNlIENMRF9LSUxMRUQ6CisgICAgY2FzZSBDTERfRFVNUEVEOgorICAgICAgaWYgKHRlcm1zaWdwICE9IE5VTEwpCisgICAgICAgICp0ZXJtc2lncCA9IGluZm8uc2lfc3RhdHVzOyAvKiBUT0RPOiBvciBpbmZvLnNpX3NpZ25vPyAqLworIyBpZmRlZiBTSUdQSVBFCisgICAgICBpZiAoaW5mby5zaV9zdGF0dXMgPT0gU0lHUElQRSAmJiBpZ25vcmVfc2lncGlwZSkKKyAgICAgICAgcmV0dXJuIDA7CisjIGVuZGlmCisgICAgICBpZiAoZXhpdF9vbl9lcnJvciB8fCAoIW51bGxfc3RkZXJyICYmIHRlcm1zaWdwID09IE5VTEwpKQorICAgICAgICBlcnJvciAoZXhpdF9vbl9lcnJvciA/IEVYSVRfRkFJTFVSRSA6IDAsIDAsCisgICAgICAgICAgICAgICBfKCIlcyBzdWJwcm9jZXNzIGdvdCBmYXRhbCBzaWduYWwgJWQiKSwKKyAgICAgICAgICAgICAgIHByb2duYW1lLCBpbmZvLnNpX3N0YXR1cyk7CisgICAgICByZXR1cm4gMTI3OworICAgIGNhc2UgQ0xEX0VYSVRFRDoKKyAgICAgIGlmIChpbmZvLnNpX3N0YXR1cyA9PSAxMjcpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoZXhpdF9vbl9lcnJvciB8fCAhbnVsbF9zdGRlcnIpCisgICAgICAgICAgICBlcnJvciAoZXhpdF9vbl9lcnJvciA/IEVYSVRfRkFJTFVSRSA6IDAsIDAsCisgICAgICAgICAgICAgICAgICAgXygiJXMgc3VicHJvY2VzcyBmYWlsZWQiKSwgcHJvZ25hbWUpOworICAgICAgICAgIHJldHVybiAxMjc7CisgICAgICAgIH0KKyAgICAgIHJldHVybiBpbmZvLnNpX3N0YXR1czsKKyAgICBkZWZhdWx0OgorICAgICAgYWJvcnQgKCk7CisgICAgfQorI2Vsc2UKKyAgLyogd2FpdHBpZCgpIGlzIGp1c3QgYXMgcG9ydGFibGUgYXMgd2FpdCgpIG5vd2FkYXlzLiAgKi8KKyAgaW50IHN0YXR1czsKKworICBpZiAodGVybXNpZ3AgIT0gTlVMTCkKKyAgICAqdGVybXNpZ3AgPSAwOworICBzdGF0dXMgPSAwOworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIGludCByZXN1bHQgPSB3YWl0cGlkIChjaGlsZCwgJnN0YXR1cywgMCk7CisKKyAgICAgIGlmIChyZXN1bHQgIT0gY2hpbGQpCisgICAgICAgIHsKKyMgaWZkZWYgRUlOVFIKKyAgICAgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpCisgICAgICAgICAgICBjb250aW51ZTsKKyMgZW5kaWYKKyMgaWYgMCAvKiBkZWZpbmVkIEVDSElMRCAqLworICAgICAgICAgIGlmIChlcnJubyA9PSBFQ0hJTEQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIENoaWxkIHByb2Nlc3Mgbm9uZXhpc3RlbnQ/ISBBc3N1bWUgaXQgdGVybWluYXRlZAorICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkuICAqLworICAgICAgICAgICAgICBzdGF0dXMgPSAwOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyMgZW5kaWYKKyAgICAgICAgICBpZiAoZXhpdF9vbl9lcnJvciB8fCAhbnVsbF9zdGRlcnIpCisgICAgICAgICAgICBlcnJvciAoZXhpdF9vbl9lcnJvciA/IEVYSVRfRkFJTFVSRSA6IDAsIGVycm5vLAorICAgICAgICAgICAgICAgICAgIF8oIiVzIHN1YnByb2Nlc3MiKSwgcHJvZ25hbWUpOworICAgICAgICAgIHJldHVybiAxMjc7CisgICAgICAgIH0KKworICAgICAgLyogT25lIG9mIFdJRlNJR05BTEVEIChzdGF0dXMpLCBXSUZFWElURUQgKHN0YXR1cyksIFdJRlNUT1BQRUQgKHN0YXR1cykKKyAgICAgICAgIG11c3QgYWx3YXlzIGJlIHRydWUsIHNpbmNlIHdlIGRpZCBub3Qgc3BlY2lmeSBXQ09OVElOVUVEIGluIHRoZQorICAgICAgICAgd2FpdHBpZCgpIGNhbGwuICBMb29wIHVudGlsIHRoZSBwcm9ncmFtIHRlcm1pbmF0ZXMuICAqLworICAgICAgaWYgKCFXSUZTVE9QUEVEIChzdGF0dXMpKQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgLyogVGhlIGNoaWxkIHByb2Nlc3MgaGFzIGV4aXRlZCBvciB3YXMgc2lnbmFsbGVkLiAgKi8KKworICBpZiAoc2xhdmVfcHJvY2VzcykKKyAgICAvKiBVbnJlZ2lzdGVyIHRoZSBjaGlsZCBmcm9tIHRoZSBsaXN0IG9mIHNsYXZlIHN1YnByb2Nlc3Nlcywgc28gdGhhdAorICAgICAgIGxhdGVyLCB3aGVuIHdlIGV4aXQsIHdlIGRvbid0IGtpbGwgYSB0b3RhbGx5IHVucmVsYXRlZCBwcm9jZXNzIHdoaWNoCisgICAgICAgbWF5IGhhdmUgYWNxdWlyZWQgdGhlIHNhbWUgcGlkLiAgKi8KKyAgICB1bnJlZ2lzdGVyX3NsYXZlX3N1YnByb2Nlc3MgKGNoaWxkKTsKKworICBpZiAoV0lGU0lHTkFMRUQgKHN0YXR1cykpCisgICAgeworICAgICAgaWYgKHRlcm1zaWdwICE9IE5VTEwpCisgICAgICAgICp0ZXJtc2lncCA9IFdURVJNU0lHIChzdGF0dXMpOworIyBpZmRlZiBTSUdQSVBFCisgICAgICBpZiAoV1RFUk1TSUcgKHN0YXR1cykgPT0gU0lHUElQRSAmJiBpZ25vcmVfc2lncGlwZSkKKyAgICAgICAgcmV0dXJuIDA7CisjIGVuZGlmCisgICAgICBpZiAoZXhpdF9vbl9lcnJvciB8fCAoIW51bGxfc3RkZXJyICYmIHRlcm1zaWdwID09IE5VTEwpKQorICAgICAgICBlcnJvciAoZXhpdF9vbl9lcnJvciA/IEVYSVRfRkFJTFVSRSA6IDAsIDAsCisgICAgICAgICAgICAgICBfKCIlcyBzdWJwcm9jZXNzIGdvdCBmYXRhbCBzaWduYWwgJWQiKSwKKyAgICAgICAgICAgICAgIHByb2duYW1lLCAoaW50KSBXVEVSTVNJRyAoc3RhdHVzKSk7CisgICAgICByZXR1cm4gMTI3OworICAgIH0KKyAgaWYgKCFXSUZFWElURUQgKHN0YXR1cykpCisgICAgYWJvcnQgKCk7CisgIGlmIChXRVhJVFNUQVRVUyAoc3RhdHVzKSA9PSAxMjcpCisgICAgeworICAgICAgaWYgKGV4aXRfb25fZXJyb3IgfHwgIW51bGxfc3RkZXJyKQorICAgICAgICBlcnJvciAoZXhpdF9vbl9lcnJvciA/IEVYSVRfRkFJTFVSRSA6IDAsIDAsCisgICAgICAgICAgICAgICBfKCIlcyBzdWJwcm9jZXNzIGZhaWxlZCIpLCBwcm9nbmFtZSk7CisgICAgICByZXR1cm4gMTI3OworICAgIH0KKyAgcmV0dXJuIFdFWElUU1RBVFVTIChzdGF0dXMpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9saWIvd2FpdC1wcm9jZXNzLmggYi9saWIvd2FpdC1wcm9jZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQyMDQzMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi93YWl0LXByb2Nlc3MuaApAQCAtMCwwICsxLDc0IEBACisvKiBXYWl0aW5nIGZvciBhIHN1YnByb2Nlc3MgdG8gZmluaXNoLgorICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMsIDIwMDYsIDIwMDgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAxLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIF9XQUlUX1BST0NFU1NfSAorI2RlZmluZSBfV0FJVF9QUk9DRVNTX0gKKworLyogR2V0IHBpZF90LiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworLyogV2FpdCBmb3IgYSBzdWJwcm9jZXNzIHRvIGZpbmlzaC4gIFJldHVybiBpdHMgZXhpdCBjb2RlLgorICAgSWYgaXQgZGlkbid0IHRlcm1pbmF0ZSBjb3JyZWN0bHksIGV4aXQgaWYgZXhpdF9vbl9lcnJvciBpcyB0cnVlLCBvdGhlcndpc2UKKyAgIHJldHVybiAxMjcuCisgICBBcmd1bWVudHM6CisgICAtIGNoaWxkIGlzIHRoZSBwaWQgb2YgdGhlIHN1YnByb2Nlc3MuCisgICAtIHByb2duYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIGV4ZWN1dGVkIGJ5IHRoZSBzdWJwcm9jZXNzLCB1c2VkIGZvcgorICAgICBlcnJvciBtZXNzYWdlcy4KKyAgIC0gSWYgaWdub3JlX3NpZ3BpcGUgaXMgdHJ1ZSwgY29uc2lkZXIgYSBzdWJwcm9jZXNzIHRlcm1pbmF0aW9uIGR1ZSB0bworICAgICBTSUdQSVBFIGFzIGVxdWl2YWxlbnQgdG8gYSBzdWNjZXNzLiAgVGhpcyBpcyBzdWl0YWJsZSBmb3IgcHJvY2Vzc2VzIHdob3NlCisgICAgIG9ubHkgcHVycG9zZSBpcyB0byB3cml0ZSB0byBzdGFuZGFyZCBvdXRwdXQuICBUaGlzIGZsYWcgY2FuIGJlIHNhZmVseSBzZXQKKyAgICAgdG8gZmFsc2Ugd2hlbiB0aGUgcHJvY2Vzcycgc3RhbmRhcmQgb3V0cHV0IGlzIGtub3duIHRvIGdvIHRvIERFVl9OVUxMLgorICAgLSBJZiBudWxsX3N0ZGVyciBpcyB0cnVlLCB0aGUgdXN1YWwgZXJyb3IgbWVzc2FnZSB0byBzdGRlcnIgd2lsbCBiZSBvbWl0dGVkLgorICAgICBUaGlzIGlzIHN1aXRhYmxlIHdoZW4gdGhlIHN1YnByb2Nlc3MgZG9lcyBub3QgZnVsZmlsbCBhbiBpbXBvcnRhbnQgdGFzay4KKyAgIC0gc2xhdmVfcHJvY2VzcyBzaG91bGQgYmUgc2V0IHRvIHRydWUgaWYgdGhlIHByb2Nlc3MgaGFzIGJlZW4gbGF1bmNoZWQgYXMgYQorICAgICBzbGF2ZSBwcm9jZXNzLgorICAgLSBJZiBleGl0X29uX2Vycm9yIGlzIHRydWUsIGFueSBlcnJvciB3aWxsIGNhdXNlIHRoZSBtYWluIHByb2Nlc3MgdG8gZXhpdAorICAgICB3aXRoIGFuIGVycm9yIHN0YXR1cy4KKyAgIC0gSWYgdGVybXNpZ3AgaXMgbm90IE5VTEw6ICp0ZXJtc2lnIHdpbGwgYmUgc2V0IHRvIHRoZSBzaWduYWwgdGhhdAorICAgICB0ZXJtaW5hdGVkIHRoZSBzdWJwcm9jZXNzIChpZiBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3JtOiBub3Qgb24gbmF0aXZlCisgICAgIFdpbmRvd3MgcGxhdGZvcm1zKSwgb3RoZXJ3aXNlIDAsIGFuZCB0aGUgZXJyb3IgbWVzc2FnZSBhYm91dCB0aGUgc2lnbmFsCisgICAgIHRoYXQgdGVybWluYXRlZCB0aGUgc3VicHJvY2VzcyB3aWxsIGJlIG9taXR0ZWQuCisgICBQcmVyZXF1aXNpdGVzOiBUaGUgc2lnbmFsIGhhbmRsZXIgZm9yIFNJR0NITEQgc2hvdWxkIG5vdCBiZSBzZXQgdG8gU0lHX0lHTiwKKyAgIG90aGVyd2lzZSB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90IHdvcmsuICAqLworZXh0ZXJuIGludCB3YWl0X3N1YnByb2Nlc3MgKHBpZF90IGNoaWxkLCBjb25zdCBjaGFyICpwcm9nbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlnbm9yZV9zaWdwaXBlLCBib29sIG51bGxfc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2xhdmVfcHJvY2VzcywgYm9vbCBleGl0X29uX2Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqdGVybXNpZ3ApOworCisvKiBSZWdpc3RlciBhIHN1YnByb2Nlc3MgYXMgYmVpbmcgYSBzbGF2ZSBwcm9jZXNzLiAgVGhpcyBtZWFucyB0aGF0IHRoZQorICAgc3VicHJvY2VzcyB3aWxsIGJlIHRlcm1pbmF0ZWQgd2hlbiBpdHMgY3JlYXRvciByZWNlaXZlcyBhIGNhdGNoYWJsZSBmYXRhbAorICAgc2lnbmFsIG9yIGV4aXRzIG5vcm1hbGx5LiAgUmVnaXN0cmF0aW9uIGVuZHMgd2hlbiB3YWl0X3N1YnByb2Nlc3MoKQorICAgbm90aWNlcyB0aGF0IHRoZSBzdWJwcm9jZXNzIGhhcyBleGl0ZWQuICAqLworZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfc2xhdmVfc3VicHJvY2VzcyAocGlkX3QgY2hpbGQpOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKworI2VuZGlmIC8qIF9XQUlUX1BST0NFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL3dhaXRwaWQuYyBiL2xpYi93YWl0cGlkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI0OWQ0YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi93YWl0cGlkLmMKQEAgLTAsMCArMSwzMCBAQAorLyogV2FpdCBmb3IgcHJvY2VzcyBzdGF0ZSBjaGFuZ2UuCisgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMywgMjAwNS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKworLyogSW1wbGVtZW50YXRpb24gZm9yIG5hdGl2ZSBXaW5kb3dzIHN5c3RlbXMuICAqLworCisjaW5jbHVkZSA8cHJvY2Vzcy5oPiAvKiBmb3IgX2N3YWl0LCBXQUlUX0NISUxEICovCisKK3BpZF90Cit3YWl0cGlkIChwaWRfdCBwaWQsIGludCAqc3RhdHVzcCwgaW50IG9wdGlvbnMpCit7CisgIHJldHVybiBfY3dhaXQgKHN0YXR1c3AsIHBpZCwgV0FJVF9DSElMRCk7Cit9CmRpZmYgLS1naXQgYS9saWIvd2NoYXIuaW4uaCBiL2xpYi93Y2hhci5pbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YmMzMGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvd2NoYXIuaW4uaApAQCAtMCwwICsxLDEwMjggQEAKKy8qIEEgc3Vic3RpdHV0ZSBmb3IgSVNPIEM5OSA8d2NoYXIuaD4sIGZvciBwbGF0Zm9ybXMgdGhhdCBoYXZlIGlzc3Vlcy4KKworICAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogV3JpdHRlbiBieSBFcmljIEJsYWtlLiAgKi8KKworLyoKKyAqIElTTyBDIDk5IDx3Y2hhci5oPiBmb3IgcGxhdGZvcm1zIHRoYXQgaGF2ZSBpc3N1ZXMuCisgKiA8aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3N1c3YzeGJkL3djaGFyLmguaHRtbD4KKyAqCisgKiBGb3Igbm93LCB0aGlzIGp1c3QgZW5zdXJlcyBwcm9wZXIgcHJlcmVxdWlzaXRlIGluY2x1c2lvbiBvcmRlciBhbmQKKyAqIHRoZSBkZWNsYXJhdGlvbiBvZiB3Y3dpZHRoKCkuCisgKi8KKworI2lmIF9fR05VQ19fID49IDMKK0BQUkFHTUFfU1lTVEVNX0hFQURFUkAKKyNlbmRpZgorQFBSQUdNQV9DT0xVTU5TQAorCisjaWYgZGVmaW5lZCBfX25lZWRfbWJzdGF0ZV90IHx8IGRlZmluZWQgX19uZWVkX3dpbnRfdCB8fCAoZGVmaW5lZCBfX2hwdXggJiYgKChkZWZpbmVkIF9JTlRUWVBFU19JTkNMVURFRCAmJiAhZGVmaW5lZCBzdHJ0b2ltYXgpIHx8IGRlZmluZWQgX0dMX0pVU1RfSU5DTFVERV9TWVNURU1fV0NIQVJfSCkpIHx8IGRlZmluZWQgX0dMX0FMUkVBRFlfSU5DTFVESU5HX1dDSEFSX0gKKy8qIFNwZWNpYWwgaW52b2NhdGlvbiBjb252ZW50aW9uOgorICAgLSBJbnNpZGUgZ2xpYmMgYW5kIHVDbGliYyBoZWFkZXIgZmlsZXMuCisgICAtIE9uIEhQLVVYIDExLjAwIHdlIGhhdmUgYSBzZXF1ZW5jZSBvZiBuZXN0ZWQgaW5jbHVkZXMKKyAgICAgPHdjaGFyLmg+IC0+IDxzdGRsaWIuaD4gLT4gPHN0ZGludC5oPiwgYW5kIHRoZSBsYXR0ZXIgaW5jbHVkZXMgPHdjaGFyLmg+LAorICAgICBvbmNlIGluZGlyZWN0bHkgPHN0ZGludC5oPiAtPiA8c3lzL3R5cGVzLmg+IC0+IDxpbnR0eXBlcy5oPiAtPiA8d2NoYXIuaD4KKyAgICAgYW5kIG9uY2UgZGlyZWN0bHkuICBJbiBib3RoIHNpdHVhdGlvbnMgJ3dpbnRfdCcgaXMgbm90IHlldCBkZWZpbmVkLAorICAgICB0aGVyZWZvcmUgd2UgY2Fubm90IHByb3ZpZGUgdGhlIGZ1bmN0aW9uIG92ZXJyaWRlczsgaW5zdGVhZCBpbmNsdWRlIG9ubHkKKyAgICAgdGhlIHN5c3RlbSdzIDx3Y2hhci5oPi4KKyAgIC0gT24gSVJJWCA2LjUsIHNpbWlsYXJseSwgd2UgaGF2ZSBhbiBpbmNsdWRlIDx3Y2hhci5oPiAtPiA8d2N0eXBlLmg+LCBhbmQKKyAgICAgdGhlIGxhdHRlciBpbmNsdWRlcyA8d2NoYXIuaD4uICBCdXQgaGVyZSwgd2UgaGF2ZSBubyB3YXkgdG8gZGV0ZWN0IHdoZXRoZXIKKyAgICAgPHdjdHlwZS5oPiBpcyBjb21wbGV0ZWx5IGluY2x1ZGVkIG9yIGlzIHN0aWxsIGJlaW5nIGluY2x1ZGVkLiAgKi8KKworI0BJTkNMVURFX05FWFRAIEBORVhUX1dDSEFSX0hACisKKyNlbHNlCisvKiBOb3JtYWwgaW52b2NhdGlvbiBjb252ZW50aW9uLiAgKi8KKworI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfV0NIQVJfSAorCisjZGVmaW5lIF9HTF9BTFJFQURZX0lOQ0xVRElOR19XQ0hBUl9ICisKKyNpZiBASEFWRV9GRUFUVVJFU19IQAorIyBpbmNsdWRlIDxmZWF0dXJlcy5oPiAvKiBmb3IgX19HTElCQ19fICovCisjZW5kaWYKKworLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQorICAgPHdjaGFyLmg+LgorICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LgorICAgSW4gc29tZSBidWlsZHMgb2YgdUNsaWJjLCA8d2NoYXIuaD4gaXMgbm9uZXhpc3RlbnQgYW5kIHdjaGFyX3QgaXMgZGVmaW5lZAorICAgYnkgPHN0ZGRlZi5oPi4KKyAgIEJ1dCBhdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9uIG9uIGdsaWJjIHN5c3RlbXMuICAqLworI2lmICEoZGVmaW5lZCBfX0dMSUJDX18gJiYgIWRlZmluZWQgX19VQ0xJQkNfXykKKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisjZW5kaWYKKyNpZm5kZWYgX19HTElCQ19fCisjIGluY2x1ZGUgPHN0ZGlvLmg+CisjIGluY2x1ZGUgPHRpbWUuaD4KKyNlbmRpZgorCisvKiBJbmNsdWRlIHRoZSBvcmlnaW5hbCA8d2NoYXIuaD4gaWYgaXQgZXhpc3RzLgorICAgU29tZSBidWlsZHMgb2YgdUNsaWJjIGxhY2sgaXQuICAqLworLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworI2lmIEBIQVZFX1dDSEFSX0hACisjIEBJTkNMVURFX05FWFRAIEBORVhUX1dDSEFSX0hACisjZW5kaWYKKworI3VuZGVmIF9HTF9BTFJFQURZX0lOQ0xVRElOR19XQ0hBUl9ICisKKyNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1dDSEFSX0gKKyNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX1dDSEFSX0gKKworLyogVGhlIF9fYXR0cmlidXRlX18gZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDIuNSBhbmQgbGF0ZXIuCisgICBUaGUgYXR0cmlidXRlIF9fcHVyZV9fIHdhcyBhZGRlZCBpbiBnY2MgMi45Ni4gICovCisjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk2KQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9QVVJFIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpCisjZWxzZQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9QVVJFIC8qIGVtcHR5ICovCisjZW5kaWYKKworLyogVGhlIGRlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwgZXRjLiBhcmUgY29waWVkIGhlcmUuICAqLworCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwgaXMgY29waWVkIGhlcmUuICAqLworCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UgaXMgY29waWVkIGhlcmUuICAqLworCisKKy8qIERlZmluZSB3aW50X3QgYW5kIFdFT0YuICAoQWxzbyBkb25lIGluIHdjdHlwZS5pbi5oLikgICovCisjaWYgIUBIQVZFX1dJTlRfVEAgJiYgIWRlZmluZWQgd2ludF90CisjIGRlZmluZSB3aW50X3QgaW50CisjIGlmbmRlZiBXRU9GCisjICBkZWZpbmUgV0VPRiAtMQorIyBlbmRpZgorI2Vsc2UKKy8qIE1TVkMgZGVmaW5lcyB3aW50X3QgYXMgJ3Vuc2lnbmVkIHNob3J0JyBpbiA8Y3J0ZGVmcy5oPi4KKyAgIFRoaXMgaXMgdG9vIHNtYWxsOiBJU08gQyA5OSBzZWN0aW9uIDcuMjQuMS4oMikgc2F5cyB0aGF0IHdpbnRfdCBtdXN0IGJlCisgICAidW5jaGFuZ2VkIGJ5IGRlZmF1bHQgYXJndW1lbnQgcHJvbW90aW9ucyIuICBPdmVycmlkZSBpdC4gICovCisjIGlmIGRlZmluZWQgX01TQ19WRVIKKyMgIGlmICFHTlVMSUJfZGVmaW5lZF93aW50X3QKKyMgICBpbmNsdWRlIDxjcnRkZWZzLmg+Cit0eXBlZGVmIHVuc2lnbmVkIGludCBycGxfd2ludF90OworIyAgIHVuZGVmIHdpbnRfdAorIyAgIGRlZmluZSB3aW50X3QgcnBsX3dpbnRfdAorIyAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF93aW50X3QgMQorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZuZGVmIFdFT0YKKyMgIGRlZmluZSBXRU9GICgod2ludF90KSAtMSkKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIE92ZXJyaWRlIG1ic3RhdGVfdCBpZiBpdCBpcyB0b28gc21hbGwuCisgICBPbiBJUklYIDYuNSwgc2l6ZW9mIChtYnN0YXRlX3QpID09IDEsIHdoaWNoIGlzIG5vdCBzdWZmaWNpZW50IGZvcgorICAgaW1wbGVtZW50aW5nIG1icnRvd2MgZm9yIGVuY29kaW5ncyBsaWtlIFVURi04LiAgKi8KKyNpZiAhKEBIQVZFX01CU0lOSVRAICYmIEBIQVZFX01CUlRPV0NAKSB8fCBAUkVQTEFDRV9NQlNUQVRFX1RACisjIGlmICFHTlVMSUJfZGVmaW5lZF9tYnN0YXRlX3QKK3R5cGVkZWYgaW50IHJwbF9tYnN0YXRlX3Q7CisjICB1bmRlZiBtYnN0YXRlX3QKKyMgIGRlZmluZSBtYnN0YXRlX3QgcnBsX21ic3RhdGVfdAorIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX21ic3RhdGVfdCAxCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBDb252ZXJ0IGEgc2luZ2xlLWJ5dGUgY2hhcmFjdGVyIHRvIGEgd2lkZSBjaGFyYWN0ZXIuICAqLworI2lmIEBHTlVMSUJfQlRPV0NACisjIGlmIEBSRVBMQUNFX0JUT1dDQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBidG93YworIyAgIGRlZmluZSBidG93YyBycGxfYnRvd2MKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChidG93Yywgd2ludF90LCAoaW50IGMpIF9HTF9BVFRSSUJVVEVfUFVSRSk7CitfR0xfQ1hYQUxJQVNfUlBMIChidG93Yywgd2ludF90LCAoaW50IGMpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0JUT1dDQAorX0dMX0ZVTkNERUNMX1NZUyAoYnRvd2MsIHdpbnRfdCwgKGludCBjKSBfR0xfQVRUUklCVVRFX1BVUkUpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGJ0b3djLCB3aW50X3QsIChpbnQgYykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoYnRvd2MpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBidG93YworIyBpZiBIQVZFX1JBV19ERUNMX0JUT1dDCitfR0xfV0FSTl9PTl9VU0UgKGJ0b3djLCAiYnRvd2MgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGJ0b3djIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogQ29udmVydCBhIHdpZGUgY2hhcmFjdGVyIHRvIGEgc2luZ2xlLWJ5dGUgY2hhcmFjdGVyLiAgKi8KKyNpZiBAR05VTElCX1dDVE9CQAorIyBpZiBAUkVQTEFDRV9XQ1RPQkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgd2N0b2IKKyMgICBkZWZpbmUgd2N0b2IgcnBsX3djdG9iCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAod2N0b2IsIGludCwgKHdpbnRfdCB3YykgX0dMX0FUVFJJQlVURV9QVVJFKTsKK19HTF9DWFhBTElBU19SUEwgKHdjdG9iLCBpbnQsICh3aW50X3Qgd2MpKTsKKyMgZWxzZQorIyAgaWYgIWRlZmluZWQgd2N0b2IgJiYgIUBIQVZFX0RFQ0xfV0NUT0JACisvKiB3Y3RvYiBpcyBwcm92aWRlZCBieSBnbnVsaWIsIG9yIHdjdG9iIGV4aXN0cyBidXQgaXMgbm90IGRlY2xhcmVkLiAgKi8KK19HTF9GVU5DREVDTF9TWVMgKHdjdG9iLCBpbnQsICh3aW50X3Qgd2MpIF9HTF9BVFRSSUJVVEVfUFVSRSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod2N0b2IsIGludCwgKHdpbnRfdCB3YykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAod2N0b2IpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3RvYgorIyBpZiBIQVZFX1JBV19ERUNMX1dDVE9CCitfR0xfV0FSTl9PTl9VU0UgKHdjdG9iLCAid2N0b2IgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdjdG9iIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogVGVzdCB3aGV0aGVyICpQUyBpcyBpbiB0aGUgaW5pdGlhbCBzdGF0ZS4gICovCisjaWYgQEdOVUxJQl9NQlNJTklUQAorIyBpZiBAUkVQTEFDRV9NQlNJTklUQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBtYnNpbml0CisjICAgZGVmaW5lIG1ic2luaXQgcnBsX21ic2luaXQKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChtYnNpbml0LCBpbnQsIChjb25zdCBtYnN0YXRlX3QgKnBzKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChtYnNpbml0LCBpbnQsIChjb25zdCBtYnN0YXRlX3QgKnBzKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9NQlNJTklUQAorX0dMX0ZVTkNERUNMX1NZUyAobWJzaW5pdCwgaW50LCAoY29uc3QgbWJzdGF0ZV90ICpwcykpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKG1ic2luaXQsIGludCwgKGNvbnN0IG1ic3RhdGVfdCAqcHMpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG1ic2luaXQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBtYnNpbml0CisjIGlmIEhBVkVfUkFXX0RFQ0xfTUJTSU5JVAorX0dMX1dBUk5fT05fVVNFIChtYnNpbml0LCAibWJzaW5pdCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWJzaW5pdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIENvbnZlcnQgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyIHRvIGEgd2lkZSBjaGFyYWN0ZXIuICAqLworI2lmIEBHTlVMSUJfTUJSVE9XQ0AKKyMgaWYgQFJFUExBQ0VfTUJSVE9XQ0AKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbWJydG93YworIyAgIGRlZmluZSBtYnJ0b3djIHJwbF9tYnJ0b3djCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobWJydG93Yywgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKnB3YywgY29uc3QgY2hhciAqcywgc2l6ZV90IG4sIG1ic3RhdGVfdCAqcHMpKTsKK19HTF9DWFhBTElBU19SUEwgKG1icnRvd2MsIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICh3Y2hhcl90ICpwd2MsIGNvbnN0IGNoYXIgKnMsIHNpemVfdCBuLCBtYnN0YXRlX3QgKnBzKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9NQlJUT1dDQAorX0dMX0ZVTkNERUNMX1NZUyAobWJydG93Yywgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKnB3YywgY29uc3QgY2hhciAqcywgc2l6ZV90IG4sIG1ic3RhdGVfdCAqcHMpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChtYnJ0b3djLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqcHdjLCBjb25zdCBjaGFyICpzLCBzaXplX3QgbiwgbWJzdGF0ZV90ICpwcykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobWJydG93Yyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG1icnRvd2MKKyMgaWYgSEFWRV9SQVdfREVDTF9NQlJUT1dDCitfR0xfV0FSTl9PTl9VU0UgKG1icnRvd2MsICJtYnJ0b3djIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBtYnJ0b3djIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogUmVjb2duaXplIGEgbXVsdGlieXRlIGNoYXJhY3Rlci4gICovCisjaWYgQEdOVUxJQl9NQlJMRU5ACisjIGlmIEBSRVBMQUNFX01CUkxFTkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbWJybGVuCisjICAgZGVmaW5lIG1icmxlbiBycGxfbWJybGVuCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobWJybGVuLCBzaXplX3QsIChjb25zdCBjaGFyICpzLCBzaXplX3QgbiwgbWJzdGF0ZV90ICpwcykpOworX0dMX0NYWEFMSUFTX1JQTCAobWJybGVuLCBzaXplX3QsIChjb25zdCBjaGFyICpzLCBzaXplX3QgbiwgbWJzdGF0ZV90ICpwcykpOworIyBlbHNlCisjICBpZiAhQEhBVkVfTUJSTEVOQAorX0dMX0ZVTkNERUNMX1NZUyAobWJybGVuLCBzaXplX3QsIChjb25zdCBjaGFyICpzLCBzaXplX3QgbiwgbWJzdGF0ZV90ICpwcykpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKG1icmxlbiwgc2l6ZV90LCAoY29uc3QgY2hhciAqcywgc2l6ZV90IG4sIG1ic3RhdGVfdCAqcHMpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG1icmxlbik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG1icmxlbgorIyBpZiBIQVZFX1JBV19ERUNMX01CUkxFTgorX0dMX1dBUk5fT05fVVNFIChtYnJsZW4sICJtYnJsZW4gaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG1icmxlbiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIENvbnZlcnQgYSBzdHJpbmcgdG8gYSB3aWRlIHN0cmluZy4gICovCisjaWYgQEdOVUxJQl9NQlNSVE9XQ1NACisjIGlmIEBSRVBMQUNFX01CU1JUT1dDU0AKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbWJzcnRvd2NzCisjICAgZGVmaW5lIG1ic3J0b3djcyBycGxfbWJzcnRvd2NzCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobWJzcnRvd2NzLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqZGVzdCwgY29uc3QgY2hhciAqKnNyY3AsIHNpemVfdCBsZW4sIG1ic3RhdGVfdCAqcHMpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAobWJzcnRvd2NzLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqZGVzdCwgY29uc3QgY2hhciAqKnNyY3AsIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpwcykpOworIyBlbHNlCisjICBpZiAhQEhBVkVfTUJTUlRPV0NTQAorX0dMX0ZVTkNERUNMX1NZUyAobWJzcnRvd2NzLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqZGVzdCwgY29uc3QgY2hhciAqKnNyY3AsIHNpemVfdCBsZW4sIG1ic3RhdGVfdCAqcHMpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKG1ic3J0b3djcywgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKmRlc3QsIGNvbnN0IGNoYXIgKipzcmNwLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqcHMpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG1ic3J0b3djcyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG1ic3J0b3djcworIyBpZiBIQVZFX1JBV19ERUNMX01CU1JUT1dDUworX0dMX1dBUk5fT05fVVNFIChtYnNydG93Y3MsICJtYnNydG93Y3MgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG1ic3J0b3djcyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIENvbnZlcnQgYSBzdHJpbmcgdG8gYSB3aWRlIHN0cmluZy4gICovCisjaWYgQEdOVUxJQl9NQlNOUlRPV0NTQAorIyBpZiBAUkVQTEFDRV9NQlNOUlRPV0NTQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBtYnNucnRvd2NzCisjICAgZGVmaW5lIG1ic25ydG93Y3MgcnBsX21ic25ydG93Y3MKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChtYnNucnRvd2NzLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqZGVzdCwgY29uc3QgY2hhciAqKnNyY3AsIHNpemVfdCBzcmNsZW4sIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpwcykKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChtYnNucnRvd2NzLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqZGVzdCwgY29uc3QgY2hhciAqKnNyY3AsIHNpemVfdCBzcmNsZW4sIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpwcykpOworIyBlbHNlCisjICBpZiAhQEhBVkVfTUJTTlJUT1dDU0AKK19HTF9GVU5DREVDTF9TWVMgKG1ic25ydG93Y3MsIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICh3Y2hhcl90ICpkZXN0LCBjb25zdCBjaGFyICoqc3JjcCwgc2l6ZV90IHNyY2xlbiwgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKnBzKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChtYnNucnRvd2NzLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqZGVzdCwgY29uc3QgY2hhciAqKnNyY3AsIHNpemVfdCBzcmNsZW4sIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpwcykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobWJzbnJ0b3djcyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG1ic25ydG93Y3MKKyMgaWYgSEFWRV9SQVdfREVDTF9NQlNOUlRPV0NTCitfR0xfV0FSTl9PTl9VU0UgKG1ic25ydG93Y3MsICJtYnNucnRvd2NzIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBtYnNucnRvd2NzIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogQ29udmVydCBhIHdpZGUgY2hhcmFjdGVyIHRvIGEgbXVsdGlieXRlIGNoYXJhY3Rlci4gICovCisjaWYgQEdOVUxJQl9XQ1JUT01CQAorIyBpZiBAUkVQTEFDRV9XQ1JUT01CQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiB3Y3J0b21iCisjICAgZGVmaW5lIHdjcnRvbWIgcnBsX3djcnRvbWIKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh3Y3J0b21iLCBzaXplX3QsIChjaGFyICpzLCB3Y2hhcl90IHdjLCBtYnN0YXRlX3QgKnBzKSk7CitfR0xfQ1hYQUxJQVNfUlBMICh3Y3J0b21iLCBzaXplX3QsIChjaGFyICpzLCB3Y2hhcl90IHdjLCBtYnN0YXRlX3QgKnBzKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9XQ1JUT01CQAorX0dMX0ZVTkNERUNMX1NZUyAod2NydG9tYiwgc2l6ZV90LCAoY2hhciAqcywgd2NoYXJfdCB3YywgbWJzdGF0ZV90ICpwcykpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjcnRvbWIsIHNpemVfdCwgKGNoYXIgKnMsIHdjaGFyX3Qgd2MsIG1ic3RhdGVfdCAqcHMpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHdjcnRvbWIpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3J0b21iCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NSVE9NQgorX0dMX1dBUk5fT05fVVNFICh3Y3J0b21iLCAid2NydG9tYiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NydG9tYiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIENvbnZlcnQgYSB3aWRlIHN0cmluZyB0byBhIHN0cmluZy4gICovCisjaWYgQEdOVUxJQl9XQ1NSVE9NQlNACisjIGlmIEBSRVBMQUNFX1dDU1JUT01CU0AKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgd2NzcnRvbWJzCisjICAgZGVmaW5lIHdjc3J0b21icyBycGxfd2NzcnRvbWJzCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAod2NzcnRvbWJzLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAoY2hhciAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqKnNyY3AsIHNpemVfdCBsZW4sIG1ic3RhdGVfdCAqcHMpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAod2NzcnRvbWJzLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAoY2hhciAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqKnNyY3AsIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpwcykpOworIyBlbHNlCisjICBpZiAhQEhBVkVfV0NTUlRPTUJTQAorX0dMX0ZVTkNERUNMX1NZUyAod2NzcnRvbWJzLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAoY2hhciAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqKnNyY3AsIHNpemVfdCBsZW4sIG1ic3RhdGVfdCAqcHMpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjc3J0b21icywgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKmRlc3QsIGNvbnN0IHdjaGFyX3QgKipzcmNwLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqcHMpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHdjc3J0b21icyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc3J0b21icworIyBpZiBIQVZFX1JBV19ERUNMX1dDU1JUT01CUworX0dMX1dBUk5fT05fVVNFICh3Y3NydG9tYnMsICJ3Y3NydG9tYnMgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdjc3J0b21icyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIENvbnZlcnQgYSB3aWRlIHN0cmluZyB0byBhIHN0cmluZy4gICovCisjaWYgQEdOVUxJQl9XQ1NOUlRPTUJTQAorIyBpZiBAUkVQTEFDRV9XQ1NOUlRPTUJTQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiB3Y3NucnRvbWJzCisjICAgZGVmaW5lIHdjc25ydG9tYnMgcnBsX3djc25ydG9tYnMKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh3Y3NucnRvbWJzLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAoY2hhciAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqKnNyY3AsIHNpemVfdCBzcmNsZW4sIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpwcykKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMICh3Y3NucnRvbWJzLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAoY2hhciAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqKnNyY3AsIHNpemVfdCBzcmNsZW4sIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpwcykpOworIyBlbHNlCisjICBpZiAhQEhBVkVfV0NTTlJUT01CU0AKK19HTF9GVU5DREVDTF9TWVMgKHdjc25ydG9tYnMsIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpkZXN0LCBjb25zdCB3Y2hhcl90ICoqc3JjcCwgc2l6ZV90IHNyY2xlbiwgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKnBzKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3NucnRvbWJzLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAoY2hhciAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqKnNyY3AsIHNpemVfdCBzcmNsZW4sIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpwcykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAod2NzbnJ0b21icyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc25ydG9tYnMKKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1NOUlRPTUJTCitfR0xfV0FSTl9PTl9VU0UgKHdjc25ydG9tYnMsICJ3Y3NucnRvbWJzIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3NucnRvbWJzIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2NyZWVuIGNvbHVtbnMgbmVlZGVkIGZvciBXQy4gICovCisjaWYgQEdOVUxJQl9XQ1dJRFRIQAorIyBpZiBAUkVQTEFDRV9XQ1dJRFRIQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiB3Y3dpZHRoCisjICAgZGVmaW5lIHdjd2lkdGggcnBsX3djd2lkdGgKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh3Y3dpZHRoLCBpbnQsICh3Y2hhcl90KSBfR0xfQVRUUklCVVRFX1BVUkUpOworX0dMX0NYWEFMSUFTX1JQTCAod2N3aWR0aCwgaW50LCAod2NoYXJfdCkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfREVDTF9XQ1dJRFRIQAorLyogd2N3aWR0aCBleGlzdHMgYnV0IGlzIG5vdCBkZWNsYXJlZC4gICovCitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3dpZHRoLCBpbnQsICh3Y2hhcl90KSBfR0xfQVRUUklCVVRFX1BVUkUpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjd2lkdGgsIGludCwgKHdjaGFyX3QpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHdjd2lkdGgpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3dpZHRoCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NXSURUSAorX0dMX1dBUk5fT05fVVNFICh3Y3dpZHRoLCAid2N3aWR0aCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2N3aWR0aCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIFNlYXJjaCBOIHdpZGUgY2hhcmFjdGVycyBvZiBTIGZvciBDLiAgKi8KKyNpZiBAR05VTElCX1dNRU1DSFJACisjIGlmICFASEFWRV9XTUVNQ0hSQAorX0dMX0ZVTkNERUNMX1NZUyAod21lbWNociwgd2NoYXJfdCAqLCAoY29uc3Qgd2NoYXJfdCAqcywgd2NoYXJfdCBjLCBzaXplX3QgbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFKTsKKyMgZW5kaWYKKyAgLyogT24gc29tZSBzeXN0ZW1zLCB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYW4gb3ZlcmxvYWRlZCBmdW5jdGlvbjoKKyAgICAgICBleHRlcm4gIkMrKyIgeworICAgICAgICAgY29uc3Qgd2NoYXJfdCAqIHN0ZDo6d21lbWNociAoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90LCBzaXplX3QpOworICAgICAgICAgd2NoYXJfdCAqIHN0ZDo6d21lbWNociAod2NoYXJfdCAqLCB3Y2hhcl90LCBzaXplX3QpOworICAgICAgIH0gICovCitfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyICh3bWVtY2hyLAorICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqLCAoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90LCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqLCAoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90LCBzaXplX3QpKTsKKyMgaWYgKChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMTApICYmICFkZWZpbmVkIF9fVUNMSUJDX18pIFwKKyAgICAgJiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0KSkKK19HTF9DWFhBTElBU1dBUk4xICh3bWVtY2hyLCB3Y2hhcl90ICosICh3Y2hhcl90ICpzLCB3Y2hhcl90IGMsIHNpemVfdCBuKSk7CitfR0xfQ1hYQUxJQVNXQVJOMSAod21lbWNociwgY29uc3Qgd2NoYXJfdCAqLAorICAgICAgICAgICAgICAgICAgIChjb25zdCB3Y2hhcl90ICpzLCB3Y2hhcl90IGMsIHNpemVfdCBuKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU1dBUk4gKHdtZW1jaHIpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3bWVtY2hyCisjIGlmIEhBVkVfUkFXX0RFQ0xfV01FTUNIUgorX0dMX1dBUk5fT05fVVNFICh3bWVtY2hyLCAid21lbWNociBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd21lbWNociBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIENvbXBhcmUgTiB3aWRlIGNoYXJhY3RlcnMgb2YgUzEgYW5kIFMyLiAgKi8KKyNpZiBAR05VTElCX1dNRU1DTVBACisjIGlmICFASEFWRV9XTUVNQ01QQAorX0dMX0ZVTkNERUNMX1NZUyAod21lbWNtcCwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHdjaGFyX3QgKnMxLCBjb25zdCB3Y2hhcl90ICpzMiwgc2l6ZV90IG4pCisgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod21lbWNtcCwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHdjaGFyX3QgKnMxLCBjb25zdCB3Y2hhcl90ICpzMiwgc2l6ZV90IG4pKTsKK19HTF9DWFhBTElBU1dBUk4gKHdtZW1jbXApOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3bWVtY21wCisjIGlmIEhBVkVfUkFXX0RFQ0xfV01FTUNNUAorX0dMX1dBUk5fT05fVVNFICh3bWVtY21wLCAid21lbWNtcCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd21lbWNtcCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIENvcHkgTiB3aWRlIGNoYXJhY3RlcnMgb2YgU1JDIHRvIERFU1QuICAqLworI2lmIEBHTlVMSUJfV01FTUNQWUAKKyMgaWYgIUBIQVZFX1dNRU1DUFlACitfR0xfRlVOQ0RFQ0xfU1lTICh3bWVtY3B5LCB3Y2hhcl90ICosCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqc3JjLCBzaXplX3QgbikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod21lbWNweSwgd2NoYXJfdCAqLAorICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKmRlc3QsIGNvbnN0IHdjaGFyX3QgKnNyYywgc2l6ZV90IG4pKTsKK19HTF9DWFhBTElBU1dBUk4gKHdtZW1jcHkpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3bWVtY3B5CisjIGlmIEhBVkVfUkFXX0RFQ0xfV01FTUNQWQorX0dMX1dBUk5fT05fVVNFICh3bWVtY3B5LCAid21lbWNweSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd21lbWNweSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIENvcHkgTiB3aWRlIGNoYXJhY3RlcnMgb2YgU1JDIHRvIERFU1QsIGd1YXJhbnRlZWluZyBjb3JyZWN0IGJlaGF2aW9yIGZvcgorICAgb3ZlcmxhcHBpbmcgbWVtb3J5IGFyZWFzLiAgKi8KKyNpZiBAR05VTElCX1dNRU1NT1ZFQAorIyBpZiAhQEhBVkVfV01FTU1PVkVACitfR0xfRlVOQ0RFQ0xfU1lTICh3bWVtbW92ZSwgd2NoYXJfdCAqLAorICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKmRlc3QsIGNvbnN0IHdjaGFyX3QgKnNyYywgc2l6ZV90IG4pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdtZW1tb3ZlLCB3Y2hhcl90ICosCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqc3JjLCBzaXplX3QgbikpOworX0dMX0NYWEFMSUFTV0FSTiAod21lbW1vdmUpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3bWVtbW92ZQorIyBpZiBIQVZFX1JBV19ERUNMX1dNRU1NT1ZFCitfR0xfV0FSTl9PTl9VU0UgKHdtZW1tb3ZlLCAid21lbW1vdmUgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdtZW1tb3ZlIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogU2V0IE4gd2lkZSBjaGFyYWN0ZXJzIG9mIFMgdG8gQy4gICovCisjaWYgQEdOVUxJQl9XTUVNU0VUQAorIyBpZiAhQEhBVkVfV01FTVNFVEAKK19HTF9GVU5DREVDTF9TWVMgKHdtZW1zZXQsIHdjaGFyX3QgKiwgKHdjaGFyX3QgKnMsIHdjaGFyX3QgYywgc2l6ZV90IG4pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdtZW1zZXQsIHdjaGFyX3QgKiwgKHdjaGFyX3QgKnMsIHdjaGFyX3QgYywgc2l6ZV90IG4pKTsKK19HTF9DWFhBTElBU1dBUk4gKHdtZW1zZXQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3bWVtc2V0CisjIGlmIEhBVkVfUkFXX0RFQ0xfV01FTVNFVAorX0dMX1dBUk5fT05fVVNFICh3bWVtc2V0LCAid21lbXNldCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd21lbXNldCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIHdpZGUgY2hhcmFjdGVycyBpbiBTLiAgKi8KKyNpZiBAR05VTElCX1dDU0xFTkAKKyMgaWYgIUBIQVZFX1dDU0xFTkAKK19HTF9GVU5DREVDTF9TWVMgKHdjc2xlbiwgc2l6ZV90LCAoY29uc3Qgd2NoYXJfdCAqcykgX0dMX0FUVFJJQlVURV9QVVJFKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjc2xlbiwgc2l6ZV90LCAoY29uc3Qgd2NoYXJfdCAqcykpOworX0dMX0NYWEFMSUFTV0FSTiAod2NzbGVuKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2NzbGVuCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NTTEVOCitfR0xfV0FSTl9PTl9VU0UgKHdjc2xlbiwgIndjc2xlbiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NzbGVuIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2Ygd2lkZSBjaGFyYWN0ZXJzIGluIFMsIGJ1dCBhdCBtb3N0IE1BWExFTi4gICovCisjaWYgQEdOVUxJQl9XQ1NOTEVOQAorIyBpZiAhQEhBVkVfV0NTTkxFTkAKK19HTF9GVU5DREVDTF9TWVMgKHdjc25sZW4sIHNpemVfdCwgKGNvbnN0IHdjaGFyX3QgKnMsIHNpemVfdCBtYXhsZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3NubGVuLCBzaXplX3QsIChjb25zdCB3Y2hhcl90ICpzLCBzaXplX3QgbWF4bGVuKSk7CitfR0xfQ1hYQUxJQVNXQVJOICh3Y3NubGVuKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2NzbmxlbgorIyBpZiBIQVZFX1JBV19ERUNMX1dDU05MRU4KK19HTF9XQVJOX09OX1VTRSAod2NzbmxlbiwgIndjc25sZW4gaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdjc25sZW4gZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBDb3B5IFNSQyB0byBERVNULiAgKi8KKyNpZiBAR05VTElCX1dDU0NQWUAKKyMgaWYgIUBIQVZFX1dDU0NQWUAKK19HTF9GVU5DREVDTF9TWVMgKHdjc2NweSwgd2NoYXJfdCAqLCAod2NoYXJfdCAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqc3JjKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3NjcHksIHdjaGFyX3QgKiwgKHdjaGFyX3QgKmRlc3QsIGNvbnN0IHdjaGFyX3QgKnNyYykpOworX0dMX0NYWEFMSUFTV0FSTiAod2NzY3B5KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2NzY3B5CisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NTQ1BZCitfR0xfV0FSTl9PTl9VU0UgKHdjc2NweSwgIndjc2NweSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NzY3B5IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogQ29weSBTUkMgdG8gREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyBMJ1wwJyBpbiBERVNULiAgKi8KKyNpZiBAR05VTElCX1dDUENQWUAKKyMgaWYgIUBIQVZFX1dDUENQWUAKK19HTF9GVU5DREVDTF9TWVMgKHdjcGNweSwgd2NoYXJfdCAqLCAod2NoYXJfdCAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqc3JjKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3BjcHksIHdjaGFyX3QgKiwgKHdjaGFyX3QgKmRlc3QsIGNvbnN0IHdjaGFyX3QgKnNyYykpOworX0dMX0NYWEFMSUFTV0FSTiAod2NwY3B5KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2NwY3B5CisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NQQ1BZCitfR0xfV0FSTl9PTl9VU0UgKHdjcGNweSwgIndjcGNweSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NwY3B5IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogQ29weSBubyBtb3JlIHRoYW4gTiB3aWRlIGNoYXJhY3RlcnMgb2YgU1JDIHRvIERFU1QuICAqLworI2lmIEBHTlVMSUJfV0NTTkNQWUAKKyMgaWYgIUBIQVZFX1dDU05DUFlACitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3NuY3B5LCB3Y2hhcl90ICosCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqc3JjLCBzaXplX3QgbikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod2NzbmNweSwgd2NoYXJfdCAqLAorICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKmRlc3QsIGNvbnN0IHdjaGFyX3QgKnNyYywgc2l6ZV90IG4pKTsKK19HTF9DWFhBTElBU1dBUk4gKHdjc25jcHkpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3NuY3B5CisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NTTkNQWQorX0dMX1dBUk5fT05fVVNFICh3Y3NuY3B5LCAid2NzbmNweSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NzbmNweSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIENvcHkgbm8gbW9yZSB0aGFuIE4gY2hhcmFjdGVycyBvZiBTUkMgdG8gREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mCisgICB0aGUgbGFzdCBjaGFyYWN0ZXIgd3JpdHRlbiBpbnRvIERFU1QuICAqLworI2lmIEBHTlVMSUJfV0NQTkNQWUAKKyMgaWYgIUBIQVZFX1dDUE5DUFlACitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3BuY3B5LCB3Y2hhcl90ICosCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqc3JjLCBzaXplX3QgbikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod2NwbmNweSwgd2NoYXJfdCAqLAorICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKmRlc3QsIGNvbnN0IHdjaGFyX3QgKnNyYywgc2l6ZV90IG4pKTsKK19HTF9DWFhBTElBU1dBUk4gKHdjcG5jcHkpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3BuY3B5CisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NQTkNQWQorX0dMX1dBUk5fT05fVVNFICh3Y3BuY3B5LCAid2NwbmNweSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NwbmNweSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIEFwcGVuZCBTUkMgb250byBERVNULiAgKi8KKyNpZiBAR05VTElCX1dDU0NBVEAKKyMgaWYgIUBIQVZFX1dDU0NBVEAKK19HTF9GVU5DREVDTF9TWVMgKHdjc2NhdCwgd2NoYXJfdCAqLCAod2NoYXJfdCAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqc3JjKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3NjYXQsIHdjaGFyX3QgKiwgKHdjaGFyX3QgKmRlc3QsIGNvbnN0IHdjaGFyX3QgKnNyYykpOworX0dMX0NYWEFMSUFTV0FSTiAod2NzY2F0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2NzY2F0CisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NTQ0FUCitfR0xfV0FSTl9PTl9VU0UgKHdjc2NhdCwgIndjc2NhdCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NzY2F0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogQXBwZW5kIG5vIG1vcmUgdGhhbiBOIHdpZGUgY2hhcmFjdGVycyBvZiBTUkMgb250byBERVNULiAgKi8KKyNpZiBAR05VTElCX1dDU05DQVRACisjIGlmICFASEFWRV9XQ1NOQ0FUQAorX0dMX0ZVTkNERUNMX1NZUyAod2NzbmNhdCwgd2NoYXJfdCAqLAorICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKmRlc3QsIGNvbnN0IHdjaGFyX3QgKnNyYywgc2l6ZV90IG4pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjc25jYXQsIHdjaGFyX3QgKiwKKyAgICAgICAgICAgICAgICAgICh3Y2hhcl90ICpkZXN0LCBjb25zdCB3Y2hhcl90ICpzcmMsIHNpemVfdCBuKSk7CitfR0xfQ1hYQUxJQVNXQVJOICh3Y3NuY2F0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2NzbmNhdAorIyBpZiBIQVZFX1JBV19ERUNMX1dDU05DQVQKK19HTF9XQVJOX09OX1VTRSAod2NzbmNhdCwgIndjc25jYXQgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdjc25jYXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBDb21wYXJlIFMxIGFuZCBTMi4gICovCisjaWYgQEdOVUxJQl9XQ1NDTVBACisjIGlmICFASEFWRV9XQ1NDTVBACitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3NjbXAsIGludCwgKGNvbnN0IHdjaGFyX3QgKnMxLCBjb25zdCB3Y2hhcl90ICpzMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod2NzY21wLCBpbnQsIChjb25zdCB3Y2hhcl90ICpzMSwgY29uc3Qgd2NoYXJfdCAqczIpKTsKK19HTF9DWFhBTElBU1dBUk4gKHdjc2NtcCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc2NtcAorIyBpZiBIQVZFX1JBV19ERUNMX1dDU0NNUAorX0dMX1dBUk5fT05fVVNFICh3Y3NjbXAsICJ3Y3NjbXAgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdjc2NtcCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIENvbXBhcmUgbm8gbW9yZSB0aGFuIE4gd2lkZSBjaGFyYWN0ZXJzIG9mIFMxIGFuZCBTMi4gICovCisjaWYgQEdOVUxJQl9XQ1NOQ01QQAorIyBpZiAhQEhBVkVfV0NTTkNNUEAKK19HTF9GVU5DREVDTF9TWVMgKHdjc25jbXAsIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCB3Y2hhcl90ICpzMSwgY29uc3Qgd2NoYXJfdCAqczIsIHNpemVfdCBuKQorICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjc25jbXAsIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCB3Y2hhcl90ICpzMSwgY29uc3Qgd2NoYXJfdCAqczIsIHNpemVfdCBuKSk7CitfR0xfQ1hYQUxJQVNXQVJOICh3Y3NuY21wKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2NzbmNtcAorIyBpZiBIQVZFX1JBV19ERUNMX1dDU05DTVAKK19HTF9XQVJOX09OX1VTRSAod2NzbmNtcCwgIndjc25jbXAgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdjc25jbXAgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBDb21wYXJlIFMxIGFuZCBTMiwgaWdub3JpbmcgY2FzZS4gICovCisjaWYgQEdOVUxJQl9XQ1NDQVNFQ01QQAorIyBpZiAhQEhBVkVfV0NTQ0FTRUNNUEAKK19HTF9GVU5DREVDTF9TWVMgKHdjc2Nhc2VjbXAsIGludCwgKGNvbnN0IHdjaGFyX3QgKnMxLCBjb25zdCB3Y2hhcl90ICpzMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjc2Nhc2VjbXAsIGludCwgKGNvbnN0IHdjaGFyX3QgKnMxLCBjb25zdCB3Y2hhcl90ICpzMikpOworX0dMX0NYWEFMSUFTV0FSTiAod2NzY2FzZWNtcCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc2Nhc2VjbXAKKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1NDQVNFQ01QCitfR0xfV0FSTl9PTl9VU0UgKHdjc2Nhc2VjbXAsICJ3Y3NjYXNlY21wIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3NjYXNlY21wIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogQ29tcGFyZSBubyBtb3JlIHRoYW4gTiBjaGFycyBvZiBTMSBhbmQgUzIsIGlnbm9yaW5nIGNhc2UuICAqLworI2lmIEBHTlVMSUJfV0NTTkNBU0VDTVBACisjIGlmICFASEFWRV9XQ1NOQ0FTRUNNUEAKK19HTF9GVU5DREVDTF9TWVMgKHdjc25jYXNlY21wLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3Qgd2NoYXJfdCAqczEsIGNvbnN0IHdjaGFyX3QgKnMyLCBzaXplX3QgbikKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3NuY2FzZWNtcCwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHdjaGFyX3QgKnMxLCBjb25zdCB3Y2hhcl90ICpzMiwgc2l6ZV90IG4pKTsKK19HTF9DWFhBTElBU1dBUk4gKHdjc25jYXNlY21wKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2NzbmNhc2VjbXAKKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1NOQ0FTRUNNUAorX0dMX1dBUk5fT05fVVNFICh3Y3NuY2FzZWNtcCwgIndjc25jYXNlY21wIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3NuY2FzZWNtcCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIENvbXBhcmUgUzEgYW5kIFMyLCBib3RoIGludGVycHJldGVkIGFzIGFwcHJvcHJpYXRlIHRvIHRoZSBMQ19DT0xMQVRFCisgICBjYXRlZ29yeSBvZiB0aGUgY3VycmVudCBsb2NhbGUuICAqLworI2lmIEBHTlVMSUJfV0NTQ09MTEAKKyMgaWYgIUBIQVZFX1dDU0NPTExACitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3Njb2xsLCBpbnQsIChjb25zdCB3Y2hhcl90ICpzMSwgY29uc3Qgd2NoYXJfdCAqczIpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjc2NvbGwsIGludCwgKGNvbnN0IHdjaGFyX3QgKnMxLCBjb25zdCB3Y2hhcl90ICpzMikpOworX0dMX0NYWEFMSUFTV0FSTiAod2NzY29sbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc2NvbGwKKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1NDT0xMCitfR0xfV0FSTl9PTl9VU0UgKHdjc2NvbGwsICJ3Y3Njb2xsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3Njb2xsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogVHJhbnNmb3JtIFMyIGludG8gYXJyYXkgcG9pbnRlZCB0byBieSBTMSBzdWNoIHRoYXQgaWYgd2NzY21wIGlzIGFwcGxpZWQKKyAgIHRvIHR3byB0cmFuc2Zvcm1lZCBzdHJpbmdzIHRoZSByZXN1bHQgaXMgdGhlIGFzIGFwcGx5aW5nICd3Y3Njb2xsJyB0byB0aGUKKyAgIG9yaWdpbmFsIHN0cmluZ3MuICAqLworI2lmIEBHTlVMSUJfV0NTWEZSTUAKKyMgaWYgIUBIQVZFX1dDU1hGUk1ACitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3N4ZnJtLCBzaXplX3QsICh3Y2hhcl90ICpzMSwgY29uc3Qgd2NoYXJfdCAqczIsIHNpemVfdCBuKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3N4ZnJtLCBzaXplX3QsICh3Y2hhcl90ICpzMSwgY29uc3Qgd2NoYXJfdCAqczIsIHNpemVfdCBuKSk7CitfR0xfQ1hYQUxJQVNXQVJOICh3Y3N4ZnJtKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2NzeGZybQorIyBpZiBIQVZFX1JBV19ERUNMX1dDU1hGUk0KK19HTF9XQVJOX09OX1VTRSAod2NzeGZybSwgIndjc3hmcm0gaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdjc3hmcm0gZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBEdXBsaWNhdGUgUywgcmV0dXJuaW5nIGFuIGlkZW50aWNhbCBtYWxsb2MnZCBzdHJpbmcuICAqLworI2lmIEBHTlVMSUJfV0NTRFVQQAorIyBpZiAhQEhBVkVfV0NTRFVQQAorX0dMX0ZVTkNERUNMX1NZUyAod2NzZHVwLCB3Y2hhcl90ICosIChjb25zdCB3Y2hhcl90ICpzKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3NkdXAsIHdjaGFyX3QgKiwgKGNvbnN0IHdjaGFyX3QgKnMpKTsKK19HTF9DWFhBTElBU1dBUk4gKHdjc2R1cCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc2R1cAorIyBpZiBIQVZFX1JBV19ERUNMX1dDU0RVUAorX0dMX1dBUk5fT05fVVNFICh3Y3NkdXAsICJ3Y3NkdXAgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdjc2R1cCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgV0MgaW4gV0NTLiAgKi8KKyNpZiBAR05VTElCX1dDU0NIUkAKKyMgaWYgIUBIQVZFX1dDU0NIUkAKK19HTF9GVU5DREVDTF9TWVMgKHdjc2Nociwgd2NoYXJfdCAqLCAoY29uc3Qgd2NoYXJfdCAqd2NzLCB3Y2hhcl90IHdjKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRSk7CisjIGVuZGlmCisgIC8qIE9uIHNvbWUgc3lzdGVtcywgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGFuIG92ZXJsb2FkZWQgZnVuY3Rpb246CisgICAgICAgZXh0ZXJuICJDKysiIHsKKyAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiBzdGQ6Ondjc2NociAoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90KTsKKyAgICAgICAgIHdjaGFyX3QgKiBzdGQ6Ondjc2NociAod2NoYXJfdCAqLCB3Y2hhcl90KTsKKyAgICAgICB9ICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUMiAod2NzY2hyLAorICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqLCAoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiwgKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCkpOworIyBpZiAoKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxMCkgJiYgIWRlZmluZWQgX19VQ0xJQkNfXykgXAorICAgICAmJiAoX19HTlVDX18gPiA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDQpKQorX0dMX0NYWEFMSUFTV0FSTjEgKHdjc2Nociwgd2NoYXJfdCAqLCAod2NoYXJfdCAqd2NzLCB3Y2hhcl90IHdjKSk7CitfR0xfQ1hYQUxJQVNXQVJOMSAod2NzY2hyLCBjb25zdCB3Y2hhcl90ICosIChjb25zdCB3Y2hhcl90ICp3Y3MsIHdjaGFyX3Qgd2MpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTV0FSTiAod2NzY2hyKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2NzY2hyCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NTQ0hSCitfR0xfV0FSTl9PTl9VU0UgKHdjc2NociwgIndjc2NociBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NzY2hyIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogRmluZCB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIFdDIGluIFdDUy4gICovCisjaWYgQEdOVUxJQl9XQ1NSQ0hSQAorIyBpZiAhQEhBVkVfV0NTUkNIUkAKK19HTF9GVU5DREVDTF9TWVMgKHdjc3JjaHIsIHdjaGFyX3QgKiwgKGNvbnN0IHdjaGFyX3QgKndjcywgd2NoYXJfdCB3YykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFKTsKKyMgZW5kaWYKKyAgLyogT24gc29tZSBzeXN0ZW1zLCB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYW4gb3ZlcmxvYWRlZCBmdW5jdGlvbjoKKyAgICAgICBleHRlcm4gIkMrKyIgeworICAgICAgICAgY29uc3Qgd2NoYXJfdCAqIHN0ZDo6d2NzcmNociAoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90KTsKKyAgICAgICAgIHdjaGFyX3QgKiBzdGQ6Ondjc3JjaHIgKHdjaGFyX3QgKiwgd2NoYXJfdCk7CisgICAgICAgfSAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVDIgKHdjc3JjaHIsCisgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICosIChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqLCAoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90KSk7CisjIGlmICgoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEwKSAmJiAhZGVmaW5lZCBfX1VDTElCQ19fKSBcCisgICAgICYmIChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNCkpCitfR0xfQ1hYQUxJQVNXQVJOMSAod2NzcmNociwgd2NoYXJfdCAqLCAod2NoYXJfdCAqd2NzLCB3Y2hhcl90IHdjKSk7CitfR0xfQ1hYQUxJQVNXQVJOMSAod2NzcmNociwgY29uc3Qgd2NoYXJfdCAqLCAoY29uc3Qgd2NoYXJfdCAqd2NzLCB3Y2hhcl90IHdjKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU1dBUk4gKHdjc3JjaHIpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3NyY2hyCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NTUkNIUgorX0dMX1dBUk5fT05fVVNFICh3Y3NyY2hyLCAid2NzcmNociBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NzcmNociBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbml0aWFsIHNlZ21ldCBvZiBXQ1Mgd2hpY2ggY29uc2lzdHMgZW50aXJlbHkKKyAgIG9mIHdpZGUgY2hhcmFjdGVycyBub3QgaW4gUkVKRUNULiAgKi8KKyNpZiBAR05VTElCX1dDU0NTUE5ACisjIGlmICFASEFWRV9XQ1NDU1BOQAorX0dMX0ZVTkNERUNMX1NZUyAod2NzY3Nwbiwgc2l6ZV90LCAoY29uc3Qgd2NoYXJfdCAqd2NzLCBjb25zdCB3Y2hhcl90ICpyZWplY3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3Njc3BuLCBzaXplX3QsIChjb25zdCB3Y2hhcl90ICp3Y3MsIGNvbnN0IHdjaGFyX3QgKnJlamVjdCkpOworX0dMX0NYWEFMSUFTV0FSTiAod2NzY3Nwbik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc2NzcG4KKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1NDU1BOCitfR0xfV0FSTl9PTl9VU0UgKHdjc2NzcG4sICJ3Y3Njc3BuIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3Njc3BuIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGluaXRpYWwgc2VnbWV0IG9mIFdDUyB3aGljaCBjb25zaXN0cyBlbnRpcmVseQorICAgb2Ygd2lkZSBjaGFyYWN0ZXJzIGluIEFDQ0VQVC4gICovCisjaWYgQEdOVUxJQl9XQ1NTUE5ACisjIGlmICFASEFWRV9XQ1NTUE5ACitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3NzcG4sIHNpemVfdCwgKGNvbnN0IHdjaGFyX3QgKndjcywgY29uc3Qgd2NoYXJfdCAqYWNjZXB0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3NzcG4sIHNpemVfdCwgKGNvbnN0IHdjaGFyX3QgKndjcywgY29uc3Qgd2NoYXJfdCAqYWNjZXB0KSk7CitfR0xfQ1hYQUxJQVNXQVJOICh3Y3NzcG4pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3NzcG4KKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1NTUE4KK19HTF9XQVJOX09OX1VTRSAod2Nzc3BuLCAid2Nzc3BuIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3NzcG4gZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIGluIFdDUyBvZiBhbnkgY2hhcmFjdGVyIGluIEFDQ0VQVC4gICovCisjaWYgQEdOVUxJQl9XQ1NQQlJLQAorIyBpZiAhQEhBVkVfV0NTUEJSS0AKK19HTF9GVU5DREVDTF9TWVMgKHdjc3BicmssIHdjaGFyX3QgKiwKKyAgICAgICAgICAgICAgICAgIChjb25zdCB3Y2hhcl90ICp3Y3MsIGNvbnN0IHdjaGFyX3QgKmFjY2VwdCkKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRSk7CisjIGVuZGlmCisgIC8qIE9uIHNvbWUgc3lzdGVtcywgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGFuIG92ZXJsb2FkZWQgZnVuY3Rpb246CisgICAgICAgZXh0ZXJuICJDKysiIHsKKyAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiBzdGQ6Ondjc3BicmsgKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKKyAgICAgICAgIHdjaGFyX3QgKiBzdGQ6Ondjc3BicmsgKHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKKyAgICAgICB9ICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUMiAod2NzcGJyaywKKyAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKiwgKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiwgKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKSk7CisjIGlmICgoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEwKSAmJiAhZGVmaW5lZCBfX1VDTElCQ19fKSBcCisgICAgICYmIChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNCkpCitfR0xfQ1hYQUxJQVNXQVJOMSAod2NzcGJyaywgd2NoYXJfdCAqLAorICAgICAgICAgICAgICAgICAgICh3Y2hhcl90ICp3Y3MsIGNvbnN0IHdjaGFyX3QgKmFjY2VwdCkpOworX0dMX0NYWEFMSUFTV0FSTjEgKHdjc3BicmssIGNvbnN0IHdjaGFyX3QgKiwKKyAgICAgICAgICAgICAgICAgICAoY29uc3Qgd2NoYXJfdCAqd2NzLCBjb25zdCB3Y2hhcl90ICphY2NlcHQpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTV0FSTiAod2NzcGJyayk7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc3BicmsKKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1NQQlJLCitfR0xfV0FSTl9PTl9VU0UgKHdjc3BicmssICJ3Y3NwYnJrIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3NwYnJrIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBORUVETEUgaW4gSEFZU1RBQ0suICAqLworI2lmIEBHTlVMSUJfV0NTU1RSQAorIyBpZiAhQEhBVkVfV0NTU1RSQAorX0dMX0ZVTkNERUNMX1NZUyAod2Nzc3RyLCB3Y2hhcl90ICosCisgICAgICAgICAgICAgICAgICAoY29uc3Qgd2NoYXJfdCAqaGF5c3RhY2ssIGNvbnN0IHdjaGFyX3QgKm5lZWRsZSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRSk7CisjIGVuZGlmCisgIC8qIE9uIHNvbWUgc3lzdGVtcywgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGFuIG92ZXJsb2FkZWQgZnVuY3Rpb246CisgICAgICAgZXh0ZXJuICJDKysiIHsKKyAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiBzdGQ6Ondjc3N0ciAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOworICAgICAgICAgd2NoYXJfdCAqIHN0ZDo6d2Nzc3RyICh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CisgICAgICAgfSAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVDIgKHdjc3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKiwgKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiwgKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKSk7CisjIGlmICgoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEwKSAmJiAhZGVmaW5lZCBfX1VDTElCQ19fKSBcCisgICAgICYmIChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNCkpCitfR0xfQ1hYQUxJQVNXQVJOMSAod2Nzc3RyLCB3Y2hhcl90ICosCisgICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKmhheXN0YWNrLCBjb25zdCB3Y2hhcl90ICpuZWVkbGUpKTsKK19HTF9DWFhBTElBU1dBUk4xICh3Y3NzdHIsIGNvbnN0IHdjaGFyX3QgKiwKKyAgICAgICAgICAgICAgICAgICAoY29uc3Qgd2NoYXJfdCAqaGF5c3RhY2ssIGNvbnN0IHdjaGFyX3QgKm5lZWRsZSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNXQVJOICh3Y3NzdHIpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3NzdHIKKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1NTVFIKK19HTF9XQVJOX09OX1VTRSAod2Nzc3RyLCAid2Nzc3RyIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3NzdHIgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBEaXZpZGUgV0NTIGludG8gdG9rZW5zIHNlcGFyYXRlZCBieSBjaGFyYWN0ZXJzIGluIERFTElNLiAgKi8KKyNpZiBAR05VTElCX1dDU1RPS0AKKyMgaWYgIUBIQVZFX1dDU1RPS0AKK19HTF9GVU5DREVDTF9TWVMgKHdjc3Rvaywgd2NoYXJfdCAqLAorICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKndjcywgY29uc3Qgd2NoYXJfdCAqZGVsaW0sIHdjaGFyX3QgKipwdHIpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjc3Rvaywgd2NoYXJfdCAqLAorICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKndjcywgY29uc3Qgd2NoYXJfdCAqZGVsaW0sIHdjaGFyX3QgKipwdHIpKTsKK19HTF9DWFhBTElBU1dBUk4gKHdjc3Rvayk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc3RvaworIyBpZiBIQVZFX1JBV19ERUNMX1dDU1RPSworX0dMX1dBUk5fT05fVVNFICh3Y3N0b2ssICJ3Y3N0b2sgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdjc3RvayBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIERldGVybWluZSBudW1iZXIgb2YgY29sdW1uIHBvc2l0aW9ucyByZXF1aXJlZCBmb3IgZmlyc3QgTiB3aWRlCisgICBjaGFyYWN0ZXJzIChvciBmZXdlciBpZiBTIGVuZHMgYmVmb3JlIHRoaXMpIGluIFMuICAqLworI2lmIEBHTlVMSUJfV0NTV0lEVEhACisjIGlmIEBSRVBMQUNFX1dDU1dJRFRIQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiB3Y3N3aWR0aAorIyAgIGRlZmluZSB3Y3N3aWR0aCBycGxfd2Nzd2lkdGgKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh3Y3N3aWR0aCwgaW50LCAoY29uc3Qgd2NoYXJfdCAqcywgc2l6ZV90IG4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUpOworX0dMX0NYWEFMSUFTX1JQTCAod2Nzd2lkdGgsIGludCwgKGNvbnN0IHdjaGFyX3QgKnMsIHNpemVfdCBuKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9XQ1NXSURUSEAKK19HTF9GVU5DREVDTF9TWVMgKHdjc3dpZHRoLCBpbnQsIChjb25zdCB3Y2hhcl90ICpzLCBzaXplX3QgbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod2Nzd2lkdGgsIGludCwgKGNvbnN0IHdjaGFyX3QgKnMsIHNpemVfdCBuKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOICh3Y3N3aWR0aCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc3dpZHRoCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NTV0lEVEgKK19HTF9XQVJOX09OX1VTRSAod2Nzd2lkdGgsICJ3Y3N3aWR0aCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2Nzd2lkdGggZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1dDSEFSX0ggKi8KKyNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfV0NIQVJfSCAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvd2N0eXBlLWguYyBiL2xpYi93Y3R5cGUtaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNWY4NDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvd2N0eXBlLWguYwpAQCAtMCwwICsxLDQgQEAKKy8qIE5vcm1hbGx5IHRoaXMgd291bGQgYmUgd2N0eXBlLmMsIGJ1dCB0aGF0IG5hbWUncyBhbHJlYWR5IHRha2VuLiAgKi8KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNkZWZpbmUgX0dMX1dDVFlQRV9JTkxJTkUgX0dMX0VYVEVSTl9JTkxJTkUKKyNpbmNsdWRlICJ3Y3R5cGUuaCIKZGlmZiAtLWdpdCBhL2xpYi93Y3R5cGUuaW4uaCBiL2xpYi93Y3R5cGUuaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzk4ZmEzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3djdHlwZS5pbi5oCkBAIC0wLDAgKzEsNTA0IEBACisvKiBBIHN1YnN0aXR1dGUgZm9yIElTTyBDOTkgPHdjdHlwZS5oPiwgZm9yIHBsYXRmb3JtcyB0aGF0IGxhY2sgaXQuCisKKyAgIENvcHlyaWdodCAoQykgMjAwNi0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIGFuZCBQYXVsIEVnZ2VydC4gICovCisKKy8qCisgKiBJU08gQyA5OSA8d2N0eXBlLmg+IGZvciBwbGF0Zm9ybXMgdGhhdCBsYWNrIGl0LgorICogPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hiZC93Y3R5cGUuaC5odG1sPgorICoKKyAqIGlzd2N0eXBlLCB0b3djdHJhbnMsIHRvd2xvd2VyLCB0b3d1cHBlciwgd2N0cmFucywgd2N0eXBlLAorICogd2N0cmFuc190LCBhbmQgd2N0eXBlX3QgYXJlIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisgKi8KKworI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfV0NUWVBFX0gKKworI2lmIF9fR05VQ19fID49IDMKK0BQUkFHTUFfU1lTVEVNX0hFQURFUkAKKyNlbmRpZgorQFBSQUdNQV9DT0xVTU5TQAorCisjaWYgQEhBVkVfV0lOVF9UQAorLyogU29sYXJpcyAyLjUgaGFzIGEgYnVnOiA8d2NoYXIuaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgPHdjdHlwZS5oPi4KKyAgIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUKKyAgIDx3Y2hhci5oPi4KKyAgIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZQorICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovCisjIGluY2x1ZGUgPHN0ZGRlZi5oPgorIyBpbmNsdWRlIDxzdGRpby5oPgorIyBpbmNsdWRlIDx0aW1lLmg+CisjIGluY2x1ZGUgPHdjaGFyLmg+CisjZW5kaWYKKworLyogSW5jbHVkZSB0aGUgb3JpZ2luYWwgPHdjdHlwZS5oPiBpZiBpdCBleGlzdHMuCisgICBCZU9TIDUgaGFzIHRoZSBmdW5jdGlvbnMgYnV0IG5vIDx3Y3R5cGUuaD4uICAqLworLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworI2lmIEBIQVZFX1dDVFlQRV9IQAorIyBASU5DTFVERV9ORVhUQCBATkVYVF9XQ1RZUEVfSEAKKyNlbmRpZgorCisjaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9XQ1RZUEVfSAorI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfV0NUWVBFX0gKKworX0dMX0lOTElORV9IRUFERVJfQkVHSU4KKyNpZm5kZWYgX0dMX1dDVFlQRV9JTkxJTkUKKyMgZGVmaW5lIF9HTF9XQ1RZUEVfSU5MSU5FIF9HTF9JTkxJTkUKKyNlbmRpZgorCisvKiBUaGUgZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTCBldGMuIGFyZSBjb3BpZWQgaGVyZS4gICovCisKKy8qIFRoZSBkZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRSBpcyBjb3BpZWQgaGVyZS4gICovCisKKy8qIFNvbGFyaXMgMi42IDx3Y3R5cGUuaD4gaW5jbHVkZXMgPHdpZGVjLmg+IHdoaWNoIGluY2x1ZGVzIDxldWMuaD4gd2hpY2gKKyAgICNkZWZpbmVzIGEgbnVtYmVyIG9mIGlkZW50aWZpZXJzIGluIHRoZSBhcHBsaWNhdGlvbiBuYW1lc3BhY2UuICBSZXZlcnQKKyAgIHRoZXNlICNkZWZpbmVzLiAgKi8KKyNpZmRlZiBfX3N1bgorIyB1bmRlZiBtdWx0aWJ5dGUKKyMgdW5kZWYgZXVjdzEKKyMgdW5kZWYgZXVjdzIKKyMgdW5kZWYgZXVjdzMKKyMgdW5kZWYgc2NydzEKKyMgdW5kZWYgc2NydzIKKyMgdW5kZWYgc2NydzMKKyNlbmRpZgorCisvKiBEZWZpbmUgd2ludF90IGFuZCBXRU9GLiAgKEFsc28gZG9uZSBpbiB3Y2hhci5pbi5oLikgICovCisjaWYgIUBIQVZFX1dJTlRfVEAgJiYgIWRlZmluZWQgd2ludF90CisjIGRlZmluZSB3aW50X3QgaW50CisjIGlmbmRlZiBXRU9GCisjICBkZWZpbmUgV0VPRiAtMQorIyBlbmRpZgorI2Vsc2UKKy8qIE1TVkMgZGVmaW5lcyB3aW50X3QgYXMgJ3Vuc2lnbmVkIHNob3J0JyBpbiA8Y3J0ZGVmcy5oPi4KKyAgIFRoaXMgaXMgdG9vIHNtYWxsOiBJU08gQyA5OSBzZWN0aW9uIDcuMjQuMS4oMikgc2F5cyB0aGF0IHdpbnRfdCBtdXN0IGJlCisgICAidW5jaGFuZ2VkIGJ5IGRlZmF1bHQgYXJndW1lbnQgcHJvbW90aW9ucyIuICBPdmVycmlkZSBpdC4gICovCisjIGlmIGRlZmluZWQgX01TQ19WRVIKKyMgIGlmICFHTlVMSUJfZGVmaW5lZF93aW50X3QKKyMgICBpbmNsdWRlIDxjcnRkZWZzLmg+Cit0eXBlZGVmIHVuc2lnbmVkIGludCBycGxfd2ludF90OworIyAgIHVuZGVmIHdpbnRfdAorIyAgIGRlZmluZSB3aW50X3QgcnBsX3dpbnRfdAorIyAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF93aW50X3QgMQorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZuZGVmIFdFT0YKKyMgIGRlZmluZSBXRU9GICgod2ludF90KSAtMSkKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAhR05VTElCX2RlZmluZWRfd2N0eXBlX2Z1bmN0aW9ucworCisvKiBGcmVlQlNEIDQuNCB0byA0LjExIGhhcyA8d2N0eXBlLmg+IGJ1dCBsYWNrcyB0aGUgZnVuY3Rpb25zLgorICAgTGludXggbGliYzUgaGFzIDx3Y3R5cGUuaD4gYW5kIHRoZSBmdW5jdGlvbnMgYnV0IHRoZXkgYXJlIGJyb2tlbi4KKyAgIEFzc3VtZSBhbGwgMTEgZnVuY3Rpb25zIChhbGwgaXN3KiBleGNlcHQgaXN3YmxhbmspIGFyZSBpbXBsZW1lbnRlZCB0aGUKKyAgIHNhbWUgd2F5LCBvciBub3QgYXQgYWxsLiAgKi8KKyMgaWYgISBASEFWRV9JU1dDTlRSTEAgfHwgQFJFUExBQ0VfSVNXQ05UUkxACisKKy8qIElSSVggNS4zIGhhcyBtYWNyb3MgYnV0IG5vIGZ1bmN0aW9ucywgaXRzIGlzdyogbWFjcm9zIHJlZmVyIHRvIGFuCisgICB1bmRlZmluZWQgdmFyaWFibGUgX2N0bXBfIGFuZCB0byA8Y3R5cGUuaD4gbWFjcm9zIGxpa2UgX1AsIGFuZCB0aGV5CisgICByZWZlciB0byBzeXN0ZW0gZnVuY3Rpb25zIGxpa2UgX2lzd2N0eXBlIHRoYXQgYXJlIG5vdCBpbiB0aGUKKyAgIHN0YW5kYXJkIEMgbGlicmFyeS4gIFJhdGhlciB0aGFuIHRyeSB0byBnZXQgYW5jaWVudCBidWdneQorICAgaW1wbGVtZW50YXRpb25zIGxpa2UgdGhpcyB0byB3b3JrLCBqdXN0IGRpc2FibGUgdGhlbS4gICovCisjICB1bmRlZiBpc3dhbG51bQorIyAgdW5kZWYgaXN3YWxwaGEKKyMgIHVuZGVmIGlzd2JsYW5rCisjICB1bmRlZiBpc3djbnRybAorIyAgdW5kZWYgaXN3ZGlnaXQKKyMgIHVuZGVmIGlzd2dyYXBoCisjICB1bmRlZiBpc3dsb3dlcgorIyAgdW5kZWYgaXN3cHJpbnQKKyMgIHVuZGVmIGlzd3B1bmN0CisjICB1bmRlZiBpc3dzcGFjZQorIyAgdW5kZWYgaXN3dXBwZXIKKyMgIHVuZGVmIGlzd3hkaWdpdAorIyAgdW5kZWYgdG93bG93ZXIKKyMgIHVuZGVmIHRvd3VwcGVyCisKKy8qIExpbnV4IGxpYmM1IGhhcyA8d2N0eXBlLmg+IGFuZCB0aGUgZnVuY3Rpb25zIGJ1dCB0aGV5IGFyZSBicm9rZW4uICAqLworIyAgaWYgQFJFUExBQ0VfSVNXQ05UUkxACisjICAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICAgZGVmaW5lIGlzd2FsbnVtIHJwbF9pc3dhbG51bQorIyAgICBkZWZpbmUgaXN3YWxwaGEgcnBsX2lzd2FscGhhCisjICAgIGRlZmluZSBpc3dibGFuayBycGxfaXN3YmxhbmsKKyMgICAgZGVmaW5lIGlzd2NudHJsIHJwbF9pc3djbnRybAorIyAgICBkZWZpbmUgaXN3ZGlnaXQgcnBsX2lzd2RpZ2l0CisjICAgIGRlZmluZSBpc3dncmFwaCBycGxfaXN3Z3JhcGgKKyMgICAgZGVmaW5lIGlzd2xvd2VyIHJwbF9pc3dsb3dlcgorIyAgICBkZWZpbmUgaXN3cHJpbnQgcnBsX2lzd3ByaW50CisjICAgIGRlZmluZSBpc3dwdW5jdCBycGxfaXN3cHVuY3QKKyMgICAgZGVmaW5lIGlzd3NwYWNlIHJwbF9pc3dzcGFjZQorIyAgICBkZWZpbmUgaXN3dXBwZXIgcnBsX2lzd3VwcGVyCisjICAgIGRlZmluZSBpc3d4ZGlnaXQgcnBsX2lzd3hkaWdpdAorIyAgIGVuZGlmCisjICBlbmRpZgorIyAgaWYgQFJFUExBQ0VfVE9XTE9XRVJACisjICAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICAgZGVmaW5lIHRvd2xvd2VyIHJwbF90b3dsb3dlcgorIyAgICBkZWZpbmUgdG93dXBwZXIgcnBsX3Rvd3VwcGVyCisjICAgZW5kaWYKKyMgIGVuZGlmCisKK19HTF9XQ1RZUEVfSU5MSU5FIGludAorIyAgaWYgQFJFUExBQ0VfSVNXQ05UUkxACitycGxfaXN3YWxudW0KKyMgIGVsc2UKK2lzd2FsbnVtCisjICBlbmRpZgorICAgICAgICAgKHdpbnRfdCB3YykKK3sKKyAgcmV0dXJuICgod2MgPj0gJzAnICYmIHdjIDw9ICc5JykKKyAgICAgICAgICB8fCAoKHdjICYgfjB4MjApID49ICdBJyAmJiAod2MgJiB+MHgyMCkgPD0gJ1onKSk7Cit9CisKK19HTF9XQ1RZUEVfSU5MSU5FIGludAorIyAgaWYgQFJFUExBQ0VfSVNXQ05UUkxACitycGxfaXN3YWxwaGEKKyMgIGVsc2UKK2lzd2FscGhhCisjICBlbmRpZgorICAgICAgICAgKHdpbnRfdCB3YykKK3sKKyAgcmV0dXJuICh3YyAmIH4weDIwKSA+PSAnQScgJiYgKHdjICYgfjB4MjApIDw9ICdaJzsKK30KKworX0dMX1dDVFlQRV9JTkxJTkUgaW50CisjICBpZiBAUkVQTEFDRV9JU1dDTlRSTEAKK3JwbF9pc3dibGFuaworIyAgZWxzZQoraXN3YmxhbmsKKyMgIGVuZGlmCisgICAgICAgICAod2ludF90IHdjKQoreworICByZXR1cm4gd2MgPT0gJyAnIHx8IHdjID09ICdcdCc7Cit9CisKK19HTF9XQ1RZUEVfSU5MSU5FIGludAorIyAgaWYgQFJFUExBQ0VfSVNXQ05UUkxACitycGxfaXN3Y250cmwKKyMgIGVsc2UKK2lzd2NudHJsCisjICBlbmRpZgorICAgICAgICAod2ludF90IHdjKQoreworICByZXR1cm4gKHdjICYgfjB4MWYpID09IDAgfHwgd2MgPT0gMHg3ZjsKK30KKworX0dMX1dDVFlQRV9JTkxJTkUgaW50CisjICBpZiBAUkVQTEFDRV9JU1dDTlRSTEAKK3JwbF9pc3dkaWdpdAorIyAgZWxzZQoraXN3ZGlnaXQKKyMgIGVuZGlmCisgICAgICAgICAod2ludF90IHdjKQoreworICByZXR1cm4gd2MgPj0gJzAnICYmIHdjIDw9ICc5JzsKK30KKworX0dMX1dDVFlQRV9JTkxJTkUgaW50CisjICBpZiBAUkVQTEFDRV9JU1dDTlRSTEAKK3JwbF9pc3dncmFwaAorIyAgZWxzZQoraXN3Z3JhcGgKKyMgIGVuZGlmCisgICAgICAgICAod2ludF90IHdjKQoreworICByZXR1cm4gd2MgPj0gJyEnICYmIHdjIDw9ICd+JzsKK30KKworX0dMX1dDVFlQRV9JTkxJTkUgaW50CisjICBpZiBAUkVQTEFDRV9JU1dDTlRSTEAKK3JwbF9pc3dsb3dlcgorIyAgZWxzZQoraXN3bG93ZXIKKyMgIGVuZGlmCisgICAgICAgICAod2ludF90IHdjKQoreworICByZXR1cm4gd2MgPj0gJ2EnICYmIHdjIDw9ICd6JzsKK30KKworX0dMX1dDVFlQRV9JTkxJTkUgaW50CisjICBpZiBAUkVQTEFDRV9JU1dDTlRSTEAKK3JwbF9pc3dwcmludAorIyAgZWxzZQoraXN3cHJpbnQKKyMgIGVuZGlmCisgICAgICAgICAod2ludF90IHdjKQoreworICByZXR1cm4gd2MgPj0gJyAnICYmIHdjIDw9ICd+JzsKK30KKworX0dMX1dDVFlQRV9JTkxJTkUgaW50CisjICBpZiBAUkVQTEFDRV9JU1dDTlRSTEAKK3JwbF9pc3dwdW5jdAorIyAgZWxzZQoraXN3cHVuY3QKKyMgIGVuZGlmCisgICAgICAgICAod2ludF90IHdjKQoreworICByZXR1cm4gKHdjID49ICchJyAmJiB3YyA8PSAnficKKyAgICAgICAgICAmJiAhKCh3YyA+PSAnMCcgJiYgd2MgPD0gJzknKQorICAgICAgICAgICAgICAgfHwgKCh3YyAmIH4weDIwKSA+PSAnQScgJiYgKHdjICYgfjB4MjApIDw9ICdaJykpKTsKK30KKworX0dMX1dDVFlQRV9JTkxJTkUgaW50CisjICBpZiBAUkVQTEFDRV9JU1dDTlRSTEAKK3JwbF9pc3dzcGFjZQorIyAgZWxzZQoraXN3c3BhY2UKKyMgIGVuZGlmCisgICAgICAgICAod2ludF90IHdjKQoreworICByZXR1cm4gKHdjID09ICcgJyB8fCB3YyA9PSAnXHQnCisgICAgICAgICAgfHwgd2MgPT0gJ1xuJyB8fCB3YyA9PSAnXHYnIHx8IHdjID09ICdcZicgfHwgd2MgPT0gJ1xyJyk7Cit9CisKK19HTF9XQ1RZUEVfSU5MSU5FIGludAorIyAgaWYgQFJFUExBQ0VfSVNXQ05UUkxACitycGxfaXN3dXBwZXIKKyMgIGVsc2UKK2lzd3VwcGVyCisjICBlbmRpZgorICAgICAgICAgKHdpbnRfdCB3YykKK3sKKyAgcmV0dXJuIHdjID49ICdBJyAmJiB3YyA8PSAnWic7Cit9CisKK19HTF9XQ1RZUEVfSU5MSU5FIGludAorIyAgaWYgQFJFUExBQ0VfSVNXQ05UUkxACitycGxfaXN3eGRpZ2l0CisjICBlbHNlCitpc3d4ZGlnaXQKKyMgIGVuZGlmCisgICAgICAgICAgKHdpbnRfdCB3YykKK3sKKyAgcmV0dXJuICgod2MgPj0gJzAnICYmIHdjIDw9ICc5JykKKyAgICAgICAgICB8fCAoKHdjICYgfjB4MjApID49ICdBJyAmJiAod2MgJiB+MHgyMCkgPD0gJ0YnKSk7Cit9CisKK19HTF9XQ1RZUEVfSU5MSU5FIHdpbnRfdAorIyAgaWYgQFJFUExBQ0VfVE9XTE9XRVJACitycGxfdG93bG93ZXIKKyMgIGVsc2UKK3Rvd2xvd2VyCisjICBlbmRpZgorICAgICAgICAgKHdpbnRfdCB3YykKK3sKKyAgcmV0dXJuICh3YyA+PSAnQScgJiYgd2MgPD0gJ1onID8gd2MgLSAnQScgKyAnYScgOiB3Yyk7Cit9CisKK19HTF9XQ1RZUEVfSU5MSU5FIHdpbnRfdAorIyAgaWYgQFJFUExBQ0VfVE9XTE9XRVJACitycGxfdG93dXBwZXIKKyMgIGVsc2UKK3Rvd3VwcGVyCisjICBlbmRpZgorICAgICAgICAgKHdpbnRfdCB3YykKK3sKKyAgcmV0dXJuICh3YyA+PSAnYScgJiYgd2MgPD0gJ3onID8gd2MgLSAnYScgKyAnQScgOiB3Yyk7Cit9CisKKyMgZWxpZiBAR05VTElCX0lTV0JMQU5LQCAmJiAoISBASEFWRV9JU1dCTEFOS0AgfHwgQFJFUExBQ0VfSVNXQkxBTktAKQorLyogT25seSB0aGUgaXN3YmxhbmsgZnVuY3Rpb24gaXMgbWlzc2luZy4gICovCisKKyMgIGlmIEBSRVBMQUNFX0lTV0JMQU5LQAorIyAgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgIGRlZmluZSBpc3dibGFuayBycGxfaXN3YmxhbmsKKyMgICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoaXN3YmxhbmssIGludCwgKHdpbnRfdCB3YykpOworIyAgZWxzZQorX0dMX0ZVTkNERUNMX1NZUyAoaXN3YmxhbmssIGludCwgKHdpbnRfdCB3YykpOworIyAgZW5kaWYKKworIyBlbmRpZgorCisjIGlmIGRlZmluZWQgX19NSU5HVzMyX18KKworLyogT24gbmF0aXZlIFdpbmRvd3MsIHdjaGFyX3QgaXMgdWludDE2X3QsIGFuZCB3aW50X3QgaXMgdWludDMyX3QuCisgICBUaGUgZnVuY3Rpb25zIHRvd2xvd2VyIGFuZCB0b3d1cHBlciBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlIE1TVkNSVCBsaWJyYXJ5CisgICB0byB0YWtlIGEgd2NoYXJfdCBhcmd1bWVudCBhbmQgcmV0dXJuIGEgd2NoYXJfdCByZXN1bHQuICBtaW5ndyBkZWNsYXJlcworICAgdGhlc2UgZnVuY3Rpb25zIHRvIHRha2UgYSB3aW50X3QgYXJndW1lbnQgYW5kIHJldHVybiBhIHdpbnRfdCByZXN1bHQuCisgICBUaGlzIG1lYW5zIHRoYXQ6CisgICAxLiBXaGVuIHRoZSB1c2VyIHBhc3NlcyBhbiBhcmd1bWVudCBvdXRzaWRlIHRoZSByYW5nZSAweDAwMDAuLjB4RkZGRiwgdGhlCisgICAgICBmdW5jdGlvbiB3aWxsIGxvb2sgb25seSBhdCB0aGUgbG93ZXIgMTYgYml0cy4gIFRoaXMgaXMgYWxsb3dlZCBhY2NvcmRpbmcKKyAgICAgIHRvIFBPU0lYLgorICAgMi4gVGhlIHJldHVybiB2YWx1ZSBpcyByZXR1cm5lZCBpbiB0aGUgbG93ZXIgMTYgYml0cyBvZiB0aGUgcmVzdWx0IHJlZ2lzdGVyLgorICAgICAgVGhlIHVwcGVyIDE2IGJpdHMgYXJlIHJhbmRvbTogd2hhdGV2ZXIgaGFwcGVuZWQgdG8gYmUgaW4gdGhhdCBwYXJ0IG9mIHRoZQorICAgICAgcmVzdWx0IHJlZ2lzdGVyLiAgV2UgbmVlZCB0byBmaXggdGhpcyBieSBhZGRpbmcgYSB6ZXJvLWV4dGVuZCBmcm9tCisgICAgICB3Y2hhcl90IHRvIHdpbnRfdCBhZnRlciB0aGUgY2FsbC4gICovCisKK19HTF9XQ1RZUEVfSU5MSU5FIHdpbnRfdAorcnBsX3Rvd2xvd2VyICh3aW50X3Qgd2MpCit7CisgIHJldHVybiAod2ludF90KSAod2NoYXJfdCkgdG93bG93ZXIgKHdjKTsKK30KKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHRvd2xvd2VyIHJwbF90b3dsb3dlcgorIyAgZW5kaWYKKworX0dMX1dDVFlQRV9JTkxJTkUgd2ludF90CitycGxfdG93dXBwZXIgKHdpbnRfdCB3YykKK3sKKyAgcmV0dXJuICh3aW50X3QpICh3Y2hhcl90KSB0b3d1cHBlciAod2MpOworfQorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgdG93dXBwZXIgcnBsX3Rvd3VwcGVyCisjICBlbmRpZgorCisjIGVuZGlmIC8qIF9fTUlOR1czMl9fICovCisKKyMgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX3djdHlwZV9mdW5jdGlvbnMgMQorI2VuZGlmCisKKyNpZiBAUkVQTEFDRV9JU1dDTlRSTEAKK19HTF9DWFhBTElBU19SUEwgKGlzd2FsbnVtLCBpbnQsICh3aW50X3Qgd2MpKTsKK19HTF9DWFhBTElBU19SUEwgKGlzd2FscGhhLCBpbnQsICh3aW50X3Qgd2MpKTsKK19HTF9DWFhBTElBU19SUEwgKGlzd2NudHJsLCBpbnQsICh3aW50X3Qgd2MpKTsKK19HTF9DWFhBTElBU19SUEwgKGlzd2RpZ2l0LCBpbnQsICh3aW50X3Qgd2MpKTsKK19HTF9DWFhBTElBU19SUEwgKGlzd2dyYXBoLCBpbnQsICh3aW50X3Qgd2MpKTsKK19HTF9DWFhBTElBU19SUEwgKGlzd2xvd2VyLCBpbnQsICh3aW50X3Qgd2MpKTsKK19HTF9DWFhBTElBU19SUEwgKGlzd3ByaW50LCBpbnQsICh3aW50X3Qgd2MpKTsKK19HTF9DWFhBTElBU19SUEwgKGlzd3B1bmN0LCBpbnQsICh3aW50X3Qgd2MpKTsKK19HTF9DWFhBTElBU19SUEwgKGlzd3NwYWNlLCBpbnQsICh3aW50X3Qgd2MpKTsKK19HTF9DWFhBTElBU19SUEwgKGlzd3VwcGVyLCBpbnQsICh3aW50X3Qgd2MpKTsKK19HTF9DWFhBTElBU19SUEwgKGlzd3hkaWdpdCwgaW50LCAod2ludF90IHdjKSk7CisjZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoaXN3YWxudW0sIGludCwgKHdpbnRfdCB3YykpOworX0dMX0NYWEFMSUFTX1NZUyAoaXN3YWxwaGEsIGludCwgKHdpbnRfdCB3YykpOworX0dMX0NYWEFMSUFTX1NZUyAoaXN3Y250cmwsIGludCwgKHdpbnRfdCB3YykpOworX0dMX0NYWEFMSUFTX1NZUyAoaXN3ZGlnaXQsIGludCwgKHdpbnRfdCB3YykpOworX0dMX0NYWEFMSUFTX1NZUyAoaXN3Z3JhcGgsIGludCwgKHdpbnRfdCB3YykpOworX0dMX0NYWEFMSUFTX1NZUyAoaXN3bG93ZXIsIGludCwgKHdpbnRfdCB3YykpOworX0dMX0NYWEFMSUFTX1NZUyAoaXN3cHJpbnQsIGludCwgKHdpbnRfdCB3YykpOworX0dMX0NYWEFMSUFTX1NZUyAoaXN3cHVuY3QsIGludCwgKHdpbnRfdCB3YykpOworX0dMX0NYWEFMSUFTX1NZUyAoaXN3c3BhY2UsIGludCwgKHdpbnRfdCB3YykpOworX0dMX0NYWEFMSUFTX1NZUyAoaXN3dXBwZXIsIGludCwgKHdpbnRfdCB3YykpOworX0dMX0NYWEFMSUFTX1NZUyAoaXN3eGRpZ2l0LCBpbnQsICh3aW50X3Qgd2MpKTsKKyNlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoaXN3YWxudW0pOworX0dMX0NYWEFMSUFTV0FSTiAoaXN3YWxwaGEpOworX0dMX0NYWEFMSUFTV0FSTiAoaXN3Y250cmwpOworX0dMX0NYWEFMSUFTV0FSTiAoaXN3ZGlnaXQpOworX0dMX0NYWEFMSUFTV0FSTiAoaXN3Z3JhcGgpOworX0dMX0NYWEFMSUFTV0FSTiAoaXN3bG93ZXIpOworX0dMX0NYWEFMSUFTV0FSTiAoaXN3cHJpbnQpOworX0dMX0NYWEFMSUFTV0FSTiAoaXN3cHVuY3QpOworX0dMX0NYWEFMSUFTV0FSTiAoaXN3c3BhY2UpOworX0dMX0NYWEFMSUFTV0FSTiAoaXN3dXBwZXIpOworX0dMX0NYWEFMSUFTV0FSTiAoaXN3eGRpZ2l0KTsKKworI2lmIEBHTlVMSUJfSVNXQkxBTktACisjIGlmIEBSRVBMQUNFX0lTV0NOVFJMQCB8fCBAUkVQTEFDRV9JU1dCTEFOS0AKK19HTF9DWFhBTElBU19SUEwgKGlzd2JsYW5rLCBpbnQsICh3aW50X3Qgd2MpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoaXN3YmxhbmssIGludCwgKHdpbnRfdCB3YykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoaXN3YmxhbmspOworI2VuZGlmCisKKyNpZiAhQEhBVkVfV0NUWVBFX1RACisjIGlmICFHTlVMSUJfZGVmaW5lZF93Y3R5cGVfdAordHlwZWRlZiB2b2lkICogd2N0eXBlX3Q7CisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfd2N0eXBlX3QgMQorIyBlbmRpZgorI2VuZGlmCisKKy8qIEdldCBhIGRlc2NyaXB0b3IgZm9yIGEgd2lkZSBjaGFyYWN0ZXIgcHJvcGVydHkuICAqLworI2lmIEBHTlVMSUJfV0NUWVBFQAorIyBpZiAhQEhBVkVfV0NUWVBFX1RACitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3R5cGUsIHdjdHlwZV90LCAoY29uc3QgY2hhciAqbmFtZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod2N0eXBlLCB3Y3R5cGVfdCwgKGNvbnN0IGNoYXIgKm5hbWUpKTsKK19HTF9DWFhBTElBU1dBUk4gKHdjdHlwZSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjdHlwZQorIyBpZiBIQVZFX1JBV19ERUNMX1dDVFlQRQorX0dMX1dBUk5fT05fVVNFICh3Y3R5cGUsICJ3Y3R5cGUgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdjdHlwZSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBUZXN0IHdoZXRoZXIgYSB3aWRlIGNoYXJhY3RlciBoYXMgYSBnaXZlbiBwcm9wZXJ0eS4KKyAgIFRoZSBhcmd1bWVudCBXQyBtdXN0IGJlIGVpdGhlciBhIHdjaGFyX3QgdmFsdWUgb3IgV0VPRi4KKyAgIFRoZSBhcmd1bWVudCBERVNDIG11c3QgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IHRoZSB3Y3R5cGUoKSBmdW5jdGlvbi4gICovCisjaWYgQEdOVUxJQl9JU1dDVFlQRUAKKyMgaWYgIUBIQVZFX1dDVFlQRV9UQAorX0dMX0ZVTkNERUNMX1NZUyAoaXN3Y3R5cGUsIGludCwgKHdpbnRfdCB3Yywgd2N0eXBlX3QgZGVzYykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoaXN3Y3R5cGUsIGludCwgKHdpbnRfdCB3Yywgd2N0eXBlX3QgZGVzYykpOworX0dMX0NYWEFMSUFTV0FSTiAoaXN3Y3R5cGUpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBpc3djdHlwZQorIyBpZiBIQVZFX1JBV19ERUNMX0lTV0NUWVBFCitfR0xfV0FSTl9PTl9VU0UgKGlzd2N0eXBlLCAiaXN3Y3R5cGUgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGlzd2N0eXBlIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAUkVQTEFDRV9UT1dMT1dFUkAgfHwgZGVmaW5lZCBfX01JTkdXMzJfXworX0dMX0NYWEFMSUFTX1JQTCAodG93bG93ZXIsIHdpbnRfdCwgKHdpbnRfdCB3YykpOworX0dMX0NYWEFMSUFTX1JQTCAodG93dXBwZXIsIHdpbnRfdCwgKHdpbnRfdCB3YykpOworI2Vsc2UKK19HTF9DWFhBTElBU19TWVMgKHRvd2xvd2VyLCB3aW50X3QsICh3aW50X3Qgd2MpKTsKK19HTF9DWFhBTElBU19TWVMgKHRvd3VwcGVyLCB3aW50X3QsICh3aW50X3Qgd2MpKTsKKyNlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAodG93bG93ZXIpOworX0dMX0NYWEFMSUFTV0FSTiAodG93dXBwZXIpOworCisjaWYgIUBIQVZFX1dDVFJBTlNfVEAKKyMgaWYgIUdOVUxJQl9kZWZpbmVkX3djdHJhbnNfdAordHlwZWRlZiB2b2lkICogd2N0cmFuc190OworIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX3djdHJhbnNfdCAxCisjIGVuZGlmCisjZW5kaWYKKworLyogR2V0IGEgZGVzY3JpcHRvciBmb3IgYSB3aWRlIGNoYXJhY3RlciBjYXNlIGNvbnZlcnNpb24uICAqLworI2lmIEBHTlVMSUJfV0NUUkFOU0AKKyMgaWYgIUBIQVZFX1dDVFJBTlNfVEAKK19HTF9GVU5DREVDTF9TWVMgKHdjdHJhbnMsIHdjdHJhbnNfdCwgKGNvbnN0IGNoYXIgKm5hbWUpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjdHJhbnMsIHdjdHJhbnNfdCwgKGNvbnN0IGNoYXIgKm5hbWUpKTsKK19HTF9DWFhBTElBU1dBUk4gKHdjdHJhbnMpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3RyYW5zCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NUUkFOUworX0dMX1dBUk5fT05fVVNFICh3Y3RyYW5zLCAid2N0cmFucyBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2N0cmFucyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBQZXJmb3JtIGEgZ2l2ZW4gY2FzZSBjb252ZXJzaW9uIG9uIGEgd2lkZSBjaGFyYWN0ZXIuCisgICBUaGUgYXJndW1lbnQgV0MgbXVzdCBiZSBlaXRoZXIgYSB3Y2hhcl90IHZhbHVlIG9yIFdFT0YuCisgICBUaGUgYXJndW1lbnQgREVTQyBtdXN0IGhhdmUgYmVlbiByZXR1cm5lZCBieSB0aGUgd2N0cmFucygpIGZ1bmN0aW9uLiAgKi8KKyNpZiBAR05VTElCX1RPV0NUUkFOU0AKKyMgaWYgIUBIQVZFX1dDVFJBTlNfVEAKK19HTF9GVU5DREVDTF9TWVMgKHRvd2N0cmFucywgd2ludF90LCAod2ludF90IHdjLCB3Y3RyYW5zX3QgZGVzYykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAodG93Y3RyYW5zLCB3aW50X3QsICh3aW50X3Qgd2MsIHdjdHJhbnNfdCBkZXNjKSk7CitfR0xfQ1hYQUxJQVNXQVJOICh0b3djdHJhbnMpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB0b3djdHJhbnMKKyMgaWYgSEFWRV9SQVdfREVDTF9UT1dDVFJBTlMKK19HTF9XQVJOX09OX1VTRSAodG93Y3RyYW5zLCAidG93Y3RyYW5zIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB0b3djdHJhbnMgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworX0dMX0lOTElORV9IRUFERVJfRU5ECisKKyNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfV0NUWVBFX0ggKi8KKyNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfV0NUWVBFX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi93Y3dpZHRoLmMgYi9saWIvd2N3aWR0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NTAzYjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvd2N3aWR0aC5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qIERldGVybWluZSB0aGUgbnVtYmVyIG9mIHNjcmVlbiBjb2x1bW5zIG5lZWRlZCBmb3IgYSBjaGFyYWN0ZXIuCisgICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNywgMjAxMC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgPHdjaGFyLmg+CisKKy8qIEdldCBpc3dwcmludC4gICovCisjaW5jbHVkZSA8d2N0eXBlLmg+CisKKyNpbmNsdWRlICJsb2NhbGNoYXJzZXQuaCIKKyNpbmNsdWRlICJzdHJlcS5oIgorI2luY2x1ZGUgInVuaXdpZHRoLmgiCisKK2ludAord2N3aWR0aCAod2NoYXJfdCB3YykKKyN1bmRlZiB3Y3dpZHRoCit7CisgIC8qIEluIFVURi04IGxvY2FsZXMsIHVzZSBhIFVuaWNvZGUgYXdhcmUgd2lkdGggZnVuY3Rpb24uICAqLworICBjb25zdCBjaGFyICplbmNvZGluZyA9IGxvY2FsZV9jaGFyc2V0ICgpOworICBpZiAoU1RSRVFfT1BUIChlbmNvZGluZywgIlVURi04IiwgJ1UnLCAnVCcsICdGJywgJy0nLCAnOCcsIDAsIDAsIDAgLDApKQorICAgIHsKKyAgICAgIC8qIFdlIGFzc3VtZSB0aGF0IGluIGEgVVRGLTggbG9jYWxlLCBhIHdpZGUgY2hhcmFjdGVyIGlzIHRoZSBzYW1lIGFzIGEKKyAgICAgICAgIFVuaWNvZGUgY2hhcmFjdGVyLiAgKi8KKyAgICAgIHJldHVybiB1Y193aWR0aCAod2MsIGVuY29kaW5nKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBPdGhlcndpc2UsIGZhbGwgYmFjayB0byB0aGUgc3lzdGVtJ3Mgd2N3aWR0aCBmdW5jdGlvbi4gICovCisjaWYgSEFWRV9XQ1dJRFRICisgICAgICByZXR1cm4gd2N3aWR0aCAod2MpOworI2Vsc2UKKyAgICAgIHJldHVybiB3YyA9PSAwID8gMCA6IGlzd3ByaW50ICh3YykgPyAxIDogLTE7CisjZW5kaWYKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9saWIveGFsbG9jLWRpZS5jIGIvbGliL3hhbGxvYy1kaWUuYwppbmRleCA5YjRhNzZjLi5lODVkNmRmIDEwMDY0NAotLS0gYS9saWIveGFsbG9jLWRpZS5jCisrKyBiL2xpYi94YWxsb2MtZGllLmMKQEAgLTEsMTIgKzEsMTIgQEAKIC8qIFJlcG9ydCBhIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgYW5kIGV4aXQuCiAKLSAgIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNiBGcmVlCi0gICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMCwgMjAwMi0yMDA0LCAyMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLgogCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCkBAIC0xNCwxMiArMTQsOSBAQAogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCisjaW5jbHVkZSA8Y29uZmlnLmg+CiAKICNpbmNsdWRlICJ4YWxsb2MuaCIKIApAQCAtMzYsNyArMzMsNyBAQAogewogICBlcnJvciAoZXhpdF9mYWlsdXJlLCAwLCAiJXMiLCBfKCJtZW1vcnkgZXhoYXVzdGVkIikpOwogCi0gIC8qIFRoZSBgbm9yZXR1cm4nIGNhbm5vdCBiZSBnaXZlbiB0byBlcnJvciwgc2luY2UgaXQgbWF5IHJldHVybiBpZgorICAvKiBfTm9yZXR1cm4gY2Fubm90IGJlIGdpdmVuIHRvIGVycm9yLCBzaW5jZSBpdCBtYXkgcmV0dXJuIGlmCiAgICAgIGl0cyBmaXJzdCBhcmd1bWVudCBpcyAwLiAgVG8gaGVscCBjb21waWxlcnMgdW5kZXJzdGFuZCB0aGUKICAgICAgeGFsbG9jX2RpZSBkb2VzIG5vdCByZXR1cm4sIGNhbGwgYWJvcnQuICBBbHNvLCB0aGUgYWJvcnQgaXMgYQogICAgICBzYWZldHkgZmVhdHVyZSBpZiBleGl0X2ZhaWx1cmUgaXMgMCAod2hpY2ggc2hvdWxkbid0IGhhcHBlbikuICAqLwpkaWZmIC0tZ2l0IGEvbGliL3hhbGxvYy1vdmVyc2l6ZWQuaCBiL2xpYi94YWxsb2Mtb3ZlcnNpemVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ3NzdkOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi94YWxsb2Mtb3ZlcnNpemVkLmgKQEAgLTAsMCArMSwzOCBAQAorLyogeGFsbG9jLW92ZXJzaXplZC5oIC0tIG1lbW9yeSBhbGxvY2F0aW9uIHNpemUgY2hlY2tpbmcKKworICAgQ29weXJpZ2h0IChDKSAxOTkwLTIwMDAsIDIwMDMtMjAwNCwgMjAwNi0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIFhBTExPQ19PVkVSU0laRURfSF8KKyMgZGVmaW5lIFhBTExPQ19PVkVSU0laRURfSF8KKworIyBpbmNsdWRlIDxzdGRkZWYuaD4KKworLyogUmV0dXJuIDEgaWYgYW4gYXJyYXkgb2YgTiBvYmplY3RzLCBlYWNoIG9mIHNpemUgUywgY2Fubm90IGV4aXN0IGR1ZQorICAgdG8gc2l6ZSBhcml0aG1ldGljIG92ZXJmbG93LiAgUyBtdXN0IGJlIHBvc2l0aXZlIGFuZCBOIG11c3QgYmUKKyAgIG5vbm5lZ2F0aXZlLiAgVGhpcyBpcyBhIG1hY3JvLCBub3QgYSBmdW5jdGlvbiwgc28gdGhhdCBpdAorICAgd29ya3MgY29ycmVjdGx5IGV2ZW4gd2hlbiBTSVpFX01BWCA8IE4uCisKKyAgIEJ5IGdudWxpYiBjb252ZW50aW9uLCBTSVpFX01BWCByZXByZXNlbnRzIG92ZXJmbG93IGluIHNpemUKKyAgIGNhbGN1bGF0aW9ucywgc28gdGhlIGNvbnNlcnZhdGl2ZSBkaXZpZGVuZCB0byB1c2UgaGVyZSBpcworICAgU0laRV9NQVggLSAxLCBzaW5jZSBTSVpFX01BWCBtaWdodCByZXByZXNlbnQgYW4gb3ZlcmZsb3dlZCB2YWx1ZS4KKyAgIEhvd2V2ZXIsIG1hbGxvYyAoU0laRV9NQVgpIGZhaWxzIG9uIGFsbCBrbm93biBob3N0cyB3aGVyZQorICAgc2l6ZW9mIChwdHJkaWZmX3QpIDw9IHNpemVvZiAoc2l6ZV90KSwgc28gZG8gbm90IGJvdGhlciB0byB0ZXN0IGZvcgorICAgZXhhY3RseS1TSVpFX01BWCBhbGxvY2F0aW9ucyBvbiBzdWNoIGhvc3RzOyB0aGlzIGF2b2lkcyBhIHRlc3QgYW5kCisgICBicmFuY2ggd2hlbiBTIGlzIGtub3duIHRvIGJlIDEuICAqLworIyBkZWZpbmUgeGFsbG9jX292ZXJzaXplZChuLCBzKSBcCisgICAgKChzaXplX3QpIChzaXplb2YgKHB0cmRpZmZfdCkgPD0gc2l6ZW9mIChzaXplX3QpID8gLTEgOiAtMikgLyAocykgPCAobikpCisKKyNlbmRpZiAvKiAhWEFMTE9DX09WRVJTSVpFRF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliL3hhbGxvYy5oIGIvbGliL3hhbGxvYy5oCmluZGV4IGY4MDk3N2UuLmFjZjMwYTEgMTAwNjQ0Ci0tLSBhL2xpYi94YWxsb2MuaAorKysgYi9saWIveGFsbG9jLmgKQEAgLTEsMTIgKzEsMTEgQEAKIC8qIHhhbGxvYy5oIC0tIG1hbGxvYyB3aXRoIG91dC1vZi1tZW1vcnkgY2hlY2tpbmcKIAotICAgQ29weXJpZ2h0IChDKSAxOTkwLCAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LAotICAgMTk5OSwgMjAwMCwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMTk5MC0yMDAwLCAyMDAzLTIwMDQsIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpAQCAtMTQsNjYgKzEzLDI0OCBAQAogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpZm5kZWYgWEFMTE9DX0hfCi0jIGRlZmluZSBYQUxMT0NfSF8KKyNkZWZpbmUgWEFMTE9DX0hfCiAKLSMgaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CiAKKyNpbmNsdWRlICJ4YWxsb2Mtb3ZlcnNpemVkLmgiCiAKLSMgaWZkZWYgX19jcGx1c3BsdXMKK19HTF9JTkxJTkVfSEVBREVSX0JFR0lOCisjaWZuZGVmIFhBTExPQ19JTkxJTkUKKyMgZGVmaW5lIFhBTExPQ19JTkxJTkUgX0dMX0lOTElORQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7Ci0jIGVuZGlmCisjZW5kaWYKIAogCi0jIGlmbmRlZiBfX2F0dHJpYnV0ZV9fCi0jICBpZiBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA4KSB8fCBfX1NUUklDVF9BTlNJX18KLSMgICBkZWZpbmUgX19hdHRyaWJ1dGVfXyh4KQotIyAgZW5kaWYKLSMgZW5kaWYKKyNpZiBfX0dOVUNfXyA+PSAzCisjIGRlZmluZSBfR0xfQVRUUklCVVRFX01BTExPQyBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpCisjZWxzZQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9NQUxMT0MKKyNlbmRpZgogCi0jIGlmbmRlZiBBVFRSSUJVVEVfTk9SRVRVUk4KLSMgIGRlZmluZSBBVFRSSUJVVEVfTk9SRVRVUk4gX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpCi0jIGVuZGlmCisjaWYgX19HTlVDX18gPiA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDMpCisjIGRlZmluZSBfR0xfQVRUUklCVVRFX0FMTE9DX1NJWkUoYXJncykgX19hdHRyaWJ1dGVfXyAoKF9fYWxsb2Nfc2l6ZV9fIGFyZ3MpKQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfQUxMT0NfU0laRShhcmdzKQorI2VuZGlmCiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVuIG1lbW9yeSBpcyBleGhhdXN0ZWQuCiAgICBJdCBtdXN0IGJlIGRlZmluZWQgYnkgdGhlIGFwcGxpY2F0aW9uLCBlaXRoZXIgZXhwbGljaXRseQogICAgb3IgYnkgdXNpbmcgZ251bGliJ3MgeGFsbG9jLWRpZSBtb2R1bGUuICBUaGlzIGlzIHRoZQogICAgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIG9uZSB3YW50cyB0aGUgcHJvZ3JhbSB0byBkaWUgYmVjYXVzZSBvZiBhCiAgICBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLiAgKi8KLWV4dGVybiB2b2lkIHhhbGxvY19kaWUgKHZvaWQpIEFUVFJJQlVURV9OT1JFVFVSTjsKK2V4dGVybiBfTm9yZXR1cm4gdm9pZCB4YWxsb2NfZGllICh2b2lkKTsKIAotdm9pZCAqeG1hbGxvYyAoc2l6ZV90IHMpOwotdm9pZCAqeG5tYWxsb2MgKHNpemVfdCBuLCBzaXplX3Qgcyk7Ci12b2lkICp4emFsbG9jIChzaXplX3Qgcyk7Ci12b2lkICp4Y2FsbG9jIChzaXplX3Qgbiwgc2l6ZV90IHMpOwotdm9pZCAqeHJlYWxsb2MgKHZvaWQgKnAsIHNpemVfdCBzKTsKLXZvaWQgKnhucmVhbGxvYyAodm9pZCAqcCwgc2l6ZV90IG4sIHNpemVfdCBzKTsKK3ZvaWQgKnhtYWxsb2MgKHNpemVfdCBzKQorICAgICAgX0dMX0FUVFJJQlVURV9NQUxMT0MgX0dMX0FUVFJJQlVURV9BTExPQ19TSVpFICgoMSkpOwordm9pZCAqeHphbGxvYyAoc2l6ZV90IHMpCisgICAgICBfR0xfQVRUUklCVVRFX01BTExPQyBfR0xfQVRUUklCVVRFX0FMTE9DX1NJWkUgKCgxKSk7Cit2b2lkICp4Y2FsbG9jIChzaXplX3Qgbiwgc2l6ZV90IHMpCisgICAgICBfR0xfQVRUUklCVVRFX01BTExPQyBfR0xfQVRUUklCVVRFX0FMTE9DX1NJWkUgKCgxLCAyKSk7Cit2b2lkICp4cmVhbGxvYyAodm9pZCAqcCwgc2l6ZV90IHMpCisgICAgICBfR0xfQVRUUklCVVRFX0FMTE9DX1NJWkUgKCgyKSk7CiB2b2lkICp4MnJlYWxsb2MgKHZvaWQgKnAsIHNpemVfdCAqcG4pOwotdm9pZCAqeDJucmVhbGxvYyAodm9pZCAqcCwgc2l6ZV90ICpwbiwgc2l6ZV90IHMpOwotdm9pZCAqeG1lbWR1cCAodm9pZCBjb25zdCAqcCwgc2l6ZV90IHMpOwotY2hhciAqeHN0cmR1cCAoY2hhciBjb25zdCAqc3RyKTsKK3ZvaWQgKnhtZW1kdXAgKHZvaWQgY29uc3QgKnAsIHNpemVfdCBzKQorICAgICAgX0dMX0FUVFJJQlVURV9NQUxMT0MgX0dMX0FUVFJJQlVURV9BTExPQ19TSVpFICgoMikpOworY2hhciAqeHN0cmR1cCAoY2hhciBjb25zdCAqc3RyKQorICAgICAgX0dMX0FUVFJJQlVURV9NQUxMT0M7CiAKLS8qIFJldHVybiAxIGlmIGFuIGFycmF5IG9mIE4gb2JqZWN0cywgZWFjaCBvZiBzaXplIFMsIGNhbm5vdCBleGlzdCBkdWUKLSAgIHRvIHNpemUgYXJpdGhtZXRpYyBvdmVyZmxvdy4gIFMgbXVzdCBiZSBwb3NpdGl2ZSBhbmQgTiBtdXN0IGJlCi0gICBub25uZWdhdGl2ZS4gIFRoaXMgaXMgYSBtYWNybywgbm90IGFuIGlubGluZSBmdW5jdGlvbiwgc28gdGhhdCBpdAotICAgd29ya3MgY29ycmVjdGx5IGV2ZW4gd2hlbiBTSVpFX01BWCA8IE4uCisvKiBJbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgVCBtdXN0IGJlIGFuIGVsZW1lbnRhcnkgb3Igc3RydWN0dXJlL3VuaW9uIG9yCisgICB0eXBlZGVmJ2VkIHR5cGUsIG9yIGEgcG9pbnRlciB0byBzdWNoIGEgdHlwZS4gIFRvIGFwcGx5IG9uZSBvZiB0aGUKKyAgIGZvbGxvd2luZyBtYWNyb3MgdG8gYSBmdW5jdGlvbiBwb2ludGVyIG9yIGFycmF5IHR5cGUsIHlvdSBuZWVkIHRvIHR5cGVkZWYKKyAgIGl0IGZpcnN0IGFuZCB1c2UgdGhlIHR5cGVkZWYgbmFtZS4gICovCiAKLSAgIEJ5IGdudWxpYiBjb252ZW50aW9uLCBTSVpFX01BWCByZXByZXNlbnRzIG92ZXJmbG93IGluIHNpemUKLSAgIGNhbGN1bGF0aW9ucywgc28gdGhlIGNvbnNlcnZhdGl2ZSBkaXZpZGVuZCB0byB1c2UgaGVyZSBpcwotICAgU0laRV9NQVggLSAxLCBzaW5jZSBTSVpFX01BWCBtaWdodCByZXByZXNlbnQgYW4gb3ZlcmZsb3dlZCB2YWx1ZS4KLSAgIEhvd2V2ZXIsIG1hbGxvYyAoU0laRV9NQVgpIGZhaWxzIG9uIGFsbCBrbm93biBob3N0cyB3aGVyZQotICAgc2l6ZW9mIChwdHJkaWZmX3QpIDw9IHNpemVvZiAoc2l6ZV90KSwgc28gZG8gbm90IGJvdGhlciB0byB0ZXN0IGZvcgotICAgZXhhY3RseS1TSVpFX01BWCBhbGxvY2F0aW9ucyBvbiBzdWNoIGhvc3RzOyB0aGlzIGF2b2lkcyBhIHRlc3QgYW5kCi0gICBicmFuY2ggd2hlbiBTIGlzIGtub3duIHRvIGJlIDEuICAqLwotIyBkZWZpbmUgeGFsbG9jX292ZXJzaXplZChuLCBzKSBcCi0gICAgKChzaXplX3QpIChzaXplb2YgKHB0cmRpZmZfdCkgPD0gc2l6ZW9mIChzaXplX3QpID8gLTEgOiAtMikgLyAocykgPCAobikpCisvKiBBbGxvY2F0ZSBhbiBvYmplY3Qgb2YgdHlwZSBUIGR5bmFtaWNhbGx5LCB3aXRoIGVycm9yIGNoZWNraW5nLiAgKi8KKy8qIGV4dGVybiB0ICpYTUFMTE9DICh0eXBlbmFtZSB0KTsgKi8KKyNkZWZpbmUgWE1BTExPQyh0KSAoKHQgKikgeG1hbGxvYyAoc2l6ZW9mICh0KSkpCiAKLSMgaWZkZWYgX19jcGx1c3BsdXMKKy8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgTiBlbGVtZW50cyBvZiB0eXBlIFQsIHdpdGggZXJyb3IgY2hlY2tpbmcuICAqLworLyogZXh0ZXJuIHQgKlhOTUFMTE9DIChzaXplX3QgbiwgdHlwZW5hbWUgdCk7ICovCisjZGVmaW5lIFhOTUFMTE9DKG4sIHQpIFwKKyAgICgodCAqKSAoc2l6ZW9mICh0KSA9PSAxID8geG1hbGxvYyAobikgOiB4bm1hbGxvYyAobiwgc2l6ZW9mICh0KSkpKQorCisvKiBBbGxvY2F0ZSBhbiBvYmplY3Qgb2YgdHlwZSBUIGR5bmFtaWNhbGx5LCB3aXRoIGVycm9yIGNoZWNraW5nLAorICAgYW5kIHplcm8gaXQuICAqLworLyogZXh0ZXJuIHQgKlhaQUxMT0MgKHR5cGVuYW1lIHQpOyAqLworI2RlZmluZSBYWkFMTE9DKHQpICgodCAqKSB4emFsbG9jIChzaXplb2YgKHQpKSkKKworLyogQWxsb2NhdGUgbWVtb3J5IGZvciBOIGVsZW1lbnRzIG9mIHR5cGUgVCwgd2l0aCBlcnJvciBjaGVja2luZywKKyAgIGFuZCB6ZXJvIGl0LiAgKi8KKy8qIGV4dGVybiB0ICpYQ0FMTE9DIChzaXplX3QgbiwgdHlwZW5hbWUgdCk7ICovCisjZGVmaW5lIFhDQUxMT0MobiwgdCkgXAorICAgKCh0ICopIChzaXplb2YgKHQpID09IDEgPyB4emFsbG9jIChuKSA6IHhjYWxsb2MgKG4sIHNpemVvZiAodCkpKSkKKworCisvKiBBbGxvY2F0ZSBhbiBhcnJheSBvZiBOIG9iamVjdHMsIGVhY2ggd2l0aCBTIGJ5dGVzIG9mIG1lbW9yeSwKKyAgIGR5bmFtaWNhbGx5LCB3aXRoIGVycm9yIGNoZWNraW5nLiAgUyBtdXN0IGJlIG5vbnplcm8uICAqLworCitYQUxMT0NfSU5MSU5FIHZvaWQgKnhubWFsbG9jIChzaXplX3Qgbiwgc2l6ZV90IHMpCisgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfTUFMTE9DIF9HTF9BVFRSSUJVVEVfQUxMT0NfU0laRSAoKDEsIDIpKTsKK1hBTExPQ19JTkxJTkUgdm9pZCAqCit4bm1hbGxvYyAoc2l6ZV90IG4sIHNpemVfdCBzKQoreworICBpZiAoeGFsbG9jX292ZXJzaXplZCAobiwgcykpCisgICAgeGFsbG9jX2RpZSAoKTsKKyAgcmV0dXJuIHhtYWxsb2MgKG4gKiBzKTsKIH0KLSMgZW5kaWYKKworLyogQ2hhbmdlIHRoZSBzaXplIG9mIGFuIGFsbG9jYXRlZCBibG9jayBvZiBtZW1vcnkgUCB0byBhbiBhcnJheSBvZiBOCisgICBvYmplY3RzIGVhY2ggb2YgUyBieXRlcywgd2l0aCBlcnJvciBjaGVja2luZy4gIFMgbXVzdCBiZSBub256ZXJvLiAgKi8KKworWEFMTE9DX0lOTElORSB2b2lkICp4bnJlYWxsb2MgKHZvaWQgKnAsIHNpemVfdCBuLCBzaXplX3QgcykKKyAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9BTExPQ19TSVpFICgoMiwgMykpOworWEFMTE9DX0lOTElORSB2b2lkICoKK3hucmVhbGxvYyAodm9pZCAqcCwgc2l6ZV90IG4sIHNpemVfdCBzKQoreworICBpZiAoeGFsbG9jX292ZXJzaXplZCAobiwgcykpCisgICAgeGFsbG9jX2RpZSAoKTsKKyAgcmV0dXJuIHhyZWFsbG9jIChwLCBuICogcyk7Cit9CisKKy8qIElmIFAgaXMgbnVsbCwgYWxsb2NhdGUgYSBibG9jayBvZiBhdCBsZWFzdCAqUE4gc3VjaCBvYmplY3RzOworICAgb3RoZXJ3aXNlLCByZWFsbG9jYXRlIFAgc28gdGhhdCBpdCBjb250YWlucyBtb3JlIHRoYW4gKlBOIG9iamVjdHMKKyAgIGVhY2ggb2YgUyBieXRlcy4gICpQTiBtdXN0IGJlIG5vbnplcm8gdW5sZXNzIFAgaXMgbnVsbCwgYW5kIFMgbXVzdAorICAgYmUgbm9uemVyby4gIFNldCAqUE4gdG8gdGhlIG5ldyBudW1iZXIgb2Ygb2JqZWN0cywgYW5kIHJldHVybiB0aGUKKyAgIHBvaW50ZXIgdG8gdGhlIG5ldyBibG9jay4gICpQTiBpcyBuZXZlciBzZXQgdG8gemVybywgYW5kIHRoZQorICAgcmV0dXJuZWQgcG9pbnRlciBpcyBuZXZlciBudWxsLgorCisgICBSZXBlYXRlZCByZWFsbG9jYXRpb25zIGFyZSBndWFyYW50ZWVkIHRvIG1ha2UgcHJvZ3Jlc3MsIGVpdGhlciBieQorICAgYWxsb2NhdGluZyBhbiBpbml0aWFsIGJsb2NrIHdpdGggYSBub256ZXJvIHNpemUsIG9yIGJ5IGFsbG9jYXRpbmcgYQorICAgbGFyZ2VyIGJsb2NrLgorCisgICBJbiB0aGUgZm9sbG93aW5nIGltcGxlbWVudGF0aW9uLCBub256ZXJvIHNpemVzIGFyZSBpbmNyZWFzZWQgYnkgYQorICAgZmFjdG9yIG9mIGFwcHJveGltYXRlbHkgMS41IHNvIHRoYXQgcmVwZWF0ZWQgcmVhbGxvY2F0aW9ucyBoYXZlCisgICBPKE4pIG92ZXJhbGwgY29zdCByYXRoZXIgdGhhbiBPKE4qKjIpIGNvc3QsIGJ1dCB0aGUKKyAgIHNwZWNpZmljYXRpb24gZm9yIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQgcmF0ZS4KKworICAgSGVyZSBpcyBhbiBleGFtcGxlIG9mIHVzZToKKworICAgICBpbnQgKnAgPSBOVUxMOworICAgICBzaXplX3QgdXNlZCA9IDA7CisgICAgIHNpemVfdCBhbGxvY2F0ZWQgPSAwOworCisgICAgIHZvaWQKKyAgICAgYXBwZW5kX2ludCAoaW50IHZhbHVlKQorICAgICAgIHsKKyAgICAgICAgIGlmICh1c2VkID09IGFsbG9jYXRlZCkKKyAgICAgICAgICAgcCA9IHgybnJlYWxsb2MgKHAsICZhbGxvY2F0ZWQsIHNpemVvZiAqcCk7CisgICAgICAgICBwW3VzZWQrK10gPSB2YWx1ZTsKKyAgICAgICB9CisKKyAgIFRoaXMgY2F1c2VzIHgybnJlYWxsb2MgdG8gYWxsb2NhdGUgYSBibG9jayBvZiBzb21lIG5vbnplcm8gc2l6ZSB0aGUKKyAgIGZpcnN0IHRpbWUgaXQgaXMgY2FsbGVkLgorCisgICBUbyBoYXZlIGZpbmVyLWdyYWluZWQgY29udHJvbCBvdmVyIHRoZSBpbml0aWFsIHNpemUsIHNldCAqUE4gdG8gYQorICAgbm9uemVybyB2YWx1ZSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggUCA9PSBOVUxMLiAgRm9yCisgICBleGFtcGxlOgorCisgICAgIGludCAqcCA9IE5VTEw7CisgICAgIHNpemVfdCB1c2VkID0gMDsKKyAgICAgc2l6ZV90IGFsbG9jYXRlZCA9IDA7CisgICAgIHNpemVfdCBhbGxvY2F0ZWQxID0gMTAwMDsKKworICAgICB2b2lkCisgICAgIGFwcGVuZF9pbnQgKGludCB2YWx1ZSkKKyAgICAgICB7CisgICAgICAgICBpZiAodXNlZCA9PSBhbGxvY2F0ZWQpCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICBwID0geDJucmVhbGxvYyAocCwgJmFsbG9jYXRlZDEsIHNpemVvZiAqcCk7CisgICAgICAgICAgICAgYWxsb2NhdGVkID0gYWxsb2NhdGVkMTsKKyAgICAgICAgICAgfQorICAgICAgICAgcFt1c2VkKytdID0gdmFsdWU7CisgICAgICAgfQorCisgICAqLworCitYQUxMT0NfSU5MSU5FIHZvaWQgKgoreDJucmVhbGxvYyAodm9pZCAqcCwgc2l6ZV90ICpwbiwgc2l6ZV90IHMpCit7CisgIHNpemVfdCBuID0gKnBuOworCisgIGlmICghIHApCisgICAgeworICAgICAgaWYgKCEgbikKKyAgICAgICAgeworICAgICAgICAgIC8qIFRoZSBhcHByb3hpbWF0ZSBzaXplIHRvIHVzZSBmb3IgaW5pdGlhbCBzbWFsbCBhbGxvY2F0aW9uCisgICAgICAgICAgICAgcmVxdWVzdHMsIHdoZW4gdGhlIGludm9raW5nIGNvZGUgc3BlY2lmaWVzIGFuIG9sZCBzaXplIG9mCisgICAgICAgICAgICAgemVyby4gIFRoaXMgaXMgdGhlIGxhcmdlc3QgInNtYWxsIiByZXF1ZXN0IGZvciB0aGUgR05VIEMKKyAgICAgICAgICAgICBsaWJyYXJ5IG1hbGxvYy4gICovCisgICAgICAgICAgZW51bSB7IERFRkFVTFRfTVhGQVNUID0gNjQgKiBzaXplb2YgKHNpemVfdCkgLyA0IH07CisKKyAgICAgICAgICBuID0gREVGQVVMVF9NWEZBU1QgLyBzOworICAgICAgICAgIG4gKz0gIW47CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBTZXQgTiA9IGNlaWwgKDEuNSAqIE4pIHNvIHRoYXQgcHJvZ3Jlc3MgaXMgbWFkZSBpZiBOID09IDEuCisgICAgICAgICBDaGVjayBmb3Igb3ZlcmZsb3csIHNvIHRoYXQgTiAqIFMgc3RheXMgaW4gc2l6ZV90IHJhbmdlLgorICAgICAgICAgVGhlIGNoZWNrIGlzIHNsaWdodGx5IGNvbnNlcnZhdGl2ZSwgYnV0IGFuIGV4YWN0IGNoZWNrIGlzbid0CisgICAgICAgICB3b3J0aCB0aGUgdHJvdWJsZS4gICovCisgICAgICBpZiAoKHNpemVfdCkgLTEgLyAzICogMiAvIHMgPD0gbikKKyAgICAgICAgeGFsbG9jX2RpZSAoKTsKKyAgICAgIG4gKz0gKG4gKyAxKSAvIDI7CisgICAgfQorCisgICpwbiA9IG47CisgIHJldHVybiB4cmVhbGxvYyAocCwgbiAqIHMpOworfQorCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIGEgbmV3IGJ1ZmZlciBvZiBOIGJ5dGVzLiAgVGhpcyBpcyBsaWtlIHhtYWxsb2MsCisgICBleGNlcHQgaXQgcmV0dXJucyBjaGFyICouICAqLworCitYQUxMT0NfSU5MSU5FIGNoYXIgKnhjaGFyYWxsb2MgKHNpemVfdCBuKQorICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX01BTExPQyBfR0xfQVRUUklCVVRFX0FMTE9DX1NJWkUgKCgxKSk7CitYQUxMT0NfSU5MSU5FIGNoYXIgKgoreGNoYXJhbGxvYyAoc2l6ZV90IG4pCit7CisgIHJldHVybiBYTk1BTExPQyAobiwgY2hhcik7Cit9CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorCisvKiBDKysgZG9lcyBub3QgYWxsb3cgY29udmVyc2lvbnMgZnJvbSB2b2lkICogdG8gb3RoZXIgcG9pbnRlciB0eXBlcworICAgd2l0aG91dCBhIGNhc3QuICBVc2UgdGVtcGxhdGVzIHRvIHdvcmsgYXJvdW5kIHRoZSBwcm9ibGVtIHdoZW4KKyAgIHBvc3NpYmxlLiAgKi8KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUICoKK3hyZWFsbG9jIChUICpwLCBzaXplX3QgcykKK3sKKyAgcmV0dXJuIChUICopIHhyZWFsbG9jICgodm9pZCAqKSBwLCBzKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUICoKK3hucmVhbGxvYyAoVCAqcCwgc2l6ZV90IG4sIHNpemVfdCBzKQoreworICByZXR1cm4gKFQgKikgeG5yZWFsbG9jICgodm9pZCAqKSBwLCBuLCBzKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUICoKK3gycmVhbGxvYyAoVCAqcCwgc2l6ZV90ICpwbikKK3sKKyAgcmV0dXJuIChUICopIHgycmVhbGxvYyAoKHZvaWQgKikgcCwgcG4pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQgKgoreDJucmVhbGxvYyAoVCAqcCwgc2l6ZV90ICpwbiwgc2l6ZV90IHMpCit7CisgIHJldHVybiAoVCAqKSB4Mm5yZWFsbG9jICgodm9pZCAqKSBwLCBwbiwgcyk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCAqCit4bWVtZHVwIChUIGNvbnN0ICpwLCBzaXplX3QgcykKK3sKKyAgcmV0dXJuIChUICopIHhtZW1kdXAgKCh2b2lkIGNvbnN0ICopIHAsIHMpOworfQorCisjZW5kaWYKIAogCiAjZW5kaWYgLyogIVhBTExPQ19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliL3htYWxsb2MuYyBiL2xpYi94bWFsbG9jLmMKaW5kZXggNjg3NjMzYy4uOTc1NTk4NSAxMDA2NDQKLS0tIGEvbGliL3htYWxsb2MuYworKysgYi9saWIveG1hbGxvYy5jCkBAIC0xLDEyICsxLDExIEBACiAvKiB4bWFsbG9jLmMgLS0gbWFsbG9jIHdpdGggb3V0IG9mIG1lbW9yeSBjaGVja2luZwogCi0gICBDb3B5cmlnaHQgKEMpIDE5OTAsIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsCi0gICAxOTk5LCAyMDAwLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29weXJpZ2h0IChDKSAxOTkwLTIwMDAsIDIwMDItMjAwNiwgMjAwOC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCkBAIC0xNCwxNzMgKzEzLDU1IEBACiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2RlZmluZSBYQUxMT0NfSU5MSU5FIF9HTF9FWFRFUk5fSU5MSU5FCiAKICNpbmNsdWRlICJ4YWxsb2MuaCIKIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogCi0jaWZuZGVmIFNJWkVfTUFYCi0jIGRlZmluZSBTSVpFX01BWCAoKHNpemVfdCkgLTEpCi0jZW5kaWYKLQogLyogMSBpZiBjYWxsb2MgaXMga25vd24gdG8gYmUgY29tcGF0aWJsZSB3aXRoIEdOVSBjYWxsb2MuICBUaGlzCiAgICBtYXR0ZXJzIGlmIHdlIGFyZSBub3QgYWxzbyB1c2luZyB0aGUgY2FsbG9jIG1vZHVsZSwgd2hpY2ggZGVmaW5lcwotICAgSEFWRV9DQUxMT0MgYW5kIHN1cHBvcnRzIHRoZSBHTlUgQVBJIGV2ZW4gb24gbm9uLUdOVSBwbGF0Zm9ybXMuICAqLwotI2lmIGRlZmluZWQgSEFWRV9DQUxMT0MgfHwgZGVmaW5lZCBfX0dMSUJDX18KKyAgIEhBVkVfQ0FMTE9DX0dOVSBhbmQgc3VwcG9ydHMgdGhlIEdOVSBBUEkgZXZlbiBvbiBub24tR05VIHBsYXRmb3Jtcy4gICovCisjaWYgZGVmaW5lZCBIQVZFX0NBTExPQ19HTlUgfHwgKGRlZmluZWQgX19HTElCQ19fICYmICFkZWZpbmVkIF9fVUNMSUJDX18pCiBlbnVtIHsgSEFWRV9HTlVfQ0FMTE9DID0gMSB9OwogI2Vsc2UKIGVudW0geyBIQVZFX0dOVV9DQUxMT0MgPSAwIH07CiAjZW5kaWYKIAotLyogQWxsb2NhdGUgYW4gYXJyYXkgb2YgTiBvYmplY3RzLCBlYWNoIHdpdGggUyBieXRlcyBvZiBtZW1vcnksCi0gICBkeW5hbWljYWxseSwgd2l0aCBlcnJvciBjaGVja2luZy4gIFMgbXVzdCBiZSBub256ZXJvLiAgKi8KLQotc3RhdGljIGlubGluZSB2b2lkICoKLXhubWFsbG9jX2lubGluZSAoc2l6ZV90IG4sIHNpemVfdCBzKQotewotICB2b2lkICpwOwotICBpZiAoeGFsbG9jX292ZXJzaXplZCAobiwgcykgfHwgKCEgKHAgPSBtYWxsb2MgKG4gKiBzKSkgJiYgbiAhPSAwKSkKLSAgICB4YWxsb2NfZGllICgpOwotICByZXR1cm4gcDsKLX0KLQotdm9pZCAqCi14bm1hbGxvYyAoc2l6ZV90IG4sIHNpemVfdCBzKQotewotICByZXR1cm4geG5tYWxsb2NfaW5saW5lIChuLCBzKTsKLX0KLQogLyogQWxsb2NhdGUgTiBieXRlcyBvZiBtZW1vcnkgZHluYW1pY2FsbHksIHdpdGggZXJyb3IgY2hlY2tpbmcuICAqLwogCiB2b2lkICoKIHhtYWxsb2MgKHNpemVfdCBuKQogewotICByZXR1cm4geG5tYWxsb2NfaW5saW5lIChuLCAxKTsKLX0KLQotLyogQ2hhbmdlIHRoZSBzaXplIG9mIGFuIGFsbG9jYXRlZCBibG9jayBvZiBtZW1vcnkgUCB0byBhbiBhcnJheSBvZiBOCi0gICBvYmplY3RzIGVhY2ggb2YgUyBieXRlcywgd2l0aCBlcnJvciBjaGVja2luZy4gIFMgbXVzdCBiZSBub256ZXJvLiAgKi8KLQotc3RhdGljIGlubGluZSB2b2lkICoKLXhucmVhbGxvY19pbmxpbmUgKHZvaWQgKnAsIHNpemVfdCBuLCBzaXplX3QgcykKLXsKLSAgaWYgKHhhbGxvY19vdmVyc2l6ZWQgKG4sIHMpIHx8ICghIChwID0gcmVhbGxvYyAocCwgbiAqIHMpKSAmJiBuICE9IDApKQorICB2b2lkICpwID0gbWFsbG9jIChuKTsKKyAgaWYgKCFwICYmIG4gIT0gMCkKICAgICB4YWxsb2NfZGllICgpOwogICByZXR1cm4gcDsKIH0KIAotdm9pZCAqCi14bnJlYWxsb2MgKHZvaWQgKnAsIHNpemVfdCBuLCBzaXplX3QgcykKLXsKLSAgcmV0dXJuIHhucmVhbGxvY19pbmxpbmUgKHAsIG4sIHMpOwotfQotCiAvKiBDaGFuZ2UgdGhlIHNpemUgb2YgYW4gYWxsb2NhdGVkIGJsb2NrIG9mIG1lbW9yeSBQIHRvIE4gYnl0ZXMsCiAgICB3aXRoIGVycm9yIGNoZWNraW5nLiAgKi8KIAogdm9pZCAqCiB4cmVhbGxvYyAodm9pZCAqcCwgc2l6ZV90IG4pCiB7Ci0gIHJldHVybiB4bnJlYWxsb2NfaW5saW5lIChwLCBuLCAxKTsKLX0KLQotCi0vKiBJZiBQIGlzIG51bGwsIGFsbG9jYXRlIGEgYmxvY2sgb2YgYXQgbGVhc3QgKlBOIHN1Y2ggb2JqZWN0czsKLSAgIG90aGVyd2lzZSwgcmVhbGxvY2F0ZSBQIHNvIHRoYXQgaXQgY29udGFpbnMgbW9yZSB0aGFuICpQTiBvYmplY3RzCi0gICBlYWNoIG9mIFMgYnl0ZXMuICAqUE4gbXVzdCBiZSBub256ZXJvIHVubGVzcyBQIGlzIG51bGwsIGFuZCBTIG11c3QKLSAgIGJlIG5vbnplcm8uICBTZXQgKlBOIHRvIHRoZSBuZXcgbnVtYmVyIG9mIG9iamVjdHMsIGFuZCByZXR1cm4gdGhlCi0gICBwb2ludGVyIHRvIHRoZSBuZXcgYmxvY2suICAqUE4gaXMgbmV2ZXIgc2V0IHRvIHplcm8sIGFuZCB0aGUKLSAgIHJldHVybmVkIHBvaW50ZXIgaXMgbmV2ZXIgbnVsbC4KLQotICAgUmVwZWF0ZWQgcmVhbGxvY2F0aW9ucyBhcmUgZ3VhcmFudGVlZCB0byBtYWtlIHByb2dyZXNzLCBlaXRoZXIgYnkKLSAgIGFsbG9jYXRpbmcgYW4gaW5pdGlhbCBibG9jayB3aXRoIGEgbm9uemVybyBzaXplLCBvciBieSBhbGxvY2F0aW5nIGEKLSAgIGxhcmdlciBibG9jay4KLQotICAgSW4gdGhlIGZvbGxvd2luZyBpbXBsZW1lbnRhdGlvbiwgbm9uemVybyBzaXplcyBhcmUgZG91YmxlZCBzbyB0aGF0Ci0gICByZXBlYXRlZCByZWFsbG9jYXRpb25zIGhhdmUgTyhOIGxvZyBOKSBvdmVyYWxsIGNvc3QgcmF0aGVyIHRoYW4KLSAgIE8oTioqMikgY29zdCwgYnV0IHRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90Ci0gICBndWFyYW50ZWUgdGhhdCBzaXplcyBhcmUgZG91YmxlZC4KLQotICAgSGVyZSBpcyBhbiBleGFtcGxlIG9mIHVzZToKLQotICAgICBpbnQgKnAgPSBOVUxMOwotICAgICBzaXplX3QgdXNlZCA9IDA7Ci0gICAgIHNpemVfdCBhbGxvY2F0ZWQgPSAwOwotCi0gICAgIHZvaWQKLSAgICAgYXBwZW5kX2ludCAoaW50IHZhbHVlKQotICAgICAgIHsKLQkgaWYgKHVzZWQgPT0gYWxsb2NhdGVkKQotCSAgIHAgPSB4Mm5yZWFsbG9jIChwLCAmYWxsb2NhdGVkLCBzaXplb2YgKnApOwotCSBwW3VzZWQrK10gPSB2YWx1ZTsKLSAgICAgICB9Ci0KLSAgIFRoaXMgY2F1c2VzIHgybnJlYWxsb2MgdG8gYWxsb2NhdGUgYSBibG9jayBvZiBzb21lIG5vbnplcm8gc2l6ZSB0aGUKLSAgIGZpcnN0IHRpbWUgaXQgaXMgY2FsbGVkLgotCi0gICBUbyBoYXZlIGZpbmVyLWdyYWluZWQgY29udHJvbCBvdmVyIHRoZSBpbml0aWFsIHNpemUsIHNldCAqUE4gdG8gYQotICAgbm9uemVybyB2YWx1ZSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggUCA9PSBOVUxMLiAgRm9yCi0gICBleGFtcGxlOgotCi0gICAgIGludCAqcCA9IE5VTEw7Ci0gICAgIHNpemVfdCB1c2VkID0gMDsKLSAgICAgc2l6ZV90IGFsbG9jYXRlZCA9IDA7Ci0gICAgIHNpemVfdCBhbGxvY2F0ZWQxID0gMTAwMDsKLQotICAgICB2b2lkCi0gICAgIGFwcGVuZF9pbnQgKGludCB2YWx1ZSkKLSAgICAgICB7Ci0JIGlmICh1c2VkID09IGFsbG9jYXRlZCkKLQkgICB7Ci0JICAgICBwID0geDJucmVhbGxvYyAocCwgJmFsbG9jYXRlZDEsIHNpemVvZiAqcCk7Ci0JICAgICBhbGxvY2F0ZWQgPSBhbGxvY2F0ZWQxOwotCSAgIH0KLQkgcFt1c2VkKytdID0gdmFsdWU7Ci0gICAgICAgfQotCi0gICAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgKgoteDJucmVhbGxvY19pbmxpbmUgKHZvaWQgKnAsIHNpemVfdCAqcG4sIHNpemVfdCBzKQotewotICBzaXplX3QgbiA9ICpwbjsKLQotICBpZiAoISBwKQorICBpZiAoIW4gJiYgcCkKICAgICB7Ci0gICAgICBpZiAoISBuKQotCXsKLQkgIC8qIFRoZSBhcHByb3hpbWF0ZSBzaXplIHRvIHVzZSBmb3IgaW5pdGlhbCBzbWFsbCBhbGxvY2F0aW9uCi0JICAgICByZXF1ZXN0cywgd2hlbiB0aGUgaW52b2tpbmcgY29kZSBzcGVjaWZpZXMgYW4gb2xkIHNpemUgb2YKLQkgICAgIHplcm8uICA2NCBieXRlcyBpcyB0aGUgbGFyZ2VzdCAic21hbGwiIHJlcXVlc3QgZm9yIHRoZQotCSAgICAgR05VIEMgbGlicmFyeSBtYWxsb2MuICAqLwotCSAgZW51bSB7IERFRkFVTFRfTVhGQVNUID0gNjQgfTsKLQotCSAgbiA9IERFRkFVTFRfTVhGQVNUIC8gczsKLQkgIG4gKz0gIW47Ci0JfQotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIGlmIChTSVpFX01BWCAvIDIgLyBzIDwgbikKLQl4YWxsb2NfZGllICgpOwotICAgICAgbiAqPSAyOworICAgICAgLyogVGhlIEdOVSBhbmQgQzk5IHJlYWxsb2MgYmVoYXZpb3JzIGRpc2FncmVlIGhlcmUuICBBY3QgbGlrZQorICAgICAgICAgR05VLCBldmVuIGlmIHRoZSB1bmRlcmx5aW5nIHJlYWxsb2MgaXMgQzk5LiAgKi8KKyAgICAgIGZyZWUgKHApOworICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICpwbiA9IG47Ci0gIHJldHVybiB4cmVhbGxvYyAocCwgbiAqIHMpOwotfQotCi12b2lkICoKLXgybnJlYWxsb2MgKHZvaWQgKnAsIHNpemVfdCAqcG4sIHNpemVfdCBzKQotewotICByZXR1cm4geDJucmVhbGxvY19pbmxpbmUgKHAsIHBuLCBzKTsKKyAgcCA9IHJlYWxsb2MgKHAsIG4pOworICBpZiAoIXAgJiYgbikKKyAgICB4YWxsb2NfZGllICgpOworICByZXR1cm4gcDsKIH0KIAogLyogSWYgUCBpcyBudWxsLCBhbGxvY2F0ZSBhIGJsb2NrIG9mIGF0IGxlYXN0ICpQTiBieXRlczsgb3RoZXJ3aXNlLApAQCAtMTkyLDcgKzczLDcgQEAKIHZvaWQgKgogeDJyZWFsbG9jICh2b2lkICpwLCBzaXplX3QgKnBuKQogewotICByZXR1cm4geDJucmVhbGxvY19pbmxpbmUgKHAsIHBuLCAxKTsKKyAgcmV0dXJuIHgybnJlYWxsb2MgKHAsIHBuLCAxKTsKIH0KIAogLyogQWxsb2NhdGUgUyBieXRlcyBvZiB6ZXJvZWQgbWVtb3J5IGR5bmFtaWNhbGx5LCB3aXRoIGVycm9yIGNoZWNraW5nLgpkaWZmIC0tZ2l0IGEvbGliL3htZW1kdXAwLmMgYi9saWIveG1lbWR1cDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTgwNTYzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3htZW1kdXAwLmMKQEAgLTAsMCArMSw0NCBAQAorLyogeG1lbWR1cDAuYyAtLSBjb3B5IGEgYmxvY2sgb2YgYXJiaXRyYXJ5IGJ5dGVzLCBwbHVzIGEgdHJhaWxpbmcgTlVMCisKKyAgIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlICJ4bWVtZHVwMC5oIgorI2luY2x1ZGUgInhhbGxvYy5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qIENsb25lIGFuIGFyYml0cmFyeSBibG9jayBvZiBieXRlcyBQIG9mIHNpemUgUywgd2l0aCBlcnJvciBjaGVja2luZywKKyAgIGFuZCBpbmNsdWRlIGEgdGVybWluYXRpbmcgTlVMIGJ5dGUuICBQIGlzIG9mIHR5cGUgJ3ZvaWQgY29uc3QgKicsCisgICB0byBtYWtlIGl0IGVhc2llciB0byB1c2UgdGhpcyB3aXRoIG90aGVyIG1lbSogZnVuY3Rpb25zIHRoYXQgcmV0dXJuCisgICAndm9pZCAqJywgYnV0IHNpbmNlIGFwcGVuZGluZyBhIE5VTCBieXRlIG9ubHkgbWFrZXMgc2Vuc2Ugb24gYnl0ZXMsCisgICB0aGUgcmV0dXJuIHR5cGUgaXMgJ2NoYXIgKicuCisKKyAgIFRoZSB0ZXJtaW5hdGluZyBOVUwgbWFrZXMgaXQgc2FmZSB0byB1c2Ugc3RybGVuIG9yIHJhd21lbWNociB0bworICAgY2hlY2sgZm9yIGVtYmVkZGVkIE5VTDsgaXQgYWxzbyBzcGVlZHMgdXAgYWxnb3JpdGhtcyBzdWNoIGFzIGVzY2FwZQorICAgc2VxdWVuY2UgcHJvY2Vzc2luZyBvbiBhcmJpdHJhcnkgbWVtb3J5LCBieSBtYWtpbmcgaXQgYWx3YXlzIHNhZmUKKyAgIHRvIHJlYWQgdGhlIGJ5dGUgYWZ0ZXIgdGhlIGVzY2FwZSBjaGFyYWN0ZXIgcmF0aGVyIHRoYW4gaGF2aW5nIHRvCisgICBjaGVjayBpZiBlYWNoIGVzY2FwZSBjaGFyYWN0ZXIgaXMgdGhlIGxhc3QgYnl0ZSBpbiB0aGUgb2JqZWN0LiAgKi8KKworY2hhciAqCit4bWVtZHVwMCAodm9pZCBjb25zdCAqcCwgc2l6ZV90IHMpCit7CisgIGNoYXIgKnJlc3VsdCA9IHhjaGFyYWxsb2MgKHMgKyAxKTsKKyAgbWVtY3B5IChyZXN1bHQsIHAsIHMpOworICByZXN1bHRbc10gPSAwOworICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvbGliL3htZW1kdXAwLmggYi9saWIveG1lbWR1cDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODgzYjRkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3htZW1kdXAwLmgKQEAgLTAsMCArMSw0MSBAQAorLyogeG1lbWR1cDAuaCAtLSBjb3B5IGEgYmxvY2sgb2YgYXJiaXRyYXJ5IGJ5dGVzLCBwbHVzIGEgdHJhaWxpbmcgTlVMCisKKyAgIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIFhNRU1EVVBfSF8KKyMgZGVmaW5lIFhNRU1EVVBfSF8KKworIyBpbmNsdWRlIDxzdGRkZWYuaD4KKworCisjIGlmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyMgZW5kaWYKKworLyogVGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gbWVtb3J5IGlzIGV4aGF1c3RlZC4KKyAgIEl0IG11c3QgYmUgZGVmaW5lZCBieSB0aGUgYXBwbGljYXRpb24sIGVpdGhlciBleHBsaWNpdGx5CisgICBvciBieSB1c2luZyBnbnVsaWIncyB4YWxsb2MtZGllIG1vZHVsZS4gIFRoaXMgaXMgdGhlCisgICBmdW5jdGlvbiB0byBjYWxsIHdoZW4gb25lIHdhbnRzIHRoZSBwcm9ncmFtIHRvIGRpZSBiZWNhdXNlIG9mIGEKKyAgIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuICAqLworZXh0ZXJuIF9Ob3JldHVybiB2b2lkIHhhbGxvY19kaWUgKHZvaWQpOworCitjaGFyICp4bWVtZHVwMCAodm9pZCBjb25zdCAqcCwgc2l6ZV90IHMpOworCisjIGlmZGVmIF9fY3BsdXNwbHVzCit9CisjIGVuZGlmCisKKyNlbmRpZiAvKiAhWE1FTURVUDBfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYi94c2l6ZS5jIGIvbGliL3hzaXplLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI0OTE0YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi94c2l6ZS5jCkBAIC0wLDAgKzEsMyBAQAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2RlZmluZSBYU0laRV9JTkxJTkUgX0dMX0VYVEVSTl9JTkxJTkUKKyNpbmNsdWRlICJ4c2l6ZS5oIgpkaWZmIC0tZ2l0IGEvbGliL3hzaXplLmggYi9saWIveHNpemUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjk0MmI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3hzaXplLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qIHhzaXplLmggLS0gQ2hlY2tlZCBzaXplX3QgY29tcHV0YXRpb25zLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIF9YU0laRV9ICisjZGVmaW5lIF9YU0laRV9ICisKKy8qIEdldCBzaXplX3QuICAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisvKiBHZXQgU0laRV9NQVguICAqLworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2lmIEhBVkVfU1RESU5UX0gKKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKworX0dMX0lOTElORV9IRUFERVJfQkVHSU4KKyNpZm5kZWYgWFNJWkVfSU5MSU5FCisjIGRlZmluZSBYU0laRV9JTkxJTkUgX0dMX0lOTElORQorI2VuZGlmCisKKy8qIFRoZSBzaXplIG9mIG1lbW9yeSBvYmplY3RzIGlzIG9mdGVuIGNvbXB1dGVkIHRocm91Z2ggZXhwcmVzc2lvbnMgb2YKKyAgIHR5cGUgc2l6ZV90LiBFeGFtcGxlOgorICAgICAgdm9pZCogcCA9IG1hbGxvYyAoaGVhZGVyX3NpemUgKyBuICogZWxlbWVudF9zaXplKS4KKyAgIFRoZXNlIGNvbXB1dGF0aW9ucyBjYW4gbGVhZCB0byBvdmVyZmxvdy4gIFdoZW4gdGhpcyBoYXBwZW5zLCBtYWxsb2MoKQorICAgcmV0dXJucyBhIHBpZWNlIG9mIG1lbW9yeSB0aGF0IGlzIHdheSB0b28gc21hbGwsIGFuZCB0aGUgcHJvZ3JhbSB0aGVuCisgICBjcmFzaGVzIHdoaWxlIGF0dGVtcHRpbmcgdG8gZmlsbCB0aGUgbWVtb3J5LgorICAgVG8gYXZvaWQgdGhpcywgdGhlIGZ1bmN0aW9ucyBhbmQgbWFjcm9zIGluIHRoaXMgZmlsZSBjaGVjayBmb3Igb3ZlcmZsb3cuCisgICBUaGUgY29udmVudGlvbiBpcyB0aGF0IFNJWkVfTUFYIHJlcHJlc2VudHMgb3ZlcmZsb3cuCisgICBtYWxsb2MgKFNJWkVfTUFYKSBpcyBub3QgZ3VhcmFudGVlZCB0byBmYWlsIC0tIHRoaW5rIG9mIGEgbWFsbG9jCisgICBpbXBsZW1lbnRhdGlvbiB0aGF0IHVzZXMgbW1hcCAtLSwgaXQncyByZWNvbW1lbmRlZCB0byB1c2Ugc2l6ZV9vdmVyZmxvd19wKCkKKyAgIG9yIHNpemVfaW5fYm91bmRzX3AoKSBiZWZvcmUgaW52b2tpbmcgbWFsbG9jKCkuCisgICBUaGUgZXhhbXBsZSB0aHVzIGJlY29tZXM6CisgICAgICBzaXplX3Qgc2l6ZSA9IHhzdW0gKGhlYWRlcl9zaXplLCB4dGltZXMgKG4sIGVsZW1lbnRfc2l6ZSkpOworICAgICAgdm9pZCAqcCA9IChzaXplX2luX2JvdW5kc19wIChzaXplKSA/IG1hbGxvYyAoc2l6ZSkgOiBOVUxMKTsKKyovCisKKy8qIENvbnZlcnQgYW4gYXJiaXRyYXJ5IHZhbHVlID49IDAgdG8gdHlwZSBzaXplX3QuICAqLworI2RlZmluZSB4Y2FzdF9zaXplX3QoTikgXAorICAoKE4pIDw9IFNJWkVfTUFYID8gKHNpemVfdCkgKE4pIDogU0laRV9NQVgpCisKKy8qIFN1bSBvZiB0d28gc2l6ZXMsIHdpdGggb3ZlcmZsb3cgY2hlY2suICAqLworWFNJWkVfSU5MSU5FIHNpemVfdAorI2lmIF9fR05VQ19fID49IDMKK19fYXR0cmlidXRlX18gKChfX3B1cmVfXykpCisjZW5kaWYKK3hzdW0gKHNpemVfdCBzaXplMSwgc2l6ZV90IHNpemUyKQoreworICBzaXplX3Qgc3VtID0gc2l6ZTEgKyBzaXplMjsKKyAgcmV0dXJuIChzdW0gPj0gc2l6ZTEgPyBzdW0gOiBTSVpFX01BWCk7Cit9CisKKy8qIFN1bSBvZiB0aHJlZSBzaXplcywgd2l0aCBvdmVyZmxvdyBjaGVjay4gICovCitYU0laRV9JTkxJTkUgc2l6ZV90CisjaWYgX19HTlVDX18gPj0gMworX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSkKKyNlbmRpZgoreHN1bTMgKHNpemVfdCBzaXplMSwgc2l6ZV90IHNpemUyLCBzaXplX3Qgc2l6ZTMpCit7CisgIHJldHVybiB4c3VtICh4c3VtIChzaXplMSwgc2l6ZTIpLCBzaXplMyk7Cit9CisKKy8qIFN1bSBvZiBmb3VyIHNpemVzLCB3aXRoIG92ZXJmbG93IGNoZWNrLiAgKi8KK1hTSVpFX0lOTElORSBzaXplX3QKKyNpZiBfX0dOVUNfXyA+PSAzCitfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorI2VuZGlmCit4c3VtNCAoc2l6ZV90IHNpemUxLCBzaXplX3Qgc2l6ZTIsIHNpemVfdCBzaXplMywgc2l6ZV90IHNpemU0KQoreworICByZXR1cm4geHN1bSAoeHN1bSAoeHN1bSAoc2l6ZTEsIHNpemUyKSwgc2l6ZTMpLCBzaXplNCk7Cit9CisKKy8qIE1heGltdW0gb2YgdHdvIHNpemVzLCB3aXRoIG92ZXJmbG93IGNoZWNrLiAgKi8KK1hTSVpFX0lOTElORSBzaXplX3QKKyNpZiBfX0dOVUNfXyA+PSAzCitfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorI2VuZGlmCit4bWF4IChzaXplX3Qgc2l6ZTEsIHNpemVfdCBzaXplMikKK3sKKyAgLyogTm8gZXhwbGljaXQgY2hlY2sgaXMgbmVlZGVkIGhlcmUsIGJlY2F1c2UgZm9yIGFueSBuOgorICAgICBtYXggKFNJWkVfTUFYLCBuKSA9PSBTSVpFX01BWCBhbmQgbWF4IChuLCBTSVpFX01BWCkgPT0gU0laRV9NQVguICAqLworICByZXR1cm4gKHNpemUxID49IHNpemUyID8gc2l6ZTEgOiBzaXplMik7Cit9CisKKy8qIE11bHRpcGxpY2F0aW9uIG9mIGEgY291bnQgd2l0aCBhbiBlbGVtZW50IHNpemUsIHdpdGggb3ZlcmZsb3cgY2hlY2suCisgICBUaGUgY291bnQgbXVzdCBiZSA+PSAwIGFuZCB0aGUgZWxlbWVudCBzaXplIG11c3QgYmUgPiAwLgorICAgVGhpcyBpcyBhIG1hY3JvLCBub3QgYSBmdW5jdGlvbiwgc28gdGhhdCBpdCB3b3JrcyBjb3JyZWN0bHkgZXZlbgorICAgd2hlbiBOIGlzIG9mIGEgd2lkZXIgdHlwZSBhbmQgTiA+IFNJWkVfTUFYLiAgKi8KKyNkZWZpbmUgeHRpbWVzKE4sIEVMU0laRSkgXAorICAoKE4pIDw9IFNJWkVfTUFYIC8gKEVMU0laRSkgPyAoc2l6ZV90KSAoTikgKiAoRUxTSVpFKSA6IFNJWkVfTUFYKQorCisvKiBDaGVjayBmb3Igb3ZlcmZsb3cuICAqLworI2RlZmluZSBzaXplX292ZXJmbG93X3AoU0laRSkgXAorICAoKFNJWkUpID09IFNJWkVfTUFYKQorLyogQ2hlY2sgYWdhaW5zdCBvdmVyZmxvdy4gICovCisjZGVmaW5lIHNpemVfaW5fYm91bmRzX3AoU0laRSkgXAorICAoKFNJWkUpICE9IFNJWkVfTUFYKQorCitfR0xfSU5MSU5FX0hFQURFUl9FTkQKKworI2VuZGlmIC8qIF9YU0laRV9IICovCmRpZmYgLS1naXQgYS9saWIveHN0cm5kdXAuYyBiL2xpYi94c3RybmR1cC5jCmluZGV4IGE2MmQ0YmQuLjQwZmZkZmUgMTAwNjQ0Ci0tLSBhL2xpYi94c3RybmR1cC5jCisrKyBiL2xpYi94c3RybmR1cC5jCkBAIC0xLDExICsxLDExIEBACiAvKiBEdXBsaWNhdGUgYSBib3VuZGVkIGluaXRpYWwgc2VnbWVudCBvZiBhIHN0cmluZywgd2l0aCBvdXQtb2YtbWVtb3J5CiAgICBjaGVja2luZy4KLSAgIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMjAwMywgMjAwNi0yMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKQEAgLTEzLDE3ICsxMywxNCBAQAogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCisjaW5jbHVkZSA8Y29uZmlnLmg+CiAKIC8qIFNwZWNpZmljYXRpb24uICAqLwogI2luY2x1ZGUgInhzdHJuZHVwLmgiCiAKLSNpbmNsdWRlICJzdHJuZHVwLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSAieGFsbG9jLmgiCiAKIC8qIFJldHVybiBhIG5ld2x5IGFsbG9jYXRlZCBjb3B5IG9mIGF0IG1vc3QgTiBieXRlcyBvZiBTVFJJTkcuCmRpZmYgLS1naXQgYS9saWIveHN0cm5kdXAuaCBiL2xpYi94c3RybmR1cC5oCmluZGV4IDg4MzU0Y2YuLjc2NWU5Y2IgMTAwNjQ0Ci0tLSBhL2xpYi94c3RybmR1cC5oCisrKyBiL2xpYi94c3RybmR1cC5oCkBAIC0xLDExICsxLDExIEBACiAvKiBEdXBsaWNhdGUgYSBib3VuZGVkIGluaXRpYWwgc2VnbWVudCBvZiBhIHN0cmluZywgd2l0aCBvdXQtb2YtbWVtb3J5CiAgICBjaGVja2luZy4KLSAgIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMjAwMywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCkBAIC0xMyw4ICsxMyw3IEBACiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogI2luY2x1ZGUgPHN0ZGRlZi5oPgogCmRpZmYgLS1naXQgYS9saWIveXllcnJvci5jIGIvbGliL3l5ZXJyb3IuYwppbmRleCBiNGNlNGJhLi4zMzJlOTFlIDEwMDY0NAotLS0gYS9saWIveXllcnJvci5jCisrKyBiL2xpYi95eWVycm9yLmMKQEAgLTEsMjMgKzEsMjMgQEAKIC8qIFlhY2MgbGlicmFyeSBlcnJvci1wcmludGluZyBmdW5jdGlvbi4KIAotICAgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgogCi0gICBCaXNvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLSAgIEJpc29uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCBCaXNvbjsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CiAKICNpbmNsdWRlIDxzdGRpby5oPgogCkBAIC0yNiw1ICsyNiw3IEBACiBpbnQKIHl5ZXJyb3IgKGNoYXIgY29uc3QgKm1lc3NhZ2UpCiB7Ci0gIHJldHVybiBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbWVzc2FnZSk7CisgIGZwdXRzIChtZXNzYWdlLCBzdGRlcnIpOworICBmcHV0YyAoJ1xuJywgc3RkZXJyKTsKKyAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9saW51eC1saWIvYWxsb2NhLmggYi9saW51eC1saWIvYWxsb2NhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBkNjE4YgotLS0gL2Rldi9udWxsCisrKyBiL2xpbnV4LWxpYi9hbGxvY2EuaApAQCAtMCwwICsxLDY0IEBACisvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovCisvKiBNZW1vcnkgYWxsb2NhdGlvbiBvbiB0aGUgc3RhY2suCisKKyAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5OSwgMjAwMS0yMDA0LCAyMDA2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgICovCisKKy8qIEF2b2lkIHVzaW5nIHRoZSBzeW1ib2wgX0FMTE9DQV9IIGhlcmUsIGFzIEJpc29uIGFzc3VtZXMgX0FMTE9DQV9ICisgICBtZWFucyB0aGVyZSBpcyBhIHJlYWwgYWxsb2NhIGZ1bmN0aW9uLiAgKi8KKyNpZm5kZWYgX0dMX0FMTE9DQV9ICisjZGVmaW5lIF9HTF9BTExPQ0FfSAorCisvKiBhbGxvY2EgKE4pIHJldHVybnMgYSBwb2ludGVyIHRvIE4gYnl0ZXMgb2YgbWVtb3J5CisgICBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrLCB3aGljaCB3aWxsIGxhc3QgdW50aWwgdGhlIGZ1bmN0aW9uIHJldHVybnMuCisgICBVc2Ugb2YgYWxsb2NhIHNob3VsZCBiZSBhdm9pZGVkOgorICAgICAtIGluc2lkZSBhcmd1bWVudHMgb2YgZnVuY3Rpb24gY2FsbHMgLSB1bmRlZmluZWQgYmVoYXZpb3VyLAorICAgICAtIGluIGlubGluZSBmdW5jdGlvbnMgLSB0aGUgYWxsb2NhdGlvbiBtYXkgYWN0dWFsbHkgbGFzdCB1bnRpbCB0aGUKKyAgICAgICBjYWxsaW5nIGZ1bmN0aW9uIHJldHVybnMsCisgICAgIC0gZm9yIGh1Z2UgTiAoc2F5LCBOID49IDY1NTM2KSAtIHlvdSBuZXZlciBrbm93IGhvdyBsYXJnZSAob3Igc21hbGwpCisgICAgICAgdGhlIHN0YWNrIGlzLCBhbmQgd2hlbiB0aGUgc3RhY2sgY2Fubm90IGZ1bGZpbGwgdGhlIG1lbW9yeSBhbGxvY2F0aW9uCisgICAgICAgcmVxdWVzdCwgdGhlIHByb2dyYW0ganVzdCBjcmFzaGVzLgorICovCisKKyNpZm5kZWYgYWxsb2NhCisjIGlmZGVmIF9fR05VQ19fCisjICBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKyMgZWxpZiBkZWZpbmVkIF9BSVgKKyMgIGRlZmluZSBhbGxvY2EgX19hbGxvY2EKKyMgZWxpZiBkZWZpbmVkIF9NU0NfVkVSCisjICBpbmNsdWRlIDxtYWxsb2MuaD4KKyMgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQorIyBlbGlmIGRlZmluZWQgX19ERUNDICYmIGRlZmluZWQgX19WTVMKKyMgIGRlZmluZSBhbGxvY2EgX19BTExPQ0EKKyMgZWxpZiBkZWZpbmVkIF9fVEFOREVNICYmIGRlZmluZWQgX1ROU19FX1RBUkdFVAorIyAgaWZkZWYgIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjICBlbmRpZgordm9pZCAqX2FsbG9jYSAodW5zaWduZWQgc2hvcnQpOworIyAgcHJhZ21hIGludHJpbnNpYyAoX2FsbG9jYSkKKyMgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQorIyBlbHNlCisjICBpbmNsdWRlIDxzdGRkZWYuaD4KKyMgIGlmZGVmICBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorIyAgZW5kaWYKK3ZvaWQgKmFsbG9jYSAoc2l6ZV90KTsKKyMgZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgLyogX0dMX0FMTE9DQV9IICovCmRpZmYgLS1naXQgYS9saW51eC1saWIvYXJnLW5vbm51bGwuaCBiL2xpbnV4LWxpYi9hcmctbm9ubnVsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZGJhYzcKLS0tIC9kZXYvbnVsbAorKysgYi9saW51eC1saWIvYXJnLW5vbm51bGwuaApAQCAtMCwwICsxLDEwIEBACisvKiBfR0xfQVJHX05PTk5VTEwoKG4sLi4uLG0pKSB0ZWxscyB0aGUgY29tcGlsZXIgYW5kIHN0YXRpYyBhbmFseXplciB0b29scworICAgdGhhdCB0aGUgdmFsdWVzIHBhc3NlZCBhcyBhcmd1bWVudHMgbiwgLi4uLCBtIG11c3QgYmUgbm9uLU5VTEwgcG9pbnRlcnMuCisgICBuID0gMSBzdGFuZHMgZm9yIHRoZSBmaXJzdCBhcmd1bWVudCwgbiA9IDIgZm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgZXRjLiAgKi8KKyNpZm5kZWYgX0dMX0FSR19OT05OVUxMCisjIGlmIChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID49IDMpIHx8IF9fR05VQ19fID4gMworIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpIF9fYXR0cmlidXRlX18gKChfX25vbm51bGxfXyBwYXJhbXMpKQorIyBlbHNlCisjICBkZWZpbmUgX0dMX0FSR19OT05OVUxMKHBhcmFtcykKKyMgZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGludXgtbGliL2MrK2RlZnMuaCBiL2xpbnV4LWxpYi9jKytkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZkNjMyMgotLS0gL2Rldi9udWxsCisrKyBiL2xpbnV4LWxpYi9jKytkZWZzLmgKQEAgLTAsMCArMSwyNTUgQEAKKyNpZm5kZWYgX0dMX0NYWERFRlNfSAorI2RlZmluZSBfR0xfQ1hYREVGU19ICisKKy8qIFRoZSB0aHJlZSBtb3N0IGZyZXF1ZW50IHVzZSBjYXNlcyBvZiB0aGVzZSBtYWNyb3MgYXJlOgorCisgICAqIEZvciBwcm92aWRpbmcgYSBzdWJzdGl0dXRlIGZvciBhIGZ1bmN0aW9uIHRoYXQgaXMgbWlzc2luZyBvbiBzb21lCisgICAgIHBsYXRmb3JtcywgYnV0IGlzIGRlY2xhcmVkIGFuZCB3b3JrcyBmaW5lIG9uIHRoZSBwbGF0Zm9ybXMgb24gd2hpY2gKKyAgICAgaXQgZXhpc3RzOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgIUBIQVZFX0ZPT0AKKyAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgcmVwbGFjZW1lbnQgZm9yIGEgZnVuY3Rpb24gdGhhdCBleGlzdHMgb24gYWxsIHBsYXRmb3JtcywKKyAgICAgYnV0IGlzIGJyb2tlbi9pbnN1ZmZpY2llbnQgYW5kIG5lZWRzIHRvIGJlIHJlcGxhY2VkIG9uIHNvbWUgcGxhdGZvcm1zOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisgICAgICAgIyAgIHVuZGVmIGZvbworICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CisgICAgICAgIyBlbHNlCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgcmVwbGFjZW1lbnQgZm9yIGEgZnVuY3Rpb24gdGhhdCBleGlzdHMgb24gc29tZSBwbGF0Zm9ybXMKKyAgICAgYnV0IGlzIGJyb2tlbi9pbnN1ZmZpY2llbnQgYW5kIG5lZWRzIHRvIGJlIHJlcGxhY2VkIG9uIHNvbWUgb2YgdGhlbSBhbmQKKyAgICAgaXMgYWRkaXRpb25hbGx5IGVpdGhlciBtaXNzaW5nIG9yIHVuZGVjbGFyZWQgb24gc29tZSBvdGhlciBwbGF0Zm9ybXM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACisgICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyAgICAgICAjICAgdW5kZWYgZm9vCisgICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKyAgICAgICAjIGVsc2UKKyAgICAgICAjICBpZiAhQEhBVkVfRk9PQCAgIG9yICAgaWYgIUBIQVZFX0RFQ0xfRk9PQAorICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisqLworCisvKiBfR0xfRVhURVJOX0MgZGVjbGFyYXRpb247CisgICBwZXJmb3JtcyB0aGUgZGVjbGFyYXRpb24gd2l0aCBDIGxpbmthZ2UuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMKKyMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4gIkMiCisjZWxzZQorIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybgorI2VuZGlmCisKKy8qIF9HTF9GVU5DREVDTF9SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgZGVjbGFyZXMgYSByZXBsYWNlbWVudCBmdW5jdGlvbiwgbmFtZWQgcnBsX2Z1bmMsIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwKKyAgIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsIGFuZCBhdHRyaWJ1dGVzLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0ZVTkNERUNMX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisgKi8KKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICBfR0xfRlVOQ0RFQ0xfUlBMXzEgKHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpCisjZGVmaW5lIF9HTF9GVU5DREVDTF9SUExfMShycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0VYVEVSTl9DIHJldHR5cGUgcnBsX2Z1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworCisvKiBfR0xfRlVOQ0RFQ0xfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGRlY2xhcmVzIHRoZSBzeXN0ZW0gZnVuY3Rpb24sIG5hbWVkIGZ1bmMsIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwKKyAgIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsIGFuZCBhdHRyaWJ1dGVzLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0ZVTkNERUNMX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisgKi8KKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICBfR0xfRVhURVJOX0MgcmV0dHlwZSBmdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKworLyogX0dMX0NYWEFMSUFTX1JQTCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBkZWNsYXJlcyBhIEMrKyBhbGlhcyBjYWxsZWQgR05VTElCX05BTUVTUEFDRTo6ZnVuYworICAgdGhhdCByZWRpcmVjdHMgdG8gcnBsX2Z1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UgaXMgZGVmaW5lZC4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9DWFhBTElBU19SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworICovCisjZGVmaW5lIF9HTF9DWFhBTElBU19SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgX0dMX0NYWEFMSUFTX1JQTF8xIChmdW5jLCBycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKQorI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9IDo6cnBsX2Z1bmM7ICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1JQTF8xIChmdW5jLCBycGxfZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBycGxfZnVuYyBtYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudAorICAgZGVjbGFyYXRpb24uICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvcgorICAgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPig6OnJwbF9mdW5jKTsgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBkZWNsYXJlcyBhIEMrKyBhbGlhcyBjYWxsZWQgR05VTElCX05BTUVTUEFDRTo6ZnVuYworICAgdGhhdCByZWRpcmVjdHMgdG8gdGhlIHN5c3RlbSBwcm92aWRlZCBmdW5jdGlvbiBmdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFCisgICBpcyBkZWZpbmVkLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0NYWEFMSUFTX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CisgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorICAvKiBJZiB3ZSB3ZXJlIHRvIHdyaXRlCisgICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7CisgICAgIGxpa2UgYWJvdmUgaW4gX0dMX0NYWEFMSUFTX1JQTF8xLCB0aGUgY29tcGlsZXIgY291bGQgb3B0aW1pemUgY2FsbHMKKyAgICAgYmV0dGVyIChyZW1vdmUgYW4gaW5kaXJlY3Rpb24gdGhyb3VnaCBhICdzdGF0aWMnIHBvaW50ZXIgdmFyaWFibGUpLAorICAgICBidXQgdGhlbiB0aGUgX0dMX0NYWEFMSUFTV0FSTiBtYWNybyBiZWxvdyB3b3VsZCBjYXVzZSBhIHdhcm5pbmcgbm90IG9ubHkKKyAgICAgZm9yIHVzZXMgb2YgOjpmdW5jIGJ1dCBhbHNvIGZvciB1c2VzIG9mIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMuICAqLworIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOyAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1NZU19DQVNUIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gZnVuYyBtYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudCBkZWNsYXJhdGlvbi4KKyAgIEEgY2FzdCBpcyB1c2VkIHRvIHNpbGVuY2UgdGhlICJpbnZhbGlkIGNvbnZlcnNpb24iIGVycm9yIHRoYXQgd291bGQKKyAgIG90aGVyd2lzZSBvY2N1ci4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPig6OmZ1bmMpOyBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1NZU19DQVNUMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycywgcmV0dHlwZTIsIHBhcmFtZXRlcnMyKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gaXMgcGlja2VkIGFtb25nIGEgc2V0IG9mIG92ZXJsb2FkZWQgZnVuY3Rpb25zLAorICAgbmFtZWx5IHRoZSBvbmUgd2l0aCByZXR0eXBlMiBhbmQgcGFyYW1ldGVyczIuICBUd28gY29uc2VjdXRpdmUgY2FzdHMKKyAgIGFyZSB1c2VkIHRvIHNpbGVuY2UgdGhlICJjYW5ub3QgZmluZCBhIG1hdGNoIiBhbmQgImludmFsaWQgY29udmVyc2lvbiIKKyAgIGVycm9ycyB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyAgLyogVGhlIG91dGVyIGNhc3QgbXVzdCBiZSBhIHJlaW50ZXJwcmV0X2Nhc3QuCisgICAgIFRoZSBpbm5lciBjYXN0OiBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2V0IG9mIG92ZXJsb2FkZWQKKyAgICAgZnVuY3Rpb25zLCBpdCB3b3JrcyBhcyBhIHN0YXRpY19jYXN0PD4sIGNob29zaW5nIHRoZSBkZXNpZ25hdGVkIHZhcmlhbnQuCisgICAgIFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzaW5nbGUgdmFyaWFudCwgaXQgd29ya3MgYXMgYQorICAgICByZWludGVycHJldF9jYXN0PD4uIFRoZSBwYXJlbnRoZXNpemVkIGNhc3Qgc3ludGF4IHdvcmtzIGJvdGggd2F5cy4gICovCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzLHJldHR5cGUyLHBhcmFtZXRlcnMyKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKHJldHR5cGUyKCopcGFyYW1ldGVyczIpKDo6ZnVuYykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzLHJldHR5cGUyLHBhcmFtZXRlcnMyKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNXQVJOIChmdW5jKTsKKyAgIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZW1pdHRlZCB3aGVuIDo6ZnVuYyBpcyB1c2VkIGJ1dCBub3Qgd2hlbgorICAgR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgZnVuYyBtdXN0IGJlIGRlZmluZWQgd2l0aG91dCBvdmVybG9hZGVkCisgICB2YXJpYW50cy4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAorICAgX0dMX0NYWEFMSUFTV0FSTl8xIChmdW5jLCBHTlVMSUJfTkFNRVNQQUNFKQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8xKGZ1bmMsbmFtZXNwYWNlKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOXzIgKGZ1bmMsIG5hbWVzcGFjZSkKKy8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAorICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCisjIGlmICFfX09QVElNSVpFX18KKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKyAgICBfR0xfV0FSTl9PTl9VU0UgKGZ1bmMsIFwKKyAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICJVc2UgIiAjbmFtZXNwYWNlICI6OiIgI2Z1bmMgIiBpbnN0ZWFkLiIpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKyAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU1dBUk4xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZW1pdHRlZCB3aGVuIHRoZSBnaXZlbiBvdmVybG9hZGVkIHZhcmlhbnQgb2YgOjpmdW5jCisgICBpcyB1c2VkIGJ1dCBub3Qgd2hlbiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICAgX0dMX0NYWEFMSUFTV0FSTjFfMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgR05VTElCX05BTUVTUEFDRSkKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOMV8yIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBuYW1lc3BhY2UpCisvKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKyAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworIyBpZiAhX19PUFRJTUlaRV9fCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgICBfR0xfV0FSTl9PTl9VU0VfQ1hYIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJVc2UgIiAjbmFtZXNwYWNlICI6OiIgI2Z1bmMgIiBpbnN0ZWFkLiIpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKyNlbmRpZiAvKiBfR0xfQ1hYREVGU19IICovCmRpZmYgLS1naXQgYS9saW51eC1saWIvY29uZmlnLmggYi9saW51eC1saWIvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU0NTZkNQotLS0gL2Rldi9udWxsCisrKyBiL2xpbnV4LWxpYi9jb25maWcuaApAQCAtMCwwICsxLDIyNjggQEAKKy8qIGxpYi9jb25maWcuaC4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZy5pbi5oIGJ5IGNvbmZpZ3VyZS4gICovCisvKiBsaWIvY29uZmlnLmluLmguICBHZW5lcmF0ZWQgZnJvbSBjb25maWd1cmUuYWMgYnkgYXV0b2hlYWRlci4gICovCisKKy8qIERlZmluZSBpZiBidWlsZGluZyB1bml2ZXJzYWwgKGludGVybmFsIGhlbHBlciBtYWNybykgKi8KKy8qICN1bmRlZiBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQgKi8KKworLyogRGVmaW5lIHRvIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0eXBlICdwdHJkaWZmX3QnLiAqLworLyogI3VuZGVmIEJJVFNJWkVPRl9QVFJESUZGX1QgKi8KKworLyogRGVmaW5lIHRvIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0eXBlICdzaWdfYXRvbWljX3QnLiAqLworLyogI3VuZGVmIEJJVFNJWkVPRl9TSUdfQVRPTUlDX1QgKi8KKworLyogRGVmaW5lIHRvIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0eXBlICdzaXplX3QnLiAqLworLyogI3VuZGVmIEJJVFNJWkVPRl9TSVpFX1QgKi8KKworLyogRGVmaW5lIHRvIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0eXBlICd3Y2hhcl90Jy4gKi8KKy8qICN1bmRlZiBCSVRTSVpFT0ZfV0NIQVJfVCAqLworCisvKiBEZWZpbmUgdG8gdGhlIG51bWJlciBvZiBiaXRzIGluIHR5cGUgJ3dpbnRfdCcuICovCisvKiAjdW5kZWYgQklUU0laRU9GX1dJTlRfVCAqLworCisvKiBEZWZpbmUgaWYgeW91IHdpc2ggKnByaW50ZigpIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYSBzYWZlIGhhbmRsaW5nIG9mCisgICBub24tSUVFRS03NTQgJ2xvbmcgZG91YmxlJyB2YWx1ZXMuICovCisjZGVmaW5lIENIRUNLX1BSSU5URl9TQUZFIDEKKworLyogRGVmaW5lIHRvIG9uZSBvZiBgX2dldGI2NycsIGBHRVRCNjcnLCBgZ2V0YjY3JyBmb3IgQ3JheS0yIGFuZCBDcmF5LVlNUAorICAgc3lzdGVtcy4gVGhpcyBmdW5jdGlvbiBpcyByZXF1aXJlZCBmb3IgYGFsbG9jYS5jJyBzdXBwb3J0IG9uIHRob3NlIHN5c3RlbXMuCisgICAqLworLyogI3VuZGVmIENSQVlfU1RBQ0tTRUdfRU5EICovCisKKy8qIERlZmluZSB0byAxIGlmIHVzaW5nIGBhbGxvY2EuYycuICovCisvKiAjdW5kZWYgQ19BTExPQ0EgKi8KKworLyogRGVmaW5lIGFzIHRoZSBiaXQgaW5kZXggaW4gdGhlIHdvcmQgd2hlcmUgdG8gZmluZCBiaXQgMCBvZiB0aGUgZXhwb25lbnQgb2YKKyAgICdkb3VibGUnLiAqLworI2RlZmluZSBEQkxfRVhQQklUMF9CSVQgMjAKKworLyogRGVmaW5lIGFzIHRoZSB3b3JkIGluZGV4IHdoZXJlIHRvIGZpbmQgdGhlIGV4cG9uZW50IG9mICdkb3VibGUnLiAqLworI2RlZmluZSBEQkxfRVhQQklUMF9XT1JEIDEKKworLyogRGVmaW5lIGFzIHRoZSBiaXQgaW5kZXggaW4gdGhlIHdvcmQgd2hlcmUgdG8gZmluZCB0aGUgc2lnbiBvZiAnZG91YmxlJy4gKi8KKy8qICN1bmRlZiBEQkxfU0lHTkJJVF9CSVQgKi8KKworLyogRGVmaW5lIGFzIHRoZSB3b3JkIGluZGV4IHdoZXJlIHRvIGZpbmQgdGhlIHNpZ24gb2YgJ2RvdWJsZScuICovCisvKiAjdW5kZWYgREJMX1NJR05CSVRfV09SRCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiAvLyBpcyBhIGZpbGUgc3lzdGVtIHJvb3QgZGlzdGluY3QgZnJvbSAvLiAqLworLyogI3VuZGVmIERPVUJMRV9TTEFTSF9JU19ESVNUSU5DVF9ST09UICovCisKKy8qIERlZmluZSB0byAxIGlmIHRyYW5zbGF0aW9uIG9mIHByb2dyYW0gbWVzc2FnZXMgdG8gdGhlIHVzZXIncyBuYXRpdmUKKyAgIGxhbmd1YWdlIGlzIHJlcXVlc3RlZC4gKi8KKyNkZWZpbmUgRU5BQkxFX05MUyAxCisKKy8qIERlZmluZSB0aGlzIHRvIDEgaWYgRl9EVVBGRCBiZWhhdmlvciBkb2VzIG5vdCBtYXRjaCBQT1NJWCAqLworLyogI3VuZGVmIEZDTlRMX0RVUEZEX0JVR0dZICovCisKKy8qIERlZmluZSBhcyB0aGUgYml0IGluZGV4IGluIHRoZSB3b3JkIHdoZXJlIHRvIGZpbmQgYml0IDAgb2YgdGhlIGV4cG9uZW50IG9mCisgICAnZmxvYXQnLiAqLworI2RlZmluZSBGTFRfRVhQQklUMF9CSVQgMjMKKworLyogRGVmaW5lIGFzIHRoZSB3b3JkIGluZGV4IHdoZXJlIHRvIGZpbmQgdGhlIGV4cG9uZW50IG9mICdmbG9hdCcuICovCisjZGVmaW5lIEZMVF9FWFBCSVQwX1dPUkQgMAorCisvKiBEZWZpbmUgYXMgdGhlIGJpdCBpbmRleCBpbiB0aGUgd29yZCB3aGVyZSB0byBmaW5kIHRoZSBzaWduIG9mICdmbG9hdCcuICovCisvKiAjdW5kZWYgRkxUX1NJR05CSVRfQklUICovCisKKy8qIERlZmluZSBhcyB0aGUgd29yZCBpbmRleCB3aGVyZSB0byBmaW5kIHRoZSBzaWduIG9mICdmbG9hdCcuICovCisvKiAjdW5kZWYgRkxUX1NJR05CSVRfV09SRCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBmb3BlbigpIGZhaWxzIHRvIHJlY29nbml6ZSBhIHRyYWlsaW5nIHNsYXNoLiAqLworLyogI3VuZGVmIEZPUEVOX1RSQUlMSU5HX1NMQVNIX0JVRyAqLworCisvKiBEZWZpbmUgdG8gYSBDIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIDEgb3IgMCwgZGVwZW5kaW5nCisgICB3aGV0aGVyIHRoZSBnbnVsaWIgbW9kdWxlIGNsb3NlLXN0cmVhbSBzaGFsbCBiZSBjb25zaWRlcmVkIHByZXNlbnQuICovCisjZGVmaW5lIEdOVUxJQl9DTE9TRV9TVFJFQU0gMQorCisvKiBEZWZpbmUgdG8gYSBDIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIDEgb3IgMCwgZGVwZW5kaW5nCisgICB3aGV0aGVyIHRoZSBnbnVsaWIgbW9kdWxlIGRpcm5hbWUgc2hhbGwgYmUgY29uc2lkZXJlZCBwcmVzZW50LiAqLworI2RlZmluZSBHTlVMSUJfRElSTkFNRSAxCisKKy8qIERlZmluZSB0byBhIEMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gMSBvciAwLCBkZXBlbmRpbmcKKyAgIHdoZXRoZXIgdGhlIGdudWxpYiBtb2R1bGUgZmQtc2FmZXItZmxhZyBzaGFsbCBiZSBjb25zaWRlcmVkIHByZXNlbnQuICovCisjZGVmaW5lIEdOVUxJQl9GRF9TQUZFUl9GTEFHIDEKKworLyogRGVmaW5lIHRvIGEgQyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byAxIG9yIDAsIGRlcGVuZGluZworICAgd2hldGhlciB0aGUgZ251bGliIG1vZHVsZSBmb3Blbi1zYWZlciBzaGFsbCBiZSBjb25zaWRlcmVkIHByZXNlbnQuICovCisjZGVmaW5lIEdOVUxJQl9GT1BFTl9TQUZFUiAxCisKKy8qIERlZmluZSB0byBhIEMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gMSBvciAwLCBkZXBlbmRpbmcKKyAgIHdoZXRoZXIgdGhlIGdudWxpYiBtb2R1bGUgZnNjYW5mIHNoYWxsIGJlIGNvbnNpZGVyZWQgcHJlc2VudC4gKi8KKyNkZWZpbmUgR05VTElCX0ZTQ0FORiAxCisKKy8qIERlZmluZSB0byBhIEMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gMSBvciAwLCBkZXBlbmRpbmcKKyAgIHdoZXRoZXIgdGhlIGdudWxpYiBtb2R1bGUgbWFsbG9jLWdudSBzaGFsbCBiZSBjb25zaWRlcmVkIHByZXNlbnQuICovCisjZGVmaW5lIEdOVUxJQl9NQUxMT0NfR05VIDEKKworLyogRGVmaW5lIHRvIGEgQyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byAxIG9yIDAsIGRlcGVuZGluZworICAgd2hldGhlciB0aGUgZ251bGliIG1vZHVsZSBwaXBlMi1zYWZlciBzaGFsbCBiZSBjb25zaWRlcmVkIHByZXNlbnQuICovCisjZGVmaW5lIEdOVUxJQl9QSVBFMl9TQUZFUiAxCisKKy8qIERlZmluZSB0byBhIEMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gMSBvciAwLCBkZXBlbmRpbmcKKyAgIHdoZXRoZXIgdGhlIGdudWxpYiBtb2R1bGUgc2NhbmYgc2hhbGwgYmUgY29uc2lkZXJlZCBwcmVzZW50LiAqLworI2RlZmluZSBHTlVMSUJfU0NBTkYgMQorCisvKiBEZWZpbmUgdG8gYSBDIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIDEgb3IgMCwgZGVwZW5kaW5nCisgICB3aGV0aGVyIHRoZSBnbnVsaWIgbW9kdWxlIHNucHJpbnRmIHNoYWxsIGJlIGNvbnNpZGVyZWQgcHJlc2VudC4gKi8KKyNkZWZpbmUgR05VTElCX1NOUFJJTlRGIDEKKworLyogRGVmaW5lIHRvIGEgQyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byAxIG9yIDAsIGRlcGVuZGluZworICAgd2hldGhlciB0aGUgZ251bGliIG1vZHVsZSBzdHJlcnJvciBzaGFsbCBiZSBjb25zaWRlcmVkIHByZXNlbnQuICovCisjZGVmaW5lIEdOVUxJQl9TVFJFUlJPUiAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgY2FsbG9jLXBvc2l4IHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX0NBTExPQ19QT1NJWCAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgY2xvZXhlYyBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9DTE9FWEVDIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBjbG9zZSBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9DTE9TRSAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgZHVwMiBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9EVVAyIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBlbnZpcm9uIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX0VOVklST04gMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIGZjbnRsIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX0ZDTlRMIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBmb3BlbiBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9GT1BFTiAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgZnByaW50Zi1wb3NpeCBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9GUFJJTlRGX1BPU0lYIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBmcmV4cCBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9GUkVYUCAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgZnJleHBsIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX0ZSRVhQTCAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgZnN0YXQgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfRlNUQVQgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIGdldGRlbGltIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX0dFVERFTElNIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBnZXRkdGFibGVzaXplIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX0dFVERUQUJMRVNJWkUgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIGdldGxpbmUgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfR0VUTElORSAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgZ2V0b3B0LWdudSBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9HRVRPUFRfR05VIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBpc25hbiBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9JU05BTiAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgaXNuYW5kIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX0lTTkFORCAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgaXNuYW5mIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX0lTTkFORiAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgaXNuYW5sIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX0lTTkFOTCAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgaXN3Ymxhbmsgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfSVNXQkxBTksgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIGxkZXhwbCBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9MREVYUEwgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIG1hbGxvYy1wb3NpeCBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9NQUxMT0NfUE9TSVggMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIG1icnRvd2Mgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfTUJSVE9XQyAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgbWJzY2hyIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX01CU0NIUiAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgbWJzaW5pdCBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9NQlNJTklUIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBtYnNyY2hyIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX01CU1JDSFIgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIG1lbWNociBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9NRU1DSFIgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIG9ic3RhY2stcHJpbnRmIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX09CU1RBQ0tfUFJJTlRGIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBvcGVuIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX09QRU4gMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHBlcnJvciBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9QRVJST1IgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHBpcGUyIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX1BJUEUyIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bmF0dHJfZGVzdHJveSBzaG91bGQgYmUKKyAgIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfUE9TSVhfU1BBV05BVFRSX0RFU1RST1kgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9pbml0IHNob3VsZCBiZSB0ZXN0ZWQuCisgICAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9QT1NJWF9TUEFXTkFUVFJfSU5JVCAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25hdHRyX3NldGZsYWdzIHNob3VsZCBiZQorICAgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9QT1NJWF9TUEFXTkFUVFJfU0VURkxBR1MgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9zZXRzaWdtYXNrIHNob3VsZCBiZQorICAgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9QT1NJWF9TUEFXTkFUVFJfU0VUU0lHTUFTSyAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25wIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX1BPU0lYX1NQQVdOUCAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlIHNob3VsZAorICAgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQUREQ0xPU0UgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyIHNob3VsZAorICAgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMiAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW4gc2hvdWxkCisgICBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERPUEVOIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfZGVzdHJveSBzaG91bGQKKyAgIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0RFU1RST1kgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19pbml0IHNob3VsZCBiZQorICAgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfSU5JVCAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgcHJpbnRmLXBvc2l4IHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX1BSSU5URl9QT1NJWCAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgcmFpc2Ugc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfUkFJU0UgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHJhd21lbWNociBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9SQVdNRU1DSFIgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHJlYWxsb2MtcG9zaXggc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfUkVBTExPQ19QT1NJWCAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgc2lnYWN0aW9uIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX1NJR0FDVElPTiAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgc2lnbmJpdCBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9TSUdOQklUIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBzaWdwcm9jbWFzayBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9TSUdQUk9DTUFTSyAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgc25wcmludGYgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfU05QUklOVEYgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHNwcmludGYtcG9zaXggc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfU1BSSU5URl9QT1NJWCAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgc3RhdCBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9TVEFUIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBzdHBjcHkgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfU1RQQ1BZIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBzdHJjaHJudWwgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfU1RSQ0hSTlVMIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBzdHJkdXAgc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfU1RSRFVQIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBzdHJlcnJvciBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9TVFJFUlJPUiAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgc3RyZXJyb3JfciBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9TVFJFUlJPUl9SIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSBzdHJuZHVwIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX1NUUk5EVVAgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHN0cm5sZW4gc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfU1RSTkxFTiAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgc3RydmVyc2NtcCBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9TVFJWRVJTQ01QIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSB1bnNldGVudiBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9VTlNFVEVOViAxCisKKy8qIERlZmluZSB0byAxIHdoZW4gdGhlIGdudWxpYiBtb2R1bGUgdmZwcmludGYtcG9zaXggc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfVkZQUklOVEZfUE9TSVggMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHZzbnByaW50ZiBzaG91bGQgYmUgdGVzdGVkLiAqLworI2RlZmluZSBHTlVMSUJfVEVTVF9WU05QUklOVEYgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHZzcHJpbnRmLXBvc2l4IHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX1ZTUFJJTlRGX1BPU0lYIDEKKworLyogRGVmaW5lIHRvIDEgd2hlbiB0aGUgZ251bGliIG1vZHVsZSB3YWl0cGlkIHNob3VsZCBiZSB0ZXN0ZWQuICovCisjZGVmaW5lIEdOVUxJQl9URVNUX1dBSVRQSUQgMQorCisvKiBEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlIHdjd2lkdGggc2hvdWxkIGJlIHRlc3RlZC4gKi8KKyNkZWZpbmUgR05VTElCX1RFU1RfV0NXSURUSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYWxhcm0nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0FMQVJNIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgJ2FsbG9jYScgYWZ0ZXIgaW5jbHVkaW5nIDxhbGxvY2EuaD4sIGEgaGVhZGVyIHRoYXQKKyAgIG1heSBiZSBzdXBwbGllZCBieSB0aGlzIGRpc3RyaWJ1dGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9BTExPQ0EgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSA8YWxsb2NhLmg+IGFuZCBpdCBzaG91bGQgYmUgdXNlZCAobm90IG9uIFVsdHJpeCkuCisgICAqLworI2RlZmluZSBIQVZFX0FMTE9DQV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxicC1zeW0uaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9CUF9TWU1fSCAqLworCisvKiBEZWZpbmUgaWYgdGhlICdjYWxsb2MnIGZ1bmN0aW9uIGlzIFBPU0lYIGNvbXBsaWFudC4gKi8KKyNkZWZpbmUgSEFWRV9DQUxMT0NfUE9TSVggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNhdGdldHMnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0NBVEdFVFMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTWFjIE9TIFggZnVuY3Rpb24gQ0ZMb2NhbGVDb3B5Q3VycmVudCBpbiB0aGUKKyAgIENvcmVGb3VuZGF0aW9uIGZyYW1ld29yay4gKi8KKy8qICN1bmRlZiBIQVZFX0NGTE9DQUxFQ09QWUNVUlJFTlQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIE1hYyBPUyBYIGZ1bmN0aW9uIENGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUgaW4KKyAgIHRoZSBDb3JlRm91bmRhdGlvbiBmcmFtZXdvcmsuICovCisvKiAjdW5kZWYgSEFWRV9DRlBSRUZFUkVOQ0VTQ09QWUFQUFZBTFVFICovCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBjbG9ja190Jy4gKi8KKyNkZWZpbmUgSEFWRV9DTE9DS19UIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjb25mc3RyJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0NPTkZTVFIgKi8KKworLyogRGVmaW5lIGlmIHRoZSBjb3B5c2lnbmYgZnVuY3Rpb24gaXMgZGVjbGFyZWQgaW4gPG1hdGguaD4gYW5kIGF2YWlsYWJsZSBpbgorICAgbGliYy4gKi8KKy8qICN1bmRlZiBIQVZFX0NPUFlTSUdORl9JTl9MSUJDICovCisKKy8qIERlZmluZSBpZiB0aGUgY29weXNpZ25sIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGluIDxtYXRoLmg+IGFuZCBhdmFpbGFibGUgaW4KKyAgIGxpYmMuICovCisvKiAjdW5kZWYgSEFWRV9DT1BZU0lHTkxfSU5fTElCQyAqLworCisvKiBEZWZpbmUgaWYgdGhlIGNvcHlzaWduIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGluIDxtYXRoLmg+IGFuZCBhdmFpbGFibGUgaW4KKyAgIGxpYmMuICovCisvKiAjdW5kZWYgSEFWRV9DT1BZU0lHTl9JTl9MSUJDICovCisKKy8qIERlZmluZSBpZiB0aGUgR05VIGRjZ2V0dGV4dCgpIGZ1bmN0aW9uIGlzIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQuCisgICAqLworI2RlZmluZSBIQVZFX0RDR0VUVEVYVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgY2xlYXJlcnJfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZgorICAgeW91IGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfQ0xFQVJFUlJfVU5MT0NLRUQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGNsb2NrJywgYW5kIHRvIDAgaWYgeW91IGRvbid0LgorICAgKi8KKyNkZWZpbmUgSEFWRV9ERUNMX0NMT0NLIDAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBjb3B5c2lnbicsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisvKiAjdW5kZWYgSEFWRV9ERUNMX0NPUFlTSUdOICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgY29weXNpZ25mJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKy8qICN1bmRlZiBIQVZFX0RFQ0xfQ09QWVNJR05GICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgY29weXNpZ25sJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKy8qICN1bmRlZiBIQVZFX0RFQ0xfQ09QWVNJR05MICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZmVvZl91bmxvY2tlZCcsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjZGVmaW5lIEhBVkVfREVDTF9GRU9GX1VOTE9DS0VEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBmZXJyb3JfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZgorICAgeW91IGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfRkVSUk9SX1VOTE9DS0VEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBmZmx1c2hfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZgorICAgeW91IGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfRkZMVVNIX1VOTE9DS0VEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBmZ2V0c191bmxvY2tlZCcsIGFuZCB0byAwIGlmCisgICB5b3UgZG9uJ3QuICovCisjZGVmaW5lIEhBVkVfREVDTF9GR0VUU19VTkxPQ0tFRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZnB1dGNfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZgorICAgeW91IGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfRlBVVENfVU5MT0NLRUQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGZwdXRzX3VubG9ja2VkJywgYW5kIHRvIDAgaWYKKyAgIHlvdSBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX0ZQVVRTX1VOTE9DS0VEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBmcmVhZF91bmxvY2tlZCcsIGFuZCB0byAwIGlmCisgICB5b3UgZG9uJ3QuICovCisjZGVmaW5lIEhBVkVfREVDTF9GUkVBRF9VTkxPQ0tFRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZndyaXRlX3VubG9ja2VkJywgYW5kIHRvIDAgaWYKKyAgIHlvdSBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX0ZXUklURV9VTkxPQ0tFRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZ2V0Y2hhcl91bmxvY2tlZCcsIGFuZCB0byAwIGlmCisgICB5b3UgZG9uJ3QuICovCisjZGVmaW5lIEhBVkVfREVDTF9HRVRDSEFSX1VOTE9DS0VEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBnZXRjX3VubG9ja2VkJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX0dFVENfVU5MT0NLRUQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGdldGRlbGltJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX0dFVERFTElNIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBnZXRlbnYnLCBhbmQgdG8gMCBpZiB5b3UgZG9uJ3QuCisgICAqLworI2RlZmluZSBIQVZFX0RFQ0xfR0VURU5WIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBnZXRsaW5lJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX0dFVExJTkUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGdldHJ1c2FnZScsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjZGVmaW5lIEhBVkVfREVDTF9HRVRSVVNBR0UgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGlzd2JsYW5rJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX0lTV0JMQU5LIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBtYnJ0b3djJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKy8qICN1bmRlZiBIQVZFX0RFQ0xfTUJSVE9XQyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYG1ic2luaXQnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworLyogI3VuZGVmIEhBVkVfREVDTF9NQlNJTklUICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgZGVjbGFyYXRpb24gb2YgbWJzd2lkdGgoKSBpbiA8d2NoYXIuaD4sIGFuZCB0byAwCisgICBvdGhlcndpc2UuICovCisjZGVmaW5lIEhBVkVfREVDTF9NQlNXSURUSF9JTl9XQ0hBUl9IIDAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBvYnN0YWNrX3ByaW50ZicsIGFuZCB0byAwIGlmCisgICB5b3UgZG9uJ3QuICovCisjZGVmaW5lIEhBVkVfREVDTF9PQlNUQUNLX1BSSU5URiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUnLCBhbmQKKyAgIHRvIDAgaWYgeW91IGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfUFJPR1JBTV9JTlZPQ0FUSU9OX05BTUUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lJywKKyAgIGFuZCB0byAwIGlmIHlvdSBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX1BST0dSQU1fSU5WT0NBVElPTl9TSE9SVF9OQU1FIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBwdXRjaGFyX3VubG9ja2VkJywgYW5kIHRvIDAgaWYKKyAgIHlvdSBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX1BVVENIQVJfVU5MT0NLRUQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHB1dGNfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfUFVUQ19VTkxPQ0tFRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgc25wcmludGYnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfU05QUklOVEYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHN0cmR1cCcsIGFuZCB0byAwIGlmIHlvdSBkb24ndC4KKyAgICovCisjZGVmaW5lIEhBVkVfREVDTF9TVFJEVVAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHN0cmVycm9yX3InLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfU1RSRVJST1JfUiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgc3RybmR1cCcsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjZGVmaW5lIEhBVkVfREVDTF9TVFJORFVQIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBzdHJubGVuJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX1NUUk5MRU4gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHN5c2NvbmYnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfU1lTQ09ORiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgdGltZXMnLCBhbmQgdG8gMCBpZiB5b3UgZG9uJ3QuCisgICAqLworI2RlZmluZSBIQVZFX0RFQ0xfVElNRVMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHRvd2xvd2VyJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKy8qICN1bmRlZiBIQVZFX0RFQ0xfVE9XTE9XRVIgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGB1bnNldGVudicsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjZGVmaW5lIEhBVkVfREVDTF9VTlNFVEVOViAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgdnNucHJpbnRmJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX1ZTTlBSSU5URiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgd2N3aWR0aCcsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjZGVmaW5lIEhBVkVfREVDTF9XQ1dJRFRIIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBfc25wcmludGYnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfX1NOUFJJTlRGIDAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBfX2ZwZW5kaW5nJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX19fRlBFTkRJTkcgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgJ2R1cDInIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0RVUDIgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGVudmlyb24uICovCisjZGVmaW5lIEhBVkVfRU5WSVJPTl9ERUNMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmY250bCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRkNOVEwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGZlYXR1cmVzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0ZFQVRVUkVTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZsb2NrZmlsZScgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9GTE9DS0ZJTEUgKi8KKworLyogRGVmaW5lIGlmIHRoZSBmcmV4cGwgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGluIGxpYmMuICovCisjZGVmaW5lIEhBVkVfRlJFWFBMX0lOX0xJQkMgMQorCisvKiBEZWZpbmUgaWYgdGhlIGZyZXhwIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBpbiBsaWJjLiAqLworI2RlZmluZSBIQVZFX0ZSRVhQX0lOX0xJQkMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZ1bmxvY2tmaWxlJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0ZVTkxPQ0tGSUxFICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0ZGVsaW0nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVERFTElNIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRkdGFibGVzaXplJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVREVEFCTEVTSVpFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxnZXRvcHQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfR0VUT1BUX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldG9wdF9sb25nX29ubHknIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVE9QVF9MT05HX09OTFkgMQorCisvKiBEZWZpbmUgaWYgdGhlIEdOVSBnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC4gKi8KKyNkZWZpbmUgSEFWRV9HRVRURVhUIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpY29udigpIGZ1bmN0aW9uIGFuZCBpdCB3b3Jrcy4gKi8KKy8qICN1bmRlZiBIQVZFX0lDT05WICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2ludG1heF90JyB0eXBlIGluIDxzdGRpbnQuaD4gb3IgPGludHR5cGVzLmg+LiAqLworI2RlZmluZSBIQVZFX0lOVE1BWF9UIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDEKKworLyogRGVmaW5lIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMsIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LCBhbmQKKyAgIGRlY2xhcmVzIHVpbnRtYXhfdC4gKi8KKyNkZWZpbmUgSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaXNhc2NpaScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfSVNBU0NJSSAxCisKKy8qIERlZmluZSBpZiB0aGUgaXNuYW4oZG91YmxlKSBmdW5jdGlvbiBpcyBhdmFpbGFibGUgaW4gbGliYy4gKi8KKyNkZWZpbmUgSEFWRV9JU05BTkRfSU5fTElCQyAxCisKKy8qIERlZmluZSBpZiB0aGUgaXNuYW4oZmxvYXQpIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBpbiBsaWJjLiAqLworI2RlZmluZSBIQVZFX0lTTkFORl9JTl9MSUJDIDEKKworLyogRGVmaW5lIGlmIHRoZSBpc25hbihsb25nIGRvdWJsZSkgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGluIGxpYmMuICovCisvKiAjdW5kZWYgSEFWRV9JU05BTkxfSU5fTElCQyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlzd2JsYW5rJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JU1dCTEFOSyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaXN3Y250cmwnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0lTV0NOVFJMIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIDxsYW5naW5mby5oPiBhbmQgbmxfbGFuZ2luZm8oQ09ERVNFVCkuICovCisjZGVmaW5lIEhBVkVfTEFOR0lORk9fQ09ERVNFVCAxCisKKy8qIERlZmluZSBpZiB0aGUgbGRleHBsKCkgZnVuY3Rpb24gaXMgYXZhaWxhYmxlLiAqLworI2RlZmluZSBIQVZFX0xERVhQTCAxCisKKy8qIERlZmluZSBpZiB0aGUgbGRleHBsIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBpbiBsaWJjLiAqLworI2RlZmluZSBIQVZFX0xERVhQTF9JTl9MSUJDIDEKKworLyogRGVmaW5lIGlmIHRoZSBsZGV4cCBmdW5jdGlvbiBpcyBhdmFpbGFibGUgaW4gbGliYy4gKi8KKyNkZWZpbmUgSEFWRV9MREVYUF9JTl9MSUJDIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsb2NhbGUuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTE9DQUxFX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSAnbG9uZyBsb25nIGludCcuICovCisjZGVmaW5lIEhBVkVfTE9OR19MT05HX0lOVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbHN0YXQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0xTVEFUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91ciBzeXN0ZW0gaGFzIGEgR05VIGxpYmMgY29tcGF0aWJsZSAnbWFsbG9jJyBmdW5jdGlvbiwgYW5kCisgICB0byAwIG90aGVyd2lzZS4gKi8KKyNkZWZpbmUgSEFWRV9NQUxMT0NfR05VIDEKKworLyogRGVmaW5lIGlmIHRoZSAnbWFsbG9jJyBmdW5jdGlvbiBpcyBQT1NJWCBjb21wbGlhbnQuICovCisjZGVmaW5lIEhBVkVfTUFMTE9DX1BPU0lYIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbW1hcCgpJ3MgTUFQX0FOT05ZTU9VUyBmbGFnIGlzIGF2YWlsYWJsZSBhZnRlciBpbmNsdWRpbmcKKyAgIGNvbmZpZy5oIGFuZCA8c3lzL21tYW4uaD4uICovCisjZGVmaW5lIEhBVkVfTUFQX0FOT05ZTU9VUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWF0aC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9NQVRIX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1icnRvd2MnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX01CUlRPV0MgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1ic2luaXQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX01CU0lOSVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiA8d2NoYXIuaD4gZGVjbGFyZXMgbWJzdGF0ZV90LiAqLworI2RlZmluZSBIQVZFX01CU1RBVEVfVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWVtb3J5Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX01FTU9SWV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtcHJvdGVjdCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfTVBST1RFQ1QgMQorCisvKiBEZWZpbmUgdG8gMSBvbiBNU1ZDIHBsYXRmb3JtcyB0aGF0IGhhdmUgdGhlICJpbnZhbGlkIHBhcmFtZXRlciBoYW5kbGVyIgorICAgY29uY2VwdC4gKi8KKy8qICN1bmRlZiBIQVZFX01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG5sX2xhbmdpbmZvJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX05MX0xBTkdJTkZPICovCisKKy8qIERlZmluZSB0byAxIGlmIGxpYmMgaW5jbHVkZXMgb2JzdGFja3MuICovCisjZGVmaW5lIEhBVkVfT0JTVEFDSyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgb2JzdGFja19wcmludGYnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX09CU1RBQ0tfUFJJTlRGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwYXRocy5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1BBVEhTX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwaXBlJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9QSVBFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwaXBlMicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUElQRTIgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBvc2l4X3NwYXduJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9QT1NJWF9TUEFXTiAxCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBwb3NpeF9zcGF3bmF0dHJfdCcuICovCisjZGVmaW5lIEhBVkVfUE9TSVhfU1BBV05BVFRSX1QgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QnLiAqLworI2RlZmluZSBIQVZFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19UIDEKKworLyogRGVmaW5lIGlmIHRoZSA8cHRocmVhZC5oPiBkZWZpbmVzIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFLiAqLworI2RlZmluZSBIQVZFX1BUSFJFQURfTVVURVhfUkVDVVJTSVZFIDEKKworLyogRGVmaW5lIGlmIHRoZSBQT1NJWCBtdWx0aXRocmVhZGluZyBsaWJyYXJ5IGhhcyByZWFkL3dyaXRlIGxvY2tzLiAqLworI2RlZmluZSBIQVZFX1BUSFJFQURfUldMT0NLIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByYWlzZScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUkFJU0UgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJhd21lbWNocicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUkFXTUVNQ0hSIDEKKworLyogRGVmaW5lIHRvIDEgaWYgYWNvc2YgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9BQ09TRiAxCisKKy8qIERlZmluZSB0byAxIGlmIGFjb3NsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfQUNPU0wgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBhc2luZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0FTSU5GIDEKKworLyogRGVmaW5lIHRvIDEgaWYgYXNpbmwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9BU0lOTCAxCisKKy8qIERlZmluZSB0byAxIGlmIGF0YW5mIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfQVRBTkYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBhdGFubCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0FUQU5MIDEKKworLyogRGVmaW5lIHRvIDEgaWYgYXRvbGwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9BVE9MTCAxCisKKy8qIERlZmluZSB0byAxIGlmIGJ0b3djIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfQlRPV0MgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBjYW5vbmljYWxpemVfZmlsZV9uYW1lIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZworICAgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0NBTk9OSUNBTElaRV9GSUxFX05BTUUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBjYnJ0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfQ0JSVCAxCisKKy8qIERlZmluZSB0byAxIGlmIGNicnRmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfQ0JSVEYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBjYnJ0bCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0NCUlRMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgY2VpbGYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9DRUlMRiAxCisKKy8qIERlZmluZSB0byAxIGlmIGNlaWxsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfQ0VJTEwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBjaGRpciBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0NIRElSIDEKKworLyogRGVmaW5lIHRvIDEgaWYgY2hvd24gaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9DSE9XTiAxCisKKy8qIERlZmluZSB0byAxIGlmIGNvcHlzaWduIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfQ09QWVNJR04gMQorCisvKiBEZWZpbmUgdG8gMSBpZiBjb3B5c2lnbmYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9DT1BZU0lHTkYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBjb3B5c2lnbmwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9DT1BZU0lHTkwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBjb3NmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfQ09TRiAxCisKKy8qIERlZmluZSB0byAxIGlmIGNvc2hmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfQ09TSEYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBjb3NsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfQ09TTCAxCisKKy8qIERlZmluZSB0byAxIGlmIGRwcmludGYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9EUFJJTlRGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZHVwIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfRFVQIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZHVwMiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0RVUDIgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBkdXAzIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfRFVQMyAxCisKKy8qIERlZmluZSB0byAxIGlmIGVuZHVzZXJzaGVsbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0VORFVTRVJTSEVMTCAxCisKKy8qIERlZmluZSB0byAxIGlmIGVudmlyb24gaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9FTlZJUk9OIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZXVpZGFjY2VzcyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0VVSURBQ0NFU1MgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBleHAyIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfRVhQMiAxCisKKy8qIERlZmluZSB0byAxIGlmIGV4cDJmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfRVhQMkYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBleHAybCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0VYUDJMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZXhwZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0VYUEYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBleHBsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfRVhQTCAxCisKKy8qIERlZmluZSB0byAxIGlmIGV4cG0xIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfRVhQTTEgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBleHBtMWYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9FWFBNMUYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBleHBtMWwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9FWFBNMUwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBmYWJzZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0ZBQlNGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZmFic2wgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9GQUJTTCAxCisKKy8qIERlZmluZSB0byAxIGlmIGZhY2Nlc3NhdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0ZBQ0NFU1NBVCAxCisKKy8qIERlZmluZSB0byAxIGlmIGZjaGRpciBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0ZDSERJUiAxCisKKy8qIERlZmluZSB0byAxIGlmIGZjaG1vZGF0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfRkNITU9EQVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBmY2hvd25hdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0ZDSE9XTkFUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZmNudGwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9GQ05UTCAxCisKKy8qIERlZmluZSB0byAxIGlmIGZkYXRhc3luYyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0ZEQVRBU1lOQyAxCisKKy8qIERlZmluZSB0byAxIGlmIGZmc2wgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9GRlNMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZmZzbGwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9GRlNMTCAxCisKKy8qIERlZmluZSB0byAxIGlmIGZsb29yZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0ZMT09SRiAxCisKKy8qIERlZmluZSB0byAxIGlmIGZsb29ybCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0ZMT09STCAxCisKKy8qIERlZmluZSB0byAxIGlmIGZtYSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0ZNQSAxCisKKy8qIERlZmluZSB0byAxIGlmIGZtYWYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9GTUFGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZm1hbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0ZNQUwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBmbW9kIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfRk1PRCAxCisKKy8qIERlZmluZSB0byAxIGlmIGZtb2RmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfRk1PREYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBmbW9kbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0ZNT0RMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZnB1cmdlIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisvKiAjdW5kZWYgSEFWRV9SQVdfREVDTF9GUFVSR0UgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgZnJleHBmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfRlJFWFBGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZnJleHBsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfRlJFWFBMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZnNlZWtvIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfRlNFRUtPIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZnN0YXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9GU1RBVCAxCisKKy8qIERlZmluZSB0byAxIGlmIGZzdGF0YXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9GU1RBVEFUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZnN5bmMgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9GU1lOQyAxCisKKy8qIERlZmluZSB0byAxIGlmIGZ0ZWxsbyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0ZURUxMTyAxCisKKy8qIERlZmluZSB0byAxIGlmIGZ0cnVuY2F0ZSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0ZUUlVOQ0FURSAxCisKKy8qIERlZmluZSB0byAxIGlmIGZ1dGltZW5zIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfRlVUSU1FTlMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBnZXRjd2QgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9HRVRDV0QgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBnZXRkZWxpbSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0dFVERFTElNIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZ2V0ZG9tYWlubmFtZSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0dFVERPTUFJTk5BTUUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBnZXRkdGFibGVzaXplIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfR0VURFRBQkxFU0laRSAxCisKKy8qIERlZmluZSB0byAxIGlmIGdldGdyb3VwcyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0dFVEdST1VQUyAxCisKKy8qIERlZmluZSB0byAxIGlmIGdldGhvc3RuYW1lIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfR0VUSE9TVE5BTUUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBnZXRsaW5lIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfR0VUTElORSAxCisKKy8qIERlZmluZSB0byAxIGlmIGdldGxvYWRhdmcgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9HRVRMT0FEQVZHIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZ2V0bG9naW4gaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9HRVRMT0dJTiAxCisKKy8qIERlZmluZSB0byAxIGlmIGdldGxvZ2luX3IgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9HRVRMT0dJTl9SIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZ2V0cGFnZXNpemUgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9HRVRQQUdFU0laRSAxCisKKy8qIERlZmluZSB0byAxIGlmIGdldHMgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9HRVRTIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZ2V0c3Vib3B0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfR0VUU1VCT1BUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZ2V0dXNlcnNoZWxsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfR0VUVVNFUlNIRUxMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgZ3JhbnRwdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0dSQU5UUFQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBncm91cF9tZW1iZXIgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9HUk9VUF9NRU1CRVIgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBoeXBvdGYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9IWVBPVEYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBoeXBvdGwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9IWVBPVEwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBpbG9nYiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0lMT0dCIDEKKworLyogRGVmaW5lIHRvIDEgaWYgaWxvZ2JmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfSUxPR0JGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgaWxvZ2JsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfSUxPR0JMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgaW1heGFicyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0lNQVhBQlMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBpbWF4ZGl2IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfSU1BWERJViAxCisKKy8qIERlZmluZSB0byAxIGlmIGluaXRzdGF0ZSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0lOSVRTVEFURSAxCisKKy8qIERlZmluZSB0byAxIGlmIGluaXRzdGF0ZV9yIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfSU5JVFNUQVRFX1IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBpc2F0dHkgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9JU0FUVFkgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBpc3djdHlwZSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0lTV0NUWVBFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbGNobW9kIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTENITU9EIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbGNob3duIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTENIT1dOIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbGRleHBmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTERFWFBGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbGRleHBsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTERFWFBMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbGluayBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0xJTksgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBsaW5rYXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9MSU5LQVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBsb2cgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9MT0cgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBsb2cxMCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0xPRzEwIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbG9nMTBmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTE9HMTBGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbG9nMTBsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTE9HMTBMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbG9nMXAgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9MT0cxUCAxCisKKy8qIERlZmluZSB0byAxIGlmIGxvZzFwZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0xPRzFQRiAxCisKKy8qIERlZmluZSB0byAxIGlmIGxvZzFwbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0xPRzFQTCAxCisKKy8qIERlZmluZSB0byAxIGlmIGxvZzIgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9MT0cyIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbG9nMmYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9MT0cyRiAxCisKKy8qIERlZmluZSB0byAxIGlmIGxvZzJsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTE9HMkwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBsb2diIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTE9HQiAxCisKKy8qIERlZmluZSB0byAxIGlmIGxvZ2JmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTE9HQkYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBsb2dibCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0xPR0JMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbG9nZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0xPR0YgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBsb2dsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTE9HTCAxCisKKy8qIERlZmluZSB0byAxIGlmIGxzZWVrIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTFNFRUsgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBsc3RhdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX0xTVEFUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbWJybGVuIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTUJSTEVOIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbWJydG93YyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX01CUlRPV0MgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBtYnNpbml0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTUJTSU5JVCAxCisKKy8qIERlZmluZSB0byAxIGlmIG1ic25ydG93Y3MgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9NQlNOUlRPV0NTIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbWJzcnRvd2NzIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTUJTUlRPV0NTIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbWVtbWVtIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTUVNTUVNIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbWVtcGNweSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX01FTVBDUFkgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBtZW1yY2hyIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTUVNUkNIUiAxCisKKy8qIERlZmluZSB0byAxIGlmIG1rZGlyYXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9NS0RJUkFUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbWtkdGVtcCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX01LRFRFTVAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBta2ZpZm8gaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9NS0ZJRk8gMQorCisvKiBEZWZpbmUgdG8gMSBpZiBta2ZpZm9hdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX01LRklGT0FUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbWtub2QgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9NS05PRCAxCisKKy8qIERlZmluZSB0byAxIGlmIG1rbm9kYXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9NS05PREFUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbWtvc3RlbXAgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9NS09TVEVNUCAxCisKKy8qIERlZmluZSB0byAxIGlmIG1rb3N0ZW1wcyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX01LT1NURU1QUyAxCisKKy8qIERlZmluZSB0byAxIGlmIG1rc3RlbXAgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9NS1NURU1QIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbWtzdGVtcHMgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9NS1NURU1QUyAxCisKKy8qIERlZmluZSB0byAxIGlmIG1vZGYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9NT0RGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgbW9kZmYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9NT0RGRiAxCisKKy8qIERlZmluZSB0byAxIGlmIG1vZGZsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfTU9ERkwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBvcGVuYXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9PUEVOQVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBwY2xvc2UgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9QQ0xPU0UgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBwaXBlIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfUElQRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHBpcGUyIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfUElQRTIgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBwb3BlbiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1BPUEVOIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcG9zaXhfb3BlbnB0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfUE9TSVhfT1BFTlBUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcG9zaXhfc3Bhd24gaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTiAxCisKKy8qIERlZmluZSB0byAxIGlmIHBvc2l4X3NwYXduYXR0cl9kZXN0cm95IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZworICAgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9ERVNUUk9ZIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcG9zaXhfc3Bhd25hdHRyX2dldGZsYWdzIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZworICAgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9HRVRGTEFHUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHBvc2l4X3NwYXduYXR0cl9nZXRwZ3JvdXAgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nCisgICBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05BVFRSX0dFVFBHUk9VUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBhcmFtIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIKKyAgIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBBUkFNIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcG9zaXhfc3Bhd25hdHRyX2dldHNjaGVkcG9saWN5IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIKKyAgIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBPTElDWSAxCisKKy8qIERlZmluZSB0byAxIGlmIHBvc2l4X3NwYXduYXR0cl9nZXRzaWdkZWZhdWx0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIKKyAgIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdERUZBVUxUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcG9zaXhfc3Bhd25hdHRyX2dldHNpZ21hc2sgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nCisgICBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05BVFRSX0dFVFNJR01BU0sgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBwb3NpeF9zcGF3bmF0dHJfaW5pdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcKKyAgIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfSU5JVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHBvc2l4X3NwYXduYXR0cl9zZXRmbGFncyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcKKyAgIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfU0VURkxBR1MgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBwb3NpeF9zcGF3bmF0dHJfc2V0cGdyb3VwIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZworICAgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9TRVRQR1JPVVAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwYXJhbSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyCisgICB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQQVJBTSAxCisKKy8qIERlZmluZSB0byAxIGlmIHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBvbGljeSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyCisgICB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQT0xJQ1kgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBwb3NpeF9zcGF3bmF0dHJfc2V0c2lnZGVmYXVsdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyCisgICB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfU0VUU0lHREVGQVVMVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHBvc2l4X3NwYXduYXR0cl9zZXRzaWdtYXNrIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZworICAgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9TRVRTSUdNQVNLIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcG9zaXhfc3Bhd25wIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05QIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIKKyAgIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIKKyAgIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BREREVVAyIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW4gaXMgZGVjbGFyZWQgZXZlbiBhZnRlcgorICAgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU4gMQorCisvKiBEZWZpbmUgdG8gMSBpZiBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfZGVzdHJveSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyCisgICB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfREVTVFJPWSAxCisKKy8qIERlZmluZSB0byAxIGlmIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19pbml0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIKKyAgIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19JTklUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcG93ZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1BPV0YgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBwcmVhZCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1BSRUFEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcHRocmVhZF9zaWdtYXNrIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfUFRIUkVBRF9TSUdNQVNLIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcHRzbmFtZSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1BUU05BTUUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBwdHNuYW1lX3IgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9QVFNOQU1FX1IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBwd3JpdGUgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9QV1JJVEUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiByYW5kb20gaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9SQU5ET00gMQorCisvKiBEZWZpbmUgdG8gMSBpZiByYW5kb21fciBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1JBTkRPTV9SIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcmF3bWVtY2hyIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfUkFXTUVNQ0hSIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcmVhZGxpbmsgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9SRUFETElOSyAxCisKKy8qIERlZmluZSB0byAxIGlmIHJlYWRsaW5rYXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9SRUFETElOS0FUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcmVhbHBhdGggaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9SRUFMUEFUSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHJlbWFpbmRlciBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1JFTUFJTkRFUiAxCisKKy8qIERlZmluZSB0byAxIGlmIHJlbWFpbmRlcmYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9SRU1BSU5ERVJGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcmVtYWluZGVybCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1JFTUFJTkRFUkwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiByZW5hbWVhdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1JFTkFNRUFUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcmludCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1JJTlQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiByaW50ZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1JJTlRGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcmludGwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9SSU5UTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHJtZGlyIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfUk1ESVIgMQorCisvKiBEZWZpbmUgdG8gMSBpZiByb3VuZCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1JPVU5EIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcm91bmRmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfUk9VTkRGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcm91bmRsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfUk9VTkRMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgcnBtYXRjaCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1JQTUFUQ0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzZXRlbnYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TRVRFTlYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzZXRob3N0bmFtZSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1NFVEhPU1ROQU1FIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc2V0c3RhdGUgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TRVRTVEFURSAxCisKKy8qIERlZmluZSB0byAxIGlmIHNldHN0YXRlX3IgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TRVRTVEFURV9SIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc2V0dXNlcnNoZWxsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU0VUVVNFUlNIRUxMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc2lnYWN0aW9uIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU0lHQUNUSU9OIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc2lnYWRkc2V0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU0lHQUREU0VUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc2lnZGVsc2V0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU0lHREVMU0VUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc2lnZW1wdHlzZXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TSUdFTVBUWVNFVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHNpZ2ZpbGxzZXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TSUdGSUxMU0VUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc2lnaXNtZW1iZXIgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TSUdJU01FTUJFUiAxCisKKy8qIERlZmluZSB0byAxIGlmIHNpZ3BlbmRpbmcgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TSUdQRU5ESU5HIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc2lncHJvY21hc2sgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TSUdQUk9DTUFTSyAxCisKKy8qIERlZmluZSB0byAxIGlmIHNpbmYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TSU5GIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc2luaGYgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TSU5IRiAxCisKKy8qIERlZmluZSB0byAxIGlmIHNpbmwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TSU5MIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc2xlZXAgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TTEVFUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHNucHJpbnRmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU05QUklOVEYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzcXJ0ZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1NRUlRGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc3FydGwgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TUVJUTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHNyYW5kb20gaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TUkFORE9NIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc3JhbmRvbV9yIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU1JBTkRPTV9SIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc3RhdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1NUQVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzdHBjcHkgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TVFBDUFkgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzdHBuY3B5IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU1RQTkNQWSAxCisKKy8qIERlZmluZSB0byAxIGlmIHN0cmNhc2VzdHIgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TVFJDQVNFU1RSIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc3RyY2hybnVsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU1RSQ0hSTlVMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc3RyZHVwIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU1RSRFVQIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc3RyZXJyb3JfciBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1NUUkVSUk9SX1IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJuY2F0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU1RSTkNBVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHN0cm5kdXAgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TVFJORFVQIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc3RybmxlbiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1NUUk5MRU4gMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJwYnJrIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU1RSUEJSSyAxCisKKy8qIERlZmluZSB0byAxIGlmIHN0cnNlcCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1NUUlNFUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHN0cnNpZ25hbCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1NUUlNJR05BTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHN0cnRvZCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1NUUlRPRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHN0cnRvaW1heCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1NUUlRPSU1BWCAxCisKKy8qIERlZmluZSB0byAxIGlmIHN0cnRva19yIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU1RSVE9LX1IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJ0b2xsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU1RSVE9MTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHN0cnRvdWxsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU1RSVE9VTEwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJ0b3VtYXggaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TVFJUT1VNQVggMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJ2ZXJzY21wIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU1RSVkVSU0NNUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHN5bWxpbmsgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9TWU1MSU5LIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc3ltbGlua2F0IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfU1lNTElOS0FUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdGFuZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1RBTkYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0YW5oZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1RBTkhGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdGFubCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1RBTkwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0bXBmaWxlIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfVE1QRklMRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHRvd2N0cmFucyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1RPV0NUUkFOUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHRydW5jIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfVFJVTkMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0cnVuY2YgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9UUlVOQ0YgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0cnVuY2wgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9UUlVOQ0wgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0dHluYW1lX3IgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9UVFlOQU1FX1IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB1bmxpbmsgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9VTkxJTksgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB1bmxpbmthdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1VOTElOS0FUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdW5sb2NrcHQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9VTkxPQ0tQVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHVuc2V0ZW52IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfVU5TRVRFTlYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB1c2xlZXAgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9VU0xFRVAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB1dGltZW5zYXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9VVElNRU5TQVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB2ZHByaW50ZiBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1ZEUFJJTlRGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdnNucHJpbnRmIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfVlNOUFJJTlRGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd2FpdHBpZCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1dBSVRQSUQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB3Y3BjcHkgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9XQ1BDUFkgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB3Y3BuY3B5IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV0NQTkNQWSAxCisKKy8qIERlZmluZSB0byAxIGlmIHdjcnRvbWIgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9XQ1JUT01CIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd2NzY2FzZWNtcCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1dDU0NBU0VDTVAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB3Y3NjYXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9XQ1NDQVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB3Y3NjaHIgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9XQ1NDSFIgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB3Y3NjbXAgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9XQ1NDTVAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB3Y3Njb2xsIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV0NTQ09MTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHdjc2NweSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1dDU0NQWSAxCisKKy8qIERlZmluZSB0byAxIGlmIHdjc2NzcG4gaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9XQ1NDU1BOIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd2NzZHVwIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV0NTRFVQIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd2NzbGVuIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV0NTTEVOIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd2NzbmNhc2VjbXAgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9XQ1NOQ0FTRUNNUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHdjc25jYXQgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9XQ1NOQ0FUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd2NzbmNtcCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1dDU05DTVAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB3Y3NuY3B5IGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV0NTTkNQWSAxCisKKy8qIERlZmluZSB0byAxIGlmIHdjc25sZW4gaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9XQ1NOTEVOIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd2NzbnJ0b21icyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1dDU05SVE9NQlMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB3Y3NwYnJrIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV0NTUEJSSyAxCisKKy8qIERlZmluZSB0byAxIGlmIHdjc3JjaHIgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9XQ1NSQ0hSIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd2NzcnRvbWJzIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV0NTUlRPTUJTIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd2Nzc3BuIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV0NTU1BOIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd2Nzc3RyIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV0NTU1RSIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd2NzdG9rIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV0NTVE9LIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd2Nzd2lkdGggaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9XQ1NXSURUSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHdjc3hmcm0gaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9XQ1NYRlJNIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd2N0b2IgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9XQ1RPQiAxCisKKy8qIERlZmluZSB0byAxIGlmIHdjdHJhbnMgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9XQ1RSQU5TIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd2N0eXBlIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV0NUWVBFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd2N3aWR0aCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1dDV0lEVEggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB3bWVtY2hyIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIgdW5kZWZpbmluZyBtYWNyb3MuICovCisjZGVmaW5lIEhBVkVfUkFXX0RFQ0xfV01FTUNIUiAxCisKKy8qIERlZmluZSB0byAxIGlmIHdtZW1jbXAgaXMgZGVjbGFyZWQgZXZlbiBhZnRlciB1bmRlZmluaW5nIG1hY3Jvcy4gKi8KKyNkZWZpbmUgSEFWRV9SQVdfREVDTF9XTUVNQ01QIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd21lbWNweSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1dNRU1DUFkgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB3bWVtbW92ZSBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1dNRU1NT1ZFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgd21lbXNldCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX1dNRU1TRVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBfRXhpdCBpcyBkZWNsYXJlZCBldmVuIGFmdGVyIHVuZGVmaW5pbmcgbWFjcm9zLiAqLworI2RlZmluZSBIQVZFX1JBV19ERUNMX19FWElUIDEKKworLyogRGVmaW5lIGlmIHRoZSAncmVhbGxvYycgZnVuY3Rpb24gaXMgUE9TSVggY29tcGxpYW50LiAqLworI2RlZmluZSBIQVZFX1JFQUxMT0NfUE9TSVggMQorCisvKiBEZWZpbmUgdG8gMSBpZiAnbG9uZyBkb3VibGUnIGFuZCAnZG91YmxlJyBoYXZlIHRoZSBzYW1lIHJlcHJlc2VudGF0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfU0FNRV9MT05HX0RPVUJMRV9BU19ET1VCTEUgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzY2hlZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TQ0hFRF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzY2hlZF9zZXRwYXJhbScgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9TQ0hFRF9TRVRQQVJBTSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNjaGVkX3NldHNjaGVkdWxlcicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9TQ0hFRF9TRVRTQ0hFRFVMRVIgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRlZ2lkJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX1NFVEVHSUQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRldWlkJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX1NFVEVVSUQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRsb2NhbGUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFVExPQ0FMRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2lnYWN0aW9uJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TSUdBQ1RJT04gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ2FsdHN0YWNrJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TSUdBTFRTVEFDSyAxCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBzaWdpbmZvX3QnLiAqLworLyogI3VuZGVmIEhBVkVfU0lHSU5GT19UICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2lnaW50ZXJydXB0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TSUdJTlRFUlJVUFQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiAnc2lnX2F0b21pY190JyBpcyBhIHNpZ25lZCBpbnRlZ2VyIHR5cGUuICovCisvKiAjdW5kZWYgSEFWRV9TSUdORURfU0lHX0FUT01JQ19UICovCisKKy8qIERlZmluZSB0byAxIGlmICd3Y2hhcl90JyBpcyBhIHNpZ25lZCBpbnRlZ2VyIHR5cGUuICovCisvKiAjdW5kZWYgSEFWRV9TSUdORURfV0NIQVJfVCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiAnd2ludF90JyBpcyBhIHNpZ25lZCBpbnRlZ2VyIHR5cGUuICovCisvKiAjdW5kZWYgSEFWRV9TSUdORURfV0lOVF9UICovCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBzaWdzZXRfdCcuICovCisjZGVmaW5lIEhBVkVfU0lHU0VUX1QgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgc2lnX2F0b21pY190Jy4gKi8KKyNkZWZpbmUgSEFWRV9TSUdfQVRPTUlDX1QgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNucHJpbnRmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TTlBSSU5URiAxCisKKy8qIERlZmluZSBpZiB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBzbnByaW50ZiBmdW5jdGlvbiBpcyB0aGUgbnVtYmVyIG9mIG9mCisgICBieXRlcyAoZXhjbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBOVUwpIHRoYXQgd291bGQgaGF2ZSBiZWVuIHByb2R1Y2VkIGlmIHRoZQorICAgYnVmZmVyIGhhZCBiZWVuIGxhcmdlIGVub3VnaC4gKi8KKyNkZWZpbmUgSEFWRV9TTlBSSU5URl9SRVRWQUxfQzk5IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzcGF3bi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TUEFXTl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RESU5UX0ggMQorCisvKiBEZWZpbmUgaWYgPHN0ZGludC5oPiBleGlzdHMsIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LCBhbmQgZGVjbGFyZXMKKyAgIHVpbnRtYXhfdC4gKi8KKyNkZWZpbmUgSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGlvX2V4dC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVERJT19FWFRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NURExJQl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHBjcHknIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NUUENQWSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyY2hybnVsJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJDSFJOVUwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmR1cCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSRFVQIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJlcnJvcl9yJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJFUlJPUl9SIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NUUklOR1NfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5nLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NUUklOR19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJuZHVwJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJORFVQIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJubGVuJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJOTEVOIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJ0b3VsJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJUT1VMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgYHNhX3NpZ2FjdGlvbicgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBzaWdhY3Rpb24nLiAqLworI2RlZmluZSBIQVZFX1NUUlVDVF9TSUdBQ1RJT05fU0FfU0lHQUNUSU9OIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHN0cnVjdCB0bXMnLiAqLworI2RlZmluZSBIQVZFX1NUUlVDVF9UTVMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnZlcnNjbXAnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NUUlZFUlNDTVAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN5bWxpbmsnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NZTUxJTksgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9iaXR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfU1lTX0JJVFlQRVNfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9pbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1NZU19JTlRUWVBFU19IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL21tYW4uaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX01NQU5fSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3BhcmFtLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19QQVJBTV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcmVzb3VyY2UuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1JFU09VUkNFX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zb2NrZXQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1NPQ0tFVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3RhdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfU1RBVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZXMuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1RJTUVTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19USU1FX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3dhaXQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1dBSVRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdGltZXMnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1RJTUVTIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB0b3dsb3dlcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfVE9XTE9XRVIgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9VTklTVERfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdW5zZXRlbnYnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1VOU0VURU5WIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgJ3Vuc2lnbmVkIGxvbmcgbG9uZyBpbnQnLiAqLworI2RlZmluZSBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHZhc25wcmludGYnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfVkFTTlBSSU5URiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHZmb3JrJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX1ZGT1JLICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdnNucHJpbnRmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9WU05QUklOVEYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHdhaXRpZCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfV0FJVElEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx3Y2hhci5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9XQ0hBUl9IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnd2NoYXJfdCcgdHlwZS4gKi8KKyNkZWZpbmUgSEFWRV9XQ0hBUl9UIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB3Y3J0b21iJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9XQ1JUT01CIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB3Y3NsZW4nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1dDU0xFTiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd2NzbmxlbicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfV0NTTkxFTiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d2N0eXBlLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1dDVFlQRV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB3Y3dpZHRoJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9XQ1dJRFRIIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx3aW5zb2NrMi5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1dJTlNPQ0syX0ggKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnd2ludF90JyB0eXBlLiAqLworI2RlZmluZSBIQVZFX1dJTlRfVCAxCisKKy8qIERlZmluZSB0byAxIGlmIE9fTk9BVElNRSB3b3Jrcy4gKi8KKyNkZWZpbmUgSEFWRV9XT1JLSU5HX09fTk9BVElNRSAxCisKKy8qIERlZmluZSB0byAxIGlmIE9fTk9GT0xMT1cgd29ya3MuICovCisjZGVmaW5lIEhBVkVfV09SS0lOR19PX05PRk9MTE9XIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBwb3NpeF9zcGF3biBhbmQgcG9zaXhfc3Bhd25wIGZ1bmN0aW9ucyBhbmQgdGhleQorICAgd29yay4gKi8KKyNkZWZpbmUgSEFWRV9XT1JLSU5HX1BPU0lYX1NQQVdOIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYF9Cb29sJy4gKi8KKyNkZWZpbmUgSEFWRV9fQk9PTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX3NldF9pbnZhbGlkX3BhcmFtZXRlcl9oYW5kbGVyJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX19TRVRfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9fZnBlbmRpbmcnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX19fRlBFTkRJTkcgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9fZnNldGVycicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9fX0ZTRVRFUlIgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfX3hwZ19zdHJlcnJvcl9yJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9fX1hQR19TVFJFUlJPUl9SIDEKKworLyogRGVmaW5lIGFzIHRoZSBiaXQgaW5kZXggaW4gdGhlIHdvcmQgd2hlcmUgdG8gZmluZCBiaXQgMCBvZiB0aGUgZXhwb25lbnQgb2YKKyAgICdsb25nIGRvdWJsZScuICovCisjZGVmaW5lIExEQkxfRVhQQklUMF9CSVQgMAorCisvKiBEZWZpbmUgYXMgdGhlIHdvcmQgaW5kZXggd2hlcmUgdG8gZmluZCB0aGUgZXhwb25lbnQgb2YgJ2xvbmcgZG91YmxlJy4gKi8KKyNkZWZpbmUgTERCTF9FWFBCSVQwX1dPUkQgMgorCisvKiBEZWZpbmUgYXMgdGhlIGJpdCBpbmRleCBpbiB0aGUgd29yZCB3aGVyZSB0byBmaW5kIHRoZSBzaWduIG9mICdsb25nCisgICBkb3VibGUnLiAqLworLyogI3VuZGVmIExEQkxfU0lHTkJJVF9CSVQgKi8KKworLyogRGVmaW5lIGFzIHRoZSB3b3JkIGluZGV4IHdoZXJlIHRvIGZpbmQgdGhlIHNpZ24gb2YgJ2xvbmcgZG91YmxlJy4gKi8KKy8qICN1bmRlZiBMREJMX1NJR05CSVRfV09SRCAqLworCisvKiBEZWZpbmUgdG8gdGhlIEdOVSBNNCBleGVjdXRhYmxlIG5hbWUuICovCisjZGVmaW5lIE00ICIvdXNyL2Jpbi9tNCIKKworLyogRGVmaW5lIHRvICItZyIgaWYgR05VIE00IHN1cHBvcnRzIC1nLCBvdGhlcndpc2UgdG8gIiIuICovCisjZGVmaW5lIE00X0dOVV9PUFRJT04gIi0tZ251IgorCisvKiBEZWZpbmUgdG8gYSBzdWJzdGl0dXRlIHZhbHVlIGZvciBtbWFwKCkncyBNQVBfQU5PTllNT1VTIGZsYWcuICovCisvKiAjdW5kZWYgTUFQX0FOT05ZTU9VUyAqLworCisvKiBEZWZpbmUgaWYgdGhlIG1icnRvd2MgZnVuY3Rpb24gaGFzIHRoZSBOVUxMIHB3YyBhcmd1bWVudCBidWcuICovCisvKiAjdW5kZWYgTUJSVE9XQ19OVUxMX0FSRzFfQlVHICovCisKKy8qIERlZmluZSBpZiB0aGUgbWJydG93YyBmdW5jdGlvbiBoYXMgdGhlIE5VTEwgc3RyaW5nIGFyZ3VtZW50IGJ1Zy4gKi8KKy8qICN1bmRlZiBNQlJUT1dDX05VTExfQVJHMl9CVUcgKi8KKworLyogRGVmaW5lIGlmIHRoZSBtYnJ0b3djIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiAwIGZvciBhIE5VTCBjaGFyYWN0ZXIuICovCisvKiAjdW5kZWYgTUJSVE9XQ19OVUxfUkVUVkFMX0JVRyAqLworCisvKiBEZWZpbmUgaWYgdGhlIG1icnRvd2MgZnVuY3Rpb24gcmV0dXJucyBhIHdyb25nIHJldHVybiB2YWx1ZS4gKi8KKy8qICN1bmRlZiBNQlJUT1dDX1JFVFZBTF9CVUcgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgYXNzZXJ0aW9ucyBzaG91bGQgYmUgZGlzYWJsZWQuICovCisvKiAjdW5kZWYgTkRFQlVHICovCisKKy8qIERlZmluZSBpZiB0aGUgdmFzbnByaW50ZiBpbXBsZW1lbnRhdGlvbiBuZWVkcyBzcGVjaWFsIGNvZGUgZm9yIHRoZSAnYScgYW5kCisgICAnQScgZGlyZWN0aXZlcy4gKi8KKy8qICN1bmRlZiBORUVEX1BSSU5URl9ESVJFQ1RJVkVfQSAqLworCisvKiBEZWZpbmUgaWYgdGhlIHZhc25wcmludGYgaW1wbGVtZW50YXRpb24gbmVlZHMgc3BlY2lhbCBjb2RlIGZvciB0aGUgJ0YnCisgICBkaXJlY3RpdmUuICovCisvKiAjdW5kZWYgTkVFRF9QUklOVEZfRElSRUNUSVZFX0YgKi8KKworLyogRGVmaW5lIGlmIHRoZSB2YXNucHJpbnRmIGltcGxlbWVudGF0aW9uIG5lZWRzIHNwZWNpYWwgY29kZSBmb3IgdGhlICdscycKKyAgIGRpcmVjdGl2ZS4gKi8KKy8qICN1bmRlZiBORUVEX1BSSU5URl9ESVJFQ1RJVkVfTFMgKi8KKworLyogRGVmaW5lIGlmIHRoZSB2YXNucHJpbnRmIGltcGxlbWVudGF0aW9uIG5lZWRzIHNwZWNpYWwgY29kZSBmb3IgJ2RvdWJsZScKKyAgIGFyZ3VtZW50cy4gKi8KKy8qICN1bmRlZiBORUVEX1BSSU5URl9ET1VCTEUgKi8KKworLyogRGVmaW5lIGlmIHRoZSB2YXNucHJpbnRmIGltcGxlbWVudGF0aW9uIG5lZWRzIHNwZWNpYWwgY29kZSBmb3Igc3Vydml2aW5nCisgICBvdXQtb2YtbWVtb3J5IGNvbmRpdGlvbnMuICovCisvKiAjdW5kZWYgTkVFRF9QUklOVEZfRU5PTUVNICovCisKKy8qIERlZmluZSBpZiB0aGUgdmFzbnByaW50ZiBpbXBsZW1lbnRhdGlvbiBuZWVkcyBzcGVjaWFsIGNvZGUgZm9yIHRoZSAnIGZsYWcuCisgICAqLworLyogI3VuZGVmIE5FRURfUFJJTlRGX0ZMQUdfR1JPVVBJTkcgKi8KKworLyogRGVmaW5lIGlmIHRoZSB2YXNucHJpbnRmIGltcGxlbWVudGF0aW9uIG5lZWRzIHNwZWNpYWwgY29kZSBmb3IgdGhlICctJworICAgZmxhZy4gKi8KKy8qICN1bmRlZiBORUVEX1BSSU5URl9GTEFHX0xFRlRBREpVU1QgKi8KKworLyogRGVmaW5lIGlmIHRoZSB2YXNucHJpbnRmIGltcGxlbWVudGF0aW9uIG5lZWRzIHNwZWNpYWwgY29kZSBmb3IgdGhlIDAgZmxhZy4KKyAgICovCisvKiAjdW5kZWYgTkVFRF9QUklOVEZfRkxBR19aRVJPICovCisKKy8qIERlZmluZSBpZiB0aGUgdmFzbnByaW50ZiBpbXBsZW1lbnRhdGlvbiBuZWVkcyBzcGVjaWFsIGNvZGUgZm9yIGluZmluaXRlCisgICAnZG91YmxlJyBhcmd1bWVudHMuICovCisvKiAjdW5kZWYgTkVFRF9QUklOVEZfSU5GSU5JVEVfRE9VQkxFICovCisKKy8qIERlZmluZSBpZiB0aGUgdmFzbnByaW50ZiBpbXBsZW1lbnRhdGlvbiBuZWVkcyBzcGVjaWFsIGNvZGUgZm9yIGluZmluaXRlCisgICAnbG9uZyBkb3VibGUnIGFyZ3VtZW50cy4gKi8KKyNkZWZpbmUgTkVFRF9QUklOVEZfSU5GSU5JVEVfTE9OR19ET1VCTEUgMQorCisvKiBEZWZpbmUgaWYgdGhlIHZhc25wcmludGYgaW1wbGVtZW50YXRpb24gbmVlZHMgc3BlY2lhbCBjb2RlIGZvciAnbG9uZworICAgZG91YmxlJyBhcmd1bWVudHMuICovCisvKiAjdW5kZWYgTkVFRF9QUklOVEZfTE9OR19ET1VCTEUgKi8KKworLyogRGVmaW5lIGlmIHRoZSB2YXNucHJpbnRmIGltcGxlbWVudGF0aW9uIG5lZWRzIHNwZWNpYWwgY29kZSBmb3Igc3VwcG9ydGluZworICAgbGFyZ2UgcHJlY2lzaW9ucyB3aXRob3V0IGFyYml0cmFyeSBib3VuZHMuICovCisvKiAjdW5kZWYgTkVFRF9QUklOVEZfVU5CT1VOREVEX1BSRUNJU0lPTiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3VyIEMgY29tcGlsZXIgZG9lc24ndCBhY2NlcHQgLWMgYW5kIC1vIHRvZ2V0aGVyLiAqLworLyogI3VuZGVmIE5PX01JTlVTX0NfTUlOVVNfTyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBvcGVuKCkgZmFpbHMgdG8gcmVjb2duaXplIGEgdHJhaWxpbmcgc2xhc2guICovCisvKiAjdW5kZWYgT1BFTl9UUkFJTElOR19TTEFTSF9CVUcgKi8KKworLyogTmFtZSBvZiBwYWNrYWdlICovCisjZGVmaW5lIFBBQ0tBR0UgImJpc29uIgorCisvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KKyNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgImJ1Zy1iaXNvbkBnbnUub3JnIgorCisvKiBUaGUgY29weXJpZ2h0IHllYXIgZm9yIHRoaXMgcGFja2FnZSAqLworI2RlZmluZSBQQUNLQUdFX0NPUFlSSUdIVF9ZRUFSIDIwMTIKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX05BTUUgIkdOVSBCaXNvbiIKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1NUUklORyAiR05VIEJpc29uIDIuNyIKKworLyogRGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgImJpc29uIgorCisvKiBEZWZpbmUgdG8gdGhlIGhvbWUgcGFnZSBmb3IgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1VSTCAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2Jpc29uLyIKKworLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIyLjciCisKKy8qIHRoZSBudW1iZXIgb2YgcGVuZGluZyBvdXRwdXQgYnl0ZXMgb24gc3RyZWFtICdmcCcgKi8KKy8qICN1bmRlZiBQRU5ESU5HX09VVFBVVF9OX0JZVEVTICovCisKKy8qIERlZmluZSBpZiA8aW50dHlwZXMuaD4gZXhpc3RzIGFuZCBkZWZpbmVzIHVudXNhYmxlIFBSSSogbWFjcm9zLiAqLworLyogI3VuZGVmIFBSSV9NQUNST1NfQlJPS0VOICovCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSB0aGF0IGlzIHRoZSByZXN1bHQgb2YgZGVmYXVsdCBhcmd1bWVudCBwcm9tb3Rpb25zIG9mCisgICB0eXBlIG1vZGVfdC4gKi8KKyNkZWZpbmUgUFJPTU9URURfTU9ERV9UIG1vZGVfdAorCisvKiBEZWZpbmUgaWYgdGhlIHB0aHJlYWRfaW5fdXNlKCkgZGV0ZWN0aW9uIGlzIGhhcmQuICovCisvKiAjdW5kZWYgUFRIUkVBRF9JTl9VU0VfREVURUNUSU9OX0hBUkQgKi8KKworLyogRGVmaW5lIHRvIGwsIGxsLCB1LCB1bCwgdWxsLCBldGMuLCBhcyBzdWl0YWJsZSBmb3IgY29uc3RhbnRzIG9mIHR5cGUKKyAgICdwdHJkaWZmX3QnLiAqLworLyogI3VuZGVmIFBUUkRJRkZfVF9TVUZGSVggKi8KKworLyogRGVmaW5lIGlmIGZwcmludGYgaXMgb3ZlcnJpZGRlbiBieSBhIFBPU0lYIGNvbXBsaWFudCBnbnVsaWIgaW1wbGVtZW50YXRpb24uCisgICAqLworI2RlZmluZSBSRVBMQUNFX0ZQUklOVEZfUE9TSVggMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzdGF0IG5lZWRzIGhlbHAgd2hlbiBwYXNzZWQgYSBkaXJlY3RvcnkgbmFtZSB3aXRoIGEgdHJhaWxpbmcKKyAgIHNsYXNoICovCisvKiAjdW5kZWYgUkVQTEFDRV9GVU5DX1NUQVRfRElSICovCisKKy8qIERlZmluZSB0byAxIGlmIHN0YXQgbmVlZHMgaGVscCB3aGVuIHBhc3NlZCBhIGZpbGUgbmFtZSB3aXRoIGEgdHJhaWxpbmcKKyAgIHNsYXNoICovCisvKiAjdW5kZWYgUkVQTEFDRV9GVU5DX1NUQVRfRklMRSAqLworCisvKiBEZWZpbmUgaWYgcHJpbnRmIGlzIG92ZXJyaWRkZW4gYnkgYSBQT1NJWCBjb21wbGlhbnQgZ251bGliIGltcGxlbWVudGF0aW9uLgorICAgKi8KKyNkZWZpbmUgUkVQTEFDRV9QUklOVEZfUE9TSVggMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJlcnJvcigwKSBkb2VzIG5vdCByZXR1cm4gYSBtZXNzYWdlIGltcGx5aW5nIHN1Y2Nlc3MuICovCisvKiAjdW5kZWYgUkVQTEFDRV9TVFJFUlJPUl8wICovCisKKy8qIERlZmluZSBpZiB2YXNucHJpbnRmIGV4aXN0cyBidXQgaXMgb3ZlcnJpZGRlbiBieSBnbnVsaWIuICovCisvKiAjdW5kZWYgUkVQTEFDRV9WQVNOUFJJTlRGICovCisKKy8qIERlZmluZSBpZiB2ZnByaW50ZiBpcyBvdmVycmlkZGVuIGJ5IGEgUE9TSVggY29tcGxpYW50IGdudWxpYgorICAgaW1wbGVtZW50YXRpb24uICovCisjZGVmaW5lIFJFUExBQ0VfVkZQUklOVEZfUE9TSVggMQorCisvKiBEZWZpbmUgdG8gbCwgbGwsIHUsIHVsLCB1bGwsIGV0Yy4sIGFzIHN1aXRhYmxlIGZvciBjb25zdGFudHMgb2YgdHlwZQorICAgJ3NpZ19hdG9taWNfdCcuICovCisvKiAjdW5kZWYgU0lHX0FUT01JQ19UX1NVRkZJWCAqLworCisvKiBEZWZpbmUgYXMgdGhlIG1heGltdW0gdmFsdWUgb2YgdHlwZSAnc2l6ZV90JywgaWYgdGhlIHN5c3RlbSBkb2Vzbid0IGRlZmluZQorICAgaXQuICovCisjaWZuZGVmIFNJWkVfTUFYCisvKiAjIHVuZGVmIFNJWkVfTUFYICovCisjZW5kaWYKKworLyogRGVmaW5lIHRvIGwsIGxsLCB1LCB1bCwgdWxsLCBldGMuLCBhcyBzdWl0YWJsZSBmb3IgY29uc3RhbnRzIG9mIHR5cGUKKyAgICdzaXplX3QnLiAqLworLyogI3VuZGVmIFNJWkVfVF9TVUZGSVggKi8KKworLyogSWYgdXNpbmcgdGhlIEMgaW1wbGVtZW50YXRpb24gb2YgYWxsb2NhLCBkZWZpbmUgaWYgeW91IGtub3cgdGhlCisgICBkaXJlY3Rpb24gb2Ygc3RhY2sgZ3Jvd3RoIGZvciB5b3VyIHN5c3RlbTsgb3RoZXJ3aXNlIGl0IHdpbGwgYmUKKyAgIGF1dG9tYXRpY2FsbHkgZGVkdWNlZCBhdCBydW50aW1lLgorCVNUQUNLX0RJUkVDVElPTiA+IDAgPT4gZ3Jvd3MgdG93YXJkIGhpZ2hlciBhZGRyZXNzZXMKKwlTVEFDS19ESVJFQ1RJT04gPCAwID0+IGdyb3dzIHRvd2FyZCBsb3dlciBhZGRyZXNzZXMKKwlTVEFDS19ESVJFQ1RJT04gPSAwID0+IGRpcmVjdGlvbiBvZiBncm93dGggdW5rbm93biAqLworLyogI3VuZGVmIFNUQUNLX0RJUkVDVElPTiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgYFNfSVMqJyBtYWNyb3MgaW4gPHN5cy9zdGF0Lmg+IGRvIG5vdCB3b3JrIHByb3Blcmx5LiAqLworLyogI3VuZGVmIFNUQVRfTUFDUk9TX0JST0tFTiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KKyNkZWZpbmUgU1REQ19IRUFERVJTIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc3RyZXJyb3JfciByZXR1cm5zIGNoYXIgKi4gKi8KKyNkZWZpbmUgU1RSRVJST1JfUl9DSEFSX1AgMQorCisvKiBEZWZpbmUgdG8gdGhlIHByZWZpeCBvZiBDIHN5bWJvbHMgYXQgdGhlIGFzc2VtYmxlciBhbmQgbGlua2VyIGxldmVsLCBlaXRoZXIKKyAgIGFuIHVuZGVyc2NvcmUgb3IgZW1wdHkuICovCisjZGVmaW5lIFVTRVJfTEFCRUxfUFJFRklYIAorCisvKiBEZWZpbmUgaWYgdGhlIFBPU0lYIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgY2FuIGJlIHVzZWQuICovCisjZGVmaW5lIFVTRV9QT1NJWF9USFJFQURTIDEKKworLyogRGVmaW5lIGlmIHJlZmVyZW5jZXMgdG8gdGhlIFBPU0lYIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgc2hvdWxkIGJlIG1hZGUKKyAgIHdlYWsuICovCisjZGVmaW5lIFVTRV9QT1NJWF9USFJFQURTX1dFQUsgMQorCisvKiBEZWZpbmUgaWYgdGhlIEdOVSBQdGggbXVsdGl0aHJlYWRpbmcgbGlicmFyeSBjYW4gYmUgdXNlZC4gKi8KKy8qICN1bmRlZiBVU0VfUFRIX1RIUkVBRFMgKi8KKworLyogRGVmaW5lIGlmIHJlZmVyZW5jZXMgdG8gdGhlIEdOVSBQdGggbXVsdGl0aHJlYWRpbmcgbGlicmFyeSBzaG91bGQgYmUgbWFkZQorICAgd2Vhay4gKi8KKy8qICN1bmRlZiBVU0VfUFRIX1RIUkVBRFNfV0VBSyAqLworCisvKiBEZWZpbmUgaWYgdGhlIG9sZCBTb2xhcmlzIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgY2FuIGJlIHVzZWQuICovCisvKiAjdW5kZWYgVVNFX1NPTEFSSVNfVEhSRUFEUyAqLworCisvKiBEZWZpbmUgaWYgcmVmZXJlbmNlcyB0byB0aGUgb2xkIFNvbGFyaXMgbXVsdGl0aHJlYWRpbmcgbGlicmFyeSBzaG91bGQgYmUKKyAgIG1hZGUgd2Vhay4gKi8KKy8qICN1bmRlZiBVU0VfU09MQVJJU19USFJFQURTX1dFQUsgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgZ2V0YyBldGMuIHRvIHVzZSB1bmxvY2tlZCBJL08gaWYgYXZhaWxhYmxlLgorICAgVW5sb2NrZWQgSS9PIGNhbiBpbXByb3ZlIHBlcmZvcm1hbmNlIGluIHVuaXRocmVhZGVkIGFwcHMsIGJ1dCBpdCBpcyBub3QKKyAgIHNhZmUgZm9yIG11bHRpdGhyZWFkZWQgYXBwcy4gKi8KKyNkZWZpbmUgVVNFX1VOTE9DS0VEX0lPIDEKKworLyogRGVmaW5lIGlmIHRoZSBuYXRpdmUgV2luZG93cyBtdWx0aXRocmVhZGluZyBBUEkgY2FuIGJlIHVzZWQuICovCisvKiAjdW5kZWYgVVNFX1dJTkRPV1NfVEhSRUFEUyAqLworCisvKiBWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlICovCisjZGVmaW5lIFZFUlNJT04gIjIuNyIKKworLyogRGVmaW5lIHRvIDEgaWYgdW5zZXRlbnYgcmV0dXJucyB2b2lkIGluc3RlYWQgb2YgaW50LiAqLworLyogI3VuZGVmIFZPSURfVU5TRVRFTlYgKi8KKworLyogRGVmaW5lIHRvIGwsIGxsLCB1LCB1bCwgdWxsLCBldGMuLCBhcyBzdWl0YWJsZSBmb3IgY29uc3RhbnRzIG9mIHR5cGUKKyAgICd3Y2hhcl90Jy4gKi8KKy8qICN1bmRlZiBXQ0hBUl9UX1NVRkZJWCAqLworCisvKiBEZWZpbmUgdG8gbCwgbGwsIHUsIHVsLCB1bGwsIGV0Yy4sIGFzIHN1aXRhYmxlIGZvciBjb25zdGFudHMgb2YgdHlwZQorICAgJ3dpbnRfdCcuICovCisvKiAjdW5kZWYgV0lOVF9UX1NVRkZJWCAqLworCisvKiBEZWZpbmUgaWYgdXNpbmcgdGhlIGRtYWxsb2MgZGVidWdnaW5nIG1hbGxvYyBwYWNrYWdlICovCisvKiAjdW5kZWYgV0lUSF9ETUFMTE9DICovCisKKy8qIERlZmluZSBXT1JEU19CSUdFTkRJQU4gdG8gMSBpZiB5b3VyIHByb2Nlc3NvciBzdG9yZXMgd29yZHMgd2l0aCB0aGUgbW9zdAorICAgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdCAobGlrZSBNb3Rvcm9sYSBhbmQgU1BBUkMsIHVubGlrZSBJbnRlbCkuICovCisjaWYgZGVmaW5lZCBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQKKyMgaWYgZGVmaW5lZCBfX0JJR19FTkRJQU5fXworIyAgZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCisjIGVuZGlmCisjZWxzZQorIyBpZm5kZWYgV09SRFNfQklHRU5ESUFOCisvKiAjICB1bmRlZiBXT1JEU19CSUdFTkRJQU4gKi8KKyMgZW5kaWYKKyNlbmRpZgorCisvKiBEZWZpbmUgdG8gMSB0byBpbnRlcm5hdGlvbmFsaXplIGJpc29uIHJ1bnRpbWUgbWVzc2FnZXMuICovCisjZGVmaW5lIFlZRU5BQkxFX05MUyAxCisKKy8qIERlZmluZSB0byAxIGlmIGBsZXgnIGRlY2xhcmVzIGB5eXRleHQnIGFzIGEgYGNoYXIgKicgYnkgZGVmYXVsdCwgbm90IGEKKyAgIGBjaGFyW10nLiAqLworI2RlZmluZSBZWVRFWFRfUE9JTlRFUiAxCisKKy8qIEVuYWJsZSBsYXJnZSBpbm9kZSBudW1iZXJzIG9uIE1hYyBPUyBYIDEwLjUuICAqLworI2lmbmRlZiBfREFSV0lOX1VTRV82NF9CSVRfSU5PREUKKyMgZGVmaW5lIF9EQVJXSU5fVVNFXzY0X0JJVF9JTk9ERSAxCisjZW5kaWYKKworLyogTnVtYmVyIG9mIGJpdHMgaW4gYSBmaWxlIG9mZnNldCwgb24gaG9zdHMgd2hlcmUgdGhpcyBpcyBzZXR0YWJsZS4gKi8KKy8qICN1bmRlZiBfRklMRV9PRkZTRVRfQklUUyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBHbnVsaWIgb3ZlcnJpZGVzICdzdHJ1Y3Qgc3RhdCcgb24gV2luZG93cyBzbyB0aGF0IHN0cnVjdAorICAgc3RhdC5zdF9zaXplIGJlY29tZXMgNjQtYml0LiAqLworLyogI3VuZGVmIF9HTF9XSU5ET1dTXzY0X0JJVF9TVF9TSVpFICovCisKKy8qIERlZmluZSBmb3IgbGFyZ2UgZmlsZXMsIG9uIEFJWC1zdHlsZSBob3N0cy4gKi8KKy8qICN1bmRlZiBfTEFSR0VfRklMRVMgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgb24gTUlOSVguICovCisvKiAjdW5kZWYgX01JTklYICovCisKKy8qIFRoZSBfTm9yZXR1cm4ga2V5d29yZCBvZiBDMTEuICAqLworI2lmICEgKGRlZmluZWQgX05vcmV0dXJuIFwKKyAgICAgICB8fCAoZGVmaW5lZCBfX1NURENfVkVSU0lPTl9fICYmIDIwMTExMiA8PSBfX1NURENfVkVSU0lPTl9fKSkKKyMgaWYgKDMgPD0gX19HTlVDX18gfHwgKF9fR05VQ19fID09IDIgJiYgOCA8PSBfX0dOVUNfTUlOT1JfXykgXAorICAgICAgfHwgMHg1MTEwIDw9IF9fU1VOUFJPX0MpCisjICBkZWZpbmUgX05vcmV0dXJuIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKQorIyBlbGlmIGRlZmluZWQgX01TQ19WRVIgJiYgMTIwMCA8PSBfTVNDX1ZFUgorIyAgZGVmaW5lIF9Ob3JldHVybiBfX2RlY2xzcGVjIChub3JldHVybikKKyMgZWxzZQorIyAgZGVmaW5lIF9Ob3JldHVybgorIyBlbmRpZgorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDIgaWYgdGhlIHN5c3RlbSBkb2VzIG5vdCBwcm92aWRlIFBPU0lYLjEgZmVhdHVyZXMgZXhjZXB0IHdpdGgKKyAgIHRoaXMgZGVmaW5lZC4gKi8KKy8qICN1bmRlZiBfUE9TSVhfMV9TT1VSQ0UgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IG5lZWQgdG8gaW4gb3JkZXIgZm9yICdzdGF0JyBhbmQgb3RoZXIgdGhpbmdzIHRvIHdvcmsuICovCisvKiAjdW5kZWYgX1BPU0lYX1NPVVJDRSAqLworCisvKiBEZWZpbmUgdG8gNTAwIG9ubHkgb24gSFAtVVguICovCisvKiAjdW5kZWYgX1hPUEVOX1NPVVJDRSAqLworCisvKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBBSVggMywgSW50ZXJpeC4gICovCisjaWZuZGVmIF9BTExfU09VUkNFCisjIGRlZmluZSBfQUxMX1NPVVJDRSAxCisjZW5kaWYKKy8qIEVuYWJsZSBnZW5lcmFsIGV4dGVuc2lvbnMgb24gTWFjIE9TIFguICAqLworI2lmbmRlZiBfREFSV0lOX0NfU09VUkNFCisjIGRlZmluZSBfREFSV0lOX0NfU09VUkNFIDEKKyNlbmRpZgorLyogRW5hYmxlIEdOVSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBoYXZlIHRoZW0uICAqLworI2lmbmRlZiBfR05VX1NPVVJDRQorIyBkZWZpbmUgX0dOVV9TT1VSQ0UgMQorI2VuZGlmCisvKiBFbmFibGUgdGhyZWFkaW5nIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCisjaWZuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworIyBkZWZpbmUgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTIDEKKyNlbmRpZgorLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gSFAgTm9uU3RvcC4gICovCisjaWZuZGVmIF9UQU5ERU1fU09VUkNFCisjIGRlZmluZSBfVEFOREVNX1NPVVJDRSAxCisjZW5kaWYKKy8qIEVuYWJsZSBnZW5lcmFsIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCisjaWZuZGVmIF9fRVhURU5TSU9OU19fCisjIGRlZmluZSBfX0VYVEVOU0lPTlNfXyAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gcnBsXyBpZiB0aGUgZ2V0b3B0IHJlcGxhY2VtZW50IGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIHNob3VsZCBiZQorICAgdXNlZC4gKi8KKy8qICN1bmRlZiBfX0dFVE9QVF9QUkVGSVggKi8KKworLyogX0dMX0lOTElORSBpcyBhIHBvcnRhYmxlIGFsdGVybmF0aXZlIHRvIElTTyBDOTkgcGxhaW4gJ2lubGluZScuCisgICBfR0xfRVhURVJOX0lOTElORSBpcyBhIHBvcnRhYmxlIGFsdGVybmF0aXZlIHRvICdleHRlcm4gaW5saW5lJy4KKyAgIF9HTF9JTkxJTkVfSEVBREVSX0JFR0lOIGNvbnRhaW5zIHVzZWZ1bCBzdHVmZiB0byBwdXQKKyAgICAgaW4gYW4gaW5jbHVkZSBmaWxlLCBiZWZvcmUgdXNlcyBvZiBfR0xfSU5MSU5FLgorICAgICBJdCBzdXBwcmVzc2VzIEdDQydzIGJvZ3VzICJubyBwcmV2aW91cyBwcm90b3R5cGUgZm9yICdGT08nIiBkaWFnbm9zdGljLAorICAgICB3aGVuIEZPTyBpcyBhbiBpbmxpbmUgZnVuY3Rpb24gaW4gdGhlIGhlYWRlcjsgc2VlCisgICAgIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTU0MTEzPi4KKyAgIF9HTF9JTkxJTkVfSEVBREVSX0VORCBjb250YWlucyB1c2VmdWwgc3R1ZmYgdG8gcHV0CisgICAgIGluIHRoZSBzYW1lIGluY2x1ZGUgZmlsZSwgYWZ0ZXIgdXNlcyBvZiBfR0xfSU5MSU5FLgorCisgICBTdXBwcmVzcyB0aGUgdXNlIG9mIGV4dGVybiBpbmxpbmUgb24gQXBwbGUncyBwbGF0Zm9ybXMsCisgICBhcyBMaWJjLTgyNS4yNSAoMjAxMi0wOS0xOSkgaXMgaW5jb21wYXRpYmxlIHdpdGggaXQ7IHNlZQorICAgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctZ251bGliLzIwMTItMTIvbXNnMDAwMjMuaHRtbD4uCisgICBQZXJoYXBzIEFwcGxlIHdpbGwgZml4IHRoaXMgc29tZSBkYXkuICAqLworI2lmICgoX19HTlVDX18gXAorICAgICAgPyBkZWZpbmVkIF9fR05VQ19TVERDX0lOTElORV9fICYmIF9fR05VQ19TVERDX0lOTElORV9fIFwKKyAgICAgIDogMTk5OTAxTCA8PSBfX1NURENfVkVSU0lPTl9fKSBcCisgICAgICYmICFkZWZpbmVkIF9fQVBQTEVfXykKKyMgZGVmaW5lIF9HTF9JTkxJTkUgaW5saW5lCisjIGRlZmluZSBfR0xfRVhURVJOX0lOTElORSBleHRlcm4gaW5saW5lCisjZWxpZiAyIDwgX19HTlVDX18gKyAoNyA8PSBfX0dOVUNfTUlOT1JfXykgJiYgIWRlZmluZWQgX19BUFBMRV9fCisjIGlmIF9fR05VQ19HTlVfSU5MSU5FX18KKyAgIC8qIF9fZ251X2lubGluZV9fIHN1cHByZXNzZXMgYSBHQ0MgNC4yIGRpYWdub3N0aWMuICAqLworIyAgZGVmaW5lIF9HTF9JTkxJTkUgZXh0ZXJuIGlubGluZSBfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18pKQorIyBlbHNlCisjICBkZWZpbmUgX0dMX0lOTElORSBleHRlcm4gaW5saW5lCisjIGVuZGlmCisjIGRlZmluZSBfR0xfRVhURVJOX0lOTElORSBleHRlcm4KKyNlbHNlCisjIGRlZmluZSBfR0xfSU5MSU5FIHN0YXRpYyBfR0xfVU5VU0VECisjIGRlZmluZSBfR0xfRVhURVJOX0lOTElORSBzdGF0aWMgX0dMX1VOVVNFRAorI2VuZGlmCisKKyNpZiA0IDwgX19HTlVDX18gKyAoNiA8PSBfX0dOVUNfTUlOT1JfXykKKyMgaWYgZGVmaW5lZCBfX0dOVUNfU1REQ19JTkxJTkVfXyAmJiBfX0dOVUNfU1REQ19JTkxJTkVfXworIyAgZGVmaW5lIF9HTF9JTkxJTkVfSEVBREVSX0NPTlNUX1BSQUdNQQorIyBlbHNlCisjICBkZWZpbmUgX0dMX0lOTElORV9IRUFERVJfQ09OU1RfUFJBR01BIFwKKyAgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3N1Z2dlc3QtYXR0cmlidXRlPWNvbnN0XCIiKQorIyBlbmRpZgorIyBkZWZpbmUgX0dMX0lOTElORV9IRUFERVJfQkVHSU4gXAorICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBwdXNoIikgXAorICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdtaXNzaW5nLXByb3RvdHlwZXNcIiIpIFwKKyAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XbWlzc2luZy1kZWNsYXJhdGlvbnNcIiIpIFwKKyAgICBfR0xfSU5MSU5FX0hFQURFUl9DT05TVF9QUkFHTUEKKyMgZGVmaW5lIF9HTF9JTkxJTkVfSEVBREVSX0VORCBcCisgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIHBvcCIpCisjZWxzZQorIyBkZWZpbmUgX0dMX0lOTElORV9IRUFERVJfQkVHSU4KKyMgZGVmaW5lIF9HTF9JTkxJTkVfSEVBREVSX0VORAorI2VuZGlmCisKKy8qIERlZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXNuJ3QgZGVmaW5lLiAqLworLyogI3VuZGVmIGdpZF90ICovCisKKy8qIERlZmluZSB0byBgX19pbmxpbmVfXycgb3IgYF9faW5saW5lJyBpZiB0aGF0J3Mgd2hhdCB0aGUgQyBjb21waWxlcgorICAgY2FsbHMgaXQsIG9yIHRvIG5vdGhpbmcgaWYgJ2lubGluZScgaXMgbm90IHN1cHBvcnRlZCB1bmRlciBhbnkgbmFtZS4gICovCisjaWZuZGVmIF9fY3BsdXNwbHVzCisvKiAjdW5kZWYgaW5saW5lICovCisjZW5kaWYKKworLyogRGVmaW5lIHRvIGxvbmcgb3IgbG9uZyBsb25nIGlmIDxzdGRpbnQuaD4gYW5kIDxpbnR0eXBlcy5oPiBkb24ndCBkZWZpbmUuICovCisvKiAjdW5kZWYgaW50bWF4X3QgKi8KKworLyogV29yayBhcm91bmQgYSBidWcgaW4gQXBwbGUgR0NDIDQuMC4xIGJ1aWxkIDU0NjU6IEluIEM5OSBtb2RlLCBpdCBzdXBwb3J0cworICAgdGhlIElTTyBDIDk5IHNlbWFudGljcyBvZiAnZXh0ZXJuIGlubGluZScgKHVubGlrZSB0aGUgR05VIEMgc2VtYW50aWNzIG9mCisgICBlYXJsaWVyIHZlcnNpb25zKSwgYnV0IGRvZXMgbm90IGRpc3BsYXkgaXQgYnkgc2V0dGluZyBfX0dOVUNfU1REQ19JTkxJTkVfXy4KKyAgIF9fQVBQTEVfXyAmJiBfX01BQ0hfXyB0ZXN0IGZvciBNYWMgT1MgWC4KKyAgIF9fQVBQTEVfQ0NfXyB0ZXN0cyBmb3IgdGhlIEFwcGxlIGNvbXBpbGVyIGFuZCBpdHMgdmVyc2lvbi4KKyAgIF9fU1REQ19WRVJTSU9OX18gdGVzdHMgZm9yIHRoZSBDOTkgbW9kZS4gICovCisjaWYgZGVmaW5lZCBfX0FQUExFX18gJiYgZGVmaW5lZCBfX01BQ0hfXyAmJiBfX0FQUExFX0NDX18gPj0gNTQ2NSAmJiAhZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwgJiYgIWRlZmluZWQgX19HTlVDX1NURENfSU5MSU5FX18KKyMgZGVmaW5lIF9fR05VQ19TVERDX0lOTElORV9fIDEKKyNlbmRpZgorCisvKiBEZWZpbmUgdG8gYSB0eXBlIGlmIDx3Y2hhci5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisvKiAjdW5kZWYgbWJzdGF0ZV90ICovCisKKy8qIERlZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KKy8qICN1bmRlZiBtb2RlX3QgKi8KKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIHN0X25saW5rIGluIHN0cnVjdCBzdGF0LCBvciBhIHN1cGVydHlwZS4gKi8KKy8qICN1bmRlZiBubGlua190ICovCisKKy8qIERlZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KKy8qICN1bmRlZiBwaWRfdCAqLworCisvKiBEZWZpbmUgYXMgdGhlIHR5cGUgb2YgdGhlIHJlc3VsdCBvZiBzdWJ0cmFjdGluZyB0d28gcG9pbnRlcnMsIGlmIHRoZSBzeXN0ZW0KKyAgIGRvZXNuJ3QgZGVmaW5lIGl0LiAqLworLyogI3VuZGVmIHB0cmRpZmZfdCAqLworCisvKiBEZWZpbmUgdG8gdGhlIGVxdWl2YWxlbnQgb2YgdGhlIEM5OSAncmVzdHJpY3QnIGtleXdvcmQsIG9yIHRvCisgICBub3RoaW5nIGlmIHRoaXMgaXMgbm90IHN1cHBvcnRlZC4gIERvIG5vdCBkZWZpbmUgaWYgcmVzdHJpY3QgaXMKKyAgIHN1cHBvcnRlZCBkaXJlY3RseS4gICovCisjZGVmaW5lIHJlc3RyaWN0IF9fcmVzdHJpY3QKKy8qIFdvcmsgYXJvdW5kIGEgYnVnIGluIFN1biBDKys6IGl0IGRvZXMgbm90IHN1cHBvcnQgX1Jlc3RyaWN0IG9yCisgICBfX3Jlc3RyaWN0X18sIGV2ZW4gdGhvdWdoIHRoZSBjb3JyZXNwb25kaW5nIFN1biBDIGNvbXBpbGVyIGVuZHMgdXAgd2l0aAorICAgIiNkZWZpbmUgcmVzdHJpY3QgX1Jlc3RyaWN0IiBvciAiI2RlZmluZSByZXN0cmljdCBfX3Jlc3RyaWN0X18iIGluIHRoZQorICAgcHJldmlvdXMgbGluZS4gIFBlcmhhcHMgc29tZSBmdXR1cmUgdmVyc2lvbiBvZiBTdW4gQysrIHdpbGwgd29yayB3aXRoCisgICByZXN0cmljdDsgaWYgc28sIGhvcGVmdWxseSBpdCBkZWZpbmVzIF9fUkVTVFJJQ1QgbGlrZSBTdW4gQyBkb2VzLiAgKi8KKyNpZiBkZWZpbmVkIF9fU1VOUFJPX0NDICYmICFkZWZpbmVkIF9fUkVTVFJJQ1QKKyMgZGVmaW5lIF9SZXN0cmljdAorIyBkZWZpbmUgX19yZXN0cmljdF9fCisjZW5kaWYKKworLyogRGVmaW5lIGFzIGFuIGludGVnZXIgdHlwZSBzdWl0YWJsZSBmb3IgbWVtb3J5IGxvY2F0aW9ucyB0aGF0IGNhbiBiZQorICAgYWNjZXNzZWQgYXRvbWljYWxseSBldmVuIGluIHRoZSBwcmVzZW5jZSBvZiBhc3luY2hyb25vdXMgc2lnbmFscy4gKi8KKy8qICN1bmRlZiBzaWdfYXRvbWljX3QgKi8KKworLyogRGVmaW5lIHRvIGB1bnNpZ25lZCBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworLyogI3VuZGVmIHNpemVfdCAqLworCisvKiBEZWZpbmUgYXMgYSBzaWduZWQgdHlwZSBvZiB0aGUgc2FtZSBzaXplIGFzIHNpemVfdC4gKi8KKy8qICN1bmRlZiBzc2l6ZV90ICovCisKKy8qIERlZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXNuJ3QgZGVmaW5lLiAqLworLyogI3VuZGVmIHVpZF90ICovCisKKy8qIERlZmluZSBhcyBhIG1hcmtlciB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBkZWNsYXJhdGlvbnMgdGhhdCBtaWdodCBub3QKKyAgICBiZSB1c2VkLiAgVGhpcyBoZWxwcyB0byByZWR1Y2Ugd2FybmluZ3MsIHN1Y2ggYXMgZnJvbQorICAgIEdDQyAtV3VudXNlZC1wYXJhbWV0ZXIuICAqLworI2lmIF9fR05VQ19fID49IDMgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gNykKKyMgZGVmaW5lIF9HTF9VTlVTRUQgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9VTlVTRUQKKyNlbmRpZgorLyogVGhlIG5hbWUgX1VOVVNFRF9QQVJBTUVURVJfIGlzIGFuIGVhcmxpZXIgc3BlbGxpbmcsIGFsdGhvdWdoIHRoZSBuYW1lCisgICBpcyBhIG1pc25vbWVyIG91dHNpZGUgb2YgcGFyYW1ldGVyIGxpc3RzLiAgKi8KKyNkZWZpbmUgX1VOVVNFRF9QQVJBTUVURVJfIF9HTF9VTlVTRUQKKworLyogVGhlIF9fcHVyZV9fIGF0dHJpYnV0ZSB3YXMgYWRkZWQgaW4gZ2NjIDIuOTYuICAqLworI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NikKKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfUFVSRSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfUFVSRSAvKiBlbXB0eSAqLworI2VuZGlmCisKKy8qIFRoZSBfX2NvbnN0X18gYXR0cmlidXRlIHdhcyBhZGRlZCBpbiBnY2MgMi45NS4gICovCisjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk1KQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9DT05TVCBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSkKKyNlbHNlCisjIGRlZmluZSBfR0xfQVRUUklCVVRFX0NPTlNUIC8qIGVtcHR5ICovCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGludXgtbGliL2NvbmZpZ21ha2UuaCBiL2xpbnV4LWxpYi9jb25maWdtYWtlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEzMjkzMQotLS0gL2Rldi9udWxsCisrKyBiL2xpbnV4LWxpYi9jb25maWdtYWtlLmgKQEAgLTAsMCArMSwyOCBAQAorLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLworI2RlZmluZSBQUkVGSVggIi91c3IvbG9jYWwiCisjZGVmaW5lIEVYRUNfUFJFRklYICIvdXNyL2xvY2FsIgorI2RlZmluZSBCSU5ESVIgIi91c3IvbG9jYWwvYmluIgorI2RlZmluZSBTQklORElSICIvdXNyL2xvY2FsL3NiaW4iCisjZGVmaW5lIExJQkVYRUNESVIgIi91c3IvbG9jYWwvbGliZXhlYyIKKyNkZWZpbmUgREFUQVJPT1RESVIgIi91c3IvbG9jYWwvc2hhcmUiCisjZGVmaW5lIERBVEFESVIgIi91c3IvbG9jYWwvc2hhcmUiCisjZGVmaW5lIFNZU0NPTkZESVIgIi91c3IvbG9jYWwvZXRjIgorI2RlZmluZSBTSEFSRURTVEFURURJUiAiL3Vzci9sb2NhbC9jb20iCisjZGVmaW5lIExPQ0FMU1RBVEVESVIgIi91c3IvbG9jYWwvdmFyIgorI2RlZmluZSBJTkNMVURFRElSICIvdXNyL2xvY2FsL2luY2x1ZGUiCisjZGVmaW5lIE9MRElOQ0xVREVESVIgIi91c3IvaW5jbHVkZSIKKyNkZWZpbmUgRE9DRElSICIvdXNyL2xvY2FsL3NoYXJlL2RvYy9iaXNvbiIKKyNkZWZpbmUgSU5GT0RJUiAiL3Vzci9sb2NhbC9zaGFyZS9pbmZvIgorI2RlZmluZSBIVE1MRElSICIvdXNyL2xvY2FsL3NoYXJlL2RvYy9iaXNvbiIKKyNkZWZpbmUgRFZJRElSICIvdXNyL2xvY2FsL3NoYXJlL2RvYy9iaXNvbiIKKyNkZWZpbmUgUERGRElSICIvdXNyL2xvY2FsL3NoYXJlL2RvYy9iaXNvbiIKKyNkZWZpbmUgUFNESVIgIi91c3IvbG9jYWwvc2hhcmUvZG9jL2Jpc29uIgorI2RlZmluZSBMSUJESVIgIi91c3IvbG9jYWwvbGliIgorI2RlZmluZSBMSVNQRElSICIvdXNyL2xvY2FsL3NoYXJlL2VtYWNzL3NpdGUtbGlzcCIKKyNkZWZpbmUgTE9DQUxFRElSICIvdXNyL2xvY2FsL3NoYXJlL2xvY2FsZSIKKyNkZWZpbmUgTUFORElSICIvdXNyL2xvY2FsL3NoYXJlL21hbiIKKy8vIFBLR0RBVEFESVIgaXMgbm93IHBhc3NlZCBpbiBmcm9tIHRoZSBidWlsZCBzeXN0ZW0uCisvLyNkZWZpbmUgUEtHREFUQURJUiAiL3Vzci9sb2NhbC9zaGFyZS9iaXNvbiIKKyNkZWZpbmUgUEtHSU5DTFVERURJUiAiL3Vzci9sb2NhbC9pbmNsdWRlL2Jpc29uIgorI2RlZmluZSBQS0dMSUJESVIgIi91c3IvbG9jYWwvbGliL2Jpc29uIgorI2RlZmluZSBQS0dMSUJFWEVDRElSICIvdXNyL2xvY2FsL2xpYmV4ZWMvYmlzb24iCmRpZmYgLS1naXQgYS9saW51eC1saWIvZmNudGwuaCBiL2xpbnV4LWxpYi9mY250bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MTllZWQKLS0tIC9kZXYvbnVsbAorKysgYi9saW51eC1saWIvZmNudGwuaApAQCAtMCwwICsxLDY1OSBAQAorLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLworLyogTGlrZSA8ZmNudGwuaD4sIGJ1dCB3aXRoIG5vbi13b3JraW5nIGZsYWdzIGRlZmluZWQgdG8gMC4KKworICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIHdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQgKi8KKworI2lmIF9fR05VQ19fID49IDMKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkIF9fbmVlZF9zeXN0ZW1fZmNudGxfaAorLyogU3BlY2lhbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24uICAqLworCisvKiBOZWVkZWQgYmVmb3JlIDxzeXMvc3RhdC5oPi4KKyAgIE1heSBhbHNvIGRlZmluZSBvZmZfdCB0byBhIDY0LWJpdCB0eXBlIG9uIG5hdGl2ZSBXaW5kb3dzLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy8qIE9uIHNvbWUgc3lzdGVtcyBvdGhlciB0aGFuIGdsaWJjLCA8c3lzL3N0YXQuaD4gaXMgYSBwcmVyZXF1aXNpdGUgb2YKKyAgIDxmY250bC5oPi4gIE9uIGdsaWJjIHN5c3RlbXMsIHdlIHdvdWxkIGxpa2UgdG8gYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbi4KKyAgIEJ1dCBvbiBnbGliYyBzeXN0ZW1zLCA8ZmNudGwuaD4gaW5jbHVkZXMgPHN5cy9zdGF0Lmg+IGluc2lkZSBhbgorICAgZXh0ZXJuICJDIiB7IC4uLiB9IGJsb2NrLCB3aGljaCBsZWFkcyB0byBlcnJvcnMgaW4gQysrIG1vZGUgd2l0aCB0aGUKKyAgIG92ZXJyaWRkZW4gPHN5cy9zdGF0Lmg+IGZyb20gZ251bGliLiAgVGhlc2UgZXJyb3JzIGFyZSBrbm93biB0byBiZSBnb25lCisgICB3aXRoIGcrKyB2ZXJzaW9uID49IDQuMy4gICovCisjaWYgIShkZWZpbmVkIF9fR0xJQkNfXyB8fCBkZWZpbmVkIF9fVUNMSUJDX18pIHx8IChkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSAmJiAhKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSkpCisjIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpbmNsdWRlX25leHQgPGZjbnRsLmg+CisKKyNlbHNlCisvKiBOb3JtYWwgaW52b2NhdGlvbiBjb252ZW50aW9uLiAgKi8KKworI2lmbmRlZiBfR0xfRkNOVExfSAorCisvKiBOZWVkZWQgYmVmb3JlIDxzeXMvc3RhdC5oPi4KKyAgIE1heSBhbHNvIGRlZmluZSBvZmZfdCB0byBhIDY0LWJpdCB0eXBlIG9uIG5hdGl2ZSBXaW5kb3dzLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy8qIE9uIHNvbWUgc3lzdGVtcyBvdGhlciB0aGFuIGdsaWJjLCA8c3lzL3N0YXQuaD4gaXMgYSBwcmVyZXF1aXNpdGUgb2YKKyAgIDxmY250bC5oPi4gIE9uIGdsaWJjIHN5c3RlbXMsIHdlIHdvdWxkIGxpa2UgdG8gYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbi4KKyAgIEJ1dCBvbiBnbGliYyBzeXN0ZW1zLCA8ZmNudGwuaD4gaW5jbHVkZXMgPHN5cy9zdGF0Lmg+IGluc2lkZSBhbgorICAgZXh0ZXJuICJDIiB7IC4uLiB9IGJsb2NrLCB3aGljaCBsZWFkcyB0byBlcnJvcnMgaW4gQysrIG1vZGUgd2l0aCB0aGUKKyAgIG92ZXJyaWRkZW4gPHN5cy9zdGF0Lmg+IGZyb20gZ251bGliLiAgVGhlc2UgZXJyb3JzIGFyZSBrbm93biB0byBiZSBnb25lCisgICB3aXRoIGcrKyB2ZXJzaW9uID49IDQuMy4gICovCisjaWYgIShkZWZpbmVkIF9fR0xJQkNfXyB8fCBkZWZpbmVkIF9fVUNMSUJDX18pIHx8IChkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSAmJiAhKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSkpCisjIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKy8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyNpbmNsdWRlX25leHQgPGZjbnRsLmg+CisKKyNpZm5kZWYgX0dMX0ZDTlRMX0gKKyNkZWZpbmUgX0dMX0ZDTlRMX0gKKworI2lmbmRlZiBfX0dMSUJDX18gLyogQXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zLiAgKi8KKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworLyogTmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zIGRlY2xhcmUgb3BlbigpLCBjcmVhdCgpIGluIDxpby5oPi4gICovCisjaWYgKDEgfHwgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSykgXAorICAgICYmICgoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fKQorIyBpbmNsdWRlIDxpby5oPgorI2VuZGlmCisKKworLyogVGhlIGRlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwgZXRjLiBhcmUgY29waWVkIGhlcmUuICAqLworI2lmbmRlZiBfR0xfQ1hYREVGU19ICisjZGVmaW5lIF9HTF9DWFhERUZTX0gKKworLyogVGhlIHRocmVlIG1vc3QgZnJlcXVlbnQgdXNlIGNhc2VzIG9mIHRoZXNlIG1hY3JvcyBhcmU6CisKKyAgICogRm9yIHByb3ZpZGluZyBhIHN1YnN0aXR1dGUgZm9yIGEgZnVuY3Rpb24gdGhhdCBpcyBtaXNzaW5nIG9uIHNvbWUKKyAgICAgcGxhdGZvcm1zLCBidXQgaXMgZGVjbGFyZWQgYW5kIHdvcmtzIGZpbmUgb24gdGhlIHBsYXRmb3JtcyBvbiB3aGljaAorICAgICBpdCBleGlzdHM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiAhQEhBVkVfRk9PQAorICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorCisgICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBhbGwgcGxhdGZvcm1zLAorICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBwbGF0Zm9ybXM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACisgICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyAgICAgICAjICAgdW5kZWYgZm9vCisgICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKyAgICAgICAjIGVsc2UKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorCisgICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBzb21lIHBsYXRmb3JtcworICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBvZiB0aGVtIGFuZAorICAgICBpcyBhZGRpdGlvbmFsbHkgZWl0aGVyIG1pc3Npbmcgb3IgdW5kZWNsYXJlZCBvbiBzb21lIG90aGVyIHBsYXRmb3JtczoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorICAgICAgICMgICB1bmRlZiBmb28KKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworICAgICAgICMgZWxzZQorICAgICAgICMgIGlmICFASEFWRV9GT09AICAgb3IgICBpZiAhQEhBVkVfREVDTF9GT09ACisgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKyovCisKKy8qIF9HTF9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cworIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybiAiQyIKKyNlbHNlCisjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuCisjZW5kaWYKKworLyogX0dMX0ZVTkNERUNMX1JQTCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBkZWNsYXJlcyBhIHJlcGxhY2VtZW50IGZ1bmN0aW9uLCBuYW1lZCBycGxfZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCisgICBFeGFtcGxlOgorICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyAqLworI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9GVU5DREVDTF9SUExfMSAocnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykKKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1JQTF8xKHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICBfR0xfRVhURVJOX0MgcmV0dHlwZSBycGxfZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisKKy8qIF9HTF9GVU5DREVDTF9TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgZGVjbGFyZXMgdGhlIHN5c3RlbSBmdW5jdGlvbiwgbmFtZWQgZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCisgICBFeGFtcGxlOgorICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyAqLworI2RlZmluZSBfR0xfRlVOQ0RFQ0xfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9FWFRFUk5fQyByZXR0eXBlIGZ1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworCisvKiBfR0xfQ1hYQUxJQVNfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCisgICB0aGF0IHJlZGlyZWN0cyB0byBycGxfZnVuYywgaWYgR05VTElCX05BTUVTUEFDRSBpcyBkZWZpbmVkLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0NYWEFMSUFTX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CisgKi8KKyNkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpycGxfZnVuYzsgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xIChmdW5jLCBycGxfZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIHJwbF9mdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50CisgICBkZWNsYXJhdGlvbi4gIEEgY2FzdCBpcyB1c2VkIHRvIHNpbGVuY2UgdGhlICJpbnZhbGlkIGNvbnZlcnNpb24iIGVycm9yCisgICB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6cnBsX2Z1bmMpOyAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCisgICB0aGF0IHJlZGlyZWN0cyB0byB0aGUgc3lzdGVtIHByb3ZpZGVkIGZ1bmN0aW9uIGZ1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UKKyAgIGlzIGRlZmluZWQuCisgICBFeGFtcGxlOgorICAgICBfR0xfQ1hYQUxJQVNfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKyAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisgIC8qIElmIHdlIHdlcmUgdG8gd3JpdGUKKyAgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsKKyAgICAgbGlrZSBhYm92ZSBpbiBfR0xfQ1hYQUxJQVNfUlBMXzEsIHRoZSBjb21waWxlciBjb3VsZCBvcHRpbWl6ZSBjYWxscworICAgICBiZXR0ZXIgKHJlbW92ZSBhbiBpbmRpcmVjdGlvbiB0aHJvdWdoIGEgJ3N0YXRpYycgcG9pbnRlciB2YXJpYWJsZSksCisgICAgIGJ1dCB0aGVuIHRoZSBfR0xfQ1hYQUxJQVNXQVJOIG1hY3JvIGJlbG93IHdvdWxkIGNhdXNlIGEgd2FybmluZyBub3Qgb25seQorICAgICBmb3IgdXNlcyBvZiA6OmZ1bmMgYnV0IGFsc28gZm9yIHVzZXMgb2YgR05VTElCX05BTUVTUEFDRTo6ZnVuYy4gICovCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7ICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBmdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGRlY2xhcmF0aW9uLgorICAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IgdGhhdCB3b3VsZAorICAgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6ZnVuYyk7IFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzLCByZXR0eXBlMiwgcGFyYW1ldGVyczIpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBpcyBwaWNrZWQgYW1vbmcgYSBzZXQgb2Ygb3ZlcmxvYWRlZCBmdW5jdGlvbnMsCisgICBuYW1lbHkgdGhlIG9uZSB3aXRoIHJldHR5cGUyIGFuZCBwYXJhbWV0ZXJzMi4gIFR3byBjb25zZWN1dGl2ZSBjYXN0cworICAgYXJlIHVzZWQgdG8gc2lsZW5jZSB0aGUgImNhbm5vdCBmaW5kIGEgbWF0Y2giIGFuZCAiaW52YWxpZCBjb252ZXJzaW9uIgorICAgZXJyb3JzIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorICAvKiBUaGUgb3V0ZXIgY2FzdCBtdXN0IGJlIGEgcmVpbnRlcnByZXRfY2FzdC4KKyAgICAgVGhlIGlubmVyIGNhc3Q6IFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzZXQgb2Ygb3ZlcmxvYWRlZAorICAgICBmdW5jdGlvbnMsIGl0IHdvcmtzIGFzIGEgc3RhdGljX2Nhc3Q8PiwgY2hvb3NpbmcgdGhlIGRlc2lnbmF0ZWQgdmFyaWFudC4KKyAgICAgV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNpbmdsZSB2YXJpYW50LCBpdCB3b3JrcyBhcyBhCisgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Pi4gVGhlIHBhcmVudGhlc2l6ZWQgY2FzdCBzeW50YXggd29ya3MgYm90aCB3YXlzLiAgKi8KKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAocmV0dHlwZTIoKilwYXJhbWV0ZXJzMikoOjpmdW5jKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU1dBUk4gKGZ1bmMpOworICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gOjpmdW5jIGlzIHVzZWQgYnV0IG5vdCB3aGVuCisgICBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICBmdW5jIG11c3QgYmUgZGVmaW5lZCB3aXRob3V0IG92ZXJsb2FkZWQKKyAgIHZhcmlhbnRzLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOXzEgKGZ1bmMsIEdOVUxJQl9OQU1FU1BBQ0UpCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzEoZnVuYyxuYW1lc3BhY2UpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk5fMiAoZnVuYywgbmFtZXNwYWNlKQorLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKyMgaWYgIV9fT1BUSU1JWkVfXworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgIF9HTF9XQVJOX09OX1VTRSAoZnVuYywgXAorICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAorICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKyAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTV0FSTjEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gdGhlIGdpdmVuIG92ZXJsb2FkZWQgdmFyaWFudCBvZiA6OmZ1bmMKKyAgIGlzIHVzZWQgYnV0IG5vdCB3aGVuIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOMV8xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBHTlVMSUJfTkFNRVNQQUNFKQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk4xXzIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIG5hbWVzcGFjZSkKKy8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAorICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCisjIGlmICFfX09QVElNSVpFX18KKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworIyBlbHNlCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworI2VuZGlmIC8qIF9HTF9DWFhERUZTX0ggKi8KKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxMIGlzIGNvcGllZCBoZXJlLiAgKi8KKy8qIF9HTF9BUkdfTk9OTlVMTCgobiwuLi4sbSkpIHRlbGxzIHRoZSBjb21waWxlciBhbmQgc3RhdGljIGFuYWx5emVyIHRvb2xzCisgICB0aGF0IHRoZSB2YWx1ZXMgcGFzc2VkIGFzIGFyZ3VtZW50cyBuLCAuLi4sIG0gbXVzdCBiZSBub24tTlVMTCBwb2ludGVycy4KKyAgIG4gPSAxIHN0YW5kcyBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50LCBuID0gMiBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCBldGMuICAqLworI2lmbmRlZiBfR0xfQVJHX05PTk5VTEwKKyMgaWYgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gMykgfHwgX19HTlVDX18gPiAzCisjICBkZWZpbmUgX0dMX0FSR19OT05OVUxMKHBhcmFtcykgX19hdHRyaWJ1dGVfXyAoKF9fbm9ubnVsbF9fIHBhcmFtcykpCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKQorIyBlbmRpZgorI2VuZGlmCisKKy8qIFRoZSBkZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRSBpcyBjb3BpZWQgaGVyZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX09OX1VTRQorCisjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorLyogQSBjb21waWxlciBhdHRyaWJ1dGUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyA0LjMuMCBhbmQgbGF0ZXIuICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmN0aW9uKSBmdW5jdGlvbiBfX2F0dHJpYnV0ZV9fICgoX193YXJuaW5nX18gKG1lc3NhZ2UpKSkKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKy8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uCisjIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorX0dMX1dBUk5fRVhURVJOX0MgaW50IF9nbF93YXJuX29uX3VzZQorIyBlbmRpZgorI2VuZGlmCisKKy8qIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmN0aW9uLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCAic3RyaW5nIikKKyAgIGlzIGxpa2UgX0dMX1dBUk5fT05fVVNFIChmdW5jdGlvbiwgInN0cmluZyIpLCBleGNlcHQgdGhhdCB0aGUgZnVuY3Rpb24gaXMKKyAgIGRlY2xhcmVkIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywKKyAgIGFuZCBhdHRyaWJ1dGVzLgorICAgVGhpcyB2YXJpYW50IGlzIHVzZWZ1bCBmb3Igb3ZlcmxvYWRlZCBmdW5jdGlvbnMgaW4gQysrLiBfR0xfV0FSTl9PTl9VU0UgZG9lcworICAgbm90IHdvcmsgaW4gdGhpcyBjYXNlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFX0NYWAorIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK2V4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMgXAorICAgICBfX2F0dHJpYnV0ZV9fICgoX193YXJuaW5nX18gKG1zZykpKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK2V4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCitfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisjIGVuZGlmCisjZW5kaWYKKworLyogX0dMX1dBUk5fRVhURVJOX0MgZGVjbGFyYXRpb247CisgICBwZXJmb3JtcyB0aGUgZGVjbGFyYXRpb24gd2l0aCBDIGxpbmthZ2UuICAqLworI2lmbmRlZiBfR0xfV0FSTl9FWFRFUk5fQworIyBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisjICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuICJDIgorIyBlbHNlCisjICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBEZWNsYXJlIG92ZXJyaWRkZW4gZnVuY3Rpb25zLiAgKi8KKworI2lmIDEKKyMgaWYgMQorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmY250bAorIyAgIGRlZmluZSBmY250bCBycGxfZmNudGwKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmY250bCwgaW50LCAoaW50IGZkLCBpbnQgYWN0aW9uLCAuLi4pKTsKK19HTF9DWFhBTElBU19SUEwgKGZjbnRsLCBpbnQsIChpbnQgZmQsIGludCBhY3Rpb24sIC4uLikpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoZmNudGwsIGludCwgKGludCBmZCwgaW50IGFjdGlvbiwgLi4uKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZmNudGwsIGludCwgKGludCBmZCwgaW50IGFjdGlvbiwgLi4uKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmY250bCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZjbnRsCisjIGlmIEhBVkVfUkFXX0RFQ0xfRkNOVEwKK19HTF9XQVJOX09OX1VTRSAoZmNudGwsICJmY250bCBpcyBub3QgYWx3YXlzIFBPU0lYIGNvbXBsaWFudCAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZjbnRsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAxCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgb3BlbgorIyAgIGRlZmluZSBvcGVuIHJwbF9vcGVuCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworIyBlbmRpZgorLyogT24gSFAtVVggMTEsIGluIEMrKyBtb2RlLCBvcGVuKCkgaXMgZGVmaW5lZCBhcyBhbiBpbmxpbmUgZnVuY3Rpb24gd2l0aCBhCisgICBkZWZhdWx0IGFyZ3VtZW50LiAgX0dMX0NYWEFMSUFTV0FSTiBkb2VzIG5vdCB3b3JrIGluIHRoaXMgY2FzZS4gICovCisjIGlmICFkZWZpbmVkIF9faHB1eAorX0dMX0NYWEFMSUFTV0FSTiAob3Blbik7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG9wZW4KKy8qIEFzc3VtZSBvcGVuIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKG9wZW4sICJvcGVuIGlzIG5vdCBhbHdheXMgUE9TSVggY29tcGxpYW50IC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgb3BlbiBmb3IgcG9ydGFiaWxpdHkiKTsKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIG9wZW5hdAorIyAgIGRlZmluZSBvcGVuYXQgcnBsX29wZW5hdAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG9wZW5hdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgaW50IGZsYWdzLCAvKiBtb2RlX3QgbW9kZSAqLyAuLi4pCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAob3BlbmF0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlLCBpbnQgZmxhZ3MsIC8qIG1vZGVfdCBtb2RlICovIC4uLikpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAob3BlbmF0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlLCBpbnQgZmxhZ3MsIC8qIG1vZGVfdCBtb2RlICovIC4uLikKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAob3BlbmF0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlLCBpbnQgZmxhZ3MsIC8qIG1vZGVfdCBtb2RlICovIC4uLikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAob3BlbmF0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgb3BlbmF0CisjIGlmIEhBVkVfUkFXX0RFQ0xfT1BFTkFUCitfR0xfV0FSTl9PTl9VU0UgKG9wZW5hdCwgIm9wZW5hdCBpcyBub3QgcG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBvcGVuYXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBGaXggdXAgdGhlIEZEXyogbWFjcm9zLCBvbmx5IGtub3duIHRvIGJlIG1pc3Npbmcgb24gbWluZ3cuICAqLworCisjaWZuZGVmIEZEX0NMT0VYRUMKKyMgZGVmaW5lIEZEX0NMT0VYRUMgMQorI2VuZGlmCisKKy8qIEZpeCB1cCB0aGUgc3VwcG9ydGVkIEZfKiBtYWNyb3MuICBJbnRlbnRpb25hbGx5IGxlYXZlIG90aGVyIEZfKgorICAgbWFjcm9zIHVuZGVmaW5lZC4gIE9ubHkga25vd24gdG8gYmUgbWlzc2luZyBvbiBtaW5ndy4gICovCisKKyNpZm5kZWYgRl9EVVBGRF9DTE9FWEVDCisjIGRlZmluZSBGX0RVUEZEX0NMT0VYRUMgMHg0MDAwMDAwMAorLyogV2l0bmVzcyB2YXJpYWJsZTogMSBpZiBnbnVsaWIgZGVmaW5lZCBGX0RVUEZEX0NMT0VYRUMsIDAgb3RoZXJ3aXNlLiAgKi8KKyMgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0ZfRFVQRkRfQ0xPRVhFQyAxCisjZWxzZQorIyBkZWZpbmUgR05VTElCX2RlZmluZWRfRl9EVVBGRF9DTE9FWEVDIDAKKyNlbmRpZgorCisjaWZuZGVmIEZfRFVQRkQKKyMgZGVmaW5lIEZfRFVQRkQgMQorI2VuZGlmCisKKyNpZm5kZWYgRl9HRVRGRAorIyBkZWZpbmUgRl9HRVRGRCAyCisjZW5kaWYKKworLyogRml4IHVwIHRoZSBPXyogbWFjcm9zLiAgKi8KKworI2lmICFkZWZpbmVkIE9fRElSRUNUICYmIGRlZmluZWQgT19ESVJFQ1RJTworLyogVHJ1NjQgc3BlbGxzIGl0ICdPX0RJUkVDVElPJy4gICovCisjIGRlZmluZSBPX0RJUkVDVCBPX0RJUkVDVElPCisjZW5kaWYKKworI2lmICFkZWZpbmVkIE9fQ0xPRVhFQyAmJiBkZWZpbmVkIE9fTk9JTkhFUklUCisvKiBNaW5ndyBzcGVsbHMgaXQgJ09fTk9JTkhFUklUJy4gICovCisjIGRlZmluZSBPX0NMT0VYRUMgT19OT0lOSEVSSVQKKyNlbmRpZgorCisjaWZuZGVmIE9fQ0xPRVhFQworIyBkZWZpbmUgT19DTE9FWEVDIDAKKyNlbmRpZgorCisjaWZuZGVmIE9fRElSRUNUCisjIGRlZmluZSBPX0RJUkVDVCAwCisjZW5kaWYKKworI2lmbmRlZiBPX0RJUkVDVE9SWQorIyBkZWZpbmUgT19ESVJFQ1RPUlkgMAorI2VuZGlmCisKKyNpZm5kZWYgT19EU1lOQworIyBkZWZpbmUgT19EU1lOQyAwCisjZW5kaWYKKworI2lmbmRlZiBPX0VYRUMKKyMgZGVmaW5lIE9fRVhFQyBPX1JET05MWSAvKiBUaGlzIGlzIG9mdGVuIGNsb3NlIGVub3VnaCBpbiBvbGRlciBzeXN0ZW1zLiAgKi8KKyNlbmRpZgorCisjaWZuZGVmIE9fSUdOT1JFX0NUVFkKKyMgZGVmaW5lIE9fSUdOT1JFX0NUVFkgMAorI2VuZGlmCisKKyNpZm5kZWYgT19OREVMQVkKKyMgZGVmaW5lIE9fTkRFTEFZIDAKKyNlbmRpZgorCisjaWZuZGVmIE9fTk9BVElNRQorIyBkZWZpbmUgT19OT0FUSU1FIDAKKyNlbmRpZgorCisjaWZuZGVmIE9fTk9OQkxPQ0sKKyMgZGVmaW5lIE9fTk9OQkxPQ0sgT19OREVMQVkKKyNlbmRpZgorCisvKiBJZiB0aGUgZ251bGliIG1vZHVsZSAnbm9uYmxvY2tpbmcnIGlzIGluIHVzZSwgZ3VhcmFudGVlIGEgd29ya2luZyBub24temVybworICAgdmFsdWUgb2YgT19OT05CTE9DSy4gIE90aGVyd2lzZSwgT19OT05CTE9DSyBpcyBkZWZpbmVkIChhYm92ZSkgdG8gT19OREVMQVkKKyAgIG9yIHRvIDAgYXMgZmFsbGJhY2suICAqLworI2lmIDAKKyMgaWYgT19OT05CTE9DSworIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX09fTk9OQkxPQ0sgMAorIyBlbHNlCisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfT19OT05CTE9DSyAxCisjICB1bmRlZiBPX05PTkJMT0NLCisjICBkZWZpbmUgT19OT05CTE9DSyAweDQwMDAwMDAwCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBPX05PQ1RUWQorIyBkZWZpbmUgT19OT0NUVFkgMAorI2VuZGlmCisKKyNpZm5kZWYgT19OT0ZPTExPVworIyBkZWZpbmUgT19OT0ZPTExPVyAwCisjZW5kaWYKKworI2lmbmRlZiBPX05PTElOSworIyBkZWZpbmUgT19OT0xJTksgMAorI2VuZGlmCisKKyNpZm5kZWYgT19OT0xJTktTCisjIGRlZmluZSBPX05PTElOS1MgMAorI2VuZGlmCisKKyNpZm5kZWYgT19OT1RSQU5TCisjIGRlZmluZSBPX05PVFJBTlMgMAorI2VuZGlmCisKKyNpZm5kZWYgT19SU1lOQworIyBkZWZpbmUgT19SU1lOQyAwCisjZW5kaWYKKworI2lmbmRlZiBPX1NFQVJDSAorIyBkZWZpbmUgT19TRUFSQ0ggT19SRE9OTFkgLyogVGhpcyBpcyBvZnRlbiBjbG9zZSBlbm91Z2ggaW4gb2xkZXIgc3lzdGVtcy4gICovCisjZW5kaWYKKworI2lmbmRlZiBPX1NZTkMKKyMgZGVmaW5lIE9fU1lOQyAwCisjZW5kaWYKKworI2lmbmRlZiBPX1RUWV9JTklUCisjIGRlZmluZSBPX1RUWV9JTklUIDAKKyNlbmRpZgorCisjaWYgfk9fQUNDTU9ERSAmIChPX1JET05MWSB8IE9fV1JPTkxZIHwgT19SRFdSIHwgT19FWEVDIHwgT19TRUFSQ0gpCisjIHVuZGVmIE9fQUNDTU9ERQorIyBkZWZpbmUgT19BQ0NNT0RFIChPX1JET05MWSB8IE9fV1JPTkxZIHwgT19SRFdSIHwgT19FWEVDIHwgT19TRUFSQ0gpCisjZW5kaWYKKworLyogRm9yIHN5c3RlbXMgdGhhdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRleHQgYW5kIGJpbmFyeSBJL08uCisgICBPX0JJTkFSWSBpcyB1c3VhbGx5IGRlY2xhcmVkIGluIGZjbnRsLmggICovCisjaWYgIWRlZmluZWQgT19CSU5BUlkgJiYgZGVmaW5lZCBfT19CSU5BUlkKKyAgLyogRm9yIE1TQy1jb21wYXRpYmxlIGNvbXBpbGVycy4gICovCisjIGRlZmluZSBPX0JJTkFSWSBfT19CSU5BUlkKKyMgZGVmaW5lIE9fVEVYVCBfT19URVhUCisjZW5kaWYKKworI2lmIGRlZmluZWQgX19CRU9TX18gfHwgZGVmaW5lZCBfX0hBSUtVX18KKyAgLyogQmVPUyA1IGFuZCBIYWlrdSBoYXZlIE9fQklOQVJZIGFuZCBPX1RFWFQsIGJ1dCB0aGV5IGhhdmUgbm8gZWZmZWN0LiAgKi8KKyMgdW5kZWYgT19CSU5BUlkKKyMgdW5kZWYgT19URVhUCisjZW5kaWYKKworI2lmbmRlZiBPX0JJTkFSWQorIyBkZWZpbmUgT19CSU5BUlkgMAorIyBkZWZpbmUgT19URVhUIDAKKyNlbmRpZgorCisvKiBGaXggdXAgdGhlIEFUXyogbWFjcm9zLiAgKi8KKworLyogV29yayBhcm91bmQgYSBidWcgaW4gU29sYXJpcyA5IGFuZCAxMDogQVRfRkRDV0QgaXMgcG9zaXRpdmUuICBJdHMKKyAgIHZhbHVlIGV4Y2VlZHMgSU5UX01BWCwgc28gaXRzIHVzZSBhcyBhbiBpbnQgZG9lc24ndCBjb25mb3JtIHRvIHRoZQorICAgQyBzdGFuZGFyZCwgYW5kIEdDQyBhbmQgU3VuIEMgY29tcGxhaW4gaW4gc29tZSBjYXNlcy4gIElmIHRoZSBidWcKKyAgIGlzIHByZXNlbnQsIHVuZGVmIEFUX0ZEQ1dEIGhlcmUsIHNvIGl0IGNhbiBiZSByZWRlZmluZWQgYmVsb3cuICAqLworI2lmIDAgPCBBVF9GRENXRCAmJiBBVF9GRENXRCA9PSAweGZmZDE5NTUzCisjIHVuZGVmIEFUX0ZEQ1dECisjZW5kaWYKKworLyogVXNlIHRoZSBzYW1lIGJpdCBwYXR0ZXJuIGFzIFNvbGFyaXMgOSwgYnV0IHdpdGggdGhlIHByb3BlcgorICAgc2lnbmVkbmVzcy4gIFRoZSBiaXQgcGF0dGVybiBpcyBpbXBvcnRhbnQsIGluIGNhc2UgdGhpcyBhY3R1YWxseSBpcworICAgU29sYXJpcyB3aXRoIHRoZSBhYm92ZSB3b3JrYXJvdW5kLiAgKi8KKyNpZm5kZWYgQVRfRkRDV0QKKyMgZGVmaW5lIEFUX0ZEQ1dEICgtMzA0MTk2NSkKKyNlbmRpZgorCisvKiBVc2UgdGhlIHNhbWUgdmFsdWVzIGFzIFNvbGFyaXMgOS4gIFRoaXMgc2hvdWxkbid0IG1hdHRlciwgYnV0CisgICB0aGVyZSdzIG5vIHJlYWwgcmVhc29uIHRvIGRpZmZlci4gICovCisjaWZuZGVmIEFUX1NZTUxJTktfTk9GT0xMT1cKKyMgZGVmaW5lIEFUX1NZTUxJTktfTk9GT0xMT1cgNDA5NgorI2VuZGlmCisKKyNpZm5kZWYgQVRfUkVNT1ZFRElSCisjIGRlZmluZSBBVF9SRU1PVkVESVIgMQorI2VuZGlmCisKKy8qIFNvbGFyaXMgOSBsYWNrcyB0aGVzZSB0d28sIHNvIGp1c3QgcGljayB1bmlxdWUgdmFsdWVzLiAgKi8KKyNpZm5kZWYgQVRfU1lNTElOS19GT0xMT1cKKyMgZGVmaW5lIEFUX1NZTUxJTktfRk9MTE9XIDIKKyNlbmRpZgorCisjaWZuZGVmIEFUX0VBQ0NFU1MKKyMgZGVmaW5lIEFUX0VBQ0NFU1MgNAorI2VuZGlmCisKKworI2VuZGlmIC8qIF9HTF9GQ05UTF9IICovCisjZW5kaWYgLyogX0dMX0ZDTlRMX0ggKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGludXgtbGliL2ludHR5cGVzLmggYi9saW51eC1saWIvaW50dHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTUzZGJhCi0tLSAvZGV2L251bGwKKysrIGIvbGludXgtbGliL2ludHR5cGVzLmgKQEAgLTAsMCArMSwxNDQyIEBACisvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovCisvKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQsIEJydW5vIEhhaWJsZSwgRGVyZWsgUHJpY2UuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBnbnVsaWIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qCisgKiBJU08gQyA5OSA8aW50dHlwZXMuaD4gZm9yIHBsYXRmb3JtcyB0aGF0IGxhY2sgaXQuCisgKiA8aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3N1c3YzeGJkL2ludHR5cGVzLmguaHRtbD4KKyAqLworCisjaWYgX19HTlVDX18gPj0gMworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorI2VuZGlmCisKKworLyogSW5jbHVkZSB0aGUgb3JpZ2luYWwgPGludHR5cGVzLmg+IGlmIGl0IGV4aXN0cywgYW5kIGlmIHRoaXMgZmlsZQorICAgaGFzIG5vdCBiZWVuIGluY2x1ZGVkIHlldCBvciBpZiB0aGlzIGZpbGUgaW5jbHVkZXMgZ251bGliIHN0ZGludC5oCisgICB3aGljaCBpbiB0dXJuIGluY2x1ZGVzIHRoaXMgZmlsZS4KKyAgIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyNpZiAhIGRlZmluZWQgSU5UVFlQRVNfSCB8fCBkZWZpbmVkIF9HTF9KVVNUX0lOQ0xVREVfU1lTVEVNX0lOVFRZUEVTX0gKKyMgaWYgMQorCisgICAvKiBTb21lIHByZS1DKysxMSA8c3RkaW50Lmg+IGltcGxlbWVudGF0aW9ucyBuZWVkIHRoaXMuICAqLworIyAgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiAhIGRlZmluZWQgX19TVERDX0ZPUk1BVF9NQUNST1MKKyMgICBkZWZpbmUgX19TVERDX0ZPUk1BVF9NQUNST1MgMQorIyAgZW5kaWYKKworIyAgaW5jbHVkZV9uZXh0IDxpbnR0eXBlcy5oPgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiAhIGRlZmluZWQgSU5UVFlQRVNfSCAmJiAhIGRlZmluZWQgX0dMX0pVU1RfSU5DTFVERV9TWVNURU1fSU5UVFlQRVNfSAorI2RlZmluZSBJTlRUWVBFU19ICisKKy8qIEluY2x1ZGUgPHN0ZGludC5oPiBvciB0aGUgZ251bGliIHJlcGxhY2VtZW50LgorICAgQnV0IGF2b2lkIG5hbWVzcGFjZSBwb2xsdXRpb24gb24gZ2xpYmMgc3lzdGVtcy4gICovCisjaWZuZGVmIF9fR0xJQkNfXworIyBpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorLyogR2V0IENIQVJfQklULiAgKi8KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2lmICEoSU5UX01JTiA9PSBJTlQzMl9NSU4gJiYgSU5UX01BWCA9PSBJTlQzMl9NQVgpCisjIGVycm9yICJUaGlzIGZpbGUgYXNzdW1lcyB0aGF0ICdpbnQnIGhhcyBleGFjdGx5IDMyIGJpdHMuIFBsZWFzZSByZXBvcnQgeW91ciBwbGF0Zm9ybSBhbmQgY29tcGlsZXIgdG8gPGJ1Zy1nbnVsaWJAZ251Lm9yZz4uIgorI2VuZGlmCisKKy8qIFRoZSBkZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBMIGV0Yy4gYXJlIGNvcGllZCBoZXJlLiAgKi8KKyNpZm5kZWYgX0dMX0NYWERFRlNfSAorI2RlZmluZSBfR0xfQ1hYREVGU19ICisKKy8qIFRoZSB0aHJlZSBtb3N0IGZyZXF1ZW50IHVzZSBjYXNlcyBvZiB0aGVzZSBtYWNyb3MgYXJlOgorCisgICAqIEZvciBwcm92aWRpbmcgYSBzdWJzdGl0dXRlIGZvciBhIGZ1bmN0aW9uIHRoYXQgaXMgbWlzc2luZyBvbiBzb21lCisgICAgIHBsYXRmb3JtcywgYnV0IGlzIGRlY2xhcmVkIGFuZCB3b3JrcyBmaW5lIG9uIHRoZSBwbGF0Zm9ybXMgb24gd2hpY2gKKyAgICAgaXQgZXhpc3RzOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgIUBIQVZFX0ZPT0AKKyAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgcmVwbGFjZW1lbnQgZm9yIGEgZnVuY3Rpb24gdGhhdCBleGlzdHMgb24gYWxsIHBsYXRmb3JtcywKKyAgICAgYnV0IGlzIGJyb2tlbi9pbnN1ZmZpY2llbnQgYW5kIG5lZWRzIHRvIGJlIHJlcGxhY2VkIG9uIHNvbWUgcGxhdGZvcm1zOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisgICAgICAgIyAgIHVuZGVmIGZvbworICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CisgICAgICAgIyBlbHNlCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgcmVwbGFjZW1lbnQgZm9yIGEgZnVuY3Rpb24gdGhhdCBleGlzdHMgb24gc29tZSBwbGF0Zm9ybXMKKyAgICAgYnV0IGlzIGJyb2tlbi9pbnN1ZmZpY2llbnQgYW5kIG5lZWRzIHRvIGJlIHJlcGxhY2VkIG9uIHNvbWUgb2YgdGhlbSBhbmQKKyAgICAgaXMgYWRkaXRpb25hbGx5IGVpdGhlciBtaXNzaW5nIG9yIHVuZGVjbGFyZWQgb24gc29tZSBvdGhlciBwbGF0Zm9ybXM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACisgICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyAgICAgICAjICAgdW5kZWYgZm9vCisgICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKyAgICAgICAjIGVsc2UKKyAgICAgICAjICBpZiAhQEhBVkVfRk9PQCAgIG9yICAgaWYgIUBIQVZFX0RFQ0xfRk9PQAorICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisqLworCisvKiBfR0xfRVhURVJOX0MgZGVjbGFyYXRpb247CisgICBwZXJmb3JtcyB0aGUgZGVjbGFyYXRpb24gd2l0aCBDIGxpbmthZ2UuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMKKyMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4gIkMiCisjZWxzZQorIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybgorI2VuZGlmCisKKy8qIF9HTF9GVU5DREVDTF9SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgZGVjbGFyZXMgYSByZXBsYWNlbWVudCBmdW5jdGlvbiwgbmFtZWQgcnBsX2Z1bmMsIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwKKyAgIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsIGFuZCBhdHRyaWJ1dGVzLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0ZVTkNERUNMX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisgKi8KKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICBfR0xfRlVOQ0RFQ0xfUlBMXzEgKHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpCisjZGVmaW5lIF9HTF9GVU5DREVDTF9SUExfMShycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0VYVEVSTl9DIHJldHR5cGUgcnBsX2Z1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworCisvKiBfR0xfRlVOQ0RFQ0xfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGRlY2xhcmVzIHRoZSBzeXN0ZW0gZnVuY3Rpb24sIG5hbWVkIGZ1bmMsIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwKKyAgIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsIGFuZCBhdHRyaWJ1dGVzLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0ZVTkNERUNMX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisgKi8KKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICBfR0xfRVhURVJOX0MgcmV0dHlwZSBmdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKworLyogX0dMX0NYWEFMSUFTX1JQTCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBkZWNsYXJlcyBhIEMrKyBhbGlhcyBjYWxsZWQgR05VTElCX05BTUVTUEFDRTo6ZnVuYworICAgdGhhdCByZWRpcmVjdHMgdG8gcnBsX2Z1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UgaXMgZGVmaW5lZC4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9DWFhBTElBU19SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworICovCisjZGVmaW5lIF9HTF9DWFhBTElBU19SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgX0dMX0NYWEFMSUFTX1JQTF8xIChmdW5jLCBycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKQorI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9IDo6cnBsX2Z1bmM7ICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1JQTF8xIChmdW5jLCBycGxfZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBycGxfZnVuYyBtYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudAorICAgZGVjbGFyYXRpb24uICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvcgorICAgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPig6OnJwbF9mdW5jKTsgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBkZWNsYXJlcyBhIEMrKyBhbGlhcyBjYWxsZWQgR05VTElCX05BTUVTUEFDRTo6ZnVuYworICAgdGhhdCByZWRpcmVjdHMgdG8gdGhlIHN5c3RlbSBwcm92aWRlZCBmdW5jdGlvbiBmdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFCisgICBpcyBkZWZpbmVkLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0NYWEFMSUFTX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CisgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorICAvKiBJZiB3ZSB3ZXJlIHRvIHdyaXRlCisgICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7CisgICAgIGxpa2UgYWJvdmUgaW4gX0dMX0NYWEFMSUFTX1JQTF8xLCB0aGUgY29tcGlsZXIgY291bGQgb3B0aW1pemUgY2FsbHMKKyAgICAgYmV0dGVyIChyZW1vdmUgYW4gaW5kaXJlY3Rpb24gdGhyb3VnaCBhICdzdGF0aWMnIHBvaW50ZXIgdmFyaWFibGUpLAorICAgICBidXQgdGhlbiB0aGUgX0dMX0NYWEFMSUFTV0FSTiBtYWNybyBiZWxvdyB3b3VsZCBjYXVzZSBhIHdhcm5pbmcgbm90IG9ubHkKKyAgICAgZm9yIHVzZXMgb2YgOjpmdW5jIGJ1dCBhbHNvIGZvciB1c2VzIG9mIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMuICAqLworIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOyAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1NZU19DQVNUIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gZnVuYyBtYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudCBkZWNsYXJhdGlvbi4KKyAgIEEgY2FzdCBpcyB1c2VkIHRvIHNpbGVuY2UgdGhlICJpbnZhbGlkIGNvbnZlcnNpb24iIGVycm9yIHRoYXQgd291bGQKKyAgIG90aGVyd2lzZSBvY2N1ci4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPig6OmZ1bmMpOyBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1NZU19DQVNUMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycywgcmV0dHlwZTIsIHBhcmFtZXRlcnMyKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gaXMgcGlja2VkIGFtb25nIGEgc2V0IG9mIG92ZXJsb2FkZWQgZnVuY3Rpb25zLAorICAgbmFtZWx5IHRoZSBvbmUgd2l0aCByZXR0eXBlMiBhbmQgcGFyYW1ldGVyczIuICBUd28gY29uc2VjdXRpdmUgY2FzdHMKKyAgIGFyZSB1c2VkIHRvIHNpbGVuY2UgdGhlICJjYW5ub3QgZmluZCBhIG1hdGNoIiBhbmQgImludmFsaWQgY29udmVyc2lvbiIKKyAgIGVycm9ycyB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyAgLyogVGhlIG91dGVyIGNhc3QgbXVzdCBiZSBhIHJlaW50ZXJwcmV0X2Nhc3QuCisgICAgIFRoZSBpbm5lciBjYXN0OiBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2V0IG9mIG92ZXJsb2FkZWQKKyAgICAgZnVuY3Rpb25zLCBpdCB3b3JrcyBhcyBhIHN0YXRpY19jYXN0PD4sIGNob29zaW5nIHRoZSBkZXNpZ25hdGVkIHZhcmlhbnQuCisgICAgIFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzaW5nbGUgdmFyaWFudCwgaXQgd29ya3MgYXMgYQorICAgICByZWludGVycHJldF9jYXN0PD4uIFRoZSBwYXJlbnRoZXNpemVkIGNhc3Qgc3ludGF4IHdvcmtzIGJvdGggd2F5cy4gICovCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzLHJldHR5cGUyLHBhcmFtZXRlcnMyKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKHJldHR5cGUyKCopcGFyYW1ldGVyczIpKDo6ZnVuYykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzLHJldHR5cGUyLHBhcmFtZXRlcnMyKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNXQVJOIChmdW5jKTsKKyAgIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZW1pdHRlZCB3aGVuIDo6ZnVuYyBpcyB1c2VkIGJ1dCBub3Qgd2hlbgorICAgR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgZnVuYyBtdXN0IGJlIGRlZmluZWQgd2l0aG91dCBvdmVybG9hZGVkCisgICB2YXJpYW50cy4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAorICAgX0dMX0NYWEFMSUFTV0FSTl8xIChmdW5jLCBHTlVMSUJfTkFNRVNQQUNFKQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8xKGZ1bmMsbmFtZXNwYWNlKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOXzIgKGZ1bmMsIG5hbWVzcGFjZSkKKy8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAorICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCisjIGlmICFfX09QVElNSVpFX18KKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKyAgICBfR0xfV0FSTl9PTl9VU0UgKGZ1bmMsIFwKKyAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICJVc2UgIiAjbmFtZXNwYWNlICI6OiIgI2Z1bmMgIiBpbnN0ZWFkLiIpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKyAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU1dBUk4xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZW1pdHRlZCB3aGVuIHRoZSBnaXZlbiBvdmVybG9hZGVkIHZhcmlhbnQgb2YgOjpmdW5jCisgICBpcyB1c2VkIGJ1dCBub3Qgd2hlbiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICAgX0dMX0NYWEFMSUFTV0FSTjFfMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgR05VTElCX05BTUVTUEFDRSkKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOMV8yIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBuYW1lc3BhY2UpCisvKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKyAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworIyBpZiAhX19PUFRJTUlaRV9fCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgICBfR0xfV0FSTl9PTl9VU0VfQ1hYIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJVc2UgIiAjbmFtZXNwYWNlICI6OiIgI2Z1bmMgIiBpbnN0ZWFkLiIpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKyNlbmRpZiAvKiBfR0xfQ1hYREVGU19IICovCisKKy8qIFRoZSBkZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVMTCBpcyBjb3BpZWQgaGVyZS4gICovCisvKiBfR0xfQVJHX05PTk5VTEwoKG4sLi4uLG0pKSB0ZWxscyB0aGUgY29tcGlsZXIgYW5kIHN0YXRpYyBhbmFseXplciB0b29scworICAgdGhhdCB0aGUgdmFsdWVzIHBhc3NlZCBhcyBhcmd1bWVudHMgbiwgLi4uLCBtIG11c3QgYmUgbm9uLU5VTEwgcG9pbnRlcnMuCisgICBuID0gMSBzdGFuZHMgZm9yIHRoZSBmaXJzdCBhcmd1bWVudCwgbiA9IDIgZm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgZXRjLiAgKi8KKyNpZm5kZWYgX0dMX0FSR19OT05OVUxMCisjIGlmIChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID49IDMpIHx8IF9fR05VQ19fID4gMworIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpIF9fYXR0cmlidXRlX18gKChfX25vbm51bGxfXyBwYXJhbXMpKQorIyBlbHNlCisjICBkZWZpbmUgX0dMX0FSR19OT05OVUxMKHBhcmFtcykKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UgaXMgY29waWVkIGhlcmUuICAqLworI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0UKKworIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKy8qIEEgY29tcGlsZXIgYXR0cmlidXRlIGlzIGF2YWlsYWJsZSBpbiBnY2MgdmVyc2lvbnMgNC4zLjAgYW5kIGxhdGVyLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24gX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtZXNzYWdlKSkpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisvKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmN0aW9uKSBmdW5jdGlvbgorIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBfR0xfV0FSTl9PTl9VU0VfQ1hYIChmdW5jdGlvbiwgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgInN0cmluZyIpCisgICBpcyBsaWtlIF9HTF9XQVJOX09OX1VTRSAoZnVuY3Rpb24sICJzdHJpbmciKSwgZXhjZXB0IHRoYXQgdGhlIGZ1bmN0aW9uIGlzCisgICBkZWNsYXJlZCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsCisgICBhbmQgYXR0cmlidXRlcy4KKyAgIFRoaXMgdmFyaWFudCBpcyB1c2VmdWwgZm9yIG92ZXJsb2FkZWQgZnVuY3Rpb25zIGluIEMrKy4gX0dMX1dBUk5fT05fVVNFIGRvZXMKKyAgIG5vdCB3b3JrIGluIHRoaXMgY2FzZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX09OX1VTRV9DWFgKKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCitleHRlcm4gcmV0dHlwZSBmdW5jdGlvbiBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzIFwKKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtc2cpKSkKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKy8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCitleHRlcm4gcmV0dHlwZSBmdW5jdGlvbiBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisjIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorX0dMX1dBUk5fRVhURVJOX0MgaW50IF9nbF93YXJuX29uX3VzZQorIyBlbmRpZgorI2VuZGlmCisKKy8qIF9HTF9XQVJOX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fRVhURVJOX0MKKyMgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cworIyAgZGVmaW5lIF9HTF9XQVJOX0VYVEVSTl9DIGV4dGVybiAiQyIKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9XQVJOX0VYVEVSTl9DIGV4dGVybgorIyBlbmRpZgorI2VuZGlmCisKKy8qIDcuOC4xIE1hY3JvcyBmb3IgZm9ybWF0IHNwZWNpZmllcnMgKi8KKworI2lmIGRlZmluZWQgX1ROU19SX1RBUkdFVAorICAgLyogVGFuZGVtIE5vblN0b3AgUiBzZXJpZXMgYW5kIGNvbXBhdGlibGUgcGxhdGZvcm1zIHJlbGVhc2VkIGJlZm9yZQorICAgICAgSnVseSAyMDA1IHN1cHBvcnQgJUxkIGJ1dCBub3QgJWxsZC4gICovCisjIGRlZmluZSBfTE9OR19MT05HX0ZPUk1BVF9QUkVGSVggIkwiCisjZWxzZQorIyBkZWZpbmUgX0xPTkdfTE9OR19GT1JNQVRfUFJFRklYICJsbCIKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgUFJJZDggfHwgMAorIyB1bmRlZiBQUklkOAorIyBpZmRlZiBJTlQ4X01BWAorIyAgZGVmaW5lIFBSSWQ4ICJkIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJaTggfHwgMAorIyB1bmRlZiBQUklpOAorIyBpZmRlZiBJTlQ4X01BWAorIyAgZGVmaW5lIFBSSWk4ICJpIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJbzggfHwgMAorIyB1bmRlZiBQUklvOAorIyBpZmRlZiBVSU5UOF9NQVgKKyMgIGRlZmluZSBQUklvOCAibyIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXU4IHx8IDAKKyMgdW5kZWYgUFJJdTgKKyMgaWZkZWYgVUlOVDhfTUFYCisjICBkZWZpbmUgUFJJdTggInUiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUkl4OCB8fCAwCisjIHVuZGVmIFBSSXg4CisjIGlmZGVmIFVJTlQ4X01BWAorIyAgZGVmaW5lIFBSSXg4ICJ4IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJWDggfHwgMAorIyB1bmRlZiBQUklYOAorIyBpZmRlZiBVSU5UOF9NQVgKKyMgIGRlZmluZSBQUklYOCAiWCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWQxNiB8fCAwCisjIHVuZGVmIFBSSWQxNgorIyBpZmRlZiBJTlQxNl9NQVgKKyMgIGRlZmluZSBQUklkMTYgImQiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklpMTYgfHwgMAorIyB1bmRlZiBQUklpMTYKKyMgaWZkZWYgSU5UMTZfTUFYCisjICBkZWZpbmUgUFJJaTE2ICJpIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJbzE2IHx8IDAKKyMgdW5kZWYgUFJJbzE2CisjIGlmZGVmIFVJTlQxNl9NQVgKKyMgIGRlZmluZSBQUklvMTYgIm8iCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUkl1MTYgfHwgMAorIyB1bmRlZiBQUkl1MTYKKyMgaWZkZWYgVUlOVDE2X01BWAorIyAgZGVmaW5lIFBSSXUxNiAidSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXgxNiB8fCAwCisjIHVuZGVmIFBSSXgxNgorIyBpZmRlZiBVSU5UMTZfTUFYCisjICBkZWZpbmUgUFJJeDE2ICJ4IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJWDE2IHx8IDAKKyMgdW5kZWYgUFJJWDE2CisjIGlmZGVmIFVJTlQxNl9NQVgKKyMgIGRlZmluZSBQUklYMTYgIlgiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklkMzIgfHwgMAorIyB1bmRlZiBQUklkMzIKKyMgaWZkZWYgSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJZDMyICJkIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJaTMyIHx8IDAKKyMgdW5kZWYgUFJJaTMyCisjIGlmZGVmIElOVDMyX01BWAorIyAgZGVmaW5lIFBSSWkzMiAiaSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSW8zMiB8fCAwCisjIHVuZGVmIFBSSW8zMgorIyBpZmRlZiBVSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJbzMyICJvIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJdTMyIHx8IDAKKyMgdW5kZWYgUFJJdTMyCisjIGlmZGVmIFVJTlQzMl9NQVgKKyMgIGRlZmluZSBQUkl1MzIgInUiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUkl4MzIgfHwgMAorIyB1bmRlZiBQUkl4MzIKKyMgaWZkZWYgVUlOVDMyX01BWAorIyAgZGVmaW5lIFBSSXgzMiAieCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSVgzMiB8fCAwCisjIHVuZGVmIFBSSVgzMgorIyBpZmRlZiBVSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJWDMyICJYIgorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgSU5UNjRfTUFYCisjIGlmICgwID8gZGVmaW5lZCBfTFA2NCA6IDEpCisjICBkZWZpbmUgX1BSSTY0X1BSRUZJWCAibCIKKyMgZWxpZiBkZWZpbmVkIF9NU0NfVkVSIHx8IGRlZmluZWQgX19NSU5HVzMyX18KKyMgIGRlZmluZSBfUFJJNjRfUFJFRklYICJJNjQiCisjIGVsaWYgMSAmJiBMT05HX01BWCA+PiAzMCA9PSAxCisjICBkZWZpbmUgX1BSSTY0X1BSRUZJWCBfTE9OR19MT05HX0ZPUk1BVF9QUkVGSVgKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJZDY0IHx8IDAKKyMgIHVuZGVmIFBSSWQ2NAorIyAgZGVmaW5lIFBSSWQ2NCBfUFJJNjRfUFJFRklYICJkIgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUklpNjQgfHwgMAorIyAgdW5kZWYgUFJJaTY0CisjICBkZWZpbmUgUFJJaTY0IF9QUkk2NF9QUkVGSVggImkiCisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBVSU5UNjRfTUFYCisjIGlmICgwID8gZGVmaW5lZCBfTFA2NCA6IDEpCisjICBkZWZpbmUgX1BSSXU2NF9QUkVGSVggImwiCisjIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUiB8fCBkZWZpbmVkIF9fTUlOR1czMl9fCisjICBkZWZpbmUgX1BSSXU2NF9QUkVGSVggIkk2NCIKKyMgZWxpZiAxICYmIFVMT05HX01BWCA+PiAzMSA9PSAxCisjICBkZWZpbmUgX1BSSXU2NF9QUkVGSVggX0xPTkdfTE9OR19GT1JNQVRfUFJFRklYCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSW82NCB8fCAwCisjICB1bmRlZiBQUklvNjQKKyMgIGRlZmluZSBQUklvNjQgX1BSSXU2NF9QUkVGSVggIm8iCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSXU2NCB8fCAwCisjICB1bmRlZiBQUkl1NjQKKyMgIGRlZmluZSBQUkl1NjQgX1BSSXU2NF9QUkVGSVggInUiCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSXg2NCB8fCAwCisjICB1bmRlZiBQUkl4NjQKKyMgIGRlZmluZSBQUkl4NjQgX1BSSXU2NF9QUkVGSVggIngiCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSVg2NCB8fCAwCisjICB1bmRlZiBQUklYNjQKKyMgIGRlZmluZSBQUklYNjQgX1BSSXU2NF9QUkVGSVggIlgiCisjIGVuZGlmCisjZW5kaWYKKworI2lmICFkZWZpbmVkIFBSSWRMRUFTVDggfHwgMAorIyB1bmRlZiBQUklkTEVBU1Q4CisjIGRlZmluZSBQUklkTEVBU1Q4ICJkIgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJaUxFQVNUOCB8fCAwCisjIHVuZGVmIFBSSWlMRUFTVDgKKyMgZGVmaW5lIFBSSWlMRUFTVDggImkiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklvTEVBU1Q4IHx8IDAKKyMgdW5kZWYgUFJJb0xFQVNUOAorIyBkZWZpbmUgUFJJb0xFQVNUOCAibyIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXVMRUFTVDggfHwgMAorIyB1bmRlZiBQUkl1TEVBU1Q4CisjIGRlZmluZSBQUkl1TEVBU1Q4ICJ1IgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJeExFQVNUOCB8fCAwCisjIHVuZGVmIFBSSXhMRUFTVDgKKyMgZGVmaW5lIFBSSXhMRUFTVDggIngiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklYTEVBU1Q4IHx8IDAKKyMgdW5kZWYgUFJJWExFQVNUOAorIyBkZWZpbmUgUFJJWExFQVNUOCAiWCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWRMRUFTVDE2IHx8IDAKKyMgdW5kZWYgUFJJZExFQVNUMTYKKyMgZGVmaW5lIFBSSWRMRUFTVDE2ICJkIgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJaUxFQVNUMTYgfHwgMAorIyB1bmRlZiBQUklpTEVBU1QxNgorIyBkZWZpbmUgUFJJaUxFQVNUMTYgImkiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklvTEVBU1QxNiB8fCAwCisjIHVuZGVmIFBSSW9MRUFTVDE2CisjIGRlZmluZSBQUklvTEVBU1QxNiAibyIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXVMRUFTVDE2IHx8IDAKKyMgdW5kZWYgUFJJdUxFQVNUMTYKKyMgZGVmaW5lIFBSSXVMRUFTVDE2ICJ1IgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJeExFQVNUMTYgfHwgMAorIyB1bmRlZiBQUkl4TEVBU1QxNgorIyBkZWZpbmUgUFJJeExFQVNUMTYgIngiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklYTEVBU1QxNiB8fCAwCisjIHVuZGVmIFBSSVhMRUFTVDE2CisjIGRlZmluZSBQUklYTEVBU1QxNiAiWCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWRMRUFTVDMyIHx8IDAKKyMgdW5kZWYgUFJJZExFQVNUMzIKKyMgZGVmaW5lIFBSSWRMRUFTVDMyICJkIgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJaUxFQVNUMzIgfHwgMAorIyB1bmRlZiBQUklpTEVBU1QzMgorIyBkZWZpbmUgUFJJaUxFQVNUMzIgImkiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklvTEVBU1QzMiB8fCAwCisjIHVuZGVmIFBSSW9MRUFTVDMyCisjIGRlZmluZSBQUklvTEVBU1QzMiAibyIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXVMRUFTVDMyIHx8IDAKKyMgdW5kZWYgUFJJdUxFQVNUMzIKKyMgZGVmaW5lIFBSSXVMRUFTVDMyICJ1IgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJeExFQVNUMzIgfHwgMAorIyB1bmRlZiBQUkl4TEVBU1QzMgorIyBkZWZpbmUgUFJJeExFQVNUMzIgIngiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklYTEVBU1QzMiB8fCAwCisjIHVuZGVmIFBSSVhMRUFTVDMyCisjIGRlZmluZSBQUklYTEVBU1QzMiAiWCIKKyNlbmRpZgorI2lmZGVmIElOVDY0X01BWAorIyBpZiAhZGVmaW5lZCBQUklkTEVBU1Q2NCB8fCAwCisjICB1bmRlZiBQUklkTEVBU1Q2NAorIyAgZGVmaW5lIFBSSWRMRUFTVDY0IFBSSWQ2NAorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUklpTEVBU1Q2NCB8fCAwCisjICB1bmRlZiBQUklpTEVBU1Q2NAorIyAgZGVmaW5lIFBSSWlMRUFTVDY0IFBSSWk2NAorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgVUlOVDY0X01BWAorIyBpZiAhZGVmaW5lZCBQUklvTEVBU1Q2NCB8fCAwCisjICB1bmRlZiBQUklvTEVBU1Q2NAorIyAgZGVmaW5lIFBSSW9MRUFTVDY0IFBSSW82NAorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUkl1TEVBU1Q2NCB8fCAwCisjICB1bmRlZiBQUkl1TEVBU1Q2NAorIyAgZGVmaW5lIFBSSXVMRUFTVDY0IFBSSXU2NAorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUkl4TEVBU1Q2NCB8fCAwCisjICB1bmRlZiBQUkl4TEVBU1Q2NAorIyAgZGVmaW5lIFBSSXhMRUFTVDY0IFBSSXg2NAorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUklYTEVBU1Q2NCB8fCAwCisjICB1bmRlZiBQUklYTEVBU1Q2NAorIyAgZGVmaW5lIFBSSVhMRUFTVDY0IFBSSVg2NAorIyBlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCBQUklkRkFTVDggfHwgMAorIyB1bmRlZiBQUklkRkFTVDgKKyMgaWYgSU5UX0ZBU1Q4X01BWCA+IElOVDMyX01BWAorIyAgZGVmaW5lIFBSSWRGQVNUOCBQUklkNjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSWRGQVNUOCAiZCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWlGQVNUOCB8fCAwCisjIHVuZGVmIFBSSWlGQVNUOAorIyBpZiBJTlRfRkFTVDhfTUFYID4gSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJaUZBU1Q4IFBSSWk2NAorIyBlbHNlCisjICBkZWZpbmUgUFJJaUZBU1Q4ICJpIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJb0ZBU1Q4IHx8IDAKKyMgdW5kZWYgUFJJb0ZBU1Q4CisjIGlmIFVJTlRfRkFTVDhfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFBSSW9GQVNUOCBQUklvNjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSW9GQVNUOCAibyIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXVGQVNUOCB8fCAwCisjIHVuZGVmIFBSSXVGQVNUOAorIyBpZiBVSU5UX0ZBU1Q4X01BWCA+IFVJTlQzMl9NQVgKKyMgIGRlZmluZSBQUkl1RkFTVDggUFJJdTY0CisjIGVsc2UKKyMgIGRlZmluZSBQUkl1RkFTVDggInUiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUkl4RkFTVDggfHwgMAorIyB1bmRlZiBQUkl4RkFTVDgKKyMgaWYgVUlOVF9GQVNUOF9NQVggPiBVSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJeEZBU1Q4IFBSSXg2NAorIyBlbHNlCisjICBkZWZpbmUgUFJJeEZBU1Q4ICJ4IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJWEZBU1Q4IHx8IDAKKyMgdW5kZWYgUFJJWEZBU1Q4CisjIGlmIFVJTlRfRkFTVDhfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFBSSVhGQVNUOCBQUklYNjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSVhGQVNUOCAiWCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWRGQVNUMTYgfHwgMAorIyB1bmRlZiBQUklkRkFTVDE2CisjIGlmIElOVF9GQVNUMTZfTUFYID4gSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJZEZBU1QxNiBQUklkNjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSWRGQVNUMTYgImQiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklpRkFTVDE2IHx8IDAKKyMgdW5kZWYgUFJJaUZBU1QxNgorIyBpZiBJTlRfRkFTVDE2X01BWCA+IElOVDMyX01BWAorIyAgZGVmaW5lIFBSSWlGQVNUMTYgUFJJaTY0CisjIGVsc2UKKyMgIGRlZmluZSBQUklpRkFTVDE2ICJpIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJb0ZBU1QxNiB8fCAwCisjIHVuZGVmIFBSSW9GQVNUMTYKKyMgaWYgVUlOVF9GQVNUMTZfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFBSSW9GQVNUMTYgUFJJbzY0CisjIGVsc2UKKyMgIGRlZmluZSBQUklvRkFTVDE2ICJvIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJdUZBU1QxNiB8fCAwCisjIHVuZGVmIFBSSXVGQVNUMTYKKyMgaWYgVUlOVF9GQVNUMTZfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFBSSXVGQVNUMTYgUFJJdTY0CisjIGVsc2UKKyMgIGRlZmluZSBQUkl1RkFTVDE2ICJ1IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJeEZBU1QxNiB8fCAwCisjIHVuZGVmIFBSSXhGQVNUMTYKKyMgaWYgVUlOVF9GQVNUMTZfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFBSSXhGQVNUMTYgUFJJeDY0CisjIGVsc2UKKyMgIGRlZmluZSBQUkl4RkFTVDE2ICJ4IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJWEZBU1QxNiB8fCAwCisjIHVuZGVmIFBSSVhGQVNUMTYKKyMgaWYgVUlOVF9GQVNUMTZfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFBSSVhGQVNUMTYgUFJJWDY0CisjIGVsc2UKKyMgIGRlZmluZSBQUklYRkFTVDE2ICJYIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJZEZBU1QzMiB8fCAwCisjIHVuZGVmIFBSSWRGQVNUMzIKKyMgaWYgSU5UX0ZBU1QzMl9NQVggPiBJTlQzMl9NQVgKKyMgIGRlZmluZSBQUklkRkFTVDMyIFBSSWQ2NAorIyBlbHNlCisjICBkZWZpbmUgUFJJZEZBU1QzMiAiZCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWlGQVNUMzIgfHwgMAorIyB1bmRlZiBQUklpRkFTVDMyCisjIGlmIElOVF9GQVNUMzJfTUFYID4gSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJaUZBU1QzMiBQUklpNjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSWlGQVNUMzIgImkiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklvRkFTVDMyIHx8IDAKKyMgdW5kZWYgUFJJb0ZBU1QzMgorIyBpZiBVSU5UX0ZBU1QzMl9NQVggPiBVSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJb0ZBU1QzMiBQUklvNjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSW9GQVNUMzIgIm8iCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUkl1RkFTVDMyIHx8IDAKKyMgdW5kZWYgUFJJdUZBU1QzMgorIyBpZiBVSU5UX0ZBU1QzMl9NQVggPiBVSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJdUZBU1QzMiBQUkl1NjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSXVGQVNUMzIgInUiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUkl4RkFTVDMyIHx8IDAKKyMgdW5kZWYgUFJJeEZBU1QzMgorIyBpZiBVSU5UX0ZBU1QzMl9NQVggPiBVSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJeEZBU1QzMiBQUkl4NjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSXhGQVNUMzIgIngiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklYRkFTVDMyIHx8IDAKKyMgdW5kZWYgUFJJWEZBU1QzMgorIyBpZiBVSU5UX0ZBU1QzMl9NQVggPiBVSU5UMzJfTUFYCisjICBkZWZpbmUgUFJJWEZBU1QzMiBQUklYNjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSVhGQVNUMzIgIlgiCisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBJTlQ2NF9NQVgKKyMgaWYgIWRlZmluZWQgUFJJZEZBU1Q2NCB8fCAwCisjICB1bmRlZiBQUklkRkFTVDY0CisjICBkZWZpbmUgUFJJZEZBU1Q2NCBQUklkNjQKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJaUZBU1Q2NCB8fCAwCisjICB1bmRlZiBQUklpRkFTVDY0CisjICBkZWZpbmUgUFJJaUZBU1Q2NCBQUklpNjQKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIFVJTlQ2NF9NQVgKKyMgaWYgIWRlZmluZWQgUFJJb0ZBU1Q2NCB8fCAwCisjICB1bmRlZiBQUklvRkFTVDY0CisjICBkZWZpbmUgUFJJb0ZBU1Q2NCBQUklvNjQKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJdUZBU1Q2NCB8fCAwCisjICB1bmRlZiBQUkl1RkFTVDY0CisjICBkZWZpbmUgUFJJdUZBU1Q2NCBQUkl1NjQKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJeEZBU1Q2NCB8fCAwCisjICB1bmRlZiBQUkl4RkFTVDY0CisjICBkZWZpbmUgUFJJeEZBU1Q2NCBQUkl4NjQKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJWEZBU1Q2NCB8fCAwCisjICB1bmRlZiBQUklYRkFTVDY0CisjICBkZWZpbmUgUFJJWEZBU1Q2NCBQUklYNjQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgUFJJZE1BWCB8fCAwCisjIHVuZGVmIFBSSWRNQVgKKyMgaWYgMQorIyAgZGVmaW5lIFBSSWRNQVggUFJJZDY0CisjIGVsc2UKKyMgIGRlZmluZSBQUklkTUFYICJsZCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWlNQVggfHwgMAorIyB1bmRlZiBQUklpTUFYCisjIGlmIDEKKyMgIGRlZmluZSBQUklpTUFYIFBSSWk2NAorIyBlbHNlCisjICBkZWZpbmUgUFJJaU1BWCAibGkiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklvTUFYIHx8IDAKKyMgdW5kZWYgUFJJb01BWAorIyBpZiAxCisjICBkZWZpbmUgUFJJb01BWCBQUklvNjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSW9NQVggImxvIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJdU1BWCB8fCAwCisjIHVuZGVmIFBSSXVNQVgKKyMgaWYgMQorIyAgZGVmaW5lIFBSSXVNQVggUFJJdTY0CisjIGVsc2UKKyMgIGRlZmluZSBQUkl1TUFYICJsdSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXhNQVggfHwgMAorIyB1bmRlZiBQUkl4TUFYCisjIGlmIDEKKyMgIGRlZmluZSBQUkl4TUFYIFBSSXg2NAorIyBlbHNlCisjICBkZWZpbmUgUFJJeE1BWCAibHgiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklYTUFYIHx8IDAKKyMgdW5kZWYgUFJJWE1BWAorIyBpZiAxCisjICBkZWZpbmUgUFJJWE1BWCBQUklYNjQKKyMgZWxzZQorIyAgZGVmaW5lIFBSSVhNQVggImxYIgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCBQUklkUFRSIHx8IDAKKyMgdW5kZWYgUFJJZFBUUgorIyBpZmRlZiBJTlRQVFJfTUFYCisjICBkZWZpbmUgUFJJZFBUUiAibCIgImQiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklpUFRSIHx8IDAKKyMgdW5kZWYgUFJJaVBUUgorIyBpZmRlZiBJTlRQVFJfTUFYCisjICBkZWZpbmUgUFJJaVBUUiAibCIgImkiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklvUFRSIHx8IDAKKyMgdW5kZWYgUFJJb1BUUgorIyBpZmRlZiBVSU5UUFRSX01BWAorIyAgZGVmaW5lIFBSSW9QVFIgImwiICJvIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJdVBUUiB8fCAwCisjIHVuZGVmIFBSSXVQVFIKKyMgaWZkZWYgVUlOVFBUUl9NQVgKKyMgIGRlZmluZSBQUkl1UFRSICJsIiAidSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXhQVFIgfHwgMAorIyB1bmRlZiBQUkl4UFRSCisjIGlmZGVmIFVJTlRQVFJfTUFYCisjICBkZWZpbmUgUFJJeFBUUiAibCIgIngiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklYUFRSIHx8IDAKKyMgdW5kZWYgUFJJWFBUUgorIyBpZmRlZiBVSU5UUFRSX01BWAorIyAgZGVmaW5lIFBSSVhQVFIgImwiICJYIgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCBTQ05kOCB8fCAwCisjIHVuZGVmIFNDTmQ4CisjIGlmZGVmIElOVDhfTUFYCisjICBkZWZpbmUgU0NOZDggImhoZCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTmk4IHx8IDAKKyMgdW5kZWYgU0NOaTgKKyMgaWZkZWYgSU5UOF9NQVgKKyMgIGRlZmluZSBTQ05pOCAiaGhpIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NObzggfHwgMAorIyB1bmRlZiBTQ05vOAorIyBpZmRlZiBVSU5UOF9NQVgKKyMgIGRlZmluZSBTQ05vOCAiaGhvIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOdTggfHwgMAorIyB1bmRlZiBTQ051OAorIyBpZmRlZiBVSU5UOF9NQVgKKyMgIGRlZmluZSBTQ051OCAiaGh1IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOeDggfHwgMAorIyB1bmRlZiBTQ054OAorIyBpZmRlZiBVSU5UOF9NQVgKKyMgIGRlZmluZSBTQ054OCAiaGh4IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOZDE2IHx8IDAKKyMgdW5kZWYgU0NOZDE2CisjIGlmZGVmIElOVDE2X01BWAorIyAgZGVmaW5lIFNDTmQxNiAiaGQiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05pMTYgfHwgMAorIyB1bmRlZiBTQ05pMTYKKyMgaWZkZWYgSU5UMTZfTUFYCisjICBkZWZpbmUgU0NOaTE2ICJoaSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTm8xNiB8fCAwCisjIHVuZGVmIFNDTm8xNgorIyBpZmRlZiBVSU5UMTZfTUFYCisjICBkZWZpbmUgU0NObzE2ICJobyIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTnUxNiB8fCAwCisjIHVuZGVmIFNDTnUxNgorIyBpZmRlZiBVSU5UMTZfTUFYCisjICBkZWZpbmUgU0NOdTE2ICJodSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTngxNiB8fCAwCisjIHVuZGVmIFNDTngxNgorIyBpZmRlZiBVSU5UMTZfTUFYCisjICBkZWZpbmUgU0NOeDE2ICJoeCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTmQzMiB8fCAwCisjIHVuZGVmIFNDTmQzMgorIyBpZmRlZiBJTlQzMl9NQVgKKyMgIGRlZmluZSBTQ05kMzIgImQiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05pMzIgfHwgMAorIyB1bmRlZiBTQ05pMzIKKyMgaWZkZWYgSU5UMzJfTUFYCisjICBkZWZpbmUgU0NOaTMyICJpIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NObzMyIHx8IDAKKyMgdW5kZWYgU0NObzMyCisjIGlmZGVmIFVJTlQzMl9NQVgKKyMgIGRlZmluZSBTQ05vMzIgIm8iCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ051MzIgfHwgMAorIyB1bmRlZiBTQ051MzIKKyMgaWZkZWYgVUlOVDMyX01BWAorIyAgZGVmaW5lIFNDTnUzMiAidSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTngzMiB8fCAwCisjIHVuZGVmIFNDTngzMgorIyBpZmRlZiBVSU5UMzJfTUFYCisjICBkZWZpbmUgU0NOeDMyICJ4IgorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgSU5UNjRfTUFYCisjIGlmICgwID8gZGVmaW5lZCBfTFA2NCA6IDEpCisjICBkZWZpbmUgX1NDTjY0X1BSRUZJWCAibCIKKyMgZWxpZiBkZWZpbmVkIF9NU0NfVkVSIHx8IGRlZmluZWQgX19NSU5HVzMyX18KKyMgIGRlZmluZSBfU0NONjRfUFJFRklYICJJNjQiCisjIGVsaWYgMSAmJiBMT05HX01BWCA+PiAzMCA9PSAxCisjICBkZWZpbmUgX1NDTjY0X1BSRUZJWCBfTE9OR19MT05HX0ZPUk1BVF9QUkVGSVgKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgU0NOZDY0IHx8IDAKKyMgIHVuZGVmIFNDTmQ2NAorIyAgZGVmaW5lIFNDTmQ2NCBfU0NONjRfUFJFRklYICJkIgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ05pNjQgfHwgMAorIyAgdW5kZWYgU0NOaTY0CisjICBkZWZpbmUgU0NOaTY0IF9TQ042NF9QUkVGSVggImkiCisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBVSU5UNjRfTUFYCisjIGlmICgwID8gZGVmaW5lZCBfTFA2NCA6IDEpCisjICBkZWZpbmUgX1NDTnU2NF9QUkVGSVggImwiCisjIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUiB8fCBkZWZpbmVkIF9fTUlOR1czMl9fCisjICBkZWZpbmUgX1NDTnU2NF9QUkVGSVggIkk2NCIKKyMgZWxpZiAxICYmIFVMT05HX01BWCA+PiAzMSA9PSAxCisjICBkZWZpbmUgX1NDTnU2NF9QUkVGSVggX0xPTkdfTE9OR19GT1JNQVRfUFJFRklYCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTm82NCB8fCAwCisjICB1bmRlZiBTQ05vNjQKKyMgIGRlZmluZSBTQ05vNjQgX1NDTnU2NF9QUkVGSVggIm8iCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTnU2NCB8fCAwCisjICB1bmRlZiBTQ051NjQKKyMgIGRlZmluZSBTQ051NjQgX1NDTnU2NF9QUkVGSVggInUiCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTng2NCB8fCAwCisjICB1bmRlZiBTQ054NjQKKyMgIGRlZmluZSBTQ054NjQgX1NDTnU2NF9QUkVGSVggIngiCisjIGVuZGlmCisjZW5kaWYKKworI2lmICFkZWZpbmVkIFNDTmRMRUFTVDggfHwgMAorIyB1bmRlZiBTQ05kTEVBU1Q4CisjIGRlZmluZSBTQ05kTEVBU1Q4ICJoaGQiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05pTEVBU1Q4IHx8IDAKKyMgdW5kZWYgU0NOaUxFQVNUOAorIyBkZWZpbmUgU0NOaUxFQVNUOCAiaGhpIgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOb0xFQVNUOCB8fCAwCisjIHVuZGVmIFNDTm9MRUFTVDgKKyMgZGVmaW5lIFNDTm9MRUFTVDggImhobyIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTnVMRUFTVDggfHwgMAorIyB1bmRlZiBTQ051TEVBU1Q4CisjIGRlZmluZSBTQ051TEVBU1Q4ICJoaHUiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ054TEVBU1Q4IHx8IDAKKyMgdW5kZWYgU0NOeExFQVNUOAorIyBkZWZpbmUgU0NOeExFQVNUOCAiaGh4IgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOZExFQVNUMTYgfHwgMAorIyB1bmRlZiBTQ05kTEVBU1QxNgorIyBkZWZpbmUgU0NOZExFQVNUMTYgImhkIgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOaUxFQVNUMTYgfHwgMAorIyB1bmRlZiBTQ05pTEVBU1QxNgorIyBkZWZpbmUgU0NOaUxFQVNUMTYgImhpIgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOb0xFQVNUMTYgfHwgMAorIyB1bmRlZiBTQ05vTEVBU1QxNgorIyBkZWZpbmUgU0NOb0xFQVNUMTYgImhvIgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOdUxFQVNUMTYgfHwgMAorIyB1bmRlZiBTQ051TEVBU1QxNgorIyBkZWZpbmUgU0NOdUxFQVNUMTYgImh1IgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOeExFQVNUMTYgfHwgMAorIyB1bmRlZiBTQ054TEVBU1QxNgorIyBkZWZpbmUgU0NOeExFQVNUMTYgImh4IgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOZExFQVNUMzIgfHwgMAorIyB1bmRlZiBTQ05kTEVBU1QzMgorIyBkZWZpbmUgU0NOZExFQVNUMzIgImQiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05pTEVBU1QzMiB8fCAwCisjIHVuZGVmIFNDTmlMRUFTVDMyCisjIGRlZmluZSBTQ05pTEVBU1QzMiAiaSIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTm9MRUFTVDMyIHx8IDAKKyMgdW5kZWYgU0NOb0xFQVNUMzIKKyMgZGVmaW5lIFNDTm9MRUFTVDMyICJvIgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOdUxFQVNUMzIgfHwgMAorIyB1bmRlZiBTQ051TEVBU1QzMgorIyBkZWZpbmUgU0NOdUxFQVNUMzIgInUiCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ054TEVBU1QzMiB8fCAwCisjIHVuZGVmIFNDTnhMRUFTVDMyCisjIGRlZmluZSBTQ054TEVBU1QzMiAieCIKKyNlbmRpZgorI2lmZGVmIElOVDY0X01BWAorIyBpZiAhZGVmaW5lZCBTQ05kTEVBU1Q2NCB8fCAwCisjICB1bmRlZiBTQ05kTEVBU1Q2NAorIyAgZGVmaW5lIFNDTmRMRUFTVDY0IFNDTmQ2NAorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ05pTEVBU1Q2NCB8fCAwCisjICB1bmRlZiBTQ05pTEVBU1Q2NAorIyAgZGVmaW5lIFNDTmlMRUFTVDY0IFNDTmk2NAorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgVUlOVDY0X01BWAorIyBpZiAhZGVmaW5lZCBTQ05vTEVBU1Q2NCB8fCAwCisjICB1bmRlZiBTQ05vTEVBU1Q2NAorIyAgZGVmaW5lIFNDTm9MRUFTVDY0IFNDTm82NAorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ051TEVBU1Q2NCB8fCAwCisjICB1bmRlZiBTQ051TEVBU1Q2NAorIyAgZGVmaW5lIFNDTnVMRUFTVDY0IFNDTnU2NAorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ054TEVBU1Q2NCB8fCAwCisjICB1bmRlZiBTQ054TEVBU1Q2NAorIyAgZGVmaW5lIFNDTnhMRUFTVDY0IFNDTng2NAorIyBlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCBTQ05kRkFTVDggfHwgMAorIyB1bmRlZiBTQ05kRkFTVDgKKyMgaWYgSU5UX0ZBU1Q4X01BWCA+IElOVDMyX01BWAorIyAgZGVmaW5lIFNDTmRGQVNUOCBTQ05kNjQKKyMgZWxpZiBJTlRfRkFTVDhfTUFYID09IDB4N2ZmZgorIyAgZGVmaW5lIFNDTmRGQVNUOCAiaGQiCisjIGVsaWYgSU5UX0ZBU1Q4X01BWCA9PSAweDdmCisjICBkZWZpbmUgU0NOZEZBU1Q4ICJoaGQiCisjIGVsc2UKKyMgIGRlZmluZSBTQ05kRkFTVDggImQiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05pRkFTVDggfHwgMAorIyB1bmRlZiBTQ05pRkFTVDgKKyMgaWYgSU5UX0ZBU1Q4X01BWCA+IElOVDMyX01BWAorIyAgZGVmaW5lIFNDTmlGQVNUOCBTQ05pNjQKKyMgZWxpZiBJTlRfRkFTVDhfTUFYID09IDB4N2ZmZgorIyAgZGVmaW5lIFNDTmlGQVNUOCAiaGkiCisjIGVsaWYgSU5UX0ZBU1Q4X01BWCA9PSAweDdmCisjICBkZWZpbmUgU0NOaUZBU1Q4ICJoaGkiCisjIGVsc2UKKyMgIGRlZmluZSBTQ05pRkFTVDggImkiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05vRkFTVDggfHwgMAorIyB1bmRlZiBTQ05vRkFTVDgKKyMgaWYgVUlOVF9GQVNUOF9NQVggPiBVSU5UMzJfTUFYCisjICBkZWZpbmUgU0NOb0ZBU1Q4IFNDTm82NAorIyBlbGlmIFVJTlRfRkFTVDhfTUFYID09IDB4ZmZmZgorIyAgZGVmaW5lIFNDTm9GQVNUOCAiaG8iCisjIGVsaWYgVUlOVF9GQVNUOF9NQVggPT0gMHhmZgorIyAgZGVmaW5lIFNDTm9GQVNUOCAiaGhvIgorIyBlbHNlCisjICBkZWZpbmUgU0NOb0ZBU1Q4ICJvIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOdUZBU1Q4IHx8IDAKKyMgdW5kZWYgU0NOdUZBU1Q4CisjIGlmIFVJTlRfRkFTVDhfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFNDTnVGQVNUOCBTQ051NjQKKyMgZWxpZiBVSU5UX0ZBU1Q4X01BWCA9PSAweGZmZmYKKyMgIGRlZmluZSBTQ051RkFTVDggImh1IgorIyBlbGlmIFVJTlRfRkFTVDhfTUFYID09IDB4ZmYKKyMgIGRlZmluZSBTQ051RkFTVDggImhodSIKKyMgZWxzZQorIyAgZGVmaW5lIFNDTnVGQVNUOCAidSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTnhGQVNUOCB8fCAwCisjIHVuZGVmIFNDTnhGQVNUOAorIyBpZiBVSU5UX0ZBU1Q4X01BWCA+IFVJTlQzMl9NQVgKKyMgIGRlZmluZSBTQ054RkFTVDggU0NOeDY0CisjIGVsaWYgVUlOVF9GQVNUOF9NQVggPT0gMHhmZmZmCisjICBkZWZpbmUgU0NOeEZBU1Q4ICJoeCIKKyMgZWxpZiBVSU5UX0ZBU1Q4X01BWCA9PSAweGZmCisjICBkZWZpbmUgU0NOeEZBU1Q4ICJoaHgiCisjIGVsc2UKKyMgIGRlZmluZSBTQ054RkFTVDggIngiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05kRkFTVDE2IHx8IDAKKyMgdW5kZWYgU0NOZEZBU1QxNgorIyBpZiBJTlRfRkFTVDE2X01BWCA+IElOVDMyX01BWAorIyAgZGVmaW5lIFNDTmRGQVNUMTYgU0NOZDY0CisjIGVsaWYgSU5UX0ZBU1QxNl9NQVggPT0gMHg3ZmZmCisjICBkZWZpbmUgU0NOZEZBU1QxNiAiaGQiCisjIGVsc2UKKyMgIGRlZmluZSBTQ05kRkFTVDE2ICJkIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOaUZBU1QxNiB8fCAwCisjIHVuZGVmIFNDTmlGQVNUMTYKKyMgaWYgSU5UX0ZBU1QxNl9NQVggPiBJTlQzMl9NQVgKKyMgIGRlZmluZSBTQ05pRkFTVDE2IFNDTmk2NAorIyBlbGlmIElOVF9GQVNUMTZfTUFYID09IDB4N2ZmZgorIyAgZGVmaW5lIFNDTmlGQVNUMTYgImhpIgorIyBlbHNlCisjICBkZWZpbmUgU0NOaUZBU1QxNiAiaSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTm9GQVNUMTYgfHwgMAorIyB1bmRlZiBTQ05vRkFTVDE2CisjIGlmIFVJTlRfRkFTVDE2X01BWCA+IFVJTlQzMl9NQVgKKyMgIGRlZmluZSBTQ05vRkFTVDE2IFNDTm82NAorIyBlbGlmIFVJTlRfRkFTVDE2X01BWCA9PSAweGZmZmYKKyMgIGRlZmluZSBTQ05vRkFTVDE2ICJobyIKKyMgZWxzZQorIyAgZGVmaW5lIFNDTm9GQVNUMTYgIm8iCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ051RkFTVDE2IHx8IDAKKyMgdW5kZWYgU0NOdUZBU1QxNgorIyBpZiBVSU5UX0ZBU1QxNl9NQVggPiBVSU5UMzJfTUFYCisjICBkZWZpbmUgU0NOdUZBU1QxNiBTQ051NjQKKyMgZWxpZiBVSU5UX0ZBU1QxNl9NQVggPT0gMHhmZmZmCisjICBkZWZpbmUgU0NOdUZBU1QxNiAiaHUiCisjIGVsc2UKKyMgIGRlZmluZSBTQ051RkFTVDE2ICJ1IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOeEZBU1QxNiB8fCAwCisjIHVuZGVmIFNDTnhGQVNUMTYKKyMgaWYgVUlOVF9GQVNUMTZfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFNDTnhGQVNUMTYgU0NOeDY0CisjIGVsaWYgVUlOVF9GQVNUMTZfTUFYID09IDB4ZmZmZgorIyAgZGVmaW5lIFNDTnhGQVNUMTYgImh4IgorIyBlbHNlCisjICBkZWZpbmUgU0NOeEZBU1QxNiAieCIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTmRGQVNUMzIgfHwgMAorIyB1bmRlZiBTQ05kRkFTVDMyCisjIGlmIElOVF9GQVNUMzJfTUFYID4gSU5UMzJfTUFYCisjICBkZWZpbmUgU0NOZEZBU1QzMiBTQ05kNjQKKyMgZWxzZQorIyAgZGVmaW5lIFNDTmRGQVNUMzIgImQiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05pRkFTVDMyIHx8IDAKKyMgdW5kZWYgU0NOaUZBU1QzMgorIyBpZiBJTlRfRkFTVDMyX01BWCA+IElOVDMyX01BWAorIyAgZGVmaW5lIFNDTmlGQVNUMzIgU0NOaTY0CisjIGVsc2UKKyMgIGRlZmluZSBTQ05pRkFTVDMyICJpIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOb0ZBU1QzMiB8fCAwCisjIHVuZGVmIFNDTm9GQVNUMzIKKyMgaWYgVUlOVF9GQVNUMzJfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFNDTm9GQVNUMzIgU0NObzY0CisjIGVsc2UKKyMgIGRlZmluZSBTQ05vRkFTVDMyICJvIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOdUZBU1QzMiB8fCAwCisjIHVuZGVmIFNDTnVGQVNUMzIKKyMgaWYgVUlOVF9GQVNUMzJfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFNDTnVGQVNUMzIgU0NOdTY0CisjIGVsc2UKKyMgIGRlZmluZSBTQ051RkFTVDMyICJ1IgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOeEZBU1QzMiB8fCAwCisjIHVuZGVmIFNDTnhGQVNUMzIKKyMgaWYgVUlOVF9GQVNUMzJfTUFYID4gVUlOVDMyX01BWAorIyAgZGVmaW5lIFNDTnhGQVNUMzIgU0NOeDY0CisjIGVsc2UKKyMgIGRlZmluZSBTQ054RkFTVDMyICJ4IgorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgSU5UNjRfTUFYCisjIGlmICFkZWZpbmVkIFNDTmRGQVNUNjQgfHwgMAorIyAgdW5kZWYgU0NOZEZBU1Q2NAorIyAgZGVmaW5lIFNDTmRGQVNUNjQgU0NOZDY0CisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTmlGQVNUNjQgfHwgMAorIyAgdW5kZWYgU0NOaUZBU1Q2NAorIyAgZGVmaW5lIFNDTmlGQVNUNjQgU0NOaTY0CisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBVSU5UNjRfTUFYCisjIGlmICFkZWZpbmVkIFNDTm9GQVNUNjQgfHwgMAorIyAgdW5kZWYgU0NOb0ZBU1Q2NAorIyAgZGVmaW5lIFNDTm9GQVNUNjQgU0NObzY0CisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTnVGQVNUNjQgfHwgMAorIyAgdW5kZWYgU0NOdUZBU1Q2NAorIyAgZGVmaW5lIFNDTnVGQVNUNjQgU0NOdTY0CisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTnhGQVNUNjQgfHwgMAorIyAgdW5kZWYgU0NOeEZBU1Q2NAorIyAgZGVmaW5lIFNDTnhGQVNUNjQgU0NOeDY0CisjIGVuZGlmCisjZW5kaWYKKworI2lmICFkZWZpbmVkIFNDTmRNQVggfHwgMAorIyB1bmRlZiBTQ05kTUFYCisjIGlmIDEKKyMgIGRlZmluZSBTQ05kTUFYIFNDTmQ2NAorIyBlbHNlCisjICBkZWZpbmUgU0NOZE1BWCAibGQiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05pTUFYIHx8IDAKKyMgdW5kZWYgU0NOaU1BWAorIyBpZiAxCisjICBkZWZpbmUgU0NOaU1BWCBTQ05pNjQKKyMgZWxzZQorIyAgZGVmaW5lIFNDTmlNQVggImxpIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOb01BWCB8fCAwCisjIHVuZGVmIFNDTm9NQVgKKyMgaWYgMQorIyAgZGVmaW5lIFNDTm9NQVggU0NObzY0CisjIGVsc2UKKyMgIGRlZmluZSBTQ05vTUFYICJsbyIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTnVNQVggfHwgMAorIyB1bmRlZiBTQ051TUFYCisjIGlmIDEKKyMgIGRlZmluZSBTQ051TUFYIFNDTnU2NAorIyBlbHNlCisjICBkZWZpbmUgU0NOdU1BWCAibHUiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ054TUFYIHx8IDAKKyMgdW5kZWYgU0NOeE1BWAorIyBpZiAxCisjICBkZWZpbmUgU0NOeE1BWCBTQ054NjQKKyMgZWxzZQorIyAgZGVmaW5lIFNDTnhNQVggImx4IgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCBTQ05kUFRSIHx8IDAKKyMgdW5kZWYgU0NOZFBUUgorIyBpZmRlZiBJTlRQVFJfTUFYCisjICBkZWZpbmUgU0NOZFBUUiAibCIgImQiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05pUFRSIHx8IDAKKyMgdW5kZWYgU0NOaVBUUgorIyBpZmRlZiBJTlRQVFJfTUFYCisjICBkZWZpbmUgU0NOaVBUUiAibCIgImkiCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBTQ05vUFRSIHx8IDAKKyMgdW5kZWYgU0NOb1BUUgorIyBpZmRlZiBVSU5UUFRSX01BWAorIyAgZGVmaW5lIFNDTm9QVFIgImwiICJvIgorIyBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQgU0NOdVBUUiB8fCAwCisjIHVuZGVmIFNDTnVQVFIKKyMgaWZkZWYgVUlOVFBUUl9NQVgKKyMgIGRlZmluZSBTQ051UFRSICJsIiAidSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkIFNDTnhQVFIgfHwgMAorIyB1bmRlZiBTQ054UFRSCisjIGlmZGVmIFVJTlRQVFJfTUFYCisjICBkZWZpbmUgU0NOeFBUUiAibCIgIngiCisjIGVuZGlmCisjZW5kaWYKKworLyogNy44LjIgRnVuY3Rpb25zIGZvciBncmVhdGVzdC13aWR0aCBpbnRlZ2VyIHR5cGVzICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIDAKKyMgaWYgITEKK2V4dGVybiBpbnRtYXhfdCBpbWF4YWJzIChpbnRtYXhfdCk7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGltYXhhYnMKKyMgaWYgSEFWRV9SQVdfREVDTF9JTUFYQUJTCitfR0xfV0FSTl9PTl9VU0UgKGltYXhhYnMsICJpbWF4YWJzIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBpbWF4YWJzIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmICExCisjICBpZiAhR05VTElCX2RlZmluZWRfaW1heGRpdl90Cit0eXBlZGVmIHN0cnVjdCB7IGludG1heF90IHF1b3Q7IGludG1heF90IHJlbTsgfSBpbWF4ZGl2X3Q7CisjICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX2ltYXhkaXZfdCAxCisjICBlbmRpZgorZXh0ZXJuIGltYXhkaXZfdCBpbWF4ZGl2IChpbnRtYXhfdCwgaW50bWF4X3QpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBpbWF4ZGl2CisjIGlmIEhBVkVfUkFXX0RFQ0xfSU1BWERJVgorX0dMX1dBUk5fT05fVVNFIChpbWF4ZGl2LCAiaW1heGRpdiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgaW1heGRpdiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHN0cnRvaW1heAorIyAgIGRlZmluZSBzdHJ0b2ltYXggcnBsX3N0cnRvaW1heAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHN0cnRvaW1heCwgaW50bWF4X3QsCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzdHJ0b2ltYXgsIGludG1heF90LCAoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpKTsKKyMgZWxzZQorIyAgaWYgITEKKyMgICB1bmRlZiBzdHJ0b2ltYXgKK19HTF9GVU5DREVDTF9TWVMgKHN0cnRvaW1heCwgaW50bWF4X3QsCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc3RydG9pbWF4LCBpbnRtYXhfdCwgKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzdHJ0b2ltYXgpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJ0b2ltYXgKKyMgaWYgSEFWRV9SQVdfREVDTF9TVFJUT0lNQVgKK19HTF9XQVJOX09OX1VTRSAoc3RydG9pbWF4LCAic3RydG9pbWF4IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHJ0b2ltYXggZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgITEKKyMgIHVuZGVmIHN0cnRvdW1heAorX0dMX0ZVTkNERUNMX1NZUyAoc3RydG91bWF4LCB1aW50bWF4X3QsCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzdHJ0b3VtYXgsIHVpbnRtYXhfdCwgKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChzdHJ0b3VtYXgpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJ0b3VtYXgKKyMgaWYgSEFWRV9SQVdfREVDTF9TVFJUT1VNQVgKK19HTF9XQVJOX09OX1VTRSAoc3RydG91bWF4LCAic3RydG91bWF4IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHJ0b3VtYXggZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworLyogRG9uJ3QgYm90aGVyIGRlZmluaW5nIG9yIGRlY2xhcmluZyB3Y3N0b2ltYXggYW5kIHdjc3RvdW1heCwgc2luY2UKKyAgIHdpZGUtY2hhcmFjdGVyIGZ1bmN0aW9ucyBsaWtlIHRoaXMgYXJlIGhhcmRseSBldmVyIHVzZWZ1bC4gICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiAhZGVmaW5lZCBJTlRUWVBFU19IICYmICFkZWZpbmVkIF9HTF9KVVNUX0lOQ0xVREVfU1lTVEVNX0lOVFRZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2xpbnV4LWxpYi9tYXRoLmggYi9saW51eC1saWIvbWF0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMWVkOTgKLS0tIC9kZXYvbnVsbAorKysgYi9saW51eC1saWIvbWF0aC5oCkBAIC0wLDAgKzEsMjU4NyBAQAorLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLworLyogQSBHTlUtbGlrZSA8bWF0aC5oPi4KKworICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMsIDIwMDctMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBfR0xfTUFUSF9ICisKKyNpZiBfX0dOVUNfXyA+PSAzCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisjZW5kaWYKKworCisvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisjaW5jbHVkZV9uZXh0IDxtYXRoLmg+CisKKyNpZm5kZWYgX0dMX01BVEhfSAorI2RlZmluZSBfR0xfTUFUSF9ICisKK19HTF9JTkxJTkVfSEVBREVSX0JFR0lOCisjaWZuZGVmIF9HTF9NQVRIX0lOTElORQorIyBkZWZpbmUgX0dMX01BVEhfSU5MSU5FIF9HTF9JTkxJTkUKKyNlbmRpZgorCisvKiBUaGUgZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTCBldGMuIGFyZSBjb3BpZWQgaGVyZS4gICovCisjaWZuZGVmIF9HTF9DWFhERUZTX0gKKyNkZWZpbmUgX0dMX0NYWERFRlNfSAorCisvKiBUaGUgdGhyZWUgbW9zdCBmcmVxdWVudCB1c2UgY2FzZXMgb2YgdGhlc2UgbWFjcm9zIGFyZToKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgc3Vic3RpdHV0ZSBmb3IgYSBmdW5jdGlvbiB0aGF0IGlzIG1pc3Npbmcgb24gc29tZQorICAgICBwbGF0Zm9ybXMsIGJ1dCBpcyBkZWNsYXJlZCBhbmQgd29ya3MgZmluZSBvbiB0aGUgcGxhdGZvcm1zIG9uIHdoaWNoCisgICAgIGl0IGV4aXN0czoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmICFASEFWRV9GT09ACisgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIGFsbCBwbGF0Zm9ybXMsCisgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIHBsYXRmb3JtczoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorICAgICAgICMgICB1bmRlZiBmb28KKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworICAgICAgICMgZWxzZQorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIHNvbWUgcGxhdGZvcm1zCisgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIG9mIHRoZW0gYW5kCisgICAgIGlzIGFkZGl0aW9uYWxseSBlaXRoZXIgbWlzc2luZyBvciB1bmRlY2xhcmVkIG9uIHNvbWUgb3RoZXIgcGxhdGZvcm1zOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisgICAgICAgIyAgIHVuZGVmIGZvbworICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CisgICAgICAgIyBlbHNlCisgICAgICAgIyAgaWYgIUBIQVZFX0ZPT0AgICBvciAgIGlmICFASEFWRV9ERUNMX0ZPT0AKKyAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorKi8KKworLyogX0dMX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuICJDIgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4KKyNlbmRpZgorCisvKiBfR0xfRlVOQ0RFQ0xfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGRlY2xhcmVzIGEgcmVwbGFjZW1lbnQgZnVuY3Rpb24sIG5hbWVkIHJwbF9mdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9GVU5DREVDTF9SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICovCisjZGVmaW5lIF9HTF9GVU5DREVDTF9SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0ZVTkNERUNMX1JQTF8xIChycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKQorI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMXzEocnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9FWFRFUk5fQyByZXR0eXBlIHJwbF9mdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKworLyogX0dMX0ZVTkNERUNMX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBkZWNsYXJlcyB0aGUgc3lzdGVtIGZ1bmN0aW9uLCBuYW1lZCBmdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9GVU5DREVDTF9TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICovCisjZGVmaW5lIF9HTF9GVU5DREVDTF9TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0VYVEVSTl9DIHJldHR5cGUgZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisKKy8qIF9HTF9DWFhBTElBU19SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHJwbF9mdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFIGlzIGRlZmluZWQuCisgICBFeGFtcGxlOgorICAgICBfR0xfQ1hYQUxJQVNfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKyAqLworI2RlZmluZSBfR0xfQ1hYQUxJQVNfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycykKKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OnJwbF9mdW5jOyAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gcnBsX2Z1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQKKyAgIGRlY2xhcmF0aW9uLiAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IKKyAgIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpycGxfZnVuYyk7ICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHRoZSBzeXN0ZW0gcHJvdmlkZWQgZnVuY3Rpb24gZnVuYywgaWYgR05VTElCX05BTUVTUEFDRQorICAgaXMgZGVmaW5lZC4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9DWFhBTElBU19TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyAgLyogSWYgd2Ugd2VyZSB0byB3cml0ZQorICAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOworICAgICBsaWtlIGFib3ZlIGluIF9HTF9DWFhBTElBU19SUExfMSwgdGhlIGNvbXBpbGVyIGNvdWxkIG9wdGltaXplIGNhbGxzCisgICAgIGJldHRlciAocmVtb3ZlIGFuIGluZGlyZWN0aW9uIHRocm91Z2ggYSAnc3RhdGljJyBwb2ludGVyIHZhcmlhYmxlKSwKKyAgICAgYnV0IHRoZW4gdGhlIF9HTF9DWFhBTElBU1dBUk4gbWFjcm8gYmVsb3cgd291bGQgY2F1c2UgYSB3YXJuaW5nIG5vdCBvbmx5CisgICAgIGZvciB1c2VzIG9mIDo6ZnVuYyBidXQgYWxzbyBmb3IgdXNlcyBvZiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jLiAgKi8KKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGZ1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgZGVjbGFyYXRpb24uCisgICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvciB0aGF0IHdvdWxkCisgICBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpmdW5jKTsgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMsIHJldHR5cGUyLCBwYXJhbWV0ZXJzMik7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGlzIHBpY2tlZCBhbW9uZyBhIHNldCBvZiBvdmVybG9hZGVkIGZ1bmN0aW9ucywKKyAgIG5hbWVseSB0aGUgb25lIHdpdGggcmV0dHlwZTIgYW5kIHBhcmFtZXRlcnMyLiAgVHdvIGNvbnNlY3V0aXZlIGNhc3RzCisgICBhcmUgdXNlZCB0byBzaWxlbmNlIHRoZSAiY2Fubm90IGZpbmQgYSBtYXRjaCIgYW5kICJpbnZhbGlkIGNvbnZlcnNpb24iCisgICBlcnJvcnMgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisgIC8qIFRoZSBvdXRlciBjYXN0IG11c3QgYmUgYSByZWludGVycHJldF9jYXN0LgorICAgICBUaGUgaW5uZXIgY2FzdDogV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNldCBvZiBvdmVybG9hZGVkCisgICAgIGZ1bmN0aW9ucywgaXQgd29ya3MgYXMgYSBzdGF0aWNfY2FzdDw+LCBjaG9vc2luZyB0aGUgZGVzaWduYXRlZCB2YXJpYW50LgorICAgICBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2luZ2xlIHZhcmlhbnQsIGl0IHdvcmtzIGFzIGEKKyAgICAgcmVpbnRlcnByZXRfY2FzdDw+LiBUaGUgcGFyZW50aGVzaXplZCBjYXN0IHN5bnRheCB3b3JrcyBib3RoIHdheXMuICAqLworIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChyZXR0eXBlMigqKXBhcmFtZXRlcnMyKSg6OmZ1bmMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTV0FSTiAoZnVuYyk7CisgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiA6OmZ1bmMgaXMgdXNlZCBidXQgbm90IHdoZW4KKyAgIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gIGZ1bmMgbXVzdCBiZSBkZWZpbmVkIHdpdGhvdXQgb3ZlcmxvYWRlZAorICAgdmFyaWFudHMuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk5fMSAoZnVuYywgR05VTElCX05BTUVTUEFDRSkKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMShmdW5jLG5hbWVzcGFjZSkgXAorICAgX0dMX0NYWEFMSUFTV0FSTl8yIChmdW5jLCBuYW1lc3BhY2UpCisvKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKyAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworIyBpZiAhX19PUFRJTUlaRV9fCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgX0dMX1dBUk5fT05fVVNFIChmdW5jLCBcCisgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworIyBlbHNlCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNXQVJOMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiB0aGUgZ2l2ZW4gb3ZlcmxvYWRlZCB2YXJpYW50IG9mIDo6ZnVuYworICAgaXMgdXNlZCBidXQgbm90IHdoZW4gR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk4xXzEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdOVUxJQl9OQU1FU1BBQ0UpCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgX0dMX0NYWEFMSUFTV0FSTjFfMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgbmFtZXNwYWNlKQorLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKyMgaWYgIV9fT1BUSU1JWkVfXworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisjZW5kaWYgLyogX0dMX0NYWERFRlNfSCAqLworCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwgaXMgY29waWVkIGhlcmUuICAqLworLyogX0dMX0FSR19OT05OVUxMKChuLC4uLixtKSkgdGVsbHMgdGhlIGNvbXBpbGVyIGFuZCBzdGF0aWMgYW5hbHl6ZXIgdG9vbHMKKyAgIHRoYXQgdGhlIHZhbHVlcyBwYXNzZWQgYXMgYXJndW1lbnRzIG4sIC4uLiwgbSBtdXN0IGJlIG5vbi1OVUxMIHBvaW50ZXJzLgorICAgbiA9IDEgc3RhbmRzIGZvciB0aGUgZmlyc3QgYXJndW1lbnQsIG4gPSAyIGZvciB0aGUgc2Vjb25kIGFyZ3VtZW50IGV0Yy4gICovCisjaWZuZGVmIF9HTF9BUkdfTk9OTlVMTAorIyBpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSB8fCBfX0dOVUNfXyA+IDMKKyMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKSBfX2F0dHJpYnV0ZV9fICgoX19ub25udWxsX18gcGFyYW1zKSkKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpCisjIGVuZGlmCisjZW5kaWYKKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFCisKKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCisvKiBBIGNvbXBpbGVyIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDQuMy4wIGFuZCBsYXRlci4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobWVzc2FnZSkpKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24KKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisjIGVuZGlmCisjZW5kaWYKKworLyogX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuY3Rpb24sIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsICJzdHJpbmciKQorICAgaXMgbGlrZSBfR0xfV0FSTl9PTl9VU0UgKGZ1bmN0aW9uLCAic3RyaW5nIiksIGV4Y2VwdCB0aGF0IHRoZSBmdW5jdGlvbiBpcworICAgZGVjbGFyZWQgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLCBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLAorICAgYW5kIGF0dHJpYnV0ZXMuCisgICBUaGlzIHZhcmlhbnQgaXMgdXNlZnVsIGZvciBvdmVybG9hZGVkIGZ1bmN0aW9ucyBpbiBDKysuIF9HTF9XQVJOX09OX1VTRSBkb2VzCisgICBub3Qgd29yayBpbiB0aGlzIGNhc2UuICAqLworI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0VfQ1hYCisjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyBcCisgICAgIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobXNnKSkpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisvKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBfR0xfV0FSTl9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX0VYVEVSTl9DCisjIGlmIGRlZmluZWQgX19jcGx1c3BsdXMKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4gIkMiCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4KKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKKy8qIEhlbHBlciBtYWNyb3MgdG8gZGVmaW5lIHR5cGUtZ2VuZXJpYyBmdW5jdGlvbiBGVU5DIGFzIG92ZXJsb2FkZWQgZnVuY3Rpb25zLAorICAgcmF0aGVyIHRoYW4gYXMgbWFjcm9zIGxpa2UgaW4gQy4gIFBPU0lYIGRlY2xhcmVzIHRoZXNlIHdpdGggYW4gYXJndW1lbnQgb2YKKyAgIHJlYWwtZmxvYXRpbmcgKHRoYXQgaXMsIG9uZSBvZiBmbG9hdCwgZG91YmxlLCBvciBsb25nIGRvdWJsZSkuICAqLworIyBkZWZpbmUgX0dMX01BVEhfQ1hYX1JFQUxfRkxPQVRJTkdfREVDTF8xKGZ1bmMpIFwKK3N0YXRpYyBpbmxpbmUgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorX2dsX2N4eF8gIyMgZnVuYyAjIyBmIChmbG9hdCBmKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcmV0dXJuIGZ1bmMgKGYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitzdGF0aWMgaW5saW5lIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK19nbF9jeHhfICMjIGZ1bmMgIyMgZCAoZG91YmxlIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHJldHVybiBmdW5jIChkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3RhdGljIGlubGluZSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitfZ2xfY3h4XyAjIyBmdW5jICMjIGwgKGxvbmcgZG91YmxlIGwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICByZXR1cm4gZnVuYyAobCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisjIGRlZmluZSBfR0xfTUFUSF9DWFhfUkVBTF9GTE9BVElOR19ERUNMXzIoZnVuYykgXAoraW5saW5lIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitmdW5jIChmbG9hdCBmKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICByZXR1cm4gX2dsX2N4eF8gIyMgZnVuYyAjIyBmIChmKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2lubGluZSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZnVuYyAoZG91YmxlIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcmV0dXJuIF9nbF9jeHhfICMjIGZ1bmMgIyMgZCAoZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitpbmxpbmUgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2Z1bmMgKGxvbmcgZG91YmxlIGwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHJldHVybiBfZ2xfY3h4XyAjIyBmdW5jICMjIGwgKGwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKyNlbmRpZgorCisvKiBIZWxwZXIgbWFjcm9zIHRvIGRlZmluZSBhIHBvcnRhYmlsaXR5IHdhcm5pbmcgZm9yIHRoZQorICAgY2xhc3NpZmljYXRpb24gbWFjcm8gRlVOQyBjYWxsZWQgd2l0aCBWQUxVRS4gIFBPU0lYIGRlY2xhcmVzIHRoZQorICAgY2xhc3NpZmljYXRpb24gbWFjcm9zIHdpdGggYW4gYXJndW1lbnQgb2YgcmVhbC1mbG9hdGluZyAodGhhdCBpcywKKyAgIG9uZSBvZiBmbG9hdCwgZG91YmxlLCBvciBsb25nIGRvdWJsZSkuICAqLworI2RlZmluZSBfR0xfV0FSTl9SRUFMX0ZMT0FUSU5HX0RFQ0woZnVuYykgXAorX0dMX01BVEhfSU5MSU5FIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitycGxfICMjIGZ1bmMgIyMgZiAoZmxvYXQgZikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICByZXR1cm4gZnVuYyAoZik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK19HTF9NQVRIX0lOTElORSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorcnBsXyAjIyBmdW5jICMjIGQgKGRvdWJsZSBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcmV0dXJuIGZ1bmMgKGQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitfR0xfTUFUSF9JTkxJTkUgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3JwbF8gIyMgZnVuYyAjIyBsIChsb25nIGRvdWJsZSBsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHJldHVybiBmdW5jIChsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorX0dMX1dBUk5fT05fVVNFIChycGxfICMjIGZ1bmMgIyMgZiwgI2Z1bmMgIiBpcyB1bnBvcnRhYmxlIC0gIiAgICAgICBcCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSAiICNmdW5jICIgZm9yIHBvcnRhYmlsaXR5Iik7ICAgIFwKK19HTF9XQVJOX09OX1VTRSAocnBsXyAjIyBmdW5jICMjIGQsICNmdW5jICIgaXMgdW5wb3J0YWJsZSAtICIgICAgICAgXAorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgIiAjZnVuYyAiIGZvciBwb3J0YWJpbGl0eSIpOyAgICBcCitfR0xfV0FSTl9PTl9VU0UgKHJwbF8gIyMgZnVuYyAjIyBsLCAjZnVuYyAiIGlzIHVucG9ydGFibGUgLSAiICAgICAgIFwKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlICIgI2Z1bmMgIiBmb3IgcG9ydGFiaWxpdHkiKQorI2RlZmluZSBfR0xfV0FSTl9SRUFMX0ZMT0FUSU5HX0lNUEwoZnVuYywgdmFsdWUpIFwKKyAgKHNpemVvZiAodmFsdWUpID09IHNpemVvZiAoZmxvYXQpID8gcnBsXyAjIyBmdW5jICMjIGYgKHZhbHVlKSAgICAgXAorICAgOiBzaXplb2YgKHZhbHVlKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBycGxfICMjIGZ1bmMgIyMgZCAodmFsdWUpICBcCisgICA6IHJwbF8gIyMgZnVuYyAjIyBsICh2YWx1ZSkpCisKKworI2lmIDAKKy8qIFB1bGwgaW4gYSBmdW5jdGlvbiB0aGF0IGZpeGVzIHRoZSAnaW50JyB0byAnbG9uZyBkb3VibGUnIGNvbnZlcnNpb24KKyAgIG9mIGdsaWJjIDIuNy4gICovCitfR0xfRVhURVJOX0Mgdm9pZCBfUXBfaXRvcSAobG9uZyBkb3VibGUgKiwgaW50KTsKK3N0YXRpYyB2b2lkICgqX2dsX21hdGhfZml4X2l0b2xkKSAobG9uZyBkb3VibGUgKiwgaW50KSA9IF9RcF9pdG9xOworI2VuZGlmCisKKworLyogUE9TSVggYWxsb3dzIHBsYXRmb3JtcyB0aGF0IGRvbid0IHN1cHBvcnQgTkFOLiAgQnV0IGFsbCBtYWpvcgorICAgbWFjaGluZXMgaW4gdGhlIHBhc3QgMTUgeWVhcnMgaGF2ZSBzdXBwb3J0ZWQgc29tZXRoaW5nIGNsb3NlIHRvCisgICBJRUVFIE5hTiwgc28gd2UgZGVmaW5lIHRoaXMgdW5jb25kaXRpb25hbGx5LiAgV2UgYWxzbyBtdXN0IGRlZmluZQorICAgaXQgb24gcGxhdGZvcm1zIGxpa2UgU29sYXJpcyAxMCwgd2hlcmUgTkFOIGlzIHByZXNlbnQgYnV0IGRlZmluZWQKKyAgIGFzIGEgZnVuY3Rpb24gcG9pbnRlciByYXRoZXIgdGhhbiBhIGZsb2F0aW5nIHBvaW50IGNvbnN0YW50LiAgKi8KKyNpZiAhZGVmaW5lZCBOQU4gfHwgMAorIyBpZiAhR05VTElCX2RlZmluZWRfTkFOCisjICB1bmRlZiBOQU4KKyAgLyogVGhlIENvbXBhcSAoZXgtREVDKSBDIDYuNCBjb21waWxlciBhbmQgdGhlIE1pY3Jvc29mdCBNU1ZDIDkgY29tcGlsZXIKKyAgICAgY2hva2Ugb24gdGhlIGV4cHJlc3Npb24gMC4wIC8gMC4wLiAgKi8KKyMgIGlmIGRlZmluZWQgX19ERUNDIHx8IGRlZmluZWQgX01TQ19WRVIKK19HTF9NQVRIX0lOTElORSBmbG9hdAorX05hTiAoKQoreworICBzdGF0aWMgZmxvYXQgemVybyA9IDAuMGY7CisgIHJldHVybiB6ZXJvIC8gemVybzsKK30KKyMgICBkZWZpbmUgTkFOIChfTmFOKCkpCisjICBlbHNlCisjICAgZGVmaW5lIE5BTiAoMC4wZiAvIDAuMGYpCisjICBlbmRpZgorIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX05BTiAxCisjIGVuZGlmCisjZW5kaWYKKworLyogU29sYXJpcyAxMCBkZWZpbmVzIEhVR0VfVkFMLCBidXQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHJhdGhlcgorICAgdGhhbiBhIGZsb2F0aW5nIHBvaW50IGNvbnN0YW50LiAgKi8KKyNpZiAwCisjIHVuZGVmIEhVR0VfVkFMRgorIyBkZWZpbmUgSFVHRV9WQUxGICgxLjBmIC8gMC4wZikKKyMgdW5kZWYgSFVHRV9WQUwKKyMgZGVmaW5lIEhVR0VfVkFMICgxLjAgLyAwLjApCisjIHVuZGVmIEhVR0VfVkFMTAorIyBkZWZpbmUgSFVHRV9WQUxMICgxLjBMIC8gMC4wTCkKKyNlbmRpZgorCisvKiBIVUdFX1ZBTEYgaXMgYSAnZmxvYXQnIEluZmluaXR5LiAgKi8KKyNpZm5kZWYgSFVHRV9WQUxGCisjIGlmIGRlZmluZWQgX01TQ19WRVIKKy8qIFRoZSBNaWNyb3NvZnQgTVNWQyA5IGNvbXBpbGVyIGNob2tlcyBvbiB0aGUgZXhwcmVzc2lvbiAxLjBmIC8gMC4wZi4gICovCisjICBkZWZpbmUgSFVHRV9WQUxGICgxZTI1ZiAqIDFlMjVmKQorIyBlbHNlCisjICBkZWZpbmUgSFVHRV9WQUxGICgxLjBmIC8gMC4wZikKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBIVUdFX1ZBTCBpcyBhICdkb3VibGUnIEluZmluaXR5LiAgKi8KKyNpZm5kZWYgSFVHRV9WQUwKKyMgaWYgZGVmaW5lZCBfTVNDX1ZFUgorLyogVGhlIE1pY3Jvc29mdCBNU1ZDIDkgY29tcGlsZXIgY2hva2VzIG9uIHRoZSBleHByZXNzaW9uIDEuMCAvIDAuMC4gICovCisjICBkZWZpbmUgSFVHRV9WQUwgKDFlMjUwICogMWUyNTApCisjIGVsc2UKKyMgIGRlZmluZSBIVUdFX1ZBTCAoMS4wIC8gMC4wKQorIyBlbmRpZgorI2VuZGlmCisKKy8qIEhVR0VfVkFMTCBpcyBhICdsb25nIGRvdWJsZScgSW5maW5pdHkuICAqLworI2lmbmRlZiBIVUdFX1ZBTEwKKyMgaWYgZGVmaW5lZCBfTVNDX1ZFUgorLyogVGhlIE1pY3Jvc29mdCBNU1ZDIDkgY29tcGlsZXIgY2hva2VzIG9uIHRoZSBleHByZXNzaW9uIDEuMEwgLyAwLjBMLiAgKi8KKyMgIGRlZmluZSBIVUdFX1ZBTEwgKDFlMjUwTCAqIDFlMjUwTCkKKyMgZWxzZQorIyAgZGVmaW5lIEhVR0VfVkFMTCAoMS4wTCAvIDAuMEwpCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBFbnN1cmUgRlBfSUxPR0IwIGFuZCBGUF9JTE9HQk5BTiBhcmUgZGVmaW5lZC4gICovCisjaWYgIShkZWZpbmVkIEZQX0lMT0dCMCAmJiBkZWZpbmVkIEZQX0lMT0dCTkFOKQorIyBpZiBkZWZpbmVkIF9fTmV0QlNEX18gfHwgZGVmaW5lZCBfX3NnaQorICAvKiBOZXRCU0QsIElSSVggNi41OiBtYXRjaCB3aGF0IGlsb2diKCkgZG9lcyAqLworIyAgZGVmaW5lIEZQX0lMT0dCMCAgICgtIDIxNDc0ODM2NDcgLSAxKSAvKiBJTlRfTUlOICovCisjICBkZWZpbmUgRlBfSUxPR0JOQU4gKC0gMjE0NzQ4MzY0NyAtIDEpIC8qIElOVF9NSU4gKi8KKyMgZWxpZiBkZWZpbmVkIF9BSVgKKyAgLyogQUlYIDUuMTogbWF0Y2ggd2hhdCBpbG9nYigpIGRvZXMgaW4gQUlYID49IDUuMiAqLworIyAgZGVmaW5lIEZQX0lMT0dCMCAgICgtIDIxNDc0ODM2NDcgLSAxKSAvKiBJTlRfTUlOICovCisjICBkZWZpbmUgRlBfSUxPR0JOQU4gMjE0NzQ4MzY0NyAvKiBJTlRfTUFYICovCisjIGVsaWYgZGVmaW5lZCBfX3N1bgorICAvKiBTb2xhcmlzIDk6IG1hdGNoIHdoYXQgaWxvZ2IoKSBkb2VzICovCisjICBkZWZpbmUgRlBfSUxPR0IwICAgKC0gMjE0NzQ4MzY0NykgLyogLSBJTlRfTUFYICovCisjICBkZWZpbmUgRlBfSUxPR0JOQU4gMjE0NzQ4MzY0NyAvKiBJTlRfTUFYICovCisjIGVsc2UKKyAgLyogR251bGliIGRlZmluZWQgdmFsdWVzLiAgKi8KKyMgIGRlZmluZSBGUF9JTE9HQjAgICAoLSAyMTQ3NDgzNjQ3KSAvKiAtIElOVF9NQVggKi8KKyMgIGRlZmluZSBGUF9JTE9HQk5BTiAoLSAyMTQ3NDgzNjQ3IC0gMSkgLyogSU5UX01JTiAqLworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgITEKKyMgIHVuZGVmIGFjb3NmCitfR0xfRlVOQ0RFQ0xfU1lTIChhY29zZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChhY29zZiwgZmxvYXQsIChmbG9hdCB4KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChhY29zZik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGFjb3NmCisjIGlmIEhBVkVfUkFXX0RFQ0xfQUNPU0YKK19HTF9XQVJOX09OX1VTRSAoYWNvc2YsICJhY29zZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgYWNvc2YgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgITEgfHwgITEKKyMgIHVuZGVmIGFjb3NsCitfR0xfRlVOQ0RFQ0xfU1lTIChhY29zbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChhY29zbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChhY29zbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGFjb3NsCisjIGlmIEhBVkVfUkFXX0RFQ0xfQUNPU0wKK19HTF9XQVJOX09OX1VTRSAoYWNvc2wsICJhY29zbCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgYWNvc2wgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAhMQorIyAgdW5kZWYgYXNpbmYKK19HTF9GVU5DREVDTF9TWVMgKGFzaW5mLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGFzaW5mLCBmbG9hdCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKGFzaW5mKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgYXNpbmYKKyMgaWYgSEFWRV9SQVdfREVDTF9BU0lORgorX0dMX1dBUk5fT05fVVNFIChhc2luZiwgImFzaW5mIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBhc2luZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAhMSB8fCAhMQorIyAgdW5kZWYgYXNpbmwKK19HTF9GVU5DREVDTF9TWVMgKGFzaW5sLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGFzaW5sLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKGFzaW5sKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgYXNpbmwKKyMgaWYgSEFWRV9SQVdfREVDTF9BU0lOTAorX0dMX1dBUk5fT05fVVNFIChhc2lubCwgImFzaW5sIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBhc2lubCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmICExCisjICB1bmRlZiBhdGFuZgorX0dMX0ZVTkNERUNMX1NZUyAoYXRhbmYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoYXRhbmYsIGZsb2F0LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAoYXRhbmYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBhdGFuZgorIyBpZiBIQVZFX1JBV19ERUNMX0FUQU5GCitfR0xfV0FSTl9PTl9VU0UgKGF0YW5mLCAiYXRhbmYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGF0YW5mIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmICExIHx8ICExCisjICB1bmRlZiBhdGFubAorX0dMX0ZVTkNERUNMX1NZUyAoYXRhbmwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoYXRhbmwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAoYXRhbmwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBhdGFubAorIyBpZiBIQVZFX1JBV19ERUNMX0FUQU5MCitfR0xfV0FSTl9PTl9VU0UgKGF0YW5sLCAiYXRhbmwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGF0YW5sIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgITEKKyMgIHVuZGVmIGF0YW4yZgorX0dMX0ZVTkNERUNMX1NZUyAoYXRhbjJmLCBmbG9hdCwgKGZsb2F0IHksIGZsb2F0IHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGF0YW4yZiwgZmxvYXQsIChmbG9hdCB5LCBmbG9hdCB4KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChhdGFuMmYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBhdGFuMmYKKyMgaWYgSEFWRV9SQVdfREVDTF9BVEFOMkYKK19HTF9XQVJOX09OX1VTRSAoYXRhbjJmLCAiYXRhbjJmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBhdGFuMmYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGNicnRmCisjICAgZGVmaW5lIGNicnRmIHJwbF9jYnJ0ZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGNicnRmLCBmbG9hdCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGNicnRmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGNicnRmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChjYnJ0ZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChjYnJ0Zik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGNicnRmCisjIGlmIEhBVkVfUkFXX0RFQ0xfQ0JSVEYKK19HTF9XQVJOX09OX1VTRSAoY2JydGYsICJjYnJ0ZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgY2JydGYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGNicnQsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChjYnJ0LCBkb3VibGUsIChkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAoY2JydCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGNicnQKKyMgaWYgSEFWRV9SQVdfREVDTF9DQlJUCitfR0xfV0FSTl9PTl9VU0UgKGNicnQsICJjYnJ0IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBjYnJ0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgY2JydGwKKyMgICBkZWZpbmUgY2JydGwgcnBsX2NicnRsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoY2JydGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAoY2JydGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoY2JydGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGNicnRsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGNicnRsKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgY2JydGwKKyMgaWYgSEFWRV9SQVdfREVDTF9DQlJUTAorX0dMX1dBUk5fT05fVVNFIChjYnJ0bCwgImNicnRsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBjYnJ0bCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgY2VpbGYKKyMgICBkZWZpbmUgY2VpbGYgcnBsX2NlaWxmCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoY2VpbGYsIGZsb2F0LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAoY2VpbGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbHNlCisjICBpZiAhMQorIyAgIHVuZGVmIGNlaWxmCitfR0xfRlVOQ0RFQ0xfU1lTIChjZWlsZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoY2VpbGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoY2VpbGYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBjZWlsZgorIyBpZiBIQVZFX1JBV19ERUNMX0NFSUxGCitfR0xfV0FSTl9PTl9VU0UgKGNlaWxmLCAiY2VpbGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGNlaWxmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGNlaWwgcnBsX2NlaWwKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChjZWlsLCBkb3VibGUsIChkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAoY2VpbCwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoY2VpbCwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGNlaWwpOworI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgY2VpbGwKKyMgICBkZWZpbmUgY2VpbGwgcnBsX2NlaWxsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoY2VpbGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAoY2VpbGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbHNlCisjICBpZiAhMQorIyAgIHVuZGVmIGNlaWxsCitfR0xfRlVOQ0RFQ0xfU1lTIChjZWlsbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoY2VpbGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoY2VpbGwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBjZWlsbAorIyBpZiBIQVZFX1JBV19ERUNMX0NFSUxMCitfR0xfV0FSTl9PTl9VU0UgKGNlaWxsLCAiY2VpbGwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGNlaWxsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGNvcHlzaWduZiwgZmxvYXQsIChmbG9hdCB4LCBmbG9hdCB5KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChjb3B5c2lnbmYsIGZsb2F0LCAoZmxvYXQgeCwgZmxvYXQgeSkpOworX0dMX0NYWEFMSUFTV0FSTiAoY29weXNpZ25mKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgY29weXNpZ25mCisjIGlmIEhBVkVfUkFXX0RFQ0xfQ09QWVNJR05GCitfR0xfV0FSTl9PTl9VU0UgKGNvcHlzaWduZiwgImNvcHlzaWduZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgY29weXNpZ25mIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChjb3B5c2lnbiwgZG91YmxlLCAoZG91YmxlIHgsIGRvdWJsZSB5KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChjb3B5c2lnbiwgZG91YmxlLCAoZG91YmxlIHgsIGRvdWJsZSB5KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChjb3B5c2lnbik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGNvcHlzaWduCisjIGlmIEhBVkVfUkFXX0RFQ0xfQ09QWVNJR04KK19HTF9XQVJOX09OX1VTRSAoY29weXNpZ24sICJjb3B5c2lnbiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgY29weXNpZ24gZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGNvcHlzaWdubCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChjb3B5c2lnbmwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkpOworX0dMX0NYWEFMSUFTV0FSTiAoY29weXNpZ25sKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgY29weXNpZ25sCisjIGlmIEhBVkVfUkFXX0RFQ0xfQ09QWVNJR05MCitfR0xfV0FSTl9PTl9VU0UgKGNvcHlzaWduLCAiY29weXNpZ25sIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBjb3B5c2lnbmwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAhMQorIyAgdW5kZWYgY29zZgorX0dMX0ZVTkNERUNMX1NZUyAoY29zZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChjb3NmLCBmbG9hdCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKGNvc2YpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBjb3NmCisjIGlmIEhBVkVfUkFXX0RFQ0xfQ09TRgorX0dMX1dBUk5fT05fVVNFIChjb3NmLCAiY29zZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgY29zZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAhMSB8fCAhMQorIyAgdW5kZWYgY29zbAorX0dMX0ZVTkNERUNMX1NZUyAoY29zbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChjb3NsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKGNvc2wpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBjb3NsCisjIGlmIEhBVkVfUkFXX0RFQ0xfQ09TTAorX0dMX1dBUk5fT05fVVNFIChjb3NsLCAiY29zbCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgY29zbCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmICExCisjICB1bmRlZiBjb3NoZgorX0dMX0ZVTkNERUNMX1NZUyAoY29zaGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoY29zaGYsIGZsb2F0LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAoY29zaGYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBjb3NoZgorIyBpZiBIQVZFX1JBV19ERUNMX0NPU0hGCitfR0xfV0FSTl9PTl9VU0UgKGNvc2hmLCAiY29zaGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGNvc2hmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgITEKKyMgIHVuZGVmIGV4cGYKK19HTF9GVU5DREVDTF9TWVMgKGV4cGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZXhwZiwgZmxvYXQsIChmbG9hdCB4KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChleHBmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZXhwZgorIyBpZiBIQVZFX1JBV19ERUNMX0VYUEYKK19HTF9XQVJOX09OX1VTRSAoZXhwZiwgImV4cGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGV4cGYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgITEgfHwgITEKKyMgIHVuZGVmIGV4cGwKK19HTF9GVU5DREVDTF9TWVMgKGV4cGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZXhwbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChleHBsKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZXhwbAorIyBpZiBIQVZFX1JBV19ERUNMX0VYUEwKK19HTF9XQVJOX09OX1VTRSAoZXhwbCwgImV4cGwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGV4cGwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoZXhwMmYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZXhwMmYsIGZsb2F0LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAoZXhwMmYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBleHAyZgorIyBpZiBIQVZFX1JBV19ERUNMX0VYUDJGCitfR0xfV0FSTl9PTl9VU0UgKGV4cDJmLCAiZXhwMmYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGV4cDJmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZXhwMgorIyAgIGRlZmluZSBleHAyIHJwbF9leHAyCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZXhwMiwgZG91YmxlLCAoZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGV4cDIsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChleHAyLCBkb3VibGUsIChkb3VibGUgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGV4cDIsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChleHAyKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZXhwMgorIyBpZiBIQVZFX1JBV19ERUNMX0VYUDIKK19HTF9XQVJOX09OX1VTRSAoZXhwMiwgImV4cDIgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGV4cDIgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBleHAybAorIyAgIGRlZmluZSBleHAybCBycGxfZXhwMmwKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChleHAybCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChleHAybCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVsc2UKKyMgIGlmICExCisjICAgdW5kZWYgZXhwMmwKK19HTF9GVU5DREVDTF9TWVMgKGV4cDJsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChleHAybCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChleHAybCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGV4cDJsCisjIGlmIEhBVkVfUkFXX0RFQ0xfRVhQMkwKK19HTF9XQVJOX09OX1VTRSAoZXhwMmwsICJleHAybCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZXhwMmwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGV4cG0xZgorIyAgIGRlZmluZSBleHBtMWYgcnBsX2V4cG0xZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGV4cG0xZiwgZmxvYXQsIChmbG9hdCB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChleHBtMWYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoZXhwbTFmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChleHBtMWYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZXhwbTFmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZXhwbTFmCisjIGlmIEhBVkVfUkFXX0RFQ0xfRVhQTTFGCitfR0xfV0FSTl9PTl9VU0UgKGV4cG0xZiwgImV4cG0xZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZXhwbTFmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZXhwbTEKKyMgICBkZWZpbmUgZXhwbTEgcnBsX2V4cG0xCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZXhwbTEsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChleHBtMSwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGV4cG0xLCBkb3VibGUsIChkb3VibGUgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGV4cG0xLCBkb3VibGUsIChkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZXhwbTEpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBleHBtMQorIyBpZiBIQVZFX1JBV19ERUNMX0VYUE0xCitfR0xfV0FSTl9PTl9VU0UgKGV4cG0xLCAiZXhwbTEgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGV4cG0xIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmICExCisjICB1bmRlZiBleHBtMWwKK19HTF9GVU5DREVDTF9TWVMgKGV4cG0xbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChleHBtMWwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAoZXhwbTFsKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZXhwbTFsCisjIGlmIEhBVkVfUkFXX0RFQ0xfRVhQTTFMCitfR0xfV0FSTl9PTl9VU0UgKGV4cG0xbCwgImV4cG0xbCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZXhwbTFsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgITEKKyMgIHVuZGVmIGZhYnNmCitfR0xfRlVOQ0RFQ0xfU1lTIChmYWJzZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmYWJzZiwgZmxvYXQsIChmbG9hdCB4KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChmYWJzZik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZhYnNmCisjIGlmIEhBVkVfUkFXX0RFQ0xfRkFCU0YKK19HTF9XQVJOX09OX1VTRSAoZmFic2YsICJmYWJzZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZmFic2YgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmYWJzbAorIyAgIGRlZmluZSBmYWJzbCBycGxfZmFic2wKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmYWJzbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmYWJzbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVsc2UKKyMgIGlmICExCisjICAgdW5kZWYgZmFic2wKK19HTF9GVU5DREVDTF9TWVMgKGZhYnNsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmYWJzbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmYWJzbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZhYnNsCisjIGlmIEhBVkVfUkFXX0RFQ0xfRkFCU0wKK19HTF9XQVJOX09OX1VTRSAoZmFic2wsICJmYWJzbCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZmFic2wgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZsb29yZgorIyAgIGRlZmluZSBmbG9vcmYgcnBsX2Zsb29yZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZsb29yZiwgZmxvYXQsIChmbG9hdCB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmbG9vcmYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbHNlCisjICBpZiAhMQorIyAgIHVuZGVmIGZsb29yZgorX0dMX0ZVTkNERUNMX1NZUyAoZmxvb3JmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmbG9vcmYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZmxvb3JmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZmxvb3JmCisjIGlmIEhBVkVfUkFXX0RFQ0xfRkxPT1JGCitfR0xfV0FSTl9PTl9VU0UgKGZsb29yZiwgImZsb29yZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZmxvb3JmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGZsb29yIHJwbF9mbG9vcgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZsb29yLCBkb3VibGUsIChkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAoZmxvb3IsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZsb29yLCBkb3VibGUsIChkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZmxvb3IpOworI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZmxvb3JsCisjICAgZGVmaW5lIGZsb29ybCBycGxfZmxvb3JsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZmxvb3JsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGZsb29ybCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVsc2UKKyMgIGlmICExCisjICAgdW5kZWYgZmxvb3JsCitfR0xfRlVOQ0RFQ0xfU1lTIChmbG9vcmwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZsb29ybCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmbG9vcmwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmbG9vcmwKKyMgaWYgSEFWRV9SQVdfREVDTF9GTE9PUkwKK19HTF9XQVJOX09OX1VTRSAoZmxvb3JsLCAiZmxvb3JsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmbG9vcmwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZtYWYKKyMgICBkZWZpbmUgZm1hZiBycGxfZm1hZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZtYWYsIGZsb2F0LCAoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikpOworX0dMX0NYWEFMSUFTX1JQTCAoZm1hZiwgZmxvYXQsIChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChmbWFmLCBmbG9hdCwgKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmbWFmLCBmbG9hdCwgKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZtYWYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmbWFmCisjIGlmIEhBVkVfUkFXX0RFQ0xfRk1BRgorX0dMX1dBUk5fT05fVVNFIChmbWFmLCAiZm1hZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZm1hZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZtYQorIyAgIGRlZmluZSBmbWEgcnBsX2ZtYQorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZtYSwgZG91YmxlLCAoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeikpOworX0dMX0NYWEFMSUFTX1JQTCAoZm1hLCBkb3VibGUsIChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6KSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChmbWEsIGRvdWJsZSwgKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHopKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmbWEsIGRvdWJsZSwgKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHopKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZtYSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZtYQorIyBpZiBIQVZFX1JBV19ERUNMX0ZNQQorX0dMX1dBUk5fT05fVVNFIChmbWEsICJmbWEgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZtYSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZtYWwKKyMgICBkZWZpbmUgZm1hbCBycGxfZm1hbAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZtYWwsIGxvbmcgZG91YmxlLAorICAgICAgICAgICAgICAgICAgKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHksIGxvbmcgZG91YmxlIHopKTsKK19HTF9DWFhBTElBU19SUEwgKGZtYWwsIGxvbmcgZG91YmxlLAorICAgICAgICAgICAgICAgICAgKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHksIGxvbmcgZG91YmxlIHopKTsKKyMgZWxzZQorIyAgaWYgITEKKyMgICB1bmRlZiBmbWFsCitfR0xfRlVOQ0RFQ0xfU1lTIChmbWFsLCBsb25nIGRvdWJsZSwKKyAgICAgICAgICAgICAgICAgIChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5LCBsb25nIGRvdWJsZSB6KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZm1hbCwgbG9uZyBkb3VibGUsCisgICAgICAgICAgICAgICAgICAobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSwgbG9uZyBkb3VibGUgeikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZm1hbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZtYWwKKyMgaWYgSEFWRV9SQVdfREVDTF9GTUFMCitfR0xfV0FSTl9PTl9VU0UgKGZtYWwsICJmbWFsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmbWFsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmbW9kZgorIyAgIGRlZmluZSBmbW9kZiBycGxfZm1vZGYKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmbW9kZiwgZmxvYXQsIChmbG9hdCB4LCBmbG9hdCB5KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmbW9kZiwgZmxvYXQsIChmbG9hdCB4LCBmbG9hdCB5KSk7CisjIGVsc2UKKyMgIGlmICExCisjICAgdW5kZWYgZm1vZGYKK19HTF9GVU5DREVDTF9TWVMgKGZtb2RmLCBmbG9hdCwgKGZsb2F0IHgsIGZsb2F0IHkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmbW9kZiwgZmxvYXQsIChmbG9hdCB4LCBmbG9hdCB5KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmbW9kZik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZtb2RmCisjIGlmIEhBVkVfUkFXX0RFQ0xfRk1PREYKK19HTF9XQVJOX09OX1VTRSAoZm1vZGYsICJmbW9kZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZm1vZGYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmbW9kCisjICAgZGVmaW5lIGZtb2QgcnBsX2Ztb2QKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmbW9kLCBkb3VibGUsIChkb3VibGUgeCwgZG91YmxlIHkpKTsKK19HTF9DWFhBTElBU19SUEwgKGZtb2QsIGRvdWJsZSwgKGRvdWJsZSB4LCBkb3VibGUgeSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChmbW9kLCBkb3VibGUsIChkb3VibGUgeCwgZG91YmxlIHkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZtb2QpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmbW9kCisjIGlmIEhBVkVfUkFXX0RFQ0xfRk1PRAorX0dMX1dBUk5fT05fVVNFIChmbW9kLCAiZm1vZCBoYXMgcG9ydGFiaWxpdHkgcHJvYmxlbXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmbW9kIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZm1vZGwKKyMgICBkZWZpbmUgZm1vZGwgcnBsX2Ztb2RsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZm1vZGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZm1vZGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkpOworIyBlbHNlCisjICBpZiAhMQorIyAgIHVuZGVmIGZtb2RsCitfR0xfRlVOQ0RFQ0xfU1lTIChmbW9kbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZm1vZGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZm1vZGwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmbW9kbAorIyBpZiBIQVZFX1JBV19ERUNMX0ZNT0RMCitfR0xfV0FSTl9PTl9VU0UgKGZtb2RsLCAiZm1vZGwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZtb2RsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogV3JpdGUgeCBhcworICAgICB4ID0gbWFudGlzc2EgKiAyXmV4cAorICAgd2hlcmUKKyAgICAgSWYgeCBmaW5pdGUgYW5kIG5vbnplcm86IDAuNSA8PSB8bWFudGlzc2F8IDwgMS4wLgorICAgICBJZiB4IGlzIHplcm86IG1hbnRpc3NhID0geCwgZXhwID0gMC4KKyAgICAgSWYgeCBpcyBpbmZpbml0ZSBvciBOYU46IG1hbnRpc3NhID0geCwgZXhwIHVuc3BlY2lmaWVkLgorICAgU3RvcmUgZXhwIGluICpFWFBQVFIgYW5kIHJldHVybiBtYW50aXNzYS4gICovCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZyZXhwZgorIyAgIGRlZmluZSBmcmV4cGYgcnBsX2ZyZXhwZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZyZXhwZiwgZmxvYXQsIChmbG9hdCB4LCBpbnQgKmV4cHB0cikgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKGZyZXhwZiwgZmxvYXQsIChmbG9hdCB4LCBpbnQgKmV4cHB0cikpOworIyBlbHNlCisjICBpZiAhMQorIyAgIHVuZGVmIGZyZXhwZgorX0dMX0ZVTkNERUNMX1NZUyAoZnJleHBmLCBmbG9hdCwgKGZsb2F0IHgsIGludCAqZXhwcHRyKSBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZyZXhwZiwgZmxvYXQsIChmbG9hdCB4LCBpbnQgKmV4cHB0cikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZnJleHBmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZnJleHBmCisjIGlmIEhBVkVfUkFXX0RFQ0xfRlJFWFBGCitfR0xfV0FSTl9PTl9VU0UgKGZyZXhwZiwgImZyZXhwZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZnJleHBmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIFdyaXRlIHggYXMKKyAgICAgeCA9IG1hbnRpc3NhICogMl5leHAKKyAgIHdoZXJlCisgICAgIElmIHggZmluaXRlIGFuZCBub256ZXJvOiAwLjUgPD0gfG1hbnRpc3NhfCA8IDEuMC4KKyAgICAgSWYgeCBpcyB6ZXJvOiBtYW50aXNzYSA9IHgsIGV4cCA9IDAuCisgICAgIElmIHggaXMgaW5maW5pdGUgb3IgTmFOOiBtYW50aXNzYSA9IHgsIGV4cCB1bnNwZWNpZmllZC4KKyAgIFN0b3JlIGV4cCBpbiAqRVhQUFRSIGFuZCByZXR1cm4gbWFudGlzc2EuICAqLworI2lmIDEKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgZnJleHAgcnBsX2ZyZXhwCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZnJleHAsIGRvdWJsZSwgKGRvdWJsZSB4LCBpbnQgKmV4cHB0cikgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKGZyZXhwLCBkb3VibGUsIChkb3VibGUgeCwgaW50ICpleHBwdHIpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoZnJleHAsIGRvdWJsZSwgKGRvdWJsZSB4LCBpbnQgKmV4cHB0cikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZnJleHApOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmcmV4cAorLyogQXNzdW1lIGZyZXhwIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKGZyZXhwLCAiZnJleHAgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZyZXhwIGZvciBwb3J0YWJpbGl0eSIpOworI2VuZGlmCisKKy8qIFdyaXRlIHggYXMKKyAgICAgeCA9IG1hbnRpc3NhICogMl5leHAKKyAgIHdoZXJlCisgICAgIElmIHggZmluaXRlIGFuZCBub256ZXJvOiAwLjUgPD0gfG1hbnRpc3NhfCA8IDEuMC4KKyAgICAgSWYgeCBpcyB6ZXJvOiBtYW50aXNzYSA9IHgsIGV4cCA9IDAuCisgICAgIElmIHggaXMgaW5maW5pdGUgb3IgTmFOOiBtYW50aXNzYSA9IHgsIGV4cCB1bnNwZWNpZmllZC4KKyAgIFN0b3JlIGV4cCBpbiAqRVhQUFRSIGFuZCByZXR1cm4gbWFudGlzc2EuICAqLworI2lmIDEgJiYgMAorIyBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgdW5kZWYgZnJleHBsCisjICBkZWZpbmUgZnJleHBsIHJwbF9mcmV4cGwKKyMgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZyZXhwbCwgbG9uZyBkb3VibGUsCisgICAgICAgICAgICAgICAgICAobG9uZyBkb3VibGUgeCwgaW50ICpleHBwdHIpIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmcmV4cGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCwgaW50ICpleHBwdHIpKTsKKyNlbHNlCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChmcmV4cGwsIGxvbmcgZG91YmxlLAorICAgICAgICAgICAgICAgICAgKGxvbmcgZG91YmxlIHgsIGludCAqZXhwcHRyKSBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyBlbmRpZgorIyBpZiAxCitfR0xfQ1hYQUxJQVNfU1lTIChmcmV4cGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCwgaW50ICpleHBwdHIpKTsKKyMgZW5kaWYKKyNlbmRpZgorI2lmIDEgJiYgISgwICYmICExKQorX0dMX0NYWEFMSUFTV0FSTiAoZnJleHBsKTsKKyNlbmRpZgorI2lmICExICYmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZnJleHBsCisjIGlmIEhBVkVfUkFXX0RFQ0xfRlJFWFBMCitfR0xfV0FSTl9PTl9VU0UgKGZyZXhwbCwgImZyZXhwbCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZnJleHBsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogUmV0dXJuIHNxcnQoeF4yK3leMikuICAqLworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBoeXBvdGYKKyMgICBkZWZpbmUgaHlwb3RmIHJwbF9oeXBvdGYKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChoeXBvdGYsIGZsb2F0LCAoZmxvYXQgeCwgZmxvYXQgeSkpOworX0dMX0NYWEFMSUFTX1JQTCAoaHlwb3RmLCBmbG9hdCwgKGZsb2F0IHgsIGZsb2F0IHkpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGh5cG90ZiwgZmxvYXQsIChmbG9hdCB4LCBmbG9hdCB5KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoaHlwb3RmLCBmbG9hdCwgKGZsb2F0IHgsIGZsb2F0IHkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGh5cG90Zik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGh5cG90ZgorIyBpZiBIQVZFX1JBV19ERUNMX0hZUE9URgorX0dMX1dBUk5fT05fVVNFIChoeXBvdGYsICJoeXBvdGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGh5cG90ZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBSZXR1cm4gc3FydCh4XjIreV4yKS4gICovCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGh5cG90CisjICAgZGVmaW5lIGh5cG90IHJwbF9oeXBvdAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGh5cG90LCBkb3VibGUsIChkb3VibGUgeCwgZG91YmxlIHkpKTsKK19HTF9DWFhBTElBU19SUEwgKGh5cG90LCBkb3VibGUsIChkb3VibGUgeCwgZG91YmxlIHkpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoaHlwb3QsIGRvdWJsZSwgKGRvdWJsZSB4LCBkb3VibGUgeSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoaHlwb3QpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBoeXBvdAorIyBpZiBIQVZFX1JBV19ERUNMX0hZUE9UCitfR0xfV0FSTl9PTl9VU0UgKGh5cG90ZiwgImh5cG90IGhhcyBwb3J0YWJpbGl0eSBwcm9ibGVtcyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGh5cG90IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIFJldHVybiBzcXJ0KHheMit5XjIpLiAgKi8KKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgaHlwb3RsCisjICAgZGVmaW5lIGh5cG90bCBycGxfaHlwb3RsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoaHlwb3RsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHkpKTsKK19HTF9DWFhBTElBU19SUEwgKGh5cG90bCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChoeXBvdGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGh5cG90bCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChoeXBvdGwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBoeXBvdGwKKyMgaWYgSEFWRV9SQVdfREVDTF9IWVBPVEwKK19HTF9XQVJOX09OX1VTRSAoaHlwb3RsLCAiaHlwb3RsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBoeXBvdGwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGlsb2diZgorIyAgIGRlZmluZSBpbG9nYmYgcnBsX2lsb2diZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGlsb2diZiwgaW50LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAoaWxvZ2JmLCBpbnQsIChmbG9hdCB4KSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChpbG9nYmYsIGludCwgKGZsb2F0IHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChpbG9nYmYsIGludCwgKGZsb2F0IHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGlsb2diZik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGlsb2diZgorIyBpZiBIQVZFX1JBV19ERUNMX0lMT0dCRgorX0dMX1dBUk5fT05fVVNFIChpbG9nYmYsICJpbG9nYmYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGlsb2diZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGlsb2diCisjICAgZGVmaW5lIGlsb2diIHJwbF9pbG9nYgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGlsb2diLCBpbnQsIChkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAoaWxvZ2IsIGludCwgKGRvdWJsZSB4KSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChpbG9nYiwgaW50LCAoZG91YmxlIHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChpbG9nYiwgaW50LCAoZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGlsb2diKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgaWxvZ2IKKyMgaWYgSEFWRV9SQVdfREVDTF9JTE9HQgorX0dMX1dBUk5fT05fVVNFIChpbG9nYiwgImlsb2diIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBpbG9nYiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoaWxvZ2JsLCBpbnQsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChpbG9nYmwsIGludCwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKGlsb2dibCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGlsb2dibAorIyBpZiBIQVZFX1JBV19ERUNMX0lMT0dCTAorX0dMX1dBUk5fT05fVVNFIChpbG9nYmwsICJpbG9nYmwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGlsb2dibCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIFJldHVybiB4ICogMl5leHAuICAqLworI2lmIDAKKyMgaWYgITEKKyMgIHVuZGVmIGxkZXhwZgorX0dMX0ZVTkNERUNMX1NZUyAobGRleHBmLCBmbG9hdCwgKGZsb2F0IHgsIGludCBleHApKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGxkZXhwZiwgZmxvYXQsIChmbG9hdCB4LCBpbnQgZXhwKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChsZGV4cGYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBsZGV4cGYKKyMgaWYgSEFWRV9SQVdfREVDTF9MREVYUEYKK19HTF9XQVJOX09OX1VTRSAobGRleHBmLCAibGRleHBmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBsZGV4cGYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworLyogUmV0dXJuIHggKiAyXmV4cC4gICovCisjaWYgMSAmJiAwCisjIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICB1bmRlZiBsZGV4cGwKKyMgIGRlZmluZSBsZGV4cGwgcnBsX2xkZXhwbAorIyBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobGRleHBsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgsIGludCBleHApKTsKK19HTF9DWFhBTElBU19SUEwgKGxkZXhwbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4LCBpbnQgZXhwKSk7CisjZWxzZQorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAobGRleHBsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgsIGludCBleHApKTsKKyMgZW5kaWYKKyMgaWYgMQorX0dMX0NYWEFMSUFTX1NZUyAobGRleHBsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgsIGludCBleHApKTsKKyMgZW5kaWYKKyNlbmRpZgorI2lmIDEKK19HTF9DWFhBTElBU1dBUk4gKGxkZXhwbCk7CisjZW5kaWYKKyNpZiAhMSAmJiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGxkZXhwbAorIyBpZiBIQVZFX1JBV19ERUNMX0xERVhQTAorX0dMX1dBUk5fT05fVVNFIChsZGV4cGwsICJsZGV4cGwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGxkZXhwbCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbG9nZgorIyAgIGRlZmluZSBsb2dmIHJwbF9sb2dmCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobG9nZiwgZmxvYXQsIChmbG9hdCB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChsb2dmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZWxzZQorIyAgaWYgITEKKyMgICB1bmRlZiBsb2dmCitfR0xfRlVOQ0RFQ0xfU1lTIChsb2dmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChsb2dmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGxvZ2YpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBsb2dmCisjIGlmIEhBVkVfUkFXX0RFQ0xfTE9HRgorX0dMX1dBUk5fT05fVVNFIChsb2dmLCAibG9nZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbG9nZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGxvZworIyAgIGRlZmluZSBsb2cgcnBsX2xvZworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGxvZywgZG91YmxlLCAoZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGxvZywgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAobG9nLCBkb3VibGUsIChkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobG9nKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbG9nCisjIGlmIEhBVkVfUkFXX0RFQ0xfTE9HCitfR0xfV0FSTl9PTl9VU0UgKGxvZywgImxvZyBoYXMgcG9ydGFiaWxpdHkgcHJvYmxlbXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBsb2cgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBsb2dsCisjICAgZGVmaW5lIGxvZ2wgcnBsX2xvZ2wKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChsb2dsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGxvZ2wsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbHNlCisjICBpZiAhMSB8fCAhMQorIyAgIHVuZGVmIGxvZ2wKK19HTF9GVU5DREVDTF9TWVMgKGxvZ2wsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGxvZ2wsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobG9nbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGxvZ2wKKyMgaWYgSEFWRV9SQVdfREVDTF9MT0dMCitfR0xfV0FSTl9PTl9VU0UgKGxvZ2wsICJsb2dsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBsb2dsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBsb2cxMGYKKyMgICBkZWZpbmUgbG9nMTBmIHJwbF9sb2cxMGYKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChsb2cxMGYsIGZsb2F0LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAobG9nMTBmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZWxzZQorIyAgaWYgITEKKyMgICB1bmRlZiBsb2cxMGYKK19HTF9GVU5DREVDTF9TWVMgKGxvZzEwZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobG9nMTBmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGxvZzEwZik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGxvZzEwZgorIyBpZiBIQVZFX1JBV19ERUNMX0xPRzEwRgorX0dMX1dBUk5fT05fVVNFIChsb2cxMGYsICJsb2cxMGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGxvZzEwZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGxvZzEwCisjICAgZGVmaW5lIGxvZzEwIHJwbF9sb2cxMAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGxvZzEwLCBkb3VibGUsIChkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAobG9nMTAsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGxvZzEwLCBkb3VibGUsIChkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobG9nMTApOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBsb2cxMAorIyBpZiBIQVZFX1JBV19ERUNMX0xPRzEwCitfR0xfV0FSTl9PTl9VU0UgKGxvZzEwLCAibG9nMTAgaGFzIHBvcnRhYmlsaXR5IHByb2JsZW1zIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbG9nMTAgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBsb2cxMGwKKyMgICBkZWZpbmUgbG9nMTBsIHJwbF9sb2cxMGwKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChsb2cxMGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAobG9nMTBsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZWxzZQorIyAgaWYgITEgfHwgITEKKyMgICB1bmRlZiBsb2cxMGwKK19HTF9GVU5DREVDTF9TWVMgKGxvZzEwbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobG9nMTBsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGxvZzEwbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGxvZzEwbAorIyBpZiBIQVZFX1JBV19ERUNMX0xPRzEwTAorX0dMX1dBUk5fT05fVVNFIChsb2cxMGwsICJsb2cxMGwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGxvZzEwbCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbG9nMXBmCisjICAgZGVmaW5lIGxvZzFwZiBycGxfbG9nMXBmCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobG9nMXBmLCBmbG9hdCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGxvZzFwZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChsb2cxcGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGxvZzFwZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChsb2cxcGYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBsb2cxcGYKKyMgaWYgSEFWRV9SQVdfREVDTF9MT0cxUEYKK19HTF9XQVJOX09OX1VTRSAobG9nMXBmLCAibG9nMXBmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBsb2cxcGYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBsb2cxcAorIyAgIGRlZmluZSBsb2cxcCBycGxfbG9nMXAKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChsb2cxcCwgZG91YmxlLCAoZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGxvZzFwLCBkb3VibGUsIChkb3VibGUgeCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAobG9nMXAsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobG9nMXAsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChsb2cxcCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGxvZzFwCisjIGlmIEhBVkVfUkFXX0RFQ0xfTE9HMVAKK19HTF9XQVJOX09OX1VTRSAobG9nMXAsICJsb2cxcCBoYXMgcG9ydGFiaWxpdHkgcHJvYmxlbXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBsb2cxcCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGxvZzFwbAorIyAgIGRlZmluZSBsb2cxcGwgcnBsX2xvZzFwbAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGxvZzFwbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChsb2cxcGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAobG9nMXBsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChsb2cxcGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobG9nMXBsKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbG9nMXBsCisjIGlmIEhBVkVfUkFXX0RFQ0xfTE9HMVBMCitfR0xfV0FSTl9PTl9VU0UgKGxvZzFwbCwgImxvZzFwbCBoYXMgcG9ydGFiaWxpdHkgcHJvYmxlbXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBsb2cxcGwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGxvZzJmCisjICAgZGVmaW5lIGxvZzJmIHJwbF9sb2cyZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGxvZzJmLCBmbG9hdCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGxvZzJmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZWxzZQorIyAgaWYgITEKKyMgICB1bmRlZiBsb2cyZgorX0dMX0ZVTkNERUNMX1NZUyAobG9nMmYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGxvZzJmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGxvZzJmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbG9nMmYKKyMgaWYgSEFWRV9SQVdfREVDTF9MT0cyRgorX0dMX1dBUk5fT05fVVNFIChsb2cyZiwgImxvZzJmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBsb2cyZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGxvZzIKKyMgICBkZWZpbmUgbG9nMiBycGxfbG9nMgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGxvZzIsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChsb2cyLCBkb3VibGUsIChkb3VibGUgeCkpOworIyBlbHNlCisjICBpZiAhMQorIyAgIHVuZGVmIGxvZzIKK19HTF9GVU5DREVDTF9TWVMgKGxvZzIsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobG9nMiwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGxvZzIpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBsb2cyCisjIGlmIEhBVkVfUkFXX0RFQ0xfTE9HMgorX0dMX1dBUk5fT05fVVNFIChsb2cyLCAibG9nMiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbG9nMiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGxvZzJsCisjICAgZGVmaW5lIGxvZzJsIHJwbF9sb2cybAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGxvZzJsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGxvZzJsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGxvZzJsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChsb2cybCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChsb2cybCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGxvZzJsCisjIGlmIEhBVkVfUkFXX0RFQ0xfTE9HMkwKK19HTF9XQVJOX09OX1VTRSAobG9nMmwsICJsb2cybCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbG9nMmwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGxvZ2JmCisjICAgZGVmaW5lIGxvZ2JmIHJwbF9sb2diZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGxvZ2JmLCBmbG9hdCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGxvZ2JmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGxvZ2JmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChsb2diZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChsb2diZik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGxvZ2JmCisjIGlmIEhBVkVfUkFXX0RFQ0xfTE9HQkYKK19HTF9XQVJOX09OX1VTRSAobG9nYmYsICJsb2diZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbG9nYmYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBsb2diCisjICAgZGVmaW5lIGxvZ2IgcnBsX2xvZ2IKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChsb2diLCBkb3VibGUsIChkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAobG9nYiwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGxvZ2IsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobG9nYiwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGxvZ2IpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBsb2diCisjIGlmIEhBVkVfUkFXX0RFQ0xfTE9HQgorX0dMX1dBUk5fT05fVVNFIChsb2diLCAibG9nYiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbG9nYiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGxvZ2JsCisjICAgZGVmaW5lIGxvZ2JsIHJwbF9sb2dibAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGxvZ2JsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKGxvZ2JsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGxvZ2JsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChsb2dibCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChsb2dibCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGxvZ2JsCisjIGlmIEhBVkVfUkFXX0RFQ0xfTE9HQkwKK19HTF9XQVJOX09OX1VTRSAobG9nYmwsICJsb2dibCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbG9nYmwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIG1vZGZmCisjICAgZGVmaW5lIG1vZGZmIHJwbF9tb2RmZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG1vZGZmLCBmbG9hdCwgKGZsb2F0IHgsIGZsb2F0ICppcHRyKSBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAobW9kZmYsIGZsb2F0LCAoZmxvYXQgeCwgZmxvYXQgKmlwdHIpKTsKKyMgZWxzZQorIyAgaWYgITEKKyMgICB1bmRlZiBtb2RmZgorX0dMX0ZVTkNERUNMX1NZUyAobW9kZmYsIGZsb2F0LCAoZmxvYXQgeCwgZmxvYXQgKmlwdHIpIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobW9kZmYsIGZsb2F0LCAoZmxvYXQgeCwgZmxvYXQgKmlwdHIpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG1vZGZmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbW9kZmYKKyMgaWYgSEFWRV9SQVdfREVDTF9NT0RGRgorX0dMX1dBUk5fT05fVVNFIChtb2RmZiwgIm1vZGZmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBtb2RmZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIG1vZGYKKyMgICBkZWZpbmUgbW9kZiBycGxfbW9kZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG1vZGYsIGRvdWJsZSwgKGRvdWJsZSB4LCBkb3VibGUgKmlwdHIpIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChtb2RmLCBkb3VibGUsIChkb3VibGUgeCwgZG91YmxlICppcHRyKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKG1vZGYsIGRvdWJsZSwgKGRvdWJsZSB4LCBkb3VibGUgKmlwdHIpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG1vZGYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBtb2RmCisjIGlmIEhBVkVfUkFXX0RFQ0xfTU9ERgorX0dMX1dBUk5fT05fVVNFIChtb2RmLCAibW9kZiBoYXMgcG9ydGFiaWxpdHkgcHJvYmxlbXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBtb2RmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbW9kZmwKKyMgICBkZWZpbmUgbW9kZmwgcnBsX21vZGZsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobW9kZmwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgKmlwdHIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChtb2RmbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSAqaXB0cikpOworIyBlbHNlCisjICBpZiAhMQorIyAgIHVuZGVmIG1vZGZsCitfR0xfRlVOQ0RFQ0xfU1lTIChtb2RmbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSAqaXB0cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChtb2RmbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSAqaXB0cikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobW9kZmwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBtb2RmbAorIyBpZiBIQVZFX1JBV19ERUNMX01PREZMCitfR0xfV0FSTl9PTl9VU0UgKG1vZGZsLCAibW9kZmwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG1vZGZsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgITEKKyMgIHVuZGVmIHBvd2YKK19HTF9GVU5DREVDTF9TWVMgKHBvd2YsIGZsb2F0LCAoZmxvYXQgeCwgZmxvYXQgeSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocG93ZiwgZmxvYXQsIChmbG9hdCB4LCBmbG9hdCB5KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChwb3dmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcG93ZgorIyBpZiBIQVZFX1JBV19ERUNMX1BPV0YKK19HTF9XQVJOX09OX1VTRSAocG93ZiwgInBvd2YgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvd2YgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHJlbWFpbmRlcmYKKyMgICBkZWZpbmUgcmVtYWluZGVyZiBycGxfcmVtYWluZGVyZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHJlbWFpbmRlcmYsIGZsb2F0LCAoZmxvYXQgeCwgZmxvYXQgeSkpOworX0dMX0NYWEFMSUFTX1JQTCAocmVtYWluZGVyZiwgZmxvYXQsIChmbG9hdCB4LCBmbG9hdCB5KSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChyZW1haW5kZXJmLCBmbG9hdCwgKGZsb2F0IHgsIGZsb2F0IHkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChyZW1haW5kZXJmLCBmbG9hdCwgKGZsb2F0IHgsIGZsb2F0IHkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHJlbWFpbmRlcmYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiByZW1haW5kZXJmCisjIGlmIEhBVkVfUkFXX0RFQ0xfUkVNQUlOREVSRgorX0dMX1dBUk5fT05fVVNFIChyZW1haW5kZXJmLCAicmVtYWluZGVyZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmVtYWluZGVyZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHJlbWFpbmRlcgorIyAgIGRlZmluZSByZW1haW5kZXIgcnBsX3JlbWFpbmRlcgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHJlbWFpbmRlciwgZG91YmxlLCAoZG91YmxlIHgsIGRvdWJsZSB5KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChyZW1haW5kZXIsIGRvdWJsZSwgKGRvdWJsZSB4LCBkb3VibGUgeSkpOworIyBlbHNlCisjICBpZiAhMSB8fCAhMQorX0dMX0ZVTkNERUNMX1NZUyAocmVtYWluZGVyLCBkb3VibGUsIChkb3VibGUgeCwgZG91YmxlIHkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChyZW1haW5kZXIsIGRvdWJsZSwgKGRvdWJsZSB4LCBkb3VibGUgeSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocmVtYWluZGVyKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcmVtYWluZGVyCisjIGlmIEhBVkVfUkFXX0RFQ0xfUkVNQUlOREVSCitfR0xfV0FSTl9PTl9VU0UgKHJlbWFpbmRlciwgInJlbWFpbmRlciBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmVtYWluZGVyIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcmVtYWluZGVybAorIyAgIGRlZmluZSByZW1haW5kZXJsIHJwbF9yZW1haW5kZXJsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocmVtYWluZGVybCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChyZW1haW5kZXJsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHkpKTsKKyMgZWxzZQorIyAgaWYgITEKKyMgICB1bmRlZiByZW1haW5kZXJsCitfR0xfRlVOQ0RFQ0xfU1lTIChyZW1haW5kZXJsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChyZW1haW5kZXJsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHJlbWFpbmRlcmwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiByZW1haW5kZXJsCisjIGlmIEhBVkVfUkFXX0RFQ0xfUkVNQUlOREVSTAorX0dMX1dBUk5fT05fVVNFIChyZW1haW5kZXJsLCAicmVtYWluZGVybCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmVtYWluZGVybCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChyaW50ZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChyaW50ZiwgZmxvYXQsIChmbG9hdCB4KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChyaW50Zik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHJpbnRmCisjIGlmIEhBVkVfUkFXX0RFQ0xfUklOVEYKK19HTF9XQVJOX09OX1VTRSAocmludGYsICJyaW50ZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmludGYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHJpbnQsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChyaW50LCBkb3VibGUsIChkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAocmludCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHJpbnQKKyMgaWYgSEFWRV9SQVdfREVDTF9SSU5UCitfR0xfV0FSTl9PTl9VU0UgKHJpbnQsICJyaW50IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSByaW50IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChyaW50bCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChyaW50bCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChyaW50bCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHJpbnRsCisjIGlmIEhBVkVfUkFXX0RFQ0xfUklOVEwKK19HTF9XQVJOX09OX1VTRSAocmludGwsICJyaW50bCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmludGwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHJvdW5kZgorIyAgIGRlZmluZSByb3VuZGYgcnBsX3JvdW5kZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHJvdW5kZiwgZmxvYXQsIChmbG9hdCB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChyb3VuZGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocm91bmRmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChyb3VuZGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocm91bmRmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcm91bmRmCisjIGlmIEhBVkVfUkFXX0RFQ0xfUk9VTkRGCitfR0xfV0FSTl9PTl9VU0UgKHJvdW5kZiwgInJvdW5kZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcm91bmRmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcm91bmQKKyMgICBkZWZpbmUgcm91bmQgcnBsX3JvdW5kCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocm91bmQsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChyb3VuZCwgZG91YmxlLCAoZG91YmxlIHgpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHJvdW5kLCBkb3VibGUsIChkb3VibGUgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHJvdW5kLCBkb3VibGUsIChkb3VibGUgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocm91bmQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiByb3VuZAorIyBpZiBIQVZFX1JBV19ERUNMX1JPVU5ECitfR0xfV0FSTl9PTl9VU0UgKHJvdW5kLCAicm91bmQgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHJvdW5kIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcm91bmRsCisjICAgZGVmaW5lIHJvdW5kbCBycGxfcm91bmRsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocm91bmRsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKHJvdW5kbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVsc2UKKyMgIGlmICExCisjICAgdW5kZWYgcm91bmRsCitfR0xfRlVOQ0RFQ0xfU1lTIChyb3VuZGwsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHJvdW5kbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChyb3VuZGwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiByb3VuZGwKKyMgaWYgSEFWRV9SQVdfREVDTF9ST1VOREwKK19HTF9XQVJOX09OX1VTRSAocm91bmRsLCAicm91bmRsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSByb3VuZGwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAhMQorIyAgdW5kZWYgc2luZgorX0dMX0ZVTkNERUNMX1NZUyAoc2luZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzaW5mLCBmbG9hdCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKHNpbmYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzaW5mCisjIGlmIEhBVkVfUkFXX0RFQ0xfU0lORgorX0dMX1dBUk5fT05fVVNFIChzaW5mLCAic2luZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc2luZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAhMSB8fCAhMQorIyAgdW5kZWYgc2lubAorX0dMX0ZVTkNERUNMX1NZUyAoc2lubCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzaW5sLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKHNpbmwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzaW5sCisjIGlmIEhBVkVfUkFXX0RFQ0xfU0lOTAorX0dMX1dBUk5fT05fVVNFIChzaW5sLCAic2lubCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc2lubCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmICExCisjICB1bmRlZiBzaW5oZgorX0dMX0ZVTkNERUNMX1NZUyAoc2luaGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc2luaGYsIGZsb2F0LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAoc2luaGYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzaW5oZgorIyBpZiBIQVZFX1JBV19ERUNMX1NJTkhGCitfR0xfV0FSTl9PTl9VU0UgKHNpbmhmLCAic2luaGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHNpbmhmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgITEKKyMgIHVuZGVmIHNxcnRmCitfR0xfRlVOQ0RFQ0xfU1lTIChzcXJ0ZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzcXJ0ZiwgZmxvYXQsIChmbG9hdCB4KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChzcXJ0Zik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHNxcnRmCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1FSVEYKK19HTF9XQVJOX09OX1VTRSAoc3FydGYsICJzcXJ0ZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3FydGYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBzcXJ0bAorIyAgIGRlZmluZSBzcXJ0bCBycGxfc3FydGwKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChzcXJ0bCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzcXJ0bCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVsc2UKKyMgIGlmICExIHx8ICExCisjICAgdW5kZWYgc3FydGwKK19HTF9GVU5DREVDTF9TWVMgKHNxcnRsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzcXJ0bCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzcXJ0bCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHNxcnRsCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1FSVEwKK19HTF9XQVJOX09OX1VTRSAoc3FydGwsICJzcXJ0bCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3FydGwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAhMQorIyAgdW5kZWYgdGFuZgorX0dMX0ZVTkNERUNMX1NZUyAodGFuZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh0YW5mLCBmbG9hdCwgKGZsb2F0IHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKHRhbmYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB0YW5mCisjIGlmIEhBVkVfUkFXX0RFQ0xfVEFORgorX0dMX1dBUk5fT05fVVNFICh0YW5mLCAidGFuZiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgdGFuZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAhMSB8fCAhMQorIyAgdW5kZWYgdGFubAorX0dMX0ZVTkNERUNMX1NZUyAodGFubCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh0YW5sLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU1dBUk4gKHRhbmwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB0YW5sCisjIGlmIEhBVkVfUkFXX0RFQ0xfVEFOTAorX0dMX1dBUk5fT05fVVNFICh0YW5sLCAidGFubCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgdGFubCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmICExCisjICB1bmRlZiB0YW5oZgorX0dMX0ZVTkNERUNMX1NZUyAodGFuaGYsIGZsb2F0LCAoZmxvYXQgeCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAodGFuaGYsIGZsb2F0LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTV0FSTiAodGFuaGYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB0YW5oZgorIyBpZiBIQVZFX1JBV19ERUNMX1RBTkhGCitfR0xfV0FSTl9PTl9VU0UgKHRhbmhmLCAidGFuaGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHRhbmhmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgdHJ1bmNmIHJwbF90cnVuY2YKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh0cnVuY2YsIGZsb2F0LCAoZmxvYXQgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAodHJ1bmNmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHRydW5jZiwgZmxvYXQsIChmbG9hdCB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAodHJ1bmNmLCBmbG9hdCwgKGZsb2F0IHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHRydW5jZik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHRydW5jZgorIyBpZiBIQVZFX1JBV19ERUNMX1RSVU5DRgorX0dMX1dBUk5fT05fVVNFICh0cnVuY2YsICJ0cnVuY2YgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHRydW5jZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSB0cnVuYyBycGxfdHJ1bmMKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh0cnVuYywgZG91YmxlLCAoZG91YmxlIHgpKTsKK19HTF9DWFhBTElBU19SUEwgKHRydW5jLCBkb3VibGUsIChkb3VibGUgeCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAodHJ1bmMsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAodHJ1bmMsIGRvdWJsZSwgKGRvdWJsZSB4KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOICh0cnVuYyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHRydW5jCisjIGlmIEhBVkVfUkFXX0RFQ0xfVFJVTkMKK19HTF9XQVJOX09OX1VTRSAodHJ1bmMsICJ0cnVuYyBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgdHJ1bmMgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiB0cnVuY2wKKyMgICBkZWZpbmUgdHJ1bmNsIHJwbF90cnVuY2wKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh0cnVuY2wsIGxvbmcgZG91YmxlLCAobG9uZyBkb3VibGUgeCkpOworX0dMX0NYWEFMSUFTX1JQTCAodHJ1bmNsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHRydW5jbCwgbG9uZyBkb3VibGUsIChsb25nIGRvdWJsZSB4KSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAodHJ1bmNsLCBsb25nIGRvdWJsZSwgKGxvbmcgZG91YmxlIHgpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHRydW5jbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHRydW5jbAorIyBpZiBIQVZFX1JBV19ERUNMX1RSVU5DTAorX0dMX1dBUk5fT05fVVNFICh0cnVuY2wsICJ0cnVuY2wgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHRydW5jbCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIERlZmluaXRpb25zIG9mIGZ1bmN0aW9uLWxpa2UgbWFjcm9zIGNvbWUgaGVyZSwgYWZ0ZXIgdGhlIGZ1bmN0aW9uCisgICBkZWNsYXJhdGlvbnMuICAqLworCisKKyNpZiAwCisjIGlmIDAKK19HTF9FWFRFUk5fQyBpbnQgZ2xfaXNmaW5pdGVmIChmbG9hdCB4KTsKK19HTF9FWFRFUk5fQyBpbnQgZ2xfaXNmaW5pdGVkIChkb3VibGUgeCk7CitfR0xfRVhURVJOX0MgaW50IGdsX2lzZmluaXRlbCAobG9uZyBkb3VibGUgeCk7CisjICB1bmRlZiBpc2Zpbml0ZQorIyAgZGVmaW5lIGlzZmluaXRlKHgpIFwKKyAgIChzaXplb2YgKHgpID09IHNpemVvZiAobG9uZyBkb3VibGUpID8gZ2xfaXNmaW5pdGVsICh4KSA6IFwKKyAgICBzaXplb2YgKHgpID09IHNpemVvZiAoZG91YmxlKSA/IGdsX2lzZmluaXRlZCAoeCkgOiBcCisgICAgZ2xfaXNmaW5pdGVmICh4KSkKKyMgZW5kaWYKKyMgaWZkZWYgX19jcGx1c3BsdXMKKyMgIGlmZGVmIGlzZmluaXRlCitfR0xfTUFUSF9DWFhfUkVBTF9GTE9BVElOR19ERUNMXzEgKGlzZmluaXRlKQorIyAgIHVuZGVmIGlzZmluaXRlCitfR0xfTUFUSF9DWFhfUkVBTF9GTE9BVElOR19ERUNMXzIgKGlzZmluaXRlKQorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgaWYgZGVmaW5lZCBpc2Zpbml0ZQorX0dMX1dBUk5fUkVBTF9GTE9BVElOR19ERUNMIChpc2Zpbml0ZSk7CisjICB1bmRlZiBpc2Zpbml0ZQorIyAgZGVmaW5lIGlzZmluaXRlKHgpIF9HTF9XQVJOX1JFQUxfRkxPQVRJTkdfSU1QTCAoaXNmaW5pdGUsIHgpCisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCitfR0xfRVhURVJOX0MgaW50IGdsX2lzaW5mZiAoZmxvYXQgeCk7CitfR0xfRVhURVJOX0MgaW50IGdsX2lzaW5mZCAoZG91YmxlIHgpOworX0dMX0VYVEVSTl9DIGludCBnbF9pc2luZmwgKGxvbmcgZG91YmxlIHgpOworIyAgdW5kZWYgaXNpbmYKKyMgIGRlZmluZSBpc2luZih4KSBcCisgICAoc2l6ZW9mICh4KSA9PSBzaXplb2YgKGxvbmcgZG91YmxlKSA/IGdsX2lzaW5mbCAoeCkgOiBcCisgICAgc2l6ZW9mICh4KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBnbF9pc2luZmQgKHgpIDogXAorICAgIGdsX2lzaW5mZiAoeCkpCisjIGVuZGlmCisjIGlmZGVmIF9fY3BsdXNwbHVzCisjICBpZmRlZiBpc2luZgorX0dMX01BVEhfQ1hYX1JFQUxfRkxPQVRJTkdfREVDTF8xIChpc2luZikKKyMgICB1bmRlZiBpc2luZgorX0dMX01BVEhfQ1hYX1JFQUxfRkxPQVRJTkdfREVDTF8yIChpc2luZikKKyMgIGVuZGlmCisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIGlmIGRlZmluZWQgaXNpbmYKK19HTF9XQVJOX1JFQUxfRkxPQVRJTkdfREVDTCAoaXNpbmYpOworIyAgdW5kZWYgaXNpbmYKKyMgIGRlZmluZSBpc2luZih4KSBfR0xfV0FSTl9SRUFMX0ZMT0FUSU5HX0lNUEwgKGlzaW5mLCB4KQorIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDEKKy8qIFRlc3QgZm9yIE5hTiBmb3IgJ2Zsb2F0JyBudW1iZXJzLiAgKi8KKyMgaWYgMQorLyogVGhlIG9yaWdpbmFsIDxtYXRoLmg+IGluY2x1ZGVkIGFib3ZlIHByb3ZpZGVzIGEgZGVjbGFyYXRpb24gb2YgaXNuYW4gbWFjcm8KKyAgIG9yIChvbGRlcikgaXNuYW5mIGZ1bmN0aW9uLiAgKi8KKyMgIGlmIF9fR05VQ19fID49IDQKKyAgICAvKiBHQ0MgNC4wIGFuZCBuZXdlciBwcm92aWRlcyB0aHJlZSBidWlsdC1pbnMgZm9yIGlzbmFuLiAgKi8KKyMgICB1bmRlZiBpc25hbmYKKyMgICBkZWZpbmUgaXNuYW5mKHgpIF9fYnVpbHRpbl9pc25hbmYgKChmbG9hdCkoeCkpCisjICBlbGlmIGRlZmluZWQgaXNuYW4KKyMgICB1bmRlZiBpc25hbmYKKyMgICBkZWZpbmUgaXNuYW5mKHgpIGlzbmFuICgoZmxvYXQpKHgpKQorIyAgZW5kaWYKKyMgZWxzZQorLyogVGVzdCB3aGV0aGVyIFggaXMgYSBOYU4uICAqLworIyAgdW5kZWYgaXNuYW5mCisjICBkZWZpbmUgaXNuYW5mIHJwbF9pc25hbmYKK19HTF9FWFRFUk5fQyBpbnQgaXNuYW5mIChmbG9hdCB4KTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMQorLyogVGVzdCBmb3IgTmFOIGZvciAnZG91YmxlJyBudW1iZXJzLgorICAgVGhpcyBmdW5jdGlvbiBpcyBhIGdudWxpYiBleHRlbnNpb24sIHVubGlrZSBpc25hbigpIHdoaWNoIGFwcGxpZWQgb25seQorICAgdG8gJ2RvdWJsZScgbnVtYmVycyBlYXJsaWVyIGJ1dCBub3cgaXMgYSB0eXBlLWdlbmVyaWMgbWFjcm8uICAqLworIyBpZiAxCisvKiBUaGUgb3JpZ2luYWwgPG1hdGguaD4gaW5jbHVkZWQgYWJvdmUgcHJvdmlkZXMgYSBkZWNsYXJhdGlvbiBvZiBpc25hbgorICAgbWFjcm8uICAqLworIyAgaWYgX19HTlVDX18gPj0gNAorICAgIC8qIEdDQyA0LjAgYW5kIG5ld2VyIHByb3ZpZGVzIHRocmVlIGJ1aWx0LWlucyBmb3IgaXNuYW4uICAqLworIyAgIHVuZGVmIGlzbmFuZAorIyAgIGRlZmluZSBpc25hbmQoeCkgX19idWlsdGluX2lzbmFuICgoZG91YmxlKSh4KSkKKyMgIGVsc2UKKyMgICB1bmRlZiBpc25hbmQKKyMgICBkZWZpbmUgaXNuYW5kKHgpIGlzbmFuICgoZG91YmxlKSh4KSkKKyMgIGVuZGlmCisjIGVsc2UKKy8qIFRlc3Qgd2hldGhlciBYIGlzIGEgTmFOLiAgKi8KKyMgIHVuZGVmIGlzbmFuZAorIyAgZGVmaW5lIGlzbmFuZCBycGxfaXNuYW5kCitfR0xfRVhURVJOX0MgaW50IGlzbmFuZCAoZG91YmxlIHgpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAxCisvKiBUZXN0IGZvciBOYU4gZm9yICdsb25nIGRvdWJsZScgbnVtYmVycy4gICovCisjIGlmIDAKKy8qIFRoZSBvcmlnaW5hbCA8bWF0aC5oPiBpbmNsdWRlZCBhYm92ZSBwcm92aWRlcyBhIGRlY2xhcmF0aW9uIG9mIGlzbmFuCisgICBtYWNybyBvciAob2xkZXIpIGlzbmFubCBmdW5jdGlvbi4gICovCisjICBpZiBfX0dOVUNfXyA+PSA0CisgICAgLyogR0NDIDQuMCBhbmQgbmV3ZXIgcHJvdmlkZXMgdGhyZWUgYnVpbHQtaW5zIGZvciBpc25hbi4gICovCisjICAgdW5kZWYgaXNuYW5sCisjICAgZGVmaW5lIGlzbmFubCh4KSBfX2J1aWx0aW5faXNuYW5sICgobG9uZyBkb3VibGUpKHgpKQorIyAgZWxpZiBkZWZpbmVkIGlzbmFuCisjICAgdW5kZWYgaXNuYW5sCisjICAgZGVmaW5lIGlzbmFubCh4KSBpc25hbiAoKGxvbmcgZG91YmxlKSh4KSkKKyMgIGVuZGlmCisjIGVsc2UKKy8qIFRlc3Qgd2hldGhlciBYIGlzIGEgTmFOLiAgKi8KKyMgIHVuZGVmIGlzbmFubAorIyAgZGVmaW5lIGlzbmFubCBycGxfaXNuYW5sCitfR0xfRVhURVJOX0MgaW50IGlzbmFubCAobG9uZyBkb3VibGUgeCkgX0dMX0FUVFJJQlVURV9DT05TVDsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBUaGlzIG11c3QgY29tZSAqYWZ0ZXIqIHRoZSBzbmlwcGV0cyBmb3IgR05VTElCX0lTTkFORiBhbmQgR05VTElCX0lTTkFOTCEgICovCisjaWYgMQorIyBpZiAxCisvKiBXZSBjYW4ndCBqdXN0IHVzZSB0aGUgaXNuYW5mIG1hY3JvIChlLmcuKSBhcyBleHBvc2VkIGJ5CisgICBpc25hbmYuaCAoZS5nLikgaGVyZSwgYmVjYXVzZSB0aG9zZSBtYXkgZW5kIHVwIGJlaW5nIG1hY3JvcworICAgdGhhdCByZWN1cnNpdmVseSBleHBhbmQgYmFjayB0byBpc25hbi4gIFNvIHVzZSB0aGUgZ251bGliCisgICByZXBsYWNlbWVudHMgZm9yIHRoZW0gZGlyZWN0bHkuICovCisjICBpZiAxICYmIF9fR05VQ19fID49IDQKKyMgICBkZWZpbmUgZ2xfaXNuYW5fZih4KSBfX2J1aWx0aW5faXNuYW5mICgoZmxvYXQpKHgpKQorIyAgZWxzZQorX0dMX0VYVEVSTl9DIGludCBycGxfaXNuYW5mIChmbG9hdCB4KTsKKyMgICBkZWZpbmUgZ2xfaXNuYW5fZih4KSBycGxfaXNuYW5mICh4KQorIyAgZW5kaWYKKyMgIGlmIDEgJiYgX19HTlVDX18gPj0gNAorIyAgIGRlZmluZSBnbF9pc25hbl9kKHgpIF9fYnVpbHRpbl9pc25hbiAoKGRvdWJsZSkoeCkpCisjICBlbHNlCitfR0xfRVhURVJOX0MgaW50IHJwbF9pc25hbmQgKGRvdWJsZSB4KTsKKyMgICBkZWZpbmUgZ2xfaXNuYW5fZCh4KSBycGxfaXNuYW5kICh4KQorIyAgZW5kaWYKKyMgIGlmIDAgJiYgX19HTlVDX18gPj0gNAorIyAgIGRlZmluZSBnbF9pc25hbl9sKHgpIF9fYnVpbHRpbl9pc25hbmwgKChsb25nIGRvdWJsZSkoeCkpCisjICBlbHNlCitfR0xfRVhURVJOX0MgaW50IHJwbF9pc25hbmwgKGxvbmcgZG91YmxlIHgpIF9HTF9BVFRSSUJVVEVfQ09OU1Q7CisjICAgZGVmaW5lIGdsX2lzbmFuX2woeCkgcnBsX2lzbmFubCAoeCkKKyMgIGVuZGlmCisjICB1bmRlZiBpc25hbgorIyAgZGVmaW5lIGlzbmFuKHgpIFwKKyAgIChzaXplb2YgKHgpID09IHNpemVvZiAobG9uZyBkb3VibGUpID8gZ2xfaXNuYW5fbCAoeCkgOiBcCisgICAgc2l6ZW9mICh4KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBnbF9pc25hbl9kICh4KSA6IFwKKyAgICBnbF9pc25hbl9mICh4KSkKKyMgZWxpZiBfX0dOVUNfXyA+PSA0CisjICB1bmRlZiBpc25hbgorIyAgZGVmaW5lIGlzbmFuKHgpIFwKKyAgIChzaXplb2YgKHgpID09IHNpemVvZiAobG9uZyBkb3VibGUpID8gX19idWlsdGluX2lzbmFubCAoKGxvbmcgZG91YmxlKSh4KSkgOiBcCisgICAgc2l6ZW9mICh4KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2J1aWx0aW5faXNuYW4gKChkb3VibGUpKHgpKSA6IFwKKyAgICBfX2J1aWx0aW5faXNuYW5mICgoZmxvYXQpKHgpKSkKKyMgZW5kaWYKKyMgaWZkZWYgX19jcGx1c3BsdXMKKyMgIGlmZGVmIGlzbmFuCitfR0xfTUFUSF9DWFhfUkVBTF9GTE9BVElOR19ERUNMXzEgKGlzbmFuKQorIyAgIHVuZGVmIGlzbmFuCitfR0xfTUFUSF9DWFhfUkVBTF9GTE9BVElOR19ERUNMXzIgKGlzbmFuKQorIyAgZW5kaWYKKyMgZWxzZQorLyogRW5zdXJlIGlzbmFuIGlzIGEgbWFjcm8uICAqLworIyAgaWZuZGVmIGlzbmFuCisjICAgZGVmaW5lIGlzbmFuIGlzbmFuCisjICBlbmRpZgorIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyBpZiBkZWZpbmVkIGlzbmFuCitfR0xfV0FSTl9SRUFMX0ZMT0FUSU5HX0RFQ0wgKGlzbmFuKTsKKyMgIHVuZGVmIGlzbmFuCisjICBkZWZpbmUgaXNuYW4oeCkgX0dMX1dBUk5fUkVBTF9GTE9BVElOR19JTVBMIChpc25hbiwgeCkKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAxCisjIGlmIDEKKyMgIHVuZGVmIHNpZ25iaXQKKyAgIC8qIEdDQyA0LjAgYW5kIG5ld2VyIHByb3ZpZGVzIHRocmVlIGJ1aWx0LWlucyBmb3Igc2lnbmJpdC4gICovCisjICBkZWZpbmUgc2lnbmJpdCh4KSBcCisgICAoc2l6ZW9mICh4KSA9PSBzaXplb2YgKGxvbmcgZG91YmxlKSA/IF9fYnVpbHRpbl9zaWduYml0bCAoeCkgOiBcCisgICAgc2l6ZW9mICh4KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2J1aWx0aW5fc2lnbmJpdCAoeCkgOiBcCisgICAgX19idWlsdGluX3NpZ25iaXRmICh4KSkKKyMgZW5kaWYKKyMgaWYgMAorIyAgdW5kZWYgc2lnbmJpdAorX0dMX0VYVEVSTl9DIGludCBnbF9zaWduYml0ZiAoZmxvYXQgYXJnKTsKK19HTF9FWFRFUk5fQyBpbnQgZ2xfc2lnbmJpdGQgKGRvdWJsZSBhcmcpOworX0dMX0VYVEVSTl9DIGludCBnbF9zaWduYml0bCAobG9uZyBkb3VibGUgYXJnKTsKKyMgIGlmIF9fR05VQ19fID49IDIgJiYgIWRlZmluZWQgX19TVFJJQ1RfQU5TSV9fCisjICAgZGVmaW5lIF9HTF9OVU1fVUlOVF9XT1JEUyh0eXBlKSBcCisgICAgICAoKHNpemVvZiAodHlwZSkgKyBzaXplb2YgKHVuc2lnbmVkIGludCkgLSAxKSAvIHNpemVvZiAodW5zaWduZWQgaW50KSkKKyMgICBpZiBkZWZpbmVkIEZMVF9TSUdOQklUX1dPUkQgJiYgZGVmaW5lZCBGTFRfU0lHTkJJVF9CSVQgJiYgIWRlZmluZWQgZ2xfc2lnbmJpdGYKKyMgICAgZGVmaW5lIGdsX3NpZ25iaXRmX09QVElNSVpFRF9NQUNSTworIyAgICBkZWZpbmUgZ2xfc2lnbmJpdGYoYXJnKSBcCisgICAgICAgKHsgdW5pb24geyBmbG9hdCBfdmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX3dvcmRbX0dMX05VTV9VSU5UX1dPUkRTIChmbG9hdCldOyAgICAgICBcCisgICAgICAgICAgICAgICAgfSBfbTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgX20uX3ZhbHVlID0gKGFyZyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKF9tLl93b3JkW0ZMVF9TSUdOQklUX1dPUkRdID4+IEZMVF9TSUdOQklUX0JJVCkgJiAxOyAgICAgICAgICBcCisgICAgICAgIH0pCisjICAgZW5kaWYKKyMgICBpZiBkZWZpbmVkIERCTF9TSUdOQklUX1dPUkQgJiYgZGVmaW5lZCBEQkxfU0lHTkJJVF9CSVQgJiYgIWRlZmluZWQgZ2xfc2lnbmJpdGQKKyMgICAgZGVmaW5lIGdsX3NpZ25iaXRkX09QVElNSVpFRF9NQUNSTworIyAgICBkZWZpbmUgZ2xfc2lnbmJpdGQoYXJnKSBcCisgICAgICAgKHsgdW5pb24geyBkb3VibGUgX3ZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX3dvcmRbX0dMX05VTV9VSU5UX1dPUkRTIChkb3VibGUpXTsgICAgICBcCisgICAgICAgICAgICAgICAgfSBfbTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgX20uX3ZhbHVlID0gKGFyZyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKF9tLl93b3JkW0RCTF9TSUdOQklUX1dPUkRdID4+IERCTF9TSUdOQklUX0JJVCkgJiAxOyAgICAgICAgICBcCisgICAgICAgIH0pCisjICAgZW5kaWYKKyMgICBpZiBkZWZpbmVkIExEQkxfU0lHTkJJVF9XT1JEICYmIGRlZmluZWQgTERCTF9TSUdOQklUX0JJVCAmJiAhZGVmaW5lZCBnbF9zaWduYml0bAorIyAgICBkZWZpbmUgZ2xfc2lnbmJpdGxfT1BUSU1JWkVEX01BQ1JPCisjICAgIGRlZmluZSBnbF9zaWduYml0bChhcmcpIFwKKyAgICAgICAoeyB1bmlvbiB7IGxvbmcgZG91YmxlIF92YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfd29yZFtfR0xfTlVNX1VJTlRfV09SRFMgKGxvbmcgZG91YmxlKV07IFwKKyAgICAgICAgICAgICAgICB9IF9tOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBfbS5fdmFsdWUgPSAoYXJnKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoX20uX3dvcmRbTERCTF9TSUdOQklUX1dPUkRdID4+IExEQkxfU0lHTkJJVF9CSVQpICYgMTsgICAgICAgIFwKKyAgICAgICAgfSkKKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgIGRlZmluZSBzaWduYml0KHgpIFwKKyAgIChzaXplb2YgKHgpID09IHNpemVvZiAobG9uZyBkb3VibGUpID8gZ2xfc2lnbmJpdGwgKHgpIDogXAorICAgIHNpemVvZiAoeCkgPT0gc2l6ZW9mIChkb3VibGUpID8gZ2xfc2lnbmJpdGQgKHgpIDogXAorICAgIGdsX3NpZ25iaXRmICh4KSkKKyMgZW5kaWYKKyMgaWZkZWYgX19jcGx1c3BsdXMKKyMgIGlmZGVmIHNpZ25iaXQKK19HTF9NQVRIX0NYWF9SRUFMX0ZMT0FUSU5HX0RFQ0xfMSAoc2lnbmJpdCkKKyMgICB1bmRlZiBzaWduYml0CitfR0xfTUFUSF9DWFhfUkVBTF9GTE9BVElOR19ERUNMXzIgKHNpZ25iaXQpCisjICBlbmRpZgorIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyBpZiBkZWZpbmVkIHNpZ25iaXQKK19HTF9XQVJOX1JFQUxfRkxPQVRJTkdfREVDTCAoc2lnbmJpdCk7CisjICB1bmRlZiBzaWduYml0CisjICBkZWZpbmUgc2lnbmJpdCh4KSBfR0xfV0FSTl9SRUFMX0ZMT0FUSU5HX0lNUEwgKHNpZ25iaXQsIHgpCisjIGVuZGlmCisjZW5kaWYKKworX0dMX0lOTElORV9IRUFERVJfRU5ECisKKyNlbmRpZiAvKiBfR0xfTUFUSF9IICovCisjZW5kaWYgLyogX0dMX01BVEhfSCAqLwpkaWZmIC0tZ2l0IGEvbGludXgtbGliL3NpZ25hbC5oIGIvbGludXgtbGliL3NpZ25hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMTVjZjMKLS0tIC9kZXYvbnVsbAorKysgYi9saW51eC1saWIvc2lnbmFsLmgKQEAgLTAsMCArMSw3NTkgQEAKKy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8KKy8qIEEgR05VLWxpa2UgPHNpZ25hbC5oPi4KKworICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZiBfX0dOVUNfXyA+PSAzCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisjZW5kaWYKKworCisjaWYgZGVmaW5lZCBfX25lZWRfc2lnX2F0b21pY190IHx8IGRlZmluZWQgX19uZWVkX3NpZ3NldF90IHx8IGRlZmluZWQgX0dMX0FMUkVBRFlfSU5DTFVESU5HX1NJR05BTF9IIHx8IChkZWZpbmVkIF9TSUdOQUxfSCAmJiAhZGVmaW5lZCBfX1NJWkVPRl9QVEhSRUFEX01VVEVYX1QpCisvKiBTcGVjaWFsIGludm9jYXRpb24gY29udmVudGlvbjoKKyAgIC0gSW5zaWRlIGdsaWJjIGhlYWRlciBmaWxlcy4KKyAgIC0gT24gZ2xpYmMgc3lzdGVtcyB3ZSBoYXZlIGEgc2VxdWVuY2Ugb2YgbmVzdGVkIGluY2x1ZGVzCisgICAgIDxzaWduYWwuaD4gLT4gPHVjb250ZXh0Lmg+IC0+IDxzaWduYWwuaD4uCisgICAgIEluIHRoaXMgc2l0dWF0aW9uLCB0aGUgZnVuY3Rpb25zIGFyZSBub3QgeWV0IGRlY2xhcmVkLCB0aGVyZWZvcmUgd2UgY2Fubm90CisgICAgIHByb3ZpZGUgdGhlIEMrKyBhbGlhc2VzLgorICAgLSBPbiBnbGliYyBzeXN0ZW1zIHdpdGggR0NDIDQuMyB3ZSBoYXZlIGEgc2VxdWVuY2Ugb2YgbmVzdGVkIGluY2x1ZGVzCisgICAgIDxjc2lnbmFsPiAtPiA8L3Vzci9pbmNsdWRlL3NpZ25hbC5oPiAtPiA8c3lzL3Vjb250ZXh0Lmg+IC0+IDxzaWduYWwuaD4uCisgICAgIEluIHRoaXMgc2l0dWF0aW9uLCBzb21lIG9mIHRoZSBmdW5jdGlvbnMgYXJlIG5vdCB5ZXQgZGVjbGFyZWQsIHRoZXJlZm9yZQorICAgICB3ZSBjYW5ub3QgcHJvdmlkZSB0aGUgQysrIGFsaWFzZXMuICAqLworCisjIGluY2x1ZGVfbmV4dCA8c2lnbmFsLmg+CisKKyNlbHNlCisvKiBOb3JtYWwgaW52b2NhdGlvbiBjb252ZW50aW9uLiAgKi8KKworI2lmbmRlZiBfR0xfU0lHTkFMX0gKKworI2RlZmluZSBfR0xfQUxSRUFEWV9JTkNMVURJTkdfU0lHTkFMX0gKKworLyogRGVmaW5lIHBpZF90LCB1aWRfdC4KKyAgIEFsc28sIG1pbmd3IGRlZmluZXMgc2lnc2V0X3Qgbm90IGluIDxzaWduYWwuaD4sIGJ1dCBpbiA8c3lzL3R5cGVzLmg+LgorICAgT24gU29sYXJpcyAxMCwgPHNpZ25hbC5oPiBpbmNsdWRlcyA8c3lzL3R5cGVzLmg+LCB3aGljaCBldmVudHVhbGx5IGluY2x1ZGVzCisgICB1czsgc28gaW5jbHVkZSA8c3lzL3R5cGVzLmg+IG5vdywgYmVmb3JlIHRoZSBzZWNvbmQgaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworI2luY2x1ZGVfbmV4dCA8c2lnbmFsLmg+CisKKyN1bmRlZiBfR0xfQUxSRUFEWV9JTkNMVURJTkdfU0lHTkFMX0gKKworI2lmbmRlZiBfR0xfU0lHTkFMX0gKKyNkZWZpbmUgX0dMX1NJR05BTF9ICisKKy8qIE1hYyBPUyBYIDEwLjMsIEZyZWVCU0QgNi40LCBPcGVuQlNEIDMuOCwgT1NGLzEgNC4wLCBTb2xhcmlzIDIuNiBkZWNsYXJlCisgICBwdGhyZWFkX3NpZ21hc2sgaW4gPHB0aHJlYWQuaD4sIG5vdCBpbiA8c2lnbmFsLmg+LgorICAgQnV0IGF2b2lkIG5hbWVzcGFjZSBwb2xsdXRpb24gb24gZ2xpYmMgc3lzdGVtcy4qLworI2lmICgwIHx8IGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0spIFwKKyAgICAmJiAoKGRlZmluZWQgX19BUFBMRV9fICYmIGRlZmluZWQgX19NQUNIX18pIHx8IGRlZmluZWQgX19GcmVlQlNEX18gfHwgZGVmaW5lZCBfX09wZW5CU0RfXyB8fCBkZWZpbmVkIF9fb3NmX18gfHwgZGVmaW5lZCBfX3N1bikgXAorICAgICYmICEgZGVmaW5lZCBfX0dMSUJDX18KKyMgaW5jbHVkZSA8cHRocmVhZC5oPgorI2VuZGlmCisKKy8qIFRoZSBkZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBMIGV0Yy4gYXJlIGNvcGllZCBoZXJlLiAgKi8KKyNpZm5kZWYgX0dMX0NYWERFRlNfSAorI2RlZmluZSBfR0xfQ1hYREVGU19ICisKKy8qIFRoZSB0aHJlZSBtb3N0IGZyZXF1ZW50IHVzZSBjYXNlcyBvZiB0aGVzZSBtYWNyb3MgYXJlOgorCisgICAqIEZvciBwcm92aWRpbmcgYSBzdWJzdGl0dXRlIGZvciBhIGZ1bmN0aW9uIHRoYXQgaXMgbWlzc2luZyBvbiBzb21lCisgICAgIHBsYXRmb3JtcywgYnV0IGlzIGRlY2xhcmVkIGFuZCB3b3JrcyBmaW5lIG9uIHRoZSBwbGF0Zm9ybXMgb24gd2hpY2gKKyAgICAgaXQgZXhpc3RzOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgIUBIQVZFX0ZPT0AKKyAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgcmVwbGFjZW1lbnQgZm9yIGEgZnVuY3Rpb24gdGhhdCBleGlzdHMgb24gYWxsIHBsYXRmb3JtcywKKyAgICAgYnV0IGlzIGJyb2tlbi9pbnN1ZmZpY2llbnQgYW5kIG5lZWRzIHRvIGJlIHJlcGxhY2VkIG9uIHNvbWUgcGxhdGZvcm1zOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisgICAgICAgIyAgIHVuZGVmIGZvbworICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CisgICAgICAgIyBlbHNlCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgcmVwbGFjZW1lbnQgZm9yIGEgZnVuY3Rpb24gdGhhdCBleGlzdHMgb24gc29tZSBwbGF0Zm9ybXMKKyAgICAgYnV0IGlzIGJyb2tlbi9pbnN1ZmZpY2llbnQgYW5kIG5lZWRzIHRvIGJlIHJlcGxhY2VkIG9uIHNvbWUgb2YgdGhlbSBhbmQKKyAgICAgaXMgYWRkaXRpb25hbGx5IGVpdGhlciBtaXNzaW5nIG9yIHVuZGVjbGFyZWQgb24gc29tZSBvdGhlciBwbGF0Zm9ybXM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACisgICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyAgICAgICAjICAgdW5kZWYgZm9vCisgICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKyAgICAgICAjIGVsc2UKKyAgICAgICAjICBpZiAhQEhBVkVfRk9PQCAgIG9yICAgaWYgIUBIQVZFX0RFQ0xfRk9PQAorICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisqLworCisvKiBfR0xfRVhURVJOX0MgZGVjbGFyYXRpb247CisgICBwZXJmb3JtcyB0aGUgZGVjbGFyYXRpb24gd2l0aCBDIGxpbmthZ2UuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMKKyMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4gIkMiCisjZWxzZQorIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybgorI2VuZGlmCisKKy8qIF9HTF9GVU5DREVDTF9SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgZGVjbGFyZXMgYSByZXBsYWNlbWVudCBmdW5jdGlvbiwgbmFtZWQgcnBsX2Z1bmMsIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwKKyAgIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsIGFuZCBhdHRyaWJ1dGVzLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0ZVTkNERUNMX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisgKi8KKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICBfR0xfRlVOQ0RFQ0xfUlBMXzEgKHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpCisjZGVmaW5lIF9HTF9GVU5DREVDTF9SUExfMShycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0VYVEVSTl9DIHJldHR5cGUgcnBsX2Z1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworCisvKiBfR0xfRlVOQ0RFQ0xfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGRlY2xhcmVzIHRoZSBzeXN0ZW0gZnVuY3Rpb24sIG5hbWVkIGZ1bmMsIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwKKyAgIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsIGFuZCBhdHRyaWJ1dGVzLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0ZVTkNERUNMX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisgKi8KKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICBfR0xfRVhURVJOX0MgcmV0dHlwZSBmdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKworLyogX0dMX0NYWEFMSUFTX1JQTCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBkZWNsYXJlcyBhIEMrKyBhbGlhcyBjYWxsZWQgR05VTElCX05BTUVTUEFDRTo6ZnVuYworICAgdGhhdCByZWRpcmVjdHMgdG8gcnBsX2Z1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UgaXMgZGVmaW5lZC4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9DWFhBTElBU19SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworICovCisjZGVmaW5lIF9HTF9DWFhBTElBU19SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgX0dMX0NYWEFMSUFTX1JQTF8xIChmdW5jLCBycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKQorI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9IDo6cnBsX2Z1bmM7ICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1JQTF8xIChmdW5jLCBycGxfZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBycGxfZnVuYyBtYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudAorICAgZGVjbGFyYXRpb24uICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvcgorICAgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPig6OnJwbF9mdW5jKTsgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBkZWNsYXJlcyBhIEMrKyBhbGlhcyBjYWxsZWQgR05VTElCX05BTUVTUEFDRTo6ZnVuYworICAgdGhhdCByZWRpcmVjdHMgdG8gdGhlIHN5c3RlbSBwcm92aWRlZCBmdW5jdGlvbiBmdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFCisgICBpcyBkZWZpbmVkLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0NYWEFMSUFTX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CisgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorICAvKiBJZiB3ZSB3ZXJlIHRvIHdyaXRlCisgICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7CisgICAgIGxpa2UgYWJvdmUgaW4gX0dMX0NYWEFMSUFTX1JQTF8xLCB0aGUgY29tcGlsZXIgY291bGQgb3B0aW1pemUgY2FsbHMKKyAgICAgYmV0dGVyIChyZW1vdmUgYW4gaW5kaXJlY3Rpb24gdGhyb3VnaCBhICdzdGF0aWMnIHBvaW50ZXIgdmFyaWFibGUpLAorICAgICBidXQgdGhlbiB0aGUgX0dMX0NYWEFMSUFTV0FSTiBtYWNybyBiZWxvdyB3b3VsZCBjYXVzZSBhIHdhcm5pbmcgbm90IG9ubHkKKyAgICAgZm9yIHVzZXMgb2YgOjpmdW5jIGJ1dCBhbHNvIGZvciB1c2VzIG9mIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMuICAqLworIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOyAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1NZU19DQVNUIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gZnVuYyBtYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudCBkZWNsYXJhdGlvbi4KKyAgIEEgY2FzdCBpcyB1c2VkIHRvIHNpbGVuY2UgdGhlICJpbnZhbGlkIGNvbnZlcnNpb24iIGVycm9yIHRoYXQgd291bGQKKyAgIG90aGVyd2lzZSBvY2N1ci4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPig6OmZ1bmMpOyBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1NZU19DQVNUMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycywgcmV0dHlwZTIsIHBhcmFtZXRlcnMyKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gaXMgcGlja2VkIGFtb25nIGEgc2V0IG9mIG92ZXJsb2FkZWQgZnVuY3Rpb25zLAorICAgbmFtZWx5IHRoZSBvbmUgd2l0aCByZXR0eXBlMiBhbmQgcGFyYW1ldGVyczIuICBUd28gY29uc2VjdXRpdmUgY2FzdHMKKyAgIGFyZSB1c2VkIHRvIHNpbGVuY2UgdGhlICJjYW5ub3QgZmluZCBhIG1hdGNoIiBhbmQgImludmFsaWQgY29udmVyc2lvbiIKKyAgIGVycm9ycyB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyAgLyogVGhlIG91dGVyIGNhc3QgbXVzdCBiZSBhIHJlaW50ZXJwcmV0X2Nhc3QuCisgICAgIFRoZSBpbm5lciBjYXN0OiBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2V0IG9mIG92ZXJsb2FkZWQKKyAgICAgZnVuY3Rpb25zLCBpdCB3b3JrcyBhcyBhIHN0YXRpY19jYXN0PD4sIGNob29zaW5nIHRoZSBkZXNpZ25hdGVkIHZhcmlhbnQuCisgICAgIFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzaW5nbGUgdmFyaWFudCwgaXQgd29ya3MgYXMgYQorICAgICByZWludGVycHJldF9jYXN0PD4uIFRoZSBwYXJlbnRoZXNpemVkIGNhc3Qgc3ludGF4IHdvcmtzIGJvdGggd2F5cy4gICovCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzLHJldHR5cGUyLHBhcmFtZXRlcnMyKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKHJldHR5cGUyKCopcGFyYW1ldGVyczIpKDo6ZnVuYykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzLHJldHR5cGUyLHBhcmFtZXRlcnMyKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNXQVJOIChmdW5jKTsKKyAgIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZW1pdHRlZCB3aGVuIDo6ZnVuYyBpcyB1c2VkIGJ1dCBub3Qgd2hlbgorICAgR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgZnVuYyBtdXN0IGJlIGRlZmluZWQgd2l0aG91dCBvdmVybG9hZGVkCisgICB2YXJpYW50cy4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAorICAgX0dMX0NYWEFMSUFTV0FSTl8xIChmdW5jLCBHTlVMSUJfTkFNRVNQQUNFKQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8xKGZ1bmMsbmFtZXNwYWNlKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOXzIgKGZ1bmMsIG5hbWVzcGFjZSkKKy8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAorICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCisjIGlmICFfX09QVElNSVpFX18KKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKyAgICBfR0xfV0FSTl9PTl9VU0UgKGZ1bmMsIFwKKyAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICJVc2UgIiAjbmFtZXNwYWNlICI6OiIgI2Z1bmMgIiBpbnN0ZWFkLiIpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKyAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU1dBUk4xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZW1pdHRlZCB3aGVuIHRoZSBnaXZlbiBvdmVybG9hZGVkIHZhcmlhbnQgb2YgOjpmdW5jCisgICBpcyB1c2VkIGJ1dCBub3Qgd2hlbiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICAgX0dMX0NYWEFMSUFTV0FSTjFfMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgR05VTElCX05BTUVTUEFDRSkKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOMV8yIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBuYW1lc3BhY2UpCisvKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKyAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworIyBpZiAhX19PUFRJTUlaRV9fCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgICBfR0xfV0FSTl9PTl9VU0VfQ1hYIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJVc2UgIiAjbmFtZXNwYWNlICI6OiIgI2Z1bmMgIiBpbnN0ZWFkLiIpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKyNlbmRpZiAvKiBfR0xfQ1hYREVGU19IICovCisKKy8qIFRoZSBkZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVMTCBpcyBjb3BpZWQgaGVyZS4gICovCisvKiBfR0xfQVJHX05PTk5VTEwoKG4sLi4uLG0pKSB0ZWxscyB0aGUgY29tcGlsZXIgYW5kIHN0YXRpYyBhbmFseXplciB0b29scworICAgdGhhdCB0aGUgdmFsdWVzIHBhc3NlZCBhcyBhcmd1bWVudHMgbiwgLi4uLCBtIG11c3QgYmUgbm9uLU5VTEwgcG9pbnRlcnMuCisgICBuID0gMSBzdGFuZHMgZm9yIHRoZSBmaXJzdCBhcmd1bWVudCwgbiA9IDIgZm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgZXRjLiAgKi8KKyNpZm5kZWYgX0dMX0FSR19OT05OVUxMCisjIGlmIChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID49IDMpIHx8IF9fR05VQ19fID4gMworIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpIF9fYXR0cmlidXRlX18gKChfX25vbm51bGxfXyBwYXJhbXMpKQorIyBlbHNlCisjICBkZWZpbmUgX0dMX0FSR19OT05OVUxMKHBhcmFtcykKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UgaXMgY29waWVkIGhlcmUuICAqLworI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0UKKworIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKy8qIEEgY29tcGlsZXIgYXR0cmlidXRlIGlzIGF2YWlsYWJsZSBpbiBnY2MgdmVyc2lvbnMgNC4zLjAgYW5kIGxhdGVyLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24gX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtZXNzYWdlKSkpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisvKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmN0aW9uKSBmdW5jdGlvbgorIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBfR0xfV0FSTl9PTl9VU0VfQ1hYIChmdW5jdGlvbiwgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgInN0cmluZyIpCisgICBpcyBsaWtlIF9HTF9XQVJOX09OX1VTRSAoZnVuY3Rpb24sICJzdHJpbmciKSwgZXhjZXB0IHRoYXQgdGhlIGZ1bmN0aW9uIGlzCisgICBkZWNsYXJlZCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsCisgICBhbmQgYXR0cmlidXRlcy4KKyAgIFRoaXMgdmFyaWFudCBpcyB1c2VmdWwgZm9yIG92ZXJsb2FkZWQgZnVuY3Rpb25zIGluIEMrKy4gX0dMX1dBUk5fT05fVVNFIGRvZXMKKyAgIG5vdCB3b3JrIGluIHRoaXMgY2FzZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX09OX1VTRV9DWFgKKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCitleHRlcm4gcmV0dHlwZSBmdW5jdGlvbiBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzIFwKKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtc2cpKSkKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKy8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCitleHRlcm4gcmV0dHlwZSBmdW5jdGlvbiBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisjIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorX0dMX1dBUk5fRVhURVJOX0MgaW50IF9nbF93YXJuX29uX3VzZQorIyBlbmRpZgorI2VuZGlmCisKKy8qIF9HTF9XQVJOX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fRVhURVJOX0MKKyMgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cworIyAgZGVmaW5lIF9HTF9XQVJOX0VYVEVSTl9DIGV4dGVybiAiQyIKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9XQVJOX0VYVEVSTl9DIGV4dGVybgorIyBlbmRpZgorI2VuZGlmCisKKy8qIE9uIEFJWCwgc2lnX2F0b21pY190IGFscmVhZHkgaW5jbHVkZXMgdm9sYXRpbGUuICBDOTkgcmVxdWlyZXMgdGhhdAorICAgJ3ZvbGF0aWxlIHNpZ19hdG9taWNfdCcgaWdub3JlIHRoZSBleHRyYSBtb2RpZmllciwgYnV0IEM4OSBkaWQgbm90LgorICAgSGVuY2UsIHJlZGVmaW5lIHRoaXMgdG8gYSBub24tdm9sYXRpbGUgdHlwZSBhcyBuZWVkZWQuICAqLworI2lmICEgMQorIyBpZiAhR05VTElCX2RlZmluZWRfc2lnX2F0b21pY190Cit0eXBlZGVmIGludCBycGxfc2lnX2F0b21pY190OworIyAgdW5kZWYgc2lnX2F0b21pY190CisjICBkZWZpbmUgc2lnX2F0b21pY190IHJwbF9zaWdfYXRvbWljX3QKKyMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9zaWdfYXRvbWljX3QgMQorIyBlbmRpZgorI2VuZGlmCisKKy8qIEEgc2V0IG9yIG1hc2sgb2Ygc2lnbmFscy4gICovCisjaWYgITEKKyMgaWYgIUdOVUxJQl9kZWZpbmVkX3NpZ3NldF90Cit0eXBlZGVmIHVuc2lnbmVkIGludCBzaWdzZXRfdDsKKyMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9zaWdzZXRfdCAxCisjIGVuZGlmCisjZW5kaWYKKworLyogRGVmaW5lIHNpZ2hhbmRsZXJfdCwgdGhlIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzLiAgQSBHTlUgZXh0ZW5zaW9uLiAgKi8KKyNpZiAhMQorIyBpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjIGVuZGlmCisjIGlmICFHTlVMSUJfZGVmaW5lZF9zaWdoYW5kbGVyX3QKK3R5cGVkZWYgdm9pZCAoKnNpZ2hhbmRsZXJfdCkgKGludCk7CisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfc2lnaGFuZGxlcl90IDEKKyMgZW5kaWYKKyMgaWZkZWYgX19jcGx1c3BsdXMKK30KKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmbmRlZiBTSUdQSVBFCisvKiBEZWZpbmUgU0lHUElQRSB0byBhIHZhbHVlIHRoYXQgZG9lcyBub3Qgb3ZlcmxhcCB3aXRoIG90aGVyIHNpZ25hbHMuICAqLworIyAgZGVmaW5lIFNJR1BJUEUgMTMKKyMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9TSUdQSVBFIDEKKy8qIFRvIGFjdHVhbGx5IHVzZSBTSUdQSVBFLCB5b3UgYWxzbyBuZWVkIHRoZSBnbnVsaWIgbW9kdWxlcyAnc2lncHJvY21hc2snLAorICAgJ3dyaXRlJywgJ3N0ZGlvJy4gICovCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBNYXhpbXVtIHNpZ25hbCBudW1iZXIgKyAxLiAgKi8KKyNpZm5kZWYgTlNJRworIyBpZiBkZWZpbmVkIF9fVEFOREVNCisjICBkZWZpbmUgTlNJRyAzMgorIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBwdGhyZWFkX3NpZ21hc2sKKyMgICBkZWZpbmUgcHRocmVhZF9zaWdtYXNrIHJwbF9wdGhyZWFkX3NpZ21hc2sKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwdGhyZWFkX3NpZ21hc2ssIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgaG93LCBjb25zdCBzaWdzZXRfdCAqbmV3X21hc2ssIHNpZ3NldF90ICpvbGRfbWFzaykpOworX0dMX0NYWEFMSUFTX1JQTCAocHRocmVhZF9zaWdtYXNrLCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGhvdywgY29uc3Qgc2lnc2V0X3QgKm5ld19tYXNrLCBzaWdzZXRfdCAqb2xkX21hc2spKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHB0aHJlYWRfc2lnbWFzaywgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBob3csIGNvbnN0IHNpZ3NldF90ICpuZXdfbWFzaywgc2lnc2V0X3QgKm9sZF9tYXNrKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocHRocmVhZF9zaWdtYXNrLCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGhvdywgY29uc3Qgc2lnc2V0X3QgKm5ld19tYXNrLCBzaWdzZXRfdCAqb2xkX21hc2spKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHB0aHJlYWRfc2lnbWFzayk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHB0aHJlYWRfc2lnbWFzaworIyBpZiBIQVZFX1JBV19ERUNMX1BUSFJFQURfU0lHTUFTSworX0dMX1dBUk5fT05fVVNFIChwdGhyZWFkX3NpZ21hc2ssICJwdGhyZWFkX3NpZ21hc2sgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcHRocmVhZF9zaWdtYXNrIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDEKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiByYWlzZQorIyAgIGRlZmluZSByYWlzZSBycGxfcmFpc2UKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChyYWlzZSwgaW50LCAoaW50IHNpZykpOworX0dMX0NYWEFMSUFTX1JQTCAocmFpc2UsIGludCwgKGludCBzaWcpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHJhaXNlLCBpbnQsIChpbnQgc2lnKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocmFpc2UsIGludCwgKGludCBzaWcpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHJhaXNlKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcmFpc2UKKy8qIEFzc3VtZSByYWlzZSBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFIChyYWlzZSwgInJhaXNlIGNhbiBjcmFzaCBvbiBuYXRpdmUgV2luZG93cyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHJhaXNlIGZvciBwb3J0YWJpbGl0eSIpOworI2VuZGlmCisKKworI2lmIDEKKyMgaWYgITEKKworIyAgaWZuZGVmIEdOVUxJQl9kZWZpbmVkX3NpZ25hbF9ibG9ja2luZworIyAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9zaWduYWxfYmxvY2tpbmcgMQorIyAgZW5kaWYKKworLyogTWF4aW11bSBzaWduYWwgbnVtYmVyICsgMS4gICovCisjICBpZm5kZWYgTlNJRworIyAgIGRlZmluZSBOU0lHIDMyCisjICBlbmRpZgorCisvKiBUaGlzIGNvZGUgc3VwcG9ydHMgb25seSAzMiBzaWduYWxzLiAgKi8KKyMgIGlmICFHTlVMSUJfZGVmaW5lZF92ZXJpZnlfTlNJR19jb25zdHJhaW50Cit0eXBlZGVmIGludCB2ZXJpZnlfTlNJR19jb25zdHJhaW50W05TSUcgPD0gMzIgPyAxIDogLTFdOworIyAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF92ZXJpZnlfTlNJR19jb25zdHJhaW50IDEKKyMgIGVuZGlmCisKKyMgZW5kaWYKKworLyogVGVzdCB3aGV0aGVyIGEgZ2l2ZW4gc2lnbmFsIGlzIGNvbnRhaW5lZCBpbiBhIHNpZ25hbCBzZXQuICAqLworIyBpZiAxCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBtYWNybyBvbiBNYWMgT1MgWC4gICovCisjICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyAgIHVuZGVmIHNpZ2lzbWVtYmVyCisjICBlbmRpZgorIyBlbHNlCitfR0xfRlVOQ0RFQ0xfU1lTIChzaWdpc21lbWJlciwgaW50LCAoY29uc3Qgc2lnc2V0X3QgKnNldCwgaW50IHNpZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzaWdpc21lbWJlciwgaW50LCAoY29uc3Qgc2lnc2V0X3QgKnNldCwgaW50IHNpZykpOworX0dMX0NYWEFMSUFTV0FSTiAoc2lnaXNtZW1iZXIpOworCisvKiBJbml0aWFsaXplIGEgc2lnbmFsIHNldCB0byB0aGUgZW1wdHkgc2V0LiAgKi8KKyMgaWYgMQorLyogVGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgbWFjcm8gb24gTWFjIE9TIFguICAqLworIyAgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgICB1bmRlZiBzaWdlbXB0eXNldAorIyAgZW5kaWYKKyMgZWxzZQorX0dMX0ZVTkNERUNMX1NZUyAoc2lnZW1wdHlzZXQsIGludCwgKHNpZ3NldF90ICpzZXQpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzaWdlbXB0eXNldCwgaW50LCAoc2lnc2V0X3QgKnNldCkpOworX0dMX0NYWEFMSUFTV0FSTiAoc2lnZW1wdHlzZXQpOworCisvKiBBZGQgYSBzaWduYWwgdG8gYSBzaWduYWwgc2V0LiAgKi8KKyMgaWYgMQorLyogVGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgbWFjcm8gb24gTWFjIE9TIFguICAqLworIyAgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgICB1bmRlZiBzaWdhZGRzZXQKKyMgIGVuZGlmCisjIGVsc2UKK19HTF9GVU5DREVDTF9TWVMgKHNpZ2FkZHNldCwgaW50LCAoc2lnc2V0X3QgKnNldCwgaW50IHNpZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc2lnYWRkc2V0LCBpbnQsIChzaWdzZXRfdCAqc2V0LCBpbnQgc2lnKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChzaWdhZGRzZXQpOworCisvKiBSZW1vdmUgYSBzaWduYWwgZnJvbSBhIHNpZ25hbCBzZXQuICAqLworIyBpZiAxCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBtYWNybyBvbiBNYWMgT1MgWC4gICovCisjICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyAgIHVuZGVmIHNpZ2RlbHNldAorIyAgZW5kaWYKKyMgZWxzZQorX0dMX0ZVTkNERUNMX1NZUyAoc2lnZGVsc2V0LCBpbnQsIChzaWdzZXRfdCAqc2V0LCBpbnQgc2lnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzaWdkZWxzZXQsIGludCwgKHNpZ3NldF90ICpzZXQsIGludCBzaWcpKTsKK19HTF9DWFhBTElBU1dBUk4gKHNpZ2RlbHNldCk7CisKKy8qIEZpbGwgYSBzaWduYWwgc2V0IHdpdGggYWxsIHBvc3NpYmxlIHNpZ25hbHMuICAqLworIyBpZiAxCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBtYWNybyBvbiBNYWMgT1MgWC4gICovCisjICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyAgIHVuZGVmIHNpZ2ZpbGxzZXQKKyMgIGVuZGlmCisjIGVsc2UKK19HTF9GVU5DREVDTF9TWVMgKHNpZ2ZpbGxzZXQsIGludCwgKHNpZ3NldF90ICpzZXQpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzaWdmaWxsc2V0LCBpbnQsIChzaWdzZXRfdCAqc2V0KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChzaWdmaWxsc2V0KTsKKworLyogUmV0dXJuIHRoZSBzZXQgb2YgdGhvc2UgYmxvY2tlZCBzaWduYWxzIHRoYXQgYXJlIHBlbmRpbmcuICAqLworIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoc2lncGVuZGluZywgaW50LCAoc2lnc2V0X3QgKnNldCkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHNpZ3BlbmRpbmcsIGludCwgKHNpZ3NldF90ICpzZXQpKTsKK19HTF9DWFhBTElBU1dBUk4gKHNpZ3BlbmRpbmcpOworCisvKiBJZiBPTERfU0VUIGlzIG5vdCBOVUxMLCBwdXQgdGhlIGN1cnJlbnQgc2V0IG9mIGJsb2NrZWQgc2lnbmFscyBpbiAqT0xEX1NFVC4KKyAgIFRoZW4sIGlmIFNFVCBpcyBub3QgTlVMTCwgYWZmZWN0IHRoZSBjdXJyZW50IHNldCBvZiBibG9ja2VkIHNpZ25hbHMgYnkKKyAgIGNvbWJpbmluZyBpdCB3aXRoICpTRVQgYXMgaW5kaWNhdGVkIGluIE9QRVJBVElPTi4KKyAgIEluIHRoaXMgaW1wbGVtZW50YXRpb24sIHlvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIGEgc2lnbmFsIGhhbmRsZXIKKyAgIHdoaWxlIHRoZSBzaWduYWwgaXMgYmxvY2tlZC4gICovCisjIGlmICExCisjICBkZWZpbmUgU0lHX0JMT0NLICAgMCAgLyogYmxvY2tlZF9zZXQgPSBibG9ja2VkX3NldCB8ICpzZXQ7ICovCisjICBkZWZpbmUgU0lHX1NFVE1BU0sgMSAgLyogYmxvY2tlZF9zZXQgPSAqc2V0OyAqLworIyAgZGVmaW5lIFNJR19VTkJMT0NLIDIgIC8qIGJsb2NrZWRfc2V0ID0gYmxvY2tlZF9zZXQgJiB+KnNldDsgKi8KK19HTF9GVU5DREVDTF9TWVMgKHNpZ3Byb2NtYXNrLCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IG9wZXJhdGlvbiwgY29uc3Qgc2lnc2V0X3QgKnNldCwgc2lnc2V0X3QgKm9sZF9zZXQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHNpZ3Byb2NtYXNrLCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IG9wZXJhdGlvbiwgY29uc3Qgc2lnc2V0X3QgKnNldCwgc2lnc2V0X3QgKm9sZF9zZXQpKTsKK19HTF9DWFhBTElBU1dBUk4gKHNpZ3Byb2NtYXNrKTsKKworLyogSW5zdGFsbCB0aGUgaGFuZGxlciBGVU5DIGZvciBzaWduYWwgU0lHLCBhbmQgcmV0dXJuIHRoZSBwcmV2aW91cworICAgaGFuZGxlci4gICovCisjIGlmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyMgZW5kaWYKKyMgaWYgIUdOVUxJQl9kZWZpbmVkX2Z1bmN0aW9uX3Rha2luZ19pbnRfcmV0dXJuaW5nX3ZvaWRfdAordHlwZWRlZiB2b2lkICgqX2dsX2Z1bmN0aW9uX3Rha2luZ19pbnRfcmV0dXJuaW5nX3ZvaWRfdCkgKGludCk7CisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfZnVuY3Rpb25fdGFraW5nX2ludF9yZXR1cm5pbmdfdm9pZF90IDEKKyMgZW5kaWYKKyMgaWZkZWYgX19jcGx1c3BsdXMKK30KKyMgZW5kaWYKKyMgaWYgITEKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHNpZ25hbCBycGxfc2lnbmFsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc2lnbmFsLCBfZ2xfZnVuY3Rpb25fdGFraW5nX2ludF9yZXR1cm5pbmdfdm9pZF90LAorICAgICAgICAgICAgICAgICAgKGludCBzaWcsIF9nbF9mdW5jdGlvbl90YWtpbmdfaW50X3JldHVybmluZ192b2lkX3QgZnVuYykpOworX0dMX0NYWEFMSUFTX1JQTCAoc2lnbmFsLCBfZ2xfZnVuY3Rpb25fdGFraW5nX2ludF9yZXR1cm5pbmdfdm9pZF90LAorICAgICAgICAgICAgICAgICAgKGludCBzaWcsIF9nbF9mdW5jdGlvbl90YWtpbmdfaW50X3JldHVybmluZ192b2lkX3QgZnVuYykpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChzaWduYWwsIF9nbF9mdW5jdGlvbl90YWtpbmdfaW50X3JldHVybmluZ192b2lkX3QsCisgICAgICAgICAgICAgICAgICAoaW50IHNpZywgX2dsX2Z1bmN0aW9uX3Rha2luZ19pbnRfcmV0dXJuaW5nX3ZvaWRfdCBmdW5jKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzaWduYWwpOworCisjIGlmICExICYmIEdOVUxJQl9kZWZpbmVkX1NJR1BJUEUKKy8qIFJhaXNlIHNpZ25hbCBTSUdQSVBFLiAgKi8KK19HTF9FWFRFUk5fQyBpbnQgX2dsX3JhaXNlX1NJR1BJUEUgKHZvaWQpOworIyBlbmRpZgorCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHNpZ2FkZHNldAorIyBpZiBIQVZFX1JBV19ERUNMX1NJR0FERFNFVAorX0dMX1dBUk5fT05fVVNFIChzaWdhZGRzZXQsICJzaWdhZGRzZXQgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSB0aGUgZ251bGliIG1vZHVsZSBzaWdwcm9jbWFzayBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyMgdW5kZWYgc2lnZGVsc2V0CisjIGlmIEhBVkVfUkFXX0RFQ0xfU0lHREVMU0VUCitfR0xfV0FSTl9PTl9VU0UgKHNpZ2RlbHNldCwgInNpZ2RlbHNldCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIHRoZSBnbnVsaWIgbW9kdWxlIHNpZ3Byb2NtYXNrIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorIyB1bmRlZiBzaWdlbXB0eXNldAorIyBpZiBIQVZFX1JBV19ERUNMX1NJR0VNUFRZU0VUCitfR0xfV0FSTl9PTl9VU0UgKHNpZ2VtcHR5c2V0LCAic2lnZW1wdHlzZXQgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSB0aGUgZ251bGliIG1vZHVsZSBzaWdwcm9jbWFzayBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyMgdW5kZWYgc2lnZmlsbHNldAorIyBpZiBIQVZFX1JBV19ERUNMX1NJR0ZJTExTRVQKK19HTF9XQVJOX09OX1VTRSAoc2lnZmlsbHNldCwgInNpZ2ZpbGxzZXQgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSB0aGUgZ251bGliIG1vZHVsZSBzaWdwcm9jbWFzayBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyMgdW5kZWYgc2lnaXNtZW1iZXIKKyMgaWYgSEFWRV9SQVdfREVDTF9TSUdJU01FTUJFUgorX0dMX1dBUk5fT05fVVNFIChzaWdpc21lbWJlciwgInNpZ2lzbWVtYmVyIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgdGhlIGdudWxpYiBtb2R1bGUgc2lncHJvY21hc2sgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjIHVuZGVmIHNpZ3BlbmRpbmcKKyMgaWYgSEFWRV9SQVdfREVDTF9TSUdQRU5ESU5HCitfR0xfV0FSTl9PTl9VU0UgKHNpZ3BlbmRpbmcsICJzaWdwZW5kaW5nIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgdGhlIGdudWxpYiBtb2R1bGUgc2lncHJvY21hc2sgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjIHVuZGVmIHNpZ3Byb2NtYXNrCisjIGlmIEhBVkVfUkFXX0RFQ0xfU0lHUFJPQ01BU0sKK19HTF9XQVJOX09OX1VTRSAoc2lncHJvY21hc2ssICJzaWdwcm9jbWFzayBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIHRoZSBnbnVsaWIgbW9kdWxlIHNpZ3Byb2NtYXNrIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmIC8qIDEgKi8KKworCisjaWYgMQorIyBpZiAhMQorCisjICBpZiAhMQorCisjICAgaWYgIUdOVUxJQl9kZWZpbmVkX3NpZ2luZm9fdHlwZXMKKworLyogUHJlc2VudCB0byBhbGxvdyBjb21waWxhdGlvbiwgYnV0IHVuc3VwcG9ydGVkIGJ5IGdudWxpYi4gICovCit1bmlvbiBzaWd2YWwKK3sKKyAgaW50IHNpdmFsX2ludDsKKyAgdm9pZCAqc2l2YWxfcHRyOworfTsKKworLyogUHJlc2VudCB0byBhbGxvdyBjb21waWxhdGlvbiwgYnV0IHVuc3VwcG9ydGVkIGJ5IGdudWxpYi4gICovCitzdHJ1Y3Qgc2lnaW5mb190Cit7CisgIGludCBzaV9zaWdubzsKKyAgaW50IHNpX2NvZGU7CisgIGludCBzaV9lcnJubzsKKyAgcGlkX3Qgc2lfcGlkOworICB1aWRfdCBzaV91aWQ7CisgIHZvaWQgKnNpX2FkZHI7CisgIGludCBzaV9zdGF0dXM7CisgIGxvbmcgc2lfYmFuZDsKKyAgdW5pb24gc2lndmFsIHNpX3ZhbHVlOworfTsKK3R5cGVkZWYgc3RydWN0IHNpZ2luZm9fdCBzaWdpbmZvX3Q7CisKKyMgICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX3NpZ2luZm9fdHlwZXMgMQorIyAgIGVuZGlmCisKKyMgIGVuZGlmIC8qICExICovCisKKy8qIFdlIGFzc3VtZSB0aGF0IHBsYXRmb3JtcyB3aGljaCBsYWNrIHRoZSBzaWdhY3Rpb24oKSBmdW5jdGlvbiBhbHNvIGxhY2sKKyAgIHRoZSAnc3RydWN0IHNpZ2FjdGlvbicgdHlwZSwgYW5kIHZpY2UgdmVyc2EuICAqLworCisjICBpZiAhR05VTElCX2RlZmluZWRfc3RydWN0X3NpZ2FjdGlvbgorCitzdHJ1Y3Qgc2lnYWN0aW9uCit7CisgIHVuaW9uCisgIHsKKyAgICB2b2lkICgqX3NhX2hhbmRsZXIpIChpbnQpOworICAgIC8qIFByZXNlbnQgdG8gYWxsb3cgY29tcGlsYXRpb24sIGJ1dCB1bnN1cHBvcnRlZCBieSBnbnVsaWIuICBQT1NJWAorICAgICAgIHNheXMgdGhhdCBpbXBsZW1lbnRhdGlvbnMgbWF5LCBidXQgbm90IG11c3QsIG1ha2Ugc2Ffc2lnYWN0aW9uCisgICAgICAgb3ZlcmxhcCB3aXRoIHNhX2hhbmRsZXIsIGJ1dCB3ZSBrbm93IG9mIG5vIGltcGxlbWVudGF0aW9uIHdoZXJlCisgICAgICAgdGhleSBkbyBub3Qgb3ZlcmxhcC4gICovCisgICAgdm9pZCAoKl9zYV9zaWdhY3Rpb24pIChpbnQsIHNpZ2luZm9fdCAqLCB2b2lkICopOworICB9IF9zYV9mdW5jOworICBzaWdzZXRfdCBzYV9tYXNrOworICAvKiBOb3QgYWxsIFBPU0lYIGZsYWdzIGFyZSBzdXBwb3J0ZWQuICAqLworICBpbnQgc2FfZmxhZ3M7Cit9OworIyAgIGRlZmluZSBzYV9oYW5kbGVyIF9zYV9mdW5jLl9zYV9oYW5kbGVyCisjICAgZGVmaW5lIHNhX3NpZ2FjdGlvbiBfc2FfZnVuYy5fc2Ffc2lnYWN0aW9uCisvKiBVbnN1cHBvcnRlZCBmbGFncyBhcmUgbm90IHByZXNlbnQuICAqLworIyAgIGRlZmluZSBTQV9SRVNFVEhBTkQgMQorIyAgIGRlZmluZSBTQV9OT0RFRkVSIDIKKyMgICBkZWZpbmUgU0FfUkVTVEFSVCA0CisKKyMgICBkZWZpbmUgR05VTElCX2RlZmluZWRfc3RydWN0X3NpZ2FjdGlvbiAxCisjICBlbmRpZgorCitfR0xfRlVOQ0RFQ0xfU1lTIChzaWdhY3Rpb24sIGludCwgKGludCwgY29uc3Qgc3RydWN0IHNpZ2FjdGlvbiAqcmVzdHJpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gKnJlc3RyaWN0KSk7CisKKyMgZWxpZiAhMQorCisjICBkZWZpbmUgc2Ffc2lnYWN0aW9uIHNhX2hhbmRsZXIKKworIyBlbmRpZiAvKiAhMSwgITEgKi8KKworX0dMX0NYWEFMSUFTX1NZUyAoc2lnYWN0aW9uLCBpbnQsIChpbnQsIGNvbnN0IHN0cnVjdCBzaWdhY3Rpb24gKnJlc3RyaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uICpyZXN0cmljdCkpOworX0dMX0NYWEFMSUFTV0FSTiAoc2lnYWN0aW9uKTsKKworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzaWdhY3Rpb24KKyMgaWYgSEFWRV9SQVdfREVDTF9TSUdBQ1RJT04KK19HTF9XQVJOX09OX1VTRSAoc2lnYWN0aW9uLCAic2lnYWN0aW9uIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgdGhlIGdudWxpYiBtb2R1bGUgc2lnYWN0aW9uIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIFNvbWUgc3lzdGVtcyBkb24ndCBoYXZlIFNBX05PREVGRVIuICAqLworI2lmbmRlZiBTQV9OT0RFRkVSCisjIGRlZmluZSBTQV9OT0RFRkVSIDAKKyNlbmRpZgorCisKKyNlbmRpZiAvKiBfR0xfU0lHTkFMX0ggKi8KKyNlbmRpZiAvKiBfR0xfU0lHTkFMX0ggKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGludXgtbGliL3NwYXduLmggYi9saW51eC1saWIvc3Bhd24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTgyZWQyCi0tLSAvZGV2L251bGwKKysrIGIvbGludXgtbGliL3NwYXduLmgKQEAgLTAsMCArMSwxMTkzIEBACisvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovCisvKiBEZWZpbml0aW9ucyBmb3IgUE9TSVggc3Bhd24gaW50ZXJmYWNlLgorICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAzLTIwMDQsIDIwMDgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIF9HTF9TUEFXTl9ICisKKyNpZiBfX0dOVUNfXyA+PSAzCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisjZW5kaWYKKworCisvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisjaWYgMQorIyBpbmNsdWRlX25leHQgPHNwYXduLmg+CisjZW5kaWYKKworI2lmbmRlZiBfR0xfU1BBV05fSAorI2RlZmluZSBfR0xfU1BBV05fSAorCisvKiBHZXQgZGVmaW5pdGlvbnMgb2YgJ3N0cnVjdCBzY2hlZF9wYXJhbScgYW5kICdzaWdzZXRfdCcuCisgICBCdXQgYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zLiAgKi8KKyNpZiAhKGRlZmluZWQgX19HTElCQ19fICYmICFkZWZpbmVkIF9fVUNMSUJDX18pCisjIGluY2x1ZGUgPHNjaGVkLmg+CisjIGluY2x1ZGUgPHNpZ25hbC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2lmbmRlZiBfX1RIUk9XCisjIGRlZmluZSBfX1RIUk9XCisjZW5kaWYKKworLyogR0NDIDIuOTUgYW5kIGxhdGVyIGhhdmUgIl9fcmVzdHJpY3QiOyBDOTkgY29tcGlsZXJzIGhhdmUKKyAgICJyZXN0cmljdCIsIGFuZCAiY29uZmlndXJlIiBtYXkgaGF2ZSBkZWZpbmVkICJyZXN0cmljdCIuCisgICBPdGhlciBjb21waWxlcnMgdXNlIF9fcmVzdHJpY3QsIF9fcmVzdHJpY3RfXywgYW5kIF9SZXN0cmljdCwgYW5kCisgICAnY29uZmlndXJlJyBtaWdodCAjZGVmaW5lICdyZXN0cmljdCcgdG8gdGhvc2Ugd29yZHMsIHNvIHBpY2sgYQorICAgZGlmZmVyZW50IG5hbWUuICAqLworI2lmbmRlZiBfUmVzdHJpY3RfCisjIGlmIDE5OTkwMUwgPD0gX19TVERDX1ZFUlNJT05fXworIyAgZGVmaW5lIF9SZXN0cmljdF8gcmVzdHJpY3QKKyMgZWxpZiAyIDwgX19HTlVDX18gfHwgKDIgPT0gX19HTlVDX18gJiYgOTUgPD0gX19HTlVDX01JTk9SX18pCisjICBkZWZpbmUgX1Jlc3RyaWN0XyBfX3Jlc3RyaWN0CisjIGVsc2UKKyMgIGRlZmluZSBfUmVzdHJpY3RfCisjIGVuZGlmCisjZW5kaWYKKy8qIGdjYyAzLjEgYW5kIHVwIHN1cHBvcnQgdGhlIFtyZXN0cmljdF0gc3ludGF4LiAgRG9uJ3QgdHJ1c3QKKyAgIHN5cy9jZGVmcy5oJ3MgZGVmaW5pdGlvbiBvZiBfX3Jlc3RyaWN0X2FyciwgdGhvdWdoLCBhcyBpdAorICAgbWlzaGFuZGxlcyBnY2MgLWFuc2kgLXBlZGFudGljLiAgKi8KKyNpZm5kZWYgX1Jlc3RyaWN0X2Fycl8KKyMgaWYgKCgxOTk5MDFMIDw9IF9fU1REQ19WRVJTSU9OX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB8fCAoKDMgPCBfX0dOVUNfXyB8fCAoMyA9PSBfX0dOVUNfXyAmJiAxIDw9IF9fR05VQ19NSU5PUl9fKSkgICAgIFwKKyAgICAgICAgICAgJiYgIWRlZmluZWQgX19TVFJJQ1RfQU5TSV9fKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgJiYgIWRlZmluZWQgX19HTlVHX18pCisjICBkZWZpbmUgX1Jlc3RyaWN0X2Fycl8gX1Jlc3RyaWN0XworIyBlbHNlCisjICBkZWZpbmUgX1Jlc3RyaWN0X2Fycl8KKyMgZW5kaWYKKyNlbmRpZgorCisvKiBUaGUgZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTCBldGMuIGFyZSBjb3BpZWQgaGVyZS4gICovCisjaWZuZGVmIF9HTF9DWFhERUZTX0gKKyNkZWZpbmUgX0dMX0NYWERFRlNfSAorCisvKiBUaGUgdGhyZWUgbW9zdCBmcmVxdWVudCB1c2UgY2FzZXMgb2YgdGhlc2UgbWFjcm9zIGFyZToKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgc3Vic3RpdHV0ZSBmb3IgYSBmdW5jdGlvbiB0aGF0IGlzIG1pc3Npbmcgb24gc29tZQorICAgICBwbGF0Zm9ybXMsIGJ1dCBpcyBkZWNsYXJlZCBhbmQgd29ya3MgZmluZSBvbiB0aGUgcGxhdGZvcm1zIG9uIHdoaWNoCisgICAgIGl0IGV4aXN0czoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmICFASEFWRV9GT09ACisgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIGFsbCBwbGF0Zm9ybXMsCisgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIHBsYXRmb3JtczoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorICAgICAgICMgICB1bmRlZiBmb28KKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworICAgICAgICMgZWxzZQorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIHNvbWUgcGxhdGZvcm1zCisgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIG9mIHRoZW0gYW5kCisgICAgIGlzIGFkZGl0aW9uYWxseSBlaXRoZXIgbWlzc2luZyBvciB1bmRlY2xhcmVkIG9uIHNvbWUgb3RoZXIgcGxhdGZvcm1zOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisgICAgICAgIyAgIHVuZGVmIGZvbworICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CisgICAgICAgIyBlbHNlCisgICAgICAgIyAgaWYgIUBIQVZFX0ZPT0AgICBvciAgIGlmICFASEFWRV9ERUNMX0ZPT0AKKyAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorKi8KKworLyogX0dMX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuICJDIgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4KKyNlbmRpZgorCisvKiBfR0xfRlVOQ0RFQ0xfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGRlY2xhcmVzIGEgcmVwbGFjZW1lbnQgZnVuY3Rpb24sIG5hbWVkIHJwbF9mdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9GVU5DREVDTF9SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICovCisjZGVmaW5lIF9HTF9GVU5DREVDTF9SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0ZVTkNERUNMX1JQTF8xIChycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKQorI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMXzEocnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9FWFRFUk5fQyByZXR0eXBlIHJwbF9mdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKworLyogX0dMX0ZVTkNERUNMX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBkZWNsYXJlcyB0aGUgc3lzdGVtIGZ1bmN0aW9uLCBuYW1lZCBmdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9GVU5DREVDTF9TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICovCisjZGVmaW5lIF9HTF9GVU5DREVDTF9TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0VYVEVSTl9DIHJldHR5cGUgZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisKKy8qIF9HTF9DWFhBTElBU19SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHJwbF9mdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFIGlzIGRlZmluZWQuCisgICBFeGFtcGxlOgorICAgICBfR0xfQ1hYQUxJQVNfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKyAqLworI2RlZmluZSBfR0xfQ1hYQUxJQVNfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycykKKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OnJwbF9mdW5jOyAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gcnBsX2Z1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQKKyAgIGRlY2xhcmF0aW9uLiAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IKKyAgIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpycGxfZnVuYyk7ICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHRoZSBzeXN0ZW0gcHJvdmlkZWQgZnVuY3Rpb24gZnVuYywgaWYgR05VTElCX05BTUVTUEFDRQorICAgaXMgZGVmaW5lZC4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9DWFhBTElBU19TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyAgLyogSWYgd2Ugd2VyZSB0byB3cml0ZQorICAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOworICAgICBsaWtlIGFib3ZlIGluIF9HTF9DWFhBTElBU19SUExfMSwgdGhlIGNvbXBpbGVyIGNvdWxkIG9wdGltaXplIGNhbGxzCisgICAgIGJldHRlciAocmVtb3ZlIGFuIGluZGlyZWN0aW9uIHRocm91Z2ggYSAnc3RhdGljJyBwb2ludGVyIHZhcmlhYmxlKSwKKyAgICAgYnV0IHRoZW4gdGhlIF9HTF9DWFhBTElBU1dBUk4gbWFjcm8gYmVsb3cgd291bGQgY2F1c2UgYSB3YXJuaW5nIG5vdCBvbmx5CisgICAgIGZvciB1c2VzIG9mIDo6ZnVuYyBidXQgYWxzbyBmb3IgdXNlcyBvZiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jLiAgKi8KKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGZ1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgZGVjbGFyYXRpb24uCisgICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvciB0aGF0IHdvdWxkCisgICBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpmdW5jKTsgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMsIHJldHR5cGUyLCBwYXJhbWV0ZXJzMik7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGlzIHBpY2tlZCBhbW9uZyBhIHNldCBvZiBvdmVybG9hZGVkIGZ1bmN0aW9ucywKKyAgIG5hbWVseSB0aGUgb25lIHdpdGggcmV0dHlwZTIgYW5kIHBhcmFtZXRlcnMyLiAgVHdvIGNvbnNlY3V0aXZlIGNhc3RzCisgICBhcmUgdXNlZCB0byBzaWxlbmNlIHRoZSAiY2Fubm90IGZpbmQgYSBtYXRjaCIgYW5kICJpbnZhbGlkIGNvbnZlcnNpb24iCisgICBlcnJvcnMgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisgIC8qIFRoZSBvdXRlciBjYXN0IG11c3QgYmUgYSByZWludGVycHJldF9jYXN0LgorICAgICBUaGUgaW5uZXIgY2FzdDogV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNldCBvZiBvdmVybG9hZGVkCisgICAgIGZ1bmN0aW9ucywgaXQgd29ya3MgYXMgYSBzdGF0aWNfY2FzdDw+LCBjaG9vc2luZyB0aGUgZGVzaWduYXRlZCB2YXJpYW50LgorICAgICBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2luZ2xlIHZhcmlhbnQsIGl0IHdvcmtzIGFzIGEKKyAgICAgcmVpbnRlcnByZXRfY2FzdDw+LiBUaGUgcGFyZW50aGVzaXplZCBjYXN0IHN5bnRheCB3b3JrcyBib3RoIHdheXMuICAqLworIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChyZXR0eXBlMigqKXBhcmFtZXRlcnMyKSg6OmZ1bmMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTV0FSTiAoZnVuYyk7CisgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiA6OmZ1bmMgaXMgdXNlZCBidXQgbm90IHdoZW4KKyAgIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gIGZ1bmMgbXVzdCBiZSBkZWZpbmVkIHdpdGhvdXQgb3ZlcmxvYWRlZAorICAgdmFyaWFudHMuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk5fMSAoZnVuYywgR05VTElCX05BTUVTUEFDRSkKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMShmdW5jLG5hbWVzcGFjZSkgXAorICAgX0dMX0NYWEFMSUFTV0FSTl8yIChmdW5jLCBuYW1lc3BhY2UpCisvKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKyAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworIyBpZiAhX19PUFRJTUlaRV9fCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgX0dMX1dBUk5fT05fVVNFIChmdW5jLCBcCisgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworIyBlbHNlCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNXQVJOMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiB0aGUgZ2l2ZW4gb3ZlcmxvYWRlZCB2YXJpYW50IG9mIDo6ZnVuYworICAgaXMgdXNlZCBidXQgbm90IHdoZW4gR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk4xXzEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdOVUxJQl9OQU1FU1BBQ0UpCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgX0dMX0NYWEFMSUFTV0FSTjFfMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgbmFtZXNwYWNlKQorLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKyMgaWYgIV9fT1BUSU1JWkVfXworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisjZW5kaWYgLyogX0dMX0NYWERFRlNfSCAqLworCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwgaXMgY29waWVkIGhlcmUuICAqLworLyogX0dMX0FSR19OT05OVUxMKChuLC4uLixtKSkgdGVsbHMgdGhlIGNvbXBpbGVyIGFuZCBzdGF0aWMgYW5hbHl6ZXIgdG9vbHMKKyAgIHRoYXQgdGhlIHZhbHVlcyBwYXNzZWQgYXMgYXJndW1lbnRzIG4sIC4uLiwgbSBtdXN0IGJlIG5vbi1OVUxMIHBvaW50ZXJzLgorICAgbiA9IDEgc3RhbmRzIGZvciB0aGUgZmlyc3QgYXJndW1lbnQsIG4gPSAyIGZvciB0aGUgc2Vjb25kIGFyZ3VtZW50IGV0Yy4gICovCisjaWZuZGVmIF9HTF9BUkdfTk9OTlVMTAorIyBpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSB8fCBfX0dOVUNfXyA+IDMKKyMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKSBfX2F0dHJpYnV0ZV9fICgoX19ub25udWxsX18gcGFyYW1zKSkKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpCisjIGVuZGlmCisjZW5kaWYKKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFCisKKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCisvKiBBIGNvbXBpbGVyIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDQuMy4wIGFuZCBsYXRlci4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobWVzc2FnZSkpKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24KKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisjIGVuZGlmCisjZW5kaWYKKworLyogX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuY3Rpb24sIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsICJzdHJpbmciKQorICAgaXMgbGlrZSBfR0xfV0FSTl9PTl9VU0UgKGZ1bmN0aW9uLCAic3RyaW5nIiksIGV4Y2VwdCB0aGF0IHRoZSBmdW5jdGlvbiBpcworICAgZGVjbGFyZWQgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLCBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLAorICAgYW5kIGF0dHJpYnV0ZXMuCisgICBUaGlzIHZhcmlhbnQgaXMgdXNlZnVsIGZvciBvdmVybG9hZGVkIGZ1bmN0aW9ucyBpbiBDKysuIF9HTF9XQVJOX09OX1VTRSBkb2VzCisgICBub3Qgd29yayBpbiB0aGlzIGNhc2UuICAqLworI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0VfQ1hYCisjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyBcCisgICAgIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobXNnKSkpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisvKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBfR0xfV0FSTl9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX0VYVEVSTl9DCisjIGlmIGRlZmluZWQgX19jcGx1c3BsdXMKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4gIkMiCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4KKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIERhdGEgc3RydWN0dXJlIHRvIGNvbnRhaW4gYXR0cmlidXRlcyBmb3IgdGhyZWFkIGNyZWF0aW9uLiAgKi8KKyNpZiAwCisjIGRlZmluZSBwb3NpeF9zcGF3bmF0dHJfdCBycGxfcG9zaXhfc3Bhd25hdHRyX3QKKyNlbmRpZgorI2lmIDAgfHwgITEKKyMgaWYgIUdOVUxJQl9kZWZpbmVkX3Bvc2l4X3NwYXduYXR0cl90Cit0eXBlZGVmIHN0cnVjdAoreworICBzaG9ydCBpbnQgX2ZsYWdzOworICBwaWRfdCBfcGdycDsKKyAgc2lnc2V0X3QgX3NkOworICBzaWdzZXRfdCBfc3M7CisgIHN0cnVjdCBzY2hlZF9wYXJhbSBfc3A7CisgIGludCBfcG9saWN5OworICBpbnQgX19wYWRbMTZdOworfSBwb3NpeF9zcGF3bmF0dHJfdDsKKyMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9wb3NpeF9zcGF3bmF0dHJfdCAxCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBEYXRhIHN0cnVjdHVyZSB0byBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhY3Rpb25zIHRvIGJlCisgICBwZXJmb3JtZWQgaW4gdGhlIG5ldyBwcm9jZXNzIHdpdGggcmVzcGVjdCB0byBmaWxlIGRlc2NyaXB0b3JzLiAgKi8KKyNpZiAwCisjIGRlZmluZSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCBycGxfcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QKKyNlbmRpZgorI2lmIDAgfHwgITEKKyMgaWYgIUdOVUxJQl9kZWZpbmVkX3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190Cit0eXBlZGVmIHN0cnVjdAoreworICBpbnQgX2FsbG9jYXRlZDsKKyAgaW50IF91c2VkOworICBzdHJ1Y3QgX19zcGF3bl9hY3Rpb24gKl9hY3Rpb25zOworICBpbnQgX19wYWRbMTZdOworfSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdDsKKyMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9wb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAxCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBGbGFncyB0byBiZSBzZXQgaW4gdGhlICdwb3NpeF9zcGF3bmF0dHJfdCcuICAqLworI2lmIDEKKy8qIFVzZSB0aGUgdmFsdWVzIGZyb20gdGhlIHN5c3RlbSwgYnV0IHByb3ZpZGUgdGhlIG1pc3Npbmcgb25lcy4gICovCisjIGlmbmRlZiBQT1NJWF9TUEFXTl9TRVRTQ0hFRFBBUkFNCisjICBkZWZpbmUgUE9TSVhfU1BBV05fU0VUU0NIRURQQVJBTSAwCisjIGVuZGlmCisjIGlmbmRlZiBQT1NJWF9TUEFXTl9TRVRTQ0hFRFVMRVIKKyMgIGRlZmluZSBQT1NJWF9TUEFXTl9TRVRTQ0hFRFVMRVIgMAorIyBlbmRpZgorI2Vsc2UKKyMgaWYgMAorLyogVXNlIHRoZSB2YWx1ZXMgZnJvbSB0aGUgc3lzdGVtLCBmb3IgYmV0dGVyIGNvbXBhdGliaWxpdHkuICAqLworLyogQnV0IHRoaXMgaW1wbGVtZW50YXRpb24gZG9lcyBub3Qgc3VwcG9ydCBBSVggZXh0ZW5zaW9ucy4gICovCisjICB1bmRlZiBQT1NJWF9TUEFXTl9GT1JLX0hBTkRMRVJTCisjIGVsc2UKKyMgIGRlZmluZSBQT1NJWF9TUEFXTl9SRVNFVElEUyAgICAgICAgICAgMHgwMQorIyAgZGVmaW5lIFBPU0lYX1NQQVdOX1NFVFBHUk9VUCAgICAgICAgICAweDAyCisjICBkZWZpbmUgUE9TSVhfU1BBV05fU0VUU0lHREVGICAgICAgICAgIDB4MDQKKyMgIGRlZmluZSBQT1NJWF9TUEFXTl9TRVRTSUdNQVNLICAgICAgICAgMHgwOAorIyAgZGVmaW5lIFBPU0lYX1NQQVdOX1NFVFNDSEVEUEFSQU0gICAgICAweDEwCisjICBkZWZpbmUgUE9TSVhfU1BBV05fU0VUU0NIRURVTEVSICAgICAgIDB4MjAKKyMgZW5kaWYKKyNlbmRpZgorLyogQSBHTlUgZXh0ZW5zaW9uLiAgVXNlIHRoZSBuZXh0IGZyZWUgYml0IHBvc2l0aW9uLiAgKi8KKyNkZWZpbmUgUE9TSVhfU1BBV05fVVNFVkZPUksgXAorICAoKFBPU0lYX1NQQVdOX1JFU0VUSURTIHwgKFBPU0lYX1NQQVdOX1JFU0VUSURTIC0gMSkgICAgICAgICAgICAgICAgICAgICBcCisgICAgfCBQT1NJWF9TUEFXTl9TRVRQR1JPVVAgfCAoUE9TSVhfU1BBV05fU0VUUEdST1VQIC0gMSkgICAgICAgICAgICAgICAgIFwKKyAgICB8IFBPU0lYX1NQQVdOX1NFVFNJR0RFRiB8IChQT1NJWF9TUEFXTl9TRVRTSUdERUYgLSAxKSAgICAgICAgICAgICAgICAgXAorICAgIHwgUE9TSVhfU1BBV05fU0VUU0lHTUFTSyB8IChQT1NJWF9TUEFXTl9TRVRTSUdNQVNLIC0gMSkgICAgICAgICAgICAgICBcCisgICAgfCBQT1NJWF9TUEFXTl9TRVRTQ0hFRFBBUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB8IChQT1NJWF9TUEFXTl9TRVRTQ0hFRFBBUkFNID4gMCA/IFBPU0lYX1NQQVdOX1NFVFNDSEVEUEFSQU0gLSAxIDogMCkgXAorICAgIHwgUE9TSVhfU1BBV05fU0VUU0NIRURVTEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfCAoUE9TSVhfU1BBV05fU0VUU0NIRURVTEVSID4gMCA/IFBPU0lYX1NQQVdOX1NFVFNDSEVEVUxFUiAtIDEgOiAwKSkgIFwKKyAgICsgMSkKKyNpZiAhR05VTElCX2RlZmluZWRfdmVyaWZ5X1BPU0lYX1NQQVdOX1VTRVZGT1JLX25vX292ZXJsYXAKK3R5cGVkZWYgaW50IHZlcmlmeV9QT1NJWF9TUEFXTl9VU0VWRk9SS19ub19vdmVybGFwCisgICAgICAgICAgICBbKCgoUE9TSVhfU1BBV05fUkVTRVRJRFMgfCBQT1NJWF9TUEFXTl9TRVRQR1JPVVAKKyAgICAgICAgICAgICAgICB8IFBPU0lYX1NQQVdOX1NFVFNJR0RFRiB8IFBPU0lYX1NQQVdOX1NFVFNJR01BU0sKKyAgICAgICAgICAgICAgICB8IFBPU0lYX1NQQVdOX1NFVFNDSEVEUEFSQU0gfCBQT1NJWF9TUEFXTl9TRVRTQ0hFRFVMRVIpCisgICAgICAgICAgICAgICAmIFBPU0lYX1NQQVdOX1VTRVZGT1JLKQorICAgICAgICAgICAgICA9PSAwKQorICAgICAgICAgICAgID8gMSA6IC0xXTsKKyMgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX3ZlcmlmeV9QT1NJWF9TUEFXTl9VU0VWRk9SS19ub19vdmVybGFwIDEKKyNlbmRpZgorCisKKyNpZiAwCisvKiBTcGF3biBhIG5ldyBwcm9jZXNzIGV4ZWN1dGluZyBQQVRIIHdpdGggdGhlIGF0dHJpYnV0ZXMgZGVzY3JpYmVzIGluICpBVFRSUC4KKyAgIEJlZm9yZSBydW5uaW5nIHRoZSBwcm9jZXNzIHBlcmZvcm0gdGhlIGFjdGlvbnMgZGVzY3JpYmVkIGluIEZJTEUtQUNUSU9OUy4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludHMgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHBvc2l4X3NwYXduIHJwbF9wb3NpeF9zcGF3bgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHBvc2l4X3NwYXduLCBpbnQsCisgICAgICAgICAgICAgICAgICAocGlkX3QgKl9SZXN0cmljdF8gX19waWQsCisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX1Jlc3RyaWN0XyBfX3BhdGgsCisgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9SZXN0cmljdF8gX19maWxlX2FjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRycCwKKyAgICAgICAgICAgICAgICAgICBjaGFyICpjb25zdCBhcmd2W19SZXN0cmljdF9hcnJfXSwKKyAgICAgICAgICAgICAgICAgICBjaGFyICpjb25zdCBlbnZwW19SZXN0cmljdF9hcnJfXSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIsIDUsIDYpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwb3NpeF9zcGF3biwgaW50LAorICAgICAgICAgICAgICAgICAgKHBpZF90ICpfUmVzdHJpY3RfIF9fcGlkLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9SZXN0cmljdF8gX19wYXRoLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfUmVzdHJpY3RfIF9fZmlsZV9hY3Rpb25zLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0cnAsCisgICAgICAgICAgICAgICAgICAgY2hhciAqY29uc3QgYXJndltfUmVzdHJpY3RfYXJyX10sCisgICAgICAgICAgICAgICAgICAgY2hhciAqY29uc3QgZW52cFtfUmVzdHJpY3RfYXJyX10pKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduLCBpbnQsCisgICAgICAgICAgICAgICAgICAocGlkX3QgKl9SZXN0cmljdF8gX19waWQsCisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX1Jlc3RyaWN0XyBfX3BhdGgsCisgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9SZXN0cmljdF8gX19maWxlX2FjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRycCwKKyAgICAgICAgICAgICAgICAgICBjaGFyICpjb25zdCBhcmd2W19SZXN0cmljdF9hcnJfXSwKKyAgICAgICAgICAgICAgICAgICBjaGFyICpjb25zdCBlbnZwW19SZXN0cmljdF9hcnJfXSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIsIDUsIDYpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocG9zaXhfc3Bhd24sIGludCwKKyAgICAgICAgICAgICAgICAgIChwaWRfdCAqX1Jlc3RyaWN0XyBfX3BpZCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfUmVzdHJpY3RfIF9fcGF0aCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqX1Jlc3RyaWN0XyBfX2ZpbGVfYWN0aW9ucywKKyAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHJwLAorICAgICAgICAgICAgICAgICAgIGNoYXIgKmNvbnN0IGFyZ3ZbX1Jlc3RyaWN0X2Fycl9dLAorICAgICAgICAgICAgICAgICAgIGNoYXIgKmNvbnN0IGVudnBbX1Jlc3RyaWN0X2Fycl9dKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwb3NpeF9zcGF3bik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHBvc2l4X3NwYXduCisjIGlmIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV04KK19HTF9XQVJOX09OX1VTRSAocG9zaXhfc3Bhd24sICJwb3NpeF9zcGF3biBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd24gZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDEKKy8qIFNpbWlsYXIgdG8gJ3Bvc2l4X3NwYXduJyBidXQgc2VhcmNoIGZvciBGSUxFIGluIHRoZSBQQVRILgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50cyBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHBvc2l4X3NwYXducCBycGxfcG9zaXhfc3Bhd25wCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocG9zaXhfc3Bhd25wLCBpbnQsCisgICAgICAgICAgICAgICAgICAocGlkX3QgKl9fcGlkLCBjb25zdCBjaGFyICpfX2ZpbGUsCisgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9fZmlsZV9hY3Rpb25zLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHJwLAorICAgICAgICAgICAgICAgICAgIGNoYXIgKmNvbnN0IGFyZ3ZbXSwgY2hhciAqY29uc3QgZW52cFtdKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMiwgNSwgNikpKTsKK19HTF9DWFhBTElBU19SUEwgKHBvc2l4X3NwYXducCwgaW50LAorICAgICAgICAgICAgICAgICAgKHBpZF90ICpfX3BpZCwgY29uc3QgY2hhciAqX19maWxlLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfX2ZpbGVfYWN0aW9ucywKKyAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX19hdHRycCwKKyAgICAgICAgICAgICAgICAgICBjaGFyICpjb25zdCBhcmd2W10sIGNoYXIgKmNvbnN0IGVudnBbXSkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocG9zaXhfc3Bhd25wLCBpbnQsCisgICAgICAgICAgICAgICAgICAocGlkX3QgKl9fcGlkLCBjb25zdCBjaGFyICpfX2ZpbGUsCisgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9fZmlsZV9hY3Rpb25zLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHJwLAorICAgICAgICAgICAgICAgICAgIGNoYXIgKmNvbnN0IGFyZ3ZbXSwgY2hhciAqY29uc3QgZW52cFtdKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMiwgNSwgNikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwb3NpeF9zcGF3bnAsIGludCwKKyAgICAgICAgICAgICAgICAgIChwaWRfdCAqX19waWQsIGNvbnN0IGNoYXIgKl9fZmlsZSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqX19maWxlX2FjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9fYXR0cnAsCisgICAgICAgICAgICAgICAgICAgY2hhciAqY29uc3QgYXJndltdLCBjaGFyICpjb25zdCBlbnZwW10pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHBvc2l4X3NwYXducCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHBvc2l4X3NwYXducAorIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOUAorX0dMX1dBUk5fT05fVVNFIChwb3NpeF9zcGF3bnAsICJwb3NpeF9zcGF3bnAgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXducCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAxCisvKiBJbml0aWFsaXplIGRhdGEgc3RydWN0dXJlIHdpdGggYXR0cmlidXRlcyBmb3IgJ3NwYXduJyB0byBkZWZhdWx0IHZhbHVlcy4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHBvc2l4X3NwYXduYXR0cl9pbml0IHJwbF9wb3NpeF9zcGF3bmF0dHJfaW5pdAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHBvc2l4X3NwYXduYXR0cl9pbml0LCBpbnQsIChwb3NpeF9zcGF3bmF0dHJfdCAqX19hdHRyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocG9zaXhfc3Bhd25hdHRyX2luaXQsIGludCwgKHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHIpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduYXR0cl9pbml0LCBpbnQsIChwb3NpeF9zcGF3bmF0dHJfdCAqX19hdHRyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X3NwYXduYXR0cl9pbml0LCBpbnQsIChwb3NpeF9zcGF3bmF0dHJfdCAqX19hdHRyKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwb3NpeF9zcGF3bmF0dHJfaW5pdCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHBvc2l4X3NwYXduYXR0cl9pbml0CisjIGlmIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05BVFRSX0lOSVQKK19HTF9XQVJOX09OX1VTRSAocG9zaXhfc3Bhd25hdHRyX2luaXQsICJwb3NpeF9zcGF3bmF0dHJfaW5pdCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25hdHRyX2luaXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDEKKy8qIEZyZWUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBBVFRSLiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgcG9zaXhfc3Bhd25hdHRyX2Rlc3Ryb3kgcnBsX3Bvc2l4X3NwYXduYXR0cl9kZXN0cm95CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocG9zaXhfc3Bhd25hdHRyX2Rlc3Ryb3ksIGludCwgKHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwb3NpeF9zcGF3bmF0dHJfZGVzdHJveSwgaW50LCAocG9zaXhfc3Bhd25hdHRyX3QgKl9fYXR0cikpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocG9zaXhfc3Bhd25hdHRyX2Rlc3Ryb3ksIGludCwgKHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocG9zaXhfc3Bhd25hdHRyX2Rlc3Ryb3ksIGludCwgKHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHIpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHBvc2l4X3NwYXduYXR0cl9kZXN0cm95KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcG9zaXhfc3Bhd25hdHRyX2Rlc3Ryb3kKKyMgaWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfREVTVFJPWQorX0dMX1dBUk5fT05fVVNFIChwb3NpeF9zcGF3bmF0dHJfZGVzdHJveSwKKyAgICAgICAgICAgICAgICAgInBvc2l4X3NwYXduYXR0cl9kZXN0cm95IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bmF0dHJfZGVzdHJveSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorLyogU3RvcmUgc2lnbmFsIG1hc2sgZm9yIHNpZ25hbHMgd2l0aCBkZWZhdWx0IGhhbmRsaW5nIGZyb20gQVRUUiBpbgorICAgU0lHREVGQVVMVC4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHBvc2l4X3NwYXduYXR0cl9nZXRzaWdkZWZhdWx0IHJwbF9wb3NpeF9zcGF3bmF0dHJfZ2V0c2lnZGVmYXVsdAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHBvc2l4X3NwYXduYXR0cl9nZXRzaWdkZWZhdWx0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIHNpZ3NldF90ICpfUmVzdHJpY3RfIF9fc2lnZGVmYXVsdCkKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHBvc2l4X3NwYXduYXR0cl9nZXRzaWdkZWZhdWx0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIHNpZ3NldF90ICpfUmVzdHJpY3RfIF9fc2lnZGVmYXVsdCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocG9zaXhfc3Bhd25hdHRyX2dldHNpZ2RlZmF1bHQsIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgc2lnc2V0X3QgKl9SZXN0cmljdF8gX19zaWdkZWZhdWx0KQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X3NwYXduYXR0cl9nZXRzaWdkZWZhdWx0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIHNpZ3NldF90ICpfUmVzdHJpY3RfIF9fc2lnZGVmYXVsdCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocG9zaXhfc3Bhd25hdHRyX2dldHNpZ2RlZmF1bHQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bmF0dHJfZ2V0c2lnZGVmYXVsdAorIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdERUZBVUxUCitfR0xfV0FSTl9PTl9VU0UgKHBvc2l4X3NwYXduYXR0cl9nZXRzaWdkZWZhdWx0LAorICAgICAgICAgICAgICAgICAicG9zaXhfc3Bhd25hdHRyX2dldHNpZ2RlZmF1bHQgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9nZXRzaWdkZWZhdWx0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisvKiBTZXQgc2lnbmFsIG1hc2sgZm9yIHNpZ25hbHMgd2l0aCBkZWZhdWx0IGhhbmRsaW5nIGluIEFUVFIgdG8gU0lHREVGQVVMVC4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHBvc2l4X3NwYXduYXR0cl9zZXRzaWdkZWZhdWx0IHJwbF9wb3NpeF9zcGF3bmF0dHJfc2V0c2lnZGVmYXVsdAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHBvc2l4X3NwYXduYXR0cl9zZXRzaWdkZWZhdWx0LCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ3NldF90ICpfUmVzdHJpY3RfIF9fc2lnZGVmYXVsdCkKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHBvc2l4X3NwYXduYXR0cl9zZXRzaWdkZWZhdWx0LCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ3NldF90ICpfUmVzdHJpY3RfIF9fc2lnZGVmYXVsdCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocG9zaXhfc3Bhd25hdHRyX3NldHNpZ2RlZmF1bHQsIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnc2V0X3QgKl9SZXN0cmljdF8gX19zaWdkZWZhdWx0KQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X3NwYXduYXR0cl9zZXRzaWdkZWZhdWx0LCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ3NldF90ICpfUmVzdHJpY3RfIF9fc2lnZGVmYXVsdCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocG9zaXhfc3Bhd25hdHRyX3NldHNpZ2RlZmF1bHQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bmF0dHJfc2V0c2lnZGVmYXVsdAorIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9TRVRTSUdERUZBVUxUCitfR0xfV0FSTl9PTl9VU0UgKHBvc2l4X3NwYXduYXR0cl9zZXRzaWdkZWZhdWx0LAorICAgICAgICAgICAgICAgICAicG9zaXhfc3Bhd25hdHRyX3NldHNpZ2RlZmF1bHQgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9zZXRzaWdkZWZhdWx0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisvKiBTdG9yZSBzaWduYWwgbWFzayBmb3IgdGhlIG5ldyBwcm9jZXNzIGZyb20gQVRUUiBpbiBTSUdNQVNLLiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgcG9zaXhfc3Bhd25hdHRyX2dldHNpZ21hc2sgcnBsX3Bvc2l4X3NwYXduYXR0cl9nZXRzaWdtYXNrCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocG9zaXhfc3Bhd25hdHRyX2dldHNpZ21hc2ssIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgc2lnc2V0X3QgKl9SZXN0cmljdF8gX19zaWdtYXNrKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocG9zaXhfc3Bhd25hdHRyX2dldHNpZ21hc2ssIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgc2lnc2V0X3QgKl9SZXN0cmljdF8gX19zaWdtYXNrKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChwb3NpeF9zcGF3bmF0dHJfZ2V0c2lnbWFzaywgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBzaWdzZXRfdCAqX1Jlc3RyaWN0XyBfX3NpZ21hc2spCisgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocG9zaXhfc3Bhd25hdHRyX2dldHNpZ21hc2ssIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgc2lnc2V0X3QgKl9SZXN0cmljdF8gX19zaWdtYXNrKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwb3NpeF9zcGF3bmF0dHJfZ2V0c2lnbWFzayk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHBvc2l4X3NwYXduYXR0cl9nZXRzaWdtYXNrCisjIGlmIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05BVFRSX0dFVFNJR01BU0sKK19HTF9XQVJOX09OX1VTRSAocG9zaXhfc3Bhd25hdHRyX2dldHNpZ21hc2ssCisgICAgICAgICAgICAgICAgICJwb3NpeF9zcGF3bmF0dHJfZ2V0c2lnbWFzayBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25hdHRyX2dldHNpZ21hc2sgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDEKKy8qIFNldCBzaWduYWwgbWFzayBmb3IgdGhlIG5ldyBwcm9jZXNzIGluIEFUVFIgdG8gU0lHTUFTSy4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHBvc2l4X3NwYXduYXR0cl9zZXRzaWdtYXNrIHJwbF9wb3NpeF9zcGF3bmF0dHJfc2V0c2lnbWFzaworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHBvc2l4X3NwYXduYXR0cl9zZXRzaWdtYXNrLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ3NldF90ICpfUmVzdHJpY3RfIF9fc2lnbWFzaykKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHBvc2l4X3NwYXduYXR0cl9zZXRzaWdtYXNrLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ3NldF90ICpfUmVzdHJpY3RfIF9fc2lnbWFzaykpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocG9zaXhfc3Bhd25hdHRyX3NldHNpZ21hc2ssIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnc2V0X3QgKl9SZXN0cmljdF8gX19zaWdtYXNrKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X3NwYXduYXR0cl9zZXRzaWdtYXNrLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ3NldF90ICpfUmVzdHJpY3RfIF9fc2lnbWFzaykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocG9zaXhfc3Bhd25hdHRyX3NldHNpZ21hc2spOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bmF0dHJfc2V0c2lnbWFzaworIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9TRVRTSUdNQVNLCitfR0xfV0FSTl9PTl9VU0UgKHBvc2l4X3NwYXduYXR0cl9zZXRzaWdtYXNrLAorICAgICAgICAgICAgICAgICAicG9zaXhfc3Bhd25hdHRyX3NldHNpZ21hc2sgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9zZXRzaWdtYXNrIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisvKiBHZXQgZmxhZyB3b3JkIGZyb20gdGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBwb3NpeF9zcGF3bmF0dHJfZ2V0ZmxhZ3MgcnBsX3Bvc2l4X3NwYXduYXR0cl9nZXRmbGFncworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHBvc2l4X3NwYXduYXR0cl9nZXRmbGFncywgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBzaG9ydCBpbnQgKl9SZXN0cmljdF8gX19mbGFncykKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHBvc2l4X3NwYXduYXR0cl9nZXRmbGFncywgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBzaG9ydCBpbnQgKl9SZXN0cmljdF8gX19mbGFncykpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocG9zaXhfc3Bhd25hdHRyX2dldGZsYWdzLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIHNob3J0IGludCAqX1Jlc3RyaWN0XyBfX2ZsYWdzKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X3NwYXduYXR0cl9nZXRmbGFncywgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBzaG9ydCBpbnQgKl9SZXN0cmljdF8gX19mbGFncykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocG9zaXhfc3Bhd25hdHRyX2dldGZsYWdzKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcG9zaXhfc3Bhd25hdHRyX2dldGZsYWdzCisjIGlmIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05BVFRSX0dFVEZMQUdTCitfR0xfV0FSTl9PTl9VU0UgKHBvc2l4X3NwYXduYXR0cl9nZXRmbGFncywKKyAgICAgICAgICAgICAgICAgInBvc2l4X3NwYXduYXR0cl9nZXRmbGFncyBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25hdHRyX2dldGZsYWdzIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAxCisvKiBTdG9yZSBmbGFncyBpbiB0aGUgYXR0cmlidXRlIHN0cnVjdHVyZS4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHBvc2l4X3NwYXduYXR0cl9zZXRmbGFncyBycGxfcG9zaXhfc3Bhd25hdHRyX3NldGZsYWdzCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocG9zaXhfc3Bhd25hdHRyX3NldGZsYWdzLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25hdHRyX3QgKl9fYXR0ciwgc2hvcnQgaW50IF9fZmxhZ3MpCisgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwb3NpeF9zcGF3bmF0dHJfc2V0ZmxhZ3MsIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bmF0dHJfdCAqX19hdHRyLCBzaG9ydCBpbnQgX19mbGFncykpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocG9zaXhfc3Bhd25hdHRyX3NldGZsYWdzLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25hdHRyX3QgKl9fYXR0ciwgc2hvcnQgaW50IF9fZmxhZ3MpCisgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocG9zaXhfc3Bhd25hdHRyX3NldGZsYWdzLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25hdHRyX3QgKl9fYXR0ciwgc2hvcnQgaW50IF9fZmxhZ3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHBvc2l4X3NwYXduYXR0cl9zZXRmbGFncyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHBvc2l4X3NwYXduYXR0cl9zZXRmbGFncworIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9TRVRGTEFHUworX0dMX1dBUk5fT05fVVNFIChwb3NpeF9zcGF3bmF0dHJfc2V0ZmxhZ3MsCisgICAgICAgICAgICAgICAgICJwb3NpeF9zcGF3bmF0dHJfc2V0ZmxhZ3MgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9zZXRmbGFncyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorLyogR2V0IHByb2Nlc3MgZ3JvdXAgSUQgZnJvbSB0aGUgYXR0cmlidXRlIHN0cnVjdHVyZS4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHBvc2l4X3NwYXduYXR0cl9nZXRwZ3JvdXAgcnBsX3Bvc2l4X3NwYXduYXR0cl9nZXRwZ3JvdXAKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwb3NpeF9zcGF3bmF0dHJfZ2V0cGdyb3VwLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIHBpZF90ICpfUmVzdHJpY3RfIF9fcGdyb3VwKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocG9zaXhfc3Bhd25hdHRyX2dldHBncm91cCwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBwaWRfdCAqX1Jlc3RyaWN0XyBfX3Bncm91cCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocG9zaXhfc3Bhd25hdHRyX2dldHBncm91cCwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBwaWRfdCAqX1Jlc3RyaWN0XyBfX3Bncm91cCkKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwb3NpeF9zcGF3bmF0dHJfZ2V0cGdyb3VwLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIHBpZF90ICpfUmVzdHJpY3RfIF9fcGdyb3VwKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwb3NpeF9zcGF3bmF0dHJfZ2V0cGdyb3VwKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcG9zaXhfc3Bhd25hdHRyX2dldHBncm91cAorIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9HRVRQR1JPVVAKK19HTF9XQVJOX09OX1VTRSAocG9zaXhfc3Bhd25hdHRyX2dldHBncm91cCwKKyAgICAgICAgICAgICAgICAgInBvc2l4X3NwYXduYXR0cl9nZXRwZ3JvdXAgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9nZXRwZ3JvdXAgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKy8qIFN0b3JlIHByb2Nlc3MgZ3JvdXAgSUQgaW4gdGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBwb3NpeF9zcGF3bmF0dHJfc2V0cGdyb3VwIHJwbF9wb3NpeF9zcGF3bmF0dHJfc2V0cGdyb3VwCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocG9zaXhfc3Bhd25hdHRyX3NldHBncm91cCwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHIsIHBpZF90IF9fcGdyb3VwKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocG9zaXhfc3Bhd25hdHRyX3NldHBncm91cCwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHIsIHBpZF90IF9fcGdyb3VwKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChwb3NpeF9zcGF3bmF0dHJfc2V0cGdyb3VwLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25hdHRyX3QgKl9fYXR0ciwgcGlkX3QgX19wZ3JvdXApCisgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocG9zaXhfc3Bhd25hdHRyX3NldHBncm91cCwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHIsIHBpZF90IF9fcGdyb3VwKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwb3NpeF9zcGF3bmF0dHJfc2V0cGdyb3VwKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcG9zaXhfc3Bhd25hdHRyX3NldHBncm91cAorIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9TRVRQR1JPVVAKK19HTF9XQVJOX09OX1VTRSAocG9zaXhfc3Bhd25hdHRyX3NldHBncm91cCwKKyAgICAgICAgICAgICAgICAgInBvc2l4X3NwYXduYXR0cl9zZXRwZ3JvdXAgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9zZXRwZ3JvdXAgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKy8qIEdldCBzY2hlZHVsaW5nIHBvbGljeSBmcm9tIHRoZSBhdHRyaWJ1dGUgc3RydWN0dXJlLiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgcG9zaXhfc3Bhd25hdHRyX2dldHNjaGVkcG9saWN5IHJwbF9wb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwb2xpY3kKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwb2xpY3ksIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgaW50ICpfUmVzdHJpY3RfIF9fc2NoZWRwb2xpY3kpCisgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwb2xpY3ksIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgaW50ICpfUmVzdHJpY3RfIF9fc2NoZWRwb2xpY3kpKTsKKyMgZWxzZQorIyAgaWYgITEgfHwgUE9TSVhfU1BBV05fU0VUU0NIRURVTEVSID09IDAKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBvbGljeSwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBpbnQgKl9SZXN0cmljdF8gX19zY2hlZHBvbGljeSkKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwb2xpY3ksIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgaW50ICpfUmVzdHJpY3RfIF9fc2NoZWRwb2xpY3kpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBvbGljeSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBvbGljeQorIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBPTElDWQorX0dMX1dBUk5fT05fVVNFIChwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwb2xpY3ksCisgICAgICAgICAgICAgICAgICJwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwb2xpY3kgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBvbGljeSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorLyogU3RvcmUgc2NoZWR1bGluZyBwb2xpY3kgaW4gdGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwb2xpY3kgcnBsX3Bvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBvbGljeQorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBvbGljeSwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHIsIGludCBfX3NjaGVkcG9saWN5KQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcG9saWN5LCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25hdHRyX3QgKl9fYXR0ciwgaW50IF9fc2NoZWRwb2xpY3kpKTsKKyMgZWxzZQorIyAgaWYgITEgfHwgUE9TSVhfU1BBV05fU0VUU0NIRURVTEVSID09IDAKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBvbGljeSwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHIsIGludCBfX3NjaGVkcG9saWN5KQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBvbGljeSwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHIsIGludCBfX3NjaGVkcG9saWN5KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwb2xpY3kpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwb2xpY3kKKyMgaWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQT0xJQ1kKK19HTF9XQVJOX09OX1VTRSAocG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcG9saWN5LAorICAgICAgICAgICAgICAgICAicG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcG9saWN5IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwb2xpY3kgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKy8qIEdldCBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgZnJvbSB0aGUgYXR0cmlidXRlIHN0cnVjdHVyZS4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBhcmFtIHJwbF9wb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwYXJhbQorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBhcmFtLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX1Jlc3RyaWN0XyBfX3NjaGVkcGFyYW0pCisgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwYXJhbSwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9SZXN0cmljdF8gX19zY2hlZHBhcmFtKSk7CisjIGVsc2UKKyMgIGlmICExIHx8IFBPU0lYX1NQQVdOX1NFVFNDSEVEUEFSQU0gPT0gMAorX0dMX0ZVTkNERUNMX1NZUyAocG9zaXhfc3Bhd25hdHRyX2dldHNjaGVkcGFyYW0sIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICpfUmVzdHJpY3RfIF9fc2NoZWRwYXJhbSkKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwYXJhbSwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9SZXN0cmljdF8gX19zY2hlZHBhcmFtKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwYXJhbSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBhcmFtCisjIGlmIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05BVFRSX0dFVFNDSEVEUEFSQU0KK19HTF9XQVJOX09OX1VTRSAocG9zaXhfc3Bhd25hdHRyX2dldHNjaGVkcGFyYW0sCisgICAgICAgICAgICAgICAgICJwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwYXJhbSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25hdHRyX2dldHNjaGVkcGFyYW0gZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKy8qIFN0b3JlIHNjaGVkdWxpbmcgcGFyYW1ldGVycyBpbiB0aGUgYXR0cmlidXRlIHN0cnVjdHVyZS4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBhcmFtIHJwbF9wb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwYXJhbQorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBhcmFtLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25hdHRyX3QgKl9SZXN0cmljdF8gX19hdHRyLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX1Jlc3RyaWN0XyBfX3NjaGVkcGFyYW0pCisgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwYXJhbSwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9SZXN0cmljdF8gX19zY2hlZHBhcmFtKSk7CisjIGVsc2UKKyMgIGlmICExIHx8IFBPU0lYX1NQQVdOX1NFVFNDSEVEUEFSQU0gPT0gMAorX0dMX0ZVTkNERUNMX1NZUyAocG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcGFyYW0sIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bmF0dHJfdCAqX1Jlc3RyaWN0XyBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfUmVzdHJpY3RfIF9fc2NoZWRwYXJhbSkKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwYXJhbSwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduYXR0cl90ICpfUmVzdHJpY3RfIF9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9SZXN0cmljdF8gX19zY2hlZHBhcmFtKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwYXJhbSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBhcmFtCisjIGlmIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05BVFRSX1NFVFNDSEVEUEFSQU0KK19HTF9XQVJOX09OX1VTRSAocG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcGFyYW0sCisgICAgICAgICAgICAgICAgICJwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwYXJhbSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcGFyYW0gZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMQorLyogSW5pdGlhbGl6ZSBkYXRhIHN0cnVjdHVyZSBmb3IgZmlsZSBhdHRyaWJ1dGUgZm9yICdzcGF3bicgY2FsbC4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19pbml0IHJwbF9wb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfaW5pdAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19pbml0LCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9fZmlsZV9hY3Rpb25zKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2luaXQsIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqX19maWxlX2FjdGlvbnMpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19pbml0LCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9fZmlsZV9hY3Rpb25zKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19pbml0LCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9fZmlsZV9hY3Rpb25zKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfaW5pdCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19pbml0CisjIGlmIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0lOSVQKK19HTF9XQVJOX09OX1VTRSAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2luaXQsCisgICAgICAgICAgICAgICAgICJwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfaW5pdCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2luaXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDEKKy8qIEZyZWUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBGSUxFLUFDVElPTlMuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfZGVzdHJveSBycGxfcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3kKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfZGVzdHJveSwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfX2ZpbGVfYWN0aW9ucykKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19kZXN0cm95LCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9fZmlsZV9hY3Rpb25zKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfZGVzdHJveSwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfX2ZpbGVfYWN0aW9ucykKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfZGVzdHJveSwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfX2ZpbGVfYWN0aW9ucykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3kpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfZGVzdHJveQorIyBpZiBIQVZFX1JBV19ERUNMX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19ERVNUUk9ZCitfR0xfV0FSTl9PTl9VU0UgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19kZXN0cm95LAorICAgICAgICAgICAgICAgICAicG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3kgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19kZXN0cm95IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAxCisvKiBBZGQgYW4gYWN0aW9uIHRvIEZJTEUtQUNUSU9OUyB3aGljaCB0ZWxscyB0aGUgaW1wbGVtZW50YXRpb24gdG8gY2FsbAorICAgJ29wZW4nIGZvciB0aGUgZ2l2ZW4gZmlsZSBkdXJpbmcgdGhlICdzcGF3bicgY2FsbC4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuIHJwbF9wb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3BlbgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9SZXN0cmljdF8gX19maWxlX2FjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgaW50IF9fZmQsCisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX1Jlc3RyaWN0XyBfX3BhdGgsIGludCBfX29mbGFnLCBtb2RlX3QgX19tb2RlKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxLCAzKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW4sIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqX1Jlc3RyaWN0XyBfX2ZpbGVfYWN0aW9ucywKKyAgICAgICAgICAgICAgICAgICBpbnQgX19mZCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfUmVzdHJpY3RfIF9fcGF0aCwgaW50IF9fb2ZsYWcsIG1vZGVfdCBfX21vZGUpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9SZXN0cmljdF8gX19maWxlX2FjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgaW50IF9fZmQsCisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX1Jlc3RyaWN0XyBfX3BhdGgsIGludCBfX29mbGFnLCBtb2RlX3QgX19tb2RlKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxLCAzKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9SZXN0cmljdF8gX19maWxlX2FjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgaW50IF9fZmQsCisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX1Jlc3RyaWN0XyBfX3BhdGgsIGludCBfX29mbGFnLCBtb2RlX3QgX19tb2RlKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3Blbik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuCisjIGlmIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU4KK19HTF9XQVJOX09OX1VTRSAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW4sCisgICAgICAgICAgICAgICAgICJwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3BlbiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW4gZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDEKKy8qIEFkZCBhbiBhY3Rpb24gdG8gRklMRS1BQ1RJT05TIHdoaWNoIHRlbGxzIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBjYWxsCisgICAnY2xvc2UnIGZvciB0aGUgZ2l2ZW4gZmlsZSBkZXNjcmlwdG9yIGR1cmluZyB0aGUgJ3NwYXduJyBjYWxsLiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlIHJwbF9wb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2UKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2UsIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqX19maWxlX2FjdGlvbnMsIGludCBfX2ZkKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9fZmlsZV9hY3Rpb25zLCBpbnQgX19mZCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlLCBpbnQsCisgICAgICAgICAgICAgICAgICAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKl9fZmlsZV9hY3Rpb25zLCBpbnQgX19mZCkKKyAgICAgICAgICAgICAgICAgIF9fVEhST1cgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2UsIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqX19maWxlX2FjdGlvbnMsIGludCBfX2ZkKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2UpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2UKKyMgaWYgSEFWRV9SQVdfREVDTF9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQUREQ0xPU0UKK19HTF9XQVJOX09OX1VTRSAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlLAorICAgICAgICAgICAgICAgICAicG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2UgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDEKKy8qIEFkZCBhbiBhY3Rpb24gdG8gRklMRS1BQ1RJT05TIHdoaWNoIHRlbGxzIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBjYWxsCisgICAnZHVwMicgZm9yIHRoZSBnaXZlbiBmaWxlIGRlc2NyaXB0b3JzIGR1cmluZyB0aGUgJ3NwYXduJyBjYWxsLiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDIgcnBsX3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDIsIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqX19maWxlX2FjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgaW50IF9fZmQsIGludCBfX25ld2ZkKQorICAgICAgICAgICAgICAgICAgX19USFJPVyBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDIsIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqX19maWxlX2FjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgaW50IF9fZmQsIGludCBfX25ld2ZkKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkZHVwMiwgaW50LAorICAgICAgICAgICAgICAgICAgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfX2ZpbGVfYWN0aW9ucywKKyAgICAgICAgICAgICAgICAgICBpbnQgX19mZCwgaW50IF9fbmV3ZmQpCisgICAgICAgICAgICAgICAgICBfX1RIUk9XIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDIsIGludCwKKyAgICAgICAgICAgICAgICAgIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqX19maWxlX2FjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgaW50IF9fZmQsIGludCBfX25ld2ZkKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkZHVwMik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyCisjIGlmIEhBVkVfUkFXX0RFQ0xfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDIKK19HTF9XQVJOX09OX1VTRSAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDIsCisgICAgICAgICAgICAgICAgICJwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkZHVwMiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDIgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjZW5kaWYgLyogX0dMX1NQQVdOX0ggKi8KKyNlbmRpZiAvKiBfR0xfU1BBV05fSCAqLwpkaWZmIC0tZ2l0IGEvbGludXgtbGliL3N0ZGlvLmggYi9saW51eC1saWIvc3RkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNThmNzMzCi0tLSAvZGV2L251bGwKKysrIGIvbGludXgtbGliL3N0ZGlvLmgKQEAgLTAsMCArMSwxNjU3IEBACisvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovCisvKiBBIEdOVS1saWtlIDxzdGRpby5oPi4KKworICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmIF9fR05VQ19fID49IDMKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkIF9fbmVlZF9GSUxFIHx8IGRlZmluZWQgX19uZWVkX19fRklMRSB8fCBkZWZpbmVkIF9HTF9BTFJFQURZX0lOQ0xVRElOR19TVERJT19ICisvKiBTcGVjaWFsIGludm9jYXRpb24gY29udmVudGlvbjoKKyAgIC0gSW5zaWRlIGdsaWJjIGhlYWRlciBmaWxlcy4KKyAgIC0gT24gT1NGLzEgNS4xIHdlIGhhdmUgYSBzZXF1ZW5jZSBvZiBuZXN0ZWQgaW5jbHVkZXMKKyAgICAgPHN0ZGlvLmg+IC0+IDxnZXRvcHQuaD4gLT4gPGN0eXBlLmg+IC0+IDxzeXMvbG9jYWxlZGVmLmg+IC0+CisgICAgIDxzeXMvbGNfY29yZS5oPiAtPiA8bmxfdHlwZXMuaD4gLT4gPG1lc2cuaD4gLT4gPHN0ZGlvLmg+LgorICAgICBJbiB0aGlzIHNpdHVhdGlvbiwgdGhlIGZ1bmN0aW9ucyBhcmUgbm90IHlldCBkZWNsYXJlZCwgdGhlcmVmb3JlIHdlIGNhbm5vdAorICAgICBwcm92aWRlIHRoZSBDKysgYWxpYXNlcy4gICovCisKKyNpbmNsdWRlX25leHQgPHN0ZGlvLmg+CisKKyNlbHNlCisvKiBOb3JtYWwgaW52b2NhdGlvbiBjb252ZW50aW9uLiAgKi8KKworI2lmbmRlZiBfR0xfU1RESU9fSAorCisjZGVmaW5lIF9HTF9BTFJFQURZX0lOQ0xVRElOR19TVERJT19ICisKKy8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyNpbmNsdWRlX25leHQgPHN0ZGlvLmg+CisKKyN1bmRlZiBfR0xfQUxSRUFEWV9JTkNMVURJTkdfU1RESU9fSAorCisjaWZuZGVmIF9HTF9TVERJT19ICisjZGVmaW5lIF9HTF9TVERJT19ICisKK19HTF9JTkxJTkVfSEVBREVSX0JFR0lOCisjaWZuZGVmIF9HTF9TVERJT19JTkxJTkUKKyMgZGVmaW5lIF9HTF9TVERJT19JTkxJTkUgX0dMX0lOTElORQorI2VuZGlmCisKKy8qIEdldCB2YV9saXN0LiAgTmVlZGVkIG9uIG1hbnkgc3lzdGVtcywgaW5jbHVkaW5nIGdsaWJjIDIuOC4gICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLyogR2V0IG9mZl90IGFuZCBzc2l6ZV90LiAgTmVlZGVkIG9uIG1hbnkgc3lzdGVtcywgaW5jbHVkaW5nIGdsaWJjIDIuOAorICAgYW5kIGVnbGliYyAyLjExLjIuCisgICBNYXkgYWxzbyBkZWZpbmUgb2ZmX3QgdG8gYSA2NC1iaXQgdHlwZSBvbiBuYXRpdmUgV2luZG93cy4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKy8qIFRoZSBfX2F0dHJpYnV0ZV9fIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLgorICAgVGhlIF9fLXByb3RlY3RlZCB2YXJpYW50cyBvZiB0aGUgYXR0cmlidXRlcyAnZm9ybWF0JyBhbmQgJ3ByaW50ZicgYXJlCisgICBhY2NlcHRlZCBieSBnY2MgdmVyc2lvbnMgMi42LjQgKGVmZmVjdGl2ZWx5IDIuNykgYW5kIGxhdGVyLgorICAgV2UgZW5hYmxlIF9HTF9BVFRSSUJVVEVfRk9STUFUIG9ubHkgaWYgdGhlc2UgYXJlIHN1cHBvcnRlZCB0b28sIGJlY2F1c2UKKyAgIGdudWxpYiBhbmQgbGliaW50bCBkbyAnI2RlZmluZSBwcmludGYgX19wcmludGZfXycgd2hlbiB0aGV5IG92ZXJyaWRlCisgICB0aGUgJ3ByaW50ZicgZnVuY3Rpb24uICAqLworI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA3KQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9GT1JNQVQoc3BlYykgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gc3BlYykpCisjZWxzZQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9GT1JNQVQoc3BlYykgLyogZW1wdHkgKi8KKyNlbmRpZgorCisvKiBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEYKKyAgIGluZGljYXRlcyB0byBHQ0MgdGhhdCB0aGUgZnVuY3Rpb24gdGFrZXMgYSBmb3JtYXQgc3RyaW5nIGFuZCBhcmd1bWVudHMsCisgICB3aGVyZSB0aGUgZm9ybWF0IHN0cmluZyBkaXJlY3RpdmVzIGFyZSB0aGUgb25lcyBzdGFuZGFyZGl6ZWQgYnkgSVNPIEM5OQorICAgYW5kIFBPU0lYLiAgKi8KKyNpZiBfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNCkKKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URihmb3JtYXRzdHJpbmdfcGFyYW1ldGVyLCBmaXJzdF9hcmd1bWVudCkgXAorICAgX0dMX0FUVFJJQlVURV9GT1JNQVQgKChfX2dudV9wcmludGZfXywgZm9ybWF0c3RyaW5nX3BhcmFtZXRlciwgZmlyc3RfYXJndW1lbnQpKQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URihmb3JtYXRzdHJpbmdfcGFyYW1ldGVyLCBmaXJzdF9hcmd1bWVudCkgXAorICAgX0dMX0FUVFJJQlVURV9GT1JNQVQgKChfX3ByaW50Zl9fLCBmb3JtYXRzdHJpbmdfcGFyYW1ldGVyLCBmaXJzdF9hcmd1bWVudCkpCisjZW5kaWYKKworLyogX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGX1NZU1RFTSBpcyBsaWtlIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URiwKKyAgIGV4Y2VwdCB0aGF0IGl0IGluZGljYXRlcyB0byBHQ0MgdGhhdCB0aGUgc3VwcG9ydGVkIGZvcm1hdCBzdHJpbmcgZGlyZWN0aXZlcworICAgYXJlIHRoZSBvbmVzIG9mIHRoZSBzeXN0ZW0gcHJpbnRmKCksIHJhdGhlciB0aGFuIHRoZSBvbmVzIHN0YW5kYXJkaXplZCBieQorICAgSVNPIEM5OSBhbmQgUE9TSVguICAqLworI2RlZmluZSBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEZfU1lTVEVNKGZvcm1hdHN0cmluZ19wYXJhbWV0ZXIsIGZpcnN0X2FyZ3VtZW50KSBcCisgIF9HTF9BVFRSSUJVVEVfRk9STUFUICgoX19wcmludGZfXywgZm9ybWF0c3RyaW5nX3BhcmFtZXRlciwgZmlyc3RfYXJndW1lbnQpKQorCisvKiBfR0xfQVRUUklCVVRFX0ZPUk1BVF9TQ0FORgorICAgaW5kaWNhdGVzIHRvIEdDQyB0aGF0IHRoZSBmdW5jdGlvbiB0YWtlcyBhIGZvcm1hdCBzdHJpbmcgYW5kIGFyZ3VtZW50cywKKyAgIHdoZXJlIHRoZSBmb3JtYXQgc3RyaW5nIGRpcmVjdGl2ZXMgYXJlIHRoZSBvbmVzIHN0YW5kYXJkaXplZCBieSBJU08gQzk5CisgICBhbmQgUE9TSVguICAqLworI2lmIF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0KQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9GT1JNQVRfU0NBTkYoZm9ybWF0c3RyaW5nX3BhcmFtZXRlciwgZmlyc3RfYXJndW1lbnQpIFwKKyAgIF9HTF9BVFRSSUJVVEVfRk9STUFUICgoX19nbnVfc2NhbmZfXywgZm9ybWF0c3RyaW5nX3BhcmFtZXRlciwgZmlyc3RfYXJndW1lbnQpKQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfRk9STUFUX1NDQU5GKGZvcm1hdHN0cmluZ19wYXJhbWV0ZXIsIGZpcnN0X2FyZ3VtZW50KSBcCisgICBfR0xfQVRUUklCVVRFX0ZPUk1BVCAoKF9fc2NhbmZfXywgZm9ybWF0c3RyaW5nX3BhcmFtZXRlciwgZmlyc3RfYXJndW1lbnQpKQorI2VuZGlmCisKKy8qIF9HTF9BVFRSSUJVVEVfRk9STUFUX1NDQU5GX1NZU1RFTSBpcyBsaWtlIF9HTF9BVFRSSUJVVEVfRk9STUFUX1NDQU5GLAorICAgZXhjZXB0IHRoYXQgaXQgaW5kaWNhdGVzIHRvIEdDQyB0aGF0IHRoZSBzdXBwb3J0ZWQgZm9ybWF0IHN0cmluZyBkaXJlY3RpdmVzCisgICBhcmUgdGhlIG9uZXMgb2YgdGhlIHN5c3RlbSBzY2FuZigpLCByYXRoZXIgdGhhbiB0aGUgb25lcyBzdGFuZGFyZGl6ZWQgYnkKKyAgIElTTyBDOTkgYW5kIFBPU0lYLiAgKi8KKyNkZWZpbmUgX0dMX0FUVFJJQlVURV9GT1JNQVRfU0NBTkZfU1lTVEVNKGZvcm1hdHN0cmluZ19wYXJhbWV0ZXIsIGZpcnN0X2FyZ3VtZW50KSBcCisgIF9HTF9BVFRSSUJVVEVfRk9STUFUICgoX19zY2FuZl9fLCBmb3JtYXRzdHJpbmdfcGFyYW1ldGVyLCBmaXJzdF9hcmd1bWVudCkpCisKKy8qIFNvbGFyaXMgMTAgZGVjbGFyZXMgcmVuYW1lYXQgaW4gPHVuaXN0ZC5oPiwgbm90IGluIDxzdGRpby5oPi4gICovCisvKiBCdXQgaW4gYW55IGNhc2UgYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zLiAgKi8KKyNpZiAoMCB8fCBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLKSAmJiBkZWZpbmVkIF9fc3VuIFwKKyAgICAmJiAhIGRlZmluZWQgX19HTElCQ19fCisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKworLyogVGhlIGRlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwgZXRjLiBhcmUgY29waWVkIGhlcmUuICAqLworI2lmbmRlZiBfR0xfQ1hYREVGU19ICisjZGVmaW5lIF9HTF9DWFhERUZTX0gKKworLyogVGhlIHRocmVlIG1vc3QgZnJlcXVlbnQgdXNlIGNhc2VzIG9mIHRoZXNlIG1hY3JvcyBhcmU6CisKKyAgICogRm9yIHByb3ZpZGluZyBhIHN1YnN0aXR1dGUgZm9yIGEgZnVuY3Rpb24gdGhhdCBpcyBtaXNzaW5nIG9uIHNvbWUKKyAgICAgcGxhdGZvcm1zLCBidXQgaXMgZGVjbGFyZWQgYW5kIHdvcmtzIGZpbmUgb24gdGhlIHBsYXRmb3JtcyBvbiB3aGljaAorICAgICBpdCBleGlzdHM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiAhQEhBVkVfRk9PQAorICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorCisgICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBhbGwgcGxhdGZvcm1zLAorICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBwbGF0Zm9ybXM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACisgICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyAgICAgICAjICAgdW5kZWYgZm9vCisgICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKyAgICAgICAjIGVsc2UKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorCisgICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBzb21lIHBsYXRmb3JtcworICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBvZiB0aGVtIGFuZAorICAgICBpcyBhZGRpdGlvbmFsbHkgZWl0aGVyIG1pc3Npbmcgb3IgdW5kZWNsYXJlZCBvbiBzb21lIG90aGVyIHBsYXRmb3JtczoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorICAgICAgICMgICB1bmRlZiBmb28KKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworICAgICAgICMgZWxzZQorICAgICAgICMgIGlmICFASEFWRV9GT09AICAgb3IgICBpZiAhQEhBVkVfREVDTF9GT09ACisgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKyovCisKKy8qIF9HTF9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cworIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybiAiQyIKKyNlbHNlCisjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuCisjZW5kaWYKKworLyogX0dMX0ZVTkNERUNMX1JQTCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBkZWNsYXJlcyBhIHJlcGxhY2VtZW50IGZ1bmN0aW9uLCBuYW1lZCBycGxfZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCisgICBFeGFtcGxlOgorICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyAqLworI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9GVU5DREVDTF9SUExfMSAocnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykKKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1JQTF8xKHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICBfR0xfRVhURVJOX0MgcmV0dHlwZSBycGxfZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisKKy8qIF9HTF9GVU5DREVDTF9TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgZGVjbGFyZXMgdGhlIHN5c3RlbSBmdW5jdGlvbiwgbmFtZWQgZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCisgICBFeGFtcGxlOgorICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyAqLworI2RlZmluZSBfR0xfRlVOQ0RFQ0xfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9FWFRFUk5fQyByZXR0eXBlIGZ1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworCisvKiBfR0xfQ1hYQUxJQVNfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCisgICB0aGF0IHJlZGlyZWN0cyB0byBycGxfZnVuYywgaWYgR05VTElCX05BTUVTUEFDRSBpcyBkZWZpbmVkLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0NYWEFMSUFTX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CisgKi8KKyNkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpycGxfZnVuYzsgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xIChmdW5jLCBycGxfZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIHJwbF9mdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50CisgICBkZWNsYXJhdGlvbi4gIEEgY2FzdCBpcyB1c2VkIHRvIHNpbGVuY2UgdGhlICJpbnZhbGlkIGNvbnZlcnNpb24iIGVycm9yCisgICB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6cnBsX2Z1bmMpOyAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCisgICB0aGF0IHJlZGlyZWN0cyB0byB0aGUgc3lzdGVtIHByb3ZpZGVkIGZ1bmN0aW9uIGZ1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UKKyAgIGlzIGRlZmluZWQuCisgICBFeGFtcGxlOgorICAgICBfR0xfQ1hYQUxJQVNfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKyAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisgIC8qIElmIHdlIHdlcmUgdG8gd3JpdGUKKyAgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsKKyAgICAgbGlrZSBhYm92ZSBpbiBfR0xfQ1hYQUxJQVNfUlBMXzEsIHRoZSBjb21waWxlciBjb3VsZCBvcHRpbWl6ZSBjYWxscworICAgICBiZXR0ZXIgKHJlbW92ZSBhbiBpbmRpcmVjdGlvbiB0aHJvdWdoIGEgJ3N0YXRpYycgcG9pbnRlciB2YXJpYWJsZSksCisgICAgIGJ1dCB0aGVuIHRoZSBfR0xfQ1hYQUxJQVNXQVJOIG1hY3JvIGJlbG93IHdvdWxkIGNhdXNlIGEgd2FybmluZyBub3Qgb25seQorICAgICBmb3IgdXNlcyBvZiA6OmZ1bmMgYnV0IGFsc28gZm9yIHVzZXMgb2YgR05VTElCX05BTUVTUEFDRTo6ZnVuYy4gICovCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7ICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBmdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGRlY2xhcmF0aW9uLgorICAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IgdGhhdCB3b3VsZAorICAgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6ZnVuYyk7IFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzLCByZXR0eXBlMiwgcGFyYW1ldGVyczIpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBpcyBwaWNrZWQgYW1vbmcgYSBzZXQgb2Ygb3ZlcmxvYWRlZCBmdW5jdGlvbnMsCisgICBuYW1lbHkgdGhlIG9uZSB3aXRoIHJldHR5cGUyIGFuZCBwYXJhbWV0ZXJzMi4gIFR3byBjb25zZWN1dGl2ZSBjYXN0cworICAgYXJlIHVzZWQgdG8gc2lsZW5jZSB0aGUgImNhbm5vdCBmaW5kIGEgbWF0Y2giIGFuZCAiaW52YWxpZCBjb252ZXJzaW9uIgorICAgZXJyb3JzIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorICAvKiBUaGUgb3V0ZXIgY2FzdCBtdXN0IGJlIGEgcmVpbnRlcnByZXRfY2FzdC4KKyAgICAgVGhlIGlubmVyIGNhc3Q6IFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzZXQgb2Ygb3ZlcmxvYWRlZAorICAgICBmdW5jdGlvbnMsIGl0IHdvcmtzIGFzIGEgc3RhdGljX2Nhc3Q8PiwgY2hvb3NpbmcgdGhlIGRlc2lnbmF0ZWQgdmFyaWFudC4KKyAgICAgV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNpbmdsZSB2YXJpYW50LCBpdCB3b3JrcyBhcyBhCisgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Pi4gVGhlIHBhcmVudGhlc2l6ZWQgY2FzdCBzeW50YXggd29ya3MgYm90aCB3YXlzLiAgKi8KKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAocmV0dHlwZTIoKilwYXJhbWV0ZXJzMikoOjpmdW5jKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU1dBUk4gKGZ1bmMpOworICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gOjpmdW5jIGlzIHVzZWQgYnV0IG5vdCB3aGVuCisgICBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICBmdW5jIG11c3QgYmUgZGVmaW5lZCB3aXRob3V0IG92ZXJsb2FkZWQKKyAgIHZhcmlhbnRzLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOXzEgKGZ1bmMsIEdOVUxJQl9OQU1FU1BBQ0UpCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzEoZnVuYyxuYW1lc3BhY2UpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk5fMiAoZnVuYywgbmFtZXNwYWNlKQorLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKyMgaWYgIV9fT1BUSU1JWkVfXworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgIF9HTF9XQVJOX09OX1VTRSAoZnVuYywgXAorICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAorICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKyAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTV0FSTjEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gdGhlIGdpdmVuIG92ZXJsb2FkZWQgdmFyaWFudCBvZiA6OmZ1bmMKKyAgIGlzIHVzZWQgYnV0IG5vdCB3aGVuIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOMV8xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBHTlVMSUJfTkFNRVNQQUNFKQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk4xXzIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIG5hbWVzcGFjZSkKKy8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAorICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCisjIGlmICFfX09QVElNSVpFX18KKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworIyBlbHNlCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworI2VuZGlmIC8qIF9HTF9DWFhERUZTX0ggKi8KKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxMIGlzIGNvcGllZCBoZXJlLiAgKi8KKy8qIF9HTF9BUkdfTk9OTlVMTCgobiwuLi4sbSkpIHRlbGxzIHRoZSBjb21waWxlciBhbmQgc3RhdGljIGFuYWx5emVyIHRvb2xzCisgICB0aGF0IHRoZSB2YWx1ZXMgcGFzc2VkIGFzIGFyZ3VtZW50cyBuLCAuLi4sIG0gbXVzdCBiZSBub24tTlVMTCBwb2ludGVycy4KKyAgIG4gPSAxIHN0YW5kcyBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50LCBuID0gMiBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCBldGMuICAqLworI2lmbmRlZiBfR0xfQVJHX05PTk5VTEwKKyMgaWYgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gMykgfHwgX19HTlVDX18gPiAzCisjICBkZWZpbmUgX0dMX0FSR19OT05OVUxMKHBhcmFtcykgX19hdHRyaWJ1dGVfXyAoKF9fbm9ubnVsbF9fIHBhcmFtcykpCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKQorIyBlbmRpZgorI2VuZGlmCisKKy8qIFRoZSBkZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRSBpcyBjb3BpZWQgaGVyZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX09OX1VTRQorCisjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorLyogQSBjb21waWxlciBhdHRyaWJ1dGUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyA0LjMuMCBhbmQgbGF0ZXIuICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmN0aW9uKSBmdW5jdGlvbiBfX2F0dHJpYnV0ZV9fICgoX193YXJuaW5nX18gKG1lc3NhZ2UpKSkKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKy8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uCisjIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorX0dMX1dBUk5fRVhURVJOX0MgaW50IF9nbF93YXJuX29uX3VzZQorIyBlbmRpZgorI2VuZGlmCisKKy8qIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmN0aW9uLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCAic3RyaW5nIikKKyAgIGlzIGxpa2UgX0dMX1dBUk5fT05fVVNFIChmdW5jdGlvbiwgInN0cmluZyIpLCBleGNlcHQgdGhhdCB0aGUgZnVuY3Rpb24gaXMKKyAgIGRlY2xhcmVkIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywKKyAgIGFuZCBhdHRyaWJ1dGVzLgorICAgVGhpcyB2YXJpYW50IGlzIHVzZWZ1bCBmb3Igb3ZlcmxvYWRlZCBmdW5jdGlvbnMgaW4gQysrLiBfR0xfV0FSTl9PTl9VU0UgZG9lcworICAgbm90IHdvcmsgaW4gdGhpcyBjYXNlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFX0NYWAorIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK2V4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMgXAorICAgICBfX2F0dHJpYnV0ZV9fICgoX193YXJuaW5nX18gKG1zZykpKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK2V4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCitfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisjIGVuZGlmCisjZW5kaWYKKworLyogX0dMX1dBUk5fRVhURVJOX0MgZGVjbGFyYXRpb247CisgICBwZXJmb3JtcyB0aGUgZGVjbGFyYXRpb24gd2l0aCBDIGxpbmthZ2UuICAqLworI2lmbmRlZiBfR0xfV0FSTl9FWFRFUk5fQworIyBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisjICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuICJDIgorIyBlbHNlCisjICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuCisjIGVuZGlmCisjZW5kaWYKKworLyogTWFjcm9zIGZvciBzdHJpbmdpZmljYXRpb24uICAqLworI2RlZmluZSBfR0xfU1RESU9fU1RSSU5HSVpFKHRva2VuKSAjdG9rZW4KKyNkZWZpbmUgX0dMX1NURElPX01BQ1JPRVhQQU5EX0FORF9TVFJJTkdJWkUodG9rZW4pIF9HTF9TVERJT19TVFJJTkdJWkUodG9rZW4pCisKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgZHByaW50ZiBycGxfZHByaW50ZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGRwcmludGYsIGludCwgKGludCBmZCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URiAoMiwgMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKGRwcmludGYsIGludCwgKGludCBmZCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGRwcmludGYsIGludCwgKGludCBmZCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URiAoMiwgMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChkcHJpbnRmLCBpbnQsIChpbnQgZmQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChkcHJpbnRmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZHByaW50ZgorIyBpZiBIQVZFX1JBV19ERUNMX0RQUklOVEYKK19HTF9XQVJOX09OX1VTRSAoZHByaW50ZiwgImRwcmludGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGRwcmludGYgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKy8qIENsb3NlIFNUUkVBTSBhbmQgaXRzIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yLiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgZmNsb3NlIHJwbF9mY2xvc2UKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmY2xvc2UsIGludCwgKEZJTEUgKnN0cmVhbSkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKGZjbG9zZSwgaW50LCAoRklMRSAqc3RyZWFtKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZjbG9zZSwgaW50LCAoRklMRSAqc3RyZWFtKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmY2xvc2UpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmY2xvc2UKKy8qIEFzc3VtZSBmY2xvc2UgaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAoZmNsb3NlLCAiZmNsb3NlIGlzIG5vdCBhbHdheXMgUE9TSVggY29tcGxpYW50IC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZmNsb3NlIGZvciBwb3J0YWJsZSBQT1NJWCBjb21wbGlhbmNlIik7CisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmZG9wZW4KKyMgICBkZWZpbmUgZmRvcGVuIHJwbF9mZG9wZW4KKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmZG9wZW4sIEZJTEUgKiwgKGludCBmZCwgY29uc3QgY2hhciAqbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZmRvcGVuLCBGSUxFICosIChpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoZmRvcGVuLCBGSUxFICosIChpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZkb3Blbik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZkb3BlbgorLyogQXNzdW1lIGZkb3BlbiBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFIChmZG9wZW4sICJmZG9wZW4gb24gbmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zIGlzIG5vdCBQT1NJWCBjb21wbGlhbnQgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmZG9wZW4gZm9yIHBvcnRhYmlsaXR5Iik7CisjZW5kaWYKKworI2lmIDAKKy8qIEZsdXNoIGFsbCBwZW5kaW5nIGRhdGEgb24gU1RSRUFNIGFjY29yZGluZyB0byBQT1NJWCBydWxlcy4gIEJvdGgKKyAgIG91dHB1dCBhbmQgc2Vla2FibGUgaW5wdXQgc3RyZWFtcyBhcmUgc3VwcG9ydGVkLgorICAgTm90ZSEgTE9TUyBPRiBEQVRBIGNhbiBvY2N1ciBpZiBmZmx1c2ggaXMgYXBwbGllZCBvbiBhbiBpbnB1dCBzdHJlYW0KKyAgIHRoYXQgaXMgX25vdF9zZWVrYWJsZV8gb3Igb24gYW4gdXBkYXRlIHN0cmVhbSB0aGF0IGlzIF9ub3Rfc2Vla2FibGVfCisgICBhbmQgaW4gd2hpY2ggdGhlIG1vc3QgcmVjZW50IG9wZXJhdGlvbiB3YXMgaW5wdXQuICBTZWVrYWJpbGl0eSBjYW4KKyAgIGJlIHRlc3RlZCB3aXRoIGxzZWVrKGZpbGVubyhmcCksMCxTRUVLX0NVUikuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBmZmx1c2ggcnBsX2ZmbHVzaAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZmbHVzaCwgaW50LCAoRklMRSAqZ2xfc3RyZWFtKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmZmx1c2gsIGludCwgKEZJTEUgKmdsX3N0cmVhbSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChmZmx1c2gsIGludCwgKEZJTEUgKmdsX3N0cmVhbSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZmZsdXNoKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZmZsdXNoCisvKiBBc3N1bWUgZmZsdXNoIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKGZmbHVzaCwgImZmbHVzaCBpcyBub3QgYWx3YXlzIFBPU0lYIGNvbXBsaWFudCAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZmbHVzaCBmb3IgcG9ydGFibGUgUE9TSVggY29tcGxpYW5jZSIpOworI2VuZGlmCisKKyNpZiAxCisjIGlmIDAgJiYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmZ2V0YworIyAgIGRlZmluZSBmZ2V0YyBycGxfZmdldGMKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmZ2V0YywgaW50LCAoRklMRSAqc3RyZWFtKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZmdldGMsIGludCwgKEZJTEUgKnN0cmVhbSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChmZ2V0YywgaW50LCAoRklMRSAqc3RyZWFtKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmZ2V0Yyk7CisjZW5kaWYKKworI2lmIDEKKyMgaWYgMCAmJiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZnZXRzCisjICAgZGVmaW5lIGZnZXRzIHJwbF9mZ2V0cworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZnZXRzLCBjaGFyICosIChjaGFyICpzLCBpbnQgbiwgRklMRSAqc3RyZWFtKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMykpKTsKK19HTF9DWFhBTElBU19SUEwgKGZnZXRzLCBjaGFyICosIChjaGFyICpzLCBpbnQgbiwgRklMRSAqc3RyZWFtKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZnZXRzLCBjaGFyICosIChjaGFyICpzLCBpbnQgbiwgRklMRSAqc3RyZWFtKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmZ2V0cyk7CisjZW5kaWYKKworI2lmIDEKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmb3BlbgorIyAgIGRlZmluZSBmb3BlbiBycGxfZm9wZW4KKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmb3BlbiwgRklMRSAqLCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZm9wZW4sIEZJTEUgKiwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICptb2RlKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZvcGVuLCBGSUxFICosIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZm9wZW4pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmb3BlbgorLyogQXNzdW1lIGZvcGVuIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKGZvcGVuLCAiZm9wZW4gb24gbmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zIGlzIG5vdCBQT1NJWCBjb21wbGlhbnQgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmb3BlbiBmb3IgcG9ydGFiaWxpdHkiKTsKKyNlbmRpZgorCisjaWYgMSB8fCAxCisjIGlmICgxICYmIDEpIFwKKyAgICAgfHwgKDEgJiYgMCAmJiAoMCB8fCAwKSkKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGZwcmludGYgcnBsX2ZwcmludGYKKyMgIGVuZGlmCisjICBkZWZpbmUgR05VTElCX292ZXJyaWRlc19mcHJpbnRmIDEKKyMgIGlmIDEgfHwgMQorX0dMX0ZVTkNERUNMX1JQTCAoZnByaW50ZiwgaW50LCAoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEYgKDIsIDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbHNlCitfR0xfRlVOQ0RFQ0xfUlBMIChmcHJpbnRmLCBpbnQsIChGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URl9TWVNURU0gKDIsIDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1JQTCAoZnByaW50ZiwgaW50LCAoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZwcmludGYsIGludCwgKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZnByaW50Zik7CisjZW5kaWYKKyNpZiAhMSAmJiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIGlmICFHTlVMSUJfb3ZlcnJpZGVzX2ZwcmludGYKKyMgIHVuZGVmIGZwcmludGYKKyMgZW5kaWYKKy8qIEFzc3VtZSBmcHJpbnRmIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKGZwcmludGYsICJmcHJpbnRmIGlzIG5vdCBhbHdheXMgUE9TSVggY29tcGxpYW50IC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZnByaW50Zi1wb3NpeCBmb3IgcG9ydGFibGUgIgorICAgICAgICAgICAgICAgICAiUE9TSVggY29tcGxpYW5jZSIpOworI2VuZGlmCisKKyNpZiAwCisvKiBEaXNjYXJkIGFsbCBwZW5kaW5nIGJ1ZmZlcmVkIEkvTyBkYXRhIG9uIFNUUkVBTS4KKyAgIFNUUkVBTSBtdXN0IG5vdCBiZSB3aWRlLWNoYXJhY3RlciBvcmllbnRlZC4KKyAgIFdoZW4gZGlzY2FyZGluZyBwZW5kaW5nIG91dHB1dCwgdGhlIGZpbGUgcG9zaXRpb24gaXMgc2V0IGJhY2sgdG8gd2hlcmUgaXQKKyAgIHdhcyBiZWZvcmUgdGhlIHdyaXRlIGNhbGxzLiAgV2hlbiBkaXNjYXJkaW5nIHBlbmRpbmcgaW5wdXQsIHRoZSBmaWxlCisgICBwb3NpdGlvbiBpcyBhZHZhbmNlZCB0byBtYXRjaCB0aGUgZW5kIG9mIHRoZSBwcmV2aW91c2x5IHJlYWQgaW5wdXQuCisgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLiAgVXBvbiBlcnJvciwgcmV0dXJuIC0xIGFuZCBzZXQgZXJybm8uICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBmcHVyZ2UgcnBsX2ZwdXJnZQorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZwdXJnZSwgaW50LCAoRklMRSAqZ2xfc3RyZWFtKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZnB1cmdlLCBpbnQsIChGSUxFICpnbF9zdHJlYW0pKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGZwdXJnZSwgaW50LCAoRklMRSAqZ2xfc3RyZWFtKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZwdXJnZSwgaW50LCAoRklMRSAqZ2xfc3RyZWFtKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmcHVyZ2UpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmcHVyZ2UKKyMgaWYgSEFWRV9SQVdfREVDTF9GUFVSR0UKK19HTF9XQVJOX09OX1VTRSAoZnB1cmdlLCAiZnB1cmdlIGlzIG5vdCBhbHdheXMgcHJlc2VudCAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZwdXJnZSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMQorIyBpZiAwICYmICgwIHx8IDApCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZwdXRjCisjICAgZGVmaW5lIGZwdXRjIHJwbF9mcHV0YworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZwdXRjLCBpbnQsIChpbnQgYywgRklMRSAqc3RyZWFtKSBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZnB1dGMsIGludCwgKGludCBjLCBGSUxFICpzdHJlYW0pKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoZnB1dGMsIGludCwgKGludCBjLCBGSUxFICpzdHJlYW0pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZwdXRjKTsKKyNlbmRpZgorCisjaWYgMQorIyBpZiAwICYmICgwIHx8IDApCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZwdXRzCisjICAgZGVmaW5lIGZwdXRzIHJwbF9mcHV0cworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZwdXRzLCBpbnQsIChjb25zdCBjaGFyICpzdHJpbmcsIEZJTEUgKnN0cmVhbSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmcHV0cywgaW50LCAoY29uc3QgY2hhciAqc3RyaW5nLCBGSUxFICpzdHJlYW0pKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoZnB1dHMsIGludCwgKGNvbnN0IGNoYXIgKnN0cmluZywgRklMRSAqc3RyZWFtKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmcHV0cyk7CisjZW5kaWYKKworI2lmIDEKKyMgaWYgMCAmJiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZyZWFkCisjICAgZGVmaW5lIGZyZWFkIHJwbF9mcmVhZAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZyZWFkLCBzaXplX3QsICh2b2lkICpwdHIsIHNpemVfdCBzLCBzaXplX3QgbiwgRklMRSAqc3RyZWFtKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoNCkpKTsKK19HTF9DWFhBTElBU19SUEwgKGZyZWFkLCBzaXplX3QsICh2b2lkICpwdHIsIHNpemVfdCBzLCBzaXplX3QgbiwgRklMRSAqc3RyZWFtKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZyZWFkLCBzaXplX3QsICh2b2lkICpwdHIsIHNpemVfdCBzLCBzaXplX3QgbiwgRklMRSAqc3RyZWFtKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmcmVhZCk7CisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmcmVvcGVuCisjICAgZGVmaW5lIGZyZW9wZW4gcnBsX2ZyZW9wZW4KKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmcmVvcGVuLCBGSUxFICosCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUsIEZJTEUgKnN0cmVhbSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIsIDMpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmcmVvcGVuLCBGSUxFICosCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUsIEZJTEUgKnN0cmVhbSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChmcmVvcGVuLCBGSUxFICosCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUsIEZJTEUgKnN0cmVhbSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZnJlb3Blbik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZyZW9wZW4KKy8qIEFzc3VtZSBmcmVvcGVuIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKGZyZW9wZW4sCisgICAgICAgICAgICAgICAgICJmcmVvcGVuIG9uIG5hdGl2ZSBXaW5kb3dzIHBsYXRmb3JtcyBpcyBub3QgUE9TSVggY29tcGxpYW50IC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZnJlb3BlbiBmb3IgcG9ydGFiaWxpdHkiKTsKKyNlbmRpZgorCisjaWYgMQorIyBpZiAwICYmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZnNjYW5mCisjICAgZGVmaW5lIGZzY2FuZiBycGxfZnNjYW5mCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZnNjYW5mLCBpbnQsIChGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1NDQU5GX1NZU1RFTSAoMiwgMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZnNjYW5mLCBpbnQsIChGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZzY2FuZiwgaW50LCAoRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZnNjYW5mKTsKKyNlbmRpZgorCisKKy8qIFNldCB1cCB0aGUgZm9sbG93aW5nIHdhcm5pbmdzLCBiYXNlZCBvbiB3aGljaCBtb2R1bGVzIGFyZSBpbiB1c2UuCisgICBHTlUgQ29kaW5nIFN0YW5kYXJkcyBkaXNjb3VyYWdlIHRoZSB1c2Ugb2YgZnNlZWssIHNpbmNlIGl0IGltcG9zZXMKKyAgIGFuIGFyYml0cmFyeSBsaW1pdGF0aW9uIG9uIHNvbWUgMzItYml0IGhvc3RzLiAgUmVtZW1iZXIgdGhhdCB0aGUKKyAgIGZzZWVrIG1vZHVsZSBkZXBlbmRzIG9uIHRoZSBmc2Vla28gbW9kdWxlLCBzbyB3ZSBvbmx5IGhhdmUgdGhyZWUKKyAgIGNhc2VzIHRvIGNvbnNpZGVyOgorCisgICAxLiBUaGUgZGV2ZWxvcGVyIGlzIG5vdCB1c2luZyBlaXRoZXIgbW9kdWxlLiAgSXNzdWUgYSB3YXJuaW5nIHVuZGVyCisgICBHTlVMSUJfUE9TSVhDSEVDSyBmb3IgYm90aCBmdW5jdGlvbnMsIHRvIHJlbWluZCB0aGVtIHRoYXQgYm90aAorICAgZnVuY3Rpb25zIGhhdmUgYnVncyBvbiBzb21lIHN5c3RlbXMuICBfR0xfTk9fTEFSR0VfRklMRVMgaGFzIG5vCisgICBpbXBhY3Qgb24gdGhpcyB3YXJuaW5nLgorCisgICAyLiBUaGUgZGV2ZWxvcGVyIGlzIHVzaW5nIGJvdGggbW9kdWxlcy4gIFRoZXkgbWF5IGJlIHVuYXdhcmUgb2YgdGhlCisgICBhcmJpdHJhcnkgbGltaXRhdGlvbnMgb2YgZnNlZWssIHNvIGlzc3VlIGEgd2FybmluZyB1bmRlcgorICAgR05VTElCX1BPU0lYQ0hFQ0suICBPbiB0aGUgb3RoZXIgaGFuZCwgdGhleSBtYXkgYmUgdXNpbmcgYm90aAorICAgbW9kdWxlcyBpbnRlbnRpb25hbGx5LCBzbyB0aGUgZGV2ZWxvcGVyIGNhbiBkZWZpbmUKKyAgIF9HTF9OT19MQVJHRV9GSUxFUyBpbiB0aGUgY29tcGlsYXRpb24gdW5pdHMgd2hlcmUgdGhlIHVzZSBvZiBmc2VlaworICAgaXMgc2FmZSwgdG8gc2lsZW5jZSB0aGUgd2FybmluZy4KKworICAgMy4gVGhlIGRldmVsb3BlciBpcyB1c2luZyB0aGUgZnNlZWtvIG1vZHVsZSwgYnV0IG5vdCBmc2Vlay4gIEdudWxpYgorICAgZ3VhcmFudGVlcyB0aGF0IGZzZWVrIHdpbGwgc3RpbGwgd29yayBhcm91bmQgcGxhdGZvcm0gYnVncyBpbiB0aGF0CisgICBjYXNlLCBidXQgd2UgcHJlc3VtZSB0aGF0IHRoZSBkZXZlbG9wZXIgaXMgYXdhcmUgb2YgdGhlIHBpdGZhbGxzIG9mCisgICBmc2VlayBhbmQgd2FzIHRyeWluZyB0byBhdm9pZCBpdCwgc28gaXNzdWUgYSB3YXJuaW5nIGV2ZW4gd2hlbgorICAgR05VTElCX1BPU0lYQ0hFQ0sgaXMgdW5kZWZpbmVkLiAgQWdhaW4sIF9HTF9OT19MQVJHRV9GSUxFUyBjYW4gYmUKKyAgIGRlZmluZWQgdG8gc2lsZW5jZSB0aGUgd2FybmluZyBpbiBwYXJ0aWN1bGFyIGNvbXBpbGF0aW9uIHVuaXRzLgorICAgSW4gQysrIGNvbXBpbGF0aW9ucyB3aXRoIEdOVUxJQl9OQU1FU1BBQ0UsIGluIG9yZGVyIHRvIGF2b2lkIHRoYXQKKyAgIGZzZWVrIGdldHMgZGVmaW5lZCBhcyBhIG1hY3JvLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoZSBkZXZlbG9wZXIKKyAgIHVzZXMgdGhlIGZzZWVrIG1vZHVsZSwgZXZlbiBpZiBoZSBpcyBub3QgY2FsbGluZyB0aGUgZnNlZWsgZnVuY3Rpb24uCisKKyAgIE1vc3QgZ251bGliIGNsaWVudHMgdGhhdCBwZXJmb3JtIHN0cmVhbSBvcGVyYXRpb25zIHNob3VsZCBmYWxsIGludG8KKyAgIGNhdGVnb3J5IDMuICAqLworCisjaWYgMAorIyBpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLICYmICFkZWZpbmVkIF9HTF9OT19MQVJHRV9GSUxFUworIyAgZGVmaW5lIF9HTF9GU0VFS19XQVJOIC8qIENhdGVnb3J5IDIsIGFib3ZlLiAgKi8KKyMgIHVuZGVmIGZzZWVrCisjIGVuZGlmCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZnNlZWsKKyMgICBkZWZpbmUgZnNlZWsgcnBsX2ZzZWVrCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZnNlZWssIGludCwgKEZJTEUgKmZwLCBsb25nIG9mZnNldCwgaW50IHdoZW5jZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmc2VlaywgaW50LCAoRklMRSAqZnAsIGxvbmcgb2Zmc2V0LCBpbnQgd2hlbmNlKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZzZWVrLCBpbnQsIChGSUxFICpmcCwgbG9uZyBvZmZzZXQsIGludCB3aGVuY2UpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZzZWVrKTsKKyNlbmRpZgorCisjaWYgMAorIyBpZiAhMCAmJiAhZGVmaW5lZCBfR0xfTk9fTEFSR0VfRklMRVMKKyMgIGRlZmluZSBfR0xfRlNFRUtfV0FSTiAvKiBDYXRlZ29yeSAzLCBhYm92ZS4gICovCisjICB1bmRlZiBmc2VlaworIyBlbmRpZgorIyBpZiAwCisvKiBQcm92aWRlIGFuIGZzZWVrbyBmdW5jdGlvbiB0aGF0IGlzIGF3YXJlIG9mIGEgcHJlY2VkaW5nIGZmbHVzaCgpLCBhbmQgd2hpY2gKKyAgIGRldGVjdHMgcGlwZXMuICAqLworIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmc2Vla28KKyMgICBkZWZpbmUgZnNlZWtvIHJwbF9mc2Vla28KKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmc2Vla28sIGludCwgKEZJTEUgKmZwLCBvZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKGZzZWVrbywgaW50LCAoRklMRSAqZnAsIG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSkpOworIyBlbHNlCisjICBpZiAhIDEKK19HTF9GVU5DREVDTF9TWVMgKGZzZWVrbywgaW50LCAoRklMRSAqZnAsIG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZzZWVrbywgaW50LCAoRklMRSAqZnAsIG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZnNlZWtvKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgZGVmaW5lIF9HTF9GU0VFS19XQVJOIC8qIENhdGVnb3J5IDEsIGFib3ZlLiAgKi8KKyMgdW5kZWYgZnNlZWsKKyMgdW5kZWYgZnNlZWtvCisjIGlmIEhBVkVfUkFXX0RFQ0xfRlNFRUtPCitfR0xfV0FSTl9PTl9VU0UgKGZzZWVrbywgImZzZWVrbyBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZnNlZWtvIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfR0xfRlNFRUtfV0FSTgorIyB1bmRlZiBfR0xfRlNFRUtfV0FSTgorLyogSGVyZSwgZWl0aGVyIGZzZWVrIGlzIHVuZGVmaW5lZCAoYnV0IEM4OSBndWFyYW50ZWVzIHRoYXQgaXQgaXMKKyAgIGRlY2xhcmVkKSwgb3IgaXQgaXMgZGVmaW5lZCBhcyBycGxfZnNlZWsgKGRlY2xhcmVkIGFib3ZlKS4gICovCitfR0xfV0FSTl9PTl9VU0UgKGZzZWVrLCAiZnNlZWsgY2Fubm90IGhhbmRsZSBmaWxlcyBsYXJnZXIgdGhhbiA0IEdCICIKKyAgICAgICAgICAgICAgICAgIm9uIDMyLWJpdCBwbGF0Zm9ybXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZnNlZWtvIGZ1bmN0aW9uIGZvciBoYW5kbGluZyBvZiBsYXJnZSBmaWxlcyIpOworI2VuZGlmCisKKworLyogZnRlbGwsIGZ0ZWxsby4gIFNlZSB0aGUgY29tbWVudHMgb24gZnNlZWsvZnNlZWtvLiAgKi8KKworI2lmIDAKKyMgaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSyAmJiAhZGVmaW5lZCBfR0xfTk9fTEFSR0VfRklMRVMKKyMgIGRlZmluZSBfR0xfRlRFTExfV0FSTiAvKiBDYXRlZ29yeSAyLCBhYm92ZS4gICovCisjICB1bmRlZiBmdGVsbAorIyBlbmRpZgorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZ0ZWxsCisjICAgZGVmaW5lIGZ0ZWxsIHJwbF9mdGVsbAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZ0ZWxsLCBsb25nLCAoRklMRSAqZnApIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmdGVsbCwgbG9uZywgKEZJTEUgKmZwKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZ0ZWxsLCBsb25nLCAoRklMRSAqZnApKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZ0ZWxsKTsKKyNlbmRpZgorCisjaWYgMAorIyBpZiAhMCAmJiAhZGVmaW5lZCBfR0xfTk9fTEFSR0VfRklMRVMKKyMgIGRlZmluZSBfR0xfRlRFTExfV0FSTiAvKiBDYXRlZ29yeSAzLCBhYm92ZS4gICovCisjICB1bmRlZiBmdGVsbAorIyBlbmRpZgorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZ0ZWxsbworIyAgIGRlZmluZSBmdGVsbG8gcnBsX2Z0ZWxsbworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZ0ZWxsbywgb2ZmX3QsIChGSUxFICpmcCkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKGZ0ZWxsbywgb2ZmX3QsIChGSUxFICpmcCkpOworIyBlbHNlCisjICBpZiAhIDEKK19HTF9GVU5DREVDTF9TWVMgKGZ0ZWxsbywgb2ZmX3QsIChGSUxFICpmcCkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmdGVsbG8sIG9mZl90LCAoRklMRSAqZnApKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZ0ZWxsbyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIGRlZmluZSBfR0xfRlRFTExfV0FSTiAvKiBDYXRlZ29yeSAxLCBhYm92ZS4gICovCisjIHVuZGVmIGZ0ZWxsCisjIHVuZGVmIGZ0ZWxsbworIyBpZiBIQVZFX1JBV19ERUNMX0ZURUxMTworX0dMX1dBUk5fT05fVVNFIChmdGVsbG8sICJmdGVsbG8gaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZ0ZWxsbyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX0dMX0ZURUxMX1dBUk4KKyMgdW5kZWYgX0dMX0ZURUxMX1dBUk4KKy8qIEhlcmUsIGVpdGhlciBmdGVsbCBpcyB1bmRlZmluZWQgKGJ1dCBDODkgZ3VhcmFudGVlcyB0aGF0IGl0IGlzCisgICBkZWNsYXJlZCksIG9yIGl0IGlzIGRlZmluZWQgYXMgcnBsX2Z0ZWxsIChkZWNsYXJlZCBhYm92ZSkuICAqLworX0dMX1dBUk5fT05fVVNFIChmdGVsbCwgImZ0ZWxsIGNhbm5vdCBoYW5kbGUgZmlsZXMgbGFyZ2VyIHRoYW4gNCBHQiAiCisgICAgICAgICAgICAgICAgICJvbiAzMi1iaXQgcGxhdGZvcm1zIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGZ0ZWxsbyBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgb2YgbGFyZ2UgZmlsZXMiKTsKKyNlbmRpZgorCisKKyNpZiAxCisjIGlmIDAgJiYgKDAgfHwgMCkKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZndyaXRlCisjICAgZGVmaW5lIGZ3cml0ZSBycGxfZndyaXRlCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZndyaXRlLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgcywgc2l6ZV90IG4sIEZJTEUgKnN0cmVhbSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDQpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmd3JpdGUsIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzLCBzaXplX3QgbiwgRklMRSAqc3RyZWFtKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGZ3cml0ZSwgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHMsIHNpemVfdCBuLCBGSUxFICpzdHJlYW0pKTsKKworLyogV29yayBhcm91bmQgZ2xpYmMgYnVnIDExOTU5CisgICA8aHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTE5NTk+LAorICAgd2hpY2ggc29tZXRpbWVzIGNhdXNlcyBhbiB1bndhbnRlZCBkaWFnbm9zdGljIGZvciBmd3JpdGUgY2FsbHMuCisgICBUaGlzIGFmZmVjdHMgb25seSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBhdHRyaWJ1dGVzLCBzbyBpdCdzIG5vdAorICAgbmVlZGVkIGZvciBDKysuICAqLworIyAgaWYgIWRlZmluZWQgX19jcGx1c3BsdXMgJiYgMCA8IF9fVVNFX0ZPUlRJRllfTEVWRUwKK19HTF9TVERJT19JTkxJTkUgc2l6ZV90IF9HTF9BUkdfTk9OTlVMTCAoKDEsIDQpKQorcnBsX2Z3cml0ZSAoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgcywgc2l6ZV90IG4sIEZJTEUgKnN0cmVhbSkKK3sKKyAgc2l6ZV90IHIgPSBmd3JpdGUgKHB0ciwgcywgbiwgc3RyZWFtKTsKKyAgKHZvaWQpIHI7CisgIHJldHVybiByOworfQorIyAgIHVuZGVmIGZ3cml0ZQorIyAgIGRlZmluZSBmd3JpdGUgcnBsX2Z3cml0ZQorIyAgZW5kaWYKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZ3cml0ZSk7CisjZW5kaWYKKworI2lmIDEKKyMgaWYgMCAmJiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGdldGMKKyMgICBkZWZpbmUgZ2V0YyBycGxfZmdldGMKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmZ2V0YywgaW50LCAoRklMRSAqc3RyZWFtKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTF8xIChnZXRjLCBycGxfZmdldGMsIGludCwgKEZJTEUgKnN0cmVhbSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChnZXRjLCBpbnQsIChGSUxFICpzdHJlYW0pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGdldGMpOworI2VuZGlmCisKKyNpZiAxCisjIGlmIDAgJiYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBnZXRjaGFyCisjICAgZGVmaW5lIGdldGNoYXIgcnBsX2dldGNoYXIKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChnZXRjaGFyLCBpbnQsICh2b2lkKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChnZXRjaGFyLCBpbnQsICh2b2lkKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGdldGNoYXIsIGludCwgKHZvaWQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGdldGNoYXIpOworI2VuZGlmCisKKyNpZiAxCisvKiBSZWFkIGlucHV0LCB1cCB0byAoYW5kIGluY2x1ZGluZykgdGhlIG5leHQgb2NjdXJyZW5jZSBvZiBERUxJTUlURVIsIGZyb20KKyAgIFNUUkVBTSwgc3RvcmUgaXQgaW4gKkxJTkVQVFIgKGFuZCBOVUwtdGVybWluYXRlIGl0KS4KKyAgICpMSU5FUFRSIGlzIGEgcG9pbnRlciByZXR1cm5lZCBmcm9tIG1hbGxvYyAob3IgTlVMTCksIHBvaW50aW5nIHRvICpMSU5FU0laRQorICAgYnl0ZXMgb2Ygc3BhY2UuICBJdCBpcyByZWFsbG9jJ2QgYXMgbmVjZXNzYXJ5LgorICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBhbmQgc3RvcmVkIGF0ICpMSU5FUFRSIChub3QgaW5jbHVkaW5nIHRoZQorICAgTlVMIHRlcm1pbmF0b3IpLCBvciAtMSBvbiBlcnJvciBvciBFT0YuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGdldGRlbGltCisjICAgZGVmaW5lIGdldGRlbGltIHJwbF9nZXRkZWxpbQorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGdldGRlbGltLCBzc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKipsaW5lcHRyLCBzaXplX3QgKmxpbmVzaXplLCBpbnQgZGVsaW1pdGVyLAorICAgICAgICAgICAgICAgICAgIEZJTEUgKnN0cmVhbSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIsIDQpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChnZXRkZWxpbSwgc3NpemVfdCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqbGluZXB0ciwgc2l6ZV90ICpsaW5lc2l6ZSwgaW50IGRlbGltaXRlciwKKyAgICAgICAgICAgICAgICAgICBGSUxFICpzdHJlYW0pKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGdldGRlbGltLCBzc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKipsaW5lcHRyLCBzaXplX3QgKmxpbmVzaXplLCBpbnQgZGVsaW1pdGVyLAorICAgICAgICAgICAgICAgICAgIEZJTEUgKnN0cmVhbSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIsIDQpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZ2V0ZGVsaW0sIHNzaXplX3QsCisgICAgICAgICAgICAgICAgICAoY2hhciAqKmxpbmVwdHIsIHNpemVfdCAqbGluZXNpemUsIGludCBkZWxpbWl0ZXIsCisgICAgICAgICAgICAgICAgICAgRklMRSAqc3RyZWFtKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChnZXRkZWxpbSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGdldGRlbGltCisjIGlmIEhBVkVfUkFXX0RFQ0xfR0VUREVMSU0KK19HTF9XQVJOX09OX1VTRSAoZ2V0ZGVsaW0sICJnZXRkZWxpbSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZ2V0ZGVsaW0gZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDEKKy8qIFJlYWQgYSBsaW5lLCB1cCB0byAoYW5kIGluY2x1ZGluZykgdGhlIG5leHQgbmV3bGluZSwgZnJvbSBTVFJFQU0sIHN0b3JlIGl0CisgICBpbiAqTElORVBUUiAoYW5kIE5VTC10ZXJtaW5hdGUgaXQpLgorICAgKkxJTkVQVFIgaXMgYSBwb2ludGVyIHJldHVybmVkIGZyb20gbWFsbG9jIChvciBOVUxMKSwgcG9pbnRpbmcgdG8gKkxJTkVTSVpFCisgICBieXRlcyBvZiBzcGFjZS4gIEl0IGlzIHJlYWxsb2MnZCBhcyBuZWNlc3NhcnkuCisgICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyByZWFkIGFuZCBzdG9yZWQgYXQgKkxJTkVQVFIgKG5vdCBpbmNsdWRpbmcgdGhlCisgICBOVUwgdGVybWluYXRvciksIG9yIC0xIG9uIGVycm9yIG9yIEVPRi4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZ2V0bGluZQorIyAgIGRlZmluZSBnZXRsaW5lIHJwbF9nZXRsaW5lCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZ2V0bGluZSwgc3NpemVfdCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqbGluZXB0ciwgc2l6ZV90ICpsaW5lc2l6ZSwgRklMRSAqc3RyZWFtKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMiwgMykpKTsKK19HTF9DWFhBTElBU19SUEwgKGdldGxpbmUsIHNzaXplX3QsCisgICAgICAgICAgICAgICAgICAoY2hhciAqKmxpbmVwdHIsIHNpemVfdCAqbGluZXNpemUsIEZJTEUgKnN0cmVhbSkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoZ2V0bGluZSwgc3NpemVfdCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqbGluZXB0ciwgc2l6ZV90ICpsaW5lc2l6ZSwgRklMRSAqc3RyZWFtKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMiwgMykpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChnZXRsaW5lLCBzc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKipsaW5lcHRyLCBzaXplX3QgKmxpbmVzaXplLCBGSUxFICpzdHJlYW0pKTsKKyMgZW5kaWYKKyMgaWYgMQorX0dMX0NYWEFMSUFTV0FSTiAoZ2V0bGluZSk7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGdldGxpbmUKKyMgaWYgSEFWRV9SQVdfREVDTF9HRVRMSU5FCitfR0xfV0FSTl9PTl9VU0UgKGdldGxpbmUsICJnZXRsaW5lIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBnZXRsaW5lIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIEl0IGlzIHZlcnkgcmFyZSB0aGF0IHRoZSBkZXZlbG9wZXIgZXZlciBoYXMgZnVsbCBjb250cm9sIG9mIHN0ZGluLAorICAgc28gYW55IHVzZSBvZiBnZXRzIHdhcnJhbnRzIGFuIHVuY29uZGl0aW9uYWwgd2FybmluZzsgYmVzaWRlcywgQzExCisgICByZW1vdmVkIGl0LiAgKi8KKyN1bmRlZiBnZXRzCisjaWYgSEFWRV9SQVdfREVDTF9HRVRTCitfR0xfV0FSTl9PTl9VU0UgKGdldHMsICJnZXRzIGlzIGEgc2VjdXJpdHkgaG9sZSAtIHVzZSBmZ2V0cyBpbnN0ZWFkIik7CisjZW5kaWYKKworCisjaWYgMSB8fCAwCitzdHJ1Y3Qgb2JzdGFjazsKKy8qIEdyb3cgYW4gb2JzdGFjayB3aXRoIGZvcm1hdHRlZCBvdXRwdXQuICBSZXR1cm4gdGhlIG51bWJlciBvZgorICAgYnl0ZXMgYWRkZWQgdG8gT0JTLiAgTm8gdHJhaWxpbmcgbnVsIGJ5dGUgaXMgYWRkZWQsIGFuZCB0aGUKKyAgIG9iamVjdCBzaG91bGQgYmUgY2xvc2VkIHdpdGggb2JzdGFja19maW5pc2ggYmVmb3JlIHVzZS4gIFVwb24KKyAgIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yLCBjYWxsIG9ic3RhY2tfYWxsb2NfZmFpbGVkX2hhbmRsZXIuICBVcG9uCisgICBvdGhlciBlcnJvciwgcmV0dXJuIC0xLiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgb2JzdGFja19wcmludGYgcnBsX29ic3RhY2tfcHJpbnRmCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAob2JzdGFja19wcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgb2JzdGFjayAqb2JzLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URiAoMiwgMykKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChvYnN0YWNrX3ByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKHN0cnVjdCBvYnN0YWNrICpvYnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChvYnN0YWNrX3ByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKHN0cnVjdCBvYnN0YWNrICpvYnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgyLCAzKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChvYnN0YWNrX3ByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKHN0cnVjdCBvYnN0YWNrICpvYnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChvYnN0YWNrX3ByaW50Zik7CisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIG9ic3RhY2tfdnByaW50ZiBycGxfb2JzdGFja192cHJpbnRmCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAob2JzdGFja192cHJpbnRmLCBpbnQsCisgICAgICAgICAgICAgICAgICAoc3RydWN0IG9ic3RhY2sgKm9icywgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEYgKDIsIDApCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAob2JzdGFja192cHJpbnRmLCBpbnQsCisgICAgICAgICAgICAgICAgICAoc3RydWN0IG9ic3RhY2sgKm9icywgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKG9ic3RhY2tfdnByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKHN0cnVjdCBvYnN0YWNrICpvYnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgyLCAwKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChvYnN0YWNrX3ZwcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgb2JzdGFjayAqb2JzLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAob2JzdGFja192cHJpbnRmKTsKKyNlbmRpZgorCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocGNsb3NlLCBpbnQsIChGSUxFICpzdHJlYW0pIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwY2xvc2UsIGludCwgKEZJTEUgKnN0cmVhbSkpOworX0dMX0NYWEFMSUFTV0FSTiAocGNsb3NlKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcGNsb3NlCisjIGlmIEhBVkVfUkFXX0RFQ0xfUENMT1NFCitfR0xfV0FSTl9PTl9VU0UgKHBjbG9zZSwgInBjbG9zZSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcGNsb3NlIGZvciBtb3JlIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDEKKy8qIFByaW50IGEgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgZGVzY3JpYmluZyB0aGUgdmFsdWUgb2YgRVJSTk8sCisgICAoaWYgU1RSSU5HIGlzIG5vdCBOVUxMIGFuZCBub3QgZW1wdHkpIHByZWZpeGVkIHdpdGggU1RSSU5HIGFuZCAiOiAiLAorICAgYW5kIHRlcm1pbmF0ZWQgd2l0aCBhIG5ld2xpbmUuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBwZXJyb3IgcnBsX3BlcnJvcgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHBlcnJvciwgdm9pZCwgKGNvbnN0IGNoYXIgKnN0cmluZykpOworX0dMX0NYWEFMSUFTX1JQTCAocGVycm9yLCB2b2lkLCAoY29uc3QgY2hhciAqc3RyaW5nKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKHBlcnJvciwgdm9pZCwgKGNvbnN0IGNoYXIgKnN0cmluZykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocGVycm9yKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcGVycm9yCisvKiBBc3N1bWUgcGVycm9yIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKHBlcnJvciwgInBlcnJvciBpcyBub3QgYWx3YXlzIFBPU0lYIGNvbXBsaWFudCAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBlcnJvciBmb3IgcG9ydGFiaWxpdHkiKTsKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHBvcGVuCisjICAgZGVmaW5lIHBvcGVuIHJwbF9wb3BlbgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHBvcGVuLCBGSUxFICosIChjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKm1vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocG9wZW4sIEZJTEUgKiwgKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqbW9kZSkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocG9wZW4sIEZJTEUgKiwgKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocG9wZW4sIEZJTEUgKiwgKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqbW9kZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocG9wZW4pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3BlbgorIyBpZiBIQVZFX1JBV19ERUNMX1BPUEVOCitfR0xfV0FSTl9PTl9VU0UgKHBvcGVuLCAicG9wZW4gaXMgYnVnZ3kgb24gc29tZSBwbGF0Zm9ybXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwb3BlbiBvciBwaXBlIGZvciBtb3JlIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDEgfHwgMQorIyBpZiAoMSAmJiAxKSBcCisgICAgIHx8ICgxICYmIDAgJiYgKDAgfHwgMCkpCisjICBpZiBkZWZpbmVkIF9fR05VQ19fCisjICAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKy8qIERvbid0IGJyZWFrIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsTSxOKSkpLiAgKi8KKyMgICAgZGVmaW5lIHByaW50ZiBfX3ByaW50Zl9fCisjICAgZW5kaWYKKyMgICBpZiAxIHx8IDEKK19HTF9GVU5DREVDTF9SUExfMSAoX19wcmludGZfXywgaW50LAorICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gKCIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9TVERJT19NQUNST0VYUEFORF9BTkRfU1RSSU5HSVpFKHJwbF9wcmludGYpKQorICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEYgKDEsIDIpCisgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICAgZWxzZQorX0dMX0ZVTkNERUNMX1JQTF8xIChfX3ByaW50Zl9fLCBpbnQsCisgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgX19hc21fXyAoIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX1NURElPX01BQ1JPRVhQQU5EX0FORF9TVFJJTkdJWkUocnBsX3ByaW50ZikpCisgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URl9TWVNURU0gKDEsIDIpCisgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICAgZW5kaWYKK19HTF9DWFhBTElBU19SUExfMSAocHJpbnRmLCBfX3ByaW50Zl9fLCBpbnQsIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworIyAgZWxzZQorIyAgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgIGRlZmluZSBwcmludGYgcnBsX3ByaW50ZgorIyAgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URiAoMSwgMikKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwcmludGYsIGludCwgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisjICBlbmRpZgorIyAgZGVmaW5lIEdOVUxJQl9vdmVycmlkZXNfcHJpbnRmIDEKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAocHJpbnRmLCBpbnQsIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocHJpbnRmKTsKKyNlbmRpZgorI2lmICExICYmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgaWYgIUdOVUxJQl9vdmVycmlkZXNfcHJpbnRmCisjICB1bmRlZiBwcmludGYKKyMgZW5kaWYKKy8qIEFzc3VtZSBwcmludGYgaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAocHJpbnRmLCAicHJpbnRmIGlzIG5vdCBhbHdheXMgUE9TSVggY29tcGxpYW50IC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcHJpbnRmLXBvc2l4IGZvciBwb3J0YWJsZSAiCisgICAgICAgICAgICAgICAgICJQT1NJWCBjb21wbGlhbmNlIik7CisjZW5kaWYKKworI2lmIDEKKyMgaWYgMCAmJiAoMCB8fCAwKQorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBwdXRjCisjICAgZGVmaW5lIHB1dGMgcnBsX2ZwdXRjCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZnB1dGMsIGludCwgKGludCBjLCBGSUxFICpzdHJlYW0pIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMXzEgKHB1dGMsIHJwbF9mcHV0YywgaW50LCAoaW50IGMsIEZJTEUgKnN0cmVhbSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChwdXRjLCBpbnQsIChpbnQgYywgRklMRSAqc3RyZWFtKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwdXRjKTsKKyNlbmRpZgorCisjaWYgMQorIyBpZiAwICYmICgwIHx8IDApCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHB1dGNoYXIKKyMgICBkZWZpbmUgcHV0Y2hhciBycGxfcHV0Y2hhcgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHB1dGNoYXIsIGludCwgKGludCBjKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwdXRjaGFyLCBpbnQsIChpbnQgYykpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChwdXRjaGFyLCBpbnQsIChpbnQgYykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocHV0Y2hhcik7CisjZW5kaWYKKworI2lmIDEKKyMgaWYgMCAmJiAoMCB8fCAwKQorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBwdXRzCisjICAgZGVmaW5lIHB1dHMgcnBsX3B1dHMKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwdXRzLCBpbnQsIChjb25zdCBjaGFyICpzdHJpbmcpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwdXRzLCBpbnQsIChjb25zdCBjaGFyICpzdHJpbmcpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAocHV0cywgaW50LCAoY29uc3QgY2hhciAqc3RyaW5nKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwdXRzKTsKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHJlbW92ZQorIyAgIGRlZmluZSByZW1vdmUgcnBsX3JlbW92ZQorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHJlbW92ZSwgaW50LCAoY29uc3QgY2hhciAqbmFtZSkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHJlbW92ZSwgaW50LCAoY29uc3QgY2hhciAqbmFtZSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChyZW1vdmUsIGludCwgKGNvbnN0IGNoYXIgKm5hbWUpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHJlbW92ZSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHJlbW92ZQorLyogQXNzdW1lIHJlbW92ZSBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFIChyZW1vdmUsICJyZW1vdmUgY2Fubm90IGhhbmRsZSBkaXJlY3RvcmllcyBvbiBzb21lIHBsYXRmb3JtcyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHJlbW92ZSBmb3IgbW9yZSBwb3J0YWJpbGl0eSIpOworI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcmVuYW1lCisjICAgZGVmaW5lIHJlbmFtZSBycGxfcmVuYW1lCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocmVuYW1lLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqb2xkX2ZpbGVuYW1lLCBjb25zdCBjaGFyICpuZXdfZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocmVuYW1lLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqb2xkX2ZpbGVuYW1lLCBjb25zdCBjaGFyICpuZXdfZmlsZW5hbWUpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAocmVuYW1lLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqb2xkX2ZpbGVuYW1lLCBjb25zdCBjaGFyICpuZXdfZmlsZW5hbWUpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHJlbmFtZSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHJlbmFtZQorLyogQXNzdW1lIHJlbmFtZSBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFIChyZW5hbWUsICJyZW5hbWUgaXMgYnVnZ3kgb24gc29tZSBwbGF0Zm9ybXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSByZW5hbWUgZm9yIG1vcmUgcG9ydGFiaWxpdHkiKTsKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHJlbmFtZWF0CisjICAgZGVmaW5lIHJlbmFtZWF0IHJwbF9yZW5hbWVhdAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHJlbmFtZWF0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkMSwgY2hhciBjb25zdCAqZmlsZTEsIGludCBmZDIsIGNoYXIgY29uc3QgKmZpbGUyKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMiwgNCkpKTsKK19HTF9DWFhBTElBU19SUEwgKHJlbmFtZWF0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkMSwgY2hhciBjb25zdCAqZmlsZTEsIGludCBmZDIsIGNoYXIgY29uc3QgKmZpbGUyKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChyZW5hbWVhdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZDEsIGNoYXIgY29uc3QgKmZpbGUxLCBpbnQgZmQyLCBjaGFyIGNvbnN0ICpmaWxlMikKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIsIDQpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocmVuYW1lYXQsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQxLCBjaGFyIGNvbnN0ICpmaWxlMSwgaW50IGZkMiwgY2hhciBjb25zdCAqZmlsZTIpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHJlbmFtZWF0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcmVuYW1lYXQKKyMgaWYgSEFWRV9SQVdfREVDTF9SRU5BTUVBVAorX0dMX1dBUk5fT05fVVNFIChyZW5hbWVhdCwgInJlbmFtZWF0IGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHJlbmFtZWF0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAxCisjIGlmIDAgJiYgMAorIyAgaWYgZGVmaW5lZCBfX0dOVUNfXworIyAgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgIHVuZGVmIHNjYW5mCisvKiBEb24ndCBicmVhayBfX2F0dHJpYnV0ZV9fKChmb3JtYXQoc2NhbmYsTSxOKSkpLiAgKi8KKyMgICAgZGVmaW5lIHNjYW5mIF9fc2NhbmZfXworIyAgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMXzEgKF9fc2NhbmZfXywgaW50LAorICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gKCIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9TVERJT19NQUNST0VYUEFORF9BTkRfU1RSSU5HSVpFKHJwbF9zY2FuZikpCisgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1NDQU5GX1NZU1RFTSAoMSwgMikKKyAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUExfMSAoc2NhbmYsIF9fc2NhbmZfXywgaW50LCAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKTsKKyMgIGVsc2UKKyMgICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgICB1bmRlZiBzY2FuZgorIyAgICBkZWZpbmUgc2NhbmYgcnBsX3NjYW5mCisjICAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHNjYW5mLCBpbnQsIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1NDQU5GX1NZU1RFTSAoMSwgMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzY2FuZiwgaW50LCAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKTsKKyMgIGVuZGlmCisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKHNjYW5mLCBpbnQsIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoc2NhbmYpOworI2VuZGlmCisKKyNpZiAxCisjIGlmIDEKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHNucHJpbnRmIHJwbF9zbnByaW50ZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHNucHJpbnRmLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY2hhciAqc3RyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEYgKDMsIDQpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgzKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoc25wcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpzdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoc25wcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpzdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URiAoMywgNCkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDMpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc25wcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpzdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoc25wcmludGYpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzbnByaW50ZgorIyBpZiBIQVZFX1JBV19ERUNMX1NOUFJJTlRGCitfR0xfV0FSTl9PTl9VU0UgKHNucHJpbnRmLCAic25wcmludGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHNucHJpbnRmIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIFNvbWUgcGVvcGxlIHdvdWxkIGFyZ3VlIHRoYXQgYWxsIHNwcmludGYgdXNlcyBzaG91bGQgYmUgd2FybmVkIGFib3V0CisgICAoZm9yIGV4YW1wbGUsIE9wZW5CU0QgaXNzdWVzIGEgbGluayB3YXJuaW5nIGZvciBpdCksCisgICBzaW5jZSBpdCBjYW4gY2F1c2Ugc2VjdXJpdHkgaG9sZXMgZHVlIHRvIGJ1ZmZlciBvdmVycnVucy4KKyAgIEhvd2V2ZXIsIHdlIGJlbGlldmUgdGhhdCBzcHJpbnRmIGNhbiBiZSB1c2VkIHNhZmVseSwgYW5kIGlzIG1vcmUKKyAgIGVmZmljaWVudCB0aGFuIHNucHJpbnRmIGluIHRob3NlIHNhZmUgY2FzZXM7IGFuZCBhcyBwcm9vZiBvZiBvdXIKKyAgIGJlbGllZiwgd2UgdXNlIHNwcmludGYgaW4gc2V2ZXJhbCBnbnVsaWIgbW9kdWxlcy4gIFNvIHRoaXMgaGVhZGVyCisgICBpbnRlbnRpb25hbGx5IGF2b2lkcyBhZGRpbmcgYSB3YXJuaW5nIHRvIHNwcmludGYgZXhjZXB0IHdoZW4KKyAgIEdOVUxJQl9QT1NJWENIRUNLIGlzIGRlZmluZWQuICAqLworCisjaWYgMQorIyBpZiAxCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBzcHJpbnRmIHJwbF9zcHJpbnRmCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc3ByaW50ZiwgaW50LCAoY2hhciAqc3RyLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgyLCAzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoc3ByaW50ZiwgaW50LCAoY2hhciAqc3RyLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChzcHJpbnRmLCBpbnQsIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzcHJpbnRmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc3ByaW50ZgorLyogQXNzdW1lIHNwcmludGYgaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAoc3ByaW50ZiwgInNwcmludGYgaXMgbm90IGFsd2F5cyBQT1NJWCBjb21wbGlhbnQgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzcHJpbnRmLXBvc2l4IGZvciBwb3J0YWJsZSAiCisgICAgICAgICAgICAgICAgICJQT1NJWCBjb21wbGlhbmNlIik7CisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgdG1wZmlsZSBycGxfdG1wZmlsZQorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHRtcGZpbGUsIEZJTEUgKiwgKHZvaWQpKTsKK19HTF9DWFhBTElBU19SUEwgKHRtcGZpbGUsIEZJTEUgKiwgKHZvaWQpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAodG1wZmlsZSwgRklMRSAqLCAodm9pZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAodG1wZmlsZSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHRtcGZpbGUKKyMgaWYgSEFWRV9SQVdfREVDTF9UTVBGSUxFCitfR0xfV0FSTl9PTl9VU0UgKHRtcGZpbGUsICJ0bXBmaWxlIGlzIG5vdCB1c2FibGUgb24gbWluZ3cgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB0bXBmaWxlIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisvKiBXcml0ZSBmb3JtYXR0ZWQgb3V0cHV0IHRvIGEgc3RyaW5nIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB3aXRoIG1hbGxvYygpLgorICAgSWYgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHN1Y2NlZWRzLCBzdG9yZSB0aGUgYWRkcmVzcyBvZiB0aGUgc3RyaW5nIGluCisgICAqUkVTVUxUIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiByZXN1bHRpbmcgYnl0ZXMsIGV4Y2x1ZGluZyB0aGUgdHJhaWxpbmcKKyAgIE5VTC4gIFVwb24gbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IsIG9yIHNvbWUgb3RoZXIgZXJyb3IsIHJldHVybiAtMS4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGFzcHJpbnRmIHJwbF9hc3ByaW50ZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGFzcHJpbnRmLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY2hhciAqKnJlc3VsdCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEYgKDIsIDMpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoYXNwcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqcmVzdWx0LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoYXNwcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqcmVzdWx0LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URiAoMiwgMykKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoYXNwcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqcmVzdWx0LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoYXNwcmludGYpOworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSB2YXNwcmludGYgcnBsX3Zhc3ByaW50ZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHZhc3ByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKipyZXN1bHQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgyLCAwKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHZhc3ByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKipyZXN1bHQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh2YXNwcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqcmVzdWx0LCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URiAoMiwgMCkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAodmFzcHJpbnRmLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY2hhciAqKnJlc3VsdCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHZhc3ByaW50Zik7CisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgdmRwcmludGYgcnBsX3ZkcHJpbnRmCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAodmRwcmludGYsIGludCwgKGludCBmZCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEYgKDIsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAodmRwcmludGYsIGludCwgKGludCBmZCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHZkcHJpbnRmLCBpbnQsIChpbnQgZmQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgyLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKKyMgIGVuZGlmCisvKiBOZWVkIHRvIGNhc3QsIGJlY2F1c2Ugb24gU29sYXJpcywgdGhlIHRoaXJkIHBhcmFtZXRlciB3aWxsIGxpa2VseSBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFfbGlzdCBhcmdzLiAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVCAodmRwcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgKGludCBmZCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHZkcHJpbnRmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgdmRwcmludGYKKyMgaWYgSEFWRV9SQVdfREVDTF9WRFBSSU5URgorX0dMX1dBUk5fT05fVVNFICh2ZHByaW50ZiwgInZkcHJpbnRmIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB2ZHByaW50ZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMSB8fCAxCisjIGlmICgxICYmIDEpIFwKKyAgICAgfHwgKDEgJiYgMCAmJiAoMCB8fCAwKSkKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHZmcHJpbnRmIHJwbF92ZnByaW50ZgorIyAgZW5kaWYKKyMgIGRlZmluZSBHTlVMSUJfb3ZlcnJpZGVzX3ZmcHJpbnRmIDEKKyMgIGlmIDEKK19HTF9GVU5DREVDTF9SUEwgKHZmcHJpbnRmLCBpbnQsIChGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEYgKDIsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyAgZWxzZQorX0dMX0ZVTkNERUNMX1JQTCAodmZwcmludGYsIGludCwgKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URl9TWVNURU0gKDIsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19SUEwgKHZmcHJpbnRmLCBpbnQsIChGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZWxzZQorLyogTmVlZCB0byBjYXN0LCBiZWNhdXNlIG9uIFNvbGFyaXMsIHRoZSB0aGlyZCBwYXJhbWV0ZXIgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFfbGlzdCBhcmdzCisgICBhbmQgR0NDJ3MgZml4aW5jbHVkZXMgZGlkIG5vdCBjaGFuZ2UgdGhpcyB0byBfX2dudWNfdmFfbGlzdC4gICovCitfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKHZmcHJpbnRmLCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgIChGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHZmcHJpbnRmKTsKKyNlbmRpZgorI2lmICExICYmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgaWYgIUdOVUxJQl9vdmVycmlkZXNfdmZwcmludGYKKyMgIHVuZGVmIHZmcHJpbnRmCisjIGVuZGlmCisvKiBBc3N1bWUgdmZwcmludGYgaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAodmZwcmludGYsICJ2ZnByaW50ZiBpcyBub3QgYWx3YXlzIFBPU0lYIGNvbXBsaWFudCAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHZmcHJpbnRmLXBvc2l4IGZvciBwb3J0YWJsZSAiCisgICAgICAgICAgICAgICAgICAgICAgIlBPU0lYIGNvbXBsaWFuY2UiKTsKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwICYmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgdmZzY2FuZgorIyAgIGRlZmluZSB2ZnNjYW5mIHJwbF92ZnNjYW5mCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAodmZzY2FuZiwgaW50LAorICAgICAgICAgICAgICAgICAgKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9TQ0FORl9TWVNURU0gKDIsIDApCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAodmZzY2FuZiwgaW50LAorICAgICAgICAgICAgICAgICAgKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAodmZzY2FuZiwgaW50LAorICAgICAgICAgICAgICAgICAgKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHZmc2NhbmYpOworI2VuZGlmCisKKyNpZiAwIHx8IDEKKyMgaWYgKDAgJiYgMCkgXAorICAgICB8fCAoMSAmJiAwICYmICgwIHx8IDApKQorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgdnByaW50ZiBycGxfdnByaW50ZgorIyAgZW5kaWYKKyMgIGRlZmluZSBHTlVMSUJfb3ZlcnJpZGVzX3ZwcmludGYgMQorIyAgaWYgMCB8fCAxCitfR0xfRlVOQ0RFQ0xfUlBMICh2cHJpbnRmLCBpbnQsIChjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgxLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZWxzZQorX0dMX0ZVTkNERUNMX1JQTCAodnByaW50ZiwgaW50LCAoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URl9TWVNURU0gKDEsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1JQTCAodnByaW50ZiwgaW50LCAoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZWxzZQorLyogTmVlZCB0byBjYXN0LCBiZWNhdXNlIG9uIFNvbGFyaXMsIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YV9saXN0IGFyZ3MKKyAgIGFuZCBHQ0MncyBmaXhpbmNsdWRlcyBkaWQgbm90IGNoYW5nZSB0aGlzIHRvIF9fZ251Y192YV9saXN0LiAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVCAodnByaW50ZiwgaW50LCAoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHZwcmludGYpOworI2VuZGlmCisjaWYgITAgJiYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyBpZiAhR05VTElCX292ZXJyaWRlc192cHJpbnRmCisjICB1bmRlZiB2cHJpbnRmCisjIGVuZGlmCisvKiBBc3N1bWUgdnByaW50ZiBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFICh2cHJpbnRmLCAidnByaW50ZiBpcyBub3QgYWx3YXlzIFBPU0lYIGNvbXBsaWFudCAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHZwcmludGYtcG9zaXggZm9yIHBvcnRhYmxlICIKKyAgICAgICAgICAgICAgICAgIlBPU0lYIGNvbXBsaWFuY2UiKTsKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwICYmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgdnNjYW5mCisjICAgZGVmaW5lIHZzY2FuZiBycGxfdnNjYW5mCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAodnNjYW5mLCBpbnQsIChjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9TQ0FORl9TWVNURU0gKDEsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHZzY2FuZiwgaW50LCAoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAodnNjYW5mLCBpbnQsIChjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAodnNjYW5mKTsKKyNlbmRpZgorCisjaWYgMQorIyBpZiAxCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSB2c25wcmludGYgcnBsX3ZzbnByaW50ZgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHZzbnByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKnN0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9GT1JNQVRfUFJJTlRGICgzLCAwKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMykpKTsKK19HTF9DWFhBTElBU19SUEwgKHZzbnByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKnN0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh2c25wcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpzdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfRk9STUFUX1BSSU5URiAoMywgMCkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDMpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAodnNucHJpbnRmLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY2hhciAqc3RyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHZzbnByaW50Zik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHZzbnByaW50ZgorIyBpZiBIQVZFX1JBV19ERUNMX1ZTTlBSSU5URgorX0dMX1dBUk5fT05fVVNFICh2c25wcmludGYsICJ2c25wcmludGYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHZzbnByaW50ZiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMQorIyBpZiAxCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSB2c3ByaW50ZiBycGxfdnNwcmludGYKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh2c3ByaW50ZiwgaW50LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX0ZPUk1BVF9QUklOVEYgKDIsIDApCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAodnNwcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKSk7CisjIGVsc2UKKy8qIE5lZWQgdG8gY2FzdCwgYmVjYXVzZSBvbiBTb2xhcmlzLCB0aGUgdGhpcmQgcGFyYW1ldGVyIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YV9saXN0IGFyZ3MKKyAgIGFuZCBHQ0MncyBmaXhpbmNsdWRlcyBkaWQgbm90IGNoYW5nZSB0aGlzIHRvIF9fZ251Y192YV9saXN0LiAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVCAodnNwcmludGYsIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHZzcHJpbnRmKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgdnNwcmludGYKKy8qIEFzc3VtZSB2c3ByaW50ZiBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFICh2c3ByaW50ZiwgInZzcHJpbnRmIGlzIG5vdCBhbHdheXMgUE9TSVggY29tcGxpYW50IC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgdnNwcmludGYtcG9zaXggZm9yIHBvcnRhYmxlICIKKyAgICAgICAgICAgICAgICAgICAgICAiUE9TSVggY29tcGxpYW5jZSIpOworI2VuZGlmCisKK19HTF9JTkxJTkVfSEVBREVSX0VORAorCisjZW5kaWYgLyogX0dMX1NURElPX0ggKi8KKyNlbmRpZiAvKiBfR0xfU1RESU9fSCAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saW51eC1saWIvc3RkbGliLmggYi9saW51eC1saWIvc3RkbGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJjOWFjMQotLS0gL2Rldi9udWxsCisrKyBiL2xpbnV4LWxpYi9zdGRsaWIuaApAQCAtMCwwICsxLDEyNTkgQEAKKy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8KKy8qIEEgR05VLWxpa2UgPHN0ZGxpYi5oPi4KKworICAgQ29weXJpZ2h0IChDKSAxOTk1LCAyMDAxLTIwMDQsIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmIF9fR05VQ19fID49IDMKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkIF9fbmVlZF9tYWxsb2NfYW5kX2NhbGxvYworLyogU3BlY2lhbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24gaW5zaWRlIGdsaWJjIGhlYWRlciBmaWxlcy4gICovCisKKyNpbmNsdWRlX25leHQgPHN0ZGxpYi5oPgorCisjZWxzZQorLyogTm9ybWFsIGludm9jYXRpb24gY29udmVudGlvbi4gICovCisKKyNpZm5kZWYgX0dMX1NURExJQl9ICisKKy8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyNpbmNsdWRlX25leHQgPHN0ZGxpYi5oPgorCisjaWZuZGVmIF9HTF9TVERMSUJfSAorI2RlZmluZSBfR0xfU1RETElCX0gKKworLyogTmV0QlNEIDUuMCBtaXMtZGVmaW5lcyBOVUxMLiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLyogTWlyQlNEIDEwIGRlZmluZXMgV0VYSVRTVEFUVVMgaW4gPHN5cy93YWl0Lmg+LCBub3QgaW4gPHN0ZGxpYi5oPi4gICovCisjaWYgMCAmJiAhZGVmaW5lZCBXRVhJVFNUQVRVUworIyBpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2VuZGlmCisKKy8qIFNvbGFyaXMgZGVjbGFyZXMgZ2V0bG9hZGF2ZygpIGluIDxzeXMvbG9hZGF2Zy5oPi4gICovCisjaWYgKDAgfHwgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSykgJiYgMAorIyBpbmNsdWRlIDxzeXMvbG9hZGF2Zy5oPgorI2VuZGlmCisKKy8qIE5hdGl2ZSBXaW5kb3dzIHBsYXRmb3JtcyBkZWNsYXJlIG1rdGVtcCgpIGluIDxpby5oPi4gICovCisjaWYgMCAmJiAoKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXykKKyMgaW5jbHVkZSA8aW8uaD4KKyNlbmRpZgorCisjaWYgMAorCisvKiBPU0YvMSA1LjEgZGVjbGFyZXMgJ3N0cnVjdCByYW5kb21fZGF0YScgaW4gPHJhbmRvbS5oPiwgd2hpY2ggaXMgaW5jbHVkZWQKKyAgIGZyb20gPHN0ZGxpYi5oPiBpZiBfUkVFTlRSQU5UIGlzIGRlZmluZWQuICBJbmNsdWRlIGl0IHdoZW5ldmVyIHdlIG5lZWQKKyAgICdzdHJ1Y3QgcmFuZG9tX2RhdGEnLiAgKi8KKyMgaWYgMQorIyAgaW5jbHVkZSA8cmFuZG9tLmg+CisjIGVuZGlmCisKKyMgaWYgITEgfHwgMCB8fCAhMQorIyAgaW5jbHVkZSA8c3RkaW50Lmg+CisjIGVuZGlmCisKKyMgaWYgITEKKy8qIERlZmluZSAnc3RydWN0IHJhbmRvbV9kYXRhJy4KKyAgIEJ1dCBhbGxvdyBtdWx0aXBsZSBnbnVsaWIgZ2VuZXJhdGVkIDxzdGRsaWIuaD4gcmVwbGFjZW1lbnRzIHRvIGNvZXhpc3QuICAqLworIyAgaWYgIUdOVUxJQl9kZWZpbmVkX3N0cnVjdF9yYW5kb21fZGF0YQorc3RydWN0IHJhbmRvbV9kYXRhCit7CisgIGludDMyX3QgKmZwdHI7ICAgICAgICAgICAgICAgIC8qIEZyb250IHBvaW50ZXIuICAqLworICBpbnQzMl90ICpycHRyOyAgICAgICAgICAgICAgICAvKiBSZWFyIHBvaW50ZXIuICAqLworICBpbnQzMl90ICpzdGF0ZTsgICAgICAgICAgICAgICAvKiBBcnJheSBvZiBzdGF0ZSB2YWx1ZXMuICAqLworICBpbnQgcmFuZF90eXBlOyAgICAgICAgICAgICAgICAvKiBUeXBlIG9mIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLiAgKi8KKyAgaW50IHJhbmRfZGVnOyAgICAgICAgICAgICAgICAgLyogRGVncmVlIG9mIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLiAgKi8KKyAgaW50IHJhbmRfc2VwOyAgICAgICAgICAgICAgICAgLyogRGlzdGFuY2UgYmV0d2VlbiBmcm9udCBhbmQgcmVhci4gICovCisgIGludDMyX3QgKmVuZF9wdHI7ICAgICAgICAgICAgIC8qIFBvaW50ZXIgYmVoaW5kIHN0YXRlIHRhYmxlLiAgKi8KK307CisjICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX3N0cnVjdF9yYW5kb21fZGF0YSAxCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiAoMCB8fCAwIHx8IDAgfHwgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSykgJiYgISBkZWZpbmVkIF9fR0xJQkNfXyAmJiAhKChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgISBkZWZpbmVkIF9fQ1lHV0lOX18pCisvKiBPbiBNYWMgT1MgWCAxMC4zLCBvbmx5IDx1bmlzdGQuaD4gZGVjbGFyZXMgbWtzdGVtcC4gICovCisvKiBPbiBNYWMgT1MgWCAxMC41LCBvbmx5IDx1bmlzdGQuaD4gZGVjbGFyZXMgbWtzdGVtcHMuICAqLworLyogT24gQ3lnd2luIDEuNy4xLCBvbmx5IDx1bmlzdGQuaD4gZGVjbGFyZXMgZ2V0c3Vib3B0LiAgKi8KKy8qIEJ1dCBhdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9uIG9uIGdsaWJjIHN5c3RlbXMgYW5kIG5hdGl2ZSBXaW5kb3dzLiAgKi8KKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworLyogVGhlIF9fYXR0cmlidXRlX18gZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDIuNSBhbmQgbGF0ZXIuCisgICBUaGUgYXR0cmlidXRlIF9fcHVyZV9fIHdhcyBhZGRlZCBpbiBnY2MgMi45Ni4gICovCisjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk2KQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9QVVJFIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpCisjZWxzZQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9QVVJFIC8qIGVtcHR5ICovCisjZW5kaWYKKworLyogVGhlIGRlZmluaXRpb24gb2YgX05vcmV0dXJuIGlzIGNvcGllZCBoZXJlLiAgKi8KKyNpZiAhZGVmaW5lZCBfTm9yZXR1cm4gJiYgX19TVERDX1ZFUlNJT05fXyA8IDIwMTExMgorIyBpZiAoMyA8PSBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gMiAmJiA4IDw9IF9fR05VQ19NSU5PUl9fKSBcCisgICAgICB8fCAweDUxMTAgPD0gX19TVU5QUk9fQykKKyMgIGRlZmluZSBfTm9yZXR1cm4gX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpCisjIGVsaWYgMTIwMCA8PSBfTVNDX1ZFUgorIyAgZGVmaW5lIF9Ob3JldHVybiBfX2RlY2xzcGVjIChub3JldHVybikKKyMgZWxzZQorIyAgZGVmaW5lIF9Ob3JldHVybgorIyBlbmRpZgorI2VuZGlmCisKKy8qIFRoZSBkZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBMIGV0Yy4gYXJlIGNvcGllZCBoZXJlLiAgKi8KKyNpZm5kZWYgX0dMX0NYWERFRlNfSAorI2RlZmluZSBfR0xfQ1hYREVGU19ICisKKy8qIFRoZSB0aHJlZSBtb3N0IGZyZXF1ZW50IHVzZSBjYXNlcyBvZiB0aGVzZSBtYWNyb3MgYXJlOgorCisgICAqIEZvciBwcm92aWRpbmcgYSBzdWJzdGl0dXRlIGZvciBhIGZ1bmN0aW9uIHRoYXQgaXMgbWlzc2luZyBvbiBzb21lCisgICAgIHBsYXRmb3JtcywgYnV0IGlzIGRlY2xhcmVkIGFuZCB3b3JrcyBmaW5lIG9uIHRoZSBwbGF0Zm9ybXMgb24gd2hpY2gKKyAgICAgaXQgZXhpc3RzOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgIUBIQVZFX0ZPT0AKKyAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgcmVwbGFjZW1lbnQgZm9yIGEgZnVuY3Rpb24gdGhhdCBleGlzdHMgb24gYWxsIHBsYXRmb3JtcywKKyAgICAgYnV0IGlzIGJyb2tlbi9pbnN1ZmZpY2llbnQgYW5kIG5lZWRzIHRvIGJlIHJlcGxhY2VkIG9uIHNvbWUgcGxhdGZvcm1zOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisgICAgICAgIyAgIHVuZGVmIGZvbworICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CisgICAgICAgIyBlbHNlCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgcmVwbGFjZW1lbnQgZm9yIGEgZnVuY3Rpb24gdGhhdCBleGlzdHMgb24gc29tZSBwbGF0Zm9ybXMKKyAgICAgYnV0IGlzIGJyb2tlbi9pbnN1ZmZpY2llbnQgYW5kIG5lZWRzIHRvIGJlIHJlcGxhY2VkIG9uIHNvbWUgb2YgdGhlbSBhbmQKKyAgICAgaXMgYWRkaXRpb25hbGx5IGVpdGhlciBtaXNzaW5nIG9yIHVuZGVjbGFyZWQgb24gc29tZSBvdGhlciBwbGF0Zm9ybXM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACisgICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyAgICAgICAjICAgdW5kZWYgZm9vCisgICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKyAgICAgICAjIGVsc2UKKyAgICAgICAjICBpZiAhQEhBVkVfRk9PQCAgIG9yICAgaWYgIUBIQVZFX0RFQ0xfRk9PQAorICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisqLworCisvKiBfR0xfRVhURVJOX0MgZGVjbGFyYXRpb247CisgICBwZXJmb3JtcyB0aGUgZGVjbGFyYXRpb24gd2l0aCBDIGxpbmthZ2UuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMKKyMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4gIkMiCisjZWxzZQorIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybgorI2VuZGlmCisKKy8qIF9HTF9GVU5DREVDTF9SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgZGVjbGFyZXMgYSByZXBsYWNlbWVudCBmdW5jdGlvbiwgbmFtZWQgcnBsX2Z1bmMsIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwKKyAgIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsIGFuZCBhdHRyaWJ1dGVzLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0ZVTkNERUNMX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisgKi8KKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICBfR0xfRlVOQ0RFQ0xfUlBMXzEgKHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpCisjZGVmaW5lIF9HTF9GVU5DREVDTF9SUExfMShycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0VYVEVSTl9DIHJldHR5cGUgcnBsX2Z1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworCisvKiBfR0xfRlVOQ0RFQ0xfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGRlY2xhcmVzIHRoZSBzeXN0ZW0gZnVuY3Rpb24sIG5hbWVkIGZ1bmMsIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwKKyAgIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsIGFuZCBhdHRyaWJ1dGVzLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0ZVTkNERUNMX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisgKi8KKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICBfR0xfRVhURVJOX0MgcmV0dHlwZSBmdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKworLyogX0dMX0NYWEFMSUFTX1JQTCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBkZWNsYXJlcyBhIEMrKyBhbGlhcyBjYWxsZWQgR05VTElCX05BTUVTUEFDRTo6ZnVuYworICAgdGhhdCByZWRpcmVjdHMgdG8gcnBsX2Z1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UgaXMgZGVmaW5lZC4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9DWFhBTElBU19SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworICovCisjZGVmaW5lIF9HTF9DWFhBTElBU19SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgX0dMX0NYWEFMSUFTX1JQTF8xIChmdW5jLCBycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKQorI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9IDo6cnBsX2Z1bmM7ICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1JQTF8xIChmdW5jLCBycGxfZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBycGxfZnVuYyBtYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudAorICAgZGVjbGFyYXRpb24uICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvcgorICAgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPig6OnJwbF9mdW5jKTsgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBkZWNsYXJlcyBhIEMrKyBhbGlhcyBjYWxsZWQgR05VTElCX05BTUVTUEFDRTo6ZnVuYworICAgdGhhdCByZWRpcmVjdHMgdG8gdGhlIHN5c3RlbSBwcm92aWRlZCBmdW5jdGlvbiBmdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFCisgICBpcyBkZWZpbmVkLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0NYWEFMSUFTX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CisgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorICAvKiBJZiB3ZSB3ZXJlIHRvIHdyaXRlCisgICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7CisgICAgIGxpa2UgYWJvdmUgaW4gX0dMX0NYWEFMSUFTX1JQTF8xLCB0aGUgY29tcGlsZXIgY291bGQgb3B0aW1pemUgY2FsbHMKKyAgICAgYmV0dGVyIChyZW1vdmUgYW4gaW5kaXJlY3Rpb24gdGhyb3VnaCBhICdzdGF0aWMnIHBvaW50ZXIgdmFyaWFibGUpLAorICAgICBidXQgdGhlbiB0aGUgX0dMX0NYWEFMSUFTV0FSTiBtYWNybyBiZWxvdyB3b3VsZCBjYXVzZSBhIHdhcm5pbmcgbm90IG9ubHkKKyAgICAgZm9yIHVzZXMgb2YgOjpmdW5jIGJ1dCBhbHNvIGZvciB1c2VzIG9mIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMuICAqLworIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOyAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1NZU19DQVNUIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gZnVuYyBtYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudCBkZWNsYXJhdGlvbi4KKyAgIEEgY2FzdCBpcyB1c2VkIHRvIHNpbGVuY2UgdGhlICJpbnZhbGlkIGNvbnZlcnNpb24iIGVycm9yIHRoYXQgd291bGQKKyAgIG90aGVyd2lzZSBvY2N1ci4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPig6OmZ1bmMpOyBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1NZU19DQVNUMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycywgcmV0dHlwZTIsIHBhcmFtZXRlcnMyKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gaXMgcGlja2VkIGFtb25nIGEgc2V0IG9mIG92ZXJsb2FkZWQgZnVuY3Rpb25zLAorICAgbmFtZWx5IHRoZSBvbmUgd2l0aCByZXR0eXBlMiBhbmQgcGFyYW1ldGVyczIuICBUd28gY29uc2VjdXRpdmUgY2FzdHMKKyAgIGFyZSB1c2VkIHRvIHNpbGVuY2UgdGhlICJjYW5ub3QgZmluZCBhIG1hdGNoIiBhbmQgImludmFsaWQgY29udmVyc2lvbiIKKyAgIGVycm9ycyB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyAgLyogVGhlIG91dGVyIGNhc3QgbXVzdCBiZSBhIHJlaW50ZXJwcmV0X2Nhc3QuCisgICAgIFRoZSBpbm5lciBjYXN0OiBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2V0IG9mIG92ZXJsb2FkZWQKKyAgICAgZnVuY3Rpb25zLCBpdCB3b3JrcyBhcyBhIHN0YXRpY19jYXN0PD4sIGNob29zaW5nIHRoZSBkZXNpZ25hdGVkIHZhcmlhbnQuCisgICAgIFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzaW5nbGUgdmFyaWFudCwgaXQgd29ya3MgYXMgYQorICAgICByZWludGVycHJldF9jYXN0PD4uIFRoZSBwYXJlbnRoZXNpemVkIGNhc3Qgc3ludGF4IHdvcmtzIGJvdGggd2F5cy4gICovCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzLHJldHR5cGUyLHBhcmFtZXRlcnMyKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKHJldHR5cGUyKCopcGFyYW1ldGVyczIpKDo6ZnVuYykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzLHJldHR5cGUyLHBhcmFtZXRlcnMyKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNXQVJOIChmdW5jKTsKKyAgIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZW1pdHRlZCB3aGVuIDo6ZnVuYyBpcyB1c2VkIGJ1dCBub3Qgd2hlbgorICAgR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgZnVuYyBtdXN0IGJlIGRlZmluZWQgd2l0aG91dCBvdmVybG9hZGVkCisgICB2YXJpYW50cy4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAorICAgX0dMX0NYWEFMSUFTV0FSTl8xIChmdW5jLCBHTlVMSUJfTkFNRVNQQUNFKQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8xKGZ1bmMsbmFtZXNwYWNlKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOXzIgKGZ1bmMsIG5hbWVzcGFjZSkKKy8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAorICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCisjIGlmICFfX09QVElNSVpFX18KKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKyAgICBfR0xfV0FSTl9PTl9VU0UgKGZ1bmMsIFwKKyAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICJVc2UgIiAjbmFtZXNwYWNlICI6OiIgI2Z1bmMgIiBpbnN0ZWFkLiIpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKyAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU1dBUk4xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZW1pdHRlZCB3aGVuIHRoZSBnaXZlbiBvdmVybG9hZGVkIHZhcmlhbnQgb2YgOjpmdW5jCisgICBpcyB1c2VkIGJ1dCBub3Qgd2hlbiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICAgX0dMX0NYWEFMSUFTV0FSTjFfMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgR05VTElCX05BTUVTUEFDRSkKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOMV8yIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBuYW1lc3BhY2UpCisvKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKyAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworIyBpZiAhX19PUFRJTUlaRV9fCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgICBfR0xfV0FSTl9PTl9VU0VfQ1hYIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJVc2UgIiAjbmFtZXNwYWNlICI6OiIgI2Z1bmMgIiBpbnN0ZWFkLiIpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKyNlbmRpZiAvKiBfR0xfQ1hYREVGU19IICovCisKKy8qIFRoZSBkZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVMTCBpcyBjb3BpZWQgaGVyZS4gICovCisvKiBfR0xfQVJHX05PTk5VTEwoKG4sLi4uLG0pKSB0ZWxscyB0aGUgY29tcGlsZXIgYW5kIHN0YXRpYyBhbmFseXplciB0b29scworICAgdGhhdCB0aGUgdmFsdWVzIHBhc3NlZCBhcyBhcmd1bWVudHMgbiwgLi4uLCBtIG11c3QgYmUgbm9uLU5VTEwgcG9pbnRlcnMuCisgICBuID0gMSBzdGFuZHMgZm9yIHRoZSBmaXJzdCBhcmd1bWVudCwgbiA9IDIgZm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgZXRjLiAgKi8KKyNpZm5kZWYgX0dMX0FSR19OT05OVUxMCisjIGlmIChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID49IDMpIHx8IF9fR05VQ19fID4gMworIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpIF9fYXR0cmlidXRlX18gKChfX25vbm51bGxfXyBwYXJhbXMpKQorIyBlbHNlCisjICBkZWZpbmUgX0dMX0FSR19OT05OVUxMKHBhcmFtcykKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UgaXMgY29waWVkIGhlcmUuICAqLworI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0UKKworIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKy8qIEEgY29tcGlsZXIgYXR0cmlidXRlIGlzIGF2YWlsYWJsZSBpbiBnY2MgdmVyc2lvbnMgNC4zLjAgYW5kIGxhdGVyLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24gX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtZXNzYWdlKSkpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisvKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmN0aW9uKSBmdW5jdGlvbgorIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBfR0xfV0FSTl9PTl9VU0VfQ1hYIChmdW5jdGlvbiwgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgInN0cmluZyIpCisgICBpcyBsaWtlIF9HTF9XQVJOX09OX1VTRSAoZnVuY3Rpb24sICJzdHJpbmciKSwgZXhjZXB0IHRoYXQgdGhlIGZ1bmN0aW9uIGlzCisgICBkZWNsYXJlZCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsCisgICBhbmQgYXR0cmlidXRlcy4KKyAgIFRoaXMgdmFyaWFudCBpcyB1c2VmdWwgZm9yIG92ZXJsb2FkZWQgZnVuY3Rpb25zIGluIEMrKy4gX0dMX1dBUk5fT05fVVNFIGRvZXMKKyAgIG5vdCB3b3JrIGluIHRoaXMgY2FzZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX09OX1VTRV9DWFgKKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCitleHRlcm4gcmV0dHlwZSBmdW5jdGlvbiBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzIFwKKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtc2cpKSkKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKy8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCitleHRlcm4gcmV0dHlwZSBmdW5jdGlvbiBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisjIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorX0dMX1dBUk5fRVhURVJOX0MgaW50IF9nbF93YXJuX29uX3VzZQorIyBlbmRpZgorI2VuZGlmCisKKy8qIF9HTF9XQVJOX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fRVhURVJOX0MKKyMgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cworIyAgZGVmaW5lIF9HTF9XQVJOX0VYVEVSTl9DIGV4dGVybiAiQyIKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9XQVJOX0VYVEVSTl9DIGV4dGVybgorIyBlbmRpZgorI2VuZGlmCisKKworLyogU29tZSBzeXN0ZW1zIGRvIG5vdCBkZWZpbmUgRVhJVF8qLCBkZXNwaXRlIG90aGVyd2lzZSBzdXBwb3J0aW5nIEM4OS4gICovCisjaWZuZGVmIEVYSVRfU1VDQ0VTUworIyBkZWZpbmUgRVhJVF9TVUNDRVNTIDAKKyNlbmRpZgorLyogVGFuZGVtL05TSyBhbmQgb3RoZXIgcGxhdGZvcm1zIHRoYXQgZGVmaW5lIEVYSVRfRkFJTFVSRSBhcyAtMSBpbnRlcmZlcmUKKyAgIHdpdGggcHJvcGVyIG9wZXJhdGlvbiBvZiB4YXJncy4gICovCisjaWZuZGVmIEVYSVRfRkFJTFVSRQorIyBkZWZpbmUgRVhJVF9GQUlMVVJFIDEKKyNlbGlmIEVYSVRfRkFJTFVSRSAhPSAxCisjIHVuZGVmIEVYSVRfRkFJTFVSRQorIyBkZWZpbmUgRVhJVF9GQUlMVVJFIDEKKyNlbmRpZgorCisKKyNpZiAwCisvKiBUZXJtaW5hdGUgdGhlIGN1cnJlbnQgcHJvY2VzcyB3aXRoIHRoZSBnaXZlbiByZXR1cm4gY29kZSwgd2l0aG91dCBydW5uaW5nCisgICB0aGUgJ2F0ZXhpdCcgaGFuZGxlcnMuICAqLworIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoX0V4aXQsIF9Ob3JldHVybiB2b2lkLCAoaW50IHN0YXR1cykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoX0V4aXQsIHZvaWQsIChpbnQgc3RhdHVzKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChfRXhpdCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIF9FeGl0CisjIGlmIEhBVkVfUkFXX0RFQ0xfX0VYSVQKK19HTF9XQVJOX09OX1VTRSAoX0V4aXQsICJfRXhpdCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgX0V4aXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorLyogUGFyc2UgYSBzaWduZWQgZGVjaW1hbCBpbnRlZ2VyLgorICAgUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGludGVnZXIuICBFcnJvcnMgYXJlIG5vdCBkZXRlY3RlZC4gICovCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChhdG9sbCwgbG9uZyBsb25nLCAoY29uc3QgY2hhciAqc3RyaW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoYXRvbGwsIGxvbmcgbG9uZywgKGNvbnN0IGNoYXIgKnN0cmluZykpOworX0dMX0NYWEFMSUFTV0FSTiAoYXRvbGwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBhdG9sbAorIyBpZiBIQVZFX1JBV19ERUNMX0FUT0xMCitfR0xfV0FSTl9PTl9VU0UgKGF0b2xsLCAiYXRvbGwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGF0b2xsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAxCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgY2FsbG9jCisjICAgZGVmaW5lIGNhbGxvYyBycGxfY2FsbG9jCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoY2FsbG9jLCB2b2lkICosIChzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChjYWxsb2MsIHZvaWQgKiwgKHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoY2FsbG9jLCB2b2lkICosIChzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChjYWxsb2MpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBjYWxsb2MKKy8qIEFzc3VtZSBjYWxsb2MgaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAoY2FsbG9jLCAiY2FsbG9jIGlzIG5vdCBQT1NJWCBjb21wbGlhbnQgZXZlcnl3aGVyZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGNhbGxvYy1wb3NpeCBmb3IgcG9ydGFiaWxpdHkiKTsKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBjYW5vbmljYWxpemVfZmlsZV9uYW1lIHJwbF9jYW5vbmljYWxpemVfZmlsZV9uYW1lCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoY2Fub25pY2FsaXplX2ZpbGVfbmFtZSwgY2hhciAqLCAoY29uc3QgY2hhciAqbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKGNhbm9uaWNhbGl6ZV9maWxlX25hbWUsIGNoYXIgKiwgKGNvbnN0IGNoYXIgKm5hbWUpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGNhbm9uaWNhbGl6ZV9maWxlX25hbWUsIGNoYXIgKiwgKGNvbnN0IGNoYXIgKm5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoY2Fub25pY2FsaXplX2ZpbGVfbmFtZSwgY2hhciAqLCAoY29uc3QgY2hhciAqbmFtZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoY2Fub25pY2FsaXplX2ZpbGVfbmFtZSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGNhbm9uaWNhbGl6ZV9maWxlX25hbWUKKyMgaWYgSEFWRV9SQVdfREVDTF9DQU5PTklDQUxJWkVfRklMRV9OQU1FCitfR0xfV0FSTl9PTl9VU0UgKGNhbm9uaWNhbGl6ZV9maWxlX25hbWUsCisgICAgICAgICAgICAgICAgICJjYW5vbmljYWxpemVfZmlsZV9uYW1lIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBjYW5vbmljYWxpemUtbGdwbCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorLyogU3RvcmUgbWF4KE5FTEVNLDMpIGxvYWQgYXZlcmFnZSBudW1iZXJzIGluIExPQURBVkdbXS4KKyAgIFRoZSB0aHJlZSBudW1iZXJzIGFyZSB0aGUgbG9hZCBhdmVyYWdlIG9mIHRoZSBsYXN0IDEgbWludXRlLCB0aGUgbGFzdCA1CisgICBtaW51dGVzLCBhbmQgdGhlIGxhc3QgMTUgbWludXRlcywgcmVzcGVjdGl2ZWx5LgorICAgTE9BREFWRyBpcyBhbiBhcnJheSBvZiBORUxFTSBudW1iZXJzLiAgKi8KKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGdldGxvYWRhdmcsIGludCwgKGRvdWJsZSBsb2FkYXZnW10sIGludCBuZWxlbSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGdldGxvYWRhdmcsIGludCwgKGRvdWJsZSBsb2FkYXZnW10sIGludCBuZWxlbSkpOworX0dMX0NYWEFMSUFTV0FSTiAoZ2V0bG9hZGF2Zyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGdldGxvYWRhdmcKKyMgaWYgSEFWRV9SQVdfREVDTF9HRVRMT0FEQVZHCitfR0xfV0FSTl9PTl9VU0UgKGdldGxvYWRhdmcsICJnZXRsb2FkYXZnIGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGdldGxvYWRhdmcgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKy8qIEFzc3VtaW5nICpPUFRJT05QIGlzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZWxlbWVudHMgb2YgdGhlIGZvcm0KKyAgICJ0b2tlbiIgb3IgInRva2VuPXZhbHVlIiwgZ2V0c3Vib3B0IHBhcnNlcyB0aGUgZmlyc3Qgb2YgdGhlc2UgZWxlbWVudHMuCisgICBJZiB0aGUgZmlyc3QgZWxlbWVudCByZWZlcnMgdG8gYSAidG9rZW4iIHRoYXQgaXMgbWVtYmVyIG9mIHRoZSBnaXZlbgorICAgTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIHRva2VuczoKKyAgICAgLSBJdCByZXBsYWNlcyB0aGUgY29tbWEgd2l0aCBhIE5VTCBieXRlLCB1cGRhdGVzICpPUFRJT05QIHRvIHBvaW50IHBhc3QKKyAgICAgICB0aGUgZmlyc3Qgb3B0aW9uIGFuZCB0aGUgY29tbWEsIHNldHMgKlZBTFVFUCB0byB0aGUgdmFsdWUgb2YgdGhlCisgICAgICAgZWxlbWVudCAob3IgTlVMTCBpZiBpdCBkb2Vzbid0IGNvbnRhaW4gYW4gIj0iIHNpZ24pLAorICAgICAtIEl0IHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSAidG9rZW4iIGluIHRoZSBnaXZlbiBhcnJheSBvZiB0b2tlbnMuCisgICBPdGhlcndpc2UgaXQgcmV0dXJucyAtMSwgYW5kICpPUFRJT05QIGFuZCAqVkFMVUVQIGFyZSB1bmRlZmluZWQuCisgICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgUE9TSVg6MjAwMSBzcGVjaWZpY2F0aW9uLgorICAgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3N1c3YzeHNoL2dldHN1Ym9wdC5odG1sICovCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChnZXRzdWJvcHQsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqb3B0aW9ucCwgY2hhciAqY29uc3QgKnRva2VucywgY2hhciAqKnZhbHVlcCkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIsIDMpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChnZXRzdWJvcHQsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqb3B0aW9ucCwgY2hhciAqY29uc3QgKnRva2VucywgY2hhciAqKnZhbHVlcCkpOworX0dMX0NYWEFMSUFTV0FSTiAoZ2V0c3Vib3B0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZ2V0c3Vib3B0CisjIGlmIEhBVkVfUkFXX0RFQ0xfR0VUU1VCT1BUCitfR0xfV0FSTl9PTl9VU0UgKGdldHN1Ym9wdCwgImdldHN1Ym9wdCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZ2V0c3Vib3B0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisvKiBDaGFuZ2UgdGhlIG93bmVyc2hpcCBhbmQgYWNjZXNzIHBlcm1pc3Npb24gb2YgdGhlIHNsYXZlIHNpZGUgb2YgdGhlCisgICBwc2V1ZG8tdGVybWluYWwgd2hvc2UgbWFzdGVyIHNpZGUgaXMgc3BlY2lmaWVkIGJ5IEZELiAgKi8KKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGdyYW50cHQsIGludCwgKGludCBmZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZ3JhbnRwdCwgaW50LCAoaW50IGZkKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChncmFudHB0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZ3JhbnRwdAorIyBpZiBIQVZFX1JBV19ERUNMX0dSQU5UUFQKK19HTF9XQVJOX09OX1VTRSAoZ3JhbnRwdCwgImdyYW50cHQgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZ3JhbnRwdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBJZiBfR0xfVVNFX1NURExJQl9BTExPQyBpcyBub256ZXJvLCB0aGUgaW5jbHVkaW5nIG1vZHVsZSBkb2VzIG5vdAorICAgcmVseSBvbiBHTlUgb3IgUE9TSVggc2VtYW50aWNzIGZvciBtYWxsb2MgYW5kIHJlYWxsb2MgKGZvciBleGFtcGxlLAorICAgYnkgbmV2ZXIgc3BlY2lmeWluZyBhIHplcm8gc2l6ZSksIHNvIGl0IGRvZXMgbm90IG5lZWQgbWFsbG9jIG9yCisgICByZWFsbG9jIHRvIGJlIHJlZGVmaW5lZC4gICovCisjaWYgMQorIyBpZiAwCisjICBpZiAhKChkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkgXAorICAgICAgICB8fCBfR0xfVVNFX1NURExJQl9BTExPQykKKyMgICB1bmRlZiBtYWxsb2MKKyMgICBkZWZpbmUgbWFsbG9jIHJwbF9tYWxsb2MKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChtYWxsb2MsIHZvaWQgKiwgKHNpemVfdCBzaXplKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChtYWxsb2MsIHZvaWQgKiwgKHNpemVfdCBzaXplKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKG1hbGxvYywgdm9pZCAqLCAoc2l6ZV90IHNpemUpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG1hbGxvYyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLICYmICFfR0xfVVNFX1NURExJQl9BTExPQworIyB1bmRlZiBtYWxsb2MKKy8qIEFzc3VtZSBtYWxsb2MgaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAobWFsbG9jLCAibWFsbG9jIGlzIG5vdCBQT1NJWCBjb21wbGlhbnQgZXZlcnl3aGVyZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG1hbGxvYy1wb3NpeCBmb3IgcG9ydGFiaWxpdHkiKTsKKyNlbmRpZgorCisvKiBDb252ZXJ0IGEgbXVsdGlieXRlIGNoYXJhY3RlciB0byBhIHdpZGUgY2hhcmFjdGVyLiAgKi8KKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbWJ0b3djCisjICAgZGVmaW5lIG1idG93YyBycGxfbWJ0b3djCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobWJ0b3djLCBpbnQsICh3Y2hhcl90ICpwd2MsIGNvbnN0IGNoYXIgKnMsIHNpemVfdCBuKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChtYnRvd2MsIGludCwgKHdjaGFyX3QgKnB3YywgY29uc3QgY2hhciAqcywgc2l6ZV90IG4pKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAobWJ0b3djLCBpbnQsICh3Y2hhcl90ICpwd2MsIGNvbnN0IGNoYXIgKnMsIHNpemVfdCBuKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChtYnRvd2MpOworI2VuZGlmCisKKyNpZiAwCisvKiBDcmVhdGUgYSB1bmlxdWUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmcm9tIFRFTVBMQVRFLgorICAgVGhlIGxhc3Qgc2l4IGNoYXJhY3RlcnMgb2YgVEVNUExBVEUgbXVzdCBiZSAiWFhYWFhYIjsKKyAgIHRoZXkgYXJlIHJlcGxhY2VkIHdpdGggYSBzdHJpbmcgdGhhdCBtYWtlcyB0aGUgZGlyZWN0b3J5IG5hbWUgdW5pcXVlLgorICAgUmV0dXJucyBURU1QTEFURSwgb3IgYSBudWxsIHBvaW50ZXIgaWYgaXQgY2Fubm90IGdldCBhIHVuaXF1ZSBuYW1lLgorICAgVGhlIGRpcmVjdG9yeSBpcyBjcmVhdGVkIG1vZGUgNzAwLiAgKi8KKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKG1rZHRlbXAsIGNoYXIgKiwgKGNoYXIgKiAvKnRlbXBsYXRlKi8pIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChta2R0ZW1wLCBjaGFyICosIChjaGFyICogLyp0ZW1wbGF0ZSovKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChta2R0ZW1wKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbWtkdGVtcAorIyBpZiBIQVZFX1JBV19ERUNMX01LRFRFTVAKK19HTF9XQVJOX09OX1VTRSAobWtkdGVtcCwgIm1rZHRlbXAgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG1rZHRlbXAgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKy8qIENyZWF0ZSBhIHVuaXF1ZSB0ZW1wb3JhcnkgZmlsZSBmcm9tIFRFTVBMQVRFLgorICAgVGhlIGxhc3Qgc2l4IGNoYXJhY3RlcnMgb2YgVEVNUExBVEUgbXVzdCBiZSAiWFhYWFhYIjsKKyAgIHRoZXkgYXJlIHJlcGxhY2VkIHdpdGggYSBzdHJpbmcgdGhhdCBtYWtlcyB0aGUgZmlsZSBuYW1lIHVuaXF1ZS4KKyAgIFRoZSBmbGFncyBhcmUgYSBiaXRtYXNrLCBwb3NzaWJseSBpbmNsdWRpbmcgT19DTE9FWEVDIChkZWZpbmVkIGluIDxmY250bC5oPikKKyAgIGFuZCBPX1RFWFQsIE9fQklOQVJZIChkZWZpbmVkIGluICJiaW5hcnktaW8uaCIpLgorICAgVGhlIGZpbGUgaXMgdGhlbiBjcmVhdGVkLCB3aXRoIHRoZSBzcGVjaWZpZWQgZmxhZ3MsIGVuc3VyaW5nIGl0IGRpZG4ndCBleGlzdAorICAgYmVmb3JlLgorICAgVGhlIGZpbGUgaXMgY3JlYXRlZCByZWFkLXdyaXRlIChtYXNrIGF0IGxlYXN0IDA2MDAgJiB+dW1hc2spLCBidXQgaXQgbWF5IGJlCisgICB3b3JsZC1yZWFkYWJsZSBhbmQgd29ybGQtd3JpdGFibGUgKG1hc2sgMDY2NiAmIH51bWFzayksIGRlcGVuZGluZyBvbiB0aGUKKyAgIGltcGxlbWVudGF0aW9uLgorICAgUmV0dXJucyB0aGUgb3BlbiBmaWxlIGRlc2NyaXB0b3IgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIC0xIGFuZCBlcnJubworICAgc2V0LiAgKi8KKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKG1rb3N0ZW1wLCBpbnQsIChjaGFyICogLyp0ZW1wbGF0ZSovLCBpbnQgLypmbGFncyovKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKG1rb3N0ZW1wLCBpbnQsIChjaGFyICogLyp0ZW1wbGF0ZSovLCBpbnQgLypmbGFncyovKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChta29zdGVtcCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG1rb3N0ZW1wCisjIGlmIEhBVkVfUkFXX0RFQ0xfTUtPU1RFTVAKK19HTF9XQVJOX09OX1VTRSAobWtvc3RlbXAsICJta29zdGVtcCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWtvc3RlbXAgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKy8qIENyZWF0ZSBhIHVuaXF1ZSB0ZW1wb3JhcnkgZmlsZSBmcm9tIFRFTVBMQVRFLgorICAgVGhlIGxhc3Qgc2l4IGNoYXJhY3RlcnMgb2YgVEVNUExBVEUgYmVmb3JlIGEgc3VmZml4IG9mIGxlbmd0aAorICAgU1VGRklYTEVOIG11c3QgYmUgIlhYWFhYWCI7CisgICB0aGV5IGFyZSByZXBsYWNlZCB3aXRoIGEgc3RyaW5nIHRoYXQgbWFrZXMgdGhlIGZpbGUgbmFtZSB1bmlxdWUuCisgICBUaGUgZmxhZ3MgYXJlIGEgYml0bWFzaywgcG9zc2libHkgaW5jbHVkaW5nIE9fQ0xPRVhFQyAoZGVmaW5lZCBpbiA8ZmNudGwuaD4pCisgICBhbmQgT19URVhULCBPX0JJTkFSWSAoZGVmaW5lZCBpbiAiYmluYXJ5LWlvLmgiKS4KKyAgIFRoZSBmaWxlIGlzIHRoZW4gY3JlYXRlZCwgd2l0aCB0aGUgc3BlY2lmaWVkIGZsYWdzLCBlbnN1cmluZyBpdCBkaWRuJ3QgZXhpc3QKKyAgIGJlZm9yZS4KKyAgIFRoZSBmaWxlIGlzIGNyZWF0ZWQgcmVhZC13cml0ZSAobWFzayBhdCBsZWFzdCAwNjAwICYgfnVtYXNrKSwgYnV0IGl0IG1heSBiZQorICAgd29ybGQtcmVhZGFibGUgYW5kIHdvcmxkLXdyaXRhYmxlIChtYXNrIDA2NjYgJiB+dW1hc2spLCBkZXBlbmRpbmcgb24gdGhlCisgICBpbXBsZW1lbnRhdGlvbi4KKyAgIFJldHVybnMgdGhlIG9wZW4gZmlsZSBkZXNjcmlwdG9yIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSAtMSBhbmQgZXJybm8KKyAgIHNldC4gICovCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChta29zdGVtcHMsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICogLyp0ZW1wbGF0ZSovLCBpbnQgLypzdWZmaXhsZW4qLywgaW50IC8qZmxhZ3MqLykKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChta29zdGVtcHMsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICogLyp0ZW1wbGF0ZSovLCBpbnQgLypzdWZmaXhsZW4qLywgaW50IC8qZmxhZ3MqLykpOworX0dMX0NYWEFMSUFTV0FSTiAobWtvc3RlbXBzKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbWtvc3RlbXBzCisjIGlmIEhBVkVfUkFXX0RFQ0xfTUtPU1RFTVBTCitfR0xfV0FSTl9PTl9VU0UgKG1rb3N0ZW1wcywgIm1rb3N0ZW1wcyBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWtvc3RlbXBzIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisvKiBDcmVhdGUgYSB1bmlxdWUgdGVtcG9yYXJ5IGZpbGUgZnJvbSBURU1QTEFURS4KKyAgIFRoZSBsYXN0IHNpeCBjaGFyYWN0ZXJzIG9mIFRFTVBMQVRFIG11c3QgYmUgIlhYWFhYWCI7CisgICB0aGV5IGFyZSByZXBsYWNlZCB3aXRoIGEgc3RyaW5nIHRoYXQgbWFrZXMgdGhlIGZpbGUgbmFtZSB1bmlxdWUuCisgICBUaGUgZmlsZSBpcyB0aGVuIGNyZWF0ZWQsIGVuc3VyaW5nIGl0IGRpZG4ndCBleGlzdCBiZWZvcmUuCisgICBUaGUgZmlsZSBpcyBjcmVhdGVkIHJlYWQtd3JpdGUgKG1hc2sgYXQgbGVhc3QgMDYwMCAmIH51bWFzayksIGJ1dCBpdCBtYXkgYmUKKyAgIHdvcmxkLXJlYWRhYmxlIGFuZCB3b3JsZC13cml0YWJsZSAobWFzayAwNjY2ICYgfnVtYXNrKSwgZGVwZW5kaW5nIG9uIHRoZQorICAgaW1wbGVtZW50YXRpb24uCisgICBSZXR1cm5zIHRoZSBvcGVuIGZpbGUgZGVzY3JpcHRvciBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgLTEgYW5kIGVycm5vCisgICBzZXQuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBta3N0ZW1wIHJwbF9ta3N0ZW1wCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobWtzdGVtcCwgaW50LCAoY2hhciAqIC8qdGVtcGxhdGUqLykgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKG1rc3RlbXAsIGludCwgKGNoYXIgKiAvKnRlbXBsYXRlKi8pKTsKKyMgZWxzZQorIyAgaWYgISAxCitfR0xfRlVOQ0RFQ0xfU1lTIChta3N0ZW1wLCBpbnQsIChjaGFyICogLyp0ZW1wbGF0ZSovKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKG1rc3RlbXAsIGludCwgKGNoYXIgKiAvKnRlbXBsYXRlKi8pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG1rc3RlbXApOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBta3N0ZW1wCisjIGlmIEhBVkVfUkFXX0RFQ0xfTUtTVEVNUAorX0dMX1dBUk5fT05fVVNFIChta3N0ZW1wLCAibWtzdGVtcCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWtzdGVtcCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorLyogQ3JlYXRlIGEgdW5pcXVlIHRlbXBvcmFyeSBmaWxlIGZyb20gVEVNUExBVEUuCisgICBUaGUgbGFzdCBzaXggY2hhcmFjdGVycyBvZiBURU1QTEFURSBwcmlvciB0byBhIHN1ZmZpeCBvZiBsZW5ndGgKKyAgIFNVRkZJWExFTiBtdXN0IGJlICJYWFhYWFgiOworICAgdGhleSBhcmUgcmVwbGFjZWQgd2l0aCBhIHN0cmluZyB0aGF0IG1ha2VzIHRoZSBmaWxlIG5hbWUgdW5pcXVlLgorICAgVGhlIGZpbGUgaXMgdGhlbiBjcmVhdGVkLCBlbnN1cmluZyBpdCBkaWRuJ3QgZXhpc3QgYmVmb3JlLgorICAgVGhlIGZpbGUgaXMgY3JlYXRlZCByZWFkLXdyaXRlIChtYXNrIGF0IGxlYXN0IDA2MDAgJiB+dW1hc2spLCBidXQgaXQgbWF5IGJlCisgICB3b3JsZC1yZWFkYWJsZSBhbmQgd29ybGQtd3JpdGFibGUgKG1hc2sgMDY2NiAmIH51bWFzayksIGRlcGVuZGluZyBvbiB0aGUKKyAgIGltcGxlbWVudGF0aW9uLgorICAgUmV0dXJucyB0aGUgb3BlbiBmaWxlIGRlc2NyaXB0b3IgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIC0xIGFuZCBlcnJubworICAgc2V0LiAgKi8KKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKG1rc3RlbXBzLCBpbnQsIChjaGFyICogLyp0ZW1wbGF0ZSovLCBpbnQgLypzdWZmaXhsZW4qLykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChta3N0ZW1wcywgaW50LCAoY2hhciAqIC8qdGVtcGxhdGUqLywgaW50IC8qc3VmZml4bGVuKi8pKTsKK19HTF9DWFhBTElBU1dBUk4gKG1rc3RlbXBzKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbWtzdGVtcHMKKyMgaWYgSEFWRV9SQVdfREVDTF9NS1NURU1QUworX0dMX1dBUk5fT05fVVNFIChta3N0ZW1wcywgIm1rc3RlbXBzIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBta3N0ZW1wcyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorLyogUmV0dXJuIGFuIEZEIG9wZW4gdG8gdGhlIG1hc3RlciBzaWRlIG9mIGEgcHNldWRvLXRlcm1pbmFsLiAgRmxhZ3Mgc2hvdWxkCisgICBpbmNsdWRlIE9fUkRXUiwgYW5kIG1heSBhbHNvIGluY2x1ZGUgT19OT0NUVFkuICAqLworIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocG9zaXhfb3BlbnB0LCBpbnQsIChpbnQgZmxhZ3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHBvc2l4X29wZW5wdCwgaW50LCAoaW50IGZsYWdzKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChwb3NpeF9vcGVucHQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwb3NpeF9vcGVucHQKKyMgaWYgSEFWRV9SQVdfREVDTF9QT1NJWF9PUEVOUFQKK19HTF9XQVJOX09OX1VTRSAocG9zaXhfb3BlbnB0LCAicG9zaXhfb3BlbnB0IGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHBvc2l4X29wZW5wdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorLyogUmV0dXJuIHRoZSBwYXRobmFtZSBvZiB0aGUgcHNldWRvLXRlcm1pbmFsIHNsYXZlIGFzc29jaWF0ZWQgd2l0aAorICAgdGhlIG1hc3RlciBGRCBpcyBvcGVuIG9uLCBvciBOVUxMIG9uIGVycm9ycy4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgcHRzbmFtZQorIyAgIGRlZmluZSBwdHNuYW1lIHJwbF9wdHNuYW1lCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocHRzbmFtZSwgY2hhciAqLCAoaW50IGZkKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwdHNuYW1lLCBjaGFyICosIChpbnQgZmQpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHB0c25hbWUsIGNoYXIgKiwgKGludCBmZCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHB0c25hbWUsIGNoYXIgKiwgKGludCBmZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAocHRzbmFtZSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHB0c25hbWUKKyMgaWYgSEFWRV9SQVdfREVDTF9QVFNOQU1FCitfR0xfV0FSTl9PTl9VU0UgKHB0c25hbWUsICJwdHNuYW1lIGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHB0c25hbWUgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKy8qIFNldCB0aGUgcGF0aG5hbWUgb2YgdGhlIHBzZXVkby10ZXJtaW5hbCBzbGF2ZSBhc3NvY2lhdGVkIHdpdGgKKyAgIHRoZSBtYXN0ZXIgRkQgaXMgb3BlbiBvbiBhbmQgcmV0dXJuIDAsIG9yIHNldCBlcnJubyBhbmQgcmV0dXJuCisgICBub24temVybyBvbiBlcnJvcnMuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHB0c25hbWVfcgorIyAgIGRlZmluZSBwdHNuYW1lX3IgcnBsX3B0c25hbWVfcgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHB0c25hbWVfciwgaW50LCAoaW50IGZkLCBjaGFyICpidWYsIHNpemVfdCBsZW4pKTsKK19HTF9DWFhBTElBU19SUEwgKHB0c25hbWVfciwgaW50LCAoaW50IGZkLCBjaGFyICpidWYsIHNpemVfdCBsZW4pKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHB0c25hbWVfciwgaW50LCAoaW50IGZkLCBjaGFyICpidWYsIHNpemVfdCBsZW4pKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwdHNuYW1lX3IsIGludCwgKGludCBmZCwgY2hhciAqYnVmLCBzaXplX3QgbGVuKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwdHNuYW1lX3IpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwdHNuYW1lX3IKKyMgaWYgSEFWRV9SQVdfREVDTF9QVFNOQU1FX1IKK19HTF9XQVJOX09OX1VTRSAocHRzbmFtZV9yLCAicHRzbmFtZV9yIGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHB0c25hbWVfciBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHB1dGVudgorIyAgIGRlZmluZSBwdXRlbnYgcnBsX3B1dGVudgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHB1dGVudiwgaW50LCAoY2hhciAqc3RyaW5nKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocHV0ZW52LCBpbnQsIChjaGFyICpzdHJpbmcpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAocHV0ZW52LCBpbnQsIChjaGFyICpzdHJpbmcpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHB1dGVudik7CisjZW5kaWYKKworCisjaWYgMAorIyBpZiAhMQorIyAgaWZuZGVmIFJBTkRfTUFYCisjICAgZGVmaW5lIFJBTkRfTUFYIDIxNDc0ODM2NDcKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocmFuZG9tLCBsb25nLCAodm9pZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocmFuZG9tLCBsb25nLCAodm9pZCkpOworX0dMX0NYWEFMSUFTV0FSTiAocmFuZG9tKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcmFuZG9tCisjIGlmIEhBVkVfUkFXX0RFQ0xfUkFORE9NCitfR0xfV0FSTl9PTl9VU0UgKHJhbmRvbSwgInJhbmRvbSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmFuZG9tIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChzcmFuZG9tLCB2b2lkLCAodW5zaWduZWQgaW50IHNlZWQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHNyYW5kb20sIHZvaWQsICh1bnNpZ25lZCBpbnQgc2VlZCkpOworX0dMX0NYWEFMSUFTV0FSTiAoc3JhbmRvbSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHNyYW5kb20KKyMgaWYgSEFWRV9SQVdfREVDTF9TUkFORE9NCitfR0xfV0FSTl9PTl9VU0UgKHNyYW5kb20sICJzcmFuZG9tIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSByYW5kb20gZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGluaXRzdGF0ZSwgY2hhciAqLAorICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCBzZWVkLCBjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChpbml0c3RhdGUsIGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQgc2VlZCwgY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUpKTsKK19HTF9DWFhBTElBU1dBUk4gKGluaXRzdGF0ZSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGluaXRzdGF0ZQorIyBpZiBIQVZFX1JBV19ERUNMX0lOSVRTVEFURV9SCitfR0xfV0FSTl9PTl9VU0UgKGluaXRzdGF0ZSwgImluaXRzdGF0ZSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmFuZG9tIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChzZXRzdGF0ZSwgY2hhciAqLCAoY2hhciAqYXJnX3N0YXRlKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc2V0c3RhdGUsIGNoYXIgKiwgKGNoYXIgKmFyZ19zdGF0ZSkpOworX0dMX0NYWEFMSUFTV0FSTiAoc2V0c3RhdGUpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzZXRzdGF0ZQorIyBpZiBIQVZFX1JBV19ERUNMX1NFVFNUQVRFX1IKK19HTF9XQVJOX09OX1VTRSAoc2V0c3RhdGUsICJzZXRzdGF0ZSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmFuZG9tIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiByYW5kb21fcgorIyAgIGRlZmluZSByYW5kb21fciBycGxfcmFuZG9tX3IKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChyYW5kb21fciwgaW50LCAoc3RydWN0IHJhbmRvbV9kYXRhICpidWYsIGludDMyX3QgKnJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChyYW5kb21fciwgaW50LCAoc3RydWN0IHJhbmRvbV9kYXRhICpidWYsIGludDMyX3QgKnJlc3VsdCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocmFuZG9tX3IsIGludCwgKHN0cnVjdCByYW5kb21fZGF0YSAqYnVmLCBpbnQzMl90ICpyZXN1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHJhbmRvbV9yLCBpbnQsIChzdHJ1Y3QgcmFuZG9tX2RhdGEgKmJ1ZiwgaW50MzJfdCAqcmVzdWx0KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChyYW5kb21fcik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHJhbmRvbV9yCisjIGlmIEhBVkVfUkFXX0RFQ0xfUkFORE9NX1IKK19HTF9XQVJOX09OX1VTRSAocmFuZG9tX3IsICJyYW5kb21fciBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmFuZG9tX3IgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBzcmFuZG9tX3IKKyMgICBkZWZpbmUgc3JhbmRvbV9yIHJwbF9zcmFuZG9tX3IKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChzcmFuZG9tX3IsIGludCwKKyAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQgc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpyYW5kX3N0YXRlKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHNyYW5kb21fciwgaW50LAorICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCBzZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKnJhbmRfc3RhdGUpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHNyYW5kb21fciwgaW50LAorICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCBzZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKnJhbmRfc3RhdGUpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHNyYW5kb21fciwgaW50LAorICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCBzZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKnJhbmRfc3RhdGUpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHNyYW5kb21fcik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHNyYW5kb21fcgorIyBpZiBIQVZFX1JBV19ERUNMX1NSQU5ET01fUgorX0dMX1dBUk5fT05fVVNFIChzcmFuZG9tX3IsICJzcmFuZG9tX3IgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHJhbmRvbV9yIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgaW5pdHN0YXRlX3IKKyMgICBkZWZpbmUgaW5pdHN0YXRlX3IgcnBsX2luaXRzdGF0ZV9yCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoaW5pdHN0YXRlX3IsIGludCwKKyAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQgc2VlZCwgY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsCisgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpyYW5kX3N0YXRlKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMiwgNCkpKTsKK19HTF9DWFhBTElBU19SUEwgKGluaXRzdGF0ZV9yLCBpbnQsCisgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50IHNlZWQsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLAorICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqcmFuZF9zdGF0ZSkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoaW5pdHN0YXRlX3IsIGludCwKKyAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQgc2VlZCwgY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsCisgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpyYW5kX3N0YXRlKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMiwgNCkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChpbml0c3RhdGVfciwgaW50LAorICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCBzZWVkLCBjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKnJhbmRfc3RhdGUpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGluaXRzdGF0ZV9yKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgaW5pdHN0YXRlX3IKKyMgaWYgSEFWRV9SQVdfREVDTF9JTklUU1RBVEVfUgorX0dMX1dBUk5fT05fVVNFIChpbml0c3RhdGVfciwgImluaXRzdGF0ZV9yIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSByYW5kb21fciBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHNldHN0YXRlX3IKKyMgICBkZWZpbmUgc2V0c3RhdGVfciBycGxfc2V0c3RhdGVfcgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHNldHN0YXRlX3IsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICphcmdfc3RhdGUsIHN0cnVjdCByYW5kb21fZGF0YSAqcmFuZF9zdGF0ZSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzZXRzdGF0ZV9yLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY2hhciAqYXJnX3N0YXRlLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKnJhbmRfc3RhdGUpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHNldHN0YXRlX3IsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICphcmdfc3RhdGUsIHN0cnVjdCByYW5kb21fZGF0YSAqcmFuZF9zdGF0ZSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc2V0c3RhdGVfciwgaW50LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKmFyZ19zdGF0ZSwgc3RydWN0IHJhbmRvbV9kYXRhICpyYW5kX3N0YXRlKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzZXRzdGF0ZV9yKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc2V0c3RhdGVfcgorIyBpZiBIQVZFX1JBV19ERUNMX1NFVFNUQVRFX1IKK19HTF9XQVJOX09OX1VTRSAoc2V0c3RhdGVfciwgInNldHN0YXRlX3IgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHJhbmRvbV9yIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDEKKyMgaWYgMAorIyAgaWYgISgoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpIFwKKyAgICAgICAgfHwgX0dMX1VTRV9TVERMSUJfQUxMT0MpCisjICAgdW5kZWYgcmVhbGxvYworIyAgIGRlZmluZSByZWFsbG9jIHJwbF9yZWFsbG9jCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocmVhbGxvYywgdm9pZCAqLCAodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkpOworX0dMX0NYWEFMSUFTX1JQTCAocmVhbGxvYywgdm9pZCAqLCAodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChyZWFsbG9jLCB2b2lkICosICh2b2lkICpwdHIsIHNpemVfdCBzaXplKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChyZWFsbG9jKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sgJiYgIV9HTF9VU0VfU1RETElCX0FMTE9DCisjIHVuZGVmIHJlYWxsb2MKKy8qIEFzc3VtZSByZWFsbG9jIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKHJlYWxsb2MsICJyZWFsbG9jIGlzIG5vdCBQT1NJWCBjb21wbGlhbnQgZXZlcnl3aGVyZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHJlYWxsb2MtcG9zaXggZm9yIHBvcnRhYmlsaXR5Iik7CisjZW5kaWYKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgcmVhbHBhdGggcnBsX3JlYWxwYXRoCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAocmVhbHBhdGgsIGNoYXIgKiwgKGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnJlc29sdmVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHJlYWxwYXRoLCBjaGFyICosIChjb25zdCBjaGFyICpuYW1lLCBjaGFyICpyZXNvbHZlZCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocmVhbHBhdGgsIGNoYXIgKiwgKGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnJlc29sdmVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChyZWFscGF0aCwgY2hhciAqLCAoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqcmVzb2x2ZWQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHJlYWxwYXRoKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcmVhbHBhdGgKKyMgaWYgSEFWRV9SQVdfREVDTF9SRUFMUEFUSAorX0dMX1dBUk5fT05fVVNFIChyZWFscGF0aCwgInJlYWxwYXRoIGlzIHVucG9ydGFibGUgLSB1c2UgZ251bGliIG1vZHVsZSAiCisgICAgICAgICAgICAgICAgICJjYW5vbmljYWxpemUgb3IgY2Fub25pY2FsaXplLWxncGwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKy8qIFRlc3QgYSB1c2VyIHJlc3BvbnNlIHRvIGEgcXVlc3Rpb24uCisgICBSZXR1cm4gMSBpZiBpdCBpcyBhZmZpcm1hdGl2ZSwgMCBpZiBpdCBpcyBuZWdhdGl2ZSwgb3IgLTEgaWYgbm90IGNsZWFyLiAgKi8KKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHJwbWF0Y2gsIGludCwgKGNvbnN0IGNoYXIgKnJlc3BvbnNlKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocnBtYXRjaCwgaW50LCAoY29uc3QgY2hhciAqcmVzcG9uc2UpKTsKK19HTF9DWFhBTElBU1dBUk4gKHJwbWF0Y2gpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBycG1hdGNoCisjIGlmIEhBVkVfUkFXX0RFQ0xfUlBNQVRDSAorX0dMX1dBUk5fT05fVVNFIChycG1hdGNoLCAicnBtYXRjaCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcnBtYXRjaCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorLyogU2V0IE5BTUUgdG8gVkFMVUUgaW4gdGhlIGVudmlyb25tZW50LgorICAgSWYgUkVQTEFDRSBpcyBub256ZXJvLCBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgdmFsdWUuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHNldGVudgorIyAgIGRlZmluZSBzZXRlbnYgcnBsX3NldGVudgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHNldGVudiwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgcmVwbGFjZSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzZXRlbnYsIGludCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwgaW50IHJlcGxhY2UpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHNldGVudiwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgcmVwbGFjZSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc2V0ZW52LCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsIGludCByZXBsYWNlKSk7CisjIGVuZGlmCisjIGlmICEoMCAmJiAhMSkKK19HTF9DWFhBTElBU1dBUk4gKHNldGVudik7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHNldGVudgorIyBpZiBIQVZFX1JBV19ERUNMX1NFVEVOVgorX0dMX1dBUk5fT05fVVNFIChzZXRlbnYsICJzZXRlbnYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHNldGVudiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIC8qIFBhcnNlIGEgZG91YmxlIGZyb20gU1RSSU5HLCB1cGRhdGluZyBFTkRQIGlmIGFwcHJvcHJpYXRlLiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgc3RydG9kIHJwbF9zdHJ0b2QKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChzdHJ0b2QsIGRvdWJsZSwgKGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKmVuZHApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHN0cnRvZCwgZG91YmxlLCAoY29uc3QgY2hhciAqc3RyLCBjaGFyICoqZW5kcCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoc3RydG9kLCBkb3VibGUsIChjb25zdCBjaGFyICpzdHIsIGNoYXIgKiplbmRwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc3RydG9kLCBkb3VibGUsIChjb25zdCBjaGFyICpzdHIsIGNoYXIgKiplbmRwKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzdHJ0b2QpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJ0b2QKKyMgaWYgSEFWRV9SQVdfREVDTF9TVFJUT0QKK19HTF9XQVJOX09OX1VTRSAoc3RydG9kLCAic3RydG9kIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHJ0b2QgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKy8qIFBhcnNlIGEgc2lnbmVkIGludGVnZXIgd2hvc2UgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBzdGFydHMgYXQgU1RSSU5HLgorICAgVGhlIGludGVnZXIgaXMgZXhwZWN0ZWQgdG8gYmUgaW4gYmFzZSBCQVNFICgyIDw9IEJBU0UgPD0gMzYpOyBpZiBCQVNFID09IDAsCisgICBpdCBtYXkgYmUgZGVjaW1hbCBvciBvY3RhbCAod2l0aCBwcmVmaXggIjAiKSBvciBoZXhhZGVjaW1hbCAod2l0aCBwcmVmaXgKKyAgICIweCIpLgorICAgSWYgRU5EUFRSIGlzIG5vdCBOVUxMLCB0aGUgYWRkcmVzcyBvZiB0aGUgZmlyc3QgYnl0ZSBhZnRlciB0aGUgaW50ZWdlciBpcworICAgc3RvcmVkIGluICpFTkRQVFIuCisgICBVcG9uIG92ZXJmbG93LCB0aGUgcmV0dXJuIHZhbHVlIGlzIExMT05HX01BWCBvciBMTE9OR19NSU4sIGFuZCBlcnJubyBpcyBzZXQKKyAgIHRvIEVSQU5HRS4gICovCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChzdHJ0b2xsLCBsb25nIGxvbmcsCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqc3RyaW5nLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzdHJ0b2xsLCBsb25nIGxvbmcsCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqc3RyaW5nLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkpOworX0dMX0NYWEFMSUFTV0FSTiAoc3RydG9sbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHN0cnRvbGwKKyMgaWYgSEFWRV9SQVdfREVDTF9TVFJUT0xMCitfR0xfV0FSTl9PTl9VU0UgKHN0cnRvbGwsICJzdHJ0b2xsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHJ0b2xsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisvKiBQYXJzZSBhbiB1bnNpZ25lZCBpbnRlZ2VyIHdob3NlIHRleHR1YWwgcmVwcmVzZW50YXRpb24gc3RhcnRzIGF0IFNUUklORy4KKyAgIFRoZSBpbnRlZ2VyIGlzIGV4cGVjdGVkIHRvIGJlIGluIGJhc2UgQkFTRSAoMiA8PSBCQVNFIDw9IDM2KTsgaWYgQkFTRSA9PSAwLAorICAgaXQgbWF5IGJlIGRlY2ltYWwgb3Igb2N0YWwgKHdpdGggcHJlZml4ICIwIikgb3IgaGV4YWRlY2ltYWwgKHdpdGggcHJlZml4CisgICAiMHgiKS4KKyAgIElmIEVORFBUUiBpcyBub3QgTlVMTCwgdGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGJ5dGUgYWZ0ZXIgdGhlIGludGVnZXIgaXMKKyAgIHN0b3JlZCBpbiAqRU5EUFRSLgorICAgVXBvbiBvdmVyZmxvdywgdGhlIHJldHVybiB2YWx1ZSBpcyBVTExPTkdfTUFYLCBhbmQgZXJybm8gaXMgc2V0IHRvCisgICBFUkFOR0UuICAqLworIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoc3RydG91bGwsIHVuc2lnbmVkIGxvbmcgbG9uZywKKyAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpzdHJpbmcsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHN0cnRvdWxsLCB1bnNpZ25lZCBsb25nIGxvbmcsCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqc3RyaW5nLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkpOworX0dMX0NYWEFMSUFTV0FSTiAoc3RydG91bGwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJ0b3VsbAorIyBpZiBIQVZFX1JBV19ERUNMX1NUUlRPVUxMCitfR0xfV0FSTl9PTl9VU0UgKHN0cnRvdWxsLCAic3RydG91bGwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHN0cnRvdWxsIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisvKiBVbmxvY2sgdGhlIHNsYXZlIHNpZGUgb2YgdGhlIHBzZXVkby10ZXJtaW5hbCB3aG9zZSBtYXN0ZXIgc2lkZSBpcyBzcGVjaWZpZWQKKyAgIGJ5IEZELCBzbyB0aGF0IGl0IGNhbiBiZSBvcGVuZWQuICAqLworIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAodW5sb2NrcHQsIGludCwgKGludCBmZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAodW5sb2NrcHQsIGludCwgKGludCBmZCkpOworX0dMX0NYWEFMSUFTV0FSTiAodW5sb2NrcHQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB1bmxvY2twdAorIyBpZiBIQVZFX1JBV19ERUNMX1VOTE9DS1BUCitfR0xfV0FSTl9PTl9VU0UgKHVubG9ja3B0LCAidW5sb2NrcHQgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgdW5sb2NrcHQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDEKKy8qIFJlbW92ZSB0aGUgdmFyaWFibGUgTkFNRSBmcm9tIHRoZSBlbnZpcm9ubWVudC4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgdW5zZXRlbnYKKyMgICBkZWZpbmUgdW5zZXRlbnYgcnBsX3Vuc2V0ZW52CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAodW5zZXRlbnYsIGludCwgKGNvbnN0IGNoYXIgKm5hbWUpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMICh1bnNldGVudiwgaW50LCAoY29uc3QgY2hhciAqbmFtZSkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAodW5zZXRlbnYsIGludCwgKGNvbnN0IGNoYXIgKm5hbWUpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAodW5zZXRlbnYsIGludCwgKGNvbnN0IGNoYXIgKm5hbWUpKTsKKyMgZW5kaWYKKyMgaWYgISgwICYmICExKQorX0dMX0NYWEFMSUFTV0FSTiAodW5zZXRlbnYpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB1bnNldGVudgorIyBpZiBIQVZFX1JBV19ERUNMX1VOU0VURU5WCitfR0xfV0FSTl9PTl9VU0UgKHVuc2V0ZW52LCAidW5zZXRlbnYgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHVuc2V0ZW52IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIENvbnZlcnQgYSB3aWRlIGNoYXJhY3RlciB0byBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIuICAqLworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiB3Y3RvbWIKKyMgICBkZWZpbmUgd2N0b21iIHJwbF93Y3RvbWIKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh3Y3RvbWIsIGludCwgKGNoYXIgKnMsIHdjaGFyX3Qgd2MpKTsKK19HTF9DWFhBTElBU19SUEwgKHdjdG9tYiwgaW50LCAoY2hhciAqcywgd2NoYXJfdCB3YykpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3RvbWIsIGludCwgKGNoYXIgKnMsIHdjaGFyX3Qgd2MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHdjdG9tYik7CisjZW5kaWYKKworCisjZW5kaWYgLyogX0dMX1NURExJQl9IICovCisjZW5kaWYgLyogX0dMX1NURExJQl9IICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpbnV4LWxpYi9zdHJpbmcuaCBiL2xpbnV4LWxpYi9zdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjg2OGVkCi0tLSAvZGV2L251bGwKKysrIGIvbGludXgtbGliL3N0cmluZy5oCkBAIC0wLDAgKzEsMTM0MSBAQAorLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLworLyogQSBHTlUtbGlrZSA8c3RyaW5nLmg+LgorCisgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NiwgMjAwMS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX0dMX1NUUklOR19ICisKKyNpZiBfX0dOVUNfXyA+PSAzCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisjZW5kaWYKKworCisvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisjaW5jbHVkZV9uZXh0IDxzdHJpbmcuaD4KKworI2lmbmRlZiBfR0xfU1RSSU5HX0gKKyNkZWZpbmUgX0dMX1NUUklOR19ICisKKy8qIE5ldEJTRCA1LjAgbWlzLWRlZmluZXMgTlVMTC4gICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8qIE1pckJTRCBkZWZpbmVzIG1ic2xlbiBhcyBhIG1hY3JvLiAgKi8KKyNpZiAwICYmIGRlZmluZWQgX19NaXJCU0RfXworIyBpbmNsdWRlIDx3Y2hhci5oPgorI2VuZGlmCisKKy8qIFRoZSBfX2F0dHJpYnV0ZV9fIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLgorICAgVGhlIGF0dHJpYnV0ZSBfX3B1cmVfXyB3YXMgYWRkZWQgaW4gZ2NjIDIuOTYuICAqLworI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NikKKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfUFVSRSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfUFVSRSAvKiBlbXB0eSAqLworI2VuZGlmCisKKy8qIE5ldEJTRCA1LjAgZGVjbGFyZXMgc3Ryc2lnbmFsIGluIDx1bmlzdGQuaD4sIG5vdCBpbiA8c3RyaW5nLmg+LiAgKi8KKy8qIEJ1dCBpbiBhbnkgY2FzZSBhdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9uIG9uIGdsaWJjIHN5c3RlbXMuICAqLworI2lmICgwIHx8IGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0spICYmIGRlZmluZWQgX19OZXRCU0RfXyBcCisgICAgJiYgISBkZWZpbmVkIF9fR0xJQkNfXworIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisvKiBUaGUgZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTCBldGMuIGFyZSBjb3BpZWQgaGVyZS4gICovCisjaWZuZGVmIF9HTF9DWFhERUZTX0gKKyNkZWZpbmUgX0dMX0NYWERFRlNfSAorCisvKiBUaGUgdGhyZWUgbW9zdCBmcmVxdWVudCB1c2UgY2FzZXMgb2YgdGhlc2UgbWFjcm9zIGFyZToKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgc3Vic3RpdHV0ZSBmb3IgYSBmdW5jdGlvbiB0aGF0IGlzIG1pc3Npbmcgb24gc29tZQorICAgICBwbGF0Zm9ybXMsIGJ1dCBpcyBkZWNsYXJlZCBhbmQgd29ya3MgZmluZSBvbiB0aGUgcGxhdGZvcm1zIG9uIHdoaWNoCisgICAgIGl0IGV4aXN0czoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmICFASEFWRV9GT09ACisgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIGFsbCBwbGF0Zm9ybXMsCisgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIHBsYXRmb3JtczoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorICAgICAgICMgICB1bmRlZiBmb28KKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworICAgICAgICMgZWxzZQorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIHNvbWUgcGxhdGZvcm1zCisgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIG9mIHRoZW0gYW5kCisgICAgIGlzIGFkZGl0aW9uYWxseSBlaXRoZXIgbWlzc2luZyBvciB1bmRlY2xhcmVkIG9uIHNvbWUgb3RoZXIgcGxhdGZvcm1zOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisgICAgICAgIyAgIHVuZGVmIGZvbworICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CisgICAgICAgIyBlbHNlCisgICAgICAgIyAgaWYgIUBIQVZFX0ZPT0AgICBvciAgIGlmICFASEFWRV9ERUNMX0ZPT0AKKyAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorKi8KKworLyogX0dMX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuICJDIgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4KKyNlbmRpZgorCisvKiBfR0xfRlVOQ0RFQ0xfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGRlY2xhcmVzIGEgcmVwbGFjZW1lbnQgZnVuY3Rpb24sIG5hbWVkIHJwbF9mdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9GVU5DREVDTF9SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICovCisjZGVmaW5lIF9HTF9GVU5DREVDTF9SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0ZVTkNERUNMX1JQTF8xIChycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKQorI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMXzEocnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9FWFRFUk5fQyByZXR0eXBlIHJwbF9mdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKworLyogX0dMX0ZVTkNERUNMX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBkZWNsYXJlcyB0aGUgc3lzdGVtIGZ1bmN0aW9uLCBuYW1lZCBmdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9GVU5DREVDTF9TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICovCisjZGVmaW5lIF9HTF9GVU5DREVDTF9TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0VYVEVSTl9DIHJldHR5cGUgZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisKKy8qIF9HTF9DWFhBTElBU19SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHJwbF9mdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFIGlzIGRlZmluZWQuCisgICBFeGFtcGxlOgorICAgICBfR0xfQ1hYQUxJQVNfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKyAqLworI2RlZmluZSBfR0xfQ1hYQUxJQVNfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycykKKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OnJwbF9mdW5jOyAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gcnBsX2Z1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQKKyAgIGRlY2xhcmF0aW9uLiAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IKKyAgIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpycGxfZnVuYyk7ICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHRoZSBzeXN0ZW0gcHJvdmlkZWQgZnVuY3Rpb24gZnVuYywgaWYgR05VTElCX05BTUVTUEFDRQorICAgaXMgZGVmaW5lZC4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9DWFhBTElBU19TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyAgLyogSWYgd2Ugd2VyZSB0byB3cml0ZQorICAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOworICAgICBsaWtlIGFib3ZlIGluIF9HTF9DWFhBTElBU19SUExfMSwgdGhlIGNvbXBpbGVyIGNvdWxkIG9wdGltaXplIGNhbGxzCisgICAgIGJldHRlciAocmVtb3ZlIGFuIGluZGlyZWN0aW9uIHRocm91Z2ggYSAnc3RhdGljJyBwb2ludGVyIHZhcmlhYmxlKSwKKyAgICAgYnV0IHRoZW4gdGhlIF9HTF9DWFhBTElBU1dBUk4gbWFjcm8gYmVsb3cgd291bGQgY2F1c2UgYSB3YXJuaW5nIG5vdCBvbmx5CisgICAgIGZvciB1c2VzIG9mIDo6ZnVuYyBidXQgYWxzbyBmb3IgdXNlcyBvZiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jLiAgKi8KKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGZ1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgZGVjbGFyYXRpb24uCisgICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvciB0aGF0IHdvdWxkCisgICBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpmdW5jKTsgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMsIHJldHR5cGUyLCBwYXJhbWV0ZXJzMik7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGlzIHBpY2tlZCBhbW9uZyBhIHNldCBvZiBvdmVybG9hZGVkIGZ1bmN0aW9ucywKKyAgIG5hbWVseSB0aGUgb25lIHdpdGggcmV0dHlwZTIgYW5kIHBhcmFtZXRlcnMyLiAgVHdvIGNvbnNlY3V0aXZlIGNhc3RzCisgICBhcmUgdXNlZCB0byBzaWxlbmNlIHRoZSAiY2Fubm90IGZpbmQgYSBtYXRjaCIgYW5kICJpbnZhbGlkIGNvbnZlcnNpb24iCisgICBlcnJvcnMgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisgIC8qIFRoZSBvdXRlciBjYXN0IG11c3QgYmUgYSByZWludGVycHJldF9jYXN0LgorICAgICBUaGUgaW5uZXIgY2FzdDogV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNldCBvZiBvdmVybG9hZGVkCisgICAgIGZ1bmN0aW9ucywgaXQgd29ya3MgYXMgYSBzdGF0aWNfY2FzdDw+LCBjaG9vc2luZyB0aGUgZGVzaWduYXRlZCB2YXJpYW50LgorICAgICBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2luZ2xlIHZhcmlhbnQsIGl0IHdvcmtzIGFzIGEKKyAgICAgcmVpbnRlcnByZXRfY2FzdDw+LiBUaGUgcGFyZW50aGVzaXplZCBjYXN0IHN5bnRheCB3b3JrcyBib3RoIHdheXMuICAqLworIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChyZXR0eXBlMigqKXBhcmFtZXRlcnMyKSg6OmZ1bmMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTV0FSTiAoZnVuYyk7CisgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiA6OmZ1bmMgaXMgdXNlZCBidXQgbm90IHdoZW4KKyAgIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gIGZ1bmMgbXVzdCBiZSBkZWZpbmVkIHdpdGhvdXQgb3ZlcmxvYWRlZAorICAgdmFyaWFudHMuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk5fMSAoZnVuYywgR05VTElCX05BTUVTUEFDRSkKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMShmdW5jLG5hbWVzcGFjZSkgXAorICAgX0dMX0NYWEFMSUFTV0FSTl8yIChmdW5jLCBuYW1lc3BhY2UpCisvKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKyAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworIyBpZiAhX19PUFRJTUlaRV9fCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgX0dMX1dBUk5fT05fVVNFIChmdW5jLCBcCisgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworIyBlbHNlCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNXQVJOMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiB0aGUgZ2l2ZW4gb3ZlcmxvYWRlZCB2YXJpYW50IG9mIDo6ZnVuYworICAgaXMgdXNlZCBidXQgbm90IHdoZW4gR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk4xXzEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdOVUxJQl9OQU1FU1BBQ0UpCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgX0dMX0NYWEFMSUFTV0FSTjFfMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgbmFtZXNwYWNlKQorLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKyMgaWYgIV9fT1BUSU1JWkVfXworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisjZW5kaWYgLyogX0dMX0NYWERFRlNfSCAqLworCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwgaXMgY29waWVkIGhlcmUuICAqLworLyogX0dMX0FSR19OT05OVUxMKChuLC4uLixtKSkgdGVsbHMgdGhlIGNvbXBpbGVyIGFuZCBzdGF0aWMgYW5hbHl6ZXIgdG9vbHMKKyAgIHRoYXQgdGhlIHZhbHVlcyBwYXNzZWQgYXMgYXJndW1lbnRzIG4sIC4uLiwgbSBtdXN0IGJlIG5vbi1OVUxMIHBvaW50ZXJzLgorICAgbiA9IDEgc3RhbmRzIGZvciB0aGUgZmlyc3QgYXJndW1lbnQsIG4gPSAyIGZvciB0aGUgc2Vjb25kIGFyZ3VtZW50IGV0Yy4gICovCisjaWZuZGVmIF9HTF9BUkdfTk9OTlVMTAorIyBpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSB8fCBfX0dOVUNfXyA+IDMKKyMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKSBfX2F0dHJpYnV0ZV9fICgoX19ub25udWxsX18gcGFyYW1zKSkKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpCisjIGVuZGlmCisjZW5kaWYKKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFCisKKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCisvKiBBIGNvbXBpbGVyIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDQuMy4wIGFuZCBsYXRlci4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobWVzc2FnZSkpKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24KKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisjIGVuZGlmCisjZW5kaWYKKworLyogX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuY3Rpb24sIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsICJzdHJpbmciKQorICAgaXMgbGlrZSBfR0xfV0FSTl9PTl9VU0UgKGZ1bmN0aW9uLCAic3RyaW5nIiksIGV4Y2VwdCB0aGF0IHRoZSBmdW5jdGlvbiBpcworICAgZGVjbGFyZWQgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLCBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLAorICAgYW5kIGF0dHJpYnV0ZXMuCisgICBUaGlzIHZhcmlhbnQgaXMgdXNlZnVsIGZvciBvdmVybG9hZGVkIGZ1bmN0aW9ucyBpbiBDKysuIF9HTF9XQVJOX09OX1VTRSBkb2VzCisgICBub3Qgd29yayBpbiB0aGlzIGNhc2UuICAqLworI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0VfQ1hYCisjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyBcCisgICAgIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobXNnKSkpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisvKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBfR0xfV0FSTl9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX0VYVEVSTl9DCisjIGlmIGRlZmluZWQgX19jcGx1c3BsdXMKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4gIkMiCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4KKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIEZpbmQgdGhlIGluZGV4IG9mIHRoZSBsZWFzdC1zaWduaWZpY2FudCBzZXQgYml0LiAgKi8KKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChmZnNsLCBpbnQsIChsb25nIGludCBpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmZnNsLCBpbnQsIChsb25nIGludCBpKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChmZnNsKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZmZzbAorIyBpZiBIQVZFX1JBV19ERUNMX0ZGU0wKK19HTF9XQVJOX09OX1VTRSAoZmZzbCwgImZmc2wgaXMgbm90IHBvcnRhYmxlIC0gdXNlIHRoZSBmZnNsIG1vZHVsZSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogRmluZCB0aGUgaW5kZXggb2YgdGhlIGxlYXN0LXNpZ25pZmljYW50IHNldCBiaXQuICAqLworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGZmc2xsLCBpbnQsIChsb25nIGxvbmcgaW50IGkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZmc2xsLCBpbnQsIChsb25nIGxvbmcgaW50IGkpKTsKK19HTF9DWFhBTElBU1dBUk4gKGZmc2xsKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZmZzbGwKKyMgaWYgSEFWRV9SQVdfREVDTF9GRlNMTAorX0dMX1dBUk5fT05fVVNFIChmZnNsbCwgImZmc2xsIGlzIG5vdCBwb3J0YWJsZSAtIHVzZSB0aGUgZmZzbGwgbW9kdWxlIik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBSZXR1cm4gdGhlIGZpcnN0IGluc3RhbmNlIG9mIEMgd2l0aGluIE4gYnl0ZXMgb2YgUywgb3IgTlVMTC4gICovCisjaWYgMQorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBtZW1jaHIgcnBsX21lbWNocgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG1lbWNociwgdm9pZCAqLCAodm9pZCBjb25zdCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChtZW1jaHIsIHZvaWQgKiwgKHZvaWQgY29uc3QgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikpOworIyBlbHNlCisjICBpZiAhIDEKK19HTF9GVU5DREVDTF9TWVMgKG1lbWNociwgdm9pZCAqLCAodm9pZCBjb25zdCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorICAvKiBPbiBzb21lIHN5c3RlbXMsIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhbiBvdmVybG9hZGVkIGZ1bmN0aW9uOgorICAgICAgIGV4dGVybiAiQyIgeyBjb25zdCB2b2lkICogc3RkOjptZW1jaHIgKGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOyB9CisgICAgICAgZXh0ZXJuICJDKysiIHsgdm9pZCAqIHN0ZDo6bWVtY2hyICh2b2lkICosIGludCwgc2l6ZV90KTsgfSAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVDIgKG1lbWNociwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiwgKHZvaWQgY29uc3QgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbiksCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIGNvbnN0ICosICh2b2lkIGNvbnN0ICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pKTsKKyMgZW5kaWYKKyMgaWYgKChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMTApICYmICFkZWZpbmVkIF9fVUNMSUJDX18pIFwKKyAgICAgJiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0KSkKK19HTF9DWFhBTElBU1dBUk4xIChtZW1jaHIsIHZvaWQgKiwgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikpOworX0dMX0NYWEFMSUFTV0FSTjEgKG1lbWNociwgdm9pZCBjb25zdCAqLAorICAgICAgICAgICAgICAgICAgICh2b2lkIGNvbnN0ICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTV0FSTiAobWVtY2hyKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbWVtY2hyCisvKiBBc3N1bWUgbWVtY2hyIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKG1lbWNociwgIm1lbWNociBoYXMgcGxhdGZvcm0tc3BlY2lmaWMgYnVncyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG1lbWNociBmb3IgcG9ydGFiaWxpdHkiICk7CisjZW5kaWYKKworLyogUmV0dXJuIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIE5FRURMRSBpbiBIQVlTVEFDSy4gICovCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBtZW1tZW0gcnBsX21lbW1lbQorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG1lbW1lbSwgdm9pZCAqLAorICAgICAgICAgICAgICAgICAgKHZvaWQgY29uc3QgKl9faGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrX2xlbiwKKyAgICAgICAgICAgICAgICAgICB2b2lkIGNvbnN0ICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlX2xlbikKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMykpKTsKK19HTF9DWFhBTElBU19SUEwgKG1lbW1lbSwgdm9pZCAqLAorICAgICAgICAgICAgICAgICAgKHZvaWQgY29uc3QgKl9faGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrX2xlbiwKKyAgICAgICAgICAgICAgICAgICB2b2lkIGNvbnN0ICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlX2xlbikpOworIyBlbHNlCisjICBpZiAhIDEKK19HTF9GVU5DREVDTF9TWVMgKG1lbW1lbSwgdm9pZCAqLAorICAgICAgICAgICAgICAgICAgKHZvaWQgY29uc3QgKl9faGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrX2xlbiwKKyAgICAgICAgICAgICAgICAgICB2b2lkIGNvbnN0ICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlX2xlbikKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMykpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChtZW1tZW0sIHZvaWQgKiwKKyAgICAgICAgICAgICAgICAgICh2b2lkIGNvbnN0ICpfX2hheXN0YWNrLCBzaXplX3QgX19oYXlzdGFja19sZW4sCisgICAgICAgICAgICAgICAgICAgdm9pZCBjb25zdCAqX19uZWVkbGUsIHNpemVfdCBfX25lZWRsZV9sZW4pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG1lbW1lbSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG1lbW1lbQorIyBpZiBIQVZFX1JBV19ERUNMX01FTU1FTQorX0dMX1dBUk5fT05fVVNFIChtZW1tZW0sICJtZW1tZW0gaXMgdW5wb3J0YWJsZSBhbmQgb2Z0ZW4gcXVhZHJhdGljIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWVtbWVtLXNpbXBsZSBmb3IgcG9ydGFiaWxpdHksICIKKyAgICAgICAgICAgICAgICAgImFuZCBtb2R1bGUgbWVtbWVtIGZvciBzcGVlZCIgKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBDb3B5IE4gYnl0ZXMgb2YgU1JDIHRvIERFU1QsIHJldHVybiBwb2ludGVyIHRvIGJ5dGVzIGFmdGVyIHRoZQorICAgbGFzdCB3cml0dGVuIGJ5dGUuICAqLworI2lmIDAKKyMgaWYgISAxCitfR0xfRlVOQ0RFQ0xfU1lTIChtZW1wY3B5LCB2b2lkICosCisgICAgICAgICAgICAgICAgICAodm9pZCAqcmVzdHJpY3QgX19kZXN0LCB2b2lkIGNvbnN0ICpyZXN0cmljdCBfX3NyYywKKyAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKG1lbXBjcHksIHZvaWQgKiwKKyAgICAgICAgICAgICAgICAgICh2b2lkICpyZXN0cmljdCBfX2Rlc3QsIHZvaWQgY29uc3QgKnJlc3RyaWN0IF9fc3JjLAorICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pKTsKK19HTF9DWFhBTElBU1dBUk4gKG1lbXBjcHkpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBtZW1wY3B5CisjIGlmIEhBVkVfUkFXX0RFQ0xfTUVNUENQWQorX0dMX1dBUk5fT05fVVNFIChtZW1wY3B5LCAibWVtcGNweSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWVtcGNweSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBTZWFyY2ggYmFja3dhcmRzIHRocm91Z2ggYSBibG9jayBmb3IgYSBieXRlIChzcGVjaWZpZWQgYXMgYW4gaW50KS4gICovCisjaWYgMAorIyBpZiAhIDEKK19HTF9GVU5DREVDTF9TWVMgKG1lbXJjaHIsIHZvaWQgKiwgKHZvaWQgY29uc3QgKiwgaW50LCBzaXplX3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorICAvKiBPbiBzb21lIHN5c3RlbXMsIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhbiBvdmVybG9hZGVkIGZ1bmN0aW9uOgorICAgICAgIGV4dGVybiAiQysrIiB7IGNvbnN0IHZvaWQgKiBzdGQ6Om1lbXJjaHIgKGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOyB9CisgICAgICAgZXh0ZXJuICJDKysiIHsgdm9pZCAqIHN0ZDo6bWVtcmNociAodm9pZCAqLCBpbnQsIHNpemVfdCk7IH0gICovCitfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyIChtZW1yY2hyLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqLCAodm9pZCBjb25zdCAqLCBpbnQsIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIGNvbnN0ICosICh2b2lkIGNvbnN0ICosIGludCwgc2l6ZV90KSk7CisjIGlmICgoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEwKSAmJiAhZGVmaW5lZCBfX1VDTElCQ19fKSBcCisgICAgICYmIChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNCkpCitfR0xfQ1hYQUxJQVNXQVJOMSAobWVtcmNociwgdm9pZCAqLCAodm9pZCAqLCBpbnQsIHNpemVfdCkpOworX0dMX0NYWEFMSUFTV0FSTjEgKG1lbXJjaHIsIHZvaWQgY29uc3QgKiwgKHZvaWQgY29uc3QgKiwgaW50LCBzaXplX3QpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTV0FSTiAobWVtcmNocik7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG1lbXJjaHIKKyMgaWYgSEFWRV9SQVdfREVDTF9NRU1SQ0hSCitfR0xfV0FSTl9PTl9VU0UgKG1lbXJjaHIsICJtZW1yY2hyIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBtZW1yY2hyIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgQyBpbiBTLiAgTW9yZSBlZmZpY2llbnQgdGhhbgorICAgbWVtY2hyKFMsQyxOKSwgYXQgdGhlIGV4cGVuc2Ugb2YgdW5kZWZpbmVkIGJlaGF2aW9yIGlmIEMgZG9lcyBub3QKKyAgIG9jY3VyIHdpdGhpbiBOIGJ5dGVzLiAgKi8KKyNpZiAxCisjIGlmICEgMQorX0dMX0ZVTkNERUNMX1NZUyAocmF3bWVtY2hyLCB2b2lkICosICh2b2lkIGNvbnN0ICpfX3MsIGludCBfX2NfaW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgZW5kaWYKKyAgLyogT24gc29tZSBzeXN0ZW1zLCB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYW4gb3ZlcmxvYWRlZCBmdW5jdGlvbjoKKyAgICAgICBleHRlcm4gIkMrKyIgeyBjb25zdCB2b2lkICogc3RkOjpyYXdtZW1jaHIgKGNvbnN0IHZvaWQgKiwgaW50KTsgfQorICAgICAgIGV4dGVybiAiQysrIiB7IHZvaWQgKiBzdGQ6OnJhd21lbWNociAodm9pZCAqLCBpbnQpOyB9ICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUMiAocmF3bWVtY2hyLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqLCAodm9pZCBjb25zdCAqX19zLCBpbnQgX19jX2luKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgY29uc3QgKiwgKHZvaWQgY29uc3QgKl9fcywgaW50IF9fY19pbikpOworIyBpZiAoKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxMCkgJiYgIWRlZmluZWQgX19VQ0xJQkNfXykgXAorICAgICAmJiAoX19HTlVDX18gPiA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDQpKQorX0dMX0NYWEFMSUFTV0FSTjEgKHJhd21lbWNociwgdm9pZCAqLCAodm9pZCAqX19zLCBpbnQgX19jX2luKSk7CitfR0xfQ1hYQUxJQVNXQVJOMSAocmF3bWVtY2hyLCB2b2lkIGNvbnN0ICosICh2b2lkIGNvbnN0ICpfX3MsIGludCBfX2NfaW4pKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTV0FSTiAocmF3bWVtY2hyKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcmF3bWVtY2hyCisjIGlmIEhBVkVfUkFXX0RFQ0xfUkFXTUVNQ0hSCitfR0xfV0FSTl9PTl9VU0UgKHJhd21lbWNociwgInJhd21lbWNociBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmF3bWVtY2hyIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIENvcHkgU1JDIHRvIERTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyAnXDAnIGluIERTVC4gICovCisjaWYgMQorIyBpZiAhIDEKK19HTF9GVU5DREVDTF9TWVMgKHN0cGNweSwgY2hhciAqLAorICAgICAgICAgICAgICAgICAgKGNoYXIgKnJlc3RyaWN0IF9fZHN0LCBjaGFyIGNvbnN0ICpyZXN0cmljdCBfX3NyYykKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzdHBjcHksIGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpyZXN0cmljdCBfX2RzdCwgY2hhciBjb25zdCAqcmVzdHJpY3QgX19zcmMpKTsKK19HTF9DWFhBTElBU1dBUk4gKHN0cGNweSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHN0cGNweQorIyBpZiBIQVZFX1JBV19ERUNMX1NUUENQWQorX0dMX1dBUk5fT05fVVNFIChzdHBjcHksICJzdHBjcHkgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHN0cGNweSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBDb3B5IG5vIG1vcmUgdGhhbiBOIGJ5dGVzIG9mIFNSQyB0byBEU1QsIHJldHVybmluZyBhIHBvaW50ZXIgcGFzdCB0aGUKKyAgIGxhc3Qgbm9uLU5VTCBieXRlIHdyaXR0ZW4gaW50byBEU1QuICAqLworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBzdHBuY3B5CisjICAgZGVmaW5lIHN0cG5jcHkgcnBsX3N0cG5jcHkKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChzdHBuY3B5LCBjaGFyICosCisgICAgICAgICAgICAgICAgICAoY2hhciAqcmVzdHJpY3QgX19kc3QsIGNoYXIgY29uc3QgKnJlc3RyaWN0IF9fc3JjLAorICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoc3RwbmNweSwgY2hhciAqLAorICAgICAgICAgICAgICAgICAgKGNoYXIgKnJlc3RyaWN0IF9fZHN0LCBjaGFyIGNvbnN0ICpyZXN0cmljdCBfX3NyYywKKyAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSk7CisjIGVsc2UKKyMgIGlmICEgMQorX0dMX0ZVTkNERUNMX1NZUyAoc3RwbmNweSwgY2hhciAqLAorICAgICAgICAgICAgICAgICAgKGNoYXIgKnJlc3RyaWN0IF9fZHN0LCBjaGFyIGNvbnN0ICpyZXN0cmljdCBfX3NyYywKKyAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzdHBuY3B5LCBjaGFyICosCisgICAgICAgICAgICAgICAgICAoY2hhciAqcmVzdHJpY3QgX19kc3QsIGNoYXIgY29uc3QgKnJlc3RyaWN0IF9fc3JjLAorICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHN0cG5jcHkpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHBuY3B5CisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RQTkNQWQorX0dMX1dBUk5fT05fVVNFIChzdHBuY3B5LCAic3RwbmNweSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RwbmNweSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLyogc3RyY2hyKCkgZG9lcyBub3Qgd29yayB3aXRoIG11bHRpYnl0ZSBzdHJpbmdzIGlmIHRoZSBsb2NhbGUgZW5jb2RpbmcgaXMKKyAgIEdCMTgwMzAgYW5kIHRoZSBjaGFyYWN0ZXIgdG8gYmUgc2VhcmNoZWQgaXMgYSBkaWdpdC4gICovCisjIHVuZGVmIHN0cmNocgorLyogQXNzdW1lIHN0cmNociBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFIChzdHJjaHIsICJzdHJjaHIgY2Fubm90IHdvcmsgY29ycmVjdGx5IG9uIGNoYXJhY3RlciBzdHJpbmdzICIKKyAgICAgICAgICAgICAgICAgImluIHNvbWUgbXVsdGlieXRlIGxvY2FsZXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgbWJzY2hyIGlmIHlvdSBjYXJlIGFib3V0IGludGVybmF0aW9uYWxpemF0aW9uIik7CisjZW5kaWYKKworLyogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBDIGluIFMgb3IgdGhlIGZpbmFsIE5VTCBieXRlLiAgKi8KKyNpZiAxCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHN0cmNocm51bCBycGxfc3RyY2hybnVsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc3RyY2hybnVsLCBjaGFyICosIChjb25zdCBjaGFyICpfX3MsIGludCBfX2NfaW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHN0cmNocm51bCwgY2hhciAqLAorICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKnN0ciwgaW50IGNoKSk7CisjIGVsc2UKKyMgIGlmICEgMQorX0dMX0ZVTkNERUNMX1NZUyAoc3RyY2hybnVsLCBjaGFyICosIChjaGFyIGNvbnN0ICpfX3MsIGludCBfX2NfaW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgIGVuZGlmCisgIC8qIE9uIHNvbWUgc3lzdGVtcywgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGFuIG92ZXJsb2FkZWQgZnVuY3Rpb246CisgICAgICAgZXh0ZXJuICJDKysiIHsgY29uc3QgY2hhciAqIHN0ZDo6c3RyY2hybnVsIChjb25zdCBjaGFyICosIGludCk7IH0KKyAgICAgICBleHRlcm4gIkMrKyIgeyBjaGFyICogc3RkOjpzdHJjaHJudWwgKGNoYXIgKiwgaW50KTsgfSAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVDIgKHN0cmNocm51bCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgKGNoYXIgY29uc3QgKl9fcywgaW50IF9fY19pbiksCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICosIChjaGFyIGNvbnN0ICpfX3MsIGludCBfX2NfaW4pKTsKKyMgZW5kaWYKKyMgaWYgKChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMTApICYmICFkZWZpbmVkIF9fVUNMSUJDX18pIFwKKyAgICAgJiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0KSkKK19HTF9DWFhBTElBU1dBUk4xIChzdHJjaHJudWwsIGNoYXIgKiwgKGNoYXIgKl9fcywgaW50IF9fY19pbikpOworX0dMX0NYWEFMSUFTV0FSTjEgKHN0cmNocm51bCwgY2hhciBjb25zdCAqLCAoY2hhciBjb25zdCAqX19zLCBpbnQgX19jX2luKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU1dBUk4gKHN0cmNocm51bCk7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHN0cmNocm51bAorIyBpZiBIQVZFX1JBV19ERUNMX1NUUkNIUk5VTAorX0dMX1dBUk5fT05fVVNFIChzdHJjaHJudWwsICJzdHJjaHJudWwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHN0cmNocm51bCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBEdXBsaWNhdGUgUywgcmV0dXJuaW5nIGFuIGlkZW50aWNhbCBtYWxsb2MnZCBzdHJpbmcuICAqLworI2lmIDEKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBzdHJkdXAKKyMgICBkZWZpbmUgc3RyZHVwIHJwbF9zdHJkdXAKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChzdHJkdXAsIGNoYXIgKiwgKGNoYXIgY29uc3QgKl9fcykgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHN0cmR1cCwgY2hhciAqLCAoY2hhciBjb25zdCAqX19zKSk7CisjIGVsc2UKKyMgIGlmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFICYmIGRlZmluZWQgc3RyZHVwCisgICAgLyogc3RyZHVwIGV4aXN0cyBhcyBhIGZ1bmN0aW9uIGFuZCBhcyBhIG1hY3JvLiAgR2V0IHJpZCBvZiB0aGUgbWFjcm8uICAqLworIyAgIHVuZGVmIHN0cmR1cAorIyAgZW5kaWYKKyMgIGlmICEoMSB8fCBkZWZpbmVkIHN0cmR1cCkKK19HTF9GVU5DREVDTF9TWVMgKHN0cmR1cCwgY2hhciAqLCAoY2hhciBjb25zdCAqX19zKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHN0cmR1cCwgY2hhciAqLCAoY2hhciBjb25zdCAqX19zKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzdHJkdXApOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJkdXAKKyMgaWYgSEFWRV9SQVdfREVDTF9TVFJEVVAKK19HTF9XQVJOX09OX1VTRSAoc3RyZHVwLCAic3RyZHVwIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHJkdXAgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworLyogQXBwZW5kIG5vIG1vcmUgdGhhbiBOIGNoYXJhY3RlcnMgZnJvbSBTUkMgb250byBERVNULiAgKi8KKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgc3RybmNhdAorIyAgIGRlZmluZSBzdHJuY2F0IHJwbF9zdHJuY2F0CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc3RybmNhdCwgY2hhciAqLCAoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHN0cm5jYXQsIGNoYXIgKiwgKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IG4pKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoc3RybmNhdCwgY2hhciAqLCAoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoc3RybmNhdCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHN0cm5jYXQKKyMgaWYgSEFWRV9SQVdfREVDTF9TVFJOQ0FUCitfR0xfV0FSTl9PTl9VU0UgKHN0cm5jYXQsICJzdHJuY2F0IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHJuY2F0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIFJldHVybiBhIG5ld2x5IGFsbG9jYXRlZCBjb3B5IG9mIGF0IG1vc3QgTiBieXRlcyBvZiBTVFJJTkcuICAqLworI2lmIDEKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBzdHJuZHVwCisjICAgZGVmaW5lIHN0cm5kdXAgcnBsX3N0cm5kdXAKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChzdHJuZHVwLCBjaGFyICosIChjaGFyIGNvbnN0ICpfX3N0cmluZywgc2l6ZV90IF9fbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHN0cm5kdXAsIGNoYXIgKiwgKGNoYXIgY29uc3QgKl9fc3RyaW5nLCBzaXplX3QgX19uKSk7CisjIGVsc2UKKyMgIGlmICEgMQorX0dMX0ZVTkNERUNMX1NZUyAoc3RybmR1cCwgY2hhciAqLCAoY2hhciBjb25zdCAqX19zdHJpbmcsIHNpemVfdCBfX24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc3RybmR1cCwgY2hhciAqLCAoY2hhciBjb25zdCAqX19zdHJpbmcsIHNpemVfdCBfX24pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHN0cm5kdXApOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJuZHVwCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RSTkRVUAorX0dMX1dBUk5fT05fVVNFIChzdHJuZHVwLCAic3RybmR1cCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RybmR1cCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBGaW5kIHRoZSBsZW5ndGggKG51bWJlciBvZiBieXRlcykgb2YgU1RSSU5HLCBidXQgc2NhbiBhdCBtb3N0CisgICBNQVhMRU4gYnl0ZXMuICBJZiBubyAnXDAnIHRlcm1pbmF0b3IgaXMgZm91bmQgaW4gdGhhdCBtYW55IGJ5dGVzLAorICAgcmV0dXJuIE1BWExFTi4gICovCisjaWYgMQorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHN0cm5sZW4KKyMgICBkZWZpbmUgc3RybmxlbiBycGxfc3RybmxlbgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHN0cm5sZW4sIHNpemVfdCwgKGNoYXIgY29uc3QgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoc3Rybmxlbiwgc2l6ZV90LCAoY2hhciBjb25zdCAqX19zdHJpbmcsIHNpemVfdCBfX21heGxlbikpOworIyBlbHNlCisjICBpZiAhIDEKK19HTF9GVU5DREVDTF9TWVMgKHN0cm5sZW4sIHNpemVfdCwgKGNoYXIgY29uc3QgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHN0cm5sZW4sIHNpemVfdCwgKGNoYXIgY29uc3QgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHN0cm5sZW4pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJubGVuCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RSTkxFTgorX0dMX1dBUk5fT05fVVNFIChzdHJubGVuLCAic3RybmxlbiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RybmxlbiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLyogc3RyY3NwbigpIGFzc3VtZXMgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBhIGxpc3Qgb2Ygc2luZ2xlLWJ5dGUgY2hhcmFjdGVycy4KKyAgIEV2ZW4gaW4gdGhpcyBzaW1wbGUgY2FzZSwgaXQgZG9lcyBub3Qgd29yayB3aXRoIG11bHRpYnl0ZSBzdHJpbmdzIGlmIHRoZQorICAgbG9jYWxlIGVuY29kaW5nIGlzIEdCMTgwMzAgYW5kIG9uZSBvZiB0aGUgY2hhcmFjdGVycyB0byBiZSBzZWFyY2hlZCBpcyBhCisgICBkaWdpdC4gICovCisjIHVuZGVmIHN0cmNzcG4KKy8qIEFzc3VtZSBzdHJjc3BuIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKHN0cmNzcG4sICJzdHJjc3BuIGNhbm5vdCB3b3JrIGNvcnJlY3RseSBvbiBjaGFyYWN0ZXIgc3RyaW5ncyAiCisgICAgICAgICAgICAgICAgICJpbiBtdWx0aWJ5dGUgbG9jYWxlcyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBtYnNjc3BuIGlmIHlvdSBjYXJlIGFib3V0IGludGVybmF0aW9uYWxpemF0aW9uIik7CisjZW5kaWYKKworLyogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBpbiBTIG9mIGFueSBjaGFyYWN0ZXIgaW4gQUNDRVBULiAgKi8KKyNpZiAwCisjIGlmICEgMQorX0dMX0ZVTkNERUNMX1NZUyAoc3RycGJyaywgY2hhciAqLCAoY2hhciBjb25zdCAqX19zLCBjaGFyIGNvbnN0ICpfX2FjY2VwdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjIGVuZGlmCisgIC8qIE9uIHNvbWUgc3lzdGVtcywgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGFuIG92ZXJsb2FkZWQgZnVuY3Rpb246CisgICAgICAgZXh0ZXJuICJDIiB7IGNvbnN0IGNoYXIgKiBzdHJwYnJrIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7IH0KKyAgICAgICBleHRlcm4gIkMrKyIgeyBjaGFyICogc3RycGJyayAoY2hhciAqLCBjb25zdCBjaGFyICopOyB9ICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUMiAoc3RycGJyaywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgKGNoYXIgY29uc3QgKl9fcywgY2hhciBjb25zdCAqX19hY2NlcHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCAoY2hhciBjb25zdCAqX19zLCBjaGFyIGNvbnN0ICpfX2FjY2VwdCkpOworIyBpZiAoKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxMCkgJiYgIWRlZmluZWQgX19VQ0xJQkNfXykgXAorICAgICAmJiAoX19HTlVDX18gPiA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDQpKQorX0dMX0NYWEFMSUFTV0FSTjEgKHN0cnBicmssIGNoYXIgKiwgKGNoYXIgKl9fcywgY2hhciBjb25zdCAqX19hY2NlcHQpKTsKK19HTF9DWFhBTElBU1dBUk4xIChzdHJwYnJrLCBjaGFyIGNvbnN0ICosCisgICAgICAgICAgICAgICAgICAgKGNoYXIgY29uc3QgKl9fcywgY2hhciBjb25zdCAqX19hY2NlcHQpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTV0FSTiAoc3RycGJyayk7CisjIGVuZGlmCisjIGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy8qIHN0cnBicmsoKSBhc3N1bWVzIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBsaXN0IG9mIHNpbmdsZS1ieXRlIGNoYXJhY3RlcnMuCisgICBFdmVuIGluIHRoaXMgc2ltcGxlIGNhc2UsIGl0IGRvZXMgbm90IHdvcmsgd2l0aCBtdWx0aWJ5dGUgc3RyaW5ncyBpZiB0aGUKKyAgIGxvY2FsZSBlbmNvZGluZyBpcyBHQjE4MDMwIGFuZCBvbmUgb2YgdGhlIGNoYXJhY3RlcnMgdG8gYmUgc2VhcmNoZWQgaXMgYQorICAgZGlnaXQuICAqLworIyAgdW5kZWYgc3RycGJyaworX0dMX1dBUk5fT05fVVNFIChzdHJwYnJrLCAic3RycGJyayBjYW5ub3Qgd29yayBjb3JyZWN0bHkgb24gY2hhcmFjdGVyIHN0cmluZ3MgIgorICAgICAgICAgICAgICAgICAiaW4gbXVsdGlieXRlIGxvY2FsZXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgbWJzcGJyayBpZiB5b3UgY2FyZSBhYm91dCBpbnRlcm5hdGlvbmFsaXphdGlvbiIpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJwYnJrCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RSUEJSSworX0dMX1dBUk5fT05fVVNFIChzdHJwYnJrLCAic3RycGJyayBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RycGJyayBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLyogc3Ryc3BuKCkgYXNzdW1lcyB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGEgbGlzdCBvZiBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXJzLgorICAgRXZlbiBpbiB0aGlzIHNpbXBsZSBjYXNlLCBpdCBjYW5ub3Qgd29yayB3aXRoIG11bHRpYnl0ZSBzdHJpbmdzLiAgKi8KKyMgdW5kZWYgc3Ryc3BuCisvKiBBc3N1bWUgc3Ryc3BuIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKHN0cnNwbiwgInN0cnNwbiBjYW5ub3Qgd29yayBjb3JyZWN0bHkgb24gY2hhcmFjdGVyIHN0cmluZ3MgIgorICAgICAgICAgICAgICAgICAiaW4gbXVsdGlieXRlIGxvY2FsZXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgbWJzc3BuIGlmIHlvdSBjYXJlIGFib3V0IGludGVybmF0aW9uYWxpemF0aW9uIik7CisjZW5kaWYKKworI2lmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy8qIHN0cnJjaHIoKSBkb2VzIG5vdCB3b3JrIHdpdGggbXVsdGlieXRlIHN0cmluZ3MgaWYgdGhlIGxvY2FsZSBlbmNvZGluZyBpcworICAgR0IxODAzMCBhbmQgdGhlIGNoYXJhY3RlciB0byBiZSBzZWFyY2hlZCBpcyBhIGRpZ2l0LiAgKi8KKyMgdW5kZWYgc3RycmNocgorLyogQXNzdW1lIHN0cnJjaHIgaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAoc3RycmNociwgInN0cnJjaHIgY2Fubm90IHdvcmsgY29ycmVjdGx5IG9uIGNoYXJhY3RlciBzdHJpbmdzICIKKyAgICAgICAgICAgICAgICAgImluIHNvbWUgbXVsdGlieXRlIGxvY2FsZXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgbWJzcmNociBpZiB5b3UgY2FyZSBhYm91dCBpbnRlcm5hdGlvbmFsaXphdGlvbiIpOworI2VuZGlmCisKKy8qIFNlYXJjaCB0aGUgbmV4dCBkZWxpbWl0ZXIgKGNoYXIgbGlzdGVkIGluIERFTElNKSBzdGFydGluZyBhdCAqU1RSSU5HUC4KKyAgIElmIG9uZSBpcyBmb3VuZCwgb3ZlcndyaXRlIGl0IHdpdGggYSBOVUwsIGFuZCBhZHZhbmNlICpTVFJJTkdQCisgICB0byBwb2ludCB0byB0aGUgbmV4dCBjaGFyIGFmdGVyIGl0LiAgT3RoZXJ3aXNlLCBzZXQgKlNUUklOR1AgdG8gTlVMTC4KKyAgIElmICpTVFJJTkdQIHdhcyBhbHJlYWR5IE5VTEwsIG5vdGhpbmcgaGFwcGVucy4KKyAgIFJldHVybiB0aGUgb2xkIHZhbHVlIG9mICpTVFJJTkdQLgorCisgICBUaGlzIGlzIGEgdmFyaWFudCBvZiBzdHJ0b2soKSB0aGF0IGlzIG11bHRpdGhyZWFkLXNhZmUgYW5kIHN1cHBvcnRzCisgICBlbXB0eSBmaWVsZHMuCisKKyAgIENhdmVhdDogSXQgbW9kaWZpZXMgdGhlIG9yaWdpbmFsIHN0cmluZy4KKyAgIENhdmVhdDogVGhlc2UgZnVuY3Rpb25zIGNhbm5vdCBiZSB1c2VkIG9uIGNvbnN0YW50IHN0cmluZ3MuCisgICBDYXZlYXQ6IFRoZSBpZGVudGl0eSBvZiB0aGUgZGVsaW1pdGluZyBjaGFyYWN0ZXIgaXMgbG9zdC4KKyAgIENhdmVhdDogSXQgZG9lc24ndCB3b3JrIHdpdGggbXVsdGlieXRlIHN0cmluZ3MgdW5sZXNzIGFsbCBvZiB0aGUgZGVsaW1pdGVyCisgICAgICAgICAgIGNoYXJhY3RlcnMgYXJlIEFTQ0lJIGNoYXJhY3RlcnMgPCAweDMwLgorCisgICBTZWUgYWxzbyBzdHJ0b2tfcigpLiAgKi8KKyNpZiAwCisjIGlmICEgMQorX0dMX0ZVTkNERUNMX1NZUyAoc3Ryc2VwLCBjaGFyICosCisgICAgICAgICAgICAgICAgICAoY2hhciAqKnJlc3RyaWN0IF9fc3RyaW5ncCwgY2hhciBjb25zdCAqcmVzdHJpY3QgX19kZWxpbSkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzdHJzZXAsIGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqcmVzdHJpY3QgX19zdHJpbmdwLCBjaGFyIGNvbnN0ICpyZXN0cmljdCBfX2RlbGltKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChzdHJzZXApOworIyBpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjICB1bmRlZiBzdHJzZXAKK19HTF9XQVJOX09OX1VTRSAoc3Ryc2VwLCAic3Ryc2VwIGNhbm5vdCB3b3JrIGNvcnJlY3RseSBvbiBjaGFyYWN0ZXIgc3RyaW5ncyAiCisgICAgICAgICAgICAgICAgICJpbiBtdWx0aWJ5dGUgbG9jYWxlcyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBtYnNzZXAgaWYgeW91IGNhcmUgYWJvdXQgaW50ZXJuYXRpb25hbGl6YXRpb24iKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc3Ryc2VwCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RSU0VQCitfR0xfV0FSTl9PTl9VU0UgKHN0cnNlcCwgInN0cnNlcCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3Ryc2VwIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHN0cnN0ciBycGxfc3Ryc3RyCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc3Ryc3RyLCBjaGFyICosIChjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzdHJzdHIsIGNoYXIgKiwgKGNvbnN0IGNoYXIgKmhheXN0YWNrLCBjb25zdCBjaGFyICpuZWVkbGUpKTsKKyMgZWxzZQorICAvKiBPbiBzb21lIHN5c3RlbXMsIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhbiBvdmVybG9hZGVkIGZ1bmN0aW9uOgorICAgICAgIGV4dGVybiAiQysrIiB7IGNvbnN0IGNoYXIgKiBzdHJzdHIgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsgfQorICAgICAgIGV4dGVybiAiQysrIiB7IGNoYXIgKiBzdHJzdHIgKGNoYXIgKiwgY29uc3QgY2hhciAqKTsgfSAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVDIgKHN0cnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgKGNvbnN0IGNoYXIgKmhheXN0YWNrLCBjb25zdCBjaGFyICpuZWVkbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCAoY29uc3QgY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSkpOworIyBlbmRpZgorIyBpZiAoKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxMCkgJiYgIWRlZmluZWQgX19VQ0xJQkNfXykgXAorICAgICAmJiAoX19HTlVDX18gPiA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDQpKQorX0dMX0NYWEFMSUFTV0FSTjEgKHN0cnN0ciwgY2hhciAqLCAoY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSkpOworX0dMX0NYWEFMSUFTV0FSTjEgKHN0cnN0ciwgY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU1dBUk4gKHN0cnN0cik7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisvKiBzdHJzdHIoKSBkb2VzIG5vdCB3b3JrIHdpdGggbXVsdGlieXRlIHN0cmluZ3MgaWYgdGhlIGxvY2FsZSBlbmNvZGluZyBpcworICAgZGlmZmVyZW50IGZyb20gVVRGLTg6CisgICBQT1NJWCBzYXlzIHRoYXQgaXQgb3BlcmF0ZXMgb24gInN0cmluZ3MiLCBhbmQgInN0cmluZyIgaW4gUE9TSVggaXMgZGVmaW5lZAorICAgYXMgYSBzZXF1ZW5jZSBvZiBieXRlcywgbm90IG9mIGNoYXJhY3RlcnMuICAqLworIyB1bmRlZiBzdHJzdHIKKy8qIEFzc3VtZSBzdHJzdHIgaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAoc3Ryc3RyLCAic3Ryc3RyIGlzIHF1YWRyYXRpYyBvbiBtYW55IHN5c3RlbXMsIGFuZCBjYW5ub3QgIgorICAgICAgICAgICAgICAgICAid29yayBjb3JyZWN0bHkgb24gY2hhcmFjdGVyIHN0cmluZ3MgaW4gbW9zdCAiCisgICAgICAgICAgICAgICAgICJtdWx0aWJ5dGUgbG9jYWxlcyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBtYnNzdHIgaWYgeW91IGNhcmUgYWJvdXQgaW50ZXJuYXRpb25hbGl6YXRpb24sICIKKyAgICAgICAgICAgICAgICAgIm9yIHVzZSBzdHJzdHIgaWYgeW91IGNhcmUgYWJvdXQgc3BlZWQiKTsKKyNlbmRpZgorCisvKiBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIE5FRURMRSBpbiBIQVlTVEFDSywgdXNpbmcgY2FzZS1pbnNlbnNpdGl2ZQorICAgY29tcGFyaXNvbi4gICovCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBzdHJjYXNlc3RyIHJwbF9zdHJjYXNlc3RyCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc3RyY2FzZXN0ciwgY2hhciAqLAorICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKmhheXN0YWNrLCBjb25zdCBjaGFyICpuZWVkbGUpCisgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzdHJjYXNlc3RyLCBjaGFyICosCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSkpOworIyBlbHNlCisjICBpZiAhIDEKK19HTF9GVU5DREVDTF9TWVMgKHN0cmNhc2VzdHIsIGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKQorICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyAgZW5kaWYKKyAgLyogT24gc29tZSBzeXN0ZW1zLCB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYW4gb3ZlcmxvYWRlZCBmdW5jdGlvbjoKKyAgICAgICBleHRlcm4gIkMrKyIgeyBjb25zdCBjaGFyICogc3RyY2FzZXN0ciAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOyB9CisgICAgICAgZXh0ZXJuICJDKysiIHsgY2hhciAqIHN0cmNhc2VzdHIgKGNoYXIgKiwgY29uc3QgY2hhciAqKTsgfSAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVDIgKHN0cmNhc2VzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIChjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgKGNvbnN0IGNoYXIgKmhheXN0YWNrLCBjb25zdCBjaGFyICpuZWVkbGUpKTsKKyMgZW5kaWYKKyMgaWYgKChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMTApICYmICFkZWZpbmVkIF9fVUNMSUJDX18pIFwKKyAgICAgJiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0KSkKK19HTF9DWFhBTElBU1dBUk4xIChzdHJjYXNlc3RyLCBjaGFyICosIChjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKSk7CitfR0xfQ1hYQUxJQVNXQVJOMSAoc3RyY2FzZXN0ciwgY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU1dBUk4gKHN0cmNhc2VzdHIpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLyogc3RyY2FzZXN0cigpIGRvZXMgbm90IHdvcmsgd2l0aCBtdWx0aWJ5dGUgc3RyaW5nczoKKyAgIEl0IGlzIGEgZ2xpYmMgZXh0ZW5zaW9uLCBhbmQgZ2xpYmMgaW1wbGVtZW50cyBpdCBvbmx5IGZvciB1bmlieXRlCisgICBsb2NhbGVzLiAgKi8KKyMgdW5kZWYgc3RyY2FzZXN0cgorIyBpZiBIQVZFX1JBV19ERUNMX1NUUkNBU0VTVFIKK19HTF9XQVJOX09OX1VTRSAoc3RyY2FzZXN0ciwgInN0cmNhc2VzdHIgZG9lcyB3b3JrIGNvcnJlY3RseSBvbiBjaGFyYWN0ZXIgIgorICAgICAgICAgICAgICAgICAic3RyaW5ncyBpbiBtdWx0aWJ5dGUgbG9jYWxlcyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBtYnNjYXNlc3RyIGlmIHlvdSBjYXJlIGFib3V0ICIKKyAgICAgICAgICAgICAgICAgImludGVybmF0aW9uYWxpemF0aW9uLCBvciB1c2UgYy1zdHJjYXNlc3RyIGlmIHlvdSB3YW50ICIKKyAgICAgICAgICAgICAgICAgImEgbG9jYWxlIGluZGVwZW5kZW50IGZ1bmN0aW9uIik7CisjIGVuZGlmCisjZW5kaWYKKworLyogUGFyc2UgUyBpbnRvIHRva2VucyBzZXBhcmF0ZWQgYnkgY2hhcmFjdGVycyBpbiBERUxJTS4KKyAgIElmIFMgaXMgTlVMTCwgdGhlIHNhdmVkIHBvaW50ZXIgaW4gU0FWRV9QVFIgaXMgdXNlZCBhcworICAgdGhlIG5leHQgc3RhcnRpbmcgcG9pbnQuICBGb3IgZXhhbXBsZToKKyAgICAgICAgY2hhciBzW10gPSAiLWFiYy09LWRlZiI7CisgICAgICAgIGNoYXIgKnNwOworICAgICAgICB4ID0gc3RydG9rX3IocywgIi0iLCAmc3ApOyAgICAgIC8vIHggPSAiYWJjIiwgc3AgPSAiPS1kZWYiCisgICAgICAgIHggPSBzdHJ0b2tfcihOVUxMLCAiLT0iLCAmc3ApOyAgLy8geCA9ICJkZWYiLCBzcCA9IE5VTEwKKyAgICAgICAgeCA9IHN0cnRva19yKE5VTEwsICI9IiwgJnNwKTsgICAvLyB4ID0gTlVMTAorICAgICAgICAgICAgICAgIC8vIHMgPSAiYWJjXDAtZGVmXDAiCisKKyAgIFRoaXMgaXMgYSB2YXJpYW50IG9mIHN0cnRvaygpIHRoYXQgaXMgbXVsdGl0aHJlYWQtc2FmZS4KKworICAgRm9yIHRoZSBQT1NJWCBkb2N1bWVudGF0aW9uIGZvciB0aGlzIGZ1bmN0aW9uLCBzZWU6CisgICBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjN4c2gvc3RydG9rLmh0bWwKKworICAgQ2F2ZWF0OiBJdCBtb2RpZmllcyB0aGUgb3JpZ2luYWwgc3RyaW5nLgorICAgQ2F2ZWF0OiBUaGVzZSBmdW5jdGlvbnMgY2Fubm90IGJlIHVzZWQgb24gY29uc3RhbnQgc3RyaW5ncy4KKyAgIENhdmVhdDogVGhlIGlkZW50aXR5IG9mIHRoZSBkZWxpbWl0aW5nIGNoYXJhY3RlciBpcyBsb3N0LgorICAgQ2F2ZWF0OiBJdCBkb2Vzbid0IHdvcmsgd2l0aCBtdWx0aWJ5dGUgc3RyaW5ncyB1bmxlc3MgYWxsIG9mIHRoZSBkZWxpbWl0ZXIKKyAgICAgICAgICAgY2hhcmFjdGVycyBhcmUgQVNDSUkgY2hhcmFjdGVycyA8IDB4MzAuCisKKyAgIFNlZSBhbHNvIHN0cnNlcCgpLiAgKi8KKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgc3RydG9rX3IKKyMgICBkZWZpbmUgc3RydG9rX3IgcnBsX3N0cnRva19yCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc3RydG9rX3IsIGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpyZXN0cmljdCBzLCBjaGFyIGNvbnN0ICpyZXN0cmljdCBkZWxpbSwKKyAgICAgICAgICAgICAgICAgICBjaGFyICoqcmVzdHJpY3Qgc2F2ZV9wdHIpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyLCAzKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoc3RydG9rX3IsIGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpyZXN0cmljdCBzLCBjaGFyIGNvbnN0ICpyZXN0cmljdCBkZWxpbSwKKyAgICAgICAgICAgICAgICAgICBjaGFyICoqcmVzdHJpY3Qgc2F2ZV9wdHIpKTsKKyMgZWxzZQorIyAgaWYgMCB8fCBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjICAgdW5kZWYgc3RydG9rX3IKKyMgIGVuZGlmCisjICBpZiAhIDEKK19HTF9GVU5DREVDTF9TWVMgKHN0cnRva19yLCBjaGFyICosCisgICAgICAgICAgICAgICAgICAoY2hhciAqcmVzdHJpY3QgcywgY2hhciBjb25zdCAqcmVzdHJpY3QgZGVsaW0sCisgICAgICAgICAgICAgICAgICAgY2hhciAqKnJlc3RyaWN0IHNhdmVfcHRyKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMiwgMykpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzdHJ0b2tfciwgY2hhciAqLAorICAgICAgICAgICAgICAgICAgKGNoYXIgKnJlc3RyaWN0IHMsIGNoYXIgY29uc3QgKnJlc3RyaWN0IGRlbGltLAorICAgICAgICAgICAgICAgICAgIGNoYXIgKipyZXN0cmljdCBzYXZlX3B0cikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoc3RydG9rX3IpOworIyBpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCitfR0xfV0FSTl9PTl9VU0UgKHN0cnRva19yLCAic3RydG9rX3IgY2Fubm90IHdvcmsgY29ycmVjdGx5IG9uIGNoYXJhY3RlciAiCisgICAgICAgICAgICAgICAgICJzdHJpbmdzIGluIG11bHRpYnl0ZSBsb2NhbGVzIC0gIgorICAgICAgICAgICAgICAgICAidXNlIG1ic3Rva19yIGlmIHlvdSBjYXJlIGFib3V0IGludGVybmF0aW9uYWxpemF0aW9uIik7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHN0cnRva19yCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RSVE9LX1IKK19HTF9XQVJOX09OX1VTRSAoc3RydG9rX3IsICJzdHJ0b2tfciBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RydG9rX3IgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgbm90IHNwZWNpZmllZCBieSBQT1NJWC4gIFRoZXkgYXJlIGdudWxpYgorICAgZXh0ZW5zaW9ucy4gICovCisKKyNpZiAwCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBtdWx0aWJ5dGUgY2hhcmFjdGVycyBpbiB0aGUgY2hhcmFjdGVyIHN0cmluZyBTVFJJTkcuCisgICBUaGlzIGNvbnNpZGVycyBtdWx0aWJ5dGUgY2hhcmFjdGVycywgdW5saWtlIHN0cmxlbiwgd2hpY2ggY291bnRzIGJ5dGVzLiAgKi8KKyMgaWZkZWYgX19NaXJCU0RfXyAgLyogTWlyQlNEIGRlZmluZXMgbWJzbGVuIGFzIGEgbWFjcm8uICBPdmVycmlkZSBpdC4gICovCisjICB1bmRlZiBtYnNsZW4KKyMgZW5kaWYKKyMgaWYgMCAgLyogQUlYLCBPU0YvMSwgTWlyQlNEIGRlZmluZSBtYnNsZW4gYWxyZWFkeSBpbiBsaWJjLiAgKi8KKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIG1ic2xlbiBycGxfbWJzbGVuCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobWJzbGVuLCBzaXplX3QsIChjb25zdCBjaGFyICpzdHJpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKG1ic2xlbiwgc2l6ZV90LCAoY29uc3QgY2hhciAqc3RyaW5nKSk7CisjIGVsc2UKK19HTF9GVU5DREVDTF9TWVMgKG1ic2xlbiwgc2l6ZV90LCAoY29uc3QgY2hhciAqc3RyaW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfU1lTIChtYnNsZW4sIHNpemVfdCwgKGNvbnN0IGNoYXIgKnN0cmluZykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobWJzbGVuKTsKKyNlbmRpZgorCisjaWYgMAorLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgbXVsdGlieXRlIGNoYXJhY3RlcnMgaW4gdGhlIGNoYXJhY3RlciBzdHJpbmcgc3RhcnRpbmcKKyAgIGF0IFNUUklORyBhbmQgZW5kaW5nIGF0IFNUUklORyArIExFTi4gICovCitfR0xfRVhURVJOX0Mgc2l6ZV90IG1ic25sZW4gKGNvbnN0IGNoYXIgKnN0cmluZywgc2l6ZV90IGxlbikKKyAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKTsKKyNlbmRpZgorCisjaWYgMQorLyogTG9jYXRlIHRoZSBmaXJzdCBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXIgQyBpbiB0aGUgY2hhcmFjdGVyIHN0cmluZyBTVFJJTkcsCisgICBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byBpdC4gIFJldHVybiBOVUxMIGlmIEMgaXMgbm90IGZvdW5kIGluIFNUUklORy4KKyAgIFVubGlrZSBzdHJjaHIoKSwgdGhpcyBmdW5jdGlvbiB3b3JrcyBjb3JyZWN0bHkgaW4gbXVsdGlieXRlIGxvY2FsZXMgd2l0aAorICAgZW5jb2RpbmdzIHN1Y2ggYXMgR0IxODAzMC4gICovCisjIGlmIGRlZmluZWQgX19ocHV4CisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBtYnNjaHIgcnBsX21ic2NociAvKiBhdm9pZCBjb2xsaXNpb24gd2l0aCBIUC1VWCBmdW5jdGlvbiAqLworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG1ic2NociwgY2hhciAqLCAoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAobWJzY2hyLCBjaGFyICosIChjb25zdCBjaGFyICpzdHJpbmcsIGludCBjKSk7CisjIGVsc2UKK19HTF9GVU5DREVDTF9TWVMgKG1ic2NociwgY2hhciAqLCAoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1NZUyAobWJzY2hyLCBjaGFyICosIChjb25zdCBjaGFyICpzdHJpbmcsIGludCBjKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChtYnNjaHIpOworI2VuZGlmCisKKyNpZiAxCisvKiBMb2NhdGUgdGhlIGxhc3Qgc2luZ2xlLWJ5dGUgY2hhcmFjdGVyIEMgaW4gdGhlIGNoYXJhY3RlciBzdHJpbmcgU1RSSU5HLAorICAgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gaXQuICBSZXR1cm4gTlVMTCBpZiBDIGlzIG5vdCBmb3VuZCBpbiBTVFJJTkcuCisgICBVbmxpa2Ugc3RycmNocigpLCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGNvcnJlY3RseSBpbiBtdWx0aWJ5dGUgbG9jYWxlcyB3aXRoCisgICBlbmNvZGluZ3Mgc3VjaCBhcyBHQjE4MDMwLiAgKi8KKyMgaWYgZGVmaW5lZCBfX2hwdXggfHwgZGVmaW5lZCBfX0lOVEVSSVgKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIG1ic3JjaHIgcnBsX21ic3JjaHIgLyogYXZvaWQgY29sbGlzaW9uIHdpdGggc3lzdGVtIGZ1bmN0aW9uICovCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobWJzcmNociwgY2hhciAqLCAoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChtYnNyY2hyLCBjaGFyICosIChjb25zdCBjaGFyICpzdHJpbmcsIGludCBjKSk7CisjIGVsc2UKK19HTF9GVU5DREVDTF9TWVMgKG1ic3JjaHIsIGNoYXIgKiwgKGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1NZUyAobWJzcmNociwgY2hhciAqLCAoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgYykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobWJzcmNocik7CisjZW5kaWYKKworI2lmIDAKKy8qIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGNoYXJhY3RlciBzdHJpbmcgTkVFRExFIGluIHRoZSBjaGFyYWN0ZXIKKyAgIHN0cmluZyBIQVlTVEFDSy4gIFJldHVybiBOVUxMIGlmIE5FRURMRSBpcyBub3QgZm91bmQgaW4gSEFZU1RBQ0suCisgICBVbmxpa2Ugc3Ryc3RyKCksIHRoaXMgZnVuY3Rpb24gd29ya3MgY29ycmVjdGx5IGluIG11bHRpYnl0ZSBsb2NhbGVzIHdpdGgKKyAgIGVuY29kaW5ncyBkaWZmZXJlbnQgZnJvbSBVVEYtOC4gICovCitfR0xfRVhURVJOX0MgY2hhciAqIG1ic3N0ciAoY29uc3QgY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSkKKyAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKTsKKyNlbmRpZgorCisjaWYgMAorLyogQ29tcGFyZSB0aGUgY2hhcmFjdGVyIHN0cmluZ3MgUzEgYW5kIFMyLCBpZ25vcmluZyBjYXNlLCByZXR1cm5pbmcgbGVzcyB0aGFuLAorICAgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIHplcm8gaWYgUzEgaXMgbGV4aWNvZ3JhcGhpY2FsbHkgbGVzcyB0aGFuLCBlcXVhbCB0bworICAgb3IgZ3JlYXRlciB0aGFuIFMyLgorICAgTm90ZTogVGhpcyBmdW5jdGlvbiBtYXksIGluIG11bHRpYnl0ZSBsb2NhbGVzLCByZXR1cm4gMCBmb3Igc3RyaW5ncyBvZgorICAgZGlmZmVyZW50IGxlbmd0aHMhCisgICBVbmxpa2Ugc3RyY2FzZWNtcCgpLCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGNvcnJlY3RseSBpbiBtdWx0aWJ5dGUgbG9jYWxlcy4gICovCitfR0xfRVhURVJOX0MgaW50IG1ic2Nhc2VjbXAgKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMikKKyAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKTsKKyNlbmRpZgorCisjaWYgMAorLyogQ29tcGFyZSB0aGUgaW5pdGlhbCBzZWdtZW50IG9mIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIFMxIGNvbnNpc3Rpbmcgb2YgYXQgbW9zdAorICAgTiBjaGFyYWN0ZXJzIHdpdGggdGhlIGluaXRpYWwgc2VnbWVudCBvZiB0aGUgY2hhcmFjdGVyIHN0cmluZyBTMiBjb25zaXN0aW5nCisgICBvZiBhdCBtb3N0IE4gY2hhcmFjdGVycywgaWdub3JpbmcgY2FzZSwgcmV0dXJuaW5nIGxlc3MgdGhhbiwgZXF1YWwgdG8gb3IKKyAgIGdyZWF0ZXIgdGhhbiB6ZXJvIGlmIHRoZSBpbml0aWFsIHNlZ21lbnQgb2YgUzEgaXMgbGV4aWNvZ3JhcGhpY2FsbHkgbGVzcworICAgdGhhbiwgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIHRoZSBpbml0aWFsIHNlZ21lbnQgb2YgUzIuCisgICBOb3RlOiBUaGlzIGZ1bmN0aW9uIG1heSwgaW4gbXVsdGlieXRlIGxvY2FsZXMsIHJldHVybiAwIGZvciBpbml0aWFsIHNlZ21lbnRzCisgICBvZiBkaWZmZXJlbnQgbGVuZ3RocyEKKyAgIFVubGlrZSBzdHJuY2FzZWNtcCgpLCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGNvcnJlY3RseSBpbiBtdWx0aWJ5dGUgbG9jYWxlcy4KKyAgIEJ1dCBiZXdhcmUgdGhhdCBOIGlzIG5vdCBhIGJ5dGUgY291bnQgYnV0IGEgY2hhcmFjdGVyIGNvdW50ISAgKi8KK19HTF9FWFRFUk5fQyBpbnQgbWJzbmNhc2VjbXAgKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IG4pCisgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSk7CisjZW5kaWYKKworI2lmIDAKKy8qIENvbXBhcmUgdGhlIGluaXRpYWwgc2VnbWVudCBvZiB0aGUgY2hhcmFjdGVyIHN0cmluZyBTVFJJTkcgY29uc2lzdGluZyBvZgorICAgYXQgbW9zdCBtYnNsZW4gKFBSRUZJWCkgY2hhcmFjdGVycyB3aXRoIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIFBSRUZJWCwKKyAgIGlnbm9yaW5nIGNhc2UuICBJZiB0aGUgdHdvIG1hdGNoLCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBieXRlCisgICBhZnRlciB0aGlzIHByZWZpeCBpbiBTVFJJTkcuICBPdGhlcndpc2UsIHJldHVybiBOVUxMLgorICAgTm90ZTogVGhpcyBmdW5jdGlvbiBtYXksIGluIG11bHRpYnl0ZSBsb2NhbGVzLCByZXR1cm4gbm9uLU5VTEwgaWYgU1RSSU5HCisgICBpcyBvZiBzbWFsbGVyIGxlbmd0aCB0aGFuIFBSRUZJWCEKKyAgIFVubGlrZSBzdHJuY2FzZWNtcCgpLCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGNvcnJlY3RseSBpbiBtdWx0aWJ5dGUKKyAgIGxvY2FsZXMuICAqLworX0dMX0VYVEVSTl9DIGNoYXIgKiBtYnNwY2FzZWNtcCAoY29uc3QgY2hhciAqc3RyaW5nLCBjb25zdCBjaGFyICpwcmVmaXgpCisgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSk7CisjZW5kaWYKKworI2lmIDAKKy8qIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGNoYXJhY3RlciBzdHJpbmcgTkVFRExFIGluIHRoZSBjaGFyYWN0ZXIKKyAgIHN0cmluZyBIQVlTVEFDSywgdXNpbmcgY2FzZS1pbnNlbnNpdGl2ZSBjb21wYXJpc29uLgorICAgTm90ZTogVGhpcyBmdW5jdGlvbiBtYXksIGluIG11bHRpYnl0ZSBsb2NhbGVzLCByZXR1cm4gc3VjY2VzcyBldmVuIGlmCisgICBzdHJsZW4gKGhheXN0YWNrKSA8IHN0cmxlbiAobmVlZGxlKSAhCisgICBVbmxpa2Ugc3RyY2FzZXN0cigpLCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGNvcnJlY3RseSBpbiBtdWx0aWJ5dGUgbG9jYWxlcy4gICovCitfR0xfRVhURVJOX0MgY2hhciAqIG1ic2Nhc2VzdHIgKGNvbnN0IGNoYXIgKmhheXN0YWNrLCBjb25zdCBjaGFyICpuZWVkbGUpCisgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSk7CisjZW5kaWYKKworI2lmIDAKKy8qIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2UgaW4gdGhlIGNoYXJhY3RlciBzdHJpbmcgU1RSSU5HIG9mIGFueSBjaGFyYWN0ZXIKKyAgIGluIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIEFDQ0VQVC4gIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlCisgICBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZyB0byB0aGlzIG9jY3VycmVuY2UsIG9yIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmluZworICAgaWYgbm9uZSBleGlzdHMuCisgICBVbmxpa2Ugc3RyY3NwbigpLCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGNvcnJlY3RseSBpbiBtdWx0aWJ5dGUgbG9jYWxlcy4gICovCitfR0xfRVhURVJOX0Mgc2l6ZV90IG1ic2NzcG4gKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqYWNjZXB0KQorICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpOworI2VuZGlmCisKKyNpZiAwCisvKiBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIGluIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIFNUUklORyBvZiBhbnkgY2hhcmFjdGVyCisgICBpbiB0aGUgY2hhcmFjdGVyIHN0cmluZyBBQ0NFUFQuICBSZXR1cm4gdGhlIHBvaW50ZXIgdG8gaXQsIG9yIE5VTEwgaWYgbm9uZQorICAgZXhpc3RzLgorICAgVW5saWtlIHN0cnBicmsoKSwgdGhpcyBmdW5jdGlvbiB3b3JrcyBjb3JyZWN0bHkgaW4gbXVsdGlieXRlIGxvY2FsZXMuICAqLworIyBpZiBkZWZpbmVkIF9faHB1eAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgbWJzcGJyayBycGxfbWJzcGJyayAvKiBhdm9pZCBjb2xsaXNpb24gd2l0aCBIUC1VWCBmdW5jdGlvbiAqLworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG1ic3BicmssIGNoYXIgKiwgKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqYWNjZXB0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKG1ic3BicmssIGNoYXIgKiwgKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqYWNjZXB0KSk7CisjIGVsc2UKK19HTF9GVU5DREVDTF9TWVMgKG1ic3BicmssIGNoYXIgKiwgKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqYWNjZXB0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19TWVMgKG1ic3BicmssIGNoYXIgKiwgKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqYWNjZXB0KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChtYnNwYnJrKTsKKyNlbmRpZgorCisjaWYgMAorLyogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBpbiB0aGUgY2hhcmFjdGVyIHN0cmluZyBTVFJJTkcgb2YgYW55IGNoYXJhY3RlcgorICAgbm90IGluIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIFJFSkVDVC4gIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlCisgICBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZyB0byB0aGlzIG9jY3VycmVuY2UsIG9yIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmluZworICAgaWYgbm9uZSBleGlzdHMuCisgICBVbmxpa2Ugc3Ryc3BuKCksIHRoaXMgZnVuY3Rpb24gd29ya3MgY29ycmVjdGx5IGluIG11bHRpYnl0ZSBsb2NhbGVzLiAgKi8KK19HTF9FWFRFUk5fQyBzaXplX3QgbWJzc3BuIChjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKnJlamVjdCkKKyAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKTsKKyNlbmRpZgorCisjaWYgMAorLyogU2VhcmNoIHRoZSBuZXh0IGRlbGltaXRlciAobXVsdGlieXRlIGNoYXJhY3RlciBsaXN0ZWQgaW4gdGhlIGNoYXJhY3RlcgorICAgc3RyaW5nIERFTElNKSBzdGFydGluZyBhdCB0aGUgY2hhcmFjdGVyIHN0cmluZyAqU1RSSU5HUC4KKyAgIElmIG9uZSBpcyBmb3VuZCwgb3ZlcndyaXRlIGl0IHdpdGggYSBOVUwsIGFuZCBhZHZhbmNlICpTVFJJTkdQIHRvIHBvaW50CisgICB0byB0aGUgbmV4dCBtdWx0aWJ5dGUgY2hhcmFjdGVyIGFmdGVyIGl0LiAgT3RoZXJ3aXNlLCBzZXQgKlNUUklOR1AgdG8gTlVMTC4KKyAgIElmICpTVFJJTkdQIHdhcyBhbHJlYWR5IE5VTEwsIG5vdGhpbmcgaGFwcGVucy4KKyAgIFJldHVybiB0aGUgb2xkIHZhbHVlIG9mICpTVFJJTkdQLgorCisgICBUaGlzIGlzIGEgdmFyaWFudCBvZiBtYnN0b2tfcigpIHRoYXQgc3VwcG9ydHMgZW1wdHkgZmllbGRzLgorCisgICBDYXZlYXQ6IEl0IG1vZGlmaWVzIHRoZSBvcmlnaW5hbCBzdHJpbmcuCisgICBDYXZlYXQ6IFRoZXNlIGZ1bmN0aW9ucyBjYW5ub3QgYmUgdXNlZCBvbiBjb25zdGFudCBzdHJpbmdzLgorICAgQ2F2ZWF0OiBUaGUgaWRlbnRpdHkgb2YgdGhlIGRlbGltaXRpbmcgY2hhcmFjdGVyIGlzIGxvc3QuCisKKyAgIFNlZSBhbHNvIG1ic3Rva19yKCkuICAqLworX0dMX0VYVEVSTl9DIGNoYXIgKiBtYnNzZXAgKGNoYXIgKipzdHJpbmdwLCBjb25zdCBjaGFyICpkZWxpbSkKKyAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpOworI2VuZGlmCisKKyNpZiAwCisvKiBQYXJzZSB0aGUgY2hhcmFjdGVyIHN0cmluZyBTVFJJTkcgaW50byB0b2tlbnMgc2VwYXJhdGVkIGJ5IGNoYXJhY3RlcnMgaW4KKyAgIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIERFTElNLgorICAgSWYgU1RSSU5HIGlzIE5VTEwsIHRoZSBzYXZlZCBwb2ludGVyIGluIFNBVkVfUFRSIGlzIHVzZWQgYXMKKyAgIHRoZSBuZXh0IHN0YXJ0aW5nIHBvaW50LiAgRm9yIGV4YW1wbGU6CisgICAgICAgIGNoYXIgc1tdID0gIi1hYmMtPS1kZWYiOworICAgICAgICBjaGFyICpzcDsKKyAgICAgICAgeCA9IG1ic3Rva19yKHMsICItIiwgJnNwKTsgICAgICAvLyB4ID0gImFiYyIsIHNwID0gIj0tZGVmIgorICAgICAgICB4ID0gbWJzdG9rX3IoTlVMTCwgIi09IiwgJnNwKTsgIC8vIHggPSAiZGVmIiwgc3AgPSBOVUxMCisgICAgICAgIHggPSBtYnN0b2tfcihOVUxMLCAiPSIsICZzcCk7ICAgLy8geCA9IE5VTEwKKyAgICAgICAgICAgICAgICAvLyBzID0gImFiY1wwLWRlZlwwIgorCisgICBDYXZlYXQ6IEl0IG1vZGlmaWVzIHRoZSBvcmlnaW5hbCBzdHJpbmcuCisgICBDYXZlYXQ6IFRoZXNlIGZ1bmN0aW9ucyBjYW5ub3QgYmUgdXNlZCBvbiBjb25zdGFudCBzdHJpbmdzLgorICAgQ2F2ZWF0OiBUaGUgaWRlbnRpdHkgb2YgdGhlIGRlbGltaXRpbmcgY2hhcmFjdGVyIGlzIGxvc3QuCisKKyAgIFNlZSBhbHNvIG1ic3NlcCgpLiAgKi8KK19HTF9FWFRFUk5fQyBjaGFyICogbWJzdG9rX3IgKGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqZGVsaW0sIGNoYXIgKipzYXZlX3B0cikKKyAgICAgX0dMX0FSR19OT05OVUxMICgoMiwgMykpOworI2VuZGlmCisKKy8qIE1hcCBhbnkgaW50LCB0eXBpY2FsbHkgZnJvbSBlcnJubywgaW50byBhbiBlcnJvciBtZXNzYWdlLiAgKi8KKyNpZiAxCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgc3RyZXJyb3IKKyMgICBkZWZpbmUgc3RyZXJyb3IgcnBsX3N0cmVycm9yCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc3RyZXJyb3IsIGNoYXIgKiwgKGludCkpOworX0dMX0NYWEFMSUFTX1JQTCAoc3RyZXJyb3IsIGNoYXIgKiwgKGludCkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChzdHJlcnJvciwgY2hhciAqLCAoaW50KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzdHJlcnJvcik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHN0cmVycm9yCisvKiBBc3N1bWUgc3RyZXJyb3IgaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAoc3RyZXJyb3IsICJzdHJlcnJvciBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RyZXJyb3IgdG8gZ3VhcmFudGVlIG5vbi1OVUxMIHJlc3VsdCIpOworI2VuZGlmCisKKy8qIE1hcCBhbnkgaW50LCB0eXBpY2FsbHkgZnJvbSBlcnJubywgaW50byBhbiBlcnJvciBtZXNzYWdlLiAgTXVsdGl0aHJlYWQtc2FmZS4KKyAgIFVzZXMgdGhlIFBPU0lYIGRlY2xhcmF0aW9uLCBub3QgdGhlIGdsaWJjIGRlY2xhcmF0aW9uLiAgKi8KKyNpZiAxCisjIGlmIDEKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgc3RyZXJyb3JfcgorIyAgIGRlZmluZSBzdHJlcnJvcl9yIHJwbF9zdHJlcnJvcl9yCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc3RyZXJyb3JfciwgaW50LCAoaW50IGVycm51bSwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoc3RyZXJyb3JfciwgaW50LCAoaW50IGVycm51bSwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChzdHJlcnJvcl9yLCBpbnQsIChpbnQgZXJybnVtLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc3RyZXJyb3JfciwgaW50LCAoaW50IGVycm51bSwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKSk7CisjIGVuZGlmCisjIGlmIDEKK19HTF9DWFhBTElBU1dBUk4gKHN0cmVycm9yX3IpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJlcnJvcl9yCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RSRVJST1JfUgorX0dMX1dBUk5fT05fVVNFIChzdHJlcnJvcl9yLCAic3RyZXJyb3JfciBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RyZXJyb3Jfci1wb3NpeCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBzdHJzaWduYWwgcnBsX3N0cnNpZ25hbAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHN0cnNpZ25hbCwgY2hhciAqLCAoaW50IF9fc2lnKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzdHJzaWduYWwsIGNoYXIgKiwgKGludCBfX3NpZykpOworIyBlbHNlCisjICBpZiAhIDEKK19HTF9GVU5DREVDTF9TWVMgKHN0cnNpZ25hbCwgY2hhciAqLCAoaW50IF9fc2lnKSk7CisjICBlbmRpZgorLyogTmVlZCB0byBjYXN0LCBiZWNhdXNlIG9uIEN5Z3dpbiAxLjUueCBzeXN0ZW1zLCB0aGUgcmV0dXJuIHR5cGUgaXMKKyAgICdjb25zdCBjaGFyIConLiAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVCAoc3Ryc2lnbmFsLCBjaGFyICosIChpbnQgX19zaWcpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHN0cnNpZ25hbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHN0cnNpZ25hbAorIyBpZiBIQVZFX1JBV19ERUNMX1NUUlNJR05BTAorX0dMX1dBUk5fT05fVVNFIChzdHJzaWduYWwsICJzdHJzaWduYWwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHN0cnNpZ25hbCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMQorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoc3RydmVyc2NtcCwgaW50LCAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc3RydmVyc2NtcCwgaW50LCAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopKTsKK19HTF9DWFhBTElBU1dBUk4gKHN0cnZlcnNjbXApOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJ2ZXJzY21wCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RSVkVSU0NNUAorX0dMX1dBUk5fT05fVVNFIChzdHJ2ZXJzY21wLCAic3RydmVyc2NtcCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RydmVyc2NtcCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNlbmRpZiAvKiBfR0xfU1RSSU5HX0ggKi8KKyNlbmRpZiAvKiBfR0xfU1RSSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2xpbnV4LWxpYi9zeXMvc3RhdC5oIGIvbGludXgtbGliL3N5cy9zdGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBhZTk4MwotLS0gL2Rldi9udWxsCisrKyBiL2xpbnV4LWxpYi9zeXMvc3RhdC5oCkBAIC0wLDAgKzEsMTA0MCBAQAorLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLworLyogUHJvdmlkZSBhIG1vcmUgY29tcGxldGUgc3lzL3N0YXQgaGVhZGVyIGZpbGUuCisgICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBXcml0dGVuIGJ5IEVyaWMgQmxha2UsIFBhdWwgRWdnZXJ0LCBhbmQgSmltIE1leWVyaW5nLiAgKi8KKworLyogVGhpcyBmaWxlIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgb24gcGxhdGZvcm1zIHdoZXJlIDxzeXMvc3RhdC5oPiBpcworICAgaW5jb21wbGV0ZS4gIEl0IGlzIGludGVuZGVkIHRvIHByb3ZpZGUgZGVmaW5pdGlvbnMgYW5kIHByb3RvdHlwZXMKKyAgIG5lZWRlZCBieSBhbiBhcHBsaWNhdGlvbi4gIFN0YXJ0IHdpdGggd2hhdCB0aGUgc3lzdGVtIHByb3ZpZGVzLiAgKi8KKworI2lmIF9fR05VQ19fID49IDMKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkIF9fbmVlZF9zeXN0ZW1fc3lzX3N0YXRfaAorLyogU3BlY2lhbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24uICAqLworCisjaW5jbHVkZV9uZXh0IDxzeXMvc3RhdC5oPgorCisjZWxzZQorLyogTm9ybWFsIGludm9jYXRpb24gY29udmVudGlvbi4gICovCisKKyNpZm5kZWYgX0dMX1NZU19TVEFUX0gKKworLyogR2V0IG5saW5rX3QuCisgICBNYXkgYWxzbyBkZWZpbmUgb2ZmX3QgdG8gYSA2NC1iaXQgdHlwZSBvbiBuYXRpdmUgV2luZG93cy4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKy8qIEdldCBzdHJ1Y3QgdGltZXNwZWMuICAqLworI2luY2x1ZGUgPHRpbWUuaD4KKworLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworI2luY2x1ZGVfbmV4dCA8c3lzL3N0YXQuaD4KKworI2lmbmRlZiBfR0xfU1lTX1NUQVRfSAorI2RlZmluZSBfR0xfU1lTX1NUQVRfSAorCisvKiBUaGUgZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTCBldGMuIGFyZSBjb3BpZWQgaGVyZS4gICovCisjaWZuZGVmIF9HTF9DWFhERUZTX0gKKyNkZWZpbmUgX0dMX0NYWERFRlNfSAorCisvKiBUaGUgdGhyZWUgbW9zdCBmcmVxdWVudCB1c2UgY2FzZXMgb2YgdGhlc2UgbWFjcm9zIGFyZToKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgc3Vic3RpdHV0ZSBmb3IgYSBmdW5jdGlvbiB0aGF0IGlzIG1pc3Npbmcgb24gc29tZQorICAgICBwbGF0Zm9ybXMsIGJ1dCBpcyBkZWNsYXJlZCBhbmQgd29ya3MgZmluZSBvbiB0aGUgcGxhdGZvcm1zIG9uIHdoaWNoCisgICAgIGl0IGV4aXN0czoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmICFASEFWRV9GT09ACisgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIGFsbCBwbGF0Zm9ybXMsCisgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIHBsYXRmb3JtczoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorICAgICAgICMgICB1bmRlZiBmb28KKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworICAgICAgICMgZWxzZQorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIHNvbWUgcGxhdGZvcm1zCisgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIG9mIHRoZW0gYW5kCisgICAgIGlzIGFkZGl0aW9uYWxseSBlaXRoZXIgbWlzc2luZyBvciB1bmRlY2xhcmVkIG9uIHNvbWUgb3RoZXIgcGxhdGZvcm1zOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisgICAgICAgIyAgIHVuZGVmIGZvbworICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CisgICAgICAgIyBlbHNlCisgICAgICAgIyAgaWYgIUBIQVZFX0ZPT0AgICBvciAgIGlmICFASEFWRV9ERUNMX0ZPT0AKKyAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorKi8KKworLyogX0dMX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuICJDIgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4KKyNlbmRpZgorCisvKiBfR0xfRlVOQ0RFQ0xfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGRlY2xhcmVzIGEgcmVwbGFjZW1lbnQgZnVuY3Rpb24sIG5hbWVkIHJwbF9mdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9GVU5DREVDTF9SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICovCisjZGVmaW5lIF9HTF9GVU5DREVDTF9SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0ZVTkNERUNMX1JQTF8xIChycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKQorI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMXzEocnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9FWFRFUk5fQyByZXR0eXBlIHJwbF9mdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKworLyogX0dMX0ZVTkNERUNMX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBkZWNsYXJlcyB0aGUgc3lzdGVtIGZ1bmN0aW9uLCBuYW1lZCBmdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9GVU5DREVDTF9TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICovCisjZGVmaW5lIF9HTF9GVU5DREVDTF9TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0VYVEVSTl9DIHJldHR5cGUgZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisKKy8qIF9HTF9DWFhBTElBU19SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHJwbF9mdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFIGlzIGRlZmluZWQuCisgICBFeGFtcGxlOgorICAgICBfR0xfQ1hYQUxJQVNfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKyAqLworI2RlZmluZSBfR0xfQ1hYQUxJQVNfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycykKKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OnJwbF9mdW5jOyAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gcnBsX2Z1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQKKyAgIGRlY2xhcmF0aW9uLiAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IKKyAgIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpycGxfZnVuYyk7ICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHRoZSBzeXN0ZW0gcHJvdmlkZWQgZnVuY3Rpb24gZnVuYywgaWYgR05VTElCX05BTUVTUEFDRQorICAgaXMgZGVmaW5lZC4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9DWFhBTElBU19TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyAgLyogSWYgd2Ugd2VyZSB0byB3cml0ZQorICAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOworICAgICBsaWtlIGFib3ZlIGluIF9HTF9DWFhBTElBU19SUExfMSwgdGhlIGNvbXBpbGVyIGNvdWxkIG9wdGltaXplIGNhbGxzCisgICAgIGJldHRlciAocmVtb3ZlIGFuIGluZGlyZWN0aW9uIHRocm91Z2ggYSAnc3RhdGljJyBwb2ludGVyIHZhcmlhYmxlKSwKKyAgICAgYnV0IHRoZW4gdGhlIF9HTF9DWFhBTElBU1dBUk4gbWFjcm8gYmVsb3cgd291bGQgY2F1c2UgYSB3YXJuaW5nIG5vdCBvbmx5CisgICAgIGZvciB1c2VzIG9mIDo6ZnVuYyBidXQgYWxzbyBmb3IgdXNlcyBvZiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jLiAgKi8KKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGZ1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgZGVjbGFyYXRpb24uCisgICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvciB0aGF0IHdvdWxkCisgICBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpmdW5jKTsgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMsIHJldHR5cGUyLCBwYXJhbWV0ZXJzMik7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGlzIHBpY2tlZCBhbW9uZyBhIHNldCBvZiBvdmVybG9hZGVkIGZ1bmN0aW9ucywKKyAgIG5hbWVseSB0aGUgb25lIHdpdGggcmV0dHlwZTIgYW5kIHBhcmFtZXRlcnMyLiAgVHdvIGNvbnNlY3V0aXZlIGNhc3RzCisgICBhcmUgdXNlZCB0byBzaWxlbmNlIHRoZSAiY2Fubm90IGZpbmQgYSBtYXRjaCIgYW5kICJpbnZhbGlkIGNvbnZlcnNpb24iCisgICBlcnJvcnMgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisgIC8qIFRoZSBvdXRlciBjYXN0IG11c3QgYmUgYSByZWludGVycHJldF9jYXN0LgorICAgICBUaGUgaW5uZXIgY2FzdDogV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNldCBvZiBvdmVybG9hZGVkCisgICAgIGZ1bmN0aW9ucywgaXQgd29ya3MgYXMgYSBzdGF0aWNfY2FzdDw+LCBjaG9vc2luZyB0aGUgZGVzaWduYXRlZCB2YXJpYW50LgorICAgICBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2luZ2xlIHZhcmlhbnQsIGl0IHdvcmtzIGFzIGEKKyAgICAgcmVpbnRlcnByZXRfY2FzdDw+LiBUaGUgcGFyZW50aGVzaXplZCBjYXN0IHN5bnRheCB3b3JrcyBib3RoIHdheXMuICAqLworIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChyZXR0eXBlMigqKXBhcmFtZXRlcnMyKSg6OmZ1bmMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTV0FSTiAoZnVuYyk7CisgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiA6OmZ1bmMgaXMgdXNlZCBidXQgbm90IHdoZW4KKyAgIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gIGZ1bmMgbXVzdCBiZSBkZWZpbmVkIHdpdGhvdXQgb3ZlcmxvYWRlZAorICAgdmFyaWFudHMuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk5fMSAoZnVuYywgR05VTElCX05BTUVTUEFDRSkKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMShmdW5jLG5hbWVzcGFjZSkgXAorICAgX0dMX0NYWEFMSUFTV0FSTl8yIChmdW5jLCBuYW1lc3BhY2UpCisvKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKyAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworIyBpZiAhX19PUFRJTUlaRV9fCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgX0dMX1dBUk5fT05fVVNFIChmdW5jLCBcCisgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworIyBlbHNlCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNXQVJOMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiB0aGUgZ2l2ZW4gb3ZlcmxvYWRlZCB2YXJpYW50IG9mIDo6ZnVuYworICAgaXMgdXNlZCBidXQgbm90IHdoZW4gR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk4xXzEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdOVUxJQl9OQU1FU1BBQ0UpCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgX0dMX0NYWEFMSUFTV0FSTjFfMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgbmFtZXNwYWNlKQorLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKyMgaWYgIV9fT1BUSU1JWkVfXworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisjZW5kaWYgLyogX0dMX0NYWERFRlNfSCAqLworCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwgaXMgY29waWVkIGhlcmUuICAqLworLyogX0dMX0FSR19OT05OVUxMKChuLC4uLixtKSkgdGVsbHMgdGhlIGNvbXBpbGVyIGFuZCBzdGF0aWMgYW5hbHl6ZXIgdG9vbHMKKyAgIHRoYXQgdGhlIHZhbHVlcyBwYXNzZWQgYXMgYXJndW1lbnRzIG4sIC4uLiwgbSBtdXN0IGJlIG5vbi1OVUxMIHBvaW50ZXJzLgorICAgbiA9IDEgc3RhbmRzIGZvciB0aGUgZmlyc3QgYXJndW1lbnQsIG4gPSAyIGZvciB0aGUgc2Vjb25kIGFyZ3VtZW50IGV0Yy4gICovCisjaWZuZGVmIF9HTF9BUkdfTk9OTlVMTAorIyBpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSB8fCBfX0dOVUNfXyA+IDMKKyMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKSBfX2F0dHJpYnV0ZV9fICgoX19ub25udWxsX18gcGFyYW1zKSkKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpCisjIGVuZGlmCisjZW5kaWYKKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFCisKKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCisvKiBBIGNvbXBpbGVyIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDQuMy4wIGFuZCBsYXRlci4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobWVzc2FnZSkpKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24KKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisjIGVuZGlmCisjZW5kaWYKKworLyogX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuY3Rpb24sIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsICJzdHJpbmciKQorICAgaXMgbGlrZSBfR0xfV0FSTl9PTl9VU0UgKGZ1bmN0aW9uLCAic3RyaW5nIiksIGV4Y2VwdCB0aGF0IHRoZSBmdW5jdGlvbiBpcworICAgZGVjbGFyZWQgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLCBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLAorICAgYW5kIGF0dHJpYnV0ZXMuCisgICBUaGlzIHZhcmlhbnQgaXMgdXNlZnVsIGZvciBvdmVybG9hZGVkIGZ1bmN0aW9ucyBpbiBDKysuIF9HTF9XQVJOX09OX1VTRSBkb2VzCisgICBub3Qgd29yayBpbiB0aGlzIGNhc2UuICAqLworI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0VfQ1hYCisjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyBcCisgICAgIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobXNnKSkpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisvKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBfR0xfV0FSTl9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX0VYVEVSTl9DCisjIGlmIGRlZmluZWQgX19jcGx1c3BsdXMKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4gIkMiCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4KKyMgZW5kaWYKKyNlbmRpZgorCisvKiBCZWZvcmUgZG9pbmcgIiNkZWZpbmUgbWtkaXIgcnBsX21rZGlyIiBiZWxvdywgd2UgbmVlZCB0byBpbmNsdWRlIGFsbAorICAgaGVhZGVycyB0aGF0IG1heSBkZWNsYXJlIG1rZGlyKCkuICBOYXRpdmUgV2luZG93cyBwbGF0Zm9ybXMgZGVjbGFyZSBta2RpcgorICAgaW4gPGlvLmg+IGFuZC9vciA8ZGlyZWN0Lmg+LCBub3QgaW4gPHVuaXN0ZC5oPi4gICovCisjaWYgKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXworIyBpbmNsdWRlIDxpby5oPiAgICAgLyogbWluZ3czMiwgbWluZ3c2NCAqLworIyBpbmNsdWRlIDxkaXJlY3QuaD4gLyogbWluZ3c2NCwgTVNWQyA5ICovCisjZW5kaWYKKworLyogTmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zIGRlY2xhcmUgdW1hc2soKSBpbiA8aW8uaD4uICAqLworI2lmIDAgJiYgKChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgISBkZWZpbmVkIF9fQ1lHV0lOX18pCisjIGluY2x1ZGUgPGlvLmg+CisjZW5kaWYKKworLyogTGFyZ2UgRmlsZSBTdXBwb3J0IG9uIG5hdGl2ZSBXaW5kb3dzLiAgKi8KKyNpZiAwCisjIGRlZmluZSBzdGF0IF9zdGF0aTY0CisjZW5kaWYKKworI2lmbmRlZiBTX0lGSUZPCisjIGlmZGVmIF9TX0lGSUZPCisjICBkZWZpbmUgU19JRklGTyBfU19JRklGTworIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgU19JRk1UCisjIGRlZmluZSBTX0lGTVQgMDE3MDAwMAorI2VuZGlmCisKKyNpZiBTVEFUX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgU19JU0JMSworIyB1bmRlZiBTX0lTQ0hSCisjIHVuZGVmIFNfSVNESVIKKyMgdW5kZWYgU19JU0ZJRk8KKyMgdW5kZWYgU19JU0xOSworIyB1bmRlZiBTX0lTTkFNCisjIHVuZGVmIFNfSVNNUEIKKyMgdW5kZWYgU19JU01QQworIyB1bmRlZiBTX0lTTldLCisjIHVuZGVmIFNfSVNSRUcKKyMgdW5kZWYgU19JU1NPQ0sKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNCTEsKKyMgaWZkZWYgU19JRkJMSworIyAgZGVmaW5lIFNfSVNCTEsobSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZCTEspCisjIGVsc2UKKyMgIGRlZmluZSBTX0lTQkxLKG0pIDAKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNDSFIKKyMgaWZkZWYgU19JRkNIUgorIyAgZGVmaW5lIFNfSVNDSFIobSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZDSFIpCisjIGVsc2UKKyMgIGRlZmluZSBTX0lTQ0hSKG0pIDAKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNESVIKKyMgaWZkZWYgU19JRkRJUgorIyAgZGVmaW5lIFNfSVNESVIobSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZESVIpCisjIGVsc2UKKyMgIGRlZmluZSBTX0lTRElSKG0pIDAKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNET09SIC8qIFNvbGFyaXMgMi41IGFuZCB1cCAqLworIyBkZWZpbmUgU19JU0RPT1IobSkgMAorI2VuZGlmCisKKyNpZm5kZWYgU19JU0ZJRk8KKyMgaWZkZWYgU19JRklGTworIyAgZGVmaW5lIFNfSVNGSUZPKG0pICgoKG0pICYgU19JRk1UKSA9PSBTX0lGSUZPKQorIyBlbHNlCisjICBkZWZpbmUgU19JU0ZJRk8obSkgMAorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgU19JU0xOSworIyBpZmRlZiBTX0lGTE5LCisjICBkZWZpbmUgU19JU0xOSyhtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRkxOSykKKyMgZWxzZQorIyAgZGVmaW5lIFNfSVNMTksobSkgMAorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgU19JU01QQiAvKiBWNyAqLworIyBpZmRlZiBTX0lGTVBCCisjICBkZWZpbmUgU19JU01QQihtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRk1QQikKKyMgIGRlZmluZSBTX0lTTVBDKG0pICgoKG0pICYgU19JRk1UKSA9PSBTX0lGTVBDKQorIyBlbHNlCisjICBkZWZpbmUgU19JU01QQihtKSAwCisjICBkZWZpbmUgU19JU01QQyhtKSAwCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBTX0lTTkFNIC8qIFhlbml4ICovCisjIGlmZGVmIFNfSUZOQU0KKyMgIGRlZmluZSBTX0lTTkFNKG0pICgoKG0pICYgU19JRk1UKSA9PSBTX0lGTkFNKQorIyBlbHNlCisjICBkZWZpbmUgU19JU05BTShtKSAwCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBTX0lTTldLIC8qIEhQL1VYICovCisjIGlmZGVmIFNfSUZOV0sKKyMgIGRlZmluZSBTX0lTTldLKG0pICgoKG0pICYgU19JRk1UKSA9PSBTX0lGTldLKQorIyBlbHNlCisjICBkZWZpbmUgU19JU05XSyhtKSAwCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBTX0lTUE9SVCAvKiBTb2xhcmlzIDEwIGFuZCB1cCAqLworIyBkZWZpbmUgU19JU1BPUlQobSkgMAorI2VuZGlmCisKKyNpZm5kZWYgU19JU1JFRworIyBpZmRlZiBTX0lGUkVHCisjICBkZWZpbmUgU19JU1JFRyhtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRlJFRykKKyMgZWxzZQorIyAgZGVmaW5lIFNfSVNSRUcobSkgMAorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgU19JU1NPQ0sKKyMgaWZkZWYgU19JRlNPQ0sKKyMgIGRlZmluZSBTX0lTU09DSyhtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRlNPQ0spCisjIGVsc2UKKyMgIGRlZmluZSBTX0lTU09DSyhtKSAwCisjIGVuZGlmCisjZW5kaWYKKworCisjaWZuZGVmIFNfVFlQRUlTTVEKKyMgZGVmaW5lIFNfVFlQRUlTTVEocCkgMAorI2VuZGlmCisKKyNpZm5kZWYgU19UWVBFSVNUTU8KKyMgZGVmaW5lIFNfVFlQRUlTVE1PKHApIDAKKyNlbmRpZgorCisKKyNpZm5kZWYgU19UWVBFSVNTRU0KKyMgaWZkZWYgU19JTlNFTQorIyAgZGVmaW5lIFNfVFlQRUlTU0VNKHApIChTX0lTTkFNICgocCktPnN0X21vZGUpICYmIChwKS0+c3RfcmRldiA9PSBTX0lOU0VNKQorIyBlbHNlCisjICBkZWZpbmUgU19UWVBFSVNTRU0ocCkgMAorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgU19UWVBFSVNTSE0KKyMgaWZkZWYgU19JTlNIRAorIyAgZGVmaW5lIFNfVFlQRUlTU0hNKHApIChTX0lTTkFNICgocCktPnN0X21vZGUpICYmIChwKS0+c3RfcmRldiA9PSBTX0lOU0hEKQorIyBlbHNlCisjICBkZWZpbmUgU19UWVBFSVNTSE0ocCkgMAorIyBlbmRpZgorI2VuZGlmCisKKy8qIGhpZ2ggcGVyZm9ybWFuY2UgKCJjb250aWd1b3VzIGRhdGEiKSAqLworI2lmbmRlZiBTX0lTQ1RHCisjIGRlZmluZSBTX0lTQ1RHKHApIDAKKyNlbmRpZgorCisvKiBDcmF5IERNRiAoZGF0YSBtaWdyYXRpb24gZmFjaWxpdHkpOiBvZmYgbGluZSwgd2l0aCBkYXRhICAqLworI2lmbmRlZiBTX0lTT0ZECisjIGRlZmluZSBTX0lTT0ZEKHApIDAKKyNlbmRpZgorCisvKiBDcmF5IERNRiAoZGF0YSBtaWdyYXRpb24gZmFjaWxpdHkpOiBvZmYgbGluZSwgd2l0aCBubyBkYXRhICAqLworI2lmbmRlZiBTX0lTT0ZMCisjIGRlZmluZSBTX0lTT0ZMKHApIDAKKyNlbmRpZgorCisvKiA0LjRCU0Qgd2hpdGVvdXQgKi8KKyNpZm5kZWYgU19JU1dIVAorIyBkZWZpbmUgU19JU1dIVChtKSAwCisjZW5kaWYKKworLyogSWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgYXJlIHVuZGVmaW5lZCwKKyAgIGRlZmluZSB0aGVtIHRvIHRoZWlyIGRlIGZhY3RvIHN0YW5kYXJkIHZhbHVlcy4gICovCisjaWYgIVNfSVNVSUQKKyMgZGVmaW5lIFNfSVNVSUQgMDQwMDAKKyNlbmRpZgorI2lmICFTX0lTR0lECisjIGRlZmluZSBTX0lTR0lEIDAyMDAwCisjZW5kaWYKKworLyogU19JU1ZUWCBpcyBhIGNvbW1vbiBleHRlbnNpb24gdG8gUE9TSVguICAqLworI2lmbmRlZiBTX0lTVlRYCisjIGRlZmluZSBTX0lTVlRYIDAxMDAwCisjZW5kaWYKKworI2lmICFTX0lSVVNSICYmIFNfSVJFQUQKKyMgZGVmaW5lIFNfSVJVU1IgU19JUkVBRAorI2VuZGlmCisjaWYgIVNfSVJVU1IKKyMgZGVmaW5lIFNfSVJVU1IgMDA0MDAKKyNlbmRpZgorI2lmICFTX0lSR1JQCisjIGRlZmluZSBTX0lSR1JQIChTX0lSVVNSID4+IDMpCisjZW5kaWYKKyNpZiAhU19JUk9USAorIyBkZWZpbmUgU19JUk9USCAoU19JUlVTUiA+PiA2KQorI2VuZGlmCisKKyNpZiAhU19JV1VTUiAmJiBTX0lXUklURQorIyBkZWZpbmUgU19JV1VTUiBTX0lXUklURQorI2VuZGlmCisjaWYgIVNfSVdVU1IKKyMgZGVmaW5lIFNfSVdVU1IgMDAyMDAKKyNlbmRpZgorI2lmICFTX0lXR1JQCisjIGRlZmluZSBTX0lXR1JQIChTX0lXVVNSID4+IDMpCisjZW5kaWYKKyNpZiAhU19JV09USAorIyBkZWZpbmUgU19JV09USCAoU19JV1VTUiA+PiA2KQorI2VuZGlmCisKKyNpZiAhU19JWFVTUiAmJiBTX0lFWEVDCisjIGRlZmluZSBTX0lYVVNSIFNfSUVYRUMKKyNlbmRpZgorI2lmICFTX0lYVVNSCisjIGRlZmluZSBTX0lYVVNSIDAwMTAwCisjZW5kaWYKKyNpZiAhU19JWEdSUAorIyBkZWZpbmUgU19JWEdSUCAoU19JWFVTUiA+PiAzKQorI2VuZGlmCisjaWYgIVNfSVhPVEgKKyMgZGVmaW5lIFNfSVhPVEggKFNfSVhVU1IgPj4gNikKKyNlbmRpZgorCisjaWYgIVNfSVJXWFUKKyMgZGVmaW5lIFNfSVJXWFUgKFNfSVJVU1IgfCBTX0lXVVNSIHwgU19JWFVTUikKKyNlbmRpZgorI2lmICFTX0lSV1hHCisjIGRlZmluZSBTX0lSV1hHIChTX0lSR1JQIHwgU19JV0dSUCB8IFNfSVhHUlApCisjZW5kaWYKKyNpZiAhU19JUldYTworIyBkZWZpbmUgU19JUldYTyAoU19JUk9USCB8IFNfSVdPVEggfCBTX0lYT1RIKQorI2VuZGlmCisKKy8qIFNfSVhVR08gaXMgYSBjb21tb24gZXh0ZW5zaW9uIHRvIFBPU0lYLiAgKi8KKyNpZiAhU19JWFVHTworIyBkZWZpbmUgU19JWFVHTyAoU19JWFVTUiB8IFNfSVhHUlAgfCBTX0lYT1RIKQorI2VuZGlmCisKKyNpZm5kZWYgU19JUldYVUdPCisjIGRlZmluZSBTX0lSV1hVR08gKFNfSVJXWFUgfCBTX0lSV1hHIHwgU19JUldYTykKKyNlbmRpZgorCisvKiBNYWNyb3MgZm9yIGZ1dGltZW5zIGFuZCB1dGltZW5zYXQuICAqLworI2lmbmRlZiBVVElNRV9OT1cKKyMgZGVmaW5lIFVUSU1FX05PVyAoLTEpCisjIGRlZmluZSBVVElNRV9PTUlUICgtMikKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChmY2htb2RhdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgbW9kZV90IG1vZGUsIGludCBmbGFnKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZjaG1vZGF0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlLCBtb2RlX3QgbW9kZSwgaW50IGZsYWcpKTsKK19HTF9DWFhBTElBU1dBUk4gKGZjaG1vZGF0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZmNobW9kYXQKKyMgaWYgSEFWRV9SQVdfREVDTF9GQ0hNT0RBVAorX0dMX1dBUk5fT05fVVNFIChmY2htb2RhdCwgImZjaG1vZGF0IGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG9wZW5hdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAxCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZnN0YXQKKyMgICBkZWZpbmUgZnN0YXQgcnBsX2ZzdGF0CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZnN0YXQsIGludCwgKGludCBmZCwgc3RydWN0IHN0YXQgKmJ1ZikgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKGZzdGF0LCBpbnQsIChpbnQgZmQsIHN0cnVjdCBzdGF0ICpidWYpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoZnN0YXQsIGludCwgKGludCBmZCwgc3RydWN0IHN0YXQgKmJ1ZikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZnN0YXQpOworI2VsaWYgMAorLyogQWJvdmUsIHdlIGRlZmluZSBzdGF0IHRvIF9zdGF0aTY0LiAgKi8KKyMgZGVmaW5lIGZzdGF0IF9mc3RhdGk2NAorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmc3RhdAorIyBpZiBIQVZFX1JBV19ERUNMX0ZTVEFUCitfR0xfV0FSTl9PTl9VU0UgKGZzdGF0LCAiZnN0YXQgaGFzIHBvcnRhYmlsaXR5IHByb2JsZW1zIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZnN0YXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZzdGF0YXQKKyMgICBkZWZpbmUgZnN0YXRhdCBycGxfZnN0YXRhdAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZzdGF0YXQsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQsIGNoYXIgY29uc3QgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCwgaW50IGZsYWdzKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMiwgMykpKTsKK19HTF9DWFhBTElBU19SUEwgKGZzdGF0YXQsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQsIGNoYXIgY29uc3QgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCwgaW50IGZsYWdzKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChmc3RhdGF0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCBjaGFyIGNvbnN0ICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QsIGludCBmbGFncykKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIsIDMpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZnN0YXRhdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgY2hhciBjb25zdCAqbmFtZSwgc3RydWN0IHN0YXQgKnN0LCBpbnQgZmxhZ3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGZzdGF0YXQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmc3RhdGF0CisjIGlmIEhBVkVfUkFXX0RFQ0xfRlNUQVRBVAorX0dMX1dBUk5fT05fVVNFIChmc3RhdGF0LCAiZnN0YXRhdCBpcyBub3QgcG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBvcGVuYXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorLyogVXNlIHRoZSBycGxfIHByZWZpeCBhbHNvIG9uIFNvbGFyaXMgPD0gOSwgYmVjYXVzZSBvbiBTb2xhcmlzIDkgb3VyIGZ1dGltZW5zCisgICBpbXBsZW1lbnRhdGlvbiByZWxpZXMgb24gZnV0aW1lc2F0LCB3aGljaCBvbiBTb2xhcmlzIDEwIG1ha2VzIGFuIGludm9jYXRpb24KKyAgIHRvIGZ1dGltZW5zIHRoYXQgaXMgbWVhbnQgdG8gaW52b2tlIHRoZSBsaWJjJ3MgZnV0aW1lbnMoKSwgbm90IGdudWxpYidzCisgICBmdXRpbWVucygpLiAgKi8KKyMgaWYgMCB8fCAoITEgJiYgZGVmaW5lZCBfX3N1bikKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZnV0aW1lbnMKKyMgICBkZWZpbmUgZnV0aW1lbnMgcnBsX2Z1dGltZW5zCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZnV0aW1lbnMsIGludCwgKGludCBmZCwgc3RydWN0IHRpbWVzcGVjIGNvbnN0IHRpbWVzWzJdKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmdXRpbWVucywgaW50LCAoaW50IGZkLCBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgdGltZXNbMl0pKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGZ1dGltZW5zLCBpbnQsIChpbnQgZmQsIHN0cnVjdCB0aW1lc3BlYyBjb25zdCB0aW1lc1syXSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZ1dGltZW5zLCBpbnQsIChpbnQgZmQsIHN0cnVjdCB0aW1lc3BlYyBjb25zdCB0aW1lc1syXSkpOworIyBlbmRpZgorIyBpZiAxCitfR0xfQ1hYQUxJQVNXQVJOIChmdXRpbWVucyk7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZ1dGltZW5zCisjIGlmIEhBVkVfUkFXX0RFQ0xfRlVUSU1FTlMKK19HTF9XQVJOX09OX1VTRSAoZnV0aW1lbnMsICJmdXRpbWVucyBpcyBub3QgcG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmdXRpbWVucyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisvKiBDaGFuZ2UgdGhlIG1vZGUgb2YgRklMRU5BTUUgdG8gTU9ERSwgd2l0aG91dCBkZXJlZmVyZW5jaW5nIGl0IGlmIEZJTEVOQU1FCisgICBkZW5vdGVzIGEgc3ltYm9saWMgbGluay4gICovCisjIGlmICExCisvKiBUaGUgbGNobW9kIHJlcGxhY2VtZW50IGZvbGxvd3Mgc3ltYm9saWMgbGlua3MuICBDYWxsZXJzIHNob3VsZCB0YWtlCisgICB0aGlzIGludG8gYWNjb3VudDsgbGNobW9kIHNob3VsZCBiZSBhcHBsaWVkIG9ubHkgdG8gYXJndW1lbnRzIHRoYXQKKyAgIGFyZSBrbm93biB0byBub3QgYmUgc3ltYm9saWMgbGlua3MuICBPbiBob3N0cyB0aGF0IGxhY2sgbGNobW9kLAorICAgdGhpcyBjYW4gbGVhZCB0byByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiB0aGUgY2hlY2sgYW5kIHRoZQorICAgaW52b2NhdGlvbiBvZiBsY2htb2QsIGJ1dCB3ZSBrbm93IG9mIG5vIHdvcmthcm91bmRzIHRoYXQgYXJlCisgICByZWxpYWJsZSBpbiBnZW5lcmFsLiAgWW91IG1pZ2h0IHRyeSByZXF1ZXN0aW5nIHN1cHBvcnQgZm9yIGxjaG1vZAorICAgZnJvbSB5b3VyIG9wZXJhdGluZyBzeXN0ZW0gc3VwcGxpZXIuICAqLworIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgbGNobW9kIGNobW9kCisjICBlbmRpZgorLyogTmVlZCB0byBjYXN0LCBiZWNhdXNlIG9uIG1pbmd3LCB0aGUgc2Vjb25kIHBhcmFtZXRlciBvZiBjaG1vZCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUuICAqLworX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEgKGxjaG1vZCwgY2htb2QsIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqZmlsZW5hbWUsIG1vZGVfdCBtb2RlKSk7CisjIGVsc2UKKyMgIGlmIDAgLyogYXNzdW1lIGFscmVhZHkgZGVjbGFyZWQgKi8KK19HTF9GVU5DREVDTF9TWVMgKGxjaG1vZCwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIG1vZGVfdCBtb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobGNobW9kLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgbW9kZV90IG1vZGUpKTsKKyMgZW5kaWYKKyMgaWYgMQorX0dMX0NYWEFMSUFTV0FSTiAobGNobW9kKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbGNobW9kCisjIGlmIEhBVkVfUkFXX0RFQ0xfTENITU9ECitfR0xfV0FSTl9PTl9VU0UgKGxjaG1vZCwgImxjaG1vZCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbGNobW9kIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgISAxCisvKiBtaW5ndyBkb2VzIG5vdCBzdXBwb3J0IHN5bWxpbmtzLCB0aGVyZWZvcmUgaXQgZG9lcyBub3QgaGF2ZSBsc3RhdC4gIEJ1dAorICAgd2l0aG91dCBsaW5rcywgc3RhdCBkb2VzIGp1c3QgZmluZS4gICovCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBsc3RhdCBzdGF0CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1JQTF8xIChsc3RhdCwgc3RhdCwgaW50LCAoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKmJ1ZikpOworIyBlbGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbHN0YXQKKyMgICBkZWZpbmUgbHN0YXQgcnBsX2xzdGF0CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobHN0YXQsIGludCwgKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpidWYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAobHN0YXQsIGludCwgKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpidWYpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAobHN0YXQsIGludCwgKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpidWYpKTsKKyMgZW5kaWYKKyMgaWYgMQorX0dMX0NYWEFMSUFTV0FSTiAobHN0YXQpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBsc3RhdAorIyBpZiBIQVZFX1JBV19ERUNMX0xTVEFUCitfR0xfV0FSTl9PTl9VU0UgKGxzdGF0LCAibHN0YXQgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGxzdGF0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgIHVuZGVmIG1rZGlyCisjICBkZWZpbmUgbWtkaXIgcnBsX21rZGlyCisjIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChta2RpciwgaW50LCAoY2hhciBjb25zdCAqbmFtZSwgbW9kZV90IG1vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAobWtkaXIsIGludCwgKGNoYXIgY29uc3QgKm5hbWUsIG1vZGVfdCBtb2RlKSk7CisjZWxzZQorLyogbWluZ3cncyBfbWtkaXIoKSBmdW5jdGlvbiBoYXMgMSBhcmd1bWVudCwgYnV0IHdlIHBhc3MgMiBhcmd1bWVudHMuCisgICBBZGRpdGlvbmFsbHksIGl0IGRlY2xhcmVzIF9ta2RpciAoYW5kIGRlcGVuZGluZyBvbiBjb21waWxlIGZsYWdzLCBhbgorICAgYWxpYXMgbWtkaXIpLCBvbmx5IGluIHRoZSBub25zdGFuZGFyZCBpbmNsdWRlcyA8ZGlyZWN0Lmg+IGFuZCA8aW8uaD4sCisgICB3aGljaCBhcmUgaW5jbHVkZWQgYWJvdmUuICAqLworIyBpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCisKKyMgIGlmICFHTlVMSUJfZGVmaW5lZF9ycGxfbWtkaXIKK3N0YXRpYyBpbnQKK3JwbF9ta2RpciAoY2hhciBjb25zdCAqbmFtZSwgbW9kZV90IG1vZGUpCit7CisgIHJldHVybiBfbWtkaXIgKG5hbWUpOworfQorIyAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9ycGxfbWtkaXIgMQorIyAgZW5kaWYKKworIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgbWtkaXIgcnBsX21rZGlyCisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1JQTCAobWtkaXIsIGludCwgKGNoYXIgY29uc3QgKm5hbWUsIG1vZGVfdCBtb2RlKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKG1rZGlyLCBpbnQsIChjaGFyIGNvbnN0ICpuYW1lLCBtb2RlX3QgbW9kZSkpOworIyBlbmRpZgorI2VuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChta2Rpcik7CisKKworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKG1rZGlyYXQsIGludCwgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgbW9kZV90IG1vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChta2RpcmF0LCBpbnQsIChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGUsIG1vZGVfdCBtb2RlKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChta2RpcmF0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbWtkaXJhdAorIyBpZiBIQVZFX1JBV19ERUNMX01LRElSQVQKK19HTF9XQVJOX09OX1VTRSAobWtkaXJhdCwgIm1rZGlyYXQgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgb3BlbmF0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBta2ZpZm8KKyMgICBkZWZpbmUgbWtmaWZvIHJwbF9ta2ZpZm8KKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChta2ZpZm8sIGludCwgKGNoYXIgY29uc3QgKmZpbGUsIG1vZGVfdCBtb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChta2ZpZm8sIGludCwgKGNoYXIgY29uc3QgKmZpbGUsIG1vZGVfdCBtb2RlKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChta2ZpZm8sIGludCwgKGNoYXIgY29uc3QgKmZpbGUsIG1vZGVfdCBtb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobWtmaWZvLCBpbnQsIChjaGFyIGNvbnN0ICpmaWxlLCBtb2RlX3QgbW9kZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobWtmaWZvKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbWtmaWZvCisjIGlmIEhBVkVfUkFXX0RFQ0xfTUtGSUZPCitfR0xfV0FSTl9PTl9VU0UgKG1rZmlmbywgIm1rZmlmbyBpcyBub3QgcG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBta2ZpZm8gZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAobWtmaWZvYXQsIGludCwgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgbW9kZV90IG1vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobWtmaWZvYXQsIGludCwgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgbW9kZV90IG1vZGUpKTsKK19HTF9DWFhBTElBU1dBUk4gKG1rZmlmb2F0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbWtmaWZvYXQKKyMgaWYgSEFWRV9SQVdfREVDTF9NS0ZJRk9BVAorX0dMX1dBUk5fT05fVVNFIChta2ZpZm9hdCwgIm1rZmlmb2F0IGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG1rZmlmb2F0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBta25vZAorIyAgIGRlZmluZSBta25vZCBycGxfbWtub2QKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChta25vZCwgaW50LCAoY2hhciBjb25zdCAqZmlsZSwgbW9kZV90IG1vZGUsIGRldl90IGRldikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChta25vZCwgaW50LCAoY2hhciBjb25zdCAqZmlsZSwgbW9kZV90IG1vZGUsIGRldl90IGRldikpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAobWtub2QsIGludCwgKGNoYXIgY29uc3QgKmZpbGUsIG1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKKy8qIE5lZWQgdG8gY2FzdCwgYmVjYXVzZSBvbiBPU0YvMSA1LjEsIHRoZSB0aGlyZCBwYXJhbWV0ZXIgaXMgJy4uLicuICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUIChta25vZCwgaW50LCAoY2hhciBjb25zdCAqZmlsZSwgbW9kZV90IG1vZGUsIGRldl90IGRldikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobWtub2QpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBta25vZAorIyBpZiBIQVZFX1JBV19ERUNMX01LTk9ECitfR0xfV0FSTl9PTl9VU0UgKG1rbm9kLCAibWtub2QgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWtub2QgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAobWtub2RhdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgbW9kZV90IG1vZGUsIGRldl90IGRldikKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChta25vZGF0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlLCBtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KSk7CitfR0xfQ1hYQUxJQVNXQVJOIChta25vZGF0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbWtub2RhdAorIyBpZiBIQVZFX1JBV19ERUNMX01LTk9EQVQKK19HTF9XQVJOX09OX1VTRSAobWtub2RhdCwgIm1rbm9kYXQgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWtmaWZvYXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMQorIyBpZiAwCisvKiBXZSBjYW4ndCB1c2UgdGhlIG9iamVjdC1saWtlICNkZWZpbmUgc3RhdCBycGxfc3RhdCwgYmVjYXVzZSBvZgorICAgc3RydWN0IHN0YXQuICBUaGlzIG1lYW5zIHRoYXQgcnBsX3N0YXQgd2lsbCBub3QgYmUgdXNlZCBpZiB0aGUgdXNlcgorICAgZG9lcyAoc3RhdCkoYSxiKS4gIE9oIHdlbGwuICAqLworIyAgaWYgZGVmaW5lZCBfQUlYICYmIGRlZmluZWQgc3RhdCAmJiBkZWZpbmVkIF9MQVJHRV9GSUxFUworICAgIC8qIFdpdGggX0xBUkdFX0ZJTEVTIGRlZmluZWQsIEFJWCAob25seSkgZGVmaW5lcyBzdGF0IHRvIHN0YXQ2NCwKKyAgICAgICBzbyB3ZSBoYXZlIHRvIHJlcGxhY2Ugc3RhdDY0KCkgaW5zdGVhZCBvZiBzdGF0KCkuICovCisjICAgdW5kZWYgc3RhdDY0CisjICAgZGVmaW5lIHN0YXQ2NChuYW1lLCBzdCkgcnBsX3N0YXQgKG5hbWUsIHN0KQorIyAgZWxpZiAwCisgICAgLyogQWJvdmUsIHdlIGRlZmluZSBzdGF0IHRvIF9zdGF0aTY0LiAgKi8KKyMgICBpZiBkZWZpbmVkIF9fTUlOR1czMl9fICYmIGRlZmluZWQgX3N0YXRpNjQKKyMgICAgaWZuZGVmIF9VU0VfMzJCSVRfVElNRV9UCisgICAgICAvKiBUaGUgc3lzdGVtIGhlYWRlcnMgZGVmaW5lIF9zdGF0aTY0IHRvIF9zdGF0NjQuICAqLworIyAgICAgdW5kZWYgX3N0YXQ2NAorIyAgICAgZGVmaW5lIF9zdGF0NjQobmFtZSwgc3QpIHJwbF9zdGF0IChuYW1lLCBzdCkKKyMgICAgZW5kaWYKKyMgICBlbGlmIGRlZmluZWQgX01TQ19WRVIgJiYgZGVmaW5lZCBfc3RhdGk2NAorIyAgICBpZmRlZiBfVVNFXzMyQklUX1RJTUVfVAorICAgICAgLyogVGhlIHN5c3RlbSBoZWFkZXJzIGRlZmluZSBfc3RhdGk2NCB0byBfc3RhdDMyaTY0LiAgKi8KKyMgICAgIHVuZGVmIF9zdGF0MzJpNjQKKyMgICAgIGRlZmluZSBfc3RhdDMyaTY0KG5hbWUsIHN0KSBycGxfc3RhdCAobmFtZSwgc3QpCisjICAgIGVsc2UKKyAgICAgIC8qIFRoZSBzeXN0ZW0gaGVhZGVycyBkZWZpbmUgX3N0YXRpNjQgdG8gX3N0YXQ2NC4gICovCisjICAgICB1bmRlZiBfc3RhdDY0CisjICAgICBkZWZpbmUgX3N0YXQ2NChuYW1lLCBzdCkgcnBsX3N0YXQgKG5hbWUsIHN0KQorIyAgICBlbmRpZgorIyAgIGVsc2UKKyMgICAgdW5kZWYgX3N0YXRpNjQKKyMgICAgZGVmaW5lIF9zdGF0aTY0KG5hbWUsIHN0KSBycGxfc3RhdCAobmFtZSwgc3QpCisjICAgZW5kaWYKKyMgIGVsaWYgZGVmaW5lZCBfX01JTkdXMzJfXyAmJiBkZWZpbmVkIHN0YXQKKyMgICBpZmRlZiBfVVNFXzMyQklUX1RJTUVfVAorICAgICAvKiBUaGUgc3lzdGVtIGhlYWRlcnMgZGVmaW5lIHN0YXQgdG8gX3N0YXQzMmk2NC4gICovCisjICAgIHVuZGVmIF9zdGF0MzJpNjQKKyMgICAgZGVmaW5lIF9zdGF0MzJpNjQobmFtZSwgc3QpIHJwbF9zdGF0IChuYW1lLCBzdCkKKyMgICBlbHNlCisgICAgIC8qIFRoZSBzeXN0ZW0gaGVhZGVycyBkZWZpbmUgc3RhdCB0byBfc3RhdDY0LiAgKi8KKyMgICAgdW5kZWYgX3N0YXQ2NAorIyAgICBkZWZpbmUgX3N0YXQ2NChuYW1lLCBzdCkgcnBsX3N0YXQgKG5hbWUsIHN0KQorIyAgIGVuZGlmCisjICBlbGlmIGRlZmluZWQgX01TQ19WRVIgJiYgZGVmaW5lZCBzdGF0CisjICAgaWZkZWYgX1VTRV8zMkJJVF9USU1FX1QKKyAgICAgLyogVGhlIHN5c3RlbSBoZWFkZXJzIGRlZmluZSBzdGF0IHRvIF9zdGF0MzIuICAqLworIyAgICB1bmRlZiBfc3RhdDMyCisjICAgIGRlZmluZSBfc3RhdDMyKG5hbWUsIHN0KSBycGxfc3RhdCAobmFtZSwgc3QpCisjICAgZWxzZQorICAgICAvKiBUaGUgc3lzdGVtIGhlYWRlcnMgZGVmaW5lIHN0YXQgdG8gX3N0YXQ2NGkzMi4gICovCisjICAgIHVuZGVmIF9zdGF0NjRpMzIKKyMgICAgZGVmaW5lIF9zdGF0NjRpMzIobmFtZSwgc3QpIHJwbF9zdGF0IChuYW1lLCBzdCkKKyMgICBlbmRpZgorIyAgZWxzZSAvKiAhKF9BSVggfHxfX01JTkdXMzJfXyB8fCAgX01TQ19WRVIpICovCisjICAgdW5kZWYgc3RhdAorIyAgIGRlZmluZSBzdGF0KG5hbWUsIHN0KSBycGxfc3RhdCAobmFtZSwgc3QpCisjICBlbmRpZiAvKiAhX0xBUkdFX0ZJTEVTICovCitfR0xfRVhURVJOX0MgaW50IHN0YXQgKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpidWYpCisgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdGF0CisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RBVAorX0dMX1dBUk5fT05fVVNFIChzdGF0LCAic3RhdCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RhdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisvKiBVc2UgdGhlIHJwbF8gcHJlZml4IGFsc28gb24gU29sYXJpcyA8PSA5LCBiZWNhdXNlIG9uIFNvbGFyaXMgOSBvdXIgdXRpbWVuc2F0CisgICBpbXBsZW1lbnRhdGlvbiByZWxpZXMgb24gZnV0aW1lc2F0LCB3aGljaCBvbiBTb2xhcmlzIDEwIG1ha2VzIGFuIGludm9jYXRpb24KKyAgIHRvIHV0aW1lbnNhdCB0aGF0IGlzIG1lYW50IHRvIGludm9rZSB0aGUgbGliYydzIHV0aW1lbnNhdCgpLCBub3QgZ251bGliJ3MKKyAgIHV0aW1lbnNhdCgpLiAgKi8KKyMgaWYgMCB8fCAoITEgJiYgZGVmaW5lZCBfX3N1bikKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgdXRpbWVuc2F0CisjICAgZGVmaW5lIHV0aW1lbnNhdCBycGxfdXRpbWVuc2F0CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAodXRpbWVuc2F0LCBpbnQsIChpbnQgZmQsIGNoYXIgY29uc3QgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyBjb25zdCB0aW1lc1syXSwgaW50IGZsYWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHV0aW1lbnNhdCwgaW50LCAoaW50IGZkLCBjaGFyIGNvbnN0ICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgdGltZXNbMl0sIGludCBmbGFnKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh1dGltZW5zYXQsIGludCwgKGludCBmZCwgY2hhciBjb25zdCAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjIGNvbnN0IHRpbWVzWzJdLCBpbnQgZmxhZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHV0aW1lbnNhdCwgaW50LCAoaW50IGZkLCBjaGFyIGNvbnN0ICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgdGltZXNbMl0sIGludCBmbGFnKSk7CisjIGVuZGlmCisjIGlmIDEKK19HTF9DWFhBTElBU1dBUk4gKHV0aW1lbnNhdCk7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHV0aW1lbnNhdAorIyBpZiBIQVZFX1JBV19ERUNMX1VUSU1FTlNBVAorX0dMX1dBUk5fT05fVVNFICh1dGltZW5zYXQsICJ1dGltZW5zYXQgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgdXRpbWVuc2F0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2VuZGlmIC8qIF9HTF9TWVNfU1RBVF9IICovCisjZW5kaWYgLyogX0dMX1NZU19TVEFUX0ggKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGludXgtbGliL3N5cy90eXBlcy5oIGIvbGludXgtbGliL3N5cy90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNTE5MDIKLS0tIC9kZXYvbnVsbAorKysgYi9saW51eC1saWIvc3lzL3R5cGVzLmgKQEAgLTAsMCArMSw1MiBAQAorLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLworLyogUHJvdmlkZSBhIG1vcmUgY29tcGxldGUgc3lzL3R5cGVzLmguCisKKyAgIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZiBfX0dOVUNfXyA+PSAzCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisjZW5kaWYKKworCisjaWZuZGVmIF9HTF9TWVNfVFlQRVNfSAorCisvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisjaW5jbHVkZV9uZXh0IDxzeXMvdHlwZXMuaD4KKworI2lmbmRlZiBfR0xfU1lTX1RZUEVTX0gKKyNkZWZpbmUgX0dMX1NZU19UWVBFU19ICisKKy8qIE92ZXJyaWRlIG9mZl90IGlmIExhcmdlIEZpbGUgU3VwcG9ydCBpcyByZXF1ZXN0ZWQgb24gbmF0aXZlIFdpbmRvd3MuICAqLworI2lmIDAKKy8qIFNhbWUgYXMgaW50NjRfdCBpbiA8c3RkaW50Lmg+LiAgKi8KKyMgaWYgZGVmaW5lZCBfTVNDX1ZFUgorIyAgZGVmaW5lIG9mZl90IF9faW50NjQKKyMgZWxzZQorIyAgZGVmaW5lIG9mZl90IGxvbmcgbG9uZyBpbnQKKyMgZW5kaWYKKy8qIEluZGljYXRvciwgZm9yIGdudWxpYiBpbnRlcm5hbCBwdXJwb3Nlcy4gICovCisjIGRlZmluZSBfR0xfV0lORE9XU182NF9CSVRfT0ZGX1QgMQorI2VuZGlmCisKKy8qIE1TVkMgOSBkZWZpbmVzIHNpemVfdCBpbiA8c3RkZGVmLmg+LCBub3QgaW4gPHN5cy90eXBlcy5oPi4gICovCisvKiBCdXQgYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zLiAgKi8KKyNpZiAoKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXykgXAorICAgICYmICEgZGVmaW5lZCBfX0dMSUJDX18KKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisjZW5kaWYKKworI2VuZGlmIC8qIF9HTF9TWVNfVFlQRVNfSCAqLworI2VuZGlmIC8qIF9HTF9TWVNfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvbGludXgtbGliL3N5cy93YWl0LmggYi9saW51eC1saWIvc3lzL3dhaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmM2M2YzCi0tLSAvZGV2L251bGwKKysrIGIvbGludXgtbGliL3N5cy93YWl0LmgKQEAgLTAsMCArMSw0MzEgQEAKKy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8KKy8qIEEgUE9TSVgtbGlrZSA8c3lzL3dhaXQuaD4uCisgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMywgMjAwNS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKworI2lmbmRlZiBfR0xfU1lTX1dBSVRfSAorCisjaWYgX19HTlVDX18gPj0gMworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorI2VuZGlmCisKKworLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworI2lmICEoKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXykKKyMgaW5jbHVkZV9uZXh0IDxzeXMvd2FpdC5oPgorI2VuZGlmCisKKyNpZm5kZWYgX0dMX1NZU19XQUlUX0gKKyNkZWZpbmUgX0dMX1NZU19XQUlUX0gKKworLyogR2V0IHBpZF90LiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworCisvKiBUaGUgZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTCBldGMuIGFyZSBjb3BpZWQgaGVyZS4gICovCisjaWZuZGVmIF9HTF9DWFhERUZTX0gKKyNkZWZpbmUgX0dMX0NYWERFRlNfSAorCisvKiBUaGUgdGhyZWUgbW9zdCBmcmVxdWVudCB1c2UgY2FzZXMgb2YgdGhlc2UgbWFjcm9zIGFyZToKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgc3Vic3RpdHV0ZSBmb3IgYSBmdW5jdGlvbiB0aGF0IGlzIG1pc3Npbmcgb24gc29tZQorICAgICBwbGF0Zm9ybXMsIGJ1dCBpcyBkZWNsYXJlZCBhbmQgd29ya3MgZmluZSBvbiB0aGUgcGxhdGZvcm1zIG9uIHdoaWNoCisgICAgIGl0IGV4aXN0czoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmICFASEFWRV9GT09ACisgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIGFsbCBwbGF0Zm9ybXMsCisgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIHBsYXRmb3JtczoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorICAgICAgICMgICB1bmRlZiBmb28KKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworICAgICAgICMgZWxzZQorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIHNvbWUgcGxhdGZvcm1zCisgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIG9mIHRoZW0gYW5kCisgICAgIGlzIGFkZGl0aW9uYWxseSBlaXRoZXIgbWlzc2luZyBvciB1bmRlY2xhcmVkIG9uIHNvbWUgb3RoZXIgcGxhdGZvcm1zOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisgICAgICAgIyAgIHVuZGVmIGZvbworICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CisgICAgICAgIyBlbHNlCisgICAgICAgIyAgaWYgIUBIQVZFX0ZPT0AgICBvciAgIGlmICFASEFWRV9ERUNMX0ZPT0AKKyAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorKi8KKworLyogX0dMX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuICJDIgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4KKyNlbmRpZgorCisvKiBfR0xfRlVOQ0RFQ0xfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGRlY2xhcmVzIGEgcmVwbGFjZW1lbnQgZnVuY3Rpb24sIG5hbWVkIHJwbF9mdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9GVU5DREVDTF9SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICovCisjZGVmaW5lIF9HTF9GVU5DREVDTF9SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0ZVTkNERUNMX1JQTF8xIChycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKQorI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMXzEocnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9FWFRFUk5fQyByZXR0eXBlIHJwbF9mdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKworLyogX0dMX0ZVTkNERUNMX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBkZWNsYXJlcyB0aGUgc3lzdGVtIGZ1bmN0aW9uLCBuYW1lZCBmdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9GVU5DREVDTF9TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICovCisjZGVmaW5lIF9HTF9GVU5DREVDTF9TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0VYVEVSTl9DIHJldHR5cGUgZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisKKy8qIF9HTF9DWFhBTElBU19SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHJwbF9mdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFIGlzIGRlZmluZWQuCisgICBFeGFtcGxlOgorICAgICBfR0xfQ1hYQUxJQVNfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKyAqLworI2RlZmluZSBfR0xfQ1hYQUxJQVNfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycykKKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OnJwbF9mdW5jOyAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gcnBsX2Z1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQKKyAgIGRlY2xhcmF0aW9uLiAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IKKyAgIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpycGxfZnVuYyk7ICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHRoZSBzeXN0ZW0gcHJvdmlkZWQgZnVuY3Rpb24gZnVuYywgaWYgR05VTElCX05BTUVTUEFDRQorICAgaXMgZGVmaW5lZC4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9DWFhBTElBU19TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyAgLyogSWYgd2Ugd2VyZSB0byB3cml0ZQorICAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOworICAgICBsaWtlIGFib3ZlIGluIF9HTF9DWFhBTElBU19SUExfMSwgdGhlIGNvbXBpbGVyIGNvdWxkIG9wdGltaXplIGNhbGxzCisgICAgIGJldHRlciAocmVtb3ZlIGFuIGluZGlyZWN0aW9uIHRocm91Z2ggYSAnc3RhdGljJyBwb2ludGVyIHZhcmlhYmxlKSwKKyAgICAgYnV0IHRoZW4gdGhlIF9HTF9DWFhBTElBU1dBUk4gbWFjcm8gYmVsb3cgd291bGQgY2F1c2UgYSB3YXJuaW5nIG5vdCBvbmx5CisgICAgIGZvciB1c2VzIG9mIDo6ZnVuYyBidXQgYWxzbyBmb3IgdXNlcyBvZiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jLiAgKi8KKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGZ1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgZGVjbGFyYXRpb24uCisgICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvciB0aGF0IHdvdWxkCisgICBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpmdW5jKTsgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMsIHJldHR5cGUyLCBwYXJhbWV0ZXJzMik7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGlzIHBpY2tlZCBhbW9uZyBhIHNldCBvZiBvdmVybG9hZGVkIGZ1bmN0aW9ucywKKyAgIG5hbWVseSB0aGUgb25lIHdpdGggcmV0dHlwZTIgYW5kIHBhcmFtZXRlcnMyLiAgVHdvIGNvbnNlY3V0aXZlIGNhc3RzCisgICBhcmUgdXNlZCB0byBzaWxlbmNlIHRoZSAiY2Fubm90IGZpbmQgYSBtYXRjaCIgYW5kICJpbnZhbGlkIGNvbnZlcnNpb24iCisgICBlcnJvcnMgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisgIC8qIFRoZSBvdXRlciBjYXN0IG11c3QgYmUgYSByZWludGVycHJldF9jYXN0LgorICAgICBUaGUgaW5uZXIgY2FzdDogV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNldCBvZiBvdmVybG9hZGVkCisgICAgIGZ1bmN0aW9ucywgaXQgd29ya3MgYXMgYSBzdGF0aWNfY2FzdDw+LCBjaG9vc2luZyB0aGUgZGVzaWduYXRlZCB2YXJpYW50LgorICAgICBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2luZ2xlIHZhcmlhbnQsIGl0IHdvcmtzIGFzIGEKKyAgICAgcmVpbnRlcnByZXRfY2FzdDw+LiBUaGUgcGFyZW50aGVzaXplZCBjYXN0IHN5bnRheCB3b3JrcyBib3RoIHdheXMuICAqLworIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChyZXR0eXBlMigqKXBhcmFtZXRlcnMyKSg6OmZ1bmMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTV0FSTiAoZnVuYyk7CisgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiA6OmZ1bmMgaXMgdXNlZCBidXQgbm90IHdoZW4KKyAgIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gIGZ1bmMgbXVzdCBiZSBkZWZpbmVkIHdpdGhvdXQgb3ZlcmxvYWRlZAorICAgdmFyaWFudHMuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk5fMSAoZnVuYywgR05VTElCX05BTUVTUEFDRSkKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMShmdW5jLG5hbWVzcGFjZSkgXAorICAgX0dMX0NYWEFMSUFTV0FSTl8yIChmdW5jLCBuYW1lc3BhY2UpCisvKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKyAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworIyBpZiAhX19PUFRJTUlaRV9fCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgX0dMX1dBUk5fT05fVVNFIChmdW5jLCBcCisgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworIyBlbHNlCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNXQVJOMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiB0aGUgZ2l2ZW4gb3ZlcmxvYWRlZCB2YXJpYW50IG9mIDo6ZnVuYworICAgaXMgdXNlZCBidXQgbm90IHdoZW4gR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk4xXzEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdOVUxJQl9OQU1FU1BBQ0UpCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgX0dMX0NYWEFMSUFTV0FSTjFfMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgbmFtZXNwYWNlKQorLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKyMgaWYgIV9fT1BUSU1JWkVfXworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisjZW5kaWYgLyogX0dMX0NYWERFRlNfSCAqLworCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UgaXMgY29waWVkIGhlcmUuICAqLworI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0UKKworIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKy8qIEEgY29tcGlsZXIgYXR0cmlidXRlIGlzIGF2YWlsYWJsZSBpbiBnY2MgdmVyc2lvbnMgNC4zLjAgYW5kIGxhdGVyLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24gX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtZXNzYWdlKSkpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisvKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmN0aW9uKSBmdW5jdGlvbgorIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBfR0xfV0FSTl9PTl9VU0VfQ1hYIChmdW5jdGlvbiwgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgInN0cmluZyIpCisgICBpcyBsaWtlIF9HTF9XQVJOX09OX1VTRSAoZnVuY3Rpb24sICJzdHJpbmciKSwgZXhjZXB0IHRoYXQgdGhlIGZ1bmN0aW9uIGlzCisgICBkZWNsYXJlZCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsCisgICBhbmQgYXR0cmlidXRlcy4KKyAgIFRoaXMgdmFyaWFudCBpcyB1c2VmdWwgZm9yIG92ZXJsb2FkZWQgZnVuY3Rpb25zIGluIEMrKy4gX0dMX1dBUk5fT05fVVNFIGRvZXMKKyAgIG5vdCB3b3JrIGluIHRoaXMgY2FzZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX09OX1VTRV9DWFgKKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCitleHRlcm4gcmV0dHlwZSBmdW5jdGlvbiBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzIFwKKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtc2cpKSkKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKy8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCitleHRlcm4gcmV0dHlwZSBmdW5jdGlvbiBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisjIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorX0dMX1dBUk5fRVhURVJOX0MgaW50IF9nbF93YXJuX29uX3VzZQorIyBlbmRpZgorI2VuZGlmCisKKy8qIF9HTF9XQVJOX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fRVhURVJOX0MKKyMgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cworIyAgZGVmaW5lIF9HTF9XQVJOX0VYVEVSTl9DIGV4dGVybiAiQyIKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9XQVJOX0VYVEVSTl9DIGV4dGVybgorIyBlbmRpZgorI2VuZGlmCisKKworI2lmICEoKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXykKKy8qIFVuaXggQVBJLiAgKi8KKworLyogVGhlIGZvbGxvd2luZyBtYWNyb3MgYXBwbHkgdG8gYW4gYXJndW1lbnQgeCwgdGhhdCBpcyBhIHN0YXR1cyBvZiBhIHByb2Nlc3MsCisgICBhcyByZXR1cm5lZCBieSB3YWl0cGlkKCkuCisgICBPbiBuZWFybHkgYWxsIHN5c3RlbXMsIGluY2x1ZGluZyBMaW51eC94ODYsIFdFWElUU1RBVFVTIGFyZSBiaXRzIDE1Li44IGFuZAorICAgV1RFUk1TSUcgYXJlIGJpdHMgNy4uMCwgd2hpbGUgQmVPUyB1c2VzIHRoZSBvcHBvc2l0ZS4gIFRoZXJlZm9yZSBwcm9ncmFtcworICAgaGF2ZSB0byB1c2UgdGhlIGFic3RyYWN0IG1hY3Jvcy4gICovCisKKy8qIEZvciB2YWxpZCB4LCBleGFjdGx5IG9uZSBvZiBXSUZTSUdOQUxFRCh4KSwgV0lGRVhJVEVEKHgpLCBXSUZTVE9QUEVEKHgpCisgICBpcyB0cnVlLiAgKi8KKyMgaWZuZGVmIFdJRlNJR05BTEVECisjICBkZWZpbmUgV0lGU0lHTkFMRUQoeCkgKFdURVJNU0lHICh4KSAhPSAwICYmIFdURVJNU0lHKHgpICE9IDB4N2YpCisjIGVuZGlmCisjIGlmbmRlZiBXSUZFWElURUQKKyMgIGRlZmluZSBXSUZFWElURUQoeCkgKFdURVJNU0lHICh4KSA9PSAwKQorIyBlbmRpZgorIyBpZm5kZWYgV0lGU1RPUFBFRAorIyAgZGVmaW5lIFdJRlNUT1BQRUQoeCkgKFdURVJNU0lHICh4KSA9PSAweDdmKQorIyBlbmRpZgorCisvKiBUaGUgdGVybWluYXRpb24gc2lnbmFsLiBPbmx5IHRvIGJlIGFjY2Vzc2VkIGlmIFdJRlNJR05BTEVEKHgpIGlzIHRydWUuICAqLworIyBpZm5kZWYgV1RFUk1TSUcKKyMgIGRlZmluZSBXVEVSTVNJRyh4KSAoKHgpICYgMHg3ZikKKyMgZW5kaWYKKworLyogVGhlIGV4aXQgc3RhdHVzLiBPbmx5IHRvIGJlIGFjY2Vzc2VkIGlmIFdJRkVYSVRFRCh4KSBpcyB0cnVlLiAgKi8KKyMgaWZuZGVmIFdFWElUU1RBVFVTCisjICBkZWZpbmUgV0VYSVRTVEFUVVMoeCkgKCgoeCkgPj4gOCkgJiAweGZmKQorIyBlbmRpZgorCisvKiBUaGUgc3RvcHBpbmcgc2lnbmFsLiBPbmx5IHRvIGJlIGFjY2Vzc2VkIGlmIFdJRlNUT1BQRUQoeCkgaXMgdHJ1ZS4gICovCisjIGlmbmRlZiBXU1RPUFNJRworIyAgZGVmaW5lIFdTVE9QU0lHKHgpICgoKHgpID4+IDgpICYgMHg3ZikKKyMgZW5kaWYKKworLyogVHJ1ZSBpZiB0aGUgcHJvY2VzcyBkdW1wZWQgY29yZS4gIE5vdCBzdGFuZGFyZGl6ZWQgYnkgUE9TSVguICAqLworIyBpZm5kZWYgV0NPUkVEVU1QCisjICBkZWZpbmUgV0NPUkVEVU1QKHgpICgoeCkgJiAweDgwKQorIyBlbmRpZgorCisjZWxzZQorLyogTmF0aXZlIFdpbmRvd3MgQVBJLiAgKi8KKworIyBpbmNsdWRlIDxzaWduYWwuaD4gLyogZm9yIFNJR1RFUk0gKi8KKworLyogVGhlIGZvbGxvd2luZyBtYWNyb3MgYXBwbHkgdG8gYW4gYXJndW1lbnQgeCwgdGhhdCBpcyBhIHN0YXR1cyBvZiBhIHByb2Nlc3MsCisgICBhcyByZXR1cm5lZCBieSB3YWl0cGlkKCkgb3IsIGVxdWl2YWxlbnRseSwgX2N3YWl0KCkgb3IgR2V0RXhpdENvZGVQcm9jZXNzKCkuCisgICBUaGlzIHZhbHVlIGlzIHNpbXBseSBhbiAnaW50Jywgbm90IGNvbXBvc2VkIG9mIGJpdCBmaWVsZHMuICAqLworCisvKiBXaGVuIGFuIHVuaGFuZGxlZCBmYXRhbCBzaWduYWwgdGVybWluYXRlcyBhIHByb2Nlc3MsIHRoZSBleGl0IGNvZGUgaXMgMy4gICovCisjIGRlZmluZSBXSUZTSUdOQUxFRCh4KSAoKHgpID09IDMpCisjIGRlZmluZSBXSUZFWElURUQoeCkgKCh4KSAhPSAzKQorIyBkZWZpbmUgV0lGU1RPUFBFRCh4KSAwCisKKy8qIFRoZSBzaWduYWwgdGhhdCB0ZXJtaW5hdGVkIGEgcHJvY2VzcyBpcyBub3Qga25vd24gcG9zdGh1bS4gICovCisjIGRlZmluZSBXVEVSTVNJRyh4KSBTSUdURVJNCisKKyMgZGVmaW5lIFdFWElUU1RBVFVTKHgpICh4KQorCisvKiBUaGVyZSBhcmUgbm8gc3RvcHBpbmcgc2lnbmFscy4gICovCisjIGRlZmluZSBXU1RPUFNJRyh4KSAwCisKKy8qIFRoZXJlIGFyZSBubyBjb3JlIGR1bXBzLiAgKi8KKyMgZGVmaW5lIFdDT1JFRFVNUCh4KSAwCisKKyNlbmRpZgorCisKKy8qIERlY2xhcmF0aW9ucyBvZiBmdW5jdGlvbnMuICAqLworCisjaWYgMQorIyBpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCitfR0xfRlVOQ0RFQ0xfU1lTICh3YWl0cGlkLCBwaWRfdCwgKHBpZF90IHBpZCwgaW50ICpzdGF0dXNwLCBpbnQgb3B0aW9ucykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod2FpdHBpZCwgcGlkX3QsIChwaWRfdCBwaWQsIGludCAqc3RhdHVzcCwgaW50IG9wdGlvbnMpKTsKK19HTF9DWFhBTElBU1dBUk4gKHdhaXRwaWQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3YWl0cGlkCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0FJVFBJRAorX0dMX1dBUk5fT05fVVNFICh3YWl0cGlkLCAid2FpdHBpZCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3lzX3dhaXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjZW5kaWYgLyogX0dMX1NZU19XQUlUX0ggKi8KKyNlbmRpZiAvKiBfR0xfU1lTX1dBSVRfSCAqLwpkaWZmIC0tZ2l0IGEvbGludXgtbGliL3RpbWUuaCBiL2xpbnV4LWxpYi90aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiMDE4OAotLS0gL2Rldi9udWxsCisrKyBiL2xpbnV4LWxpYi90aW1lLmgKQEAgLTAsMCArMSw1NjAgQEAKKy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8KKy8qIEEgbW9yZS1zdGFuZGFyZCA8dGltZS5oPi4KKworICAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmIF9fR05VQ19fID49IDMKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKyNlbmRpZgorCisKKy8qIERvbid0IGdldCBpbiB0aGUgd2F5IG9mIGdsaWJjIHdoZW4gaXQgaW5jbHVkZXMgdGltZS5oIG1lcmVseSB0bworICAgZGVjbGFyZSBhIGZldyBzdGFuZGFyZCBzeW1ib2xzLCByYXRoZXIgdGhhbiB0byBkZWNsYXJlIGFsbCB0aGUKKyAgIHN5bWJvbHMuICBBbHNvLCBTb2xhcmlzIDggPHRpbWUuaD4gZXZlbnR1YWxseSBpbmNsdWRlcyBpdHNlbGYKKyAgIHJlY3Vyc2l2ZWx5OyBpZiB0aGF0IGlzIGhhcHBlbmluZywganVzdCBpbmNsdWRlIHRoZSBzeXN0ZW0gPHRpbWUuaD4KKyAgIHdpdGhvdXQgYWRkaW5nIG91ciBvd24gZGVjbGFyYXRpb25zLiAgKi8KKyNpZiAoZGVmaW5lZCBfX25lZWRfdGltZV90IHx8IGRlZmluZWQgX19uZWVkX2Nsb2NrX3QgXAorICAgICB8fCBkZWZpbmVkIF9fbmVlZF90aW1lc3BlYyBcCisgICAgIHx8IGRlZmluZWQgX0dMX1RJTUVfSCkKKworIyBpbmNsdWRlX25leHQgPHRpbWUuaD4KKworI2Vsc2UKKworIyBkZWZpbmUgX0dMX1RJTUVfSAorCisjIGluY2x1ZGVfbmV4dCA8dGltZS5oPgorCisvKiBOZXRCU0QgNS4wIG1pcy1kZWZpbmVzIE5VTEwuICAqLworIyBpbmNsdWRlIDxzdGRkZWYuaD4KKworLyogVGhlIGRlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwgZXRjLiBhcmUgY29waWVkIGhlcmUuICAqLworI2lmbmRlZiBfR0xfQ1hYREVGU19ICisjZGVmaW5lIF9HTF9DWFhERUZTX0gKKworLyogVGhlIHRocmVlIG1vc3QgZnJlcXVlbnQgdXNlIGNhc2VzIG9mIHRoZXNlIG1hY3JvcyBhcmU6CisKKyAgICogRm9yIHByb3ZpZGluZyBhIHN1YnN0aXR1dGUgZm9yIGEgZnVuY3Rpb24gdGhhdCBpcyBtaXNzaW5nIG9uIHNvbWUKKyAgICAgcGxhdGZvcm1zLCBidXQgaXMgZGVjbGFyZWQgYW5kIHdvcmtzIGZpbmUgb24gdGhlIHBsYXRmb3JtcyBvbiB3aGljaAorICAgICBpdCBleGlzdHM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiAhQEhBVkVfRk9PQAorICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorCisgICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBhbGwgcGxhdGZvcm1zLAorICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBwbGF0Zm9ybXM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACisgICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyAgICAgICAjICAgdW5kZWYgZm9vCisgICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKyAgICAgICAjIGVsc2UKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorCisgICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBzb21lIHBsYXRmb3JtcworICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBvZiB0aGVtIGFuZAorICAgICBpcyBhZGRpdGlvbmFsbHkgZWl0aGVyIG1pc3Npbmcgb3IgdW5kZWNsYXJlZCBvbiBzb21lIG90aGVyIHBsYXRmb3JtczoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorICAgICAgICMgICB1bmRlZiBmb28KKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworICAgICAgICMgZWxzZQorICAgICAgICMgIGlmICFASEFWRV9GT09AICAgb3IgICBpZiAhQEhBVkVfREVDTF9GT09ACisgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKyovCisKKy8qIF9HTF9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cworIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybiAiQyIKKyNlbHNlCisjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuCisjZW5kaWYKKworLyogX0dMX0ZVTkNERUNMX1JQTCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBkZWNsYXJlcyBhIHJlcGxhY2VtZW50IGZ1bmN0aW9uLCBuYW1lZCBycGxfZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCisgICBFeGFtcGxlOgorICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyAqLworI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9GVU5DREVDTF9SUExfMSAocnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykKKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1JQTF8xKHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICBfR0xfRVhURVJOX0MgcmV0dHlwZSBycGxfZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisKKy8qIF9HTF9GVU5DREVDTF9TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgZGVjbGFyZXMgdGhlIHN5c3RlbSBmdW5jdGlvbiwgbmFtZWQgZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCisgICBFeGFtcGxlOgorICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyAqLworI2RlZmluZSBfR0xfRlVOQ0RFQ0xfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9FWFRFUk5fQyByZXR0eXBlIGZ1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworCisvKiBfR0xfQ1hYQUxJQVNfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCisgICB0aGF0IHJlZGlyZWN0cyB0byBycGxfZnVuYywgaWYgR05VTElCX05BTUVTUEFDRSBpcyBkZWZpbmVkLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0NYWEFMSUFTX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CisgKi8KKyNkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpycGxfZnVuYzsgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xIChmdW5jLCBycGxfZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIHJwbF9mdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50CisgICBkZWNsYXJhdGlvbi4gIEEgY2FzdCBpcyB1c2VkIHRvIHNpbGVuY2UgdGhlICJpbnZhbGlkIGNvbnZlcnNpb24iIGVycm9yCisgICB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6cnBsX2Z1bmMpOyAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCisgICB0aGF0IHJlZGlyZWN0cyB0byB0aGUgc3lzdGVtIHByb3ZpZGVkIGZ1bmN0aW9uIGZ1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UKKyAgIGlzIGRlZmluZWQuCisgICBFeGFtcGxlOgorICAgICBfR0xfQ1hYQUxJQVNfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKyAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisgIC8qIElmIHdlIHdlcmUgdG8gd3JpdGUKKyAgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsKKyAgICAgbGlrZSBhYm92ZSBpbiBfR0xfQ1hYQUxJQVNfUlBMXzEsIHRoZSBjb21waWxlciBjb3VsZCBvcHRpbWl6ZSBjYWxscworICAgICBiZXR0ZXIgKHJlbW92ZSBhbiBpbmRpcmVjdGlvbiB0aHJvdWdoIGEgJ3N0YXRpYycgcG9pbnRlciB2YXJpYWJsZSksCisgICAgIGJ1dCB0aGVuIHRoZSBfR0xfQ1hYQUxJQVNXQVJOIG1hY3JvIGJlbG93IHdvdWxkIGNhdXNlIGEgd2FybmluZyBub3Qgb25seQorICAgICBmb3IgdXNlcyBvZiA6OmZ1bmMgYnV0IGFsc28gZm9yIHVzZXMgb2YgR05VTElCX05BTUVTUEFDRTo6ZnVuYy4gICovCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7ICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBmdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGRlY2xhcmF0aW9uLgorICAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IgdGhhdCB3b3VsZAorICAgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6ZnVuYyk7IFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzLCByZXR0eXBlMiwgcGFyYW1ldGVyczIpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBpcyBwaWNrZWQgYW1vbmcgYSBzZXQgb2Ygb3ZlcmxvYWRlZCBmdW5jdGlvbnMsCisgICBuYW1lbHkgdGhlIG9uZSB3aXRoIHJldHR5cGUyIGFuZCBwYXJhbWV0ZXJzMi4gIFR3byBjb25zZWN1dGl2ZSBjYXN0cworICAgYXJlIHVzZWQgdG8gc2lsZW5jZSB0aGUgImNhbm5vdCBmaW5kIGEgbWF0Y2giIGFuZCAiaW52YWxpZCBjb252ZXJzaW9uIgorICAgZXJyb3JzIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorICAvKiBUaGUgb3V0ZXIgY2FzdCBtdXN0IGJlIGEgcmVpbnRlcnByZXRfY2FzdC4KKyAgICAgVGhlIGlubmVyIGNhc3Q6IFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzZXQgb2Ygb3ZlcmxvYWRlZAorICAgICBmdW5jdGlvbnMsIGl0IHdvcmtzIGFzIGEgc3RhdGljX2Nhc3Q8PiwgY2hvb3NpbmcgdGhlIGRlc2lnbmF0ZWQgdmFyaWFudC4KKyAgICAgV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNpbmdsZSB2YXJpYW50LCBpdCB3b3JrcyBhcyBhCisgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Pi4gVGhlIHBhcmVudGhlc2l6ZWQgY2FzdCBzeW50YXggd29ya3MgYm90aCB3YXlzLiAgKi8KKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAocmV0dHlwZTIoKilwYXJhbWV0ZXJzMikoOjpmdW5jKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU1dBUk4gKGZ1bmMpOworICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gOjpmdW5jIGlzIHVzZWQgYnV0IG5vdCB3aGVuCisgICBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICBmdW5jIG11c3QgYmUgZGVmaW5lZCB3aXRob3V0IG92ZXJsb2FkZWQKKyAgIHZhcmlhbnRzLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOXzEgKGZ1bmMsIEdOVUxJQl9OQU1FU1BBQ0UpCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzEoZnVuYyxuYW1lc3BhY2UpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk5fMiAoZnVuYywgbmFtZXNwYWNlKQorLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKyMgaWYgIV9fT1BUSU1JWkVfXworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgIF9HTF9XQVJOX09OX1VTRSAoZnVuYywgXAorICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAorICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKyAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTV0FSTjEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gdGhlIGdpdmVuIG92ZXJsb2FkZWQgdmFyaWFudCBvZiA6OmZ1bmMKKyAgIGlzIHVzZWQgYnV0IG5vdCB3aGVuIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOMV8xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBHTlVMSUJfTkFNRVNQQUNFKQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk4xXzIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIG5hbWVzcGFjZSkKKy8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAorICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCisjIGlmICFfX09QVElNSVpFX18KKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworIyBlbHNlCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworI2VuZGlmIC8qIF9HTF9DWFhERUZTX0ggKi8KKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxMIGlzIGNvcGllZCBoZXJlLiAgKi8KKy8qIF9HTF9BUkdfTk9OTlVMTCgobiwuLi4sbSkpIHRlbGxzIHRoZSBjb21waWxlciBhbmQgc3RhdGljIGFuYWx5emVyIHRvb2xzCisgICB0aGF0IHRoZSB2YWx1ZXMgcGFzc2VkIGFzIGFyZ3VtZW50cyBuLCAuLi4sIG0gbXVzdCBiZSBub24tTlVMTCBwb2ludGVycy4KKyAgIG4gPSAxIHN0YW5kcyBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50LCBuID0gMiBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCBldGMuICAqLworI2lmbmRlZiBfR0xfQVJHX05PTk5VTEwKKyMgaWYgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gMykgfHwgX19HTlVDX18gPiAzCisjICBkZWZpbmUgX0dMX0FSR19OT05OVUxMKHBhcmFtcykgX19hdHRyaWJ1dGVfXyAoKF9fbm9ubnVsbF9fIHBhcmFtcykpCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKQorIyBlbmRpZgorI2VuZGlmCisKKy8qIFRoZSBkZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRSBpcyBjb3BpZWQgaGVyZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX09OX1VTRQorCisjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorLyogQSBjb21waWxlciBhdHRyaWJ1dGUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyA0LjMuMCBhbmQgbGF0ZXIuICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmN0aW9uKSBmdW5jdGlvbiBfX2F0dHJpYnV0ZV9fICgoX193YXJuaW5nX18gKG1lc3NhZ2UpKSkKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKy8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uCisjIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorX0dMX1dBUk5fRVhURVJOX0MgaW50IF9nbF93YXJuX29uX3VzZQorIyBlbmRpZgorI2VuZGlmCisKKy8qIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmN0aW9uLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCAic3RyaW5nIikKKyAgIGlzIGxpa2UgX0dMX1dBUk5fT05fVVNFIChmdW5jdGlvbiwgInN0cmluZyIpLCBleGNlcHQgdGhhdCB0aGUgZnVuY3Rpb24gaXMKKyAgIGRlY2xhcmVkIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywKKyAgIGFuZCBhdHRyaWJ1dGVzLgorICAgVGhpcyB2YXJpYW50IGlzIHVzZWZ1bCBmb3Igb3ZlcmxvYWRlZCBmdW5jdGlvbnMgaW4gQysrLiBfR0xfV0FSTl9PTl9VU0UgZG9lcworICAgbm90IHdvcmsgaW4gdGhpcyBjYXNlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFX0NYWAorIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK2V4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMgXAorICAgICBfX2F0dHJpYnV0ZV9fICgoX193YXJuaW5nX18gKG1zZykpKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK2V4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCitfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisjIGVuZGlmCisjZW5kaWYKKworLyogX0dMX1dBUk5fRVhURVJOX0MgZGVjbGFyYXRpb247CisgICBwZXJmb3JtcyB0aGUgZGVjbGFyYXRpb24gd2l0aCBDIGxpbmthZ2UuICAqLworI2lmbmRlZiBfR0xfV0FSTl9FWFRFUk5fQworIyBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisjICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuICJDIgorIyBlbHNlCisjICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuCisjIGVuZGlmCisjZW5kaWYKKworLyogU29tZSBzeXN0ZW1zIGRvbid0IGRlZmluZSBzdHJ1Y3QgdGltZXNwZWMgKGUuZy4sIEFJWCA0LjEsIFVsdHJpeCA0LjMpLgorICAgT3IgdGhleSBkZWZpbmUgaXQgd2l0aCB0aGUgd3JvbmcgbWVtYmVyIG5hbWVzIG9yIGRlZmluZSBpdCBpbiA8c3lzL3RpbWUuaD4KKyAgIChlLmcuLCBGcmVlQlNEIGNpcmNhIDE5OTcpLiAgU3RvY2sgTWluZ3cgZG9lcyBub3QgZGVmaW5lIGl0LCBidXQgdGhlCisgICBwdGhyZWFkcy13aW4zMiBsaWJyYXJ5IGRlZmluZXMgaXQgaW4gPHB0aHJlYWQuaD4uICAqLworIyBpZiAhIDEKKyMgIGlmIDAKKyMgICBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyAgZWxpZiAwCisjICAgaW5jbHVkZSA8cHRocmVhZC5oPgorLyogVGhlIHB0aHJlYWRzLXdpbjMyIDxwdGhyZWFkLmg+IGFsc28gZGVmaW5lcyBhIGNvdXBsZSBvZiBicm9rZW4gbWFjcm9zLiAgKi8KKyMgICB1bmRlZiBhc2N0aW1lX3IKKyMgICB1bmRlZiBjdGltZV9yCisjICAgdW5kZWYgZ210aW1lX3IKKyMgICB1bmRlZiBsb2NhbHRpbWVfcgorIyAgIHVuZGVmIHJhbmRfcgorIyAgIHVuZGVmIHN0cnRva19yCisjICBlbHNlCisKKyMgICBpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjICAgZW5kaWYKKworIyAgIGlmICFHTlVMSUJfZGVmaW5lZF9zdHJ1Y3RfdGltZXNwZWMKKyMgICAgdW5kZWYgdGltZXNwZWMKKyMgICAgZGVmaW5lIHRpbWVzcGVjIHJwbF90aW1lc3BlYworc3RydWN0IHRpbWVzcGVjCit7CisgIHRpbWVfdCB0dl9zZWM7CisgIGxvbmcgaW50IHR2X25zZWM7Cit9OworIyAgICBkZWZpbmUgR05VTElCX2RlZmluZWRfc3RydWN0X3RpbWVzcGVjIDEKKyMgICBlbmRpZgorCisjICAgaWZkZWYgX19jcGx1c3BsdXMKK30KKyMgICBlbmRpZgorCisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmICFHTlVMSUJfZGVmaW5lZF9zdHJ1Y3RfdGltZV90X211c3RfYmVfaW50ZWdyYWwKKy8qIFBlciBodHRwOi8vYXVzdGluZ3JvdXBidWdzLm5ldC92aWV3LnBocD9pZD0zMjcsIFBPU0lYIHJlcXVpcmVzCisgICB0aW1lX3QgdG8gYmUgYW4gaW50ZWdlciB0eXBlLCBldmVuIHRob3VnaCBDOTkgcGVybWl0cyBmbG9hdGluZworICAgcG9pbnQuICBXZSBkb24ndCBrbm93IG9mIGFueSBpbXBsZW1lbnRhdGlvbiB0aGF0IHVzZXMgZmxvYXRpbmcKKyAgIHBvaW50LCBhbmQgaXQgaXMgbXVjaCBlYXNpZXIgdG8gd3JpdGUgY29kZSB0aGF0IGRvZXNuJ3QgaGF2ZSB0bworICAgd29ycnkgYWJvdXQgdGhhdCBjb3JuZXIgY2FzZSwgc28gd2UgZm9yY2UgdGhlIGlzc3VlLiAgKi8KK3N0cnVjdCBfX3RpbWVfdF9tdXN0X2JlX2ludGVncmFsIHsKKyAgdW5zaWduZWQgaW50IF9fZmxvYXRpbmdfdGltZV90X3Vuc3VwcG9ydGVkIDogKHRpbWVfdCkgMTsKK307CisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfc3RydWN0X3RpbWVfdF9tdXN0X2JlX2ludGVncmFsIDEKKyMgZW5kaWYKKworLyogU2xlZXAgZm9yIGF0IGxlYXN0IFJRVFAgc2Vjb25kcyB1bmxlc3MgaW50ZXJydXB0ZWQsICBJZiBpbnRlcnJ1cHRlZCwKKyAgIHJldHVybiAtMSBhbmQgc3RvcmUgdGhlIHJlbWFpbmluZyB0aW1lIGludG8gUk1UUC4gIFNlZQorICAgPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hzaC9uYW5vc2xlZXAuaHRtbD4uICAqLworIyBpZiAwCisjICBpZiBHTlVMSUJfUE9SVENIRUNLCisjICAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICAgZGVmaW5lIG5hbm9zbGVlcCBycGxfbmFub3NsZWVwCisjICAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG5hbm9zbGVlcCwgaW50LAorICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1lc3BlYyBjb25zdCAqX19ycXRwLCBzdHJ1Y3QgdGltZXNwZWMgKl9fcm10cCkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChuYW5vc2xlZXAsIGludCwKKyAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXNwZWMgY29uc3QgKl9fcnF0cCwgc3RydWN0IHRpbWVzcGVjICpfX3JtdHApKTsKKyMgIGVsc2UKKyMgICBpZiAhIDEKK19HTF9GVU5DREVDTF9TWVMgKG5hbm9zbGVlcCwgaW50LAorICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1lc3BlYyBjb25zdCAqX19ycXRwLCBzdHJ1Y3QgdGltZXNwZWMgKl9fcm10cCkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKG5hbm9zbGVlcCwgaW50LAorICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1lc3BlYyBjb25zdCAqX19ycXRwLCBzdHJ1Y3QgdGltZXNwZWMgKl9fcm10cCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG5hbm9zbGVlcCk7CisjIGVuZGlmCisKKy8qIFJldHVybiB0aGUgJ3RpbWVfdCcgcmVwcmVzZW50YXRpb24gb2YgVFAgYW5kIG5vcm1hbGl6ZSBUUC4gICovCisjIGlmIDAKKyMgIGlmIEdOVUxJQl9QT1JUQ0hFQ0sKKyMgICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgICBkZWZpbmUgbWt0aW1lIHJwbF9ta3RpbWUKKyMgICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobWt0aW1lLCB0aW1lX3QsIChzdHJ1Y3QgdG0gKl9fdHApIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChta3RpbWUsIHRpbWVfdCwgKHN0cnVjdCB0bSAqX190cCkpOworIyAgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAobWt0aW1lLCB0aW1lX3QsIChzdHJ1Y3QgdG0gKl9fdHApKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChta3RpbWUpOworIyBlbmRpZgorCisvKiBDb252ZXJ0IFRJTUVSIHRvIFJFU1VMVCwgYXNzdW1pbmcgbG9jYWwgdGltZSBhbmQgVVRDIHJlc3BlY3RpdmVseS4gIFNlZQorICAgPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hzaC9sb2NhbHRpbWVfci5odG1sPiBhbmQKKyAgIDxodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjN4c2gvZ210aW1lX3IuaHRtbD4uICAqLworIyBpZiAwCisjICBpZiBHTlVMSUJfUE9SVENIRUNLCisjICAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICAgdW5kZWYgbG9jYWx0aW1lX3IKKyMgICAgZGVmaW5lIGxvY2FsdGltZV9yIHJwbF9sb2NhbHRpbWVfcgorIyAgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChsb2NhbHRpbWVfciwgc3RydWN0IHRtICosICh0aW1lX3QgY29uc3QgKnJlc3RyaWN0IF9fdGltZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKnJlc3RyaWN0IF9fcmVzdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAobG9jYWx0aW1lX3IsIHN0cnVjdCB0bSAqLCAodGltZV90IGNvbnN0ICpyZXN0cmljdCBfX3RpbWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpyZXN0cmljdCBfX3Jlc3VsdCkpOworIyAgZWxzZQorIyAgIGlmICEgMQorX0dMX0ZVTkNERUNMX1NZUyAobG9jYWx0aW1lX3IsIHN0cnVjdCB0bSAqLCAodGltZV90IGNvbnN0ICpyZXN0cmljdCBfX3RpbWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpyZXN0cmljdCBfX3Jlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobG9jYWx0aW1lX3IsIHN0cnVjdCB0bSAqLCAodGltZV90IGNvbnN0ICpyZXN0cmljdCBfX3RpbWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpyZXN0cmljdCBfX3Jlc3VsdCkpOworIyAgZW5kaWYKKyMgIGlmIDEKK19HTF9DWFhBTElBU1dBUk4gKGxvY2FsdGltZV9yKTsKKyMgIGVuZGlmCisjICBpZiBHTlVMSUJfUE9SVENIRUNLCisjICAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICAgdW5kZWYgZ210aW1lX3IKKyMgICAgZGVmaW5lIGdtdGltZV9yIHJwbF9nbXRpbWVfcgorIyAgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChnbXRpbWVfciwgc3RydWN0IHRtICosICh0aW1lX3QgY29uc3QgKnJlc3RyaWN0IF9fdGltZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKnJlc3RyaWN0IF9fcmVzdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZ210aW1lX3IsIHN0cnVjdCB0bSAqLCAodGltZV90IGNvbnN0ICpyZXN0cmljdCBfX3RpbWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpyZXN0cmljdCBfX3Jlc3VsdCkpOworIyAgZWxzZQorIyAgIGlmICEgMQorX0dMX0ZVTkNERUNMX1NZUyAoZ210aW1lX3IsIHN0cnVjdCB0bSAqLCAodGltZV90IGNvbnN0ICpyZXN0cmljdCBfX3RpbWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpyZXN0cmljdCBfX3Jlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZ210aW1lX3IsIHN0cnVjdCB0bSAqLCAodGltZV90IGNvbnN0ICpyZXN0cmljdCBfX3RpbWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpyZXN0cmljdCBfX3Jlc3VsdCkpOworIyAgZW5kaWYKKyMgIGlmIDEKK19HTF9DWFhBTElBU1dBUk4gKGdtdGltZV9yKTsKKyMgIGVuZGlmCisjIGVuZGlmCisKKy8qIFBhcnNlIEJVRiBhcyBhIHRpbWUgc3RhbXAsIGFzc3VtaW5nIEZPUk1BVCBzcGVjaWZpZXMgaXRzIGxheW91dCwgYW5kIHN0b3JlCisgICB0aGUgcmVzdWx0aW5nIGJyb2tlbi1kb3duIHRpbWUgaW50byBUTS4gIFNlZQorICAgPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hzaC9zdHJwdGltZS5odG1sPi4gICovCisjIGlmIDAKKyMgIGlmICEgMQorX0dMX0ZVTkNERUNMX1NZUyAoc3RycHRpbWUsIGNoYXIgKiwgKGNoYXIgY29uc3QgKnJlc3RyaWN0IF9fYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKnJlc3RyaWN0IF9fZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqcmVzdHJpY3QgX190bSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIsIDMpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc3RycHRpbWUsIGNoYXIgKiwgKGNoYXIgY29uc3QgKnJlc3RyaWN0IF9fYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKnJlc3RyaWN0IF9fZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqcmVzdHJpY3QgX190bSkpOworX0dMX0NYWEFMSUFTV0FSTiAoc3RycHRpbWUpOworIyBlbmRpZgorCisvKiBDb252ZXJ0IFRNIHRvIGEgdGltZV90IHZhbHVlLCBhc3N1bWluZyBVVEMuICAqLworIyBpZiAwCisjICBpZiBHTlVMSUJfUE9SVENIRUNLCisjICAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICAgdW5kZWYgdGltZWdtCisjICAgIGRlZmluZSB0aW1lZ20gcnBsX3RpbWVnbQorIyAgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh0aW1lZ20sIHRpbWVfdCwgKHN0cnVjdCB0bSAqX190bSkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHRpbWVnbSwgdGltZV90LCAoc3RydWN0IHRtICpfX3RtKSk7CisjICBlbHNlCisjICAgaWYgISAxCitfR0xfRlVOQ0RFQ0xfU1lTICh0aW1lZ20sIHRpbWVfdCwgKHN0cnVjdCB0bSAqX190bSkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAodGltZWdtLCB0aW1lX3QsIChzdHJ1Y3QgdG0gKl9fdG0pKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOICh0aW1lZ20pOworIyBlbmRpZgorCisvKiBFbmNvdXJhZ2UgYXBwbGljYXRpb25zIHRvIGF2b2lkIHVuc2FmZSBmdW5jdGlvbnMgdGhhdCBjYW4gb3ZlcnJ1bgorICAgYnVmZmVycyB3aGVuIGdpdmVuIG91dGxhbmRpc2ggc3RydWN0IHRtIHZhbHVlcy4gIFBvcnRhYmxlCisgICBhcHBsaWNhdGlvbnMgc2hvdWxkIHVzZSBzdHJmdGltZSAob3IgZXZlbiBzcHJpbnRmKSBpbnN0ZWFkLiAgKi8KKyMgaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyAgdW5kZWYgYXNjdGltZQorX0dMX1dBUk5fT05fVVNFIChhc2N0aW1lLCAiYXNjdGltZSBjYW4gb3ZlcnJ1biBidWZmZXJzIGluIHNvbWUgY2FzZXMgLSAiCisgICAgICAgICAgICAgICAgICJiZXR0ZXIgdXNlIHN0cmZ0aW1lIChvciBldmVuIHNwcmludGYpIGluc3RlYWQiKTsKKyMgZW5kaWYKKyMgaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyAgdW5kZWYgYXNjdGltZV9yCitfR0xfV0FSTl9PTl9VU0UgKGFzY3RpbWUsICJhc2N0aW1lX3IgY2FuIG92ZXJydW4gYnVmZmVycyBpbiBzb21lIGNhc2VzIC0gIgorICAgICAgICAgICAgICAgICAiYmV0dGVyIHVzZSBzdHJmdGltZSAob3IgZXZlbiBzcHJpbnRmKSBpbnN0ZWFkIik7CisjIGVuZGlmCisjIGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgIHVuZGVmIGN0aW1lCitfR0xfV0FSTl9PTl9VU0UgKGFzY3RpbWUsICJjdGltZSBjYW4gb3ZlcnJ1biBidWZmZXJzIGluIHNvbWUgY2FzZXMgLSAiCisgICAgICAgICAgICAgICAgICJiZXR0ZXIgdXNlIHN0cmZ0aW1lIChvciBldmVuIHNwcmludGYpIGluc3RlYWQiKTsKKyMgZW5kaWYKKyMgaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyAgdW5kZWYgY3RpbWVfcgorX0dMX1dBUk5fT05fVVNFIChhc2N0aW1lLCAiY3RpbWVfciBjYW4gb3ZlcnJ1biBidWZmZXJzIGluIHNvbWUgY2FzZXMgLSAiCisgICAgICAgICAgICAgICAgICJiZXR0ZXIgdXNlIHN0cmZ0aW1lIChvciBldmVuIHNwcmludGYpIGluc3RlYWQiKTsKKyMgZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saW51eC1saWIvdW5pc3RkLmggYi9saW51eC1saWIvdW5pc3RkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFiZmZkNgotLS0gL2Rldi9udWxsCisrKyBiL2xpbnV4LWxpYi91bmlzdGQuaApAQCAtMCwwICsxLDE4NTMgQEAKKy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8KKy8qIFN1YnN0aXR1dGUgZm9yIGFuZCB3cmFwcGVyIGFyb3VuZCA8dW5pc3RkLmg+LgorICAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmIF9fR05VQ19fID49IDMKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKyNlbmRpZgorCisKKy8qIFNwZWNpYWwgaW52b2NhdGlvbiBjb252ZW50aW9uOgorICAgLSBPbiBtaW5ndywgc2V2ZXJhbCBoZWFkZXJzLCBpbmNsdWRpbmcgPHdpbnNvY2syLmg+LCBpbmNsdWRlIDx1bmlzdGQuaD4sCisgICAgIGJ1dCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGJvdGggdGhlIHN5c3RlbSA8dW5pc3RkLmg+IGFuZCA8d2luc29jazIuaD4KKyAgICAgYXJlIGNvbXBsZXRlbHkgaW5jbHVkZWQgYmVmb3JlIHdlIHJlcGxhY2UgZ2V0aG9zdG5hbWUuICAqLworI2lmIDAgJiYgMCBcCisgICYmICFkZWZpbmVkIF9HTF9XSU5TT0NLMl9IX1dJVE5FU1MgJiYgZGVmaW5lZCBfV0lOU09DSzJfSAorLyogPHVuaXN0ZC5oPiBpcyBiZWluZyBpbmRpcmVjdGx5IGluY2x1ZGVkIGZvciB0aGUgZmlyc3QgdGltZSBmcm9tCisgICA8d2luc29jazIuaD47IGF2b2lkIGRlY2xhcmluZyBhbnkgb3ZlcnJpZGVzLiAgKi8KKyMgaWYgMQorIyAgaW5jbHVkZV9uZXh0IDx1bmlzdGQuaD4KKyMgZWxzZQorIyAgZXJyb3IgdW5leHBlY3RlZDsgcmVwb3J0IHRoaXMgdG8gYnVnLWdudWxpYkBnbnUub3JnCisjIGVuZGlmCisjIGRlZmluZSBfR0xfV0lOU09DSzJfSF9XSVRORVNTCisKKy8qIE5vcm1hbCBpbnZvY2F0aW9uLiAgKi8KKyNlbGlmICFkZWZpbmVkIF9HTF9VTklTVERfSAorCisvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisjaWYgMQorIyBpbmNsdWRlX25leHQgPHVuaXN0ZC5oPgorI2VuZGlmCisKKy8qIEdldCBhbGwgcG9zc2libGUgZGVjbGFyYXRpb25zIG9mIGdldGhvc3RuYW1lKCkuICAqLworI2lmIDAgJiYgMCBcCisgICYmICFkZWZpbmVkIF9HTF9JTkNMVURJTkdfV0lOU09DSzJfSAorIyBkZWZpbmUgX0dMX0lOQ0xVRElOR19XSU5TT0NLMl9ICisjIGluY2x1ZGUgPHdpbnNvY2syLmg+CisjIHVuZGVmIF9HTF9JTkNMVURJTkdfV0lOU09DSzJfSAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCBfR0xfVU5JU1REX0ggJiYgIWRlZmluZWQgX0dMX0lOQ0xVRElOR19XSU5TT0NLMl9ICisjZGVmaW5lIF9HTF9VTklTVERfSAorCisvKiBOZXRCU0QgNS4wIG1pcy1kZWZpbmVzIE5VTEwuICBBbHNvIGdldCBzaXplX3QuICAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisvKiBtaW5ndyBkb2Vzbid0IGRlZmluZSB0aGUgU0VFS18qIG9yICpfRklMRU5PIG1hY3JvcyBpbiA8dW5pc3RkLmg+LiAgKi8KKy8qIEN5Z3dpbiAxLjcuMSBkZWNsYXJlcyBzeW1saW5rYXQgaW4gPHN0ZGlvLmg+LCBub3QgaW4gPHVuaXN0ZC5oPi4gICovCisvKiBCdXQgYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zLiAgKi8KKyNpZiAoIShkZWZpbmVkIFNFRUtfQ1VSICYmIGRlZmluZWQgU0VFS19FTkQgJiYgZGVmaW5lZCBTRUVLX1NFVCkgXAorICAgICB8fCAoKDAgfHwgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSykgXAorICAgICAgICAgJiYgZGVmaW5lZCBfX0NZR1dJTl9fKSkgXAorICAgICYmICEgZGVmaW5lZCBfX0dMSUJDX18KKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyNlbmRpZgorCisvKiBDeWd3aW4gMS43LjEgZGVjbGFyZXMgdW5saW5rYXQgaW4gPGZjbnRsLmg+LCBub3QgaW4gPHVuaXN0ZC5oPi4gICovCisvKiBCdXQgYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zLiAgKi8KKyNpZiAoMCB8fCBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLKSAmJiBkZWZpbmVkIF9fQ1lHV0lOX18gXAorICAgICYmICEgZGVmaW5lZCBfX0dMSUJDX18KKyMgaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorCisvKiBtaW5ndyBmYWlscyB0byBkZWNsYXJlIF9leGl0IGluIDx1bmlzdGQuaD4uICAqLworLyogbWluZ3csIE1TVkMsIEJlT1MsIEhhaWt1IGRlY2xhcmUgZW52aXJvbiBpbiA8c3RkbGliLmg+LCBub3QgaW4KKyAgIDx1bmlzdGQuaD4uICAqLworLyogU29sYXJpcyBkZWNsYXJlcyBnZXRjd2Qgbm90IG9ubHkgaW4gPHVuaXN0ZC5oPiBidXQgYWxzbyBpbiA8c3RkbGliLmg+LiAgKi8KKy8qIEJ1dCBhdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9uIG9uIGdsaWJjIHN5c3RlbXMuICAqLworI2lmbmRlZiBfX0dMSUJDX18KKyMgaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKworLyogTmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zIGRlY2xhcmUgY2hkaXIsIGdldGN3ZCwgcm1kaXIgaW4KKyAgIDxpby5oPiBhbmQvb3IgPGRpcmVjdC5oPiwgbm90IGluIDx1bmlzdGQuaD4uCisgICBUaGV5IGFsc28gZGVjbGFyZSBhY2Nlc3MoKSwgY2htb2QoKSwgY2xvc2UoKSwgZHVwKCksIGR1cDIoKSwgaXNhdHR5KCksCisgICBsc2VlaygpLCByZWFkKCksIHVubGluaygpLCB3cml0ZSgpIGluIDxpby5oPi4gICovCisjaWYgKCgwIHx8IDAgfHwgMCBcCisgICAgICB8fCBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLKSBcCisgICAgICYmICgoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fKSkKKyMgaW5jbHVkZSA8aW8uaD4gICAgIC8qIG1pbmd3MzIsIG1pbmd3NjQgKi8KKyMgaW5jbHVkZSA8ZGlyZWN0Lmg+IC8qIG1pbmd3NjQsIE1TVkMgOSAqLworI2VsaWYgKDEgfHwgMCB8fCAxIHx8IDAgXAorICAgICAgIHx8IDAgfHwgMCB8fCAwIHx8IDAgXAorICAgICAgIHx8IGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0spIFwKKyAgICAgICYmICgoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fKQorIyBpbmNsdWRlIDxpby5oPgorI2VuZGlmCisKKy8qIEFJWCBhbmQgT1NGLzEgNS4xIGRlY2xhcmUgZ2V0ZG9tYWlubmFtZSBpbiA8bmV0ZGIuaD4sIG5vdCBpbiA8dW5pc3RkLmg+LgorICAgTm9uU3RvcCBLZXJuZWwgZGVjbGFyZXMgZ2V0aG9zdG5hbWUgaW4gPG5ldGRiLmg+LCBub3QgaW4gPHVuaXN0ZC5oPi4gICovCisvKiBCdXQgYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zLiAgKi8KKyNpZiAoKDAgJiYgKGRlZmluZWQgX0FJWCB8fCBkZWZpbmVkIF9fb3NmX18pKSBcCisgICAgIHx8ICgwICYmIGRlZmluZWQgX19UQU5ERU0pKSBcCisgICAgJiYgIWRlZmluZWQgX19HTElCQ19fCisjIGluY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKworLyogTVNWQyBkZWZpbmVzIG9mZl90IGluIDxzeXMvdHlwZXMuaD4uCisgICBNYXkgYWxzbyBkZWZpbmUgb2ZmX3QgdG8gYSA2NC1iaXQgdHlwZSBvbiBuYXRpdmUgV2luZG93cy4gICovCisjaWYgITEgfHwgMAorLyogR2V0IG9mZl90LiAgKi8KKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2lmICgwIHx8IDAgXAorICAgICB8fCAwIHx8IDAgXAorICAgICB8fCAwIHx8IDAgfHwgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSykKKy8qIEdldCBzc2l6ZV90LiAgKi8KKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworLyogR2V0IGdldG9wdCgpLCBvcHRhcmcsIG9wdGluZCwgb3B0ZXJyLCBvcHRvcHQuCisgICBCdXQgYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zLiAgKi8KKyNpZiAwICYmICFkZWZpbmVkIF9fR0xJQkNfXyAmJiAhZGVmaW5lZCBfR0xfU1lTVEVNX0dFVE9QVAorIyBpbmNsdWRlIDxnZXRvcHQuaD4KKyNlbmRpZgorCitfR0xfSU5MSU5FX0hFQURFUl9CRUdJTgorI2lmbmRlZiBfR0xfVU5JU1REX0lOTElORQorIyBkZWZpbmUgX0dMX1VOSVNURF9JTkxJTkUgX0dMX0lOTElORQorI2VuZGlmCisKKy8qIFRoZSBkZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBMIGV0Yy4gYXJlIGNvcGllZCBoZXJlLiAgKi8KKyNpZm5kZWYgX0dMX0NYWERFRlNfSAorI2RlZmluZSBfR0xfQ1hYREVGU19ICisKKy8qIFRoZSB0aHJlZSBtb3N0IGZyZXF1ZW50IHVzZSBjYXNlcyBvZiB0aGVzZSBtYWNyb3MgYXJlOgorCisgICAqIEZvciBwcm92aWRpbmcgYSBzdWJzdGl0dXRlIGZvciBhIGZ1bmN0aW9uIHRoYXQgaXMgbWlzc2luZyBvbiBzb21lCisgICAgIHBsYXRmb3JtcywgYnV0IGlzIGRlY2xhcmVkIGFuZCB3b3JrcyBmaW5lIG9uIHRoZSBwbGF0Zm9ybXMgb24gd2hpY2gKKyAgICAgaXQgZXhpc3RzOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgIUBIQVZFX0ZPT0AKKyAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgcmVwbGFjZW1lbnQgZm9yIGEgZnVuY3Rpb24gdGhhdCBleGlzdHMgb24gYWxsIHBsYXRmb3JtcywKKyAgICAgYnV0IGlzIGJyb2tlbi9pbnN1ZmZpY2llbnQgYW5kIG5lZWRzIHRvIGJlIHJlcGxhY2VkIG9uIHNvbWUgcGxhdGZvcm1zOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisgICAgICAgIyAgIHVuZGVmIGZvbworICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CisgICAgICAgIyBlbHNlCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgcmVwbGFjZW1lbnQgZm9yIGEgZnVuY3Rpb24gdGhhdCBleGlzdHMgb24gc29tZSBwbGF0Zm9ybXMKKyAgICAgYnV0IGlzIGJyb2tlbi9pbnN1ZmZpY2llbnQgYW5kIG5lZWRzIHRvIGJlIHJlcGxhY2VkIG9uIHNvbWUgb2YgdGhlbSBhbmQKKyAgICAgaXMgYWRkaXRpb25hbGx5IGVpdGhlciBtaXNzaW5nIG9yIHVuZGVjbGFyZWQgb24gc29tZSBvdGhlciBwbGF0Zm9ybXM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACisgICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyAgICAgICAjICAgdW5kZWYgZm9vCisgICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKyAgICAgICAjIGVsc2UKKyAgICAgICAjICBpZiAhQEhBVkVfRk9PQCAgIG9yICAgaWYgIUBIQVZFX0RFQ0xfRk9PQAorICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisqLworCisvKiBfR0xfRVhURVJOX0MgZGVjbGFyYXRpb247CisgICBwZXJmb3JtcyB0aGUgZGVjbGFyYXRpb24gd2l0aCBDIGxpbmthZ2UuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMKKyMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4gIkMiCisjZWxzZQorIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybgorI2VuZGlmCisKKy8qIF9HTF9GVU5DREVDTF9SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgZGVjbGFyZXMgYSByZXBsYWNlbWVudCBmdW5jdGlvbiwgbmFtZWQgcnBsX2Z1bmMsIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwKKyAgIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsIGFuZCBhdHRyaWJ1dGVzLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0ZVTkNERUNMX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisgKi8KKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICBfR0xfRlVOQ0RFQ0xfUlBMXzEgKHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpCisjZGVmaW5lIF9HTF9GVU5DREVDTF9SUExfMShycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0VYVEVSTl9DIHJldHR5cGUgcnBsX2Z1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworCisvKiBfR0xfRlVOQ0RFQ0xfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGRlY2xhcmVzIHRoZSBzeXN0ZW0gZnVuY3Rpb24sIG5hbWVkIGZ1bmMsIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwKKyAgIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsIGFuZCBhdHRyaWJ1dGVzLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0ZVTkNERUNMX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisgKi8KKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICBfR0xfRVhURVJOX0MgcmV0dHlwZSBmdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKworLyogX0dMX0NYWEFMSUFTX1JQTCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBkZWNsYXJlcyBhIEMrKyBhbGlhcyBjYWxsZWQgR05VTElCX05BTUVTUEFDRTo6ZnVuYworICAgdGhhdCByZWRpcmVjdHMgdG8gcnBsX2Z1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UgaXMgZGVmaW5lZC4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9DWFhBTElBU19SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworICovCisjZGVmaW5lIF9HTF9DWFhBTElBU19SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgX0dMX0NYWEFMSUFTX1JQTF8xIChmdW5jLCBycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKQorI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9IDo6cnBsX2Z1bmM7ICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1JQTF8xIChmdW5jLCBycGxfZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBycGxfZnVuYyBtYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudAorICAgZGVjbGFyYXRpb24uICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvcgorICAgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPig6OnJwbF9mdW5jKTsgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBkZWNsYXJlcyBhIEMrKyBhbGlhcyBjYWxsZWQgR05VTElCX05BTUVTUEFDRTo6ZnVuYworICAgdGhhdCByZWRpcmVjdHMgdG8gdGhlIHN5c3RlbSBwcm92aWRlZCBmdW5jdGlvbiBmdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFCisgICBpcyBkZWZpbmVkLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0NYWEFMSUFTX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CisgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorICAvKiBJZiB3ZSB3ZXJlIHRvIHdyaXRlCisgICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7CisgICAgIGxpa2UgYWJvdmUgaW4gX0dMX0NYWEFMSUFTX1JQTF8xLCB0aGUgY29tcGlsZXIgY291bGQgb3B0aW1pemUgY2FsbHMKKyAgICAgYmV0dGVyIChyZW1vdmUgYW4gaW5kaXJlY3Rpb24gdGhyb3VnaCBhICdzdGF0aWMnIHBvaW50ZXIgdmFyaWFibGUpLAorICAgICBidXQgdGhlbiB0aGUgX0dMX0NYWEFMSUFTV0FSTiBtYWNybyBiZWxvdyB3b3VsZCBjYXVzZSBhIHdhcm5pbmcgbm90IG9ubHkKKyAgICAgZm9yIHVzZXMgb2YgOjpmdW5jIGJ1dCBhbHNvIGZvciB1c2VzIG9mIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMuICAqLworIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOyAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1NZU19DQVNUIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gZnVuYyBtYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudCBkZWNsYXJhdGlvbi4KKyAgIEEgY2FzdCBpcyB1c2VkIHRvIHNpbGVuY2UgdGhlICJpbnZhbGlkIGNvbnZlcnNpb24iIGVycm9yIHRoYXQgd291bGQKKyAgIG90aGVyd2lzZSBvY2N1ci4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPig6OmZ1bmMpOyBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1NZU19DQVNUMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycywgcmV0dHlwZTIsIHBhcmFtZXRlcnMyKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gaXMgcGlja2VkIGFtb25nIGEgc2V0IG9mIG92ZXJsb2FkZWQgZnVuY3Rpb25zLAorICAgbmFtZWx5IHRoZSBvbmUgd2l0aCByZXR0eXBlMiBhbmQgcGFyYW1ldGVyczIuICBUd28gY29uc2VjdXRpdmUgY2FzdHMKKyAgIGFyZSB1c2VkIHRvIHNpbGVuY2UgdGhlICJjYW5ub3QgZmluZCBhIG1hdGNoIiBhbmQgImludmFsaWQgY29udmVyc2lvbiIKKyAgIGVycm9ycyB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyAgLyogVGhlIG91dGVyIGNhc3QgbXVzdCBiZSBhIHJlaW50ZXJwcmV0X2Nhc3QuCisgICAgIFRoZSBpbm5lciBjYXN0OiBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2V0IG9mIG92ZXJsb2FkZWQKKyAgICAgZnVuY3Rpb25zLCBpdCB3b3JrcyBhcyBhIHN0YXRpY19jYXN0PD4sIGNob29zaW5nIHRoZSBkZXNpZ25hdGVkIHZhcmlhbnQuCisgICAgIFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzaW5nbGUgdmFyaWFudCwgaXQgd29ya3MgYXMgYQorICAgICByZWludGVycHJldF9jYXN0PD4uIFRoZSBwYXJlbnRoZXNpemVkIGNhc3Qgc3ludGF4IHdvcmtzIGJvdGggd2F5cy4gICovCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzLHJldHR5cGUyLHBhcmFtZXRlcnMyKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKHJldHR5cGUyKCopcGFyYW1ldGVyczIpKDo6ZnVuYykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzLHJldHR5cGUyLHBhcmFtZXRlcnMyKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNXQVJOIChmdW5jKTsKKyAgIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZW1pdHRlZCB3aGVuIDo6ZnVuYyBpcyB1c2VkIGJ1dCBub3Qgd2hlbgorICAgR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgZnVuYyBtdXN0IGJlIGRlZmluZWQgd2l0aG91dCBvdmVybG9hZGVkCisgICB2YXJpYW50cy4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAorICAgX0dMX0NYWEFMSUFTV0FSTl8xIChmdW5jLCBHTlVMSUJfTkFNRVNQQUNFKQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8xKGZ1bmMsbmFtZXNwYWNlKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOXzIgKGZ1bmMsIG5hbWVzcGFjZSkKKy8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAorICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCisjIGlmICFfX09QVElNSVpFX18KKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKyAgICBfR0xfV0FSTl9PTl9VU0UgKGZ1bmMsIFwKKyAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICJVc2UgIiAjbmFtZXNwYWNlICI6OiIgI2Z1bmMgIiBpbnN0ZWFkLiIpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKyAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU1dBUk4xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZW1pdHRlZCB3aGVuIHRoZSBnaXZlbiBvdmVybG9hZGVkIHZhcmlhbnQgb2YgOjpmdW5jCisgICBpcyB1c2VkIGJ1dCBub3Qgd2hlbiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICAgX0dMX0NYWEFMSUFTV0FSTjFfMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgR05VTElCX05BTUVTUEFDRSkKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOMV8yIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBuYW1lc3BhY2UpCisvKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKyAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworIyBpZiAhX19PUFRJTUlaRV9fCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgICBfR0xfV0FSTl9PTl9VU0VfQ1hYIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJVc2UgIiAjbmFtZXNwYWNlICI6OiIgI2Z1bmMgIiBpbnN0ZWFkLiIpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKyNlbmRpZiAvKiBfR0xfQ1hYREVGU19IICovCisKKy8qIFRoZSBkZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVMTCBpcyBjb3BpZWQgaGVyZS4gICovCisvKiBfR0xfQVJHX05PTk5VTEwoKG4sLi4uLG0pKSB0ZWxscyB0aGUgY29tcGlsZXIgYW5kIHN0YXRpYyBhbmFseXplciB0b29scworICAgdGhhdCB0aGUgdmFsdWVzIHBhc3NlZCBhcyBhcmd1bWVudHMgbiwgLi4uLCBtIG11c3QgYmUgbm9uLU5VTEwgcG9pbnRlcnMuCisgICBuID0gMSBzdGFuZHMgZm9yIHRoZSBmaXJzdCBhcmd1bWVudCwgbiA9IDIgZm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgZXRjLiAgKi8KKyNpZm5kZWYgX0dMX0FSR19OT05OVUxMCisjIGlmIChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID49IDMpIHx8IF9fR05VQ19fID4gMworIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpIF9fYXR0cmlidXRlX18gKChfX25vbm51bGxfXyBwYXJhbXMpKQorIyBlbHNlCisjICBkZWZpbmUgX0dMX0FSR19OT05OVUxMKHBhcmFtcykKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UgaXMgY29waWVkIGhlcmUuICAqLworI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0UKKworIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKy8qIEEgY29tcGlsZXIgYXR0cmlidXRlIGlzIGF2YWlsYWJsZSBpbiBnY2MgdmVyc2lvbnMgNC4zLjAgYW5kIGxhdGVyLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24gX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtZXNzYWdlKSkpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisvKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmN0aW9uKSBmdW5jdGlvbgorIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBfR0xfV0FSTl9PTl9VU0VfQ1hYIChmdW5jdGlvbiwgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgInN0cmluZyIpCisgICBpcyBsaWtlIF9HTF9XQVJOX09OX1VTRSAoZnVuY3Rpb24sICJzdHJpbmciKSwgZXhjZXB0IHRoYXQgdGhlIGZ1bmN0aW9uIGlzCisgICBkZWNsYXJlZCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsCisgICBhbmQgYXR0cmlidXRlcy4KKyAgIFRoaXMgdmFyaWFudCBpcyB1c2VmdWwgZm9yIG92ZXJsb2FkZWQgZnVuY3Rpb25zIGluIEMrKy4gX0dMX1dBUk5fT05fVVNFIGRvZXMKKyAgIG5vdCB3b3JrIGluIHRoaXMgY2FzZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX09OX1VTRV9DWFgKKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCitleHRlcm4gcmV0dHlwZSBmdW5jdGlvbiBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzIFwKKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtc2cpKSkKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKy8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCitleHRlcm4gcmV0dHlwZSBmdW5jdGlvbiBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisjIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorX0dMX1dBUk5fRVhURVJOX0MgaW50IF9nbF93YXJuX29uX3VzZQorIyBlbmRpZgorI2VuZGlmCisKKy8qIF9HTF9XQVJOX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fRVhURVJOX0MKKyMgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cworIyAgZGVmaW5lIF9HTF9XQVJOX0VYVEVSTl9DIGV4dGVybiAiQyIKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9XQVJOX0VYVEVSTl9DIGV4dGVybgorIyBlbmRpZgorI2VuZGlmCisKKworLyogSGlkZSBzb21lIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBmcm9tIDx3aW5zb2NrMi5oPi4gICovCisKKyNpZiAwICYmIDAKKyMgaWYgIWRlZmluZWQgX0dMX1NZU19TT0NLRVRfSAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBzb2NrZXQKKyMgICBkZWZpbmUgc29ja2V0ICAgICAgICAgICAgICBzb2NrZXRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKyMgICB1bmRlZiBjb25uZWN0CisjICAgZGVmaW5lIGNvbm5lY3QgICAgICAgICAgICAgY29ubmVjdF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorIyAgIHVuZGVmIGFjY2VwdAorIyAgIGRlZmluZSBhY2NlcHQgICAgICAgICAgICAgIGFjY2VwdF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorIyAgIHVuZGVmIGJpbmQKKyMgICBkZWZpbmUgYmluZCAgICAgICAgICAgICAgICBiaW5kX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisjICAgdW5kZWYgZ2V0cGVlcm5hbWUKKyMgICBkZWZpbmUgZ2V0cGVlcm5hbWUgICAgICAgICBnZXRwZWVybmFtZV91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorIyAgIHVuZGVmIGdldHNvY2tuYW1lCisjICAgZGVmaW5lIGdldHNvY2tuYW1lICAgICAgICAgZ2V0c29ja25hbWVfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKyMgICB1bmRlZiBnZXRzb2Nrb3B0CisjICAgZGVmaW5lIGdldHNvY2tvcHQgICAgICAgICAgZ2V0c29ja29wdF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorIyAgIHVuZGVmIGxpc3RlbgorIyAgIGRlZmluZSBsaXN0ZW4gICAgICAgICAgICAgIGxpc3Rlbl91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorIyAgIHVuZGVmIHJlY3YKKyMgICBkZWZpbmUgcmVjdiAgICAgICAgICAgICAgICByZWN2X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisjICAgdW5kZWYgc2VuZAorIyAgIGRlZmluZSBzZW5kICAgICAgICAgICAgICAgIHNlbmRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKyMgICB1bmRlZiByZWN2ZnJvbQorIyAgIGRlZmluZSByZWN2ZnJvbSAgICAgICAgICAgIHJlY3Zmcm9tX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisjICAgdW5kZWYgc2VuZHRvCisjICAgZGVmaW5lIHNlbmR0byAgICAgICAgICAgICAgc2VuZHRvX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisjICAgdW5kZWYgc2V0c29ja29wdAorIyAgIGRlZmluZSBzZXRzb2Nrb3B0ICAgICAgICAgIHNldHNvY2tvcHRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKyMgICB1bmRlZiBzaHV0ZG93bgorIyAgIGRlZmluZSBzaHV0ZG93biAgICAgICAgICAgIHNodXRkb3duX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisjICBlbHNlCisgICAgX0dMX1dBUk5fT05fVVNFIChzb2NrZXQsCisgICAgICAgICAgICAgICAgICAgICAic29ja2V0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworICAgIF9HTF9XQVJOX09OX1VTRSAoY29ubmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICJjb25uZWN0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworICAgIF9HTF9XQVJOX09OX1VTRSAoYWNjZXB0LAorICAgICAgICAgICAgICAgICAgICAgImFjY2VwdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKyAgICBfR0xfV0FSTl9PTl9VU0UgKGJpbmQsCisgICAgICAgICAgICAgICAgICAgICAiYmluZCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKyAgICBfR0xfV0FSTl9PTl9VU0UgKGdldHBlZXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgImdldHBlZXJuYW1lKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworICAgIF9HTF9XQVJOX09OX1VTRSAoZ2V0c29ja25hbWUsCisgICAgICAgICAgICAgICAgICAgICAiZ2V0c29ja25hbWUoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisgICAgX0dMX1dBUk5fT05fVVNFIChnZXRzb2Nrb3B0LAorICAgICAgICAgICAgICAgICAgICAgImdldHNvY2tvcHQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisgICAgX0dMX1dBUk5fT05fVVNFIChsaXN0ZW4sCisgICAgICAgICAgICAgICAgICAgICAibGlzdGVuKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworICAgIF9HTF9XQVJOX09OX1VTRSAocmVjdiwKKyAgICAgICAgICAgICAgICAgICAgICJyZWN2KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworICAgIF9HTF9XQVJOX09OX1VTRSAoc2VuZCwKKyAgICAgICAgICAgICAgICAgICAgICJzZW5kKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworICAgIF9HTF9XQVJOX09OX1VTRSAocmVjdmZyb20sCisgICAgICAgICAgICAgICAgICAgICAicmVjdmZyb20oKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisgICAgX0dMX1dBUk5fT05fVVNFIChzZW5kdG8sCisgICAgICAgICAgICAgICAgICAgICAic2VuZHRvKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworICAgIF9HTF9XQVJOX09OX1VTRSAoc2V0c29ja29wdCwKKyAgICAgICAgICAgICAgICAgICAgICJzZXRzb2Nrb3B0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworICAgIF9HTF9XQVJOX09OX1VTRSAoc2h1dGRvd24sCisgICAgICAgICAgICAgICAgICAgICAic2h1dGRvd24oKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisjICBlbmRpZgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBfR0xfU1lTX1NFTEVDVF9ICisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHNlbGVjdAorIyAgIGRlZmluZSBzZWxlY3QgICAgICAgICAgICAgIHNlbGVjdF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zZWxlY3RfaAorIyAgZWxzZQorICAgIF9HTF9XQVJOX09OX1VTRSAoc2VsZWN0LAorICAgICAgICAgICAgICAgICAgICAgInNlbGVjdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zZWxlY3QuaD4iKTsKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBPUy8yIEVNWCBsYWNrcyB0aGVzZSBtYWNyb3MuICAqLworI2lmbmRlZiBTVERJTl9GSUxFTk8KKyMgZGVmaW5lIFNURElOX0ZJTEVOTyAwCisjZW5kaWYKKyNpZm5kZWYgU1RET1VUX0ZJTEVOTworIyBkZWZpbmUgU1RET1VUX0ZJTEVOTyAxCisjZW5kaWYKKyNpZm5kZWYgU1RERVJSX0ZJTEVOTworIyBkZWZpbmUgU1RERVJSX0ZJTEVOTyAyCisjZW5kaWYKKworLyogRW5zdXJlICpfT0sgbWFjcm9zIGV4aXN0LiAgKi8KKyNpZm5kZWYgRl9PSworIyBkZWZpbmUgRl9PSyAwCisjIGRlZmluZSBYX09LIDEKKyMgZGVmaW5lIFdfT0sgMgorIyBkZWZpbmUgUl9PSyA0CisjZW5kaWYKKworCisvKiBEZWNsYXJlIG92ZXJyaWRkZW4gZnVuY3Rpb25zLiAgKi8KKworCisjaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLyogVGhlIGFjY2VzcygpIGZ1bmN0aW9uIGlzIGEgc2VjdXJpdHkgcmlzay4gICovCitfR0xfV0FSTl9PTl9VU0UgKGFjY2VzcywgInRoZSBhY2Nlc3MgZnVuY3Rpb24gaXMgYSBzZWN1cml0eSByaXNrIC0gIgorICAgICAgICAgICAgICAgICAidXNlIHRoZSBnbnVsaWIgbW9kdWxlIGZhY2Nlc3NhdCBpbnN0ZWFkIik7CisjZW5kaWYKKworCisjaWYgMAorX0dMX0NYWEFMSUFTX1NZUyAoY2hkaXIsIGludCwgKGNvbnN0IGNoYXIgKmZpbGUpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChjaGRpcik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGNoZGlyCisjIGlmIEhBVkVfUkFXX0RFQ0xfQ0hESVIKK19HTF9XQVJOX09OX1VTRSAoY2hvd24sICJjaGRpciBpcyBub3QgYWx3YXlzIGluIDx1bmlzdGQuaD4gLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBjaGRpciBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisvKiBDaGFuZ2UgdGhlIG93bmVyIG9mIEZJTEUgdG8gVUlEIChpZiBVSUQgaXMgbm90IC0xKSBhbmQgdGhlIGdyb3VwIG9mIEZJTEUKKyAgIHRvIEdJRCAoaWYgR0lEIGlzIG5vdCAtMSkuICBGb2xsb3cgc3ltYm9saWMgbGlua3MuCisgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgLTEgYW5kIGVycm5vIHNldC4KKyAgIFNlZSB0aGUgUE9TSVg6MjAwOCBzcGVjaWZpY2F0aW9uCisgICA8aHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvZnVuY3Rpb25zL2Nob3duLmh0bWwuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGNob3duCisjICAgZGVmaW5lIGNob3duIHJwbF9jaG93bgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGNob3duLCBpbnQsIChjb25zdCBjaGFyICpmaWxlLCB1aWRfdCB1aWQsIGdpZF90IGdpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChjaG93biwgaW50LCAoY29uc3QgY2hhciAqZmlsZSwgdWlkX3QgdWlkLCBnaWRfdCBnaWQpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGNob3duLCBpbnQsIChjb25zdCBjaGFyICpmaWxlLCB1aWRfdCB1aWQsIGdpZF90IGdpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoY2hvd24sIGludCwgKGNvbnN0IGNoYXIgKmZpbGUsIHVpZF90IHVpZCwgZ2lkX3QgZ2lkKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChjaG93bik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGNob3duCisjIGlmIEhBVkVfUkFXX0RFQ0xfQ0hPV04KK19HTF9XQVJOX09OX1VTRSAoY2hvd24sICJjaG93biBmYWlscyB0byBmb2xsb3cgc3ltbGlua3Mgb24gc29tZSBzeXN0ZW1zIGFuZCAiCisgICAgICAgICAgICAgICAgICJkb2Vzbid0IHRyZWF0IGEgdWlkIG9yIGdpZCBvZiAtMSBvbiBzb21lIHN5c3RlbXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBjaG93biBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAxCisjIGlmIDAKKy8qIEF1dG9tYXRpY2FsbHkgaW5jbHVkZWQgYnkgbW9kdWxlcyB0aGF0IG5lZWQgYSByZXBsYWNlbWVudCBmb3IgY2xvc2UuICAqLworIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBjbG9zZQorIyAgIGRlZmluZSBjbG9zZSBycGxfY2xvc2UKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChjbG9zZSwgaW50LCAoaW50IGZkKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChjbG9zZSwgaW50LCAoaW50IGZkKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKGNsb3NlLCBpbnQsIChpbnQgZmQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGNsb3NlKTsKKyNlbGlmIDAKKyMgdW5kZWYgY2xvc2UKKyMgZGVmaW5lIGNsb3NlIGNsb3NlX3VzZWRfd2l0aG91dF9yZXF1ZXN0aW5nX2dudWxpYl9tb2R1bGVfY2xvc2UKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgY2xvc2UKKy8qIEFzc3VtZSBjbG9zZSBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFIChjbG9zZSwgImNsb3NlIGRvZXMgbm90IHBvcnRhYmx5IHdvcmsgb24gc29ja2V0cyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGNsb3NlIGZvciBwb3J0YWJpbGl0eSIpOworI2VuZGlmCisKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgZHVwIHJwbF9kdXAKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChkdXAsIGludCwgKGludCBvbGRmZCkpOworX0dMX0NYWEFMSUFTX1JQTCAoZHVwLCBpbnQsIChpbnQgb2xkZmQpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoZHVwLCBpbnQsIChpbnQgb2xkZmQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGR1cCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGR1cAorIyBpZiBIQVZFX1JBV19ERUNMX0RVUAorX0dMX1dBUk5fT05fVVNFIChkdXAsICJkdXAgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGR1cCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAxCisvKiBDb3B5IHRoZSBmaWxlIGRlc2NyaXB0b3IgT0xERkQgaW50byBmaWxlIGRlc2NyaXB0b3IgTkVXRkQuICBEbyBub3RoaW5nIGlmCisgICBORVdGRCA9IE9MREZELCBvdGhlcndpc2UgY2xvc2UgTkVXRkQgZmlyc3QgaWYgaXQgaXMgb3Blbi4KKyAgIFJldHVybiBuZXdmZCBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgLTEgYW5kIGVycm5vIHNldC4KKyAgIFNlZSB0aGUgUE9TSVg6MjAwOCBzcGVjaWZpY2F0aW9uCisgICA8aHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvZnVuY3Rpb25zL2R1cDIuaHRtbD4uICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBkdXAyIHJwbF9kdXAyCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZHVwMiwgaW50LCAoaW50IG9sZGZkLCBpbnQgbmV3ZmQpKTsKK19HTF9DWFhBTElBU19SUEwgKGR1cDIsIGludCwgKGludCBvbGRmZCwgaW50IG5ld2ZkKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChkdXAyLCBpbnQsIChpbnQgb2xkZmQsIGludCBuZXdmZCkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGR1cDIsIGludCwgKGludCBvbGRmZCwgaW50IG5ld2ZkKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChkdXAyKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZHVwMgorIyBpZiBIQVZFX1JBV19ERUNMX0RVUDIKK19HTF9XQVJOX09OX1VTRSAoZHVwMiwgImR1cDIgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGR1cDIgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorLyogQ29weSB0aGUgZmlsZSBkZXNjcmlwdG9yIE9MREZEIGludG8gZmlsZSBkZXNjcmlwdG9yIE5FV0ZELCB3aXRoIHRoZQorICAgc3BlY2lmaWVkIGZsYWdzLgorICAgVGhlIGZsYWdzIGFyZSBhIGJpdG1hc2ssIHBvc3NpYmx5IGluY2x1ZGluZyBPX0NMT0VYRUMgKGRlZmluZWQgaW4gPGZjbnRsLmg+KQorICAgYW5kIE9fVEVYVCwgT19CSU5BUlkgKGRlZmluZWQgaW4gImJpbmFyeS1pby5oIikuCisgICBDbG9zZSBORVdGRCBmaXJzdCBpZiBpdCBpcyBvcGVuLgorICAgUmV0dXJuIG5ld2ZkIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSAtMSBhbmQgZXJybm8gc2V0LgorICAgU2VlIHRoZSBMaW51eCBtYW4gcGFnZSBhdAorICAgPGh0dHA6Ly93d3cua2VybmVsLm9yZy9kb2MvbWFuLXBhZ2VzL29ubGluZS9wYWdlcy9tYW4yL2R1cDMuMi5odG1sPi4gICovCisjIGlmIDEKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGR1cDMgcnBsX2R1cDMKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChkdXAzLCBpbnQsIChpbnQgb2xkZmQsIGludCBuZXdmZCwgaW50IGZsYWdzKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChkdXAzLCBpbnQsIChpbnQgb2xkZmQsIGludCBuZXdmZCwgaW50IGZsYWdzKSk7CisjIGVsc2UKK19HTF9GVU5DREVDTF9TWVMgKGR1cDMsIGludCwgKGludCBvbGRmZCwgaW50IG5ld2ZkLCBpbnQgZmxhZ3MpKTsKK19HTF9DWFhBTElBU19TWVMgKGR1cDMsIGludCwgKGludCBvbGRmZCwgaW50IG5ld2ZkLCBpbnQgZmxhZ3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGR1cDMpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBkdXAzCisjIGlmIEhBVkVfUkFXX0RFQ0xfRFVQMworX0dMX1dBUk5fT05fVVNFIChkdXAzLCAiZHVwMyBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZHVwMyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAxCisjIGlmICExCisvKiBTZXQgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCB2YWx1ZXMuICBBbiBhcnJheSBvZiBzdHJpbmdzIG9mIHRoZSBmb3JtCisgICAiVkFSSUFCTEU9VkFMVUUiLCB0ZXJtaW5hdGVkIHdpdGggYSBOVUxMLiAgKi8KKyMgIGlmIGRlZmluZWQgX19BUFBMRV9fICYmIGRlZmluZWQgX19NQUNIX18KKyMgICBpbmNsdWRlIDxjcnRfZXh0ZXJucy5oPgorIyAgIGRlZmluZSBlbnZpcm9uICgqX05TR2V0RW52aXJvbiAoKSkKKyMgIGVsc2UKKyMgICBpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjICAgZW5kaWYKK2V4dGVybiBjaGFyICoqZW52aXJvbjsKKyMgICBpZmRlZiBfX2NwbHVzcGx1cworfQorIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyBpZiBIQVZFX1JBV19ERUNMX0VOVklST04KK19HTF9VTklTVERfSU5MSU5FIGNoYXIgKioqCitycGxfZW52aXJvbiAodm9pZCkKK3sKKyAgcmV0dXJuICZlbnZpcm9uOworfQorX0dMX1dBUk5fT05fVVNFIChycGxfZW52aXJvbiwgImVudmlyb24gaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGVudmlyb24gZm9yIHBvcnRhYmlsaXR5Iik7CisjICB1bmRlZiBlbnZpcm9uCisjICBkZWZpbmUgZW52aXJvbiAoKnJwbF9lbnZpcm9uICgpKQorIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKy8qIExpa2UgYWNjZXNzKCksIGV4Y2VwdCB0aGF0IGl0IHVzZXMgdGhlIGVmZmVjdGl2ZSB1c2VyIGlkIGFuZCBncm91cCBpZCBvZgorICAgdGhlIGN1cnJlbnQgcHJvY2Vzcy4gICovCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChldWlkYWNjZXNzLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IG1vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChldWlkYWNjZXNzLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IG1vZGUpKTsKK19HTF9DWFhBTElBU1dBUk4gKGV1aWRhY2Nlc3MpOworIyBpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisvKiBMaWtlIGFjY2VzcygpLCB0aGlzIGZ1bmN0aW9uIGlzIGEgc2VjdXJpdHkgcmlzay4gICovCitfR0xfV0FSTl9PTl9VU0UgKGV1aWRhY2Nlc3MsICJ0aGUgZXVpZGFjY2VzcyBmdW5jdGlvbiBpcyBhIHNlY3VyaXR5IHJpc2sgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgdGhlIGdudWxpYiBtb2R1bGUgZmFjY2Vzc2F0IGluc3RlYWQiKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZXVpZGFjY2VzcworIyBpZiBIQVZFX1JBV19ERUNMX0VVSURBQ0NFU1MKK19HTF9XQVJOX09OX1VTRSAoZXVpZGFjY2VzcywgImV1aWRhY2Nlc3MgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGV1aWRhY2Nlc3MgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoZmFjY2Vzc2F0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlLCBpbnQgbW9kZSwgaW50IGZsYWcpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZmFjY2Vzc2F0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlLCBpbnQgbW9kZSwgaW50IGZsYWcpKTsKK19HTF9DWFhBTElBU1dBUk4gKGZhY2Nlc3NhdCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZhY2Nlc3NhdAorIyBpZiBIQVZFX1JBV19ERUNMX0ZBQ0NFU1NBVAorX0dMX1dBUk5fT05fVVNFIChmYWNjZXNzYXQsICJmYWNjZXNzYXQgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZmFjY2Vzc2F0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKy8qIENoYW5nZSB0aGUgcHJvY2VzcycgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSB0byB0aGUgZGlyZWN0b3J5IG9uIHdoaWNoCisgICB0aGUgZ2l2ZW4gZmlsZSBkZXNjcmlwdG9yIGlzIG9wZW4uCisgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgLTEgYW5kIGVycm5vIHNldC4KKyAgIFNlZSB0aGUgUE9TSVg6MjAwOCBzcGVjaWZpY2F0aW9uCisgICA8aHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvZnVuY3Rpb25zL2ZjaGRpci5odG1sPi4gICovCisjIGlmICEgMQorX0dMX0ZVTkNERUNMX1NZUyAoZmNoZGlyLCBpbnQsIChpbnQgLypmZCovKSk7CisKKy8qIEdudWxpYiBpbnRlcm5hbCBob29rcyBuZWVkZWQgdG8gbWFpbnRhaW4gdGhlIGZjaGRpciBtZXRhZGF0YS4gICovCitfR0xfRVhURVJOX0MgaW50IF9nbF9yZWdpc3Rlcl9mZCAoaW50IGZkLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKKyAgICAgX0dMX0FSR19OT05OVUxMICgoMikpOworX0dMX0VYVEVSTl9DIHZvaWQgX2dsX3VucmVnaXN0ZXJfZmQgKGludCBmZCk7CitfR0xfRVhURVJOX0MgaW50IF9nbF9yZWdpc3Rlcl9kdXAgKGludCBvbGRmZCwgaW50IG5ld2ZkKTsKK19HTF9FWFRFUk5fQyBjb25zdCBjaGFyICpfZ2xfZGlyZWN0b3J5X25hbWUgKGludCBmZCk7CisKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGZjaGRpciwgaW50LCAoaW50IC8qZmQqLykpOworIyAgZW5kaWYKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZjaGRpciwgaW50LCAoaW50IC8qZmQqLykpOworX0dMX0NYWEFMSUFTV0FSTiAoZmNoZGlyKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZmNoZGlyCisjIGlmIEhBVkVfUkFXX0RFQ0xfRkNIRElSCitfR0xfV0FSTl9PTl9VU0UgKGZjaGRpciwgImZjaGRpciBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZmNoZGlyIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmY2hvd25hdAorIyAgIGRlZmluZSBmY2hvd25hdCBycGxfZmNob3duYXQKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmY2hvd25hdCwgaW50LCAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZF90IG93bmVyLCBnaWRfdCBncm91cCwgaW50IGZsYWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoZmNob3duYXQsIGludCwgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWRfdCBvd25lciwgZ2lkX3QgZ3JvdXAsIGludCBmbGFnKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChmY2hvd25hdCwgaW50LCAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZF90IG93bmVyLCBnaWRfdCBncm91cCwgaW50IGZsYWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZjaG93bmF0LCBpbnQsIChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkX3Qgb3duZXIsIGdpZF90IGdyb3VwLCBpbnQgZmxhZykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZmNob3duYXQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmY2hvd25hdAorIyBpZiBIQVZFX1JBV19ERUNMX0ZDSE9XTkFUCitfR0xfV0FSTl9PTl9VU0UgKGZjaG93bmF0LCAiZmNob3duYXQgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgb3BlbmF0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKy8qIFN5bmNocm9uaXplIGNoYW5nZXMgdG8gYSBmaWxlLgorICAgUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIC0xIGFuZCBlcnJubyBzZXQuCisgICBTZWUgUE9TSVg6MjAwOCBzcGVjaWZpY2F0aW9uCisgICA8aHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvZnVuY3Rpb25zL2ZkYXRhc3luYy5odG1sPi4gICovCisjIGlmICExIHx8ICExCitfR0xfRlVOQ0RFQ0xfU1lTIChmZGF0YXN5bmMsIGludCwgKGludCBmZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZmRhdGFzeW5jLCBpbnQsIChpbnQgZmQpKTsKK19HTF9DWFhBTElBU1dBUk4gKGZkYXRhc3luYyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZkYXRhc3luYworIyBpZiBIQVZFX1JBV19ERUNMX0ZEQVRBU1lOQworX0dMX1dBUk5fT05fVVNFIChmZGF0YXN5bmMsICJmZGF0YXN5bmMgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZkYXRhc3luYyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisvKiBTeW5jaHJvbml6ZSBjaGFuZ2VzLCBpbmNsdWRpbmcgbWV0YWRhdGEsIHRvIGEgZmlsZS4KKyAgIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSAtMSBhbmQgZXJybm8gc2V0LgorICAgU2VlIFBPU0lYOjIwMDggc3BlY2lmaWNhdGlvbgorICAgPGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Z1bmN0aW9ucy9mc3luYy5odG1sPi4gICovCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChmc3luYywgaW50LCAoaW50IGZkKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmc3luYywgaW50LCAoaW50IGZkKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChmc3luYyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZzeW5jCisjIGlmIEhBVkVfUkFXX0RFQ0xfRlNZTkMKK19HTF9XQVJOX09OX1VTRSAoZnN5bmMsICJmc3luYyBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZnN5bmMgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorLyogQ2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmaWxlIHRvIHdoaWNoIEZEIGlzIG9wZW5lZCB0byBiZWNvbWUgZXF1YWwgdG8gTEVOR1RILgorICAgUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIC0xIGFuZCBlcnJubyBzZXQuCisgICBTZWUgdGhlIFBPU0lYOjIwMDggc3BlY2lmaWNhdGlvbgorICAgPGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Z1bmN0aW9ucy9mdHJ1bmNhdGUuaHRtbD4uICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZ0cnVuY2F0ZQorIyAgIGRlZmluZSBmdHJ1bmNhdGUgcnBsX2Z0cnVuY2F0ZQorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZ0cnVuY2F0ZSwgaW50LCAoaW50IGZkLCBvZmZfdCBsZW5ndGgpKTsKK19HTF9DWFhBTElBU19SUEwgKGZ0cnVuY2F0ZSwgaW50LCAoaW50IGZkLCBvZmZfdCBsZW5ndGgpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGZ0cnVuY2F0ZSwgaW50LCAoaW50IGZkLCBvZmZfdCBsZW5ndGgpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmdHJ1bmNhdGUsIGludCwgKGludCBmZCwgb2ZmX3QgbGVuZ3RoKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmdHJ1bmNhdGUpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmdHJ1bmNhdGUKKyMgaWYgSEFWRV9SQVdfREVDTF9GVFJVTkNBVEUKK19HTF9XQVJOX09OX1VTRSAoZnRydW5jYXRlLCAiZnRydW5jYXRlIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmdHJ1bmNhdGUgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorLyogR2V0IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCBhbmQgcHV0IGl0IGluIFNJWkUgYnl0ZXMKKyAgIG9mIEJVRi4KKyAgIFJldHVybiBCVUYgaWYgc3VjY2Vzc2Z1bCwgb3IgTlVMTCBpZiB0aGUgZGlyZWN0b3J5IGNvdWxkbid0IGJlIGRldGVybWluZWQKKyAgIG9yIFNJWkUgd2FzIHRvbyBzbWFsbC4KKyAgIFNlZSB0aGUgUE9TSVg6MjAwOCBzcGVjaWZpY2F0aW9uCisgICA8aHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvZnVuY3Rpb25zL2dldGN3ZC5odG1sPi4KKyAgIEFkZGl0aW9uYWxseSwgdGhlIGdudWxpYiBtb2R1bGUgJ2dldGN3ZCcgZ3VhcmFudGVlcyB0aGUgZm9sbG93aW5nIEdOVQorICAgZXh0ZW5zaW9uOiBJZiBCVUYgaXMgTlVMTCwgYW4gYXJyYXkgaXMgYWxsb2NhdGVkIHdpdGggJ21hbGxvYyc7IHRoZSBhcnJheQorICAgaXMgU0laRSBieXRlcyBsb25nLCB1bmxlc3MgU0laRSA9PSAwLCBpbiB3aGljaCBjYXNlIGl0IGlzIGFzIGJpZyBhcworICAgbmVjZXNzYXJ5LiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgZ2V0Y3dkIHJwbF9nZXRjd2QKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChnZXRjd2QsIGNoYXIgKiwgKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpKTsKK19HTF9DWFhBTElBU19SUEwgKGdldGN3ZCwgY2hhciAqLCAoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkpOworIyBlbHNlCisvKiBOZWVkIHRvIGNhc3QsIGJlY2F1c2Ugb24gbWluZ3csIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZS4gICovCitfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKGdldGN3ZCwgY2hhciAqLCAoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZ2V0Y3dkKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZ2V0Y3dkCisjIGlmIEhBVkVfUkFXX0RFQ0xfR0VUQ1dECitfR0xfV0FSTl9PTl9VU0UgKGdldGN3ZCwgImdldGN3ZCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZ2V0Y3dkIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKy8qIFJldHVybiB0aGUgTklTIGRvbWFpbiBuYW1lIG9mIHRoZSBtYWNoaW5lLgorICAgV0FSTklORyEgVGhlIE5JUyBkb21haW4gbmFtZSBpcyB1bnJlbGF0ZWQgdG8gdGhlIGZ1bGx5IHF1YWxpZmllZCBob3N0IG5hbWUKKyAgICAgICAgICAgIG9mIHRoZSBtYWNoaW5lLiAgSXQgaXMgYWxzbyB1bnJlbGF0ZWQgdG8gZW1haWwgYWRkcmVzc2VzLgorICAgV0FSTklORyEgVGhlIE5JUyBkb21haW4gbmFtZSBpcyB1c3VhbGx5IHRoZSBlbXB0eSBzdHJpbmcgb3IgIihub25lKSIgd2hlbgorICAgICAgICAgICAgbm90IHVzaW5nIE5JUy4KKworICAgUHV0IHVwIHRvIExFTiBieXRlcyBvZiB0aGUgTklTIGRvbWFpbiBuYW1lIGludG8gTkFNRS4KKyAgIE51bGwgdGVybWluYXRlIGl0IGlmIHRoZSBuYW1lIGlzIHNob3J0ZXIgdGhhbiBMRU4uCisgICBJZiB0aGUgTklTIGRvbWFpbiBuYW1lIGlzIGxvbmdlciB0aGFuIExFTiwgc2V0IGVycm5vID0gRUlOVkFMIGFuZCByZXR1cm4gLTEuCisgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2Ugc2V0IGVycm5vIGFuZCByZXR1cm4gLTEuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGdldGRvbWFpbm5hbWUKKyMgICBkZWZpbmUgZ2V0ZG9tYWlubmFtZSBycGxfZ2V0ZG9tYWlubmFtZQorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGdldGRvbWFpbm5hbWUsIGludCwgKGNoYXIgKm5hbWUsIHNpemVfdCBsZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChnZXRkb21haW5uYW1lLCBpbnQsIChjaGFyICpuYW1lLCBzaXplX3QgbGVuKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChnZXRkb21haW5uYW1lLCBpbnQsIChjaGFyICpuYW1lLCBzaXplX3QgbGVuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGdldGRvbWFpbm5hbWUsIGludCwgKGNoYXIgKm5hbWUsIHNpemVfdCBsZW4pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGdldGRvbWFpbm5hbWUpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBnZXRkb21haW5uYW1lCisjIGlmIEhBVkVfUkFXX0RFQ0xfR0VURE9NQUlOTkFNRQorX0dMX1dBUk5fT05fVVNFIChnZXRkb21haW5uYW1lLCAiZ2V0ZG9tYWlubmFtZSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZ2V0ZG9tYWlubmFtZSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAxCisvKiBSZXR1cm4gdGhlIG1heGltdW0gbnVtYmVyIG9mIGZpbGUgZGVzY3JpcHRvcnMgaW4gdGhlIGN1cnJlbnQgcHJvY2Vzcy4KKyAgIEluIFBPU0lYLCB0aGlzIGlzIHNhbWUgYXMgc3lzY29uZiAoX1NDX09QRU5fTUFYKS4gICovCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChnZXRkdGFibGVzaXplLCBpbnQsICh2b2lkKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChnZXRkdGFibGVzaXplLCBpbnQsICh2b2lkKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChnZXRkdGFibGVzaXplKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZ2V0ZHRhYmxlc2l6ZQorIyBpZiBIQVZFX1JBV19ERUNMX0dFVERUQUJMRVNJWkUKK19HTF9XQVJOX09OX1VTRSAoZ2V0ZHRhYmxlc2l6ZSwgImdldGR0YWJsZXNpemUgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGdldGR0YWJsZXNpemUgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorLyogUmV0dXJuIHRoZSBzdXBwbGVtZW50YWwgZ3JvdXBzIHRoYXQgdGhlIGN1cnJlbnQgcHJvY2VzcyBiZWxvbmdzIHRvLgorICAgSXQgaXMgdW5zcGVjaWZpZWQgd2hldGhlciB0aGUgZWZmZWN0aXZlIGdyb3VwIGlkIGlzIGluIHRoZSBsaXN0LgorICAgSWYgTiBpcyAwLCByZXR1cm4gdGhlIGdyb3VwIGNvdW50OyBvdGhlcndpc2UsIE4gZGVzY3JpYmVzIGhvdyBtYW55CisgICBlbnRyaWVzIGFyZSBhdmFpbGFibGUgaW4gR1JPVVBTLiAgUmV0dXJuIC0xIGFuZCBzZXQgZXJybm8gaWYgTiBpcworICAgbm90IDAgYW5kIG5vdCBsYXJnZSBlbm91Z2guICBGYWlscyB3aXRoIEVOT1NZUyBvbiBzb21lIHN5c3RlbXMuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGdldGdyb3VwcworIyAgIGRlZmluZSBnZXRncm91cHMgcnBsX2dldGdyb3VwcworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGdldGdyb3VwcywgaW50LCAoaW50IG4sIGdpZF90ICpncm91cHMpKTsKK19HTF9DWFhBTElBU19SUEwgKGdldGdyb3VwcywgaW50LCAoaW50IG4sIGdpZF90ICpncm91cHMpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGdldGdyb3VwcywgaW50LCAoaW50IG4sIGdpZF90ICpncm91cHMpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChnZXRncm91cHMsIGludCwgKGludCBuLCBnaWRfdCAqZ3JvdXBzKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChnZXRncm91cHMpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBnZXRncm91cHMKKyMgaWYgSEFWRV9SQVdfREVDTF9HRVRHUk9VUFMKK19HTF9XQVJOX09OX1VTRSAoZ2V0Z3JvdXBzLCAiZ2V0Z3JvdXBzIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBnZXRncm91cHMgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorLyogUmV0dXJuIHRoZSBzdGFuZGFyZCBob3N0IG5hbWUgb2YgdGhlIG1hY2hpbmUuCisgICBXQVJOSU5HISBUaGUgaG9zdCBuYW1lIG1heSBvciBtYXkgbm90IGJlIGZ1bGx5IHF1YWxpZmllZC4KKworICAgUHV0IHVwIHRvIExFTiBieXRlcyBvZiB0aGUgaG9zdCBuYW1lIGludG8gTkFNRS4KKyAgIE51bGwgdGVybWluYXRlIGl0IGlmIHRoZSBuYW1lIGlzIHNob3J0ZXIgdGhhbiBMRU4uCisgICBJZiB0aGUgaG9zdCBuYW1lIGlzIGxvbmdlciB0aGFuIExFTiwgc2V0IGVycm5vID0gRUlOVkFMIGFuZCByZXR1cm4gLTEuCisgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2Ugc2V0IGVycm5vIGFuZCByZXR1cm4gLTEuICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGdldGhvc3RuYW1lCisjICAgZGVmaW5lIGdldGhvc3RuYW1lIHJwbF9nZXRob3N0bmFtZQorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGdldGhvc3RuYW1lLCBpbnQsIChjaGFyICpuYW1lLCBzaXplX3QgbGVuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKGdldGhvc3RuYW1lLCBpbnQsIChjaGFyICpuYW1lLCBzaXplX3QgbGVuKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChnZXRob3N0bmFtZSwgaW50LCAoY2hhciAqbmFtZSwgc2l6ZV90IGxlbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorLyogTmVlZCB0byBjYXN0LCBiZWNhdXNlIG9uIFNvbGFyaXMgMTAgYW5kIE9TRi8xIDUuMSBzeXN0ZW1zLCB0aGUgc2Vjb25kCisgICBwYXJhbWV0ZXIgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4uICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUIChnZXRob3N0bmFtZSwgaW50LCAoY2hhciAqbmFtZSwgc2l6ZV90IGxlbikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZ2V0aG9zdG5hbWUpOworI2VsaWYgMAorIyB1bmRlZiBnZXRob3N0bmFtZQorIyBkZWZpbmUgZ2V0aG9zdG5hbWUgZ2V0aG9zdG5hbWVfdXNlZF93aXRob3V0X3JlcXVlc3RpbmdfZ251bGliX21vZHVsZV9nZXRob3N0bmFtZQorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBnZXRob3N0bmFtZQorIyBpZiBIQVZFX1JBV19ERUNMX0dFVEhPU1ROQU1FCitfR0xfV0FSTl9PTl9VU0UgKGdldGhvc3RuYW1lLCAiZ2V0aG9zdG5hbWUgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGdldGhvc3RuYW1lIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKy8qIFJldHVybnMgdGhlIHVzZXIncyBsb2dpbiBuYW1lLCBvciBOVUxMIGlmIGl0IGNhbm5vdCBiZSBmb3VuZC4gIFVwb24gZXJyb3IsCisgICByZXR1cm5zIE5VTEwgd2l0aCBlcnJubyBzZXQuCisKKyAgIFNlZSA8aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3N1c3YzeHNoL2dldGxvZ2luLmh0bWw+LgorCisgICBNb3N0IHByb2dyYW1zIGRvbid0IG5lZWQgdG8gdXNlIHRoaXMgZnVuY3Rpb24sIGJlY2F1c2UgdGhlIGluZm9ybWF0aW9uIGlzCisgICBhdmFpbGFibGUgdGhyb3VnaCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CisgICAgICR7TE9HTkFNRS0kVVNFUn0gICAgICAgIG9uIFVuaXggcGxhdGZvcm1zLAorICAgICAkVVNFUk5BTUUgICAgICAgICAgICAgICBvbiBuYXRpdmUgV2luZG93cyBwbGF0Zm9ybXMuCisgKi8KKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGdldGxvZ2luLCBjaGFyICosICh2b2lkKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChnZXRsb2dpbiwgY2hhciAqLCAodm9pZCkpOworX0dMX0NYWEFMSUFTV0FSTiAoZ2V0bG9naW4pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBnZXRsb2dpbgorIyBpZiBIQVZFX1JBV19ERUNMX0dFVExPR0lOCitfR0xfV0FSTl9PTl9VU0UgKGdldGxvZ2luLCAiZ2V0bG9naW4gaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGdldGxvZ2luIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKy8qIENvcGllcyB0aGUgdXNlcidzIGxvZ2luIG5hbWUgdG8gTkFNRS4KKyAgIFRoZSBhcnJheSBwb2ludGVkIHRvIGJ5IE5BTUUgaGFzIHJvb20gZm9yIFNJWkUgYnl0ZXMuCisKKyAgIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLiAgVXBvbiBlcnJvciwgYW4gZXJyb3IgbnVtYmVyIGlzIHJldHVybmVkLCBvciAtMSBpbgorICAgdGhlIGNhc2UgdGhhdCB0aGUgbG9naW4gbmFtZSBjYW5ub3QgYmUgZm91bmQgYnV0IG5vIHNwZWNpZmljIGVycm9yIGlzCisgICBwcm92aWRlZCAodGhpcyBjYXNlIGlzIGhvcGVmdWxseSByYXJlIGJ1dCBpcyBsZWZ0IG9wZW4gYnkgdGhlIFBPU0lYIHNwZWMpLgorCisgICBTZWUgPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hzaC9nZXRsb2dpbi5odG1sPi4KKworICAgTW9zdCBwcm9ncmFtcyBkb24ndCBuZWVkIHRvIHVzZSB0aGlzIGZ1bmN0aW9uLCBiZWNhdXNlIHRoZSBpbmZvcm1hdGlvbiBpcworICAgYXZhaWxhYmxlIHRocm91Z2ggZW52aXJvbm1lbnQgdmFyaWFibGVzOgorICAgICAke0xPR05BTUUtJFVTRVJ9ICAgICAgICBvbiBVbml4IHBsYXRmb3JtcywKKyAgICAgJFVTRVJOQU1FICAgICAgICAgICAgICAgb24gbmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zLgorICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGdldGxvZ2luX3IgcnBsX2dldGxvZ2luX3IKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChnZXRsb2dpbl9yLCBpbnQsIChjaGFyICpuYW1lLCBzaXplX3Qgc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKGdldGxvZ2luX3IsIGludCwgKGNoYXIgKm5hbWUsIHNpemVfdCBzaXplKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChnZXRsb2dpbl9yLCBpbnQsIChjaGFyICpuYW1lLCBzaXplX3Qgc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgIGVuZGlmCisvKiBOZWVkIHRvIGNhc3QsIGJlY2F1c2Ugb24gU29sYXJpcyAxMCBzeXN0ZW1zLCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplLiAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVCAoZ2V0bG9naW5fciwgaW50LCAoY2hhciAqbmFtZSwgc2l6ZV90IHNpemUpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGdldGxvZ2luX3IpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBnZXRsb2dpbl9yCisjIGlmIEhBVkVfUkFXX0RFQ0xfR0VUTE9HSU5fUgorX0dMX1dBUk5fT05fVVNFIChnZXRsb2dpbl9yLCAiZ2V0bG9naW5fciBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZ2V0bG9naW5fciBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGdldHBhZ2VzaXplIHJwbF9nZXRwYWdlc2l6ZQorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGdldHBhZ2VzaXplLCBpbnQsICh2b2lkKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChnZXRwYWdlc2l6ZSwgaW50LCAodm9pZCkpOworIyBlbHNlCisjICBpZiAhMQorIyAgIGlmICFkZWZpbmVkIGdldHBhZ2VzaXplCisvKiBUaGlzIGlzIGZvciBQT1NJWCBzeXN0ZW1zLiAgKi8KKyMgICAgaWYgIWRlZmluZWQgX2dsX2dldHBhZ2VzaXplICYmIGRlZmluZWQgX1NDX1BBR0VTSVpFCisjICAgICBpZiAhIChkZWZpbmVkIF9fVk1TICYmIF9fVk1TX1ZFUiA8IDcwMDAwMDAwKQorIyAgICAgIGRlZmluZSBfZ2xfZ2V0cGFnZXNpemUoKSBzeXNjb25mIChfU0NfUEFHRVNJWkUpCisjICAgICBlbmRpZgorIyAgICBlbmRpZgorLyogVGhpcyBpcyBmb3Igb2xkZXIgVk1TLiAgKi8KKyMgICAgaWYgIWRlZmluZWQgX2dsX2dldHBhZ2VzaXplICYmIGRlZmluZWQgX19WTVMKKyMgICAgIGlmZGVmIF9fQUxQSEEKKyMgICAgICBkZWZpbmUgX2dsX2dldHBhZ2VzaXplKCkgODE5MgorIyAgICAgZWxzZQorIyAgICAgIGRlZmluZSBfZ2xfZ2V0cGFnZXNpemUoKSA1MTIKKyMgICAgIGVuZGlmCisjICAgIGVuZGlmCisvKiBUaGlzIGlzIGZvciBCZU9TLiAgKi8KKyMgICAgaWYgIWRlZmluZWQgX2dsX2dldHBhZ2VzaXplICYmIDAKKyMgICAgIGluY2x1ZGUgPE9TLmg+CisjICAgICBpZiBkZWZpbmVkIEJfUEFHRV9TSVpFCisjICAgICAgZGVmaW5lIF9nbF9nZXRwYWdlc2l6ZSgpIEJfUEFHRV9TSVpFCisjICAgICBlbmRpZgorIyAgICBlbmRpZgorLyogVGhpcyBpcyBmb3IgQW1pZ2FPUzQuMC4gICovCisjICAgIGlmICFkZWZpbmVkIF9nbF9nZXRwYWdlc2l6ZSAmJiBkZWZpbmVkIF9fYW1pZ2FvczRfXworIyAgICAgZGVmaW5lIF9nbF9nZXRwYWdlc2l6ZSgpIDIwNDgKKyMgICAgZW5kaWYKKy8qIFRoaXMgaXMgZm9yIG9sZGVyIFVuaXggc3lzdGVtcy4gICovCisjICAgIGlmICFkZWZpbmVkIF9nbF9nZXRwYWdlc2l6ZSAmJiAwCisjICAgICBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyMgICAgIGlmZGVmIEVYRUNfUEFHRVNJWkUKKyMgICAgICBkZWZpbmUgX2dsX2dldHBhZ2VzaXplKCkgRVhFQ19QQUdFU0laRQorIyAgICAgZWxzZQorIyAgICAgIGlmZGVmIE5CUEcKKyMgICAgICAgaWZuZGVmIENMU0laRQorIyAgICAgICAgZGVmaW5lIENMU0laRSAxCisjICAgICAgIGVuZGlmCisjICAgICAgIGRlZmluZSBfZ2xfZ2V0cGFnZXNpemUoKSAoTkJQRyAqIENMU0laRSkKKyMgICAgICBlbHNlCisjICAgICAgIGlmZGVmIE5CUEMKKyMgICAgICAgIGRlZmluZSBfZ2xfZ2V0cGFnZXNpemUoKSBOQlBDCisjICAgICAgIGVuZGlmCisjICAgICAgZW5kaWYKKyMgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICAgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgICBkZWZpbmUgZ2V0cGFnZXNpemUoKSBfZ2xfZ2V0cGFnZXNpemUgKCkKKyMgICAgZWxzZQorIyAgICAgaWYgIUdOVUxJQl9kZWZpbmVkX2dldHBhZ2VzaXplX2Z1bmN0aW9uCitfR0xfVU5JU1REX0lOTElORSBpbnQKK2dldHBhZ2VzaXplICgpCit7CisgIHJldHVybiBfZ2xfZ2V0cGFnZXNpemUgKCk7Cit9CisjICAgICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX2dldHBhZ2VzaXplX2Z1bmN0aW9uIDEKKyMgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICAgZW5kaWYKKyMgIGVuZGlmCisvKiBOZWVkIHRvIGNhc3QsIGJlY2F1c2Ugb24gQ3lnd2luIDEuNS54IHN5c3RlbXMsIHRoZSByZXR1cm4gdHlwZSBpcyBzaXplX3QuICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUIChnZXRwYWdlc2l6ZSwgaW50LCAodm9pZCkpOworIyBlbmRpZgorIyBpZiAxCitfR0xfQ1hYQUxJQVNXQVJOIChnZXRwYWdlc2l6ZSk7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGdldHBhZ2VzaXplCisjIGlmIEhBVkVfUkFXX0RFQ0xfR0VUUEFHRVNJWkUKK19HTF9XQVJOX09OX1VTRSAoZ2V0cGFnZXNpemUsICJnZXRwYWdlc2l6ZSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZ2V0cGFnZXNpemUgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorLyogUmV0dXJuIHRoZSBuZXh0IHZhbGlkIGxvZ2luIHNoZWxsIG9uIHRoZSBzeXN0ZW0sIG9yIE5VTEwgd2hlbiB0aGUgZW5kIG9mCisgICB0aGUgbGlzdCBoYXMgYmVlbiByZWFjaGVkLiAgKi8KKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGdldHVzZXJzaGVsbCwgY2hhciAqLCAodm9pZCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZ2V0dXNlcnNoZWxsLCBjaGFyICosICh2b2lkKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChnZXR1c2Vyc2hlbGwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBnZXR1c2Vyc2hlbGwKKyMgaWYgSEFWRV9SQVdfREVDTF9HRVRVU0VSU0hFTEwKK19HTF9XQVJOX09OX1VTRSAoZ2V0dXNlcnNoZWxsLCAiZ2V0dXNlcnNoZWxsIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBnZXR1c2Vyc2hlbGwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKy8qIFJld2luZCB0byBwb2ludGVyIHRoYXQgaXMgYWR2YW5jZWQgYXQgZWFjaCBnZXR1c2Vyc2hlbGwoKSBjYWxsLiAgKi8KKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHNldHVzZXJzaGVsbCwgdm9pZCwgKHZvaWQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHNldHVzZXJzaGVsbCwgdm9pZCwgKHZvaWQpKTsKK19HTF9DWFhBTElBU1dBUk4gKHNldHVzZXJzaGVsbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHNldHVzZXJzaGVsbAorIyBpZiBIQVZFX1JBV19ERUNMX1NFVFVTRVJTSEVMTAorX0dMX1dBUk5fT05fVVNFIChzZXR1c2Vyc2hlbGwsICJzZXR1c2Vyc2hlbGwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGdldHVzZXJzaGVsbCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgMAorLyogRnJlZSB0aGUgcG9pbnRlciB0aGF0IGlzIGFkdmFuY2VkIGF0IGVhY2ggZ2V0dXNlcnNoZWxsKCkgY2FsbCBhbmQKKyAgIGFzc29jaWF0ZWQgcmVzb3VyY2VzLiAgKi8KKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGVuZHVzZXJzaGVsbCwgdm9pZCwgKHZvaWQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGVuZHVzZXJzaGVsbCwgdm9pZCwgKHZvaWQpKTsKK19HTF9DWFhBTElBU1dBUk4gKGVuZHVzZXJzaGVsbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGVuZHVzZXJzaGVsbAorIyBpZiBIQVZFX1JBV19ERUNMX0VORFVTRVJTSEVMTAorX0dMX1dBUk5fT05fVVNFIChlbmR1c2Vyc2hlbGwsICJlbmR1c2Vyc2hlbGwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGdldHVzZXJzaGVsbCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisvKiBEZXRlcm1pbmUgd2hldGhlciBncm91cCBpZCBpcyBpbiBjYWxsaW5nIHVzZXIncyBncm91cCBsaXN0LiAgKi8KKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGdyb3VwX21lbWJlciwgaW50LCAoZ2lkX3QgZ2lkKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChncm91cF9tZW1iZXIsIGludCwgKGdpZF90IGdpZCkpOworX0dMX0NYWEFMSUFTV0FSTiAoZ3JvdXBfbWVtYmVyKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZ3JvdXBfbWVtYmVyCisjIGlmIEhBVkVfUkFXX0RFQ0xfR1JPVVBfTUVNQkVSCitfR0xfV0FSTl9PTl9VU0UgKGdyb3VwX21lbWJlciwgImdyb3VwX21lbWJlciBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZ3JvdXAtbWVtYmVyIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBpc2F0dHkKKyMgICBkZWZpbmUgaXNhdHR5IHJwbF9pc2F0dHkKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChpc2F0dHksIGludCwgKGludCBmZCkpOworX0dMX0NYWEFMSUFTX1JQTCAoaXNhdHR5LCBpbnQsIChpbnQgZmQpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoaXNhdHR5LCBpbnQsIChpbnQgZmQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGlzYXR0eSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGlzYXR0eQorIyBpZiBIQVZFX1JBV19ERUNMX0lTQVRUWQorX0dMX1dBUk5fT05fVVNFIChpc2F0dHksICJpc2F0dHkgaGFzIHBvcnRhYmlsaXR5IHByb2JsZW1zIG9uIG5hdGl2ZSBXaW5kb3dzIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgaXNhdHR5IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKy8qIENoYW5nZSB0aGUgb3duZXIgb2YgRklMRSB0byBVSUQgKGlmIFVJRCBpcyBub3QgLTEpIGFuZCB0aGUgZ3JvdXAgb2YgRklMRQorICAgdG8gR0lEIChpZiBHSUQgaXMgbm90IC0xKS4gIERvIG5vdCBmb2xsb3cgc3ltYm9saWMgbGlua3MuCisgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgLTEgYW5kIGVycm5vIHNldC4KKyAgIFNlZSB0aGUgUE9TSVg6MjAwOCBzcGVjaWZpY2F0aW9uCisgICA8aHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvZnVuY3Rpb25zL2xjaG93bi5odG1sPi4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbGNob3duCisjICAgZGVmaW5lIGxjaG93biBycGxfbGNob3duCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobGNob3duLCBpbnQsIChjaGFyIGNvbnN0ICpmaWxlLCB1aWRfdCBvd25lciwgZ2lkX3QgZ3JvdXApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKGxjaG93biwgaW50LCAoY2hhciBjb25zdCAqZmlsZSwgdWlkX3Qgb3duZXIsIGdpZF90IGdyb3VwKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChsY2hvd24sIGludCwgKGNoYXIgY29uc3QgKmZpbGUsIHVpZF90IG93bmVyLCBnaWRfdCBncm91cCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGxjaG93biwgaW50LCAoY2hhciBjb25zdCAqZmlsZSwgdWlkX3Qgb3duZXIsIGdpZF90IGdyb3VwKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChsY2hvd24pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBsY2hvd24KKyMgaWYgSEFWRV9SQVdfREVDTF9MQ0hPV04KK19HTF9XQVJOX09OX1VTRSAobGNob3duLCAibGNob3duIGlzIHVucG9ydGFibGUgdG8gcHJlLVBPU0lYLjEtMjAwMSBzeXN0ZW1zIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbGNob3duIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKy8qIENyZWF0ZSBhIG5ldyBoYXJkIGxpbmsgZm9yIGFuIGV4aXN0aW5nIGZpbGUuCisgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgLTEgYW5kIGVycm5vIHNldC4KKyAgIFNlZSBQT1NJWDoyMDA4IHNwZWNpZmljYXRpb24KKyAgIDxodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9mdW5jdGlvbnMvbGluay5odG1sPi4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGxpbmsgcnBsX2xpbmsKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChsaW5rLCBpbnQsIChjb25zdCBjaGFyICpwYXRoMSwgY29uc3QgY2hhciAqcGF0aDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChsaW5rLCBpbnQsIChjb25zdCBjaGFyICpwYXRoMSwgY29uc3QgY2hhciAqcGF0aDIpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKGxpbmssIGludCwgKGNvbnN0IGNoYXIgKnBhdGgxLCBjb25zdCBjaGFyICpwYXRoMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChsaW5rLCBpbnQsIChjb25zdCBjaGFyICpwYXRoMSwgY29uc3QgY2hhciAqcGF0aDIpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGxpbmspOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBsaW5rCisjIGlmIEhBVkVfUkFXX0RFQ0xfTElOSworX0dMX1dBUk5fT05fVVNFIChsaW5rLCAibGluayBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbGluayBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisvKiBDcmVhdGUgYSBuZXcgaGFyZCBsaW5rIGZvciBhbiBleGlzdGluZyBmaWxlLCByZWxhdGl2ZSB0byB0d28KKyAgIGRpcmVjdG9yaWVzLiAgRkxBRyBjb250cm9scyB3aGV0aGVyIHN5bWxpbmtzIGFyZSBmb2xsb3dlZC4KKyAgIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSAtMSBhbmQgZXJybm8gc2V0LiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBsaW5rYXQKKyMgICBkZWZpbmUgbGlua2F0IHJwbF9saW5rYXQKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChsaW5rYXQsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQxLCBjb25zdCBjaGFyICpwYXRoMSwgaW50IGZkMiwgY29uc3QgY2hhciAqcGF0aDIsCisgICAgICAgICAgICAgICAgICAgaW50IGZsYWcpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyLCA0KSkpOworX0dMX0NYWEFMSUFTX1JQTCAobGlua2F0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkMSwgY29uc3QgY2hhciAqcGF0aDEsIGludCBmZDIsIGNvbnN0IGNoYXIgKnBhdGgyLAorICAgICAgICAgICAgICAgICAgIGludCBmbGFnKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChsaW5rYXQsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQxLCBjb25zdCBjaGFyICpwYXRoMSwgaW50IGZkMiwgY29uc3QgY2hhciAqcGF0aDIsCisgICAgICAgICAgICAgICAgICAgaW50IGZsYWcpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyLCA0KSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGxpbmthdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZDEsIGNvbnN0IGNoYXIgKnBhdGgxLCBpbnQgZmQyLCBjb25zdCBjaGFyICpwYXRoMiwKKyAgICAgICAgICAgICAgICAgICBpbnQgZmxhZykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobGlua2F0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbGlua2F0CisjIGlmIEhBVkVfUkFXX0RFQ0xfTElOS0FUCitfR0xfV0FSTl9PTl9VU0UgKGxpbmthdCwgImxpbmthdCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbGlua2F0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKy8qIFNldCB0aGUgb2Zmc2V0IG9mIEZEIHJlbGF0aXZlIHRvIFNFRUtfU0VULCBTRUVLX0NVUiwgb3IgU0VFS19FTkQuCisgICBSZXR1cm4gdGhlIG5ldyBvZmZzZXQgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIC0xIGFuZCBlcnJubyBzZXQuCisgICBTZWUgdGhlIFBPU0lYOjIwMDggc3BlY2lmaWNhdGlvbgorICAgPGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Z1bmN0aW9ucy9sc2Vlay5odG1sPi4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIGxzZWVrIHJwbF9sc2VlaworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGxzZWVrLCBvZmZfdCwgKGludCBmZCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChsc2Vlaywgb2ZmX3QsIChpbnQgZmQsIG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChsc2Vlaywgb2ZmX3QsIChpbnQgZmQsIG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobHNlZWspOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBsc2VlaworIyBpZiBIQVZFX1JBV19ERUNMX0xTRUVLCitfR0xfV0FSTl9PTl9VU0UgKGxzZWVrLCAibHNlZWsgZG9lcyBub3QgZmFpbCB3aXRoIEVTUElQRSBvbiBwaXBlcyBvbiBzb21lICIKKyAgICAgICAgICAgICAgICAgInN5c3RlbXMgLSB1c2UgZ251bGliIG1vZHVsZSBsc2VlayBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisvKiBDcmVhdGUgYSBwaXBlLCBkZWZhdWx0aW5nIHRvIE9fQklOQVJZIG1vZGUuCisgICBTdG9yZSB0aGUgcmVhZC1lbmQgYXMgZmRbMF0gYW5kIHRoZSB3cml0ZS1lbmQgYXMgZmRbMV0uCisgICBSZXR1cm4gMCB1cG9uIHN1Y2Nlc3MsIG9yIC0xIHdpdGggZXJybm8gc2V0IHVwb24gZmFpbHVyZS4gICovCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChwaXBlLCBpbnQsIChpbnQgZmRbMl0pIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChwaXBlLCBpbnQsIChpbnQgZmRbMl0pKTsKK19HTF9DWFhBTElBU1dBUk4gKHBpcGUpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwaXBlCisjIGlmIEhBVkVfUkFXX0RFQ0xfUElQRQorX0dMX1dBUk5fT05fVVNFIChwaXBlLCAicGlwZSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcGlwZS1wb3NpeCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAxCisvKiBDcmVhdGUgYSBwaXBlLCBhcHBseWluZyB0aGUgZ2l2ZW4gZmxhZ3Mgd2hlbiBvcGVuaW5nIHRoZSByZWFkLWVuZCBvZiB0aGUKKyAgIHBpcGUgYW5kIHRoZSB3cml0ZS1lbmQgb2YgdGhlIHBpcGUuCisgICBUaGUgZmxhZ3MgYXJlIGEgYml0bWFzaywgcG9zc2libHkgaW5jbHVkaW5nIE9fQ0xPRVhFQyAoZGVmaW5lZCBpbiA8ZmNudGwuaD4pCisgICBhbmQgT19URVhULCBPX0JJTkFSWSAoZGVmaW5lZCBpbiAiYmluYXJ5LWlvLmgiKS4KKyAgIFN0b3JlIHRoZSByZWFkLWVuZCBhcyBmZFswXSBhbmQgdGhlIHdyaXRlLWVuZCBhcyBmZFsxXS4KKyAgIFJldHVybiAwIHVwb24gc3VjY2Vzcywgb3IgLTEgd2l0aCBlcnJubyBzZXQgdXBvbiBmYWlsdXJlLgorICAgU2VlIGFsc28gdGhlIExpbnV4IG1hbiBwYWdlIGF0CisgICA8aHR0cDovL3d3dy5rZXJuZWwub3JnL2RvYy9tYW4tcGFnZXMvb25saW5lL3BhZ2VzL21hbjIvcGlwZTIuMi5odG1sPi4gICovCisjIGlmIDEKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHBpcGUyIHJwbF9waXBlMgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHBpcGUyLCBpbnQsIChpbnQgZmRbMl0sIGludCBmbGFncykgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHBpcGUyLCBpbnQsIChpbnQgZmRbMl0sIGludCBmbGFncykpOworIyBlbHNlCitfR0xfRlVOQ0RFQ0xfU1lTIChwaXBlMiwgaW50LCAoaW50IGZkWzJdLCBpbnQgZmxhZ3MpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfU1lTIChwaXBlMiwgaW50LCAoaW50IGZkWzJdLCBpbnQgZmxhZ3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHBpcGUyKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcGlwZTIKKyMgaWYgSEFWRV9SQVdfREVDTF9QSVBFMgorX0dMX1dBUk5fT05fVVNFIChwaXBlMiwgInBpcGUyIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwaXBlMiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisvKiBSZWFkIGF0IG1vc3QgQlVGU0laRSBieXRlcyBmcm9tIEZEIGludG8gQlVGLCBzdGFydGluZyBhdCBPRkZTRVQuCisgICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBwbGFjZWQgaW50byBCVUYgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlCisgICBzZXQgZXJybm8gYW5kIHJldHVybiAtMS4gIDAgaW5kaWNhdGVzIEVPRi4KKyAgIFNlZSB0aGUgUE9TSVg6MjAwOCBzcGVjaWZpY2F0aW9uCisgICA8aHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvZnVuY3Rpb25zL3ByZWFkLmh0bWw+LiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBwcmVhZAorIyAgIGRlZmluZSBwcmVhZCBycGxfcHJlYWQKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChwcmVhZCwgc3NpemVfdCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUsIG9mZl90IG9mZnNldCkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwcmVhZCwgc3NpemVfdCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUsIG9mZl90IG9mZnNldCkpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAocHJlYWQsIHNzaXplX3QsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBidWZzaXplLCBvZmZfdCBvZmZzZXQpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHByZWFkLCBzc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgYnVmc2l6ZSwgb2ZmX3Qgb2Zmc2V0KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwcmVhZCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHByZWFkCisjIGlmIEhBVkVfUkFXX0RFQ0xfUFJFQUQKK19HTF9XQVJOX09OX1VTRSAocHJlYWQsICJwcmVhZCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcHJlYWQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorLyogV3JpdGUgYXQgbW9zdCBCVUZTSVpFIGJ5dGVzIGZyb20gQlVGIGludG8gRkQsIHN0YXJ0aW5nIGF0IE9GRlNFVC4KKyAgIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlCisgICBzZXQgZXJybm8gYW5kIHJldHVybiAtMS4gIDAgaW5kaWNhdGVzIG5vdGhpbmcgd3JpdHRlbi4gIFNlZSB0aGUKKyAgIFBPU0lYOjIwMDggc3BlY2lmaWNhdGlvbgorICAgPGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Z1bmN0aW9ucy9wd3JpdGUuaHRtbD4uICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHB3cml0ZQorIyAgIGRlZmluZSBwd3JpdGUgcnBsX3B3cml0ZQorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHB3cml0ZSwgc3NpemVfdCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUsIG9mZl90IG9mZnNldCkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChwd3JpdGUsIHNzaXplX3QsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBidWZzaXplLCBvZmZfdCBvZmZzZXQpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHB3cml0ZSwgc3NpemVfdCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUsIG9mZl90IG9mZnNldCkKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocHdyaXRlLCBzc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgYnVmc2l6ZSwgb2ZmX3Qgb2Zmc2V0KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChwd3JpdGUpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBwd3JpdGUKKyMgaWYgSEFWRV9SQVdfREVDTF9QV1JJVEUKK19HTF9XQVJOX09OX1VTRSAocHdyaXRlLCAicHdyaXRlIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwd3JpdGUgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorLyogUmVhZCB1cCB0byBDT1VOVCBieXRlcyBmcm9tIGZpbGUgZGVzY3JpcHRvciBGRCBpbnRvIHRoZSBidWZmZXIgc3RhcnRpbmcKKyAgIGF0IEJVRi4gIFNlZSB0aGUgUE9TSVg6MjAwOCBzcGVjaWZpY2F0aW9uCisgICA8aHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvZnVuY3Rpb25zL3JlYWQuaHRtbD4uICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHJlYWQKKyMgICBkZWZpbmUgcmVhZCBycGxfcmVhZAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHJlYWQsIHNzaXplX3QsIChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHJlYWQsIHNzaXplX3QsIChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KSk7CisjIGVsc2UKKy8qIE5lZWQgdG8gY2FzdCwgYmVjYXVzZSBvbiBtaW5ndywgdGhlIHRoaXJkIHBhcmFtZXRlciBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudAorICAgYW5kIHRoZSByZXR1cm4gdHlwZSBpcyAnaW50Jy4gICovCitfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKHJlYWQsIHNzaXplX3QsIChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChyZWFkKTsKKyNlbmRpZgorCisKKyNpZiAwCisvKiBSZWFkIHRoZSBjb250ZW50cyBvZiB0aGUgc3ltYm9saWMgbGluayBGSUxFIGFuZCBwbGFjZSB0aGUgZmlyc3QgQlVGU0laRQorICAgYnl0ZXMgb2YgaXQgaW50byBCVUYuICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBwbGFjZWQgaW50byBCVUYgaWYKKyAgIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSAtMSBhbmQgZXJybm8gc2V0LgorICAgU2VlIHRoZSBQT1NJWDoyMDA4IHNwZWNpZmljYXRpb24KKyAgIDxodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9mdW5jdGlvbnMvcmVhZGxpbmsuaHRtbD4uICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSByZWFkbGluayBycGxfcmVhZGxpbmsKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChyZWFkbGluaywgc3NpemVfdCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBidWZzaXplKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHJlYWRsaW5rLCBzc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHJlYWRsaW5rLCBzc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHJlYWRsaW5rLCBzc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHJlYWRsaW5rKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcmVhZGxpbmsKKyMgaWYgSEFWRV9SQVdfREVDTF9SRUFETElOSworX0dMX1dBUk5fT05fVVNFIChyZWFkbGluaywgInJlYWRsaW5rIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSByZWFkbGluayBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChyZWFkbGlua2F0LCBzc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3QgbGVuKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMiwgMykpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHJlYWRsaW5rYXQsIHNzaXplX3QsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBsZW4pKTsKK19HTF9DWFhBTElBU1dBUk4gKHJlYWRsaW5rYXQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiByZWFkbGlua2F0CisjIGlmIEhBVkVfUkFXX0RFQ0xfUkVBRExJTktBVAorX0dMX1dBUk5fT05fVVNFIChyZWFkbGlua2F0LCAicmVhZGxpbmthdCBpcyBub3QgcG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSByZWFkbGlua2F0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKy8qIFJlbW92ZSB0aGUgZGlyZWN0b3J5IERJUi4gICovCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHJtZGlyIHJwbF9ybWRpcgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHJtZGlyLCBpbnQsIChjaGFyIGNvbnN0ICpuYW1lKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAocm1kaXIsIGludCwgKGNoYXIgY29uc3QgKm5hbWUpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAocm1kaXIsIGludCwgKGNoYXIgY29uc3QgKm5hbWUpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHJtZGlyKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcm1kaXIKKyMgaWYgSEFWRV9SQVdfREVDTF9STURJUgorX0dMX1dBUk5fT05fVVNFIChybWRpciwgInJtZGlyIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBybWRpciBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisvKiBTZXQgdGhlIGhvc3QgbmFtZSBvZiB0aGUgbWFjaGluZS4KKyAgIFRoZSBob3N0IG5hbWUgbWF5IG9yIG1heSBub3QgYmUgZnVsbHkgcXVhbGlmaWVkLgorCisgICBQdXQgTEVOIGJ5dGVzIG9mIE5BTUUgaW50byB0aGUgaG9zdCBuYW1lLgorICAgUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlLCBzZXQgZXJybm8gYW5kIHJldHVybiAtMS4KKworICAgUGxhdGZvcm1zIHdpdGggbm8gYWJpbGl0eSB0byBzZXQgdGhlIGhvc3RuYW1lIHJldHVybiAtMSBhbmQgc2V0CisgICBlcnJubyA9IEVOT1NZUy4gICovCisjIGlmICExIHx8ICExCitfR0xfRlVOQ0RFQ0xfU1lTIChzZXRob3N0bmFtZSwgaW50LCAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IGxlbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCisvKiBOZWVkIHRvIGNhc3QsIGJlY2F1c2Ugb24gU29sYXJpcyAxMSAyMDExLTEwLCBNYWMgT1MgWCAxMC41LCBJUklYIDYuNQorICAgYW5kIEZyZWVCU0QgNi40IHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIGludC4gIE9uIFNvbGFyaXMgMTEKKyAgIDIwMTEtMTAsIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgbm90IGNvbnN0LiAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVCAoc2V0aG9zdG5hbWUsIGludCwgKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBsZW4pKTsKK19HTF9DWFhBTElBU1dBUk4gKHNldGhvc3RuYW1lKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc2V0aG9zdG5hbWUKKyMgaWYgSEFWRV9SQVdfREVDTF9TRVRIT1NUTkFNRQorX0dMX1dBUk5fT05fVVNFIChzZXRob3N0bmFtZSwgInNldGhvc3RuYW1lIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzZXRob3N0bmFtZSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisvKiBQYXVzZSB0aGUgZXhlY3V0aW9uIG9mIHRoZSBjdXJyZW50IHRocmVhZCBmb3IgTiBzZWNvbmRzLgorICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgbGVmdCB0byBzbGVlcC4KKyAgIFNlZSB0aGUgUE9TSVg6MjAwOCBzcGVjaWZpY2F0aW9uCisgICA8aHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvZnVuY3Rpb25zL3NsZWVwLmh0bWw+LiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBzbGVlcAorIyAgIGRlZmluZSBzbGVlcCBycGxfc2xlZXAKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChzbGVlcCwgdW5zaWduZWQgaW50LCAodW5zaWduZWQgaW50IG4pKTsKK19HTF9DWFhBTElBU19SUEwgKHNsZWVwLCB1bnNpZ25lZCBpbnQsICh1bnNpZ25lZCBpbnQgbikpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAoc2xlZXAsIHVuc2lnbmVkIGludCwgKHVuc2lnbmVkIGludCBuKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc2xlZXAsIHVuc2lnbmVkIGludCwgKHVuc2lnbmVkIGludCBuKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzbGVlcCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHNsZWVwCisjIGlmIEhBVkVfUkFXX0RFQ0xfU0xFRVAKK19HTF9XQVJOX09OX1VTRSAoc2xlZXAsICJzbGVlcCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc2xlZXAgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHN5bWxpbmsKKyMgICBkZWZpbmUgc3ltbGluayBycGxfc3ltbGluaworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHN5bWxpbmssIGludCwgKGNoYXIgY29uc3QgKmNvbnRlbnRzLCBjaGFyIGNvbnN0ICpmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoc3ltbGluaywgaW50LCAoY2hhciBjb25zdCAqY29udGVudHMsIGNoYXIgY29uc3QgKmZpbGUpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHN5bWxpbmssIGludCwgKGNoYXIgY29uc3QgKmNvbnRlbnRzLCBjaGFyIGNvbnN0ICpmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHN5bWxpbmssIGludCwgKGNoYXIgY29uc3QgKmNvbnRlbnRzLCBjaGFyIGNvbnN0ICpmaWxlKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzeW1saW5rKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc3ltbGluaworIyBpZiBIQVZFX1JBV19ERUNMX1NZTUxJTksKK19HTF9XQVJOX09OX1VTRSAoc3ltbGluaywgInN5bWxpbmsgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3ltbGluayBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChzeW1saW5rYXQsIGludCwKKyAgICAgICAgICAgICAgICAgIChjaGFyIGNvbnN0ICpjb250ZW50cywgaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMykpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHN5bWxpbmthdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGNoYXIgY29uc3QgKmNvbnRlbnRzLCBpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGUpKTsKK19HTF9DWFhBTElBU1dBUk4gKHN5bWxpbmthdCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHN5bWxpbmthdAorIyBpZiBIQVZFX1JBV19ERUNMX1NZTUxJTktBVAorX0dMX1dBUk5fT05fVVNFIChzeW1saW5rYXQsICJzeW1saW5rYXQgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3ltbGlua2F0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKy8qIFN0b3JlIGF0IG1vc3QgQlVGTEVOIGNoYXJhY3RlcnMgb2YgdGhlIHBhdGhuYW1lIG9mIHRoZSB0ZXJtaW5hbCBGRCBpcworICAgb3BlbiBvbiBpbiBCVUYuICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgYW4gZXJyb3IgbnVtYmVyLiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiB0dHluYW1lX3IKKyMgICBkZWZpbmUgdHR5bmFtZV9yIHJwbF90dHluYW1lX3IKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh0dHluYW1lX3IsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikgX0dMX0FSR19OT05OVUxMICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHR0eW5hbWVfciwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh0dHluYW1lX3IsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikgX0dMX0FSR19OT05OVUxMICgoMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh0dHluYW1lX3IsIGludCwKKyAgICAgICAgICAgICAgICAgIChpbnQgZmQsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAodHR5bmFtZV9yKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgdHR5bmFtZV9yCisjIGlmIEhBVkVfUkFXX0RFQ0xfVFRZTkFNRV9SCitfR0xfV0FSTl9PTl9VU0UgKHR0eW5hbWVfciwgInR0eW5hbWVfciBpcyBub3QgcG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB0dHluYW1lX3IgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHVubGluaworIyAgIGRlZmluZSB1bmxpbmsgcnBsX3VubGluaworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHVubGluaywgaW50LCAoY2hhciBjb25zdCAqZmlsZSkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHVubGluaywgaW50LCAoY2hhciBjb25zdCAqZmlsZSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTICh1bmxpbmssIGludCwgKGNoYXIgY29uc3QgKmZpbGUpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHVubGluayk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHVubGluaworIyBpZiBIQVZFX1JBV19ERUNMX1VOTElOSworX0dMX1dBUk5fT05fVVNFICh1bmxpbmssICJ1bmxpbmsgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgdW5saW5rIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiB1bmxpbmthdAorIyAgIGRlZmluZSB1bmxpbmthdCBycGxfdW5saW5rYXQKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh1bmxpbmthdCwgaW50LCAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlLCBpbnQgZmxhZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMICh1bmxpbmthdCwgaW50LCAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlLCBpbnQgZmxhZykpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAodW5saW5rYXQsIGludCwgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgaW50IGZsYWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHVubGlua2F0LCBpbnQsIChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGUsIGludCBmbGFnKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOICh1bmxpbmthdCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHVubGlua2F0CisjIGlmIEhBVkVfUkFXX0RFQ0xfVU5MSU5LQVQKK19HTF9XQVJOX09OX1VTRSAodW5saW5rYXQsICJ1bmxpbmthdCBpcyBub3QgcG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBvcGVuYXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgMAorLyogUGF1c2UgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgY3VycmVudCB0aHJlYWQgZm9yIE4gbWljcm9zZWNvbmRzLgorICAgUmV0dXJucyAwIG9uIGNvbXBsZXRpb24sIG9yIC0xIG9uIHJhbmdlIGVycm9yLgorICAgU2VlIHRoZSBQT1NJWDoyMDAxIHNwZWNpZmljYXRpb24KKyAgIDxodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjN4c2gvdXNsZWVwLmh0bWw+LiAgKi8KKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiB1c2xlZXAKKyMgICBkZWZpbmUgdXNsZWVwIHJwbF91c2xlZXAKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh1c2xlZXAsIGludCwgKHVzZWNvbmRzX3QgbikpOworX0dMX0NYWEFMSUFTX1JQTCAodXNsZWVwLCBpbnQsICh1c2Vjb25kc190IG4pKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHVzbGVlcCwgaW50LCAodXNlY29uZHNfdCBuKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAodXNsZWVwLCBpbnQsICh1c2Vjb25kc190IG4pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHVzbGVlcCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHVzbGVlcAorIyBpZiBIQVZFX1JBV19ERUNMX1VTTEVFUAorX0dMX1dBUk5fT05fVVNFICh1c2xlZXAsICJ1c2xlZXAgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHVzbGVlcCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAwCisvKiBXcml0ZSB1cCB0byBDT1VOVCBieXRlcyBzdGFydGluZyBhdCBCVUYgdG8gZmlsZSBkZXNjcmlwdG9yIEZELgorICAgU2VlIHRoZSBQT1NJWDoyMDA4IHNwZWNpZmljYXRpb24KKyAgIDxodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9mdW5jdGlvbnMvd3JpdGUuaHRtbD4uICAqLworIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHdyaXRlCisjICAgZGVmaW5lIHdyaXRlIHJwbF93cml0ZQorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHdyaXRlLCBzc2l6ZV90LCAoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAod3JpdGUsIHNzaXplX3QsIChpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KSk7CisjIGVsc2UKKy8qIE5lZWQgdG8gY2FzdCwgYmVjYXVzZSBvbiBtaW5ndywgdGhlIHRoaXJkIHBhcmFtZXRlciBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudAorICAgYW5kIHRoZSByZXR1cm4gdHlwZSBpcyAnaW50Jy4gICovCitfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKHdyaXRlLCBzc2l6ZV90LCAoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAod3JpdGUpOworI2VuZGlmCisKK19HTF9JTkxJTkVfSEVBREVSX0VORAorCisjZW5kaWYgLyogX0dMX1VOSVNURF9IICovCisjZW5kaWYgLyogX0dMX1VOSVNURF9IICovCmRpZmYgLS1naXQgYS9saW51eC1saWIvdW5pdHlwZXMuaCBiL2xpbnV4LWxpYi91bml0eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NWIwN2EKLS0tIC9kZXYvbnVsbAorKysgYi9saW51eC1saWIvdW5pdHlwZXMuaApAQCAtMCwwICsxLDQ3IEBACisvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovCisvKiBFbGVtZW50YXJ5IHR5cGVzIGFuZCBtYWNyb3MgZm9yIHRoZSBHTlUgVW5pU3RyaW5nIGxpYnJhcnkuCisgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUtMjAwNiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIF9VTklUWVBFU19ICisjZGVmaW5lIF9VTklUWVBFU19ICisKKy8qIEdldCB1aW50OF90LCB1aW50MTZfdCwgdWludDMyX3QuICAqLworI2luY2x1ZGUgPHN0ZGludC5oPgorCisvKiBUeXBlIHJlcHJlc2VudGluZyBhIFVuaWNvZGUgY2hhcmFjdGVyLiAgKi8KK3R5cGVkZWYgdWludDMyX3QgdWNzNF90OworCisvKiBBdHRyaWJ1dGUgb2YgYSBmdW5jdGlvbiB3aG9zZSByZXN1bHQgZGVwZW5kcyBvbmx5IG9uIHRoZSBhcmd1bWVudHMKKyAgIChub3QgcG9pbnRlcnMhKSBhbmQgd2hpY2ggaGFzIG5vIHNpZGUgZWZmZWN0cy4gICovCisjaWZuZGVmIF9VQ19BVFRSSUJVVEVfQ09OU1QKKyMgaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk1KQorIyAgZGVmaW5lIF9VQ19BVFRSSUJVVEVfQ09OU1QgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpCisjIGVsc2UKKyMgIGRlZmluZSBfVUNfQVRUUklCVVRFX0NPTlNUCisjIGVuZGlmCisjZW5kaWYKKworLyogQXR0cmlidXRlIG9mIGEgZnVuY3Rpb24gd2hvc2UgcmVzdWx0IGRlcGVuZHMgb25seSBvbiB0aGUgYXJndW1lbnRzCisgICAocG9zc2libHkgcG9pbnRlcnMpIGFuZCBnbG9iYWwgbWVtb3J5LCBhbmQgd2hpY2ggaGFzIG5vIHNpZGUgZWZmZWN0cy4gICovCisjaWZuZGVmIF9VQ19BVFRSSUJVVEVfUFVSRQorIyBpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTYpCisjICBkZWZpbmUgX1VDX0FUVFJJQlVURV9QVVJFIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpCisjIGVsc2UKKyMgIGRlZmluZSBfVUNfQVRUUklCVVRFX1BVUkUKKyMgZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgLyogX1VOSVRZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2xpbnV4LWxpYi91bml3aWR0aC5oIGIvbGludXgtbGliL3VuaXdpZHRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY0NjZiMgotLS0gL2Rldi9udWxsCisrKyBiL2xpbnV4LWxpYi91bml3aWR0aC5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8KKy8qIERpc3BsYXkgd2lkdGggZnVuY3Rpb25zLgorICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIDIwMDUsIDIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX1VOSVdJRFRIX0gKKyNkZWZpbmUgX1VOSVdJRFRIX0gKKworI2luY2x1ZGUgInVuaXR5cGVzLmgiCisKKy8qIEdldCBzaXplX3QuICAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisvKiBHZXQgbG9jYWxlX2NoYXJzZXQoKSBkZWNsYXJhdGlvbi4gICovCisjaW5jbHVkZSAibG9jYWxjaGFyc2V0LmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCisvKiBEaXNwbGF5IHdpZHRoLiAgKi8KKworLyogVGhlc2UgZnVuY3Rpb25zIGFyZSBsb2NhbGUgZGVwZW5kZW50LiAgVGhlIGVuY29kaW5nIGFyZ3VtZW50IGlkZW50aWZpZXMKKyAgIHRoZSBlbmNvZGluZyAoZS5nLiAiSVNPLTg4NTktMiIgZm9yIFBvbGlzaCkuICAqLworCisvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIGNvbHVtbiBwb3NpdGlvbnMgcmVxdWlyZWQgZm9yIFVDLiAgKi8KK2V4dGVybiBpbnQKKyAgICAgICB1Y193aWR0aCAodWNzNF90IHVjLCBjb25zdCBjaGFyICplbmNvZGluZykKKyAgICAgICBfVUNfQVRUUklCVVRFX1BVUkU7CisKKy8qIERldGVybWluZSBudW1iZXIgb2YgY29sdW1uIHBvc2l0aW9ucyByZXF1aXJlZCBmb3IgZmlyc3QgTiB1bml0cworICAgKG9yIGZld2VyIGlmIFMgZW5kcyBiZWZvcmUgdGhpcykgaW4gUy4gICovCitleHRlcm4gaW50CisgICAgICAgdThfd2lkdGggKGNvbnN0IHVpbnQ4X3QgKnMsIHNpemVfdCBuLCBjb25zdCBjaGFyICplbmNvZGluZykKKyAgICAgICBfVUNfQVRUUklCVVRFX1BVUkU7CitleHRlcm4gaW50CisgICAgICAgdTE2X3dpZHRoIChjb25zdCB1aW50MTZfdCAqcywgc2l6ZV90IG4sIGNvbnN0IGNoYXIgKmVuY29kaW5nKQorICAgICAgIF9VQ19BVFRSSUJVVEVfUFVSRTsKK2V4dGVybiBpbnQKKyAgICAgICB1MzJfd2lkdGggKGNvbnN0IHVpbnQzMl90ICpzLCBzaXplX3QgbiwgY29uc3QgY2hhciAqZW5jb2RpbmcpCisgICAgICAgX1VDX0FUVFJJQlVURV9QVVJFOworCisvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIGNvbHVtbiBwb3NpdGlvbnMgcmVxdWlyZWQgZm9yIFMuICAqLworZXh0ZXJuIGludAorICAgICAgIHU4X3N0cndpZHRoIChjb25zdCB1aW50OF90ICpzLCBjb25zdCBjaGFyICplbmNvZGluZykKKyAgICAgICBfVUNfQVRUUklCVVRFX1BVUkU7CitleHRlcm4gaW50CisgICAgICAgdTE2X3N0cndpZHRoIChjb25zdCB1aW50MTZfdCAqcywgY29uc3QgY2hhciAqZW5jb2RpbmcpCisgICAgICAgX1VDX0FUVFJJQlVURV9QVVJFOworZXh0ZXJuIGludAorICAgICAgIHUzMl9zdHJ3aWR0aCAoY29uc3QgdWludDMyX3QgKnMsIGNvbnN0IGNoYXIgKmVuY29kaW5nKQorICAgICAgIF9VQ19BVFRSSUJVVEVfUFVSRTsKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX1VOSVdJRFRIX0ggKi8KZGlmZiAtLWdpdCBhL2xpbnV4LWxpYi93YXJuLW9uLXVzZS5oIGIvbGludXgtbGliL3dhcm4tb24tdXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFlYmRhNAotLS0gL2Rldi9udWxsCisrKyBiL2xpbnV4LWxpYi93YXJuLW9uLXVzZS5oCkBAIC0wLDAgKzEsNDYgQEAKKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFCisKKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCisvKiBBIGNvbXBpbGVyIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDQuMy4wIGFuZCBsYXRlci4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobWVzc2FnZSkpKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24KKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisjIGVuZGlmCisjZW5kaWYKKworLyogX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuY3Rpb24sIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsICJzdHJpbmciKQorICAgaXMgbGlrZSBfR0xfV0FSTl9PTl9VU0UgKGZ1bmN0aW9uLCAic3RyaW5nIiksIGV4Y2VwdCB0aGF0IHRoZSBmdW5jdGlvbiBpcworICAgZGVjbGFyZWQgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLCBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLAorICAgYW5kIGF0dHJpYnV0ZXMuCisgICBUaGlzIHZhcmlhbnQgaXMgdXNlZnVsIGZvciBvdmVybG9hZGVkIGZ1bmN0aW9ucyBpbiBDKysuIF9HTF9XQVJOX09OX1VTRSBkb2VzCisgICBub3Qgd29yayBpbiB0aGlzIGNhc2UuICAqLworI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0VfQ1hYCisjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyBcCisgICAgIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobXNnKSkpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisvKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBfR0xfV0FSTl9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX0VYVEVSTl9DCisjIGlmIGRlZmluZWQgX19jcGx1c3BsdXMKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4gIkMiCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4KKyMgZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGludXgtbGliL3djaGFyLmggYi9saW51eC1saWIvd2NoYXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDYzMWEzCi0tLSAvZGV2L251bGwKKysrIGIvbGludXgtbGliL3djaGFyLmgKQEAgLTAsMCArMSwxMzQwIEBACisvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovCisvKiBBIHN1YnN0aXR1dGUgZm9yIElTTyBDOTkgPHdjaGFyLmg+LCBmb3IgcGxhdGZvcm1zIHRoYXQgaGF2ZSBpc3N1ZXMuCisKKyAgIENvcHlyaWdodCAoQykgMjAwNy0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFdyaXR0ZW4gYnkgRXJpYyBCbGFrZS4gICovCisKKy8qCisgKiBJU08gQyA5OSA8d2NoYXIuaD4gZm9yIHBsYXRmb3JtcyB0aGF0IGhhdmUgaXNzdWVzLgorICogPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hiZC93Y2hhci5oLmh0bWw+CisgKgorICogRm9yIG5vdywgdGhpcyBqdXN0IGVuc3VyZXMgcHJvcGVyIHByZXJlcXVpc2l0ZSBpbmNsdXNpb24gb3JkZXIgYW5kCisgKiB0aGUgZGVjbGFyYXRpb24gb2Ygd2N3aWR0aCgpLgorICovCisKKyNpZiBfX0dOVUNfXyA+PSAzCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisjZW5kaWYKKworCisjaWYgZGVmaW5lZCBfX25lZWRfbWJzdGF0ZV90IHx8IGRlZmluZWQgX19uZWVkX3dpbnRfdCB8fCAoZGVmaW5lZCBfX2hwdXggJiYgKChkZWZpbmVkIF9JTlRUWVBFU19JTkNMVURFRCAmJiAhZGVmaW5lZCBzdHJ0b2ltYXgpIHx8IGRlZmluZWQgX0dMX0pVU1RfSU5DTFVERV9TWVNURU1fV0NIQVJfSCkpIHx8IGRlZmluZWQgX0dMX0FMUkVBRFlfSU5DTFVESU5HX1dDSEFSX0gKKy8qIFNwZWNpYWwgaW52b2NhdGlvbiBjb252ZW50aW9uOgorICAgLSBJbnNpZGUgZ2xpYmMgYW5kIHVDbGliYyBoZWFkZXIgZmlsZXMuCisgICAtIE9uIEhQLVVYIDExLjAwIHdlIGhhdmUgYSBzZXF1ZW5jZSBvZiBuZXN0ZWQgaW5jbHVkZXMKKyAgICAgPHdjaGFyLmg+IC0+IDxzdGRsaWIuaD4gLT4gPHN0ZGludC5oPiwgYW5kIHRoZSBsYXR0ZXIgaW5jbHVkZXMgPHdjaGFyLmg+LAorICAgICBvbmNlIGluZGlyZWN0bHkgPHN0ZGludC5oPiAtPiA8c3lzL3R5cGVzLmg+IC0+IDxpbnR0eXBlcy5oPiAtPiA8d2NoYXIuaD4KKyAgICAgYW5kIG9uY2UgZGlyZWN0bHkuICBJbiBib3RoIHNpdHVhdGlvbnMgJ3dpbnRfdCcgaXMgbm90IHlldCBkZWZpbmVkLAorICAgICB0aGVyZWZvcmUgd2UgY2Fubm90IHByb3ZpZGUgdGhlIGZ1bmN0aW9uIG92ZXJyaWRlczsgaW5zdGVhZCBpbmNsdWRlIG9ubHkKKyAgICAgdGhlIHN5c3RlbSdzIDx3Y2hhci5oPi4KKyAgIC0gT24gSVJJWCA2LjUsIHNpbWlsYXJseSwgd2UgaGF2ZSBhbiBpbmNsdWRlIDx3Y2hhci5oPiAtPiA8d2N0eXBlLmg+LCBhbmQKKyAgICAgdGhlIGxhdHRlciBpbmNsdWRlcyA8d2NoYXIuaD4uICBCdXQgaGVyZSwgd2UgaGF2ZSBubyB3YXkgdG8gZGV0ZWN0IHdoZXRoZXIKKyAgICAgPHdjdHlwZS5oPiBpcyBjb21wbGV0ZWx5IGluY2x1ZGVkIG9yIGlzIHN0aWxsIGJlaW5nIGluY2x1ZGVkLiAgKi8KKworI2luY2x1ZGVfbmV4dCA8d2NoYXIuaD4KKworI2Vsc2UKKy8qIE5vcm1hbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24uICAqLworCisjaWZuZGVmIF9HTF9XQ0hBUl9ICisKKyNkZWZpbmUgX0dMX0FMUkVBRFlfSU5DTFVESU5HX1dDSEFSX0gKKworI2lmIDEKKyMgaW5jbHVkZSA8ZmVhdHVyZXMuaD4gLyogZm9yIF9fR0xJQkNfXyAqLworI2VuZGlmCisKKy8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUKKyAgIDx3Y2hhci5oPi4KKyAgIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZQorICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4KKyAgIEluIHNvbWUgYnVpbGRzIG9mIHVDbGliYywgPHdjaGFyLmg+IGlzIG5vbmV4aXN0ZW50IGFuZCB3Y2hhcl90IGlzIGRlZmluZWQKKyAgIGJ5IDxzdGRkZWYuaD4uCisgICBCdXQgYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zLiAgKi8KKyNpZiAhKGRlZmluZWQgX19HTElCQ19fICYmICFkZWZpbmVkIF9fVUNMSUJDX18pCisjIGluY2x1ZGUgPHN0ZGRlZi5oPgorI2VuZGlmCisjaWZuZGVmIF9fR0xJQkNfXworIyBpbmNsdWRlIDxzdGRpby5oPgorIyBpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYKKworLyogSW5jbHVkZSB0aGUgb3JpZ2luYWwgPHdjaGFyLmg+IGlmIGl0IGV4aXN0cy4KKyAgIFNvbWUgYnVpbGRzIG9mIHVDbGliYyBsYWNrIGl0LiAgKi8KKy8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyNpZiAxCisjIGluY2x1ZGVfbmV4dCA8d2NoYXIuaD4KKyNlbmRpZgorCisjdW5kZWYgX0dMX0FMUkVBRFlfSU5DTFVESU5HX1dDSEFSX0gKKworI2lmbmRlZiBfR0xfV0NIQVJfSAorI2RlZmluZSBfR0xfV0NIQVJfSAorCisvKiBUaGUgX19hdHRyaWJ1dGVfXyBmZWF0dXJlIGlzIGF2YWlsYWJsZSBpbiBnY2MgdmVyc2lvbnMgMi41IGFuZCBsYXRlci4KKyAgIFRoZSBhdHRyaWJ1dGUgX19wdXJlX18gd2FzIGFkZGVkIGluIGdjYyAyLjk2LiAgKi8KKyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTYpCisjIGRlZmluZSBfR0xfQVRUUklCVVRFX1BVUkUgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSkKKyNlbHNlCisjIGRlZmluZSBfR0xfQVRUUklCVVRFX1BVUkUgLyogZW1wdHkgKi8KKyNlbmRpZgorCisvKiBUaGUgZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTCBldGMuIGFyZSBjb3BpZWQgaGVyZS4gICovCisjaWZuZGVmIF9HTF9DWFhERUZTX0gKKyNkZWZpbmUgX0dMX0NYWERFRlNfSAorCisvKiBUaGUgdGhyZWUgbW9zdCBmcmVxdWVudCB1c2UgY2FzZXMgb2YgdGhlc2UgbWFjcm9zIGFyZToKKworICAgKiBGb3IgcHJvdmlkaW5nIGEgc3Vic3RpdHV0ZSBmb3IgYSBmdW5jdGlvbiB0aGF0IGlzIG1pc3Npbmcgb24gc29tZQorICAgICBwbGF0Zm9ybXMsIGJ1dCBpcyBkZWNsYXJlZCBhbmQgd29ya3MgZmluZSBvbiB0aGUgcGxhdGZvcm1zIG9uIHdoaWNoCisgICAgIGl0IGV4aXN0czoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmICFASEFWRV9GT09ACisgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIGFsbCBwbGF0Zm9ybXMsCisgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIHBsYXRmb3JtczoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorICAgICAgICMgICB1bmRlZiBmb28KKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworICAgICAgICMgZWxzZQorICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIHNvbWUgcGxhdGZvcm1zCisgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIG9mIHRoZW0gYW5kCisgICAgIGlzIGFkZGl0aW9uYWxseSBlaXRoZXIgbWlzc2luZyBvciB1bmRlY2xhcmVkIG9uIHNvbWUgb3RoZXIgcGxhdGZvcm1zOgorCisgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisgICAgICAgIyAgIHVuZGVmIGZvbworICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKyAgICAgICAjICBlbmRpZgorICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKyAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CisgICAgICAgIyBlbHNlCisgICAgICAgIyAgaWYgIUBIQVZFX0ZPT0AgICBvciAgIGlmICFASEFWRV9ERUNMX0ZPT0AKKyAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorKi8KKworLyogX0dMX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuICJDIgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4KKyNlbmRpZgorCisvKiBfR0xfRlVOQ0RFQ0xfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKyAgIGRlY2xhcmVzIGEgcmVwbGFjZW1lbnQgZnVuY3Rpb24sIG5hbWVkIHJwbF9mdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9GVU5DREVDTF9SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICovCisjZGVmaW5lIF9HTF9GVU5DREVDTF9SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0ZVTkNERUNMX1JQTF8xIChycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKQorI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMXzEocnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9FWFRFUk5fQyByZXR0eXBlIHJwbF9mdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKworLyogX0dMX0ZVTkNERUNMX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBkZWNsYXJlcyB0aGUgc3lzdGVtIGZ1bmN0aW9uLCBuYW1lZCBmdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9GVU5DREVDTF9TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICovCisjZGVmaW5lIF9HTF9GVU5DREVDTF9TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgX0dMX0VYVEVSTl9DIHJldHR5cGUgZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisKKy8qIF9HTF9DWFhBTElBU19SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHJwbF9mdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFIGlzIGRlZmluZWQuCisgICBFeGFtcGxlOgorICAgICBfR0xfQ1hYQUxJQVNfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKyAqLworI2RlZmluZSBfR0xfQ1hYQUxJQVNfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycykKKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OnJwbF9mdW5jOyAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gcnBsX2Z1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQKKyAgIGRlY2xhcmF0aW9uLiAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IKKyAgIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpycGxfZnVuYyk7ICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHRoZSBzeXN0ZW0gcHJvdmlkZWQgZnVuY3Rpb24gZnVuYywgaWYgR05VTElCX05BTUVTUEFDRQorICAgaXMgZGVmaW5lZC4KKyAgIEV4YW1wbGU6CisgICAgIF9HTF9DWFhBTElBU19TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyAgLyogSWYgd2Ugd2VyZSB0byB3cml0ZQorICAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOworICAgICBsaWtlIGFib3ZlIGluIF9HTF9DWFhBTElBU19SUExfMSwgdGhlIGNvbXBpbGVyIGNvdWxkIG9wdGltaXplIGNhbGxzCisgICAgIGJldHRlciAocmVtb3ZlIGFuIGluZGlyZWN0aW9uIHRocm91Z2ggYSAnc3RhdGljJyBwb2ludGVyIHZhcmlhYmxlKSwKKyAgICAgYnV0IHRoZW4gdGhlIF9HTF9DWFhBTElBU1dBUk4gbWFjcm8gYmVsb3cgd291bGQgY2F1c2UgYSB3YXJuaW5nIG5vdCBvbmx5CisgICAgIGZvciB1c2VzIG9mIDo6ZnVuYyBidXQgYWxzbyBmb3IgdXNlcyBvZiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jLiAgKi8KKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGZ1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgZGVjbGFyYXRpb24uCisgICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvciB0aGF0IHdvdWxkCisgICBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpmdW5jKTsgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMsIHJldHR5cGUyLCBwYXJhbWV0ZXJzMik7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGlzIHBpY2tlZCBhbW9uZyBhIHNldCBvZiBvdmVybG9hZGVkIGZ1bmN0aW9ucywKKyAgIG5hbWVseSB0aGUgb25lIHdpdGggcmV0dHlwZTIgYW5kIHBhcmFtZXRlcnMyLiAgVHdvIGNvbnNlY3V0aXZlIGNhc3RzCisgICBhcmUgdXNlZCB0byBzaWxlbmNlIHRoZSAiY2Fubm90IGZpbmQgYSBtYXRjaCIgYW5kICJpbnZhbGlkIGNvbnZlcnNpb24iCisgICBlcnJvcnMgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisgIC8qIFRoZSBvdXRlciBjYXN0IG11c3QgYmUgYSByZWludGVycHJldF9jYXN0LgorICAgICBUaGUgaW5uZXIgY2FzdDogV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNldCBvZiBvdmVybG9hZGVkCisgICAgIGZ1bmN0aW9ucywgaXQgd29ya3MgYXMgYSBzdGF0aWNfY2FzdDw+LCBjaG9vc2luZyB0aGUgZGVzaWduYXRlZCB2YXJpYW50LgorICAgICBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2luZ2xlIHZhcmlhbnQsIGl0IHdvcmtzIGFzIGEKKyAgICAgcmVpbnRlcnByZXRfY2FzdDw+LiBUaGUgcGFyZW50aGVzaXplZCBjYXN0IHN5bnRheCB3b3JrcyBib3RoIHdheXMuICAqLworIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChyZXR0eXBlMigqKXBhcmFtZXRlcnMyKSg6OmZ1bmMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTV0FSTiAoZnVuYyk7CisgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiA6OmZ1bmMgaXMgdXNlZCBidXQgbm90IHdoZW4KKyAgIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gIGZ1bmMgbXVzdCBiZSBkZWZpbmVkIHdpdGhvdXQgb3ZlcmxvYWRlZAorICAgdmFyaWFudHMuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk5fMSAoZnVuYywgR05VTElCX05BTUVTUEFDRSkKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMShmdW5jLG5hbWVzcGFjZSkgXAorICAgX0dMX0NYWEFMSUFTV0FSTl8yIChmdW5jLCBuYW1lc3BhY2UpCisvKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKyAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworIyBpZiAhX19PUFRJTUlaRV9fCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgX0dMX1dBUk5fT05fVVNFIChmdW5jLCBcCisgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworIyBlbHNlCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisgICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNXQVJOMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiB0aGUgZ2l2ZW4gb3ZlcmxvYWRlZCB2YXJpYW50IG9mIDo6ZnVuYworICAgaXMgdXNlZCBidXQgbm90IHdoZW4gR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk4xXzEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdOVUxJQl9OQU1FU1BBQ0UpCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgX0dMX0NYWEFMSUFTV0FSTjFfMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgbmFtZXNwYWNlKQorLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKyMgaWYgIV9fT1BUSU1JWkVfXworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisgICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisjZW5kaWYgLyogX0dMX0NYWERFRlNfSCAqLworCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwgaXMgY29waWVkIGhlcmUuICAqLworLyogX0dMX0FSR19OT05OVUxMKChuLC4uLixtKSkgdGVsbHMgdGhlIGNvbXBpbGVyIGFuZCBzdGF0aWMgYW5hbHl6ZXIgdG9vbHMKKyAgIHRoYXQgdGhlIHZhbHVlcyBwYXNzZWQgYXMgYXJndW1lbnRzIG4sIC4uLiwgbSBtdXN0IGJlIG5vbi1OVUxMIHBvaW50ZXJzLgorICAgbiA9IDEgc3RhbmRzIGZvciB0aGUgZmlyc3QgYXJndW1lbnQsIG4gPSAyIGZvciB0aGUgc2Vjb25kIGFyZ3VtZW50IGV0Yy4gICovCisjaWZuZGVmIF9HTF9BUkdfTk9OTlVMTAorIyBpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSB8fCBfX0dOVUNfXyA+IDMKKyMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKSBfX2F0dHJpYnV0ZV9fICgoX19ub25udWxsX18gcGFyYW1zKSkKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpCisjIGVuZGlmCisjZW5kaWYKKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFCisKKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCisvKiBBIGNvbXBpbGVyIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDQuMy4wIGFuZCBsYXRlci4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobWVzc2FnZSkpKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24KKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisjIGVuZGlmCisjZW5kaWYKKworLyogX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuY3Rpb24sIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsICJzdHJpbmciKQorICAgaXMgbGlrZSBfR0xfV0FSTl9PTl9VU0UgKGZ1bmN0aW9uLCAic3RyaW5nIiksIGV4Y2VwdCB0aGF0IHRoZSBmdW5jdGlvbiBpcworICAgZGVjbGFyZWQgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLCBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLAorICAgYW5kIGF0dHJpYnV0ZXMuCisgICBUaGlzIHZhcmlhbnQgaXMgdXNlZnVsIGZvciBvdmVybG9hZGVkIGZ1bmN0aW9ucyBpbiBDKysuIF9HTF9XQVJOX09OX1VTRSBkb2VzCisgICBub3Qgd29yayBpbiB0aGlzIGNhc2UuICAqLworI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0VfQ1hYCisjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyBcCisgICAgIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobXNnKSkpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisvKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBfR0xfV0FSTl9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX0VYVEVSTl9DCisjIGlmIGRlZmluZWQgX19jcGx1c3BsdXMKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4gIkMiCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4KKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIERlZmluZSB3aW50X3QgYW5kIFdFT0YuICAoQWxzbyBkb25lIGluIHdjdHlwZS5pbi5oLikgICovCisjaWYgITEgJiYgIWRlZmluZWQgd2ludF90CisjIGRlZmluZSB3aW50X3QgaW50CisjIGlmbmRlZiBXRU9GCisjICBkZWZpbmUgV0VPRiAtMQorIyBlbmRpZgorI2Vsc2UKKy8qIE1TVkMgZGVmaW5lcyB3aW50X3QgYXMgJ3Vuc2lnbmVkIHNob3J0JyBpbiA8Y3J0ZGVmcy5oPi4KKyAgIFRoaXMgaXMgdG9vIHNtYWxsOiBJU08gQyA5OSBzZWN0aW9uIDcuMjQuMS4oMikgc2F5cyB0aGF0IHdpbnRfdCBtdXN0IGJlCisgICAidW5jaGFuZ2VkIGJ5IGRlZmF1bHQgYXJndW1lbnQgcHJvbW90aW9ucyIuICBPdmVycmlkZSBpdC4gICovCisjIGlmIGRlZmluZWQgX01TQ19WRVIKKyMgIGlmICFHTlVMSUJfZGVmaW5lZF93aW50X3QKKyMgICBpbmNsdWRlIDxjcnRkZWZzLmg+Cit0eXBlZGVmIHVuc2lnbmVkIGludCBycGxfd2ludF90OworIyAgIHVuZGVmIHdpbnRfdAorIyAgIGRlZmluZSB3aW50X3QgcnBsX3dpbnRfdAorIyAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF93aW50X3QgMQorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZuZGVmIFdFT0YKKyMgIGRlZmluZSBXRU9GICgod2ludF90KSAtMSkKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIE92ZXJyaWRlIG1ic3RhdGVfdCBpZiBpdCBpcyB0b28gc21hbGwuCisgICBPbiBJUklYIDYuNSwgc2l6ZW9mIChtYnN0YXRlX3QpID09IDEsIHdoaWNoIGlzIG5vdCBzdWZmaWNpZW50IGZvcgorICAgaW1wbGVtZW50aW5nIG1icnRvd2MgZm9yIGVuY29kaW5ncyBsaWtlIFVURi04LiAgKi8KKyNpZiAhKDEgJiYgMSkgfHwgMAorIyBpZiAhR05VTElCX2RlZmluZWRfbWJzdGF0ZV90Cit0eXBlZGVmIGludCBycGxfbWJzdGF0ZV90OworIyAgdW5kZWYgbWJzdGF0ZV90CisjICBkZWZpbmUgbWJzdGF0ZV90IHJwbF9tYnN0YXRlX3QKKyMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9tYnN0YXRlX3QgMQorIyBlbmRpZgorI2VuZGlmCisKKworLyogQ29udmVydCBhIHNpbmdsZS1ieXRlIGNoYXJhY3RlciB0byBhIHdpZGUgY2hhcmFjdGVyLiAgKi8KKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgYnRvd2MKKyMgICBkZWZpbmUgYnRvd2MgcnBsX2J0b3djCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoYnRvd2MsIHdpbnRfdCwgKGludCBjKSBfR0xfQVRUUklCVVRFX1BVUkUpOworX0dMX0NYWEFMSUFTX1JQTCAoYnRvd2MsIHdpbnRfdCwgKGludCBjKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChidG93Yywgd2ludF90LCAoaW50IGMpIF9HTF9BVFRSSUJVVEVfUFVSRSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoYnRvd2MsIHdpbnRfdCwgKGludCBjKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChidG93Yyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGJ0b3djCisjIGlmIEhBVkVfUkFXX0RFQ0xfQlRPV0MKK19HTF9XQVJOX09OX1VTRSAoYnRvd2MsICJidG93YyBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgYnRvd2MgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBDb252ZXJ0IGEgd2lkZSBjaGFyYWN0ZXIgdG8gYSBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXIuICAqLworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiB3Y3RvYgorIyAgIGRlZmluZSB3Y3RvYiBycGxfd2N0b2IKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh3Y3RvYiwgaW50LCAod2ludF90IHdjKSBfR0xfQVRUUklCVVRFX1BVUkUpOworX0dMX0NYWEFMSUFTX1JQTCAod2N0b2IsIGludCwgKHdpbnRfdCB3YykpOworIyBlbHNlCisjICBpZiAhZGVmaW5lZCB3Y3RvYiAmJiAhMQorLyogd2N0b2IgaXMgcHJvdmlkZWQgYnkgZ251bGliLCBvciB3Y3RvYiBleGlzdHMgYnV0IGlzIG5vdCBkZWNsYXJlZC4gICovCitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3RvYiwgaW50LCAod2ludF90IHdjKSBfR0xfQVRUUklCVVRFX1BVUkUpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjdG9iLCBpbnQsICh3aW50X3Qgd2MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHdjdG9iKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2N0b2IKKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1RPQgorX0dMX1dBUk5fT05fVVNFICh3Y3RvYiwgIndjdG9iIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3RvYiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIFRlc3Qgd2hldGhlciAqUFMgaXMgaW4gdGhlIGluaXRpYWwgc3RhdGUuICAqLworI2lmIDEKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBtYnNpbml0CisjICAgZGVmaW5lIG1ic2luaXQgcnBsX21ic2luaXQKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChtYnNpbml0LCBpbnQsIChjb25zdCBtYnN0YXRlX3QgKnBzKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChtYnNpbml0LCBpbnQsIChjb25zdCBtYnN0YXRlX3QgKnBzKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChtYnNpbml0LCBpbnQsIChjb25zdCBtYnN0YXRlX3QgKnBzKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobWJzaW5pdCwgaW50LCAoY29uc3QgbWJzdGF0ZV90ICpwcykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobWJzaW5pdCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG1ic2luaXQKKyMgaWYgSEFWRV9SQVdfREVDTF9NQlNJTklUCitfR0xfV0FSTl9PTl9VU0UgKG1ic2luaXQsICJtYnNpbml0IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBtYnNpbml0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogQ29udmVydCBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIgdG8gYSB3aWRlIGNoYXJhY3Rlci4gICovCisjaWYgMQorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIG1icnRvd2MKKyMgICBkZWZpbmUgbWJydG93YyBycGxfbWJydG93YworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG1icnRvd2MsIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICh3Y2hhcl90ICpwd2MsIGNvbnN0IGNoYXIgKnMsIHNpemVfdCBuLCBtYnN0YXRlX3QgKnBzKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChtYnJ0b3djLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqcHdjLCBjb25zdCBjaGFyICpzLCBzaXplX3QgbiwgbWJzdGF0ZV90ICpwcykpOworIyBlbHNlCisjICBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAobWJydG93Yywgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKnB3YywgY29uc3QgY2hhciAqcywgc2l6ZV90IG4sIG1ic3RhdGVfdCAqcHMpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChtYnJ0b3djLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqcHdjLCBjb25zdCBjaGFyICpzLCBzaXplX3QgbiwgbWJzdGF0ZV90ICpwcykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobWJydG93Yyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG1icnRvd2MKKyMgaWYgSEFWRV9SQVdfREVDTF9NQlJUT1dDCitfR0xfV0FSTl9PTl9VU0UgKG1icnRvd2MsICJtYnJ0b3djIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBtYnJ0b3djIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogUmVjb2duaXplIGEgbXVsdGlieXRlIGNoYXJhY3Rlci4gICovCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIG1icmxlbgorIyAgIGRlZmluZSBtYnJsZW4gcnBsX21icmxlbgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG1icmxlbiwgc2l6ZV90LCAoY29uc3QgY2hhciAqcywgc2l6ZV90IG4sIG1ic3RhdGVfdCAqcHMpKTsKK19HTF9DWFhBTElBU19SUEwgKG1icmxlbiwgc2l6ZV90LCAoY29uc3QgY2hhciAqcywgc2l6ZV90IG4sIG1ic3RhdGVfdCAqcHMpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKG1icmxlbiwgc2l6ZV90LCAoY29uc3QgY2hhciAqcywgc2l6ZV90IG4sIG1ic3RhdGVfdCAqcHMpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChtYnJsZW4sIHNpemVfdCwgKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBuLCBtYnN0YXRlX3QgKnBzKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChtYnJsZW4pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBtYnJsZW4KKyMgaWYgSEFWRV9SQVdfREVDTF9NQlJMRU4KK19HTF9XQVJOX09OX1VTRSAobWJybGVuLCAibWJybGVuIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBtYnJsZW4gZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgd2lkZSBzdHJpbmcuICAqLworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBtYnNydG93Y3MKKyMgICBkZWZpbmUgbWJzcnRvd2NzIHJwbF9tYnNydG93Y3MKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChtYnNydG93Y3MsIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICh3Y2hhcl90ICpkZXN0LCBjb25zdCBjaGFyICoqc3JjcCwgc2l6ZV90IGxlbiwgbWJzdGF0ZV90ICpwcykKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChtYnNydG93Y3MsIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICh3Y2hhcl90ICpkZXN0LCBjb25zdCBjaGFyICoqc3JjcCwgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKnBzKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChtYnNydG93Y3MsIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICh3Y2hhcl90ICpkZXN0LCBjb25zdCBjaGFyICoqc3JjcCwgc2l6ZV90IGxlbiwgbWJzdGF0ZV90ICpwcykKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobWJzcnRvd2NzLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqZGVzdCwgY29uc3QgY2hhciAqKnNyY3AsIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpwcykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobWJzcnRvd2NzKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbWJzcnRvd2NzCisjIGlmIEhBVkVfUkFXX0RFQ0xfTUJTUlRPV0NTCitfR0xfV0FSTl9PTl9VU0UgKG1ic3J0b3djcywgIm1ic3J0b3djcyBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWJzcnRvd2NzIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogQ29udmVydCBhIHN0cmluZyB0byBhIHdpZGUgc3RyaW5nLiAgKi8KKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgbWJzbnJ0b3djcworIyAgIGRlZmluZSBtYnNucnRvd2NzIHJwbF9tYnNucnRvd2NzCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobWJzbnJ0b3djcywgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKmRlc3QsIGNvbnN0IGNoYXIgKipzcmNwLCBzaXplX3Qgc3JjbGVuLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqcHMpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAobWJzbnJ0b3djcywgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKmRlc3QsIGNvbnN0IGNoYXIgKipzcmNwLCBzaXplX3Qgc3JjbGVuLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqcHMpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKG1ic25ydG93Y3MsIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICh3Y2hhcl90ICpkZXN0LCBjb25zdCBjaGFyICoqc3JjcCwgc2l6ZV90IHNyY2xlbiwgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKnBzKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChtYnNucnRvd2NzLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqZGVzdCwgY29uc3QgY2hhciAqKnNyY3AsIHNpemVfdCBzcmNsZW4sIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpwcykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobWJzbnJ0b3djcyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG1ic25ydG93Y3MKKyMgaWYgSEFWRV9SQVdfREVDTF9NQlNOUlRPV0NTCitfR0xfV0FSTl9PTl9VU0UgKG1ic25ydG93Y3MsICJtYnNucnRvd2NzIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBtYnNucnRvd2NzIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogQ29udmVydCBhIHdpZGUgY2hhcmFjdGVyIHRvIGEgbXVsdGlieXRlIGNoYXJhY3Rlci4gICovCisjaWYgMAorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHdjcnRvbWIKKyMgICBkZWZpbmUgd2NydG9tYiBycGxfd2NydG9tYgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHdjcnRvbWIsIHNpemVfdCwgKGNoYXIgKnMsIHdjaGFyX3Qgd2MsIG1ic3RhdGVfdCAqcHMpKTsKK19HTF9DWFhBTElBU19SUEwgKHdjcnRvbWIsIHNpemVfdCwgKGNoYXIgKnMsIHdjaGFyX3Qgd2MsIG1ic3RhdGVfdCAqcHMpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHdjcnRvbWIsIHNpemVfdCwgKGNoYXIgKnMsIHdjaGFyX3Qgd2MsIG1ic3RhdGVfdCAqcHMpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3J0b21iLCBzaXplX3QsIChjaGFyICpzLCB3Y2hhcl90IHdjLCBtYnN0YXRlX3QgKnBzKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOICh3Y3J0b21iKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2NydG9tYgorIyBpZiBIQVZFX1JBV19ERUNMX1dDUlRPTUIKK19HTF9XQVJOX09OX1VTRSAod2NydG9tYiwgIndjcnRvbWIgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdjcnRvbWIgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBDb252ZXJ0IGEgd2lkZSBzdHJpbmcgdG8gYSBzdHJpbmcuICAqLworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiB3Y3NydG9tYnMKKyMgICBkZWZpbmUgd2NzcnRvbWJzIHJwbF93Y3NydG9tYnMKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh3Y3NydG9tYnMsIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpkZXN0LCBjb25zdCB3Y2hhcl90ICoqc3JjcCwgc2l6ZV90IGxlbiwgbWJzdGF0ZV90ICpwcykKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMICh3Y3NydG9tYnMsIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpkZXN0LCBjb25zdCB3Y2hhcl90ICoqc3JjcCwgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKnBzKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3NydG9tYnMsIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpkZXN0LCBjb25zdCB3Y2hhcl90ICoqc3JjcCwgc2l6ZV90IGxlbiwgbWJzdGF0ZV90ICpwcykKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod2NzcnRvbWJzLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAoY2hhciAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqKnNyY3AsIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpwcykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAod2NzcnRvbWJzKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2NzcnRvbWJzCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NTUlRPTUJTCitfR0xfV0FSTl9PTl9VU0UgKHdjc3J0b21icywgIndjc3J0b21icyBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NzcnRvbWJzIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogQ29udmVydCBhIHdpZGUgc3RyaW5nIHRvIGEgc3RyaW5nLiAgKi8KKyNpZiAwCisjIGlmIDAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgd2NzbnJ0b21icworIyAgIGRlZmluZSB3Y3NucnRvbWJzIHJwbF93Y3NucnRvbWJzCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAod2NzbnJ0b21icywgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKmRlc3QsIGNvbnN0IHdjaGFyX3QgKipzcmNwLCBzaXplX3Qgc3JjbGVuLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqcHMpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAod2NzbnJ0b21icywgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgKGNoYXIgKmRlc3QsIGNvbnN0IHdjaGFyX3QgKipzcmNwLCBzaXplX3Qgc3JjbGVuLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqcHMpKTsKKyMgZWxzZQorIyAgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHdjc25ydG9tYnMsIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpkZXN0LCBjb25zdCB3Y2hhcl90ICoqc3JjcCwgc2l6ZV90IHNyY2xlbiwgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKnBzKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3NucnRvbWJzLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAoY2hhciAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqKnNyY3AsIHNpemVfdCBzcmNsZW4sIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpwcykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAod2NzbnJ0b21icyk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc25ydG9tYnMKKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1NOUlRPTUJTCitfR0xfV0FSTl9PTl9VU0UgKHdjc25ydG9tYnMsICJ3Y3NucnRvbWJzIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3NucnRvbWJzIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2NyZWVuIGNvbHVtbnMgbmVlZGVkIGZvciBXQy4gICovCisjaWYgMQorIyBpZiAwCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHdjd2lkdGgKKyMgICBkZWZpbmUgd2N3aWR0aCBycGxfd2N3aWR0aAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHdjd2lkdGgsIGludCwgKHdjaGFyX3QpIF9HTF9BVFRSSUJVVEVfUFVSRSk7CitfR0xfQ1hYQUxJQVNfUlBMICh3Y3dpZHRoLCBpbnQsICh3Y2hhcl90KSk7CisjIGVsc2UKKyMgIGlmICExCisvKiB3Y3dpZHRoIGV4aXN0cyBidXQgaXMgbm90IGRlY2xhcmVkLiAgKi8KK19HTF9GVU5DREVDTF9TWVMgKHdjd2lkdGgsIGludCwgKHdjaGFyX3QpIF9HTF9BVFRSSUJVVEVfUFVSRSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod2N3aWR0aCwgaW50LCAod2NoYXJfdCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAod2N3aWR0aCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjd2lkdGgKKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1dJRFRICitfR0xfV0FSTl9PTl9VU0UgKHdjd2lkdGgsICJ3Y3dpZHRoIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3dpZHRoIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogU2VhcmNoIE4gd2lkZSBjaGFyYWN0ZXJzIG9mIFMgZm9yIEMuICAqLworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHdtZW1jaHIsIHdjaGFyX3QgKiwgKGNvbnN0IHdjaGFyX3QgKnMsIHdjaGFyX3QgYywgc2l6ZV90IG4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRSk7CisjIGVuZGlmCisgIC8qIE9uIHNvbWUgc3lzdGVtcywgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGFuIG92ZXJsb2FkZWQgZnVuY3Rpb246CisgICAgICAgZXh0ZXJuICJDKysiIHsKKyAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiBzdGQ6OndtZW1jaHIgKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCwgc2l6ZV90KTsKKyAgICAgICAgIHdjaGFyX3QgKiBzdGQ6OndtZW1jaHIgKHdjaGFyX3QgKiwgd2NoYXJfdCwgc2l6ZV90KTsKKyAgICAgICB9ICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUMiAod21lbWNociwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKiwgKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiwgKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCwgc2l6ZV90KSk7CisjIGlmICgoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEwKSAmJiAhZGVmaW5lZCBfX1VDTElCQ19fKSBcCisgICAgICYmIChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNCkpCitfR0xfQ1hYQUxJQVNXQVJOMSAod21lbWNociwgd2NoYXJfdCAqLCAod2NoYXJfdCAqcywgd2NoYXJfdCBjLCBzaXplX3QgbikpOworX0dMX0NYWEFMSUFTV0FSTjEgKHdtZW1jaHIsIGNvbnN0IHdjaGFyX3QgKiwKKyAgICAgICAgICAgICAgICAgICAoY29uc3Qgd2NoYXJfdCAqcywgd2NoYXJfdCBjLCBzaXplX3QgbikpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNXQVJOICh3bWVtY2hyKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd21lbWNocgorIyBpZiBIQVZFX1JBV19ERUNMX1dNRU1DSFIKK19HTF9XQVJOX09OX1VTRSAod21lbWNociwgIndtZW1jaHIgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdtZW1jaHIgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBDb21wYXJlIE4gd2lkZSBjaGFyYWN0ZXJzIG9mIFMxIGFuZCBTMi4gICovCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAod21lbWNtcCwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHdjaGFyX3QgKnMxLCBjb25zdCB3Y2hhcl90ICpzMiwgc2l6ZV90IG4pCisgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod21lbWNtcCwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHdjaGFyX3QgKnMxLCBjb25zdCB3Y2hhcl90ICpzMiwgc2l6ZV90IG4pKTsKK19HTF9DWFhBTElBU1dBUk4gKHdtZW1jbXApOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3bWVtY21wCisjIGlmIEhBVkVfUkFXX0RFQ0xfV01FTUNNUAorX0dMX1dBUk5fT05fVVNFICh3bWVtY21wLCAid21lbWNtcCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd21lbWNtcCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIENvcHkgTiB3aWRlIGNoYXJhY3RlcnMgb2YgU1JDIHRvIERFU1QuICAqLworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHdtZW1jcHksIHdjaGFyX3QgKiwKKyAgICAgICAgICAgICAgICAgICh3Y2hhcl90ICpkZXN0LCBjb25zdCB3Y2hhcl90ICpzcmMsIHNpemVfdCBuKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3bWVtY3B5LCB3Y2hhcl90ICosCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqc3JjLCBzaXplX3QgbikpOworX0dMX0NYWEFMSUFTV0FSTiAod21lbWNweSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdtZW1jcHkKKyMgaWYgSEFWRV9SQVdfREVDTF9XTUVNQ1BZCitfR0xfV0FSTl9PTl9VU0UgKHdtZW1jcHksICJ3bWVtY3B5IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3bWVtY3B5IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogQ29weSBOIHdpZGUgY2hhcmFjdGVycyBvZiBTUkMgdG8gREVTVCwgZ3VhcmFudGVlaW5nIGNvcnJlY3QgYmVoYXZpb3IgZm9yCisgICBvdmVybGFwcGluZyBtZW1vcnkgYXJlYXMuICAqLworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHdtZW1tb3ZlLCB3Y2hhcl90ICosCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqc3JjLCBzaXplX3QgbikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod21lbW1vdmUsIHdjaGFyX3QgKiwKKyAgICAgICAgICAgICAgICAgICh3Y2hhcl90ICpkZXN0LCBjb25zdCB3Y2hhcl90ICpzcmMsIHNpemVfdCBuKSk7CitfR0xfQ1hYQUxJQVNXQVJOICh3bWVtbW92ZSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdtZW1tb3ZlCisjIGlmIEhBVkVfUkFXX0RFQ0xfV01FTU1PVkUKK19HTF9XQVJOX09OX1VTRSAod21lbW1vdmUsICJ3bWVtbW92ZSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd21lbW1vdmUgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBTZXQgTiB3aWRlIGNoYXJhY3RlcnMgb2YgUyB0byBDLiAgKi8KKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh3bWVtc2V0LCB3Y2hhcl90ICosICh3Y2hhcl90ICpzLCB3Y2hhcl90IGMsIHNpemVfdCBuKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3bWVtc2V0LCB3Y2hhcl90ICosICh3Y2hhcl90ICpzLCB3Y2hhcl90IGMsIHNpemVfdCBuKSk7CitfR0xfQ1hYQUxJQVNXQVJOICh3bWVtc2V0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd21lbXNldAorIyBpZiBIQVZFX1JBV19ERUNMX1dNRU1TRVQKK19HTF9XQVJOX09OX1VTRSAod21lbXNldCwgIndtZW1zZXQgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdtZW1zZXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiB3aWRlIGNoYXJhY3RlcnMgaW4gUy4gICovCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAod2NzbGVuLCBzaXplX3QsIChjb25zdCB3Y2hhcl90ICpzKSBfR0xfQVRUUklCVVRFX1BVUkUpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod2NzbGVuLCBzaXplX3QsIChjb25zdCB3Y2hhcl90ICpzKSk7CitfR0xfQ1hYQUxJQVNXQVJOICh3Y3NsZW4pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3NsZW4KKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1NMRU4KK19HTF9XQVJOX09OX1VTRSAod2NzbGVuLCAid2NzbGVuIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3NsZW4gZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiB3aWRlIGNoYXJhY3RlcnMgaW4gUywgYnV0IGF0IG1vc3QgTUFYTEVOLiAgKi8KKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3NubGVuLCBzaXplX3QsIChjb25zdCB3Y2hhcl90ICpzLCBzaXplX3QgbWF4bGVuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod2Nzbmxlbiwgc2l6ZV90LCAoY29uc3Qgd2NoYXJfdCAqcywgc2l6ZV90IG1heGxlbikpOworX0dMX0NYWEFMSUFTV0FSTiAod2Nzbmxlbik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc25sZW4KKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1NOTEVOCitfR0xfV0FSTl9PTl9VU0UgKHdjc25sZW4sICJ3Y3NubGVuIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3NubGVuIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogQ29weSBTUkMgdG8gREVTVC4gICovCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAod2NzY3B5LCB3Y2hhcl90ICosICh3Y2hhcl90ICpkZXN0LCBjb25zdCB3Y2hhcl90ICpzcmMpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjc2NweSwgd2NoYXJfdCAqLCAod2NoYXJfdCAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqc3JjKSk7CitfR0xfQ1hYQUxJQVNXQVJOICh3Y3NjcHkpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3NjcHkKKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1NDUFkKK19HTF9XQVJOX09OX1VTRSAod2NzY3B5LCAid2NzY3B5IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3NjcHkgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBDb3B5IFNSQyB0byBERVNULCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1pbmF0aW5nIEwnXDAnIGluIERFU1QuICAqLworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHdjcGNweSwgd2NoYXJfdCAqLCAod2NoYXJfdCAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqc3JjKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3BjcHksIHdjaGFyX3QgKiwgKHdjaGFyX3QgKmRlc3QsIGNvbnN0IHdjaGFyX3QgKnNyYykpOworX0dMX0NYWEFMSUFTV0FSTiAod2NwY3B5KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2NwY3B5CisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NQQ1BZCitfR0xfV0FSTl9PTl9VU0UgKHdjcGNweSwgIndjcGNweSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NwY3B5IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogQ29weSBubyBtb3JlIHRoYW4gTiB3aWRlIGNoYXJhY3RlcnMgb2YgU1JDIHRvIERFU1QuICAqLworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHdjc25jcHksIHdjaGFyX3QgKiwKKyAgICAgICAgICAgICAgICAgICh3Y2hhcl90ICpkZXN0LCBjb25zdCB3Y2hhcl90ICpzcmMsIHNpemVfdCBuKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3NuY3B5LCB3Y2hhcl90ICosCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqc3JjLCBzaXplX3QgbikpOworX0dMX0NYWEFMSUFTV0FSTiAod2NzbmNweSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc25jcHkKKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1NOQ1BZCitfR0xfV0FSTl9PTl9VU0UgKHdjc25jcHksICJ3Y3NuY3B5IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3NuY3B5IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogQ29weSBubyBtb3JlIHRoYW4gTiBjaGFyYWN0ZXJzIG9mIFNSQyB0byBERVNULCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YKKyAgIHRoZSBsYXN0IGNoYXJhY3RlciB3cml0dGVuIGludG8gREVTVC4gICovCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAod2NwbmNweSwgd2NoYXJfdCAqLAorICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKmRlc3QsIGNvbnN0IHdjaGFyX3QgKnNyYywgc2l6ZV90IG4pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjcG5jcHksIHdjaGFyX3QgKiwKKyAgICAgICAgICAgICAgICAgICh3Y2hhcl90ICpkZXN0LCBjb25zdCB3Y2hhcl90ICpzcmMsIHNpemVfdCBuKSk7CitfR0xfQ1hYQUxJQVNXQVJOICh3Y3BuY3B5KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2NwbmNweQorIyBpZiBIQVZFX1JBV19ERUNMX1dDUE5DUFkKK19HTF9XQVJOX09OX1VTRSAod2NwbmNweSwgIndjcG5jcHkgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdjcG5jcHkgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBBcHBlbmQgU1JDIG9udG8gREVTVC4gICovCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAod2NzY2F0LCB3Y2hhcl90ICosICh3Y2hhcl90ICpkZXN0LCBjb25zdCB3Y2hhcl90ICpzcmMpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjc2NhdCwgd2NoYXJfdCAqLCAod2NoYXJfdCAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqc3JjKSk7CitfR0xfQ1hYQUxJQVNXQVJOICh3Y3NjYXQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3NjYXQKKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1NDQVQKK19HTF9XQVJOX09OX1VTRSAod2NzY2F0LCAid2NzY2F0IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3NjYXQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBBcHBlbmQgbm8gbW9yZSB0aGFuIE4gd2lkZSBjaGFyYWN0ZXJzIG9mIFNSQyBvbnRvIERFU1QuICAqLworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHdjc25jYXQsIHdjaGFyX3QgKiwKKyAgICAgICAgICAgICAgICAgICh3Y2hhcl90ICpkZXN0LCBjb25zdCB3Y2hhcl90ICpzcmMsIHNpemVfdCBuKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3NuY2F0LCB3Y2hhcl90ICosCisgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqc3JjLCBzaXplX3QgbikpOworX0dMX0NYWEFMSUFTV0FSTiAod2NzbmNhdCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc25jYXQKKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1NOQ0FUCitfR0xfV0FSTl9PTl9VU0UgKHdjc25jYXQsICJ3Y3NuY2F0IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3NuY2F0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogQ29tcGFyZSBTMSBhbmQgUzIuICAqLworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHdjc2NtcCwgaW50LCAoY29uc3Qgd2NoYXJfdCAqczEsIGNvbnN0IHdjaGFyX3QgKnMyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3NjbXAsIGludCwgKGNvbnN0IHdjaGFyX3QgKnMxLCBjb25zdCB3Y2hhcl90ICpzMikpOworX0dMX0NYWEFMSUFTV0FSTiAod2NzY21wKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2NzY21wCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NTQ01QCitfR0xfV0FSTl9PTl9VU0UgKHdjc2NtcCwgIndjc2NtcCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NzY21wIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogQ29tcGFyZSBubyBtb3JlIHRoYW4gTiB3aWRlIGNoYXJhY3RlcnMgb2YgUzEgYW5kIFMyLiAgKi8KKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3NuY21wLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3Qgd2NoYXJfdCAqczEsIGNvbnN0IHdjaGFyX3QgKnMyLCBzaXplX3QgbikKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3NuY21wLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3Qgd2NoYXJfdCAqczEsIGNvbnN0IHdjaGFyX3QgKnMyLCBzaXplX3QgbikpOworX0dMX0NYWEFMSUFTV0FSTiAod2NzbmNtcCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc25jbXAKKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1NOQ01QCitfR0xfV0FSTl9PTl9VU0UgKHdjc25jbXAsICJ3Y3NuY21wIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3NuY21wIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogQ29tcGFyZSBTMSBhbmQgUzIsIGlnbm9yaW5nIGNhc2UuICAqLworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHdjc2Nhc2VjbXAsIGludCwgKGNvbnN0IHdjaGFyX3QgKnMxLCBjb25zdCB3Y2hhcl90ICpzMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjc2Nhc2VjbXAsIGludCwgKGNvbnN0IHdjaGFyX3QgKnMxLCBjb25zdCB3Y2hhcl90ICpzMikpOworX0dMX0NYWEFMSUFTV0FSTiAod2NzY2FzZWNtcCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc2Nhc2VjbXAKKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1NDQVNFQ01QCitfR0xfV0FSTl9PTl9VU0UgKHdjc2Nhc2VjbXAsICJ3Y3NjYXNlY21wIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3NjYXNlY21wIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogQ29tcGFyZSBubyBtb3JlIHRoYW4gTiBjaGFycyBvZiBTMSBhbmQgUzIsIGlnbm9yaW5nIGNhc2UuICAqLworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHdjc25jYXNlY21wLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3Qgd2NoYXJfdCAqczEsIGNvbnN0IHdjaGFyX3QgKnMyLCBzaXplX3QgbikKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3NuY2FzZWNtcCwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHdjaGFyX3QgKnMxLCBjb25zdCB3Y2hhcl90ICpzMiwgc2l6ZV90IG4pKTsKK19HTF9DWFhBTElBU1dBUk4gKHdjc25jYXNlY21wKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2NzbmNhc2VjbXAKKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1NOQ0FTRUNNUAorX0dMX1dBUk5fT05fVVNFICh3Y3NuY2FzZWNtcCwgIndjc25jYXNlY21wIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3NuY2FzZWNtcCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIENvbXBhcmUgUzEgYW5kIFMyLCBib3RoIGludGVycHJldGVkIGFzIGFwcHJvcHJpYXRlIHRvIHRoZSBMQ19DT0xMQVRFCisgICBjYXRlZ29yeSBvZiB0aGUgY3VycmVudCBsb2NhbGUuICAqLworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHdjc2NvbGwsIGludCwgKGNvbnN0IHdjaGFyX3QgKnMxLCBjb25zdCB3Y2hhcl90ICpzMikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod2NzY29sbCwgaW50LCAoY29uc3Qgd2NoYXJfdCAqczEsIGNvbnN0IHdjaGFyX3QgKnMyKSk7CitfR0xfQ1hYQUxJQVNXQVJOICh3Y3Njb2xsKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2NzY29sbAorIyBpZiBIQVZFX1JBV19ERUNMX1dDU0NPTEwKK19HTF9XQVJOX09OX1VTRSAod2NzY29sbCwgIndjc2NvbGwgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdjc2NvbGwgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBUcmFuc2Zvcm0gUzIgaW50byBhcnJheSBwb2ludGVkIHRvIGJ5IFMxIHN1Y2ggdGhhdCBpZiB3Y3NjbXAgaXMgYXBwbGllZAorICAgdG8gdHdvIHRyYW5zZm9ybWVkIHN0cmluZ3MgdGhlIHJlc3VsdCBpcyB0aGUgYXMgYXBwbHlpbmcgJ3djc2NvbGwnIHRvIHRoZQorICAgb3JpZ2luYWwgc3RyaW5ncy4gICovCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAod2NzeGZybSwgc2l6ZV90LCAod2NoYXJfdCAqczEsIGNvbnN0IHdjaGFyX3QgKnMyLCBzaXplX3QgbikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod2NzeGZybSwgc2l6ZV90LCAod2NoYXJfdCAqczEsIGNvbnN0IHdjaGFyX3QgKnMyLCBzaXplX3QgbikpOworX0dMX0NYWEFMSUFTV0FSTiAod2NzeGZybSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc3hmcm0KKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1NYRlJNCitfR0xfV0FSTl9PTl9VU0UgKHdjc3hmcm0sICJ3Y3N4ZnJtIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3N4ZnJtIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogRHVwbGljYXRlIFMsIHJldHVybmluZyBhbiBpZGVudGljYWwgbWFsbG9jJ2Qgc3RyaW5nLiAgKi8KKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3NkdXAsIHdjaGFyX3QgKiwgKGNvbnN0IHdjaGFyX3QgKnMpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjc2R1cCwgd2NoYXJfdCAqLCAoY29uc3Qgd2NoYXJfdCAqcykpOworX0dMX0NYWEFMSUFTV0FSTiAod2NzZHVwKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2NzZHVwCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NTRFVQCitfR0xfV0FSTl9PTl9VU0UgKHdjc2R1cCwgIndjc2R1cCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NzZHVwIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBXQyBpbiBXQ1MuICAqLworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHdjc2Nociwgd2NoYXJfdCAqLCAoY29uc3Qgd2NoYXJfdCAqd2NzLCB3Y2hhcl90IHdjKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRSk7CisjIGVuZGlmCisgIC8qIE9uIHNvbWUgc3lzdGVtcywgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGFuIG92ZXJsb2FkZWQgZnVuY3Rpb246CisgICAgICAgZXh0ZXJuICJDKysiIHsKKyAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiBzdGQ6Ondjc2NociAoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90KTsKKyAgICAgICAgIHdjaGFyX3QgKiBzdGQ6Ondjc2NociAod2NoYXJfdCAqLCB3Y2hhcl90KTsKKyAgICAgICB9ICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUMiAod2NzY2hyLAorICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqLCAoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiwgKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCkpOworIyBpZiAoKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxMCkgJiYgIWRlZmluZWQgX19VQ0xJQkNfXykgXAorICAgICAmJiAoX19HTlVDX18gPiA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDQpKQorX0dMX0NYWEFMSUFTV0FSTjEgKHdjc2Nociwgd2NoYXJfdCAqLCAod2NoYXJfdCAqd2NzLCB3Y2hhcl90IHdjKSk7CitfR0xfQ1hYQUxJQVNXQVJOMSAod2NzY2hyLCBjb25zdCB3Y2hhcl90ICosIChjb25zdCB3Y2hhcl90ICp3Y3MsIHdjaGFyX3Qgd2MpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTV0FSTiAod2NzY2hyKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2NzY2hyCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NTQ0hSCitfR0xfV0FSTl9PTl9VU0UgKHdjc2NociwgIndjc2NociBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NzY2hyIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogRmluZCB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIFdDIGluIFdDUy4gICovCisjaWYgMAorIyBpZiAhMQorX0dMX0ZVTkNERUNMX1NZUyAod2NzcmNociwgd2NoYXJfdCAqLCAoY29uc3Qgd2NoYXJfdCAqd2NzLCB3Y2hhcl90IHdjKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUpOworIyBlbmRpZgorICAvKiBPbiBzb21lIHN5c3RlbXMsIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhbiBvdmVybG9hZGVkIGZ1bmN0aW9uOgorICAgICAgIGV4dGVybiAiQysrIiB7CisgICAgICAgICBjb25zdCB3Y2hhcl90ICogc3RkOjp3Y3NyY2hyIChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QpOworICAgICAgICAgd2NoYXJfdCAqIHN0ZDo6d2NzcmNociAod2NoYXJfdCAqLCB3Y2hhcl90KTsKKyAgICAgICB9ICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUMiAod2NzcmNociwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKiwgKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCksCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICosIChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QpKTsKKyMgaWYgKChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMTApICYmICFkZWZpbmVkIF9fVUNMSUJDX18pIFwKKyAgICAgJiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0KSkKK19HTF9DWFhBTElBU1dBUk4xICh3Y3NyY2hyLCB3Y2hhcl90ICosICh3Y2hhcl90ICp3Y3MsIHdjaGFyX3Qgd2MpKTsKK19HTF9DWFhBTElBU1dBUk4xICh3Y3NyY2hyLCBjb25zdCB3Y2hhcl90ICosIChjb25zdCB3Y2hhcl90ICp3Y3MsIHdjaGFyX3Qgd2MpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTV0FSTiAod2NzcmNocik7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc3JjaHIKKyMgaWYgSEFWRV9SQVdfREVDTF9XQ1NSQ0hSCitfR0xfV0FSTl9PTl9VU0UgKHdjc3JjaHIsICJ3Y3NyY2hyIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSB3Y3NyY2hyIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGluaXRpYWwgc2VnbWV0IG9mIFdDUyB3aGljaCBjb25zaXN0cyBlbnRpcmVseQorICAgb2Ygd2lkZSBjaGFyYWN0ZXJzIG5vdCBpbiBSRUpFQ1QuICAqLworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHdjc2NzcG4sIHNpemVfdCwgKGNvbnN0IHdjaGFyX3QgKndjcywgY29uc3Qgd2NoYXJfdCAqcmVqZWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAod2NzY3Nwbiwgc2l6ZV90LCAoY29uc3Qgd2NoYXJfdCAqd2NzLCBjb25zdCB3Y2hhcl90ICpyZWplY3QpKTsKK19HTF9DWFhBTElBU1dBUk4gKHdjc2NzcG4pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3Njc3BuCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NTQ1NQTgorX0dMX1dBUk5fT05fVVNFICh3Y3Njc3BuLCAid2NzY3NwbiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NzY3NwbiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbml0aWFsIHNlZ21ldCBvZiBXQ1Mgd2hpY2ggY29uc2lzdHMgZW50aXJlbHkKKyAgIG9mIHdpZGUgY2hhcmFjdGVycyBpbiBBQ0NFUFQuICAqLworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHdjc3Nwbiwgc2l6ZV90LCAoY29uc3Qgd2NoYXJfdCAqd2NzLCBjb25zdCB3Y2hhcl90ICphY2NlcHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjc3Nwbiwgc2l6ZV90LCAoY29uc3Qgd2NoYXJfdCAqd2NzLCBjb25zdCB3Y2hhcl90ICphY2NlcHQpKTsKK19HTF9DWFhBTElBU1dBUk4gKHdjc3Nwbik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc3NwbgorIyBpZiBIQVZFX1JBV19ERUNMX1dDU1NQTgorX0dMX1dBUk5fT05fVVNFICh3Y3NzcG4sICJ3Y3NzcG4gaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdjc3NwbiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2UgaW4gV0NTIG9mIGFueSBjaGFyYWN0ZXIgaW4gQUNDRVBULiAgKi8KKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3NwYnJrLCB3Y2hhcl90ICosCisgICAgICAgICAgICAgICAgICAoY29uc3Qgd2NoYXJfdCAqd2NzLCBjb25zdCB3Y2hhcl90ICphY2NlcHQpCisgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUpOworIyBlbmRpZgorICAvKiBPbiBzb21lIHN5c3RlbXMsIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhbiBvdmVybG9hZGVkIGZ1bmN0aW9uOgorICAgICAgIGV4dGVybiAiQysrIiB7CisgICAgICAgICBjb25zdCB3Y2hhcl90ICogc3RkOjp3Y3NwYnJrIChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CisgICAgICAgICB3Y2hhcl90ICogc3RkOjp3Y3NwYnJrICh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CisgICAgICAgfSAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVDIgKHdjc3BicmssCisgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICosIChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiksCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICosIChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKikpOworIyBpZiAoKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxMCkgJiYgIWRlZmluZWQgX19VQ0xJQkNfXykgXAorICAgICAmJiAoX19HTlVDX18gPiA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDQpKQorX0dMX0NYWEFMSUFTV0FSTjEgKHdjc3BicmssIHdjaGFyX3QgKiwKKyAgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqd2NzLCBjb25zdCB3Y2hhcl90ICphY2NlcHQpKTsKK19HTF9DWFhBTElBU1dBUk4xICh3Y3NwYnJrLCBjb25zdCB3Y2hhcl90ICosCisgICAgICAgICAgICAgICAgICAgKGNvbnN0IHdjaGFyX3QgKndjcywgY29uc3Qgd2NoYXJfdCAqYWNjZXB0KSk7CisjIGVsc2UKK19HTF9DWFhBTElBU1dBUk4gKHdjc3BicmspOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3NwYnJrCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NTUEJSSworX0dMX1dBUk5fT05fVVNFICh3Y3NwYnJrLCAid2NzcGJyayBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2NzcGJyayBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgTkVFRExFIGluIEhBWVNUQUNLLiAgKi8KKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3NzdHIsIHdjaGFyX3QgKiwKKyAgICAgICAgICAgICAgICAgIChjb25zdCB3Y2hhcl90ICpoYXlzdGFjaywgY29uc3Qgd2NoYXJfdCAqbmVlZGxlKQorICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFKTsKKyMgZW5kaWYKKyAgLyogT24gc29tZSBzeXN0ZW1zLCB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYW4gb3ZlcmxvYWRlZCBmdW5jdGlvbjoKKyAgICAgICBleHRlcm4gIkMrKyIgeworICAgICAgICAgY29uc3Qgd2NoYXJfdCAqIHN0ZDo6d2Nzc3RyIChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CisgICAgICAgICB3Y2hhcl90ICogc3RkOjp3Y3NzdHIgKHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKKyAgICAgICB9ICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUMiAod2Nzc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqLCAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqLCAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopKTsKKyMgaWYgKChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMTApICYmICFkZWZpbmVkIF9fVUNMSUJDX18pIFwKKyAgICAgJiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0KSkKK19HTF9DWFhBTElBU1dBUk4xICh3Y3NzdHIsIHdjaGFyX3QgKiwKKyAgICAgICAgICAgICAgICAgICAod2NoYXJfdCAqaGF5c3RhY2ssIGNvbnN0IHdjaGFyX3QgKm5lZWRsZSkpOworX0dMX0NYWEFMSUFTV0FSTjEgKHdjc3N0ciwgY29uc3Qgd2NoYXJfdCAqLAorICAgICAgICAgICAgICAgICAgIChjb25zdCB3Y2hhcl90ICpoYXlzdGFjaywgY29uc3Qgd2NoYXJfdCAqbmVlZGxlKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU1dBUk4gKHdjc3N0cik7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc3N0cgorIyBpZiBIQVZFX1JBV19ERUNMX1dDU1NUUgorX0dMX1dBUk5fT05fVVNFICh3Y3NzdHIsICJ3Y3NzdHIgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdjc3N0ciBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIERpdmlkZSBXQ1MgaW50byB0b2tlbnMgc2VwYXJhdGVkIGJ5IGNoYXJhY3RlcnMgaW4gREVMSU0uICAqLworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHdjc3Rvaywgd2NoYXJfdCAqLAorICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKndjcywgY29uc3Qgd2NoYXJfdCAqZGVsaW0sIHdjaGFyX3QgKipwdHIpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjc3Rvaywgd2NoYXJfdCAqLAorICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKndjcywgY29uc3Qgd2NoYXJfdCAqZGVsaW0sIHdjaGFyX3QgKipwdHIpKTsKK19HTF9DWFhBTElBU1dBUk4gKHdjc3Rvayk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHdjc3RvaworIyBpZiBIQVZFX1JBV19ERUNMX1dDU1RPSworX0dMX1dBUk5fT05fVVNFICh3Y3N0b2ssICJ3Y3N0b2sgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdjc3RvayBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIERldGVybWluZSBudW1iZXIgb2YgY29sdW1uIHBvc2l0aW9ucyByZXF1aXJlZCBmb3IgZmlyc3QgTiB3aWRlCisgICBjaGFyYWN0ZXJzIChvciBmZXdlciBpZiBTIGVuZHMgYmVmb3JlIHRoaXMpIGluIFMuICAqLworI2lmIDAKKyMgaWYgMAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiB3Y3N3aWR0aAorIyAgIGRlZmluZSB3Y3N3aWR0aCBycGxfd2Nzd2lkdGgKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMICh3Y3N3aWR0aCwgaW50LCAoY29uc3Qgd2NoYXJfdCAqcywgc2l6ZV90IG4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUpOworX0dMX0NYWEFMSUFTX1JQTCAod2Nzd2lkdGgsIGludCwgKGNvbnN0IHdjaGFyX3QgKnMsIHNpemVfdCBuKSk7CisjIGVsc2UKKyMgIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh3Y3N3aWR0aCwgaW50LCAoY29uc3Qgd2NoYXJfdCAqcywgc2l6ZV90IG4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjc3dpZHRoLCBpbnQsIChjb25zdCB3Y2hhcl90ICpzLCBzaXplX3QgbikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAod2Nzd2lkdGgpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3N3aWR0aAorIyBpZiBIQVZFX1JBV19ERUNMX1dDU1dJRFRICitfR0xfV0FSTl9PTl9VU0UgKHdjc3dpZHRoLCAid2Nzd2lkdGggaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHdjc3dpZHRoIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2VuZGlmIC8qIF9HTF9XQ0hBUl9IICovCisjZW5kaWYgLyogX0dMX1dDSEFSX0ggKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGludXgtbGliL3djdHlwZS5oIGIvbGludXgtbGliL3djdHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NmU0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9saW51eC1saWIvd2N0eXBlLmgKQEAgLTAsMCArMSw4MDYgQEAKKy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8KKy8qIEEgc3Vic3RpdHV0ZSBmb3IgSVNPIEM5OSA8d2N0eXBlLmg+LCBmb3IgcGxhdGZvcm1zIHRoYXQgbGFjayBpdC4KKworICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogV3JpdHRlbiBieSBCcnVubyBIYWlibGUgYW5kIFBhdWwgRWdnZXJ0LiAgKi8KKworLyoKKyAqIElTTyBDIDk5IDx3Y3R5cGUuaD4gZm9yIHBsYXRmb3JtcyB0aGF0IGxhY2sgaXQuCisgKiA8aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3N1c3YzeGJkL3djdHlwZS5oLmh0bWw+CisgKgorICogaXN3Y3R5cGUsIHRvd2N0cmFucywgdG93bG93ZXIsIHRvd3VwcGVyLCB3Y3RyYW5zLCB3Y3R5cGUsCisgKiB3Y3RyYW5zX3QsIGFuZCB3Y3R5cGVfdCBhcmUgbm90IHlldCBpbXBsZW1lbnRlZC4KKyAqLworCisjaWZuZGVmIF9HTF9XQ1RZUEVfSAorCisjaWYgX19HTlVDX18gPj0gMworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorI2VuZGlmCisKKworI2lmIDEKKy8qIFNvbGFyaXMgMi41IGhhcyBhIGJ1ZzogPHdjaGFyLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlIDx3Y3R5cGUuaD4uCisgICBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlCisgICA8d2NoYXIuaD4uCisgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUKKyAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLworIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyMgaW5jbHVkZSA8dGltZS5oPgorIyBpbmNsdWRlIDx3Y2hhci5oPgorI2VuZGlmCisKKy8qIEluY2x1ZGUgdGhlIG9yaWdpbmFsIDx3Y3R5cGUuaD4gaWYgaXQgZXhpc3RzLgorICAgQmVPUyA1IGhhcyB0aGUgZnVuY3Rpb25zIGJ1dCBubyA8d2N0eXBlLmg+LiAgKi8KKy8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyNpZiAxCisjIGluY2x1ZGVfbmV4dCA8d2N0eXBlLmg+CisjZW5kaWYKKworI2lmbmRlZiBfR0xfV0NUWVBFX0gKKyNkZWZpbmUgX0dMX1dDVFlQRV9ICisKK19HTF9JTkxJTkVfSEVBREVSX0JFR0lOCisjaWZuZGVmIF9HTF9XQ1RZUEVfSU5MSU5FCisjIGRlZmluZSBfR0xfV0NUWVBFX0lOTElORSBfR0xfSU5MSU5FCisjZW5kaWYKKworLyogVGhlIGRlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwgZXRjLiBhcmUgY29waWVkIGhlcmUuICAqLworI2lmbmRlZiBfR0xfQ1hYREVGU19ICisjZGVmaW5lIF9HTF9DWFhERUZTX0gKKworLyogVGhlIHRocmVlIG1vc3QgZnJlcXVlbnQgdXNlIGNhc2VzIG9mIHRoZXNlIG1hY3JvcyBhcmU6CisKKyAgICogRm9yIHByb3ZpZGluZyBhIHN1YnN0aXR1dGUgZm9yIGEgZnVuY3Rpb24gdGhhdCBpcyBtaXNzaW5nIG9uIHNvbWUKKyAgICAgcGxhdGZvcm1zLCBidXQgaXMgZGVjbGFyZWQgYW5kIHdvcmtzIGZpbmUgb24gdGhlIHBsYXRmb3JtcyBvbiB3aGljaAorICAgICBpdCBleGlzdHM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiAhQEhBVkVfRk9PQAorICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKyAgICAgICAjIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorCisgICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBhbGwgcGxhdGZvcm1zLAorICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBwbGF0Zm9ybXM6CisKKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisgICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACisgICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyAgICAgICAjICAgdW5kZWYgZm9vCisgICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOworICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKyAgICAgICAjIGVsc2UKKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisgICAgICAgIyBlbmRpZgorICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICAgICAgIC4uLgorICAgICAgICNlbmRpZgorCisgICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBzb21lIHBsYXRmb3JtcworICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBvZiB0aGVtIGFuZAorICAgICBpcyBhZGRpdGlvbmFsbHkgZWl0aGVyIG1pc3Npbmcgb3IgdW5kZWNsYXJlZCBvbiBzb21lIG90aGVyIHBsYXRmb3JtczoKKworICAgICAgICNpZiBAR05VTElCX0ZPT0AKKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorICAgICAgICMgICB1bmRlZiBmb28KKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisgICAgICAgIyAgZW5kaWYKKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworICAgICAgICMgZWxzZQorICAgICAgICMgIGlmICFASEFWRV9GT09AICAgb3IgICBpZiAhQEhBVkVfREVDTF9GT09ACisgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgIGVuZGlmCisgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworICAgICAgICMgZW5kaWYKKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKyovCisKKy8qIF9HTF9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cworIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybiAiQyIKKyNlbHNlCisjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuCisjZW5kaWYKKworLyogX0dMX0ZVTkNERUNMX1JQTCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisgICBkZWNsYXJlcyBhIHJlcGxhY2VtZW50IGZ1bmN0aW9uLCBuYW1lZCBycGxfZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCisgICBFeGFtcGxlOgorICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyAqLworI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9GVU5DREVDTF9SUExfMSAocnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykKKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1JQTF8xKHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICBfR0xfRVhURVJOX0MgcmV0dHlwZSBycGxfZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisKKy8qIF9HTF9GVU5DREVDTF9TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgZGVjbGFyZXMgdGhlIHN5c3RlbSBmdW5jdGlvbiwgbmFtZWQgZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCisgICBFeGFtcGxlOgorICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyAqLworI2RlZmluZSBfR0xfRlVOQ0RFQ0xfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgIF9HTF9FWFRFUk5fQyByZXR0eXBlIGZ1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworCisvKiBfR0xfQ1hYQUxJQVNfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCisgICB0aGF0IHJlZGlyZWN0cyB0byBycGxfZnVuYywgaWYgR05VTElCX05BTUVTUEFDRSBpcyBkZWZpbmVkLgorICAgRXhhbXBsZToKKyAgICAgX0dMX0NYWEFMSUFTX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CisgKi8KKyNkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpycGxfZnVuYzsgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xIChmdW5jLCBycGxfZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIHJwbF9mdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50CisgICBkZWNsYXJhdGlvbi4gIEEgY2FzdCBpcyB1c2VkIHRvIHNpbGVuY2UgdGhlICJpbnZhbGlkIGNvbnZlcnNpb24iIGVycm9yCisgICB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6cnBsX2Z1bmMpOyAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKyAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCisgICB0aGF0IHJlZGlyZWN0cyB0byB0aGUgc3lzdGVtIHByb3ZpZGVkIGZ1bmN0aW9uIGZ1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UKKyAgIGlzIGRlZmluZWQuCisgICBFeGFtcGxlOgorICAgICBfR0xfQ1hYQUxJQVNfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKyAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisgIC8qIElmIHdlIHdlcmUgdG8gd3JpdGUKKyAgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsKKyAgICAgbGlrZSBhYm92ZSBpbiBfR0xfQ1hYQUxJQVNfUlBMXzEsIHRoZSBjb21waWxlciBjb3VsZCBvcHRpbWl6ZSBjYWxscworICAgICBiZXR0ZXIgKHJlbW92ZSBhbiBpbmRpcmVjdGlvbiB0aHJvdWdoIGEgJ3N0YXRpYycgcG9pbnRlciB2YXJpYWJsZSksCisgICAgIGJ1dCB0aGVuIHRoZSBfR0xfQ1hYQUxJQVNXQVJOIG1hY3JvIGJlbG93IHdvdWxkIGNhdXNlIGEgd2FybmluZyBub3Qgb25seQorICAgICBmb3IgdXNlcyBvZiA6OmZ1bmMgYnV0IGFsc28gZm9yIHVzZXMgb2YgR05VTElCX05BTUVTUEFDRTo6ZnVuYy4gICovCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7ICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBmdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGRlY2xhcmF0aW9uLgorICAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IgdGhhdCB3b3VsZAorICAgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICBcCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6ZnVuYyk7IFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZWxzZQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyNlbmRpZgorCisvKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzLCByZXR0eXBlMiwgcGFyYW1ldGVyczIpOworICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBpcyBwaWNrZWQgYW1vbmcgYSBzZXQgb2Ygb3ZlcmxvYWRlZCBmdW5jdGlvbnMsCisgICBuYW1lbHkgdGhlIG9uZSB3aXRoIHJldHR5cGUyIGFuZCBwYXJhbWV0ZXJzMi4gIFR3byBjb25zZWN1dGl2ZSBjYXN0cworICAgYXJlIHVzZWQgdG8gc2lsZW5jZSB0aGUgImNhbm5vdCBmaW5kIGEgbWF0Y2giIGFuZCAiaW52YWxpZCBjb252ZXJzaW9uIgorICAgZXJyb3JzIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorICAvKiBUaGUgb3V0ZXIgY2FzdCBtdXN0IGJlIGEgcmVpbnRlcnByZXRfY2FzdC4KKyAgICAgVGhlIGlubmVyIGNhc3Q6IFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzZXQgb2Ygb3ZlcmxvYWRlZAorICAgICBmdW5jdGlvbnMsIGl0IHdvcmtzIGFzIGEgc3RhdGljX2Nhc3Q8PiwgY2hvb3NpbmcgdGhlIGRlc2lnbmF0ZWQgdmFyaWFudC4KKyAgICAgV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNpbmdsZSB2YXJpYW50LCBpdCB3b3JrcyBhcyBhCisgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Pi4gVGhlIHBhcmVudGhlc2l6ZWQgY2FzdCBzeW50YXggd29ya3MgYm90aCB3YXlzLiAgKi8KKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAocmV0dHlwZTIoKilwYXJhbWV0ZXJzMikoOjpmdW5jKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorI2VuZGlmCisKKy8qIF9HTF9DWFhBTElBU1dBUk4gKGZ1bmMpOworICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gOjpmdW5jIGlzIHVzZWQgYnV0IG5vdCB3aGVuCisgICBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICBmdW5jIG11c3QgYmUgZGVmaW5lZCB3aXRob3V0IG92ZXJsb2FkZWQKKyAgIHZhcmlhbnRzLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOXzEgKGZ1bmMsIEdOVUxJQl9OQU1FU1BBQ0UpCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzEoZnVuYyxuYW1lc3BhY2UpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk5fMiAoZnVuYywgbmFtZXNwYWNlKQorLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKyMgaWYgIV9fT1BUSU1JWkVfXworIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgIF9HTF9XQVJOX09OX1VTRSAoZnVuYywgXAorICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAorICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKyAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworLyogX0dMX0NYWEFMSUFTV0FSTjEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gdGhlIGdpdmVuIG92ZXJsb2FkZWQgdmFyaWFudCBvZiA6OmZ1bmMKKyAgIGlzIHVzZWQgYnV0IG5vdCB3aGVuIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gICovCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisgICBfR0xfQ1hYQUxJQVNXQVJOMV8xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBHTlVMSUJfTkFNRVNQQUNFKQorIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgIF9HTF9DWFhBTElBU1dBUk4xXzIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIG5hbWVzcGFjZSkKKy8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAorICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCisjIGlmICFfX09QVElNSVpFX18KKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworIyBlbHNlCisjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKyAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisjZW5kaWYKKworI2VuZGlmIC8qIF9HTF9DWFhERUZTX0ggKi8KKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFCisKKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCisvKiBBIGNvbXBpbGVyIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDQuMy4wIGFuZCBsYXRlci4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobWVzc2FnZSkpKQorIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24KKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCitfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisjIGVuZGlmCisjZW5kaWYKKworLyogX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuY3Rpb24sIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsICJzdHJpbmciKQorICAgaXMgbGlrZSBfR0xfV0FSTl9PTl9VU0UgKGZ1bmN0aW9uLCAic3RyaW5nIiksIGV4Y2VwdCB0aGF0IHRoZSBmdW5jdGlvbiBpcworICAgZGVjbGFyZWQgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLCBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLAorICAgYW5kIGF0dHJpYnV0ZXMuCisgICBUaGlzIHZhcmlhbnQgaXMgdXNlZnVsIGZvciBvdmVybG9hZGVkIGZ1bmN0aW9ucyBpbiBDKysuIF9HTF9XQVJOX09OX1VTRSBkb2VzCisgICBub3Qgd29yayBpbiB0aGlzIGNhc2UuICAqLworI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0VfQ1hYCisjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyBcCisgICAgIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobXNnKSkpCisjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisvKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBfR0xfV0FSTl9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisjaWZuZGVmIF9HTF9XQVJOX0VYVEVSTl9DCisjIGlmIGRlZmluZWQgX19jcGx1c3BsdXMKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4gIkMiCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4KKyMgZW5kaWYKKyNlbmRpZgorCisvKiBTb2xhcmlzIDIuNiA8d2N0eXBlLmg+IGluY2x1ZGVzIDx3aWRlYy5oPiB3aGljaCBpbmNsdWRlcyA8ZXVjLmg+IHdoaWNoCisgICAjZGVmaW5lcyBhIG51bWJlciBvZiBpZGVudGlmaWVycyBpbiB0aGUgYXBwbGljYXRpb24gbmFtZXNwYWNlLiAgUmV2ZXJ0CisgICB0aGVzZSAjZGVmaW5lcy4gICovCisjaWZkZWYgX19zdW4KKyMgdW5kZWYgbXVsdGlieXRlCisjIHVuZGVmIGV1Y3cxCisjIHVuZGVmIGV1Y3cyCisjIHVuZGVmIGV1Y3czCisjIHVuZGVmIHNjcncxCisjIHVuZGVmIHNjcncyCisjIHVuZGVmIHNjcnczCisjZW5kaWYKKworLyogRGVmaW5lIHdpbnRfdCBhbmQgV0VPRi4gIChBbHNvIGRvbmUgaW4gd2NoYXIuaW4uaC4pICAqLworI2lmICExICYmICFkZWZpbmVkIHdpbnRfdAorIyBkZWZpbmUgd2ludF90IGludAorIyBpZm5kZWYgV0VPRgorIyAgZGVmaW5lIFdFT0YgLTEKKyMgZW5kaWYKKyNlbHNlCisvKiBNU1ZDIGRlZmluZXMgd2ludF90IGFzICd1bnNpZ25lZCBzaG9ydCcgaW4gPGNydGRlZnMuaD4uCisgICBUaGlzIGlzIHRvbyBzbWFsbDogSVNPIEMgOTkgc2VjdGlvbiA3LjI0LjEuKDIpIHNheXMgdGhhdCB3aW50X3QgbXVzdCBiZQorICAgInVuY2hhbmdlZCBieSBkZWZhdWx0IGFyZ3VtZW50IHByb21vdGlvbnMiLiAgT3ZlcnJpZGUgaXQuICAqLworIyBpZiBkZWZpbmVkIF9NU0NfVkVSCisjICBpZiAhR05VTElCX2RlZmluZWRfd2ludF90CisjICAgaW5jbHVkZSA8Y3J0ZGVmcy5oPgordHlwZWRlZiB1bnNpZ25lZCBpbnQgcnBsX3dpbnRfdDsKKyMgICB1bmRlZiB3aW50X3QKKyMgICBkZWZpbmUgd2ludF90IHJwbF93aW50X3QKKyMgICBkZWZpbmUgR05VTElCX2RlZmluZWRfd2ludF90IDEKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmbmRlZiBXRU9GCisjICBkZWZpbmUgV0VPRiAoKHdpbnRfdCkgLTEpCisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgIUdOVUxJQl9kZWZpbmVkX3djdHlwZV9mdW5jdGlvbnMKKworLyogRnJlZUJTRCA0LjQgdG8gNC4xMSBoYXMgPHdjdHlwZS5oPiBidXQgbGFja3MgdGhlIGZ1bmN0aW9ucy4KKyAgIExpbnV4IGxpYmM1IGhhcyA8d2N0eXBlLmg+IGFuZCB0aGUgZnVuY3Rpb25zIGJ1dCB0aGV5IGFyZSBicm9rZW4uCisgICBBc3N1bWUgYWxsIDExIGZ1bmN0aW9ucyAoYWxsIGlzdyogZXhjZXB0IGlzd2JsYW5rKSBhcmUgaW1wbGVtZW50ZWQgdGhlCisgICBzYW1lIHdheSwgb3Igbm90IGF0IGFsbC4gICovCisjIGlmICEgMSB8fCAwCisKKy8qIElSSVggNS4zIGhhcyBtYWNyb3MgYnV0IG5vIGZ1bmN0aW9ucywgaXRzIGlzdyogbWFjcm9zIHJlZmVyIHRvIGFuCisgICB1bmRlZmluZWQgdmFyaWFibGUgX2N0bXBfIGFuZCB0byA8Y3R5cGUuaD4gbWFjcm9zIGxpa2UgX1AsIGFuZCB0aGV5CisgICByZWZlciB0byBzeXN0ZW0gZnVuY3Rpb25zIGxpa2UgX2lzd2N0eXBlIHRoYXQgYXJlIG5vdCBpbiB0aGUKKyAgIHN0YW5kYXJkIEMgbGlicmFyeS4gIFJhdGhlciB0aGFuIHRyeSB0byBnZXQgYW5jaWVudCBidWdneQorICAgaW1wbGVtZW50YXRpb25zIGxpa2UgdGhpcyB0byB3b3JrLCBqdXN0IGRpc2FibGUgdGhlbS4gICovCisjICB1bmRlZiBpc3dhbG51bQorIyAgdW5kZWYgaXN3YWxwaGEKKyMgIHVuZGVmIGlzd2JsYW5rCisjICB1bmRlZiBpc3djbnRybAorIyAgdW5kZWYgaXN3ZGlnaXQKKyMgIHVuZGVmIGlzd2dyYXBoCisjICB1bmRlZiBpc3dsb3dlcgorIyAgdW5kZWYgaXN3cHJpbnQKKyMgIHVuZGVmIGlzd3B1bmN0CisjICB1bmRlZiBpc3dzcGFjZQorIyAgdW5kZWYgaXN3dXBwZXIKKyMgIHVuZGVmIGlzd3hkaWdpdAorIyAgdW5kZWYgdG93bG93ZXIKKyMgIHVuZGVmIHRvd3VwcGVyCisKKy8qIExpbnV4IGxpYmM1IGhhcyA8d2N0eXBlLmg+IGFuZCB0aGUgZnVuY3Rpb25zIGJ1dCB0aGV5IGFyZSBicm9rZW4uICAqLworIyAgaWYgMAorIyAgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgIGRlZmluZSBpc3dhbG51bSBycGxfaXN3YWxudW0KKyMgICAgZGVmaW5lIGlzd2FscGhhIHJwbF9pc3dhbHBoYQorIyAgICBkZWZpbmUgaXN3YmxhbmsgcnBsX2lzd2JsYW5rCisjICAgIGRlZmluZSBpc3djbnRybCBycGxfaXN3Y250cmwKKyMgICAgZGVmaW5lIGlzd2RpZ2l0IHJwbF9pc3dkaWdpdAorIyAgICBkZWZpbmUgaXN3Z3JhcGggcnBsX2lzd2dyYXBoCisjICAgIGRlZmluZSBpc3dsb3dlciBycGxfaXN3bG93ZXIKKyMgICAgZGVmaW5lIGlzd3ByaW50IHJwbF9pc3dwcmludAorIyAgICBkZWZpbmUgaXN3cHVuY3QgcnBsX2lzd3B1bmN0CisjICAgIGRlZmluZSBpc3dzcGFjZSBycGxfaXN3c3BhY2UKKyMgICAgZGVmaW5lIGlzd3VwcGVyIHJwbF9pc3d1cHBlcgorIyAgICBkZWZpbmUgaXN3eGRpZ2l0IHJwbF9pc3d4ZGlnaXQKKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmIDAKKyMgICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgICBkZWZpbmUgdG93bG93ZXIgcnBsX3Rvd2xvd2VyCisjICAgIGRlZmluZSB0b3d1cHBlciBycGxfdG93dXBwZXIKKyMgICBlbmRpZgorIyAgZW5kaWYKKworX0dMX1dDVFlQRV9JTkxJTkUgaW50CisjICBpZiAwCitycGxfaXN3YWxudW0KKyMgIGVsc2UKK2lzd2FsbnVtCisjICBlbmRpZgorICAgICAgICAgKHdpbnRfdCB3YykKK3sKKyAgcmV0dXJuICgod2MgPj0gJzAnICYmIHdjIDw9ICc5JykKKyAgICAgICAgICB8fCAoKHdjICYgfjB4MjApID49ICdBJyAmJiAod2MgJiB+MHgyMCkgPD0gJ1onKSk7Cit9CisKK19HTF9XQ1RZUEVfSU5MSU5FIGludAorIyAgaWYgMAorcnBsX2lzd2FscGhhCisjICBlbHNlCitpc3dhbHBoYQorIyAgZW5kaWYKKyAgICAgICAgICh3aW50X3Qgd2MpCit7CisgIHJldHVybiAod2MgJiB+MHgyMCkgPj0gJ0EnICYmICh3YyAmIH4weDIwKSA8PSAnWic7Cit9CisKK19HTF9XQ1RZUEVfSU5MSU5FIGludAorIyAgaWYgMAorcnBsX2lzd2JsYW5rCisjICBlbHNlCitpc3dibGFuaworIyAgZW5kaWYKKyAgICAgICAgICh3aW50X3Qgd2MpCit7CisgIHJldHVybiB3YyA9PSAnICcgfHwgd2MgPT0gJ1x0JzsKK30KKworX0dMX1dDVFlQRV9JTkxJTkUgaW50CisjICBpZiAwCitycGxfaXN3Y250cmwKKyMgIGVsc2UKK2lzd2NudHJsCisjICBlbmRpZgorICAgICAgICAod2ludF90IHdjKQoreworICByZXR1cm4gKHdjICYgfjB4MWYpID09IDAgfHwgd2MgPT0gMHg3ZjsKK30KKworX0dMX1dDVFlQRV9JTkxJTkUgaW50CisjICBpZiAwCitycGxfaXN3ZGlnaXQKKyMgIGVsc2UKK2lzd2RpZ2l0CisjICBlbmRpZgorICAgICAgICAgKHdpbnRfdCB3YykKK3sKKyAgcmV0dXJuIHdjID49ICcwJyAmJiB3YyA8PSAnOSc7Cit9CisKK19HTF9XQ1RZUEVfSU5MSU5FIGludAorIyAgaWYgMAorcnBsX2lzd2dyYXBoCisjICBlbHNlCitpc3dncmFwaAorIyAgZW5kaWYKKyAgICAgICAgICh3aW50X3Qgd2MpCit7CisgIHJldHVybiB3YyA+PSAnIScgJiYgd2MgPD0gJ34nOworfQorCitfR0xfV0NUWVBFX0lOTElORSBpbnQKKyMgIGlmIDAKK3JwbF9pc3dsb3dlcgorIyAgZWxzZQoraXN3bG93ZXIKKyMgIGVuZGlmCisgICAgICAgICAod2ludF90IHdjKQoreworICByZXR1cm4gd2MgPj0gJ2EnICYmIHdjIDw9ICd6JzsKK30KKworX0dMX1dDVFlQRV9JTkxJTkUgaW50CisjICBpZiAwCitycGxfaXN3cHJpbnQKKyMgIGVsc2UKK2lzd3ByaW50CisjICBlbmRpZgorICAgICAgICAgKHdpbnRfdCB3YykKK3sKKyAgcmV0dXJuIHdjID49ICcgJyAmJiB3YyA8PSAnfic7Cit9CisKK19HTF9XQ1RZUEVfSU5MSU5FIGludAorIyAgaWYgMAorcnBsX2lzd3B1bmN0CisjICBlbHNlCitpc3dwdW5jdAorIyAgZW5kaWYKKyAgICAgICAgICh3aW50X3Qgd2MpCit7CisgIHJldHVybiAod2MgPj0gJyEnICYmIHdjIDw9ICd+JworICAgICAgICAgICYmICEoKHdjID49ICcwJyAmJiB3YyA8PSAnOScpCisgICAgICAgICAgICAgICB8fCAoKHdjICYgfjB4MjApID49ICdBJyAmJiAod2MgJiB+MHgyMCkgPD0gJ1onKSkpOworfQorCitfR0xfV0NUWVBFX0lOTElORSBpbnQKKyMgIGlmIDAKK3JwbF9pc3dzcGFjZQorIyAgZWxzZQoraXN3c3BhY2UKKyMgIGVuZGlmCisgICAgICAgICAod2ludF90IHdjKQoreworICByZXR1cm4gKHdjID09ICcgJyB8fCB3YyA9PSAnXHQnCisgICAgICAgICAgfHwgd2MgPT0gJ1xuJyB8fCB3YyA9PSAnXHYnIHx8IHdjID09ICdcZicgfHwgd2MgPT0gJ1xyJyk7Cit9CisKK19HTF9XQ1RZUEVfSU5MSU5FIGludAorIyAgaWYgMAorcnBsX2lzd3VwcGVyCisjICBlbHNlCitpc3d1cHBlcgorIyAgZW5kaWYKKyAgICAgICAgICh3aW50X3Qgd2MpCit7CisgIHJldHVybiB3YyA+PSAnQScgJiYgd2MgPD0gJ1onOworfQorCitfR0xfV0NUWVBFX0lOTElORSBpbnQKKyMgIGlmIDAKK3JwbF9pc3d4ZGlnaXQKKyMgIGVsc2UKK2lzd3hkaWdpdAorIyAgZW5kaWYKKyAgICAgICAgICAod2ludF90IHdjKQoreworICByZXR1cm4gKCh3YyA+PSAnMCcgJiYgd2MgPD0gJzknKQorICAgICAgICAgIHx8ICgod2MgJiB+MHgyMCkgPj0gJ0EnICYmICh3YyAmIH4weDIwKSA8PSAnRicpKTsKK30KKworX0dMX1dDVFlQRV9JTkxJTkUgd2ludF90CisjICBpZiAwCitycGxfdG93bG93ZXIKKyMgIGVsc2UKK3Rvd2xvd2VyCisjICBlbmRpZgorICAgICAgICAgKHdpbnRfdCB3YykKK3sKKyAgcmV0dXJuICh3YyA+PSAnQScgJiYgd2MgPD0gJ1onID8gd2MgLSAnQScgKyAnYScgOiB3Yyk7Cit9CisKK19HTF9XQ1RZUEVfSU5MSU5FIHdpbnRfdAorIyAgaWYgMAorcnBsX3Rvd3VwcGVyCisjICBlbHNlCit0b3d1cHBlcgorIyAgZW5kaWYKKyAgICAgICAgICh3aW50X3Qgd2MpCit7CisgIHJldHVybiAod2MgPj0gJ2EnICYmIHdjIDw9ICd6JyA/IHdjIC0gJ2EnICsgJ0EnIDogd2MpOworfQorCisjIGVsaWYgMSAmJiAoISAxIHx8IDApCisvKiBPbmx5IHRoZSBpc3dibGFuayBmdW5jdGlvbiBpcyBtaXNzaW5nLiAgKi8KKworIyAgaWYgMAorIyAgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgIGRlZmluZSBpc3dibGFuayBycGxfaXN3YmxhbmsKKyMgICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoaXN3YmxhbmssIGludCwgKHdpbnRfdCB3YykpOworIyAgZWxzZQorX0dMX0ZVTkNERUNMX1NZUyAoaXN3YmxhbmssIGludCwgKHdpbnRfdCB3YykpOworIyAgZW5kaWYKKworIyBlbmRpZgorCisjIGlmIGRlZmluZWQgX19NSU5HVzMyX18KKworLyogT24gbmF0aXZlIFdpbmRvd3MsIHdjaGFyX3QgaXMgdWludDE2X3QsIGFuZCB3aW50X3QgaXMgdWludDMyX3QuCisgICBUaGUgZnVuY3Rpb25zIHRvd2xvd2VyIGFuZCB0b3d1cHBlciBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlIE1TVkNSVCBsaWJyYXJ5CisgICB0byB0YWtlIGEgd2NoYXJfdCBhcmd1bWVudCBhbmQgcmV0dXJuIGEgd2NoYXJfdCByZXN1bHQuICBtaW5ndyBkZWNsYXJlcworICAgdGhlc2UgZnVuY3Rpb25zIHRvIHRha2UgYSB3aW50X3QgYXJndW1lbnQgYW5kIHJldHVybiBhIHdpbnRfdCByZXN1bHQuCisgICBUaGlzIG1lYW5zIHRoYXQ6CisgICAxLiBXaGVuIHRoZSB1c2VyIHBhc3NlcyBhbiBhcmd1bWVudCBvdXRzaWRlIHRoZSByYW5nZSAweDAwMDAuLjB4RkZGRiwgdGhlCisgICAgICBmdW5jdGlvbiB3aWxsIGxvb2sgb25seSBhdCB0aGUgbG93ZXIgMTYgYml0cy4gIFRoaXMgaXMgYWxsb3dlZCBhY2NvcmRpbmcKKyAgICAgIHRvIFBPU0lYLgorICAgMi4gVGhlIHJldHVybiB2YWx1ZSBpcyByZXR1cm5lZCBpbiB0aGUgbG93ZXIgMTYgYml0cyBvZiB0aGUgcmVzdWx0IHJlZ2lzdGVyLgorICAgICAgVGhlIHVwcGVyIDE2IGJpdHMgYXJlIHJhbmRvbTogd2hhdGV2ZXIgaGFwcGVuZWQgdG8gYmUgaW4gdGhhdCBwYXJ0IG9mIHRoZQorICAgICAgcmVzdWx0IHJlZ2lzdGVyLiAgV2UgbmVlZCB0byBmaXggdGhpcyBieSBhZGRpbmcgYSB6ZXJvLWV4dGVuZCBmcm9tCisgICAgICB3Y2hhcl90IHRvIHdpbnRfdCBhZnRlciB0aGUgY2FsbC4gICovCisKK19HTF9XQ1RZUEVfSU5MSU5FIHdpbnRfdAorcnBsX3Rvd2xvd2VyICh3aW50X3Qgd2MpCit7CisgIHJldHVybiAod2ludF90KSAod2NoYXJfdCkgdG93bG93ZXIgKHdjKTsKK30KKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIHRvd2xvd2VyIHJwbF90b3dsb3dlcgorIyAgZW5kaWYKKworX0dMX1dDVFlQRV9JTkxJTkUgd2ludF90CitycGxfdG93dXBwZXIgKHdpbnRfdCB3YykKK3sKKyAgcmV0dXJuICh3aW50X3QpICh3Y2hhcl90KSB0b3d1cHBlciAod2MpOworfQorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgdG93dXBwZXIgcnBsX3Rvd3VwcGVyCisjICBlbmRpZgorCisjIGVuZGlmIC8qIF9fTUlOR1czMl9fICovCisKKyMgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX3djdHlwZV9mdW5jdGlvbnMgMQorI2VuZGlmCisKKyNpZiAwCitfR0xfQ1hYQUxJQVNfUlBMIChpc3dhbG51bSwgaW50LCAod2ludF90IHdjKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChpc3dhbHBoYSwgaW50LCAod2ludF90IHdjKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChpc3djbnRybCwgaW50LCAod2ludF90IHdjKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChpc3dkaWdpdCwgaW50LCAod2ludF90IHdjKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChpc3dncmFwaCwgaW50LCAod2ludF90IHdjKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChpc3dsb3dlciwgaW50LCAod2ludF90IHdjKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChpc3dwcmludCwgaW50LCAod2ludF90IHdjKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChpc3dwdW5jdCwgaW50LCAod2ludF90IHdjKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChpc3dzcGFjZSwgaW50LCAod2ludF90IHdjKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChpc3d1cHBlciwgaW50LCAod2ludF90IHdjKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChpc3d4ZGlnaXQsIGludCwgKHdpbnRfdCB3YykpOworI2Vsc2UKK19HTF9DWFhBTElBU19TWVMgKGlzd2FsbnVtLCBpbnQsICh3aW50X3Qgd2MpKTsKK19HTF9DWFhBTElBU19TWVMgKGlzd2FscGhhLCBpbnQsICh3aW50X3Qgd2MpKTsKK19HTF9DWFhBTElBU19TWVMgKGlzd2NudHJsLCBpbnQsICh3aW50X3Qgd2MpKTsKK19HTF9DWFhBTElBU19TWVMgKGlzd2RpZ2l0LCBpbnQsICh3aW50X3Qgd2MpKTsKK19HTF9DWFhBTElBU19TWVMgKGlzd2dyYXBoLCBpbnQsICh3aW50X3Qgd2MpKTsKK19HTF9DWFhBTElBU19TWVMgKGlzd2xvd2VyLCBpbnQsICh3aW50X3Qgd2MpKTsKK19HTF9DWFhBTElBU19TWVMgKGlzd3ByaW50LCBpbnQsICh3aW50X3Qgd2MpKTsKK19HTF9DWFhBTElBU19TWVMgKGlzd3B1bmN0LCBpbnQsICh3aW50X3Qgd2MpKTsKK19HTF9DWFhBTElBU19TWVMgKGlzd3NwYWNlLCBpbnQsICh3aW50X3Qgd2MpKTsKK19HTF9DWFhBTElBU19TWVMgKGlzd3VwcGVyLCBpbnQsICh3aW50X3Qgd2MpKTsKK19HTF9DWFhBTElBU19TWVMgKGlzd3hkaWdpdCwgaW50LCAod2ludF90IHdjKSk7CisjZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGlzd2FsbnVtKTsKK19HTF9DWFhBTElBU1dBUk4gKGlzd2FscGhhKTsKK19HTF9DWFhBTElBU1dBUk4gKGlzd2NudHJsKTsKK19HTF9DWFhBTElBU1dBUk4gKGlzd2RpZ2l0KTsKK19HTF9DWFhBTElBU1dBUk4gKGlzd2dyYXBoKTsKK19HTF9DWFhBTElBU1dBUk4gKGlzd2xvd2VyKTsKK19HTF9DWFhBTElBU1dBUk4gKGlzd3ByaW50KTsKK19HTF9DWFhBTElBU1dBUk4gKGlzd3B1bmN0KTsKK19HTF9DWFhBTElBU1dBUk4gKGlzd3NwYWNlKTsKK19HTF9DWFhBTElBU1dBUk4gKGlzd3VwcGVyKTsKK19HTF9DWFhBTElBU1dBUk4gKGlzd3hkaWdpdCk7CisKKyNpZiAxCisjIGlmIDAgfHwgMAorX0dMX0NYWEFMSUFTX1JQTCAoaXN3YmxhbmssIGludCwgKHdpbnRfdCB3YykpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChpc3dibGFuaywgaW50LCAod2ludF90IHdjKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChpc3dibGFuayk7CisjZW5kaWYKKworI2lmICExCisjIGlmICFHTlVMSUJfZGVmaW5lZF93Y3R5cGVfdAordHlwZWRlZiB2b2lkICogd2N0eXBlX3Q7CisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfd2N0eXBlX3QgMQorIyBlbmRpZgorI2VuZGlmCisKKy8qIEdldCBhIGRlc2NyaXB0b3IgZm9yIGEgd2lkZSBjaGFyYWN0ZXIgcHJvcGVydHkuICAqLworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHdjdHlwZSwgd2N0eXBlX3QsIChjb25zdCBjaGFyICpuYW1lKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTICh3Y3R5cGUsIHdjdHlwZV90LCAoY29uc3QgY2hhciAqbmFtZSkpOworX0dMX0NYWEFMSUFTV0FSTiAod2N0eXBlKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgd2N0eXBlCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NUWVBFCitfR0xfV0FSTl9PTl9VU0UgKHdjdHlwZSwgIndjdHlwZSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2N0eXBlIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIFRlc3Qgd2hldGhlciBhIHdpZGUgY2hhcmFjdGVyIGhhcyBhIGdpdmVuIHByb3BlcnR5LgorICAgVGhlIGFyZ3VtZW50IFdDIG11c3QgYmUgZWl0aGVyIGEgd2NoYXJfdCB2YWx1ZSBvciBXRU9GLgorICAgVGhlIGFyZ3VtZW50IERFU0MgbXVzdCBoYXZlIGJlZW4gcmV0dXJuZWQgYnkgdGhlIHdjdHlwZSgpIGZ1bmN0aW9uLiAgKi8KKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTIChpc3djdHlwZSwgaW50LCAod2ludF90IHdjLCB3Y3R5cGVfdCBkZXNjKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChpc3djdHlwZSwgaW50LCAod2ludF90IHdjLCB3Y3R5cGVfdCBkZXNjKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChpc3djdHlwZSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGlzd2N0eXBlCisjIGlmIEhBVkVfUkFXX0RFQ0xfSVNXQ1RZUEUKK19HTF9XQVJOX09OX1VTRSAoaXN3Y3R5cGUsICJpc3djdHlwZSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgaXN3Y3R5cGUgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAgfHwgZGVmaW5lZCBfX01JTkdXMzJfXworX0dMX0NYWEFMSUFTX1JQTCAodG93bG93ZXIsIHdpbnRfdCwgKHdpbnRfdCB3YykpOworX0dMX0NYWEFMSUFTX1JQTCAodG93dXBwZXIsIHdpbnRfdCwgKHdpbnRfdCB3YykpOworI2Vsc2UKK19HTF9DWFhBTElBU19TWVMgKHRvd2xvd2VyLCB3aW50X3QsICh3aW50X3Qgd2MpKTsKK19HTF9DWFhBTElBU19TWVMgKHRvd3VwcGVyLCB3aW50X3QsICh3aW50X3Qgd2MpKTsKKyNlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAodG93bG93ZXIpOworX0dMX0NYWEFMSUFTV0FSTiAodG93dXBwZXIpOworCisjaWYgITEKKyMgaWYgIUdOVUxJQl9kZWZpbmVkX3djdHJhbnNfdAordHlwZWRlZiB2b2lkICogd2N0cmFuc190OworIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX3djdHJhbnNfdCAxCisjIGVuZGlmCisjZW5kaWYKKworLyogR2V0IGEgZGVzY3JpcHRvciBmb3IgYSB3aWRlIGNoYXJhY3RlciBjYXNlIGNvbnZlcnNpb24uICAqLworI2lmIDAKKyMgaWYgITEKK19HTF9GVU5DREVDTF9TWVMgKHdjdHJhbnMsIHdjdHJhbnNfdCwgKGNvbnN0IGNoYXIgKm5hbWUpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHdjdHJhbnMsIHdjdHJhbnNfdCwgKGNvbnN0IGNoYXIgKm5hbWUpKTsKK19HTF9DWFhBTElBU1dBUk4gKHdjdHJhbnMpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiB3Y3RyYW5zCisjIGlmIEhBVkVfUkFXX0RFQ0xfV0NUUkFOUworX0dMX1dBUk5fT05fVVNFICh3Y3RyYW5zLCAid2N0cmFucyBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgd2N0cmFucyBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBQZXJmb3JtIGEgZ2l2ZW4gY2FzZSBjb252ZXJzaW9uIG9uIGEgd2lkZSBjaGFyYWN0ZXIuCisgICBUaGUgYXJndW1lbnQgV0MgbXVzdCBiZSBlaXRoZXIgYSB3Y2hhcl90IHZhbHVlIG9yIFdFT0YuCisgICBUaGUgYXJndW1lbnQgREVTQyBtdXN0IGhhdmUgYmVlbiByZXR1cm5lZCBieSB0aGUgd2N0cmFucygpIGZ1bmN0aW9uLiAgKi8KKyNpZiAwCisjIGlmICExCitfR0xfRlVOQ0RFQ0xfU1lTICh0b3djdHJhbnMsIHdpbnRfdCwgKHdpbnRfdCB3Yywgd2N0cmFuc190IGRlc2MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHRvd2N0cmFucywgd2ludF90LCAod2ludF90IHdjLCB3Y3RyYW5zX3QgZGVzYykpOworX0dMX0NYWEFMSUFTV0FSTiAodG93Y3RyYW5zKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgdG93Y3RyYW5zCisjIGlmIEhBVkVfUkFXX0RFQ0xfVE9XQ1RSQU5TCitfR0xfV0FSTl9PTl9VU0UgKHRvd2N0cmFucywgInRvd2N0cmFucyBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgdG93Y3RyYW5zIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKK19HTF9JTkxJTkVfSEVBREVSX0VORAorCisjZW5kaWYgLyogX0dMX1dDVFlQRV9IICovCisjZW5kaWYgLyogX0dMX1dDVFlQRV9IICovCmRpZmYgLS1naXQgYS9tNC8wMGdudWxpYi5tNCBiL200LzAwZ251bGliLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NzhjYjgKLS0tIC9kZXYvbnVsbAorKysgYi9tNC8wMGdudWxpYi5tNApAQCAtMCwwICsxLDMwIEBACisjIDAwZ251bGliLm00IHNlcmlhbCAyCitkbmwgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIFRoaXMgZmlsZSBtdXN0IGJlIG5hbWVkIHNvbWV0aGluZyB0aGF0IHNvcnRzIGJlZm9yZSBhbGwgb3RoZXIKK2RubCBnbnVsaWItcHJvdmlkZWQgLm00IGZpbGVzLiAgSXQgaXMgbmVlZGVkIHVudGlsIHN1Y2ggdGltZSBhcyB3ZSBjYW4KK2RubCBhc3N1bWUgQXV0b2NvbmYgMi42NCwgd2l0aCBpdHMgaW1wcm92ZWQgQUNfREVGVU5fT05DRSBzZW1hbnRpY3MuCisKKyMgQUNfREVGVU5fT05DRShbTkFNRV0sIFZBTFVFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBOQU1FIHRvIGV4cGFuZCB0byBWQUxVRSBvbiB0aGUgZmlyc3QgdXNlICh3aGV0aGVyIGJ5IGRpcmVjdAorIyBleHBhbnNpb24sIG9yIGJ5IEFDX1JFUVVJUkUpLCBhbmQgdG8gbm90aGluZyBvbiBhbGwgc3Vic2VxdWVudCB1c2VzLgorIyBBdm9pZCBidWdzIGluIEFDX1JFUVVJUkUgaW4gQXV0b2NvbmYgMi42MyBhbmQgZWFybGllci4gIFRoaXMKKyMgZGVmaW5pdGlvbiBpcyBzbG93ZXIgdGhhbiB0aGUgdmVyc2lvbiBpbiBBdXRvY29uZiAyLjY0LCBiZWNhdXNlIGl0CisjIGNhbiBvbmx5IHVzZSBpbnRlcmZhY2VzIHRoYXQgZXhpc3RlZCBzaW5jZSAyLjU5OyBidXQgaXQgYWNoaWV2ZXMgdGhlCisjIHNhbWUgZWZmZWN0LiAgUXVvdGluZyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgY29uZnVzaW5nIEF1dG9tYWtlLgorbTRfdmVyc2lvbl9wcmVyZXEoWzIuNjMuMjYzXSwgW10sCitbbTRfZGVmaW5lKFtBQ11bX0RFRlVOX09OQ0VdLAorICBbQUNdW19ERUZVTihbJDFdLAorICAgIFtBQ19SRVFVSVJFKFtfZ2xfREVGVU5fT05DRShbJDFdKV0sCisgICAgICBbbTRfaW5kaXIoW19nbF9ERUZVTl9PTkNFKFskMV0pXSldKV0pXWRubAorW0FDXVtfREVGVU4oW19nbF9ERUZVTl9PTkNFKFskMV0pXSwgWyQyXSldKV0pCisKKyMgZ2xfMDBHTlVMSUIKKyMgLS0tLS0tLS0tLS0KKyMgV2l0bmVzcyBtYWNybyB0aGF0IHRoaXMgZmlsZSBoYXMgYmVlbiBpbmNsdWRlZC4gIE5lZWRlZCB0byBmb3JjZQorIyBBdXRvbWFrZSB0byBpbmNsdWRlIHRoaXMgZmlsZSBwcmlvciB0byBhbGwgb3RoZXIgZ251bGliIC5tNCBmaWxlcy4KK0FDX0RFRlVOKFtnbF8wMEdOVUxJQl0pCmRpZmYgLS1naXQgYS9tNC9hbGxvY2EubTQgYi9tNC9hbGxvY2EubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU2OTI0YgotLS0gL2Rldi9udWxsCisrKyBiL200L2FsbG9jYS5tNApAQCAtMCwwICsxLDEyMSBAQAorIyBhbGxvY2EubTQgc2VyaWFsIDE0CitkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQsIDIwMDYtMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK2RubCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0ZVTkNfQUxMT0NBXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfRlVOQ19BTExPQ0FdKQorICBpZiB0ZXN0ICRhY19jdl9mdW5jX2FsbG9jYV93b3JrcyA9IG5vOyB0aGVuCisgICAgZ2xfUFJFUkVRX0FMTE9DQQorICBmaQorCisgICMgRGVmaW5lIGFuIGFkZGl0aW9uYWwgdmFyaWFibGUgdXNlZCBpbiB0aGUgTWFrZWZpbGUgc3Vic3RpdHV0aW9uLgorICBpZiB0ZXN0ICRhY19jdl93b3JraW5nX2FsbG9jYV9oID0geWVzOyB0aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBhbGxvY2EgYXMgYSBjb21waWxlciBidWlsdC1pbl0sIFtnbF9jdl9ycGxfYWxsb2NhXSwgWworICAgICAgQUNfRUdSRVBfQ1BQKFtOZWVkIG93biBhbGxvY2FdLCBbCisjaWYgZGVmaW5lZCBfX0dOVUNfXyB8fCBkZWZpbmVkIF9BSVggfHwgZGVmaW5lZCBfTVNDX1ZFUgorICAgICAgICBOZWVkIG93biBhbGxvY2EKKyNlbmRpZgorICAgICAgICBdLCBbZ2xfY3ZfcnBsX2FsbG9jYT15ZXNdLCBbZ2xfY3ZfcnBsX2FsbG9jYT1ub10pCisgICAgXSkKKyAgICBpZiB0ZXN0ICRnbF9jdl9ycGxfYWxsb2NhID0geWVzOyB0aGVuCisgICAgICBkbmwgT0ssIGFsbG9jYSBjYW4gYmUgaW1wbGVtZW50ZWQgdGhyb3VnaCBhIGNvbXBpbGVyIGJ1aWx0LWluLgorICAgICAgQUNfREVGSU5FKFtIQVZFX0FMTE9DQV0sIFsxXSwKKyAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlICdhbGxvY2EnIGFmdGVyIGluY2x1ZGluZyA8YWxsb2NhLmg+LAorICAgICAgICAgYSBoZWFkZXIgdGhhdCBtYXkgYmUgc3VwcGxpZWQgYnkgdGhpcyBkaXN0cmlidXRpb24uXSkKKyAgICAgIEFMTE9DQV9IPWFsbG9jYS5oCisgICAgZWxzZQorICAgICAgZG5sIGFsbG9jYSBleGlzdHMgYXMgYSBsaWJyYXJ5IGZ1bmN0aW9uLCBpLmUuIGl0IGlzIHNsb3cgYW5kIHByb2JhYmx5CisgICAgICBkbmwgYSBtZW1vcnkgbGVhay4gRG9uJ3QgZGVmaW5lIEhBVkVfQUxMT0NBIGluIHRoaXMgY2FzZS4KKyAgICAgIEFMTE9DQV9IPQorICAgIGZpCisgIGVsc2UKKyAgICBBTExPQ0FfSD1hbGxvY2EuaAorICBmaQorICBBQ19TVUJTVChbQUxMT0NBX0hdKQorICBBTV9DT05ESVRJT05BTChbR0xfR0VORVJBVEVfQUxMT0NBX0hdLCBbdGVzdCAtbiAiJEFMTE9DQV9IIl0pCitdKQorCisjIFByZXJlcXVpc2l0ZXMgb2YgbGliL2FsbG9jYS5jLgorIyBTVEFDS19ESVJFQ1RJT04gaXMgYWxyZWFkeSBoYW5kbGVkIGJ5IEFDX0ZVTkNfQUxMT0NBLgorQUNfREVGVU4oW2dsX1BSRVJFUV9BTExPQ0FdLCBbOl0pCisKKyMgVGhpcyB3b3JrcyBhcm91bmQgYSBidWcgaW4gYXV0b2NvbmYgPD0gMi42OC4KKyMgU2VlIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWdudWxpYi8yMDExLTA2L21zZzAwMjc3Lmh0bWw+LgorCittNF92ZXJzaW9uX3ByZXJlcShbMi42OV0sIFtdICxbCisKKyMgVGhpcyBpcyB0YWtlbiBmcm9tIHRoZSBmb2xsb3dpbmcgQXV0b2NvbmYgcGF0Y2g6CisjIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9jZ2l0L2F1dG9jb25mLmdpdC9jb21taXQvP2lkPTZjZDlmMTI1MjBiMGQ2Zjc2ZDMyMzBkNzU2NWZlYmExZWNmMjk0OTcKKworIyBfQUNfTElCT0JKX0FMTE9DQQorIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgdXAgdGhlIExJQk9CSiByZXBsYWNlbWVudCBvZiAnYWxsb2NhJy4gIFdlbGwsIG5vdCBleGFjdGx5CisjIEFDX0xJQk9CSiBzaW5jZSB3ZSBhY3R1YWxseSBzZXQgdGhlIG91dHB1dCB2YXJpYWJsZSAnQUxMT0NBJy4KKyMgTmV2ZXJ0aGVsZXNzLCBmb3IgQXV0b21ha2UsIEFDX0xJQlNPVVJDRVMgaXQuCittNF9kZWZpbmUoW19BQ19MSUJPQkpfQUxMT0NBXSwKK1sjIFRoZSBTVlIzIGxpYlBXIGFuZCBTVlI0IGxpYnVjYiBib3RoIGNvbnRhaW4gaW5jb21wYXRpYmxlIGZ1bmN0aW9ucworIyB0aGF0IGNhdXNlIHRyb3VibGUuICBTb21lIHZlcnNpb25zIGRvIG5vdCBldmVuIGNvbnRhaW4gYWxsb2NhIG9yCisjIGNvbnRhaW4gYSBidWdneSB2ZXJzaW9uLiAgSWYgeW91IHN0aWxsIHdhbnQgdG8gdXNlIHRoZWlyIGFsbG9jYSwKKyMgdXNlIGFyIHRvIGV4dHJhY3QgYWxsb2NhLm8gZnJvbSB0aGVtIGluc3RlYWQgb2YgY29tcGlsaW5nIGFsbG9jYS5jLgorQUNfTElCU09VUkNFUyhhbGxvY2EuYykKK0FDX1NVQlNUKFtBTExPQ0FdLCBbXCR7TElCT0JKRElSfWFsbG9jYS4kYWNfb2JqZXh0XSlkbmwKK0FDX0RFRklORShDX0FMTE9DQSwgMSwgW0RlZmluZSB0byAxIGlmIHVzaW5nICdhbGxvY2EuYycuXSkKKworQUNfQ0FDSEVfQ0hFQ0sod2hldGhlciAnYWxsb2NhLmMnIG5lZWRzIENyYXkgaG9va3MsIGFjX2N2X29zX2NyYXksCitbQUNfRUdSRVBfQ1BQKHdlYmVjcmF5LAorWyNpZiBkZWZpbmVkIENSQVkgJiYgISBkZWZpbmVkIENSQVkyCit3ZWJlY3JheQorI2Vsc2UKK3dlbm90YmVjcmF5CisjZW5kaWYKK10sIGFjX2N2X29zX2NyYXk9eWVzLCBhY19jdl9vc19jcmF5PW5vKV0pCitpZiB0ZXN0ICRhY19jdl9vc19jcmF5ID0geWVzOyB0aGVuCisgIGZvciBhY19mdW5jIGluIF9nZXRiNjcgR0VUQjY3IGdldGI2NzsgZG8KKyAgICBBQ19DSEVDS19GVU5DKCRhY19mdW5jLAorICAgICAgICAgICAgICAgICAgW0FDX0RFRklORV9VTlFVT1RFRChDUkFZX1NUQUNLU0VHX0VORCwgJGFjX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdG8gb25lIG9mICdfZ2V0YjY3JywgJ0dFVEI2NycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0YjY3JyBmb3IgQ3JheS0yIGFuZCBDcmF5LVlNUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtcy4gVGhpcyBmdW5jdGlvbiBpcyByZXF1aXJlZCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGxvY2EuYycgc3VwcG9ydCBvbiB0aG9zZSBzeXN0ZW1zLl0pCisgICAgYnJlYWtdKQorICBkb25lCitmaQorCitBQ19DQUNIRV9DSEVDSyhbc3RhY2sgZGlyZWN0aW9uIGZvciBDIGFsbG9jYV0sCisgICAgICAgICAgICAgICBbYWNfY3ZfY19zdGFja19kaXJlY3Rpb25dLAorW0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKAorW0FDX0lOQ0xVREVTX0RFRkFVTFQKK2ludAorZmluZF9zdGFja19kaXJlY3Rpb24gKGludCAqYWRkciwgaW50IGRlcHRoKQoreworICBpbnQgZGlyLCBkdW1teSA9IDA7CisgIGlmICghIGFkZHIpCisgICAgYWRkciA9ICZkdW1teTsKKyAgKmFkZHIgPSBhZGRyIDwgJmR1bW15ID8gMSA6IGFkZHIgPT0gJmR1bW15ID8gMCA6IC0xOworICBkaXIgPSBkZXB0aCA/IGZpbmRfc3RhY2tfZGlyZWN0aW9uIChhZGRyLCBkZXB0aCAtIDEpIDogMDsKKyAgcmV0dXJuIGRpciArIGR1bW15OworfQorCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgcmV0dXJuIGZpbmRfc3RhY2tfZGlyZWN0aW9uICgwLCBhcmdjICsgIWFyZ3YgKyAyMCkgPCAwOworfV0pXSwKKyAgICAgICAgICAgICAgIFthY19jdl9jX3N0YWNrX2RpcmVjdGlvbj0xXSwKKyAgICAgICAgICAgICAgIFthY19jdl9jX3N0YWNrX2RpcmVjdGlvbj0tMV0sCisgICAgICAgICAgICAgICBbYWNfY3ZfY19zdGFja19kaXJlY3Rpb249MF0pXSkKK0FIX1ZFUkJBVElNKFtTVEFDS19ESVJFQ1RJT05dLAorWy8qIElmIHVzaW5nIHRoZSBDIGltcGxlbWVudGF0aW9uIG9mIGFsbG9jYSwgZGVmaW5lIGlmIHlvdSBrbm93IHRoZQorICAgZGlyZWN0aW9uIG9mIHN0YWNrIGdyb3d0aCBmb3IgeW91ciBzeXN0ZW07IG90aGVyd2lzZSBpdCB3aWxsIGJlCisgICBhdXRvbWF0aWNhbGx5IGRlZHVjZWQgYXQgcnVudGltZS4KKyAgICAgICAgU1RBQ0tfRElSRUNUSU9OID4gMCA9PiBncm93cyB0b3dhcmQgaGlnaGVyIGFkZHJlc3NlcworICAgICAgICBTVEFDS19ESVJFQ1RJT04gPCAwID0+IGdyb3dzIHRvd2FyZCBsb3dlciBhZGRyZXNzZXMKKyAgICAgICAgU1RBQ0tfRElSRUNUSU9OID0gMCA9PiBkaXJlY3Rpb24gb2YgZ3Jvd3RoIHVua25vd24gKi8KK0AlOkB1bmRlZiBTVEFDS19ESVJFQ1RJT05dKWRubAorQUNfREVGSU5FX1VOUVVPVEVEKFNUQUNLX0RJUkVDVElPTiwgJGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uKQorXSkjIF9BQ19MSUJPQkpfQUxMT0NBCitdKQpkaWZmIC0tZ2l0IGEvbTQvYXNtLXVuZGVyc2NvcmUubTQgYi9tNC9hc20tdW5kZXJzY29yZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzhhYTAzCi0tLSAvZGV2L251bGwKKysrIGIvbTQvYXNtLXVuZGVyc2NvcmUubTQKQEAgLTAsMCArMSw3MSBAQAorIyBhc20tdW5kZXJzY29yZS5tNCBzZXJpYWwgMgorZG5sIENvcHlyaWdodCAoQykgMjAxMC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIEJydW5vIEhhaWJsZS4gQmFzZWQgb24gYXMtdW5kZXJzY29yZS5tNCBpbiBHTlUgY2xpc3AuCisKKyMgZ2xfQVNNX1NZTUJPTF9QUkVGSVgKKyMgVGVzdHMgZm9yIHRoZSBwcmVmaXggb2YgQyBzeW1ib2xzIGF0IHRoZSBhc3NlbWJseSBsYW5ndWFnZSBsZXZlbCBhbmQgdGhlCisjIGxpbmtlciBsZXZlbC4gVGhpcyBwcmVmaXggaXMgZWl0aGVyIGFuIHVuZGVyc2NvcmUgb3IgZW1wdHkuIERlZmluZXMgdGhlCisjIEMgbWFjcm8gVVNFUl9MQUJFTF9QUkVGSVggdG8gdGhpcyBwcmVmaXgsIGFuZCBzZXRzIEFTTV9TWU1CT0xfUFJFRklYIHRvCisjIGEgc3RyaW5naWZpZWQgdmFyaWFudCBvZiB0aGlzIHByZWZpeC4KKworQUNfREVGVU4oW2dsX0FTTV9TWU1CT0xfUFJFRklYXSwKK1sKKyAgZG5sIFdlIGRvbid0IHVzZSBHQ0MncyBfX1VTRVJfTEFCRUxfUFJFRklYX18gaGVyZSwgYmVjYXVzZQorICBkbmwgMS4gSXQgd29ya3Mgb25seSBmb3IgR0NDLgorICBkbmwgMi4gSXQgaXMgaW5jb3JyZWN0bHkgZGVmaW5lZCBvbiBzb21lIHBsYXRmb3JtcywgaW4gc29tZSBHQ0MgdmVyc2lvbnMuCisgIEFDX1JFUVVJUkUoW2dsX0NfQVNNXSkKKyAgQUNfQ0FDSEVfQ0hFQ0soCisgICAgW3doZXRoZXIgQyBzeW1ib2xzIGFyZSBwcmVmaXhlZCB3aXRoIHVuZGVyc2NvcmUgYXQgdGhlIGxpbmtlciBsZXZlbF0sCisgICAgW2dsX2N2X3Byb2dfYXNfdW5kZXJzY29yZV0sCisgICAgW2NhdCA+IGNvbmZ0ZXN0LmMgPDxFT0YKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiBpbnQgZm9vICh2b2lkKTsKKyNlbmRpZgoraW50IGZvbyh2b2lkKSB7IHJldHVybiAwOyB9CitFT0YKKyAgICAgIyBMb29rIGZvciB0aGUgYXNzZW1ibHkgbGFuZ3VhZ2UgbmFtZSBpbiB0aGUgLnMgZmlsZS4KKyAgICAgQUNfVFJZX0NPTU1BTkQoJHtDQy1jY30gJENGTEFHUyAkQ1BQRkxBR1MgJGdsX2NfYXNtX29wdCBjb25mdGVzdC5jKSA+L2Rldi9udWxsIDI+JjEKKyAgICAgaWYgZ3JlcCBfZm9vIGNvbmZ0ZXN0LiRnbF9hc21leHQgPi9kZXYvbnVsbCA7IHRoZW4KKyAgICAgICBnbF9jdl9wcm9nX2FzX3VuZGVyc2NvcmU9eWVzCisgICAgIGVsc2UKKyAgICAgICBnbF9jdl9wcm9nX2FzX3VuZGVyc2NvcmU9bm8KKyAgICAgZmkKKyAgICAgcm0gLWYgY29uZnRlc3QqCisgICAgXSkKKyAgaWYgdGVzdCAkZ2xfY3ZfcHJvZ19hc191bmRlcnNjb3JlID0geWVzOyB0aGVuCisgICAgVVNFUl9MQUJFTF9QUkVGSVg9XworICBlbHNlCisgICAgVVNFUl9MQUJFTF9QUkVGSVg9CisgIGZpCisgIEFDX0RFRklORV9VTlFVT1RFRChbVVNFUl9MQUJFTF9QUkVGSVhdLCBbJFVTRVJfTEFCRUxfUFJFRklYXSwKKyAgICBbRGVmaW5lIHRvIHRoZSBwcmVmaXggb2YgQyBzeW1ib2xzIGF0IHRoZSBhc3NlbWJsZXIgYW5kIGxpbmtlciBsZXZlbCwKKyAgICAgZWl0aGVyIGFuIHVuZGVyc2NvcmUgb3IgZW1wdHkuXSkKKyAgQVNNX1NZTUJPTF9QUkVGSVg9JyInJHtVU0VSX0xBQkVMX1BSRUZJWH0nIicKKyAgQUNfU1VCU1QoW0FTTV9TWU1CT0xfUFJFRklYXSkKK10pCisKKyMgZ2xfQ19BU00KKyMgRGV0ZXJtaW5lcyBob3cgdG8gcHJvZHVjZSBhbiBhc3NlbWJseSBsYW5ndWFnZSBmaWxlIGZyb20gQyBzb3VyY2UgY29kZS4KKyMgU2V0cyB0aGUgdmFyaWFibGVzOgorIyAgIGdsX2FzbWV4dCAtIHRoZSBleHRlbnNpb24gb2YgYXNzZW1ibHkgbGFuZ3VhZ2Ugb3V0cHV0LAorIyAgIGdsX2NfYXNtX29wdCAtIHRoZSBDIGNvbXBpbGVyIG9wdGlvbiB0aGF0IHByb2R1Y2VzIGFzc2VtYmx5IGxhbmd1YWdlIG91dHB1dC4KKworQUNfREVGVU4oW2dsX0NfQVNNXSwKK1sKKyAgQUNfRUdSRVBfQ1BQKFtNaWNyb3NvZnRDb21waWxlcl0sCisgICAgWworI2lmZGVmIF9NU0NfVkVSCitNaWNyb3NvZnRDb21waWxlcgorI2VuZGlmCisgICAgXSwKKyAgICBbZ2xfYXNtZXh0PSdhc20nCisgICAgIGdsX2NfYXNtX29wdD0nLWMgLUZhJworICAgIF0sCisgICAgW2dsX2FzbWV4dD0ncycKKyAgICAgZ2xfY19hc21fb3B0PSctUycKKyAgICBdKQorXSkKZGlmZiAtLWdpdCBhL200L2Fzc2VydC5tNCBiL200L2Fzc2VydC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzQ4ZTVlCi0tLSAvZGV2L251bGwKKysrIGIvbTQvYXNzZXJ0Lm00CkBAIC0wLDAgKzEsMjQgQEAKKyNzZXJpYWwgNworCisjIENvcHlyaWdodCAoQykgMTk5OC0xOTk5LCAyMDAxLCAyMDA0LCAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIGJhc2VkIG9uIGNvZGUgZnJvbSBFbGVmdGhlcmlvcyBHa2lvdWxla2FzCitkbmwgQXV0b2NvbmYgMi42MCBwcm92aWRlcyBBQ19IRUFERVJfQVNTRVJUIGZvciB0aGUgc2FtZSBwdXJwb3NlLCBidXQKK2RubCBpdCBoYXMgYnJva2VuIHNlbWFudGljcyBmb3IgLS1lbmFibGUtYXNzZXJ0IHVudGlsIDIuNjQuCitBQ19ERUZVTihbZ2xfQVNTRVJUXSwKK1sKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBhc3NlcnRpb25zXSkKKyAgQUNfQVJHX0VOQUJMRShbYXNzZXJ0XSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1hc3NlcnRdLCBbdHVybiBvZmYgYXNzZXJ0aW9uc10pXSwKKyAgICBbQVNfSUYoW3Rlc3QgIngkZW5hYmxldmFsIiA9IHhub10sCisgICAgICBbQUNfREVGSU5FKFtOREVCVUddLCBbMV0sCisgICAgICAgIFtEZWZpbmUgdG8gMSBpZiBhc3NlcnRpb25zIHNob3VsZCBiZSBkaXNhYmxlZC5dKV0sCisgICAgICBbdGVzdCAieCRlbmFibGV2YWwiICE9IHh5ZXNdLAorICAgICAgW0FDX01TR19XQVJOKFtpbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIC0tZW5hYmxlLWFzc2VydF0pCisgICAgICBlbmFibGVfYXNzZXJ0PXllc10pXSwKKyAgICBbZW5hYmxlX2Fzc2VydD15ZXNdKQorICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX2Fzc2VydF0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvYmlzb24taTE4bi5tNCBiL200L2Jpc29uLWkxOG4ubTQKaW5kZXggMmZlNmM2MC4uMjA4Y2I1NiAxMDA2NDQKLS0tIGEvbTQvYmlzb24taTE4bi5tNAorKysgYi9tNC9iaXNvbi1pMThuLm00CkBAIC0xLDUgKzEsNyBAQAotIyBiaXNvbi1pMThuLm00IHNlcmlhbCAxIChiaXNvbi0yLjEpCi1kbmwgQ29weXJpZ2h0IChDKSAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBiaXNvbi1pMThuLm00IHNlcmlhbCAyCisKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCiBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KQEAgLTE5LDM4ICsyMSwyNyBAQAogICAgIGV4aXQgMQogICBmaQogICBCSVNPTl9MT0NBTEVESVI9CisgIEJJU09OX1VTRV9OTFM9bm8KICAgaWYgdGVzdCAiJFVTRV9OTFMiID0geWVzOyB0aGVuCisgICAgZG5sIERldGVybWluZSBiaXNvbidzIGxvY2FsZWRpci4KICAgICBkbmwgQUNfUFJPR19ZQUNDIHNldHMgdGhlIFlBQ0MgdmFyaWFibGU7IG90aGVyIG1hY3JvcyBzZXQgdGhlIEJJU09OIHZhcmlhYmxlLgotICAgIGlmIHRlc3QgLW4gIiRZQUNDIjsgdGhlbgotICAgICAgY2FzZSAiJFlBQ0MiIGluCi0gICAgICAgICpiaXNvbiopCi0gICAgICAgICAgaWYgKCRZQUNDIC0tcHJpbnQtbG9jYWxlZGlyKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgICAgICAgIEJJU09OX0xPQ0FMRURJUj1gJFlBQ0MgLS1wcmludC1sb2NhbGVkaXJgCi0gICAgICAgICAgZmkKLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgIGVsc2UKLSAgICAgIGlmIHRlc3QgLW4gIiRCSVNPTiI7IHRoZW4KLSAgICAgICAgaWYgdGVzdCAiJEJJU09OIiAhPSAiOiI7IHRoZW4KLSAgICAgICAgICBpZiAoJEJJU09OIC0tcHJpbnQtbG9jYWxlZGlyKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgICAgICAgIEJJU09OX0xPQ0FMRURJUj1gJEJJU09OIC0tcHJpbnQtbG9jYWxlZGlyYAotICAgICAgICAgIGZpCi0gICAgICAgIGZpCi0gICAgICBmaQorICAgIGRubCBCdXQgZXZlbiBpcyBZQUNDIGlzIGNhbGxlZCAieWFjYyIsIGl0IG1heSBiZSBhIHNjcmlwdCB0aGF0IGludm9rZXMgYmlzb24KKyAgICBkbmwgYW5kIGFjY2VwdHMgdGhlIC0tcHJpbnQtbG9jYWxlZGlyIG9wdGlvbi4KKyAgICBkbmwgWUFDQydzIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHk7IEJJU09OJ3MgZGVmYXVsdCB2YWx1ZSBpcyA6LgorICAgIGlmICgke1lBQ0MtJHtCSVNPTi06fX0gLS1wcmludC1sb2NhbGVkaXIpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgQklTT05fTE9DQUxFRElSPWAke1lBQ0MtJHtCSVNPTi06fX0gLS1wcmludC1sb2NhbGVkaXJgCiAgICAgZmkKICAgICBBQ19TVUJTVChbQklTT05fTE9DQUxFRElSXSkKICAgICBpZiB0ZXN0IC1uICIkQklTT05fTE9DQUxFRElSIjsgdGhlbgorICAgICAgZG5sIFRoZXJlIGlzIG5vIG5lZWQgdG8gZW5hYmxlIGludGVybmF0aW9uYWxpemF0aW9uIGlmIHRoZSB1c2VyIGRvZXNuJ3QKKyAgICAgIGRubCB3YW50IG1lc3NhZ2UgY2F0YWxvZ3MuICBTbyBsb29rIGF0IHRoZSBsYW5ndWFnZS9sb2NhbGUgbmFtZXMgZm9yCisgICAgICBkbmwgd2hpY2ggdGhlIHVzZXIgd2FudHMgbWVzc2FnZSBjYXRhbG9ncy4gIFRoaXMgaXMgJExJTkdVQVMuICBJZiB1bnNldAorICAgICAgZG5sIG9yIGVtcHR5LCBoZSB3YW50cyBhbGwgb2YgdGhlbS4KICAgICAgIFVTRVJfTElOR1VBUz0iJHtMSU5HVUFTLSVVTlNFVCV9IgogICAgICAgaWYgdGVzdCAtbiAiJFVTRVJfTElOR1VBUyI7IHRoZW4KICAgICAgICAgQklTT05fVVNFX05MUz15ZXMKLSAgICAgIGVsc2UKLSAgICAgICAgQklTT05fVVNFX05MUz1ubwogICAgICAgZmkKLSAgICBlbHNlCi0gICAgICBCSVNPTl9VU0VfTkxTPW5vCiAgICAgZmkKLSAgZWxzZQotICAgIEJJU09OX1VTRV9OTFM9bm8KICAgZmkKICAgaWYgdGVzdCAkQklTT05fVVNFX05MUyA9IHllczsgdGhlbgogICAgIEFDX0RFRklORShbWVlFTkFCTEVfTkxTXSwgMSwKZGlmZiAtLWdpdCBhL200L2Mtd29ya2luZy5tNCBiL200L2Mtd29ya2luZy5tNAppbmRleCBlYzc0MDM1Li5kZTFhNGM1IDEwMDY0NAotLS0gYS9tNC9jLXdvcmtpbmcubTQKKysrIGIvbTQvYy13b3JraW5nLm00CkBAIC0xLDEwICsxLDEwIEBACiAjIFNhbml0eSB0ZXN0IGEgQyBjb21waWxlci4KIAotIyBDb3B5cmlnaHQgKEMpIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogIwogIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKQEAgLTEzLDkgKzEzLDcgQEAKICMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICMKICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotIyAwMjExMC0xMzAxICBVU0EKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAKICMgV3JpdHRlbiBieSBQYXVsIEVnZ2VydC4KIApAQCAtMjYsNCArMjQsNTYgQEAKIAkgaW50IHRlc3RfYXJyYXlbQ0hBUl9CSVRdO11dKV0sCiAgICAgW10sCiAgICAgW0FDX01TR19GQUlMVVJFKFtjYW5ub3QgY29tcGlsZSBhIHNpbXBsZSBDIHByb2dyYW1dKV0pCisgICBBQ19TVUJTVChbQklTT05fQ19XT1JLU10sIFs6XSkKK10pCisKKyMgQklTT05fQ0hFQ0tfV0lUSF9QT1NJWExZX0NPUlJFQ1QoQ09ERSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUnVuIHRoZSBBdXRvY29uZiBDT0RFIHdpdGggUE9TSVhMWV9DT1JSRUNUIHNldCB0byAxLCBhbmQgcmVzdG9yZWQgdG8KKyMgaXRzIGluaXRpYWwgdmFsdWUgYWZ0ZXJ3YXJkcy4KK0FDX0RFRlVOKFtCSVNPTl9DSEVDS19XSVRIX1BPU0lYTFlfQ09SUkVDVF0sCitbZ2xfYXdrX3Byb2JlPSdCRUdJTiB7IGlmICgiUE9TSVhMWV9DT1JSRUNUIiBpbiBFTlZJUk9OKSBwcmludCAieCIgfScKK2Nhc2UgJHtQT1NJWExZX0NPUlJFQ1QreH1gJEFXSyAiJGdsX2F3a19wcm9iZSIgPC9kZXYvbnVsbGAgaW4KKyAgeHgpIGdsX2hhZF9QT1NJWExZX0NPUlJFQ1Q9ZXhwb3J0ZWQgOzsKKyAgeCkgIGdsX2hhZF9QT1NJWExZX0NPUlJFQ1Q9eWVzICAgICAgOzsKKyAgKikgIGdsX2hhZF9QT1NJWExZX0NPUlJFQ1Q9ICAgICAgICAgOzsKK2VzYWMKK1BPU0lYTFlfQ09SUkVDVD0xCitleHBvcnQgUE9TSVhMWV9DT1JSRUNUCiskMQorY2FzZSAkZ2xfaGFkX1BPU0lYTFlfQ09SUkVDVCBpbgorICBleHBvcnRlZCkgOzsKKyAgeWVzKSBBU19VTlNFVChbUE9TSVhMWV9DT1JSRUNUXSk7IFBPU0lYTFlfQ09SUkVDVD0xIDs7CisgICopIEFTX1VOU0VUKFtQT1NJWExZX0NPUlJFQ1RdKSA7OworZXNhYworXSkKKworIyBCSVNPTl9MQU5HX0NPTVBJTEVSX1BPU0lYTFlfQ09SUkVDVAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBXaGV0aGVyIHRoZSBjb21waWxlciBmb3IgdGhlIGN1cnJlbnQgbGFuZ3VhZ2Ugc3VwcG9ydHMgLWcgaW4KKyMgUE9TSVhMWV9DT1JSRUNUIG1vZGUuICBjbGFuZy0yLjkgb24gT1MgWCBkb2VzIG5vdCwgYmVjYXVzZQorIyAiY2xhbmctbXAtMi45IC1vIHRlc3QgLWcgdGVzdC5jIiBsYXVuY2hlcyAiL3Vzci9iaW4vZHN5bXV0aWwgdGVzdCAtbworIyB0ZXN0LmRTWU0iIHdoaWNoIGZhaWxzIHdpdGggImVycm9yOiB1bmFibGUgdG8gb3BlbiBleGVjdXRhYmxlICctbyciLgorIworIyBTZXRzIDxMQU5HPl9DT01QSUxFUl9QT1NJWExZX0NPUlJFQ1QgdG8gdHJ1ZS9mYWxzZS4KK0FDX0RFRlVOKFtCSVNPTl9MQU5HX0NPTVBJTEVSX1BPU0lYTFlfQ09SUkVDVF0sCitbQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgJF9BQ19DQyBzdXBwb3J0cyBQT1NJWExZX0NPUlJFQ1Q9MV0sCisgICAgICAgICAgICAgICAgW2Jpc29uX2N2X1tdX0FDX0xBTkdfQUJCUkVWW11fc3VwcG9ydHNfcG9zaXhseV9jb3JyZWN0XSwKK1tCSVNPTl9DSEVDS19XSVRIX1BPU0lYTFlfQ09SUkVDVCgKK1tBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNXSwKKyAgICAgICAgICAgICAgICBbYmlzb25fY3ZfW11fQUNfTEFOR19BQkJSRVZbXV9zdXBwb3J0c19wb3NpeGx5X2NvcnJlY3Q9eWVzXSwKKyAgICAgICAgICAgICAgICBbYmlzb25fY3ZfW11fQUNfTEFOR19BQkJSRVZbXV9zdXBwb3J0c19wb3NpeGx5X2NvcnJlY3Q9bm9dKV0pXSkKK2Nhc2UgJGJpc29uX2N2X1tdX0FDX0xBTkdfQUJCUkVWW11fc3VwcG9ydHNfcG9zaXhseV9jb3JyZWN0IGluCisgIHllcykgQUNfU1VCU1QoX0FDX0xBTkdfUFJFRklYW19DT01QSUxFUl9QT1NJWExZX0NPUlJFQ1RdLCBbdHJ1ZV0pIDs7CisgIG5vKSAgQUNfU1VCU1QoX0FDX0xBTkdfUFJFRklYW19DT01QSUxFUl9QT1NJWExZX0NPUlJFQ1RdLCBbZmFsc2VdKTs7Citlc2FjCitdKQorCisjIEJJU09OX0NfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFdoZXRoZXIgdGhlIEMgY29tcGlsZXIgc3VwcG9ydHMgLWcgaW4gUE9TSVhMWV9DT1JSRUNUIG1vZGUuCitBQ19ERUZVTihbQklTT05fQ19DT01QSUxFUl9QT1NJWExZX0NPUlJFQ1RdLAorW0FDX0xBTkdfUFVTSChbQ10pCitCSVNPTl9MQU5HX0NPTVBJTEVSX1BPU0lYTFlfQ09SUkVDVAorQUNfTEFOR19QT1AoW0NdKQogXSkKZGlmZiAtLWdpdCBhL200L2NhbGxvYy5tNCBiL200L2NhbGxvYy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGM1ZmU0Ci0tLSAvZGV2L251bGwKKysrIGIvbTQvY2FsbG9jLm00CkBAIC0wLDAgKzEsODUgQEAKKyMgY2FsbG9jLm00IHNlcmlhbCAxNQorCisjIENvcHlyaWdodCAoQykgMjAwNC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgV3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcuCisKKyMgRGV0ZXJtaW5lIHdoZXRoZXIgY2FsbG9jIChOLCBTKSByZXR1cm5zIG5vbi1OVUxMIHdoZW4gTipTIGlzIHplcm8sCisjIGFuZCByZXR1cm5zIE5VTEwgd2hlbiBOKlMgb3ZlcmZsb3dzLgorIyBJZiBzbywgZGVmaW5lIEhBVkVfQ0FMTE9DLiAgT3RoZXJ3aXNlLCBkZWZpbmUgY2FsbG9jIHRvIHJwbF9jYWxsb2MKKyMgYW5kIGFycmFuZ2UgdG8gdXNlIGEgY2FsbG9jIHdyYXBwZXIgZnVuY3Rpb24gdGhhdCBkb2VzIHdvcmsgaW4gdGhhdCBjYXNlLgorCisjIF9BQ19GVU5DX0NBTExPQ19JRihbSUYtV09SS1NdLCBbSUYtTk9UXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJZiAnY2FsbG9jICgwLCAwKScgaXMgcHJvcGVybHkgaGFuZGxlZCwgcnVuIElGLVdPUktTLCBvdGhlcndpc2UsIElGLU5PVC4KK0FDX0RFRlVOKFtfQUNfRlVOQ19DQUxMT0NfSUZdLAorWworICBBQ19SRVFVSVJFKFtBQ19UWVBFX1NJWkVfVF0pZG5sCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkgZG5sIGZvciBjcm9zcy1jb21waWxlcworICBBQ19DQUNIRV9DSEVDSyhbZm9yIEdOVSBsaWJjIGNvbXBhdGlibGUgY2FsbG9jXSwKKyAgICBbYWNfY3ZfZnVuY19jYWxsb2NfMF9ub25udWxsXSwKKyAgICBbQUNfUlVOX0lGRUxTRSgKKyAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgIFtBQ19JTkNMVURFU19ERUZBVUxUXSwKKyAgICAgICAgICBbW2ludCByZXN1bHQgPSAwOworICAgICAgICAgICAgaWYgKCFjYWxsb2MgKDAsIDApKQorICAgICAgICAgICAgICByZXN1bHQgfD0gMTsKKyAgICAgICAgICAgIGlmIChjYWxsb2MgKChzaXplX3QpIC0xIC8gOCArIDEsIDgpKQorICAgICAgICAgICAgICByZXN1bHQgfD0gMjsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgXV0pXSwKKyAgICAgICBbYWNfY3ZfZnVuY19jYWxsb2NfMF9ub25udWxsPXllc10sCisgICAgICAgW2FjX2N2X2Z1bmNfY2FsbG9jXzBfbm9ubnVsbD1ub10sCisgICAgICAgW2Nhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gZ2xpYmMgc3lzdGVtcy4KKyAgICAgICAgICAqLWdudSopIGFjX2N2X2Z1bmNfY2FsbG9jXzBfbm9ubnVsbD0iZ3Vlc3NpbmcgeWVzIiA7OworICAgICAgICAgICAgICAgICAgIyBJZiB3ZSBkb24ndCBrbm93LCBhc3N1bWUgdGhlIHdvcnN0LgorICAgICAgICAgICopICAgICAgYWNfY3ZfZnVuY19jYWxsb2NfMF9ub25udWxsPSJndWVzc2luZyBubyIgOzsKKyAgICAgICAgZXNhYworICAgICAgIF0pXSkKKyAgY2FzZSAiJGFjX2N2X2Z1bmNfY2FsbG9jXzBfbm9ubnVsbCIgaW4KKyAgICAqeWVzKQorICAgICAgJDEKKyAgICAgIDs7CisgICAgKikKKyAgICAgICQyCisgICAgICA7OworICBlc2FjCitdKSMgQUNfRlVOQ19DQUxMT0MKKworCisjIGdsX0ZVTkNfQ0FMTE9DX0dOVQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVwb3J0IHdoZXRoZXIgJ2NhbGxvYyAoMCwgMCknIGlzIHByb3Blcmx5IGhhbmRsZWQsIGFuZCByZXBsYWNlIGNhbGxvYyBpZgorIyBuZWVkZWQuCitBQ19ERUZVTihbZ2xfRlVOQ19DQUxMT0NfR05VXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfU1RETElCX0hfREVGQVVMVFNdKQorICBfQUNfRlVOQ19DQUxMT0NfSUYoCisgICAgW0FDX0RFRklORShbSEFWRV9DQUxMT0NfR05VXSwgWzFdLAorICAgICAgICAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdXIgc3lzdGVtIGhhcyBhIEdOVSBsaWJjIGNvbXBhdGlibGUgJ2NhbGxvYycKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiwgYW5kIHRvIDAgb3RoZXJ3aXNlLl0pXSwKKyAgICBbQUNfREVGSU5FKFtIQVZFX0NBTExPQ19HTlVdLCBbMF0pCisgICAgIFJFUExBQ0VfQ0FMTE9DPTEKKyAgICBdKQorXSkjIGdsX0ZVTkNfQ0FMTE9DX0dOVQorCisKKyMgZ2xfRlVOQ19DQUxMT0NfUE9TSVgKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdCB3aGV0aGVyICdjYWxsb2MnIGlzIFBPU0lYIGNvbXBsaWFudCAoc2V0cyBlcnJubyB0byBFTk9NRU0gd2hlbiBpdAorIyBmYWlscyksIGFuZCByZXBsYWNlIGNhbGxvYyBpZiBpdCBpcyBub3QuCitBQ19ERUZVTihbZ2xfRlVOQ19DQUxMT0NfUE9TSVhdLAorWworICBBQ19SRVFVSVJFKFtnbF9TVERMSUJfSF9ERUZBVUxUU10pCisgIEFDX1JFUVVJUkUoW2dsX0NIRUNLX01BTExPQ19QT1NJWF0pCisgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfbWFsbG9jX3Bvc2l4ID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKFtIQVZFX0NBTExPQ19QT1NJWF0sIFsxXSwKKyAgICAgIFtEZWZpbmUgaWYgdGhlICdjYWxsb2MnIGZ1bmN0aW9uIGlzIFBPU0lYIGNvbXBsaWFudC5dKQorICBlbHNlCisgICAgUkVQTEFDRV9DQUxMT0M9MQorICBmaQorXSkKZGlmZiAtLWdpdCBhL200L2Nsb3NlLXN0cmVhbS5tNCBiL200L2Nsb3NlLXN0cmVhbS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTBjOGEyCi0tLSAvZGV2L251bGwKKysrIGIvbTQvY2xvc2Utc3RyZWFtLm00CkBAIC0wLDAgKzEsMTEgQEAKKyNzZXJpYWwgNAorZG5sIENvcHlyaWdodCAoQykgMjAwNi0yMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL2Nsb3NlLXN0cmVhbS5jLgorQUNfREVGVU4oW2dsX0NMT1NFX1NUUkVBTV0sCitbCisgIDoKK10pCmRpZmYgLS1naXQgYS9tNC9jbG9zZS5tNCBiL200L2Nsb3NlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3OWU3MGQKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9jbG9zZS5tNApAQCAtMCwwICsxLDMzIEBACisjIGNsb3NlLm00IHNlcmlhbCA4CitkbmwgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0ZVTkNfQ0xPU0VdLAorWworICBBQ19SRVFVSVJFKFtnbF9VTklTVERfSF9ERUZBVUxUU10pCisgIEFDX1JFUVVJUkUoW2dsX01TVkNfSU5WQUxdKQorICBpZiB0ZXN0ICRIQVZFX01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUiA9IDE7IHRoZW4KKyAgICBSRVBMQUNFX0NMT1NFPTEKKyAgZmkKKyAgbTRfaWZkZWYoW2dsX1BSRVJFUV9TWVNfSF9XSU5TT0NLMl0sIFsKKyAgICBnbF9QUkVSRVFfU1lTX0hfV0lOU09DSzIKKyAgICBpZiB0ZXN0ICRVTklTVERfSF9IQVZFX1dJTlNPQ0syX0ggPSAxOyB0aGVuCisgICAgICBkbmwgRXZlbiBpZiB0aGUgJ3NvY2tldCcgbW9kdWxlIGlzIG5vdCB1c2VkIGhlcmUsIGFub3RoZXIgcGFydCBvZiB0aGUKKyAgICAgIGRubCBhcHBsaWNhdGlvbiBtYXkgdXNlIGl0IGFuZCBwYXNzIGZpbGUgZGVzY3JpcHRvcnMgdGhhdCByZWZlciB0bworICAgICAgZG5sIHNvY2tldHMgdG8gdGhlIGNsb3NlKCkgZnVuY3Rpb24uIFNvIGVuYWJsZSB0aGUgc3VwcG9ydCBmb3Igc29ja2V0cy4KKyAgICAgIFJFUExBQ0VfQ0xPU0U9MQorICAgIGZpCisgIF0pCisgIGRubCBSZXBsYWNlIGNsb3NlKCkgZm9yIHN1cHBvcnRpbmcgdGhlIGdudWxpYi1kZWZpbmVkIGZjaGRpcigpIGZ1bmN0aW9uLAorICBkbmwgdG8ga2VlcCBmY2hkaXIncyBib29ra2VlcGluZyB1cC10by1kYXRlLgorICBtNF9pZmRlZihbZ2xfRlVOQ19GQ0hESVJdLCBbCisgICAgaWYgdGVzdCAkUkVQTEFDRV9DTE9TRSA9IDA7IHRoZW4KKyAgICAgIGdsX1RFU1RfRkNIRElSCisgICAgICBpZiB0ZXN0ICRIQVZFX0ZDSERJUiA9IDA7IHRoZW4KKyAgICAgICAgUkVQTEFDRV9DTE9TRT0xCisgICAgICBmaQorICAgIGZpCisgIF0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvY2xvc2VvdXQubTQgYi9tNC9jbG9zZW91dC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTM5NWMxCi0tLSAvZGV2L251bGwKKysrIGIvbTQvY2xvc2VvdXQubTQKQEAgLTAsMCArMSwxMiBAQAorIyBjbG9zZW91dC5tNCBzZXJpYWwgNgorZG5sIENvcHlyaWdodCAoQykgMjAwMi0yMDAzLCAyMDA1LTIwMDYsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitkbmwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9jbG9zZW91dC5jLgorQUNfREVGVU4oW2dsX0NMT1NFT1VUXSwKK1sKKyAgOgorXSkKZGlmZiAtLWdpdCBhL200L2NvZGVzZXQubTQgYi9tNC9jb2Rlc2V0Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNTNkMjQKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9jb2Rlc2V0Lm00CkBAIC0wLDAgKzEsMjMgQEAKKyMgY29kZXNldC5tNCBzZXJpYWwgNSAoZ2V0dGV4dC0wLjE4LjIpCitkbmwgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIsIDIwMDYsIDIwMDgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgRnJvbSBCcnVubyBIYWlibGUuCisKK0FDX0RFRlVOKFtBTV9MQU5HSU5GT19DT0RFU0VUXSwKK1sKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBubF9sYW5naW5mbyBhbmQgQ09ERVNFVF0sIFthbV9jdl9sYW5naW5mb19jb2Rlc2V0XSwKKyAgICBbQUNfTElOS19JRkVMU0UoCisgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICBbWyNpbmNsdWRlIDxsYW5naW5mby5oPl1dLAorICAgICAgICAgIFtbY2hhciogY3MgPSBubF9sYW5naW5mbyhDT0RFU0VUKTsgcmV0dXJuICFjcztdXSldLAorICAgICAgIFthbV9jdl9sYW5naW5mb19jb2Rlc2V0PXllc10sCisgICAgICAgW2FtX2N2X2xhbmdpbmZvX2NvZGVzZXQ9bm9dKQorICAgIF0pCisgIGlmIHRlc3QgJGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoW0hBVkVfTEFOR0lORk9fQ09ERVNFVF0sIFsxXSwKKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgPGxhbmdpbmZvLmg+IGFuZCBubF9sYW5naW5mbyhDT0RFU0VUKS5dKQorICBmaQorXSkKZGlmZiAtLWdpdCBhL200L2NvbmZpZy1oLm00IGIvbTQvY29uZmlnLWgubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYxZTIyZgotLS0gL2Rldi9udWxsCisrKyBiL200L2NvbmZpZy1oLm00CkBAIC0wLDAgKzEsMTMgQEAKKyMgU2F5IHRoYXQgLURIQVZFX0NPTkZJR19IIGlzIG5vdCBuZWVkZWQuCisKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgV3JpdHRlbiBieSBQYXVsIEVnZ2VydC4KKworIyBUaGlzIHBhY2thZ2UncyBzb3VyY2UgZmlsZXMgYWxsIGluY2x1ZGUgY29uZmlnLmggdW5jb25kaXRpb25hbGx5LAorIyBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gcGFzcyAtREhBVkVfQ09ORklHX0ggdG8gdGhlIGNvbXBpbGVyLgorQUNfREVGVU4oW2dsX0NPTkZJR19IXSwKKyAgW0FDX0NPTkZJR19DT01NQU5EU19QUkUoW3Rlc3QgIlgkREVGUyIgPSBYLURIQVZFX0NPTkZJR19IICYmIERFRlM9XSldKQpkaWZmIC0tZ2l0IGEvbTQvY29uZmlnbWFrZS5tNCBiL200L2NvbmZpZ21ha2UubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM4MjM3MQotLS0gL2Rldi9udWxsCisrKyBiL200L2NvbmZpZ21ha2UubTQKQEAgLTAsMCArMSw1MCBAQAorIyBjb25maWdtYWtlLm00IHNlcmlhbCAxCitkbmwgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBnbF9DT05GSUdNQUtFX1BSRVAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIEd1YXJhbnRlZSBhbGwgb2YgdGhlIHN0YW5kYXJkIGRpcmVjdG9yeSB2YXJpYWJsZXMsIGV2ZW4gd2hlbiB1c2VkIHdpdGgKKyMgYXV0b2NvbmYgMi41OSAoZGF0YXJvb3RkaXIgd2Fzbid0IHN1cHBvcnRlZCB1bnRpbCAyLjU5Yykgb3IgYXV0b21ha2UKKyMgMS45LjYgKHBrZ2xpYmV4ZWNkaXIgd2Fzbid0IHN1cHBvcnRlZCB1bnRpbCAxLjEwYi4pLgorQUNfREVGVU4oW2dsX0NPTkZJR01BS0VfUFJFUF0sCitbCisgIGRubCBUZWNobmljYWxseSwgZGF0YWRpciBzaG91bGQgZGVmYXVsdCB0byBkYXRhcm9vdGRpci4gIEJ1dCBpZgorICBkbmwgYXV0b2NvbmYgaXMgdG9vIG9sZCB0byBwcm92aWRlIGRhdGFyb290ZGlyLCB0aGVuIHJldmVyc2luZyB0aGUKKyAgZG5sIGRlZmluaXRpb24gaXMgYSByZWFzb25hYmxlIGNvbXByb21pc2UuICBPbmx5IEFDX1NVQlNUIGEgdmFyaWFibGUKKyAgZG5sIGlmIGl0IHdhcyBub3QgYWxyZWFkeSBkZWZpbmVkIGVhcmxpZXIgYnkgYXV0b2NvbmYuCisgIGlmIHRlc3QgIngkZGF0YXJvb3RkaXIiID0geDsgdGhlbgorICAgIEFDX1NVQlNUKFtkYXRhcm9vdGRpcl0sIFsnJHtkYXRhZGlyfSddKQorICBmaQorICBkbmwgQ29weSB0aGUgYXBwcm9hY2ggdXNlZCBpbiBhdXRvY29uZiAyLjYwLgorICBpZiB0ZXN0ICJ4JGRvY2RpciIgPSB4OyB0aGVuCisgICAgQUNfU1VCU1QoW2RvY2Rpcl0sIFttNF9pZnNldChbQUNfUEFDS0FHRV9UQVJOQU1FXSwKKyAgICAgIFsnJHtkYXRhcm9vdGRpcn0vZG9jLyR7UEFDS0FHRV9UQVJOQU1FfSddLAorICAgICAgWycke2RhdGFyb290ZGlyfS9kb2MvJHtQQUNLQUdFfSddKV0pCisgIGZpCisgIGRubCBUaGUgcmVtYWluaW5nIHZhcmlhYmxlcyBtaXNzaW5nIGZyb20gYXV0b2NvbmYgMi41OSBhcmUgZWFzaWVyLgorICBpZiB0ZXN0ICJ4JGh0bWxkaXIiID0geDsgdGhlbgorICAgIEFDX1NVQlNUKFtodG1sZGlyXSwgWycke2RvY2Rpcn0nXSkKKyAgZmkKKyAgaWYgdGVzdCAieCRkdmlkaXIiID0geDsgdGhlbgorICAgIEFDX1NVQlNUKFtkdmlkaXJdLCBbJyR7ZG9jZGlyfSddKQorICBmaQorICBpZiB0ZXN0ICJ4JHBkZmRpciIgPSB4OyB0aGVuCisgICAgQUNfU1VCU1QoW3BkZmRpcl0sIFsnJHtkb2NkaXJ9J10pCisgIGZpCisgIGlmIHRlc3QgIngkcHNkaXIiID0geDsgdGhlbgorICAgIEFDX1NVQlNUKFtwc2Rpcl0sIFsnJHtkb2NkaXJ9J10pCisgIGZpCisgIGlmIHRlc3QgIngkbGlzcGRpciIgPSB4OyB0aGVuCisgICAgQUNfU1VCU1QoW2xpc3BkaXJdLCBbJyR7ZGF0YXJvb3RkaXJ9L2VtYWNzL3NpdGUtbGlzcCddKQorICBmaQorICBpZiB0ZXN0ICJ4JGxvY2FsZWRpciIgPSB4OyB0aGVuCisgICAgQUNfU1VCU1QoW2xvY2FsZWRpcl0sIFsnJHtkYXRhcm9vdGRpcn0vbG9jYWxlJ10pCisgIGZpCisKKyAgZG5sIEF1dG9tYWtlIDEuOS42IG9ubHkgbGFja3MgcGtnbGliZXhlY2RpcjsgYW5kIHNpbmNlIDEuMTEgbWVyZWx5CisgIGRubCBwcm92aWRlcyBpdCB3aXRob3V0IEFDX1NVQlNULCB0aGlzIGJsaW5kIHVzZSBvZiBBQ19TVUJTVCBpcyBzYWZlLgorICBBQ19TVUJTVChbcGtnbGliZXhlY2Rpcl0sIFsnJHtsaWJleGVjZGlyfS8ke1BBQ0tBR0V9J10pCitdKQpkaWZmIC0tZ2l0IGEvbTQvY3h4Lm00IGIvbTQvY3h4Lm00CmluZGV4IGJhZTU2NTIuLjVlMjY2YzkgMTAwNjQ0Ci0tLSBhL200L2N4eC5tNAorKysgYi9tNC9jeHgubTQKQEAgLTEsMTEgKzEsMTEgQEAKICMgLSotIEF1dG9jb25mIC0qLQogIyBTYW5pdHktdGVzdCBhIEMrKyBjb21waWxlci4KICMKLSMgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKICMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICMKICMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCkBAIC0xNCw5ICsxNCw3IEBACiAjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAjCiAjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSMgMDIxMTAtMTMwMSAgVVNBCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCiAjIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQuCiAKQEAgLTYwLDMgKzU4LDEyIEBACiAgQUNfU1VCU1QoW0JJU09OX0NYWF9XT1JLU10pCiAgQU1fQ09ORElUSU9OQUwoQklTT05fQ1hYX1dPUktTLCB0ZXN0ICRiaXNvbl9jdl9jeHhfd29ya3MgPSB5ZXMpCiBdKQorCisjIEJJU09OX0NYWF9DT01QSUxFUl9QT1NJWExZX0NPUlJFQ1QKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBXaGV0aGVyIHRoZSBDKysgY29tcGlsZXIgc3VwcG9ydHMgLWcgaW4gUE9TSVhMWV9DT1JSRUNUIG1vZGUuCitBQ19ERUZVTihbQklTT05fQ1hYX0NPTVBJTEVSX1BPU0lYTFlfQ09SUkVDVF0sCitbQUNfTEFOR19QVVNIKFtDKytdKQorQklTT05fTEFOR19DT01QSUxFUl9QT1NJWExZX0NPUlJFQ1QKK0FDX0xBTkdfUE9QKFtDKytdKQorXSkKZGlmZiAtLWdpdCBhL200L2Rpcm5hbWUubTQgYi9tNC9kaXJuYW1lLm00CmluZGV4IGUzNjkzN2QuLjY1NjM5ZWMgMTAwNjQ0Ci0tLSBhL200L2Rpcm5hbWUubTQKKysrIGIvbTQvZGlybmFtZS5tNApAQCAtMSwxNiArMSwxOSBAQAotIyBkaXJuYW1lLm00IHNlcmlhbCA1Ci1kbmwgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorI3NlcmlhbCAxMCAgIC0qLSBhdXRvY29uZiAtKi0KK2RubCBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKIGRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKIEFDX0RFRlVOKFtnbF9ESVJOQU1FXSwKIFsKLSAgQUNfTElCU09VUkNFUyhbZGlybmFtZS5jLCBkaXJuYW1lLmhdKQotICBBQ19MSUJPQkooW2Rpcm5hbWVdKQorICBBQ19SRVFVSVJFKFtnbF9ESVJOQU1FX0xHUExdKQorXSkKIAorQUNfREVGVU4oW2dsX0RJUk5BTUVfTEdQTF0sCitbCiAgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9kaXJuYW1lLmguCi0gIEFDX1JFUVVJUkUoW2dsX0FDX0RPU10pCisgIEFDX1JFUVVJUkUoW2dsX0RPVUJMRV9TTEFTSF9ST09UXSkKIAotICBkbmwgTm8gcHJlcmVxdWlzaXRlcyBvZiBsaWIvYmFzZW5hbWUuYywgbGliL2Rpcm5hbWUuYywgbGliL3N0cmlwc2xhc2guYy4KKyAgZG5sIE5vIHByZXJlcXVpc2l0ZXMgb2YgbGliL2Jhc2VuYW1lLWxncGwuYywgbGliL2Rpcm5hbWUtbGdwbC5jLAorICBkbmwgbGliL3N0cmlwc2xhc2guYy4KIF0pCmRpZmYgLS1naXQgYS9tNC9kbWFsbG9jLm00IGIvbTQvZG1hbGxvYy5tNAppbmRleCBmNzI0NjcwLi45MGU3MmY2IDEwMDY0NAotLS0gYS9tNC9kbWFsbG9jLm00CisrKyBiL200L2RtYWxsb2MubTQKQEAgLTEyLDcgKzEyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5kbWFsbG9jLmNvbS9kbWFsbG9jLnRhci5nel0sCiBbaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCiAgIEFDX01TR19SRVNVTFQoeWVzKQotICBBQ19ERUZJTkUoV0lUSF9ETUFMTE9DLDEsCisgIEFDX0RFRklORShbV0lUSF9ETUFMTE9DXSwxLAogICAgICAgICAgICAgW0RlZmluZSBpZiB1c2luZyB0aGUgZG1hbGxvYyBkZWJ1Z2dpbmcgbWFsbG9jIHBhY2thZ2VdKQogICBMSUJTPSIkTElCUyAtbGRtYWxsb2MiCiAgIExERkxBR1M9IiRMREZMQUdTIC1nIgpkaWZmIC0tZ2l0IGEvbTQvZG9zLm00IGIvbTQvZG9zLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzEzY2YxLi4wMDAwMDAwCi0tLSBhL200L2Rvcy5tNAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLSNzZXJpYWwgOQotCi0jIERlZmluZSBzb21lIG1hY3JvcyByZXF1aXJlZCBmb3IgcHJvcGVyIG9wZXJhdGlvbiBvZiBjb2RlIGluIGxpYi8qLmMKLSMgb24gTVNET1MvV2luZG93cyBzeXN0ZW1zLgotCi0jIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIEZyb20gSmltIE1leWVyaW5nLgotCi1BQ19ERUZVTihbZ2xfQUNfRE9TXSwKLSAgWwotICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHN5c3RlbSBpcyBXaW5kb3dzIG9yIE1TRE9TXSwgW2FjX2N2X3dpbl9vcl9kb3NdLAotICAgICAgWwotICAgICAgICBBQ19UUllfQ09NUElMRShbXSwKLSAgICAgICAgWyNpZiAhZGVmaW5lZCBfV0lOMzIgJiYgIWRlZmluZWQgX19XSU4zMl9fICYmICFkZWZpbmVkIF9fTVNET1NfXyAmJiAhZGVmaW5lZCBfX0NZR1dJTl9fCi1uZWl0aGVyIE1TRE9TIG5vciBXaW5kb3dzCi0jZW5kaWZdLAotICAgICAgICBbYWNfY3Zfd2luX29yX2Rvcz15ZXNdLAotICAgICAgICBbYWNfY3Zfd2luX29yX2Rvcz1ub10pCi0gICAgICBdKQotCi0gICAgaWYgdGVzdCB4IiRhY19jdl93aW5fb3JfZG9zIiA9IHh5ZXM7IHRoZW4KLSAgICAgIGFjX2ZzX2FjY2VwdHNfZHJpdmVfbGV0dGVyX3ByZWZpeD0xCi0gICAgICBhY19mc19iYWNrc2xhc2hfaXNfZmlsZV9uYW1lX3NlcGFyYXRvcj0xCi0gICAgZWxzZQotICAgICAgYWNfZnNfYWNjZXB0c19kcml2ZV9sZXR0ZXJfcHJlZml4PTAKLSAgICAgIGFjX2ZzX2JhY2tzbGFzaF9pc19maWxlX25hbWVfc2VwYXJhdG9yPTAKLSAgICBmaQotCi0gICAgQUhfVkVSQkFUSU0oRklMRV9TWVNURU1fUFJFRklYX0xFTiwKLSAgICBbI2lmIEZJTEVfU1lTVEVNX0FDQ0VQVFNfRFJJVkVfTEVUVEVSX1BSRUZJWAotIyBkZWZpbmUgRklMRV9TWVNURU1fUFJFRklYX0xFTihGaWxlbmFtZSkgXAotICAoKEZpbGVuYW1lKVswXSAmJiAoRmlsZW5hbWUpWzFdID09ICc6JyA/IDIgOiAwKQotI2Vsc2UKLSMgZGVmaW5lIEZJTEVfU1lTVEVNX1BSRUZJWF9MRU4oRmlsZW5hbWUpIDAKLSNlbmRpZl0pCi0KLSAgICBBQ19ERUZJTkVfVU5RVU9URUQoW0ZJTEVfU1lTVEVNX0FDQ0VQVFNfRFJJVkVfTEVUVEVSX1BSRUZJWF0sCi0gICAgICAkYWNfZnNfYWNjZXB0c19kcml2ZV9sZXR0ZXJfcHJlZml4LAotICAgICAgW0RlZmluZSBvbiBzeXN0ZW1zIGZvciB3aGljaCBmaWxlIG5hbWVzIG1heSBoYXZlIGEgc28tY2FsbGVkCi0gICAgICAgYGRyaXZlIGxldHRlcicgcHJlZml4LCBkZWZpbmUgdGhpcyB0byBjb21wdXRlIHRoZSBsZW5ndGggb2YgdGhhdAotICAgICAgIHByZWZpeCwgaW5jbHVkaW5nIHRoZSBjb2xvbi5dKQotCi0gICAgQUhfVkVSQkFUSU0oSVNTTEFTSCwKLSAgICBbI2lmIEZJTEVfU1lTVEVNX0JBQ0tTTEFTSF9JU19GSUxFX05BTUVfU0VQQVJBVE9SCi0jIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nIHx8IChDKSA9PSAnXFwnKQotI2Vsc2UKLSMgZGVmaW5lIElTU0xBU0goQykgKChDKSA9PSAnLycpCi0jZW5kaWZdKQotCi0gICAgQUNfREVGSU5FX1VOUVVPVEVEKFtGSUxFX1NZU1RFTV9CQUNLU0xBU0hfSVNfRklMRV9OQU1FX1NFUEFSQVRPUl0sCi0gICAgICAkYWNfZnNfYmFja3NsYXNoX2lzX2ZpbGVfbmFtZV9zZXBhcmF0b3IsCi0gICAgICBbRGVmaW5lIGlmIHRoZSBiYWNrc2xhc2ggY2hhcmFjdGVyIG1heSBhbHNvIHNlcnZlIGFzIGEgZmlsZSBuYW1lCi0gICAgICAgY29tcG9uZW50IHNlcGFyYXRvci5dKQotICBdKQpkaWZmIC0tZ2l0IGEvbTQvZG91YmxlLXNsYXNoLXJvb3QubTQgYi9tNC9kb3VibGUtc2xhc2gtcm9vdC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTAzNzUxCi0tLSAvZGV2L251bGwKKysrIGIvbTQvZG91YmxlLXNsYXNoLXJvb3QubTQKQEAgLTAsMCArMSwzOCBAQAorIyBkb3VibGUtc2xhc2gtcm9vdC5tNCBzZXJpYWwgNCAgIC0qLSBBdXRvY29uZiAtKi0KK2RubCBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ2xfRE9VQkxFX1NMQVNIX1JPT1RdLAorWworICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIC8vIGlzIGRpc3RpbmN0IGZyb20gL10sIFtnbF9jdl9kb3VibGVfc2xhc2hfcm9vdF0sCisgICAgWyBpZiB0ZXN0IHgiJGNyb3NzX2NvbXBpbGluZyIgPSB4eWVzIDsgdGhlbgorICAgICAgICAjIFdoZW4gY3Jvc3MtY29tcGlsaW5nLCB0aGVyZSBpcyBubyB3YXkgdG8gdGVsbCB3aGV0aGVyIC8vIGlzIHNwZWNpYWwKKyAgICAgICAgIyBzaG9ydCBvZiBhIGxpc3Qgb2YgaG9zdHMuICBIb3dldmVyLCB0aGUgb25seSBrbm93biBob3N0cyB0byBkYXRlCisgICAgICAgICMgdGhhdCBoYXZlIGEgZGlzdGluY3QgLy8gYXJlIEFwb2xsbyBEb21haW5PUyAodG9vIG9sZCB0byBwb3J0IHRvKSwKKyAgICAgICAgIyBDeWd3aW4sIGFuZCB6L09TLiAgSWYgYW55b25lIGtub3dzIG9mIGFub3RoZXIgc3lzdGVtIGZvciB3aGljaCAvLyBoYXMKKyAgICAgICAgIyBzcGVjaWFsIHNlbWFudGljcyBhbmQgaXMgZGlzdGluY3QgZnJvbSAvLCBwbGVhc2UgcmVwb3J0IGl0IHRvCisgICAgICAgICMgPGJ1Zy1nbnVsaWJAZ251Lm9yZz4uCisgICAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICAgICAqLWN5Z3dpbiB8IGkzNzAtaWJtLW9wZW5lZGl0aW9uKQorICAgICAgICAgICAgZ2xfY3ZfZG91YmxlX3NsYXNoX3Jvb3Q9eWVzIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgICMgQmUgb3B0aW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQgLyBhbmQgLy8gYXJlIHRoZSBzYW1lIHdoZW4gd2UKKyAgICAgICAgICAgICMgZG9uJ3Qga25vdy4KKyAgICAgICAgICAgIGdsX2N2X2RvdWJsZV9zbGFzaF9yb290PSd1bmtub3duLCBhc3N1bWluZyBubycgOzsKKyAgICAgICAgZXNhYworICAgICAgZWxzZQorICAgICAgICBzZXQgeCBgbHMgLWRpIC8gLy8gMj4vZGV2L251bGxgCisgICAgICAgIGlmIHRlc3QgIiRbMl0iID0gIiRbNF0iICYmIHdjIC8vZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgICAgZ2xfY3ZfZG91YmxlX3NsYXNoX3Jvb3Q9bm8KKyAgICAgICAgZWxzZQorICAgICAgICAgIGdsX2N2X2RvdWJsZV9zbGFzaF9yb290PXllcworICAgICAgICBmaQorICAgICAgZmldKQorICBpZiB0ZXN0ICIkZ2xfY3ZfZG91YmxlX3NsYXNoX3Jvb3QiID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKFtET1VCTEVfU0xBU0hfSVNfRElTVElOQ1RfUk9PVF0sIFsxXSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiAvLyBpcyBhIGZpbGUgc3lzdGVtIHJvb3QgZGlzdGluY3QgZnJvbSAvLl0pCisgIGZpCitdKQpkaWZmIC0tZ2l0IGEvbTQvZHVwMi5tNCBiL200L2R1cDIubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM4NmU4MAotLS0gL2Rldi9udWxsCisrKyBiL200L2R1cDIubTQKQEAgLTAsMCArMSw4MSBAQAorI3NlcmlhbCAxOAorZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9GVU5DX0RVUDJdLAorWworICBBQ19SRVFVSVJFKFtnbF9VTklTVERfSF9ERUZBVUxUU10pCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKyAgbTRfaWZkZWYoW2dsX0ZVTkNfRFVQMl9PQlNPTEVURV0sIFsKKyAgICBBQ19DSEVDS19GVU5DU19PTkNFKFtkdXAyXSkKKyAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2R1cDIgPSBubzsgdGhlbgorICAgICAgSEFWRV9EVVAyPTAKKyAgICBmaQorICBdLCBbCisgICAgQUNfREVGSU5FKFtIQVZFX0RVUDJdLCBbMV0sIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgJ2R1cDInIGZ1bmN0aW9uLl0pCisgIF0pCisgIGlmIHRlc3QgJEhBVkVfRFVQMiA9IDE7IHRoZW4KKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBkdXAyIHdvcmtzXSwgW2dsX2N2X2Z1bmNfZHVwMl93b3Jrc10sCisgICAgICBbQUNfUlVOX0lGRUxTRShbCisgICAgICAgICBBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPl1dLAorICAgICAgICAgICBbaW50IHJlc3VsdCA9IDA7CisjaWZkZWYgRkRfQ0xPRVhFQworICAgICAgICAgICAgaWYgKGZjbnRsICgxLCBGX1NFVEZELCBGRF9DTE9FWEVDKSA9PSAtMSkKKyAgICAgICAgICAgICAgcmVzdWx0IHw9IDE7CisjZW5kaWYKKyAgICAgICAgICAgIGlmIChkdXAyICgxLCAxKSA9PSAwKQorICAgICAgICAgICAgICByZXN1bHQgfD0gMjsKKyNpZmRlZiBGRF9DTE9FWEVDCisgICAgICAgICAgICBpZiAoZmNudGwgKDEsIEZfR0VURkQpICE9IEZEX0NMT0VYRUMpCisgICAgICAgICAgICAgIHJlc3VsdCB8PSA0OworI2VuZGlmCisgICAgICAgICAgICBjbG9zZSAoMCk7CisgICAgICAgICAgICBpZiAoZHVwMiAoMCwgMCkgIT0gLTEpCisgICAgICAgICAgICAgIHJlc3VsdCB8PSA4OworICAgICAgICAgICAgLyogTWFueSBnbnVsaWIgbW9kdWxlcyByZXF1aXJlIFBPU0lYIGNvbmZvcm1hbmNlIG9mIEVCQURGLiAgKi8KKyAgICAgICAgICAgIGlmIChkdXAyICgyLCAxMDAwMDAwKSA9PSAtMSAmJiBlcnJubyAhPSBFQkFERikKKyAgICAgICAgICAgICAgcmVzdWx0IHw9IDE2OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgXSkKKyAgICAgICAgXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfZHVwMl93b3Jrcz15ZXNdLCBbZ2xfY3ZfZnVuY19kdXAyX3dvcmtzPW5vXSwKKyAgICAgICAgW2Nhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICBtaW5ndyopICMgb24gdGhpcyBwbGF0Zm9ybSwgZHVwMiBhbHdheXMgcmV0dXJucyAwIGZvciBzdWNjZXNzCisgICAgICAgICAgICAgZ2xfY3ZfZnVuY19kdXAyX3dvcmtzPSJndWVzc2luZyBubyIgOzsKKyAgICAgICAgICAgY3lnd2luKikgIyBvbiBjeWd3aW4gMS41LngsIGR1cDIoMSwxKSByZXR1cm5zIDAKKyAgICAgICAgICAgICBnbF9jdl9mdW5jX2R1cDJfd29ya3M9Imd1ZXNzaW5nIG5vIiA7OworICAgICAgICAgICBsaW51eCopICMgT24gbGludXggYmV0d2VlbiAyMDA4LTA3LTI3IGFuZCAyMDA5LTA1LTExLCBkdXAyIG9mIGEKKyAgICAgICAgICAgICAgICAgICAjIGNsb3NlZCBmZCBtYXkgeWllbGQgLUVCQURGIGluc3RlYWQgb2YgLTEgLyBlcnJubz1FQkFERi4KKyAgICAgICAgICAgICBnbF9jdl9mdW5jX2R1cDJfd29ya3M9Imd1ZXNzaW5nIG5vIiA7OworICAgICAgICAgICBmcmVlYnNkKikgIyBvbiBGcmVlQlNEIDYuMSwgZHVwMigxLDEwMDAwMDApIGdpdmVzIEVNRklMRSwgbm90IEVCQURGLgorICAgICAgICAgICAgIGdsX2N2X2Z1bmNfZHVwMl93b3Jrcz0iZ3Vlc3Npbmcgbm8iIDs7CisgICAgICAgICAgIGhhaWt1KikgIyBvbiBIYWlrdSBhbHBoYSAyLCBkdXAyKDEsIDEpIHJlc2V0cyBGRF9DTE9FWEVDLgorICAgICAgICAgICAgIGdsX2N2X2Z1bmNfZHVwMl93b3Jrcz0iZ3Vlc3Npbmcgbm8iIDs7CisgICAgICAgICAgICopIGdsX2N2X2Z1bmNfZHVwMl93b3Jrcz0iZ3Vlc3NpbmcgeWVzIiA7OworICAgICAgICAgZXNhY10pCisgICAgICBdKQorICAgIGNhc2UgIiRnbF9jdl9mdW5jX2R1cDJfd29ya3MiIGluCisgICAgICAqeWVzKSA7OworICAgICAgKikKKyAgICAgICAgUkVQTEFDRV9EVVAyPTEKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIGRubCBSZXBsYWNlIGR1cDIoKSBmb3Igc3VwcG9ydGluZyB0aGUgZ251bGliLWRlZmluZWQgZmNoZGlyKCkgZnVuY3Rpb24sCisgIGRubCB0byBrZWVwIGZjaGRpcidzIGJvb2trZWVwaW5nIHVwLXRvLWRhdGUuCisgIG00X2lmZGVmKFtnbF9GVU5DX0ZDSERJUl0sIFsKKyAgICBnbF9URVNUX0ZDSERJUgorICAgIGlmIHRlc3QgJEhBVkVfRkNIRElSID0gMDsgdGhlbgorICAgICAgaWYgdGVzdCAkSEFWRV9EVVAyID0gMTsgdGhlbgorICAgICAgICBSRVBMQUNFX0RVUDI9MQorICAgICAgZmkKKyAgICBmaQorICBdKQorXSkKKworIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9kdXAyLmMuCitBQ19ERUZVTihbZ2xfUFJFUkVRX0RVUDJdLCBbXSkKZGlmZiAtLWdpdCBhL200L2Vudmlyb24ubTQgYi9tNC9lbnZpcm9uLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYjU3YzkKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9lbnZpcm9uLm00CkBAIC0wLDAgKzEsNDcgQEAKKyMgZW52aXJvbi5tNCBzZXJpYWwgNgorZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDA0LCAyMDA2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU5fT05DRShbZ2xfRU5WSVJPTl0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1VOSVNURF9IX0RFRkFVTFRTXSkKKyAgZG5sIFBlcnN1YWRlIGdsaWJjIDx1bmlzdGQuaD4gdG8gZGVjbGFyZSBlbnZpcm9uLgorICBBQ19SRVFVSVJFKFtnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorCisgIEFDX0NIRUNLX0hFQURFUlNfT05DRShbdW5pc3RkLmhdKQorICBndF9DSEVDS19WQVJfREVDTCgKKyAgICBbI2lmIEhBVkVfVU5JU1REX0gKKyAgICAgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICAgICAjZW5kaWYKKyAgICAgLyogbWluZ3csIEJlT1MsIEhhaWt1IGRlY2xhcmUgZW52aXJvbiBpbiA8c3RkbGliLmg+LCBub3QgaW4gPHVuaXN0ZC5oPi4gICovCisgICAgICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAgICBdLAorICAgIFtlbnZpcm9uXSkKKyAgaWYgdGVzdCAkZ3RfY3ZfdmFyX2Vudmlyb25fZGVjbGFyYXRpb24gIT0geWVzOyB0aGVuCisgICAgSEFWRV9ERUNMX0VOVklST049MAorICBmaQorXSkKKworIyBDaGVjayBpZiBhIHZhcmlhYmxlIGlzIHByb3Blcmx5IGRlY2xhcmVkLgorIyBndF9DSEVDS19WQVJfREVDTChpbmNsdWRlcyx2YXJpYWJsZSkKK0FDX0RFRlVOKFtndF9DSEVDS19WQVJfREVDTF0sCitbCisgIGRlZmluZShbZ3RfY3ZfdmFyXSwgW2d0X2N2X3Zhcl9dJDJbX2RlY2xhcmF0aW9uXSkKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiAkMiBpcyBwcm9wZXJseSBkZWNsYXJlZF0pCisgIEFDX0NBQ0hFX1ZBTChbZ3RfY3ZfdmFyXSwgWworICAgIEFDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgIFtbJDEKKyAgICAgICAgICAgZXh0ZXJuIHN0cnVjdCB7IGludCBmb287IH0gJDI7XV0sCisgICAgICAgICBbWyQyLmZvbyA9IDE7XV0pXSwKKyAgICAgIFtndF9jdl92YXI9bm9dLAorICAgICAgW2d0X2N2X3Zhcj15ZXNdKV0pCisgIEFDX01TR19SRVNVTFQoWyRndF9jdl92YXJdKQorICBpZiB0ZXN0ICRndF9jdl92YXIgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoW0hBVkVfXW00X3RyYW5zbGl0KCQyLCBbYS16XSwgW0EtWl0pW19ERUNMXSwgMSwKKyAgICAgICAgICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgJDIuXSkKKyAgZmkKKyAgdW5kZWZpbmUoW2d0X2N2X3Zhcl0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvZXJybm9faC5tNCBiL200L2Vycm5vX2gubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUzM2JhOAotLS0gL2Rldi9udWxsCisrKyBiL200L2Vycm5vX2gubTQKQEAgLTAsMCArMSwxMzcgQEAKKyMgZXJybm9faC5tNCBzZXJpYWwgMTIKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTl9PTkNFKFtnbF9IRUFERVJfRVJSTk9fSF0sCitbCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorICBBQ19DQUNIRV9DSEVDSyhbZm9yIGNvbXBsZXRlIGVycm5vLmhdLCBbZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfY29tcGxldGVdLCBbCisgICAgQUNfRUdSRVBfQ1BQKFtib29ib29dLFsKKyNpbmNsdWRlIDxlcnJuby5oPgorI2lmICFkZWZpbmVkIEVUWFRCU1kKK2Jvb2JvbworI2VuZGlmCisjaWYgIWRlZmluZWQgRU5PTVNHCitib29ib28KKyNlbmRpZgorI2lmICFkZWZpbmVkIEVJRFJNCitib29ib28KKyNlbmRpZgorI2lmICFkZWZpbmVkIEVOT0xJTksKK2Jvb2JvbworI2VuZGlmCisjaWYgIWRlZmluZWQgRVBST1RPCitib29ib28KKyNlbmRpZgorI2lmICFkZWZpbmVkIEVNVUxUSUhPUAorYm9vYm9vCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBFQkFETVNHCitib29ib28KKyNlbmRpZgorI2lmICFkZWZpbmVkIEVPVkVSRkxPVworYm9vYm9vCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBFTk9UU1VQCitib29ib28KKyNlbmRpZgorI2lmICFkZWZpbmVkIEVORVRSRVNFVAorYm9vYm9vCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBFQ09OTkFCT1JURUQKK2Jvb2JvbworI2VuZGlmCisjaWYgIWRlZmluZWQgRVNUQUxFCitib29ib28KKyNlbmRpZgorI2lmICFkZWZpbmVkIEVEUVVPVAorYm9vYm9vCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBFQ0FOQ0VMRUQKK2Jvb2JvbworI2VuZGlmCisjaWYgIWRlZmluZWQgRU9XTkVSREVBRAorYm9vYm9vCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBFTk9UUkVDT1ZFUkFCTEUKK2Jvb2JvbworI2VuZGlmCisjaWYgIWRlZmluZWQgRUlMU0VRCitib29ib28KKyNlbmRpZgorICAgICAgXSwKKyAgICAgIFtnbF9jdl9oZWFkZXJfZXJybm9faF9jb21wbGV0ZT1ub10sCisgICAgICBbZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfY29tcGxldGU9eWVzXSkKKyAgXSkKKyAgaWYgdGVzdCAkZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfY29tcGxldGUgPSB5ZXM7IHRoZW4KKyAgICBFUlJOT19IPScnCisgIGVsc2UKKyAgICBnbF9ORVhUX0hFQURFUlMoW2Vycm5vLmhdKQorICAgIEVSUk5PX0g9J2Vycm5vLmgnCisgIGZpCisgIEFDX1NVQlNUKFtFUlJOT19IXSkKKyAgQU1fQ09ORElUSU9OQUwoW0dMX0dFTkVSQVRFX0VSUk5PX0hdLCBbdGVzdCAtbiAiJEVSUk5PX0giXSkKKyAgZ2xfUkVQTEFDRV9FUlJOT19WQUxVRShbRU1VTFRJSE9QXSkKKyAgZ2xfUkVQTEFDRV9FUlJOT19WQUxVRShbRU5PTElOS10pCisgIGdsX1JFUExBQ0VfRVJSTk9fVkFMVUUoW0VPVkVSRkxPV10pCitdKQorCisjIEFzc3VtaW5nICQxID0gRU9WRVJGTE9XLgorIyBUaGUgRU9WRVJGTE9XIGVycm5vIHZhbHVlIG91Z2h0IHRvIGJlIGRlZmluZWQgaW4gPGVycm5vLmg+LCBhY2NvcmRpbmcgdG8KKyMgUE9TSVguICBCdXQgc29tZSBzeXN0ZW1zIChsaWtlIE9wZW5CU0QgNC4wIG9yIEFJWCAzKSBkb24ndCBkZWZpbmUgaXQsIGFuZAorIyBzb21lIHN5c3RlbXMgKGxpa2UgT1NGLzEpIGRlZmluZSBpdCB3aGVuIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgaXMgZGVmaW5lZC4KKyMgQ2hlY2sgZm9yIHRoZSB2YWx1ZSBvZiBFT1ZFUkZMT1cuCisjIFNldCB0aGUgdmFyaWFibGVzIEVPVkVSRkxPV19ISURERU4gYW5kIEVPVkVSRkxPV19WQUxVRS4KK0FDX0RFRlVOKFtnbF9SRVBMQUNFX0VSUk5PX1ZBTFVFXSwKK1sKKyAgaWYgdGVzdCAtbiAiJEVSUk5PX0giOyB0aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBdJDFbIHZhbHVlXSwgW2dsX2N2X2hlYWRlcl9lcnJub19oX10kMSwgWworICAgICAgQUNfRUdSRVBfQ1BQKFt5ZXNdLFsKKyNpbmNsdWRlIDxlcnJuby5oPgorI2lmZGVmIF0kMVsKK3llcworI2VuZGlmCisgICAgICBdLAorICAgICAgW2dsX2N2X2hlYWRlcl9lcnJub19oX10kMVs9eWVzXSwKKyAgICAgIFtnbF9jdl9oZWFkZXJfZXJybm9faF9dJDFbPW5vXSkKKyAgICAgIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9lcnJub19oX10kMVsgPSBubzsgdGhlbgorICAgICAgICBBQ19FR1JFUF9DUFAoW3llc10sWworI2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVEIDEKKyNpbmNsdWRlIDxlcnJuby5oPgorI2lmZGVmIF0kMVsKK3llcworI2VuZGlmCisgICAgICAgICAgXSwgW2dsX2N2X2hlYWRlcl9lcnJub19oX10kMVs9aGlkZGVuXSkKKyAgICAgICAgaWYgdGVzdCAkZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfXSQxWyA9IGhpZGRlbjsgdGhlbgorICAgICAgICAgIGRubCBUaGUgbWFjcm8gZXhpc3RzIGJ1dCBpcyBoaWRkZW4uCisgICAgICAgICAgZG5sIERlZmluZSBpdCB0byB0aGUgc2FtZSB2YWx1ZS4KKyAgICAgICAgICBBQ19DT01QVVRFX0lOVChbZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfXSQxLCAkMSwgWworI2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVEIDEKKyNpbmNsdWRlIDxlcnJuby5oPgorLyogVGhlIGZvbGxvd2luZyB0d28gbGluZXMgYXJlIGEgd29ya2Fyb3VuZCBhZ2FpbnN0IGFuIGF1dG9jb25mLTIuNTIgYnVnLiAgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorXSkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgXSkKKyAgICBjYXNlICRnbF9jdl9oZWFkZXJfZXJybm9faF9dJDFbIGluCisgICAgICB5ZXMgfCBubykKKyAgICAgICAgXSQxW19ISURERU49MDsgXSQxW19WQUxVRT0KKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIF0kMVtfSElEREVOPTE7IF0kMVtfVkFMVUU9IiRnbF9jdl9oZWFkZXJfZXJybm9faF9dJDFbIgorICAgICAgICA7OworICAgIGVzYWMKKyAgICBBQ19TVUJTVCgkMVtfSElEREVOXSkKKyAgICBBQ19TVUJTVCgkMVtfVkFMVUVdKQorICBmaQorXSkKKworZG5sIEF1dG9jb25mID49IDIuNjEgaGFzIEFDX0NPTVBVVEVfSU5UIGJ1aWx0LWluLgorZG5sIFJlbW92ZSB0aGlzIHdoZW4gd2UgY2FuIGFzc3VtZSBhdXRvY29uZiA+PSAyLjYxLgorbTRfaWZkZWYoW0FDX0NPTVBVVEVfSU5UXSwgW10sIFsKKyAgQUNfREVGVU4oW0FDX0NPTVBVVEVfSU5UXSwgW19BQ19DT01QVVRFX0lOVChbJDJdLFskMV0sWyQzXSxbJDRdKV0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvZXJyb3IubTQgYi9tNC9lcnJvci5tNAppbmRleCA3Yzc3NDZlLi4xMTkwZTMyIDEwMDY0NAotLS0gYS9tNC9lcnJvci5tNAorKysgYi9tNC9lcnJvci5tNApAQCAtMSw3ICsxLDYgQEAKLSNzZXJpYWwgMTEKKyNzZXJpYWwgMTQKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMTk5Ni0xOTk4LCAyMDAxLTIwMDQsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKQEAgLTksOSArOCwxNSBAQAogCiBBQ19ERUZVTihbZ2xfRVJST1JdLAogWwotICBBQ19GVU5DX0VSUk9SX0FUX0xJTkUKLSAgZG5sIE5vdGU6IEFDX0ZVTkNfRVJST1JfQVRfTElORSBkb2VzIEFDX0xJQlNPVVJDRVMoW2Vycm9yLmgsIGVycm9yLmNdKS4KLSAgZ2xfUFJFUkVRX0VSUk9SCisgIGRubCBXZSBkb24ndCB1c2UgQUNfRlVOQ19FUlJPUl9BVF9MSU5FIGFueSBtb3JlLCBiZWNhdXNlIGl0IGlzIG5vIGxvbmdlcgorICBkbmwgbWFpbnRhaW5lZCBpbiBBdXRvY29uZiBhbmQgYmVjYXVzZSBpdCBpbnZva2VzIEFDX0xJQk9CSi4KKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBlcnJvcl9hdF9saW5lXSwgW2FjX2N2X2xpYl9lcnJvcl9hdF9saW5lXSwKKyAgICBbQUNfTElOS19JRkVMU0UoCisgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICBbWyNpbmNsdWRlIDxlcnJvci5oPl1dLAorICAgICAgICAgIFtbZXJyb3JfYXRfbGluZSAoMCwgMCwgIiIsIDAsICJhbiBlcnJvciBvY2N1cnJlZCIpO11dKV0sCisgICAgICAgW2FjX2N2X2xpYl9lcnJvcl9hdF9saW5lPXllc10sCisgICAgICAgW2FjX2N2X2xpYl9lcnJvcl9hdF9saW5lPW5vXSldKQogXSkKIAogIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9lcnJvci5jLgpkaWZmIC0tZ2l0IGEvbTQvZXhpdGZhaWwubTQgYi9tNC9leGl0ZmFpbC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTUyMzY3Ni4uMDAwMDAwMAotLS0gYS9tNC9leGl0ZmFpbC5tNAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLSMgZXhpdGZhaWwubTQgc2VyaWFsIDUKLWRubCBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLWRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotQUNfREVGVU4oW2dsX0VYSVRGQUlMXSwKLVsKLSAgQUNfTElCU09VUkNFUyhbZXhpdGZhaWwuYywgZXhpdGZhaWwuaF0pCi0gIEFDX0xJQk9CSihbZXhpdGZhaWxdKQotCi0gIGRubCBObyBwcmVyZXF1aXNpdGVzIG9mIGxpYi9leGl0ZmFpbC5jLgotICA6Ci1dKQpkaWZmIC0tZ2l0IGEvbTQvZXhwb25lbnRkLm00IGIvbTQvZXhwb25lbnRkLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZTRjY2YKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9leHBvbmVudGQubTQKQEAgLTAsMCArMSwxMTYgQEAKKyMgZXhwb25lbnRkLm00IHNlcmlhbCAzCitkbmwgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDgsIDIwMTAtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorQUNfREVGVU4oW2dsX0RPVUJMRV9FWFBPTkVOVF9MT0NBVElPTl0sCitbCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGVyZSB0byBmaW5kIHRoZSBleHBvbmVudCBpbiBhICdkb3VibGUnXSwKKyAgICBbZ2xfY3ZfY2NfZG91YmxlX2V4cGJpdDBdLAorICAgIFsKKyAgICAgIEFDX1JVTl9JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNkZWZpbmUgTldPUkRTIFwKKyAgKChzaXplb2YgKGRvdWJsZSkgKyBzaXplb2YgKHVuc2lnbmVkIGludCkgLSAxKSAvIHNpemVvZiAodW5zaWduZWQgaW50KSkKK3R5cGVkZWYgdW5pb24geyBkb3VibGUgdmFsdWU7IHVuc2lnbmVkIGludCB3b3JkW05XT1JEU107IH0gbWVtb3J5X2RvdWJsZTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb3JlZF93b3Jkc1tOV09SRFNdOworc3RhdGljIHVuc2lnbmVkIGludCBhbmRlZF93b3Jkc1tOV09SRFNdOworc3RhdGljIHZvaWQgYWRkX3RvX29yZWRfd29yZHMgKGRvdWJsZSB4KQoreworICBtZW1vcnlfZG91YmxlIG07CisgIHNpemVfdCBpOworICAvKiBDbGVhciBpdCBmaXJzdCwgaW4gY2FzZSBzaXplb2YgKGRvdWJsZSkgPCBzaXplb2YgKG1lbW9yeV9kb3VibGUpLiAgKi8KKyAgbWVtc2V0ICgmbSwgMCwgc2l6ZW9mIChtZW1vcnlfZG91YmxlKSk7CisgIG0udmFsdWUgPSB4OworICBmb3IgKGkgPSAwOyBpIDwgTldPUkRTOyBpKyspCisgICAgeworICAgICAgb3JlZF93b3Jkc1tpXSB8PSBtLndvcmRbaV07CisgICAgICBhbmRlZF93b3Jkc1tpXSAmPSBtLndvcmRbaV07CisgICAgfQorfQoraW50IG1haW4gKCkKK3sKKyAgc2l6ZV90IGo7CisgIEZJTEUgKmZwID0gZm9wZW4gKCJjb25mdGVzdC5vdXQiLCAidyIpOworICBpZiAoZnAgPT0gTlVMTCkKKyAgICByZXR1cm4gMTsKKyAgZm9yIChqID0gMDsgaiA8IE5XT1JEUzsgaisrKQorICAgIGFuZGVkX3dvcmRzW2pdID0gfiAodW5zaWduZWQgaW50KSAwOworICBhZGRfdG9fb3JlZF93b3JkcyAoMC4yNSk7CisgIGFkZF90b19vcmVkX3dvcmRzICgwLjUpOworICBhZGRfdG9fb3JlZF93b3JkcyAoMS4wKTsKKyAgYWRkX3RvX29yZWRfd29yZHMgKDIuMCk7CisgIGFkZF90b19vcmVkX3dvcmRzICg0LjApOworICAvKiBSZW1vdmUgYml0cyB0aGF0IGFyZSBjb21tb24gKGUuZy4gaWYgcmVwcmVzZW50YXRpb24gb2YgdGhlIGZpcnN0IG1hbnRpc3NhCisgICAgIGJpdCBpcyBleHBsaWNpdCkuICAqLworICBmb3IgKGogPSAwOyBqIDwgTldPUkRTOyBqKyspCisgICAgb3JlZF93b3Jkc1tqXSAmPSB+YW5kZWRfd29yZHNbal07CisgIC8qIE5vdyBmaW5kIHRoZSBub256ZXJvIHdvcmQuICAqLworICBmb3IgKGogPSAwOyBqIDwgTldPUkRTOyBqKyspCisgICAgaWYgKG9yZWRfd29yZHNbal0gIT0gMCkKKyAgICAgIGJyZWFrOworICBpZiAoaiA8IE5XT1JEUykKKyAgICB7CisgICAgICBzaXplX3QgaTsKKyAgICAgIGZvciAoaSA9IGogKyAxOyBpIDwgTldPUkRTOyBpKyspCisgICAgICAgIGlmIChvcmVkX3dvcmRzW2ldICE9IDApCisgICAgICAgICAgeworICAgICAgICAgICAgZnByaW50ZiAoZnAsICJ1bmtub3duIik7CisgICAgICAgICAgICByZXR1cm4gKGZjbG9zZSAoZnApICE9IDApOworICAgICAgICAgIH0KKyAgICAgIGZvciAoaSA9IDA7IDsgaSsrKQorICAgICAgICBpZiAoKG9yZWRfd29yZHNbal0gPj4gaSkgJiAxKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGZwcmludGYgKGZwLCAid29yZCAlZCBiaXQgJWQiLCAoaW50KSBqLCAoaW50KSBpKTsKKyAgICAgICAgICAgIHJldHVybiAoZmNsb3NlIChmcCkgIT0gMCk7CisgICAgICAgICAgfQorICAgIH0KKyAgZnByaW50ZiAoZnAsICJ1bmtub3duIik7CisgIHJldHVybiAoZmNsb3NlIChmcCkgIT0gMCk7Cit9CisgICAgICAgIF1dKV0sCisgICAgICAgIFtnbF9jdl9jY19kb3VibGVfZXhwYml0MD1gY2F0IGNvbmZ0ZXN0Lm91dGBdLAorICAgICAgICBbZ2xfY3ZfY2NfZG91YmxlX2V4cGJpdDA9InVua25vd24iXSwKKyAgICAgICAgWworICAgICAgICAgIGRubCBPbiBBUk0sIHRoZXJlIGFyZSB0d28gJ2RvdWJsZScgZmxvYXRpbmctcG9pbnQgZm9ybWF0cywgdXNlZCBieQorICAgICAgICAgIGRubCBkaWZmZXJlbnQgc2V0cyBvZiBpbnN0cnVjdGlvbnM6IFRoZSBvbGRlciBGUEEgaW5zdHJ1Y3Rpb25zIGFzc3VtZQorICAgICAgICAgIGRubCB0aGF0IHRoZXkgYXJlIHN0b3JlZCBpbiBiaWctZW5kaWFuIHdvcmQgb3JkZXIsIHdoaWxlIHRoZSB3b3JkcworICAgICAgICAgIGRubCAobGlrZSBpbnRlZ2VyIHR5cGVzKSBhcmUgc3RvcmVkIGluIGxpdHRsZS1lbmRpYW4gYnl0ZSBvcmRlci4KKyAgICAgICAgICBkbmwgVGhlIG5ld2VyIFZGUCBpbnN0cnVjdGlvbnMgYXNzdW1lIGxpdHRsZS1lbmRpYW4gb3JkZXIKKyAgICAgICAgICBkbmwgY29uc2lzdGVudGx5LgorICAgICAgICAgIEFDX0VHUkVQX0NQUChbbWl4ZWRfZW5kaWFubmVzc10sIFsKKyNpZiBkZWZpbmVkIGFybSB8fCBkZWZpbmVkIF9fYXJtIHx8IGRlZmluZWQgX19hcm1fXworICBtaXhlZF9lbmRpYW5uZXNzCisjZW5kaWYKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICBbZ2xfY3ZfY2NfZG91YmxlX2V4cGJpdDA9InVua25vd24iXSwKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgcHVzaGRlZihbQUNfTVNHX0NIRUNLSU5HXSxbOl0pZG5sCisgICAgICAgICAgICAgIHB1c2hkZWYoW0FDX01TR19SRVNVTFRdLFs6XSlkbmwKKyAgICAgICAgICAgICAgcHVzaGRlZihbQUNfTVNHX1JFU1VMVF9VTlFVT1RFRF0sWzpdKWRubAorICAgICAgICAgICAgICBBQ19DX0JJR0VORElBTigKKyAgICAgICAgICAgICAgICBbZ2xfY3ZfY2NfZG91YmxlX2V4cGJpdDA9IndvcmQgMCBiaXQgMjAiXSwKKyAgICAgICAgICAgICAgICBbZ2xfY3ZfY2NfZG91YmxlX2V4cGJpdDA9IndvcmQgMSBiaXQgMjAiXSwKKyAgICAgICAgICAgICAgICBbZ2xfY3ZfY2NfZG91YmxlX2V4cGJpdDA9InVua25vd24iXSkKKyAgICAgICAgICAgICAgcG9wZGVmKFtBQ19NU0dfUkVTVUxUX1VOUVVPVEVEXSlkbmwKKyAgICAgICAgICAgICAgcG9wZGVmKFtBQ19NU0dfUkVTVUxUXSlkbmwKKyAgICAgICAgICAgICAgcG9wZGVmKFtBQ19NU0dfQ0hFQ0tJTkddKWRubAorICAgICAgICAgICAgXSkKKyAgICAgICAgXSkKKyAgICAgIHJtIC1mIGNvbmZ0ZXN0Lm91dAorICAgIF0pCisgIGNhc2UgIiRnbF9jdl9jY19kb3VibGVfZXhwYml0MCIgaW4KKyAgICB3b3JkKmJpdCopCisgICAgICB3b3JkPWBlY2hvICIkZ2xfY3ZfY2NfZG91YmxlX2V4cGJpdDAiIHwgc2VkIC1lICdzL3dvcmQgLy8nIC1lICdzLyBiaXQuKi8vJ2AKKyAgICAgIGJpdD1gZWNobyAiJGdsX2N2X2NjX2RvdWJsZV9leHBiaXQwIiB8IHNlZCAtZSAncy93b3JkLipiaXQgLy8nYAorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtEQkxfRVhQQklUMF9XT1JEXSwgWyR3b3JkXSwKKyAgICAgICAgW0RlZmluZSBhcyB0aGUgd29yZCBpbmRleCB3aGVyZSB0byBmaW5kIHRoZSBleHBvbmVudCBvZiAnZG91YmxlJy5dKQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtEQkxfRVhQQklUMF9CSVRdLCBbJGJpdF0sCisgICAgICAgIFtEZWZpbmUgYXMgdGhlIGJpdCBpbmRleCBpbiB0aGUgd29yZCB3aGVyZSB0byBmaW5kIGJpdCAwIG9mIHRoZSBleHBvbmVudCBvZiAnZG91YmxlJy5dKQorICAgICAgOzsKKyAgZXNhYworXSkKZGlmZiAtLWdpdCBhL200L2V4cG9uZW50Zi5tNCBiL200L2V4cG9uZW50Zi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGQxMTY3Ci0tLSAvZGV2L251bGwKKysrIGIvbTQvZXhwb25lbnRmLm00CkBAIC0wLDAgKzEsOTIgQEAKKyMgZXhwb25lbnRmLm00IHNlcmlhbCAyCitkbmwgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDgsIDIwMTAtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorQUNfREVGVU4oW2dsX0ZMT0FUX0VYUE9ORU5UX0xPQ0FUSU9OXSwKK1sKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXJlIHRvIGZpbmQgdGhlIGV4cG9uZW50IGluIGEgJ2Zsb2F0J10sCisgICAgW2dsX2N2X2NjX2Zsb2F0X2V4cGJpdDBdLAorICAgIFsKKyAgICAgIEFDX1JVTl9JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNkZWZpbmUgTldPUkRTIFwKKyAgKChzaXplb2YgKGZsb2F0KSArIHNpemVvZiAodW5zaWduZWQgaW50KSAtIDEpIC8gc2l6ZW9mICh1bnNpZ25lZCBpbnQpKQordHlwZWRlZiB1bmlvbiB7IGZsb2F0IHZhbHVlOyB1bnNpZ25lZCBpbnQgd29yZFtOV09SRFNdOyB9IG1lbW9yeV9mbG9hdDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb3JlZF93b3Jkc1tOV09SRFNdOworc3RhdGljIHVuc2lnbmVkIGludCBhbmRlZF93b3Jkc1tOV09SRFNdOworc3RhdGljIHZvaWQgYWRkX3RvX29yZWRfd29yZHMgKGZsb2F0IHgpCit7CisgIG1lbW9yeV9mbG9hdCBtOworICBzaXplX3QgaTsKKyAgLyogQ2xlYXIgaXQgZmlyc3QsIGluIGNhc2UKKyAgICAgc2l6ZW9mIChmbG9hdCkgPCBzaXplb2YgKG1lbW9yeV9mbG9hdCkuICAqLworICBtZW1zZXQgKCZtLCAwLCBzaXplb2YgKG1lbW9yeV9mbG9hdCkpOworICBtLnZhbHVlID0geDsKKyAgZm9yIChpID0gMDsgaSA8IE5XT1JEUzsgaSsrKQorICAgIHsKKyAgICAgIG9yZWRfd29yZHNbaV0gfD0gbS53b3JkW2ldOworICAgICAgYW5kZWRfd29yZHNbaV0gJj0gbS53b3JkW2ldOworICAgIH0KK30KK2ludCBtYWluICgpCit7CisgIHNpemVfdCBqOworICBGSUxFICpmcCA9IGZvcGVuICgiY29uZnRlc3Qub3V0IiwgInciKTsKKyAgaWYgKGZwID09IE5VTEwpCisgICAgcmV0dXJuIDE7CisgIGZvciAoaiA9IDA7IGogPCBOV09SRFM7IGorKykKKyAgICBhbmRlZF93b3Jkc1tqXSA9IH4gKHVuc2lnbmVkIGludCkgMDsKKyAgYWRkX3RvX29yZWRfd29yZHMgKDAuMjVmKTsKKyAgYWRkX3RvX29yZWRfd29yZHMgKDAuNWYpOworICBhZGRfdG9fb3JlZF93b3JkcyAoMS4wZik7CisgIGFkZF90b19vcmVkX3dvcmRzICgyLjBmKTsKKyAgYWRkX3RvX29yZWRfd29yZHMgKDQuMGYpOworICAvKiBSZW1vdmUgYml0cyB0aGF0IGFyZSBjb21tb24gKGUuZy4gaWYgcmVwcmVzZW50YXRpb24gb2YgdGhlIGZpcnN0IG1hbnRpc3NhCisgICAgIGJpdCBpcyBleHBsaWNpdCkuICAqLworICBmb3IgKGogPSAwOyBqIDwgTldPUkRTOyBqKyspCisgICAgb3JlZF93b3Jkc1tqXSAmPSB+YW5kZWRfd29yZHNbal07CisgIC8qIE5vdyBmaW5kIHRoZSBub256ZXJvIHdvcmQuICAqLworICBmb3IgKGogPSAwOyBqIDwgTldPUkRTOyBqKyspCisgICAgaWYgKG9yZWRfd29yZHNbal0gIT0gMCkKKyAgICAgIGJyZWFrOworICBpZiAoaiA8IE5XT1JEUykKKyAgICB7CisgICAgICBzaXplX3QgaTsKKyAgICAgIGZvciAoaSA9IGogKyAxOyBpIDwgTldPUkRTOyBpKyspCisgICAgICAgIGlmIChvcmVkX3dvcmRzW2ldICE9IDApCisgICAgICAgICAgeworICAgICAgICAgICAgZnByaW50ZiAoZnAsICJ1bmtub3duIik7CisgICAgICAgICAgICByZXR1cm4gKGZjbG9zZSAoZnApICE9IDApOworICAgICAgICAgIH0KKyAgICAgIGZvciAoaSA9IDA7IDsgaSsrKQorICAgICAgICBpZiAoKG9yZWRfd29yZHNbal0gPj4gaSkgJiAxKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGZwcmludGYgKGZwLCAid29yZCAlZCBiaXQgJWQiLCAoaW50KSBqLCAoaW50KSBpKTsKKyAgICAgICAgICAgIHJldHVybiAoZmNsb3NlIChmcCkgIT0gMCk7CisgICAgICAgICAgfQorICAgIH0KKyAgZnByaW50ZiAoZnAsICJ1bmtub3duIik7CisgIHJldHVybiAoZmNsb3NlIChmcCkgIT0gMCk7Cit9CisgICAgICAgIF1dKV0sCisgICAgICAgIFtnbF9jdl9jY19mbG9hdF9leHBiaXQwPWBjYXQgY29uZnRlc3Qub3V0YF0sCisgICAgICAgIFtnbF9jdl9jY19mbG9hdF9leHBiaXQwPSJ1bmtub3duIl0sCisgICAgICAgIFtnbF9jdl9jY19mbG9hdF9leHBiaXQwPSJ3b3JkIDAgYml0IDIzIl0pCisgICAgICBybSAtZiBjb25mdGVzdC5vdXQKKyAgICBdKQorICBjYXNlICIkZ2xfY3ZfY2NfZmxvYXRfZXhwYml0MCIgaW4KKyAgICB3b3JkKmJpdCopCisgICAgICB3b3JkPWBlY2hvICIkZ2xfY3ZfY2NfZmxvYXRfZXhwYml0MCIgfCBzZWQgLWUgJ3Mvd29yZCAvLycgLWUgJ3MvIGJpdC4qLy8nYAorICAgICAgYml0PWBlY2hvICIkZ2xfY3ZfY2NfZmxvYXRfZXhwYml0MCIgfCBzZWQgLWUgJ3Mvd29yZC4qYml0IC8vJ2AKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChbRkxUX0VYUEJJVDBfV09SRF0sIFskd29yZF0sCisgICAgICAgIFtEZWZpbmUgYXMgdGhlIHdvcmQgaW5kZXggd2hlcmUgdG8gZmluZCB0aGUgZXhwb25lbnQgb2YgJ2Zsb2F0Jy5dKQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtGTFRfRVhQQklUMF9CSVRdLCBbJGJpdF0sCisgICAgICAgIFtEZWZpbmUgYXMgdGhlIGJpdCBpbmRleCBpbiB0aGUgd29yZCB3aGVyZSB0byBmaW5kIGJpdCAwIG9mIHRoZSBleHBvbmVudCBvZiAnZmxvYXQnLl0pCisgICAgICA7OworICBlc2FjCitdKQpkaWZmIC0tZ2l0IGEvbTQvZXhwb25lbnRsLm00IGIvbTQvZXhwb25lbnRsLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3Y2QxM2IKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9leHBvbmVudGwubTQKQEAgLTAsMCArMSw5OCBAQAorIyBleHBvbmVudGwubTQgc2VyaWFsIDMKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorQUNfREVGVU4oW2dsX0xPTkdfRE9VQkxFX0VYUE9ORU5UX0xPQ0FUSU9OXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfQklHRU5ESUFOXSkKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXJlIHRvIGZpbmQgdGhlIGV4cG9uZW50IGluIGEgJ2xvbmcgZG91YmxlJ10sCisgICAgW2dsX2N2X2NjX2xvbmdfZG91YmxlX2V4cGJpdDBdLAorICAgIFsKKyAgICAgIEFDX1JVTl9JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNkZWZpbmUgTldPUkRTIFwKKyAgKChzaXplb2YgKGxvbmcgZG91YmxlKSArIHNpemVvZiAodW5zaWduZWQgaW50KSAtIDEpIC8gc2l6ZW9mICh1bnNpZ25lZCBpbnQpKQordHlwZWRlZiB1bmlvbiB7IGxvbmcgZG91YmxlIHZhbHVlOyB1bnNpZ25lZCBpbnQgd29yZFtOV09SRFNdOyB9CisgICAgICAgIG1lbW9yeV9sb25nX2RvdWJsZTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb3JlZF93b3Jkc1tOV09SRFNdOworc3RhdGljIHVuc2lnbmVkIGludCBhbmRlZF93b3Jkc1tOV09SRFNdOworc3RhdGljIHZvaWQgYWRkX3RvX29yZWRfd29yZHMgKGxvbmcgZG91YmxlIHgpCit7CisgIG1lbW9yeV9sb25nX2RvdWJsZSBtOworICBzaXplX3QgaTsKKyAgLyogQ2xlYXIgaXQgZmlyc3QsIGluIGNhc2UKKyAgICAgc2l6ZW9mIChsb25nIGRvdWJsZSkgPCBzaXplb2YgKG1lbW9yeV9sb25nX2RvdWJsZSkuICAqLworICBtZW1zZXQgKCZtLCAwLCBzaXplb2YgKG1lbW9yeV9sb25nX2RvdWJsZSkpOworICBtLnZhbHVlID0geDsKKyAgZm9yIChpID0gMDsgaSA8IE5XT1JEUzsgaSsrKQorICAgIHsKKyAgICAgIG9yZWRfd29yZHNbaV0gfD0gbS53b3JkW2ldOworICAgICAgYW5kZWRfd29yZHNbaV0gJj0gbS53b3JkW2ldOworICAgIH0KK30KK2ludCBtYWluICgpCit7CisgIHNpemVfdCBqOworICBGSUxFICpmcCA9IGZvcGVuICgiY29uZnRlc3Qub3V0IiwgInciKTsKKyAgaWYgKGZwID09IE5VTEwpCisgICAgcmV0dXJuIDE7CisgIGZvciAoaiA9IDA7IGogPCBOV09SRFM7IGorKykKKyAgICBhbmRlZF93b3Jkc1tqXSA9IH4gKHVuc2lnbmVkIGludCkgMDsKKyAgYWRkX3RvX29yZWRfd29yZHMgKDAuMjVMKTsKKyAgYWRkX3RvX29yZWRfd29yZHMgKDAuNUwpOworICBhZGRfdG9fb3JlZF93b3JkcyAoMS4wTCk7CisgIGFkZF90b19vcmVkX3dvcmRzICgyLjBMKTsKKyAgYWRkX3RvX29yZWRfd29yZHMgKDQuMEwpOworICAvKiBSZW1vdmUgYml0cyB0aGF0IGFyZSBjb21tb24gKGUuZy4gaWYgcmVwcmVzZW50YXRpb24gb2YgdGhlIGZpcnN0IG1hbnRpc3NhCisgICAgIGJpdCBpcyBleHBsaWNpdCkuICAqLworICBmb3IgKGogPSAwOyBqIDwgTldPUkRTOyBqKyspCisgICAgb3JlZF93b3Jkc1tqXSAmPSB+YW5kZWRfd29yZHNbal07CisgIC8qIE5vdyBmaW5kIHRoZSBub256ZXJvIHdvcmQuICAqLworICBmb3IgKGogPSAwOyBqIDwgTldPUkRTOyBqKyspCisgICAgaWYgKG9yZWRfd29yZHNbal0gIT0gMCkKKyAgICAgIGJyZWFrOworICBpZiAoaiA8IE5XT1JEUykKKyAgICB7CisgICAgICBzaXplX3QgaTsKKyAgICAgIGZvciAoaSA9IGogKyAxOyBpIDwgTldPUkRTOyBpKyspCisgICAgICAgIGlmIChvcmVkX3dvcmRzW2ldICE9IDApCisgICAgICAgICAgeworICAgICAgICAgICAgZnByaW50ZiAoZnAsICJ1bmtub3duIik7CisgICAgICAgICAgICByZXR1cm4gKGZjbG9zZSAoZnApICE9IDApOworICAgICAgICAgIH0KKyAgICAgIGZvciAoaSA9IDA7IDsgaSsrKQorICAgICAgICBpZiAoKG9yZWRfd29yZHNbal0gPj4gaSkgJiAxKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGZwcmludGYgKGZwLCAid29yZCAlZCBiaXQgJWQiLCAoaW50KSBqLCAoaW50KSBpKTsKKyAgICAgICAgICAgIHJldHVybiAoZmNsb3NlIChmcCkgIT0gMCk7CisgICAgICAgICAgfQorICAgIH0KKyAgZnByaW50ZiAoZnAsICJ1bmtub3duIik7CisgIHJldHVybiAoZmNsb3NlIChmcCkgIT0gMCk7Cit9CisgICAgICAgIF1dKV0sCisgICAgICAgIFtnbF9jdl9jY19sb25nX2RvdWJsZV9leHBiaXQwPWBjYXQgY29uZnRlc3Qub3V0YF0sCisgICAgICAgIFtnbF9jdl9jY19sb25nX2RvdWJsZV9leHBiaXQwPSJ1bmtub3duIl0sCisgICAgICAgIFsKKyAgICAgICAgICBkbmwgV2hlbiBjcm9zcy1jb21waWxpbmcsIHdlIGRvbid0IGtub3cuIEl0IGRlcGVuZHMgb24gdGhlCisgICAgICAgICAgZG5sIEFCSSBhbmQgY29tcGlsZXIgdmVyc2lvbi4gVGhlcmUgYXJlIHRvbyBtYW55IGNhc2VzLgorICAgICAgICAgIGdsX2N2X2NjX2xvbmdfZG91YmxlX2V4cGJpdDA9InVua25vd24iCisgICAgICAgIF0pCisgICAgICBybSAtZiBjb25mdGVzdC5vdXQKKyAgICBdKQorICBjYXNlICIkZ2xfY3ZfY2NfbG9uZ19kb3VibGVfZXhwYml0MCIgaW4KKyAgICB3b3JkKmJpdCopCisgICAgICB3b3JkPWBlY2hvICIkZ2xfY3ZfY2NfbG9uZ19kb3VibGVfZXhwYml0MCIgfCBzZWQgLWUgJ3Mvd29yZCAvLycgLWUgJ3MvIGJpdC4qLy8nYAorICAgICAgYml0PWBlY2hvICIkZ2xfY3ZfY2NfbG9uZ19kb3VibGVfZXhwYml0MCIgfCBzZWQgLWUgJ3Mvd29yZC4qYml0IC8vJ2AKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChbTERCTF9FWFBCSVQwX1dPUkRdLCBbJHdvcmRdLAorICAgICAgICBbRGVmaW5lIGFzIHRoZSB3b3JkIGluZGV4IHdoZXJlIHRvIGZpbmQgdGhlIGV4cG9uZW50IG9mICdsb25nIGRvdWJsZScuXSkKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChbTERCTF9FWFBCSVQwX0JJVF0sIFskYml0XSwKKyAgICAgICAgW0RlZmluZSBhcyB0aGUgYml0IGluZGV4IGluIHRoZSB3b3JkIHdoZXJlIHRvIGZpbmQgYml0IDAgb2YgdGhlIGV4cG9uZW50IG9mICdsb25nIGRvdWJsZScuXSkKKyAgICAgIDs7CisgIGVzYWMKK10pCmRpZmYgLS1naXQgYS9tNC9leHRlbnNpb25zLm00IGIvbTQvZXh0ZW5zaW9ucy5tNAppbmRleCA0OTc2MDc5Li42ZDE3ZDhhIDEwMDY0NAotLS0gYS9tNC9leHRlbnNpb25zLm00CisrKyBiL200L2V4dGVuc2lvbnMubTQKQEAgLTEsNDIgKzEsMTIzIEBACisjIHNlcmlhbCAxMiAgLSotIEF1dG9jb25mIC0qLQogIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLgogCi0jIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBUaGlzIGZpbGUgaXMgb25seSBuZWVkZWQgaW4gYXV0b2NvbmYgPD0gMi41OS4gIE5ld2VyIHZlcnNpb25zIG9mIGF1dG9jb25mCi0jIGhhdmUgYSBtYWNybyBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMgd2l0aCBpZGVudGljYWwgc2VtYW50aWNzLgorIyBUaGlzIGRlZmluaXRpb24gb2YgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TIGlzIHN0b2xlbiBmcm9tIENWUworIyBBdXRvY29uZi4gIFBlcmhhcHMgd2UgY2FuIHJlbW92ZSB0aGlzIG9uY2Ugd2UgY2FuIGFzc3VtZSBBdXRvY29uZgorIyAyLjYyIG9yIGxhdGVyIGV2ZXJ5d2hlcmUsIGJ1dCBzaW5jZSBDVlMgQXV0b2NvbmYgbXV0YXRlcyByYXBpZGx5CisjIGVub3VnaCBpbiB0aGlzIGFyZWEgaXQncyBsaWtlbHkgd2UnbGwgbmVlZCB0byByZWRlZmluZQorIyBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMgZm9yIHF1aXRlIHNvbWUgdGltZS4KKworIyBJZiBhdXRvY29uZiByZXBvcnRzIGEgd2FybmluZworIyAgICAgd2FybmluZzogQUNfQ09NUElMRV9JRkVMU0Ugd2FzIGNhbGxlZCBiZWZvcmUgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisjIG9yICB3YXJuaW5nOiBBQ19SVU5fSUZFTFNFIHdhcyBjYWxsZWQgYmVmb3JlIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUworIyB0aGUgZml4IGlzCisjICAgMSkgdG8gZW5zdXJlIHRoYXQgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TIGlzIG5ldmVyIGRpcmVjdGx5IGludm9rZWQKKyMgICAgICBidXQgYWx3YXlzIEFDX1JFUVVJUkVkLAorIyAgIDIpIHRvIGVuc3VyZSB0aGF0IGZvciBlYWNoIG9jY3VycmVuY2Ugb2YKKyMgICAgICAgIEFDX1JFUVVJUkUoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10pCisjICAgICAgb3IKKyMgICAgICAgIEFDX1JFUVVJUkUoW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10pCisjICAgICAgdGhlIGNvcnJlc3BvbmRpbmcgZ251bGliIG1vZHVsZSBkZXNjcmlwdGlvbiBoYXMgJ2V4dGVuc2lvbnMnIGFtb25nCisjICAgICAgaXRzIGRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIGVuc3VyZSB0aGF0IHRoZSBnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyMgICAgICBpbnZvY2F0aW9uIG9jY3VycyBpbiBnbF9FQVJMWSwgbm90IGluIGdsX0lOSVQuCisKKyMgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLAorIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCisjIFJlbWVtYmVyIHRoYXQgI3VuZGVmIGluIEFIX1ZFUkJBVElNIGdldHMgcmVwbGFjZWQgd2l0aCAjZGVmaW5lIGJ5CisjIEFDX0RFRklORS4gIFRoZSBnb2FsIGhlcmUgaXMgdG8gZGVmaW5lIGFsbCBrbm93biBmZWF0dXJlLWVuYWJsaW5nCisjIG1hY3JvcywgdGhlbiwgaWYgcmVwb3J0cyBvZiBjb25mbGljdHMgYXJlIG1hZGUsIGRpc2FibGUgbWFjcm9zIHRoYXQKKyMgY2F1c2UgcHJvYmxlbXMgb24gc29tZSBwbGF0Zm9ybXMgKHN1Y2ggYXMgX19FWFRFTlNJT05TX18pLgorQUNfREVGVU5fT05DRShbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSwKK1tBQ19CRUZPUkUoWyQwXSwgW0FDX0NPTVBJTEVfSUZFTFNFXSlkbmwKK0FDX0JFRk9SRShbJDBdLCBbQUNfUlVOX0lGRUxTRV0pZG5sCisKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorCisgIEFDX0NIRUNLX0hFQURFUihbbWluaXgvY29uZmlnLmhdLCBbTUlOSVg9eWVzXSwgW01JTklYPV0pCisgIGlmIHRlc3QgIiRNSU5JWCIgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoW19QT1NJWF9TT1VSQ0VdLCBbMV0sCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IG5lZWQgdG8gaW4gb3JkZXIgZm9yICdzdGF0JyBhbmQgb3RoZXIKKyAgICAgICB0aGluZ3MgdG8gd29yay5dKQorICAgIEFDX0RFRklORShbX1BPU0lYXzFfU09VUkNFXSwgWzJdLAorICAgICAgW0RlZmluZSB0byAyIGlmIHRoZSBzeXN0ZW0gZG9lcyBub3QgcHJvdmlkZSBQT1NJWC4xIGZlYXR1cmVzCisgICAgICAgZXhjZXB0IHdpdGggdGhpcyBkZWZpbmVkLl0pCisgICAgQUNfREVGSU5FKFtfTUlOSVhdLCBbMV0sCisgICAgICBbRGVmaW5lIHRvIDEgaWYgb24gTUlOSVguXSkKKyAgZmkKKworICBkbmwgSFAtVVggMTEuMTEgZGVmaW5lcyBtYnN0YXRlX3Qgb25seSBpZiBfWE9QRU5fU09VUkNFIGlzIGRlZmluZWQgdG8gNTAwLAorICBkbmwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBmbGFncyAtQWUgb3IgX0RfSFBVWF9TT1VSQ0U9MSBhcmUgYWxyZWFkeQorICBkbmwgcHJvdmlkZWQuCisgIGNhc2UgIiRob3N0X29zIiBpbgorICAgIGhwdXgqKQorICAgICAgQUNfREVGSU5FKFtfWE9QRU5fU09VUkNFXSwgWzUwMF0sCisgICAgICAgIFtEZWZpbmUgdG8gNTAwIG9ubHkgb24gSFAtVVguXSkKKyAgICAgIDs7CisgIGVzYWMKKworICBBSF9WRVJCQVRJTShbX19FWFRFTlNJT05TX19dLAorWy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIEFJWCAzLCBJbnRlcml4LiAgKi8KKyNpZm5kZWYgX0FMTF9TT1VSQ0UKKyMgdW5kZWYgX0FMTF9TT1VSQ0UKKyNlbmRpZgorLyogRW5hYmxlIGdlbmVyYWwgZXh0ZW5zaW9ucyBvbiBNYWMgT1MgWC4gICovCisjaWZuZGVmIF9EQVJXSU5fQ19TT1VSQ0UKKyMgdW5kZWYgX0RBUldJTl9DX1NPVVJDRQorI2VuZGlmCisvKiBFbmFibGUgR05VIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IGhhdmUgdGhlbS4gICovCisjaWZuZGVmIF9HTlVfU09VUkNFCisjIHVuZGVmIF9HTlVfU09VUkNFCisjZW5kaWYKKy8qIEVuYWJsZSB0aHJlYWRpbmcgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKyNpZm5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisjIHVuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworI2VuZGlmCisvKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBIUCBOb25TdG9wLiAgKi8KKyNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKyMgdW5kZWYgX1RBTkRFTV9TT1VSQ0UKKyNlbmRpZgorLyogRW5hYmxlIGdlbmVyYWwgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKyNpZm5kZWYgX19FWFRFTlNJT05TX18KKyMgdW5kZWYgX19FWFRFTlNJT05TX18KKyNlbmRpZgorXSkKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJT05TX19dLAorICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfX10sCisgICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgIFtBQ19MQU5HX1BST0dSQU0oW1sKKyMgICAgICAgICBkZWZpbmUgX19FWFRFTlNJT05TX18gMQorICAgICAgICAgIF1BQ19JTkNMVURFU19ERUZBVUxUXSldLAorICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz15ZXNdLAorICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz1ub10pXSkKKyAgdGVzdCAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18gPSB5ZXMgJiYKKyAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKKyAgQUNfREVGSU5FKFtfQUxMX1NPVVJDRV0pCisgIEFDX0RFRklORShbX0RBUldJTl9DX1NPVVJDRV0pCisgIEFDX0RFRklORShbX0dOVV9TT1VSQ0VdKQorICBBQ19ERUZJTkUoW19QT1NJWF9QVEhSRUFEX1NFTUFOVElDU10pCisgIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorXSkjIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUwogCiAjIGdsX1VTRV9TWVNURU1fRVhURU5TSU9OUwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbSwKICMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgotQUNfREVGVU4oW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10sIFsKLSAgQUNfQkVGT1JFKFskMF0sIFtBQ19DT01QSUxFX0lGRUxTRV0pCi0gIEFDX0JFRk9SRShbJDBdLCBbQUNfUlVOX0lGRUxTRV0pCi0KK0FDX0RFRlVOX09OQ0UoW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCitbCisgIGRubCBSZXF1aXJlIHRoaXMgbWFjcm8gYmVmb3JlIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUy4KKyAgZG5sIGdudWxpYiBkb2VzIG5vdCBuZWVkIGl0LiBCdXQgaWYgaXQgZ2V0cyByZXF1aXJlZCBieSB0aGlyZC1wYXJ0eSBtYWNyb3MKKyAgZG5sIGFmdGVyIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBpcyByZXF1aXJlZCwgYXV0b2NvbmYgMi42Mi4uMi42MyBlbWl0IGEKKyAgZG5sIHdhcm5pbmc6ICJBQ19DT01QSUxFX0lGRUxTRSB3YXMgY2FsbGVkIGJlZm9yZSBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMiLgorICBkbmwgTm90ZTogV2UgY2FuIGRvIHRoaXMgb25seSBmb3Igb25lIG9mIHRoZSBtYWNyb3MgQUNfQUlYLCBBQ19HTlVfU09VUkNFLAorICBkbmwgQUNfTUlOSVguIElmIHBlb3BsZSBzdGlsbCB1c2UgQUNfQUlYIG9yIEFDX01JTklYLCB0aGV5IGFyZSBvdXQgb2YgbHVjay4KICAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCi0gIEFDX1JFUVVJUkUoW0FDX0FJWF0pCi0gIEFDX1JFUVVJUkUoW0FDX01JTklYXSkKIAotICBBSF9WRVJCQVRJTShbX19FWFRFTlNJT05TX19dLAotWy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIFNvbGFyaXMuICAqLwotI2lmbmRlZiBfX0VYVEVOU0lPTlNfXwotIyB1bmRlZiBfX0VYVEVOU0lPTlNfXwotI2VuZGlmCi0jaWZuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUwotIyB1bmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKLSNlbmRpZl0pCi0gIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fXSwKLSAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX19dLAotICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKLSAgICAgICBbQUNfTEFOR19QUk9HUkFNKFsKLQkgICNkZWZpbmUgX19FWFRFTlNJT05TX18gMQotCSAgQUNfSU5DTFVERVNfREVGQVVMVF0pXSwKLSAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189eWVzXSwKLSAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm9dKV0pCi0gIHRlc3QgJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fID0geWVzICYmCi0gICAgQUNfREVGSU5FKFtfX0VYVEVOU0lPTlNfX10pCi0gIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKyAgQUNfUkVRVUlSRShbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSkKIF0pCmRpZmYgLS1naXQgYS9tNC9leHRlcm4taW5saW5lLm00IGIvbTQvZXh0ZXJuLWlubGluZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTlmYzlhCi0tLSAvZGV2L251bGwKKysrIGIvbTQvZXh0ZXJuLWlubGluZS5tNApAQCAtMCwwICsxLDYyIEBACitkbmwgJ2V4dGVybiBpbmxpbmUnIGEgbGEgSVNPIEM5OS4KKworZG5sIENvcHlyaWdodCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9FWFRFUk5fSU5MSU5FXSwKK1sKKyAgQUhfVkVSQkFUSU0oW2V4dGVybl9pbmxpbmVdLAorWy8qIF9HTF9JTkxJTkUgaXMgYSBwb3J0YWJsZSBhbHRlcm5hdGl2ZSB0byBJU08gQzk5IHBsYWluICdpbmxpbmUnLgorICAgX0dMX0VYVEVSTl9JTkxJTkUgaXMgYSBwb3J0YWJsZSBhbHRlcm5hdGl2ZSB0byAnZXh0ZXJuIGlubGluZScuCisgICBfR0xfSU5MSU5FX0hFQURFUl9CRUdJTiBjb250YWlucyB1c2VmdWwgc3R1ZmYgdG8gcHV0CisgICAgIGluIGFuIGluY2x1ZGUgZmlsZSwgYmVmb3JlIHVzZXMgb2YgX0dMX0lOTElORS4KKyAgICAgSXQgc3VwcHJlc3NlcyBHQ0MncyBib2d1cyAibm8gcHJldmlvdXMgcHJvdG90eXBlIGZvciAnRk9PJyIgZGlhZ25vc3RpYywKKyAgICAgd2hlbiBGT08gaXMgYW4gaW5saW5lIGZ1bmN0aW9uIGluIHRoZSBoZWFkZXI7IHNlZQorICAgICA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01NDExMz4uCisgICBfR0xfSU5MSU5FX0hFQURFUl9FTkQgY29udGFpbnMgdXNlZnVsIHN0dWZmIHRvIHB1dAorICAgICBpbiB0aGUgc2FtZSBpbmNsdWRlIGZpbGUsIGFmdGVyIHVzZXMgb2YgX0dMX0lOTElORS4KKworICAgU3VwcHJlc3MgdGhlIHVzZSBvZiBleHRlcm4gaW5saW5lIG9uIEFwcGxlJ3MgcGxhdGZvcm1zLAorICAgYXMgTGliYy04MjUuMjUgKDIwMTItMDktMTkpIGlzIGluY29tcGF0aWJsZSB3aXRoIGl0OyBzZWUKKyAgIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWdudWxpYi8yMDEyLTEyL21zZzAwMDIzLmh0bWw+LgorICAgUGVyaGFwcyBBcHBsZSB3aWxsIGZpeCB0aGlzIHNvbWUgZGF5LiAgKi8KKyNpZiAoKF9fR05VQ19fIFwKKyAgICAgID8gZGVmaW5lZCBfX0dOVUNfU1REQ19JTkxJTkVfXyAmJiBfX0dOVUNfU1REQ19JTkxJTkVfXyBcCisgICAgICA6IDE5OTkwMUwgPD0gX19TVERDX1ZFUlNJT05fXykgXAorICAgICAmJiAhZGVmaW5lZCBfX0FQUExFX18pCisjIGRlZmluZSBfR0xfSU5MSU5FIGlubGluZQorIyBkZWZpbmUgX0dMX0VYVEVSTl9JTkxJTkUgZXh0ZXJuIGlubGluZQorI2VsaWYgMiA8IF9fR05VQ19fICsgKDcgPD0gX19HTlVDX01JTk9SX18pICYmICFkZWZpbmVkIF9fQVBQTEVfXworIyBpZiBfX0dOVUNfR05VX0lOTElORV9fCisgICAvKiBfX2dudV9pbmxpbmVfXyBzdXBwcmVzc2VzIGEgR0NDIDQuMiBkaWFnbm9zdGljLiAgKi8KKyMgIGRlZmluZSBfR0xfSU5MSU5FIGV4dGVybiBpbmxpbmUgX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fKSkKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9JTkxJTkUgZXh0ZXJuIGlubGluZQorIyBlbmRpZgorIyBkZWZpbmUgX0dMX0VYVEVSTl9JTkxJTkUgZXh0ZXJuCisjZWxzZQorIyBkZWZpbmUgX0dMX0lOTElORSBzdGF0aWMgX0dMX1VOVVNFRAorIyBkZWZpbmUgX0dMX0VYVEVSTl9JTkxJTkUgc3RhdGljIF9HTF9VTlVTRUQKKyNlbmRpZgorCisjaWYgNCA8IF9fR05VQ19fICsgKDYgPD0gX19HTlVDX01JTk9SX18pCisjIGlmIGRlZmluZWQgX19HTlVDX1NURENfSU5MSU5FX18gJiYgX19HTlVDX1NURENfSU5MSU5FX18KKyMgIGRlZmluZSBfR0xfSU5MSU5FX0hFQURFUl9DT05TVF9QUkFHTUEKKyMgZWxzZQorIyAgZGVmaW5lIF9HTF9JTkxJTkVfSEVBREVSX0NPTlNUX1BSQUdNQSBcCisgICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdzdWdnZXN0LWF0dHJpYnV0ZT1jb25zdFwiIikKKyMgZW5kaWYKKyMgZGVmaW5lIF9HTF9JTkxJTkVfSEVBREVSX0JFR0lOIFwKKyAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgcHVzaCIpIFwKKyAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XbWlzc2luZy1wcm90b3R5cGVzXCIiKSBcCisgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV21pc3NpbmctZGVjbGFyYXRpb25zXCIiKSBcCisgICAgX0dMX0lOTElORV9IRUFERVJfQ09OU1RfUFJBR01BCisjIGRlZmluZSBfR0xfSU5MSU5FX0hFQURFUl9FTkQgXAorICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBwb3AiKQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9JTkxJTkVfSEVBREVSX0JFR0lOCisjIGRlZmluZSBfR0xfSU5MSU5FX0hFQURFUl9FTkQKKyNlbmRpZl0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvZmF0YWwtc2lnbmFsLm00IGIvbTQvZmF0YWwtc2lnbmFsLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMDJkZTcKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9mYXRhbC1zaWduYWwubTQKQEAgLTAsMCArMSwxMiBAQAorIyBmYXRhbC1zaWduYWwubTQgc2VyaWFsIDkKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCwgMjAwNiwgMjAwOC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9GQVRBTF9TSUdOQUxdLAorWworICBBQ19SRVFVSVJFKFtndF9UWVBFX1NJR19BVE9NSUNfVF0pCisgIEFDX0NIRUNLX0hFQURFUlNfT05DRShbdW5pc3RkLmhdKQorICBnbF9QUkVSRVFfU0lHX0hBTkRMRVJfSAorXSkKZGlmZiAtLWdpdCBhL200L2ZjbnRsLW8ubTQgYi9tNC9mY250bC1vLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MGU3OGIKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9mY250bC1vLm00CkBAIC0wLDAgKzEsMTM0IEBACisjIGZjbnRsLW8ubTQgc2VyaWFsIDQKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgV3JpdHRlbiBieSBQYXVsIEVnZ2VydC4KKworIyBUZXN0IHdoZXRoZXIgdGhlIGZsYWdzIE9fTk9BVElNRSBhbmQgT19OT0ZPTExPVyBhY3R1YWxseSB3b3JrLgorIyBEZWZpbmUgSEFWRV9XT1JLSU5HX09fTk9BVElNRSB0byAxIGlmIE9fTk9BVElNRSB3b3Jrcywgb3IgdG8gMCBvdGhlcndpc2UuCisjIERlZmluZSBIQVZFX1dPUktJTkdfT19OT0ZPTExPVyB0byAxIGlmIE9fTk9GT0xMT1cgd29ya3MsIG9yIHRvIDAgb3RoZXJ3aXNlLgorQUNfREVGVU4oW2dsX0ZDTlRMX09fRkxBR1NdLAorWworICBkbmwgUGVyc3VhZGUgZ2xpYmMgPGZjbnRsLmg+IHRvIGRlZmluZSBPX05PQVRJTUUgYW5kIE9fTk9GT0xMT1cuCisgIGRubCBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMgd2FzIGludHJvZHVjZWQgaW4gYXV0b2NvbmYgMi42MCBhbmQgb2Jzb2xldGVzCisgIGRubCBBQ19HTlVfU09VUkNFLgorICBtNF9pZmRlZihbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSwKKyAgICBbQUNfUkVRVUlSRShbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSldLAorICAgIFtBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSldKQorCisgIEFDX0NIRUNLX0hFQURFUlNfT05DRShbdW5pc3RkLmhdKQorICBBQ19DSEVDS19GVU5DU19PTkNFKFtzeW1saW5rXSkKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3b3JraW5nIGZjbnRsLmhdLCBbZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfZmNudGxfaF0sCisgICAgW0FDX1JVTl9JRkVMU0UoCisgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICBbWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAgICAgICAgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgICAgICAgICAgICNpZiBIQVZFX1VOSVNURF9ICisgICAgICAgICAgICMgaW5jbHVkZSA8dW5pc3RkLmg+CisgICAgICAgICAgICNlbHNlIC8qIG9uIFdpbmRvd3Mgd2l0aCBNU1ZDICovCisgICAgICAgICAgICMgaW5jbHVkZSA8aW8uaD4KKyAgICAgICAgICAgIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyAgICAgICAgICAgIyBkZWZpbmVkIHNsZWVwKG4pIF9zbGVlcCAoKG4pICogMTAwMCkKKyAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICNpbmNsdWRlIDxmY250bC5oPgorICAgICAgICAgICAjaWZuZGVmIE9fTk9BVElNRQorICAgICAgICAgICAgI2RlZmluZSBPX05PQVRJTUUgMAorICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgI2lmbmRlZiBPX05PRk9MTE9XCisgICAgICAgICAgICAjZGVmaW5lIE9fTk9GT0xMT1cgMAorICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgc3RhdGljIGludCBjb25zdCBjb25zdGFudHNbXSA9CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIE9fQ1JFQVQsIE9fRVhDTCwgT19OT0NUVFksIE9fVFJVTkMsIE9fQVBQRU5ELAorICAgICAgICAgICAgICBPX05PTkJMT0NLLCBPX1NZTkMsIE9fQUNDTU9ERSwgT19SRE9OTFksIE9fUkRXUiwgT19XUk9OTFkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgXV0sCisgICAgICAgICAgW1sKKyAgICAgICAgICAgIGludCByZXN1bHQgPSAhY29uc3RhbnRzOworICAgICAgICAgICAgI2lmIEhBVkVfU1lNTElOSworICAgICAgICAgICAgeworICAgICAgICAgICAgICBzdGF0aWMgY2hhciBjb25zdCBzeW1bXSA9ICJjb25mdGVzdC5zeW0iOworICAgICAgICAgICAgICBpZiAoc3ltbGluayAoIi9kZXYvbnVsbCIsIHN5bSkgIT0gMCkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gMjsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGludCBmZCA9IG9wZW4gKHN5bSwgT19XUk9OTFkgfCBPX05PRk9MTE9XIHwgT19DUkVBVCwgMCk7CisgICAgICAgICAgICAgICAgICBpZiAoZmQgPj0gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGNsb3NlIChmZCk7CisgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmICh1bmxpbmsgKHN5bSkgIT0gMCB8fCBzeW1saW5rICgiLiIsIHN5bSkgIT0gMCkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gMjsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGludCBmZCA9IG9wZW4gKHN5bSwgT19SRE9OTFkgfCBPX05PRk9MTE9XKTsKKyAgICAgICAgICAgICAgICAgIGlmIChmZCA+PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2xvc2UgKGZkKTsKKyAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gNDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgdW5saW5rIChzeW0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IGZpbGVbXSA9ICJjb25mZGVmcy5oIjsKKyAgICAgICAgICAgICAgaW50IGZkID0gb3BlbiAoZmlsZSwgT19SRE9OTFkgfCBPX05PQVRJTUUpOworICAgICAgICAgICAgICBpZiAoZmQgPCAwKQorICAgICAgICAgICAgICAgIHJlc3VsdCB8PSA4OworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQgc3QwOworICAgICAgICAgICAgICAgICAgaWYgKGZzdGF0IChmZCwgJnN0MCkgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDE2OworICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2hhciBjOworICAgICAgICAgICAgICAgICAgICAgIHNsZWVwICgxKTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZCAoZmQsICZjLCAxKSAhPSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDI0OworICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNsb3NlIChmZCkgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gMzI7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCBzdDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdCAoZmlsZSwgJnN0MSkgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDQwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3QwLnN0X2F0aW1lICE9IHN0MS5zdF9hdGltZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gNjQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtdXSldLAorICAgICAgIFtnbF9jdl9oZWFkZXJfd29ya2luZ19mY250bF9oPXllc10sCisgICAgICAgW2Nhc2UgJD8gaW4gIygKKyAgICAgICAgNCkgZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfZmNudGxfaD0nbm8gKGJhZCBPX05PRk9MTE9XKSc7OyAjKAorICAgICAgICA2NCkgZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfZmNudGxfaD0nbm8gKGJhZCBPX05PQVRJTUUpJzs7ICMoCisgICAgICAgIDY4KSBnbF9jdl9oZWFkZXJfd29ya2luZ19mY250bF9oPSdubyAoYmFkIE9fTk9BVElNRSwgT19OT0ZPTExPVyknOzsgIygKKyAgICAgICAgICopIGdsX2N2X2hlYWRlcl93b3JraW5nX2ZjbnRsX2g9J25vJzs7CisgICAgICAgIGVzYWNdLAorICAgICAgIFtnbF9jdl9oZWFkZXJfd29ya2luZ19mY250bF9oPWNyb3NzLWNvbXBpbGluZ10pXSkKKworICBjYXNlICRnbF9jdl9oZWFkZXJfd29ya2luZ19mY250bF9oIGluICMoCisgICpPX05PQVRJTUUqIHwgbm8gfCBjcm9zcy1jb21waWxpbmcpIGFjX3ZhbD0wOzsgIygKKyAgKikgYWNfdmFsPTE7OworICBlc2FjCisgIEFDX0RFRklORV9VTlFVT1RFRChbSEFWRV9XT1JLSU5HX09fTk9BVElNRV0sIFskYWNfdmFsXSwKKyAgICBbRGVmaW5lIHRvIDEgaWYgT19OT0FUSU1FIHdvcmtzLl0pCisKKyAgY2FzZSAkZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfZmNudGxfaCBpbiAjKAorICAqT19OT0ZPTExPVyogfCBubyB8IGNyb3NzLWNvbXBpbGluZykgYWNfdmFsPTA7OyAjKAorICAqKSBhY192YWw9MTs7CisgIGVzYWMKKyAgQUNfREVGSU5FX1VOUVVPVEVEKFtIQVZFX1dPUktJTkdfT19OT0ZPTExPV10sIFskYWNfdmFsXSwKKyAgICBbRGVmaW5lIHRvIDEgaWYgT19OT0ZPTExPVyB3b3Jrcy5dKQorXSkKZGlmZiAtLWdpdCBhL200L2ZjbnRsLm00IGIvbTQvZmNudGwubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYzMWJkNgotLS0gL2Rldi9udWxsCisrKyBiL200L2ZjbnRsLm00CkBAIC0wLDAgKzEsOTUgQEAKKyMgZmNudGwubTQgc2VyaWFsIDUKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEZvciBub3csIHRoaXMgbW9kdWxlIGVuc3VyZXMgdGhhdCBmY250bCgpCisjIC0gc3VwcG9ydHMgRl9EVVBGRCBjb3JyZWN0bHkKKyMgLSBzdXBwb3J0cyBvciBlbXVsYXRlcyBGX0RVUEZEX0NMT0VYRUMKKyMgLSBzdXBwb3J0cyBGX0dFVEZECisjIFN0aWxsIHRvIGJlIHBvcnRlZCB0byBtaW5ndzoKKyMgLSBGX1NFVEZECisjIC0gRl9HRVRGTCwgRl9TRVRGTAorIyAtIEZfR0VUT1dOLCBGX1NFVE9XTgorIyAtIEZfR0VUTEssIEZfU0VUTEssIEZfU0VUTEtXCitBQ19ERUZVTihbZ2xfRlVOQ19GQ05UTF0sCitbCisgIGRubCBQZXJzdWFkZSBnbGliYyB0byBleHBvc2UgRl9EVVBGRF9DTE9FWEVDLgorICBBQ19SRVFVSVJFKFtnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorICBBQ19SRVFVSVJFKFtnbF9GQ05UTF9IX0RFRkFVTFRTXSkKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorICBBQ19DSEVDS19GVU5DU19PTkNFKFtmY250bF0pCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfZmNudGwgPSBubzsgdGhlbgorICAgIGdsX1JFUExBQ0VfRkNOVEwKKyAgZWxzZQorICAgIGRubCBjeWd3aW4gMS41LnggRl9EVVBGRCBoYXMgd3JvbmcgZXJybm8sIGFuZCBhbGxvd3MgbmVnYXRpdmUgdGFyZ2V0CisgICAgZG5sIGhhaWt1IGFscGhhIDIgRl9EVVBGRCBoYXMgd3JvbmcgZXJybm8KKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBmY250bCBoYW5kbGVzIEZfRFVQRkQgY29ycmVjdGx5XSwKKyAgICAgIFtnbF9jdl9mdW5jX2ZjbnRsX2ZfZHVwZmRfd29ya3NdLAorICAgICAgW0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KK11dLCBbW2ludCByZXN1bHQgPSAwOworICAgICAgaWYgKGZjbnRsICgwLCBGX0RVUEZELCAtMSkgIT0gLTEpIHJlc3VsdCB8PSAxOworICAgICAgaWYgKGVycm5vICE9IEVJTlZBTCkgcmVzdWx0IHw9IDI7CisgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgXV0pXSwKKyAgICAgICAgIFtnbF9jdl9mdW5jX2ZjbnRsX2ZfZHVwZmRfd29ya3M9eWVzXSwKKyAgICAgICAgIFtnbF9jdl9mdW5jX2ZjbnRsX2ZfZHVwZmRfd29ya3M9bm9dLAorICAgICAgICAgWyMgR3Vlc3MgdGhhdCBpdCB3b3JrcyBvbiBnbGliYyBzeXN0ZW1zCisgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiAjKCgKKyAgICAgICAgICAgICotZ251KikgZ2xfY3ZfZnVuY19mY250bF9mX2R1cGZkX3dvcmtzPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICopICAgICAgZ2xfY3ZfZnVuY19mY250bF9mX2R1cGZkX3dvcmtzPSJndWVzc2luZyBubyI7OworICAgICAgICAgIGVzYWNdKV0pCisgICAgY2FzZSAkZ2xfY3ZfZnVuY19mY250bF9mX2R1cGZkX3dvcmtzIGluCisgICAgICAqeWVzKSA7OworICAgICAgKikgZ2xfUkVQTEFDRV9GQ05UTAorICAgICAgICBBQ19ERUZJTkUoW0ZDTlRMX0RVUEZEX0JVR0dZXSwgWzFdLCBbRGVmaW5lIHRoaXMgdG8gMSBpZiBGX0RVUEZECisgICAgICAgICAgYmVoYXZpb3IgZG9lcyBub3QgbWF0Y2ggUE9TSVhdKSA7OworICAgIGVzYWMKKworICAgIGRubCBNYW55IHN5c3RlbXMgbGFjayBGX0RVUEZEX0NMT0VYRUMKKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBmY250bCB1bmRlcnN0YW5kcyBGX0RVUEZEX0NMT0VYRUNdLAorICAgICAgW2dsX2N2X2Z1bmNfZmNudGxfZl9kdXBmZF9jbG9leGVjXSwKKyAgICAgIFtBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpZm5kZWYgRl9EVVBGRF9DTE9FWEVDCitjaG9rZSBtZQorI2VuZGlmCisgICAgICAgICBdXSldLAorICAgICAgICAgW0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKyNpZmRlZiBfX2xpbnV4X18KKy8qIFRoZSBMaW51eCBrZXJuZWwgb25seSBhZGRlZCBGX0RVUEZEX0NMT0VYRUMgaW4gMi42LjI0LCBzbyB3ZSBhbHdheXMgcmVwbGFjZQorICAgaXQgdG8gc3VwcG9ydCB0aGUgc2VtYW50aWNzIG9uIG9sZGVyIGtlcm5lbHMgdGhhdCBmYWlsZWQgd2l0aCBFSU5WQUwuICAqLworY2hva2UgbWUKKyNlbmRpZgorICAgICAgICAgICBdXSldLAorICAgICAgICAgICBbZ2xfY3ZfZnVuY19mY250bF9mX2R1cGZkX2Nsb2V4ZWM9eWVzXSwKKyAgICAgICAgICAgW2dsX2N2X2Z1bmNfZmNudGxfZl9kdXBmZF9jbG9leGVjPSJuZWVkcyBydW50aW1lIGNoZWNrIl0pXSwKKyAgICAgICAgIFtnbF9jdl9mdW5jX2ZjbnRsX2ZfZHVwZmRfY2xvZXhlYz1ub10pXSkKKyAgICBpZiB0ZXN0ICIkZ2xfY3ZfZnVuY19mY250bF9mX2R1cGZkX2Nsb2V4ZWMiICE9IHllczsgdGhlbgorICAgICAgZ2xfUkVQTEFDRV9GQ05UTAorICAgICAgZG5sIE5vIHdpdG5lc3MgbWFjcm8gbmVlZGVkIGZvciB0aGlzIGJ1Zy4KKyAgICBmaQorICBmaQorICBkbmwgUmVwbGFjZSBmY250bCgpIGZvciBzdXBwb3J0aW5nIHRoZSBnbnVsaWItZGVmaW5lZCBmY2hkaXIoKSBmdW5jdGlvbiwKKyAgZG5sIHRvIGtlZXAgZmNoZGlyJ3MgYm9va2tlZXBpbmcgdXAtdG8tZGF0ZS4KKyAgbTRfaWZkZWYoW2dsX0ZVTkNfRkNIRElSXSwgWworICAgIGdsX1RFU1RfRkNIRElSCisgICAgaWYgdGVzdCAkSEFWRV9GQ0hESVIgPSAwOyB0aGVuCisgICAgICBnbF9SRVBMQUNFX0ZDTlRMCisgICAgZmkKKyAgXSkKK10pCisKK0FDX0RFRlVOKFtnbF9SRVBMQUNFX0ZDTlRMXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfRkNOVExfSF9ERUZBVUxUU10pCisgIEFDX0NIRUNLX0ZVTkNTX09OQ0UoW2ZjbnRsXSkKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19mY250bCA9IG5vOyB0aGVuCisgICAgSEFWRV9GQ05UTD0wCisgIGVsc2UKKyAgICBSRVBMQUNFX0ZDTlRMPTEKKyAgZmkKK10pCmRpZmYgLS1naXQgYS9tNC9mY250bF9oLm00IGIvbTQvZmNudGxfaC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWMyOGFlCi0tLSAvZGV2L251bGwKKysrIGIvbTQvZmNudGxfaC5tNApAQCAtMCwwICsxLDUwIEBACisjIHNlcmlhbCAxNQorIyBDb25maWd1cmUgZmNudGwuaC4KK2RubCBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0LgorCitBQ19ERUZVTihbZ2xfRkNOVExfSF0sCitbCisgIEFDX1JFUVVJUkUoW2dsX0ZDTlRMX0hfREVGQVVMVFNdKQorICBBQ19SRVFVSVJFKFtnbF9GQ05UTF9PX0ZMQUdTXSkKKyAgZ2xfTkVYVF9IRUFERVJTKFtmY250bC5oXSkKKworICBkbmwgRW5zdXJlIHRoZSB0eXBlIHBpZF90IGdldHMgZGVmaW5lZC4KKyAgQUNfUkVRVUlSRShbQUNfVFlQRV9QSURfVF0pCisKKyAgZG5sIEVuc3VyZSB0aGUgdHlwZSBtb2RlX3QgZ2V0cyBkZWZpbmVkLgorICBBQ19SRVFVSVJFKFtBQ19UWVBFX01PREVfVF0pCisKKyAgZG5sIENoZWNrIGZvciBkZWNsYXJhdGlvbnMgb2YgYW55dGhpbmcgd2Ugd2FudCB0byBwb2lzb24gaWYgdGhlCisgIGRubCBjb3JyZXNwb25kaW5nIGdudWxpYiBtb2R1bGUgaXMgbm90IGluIHVzZSwgaWYgaXQgaXMgbm90IGNvbW1vbgorICBkbmwgZW5vdWdoIHRvIGJlIGRlY2xhcmVkIGV2ZXJ5d2hlcmUuCisgIGdsX1dBUk5fT05fVVNFX1BSRVBBUkUoW1sjaW5jbHVkZSA8ZmNudGwuaD4KKyAgICBdXSwgW2ZjbnRsIG9wZW5hdF0pCitdKQorCitBQ19ERUZVTihbZ2xfRkNOVExfTU9EVUxFX0lORElDQVRPUl0sCitbCisgIGRubCBVc2UgQUNfUkVRVUlSRSBoZXJlLCBzbyB0aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGFyZSBleHBhbmRlZCBvbmNlIG9ubHkuCisgIEFDX1JFUVVJUkUoW2dsX0ZDTlRMX0hfREVGQVVMVFNdKQorICBnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRShbJDFdKQorICBkbmwgRGVmaW5lIGl0IGFsc28gYXMgYSBDIG1hY3JvLCBmb3IgdGhlIGJlbmVmaXQgb2YgdGhlIHVuaXQgdGVzdHMuCisgIGdsX01PRFVMRV9JTkRJQ0FUT1JfRk9SX1RFU1RTKFskMV0pCitdKQorCitBQ19ERUZVTihbZ2xfRkNOVExfSF9ERUZBVUxUU10sCitbCisgIEdOVUxJQl9GQ05UTD0wOyAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9GQ05UTF0pCisgIEdOVUxJQl9OT05CTE9DS0lORz0wOyAgQUNfU1VCU1QoW0dOVUxJQl9OT05CTE9DS0lOR10pCisgIEdOVUxJQl9PUEVOPTA7ICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9PUEVOXSkKKyAgR05VTElCX09QRU5BVD0wOyAgICAgICBBQ19TVUJTVChbR05VTElCX09QRU5BVF0pCisgIGRubCBBc3N1bWUgcHJvcGVyIEdOVSBiZWhhdmlvciB1bmxlc3MgYW5vdGhlciBtb2R1bGUgc2F5cyBvdGhlcndpc2UuCisgIEhBVkVfRkNOVEw9MTsgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfRkNOVExdKQorICBIQVZFX09QRU5BVD0xOyAgICAgICAgIEFDX1NVQlNUKFtIQVZFX09QRU5BVF0pCisgIFJFUExBQ0VfRkNOVEw9MDsgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfRkNOVExdKQorICBSRVBMQUNFX09QRU49MDsgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX09QRU5dKQorICBSRVBMQUNFX09QRU5BVD0wOyAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX09QRU5BVF0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvZmxleC5tNCBiL200L2ZsZXgubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg0YzUxNAotLS0gL2Rldi9udWxsCisrKyBiL200L2ZsZXgubTQKQEAgLTAsMCArMSwxMTEgQEAKKyMgZmxleC5tNCBzZXJpYWwgMgorIyBDb3B5cmlnaHQgKEMpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBBQ19QUk9HX0xFWAorIyAtLS0tLS0tLS0tLQorIyBMb29rIGZvciBmbGV4IG9yIGxleC4gIFNldCBpdHMgYXNzb2NpYXRlZCBsaWJyYXJ5IHRvIExFWExJQi4KKyMgQ2hlY2sgaWYgbGV4IGRlY2xhcmVzIHl5dGV4dCBhcyBhIGNoYXIgKiBieSBkZWZhdWx0LCBub3QgYSBjaGFyW10uCitBTl9NQUtFVkFSKFtMRVhdLCAgW0FDX1BST0dfTEVYXSkKK0FOX1BST0dSQU0oW2xleF0sICBbQUNfUFJPR19MRVhdKQorQU5fUFJPR1JBTShbZmxleF0sIFtBQ19QUk9HX0xFWF0pCitBQ19ERUZVTl9PTkNFKFtBQ19QUk9HX0xFWF0sCitbQUNfQ0hFQ0tfUFJPR1MoW0xFWF0sIFtmbGV4IGxleF0sIFs6XSkKK2lmIHRlc3QgIngkTEVYIiAhPSAieDoiOyB0aGVuCisgIF9BQ19QUk9HX0xFWF9ZWVRFWFRfREVDTAorZmldKQorCisKKyMgX0FDX1BST0dfTEVYX1lZVEVYVF9ERUNMCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgRmxleCwgZm9yIHRoZSBMZXggb3V0cHV0IHJvb3QsIHRoZSBMZXggbGlicmFyeSwKKyMgYW5kIHdoZXRoZXIgTGV4IGRlY2xhcmVzIHl5dGV4dCBhcyBhIGNoYXIgKiBieSBkZWZhdWx0LgorbTRfZGVmaW5lKFtfQUNfUFJPR19MRVhfWVlURVhUX0RFQ0xdLAorW0FDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGxleCBpcyBmbGV4XSwKKyAgICAgICAgICAgICAgICBbYWNfY3ZfcHJvZ19sZXhfaXNfZmxleF0sCitbY2F0ID5jb25mdGVzdC5sIDw8X0FDRU9GWworJW9wdGlvbiBkZWJ1ZyBub2RlZmF1bHQgbm9pbnB1dCBub3VucHV0IG5veXl3cmFwIG5ldmVyLWludGVyYWN0aXZlCisleCBTQ19DT05GX1RFU1QKKyUlCithIHsgQkVHSU4gU0NfQ09ORl9URVNUOyB9CitdX0FDRU9GCitpZiBfQUNfRE9fVkFSKFtMRVggY29uZnRlc3QubF0pOyB0aGVuCisgIGFjX2N2X3Byb2dfbGV4X2lzX2ZsZXg9eWVzCitlbHNlCisgIGFjX2N2X3Byb2dfbGV4X2lzX2ZsZXg9bm8KK2ZpCitdKQorQUNfU1VCU1QoW0xFWF9JU19GTEVYXSwKKyAgICAgICAgIFtgdGVzdCAiJGFjX2N2X3Byb2dfbGV4X2lzX2ZsZXgiID0geWVzICYmIGVjaG8gdHJ1ZSB8fCBlY2hvIGZhbHNlYF0pZG5sCisKK2NhdCA+Y29uZnRlc3QubCA8PF9BQ0VPRlsKKyUlCithIHsgRUNITzsgfQorYiB7IFJFSkVDVDsgfQorYyB7IHl5bW9yZSAoKTsgfQorZCB7IHl5bGVzcyAoMSk7IH0KK2UgeyAvKiBJUklYIDYuNSBmbGV4IDIuNS40IHVuZGVycXVvdGVzIGl0cyB5eWxlc3MgYXJndW1lbnQuICAqLworICAgIHl5bGVzcyAoKGlucHV0ICgpICE9IDApKTsgfQorZiB7IHVucHV0ICh5eXRleHRbMF0pOyB9CisuIHsgQkVHSU4gSU5JVElBTDsgfQorJSUKKyNpZmRlZiBZWVRFWFRfUE9JTlRFUgorZXh0ZXJuIGNoYXIgKnl5dGV4dDsKKyNlbmRpZgoraW50CittYWluICh2b2lkKQoreworICByZXR1cm4gISB5eWxleCAoKSArICEgeXl3cmFwICgpOworfQorXV9BQ0VPRgorX0FDX0RPX1ZBUihbTEVYIGNvbmZ0ZXN0LmxdKQorQUNfQ0FDSEVfQ0hFQ0soW2xleCBvdXRwdXQgZmlsZSByb290XSwgW2FjX2N2X3Byb2dfbGV4X3Jvb3RdLCBbCitpZiB0ZXN0IC1mIGxleC55eS5jOyB0aGVuCisgIGFjX2N2X3Byb2dfbGV4X3Jvb3Q9bGV4Lnl5CitlbGlmIHRlc3QgLWYgbGV4eXkuYzsgdGhlbgorICBhY19jdl9wcm9nX2xleF9yb290PWxleHl5CitlbHNlCisgIEFDX01TR19FUlJPUihbY2Fubm90IGZpbmQgb3V0cHV0IGZyb20gJExFWDsgZ2l2aW5nIHVwXSkKK2ZpXSkKK0FDX1NVQlNUKFtMRVhfT1VUUFVUX1JPT1RdLCBbJGFjX2N2X3Byb2dfbGV4X3Jvb3RdKWRubAorCitpZiB0ZXN0IC16ICIke0xFWExJQitzZXR9IjsgdGhlbgorICBBQ19DQUNIRV9DSEVDSyhbbGV4IGxpYnJhcnldLCBbYWNfY3ZfbGliX2xleF0sIFsKKyAgICBhY19zYXZlX0xJQlM9JExJQlMKKyAgICBhY19jdl9saWJfbGV4PSdub25lIG5lZWRlZCcKKyAgICBmb3IgYWNfbGliIGluICcnIC1sZmwgLWxsOyBkbworICAgICAgTElCUz0iJGFjX2xpYiAkYWNfc2F2ZV9MSUJTIgorICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfREVGSU5FU19QUk9WSURFRFtgY2F0ICRMRVhfT1VUUFVUX1JPT1QuY2BdXSwKKwlbYWNfY3ZfbGliX2xleD0kYWNfbGliXSkKKyAgICAgIHRlc3QgIiRhY19jdl9saWJfbGV4IiAhPSAnbm9uZSBuZWVkZWQnICYmIGJyZWFrCisgICAgZG9uZQorICAgIExJQlM9JGFjX3NhdmVfTElCUworICBdKQorICB0ZXN0ICIkYWNfY3ZfbGliX2xleCIgIT0gJ25vbmUgbmVlZGVkJyAmJiBMRVhMSUI9JGFjX2N2X2xpYl9sZXgKK2ZpCitBQ19TVUJTVChbTEVYTElCXSkKKworQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgeXl0ZXh0IGlzIGEgcG9pbnRlcl0sCisgICAgICAgICAgICAgICBbYWNfY3ZfcHJvZ19sZXhfeXl0ZXh0X3BvaW50ZXJdLAorWyMgUE9TSVggc2F5cyBsZXggY2FuIGRlY2xhcmUgeXl0ZXh0IGVpdGhlciBhcyBhIHBvaW50ZXIgb3IgYW4gYXJyYXk7IHRoZQorIyBkZWZhdWx0IGlzIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudC4gIEZpZ3VyZSBvdXQgd2hpY2ggaXQgaXMsIHNpbmNlCisjIG5vdCBhbGwgaW1wbGVtZW50YXRpb25zIHByb3ZpZGUgdGhlICVwb2ludGVyIGFuZCAlYXJyYXkgZGVjbGFyYXRpb25zLgorYWNfY3ZfcHJvZ19sZXhfeXl0ZXh0X3BvaW50ZXI9bm8KK2FjX3NhdmVfTElCUz0kTElCUworTElCUz0iJExFWExJQiAkYWNfc2F2ZV9MSUJTIgorQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfREVGSU5FU19QUk9WSURFRAorICBbI2RlZmluZSBZWVRFWFRfUE9JTlRFUiAxCitgY2F0ICRMRVhfT1VUUFVUX1JPT1QuY2BdXSwKKyAgW2FjX2N2X3Byb2dfbGV4X3l5dGV4dF9wb2ludGVyPXllc10pCitMSUJTPSRhY19zYXZlX0xJQlMKK10pCitkbmwKK2lmIHRlc3QgJGFjX2N2X3Byb2dfbGV4X3l5dGV4dF9wb2ludGVyID0geWVzOyB0aGVuCisgIEFDX0RFRklORShbWVlURVhUX1BPSU5URVJdLCBbMV0sCisJICAgIFtEZWZpbmUgdG8gMSBpZiBgbGV4JyBkZWNsYXJlcyBgeXl0ZXh0JyBhcyBhIGBjaGFyIConIGJ5IGRlZmF1bHQsCisJICAgICBub3QgYSBgY2hhcltdJy5dKQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmwgJExFWF9PVVRQVVRfUk9PVC5jCitdKSMgX0FDX1BST0dfTEVYX1lZVEVYVF9ERUNMCmRpZmYgLS1naXQgYS9tNC9mbG9hdF9oLm00IGIvbTQvZmxvYXRfaC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWM5YzdiCi0tLSAvZGV2L251bGwKKysrIGIvbTQvZmxvYXRfaC5tNApAQCAtMCwwICsxLDk4IEBACisjIGZsb2F0X2gubTQgc2VyaWFsIDkKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ2xfRkxPQVRfSF0sCitbCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCisgIEZMT0FUX0g9CisgIFJFUExBQ0VfRkxPQVRfTERCTD0wCisgIGNhc2UgIiRob3N0X29zIiBpbgorICAgIGFpeCogfCBiZW9zKiB8IG9wZW5ic2QqIHwgbWlyYnNkKiB8IGlyaXgqKQorICAgICAgRkxPQVRfSD1mbG9hdC5oCisgICAgICA7OworICAgIGZyZWVic2QqKQorICAgICAgY2FzZSAiJGhvc3RfY3B1IiBpbgorY2hhbmdlcXVvdGUoLClkbmwKKyAgICAgICAgaVszNDU2N104NiApCitjaGFuZ2VxdW90ZShbLF0pZG5sCisgICAgICAgICAgRkxPQVRfSD1mbG9hdC5oCisgICAgICAgICAgOzsKKyAgICAgICAgeDg2XzY0ICkKKyAgICAgICAgICAjIE9uIHg4Nl82NCBzeXN0ZW1zLCB0aGUgQyBjb21waWxlciBtYXkgc3RpbGwgYmUgZ2VuZXJhdGluZworICAgICAgICAgICMgMzItYml0IGNvZGUuCisgICAgICAgICAgQUNfRUdSRVBfQ1BQKFt5ZXNdLAorICAgICAgICAgICAgWyNpZiBkZWZpbmVkIF9fTFA2NF9fIHx8IGRlZmluZWQgX194ODZfNjRfXyB8fCBkZWZpbmVkIF9fYW1kNjRfXworICAgICAgICAgICAgIHllcworICAgICAgICAgICAgICNlbmRpZl0sCisgICAgICAgICAgICBbXSwKKyAgICAgICAgICAgIFtGTE9BVF9IPWZsb2F0LmhdKQorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIGxpbnV4KikKKyAgICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKyAgICAgICAgcG93ZXJwYyopCisgICAgICAgICAgRkxPQVRfSD1mbG9hdC5oCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgIGVzYWMKKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgYWl4KiB8IGZyZWVic2QqIHwgbGludXgqKQorICAgICAgaWYgdGVzdCAtbiAiJEZMT0FUX0giOyB0aGVuCisgICAgICAgIFJFUExBQ0VfRkxPQVRfTERCTD0xCisgICAgICBmaQorICAgICAgOzsKKyAgZXNhYworCisgIGRubCBUZXN0IGFnYWluc3QgZ2xpYmMtMi43IExpbnV4L1NQQVJDNjQgYnVnLgorICBSRVBMQUNFX0lUT0xEPTAKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgY29udmVyc2lvbiBmcm9tICdpbnQnIHRvICdsb25nIGRvdWJsZScgd29ya3NdLAorICAgIFtnbF9jdl9mdW5jX2l0b2xkX3dvcmtzXSwKKyAgICBbCisgICAgICBBQ19SVU5fSUZFTFNFKAorICAgICAgICBbQUNfTEFOR19TT1VSQ0UoW1sKK2ludCBpID0gLTE7Cit2b2xhdGlsZSBsb25nIGRvdWJsZSBsZDsKK2ludCBtYWluICgpCit7CisgIGxkICs9IGkgKiAxLjBMOworICBpZiAobGQgPiAwKQorICAgIHJldHVybiAxOworICByZXR1cm4gMDsKK31dXSldLAorICAgICAgICBbZ2xfY3ZfZnVuY19pdG9sZF93b3Jrcz15ZXNdLAorICAgICAgICBbZ2xfY3ZfZnVuY19pdG9sZF93b3Jrcz1ub10sCisgICAgICAgIFtjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgICAgc3BhcmMqLSotbGludXgqKQorICAgICAgICAgICAgIEFDX0VHUkVQX0NQUChbeWVzXSwKKyAgICAgICAgICAgICAgIFsjaWYgZGVmaW5lZCBfX0xQNjRfXyB8fCBkZWZpbmVkIF9fYXJjaDY0X18KKyAgICAgICAgICAgICAgICB5ZXMKKyAgICAgICAgICAgICAgICAjZW5kaWZdLAorICAgICAgICAgICAgICAgW2dsX2N2X2Z1bmNfaXRvbGRfd29ya3M9Imd1ZXNzaW5nIG5vIl0sCisgICAgICAgICAgICAgICBbZ2xfY3ZfZnVuY19pdG9sZF93b3Jrcz0iZ3Vlc3NpbmcgeWVzIl0pCisgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgKikgZ2xfY3ZfZnVuY19pdG9sZF93b3Jrcz0iZ3Vlc3NpbmcgeWVzIiA7OworICAgICAgICAgZXNhYworICAgICAgICBdKQorICAgIF0pCisgIGNhc2UgIiRnbF9jdl9mdW5jX2l0b2xkX3dvcmtzIiBpbgorICAgICpubykKKyAgICAgIFJFUExBQ0VfSVRPTEQ9MQorICAgICAgZG5sIFdlIGFkZCB0aGUgd29ya2Fyb3VuZCB0byA8ZmxvYXQuaD4gYnV0IGFsc28gdG8gPG1hdGguaD4sCisgICAgICBkbmwgdG8gaW5jcmVhc2UgdGhlIGNoYW5jZXMgdGhhdCB0aGUgZml4IGZ1bmN0aW9uIGdldHMgcHVsbGVkIGluLgorICAgICAgRkxPQVRfSD1mbG9hdC5oCisgICAgICA7OworICBlc2FjCisKKyAgaWYgdGVzdCAtbiAiJEZMT0FUX0giOyB0aGVuCisgICAgZ2xfTkVYVF9IRUFERVJTKFtmbG9hdC5oXSkKKyAgZmkKKyAgQUNfU1VCU1QoW0ZMT0FUX0hdKQorICBBTV9DT05ESVRJT05BTChbR0xfR0VORVJBVEVfRkxPQVRfSF0sIFt0ZXN0IC1uICIkRkxPQVRfSCJdKQorICBBQ19TVUJTVChbUkVQTEFDRV9JVE9MRF0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvZm9wZW4ubTQgYi9tNC9mb3Blbi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTZjNzgzCi0tLSAvZGV2L251bGwKKysrIGIvbTQvZm9wZW4ubTQKQEAgLTAsMCArMSw1OCBAQAorIyBmb3Blbi5tNCBzZXJpYWwgOQorZG5sIENvcHlyaWdodCAoQykgMjAwNy0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9GVU5DX0ZPUEVOXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfU1RESU9fSF9ERUZBVUxUU10pCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgbWluZ3cqIHwgcHcqKQorICAgICAgZG5sIFJlcGxhY2UgZm9wZW4sIGZvciBoYW5kbGluZyBvZiAiL2Rldi9udWxsIi4KKyAgICAgIFJFUExBQ0VfRk9QRU49MQorICAgICAgZG5sIGZvcGVuIG9uIG1pbmd3IGFsc28gaGFzIHRoZSB0cmFpbGluZyBzbGFzaCBidWcuCisgICAgICBnbF9jdl9mdW5jX2ZvcGVuX3NsYXNoPSJndWVzc2luZyBubyIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGRubCBmb3BlbigiZm9vLyIsICJ3Iikgc2hvdWxkIG5vdCBjcmVhdGUgYSBmaWxlIHdoZW4gdGhlIGZpbGUgbmFtZSBoYXMgYQorICAgICAgZG5sIHRyYWlsaW5nIHNsYXNoLgorICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgZm9wZW4gcmVjb2duaXplcyBhIHRyYWlsaW5nIHNsYXNoXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfZm9wZW5fc2xhc2hdLAorICAgICAgICBbCisgICAgICAgICAgQUNfUlVOX0lGRUxTRSgKKyAgICAgICAgICAgIFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgbWFpbiAoKQoreworICByZXR1cm4gZm9wZW4gKCJjb25mdGVzdC5zbC8iLCAidyIpICE9IE5VTEw7Cit9XV0pXSwKKyAgICAgICAgICAgIFtnbF9jdl9mdW5jX2ZvcGVuX3NsYXNoPXllc10sCisgICAgICAgICAgICBbZ2xfY3ZfZnVuY19mb3Blbl9zbGFzaD1ub10sCisgICAgICAgICAgICBbCitjaGFuZ2VxdW90ZSgsKWRubAorICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgYWl4KiB8IGhwdXgqIHwgc29sYXJpczIuWzAtOV0gfCBzb2xhcmlzMi5bMC05XS4qKQorICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX2ZvcGVuX3NsYXNoPSJndWVzc2luZyBubyIgOzsKKyAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfZm9wZW5fc2xhc2g9Imd1ZXNzaW5nIHllcyIgOzsKKyAgICAgICAgICAgICBlc2FjCitjaGFuZ2VxdW90ZShbLF0pZG5sCisgICAgICAgICAgICBdKQorICAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LnNsCisgICAgICAgIF0pCisgICAgICA7OworICBlc2FjCisgIGNhc2UgIiRnbF9jdl9mdW5jX2ZvcGVuX3NsYXNoIiBpbgorICAgICpubykKKyAgICAgIEFDX0RFRklORShbRk9QRU5fVFJBSUxJTkdfU0xBU0hfQlVHXSwgWzFdLAorICAgICAgICBbRGVmaW5lIHRvIDEgaWYgZm9wZW4oKSBmYWlscyB0byByZWNvZ25pemUgYSB0cmFpbGluZyBzbGFzaC5dKQorICAgICAgUkVQTEFDRV9GT1BFTj0xCisgICAgICA7OworICBlc2FjCitdKQorCisjIFByZXJlcXVpc2l0ZXMgb2YgbGliL2ZvcGVuLmMuCitBQ19ERUZVTihbZ2xfUFJFUkVRX0ZPUEVOXSwgWzpdKQpkaWZmIC0tZ2l0IGEvbTQvZnBlbmRpbmcubTQgYi9tNC9mcGVuZGluZy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2E1Yzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbTQvZnBlbmRpbmcubTQKQEAgLTAsMCArMSw5MCBAQAorIyBzZXJpYWwgMTkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSwgMjAwNC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIEppbSBNZXllcmluZworZG5sIFVzaW5nIGNvZGUgZnJvbSBlbWFjcywgYmFzZWQgb24gc3VnZ2VzdGlvbnMgZnJvbSBQYXVsIEVnZ2VydAorZG5sIGFuZCBVbHJpY2ggRHJlcHBlci4KKworZG5sIEZpbmQgb3V0IGhvdyB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBwZW5kaW5nIG91dHB1dCBieXRlcyBvbiBhIHN0cmVhbS4KK2RubCBnbGliYyAoMi4xLjkzIGFuZCBuZXdlcikgYW5kIFNvbGFyaXMgcHJvdmlkZSBfX2ZwZW5kaW5nLiAgT24gb3RoZXIgc3lzdGVtcywKK2RubCB3ZSBoYXZlIHRvIGdydWIgYXJvdW5kIGluIHRoZSBGSUxFIHN0cnVjdC4KKworQUNfREVGVU4oW2dsX0ZVTkNfRlBFTkRJTkddLAorWworICBBQ19DSEVDS19IRUFERVJTX09OQ0UoW3N0ZGlvX2V4dC5oXSkKKyAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbX19mcGVuZGluZ10pCisgIGZwX2hlYWRlcnM9JworIyAgICAgaW5jbHVkZSA8c3RkaW8uaD4KKyMgICAgIGlmIEhBVkVfU1RESU9fRVhUX0gKKyMgICAgICBpbmNsdWRlIDxzdGRpb19leHQuaD4KKyMgICAgIGVuZGlmCisnCisgIEFDX0NIRUNLX0RFQ0xTKFtfX2ZwZW5kaW5nXSwgLCAsICRmcF9oZWFkZXJzKQorXSkKKworQUNfREVGVU4oW2dsX1BSRVJFUV9GUEVORElOR10sCitbCisgIEFDX0NBQ0hFX0NIRUNLKAorICAgICAgICAgICAgICBbaG93IHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIHBlbmRpbmcgb3V0cHV0IGJ5dGVzIG9uIGEgc3RyZWFtXSwKKyAgICAgICAgICAgICAgICAgYWNfY3Zfc3lzX3BlbmRpbmdfb3V0cHV0X25fYnl0ZXMsCisgICAgWworICAgICAgZm9yIGFjX2V4cHIgaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICcjIGdsaWJjMicgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICdmcC0+X0lPX3dyaXRlX3B0ciAtIGZwLT5fSU9fd3JpdGVfYmFzZScgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICcjIHRyYWRpdGlvbmFsIFVuaXgnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICdmcC0+X3B0ciAtIGZwLT5fYmFzZScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICcjIEJTRCcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICdmcC0+X3AgLSBmcC0+X2JmLl9iYXNlJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICcjIFNDTywgVW5peHdhcmUnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICcoZnAtPl9fcHRyID8gZnAtPl9fcHRyIC0gZnAtPl9fYmFzZSA6IDApJyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICcjIFFOWCcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICcoZnAtPl9Nb2RlICYgMHgyMDAwIC8qX01XUklURSovID8gZnAtPl9OZXh0IC0gZnAtPl9CdWYgOiAwKScgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICcjIG9sZCBnbGliYz8nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICdmcC0+X19idWZwIC0gZnAtPl9fYnVmZmVyJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICcjIG9sZCBnbGliYyBpb3N0cmVhbT8nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICdmcC0+X3BwdHIgLSBmcC0+X3BiYXNlJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICcjIGVteCtnY2MnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICdmcC0+X3B0ciAtIGZwLT5fYnVmZmVyJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICcjIE1pbml4JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICdmcC0+X3B0ciAtIGZwLT5fYnVmJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICcjIFBsYW45JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICdmcC0+d3AgLSBmcC0+YnVmJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICcjIFZNUycgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICcoKmZwKS0+X3B0ciAtICgqZnApLT5fYmFzZScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICcjIGUuZy4sIERHVVggUjQuMTE7IHRoZSBpbmZvIGlzIG5vdCBhdmFpbGFibGUnICAgICAgICAgICAgICAgXAorICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIDsgZG8KKworICAgICAgICAjIFNraXAgZWFjaCBlbWJlZGRlZCBjb21tZW50LgorICAgICAgICBjYXNlICIkYWNfZXhwciIgaW4gJyMnKikgY29udGludWU7OyBlc2FjCisKKyAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxzdGRpby5oPl1dLAorICAgICAgICAgIFtbRklMRSAqZnAgPSBzdGRpbjsgKHZvaWQpICgkYWNfZXhwcik7XV0pXSwKKyAgICAgICAgICBbZnBfZG9uZT15ZXNdCisgICAgICAgICkKKyAgICAgICAgdGVzdCAiJGZwX2RvbmUiID0geWVzICYmIGJyZWFrCisgICAgICBkb25lCisKKyAgICAgIGFjX2N2X3N5c19wZW5kaW5nX291dHB1dF9uX2J5dGVzPSRhY19leHByCisgICAgXQorICApCisgIEFDX0RFRklORV9VTlFVT1RFRChbUEVORElOR19PVVRQVVRfTl9CWVRFU10sCisgICAgJGFjX2N2X3N5c19wZW5kaW5nX291dHB1dF9uX2J5dGVzLAorICAgIFt0aGUgbnVtYmVyIG9mIHBlbmRpbmcgb3V0cHV0IGJ5dGVzIG9uIHN0cmVhbSAnZnAnXSkKK10pCmRpZmYgLS1naXQgYS9tNC9mcGllZWUubTQgYi9tNC9mcGllZWUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJmZDc3OAotLS0gL2Rldi9udWxsCisrKyBiL200L2ZwaWVlZS5tNApAQCAtMCwwICsxLDU0IEBACisjIGZwaWVlZS5tNCBzZXJpYWwgMgorZG5sIENvcHlyaWdodCAoQykgMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBJRUVFIDc1NCBzdGFuZGFyZGl6ZWQgdGhyZWUgaXRlbXM6CitkbmwgLSBUaGUgZm9ybWF0cyBvZiBzaW5nbGUtZmxvYXQgYW5kIGRvdWJsZS1mbG9hdCAtIG5vd2FkYXlzIGNvbW1vbmx5CitkbmwgICBhdmFpbGFibGUgYXMgJ2Zsb2F0JyBhbmQgJ2RvdWJsZScgaW4gQyBhbmQgQysrLgorZG5sICAgTm8gYXV0b2NvbmYgdGVzdCBuZWVkZWQuCitkbmwgLSBUaGUgb3ZlcmZsb3cgYW5kIGRpdmlzaW9uIGJ5IHplcm8gYmVoYXZpb3VyOiBUaGUgcmVzdWx0IGFyZSB2YWx1ZXMKK2RubCAgICfCsUluZicgYW5kICdOYU4nLCByYXRoZXIgdGhhbiBleGNlcHRpb25zIGFzIGl0IHdhcyBiZWZvcmUuCitkbmwgICBUaGlzIGZpbGUgcHJvdmlkZXMgYW4gYXV0b2NvbmYgbWFjcm8gZm9yIGVuc3VyaW5nIHRoaXMgYmVoYXZpb3VyIG9mCitkbmwgICBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zLgorZG5sIC0gQSBzZXQgb2YgY29uZGl0aW9ucyAob3ZlcmZsb3csIHVuZGVyZmxvdywgaW5leGFjdCwgZXRjLikgd2hpY2ggY2FuCitkbmwgICBiZSBjb25maWd1cmVkIHRvIHRyaWdnZXIgYW4gZXhjZXB0aW9uLgorZG5sICAgVGhpcyBjYW5ub3QgYmUgZG9uZSBpbiBhIHBvcnRhYmxlIHdheTogaXQgZGVwZW5kcyBvbiB0aGUgY29tcGlsZXIsCitkbmwgICBsaWJjLCBrZXJuZWwsIGFuZCBDUFUuICBObyBhdXRvY29uZiBtYWNybyBpcyBwcm92aWRlZCBmb3IgdGhpcy4KKworZG5sIEVuc3VyZSBub24tdHJhcHBpbmcgYmVoYXZpb3VyIG9mIGZsb2F0aW5nLXBvaW50IG92ZXJmbG93IGFuZAorZG5sIGZsb2F0aW5nLXBvaW50IGRpdmlzaW9uIGJ5IHplcm8uCitkbmwgKEZvciBpbnRlZ2VyIG92ZXJmbG93LCBzZWUgZ2NjJ3MgLWZ0cmFwdiBvcHRpb247IGZvciBpbnRlZ2VyIGRpdmlzaW9uIGJ5CitkbmwgemVybywgc2VlIHRoZSBhdXRvY29uZiBtYWNybyBpbiBpbnRkaXYwLm00LikKKworQUNfREVGVU4oW2dsX0ZQX0lFRUVdLAorWworICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorICAjIElFRUUgYmVoYXZpb3VyIGlzIHRoZSBkZWZhdWx0IG9uIGFsbCBDUFVzIGV4Y2VwdCBBbHBoYSBhbmQgU0gKKyAgIyAoYWNjb3JkaW5nIHRvIHRoZSB0ZXN0IHJlc3VsdHMgb2YgQnJ1bm8gSGFpYmxlJ3MgaWVlZWZwL2ZlbnZfZGVmYXVsdC5tNAorICAjIGFuZCB0aGUgR0NDIDQuMS4yIG1hbnVhbCkuCisgIGNhc2UgIiRob3N0X2NwdSIgaW4KKyAgICBhbHBoYSopCisgICAgICAjIE9uIEFscGhhIHN5c3RlbXMsIGEgY29tcGlsZXIgb3B0aW9uIHByb3ZpZGVzIHRoZSBiZWhhdmlvdXIuCisgICAgICAjIFNlZSB0aGUgaWVlZSgzKSBtYW51YWwgcGFnZSwgYWxzbyBhdmFpbGFibGUgYXQKKyAgICAgICMgPGh0dHA6Ly9oMzAwOTcud3d3My5ocC5jb20vZG9jcy9iYXNlX2RvYy9ET0NVTUVOVEFUSU9OL1Y1MUJfSFRNTC9NQU4vTUFOMy8wNjAwX19fXy5IVE0+CisgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgICAjIEdDQyBoYXMgdGhlIG9wdGlvbiAtbWllZWUuCisgICAgICAgICMgRm9yIGZ1bGwgSUVFRSBjb21wbGlhbmNlIChyYXJlbHkgbmVlZGVkKSwgdXNlIG9wdGlvbiAtbWllZWUtd2l0aC1pbmV4YWN0LgorICAgICAgICBDUFBGTEFHUz0iJENQUEZMQUdTIC1taWVlZSIKKyAgICAgIGVsc2UKKyAgICAgICAgIyBDb21wYXEgKGV4LURFQykgQyBoYXMgdGhlIG9wdGlvbiAtaWVlZSwgZXF1aXZhbGVudCB0byAtaWVlZV93aXRoX25vX2luZXhhY3QuCisgICAgICAgICMgRm9yIGZ1bGwgSUVFRSBjb21wbGlhbmNlIChyYXJlbHkgbmVlZGVkKSwgdXNlIG9wdGlvbiAtaWVlZV93aXRoX2luZXhhY3QuCisgICAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLWllZWUiCisgICAgICBmaQorICAgICAgOzsKKyAgICBzaCopCisgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgICAjIEdDQyBoYXMgdGhlIG9wdGlvbiAtbWllZWUuCisgICAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLW1pZWVlIgorICAgICAgZmkKKyAgICAgIDs7CisgIGVzYWMKK10pCmRpZmYgLS1naXQgYS9tNC9mcHJpbnRmLXBvc2l4Lm00IGIvbTQvZnByaW50Zi1wb3NpeC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDgzZGFiCi0tLSAvZGV2L251bGwKKysrIGIvbTQvZnByaW50Zi1wb3NpeC5tNApAQCAtMCwwICsxLDExMCBAQAorIyBmcHJpbnRmLXBvc2l4Lm00IHNlcmlhbCAxNAorZG5sIENvcHlyaWdodCAoQykgMjAwNy0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9GVU5DX0ZQUklOVEZfUE9TSVhdLAorWworICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfU0laRVNfQzk5XSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX0xPTkdfRE9VQkxFXSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX0lORklOSVRFXSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX0lORklOSVRFX0xPTkdfRE9VQkxFXSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX0RJUkVDVElWRV9BXSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX0RJUkVDVElWRV9GXSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX0RJUkVDVElWRV9OXSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX0RJUkVDVElWRV9MU10pCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9QT1NJVElPTlNdKQorICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfRkxBR19HUk9VUElOR10pCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9GTEFHX0xFRlRBREpVU1RdKQorICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfRkxBR19aRVJPXSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX1BSRUNJU0lPTl0pCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9FTk9NRU1dKQorICBnbF9jdl9mdW5jX2ZwcmludGZfcG9zaXg9bm8KKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX3NpemVzX2M5OSIgaW4KKyAgICAqeWVzKQorICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2xvbmdfZG91YmxlIiBpbgorICAgICAgICAqeWVzKQorICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZSIgaW4KKyAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZV9sb25nX2RvdWJsZSIgaW4KKyAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9hIiBpbgorICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfZiIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbiIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9scyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfcG9zaXRpb25zIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfZ3JvdXBpbmciIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2xlZnRhZGp1c3QiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfemVybyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9wcmVjaXNpb24iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9lbm9tZW0iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmcHJpbnRmIGV4aXN0cyBhbmQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFscmVhZHkgUE9TSVggY29tcGxpYW50LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfZnByaW50Zl9wb3NpeD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgZXNhYworICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2ZwcmludGZfcG9zaXggPSBubzsgdGhlbgorICAgIGdsX1BSRVJFUV9WQVNOUFJJTlRGX0xPTkdfRE9VQkxFCisgICAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfSU5GSU5JVEVfRE9VQkxFCisgICAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfSU5GSU5JVEVfTE9OR19ET1VCTEUKKyAgICBnbF9QUkVSRVFfVkFTTlBSSU5URl9ESVJFQ1RJVkVfQQorICAgIGdsX1BSRVJFUV9WQVNOUFJJTlRGX0RJUkVDVElWRV9GCisgICAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfRElSRUNUSVZFX0xTCisgICAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfRkxBR19HUk9VUElORworICAgIGdsX1BSRVJFUV9WQVNOUFJJTlRGX0ZMQUdfTEVGVEFESlVTVAorICAgIGdsX1BSRVJFUV9WQVNOUFJJTlRGX0ZMQUdfWkVSTworICAgIGdsX1BSRVJFUV9WQVNOUFJJTlRGX1BSRUNJU0lPTgorICAgIGdsX1BSRVJFUV9WQVNOUFJJTlRGX0VOT01FTQorICAgIGdsX1JFUExBQ0VfVkFTTlBSSU5URgorICAgIGdsX1JFUExBQ0VfRlBSSU5URgorICBmaQorXSkKKworQUNfREVGVU4oW2dsX1JFUExBQ0VfRlBSSU5URl0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1NURElPX0hfREVGQVVMVFNdKQorICBBQ19MSUJPQkooW2ZwcmludGZdKQorICBSRVBMQUNFX0ZQUklOVEY9MQorICBBQ19ERUZJTkUoW1JFUExBQ0VfRlBSSU5URl9QT1NJWF0sIFsxXSwKKyAgICBbRGVmaW5lIGlmIGZwcmludGYgaXMgb3ZlcnJpZGRlbiBieSBhIFBPU0lYIGNvbXBsaWFudCBnbnVsaWIgaW1wbGVtZW50YXRpb24uXSkKKyAgZ2xfUFJFUkVRX0ZQUklOVEYKK10pCisKK0FDX0RFRlVOKFtnbF9QUkVSRVFfRlBSSU5URl0sIFs6XSkKZGlmZiAtLWdpdCBhL200L2ZyZXhwLm00IGIvbTQvZnJleHAubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI4ZGI3MAotLS0gL2Rldi9udWxsCisrKyBiL200L2ZyZXhwLm00CkBAIC0wLDAgKzEsMTcwIEBACisjIGZyZXhwLm00IHNlcmlhbCAxNAorZG5sIENvcHlyaWdodCAoQykgMjAwNy0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9GVU5DX0ZSRVhQXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfTUFUSF9IX0RFRkFVTFRTXSkKKyAgQUNfUkVRVUlSRShbZ2xfQ0hFQ0tfRlJFWFBfTk9fTElCTV0pCisgIEZSRVhQX0xJQk09CisgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfZnJleHBfbm9fbGlibSA9IG5vOyB0aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgZnJleHAoKSBjYW4gYmUgdXNlZCB3aXRoIGxpYm1dLAorICAgICAgW2dsX2N2X2Z1bmNfZnJleHBfaW5fbGlibV0sCisgICAgICBbCisgICAgICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgICAgIExJQlM9IiRMSUJTIC1sbSIKKyAgICAgICAgQUNfTElOS19JRkVMU0UoCisgICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgICBbWyNpbmNsdWRlIDxtYXRoLmg+CisgICAgICAgICAgICAgICBkb3VibGUgeDtdXSwKKyAgICAgICAgICAgICBbW2ludCBlOyByZXR1cm4gZnJleHAgKHgsICZlKSA+IDA7XV0pXSwKKyAgICAgICAgICBbZ2xfY3ZfZnVuY19mcmV4cF9pbl9saWJtPXllc10sCisgICAgICAgICAgW2dsX2N2X2Z1bmNfZnJleHBfaW5fbGlibT1ub10pCisgICAgICAgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgICBdKQorICAgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfZnJleHBfaW5fbGlibSA9IHllczsgdGhlbgorICAgICAgRlJFWFBfTElCTT0tbG0KKyAgICBmaQorICBmaQorICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2ZyZXhwX25vX2xpYm0gPSB5ZXMgXAorICAgICB8fCB0ZXN0ICRnbF9jdl9mdW5jX2ZyZXhwX2luX2xpYm0gPSB5ZXM7IHRoZW4KKyAgICBzYXZlX0xJQlM9IiRMSUJTIgorICAgIExJQlM9IiRMSUJTICRGUkVYUF9MSUJNIgorICAgIGdsX0ZVTkNfRlJFWFBfV09SS1MKKyAgICBMSUJTPSIkc2F2ZV9MSUJTIgorICAgIGNhc2UgIiRnbF9jdl9mdW5jX2ZyZXhwX3dvcmtzIiBpbgorICAgICAgKnllcykgZ2xfZnVuY19mcmV4cD15ZXMgOzsKKyAgICAgICopICAgIGdsX2Z1bmNfZnJleHA9bm87IFJFUExBQ0VfRlJFWFA9MTsgRlJFWFBfTElCTT0gOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBnbF9mdW5jX2ZyZXhwPW5vCisgIGZpCisgIGlmIHRlc3QgJGdsX2Z1bmNfZnJleHAgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoW0hBVkVfRlJFWFBdLCBbMV0sCisgICAgICBbRGVmaW5lIGlmIHRoZSBmcmV4cCgpIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBhbmQgd29ya3MuXSkKKyAgZmkKKyAgQUNfU1VCU1QoW0ZSRVhQX0xJQk1dKQorXSkKKworQUNfREVGVU4oW2dsX0ZVTkNfRlJFWFBfTk9fTElCTV0sCitbCisgIEFDX1JFUVVJUkUoW2dsX01BVEhfSF9ERUZBVUxUU10pCisgIEFDX1JFUVVJUkUoW2dsX0NIRUNLX0ZSRVhQX05PX0xJQk1dKQorICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2ZyZXhwX25vX2xpYm0gPSB5ZXM7IHRoZW4KKyAgICBnbF9GVU5DX0ZSRVhQX1dPUktTCisgICAgY2FzZSAiJGdsX2N2X2Z1bmNfZnJleHBfd29ya3MiIGluCisgICAgICAqeWVzKSBnbF9mdW5jX2ZyZXhwX25vX2xpYm09eWVzIDs7CisgICAgICAqKSAgICBnbF9mdW5jX2ZyZXhwX25vX2xpYm09bm87IFJFUExBQ0VfRlJFWFA9MSA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGdsX2Z1bmNfZnJleHBfbm9fbGlibT1ubworICAgIGRubCBTZXQgUkVQTEFDRV9GUkVYUCBoZXJlIGJlY2F1c2UgdGhlIHN5c3RlbSBtYXkgaGF2ZSBmcmV4cCBpbiBsaWJtLgorICAgIFJFUExBQ0VfRlJFWFA9MQorICBmaQorICBpZiB0ZXN0ICRnbF9mdW5jX2ZyZXhwX25vX2xpYm0gPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoW0hBVkVfRlJFWFBfSU5fTElCQ10sIFsxXSwKKyAgICAgIFtEZWZpbmUgaWYgdGhlIGZyZXhwKCkgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGluIGxpYmMuXSkKKyAgZmkKK10pCisKK2RubCBUZXN0IHdoZXRoZXIgZnJleHAoKSBjYW4gYmUgdXNlZCB3aXRob3V0IGxpbmtpbmcgd2l0aCBsaWJtLgorZG5sIFNldCBnbF9jdl9mdW5jX2ZyZXhwX25vX2xpYm0gdG8gJ3llcycgb3IgJ25vJyBhY2NvcmRpbmdseS4KK0FDX0RFRlVOKFtnbF9DSEVDS19GUkVYUF9OT19MSUJNXSwKK1sKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgZnJleHAoKSBjYW4gYmUgdXNlZCB3aXRob3V0IGxpbmtpbmcgd2l0aCBsaWJtXSwKKyAgICBbZ2xfY3ZfZnVuY19mcmV4cF9ub19saWJtXSwKKyAgICBbCisgICAgICBBQ19MSU5LX0lGRUxTRSgKKyAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgW1sjaW5jbHVkZSA8bWF0aC5oPgorICAgICAgICAgICAgIGRvdWJsZSB4O11dLAorICAgICAgICAgICBbW2ludCBlOyByZXR1cm4gZnJleHAgKHgsICZlKSA+IDA7XV0pXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfZnJleHBfbm9fbGlibT15ZXNdLAorICAgICAgICBbZ2xfY3ZfZnVuY19mcmV4cF9ub19saWJtPW5vXSkKKyAgICBdKQorXSkKKworZG5sIFRlc3Qgd2hldGhlciBmcmV4cCgpIHdvcmtzIGFsc28gb24gZGVub3JtYWxpemVkIG51bWJlcnMgKHRoaXMgZmFpbHMgZS5nLiBvbgorZG5sIE5ldEJTRCAzLjApLCBvbiBpbmZpbml0ZSBudW1iZXJzICh0aGlzIGZhaWxzIGUuZy4gb24gSVJJWCA2LjUgYW5kIG1pbmd3KSwKK2RubCBhbmQgb24gbmVnYXRpdmUgemVybyAodGhpcyBmYWlscyBlLmcuIG9uIE5ldEJTRCA0Ljk5IGFuZCBtaW5ndykuCitBQ19ERUZVTihbZ2xfRlVOQ19GUkVYUF9XT1JLU10sCitbCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pIGRubCBmb3IgY3Jvc3MtY29tcGlsZXMKKyAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbYWxhcm1dKQorICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBmcmV4cCB3b3Jrc10sIFtnbF9jdl9mdW5jX2ZyZXhwX3dvcmtzXSwKKyAgICBbCisgICAgICBBQ19SVU5fSUZFTFNFKAorICAgICAgICBbQUNfTEFOR19TT1VSQ0UoW1sKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX0FMQVJNCisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisvKiBIUCBjYyBvbiBIUC1VWCAxMC4yMCBoYXMgYSBidWcgd2l0aCB0aGUgY29uc3RhbnQgZXhwcmVzc2lvbiAtMC4wLgorICAgSUNDIDEwLjAgaGFzIGEgYnVnIHdoZW4gb3B0aW1pemluZyB0aGUgZXhwcmVzc2lvbiAtemVyby4KKyAgIFRoZSBleHByZXNzaW9uIC1EQkxfTUlOICogREJMX01JTiBkb2VzIG5vdCB3b3JrIHdoZW4gY3Jvc3MtY29tcGlsaW5nCisgICB0byBQb3dlclBDIG9uIE1hYyBPUyBYIDEwLjUuICAqLworI2lmIGRlZmluZWQgX19ocHV4IHx8IGRlZmluZWQgX19zZ2kgfHwgZGVmaW5lZCBfX0lDQworc3RhdGljIGRvdWJsZQorY29tcHV0ZV9taW51c196ZXJvICh2b2lkKQoreworICByZXR1cm4gLURCTF9NSU4gKiBEQkxfTUlOOworfQorIyBkZWZpbmUgbWludXNfemVybyBjb21wdXRlX21pbnVzX3plcm8gKCkKKyNlbHNlCitkb3VibGUgbWludXNfemVybyA9IC0wLjA7CisjZW5kaWYKK2ludCBtYWluKCkKK3sKKyAgaW50IHJlc3VsdCA9IDA7CisgIGludCBpOworICB2b2xhdGlsZSBkb3VibGUgeDsKKyAgZG91YmxlIHplcm8gPSAwLjA7CisjaWYgSEFWRV9BTEFSTQorICAvKiBOZVhUc3RlcCAzLjMgZnJleHAoKSBydW5zIGludG8gYW4gZW5kbGVzcyBsb29wIHdoZW4gY2FsbGVkIG9uIGFuIGluZmluaXRlCisgICAgIG51bWJlci4gIExldCB0aGUgdGVzdCBmYWlsIGluIHRoaXMgY2FzZS4gICovCisgIGFsYXJtICg1KTsKKyNlbmRpZgorICAvKiBUZXN0IG9uIGRlbm9ybWFsaXplZCBudW1iZXJzLiAgKi8KKyAgZm9yIChpID0gMSwgeCA9IDEuMDsgaSA+PSBEQkxfTUlOX0VYUDsgaS0tLCB4ICo9IDAuNSkKKyAgICA7CisgIGlmICh4ID4gMC4wKQorICAgIHsKKyAgICAgIGludCBleHA7CisgICAgICBkb3VibGUgeSA9IGZyZXhwICh4LCAmZXhwKTsKKyAgICAgIC8qIE9uIG1hY2hpbmVzIHdpdGggSUVFRTc1NCBhcml0aG1ldGljOiB4ID0gMS4xMTI1NGUtMzA4LCBleHAgPSAtMTAyMi4KKyAgICAgICAgIE9uIE5ldEJTRDogeSA9IDAuNzUuIENvcnJlY3Q6IHkgPSAwLjUuICAqLworICAgICAgaWYgKHkgIT0gMC41KQorICAgICAgICByZXN1bHQgfD0gMTsKKyAgICB9CisgIC8qIFRlc3Qgb24gaW5maW5pdGUgbnVtYmVycy4gICovCisgIHggPSAxLjAgLyB6ZXJvOworICB7CisgICAgaW50IGV4cDsKKyAgICBkb3VibGUgeSA9IGZyZXhwICh4LCAmZXhwKTsKKyAgICBpZiAoeSAhPSB4KQorICAgICAgcmVzdWx0IHw9IDI7CisgIH0KKyAgLyogVGVzdCBvbiBuZWdhdGl2ZSB6ZXJvLiAgKi8KKyAgeCA9IG1pbnVzX3plcm87CisgIHsKKyAgICBpbnQgZXhwOworICAgIGRvdWJsZSB5ID0gZnJleHAgKHgsICZleHApOworICAgIGlmIChtZW1jbXAgKCZ5LCAmeCwgc2l6ZW9mIHgpKQorICAgICAgcmVzdWx0IHw9IDQ7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK31dXSldLAorICAgICAgICBbZ2xfY3ZfZnVuY19mcmV4cF93b3Jrcz15ZXNdLAorICAgICAgICBbZ2xfY3ZfZnVuY19mcmV4cF93b3Jrcz1ub10sCisgICAgICAgIFtjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgbmV0YnNkKiB8IGlyaXgqIHwgbWluZ3cqKSBnbF9jdl9mdW5jX2ZyZXhwX3dvcmtzPSJndWVzc2luZyBubyI7OworICAgICAgICAgICAqKSAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfZnJleHBfd29ya3M9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgZXNhYworICAgICAgICBdKQorICAgIF0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvZnJleHBsLm00IGIvbTQvZnJleHBsLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NGQ1NDAKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9mcmV4cGwubTQKQEAgLTAsMCArMSwyMzEgQEAKKyMgZnJleHBsLm00IHNlcmlhbCAyMAorZG5sIENvcHlyaWdodCAoQykgMjAwNy0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9GVU5DX0ZSRVhQTF0sCitbCisgIEFDX1JFUVVJUkUoW2dsX01BVEhfSF9ERUZBVUxUU10pCisgIEFDX1JFUVVJUkUoW2dsX0xPTkdfRE9VQkxFX1ZTX0RPVUJMRV0pCisKKyAgZG5sIFBlcnN1YWRlIGdsaWJjIDxtYXRoLmg+IHRvIGRlY2xhcmUgZnJleHBsKCkuCisgIEFDX1JFUVVJUkUoW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10pCisKKyAgZG5sIENoZWNrIHdoZXRoZXIgaXQncyBkZWNsYXJlZC4KKyAgZG5sIE1hYyBPUyBYIDEwLjMgaGFzIGZyZXhwbCgpIGluIGxpYmMgYnV0IGRvZXNuJ3QgZGVjbGFyZSBpdCBpbiA8bWF0aC5oPi4KKyAgQUNfQ0hFQ0tfREVDTChbZnJleHBsXSwgLCBbSEFWRV9ERUNMX0ZSRVhQTD0wXSwgW1sjaW5jbHVkZSA8bWF0aC5oPl1dKQorCisgIEZSRVhQTF9MSUJNPQorICBpZiB0ZXN0ICRIQVZFX0RFQ0xfRlJFWFBMID0gMTsgdGhlbgorICAgIGdsX0NIRUNLX0ZSRVhQTF9OT19MSUJNCisgICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19mcmV4cGxfbm9fbGlibSA9IG5vOyB0aGVuCisgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBmcmV4cGwoKSBjYW4gYmUgdXNlZCB3aXRoIGxpYm1dLAorICAgICAgICBbZ2xfY3ZfZnVuY19mcmV4cGxfaW5fbGlibV0sCisgICAgICAgIFsKKyAgICAgICAgICBzYXZlX0xJQlM9IiRMSUJTIgorICAgICAgICAgIExJQlM9IiRMSUJTIC1sbSIKKyAgICAgICAgICBBQ19MSU5LX0lGRUxTRSgKKyAgICAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgICAgICBbWyNpbmNsdWRlIDxtYXRoLmg+CisgICAgICAgICAgICAgICAgIGxvbmcgZG91YmxlIHg7XV0sCisgICAgICAgICAgICAgICBbW2ludCBlOyByZXR1cm4gZnJleHBsICh4LCAmZSkgPiAwO11dKV0sCisgICAgICAgICAgICBbZ2xfY3ZfZnVuY19mcmV4cGxfaW5fbGlibT15ZXNdLAorICAgICAgICAgICAgW2dsX2N2X2Z1bmNfZnJleHBsX2luX2xpYm09bm9dKQorICAgICAgICAgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgICAgIF0pCisgICAgICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2ZyZXhwbF9pbl9saWJtID0geWVzOyB0aGVuCisgICAgICAgIEZSRVhQTF9MSUJNPS1sbQorICAgICAgZmkKKyAgICBmaQorICAgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfZnJleHBsX25vX2xpYm0gPSB5ZXMgXAorICAgICAgIHx8IHRlc3QgJGdsX2N2X2Z1bmNfZnJleHBsX2luX2xpYm0gPSB5ZXM7IHRoZW4KKyAgICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgICBMSUJTPSIkTElCUyAkRlJFWFBMX0xJQk0iCisgICAgICBnbF9GVU5DX0ZSRVhQTF9XT1JLUworICAgICAgTElCUz0iJHNhdmVfTElCUyIKKyAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX2ZyZXhwbF93b3JrcyIgaW4KKyAgICAgICAgKnllcykgZ2xfZnVuY19mcmV4cGw9eWVzIDs7CisgICAgICAgICopICAgIGdsX2Z1bmNfZnJleHBsPW5vOyBSRVBMQUNFX0ZSRVhQTD0xIDs7CisgICAgICBlc2FjCisgICAgZWxzZQorICAgICAgZ2xfZnVuY19mcmV4cGw9bm8KKyAgICBmaQorICAgIGlmIHRlc3QgJGdsX2Z1bmNfZnJleHBsID0geWVzOyB0aGVuCisgICAgICBBQ19ERUZJTkUoW0hBVkVfRlJFWFBMXSwgWzFdLAorICAgICAgICBbRGVmaW5lIGlmIHRoZSBmcmV4cGwoKSBmdW5jdGlvbiBpcyBhdmFpbGFibGUuXSkKKyAgICBmaQorICBmaQorICBpZiB0ZXN0ICRIQVZFX0RFQ0xfRlJFWFBMID0gMCB8fCB0ZXN0ICRnbF9mdW5jX2ZyZXhwbCA9IG5vOyB0aGVuCisgICAgZG5sIEZpbmQgbGlicmFyaWVzIG5lZWRlZCB0byBsaW5rIGxpYi9mcmV4cGwuYy4KKyAgICBpZiB0ZXN0ICRIQVZFX1NBTUVfTE9OR19ET1VCTEVfQVNfRE9VQkxFID0gMTsgdGhlbgorICAgICAgQUNfUkVRVUlSRShbZ2xfRlVOQ19GUkVYUF0pCisgICAgICBGUkVYUExfTElCTT0iJEZSRVhQX0xJQk0iCisgICAgZWxzZQorICAgICAgRlJFWFBMX0xJQk09CisgICAgZmkKKyAgZmkKKyAgQUNfU1VCU1QoW0ZSRVhQTF9MSUJNXSkKK10pCisKK0FDX0RFRlVOKFtnbF9GVU5DX0ZSRVhQTF9OT19MSUJNXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfTUFUSF9IX0RFRkFVTFRTXSkKKyAgQUNfUkVRVUlSRShbZ2xfTE9OR19ET1VCTEVfVlNfRE9VQkxFXSkKKyAgZG5sIENoZWNrIHdoZXRoZXIgaXQncyBkZWNsYXJlZC4KKyAgZG5sIE1hYyBPUyBYIDEwLjMgaGFzIGZyZXhwbCgpIGluIGxpYmMgYnV0IGRvZXNuJ3QgZGVjbGFyZSBpdCBpbiA8bWF0aC5oPi4KKyAgQUNfQ0hFQ0tfREVDTChbZnJleHBsXSwgLCBbSEFWRV9ERUNMX0ZSRVhQTD0wXSwgW1sjaW5jbHVkZSA8bWF0aC5oPl1dKQorICBpZiB0ZXN0ICRIQVZFX0RFQ0xfRlJFWFBMID0gMTsgdGhlbgorICAgIGdsX0NIRUNLX0ZSRVhQTF9OT19MSUJNCisgICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19mcmV4cGxfbm9fbGlibSA9IHllczsgdGhlbgorICAgICAgZ2xfRlVOQ19GUkVYUExfV09SS1MKKyAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX2ZyZXhwbF93b3JrcyIgaW4KKyAgICAgICAgKnllcykgZ2xfZnVuY19mcmV4cGxfbm9fbGlibT15ZXMgOzsKKyAgICAgICAgKikgICAgZ2xfZnVuY19mcmV4cGxfbm9fbGlibT1ubzsgUkVQTEFDRV9GUkVYUEw9MSA7OworICAgICAgZXNhYworICAgIGVsc2UKKyAgICAgIGdsX2Z1bmNfZnJleHBsX25vX2xpYm09bm8KKyAgICAgIGRubCBTZXQgUkVQTEFDRV9GUkVYUEwgaGVyZSBiZWNhdXNlIHRoZSBzeXN0ZW0gbWF5IGhhdmUgZnJleHBsIGluIGxpYm0uCisgICAgICBSRVBMQUNFX0ZSRVhQTD0xCisgICAgZmkKKyAgICBpZiB0ZXN0ICRnbF9mdW5jX2ZyZXhwbF9ub19saWJtID0geWVzOyB0aGVuCisgICAgICBBQ19ERUZJTkUoW0hBVkVfRlJFWFBMX0lOX0xJQkNdLCBbMV0sCisgICAgICAgIFtEZWZpbmUgaWYgdGhlIGZyZXhwbCgpIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBpbiBsaWJjLl0pCisgICAgZmkKKyAgZmkKK10pCisKK2RubCBUZXN0IHdoZXRoZXIgZnJleHBsKCkgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibS4KK2RubCBTZXQgZ2xfY3ZfZnVuY19mcmV4cGxfbm9fbGlibSB0byAneWVzJyBvciAnbm8nIGFjY29yZGluZ2x5LgorQUNfREVGVU4oW2dsX0NIRUNLX0ZSRVhQTF9OT19MSUJNXSwKK1sKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgZnJleHBsKCkgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibV0sCisgICAgW2dsX2N2X2Z1bmNfZnJleHBsX25vX2xpYm1dLAorICAgIFsKKyAgICAgIEFDX0xJTktfSUZFTFNFKAorICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgICBbWyNpbmNsdWRlIDxtYXRoLmg+CisgICAgICAgICAgICAgbG9uZyBkb3VibGUgeDtdXSwKKyAgICAgICAgICAgW1tpbnQgZTsgcmV0dXJuIGZyZXhwbCAoeCwgJmUpID4gMDtdXSldLAorICAgICAgICBbZ2xfY3ZfZnVuY19mcmV4cGxfbm9fbGlibT15ZXNdLAorICAgICAgICBbZ2xfY3ZfZnVuY19mcmV4cGxfbm9fbGlibT1ub10pCisgICAgXSkKK10pCisKK2RubCBUZXN0IHdoZXRoZXIgZnJleHBsKCkgd29ya3Mgb24gZmluaXRlIG51bWJlcnMgKHRoaXMgZmFpbHMgb24KK2RubCBNYWMgT1MgWCAxMC40L1Bvd2VyUEMsIG9uIEFJWCA1LjEsIGFuZCBvbiBCZU9TKSwgb24gZGVub3JtYWxpemVkIG51bWJlcnMKK2RubCAodGhpcyBmYWlscyBvbiBNYWMgT1MgWCAxMC41L2kzODYpLCBhbmQgYWxzbyBvbiBpbmZpbml0ZSBudW1iZXJzICh0aGlzCitkbmwgZmFpbHMgZS5nLiBvbiBJUklYIDYuNSBhbmQgbWluZ3cpLgorQUNfREVGVU4oW2dsX0ZVTkNfRlJFWFBMX1dPUktTXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkgZG5sIGZvciBjcm9zcy1jb21waWxlcworICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBmcmV4cGwgd29ya3NdLCBbZ2xfY3ZfZnVuY19mcmV4cGxfd29ya3NdLAorICAgIFsKKyAgICAgIEFDX1JVTl9JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8bWF0aC5oPgorLyogT3ZlcnJpZGUgdGhlIHZhbHVlcyBvZiA8ZmxvYXQuaD4sIGxpa2UgZG9uZSBpbiBmbG9hdC5pbi5oLiAgKi8KKyNpZiBkZWZpbmVkIF9faTM4Nl9fICYmIChkZWZpbmVkIF9fQkVPU19fIHx8IGRlZmluZWQgX19PcGVuQlNEX18pCisjIHVuZGVmIExEQkxfTUlOX0VYUAorIyBkZWZpbmUgTERCTF9NSU5fRVhQICAgICgtMTYzODEpCisjZW5kaWYKKyNpZiBkZWZpbmVkIF9faTM4Nl9fICYmIGRlZmluZWQgX19GcmVlQlNEX18KKyMgdW5kZWYgTERCTF9NSU5fRVhQCisjIGRlZmluZSBMREJMX01JTl9FWFAgICAgKC0xNjM4MSkKKyNlbmRpZgorI2lmIChkZWZpbmVkIF9BUkNIX1BQQyB8fCBkZWZpbmVkIF9QT1dFUikgJiYgZGVmaW5lZCBfQUlYICYmIChMREJMX01BTlRfRElHID09IDEwNikgJiYgZGVmaW5lZCBfX0dOVUNfXworIyB1bmRlZiBMREJMX01JTl9FWFAKKyMgZGVmaW5lIExEQkxfTUlOX0VYUCBEQkxfTUlOX0VYUAorI2VuZGlmCisjaWYgZGVmaW5lZCBfX3NnaSAmJiAoTERCTF9NQU5UX0RJRyA+PSAxMDYpCisjIGlmIGRlZmluZWQgX19HTlVDX18KKyMgIHVuZGVmIExEQkxfTUlOX0VYUAorIyAgZGVmaW5lIExEQkxfTUlOX0VYUCBEQkxfTUlOX0VYUAorIyBlbmRpZgorI2VuZGlmCitleHRlcm4KKyNpZmRlZiBfX2NwbHVzcGx1cworIkMiCisjZW5kaWYKK2xvbmcgZG91YmxlIGZyZXhwbCAobG9uZyBkb3VibGUsIGludCAqKTsKK2ludCBtYWluKCkKK3sKKyAgaW50IHJlc3VsdCA9IDA7CisgIHZvbGF0aWxlIGxvbmcgZG91YmxlIHg7CisgIC8qIFRlc3Qgb24gZmluaXRlIG51bWJlcnMgdGhhdCBmYWlscyBvbiBBSVggNS4xLiAgKi8KKyAgeCA9IDE2LjBMOworICB7CisgICAgaW50IGV4cCA9IC05OTk5OworICAgIGZyZXhwbCAoeCwgJmV4cCk7CisgICAgaWYgKGV4cCAhPSA1KQorICAgICAgcmVzdWx0IHw9IDE7CisgIH0KKyAgLyogVGVzdCBvbiBmaW5pdGUgbnVtYmVycyB0aGF0IGZhaWxzIG9uIE1hYyBPUyBYIDEwLjQsIGJlY2F1c2UgaXRzIGZyZXhwbAorICAgICBmdW5jdGlvbiByZXR1cm5zIGFuIGludmFsaWQgKGluY29ycmVjdGx5IG5vcm1hbGl6ZWQpIHZhbHVlOiBpdCByZXR1cm5zCisgICAgICAgICAgICAgICB5ID0geyAweDNmZTAyOGY1LCAweGMyOGY1YzI4LCAweDNjOWViODUxLCAweGViODUxZWI4IH0KKyAgICAgYnV0IHRoZSBjb3JyZWN0IHJlc3VsdCBpcworICAgICAgICAgIDAuNTA1TCA9IHsgMHgzZmUwMjhmNSwgMHhjMjhmNWMyOSwgMHhiYzU0N2FlMSwgMHg0N2FlMTQ4MCB9ICAqLworICB4ID0gMS4wMUw7CisgIHsKKyAgICBpbnQgZXhwID0gLTk5OTk7CisgICAgbG9uZyBkb3VibGUgeSA9IGZyZXhwbCAoeCwgJmV4cCk7CisgICAgaWYgKCEoZXhwID09IDEgJiYgeSA9PSAwLjUwNUwpKQorICAgICAgcmVzdWx0IHw9IDI7CisgIH0KKyAgLyogVGVzdCBvbiBsYXJnZSBmaW5pdGUgbnVtYmVycy4gIFRoaXMgZmFpbHMgb24gQmVPUyBhdCBpID0gMTYzMjIsIHdoaWxlCisgICAgIExEQkxfTUFYX0VYUCA9IDE2Mzg0LgorICAgICBJbiB0aGUgbG9vcCBlbmQgdGVzdCwgd2UgdGVzdCB4IGFnYWluc3QgSW5maW5pdHksIHJhdGhlciB0aGFuIGNvbXBhcmluZworICAgICBpIHdpdGggTERCTF9NQVhfRVhQLCBiZWNhdXNlIEJlT1MgPGZsb2F0Lmg+IGhhcyBhIHdyb25nIExEQkxfTUFYX0VYUC4gICovCisgIHsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAxLCB4ID0gMS4wTDsgeCAhPSB4ICsgeDsgaSsrLCB4ICo9IDIuMEwpCisgICAgICB7CisgICAgICAgIGludCBleHAgPSAtOTk5OTsKKyAgICAgICAgZnJleHBsICh4LCAmZXhwKTsKKyAgICAgICAgaWYgKGV4cCAhPSBpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCB8PSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgfQorICB9CisgIC8qIFRlc3Qgb24gZGVub3JtYWxpemVkIG51bWJlcnMuICAqLworICB7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMSwgeCA9IDEuMEw7IGkgPj0gTERCTF9NSU5fRVhQOyBpLS0sIHggKj0gMC41TCkKKyAgICAgIDsKKyAgICBpZiAoeCA+IDAuMEwpCisgICAgICB7CisgICAgICAgIGludCBleHA7CisgICAgICAgIGxvbmcgZG91YmxlIHkgPSBmcmV4cGwgKHgsICZleHApOworICAgICAgICAvKiBPbiBtYWNoaW5lcyB3aXRoIElFRUU4NTQgYXJpdGhtZXRpYzogeCA9IDEuNjgxMDVlLTQ5MzIsCisgICAgICAgICAgIGV4cCA9IC0xNjM4MiwgeSA9IDAuNS4gIE9uIE1hYyBPUyBYIDEwLjU6IGV4cCA9IC0xNjM4NCwgeSA9IDAuNS4gICovCisgICAgICAgIGlmIChleHAgIT0gTERCTF9NSU5fRVhQIC0gMSkKKyAgICAgICAgICByZXN1bHQgfD0gODsKKyAgICAgIH0KKyAgfQorICAvKiBUZXN0IG9uIGluZmluaXRlIG51bWJlcnMuICAqLworICB4ID0gMS4wTCAvIDAuMEw7CisgIHsKKyAgICBpbnQgZXhwOworICAgIGxvbmcgZG91YmxlIHkgPSBmcmV4cGwgKHgsICZleHApOworICAgIGlmICh5ICE9IHgpCisgICAgICByZXN1bHQgfD0gMTY7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK31dXSldLAorICAgICAgICBbZ2xfY3ZfZnVuY19mcmV4cGxfd29ya3M9eWVzXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfZnJleHBsX3dvcmtzPW5vXSwKKyAgICAgICAgWworY2hhbmdlcXVvdGUoLClkbmwKKyAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICBhaXggfCBhaXhbMy02XSogfCBiZW9zKiB8IGRhcndpbiogfCBpcml4KiB8IG1pbmd3KiB8IHB3KikKKyAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19mcmV4cGxfd29ya3M9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICopIGdsX2N2X2Z1bmNfZnJleHBsX3dvcmtzPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgIGVzYWMKK2NoYW5nZXF1b3RlKFssXSlkbmwKKyAgICAgICAgXSkKKyAgICBdKQorXSkKZGlmZiAtLWdpdCBhL200L2ZzZXRlcnIubTQgYi9tNC9mc2V0ZXJyLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYjMxOTcKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9mc2V0ZXJyLm00CkBAIC0wLDAgKzEsMTAgQEAKKyMgZnNldGVyci5tNCBzZXJpYWwgMQorZG5sIENvcHlyaWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ2xfRlVOQ19GU0VURVJSXSwKK1sKKyAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbX19mc2V0ZXJyXSkKK10pCmRpZmYgLS1naXQgYS9tNC9mc3RhdC5tNCBiL200L2ZzdGF0Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3M2JhYTIKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9mc3RhdC5tNApAQCAtMCwwICsxLDM2IEBACisjIGZzdGF0Lm00IHNlcmlhbCA0CitkbmwgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0ZVTkNfRlNUQVRdLAorWworICBBQ19SRVFVSVJFKFtnbF9TWVNfU1RBVF9IX0RFRkFVTFRTXSkKKworICBBQ19SRVFVSVJFKFtnbF9NU1ZDX0lOVkFMXSkKKyAgaWYgdGVzdCAkSEFWRV9NU1ZDX0lOVkFMSURfUEFSQU1FVEVSX0hBTkRMRVIgPSAxOyB0aGVuCisgICAgUkVQTEFDRV9GU1RBVD0xCisgIGZpCisKKyAgQUNfUkVRVUlSRShbZ2xfSEVBREVSX1NZU19TVEFUX0hdKQorICBpZiB0ZXN0ICRXSU5ET1dTXzY0X0JJVF9TVF9TSVpFID0gMTsgdGhlbgorICAgIFJFUExBQ0VfRlNUQVQ9MQorICBmaQorCisgIGRubCBSZXBsYWNlIGZzdGF0KCkgZm9yIHN1cHBvcnRpbmcgdGhlIGdudWxpYi1kZWZpbmVkIG9wZW4oKSBvbiBkaXJlY3Rvcmllcy4KKyAgbTRfaWZkZWYoW2dsX0ZVTkNfRkNIRElSXSwgWworICAgIGdsX1RFU1RfRkNIRElSCisgICAgaWYgdGVzdCAkSEFWRV9GQ0hESVIgPSAwOyB0aGVuCisgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19vcGVuX2RpcmVjdG9yeV93b3JrcyIgaW4KKyAgICAgICAgKnllcykgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBSRVBMQUNFX0ZTVEFUPTEKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgIGZpCisgIF0pCitdKQorCisjIFByZXJlcXVpc2l0ZXMgb2YgbGliL2ZzdGF0LmMuCitBQ19ERUZVTihbZ2xfUFJFUkVRX0ZTVEFUXSwgWzpdKQpkaWZmIC0tZ2l0IGEvbTQvZ2V0ZGVsaW0ubTQgYi9tNC9nZXRkZWxpbS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmY0ODcyCi0tLSAvZGV2L251bGwKKysrIGIvbTQvZ2V0ZGVsaW0ubTQKQEAgLTAsMCArMSw4OCBAQAorIyBnZXRkZWxpbS5tNCBzZXJpYWwgMTAKKworZG5sIENvcHlyaWdodCAoQykgMjAwNS0yMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwKK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19QUkVSRVEoWzIuNTldKQorCitBQ19ERUZVTihbZ2xfRlVOQ19HRVRERUxJTV0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1NURElPX0hfREVGQVVMVFNdKQorCisgIGRubCBQZXJzdWFkZSBnbGliYyA8c3RkaW8uaD4gdG8gZGVjbGFyZSBnZXRkZWxpbSgpLgorICBBQ19SRVFVSVJFKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorCisgIEFDX0NIRUNLX0RFQ0xTX09OQ0UoW2dldGRlbGltXSkKKworICBBQ19DSEVDS19GVU5DU19PTkNFKFtnZXRkZWxpbV0pCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfZ2V0ZGVsaW0gPSB5ZXM7IHRoZW4KKyAgICBIQVZFX0dFVERFTElNPTEKKyAgICBkbmwgRm91bmQgaXQgaW4gc29tZSBsaWJyYXJ5LiAgVmVyaWZ5IHRoYXQgaXQgd29ya3MuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3b3JraW5nIGdldGRlbGltIGZ1bmN0aW9uXSwgW2dsX2N2X2Z1bmNfd29ya2luZ19nZXRkZWxpbV0sCisgICAgW2VjaG8gZm9vTmJhck4gfCB0ciAtZCAnXDAxMicgfCB0ciBOICdcMDEyJyA+IGNvbmZ0ZXN0LmRhdGEKKyAgICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWworIyAgICBpbmNsdWRlIDxzdGRpby5oPgorIyAgICBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgICAgaW5jbHVkZSA8c3RyaW5nLmg+CisgICAgaW50IG1haW4gKCkKKyAgICB7CisgICAgICBGSUxFICppbiA9IGZvcGVuICgiLi9jb25mdGVzdC5kYXRhIiwgInIiKTsKKyAgICAgIGlmICghaW4pCisgICAgICAgIHJldHVybiAxOworICAgICAgeworICAgICAgICAvKiBUZXN0IHJlc3VsdCBmb3IgYSBOVUxMIGJ1ZmZlciBhbmQgYSB6ZXJvIHNpemUuCisgICAgICAgICAgIEJhc2VkIG9uIGEgdGVzdCBwcm9ncmFtIGZyb20gS2FybCBIZXVlci4gICovCisgICAgICAgIGNoYXIgKmxpbmUgPSBOVUxMOworICAgICAgICBzaXplX3Qgc2l6ID0gMDsKKyAgICAgICAgaW50IGxlbiA9IGdldGRlbGltICgmbGluZSwgJnNpeiwgJ1xuJywgaW4pOworICAgICAgICBpZiAoIShsZW4gPT0gNCAmJiBsaW5lICYmIHN0cmNtcCAobGluZSwgImZvb1xuIikgPT0gMCkpCisgICAgICAgICAgcmV0dXJuIDI7CisgICAgICB9CisgICAgICB7CisgICAgICAgIC8qIFRlc3QgcmVzdWx0IGZvciBhIE5VTEwgYnVmZmVyIGFuZCBhIG5vbi16ZXJvIHNpemUuCisgICAgICAgICAgIFRoaXMgY3Jhc2hlcyBvbiBGcmVlQlNEIDguMC4gICovCisgICAgICAgIGNoYXIgKmxpbmUgPSBOVUxMOworICAgICAgICBzaXplX3Qgc2l6ID0gKHNpemVfdCkofjApIC8gNDsKKyAgICAgICAgaWYgKGdldGRlbGltICgmbGluZSwgJnNpeiwgJ1xuJywgaW4pID09IC0xKQorICAgICAgICAgIHJldHVybiAzOworICAgICAgfQorICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIF1dKV0sIFtnbF9jdl9mdW5jX3dvcmtpbmdfZ2V0ZGVsaW09eWVzXSBkbmwgVGhlIGxpYnJhcnkgdmVyc2lvbiB3b3Jrcy4KKyAgICAsIFtnbF9jdl9mdW5jX3dvcmtpbmdfZ2V0ZGVsaW09bm9dIGRubCBUaGUgbGlicmFyeSB2ZXJzaW9uIGRvZXMgTk9UIHdvcmsuCisgICAgLCBkbmwgV2UncmUgY3Jvc3MgY29tcGlsaW5nLiBBc3N1bWUgaXQgd29ya3Mgb24gZ2xpYmMyIHN5c3RlbXMuCisgICAgICBbQUNfRUdSRVBfQ1BQKFtMdWNreSBHTlUgdXNlcl0sCisgICAgICAgICBbCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpZmRlZiBfX0dOVV9MSUJSQVJZX18KKyAjaWYgKF9fR0xJQkNfXyA+PSAyKSAmJiAhZGVmaW5lZCBfX1VDTElCQ19fCisgIEx1Y2t5IEdOVSB1c2VyCisgI2VuZGlmCisjZW5kaWYKKyAgICAgICAgIF0sCisgICAgICAgICBbZ2xfY3ZfZnVuY193b3JraW5nX2dldGRlbGltPSJndWVzc2luZyB5ZXMiXSwKKyAgICAgICAgIFtnbF9jdl9mdW5jX3dvcmtpbmdfZ2V0ZGVsaW09Imd1ZXNzaW5nIG5vIl0pXQorICAgICldKQorICAgIGNhc2UgIiRnbF9jdl9mdW5jX3dvcmtpbmdfZ2V0ZGVsaW0iIGluCisgICAgICAqbm8pCisgICAgICAgIFJFUExBQ0VfR0VUREVMSU09MQorICAgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIEhBVkVfR0VUREVMSU09MAorICBmaQorCisgIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9nZXRkZWxpbSA9IG5vOyB0aGVuCisgICAgSEFWRV9ERUNMX0dFVERFTElNPTAKKyAgZmkKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvZ2V0ZGVsaW0uYy4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfR0VUREVMSU1dLAorWworICBBQ19DSEVDS19GVU5DUyhbZmxvY2tmaWxlIGZ1bmxvY2tmaWxlXSkKKyAgQUNfQ0hFQ0tfREVDTFMoW2dldGNfdW5sb2NrZWRdKQorXSkKZGlmZiAtLWdpdCBhL200L2dldGR0YWJsZXNpemUubTQgYi9tNC9nZXRkdGFibGVzaXplLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YTYxMTcKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9nZXRkdGFibGVzaXplLm00CkBAIC0wLDAgKzEsMTcgQEAKKyMgZ2V0ZHRhYmxlc2l6ZS5tNCBzZXJpYWwgNAorZG5sIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9GVU5DX0dFVERUQUJMRVNJWkVdLAorWworICBBQ19SRVFVSVJFKFtnbF9VTklTVERfSF9ERUZBVUxUU10pCisgIEFDX0NIRUNLX0ZVTkNTX09OQ0UoW2dldGR0YWJsZXNpemVdKQorICBpZiB0ZXN0ICRhY19jdl9mdW5jX2dldGR0YWJsZXNpemUgIT0geWVzOyB0aGVuCisgICAgSEFWRV9HRVREVEFCTEVTSVpFPTAKKyAgZmkKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvZ2V0ZHRhYmxlc2l6ZS5jLgorQUNfREVGVU4oW2dsX1BSRVJFUV9HRVREVEFCTEVTSVpFXSwgWzpdKQpkaWZmIC0tZ2l0IGEvbTQvZ2V0bGluZS5tNCBiL200L2dldGxpbmUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJmYmM5ZAotLS0gL2Rldi9udWxsCisrKyBiL200L2dldGxpbmUubTQKQEAgLTAsMCArMSw5NiBAQAorIyBnZXRsaW5lLm00IHNlcmlhbCAyNgorCitkbmwgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDMsIDIwMDUtMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK2RubCBJbmMuCitkbmwKK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19QUkVSRVEoWzIuNTldKQorCitkbmwgU2VlIGlmIHRoZXJlJ3MgYSB3b3JraW5nLCBzeXN0ZW0tc3VwcGxpZWQgdmVyc2lvbiBvZiB0aGUgZ2V0bGluZSBmdW5jdGlvbi4KK2RubCBXZSBjYW4ndCBqdXN0IGRvIEFDX1JFUExBQ0VfRlVOQ1MoW2dldGxpbmVdKSBiZWNhdXNlIHNvbWUgc3lzdGVtcworZG5sIGhhdmUgYSBmdW5jdGlvbiBieSB0aGF0IG5hbWUgaW4gLWxpbmV0IHRoYXQgZG9lc24ndCBoYXZlIGFueXRoaW5nCitkbmwgdG8gZG8gd2l0aCB0aGUgZnVuY3Rpb24gd2UgbmVlZC4KK0FDX0RFRlVOKFtnbF9GVU5DX0dFVExJTkVdLAorWworICBBQ19SRVFVSVJFKFtnbF9TVERJT19IX0RFRkFVTFRTXSkKKworICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHN0ZGlvLmg+IHRvIGRlY2xhcmUgZ2V0bGluZSgpLgorICBBQ19SRVFVSVJFKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorCisgIEFDX0NIRUNLX0RFQ0xTX09OQ0UoW2dldGxpbmVdKQorCisgIGdsX2dldGxpbmVfbmVlZHNfcnVuX3RpbWVfY2hlY2s9bm8KKyAgQUNfQ0hFQ0tfRlVOQyhbZ2V0bGluZV0sCisgICAgICAgICAgICAgICAgW2RubCBGb3VuZCBpdCBpbiBzb21lIGxpYnJhcnkuICBWZXJpZnkgdGhhdCBpdCB3b3Jrcy4KKyAgICAgICAgICAgICAgICAgZ2xfZ2V0bGluZV9uZWVkc19ydW5fdGltZV9jaGVjaz15ZXNdLAorICAgICAgICAgICAgICAgIFthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT1ub10pCisgIGlmIHRlc3QgJGdsX2dldGxpbmVfbmVlZHNfcnVuX3RpbWVfY2hlY2sgPSB5ZXM7IHRoZW4KKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIHdvcmtpbmcgZ2V0bGluZSBmdW5jdGlvbl0sIFthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZV0sCisgICAgW2VjaG8gZm9vTmJhck4gfCB0ciAtZCAnXDAxMicgfCB0ciBOICdcMDEyJyA+IGNvbmZ0ZXN0LmRhdGEKKyAgICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWworIyAgICBpbmNsdWRlIDxzdGRpby5oPgorIyAgICBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgICAgaW5jbHVkZSA8c3RyaW5nLmg+CisgICAgaW50IG1haW4gKCkKKyAgICB7CisgICAgICBGSUxFICppbiA9IGZvcGVuICgiLi9jb25mdGVzdC5kYXRhIiwgInIiKTsKKyAgICAgIGlmICghaW4pCisgICAgICAgIHJldHVybiAxOworICAgICAgeworICAgICAgICAvKiBUZXN0IHJlc3VsdCBmb3IgYSBOVUxMIGJ1ZmZlciBhbmQgYSB6ZXJvIHNpemUuCisgICAgICAgICAgIEJhc2VkIG9uIGEgdGVzdCBwcm9ncmFtIGZyb20gS2FybCBIZXVlci4gICovCisgICAgICAgIGNoYXIgKmxpbmUgPSBOVUxMOworICAgICAgICBzaXplX3Qgc2l6ID0gMDsKKyAgICAgICAgaW50IGxlbiA9IGdldGxpbmUgKCZsaW5lLCAmc2l6LCBpbik7CisgICAgICAgIGlmICghKGxlbiA9PSA0ICYmIGxpbmUgJiYgc3RyY21wIChsaW5lLCAiZm9vXG4iKSA9PSAwKSkKKyAgICAgICAgICByZXR1cm4gMjsKKyAgICAgIH0KKyAgICAgIHsKKyAgICAgICAgLyogVGVzdCByZXN1bHQgZm9yIGEgTlVMTCBidWZmZXIgYW5kIGEgbm9uLXplcm8gc2l6ZS4KKyAgICAgICAgICAgVGhpcyBjcmFzaGVzIG9uIEZyZWVCU0QgOC4wLiAgKi8KKyAgICAgICAgY2hhciAqbGluZSA9IE5VTEw7CisgICAgICAgIHNpemVfdCBzaXogPSAoc2l6ZV90KSh+MCkgLyA0OworICAgICAgICBpZiAoZ2V0bGluZSAoJmxpbmUsICZzaXosIGluKSA9PSAtMSkKKyAgICAgICAgICByZXR1cm4gMzsKKyAgICAgIH0KKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBdXSldLCBbYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzXSBkbmwgVGhlIGxpYnJhcnkgdmVyc2lvbiB3b3Jrcy4KKyAgICAsIFthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT1ub10gZG5sIFRoZSBsaWJyYXJ5IHZlcnNpb24gZG9lcyBOT1Qgd29yay4KKyAgICAsIGRubCBXZSdyZSBjcm9zcyBjb21waWxpbmcuIEFzc3VtZSBpdCB3b3JrcyBvbiBnbGliYzIgc3lzdGVtcy4KKyAgICAgIFtBQ19FR1JFUF9DUFAoW0x1Y2t5IEdOVSB1c2VyXSwKKyAgICAgICAgIFsKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorI2lmZGVmIF9fR05VX0xJQlJBUllfXworICNpZiAoX19HTElCQ19fID49IDIpICYmICFkZWZpbmVkIF9fVUNMSUJDX18KKyAgTHVja3kgR05VIHVzZXIKKyAjZW5kaWYKKyNlbmRpZgorICAgICAgICAgXSwKKyAgICAgICAgIFthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0iZ3Vlc3NpbmcgeWVzIl0sCisgICAgICAgICBbYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9Imd1ZXNzaW5nIG5vIl0pXQorICAgICldKQorICBmaQorCisgIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9nZXRsaW5lID0gbm87IHRoZW4KKyAgICBIQVZFX0RFQ0xfR0VUTElORT0wCisgIGZpCisKKyAgY2FzZSAiJGFtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lIiBpbgorICAgICpubykKKyAgICAgIGRubCBTZXQgUkVQTEFDRV9HRVRMSU5FIGFsd2F5czogRXZlbiBpZiB3ZSBoYXZlIG5vdCBmb3VuZCB0aGUgYnJva2VuCisgICAgICBkbmwgZ2V0bGluZSBmdW5jdGlvbiBhbW9uZyAkTElCUywgaXQgbWF5IGV4aXN0IGluIGxpYmluZXQgYW5kIHRoZQorICAgICAgZG5sIGV4ZWN1dGFibGUgbWF5IGJlIGxpbmtlZCB3aXRoIC1saW5ldC4KKyAgICAgIFJFUExBQ0VfR0VUTElORT0xCisgICAgICA7OworICBlc2FjCitdKQorCisjIFByZXJlcXVpc2l0ZXMgb2YgbGliL2dldGxpbmUuYy4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfR0VUTElORV0sCitbCisgIDoKK10pCmRpZmYgLS1naXQgYS9tNC9nZXRvcHQubTQgYi9tNC9nZXRvcHQubTQKaW5kZXggZTYwYjc0Ni4uZjY5MDJiNSAxMDA2NDQKLS0tIGEvbTQvZ2V0b3B0Lm00CisrKyBiL200L2dldG9wdC5tNApAQCAtMSwxOSArMSwzNTUgQEAKLSMgZ2V0b3B0Lm00IHNlcmlhbCAxMgotZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgZ2V0b3B0Lm00IHNlcmlhbCA0NAorZG5sIENvcHlyaWdodCAoQykgMjAwMi0yMDA2LCAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBUaGUgZ2V0b3B0IG1vZHVsZSBhc3N1bWUgeW91IHdhbnQgR05VIGdldG9wdCwgd2l0aCBnZXRvcHRfbG9uZyBldGMsCi0jIHJhdGhlciB0aGFuIHZhbmlsbGEgUE9TSVggZ2V0b3B0LiAgVGhpcyBtZWFucyB5b3VyIHlvdXIgY29kZSBzaG91bGQKLSMgYWx3YXlzIGluY2x1ZGUgPGdldG9wdC5oPiBmb3IgdGhlIGdldG9wdCBwcm90b3R5cGVzLgotCi1BQ19ERUZVTihbZ2xfR0VUT1BUX1NVQlNUSVRVVEVdLAorIyBSZXF1ZXN0IGEgUE9TSVggY29tcGxpYW50IGdldG9wdCBmdW5jdGlvbi4KK0FDX0RFRlVOKFtnbF9GVU5DX0dFVE9QVF9QT1NJWF0sCiBbCi0gIEFDX0xJQk9CSihbZ2V0b3B0XSkKLSAgQUNfTElCT0JKKFtnZXRvcHQxXSkKLSAgZ2xfR0VUT1BUX1NVQlNUSVRVVEVfSEVBREVSCi0gIGdsX1BSRVJFUV9HRVRPUFQKKyAgbTRfZGl2ZXJ0X3RleHQoW0RFRkFVTFRTXSwgW2dsX2dldG9wdF9yZXF1aXJlZD1QT1NJWF0pCisgIEFDX1JFUVVJUkUoW2dsX1VOSVNURF9IX0RFRkFVTFRTXSkKKyAgQUNfUkVRVUlSRShbZ2xfR0VUT1BUX0NIRUNLX0hFQURFUlNdKQorICBkbmwgT3RoZXIgbW9kdWxlcyBjYW4gcmVxdWVzdCB0aGUgZ251bGliIGltcGxlbWVudGF0aW9uIG9mIHRoZSBnZXRvcHQKKyAgZG5sIGZ1bmN0aW9ucyB1bmNvbmRpdGlvbmFsbHksIGJ5IGRlZmluaW5nIGdsX1JFUExBQ0VfR0VUT1BUX0FMV0FZUy4KKyAgZG5sIGFyZ3AubTQgZG9lcyB0aGlzLgorICBtNF9pZmRlZihbZ2xfUkVQTEFDRV9HRVRPUFRfQUxXQVlTXSwgWworICAgIFJFUExBQ0VfR0VUT1BUPTEKKyAgXSwgWworICAgIFJFUExBQ0VfR0VUT1BUPTAKKyAgICBpZiB0ZXN0IC1uICIkZ2xfcmVwbGFjZV9nZXRvcHQiOyB0aGVuCisgICAgICBSRVBMQUNFX0dFVE9QVD0xCisgICAgZmkKKyAgXSkKKyAgaWYgdGVzdCAkUkVQTEFDRV9HRVRPUFQgPSAxOyB0aGVuCisgICAgZG5sIEFycmFuZ2UgZm9yIGdldG9wdC5oIHRvIGJlIGNyZWF0ZWQuCisgICAgZ2xfR0VUT1BUX1NVQlNUSVRVVEVfSEVBREVSCisgIGZpCitdKQorCisjIFJlcXVlc3QgYSBQT1NJWCBjb21wbGlhbnQgZ2V0b3B0IGZ1bmN0aW9uIHdpdGggR05VIGV4dGVuc2lvbnMgKHN1Y2ggYXMKKyMgb3B0aW9ucyB3aXRoIG9wdGlvbmFsIGFyZ3VtZW50cykgYW5kIHRoZSBmdW5jdGlvbnMgZ2V0b3B0X2xvbmcsCisjIGdldG9wdF9sb25nX29ubHkuCitBQ19ERUZVTihbZ2xfRlVOQ19HRVRPUFRfR05VXSwKK1sKKyAgbTRfZGl2ZXJ0X3RleHQoW0lOSVRfUFJFUEFSRV0sIFtnbF9nZXRvcHRfcmVxdWlyZWQ9R05VXSkKKworICBBQ19SRVFVSVJFKFtnbF9GVU5DX0dFVE9QVF9QT1NJWF0pCitdKQorCisjIERldGVybWluZSB3aGV0aGVyIHRvIHJlcGxhY2UgdGhlIGVudGlyZSBnZXRvcHQgZmFjaWxpdHkuCitBQ19ERUZVTihbZ2xfR0VUT1BUX0NIRUNLX0hFQURFUlNdLAorWworICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pIGRubCBmb3IgY3Jvc3MtY29tcGlsZXMKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19BV0tdKSBkbmwgZm9yIGF3ayB0aGF0IHN1cHBvcnRzIEVOVklST04KKworICBkbmwgUGVyc3VhZGUgU29sYXJpcyA8dW5pc3RkLmg+IHRvIGRlY2xhcmUgb3B0YXJnLCBvcHRpbmQsIG9wdGVyciwgb3B0b3B0LgorICBBQ19SRVFVSVJFKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorCisgIGdsX0NIRUNLX05FWFRfSEVBREVSUyhbZ2V0b3B0LmhdKQorICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfZ2V0b3B0X2ggPSB5ZXM7IHRoZW4KKyAgICBIQVZFX0dFVE9QVF9IPTEKKyAgZWxzZQorICAgIEhBVkVfR0VUT1BUX0g9MAorICBmaQorICBBQ19TVUJTVChbSEFWRV9HRVRPUFRfSF0pCisKKyAgZ2xfcmVwbGFjZV9nZXRvcHQ9CisKKyAgZG5sIFRlc3Qgd2hldGhlciA8Z2V0b3B0Lmg+IGlzIGF2YWlsYWJsZS4KKyAgaWYgdGVzdCAteiAiJGdsX3JlcGxhY2VfZ2V0b3B0IiAmJiB0ZXN0ICRnbF9nZXRvcHRfcmVxdWlyZWQgPSBHTlU7IHRoZW4KKyAgICBBQ19DSEVDS19IRUFERVJTKFtnZXRvcHQuaF0sIFtdLCBbZ2xfcmVwbGFjZV9nZXRvcHQ9eWVzXSkKKyAgZmkKKworICBkbmwgVGVzdCB3aGV0aGVyIHRoZSBmdW5jdGlvbiBnZXRvcHRfbG9uZyBpcyBhdmFpbGFibGUuCisgIGlmIHRlc3QgLXogIiRnbF9yZXBsYWNlX2dldG9wdCIgJiYgdGVzdCAkZ2xfZ2V0b3B0X3JlcXVpcmVkID0gR05VOyB0aGVuCisgICAgQUNfQ0hFQ0tfRlVOQ1MoW2dldG9wdF9sb25nX29ubHldLCBbXSwgW2dsX3JlcGxhY2VfZ2V0b3B0PXllc10pCisgIGZpCisKKyAgZG5sIFBPU0lYIDIwMDggZG9lcyBub3Qgc3BlY2lmeSBsZWFkaW5nICcrJyBiZWhhdmlvciwgYnV0IHNlZQorICBkbmwgaHR0cDovL2F1c3Rpbmdyb3VwYnVncy5uZXQvdmlldy5waHA/aWQ9MTkxIGZvciBhIHJlY29tbWVuZGF0aW9uIG9uCisgIGRubCB0aGUgbmV4dCB2ZXJzaW9uIG9mIFBPU0lYLiAgRm9yIG5vdywgd2Ugb25seSBndWFyYW50ZWUgbGVhZGluZyAnKycKKyAgZG5sIGJlaGF2aW9yIHdpdGggZ2V0b3B0LWdudS4KKyAgaWYgdGVzdCAteiAiJGdsX3JlcGxhY2VfZ2V0b3B0IjsgdGhlbgorICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGdldG9wdCBpcyBQT1NJWCBjb21wYXRpYmxlXSwKKyAgICAgIFtnbF9jdl9mdW5jX2dldG9wdF9wb3NpeF0sCisgICAgICBbCisgICAgICAgIGRubCBNZXJnaW5nIHRoZXNlIHRocmVlIGRpZmZlcmVudCB0ZXN0IHByb2dyYW1zIGludG8gYSBzaW5nbGUgb25lCisgICAgICAgIGRubCB3b3VsZCByZXF1aXJlIGEgcmVzZXQgbWVjaGFuaXNtLiBPbiBCU0Qgc3lzdGVtcywgaXQgY2FuIGJlIGRvbmUKKyAgICAgICAgZG5sIHRocm91Z2ggJ29wdHJlc2V0Jzsgb24gc29tZSBvdGhlcnMgKGdsaWJjKSwgaXQgY2FuIGJlIGRvbmUgYnkKKyAgICAgICAgZG5sIHNldHRpbmcgJ29wdGluZCcgdG8gMDsgb24gb3RoZXJzIGFnYWluIChIUC1VWCwgSVJJWCwgT1NGLzEsCisgICAgICAgIGRubCBTb2xhcmlzIDksIG11c2wgbGliYyksIHRoZXJlIGlzIG5vIHN1Y2ggbWVjaGFuaXNtLgorICAgICAgICBpZiB0ZXN0ICRjcm9zc19jb21waWxpbmcgPSBubzsgdGhlbgorICAgICAgICAgIGRubCBTYW5pdHkgY2hlY2suIFN1Y2NlZWRzIGV2ZXJ5d2hlcmUgKGV4Y2VwdCBvbiBNU1ZDLAorICAgICAgICAgIGRubCB3aGljaCBsYWNrcyA8dW5pc3RkLmg+IGFuZCBnZXRvcHQoKSBlbnRpcmVseSkuCisgICAgICAgICAgQUNfUlVOX0lGRUxTRSgKKyAgICAgICAgICAgIFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitpbnQKK21haW4gKCkKK3sKKyAgc3RhdGljIGNoYXIgcHJvZ3JhbVtdID0gInByb2dyYW0iOworICBzdGF0aWMgY2hhciBhW10gPSAiLWEiOworICBzdGF0aWMgY2hhciBmb29bXSA9ICJmb28iOworICBzdGF0aWMgY2hhciBiYXJbXSA9ICJiYXIiOworICBjaGFyICphcmd2W10gPSB7IHByb2dyYW0sIGEsIGZvbywgYmFyLCBOVUxMIH07CisgIGludCBjOworCisgIGMgPSBnZXRvcHQgKDQsIGFyZ3YsICJhYiIpOworICBpZiAoIShjID09ICdhJykpCisgICAgcmV0dXJuIDE7CisgIGMgPSBnZXRvcHQgKDQsIGFyZ3YsICJhYiIpOworICBpZiAoIShjID09IC0xKSkKKyAgICByZXR1cm4gMjsKKyAgaWYgKCEob3B0aW5kID09IDIpKQorICAgIHJldHVybiAzOworICByZXR1cm4gMDsKK30KK11dKV0sCisgICAgICAgICAgICBbZ2xfY3ZfZnVuY19nZXRvcHRfcG9zaXg9bWF5YmVdLAorICAgICAgICAgICAgW2dsX2N2X2Z1bmNfZ2V0b3B0X3Bvc2l4PW5vXSkKKyAgICAgICAgICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2dldG9wdF9wb3NpeCA9IG1heWJlOyB0aGVuCisgICAgICAgICAgICBkbmwgU2FuaXR5IGNoZWNrIHdpdGggJysnLiBTdWNjZWVkcyBldmVyeXdoZXJlIChleGNlcHQgb24gTVNWQywKKyAgICAgICAgICAgIGRubCB3aGljaCBsYWNrcyA8dW5pc3RkLmg+IGFuZCBnZXRvcHQoKSBlbnRpcmVseSkuCisgICAgICAgICAgICBBQ19SVU5fSUZFTFNFKAorICAgICAgICAgICAgICBbQUNfTEFOR19TT1VSQ0UoW1sKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworaW50CittYWluICgpCit7CisgIHN0YXRpYyBjaGFyIHByb2dyYW1bXSA9ICJwcm9ncmFtIjsKKyAgc3RhdGljIGNoYXIgZG9uYWxkW10gPSAiZG9uYWxkIjsKKyAgc3RhdGljIGNoYXIgcFtdID0gIi1wIjsKKyAgc3RhdGljIGNoYXIgYmlsbHlbXSA9ICJiaWxseSI7CisgIHN0YXRpYyBjaGFyIGR1Y2tbXSA9ICJkdWNrIjsKKyAgc3RhdGljIGNoYXIgYVtdID0gIi1hIjsKKyAgc3RhdGljIGNoYXIgYmFyW10gPSAiYmFyIjsKKyAgY2hhciAqYXJndltdID0geyBwcm9ncmFtLCBkb25hbGQsIHAsIGJpbGx5LCBkdWNrLCBhLCBiYXIsIE5VTEwgfTsKKyAgaW50IGM7CisKKyAgYyA9IGdldG9wdCAoNywgYXJndiwgIithYnA6cToiKTsKKyAgaWYgKCEoYyA9PSAtMSkpCisgICAgcmV0dXJuIDQ7CisgIGlmICghKHN0cmNtcCAoYXJndlswXSwgInByb2dyYW0iKSA9PSAwKSkKKyAgICByZXR1cm4gNTsKKyAgaWYgKCEoc3RyY21wIChhcmd2WzFdLCAiZG9uYWxkIikgPT0gMCkpCisgICAgcmV0dXJuIDY7CisgIGlmICghKHN0cmNtcCAoYXJndlsyXSwgIi1wIikgPT0gMCkpCisgICAgcmV0dXJuIDc7CisgIGlmICghKHN0cmNtcCAoYXJndlszXSwgImJpbGx5IikgPT0gMCkpCisgICAgcmV0dXJuIDg7CisgIGlmICghKHN0cmNtcCAoYXJndls0XSwgImR1Y2siKSA9PSAwKSkKKyAgICByZXR1cm4gOTsKKyAgaWYgKCEoc3RyY21wIChhcmd2WzVdLCAiLWEiKSA9PSAwKSkKKyAgICByZXR1cm4gMTA7CisgIGlmICghKHN0cmNtcCAoYXJndls2XSwgImJhciIpID09IDApKQorICAgIHJldHVybiAxMTsKKyAgaWYgKCEob3B0aW5kID09IDEpKQorICAgIHJldHVybiAxMjsKKyAgcmV0dXJuIDA7Cit9CitdXSldLAorICAgICAgICAgICAgICBbZ2xfY3ZfZnVuY19nZXRvcHRfcG9zaXg9bWF5YmVdLAorICAgICAgICAgICAgICBbZ2xfY3ZfZnVuY19nZXRvcHRfcG9zaXg9bm9dKQorICAgICAgICAgIGZpCisgICAgICAgICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19nZXRvcHRfcG9zaXggPSBtYXliZTsgdGhlbgorICAgICAgICAgICAgZG5sIERldGVjdCBNYWMgT1MgWCAxMC41LCBBSVggNy4xLCBtaW5ndyBidWcuCisgICAgICAgICAgICBBQ19SVU5fSUZFTFNFKAorICAgICAgICAgICAgICBbQUNfTEFOR19TT1VSQ0UoW1sKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworaW50CittYWluICgpCit7CisgIHN0YXRpYyBjaGFyIHByb2dyYW1bXSA9ICJwcm9ncmFtIjsKKyAgc3RhdGljIGNoYXIgYWJbXSA9ICItYWIiOworICBjaGFyICphcmd2WzNdID0geyBwcm9ncmFtLCBhYiwgTlVMTCB9OworICBpZiAoZ2V0b3B0ICgyLCBhcmd2LCAiYWI6IikgIT0gJ2EnKQorICAgIHJldHVybiAxMzsKKyAgaWYgKGdldG9wdCAoMiwgYXJndiwgImFiOiIpICE9ICc/JykKKyAgICByZXR1cm4gMTQ7CisgIGlmIChvcHRvcHQgIT0gJ2InKQorICAgIHJldHVybiAxNTsKKyAgaWYgKG9wdGluZCAhPSAyKQorICAgIHJldHVybiAxNjsKKyAgcmV0dXJuIDA7Cit9CitdXSldLAorICAgICAgICAgICAgICBbZ2xfY3ZfZnVuY19nZXRvcHRfcG9zaXg9eWVzXSwKKyAgICAgICAgICAgICAgW2dsX2N2X2Z1bmNfZ2V0b3B0X3Bvc2l4PW5vXSkKKyAgICAgICAgICBmaQorICAgICAgICBlbHNlCisgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICBkYXJ3aW4qIHwgYWl4KiB8IG1pbmd3KikgZ2xfY3ZfZnVuY19nZXRvcHRfcG9zaXg9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICAqKSAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19nZXRvcHRfcG9zaXg9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgZmkKKyAgICAgIF0pCisgICAgY2FzZSAiJGdsX2N2X2Z1bmNfZ2V0b3B0X3Bvc2l4IiBpbgorICAgICAgKm5vKSBnbF9yZXBsYWNlX2dldG9wdD15ZXMgOzsKKyAgICBlc2FjCisgIGZpCisKKyAgaWYgdGVzdCAteiAiJGdsX3JlcGxhY2VfZ2V0b3B0IiAmJiB0ZXN0ICRnbF9nZXRvcHRfcmVxdWlyZWQgPSBHTlU7IHRoZW4KKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIHdvcmtpbmcgR05VIGdldG9wdCBmdW5jdGlvbl0sIFtnbF9jdl9mdW5jX2dldG9wdF9nbnVdLAorICAgICAgWyMgRXZlbiB3aXRoIFBPU0lYTFlfQ09SUkVDVCwgdGhlIEdOVSBleHRlbnNpb24gb2YgbGVhZGluZyAnLScgaW4gdGhlCisgICAgICAgIyBvcHRzdHJpbmcgaXMgbmVjZXNzYXJ5IGZvciBwcm9ncmFtcyBsaWtlIG00IHRoYXQgaGF2ZSBQT1NJWC1tYW5kYXRlZAorICAgICAgICMgc2VtYW50aWNzIGZvciBzdXBwb3J0aW5nIG9wdGlvbnMgaW50ZXJzcGVyc2VkIHdpdGggZmlsZXMuCisgICAgICAgIyBBbHNvLCBzaW5jZSBnZXRvcHRfbG9uZyBpcyBhIEdOVSBleHRlbnNpb24sIHdlIHJlcXVpcmUgb3B0aW5kPTAuCisgICAgICAgIyBCYXNoIHRpZXMgJ3NldCAtbyBwb3NpeCcgdG8gYSBub24tZXhwb3J0ZWQgUE9TSVhMWV9DT1JSRUNUOworICAgICAgICMgc28gdGFrZSBjYXJlIHRvIHJldmVydCB0byB0aGUgY29ycmVjdCAobm9uLSlleHBvcnQgc3RhdGUuCitkbmwgR05VIENvZGluZyBTdGFuZGFyZHMgY3VycmVudGx5IGFsbG93IGF3ayBidXQgbm90IGVudjsgYmVzaWRlcywgZW52CitkbmwgaXMgYW1iaWd1b3VzIHdpdGggZW52aXJvbm1lbnQgdmFsdWVzIHRoYXQgY29udGFpbiBuZXdsaW5lcy4KKyAgICAgICBnbF9hd2tfcHJvYmU9J0JFR0lOIHsgaWYgKCJQT1NJWExZX0NPUlJFQ1QiIGluIEVOVklST04pIHByaW50ICJ4IiB9JworICAgICAgIGNhc2UgJHtQT1NJWExZX0NPUlJFQ1QreH1gJEFXSyAiJGdsX2F3a19wcm9iZSIgPC9kZXYvbnVsbGAgaW4KKyAgICAgICAgIHh4KSBnbF9oYWRfUE9TSVhMWV9DT1JSRUNUPWV4cG9ydGVkIDs7CisgICAgICAgICB4KSAgZ2xfaGFkX1BPU0lYTFlfQ09SUkVDVD15ZXMgICAgICA7OworICAgICAgICAgKikgIGdsX2hhZF9QT1NJWExZX0NPUlJFQ1Q9ICAgICAgICAgOzsKKyAgICAgICBlc2FjCisgICAgICAgUE9TSVhMWV9DT1JSRUNUPTEKKyAgICAgICBleHBvcnQgUE9TSVhMWV9DT1JSRUNUCisgICAgICAgQUNfUlVOX0lGRUxTRSgKKyAgICAgICAgW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxnZXRvcHQuaD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAgICAgICAgICAgXUdMX05PQ1JBU0hbCisgICAgICAgICAgIF1dLCBbWworICAgICAgICAgICAgIGludCByZXN1bHQgPSAwOworCisgICAgICAgICAgICAgbm9jcmFzaF9pbml0KCk7CisKKyAgICAgICAgICAgICAvKiBUaGlzIGNvZGUgc3VjY2VlZHMgb24gZ2xpYmMgMi44LCBPcGVuQlNEIDQuMCwgQ3lnd2luLCBtaW5ndywKKyAgICAgICAgICAgICAgICBhbmQgZmFpbHMgb24gTWFjIE9TIFggMTAuNSwgQUlYIDUuMiwgSFAtVVggMTEsIElSSVggNi41LAorICAgICAgICAgICAgICAgIE9TRi8xIDUuMSwgU29sYXJpcyAxMC4gICovCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgc3RhdGljIGNoYXIgY29uZnRlc3RbXSA9ICJjb25mdGVzdCI7CisgICAgICAgICAgICAgICBzdGF0aWMgY2hhciBwbHVzW10gPSAiLSsiOworICAgICAgICAgICAgICAgY2hhciAqYXJndlszXSA9IHsgY29uZnRlc3QsIHBsdXMsIE5VTEwgfTsKKyAgICAgICAgICAgICAgIG9wdGVyciA9IDA7CisgICAgICAgICAgICAgICBpZiAoZ2V0b3B0ICgyLCBhcmd2LCAiK2EiKSAhPSAnPycpCisgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSAxOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAvKiBUaGlzIGNvZGUgc3VjY2VlZHMgb24gZ2xpYmMgMi44LCBtaW5ndywKKyAgICAgICAgICAgICAgICBhbmQgZmFpbHMgb24gTWFjIE9TIFggMTAuNSwgT3BlbkJTRCA0LjAsIEFJWCA1LjIsIEhQLVVYIDExLAorICAgICAgICAgICAgICAgIElSSVggNi41LCBPU0YvMSA1LjEsIFNvbGFyaXMgMTAsIEN5Z3dpbiAxLjUueC4gICovCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgc3RhdGljIGNoYXIgcHJvZ3JhbVtdID0gInByb2dyYW0iOworICAgICAgICAgICAgICAgc3RhdGljIGNoYXIgcFtdID0gIi1wIjsKKyAgICAgICAgICAgICAgIHN0YXRpYyBjaGFyIGZvb1tdID0gImZvbyI7CisgICAgICAgICAgICAgICBzdGF0aWMgY2hhciBiYXJbXSA9ICJiYXIiOworICAgICAgICAgICAgICAgY2hhciAqYXJndltdID0geyBwcm9ncmFtLCBwLCBmb28sIGJhciwgTlVMTCB9OworCisgICAgICAgICAgICAgICBvcHRpbmQgPSAxOworICAgICAgICAgICAgICAgaWYgKGdldG9wdCAoNCwgYXJndiwgInA6OiIpICE9ICdwJykKKyAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDI7CisgICAgICAgICAgICAgICBlbHNlIGlmIChvcHRhcmcgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDQ7CisgICAgICAgICAgICAgICBlbHNlIGlmIChnZXRvcHQgKDQsIGFyZ3YsICJwOjoiKSAhPSAtMSkKKyAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDY7CisgICAgICAgICAgICAgICBlbHNlIGlmIChvcHRpbmQgIT0gMikKKyAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDg7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIC8qIFRoaXMgY29kZSBzdWNjZWVkcyBvbiBnbGliYyAyLjggYW5kIGZhaWxzIG9uIEN5Z3dpbiAxLjcuMC4gICovCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgc3RhdGljIGNoYXIgcHJvZ3JhbVtdID0gInByb2dyYW0iOworICAgICAgICAgICAgICAgc3RhdGljIGNoYXIgZm9vW10gPSAiZm9vIjsKKyAgICAgICAgICAgICAgIHN0YXRpYyBjaGFyIHBbXSA9ICItcCI7CisgICAgICAgICAgICAgICBjaGFyICphcmd2W10gPSB7IHByb2dyYW0sIGZvbywgcCwgTlVMTCB9OworICAgICAgICAgICAgICAgb3B0aW5kID0gMDsKKyAgICAgICAgICAgICAgIGlmIChnZXRvcHQgKDMsIGFyZ3YsICItcCIpICE9IDEpCisgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSAxNjsKKyAgICAgICAgICAgICAgIGVsc2UgaWYgKGdldG9wdCAoMywgYXJndiwgIi1wIikgIT0gJ3AnKQorICAgICAgICAgICAgICAgICByZXN1bHQgfD0gMTY7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIC8qIFRoaXMgY29kZSBmYWlscyBvbiBnbGliYyAyLjExLiAgKi8KKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBzdGF0aWMgY2hhciBwcm9ncmFtW10gPSAicHJvZ3JhbSI7CisgICAgICAgICAgICAgICBzdGF0aWMgY2hhciBiW10gPSAiLWIiOworICAgICAgICAgICAgICAgc3RhdGljIGNoYXIgYVtdID0gIi1hIjsKKyAgICAgICAgICAgICAgIGNoYXIgKmFyZ3ZbXSA9IHsgcHJvZ3JhbSwgYiwgYSwgTlVMTCB9OworICAgICAgICAgICAgICAgb3B0aW5kID0gb3B0ZXJyID0gMDsKKyAgICAgICAgICAgICAgIGlmIChnZXRvcHQgKDMsIGFyZ3YsICIrOmE6YiIpICE9ICdiJykKKyAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDMyOworICAgICAgICAgICAgICAgZWxzZSBpZiAoZ2V0b3B0ICgzLCBhcmd2LCAiKzphOmIiKSAhPSAnOicpCisgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSAzMjsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgLyogVGhpcyBjb2RlIGR1bXBzIGNvcmUgb24gZ2xpYmMgMi4xNC4gICovCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgc3RhdGljIGNoYXIgcHJvZ3JhbVtdID0gInByb2dyYW0iOworICAgICAgICAgICAgICAgc3RhdGljIGNoYXIgd1tdID0gIi1XIjsKKyAgICAgICAgICAgICAgIHN0YXRpYyBjaGFyIGR1bW15W10gPSAiZHVtbXkiOworICAgICAgICAgICAgICAgY2hhciAqYXJndltdID0geyBwcm9ncmFtLCB3LCBkdW1teSwgTlVMTCB9OworICAgICAgICAgICAgICAgb3B0aW5kID0gb3B0ZXJyID0gMTsKKyAgICAgICAgICAgICAgIGlmIChnZXRvcHQgKDMsIGFyZ3YsICJXOyIpICE9ICdXJykKKyAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDY0OworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICBdXSldLAorICAgICAgICBbZ2xfY3ZfZnVuY19nZXRvcHRfZ251PXllc10sCisgICAgICAgIFtnbF9jdl9mdW5jX2dldG9wdF9nbnU9bm9dLAorICAgICAgICBbZG5sIENyb3NzIGNvbXBpbGluZy4gQXNzdW1lIHRoZSB3b3JzdCwgZXZlbiBvbiBnbGliYyBwbGF0Zm9ybXMuCisgICAgICAgICBnbF9jdl9mdW5jX2dldG9wdF9nbnU9Imd1ZXNzaW5nIG5vIgorICAgICAgICBdKQorICAgICAgIGNhc2UgJGdsX2hhZF9QT1NJWExZX0NPUlJFQ1QgaW4KKyAgICAgICAgIGV4cG9ydGVkKSA7OworICAgICAgICAgeWVzKSBBU19VTlNFVChbUE9TSVhMWV9DT1JSRUNUXSk7IFBPU0lYTFlfQ09SUkVDVD0xIDs7CisgICAgICAgICAqKSBBU19VTlNFVChbUE9TSVhMWV9DT1JSRUNUXSkgOzsKKyAgICAgICBlc2FjCisgICAgICBdKQorICAgIGlmIHRlc3QgIiRnbF9jdl9mdW5jX2dldG9wdF9nbnUiICE9IHllczsgdGhlbgorICAgICAgZ2xfcmVwbGFjZV9nZXRvcHQ9eWVzCisgICAgZWxzZQorICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3b3JraW5nIEdOVSBnZXRvcHRfbG9uZyBmdW5jdGlvbl0sCisgICAgICAgIFtnbF9jdl9mdW5jX2dldG9wdF9sb25nX2dudV0sCisgICAgICAgIFtBQ19SVU5fSUZFTFNFKAorICAgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgICAgICBbWyNpbmNsdWRlIDxnZXRvcHQuaD4KKyAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3RkZGVmLmg+CisgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0cmluZy5oPgorICAgICAgICAgICAgICBdXSwKKyAgICAgICAgICAgICAgW1tzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9CisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHsgInh0cmVtZWx5LSIsbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIDEwMDMgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAieHRyYSIsICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgMTAwMSB9LAorICAgICAgICAgICAgICAgICAgICB7ICJ4dHJlbWUiLCAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAxMDAyIH0sCisgICAgICAgICAgICAgICAgICAgIHsgInh0cmVtZWx5Iiwgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIDEwMDMgfSwKKyAgICAgICAgICAgICAgICAgICAgeyBOVUxMLCAgICAgICAwLCAgICAgICAgICAgICAgICAgTlVMTCwgMCB9CisgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIC8qIFRoaXMgY29kZSBmYWlscyBvbiBPcGVuQlNEIDUuMC4gICovCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgc3RhdGljIGNoYXIgcHJvZ3JhbVtdID0gInByb2dyYW0iOworICAgICAgICAgICAgICAgICAgc3RhdGljIGNoYXIgeHRyZW1lbFtdID0gIi0teHRyZW1lbCI7CisgICAgICAgICAgICAgICAgICBjaGFyICphcmd2W10gPSB7IHByb2dyYW0sIHh0cmVtZWwsIE5VTEwgfTsKKyAgICAgICAgICAgICAgICAgIGludCBvcHRpb25faW5kZXg7CisgICAgICAgICAgICAgICAgICBvcHRpbmQgPSAxOyBvcHRlcnIgPSAwOworICAgICAgICAgICAgICAgICAgaWYgKGdldG9wdF9sb25nICgyLCBhcmd2LCAiIiwgbG9uZ19vcHRpb25zLCAmb3B0aW9uX2luZGV4KSAhPSAxMDAzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgIF1dKV0sCisgICAgICAgICAgIFtnbF9jdl9mdW5jX2dldG9wdF9sb25nX2dudT15ZXNdLAorICAgICAgICAgICBbZ2xfY3ZfZnVuY19nZXRvcHRfbG9uZ19nbnU9bm9dLAorICAgICAgICAgICBbZG5sIENyb3NzIGNvbXBpbGluZy4gR3Vlc3Mgbm8gb24gT3BlbkJTRCwgeWVzIG90aGVyd2lzZS4KKyAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICBvcGVuYnNkKikgZ2xfY3ZfZnVuY19nZXRvcHRfbG9uZ19nbnU9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICAgICopICAgICAgICBnbF9jdl9mdW5jX2dldG9wdF9sb25nX2dudT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgIF0pCisgICAgICAgIF0pCisgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19nZXRvcHRfbG9uZ19nbnUiIGluCisgICAgICAgICp5ZXMpIDs7CisgICAgICAgICopIGdsX3JlcGxhY2VfZ2V0b3B0PXllcyA7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCiBdKQogCiBBQ19ERUZVTihbZ2xfR0VUT1BUX1NVQlNUSVRVVEVfSEVBREVSXSwKQEAgLTI1LDU3ICszNjEsNiBAQAogICBBQ19TVUJTVChbR0VUT1BUX0hdKQogXSkKIAotQUNfREVGVU4oW2dsX0dFVE9QVF9DSEVDS19IRUFERVJTXSwKLVsKLSAgaWYgdGVzdCAteiAiJEdFVE9QVF9IIjsgdGhlbgotICAgIEFDX0NIRUNLX0hFQURFUlMoW2dldG9wdC5oXSwgW10sIFtHRVRPUFRfSD1nZXRvcHQuaF0pCi0gIGZpCi0KLSAgaWYgdGVzdCAteiAiJEdFVE9QVF9IIjsgdGhlbgotICAgIEFDX0NIRUNLX0ZVTkNTKFtnZXRvcHRfbG9uZ19vbmx5XSwgW10sIFtHRVRPUFRfSD1nZXRvcHQuaF0pCi0gIGZpCi0KLSAgZG5sIEJTRCBnZXRvcHRfbG9uZyB1c2VzIGFuIGluY29tcGF0aWJsZSBtZXRob2QgdG8gcmVzZXQgb3B0aW9uIHByb2Nlc3NpbmcsCi0gIGRubCBhbmQgKGFzIG9mIDIwMDQtMTAtMTUpIG1pc2hhbmRsZXMgb3B0aW9uYWwgb3B0aW9uLWFyZ3VtZW50cy4KLSAgaWYgdGVzdCAteiAiJEdFVE9QVF9IIjsgdGhlbgotICAgIEFDX0NIRUNLX0RFQ0woW29wdHJlc2V0XSwgW0dFVE9QVF9IPWdldG9wdC5oXSwgW10sIFsjaW5jbHVkZSA8Z2V0b3B0Lmg+XSkKLSAgZmkKLQotICBkbmwgU29sYXJpcyAxMCBnZXRvcHQgZG9lc24ndCBoYW5kbGUgYCsnIGFzIGEgbGVhZGluZyBjaGFyYWN0ZXIgaW4gYW4KLSAgZG5sIG9wdGlvbiBzdHJpbmcgKGFzIG9mIDIwMDUtMDUtMDUpLgotICBpZiB0ZXN0IC16ICIkR0VUT1BUX0giOyB0aGVuCi0gICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3b3JraW5nIEdOVSBnZXRvcHQgZnVuY3Rpb25dLCBbZ2xfY3ZfZnVuY19nbnVfZ2V0b3B0XSwKLSAgICAgIFtBQ19SVU5fSUZFTFNFKAotCVtBQ19MQU5HX1BST0dSQU0oWyNpbmNsdWRlIDxnZXRvcHQuaD5dLAotCSAgIFtbCi0JICAgICBjaGFyICpteWFyZ3ZbM107Ci0JICAgICBteWFyZ3ZbMF0gPSAiY29uZnRlc3QiOwotCSAgICAgbXlhcmd2WzFdID0gIi0rIjsKLQkgICAgIG15YXJndlsyXSA9IDA7Ci0JICAgICByZXR1cm4gZ2V0b3B0ICgyLCBteWFyZ3YsICIrYSIpICE9ICc/JzsKLQkgICBdXSldLAotCVtnbF9jdl9mdW5jX2dudV9nZXRvcHQ9eWVzXSwKLQlbZ2xfY3ZfZnVuY19nbnVfZ2V0b3B0PW5vXSwKLQlbZG5sIGNyb3NzIGNvbXBpbGluZyAtIHBlc3NpbWlzdGljYWxseSBndWVzcyBiYXNlZCBvbiBkZWNscwotCSBkbmwgU29sYXJpcyAxMCBnZXRvcHQgZG9lc24ndCBoYW5kbGUgYCsnIGFzIGEgbGVhZGluZyBjaGFyYWN0ZXIgaW4gYW4KLQkgZG5sIG9wdGlvbiBzdHJpbmcgKGFzIG9mIDIwMDUtMDUtMDUpLgotCSBBQ19DSEVDS19ERUNMKFtnZXRvcHRfY2xpcF0sCi0JICAgW2dsX2N2X2Z1bmNfZ251X2dldG9wdD1ub10sIFtnbF9jdl9mdW5jX2dudV9nZXRvcHQ9eWVzXSwKLQkgICBbI2luY2x1ZGUgPGdldG9wdC5oPl0pXSldKQotICAgIGlmIHRlc3QgIiRnbF9jdl9mdW5jX2dudV9nZXRvcHQiID0gIm5vIjsgdGhlbgotICAgICAgR0VUT1BUX0g9Z2V0b3B0LmgKLSAgICBmaQotICBmaQotXSkKLQotQUNfREVGVU4oW2dsX0dFVE9QVF9JRkVMU0VdLAotWwotICBBQ19SRVFVSVJFKFtnbF9HRVRPUFRfQ0hFQ0tfSEVBREVSU10pCi0gIEFTX0lGKFt0ZXN0IC1uICIkR0VUT1BUX0giXSwgWyQxXSwgWyQyXSkKLV0pCi0KLUFDX0RFRlVOKFtnbF9HRVRPUFRdLCBbZ2xfR0VUT1BUX0lGRUxTRShbZ2xfR0VUT1BUX1NVQlNUSVRVVEVdKV0pCi0KICMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvZ2V0b3B0Ki4KIEFDX0RFRlVOKFtnbF9QUkVSRVFfR0VUT1BUXSwKIFsKZGlmZiAtLWdpdCBhL200L2dldHRleHQubTQgYi9tNC9nZXR0ZXh0Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxN2QwMjUKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9nZXR0ZXh0Lm00CkBAIC0wLDAgKzEsNDAxIEBACisjIGdldHRleHQubTQgc2VyaWFsIDY2IChnZXR0ZXh0LTAuMTguMikKK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorZG5sCitkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CitkbmwgZnVuY3Rpb25hbGl0eS4KK2RubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCitkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCitkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCitkbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisKK2RubCBBdXRob3JzOgorZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUtMjAwMC4KK2RubCAgIEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPiwgMjAwMC0yMDA2LCAyMDA4LTIwMTAuCisKK2RubCBNYWNybyB0byBhZGQgZm9yIHVzaW5nIEdOVSBnZXR0ZXh0LgorCitkbmwgVXNhZ2U6IEFNX0dOVV9HRVRURVhUKFtJTlRMU1lNQk9MXSwgW05FRURTWU1CT0xdLCBbSU5UTERJUl0pLgorZG5sIElOVExTWU1CT0wgY2FuIGJlIG9uZSBvZiAnZXh0ZXJuYWwnLCAnbm8tbGlidG9vbCcsICd1c2UtbGlidG9vbCcuIFRoZQorZG5sICAgIGRlZmF1bHQgKGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQgb3IgZW1wdHkpIGlzICduby1saWJ0b29sJy4KK2RubCAgICBJTlRMU1lNQk9MIHNob3VsZCBiZSAnZXh0ZXJuYWwnIGZvciBwYWNrYWdlcyB3aXRoIG5vIGludGwgZGlyZWN0b3J5LAorZG5sICAgIGFuZCAnbm8tbGlidG9vbCcgb3IgJ3VzZS1saWJ0b29sJyBmb3IgcGFja2FnZXMgd2l0aCBhbiBpbnRsIGRpcmVjdG9yeS4KK2RubCAgICBJZiBJTlRMU1lNQk9MIGlzICd1c2UtbGlidG9vbCcsIHRoZW4gYSBsaWJ0b29sIGxpYnJhcnkKK2RubCAgICAkKHRvcF9idWlsZGRpcikvaW50bC9saWJpbnRsLmxhIHdpbGwgYmUgY3JlYXRlZCAoc2hhcmVkIGFuZC9vciBzdGF0aWMsCitkbmwgICAgZGVwZW5kaW5nIG9uIC0te2VuYWJsZSxkaXNhYmxlfS17c2hhcmVkLHN0YXRpY30gYW5kIG9uIHRoZSBwcmVzZW5jZSBvZgorZG5sICAgIEFNLURJU0FCTEUtU0hBUkVEKS4gSWYgSU5UTFNZTUJPTCBpcyAnbm8tbGlidG9vbCcsIGEgc3RhdGljIGxpYnJhcnkKK2RubCAgICAkKHRvcF9idWlsZGRpcikvaW50bC9saWJpbnRsLmEgd2lsbCBiZSBjcmVhdGVkLgorZG5sIElmIE5FRURTWU1CT0wgaXMgc3BlY2lmaWVkIGFuZCBpcyAnbmVlZC1uZ2V0dGV4dCcsIHRoZW4gR05VIGdldHRleHQKK2RubCAgICBpbXBsZW1lbnRhdGlvbnMgKGluIGxpYmMgb3IgbGliaW50bCkgd2l0aG91dCB0aGUgbmdldHRleHQoKSBmdW5jdGlvbgorZG5sICAgIHdpbGwgYmUgaWdub3JlZC4gIElmIE5FRURTWU1CT0wgaXMgc3BlY2lmaWVkIGFuZCBpcworZG5sICAgICduZWVkLWZvcm1hdHN0cmluZy1tYWNyb3MnLCB0aGVuIEdOVSBnZXR0ZXh0IGltcGxlbWVudGF0aW9ucyB0aGF0IGRvbid0CitkbmwgICAgc3VwcG9ydCB0aGUgSVNPIEMgOTkgPGludHR5cGVzLmg+IGZvcm1hdHN0cmluZyBtYWNyb3Mgd2lsbCBiZSBpZ25vcmVkLgorZG5sIElOVExESVIgaXMgdXNlZCB0byBmaW5kIHRoZSBpbnRsIGxpYnJhcmllcy4gIElmIGVtcHR5LAorZG5sICAgIHRoZSB2YWx1ZSAnJCh0b3BfYnVpbGRkaXIpL2ludGwvJyBpcyB1c2VkLgorZG5sCitkbmwgVGhlIHJlc3VsdCBvZiB0aGUgY29uZmlndXJhdGlvbiBpcyBvbmUgb2YgdGhyZWUgY2FzZXM6CitkbmwgMSkgR05VIGdldHRleHQsIGFzIGluY2x1ZGVkIGluIHRoZSBpbnRsIHN1YmRpcmVjdG9yeSwgd2lsbCBiZSBjb21waWxlZAorZG5sICAgIGFuZCB1c2VkLgorZG5sICAgIENhdGFsb2cgZm9ybWF0OiBHTlUgLS0+IGluc3RhbGwgaW4gJChkYXRhZGlyKQorZG5sICAgIENhdGFsb2cgZXh0ZW5zaW9uOiAubW8gYWZ0ZXIgaW5zdGFsbGF0aW9uLCAuZ21vIGluIHNvdXJjZSB0cmVlCitkbmwgMikgR05VIGdldHRleHQgaGFzIGJlZW4gZm91bmQgaW4gdGhlIHN5c3RlbSdzIEMgbGlicmFyeS4KK2RubCAgICBDYXRhbG9nIGZvcm1hdDogR05VIC0tPiBpbnN0YWxsIGluICQoZGF0YWRpcikKK2RubCAgICBDYXRhbG9nIGV4dGVuc2lvbjogLm1vIGFmdGVyIGluc3RhbGxhdGlvbiwgLmdtbyBpbiBzb3VyY2UgdHJlZQorZG5sIDMpIE5vIGludGVybmF0aW9uYWxpemF0aW9uLCBhbHdheXMgdXNlIEVuZ2xpc2ggbXNnaWQuCitkbmwgICAgQ2F0YWxvZyBmb3JtYXQ6IG5vbmUKK2RubCAgICBDYXRhbG9nIGV4dGVuc2lvbjogbm9uZQorZG5sIElmIElOVExTWU1CT0wgaXMgJ2V4dGVybmFsJywgb25seSBjYXNlcyAyIGFuZCAzIGNhbiBvY2N1ci4KK2RubCBUaGUgdXNlIG9mIC5nbW8gaXMgaGlzdG9yaWNhbCAoaXQgd2FzIG5lZWRlZCB0byBhdm9pZCBvdmVyd3JpdGluZyB0aGUKK2RubCBHTlUgZm9ybWF0IGNhdGFsb2dzIHdoZW4gYnVpbGRpbmcgb24gYSBwbGF0Zm9ybSB3aXRoIGFuIFgvT3BlbiBnZXR0ZXh0KSwKK2RubCBidXQgd2Uga2VlcCBpdCBpbiBvcmRlciBub3QgdG8gZm9yY2UgaXJyZWxldmFudCBmaWxlbmFtZSBjaGFuZ2VzIG9uIHRoZQorZG5sIG1haW50YWluZXJzLgorZG5sCitBQ19ERUZVTihbQU1fR05VX0dFVFRFWFRdLAorWworICBkbmwgQXJndW1lbnQgY2hlY2tpbmcuCisgIGlmZWxzZShbJDFdLCBbXSwgLCBbaWZlbHNlKFskMV0sIFtleHRlcm5hbF0sICwgW2lmZWxzZShbJDFdLCBbbm8tbGlidG9vbF0sICwgW2lmZWxzZShbJDFdLCBbdXNlLWxpYnRvb2xdLCAsCisgICAgW2VycnByaW50KFtFUlJPUjogaW52YWxpZCBmaXJzdCBhcmd1bWVudCB0byBBTV9HTlVfR0VUVEVYVAorXSldKV0pXSldKQorICBpZmVsc2UoaWZlbHNlKFskMV0sIFtdLCBbb2xkXSlbXWlmZWxzZShbJDFdLCBbbm8tbGlidG9vbF0sIFtvbGRdKSwgW29sZF0sCisgICAgW0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sIFtVc2Ugb2YgQU1fR05VX0dFVFRFWFQgd2l0aG91dCBbZXh0ZXJuYWxdIGFyZ3VtZW50IGlzIGRlcHJlY2F0ZWQuXSldKQorICBpZmVsc2UoWyQyXSwgW10sICwgW2lmZWxzZShbJDJdLCBbbmVlZC1uZ2V0dGV4dF0sICwgW2lmZWxzZShbJDJdLCBbbmVlZC1mb3JtYXRzdHJpbmctbWFjcm9zXSwgLAorICAgIFtlcnJwcmludChbRVJST1I6IGludmFsaWQgc2Vjb25kIGFyZ3VtZW50IHRvIEFNX0dOVV9HRVRURVhUCitdKV0pXSldKQorICBkZWZpbmUoW2d0X2luY2x1ZGVkX2ludGxdLAorICAgIGlmZWxzZShbJDFdLCBbZXh0ZXJuYWxdLAorICAgICAgaWZkZWYoW0FNX0dOVV9HRVRURVhUX11bSU5UTF9TVUJESVJdLCBbeWVzXSwgW25vXSksCisgICAgICBbeWVzXSkpCisgIGRlZmluZShbZ3RfbGlidG9vbF9zdWZmaXhfcHJlZml4XSwgaWZlbHNlKFskMV0sIFt1c2UtbGlidG9vbF0sIFtsXSwgW10pKQorICBndF9ORUVEU19JTklUCisgIEFNX0dOVV9HRVRURVhUX05FRUQoWyQyXSkKKworICBBQ19SRVFVSVJFKFtBTV9QT19TVUJESVJTXSlkbmwKKyAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWworICAgIEFDX1JFUVVJUkUoW0FNX0lOVExfU1VCRElSXSlkbmwKKyAgXSkKKworICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBBQ19MSUJfTElOS0ZMQUdTX0JPRFkuCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCisKKyAgZG5sIFNvbWV0aW1lcyBsaWJpbnRsIHJlcXVpcmVzIGxpYmljb252LCBzbyBmaXJzdCBzZWFyY2ggZm9yIGxpYmljb252LgorICBkbmwgSWRlYWxseSB3ZSB3b3VsZCBkbyB0aGlzIHNlYXJjaCBvbmx5IGFmdGVyIHRoZQorICBkbmwgICAgICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgorICBkbmwgICAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjIjsgdGVzdCAiJGd0X3ZhbCIgIT0gInllcyI7IH07IHRoZW4KKyAgZG5sIHRlc3RzLiBCdXQgaWYgY29uZmlndXJlLmluIGludm9rZXMgQU1fSUNPTlYgYWZ0ZXIgQU1fR05VX0dFVFRFWFQKKyAgZG5sIHRoZSBjb25maWd1cmUgc2NyaXB0IHdvdWxkIG5lZWQgdG8gY29udGFpbiB0aGUgc2FtZSBzaGVsbCBjb2RlCisgIGRubCBhZ2Fpbiwgb3V0c2lkZSBhbnkgJ2lmJy4gVGhlcmUgYXJlIHR3byBzb2x1dGlvbnM6CisgIGRubCAtIEludm9rZSBBTV9JQ09OVl9MSU5LRkxBR1NfQk9EWSBoZXJlLCBvdXRzaWRlIGFueSAnaWYnLgorICBkbmwgLSBDb250cm9sIHRoZSBleHBhbnNpb25zIGluIG1vcmUgZGV0YWlsIHVzaW5nIEFDX1BST1ZJREVfSUZFTFNFLgorICBkbmwgU2luY2UgQUNfUFJPVklERV9JRkVMU0UgaXMgb25seSBpbiBhdXRvY29uZiA+PSAyLjUyIGFuZCBub3QKKyAgZG5sIGRvY3VtZW50ZWQsIHdlIGF2b2lkIGl0LgorICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCAsIFsKKyAgICBBQ19SRVFVSVJFKFtBTV9JQ09OVl9MSU5LRkxBR1NfQk9EWV0pCisgIF0pCisKKyAgZG5sIFNvbWV0aW1lcywgb24gTWFjIE9TIFgsIGxpYmludGwgcmVxdWlyZXMgbGlua2luZyB3aXRoIENvcmVGb3VuZGF0aW9uLgorICBndF9JTlRMX01BQ09TWAorCisgIGRubCBTZXQgVVNFX05MUy4KKyAgQUNfUkVRVUlSRShbQU1fTkxTXSkKKworICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCisgICAgQlVJTERfSU5DTFVERURfTElCSU5UTD1ubworICAgIFVTRV9JTkNMVURFRF9MSUJJTlRMPW5vCisgIF0pCisgIExJQklOVEw9CisgIExUTElCSU5UTD0KKyAgUE9TVUI9CisKKyAgZG5sIEFkZCBhIHZlcnNpb24gbnVtYmVyIHRvIHRoZSBjYWNoZSBtYWNyb3MuCisgIGNhc2UgIiAkZ3RfbmVlZHMgIiBpbgorICAgICoiIG5lZWQtZm9ybWF0c3RyaW5nLW1hY3JvcyAiKikgZ3RfYXBpX3ZlcnNpb249MyA7OworICAgICoiIG5lZWQtbmdldHRleHQgIiopIGd0X2FwaV92ZXJzaW9uPTIgOzsKKyAgICAqKSBndF9hcGlfdmVyc2lvbj0xIDs7CisgIGVzYWMKKyAgZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmM9Imd0X2N2X2Z1bmNfZ251Z2V0dGV4dCR7Z3RfYXBpX3ZlcnNpb259X2xpYmMiCisgIGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsPSJndF9jdl9mdW5jX2dudWdldHRleHQke2d0X2FwaV92ZXJzaW9ufV9saWJpbnRsIgorCisgIGRubCBJZiB3ZSB1c2UgTkxTIGZpZ3VyZSBvdXQgd2hhdCBtZXRob2QKKyAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KKyAgICBndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQ9bm8KKyAgICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgaW5jbHVkZWQgZ2V0dGV4dCBpcyByZXF1ZXN0ZWRdKQorICAgICAgQUNfQVJHX1dJVEgoW2luY2x1ZGVkLWdldHRleHRdLAorICAgICAgICBbICAtLXdpdGgtaW5jbHVkZWQtZ2V0dGV4dCB1c2UgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaW5jbHVkZWQgaGVyZV0sCisgICAgICAgIG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQ9JHdpdGh2YWwsCisgICAgICAgIG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQ9bm8pCisgICAgICBBQ19NU0dfUkVTVUxUKFskbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dF0pCisKKyAgICAgIG5sc19jdl91c2VfZ251X2dldHRleHQ9IiRubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0IgorICAgICAgaWYgdGVzdCAiJG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQiICE9ICJ5ZXMiOyB0aGVuCisgICAgXSkKKyAgICAgICAgZG5sIFVzZXIgZG9lcyBub3QgaW5zaXN0IG9uIHVzaW5nIEdOVSBOTFMgbGlicmFyeS4gIEZpZ3VyZSBvdXQgd2hhdAorICAgICAgICBkbmwgdG8gdXNlLiAgSWYgR05VIGdldHRleHQgaXMgYXZhaWxhYmxlIHdlIHVzZSB0aGlzLiAgRWxzZSB3ZSBoYXZlCisgICAgICAgIGRubCB0byBmYWxsIGJhY2sgdG8gR05VIE5MUyBsaWJyYXJ5LgorCisgICAgICAgIGlmIHRlc3QgJGd0X2FwaV92ZXJzaW9uIC1nZSAzOyB0aGVuCisgICAgICAgICAgZ3RfcmV2aXNpb25fdGVzdF9jb2RlPScKKyNpZm5kZWYgX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04KKyNkZWZpbmUgX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04obWFqb3IpICgobWFqb3IpID09IDAgPyAwIDogLTEpCisjZW5kaWYKK2NoYW5nZXF1b3RlKCwpZG5sCit0eXBlZGVmIGludCBhcnJheSBbMiAqIChfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTigwKSA+PSAxKSAtIDFdOworY2hhbmdlcXVvdGUoWyxdKWRubAorJworICAgICAgICBlbHNlCisgICAgICAgICAgZ3RfcmV2aXNpb25fdGVzdF9jb2RlPQorICAgICAgICBmaQorICAgICAgICBpZiB0ZXN0ICRndF9hcGlfdmVyc2lvbiAtZ2UgMjsgdGhlbgorICAgICAgICAgIGd0X2V4cHJlc3Npb25fdGVzdF9jb2RlPScgKyAqIG5nZXR0ZXh0ICgiIiwgIiIsIDApJworICAgICAgICBlbHNlCisgICAgICAgICAgZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGU9CisgICAgICAgIGZpCisKKyAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBHTlUgZ2V0dGV4dCBpbiBsaWJjXSwgWyRndF9mdW5jX2dudWdldHRleHRfbGliY10sCisgICAgICAgICBbQUNfTElOS19JRkVMU0UoCisgICAgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgICAgICAgW1sKKyNpbmNsdWRlIDxsaWJpbnRsLmg+CiskZ3RfcmV2aXNpb25fdGVzdF9jb2RlCitleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CitleHRlcm4gaW50ICpfbmxfZG9tYWluX2JpbmRpbmdzOworICAgICAgICAgICAgICAgXV0sCisgICAgICAgICAgICAgICBbWworYmluZHRleHRkb21haW4gKCIiLCAiIik7CityZXR1cm4gKiBnZXR0ZXh0ICgiIikkZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGUgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9kb21haW5fYmluZGluZ3MKKyAgICAgICAgICAgICAgIF1dKV0sCisgICAgICAgICAgICBbZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjPXllcyJdLAorICAgICAgICAgICAgW2V2YWwgIiRndF9mdW5jX2dudWdldHRleHRfbGliYz1ubyJdKV0pCisKKyAgICAgICAgaWYgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmMiOyB0ZXN0ICIkZ3RfdmFsIiAhPSAieWVzIjsgfTsgdGhlbgorICAgICAgICAgIGRubCBTb21ldGltZXMgbGliaW50bCByZXF1aXJlcyBsaWJpY29udiwgc28gZmlyc3Qgc2VhcmNoIGZvciBsaWJpY29udi4KKyAgICAgICAgICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCAsIFsKKyAgICAgICAgICAgIEFNX0lDT05WX0xJTksKKyAgICAgICAgICBdKQorICAgICAgICAgIGRubCBTZWFyY2ggZm9yIGxpYmludGwgYW5kIGRlZmluZSBMSUJJTlRMLCBMVExJQklOVEwgYW5kIElOQ0lOVEwKKyAgICAgICAgICBkbmwgYWNjb3JkaW5nbHkuIERvbid0IHVzZSBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoW2ludGxdLFtpY29udl0pCisgICAgICAgICAgZG5sIGJlY2F1c2UgdGhhdCB3b3VsZCBhZGQgIi1saWNvbnYiIHRvIExJQklOVEwgYW5kIExUTElCSU5UTAorICAgICAgICAgIGRubCBldmVuIGlmIGxpYmljb252IGRvZXNuJ3QgZXhpc3QuCisgICAgICAgICAgQUNfTElCX0xJTktGTEFHU19CT0RZKFtpbnRsXSkKKyAgICAgICAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIEdOVSBnZXR0ZXh0IGluIGxpYmludGxdLAorICAgICAgICAgICAgWyRndF9mdW5jX2dudWdldHRleHRfbGliaW50bF0sCisgICAgICAgICAgIFtndF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgICAgICAgICBDUFBGTEFHUz0iJENQUEZMQUdTICRJTkNJTlRMIgorICAgICAgICAgICAgZ3Rfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgICAgICAgIExJQlM9IiRMSUJTICRMSUJJTlRMIgorICAgICAgICAgICAgZG5sIE5vdyBzZWUgd2hldGhlciBsaWJpbnRsIGV4aXN0cyBhbmQgZG9lcyBub3QgZGVwZW5kIG9uIGxpYmljb252LgorICAgICAgICAgICAgQUNfTElOS19JRkVMU0UoCisgICAgICAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgICAgICAgIFtbCisjaW5jbHVkZSA8bGliaW50bC5oPgorJGd0X3JldmlzaW9uX3Rlc3RfY29kZQorZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOworZXh0ZXJuCisjaWZkZWYgX19jcGx1c3BsdXMKKyJDIgorI2VuZGlmCitjb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzIChjb25zdCBjaGFyICopOworICAgICAgICAgICAgICAgICBdXSwKKyAgICAgICAgICAgICAgICAgW1sKK2JpbmR0ZXh0ZG9tYWluICgiIiwgIiIpOworcmV0dXJuICogZ2V0dGV4dCAoIiIpJGd0X2V4cHJlc3Npb25fdGVzdF9jb2RlICsgX25sX21zZ19jYXRfY250ciArICpfbmxfZXhwYW5kX2FsaWFzICgiIikKKyAgICAgICAgICAgICAgICAgXV0pXSwKKyAgICAgICAgICAgICAgW2V2YWwgIiRndF9mdW5jX2dudWdldHRleHRfbGliaW50bD15ZXMiXSwKKyAgICAgICAgICAgICAgW2V2YWwgIiRndF9mdW5jX2dudWdldHRleHRfbGliaW50bD1ubyJdKQorICAgICAgICAgICAgZG5sIE5vdyBzZWUgd2hldGhlciBsaWJpbnRsIGV4aXN0cyBhbmQgZGVwZW5kcyBvbiBsaWJpY29udi4KKyAgICAgICAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIjsgdGVzdCAiJGd0X3ZhbCIgIT0geWVzOyB9ICYmIHRlc3QgLW4gIiRMSUJJQ09OViI7IHRoZW4KKyAgICAgICAgICAgICAgTElCUz0iJExJQlMgJExJQklDT05WIgorICAgICAgICAgICAgICBBQ19MSU5LX0lGRUxTRSgKKyAgICAgICAgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgICAgICAgICAgIFtbCisjaW5jbHVkZSA8bGliaW50bC5oPgorJGd0X3JldmlzaW9uX3Rlc3RfY29kZQorZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOworZXh0ZXJuCisjaWZkZWYgX19jcGx1c3BsdXMKKyJDIgorI2VuZGlmCitjb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzIChjb25zdCBjaGFyICopOworICAgICAgICAgICAgICAgICAgIF1dLAorICAgICAgICAgICAgICAgICAgIFtbCitiaW5kdGV4dGRvbWFpbiAoIiIsICIiKTsKK3JldHVybiAqIGdldHRleHQgKCIiKSRndF9leHByZXNzaW9uX3Rlc3RfY29kZSArIF9ubF9tc2dfY2F0X2NudHIgKyAqX25sX2V4cGFuZF9hbGlhcyAoIiIpCisgICAgICAgICAgICAgICAgICAgXV0pXSwKKyAgICAgICAgICAgICAgICBbTElCSU5UTD0iJExJQklOVEwgJExJQklDT05WIgorICAgICAgICAgICAgICAgICBMVExJQklOVEw9IiRMVExJQklOVEwgJExUTElCSUNPTlYiCisgICAgICAgICAgICAgICAgIGV2YWwgIiRndF9mdW5jX2dudWdldHRleHRfbGliaW50bD15ZXMiCisgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBDUFBGTEFHUz0iJGd0X3NhdmVfQ1BQRkxBR1MiCisgICAgICAgICAgICBMSUJTPSIkZ3Rfc2F2ZV9MSUJTIl0pCisgICAgICAgIGZpCisKKyAgICAgICAgZG5sIElmIGFuIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQgR05VIGdldHRleHQoKSBpcyBmb3VuZCwKKyAgICAgICAgZG5sIHVzZSBpdC4gIEJ1dCBpZiB0aGlzIG1hY3JvIGlzIHVzZWQgaW4gR05VIGdldHRleHQsIGFuZCBHTlUKKyAgICAgICAgZG5sIGdldHRleHQgaXMgYWxyZWFkeSBwcmVpbnN0YWxsZWQgaW4gbGliaW50bCwgd2UgdXBkYXRlIHRoaXMKKyAgICAgICAgZG5sIGxpYmludGwuICAoQ2YuIHRoZSBpbnN0YWxsIHJ1bGUgaW4gaW50bC9NYWtlZmlsZS5pbi4pCisgICAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjIjsgdGVzdCAiJGd0X3ZhbCIgPSAieWVzIjsgfSBcCisgICAgICAgICAgIHx8IHsgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiOyB0ZXN0ICIkZ3RfdmFsIiA9ICJ5ZXMiOyB9IFwKKyAgICAgICAgICAgICAgICAmJiB0ZXN0ICIkUEFDS0FHRSIgIT0gZ2V0dGV4dC1ydW50aW1lIFwKKyAgICAgICAgICAgICAgICAmJiB0ZXN0ICIkUEFDS0FHRSIgIT0gZ2V0dGV4dC10b29sczsgfTsgdGhlbgorICAgICAgICAgIGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dD15ZXMKKyAgICAgICAgZWxzZQorICAgICAgICAgIGRubCBSZXNldCB0aGUgdmFsdWVzIHNldCBieSBzZWFyY2hpbmcgZm9yIGxpYmludGwuCisgICAgICAgICAgTElCSU5UTD0KKyAgICAgICAgICBMVExJQklOVEw9CisgICAgICAgICAgSU5DSU5UTD0KKyAgICAgICAgZmkKKworICAgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsIFsKKyAgICAgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgIT0gInllcyI7IHRoZW4KKyAgICAgICAgICBkbmwgR05VIGdldHRleHQgaXMgbm90IGZvdW5kIGluIHRoZSBDIGxpYnJhcnkuCisgICAgICAgICAgZG5sIEZhbGwgYmFjayBvbiBpbmNsdWRlZCBHTlUgZ2V0dGV4dCBsaWJyYXJ5LgorICAgICAgICAgIG5sc19jdl91c2VfZ251X2dldHRleHQ9eWVzCisgICAgICAgIGZpCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICIkbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dCIgPSAieWVzIjsgdGhlbgorICAgICAgICBkbmwgTWFyayBhY3Rpb25zIHVzZWQgdG8gZ2VuZXJhdGUgR05VIE5MUyBsaWJyYXJ5LgorICAgICAgICBCVUlMRF9JTkNMVURFRF9MSUJJTlRMPXllcworICAgICAgICBVU0VfSU5DTFVERURfTElCSU5UTD15ZXMKKyAgICAgICAgTElCSU5UTD0iaWZlbHNlKFskM10sW10sXCR7dG9wX2J1aWxkZGlyfS9pbnRsLFskM10pL2xpYmludGwuW11ndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXhbXWEgJExJQklDT05WICRMSUJUSFJFQUQiCisgICAgICAgIExUTElCSU5UTD0iaWZlbHNlKFskM10sW10sXCR7dG9wX2J1aWxkZGlyfS9pbnRsLFskM10pL2xpYmludGwuW11ndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXhbXWEgJExUTElCSUNPTlYgJExUTElCVEhSRUFEIgorICAgICAgICBMSUJTPWBlY2hvICIgJExJQlMgIiB8IHNlZCAtZSAncy8gLWxpbnRsIC8gLycgLWUgJ3MvXiAvLycgLWUgJ3MvICQvLydgCisgICAgICBmaQorCisgICAgICBDQVRPQkpFWFQ9CisgICAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiIFwKKyAgICAgICAgIHx8IHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgIGRubCBNYXJrIGFjdGlvbnMgdG8gdXNlIEdOVSBnZXR0ZXh0IHRvb2xzLgorICAgICAgICBDQVRPQkpFWFQ9LmdtbworICAgICAgZmkKKyAgICBdKQorCisgICAgaWYgdGVzdCAtbiAiJElOVExfTUFDT1NYX0xJQlMiOyB0aGVuCisgICAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiIFwKKyAgICAgICAgIHx8IHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgIGRubCBTb21lIGV4dHJhIGZsYWdzIGFyZSBuZWVkZWQgZHVyaW5nIGxpbmtpbmcuCisgICAgICAgIExJQklOVEw9IiRMSUJJTlRMICRJTlRMX01BQ09TWF9MSUJTIgorICAgICAgICBMVExJQklOVEw9IiRMVExJQklOVEwgJElOVExfTUFDT1NYX0xJQlMiCisgICAgICBmaQorICAgIGZpCisKKyAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiIFwKKyAgICAgICB8fCB0ZXN0ICIkbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dCIgPSAieWVzIjsgdGhlbgorICAgICAgQUNfREVGSU5FKFtFTkFCTEVfTkxTXSwgWzFdLAorICAgICAgICBbRGVmaW5lIHRvIDEgaWYgdHJhbnNsYXRpb24gb2YgcHJvZ3JhbSBtZXNzYWdlcyB0byB0aGUgdXNlcidzIG5hdGl2ZSBsYW5ndWFnZQorICAgaXMgcmVxdWVzdGVkLl0pCisgICAgZWxzZQorICAgICAgVVNFX05MUz1ubworICAgIGZpCisgIGZpCisKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIHVzZSBOTFNdKQorICBBQ19NU0dfUkVTVUxUKFskVVNFX05MU10pCisgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGVyZSB0aGUgZ2V0dGV4dCBmdW5jdGlvbiBjb21lcyBmcm9tXSkKKyAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliaW50bCI7IHRlc3QgIiRndF92YWwiID0gInllcyI7IH07IHRoZW4KKyAgICAgICAgZ3Rfc291cmNlPSJleHRlcm5hbCBsaWJpbnRsIgorICAgICAgZWxzZQorICAgICAgICBndF9zb3VyY2U9ImxpYmMiCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGd0X3NvdXJjZT0iaW5jbHVkZWQgaW50bCBkaXJlY3RvcnkiCisgICAgZmkKKyAgICBBQ19NU0dfUkVTVUxUKFskZ3Rfc291cmNlXSkKKyAgZmkKKworICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgorCisgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgPSAieWVzIjsgdGhlbgorICAgICAgaWYgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiOyB0ZXN0ICIkZ3RfdmFsIiA9ICJ5ZXMiOyB9OyB0aGVuCisgICAgICAgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGxpbmsgd2l0aCBsaWJpbnRsXSkKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbJExJQklOVExdKQorICAgICAgICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNJTlRMXSkKKyAgICAgIGZpCisKKyAgICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBwYWNrYWdlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKyAgICAgIEFDX0RFRklORShbSEFWRV9HRVRURVhUXSwgWzFdLAorICAgICAgIFtEZWZpbmUgaWYgdGhlIEdOVSBnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC5dKQorICAgICAgQUNfREVGSU5FKFtIQVZFX0RDR0VUVEVYVF0sIFsxXSwKKyAgICAgICBbRGVmaW5lIGlmIHRoZSBHTlUgZGNnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC5dKQorICAgIGZpCisKKyAgICBkbmwgV2UgbmVlZCB0byBwcm9jZXNzIHRoZSBwby8gZGlyZWN0b3J5LgorICAgIFBPU1VCPXBvCisgIGZpCisKKyAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWworICAgIGRubCBJZiB0aGlzIGlzIHVzZWQgaW4gR05VIGdldHRleHQgd2UgaGF2ZSB0byBzZXQgQlVJTERfSU5DTFVERURfTElCSU5UTAorICAgIGRubCB0byAneWVzJyBiZWNhdXNlIHNvbWUgb2YgdGhlIHRlc3RzdWl0ZSByZXF1aXJlcyBpdC4KKyAgICBpZiB0ZXN0ICIkUEFDS0FHRSIgPSBnZXR0ZXh0LXJ1bnRpbWUgfHwgdGVzdCAiJFBBQ0tBR0UiID0gZ2V0dGV4dC10b29sczsgdGhlbgorICAgICAgQlVJTERfSU5DTFVERURfTElCSU5UTD15ZXMKKyAgICBmaQorCisgICAgZG5sIE1ha2UgYWxsIHZhcmlhYmxlcyB3ZSB1c2Uga25vd24gdG8gYXV0b2NvbmYuCisgICAgQUNfU1VCU1QoW0JVSUxEX0lOQ0xVREVEX0xJQklOVExdKQorICAgIEFDX1NVQlNUKFtVU0VfSU5DTFVERURfTElCSU5UTF0pCisgICAgQUNfU1VCU1QoW0NBVE9CSkVYVF0pCisKKyAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgY29uZmlndXJlLmlucyBtYXkgYmUgdXNpbmcgdGhpcy4KKyAgICBubHNfY3ZfaGVhZGVyX2ludGw9CisgICAgbmxzX2N2X2hlYWRlcl9saWJndD0KKworICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBNYWtlZmlsZXMgbWF5IGJlIHVzaW5nIHRoaXMuCisgICAgREFUQURJUk5BTUU9c2hhcmUKKyAgICBBQ19TVUJTVChbREFUQURJUk5BTUVdKQorCisgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKyAgICBJTlNUT0JKRVhUPS5tbworICAgIEFDX1NVQlNUKFtJTlNUT0JKRVhUXSkKKworICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBNYWtlZmlsZXMgbWF5IGJlIHVzaW5nIHRoaXMuCisgICAgR0VOQ0FUPWdlbmNhdAorICAgIEFDX1NVQlNUKFtHRU5DQVRdKQorCisgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKyAgICBJTlRMT0JKUz0KKyAgICBpZiB0ZXN0ICIkVVNFX0lOQ0xVREVEX0xJQklOVEwiID0geWVzOyB0aGVuCisgICAgICBJTlRMT0JKUz0iXCQoR0VUVE9CSlMpIgorICAgIGZpCisgICAgQUNfU1VCU1QoW0lOVExPQkpTXSkKKworICAgIGRubCBFbmFibGUgbGlidG9vbCBzdXBwb3J0IGlmIHRoZSBzdXJyb3VuZGluZyBwYWNrYWdlIHdpc2hlcyBpdC4KKyAgICBJTlRMX0xJQlRPT0xfU1VGRklYX1BSRUZJWD1ndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXgKKyAgICBBQ19TVUJTVChbSU5UTF9MSUJUT09MX1NVRkZJWF9QUkVGSVhdKQorICBdKQorCisgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBNYWtlZmlsZXMgbWF5IGJlIHVzaW5nIHRoaXMuCisgIElOVExMSUJTPSIkTElCSU5UTCIKKyAgQUNfU1VCU1QoW0lOVExMSUJTXSkKKworICBkbmwgTWFrZSBhbGwgZG9jdW1lbnRlZCB2YXJpYWJsZXMga25vd24gdG8gYXV0b2NvbmYuCisgIEFDX1NVQlNUKFtMSUJJTlRMXSkKKyAgQUNfU1VCU1QoW0xUTElCSU5UTF0pCisgIEFDX1NVQlNUKFtQT1NVQl0pCitdKQorCisKK2RubCBndF9ORUVEU19JTklUIGVuc3VyZXMgdGhhdCB0aGUgZ3RfbmVlZHMgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQuCittNF9kZWZpbmUoW2d0X05FRURTX0lOSVRdLAorWworICBtNF9kaXZlcnRfdGV4dChbREVGQVVMVFNdLCBbZ3RfbmVlZHM9XSkKKyAgbTRfZGVmaW5lKFtndF9ORUVEU19JTklUXSwgW10pCitdKQorCisKK2RubCBVc2FnZTogQU1fR05VX0dFVFRFWFRfTkVFRChbTkVFRFNZTUJPTF0pCitBQ19ERUZVTihbQU1fR05VX0dFVFRFWFRfTkVFRF0sCitbCisgIG00X2RpdmVydF90ZXh0KFtJTklUX1BSRVBBUkVdLCBbZ3RfbmVlZHM9IiRndF9uZWVkcyAkMSJdKQorXSkKKworCitkbmwgVXNhZ2U6IEFNX0dOVV9HRVRURVhUX1ZFUlNJT04oW2dldHRleHQtdmVyc2lvbl0pCitBQ19ERUZVTihbQU1fR05VX0dFVFRFWFRfVkVSU0lPTl0sIFtdKQpkaWZmIC0tZ2l0IGEvbTQvZ2V0dGV4dF9nbC5tNCBiL200L2dldHRleHRfZ2wubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyM2Y3YmMuLjAwMDAwMDAKLS0tIGEvbTQvZ2V0dGV4dF9nbC5tNAorKysgL2Rldi9udWxsCkBAIC0xLDQyNyArMCwwIEBACi0jIGdldHRleHQubTQgc2VyaWFsIDM3IChnZXR0ZXh0LTAuMTQuNCkKLWRubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1kbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotZG5sCi1kbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgotZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLWRubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0Ci1kbmwgZnVuY3Rpb25hbGl0eS4KLWRubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCi1kbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCi1kbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi1kbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCi0KLWRubCBBdXRob3JzOgotZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUtMjAwMC4KLWRubCAgIEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPiwgMjAwMC0yMDAzLgotCi1kbmwgTWFjcm8gdG8gYWRkIGZvciB1c2luZyBHTlUgZ2V0dGV4dC4KLQotZG5sIFVzYWdlOiBBTV9HTlVfR0VUVEVYVChbSU5UTFNZTUJPTF0sIFtORUVEU1lNQk9MXSwgW0lOVExESVJdKS4KLWRubCBJTlRMU1lNQk9MIGNhbiBiZSBvbmUgb2YgJ2V4dGVybmFsJywgJ25vLWxpYnRvb2wnLCAndXNlLWxpYnRvb2wnLiBUaGUKLWRubCAgICBkZWZhdWx0IChpZiBpdCBpcyBub3Qgc3BlY2lmaWVkIG9yIGVtcHR5KSBpcyAnbm8tbGlidG9vbCcuCi1kbmwgICAgSU5UTFNZTUJPTCBzaG91bGQgYmUgJ2V4dGVybmFsJyBmb3IgcGFja2FnZXMgd2l0aCBubyBpbnRsIGRpcmVjdG9yeSwKLWRubCAgICBhbmQgJ25vLWxpYnRvb2wnIG9yICd1c2UtbGlidG9vbCcgZm9yIHBhY2thZ2VzIHdpdGggYW4gaW50bCBkaXJlY3RvcnkuCi1kbmwgICAgSWYgSU5UTFNZTUJPTCBpcyAndXNlLWxpYnRvb2wnLCB0aGVuIGEgbGlidG9vbCBsaWJyYXJ5Ci1kbmwgICAgJCh0b3BfYnVpbGRkaXIpL2ludGwvbGliaW50bC5sYSB3aWxsIGJlIGNyZWF0ZWQgKHNoYXJlZCBhbmQvb3Igc3RhdGljLAotZG5sICAgIGRlcGVuZGluZyBvbiAtLXtlbmFibGUsZGlzYWJsZX0te3NoYXJlZCxzdGF0aWN9IGFuZCBvbiB0aGUgcHJlc2VuY2Ugb2YKLWRubCAgICBBTS1ESVNBQkxFLVNIQVJFRCkuIElmIElOVExTWU1CT0wgaXMgJ25vLWxpYnRvb2wnLCBhIHN0YXRpYyBsaWJyYXJ5Ci1kbmwgICAgJCh0b3BfYnVpbGRkaXIpL2ludGwvbGliaW50bC5hIHdpbGwgYmUgY3JlYXRlZC4KLWRubCBJZiBORUVEU1lNQk9MIGlzIHNwZWNpZmllZCBhbmQgaXMgJ25lZWQtbmdldHRleHQnLCB0aGVuIEdOVSBnZXR0ZXh0Ci1kbmwgICAgaW1wbGVtZW50YXRpb25zIChpbiBsaWJjIG9yIGxpYmludGwpIHdpdGhvdXQgdGhlIG5nZXR0ZXh0KCkgZnVuY3Rpb24KLWRubCAgICB3aWxsIGJlIGlnbm9yZWQuICBJZiBORUVEU1lNQk9MIGlzIHNwZWNpZmllZCBhbmQgaXMKLWRubCAgICAnbmVlZC1mb3JtYXRzdHJpbmctbWFjcm9zJywgdGhlbiBHTlUgZ2V0dGV4dCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBkb24ndAotZG5sICAgIHN1cHBvcnQgdGhlIElTTyBDIDk5IDxpbnR0eXBlcy5oPiBmb3JtYXRzdHJpbmcgbWFjcm9zIHdpbGwgYmUgaWdub3JlZC4KLWRubCBJTlRMRElSIGlzIHVzZWQgdG8gZmluZCB0aGUgaW50bCBsaWJyYXJpZXMuICBJZiBlbXB0eSwKLWRubCAgICB0aGUgdmFsdWUgYCQodG9wX2J1aWxkZGlyKS9pbnRsLycgaXMgdXNlZC4KLWRubAotZG5sIFRoZSByZXN1bHQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gaXMgb25lIG9mIHRocmVlIGNhc2VzOgotZG5sIDEpIEdOVSBnZXR0ZXh0LCBhcyBpbmNsdWRlZCBpbiB0aGUgaW50bCBzdWJkaXJlY3RvcnksIHdpbGwgYmUgY29tcGlsZWQKLWRubCAgICBhbmQgdXNlZC4KLWRubCAgICBDYXRhbG9nIGZvcm1hdDogR05VIC0tPiBpbnN0YWxsIGluICQoZGF0YWRpcikKLWRubCAgICBDYXRhbG9nIGV4dGVuc2lvbjogLm1vIGFmdGVyIGluc3RhbGxhdGlvbiwgLmdtbyBpbiBzb3VyY2UgdHJlZQotZG5sIDIpIEdOVSBnZXR0ZXh0IGhhcyBiZWVuIGZvdW5kIGluIHRoZSBzeXN0ZW0ncyBDIGxpYnJhcnkuCi1kbmwgICAgQ2F0YWxvZyBmb3JtYXQ6IEdOVSAtLT4gaW5zdGFsbCBpbiAkKGRhdGFkaXIpCi1kbmwgICAgQ2F0YWxvZyBleHRlbnNpb246IC5tbyBhZnRlciBpbnN0YWxsYXRpb24sIC5nbW8gaW4gc291cmNlIHRyZWUKLWRubCAzKSBObyBpbnRlcm5hdGlvbmFsaXphdGlvbiwgYWx3YXlzIHVzZSBFbmdsaXNoIG1zZ2lkLgotZG5sICAgIENhdGFsb2cgZm9ybWF0OiBub25lCi1kbmwgICAgQ2F0YWxvZyBleHRlbnNpb246IG5vbmUKLWRubCBJZiBJTlRMU1lNQk9MIGlzICdleHRlcm5hbCcsIG9ubHkgY2FzZXMgMiBhbmQgMyBjYW4gb2NjdXIuCi1kbmwgVGhlIHVzZSBvZiAuZ21vIGlzIGhpc3RvcmljYWwgKGl0IHdhcyBuZWVkZWQgdG8gYXZvaWQgb3ZlcndyaXRpbmcgdGhlCi1kbmwgR05VIGZvcm1hdCBjYXRhbG9ncyB3aGVuIGJ1aWxkaW5nIG9uIGEgcGxhdGZvcm0gd2l0aCBhbiBYL09wZW4gZ2V0dGV4dCksCi1kbmwgYnV0IHdlIGtlZXAgaXQgaW4gb3JkZXIgbm90IHRvIGZvcmNlIGlycmVsZXZhbnQgZmlsZW5hbWUgY2hhbmdlcyBvbiB0aGUKLWRubCBtYWludGFpbmVycy4KLWRubAotQUNfREVGVU4oW0FNX0dOVV9HRVRURVhUXSwKLVsKLSAgZG5sIEFyZ3VtZW50IGNoZWNraW5nLgotICBpZmVsc2UoWyQxXSwgW10sICwgW2lmZWxzZShbJDFdLCBbZXh0ZXJuYWxdLCAsIFtpZmVsc2UoWyQxXSwgW25vLWxpYnRvb2xdLCAsIFtpZmVsc2UoWyQxXSwgW3VzZS1saWJ0b29sXSwgLAotICAgIFtlcnJwcmludChbRVJST1I6IGludmFsaWQgZmlyc3QgYXJndW1lbnQgdG8gQU1fR05VX0dFVFRFWFQKLV0pXSldKV0pXSkKLSAgaWZlbHNlKFskMl0sIFtdLCAsIFtpZmVsc2UoWyQyXSwgW25lZWQtbmdldHRleHRdLCAsIFtpZmVsc2UoWyQyXSwgW25lZWQtZm9ybWF0c3RyaW5nLW1hY3Jvc10sICwKLSAgICBbZXJycHJpbnQoW0VSUk9SOiBpbnZhbGlkIHNlY29uZCBhcmd1bWVudCB0byBBTV9HTlVfR0VUVEVYVAotXSldKV0pXSkKLSAgZGVmaW5lKFtndF9pbmNsdWRlZF9pbnRsXSwgaWZlbHNlKFskMV0sIFtleHRlcm5hbF0sIFtub10sIFt5ZXNdKSkKLSAgZGVmaW5lKFtndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXhdLCBpZmVsc2UoWyQxXSwgW3VzZS1saWJ0b29sXSwgW2xdLCBbXSkpCi0KLSAgQUNfUkVRVUlSRShbQU1fUE9fU1VCRElSU10pZG5sCi0gIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsIFsKLSAgICBBQ19SRVFVSVJFKFtBTV9JTlRMX1NVQkRJUl0pZG5sCi0gIF0pCi0KLSAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgQUNfTElCX0xJTktGTEFHU19CT0RZLgotICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQotICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQotCi0gIGRubCBTb21ldGltZXMgbGliaW50bCByZXF1aXJlcyBsaWJpY29udiwgc28gZmlyc3Qgc2VhcmNoIGZvciBsaWJpY29udi4KLSAgZG5sIElkZWFsbHkgd2Ugd291bGQgZG8gdGhpcyBzZWFyY2ggb25seSBhZnRlciB0aGUKLSAgZG5sICAgICAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KLSAgZG5sICAgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmMiICE9ICJ5ZXMiOyB0aGVuCi0gIGRubCB0ZXN0cy4gQnV0IGlmIGNvbmZpZ3VyZS5pbiBpbnZva2VzIEFNX0lDT05WIGFmdGVyIEFNX0dOVV9HRVRURVhUCi0gIGRubCB0aGUgY29uZmlndXJlIHNjcmlwdCB3b3VsZCBuZWVkIHRvIGNvbnRhaW4gdGhlIHNhbWUgc2hlbGwgY29kZQotICBkbmwgYWdhaW4sIG91dHNpZGUgYW55ICdpZicuIFRoZXJlIGFyZSB0d28gc29sdXRpb25zOgotICBkbmwgLSBJbnZva2UgQU1fSUNPTlZfTElOS0ZMQUdTX0JPRFkgaGVyZSwgb3V0c2lkZSBhbnkgJ2lmJy4KLSAgZG5sIC0gQ29udHJvbCB0aGUgZXhwYW5zaW9ucyBpbiBtb3JlIGRldGFpbCB1c2luZyBBQ19QUk9WSURFX0lGRUxTRS4KLSAgZG5sIFNpbmNlIEFDX1BST1ZJREVfSUZFTFNFIGlzIG9ubHkgaW4gYXV0b2NvbmYgPj0gMi41MiBhbmQgbm90Ci0gIGRubCBkb2N1bWVudGVkLCB3ZSBhdm9pZCBpdC4KLSAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgLCBbCi0gICAgQUNfUkVRVUlSRShbQU1fSUNPTlZfTElOS0ZMQUdTX0JPRFldKQotICBdKQotCi0gIGRubCBTb21ldGltZXMsIG9uIE1hY09TIFgsIGxpYmludGwgcmVxdWlyZXMgbGlua2luZyB3aXRoIENvcmVGb3VuZGF0aW9uLgotICBndF9JTlRMX01BQ09TWAotCi0gIGRubCBTZXQgVVNFX05MUy4KLSAgQU1fTkxTCi0KLSAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWwotICAgIEJVSUxEX0lOQ0xVREVEX0xJQklOVEw9bm8KLSAgICBVU0VfSU5DTFVERURfTElCSU5UTD1ubwotICBdKQotICBMSUJJTlRMPQotICBMVExJQklOVEw9Ci0gIFBPU1VCPQotCi0gIGRubCBJZiB3ZSB1c2UgTkxTIGZpZ3VyZSBvdXQgd2hhdCBtZXRob2QKLSAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KLSAgICBndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQ9bm8KLSAgICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCi0gICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgaW5jbHVkZWQgZ2V0dGV4dCBpcyByZXF1ZXN0ZWRdKQotICAgICAgQUNfQVJHX1dJVEgoaW5jbHVkZWQtZ2V0dGV4dCwKLSAgICAgICAgWyAgLS13aXRoLWluY2x1ZGVkLWdldHRleHQgdXNlIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGluY2x1ZGVkIGhlcmVdLAotICAgICAgICBubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0PSR3aXRodmFsLAotICAgICAgICBubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0PW5vKQotICAgICAgQUNfTVNHX1JFU1VMVCgkbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dCkKLQotICAgICAgbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dD0iJG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQiCi0gICAgICBpZiB0ZXN0ICIkbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dCIgIT0gInllcyI7IHRoZW4KLSAgICBdKQotICAgICAgICBkbmwgVXNlciBkb2VzIG5vdCBpbnNpc3Qgb24gdXNpbmcgR05VIE5MUyBsaWJyYXJ5LiAgRmlndXJlIG91dCB3aGF0Ci0gICAgICAgIGRubCB0byB1c2UuICBJZiBHTlUgZ2V0dGV4dCBpcyBhdmFpbGFibGUgd2UgdXNlIHRoaXMuICBFbHNlIHdlIGhhdmUKLSAgICAgICAgZG5sIHRvIGZhbGwgYmFjayB0byBHTlUgTkxTIGxpYnJhcnkuCi0KLSAgICAgICAgZG5sIEFkZCBhIHZlcnNpb24gbnVtYmVyIHRvIHRoZSBjYWNoZSBtYWNyb3MuCi0gICAgICAgIGRlZmluZShbZ3RfYXBpX3ZlcnNpb25dLCBpZmVsc2UoWyQyXSwgW25lZWQtZm9ybWF0c3RyaW5nLW1hY3Jvc10sIDMsIGlmZWxzZShbJDJdLCBbbmVlZC1uZ2V0dGV4dF0sIDIsIDEpKSkKLSAgICAgICAgZGVmaW5lKFtndF9jdl9mdW5jX2dudWdldHRleHRfbGliY10sIFtndF9jdl9mdW5jX2dudWdldHRleHRdZ3RfYXBpX3ZlcnNpb25bX2xpYmNdKQotICAgICAgICBkZWZpbmUoW2d0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsXSwgW2d0X2N2X2Z1bmNfZ251Z2V0dGV4dF1ndF9hcGlfdmVyc2lvbltfbGliaW50bF0pCi0KLSAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBHTlUgZ2V0dGV4dCBpbiBsaWJjXSwgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmMsCi0gICAgICAgICBbQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxsaWJpbnRsLmg+Ci1daWZlbHNlKFskMl0sIFtuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3NdLAotWyNpZm5kZWYgX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04KLSNkZWZpbmUgX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04obWFqb3IpICgobWFqb3IpID09IDAgPyAwIDogLTEpCi0jZW5kaWYKLWNoYW5nZXF1b3RlKCwpZG5sCi10eXBlZGVmIGludCBhcnJheSBbMiAqIChfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTigwKSA+PSAxKSAtIDFdOwotY2hhbmdlcXVvdGUoWyxdKWRubAotXSwgW10pW2V4dGVybiBpbnQgX25sX21zZ19jYXRfY250cjsKLWV4dGVybiBpbnQgKl9ubF9kb21haW5fYmluZGluZ3M7XSwKLSAgICAgICAgICAgIFtiaW5kdGV4dGRvbWFpbiAoIiIsICIiKTsKLXJldHVybiAqIGdldHRleHQgKCIiKV1pZmVsc2UoWyQyXSwgW25lZWQtbmdldHRleHRdLCBbICsgKiBuZ2V0dGV4dCAoIiIsICIiLCAwKV0sIFtdKVsgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9kb21haW5fYmluZGluZ3NdLAotICAgICAgICAgICAgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmM9eWVzLAotICAgICAgICAgICAgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmM9bm8pXSkKLQotICAgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmMiICE9ICJ5ZXMiOyB0aGVuCi0gICAgICAgICAgZG5sIFNvbWV0aW1lcyBsaWJpbnRsIHJlcXVpcmVzIGxpYmljb252LCBzbyBmaXJzdCBzZWFyY2ggZm9yIGxpYmljb252LgotICAgICAgICAgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsICwgWwotICAgICAgICAgICAgQU1fSUNPTlZfTElOSwotICAgICAgICAgIF0pCi0gICAgICAgICAgZG5sIFNlYXJjaCBmb3IgbGliaW50bCBhbmQgZGVmaW5lIExJQklOVEwsIExUTElCSU5UTCBhbmQgSU5DSU5UTAotICAgICAgICAgIGRubCBhY2NvcmRpbmdseS4gRG9uJ3QgdXNlIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShbaW50bF0sW2ljb252XSkKLSAgICAgICAgICBkbmwgYmVjYXVzZSB0aGF0IHdvdWxkIGFkZCAiLWxpY29udiIgdG8gTElCSU5UTCBhbmQgTFRMSUJJTlRMCi0gICAgICAgICAgZG5sIGV2ZW4gaWYgbGliaWNvbnYgZG9lc24ndCBleGlzdC4KLSAgICAgICAgICBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoW2ludGxdKQotICAgICAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgR05VIGdldHRleHQgaW4gbGliaW50bF0sCi0gICAgICAgICAgICBndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bCwKLSAgICAgICAgICAgW2d0X3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKLSAgICAgICAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJElOQ0lOVEwiCi0gICAgICAgICAgICBndF9zYXZlX0xJQlM9IiRMSUJTIgotICAgICAgICAgICAgTElCUz0iJExJQlMgJExJQklOVEwiCi0gICAgICAgICAgICBkbmwgTm93IHNlZSB3aGV0aGVyIGxpYmludGwgZXhpc3RzIGFuZCBkb2VzIG5vdCBkZXBlbmQgb24gbGliaWNvbnYuCi0gICAgICAgICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxpYmludGwuaD4KLV1pZmVsc2UoWyQyXSwgW25lZWQtZm9ybWF0c3RyaW5nLW1hY3Jvc10sCi1bI2lmbmRlZiBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTgotI2RlZmluZSBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTihtYWpvcikgKChtYWpvcikgPT0gMCA/IDAgOiAtMSkKLSNlbmRpZgotY2hhbmdlcXVvdGUoLClkbmwKLXR5cGVkZWYgaW50IGFycmF5IFsyICogKF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKDApID49IDEpIC0gMV07Ci1jaGFuZ2VxdW90ZShbLF0pZG5sCi1dLCBbXSlbZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOwotZXh0ZXJuCi0jaWZkZWYgX19jcGx1c3BsdXMKLSJDIgotI2VuZGlmCi1jb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzIChjb25zdCBjaGFyICopO10sCi0gICAgICAgICAgICAgIFtiaW5kdGV4dGRvbWFpbiAoIiIsICIiKTsKLXJldHVybiAqIGdldHRleHQgKCIiKV1pZmVsc2UoWyQyXSwgW25lZWQtbmdldHRleHRdLCBbICsgKiBuZ2V0dGV4dCAoIiIsICIiLCAwKV0sIFtdKVsgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9leHBhbmRfYWxpYXMgKCIiKV0sCi0gICAgICAgICAgICAgIGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsPXllcywKLSAgICAgICAgICAgICAgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGw9bm8pCi0gICAgICAgICAgICBkbmwgTm93IHNlZSB3aGV0aGVyIGxpYmludGwgZXhpc3RzIGFuZCBkZXBlbmRzIG9uIGxpYmljb252LgotICAgICAgICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIiAhPSB5ZXMgJiYgdGVzdCAtbiAiJExJQklDT05WIjsgdGhlbgotICAgICAgICAgICAgICBMSUJTPSIkTElCUyAkTElCSUNPTlYiCi0gICAgICAgICAgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8bGliaW50bC5oPgotXWlmZWxzZShbJDJdLCBbbmVlZC1mb3JtYXRzdHJpbmctbWFjcm9zXSwKLVsjaWZuZGVmIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OCi0jZGVmaW5lIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKG1ham9yKSAoKG1ham9yKSA9PSAwID8gMCA6IC0xKQotI2VuZGlmCi1jaGFuZ2VxdW90ZSgsKWRubAotdHlwZWRlZiBpbnQgYXJyYXkgWzIgKiAoX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04oMCkgPj0gMSkgLSAxXTsKLWNoYW5nZXF1b3RlKFssXSlkbmwKLV0sIFtdKVtleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7Ci1leHRlcm4KLSNpZmRlZiBfX2NwbHVzcGx1cwotIkMiCi0jZW5kaWYKLWNvbnN0IGNoYXIgKl9ubF9leHBhbmRfYWxpYXMgKGNvbnN0IGNoYXIgKik7XSwKLSAgICAgICAgICAgICAgICBbYmluZHRleHRkb21haW4gKCIiLCAiIik7Ci1yZXR1cm4gKiBnZXR0ZXh0ICgiIildaWZlbHNlKFskMl0sIFtuZWVkLW5nZXR0ZXh0XSwgWyArICogbmdldHRleHQgKCIiLCAiIiwgMCldLCBbXSlbICsgX25sX21zZ19jYXRfY250ciArICpfbmxfZXhwYW5kX2FsaWFzICgiIildLAotICAgICAgICAgICAgICAgW0xJQklOVEw9IiRMSUJJTlRMICRMSUJJQ09OViIKLSAgICAgICAgICAgICAgICBMVExJQklOVEw9IiRMVExJQklOVEwgJExUTElCSUNPTlYiCi0gICAgICAgICAgICAgICAgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGw9eWVzCi0gICAgICAgICAgICAgICBdKQotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIENQUEZMQUdTPSIkZ3Rfc2F2ZV9DUFBGTEFHUyIKLSAgICAgICAgICAgIExJQlM9IiRndF9zYXZlX0xJQlMiXSkKLSAgICAgICAgZmkKLQotICAgICAgICBkbmwgSWYgYW4gYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZCBHTlUgZ2V0dGV4dCgpIGlzIGZvdW5kLAotICAgICAgICBkbmwgdXNlIGl0LiAgQnV0IGlmIHRoaXMgbWFjcm8gaXMgdXNlZCBpbiBHTlUgZ2V0dGV4dCwgYW5kIEdOVQotICAgICAgICBkbmwgZ2V0dGV4dCBpcyBhbHJlYWR5IHByZWluc3RhbGxlZCBpbiBsaWJpbnRsLCB3ZSB1cGRhdGUgdGhpcwotICAgICAgICBkbmwgbGliaW50bC4gIChDZi4gdGhlIGluc3RhbGwgcnVsZSBpbiBpbnRsL01ha2VmaWxlLmluLikKLSAgICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJjIiA9ICJ5ZXMiIFwKLSAgICAgICAgICAgfHwgeyB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiID0gInllcyIgXAotICAgICAgICAgICAgICAgICYmIHRlc3QgIiRQQUNLQUdFIiAhPSBnZXR0ZXh0LXJ1bnRpbWUgXAotICAgICAgICAgICAgICAgICYmIHRlc3QgIiRQQUNLQUdFIiAhPSBnZXR0ZXh0LXRvb2xzOyB9OyB0aGVuCi0gICAgICAgICAgZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0PXllcwotICAgICAgICBlbHNlCi0gICAgICAgICAgZG5sIFJlc2V0IHRoZSB2YWx1ZXMgc2V0IGJ5IHNlYXJjaGluZyBmb3IgbGliaW50bC4KLSAgICAgICAgICBMSUJJTlRMPQotICAgICAgICAgIExUTElCSU5UTD0KLSAgICAgICAgICBJTkNJTlRMPQotICAgICAgICBmaQotCi0gICAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWwotICAgICAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiAhPSAieWVzIjsgdGhlbgotICAgICAgICAgIGRubCBHTlUgZ2V0dGV4dCBpcyBub3QgZm91bmQgaW4gdGhlIEMgbGlicmFyeS4KLSAgICAgICAgICBkbmwgRmFsbCBiYWNrIG9uIGluY2x1ZGVkIEdOVSBnZXR0ZXh0IGxpYnJhcnkuCi0gICAgICAgICAgbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dD15ZXMKLSAgICAgICAgZmkKLSAgICAgIGZpCi0KLSAgICAgIGlmIHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCi0gICAgICAgIGRubCBNYXJrIGFjdGlvbnMgdXNlZCB0byBnZW5lcmF0ZSBHTlUgTkxTIGxpYnJhcnkuCi0gICAgICAgIEJVSUxEX0lOQ0xVREVEX0xJQklOVEw9eWVzCi0gICAgICAgIFVTRV9JTkNMVURFRF9MSUJJTlRMPXllcwotICAgICAgICBMSUJJTlRMPSJpZmVsc2UoWyQzXSxbXSxcJHt0b3BfYnVpbGRkaXJ9L2ludGwsWyQzXSkvbGliaW50bC5bXWd0X2xpYnRvb2xfc3VmZml4X3ByZWZpeFtdYSAkTElCSUNPTlYiCi0gICAgICAgIExUTElCSU5UTD0iaWZlbHNlKFskM10sW10sXCR7dG9wX2J1aWxkZGlyfS9pbnRsLFskM10pL2xpYmludGwuW11ndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXhbXWEgJExUTElCSUNPTlYiCi0gICAgICAgIExJQlM9YGVjaG8gIiAkTElCUyAiIHwgc2VkIC1lICdzLyAtbGludGwgLyAvJyAtZSAncy9eIC8vJyAtZSAncy8gJC8vJ2AKLSAgICAgIGZpCi0KLSAgICAgIENBVE9CSkVYVD0KLSAgICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyIgXAotICAgICAgICAgfHwgdGVzdCAiJG5sc19jdl91c2VfZ251X2dldHRleHQiID0gInllcyI7IHRoZW4KLSAgICAgICAgZG5sIE1hcmsgYWN0aW9ucyB0byB1c2UgR05VIGdldHRleHQgdG9vbHMuCi0gICAgICAgIENBVE9CSkVYVD0uZ21vCi0gICAgICBmaQotICAgIF0pCi0KLSAgICBpZiB0ZXN0IC1uICIkSU5UTF9NQUNPU1hfTElCUyI7IHRoZW4KLSAgICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyIgXAotICAgICAgICAgfHwgdGVzdCAiJG5sc19jdl91c2VfZ251X2dldHRleHQiID0gInllcyI7IHRoZW4KLSAgICAgICAgZG5sIFNvbWUgZXh0cmEgZmxhZ3MgYXJlIG5lZWRlZCBkdXJpbmcgbGlua2luZy4KLSAgICAgICAgTElCSU5UTD0iJExJQklOVEwgJElOVExfTUFDT1NYX0xJQlMiCi0gICAgICAgIExUTElCSU5UTD0iJExUTElCSU5UTCAkSU5UTF9NQUNPU1hfTElCUyIKLSAgICAgIGZpCi0gICAgZmkKLQotICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyIgXAotICAgICAgIHx8IHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCi0gICAgICBBQ19ERUZJTkUoRU5BQkxFX05MUywgMSwKLSAgICAgICAgW0RlZmluZSB0byAxIGlmIHRyYW5zbGF0aW9uIG9mIHByb2dyYW0gbWVzc2FnZXMgdG8gdGhlIHVzZXIncyBuYXRpdmUgbGFuZ3VhZ2UKLSAgIGlzIHJlcXVlc3RlZC5dKQotICAgIGVsc2UKLSAgICAgIFVTRV9OTFM9bm8KLSAgICBmaQotICBmaQotCi0gIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byB1c2UgTkxTXSkKLSAgQUNfTVNHX1JFU1VMVChbJFVTRV9OTFNdKQotICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgotICAgIEFDX01TR19DSEVDS0lORyhbd2hlcmUgdGhlIGdldHRleHQgZnVuY3Rpb24gY29tZXMgZnJvbV0pCi0gICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgPSAieWVzIjsgdGhlbgotICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIiA9ICJ5ZXMiOyB0aGVuCi0gICAgICAgIGd0X3NvdXJjZT0iZXh0ZXJuYWwgbGliaW50bCIKLSAgICAgIGVsc2UKLSAgICAgICAgZ3Rfc291cmNlPSJsaWJjIgotICAgICAgZmkKLSAgICBlbHNlCi0gICAgICBndF9zb3VyY2U9ImluY2x1ZGVkIGludGwgZGlyZWN0b3J5IgotICAgIGZpCi0gICAgQUNfTVNHX1JFU1VMVChbJGd0X3NvdXJjZV0pCi0gIGZpCi0KLSAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KLQotICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyI7IHRoZW4KLSAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bCIgPSAieWVzIjsgdGhlbgotICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBsaW5rIHdpdGggbGliaW50bF0pCi0gICAgICAgIEFDX01TR19SRVNVTFQoWyRMSUJJTlRMXSkKLSAgICAgICAgQUNfTElCX0FQUEVORFRPVkFSKFtDUFBGTEFHU10sIFskSU5DSU5UTF0pCi0gICAgICBmaQotCi0gICAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgcGFja2FnZXMgbWF5IGJlIHVzaW5nIHRoaXMuCi0gICAgICBBQ19ERUZJTkUoSEFWRV9HRVRURVhULCAxLAotICAgICAgIFtEZWZpbmUgaWYgdGhlIEdOVSBnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC5dKQotICAgICAgQUNfREVGSU5FKEhBVkVfRENHRVRURVhULCAxLAotICAgICAgIFtEZWZpbmUgaWYgdGhlIEdOVSBkY2dldHRleHQoKSBmdW5jdGlvbiBpcyBhbHJlYWR5IHByZXNlbnQgb3IgcHJlaW5zdGFsbGVkLl0pCi0gICAgZmkKLQotICAgIGRubCBXZSBuZWVkIHRvIHByb2Nlc3MgdGhlIHBvLyBkaXJlY3RvcnkuCi0gICAgUE9TVUI9cG8KLSAgZmkKLQotICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCi0gICAgZG5sIElmIHRoaXMgaXMgdXNlZCBpbiBHTlUgZ2V0dGV4dCB3ZSBoYXZlIHRvIHNldCBCVUlMRF9JTkNMVURFRF9MSUJJTlRMCi0gICAgZG5sIHRvICd5ZXMnIGJlY2F1c2Ugc29tZSBvZiB0aGUgdGVzdHN1aXRlIHJlcXVpcmVzIGl0LgotICAgIGlmIHRlc3QgIiRQQUNLQUdFIiA9IGdldHRleHQtcnVudGltZSB8fCB0ZXN0ICIkUEFDS0FHRSIgPSBnZXR0ZXh0LXRvb2xzOyB0aGVuCi0gICAgICBCVUlMRF9JTkNMVURFRF9MSUJJTlRMPXllcwotICAgIGZpCi0KLSAgICBkbmwgTWFrZSBhbGwgdmFyaWFibGVzIHdlIHVzZSBrbm93biB0byBhdXRvY29uZi4KLSAgICBBQ19TVUJTVChCVUlMRF9JTkNMVURFRF9MSUJJTlRMKQotICAgIEFDX1NVQlNUKFVTRV9JTkNMVURFRF9MSUJJTlRMKQotICAgIEFDX1NVQlNUKENBVE9CSkVYVCkKLQotICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBjb25maWd1cmUuaW5zIG1heSBiZSB1c2luZyB0aGlzLgotICAgIG5sc19jdl9oZWFkZXJfaW50bD0KLSAgICBubHNfY3ZfaGVhZGVyX2xpYmd0PQotCi0gICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KLSAgICBEQVRBRElSTkFNRT1zaGFyZQotICAgIEFDX1NVQlNUKERBVEFESVJOQU1FKQotCi0gICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KLSAgICBJTlNUT0JKRVhUPS5tbwotICAgIEFDX1NVQlNUKElOU1RPQkpFWFQpCi0KLSAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgotICAgIEdFTkNBVD1nZW5jYXQKLSAgICBBQ19TVUJTVChHRU5DQVQpCi0KLSAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgotICAgIElOVExPQkpTPQotICAgIGlmIHRlc3QgIiRVU0VfSU5DTFVERURfTElCSU5UTCIgPSB5ZXM7IHRoZW4KLSAgICAgIElOVExPQkpTPSJcJChHRVRUT0JKUykiCi0gICAgZmkKLSAgICBBQ19TVUJTVChJTlRMT0JKUykKLQotICAgIGRubCBFbmFibGUgbGlidG9vbCBzdXBwb3J0IGlmIHRoZSBzdXJyb3VuZGluZyBwYWNrYWdlIHdpc2hlcyBpdC4KLSAgICBJTlRMX0xJQlRPT0xfU1VGRklYX1BSRUZJWD1ndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXgKLSAgICBBQ19TVUJTVChJTlRMX0xJQlRPT0xfU1VGRklYX1BSRUZJWCkKLSAgXSkKLQotICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgotICBJTlRMTElCUz0iJExJQklOVEwiCi0gIEFDX1NVQlNUKElOVExMSUJTKQotCi0gIGRubCBNYWtlIGFsbCBkb2N1bWVudGVkIHZhcmlhYmxlcyBrbm93biB0byBhdXRvY29uZi4KLSAgQUNfU1VCU1QoTElCSU5UTCkKLSAgQUNfU1VCU1QoTFRMSUJJTlRMKQotICBBQ19TVUJTVChQT1NVQikKLV0pCi0KLQotZG5sIENoZWNrcyBmb3IgYWxsIHByZXJlcXVpc2l0ZXMgb2YgdGhlIGludGwgc3ViZGlyZWN0b3J5LAotZG5sIGV4Y2VwdCBmb3IgSU5UTF9MSUJUT09MX1NVRkZJWF9QUkVGSVggKGFuZCBwb3NzaWJseSBMSUJUT09MKSwgSU5UTE9CSlMsCi1kbmwgICAgICAgICAgICBVU0VfSU5DTFVERURfTElCSU5UTCwgQlVJTERfSU5DTFVERURfTElCSU5UTC4KLSAgICBBQ19ERUZVTihbQU1fSU5UTF9TVUJESVJdLCBbXSkKLQotCi1kbmwgQ2hlY2tzIGZvciBzcGVjaWFsIG9wdGlvbnMgbmVlZGVkIG9uIE1hY09TIFguCi1kbmwgRGVmaW5lcyBJTlRMX01BQ09TWF9MSUJTLgotQUNfREVGVU4oW2d0X0lOVExfTUFDT1NYXSwKLVsKLSAgZG5sIENoZWNrIGZvciBBUEkgaW50cm9kdWNlZCBpbiBNYWNPUyBYIDEwLjIuCi0gIEFDX0NBQ0hFX0NIRUNLKFtmb3IgQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZV0sCi0gICAgZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlLAotICAgIFtndF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCi0gICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlRm91bmRhdGlvbi5mcmFtZXdvcmsvSGVhZGVycyIKLSAgICAgZ3Rfc2F2ZV9MSUJTPSIkTElCUyIKLSAgICAgTElCUz0iJExJQlMgLWZyYW1ld29yayBDb3JlRm91bmRhdGlvbiIKLSAgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxDRlByZWZlcmVuY2VzLmg+XSwKLSAgICAgICBbQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZShOVUxMLCBOVUxMKV0sCi0gICAgICAgW2d0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZT15ZXNdLAotICAgICAgIFtndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWU9bm9dKQotICAgICBDUFBGTEFHUz0iJGd0X3NhdmVfQ1BQRkxBR1MiCi0gICAgIExJQlM9IiRndF9zYXZlX0xJQlMiXSkKLSAgaWYgdGVzdCAkZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlID0geWVzOyB0aGVuCi0gICAgQUNfREVGSU5FKFtIQVZFX0NGUFJFRkVSRU5DRVNDT1BZQVBQVkFMVUVdLCAxLAotICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBNYWNPUyBYIGZ1bmN0aW9uIENGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUgaW4gdGhlIENvcmVGb3VuZGF0aW9uIGZyYW1ld29yay5dKQotICBmaQotICBkbmwgQ2hlY2sgZm9yIEFQSSBpbnRyb2R1Y2VkIGluIE1hY09TIFggMTAuMy4KLSAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBDRkxvY2FsZUNvcHlDdXJyZW50XSwgZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50LAotICAgIFtndF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCi0gICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlRm91bmRhdGlvbi5mcmFtZXdvcmsvSGVhZGVycyIKLSAgICAgZ3Rfc2F2ZV9MSUJTPSIkTElCUyIKLSAgICAgTElCUz0iJExJQlMgLWZyYW1ld29yayBDb3JlRm91bmRhdGlvbiIKLSAgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxDRkxvY2FsZS5oPl0sIFtDRkxvY2FsZUNvcHlDdXJyZW50KCk7XSwKLSAgICAgICBbZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50PXllc10sCi0gICAgICAgW2d0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudD1ub10pCi0gICAgIENQUEZMQUdTPSIkZ3Rfc2F2ZV9DUFBGTEFHUyIKLSAgICAgTElCUz0iJGd0X3NhdmVfTElCUyJdKQotICBpZiB0ZXN0ICRndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQgPSB5ZXM7IHRoZW4KLSAgICBBQ19ERUZJTkUoW0hBVkVfQ0ZMT0NBTEVDT1BZQ1VSUkVOVF0sIDEsCi0gICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIE1hY09TIFggZnVuY3Rpb24gQ0ZMb2NhbGVDb3B5Q3VycmVudCBpbiB0aGUgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLl0pCi0gIGZpCi0gIElOVExfTUFDT1NYX0xJQlM9Ci0gIGlmIHRlc3QgJGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSA9IHllcyB8fCB0ZXN0ICRndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQgPSB5ZXM7IHRoZW4KLSAgICBJTlRMX01BQ09TWF9MSUJTPSItV2wsLWZyYW1ld29yayAtV2wsQ29yZUZvdW5kYXRpb24iCi0gIGZpCi0gIEFDX1NVQlNUKFtJTlRMX01BQ09TWF9MSUJTXSkKLV0pCi0KLQotZG5sIGd0X0NIRUNLX0RFQ0woRlVOQywgSU5DTFVERVMpCi1kbmwgQ2hlY2sgd2hldGhlciBhIGZ1bmN0aW9uIGlzIGRlY2xhcmVkLgotQUNfREVGVU4oW2d0X0NIRUNLX0RFQ0xdLAotWwotICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciAkMSBpcyBkZWNsYXJlZF0sIGFjX2N2X2hhdmVfZGVjbF8kMSwKLSAgICBbQUNfVFJZX0NPTVBJTEUoWyQyXSwgWwotI2lmbmRlZiAkMQotICBjaGFyICpwID0gKGNoYXIgKikgJDE7Ci0jZW5kaWYKLV0sIGFjX2N2X2hhdmVfZGVjbF8kMT15ZXMsIGFjX2N2X2hhdmVfZGVjbF8kMT1ubyldKQotICBpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfJDEgPSB5ZXM7IHRoZW4KLSAgICBndF92YWx1ZT0xCi0gIGVsc2UKLSAgICBndF92YWx1ZT0wCi0gIGZpCi0gIEFDX0RFRklORV9VTlFVT1RFRChbSEFWRV9ERUNMX110cmFuc2xpdCgkMSwgW2Etel0sIFtBLVpdKSwgWyRndF92YWx1ZV0sCi0gICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgJDEnLCBhbmQgdG8gMCBpZiB5b3UgZG9uJ3QuXSkKLV0pCi0KLQotZG5sIFVzYWdlOiBBTV9HTlVfR0VUVEVYVF9WRVJTSU9OKFtnZXR0ZXh0LXZlcnNpb25dKQotQUNfREVGVU4oW0FNX0dOVV9HRVRURVhUX1ZFUlNJT05dLCBbXSkKZGlmZiAtLWdpdCBhL200L2dsaWJjMjEubTQgYi9tNC9nbGliYzIxLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MzhmYjEKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9nbGliYzIxLm00CkBAIC0wLDAgKzEsMzQgQEAKKyMgZ2xpYmMyMS5tNCBzZXJpYWwgNQorZG5sIENvcHlyaWdodCAoQykgMjAwMC0yMDAyLCAyMDA0LCAyMDA4LCAyMDEwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorZG5sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRlc3QgZm9yIHRoZSBHTlUgQyBMaWJyYXJ5LCB2ZXJzaW9uIDIuMSBvciBuZXdlciwgb3IgdUNsaWJjLgorIyBGcm9tIEJydW5vIEhhaWJsZS4KKworQUNfREVGVU4oW2dsX0dMSUJDMjFdLAorICBbCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBMaWJyYXJ5ID49IDIuMSBvciB1Q2xpYmNdLAorICAgICAgW2FjX2N2X2dudV9saWJyYXJ5XzJfMV0sCisgICAgICBbQUNfRUdSRVBfQ1BQKFtMdWNreV0sCisgICAgICAgIFsKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorI2lmZGVmIF9fR05VX0xJQlJBUllfXworICNpZiAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEpIHx8IChfX0dMSUJDX18gPiAyKQorICBMdWNreSBHTlUgdXNlcgorICNlbmRpZgorI2VuZGlmCisjaWZkZWYgX19VQ0xJQkNfXworIEx1Y2t5IHVzZXIKKyNlbmRpZgorICAgICAgICBdLAorICAgICAgICBbYWNfY3ZfZ251X2xpYnJhcnlfMl8xPXllc10sCisgICAgICAgIFthY19jdl9nbnVfbGlicmFyeV8yXzE9bm9dKQorICAgICAgXQorICAgICkKKyAgICBBQ19TVUJTVChbR0xJQkMyMV0pCisgICAgR0xJQkMyMT0iJGFjX2N2X2dudV9saWJyYXJ5XzJfMSIKKyAgXQorKQpkaWZmIC0tZ2l0IGEvbTQvZ251bGliLWNvbW1vbi5tNCBiL200L2dudWxpYi1jb21tb24ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVkMmIyYgotLS0gL2Rldi9udWxsCisrKyBiL200L2dudWxpYi1jb21tb24ubTQKQEAgLTAsMCArMSwzNzMgQEAKKyMgZ251bGliLWNvbW1vbi5tNCBzZXJpYWwgMzMKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIGdsX0NPTU1PTgorIyBpcyBleHBhbmRlZCB1bmNvbmRpdGlvbmFsbHkgdGhyb3VnaCBnbnVsaWItdG9vbCBtYWdpYy4KK0FDX0RFRlVOKFtnbF9DT01NT05dLCBbCisgIGRubCBVc2UgQUNfUkVRVUlSRSBoZXJlLCBzbyB0aGF0IHRoZSBjb2RlIGlzIGV4cGFuZGVkIG9uY2Ugb25seS4KKyAgQUNfUkVRVUlSRShbZ2xfMDBHTlVMSUJdKQorICBBQ19SRVFVSVJFKFtnbF9DT01NT05fQk9EWV0pCitdKQorQUNfREVGVU4oW2dsX0NPTU1PTl9CT0RZXSwgWworICBBSF9WRVJCQVRJTShbX05vcmV0dXJuXSwKK1svKiBUaGUgX05vcmV0dXJuIGtleXdvcmQgb2YgQzExLiAgKi8KKyNpZiAhIChkZWZpbmVkIF9Ob3JldHVybiBcCisgICAgICAgfHwgKGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyAmJiAyMDExMTIgPD0gX19TVERDX1ZFUlNJT05fXykpCisjIGlmICgzIDw9IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSAyICYmIDggPD0gX19HTlVDX01JTk9SX18pIFwKKyAgICAgIHx8IDB4NTExMCA8PSBfX1NVTlBST19DKQorIyAgZGVmaW5lIF9Ob3JldHVybiBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSkKKyMgZWxpZiBkZWZpbmVkIF9NU0NfVkVSICYmIDEyMDAgPD0gX01TQ19WRVIKKyMgIGRlZmluZSBfTm9yZXR1cm4gX19kZWNsc3BlYyAobm9yZXR1cm4pCisjIGVsc2UKKyMgIGRlZmluZSBfTm9yZXR1cm4KKyMgZW5kaWYKKyNlbmRpZgorXSkKKyAgQUhfVkVSQkFUSU0oW2lzb2M5OV9pbmxpbmVdLAorWy8qIFdvcmsgYXJvdW5kIGEgYnVnIGluIEFwcGxlIEdDQyA0LjAuMSBidWlsZCA1NDY1OiBJbiBDOTkgbW9kZSwgaXQgc3VwcG9ydHMKKyAgIHRoZSBJU08gQyA5OSBzZW1hbnRpY3Mgb2YgJ2V4dGVybiBpbmxpbmUnICh1bmxpa2UgdGhlIEdOVSBDIHNlbWFudGljcyBvZgorICAgZWFybGllciB2ZXJzaW9ucyksIGJ1dCBkb2VzIG5vdCBkaXNwbGF5IGl0IGJ5IHNldHRpbmcgX19HTlVDX1NURENfSU5MSU5FX18uCisgICBfX0FQUExFX18gJiYgX19NQUNIX18gdGVzdCBmb3IgTWFjIE9TIFguCisgICBfX0FQUExFX0NDX18gdGVzdHMgZm9yIHRoZSBBcHBsZSBjb21waWxlciBhbmQgaXRzIHZlcnNpb24uCisgICBfX1NURENfVkVSU0lPTl9fIHRlc3RzIGZvciB0aGUgQzk5IG1vZGUuICAqLworI2lmIGRlZmluZWQgX19BUFBMRV9fICYmIGRlZmluZWQgX19NQUNIX18gJiYgX19BUFBMRV9DQ19fID49IDU0NjUgJiYgIWRlZmluZWQgX19jcGx1c3BsdXMgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMICYmICFkZWZpbmVkIF9fR05VQ19TVERDX0lOTElORV9fCisjIGRlZmluZSBfX0dOVUNfU1REQ19JTkxJTkVfXyAxCisjZW5kaWZdKQorICBBSF9WRVJCQVRJTShbdW51c2VkX3BhcmFtZXRlcl0sCitbLyogRGVmaW5lIGFzIGEgbWFya2VyIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIGRlY2xhcmF0aW9ucyB0aGF0IG1pZ2h0IG5vdAorICAgIGJlIHVzZWQuICBUaGlzIGhlbHBzIHRvIHJlZHVjZSB3YXJuaW5ncywgc3VjaCBhcyBmcm9tCisgICAgR0NDIC1XdW51c2VkLXBhcmFtZXRlci4gICovCisjaWYgX19HTlVDX18gPj0gMyB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA3KQorIyBkZWZpbmUgX0dMX1VOVVNFRCBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCisjZWxzZQorIyBkZWZpbmUgX0dMX1VOVVNFRAorI2VuZGlmCisvKiBUaGUgbmFtZSBfVU5VU0VEX1BBUkFNRVRFUl8gaXMgYW4gZWFybGllciBzcGVsbGluZywgYWx0aG91Z2ggdGhlIG5hbWUKKyAgIGlzIGEgbWlzbm9tZXIgb3V0c2lkZSBvZiBwYXJhbWV0ZXIgbGlzdHMuICAqLworI2RlZmluZSBfVU5VU0VEX1BBUkFNRVRFUl8gX0dMX1VOVVNFRAorCisvKiBUaGUgX19wdXJlX18gYXR0cmlidXRlIHdhcyBhZGRlZCBpbiBnY2MgMi45Ni4gICovCisjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk2KQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9QVVJFIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpCisjZWxzZQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9QVVJFIC8qIGVtcHR5ICovCisjZW5kaWYKKworLyogVGhlIF9fY29uc3RfXyBhdHRyaWJ1dGUgd2FzIGFkZGVkIGluIGdjYyAyLjk1LiAgKi8KKyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTUpCisjIGRlZmluZSBfR0xfQVRUUklCVVRFX0NPTlNUIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfQ09OU1QgLyogZW1wdHkgKi8KKyNlbmRpZgorXSkKKyAgZG5sIFByZXBhcmF0aW9uIGZvciBydW5uaW5nIHRlc3QgcHJvZ3JhbXM6CisgIGRubCBUZWxsIGdsaWJjIHRvIHdyaXRlIGRpYWdub3N0aWNzIGZyb20gLURfRk9SVElGWV9TT1VSQ0U9MiB0byBzdGRlcnIsIG5vdAorICBkbmwgdG8gL2Rldi90dHksIHNvIHRoZXkgY2FuIGJlIHJlZGlyZWN0ZWQgdG8gbG9nIGZpbGVzLiAgU3VjaCBkaWFnbm9zdGljcworICBkbmwgYXJpc2UgZS5nLiwgaW4gdGhlIG1hY3JvcyBnbF9QUklOVEZfRElSRUNUSVZFX04sIGdsX1NOUFJJTlRGX0RJUkVDVElWRV9OLgorICBMSUJDX0ZBVEFMX1NUREVSUl89MQorICBleHBvcnQgTElCQ19GQVRBTF9TVERFUlJfCitdKQorCisjIGdsX01PRFVMRV9JTkRJQ0FUT1JfQ09ORElUSU9OCisjIGV4cGFuZHMgdG8gYSBDIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIDEgb3IgMCwgZGVwZW5kaW5nCisjIHdoZXRoZXIgYSBnbnVsaWIgbW9kdWxlIHRoYXQgaGFzIGJlZW4gcmVxdWVzdGVkIHNoYWxsIGJlIGNvbnNpZGVyZWQgcHJlc2VudAorIyBvciBub3QuCittNF9kZWZpbmUoW2dsX01PRFVMRV9JTkRJQ0FUT1JfQ09ORElUSU9OXSwgWzFdKQorCisjIGdsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFKFttb2R1bGVuYW1lXSkKKyMgc2V0cyB0aGUgc2hlbGwgdmFyaWFibGUgdGhhdCBpbmRpY2F0ZXMgdGhlIHByZXNlbmNlIG9mIHRoZSBnaXZlbiBtb2R1bGUgdG8KKyMgYSBDIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHRoYXQgd2lsbCBldmFsdWF0ZSB0byAxLgorQUNfREVGVU4oW2dsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFXSwKK1sKKyAgZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEVfQVVYKAorICAgIFtHTlVMSUJfW11tNF90cmFuc2xpdChbWyQxXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSwKKyAgICBbZ2xfTU9EVUxFX0lORElDQVRPUl9DT05ESVRJT05dKQorXSkKKworIyBnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRV9BVVgoW3ZhcmlhYmxlXSkKKyMgbW9kaWZpZXMgdGhlIHNoZWxsIHZhcmlhYmxlIHRvIGluY2x1ZGUgdGhlIGdsX01PRFVMRV9JTkRJQ0FUT1JfQ09ORElUSU9OLgorIyBUaGUgc2hlbGwgdmFyaWFibGUncyB2YWx1ZSBpcyBhIEMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMKKyMgdG8gMCBvciAxLgorQUNfREVGVU4oW2dsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFX0FVWF0sCitbCisgIG00X2lmKG00X2RlZm4oW2dsX01PRFVMRV9JTkRJQ0FUT1JfQ09ORElUSU9OXSksIFsxXSwKKyAgICBbCisgICAgIGRubCBTaW1wbGlmeSB0aGUgZXhwcmVzc2lvbiBWQUxVRSB8fCAxIHRvIDEuCisgICAgICQxPTEKKyAgICBdLAorICAgIFtnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRV9BVVhfT1IoWyQxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtnbF9NT0RVTEVfSU5ESUNBVE9SX0NPTkRJVElPTl0pXSkKK10pCisKKyMgZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEVfQVVYX09SKFt2YXJpYWJsZV0sIFtjb25kaXRpb25dKQorIyBtb2RpZmllcyB0aGUgc2hlbGwgdmFyaWFibGUgdG8gaW5jbHVkZSB0aGUgZ2l2ZW4gY29uZGl0aW9uLiAgVGhlIHNoZWxsCisjIHZhcmlhYmxlJ3MgdmFsdWUgaXMgYSBDIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIDAgb3IgMS4KK0FDX0RFRlVOKFtnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRV9BVVhfT1JdLAorWworICBkbmwgU2ltcGxpZnkgdGhlIGV4cHJlc3Npb24gMSB8fCBDT05ESVRJT04gdG8gMS4KKyAgaWYgdGVzdCAiJFtdJDEiICE9IDE7IHRoZW4KKyAgICBkbmwgU2ltcGxpZnkgdGhlIGV4cHJlc3Npb24gMCB8fCBDT05ESVRJT04gdG8gQ09ORElUSU9OLgorICAgIGlmIHRlc3QgIiRbXSQxIiA9IDA7IHRoZW4KKyAgICAgICQxPSQyCisgICAgZWxzZQorICAgICAgJDE9IigkW10kMSB8fCAkMikiCisgICAgZmkKKyAgZmkKK10pCisKKyMgZ2xfTU9EVUxFX0lORElDQVRPUihbbW9kdWxlbmFtZV0pCisjIGRlZmluZXMgYSBDIG1hY3JvIGluZGljYXRpbmcgdGhlIHByZXNlbmNlIG9mIHRoZSBnaXZlbiBtb2R1bGUKKyMgaW4gYSBsb2NhdGlvbiB3aGVyZSBpdCBjYW4gYmUgdXNlZC4KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBWYWx1ZSAgfCAgIFZhbHVlICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW4gbGliLyB8IGluIHRlc3RzLyB8CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSsKKyMgTW9kdWxlIHByZXNlbnQgYW1vbmcgbWFpbiBtb2R1bGVzOiAgICAgICAgICB8ICAgIDEgICAgfCAgICAgMSAgICAgfAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rCisjIE1vZHVsZSBwcmVzZW50IGFtb25nIHRlc3RzLXJlbGF0ZWQgbW9kdWxlczogfCAgICAwICAgIHwgICAgIDEgICAgIHwKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKworIyBNb2R1bGUgbm90IHByZXNlbnQgYXQgYWxsOiAgICAgICAgICAgICAgICAgIHwgICAgMCAgICB8ICAgICAwICAgICB8CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSsKK0FDX0RFRlVOKFtnbF9NT0RVTEVfSU5ESUNBVE9SXSwKK1sKKyAgQUNfREVGSU5FX1VOUVVPVEVEKFtHTlVMSUJfXW00X3RyYW5zbGl0KFtbJDFdXSwKKyAgICAgIFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKSwKKyAgICBbZ2xfTU9EVUxFX0lORElDQVRPUl9DT05ESVRJT05dLAorICAgIFtEZWZpbmUgdG8gYSBDIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIDEgb3IgMCwKKyAgICAgZGVwZW5kaW5nIHdoZXRoZXIgdGhlIGdudWxpYiBtb2R1bGUgJDEgc2hhbGwgYmUgY29uc2lkZXJlZCBwcmVzZW50Ll0pCitdKQorCisjIGdsX01PRFVMRV9JTkRJQ0FUT1JfRk9SX1RFU1RTKFttb2R1bGVuYW1lXSkKKyMgZGVmaW5lcyBhIEMgbWFjcm8gaW5kaWNhdGluZyB0aGUgcHJlc2VuY2Ugb2YgdGhlIGdpdmVuIG1vZHVsZQorIyBpbiBsaWIgb3IgdGVzdHMuIFRoaXMgaXMgdXNlZnVsIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBtb2R1bGUKKyMgc2hvdWxkIGJlIHRlc3RlZC4KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBWYWx1ZSAgfCAgIFZhbHVlICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW4gbGliLyB8IGluIHRlc3RzLyB8CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSsKKyMgTW9kdWxlIHByZXNlbnQgYW1vbmcgbWFpbiBtb2R1bGVzOiAgICAgICAgICB8ICAgIDEgICAgfCAgICAgMSAgICAgfAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rCisjIE1vZHVsZSBwcmVzZW50IGFtb25nIHRlc3RzLXJlbGF0ZWQgbW9kdWxlczogfCAgICAxICAgIHwgICAgIDEgICAgIHwKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKworIyBNb2R1bGUgbm90IHByZXNlbnQgYXQgYWxsOiAgICAgICAgICAgICAgICAgIHwgICAgMCAgICB8ICAgICAwICAgICB8CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSsKK0FDX0RFRlVOKFtnbF9NT0RVTEVfSU5ESUNBVE9SX0ZPUl9URVNUU10sCitbCisgIEFDX0RFRklORShbR05VTElCX1RFU1RfXW00X3RyYW5zbGl0KFtbJDFdXSwKKyAgICAgIFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKSwgWzFdLAorICAgIFtEZWZpbmUgdG8gMSB3aGVuIHRoZSBnbnVsaWIgbW9kdWxlICQxIHNob3VsZCBiZSB0ZXN0ZWQuXSkKK10pCisKKyMgZ2xfQVNTRVJUX05PX0dOVUxJQl9QT1NJWENIRUNLCisjIGFzc2VydHMgdGhhdCB0aGVyZSB3aWxsIG5ldmVyIGJlIGEgbmVlZCB0byAjZGVmaW5lIEdOVUxJQl9QT1NJWENIRUNLLgorIyBhbmQgdGhlcmVieSBlbmFibGVzIGFuIG9wdGltaXphdGlvbiBvZiBjb25maWd1cmUgYW5kIGNvbmZpZy5oLgorIyBVc2VkIGJ5IEVtYWNzLgorQUNfREVGVU4oW2dsX0FTU0VSVF9OT19HTlVMSUJfUE9TSVhDSEVDS10sCitbCisgIGRubCBPdmVycmlkZSBnbF9XQVJOX09OX1VTRV9QUkVQQVJFLgorICBkbmwgQnV0IGhpZGUgdGhpcyBkZWZpbml0aW9uIGZyb20gJ2FjbG9jYWwnLgorICBBQ19ERUZVTihbZ2xfV11bQVJOX09OX1VTRV9QUkVQQVJFXSwgW10pCitdKQorCisjIGdsX0FTU0VSVF9OT19HTlVMSUJfVEVTVFMKKyMgYXNzZXJ0cyB0aGF0IHRoZXJlIHdpbGwgYmUgbm8gZ251bGliIHRlc3RzIGluIHRoZSBzY29wZSBvZiB0aGUgY29uZmlndXJlLmFjCisjIGFuZCB0aGVyZWJ5IGVuYWJsZXMgYW4gb3B0aW1pemF0aW9uIG9mIGNvbmZpZy5oLgorIyBVc2VkIGJ5IEVtYWNzLgorQUNfREVGVU4oW2dsX0FTU0VSVF9OT19HTlVMSUJfVEVTVFNdLAorWworICBkbmwgT3ZlcnJpZGUgZ2xfTU9EVUxFX0lORElDQVRPUl9GT1JfVEVTVFMuCisgIEFDX0RFRlVOKFtnbF9NT0RVTEVfSU5ESUNBVE9SX0ZPUl9URVNUU10sIFtdKQorXSkKKworIyBUZXN0IHdoZXRoZXIgPGZlYXR1cmVzLmg+IGV4aXN0cy4KKyMgU2V0IEhBVkVfRkVBVFVSRVNfSC4KK0FDX0RFRlVOKFtnbF9GRUFUVVJFU19IXSwKK1sKKyAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKFtmZWF0dXJlcy5oXSkKKyAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX2ZlYXR1cmVzX2ggPSB5ZXM7IHRoZW4KKyAgICBIQVZFX0ZFQVRVUkVTX0g9MQorICBlbHNlCisgICAgSEFWRV9GRUFUVVJFU19IPTAKKyAgZmkKKyAgQUNfU1VCU1QoW0hBVkVfRkVBVFVSRVNfSF0pCitdKQorCisjIG00X2ZvcmVhY2hfdworIyBpcyBhIGJhY2twb3J0IG9mIGF1dG9jb25mLTIuNTljJ3MgbTRfZm9yZWFjaF93LgorIyBSZW1vdmUgdGhpcyBtYWNybyB3aGVuIHdlIGNhbiBhc3N1bWUgYXV0b2NvbmYgPj0gMi42MC4KK200X2lmbmRlZihbbTRfZm9yZWFjaF93XSwKKyAgW200X2RlZmluZShbbTRfZm9yZWFjaF93XSwKKyAgICBbbTRfZm9yZWFjaChbJDFdLCBtNF9zcGxpdChtNF9ub3JtYWxpemUoWyQyXSksIFsgXSksIFskM10pXSldKQorCisjIEFTX1ZBUl9JRihWQVIsIFZBTFVFLCBbSUYtTUFUQ0hdLCBbSUYtTk9ULU1BVENIXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBCYWNrcG9ydCBvZiBhdXRvY29uZi0yLjYzYidzIG1hY3JvLgorIyBSZW1vdmUgdGhpcyBtYWNybyB3aGVuIHdlIGNhbiBhc3N1bWUgYXV0b2NvbmYgPj0gMi42NC4KK200X2lmbmRlZihbQVNfVkFSX0lGXSwKK1ttNF9kZWZpbmUoW0FTX1ZBUl9JRl0sCitbQVNfSUYoW3Rlc3QgeCJBU19WQVJfR0VUKFskMV0pIiA9IHgiIiQyXSwgWyQzXSwgWyQ0XSldKV0pCisKKyMgZ2xfUFJPR19DQ19DOTkKKyMgTW9kaWZpZXMgdGhlIHZhbHVlIG9mIHRoZSBzaGVsbCB2YXJpYWJsZSBDQyBpbiBhbiBhdHRlbXB0IHRvIG1ha2UgJENDCisjIHVuZGVyc3RhbmQgSVNPIEM5OSBzb3VyY2UgY29kZS4KKyMgVGhpcyBpcyBsaWtlIEFDX1BST0dfQ0NfQzk5LCBleGNlcHQgdGhhdAorIyAtIEFDX1BST0dfQ0NfQzk5IGRpZCBub3QgZXhpc3QgaW4gQXV0b2NvbmYgdmVyc2lvbnMgPCAyLjYwLAorIyAtIEFDX1BST0dfQ0NfQzk5IGRvZXMgbm90IG1peCB3ZWxsIHdpdGggQUNfUFJPR19DQ19TVERDCisjICAgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctZ251bGliLzIwMTEtMDkvbXNnMDAzNjcuaHRtbD4sCisjICAgYnV0IG1hbnkgbW9yZSBwYWNrYWdlcyB1c2UgQUNfUFJPR19DQ19TVERDIHRoYW4gQUNfUFJPR19DQ19DOTkKKyMgICA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1nbnVsaWIvMjAxMS0wOS9tc2cwMDQ0MS5odG1sPi4KKyMgUmVtYWluaW5nIHByb2JsZW1zOgorIyAtIFdoZW4gQUNfUFJPR19DQ19TVERDIGlzIGludm9rZWQgdHdpY2UsIGl0IGFkZHMgdGhlIEM5OSBlbmFibGluZyBvcHRpb25zCisjICAgdG8gQ0MgdHdpY2UKKyMgICA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1nbnVsaWIvMjAxMS0wOS9tc2cwMDQzMS5odG1sPi4KKyMgLSBBQ19QUk9HX0NDX1NUREMgaXMgbGlrZWx5IHRvIGNoYW5nZSBub3cgdGhhdCBDMTEgaXMgYW4gSVNPIHN0YW5kYXJkLgorQUNfREVGVU4oW2dsX1BST0dfQ0NfQzk5XSwKK1sKKyAgZG5sIENoYW5nZSB0aGF0IHZlcnNpb24gbnVtYmVyIHRvIHRoZSBtaW5pbXVtIEF1dG9jb25mIHZlcnNpb24gdGhhdCBzdXBwb3J0cworICBkbmwgbWl4aW5nIEFDX1BST0dfQ0NfQzk5IGNhbGxzIHdpdGggQUNfUFJPR19DQ19TVERDIGNhbGxzLgorICBtNF92ZXJzaW9uX3ByZXJlcShbOS4wXSwKKyAgICBbQUNfUkVRVUlSRShbQUNfUFJPR19DQ19DOTldKV0sCisgICAgW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NfU1REQ10pXSkKK10pCisKKyMgZ2xfUFJPR19BUl9SQU5MSUIKKyMgRGV0ZXJtaW5lcyB0aGUgdmFsdWVzIGZvciBBUiwgQVJGTEFHUywgUkFOTElCIHRoYXQgZml0IHdpdGggdGhlIGNvbXBpbGVyLgorIyBUaGUgdXNlciBjYW4gc2V0IHRoZSB2YXJpYWJsZXMgQVIsIEFSRkxBR1MsIFJBTkxJQiBpZiBoZSB3YW50cyB0byBvdmVycmlkZQorIyB0aGUgdmFsdWVzLgorQUNfREVGVU4oW2dsX1BST0dfQVJfUkFOTElCXSwKK1sKKyAgZG5sIE1pbml4IDMgY29tZXMgd2l0aCB0d28gdG9vbGNoYWluczogVGhlIEFtc3RlcmRhbSBDb21waWxlciBLaXQgY29tcGlsZXIKKyAgZG5sIGFzICJjYyIsIGFuZCBHQ0MgYXMgImdjYyIuIFRoZXkgaGF2ZSBkaWZmZXJlbnQgb2JqZWN0IGZpbGUgZm9ybWF0cyBhbmQKKyAgZG5sIGxpYnJhcnkgZm9ybWF0cy4gSW4gcGFydGljdWxhciwgdGhlIEdOVSBiaW51dGlscyBwcm9ncmFtcyBhciwgcmFubGliCisgIGRubCBwcm9kdWNlIGxpYnJhcmllcyB0aGF0IHdvcmsgb25seSB3aXRoIGdjYywgbm90IHdpdGggY2MuCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorICBBQ19DQUNIRV9DSEVDSyhbZm9yIE1pbml4IEFtc3RlcmRhbSBjb21waWxlcl0sIFtnbF9jdl9jX2Ftc3RlcmRhbV9jb21waWxlcl0sCisgICAgWworICAgICAgQUNfRUdSRVBfQ1BQKFtBbXN0ZXJkYW1dLAorICAgICAgICBbCisjaWZkZWYgX19BQ0tfXworQW1zdGVyZGFtCisjZW5kaWYKKyAgICAgICAgXSwKKyAgICAgICAgW2dsX2N2X2NfYW1zdGVyZGFtX2NvbXBpbGVyPXllc10sCisgICAgICAgIFtnbF9jdl9jX2Ftc3RlcmRhbV9jb21waWxlcj1ub10pCisgICAgXSkKKyAgaWYgdGVzdCAteiAiJEFSIjsgdGhlbgorICAgIGlmIHRlc3QgJGdsX2N2X2NfYW1zdGVyZGFtX2NvbXBpbGVyID0geWVzOyB0aGVuCisgICAgICBBUj0nY2MgLWMuYScKKyAgICAgIGlmIHRlc3QgLXogIiRBUkZMQUdTIjsgdGhlbgorICAgICAgICBBUkZMQUdTPSctbycKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgZG5sIFVzZSB0aGUgQXV0b21ha2UtZG9jdW1lbnRlZCBkZWZhdWx0IHZhbHVlcyBmb3IgQVIgYW5kIEFSRkxBR1MsCisgICAgICBkbmwgYnV0IHByZWZlciAke2hvc3R9LWFyIG92ZXIgYXIgKHVzZWZ1bCBmb3IgY3Jvc3MtY29tcGlsaW5nKS4KKyAgICAgIEFDX0NIRUNLX1RPT0woW0FSXSwgW2FyXSwgW2FyXSkKKyAgICAgIGlmIHRlc3QgLXogIiRBUkZMQUdTIjsgdGhlbgorICAgICAgICBBUkZMQUdTPSdjcnUnCisgICAgICBmaQorICAgIGZpCisgIGVsc2UKKyAgICBpZiB0ZXN0IC16ICIkQVJGTEFHUyI7IHRoZW4KKyAgICAgIEFSRkxBR1M9J2NydScKKyAgICBmaQorICBmaQorICBBQ19TVUJTVChbQVJdKQorICBBQ19TVUJTVChbQVJGTEFHU10pCisgIGlmIHRlc3QgLXogIiRSQU5MSUIiOyB0aGVuCisgICAgaWYgdGVzdCAkZ2xfY3ZfY19hbXN0ZXJkYW1fY29tcGlsZXIgPSB5ZXM7IHRoZW4KKyAgICAgIFJBTkxJQj0nOicKKyAgICBlbHNlCisgICAgICBkbmwgVXNlIHRoZSByYW5saWIgcHJvZ3JhbSBpZiBpdCBpcyBhdmFpbGFibGUuCisgICAgICBBQ19QUk9HX1JBTkxJQgorICAgIGZpCisgIGZpCisgIEFDX1NVQlNUKFtSQU5MSUJdKQorXSkKKworIyBBQ19QUk9HX01LRElSX1AKKyMgaXMgYSBiYWNrcG9ydCBvZiBhdXRvY29uZi0yLjYwJ3MgQUNfUFJPR19NS0RJUl9QLCB3aXRoIGEgZml4CisjIGZvciBpbnRlcm9wZXJhYmlsaXR5IHdpdGggYXV0b21ha2UtMS45LjYgZnJvbSBhdXRvY29uZi0yLjYyLgorIyBSZW1vdmUgdGhpcyBtYWNybyB3aGVuIHdlIGNhbiBhc3N1bWUgYXV0b2NvbmYgPj0gMi42MiBvcgorIyBhdXRvY29uZiA+PSAyLjYwICYmIGF1dG9tYWtlID49IDEuMTAuCittNF9pZmRlZihbQUNfUFJPR19NS0RJUl9QXSwgWworICBkbmwgRm9yIGF1dG9tYWtlLTEuOS42ICYmIGF1dG9jb25mIDwgMi42MjogRW5zdXJlIE1LRElSX1AgaXMgQUNfU1VCU1RlZC4KKyAgbTRfZGVmaW5lKFtBQ19QUk9HX01LRElSX1BdLAorICAgIG00X2RlZm4oW0FDX1BST0dfTUtESVJfUF0pWworICAgIEFDX1NVQlNUKFtNS0RJUl9QXSldKV0sIFsKKyAgZG5sIEZvciBhdXRvY29uZiA8IDIuNjA6IEJhY2twb3J0IG9mIEFDX1BST0dfTUtESVJfUC4KKyAgQUNfREVGVU5fT05DRShbQUNfUFJPR19NS0RJUl9QXSwKKyAgICBbQUNfUkVRVUlSRShbQU1fUFJPR19NS0RJUl9QXSlkbmwgZGVmaW5lZCBieSBhdXRvbWFrZQorICAgICBNS0RJUl9QPSckKG1rZGlyX3ApJworICAgICBBQ19TVUJTVChbTUtESVJfUF0pXSldKQorCisjIEFDX0NfUkVTVFJJQ1QKKyMgVGhpcyBkZWZpbml0aW9uIG92ZXJyaWRlcyB0aGUgQUNfQ19SRVNUUklDVCBtYWNybyBmcm9tIGF1dG9jb25mIDIuNjAuLjIuNjEsCisjIHNvIHRoYXQgbWl4ZWQgdXNlIG9mIEdOVSBDIGFuZCBHTlUgQysrIGFuZCBtaXhlZCB1c2Ugb2YgU3VuIEMgYW5kIFN1biBDKysKKyMgd29ya3MuCisjIFRoaXMgZGVmaW5pdGlvbiBjYW4gYmUgcmVtb3ZlZCBvbmNlIGF1dG9jb25mID49IDIuNjIgY2FuIGJlIGFzc3VtZWQuCittNF9pZihtNF92ZXJzaW9uX2NvbXBhcmUobTRfZGVmbihbbTRfUEFDS0FHRV9WRVJTSU9OXSksWzIuNjJdKSxbLTFdLFsKK0FDX0RFRlVOKFtBQ19DX1JFU1RSSUNUXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yIEMvQysrIHJlc3RyaWN0IGtleXdvcmRdLCBbYWNfY3ZfY19yZXN0cmljdF0sCisgIFthY19jdl9jX3Jlc3RyaWN0PW5vCisgICAjIFRoZSBvcmRlciBoZXJlIGNhdGVycyB0byB0aGUgZmFjdCB0aGF0IEMrKyBkb2VzIG5vdCByZXF1aXJlIHJlc3RyaWN0LgorICAgZm9yIGFjX2t3IGluIF9fcmVzdHJpY3QgX19yZXN0cmljdF9fIF9SZXN0cmljdCByZXN0cmljdDsgZG8KKyAgICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgIFtbdHlwZWRlZiBpbnQgKiBpbnRfcHRyOworICAgICAgICBpbnQgZm9vIChpbnRfcHRyICRhY19rdyBpcCkgeworICAgICAgICByZXR1cm4gaXBbMF07CisgICAgICAgfV1dLAorICAgICAgW1tpbnQgc1sxXTsKKyAgICAgICAgaW50ICogJGFjX2t3IHQgPSBzOworICAgICAgICB0WzBdID0gMDsKKyAgICAgICAgcmV0dXJuIGZvbyh0KV1dKV0sCisgICAgICBbYWNfY3ZfY19yZXN0cmljdD0kYWNfa3ddKQorICAgICB0ZXN0ICIkYWNfY3ZfY19yZXN0cmljdCIgIT0gbm8gJiYgYnJlYWsKKyAgIGRvbmUKKyAgXSkKKyBBSF9WRVJCQVRJTShbcmVzdHJpY3RdLAorWy8qIERlZmluZSB0byB0aGUgZXF1aXZhbGVudCBvZiB0aGUgQzk5ICdyZXN0cmljdCcga2V5d29yZCwgb3IgdG8KKyAgIG5vdGhpbmcgaWYgdGhpcyBpcyBub3Qgc3VwcG9ydGVkLiAgRG8gbm90IGRlZmluZSBpZiByZXN0cmljdCBpcworICAgc3VwcG9ydGVkIGRpcmVjdGx5LiAgKi8KKyN1bmRlZiByZXN0cmljdAorLyogV29yayBhcm91bmQgYSBidWcgaW4gU3VuIEMrKzogaXQgZG9lcyBub3Qgc3VwcG9ydCBfUmVzdHJpY3QsIGV2ZW4KKyAgIHRob3VnaCB0aGUgY29ycmVzcG9uZGluZyBTdW4gQyBjb21waWxlciBkb2VzLCB3aGljaCBjYXVzZXMKKyAgICIjZGVmaW5lIHJlc3RyaWN0IF9SZXN0cmljdCIgaW4gdGhlIHByZXZpb3VzIGxpbmUuICBQZXJoYXBzIHNvbWUgZnV0dXJlCisgICB2ZXJzaW9uIG9mIFN1biBDKysgd2lsbCB3b3JrIHdpdGggX1Jlc3RyaWN0OyBpZiBzbywgaXQnbGwgcHJvYmFibHkKKyAgIGRlZmluZSBfX1JFU1RSSUNULCBqdXN0IGFzIFN1biBDIGRvZXMuICAqLworI2lmIGRlZmluZWQgX19TVU5QUk9fQ0MgJiYgIWRlZmluZWQgX19SRVNUUklDVAorIyBkZWZpbmUgX1Jlc3RyaWN0CisjZW5kaWZdKQorIGNhc2UgJGFjX2N2X2NfcmVzdHJpY3QgaW4KKyAgIHJlc3RyaWN0KSA7OworICAgbm8pIEFDX0RFRklORShbcmVzdHJpY3RdLCBbXSkgOzsKKyAgICopICBBQ19ERUZJTkVfVU5RVU9URUQoW3Jlc3RyaWN0XSwgWyRhY19jdl9jX3Jlc3RyaWN0XSkgOzsKKyBlc2FjCitdKQorXSkKKworIyBnbF9CSUdFTkRJQU4KKyMgaXMgbGlrZSBBQ19DX0JJR0VORElBTiwgZXhjZXB0IHRoYXQgaXQgY2FuIGJlIEFDX1JFUVVJUkVkLgorIyBOb3RlIHRoYXQgQUNfUkVRVUlSRShbQUNfQ19CSUdFTkRJQU5dKSBkb2VzIG5vdCB3b3JrIHJlbGlhYmx5IGJlY2F1c2Ugc29tZQorIyBtYWNyb3MgaW52b2tlIEFDX0NfQklHRU5ESUFOIHdpdGggYXJndW1lbnRzLgorQUNfREVGVU4oW2dsX0JJR0VORElBTl0sCitbCisgIEFDX0NfQklHRU5ESUFOCitdKQorCisjIGdsX0NBQ0hFX1ZBTF9TSUxFTlQoY2FjaGUtaWQsIGNvbW1hbmQtdG8tc2V0LWl0KQorIyBpcyBsaWtlIEFDX0NBQ0hFX1ZBTChjYWNoZS1pZCwgY29tbWFuZC10by1zZXQtaXQpLCBleGNlcHQgdGhhdCBpdCBkb2VzIG5vdAorIyBvdXRwdXQgYSBzcHVyaW91cyAiKGNhY2hlZCkiIG1hcmsgaW4gdGhlIG1pZHN0IG9mIG90aGVyIGNvbmZpZ3VyZSBvdXRwdXQuCisjIFRoaXMgbWFjcm8gc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBBQ19DQUNIRV9WQUwgd2hlbiBpdCBpcyBub3Qgc3Vycm91bmRlZAorIyBieSBhbiBBQ19NU0dfQ0hFQ0tJTkcvQUNfTVNHX1JFU1VMVCBwYWlyLgorQUNfREVGVU4oW2dsX0NBQ0hFX1ZBTF9TSUxFTlRdLAorWworICBzYXZlZF9hc19lY2hvX249IiRhc19lY2hvX24iCisgIGFzX2VjaG9fbj0nOicKKyAgQUNfQ0FDSEVfVkFMKFskMV0sIFskMl0pCisgIGFzX2VjaG9fbj0iJHNhdmVkX2FzX2VjaG9fbiIKK10pCmRpZmYgLS1naXQgYS9tNC9nbnVsaWItY29tcC5tNCBiL200L2dudWxpYi1jb21wLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzOWI0YjAKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9nbnVsaWItY29tcC5tNApAQCAtMCwwICsxLDEzMTcgQEAKKyMgRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZIQorIyBDb3B5cmlnaHQgKEMpIDIwMDItMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIGZpbGUuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQKKyMgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjCisjIEdlbmVyYXRlZCBieSBnbnVsaWItdG9vbC4KKyMKKyMgVGhpcyBmaWxlIHJlcHJlc2VudHMgdGhlIGNvbXBpbGVkIHN1bW1hcnkgb2YgdGhlIHNwZWNpZmljYXRpb24gaW4KKyMgZ251bGliLWNhY2hlLm00LiBJdCBsaXN0cyB0aGUgY29tcHV0ZWQgbWFjcm8gaW52b2NhdGlvbnMgdGhhdCBuZWVkCisjIHRvIGJlIGludm9rZWQgZnJvbSBjb25maWd1cmUuYWMuCisjIEluIHByb2plY3RzIHRoYXQgdXNlIHZlcnNpb24gY29udHJvbCwgdGhpcyBmaWxlIGNhbiBiZSB0cmVhdGVkIGxpa2UKKyMgb3RoZXIgYnVpbHQgZmlsZXMuCisKKworIyBUaGlzIG1hY3JvIHNob3VsZCBiZSBpbnZva2VkIGZyb20gLi9jb25maWd1cmUuYWMsIGluIHRoZSBzZWN0aW9uCisjICJDaGVja3MgZm9yIHByb2dyYW1zIiwgcmlnaHQgYWZ0ZXIgQUNfUFJPR19DQywgYW5kIGNlcnRhaW5seSBiZWZvcmUKKyMgYW55IGNoZWNrcyBmb3IgbGlicmFyaWVzLCBoZWFkZXIgZmlsZXMsIHR5cGVzIGFuZCBsaWJyYXJ5IGZ1bmN0aW9ucy4KK0FDX0RFRlVOKFtnbF9FQVJMWV0sCitbCisgIG00X3BhdHRlcm5fZm9yYmlkKFteZ2xfW0EtWl1dKWRubCB0aGUgZ251bGliIG1hY3JvIG5hbWVzcGFjZQorICBtNF9wYXR0ZXJuX2FsbG93KFteZ2xfRVMkXSlkbmwgYSB2YWxpZCBsb2NhbGUgbmFtZQorICBtNF9wYXR0ZXJuX2FsbG93KFteZ2xfTElCT0JKUyRdKWRubCBhIHZhcmlhYmxlCisgIG00X3BhdHRlcm5fYWxsb3coW15nbF9MVExJQk9CSlMkXSlkbmwgYSB2YXJpYWJsZQorICBBQ19SRVFVSVJFKFtnbF9QUk9HX0FSX1JBTkxJQl0pCisgIEFDX1JFUVVJUkUoW0FNX1BST0dfQ0NfQ19PXSkKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGFsbG9jYS1vcHQ6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBhbm5vdW5jZS1nZW46CisgICMgQ29kZSBmcm9tIG1vZHVsZSBhcmdtYXRjaDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGFzc2VydDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGJpbmFyeS1pbzoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGJpdHJvdGF0ZToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGMtY3R5cGU6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBjLXN0cmNhc2U6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBjLXN0cmNhc2VlcToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGNhbGxvYy1wb3NpeDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGNsb2V4ZWM6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBjbG9zZToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGNsb3NlLXN0cmVhbToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGNsb3Nlb3V0OgorICAjIENvZGUgZnJvbSBtb2R1bGUgY29uZmlnLWg6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBjb25maWdtYWtlOgorICAjIENvZGUgZnJvbSBtb2R1bGUgZGlybmFtZToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGRpcm5hbWUtbGdwbDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGRvLXJlbGVhc2UtY29tbWl0LWFuZC10YWc6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBkb3NuYW1lOgorICAjIENvZGUgZnJvbSBtb2R1bGUgZG91YmxlLXNsYXNoLXJvb3Q6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBkdXAyOgorICAjIENvZGUgZnJvbSBtb2R1bGUgZW52aXJvbjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGVycm5vOgorICAjIENvZGUgZnJvbSBtb2R1bGUgZXJyb3I6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBleGl0ZmFpbDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGV4dGVuc2lvbnM6CisgIEFDX1JFUVVJUkUoW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10pCisgICMgQ29kZSBmcm9tIG1vZHVsZSBleHRlcm4taW5saW5lOgorICAjIENvZGUgZnJvbSBtb2R1bGUgZmF0YWwtc2lnbmFsOgorICAjIENvZGUgZnJvbSBtb2R1bGUgZmNudGw6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBmY250bC1oOgorICAjIENvZGUgZnJvbSBtb2R1bGUgZmQtaG9vazoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGZkLXNhZmVyLWZsYWc6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBmZGw6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBmbG9hdDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGZvcGVuOgorICAjIENvZGUgZnJvbSBtb2R1bGUgZm9wZW4tc2FmZXI6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBmcGVuZGluZzoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGZwaWVlZToKKyAgQUNfUkVRVUlSRShbZ2xfRlBfSUVFRV0pCisgICMgQ29kZSBmcm9tIG1vZHVsZSBmcHJpbnRmLXBvc2l4OgorICAjIENvZGUgZnJvbSBtb2R1bGUgZnB1Y3c6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBmcmV4cC1ub2xpYm06CisgICMgQ29kZSBmcm9tIG1vZHVsZSBmcmV4cGwtbm9saWJtOgorICAjIENvZGUgZnJvbSBtb2R1bGUgZnNldGVycjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGZzdGF0OgorICAjIENvZGUgZnJvbSBtb2R1bGUgZ2VuZG9jczoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGdldGRlbGltOgorICAjIENvZGUgZnJvbSBtb2R1bGUgZ2V0ZHRhYmxlc2l6ZToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGdldGxpbmU6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBnZXRvcHQtZ251OgorICAjIENvZGUgZnJvbSBtb2R1bGUgZ2V0b3B0LXBvc2l4OgorICAjIENvZGUgZnJvbSBtb2R1bGUgZ2V0dGV4dDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGdldHRleHQtaDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGdpdC12ZXJzaW9uLWdlbjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGdpdGxvZy10by1jaGFuZ2Vsb2c6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBnbnUtd2ViLWRvYy11cGRhdGU6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBnbnVtYWtlZmlsZToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGdudXBsb2FkOgorICAjIENvZGUgZnJvbSBtb2R1bGUgZ3BsLTMuMDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGhhc2g6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBoYXZlbGliOgorICAjIENvZGUgZnJvbSBtb2R1bGUgaW5jbHVkZV9uZXh0OgorICAjIENvZGUgZnJvbSBtb2R1bGUgaW50cHJvcHM6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBpbnR0eXBlczoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGludHR5cGVzLWluY29tcGxldGU6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBpc25hbjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGlzbmFuZDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGlzbmFuZC1ub2xpYm06CisgICMgQ29kZSBmcm9tIG1vZHVsZSBpc25hbmY6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBpc25hbmYtbm9saWJtOgorICAjIENvZGUgZnJvbSBtb2R1bGUgaXNuYW5sOgorICAjIENvZGUgZnJvbSBtb2R1bGUgaXNuYW5sLW5vbGlibToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGlzd2JsYW5rOgorICAjIENvZGUgZnJvbSBtb2R1bGUgamF2YWNvbXAtc2NyaXB0OgorICAjIENvZGUgZnJvbSBtb2R1bGUgamF2YWV4ZWMtc2NyaXB0OgorICAjIENvZGUgZnJvbSBtb2R1bGUgbGFyZ2VmaWxlOgorICBBQ19SRVFVSVJFKFtBQ19TWVNfTEFSR0VGSUxFXSkKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGxkZXhwOgorICAjIENvZGUgZnJvbSBtb2R1bGUgbGRleHBsOgorICAjIENvZGUgZnJvbSBtb2R1bGUgbG9jYWxjaGFyc2V0OgorICAjIENvZGUgZnJvbSBtb2R1bGUgbG9jazoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIG1haW50YWluZXItbWFrZWZpbGU6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBtYWxsb2MtZ251OgorICAjIENvZGUgZnJvbSBtb2R1bGUgbWFsbG9jLXBvc2l4OgorICAjIENvZGUgZnJvbSBtb2R1bGUgbWF0aDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIG1iY2hhcjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIG1icnRvd2M6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBtYnNjaHI6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBtYnNpbml0OgorICAjIENvZGUgZnJvbSBtb2R1bGUgbWJzcmNocjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIG1ic3dpZHRoOgorICAjIENvZGUgZnJvbSBtb2R1bGUgbWJ1aXRlcjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIG1lbWNocjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIG1zdmMtaW52YWw6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBtc3ZjLW5vdGhyb3c6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBtdWx0aWFyY2g6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBub2NyYXNoOgorICAjIENvZGUgZnJvbSBtb2R1bGUgb2JzdGFjazoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIG9ic3RhY2stcHJpbnRmOgorICAjIENvZGUgZnJvbSBtb2R1bGUgb3BlbjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHBhdGhtYXg6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBwZXJyb3I6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBwaXBlMjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHBpcGUyLXNhZmVyOgorICAjIENvZGUgZnJvbSBtb2R1bGUgcG9zaXhfc3Bhd24taW50ZXJuYWw6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2U6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkZHVwMjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuOgorICAjIENvZGUgZnJvbSBtb2R1bGUgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3k6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfaW5pdDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHBvc2l4X3NwYXduYXR0cl9kZXN0cm95OgorICAjIENvZGUgZnJvbSBtb2R1bGUgcG9zaXhfc3Bhd25hdHRyX2luaXQ6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBwb3NpeF9zcGF3bmF0dHJfc2V0ZmxhZ3M6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBwb3NpeF9zcGF3bmF0dHJfc2V0c2lnbWFzazoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHBvc2l4X3NwYXducDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHByaW50Zi1mcmV4cDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHByaW50Zi1mcmV4cGw6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBwcmludGYtcG9zaXg6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBwcmludGYtc2FmZToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHByb2duYW1lOgorICAjIENvZGUgZnJvbSBtb2R1bGUgcXVvdGU6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBxdW90ZWFyZzoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHF1b3RlYXJnLXNpbXBsZToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHJhaXNlOgorICAjIENvZGUgZnJvbSBtb2R1bGUgcmF3bWVtY2hyOgorICAjIENvZGUgZnJvbSBtb2R1bGUgcmVhZG1lLXJlbGVhc2U6CisgICMgQ29kZSBmcm9tIG1vZHVsZSByZWFsbG9jLXBvc2l4OgorICAjIENvZGUgZnJvbSBtb2R1bGUgc2NoZWQ6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzaWdhY3Rpb246CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzaWduYWwtaDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHNpZ25iaXQ6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzaWdwcm9jbWFzazoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHNpemVfbWF4OgorICAjIENvZGUgZnJvbSBtb2R1bGUgc25pcHBldC9fTm9yZXR1cm46CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzbmlwcGV0L2FyZy1ub25udWxsOgorICAjIENvZGUgZnJvbSBtb2R1bGUgc25pcHBldC9jKytkZWZzOgorICAjIENvZGUgZnJvbSBtb2R1bGUgc25pcHBldC93YXJuLW9uLXVzZToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHNucHJpbnRmOgorICAjIENvZGUgZnJvbSBtb2R1bGUgc25wcmludGYtcG9zaXg6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzcGF3bjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHNwYXduLXBpcGU6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzcHJpbnRmLXBvc2l4OgorICAjIENvZGUgZnJvbSBtb2R1bGUgc3NpemVfdDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHN0YXQ6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzdGRib29sOgorICAjIENvZGUgZnJvbSBtb2R1bGUgc3RkZGVmOgorICAjIENvZGUgZnJvbSBtb2R1bGUgc3RkaW50OgorICAjIENvZGUgZnJvbSBtb2R1bGUgc3RkaW86CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzdGRsaWI6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzdHBjcHk6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJjaHJudWw6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJkdXAtcG9zaXg6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJlcToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHN0cmVycm9yOgorICAjIENvZGUgZnJvbSBtb2R1bGUgc3RyZXJyb3Itb3ZlcnJpZGU6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJlcnJvcl9yLXBvc2l4OgorICAjIENvZGUgZnJvbSBtb2R1bGUgc3RyaW5nOgorICAjIENvZGUgZnJvbSBtb2R1bGUgc3RybmR1cDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHN0cm5sZW46CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJubGVuMToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHN0cnRvdWw6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJ2ZXJzY21wOgorICAjIENvZGUgZnJvbSBtb2R1bGUgc3lzX3N0YXQ6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzeXNfdHlwZXM6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBzeXNfd2FpdDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHRocmVhZGxpYjoKKyAgZ2xfVEhSRUFETElCX0VBUkxZCisgICMgQ29kZSBmcm9tIG1vZHVsZSB0aW1lOgorICAjIENvZGUgZnJvbSBtb2R1bGUgdW5pc3RkOgorICAjIENvZGUgZnJvbSBtb2R1bGUgdW5pc3RkLXNhZmVyOgorICAjIENvZGUgZnJvbSBtb2R1bGUgdW5pdHlwZXM6CisgICMgQ29kZSBmcm9tIG1vZHVsZSB1bml3aWR0aC9iYXNlOgorICAjIENvZGUgZnJvbSBtb2R1bGUgdW5pd2lkdGgvd2lkdGg6CisgICMgQ29kZSBmcm9tIG1vZHVsZSB1bmxvY2tlZC1pbzoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHVuc2V0ZW52OgorICAjIENvZGUgZnJvbSBtb2R1bGUgdXBkYXRlLWNvcHlyaWdodDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHVzZWxlc3MtaWYtYmVmb3JlLWZyZWU6CisgICMgQ29kZSBmcm9tIG1vZHVsZSB2YXNucHJpbnRmOgorICAjIENvZGUgZnJvbSBtb2R1bGUgdmMtbGlzdC1maWxlczoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHZlcmlmeToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHZmcHJpbnRmLXBvc2l4OgorICAjIENvZGUgZnJvbSBtb2R1bGUgdnNucHJpbnRmOgorICAjIENvZGUgZnJvbSBtb2R1bGUgdnNucHJpbnRmLXBvc2l4OgorICAjIENvZGUgZnJvbSBtb2R1bGUgdnNwcmludGYtcG9zaXg6CisgICMgQ29kZSBmcm9tIG1vZHVsZSB3YWl0LXByb2Nlc3M6CisgICMgQ29kZSBmcm9tIG1vZHVsZSB3YWl0cGlkOgorICAjIENvZGUgZnJvbSBtb2R1bGUgd2FybmluZ3M6CisgICMgQ29kZSBmcm9tIG1vZHVsZSB3Y2hhcjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHdjdHlwZS1oOgorICAjIENvZGUgZnJvbSBtb2R1bGUgd2N3aWR0aDoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHhhbGxvYzoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHhhbGxvYy1kaWU6CisgICMgQ29kZSBmcm9tIG1vZHVsZSB4YWxsb2Mtb3ZlcnNpemVkOgorICAjIENvZGUgZnJvbSBtb2R1bGUgeG1lbWR1cDA6CisgICMgQ29kZSBmcm9tIG1vZHVsZSB4c2l6ZToKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHhzdHJuZHVwOgorXSkKKworIyBUaGlzIG1hY3JvIHNob3VsZCBiZSBpbnZva2VkIGZyb20gLi9jb25maWd1cmUuYWMsIGluIHRoZSBzZWN0aW9uCisjICJDaGVjayBmb3IgaGVhZGVyIGZpbGVzLCB0eXBlcyBhbmQgbGlicmFyeSBmdW5jdGlvbnMiLgorQUNfREVGVU4oW2dsX0lOSVRdLAorWworICBBTV9DT05ESVRJT05BTChbR0xfQ09ORF9MSUJUT09MXSwgW2ZhbHNlXSkKKyAgZ2xfY29uZF9saWJ0b29sPWZhbHNlCisgIGdsX2xpYmRlcHM9CisgIGdsX2x0bGliZGVwcz0KKyAgZ2xfbTRfYmFzZT0nbTQnCisgIG00X3B1c2hkZWYoW0FDX0xJQk9CSl0sIG00X2RlZm4oW2dsX0xJQk9CSl0pKQorICBtNF9wdXNoZGVmKFtBQ19SRVBMQUNFX0ZVTkNTXSwgbTRfZGVmbihbZ2xfUkVQTEFDRV9GVU5DU10pKQorICBtNF9wdXNoZGVmKFtBQ19MSUJTT1VSQ0VTXSwgbTRfZGVmbihbZ2xfTElCU09VUkNFU10pKQorICBtNF9wdXNoZGVmKFtnbF9MSUJTT1VSQ0VTX0xJU1RdLCBbXSkKKyAgbTRfcHVzaGRlZihbZ2xfTElCU09VUkNFU19ESVJdLCBbXSkKKyAgZ2xfQ09NTU9OCisgIGdsX3NvdXJjZV9iYXNlPSdsaWInCisgIGdsX0ZVTkNfQUxMT0NBCisgIGdsX0FTU0VSVAorICBnbF9GVU5DX0NBTExPQ19QT1NJWAorICBpZiB0ZXN0ICRSRVBMQUNFX0NBTExPQyA9IDE7IHRoZW4KKyAgICBBQ19MSUJPQkooW2NhbGxvY10pCisgIGZpCisgIGdsX1NURExJQl9NT0RVTEVfSU5ESUNBVE9SKFtjYWxsb2MtcG9zaXhdKQorICBnbF9NT0RVTEVfSU5ESUNBVE9SX0ZPUl9URVNUUyhbY2xvZXhlY10pCisgIGdsX0ZVTkNfQ0xPU0UKKyAgaWYgdGVzdCAkUkVQTEFDRV9DTE9TRSA9IDE7IHRoZW4KKyAgICBBQ19MSUJPQkooW2Nsb3NlXSkKKyAgZmkKKyAgZ2xfVU5JU1REX01PRFVMRV9JTkRJQ0FUT1IoW2Nsb3NlXSkKKyAgZ2xfQ0xPU0VfU1RSRUFNCisgIGdsX01PRFVMRV9JTkRJQ0FUT1IoW2Nsb3NlLXN0cmVhbV0pCisgIGdsX0NMT1NFT1VUCisgIGdsX0NPTkZJR19ICisgIGdsX0NPTkZJR01BS0VfUFJFUAorICBnbF9ESVJOQU1FCisgIGdsX01PRFVMRV9JTkRJQ0FUT1IoW2Rpcm5hbWVdKQorICBnbF9ESVJOQU1FX0xHUEwKKyAgZ2xfRE9VQkxFX1NMQVNIX1JPT1QKKyAgZ2xfRlVOQ19EVVAyCisgIGlmIHRlc3QgJEhBVkVfRFVQMiA9IDAgfHwgdGVzdCAkUkVQTEFDRV9EVVAyID0gMTsgdGhlbgorICAgIEFDX0xJQk9CSihbZHVwMl0pCisgICAgZ2xfUFJFUkVRX0RVUDIKKyAgZmkKKyAgZ2xfVU5JU1REX01PRFVMRV9JTkRJQ0FUT1IoW2R1cDJdKQorICBnbF9FTlZJUk9OCisgIGdsX1VOSVNURF9NT0RVTEVfSU5ESUNBVE9SKFtlbnZpcm9uXSkKKyAgZ2xfSEVBREVSX0VSUk5PX0gKKyAgZ2xfRVJST1IKKyAgaWYgdGVzdCAkYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmUgPSBubzsgdGhlbgorICAgIEFDX0xJQk9CSihbZXJyb3JdKQorICAgIGdsX1BSRVJFUV9FUlJPUgorICBmaQorICBtNF9pZmRlZihbQU1fWEdFVFRFWFRfT1BUSU9OXSwKKyAgICBbQU1fXVtYR0VUVEVYVF9PUFRJT04oWy0tZmxhZz1lcnJvcjozOmMtZm9ybWF0XSkKKyAgICAgQU1fXVtYR0VUVEVYVF9PUFRJT04oWy0tZmxhZz1lcnJvcl9hdF9saW5lOjU6Yy1mb3JtYXRdKV0pCisgIEFDX1JFUVVJUkUoW2dsX0VYVEVSTl9JTkxJTkVdKQorICBnbF9GQVRBTF9TSUdOQUwKKyAgZ2xfRlVOQ19GQ05UTAorICBpZiB0ZXN0ICRIQVZFX0ZDTlRMID0gMCB8fCB0ZXN0ICRSRVBMQUNFX0ZDTlRMID0gMTsgdGhlbgorICAgIEFDX0xJQk9CSihbZmNudGxdKQorICBmaQorICBnbF9GQ05UTF9NT0RVTEVfSU5ESUNBVE9SKFtmY250bF0pCisgIGdsX0ZDTlRMX0gKKyAgZ2xfTU9EVUxFX0lORElDQVRPUihbZmQtc2FmZXItZmxhZ10pCisgIGdsX0ZMT0FUX0gKKyAgaWYgdGVzdCAkUkVQTEFDRV9GTE9BVF9MREJMID0gMTsgdGhlbgorICAgIEFDX0xJQk9CSihbZmxvYXRdKQorICBmaQorICBpZiB0ZXN0ICRSRVBMQUNFX0lUT0xEID0gMTsgdGhlbgorICAgIEFDX0xJQk9CSihbaXRvbGRdKQorICBmaQorICBnbF9GVU5DX0ZPUEVOCisgIGlmIHRlc3QgJFJFUExBQ0VfRk9QRU4gPSAxOyB0aGVuCisgICAgQUNfTElCT0JKKFtmb3Blbl0pCisgICAgZ2xfUFJFUkVRX0ZPUEVOCisgIGZpCisgIGdsX1NURElPX01PRFVMRV9JTkRJQ0FUT1IoW2ZvcGVuXSkKKyAgZ2xfTU9EVUxFX0lORElDQVRPUihbZm9wZW4tc2FmZXJdKQorICBnbF9GVU5DX0ZQRU5ESU5HCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfX19mcGVuZGluZyA9IG5vOyB0aGVuCisgICAgQUNfTElCT0JKKFtmcGVuZGluZ10pCisgICAgZ2xfUFJFUkVRX0ZQRU5ESU5HCisgIGZpCisgIGdsX0ZVTkNfRlBSSU5URl9QT1NJWAorICBnbF9TVERJT19NT0RVTEVfSU5ESUNBVE9SKFtmcHJpbnRmLXBvc2l4XSkKKyAgZ2xfRlVOQ19GUkVYUF9OT19MSUJNCisgIGlmIHRlc3QgJGdsX2Z1bmNfZnJleHBfbm9fbGlibSAhPSB5ZXM7IHRoZW4KKyAgICBBQ19MSUJPQkooW2ZyZXhwXSkKKyAgZmkKKyAgZ2xfTUFUSF9NT0RVTEVfSU5ESUNBVE9SKFtmcmV4cF0pCisgIGdsX0ZVTkNfRlJFWFBMX05PX0xJQk0KKyAgaWYgdGVzdCAkSEFWRV9ERUNMX0ZSRVhQTCA9IDAgfHwgdGVzdCAkZ2xfZnVuY19mcmV4cGxfbm9fbGlibSA9IG5vOyB0aGVuCisgICAgQUNfTElCT0JKKFtmcmV4cGxdKQorICBmaQorICBnbF9NQVRIX01PRFVMRV9JTkRJQ0FUT1IoW2ZyZXhwbF0pCisgIGdsX0ZVTkNfRlNFVEVSUgorICBpZiB0ZXN0ICRhY19jdl9mdW5jX19fZnNldGVyciA9IG5vOyB0aGVuCisgICAgQUNfTElCT0JKKFtmc2V0ZXJyXSkKKyAgZmkKKyAgZ2xfRlVOQ19GU1RBVAorICBpZiB0ZXN0ICRSRVBMQUNFX0ZTVEFUID0gMTsgdGhlbgorICAgIEFDX0xJQk9CSihbZnN0YXRdKQorICAgIGdsX1BSRVJFUV9GU1RBVAorICBmaQorICBnbF9TWVNfU1RBVF9NT0RVTEVfSU5ESUNBVE9SKFtmc3RhdF0pCisgIGdsX0ZVTkNfR0VUREVMSU0KKyAgaWYgdGVzdCAkSEFWRV9HRVRERUxJTSA9IDAgfHwgdGVzdCAkUkVQTEFDRV9HRVRERUxJTSA9IDE7IHRoZW4KKyAgICBBQ19MSUJPQkooW2dldGRlbGltXSkKKyAgICBnbF9QUkVSRVFfR0VUREVMSU0KKyAgZmkKKyAgZ2xfU1RESU9fTU9EVUxFX0lORElDQVRPUihbZ2V0ZGVsaW1dKQorICBnbF9GVU5DX0dFVERUQUJMRVNJWkUKKyAgaWYgdGVzdCAkSEFWRV9HRVREVEFCTEVTSVpFID0gMDsgdGhlbgorICAgIEFDX0xJQk9CSihbZ2V0ZHRhYmxlc2l6ZV0pCisgICAgZ2xfUFJFUkVRX0dFVERUQUJMRVNJWkUKKyAgZmkKKyAgZ2xfVU5JU1REX01PRFVMRV9JTkRJQ0FUT1IoW2dldGR0YWJsZXNpemVdKQorICBnbF9GVU5DX0dFVExJTkUKKyAgaWYgdGVzdCAkUkVQTEFDRV9HRVRMSU5FID0gMTsgdGhlbgorICAgIEFDX0xJQk9CSihbZ2V0bGluZV0pCisgICAgZ2xfUFJFUkVRX0dFVExJTkUKKyAgZmkKKyAgZ2xfU1RESU9fTU9EVUxFX0lORElDQVRPUihbZ2V0bGluZV0pCisgIGdsX0ZVTkNfR0VUT1BUX0dOVQorICBpZiB0ZXN0ICRSRVBMQUNFX0dFVE9QVCA9IDE7IHRoZW4KKyAgICBBQ19MSUJPQkooW2dldG9wdF0pCisgICAgQUNfTElCT0JKKFtnZXRvcHQxXSkKKyAgICBnbF9QUkVSRVFfR0VUT1BUCisgICAgZG5sIEFycmFuZ2UgZm9yIHVuaXN0ZC5oIHRvIGluY2x1ZGUgZ2V0b3B0LmguCisgICAgR05VTElCX0dMX1VOSVNURF9IX0dFVE9QVD0xCisgIGZpCisgIEFDX1NVQlNUKFtHTlVMSUJfR0xfVU5JU1REX0hfR0VUT1BUXSkKKyAgZ2xfTU9EVUxFX0lORElDQVRPUl9GT1JfVEVTVFMoW2dldG9wdC1nbnVdKQorICBnbF9GVU5DX0dFVE9QVF9QT1NJWAorICBpZiB0ZXN0ICRSRVBMQUNFX0dFVE9QVCA9IDE7IHRoZW4KKyAgICBBQ19MSUJPQkooW2dldG9wdF0pCisgICAgQUNfTElCT0JKKFtnZXRvcHQxXSkKKyAgICBnbF9QUkVSRVFfR0VUT1BUCisgICAgZG5sIEFycmFuZ2UgZm9yIHVuaXN0ZC5oIHRvIGluY2x1ZGUgZ2V0b3B0LmguCisgICAgR05VTElCX0dMX1VOSVNURF9IX0dFVE9QVD0xCisgIGZpCisgIEFDX1NVQlNUKFtHTlVMSUJfR0xfVU5JU1REX0hfR0VUT1BUXSkKKyAgZG5sIHlvdSBtdXN0IGFkZCBBTV9HTlVfR0VUVEVYVChbZXh0ZXJuYWxdKSBvciBzaW1pbGFyIHRvIGNvbmZpZ3VyZS5hYy4KKyAgQU1fR05VX0dFVFRFWFRfVkVSU0lPTihbMC4xOC4xXSkKKyAgQUNfU1VCU1QoW0xJQklOVExdKQorICBBQ19TVUJTVChbTFRMSUJJTlRMXSkKKyAgIyBBdXRvY29uZiAyLjYxYS45OSBhbmQgZWFybGllciBkb24ndCBzdXBwb3J0IGxpbmtpbmcgYSBmaWxlIG9ubHkKKyAgIyBpbiBWUEFUSCBidWlsZHMuICBCdXQgc2luY2UgR05VbWFrZWZpbGUgaXMgZm9yIG1haW50YWluZXIgdXNlCisgICMgb25seSwgaXQgZG9lcyBub3QgbWF0dGVyIGlmIHdlIHNraXAgdGhlIGxpbmsgd2l0aCBvbGRlciBhdXRvY29uZi4KKyAgIyBBdXRvbWFrZSAxLjEwLjEgYW5kIGVhcmxpZXIgdHJ5IHRvIHJlbW92ZSBHTlVtYWtlZmlsZSBpbiBub24tVlBBVEgKKyAgIyBidWlsZHMsIHNvIHVzZSBhIHNoZWxsIHZhcmlhYmxlIHRvIGJ5cGFzcyB0aGlzLgorICBHTlVtYWtlZmlsZT1HTlVtYWtlZmlsZQorICBtNF9pZihtNF92ZXJzaW9uX2NvbXBhcmUoWzIuNjFhLjEwMF0sCisgICAgICAgICAgbTRfZGVmbihbbTRfUEFDS0FHRV9WRVJTSU9OXSkpLCBbMV0sIFtdLAorICAgICAgICBbQUNfQ09ORklHX0xJTktTKFskR05VbWFrZWZpbGU6JEdOVW1ha2VmaWxlXSwgW10sCisgICAgICAgICAgW0dOVW1ha2VmaWxlPSRHTlVtYWtlZmlsZV0pXSkKKyAgZ2xfSU5UVFlQRVNfSAorICBnbF9JTlRUWVBFU19JTkNPTVBMRVRFCisgIGdsX0lTTkFOCisgIGdsX01BVEhfTU9EVUxFX0lORElDQVRPUihbaXNuYW5dKQorICBnbF9GVU5DX0lTTkFORAorICBtNF9pZmRlZihbZ2xfSVNOQU5dLCBbCisgICAgQUNfUkVRVUlSRShbZ2xfSVNOQU5dKQorICBdKQorICBpZiB0ZXN0ICRIQVZFX0lTTkFORCA9IDAgfHwgdGVzdCAkUkVQTEFDRV9JU05BTiA9IDE7IHRoZW4KKyAgICBBQ19MSUJPQkooW2lzbmFuZF0pCisgICAgZ2xfUFJFUkVRX0lTTkFORAorICBmaQorICBnbF9NQVRIX01PRFVMRV9JTkRJQ0FUT1IoW2lzbmFuZF0pCisgIGdsX0ZVTkNfSVNOQU5EX05PX0xJQk0KKyAgaWYgdGVzdCAkZ2xfZnVuY19pc25hbmRfbm9fbGlibSAhPSB5ZXM7IHRoZW4KKyAgICBBQ19MSUJPQkooW2lzbmFuZF0pCisgICAgZ2xfUFJFUkVRX0lTTkFORAorICBmaQorICBnbF9GVU5DX0lTTkFORgorICBtNF9pZmRlZihbZ2xfSVNOQU5dLCBbCisgICAgQUNfUkVRVUlSRShbZ2xfSVNOQU5dKQorICBdKQorICBpZiB0ZXN0ICRIQVZFX0lTTkFORiA9IDAgfHwgdGVzdCAkUkVQTEFDRV9JU05BTiA9IDE7IHRoZW4KKyAgICBBQ19MSUJPQkooW2lzbmFuZl0pCisgICAgZ2xfUFJFUkVRX0lTTkFORgorICBmaQorICBnbF9NQVRIX01PRFVMRV9JTkRJQ0FUT1IoW2lzbmFuZl0pCisgIGdsX0ZVTkNfSVNOQU5GX05PX0xJQk0KKyAgaWYgdGVzdCAkZ2xfZnVuY19pc25hbmZfbm9fbGlibSAhPSB5ZXM7IHRoZW4KKyAgICBBQ19MSUJPQkooW2lzbmFuZl0pCisgICAgZ2xfUFJFUkVRX0lTTkFORgorICBmaQorICBnbF9GVU5DX0lTTkFOTAorICBtNF9pZmRlZihbZ2xfSVNOQU5dLCBbCisgICAgQUNfUkVRVUlSRShbZ2xfSVNOQU5dKQorICBdKQorICBpZiB0ZXN0ICRIQVZFX0lTTkFOTCA9IDAgfHwgdGVzdCAkUkVQTEFDRV9JU05BTiA9IDE7IHRoZW4KKyAgICBBQ19MSUJPQkooW2lzbmFubF0pCisgICAgZ2xfUFJFUkVRX0lTTkFOTAorICBmaQorICBnbF9NQVRIX01PRFVMRV9JTkRJQ0FUT1IoW2lzbmFubF0pCisgIGdsX0ZVTkNfSVNOQU5MX05PX0xJQk0KKyAgaWYgdGVzdCAkZ2xfZnVuY19pc25hbmxfbm9fbGlibSAhPSB5ZXM7IHRoZW4KKyAgICBBQ19MSUJPQkooW2lzbmFubF0pCisgICAgZ2xfUFJFUkVRX0lTTkFOTAorICBmaQorICBnbF9GVU5DX0lTV0JMQU5LCisgIGlmIHRlc3QgJEhBVkVfSVNXQ05UUkwgPSAwIHx8IHRlc3QgJFJFUExBQ0VfSVNXQ05UUkwgPSAxOyB0aGVuCisgICAgOgorICBlbHNlCisgICAgaWYgdGVzdCAkSEFWRV9JU1dCTEFOSyA9IDAgfHwgdGVzdCAkUkVQTEFDRV9JU1dCTEFOSyA9IDE7IHRoZW4KKyAgICAgIEFDX0xJQk9CSihbaXN3YmxhbmtdKQorICAgIGZpCisgIGZpCisgIGdsX1dDVFlQRV9NT0RVTEVfSU5ESUNBVE9SKFtpc3dibGFua10pCisgICMgWW91IG5lZWQgdG8gaW52b2tlIGd0X0pBVkFDT01QIHlvdXJzZWxmLCBwb3NzaWJseSB3aXRoIGFyZ3VtZW50cy4KKyAgQUNfQ09ORklHX0ZJTEVTKFtqYXZhY29tcC5zaDpidWlsZC1hdXgvamF2YWNvbXAuc2guaW5dKQorICAjIFlvdSBuZWVkIHRvIGludm9rZSBndF9KQVZBRVhFQyB5b3Vyc2VsZiwgcG9zc2libHkgd2l0aCBhcmd1bWVudHMuCisgIEFDX0NPTkZJR19GSUxFUyhbamF2YWV4ZWMuc2g6YnVpbGQtYXV4L2phdmFleGVjLnNoLmluXSkKKyAgQUNfUkVRVUlSRShbZ2xfTEFSR0VGSUxFXSkKKyAgZ2xfRlVOQ19MREVYUAorICBnbF9GVU5DX0xERVhQTAorICBpZiB0ZXN0ICRIQVZFX0RFQ0xfTERFWFBMID0gMCB8fCB0ZXN0ICRnbF9mdW5jX2xkZXhwbCA9IG5vOyB0aGVuCisgICAgQUNfTElCT0JKKFtsZGV4cGxdKQorICBmaQorICBnbF9NQVRIX01PRFVMRV9JTkRJQ0FUT1IoW2xkZXhwbF0pCisgIGdsX0xPQ0FMQ0hBUlNFVAorICBMT0NBTENIQVJTRVRfVEVTVFNfRU5WSVJPTk1FTlQ9IkNIQVJTRVRBTElBU0RJUj1cIlwkKGFic190b3BfYnVpbGRkaXIpLyRnbF9zb3VyY2VfYmFzZVwiIgorICBBQ19TVUJTVChbTE9DQUxDSEFSU0VUX1RFU1RTX0VOVklST05NRU5UXSkKKyAgZ2xfTE9DSworICBBQ19DT05GSUdfQ09NTUFORFNfUFJFKFttNF9pZmRlZihbQUhfSEVBREVSXSwKKyAgICBbQUNfU1VCU1QoW0NPTkZJR19JTkNMVURFXSwgbTRfZGVmbihbQUhfSEVBREVSXSkpXSldKQorICBnbF9GVU5DX01BTExPQ19HTlUKKyAgaWYgdGVzdCAkUkVQTEFDRV9NQUxMT0MgPSAxOyB0aGVuCisgICAgQUNfTElCT0JKKFttYWxsb2NdKQorICBmaQorICBnbF9NT0RVTEVfSU5ESUNBVE9SKFttYWxsb2MtZ251XSkKKyAgZ2xfRlVOQ19NQUxMT0NfUE9TSVgKKyAgaWYgdGVzdCAkUkVQTEFDRV9NQUxMT0MgPSAxOyB0aGVuCisgICAgQUNfTElCT0JKKFttYWxsb2NdKQorICBmaQorICBnbF9TVERMSUJfTU9EVUxFX0lORElDQVRPUihbbWFsbG9jLXBvc2l4XSkKKyAgZ2xfTUFUSF9ICisgIGdsX01CQ0hBUgorICBnbF9GVU5DX01CUlRPV0MKKyAgaWYgdGVzdCAkSEFWRV9NQlJUT1dDID0gMCB8fCB0ZXN0ICRSRVBMQUNFX01CUlRPV0MgPSAxOyB0aGVuCisgICAgQUNfTElCT0JKKFttYnJ0b3djXSkKKyAgICBnbF9QUkVSRVFfTUJSVE9XQworICBmaQorICBnbF9XQ0hBUl9NT0RVTEVfSU5ESUNBVE9SKFttYnJ0b3djXSkKKyAgZ2xfU1RSSU5HX01PRFVMRV9JTkRJQ0FUT1IoW21ic2Nocl0pCisgIGdsX0ZVTkNfTUJTSU5JVAorICBpZiB0ZXN0ICRIQVZFX01CU0lOSVQgPSAwIHx8IHRlc3QgJFJFUExBQ0VfTUJTSU5JVCA9IDE7IHRoZW4KKyAgICBBQ19MSUJPQkooW21ic2luaXRdKQorICAgIGdsX1BSRVJFUV9NQlNJTklUCisgIGZpCisgIGdsX1dDSEFSX01PRFVMRV9JTkRJQ0FUT1IoW21ic2luaXRdKQorICBnbF9TVFJJTkdfTU9EVUxFX0lORElDQVRPUihbbWJzcmNocl0pCisgIGdsX01CU1dJRFRICisgIGdsX01CSVRFUgorICBnbF9GVU5DX01FTUNIUgorICBpZiB0ZXN0ICRIQVZFX01FTUNIUiA9IDAgfHwgdGVzdCAkUkVQTEFDRV9NRU1DSFIgPSAxOyB0aGVuCisgICAgQUNfTElCT0JKKFttZW1jaHJdKQorICAgIGdsX1BSRVJFUV9NRU1DSFIKKyAgZmkKKyAgZ2xfU1RSSU5HX01PRFVMRV9JTkRJQ0FUT1IoW21lbWNocl0pCisgIGdsX01TVkNfSU5WQUwKKyAgaWYgdGVzdCAkSEFWRV9NU1ZDX0lOVkFMSURfUEFSQU1FVEVSX0hBTkRMRVIgPSAxOyB0aGVuCisgICAgQUNfTElCT0JKKFttc3ZjLWludmFsXSkKKyAgZmkKKyAgZ2xfTVNWQ19OT1RIUk9XCisgIGlmIHRlc3QgJEhBVkVfTVNWQ19JTlZBTElEX1BBUkFNRVRFUl9IQU5ETEVSID0gMTsgdGhlbgorICAgIEFDX0xJQk9CSihbbXN2Yy1ub3Rocm93XSkKKyAgZmkKKyAgZ2xfTVVMVElBUkNICisgIEFDX0ZVTkNfT0JTVEFDSworICBkbmwgTm90ZTogQUNfRlVOQ19PQlNUQUNLIGRvZXMgQUNfTElCU09VUkNFUyhbb2JzdGFjay5oLCBvYnN0YWNrLmNdKS4KKyAgZ2xfRlVOQ19PQlNUQUNLX1BSSU5URgorICBpZiB0ZXN0ICRhY19jdl9mdW5jX29ic3RhY2tfcHJpbnRmID0gbm8gfHwgdGVzdCAkUkVQTEFDRV9PQlNUQUNLX1BSSU5URiA9IDE7IHRoZW4KKyAgICBBQ19MSUJPQkooW29ic3RhY2tfcHJpbnRmXSkKKyAgZmkKKyAgZ2xfU1RESU9fTU9EVUxFX0lORElDQVRPUihbb2JzdGFjay1wcmludGZdKQorICBnbF9GVU5DX09QRU4KKyAgaWYgdGVzdCAkUkVQTEFDRV9PUEVOID0gMTsgdGhlbgorICAgIEFDX0xJQk9CSihbb3Blbl0pCisgICAgZ2xfUFJFUkVRX09QRU4KKyAgZmkKKyAgZ2xfRkNOVExfTU9EVUxFX0lORElDQVRPUihbb3Blbl0pCisgIGdsX1BBVEhNQVgKKyAgZ2xfRlVOQ19QRVJST1IKKyAgaWYgdGVzdCAkUkVQTEFDRV9QRVJST1IgPSAxOyB0aGVuCisgICAgQUNfTElCT0JKKFtwZXJyb3JdKQorICBmaQorICBnbF9TVFJJTkdfTU9EVUxFX0lORElDQVRPUihbcGVycm9yXSkKKyAgZ2xfRlVOQ19QSVBFMgorICBnbF9VTklTVERfTU9EVUxFX0lORElDQVRPUihbcGlwZTJdKQorICBnbF9NT0RVTEVfSU5ESUNBVE9SKFtwaXBlMi1zYWZlcl0pCisgIGdsX0ZVTkNfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERENMT1NFCisgIGlmIHRlc3QgJEhBVkVfUE9TSVhfU1BBV04gPSAwIHx8IHRlc3QgJFJFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERENMT1NFID0gMTsgdGhlbgorICAgIEFDX0xJQk9CSihbc3Bhd25fZmFjdGlvbl9hZGRjbG9zZV0pCisgIGZpCisgIGdsX1NQQVdOX01PRFVMRV9JTkRJQ0FUT1IoW3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZV0pCisgIGdsX0ZVTkNfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDIKKyAgaWYgdGVzdCAkSEFWRV9QT1NJWF9TUEFXTiA9IDAgfHwgdGVzdCAkUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMiA9IDE7IHRoZW4KKyAgICBBQ19MSUJPQkooW3NwYXduX2ZhY3Rpb25fYWRkZHVwMl0pCisgIGZpCisgIGdsX1NQQVdOX01PRFVMRV9JTkRJQ0FUT1IoW3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyXSkKKyAgZ2xfRlVOQ19QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURET1BFTgorICBpZiB0ZXN0ICRIQVZFX1BPU0lYX1NQQVdOID0gMCB8fCB0ZXN0ICRSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERPUEVOID0gMTsgdGhlbgorICAgIEFDX0xJQk9CSihbc3Bhd25fZmFjdGlvbl9hZGRvcGVuXSkKKyAgZmkKKyAgZ2xfU1BBV05fTU9EVUxFX0lORElDQVRPUihbcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW5dKQorICBnbF9QT1NJWF9TUEFXTgorICBpZiB0ZXN0ICRIQVZFX1BPU0lYX1NQQVdOID0gMCB8fCB0ZXN0ICRSRVBMQUNFX1BPU0lYX1NQQVdOID0gMTsgdGhlbgorICAgIEFDX0xJQk9CSihbc3Bhd25fZmFjdGlvbl9kZXN0cm95XSkKKyAgZmkKKyAgZ2xfU1BBV05fTU9EVUxFX0lORElDQVRPUihbcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3ldKQorICBnbF9QT1NJWF9TUEFXTgorICBpZiB0ZXN0ICRIQVZFX1BPU0lYX1NQQVdOID0gMCB8fCB0ZXN0ICRSRVBMQUNFX1BPU0lYX1NQQVdOID0gMTsgdGhlbgorICAgIEFDX0xJQk9CSihbc3Bhd25fZmFjdGlvbl9pbml0XSkKKyAgZmkKKyAgZ2xfU1BBV05fTU9EVUxFX0lORElDQVRPUihbcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2luaXRdKQorICBnbF9QT1NJWF9TUEFXTgorICBpZiB0ZXN0ICRIQVZFX1BPU0lYX1NQQVdOID0gMCB8fCB0ZXN0ICRSRVBMQUNFX1BPU0lYX1NQQVdOID0gMTsgdGhlbgorICAgIEFDX0xJQk9CSihbc3Bhd25hdHRyX2Rlc3Ryb3ldKQorICBmaQorICBnbF9TUEFXTl9NT0RVTEVfSU5ESUNBVE9SKFtwb3NpeF9zcGF3bmF0dHJfZGVzdHJveV0pCisgIGdsX1BPU0lYX1NQQVdOCisgIGlmIHRlc3QgJEhBVkVfUE9TSVhfU1BBV04gPSAwIHx8IHRlc3QgJFJFUExBQ0VfUE9TSVhfU1BBV04gPSAxOyB0aGVuCisgICAgQUNfTElCT0JKKFtzcGF3bmF0dHJfaW5pdF0pCisgIGZpCisgIGdsX1NQQVdOX01PRFVMRV9JTkRJQ0FUT1IoW3Bvc2l4X3NwYXduYXR0cl9pbml0XSkKKyAgZ2xfUE9TSVhfU1BBV04KKyAgaWYgdGVzdCAkSEFWRV9QT1NJWF9TUEFXTiA9IDAgfHwgdGVzdCAkUkVQTEFDRV9QT1NJWF9TUEFXTiA9IDE7IHRoZW4KKyAgICBBQ19MSUJPQkooW3NwYXduYXR0cl9zZXRmbGFnc10pCisgIGZpCisgIGdsX1NQQVdOX01PRFVMRV9JTkRJQ0FUT1IoW3Bvc2l4X3NwYXduYXR0cl9zZXRmbGFnc10pCisgIGdsX1BPU0lYX1NQQVdOCisgIGlmIHRlc3QgJEhBVkVfUE9TSVhfU1BBV04gPSAwIHx8IHRlc3QgJFJFUExBQ0VfUE9TSVhfU1BBV04gPSAxOyB0aGVuCisgICAgQUNfTElCT0JKKFtzcGF3bmF0dHJfc2V0c2lnbWFza10pCisgIGZpCisgIGdsX1NQQVdOX01PRFVMRV9JTkRJQ0FUT1IoW3Bvc2l4X3NwYXduYXR0cl9zZXRzaWdtYXNrXSkKKyAgZ2xfUE9TSVhfU1BBV04KKyAgaWYgdGVzdCAkSEFWRV9QT1NJWF9TUEFXTiA9IDAgfHwgdGVzdCAkUkVQTEFDRV9QT1NJWF9TUEFXTiA9IDE7IHRoZW4KKyAgICBBQ19MSUJPQkooW3NwYXducF0pCisgICAgQUNfTElCT0JKKFtzcGF3bmldKQorICAgIGdsX1BSRVJFUV9QT1NJWF9TUEFXTl9JTlRFUk5BTAorICBmaQorICBnbF9TUEFXTl9NT0RVTEVfSU5ESUNBVE9SKFtwb3NpeF9zcGF3bnBdKQorICBnbF9GVU5DX1BSSU5URl9GUkVYUAorICBnbF9GVU5DX1BSSU5URl9GUkVYUEwKKyAgZ2xfRlVOQ19QUklOVEZfUE9TSVgKKyAgZ2xfU1RESU9fTU9EVUxFX0lORElDQVRPUihbcHJpbnRmLXBvc2l4XSkKKyAgbTRfZGl2ZXJ0X3RleHQoW0lOSVRfUFJFUEFSRV0sIFtnbF9wcmludGZfc2FmZT15ZXNdKQorICBBQ19DSEVDS19ERUNMUyhbcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWVdLCBbXSwgW10sIFsjaW5jbHVkZSA8ZXJybm8uaD5dKQorICBBQ19DSEVDS19ERUNMUyhbcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWVdLCBbXSwgW10sIFsjaW5jbHVkZSA8ZXJybm8uaD5dKQorICBnbF9RVU9URQorICBnbF9RVU9URUFSRworICBnbF9GVU5DX1JBSVNFCisgIGlmIHRlc3QgJEhBVkVfUkFJU0UgPSAwIHx8IHRlc3QgJFJFUExBQ0VfUkFJU0UgPSAxOyB0aGVuCisgICAgQUNfTElCT0JKKFtyYWlzZV0pCisgICAgZ2xfUFJFUkVRX1JBSVNFCisgIGZpCisgIGdsX1NJR05BTF9NT0RVTEVfSU5ESUNBVE9SKFtyYWlzZV0pCisgIGdsX0ZVTkNfUkFXTUVNQ0hSCisgIGlmIHRlc3QgJEhBVkVfUkFXTUVNQ0hSID0gMDsgdGhlbgorICAgIEFDX0xJQk9CSihbcmF3bWVtY2hyXSkKKyAgICBnbF9QUkVSRVFfUkFXTUVNQ0hSCisgIGZpCisgIGdsX1NUUklOR19NT0RVTEVfSU5ESUNBVE9SKFtyYXdtZW1jaHJdKQorICBnbF9GVU5DX1JFQUxMT0NfUE9TSVgKKyAgaWYgdGVzdCAkUkVQTEFDRV9SRUFMTE9DID0gMTsgdGhlbgorICAgIEFDX0xJQk9CSihbcmVhbGxvY10pCisgIGZpCisgIGdsX1NURExJQl9NT0RVTEVfSU5ESUNBVE9SKFtyZWFsbG9jLXBvc2l4XSkKKyAgZ2xfU0NIRURfSAorICBnbF9TSUdBQ1RJT04KKyAgaWYgdGVzdCAkSEFWRV9TSUdBQ1RJT04gPSAwOyB0aGVuCisgICAgQUNfTElCT0JKKFtzaWdhY3Rpb25dKQorICAgIGdsX1BSRVJFUV9TSUdBQ1RJT04KKyAgZmkKKyAgZ2xfU0lHTkFMX01PRFVMRV9JTkRJQ0FUT1IoW3NpZ2FjdGlvbl0pCisgIGdsX1NJR05BTF9ICisgIGdsX1NJR05CSVQKKyAgaWYgdGVzdCAkUkVQTEFDRV9TSUdOQklUID0gMTsgdGhlbgorICAgIEFDX0xJQk9CSihbc2lnbmJpdGZdKQorICAgIEFDX0xJQk9CSihbc2lnbmJpdGRdKQorICAgIEFDX0xJQk9CSihbc2lnbmJpdGxdKQorICBmaQorICBnbF9NQVRIX01PRFVMRV9JTkRJQ0FUT1IoW3NpZ25iaXRdKQorICBnbF9TSUdOQUxCTE9DS0lORworICBpZiB0ZXN0ICRIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HID0gMDsgdGhlbgorICAgIEFDX0xJQk9CSihbc2lncHJvY21hc2tdKQorICAgIGdsX1BSRVJFUV9TSUdQUk9DTUFTSworICBmaQorICBnbF9TSUdOQUxfTU9EVUxFX0lORElDQVRPUihbc2lncHJvY21hc2tdKQorICBnbF9TSVpFX01BWAorICBnbF9GVU5DX1NOUFJJTlRGCisgIGdsX1NURElPX01PRFVMRV9JTkRJQ0FUT1IoW3NucHJpbnRmXSkKKyAgZ2xfTU9EVUxFX0lORElDQVRPUihbc25wcmludGZdKQorICBnbF9GVU5DX1NOUFJJTlRGX1BPU0lYCisgIGdsX1NQQVdOX0gKKyAgZ2xfU1BBV05fUElQRQorICBnbF9GVU5DX1NQUklOVEZfUE9TSVgKKyAgZ2xfU1RESU9fTU9EVUxFX0lORElDQVRPUihbc3ByaW50Zi1wb3NpeF0pCisgIGd0X1RZUEVfU1NJWkVfVAorICBnbF9GVU5DX1NUQVQKKyAgaWYgdGVzdCAkUkVQTEFDRV9TVEFUID0gMTsgdGhlbgorICAgIEFDX0xJQk9CSihbc3RhdF0pCisgICAgZ2xfUFJFUkVRX1NUQVQKKyAgZmkKKyAgZ2xfU1lTX1NUQVRfTU9EVUxFX0lORElDQVRPUihbc3RhdF0pCisgIEFNX1NUREJPT0xfSAorICBnbF9TVERERUZfSAorICBnbF9TVERJTlRfSAorICBnbF9TVERJT19ICisgIGdsX1NURExJQl9ICisgIGdsX0ZVTkNfU1RQQ1BZCisgIGlmIHRlc3QgJEhBVkVfU1RQQ1BZID0gMDsgdGhlbgorICAgIEFDX0xJQk9CSihbc3RwY3B5XSkKKyAgICBnbF9QUkVSRVFfU1RQQ1BZCisgIGZpCisgIGdsX1NUUklOR19NT0RVTEVfSU5ESUNBVE9SKFtzdHBjcHldKQorICBnbF9GVU5DX1NUUkNIUk5VTAorICBpZiB0ZXN0ICRIQVZFX1NUUkNIUk5VTCA9IDAgfHwgdGVzdCAkUkVQTEFDRV9TVFJDSFJOVUwgPSAxOyB0aGVuCisgICAgQUNfTElCT0JKKFtzdHJjaHJudWxdKQorICAgIGdsX1BSRVJFUV9TVFJDSFJOVUwKKyAgZmkKKyAgZ2xfU1RSSU5HX01PRFVMRV9JTkRJQ0FUT1IoW3N0cmNocm51bF0pCisgIGdsX0ZVTkNfU1RSRFVQX1BPU0lYCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfc3RyZHVwID0gbm8gfHwgdGVzdCAkUkVQTEFDRV9TVFJEVVAgPSAxOyB0aGVuCisgICAgQUNfTElCT0JKKFtzdHJkdXBdKQorICAgIGdsX1BSRVJFUV9TVFJEVVAKKyAgZmkKKyAgZ2xfU1RSSU5HX01PRFVMRV9JTkRJQ0FUT1IoW3N0cmR1cF0pCisgIGdsX0ZVTkNfU1RSRVJST1IKKyAgaWYgdGVzdCAkUkVQTEFDRV9TVFJFUlJPUiA9IDE7IHRoZW4KKyAgICBBQ19MSUJPQkooW3N0cmVycm9yXSkKKyAgZmkKKyAgZ2xfTU9EVUxFX0lORElDQVRPUihbc3RyZXJyb3JdKQorICBnbF9TVFJJTkdfTU9EVUxFX0lORElDQVRPUihbc3RyZXJyb3JdKQorICBBQ19SRVFVSVJFKFtnbF9IRUFERVJfRVJSTk9fSF0pCisgIEFDX1JFUVVJUkUoW2dsX0ZVTkNfU1RSRVJST1JfMF0pCisgIGlmIHRlc3QgLW4gIiRFUlJOT19IIiB8fCB0ZXN0ICRSRVBMQUNFX1NUUkVSUk9SXzAgPSAxOyB0aGVuCisgICAgQUNfTElCT0JKKFtzdHJlcnJvci1vdmVycmlkZV0pCisgICAgZ2xfUFJFUkVRX1NZU19IX1dJTlNPQ0syCisgIGZpCisgIGdsX0ZVTkNfU1RSRVJST1JfUgorICBpZiB0ZXN0ICRIQVZFX0RFQ0xfU1RSRVJST1JfUiA9IDAgfHwgdGVzdCAkUkVQTEFDRV9TVFJFUlJPUl9SID0gMTsgdGhlbgorICAgIEFDX0xJQk9CSihbc3RyZXJyb3Jfcl0pCisgICAgZ2xfUFJFUkVRX1NUUkVSUk9SX1IKKyAgZmkKKyAgZ2xfU1RSSU5HX01PRFVMRV9JTkRJQ0FUT1IoW3N0cmVycm9yX3JdKQorICBnbF9IRUFERVJfU1RSSU5HX0gKKyAgZ2xfRlVOQ19TVFJORFVQCisgIGlmIHRlc3QgJEhBVkVfU1RSTkRVUCA9IDAgfHwgdGVzdCAkUkVQTEFDRV9TVFJORFVQID0gMTsgdGhlbgorICAgIEFDX0xJQk9CSihbc3RybmR1cF0pCisgIGZpCisgIGdsX1NUUklOR19NT0RVTEVfSU5ESUNBVE9SKFtzdHJuZHVwXSkKKyAgZ2xfRlVOQ19TVFJOTEVOCisgIGlmIHRlc3QgJEhBVkVfREVDTF9TVFJOTEVOID0gMCB8fCB0ZXN0ICRSRVBMQUNFX1NUUk5MRU4gPSAxOyB0aGVuCisgICAgQUNfTElCT0JKKFtzdHJubGVuXSkKKyAgICBnbF9QUkVSRVFfU1RSTkxFTgorICBmaQorICBnbF9TVFJJTkdfTU9EVUxFX0lORElDQVRPUihbc3Rybmxlbl0pCisgIGdsX0ZVTkNfU1RSVE9VTAorICBpZiB0ZXN0ICRhY19jdl9mdW5jX3N0cnRvdWwgPSBubzsgdGhlbgorICAgIEFDX0xJQk9CSihbc3RydG91bF0pCisgIGZpCisgIGdsX0ZVTkNfU1RSVkVSU0NNUAorICBpZiB0ZXN0ICRIQVZFX1NUUlZFUlNDTVAgPSAwOyB0aGVuCisgICAgQUNfTElCT0JKKFtzdHJ2ZXJzY21wXSkKKyAgICBnbF9QUkVSRVFfU1RSVkVSU0NNUAorICBmaQorICBnbF9TVFJJTkdfTU9EVUxFX0lORElDQVRPUihbc3RydmVyc2NtcF0pCisgIGdsX0hFQURFUl9TWVNfU1RBVF9ICisgIEFDX1BST0dfTUtESVJfUAorICBnbF9TWVNfVFlQRVNfSAorICBBQ19QUk9HX01LRElSX1AKKyAgZ2xfU1lTX1dBSVRfSAorICBBQ19QUk9HX01LRElSX1AKKyAgZ2xfVEhSRUFETElCCisgIGdsX0hFQURFUl9USU1FX0gKKyAgZ2xfVU5JU1REX0gKKyAgZ2xfVU5JU1REX1NBRkVSCisgIGdsX0xJQlVOSVNUUklOR19MSUJIRUFERVIoWzAuOV0sIFt1bml0eXBlcy5oXSkKKyAgZ2xfTElCVU5JU1RSSU5HX0xJQkhFQURFUihbMC45XSwgW3VuaXdpZHRoLmhdKQorICBnbF9MSUJVTklTVFJJTkdfTU9EVUxFKFswLjkuNF0sIFt1bml3aWR0aC93aWR0aF0pCisgIGdsX0ZVTkNfR0xJQkNfVU5MT0NLRURfSU8KKyAgZ2xfRlVOQ19VTlNFVEVOVgorICBpZiB0ZXN0ICRIQVZFX1VOU0VURU5WID0gMCB8fCB0ZXN0ICRSRVBMQUNFX1VOU0VURU5WID0gMTsgdGhlbgorICAgIEFDX0xJQk9CSihbdW5zZXRlbnZdKQorICAgIGdsX1BSRVJFUV9VTlNFVEVOVgorICBmaQorICBnbF9TVERMSUJfTU9EVUxFX0lORElDQVRPUihbdW5zZXRlbnZdKQorICBnbF9GVU5DX1ZBU05QUklOVEYKKyAgZ2xfRlVOQ19WRlBSSU5URl9QT1NJWAorICBnbF9TVERJT19NT0RVTEVfSU5ESUNBVE9SKFt2ZnByaW50Zi1wb3NpeF0pCisgIGdsX0ZVTkNfVlNOUFJJTlRGCisgIGdsX1NURElPX01PRFVMRV9JTkRJQ0FUT1IoW3ZzbnByaW50Zl0pCisgIGdsX0ZVTkNfVlNOUFJJTlRGX1BPU0lYCisgIGdsX0ZVTkNfVlNQUklOVEZfUE9TSVgKKyAgZ2xfU1RESU9fTU9EVUxFX0lORElDQVRPUihbdnNwcmludGYtcG9zaXhdKQorICBnbF9XQUlUX1BST0NFU1MKKyAgZ2xfRlVOQ19XQUlUUElECisgIGlmIHRlc3QgJEhBVkVfV0FJVFBJRCA9IDA7IHRoZW4KKyAgICBBQ19MSUJPQkooW3dhaXRwaWRdKQorICBmaQorICBnbF9TWVNfV0FJVF9NT0RVTEVfSU5ESUNBVE9SKFt3YWl0cGlkXSkKKyAgZ2xfV0NIQVJfSAorICBnbF9XQ1RZUEVfSAorICBnbF9GVU5DX1dDV0lEVEgKKyAgaWYgdGVzdCAkSEFWRV9XQ1dJRFRIID0gMCB8fCB0ZXN0ICRSRVBMQUNFX1dDV0lEVEggPSAxOyB0aGVuCisgICAgQUNfTElCT0JKKFt3Y3dpZHRoXSkKKyAgZmkKKyAgZ2xfV0NIQVJfTU9EVUxFX0lORElDQVRPUihbd2N3aWR0aF0pCisgIGdsX1hBTExPQworICBBQ19MSUJPQkooW3htZW1kdXAwXSkKKyAgZ2xfWFNJWkUKKyAgZ2xfWFNUUk5EVVAKKyAgIyBFbmQgb2YgY29kZSBmcm9tIG1vZHVsZXMKKyAgbTRfaWZ2YWwoZ2xfTElCU09VUkNFU19MSVNULCBbCisgICAgbTRfc3lzY21kKFt0ZXN0ICEgLWQgXW00X2RlZm4oW2dsX0xJQlNPVVJDRVNfRElSXSlbIHx8CisgICAgICBmb3IgZ2xfZmlsZSBpbiBdZ2xfTElCU09VUkNFU19MSVNUWyA7IGRvCisgICAgICAgIGlmIHRlc3QgISAtciBdbTRfZGVmbihbZ2xfTElCU09VUkNFU19ESVJdKVsvJGdsX2ZpbGUgOyB0aGVuCisgICAgICAgICAgZWNobyAibWlzc2luZyBmaWxlIF1tNF9kZWZuKFtnbF9MSUJTT1VSQ0VTX0RJUl0pWy8kZ2xfZmlsZSIgPiYyCisgICAgICAgICAgZXhpdCAxCisgICAgICAgIGZpCisgICAgICBkb25lXSlkbmwKKyAgICAgIG00X2lmKG00X3N5c3ZhbCwgWzBdLCBbXSwKKyAgICAgICAgW0FDX0ZBVEFMKFtleHBlY3RlZCBzb3VyY2UgZmlsZSwgcmVxdWlyZWQgdGhyb3VnaCBBQ19MSUJTT1VSQ0VTLCBub3QgZm91bmRdKV0pCisgIF0pCisgIG00X3BvcGRlZihbZ2xfTElCU09VUkNFU19ESVJdKQorICBtNF9wb3BkZWYoW2dsX0xJQlNPVVJDRVNfTElTVF0pCisgIG00X3BvcGRlZihbQUNfTElCU09VUkNFU10pCisgIG00X3BvcGRlZihbQUNfUkVQTEFDRV9GVU5DU10pCisgIG00X3BvcGRlZihbQUNfTElCT0JKXSkKKyAgQUNfQ09ORklHX0NPTU1BTkRTX1BSRShbCisgICAgZ2xfbGlib2Jqcz0KKyAgICBnbF9sdGxpYm9ianM9CisgICAgaWYgdGVzdCAtbiAiJGdsX0xJQk9CSlMiOyB0aGVuCisgICAgICAjIFJlbW92ZSB0aGUgZXh0ZW5zaW9uLgorICAgICAgc2VkX2Ryb3Bfb2JqZXh0PSdzL1wubyQvLztzL1wub2JqJC8vJworICAgICAgZm9yIGkgaW4gYGZvciBpIGluICRnbF9MSUJPQkpTOyBkbyBlY2hvICIkaSI7IGRvbmUgfCBzZWQgLWUgIiRzZWRfZHJvcF9vYmpleHQiIHwgc29ydCB8IHVuaXFgOyBkbworICAgICAgICBnbF9saWJvYmpzPSIkZ2xfbGlib2JqcyAkaS4kYWNfb2JqZXh0IgorICAgICAgICBnbF9sdGxpYm9ianM9IiRnbF9sdGxpYm9ianMgJGkubG8iCisgICAgICBkb25lCisgICAgZmkKKyAgICBBQ19TVUJTVChbZ2xfTElCT0JKU10sIFskZ2xfbGlib2Jqc10pCisgICAgQUNfU1VCU1QoW2dsX0xUTElCT0JKU10sIFskZ2xfbHRsaWJvYmpzXSkKKyAgXSkKKyAgZ2x0ZXN0c19saWJkZXBzPQorICBnbHRlc3RzX2x0bGliZGVwcz0KKyAgbTRfcHVzaGRlZihbQUNfTElCT0JKXSwgbTRfZGVmbihbZ2x0ZXN0c19MSUJPQkpdKSkKKyAgbTRfcHVzaGRlZihbQUNfUkVQTEFDRV9GVU5DU10sIG00X2RlZm4oW2dsdGVzdHNfUkVQTEFDRV9GVU5DU10pKQorICBtNF9wdXNoZGVmKFtBQ19MSUJTT1VSQ0VTXSwgbTRfZGVmbihbZ2x0ZXN0c19MSUJTT1VSQ0VTXSkpCisgIG00X3B1c2hkZWYoW2dsdGVzdHNfTElCU09VUkNFU19MSVNUXSwgW10pCisgIG00X3B1c2hkZWYoW2dsdGVzdHNfTElCU09VUkNFU19ESVJdLCBbXSkKKyAgZ2xfQ09NTU9OCisgIGdsX3NvdXJjZV9iYXNlPSd0ZXN0cycKK2NoYW5nZXF1b3RlKCwpZG5sCisgIGdsdGVzdHNfV0lUTkVTUz1JTl9gZWNobyAiJHtQQUNLQUdFLSRQQUNLQUdFX1RBUk5BTUV9IiB8IExDX0FMTD1DIHRyIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIHwgTENfQUxMPUMgc2VkIC1lICdzL1teQS1aMC05X10vXy9nJ2BfR05VTElCX1RFU1RTCitjaGFuZ2VxdW90ZShbLCBdKWRubAorICBBQ19TVUJTVChbZ2x0ZXN0c19XSVRORVNTXSkKKyAgZ2xfbW9kdWxlX2luZGljYXRvcl9jb25kaXRpb249JGdsdGVzdHNfV0lUTkVTUworICBtNF9wdXNoZGVmKFtnbF9NT0RVTEVfSU5ESUNBVE9SX0NPTkRJVElPTl0sIFskZ2xfbW9kdWxlX2luZGljYXRvcl9jb25kaXRpb25dKQorICBtNF9wb3BkZWYoW2dsX01PRFVMRV9JTkRJQ0FUT1JfQ09ORElUSU9OXSkKKyAgbTRfaWZ2YWwoZ2x0ZXN0c19MSUJTT1VSQ0VTX0xJU1QsIFsKKyAgICBtNF9zeXNjbWQoW3Rlc3QgISAtZCBdbTRfZGVmbihbZ2x0ZXN0c19MSUJTT1VSQ0VTX0RJUl0pWyB8fAorICAgICAgZm9yIGdsX2ZpbGUgaW4gXWdsdGVzdHNfTElCU09VUkNFU19MSVNUWyA7IGRvCisgICAgICAgIGlmIHRlc3QgISAtciBdbTRfZGVmbihbZ2x0ZXN0c19MSUJTT1VSQ0VTX0RJUl0pWy8kZ2xfZmlsZSA7IHRoZW4KKyAgICAgICAgICBlY2hvICJtaXNzaW5nIGZpbGUgXW00X2RlZm4oW2dsdGVzdHNfTElCU09VUkNFU19ESVJdKVsvJGdsX2ZpbGUiID4mMgorICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQorICAgICAgZG9uZV0pZG5sCisgICAgICBtNF9pZihtNF9zeXN2YWwsIFswXSwgW10sCisgICAgICAgIFtBQ19GQVRBTChbZXhwZWN0ZWQgc291cmNlIGZpbGUsIHJlcXVpcmVkIHRocm91Z2ggQUNfTElCU09VUkNFUywgbm90IGZvdW5kXSldKQorICBdKQorICBtNF9wb3BkZWYoW2dsdGVzdHNfTElCU09VUkNFU19ESVJdKQorICBtNF9wb3BkZWYoW2dsdGVzdHNfTElCU09VUkNFU19MSVNUXSkKKyAgbTRfcG9wZGVmKFtBQ19MSUJTT1VSQ0VTXSkKKyAgbTRfcG9wZGVmKFtBQ19SRVBMQUNFX0ZVTkNTXSkKKyAgbTRfcG9wZGVmKFtBQ19MSUJPQkpdKQorICBBQ19DT05GSUdfQ09NTUFORFNfUFJFKFsKKyAgICBnbHRlc3RzX2xpYm9ianM9CisgICAgZ2x0ZXN0c19sdGxpYm9ianM9CisgICAgaWYgdGVzdCAtbiAiJGdsdGVzdHNfTElCT0JKUyI7IHRoZW4KKyAgICAgICMgUmVtb3ZlIHRoZSBleHRlbnNpb24uCisgICAgICBzZWRfZHJvcF9vYmpleHQ9J3MvXC5vJC8vO3MvXC5vYmokLy8nCisgICAgICBmb3IgaSBpbiBgZm9yIGkgaW4gJGdsdGVzdHNfTElCT0JKUzsgZG8gZWNobyAiJGkiOyBkb25lIHwgc2VkIC1lICIkc2VkX2Ryb3Bfb2JqZXh0IiB8IHNvcnQgfCB1bmlxYDsgZG8KKyAgICAgICAgZ2x0ZXN0c19saWJvYmpzPSIkZ2x0ZXN0c19saWJvYmpzICRpLiRhY19vYmpleHQiCisgICAgICAgIGdsdGVzdHNfbHRsaWJvYmpzPSIkZ2x0ZXN0c19sdGxpYm9ianMgJGkubG8iCisgICAgICBkb25lCisgICAgZmkKKyAgICBBQ19TVUJTVChbZ2x0ZXN0c19MSUJPQkpTXSwgWyRnbHRlc3RzX2xpYm9ianNdKQorICAgIEFDX1NVQlNUKFtnbHRlc3RzX0xUTElCT0JKU10sIFskZ2x0ZXN0c19sdGxpYm9ianNdKQorICBdKQorICBMSUJCSVNPTl9MSUJERVBTPSIkZ2xfbGliZGVwcyIKKyAgQUNfU1VCU1QoW0xJQkJJU09OX0xJQkRFUFNdKQorICBMSUJCSVNPTl9MVExJQkRFUFM9IiRnbF9sdGxpYmRlcHMiCisgIEFDX1NVQlNUKFtMSUJCSVNPTl9MVExJQkRFUFNdKQorXSkKKworIyBMaWtlIEFDX0xJQk9CSiwgZXhjZXB0IHRoYXQgdGhlIG1vZHVsZSBuYW1lIGdvZXMKKyMgaW50byBnbF9MSUJPQkpTIGluc3RlYWQgb2YgaW50byBMSUJPQkpTLgorQUNfREVGVU4oW2dsX0xJQk9CSl0sIFsKKyAgQVNfTElURVJBTF9JRihbJDFdLCBbZ2xfTElCU09VUkNFUyhbJDEuY10pXSlkbmwKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgJDEuJGFjX29iamV4dCIKK10pCisKKyMgTGlrZSBBQ19SRVBMQUNFX0ZVTkNTLCBleGNlcHQgdGhhdCB0aGUgbW9kdWxlIG5hbWUgZ29lcworIyBpbnRvIGdsX0xJQk9CSlMgaW5zdGVhZCBvZiBpbnRvIExJQk9CSlMuCitBQ19ERUZVTihbZ2xfUkVQTEFDRV9GVU5DU10sIFsKKyAgbTRfZm9yZWFjaF93KFtnbF9OQU1FXSwgWyQxXSwgW0FDX0xJQlNPVVJDRVMoZ2xfTkFNRVsuY10pXSlkbmwKKyAgQUNfQ0hFQ0tfRlVOQ1MoWyQxXSwgLCBbZ2xfTElCT0JKKCRhY19mdW5jKV0pCitdKQorCisjIExpa2UgQUNfTElCU09VUkNFUywgZXhjZXB0IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHNvdXJjZSBmaWxlIGlzCisjIGV4cGVjdGVkIGlzIGRlcml2ZWQgZnJvbSB0aGUgZ251bGliLXRvb2wgcGFyYW1ldGVyaXphdGlvbiwKKyMgYW5kIGFsbG9jYSBpcyBzcGVjaWFsIGNhc2VkIChmb3IgdGhlIGFsbG9jYS1vcHQgbW9kdWxlKS4KKyMgV2UgY291bGQgYWxzbyBlbnRpcmVseSByZWx5IG9uIEVYVFJBX2xpYi4uLl9TT1VSQ0VTLgorQUNfREVGVU4oW2dsX0xJQlNPVVJDRVNdLCBbCisgIG00X2ZvcmVhY2goW19nbF9OQU1FXSwgWyQxXSwgWworICAgIG00X2lmKF9nbF9OQU1FLCBbYWxsb2NhLmNdLCBbXSwgWworICAgICAgbTRfZGVmaW5lKFtnbF9MSUJTT1VSQ0VTX0RJUl0sIFtsaWJdKQorICAgICAgbTRfYXBwZW5kKFtnbF9MSUJTT1VSQ0VTX0xJU1RdLCBfZ2xfTkFNRSwgWyBdKQorICAgIF0pCisgIF0pCitdKQorCisjIExpa2UgQUNfTElCT0JKLCBleGNlcHQgdGhhdCB0aGUgbW9kdWxlIG5hbWUgZ29lcworIyBpbnRvIGdsdGVzdHNfTElCT0JKUyBpbnN0ZWFkIG9mIGludG8gTElCT0JKUy4KK0FDX0RFRlVOKFtnbHRlc3RzX0xJQk9CSl0sIFsKKyAgQVNfTElURVJBTF9JRihbJDFdLCBbZ2x0ZXN0c19MSUJTT1VSQ0VTKFskMS5jXSldKWRubAorICBnbHRlc3RzX0xJQk9CSlM9IiRnbHRlc3RzX0xJQk9CSlMgJDEuJGFjX29iamV4dCIKK10pCisKKyMgTGlrZSBBQ19SRVBMQUNFX0ZVTkNTLCBleGNlcHQgdGhhdCB0aGUgbW9kdWxlIG5hbWUgZ29lcworIyBpbnRvIGdsdGVzdHNfTElCT0JKUyBpbnN0ZWFkIG9mIGludG8gTElCT0JKUy4KK0FDX0RFRlVOKFtnbHRlc3RzX1JFUExBQ0VfRlVOQ1NdLCBbCisgIG00X2ZvcmVhY2hfdyhbZ2xfTkFNRV0sIFskMV0sIFtBQ19MSUJTT1VSQ0VTKGdsX05BTUVbLmNdKV0pZG5sCisgIEFDX0NIRUNLX0ZVTkNTKFskMV0sICwgW2dsdGVzdHNfTElCT0JKKCRhY19mdW5jKV0pCitdKQorCisjIExpa2UgQUNfTElCU09VUkNFUywgZXhjZXB0IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHNvdXJjZSBmaWxlIGlzCisjIGV4cGVjdGVkIGlzIGRlcml2ZWQgZnJvbSB0aGUgZ251bGliLXRvb2wgcGFyYW1ldGVyaXphdGlvbiwKKyMgYW5kIGFsbG9jYSBpcyBzcGVjaWFsIGNhc2VkIChmb3IgdGhlIGFsbG9jYS1vcHQgbW9kdWxlKS4KKyMgV2UgY291bGQgYWxzbyBlbnRpcmVseSByZWx5IG9uIEVYVFJBX2xpYi4uLl9TT1VSQ0VTLgorQUNfREVGVU4oW2dsdGVzdHNfTElCU09VUkNFU10sIFsKKyAgbTRfZm9yZWFjaChbX2dsX05BTUVdLCBbJDFdLCBbCisgICAgbTRfaWYoX2dsX05BTUUsIFthbGxvY2EuY10sIFtdLCBbCisgICAgICBtNF9kZWZpbmUoW2dsdGVzdHNfTElCU09VUkNFU19ESVJdLCBbdGVzdHNdKQorICAgICAgbTRfYXBwZW5kKFtnbHRlc3RzX0xJQlNPVVJDRVNfTElTVF0sIF9nbF9OQU1FLCBbIF0pCisgICAgXSkKKyAgXSkKK10pCisKKyMgVGhpcyBtYWNybyByZWNvcmRzIHRoZSBsaXN0IG9mIGZpbGVzIHdoaWNoIGhhdmUgYmVlbiBpbnN0YWxsZWQgYnkKKyMgZ251bGliLXRvb2wgYW5kIG1heSBiZSByZW1vdmVkIGJ5IGZ1dHVyZSBnbnVsaWItdG9vbCBpbnZvY2F0aW9ucy4KK0FDX0RFRlVOKFtnbF9GSUxFX0xJU1RdLCBbCisgIGJ1aWxkLWF1eC9hbm5vdW5jZS1nZW4KKyAgYnVpbGQtYXV4L2NvbmZpZy5ycGF0aAorICBidWlsZC1hdXgvZG8tcmVsZWFzZS1jb21taXQtYW5kLXRhZworICBidWlsZC1hdXgvZ2VuZG9jcy5zaAorICBidWlsZC1hdXgvZ2l0LXZlcnNpb24tZ2VuCisgIGJ1aWxkLWF1eC9naXRsb2ctdG8tY2hhbmdlbG9nCisgIGJ1aWxkLWF1eC9nbnUtd2ViLWRvYy11cGRhdGUKKyAgYnVpbGQtYXV4L2dudXBsb2FkCisgIGJ1aWxkLWF1eC9qYXZhY29tcC5zaC5pbgorICBidWlsZC1hdXgvamF2YWV4ZWMuc2guaW4KKyAgYnVpbGQtYXV4L3NuaXBwZXQvX05vcmV0dXJuLmgKKyAgYnVpbGQtYXV4L3NuaXBwZXQvYXJnLW5vbm51bGwuaAorICBidWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmgKKyAgYnVpbGQtYXV4L3NuaXBwZXQvd2Fybi1vbi11c2UuaAorICBidWlsZC1hdXgvdXBkYXRlLWNvcHlyaWdodAorICBidWlsZC1hdXgvdXNlbGVzcy1pZi1iZWZvcmUtZnJlZQorICBidWlsZC1hdXgvdmMtbGlzdC1maWxlcworICBkb2MvZmRsLnRleGkKKyAgZG9jL2dlbmRvY3NfdGVtcGxhdGUKKyAgZG9jL2dwbC0zLjAudGV4aQorICBsaWIvYWxsb2NhLmluLmgKKyAgbGliL2FyZ21hdGNoLmMKKyAgbGliL2FyZ21hdGNoLmgKKyAgbGliL2FzbnByaW50Zi5jCisgIGxpYi9iYXNlbmFtZS1sZ3BsLmMKKyAgbGliL2Jhc2VuYW1lLmMKKyAgbGliL2JpbmFyeS1pby5jCisgIGxpYi9iaW5hcnktaW8uaAorICBsaWIvYml0cm90YXRlLmMKKyAgbGliL2JpdHJvdGF0ZS5oCisgIGxpYi9jLWN0eXBlLmMKKyAgbGliL2MtY3R5cGUuaAorICBsaWIvYy1zdHJjYXNlLmgKKyAgbGliL2Mtc3RyY2FzZWNtcC5jCisgIGxpYi9jLXN0cmNhc2VlcS5oCisgIGxpYi9jLXN0cm5jYXNlY21wLmMKKyAgbGliL2NhbGxvYy5jCisgIGxpYi9jbG9leGVjLmMKKyAgbGliL2Nsb2V4ZWMuaAorICBsaWIvY2xvc2Utc3RyZWFtLmMKKyAgbGliL2Nsb3NlLXN0cmVhbS5oCisgIGxpYi9jbG9zZS5jCisgIGxpYi9jbG9zZW91dC5jCisgIGxpYi9jbG9zZW91dC5oCisgIGxpYi9jb25maWcuY2hhcnNldAorICBsaWIvZGlybmFtZS1sZ3BsLmMKKyAgbGliL2Rpcm5hbWUuYworICBsaWIvZGlybmFtZS5oCisgIGxpYi9kb3NuYW1lLmgKKyAgbGliL2R1cC1zYWZlci1mbGFnLmMKKyAgbGliL2R1cC1zYWZlci5jCisgIGxpYi9kdXAyLmMKKyAgbGliL2Vycm5vLmluLmgKKyAgbGliL2Vycm9yLmMKKyAgbGliL2Vycm9yLmgKKyAgbGliL2V4aXRmYWlsLmMKKyAgbGliL2V4aXRmYWlsLmgKKyAgbGliL2ZhdGFsLXNpZ25hbC5jCisgIGxpYi9mYXRhbC1zaWduYWwuaAorICBsaWIvZmNudGwuYworICBsaWIvZmNudGwuaW4uaAorICBsaWIvZmQtaG9vay5jCisgIGxpYi9mZC1ob29rLmgKKyAgbGliL2ZkLXNhZmVyLWZsYWcuYworICBsaWIvZmQtc2FmZXIuYworICBsaWIvZmxvYXQrLmgKKyAgbGliL2Zsb2F0LmMKKyAgbGliL2Zsb2F0LmluLmgKKyAgbGliL2ZvcGVuLXNhZmVyLmMKKyAgbGliL2ZvcGVuLmMKKyAgbGliL2ZwZW5kaW5nLmMKKyAgbGliL2ZwZW5kaW5nLmgKKyAgbGliL2ZwcmludGYuYworICBsaWIvZnB1Y3cuaAorICBsaWIvZnJleHAuYworICBsaWIvZnJleHBsLmMKKyAgbGliL2ZzZXRlcnIuYworICBsaWIvZnNldGVyci5oCisgIGxpYi9mc3RhdC5jCisgIGxpYi9nZXRkZWxpbS5jCisgIGxpYi9nZXRkdGFibGVzaXplLmMKKyAgbGliL2dldGxpbmUuYworICBsaWIvZ2V0b3B0LmMKKyAgbGliL2dldG9wdC5pbi5oCisgIGxpYi9nZXRvcHQxLmMKKyAgbGliL2dldG9wdF9pbnQuaAorICBsaWIvZ2V0dGV4dC5oCisgIGxpYi9nbHRocmVhZC9sb2NrLmMKKyAgbGliL2dsdGhyZWFkL2xvY2suaAorICBsaWIvZ2x0aHJlYWQvdGhyZWFkbGliLmMKKyAgbGliL2hhc2guYworICBsaWIvaGFzaC5oCisgIGxpYi9pbnRwcm9wcy5oCisgIGxpYi9pbnR0eXBlcy5pbi5oCisgIGxpYi9pc25hbi5jCisgIGxpYi9pc25hbmQtbm9saWJtLmgKKyAgbGliL2lzbmFuZC5jCisgIGxpYi9pc25hbmYtbm9saWJtLmgKKyAgbGliL2lzbmFuZi5jCisgIGxpYi9pc25hbmwtbm9saWJtLmgKKyAgbGliL2lzbmFubC5jCisgIGxpYi9pc3dibGFuay5jCisgIGxpYi9pdG9sZC5jCisgIGxpYi9sZGV4cGwuYworICBsaWIvbG9jYWxjaGFyc2V0LmMKKyAgbGliL2xvY2FsY2hhcnNldC5oCisgIGxpYi9tYWxsb2MuYworICBsaWIvbWF0aC5jCisgIGxpYi9tYXRoLmluLmgKKyAgbGliL21iY2hhci5jCisgIGxpYi9tYmNoYXIuaAorICBsaWIvbWJydG93Yy5jCisgIGxpYi9tYnNjaHIuYworICBsaWIvbWJzaW5pdC5jCisgIGxpYi9tYnNyY2hyLmMKKyAgbGliL21ic3dpZHRoLmMKKyAgbGliL21ic3dpZHRoLmgKKyAgbGliL21idWl0ZXIuYworICBsaWIvbWJ1aXRlci5oCisgIGxpYi9tZW1jaHIuYworICBsaWIvbWVtY2hyLnZhbGdyaW5kCisgIGxpYi9tc3ZjLWludmFsLmMKKyAgbGliL21zdmMtaW52YWwuaAorICBsaWIvbXN2Yy1ub3Rocm93LmMKKyAgbGliL21zdmMtbm90aHJvdy5oCisgIGxpYi9vYnN0YWNrLmMKKyAgbGliL29ic3RhY2suaAorICBsaWIvb2JzdGFja19wcmludGYuYworICBsaWIvb3Blbi5jCisgIGxpYi9wYXRobWF4LmgKKyAgbGliL3BlcnJvci5jCisgIGxpYi9waXBlLXNhZmVyLmMKKyAgbGliL3BpcGUyLXNhZmVyLmMKKyAgbGliL3BpcGUyLmMKKyAgbGliL3ByaW50Zi1hcmdzLmMKKyAgbGliL3ByaW50Zi1hcmdzLmgKKyAgbGliL3ByaW50Zi1mcmV4cC5jCisgIGxpYi9wcmludGYtZnJleHAuaAorICBsaWIvcHJpbnRmLWZyZXhwbC5jCisgIGxpYi9wcmludGYtZnJleHBsLmgKKyAgbGliL3ByaW50Zi1wYXJzZS5jCisgIGxpYi9wcmludGYtcGFyc2UuaAorICBsaWIvcHJpbnRmLmMKKyAgbGliL3Byb2duYW1lLmMKKyAgbGliL3Byb2duYW1lLmgKKyAgbGliL3F1b3RlLmgKKyAgbGliL3F1b3RlYXJnLmMKKyAgbGliL3F1b3RlYXJnLmgKKyAgbGliL3JhaXNlLmMKKyAgbGliL3Jhd21lbWNoci5jCisgIGxpYi9yYXdtZW1jaHIudmFsZ3JpbmQKKyAgbGliL3JlYWxsb2MuYworICBsaWIvcmVmLWFkZC5zaW4KKyAgbGliL3JlZi1kZWwuc2luCisgIGxpYi9zY2hlZC5pbi5oCisgIGxpYi9zaWctaGFuZGxlci5jCisgIGxpYi9zaWctaGFuZGxlci5oCisgIGxpYi9zaWdhY3Rpb24uYworICBsaWIvc2lnbmFsLmluLmgKKyAgbGliL3NpZ25iaXRkLmMKKyAgbGliL3NpZ25iaXRmLmMKKyAgbGliL3NpZ25iaXRsLmMKKyAgbGliL3NpZ3Byb2NtYXNrLmMKKyAgbGliL3NpemVfbWF4LmgKKyAgbGliL3NucHJpbnRmLmMKKyAgbGliL3NwYXduLXBpcGUuYworICBsaWIvc3Bhd24tcGlwZS5oCisgIGxpYi9zcGF3bi5pbi5oCisgIGxpYi9zcGF3bl9mYWN0aW9uX2FkZGNsb3NlLmMKKyAgbGliL3NwYXduX2ZhY3Rpb25fYWRkZHVwMi5jCisgIGxpYi9zcGF3bl9mYWN0aW9uX2FkZG9wZW4uYworICBsaWIvc3Bhd25fZmFjdGlvbl9kZXN0cm95LmMKKyAgbGliL3NwYXduX2ZhY3Rpb25faW5pdC5jCisgIGxpYi9zcGF3bl9pbnQuaAorICBsaWIvc3Bhd25hdHRyX2Rlc3Ryb3kuYworICBsaWIvc3Bhd25hdHRyX2luaXQuYworICBsaWIvc3Bhd25hdHRyX3NldGZsYWdzLmMKKyAgbGliL3NwYXduYXR0cl9zZXRzaWdtYXNrLmMKKyAgbGliL3NwYXduaS5jCisgIGxpYi9zcGF3bnAuYworICBsaWIvc3ByaW50Zi5jCisgIGxpYi9zdGF0LmMKKyAgbGliL3N0ZGJvb2wuaW4uaAorICBsaWIvc3RkZGVmLmluLmgKKyAgbGliL3N0ZGludC5pbi5oCisgIGxpYi9zdGRpby0tLmgKKyAgbGliL3N0ZGlvLWltcGwuaAorICBsaWIvc3RkaW8tc2FmZXIuaAorICBsaWIvc3RkaW8uYworICBsaWIvc3RkaW8uaW4uaAorICBsaWIvc3RkbGliLmluLmgKKyAgbGliL3N0cGNweS5jCisgIGxpYi9zdHJjaHJudWwuYworICBsaWIvc3RyY2hybnVsLnZhbGdyaW5kCisgIGxpYi9zdHJkdXAuYworICBsaWIvc3RyZXEuaAorICBsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuYworICBsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuaAorICBsaWIvc3RyZXJyb3IuYworICBsaWIvc3RyZXJyb3Jfci5jCisgIGxpYi9zdHJpbmcuaW4uaAorICBsaWIvc3RyaXBzbGFzaC5jCisgIGxpYi9zdHJuZHVwLmMKKyAgbGliL3N0cm5sZW4uYworICBsaWIvc3RybmxlbjEuYworICBsaWIvc3RybmxlbjEuaAorICBsaWIvc3RydG9sLmMKKyAgbGliL3N0cnRvdWwuYworICBsaWIvc3RydmVyc2NtcC5jCisgIGxpYi9zeXNfc3RhdC5pbi5oCisgIGxpYi9zeXNfdHlwZXMuaW4uaAorICBsaWIvc3lzX3dhaXQuaW4uaAorICBsaWIvdGltZS5pbi5oCisgIGxpYi91bmlzdGQtLS5oCisgIGxpYi91bmlzdGQtc2FmZXIuaAorICBsaWIvdW5pc3RkLmMKKyAgbGliL3VuaXN0ZC5pbi5oCisgIGxpYi91bml0eXBlcy5pbi5oCisgIGxpYi91bml3aWR0aC5pbi5oCisgIGxpYi91bml3aWR0aC9jamsuaAorICBsaWIvdW5pd2lkdGgvd2lkdGguYworICBsaWIvdW5sb2NrZWQtaW8uaAorICBsaWIvdW5zZXRlbnYuYworICBsaWIvdmFzbnByaW50Zi5jCisgIGxpYi92YXNucHJpbnRmLmgKKyAgbGliL3ZlcmlmeS5oCisgIGxpYi92ZnByaW50Zi5jCisgIGxpYi92c25wcmludGYuYworICBsaWIvdnNwcmludGYuYworICBsaWIvdzMyc3Bhd24uaAorICBsaWIvd2FpdC1wcm9jZXNzLmMKKyAgbGliL3dhaXQtcHJvY2Vzcy5oCisgIGxpYi93YWl0cGlkLmMKKyAgbGliL3djaGFyLmluLmgKKyAgbGliL3djdHlwZS1oLmMKKyAgbGliL3djdHlwZS5pbi5oCisgIGxpYi93Y3dpZHRoLmMKKyAgbGliL3hhbGxvYy1kaWUuYworICBsaWIveGFsbG9jLW92ZXJzaXplZC5oCisgIGxpYi94YWxsb2MuaAorICBsaWIveG1hbGxvYy5jCisgIGxpYi94bWVtZHVwMC5jCisgIGxpYi94bWVtZHVwMC5oCisgIGxpYi94c2l6ZS5jCisgIGxpYi94c2l6ZS5oCisgIGxpYi94c3RybmR1cC5jCisgIGxpYi94c3RybmR1cC5oCisgIG00LzAwZ251bGliLm00CisgIG00L2FsbG9jYS5tNAorICBtNC9hc20tdW5kZXJzY29yZS5tNAorICBtNC9hc3NlcnQubTQKKyAgbTQvY2FsbG9jLm00CisgIG00L2Nsb3NlLXN0cmVhbS5tNAorICBtNC9jbG9zZS5tNAorICBtNC9jbG9zZW91dC5tNAorICBtNC9jb2Rlc2V0Lm00CisgIG00L2NvbmZpZy1oLm00CisgIG00L2NvbmZpZ21ha2UubTQKKyAgbTQvZGlybmFtZS5tNAorICBtNC9kb3VibGUtc2xhc2gtcm9vdC5tNAorICBtNC9kdXAyLm00CisgIG00L2Vudmlyb24ubTQKKyAgbTQvZXJybm9faC5tNAorICBtNC9lcnJvci5tNAorICBtNC9leHBvbmVudGQubTQKKyAgbTQvZXhwb25lbnRmLm00CisgIG00L2V4cG9uZW50bC5tNAorICBtNC9leHRlbnNpb25zLm00CisgIG00L2V4dGVybi1pbmxpbmUubTQKKyAgbTQvZmF0YWwtc2lnbmFsLm00CisgIG00L2ZjbnRsLW8ubTQKKyAgbTQvZmNudGwubTQKKyAgbTQvZmNudGxfaC5tNAorICBtNC9mbG9hdF9oLm00CisgIG00L2ZvcGVuLm00CisgIG00L2ZwZW5kaW5nLm00CisgIG00L2ZwaWVlZS5tNAorICBtNC9mcHJpbnRmLXBvc2l4Lm00CisgIG00L2ZyZXhwLm00CisgIG00L2ZyZXhwbC5tNAorICBtNC9mc2V0ZXJyLm00CisgIG00L2ZzdGF0Lm00CisgIG00L2dldGRlbGltLm00CisgIG00L2dldGR0YWJsZXNpemUubTQKKyAgbTQvZ2V0bGluZS5tNAorICBtNC9nZXRvcHQubTQKKyAgbTQvZ2V0dGV4dC5tNAorICBtNC9nbGliYzIubTQKKyAgbTQvZ2xpYmMyMS5tNAorICBtNC9nbnVsaWItY29tbW9uLm00CisgIG00L2ljb252Lm00CisgIG00L2luY2x1ZGVfbmV4dC5tNAorICBtNC9pbnRkaXYwLm00CisgIG00L2ludGwubTQKKyAgbTQvaW50bGRpci5tNAorICBtNC9pbnRsbWFjb3N4Lm00CisgIG00L2ludG1heC5tNAorICBtNC9pbnRtYXhfdC5tNAorICBtNC9pbnR0eXBlcy1wcmkubTQKKyAgbTQvaW50dHlwZXMubTQKKyAgbTQvaW50dHlwZXNfaC5tNAorICBtNC9pc25hbi5tNAorICBtNC9pc25hbmQubTQKKyAgbTQvaXNuYW5mLm00CisgIG00L2lzbmFubC5tNAorICBtNC9pc3dibGFuay5tNAorICBtNC9qYXZhY29tcC5tNAorICBtNC9qYXZhZXhlYy5tNAorICBtNC9sYXJnZWZpbGUubTQKKyAgbTQvbGNtZXNzYWdlLm00CisgIG00L2xkZXhwLm00CisgIG00L2xkZXhwbC5tNAorICBtNC9saWItbGQubTQKKyAgbTQvbGliLWxpbmsubTQKKyAgbTQvbGliLXByZWZpeC5tNAorICBtNC9saWJ1bmlzdHJpbmctYmFzZS5tNAorICBtNC9sb2NhbGNoYXJzZXQubTQKKyAgbTQvbG9jYWxlLWZyLm00CisgIG00L2xvY2FsZS1qYS5tNAorICBtNC9sb2NhbGUtemgubTQKKyAgbTQvbG9jay5tNAorICBtNC9sb25nbG9uZy5tNAorICBtNC9tYWxsb2MubTQKKyAgbTQvbWF0aF9oLm00CisgIG00L21iY2hhci5tNAorICBtNC9tYml0ZXIubTQKKyAgbTQvbWJydG93Yy5tNAorICBtNC9tYnNpbml0Lm00CisgIG00L21ic3RhdGVfdC5tNAorICBtNC9tYnN3aWR0aC5tNAorICBtNC9tZW1jaHIubTQKKyAgbTQvbW1hcC1hbm9uLm00CisgIG00L21vZGVfdC5tNAorICBtNC9tc3ZjLWludmFsLm00CisgIG00L21zdmMtbm90aHJvdy5tNAorICBtNC9tdWx0aWFyY2gubTQKKyAgbTQvbmxzLm00CisgIG00L25vY3Jhc2gubTQKKyAgbTQvb2JzdGFjay1wcmludGYubTQKKyAgbTQvb2ZmX3QubTQKKyAgbTQvb3Blbi5tNAorICBtNC9wYXRobWF4Lm00CisgIG00L3BlcnJvci5tNAorICBtNC9waXBlMi5tNAorICBtNC9wby5tNAorICBtNC9wb3NpeF9zcGF3bi5tNAorICBtNC9wcmludGYtZnJleHAubTQKKyAgbTQvcHJpbnRmLWZyZXhwbC5tNAorICBtNC9wcmludGYtcG9zaXgtcnBsLm00CisgIG00L3ByaW50Zi1wb3NpeC5tNAorICBtNC9wcmludGYubTQKKyAgbTQvcHJvZ3Rlc3QubTQKKyAgbTQvcXVvdGUubTQKKyAgbTQvcXVvdGVhcmcubTQKKyAgbTQvcmFpc2UubTQKKyAgbTQvcmF3bWVtY2hyLm00CisgIG00L3JlYWxsb2MubTQKKyAgbTQvc2NoZWRfaC5tNAorICBtNC9zZXRlbnYubTQKKyAgbTQvc2lnX2F0b21pY190Lm00CisgIG00L3NpZ2FjdGlvbi5tNAorICBtNC9zaWduYWxfaC5tNAorICBtNC9zaWduYWxibG9ja2luZy5tNAorICBtNC9zaWduYml0Lm00CisgIG00L3NpemVfbWF4Lm00CisgIG00L3NucHJpbnRmLXBvc2l4Lm00CisgIG00L3NucHJpbnRmLm00CisgIG00L3NwYXduLXBpcGUubTQKKyAgbTQvc3Bhd25faC5tNAorICBtNC9zcHJpbnRmLXBvc2l4Lm00CisgIG00L3NzaXplX3QubTQKKyAgbTQvc3RhdC5tNAorICBtNC9zdGRib29sLm00CisgIG00L3N0ZGRlZl9oLm00CisgIG00L3N0ZGludC5tNAorICBtNC9zdGRpbnRfaC5tNAorICBtNC9zdGRpb19oLm00CisgIG00L3N0ZGxpYl9oLm00CisgIG00L3N0cGNweS5tNAorICBtNC9zdHJjaHJudWwubTQKKyAgbTQvc3RyZHVwLm00CisgIG00L3N0cmVycm9yLm00CisgIG00L3N0cmVycm9yX3IubTQKKyAgbTQvc3RyaW5nX2gubTQKKyAgbTQvc3RybmR1cC5tNAorICBtNC9zdHJubGVuLm00CisgIG00L3N0cnRvdWwubTQKKyAgbTQvc3RydmVyc2NtcC5tNAorICBtNC9zeXNfc29ja2V0X2gubTQKKyAgbTQvc3lzX3N0YXRfaC5tNAorICBtNC9zeXNfdHlwZXNfaC5tNAorICBtNC9zeXNfd2FpdF9oLm00CisgIG00L3RocmVhZGxpYi5tNAorICBtNC90aW1lX2gubTQKKyAgbTQvdWludG1heF90Lm00CisgIG00L3VuaXN0ZC1zYWZlci5tNAorICBtNC91bmlzdGRfaC5tNAorICBtNC91bmxvY2tlZC1pby5tNAorICBtNC92YXNucHJpbnRmLm00CisgIG00L3ZmcHJpbnRmLXBvc2l4Lm00CisgIG00L3Zpc2liaWxpdHkubTQKKyAgbTQvdnNucHJpbnRmLXBvc2l4Lm00CisgIG00L3ZzbnByaW50Zi5tNAorICBtNC92c3ByaW50Zi1wb3NpeC5tNAorICBtNC93YWl0LXByb2Nlc3MubTQKKyAgbTQvd2FpdHBpZC5tNAorICBtNC93YXJuLW9uLXVzZS5tNAorICBtNC93YXJuaW5ncy5tNAorICBtNC93Y2hhcl9oLm00CisgIG00L3djaGFyX3QubTQKKyAgbTQvd2N0eXBlX2gubTQKKyAgbTQvd2N3aWR0aC5tNAorICBtNC93aW50X3QubTQKKyAgbTQveGFsbG9jLm00CisgIG00L3hzaXplLm00CisgIG00L3hzdHJuZHVwLm00CisgIHRvcC9HTlVtYWtlZmlsZQorICB0b3AvUkVBRE1FLXJlbGVhc2UKKyAgdG9wL21haW50Lm1rCitdKQpkaWZmIC0tZ2l0IGEvbTQvZ251bGliLm00IGIvbTQvZ251bGliLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWNmMTAxLi4wMDAwMDAwCi0tLSBhL200L2dudWxpYi5tNAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLSMgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICJib290c3RyYXAiLgotQUNfREVGVU4oW0dOVUxJQl9BVVRPQ09ORl9TTklQUEVUXSxbCi0KLWdsX0RJUk5BTUUKLQotZ2xfRVJST1IKLQotCi1nbF9FWElURkFJTAotCi1kbmwgZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TIG11c3QgYmUgYWRkZWQgcXVpdGUgZWFybHkgdG8gY29uZmlndXJlLmFjLgotCi1nbF9HRVRPUFQKLQotQU1fR05VX0dFVFRFWFQoW2V4dGVybmFsXSkKLUFNX0dOVV9HRVRURVhUX1ZFUlNJT04oWzAuMTQuNV0pCi0KLQotZ2xfSEFSRF9MT0NBTEUKLQotZ2xfSEFTSAotCi0KLUFDX0ZVTkNfTUFMTE9DCi0KLWdsX01CU1dJRFRICi0KLWdsX09CU1RBQ0sKLQotZ2xfUVVPVEUKLQotZ2xfUVVPVEVBUkcKLQotQU1fU1REQk9PTF9ICi0KLWdsX1NURElPX1NBRkVSCi0KLWdsX0ZVTkNfU1RQQ1BZCi0KLWdsX0ZVTkNfU1RSRFVQCi0KLWdsX0ZVTkNfU1RSRVJST1IKLQotZ2xfRlVOQ19TVFJORFVQCi0KLWdsX0ZVTkNfU1RSTkxFTgotCi1nbF9GVU5DX1NUUlRPTAotCi1nbF9GVU5DX1NUUlRPVUwKLQotZ2xfRlVOQ19TVFJWRVJTQ01QCi0KLWdsX0hFQURFUl9VTklTVEQKLQotZ2xfVU5JU1REX1NBRkVSCi0KLWdsX0ZVTkNfR0xJQkNfVU5MT0NLRURfSU8KLQotCi1nbF9YQUxMT0MKLQotCi1nbF9YU1RSTkRVUAotCi1dKQpkaWZmIC0tZ2l0IGEvbTQvaGFyZC1sb2NhbGUubTQgYi9tNC9oYXJkLWxvY2FsZS5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQwYTc1NS4uMDAwMDAwMAotLS0gYS9tNC9oYXJkLWxvY2FsZS5tNAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSMgaGFyZC1sb2NhbGUubTQgc2VyaWFsIDYKLWRubCBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLWRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotZG5sIE5vIHByZXJlcXVpc2l0ZXMgb2YgbGliL2hhcmQtbG9jYWxlLmMuCi1BQ19ERUZVTihbZ2xfSEFSRF9MT0NBTEVdLAotWwotICBBQ19MSUJTT1VSQ0VTKFtoYXJkLWxvY2FsZS5jLCBoYXJkLWxvY2FsZS5oXSkKLSAgQUNfTElCT0JKKFtoYXJkLWxvY2FsZV0pCi1dKQpkaWZmIC0tZ2l0IGEvbTQvaGFzaC5tNCBiL200L2hhc2gubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0OGRkOTcuLjAwMDAwMDAKLS0tIGEvbTQvaGFzaC5tNAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLSMgaGFzaC5tNCBzZXJpYWwgNQotZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1kbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi1BQ19ERUZVTihbZ2xfSEFTSF0sCi1bCi0gIEFDX0xJQlNPVVJDRVMoW2hhc2guYywgaGFzaC5oXSkKLSAgQUNfTElCT0JKKFtoYXNoXSkKLQotICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvaGFzaC5jLgotICBBQ19SRVFVSVJFKFtBTV9TVERCT09MX0hdKQotXSkKZGlmZiAtLWdpdCBhL200L2ljb252Lm00IGIvbTQvaWNvbnYubTQKaW5kZXggNjU0YzQxNS4uNmE0NzIzNiAxMDA2NDQKLS0tIGEvbTQvaWNvbnYubTQKKysrIGIvbTQvaWNvbnYubTQKQEAgLTEsNSArMSw1IEBACi0jIGljb252Lm00IHNlcmlhbCBBTTQgKGdldHRleHQtMC4xMS4zKQotZG5sIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBpY29udi5tNCBzZXJpYWwgMTggKGdldHRleHQtMC4xOC4yKQorZG5sIENvcHlyaWdodCAoQykgMjAwMC0yMDAyLCAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KQEAgLTIxLDYgKzIxLDcgQEAKIFsKICAgZG5sIFNvbWUgc3lzdGVtcyBoYXZlIGljb252IGluIGxpYmMsIHNvbWUgaGF2ZSBpdCBpbiBsaWJpY29udiAoT1NGLzEgYW5kCiAgIGRubCB0aG9zZSB3aXRoIHRoZSBzdGFuZGFsb25lIHBvcnRhYmxlIEdOVSBsaWJpY29udiBpbnN0YWxsZWQpLgorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pIGRubCBmb3IgY3Jvc3MtY29tcGlsZXMKIAogICBkbmwgU2VhcmNoIGZvciBsaWJpY29udiBhbmQgZGVmaW5lIExJQklDT05WLCBMVExJQklDT05WIGFuZCBJTkNJQ09OVgogICBkbmwgYWNjb3JkaW5nbHkuCkBAIC0yOSwzNCArMzAsMTcwIEBACiAgIGRubCBBZGQgJElOQ0lDT05WIHRvIENQUEZMQUdTIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBmb2xsb3dpbmcgY2hlY2tzLAogICBkbmwgYmVjYXVzZSBpZiB0aGUgdXNlciBoYXMgaW5zdGFsbGVkIGxpYmljb252IGFuZCBub3QgZGlzYWJsZWQgaXRzIHVzZQogICBkbmwgdmlhIC0td2l0aG91dC1saWJpY29udi1wcmVmaXgsIGhlIHdhbnRzIHRvIHVzZSBpdC4gVGhlIGZpcnN0Ci0gIGRubCBBQ19UUllfTElOSyB3aWxsIHRoZW4gZmFpbCwgdGhlIHNlY29uZCBBQ19UUllfTElOSyB3aWxsIHN1Y2NlZWQuCisgIGRubCBBQ19MSU5LX0lGRUxTRSB3aWxsIHRoZW4gZmFpbCwgdGhlIHNlY29uZCBBQ19MSU5LX0lGRUxTRSB3aWxsIHN1Y2NlZWQuCiAgIGFtX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKICAgQUNfTElCX0FQUEVORFRPVkFSKFtDUFBGTEFHU10sIFskSU5DSUNPTlZdKQogCi0gIEFDX0NBQ0hFX0NIRUNLKGZvciBpY29udiwgYW1fY3ZfZnVuY19pY29udiwgWworICBBQ19DQUNIRV9DSEVDSyhbZm9yIGljb252XSwgW2FtX2N2X2Z1bmNfaWNvbnZdLCBbCiAgICAgYW1fY3ZfZnVuY19pY29udj0ibm8sIGNvbnNpZGVyIGluc3RhbGxpbmcgR05VIGxpYmljb252IgogICAgIGFtX2N2X2xpYl9pY29udj1ubwotICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8aWNvbnYuaD5dLAotICAgICAgW2ljb252X3QgY2QgPSBpY29udl9vcGVuKCIiLCIiKTsKLSAgICAgICBpY29udihjZCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICAgICBpY29udl9jbG9zZShjZCk7XSwKLSAgICAgIGFtX2N2X2Z1bmNfaWNvbnY9eWVzKQorICAgIEFDX0xJTktfSUZFTFNFKAorICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgIFtbCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8aWNvbnYuaD4KKyAgICAgICAgIF1dLAorICAgICAgICAgW1tpY29udl90IGNkID0gaWNvbnZfb3BlbigiIiwiIik7CisgICAgICAgICAgIGljb252KGNkLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgICAgICBpY29udl9jbG9zZShjZCk7XV0pXSwKKyAgICAgIFthbV9jdl9mdW5jX2ljb252PXllc10pCiAgICAgaWYgdGVzdCAiJGFtX2N2X2Z1bmNfaWNvbnYiICE9IHllczsgdGhlbgogICAgICAgYW1fc2F2ZV9MSUJTPSIkTElCUyIKICAgICAgIExJQlM9IiRMSUJTICRMSUJJQ09OViIKLSAgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8aWNvbnYuaD5dLAotICAgICAgICBbaWNvbnZfdCBjZCA9IGljb252X29wZW4oIiIsIiIpOwotICAgICAgICAgaWNvbnYoY2QsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAgICAgICBpY29udl9jbG9zZShjZCk7XSwKLSAgICAgICAgYW1fY3ZfbGliX2ljb252PXllcwotICAgICAgICBhbV9jdl9mdW5jX2ljb252PXllcykKKyAgICAgIEFDX0xJTktfSUZFTFNFKAorICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgICBbWworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGljb252Lmg+CisgICAgICAgICAgIF1dLAorICAgICAgICAgICBbW2ljb252X3QgY2QgPSBpY29udl9vcGVuKCIiLCIiKTsKKyAgICAgICAgICAgICBpY29udihjZCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICAgICAgICAgICBpY29udl9jbG9zZShjZCk7XV0pXSwKKyAgICAgICAgW2FtX2N2X2xpYl9pY29udj15ZXNdCisgICAgICAgIFthbV9jdl9mdW5jX2ljb252PXllc10pCiAgICAgICBMSUJTPSIkYW1fc2F2ZV9MSUJTIgogICAgIGZpCiAgIF0pCiAgIGlmIHRlc3QgIiRhbV9jdl9mdW5jX2ljb252IiA9IHllczsgdGhlbgotICAgIEFDX0RFRklORShIQVZFX0lDT05WLCAxLCBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpY29udigpIGZ1bmN0aW9uLl0pCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3b3JraW5nIGljb252XSwgW2FtX2N2X2Z1bmNfaWNvbnZfd29ya3NdLCBbCisgICAgICBkbmwgVGhpcyB0ZXN0cyBhZ2FpbnN0IGJ1Z3MgaW4gQUlYIDUuMSwgQUlYIDYuMS4uNy4xLCBIUC1VWCAxMS4xMSwKKyAgICAgIGRubCBTb2xhcmlzIDEwLgorICAgICAgYW1fc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgIGlmIHRlc3QgJGFtX2N2X2xpYl9pY29udiA9IHllczsgdGhlbgorICAgICAgICBMSUJTPSIkTElCUyAkTElCSUNPTlYiCisgICAgICBmaQorICAgICAgQUNfUlVOX0lGRUxTRSgKKyAgICAgICAgW0FDX0xBTkdfU09VUkNFKFtbCisjaW5jbHVkZSA8aWNvbnYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KK2ludCBtYWluICgpCit7CisgIGludCByZXN1bHQgPSAwOworICAvKiBUZXN0IGFnYWluc3QgQUlYIDUuMSBidWc6IEZhaWx1cmVzIGFyZSBub3QgZGlzdGluZ3Vpc2hhYmxlIGZyb20gc3VjY2Vzc2Z1bAorICAgICByZXR1cm5zLiAgKi8KKyAgeworICAgIGljb252X3QgY2RfdXRmOF90b184ODU5MSA9IGljb252X29wZW4gKCJJU084ODU5LTEiLCAiVVRGLTgiKTsKKyAgICBpZiAoY2RfdXRmOF90b184ODU5MSAhPSAoaWNvbnZfdCkoLTEpKQorICAgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBpbnB1dFtdID0gIlwzNDJcMjAyXDI1NCI7IC8qIEVVUk8gU0lHTiAqLworICAgICAgICBjaGFyIGJ1ZlsxMF07CisgICAgICAgIGNvbnN0IGNoYXIgKmlucHRyID0gaW5wdXQ7CisgICAgICAgIHNpemVfdCBpbmJ5dGVzbGVmdCA9IHN0cmxlbiAoaW5wdXQpOworICAgICAgICBjaGFyICpvdXRwdHIgPSBidWY7CisgICAgICAgIHNpemVfdCBvdXRieXRlc2xlZnQgPSBzaXplb2YgKGJ1Zik7CisgICAgICAgIHNpemVfdCByZXMgPSBpY29udiAoY2RfdXRmOF90b184ODU5MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikgJmlucHRyLCAmaW5ieXRlc2xlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dHB0ciwgJm91dGJ5dGVzbGVmdCk7CisgICAgICAgIGlmIChyZXMgPT0gMCkKKyAgICAgICAgICByZXN1bHQgfD0gMTsKKyAgICAgICAgaWNvbnZfY2xvc2UgKGNkX3V0ZjhfdG9fODg1OTEpOworICAgICAgfQorICB9CisgIC8qIFRlc3QgYWdhaW5zdCBTb2xhcmlzIDEwIGJ1ZzogRmFpbHVyZXMgYXJlIG5vdCBkaXN0aW5ndWlzaGFibGUgZnJvbQorICAgICBzdWNjZXNzZnVsIHJldHVybnMuICAqLworICB7CisgICAgaWNvbnZfdCBjZF9hc2NpaV90b184ODU5MSA9IGljb252X29wZW4gKCJJU084ODU5LTEiLCAiNjQ2Iik7CisgICAgaWYgKGNkX2FzY2lpX3RvXzg4NTkxICE9IChpY29udl90KSgtMSkpCisgICAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGlucHV0W10gPSAiXDI2MyI7CisgICAgICAgIGNoYXIgYnVmWzEwXTsKKyAgICAgICAgY29uc3QgY2hhciAqaW5wdHIgPSBpbnB1dDsKKyAgICAgICAgc2l6ZV90IGluYnl0ZXNsZWZ0ID0gc3RybGVuIChpbnB1dCk7CisgICAgICAgIGNoYXIgKm91dHB0ciA9IGJ1ZjsKKyAgICAgICAgc2l6ZV90IG91dGJ5dGVzbGVmdCA9IHNpemVvZiAoYnVmKTsKKyAgICAgICAgc2l6ZV90IHJlcyA9IGljb252IChjZF9hc2NpaV90b184ODU5MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikgJmlucHRyLCAmaW5ieXRlc2xlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dHB0ciwgJm91dGJ5dGVzbGVmdCk7CisgICAgICAgIGlmIChyZXMgPT0gMCkKKyAgICAgICAgICByZXN1bHQgfD0gMjsKKyAgICAgICAgaWNvbnZfY2xvc2UgKGNkX2FzY2lpX3RvXzg4NTkxKTsKKyAgICAgIH0KKyAgfQorICAvKiBUZXN0IGFnYWluc3QgQUlYIDYuMS4uNy4xIGJ1ZzogQnVmZmVyIG92ZXJydW4uICAqLworICB7CisgICAgaWNvbnZfdCBjZF84ODU5MV90b191dGY4ID0gaWNvbnZfb3BlbiAoIlVURi04IiwgIklTTy04ODU5LTEiKTsKKyAgICBpZiAoY2RfODg1OTFfdG9fdXRmOCAhPSAoaWNvbnZfdCkoLTEpKQorICAgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBpbnB1dFtdID0gIlwzMDQiOworICAgICAgICBzdGF0aWMgY2hhciBidWZbMl0gPSB7IChjaGFyKTB4REUsIChjaGFyKTB4QUQgfTsKKyAgICAgICAgY29uc3QgY2hhciAqaW5wdHIgPSBpbnB1dDsKKyAgICAgICAgc2l6ZV90IGluYnl0ZXNsZWZ0ID0gMTsKKyAgICAgICAgY2hhciAqb3V0cHRyID0gYnVmOworICAgICAgICBzaXplX3Qgb3V0Ynl0ZXNsZWZ0ID0gMTsKKyAgICAgICAgc2l6ZV90IHJlcyA9IGljb252IChjZF84ODU5MV90b191dGY4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICoqKSAmaW5wdHIsICZpbmJ5dGVzbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0cHRyLCAmb3V0Ynl0ZXNsZWZ0KTsKKyAgICAgICAgaWYgKHJlcyAhPSAoc2l6ZV90KSgtMSkgfHwgb3V0cHRyIC0gYnVmID4gMSB8fCBidWZbMV0gIT0gKGNoYXIpMHhBRCkKKyAgICAgICAgICByZXN1bHQgfD0gNDsKKyAgICAgICAgaWNvbnZfY2xvc2UgKGNkXzg4NTkxX3RvX3V0ZjgpOworICAgICAgfQorICB9CisjaWYgMCAvKiBUaGlzIGJ1ZyBjb3VsZCBiZSB3b3JrZWQgYXJvdW5kIGJ5IHRoZSBjYWxsZXIuICAqLworICAvKiBUZXN0IGFnYWluc3QgSFAtVVggMTEuMTEgYnVnOiBQb3NpdGl2ZSByZXR1cm4gdmFsdWUgaW5zdGVhZCBvZiAwLiAgKi8KKyAgeworICAgIGljb252X3QgY2RfODg1OTFfdG9fdXRmOCA9IGljb252X29wZW4gKCJ1dGY4IiwgImlzbzg4NTkxIik7CisgICAgaWYgKGNkXzg4NTkxX3RvX3V0ZjggIT0gKGljb252X3QpKC0xKSkKKyAgICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgaW5wdXRbXSA9ICJcMzA0cmdlciBtaXQgYlwzNjZzZW4gQlwzNzRiY2hlbiBvaG5lIEF1Z2VubWFcMzM3IjsKKyAgICAgICAgY2hhciBidWZbNTBdOworICAgICAgICBjb25zdCBjaGFyICppbnB0ciA9IGlucHV0OworICAgICAgICBzaXplX3QgaW5ieXRlc2xlZnQgPSBzdHJsZW4gKGlucHV0KTsKKyAgICAgICAgY2hhciAqb3V0cHRyID0gYnVmOworICAgICAgICBzaXplX3Qgb3V0Ynl0ZXNsZWZ0ID0gc2l6ZW9mIChidWYpOworICAgICAgICBzaXplX3QgcmVzID0gaWNvbnYgKGNkXzg4NTkxX3RvX3V0ZjgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopICZpbnB0ciwgJmluYnl0ZXNsZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRwdHIsICZvdXRieXRlc2xlZnQpOworICAgICAgICBpZiAoKGludClyZXMgPiAwKQorICAgICAgICAgIHJlc3VsdCB8PSA4OworICAgICAgICBpY29udl9jbG9zZSAoY2RfODg1OTFfdG9fdXRmOCk7CisgICAgICB9CisgIH0KKyNlbmRpZgorICAvKiBUZXN0IGFnYWluc3QgSFAtVVggMTEuMTEgYnVnOiBObyBjb252ZXJ0ZXIgZnJvbSBFVUMtSlAgdG8gVVRGLTggaXMKKyAgICAgcHJvdmlkZWQuICAqLworICBpZiAoLyogVHJ5IHN0YW5kYXJkaXplZCBuYW1lcy4gICovCisgICAgICBpY29udl9vcGVuICgiVVRGLTgiLCAiRVVDLUpQIikgPT0gKGljb252X3QpKC0xKQorICAgICAgLyogVHJ5IElSSVgsIE9TRi8xIG5hbWVzLiAgKi8KKyAgICAgICYmIGljb252X29wZW4gKCJVVEYtOCIsICJldWNKUCIpID09IChpY29udl90KSgtMSkKKyAgICAgIC8qIFRyeSBBSVggbmFtZXMuICAqLworICAgICAgJiYgaWNvbnZfb3BlbiAoIlVURi04IiwgIklCTS1ldWNKUCIpID09IChpY29udl90KSgtMSkKKyAgICAgIC8qIFRyeSBIUC1VWCBuYW1lcy4gICovCisgICAgICAmJiBpY29udl9vcGVuICgidXRmOCIsICJldWNKUCIpID09IChpY29udl90KSgtMSkpCisgICAgcmVzdWx0IHw9IDE2OworICByZXR1cm4gcmVzdWx0OworfV1dKV0sCisgICAgICAgIFthbV9jdl9mdW5jX2ljb252X3dvcmtzPXllc10sCisgICAgICAgIFthbV9jdl9mdW5jX2ljb252X3dvcmtzPW5vXSwKKyAgICAgICAgWworY2hhbmdlcXVvdGUoLClkbmwKKyAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICBhaXgqIHwgaHB1eCopIGFtX2N2X2Z1bmNfaWNvbnZfd29ya3M9Imd1ZXNzaW5nIG5vIiA7OworICAgICAgICAgICAqKSAgICAgICAgICAgIGFtX2N2X2Z1bmNfaWNvbnZfd29ya3M9Imd1ZXNzaW5nIHllcyIgOzsKKyAgICAgICAgIGVzYWMKK2NoYW5nZXF1b3RlKFssXSlkbmwKKyAgICAgICAgXSkKKyAgICAgIExJQlM9IiRhbV9zYXZlX0xJQlMiCisgICAgXSkKKyAgICBjYXNlICIkYW1fY3ZfZnVuY19pY29udl93b3JrcyIgaW4KKyAgICAgICpubykgYW1fZnVuY19pY29udj1ubyBhbV9jdl9saWJfaWNvbnY9bm8gOzsKKyAgICAgICopICAgYW1fZnVuY19pY29udj15ZXMgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBhbV9mdW5jX2ljb252PW5vIGFtX2N2X2xpYl9pY29udj1ubworICBmaQorICBpZiB0ZXN0ICIkYW1fZnVuY19pY29udiIgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoW0hBVkVfSUNPTlZdLCBbMV0sCisgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpY29udigpIGZ1bmN0aW9uIGFuZCBpdCB3b3Jrcy5dKQogICBmaQogICBpZiB0ZXN0ICIkYW1fY3ZfbGliX2ljb252IiA9IHllczsgdGhlbgogICAgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGxpbmsgd2l0aCBsaWJpY29udl0pCkBAIC02OCwzNCArMjA1LDY0IEBACiAgICAgTElCSUNPTlY9CiAgICAgTFRMSUJJQ09OVj0KICAgZmkKLSAgQUNfU1VCU1QoTElCSUNPTlYpCi0gIEFDX1NVQlNUKExUTElCSUNPTlYpCisgIEFDX1NVQlNUKFtMSUJJQ09OVl0pCisgIEFDX1NVQlNUKFtMVExJQklDT05WXSkKIF0pCiAKLUFDX0RFRlVOKFtBTV9JQ09OVl0sCitkbmwgRGVmaW5lIEFNX0lDT05WIHVzaW5nIEFDX0RFRlVOX09OQ0UgZm9yIEF1dG9jb25mID49IDIuNjQsIGluIG9yZGVyIHRvCitkbmwgYXZvaWQgd2FybmluZ3MgbGlrZQorZG5sICJ3YXJuaW5nOiBBQ19SRVFVSVJFOiBgQU1fSUNPTlYnIHdhcyBleHBhbmRlZCBiZWZvcmUgaXQgd2FzIHJlcXVpcmVkIi4KK2RubCBUaGlzIGlzIHRyaWNreSBiZWNhdXNlIG9mIHRoZSB3YXkgJ2FjbG9jYWwnIGlzIGltcGxlbWVudGVkOgorZG5sIC0gSXQgcmVxdWlyZXMgZGVmaW5pbmcgYW4gYXV4aWxpYXJ5IG1hY3JvIHdob3NlIG5hbWUgZW5kcyBpbiBBQ19ERUZVTi4KK2RubCAgIE90aGVyd2lzZSBhY2xvY2FsJ3MgaW5pdGlhbCBzY2FuIHBhc3Mgd291bGQgbWlzcyB0aGUgbWFjcm8gZGVmaW5pdGlvbi4KK2RubCAtIEl0IHJlcXVpcmVzIGEgbGluZSBicmVhayBpbnNpZGUgdGhlIEFDX0RFRlVOX09OQ0UgYW5kIEFDX0RFRlVOIGV4cGFuc2lvbnMuCitkbmwgICBPdGhlcndpc2UgYWNsb2NhbCB3b3VsZCBlbWl0IG1hbnkgIlVzZSBvZiB1bmluaXRpYWxpemVkIHZhbHVlICQxIgorZG5sICAgd2FybmluZ3MuCittNF9kZWZpbmUoW2dsX2ljb252X0FDX0RFRlVOXSwKKyAgbTRfdmVyc2lvbl9wcmVyZXEoWzIuNjRdLAorICAgIFtbQUNfREVGVU5fT05DRSgKKyAgICAgICAgWyQxXSwgWyQyXSldXSwKKyAgICBbbTRfaWZkZWYoW2dsXzAwR05VTElCXSwKKyAgICAgICBbW0FDX0RFRlVOX09OQ0UoCisgICAgICAgICAgIFskMV0sIFskMl0pXV0sCisgICAgICAgW1tBQ19ERUZVTigKKyAgICAgICAgICAgWyQxXSwgWyQyXSldXSldKSkKK2dsX2ljb252X0FDX0RFRlVOKFtBTV9JQ09OVl0sCiBbCiAgIEFNX0lDT05WX0xJTksKICAgaWYgdGVzdCAiJGFtX2N2X2Z1bmNfaWNvbnYiID0geWVzOyB0aGVuCiAgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgaWNvbnYgZGVjbGFyYXRpb25dKQotICAgIEFDX0NBQ0hFX1ZBTChhbV9jdl9wcm90b19pY29udiwgWwotICAgICAgQUNfVFJZX0NPTVBJTEUoWworICAgIEFDX0NBQ0hFX1ZBTChbYW1fY3ZfcHJvdG9faWNvbnZdLCBbCisgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgW1sKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxpY29udi5oPgogZXh0ZXJuCiAjaWZkZWYgX19jcGx1c3BsdXMKICJDIgogI2VuZGlmCi0jaWYgZGVmaW5lZChfX1NURENfXykgfHwgZGVmaW5lZChfX2NwbHVzcGx1cykKKyNpZiBkZWZpbmVkKF9fU1REQ19fKSB8fCBkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKF9fY3BsdXNwbHVzKQogc2l6ZV90IGljb252IChpY29udl90IGNkLCBjaGFyICogKmluYnVmLCBzaXplX3QgKmluYnl0ZXNsZWZ0LCBjaGFyICogKm91dGJ1Ziwgc2l6ZV90ICpvdXRieXRlc2xlZnQpOwogI2Vsc2UKIHNpemVfdCBpY29udigpOwogI2VuZGlmCi1dLCBbXSwgYW1fY3ZfcHJvdG9faWNvbnZfYXJnMT0iIiwgYW1fY3ZfcHJvdG9faWNvbnZfYXJnMT0iY29uc3QiKQorICAgICAgICAgICBdXSwKKyAgICAgICAgICAgW1tdXSldLAorICAgICAgICBbYW1fY3ZfcHJvdG9faWNvbnZfYXJnMT0iIl0sCisgICAgICAgIFthbV9jdl9wcm90b19pY29udl9hcmcxPSJjb25zdCJdKQogICAgICAgYW1fY3ZfcHJvdG9faWNvbnY9ImV4dGVybiBzaXplX3QgaWNvbnYgKGljb252X3QgY2QsICRhbV9jdl9wcm90b19pY29udl9hcmcxIGNoYXIgKiAqaW5idWYsIHNpemVfdCAqaW5ieXRlc2xlZnQsIGNoYXIgKiAqb3V0YnVmLCBzaXplX3QgKm91dGJ5dGVzbGVmdCk7Il0pCiAgICAgYW1fY3ZfcHJvdG9faWNvbnY9YGVjaG8gIlskXWFtX2N2X3Byb3RvX2ljb252IiB8IHRyIC1zICcgJyB8IHNlZCAtZSAncy8oIC8oLydgCi0gICAgQUNfTVNHX1JFU1VMVChbJF17YWNfdDotCi0gICAgICAgICB9WyRdYW1fY3ZfcHJvdG9faWNvbnYpCi0gICAgQUNfREVGSU5FX1VOUVVPVEVEKElDT05WX0NPTlNULCAkYW1fY3ZfcHJvdG9faWNvbnZfYXJnMSwKKyAgICBBQ19NU0dfUkVTVUxUKFsKKyAgICAgICAgICRhbV9jdl9wcm90b19pY29udl0pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtJQ09OVl9DT05TVF0sIFskYW1fY3ZfcHJvdG9faWNvbnZfYXJnMV0sCiAgICAgICBbRGVmaW5lIGFzIGNvbnN0IGlmIHRoZSBkZWNsYXJhdGlvbiBvZiBpY29udigpIG5lZWRzIGNvbnN0Ll0pCisgICAgZG5sIEFsc28gc3Vic3RpdHV0ZSBJQ09OVl9DT05TVCBpbiB0aGUgZ251bGliIGdlbmVyYXRlZCA8aWNvbnYuaD4uCisgICAgbTRfaWZkZWYoW2dsX0lDT05WX0hfREVGQVVMVFNdLAorICAgICAgW0FDX1JFUVVJUkUoW2dsX0lDT05WX0hfREVGQVVMVFNdKQorICAgICAgIGlmIHRlc3QgLW4gIiRhbV9jdl9wcm90b19pY29udl9hcmcxIjsgdGhlbgorICAgICAgICAgSUNPTlZfQ09OU1Q9ImNvbnN0IgorICAgICAgIGZpCisgICAgICBdKQogICBmaQogXSkKZGlmZiAtLWdpdCBhL200L2luY2x1ZGVfbmV4dC5tNCBiL200L2luY2x1ZGVfbmV4dC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjBhMjYxCi0tLSAvZGV2L251bGwKKysrIGIvbTQvaW5jbHVkZV9uZXh0Lm00CkBAIC0wLDAgKzEsMjcwIEBACisjIGluY2x1ZGVfbmV4dC5tNCBzZXJpYWwgMjMKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgRnJvbSBQYXVsIEVnZ2VydCBhbmQgRGVyZWsgUHJpY2UuCisKK2RubCBTZXRzIElOQ0xVREVfTkVYVCBhbmQgUFJBR01BX1NZU1RFTV9IRUFERVIuCitkbmwKK2RubCBJTkNMVURFX05FWFQgZXhwYW5kcyB0byAnaW5jbHVkZV9uZXh0JyBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgaXQsIG9yIHRvCitkbmwgJ2luY2x1ZGUnIG90aGVyd2lzZS4KK2RubAorZG5sIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkUgZXhwYW5kcyB0byAnaW5jbHVkZV9uZXh0JyBpZiB0aGUgY29tcGlsZXIKK2RubCBzdXBwb3J0cyBpdCBpbiB0aGUgc3BlY2lhbCBjYXNlIHRoYXQgaXQgaXMgdGhlIGZpcnN0IGluY2x1ZGUgZGlyZWN0aXZlIGluCitkbmwgdGhlIGdpdmVuIGZpbGUsIG9yIHRvICdpbmNsdWRlJyBvdGhlcndpc2UuCitkbmwKK2RubCBQUkFHTUFfU1lTVEVNX0hFQURFUiBjYW4gYmUgdXNlZCBpbiBmaWxlcyB0aGF0IGNvbnRhaW4gI2luY2x1ZGVfbmV4dCwKK2RubCBzbyBhcyB0byBhdm9pZCBHQ0Mgd2FybmluZ3Mgd2hlbiB0aGUgZ2NjIG9wdGlvbiAtcGVkYW50aWMgaXMgdXNlZC4KK2RubCAnI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcicgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBpZiB0aGUgZmlsZSB3YXMgZm91bmQKK2RubCB0aHJvdWdoIHRoZSBpbmNsdWRlIHNlYXJjaCBwYXRoIHNwZWNpZmllZCB3aXRoICctaXN5c3RlbScgb3B0aW9ucyAoYXMKK2RubCBvcHBvc2VkIHRvIHRoZSBzZWFyY2ggcGF0aCBzcGVjaWZpZWQgd2l0aCAnLUknIG9wdGlvbnMpLiBOYW1lbHksIGdjYworZG5sIGRvZXMgbm90IHdhcm4gYWJvdXQgc29tZSB0aGluZ3MsIGFuZCBvbiBzb21lIHN5c3RlbXMgKFNvbGFyaXMgYW5kIEludGVyaXgpCitkbmwgX19TVERDX18gZXZhbHVhdGVzIHRvIDAgaW5zdGVhZCBvZiB0byAxLiBUaGUgbGF0dGVyIGlzIGFuIHVuZGVzaXJlZCBzaWRlCitkbmwgZWZmZWN0OyB3ZSBhcmUgdGhlcmVmb3JlIGNhcmVmdWwgdG8gdXNlICdkZWZpbmVkIF9fU1REQ19fJyBvciAnMScgaW5zdGVhZAorZG5sIG9mIHBsYWluICdfX1NURENfXycuCitkbmwKK2RubCBQUkFHTUFfQ09MVU1OUyBjYW4gYmUgdXNlZCBpbiBmaWxlcyB0aGF0IG92ZXJyaWRlIHN5c3RlbSBoZWFkZXIgZmlsZXMsIHNvCitkbmwgYXMgdG8gYXZvaWQgY29tcGlsYXRpb24gZXJyb3JzIG9uIEhQIE5vblN0b3Agc3lzdGVtcyB3aGVuIHRoZSBnbnVsaWIgZmlsZQorZG5sIGlzIGluY2x1ZGVkIGJ5IGEgc3lzdGVtIGhlYWRlciBmaWxlIHRoYXQgZG9lcyBhICIjcHJhZ21hIENPTFVNTlMgODAiICh3aGljaAorZG5sIGhhcyB0aGUgZWZmZWN0IG9mIHRydW5jYXRpbmcgdGhlIGxpbmVzIG9mIHRoYXQgZmlsZSBhbmQgYWxsIGZpbGVzIHRoYXQgaXQKK2RubCBpbmNsdWRlcyB0byA4MCBjb2x1bW5zKSBhbmQgdGhlIGdudWxpYiBmaWxlIGhhcyBsaW5lcyBsb25nZXIgdGhhbiA4MAorZG5sIGNvbHVtbnMuCisKK0FDX0RFRlVOKFtnbF9JTkNMVURFX05FWFRdLAorWworICBBQ19MQU5HX1BSRVBST0NfUkVRVUlSRSgpCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBwcmVwcm9jZXNzb3Igc3VwcG9ydHMgaW5jbHVkZV9uZXh0XSwKKyAgICBbZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHRdLAorICAgIFtybSAtcmYgY29uZnRlc3RkMWEgY29uZnRlc3RkMWIgY29uZnRlc3RkMgorICAgICBta2RpciBjb25mdGVzdGQxYSBjb25mdGVzdGQxYiBjb25mdGVzdGQyCisgICAgIGRubCBJQk0gQyA5LjAsIDEwLjEgKG9yaWdpbmFsIHZlcnNpb25zLCBwcmlvciB0byB0aGUgMjAwOS0wMSB1cGRhdGVzKSBvbgorICAgICBkbmwgQUlYIDYuMSBzdXBwb3J0IGluY2x1ZGVfbmV4dCB3aGVuIHVzZWQgYXMgZmlyc3QgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZQorICAgICBkbmwgaW4gYSBmaWxlLCBidXQgbm90IHdoZW4gcHJlY2VkZWQgYnkgYW5vdGhlciBpbmNsdWRlIGRpcmVjdGl2ZS4gQ2hlY2sKKyAgICAgZG5sIGZvciB0aGlzIGJ1ZyBieSBpbmNsdWRpbmcgPHN0ZGlvLmg+LgorICAgICBkbmwgQWRkaXRpb25hbGx5LCB3aXRoIHRoaXMgc2FtZSBjb21waWxlciwgaW5jbHVkZV9uZXh0IGlzIGEgbm8tb3Agd2hlbgorICAgICBkbmwgdXNlZCBpbiBhIGhlYWRlciBmaWxlIHRoYXQgd2FzIGluY2x1ZGVkIGJ5IHNwZWNpZnlpbmcgaXRzIGFic29sdXRlCisgICAgIGRubCBmaWxlIG5hbWUuIERlc3BpdGUgdGhlc2UgdHdvIGJ1Z3MsIGluY2x1ZGVfbmV4dCBpcyB1c2VkIGluIHRoZQorICAgICBkbmwgY29tcGlsZXIncyA8bWF0aC5oPi4gQnkgdmlydHVlIG9mIHRoZSBzZWNvbmQgYnVnLCB3ZSBuZWVkIHRvIHVzZQorICAgICBkbmwgaW5jbHVkZV9uZXh0IGFzIHdlbGwgaW4gdGhpcyBjYXNlLgorICAgICBjYXQgPDxFT0YgPiBjb25mdGVzdGQxYS9jb25mdGVzdC5oCisjZGVmaW5lIERFRklORURfSU5fQ09ORlRFU1REMQorI2luY2x1ZGVfbmV4dCA8Y29uZnRlc3QuaD4KKyNpZmRlZiBERUZJTkVEX0lOX0NPTkZURVNURDIKK2ludCBmb287CisjZWxzZQorI2Vycm9yICJpbmNsdWRlX25leHQgZG9lc24ndCB3b3JrIgorI2VuZGlmCitFT0YKKyAgICAgY2F0IDw8RU9GID4gY29uZnRlc3RkMWIvY29uZnRlc3QuaAorI2RlZmluZSBERUZJTkVEX0lOX0NPTkZURVNURDEKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGVfbmV4dCA8Y29uZnRlc3QuaD4KKyNpZmRlZiBERUZJTkVEX0lOX0NPTkZURVNURDIKK2ludCBmb287CisjZWxzZQorI2Vycm9yICJpbmNsdWRlX25leHQgZG9lc24ndCB3b3JrIgorI2VuZGlmCitFT0YKKyAgICAgY2F0IDw8RU9GID4gY29uZnRlc3RkMi9jb25mdGVzdC5oCisjaWZuZGVmIERFRklORURfSU5fQ09ORlRFU1REMQorI2Vycm9yICJpbmNsdWRlX25leHQgdGVzdCBkb2Vzbid0IHdvcmsiCisjZW5kaWYKKyNkZWZpbmUgREVGSU5FRF9JTl9DT05GVEVTVEQyCitFT0YKKyAgICAgZ2xfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgICBDUFBGTEFHUz0iJGdsX3NhdmVfQ1BQRkxBR1MgLUljb25mdGVzdGQxYiAtSWNvbmZ0ZXN0ZDIiCitkbmwgV2UgaW50ZW50aW9uYWxseSBhdm9pZCB1c2luZyBBQ19MQU5HX1NPVVJDRSBoZXJlLgorICAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19ERUZJTkVTX1BST1ZJREVEWyNpbmNsdWRlIDxjb25mdGVzdC5oPl1dLAorICAgICAgIFtnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dD15ZXNdLAorICAgICAgIFtDUFBGTEFHUz0iJGdsX3NhdmVfQ1BQRkxBR1MgLUljb25mdGVzdGQxYSAtSWNvbmZ0ZXN0ZDIiCisgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX0RFRklORVNfUFJPVklERURbI2luY2x1ZGUgPGNvbmZ0ZXN0Lmg+XV0sCisgICAgICAgICAgW2dsX2N2X2hhdmVfaW5jbHVkZV9uZXh0PWJ1Z2d5XSwKKyAgICAgICAgICBbZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQ9bm9dKQorICAgICAgIF0pCisgICAgIENQUEZMQUdTPSIkZ2xfc2F2ZV9DUFBGTEFHUyIKKyAgICAgcm0gLXJmIGNvbmZ0ZXN0ZDFhIGNvbmZ0ZXN0ZDFiIGNvbmZ0ZXN0ZDIKKyAgICBdKQorICBQUkFHTUFfU1lTVEVNX0hFQURFUj0KKyAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXM7IHRoZW4KKyAgICBJTkNMVURFX05FWFQ9aW5jbHVkZV9uZXh0CisgICAgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT1pbmNsdWRlX25leHQKKyAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgUFJBR01BX1NZU1RFTV9IRUFERVI9JyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXInCisgICAgZmkKKyAgZWxzZQorICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0gYnVnZ3k7IHRoZW4KKyAgICAgIElOQ0xVREVfTkVYVD1pbmNsdWRlCisgICAgICBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPWluY2x1ZGVfbmV4dAorICAgIGVsc2UKKyAgICAgIElOQ0xVREVfTkVYVD1pbmNsdWRlCisgICAgICBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPWluY2x1ZGUKKyAgICBmaQorICBmaQorICBBQ19TVUJTVChbSU5DTFVERV9ORVhUXSkKKyAgQUNfU1VCU1QoW0lOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVdKQorICBBQ19TVUJTVChbUFJBR01BX1NZU1RFTV9IRUFERVJdKQorICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBzeXN0ZW0gaGVhZGVyIGZpbGVzIGxpbWl0IHRoZSBsaW5lIGxlbmd0aF0sCisgICAgW2dsX2N2X3ByYWdtYV9jb2x1bW5zXSwKKyAgICBbZG5sIEhQIE5vblN0b3Agc3lzdGVtcywgd2hpY2ggZGVmaW5lIF9fVEFOREVNLCBoYXZlIHRoaXMgbWlzZmVhdHVyZS4KKyAgICAgQUNfRUdSRVBfQ1BQKFtjaG9rZSBtZV0sCisgICAgICAgWworI2lmZGVmIF9fVEFOREVNCitjaG9rZSBtZQorI2VuZGlmCisgICAgICAgXSwKKyAgICAgICBbZ2xfY3ZfcHJhZ21hX2NvbHVtbnM9eWVzXSwKKyAgICAgICBbZ2xfY3ZfcHJhZ21hX2NvbHVtbnM9bm9dKQorICAgIF0pCisgIGlmIHRlc3QgJGdsX2N2X3ByYWdtYV9jb2x1bW5zID0geWVzOyB0aGVuCisgICAgUFJBR01BX0NPTFVNTlM9IiNwcmFnbWEgQ09MVU1OUyAxMDAwMCIKKyAgZWxzZQorICAgIFBSQUdNQV9DT0xVTU5TPQorICBmaQorICBBQ19TVUJTVChbUFJBR01BX0NPTFVNTlNdKQorXSkKKworIyBnbF9DSEVDS19ORVhUX0hFQURFUlMoSEVBREVSMSBIRUFERVIyIC4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZvciBlYWNoIGFyZyBmb28uaCwgaWYgI2luY2x1ZGVfbmV4dCB3b3JrcywgZGVmaW5lIE5FWFRfRk9PX0ggdG8gYmUKKyMgJzxmb28uaD4nOyBvdGhlcndpc2UgZGVmaW5lIGl0IHRvIGJlCisjICciLy8vdXNyL2luY2x1ZGUvZm9vLmgiJywgb3Igd2hhdGV2ZXIgb3RoZXIgYWJzb2x1dGUgZmlsZSBuYW1lIGlzIHN1aXRhYmxlLgorIyBBbHNvLCBpZiAjaW5jbHVkZV9uZXh0IHdvcmtzIGFzIGZpcnN0IHByZXByb2Nlc3NpbmcgZGlyZWN0aXZlIGluIGEgZmlsZSwKKyMgZGVmaW5lIE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX0ZPT19IIHRvIGJlICc8Zm9vLmg+Jzsgb3RoZXJ3aXNlIGRlZmluZSBpdCB0bworIyBiZQorIyAnIi8vL3Vzci9pbmNsdWRlL2Zvby5oIicsIG9yIHdoYXRldmVyIG90aGVyIGFic29sdXRlIGZpbGUgbmFtZSBpcyBzdWl0YWJsZS4KKyMgVGhhdCB3YXksIGEgaGVhZGVyIGZpbGUgd2l0aCB0aGUgZm9sbG93aW5nIGxpbmU6CisjICAgICAgICNASU5DTFVERV9ORVhUQCBATkVYVF9GT09fSEAKKyMgb3IKKyMgICAgICAgI0BJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFQCBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRk9PX0hACisjIGJlaGF2ZXMgKGFmdGVyIHNlZCBzdWJzdGl0dXRpb24pIGFzIGlmIGl0IGNvbnRhaW5lZAorIyAgICAgICAjaW5jbHVkZV9uZXh0IDxmb28uaD4KKyMgZXZlbiBpZiB0aGUgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBpbmNsdWRlX25leHQuCisjIFRoZSB0aHJlZSAiLy8vIiBhcmUgdG8gcGFjaWZ5IFN1biBDIDUuOCwgd2hpY2ggb3RoZXJ3aXNlIHdvdWxkIHNheQorIyAid2FybmluZzogI2luY2x1ZGUgb2YgL3Vzci9pbmNsdWRlLy4uLiBtYXkgYmUgbm9uLXBvcnRhYmxlIi4KKyMgVXNlICciIicsIG5vdCAnPD4nLCBzbyB0aGF0IHRoZSAvLy8gY2Fubm90IGJlIGNvbmZ1c2VkIHdpdGggYSBDOTkgY29tbWVudC4KKyMgTm90ZTogVGhpcyBtYWNybyBhc3N1bWVzIHRoYXQgdGhlIGhlYWRlciBmaWxlIGlzIG5vdCBlbXB0eSBhZnRlcgorIyBwcmVwcm9jZXNzaW5nLCBpLmUuIGl0IGRvZXMgbm90IG9ubHkgZGVmaW5lIHByZXByb2Nlc3NvciBtYWNyb3MgYnV0IGFsc28KKyMgcHJvdmlkZXMgc29tZSB0eXBlL2VudW0gZGVmaW5pdGlvbnMgb3IgZnVuY3Rpb24vdmFyaWFibGUgZGVjbGFyYXRpb25zLgorIworIyBUaGlzIG1hY3JvIGFsc28gY2hlY2tzIHdoZXRoZXIgZWFjaCBoZWFkZXIgZXhpc3RzLCBieSBpbnZva2luZworIyBBQ19DSEVDS19IRUFERVJTX09OQ0Ugb3IgQUNfQ0hFQ0tfSEVBREVSUyBvbiBlYWNoIGFyZ3VtZW50LgorQUNfREVGVU4oW2dsX0NIRUNLX05FWFRfSEVBREVSU10sCitbCisgIGdsX05FWFRfSEVBREVSU19JTlRFUk5BTChbJDFdLCBbY2hlY2tdKQorXSkKKworIyBnbF9ORVhUX0hFQURFUlMoSEVBREVSMSBIRUFERVIyIC4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExpa2UgZ2xfQ0hFQ0tfTkVYVF9IRUFERVJTLCBleGNlcHQgZG8gbm90IGNoZWNrIHdoZXRoZXIgdGhlIGhlYWRlcnMgZXhpc3QuCisjIFRoaXMgaXMgc3VpdGFibGUgZm9yIGhlYWRlcnMgbGlrZSA8c3RkZGVmLmg+IHRoYXQgYXJlIHN0YW5kYXJkaXplZCBieSBDODkKKyMgYW5kIHRoZXJlZm9yZSBjYW4gYmUgYXNzdW1lZCB0byBleGlzdC4KK0FDX0RFRlVOKFtnbF9ORVhUX0hFQURFUlNdLAorWworICBnbF9ORVhUX0hFQURFUlNfSU5URVJOQUwoWyQxXSwgW2Fzc3VtZV0pCitdKQorCisjIFRoZSBndXRzIG9mIGdsX0NIRUNLX05FWFRfSEVBREVSUyBhbmQgZ2xfTkVYVF9IRUFERVJTLgorQUNfREVGVU4oW2dsX05FWFRfSEVBREVSU19JTlRFUk5BTF0sCitbCisgIEFDX1JFUVVJUkUoW2dsX0lOQ0xVREVfTkVYVF0pCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKworICBtNF9pZihbJDJdLCBbY2hlY2tdLAorICAgIFtBQ19DSEVDS19IRUFERVJTX09OQ0UoWyQxXSkKKyAgICBdKQorCitkbmwgRklYTUU6IGdsX25leHRfaGVhZGVyIGFuZCBnbF9oZWFkZXJfZXhpc3RzIG11c3QgYmUgdXNlZCB1bnF1b3RlZAorZG5sIHVudGlsIHdlIGNhbiBhc3N1bWUgYXV0b2NvbmYgMi42NCBvciBuZXdlci4KKyAgbTRfZm9yZWFjaF93KFtnbF9IRUFERVJfTkFNRV0sIFskMV0sCisgICAgW0FTX1ZBUl9QVVNIREVGKFtnbF9uZXh0X2hlYWRlcl0sCisgICAgICAgICAgICAgICAgICAgIFtnbF9jdl9uZXh0X11tNF9kZWZuKFtnbF9IRUFERVJfTkFNRV0pKQorICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllczsgdGhlbgorICAgICAgIEFTX1ZBUl9TRVQoZ2xfbmV4dF9oZWFkZXIsIFsnPCdnbF9IRUFERVJfTkFNRSc+J10pCisgICAgIGVsc2UKKyAgICAgICBBQ19DQUNIRV9DSEVDSygKKyAgICAgICAgIFthYnNvbHV0ZSBuYW1lIG9mIDxdbTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKVs+XSwKKyAgICAgICAgIG00X2RlZm4oW2dsX25leHRfaGVhZGVyXSksCisgICAgICAgICBbbTRfaWYoWyQyXSwgW2NoZWNrXSwKKyAgICAgICAgICAgIFtBU19WQVJfUFVTSERFRihbZ2xfaGVhZGVyX2V4aXN0c10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjX2N2X2hlYWRlcl9dbTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKSkKKyAgICAgICAgICAgICBpZiB0ZXN0IEFTX1ZBUl9HRVQoZ2xfaGVhZGVyX2V4aXN0cykgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICBBU19WQVJfUE9QREVGKFtnbF9oZWFkZXJfZXhpc3RzXSkKKyAgICAgICAgICAgIF0pCisgICAgICAgICAgICAgICBBQ19MQU5HX0NPTkZURVNUKAorICAgICAgICAgICAgICAgICBbQUNfTEFOR19TT1VSQ0UoCisgICAgICAgICAgICAgICAgICAgIFtbI2luY2x1ZGUgPF1dbTRfZHF1b3RlKG00X2RlZm4oW2dsX0hFQURFUl9OQU1FXSkpW1s+XV0KKyAgICAgICAgICAgICAgICAgICldKQorICAgICAgICAgICAgICAgZG5sIEFJWCAieGxjIC1FIiBhbmQgImNjIC1FIiBvbWl0ICNsaW5lIGRpcmVjdGl2ZXMgZm9yIGhlYWRlcgorICAgICAgICAgICAgICAgZG5sIGZpbGVzIHRoYXQgY29udGFpbiBvbmx5IGEgI2luY2x1ZGUgb2Ygb3RoZXIgaGVhZGVyIGZpbGVzIGFuZAorICAgICAgICAgICAgICAgZG5sIG5vIG5vbi1jb21tZW50IHRva2VucyBvZiB0aGVpciBvd24uIFRoaXMgbGVhZHMgdG8gYSBmYWlsdXJlCisgICAgICAgICAgICAgICBkbmwgdG8gZGV0ZWN0IHRoZSBhYnNvbHV0ZSBuYW1lIG9mIDxkaXJlbnQuaD4sIDxzaWduYWwuaD4sCisgICAgICAgICAgICAgICBkbmwgPHBvbGwuaD4gYW5kIG90aGVycy4gVGhlIHdvcmthcm91bmQgaXMgdG8gZm9yY2UgcHJlc2VydmF0aW9uCisgICAgICAgICAgICAgICBkbmwgb2YgY29tbWVudHMgdGhyb3VnaCBvcHRpb24gLUMuIFRoaXMgZW5zdXJlcyBhbGwgbmVjZXNzYXJ5CisgICAgICAgICAgICAgICBkbmwgI2xpbmUgZGlyZWN0aXZlcyBhcmUgcHJlc2VudC4gR0NDIHN1cHBvcnRzIG9wdGlvbiAtQyBhcyB3ZWxsLgorICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgIGFpeCopIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIC1DIiA7OworICAgICAgICAgICAgICAgICAqKSAgICBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCIgOzsKKyAgICAgICAgICAgICAgIGVzYWMKK2NoYW5nZXF1b3RlKCwpCisgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgbWluZ3cqKQorICAgICAgICAgICAgICAgICAgIGRubCBGb3IgdGhlIHNha2Ugb2YgbmF0aXZlIFdpbmRvd3MgY29tcGlsZXJzIChleGNsdWRpbmcgZ2NjKSwKKyAgICAgICAgICAgICAgICAgICBkbmwgdHJlYXQgYmFja3NsYXNoIGFzIGEgZGlyZWN0b3J5IHNlcGFyYXRvciwgbGlrZSAvLgorICAgICAgICAgICAgICAgICAgIGRubCBBY3R1YWxseSwgdGhlc2UgY29tcGlsZXJzIHVzZSBhIGRvdWJsZS1iYWNrc2xhc2ggYXMKKyAgICAgICAgICAgICAgICAgICBkbmwgZGlyZWN0b3J5IHNlcGFyYXRvciwgaW5zaWRlIHRoZQorICAgICAgICAgICAgICAgICAgIGRubCAgICMgbGluZSAiZmlsZW5hbWUiCisgICAgICAgICAgICAgICAgICAgZG5sIGRpcmVjdGl2ZXMuCisgICAgICAgICAgICAgICAgICAgZ2xfZGlyc2VwX3JlZ2V4PSdbL1xcXScKKyAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgIGdsX2RpcnNlcF9yZWdleD0nXC8nCisgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgIGRubCBBIHNlZCBleHByZXNzaW9uIHRoYXQgdHVybnMgYSBzdHJpbmcgaW50byBhIGJhc2ljIHJlZ3VsYXIKKyAgICAgICAgICAgICAgIGRubCBleHByZXNzaW9uLCBmb3IgdXNlIHdpdGhpbiAiLy4uLi8iLgorICAgICAgICAgICAgICAgZ2xfbWFrZV9saXRlcmFsX3JlZ2V4X3NlZD0ncyxbXSReXFwuKi9bXSxcXCYsZycKK2NoYW5nZXF1b3RlKFssXSkKKyAgICAgICAgICAgICAgIGdsX2hlYWRlcl9saXRlcmFsX3JlZ2V4PWBlY2hvICddbTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKVsnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAiJGdsX21ha2VfbGl0ZXJhbF9yZWdleF9zZWQiYAorICAgICAgICAgICAgICAgZ2xfYWJzb2x1dGVfaGVhZGVyX3NlZD0iLyR7Z2xfZGlyc2VwX3JlZ2V4fSR7Z2xfaGVhZGVyX2xpdGVyYWxfcmVnZXh9LyIneworICAgICAgICAgICAgICAgICAgIHMvLioiXCguKiciJHtnbF9kaXJzZXBfcmVnZXh9JHtnbF9oZWFkZXJfbGl0ZXJhbF9yZWdleH0iJ1wpIi4qL1wxLworY2hhbmdlcXVvdGUoLClkbmwKKyAgICAgICAgICAgICAgICAgICBzfF4vW14vXXwvLyZ8CitjaGFuZ2VxdW90ZShbLF0pZG5sCisgICAgICAgICAgICAgICAgICAgcAorICAgICAgICAgICAgICAgICAgIHEKKyAgICAgICAgICAgICAgICAgfScKKyAgICAgICAgICAgICAgIGRubCBldmFsIGlzIG5lY2Vzc2FyeSB0byBleHBhbmQgZ2xfYWJzbmFtZV9jcHAuCisgICAgICAgICAgICAgICBkbmwgVWx0cml4IGFuZCBQeXJhbWlkIHNoIHJlZnVzZSB0byByZWRpcmVjdCBvdXRwdXQgb2YgZXZhbCwKKyAgICAgICAgICAgICAgIGRubCBzbyB1c2Ugc3Vic2hlbGwuCisgICAgICAgICAgICAgICBBU19WQVJfU0VUKGdsX25leHRfaGVhZGVyLAorICAgICAgICAgICAgICAgICBbJyInYChldmFsICIkZ2xfYWJzbmFtZV9jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JkFTX01FU1NBR0VfTE9HX0ZEIHwKKyAgICAgICAgICAgICAgICAgICAgICBzZWQgLW4gIiRnbF9hYnNvbHV0ZV9oZWFkZXJfc2VkImAnIiddKQorICAgICAgICAgIG00X2lmKFskMl0sIFtjaGVja10sCisgICAgICAgICAgICBbZWxzZQorICAgICAgICAgICAgICAgQVNfVkFSX1NFVChnbF9uZXh0X2hlYWRlciwgWyc8J2dsX0hFQURFUl9OQU1FJz4nXSkKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgXSkKKyAgICAgICAgIF0pCisgICAgIGZpCisgICAgIEFDX1NVQlNUKAorICAgICAgIEFTX1RSX0NQUChbTkVYVF9dbTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKSksCisgICAgICAgW0FTX1ZBUl9HRVQoZ2xfbmV4dF9oZWFkZXIpXSkKKyAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXMgfHwgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSBidWdneTsgdGhlbgorICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZV9uZXh0JworICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSc8J2dsX0hFQURFUl9OQU1FJz4nCisgICAgIGVsc2UKKyAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGUnCisgICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9QVNfVkFSX0dFVChnbF9uZXh0X2hlYWRlcikKKyAgICAgZmkKKyAgICAgQUNfU1VCU1QoCisgICAgICAgQVNfVFJfQ1BQKFtORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9dbTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKSksCisgICAgICAgWyRnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZV0pCisgICAgIEFTX1ZBUl9QT1BERUYoW2dsX25leHRfaGVhZGVyXSldKQorXSkKKworIyBBdXRvY29uZiAyLjY4IGFkZGVkIHdhcm5pbmdzIGZvciBvdXIgdXNlIG9mIEFDX0NPTVBJTEVfSUZFTFNFOworIyB0aGlzIGZhbGxiYWNrIGlzIHNhZmUgZm9yIGFsbCBlYXJsaWVyIGF1dG9jb25mIHZlcnNpb25zLgorbTRfZGVmaW5lX2RlZmF1bHQoW0FDX0xBTkdfREVGSU5FU19QUk9WSURFRF0pCmRpZmYgLS1naXQgYS9tNC9pbnRsbWFjb3N4Lm00IGIvbTQvaW50bG1hY29zeC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGRhMTkwCi0tLSAvZGV2L251bGwKKysrIGIvbTQvaW50bG1hY29zeC5tNApAQCAtMCwwICsxLDU2IEBACisjIGludGxtYWNvc3gubTQgc2VyaWFsIDUgKGdldHRleHQtMC4xOC4yKQorZG5sIENvcHlyaWdodCAoQykgMjAwNC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCitkbmwKK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCitkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKK2RubCBmdW5jdGlvbmFsaXR5LgorZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworZG5sIENoZWNrcyBmb3Igc3BlY2lhbCBvcHRpb25zIG5lZWRlZCBvbiBNYWMgT1MgWC4KK2RubCBEZWZpbmVzIElOVExfTUFDT1NYX0xJQlMuCitBQ19ERUZVTihbZ3RfSU5UTF9NQUNPU1hdLAorWworICBkbmwgQ2hlY2sgZm9yIEFQSSBpbnRyb2R1Y2VkIGluIE1hYyBPUyBYIDEwLjIuCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZV0sCisgICAgW2d0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZV0sCisgICAgW2d0X3NhdmVfTElCUz0iJExJQlMiCisgICAgIExJQlM9IiRMSUJTIC1XbCwtZnJhbWV3b3JrIC1XbCxDb3JlRm91bmRhdGlvbiIKKyAgICAgQUNfTElOS19JRkVMU0UoCisgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICBbWyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRlByZWZlcmVuY2VzLmg+XV0sCisgICAgICAgICAgW1tDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlKE5VTEwsIE5VTEwpXV0pXSwKKyAgICAgICBbZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlPXllc10sCisgICAgICAgW2d0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZT1ub10pCisgICAgIExJQlM9IiRndF9zYXZlX0xJQlMiXSkKKyAgaWYgdGVzdCAkZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKFtIQVZFX0NGUFJFRkVSRU5DRVNDT1BZQVBQVkFMVUVdLCBbMV0sCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIE1hYyBPUyBYIGZ1bmN0aW9uIENGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUgaW4gdGhlIENvcmVGb3VuZGF0aW9uIGZyYW1ld29yay5dKQorICBmaQorICBkbmwgQ2hlY2sgZm9yIEFQSSBpbnRyb2R1Y2VkIGluIE1hYyBPUyBYIDEwLjMuCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgQ0ZMb2NhbGVDb3B5Q3VycmVudF0sIFtndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnRdLAorICAgIFtndF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBMSUJTPSIkTElCUyAtV2wsLWZyYW1ld29yayAtV2wsQ29yZUZvdW5kYXRpb24iCisgICAgIEFDX0xJTktfSUZFTFNFKAorICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgW1sjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZMb2NhbGUuaD5dXSwKKyAgICAgICAgICBbW0NGTG9jYWxlQ29weUN1cnJlbnQoKTtdXSldLAorICAgICAgIFtndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQ9eWVzXSwKKyAgICAgICBbZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50PW5vXSkKKyAgICAgTElCUz0iJGd0X3NhdmVfTElCUyJdKQorICBpZiB0ZXN0ICRndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoW0hBVkVfQ0ZMT0NBTEVDT1BZQ1VSUkVOVF0sIFsxXSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTWFjIE9TIFggZnVuY3Rpb24gQ0ZMb2NhbGVDb3B5Q3VycmVudCBpbiB0aGUgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLl0pCisgIGZpCisgIElOVExfTUFDT1NYX0xJQlM9CisgIGlmIHRlc3QgJGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSA9IHllcyB8fCB0ZXN0ICRndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQgPSB5ZXM7IHRoZW4KKyAgICBJTlRMX01BQ09TWF9MSUJTPSItV2wsLWZyYW1ld29yayAtV2wsQ29yZUZvdW5kYXRpb24iCisgIGZpCisgIEFDX1NVQlNUKFtJTlRMX01BQ09TWF9MSUJTXSkKK10pCmRpZmYgLS1naXQgYS9tNC9pbnRtYXhfdC5tNCBiL200L2ludG1heF90Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYTRhNzUKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9pbnRtYXhfdC5tNApAQCAtMCwwICsxLDY3IEBACisjIGludG1heF90Lm00IHNlcmlhbCA4CitkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDQsIDIwMDYtMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK2RubCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisKK0FDX1BSRVJFUShbMi41M10pCisKKyMgRGVmaW5lIGludG1heF90IHRvICdsb25nJyBvciAnbG9uZyBsb25nJworIyBpZiBpdCBpcyBub3QgYWxyZWFkeSBkZWZpbmVkIGluIDxzdGRpbnQuaD4gb3IgPGludHR5cGVzLmg+LgorCitBQ19ERUZVTihbZ2xfQUNfVFlQRV9JTlRNQVhfVF0sCitbCisgIGRubCBGb3Igc2ltcGxpY2l0eSwgd2UgYXNzdW1lIHRoYXQgYSBoZWFkZXIgZmlsZSBkZWZpbmVzICdpbnRtYXhfdCcgaWYgYW5kCisgIGRubCBvbmx5IGlmIGl0IGRlZmluZXMgJ3VpbnRtYXhfdCcuCisgIEFDX1JFUVVJUkUoW2dsX0FDX0hFQURFUl9JTlRUWVBFU19IXSkKKyAgQUNfUkVRVUlSRShbZ2xfQUNfSEVBREVSX1NURElOVF9IXSkKKyAgaWYgdGVzdCAkZ2xfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSBubyAmJiB0ZXN0ICRnbF9jdl9oZWFkZXJfc3RkaW50X2ggPSBubzsgdGhlbgorICAgIEFDX1JFUVVJUkUoW0FDX1RZUEVfTE9OR19MT05HX0lOVF0pCisgICAgdGVzdCAkYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50ID0geWVzIFwKKyAgICAgICYmIGFjX3R5cGU9J2xvbmcgbG9uZycgXAorICAgICAgfHwgYWNfdHlwZT0nbG9uZycKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoW2ludG1heF90XSwgWyRhY190eXBlXSwKKyAgICAgW0RlZmluZSB0byBsb25nIG9yIGxvbmcgbG9uZyBpZiA8aW50dHlwZXMuaD4gYW5kIDxzdGRpbnQuaD4gZG9uJ3QgZGVmaW5lLl0pCisgIGVsc2UKKyAgICBBQ19ERUZJTkUoW0hBVkVfSU5UTUFYX1RdLCBbMV0sCisgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnaW50bWF4X3QnIHR5cGUgaW4gPHN0ZGludC5oPiBvciA8aW50dHlwZXMuaD4uXSkKKyAgZmkKK10pCisKK2RubCBBbiBhbHRlcm5hdGl2ZSB3b3VsZCBiZSB0byBleHBsaWNpdGx5IHRlc3QgZm9yICdpbnRtYXhfdCcuCisKK0FDX0RFRlVOKFtndF9BQ19UWVBFX0lOVE1BWF9UXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfQUNfSEVBREVSX0lOVFRZUEVTX0hdKQorICBBQ19SRVFVSVJFKFtnbF9BQ19IRUFERVJfU1RESU5UX0hdKQorICBBQ19DQUNIRV9DSEVDSyhbZm9yIGludG1heF90XSwgW2d0X2N2X2NfaW50bWF4X3RdLAorICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgIFtbCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWYgSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVgKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorI2lmIEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVgKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2VuZGlmCisgICAgICAgICAgXV0sCisgICAgICAgICAgW1tpbnRtYXhfdCB4ID0gLTE7IHJldHVybiAheDtdXSldLAorICAgICAgIFtndF9jdl9jX2ludG1heF90PXllc10sCisgICAgICAgW2d0X2N2X2NfaW50bWF4X3Q9bm9dKV0pCisgIGlmIHRlc3QgJGd0X2N2X2NfaW50bWF4X3QgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoW0hBVkVfSU5UTUFYX1RdLCBbMV0sCisgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnaW50bWF4X3QnIHR5cGUgaW4gPHN0ZGludC5oPiBvciA8aW50dHlwZXMuaD4uXSkKKyAgZWxzZQorICAgIEFDX1JFUVVJUkUoW0FDX1RZUEVfTE9OR19MT05HX0lOVF0pCisgICAgdGVzdCAkYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50ID0geWVzIFwKKyAgICAgICYmIGFjX3R5cGU9J2xvbmcgbG9uZycgXAorICAgICAgfHwgYWNfdHlwZT0nbG9uZycKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoW2ludG1heF90XSwgWyRhY190eXBlXSwKKyAgICAgW0RlZmluZSB0byBsb25nIG9yIGxvbmcgbG9uZyBpZiA8c3RkaW50Lmg+IGFuZCA8aW50dHlwZXMuaD4gZG9uJ3QgZGVmaW5lLl0pCisgIGZpCitdKQpkaWZmIC0tZ2l0IGEvbTQvaW50dHlwZXMtcHJpLm00IGIvbTQvaW50dHlwZXMtcHJpLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NzIwNmYKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9pbnR0eXBlcy1wcmkubTQKQEAgLTAsMCArMSw0MiBAQAorIyBpbnR0eXBlcy1wcmkubTQgc2VyaWFsIDcgKGdldHRleHQtMC4xOC4yKQorZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyLCAyMDA2LCAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorCitBQ19QUkVSRVEoWzIuNTNdKQorCisjIERlZmluZSBQUklfTUFDUk9TX0JST0tFTiBpZiA8aW50dHlwZXMuaD4gZXhpc3RzIGFuZCBkZWZpbmVzIHRoZSBQUkkqCisjIG1hY3JvcyB0byBub24tc3RyaW5nIHZhbHVlcy4gIFRoaXMgaXMgdGhlIGNhc2Ugb24gQUlYIDQuMy4zLgorCitBQ19ERUZVTihbZ3RfSU5UVFlQRVNfUFJJXSwKK1sKKyAgQUNfQ0hFQ0tfSEVBREVSUyhbaW50dHlwZXMuaF0pCisgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIGludHR5cGVzLmggUFJJeE5OIG1hY3JvcyBhcmUgYnJva2VuXSwKKyAgICAgIFtndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuXSwKKyAgICAgIFsKKyAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgICBbWworI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaWZkZWYgUFJJZDMyCitjaGFyICpwID0gUFJJZDMyOworI2VuZGlmCisgICAgICAgICAgICAgXV0sCisgICAgICAgICAgICAgW1tdXSldLAorICAgICAgICAgIFtndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuPW5vXSwKKyAgICAgICAgICBbZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbj15ZXNdKQorICAgICAgXSkKKyAgZmkKKyAgaWYgdGVzdCAiJGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW4iID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtQUklfTUFDUk9TX0JST0tFTl0sIFsxXSwKKyAgICAgIFtEZWZpbmUgaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZGVmaW5lcyB1bnVzYWJsZSBQUkkqIG1hY3Jvcy5dKQorICAgIFBSSV9NQUNST1NfQlJPS0VOPTEKKyAgZWxzZQorICAgIFBSSV9NQUNST1NfQlJPS0VOPTAKKyAgZmkKKyAgQUNfU1VCU1QoW1BSSV9NQUNST1NfQlJPS0VOXSkKK10pCmRpZmYgLS1naXQgYS9tNC9pbnR0eXBlcy5tNCBiL200L2ludHR5cGVzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYzRmNDEKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9pbnR0eXBlcy5tNApAQCAtMCwwICsxLDE1NyBAQAorIyBpbnR0eXBlcy5tNCBzZXJpYWwgMjYKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgRnJvbSBEZXJlayBQcmljZSwgQnJ1bm8gSGFpYmxlLgorZG5sIFRlc3Qgd2hldGhlciA8aW50dHlwZXMuaD4gaXMgc3VwcG9ydGVkIG9yIG11c3QgYmUgc3Vic3RpdHV0ZWQuCisKK0FDX0RFRlVOKFtnbF9JTlRUWVBFU19IXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfSU5UVFlQRVNfSU5DT01QTEVURV0pCisgIGdsX0lOVFRZUEVTX1BSSV9TQ04KK10pCisKK0FDX0RFRlVOX09OQ0UoW2dsX0lOVFRZUEVTX0lOQ09NUExFVEVdLAorWworICBBQ19SRVFVSVJFKFtnbF9TVERJTlRfSF0pCisgIEFDX0NIRUNLX0hFQURFUlNfT05DRShbaW50dHlwZXMuaF0pCisKKyAgZG5sIE92ZXJyaWRlIDxpbnR0eXBlcy5oPiBhbHdheXMsIHNvIHRoYXQgdGhlIHBvcnRhYmlsaXR5IHdhcm5pbmdzIHdvcmsuCisgIEFDX1JFUVVJUkUoW2dsX0lOVFRZUEVTX0hfREVGQVVMVFNdKQorICBnbF9DSEVDS19ORVhUX0hFQURFUlMoW2ludHR5cGVzLmhdKQorCisgIEFDX1JFUVVJUkUoW2dsX01VTFRJQVJDSF0pCisKKyAgZG5sIENoZWNrIGZvciBkZWNsYXJhdGlvbnMgb2YgYW55dGhpbmcgd2Ugd2FudCB0byBwb2lzb24gaWYgdGhlCisgIGRubCBjb3JyZXNwb25kaW5nIGdudWxpYiBtb2R1bGUgaXMgbm90IGluIHVzZS4KKyAgZ2xfV0FSTl9PTl9VU0VfUFJFUEFSRShbWyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorICAgIF1dLCBbaW1heGFicyBpbWF4ZGl2IHN0cnRvaW1heCBzdHJ0b3VtYXhdKQorXSkKKworIyBFbnN1cmUgdGhhdCB0aGUgUFJJKiBhbmQgU0NOKiBtYWNyb3MgYXJlIGRlZmluZWQgYXBwcm9wcmlhdGVseS4KK0FDX0RFRlVOKFtnbF9JTlRUWVBFU19QUklfU0NOXSwKK1sKKyAgQUNfUkVRVUlSRShbZ3RfSU5UVFlQRVNfUFJJXSkKKworICBQUklQVFJfUFJFRklYPQorICBpZiB0ZXN0IC1uICIkU1RESU5UX0giOyB0aGVuCisgICAgZG5sIFVzaW5nIHRoZSBnbnVsaWIgPHN0ZGludC5oPi4gSXQgYWx3YXlzIGRlZmluZXMgaW50cHRyX3QgdG8gJ2xvbmcnLgorICAgIFBSSVBUUl9QUkVGSVg9JyJsIicKKyAgZWxzZQorICAgIGRubCBVc2luZyB0aGUgc3lzdGVtJ3MgPHN0ZGludC5oPi4KKyAgICBmb3IgZ2xwZnggaW4gJycgbCBsbCBJNjQ7IGRvCisgICAgICBjYXNlICRnbHBmeCBpbgorICAgICAgICAnJykgIGdsdHlwZTE9J2ludCc7OworICAgICAgICBsKSAgIGdsdHlwZTE9J2xvbmcgaW50Jzs7CisgICAgICAgIGxsKSAgZ2x0eXBlMT0nbG9uZyBsb25nIGludCc7OworICAgICAgICBJNjQpIGdsdHlwZTE9J19faW50NjQnOzsKKyAgICAgIGVzYWMKKyAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgICBbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHN0ZGludC5oPgorICAgICAgICAgICBleHRlcm4gaW50cHRyX3QgZm9vOworICAgICAgICAgICBleHRlcm4gJGdsdHlwZTEgZm9vO11dKV0sCisgICAgICAgIFtQUklQVFJfUFJFRklYPSciJyRnbHBmeCciJ10pCisgICAgICB0ZXN0IC1uICIkUFJJUFRSX1BSRUZJWCIgJiYgYnJlYWsKKyAgICBkb25lCisgIGZpCisgIEFDX1NVQlNUKFtQUklQVFJfUFJFRklYXSkKKworICBnbF9JTlRUWVBFU19DSEVDS19MT05HX0xPTkdfSU5UX0NPTkRJVElPTigKKyAgICBbSU5UMzJfTUFYX0xUX0lOVE1BWF9NQVhdLAorICAgIFtkZWZpbmVkIElOVDMyX01BWCAmJiBkZWZpbmVkIElOVE1BWF9NQVhdLAorICAgIFtJTlQzMl9NQVggPCBJTlRNQVhfTUFYXSwKKyAgICBbc2l6ZW9mIChpbnQpIDwgc2l6ZW9mIChsb25nIGxvbmcgaW50KV0pCisgIGlmIHRlc3QgJEFQUExFX1VOSVZFUlNBTF9CVUlMRCA9IDA7IHRoZW4KKyAgICBnbF9JTlRUWVBFU19DSEVDS19MT05HX0xPTkdfSU5UX0NPTkRJVElPTigKKyAgICAgIFtJTlQ2NF9NQVhfRVFfTE9OR19NQVhdLAorICAgICAgW2RlZmluZWQgSU5UNjRfTUFYXSwKKyAgICAgIFtJTlQ2NF9NQVggPT0gTE9OR19NQVhdLAorICAgICAgW3NpemVvZiAobG9uZyBsb25nIGludCkgPT0gc2l6ZW9mIChsb25nIGludCldKQorICBlbHNlCisgICAgSU5UNjRfTUFYX0VRX0xPTkdfTUFYPS0xCisgIGZpCisgIGdsX0lOVFRZUEVTX0NIRUNLX0xPTkdfTE9OR19JTlRfQ09ORElUSU9OKAorICAgIFtVSU5UMzJfTUFYX0xUX1VJTlRNQVhfTUFYXSwKKyAgICBbZGVmaW5lZCBVSU5UMzJfTUFYICYmIGRlZmluZWQgVUlOVE1BWF9NQVhdLAorICAgIFtVSU5UMzJfTUFYIDwgVUlOVE1BWF9NQVhdLAorICAgIFtzaXplb2YgKHVuc2lnbmVkIGludCkgPCBzaXplb2YgKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpXSkKKyAgaWYgdGVzdCAkQVBQTEVfVU5JVkVSU0FMX0JVSUxEID0gMDsgdGhlbgorICAgIGdsX0lOVFRZUEVTX0NIRUNLX0xPTkdfTE9OR19JTlRfQ09ORElUSU9OKAorICAgICAgW1VJTlQ2NF9NQVhfRVFfVUxPTkdfTUFYXSwKKyAgICAgIFtkZWZpbmVkIFVJTlQ2NF9NQVhdLAorICAgICAgW1VJTlQ2NF9NQVggPT0gVUxPTkdfTUFYXSwKKyAgICAgIFtzaXplb2YgKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpID09IHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpXSkKKyAgZWxzZQorICAgIFVJTlQ2NF9NQVhfRVFfVUxPTkdfTUFYPS0xCisgIGZpCitdKQorCisjIERlZmluZSB0aGUgc3ltYm9sICQxIHRvIGJlIDEgaWYgdGhlIGNvbmRpdGlvbiBpcyB0cnVlLCAwIG90aGVyd2lzZS4KKyMgSWYgJDIgaXMgdHJ1ZSwgdGhlIGNvbmRpdGlvbiBpcyAkMzsgb3RoZXJ3aXNlIGlmIGxvbmcgbG9uZyBpbnQgaXMgc3VwcG9ydGVkCisjIGFwcHJveGltYXRlIHRoZSBjb25kaXRpb24gd2l0aCAkNDsgb3RoZXJ3aXNlLCBhc3N1bWUgdGhlIGNvbmRpdGlvbiBpcyBmYWxzZS4KKyMgVGhlIGNvbmRpdGlvbiBzaG91bGQgd29yayBvbiBhbGwgQzk5IHBsYXRmb3JtczsgdGhlIGFwcHJveGltYXRpb25zIHNob3VsZCBiZQorIyBnb29kIGVub3VnaCB0byB3b3JrIG9uIGFsbCBwcmFjdGljYWwgcHJlLUM5OSBwbGF0Zm9ybXMuCisjICQyIGlzIGV2YWx1YXRlZCBieSB0aGUgQyBwcmVwcm9jZXNzb3IsICQzIGFuZCAkNCBhcyBjb21waWxlLXRpbWUgY29uc3RhbnRzLgorQUNfREVGVU4oW2dsX0lOVFRZUEVTX0NIRUNLX0xPTkdfTE9OR19JTlRfQ09ORElUSU9OXSwKK1sKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgJDNdLAorICAgIFtnbF9jdl90ZXN0XyQxXSwKKyAgICBbQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICBbWy8qIFdvcmsgYWxzbyBpbiBDKysgbW9kZS4gICovCisgICAgICAgICAgICAjZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgMQorCisgICAgICAgICAgICAvKiBXb3JrIGlmIGJ1aWxkIGlzIG5vdCBjbGVhbi4gICovCisgICAgICAgICAgICAjZGVmaW5lIF9HTF9KVVNUX0lOQ0xVREVfU1lTVEVNX1NURElOVF9ICisKKyAgICAgICAgICAgICNpbmNsdWRlIDxsaW1pdHMuaD4KKyAgICAgICAgICAgICNpZiBIQVZFX1NURElOVF9ICisgICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGludC5oPgorICAgICAgICAgICAgI2VuZGlmCisKKyAgICAgICAgICAgICNpZiAkMgorICAgICAgICAgICAgICNkZWZpbmUgQ09ORElUSU9OICgkMykKKyAgICAgICAgICAgICNlbGlmIEhBVkVfTE9OR19MT05HX0lOVAorICAgICAgICAgICAgICNkZWZpbmUgQ09ORElUSU9OICgkNCkKKyAgICAgICAgICAgICNlbHNlCisgICAgICAgICAgICAgI2RlZmluZSBDT05ESVRJT04gMAorICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICBpbnQgdGVzdFtDT05ESVRJT04gPyAxIDogLTFdO11dKV0sCisgICAgICAgW2dsX2N2X3Rlc3RfJDE9eWVzXSwKKyAgICAgICBbZ2xfY3ZfdGVzdF8kMT1ub10pXSkKKyAgaWYgdGVzdCAkZ2xfY3ZfdGVzdF8kMSA9IHllczsgdGhlbgorICAgICQxPTE7CisgIGVsc2UKKyAgICAkMT0wOworICBmaQorICBBQ19TVUJTVChbJDFdKQorXSkKKworQUNfREVGVU4oW2dsX0lOVFRZUEVTX01PRFVMRV9JTkRJQ0FUT1JdLAorWworICBkbmwgVXNlIEFDX1JFUVVJUkUgaGVyZSwgc28gdGhhdCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBhcmUgZXhwYW5kZWQgb25jZSBvbmx5LgorICBBQ19SRVFVSVJFKFtnbF9JTlRUWVBFU19IX0RFRkFVTFRTXSkKKyAgZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEUoWyQxXSkKK10pCisKK0FDX0RFRlVOKFtnbF9JTlRUWVBFU19IX0RFRkFVTFRTXSwKK1sKKyAgR05VTElCX0lNQVhBQlM9MDsgICAgICBBQ19TVUJTVChbR05VTElCX0lNQVhBQlNdKQorICBHTlVMSUJfSU1BWERJVj0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfSU1BWERJVl0pCisgIEdOVUxJQl9TVFJUT0lNQVg9MDsgICAgQUNfU1VCU1QoW0dOVUxJQl9TVFJUT0lNQVhdKQorICBHTlVMSUJfU1RSVE9VTUFYPTA7ICAgIEFDX1NVQlNUKFtHTlVMSUJfU1RSVE9VTUFYXSkKKyAgZG5sIEFzc3VtZSBwcm9wZXIgR05VIGJlaGF2aW9yIHVubGVzcyBhbm90aGVyIG1vZHVsZSBzYXlzIG90aGVyd2lzZS4KKyAgSEFWRV9ERUNMX0lNQVhBQlM9MTsgICBBQ19TVUJTVChbSEFWRV9ERUNMX0lNQVhBQlNdKQorICBIQVZFX0RFQ0xfSU1BWERJVj0xOyAgIEFDX1NVQlNUKFtIQVZFX0RFQ0xfSU1BWERJVl0pCisgIEhBVkVfREVDTF9TVFJUT0lNQVg9MTsgQUNfU1VCU1QoW0hBVkVfREVDTF9TVFJUT0lNQVhdKQorICBIQVZFX0RFQ0xfU1RSVE9VTUFYPTE7IEFDX1NVQlNUKFtIQVZFX0RFQ0xfU1RSVE9VTUFYXSkKKyAgUkVQTEFDRV9TVFJUT0lNQVg9MDsgICBBQ19TVUJTVChbUkVQTEFDRV9TVFJUT0lNQVhdKQorICBJTlQzMl9NQVhfTFRfSU5UTUFYX01BWD0xOyAgQUNfU1VCU1QoW0lOVDMyX01BWF9MVF9JTlRNQVhfTUFYXSkKKyAgSU5UNjRfTUFYX0VRX0xPTkdfTUFYPSdkZWZpbmVkIF9MUDY0JzsgIEFDX1NVQlNUKFtJTlQ2NF9NQVhfRVFfTE9OR19NQVhdKQorICBQUklfTUFDUk9TX0JST0tFTj0wOyAgIEFDX1NVQlNUKFtQUklfTUFDUk9TX0JST0tFTl0pCisgIFBSSVBUUl9QUkVGSVg9X19QUklQVFJfUFJFRklYOyAgQUNfU1VCU1QoW1BSSVBUUl9QUkVGSVhdKQorICBVSU5UMzJfTUFYX0xUX1VJTlRNQVhfTUFYPTE7ICBBQ19TVUJTVChbVUlOVDMyX01BWF9MVF9VSU5UTUFYX01BWF0pCisgIFVJTlQ2NF9NQVhfRVFfVUxPTkdfTUFYPSdkZWZpbmVkIF9MUDY0JzsgIEFDX1NVQlNUKFtVSU5UNjRfTUFYX0VRX1VMT05HX01BWF0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvaW50dHlwZXNfaC5tNCBiL200L2ludHR5cGVzX2gubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFjN2JjYQotLS0gL2Rldi9udWxsCisrKyBiL200L2ludHR5cGVzX2gubTQKQEAgLTAsMCArMSwyOSBAQAorIyBpbnR0eXBlc19oLm00IHNlcmlhbCAxMAorZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDA0LCAyMDA2LCAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisKKyMgRGVmaW5lIEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVggaWYgPGludHR5cGVzLmg+IGV4aXN0cywKKyMgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4sIGFuZCBkZWNsYXJlcyB1aW50bWF4X3QuCisKK0FDX0RFRlVOKFtnbF9BQ19IRUFERVJfSU5UVFlQRVNfSF0sCitbCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgaW50dHlwZXMuaF0sIFtnbF9jdl9oZWFkZXJfaW50dHlwZXNfaF0sCisgICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgW1sKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorICAgICAgICAgIF1dLAorICAgICAgICAgIFtbdWludG1heF90IGkgPSAodWludG1heF90KSAtMTsgcmV0dXJuICFpO11dKV0sCisgICAgICAgW2dsX2N2X2hlYWRlcl9pbnR0eXBlc19oPXllc10sCisgICAgICAgW2dsX2N2X2hlYWRlcl9pbnR0eXBlc19oPW5vXSldKQorICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHllczsgdGhlbgorICAgIEFDX0RFRklORV9VTlFVT1RFRChbSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWF0sIFsxXSwKKyAgICAgIFtEZWZpbmUgaWYgPGludHR5cGVzLmg+IGV4aXN0cywgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4sCisgICAgICAgYW5kIGRlY2xhcmVzIHVpbnRtYXhfdC4gXSkKKyAgZmkKK10pCmRpZmYgLS1naXQgYS9tNC9pbnR0eXBlc19oX2dsLm00IGIvbTQvaW50dHlwZXNfaF9nbC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVkMDc1ZC4uMDAwMDAwMAotLS0gYS9tNC9pbnR0eXBlc19oX2dsLm00CisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyBpbnR0eXBlc19oLm00IHNlcmlhbCA2Ci1kbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLWRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotZG5sIEZyb20gUGF1bCBFZ2dlcnQuCi0KLSMgRGVmaW5lIEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVggaWYgPGludHR5cGVzLmg+IGV4aXN0cywKLSMgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4sIGFuZCBkZWNsYXJlcyB1aW50bWF4X3QuCi0KLUFDX0RFRlVOKFtnbF9BQ19IRUFERVJfSU5UVFlQRVNfSF0sCi1bCi0gIEFDX0NBQ0hFX0NIRUNLKFtmb3IgaW50dHlwZXMuaF0sIGdsX2N2X2hlYWRlcl9pbnR0eXBlc19oLAotICBbQUNfVFJZX0NPTVBJTEUoCi0gICAgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPl0sCi0gICAgW3VpbnRtYXhfdCBpID0gKHVpbnRtYXhfdCkgLTE7XSwKLSAgICBnbF9jdl9oZWFkZXJfaW50dHlwZXNfaD15ZXMsCi0gICAgZ2xfY3ZfaGVhZGVyX2ludHR5cGVzX2g9bm8pXSkKLSAgaWYgdGVzdCAkZ2xfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSB5ZXM7IHRoZW4KLSAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWCwgMSwKLSAgICAgIFtEZWZpbmUgaWYgPGludHR5cGVzLmg+IGV4aXN0cywgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4sCi0gICAgICAgYW5kIGRlY2xhcmVzIHVpbnRtYXhfdC4gXSkKLSAgZmkKLV0pCmRpZmYgLS1naXQgYS9tNC9pc25hbi5tNCBiL200L2lzbmFuLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZDcxMjcKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9pc25hbi5tNApAQCAtMCwwICsxLDQ0IEBACisjIGlzbmFuLm00IHNlcmlhbCA1CitkbmwgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0lTTkFOXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfTUFUSF9IX0RFRkFVTFRTXSkKKyAgQUNfUkVRVUlSRShbZ2xfRlVOQ19JU05BTkZdKQorICBBQ19SRVFVSVJFKFtnbF9GVU5DX0lTTkFORF0pCisgIEFDX1JFUVVJUkUoW2dsX0ZVTkNfSVNOQU5MXSkKKworICAjIElmIHdlIHJlcGxhY2VkIGFueSBvZiB0aGUgdW5kZXJseWluZyBpc25hbiogZnVuY3Rpb25zLCByZXBsYWNlCisgICMgdGhlIGlzbmFuIG1hY3JvOyBpdCB1bmRvdWJ0ZWRseSBzdWZmZXJzIGZyb20gdGhlIHNhbWUgZmxhd3MuCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBpc25hbiBtYWNybyB3b3Jrc10pCisgIGlmIHRlc3QgJGdsX2Z1bmNfaXNuYW5mID0geWVzIFwKKyAgICAgJiYgdGVzdCAkZ2xfZnVuY19pc25hbmQgPSB5ZXMgXAorICAgICAmJiB0ZXN0ICRnbF9mdW5jX2lzbmFubCA9IHllczsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgSVNOQU5fTElCTT0KKyAgICBkbmwgQXBwZW5kICRJU05BTkZfTElCTSB0byBJU05BTl9MSUJNLCBhdm9pZGluZyBncmF0dWl0b3VzIGR1cGxpY2F0ZXMuCisgICAgY2FzZSAiICRJU05BTl9MSUJNICIgaW4KKyAgICAgICoiICRJU05BTkZfTElCTSAiKikgOzsKKyAgICAgICopIElTTkFOX0xJQk09IiRJU05BTl9MSUJNICRJU05BTkZfTElCTSIgOzsKKyAgICBlc2FjCisgICAgZG5sIEFwcGVuZCAkSVNOQU5EX0xJQk0gdG8gSVNOQU5fTElCTSwgYXZvaWRpbmcgZ3JhdHVpdG91cyBkdXBsaWNhdGVzLgorICAgIGNhc2UgIiAkSVNOQU5fTElCTSAiIGluCisgICAgICAqIiAkSVNOQU5EX0xJQk0gIiopIDs7CisgICAgICAqKSBJU05BTl9MSUJNPSIkSVNOQU5fTElCTSAkSVNOQU5EX0xJQk0iIDs7CisgICAgZXNhYworICAgIGRubCBBcHBlbmQgJElTTkFOTF9MSUJNIHRvIElTTkFOX0xJQk0sIGF2b2lkaW5nIGdyYXR1aXRvdXMgZHVwbGljYXRlcy4KKyAgICBjYXNlICIgJElTTkFOX0xJQk0gIiBpbgorICAgICAgKiIgJElTTkFOTF9MSUJNICIqKSA7OworICAgICAgKikgSVNOQU5fTElCTT0iJElTTkFOX0xJQk0gJElTTkFOTF9MSUJNIiA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBkbmwgUkVQTEFDRV9JU05BTj0xIGFsc28gbWFrZXMgc3VyZSB0aGUgcnBsX2lzbmFuW2ZkbF0gZnVuY3Rpb25zIGdldCBidWlsdC4KKyAgICBSRVBMQUNFX0lTTkFOPTEKKyAgICBJU05BTl9MSUJNPQorICBmaQorICBBQ19TVUJTVChbSVNOQU5fTElCTV0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvaXNuYW5kLm00IGIvbTQvaXNuYW5kLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YjY0YTQKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9pc25hbmQubTQKQEAgLTAsMCArMSw5NiBAQAorIyBpc25hbmQubTQgc2VyaWFsIDExCitkbmwgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIENoZWNrIGhvdyB0byBnZXQgb3IgZGVmaW5lIGlzbmFuZCgpLgorCitBQ19ERUZVTihbZ2xfRlVOQ19JU05BTkRdLAorWworICBBQ19SRVFVSVJFKFtnbF9NQVRIX0hfREVGQVVMVFNdKQorICBJU05BTkRfTElCTT0KKyAgZ2xfSEFWRV9JU05BTkRfTk9fTElCTQorICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2lzbmFuZF9ub19saWJtID0gbm87IHRoZW4KKyAgICBnbF9IQVZFX0lTTkFORF9JTl9MSUJNCisgICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19pc25hbmRfaW5fbGlibSA9IHllczsgdGhlbgorICAgICAgSVNOQU5EX0xJQk09LWxtCisgICAgZmkKKyAgZmkKKyAgZG5sIFRoZSB2YXJpYWJsZSBnbF9mdW5jX2lzbmFuZCBzZXQgaGVyZSBpcyB1c2VkIGJ5IGlzbmFuLm00LgorICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2lzbmFuZF9ub19saWJtID0geWVzIFwKKyAgICAgfHwgdGVzdCAkZ2xfY3ZfZnVuY19pc25hbmRfaW5fbGlibSA9IHllczsgdGhlbgorICAgIGdsX2Z1bmNfaXNuYW5kPXllcworICBlbHNlCisgICAgZ2xfZnVuY19pc25hbmQ9bm8KKyAgICBIQVZFX0lTTkFORD0wCisgIGZpCisgIEFDX1NVQlNUKFtJU05BTkRfTElCTV0pCitdKQorCitkbmwgQ2hlY2sgaG93IHRvIGdldCBvciBkZWZpbmUgaXNuYW5kKCkgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibS4KKworQUNfREVGVU4oW2dsX0ZVTkNfSVNOQU5EX05PX0xJQk1dLAorWworICBnbF9IQVZFX0lTTkFORF9OT19MSUJNCisgIGdsX2Z1bmNfaXNuYW5kX25vX2xpYm09JGdsX2N2X2Z1bmNfaXNuYW5kX25vX2xpYm0KKyAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19pc25hbmRfbm9fbGlibSA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShbSEFWRV9JU05BTkRfSU5fTElCQ10sIFsxXSwKKyAgICAgIFtEZWZpbmUgaWYgdGhlIGlzbmFuKGRvdWJsZSkgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGluIGxpYmMuXSkKKyAgZmkKK10pCisKK2RubCBQcmVyZXF1aXNpdGVzIG9mIHJlcGxhY2VtZW50IGlzbmFuZCBkZWZpbml0aW9uLiBJdCBkb2VzIG5vdCBuZWVkIC1sbS4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfSVNOQU5EXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfRE9VQkxFX0VYUE9ORU5UX0xPQ0FUSU9OXSkKK10pCisKK2RubCBUZXN0IHdoZXRoZXIgaXNuYW5kKCkgY2FuIGJlIHVzZWQgd2l0aCBsaWJtLgorCitBQ19ERUZVTihbZ2xfSEFWRV9JU05BTkRfSU5fTElCTV0sCitbCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGlzbmFuKGRvdWJsZSkgY2FuIGJlIHVzZWQgd2l0aCBsaWJtXSwKKyAgICBbZ2xfY3ZfZnVuY19pc25hbmRfaW5fbGlibV0sCisgICAgWworICAgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgIExJQlM9IiRMSUJTIC1sbSIKKyAgICAgIEFDX0xJTktfSUZFTFNFKAorICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgICBbWyNpbmNsdWRlIDxtYXRoLmg+CisgICAgICAgICAgICAgI2lmIF9fR05VQ19fID49IDQKKyAgICAgICAgICAgICAjIHVuZGVmIGlzbmFuZAorICAgICAgICAgICAgICMgZGVmaW5lIGlzbmFuZCh4KSBfX2J1aWx0aW5faXNuYW4gKChkb3VibGUpKHgpKQorICAgICAgICAgICAgICNlbGlmIGRlZmluZWQgaXNuYW4KKyAgICAgICAgICAgICAjIHVuZGVmIGlzbmFuZAorICAgICAgICAgICAgICMgZGVmaW5lIGlzbmFuZCh4KSBpc25hbiAoKGRvdWJsZSkoeCkpCisgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgZG91YmxlIHg7XV0sCisgICAgICAgICAgIFtbcmV0dXJuIGlzbmFuZCAoeCk7XV0pXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfaXNuYW5kX2luX2xpYm09eWVzXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfaXNuYW5kX2luX2xpYm09bm9dKQorICAgICAgTElCUz0iJHNhdmVfTElCUyIKKyAgICBdKQorXSkKKworQUNfREVGVU4oW2dsX0hBVkVfSVNOQU5EX05PX0xJQk1dLAorWworICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpc25hbihkb3VibGUpIGNhbiBiZSB1c2VkIHdpdGhvdXQgbGlua2luZyB3aXRoIGxpYm1dLAorICAgIFtnbF9jdl9mdW5jX2lzbmFuZF9ub19saWJtXSwKKyAgICBbCisgICAgICBBQ19MSU5LX0lGRUxTRSgKKyAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgW1sjaW5jbHVkZSA8bWF0aC5oPgorICAgICAgICAgICAgICNpZiBfX0dOVUNfXyA+PSA0CisgICAgICAgICAgICAgIyB1bmRlZiBpc25hbmQKKyAgICAgICAgICAgICAjIGRlZmluZSBpc25hbmQoeCkgX19idWlsdGluX2lzbmFuICgoZG91YmxlKSh4KSkKKyAgICAgICAgICAgICAjZWxzZQorICAgICAgICAgICAgICMgdW5kZWYgaXNuYW5kCisgICAgICAgICAgICAgIyBkZWZpbmUgaXNuYW5kKHgpIGlzbmFuICgoZG91YmxlKSh4KSkKKyAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICBkb3VibGUgeDtdXSwKKyAgICAgICAgICAgW1tyZXR1cm4gaXNuYW5kICh4KTtdXSldLAorICAgICAgICBbZ2xfY3ZfZnVuY19pc25hbmRfbm9fbGlibT15ZXNdLAorICAgICAgICBbZ2xfY3ZfZnVuY19pc25hbmRfbm9fbGlibT1ub10pCisgICAgXSkKK10pCmRpZmYgLS1naXQgYS9tNC9pc25hbmYubTQgYi9tNC9pc25hbmYubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdmNjM4YQotLS0gL2Rldi9udWxsCisrKyBiL200L2lzbmFuZi5tNApAQCAtMCwwICsxLDE4OCBAQAorIyBpc25hbmYubTQgc2VyaWFsIDE0CitkbmwgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIENoZWNrIGhvdyB0byBnZXQgb3IgZGVmaW5lIGlzbmFuZigpLgorCitBQ19ERUZVTihbZ2xfRlVOQ19JU05BTkZdLAorWworICBBQ19SRVFVSVJFKFtnbF9NQVRIX0hfREVGQVVMVFNdKQorICBJU05BTkZfTElCTT0KKyAgZ2xfSEFWRV9JU05BTkZfTk9fTElCTQorICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2lzbmFuZl9ub19saWJtID0gbm87IHRoZW4KKyAgICBnbF9IQVZFX0lTTkFORl9JTl9MSUJNCisgICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19pc25hbmZfaW5fbGlibSA9IHllczsgdGhlbgorICAgICAgSVNOQU5GX0xJQk09LWxtCisgICAgZmkKKyAgZmkKKyAgZG5sIFRoZSB2YXJpYWJsZSBnbF9mdW5jX2lzbmFuZiBzZXQgaGVyZSBpcyB1c2VkIGJ5IGlzbmFuLm00LgorICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2lzbmFuZl9ub19saWJtID0geWVzIFwKKyAgICAgfHwgdGVzdCAkZ2xfY3ZfZnVuY19pc25hbmZfaW5fbGlibSA9IHllczsgdGhlbgorICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgTElCUz0iJExJQlMgJElTTkFORl9MSUJNIgorICAgIGdsX0lTTkFORl9XT1JLUworICAgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgY2FzZSAiJGdsX2N2X2Z1bmNfaXNuYW5mX3dvcmtzIiBpbgorICAgICAgKnllcykgZ2xfZnVuY19pc25hbmY9eWVzIDs7CisgICAgICAqKSAgICBnbF9mdW5jX2lzbmFuZj1ubzsgSVNOQU5GX0xJQk09IDs7CisgICAgZXNhYworICBlbHNlCisgICAgZ2xfZnVuY19pc25hbmY9bm8KKyAgZmkKKyAgaWYgdGVzdCAkZ2xfZnVuY19pc25hbmYgIT0geWVzOyB0aGVuCisgICAgSEFWRV9JU05BTkY9MAorICBmaQorICBBQ19TVUJTVChbSVNOQU5GX0xJQk1dKQorXSkKKworZG5sIENoZWNrIGhvdyB0byBnZXQgb3IgZGVmaW5lIGlzbmFuZigpIHdpdGhvdXQgbGlua2luZyB3aXRoIGxpYm0uCisKK0FDX0RFRlVOKFtnbF9GVU5DX0lTTkFORl9OT19MSUJNXSwKK1sKKyAgZ2xfSEFWRV9JU05BTkZfTk9fTElCTQorICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2lzbmFuZl9ub19saWJtID0geWVzOyB0aGVuCisgICAgZ2xfSVNOQU5GX1dPUktTCisgIGZpCisgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfaXNuYW5mX25vX2xpYm0gPSB5ZXMgXAorICAgICAmJiB7IGNhc2UgIiRnbF9jdl9mdW5jX2lzbmFuZl93b3JrcyIgaW4KKyAgICAgICAgICAgICp5ZXMpIHRydWU7OworICAgICAgICAgICAgKikgZmFsc2U7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgfTsgdGhlbgorICAgIGdsX2Z1bmNfaXNuYW5mX25vX2xpYm09eWVzCisgICAgQUNfREVGSU5FKFtIQVZFX0lTTkFORl9JTl9MSUJDXSwgWzFdLAorICAgICAgW0RlZmluZSBpZiB0aGUgaXNuYW4oZmxvYXQpIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBpbiBsaWJjLl0pCisgIGVsc2UKKyAgICBnbF9mdW5jX2lzbmFuZl9ub19saWJtPW5vCisgIGZpCitdKQorCitkbmwgUHJlcmVxdWlzaXRlcyBvZiByZXBsYWNlbWVudCBpc25hbmYgZGVmaW5pdGlvbi4gSXQgZG9lcyBub3QgbmVlZCAtbG0uCitBQ19ERUZVTihbZ2xfUFJFUkVRX0lTTkFORl0sCitbCisgIGdsX0ZMT0FUX0VYUE9ORU5UX0xPQ0FUSU9OCitdKQorCitkbmwgVGVzdCB3aGV0aGVyIGlzbmFuZigpIGNhbiBiZSB1c2VkIHdpdGhvdXQgbGlibS4KK0FDX0RFRlVOKFtnbF9IQVZFX0lTTkFORl9OT19MSUJNXSwKK1sKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaXNuYW4oZmxvYXQpIGNhbiBiZSB1c2VkIHdpdGhvdXQgbGlua2luZyB3aXRoIGxpYm1dLAorICAgIFtnbF9jdl9mdW5jX2lzbmFuZl9ub19saWJtXSwKKyAgICBbCisgICAgICBBQ19MSU5LX0lGRUxTRSgKKyAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgW1sjaW5jbHVkZSA8bWF0aC5oPgorICAgICAgICAgICAgICNpZiBfX0dOVUNfXyA+PSA0CisgICAgICAgICAgICAgIyB1bmRlZiBpc25hbmYKKyAgICAgICAgICAgICAjIGRlZmluZSBpc25hbmYoeCkgX19idWlsdGluX2lzbmFuZiAoKGZsb2F0KSh4KSkKKyAgICAgICAgICAgICAjZWxpZiBkZWZpbmVkIGlzbmFuCisgICAgICAgICAgICAgIyB1bmRlZiBpc25hbmYKKyAgICAgICAgICAgICAjIGRlZmluZSBpc25hbmYoeCkgaXNuYW4gKChmbG9hdCkoeCkpCisgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgZmxvYXQgeDtdXSwKKyAgICAgICAgICAgW1tyZXR1cm4gaXNuYW5mICh4KTtdXSldLAorICAgICAgICBbZ2xfY3ZfZnVuY19pc25hbmZfbm9fbGlibT15ZXNdLAorICAgICAgICBbZ2xfY3ZfZnVuY19pc25hbmZfbm9fbGlibT1ub10pCisgICAgXSkKK10pCisKK2RubCBUZXN0IHdoZXRoZXIgaXNuYW5mKCkgY2FuIGJlIHVzZWQgd2l0aCBsaWJtLgorQUNfREVGVU4oW2dsX0hBVkVfSVNOQU5GX0lOX0xJQk1dLAorWworICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpc25hbihmbG9hdCkgY2FuIGJlIHVzZWQgd2l0aCBsaWJtXSwKKyAgICBbZ2xfY3ZfZnVuY19pc25hbmZfaW5fbGlibV0sCisgICAgWworICAgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgIExJQlM9IiRMSUJTIC1sbSIKKyAgICAgIEFDX0xJTktfSUZFTFNFKAorICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgICBbWyNpbmNsdWRlIDxtYXRoLmg+CisgICAgICAgICAgICAgI2lmIF9fR05VQ19fID49IDQKKyAgICAgICAgICAgICAjIHVuZGVmIGlzbmFuZgorICAgICAgICAgICAgICMgZGVmaW5lIGlzbmFuZih4KSBfX2J1aWx0aW5faXNuYW5mICgoZmxvYXQpKHgpKQorICAgICAgICAgICAgICNlbGlmIGRlZmluZWQgaXNuYW4KKyAgICAgICAgICAgICAjIHVuZGVmIGlzbmFuZgorICAgICAgICAgICAgICMgZGVmaW5lIGlzbmFuZih4KSBpc25hbiAoKGZsb2F0KSh4KSkKKyAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICBmbG9hdCB4O11dLAorICAgICAgICAgICBbW3JldHVybiBpc25hbmYgKHgpO11dKV0sCisgICAgICAgIFtnbF9jdl9mdW5jX2lzbmFuZl9pbl9saWJtPXllc10sCisgICAgICAgIFtnbF9jdl9mdW5jX2lzbmFuZl9pbl9saWJtPW5vXSkKKyAgICAgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgXSkKK10pCisKK2RubCBUZXN0IHdoZXRoZXIgaXNuYW5mKCkgcmVqZWN0cyBJbmZpbml0eSAodGhpcyBmYWlscyBvbiBTb2xhcmlzIDIuNS4xKSwKK2RubCByZWNvZ25pemVzIGEgTmFOICh0aGlzIGZhaWxzIG9uIElSSVggNi41IHdpdGggY2MpLCBhbmQgcmVjb2duaXplcyBhIE5hTgorZG5sIHdpdGggaW4tbWVtb3J5IHJlcHJlc2VudGF0aW9uIDB4N2ZiZmZmZmYgKHRoaXMgZmFpbHMgb24gSVJJWCA2LjUpLgorQUNfREVGVU4oW2dsX0lTTkFORl9XT1JLU10sCitbCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pIGRubCBmb3IgY3Jvc3MtY29tcGlsZXMKKyAgQUNfUkVRVUlSRShbZ2xfRkxPQVRfRVhQT05FTlRfTE9DQVRJT05dKQorICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpc25hbihmbG9hdCkgd29ya3NdLCBbZ2xfY3ZfZnVuY19pc25hbmZfd29ya3NdLAorICAgIFsKKyAgICAgIEFDX1JVTl9JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgPG1hdGguaD4KKyNpZiBfX0dOVUNfXyA+PSA0CisjIHVuZGVmIGlzbmFuZgorIyBkZWZpbmUgaXNuYW5mKHgpIF9fYnVpbHRpbl9pc25hbmYgKChmbG9hdCkoeCkpCisjZWxpZiBkZWZpbmVkIGlzbmFuCisjIHVuZGVmIGlzbmFuZgorIyBkZWZpbmUgaXNuYW5mKHgpIGlzbmFuICgoZmxvYXQpKHgpKQorI2VuZGlmCisvKiBUaGUgQ29tcGFxIChleC1ERUMpIEMgNi40IGNvbXBpbGVyIGNob2tlcyBvbiB0aGUgZXhwcmVzc2lvbiAwLjAgLyAwLjAuICAqLworI2lmZGVmIF9fREVDQworc3RhdGljIGZsb2F0CitOYU4gKCkKK3sKKyAgc3RhdGljIGZsb2F0IHplcm8gPSAwLjBmOworICByZXR1cm4gemVybyAvIHplcm87Cit9CisjZWxzZQorIyBkZWZpbmUgTmFOKCkgKDAuMGYgLyAwLjBmKQorI2VuZGlmCisjZGVmaW5lIE5XT1JEUyBcCisgICgoc2l6ZW9mIChmbG9hdCkgKyBzaXplb2YgKHVuc2lnbmVkIGludCkgLSAxKSAvIHNpemVvZiAodW5zaWduZWQgaW50KSkKK3R5cGVkZWYgdW5pb24geyB1bnNpZ25lZCBpbnQgd29yZFtOV09SRFNdOyBmbG9hdCB2YWx1ZTsgfSBtZW1vcnlfZmxvYXQ7CitpbnQgbWFpbigpCit7CisgIGludCByZXN1bHQgPSAwOworCisgIGlmIChpc25hbmYgKDEuMGYgLyAwLjBmKSkKKyAgICByZXN1bHQgfD0gMTsKKworICBpZiAoIWlzbmFuZiAoTmFOICgpKSkKKyAgICByZXN1bHQgfD0gMjsKKworI2lmIGRlZmluZWQgRkxUX0VYUEJJVDBfV09SRCAmJiBkZWZpbmVkIEZMVF9FWFBCSVQwX0JJVAorICAvKiBUaGUgaXNuYW5mIGZ1bmN0aW9uIHNob3VsZCBiZSBpbW11bmUgYWdhaW5zdCBjaGFuZ2VzIGluIHRoZSBzaWduIGJpdCBhbmQKKyAgICAgaW4gdGhlIG1hbnRpc3NhIGJpdHMuICBUaGUgeG9yIG9wZXJhdGlvbiB0d2lkZGxlcyBhIGJpdCB0aGF0IGNhbiBvbmx5IGJlCisgICAgIGEgc2lnbiBiaXQgb3IgYSBtYW50aXNzYSBiaXQuICAqLworICBpZiAoRkxUX0VYUEJJVDBfV09SRCA9PSAwICYmIEZMVF9FWFBCSVQwX0JJVCA+IDApCisgICAgeworICAgICAgbWVtb3J5X2Zsb2F0IG07CisKKyAgICAgIG0udmFsdWUgPSBOYU4gKCk7CisgICAgICAvKiBTZXQgdGhlIGJpdHMgYmVsb3cgdGhlIGV4cG9uZW50IHRvIDAxMTExLi4uMTExLiAgKi8KKyAgICAgIG0ud29yZFswXSAmPSAtMVUgPDwgRkxUX0VYUEJJVDBfQklUOworICAgICAgbS53b3JkWzBdIHw9IDFVIDw8IChGTFRfRVhQQklUMF9CSVQgLSAxKSAtIDE7CisgICAgICBpZiAoIWlzbmFuZiAobS52YWx1ZSkpCisgICAgICAgIHJlc3VsdCB8PSA0OworICAgIH0KKyNlbmRpZgorCisgIHJldHVybiByZXN1bHQ7Cit9XV0pXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfaXNuYW5mX3dvcmtzPXllc10sCisgICAgICAgIFtnbF9jdl9mdW5jX2lzbmFuZl93b3Jrcz1ub10sCisgICAgICAgIFtjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgaXJpeCogfCBzb2xhcmlzKikgZ2xfY3ZfZnVuY19pc25hbmZfd29ya3M9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICopICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfaXNuYW5mX3dvcmtzPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgIGVzYWMKKyAgICAgICAgXSkKKyAgICBdKQorXSkKZGlmZiAtLWdpdCBhL200L2lzbmFubC5tNCBiL200L2lzbmFubC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTQ2OWFiCi0tLSAvZGV2L251bGwKKysrIGIvbTQvaXNuYW5sLm00CkBAIC0wLDAgKzEsMjU1IEBACisjIGlzbmFubC5tNCBzZXJpYWwgMTcKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ2xfRlVOQ19JU05BTkxdLAorWworICBBQ19SRVFVSVJFKFtnbF9NQVRIX0hfREVGQVVMVFNdKQorICBJU05BTkxfTElCTT0KKyAgZ2xfSEFWRV9JU05BTkxfTk9fTElCTQorICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2lzbmFubF9ub19saWJtID0gbm87IHRoZW4KKyAgICBnbF9IQVZFX0lTTkFOTF9JTl9MSUJNCisgICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19pc25hbmxfaW5fbGlibSA9IHllczsgdGhlbgorICAgICAgSVNOQU5MX0xJQk09LWxtCisgICAgZmkKKyAgZmkKKyAgZG5sIFRoZSB2YXJpYWJsZSBnbF9mdW5jX2lzbmFubCBzZXQgaGVyZSBpcyB1c2VkIGJ5IGlzbmFuLm00LgorICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2lzbmFubF9ub19saWJtID0geWVzIFwKKyAgICAgfHwgdGVzdCAkZ2xfY3ZfZnVuY19pc25hbmxfaW5fbGlibSA9IHllczsgdGhlbgorICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgTElCUz0iJExJQlMgJElTTkFOTF9MSUJNIgorICAgIGdsX0ZVTkNfSVNOQU5MX1dPUktTCisgICAgTElCUz0iJHNhdmVfTElCUyIKKyAgICBjYXNlICIkZ2xfY3ZfZnVuY19pc25hbmxfd29ya3MiIGluCisgICAgICAqeWVzKSBnbF9mdW5jX2lzbmFubD15ZXMgOzsKKyAgICAgICopICAgIGdsX2Z1bmNfaXNuYW5sPW5vOyBJU05BTkxfTElCTT0gOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBnbF9mdW5jX2lzbmFubD1ubworICBmaQorICBpZiB0ZXN0ICRnbF9mdW5jX2lzbmFubCAhPSB5ZXM7IHRoZW4KKyAgICBIQVZFX0lTTkFOTD0wCisgIGZpCisgIEFDX1NVQlNUKFtJU05BTkxfTElCTV0pCitdKQorCitBQ19ERUZVTihbZ2xfRlVOQ19JU05BTkxfTk9fTElCTV0sCitbCisgIGdsX0hBVkVfSVNOQU5MX05PX0xJQk0KKyAgZ2xfZnVuY19pc25hbmxfbm9fbGlibT0kZ2xfY3ZfZnVuY19pc25hbmxfbm9fbGlibQorICBpZiB0ZXN0ICRnbF9mdW5jX2lzbmFubF9ub19saWJtID0geWVzOyB0aGVuCisgICAgZ2xfRlVOQ19JU05BTkxfV09SS1MKKyAgICBjYXNlICIkZ2xfY3ZfZnVuY19pc25hbmxfd29ya3MiIGluCisgICAgICAqeWVzKSA7OworICAgICAgKikgICAgZ2xfZnVuY19pc25hbmxfbm9fbGlibT1ubyA7OworICAgIGVzYWMKKyAgZmkKKyAgaWYgdGVzdCAkZ2xfZnVuY19pc25hbmxfbm9fbGlibSA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShbSEFWRV9JU05BTkxfSU5fTElCQ10sIFsxXSwKKyAgICAgIFtEZWZpbmUgaWYgdGhlIGlzbmFuKGxvbmcgZG91YmxlKSBmdW5jdGlvbiBpcyBhdmFpbGFibGUgaW4gbGliYy5dKQorICBmaQorXSkKKworZG5sIFByZXJlcXVpc2l0ZXMgb2YgcmVwbGFjZW1lbnQgaXNuYW5sIGRlZmluaXRpb24uIEl0IGRvZXMgbm90IG5lZWQgLWxtLgorQUNfREVGVU4oW2dsX1BSRVJFUV9JU05BTkxdLAorWworICBnbF9MT05HX0RPVUJMRV9FWFBPTkVOVF9MT0NBVElPTgorICBBQ19SRVFVSVJFKFtnbF9MT05HX0RPVUJMRV9WU19ET1VCTEVdKQorXSkKKworZG5sIFRlc3Qgd2hldGhlciBpc25hbmwoKSBjYW4gYmUgdXNlZCB3aXRob3V0IGxpYm0uCitBQ19ERUZVTihbZ2xfSEFWRV9JU05BTkxfTk9fTElCTV0sCitbCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGlzbmFuKGxvbmcgZG91YmxlKSBjYW4gYmUgdXNlZCB3aXRob3V0IGxpbmtpbmcgd2l0aCBsaWJtXSwKKyAgICBbZ2xfY3ZfZnVuY19pc25hbmxfbm9fbGlibV0sCisgICAgWworICAgICAgQUNfTElOS19JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgIFtbI2luY2x1ZGUgPG1hdGguaD4KKyAgICAgICAgICAgICAjaWYgX19HTlVDX18gPj0gNAorICAgICAgICAgICAgICMgdW5kZWYgaXNuYW5sCisgICAgICAgICAgICAgIyBkZWZpbmUgaXNuYW5sKHgpIF9fYnVpbHRpbl9pc25hbmwgKChsb25nIGRvdWJsZSkoeCkpCisgICAgICAgICAgICAgI2VsaWYgZGVmaW5lZCBpc25hbgorICAgICAgICAgICAgICMgdW5kZWYgaXNuYW5sCisgICAgICAgICAgICAgIyBkZWZpbmUgaXNuYW5sKHgpIGlzbmFuICgobG9uZyBkb3VibGUpKHgpKQorICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgIGxvbmcgZG91YmxlIHg7XV0sCisgICAgICAgICAgIFtbcmV0dXJuIGlzbmFubCAoeCk7XV0pXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfaXNuYW5sX25vX2xpYm09eWVzXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfaXNuYW5sX25vX2xpYm09bm9dKQorICAgIF0pCitdKQorCitkbmwgVGVzdCB3aGV0aGVyIGlzbmFubCgpIGNhbiBiZSB1c2VkIHdpdGggbGlibS4KK0FDX0RFRlVOKFtnbF9IQVZFX0lTTkFOTF9JTl9MSUJNXSwKK1sKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaXNuYW4obG9uZyBkb3VibGUpIGNhbiBiZSB1c2VkIHdpdGggbGlibV0sCisgICAgW2dsX2N2X2Z1bmNfaXNuYW5sX2luX2xpYm1dLAorICAgIFsKKyAgICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgICBMSUJTPSIkTElCUyAtbG0iCisgICAgICBBQ19MSU5LX0lGRUxTRSgKKyAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgW1sjaW5jbHVkZSA8bWF0aC5oPgorICAgICAgICAgICAgICNpZiBfX0dOVUNfXyA+PSA0CisgICAgICAgICAgICAgIyB1bmRlZiBpc25hbmwKKyAgICAgICAgICAgICAjIGRlZmluZSBpc25hbmwoeCkgX19idWlsdGluX2lzbmFubCAoKGxvbmcgZG91YmxlKSh4KSkKKyAgICAgICAgICAgICAjZWxpZiBkZWZpbmVkIGlzbmFuCisgICAgICAgICAgICAgIyB1bmRlZiBpc25hbmwKKyAgICAgICAgICAgICAjIGRlZmluZSBpc25hbmwoeCkgaXNuYW4gKChsb25nIGRvdWJsZSkoeCkpCisgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgbG9uZyBkb3VibGUgeDtdXSwKKyAgICAgICAgICAgW1tyZXR1cm4gaXNuYW5sICh4KTtdXSldLAorICAgICAgICBbZ2xfY3ZfZnVuY19pc25hbmxfaW5fbGlibT15ZXNdLAorICAgICAgICBbZ2xfY3ZfZnVuY19pc25hbmxfaW5fbGlibT1ub10pCisgICAgICBMSUJTPSIkc2F2ZV9MSUJTIgorICAgIF0pCitdKQorCitkbmwgVGVzdCB3aGV0aGVyIGlzbmFubCgpIHJlY29nbml6ZXMgYWxsIG51bWJlcnMgd2hpY2ggYXJlIG5laXRoZXIgZmluaXRlIG5vcgorZG5sIGluZmluaXRlLiBUaGlzIHRlc3QgZmFpbHMgZS5nLiBvbiBOZXRCU0QvaTM4NiBhbmQgb24gZ2xpYmMvaWE2NC4KK2RubCBBbHNvLCB0aGUgR0NDID49IDQuMCBidWlsdC1pbiBfX2J1aWx0aW5faXNuYW5sIGRvZXMgbm90IHBhc3MgdGhlIHRlc3RzCitkbmwgLSBmb3IgcHNldWRvLWRlbm9ybWFscyBvbiBpNjg2IGFuZCB4ODZfNjQsCitkbmwgLSBmb3IgcHNldWRvLXplcm9lcywgdW5ub3JtYWxpemVkIG51bWJlcnMsIGFuZCBwc2V1ZG8tZGVub3JtYWxzIG9uIGlhNjQuCitBQ19ERUZVTihbZ2xfRlVOQ19JU05BTkxfV09SS1NdLAorWworICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKyAgQUNfUkVRVUlSRShbZ2xfQklHRU5ESUFOXSkKKyAgQUNfUkVRVUlSRShbZ2xfTE9OR19ET1VCTEVfVlNfRE9VQkxFXSkKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKSBkbmwgZm9yIGNyb3NzLWNvbXBpbGVzCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGlzbmFubCB3b3Jrc10sIFtnbF9jdl9mdW5jX2lzbmFubF93b3Jrc10sCisgICAgWworICAgICAgQUNfUlVOX0lGRUxTRSgKKyAgICAgICAgW0FDX0xBTkdfU09VUkNFKFtbCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaWYgX19HTlVDX18gPj0gNAorIyB1bmRlZiBpc25hbmwKKyMgZGVmaW5lIGlzbmFubCh4KSBfX2J1aWx0aW5faXNuYW5sICgobG9uZyBkb3VibGUpKHgpKQorI2VsaWYgZGVmaW5lZCBpc25hbgorIyB1bmRlZiBpc25hbmwKKyMgZGVmaW5lIGlzbmFubCh4KSBpc25hbiAoKGxvbmcgZG91YmxlKSh4KSkKKyNlbmRpZgorI2RlZmluZSBOV09SRFMgXAorICAoKHNpemVvZiAobG9uZyBkb3VibGUpICsgc2l6ZW9mICh1bnNpZ25lZCBpbnQpIC0gMSkgLyBzaXplb2YgKHVuc2lnbmVkIGludCkpCit0eXBlZGVmIHVuaW9uIHsgdW5zaWduZWQgaW50IHdvcmRbTldPUkRTXTsgbG9uZyBkb3VibGUgdmFsdWU7IH0KKyAgICAgICAgbWVtb3J5X2xvbmdfZG91YmxlOworLyogT24gSXJpeCA2LjUsIGdjYyAzLjQuMyBjYW4ndCBjb21wdXRlIGNvbXBpbGUtdGltZSBOYU4sIGFuZCBuZWVkcyB0aGUKKyAgIHJ1bnRpbWUgdHlwZSBjb252ZXJzaW9uLiAgKi8KKyNpZmRlZiBfX3NnaQorc3RhdGljIGxvbmcgZG91YmxlIE5hTmwgKCkKK3sKKyAgZG91YmxlIHplcm8gPSAwLjA7CisgIHJldHVybiB6ZXJvIC8gemVybzsKK30KKyNlbHNlCisjIGRlZmluZSBOYU5sKCkgKDAuMEwgLyAwLjBMKQorI2VuZGlmCitpbnQgbWFpbiAoKQoreworICBpbnQgcmVzdWx0ID0gMDsKKworICBpZiAoIWlzbmFubCAoTmFObCAoKSkpCisgICAgcmVzdWx0IHw9IDE7CisKKyAgeworICAgIG1lbW9yeV9sb25nX2RvdWJsZSBtOworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgLyogVGhlIGlzbmFubCBmdW5jdGlvbiBzaG91bGQgYmUgaW1tdW5lIGFnYWluc3QgY2hhbmdlcyBpbiB0aGUgc2lnbiBiaXQgYW5kCisgICAgICAgaW4gdGhlIG1hbnRpc3NhIGJpdHMuICBUaGUgeG9yIG9wZXJhdGlvbiB0d2lkZGxlcyBhIGJpdCB0aGF0IGNhbiBvbmx5IGJlCisgICAgICAgYSBzaWduIGJpdCBvciBhIG1hbnRpc3NhIGJpdCAoc2luY2UgdGhlIGV4cG9uZW50IG5ldmVyIGV4dGVuZHMgdG8KKyAgICAgICBiaXQgMzEpLiAgKi8KKyAgICBtLnZhbHVlID0gTmFObCAoKTsKKyAgICBtLndvcmRbTldPUkRTIC8gMl0gXj0gKHVuc2lnbmVkIGludCkgMSA8PCAoc2l6ZW9mICh1bnNpZ25lZCBpbnQpICogQ0hBUl9CSVQgLSAxKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgTldPUkRTOyBpKyspCisgICAgICBtLndvcmRbaV0gfD0gMTsKKyAgICBpZiAoIWlzbmFubCAobS52YWx1ZSkpCisgICAgICByZXN1bHQgfD0gMTsKKyAgfQorCisjaWYgKChkZWZpbmVkIF9faWE2NCAmJiBMREJMX01BTlRfRElHID09IDY0KSB8fCAoZGVmaW5lZCBfX3g4Nl82NF9fIHx8IGRlZmluZWQgX19hbWQ2NF9fKSB8fCAoZGVmaW5lZCBfX2kzODYgfHwgZGVmaW5lZCBfX2kzODZfXyB8fCBkZWZpbmVkIF9JMzg2IHx8IGRlZmluZWQgX01fSVg4NiB8fCBkZWZpbmVkIF9YODZfKSkgJiYgIUhBVkVfU0FNRV9MT05HX0RPVUJMRV9BU19ET1VCTEUKKy8qIFJlcHJlc2VudGF0aW9uIG9mIGFuIDgwLWJpdCAnbG9uZyBkb3VibGUnIGFzIGFuIGluaXRpYWxpemVyIGZvciBhIHNlcXVlbmNlCisgICBvZiAndW5zaWduZWQgaW50JyB3b3Jkcy4gICovCisjIGlmZGVmIFdPUkRTX0JJR0VORElBTgorIyAgZGVmaW5lIExEQkw4MF9XT1JEUyhleHBvbmVudCxtYW50aGksbWFudGxvKSBcCisgICAgIHsgKCh1bnNpZ25lZCBpbnQpIChleHBvbmVudCkgPDwgMTYpIHwgKCh1bnNpZ25lZCBpbnQpIChtYW50aGkpID4+IDE2KSwgXAorICAgICAgICgodW5zaWduZWQgaW50KSAobWFudGhpKSA8PCAxNikgfCAodW5zaWduZWQgaW50KSAobWFudGxvKSA+PiAxNiksICAgIFwKKyAgICAgICAodW5zaWduZWQgaW50KSAobWFudGxvKSA8PCAxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0KKyMgZWxzZQorIyAgZGVmaW5lIExEQkw4MF9XT1JEUyhleHBvbmVudCxtYW50aGksbWFudGxvKSBcCisgICAgIHsgbWFudGxvLCBtYW50aGksIGV4cG9uZW50IH0KKyMgZW5kaWYKKyAgeyAvKiBRdWlldCBOYU4uICAqLworICAgIHN0YXRpYyBtZW1vcnlfbG9uZ19kb3VibGUgeCA9CisgICAgICB7IExEQkw4MF9XT1JEUyAoMHhGRkZGLCAweEMzMzMzMzMzLCAweDAwMDAwMDAwKSB9OworICAgIGlmICghaXNuYW5sICh4LnZhbHVlKSkKKyAgICAgIHJlc3VsdCB8PSAyOworICB9CisgIHsKKyAgICAvKiBTaWduYWxsaW5nIE5hTi4gICovCisgICAgc3RhdGljIG1lbW9yeV9sb25nX2RvdWJsZSB4ID0KKyAgICAgIHsgTERCTDgwX1dPUkRTICgweEZGRkYsIDB4ODMzMzMzMzMsIDB4MDAwMDAwMDApIH07CisgICAgaWYgKCFpc25hbmwgKHgudmFsdWUpKQorICAgICAgcmVzdWx0IHw9IDI7CisgIH0KKyAgLyogVGhlIGlzbmFubCBmdW5jdGlvbiBzaG91bGQgcmVjb2duaXplIFBzZXVkby1OYU5zLCBQc2V1ZG8tSW5maW5pdGllcywKKyAgICAgUHNldWRvLVplcm9lcywgVW5ub3JtYWxpemVkIE51bWJlcnMsIGFuZCBQc2V1ZG8tRGVub3JtYWxzLCBhcyBkZWZpbmVkIGluCisgICAgICAgSW50ZWwgSUEtNjQgQXJjaGl0ZWN0dXJlIFNvZnR3YXJlIERldmVsb3BlcidzIE1hbnVhbCwgVm9sdW1lIDE6CisgICAgICAgQXBwbGljYXRpb24gQXJjaGl0ZWN0dXJlLgorICAgICAgIFRhYmxlIDUtMiAiRmxvYXRpbmctUG9pbnQgUmVnaXN0ZXIgRW5jb2RpbmdzIgorICAgICAgIEZpZ3VyZSA1LTYgIk1lbW9yeSB0byBGbG9hdGluZy1Qb2ludCBSZWdpc3RlciBEYXRhIFRyYW5zbGF0aW9uIgorICAgKi8KKyAgeyAvKiBQc2V1ZG8tTmFOLiAgKi8KKyAgICBzdGF0aWMgbWVtb3J5X2xvbmdfZG91YmxlIHggPQorICAgICAgeyBMREJMODBfV09SRFMgKDB4RkZGRiwgMHg0MDAwMDAwMSwgMHgwMDAwMDAwMCkgfTsKKyAgICBpZiAoIWlzbmFubCAoeC52YWx1ZSkpCisgICAgICByZXN1bHQgfD0gNDsKKyAgfQorICB7IC8qIFBzZXVkby1JbmZpbml0eS4gICovCisgICAgc3RhdGljIG1lbW9yeV9sb25nX2RvdWJsZSB4ID0KKyAgICAgIHsgTERCTDgwX1dPUkRTICgweEZGRkYsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDApIH07CisgICAgaWYgKCFpc25hbmwgKHgudmFsdWUpKQorICAgICAgcmVzdWx0IHw9IDg7CisgIH0KKyAgeyAvKiBQc2V1ZG8tWmVyby4gICovCisgICAgc3RhdGljIG1lbW9yeV9sb25nX2RvdWJsZSB4ID0KKyAgICAgIHsgTERCTDgwX1dPUkRTICgweDQwMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDApIH07CisgICAgaWYgKCFpc25hbmwgKHgudmFsdWUpKQorICAgICAgcmVzdWx0IHw9IDE2OworICB9CisgIHsgLyogVW5ub3JtYWxpemVkIG51bWJlci4gICovCisgICAgc3RhdGljIG1lbW9yeV9sb25nX2RvdWJsZSB4ID0KKyAgICAgIHsgTERCTDgwX1dPUkRTICgweDQwMDAsIDB4NjMzMzMzMzMsIDB4MDAwMDAwMDApIH07CisgICAgaWYgKCFpc25hbmwgKHgudmFsdWUpKQorICAgICAgcmVzdWx0IHw9IDMyOworICB9CisgIHsgLyogUHNldWRvLURlbm9ybWFsLiAgKi8KKyAgICBzdGF0aWMgbWVtb3J5X2xvbmdfZG91YmxlIHggPQorICAgICAgeyBMREJMODBfV09SRFMgKDB4MDAwMCwgMHg4MzMzMzMzMywgMHgwMDAwMDAwMCkgfTsKKyAgICBpZiAoIWlzbmFubCAoeC52YWx1ZSkpCisgICAgICByZXN1bHQgfD0gNjQ7CisgIH0KKyNlbmRpZgorCisgIHJldHVybiByZXN1bHQ7Cit9XV0pXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfaXNuYW5sX3dvcmtzPXllc10sCisgICAgICAgIFtnbF9jdl9mdW5jX2lzbmFubF93b3Jrcz1ub10sCisgICAgICAgIFtjYXNlICIkaG9zdF9jcHUiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIG5vIG9uIGlhNjQsIHg4Nl82NCwgaTM4Ni4KKyAgICAgICAgICAgaWE2NCB8IHg4Nl82NCB8IGkqODYpIGdsX2N2X2Z1bmNfaXNuYW5sX3dvcmtzPSJndWVzc2luZyBubyI7OworICAgICAgICAgICAqKQorICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgbmV0YnNkKikgZ2xfY3ZfZnVuY19pc25hbmxfd29ya3M9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICAgICAqKSAgICAgICBnbF9jdl9mdW5jX2lzbmFubF93b3Jrcz0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgIDs7CisgICAgICAgICBlc2FjCisgICAgICAgIF0pCisgICAgXSkKK10pCmRpZmYgLS1naXQgYS9tNC9pc3dibGFuay5tNCBiL200L2lzd2JsYW5rLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNjNhMDMKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9pc3dibGFuay5tNApAQCAtMCwwICsxLDQxIEBACisjIGlzd2JsYW5rLm00IHNlcmlhbCA0CitkbmwgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0ZVTkNfSVNXQkxBTktdLAorWworICBBQ19SRVFVSVJFKFtnbF9XQ1RZUEVfSF9ERUZBVUxUU10pCisgIEFDX1JFUVVJUkUoW2dsX1dDVFlQRV9IXSkKKyAgZG5sIFBlcnN1YWRlIGdsaWJjIDx3Y3R5cGUuaD4gdG8gZGVjbGFyZSBpc3dibGFuaygpLgorICBBQ19SRVFVSVJFKFtnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorICBBQ19DSEVDS19GVU5DU19PTkNFKFtpc3dibGFua10pCisgIEFDX0NIRUNLX0RFQ0xTKFtpc3dibGFua10sICwgLCBbWworLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQorICAgPHdjaGFyLmg+LgorICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlIGluY2x1ZGVkCisgICBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorI2luY2x1ZGUgPHdjdHlwZS5oPgorXV0pCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfaXN3YmxhbmsgPSBubzsgdGhlbgorICAgIEhBVkVfSVNXQkxBTks9MAorICAgIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9pc3dibGFuayA9IHllczsgdGhlbgorICAgICAgUkVQTEFDRV9JU1dCTEFOSz0xCisgICAgZmkKKyAgZmkKKyAgaWYgdGVzdCAkSEFWRV9JU1dDTlRSTCA9IDAgfHwgdGVzdCAkUkVQTEFDRV9JU1dDTlRSTCA9IDE7IHRoZW4KKyAgICBkbmwgUmVkZWZpbmUgYWxsIG9mIGlzd2NudHJsLCAuLi4sIHRvd3VwcGVyIGluIDx3Y3R5cGUuaD4uCisgICAgOgorICBlbHNlCisgICAgaWYgdGVzdCAkSEFWRV9JU1dCTEFOSyA9IDAgfHwgdGVzdCAkUkVQTEFDRV9JU1dCTEFOSyA9IDE7IHRoZW4KKyAgICAgIGRubCBSZWRlZmluZSBvbmx5IGlzd2JsYW5rLgorICAgICAgOgorICAgIGZpCisgIGZpCisKK10pCmRpZmYgLS1naXQgYS9tNC9qYXZhY29tcC5tNCBiL200L2phdmFjb21wLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMTNjOWYKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9qYXZhY29tcC5tNApAQCAtMCwwICsxLDYzNyBAQAorIyBqYXZhY29tcC5tNCBzZXJpYWwgMTIKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMywgMjAwNi0yMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorZG5sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFByZXJlcXVpc2l0ZXMgb2YgamF2YWNvbXAuc2guCisjIGd0X0pBVkFDT01QKFtzb3VyY2UtdmVyc2lvbl0sIFt0YXJnZXQtdmVyc2lvbl0pCisjIFNldHMgSEFWRV9KQVZBQ09NUCB0byBub25lbXB0eSBpZiBqYXZhY29tcC5zaCB3aWxsIGFsbG93IEphdmEgc291cmNlIGNvZGUKKyMgYWNjb3JkaW5nIHRvIHNvdXJjZS12ZXJzaW9uIHRvIGJlIGNvbXBpbGVkIHRvIEphdmEgYnl0ZWNvZGUgY2xhc3NlcyBpbiB0aGUKKyMgdGFyZ2V0LXZlcnNpb24gZm9ybWF0LgorIworIyBzb3VyY2UtdmVyc2lvbiBjYW4gYmU6ICAgIHN1cHBvcnQgZm9yCisjICAgICAgICAgICAxLjMgICAgICAgICAgICAgaW5uZXIgY2xhc3NlcworIyAgICAgICAgICAgMS40ICAgICAgICAgICAgIGFzc2VydCBrZXl3b3JkCisjICAgICAgICAgICAxLjUgICAgICAgICAgICAgZ2VuZXJpYyBjbGFzc2VzIGFuZCBtZXRob2RzCisjICAgICAgICAgICAxLjYgICAgICAgICAgICAgKG5vdCB5ZXQgc3VwcG9ydGVkKQorIworIyB0YXJnZXQtdmVyc2lvbiBjYW4gYmU6ICBjbGFzc2ZpbGUgdmVyc2lvbjoKKyMgICAgICAgICAgIDEuMSAgICAgICAgICAgICAgICAgNDUuMworIyAgICAgICAgICAgMS4yICAgICAgICAgICAgICAgICA0Ni4wCisjICAgICAgICAgICAxLjMgICAgICAgICAgICAgICAgIDQ3LjAKKyMgICAgICAgICAgIDEuNCAgICAgICAgICAgICAgICAgNDguMAorIyAgICAgICAgICAgMS41ICAgICAgICAgICAgICAgICA0OS4wCisjICAgICAgICAgICAxLjYgICAgICAgICAgICAgICAgIDUwLjAKKyMgVGhlIGNsYXNzZmlsZSB2ZXJzaW9uIG9mIGEgLmNsYXNzIGZpbGUgY2FuIGJlIGRldGVybWluZWQgdGhyb3VnaCB0aGUgImZpbGUiCisjIGNvbW1hbmQuIE1vcmUgcG9ydGFibHksIHRoZSBjbGFzc2ZpbGUgbWFqb3IgdmVyc2lvbiBjYW4gYmUgZGV0ZXJtaW5lZCB0aHJvdWdoCisjICJvZCAtQSBuIC10IGQxIC1qIDcgLU4gMSBjbGFzc2ZpbGUiLgorIyB0YXJnZXQtdmVyc2lvbiBjYW4gYWxzbyBiZSBvbWl0dGVkLiBJbiB0aGlzIGNhc2UsIHRoZSByZXF1aXJlZCB0YXJnZXQtdmVyc2lvbgorIyBpcyBkZXRlcm1pbmVkIGZyb20gdGhlIGZvdW5kIEpWTSAoc2VlIG1hY3JvIGd0X0pBVkFFWEVDKToKKyMgICAgICB0YXJnZXQtdmVyc2lvbiAgIGZvciBKVk0KKyMgICAgICAgICAgIDEuMSAgICAgICAgIEpESyAxLjEsIGp2aWV3CisjICAgICAgICAgICAxLjIgICAgICAgICBKREsvSlJFIDEuMgorIyAgICAgICAgICAgMS4zICAgICAgICAgSkRLL0pSRSAxLjMsIGdpaiAzLjMsIDMuNAorIyAgICAgICAgICAgMS40ICAgICAgICAgSkRLL0pSRSAxLjQsIGdpaiA0LjAsIDQuMQorIyAgICAgICAgICAgMS41ICAgICAgICAgSkRLL0pSRSAxLjUKKyMgICAgICAgICAgIDEuNiAgICAgICAgIEpESy9KUkUgMS42CisjIE5vdGU6IGdpaiA+PSAzLjMgY2FuIGluIHNvbWUgY2FzZXMgaGFuZGxlIGNsYXNzZXMgY29tcGlsZWQgd2l0aCAtdGFyZ2V0IDEuNCwKKyMgYW5kIGdpaiA+PSA0LjEgY2FuIGluIHNvbWUgY2FzZXMgcGFydGlhbGx5IGhhbmRsZSBjbGFzc2VzIGNvbXBpbGVkIHdpdGgKKyMgLXRhcmdldCAxLjUsIGJ1dCBJIGhhdmUgbm8gaWRlYSBob3cgY29tcGxldGUgdGhpcyBzdXBwb3J0IGlzLgorIworIyBTcGVjaWZ5aW5nIHRhcmdldC12ZXJzaW9uIGlzIHVzZWZ1bCB3aGVuIGJ1aWxkaW5nIGEgbGlicmFyeSAoLmphcikgdGhhdCBpcworIyB1c2VmdWwgb3V0c2lkZSB0aGUgZ2l2ZW4gcGFja2FnZS4gT21pdHRpbmcgdGFyZ2V0LXZlcnNpb24gaXMgdXNlZnVsIHdoZW4KKyMgYnVpbGRpbmcgYW4gYXBwbGljYXRpb24uCisjCisjIEl0IGlzIHVucmVhc29uYWJsZSB0byBhc2sgZm9yOgorIyAgIC0gdGFyZ2V0LXZlcnNpb24gPCAxLjQgd2l0aCBzb3VyY2UtdmVyc2lvbiA+PSAxLjQsIG9yCisjICAgLSB0YXJnZXQtdmVyc2lvbiA8IDEuNSB3aXRoIHNvdXJjZS12ZXJzaW9uID49IDEuNSwgb3IKKyMgICAtIHRhcmdldC12ZXJzaW9uIDwgMS42IHdpdGggc291cmNlLXZlcnNpb24gPj0gMS42LAorIyBiZWNhdXNlIGV2ZW4gU3VuJ3MgamF2YWMgZG9lc24ndCBzdXBwb3J0IHRoZXNlIGNvbWJpbmF0aW9ucy4KKyMKKyMgSXQgaXMgcmVkdW5kYW50IHRvIGFzayBmb3IgYSB0YXJnZXQtdmVyc2lvbiA+IHNvdXJjZS12ZXJzaW9uLCBzaW5jZSB0aGUKKyMgc21hbGxlciB0YXJnZXQtdmVyc2lvbiA9IHNvdXJjZS12ZXJzaW9uIHdpbGwgYWxzbyBhbHdheXMgd29yayBhbmQgbmV3ZXIgSlZNcworIyBzdXBwb3J0IHRoZSBvbGRlciB0YXJnZXQtdmVyc2lvbnMgdG9vLiBFeGNlcHQgZm9yIHRoZSBjYXNlCisjIHRhcmdldC12ZXJzaW9uID0gMS40LCBzb3VyY2UtdmVyc2lvbiA9IDEuMywgd2hpY2ggYWxsb3dzIGdjaiB2ZXJzaW9ucyAzLjAKKyMgdG8gMy4yIHRvIGJlIHVzZWQuCisKK0FDX0RFRlVOKFtndF9KQVZBQ09NUF0sCitbCisgIGlmZWxzZShbJDJdLCBbXSwgW0FDX1JFUVVJUkUoW2d0X0pBVkFFWEVDXSldLCBbXSkKKyAgQUNfRUdSRVBfQ1BQKFt5ZXNdLCBbCisjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBfX0NZR1dJTl9fIHx8IGRlZmluZWQgX19FTVhfXyB8fCBkZWZpbmVkIF9fREpHUFBfXworICB5ZXMKKyNlbmRpZgorXSwgQ0xBU1NQQVRIX1NFUEFSQVRPUj0nOycsIENMQVNTUEFUSF9TRVBBUkFUT1I9JzonKQorICBzb3VyY2VfdmVyc2lvbj0kMQorICB0ZXN0IC1uICIkc291cmNlX3ZlcnNpb24iIHx8IHsKKyAgICBBQ19NU0dfRVJST1IoW21pc3Npbmcgc291cmNlLXZlcnNpb24gYXJndW1lbnQgdG8gZ3RfQCZ0QEpBVkFDT01QXSkKKyAgfQorICBpZmVsc2UoWyQyXSwgW10sCisgICAgW2lmIHRlc3QgLW4gIiRIQVZFX0pBVkFFWEVDIjsgdGhlbgorICAgICAgIGRubCBVc2UgJENPTkZfSkFWQSB0byBkZXRlcm1pbmUgdGhlIEpWTSdzIHZlcnNpb24uCitjaGFuZ2VxdW90ZSgsKWRubAorICAgICAgIGNhdCA+IGNvbmZ0ZXN0dmVyLmphdmEgPDxFT0YKK3B1YmxpYyBjbGFzcyBjb25mdGVzdHZlciB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS5zcGVjaWZpY2F0aW9uLnZlcnNpb24iKSk7CisgIH0KK30KK0VPRgorY2hhbmdlcXVvdGUoWyxdKWRubAorICAgICAgIGRubCBBIHByZWNvbXBpbGVkIHZlcnNpb24gb2YgY29uZnRlc3R2ZXIuamF2YSwgY29tcGlsZWQgd2l0aAorICAgICAgIGRubCAiamF2YWMgLXRhcmdldCAxLjEiLiBUaGlzIGF2b2lkcyBoYXZpbmcgdG8gY29tcGlsZSBjb25mdGVzdHZlci5qYXZhCisgICAgICAgZG5sIGR1cmluZyBlYWNoIHRlc3QgZm9yIGEgc3VpdGFibGUgSmF2YSBjb21waWxlci4KKyAgICAgICBkbmwgRm9yIHRoZSBjb252ZXJzaW9uIGZyb20gYmluYXJ5IHRvIHRoaXMgQVNDSUkgZW5jYXBzdWxhdGlvbiwgYXZvaWRpbmcKKyAgICAgICBkbmwgdG8gYXNzdW1lIHRoZSBwcmVzZW5jZSBvZiB1dWRlY29kZSwgdXNlIHRoZSBjb21tYW5kCisgICAgICAgZG5sICAgJCBvZCAtQSBuIC10IG8xIDwgY29uZnRlc3R2ZXIuY2xhc3MgfCB0ciAnICcgJ1wwMTInfCBzb3J0IHwgdW5pcSB8IHNlZCAtZSAnL14kL2QnIC1lICdzLF4sXFwsJyB8IHRyIC1kICdcMDEyJworICAgICAgIGRubCBhbmQgdGhlIGxvbmcgdHIgY29tbWFuZCBpbiBvcHBvc2l0ZSBkaXJlY3Rpb24uCisgICAgICAgZG5sIEZpbmFsbHkgbW92ZSB0aGUgcG9zaXRpb24gY29ycmVzcG9uZGluZyB0byBcMDU1IHRvIHRoZSBsYXN0IHBvc2l0aW9uLAorICAgICAgIGRubCB0byB3b3JrIGFyb3VuZCBhIGNvcmV1dGlscy01LnggYnVnLgorICAgICAgIGVjaG8gJ3l6d3ghJCFJIUQsISkhMyshNCE1KiE2LCE0ITcsITghOSkhOikhOyIhKE1laWVuTiIhJEZHVyIhJU9qYWIiITJRZWliUm9oWmJsVllaZ2IiISVoWWVpIiE5RlhRZllwWUtnWWlkS1VubGVpZExHVyIhLFVqb2xfYlBlZ2IiITNfamljbmJtbnBibEpmWXBZLyEqISspITwvIT0hPiIhPWZZcFlKbWtiX2VjZV9ZbmVqaUpwYmxtZWppLyE/IUApIUEvIUIhQyIhLl9qaWNuYm1ucGJsIiEzZllwWUtnWWlkS1NaZmJfbiIhM2ZZcFlLZ1lpZEtVcW1uYmgiISRqb24iIThRZllwWUtlaktUbGVpblVubGJZaEwiIS5kYm5UbGprYmxucSIhRUZRZllwWUtnWWlkS1VubGVpZExHUWZZcFlLZ1lpZEtVbmxlaWRMIiE2ZllwWUtlaktUbGVpblVubGJZaCIhKWtsZWluZ2kiIThGUWZZcFlLZ1lpZEtVbmxlaWRMR1chRCEoISkhISEhISMhIiEqISshIiEsISEhQCEiISIhISEmSHUhInIhISEiIS4hISEoISIhISEiISshLyEwISIhLCEhIUYhIyEiISEhL3MhIzUkdiEldCEmciEhISIhLiEhISwhIyEhISQhLiElISIhMSEhISMhMicgXAorICAgICAgICAgfCB0ciAtZCAnXDAxMlwwMTUnIFwKKyAgICAgICAgIHwgdHIgJyEiIyQlJigpKissLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISktMTU5PUFFSU1RVVldYWVpfYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpJJyAnXDAwMFwwMDFcMDAyXDAwM1wwMDRcMDA1XDAwNlwwMDdcMDEwXDAxMVwwMTJcMDEzXDAxNFwwMTVcMDE2XDAxN1wwMjBcMDIxXDAyMlwwMjNcMDI0XDAyNVwwMjZcMDI3XDAzMFwwMzFcMDMyXDAzM1wwMzRcMDM1XDAzNlwwMzdcMDQwXDA0MVwwNDZcMDUwXDA1MVwwNTJcMDU2XDA1N1wwNzNcMDc0XDA3NlwxMDNcMTA2XDExNFwxMTZcMTE3XDEyMFwxMjNcMTI0XDEyNlwxMzNcMTQxXDE0MlwxNDNcMTQ0XDE0NVwxNDZcMTQ3XDE1MVwxNTJcMTU0XDE1NVwxNTZcMTU3XDE2MFwxNjJcMTYzXDE2NFwxNjVcMTY2XDE3MVwyNjFcMjYyXDI2NlwyNjdcMjcwXDI3MlwyNzZcMzEyXDM3NlwwNTUnIFwKKyAgICAgICAgID4gY29uZnRlc3R2ZXIuY2xhc3MKKyAgICAgICB0YXJnZXRfdmVyc2lvbj1geworICAgICAgICAgdW5zZXQgSkFWQV9IT01FCisgICAgICAgICBlY2hvICIkYXNfbWU6X19vbGluZV9fOiBDTEFTU1BBVEg9LiR7Q0xBU1NQQVRIOiskQ0xBU1NQQVRIX1NFUEFSQVRPUiRDTEFTU1BBVEh9ICRDT05GX0pBVkEgY29uZnRlc3R2ZXIiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAgIENMQVNTUEFUSD0uJHtDTEFTU1BBVEg6KyRDTEFTU1BBVEhfU0VQQVJBVE9SJENMQVNTUEFUSH0gJENPTkZfSkFWQSBjb25mdGVzdHZlciAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgIH1gCisgICAgICAgY2FzZSAiJHRhcmdldF92ZXJzaW9uIiBpbgorICAgICAgICAgMS4xIHwgMS4yIHwgMS4zIHwgMS40IHwgMS41IHwgMS42KSA7OworICAgICAgICAgbnVsbCkKKyAgICAgICAgICAgZG5sIEpESyAxLjEuWCByZXR1cm5zIG51bGwuCisgICAgICAgICAgIHRhcmdldF92ZXJzaW9uPTEuMSA7OworICAgICAgICAgKikgQUNfTVNHX1dBUk4oW3Vua25vd24gdGFyZ2V0LXZlcnNpb24gJHRhcmdldF92ZXJzaW9uLCBwbGVhc2UgdXBkYXRlIGd0X0AmdEBKQVZBQ09NUCBtYWNyb10pCisgICAgICAgICAgICB0YXJnZXRfdmVyc2lvbj0xLjEgOzsKKyAgICAgICBlc2FjCisgICAgIGVsc2UKKyAgICAgICB0YXJnZXRfdmVyc2lvbj0iMS4xIgorICAgICBmaQorICAgIF0sCisgICAgW3RhcmdldF92ZXJzaW9uPSQyXSkKKyAgY2FzZSAiJHNvdXJjZV92ZXJzaW9uIiBpbgorICAgIDEuMykgZ29vZGNvZGU9J2NsYXNzIGNvbmZ0ZXN0IHt9JworICAgICAgICAgZmFpbGNvZGU9J2NsYXNzIGNvbmZ0ZXN0ZmFpbCB7IHN0YXRpYyB7IGFzc2VydCh0cnVlKTsgfSB9JyA7OworICAgIDEuNCkgZ29vZGNvZGU9J2NsYXNzIGNvbmZ0ZXN0ICAgICB7IHN0YXRpYyB7IGFzc2VydCh0cnVlKTsgfSB9JworICAgICAgICAgZmFpbGNvZGU9J2NsYXNzIGNvbmZ0ZXN0ZmFpbDxUPiB7IFQgZm9vKCkgeyByZXR1cm4gbnVsbDsgfSB9JyA7OworICAgIDEuNSkgZ29vZGNvZGU9J2NsYXNzIGNvbmZ0ZXN0PFQ+ICAgICB7IFQgZm9vKCkgeyByZXR1cm4gbnVsbDsgfSB9JworICAgICAgICAgZmFpbGNvZGU9J2NsYXNzIGNvbmZ0ZXN0ZmFpbCBzeW50YXggZXJyb3InIDs7CisgICAgKikgQUNfTVNHX0VSUk9SKFtpbnZhbGlkIHNvdXJjZS12ZXJzaW9uIGFyZ3VtZW50IHRvIGd0X0AmdEBKQVZBQ09NUDogJHNvdXJjZV92ZXJzaW9uXSkgOzsKKyAgZXNhYworICBjYXNlICIkdGFyZ2V0X3ZlcnNpb24iIGluCisgICAgMS4xKSBjZnZlcnNpb249NDUgOzsKKyAgICAxLjIpIGNmdmVyc2lvbj00NiA7OworICAgIDEuMykgY2Z2ZXJzaW9uPTQ3IDs7CisgICAgMS40KSBjZnZlcnNpb249NDggOzsKKyAgICAxLjUpIGNmdmVyc2lvbj00OSA7OworICAgIDEuNikgY2Z2ZXJzaW9uPTUwIDs7CisgICAgKikgQUNfTVNHX0VSUk9SKFtpbnZhbGlkIHRhcmdldC12ZXJzaW9uIGFyZ3VtZW50IHRvIGd0X0AmdEBKQVZBQ09NUDogJHRhcmdldF92ZXJzaW9uXSkgOzsKKyAgZXNhYworICAjIEZ1bmN0aW9uIHRvIG91dHB1dCB0aGUgY2xhc3NmaWxlIHZlcnNpb24gb2YgYSBmaWxlICg4dGggYnl0ZSkgaW4gZGVjaW1hbC4KKyAgaWYgb2QgLUEgeCA8IC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisgICAgIyBVc2UgUE9TSVggb2QuCisgICAgZnVuY19jbGFzc2ZpbGVfdmVyc2lvbiAoKQorICAgIHsKKyAgICAgIG9kIC1BIG4gLXQgZDEgLWogNyAtTiAxICJbJF0xIgorICAgIH0KKyAgZWxzZQorICAgICMgVXNlIEJTRCBoZXhkdW1wLgorICAgIGZ1bmNfY2xhc3NmaWxlX3ZlcnNpb24gKCkKKyAgICB7CisgICAgICBkZCBpZj0iWyRdMSIgYnM9MSBjb3VudD0xIHNraXA9NyAyPi9kZXYvbnVsbCB8IGhleGR1bXAgLWUgJzEvMSAiJTNkICInCisgICAgICBlY2hvCisgICAgfQorICBmaQorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBKYXZhIGNvbXBpbGVyXSkKKyAgZG5sCisgIGRubCBUaGUgc3VwcG9ydCBvZiBHTlUgZ2NqIGZvciB0YXJnZXQtdmVyc2lvbiBhbmQgc291cmNlLXZlcnNpb246CisgIGRubAorICBkbmwgICBnY2ogMy4wLjQgdG8gNC4yIGRvZXMgbm90IGhhdmUgYSB3YXkgdG8gc3BlY2lmeSB0aGUgdGFyZ2V0LXZlcnNpb24uCisgIGRubCAgIEl0IGFsd2F5cyBhc3N1bWVzIHRhcmdldC12ZXJzaW9uPTEuNCBidXQgbGFiZWxzIHRoZSBjbGFzcyBmaWxlcyBhcyAxLjEuCisgIGRubCAgIE9uZSBjb25zZXF1ZW5jZSBvZiB0aGlzIGlzIHRoYXQgZ2NqIGNvbXBpbGVzIEdldFVSTC5qYXZhIHRvIGludmFsaWQKKyAgZG5sICAgYnl0ZWNvZGUsIHdoaWNoIGNyYXNoZXMgd2l0aCBhIFZlcmlmeUVycm9yIHdoZW4gZXhlY3V0ZWQgYnkgU3VuIEphdmEKKyAgZG5sICAgMS4zLjEuIFRoZSBidWcgaXMgcmVnaXN0ZXJlZCBhcyBqYXZhLzcwNjYsIHNlZQorICBkbmwgICBodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTcwNjYKKyAgZG5sICAgZ2NqIDQuMyBhbmQgbmV3ZXIgaGFzIGFuIG9wdGlvbiAtZnRhcmdldD0xLlguCisgIGRubAorICBkbmwgICBGb3IgZ2NqIDwgMy4zLCB0aGUgc291cmNlLXZlcnNpb24gYWx3YXlzIGlzIDEuMy4KKyAgZG5sICAgRm9yIDMuMyA8PSBnY2ogPCA0LjMsIHRoZSBzb3VyY2UtdmVyc2lvbiBkZWZhdWx0cyB0byAxLjQ7IG9wdGlvbgorICBkbmwgICAiLWZuby1hc3NlcnQiIHN3aXRjaGVzIHRvIHNvdXJjZS12ZXJzaW9uIDEuMy4KKyAgZG5sICAgZ2NqID49IDQuMyBoYXMgYW4gb3B0aW9uIC1mc291cmNlPTEuWC4KKyAgZG5sCisgIGRubCBUaGUgc3VwcG9ydCBvZiBTdW4gamF2YWMgZm9yIHRhcmdldC12ZXJzaW9uIGFuZCBzb3VyY2UtdmVyc2lvbjoKKyAgZG5sCisgIGRubCAgIGphdmFjIDEuMzogICAtdGFyZ2V0IDEuMSAxLjIgMS4zICAgICAgICAgICAgICAgZGVmYXVsdDogMS4xCisgIGRubCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlIGFsd2F5czogMS4zCisgIGRubAorICBkbmwgICBqYXZhYyAxLjQ6ICAgLXRhcmdldCAxLjEgMS4yIDEuMyAxLjQgICAgICAgICAgIGRlZmF1bHQ6IDEuMgorICBkbmwgICAgICAgICAgICAgICAgLXNvdXJjZSAxLjMgMS40ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEuMworICBkbmwgICAgICAgICAgICAgICAgLXRhcmdldCAxLjEvMS4yLzEuMyBvbmx5IHBvc3NpYmxlIHdpdGggLXNvdXJjZSAxLjMgb3Igbm8gLXNvdXJjZQorICBkbmwKKyAgZG5sICAgamF2YWMgMS41OiAgIC10YXJnZXQgMS4xIDEuMiAxLjMgMS40IDEuNSAgICAgICBkZWZhdWx0OiAxLjUKKyAgZG5sICAgICAgICAgICAgICAgIC1zb3VyY2UgMS4zIDEuNCAxLjUgICAgICAgICAgICAgICBkZWZhdWx0OiAxLjUKKyAgZG5sICAgICAgICAgICAgICAgIC10YXJnZXQgMS4xLzEuMi8xLjMgb25seSBwb3NzaWJsZSB3aXRoIC1zb3VyY2UgMS4zCisgIGRubCAgICAgICAgICAgICAgICAtdGFyZ2V0IDEuNCBvbmx5IHBvc3NpYmxlIHdpdGggLXNvdXJjZSAxLjMvMS40CisgIGRubAorICBkbmwgICBqYXZhYyAxLjY6ICAgLXRhcmdldCAxLjEgMS4yIDEuMyAxLjQgMS41IDEuNiAgIGRlZmF1bHQ6IDEuNgorICBkbmwgICAgICAgICAgICAgICAgLXNvdXJjZSAxLjMgMS40IDEuNSAxLjYgICAgICAgICAgIGRlZmF1bHQ6IDEuNQorICBkbmwgICAgICAgICAgICAgICAgLXRhcmdldCAxLjEvMS4yLzEuMyBvbmx5IHBvc3NpYmxlIHdpdGggLXNvdXJjZSAxLjMKKyAgZG5sICAgICAgICAgICAgICAgIC10YXJnZXQgMS40IG9ubHkgcG9zc2libGUgd2l0aCAtc291cmNlIDEuMy8xLjQKKyAgZG5sICAgICAgICAgICAgICAgIC10YXJnZXQgMS41IG9ubHkgcG9zc2libGUgd2l0aCAtc291cmNlIDEuMy8xLjQvMS41IG9yIG5vIC1zb3VyY2UKKyAgZG5sCisgIGRubCBUaGUgc3VwcG9ydCBvZiBqaWtlcyBmb3IgdGFyZ2V0LXZlcnNpb24gYW5kIHNvdXJjZS12ZXJzaW9uOgorICBkbmwKKyAgZG5sICAgamlrZXMgMS4xNCBkb2VzIG5vdCBoYXZlIGEgd2F5IHRvIHNwZWNpZnkgdGhlIHRhcmdldC12ZXJzaW9uLiBJdAorICBkbmwgICBhbHdheXMgYXNzdW1lcyB0YXJnZXQtdmVyc2lvbj0xLjEuCisgIGRubAorICBkbmwgICBGb3IgamlrZXMgMS4xNCwgdGhlIHNvdXJjZS12ZXJzaW9uIGFsd2F5cyBpcyAxLjMuCisgIGRubAorICBDT05GX0pBVkFDPQorICBIQVZFX0pBVkFDX0VOVlZBUj0KKyAgSEFWRV9HQ0pfQz0KKyAgSEFWRV9KQVZBQz0KKyAgSEFWRV9KSUtFUz0KKyAgSEFWRV9KQVZBQ09NUD0KK2NoYW5nZXF1b3RlKCwpZG5sCisgIGNhdCA+IGNvbmZ0ZXN0bGliLmphdmEgPDxFT0YKK3B1YmxpYyBjbGFzcyBjb25mdGVzdGxpYiB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CisgIH0KK30KK0VPRgorY2hhbmdlcXVvdGUoWyxdKWRubAorICBlY2hvICIkZ29vZGNvZGUiID4gY29uZnRlc3QuamF2YQorICBlY2hvICIkZmFpbGNvZGUiID4gY29uZnRlc3RmYWlsLmphdmEKKyAgZG5sIElmIHRoZSB1c2VyIGhhcyBzZXQgdGhlIEpBVkFDIGVudmlyb25tZW50IHZhcmlhYmxlLCB1c2UgdGhhdCwgaWYgaXQKKyAgZG5sIHNhdGlzZmllcyB0aGUgY29uc3RyYWludHMgKHBvc3NpYmx5IGFmdGVyIGFkZGluZyAtdGFyZ2V0IGFuZCAtc291cmNlCisgIGRubCBvcHRpb25zKS4KKyAgaWYgdGVzdCAtbiAiJEpBVkFDIjsgdGhlbgorICAgIGRubCBUcnkgdGhlIG9yaWdpbmFsICRKQVZBQy4KKyAgICBpZiAkSkFWQUMgLS12ZXJzaW9uIDI+L2Rldi9udWxsIHwgc2VkIC1lIDFxIHwgZ3JlcCBnY2ogPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIGRubCBJdCdzIGEgdmVyc2lvbiBvZiBnY2ouCitjaGFuZ2VxdW90ZSgsKWRubAorICAgICAgaWYgJEpBVkFDIC0tdmVyc2lvbiAyPi9kZXYvbnVsbCB8IHNlZCAtZSAncyxeW14wLTldKiwsJyAtZSAxcSB8IHNlZCAtZSAnL140XC5bMDEyXS9kJyB8IGdyZXAgJ15bNC05XScgPi9kZXYvbnVsbDsgdGhlbgorY2hhbmdlcXVvdGUoWyxdKWRubAorICAgICAgICBkbmwgSXQncyBhIHZlcnNpb24gb2YgZ2NqID49IDQuMy4gQXNzdW1lIHRoZSBjbGFzc2ZpbGUgdmVyc2lvbnMgYXJlIGNvcnJlY3QuCisgICAgICAgIGRubCBUcnkgJEpBVkFDLgorICAgICAgICBybSAtZiBjb25mdGVzdC5jbGFzcworICAgICAgICBpZiB7IGVjaG8gIiRhc19tZTpfX29saW5lX186ICRKQVZBQyAtZCAuIGNvbmZ0ZXN0LmphdmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAgICAgICAkSkFWQUMgLWQgLiBjb25mdGVzdC5qYXZhID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4mMQorICAgICAgICAgICB9IFwKKyAgICAgICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdC5jbGFzcyBcCisgICAgICAgICAgICYmIGV4cHIgYGZ1bmNfY2xhc3NmaWxlX3ZlcnNpb24gY29uZnRlc3QuY2xhc3NgICc8PScgJGNmdmVyc2lvbiA+L2Rldi9udWxsIDI+JkFTX01FU1NBR0VfTE9HX0ZEOyB0aGVuCisgICAgICAgICAgZG5sIFRyeSBhZGRpbmcgLWZzb3VyY2Ugb3B0aW9uIGlmIGl0IGlzIHVzZWZ1bC4KKyAgICAgICAgICBybSAtZiBjb25mdGVzdC5jbGFzcworICAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0ZmFpbC5jbGFzcworICAgICAgICAgIGlmIHsgZWNobyAiJGFzX21lOl9fb2xpbmVfXzogJEpBVkFDIC1mc291cmNlPSRzb3VyY2VfdmVyc2lvbiAtZCAuIGNvbmZ0ZXN0LmphdmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAgICAgICAgICRKQVZBQyAtZnNvdXJjZT0iJHNvdXJjZV92ZXJzaW9uIiAtZCAuIGNvbmZ0ZXN0LmphdmEgPiZBU19NRVNTQUdFX0xPR19GRCAyPiYxCisgICAgICAgICAgICAgfSBcCisgICAgICAgICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdC5jbGFzcyBcCisgICAgICAgICAgICAgJiYgZXhwciBgZnVuY19jbGFzc2ZpbGVfdmVyc2lvbiBjb25mdGVzdC5jbGFzc2AgJzw9JyAkY2Z2ZXJzaW9uID4vZGV2L251bGwgMj4mQVNfTUVTU0FHRV9MT0dfRkQgXAorICAgICAgICAgICAgICYmIHsgZWNobyAiJGFzX21lOl9fb2xpbmVfXzogJEpBVkFDIC1kIC4gY29uZnRlc3RmYWlsLmphdmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAgICAgICAgICAgICRKQVZBQyAtZCAuIGNvbmZ0ZXN0ZmFpbC5qYXZhID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4mMQorICAgICAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgICYmIHRlc3QgLWYgY29uZnRlc3RmYWlsLmNsYXNzIFwKKyAgICAgICAgICAgICAmJiAhIHsgZWNobyAiJGFzX21lOl9fb2xpbmVfXzogJEpBVkFDIC1mc291cmNlPSRzb3VyY2VfdmVyc2lvbiAtZCAuIGNvbmZ0ZXN0ZmFpbC5qYXZhIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgICAgICAgICAgICAgICRKQVZBQyAtZnNvdXJjZT0iJHNvdXJjZV92ZXJzaW9uIiAtZCAuIGNvbmZ0ZXN0ZmFpbC5qYXZhID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4mMQorICAgICAgICAgICAgICAgICAgfTsgdGhlbgorICAgICAgICAgICAgQ09ORl9KQVZBQz0iJEpBVkFDIC1mc291cmNlPSRzb3VyY2VfdmVyc2lvbiIKKyAgICAgICAgICAgIEhBVkVfSkFWQUNfRU5WVkFSPTEKKyAgICAgICAgICAgIEhBVkVfSkFWQUNPTVA9MQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIENPTkZfSkFWQUM9IiRKQVZBQyIKKyAgICAgICAgICAgIEhBVkVfSkFWQUNfRU5WVkFSPTEKKyAgICAgICAgICAgIEhBVkVfSkFWQUNPTVA9MQorICAgICAgICAgIGZpCisgICAgICAgIGVsc2UKKyAgICAgICAgICBkbmwgVHJ5IHdpdGggLWZzb3VyY2UgYW5kIC1mdGFyZ2V0IG9wdGlvbnMuCisgICAgICAgICAgcm0gLWYgY29uZnRlc3QuY2xhc3MKKyAgICAgICAgICBybSAtZiBjb25mdGVzdGZhaWwuY2xhc3MKKyAgICAgICAgICBpZiB7IGVjaG8gIiRhc19tZTpfX29saW5lX186ICRKQVZBQyAtZnNvdXJjZT0kc291cmNlX3ZlcnNpb24gLWZ0YXJnZXQ9JHRhcmdldF92ZXJzaW9uIC1kIC4gY29uZnRlc3QuamF2YSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgICAgICAgICAgJEpBVkFDIC1mc291cmNlPSIkc291cmNlX3ZlcnNpb24iIC1mdGFyZ2V0PSIkdGFyZ2V0X3ZlcnNpb24iIC1kIC4gY29uZnRlc3QuamF2YSA+JkFTX01FU1NBR0VfTE9HX0ZEIDI+JjEKKyAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAmJiB0ZXN0IC1mIGNvbmZ0ZXN0LmNsYXNzIFwKKyAgICAgICAgICAgICAmJiBleHByIGBmdW5jX2NsYXNzZmlsZV92ZXJzaW9uIGNvbmZ0ZXN0LmNsYXNzYCAnPD0nICRjZnZlcnNpb24gPi9kZXYvbnVsbCAyPiZBU19NRVNTQUdFX0xPR19GRDsgdGhlbgorICAgICAgICAgICAgQ09ORl9KQVZBQz0iJEpBVkFDIC1mc291cmNlPSRzb3VyY2VfdmVyc2lvbiAtZnRhcmdldD0kdGFyZ2V0X3ZlcnNpb24iCisgICAgICAgICAgICBIQVZFX0pBVkFDX0VOVlZBUj0xCisgICAgICAgICAgICBIQVZFX0pBVkFDT01QPTEKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZWxzZQorICAgICAgICBkbmwgSXQncyBhIHZlcnNpb24gb2YgZ2NqIDwgNC4zLiBJZ25vcmUgdGhlIHZlcnNpb24gb2YgY29uZnRlc3QuY2xhc3MuCisgICAgICAgIGlmIHRlc3QgIiR0YXJnZXRfdmVyc2lvbiIgPSAxLjQgJiYgdGVzdCAiJHNvdXJjZV92ZXJzaW9uIiA9IDEuNDsgdGhlbgorICAgICAgICAgIGRubCBUcnkgJEpBVkFDLgorICAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmNsYXNzCisgICAgICAgICAgaWYgeyBlY2hvICIkYXNfbWU6X19vbGluZV9fOiAkSkFWQUMgLWQgLiBjb25mdGVzdC5qYXZhIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgICAgICAgICAkSkFWQUMgLWQgLiBjb25mdGVzdC5qYXZhID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4mMQorICAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgICYmIHRlc3QgLWYgY29uZnRlc3QuY2xhc3M7IHRoZW4KKyAgICAgICAgICAgIENPTkZfSkFWQUM9IiRKQVZBQyIKKyAgICAgICAgICAgIEhBVkVfSkFWQUNfRU5WVkFSPTEKKyAgICAgICAgICAgIEhBVkVfSkFWQUNPTVA9MQorICAgICAgICAgIGZpCisgICAgICAgIGVsc2UKKyAgICAgICAgICBpZiB0ZXN0ICIkdGFyZ2V0X3ZlcnNpb24iID0gMS40ICYmIHRlc3QgIiRzb3VyY2VfdmVyc2lvbiIgPSAxLjM7IHRoZW4KKyAgICAgICAgICAgIGRubCBUcnkgJEpBVkFDIGFuZCAiJEpBVkFDIC1mbm8tYXNzZXJ0Ii4gQnV0IGFkZCAtZm5vLWFzc2VydCBvbmx5IGlmCisgICAgICAgICAgICBkbmwgaXQgbWFrZXMgYSBkaWZmZXJlbmNlLiAoSXQgY291bGQgYWxyZWFkeSBiZSBwYXJ0IG9mICRKQVZBQy4pCisgICAgICAgICAgICBqYXZhY193b3Jrcz0KKyAgICAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmNsYXNzCisgICAgICAgICAgICBpZiB7IGVjaG8gIiRhc19tZTpfX29saW5lX186ICRKQVZBQyAtZCAuIGNvbmZ0ZXN0LmphdmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAgICAgICAgICAgJEpBVkFDIC1kIC4gY29uZnRlc3QuamF2YSA+JkFTX01FU1NBR0VfTE9HX0ZEIDI+JjEKKyAgICAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdC5jbGFzczsgdGhlbgorICAgICAgICAgICAgICBqYXZhY193b3Jrcz0xCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgamF2YWNfbm9hc3NlcnRfd29ya3M9CisgICAgICAgICAgICBybSAtZiBjb25mdGVzdC5jbGFzcworICAgICAgICAgICAgaWYgeyBlY2hvICIkYXNfbWU6X19vbGluZV9fOiAkSkFWQUMgLWZuby1hc3NlcnQgLWQgLiBjb25mdGVzdC5qYXZhIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgICAgICAgICAgICRKQVZBQyAtZm5vLWFzc2VydCAtZCAuIGNvbmZ0ZXN0LmphdmEgPiZBU19NRVNTQUdFX0xPR19GRCAyPiYxCisgICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAgICYmIHRlc3QgLWYgY29uZnRlc3QuY2xhc3M7IHRoZW4KKyAgICAgICAgICAgICAgamF2YWNfbm9hc3NlcnRfd29ya3M9MQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRqYXZhY193b3JrcyIgJiYgdGVzdCAtbiAiJGphdmFjX25vYXNzZXJ0X3dvcmtzIjsgdGhlbgorICAgICAgICAgICAgICBybSAtZiBjb25mdGVzdGZhaWwuY2xhc3MKKyAgICAgICAgICAgICAgaWYgeyBlY2hvICIkYXNfbWU6X19vbGluZV9fOiAkSkFWQUMgLWQgLiBjb25mdGVzdGZhaWwuamF2YSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgICAgICAgICAgICAgICRKQVZBQyAtZCAuIGNvbmZ0ZXN0ZmFpbC5qYXZhID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4mMQorICAgICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdGZhaWwuY2xhc3MgXAorICAgICAgICAgICAgICAgICAmJiAhIHsgZWNobyAiJGFzX21lOl9fb2xpbmVfXzogJEpBVkFDIC1mbm8tYXNzZXJ0IC1kIC4gY29uZnRlc3RmYWlsLmphdmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAgICAgICAgICAgICAgICAgICRKQVZBQyAtZm5vLWFzc2VydCAtZCAuIGNvbmZ0ZXN0ZmFpbC5qYXZhID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4mMQorICAgICAgICAgICAgICAgICAgICAgIH07IHRoZW4KKyAgICAgICAgICAgICAgICBkbmwgIiRKQVZBQyAtZm5vLWFzc2VydCIgd29ya3MgYmV0dGVyIHRoYW4gJEpBVkFDLgorICAgICAgICAgICAgICAgIGphdmFjX3dvcmtzPQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRqYXZhY193b3JrcyI7IHRoZW4KKyAgICAgICAgICAgICAgQ09ORl9KQVZBQz0iJEpBVkFDIgorICAgICAgICAgICAgICBIQVZFX0pBVkFDX0VOVlZBUj0xCisgICAgICAgICAgICAgIEhBVkVfSkFWQUNPTVA9MQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkamF2YWNfbm9hc3NlcnRfd29ya3MiOyB0aGVuCisgICAgICAgICAgICAgICAgQ09ORl9KQVZBQz0iJEpBVkFDIC1mbm8tYXNzZXJ0IgorICAgICAgICAgICAgICAgIEhBVkVfSkFWQUNfRU5WVkFSPTEKKyAgICAgICAgICAgICAgICBIQVZFX0pBVkFDT01QPTEKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgZG5sIEl0J3Mgbm90IGdjai4gQXNzdW1lIHRoZSBjbGFzc2ZpbGUgdmVyc2lvbnMgYXJlIGNvcnJlY3QuCisgICAgICBkbmwgVHJ5ICRKQVZBQy4KKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LmNsYXNzCisgICAgICBpZiB7IGVjaG8gIiRhc19tZTpfX29saW5lX186ICRKQVZBQyAtZCAuIGNvbmZ0ZXN0LmphdmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAgICAgJEpBVkFDIC1kIC4gY29uZnRlc3QuamF2YSA+JkFTX01FU1NBR0VfTE9HX0ZEIDI+JjEKKyAgICAgICAgIH0gXAorICAgICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdC5jbGFzcyBcCisgICAgICAgICAmJiBleHByIGBmdW5jX2NsYXNzZmlsZV92ZXJzaW9uIGNvbmZ0ZXN0LmNsYXNzYCAnPD0nICRjZnZlcnNpb24gPi9kZXYvbnVsbCAyPiZBU19NRVNTQUdFX0xPR19GRDsgdGhlbgorICAgICAgICBkbmwgVHJ5IGFkZGluZyAtc291cmNlIG9wdGlvbiBpZiBpdCBpcyB1c2VmdWwuCisgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmNsYXNzCisgICAgICAgIHJtIC1mIGNvbmZ0ZXN0ZmFpbC5jbGFzcworICAgICAgICBpZiB7IGVjaG8gIiRhc19tZTpfX29saW5lX186ICRKQVZBQyAtc291cmNlICRzb3VyY2VfdmVyc2lvbiAtZCAuIGNvbmZ0ZXN0LmphdmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAgICAgICAkSkFWQUMgLXNvdXJjZSAiJHNvdXJjZV92ZXJzaW9uIiAtZCAuIGNvbmZ0ZXN0LmphdmEgPiZBU19NRVNTQUdFX0xPR19GRCAyPiYxCisgICAgICAgICAgIH0gXAorICAgICAgICAgICAmJiB0ZXN0IC1mIGNvbmZ0ZXN0LmNsYXNzIFwKKyAgICAgICAgICAgJiYgZXhwciBgZnVuY19jbGFzc2ZpbGVfdmVyc2lvbiBjb25mdGVzdC5jbGFzc2AgJzw9JyAkY2Z2ZXJzaW9uID4vZGV2L251bGwgMj4mQVNfTUVTU0FHRV9MT0dfRkQgXAorICAgICAgICAgICAmJiB7IGVjaG8gIiRhc19tZTpfX29saW5lX186ICRKQVZBQyAtZCAuIGNvbmZ0ZXN0ZmFpbC5qYXZhIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgICAgICAgICAgJEpBVkFDIC1kIC4gY29uZnRlc3RmYWlsLmphdmEgPiZBU19NRVNTQUdFX0xPR19GRCAyPiYxCisgICAgICAgICAgICAgIH0gXAorICAgICAgICAgICAmJiB0ZXN0IC1mIGNvbmZ0ZXN0ZmFpbC5jbGFzcyBcCisgICAgICAgICAgICYmICEgeyBlY2hvICIkYXNfbWU6X19vbGluZV9fOiAkSkFWQUMgLXNvdXJjZSAkc291cmNlX3ZlcnNpb24gLWQgLiBjb25mdGVzdGZhaWwuamF2YSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgICAgICAgICAgICAgJEpBVkFDIC1zb3VyY2UgIiRzb3VyY2VfdmVyc2lvbiIgLWQgLiBjb25mdGVzdGZhaWwuamF2YSA+JkFTX01FU1NBR0VfTE9HX0ZEIDI+JjEKKyAgICAgICAgICAgICAgICB9OyB0aGVuCisgICAgICAgICAgQ09ORl9KQVZBQz0iJEpBVkFDIC1zb3VyY2UgJHNvdXJjZV92ZXJzaW9uIgorICAgICAgICAgIEhBVkVfSkFWQUNfRU5WVkFSPTEKKyAgICAgICAgICBIQVZFX0pBVkFDT01QPTEKKyAgICAgICAgZWxzZQorICAgICAgICAgIENPTkZfSkFWQUM9IiRKQVZBQyIKKyAgICAgICAgICBIQVZFX0pBVkFDX0VOVlZBUj0xCisgICAgICAgICAgSEFWRV9KQVZBQ09NUD0xCisgICAgICAgIGZpCisgICAgICBlbHNlCisgICAgICAgIGRubCBUcnkgd2l0aCAtdGFyZ2V0IG9wdGlvbiBhbG9uZS4gKFN1biBqYXZhYyAxLjMuMSBoYXMgdGhlIC10YXJnZXQKKyAgICAgICAgZG5sIG9wdGlvbiBidXQgbm8gLXNvdXJjZSBvcHRpb24uKQorICAgICAgICBybSAtZiBjb25mdGVzdC5jbGFzcworICAgICAgICBpZiB7IGVjaG8gIiRhc19tZTpfX29saW5lX186ICRKQVZBQyAtdGFyZ2V0ICR0YXJnZXRfdmVyc2lvbiAtZCAuIGNvbmZ0ZXN0LmphdmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAgICAgICAkSkFWQUMgLXRhcmdldCAiJHRhcmdldF92ZXJzaW9uIiAtZCAuIGNvbmZ0ZXN0LmphdmEgPiZBU19NRVNTQUdFX0xPR19GRCAyPiYxCisgICAgICAgICAgIH0gXAorICAgICAgICAgICAmJiB0ZXN0IC1mIGNvbmZ0ZXN0LmNsYXNzIFwKKyAgICAgICAgICAgJiYgZXhwciBgZnVuY19jbGFzc2ZpbGVfdmVyc2lvbiBjb25mdGVzdC5jbGFzc2AgJzw9JyAkY2Z2ZXJzaW9uID4vZGV2L251bGwgMj4mQVNfTUVTU0FHRV9MT0dfRkQ7IHRoZW4KKyAgICAgICAgICBkbmwgVHJ5IGFkZGluZyAtc291cmNlIG9wdGlvbiBpZiBpdCBpcyB1c2VmdWwuCisgICAgICAgICAgcm0gLWYgY29uZnRlc3QuY2xhc3MKKyAgICAgICAgICBybSAtZiBjb25mdGVzdGZhaWwuY2xhc3MKKyAgICAgICAgICBpZiB7IGVjaG8gIiRhc19tZTpfX29saW5lX186ICRKQVZBQyAtdGFyZ2V0ICR0YXJnZXRfdmVyc2lvbiAtc291cmNlICRzb3VyY2VfdmVyc2lvbiAtZCAuIGNvbmZ0ZXN0LmphdmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAgICAgICAgICRKQVZBQyAtdGFyZ2V0ICIkdGFyZ2V0X3ZlcnNpb24iIC1zb3VyY2UgIiRzb3VyY2VfdmVyc2lvbiIgLWQgLiBjb25mdGVzdC5qYXZhID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4mMQorICAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgICYmIHRlc3QgLWYgY29uZnRlc3QuY2xhc3MgXAorICAgICAgICAgICAgICYmIGV4cHIgYGZ1bmNfY2xhc3NmaWxlX3ZlcnNpb24gY29uZnRlc3QuY2xhc3NgICc8PScgJGNmdmVyc2lvbiA+L2Rldi9udWxsIDI+JkFTX01FU1NBR0VfTE9HX0ZEIFwKKyAgICAgICAgICAgICAmJiB7IGVjaG8gIiRhc19tZTpfX29saW5lX186ICRKQVZBQyAtdGFyZ2V0ICR0YXJnZXRfdmVyc2lvbiAtZCAuIGNvbmZ0ZXN0ZmFpbC5qYXZhIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgICAgICAgICAgICAkSkFWQUMgLXRhcmdldCAiJHRhcmdldF92ZXJzaW9uIiAtZCAuIGNvbmZ0ZXN0ZmFpbC5qYXZhID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4mMQorICAgICAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgICYmIHRlc3QgLWYgY29uZnRlc3RmYWlsLmNsYXNzIFwKKyAgICAgICAgICAgICAmJiAhIHsgZWNobyAiJGFzX21lOl9fb2xpbmVfXzogJEpBVkFDIC10YXJnZXQgJHRhcmdldF92ZXJzaW9uIC1zb3VyY2UgJHNvdXJjZV92ZXJzaW9uIC1kIC4gY29uZnRlc3RmYWlsLmphdmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAgICAgICAgICAgICAgJEpBVkFDIC10YXJnZXQgIiR0YXJnZXRfdmVyc2lvbiIgLXNvdXJjZSAiJHNvdXJjZV92ZXJzaW9uIiAtZCAuIGNvbmZ0ZXN0ZmFpbC5qYXZhID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4mMQorICAgICAgICAgICAgICAgICAgfTsgdGhlbgorICAgICAgICAgICAgQ09ORl9KQVZBQz0iJEpBVkFDIC10YXJnZXQgJHRhcmdldF92ZXJzaW9uIC1zb3VyY2UgJHNvdXJjZV92ZXJzaW9uIgorICAgICAgICAgICAgSEFWRV9KQVZBQ19FTlZWQVI9MQorICAgICAgICAgICAgSEFWRV9KQVZBQ09NUD0xCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgQ09ORl9KQVZBQz0iJEpBVkFDIC10YXJnZXQgJHRhcmdldF92ZXJzaW9uIgorICAgICAgICAgICAgSEFWRV9KQVZBQ19FTlZWQVI9MQorICAgICAgICAgICAgSEFWRV9KQVZBQ09NUD0xCisgICAgICAgICAgZmkKKyAgICAgICAgZWxzZQorICAgICAgICAgIGRubCBNYXliZSB0aGlzIC10YXJnZXQgb3B0aW9uIHJlcXVpcmVzIGEgLXNvdXJjZSBvcHRpb24/IFRyeSB3aXRoCisgICAgICAgICAgZG5sIC10YXJnZXQgYW5kIC1zb3VyY2Ugb3B0aW9ucy4gKFN1cHBvcnRlZCBieSBTdW4gamF2YWMgMS40IGFuZAorICAgICAgICAgIGRubCBoaWdoZXIuKQorICAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmNsYXNzCisgICAgICAgICAgaWYgeyBlY2hvICIkYXNfbWU6X19vbGluZV9fOiAkSkFWQUMgLXRhcmdldCAkdGFyZ2V0X3ZlcnNpb24gLXNvdXJjZSAkc291cmNlX3ZlcnNpb24gLWQgLiBjb25mdGVzdC5qYXZhIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgICAgICAgICAkSkFWQUMgLXRhcmdldCAiJHRhcmdldF92ZXJzaW9uIiAtc291cmNlICIkc291cmNlX3ZlcnNpb24iIC1kIC4gY29uZnRlc3QuamF2YSA+JkFTX01FU1NBR0VfTE9HX0ZEIDI+JjEKKyAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAmJiB0ZXN0IC1mIGNvbmZ0ZXN0LmNsYXNzIFwKKyAgICAgICAgICAgICAmJiBleHByIGBmdW5jX2NsYXNzZmlsZV92ZXJzaW9uIGNvbmZ0ZXN0LmNsYXNzYCAnPD0nICRjZnZlcnNpb24gPi9kZXYvbnVsbCAyPiZBU19NRVNTQUdFX0xPR19GRDsgdGhlbgorICAgICAgICAgICAgQ09ORl9KQVZBQz0iJEpBVkFDIC10YXJnZXQgJHRhcmdldF92ZXJzaW9uIC1zb3VyY2UgJHNvdXJjZV92ZXJzaW9uIgorICAgICAgICAgICAgSEFWRV9KQVZBQ19FTlZWQVI9MQorICAgICAgICAgICAgSEFWRV9KQVZBQ09NUD0xCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKKyAgaWYgdGVzdCAteiAiJEhBVkVfSkFWQUNPTVAiOyB0aGVuCisgICAgcHVzaGRlZihbQUNfTVNHX0NIRUNLSU5HXSxbOl0pZG5sCisgICAgcHVzaGRlZihbQUNfQ0hFQ0tJTkddLFs6XSlkbmwKKyAgICBwdXNoZGVmKFtBQ19NU0dfUkVTVUxUXSxbOl0pZG5sCisgICAgQUNfQ0hFQ0tfUFJPRyhbSEFWRV9HQ0pfSU5fUEFUSF0sIFtnY2pdLCBbeWVzXSkKKyAgICBBQ19DSEVDS19QUk9HKFtIQVZFX0pBVkFDX0lOX1BBVEhdLCBbamF2YWNdLCBbeWVzXSkKKyAgICBBQ19DSEVDS19QUk9HKFtIQVZFX0pJS0VTX0lOX1BBVEhdLCBbamlrZXNdLCBbeWVzXSkKKyAgICBwb3BkZWYoW0FDX01TR19SRVNVTFRdKWRubAorICAgIHBvcGRlZihbQUNfQ0hFQ0tJTkddKWRubAorICAgIHBvcGRlZihbQUNfTVNHX0NIRUNLSU5HXSlkbmwKKyAgICBpZiB0ZXN0IC16ICIkSEFWRV9KQVZBQ09NUCIgJiYgdGVzdCAtbiAiJEhBVkVfR0NKX0lOX1BBVEgiOyB0aGVuCisgICAgICBkbmwgVGVzdCBmb3IgYSBnb29kIGdjaiB2ZXJzaW9uICg+PSAzLjApLgorY2hhbmdlcXVvdGUoLClkbmwKKyAgICAgIGlmIGdjaiAtLXZlcnNpb24gMj4vZGV2L251bGwgfCBzZWQgLWUgJ3MsXlteMC05XSosLCcgLWUgMXEgfCBzZWQgLWUgJy9eM1wuWzAxXS9kJyB8IGdyZXAgJ15bMy05XScgPi9kZXYvbnVsbDsgdGhlbgorY2hhbmdlcXVvdGUoWyxdKWRubAorICAgICAgICBkbmwgU2VlIGlmIGxpYmdjai5qYXIgaXMgd2VsbCBpbnN0YWxsZWQuCisgICAgICAgIGlmIHsgZWNobyAiJGFzX21lOl9fb2xpbmVfXzogZ2NqIC1DIC1kIC4gY29uZnRlc3RsaWIuamF2YSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgICAgICAgIGdjaiAtQyAtZCAuIGNvbmZ0ZXN0bGliLmphdmEgPiZBU19NRVNTQUdFX0xPR19GRCAyPiYxCisgICAgICAgICAgIH07IHRoZW4KKyAgICAgICAgICBkbmwgT0ssIGdjaiB3b3Jrcy4KK2NoYW5nZXF1b3RlKCwpZG5sCisgICAgICAgICAgaWYgZ2NqIC0tdmVyc2lvbiAyPi9kZXYvbnVsbCB8IHNlZCAtZSAncyxeW14wLTldKiwsJyAtZSAxcSB8IHNlZCAtZSAnL140XC5bMDEyXS9kJyB8IGdyZXAgJ15bNC05XScgPi9kZXYvbnVsbDsgdGhlbgorY2hhbmdlcXVvdGUoWyxdKWRubAorICAgICAgICAgICAgZG5sIEl0J3MgYSB2ZXJzaW9uIG9mIGdjaiA+PSA0LjMuIEFzc3VtZSB0aGUgY2xhc3NmaWxlIHZlcnNpb25zIGFyZSBjb3JyZWN0LgorICAgICAgICAgICAgZG5sIFRyeSBnY2ouCisgICAgICAgICAgICBybSAtZiBjb25mdGVzdC5jbGFzcworICAgICAgICAgICAgaWYgeyBlY2hvICIkYXNfbWU6X19vbGluZV9fOiBnY2ogLUMgLWQgLiBjb25mdGVzdC5qYXZhIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgICAgICAgICAgIGdjaiAtQyAtZCAuIGNvbmZ0ZXN0LmphdmEgPiZBU19NRVNTQUdFX0xPR19GRCAyPiYxCisgICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAgICYmIHRlc3QgLWYgY29uZnRlc3QuY2xhc3MgXAorICAgICAgICAgICAgICAgJiYgZXhwciBgZnVuY19jbGFzc2ZpbGVfdmVyc2lvbiBjb25mdGVzdC5jbGFzc2AgJzw9JyAkY2Z2ZXJzaW9uID4vZGV2L251bGwgMj4mQVNfTUVTU0FHRV9MT0dfRkQ7IHRoZW4KKyAgICAgICAgICAgICAgZG5sIFRyeSBhZGRpbmcgLWZzb3VyY2Ugb3B0aW9uIGlmIGl0IGlzIHVzZWZ1bC4KKyAgICAgICAgICAgICAgcm0gLWYgY29uZnRlc3QuY2xhc3MKKyAgICAgICAgICAgICAgcm0gLWYgY29uZnRlc3RmYWlsLmNsYXNzCisgICAgICAgICAgICAgIGlmIHsgZWNobyAiJGFzX21lOl9fb2xpbmVfXzogZ2NqIC1DIC1mc291cmNlPSRzb3VyY2VfdmVyc2lvbiAtZCAuIGNvbmZ0ZXN0LmphdmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAgICAgICAgICAgICBnY2ogLUMgLWZzb3VyY2U9IiRzb3VyY2VfdmVyc2lvbiIgLWQgLiBjb25mdGVzdC5qYXZhID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4mMQorICAgICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdC5jbGFzcyBcCisgICAgICAgICAgICAgICAgICYmIGV4cHIgYGZ1bmNfY2xhc3NmaWxlX3ZlcnNpb24gY29uZnRlc3QuY2xhc3NgICc8PScgJGNmdmVyc2lvbiA+L2Rldi9udWxsIDI+JkFTX01FU1NBR0VfTE9HX0ZEIFwKKyAgICAgICAgICAgICAgICAgJiYgeyBlY2hvICIkYXNfbWU6X19vbGluZV9fOiBnY2ogLUMgLWQgLiBjb25mdGVzdGZhaWwuamF2YSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgICAgICAgICAgICAgICAgIGdjaiAtQyAtZCAuIGNvbmZ0ZXN0ZmFpbC5qYXZhID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4mMQorICAgICAgICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdGZhaWwuY2xhc3MgXAorICAgICAgICAgICAgICAgICAmJiAhIHsgZWNobyAiJGFzX21lOl9fb2xpbmVfXzogZ2NqIC1DIC1mc291cmNlPSRzb3VyY2VfdmVyc2lvbiAtZCAuIGNvbmZ0ZXN0ZmFpbC5qYXZhIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgICAgICAgICAgICAgICAgICBnY2ogLUMgLWZzb3VyY2U9IiRzb3VyY2VfdmVyc2lvbiIgLWQgLiBjb25mdGVzdGZhaWwuamF2YSA+JkFTX01FU1NBR0VfTE9HX0ZEIDI+JjEKKyAgICAgICAgICAgICAgICAgICAgICB9OyB0aGVuCisgICAgICAgICAgICAgICAgQ09ORl9KQVZBQz0iZ2NqIC1DIC1mc291cmNlPSRzb3VyY2VfdmVyc2lvbiIKKyAgICAgICAgICAgICAgICBIQVZFX0pBVkFDX0VOVlZBUj0xCisgICAgICAgICAgICAgICAgSEFWRV9KQVZBQ09NUD0xCisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBDT05GX0pBVkFDPSJnY2ogLUMiCisgICAgICAgICAgICAgICAgSEFWRV9KQVZBQ19FTlZWQVI9MQorICAgICAgICAgICAgICAgIEhBVkVfSkFWQUNPTVA9MQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBkbmwgVHJ5IHdpdGggLWZzb3VyY2UgYW5kIC1mdGFyZ2V0IG9wdGlvbnMuCisgICAgICAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmNsYXNzCisgICAgICAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0ZmFpbC5jbGFzcworICAgICAgICAgICAgICBpZiB7IGVjaG8gIiRhc19tZTpfX29saW5lX186IGdjaiAtQyAtZnNvdXJjZT0kc291cmNlX3ZlcnNpb24gLWZ0YXJnZXQ9JHRhcmdldF92ZXJzaW9uIC1kIC4gY29uZnRlc3QuamF2YSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgICAgICAgICAgICAgIGdjaiAtQyAtZnNvdXJjZT0iJHNvdXJjZV92ZXJzaW9uIiAtZnRhcmdldD0iJHRhcmdldF92ZXJzaW9uIiAtZCAuIGNvbmZ0ZXN0LmphdmEgPiZBU19NRVNTQUdFX0xPR19GRCAyPiYxCisgICAgICAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgICAgICAmJiB0ZXN0IC1mIGNvbmZ0ZXN0LmNsYXNzIFwKKyAgICAgICAgICAgICAgICAgJiYgZXhwciBgZnVuY19jbGFzc2ZpbGVfdmVyc2lvbiBjb25mdGVzdC5jbGFzc2AgJzw9JyAkY2Z2ZXJzaW9uID4vZGV2L251bGwgMj4mQVNfTUVTU0FHRV9MT0dfRkQ7IHRoZW4KKyAgICAgICAgICAgICAgICBDT05GX0pBVkFDPSJnY2ogLUMgLWZzb3VyY2U9JHNvdXJjZV92ZXJzaW9uIC1mdGFyZ2V0PSR0YXJnZXRfdmVyc2lvbiIKKyAgICAgICAgICAgICAgICBIQVZFX0pBVkFDX0VOVlZBUj0xCisgICAgICAgICAgICAgICAgSEFWRV9KQVZBQ09NUD0xCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRubCBJdCdzIGEgdmVyc2lvbiBvZiBnY2ogPCA0LjMuIElnbm9yZSB0aGUgdmVyc2lvbiBvZiBjb25mdGVzdC5jbGFzcy4KKyAgICAgICAgICAgIGRubCBOb3cgdGVzdCB3aGV0aGVyIGl0IHN1cHBvcnRzIHRoZSBkZXNpcmVkIHRhcmdldC12ZXJzaW9uIGFuZAorICAgICAgICAgICAgZG5sIHNvdXJjZS12ZXJzaW9uLgorICAgICAgICAgICAgaWYgdGVzdCAiJHRhcmdldF92ZXJzaW9uIiA9IDEuNCAmJiB0ZXN0ICIkc291cmNlX3ZlcnNpb24iID0gMS40OyB0aGVuCisgICAgICAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmNsYXNzCisgICAgICAgICAgICAgIGlmIHsgZWNobyAiJGFzX21lOl9fb2xpbmVfXzogZ2NqIC1DIC1kIC4gY29uZnRlc3QuamF2YSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgICAgICAgICAgICAgIGdjaiAtQyAtZCAuIGNvbmZ0ZXN0LmphdmEgPiZBU19NRVNTQUdFX0xPR19GRCAyPiYxCisgICAgICAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgICAgICAmJiB0ZXN0IC1mIGNvbmZ0ZXN0LmNsYXNzOyB0aGVuCisgICAgICAgICAgICAgICAgQ09ORl9KQVZBQz0iZ2NqIC1DIgorICAgICAgICAgICAgICAgIEhBVkVfR0NKX0M9MQorICAgICAgICAgICAgICAgIEhBVkVfSkFWQUNPTVA9MQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBpZiB0ZXN0ICIkdGFyZ2V0X3ZlcnNpb24iID0gMS40ICYmIHRlc3QgIiRzb3VyY2VfdmVyc2lvbiIgPSAxLjM7IHRoZW4KKyAgICAgICAgICAgICAgICBkbmwgVHJ5IGdjaiBhbmQgImdjaiAtZm5vLWFzc2VydCIuIEJ1dCBhZGQgLWZuby1hc3NlcnQgb25seSBpZgorICAgICAgICAgICAgICAgIGRubCBpdCB3b3JrcyAobm90IGdjaiA8IDMuMykuCisgICAgICAgICAgICAgICAgcm0gLWYgY29uZnRlc3QuY2xhc3MKKyAgICAgICAgICAgICAgICBpZiB7IGVjaG8gIiRhc19tZTpfX29saW5lX186IGdjaiAtQyAtZm5vLWFzc2VydCAtZCAuIGNvbmZ0ZXN0LmphdmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAgICAgICAgICAgICAgIGdjaiAtQyAtZm5vLWFzc2VydCAtZCAuIGNvbmZ0ZXN0LmphdmEgPiZBU19NRVNTQUdFX0xPR19GRCAyPiYxCisgICAgICAgICAgICAgICAgICAgfSBcCisgICAgICAgICAgICAgICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdC5jbGFzczsgdGhlbgorICAgICAgICAgICAgICAgICAgQ09ORl9KQVZBQz0iZ2NqIC1DIC1mbm8tYXNzZXJ0IgorICAgICAgICAgICAgICAgICAgSEFWRV9HQ0pfQz0xCisgICAgICAgICAgICAgICAgICBIQVZFX0pBVkFDT01QPTEKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBybSAtZiBjb25mdGVzdC5jbGFzcworICAgICAgICAgICAgICAgICAgaWYgeyBlY2hvICIkYXNfbWU6X19vbGluZV9fOiBnY2ogLUMgLWQgLiBjb25mdGVzdC5qYXZhIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgICAgICAgICAgICAgICAgIGdjaiAtQyAtZCAuIGNvbmZ0ZXN0LmphdmEgPiZBU19NRVNTQUdFX0xPR19GRCAyPiYxCisgICAgICAgICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAgICAgICAgICYmIHRlc3QgLWYgY29uZnRlc3QuY2xhc3M7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgQ09ORl9KQVZBQz0iZ2NqIC1DIgorICAgICAgICAgICAgICAgICAgICBIQVZFX0dDSl9DPTEKKyAgICAgICAgICAgICAgICAgICAgSEFWRV9KQVZBQ09NUD0xCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGZpCisgICAgaWYgdGVzdCAteiAiJEhBVkVfSkFWQUNPTVAiICYmIHRlc3QgLW4gIiRIQVZFX0pBVkFDX0lOX1BBVEgiOyB0aGVuCisgICAgICBkbmwgVGVzdCB3aGV0aGVyIGphdmFjIGlzIHVzYWJsZS4KKyAgICAgIGlmIHsgamF2YWMgLXZlcnNpb24gPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCB8fCB0ZXN0ICQ/IC1sZSAyOyB9IFwKKyAgICAgICAgICYmICggaWYgamF2YWMgLWhlbHAgMj4mMSA+L2Rldi9udWxsIHwgZ3JlcCBhdC5kbXMua2pjLk1haW4gPi9kZXYvbnVsbCAmJiBqYXZhYyAtaGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgJ3JlbGVhc2VkLioyMDAwJyA+L2Rldi9udWxsIDsgdGhlbiBleGl0IDE7IGVsc2UgZXhpdCAwOyBmaSApOyB0aGVuCisgICAgICAgIGRubCBPSywgamF2YWMgd29ya3MuCisgICAgICAgIGRubCBOb3cgdGVzdCB3aGV0aGVyIGl0IHN1cHBvcnRzIHRoZSBkZXNpcmVkIHRhcmdldC12ZXJzaW9uIGFuZAorICAgICAgICBkbmwgc291cmNlLXZlcnNpb24uCisgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmNsYXNzCisgICAgICAgIGlmIHsgZWNobyAiJGFzX21lOl9fb2xpbmVfXzogamF2YWMgLWQgLiBjb25mdGVzdC5qYXZhIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgICAgICAgamF2YWMgLWQgLiBjb25mdGVzdC5qYXZhID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4mMQorICAgICAgICAgICB9IFwKKyAgICAgICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdC5jbGFzcyBcCisgICAgICAgICAgICYmIGV4cHIgYGZ1bmNfY2xhc3NmaWxlX3ZlcnNpb24gY29uZnRlc3QuY2xhc3NgICc8PScgJGNmdmVyc2lvbiA+L2Rldi9udWxsIDI+JkFTX01FU1NBR0VfTE9HX0ZEOyB0aGVuCisgICAgICAgICAgZG5sIFRyeSBhZGRpbmcgLXNvdXJjZSBvcHRpb24gaWYgaXQgaXMgdXNlZnVsLgorICAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmNsYXNzCisgICAgICAgICAgcm0gLWYgY29uZnRlc3RmYWlsLmNsYXNzCisgICAgICAgICAgaWYgeyBlY2hvICIkYXNfbWU6X19vbGluZV9fOiBqYXZhYyAtc291cmNlICRzb3VyY2VfdmVyc2lvbiAtZCAuIGNvbmZ0ZXN0LmphdmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAgICAgICAgIGphdmFjIC1zb3VyY2UgIiRzb3VyY2VfdmVyc2lvbiIgLWQgLiBjb25mdGVzdC5qYXZhID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4mMQorICAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgICYmIHRlc3QgLWYgY29uZnRlc3QuY2xhc3MgXAorICAgICAgICAgICAgICYmIGV4cHIgYGZ1bmNfY2xhc3NmaWxlX3ZlcnNpb24gY29uZnRlc3QuY2xhc3NgICc8PScgJGNmdmVyc2lvbiA+L2Rldi9udWxsIDI+JkFTX01FU1NBR0VfTE9HX0ZEIFwKKyAgICAgICAgICAgICAmJiB7IGVjaG8gIiRhc19tZTpfX29saW5lX186IGphdmFjIC1kIC4gY29uZnRlc3RmYWlsLmphdmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAgICAgICAgICAgIGphdmFjIC1kIC4gY29uZnRlc3RmYWlsLmphdmEgPiZBU19NRVNTQUdFX0xPR19GRCAyPiYxCisgICAgICAgICAgICAgICAgfSBcCisgICAgICAgICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdGZhaWwuY2xhc3MgXAorICAgICAgICAgICAgICYmICEgeyBlY2hvICIkYXNfbWU6X19vbGluZV9fOiBqYXZhYyAtc291cmNlICRzb3VyY2VfdmVyc2lvbiAtZCAuIGNvbmZ0ZXN0ZmFpbC5qYXZhIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgICAgICAgICAgICAgIGphdmFjIC1zb3VyY2UgIiRzb3VyY2VfdmVyc2lvbiIgLWQgLiBjb25mdGVzdGZhaWwuamF2YSA+JkFTX01FU1NBR0VfTE9HX0ZEIDI+JjEKKyAgICAgICAgICAgICAgICAgIH07IHRoZW4KKyAgICAgICAgICAgIENPTkZfSkFWQUM9ImphdmFjIC1zb3VyY2UgJHNvdXJjZV92ZXJzaW9uIgorICAgICAgICAgICAgSEFWRV9KQVZBQz0xCisgICAgICAgICAgICBIQVZFX0pBVkFDT01QPTEKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBDT05GX0pBVkFDPSJqYXZhYyIKKyAgICAgICAgICAgIEhBVkVfSkFWQUM9MQorICAgICAgICAgICAgSEFWRV9KQVZBQ09NUD0xCisgICAgICAgICAgZmkKKyAgICAgICAgZWxzZQorICAgICAgICAgIGRubCBUcnkgd2l0aCAtdGFyZ2V0IG9wdGlvbiBhbG9uZS4gKFN1biBqYXZhYyAxLjMuMSBoYXMgdGhlIC10YXJnZXQKKyAgICAgICAgICBkbmwgb3B0aW9uIGJ1dCBubyAtc291cmNlIG9wdGlvbi4pCisgICAgICAgICAgcm0gLWYgY29uZnRlc3QuY2xhc3MKKyAgICAgICAgICBpZiB7IGVjaG8gIiRhc19tZTpfX29saW5lX186IGphdmFjIC10YXJnZXQgJHRhcmdldF92ZXJzaW9uIC1kIC4gY29uZnRlc3QuamF2YSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgICAgICAgICAgamF2YWMgLXRhcmdldCAiJHRhcmdldF92ZXJzaW9uIiAtZCAuIGNvbmZ0ZXN0LmphdmEgPiZBU19NRVNTQUdFX0xPR19GRCAyPiYxCisgICAgICAgICAgICAgfSBcCisgICAgICAgICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdC5jbGFzcyBcCisgICAgICAgICAgICAgJiYgZXhwciBgZnVuY19jbGFzc2ZpbGVfdmVyc2lvbiBjb25mdGVzdC5jbGFzc2AgJzw9JyAkY2Z2ZXJzaW9uID4vZGV2L251bGwgMj4mQVNfTUVTU0FHRV9MT0dfRkQ7IHRoZW4KKyAgICAgICAgICAgIGRubCBUcnkgYWRkaW5nIC1zb3VyY2Ugb3B0aW9uIGlmIGl0IGlzIHVzZWZ1bC4KKyAgICAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmNsYXNzCisgICAgICAgICAgICBybSAtZiBjb25mdGVzdGZhaWwuY2xhc3MKKyAgICAgICAgICAgIGlmIHsgZWNobyAiJGFzX21lOl9fb2xpbmVfXzogamF2YWMgLXRhcmdldCAkdGFyZ2V0X3ZlcnNpb24gLXNvdXJjZSAkc291cmNlX3ZlcnNpb24gLWQgLiBjb25mdGVzdC5qYXZhIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgICAgICAgICAgIGphdmFjIC10YXJnZXQgIiR0YXJnZXRfdmVyc2lvbiIgLXNvdXJjZSAiJHNvdXJjZV92ZXJzaW9uIiAtZCAuIGNvbmZ0ZXN0LmphdmEgPiZBU19NRVNTQUdFX0xPR19GRCAyPiYxCisgICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAgICYmIHRlc3QgLWYgY29uZnRlc3QuY2xhc3MgXAorICAgICAgICAgICAgICAgJiYgZXhwciBgZnVuY19jbGFzc2ZpbGVfdmVyc2lvbiBjb25mdGVzdC5jbGFzc2AgJzw9JyAkY2Z2ZXJzaW9uID4vZGV2L251bGwgMj4mQVNfTUVTU0FHRV9MT0dfRkQgXAorICAgICAgICAgICAgICAgJiYgeyBlY2hvICIkYXNfbWU6X19vbGluZV9fOiBqYXZhYyAtdGFyZ2V0ICR0YXJnZXRfdmVyc2lvbiAtZCAuIGNvbmZ0ZXN0ZmFpbC5qYXZhIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgICAgICAgICAgICAgIGphdmFjIC10YXJnZXQgIiR0YXJnZXRfdmVyc2lvbiIgLWQgLiBjb25mdGVzdGZhaWwuamF2YSA+JkFTX01FU1NBR0VfTE9HX0ZEIDI+JjEKKyAgICAgICAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdGZhaWwuY2xhc3MgXAorICAgICAgICAgICAgICAgJiYgISB7IGVjaG8gIiRhc19tZTpfX29saW5lX186IGphdmFjIC10YXJnZXQgJHRhcmdldF92ZXJzaW9uIC1zb3VyY2UgJHNvdXJjZV92ZXJzaW9uIC1kIC4gY29uZnRlc3RmYWlsLmphdmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAgICAgICAgICAgICAgICBqYXZhYyAtdGFyZ2V0ICIkdGFyZ2V0X3ZlcnNpb24iIC1zb3VyY2UgIiRzb3VyY2VfdmVyc2lvbiIgLWQgLiBjb25mdGVzdGZhaWwuamF2YSA+JkFTX01FU1NBR0VfTE9HX0ZEIDI+JjEKKyAgICAgICAgICAgICAgICAgICAgfTsgdGhlbgorICAgICAgICAgICAgICBDT05GX0pBVkFDPSJqYXZhYyAtdGFyZ2V0ICR0YXJnZXRfdmVyc2lvbiAtc291cmNlICRzb3VyY2VfdmVyc2lvbiIKKyAgICAgICAgICAgICAgSEFWRV9KQVZBQz0xCisgICAgICAgICAgICAgIEhBVkVfSkFWQUNPTVA9MQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBDT05GX0pBVkFDPSJqYXZhYyAtdGFyZ2V0ICR0YXJnZXRfdmVyc2lvbiIKKyAgICAgICAgICAgICAgSEFWRV9KQVZBQz0xCisgICAgICAgICAgICAgIEhBVkVfSkFWQUNPTVA9MQorICAgICAgICAgICAgZmkKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBkbmwgTWF5YmUgdGhpcyAtdGFyZ2V0IG9wdGlvbiByZXF1aXJlcyBhIC1zb3VyY2Ugb3B0aW9uPyBUcnkgd2l0aAorICAgICAgICAgICAgZG5sIC10YXJnZXQgYW5kIC1zb3VyY2Ugb3B0aW9ucy4gKFN1cHBvcnRlZCBieSBTdW4gamF2YWMgMS40IGFuZAorICAgICAgICAgICAgZG5sIGhpZ2hlci4pCisgICAgICAgICAgICBybSAtZiBjb25mdGVzdC5jbGFzcworICAgICAgICAgICAgaWYgeyBlY2hvICIkYXNfbWU6X19vbGluZV9fOiBqYXZhYyAtdGFyZ2V0ICR0YXJnZXRfdmVyc2lvbiAtc291cmNlICRzb3VyY2VfdmVyc2lvbiAtZCAuIGNvbmZ0ZXN0LmphdmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAgICAgICAgICAgamF2YWMgLXRhcmdldCAiJHRhcmdldF92ZXJzaW9uIiAtc291cmNlICIkc291cmNlX3ZlcnNpb24iIC1kIC4gY29uZnRlc3QuamF2YSA+JkFTX01FU1NBR0VfTE9HX0ZEIDI+JjEKKyAgICAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdC5jbGFzcyBcCisgICAgICAgICAgICAgICAmJiBleHByIGBmdW5jX2NsYXNzZmlsZV92ZXJzaW9uIGNvbmZ0ZXN0LmNsYXNzYCAnPD0nICRjZnZlcnNpb24gPi9kZXYvbnVsbCAyPiZBU19NRVNTQUdFX0xPR19GRDsgdGhlbgorICAgICAgICAgICAgICBDT05GX0pBVkFDPSJqYXZhYyAtdGFyZ2V0ICR0YXJnZXRfdmVyc2lvbiAtc291cmNlICRzb3VyY2VfdmVyc2lvbiIKKyAgICAgICAgICAgICAgSEFWRV9KQVZBQz0xCisgICAgICAgICAgICAgIEhBVkVfSkFWQUNPTVA9MQorICAgICAgICAgICAgZmkKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorICAgIGlmIHRlc3QgLXogIiRIQVZFX0pBVkFDT01QIiAmJiB0ZXN0IC1uICIkSEFWRV9KSUtFU19JTl9QQVRIIjsgdGhlbgorICAgICAgZG5sIFRlc3Qgd2hldGhlciBqaWtlcyBpcyB1c2FibGUuCisgICAgICBpZiB7IGppa2VzID4vZGV2L251bGwgMj4vZGV2L251bGwgfHwgdGVzdCAkPyA9IDE7IH0gXAorICAgICAgICAgJiYgKAorICAgICAgICAgICAgICAjIFNlZSBpZiB0aGUgZXhpc3RpbmcgQ0xBU1NQQVRIIGlzIHN1ZmZpY2llbnQgdG8gbWFrZSBqaWtlcyB3b3JrLgorICAgICAgICAgICAgICB1bnNldCBKQVZBX0hPTUUKKyAgICAgICAgICAgICAgamlrZXMgY29uZnRlc3RsaWIuamF2YSA+JkFTX01FU1NBR0VfTE9HX0ZEIDI+JjEKKyAgICAgICAgICAgICAgZXJyb3I9JD8KKyAgICAgICAgICAgICAgcm0gLWYgY29uZnRlc3RsaWIuY2xhc3MKKyAgICAgICAgICAgICAgZXhpdCAkZXJyb3IKKyAgICAgICAgICAgICk7IHRoZW4KKyAgICAgICAgZG5sIE9LLCBqaWtlcyB3b3Jrcy4KKyAgICAgICAgZG5sIE5vdyB0ZXN0IHdoZXRoZXIgaXQgc3VwcG9ydHMgdGhlIGRlc2lyZWQgdGFyZ2V0LXZlcnNpb24gYW5kCisgICAgICAgIGRubCBzb3VyY2UtdmVyc2lvbi4KKyAgICAgICAgaWYgdGVzdCAiJHNvdXJjZV92ZXJzaW9uIiA9IDEuMzsgdGhlbgorICAgICAgICAgIENPTkZfSkFWQUM9Imppa2VzIgorICAgICAgICAgIEhBVkVfSklLRVM9MQorICAgICAgICAgIEhBVkVfSkFWQUNPTVA9MQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorICBmaQorICBybSAtZiBjb25mdGVzdCouamF2YSBjb25mdGVzdCouY2xhc3MKKyAgaWYgdGVzdCAtbiAiJEhBVkVfSkFWQUNPTVAiOyB0aGVuCisgICAgYWNfcmVzdWx0PSIkQ09ORl9KQVZBQyIKKyAgZWxzZQorICAgIGFjX3Jlc3VsdD0ibm8iCisgIGZpCisgIEFDX01TR19SRVNVTFQoWyRhY19yZXN1bHRdKQorICBBQ19TVUJTVChbQ09ORl9KQVZBQ10pCisgIEFDX1NVQlNUKFtDTEFTU1BBVEhdKQorICBBQ19TVUJTVChbQ0xBU1NQQVRIX1NFUEFSQVRPUl0pCisgIEFDX1NVQlNUKFtIQVZFX0pBVkFDX0VOVlZBUl0pCisgIEFDX1NVQlNUKFtIQVZFX0dDSl9DXSkKKyAgQUNfU1VCU1QoW0hBVkVfSkFWQUNdKQorICBBQ19TVUJTVChbSEFWRV9KSUtFU10pCitdKQpkaWZmIC0tZ2l0IGEvbTQvamF2YWV4ZWMubTQgYi9tNC9qYXZhZXhlYy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODk0N2FkCi0tLSAvZGV2L251bGwKKysrIGIvbTQvamF2YWV4ZWMubTQKQEAgLTAsMCArMSwxMDQgQEAKKyMgamF2YWV4ZWMubTQgc2VyaWFsIDUKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMywgMjAwNiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBqYXZhZXhlYy5zaC4KKyMgZ3RfSkFWQUVYRUMgb3IgZ3RfSkFWQUVYRUModGVzdGNsYXNzLCBpdHMtZGlyZWN0b3J5KQorIyBTZXRzIEhBVkVfSkFWQUVYRUMgdG8gbm9uZW1wdHkgaWYgamF2YWV4ZWMuc2ggd2lsbCB3b3JrLgorCitBQ19ERUZVTihbZ3RfSkFWQUVYRUNdLAorWworICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBKYXZhIHZpcnR1YWwgbWFjaGluZV0pCisgIEFDX0VHUkVQX0NQUChbeWVzXSwgWworI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fIHx8IGRlZmluZWQgX19DWUdXSU5fXyB8fCBkZWZpbmVkIF9fRU1YX18gfHwgZGVmaW5lZCBfX0RKR1BQX18KKyAgeWVzCisjZW5kaWYKK10sIENMQVNTUEFUSF9TRVBBUkFUT1I9JzsnLCBDTEFTU1BBVEhfU0VQQVJBVE9SPSc6JykKKyAgQ09ORl9KQVZBPQorICBIQVZFX0pBVkFfRU5WVkFSPQorICBIQVZFX0dJSj0KKyAgSEFWRV9KQVZBPQorICBIQVZFX0pSRT0KKyAgSEFWRV9KVklFVz0KKyAgSEFWRV9KQVZBRVhFQz0xCisgIGlmIHRlc3QgLW4gIiRKQVZBIjsgdGhlbgorICAgIEhBVkVfSkFWQV9FTlZWQVI9MQorICAgIENPTkZfSkFWQT0iJEpBVkEiCisgIGVsc2UKKyAgICBwdXNoZGVmKFtBQ19NU0dfQ0hFQ0tJTkddLFs6XSlkbmwKKyAgICBwdXNoZGVmKFtBQ19DSEVDS0lOR10sWzpdKWRubAorICAgIHB1c2hkZWYoW0FDX01TR19SRVNVTFRdLFs6XSlkbmwKKyAgICBBQ19DSEVDS19QUk9HKFtIQVZFX0dJSl9JTl9QQVRIXSwgW2dpal0sIFt5ZXNdKQorICAgIEFDX0NIRUNLX1BST0coW0hBVkVfSkFWQV9JTl9QQVRIXSwgW2phdmFdLCBbeWVzXSkKKyAgICBBQ19DSEVDS19QUk9HKFtIQVZFX0pSRV9JTl9QQVRIXSwgW2pyZV0sIFt5ZXNdKQorICAgIEFDX0NIRUNLX1BST0coW0hBVkVfSlZJRVdfSU5fUEFUSF0sIFtqdmlld10sIFt5ZXNdKQorICAgIHBvcGRlZihbQUNfTVNHX1JFU1VMVF0pZG5sCisgICAgcG9wZGVmKFtBQ19DSEVDS0lOR10pZG5sCisgICAgcG9wZGVmKFtBQ19NU0dfQ0hFQ0tJTkddKWRubAorICAgIGlmZWxzZShbJDFdLCAsICwgWworICAgICAgc2F2ZV9DTEFTU1BBVEg9IiRDTEFTU1BBVEgiCisgICAgICBDTEFTU1BBVEg9IiQyIiR7Q0xBU1NQQVRIKyIkQ0xBU1NQQVRIX1NFUEFSQVRPUiRDTEFTU1BBVEgifQorICAgICAgXSkKKyAgICBleHBvcnQgQ0xBU1NQQVRICisgICAgaWYgdGVzdCAtbiAiJEhBVkVfR0lKX0lOX1BBVEgiIFwKKyAgICAgICAmJiBnaWogLS12ZXJzaW9uID4vZGV2L251bGwgMj4vZGV2L251bGwgXAorICAgICAgIGlmZWxzZShbJDFdLCAsICwgWyYmIHsKKyAgICAgICAgIGVjaG8gIiRhc19tZTpfX29saW5lX186IGdpaiAkMSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgICAgZ2lqICQxID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4mMQorICAgICAgIH1dKTsgdGhlbgorICAgICAgSEFWRV9HSUo9MQorICAgICAgQ09ORl9KQVZBPSJnaWoiCisgICAgZWxzZQorICAgICAgaWYgdGVzdCAtbiAiJEhBVkVfSkFWQV9JTl9QQVRIIiBcCisgICAgICAgICAmJiBqYXZhIC12ZXJzaW9uID4vZGV2L251bGwgMj4vZGV2L251bGwgXAorICAgICAgICAgaWZlbHNlKFskMV0sICwgLCBbJiYgeworICAgICAgICAgICBlY2hvICIkYXNfbWU6X19vbGluZV9fOiBnaWogJDEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAgICAgamF2YSAkMSA+JkFTX01FU1NBR0VfTE9HX0ZEIDI+JjEKKyAgICAgICAgIH1dKTsgdGhlbgorICAgICAgICBIQVZFX0pBVkE9MQorICAgICAgICBDT05GX0pBVkE9ImphdmEiCisgICAgICBlbHNlCisgICAgICAgIGlmIHRlc3QgLW4gIiRIQVZFX0pSRV9JTl9QQVRIIiBcCisgICAgICAgICAgICYmIChqcmUgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCB8fCB0ZXN0ICQ/ID0gMSkgXAorICAgICAgICAgICBpZmVsc2UoWyQxXSwgLCAsIFsmJiB7CisgICAgICAgICAgICAgZWNobyAiJGFzX21lOl9fb2xpbmVfXzogZ2lqICQxIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgICAgICAganJlICQxID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4mMQorICAgICAgICAgICB9XSk7IHRoZW4KKyAgICAgICAgICBIQVZFX0pSRT0xCisgICAgICAgICAgQ09ORl9KQVZBPSJqcmUiCisgICAgICAgIGVsc2UKKyAgICAgICAgICBpZiB0ZXN0IC1uICIkSEFWRV9KVklFV19JTl9QQVRIIiBcCisgICAgICAgICAgICAgJiYgKGp2aWV3IC0/ID4vZGV2L251bGwgMj4vZGV2L251bGwgfHwgdGVzdCAkPyA9IDEpIFwKKyAgICAgICAgICAgICBpZmVsc2UoWyQxXSwgLCAsIFsmJiB7CisgICAgICAgICAgICAgICBlY2hvICIkYXNfbWU6X19vbGluZV9fOiBnaWogJDEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAgICAgICAgIGp2aWV3ICQxID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4mMQorICAgICAgICAgICAgIH1dKTsgdGhlbgorICAgICAgICAgICAgSEFWRV9KVklFVz0xCisgICAgICAgICAgICBDT05GX0pBVkE9Imp2aWV3IgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEhBVkVfSkFWQUVYRUM9CisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKKyAgICBpZmVsc2UoWyQxXSwgLCAsIFsKKyAgICAgIENMQVNTUEFUSD0iJHNhdmVfQ0xBU1NQQVRIIgorICAgIF0pCisgIGZpCisgIGlmIHRlc3QgLW4gIiRIQVZFX0pBVkFFWEVDIjsgdGhlbgorICAgIGFjX3Jlc3VsdD0iJENPTkZfSkFWQSIKKyAgZWxzZQorICAgIGFjX3Jlc3VsdD0ibm8iCisgIGZpCisgIEFDX01TR19SRVNVTFQoWyRhY19yZXN1bHRdKQorICBBQ19TVUJTVChbQ09ORl9KQVZBXSkKKyAgQUNfU1VCU1QoW0NMQVNTUEFUSF0pCisgIEFDX1NVQlNUKFtDTEFTU1BBVEhfU0VQQVJBVE9SXSkKKyAgQUNfU1VCU1QoW0hBVkVfSkFWQV9FTlZWQVJdKQorICBBQ19TVUJTVChbSEFWRV9HSUpdKQorICBBQ19TVUJTVChbSEFWRV9KQVZBXSkKKyAgQUNfU1VCU1QoW0hBVkVfSlJFXSkKKyAgQUNfU1VCU1QoW0hBVkVfSlZJRVddKQorXSkKZGlmZiAtLWdpdCBhL200L2xhcmdlZmlsZS5tNCBiL200L2xhcmdlZmlsZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODg4NTBhCi0tLSAvZGV2L251bGwKKysrIGIvbTQvbGFyZ2VmaWxlLm00CkBAIC0wLDAgKzEsMTQ5IEBACisjIEVuYWJsZSBsYXJnZSBmaWxlcyBvbiBzeXN0ZW1zIHdoZXJlIHRoaXMgaXMgbm90IHRoZSBkZWZhdWx0LgorCisjIENvcHlyaWdodCAxOTkyLTE5OTYsIDE5OTgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoZSBmb2xsb3dpbmcgaW1wbGVtZW50YXRpb24gd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBhdXRvY29uZiA8PSAyLjY4OworIyBBQ19TWVNfTEFSR0VGSUxFIGRvZXMgbm90IGNvbmZpZ3VyZSBmb3IgbGFyZ2UgaW5vZGVzIG9uIE1hYyBPUyBYIDEwLjUuCittNF92ZXJzaW9uX3ByZXJlcShbMi42OV0sIFtdICxbCisKKyMgX0FDX1NZU19MQVJHRUZJTEVfVEVTVF9JTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19BQ19TWVNfTEFSR0VGSUxFX1RFU1RfSU5DTFVERVNdLAorW0AlOkBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAvKiBDaGVjayB0aGF0IG9mZl90IGNhbiByZXByZXNlbnQgMioqNjMgLSAxIGNvcnJlY3RseS4KKyAgICBXZSBjYW4ndCBzaW1wbHkgZGVmaW5lIExBUkdFX09GRl9UIHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcsCisgICAgc2luY2Ugc29tZSBDKysgY29tcGlsZXJzIG1hc3F1ZXJhZGluZyBhcyBDIGNvbXBpbGVycworICAgIGluY29ycmVjdGx5IHJlamVjdCA5MjIzMzcyMDM2ODU0Nzc1ODA3LiAgKi8KK0AlOkBkZWZpbmUgTEFSR0VfT0ZGX1QgKCgob2ZmX3QpIDEgPDwgNjIpIC0gMSArICgob2ZmX3QpIDEgPDwgNjIpKQorICBpbnQgb2ZmX3RfaXNfbGFyZ2VbWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCisgICAgICAgICAgICAgICAgICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgID8gMSA6IC0xXV07W11kbmwKK10pCisKKworIyBfQUNfU1lTX0xBUkdFRklMRV9NQUNST19WQUxVRShDLU1BQ1JPLCBWQUxVRSwKKyMJCQkJQ0FDSEUtVkFSLAorIwkJCQlERVNDUklQVElPTiwKKyMJCQkJUFJPTE9HVUUsIFtGVU5DVElPTi1CT0RZXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0FDX1NZU19MQVJHRUZJTEVfTUFDUk9fVkFMVUVdLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3IgJDEgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlc10sIFskM10sCitbd2hpbGUgOjsgZG8KKyAgbTRfaWZ2YWwoWyQ2XSwgW0FDX0xJTktfSUZFTFNFXSwgW0FDX0NPTVBJTEVfSUZFTFNFXSkoCisgICAgW0FDX0xBTkdfUFJPR1JBTShbJDVdLCBbJDZdKV0sCisgICAgWyQzPW5vOyBicmVha10pCisgIG00X2lmdmFsKFskNl0sIFtBQ19MSU5LX0lGRUxTRV0sIFtBQ19DT01QSUxFX0lGRUxTRV0pKAorICAgIFtBQ19MQU5HX1BST0dSQU0oW0AlOkBkZWZpbmUgJDEgJDIKKyQ1XSwgWyQ2XSldLAorICAgIFskMz0kMjsgYnJlYWtdKQorICAkMz11bmtub3duCisgIGJyZWFrCitkb25lXSkKK2Nhc2UgJCQzIGluICMoCisgIG5vIHwgdW5rbm93bikgOzsKKyAgKikgQUNfREVGSU5FX1VOUVVPVEVEKFskMV0sIFskJDNdLCBbJDRdKTs7Citlc2FjCitybSAtcmYgY29uZnRlc3QqW11kbmwKK10pIyBfQUNfU1lTX0xBUkdFRklMRV9NQUNST19WQUxVRQorCisKKyMgQUNfU1lTX0xBUkdFRklMRQorIyAtLS0tLS0tLS0tLS0tLS0tCisjIEJ5IGRlZmF1bHQsIG1hbnkgaG9zdHMgd29uJ3QgbGV0IHByb2dyYW1zIGFjY2VzcyBsYXJnZSBmaWxlczsKKyMgb25lIG11c3QgdXNlIHNwZWNpYWwgY29tcGlsZXIgb3B0aW9ucyB0byBnZXQgbGFyZ2UtZmlsZSBhY2Nlc3MgdG8gd29yay4KKyMgRm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGlzIGJyYWluIGRhbWFnZSBwbGVhc2Ugc2VlOgorIyBodHRwOi8vd3d3LnVuaXgtc3lzdGVtcy5vcmcvdmVyc2lvbjIvd2hhdHNuZXcvbGZzMjBtYXIuaHRtbAorQUNfREVGVU4oW0FDX1NZU19MQVJHRUZJTEVdLAorW0FDX0FSR19FTkFCTEUobGFyZ2VmaWxlLAorICAgICAgICAgICAgICAgWyAgLS1kaXNhYmxlLWxhcmdlZmlsZSAgICAgb21pdCBzdXBwb3J0IGZvciBsYXJnZSBmaWxlc10pCitpZiB0ZXN0ICIkZW5hYmxlX2xhcmdlZmlsZSIgIT0gbm87IHRoZW4KKworICBBQ19DQUNIRV9DSEVDSyhbZm9yIHNwZWNpYWwgQyBjb21waWxlciBvcHRpb25zIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXNdLAorICAgIGFjX2N2X3N5c19sYXJnZWZpbGVfQ0MsCisgICAgW2FjX2N2X3N5c19sYXJnZWZpbGVfQ0M9bm8KKyAgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgICAgYWNfc2F2ZV9DQz0kQ0MKKyAgICAgICB3aGlsZSA6OyBkbworICAgICAgICAgIyBJUklYIDYuMiBhbmQgbGF0ZXIgZG8gbm90IHN1cHBvcnQgbGFyZ2UgZmlsZXMgYnkgZGVmYXVsdCwKKyAgICAgICAgICMgc28gdXNlIHRoZSBDIGNvbXBpbGVyJ3MgLW4zMiBvcHRpb24gaWYgdGhhdCBoZWxwcy4KKyAgICAgICAgIEFDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfUFJPR1JBTShbX0FDX1NZU19MQVJHRUZJTEVfVEVTVF9JTkNMVURFU10pXSkKKyAgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtdLCBbYnJlYWtdKQorICAgICAgICAgQ0M9IiRDQyAtbjMyIgorICAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoW10sIFthY19jdl9zeXNfbGFyZ2VmaWxlX0NDPScgLW4zMic7IGJyZWFrXSkKKyAgICAgICAgIGJyZWFrCisgICAgICAgZG9uZQorICAgICAgIENDPSRhY19zYXZlX0NDCisgICAgICAgcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpXSkKKyAgaWYgdGVzdCAiJGFjX2N2X3N5c19sYXJnZWZpbGVfQ0MiICE9IG5vOyB0aGVuCisgICAgQ0M9JENDJGFjX2N2X3N5c19sYXJnZWZpbGVfQ0MKKyAgZmkKKworICBfQUNfU1lTX0xBUkdFRklMRV9NQUNST19WQUxVRShfRklMRV9PRkZTRVRfQklUUywgNjQsCisgICAgYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMsCisgICAgW051bWJlciBvZiBiaXRzIGluIGEgZmlsZSBvZmZzZXQsIG9uIGhvc3RzIHdoZXJlIHRoaXMgaXMgc2V0dGFibGUuXSwKKyAgICBbX0FDX1NZU19MQVJHRUZJTEVfVEVTVF9JTkNMVURFU10pCisgIGlmIHRlc3QgJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzID0gdW5rbm93bjsgdGhlbgorICAgIF9BQ19TWVNfTEFSR0VGSUxFX01BQ1JPX1ZBTFVFKF9MQVJHRV9GSUxFUywgMSwKKyAgICAgIGFjX2N2X3N5c19sYXJnZV9maWxlcywKKyAgICAgIFtEZWZpbmUgZm9yIGxhcmdlIGZpbGVzLCBvbiBBSVgtc3R5bGUgaG9zdHMuXSwKKyAgICAgIFtfQUNfU1lTX0xBUkdFRklMRV9URVNUX0lOQ0xVREVTXSkKKyAgZmkKKworICBBSF9WRVJCQVRJTShbX0RBUldJTl9VU0VfNjRfQklUX0lOT0RFXSwKK1svKiBFbmFibGUgbGFyZ2UgaW5vZGUgbnVtYmVycyBvbiBNYWMgT1MgWC4gICovCisjaWZuZGVmIF9EQVJXSU5fVVNFXzY0X0JJVF9JTk9ERQorIyBkZWZpbmUgX0RBUldJTl9VU0VfNjRfQklUX0lOT0RFIDEKKyNlbmRpZl0pCitmaQorXSkjIEFDX1NZU19MQVJHRUZJTEUKKworXSkjIG00X3ZlcnNpb25fcHJlcmVxIDIuNjkKKworIyBFbmFibGUgbGFyZ2UgZmlsZXMgb24gc3lzdGVtcyB3aGVyZSB0aGlzIGlzIGltcGxlbWVudGVkIGJ5IEdudWxpYiwgbm90IGJ5IHRoZQorIyBzeXN0ZW0gaGVhZGVycy4KKyMgU2V0IHRoZSB2YXJpYWJsZXMgV0lORE9XU182NF9CSVRfT0ZGX1QsIFdJTkRPV1NfNjRfQklUX1NUX1NJWkUgaWYgR251bGliCisjIG92ZXJyaWRlcyBlbnN1cmUgdGhhdCBvZmZfdCBvciAnc3RydWN0IHNpemUuc3Rfc2l6ZScgYXJlIDY0LWJpdCwgcmVzcGVjdGl2ZWx5LgorQUNfREVGVU4oW2dsX0xBUkdFRklMRV0sCitbCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgbWluZ3cqKQorICAgICAgZG5sIE5hdGl2ZSBXaW5kb3dzLgorICAgICAgZG5sIG1pbmd3NjQgZGVmaW5lcyBvZmZfdCB0byBhIDY0LWJpdCB0eXBlIGFscmVhZHksIGlmCisgICAgICBkbmwgX0ZJTEVfT0ZGU0VUX0JJVFM9NjQsIHdoaWNoIGlzIGVuc3VyZWQgYnkgQUNfU1lTX0xBUkdFRklMRS4KKyAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgNjQtYml0IG9mZl90XSwgW2dsX2N2X3R5cGVfb2ZmX3RfNjRdLAorICAgICAgICBbQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgICAgIFtbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgICAgICAgICAgICAgIGludCB2ZXJpZnlfb2ZmX3Rfc2l6ZVtzaXplb2YgKG9mZl90KSA+PSA4ID8gMSA6IC0xXTsKKyAgICAgICAgICAgICAgXV0sCisgICAgICAgICAgICAgIFtbXV0pXSwKKyAgICAgICAgICAgW2dsX2N2X3R5cGVfb2ZmX3RfNjQ9eWVzXSwgW2dsX2N2X3R5cGVfb2ZmX3RfNjQ9bm9dKQorICAgICAgICBdKQorICAgICAgaWYgdGVzdCAkZ2xfY3ZfdHlwZV9vZmZfdF82NCA9IG5vOyB0aGVuCisgICAgICAgIFdJTkRPV1NfNjRfQklUX09GRl9UPTEKKyAgICAgIGVsc2UKKyAgICAgICAgV0lORE9XU182NF9CSVRfT0ZGX1Q9MAorICAgICAgZmkKKyAgICAgIGRubCBCdXQgYWxsIG5hdGl2ZSBXaW5kb3dzIHBsYXRmb3JtcyAoaW5jbHVkaW5nIG1pbmd3NjQpIGhhdmUgYSAzMi1iaXQKKyAgICAgIGRubCBzdF9zaXplIG1lbWJlciBpbiAnc3RydWN0IHN0YXQnLgorICAgICAgV0lORE9XU182NF9CSVRfU1RfU0laRT0xCisgICAgICA7OworICAgICopCisgICAgICBkbmwgTm90aGluZyB0byBkbyBvbiBnbnVsaWIncyBzaWRlLgorICAgICAgZG5sIEEgNjQtYml0IG9mZl90IGlzCisgICAgICBkbmwgICAtIGFscmVhZHkgdGhlIGRlZmF1bHQgb24gTWFjIE9TIFgsIEZyZWVCU0QsIE5ldEJTRCwgT3BlbkJTRCwgSVJJWCwKKyAgICAgIGRubCAgICAgT1NGLzEsIEN5Z3dpbiwKKyAgICAgIGRubCAgIC0gZW5hYmxlZCBieSBfRklMRV9PRkZTRVRfQklUUz02NCAoZW5zdXJlZCBieSBBQ19TWVNfTEFSR0VGSUxFKSBvbgorICAgICAgZG5sICAgICBnbGliYywgSFAtVVgsIFNvbGFyaXMsCisgICAgICBkbmwgICAtIGVuYWJsZWQgYnkgX0xBUkdFX0ZJTEVTPTEgKGVuc3VyZWQgYnkgQUNfU1lTX0xBUkdFRklMRSkgb24gQUlYLAorICAgICAgZG5sICAgLSBpbXBvc3NpYmxlIHRvIGFjaGlldmUgb24gTWluaXggMy4xLjguCisgICAgICBXSU5ET1dTXzY0X0JJVF9PRkZfVD0wCisgICAgICBXSU5ET1dTXzY0X0JJVF9TVF9TSVpFPTAKKyAgICAgIDs7CisgIGVzYWMKK10pCmRpZmYgLS1naXQgYS9tNC9sZGV4cC5tNCBiL200L2xkZXhwLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMjZiNTYKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9sZGV4cC5tNApAQCAtMCwwICsxLDU0IEBACisjIGxkZXhwLm00IHNlcmlhbCAxCitkbmwgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0ZVTkNfTERFWFBdLAorWworICBBQ19SRVFVSVJFKFtnbF9DSEVDS19MREVYUF9OT19MSUJNXSkKKyAgTERFWFBfTElCTT0KKyAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19sZGV4cF9ub19saWJtID0gbm87IHRoZW4KKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBsZGV4cCgpIGNhbiBiZSB1c2VkIHdpdGggbGlibV0sCisgICAgICBbZ2xfY3ZfZnVuY19sZGV4cF9pbl9saWJtXSwKKyAgICAgIFsKKyAgICAgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgICAgTElCUz0iJExJQlMgLWxtIgorICAgICAgICBBQ19MSU5LX0lGRUxTRSgKKyAgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKFtbI2lmbmRlZiBfX05PX01BVEhfSU5MSU5FUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRlZmluZSBfX05PX01BVEhfSU5MSU5FUyAxIC8qIGZvciBnbGliYyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgPG1hdGguaD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICgqZnVuY3B0cikgKGRvdWJsZSwgaW50KSA9IGxkZXhwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgeDtdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbcmV0dXJuIGxkZXhwICh4LCAtMSkgPiAwO11dKV0sCisgICAgICAgICAgW2dsX2N2X2Z1bmNfbGRleHBfaW5fbGlibT15ZXNdLAorICAgICAgICAgIFtnbF9jdl9mdW5jX2xkZXhwX2luX2xpYm09bm9dKQorICAgICAgICBMSUJTPSIkc2F2ZV9MSUJTIgorICAgICAgXSkKKyAgICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2xkZXhwX2luX2xpYm0gPSB5ZXM7IHRoZW4KKyAgICAgIExERVhQX0xJQk09LWxtCisgICAgZmkKKyAgZmkKKyAgQUNfU1VCU1QoW0xERVhQX0xJQk1dKQorXSkKKworZG5sIFRlc3Qgd2hldGhlciBsZGV4cCgpIGNhbiBiZSB1c2VkIHdpdGhvdXQgbGlua2luZyB3aXRoIGxpYm0uCitkbmwgU2V0IGdsX2N2X2Z1bmNfbGRleHBfbm9fbGlibSB0byAneWVzJyBvciAnbm8nIGFjY29yZGluZ2x5LgorQUNfREVGVU4oW2dsX0NIRUNLX0xERVhQX05PX0xJQk1dLAorWworICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBsZGV4cCgpIGNhbiBiZSB1c2VkIHdpdGhvdXQgbGlua2luZyB3aXRoIGxpYm1dLAorICAgIFtnbF9jdl9mdW5jX2xkZXhwX25vX2xpYm1dLAorICAgIFsKKyAgICAgIEFDX0xJTktfSUZFTFNFKAorICAgICAgICBbQUNfTEFOR19QUk9HUkFNKFtbI2lmbmRlZiBfX05PX01BVEhfSU5MSU5FUworICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkZWZpbmUgX19OT19NQVRIX0lOTElORVMgMSAvKiBmb3IgZ2xpYmMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgPG1hdGguaD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAoKmZ1bmNwdHIpIChkb3VibGUsIGludCkgPSBsZGV4cDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB4O11dLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtbcmV0dXJuIGxkZXhwICh4LCAtMSkgPiAwO11dKV0sCisgICAgICAgIFtnbF9jdl9mdW5jX2xkZXhwX25vX2xpYm09eWVzXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfbGRleHBfbm9fbGlibT1ub10pCisgICAgXSkKK10pCmRpZmYgLS1naXQgYS9tNC9sZGV4cGwubTQgYi9tNC9sZGV4cGwubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVjZGQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL200L2xkZXhwbC5tNApAQCAtMCwwICsxLDEzMyBAQAorIyBsZGV4cGwubTQgc2VyaWFsIDE2CitkbmwgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0ZVTkNfTERFWFBMXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfTUFUSF9IX0RFRkFVTFRTXSkKKyAgQUNfUkVRVUlSRShbZ2xfTE9OR19ET1VCTEVfVlNfRE9VQkxFXSkKKyAgQUNfUkVRVUlSRShbZ2xfRlVOQ19JU05BTkxdKSBkbmwgZm9yIElTTkFOTF9MSUJNCisKKyAgZG5sIFBlcnN1YWRlIGdsaWJjIDxtYXRoLmg+IHRvIGRlY2xhcmUgbGRleHBsKCkuCisgIEFDX1JFUVVJUkUoW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10pCisKKyAgZG5sIENoZWNrIHdoZXRoZXIgaXQncyBkZWNsYXJlZC4KKyAgZG5sIE1hYyBPUyBYIDEwLjMgaGFzIGxkZXhwbCgpIGluIGxpYmMgYnV0IGRvZXNuJ3QgZGVjbGFyZSBpdCBpbiA8bWF0aC5oPi4KKyAgQUNfQ0hFQ0tfREVDTChbbGRleHBsXSwgLCBbSEFWRV9ERUNMX0xERVhQTD0wXSwgW1sjaW5jbHVkZSA8bWF0aC5oPl1dKQorCisgIExERVhQTF9MSUJNPQorICBpZiB0ZXN0ICRIQVZFX0RFQ0xfTERFWFBMID0gMTsgdGhlbgorICAgIGdsX0NIRUNLX0xERVhQTF9OT19MSUJNCisgICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19sZGV4cGxfbm9fbGlibSA9IG5vOyB0aGVuCisgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBsZGV4cGwoKSBjYW4gYmUgdXNlZCB3aXRoIGxpYm1dLAorICAgICAgICBbZ2xfY3ZfZnVuY19sZGV4cGxfaW5fbGlibV0sCisgICAgICAgIFsKKyAgICAgICAgICBzYXZlX0xJQlM9IiRMSUJTIgorICAgICAgICAgIExJQlM9IiRMSUJTIC1sbSIKKyAgICAgICAgICBBQ19MSU5LX0lGRUxTRSgKKyAgICAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgICAgICBbWyNpbmNsdWRlIDxtYXRoLmg+CisgICAgICAgICAgICAgICAgIGxvbmcgZG91YmxlIHg7XV0sCisgICAgICAgICAgICAgICBbW3JldHVybiBsZGV4cGwgKHgsIC0xKSA+IDA7XV0pXSwKKyAgICAgICAgICAgIFtnbF9jdl9mdW5jX2xkZXhwbF9pbl9saWJtPXllc10sCisgICAgICAgICAgICBbZ2xfY3ZfZnVuY19sZGV4cGxfaW5fbGlibT1ub10pCisgICAgICAgICAgTElCUz0iJHNhdmVfTElCUyIKKyAgICAgICAgXSkKKyAgICAgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfbGRleHBsX2luX2xpYm0gPSB5ZXM7IHRoZW4KKyAgICAgICAgTERFWFBMX0xJQk09LWxtCisgICAgICBmaQorICAgIGZpCisgICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19sZGV4cGxfbm9fbGlibSA9IHllcyBcCisgICAgICAgfHwgdGVzdCAkZ2xfY3ZfZnVuY19sZGV4cGxfaW5fbGlibSA9IHllczsgdGhlbgorICAgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgIExJQlM9IiRMSUJTICRMREVYUExfTElCTSIKKyAgICAgIGdsX0ZVTkNfTERFWFBMX1dPUktTCisgICAgICBMSUJTPSIkc2F2ZV9MSUJTIgorICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfbGRleHBsX3dvcmtzIiBpbgorICAgICAgICAqeWVzKSBnbF9mdW5jX2xkZXhwbD15ZXMgOzsKKyAgICAgICAgKikgICAgZ2xfZnVuY19sZGV4cGw9bm87IFJFUExBQ0VfTERFWFBMPTEgOzsKKyAgICAgIGVzYWMKKyAgICBlbHNlCisgICAgICBnbF9mdW5jX2xkZXhwbD1ubworICAgIGZpCisgICAgaWYgdGVzdCAkZ2xfZnVuY19sZGV4cGwgPSB5ZXM7IHRoZW4KKyAgICAgIEFDX0RFRklORShbSEFWRV9MREVYUExdLCBbMV0sCisgICAgICAgIFtEZWZpbmUgaWYgdGhlIGxkZXhwbCgpIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZS5dKQorICAgIGZpCisgIGZpCisgIGlmIHRlc3QgJEhBVkVfREVDTF9MREVYUEwgPSAwIHx8IHRlc3QgJGdsX2Z1bmNfbGRleHBsID0gbm87IHRoZW4KKyAgICBkbmwgRmluZCBsaWJyYXJpZXMgbmVlZGVkIHRvIGxpbmsgbGliL2xkZXhwbC5jLgorICAgIGlmIHRlc3QgJEhBVkVfU0FNRV9MT05HX0RPVUJMRV9BU19ET1VCTEUgPSAxOyB0aGVuCisgICAgICBBQ19SRVFVSVJFKFtnbF9GVU5DX0xERVhQXSkKKyAgICAgIExERVhQTF9MSUJNPSIkTERFWFBfTElCTSIKKyAgICBlbHNlCisgICAgICBMREVYUExfTElCTT0iJElTTkFOTF9MSUJNIgorICAgIGZpCisgIGZpCisgIEFDX1NVQlNUKFtMREVYUExfTElCTV0pCitdKQorCitkbmwgVGVzdCB3aGV0aGVyIGxkZXhwbCgpIGNhbiBiZSB1c2VkIHdpdGhvdXQgbGlua2luZyB3aXRoIGxpYm0uCitkbmwgU2V0IGdsX2N2X2Z1bmNfbGRleHBsX25vX2xpYm0gdG8gJ3llcycgb3IgJ25vJyBhY2NvcmRpbmdseS4KK0FDX0RFRlVOKFtnbF9DSEVDS19MREVYUExfTk9fTElCTV0sCitbCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGxkZXhwbCgpIGNhbiBiZSB1c2VkIHdpdGhvdXQgbGlua2luZyB3aXRoIGxpYm1dLAorICAgIFtnbF9jdl9mdW5jX2xkZXhwbF9ub19saWJtXSwKKyAgICBbCisgICAgICBBQ19MSU5LX0lGRUxTRSgKKyAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgW1sjaW5jbHVkZSA8bWF0aC5oPgorICAgICAgICAgICAgIGxvbmcgZG91YmxlIHg7XV0sCisgICAgICAgICAgIFtbcmV0dXJuIGxkZXhwbCAoeCwgLTEpID4gMDtdXSldLAorICAgICAgICBbZ2xfY3ZfZnVuY19sZGV4cGxfbm9fbGlibT15ZXNdLAorICAgICAgICBbZ2xfY3ZfZnVuY19sZGV4cGxfbm9fbGlibT1ub10pCisgICAgXSkKK10pCisKK2RubCBUZXN0IHdoZXRoZXIgbGRleHBsKCkgd29ya3Mgb24gZmluaXRlIG51bWJlcnMgKHRoaXMgZmFpbHMgb24gQUlYIDUuMQorZG5sIGFuZCBNYWMgT1MgWCAxMC40L1Bvd2VyUEMpLgorQUNfREVGVU4oW2dsX0ZVTkNfTERFWFBMX1dPUktTXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkgZG5sIGZvciBjcm9zcy1jb21waWxlcworICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBsZGV4cGwgd29ya3NdLCBbZ2xfY3ZfZnVuY19sZGV4cGxfd29ya3NdLAorICAgIFsKKyAgICAgIEFDX1JVTl9JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgPG1hdGguaD4KK2V4dGVybgorI2lmZGVmIF9fY3BsdXNwbHVzCisiQyIKKyNlbmRpZgorbG9uZyBkb3VibGUgbGRleHBsIChsb25nIGRvdWJsZSwgaW50KTsKK2ludCBtYWluKCkKK3sKKyAgaW50IHJlc3VsdCA9IDA7CisgIHsKKyAgICB2b2xhdGlsZSBsb25nIGRvdWJsZSB4ID0gMS4wOworICAgIHZvbGF0aWxlIGxvbmcgZG91YmxlIHkgPSBsZGV4cGwgKHgsIC0xKTsKKyAgICBpZiAoeSAhPSAwLjVMKQorICAgICAgcmVzdWx0IHw9IDE7CisgIH0KKyAgeworICAgIHZvbGF0aWxlIGxvbmcgZG91YmxlIHggPSAxLjczMjA1TDsKKyAgICB2b2xhdGlsZSBsb25nIGRvdWJsZSB5ID0gbGRleHBsICh4LCAwKTsKKyAgICBpZiAoeSAhPSB4KQorICAgICAgcmVzdWx0IHw9IDI7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK31dXSldLAorICAgICAgICBbZ2xfY3ZfZnVuY19sZGV4cGxfd29ya3M9eWVzXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfbGRleHBsX3dvcmtzPW5vXSwKKyAgICAgICAgWworY2hhbmdlcXVvdGUoLClkbmwKKyAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICBhaXggfCBhaXhbMy02XSopIGdsX2N2X2Z1bmNfbGRleHBsX3dvcmtzPSJndWVzc2luZyBubyI7OworICAgICAgICAgICAqKSAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfbGRleHBsX3dvcmtzPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgIGVzYWMKK2NoYW5nZXF1b3RlKFssXSlkbmwKKyAgICAgICAgXSkKKyAgICBdKQorXSkKZGlmZiAtLWdpdCBhL200L2xpYi1sZC5tNCBiL200L2xpYi1sZC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWZlYWI1Ci0tLSAvZGV2L251bGwKKysrIGIvbTQvbGliLWxkLm00CkBAIC0wLDAgKzEsMTE5IEBACisjIGxpYi1sZC5tNCBzZXJpYWwgNgorZG5sIENvcHlyaWdodCAoQykgMTk5Ni0yMDAzLCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIFN1YnJvdXRpbmVzIG9mIGxpYnRvb2wubTQsCitkbmwgd2l0aCByZXBsYWNlbWVudHMgcy9fKkxUX1BBVEgvQUNfTElCX1BST0cvIGFuZCBzL2x0Xy9hY2xfLyB0byBhdm9pZAorZG5sIGNvbGxpc2lvbiB3aXRoIGxpYnRvb2wubTQuCisKK2RubCBGcm9tIGxpYnRvb2wtMi40LiBTZXRzIHRoZSB2YXJpYWJsZSB3aXRoX2dudV9sZCB0byB5ZXMgb3Igbm8uCitBQ19ERUZVTihbQUNfTElCX1BST0dfTERfR05VXSwKK1tBQ19DQUNIRV9DSEVDSyhbaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGRdLCBbYWNsX2N2X3Byb2dfZ251X2xkXSwKK1sjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCitjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIGFjbF9jdl9wcm9nX2dudV9sZD15ZXMKKyAgOzsKKyopCisgIGFjbF9jdl9wcm9nX2dudV9sZD1ubworICA7OworZXNhY10pCit3aXRoX2dudV9sZD0kYWNsX2N2X3Byb2dfZ251X2xkCitdKQorCitkbmwgRnJvbSBsaWJ0b29sLTIuNC4gU2V0cyB0aGUgdmFyaWFibGUgTEQuCitBQ19ERUZVTihbQUNfTElCX1BST0dfTERdLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorCitBQ19BUkdfV0lUSChbZ251LWxkXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1nbnUtbGRdLAorICAgICAgICBbYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXV0pXSwKKyAgICBbdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzXSwKKyAgICBbd2l0aF9nbnVfbGQ9bm9dKWRubAorCisjIFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgICMgRGV0ZXJtaW5lIFBBVEhfU0VQQVJBVE9SIGJ5IHRyeWluZyB0byBmaW5kIC9iaW4vc2ggaW4gYSBQQVRIIHdoaWNoCisgICMgY29udGFpbnMgb25seSAvYmluLiBOb3RlIHRoYXQga3NoIGxvb2tzIGFsc28gYXQgdGhlIEZQQVRIIHZhcmlhYmxlLAorICAjIHNvIHdlIGhhdmUgdG8gc2V0IHRoYXQgYXMgd2VsbCBmb3IgdGhlIHRlc3QuCisgIFBBVEhfU0VQQVJBVE9SPToKKyAgKFBBVEg9Jy9iaW47L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgXAorICAgICYmIHsgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgXAorICAgICAgICAgICB8fCBQQVRIX1NFUEFSQVRPUj0nOycKKyAgICAgICB9CitmaQorCithY19wcm9nPWxkCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgbGQgdXNlZCBieSAkQ0NdKQorICBjYXNlICRob3N0IGluCisgICotKi1taW5ndyopCisgICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuIHdoaWNoIHVwc2V0cyBtaW5ndworICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKKyAgKikKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7CisgIGVzYWMKKyAgY2FzZSAkYWNfcHJvZyBpbgorICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgorICAgIFtbXFwvXV0qIHwgPzpbW1xcL11dKikKKyAgICAgIHJlX2RpcmVsdD0nL1tbXi9dXVtbXi9dXSovXC5cLi8nCisgICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKKyAgICAgIGFjX3Byb2c9YGVjaG8gIiRhY19wcm9nInwgc2VkICdzJVxcXFwlLyVnJ2AKKyAgICAgIHdoaWxlIGVjaG8gIiRhY19wcm9nIiB8IGdyZXAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCisgICAgICAgIGFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8IHNlZCAicyUkcmVfZGlyZWx0JS8lImAKKyAgICAgIGRvbmUKKyAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgorICAgICAgOzsKKyAgIiIpCisgICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCisgICAgYWNfcHJvZz1sZAorICAgIDs7CisgICopCisgICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgorICAgIHdpdGhfZ251X2xkPXVua25vd24KKyAgICA7OworICBlc2FjCitlbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgR05VIGxkXSkKK2Vsc2UKKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igbm9uLUdOVSBsZF0pCitmaQorQUNfQ0FDSEVfVkFMKFthY2xfY3ZfcGF0aF9MRF0sCitbaWYgdGVzdCAteiAiJExEIjsgdGhlbgorICBhY2xfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgSUZTPSIkYWNsX3NhdmVfaWZzIgorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCisgICAgICBhY2xfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKyAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCisgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKyAgICAgIGNhc2UgYCIkYWNsX2N2X3BhdGhfTEQiIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKyAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQorICAgICAgICB0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJyZWFrCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICB0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhaworICAgICAgICA7OworICAgICAgZXNhYworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNsX3NhdmVfaWZzIgorZWxzZQorICBhY2xfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KK2ZpXSkKK0xEPSIkYWNsX2N2X3BhdGhfTEQiCitpZiB0ZXN0IC1uICIkTEQiOyB0aGVuCisgIEFDX01TR19SRVNVTFQoWyRMRF0pCitlbHNlCisgIEFDX01TR19SRVNVTFQoW25vXSkKK2ZpCit0ZXN0IC16ICIkTEQiICYmIEFDX01TR19FUlJPUihbbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEhdKQorQUNfTElCX1BST0dfTERfR05VCitdKQpkaWZmIC0tZ2l0IGEvbTQvbGliLWxkX2dsLm00IGIvbTQvbGliLWxkX2dsLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmM0ZTJjLi4wMDAwMDAwCi0tLSBhL200L2xpYi1sZF9nbC5tNAorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0jIGxpYi1sZC5tNCBzZXJpYWwgMyAoZ2V0dGV4dC0wLjEzKQotZG5sIENvcHlyaWdodCAoQykgMTk5Ni0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi1kbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLWRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLWRubCBTdWJyb3V0aW5lcyBvZiBsaWJ0b29sLm00LAotZG5sIHdpdGggcmVwbGFjZW1lbnRzIHMvQUNfL0FDX0xJQi8gYW5kIHMvbHRfY3YvYWNsX2N2LyB0byBhdm9pZCBjb2xsaXNpb24KLWRubCB3aXRoIGxpYnRvb2wubTQuCi0KLWRubCBGcm9tIGxpYnRvb2wtMS40LiBTZXRzIHRoZSB2YXJpYWJsZSB3aXRoX2dudV9sZCB0byB5ZXMgb3Igbm8uCi1BQ19ERUZVTihbQUNfTElCX1BST0dfTERfR05VXSwKLVtBQ19DQUNIRV9DSEVDSyhbaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGRdLCBhY2xfY3ZfcHJvZ19nbnVfbGQsCi1bIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGQncyBvbmx5IGFjY2VwdCAtdi4KLWNhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCi0qR05VKiB8ICond2l0aCBCRkQnKikKLSAgYWNsX2N2X3Byb2dfZ251X2xkPXllcyA7OwotKikKLSAgYWNsX2N2X3Byb2dfZ251X2xkPW5vIDs7Ci1lc2FjXSkKLXdpdGhfZ251X2xkPSRhY2xfY3ZfcHJvZ19nbnVfbGQKLV0pCi0KLWRubCBGcm9tIGxpYnRvb2wtMS40LiBTZXRzIHRoZSB2YXJpYWJsZSBMRC4KLUFDX0RFRlVOKFtBQ19MSUJfUFJPR19MRF0sCi1bQUNfQVJHX1dJVEgoZ251LWxkLAotWyAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXV0sCi10ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMsIHdpdGhfZ251X2xkPW5vKQotQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCi1BQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCi0jIFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuCi0jIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KLWlmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCi0gIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKLSAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAotICBjaG1vZCAreCBjb25mJCQuc2gKLSAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICBQQVRIX1NFUEFSQVRPUj0nOycKLSAgZWxzZQotICAgIFBBVEhfU0VQQVJBVE9SPToKLSAgZmkKLSAgcm0gLWYgY29uZiQkLnNoCi1maQotYWNfcHJvZz1sZAotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCi0gIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgR0NDXSkKLSAgY2FzZSAkaG9zdCBpbgotICAqLSotbWluZ3cqKQotICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKLSAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7Ci0gICopCi0gICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OwotICBlc2FjCi0gIGNhc2UgJGFjX3Byb2cgaW4KLSAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KLSAgICBbW1xcL10qIHwgW0EtWmEtel06W1xcL10qKV0KLSAgICAgIFtyZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nXQotICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGggb2YgbGQKLSAgICAgIGFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8IHNlZCAncyVcXFxcJS8lZydgCi0gICAgICB3aGlsZSBlY2hvICRhY19wcm9nIHwgZ3JlcCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KLQlhY19wcm9nPWBlY2hvICRhY19wcm9nfCBzZWQgInMlJHJlX2RpcmVsdCUvJSJgCi0gICAgICBkb25lCi0gICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKLSAgICAgIDs7Ci0gICIiKQotICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgotICAgIGFjX3Byb2c9bGQKLSAgICA7OwotICAqKQotICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KLSAgICB3aXRoX2dudV9sZD11bmtub3duCi0gICAgOzsKLSAgZXNhYwotZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gIEFDX01TR19DSEVDS0lORyhbZm9yIEdOVSBsZF0pCi1lbHNlCi0gIEFDX01TR19DSEVDS0lORyhbZm9yIG5vbi1HTlUgbGRdKQotZmkKLUFDX0NBQ0hFX1ZBTChhY2xfY3ZfcGF0aF9MRCwKLVtpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCi0gIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSR7UEFUSF9TRVBBUkFUT1ItOn0iCi0gIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCi0gICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KLSAgICAgIGFjbF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgotICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAotICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZCdzIG9ubHkgYWNjZXB0IC12LgotICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCi0gICAgICBjYXNlIGAiJGFjbF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwgL2Rldi9udWxsYCBpbgotICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCi0JdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhayA7OwotICAgICAgKikKLQl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhayA7OwotICAgICAgZXNhYwotICAgIGZpCi0gIGRvbmUKLSAgSUZTPSIkYWNfc2F2ZV9pZnMiCi1lbHNlCi0gIGFjbF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotZmldKQotTEQ9IiRhY2xfY3ZfcGF0aF9MRCIKLWlmIHRlc3QgLW4gIiRMRCI7IHRoZW4KLSAgQUNfTVNHX1JFU1VMVCgkTEQpCi1lbHNlCi0gIEFDX01TR19SRVNVTFQobm8pCi1maQotdGVzdCAteiAiJExEIiAmJiBBQ19NU0dfRVJST1IoW25vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIXSkKLUFDX0xJQl9QUk9HX0xEX0dOVQotXSkKZGlmZiAtLWdpdCBhL200L2xpYi1saW5rLm00IGIvbTQvbGliLWxpbmsubTQKaW5kZXggMjQ0YTc3OS4uZDExYjRiNCAxMDA2NDQKLS0tIGEvbTQvbGliLWxpbmsubTQKKysrIGIvbTQvbGliLWxpbmsubTQKQEAgLTEsNTggKzEsNjYgQEAKLSMgbGliLWxpbmsubTQgc2VyaWFsIDcgKGdldHRleHQtMC4xNSkKLWRubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgbGliLWxpbmsubTQgc2VyaWFsIDI2IChnZXR0ZXh0LTAuMTguMikKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiBkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCiBkbmwgRnJvbSBCcnVubyBIYWlibGUuCiAKLUFDX1BSRVJFUSgyLjUwKQorQUNfUFJFUkVRKFsyLjU0XSkKIAogZG5sIEFDX0xJQl9MSU5LRkxBR1MobmFtZSBbLCBkZXBlbmRlbmNpZXNdKSBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQKIGRubCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kIGltcGxpY2l0IGRlcGVuZGVuY2llcy4KIGRubCBTZXRzIGFuZCBBQ19TVUJTVHMgdGhlIExJQiR7TkFNRX0gYW5kIExUTElCJHtOQU1FfSB2YXJpYWJsZXMgYW5kCiBkbmwgYXVnbWVudHMgdGhlIENQUEZMQUdTIHZhcmlhYmxlLgorZG5sIFNldHMgYW5kIEFDX1NVQlNUcyB0aGUgTElCJHtOQU1FfV9QUkVGSVggdmFyaWFibGUgdG8gbm9uZW1wdHkgaWYgbGlibmFtZQorZG5sIHdhcyBmb3VuZCBpbiAke0xJQiR7TkFNRX1fUFJFRklYfS8kYWNsX2xpYmRpcnN0ZW0uCiBBQ19ERUZVTihbQUNfTElCX0xJTktGTEFHU10sCiBbCiAgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCiAgIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCi0gIGRlZmluZShbTmFtZV0sW3RyYW5zbGl0KFskMV0sWy4vLV0sIFtfX19dKV0pCi0gIGRlZmluZShbTkFNRV0sW3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCisgIHB1c2hkZWYoW05hbWVdLFttNF90cmFuc2xpdChbJDFdLFsuLystXSwgW19fX19dKV0pCisgIHB1c2hkZWYoW05BTUVdLFttNF90cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vKy1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19fXSldKQogICBBQ19DQUNIRV9DSEVDSyhbaG93IHRvIGxpbmsgd2l0aCBsaWJbXSQxXSwgW2FjX2N2X2xpYltdTmFtZVtdX2xpYnNdLCBbCiAgICAgQUNfTElCX0xJTktGTEFHU19CT0RZKFskMV0sIFskMl0pCiAgICAgYWNfY3ZfbGliW11OYW1lW11fbGlicz0iJExJQltdTkFNRSIKICAgICBhY19jdl9saWJbXU5hbWVbXV9sdGxpYnM9IiRMVExJQltdTkFNRSIKICAgICBhY19jdl9saWJbXU5hbWVbXV9jcHBmbGFncz0iJElOQ1tdTkFNRSIKKyAgICBhY19jdl9saWJbXU5hbWVbXV9wcmVmaXg9IiRMSUJbXU5BTUVbXV9QUkVGSVgiCiAgIF0pCiAgIExJQltdTkFNRT0iJGFjX2N2X2xpYltdTmFtZVtdX2xpYnMiCiAgIExUTElCW11OQU1FPSIkYWNfY3ZfbGliW11OYW1lW11fbHRsaWJzIgogICBJTkNbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9jcHBmbGFncyIKKyAgTElCW11OQU1FW11fUFJFRklYPSIkYWNfY3ZfbGliW11OYW1lW11fcHJlZml4IgogICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNdTkFNRSkKICAgQUNfU1VCU1QoW0xJQl1OQU1FKQogICBBQ19TVUJTVChbTFRMSUJdTkFNRSkKKyAgQUNfU1VCU1QoW0xJQl1OQU1FW19QUkVGSVhdKQogICBkbmwgQWxzbyBzZXQgSEFWRV9MSUJbXU5BTUUgc28gdGhhdCBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgY2FuIHJldXNlIHRoZQogICBkbmwgcmVzdWx0cyBvZiB0aGlzIHNlYXJjaCB3aGVuIHRoaXMgbGlicmFyeSBhcHBlYXJzIGFzIGEgZGVwZW5kZW5jeS4KICAgSEFWRV9MSUJbXU5BTUU9eWVzCi0gIHVuZGVmaW5lKFtOYW1lXSkKLSAgdW5kZWZpbmUoW05BTUVdKQorICBwb3BkZWYoW05BTUVdKQorICBwb3BkZWYoW05hbWVdKQogXSkKIAotZG5sIEFDX0xJQl9IQVZFX0xJTktGTEFHUyhuYW1lLCBkZXBlbmRlbmNpZXMsIGluY2x1ZGVzLCB0ZXN0Y29kZSkKK2RubCBBQ19MSUJfSEFWRV9MSU5LRkxBR1MobmFtZSwgZGVwZW5kZW5jaWVzLCBpbmNsdWRlcywgdGVzdGNvZGUsIFttaXNzaW5nLW1lc3NhZ2VdKQogZG5sIHNlYXJjaGVzIGZvciBsaWJuYW1lIGFuZCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kCiBkbmwgaW1wbGljaXQgZGVwZW5kZW5jaWVzLCB0b2dldGhlciB3aXRoIHRoZSBzcGVjaWZpZWQgaW5jbHVkZSBmaWxlcyBhbmQKLWRubCB0aGUgYWJpbGl0eSB0byBjb21waWxlIGFuZCBsaW5rIHRoZSBzcGVjaWZpZWQgdGVzdGNvZGUuIElmIGZvdW5kLCBpdAotZG5sIHNldHMgYW5kIEFDX1NVQlNUcyBIQVZFX0xJQiR7TkFNRX09eWVzIGFuZCB0aGUgTElCJHtOQU1FfSBhbmQKLWRubCBMVExJQiR7TkFNRX0gdmFyaWFibGVzIGFuZCBhdWdtZW50cyB0aGUgQ1BQRkxBR1MgdmFyaWFibGUsIGFuZAorZG5sIHRoZSBhYmlsaXR5IHRvIGNvbXBpbGUgYW5kIGxpbmsgdGhlIHNwZWNpZmllZCB0ZXN0Y29kZS4gVGhlIG1pc3NpbmctbWVzc2FnZQorZG5sIGRlZmF1bHRzIHRvICdubycgYW5kIG1heSBjb250YWluIGFkZGl0aW9uYWwgaGludHMgZm9yIHRoZSB1c2VyLgorZG5sIElmIGZvdW5kLCBpdCBzZXRzIGFuZCBBQ19TVUJTVHMgSEFWRV9MSUIke05BTUV9PXllcyBhbmQgdGhlIExJQiR7TkFNRX0KK2RubCBhbmQgTFRMSUIke05BTUV9IHZhcmlhYmxlcyBhbmQgYXVnbWVudHMgdGhlIENQUEZMQUdTIHZhcmlhYmxlLCBhbmQKIGRubCAjZGVmaW5lcyBIQVZFX0xJQiR7TkFNRX0gdG8gMS4gT3RoZXJ3aXNlLCBpdCBzZXRzIGFuZCBBQ19TVUJTVHMKIGRubCBIQVZFX0xJQiR7TkFNRX09bm8gYW5kIExJQiR7TkFNRX0gYW5kIExUTElCJHtOQU1FfSB0byBlbXB0eS4KK2RubCBTZXRzIGFuZCBBQ19TVUJTVHMgdGhlIExJQiR7TkFNRX1fUFJFRklYIHZhcmlhYmxlIHRvIG5vbmVtcHR5IGlmIGxpYm5hbWUKK2RubCB3YXMgZm91bmQgaW4gJHtMSUIke05BTUV9X1BSRUZJWH0vJGFjbF9saWJkaXJzdGVtLgogQUNfREVGVU4oW0FDX0xJQl9IQVZFX0xJTktGTEFHU10sCiBbCiAgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCiAgIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCi0gIGRlZmluZShbTmFtZV0sW3RyYW5zbGl0KFskMV0sWy4vLV0sIFtfX19dKV0pCi0gIGRlZmluZShbTkFNRV0sW3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCisgIHB1c2hkZWYoW05hbWVdLFttNF90cmFuc2xpdChbJDFdLFsuLystXSwgW19fX19dKV0pCisgIHB1c2hkZWYoW05BTUVdLFttNF90cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vKy1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19fXSldKQogCiAgIGRubCBTZWFyY2ggZm9yIGxpYltdTmFtZSBhbmQgZGVmaW5lIExJQltdTkFNRSwgTFRMSUJbXU5BTUUgYW5kIElOQ1tdTkFNRQogICBkbmwgYWNjb3JkaW5nbHkuCkBAIC02NiwxMyArNzQsMjYgQEAKIAogICBBQ19DQUNIRV9DSEVDSyhbZm9yIGxpYltdJDFdLCBbYWNfY3ZfbGliW11OYW1lXSwgWwogICAgIGFjX3NhdmVfTElCUz0iJExJQlMiCi0gICAgTElCUz0iJExJQlMgJExJQltdTkFNRSIKLSAgICBBQ19UUllfTElOSyhbJDNdLCBbJDRdLCBbYWNfY3ZfbGliW11OYW1lPXllc10sIFthY19jdl9saWJbXU5hbWU9bm9dKQorICAgIGRubCBJZiAkTElCW11OQU1FIGNvbnRhaW5zIHNvbWUgLWwgb3B0aW9ucywgYWRkIGl0IHRvIHRoZSBlbmQgb2YgTElCUywKKyAgICBkbmwgYmVjYXVzZSB0aGVzZSAtbCBvcHRpb25zIG1pZ2h0IHJlcXVpcmUgLUwgb3B0aW9ucyB0aGF0IGFyZSBwcmVzZW50IGluCisgICAgZG5sIExJQlMuIC1sIG9wdGlvbnMgYmVuZWZpdCBvbmx5IGZyb20gdGhlIC1MIG9wdGlvbnMgbGlzdGVkIGJlZm9yZSBpdC4KKyAgICBkbmwgT3RoZXJ3aXNlLCBhZGQgaXQgdG8gdGhlIGZyb250IG9mIExJQlMsIGJlY2F1c2UgaXQgbWF5IGJlIGEgc3RhdGljCisgICAgZG5sIGxpYnJhcnkgdGhhdCBkZXBlbmRzIG9uIGFub3RoZXIgc3RhdGljIGxpYnJhcnkgdGhhdCBpcyBwcmVzZW50IGluIExJQlMuCisgICAgZG5sIFN0YXRpYyBsaWJyYXJpZXMgYmVuZWZpdCBvbmx5IGZyb20gdGhlIHN0YXRpYyBsaWJyYXJpZXMgbGlzdGVkIGFmdGVyCisgICAgZG5sIGl0LgorICAgIGNhc2UgIiAkTElCW11OQU1FIiBpbgorICAgICAgKiIgLWwiKikgTElCUz0iJExJQlMgJExJQltdTkFNRSIgOzsKKyAgICAgICopICAgICAgIExJQlM9IiRMSUJbXU5BTUUgJExJQlMiIDs7CisgICAgZXNhYworICAgIEFDX0xJTktfSUZFTFNFKAorICAgICAgW0FDX0xBTkdfUFJPR1JBTShbWyQzXV0sIFtbJDRdXSldLAorICAgICAgW2FjX2N2X2xpYltdTmFtZT15ZXNdLAorICAgICAgW2FjX2N2X2xpYltdTmFtZT0nbTRfaWYoWyQ1XSwgW10sIFtub10sIFtbJDVdXSknXSkKICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgogICBdKQogICBpZiB0ZXN0ICIkYWNfY3ZfbGliW11OYW1lIiA9IHllczsgdGhlbgogICAgIEhBVkVfTElCW11OQU1FPXllcwotICAgIEFDX0RFRklORShbSEFWRV9MSUJdTkFNRSwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJDEgbGlicmFyeS5dKQorICAgIEFDX0RFRklORShbSEFWRV9MSUJdTkFNRSwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgbGliXVskMSBsaWJyYXJ5Ll0pCiAgICAgQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gbGluayB3aXRoIGxpYltdJDFdKQogICAgIEFDX01TR19SRVNVTFQoWyRMSUJbXU5BTUVdKQogICBlbHNlCkBAIC04MiwxNyArMTAzLDI1IEBACiAgICAgQ1BQRkxBR1M9IiRhY19zYXZlX0NQUEZMQUdTIgogICAgIExJQltdTkFNRT0KICAgICBMVExJQltdTkFNRT0KKyAgICBMSUJbXU5BTUVbXV9QUkVGSVg9CiAgIGZpCiAgIEFDX1NVQlNUKFtIQVZFX0xJQl1OQU1FKQogICBBQ19TVUJTVChbTElCXU5BTUUpCiAgIEFDX1NVQlNUKFtMVExJQl1OQU1FKQotICB1bmRlZmluZShbTmFtZV0pCi0gIHVuZGVmaW5lKFtOQU1FXSkKKyAgQUNfU1VCU1QoW0xJQl1OQU1FW19QUkVGSVhdKQorICBwb3BkZWYoW05BTUVdKQorICBwb3BkZWYoW05hbWVdKQogXSkKIAogZG5sIERldGVybWluZSB0aGUgcGxhdGZvcm0gZGVwZW5kZW50IHBhcmFtZXRlcnMgbmVlZGVkIHRvIHVzZSBycGF0aDoKLWRubCBsaWJleHQsIHNobGliZXh0LCBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLAotZG5sIGhhcmRjb2RlX2RpcmVjdCwgaGFyZGNvZGVfbWludXNfTC4KK2RubCAgIGFjbF9saWJleHQsCitkbmwgICBhY2xfc2hsaWJleHQsCitkbmwgICBhY2xfbGlibmFtZV9zcGVjLAorZG5sICAgYWNsX2xpYnJhcnlfbmFtZXNfc3BlYywKK2RubCAgIGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLAorZG5sICAgYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsCitkbmwgICBhY2xfaGFyZGNvZGVfZGlyZWN0LAorZG5sICAgYWNsX2hhcmRjb2RlX21pbnVzX0wuCiBBQ19ERUZVTihbQUNfTElCX1JQQVRIXSwKIFsKICAgZG5sIFRlbGwgYXV0b21ha2UgPj0gMS4xMCB0byBjb21wbGFpbiBpZiBjb25maWcucnBhdGggaXMgbWlzc2luZy4KQEAgLTEwMSw3ICsxMzAsNyBAQAogICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJPR19MRF0pICAgICAgICAgICAgZG5sIHdlIHVzZSAkTEQsICR3aXRoX2dudV9sZAogICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pICAgICAgICAgZG5sIHdlIHVzZSAkaG9zdAogICBBQ19SRVFVSVJFKFtBQ19DT05GSUdfQVVYX0RJUl9ERUZBVUxUXSkgZG5sIHdlIHVzZSAkYWNfYXV4X2RpcgotICBBQ19DQUNIRV9DSEVDSyhbZm9yIHNoYXJlZCBsaWJyYXJ5IHJ1biBwYXRoIG9yaWdpbl0sIGFjbF9jdl9ycGF0aCwgWworICBBQ19DQUNIRV9DSEVDSyhbZm9yIHNoYXJlZCBsaWJyYXJ5IHJ1biBwYXRoIG9yaWdpbl0sIFthY2xfY3ZfcnBhdGhdLCBbCiAgICAgQ0M9IiRDQyIgR0NDPSIkR0NDIiBMREZMQUdTPSIkTERGTEFHUyIgTEQ9IiRMRCIgd2l0aF9nbnVfbGQ9IiR3aXRoX2dudV9sZCIgXAogICAgICR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICIkYWNfYXV4X2Rpci9jb25maWcucnBhdGgiICIkaG9zdCIgPiBjb25mdGVzdC5zaAogICAgIC4gLi9jb25mdGVzdC5zaApAQCAtMTA5LDM1ICsxMzgsNjYgQEAKICAgICBhY2xfY3ZfcnBhdGg9ZG9uZQogICBdKQogICB3bD0iJGFjbF9jdl93bCIKLSAgbGliZXh0PSIkYWNsX2N2X2xpYmV4dCIKLSAgc2hsaWJleHQ9IiRhY2xfY3Zfc2hsaWJleHQiCi0gIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIKLSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIgotICBoYXJkY29kZV9kaXJlY3Q9IiRhY2xfY3ZfaGFyZGNvZGVfZGlyZWN0IgotICBoYXJkY29kZV9taW51c19MPSIkYWNsX2N2X2hhcmRjb2RlX21pbnVzX0wiCisgIGFjbF9saWJleHQ9IiRhY2xfY3ZfbGliZXh0IgorICBhY2xfc2hsaWJleHQ9IiRhY2xfY3Zfc2hsaWJleHQiCisgIGFjbF9saWJuYW1lX3NwZWM9IiRhY2xfY3ZfbGlibmFtZV9zcGVjIgorICBhY2xfbGlicmFyeV9uYW1lc19zcGVjPSIkYWNsX2N2X2xpYnJhcnlfbmFtZXNfc3BlYyIKKyAgYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIKKyAgYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKKyAgYWNsX2hhcmRjb2RlX2RpcmVjdD0iJGFjbF9jdl9oYXJkY29kZV9kaXJlY3QiCisgIGFjbF9oYXJkY29kZV9taW51c19MPSIkYWNsX2N2X2hhcmRjb2RlX21pbnVzX0wiCiAgIGRubCBEZXRlcm1pbmUgd2hldGhlciB0aGUgdXNlciB3YW50cyBycGF0aCBoYW5kbGluZyBhdCBhbGwuCi0gIEFDX0FSR19FTkFCTEUocnBhdGgsCisgIEFDX0FSR19FTkFCTEUoW3JwYXRoXSwKICAgICBbICAtLWRpc2FibGUtcnBhdGggICAgICAgICBkbyBub3QgaGFyZGNvZGUgcnVudGltZSBsaWJyYXJ5IHBhdGhzXSwKICAgICA6LCBlbmFibGVfcnBhdGg9eWVzKQogXSkKIAorZG5sIEFDX0xJQl9GUk9NUEFDS0FHRShuYW1lLCBwYWNrYWdlKQorZG5sIGRlY2xhcmVzIHRoYXQgbGlibmFtZSBjb21lcyBmcm9tIHRoZSBnaXZlbiBwYWNrYWdlLiBUaGUgY29uZmlndXJlIGZpbGUKK2RubCB3aWxsIHRoZW4gbm90IGhhdmUgYSAtLXdpdGgtbGlibmFtZS1wcmVmaXggb3B0aW9uIGJ1dCBhCitkbmwgLS13aXRoLXBhY2thZ2UtcHJlZml4IG9wdGlvbi4gU2V2ZXJhbCBsaWJyYXJpZXMgY2FuIGNvbWUgZnJvbSB0aGUgc2FtZQorZG5sIHBhY2thZ2UuIFRoaXMgZGVjbGFyYXRpb24gbXVzdCBvY2N1ciBiZWZvcmUgYW4gQUNfTElCX0xJTktGTEFHUyBvciBzaW1pbGFyCitkbmwgbWFjcm8gY2FsbCB0aGF0IHNlYXJjaGVzIGZvciBsaWJuYW1lLgorQUNfREVGVU4oW0FDX0xJQl9GUk9NUEFDS0FHRV0sCitbCisgIHB1c2hkZWYoW05BTUVdLFttNF90cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vKy1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19fXSldKQorICBkZWZpbmUoW2FjbF9mcm9tcGFja2FnZV9dTkFNRSwgWyQyXSkKKyAgcG9wZGVmKFtOQU1FXSkKKyAgcHVzaGRlZihbUEFDS10sWyQyXSkKKyAgcHVzaGRlZihbUEFDS1VQXSxbbTRfdHJhbnNsaXQoUEFDSyxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLystXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19fXSldKQorICBkZWZpbmUoW2FjbF9saWJzaW5wYWNrYWdlX11QQUNLVVAsCisgICAgbTRfaWZkZWYoW2FjbF9saWJzaW5wYWNrYWdlX11QQUNLVVAsIFttNF9kZWZuKFthY2xfbGlic2lucGFja2FnZV9dUEFDS1VQKVssIF1dLClbbGliJDFdKQorICBwb3BkZWYoW1BBQ0tVUF0pCisgIHBvcGRlZihbUEFDS10pCitdKQorCiBkbmwgQUNfTElCX0xJTktGTEFHU19CT0RZKG5hbWUgWywgZGVwZW5kZW5jaWVzXSkgc2VhcmNoZXMgZm9yIGxpYm5hbWUgYW5kCiBkbmwgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBkZXBlbmRlbmNpZXMuCiBkbmwgU2V0cyB0aGUgTElCJHtOQU1FfSwgTFRMSUIke05BTUV9IGFuZCBJTkMke05BTUV9IHZhcmlhYmxlcy4KK2RubCBBbHNvLCBzZXRzIHRoZSBMSUIke05BTUV9X1BSRUZJWCB2YXJpYWJsZSB0byBub25lbXB0eSBpZiBsaWJuYW1lIHdhcyBmb3VuZAorZG5sIGluICR7TElCJHtOQU1FfV9QUkVGSVh9LyRhY2xfbGliZGlyc3RlbS4KIEFDX0RFRlVOKFtBQ19MSUJfTElOS0ZMQUdTX0JPRFldLAogWwogICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9NVUxUSUxJQl0pCi0gIGRlZmluZShbTkFNRV0sW3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCisgIHB1c2hkZWYoW05BTUVdLFttNF90cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vKy1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19fXSldKQorICBwdXNoZGVmKFtQQUNLXSxbbTRfaWZkZWYoW2FjbF9mcm9tcGFja2FnZV9dTkFNRSwgW2FjbF9mcm9tcGFja2FnZV9dTkFNRSwgbGliWyQxXSldKQorICBwdXNoZGVmKFtQQUNLVVBdLFttNF90cmFuc2xpdChQQUNLLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vKy1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX19dKV0pCisgIHB1c2hkZWYoW1BBQ0tMSUJTXSxbbTRfaWZkZWYoW2FjbF9mcm9tcGFja2FnZV9dTkFNRSwgW2FjbF9saWJzaW5wYWNrYWdlX11QQUNLVVAsIGxpYlskMV0pXSkKKyAgZG5sIEF1dG9jb25mID49IDIuNjEgc3VwcG9ydHMgZG90cyBpbiAtLXdpdGggb3B0aW9ucy4KKyAgcHVzaGRlZihbUF9BX0NfS10sW200X2lmKG00X3ZlcnNpb25fY29tcGFyZShtNF9kZWZuKFttNF9QQUNLQUdFX1ZFUlNJT05dKSxbMi42MV0pLFstMV0sW200X3RyYW5zbGl0KFBBQ0ssWy5dLFtfXSldLFBBQ0spXSkKICAgZG5sIEJ5IGRlZmF1bHQsIGxvb2sgaW4gJGluY2x1ZGVkaXIgYW5kICRsaWJkaXIuCiAgIHVzZV9hZGRpdGlvbmFsPXllcwogICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWwogICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgogICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKICAgXSkKLSAgQUNfTElCX0FSR19XSVRIKFtsaWIkMS1wcmVmaXhdLAotWyAgLS13aXRoLWxpYiQxLXByZWZpeFs9RElSXSAgc2VhcmNoIGZvciBsaWIkMSBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgotICAtLXdpdGhvdXQtbGliJDEtcHJlZml4ICAgICBkb24ndCBzZWFyY2ggZm9yIGxpYiQxIGluIGluY2x1ZGVkaXIgYW5kIGxpYmRpcl0sCisgIEFDX0FSR19XSVRIKFBfQV9DX0tbLXByZWZpeF0sCitbWyAgLS13aXRoLV1dUF9BX0NfS1tbLXByZWZpeFs9RElSXSAgc2VhcmNoIGZvciBdUEFDS0xJQlNbIGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCisgIC0td2l0aG91dC1dXVBfQV9DX0tbWy1wcmVmaXggICAgIGRvbid0IHNlYXJjaCBmb3IgXVBBQ0tMSUJTWyBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXJdXSwKIFsKICAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlhubyI7IHRoZW4KICAgICAgIHVzZV9hZGRpdGlvbmFsPW5vCkBAIC0xNTAsNiArMjEwLDEwIEBACiAgICAgICBlbHNlCiAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJHdpdGh2YWwvaW5jbHVkZSIKICAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9IiR3aXRodmFsLyRhY2xfbGliZGlyc3RlbSIKKyAgICAgICAgaWYgdGVzdCAiJGFjbF9saWJkaXJzdGVtMiIgIT0gIiRhY2xfbGliZGlyc3RlbSIgXAorICAgICAgICAgICAmJiAhIHRlc3QgLWQgIiR3aXRodmFsLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KKyAgICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvJGFjbF9saWJkaXJzdGVtMiIKKyAgICAgICAgZmkKICAgICAgIGZpCiAgICAgZmkKIF0pCkBAIC0xNTgsNiArMjIyLDEwIEBACiAgIExJQltdTkFNRT0KICAgTFRMSUJbXU5BTUU9CiAgIElOQ1tdTkFNRT0KKyAgTElCW11OQU1FW11fUFJFRklYPQorICBkbmwgSEFWRV9MSUIke05BTUV9IGlzIGFuIGluZGljYXRvciB0aGF0IExJQiR7TkFNRX0sIExUTElCJHtOQU1FfSBoYXZlIGJlZW4KKyAgZG5sIGNvbXB1dGVkLiBTbyBpdCBoYXMgdG8gYmUgcmVzZXQgaGVyZS4KKyAgSEFWRV9MSUJbXU5BTUU9CiAgIHJwYXRoZGlycz0KICAgbHRycGF0aGRpcnM9CiAgIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0KQEAgLTE3Nyw3ICsyNDUsNyBAQAogICAgICAgICBuYW1lc19hbHJlYWR5X2hhbmRsZWQ9IiRuYW1lc19hbHJlYWR5X2hhbmRsZWQgJG5hbWUiCiAgICAgICAgIGRubCBTZWUgaWYgaXQgd2FzIGFscmVhZHkgbG9jYXRlZCBieSBhbiBlYXJsaWVyIEFDX0xJQl9MSU5LRkxBR1MKICAgICAgICAgZG5sIG9yIEFDX0xJQl9IQVZFX0xJTktGTEFHUyBjYWxsLgotICAgICAgICB1cHBlcm5hbWU9YGVjaG8gIiRuYW1lIiB8IHNlZCAtZSAneXxhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLXxBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX3wnYAorICAgICAgICB1cHBlcm5hbWU9YGVjaG8gIiRuYW1lIiB8IHNlZCAtZSAneXxhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vKy18QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19ffCdgCiAgICAgICAgIGV2YWwgdmFsdWU9XCJcJEhBVkVfTElCJHVwcGVybmFtZVwiCiAgICAgICAgIGlmIHRlc3QgLW4gIiR2YWx1ZSI7IHRoZW4KICAgICAgICAgICBpZiB0ZXN0ICIkdmFsdWUiID0geWVzOyB0aGVuCkBAIC0xOTcsMjIgKzI2NSw1NSBAQAogICAgICAgICAgIGZvdW5kX2xhPQogICAgICAgICAgIGZvdW5kX3NvPQogICAgICAgICAgIGZvdW5kX2E9CisgICAgICAgICAgZXZhbCBsaWJuYW1lPVwiJGFjbF9saWJuYW1lX3NwZWNcIiAgICAjIHR5cGljYWxseTogbGlibmFtZT1saWIkbmFtZQorICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCisgICAgICAgICAgICBzaHJleHQ9Ii4kYWNsX3NobGliZXh0IiAgICAgICAgICAgICAjIHR5cGljYWxseTogc2hyZXh0PS5zbworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNocmV4dD0KKyAgICAgICAgICBmaQogICAgICAgICAgIGlmIHRlc3QgJHVzZV9hZGRpdGlvbmFsID0geWVzOyB0aGVuCi0gICAgICAgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJleHQiICYmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kc2hsaWJleHQiOyB0aGVuCi0gICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgotICAgICAgICAgICAgICBmb3VuZF9zbz0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCIKLSAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgotICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiCi0gICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kbGliZXh0IjsgdGhlbgotICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgotICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kbGliZXh0IgotICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5sYSI7IHRoZW4KLSAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiCisgICAgICAgICAgICBkaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKKyAgICAgICAgICAgIGRubCBUaGUgc2FtZSBjb2RlIGFzIGluIHRoZSBsb29wIGJlbG93OgorICAgICAgICAgICAgZG5sIEZpcnN0IGxvb2sgZm9yIGEgc2hhcmVkIGxpYnJhcnkuCisgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0IgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWMiID0gJyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnOyB0aGVuCisgICAgICAgICAgICAgICAgICB2ZXI9YChjZCAiJGRpciIgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gIiRsaWJuYW1lJHNocmV4dCIuKjsgZG8gZWNobyAiJGYiOyBkb25lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICJzLF4kbGlibmFtZSRzaHJleHRcXFxcLiwsIiBcCisgICAgICAgICAgICAgICAgICAgICAgICB8IHNvcnQgLXQgJy4nIC1uIC1yIC1rMSwxIC1rMiwyIC1rMywzIC1rNCw0IC1rNSw1IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIDFxICkgMj4vZGV2L251bGxgCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkdmVyIiAmJiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIgorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBldmFsIGxpYnJhcnlfbmFtZXM9XCIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlY1wiCisgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kZiI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGYiCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGRvbmUKICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRubCBUaGVuIGxvb2sgZm9yIGEgc3RhdGljIGxpYnJhcnkuCisgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCIKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUubGEiOyB0aGVuCisgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvJGxpYm5hbWUubGEiCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQogICAgICAgICAgIGZpCiAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCiAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJbXU5BTUU7IGRvCkBAIC0yMjAsMjEgKzMyMSw0NiBAQAogICAgICAgICAgICAgICBjYXNlICIkeCIgaW4KICAgICAgICAgICAgICAgICAtTCopCiAgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkeCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKLSAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYmV4dCIgJiYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS4kc2hsaWJleHQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKLSAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvbGliJG5hbWUuJHNobGliZXh0IgotICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyL2xpYiRuYW1lLmxhIgotICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLiRsaWJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICBkbmwgRmlyc3QgbG9vayBmb3IgYSBzaGFyZWQgbGlicmFyeS4KKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0IjsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKLSAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyL2xpYiRuYW1lLiRsaWJleHQiCi0gICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS5sYSI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyL2xpYiRuYW1lLmxhIgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dCIKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjIiA9ICckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgdmVyPWAoY2QgIiRkaXIiICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICIkbGlibmFtZSRzaHJleHQiLio7IGRvIGVjaG8gIiRmIjsgZG9uZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAicyxeJGxpYm5hbWUkc2hyZXh0XFxcXC4sLCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzb3J0IC10ICcuJyAtbiAtciAtazEsMSAtazIsMiAtazMsMyAtazQsNCAtazUsNSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAxcSApIDI+L2Rldi9udWxsYAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHZlciIgJiYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWNcIgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gJGxpYnJhcnlfbmFtZXM7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGYiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRmIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBkb25lCiAgICAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBkbmwgVGhlbiBsb29rIGZvciBhIHN0YXRpYyBsaWJyYXJ5LgorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLmxhIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyLyRsaWJuYW1lLmxhIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgIGVzYWMKICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgpAQCAtMjQ5LDcgKzM3NSw5IEBACiAgICAgICAgICAgICAgIGRubCBMaW5raW5nIHdpdGggYSBzaGFyZWQgbGlicmFyeS4gV2UgYXR0ZW1wdCB0byBoYXJkY29kZSBpdHMKICAgICAgICAgICAgICAgZG5sIGRpcmVjdG9yeSBpbnRvIHRoZSBleGVjdXRhYmxlJ3MgcnVucGF0aCwgdW5sZXNzIGl0J3MgdGhlCiAgICAgICAgICAgICAgIGRubCBzdGFuZGFyZCAvdXNyL2xpYi4KLSAgICAgICAgICAgICAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIgPSBubyB8fCB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgorICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiA9IG5vIFwKKyAgICAgICAgICAgICAgICAgfHwgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbSIgXAorICAgICAgICAgICAgICAgICB8fCB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtMiI7IHRoZW4KICAgICAgICAgICAgICAgICBkbmwgTm8gaGFyZGNvZGluZyBpcyBuZWVkZWQuCiAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCiAgICAgICAgICAgICAgIGVsc2UKQEAgLTI2OCwxMiArMzk2LDEyIEBACiAgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRmb3VuZF9kaXIiCiAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICBkbmwgVGhlIGhhcmRjb2RpbmcgaW50byAkTElCTkFNRSBpcyBzeXN0ZW0gZGVwZW5kZW50LgotICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCisgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9oYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCiAgICAgICAgICAgICAgICAgICBkbmwgVXNpbmcgRElSL2xpYk5BTUUuc28gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQogICAgICAgICAgICAgICAgICAgZG5sIHJlc3VsdGluZyBiaW5hcnkuCiAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgJiYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgJiYgdGVzdCAiJGFjbF9oYXJkY29kZV9taW51c19MIiA9IG5vOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgIGRubCBVc2UgYW4gZXhwbGljaXQgb3B0aW9uIHRvIGhhcmRjb2RlIERJUiBpbnRvIHRoZSByZXN1bHRpbmcKICAgICAgICAgICAgICAgICAgICAgZG5sIGJpbmFyeS4KICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCkBAIC0zMDQsMTMgKzQzMiwxMyBAQAogICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LUwkZm91bmRfZGlyIgogICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9oYXJkY29kZV9taW51c19MIiAhPSBubzsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgIGRubCBGSVhNRTogTm90IHN1cmUgd2hldGhlciB3ZSBzaG91bGQgdXNlCiAgICAgICAgICAgICAgICAgICAgICAgZG5sICItTCRmb3VuZF9kaXIgLWwkbmFtZSIgb3IgIi1MJGZvdW5kX2RpciAkZm91bmRfc28iCiAgICAgICAgICAgICAgICAgICAgICAgZG5sIGhlcmUuCiAgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICBkbmwgV2UgY2Fubm90IHVzZSAkaGFyZGNvZGVfcnVucGF0aF92YXIgYW5kIExEX1JVTl9QQVRICisgICAgICAgICAgICAgICAgICAgICAgZG5sIFdlIGNhbm5vdCB1c2UgJGFjbF9oYXJkY29kZV9ydW5wYXRoX3ZhciBhbmQgTERfUlVOX1BBVEgKICAgICAgICAgICAgICAgICAgICAgICBkbmwgaGVyZSwgYmVjYXVzZSB0aGlzIGRvZXNuJ3QgZml0IGluIGZsYWdzIHBhc3NlZCB0byB0aGUKICAgICAgICAgICAgICAgICAgICAgICBkbmwgY29tcGlsZXIuIFNvIGdpdmUgdXAuIE5vIGhhcmRjb2RpbmcuIFRoaXMgYWZmZWN0cyBvbmx5CiAgICAgICAgICAgICAgICAgICAgICAgZG5sIHZlcnkgb2xkIHN5c3RlbXMuCkBAIC0zMzcsNiArNDY1LDE2IEBACiAgICAgICAgICAgICBjYXNlICIkZm91bmRfZGlyIiBpbgogICAgICAgICAgICAgICAqLyRhY2xfbGliZGlyc3RlbSB8ICovJGFjbF9saWJkaXJzdGVtLykKICAgICAgICAgICAgICAgICBiYXNlZGlyPWBlY2hvICJYJGZvdW5kX2RpciIgfCBzZWQgLWUgJ3MsXlgsLCcgLWUgInMsLyRhY2xfbGliZGlyc3RlbS8iJyokLCwnYAorICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRuYW1lIiA9ICckMSc7IHRoZW4KKyAgICAgICAgICAgICAgICAgIExJQltdTkFNRVtdX1BSRUZJWD0iJGJhc2VkaXIiCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiRiYXNlZGlyL2luY2x1ZGUiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgKi8kYWNsX2xpYmRpcnN0ZW0yIHwgKi8kYWNsX2xpYmRpcnN0ZW0yLykKKyAgICAgICAgICAgICAgICBiYXNlZGlyPWBlY2hvICJYJGZvdW5kX2RpciIgfCBzZWQgLWUgJ3MsXlgsLCcgLWUgInMsLyRhY2xfbGliZGlyc3RlbTIvIicqJCwsJ2AKKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkbmFtZSIgPSAnJDEnOyB0aGVuCisgICAgICAgICAgICAgICAgICBMSUJbXU5BTUVbXV9QUkVGSVg9IiRiYXNlZGlyIgorICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkYmFzZWRpci9pbmNsdWRlIgogICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICBlc2FjCkBAIC0zOTcsOSArNTM1LDExIEBACiAgICAgICAgICAgICAgICAgICAgIGRubCAgIDMuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRMREZMQUdTIG9yIHRoZSBhbHJlYWR5CiAgICAgICAgICAgICAgICAgICAgIGRubCAgICAgIGNvbnN0cnVjdGVkICRMSUJOQU1FLAogICAgICAgICAgICAgICAgICAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgotICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIiBcCisgICAgICAgICAgICAgICAgICAgICAgICYmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0yIjsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KLSAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgPSAiWC91c3IvbG9jYWwvJGFjbF9saWJkaXJzdGVtIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgPSAiWC91c3IvbG9jYWwvJGFjbF9saWJkaXJzdGVtMiI7IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW51eCogfCBnbnUqIHwgaypic2QqLWdudSkgaGF2ZWl0PXllczs7CkBAIC00OTgsMTggKzYzOCwxOCBAQAogICAgIGRvbmUKICAgZG9uZQogICBpZiB0ZXN0ICJYJHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgogICAgICAgZG5sIFdlaXJkIHBsYXRmb3JtOiBvbmx5IHRoZSBsYXN0IC1ycGF0aCBvcHRpb24gY291bnRzLCB0aGUgdXNlciBtdXN0CiAgICAgICBkbmwgcGFzcyBhbGwgcGF0aCBlbGVtZW50cyBpbiBvbmUgb3B0aW9uLiBXZSBjYW4gYXJyYW5nZSB0aGF0IGZvciBhCiAgICAgICBkbmwgc2luZ2xlIGxpYnJhcnksIGJ1dCBub3Qgd2hlbiBtb3JlIHRoYW4gb25lICRMSUJOQU1FcyBhcmUgdXNlZC4KICAgICAgIGFsbGRpcnM9CiAgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCi0gICAgICAgIGFsbGRpcnM9IiR7YWxsZGlyc30ke2FsbGRpcnM6KyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yfSRmb3VuZF9kaXIiCisgICAgICAgIGFsbGRpcnM9IiR7YWxsZGlyc30ke2FsbGRpcnM6KyRhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcn0kZm91bmRfZGlyIgogICAgICAgZG9uZQotICAgICAgZG5sIE5vdGU6IGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgdXNlcyAkbGliZGlyIGFuZCAkd2wuCisgICAgICBkbmwgTm90ZTogYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgdXNlcyAkbGliZGlyIGFuZCAkd2wuCiAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCiAgICAgICBsaWJkaXI9IiRhbGxkaXJzIgotICAgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgZXZhbCBmbGFnPVwiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKICAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZsYWciCiAgICAgZWxzZQpAQCAtNTE3LDcgKzY1Nyw3IEBACiAgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCiAgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKICAgICAgICAgbGliZGlyPSIkZm91bmRfZGlyIgotICAgICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICAgIGV2YWwgZmxhZz1cIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCiAgICAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZmxhZyIKICAgICAgIGRvbmUKQEAgLTUzMCw2ICs2NzAsMTEgQEAKICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LVIkZm91bmRfZGlyIgogICAgIGRvbmUKICAgZmkKKyAgcG9wZGVmKFtQX0FfQ19LXSkKKyAgcG9wZGVmKFtQQUNLTElCU10pCisgIHBvcGRlZihbUEFDS1VQXSkKKyAgcG9wZGVmKFtQQUNLXSkKKyAgcG9wZGVmKFtOQU1FXSkKIF0pCiAKIGRubCBBQ19MSUJfQVBQRU5EVE9WQVIoVkFSLCBDT05URU5UUykgYXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgQ09OVEVOVFMgdG8gVkFSLApAQCAtNTUyLDMgKzY5Nyw4MSBAQAogICAgIGZpCiAgIGRvbmUKIF0pCisKK2RubCBGb3IgdGhvc2UgY2FzZXMgd2hlcmUgYSB2YXJpYWJsZSBjb250YWlucyBzZXZlcmFsIC1MIGFuZCAtbCBvcHRpb25zCitkbmwgcmVmZXJyaW5nIHRvIHVua25vd24gbGlicmFyaWVzIGFuZCBkaXJlY3RvcmllcywgdGhpcyBtYWNybyBkZXRlcm1pbmVzIHRoZQorZG5sIG5lY2Vzc2FyeSBhZGRpdGlvbmFsIGxpbmtlciBvcHRpb25zIGZvciB0aGUgcnVudGltZSBwYXRoLgorZG5sIEFDX0xJQl9MSU5LRkxBR1NfRlJPTV9MSUJTKFtMREFERFZBUl0sIFtMSUJTVkFMVUVdLCBbVVNFLUxJQlRPT0xdKQorZG5sIHNldHMgTERBRERWQVIgdG8gbGlua2VyIG9wdGlvbnMgbmVlZGVkIHRvZ2V0aGVyIHdpdGggTElCU1ZBTFVFLgorZG5sIElmIFVTRS1MSUJUT09MIGV2YWx1YXRlcyB0byBub24tZW1wdHksIGxpbmtpbmcgd2l0aCBsaWJ0b29sIGlzIGFzc3VtZWQsCitkbmwgb3RoZXJ3aXNlIGxpbmtpbmcgd2l0aG91dCBsaWJ0b29sIGlzIGFzc3VtZWQuCitBQ19ERUZVTihbQUNfTElCX0xJTktGTEFHU19GUk9NX0xJQlNdLAorWworICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQorICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9NVUxUSUxJQl0pCisgICQxPQorICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiAhPSBubzsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgJiYgdGVzdCAiJGFjbF9oYXJkY29kZV9taW51c19MIiA9IG5vOyB0aGVuCisgICAgICBkbmwgVXNlIGFuIGV4cGxpY2l0IG9wdGlvbiB0byBoYXJkY29kZSBkaXJlY3RvcmllcyBpbnRvIHRoZSByZXN1bHRpbmcKKyAgICAgIGRubCBiaW5hcnkuCisgICAgICBycGF0aGRpcnM9CisgICAgICBuZXh0PQorICAgICAgZm9yIG9wdCBpbiAkMjsgZG8KKyAgICAgICAgaWYgdGVzdCAtbiAiJG5leHQiOyB0aGVuCisgICAgICAgICAgZGlyPSIkbmV4dCIKKyAgICAgICAgICBkbmwgTm8gbmVlZCB0byBoYXJkY29kZSB0aGUgc3RhbmRhcmQgL3Vzci9saWIuCisgICAgICAgICAgaWYgdGVzdCAiWCRkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iIFwKKyAgICAgICAgICAgICAmJiB0ZXN0ICJYJGRpciIgIT0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbTIiOyB0aGVuCisgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGRpciIKKyAgICAgICAgICBmaQorICAgICAgICAgIG5leHQ9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBjYXNlICRvcHQgaW4KKyAgICAgICAgICAgIC1MKSBuZXh0PXllcyA7OworICAgICAgICAgICAgLUwqKSBkaXI9YGVjaG8gIlgkb3B0IiB8IHNlZCAtZSAncyxeWC1MLCwnYAorICAgICAgICAgICAgICAgICBkbmwgTm8gbmVlZCB0byBoYXJkY29kZSB0aGUgc3RhbmRhcmQgL3Vzci9saWIuCisgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIiBcCisgICAgICAgICAgICAgICAgICAgICYmIHRlc3QgIlgkZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtMiI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGRpciIKKyAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgbmV4dD0gOzsKKyAgICAgICAgICAgICopIG5leHQ9IDs7CisgICAgICAgICAgZXNhYworICAgICAgICBmaQorICAgICAgZG9uZQorICAgICAgaWYgdGVzdCAiWCRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorICAgICAgICBpZiB0ZXN0IC1uICIiJDMiIjsgdGhlbgorICAgICAgICAgIGRubCBsaWJ0b29sIGlzIHVzZWQgZm9yIGxpbmtpbmcuIFVzZSAtUiBvcHRpb25zLgorICAgICAgICAgIGZvciBkaXIgaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICQxPSIkeyQxfSR7JDE6KyB9LVIkZGlyIgorICAgICAgICAgIGRvbmUKKyAgICAgICAgZWxzZQorICAgICAgICAgIGRubCBUaGUgbGlua2VyIGlzIHVzZWQgZm9yIGxpbmtpbmcgZGlyZWN0bHkuCisgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorICAgICAgICAgICAgZG5sIFdlaXJkIHBsYXRmb3JtOiBvbmx5IHRoZSBsYXN0IC1ycGF0aCBvcHRpb24gY291bnRzLCB0aGUgdXNlcgorICAgICAgICAgICAgZG5sIG11c3QgcGFzcyBhbGwgcGF0aCBlbGVtZW50cyBpbiBvbmUgb3B0aW9uLgorICAgICAgICAgICAgYWxsZGlycz0KKyAgICAgICAgICAgIGZvciBkaXIgaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICAgYWxsZGlycz0iJHthbGxkaXJzfSR7YWxsZGlyczorJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yfSRkaXIiCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICAgICAgICBsaWJkaXI9IiRhbGxkaXJzIgorICAgICAgICAgICAgZXZhbCBmbGFnPVwiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgICAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKyAgICAgICAgICAgICQxPSIkZmxhZyIKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBkbmwgVGhlIC1ycGF0aCBvcHRpb25zIGFyZSBjdW11bGF0aXZlLgorICAgICAgICAgICAgZm9yIGRpciBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICAgICAgICAgIGxpYmRpcj0iJGRpciIKKyAgICAgICAgICAgICAgZXZhbCBmbGFnPVwiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgICAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgICAgICAgICAkMT0iJHskMX0keyQxOisgfSRmbGFnIgorICAgICAgICAgICAgZG9uZQorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGZpCisgIGZpCisgIEFDX1NVQlNUKFskMV0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvbGliLXByZWZpeC5tNCBiL200L2xpYi1wcmVmaXgubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA3YWEwNQotLS0gL2Rldi9udWxsCisrKyBiL200L2xpYi1wcmVmaXgubTQKQEAgLTAsMCArMSwyMjQgQEAKKyMgbGliLXByZWZpeC5tNCBzZXJpYWwgNyAoZ2V0dGV4dC0wLjE4KQorZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDA1LCAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorCitkbmwgQUNfTElCX0FSR19XSVRIIGlzIHN5bm9ueW1vdXMgdG8gQUNfQVJHX1dJVEggaW4gYXV0b2NvbmYtMi4xMywgYW5kCitkbmwgc2ltaWxhciB0byBBQ19BUkdfV0lUSCBpbiBhdXRvY29uZiAyLjUyLi4uMi41NyBleGNlcHQgdGhhdCBpcyBkb2Vzbid0CitkbmwgcmVxdWlyZSBleGNlc3NpdmUgYnJhY2tldGluZy4KK2lmZGVmKFtBQ19IRUxQX1NUUklOR10sCitbQUNfREVGVU4oW0FDX0xJQl9BUkdfV0lUSF0sIFtBQ19BUkdfV0lUSChbJDFdLFtbJDJdXSxbJDNdLFskNF0pXSldLAorW0FDX0RFRlVOKFtBQ19dW0xJQl9BUkdfV0lUSF0sIFtBQ19BUkdfV0lUSChbJDFdLFskMl0sWyQzXSxbJDRdKV0pXSkKKworZG5sIEFDX0xJQl9QUkVGSVggYWRkcyB0byB0aGUgQ1BQRkxBR1MgYW5kIExERkxBR1MgdGhlIGZsYWdzIHRoYXQgYXJlIG5lZWRlZAorZG5sIHRvIGFjY2VzcyBwcmV2aW91c2x5IGluc3RhbGxlZCBsaWJyYXJpZXMuIFRoZSBiYXNpYyBhc3N1bXB0aW9uIGlzIHRoYXQKK2RubCBhIHVzZXIgd2lsbCB3YW50IHBhY2thZ2VzIHRvIHVzZSBvdGhlciBwYWNrYWdlcyBoZSBwcmV2aW91c2x5IGluc3RhbGxlZAorZG5sIHdpdGggdGhlIHNhbWUgLS1wcmVmaXggb3B0aW9uLgorZG5sIFRoaXMgbWFjcm8gaXMgbm90IG5lZWRlZCBpZiBvbmx5IEFDX0xJQl9MSU5LRkxBR1MgaXMgdXNlZCB0byBsb2NhdGUKK2RubCBsaWJyYXJpZXMsIGJ1dCBpcyBvdGhlcndpc2UgdmVyeSBjb252ZW5pZW50LgorQUNfREVGVU4oW0FDX0xJQl9QUkVGSVhdLAorWworICBBQ19CRUZPUkUoWyQwXSwgW0FDX0xJQl9MSU5LRkxBR1NdKQorICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9NVUxUSUxJQl0pCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCisgIGRubCBCeSBkZWZhdWx0LCBsb29rIGluICRpbmNsdWRlZGlyIGFuZCAkbGliZGlyLgorICB1c2VfYWRkaXRpb25hbD15ZXMKKyAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKyAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKyAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisgIF0pCisgIEFDX0xJQl9BUkdfV0lUSChbbGliLXByZWZpeF0sCitbICAtLXdpdGgtbGliLXByZWZpeFs9RElSXSBzZWFyY2ggZm9yIGxpYnJhcmllcyBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorICAtLXdpdGhvdXQtbGliLXByZWZpeCAgICBkb24ndCBzZWFyY2ggZm9yIGxpYnJhcmllcyBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXJdLAorWworICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgorICAgICAgdXNlX2FkZGl0aW9uYWw9bm8KKyAgICBlbHNlCisgICAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlgiOyB0aGVuCisgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCisgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorICAgICAgICBdKQorICAgICAgZWxzZQorICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiR3aXRodmFsL2luY2x1ZGUiCisgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPSIkd2l0aHZhbC8kYWNsX2xpYmRpcnN0ZW0iCisgICAgICBmaQorICAgIGZpCitdKQorICBpZiB0ZXN0ICR1c2VfYWRkaXRpb25hbCA9IHllczsgdGhlbgorICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkQ1BQRkxBR1MuCisgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKyAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2luY2x1ZGUsCisgICAgZG5sICAgMi4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJENQUEZMQUdTLAorICAgIGRubCAgIDMuIGlmIGl0J3MgL3Vzci9sb2NhbC9pbmNsdWRlIGFuZCB3ZSBhcmUgdXNpbmcgR0NDIG9uIExpbnV4LAorICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYL3Vzci9pbmNsdWRlIjsgdGhlbgorICAgICAgaGF2ZWl0PQorICAgICAgZm9yIHggaW4gJENQUEZMQUdTOyBkbworICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgPSAiWC91c3IvbG9jYWwvaW5jbHVkZSI7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICAgICAgICBsaW51eCogfCBnbnUqIHwgaypic2QqLWdudSkgaGF2ZWl0PXllczs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkQ1BQRkxBR1MuCisgICAgICAgICAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30ke0NQUEZMQUdTOisgfS1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMREZMQUdTLgorICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0CisgICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9saWIsCisgICAgZG5sICAgMi4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJExERkxBR1MsCisgICAgZG5sICAgMy4gaWYgaXQncyAvdXNyL2xvY2FsL2xpYiBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKyAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisgICAgICBoYXZlaXQ9CisgICAgICBmb3IgeCBpbiAkTERGTEFHUzsgZG8KKyAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKyAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKyAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTERGTEFHUy4KKyAgICAgICAgICAgIExERkxBR1M9IiR7TERGTEFHU30ke0xERkxBR1M6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKK10pCisKK2RubCBBQ19MSUJfUFJFUEFSRV9QUkVGSVggY3JlYXRlcyB2YXJpYWJsZXMgYWNsX2ZpbmFsX3ByZWZpeCwKK2RubCBhY2xfZmluYWxfZXhlY19wcmVmaXgsIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyB0byB3aGljaCAkcHJlZml4IGFuZAorZG5sICRleGVjX3ByZWZpeCB3aWxsIGV4cGFuZCBhdCB0aGUgZW5kIG9mIHRoZSBjb25maWd1cmUgc2NyaXB0LgorQUNfREVGVU4oW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0sCitbCisgIGRubCBVbmZvcnR1bmF0ZWx5LCBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IGdldCBvbmx5IGZpbmFsbHkgZGV0ZXJtaW5lZAorICBkbmwgYXQgdGhlIGVuZCBvZiBjb25maWd1cmUuCisgIGlmIHRlc3QgIlgkcHJlZml4IiA9ICJYTk9ORSI7IHRoZW4KKyAgICBhY2xfZmluYWxfcHJlZml4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCisgIGVsc2UKKyAgICBhY2xfZmluYWxfcHJlZml4PSIkcHJlZml4IgorICBmaQorICBpZiB0ZXN0ICJYJGV4ZWNfcHJlZml4IiA9ICJYTk9ORSI7IHRoZW4KKyAgICBhY2xfZmluYWxfZXhlY19wcmVmaXg9JyR7cHJlZml4fScKKyAgZWxzZQorICAgIGFjbF9maW5hbF9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBmaQorICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGV2YWwgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PVwiJGFjbF9maW5hbF9leGVjX3ByZWZpeFwiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKK10pCisKK2RubCBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW3N0YXRlbWVudF0pIGV2YWx1YXRlcyBzdGF0ZW1lbnQsIHdpdGggdGhlCitkbmwgdmFyaWFibGVzIHByZWZpeCBhbmQgZXhlY19wcmVmaXggYm91bmQgdG8gdGhlIHZhbHVlcyB0aGV5IHdpbGwgaGF2ZQorZG5sIGF0IHRoZSBlbmQgb2YgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCitBQ19ERUZVTihbQUNfTElCX1dJVEhfRklOQUxfUFJFRklYXSwKK1sKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKyAgJDEKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorXSkKKworZG5sIEFDX0xJQl9QUkVQQVJFX01VTFRJTElCIGNyZWF0ZXMKK2RubCAtIGEgdmFyaWFibGUgYWNsX2xpYmRpcnN0ZW0sIGNvbnRhaW5pbmcgdGhlIGJhc2VuYW1lIG9mIHRoZSBsaWJkaXIsIGVpdGhlcgorZG5sICAgImxpYiIgb3IgImxpYjY0IiBvciAibGliLzY0IiwKK2RubCAtIGEgdmFyaWFibGUgYWNsX2xpYmRpcnN0ZW0yLCBhcyBhIHNlY29uZGFyeSBwb3NzaWJsZSB2YWx1ZSBmb3IKK2RubCAgIGFjbF9saWJkaXJzdGVtLCBlaXRoZXIgdGhlIHNhbWUgYXMgYWNsX2xpYmRpcnN0ZW0gb3IgImxpYi9zcGFyY3Y5IiBvcgorZG5sICAgImxpYi9hbWQ2NCIuCitBQ19ERUZVTihbQUNfTElCX1BSRVBBUkVfTVVMVElMSUJdLAorWworICBkbmwgVGhlcmUgaXMgbm8gZm9ybWFsIHN0YW5kYXJkIHJlZ2FyZGluZyBsaWIgYW5kIGxpYjY0LgorICBkbmwgT24gZ2xpYmMgc3lzdGVtcywgdGhlIGN1cnJlbnQgcHJhY3RpY2UgaXMgdGhhdCBvbiBhIHN5c3RlbSBzdXBwb3J0aW5nCisgIGRubCAzMi1iaXQgYW5kIDY0LWJpdCBpbnN0cnVjdGlvbiBzZXRzIG9yIEFCSXMsIDY0LWJpdCBsaWJyYXJpZXMgZ28gdW5kZXIKKyAgZG5sICRwcmVmaXgvbGliNjQgYW5kIDMyLWJpdCBsaWJyYXJpZXMgZ28gdW5kZXIgJHByZWZpeC9saWIuIFdlIGRldGVybWluZQorICBkbmwgdGhlIGNvbXBpbGVyJ3MgZGVmYXVsdCBtb2RlIGJ5IGxvb2tpbmcgYXQgdGhlIGNvbXBpbGVyJ3MgbGlicmFyeSBzZWFyY2gKKyAgZG5sIHBhdGguIElmIGF0IGxlYXN0IG9uZSBvZiBpdHMgZWxlbWVudHMgZW5kcyBpbiAvbGliNjQgb3IgcG9pbnRzIHRvIGEKKyAgZG5sIGRpcmVjdG9yeSB3aG9zZSBhYnNvbHV0ZSBwYXRobmFtZSBlbmRzIGluIC9saWI2NCwgd2UgYXNzdW1lIGEgNjQtYml0IEFCSS4KKyAgZG5sIE90aGVyd2lzZSB3ZSB1c2UgdGhlIGRlZmF1bHQsIG5hbWVseSAibGliIi4KKyAgZG5sIE9uIFNvbGFyaXMgc3lzdGVtcywgdGhlIGN1cnJlbnQgcHJhY3RpY2UgaXMgdGhhdCBvbiBhIHN5c3RlbSBzdXBwb3J0aW5nCisgIGRubCAzMi1iaXQgYW5kIDY0LWJpdCBpbnN0cnVjdGlvbiBzZXRzIG9yIEFCSXMsIDY0LWJpdCBsaWJyYXJpZXMgZ28gdW5kZXIKKyAgZG5sICRwcmVmaXgvbGliLzY0ICh3aGljaCBpcyBhIHN5bWxpbmsgdG8gZWl0aGVyICRwcmVmaXgvbGliL3NwYXJjdjkgb3IKKyAgZG5sICRwcmVmaXgvbGliL2FtZDY0KSBhbmQgMzItYml0IGxpYnJhcmllcyBnbyB1bmRlciAkcHJlZml4L2xpYi4KKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorICBhY2xfbGliZGlyc3RlbT1saWIKKyAgYWNsX2xpYmRpcnN0ZW0yPQorICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBzb2xhcmlzKikKKyAgICAgIGRubCBTZWUgU29sYXJpcyAxMCBTb2Z0d2FyZSBEZXZlbG9wZXIgQ29sbGVjdGlvbiA+IFNvbGFyaXMgNjQtYml0IERldmVsb3BlcidzIEd1aWRlID4gVGhlIERldmVsb3BtZW50IEVudmlyb25tZW50CisgICAgICBkbmwgPGh0dHA6Ly9kb2NzLnN1bi5jb20vYXBwL2RvY3MvZG9jLzgxNi01MTM4L2Rldi1lbnY/bD1lbiZhPXZpZXc+LgorICAgICAgZG5sICJQb3J0YWJsZSBNYWtlZmlsZXMgc2hvdWxkIHJlZmVyIHRvIGFueSBsaWJyYXJ5IGRpcmVjdG9yaWVzIHVzaW5nIHRoZSA2NCBzeW1ib2xpYyBsaW5rLiIKKyAgICAgIGRubCBCdXQgd2Ugd2FudCB0byByZWNvZ25pemUgdGhlIHNwYXJjdjkgb3IgYW1kNjQgc3ViZGlyZWN0b3J5IGFsc28gaWYgdGhlCisgICAgICBkbmwgc3ltbGluayBpcyBtaXNzaW5nLCBzbyB3ZSBzZXQgYWNsX2xpYmRpcnN0ZW0yIHRvby4KKyAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgNjQtYml0IGhvc3RdLCBbZ2xfY3Zfc29sYXJpc182NGJpdF0sCisgICAgICAgIFtBQ19FR1JFUF9DUFAoW3NpeHR5Zm91ciBiaXRzXSwgWworI2lmZGVmIF9MUDY0CitzaXh0eWZvdXIgYml0cworI2VuZGlmCisgICAgICAgICAgIF0sIFtnbF9jdl9zb2xhcmlzXzY0Yml0PXllc10sIFtnbF9jdl9zb2xhcmlzXzY0Yml0PW5vXSkKKyAgICAgICAgXSkKKyAgICAgIGlmIHRlc3QgJGdsX2N2X3NvbGFyaXNfNjRiaXQgPSB5ZXM7IHRoZW4KKyAgICAgICAgYWNsX2xpYmRpcnN0ZW09bGliLzY0CisgICAgICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKyAgICAgICAgICBzcGFyYyopICAgICAgICBhY2xfbGliZGlyc3RlbTI9bGliL3NwYXJjdjkgOzsKKyAgICAgICAgICBpKjg2IHwgeDg2XzY0KSBhY2xfbGliZGlyc3RlbTI9bGliL2FtZDY0IDs7CisgICAgICAgIGVzYWMKKyAgICAgIGZpCisgICAgICA7OworICAgICopCisgICAgICBzZWFyY2hwYXRoPWAoTENfQUxMPUMgJENDIC1wcmludC1zZWFyY2gtZGlycykgMj4vZGV2L251bGwgfCBzZWQgLW4gLWUgJ3MsXmxpYnJhcmllczogLCxwJyB8IHNlZCAtZSAncyxePSwsJ2AKKyAgICAgIGlmIHRlc3QgLW4gIiRzZWFyY2hwYXRoIjsgdGhlbgorICAgICAgICBhY2xfc2F2ZV9JRlM9IiR7SUZTPSAJfSI7IElGUz0iOiIKKyAgICAgICAgZm9yIHNlYXJjaGRpciBpbiAkc2VhcmNocGF0aDsgZG8KKyAgICAgICAgICBpZiB0ZXN0IC1kICIkc2VhcmNoZGlyIjsgdGhlbgorICAgICAgICAgICAgY2FzZSAiJHNlYXJjaGRpciIgaW4KKyAgICAgICAgICAgICAgKi9saWI2NC8gfCAqL2xpYjY0ICkgYWNsX2xpYmRpcnN0ZW09bGliNjQgOzsKKyAgICAgICAgICAgICAgKi8uLi8gfCAqLy4uICkKKyAgICAgICAgICAgICAgICAjIEJldHRlciBpZ25vcmUgZGlyZWN0b3JpZXMgb2YgdGhpcyBmb3JtLiBUaGV5IGFyZSBtaXNsZWFkaW5nLgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICopIHNlYXJjaGRpcj1gY2QgIiRzZWFyY2hkaXIiICYmIHB3ZGAKKyAgICAgICAgICAgICAgICAgY2FzZSAiJHNlYXJjaGRpciIgaW4KKyAgICAgICAgICAgICAgICAgICAqL2xpYjY0ICkgYWNsX2xpYmRpcnN0ZW09bGliNjQgOzsKKyAgICAgICAgICAgICAgICAgZXNhYyA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICAgICAgSUZTPSIkYWNsX3NhdmVfSUZTIgorICAgICAgZmkKKyAgICAgIDs7CisgIGVzYWMKKyAgdGVzdCAtbiAiJGFjbF9saWJkaXJzdGVtMiIgfHwgYWNsX2xpYmRpcnN0ZW0yPSIkYWNsX2xpYmRpcnN0ZW0iCitdKQpkaWZmIC0tZ2l0IGEvbTQvbGliLXByZWZpeF9nbC5tNCBiL200L2xpYi1wcmVmaXhfZ2wubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4Njg0ZTEuLjAwMDAwMDAKLS0tIGEvbTQvbGliLXByZWZpeF9nbC5tNAorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0jIGxpYi1wcmVmaXgubTQgc2VyaWFsIDUgKGdldHRleHQtMC4xNSkKLWRubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1kbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi1kbmwgRnJvbSBCcnVubyBIYWlibGUuCi0KLWRubCBBQ19MSUJfQVJHX1dJVEggaXMgc3lub255bW91cyB0byBBQ19BUkdfV0lUSCBpbiBhdXRvY29uZi0yLjEzLCBhbmQKLWRubCBzaW1pbGFyIHRvIEFDX0FSR19XSVRIIGluIGF1dG9jb25mIDIuNTIuLi4yLjU3IGV4Y2VwdCB0aGF0IGlzIGRvZXNuJ3QKLWRubCByZXF1aXJlIGV4Y2Vzc2l2ZSBicmFja2V0aW5nLgotaWZkZWYoW0FDX0hFTFBfU1RSSU5HXSwKLVtBQ19ERUZVTihbQUNfTElCX0FSR19XSVRIXSwgW0FDX0FSR19XSVRIKFskMV0sW1skMl1dLFskM10sWyQ0XSldKV0sCi1bQUNfREVGVU4oW0FDX11bTElCX0FSR19XSVRIXSwgW0FDX0FSR19XSVRIKFskMV0sWyQyXSxbJDNdLFskNF0pXSldKQotCi1kbmwgQUNfTElCX1BSRUZJWCBhZGRzIHRvIHRoZSBDUFBGTEFHUyBhbmQgTERGTEFHUyB0aGUgZmxhZ3MgdGhhdCBhcmUgbmVlZGVkCi1kbmwgdG8gYWNjZXNzIHByZXZpb3VzbHkgaW5zdGFsbGVkIGxpYnJhcmllcy4gVGhlIGJhc2ljIGFzc3VtcHRpb24gaXMgdGhhdAotZG5sIGEgdXNlciB3aWxsIHdhbnQgcGFja2FnZXMgdG8gdXNlIG90aGVyIHBhY2thZ2VzIGhlIHByZXZpb3VzbHkgaW5zdGFsbGVkCi1kbmwgd2l0aCB0aGUgc2FtZSAtLXByZWZpeCBvcHRpb24uCi1kbmwgVGhpcyBtYWNybyBpcyBub3QgbmVlZGVkIGlmIG9ubHkgQUNfTElCX0xJTktGTEFHUyBpcyB1c2VkIHRvIGxvY2F0ZQotZG5sIGxpYnJhcmllcywgYnV0IGlzIG90aGVyd2lzZSB2ZXJ5IGNvbnZlbmllbnQuCi1BQ19ERUZVTihbQUNfTElCX1BSRUZJWF0sCi1bCi0gIEFDX0JFRk9SRShbJDBdLCBbQUNfTElCX0xJTktGTEFHU10pCi0gIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQotICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCi0gIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX01VTFRJTElCXSkKLSAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKLSAgZG5sIEJ5IGRlZmF1bHQsIGxvb2sgaW4gJGluY2x1ZGVkaXIgYW5kICRsaWJkaXIuCi0gIHVzZV9hZGRpdGlvbmFsPXllcwotICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWwotICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgotICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKLSAgXSkKLSAgQUNfTElCX0FSR19XSVRIKFtsaWItcHJlZml4XSwKLVsgIC0td2l0aC1saWItcHJlZml4Wz1ESVJdIHNlYXJjaCBmb3IgbGlicmFyaWVzIGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCi0gIC0td2l0aG91dC1saWItcHJlZml4ICAgIGRvbid0IHNlYXJjaCBmb3IgbGlicmFyaWVzIGluIGluY2x1ZGVkaXIgYW5kIGxpYmRpcl0sCi1bCi0gICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYbm8iOyB0aGVuCi0gICAgICB1c2VfYWRkaXRpb25hbD1ubwotICAgIGVsc2UKLSAgICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWCI7IHRoZW4KLSAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKLSAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKLSAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCi0gICAgICAgIF0pCi0gICAgICBlbHNlCi0gICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJHdpdGh2YWwvaW5jbHVkZSIKLSAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9IiR3aXRodmFsLyRhY2xfbGliZGlyc3RlbSIKLSAgICAgIGZpCi0gICAgZmkKLV0pCi0gIGlmIHRlc3QgJHVzZV9hZGRpdGlvbmFsID0geWVzOyB0aGVuCi0gICAgZG5sIFBvdGVudGlhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRDUFBGTEFHUy4KLSAgICBkbmwgQnV0IGRvbid0IGFkZCBpdAotICAgIGRubCAgIDEuIGlmIGl0J3MgdGhlIHN0YW5kYXJkIC91c3IvaW5jbHVkZSwKLSAgICBkbmwgICAyLiBpZiBpdCdzIGFscmVhZHkgcHJlc2VudCBpbiAkQ1BQRkxBR1MsCi0gICAgZG5sICAgMy4gaWYgaXQncyAvdXNyL2xvY2FsL2luY2x1ZGUgYW5kIHdlIGFyZSB1c2luZyBHQ0Mgb24gTGludXgsCi0gICAgZG5sICAgNC4gaWYgaXQgZG9lc24ndCBleGlzdCBhcyBhIGRpcmVjdG9yeS4KLSAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgvdXNyL2luY2x1ZGUiOyB0aGVuCi0gICAgICBoYXZlaXQ9Ci0gICAgICBmb3IgeCBpbiAkQ1BQRkxBR1M7IGRvCi0gICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCi0gICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KLSAgICAgICAgICBoYXZlaXQ9eWVzCi0gICAgICAgICAgYnJlYWsKLSAgICAgICAgZmkKLSAgICAgIGRvbmUKLSAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiA9ICJYL3Vzci9sb2NhbC9pbmNsdWRlIjsgdGhlbgotICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCi0gICAgICAgICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICAgICAgICAgIGxpbnV4KiB8IGdudSogfCBrKmJzZCotZ251KSBoYXZlaXQ9eWVzOzsKLSAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICBmaQotICAgICAgICBmaQotICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgotICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCi0gICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRDUFBGTEFHUy4KLSAgICAgICAgICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSR7Q1BQRkxBR1M6KyB9LUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIgotICAgICAgICAgIGZpCi0gICAgICAgIGZpCi0gICAgICBmaQotICAgIGZpCi0gICAgZG5sIFBvdGVudGlhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExERkxBR1MuCi0gICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKLSAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2xpYiwKLSAgICBkbmwgICAyLiBpZiBpdCdzIGFscmVhZHkgcHJlc2VudCBpbiAkTERGTEFHUywKLSAgICBkbmwgICAzLiBpZiBpdCdzIC91c3IvbG9jYWwvbGliIGFuZCB3ZSBhcmUgdXNpbmcgR0NDIG9uIExpbnV4LAotICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCi0gICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgIT0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KLSAgICAgIGhhdmVpdD0KLSAgICAgIGZvciB4IGluICRMREZMQUdTOyBkbwotICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQotICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KLSAgICAgICAgICBoYXZlaXQ9eWVzCi0gICAgICAgICAgYnJlYWsKLSAgICAgICAgZmkKLSAgICAgIGRvbmUKLSAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiID0gIlgvdXNyL2xvY2FsLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KLSAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgotICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgICAgICAgICBsaW51eCopIGhhdmVpdD15ZXM7OwotICAgICAgICAgICAgZXNhYwotICAgICAgICAgIGZpCi0gICAgICAgIGZpCi0gICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgotICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMREZMQUdTLgotICAgICAgICAgICAgTERGTEFHUz0iJHtMREZMQUdTfSR7TERGTEFHUzorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKLSAgICAgICAgICBmaQotICAgICAgICBmaQotICAgICAgZmkKLSAgICBmaQotICBmaQotXSkKLQotZG5sIEFDX0xJQl9QUkVQQVJFX1BSRUZJWCBjcmVhdGVzIHZhcmlhYmxlcyBhY2xfZmluYWxfcHJlZml4LAotZG5sIGFjbF9maW5hbF9leGVjX3ByZWZpeCwgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIHdoaWNoICRwcmVmaXggYW5kCi1kbmwgJGV4ZWNfcHJlZml4IHdpbGwgZXhwYW5kIGF0IHRoZSBlbmQgb2YgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCi1BQ19ERUZVTihbQUNfTElCX1BSRVBBUkVfUFJFRklYXSwKLVsKLSAgZG5sIFVuZm9ydHVuYXRlbHksIHByZWZpeCBhbmQgZXhlY19wcmVmaXggZ2V0IG9ubHkgZmluYWxseSBkZXRlcm1pbmVkCi0gIGRubCBhdCB0aGUgZW5kIG9mIGNvbmZpZ3VyZS4KLSAgaWYgdGVzdCAiWCRwcmVmaXgiID0gIlhOT05FIjsgdGhlbgotICAgIGFjbF9maW5hbF9wcmVmaXg9IiRhY19kZWZhdWx0X3ByZWZpeCIKLSAgZWxzZQotICAgIGFjbF9maW5hbF9wcmVmaXg9IiRwcmVmaXgiCi0gIGZpCi0gIGlmIHRlc3QgIlgkZXhlY19wcmVmaXgiID0gIlhOT05FIjsgdGhlbgotICAgIGFjbF9maW5hbF9leGVjX3ByZWZpeD0nJHtwcmVmaXh9JwotICBlbHNlCi0gICAgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCi0gIGZpCi0gIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKLSAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKLSAgZXZhbCBhY2xfZmluYWxfZXhlY19wcmVmaXg9XCIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4XCIKLSAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgotXSkKLQotZG5sIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbc3RhdGVtZW50XSkgZXZhbHVhdGVzIHN0YXRlbWVudCwgd2l0aCB0aGUKLWRubCB2YXJpYWJsZXMgcHJlZml4IGFuZCBleGVjX3ByZWZpeCBib3VuZCB0byB0aGUgdmFsdWVzIHRoZXkgd2lsbCBoYXZlCi1kbmwgYXQgdGhlIGVuZCBvZiB0aGUgY29uZmlndXJlIHNjcmlwdC4KLUFDX0RFRlVOKFtBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVhdLAotWwotICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCi0gIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCi0gIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgotICAkMQotICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgotICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCi1dKQotCi1kbmwgQUNfTElCX1BSRVBBUkVfTVVMVElMSUIgY3JlYXRlcyBhIHZhcmlhYmxlIGFjbF9saWJkaXJzdGVtLCBjb250YWluaW5nCi1kbmwgdGhlIGJhc2VuYW1lIG9mIHRoZSBsaWJkaXIsIGVpdGhlciAibGliIiBvciAibGliNjQiLgotQUNfREVGVU4oW0FDX0xJQl9QUkVQQVJFX01VTFRJTElCXSwKLVsKLSAgZG5sIFRoZXJlIGlzIG5vIGZvcm1hbCBzdGFuZGFyZCByZWdhcmRpbmcgbGliIGFuZCBsaWI2NC4gVGhlIGN1cnJlbnQKLSAgZG5sIHByYWN0aWNlIGlzIHRoYXQgb24gYSBzeXN0ZW0gc3VwcG9ydGluZyAzMi1iaXQgYW5kIDY0LWJpdCBpbnN0cnVjdGlvbgotICBkbmwgc2V0cyBvciBBQklzLCA2NC1iaXQgbGlicmFyaWVzIGdvIHVuZGVyICRwcmVmaXgvbGliNjQgYW5kIDMyLWJpdAotICBkbmwgbGlicmFyaWVzIGdvIHVuZGVyICRwcmVmaXgvbGliLiBXZSBkZXRlcm1pbmUgdGhlIGNvbXBpbGVyJ3MgZGVmYXVsdAotICBkbmwgbW9kZSBieSBsb29raW5nIGF0IHRoZSBjb21waWxlcidzIGxpYnJhcnkgc2VhcmNoIHBhdGguIElmIGF0IGxlYXN0Ci0gIGRubCBvZiBpdHMgZWxlbWVudHMgZW5kcyBpbiAvbGliNjQgb3IgcG9pbnRzIHRvIGEgZGlyZWN0b3J5IHdob3NlIGFic29sdXRlCi0gIGRubCBwYXRobmFtZSBlbmRzIGluIC9saWI2NCwgd2UgYXNzdW1lIGEgNjQtYml0IEFCSS4gT3RoZXJ3aXNlIHdlIHVzZSB0aGUKLSAgZG5sIGRlZmF1bHQsIG5hbWVseSAibGliIi4KLSAgYWNsX2xpYmRpcnN0ZW09bGliCi0gIHNlYXJjaHBhdGg9YChMQ19BTEw9QyAkQ0MgLXByaW50LXNlYXJjaC1kaXJzKSAyPi9kZXYvbnVsbCB8IHNlZCAtbiAtZSAncyxebGlicmFyaWVzOiAsLHAnIHwgc2VkIC1lICdzLF49LCwnYAotICBpZiB0ZXN0IC1uICIkc2VhcmNocGF0aCI7IHRoZW4KLSAgICBhY2xfc2F2ZV9JRlM9IiR7SUZTPSAJfSI7IElGUz0iOiIKLSAgICBmb3Igc2VhcmNoZGlyIGluICRzZWFyY2hwYXRoOyBkbwotICAgICAgaWYgdGVzdCAtZCAiJHNlYXJjaGRpciI7IHRoZW4KLSAgICAgICAgY2FzZSAiJHNlYXJjaGRpciIgaW4KLSAgICAgICAgICAqL2xpYjY0LyB8ICovbGliNjQgKSBhY2xfbGliZGlyc3RlbT1saWI2NCA7OwotICAgICAgICAgICopIHNlYXJjaGRpcj1gY2QgIiRzZWFyY2hkaXIiICYmIHB3ZGAKLSAgICAgICAgICAgICBjYXNlICIkc2VhcmNoZGlyIiBpbgotICAgICAgICAgICAgICAgKi9saWI2NCApIGFjbF9saWJkaXJzdGVtPWxpYjY0IDs7Ci0gICAgICAgICAgICAgZXNhYyA7OwotICAgICAgICBlc2FjCi0gICAgICBmaQotICAgIGRvbmUKLSAgICBJRlM9IiRhY2xfc2F2ZV9JRlMiCi0gIGZpCi1dKQpkaWZmIC0tZ2l0IGEvbTQvbGlidW5pc3RyaW5nLWJhc2UubTQgYi9tNC9saWJ1bmlzdHJpbmctYmFzZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTFjNDJiCi0tLSAvZGV2L251bGwKKysrIGIvbTQvbGlidW5pc3RyaW5nLWJhc2UubTQKQEAgLTAsMCArMSwxNDEgQEAKKyMgbGlidW5pc3RyaW5nLWJhc2UubTQgc2VyaWFsIDUKK2RubCBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgRnJvbSBQYW9sbyBCb256aW5pIGFuZCBCcnVubyBIYWlibGUuCisKK2RubCBnbF9MSUJVTklTVFJJTkdfTU9EVUxFKFtWRVJTSU9OXSwgW01vZHVsZV0pCitkbmwgRGVjbGFyZXMgdGhhdCB0aGUgc291cmNlIGZpbGVzIG9mIE1vZHVsZSBzaG91bGQgYmUgY29tcGlsZWQsIHVubGVzcyB3ZQorZG5sIGFyZSBsaW5raW5nIHdpdGggbGlidW5pc3RyaW5nIGFuZCBpdHMgdmVyc2lvbiBpcyA+PSB0aGUgZ2l2ZW4gVkVSU0lPTi4KK2RubCBEZWZpbmVzIGFuIGF1dG9tYWtlIGNvbmRpdGlvbmFsIExJQlVOSVNUUklOR19DT01QSUxFXyRNT0RVTEUgdGhhdCBpcworZG5sIHRydWUgaWYgdGhlIHNvdXJjZSBmaWxlcyBvZiBNb2R1bGUgc2hvdWxkIGJlIGNvbXBpbGVkLgorZG5sIFRoaXMgbWFjcm8gaXMgdG8gYmUgdXNlZCBmb3IgcHVibGljIGxpYnVuaXN0cmluZyBBUEksIG5vdCBmb3IKK2RubCB1bmRvY3VtZW50ZWQgQVBJLgorZG5sCitkbmwgWW91IGhhdmUgdG8gYnVtcCB0aGUgVkVSU0lPTiBhcmd1bWVudCB0byB0aGUgbmV4dCBwcm9qZWN0ZWQgdmVyc2lvbgorZG5sIG51bWJlciBlYWNoIHRpbWUgeW91IG1ha2UgYSBjaGFuZ2UgdGhhdCBhZmZlY3RzIHRoZSBiZWhhdmlvdXIgb2YgdGhlCitkbmwgZnVuY3Rpb25zIGRlZmluZWQgaW4gTW9kdWxlIChldmVuIGlmIHRoZSBzb3VyY2VzIG9mIE1vZHVsZSBpdHNlbGYgZG8gbm90CitkbmwgY2hhbmdlKS4KKworQUNfREVGVU4oW2dsX0xJQlVOSVNUUklOR19NT0RVTEVdLAorWworICBBQ19SRVFVSVJFKFtnbF9MSUJVTklTVFJJTkdfTElCX1BSRVBBUkVdKQorICBkbmwgVXNlIHRoZSB2YXJpYWJsZXMgSEFWRV9MSUJVTklTVFJJTkcsIExJQlVOSVNUUklOR19WRVJTSU9OIGZyb20KKyAgZG5sIGdsX0xJQlVOSVNUUklOR19DT1JFIGlmIHRoYXQgbWFjcm8gaGFzIGJlZW4gcnVuLgorICBBTV9DT05ESVRJT05BTChBU19UUl9DUFAoW0xJQlVOSVNUUklOR19DT01QSUxFXyQyXSksCisgICAgW2dsX0xJQlVOSVNUUklOR19WRVJTSU9OX0NNUChbJDFdKV0pCitdKQorCitkbmwgZ2xfTElCVU5JU1RSSU5HX0xJQkhFQURFUihbVkVSU0lPTl0sIFtIZWFkZXJGaWxlXSkKK2RubCBEZWNsYXJlcyB0aGF0IEhlYWRlckZpbGUgc2hvdWxkIGJlIGNyZWF0ZWQsIHVubGVzcyB3ZSBhcmUgbGlua2luZworZG5sIHdpdGggbGlidW5pc3RyaW5nIGFuZCBpdHMgdmVyc2lvbiBpcyA+PSB0aGUgZ2l2ZW4gVkVSU0lPTi4KK2RubCBIZWFkZXJGaWxlIHNob3VsZCBiZSByZWxhdGl2ZSB0byB0aGUgbGliIGRpcmVjdG9yeSBhbmQgZW5kIGluICcuaCcuCitkbmwgUHJlcGFyZXMgZm9yIHN1YnN0aXR1dGluZyBMSUJVTklTVFJJTkdfSEVBREVSRklMRSAodG8gSGVhZGVyRmlsZSBvciBlbXB0eSkuCitkbmwKK2RubCBXaGVuIHdlIGFyZSBsaW5raW5nIHdpdGggdGhlIGFscmVhZHkgaW5zdGFsbGVkIGxpYnVuaXN0cmluZyBhbmQgaXRzIHZlcnNpb24KK2RubCBpcyA8IFZFUlNJT04sIHdlIGNyZWF0ZSBIZWFkZXJGaWxlIGhlcmUsIGJlY2F1c2Ugd2UgbWF5IGNvbXBpbGUgZnVuY3Rpb25zCitkbmwgKHZpYSBnbF9MSUJVTklTVFJJTkdfTU9EVUxFIGFib3ZlKSB0aGF0IGFyZSBub3QgY29udGFpbmVkIGluIHRoZSBpbnN0YWxsZWQKK2RubCB2ZXJzaW9uLgorZG5sIFdoZW4gd2UgYXJlIGxpbmtpbmcgd2l0aCB0aGUgYWxyZWFkeSBpbnN0YWxsZWQgbGlidW5pc3RyaW5nIGFuZCBpdHMgdmVyc2lvbgorZG5sIGlzID4gVkVSU0lPTiwgd2UgZG9uJ3QgY3JlYXRlIEhlYWRlckZpbGUgaGVyZTogaXQgY291bGQgY2F1c2UgY29tcGlsYXRpb24KK2RubCBlcnJvcnMgaW4gb3RoZXIgbGlidW5pc3RyaW5nIGhlYWRlciBmaWxlcyBpZiBzb21lIHR5cGVzIGFyZSBtaXNzaW5nLgorZG5sCitkbmwgWW91IGhhdmUgdG8gYnVtcCB0aGUgVkVSU0lPTiBhcmd1bWVudCB0byB0aGUgbmV4dCBwcm9qZWN0ZWQgdmVyc2lvbgorZG5sIG51bWJlciBlYWNoIHRpbWUgeW91IG1ha2UgYSBub24tY29tbWVudCBjaGFuZ2UgdG8gdGhlIEhlYWRlckZpbGUuCisKK0FDX0RFRlVOKFtnbF9MSUJVTklTVFJJTkdfTElCSEVBREVSXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfTElCVU5JU1RSSU5HX0xJQl9QUkVQQVJFXSkKKyAgZG5sIFVzZSB0aGUgdmFyaWFibGVzIEhBVkVfTElCVU5JU1RSSU5HLCBMSUJVTklTVFJJTkdfVkVSU0lPTiBmcm9tCisgIGRubCBnbF9MSUJVTklTVFJJTkdfQ09SRSBpZiB0aGF0IG1hY3JvIGhhcyBiZWVuIHJ1bi4KKyAgaWYgZ2xfTElCVU5JU1RSSU5HX1ZFUlNJT05fQ01QKFskMV0pOyB0aGVuCisgICAgTElCVU5JU1RSSU5HX1tdQVNfVFJfQ1BQKFskMl0pPSckMicKKyAgZWxzZQorICAgIExJQlVOSVNUUklOR19bXUFTX1RSX0NQUChbJDJdKT0KKyAgZmkKKyAgQUNfU1VCU1QoW0xJQlVOSVNUUklOR19dQVNfVFJfQ1BQKFskMl0pKQorXSkKKworZG5sIE1pc2NlbGxhbmVvdXMgcHJlcGFyYXRpb25zL2luaXRpYWxpemF0aW9ucy4KKworQUNfREVGVU4oW2dsX0xJQlVOSVNUUklOR19MSUJfUFJFUEFSRV0sCitbCisgIGRubCBFbnN1cmUgdGhhdCBIQVZFX0xJQlVOSVNUUklORyBpcyBmdWxseSBkZXRlcm1pbmVkIGF0IHRoaXMgcG9pbnQuCisgIG00X2lmZGVmKFtnbF9MSUJVTklTVFJJTkddLCBbQUNfUkVRVUlSRShbZ2xfTElCVU5JU1RSSU5HXSldKQorCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfQVdLXSkKKworZG5sIFNlZCBleHByZXNzaW9ucyB0byBleHRyYWN0IHRoZSBwYXJ0cyBvZiBhIHZlcnNpb24gbnVtYmVyLgorY2hhbmdlcXVvdGUoLCkKK2dsX2xpYnVuaXN0cmluZ19zZWRfZXh0cmFjdF9tYWpvcj0nL15bMC05XS97cy9eXChbMC05XSpcKS4qL1wxL3A7cTt9CitpXAorMAorcQorJworZ2xfbGlidW5pc3RyaW5nX3NlZF9leHRyYWN0X21pbm9yPScvXlswLTldWzAtOV0qWy5dWzAtOV0ve3MvXlswLTldKlsuXVwoWzAtOV0qXCkuKi9cMS9wO3E7fQoraVwKKzAKK3EKKycKK2dsX2xpYnVuaXN0cmluZ19zZWRfZXh0cmFjdF9zdWJtaW5vcj0nL15bMC05XVswLTldKlsuXVswLTldWzAtOV0qWy5dWzAtOV0ve3MvXlswLTldKlsuXVswLTldKlsuXVwoWzAtOV0qXCkuKi9cMS9wO3E7fQoraVwKKzAKK3EKKycKK2NoYW5nZXF1b3RlKFssXSkKKworICBpZiB0ZXN0ICIkSEFWRV9MSUJVTklTVFJJTkciID0geWVzOyB0aGVuCisgICAgTElCVU5JU1RSSU5HX1ZFUlNJT05fTUFKT1I9YGVjaG8gIiRMSUJVTklTVFJJTkdfVkVSU0lPTiIgfCBzZWQgLW4gLWUgIiRnbF9saWJ1bmlzdHJpbmdfc2VkX2V4dHJhY3RfbWFqb3IiYAorICAgIExJQlVOSVNUUklOR19WRVJTSU9OX01JTk9SPWBlY2hvICIkTElCVU5JU1RSSU5HX1ZFUlNJT04iIHwgc2VkIC1uIC1lICIkZ2xfbGlidW5pc3RyaW5nX3NlZF9leHRyYWN0X21pbm9yImAKKyAgICBMSUJVTklTVFJJTkdfVkVSU0lPTl9TVUJNSU5PUj1gZWNobyAiJExJQlVOSVNUUklOR19WRVJTSU9OIiB8IHNlZCAtbiAtZSAiJGdsX2xpYnVuaXN0cmluZ19zZWRfZXh0cmFjdF9zdWJtaW5vciJgCisgIGZpCitdKQorCitkbmwgZ2xfTElCVU5JU1RSSU5HX1ZFUlNJT05fQ01QKFtWRVJTSU9OXSkKK2RubCBFeHBhbmRzIHRvIGEgc2hlbGwgc3RhdGVtZW50IHRoYXQgZXZhbHVhdGVzIHRvIHRydWUgaWYgTElCVU5JU1RSSU5HX1ZFUlNJT04KK2RubCBpcyBsZXNzIHRoYW4gdGhlIFZFUlNJT04gYXJndW1lbnQuCitBQ19ERUZVTihbZ2xfTElCVU5JU1RSSU5HX1ZFUlNJT05fQ01QXSwKK1sgeyB0ZXN0ICIkSEFWRV9MSUJVTklTVFJJTkciICE9IHllcyBcCisgICAgfHwgeworICAgICAgICAgZG5sIEFTX0xJVEVSQUxfSUYgZXhpc3RzIGFuZCB3b3JrcyBmaW5lIHNpbmNlIGF1dG9jb25mLTIuNTkgYXQgbGVhc3QuCisgICAgICAgICBBU19MSVRFUkFMX0lGKFskMV0sCisgICAgICAgICAgIFtkbmwgVGhpcyBpcyB0aGUgb3B0aW1pemVkIHZhcmlhbnQsIHRoYXQgYXNzdW1lcyB0aGUgYXJndW1lbnQgaXMgYSBsaXRlcmFsOgorICAgICAgICAgICAgbTRfcHVzaGRlZihbcmVxdWVzdGVkX3ZlcnNpb25fbWFqb3JdLAorICAgICAgICAgICAgICBbZ2xfTElCVU5JU1RSSU5HX0FSR19PUl9aRVJPKG00X2JwYXRzdWJzdChbJDFdLCBbXlwoWzAtOV0qXCkuKl0sIFtcMV0pLCBbXSldKQorICAgICAgICAgICAgbTRfcHVzaGRlZihbcmVxdWVzdGVkX3ZlcnNpb25fbWlub3JdLAorICAgICAgICAgICAgICBbZ2xfTElCVU5JU1RSSU5HX0FSR19PUl9aRVJPKG00X2JwYXRzdWJzdChbJDFdLCBbXlswLTldKlsuXVwoWzAtOV0qXCkuKl0sIFtcMV0pLCBbJDFdKV0pCisgICAgICAgICAgICBtNF9wdXNoZGVmKFtyZXF1ZXN0ZWRfdmVyc2lvbl9zdWJtaW5vcl0sCisgICAgICAgICAgICAgIFtnbF9MSUJVTklTVFJJTkdfQVJHX09SX1pFUk8obTRfYnBhdHN1YnN0KFskMV0sIFteWzAtOV0qWy5dWzAtOV0qWy5dXChbMC05XSpcKS4qXSwgW1wxXSksIFskMV0pXSkKKyAgICAgICAgICAgIHRlc3QgJExJQlVOSVNUUklOR19WRVJTSU9OX01BSk9SIC1sdCByZXF1ZXN0ZWRfdmVyc2lvbl9tYWpvciBcCisgICAgICAgICAgICB8fCB7IHRlc3QgJExJQlVOSVNUUklOR19WRVJTSU9OX01BSk9SIC1lcSByZXF1ZXN0ZWRfdmVyc2lvbl9tYWpvciBcCisgICAgICAgICAgICAgICAgICYmIHsgdGVzdCAkTElCVU5JU1RSSU5HX1ZFUlNJT05fTUlOT1IgLWx0IHJlcXVlc3RlZF92ZXJzaW9uX21pbm9yIFwKKyAgICAgICAgICAgICAgICAgICAgICB8fCB7IHRlc3QgJExJQlVOSVNUUklOR19WRVJTSU9OX01JTk9SIC1lcSByZXF1ZXN0ZWRfdmVyc2lvbl9taW5vciBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB0ZXN0ICRMSUJVTklTVFJJTkdfVkVSU0lPTl9TVUJNSU5PUiAtbHQgcmVxdWVzdGVkX3ZlcnNpb25fc3VibWlub3IKKyAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG00X3BvcGRlZihbcmVxdWVzdGVkX3ZlcnNpb25fc3VibWlub3JdKQorICAgICAgICAgICAgbTRfcG9wZGVmKFtyZXF1ZXN0ZWRfdmVyc2lvbl9taW5vcl0pCisgICAgICAgICAgICBtNF9wb3BkZWYoW3JlcXVlc3RlZF92ZXJzaW9uX21ham9yXSkKKyAgICAgICAgICAgXSwKKyAgICAgICAgICAgW2RubCBUaGlzIGlzIHRoZSB1bm9wdGltaXplZCB2YXJpYW50OgorICAgICAgICAgICAgcmVxdWVzdGVkX3ZlcnNpb25fbWFqb3I9YGVjaG8gJyQxJyB8IHNlZCAtbiAtZSAiJGdsX2xpYnVuaXN0cmluZ19zZWRfZXh0cmFjdF9tYWpvciJgCisgICAgICAgICAgICByZXF1ZXN0ZWRfdmVyc2lvbl9taW5vcj1gZWNobyAnJDEnIHwgc2VkIC1uIC1lICIkZ2xfbGlidW5pc3RyaW5nX3NlZF9leHRyYWN0X21pbm9yImAKKyAgICAgICAgICAgIHJlcXVlc3RlZF92ZXJzaW9uX3N1Ym1pbm9yPWBlY2hvICckMScgfCBzZWQgLW4gLWUgIiRnbF9saWJ1bmlzdHJpbmdfc2VkX2V4dHJhY3Rfc3VibWlub3IiYAorICAgICAgICAgICAgdGVzdCAkTElCVU5JU1RSSU5HX1ZFUlNJT05fTUFKT1IgLWx0ICRyZXF1ZXN0ZWRfdmVyc2lvbl9tYWpvciBcCisgICAgICAgICAgICB8fCB7IHRlc3QgJExJQlVOSVNUUklOR19WRVJTSU9OX01BSk9SIC1lcSAkcmVxdWVzdGVkX3ZlcnNpb25fbWFqb3IgXAorICAgICAgICAgICAgICAgICAmJiB7IHRlc3QgJExJQlVOSVNUUklOR19WRVJTSU9OX01JTk9SIC1sdCAkcmVxdWVzdGVkX3ZlcnNpb25fbWlub3IgXAorICAgICAgICAgICAgICAgICAgICAgIHx8IHsgdGVzdCAkTElCVU5JU1RSSU5HX1ZFUlNJT05fTUlOT1IgLWVxICRyZXF1ZXN0ZWRfdmVyc2lvbl9taW5vciBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB0ZXN0ICRMSUJVTklTVFJJTkdfVkVSU0lPTl9TVUJNSU5PUiAtbHQgJHJlcXVlc3RlZF92ZXJzaW9uX3N1Ym1pbm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgIF0pCisgICAgICAgfQorICB9XSkKKworZG5sIGdsX0xJQlVOSVNUUklOR19BUkdfT1JfWkVSTyhbQVJHXSwgW09SSUddKSBleHBhbmRzIHRvIEFSRyBpZiBpdCBpcyBub3QgdGhlCitkbmwgc2FtZSBhcyBPUklHLCBvdGhlcndpc2UgdG8gMC4KK200X2RlZmluZShbZ2xfTElCVU5JU1RSSU5HX0FSR19PUl9aRVJPXSwgW200X2lmKFskMV0sIFskMl0sIFswXSwgWyQxXSldKQpkaWZmIC0tZ2l0IGEvbTQvbG9jYWxjaGFyc2V0Lm00IGIvbTQvbG9jYWxjaGFyc2V0Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMTAzNzkKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9sb2NhbGNoYXJzZXQubTQKQEAgLTAsMCArMSwxNyBAQAorIyBsb2NhbGNoYXJzZXQubTQgc2VyaWFsIDcKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQsIDIwMDYsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ2xfTE9DQUxDSEFSU0VUXSwKK1sKKyAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL2xvY2FsY2hhcnNldC5jLgorICBBQ19SRVFVSVJFKFtBTV9MQU5HSU5GT19DT0RFU0VUXSkKKyAgQUNfUkVRVUlSRShbZ2xfRkNOVExfT19GTEFHU10pCisgIEFDX0NIRUNLX0RFQ0xTX09OQ0UoW2dldGNfdW5sb2NrZWRdKQorCisgIGRubCBQcmVyZXF1aXNpdGVzIG9mIHRoZSBsaWIvTWFrZWZpbGUuYW0gc25pcHBldC4KKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorICBBQ19SRVFVSVJFKFtnbF9HTElCQzIxXSkKK10pCmRpZmYgLS1naXQgYS9tNC9sb2NhbGUtZnIubTQgYi9tNC9sb2NhbGUtZnIubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFiNjg0NwotLS0gL2Rldi9udWxsCisrKyBiL200L2xvY2FsZS1mci5tNApAQCAtMCwwICsxLDI1MCBAQAorIyBsb2NhbGUtZnIubTQgc2VyaWFsIDE3CitkbmwgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorCitkbmwgRGV0ZXJtaW5lIHRoZSBuYW1lIG9mIGEgZnJlbmNoIGxvY2FsZSB3aXRoIHRyYWRpdGlvbmFsIGVuY29kaW5nLgorQUNfREVGVU4oW2d0X0xPQ0FMRV9GUl0sCitbCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKyAgQUNfUkVRVUlSRShbQU1fTEFOR0lORk9fQ09ERVNFVF0pCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgYSB0cmFkaXRpb25hbCBmcmVuY2ggbG9jYWxlXSwgW2d0X2N2X2xvY2FsZV9mcl0sIFsKKyAgICBBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1NPVVJDRShbCitjaGFuZ2VxdW90ZSgsKWRubAorI2luY2x1ZGUgPGxvY2FsZS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKyMgaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorc3RydWN0IHRtIHQ7CitjaGFyIGJ1ZlsxNl07CitpbnQgbWFpbiAoKSB7CisgIC8qIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGxvY2FsZSBuYW1lIGlzIHJlY29nbml6ZWQgYnkgdGhlIHN5c3RlbS4gICovCisjaWYgKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhZGVmaW5lZCBfX0NZR1dJTl9fCisgIC8qIE9uIG5hdGl2ZSBXaW5kb3dzLCBzZXRsb2NhbGUoY2F0ZWdvcnksICIiKSBsb29rcyBhdCB0aGUgc3lzdGVtIHNldHRpbmdzLAorICAgICBub3QgYXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIEFsc28sIHdoZW4gYW4gZW5jb2Rpbmcgc3VmZml4IHN1Y2gKKyAgICAgYXMgIi42NTAwMSIgb3IgIi41NDkzNiIgaXMgc3BlY2lmaWVkLCBpdCBzdWNjZWVkcyBidXQgc2V0cyB0aGUgTENfQ1RZUEUKKyAgICAgY2F0ZWdvcnkgb2YgdGhlIGxvY2FsZSB0byAiQyIuICAqLworICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsIGdldGVudiAoIkxDX0FMTCIpKSA9PSBOVUxMCisgICAgICB8fCBzdHJjbXAgKHNldGxvY2FsZSAoTENfQ1RZUEUsIE5VTEwpLCAiQyIpID09IDApCisgICAgcmV0dXJuIDE7CisjZWxzZQorICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICIiKSA9PSBOVUxMKSByZXR1cm4gMTsKKyNlbmRpZgorICAvKiBDaGVjayB3aGV0aGVyIG5sX2xhbmdpbmZvKENPREVTRVQpIGlzIG5vbmVtcHR5IGFuZCBub3QgIkFTQ0lJIiBvciAiNjQ2Ii4KKyAgICAgT24gTWFjIE9TIFggMTAuMy41IChEYXJ3aW4gNy41KSBpbiB0aGUgZnJfRlIgbG9jYWxlLCBubF9sYW5naW5mbyhDT0RFU0VUKQorICAgICBpcyBlbXB0eSwgYW5kIHRoZSBiZWhhdmlvdXIgb2YgVGNsIDguNCBpbiB0aGlzIGxvY2FsZSBpcyBub3QgdXNlZnVsLgorICAgICBPbiBPcGVuQlNEIDQuMCwgd2hlbiBhbiB1bnN1cHBvcnRlZCBsb2NhbGUgaXMgc3BlY2lmaWVkLCBzZXRsb2NhbGUoKQorICAgICBzdWNjZWVkcyBidXQgdGhlbiBubF9sYW5naW5mbyhDT0RFU0VUKSBpcyAiNjQ2Ii4gSW4gdGhpcyBzaXR1YXRpb24sCisgICAgIHNvbWUgdW5pdCB0ZXN0cyBmYWlsLgorICAgICBPbiBNaXJCU0QgMTAsIHdoZW4gYW4gdW5zdXBwb3J0ZWQgbG9jYWxlIGlzIHNwZWNpZmllZCwgc2V0bG9jYWxlKCkKKyAgICAgc3VjY2VlZHMgYnV0IHRoZW4gbmxfbGFuZ2luZm8oQ09ERVNFVCkgaXMgIlVURi04Ii4gICovCisjaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisgIHsKKyAgICBjb25zdCBjaGFyICpjcyA9IG5sX2xhbmdpbmZvIChDT0RFU0VUKTsKKyAgICBpZiAoY3NbMF0gPT0gJ1wwJyB8fCBzdHJjbXAgKGNzLCAiQVNDSUkiKSA9PSAwIHx8IHN0cmNtcCAoY3MsICI2NDYiKSA9PSAwCisgICAgICAgIHx8IHN0cmNtcCAoY3MsICJVVEYtOCIpID09IDApCisgICAgICByZXR1cm4gMTsKKyAgfQorI2VuZGlmCisjaWZkZWYgX19DWUdXSU5fXworICAvKiBPbiBDeWd3aW4sIGF2b2lkIGxvY2FsZSBuYW1lcyB3aXRob3V0IGVuY29kaW5nIHN1ZmZpeCwgYmVjYXVzZSB0aGUKKyAgICAgbG9jYWxlX2NoYXJzZXQoKSBmdW5jdGlvbiByZWxpZXMgb24gdGhlIGVuY29kaW5nIHN1ZmZpeC4gIE5vdGUgdGhhdAorICAgICBMQ19BTEwgaXMgc2V0IG9uIHRoZSBjb21tYW5kIGxpbmUuICAqLworICBpZiAoc3RyY2hyIChnZXRlbnYgKCJMQ19BTEwiKSwgJy4nKSA9PSBOVUxMKSByZXR1cm4gMTsKKyNlbmRpZgorICAvKiBDaGVjayB3aGV0aGVyIGluIHRoZSBhYmJyZXZpYXRpb24gb2YgdGhlIHNlY29uZCBtb250aCwgdGhlIHNlY29uZAorICAgICBjaGFyYWN0ZXIgKHNob3VsZCBiZSBVKzAwRTk6IExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEUpIGlzIG9ubHkKKyAgICAgb25lIGJ5dGUgbG9uZy4gVGhpcyBleGNsdWRlcyB0aGUgVVRGLTggZW5jb2RpbmcuICAqLworICB0LnRtX3llYXIgPSAxOTc1IC0gMTkwMDsgdC50bV9tb24gPSAyIC0gMTsgdC50bV9tZGF5ID0gNDsKKyAgaWYgKHN0cmZ0aW1lIChidWYsIHNpemVvZiAoYnVmKSwgIiViIiwgJnQpIDwgMyB8fCBidWZbMl0gIT0gJ3YnKSByZXR1cm4gMTsKKyNpZiAhZGVmaW5lZCBfX0JJT05JQ19fIC8qIEJpb25pYyBsaWJjJ3MgJ3N0cnVjdCBsY29udicgaXMganVzdCBhIGR1bW15LiAgKi8KKyAgLyogQ2hlY2sgd2hldGhlciB0aGUgZGVjaW1hbCBzZXBhcmF0b3IgaXMgYSBjb21tYS4KKyAgICAgT24gTmV0QlNEIDMuMCBpbiB0aGUgZnJfRlIuSVNPODg1OS0xIGxvY2FsZSwgbG9jYWxlY29udigpLT5kZWNpbWFsX3BvaW50CisgICAgIGFyZSBubF9sYW5naW5mbyhSQURJWENIQVIpIGFyZSBib3RoICIuIi4gICovCisgIGlmIChsb2NhbGVjb252ICgpIC0+ZGVjaW1hbF9wb2ludFswXSAhPSAnLCcpIHJldHVybiAxOworI2VuZGlmCisgIHJldHVybiAwOworfQorY2hhbmdlcXVvdGUoWyxdKWRubAorICAgICAgXSldKQorICAgIGlmIEFDX1RSWV9FVkFMKFthY19saW5rXSkgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAjIEhhbmRsZSBuYXRpdmUgV2luZG93cyBzcGVjaWFsbHksIGJlY2F1c2UgdGhlcmUgc2V0bG9jYWxlKCkgaW50ZXJwcmV0cworICAgICAgICAjICJhciIgYXMgIkFyYWJpYyIgb3IgIkFyYWJpY19TYXVkaSBBcmFiaWEuMTI1NiIsCisgICAgICAgICMgImZyIiBvciAiZnJhIiBhcyAiRnJlbmNoIiBvciAiRnJlbmNoX0ZyYW5jZS4xMjUyIiwKKyAgICAgICAgIyAiZ2UiKCEpIG9yICJkZXUiKCEpIGFzICJHZXJtYW4iIG9yICJHZXJtYW5fR2VybWFueS4xMjUyIiwKKyAgICAgICAgIyAiamEiIGFzICJKYXBhbmVzZSIgb3IgIkphcGFuZXNlX0phcGFuLjkzMiIsCisgICAgICAgICMgYW5kIHNpbWlsYXIuCisgICAgICAgIG1pbmd3KikKKyAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBuYXRpdmUgV2luZG93cyBsb2NhbGUgbmFtZS4KKyAgICAgICAgICBpZiAoTENfQUxMPUZyZW5jaF9GcmFuY2UuMTI1MiBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcj1GcmVuY2hfRnJhbmNlLjEyNTIKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAjIE5vbmUgZm91bmQuCisgICAgICAgICAgICBndF9jdl9sb2NhbGVfZnI9bm9uZQorICAgICAgICAgIGZpCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAjIFNldHRpbmcgTENfQUxMIGlzIG5vdCBlbm91Z2guIE5lZWQgdG8gc2V0IExDX1RJTUUgdG8gZW1wdHksIGJlY2F1c2UKKyAgICAgICAgICAjIG90aGVyd2lzZSBvbiBNYWMgT1MgWCAxMC4zLjUgdGhlIExDX1RJTUU9QyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlCisgICAgICAgICAgIyBjb25maWd1cmUgc2NyaXB0IHdvdWxkIG92ZXJyaWRlIHRoZSBMQ19BTEwgc2V0dGluZy4gTGlrZXdpc2UgZm9yCisgICAgICAgICAgIyBMQ19DVFlQRSwgd2hpY2ggaXMgYWxzbyBzZXQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY29uZmlndXJlIHNjcmlwdC4KKyAgICAgICAgICAjIFRlc3QgZm9yIHRoZSB1c3VhbCBsb2NhbGUgbmFtZS4KKyAgICAgICAgICBpZiAoTENfQUxMPWZyX0ZSIExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyPWZyX0ZSCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgIyBUZXN0IGZvciB0aGUgbG9jYWxlIG5hbWUgd2l0aCBleHBsaWNpdCBlbmNvZGluZyBzdWZmaXguCisgICAgICAgICAgICBpZiAoTENfQUxMPWZyX0ZSLklTTy04ODU5LTEgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcj1mcl9GUi5JU08tODg1OS0xCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICMgVGVzdCBmb3IgdGhlIEFJWCwgT1NGLzEsIEZyZWVCU0QsIE5ldEJTRCwgT3BlbkJTRCBsb2NhbGUgbmFtZS4KKyAgICAgICAgICAgICAgaWYgKExDX0FMTD1mcl9GUi5JU084ODU5LTEgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyPWZyX0ZSLklTTzg4NTktMQorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgIyBUZXN0IGZvciB0aGUgSFAtVVggbG9jYWxlIG5hbWUuCisgICAgICAgICAgICAgICAgaWYgKExDX0FMTD1mcl9GUi5pc284ODU5MSBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcj1mcl9GUi5pc284ODU5MQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICMgVGVzdCBmb3IgdGhlIFNvbGFyaXMgNyBsb2NhbGUgbmFtZS4KKyAgICAgICAgICAgICAgICAgIGlmIChMQ19BTEw9ZnIgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcj1mcgorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAjIE5vbmUgZm91bmQuCisgICAgICAgICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcj1ub25lCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIHJtIC1mciBjb25mdGVzdCoKKyAgXSkKKyAgTE9DQUxFX0ZSPSRndF9jdl9sb2NhbGVfZnIKKyAgQUNfU1VCU1QoW0xPQ0FMRV9GUl0pCitdKQorCitkbmwgRGV0ZXJtaW5lIHRoZSBuYW1lIG9mIGEgZnJlbmNoIGxvY2FsZSB3aXRoIFVURi04IGVuY29kaW5nLgorQUNfREVGVU4oW2d0X0xPQ0FMRV9GUl9VVEY4XSwKK1sKKyAgQUNfUkVRVUlSRShbQU1fTEFOR0lORk9fQ09ERVNFVF0pCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgYSBmcmVuY2ggVW5pY29kZSBsb2NhbGVdLCBbZ3RfY3ZfbG9jYWxlX2ZyX3V0ZjhdLCBbCisgICAgQUNfTEFOR19DT05GVEVTVChbQUNfTEFOR19TT1VSQ0UoWworY2hhbmdlcXVvdGUoLClkbmwKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisjIGluY2x1ZGUgPGxhbmdpbmZvLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KK3N0cnVjdCB0bSB0OworY2hhciBidWZbMTZdOworaW50IG1haW4gKCkgeworICAvKiBPbiBCZU9TIGFuZCBIYWlrdSwgbG9jYWxlcyBhcmUgbm90IGltcGxlbWVudGVkIGluIGxpYmMuICBSYXRoZXIsIGxpYmludGwKKyAgICAgaW1pdGF0ZXMgbG9jYWxlIGRlcGVuZGVudCBiZWhhdmlvdXIgYnkgbG9va2luZyBhdCB0aGUgZW52aXJvbm1lbnQKKyAgICAgdmFyaWFibGVzLCBhbmQgYWxsIGxvY2FsZXMgdXNlIHRoZSBVVEYtOCBlbmNvZGluZy4gICovCisjaWYgIShkZWZpbmVkIF9fQkVPU19fIHx8IGRlZmluZWQgX19IQUlLVV9fKQorICAvKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBsb2NhbGUgbmFtZSBpcyByZWNvZ25pemVkIGJ5IHRoZSBzeXN0ZW0uICAqLworIyBpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICFkZWZpbmVkIF9fQ1lHV0lOX18KKyAgLyogT24gbmF0aXZlIFdpbmRvd3MsIHNldGxvY2FsZShjYXRlZ29yeSwgIiIpIGxvb2tzIGF0IHRoZSBzeXN0ZW0gc2V0dGluZ3MsCisgICAgIG5vdCBhdCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgQWxzbywgd2hlbiBhbiBlbmNvZGluZyBzdWZmaXggc3VjaAorICAgICBhcyAiLjY1MDAxIiBvciAiLjU0OTM2IiBpcyBzcGVjaWZpZWQsIGl0IHN1Y2NlZWRzIGJ1dCBzZXRzIHRoZSBMQ19DVFlQRQorICAgICBjYXRlZ29yeSBvZiB0aGUgbG9jYWxlIHRvICJDIi4gICovCisgIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgZ2V0ZW52ICgiTENfQUxMIikpID09IE5VTEwKKyAgICAgIHx8IHN0cmNtcCAoc2V0bG9jYWxlIChMQ19DVFlQRSwgTlVMTCksICJDIikgPT0gMCkKKyAgICByZXR1cm4gMTsKKyMgZWxzZQorICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICIiKSA9PSBOVUxMKSByZXR1cm4gMTsKKyMgZW5kaWYKKyAgLyogQ2hlY2sgd2hldGhlciBubF9sYW5naW5mbyhDT0RFU0VUKSBpcyBub25lbXB0eSBhbmQgbm90ICJBU0NJSSIgb3IgIjY0NiIuCisgICAgIE9uIE1hYyBPUyBYIDEwLjMuNSAoRGFyd2luIDcuNSkgaW4gdGhlIGZyX0ZSIGxvY2FsZSwgbmxfbGFuZ2luZm8oQ09ERVNFVCkKKyAgICAgaXMgZW1wdHksIGFuZCB0aGUgYmVoYXZpb3VyIG9mIFRjbCA4LjQgaW4gdGhpcyBsb2NhbGUgaXMgbm90IHVzZWZ1bC4KKyAgICAgT24gT3BlbkJTRCA0LjAsIHdoZW4gYW4gdW5zdXBwb3J0ZWQgbG9jYWxlIGlzIHNwZWNpZmllZCwgc2V0bG9jYWxlKCkKKyAgICAgc3VjY2VlZHMgYnV0IHRoZW4gbmxfbGFuZ2luZm8oQ09ERVNFVCkgaXMgIjY0NiIuIEluIHRoaXMgc2l0dWF0aW9uLAorICAgICBzb21lIHVuaXQgdGVzdHMgZmFpbC4gICovCisjIGlmIEhBVkVfTEFOR0lORk9fQ09ERVNFVAorICB7CisgICAgY29uc3QgY2hhciAqY3MgPSBubF9sYW5naW5mbyAoQ09ERVNFVCk7CisgICAgaWYgKGNzWzBdID09ICdcMCcgfHwgc3RyY21wIChjcywgIkFTQ0lJIikgPT0gMCB8fCBzdHJjbXAgKGNzLCAiNjQ2IikgPT0gMCkKKyAgICAgIHJldHVybiAxOworICB9CisjIGVuZGlmCisjIGlmZGVmIF9fQ1lHV0lOX18KKyAgLyogT24gQ3lnd2luLCBhdm9pZCBsb2NhbGUgbmFtZXMgd2l0aG91dCBlbmNvZGluZyBzdWZmaXgsIGJlY2F1c2UgdGhlCisgICAgIGxvY2FsZV9jaGFyc2V0KCkgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBlbmNvZGluZyBzdWZmaXguICBOb3RlIHRoYXQKKyAgICAgTENfQUxMIGlzIHNldCBvbiB0aGUgY29tbWFuZCBsaW5lLiAgKi8KKyAgaWYgKHN0cmNociAoZ2V0ZW52ICgiTENfQUxMIiksICcuJykgPT0gTlVMTCkgcmV0dXJuIDE7CisjIGVuZGlmCisgIC8qIENoZWNrIHdoZXRoZXIgaW4gdGhlIGFiYnJldmlhdGlvbiBvZiB0aGUgc2Vjb25kIG1vbnRoLCB0aGUgc2Vjb25kCisgICAgIGNoYXJhY3RlciAoc2hvdWxkIGJlIFUrMDBFOTogTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURSkgaXMKKyAgICAgdHdvIGJ5dGVzIGxvbmcsIHdpdGggVVRGLTggZW5jb2RpbmcuICAqLworICB0LnRtX3llYXIgPSAxOTc1IC0gMTkwMDsgdC50bV9tb24gPSAyIC0gMTsgdC50bV9tZGF5ID0gNDsKKyAgaWYgKHN0cmZ0aW1lIChidWYsIHNpemVvZiAoYnVmKSwgIiViIiwgJnQpIDwgNAorICAgICAgfHwgYnVmWzFdICE9IChjaGFyKSAweGMzIHx8IGJ1ZlsyXSAhPSAoY2hhcikgMHhhOSB8fCBidWZbM10gIT0gJ3YnKQorICAgIHJldHVybiAxOworI2VuZGlmCisjaWYgIWRlZmluZWQgX19CSU9OSUNfXyAvKiBCaW9uaWMgbGliYydzICdzdHJ1Y3QgbGNvbnYnIGlzIGp1c3QgYSBkdW1teS4gICovCisgIC8qIENoZWNrIHdoZXRoZXIgdGhlIGRlY2ltYWwgc2VwYXJhdG9yIGlzIGEgY29tbWEuCisgICAgIE9uIE5ldEJTRCAzLjAgaW4gdGhlIGZyX0ZSLklTTzg4NTktMSBsb2NhbGUsIGxvY2FsZWNvbnYoKS0+ZGVjaW1hbF9wb2ludAorICAgICBhcmUgbmxfbGFuZ2luZm8oUkFESVhDSEFSKSBhcmUgYm90aCAiLiIuICAqLworICBpZiAobG9jYWxlY29udiAoKSAtPmRlY2ltYWxfcG9pbnRbMF0gIT0gJywnKSByZXR1cm4gMTsKKyNlbmRpZgorICByZXR1cm4gMDsKK30KK2NoYW5nZXF1b3RlKFssXSlkbmwKKyAgICAgIF0pXSkKKyAgICBpZiBBQ19UUllfRVZBTChbYWNfbGlua10pICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgIyBIYW5kbGUgbmF0aXZlIFdpbmRvd3Mgc3BlY2lhbGx5LCBiZWNhdXNlIHRoZXJlIHNldGxvY2FsZSgpIGludGVycHJldHMKKyAgICAgICAgIyAiYXIiIGFzICJBcmFiaWMiIG9yICJBcmFiaWNfU2F1ZGkgQXJhYmlhLjEyNTYiLAorICAgICAgICAjICJmciIgb3IgImZyYSIgYXMgIkZyZW5jaCIgb3IgIkZyZW5jaF9GcmFuY2UuMTI1MiIsCisgICAgICAgICMgImdlIighKSBvciAiZGV1IighKSBhcyAiR2VybWFuIiBvciAiR2VybWFuX0dlcm1hbnkuMTI1MiIsCisgICAgICAgICMgImphIiBhcyAiSmFwYW5lc2UiIG9yICJKYXBhbmVzZV9KYXBhbi45MzIiLAorICAgICAgICAjIGFuZCBzaW1pbGFyLgorICAgICAgICBtaW5ndyopCisgICAgICAgICAgIyBUZXN0IGZvciB0aGUgaHlwb3RoZXRpY2FsIG5hdGl2ZSBXaW5kb3dzIGxvY2FsZSBuYW1lLgorICAgICAgICAgIGlmIChMQ19BTEw9RnJlbmNoX0ZyYW5jZS42NTAwMSBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcl91dGY4PUZyZW5jaF9GcmFuY2UuNjUwMDEKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAjIE5vbmUgZm91bmQuCisgICAgICAgICAgICBndF9jdl9sb2NhbGVfZnJfdXRmOD1ub25lCisgICAgICAgICAgZmkKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICMgU2V0dGluZyBMQ19BTEwgaXMgbm90IGVub3VnaC4gTmVlZCB0byBzZXQgTENfVElNRSB0byBlbXB0eSwgYmVjYXVzZQorICAgICAgICAgICMgb3RoZXJ3aXNlIG9uIE1hYyBPUyBYIDEwLjMuNSB0aGUgTENfVElNRT1DIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUKKyAgICAgICAgICAjIGNvbmZpZ3VyZSBzY3JpcHQgd291bGQgb3ZlcnJpZGUgdGhlIExDX0FMTCBzZXR0aW5nLiBMaWtld2lzZSBmb3IKKyAgICAgICAgICAjIExDX0NUWVBFLCB3aGljaCBpcyBhbHNvIHNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb25maWd1cmUgc2NyaXB0LgorICAgICAgICAgICMgVGVzdCBmb3IgdGhlIHVzdWFsIGxvY2FsZSBuYW1lLgorICAgICAgICAgIGlmIChMQ19BTEw9ZnJfRlIgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICBndF9jdl9sb2NhbGVfZnJfdXRmOD1mcl9GUgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICMgVGVzdCBmb3IgdGhlIGxvY2FsZSBuYW1lIHdpdGggZXhwbGljaXQgZW5jb2Rpbmcgc3VmZml4LgorICAgICAgICAgICAgaWYgKExDX0FMTD1mcl9GUi5VVEYtOCBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyX3V0Zjg9ZnJfRlIuVVRGLTgKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIyBUZXN0IGZvciB0aGUgU29sYXJpcyA3IGxvY2FsZSBuYW1lLgorICAgICAgICAgICAgICBpZiAoTENfQUxMPWZyLlVURi04IExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcl91dGY4PWZyLlVURi04CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAjIE5vbmUgZm91bmQuCisgICAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyX3V0Zjg9bm9uZQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICBmaQorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICBybSAtZnIgY29uZnRlc3QqCisgIF0pCisgIExPQ0FMRV9GUl9VVEY4PSRndF9jdl9sb2NhbGVfZnJfdXRmOAorICBBQ19TVUJTVChbTE9DQUxFX0ZSX1VURjhdKQorXSkKZGlmZiAtLWdpdCBhL200L2xvY2FsZS1qYS5tNCBiL200L2xvY2FsZS1qYS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmEwZTQzCi0tLSAvZGV2L251bGwKKysrIGIvbTQvbG9jYWxlLWphLm00CkBAIC0wLDAgKzEsMTM2IEBACisjIGxvY2FsZS1qYS5tNCBzZXJpYWwgMTIKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgRnJvbSBCcnVubyBIYWlibGUuCisKK2RubCBEZXRlcm1pbmUgdGhlIG5hbWUgb2YgYSBqYXBhbmVzZSBsb2NhbGUgd2l0aCBFVUMtSlAgZW5jb2RpbmcuCitBQ19ERUZVTihbZ3RfTE9DQUxFX0pBXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorICBBQ19SRVFVSVJFKFtBTV9MQU5HSU5GT19DT0RFU0VUXSkKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBhIHRyYWRpdGlvbmFsIGphcGFuZXNlIGxvY2FsZV0sIFtndF9jdl9sb2NhbGVfamFdLCBbCisgICAgQUNfTEFOR19DT05GVEVTVChbQUNfTEFOR19TT1VSQ0UoWworY2hhbmdlcXVvdGUoLClkbmwKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisjIGluY2x1ZGUgPGxhbmdpbmZvLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KK3N0cnVjdCB0bSB0OworY2hhciBidWZbMTZdOworaW50IG1haW4gKCkKK3sKKyAgY29uc3QgY2hhciAqcDsKKyAgLyogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbG9jYWxlIG5hbWUgaXMgcmVjb2duaXplZCBieSB0aGUgc3lzdGVtLiAgKi8KKyNpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICFkZWZpbmVkIF9fQ1lHV0lOX18KKyAgLyogT24gbmF0aXZlIFdpbmRvd3MsIHNldGxvY2FsZShjYXRlZ29yeSwgIiIpIGxvb2tzIGF0IHRoZSBzeXN0ZW0gc2V0dGluZ3MsCisgICAgIG5vdCBhdCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgQWxzbywgd2hlbiBhbiBlbmNvZGluZyBzdWZmaXggc3VjaAorICAgICBhcyAiLjY1MDAxIiBvciAiLjU0OTM2IiBpcyBzcGVjaWZpZWQsIGl0IHN1Y2NlZWRzIGJ1dCBzZXRzIHRoZSBMQ19DVFlQRQorICAgICBjYXRlZ29yeSBvZiB0aGUgbG9jYWxlIHRvICJDIi4gICovCisgIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgZ2V0ZW52ICgiTENfQUxMIikpID09IE5VTEwKKyAgICAgIHx8IHN0cmNtcCAoc2V0bG9jYWxlIChMQ19DVFlQRSwgTlVMTCksICJDIikgPT0gMCkKKyAgICByZXR1cm4gMTsKKyNlbHNlCisgIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgIiIpID09IE5VTEwpIHJldHVybiAxOworI2VuZGlmCisgIC8qIENoZWNrIHdoZXRoZXIgbmxfbGFuZ2luZm8oQ09ERVNFVCkgaXMgbm9uZW1wdHkgYW5kIG5vdCAiQVNDSUkiIG9yICI2NDYiLgorICAgICBPbiBNYWMgT1MgWCAxMC4zLjUgKERhcndpbiA3LjUpIGluIHRoZSBmcl9GUiBsb2NhbGUsIG5sX2xhbmdpbmZvKENPREVTRVQpCisgICAgIGlzIGVtcHR5LCBhbmQgdGhlIGJlaGF2aW91ciBvZiBUY2wgOC40IGluIHRoaXMgbG9jYWxlIGlzIG5vdCB1c2VmdWwuCisgICAgIE9uIE9wZW5CU0QgNC4wLCB3aGVuIGFuIHVuc3VwcG9ydGVkIGxvY2FsZSBpcyBzcGVjaWZpZWQsIHNldGxvY2FsZSgpCisgICAgIHN1Y2NlZWRzIGJ1dCB0aGVuIG5sX2xhbmdpbmZvKENPREVTRVQpIGlzICI2NDYiLiBJbiB0aGlzIHNpdHVhdGlvbiwKKyAgICAgc29tZSB1bml0IHRlc3RzIGZhaWwuCisgICAgIE9uIE1pckJTRCAxMCwgd2hlbiBhbiB1bnN1cHBvcnRlZCBsb2NhbGUgaXMgc3BlY2lmaWVkLCBzZXRsb2NhbGUoKQorICAgICBzdWNjZWVkcyBidXQgdGhlbiBubF9sYW5naW5mbyhDT0RFU0VUKSBpcyAiVVRGLTgiLiAgKi8KKyNpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKyAgeworICAgIGNvbnN0IGNoYXIgKmNzID0gbmxfbGFuZ2luZm8gKENPREVTRVQpOworICAgIGlmIChjc1swXSA9PSAnXDAnIHx8IHN0cmNtcCAoY3MsICJBU0NJSSIpID09IDAgfHwgc3RyY21wIChjcywgIjY0NiIpID09IDAKKyAgICAgICAgfHwgc3RyY21wIChjcywgIlVURi04IikgPT0gMCkKKyAgICAgIHJldHVybiAxOworICB9CisjZW5kaWYKKyNpZmRlZiBfX0NZR1dJTl9fCisgIC8qIE9uIEN5Z3dpbiwgYXZvaWQgbG9jYWxlIG5hbWVzIHdpdGhvdXQgZW5jb2Rpbmcgc3VmZml4LCBiZWNhdXNlIHRoZQorICAgICBsb2NhbGVfY2hhcnNldCgpIGZ1bmN0aW9uIHJlbGllcyBvbiB0aGUgZW5jb2Rpbmcgc3VmZml4LiAgTm90ZSB0aGF0CisgICAgIExDX0FMTCBpcyBzZXQgb24gdGhlIGNvbW1hbmQgbGluZS4gICovCisgIGlmIChzdHJjaHIgKGdldGVudiAoIkxDX0FMTCIpLCAnLicpID09IE5VTEwpIHJldHVybiAxOworI2VuZGlmCisgIC8qIENoZWNrIHdoZXRoZXIgTUJfQ1VSX01BWCBpcyA+IDEuICBUaGlzIGV4Y2x1ZGVzIHRoZSBkeXNmdW5jdGlvbmFsIGxvY2FsZXMKKyAgICAgb24gQ3lnd2luIDEuNS54LiAgKi8KKyAgaWYgKE1CX0NVUl9NQVggPT0gMSkKKyAgICByZXR1cm4gMTsKKyAgLyogQ2hlY2sgd2hldGhlciBpbiBhIG1vbnRoIG5hbWUsIG5vIGJ5dGUgaW4gdGhlIHJhbmdlIDB4ODAuLjB4OUYgb2NjdXJzLgorICAgICBUaGlzIGV4Y2x1ZGVzIHRoZSBVVEYtOCBlbmNvZGluZyAoZXhjZXB0IG9uIE1pckJTRCkuICAqLworICB0LnRtX3llYXIgPSAxOTc1IC0gMTkwMDsgdC50bV9tb24gPSAyIC0gMTsgdC50bV9tZGF5ID0gNDsKKyAgaWYgKHN0cmZ0aW1lIChidWYsIHNpemVvZiAoYnVmKSwgIiVCIiwgJnQpIDwgMikgcmV0dXJuIDE7CisgIGZvciAocCA9IGJ1ZjsgKnAgIT0gJ1wwJzsgcCsrKQorICAgIGlmICgodW5zaWduZWQgY2hhcikgKnAgPj0gMHg4MCAmJiAodW5zaWduZWQgY2hhcikgKnAgPCAweGEwKQorICAgICAgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorY2hhbmdlcXVvdGUoWyxdKWRubAorICAgICAgXSldKQorICAgIGlmIEFDX1RSWV9FVkFMKFthY19saW5rXSkgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAjIEhhbmRsZSBuYXRpdmUgV2luZG93cyBzcGVjaWFsbHksIGJlY2F1c2UgdGhlcmUgc2V0bG9jYWxlKCkgaW50ZXJwcmV0cworICAgICAgICAjICJhciIgYXMgIkFyYWJpYyIgb3IgIkFyYWJpY19TYXVkaSBBcmFiaWEuMTI1NiIsCisgICAgICAgICMgImZyIiBvciAiZnJhIiBhcyAiRnJlbmNoIiBvciAiRnJlbmNoX0ZyYW5jZS4xMjUyIiwKKyAgICAgICAgIyAiZ2UiKCEpIG9yICJkZXUiKCEpIGFzICJHZXJtYW4iIG9yICJHZXJtYW5fR2VybWFueS4xMjUyIiwKKyAgICAgICAgIyAiamEiIGFzICJKYXBhbmVzZSIgb3IgIkphcGFuZXNlX0phcGFuLjkzMiIsCisgICAgICAgICMgYW5kIHNpbWlsYXIuCisgICAgICAgIG1pbmd3KikKKyAgICAgICAgICAjIE5vdGUgdGhhdCBvbiBuYXRpdmUgV2luZG93cywgdGhlIEphcGFuZXNlIGxvY2FsZSBpcworICAgICAgICAgICMgSmFwYW5lc2VfSmFwYW4uOTMyLCBhbmQgQ1A5MzIgaXMgdmVyeSBkaWZmZXJlbnQgZnJvbSBFVUMtSlAsIHNvIHdlCisgICAgICAgICAgIyBjYW5ub3QgdXNlIGl0IGhlcmUuCisgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2phPW5vbmUKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICMgU2V0dGluZyBMQ19BTEwgaXMgbm90IGVub3VnaC4gTmVlZCB0byBzZXQgTENfVElNRSB0byBlbXB0eSwgYmVjYXVzZQorICAgICAgICAgICMgb3RoZXJ3aXNlIG9uIE1hYyBPUyBYIDEwLjMuNSB0aGUgTENfVElNRT1DIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUKKyAgICAgICAgICAjIGNvbmZpZ3VyZSBzY3JpcHQgd291bGQgb3ZlcnJpZGUgdGhlIExDX0FMTCBzZXR0aW5nLiBMaWtld2lzZSBmb3IKKyAgICAgICAgICAjIExDX0NUWVBFLCB3aGljaCBpcyBhbHNvIHNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb25maWd1cmUgc2NyaXB0LgorICAgICAgICAgICMgVGVzdCBmb3IgdGhlIEFJWCBsb2NhbGUgbmFtZS4KKyAgICAgICAgICBpZiAoTENfQUxMPWphX0pQIExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2phPWphX0pQCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgIyBUZXN0IGZvciB0aGUgbG9jYWxlIG5hbWUgd2l0aCBleHBsaWNpdCBlbmNvZGluZyBzdWZmaXguCisgICAgICAgICAgICBpZiAoTENfQUxMPWphX0pQLkVVQy1KUCBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2phPWphX0pQLkVVQy1KUAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBIUC1VWCwgT1NGLzEsIE5ldEJTRCBsb2NhbGUgbmFtZS4KKyAgICAgICAgICAgICAgaWYgKExDX0FMTD1qYV9KUC5ldWNKUCBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgICAgICBndF9jdl9sb2NhbGVfamE9amFfSlAuZXVjSlAKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICMgVGVzdCBmb3IgdGhlIElSSVgsIEZyZWVCU0QgbG9jYWxlIG5hbWUuCisgICAgICAgICAgICAgICAgaWYgKExDX0FMTD1qYV9KUC5FVUMgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICAgICAgICBndF9jdl9sb2NhbGVfamE9amFfSlAuRVVDCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgIyBUZXN0IGZvciB0aGUgU29sYXJpcyA3IGxvY2FsZSBuYW1lLgorICAgICAgICAgICAgICAgICAgaWYgKExDX0FMTD1qYSBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2phPWphCisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICMgU3BlY2lhbCB0ZXN0IGZvciBOZXRCU0QgMS42LgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mIC91c3Ivc2hhcmUvbG9jYWxlL2phX0pQLmV1Y0pQL0xDX0NUWVBFOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2phPWphX0pQLmV1Y0pQCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAjIE5vbmUgZm91bmQuCisgICAgICAgICAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2phPW5vbmUKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgIGZpCisgICAgcm0gLWZyIGNvbmZ0ZXN0KgorICBdKQorICBMT0NBTEVfSkE9JGd0X2N2X2xvY2FsZV9qYQorICBBQ19TVUJTVChbTE9DQUxFX0pBXSkKK10pCmRpZmYgLS1naXQgYS9tNC9sb2NhbGUtemgubTQgYi9tNC9sb2NhbGUtemgubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU1MDJiMgotLS0gL2Rldi9udWxsCisrKyBiL200L2xvY2FsZS16aC5tNApAQCAtMCwwICsxLDEzMCBAQAorIyBsb2NhbGUtemgubTQgc2VyaWFsIDEyCitkbmwgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorCitkbmwgRGV0ZXJtaW5lIHRoZSBuYW1lIG9mIGEgY2hpbmVzZSBsb2NhbGUgd2l0aCBHQjE4MDMwIGVuY29kaW5nLgorQUNfREVGVU4oW2d0X0xPQ0FMRV9aSF9DTl0sCitbCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKyAgQUNfUkVRVUlSRShbQU1fTEFOR0lORk9fQ09ERVNFVF0pCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgYSB0cmFuc2l0aW9uYWwgY2hpbmVzZSBsb2NhbGVdLCBbZ3RfY3ZfbG9jYWxlX3poX0NOXSwgWworICAgIEFDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfU09VUkNFKFsKK2NoYW5nZXF1b3RlKCwpZG5sCisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmIEhBVkVfTEFOR0lORk9fQ09ERVNFVAorIyBpbmNsdWRlIDxsYW5naW5mby5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CitzdHJ1Y3QgdG0gdDsKK2NoYXIgYnVmWzE2XTsKK2ludCBtYWluICgpCit7CisgIGNvbnN0IGNoYXIgKnA7CisgIC8qIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGxvY2FsZSBuYW1lIGlzIHJlY29nbml6ZWQgYnkgdGhlIHN5c3RlbS4gICovCisjaWYgKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhZGVmaW5lZCBfX0NZR1dJTl9fCisgIC8qIE9uIG5hdGl2ZSBXaW5kb3dzLCBzZXRsb2NhbGUoY2F0ZWdvcnksICIiKSBsb29rcyBhdCB0aGUgc3lzdGVtIHNldHRpbmdzLAorICAgICBub3QgYXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIEFsc28sIHdoZW4gYW4gZW5jb2Rpbmcgc3VmZml4IHN1Y2gKKyAgICAgYXMgIi42NTAwMSIgb3IgIi41NDkzNiIgaXMgc3BlY2lmaWVkLCBpdCBzdWNjZWVkcyBidXQgc2V0cyB0aGUgTENfQ1RZUEUKKyAgICAgY2F0ZWdvcnkgb2YgdGhlIGxvY2FsZSB0byAiQyIuICAqLworICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsIGdldGVudiAoIkxDX0FMTCIpKSA9PSBOVUxMCisgICAgICB8fCBzdHJjbXAgKHNldGxvY2FsZSAoTENfQ1RZUEUsIE5VTEwpLCAiQyIpID09IDApCisgICAgcmV0dXJuIDE7CisjZWxzZQorICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICIiKSA9PSBOVUxMKSByZXR1cm4gMTsKKyNlbmRpZgorICAvKiBDaGVjayB3aGV0aGVyIG5sX2xhbmdpbmZvKENPREVTRVQpIGlzIG5vbmVtcHR5IGFuZCBub3QgIkFTQ0lJIiBvciAiNjQ2Ii4KKyAgICAgT24gTWFjIE9TIFggMTAuMy41IChEYXJ3aW4gNy41KSBpbiB0aGUgZnJfRlIgbG9jYWxlLCBubF9sYW5naW5mbyhDT0RFU0VUKQorICAgICBpcyBlbXB0eSwgYW5kIHRoZSBiZWhhdmlvdXIgb2YgVGNsIDguNCBpbiB0aGlzIGxvY2FsZSBpcyBub3QgdXNlZnVsLgorICAgICBPbiBPcGVuQlNEIDQuMCwgd2hlbiBhbiB1bnN1cHBvcnRlZCBsb2NhbGUgaXMgc3BlY2lmaWVkLCBzZXRsb2NhbGUoKQorICAgICBzdWNjZWVkcyBidXQgdGhlbiBubF9sYW5naW5mbyhDT0RFU0VUKSBpcyAiNjQ2Ii4gSW4gdGhpcyBzaXR1YXRpb24sCisgICAgIHNvbWUgdW5pdCB0ZXN0cyBmYWlsLgorICAgICBPbiBNaXJCU0QgMTAsIHdoZW4gYW4gdW5zdXBwb3J0ZWQgbG9jYWxlIGlzIHNwZWNpZmllZCwgc2V0bG9jYWxlKCkKKyAgICAgc3VjY2VlZHMgYnV0IHRoZW4gbmxfbGFuZ2luZm8oQ09ERVNFVCkgaXMgIlVURi04Ii4gICovCisjaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisgIHsKKyAgICBjb25zdCBjaGFyICpjcyA9IG5sX2xhbmdpbmZvIChDT0RFU0VUKTsKKyAgICBpZiAoY3NbMF0gPT0gJ1wwJyB8fCBzdHJjbXAgKGNzLCAiQVNDSUkiKSA9PSAwIHx8IHN0cmNtcCAoY3MsICI2NDYiKSA9PSAwCisgICAgICAgIHx8IHN0cmNtcCAoY3MsICJVVEYtOCIpID09IDApCisgICAgICByZXR1cm4gMTsKKyAgfQorI2VuZGlmCisjaWZkZWYgX19DWUdXSU5fXworICAvKiBPbiBDeWd3aW4sIGF2b2lkIGxvY2FsZSBuYW1lcyB3aXRob3V0IGVuY29kaW5nIHN1ZmZpeCwgYmVjYXVzZSB0aGUKKyAgICAgbG9jYWxlX2NoYXJzZXQoKSBmdW5jdGlvbiByZWxpZXMgb24gdGhlIGVuY29kaW5nIHN1ZmZpeC4gIE5vdGUgdGhhdAorICAgICBMQ19BTEwgaXMgc2V0IG9uIHRoZSBjb21tYW5kIGxpbmUuICAqLworICBpZiAoc3RyY2hyIChnZXRlbnYgKCJMQ19BTEwiKSwgJy4nKSA9PSBOVUxMKSByZXR1cm4gMTsKKyNlbmRpZgorICAvKiBDaGVjayB3aGV0aGVyIGluIGEgbW9udGggbmFtZSwgbm8gYnl0ZSBpbiB0aGUgcmFuZ2UgMHg4MC4uMHg5RiBvY2N1cnMuCisgICAgIFRoaXMgZXhjbHVkZXMgdGhlIFVURi04IGVuY29kaW5nIChleGNlcHQgb24gTWlyQlNEKS4gICovCisgIHQudG1feWVhciA9IDE5NzUgLSAxOTAwOyB0LnRtX21vbiA9IDIgLSAxOyB0LnRtX21kYXkgPSA0OworICBpZiAoc3RyZnRpbWUgKGJ1Ziwgc2l6ZW9mIChidWYpLCAiJUIiLCAmdCkgPCAyKSByZXR1cm4gMTsKKyAgZm9yIChwID0gYnVmOyAqcCAhPSAnXDAnOyBwKyspCisgICAgaWYgKCh1bnNpZ25lZCBjaGFyKSAqcCA+PSAweDgwICYmICh1bnNpZ25lZCBjaGFyKSAqcCA8IDB4YTApCisgICAgICByZXR1cm4gMTsKKyAgLyogQ2hlY2sgd2hldGhlciBhIHR5cGljYWwgR0IxODAzMCBtdWx0aWJ5dGUgc2VxdWVuY2UgaXMgcmVjb2duaXplZCBhcyBhCisgICAgIHNpbmdsZSB3aWRlIGNoYXJhY3Rlci4gIFRoaXMgZXhjbHVkZXMgdGhlIEdCMjMxMiBhbmQgR0JLIGVuY29kaW5ncy4gICovCisgIGlmIChtYmxlbiAoIlwyMDNcMDYyXDMzMlwwNjYiLCA1KSAhPSA0KQorICAgIHJldHVybiAxOworICByZXR1cm4gMDsKK30KK2NoYW5nZXF1b3RlKFssXSlkbmwKKyAgICAgIF0pXSkKKyAgICBpZiBBQ19UUllfRVZBTChbYWNfbGlua10pICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgIyBIYW5kbGUgbmF0aXZlIFdpbmRvd3Mgc3BlY2lhbGx5LCBiZWNhdXNlIHRoZXJlIHNldGxvY2FsZSgpIGludGVycHJldHMKKyAgICAgICAgIyAiYXIiIGFzICJBcmFiaWMiIG9yICJBcmFiaWNfU2F1ZGkgQXJhYmlhLjEyNTYiLAorICAgICAgICAjICJmciIgb3IgImZyYSIgYXMgIkZyZW5jaCIgb3IgIkZyZW5jaF9GcmFuY2UuMTI1MiIsCisgICAgICAgICMgImdlIighKSBvciAiZGV1IighKSBhcyAiR2VybWFuIiBvciAiR2VybWFuX0dlcm1hbnkuMTI1MiIsCisgICAgICAgICMgImphIiBhcyAiSmFwYW5lc2UiIG9yICJKYXBhbmVzZV9KYXBhbi45MzIiLAorICAgICAgICAjIGFuZCBzaW1pbGFyLgorICAgICAgICBtaW5ndyopCisgICAgICAgICAgIyBUZXN0IGZvciB0aGUgaHlwb3RoZXRpY2FsIG5hdGl2ZSBXaW5kb3dzIGxvY2FsZSBuYW1lLgorICAgICAgICAgIGlmIChMQ19BTEw9Q2hpbmVzZV9DaGluYS41NDkzNiBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgIGd0X2N2X2xvY2FsZV96aF9DTj1DaGluZXNlX0NoaW5hLjU0OTM2CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgIyBOb25lIGZvdW5kLgorICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX3poX0NOPW5vbmUKKyAgICAgICAgICBmaQorICAgICAgICAgIDs7CisgICAgICAgIHNvbGFyaXMyLjgpCisgICAgICAgICAgIyBPbiBTb2xhcmlzIDgsIHRoZSBsb2NhbGVzIHpoX0NOLkdCMTgwMzAsIHpoX0NOLkdCSywgemguR0JLIGFyZQorICAgICAgICAgICMgYnJva2VuLiBPbmUgd2l0bmVzcyBpcyB0aGUgdGVzdCBjYXNlIGluIGdsX01CUlRPV0NfU0FOSVRZQ0hFQ0suCisgICAgICAgICAgIyBBbm90aGVyIHdpdG5lc3MgaXMgdGhhdCAiTENfQUxMPXpoX0NOLkdCMTgwMzAgYmFzaCAtYyB0cnVlIiBkdW1wcyBjb3JlLgorICAgICAgICAgIGd0X2N2X2xvY2FsZV96aF9DTj1ub25lCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAjIFNldHRpbmcgTENfQUxMIGlzIG5vdCBlbm91Z2guIE5lZWQgdG8gc2V0IExDX1RJTUUgdG8gZW1wdHksIGJlY2F1c2UKKyAgICAgICAgICAjIG90aGVyd2lzZSBvbiBNYWMgT1MgWCAxMC4zLjUgdGhlIExDX1RJTUU9QyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlCisgICAgICAgICAgIyBjb25maWd1cmUgc2NyaXB0IHdvdWxkIG92ZXJyaWRlIHRoZSBMQ19BTEwgc2V0dGluZy4gTGlrZXdpc2UgZm9yCisgICAgICAgICAgIyBMQ19DVFlQRSwgd2hpY2ggaXMgYWxzbyBzZXQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY29uZmlndXJlIHNjcmlwdC4KKyAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBsb2NhbGUgbmFtZSB3aXRob3V0IGVuY29kaW5nIHN1ZmZpeC4KKyAgICAgICAgICBpZiAoTENfQUxMPXpoX0NOIExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX3poX0NOPXpoX0NOCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgIyBUZXN0IGZvciB0aGUgbG9jYWxlIG5hbWUgd2l0aCBleHBsaWNpdCBlbmNvZGluZyBzdWZmaXguCisgICAgICAgICAgICBpZiAoTENfQUxMPXpoX0NOLkdCMTgwMzAgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV96aF9DTj16aF9DTi5HQjE4MDMwCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICMgTm9uZSBmb3VuZC4KKyAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX3poX0NOPW5vbmUKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgIGVsc2UKKyAgICAgICMgSWYgdGhlcmUgd2FzIGEgbGluayBlcnJvciwgZHVlIHRvIG1ibGVuKCksIHRoZSBzeXN0ZW0gaXMgc28gb2xkIHRoYXQKKyAgICAgICMgaXQgY2VydGFpbmx5IGRvZXNuJ3QgaGF2ZSBhIGNoaW5lc2UgbG9jYWxlLgorICAgICAgZ3RfY3ZfbG9jYWxlX3poX0NOPW5vbmUKKyAgICBmaQorICAgIHJtIC1mciBjb25mdGVzdCoKKyAgXSkKKyAgTE9DQUxFX1pIX0NOPSRndF9jdl9sb2NhbGVfemhfQ04KKyAgQUNfU1VCU1QoW0xPQ0FMRV9aSF9DTl0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvbG9jay5tNCBiL200L2xvY2subTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNkYTZjYwotLS0gL2Rldi9udWxsCisrKyBiL200L2xvY2subTQKQEAgLTAsMCArMSwzOSBAQAorIyBsb2NrLm00IHNlcmlhbCAxMyAoZ2V0dGV4dC0wLjE4LjIpCitkbmwgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorCitBQ19ERUZVTihbZ2xfTE9DS10sCitbCisgIEFDX1JFUVVJUkUoW2dsX1RIUkVBRExJQl0pCisgIGlmIHRlc3QgIiRnbF90aHJlYWRzX2FwaSIgPSBwb3NpeDsgdGhlbgorICAgICMgT1NGLzEgNC4wIGFuZCBNYWMgT1MgWCAxMC4xIGxhY2sgdGhlIHB0aHJlYWRfcndsb2NrX3QgdHlwZSBhbmQgdGhlCisgICAgIyBwdGhyZWFkX3J3bG9ja18qIGZ1bmN0aW9ucy4KKyAgICBBQ19DSEVDS19UWVBFKFtwdGhyZWFkX3J3bG9ja190XSwKKyAgICAgIFtBQ19ERUZJTkUoW0hBVkVfUFRIUkVBRF9SV0xPQ0tdLCBbMV0sCisgICAgICAgICBbRGVmaW5lIGlmIHRoZSBQT1NJWCBtdWx0aXRocmVhZGluZyBsaWJyYXJ5IGhhcyByZWFkL3dyaXRlIGxvY2tzLl0pXSwKKyAgICAgIFtdLAorICAgICAgWyNpbmNsdWRlIDxwdGhyZWFkLmg+XSkKKyAgICAjIGdsaWJjIGRlZmluZXMgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUgYXMgZW51bSwgbm90IGFzIGEgbWFjcm8uCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKAorICAgICAgICBbWyNpbmNsdWRlIDxwdGhyZWFkLmg+XV0sCisgICAgICAgIFtbCisjaWYgX19GcmVlQlNEX18gPT0gNAorZXJyb3IgIk5vLCBpbiBGcmVlQlNEIDQuMCByZWN1cnNpdmUgbXV0ZXhlcyBhY3R1YWxseSBkb24ndCB3b3JrLiIKKyNlbHNlCitpbnQgeCA9IChpbnQpUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkU7CityZXR1cm4gIXg7CisjZW5kaWYKKyAgICAgICAgXV0pXSwKKyAgICAgIFtBQ19ERUZJTkUoW0hBVkVfUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVdLCBbMV0sCisgICAgICAgICBbRGVmaW5lIGlmIHRoZSA8cHRocmVhZC5oPiBkZWZpbmVzIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFLl0pXSkKKyAgZmkKKyAgZ2xfUFJFUkVRX0xPQ0sKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvZ2x0aHJlYWQvbG9jay5jLgorQUNfREVGVU4oW2dsX1BSRVJFUV9MT0NLXSwgWzpdKQpkaWZmIC0tZ2l0IGEvbTQvbG9uZ2xvbmcubTQgYi9tNC9sb25nbG9uZy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWM2NWM3Ci0tLSAvZGV2L251bGwKKysrIGIvbTQvbG9uZ2xvbmcubTQKQEAgLTAsMCArMSwxMTMgQEAKKyMgbG9uZ2xvbmcubTQgc2VyaWFsIDE3CitkbmwgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKworIyBEZWZpbmUgSEFWRV9MT05HX0xPTkdfSU5UIGlmICdsb25nIGxvbmcgaW50JyB3b3Jrcy4KKyMgVGhpcyBmaXhlcyBhIGJ1ZyBpbiBBdXRvY29uZiAyLjYxLCBhbmQgY2FuIGJlIGZhc3RlcgorIyB0aGFuIHdoYXQncyBpbiBBdXRvY29uZiAyLjYyIHRocm91Z2ggMi42OC4KKworIyBOb3RlOiBJZiB0aGUgdHlwZSAnbG9uZyBsb25nIGludCcgZXhpc3RzIGJ1dCBpcyBvbmx5IDMyIGJpdHMgbGFyZ2UKKyMgKGFzIG9uIHNvbWUgdmVyeSBvbGQgY29tcGlsZXJzKSwgSEFWRV9MT05HX0xPTkdfSU5UIHdpbGwgbm90IGJlCisjIGRlZmluZWQuIEluIHRoaXMgY2FzZSB5b3UgY2FuIHRyZWF0ICdsb25nIGxvbmcgaW50JyBsaWtlICdsb25nIGludCcuCisKK0FDX0RFRlVOKFtBQ19UWVBFX0xPTkdfTE9OR19JTlRdLAorWworICBBQ19SRVFVSVJFKFtBQ19UWVBFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRdKQorICBBQ19DQUNIRV9DSEVDSyhbZm9yIGxvbmcgbG9uZyBpbnRdLCBbYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50XSwKKyAgICAgW2FjX2N2X3R5cGVfbG9uZ19sb25nX2ludD15ZXMKKyAgICAgIGlmIHRlc3QgIngke2FjX2N2X3Byb2dfY2NfYzk5LW5vfSIgPSB4bm87IHRoZW4KKyAgICAgICAgYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50PSRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQKKyAgICAgICAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50ID0geWVzOyB0aGVuCisgICAgICAgICAgZG5sIENhdGNoIGEgYnVnIGluIFRhbmRlbSBOb25TdG9wIEtlcm5lbCAoT1NTKSBjYyAtTyBjaXJjYSAyMDA0LgorICAgICAgICAgIGRubCBJZiBjcm9zcyBjb21waWxpbmcsIGFzc3VtZSB0aGUgYnVnIGlzIG5vdCBpbXBvcnRhbnQsIHNpbmNlCisgICAgICAgICAgZG5sIG5vYm9keSBjcm9zcyBjb21waWxlcyBmb3IgdGhpcyBwbGF0Zm9ybSBhcyBmYXIgYXMgd2Uga25vdy4KKyAgICAgICAgICBBQ19SVU5fSUZFTFNFKAorICAgICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgICAgIFtbQCU6QGluY2x1ZGUgPGxpbWl0cy5oPgorICAgICAgICAgICAgICAgICBAJTpAaWZuZGVmIExMT05HX01BWAorICAgICAgICAgICAgICAgICBAJTpAIGRlZmluZSBIQUxGIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKDFMTCA8PCAoc2l6ZW9mIChsb25nIGxvbmcgaW50KSAqIENIQVJfQklUIC0gMikpCisgICAgICAgICAgICAgICAgIEAlOkAgZGVmaW5lIExMT05HX01BWCAoSEFMRiAtIDEgKyBIQUxGKQorICAgICAgICAgICAgICAgICBAJTpAZW5kaWZdXSwKKyAgICAgICAgICAgICAgIFtbbG9uZyBsb25nIGludCBuID0gMTsKKyAgICAgICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IDsgaSsrKQorICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIGxvbmcgbG9uZyBpbnQgbSA9IG4gPDwgaTsKKyAgICAgICAgICAgICAgICAgICAgIGlmIChtID4+IGkgIT0gbikKKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgICAgICBpZiAoTExPTkdfTUFYIC8gMiA8IG0pCisgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XV0pXSwKKyAgICAgICAgICAgIFtdLAorICAgICAgICAgICAgW2FjX2N2X3R5cGVfbG9uZ19sb25nX2ludD1ub10sCisgICAgICAgICAgICBbOl0pCisgICAgICAgIGZpCisgICAgICBmaV0pCisgIGlmIHRlc3QgJGFjX2N2X3R5cGVfbG9uZ19sb25nX2ludCA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShbSEFWRV9MT05HX0xPTkdfSU5UXSwgWzFdLAorICAgICAgW0RlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlICdsb25nIGxvbmcgaW50Jy5dKQorICBmaQorXSkKKworIyBEZWZpbmUgSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UIGlmICd1bnNpZ25lZCBsb25nIGxvbmcgaW50JyB3b3Jrcy4KKyMgVGhpcyBmaXhlcyBhIGJ1ZyBpbiBBdXRvY29uZiAyLjYxLCBhbmQgY2FuIGJlIGZhc3RlcgorIyB0aGFuIHdoYXQncyBpbiBBdXRvY29uZiAyLjYyIHRocm91Z2ggMi42OC4KKworIyBOb3RlOiBJZiB0aGUgdHlwZSAndW5zaWduZWQgbG9uZyBsb25nIGludCcgZXhpc3RzIGJ1dCBpcyBvbmx5IDMyIGJpdHMKKyMgbGFyZ2UgKGFzIG9uIHNvbWUgdmVyeSBvbGQgY29tcGlsZXJzKSwgQUNfVFlQRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UCisjIHdpbGwgbm90IGJlIGRlZmluZWQuIEluIHRoaXMgY2FzZSB5b3UgY2FuIHRyZWF0ICd1bnNpZ25lZCBsb25nIGxvbmcgaW50JworIyBsaWtlICd1bnNpZ25lZCBsb25nIGludCcuCisKK0FDX0RFRlVOKFtBQ19UWVBFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRdLAorWworICBBQ19DQUNIRV9DSEVDSyhbZm9yIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnRdLAorICAgIFthY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnRdLAorICAgIFthY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQ9eWVzCisgICAgIGlmIHRlc3QgIngke2FjX2N2X3Byb2dfY2NfYzk5LW5vfSIgPSB4bm87IHRoZW4KKyAgICAgICBBQ19MSU5LX0lGRUxTRSgKKyAgICAgICAgIFtfQUNfVFlQRV9MT05HX0xPTkdfU05JUFBFVF0sCisgICAgICAgICBbXSwKKyAgICAgICAgIFthY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQ9bm9dKQorICAgICBmaV0pCisgIGlmIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludCA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShbSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UXSwgWzFdLAorICAgICAgW0RlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlICd1bnNpZ25lZCBsb25nIGxvbmcgaW50Jy5dKQorICBmaQorXSkKKworIyBFeHBhbmRzIHRvIGEgQyBwcm9ncmFtIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdCBmb3Igc2ltdWx0YW5lb3VzIHN1cHBvcnQKKyMgb2YgJ2xvbmcgbG9uZycgYW5kICd1bnNpZ25lZCBsb25nIGxvbmcnLiBXZSBkb24ndCB3YW50IHRvIHNheSB0aGF0CisjICdsb25nIGxvbmcnIGlzIGF2YWlsYWJsZSBpZiAndW5zaWduZWQgbG9uZyBsb25nJyBpcyBub3QsIG9yIHZpY2UgdmVyc2EsCisjIGJlY2F1c2UgdG9vIG1hbnkgcHJvZ3JhbXMgcmVseSBvbiB0aGUgc3ltbWV0cnkgYmV0d2VlbiBzaWduZWQgYW5kIHVuc2lnbmVkCisjIGludGVnZXIgdHlwZXMgKGV4Y2x1ZGluZyAnYm9vbCcpLgorQUNfREVGVU4oW19BQ19UWVBFX0xPTkdfTE9OR19TTklQUEVUXSwKK1sKKyAgQUNfTEFOR19QUk9HUkFNKAorICAgIFtbLyogRm9yIG5vdywgZG8gbm90IHRlc3QgdGhlIHByZXByb2Nlc3NvcjsgYXMgb2YgMjAwNyB0aGVyZSBhcmUgdG9vIG1hbnkKKyAgICAgICAgIGltcGxlbWVudGF0aW9ucyB3aXRoIGJyb2tlbiBwcmVwcm9jZXNzb3JzLiAgUGVyaGFwcyB0aGlzIGNhbgorICAgICAgICAgYmUgcmV2aXNpdGVkIGluIDIwMTIuICBJbiB0aGUgbWVhbnRpbWUsIGNvZGUgc2hvdWxkIG5vdCBleHBlY3QKKyAgICAgICAgICNpZiB0byB3b3JrIHdpdGggbGl0ZXJhbHMgd2lkZXIgdGhhbiAzMiBiaXRzLiAgKi8KKyAgICAgIC8qIFRlc3QgbGl0ZXJhbHMuICAqLworICAgICAgbG9uZyBsb25nIGludCBsbCA9IDkyMjMzNzIwMzY4NTQ3NzU4MDdsbDsKKyAgICAgIGxvbmcgbG9uZyBpbnQgbmxsID0gLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTDsKKyAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWxsID0gMTg0NDY3NDQwNzM3MDk1NTE2MTVVTEw7CisgICAgICAvKiBUZXN0IGNvbnN0YW50IGV4cHJlc3Npb25zLiAgICovCisgICAgICB0eXBlZGVmIGludCBhWygoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCA8IDAgJiYgMCA8IDkyMjMzNzIwMzY4NTQ3NzU4MDdsbCkKKyAgICAgICAgICAgICAgICAgICAgID8gMSA6IC0xKV07CisgICAgICB0eXBlZGVmIGludCBiWygxODQ0Njc0NDA3MzcwOTU1MTYxNVVMTCA8PSAodW5zaWduZWQgbG9uZyBsb25nIGludCkgLTEKKyAgICAgICAgICAgICAgICAgICAgID8gMSA6IC0xKV07CisgICAgICBpbnQgaSA9IDYzO11dLAorICAgIFtbLyogVGVzdCBhdmFpbGFiaWxpdHkgb2YgcnVudGltZSByb3V0aW5lcyBmb3Igc2hpZnQgYW5kIGRpdmlzaW9uLiAgKi8KKyAgICAgIGxvbmcgbG9uZyBpbnQgbGxtYXggPSA5MjIzMzcyMDM2ODU0Nzc1ODA3bGw7CisgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVsbG1heCA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE1dWxsOworICAgICAgcmV0dXJuICgobGwgPDwgNjMpIHwgKGxsID4+IDYzKSB8IChsbCA8IGkpIHwgKGxsID4gaSkKKyAgICAgICAgICAgICAgfCAobGxtYXggLyBsbCkgfCAobGxtYXggJSBsbCkKKyAgICAgICAgICAgICAgfCAodWxsIDw8IDYzKSB8ICh1bGwgPj4gNjMpIHwgKHVsbCA8PCBpKSB8ICh1bGwgPj4gaSkKKyAgICAgICAgICAgICAgfCAodWxsbWF4IC8gdWxsKSB8ICh1bGxtYXggJSB1bGwpKTtdXSkKK10pCmRpZmYgLS1naXQgYS9tNC9tNC5tNCBiL200L200Lm00CmluZGV4IDdkOGIzOTQuLjc2NTc0NTggMTAwNjQ0Ci0tLSBhL200L200Lm00CisrKyBiL200L200Lm00CkBAIC0xLDI5ICsxLDgyIEBACi0jIENvcHlyaWdodCAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0jIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0jIDAyMTEwLTEzMDEsIFVTQS4KKyMgbTQubTQgc2VyaWFsIDEyCiAKLSMgQklTT05fUFJPR19HTlVfTTQKLSMgLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgZm9yIEdOVSBtNCwgYXQgbGVhc3QgMS4zIChzdXBwb3J0cyBmcm96ZW4gZmlsZXMpLgotQUNfREVGVU4oW0JJU09OX1BST0dfR05VX000XSwKLVtBQ19QQVRIX1BST0dTKE00LCBnbTQgZ251bTQgbTQsIG00KQotQUNfQ0FDSEVfQ0hFQ0sod2hldGhlciBtNCBzdXBwb3J0cyBmcm96ZW4gZmlsZXMsIGFjX2N2X3Byb2dfZ251X200LAotW2FjX2N2X3Byb2dfZ251X200PW5vCi1pZiB0ZXN0IHgiJE00IiAhPSB4OyB0aGVuCi0gIGNhc2UgYCRNNCAtLWhlbHAgPCAvZGV2L251bGwgMj4mMWAgaW4KLSAgICAqcmVsb2FkLXN0YXRlKikgYWNfY3ZfcHJvZ19nbnVfbTQ9eWVzIDs7Ci0gIGVzYWMKLWZpXSldKQorIyBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorIyBhcmUgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQKKyMgbm90aWNlIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIG9mZmVyZWQgYXMtaXMsCisjIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQuCisKKyMgQUNfUFJPR19HTlVfTTQKKyMgLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIEdOVSBNNCwgYXQgbGVhc3QgMS40LjYgKGFsbCBlYXJsaWVyIHZlcnNpb25zIGhhZCBidWdzIGluCisjIHRyYWNlIHN1cHBvcnQgYW5kIHJlZ2V4cCBzdXBwb3J0KToKKyMgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1nbnUtdXRpbHMvMjAwNi0xMS9tc2cwMDA5Ni5odG1sCisjIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYXV0b2NvbmYvMjAwOS0wNy9tc2cwMDAyMy5odG1sCisjIEFsc28sIGNoZWNrIHdoZXRoZXIgLS1lcnJvci1vdXRwdXQgKHRocm91Z2ggMS40LngpIG9yIC0tZGVidWdmaWxlICgyLjApCisjIGlzIHN1cHBvcnRlZCwgYW5kIEFDX1NVQlNUIE00X0RFQlVHRklMRSBhY2NvcmRpbmdseS4KKyMgQWxzbyBhdm9pZCB2ZXJzaW9ucyBvZiBtNCB0aGF0IHRyaWdnZXIgc3Ryc3RyIGJ1Z3MuCitBQ19ERUZVTihbQUNfUFJPR19HTlVfTTRdLAorICBbQUNfQVJHX1ZBUihbTTRdLCBbTG9jYXRpb24gb2YgR05VIE00IDEuNC42IG9yIGxhdGVyLiAgRGVmYXVsdHMgdG8gdGhlIGZpcnN0CisgICAgcHJvZ3JhbSBvZiAnbTQnLCAnZ200Jywgb3IgJ2dudW00JyBvbiBQQVRIIHRoYXQgbWVldHMgQXV0b2NvbmYgbmVlZHMuXSkKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBHTlUgTTQgdGhhdCBzdXBwb3J0cyBhY2N1cmF0ZSB0cmFjZXNdLCBbYWNfY3ZfcGF0aF9NNF0sCisgICAgW3JtIC1mIGNvbmZ0ZXN0Lm00ZgorYWNfaGFkX3Bvc2l4bHlfY29ycmVjdD0ke1BPU0lYTFlfQ09SUkVDVDoreWVzfQorQVNfVU5TRVQoW1BPU0lYTFlfQ09SUkVDVF0pCitBQ19QQVRIX1BST0dTX0ZFQVRVUkVfQ0hFQ0soW000XSwgW200IGdtNCBnbnVtNF0sCisgICAgICBbZG5sIENyZWF0aXZlIHF1b3RpbmcgaGVyZSB0byBhdm9pZCByYXcgZG5sIGFuZCBpZmRlZiBpbiBjb25maWd1cmUuCisgICAgICAjIFJvb3Qgb3V0IEdOVSBNNCAxLjQuNSwgYXMgd2VsbCBhcyBub24tR05VIG00IHRoYXQgaWdub3JlIC10LCAtRi4KKyAgICAgICMgUm9vdCBvdXQgR05VIE00IDEuNC4xNSB3aXRoIGJ1Z2d5IGZhbHNlIG5lZ2F0aXZlIHJlcGxhY2VtZW50IHN0cnN0ci4KKyAgICAgICMgUm9vdCBvdXQgR2xpYmMgMi45IC0gMi4xMiBhbmQgR05VIE00IDEuNC4xMSAtIDEuNC4xNSB3aXRoIGJ1Z2d5CisgICAgICAjIGZhbHNlIHBvc2l0aXZlIHN0cnN0ci4KKyAgICAgIGFjX3NuaXBwZXQ9Y2hhbmdlJ3F1b3RlKDwsPilpbicnZGlyKDxpZicnZGVmPixtYWMsYnVnKScKKyAgICAgIGFjX3NuaXBwZXQ9JHthY19zbmlwcGV0fXBhdCdzdWJzdChhLFwoYlwpXHxcKGFcKSxcMSlkJ25sCisgICAgICBhY19zbmlwcGV0PSR7YWNfc25pcHBldH0ke2FzX25sfWlmJ2Vsc2UoaW4nJ2RleCguLndpLmQuLC5kLiksLTEsYnVnKScKKyAgICAgIGFjX3NuaXBwZXQ9JHthY19zbmlwcGV0fSR7YXNfbmx9aWYnZWxzZShpbicnZGV4KGRubAorOzoxMS06MTItOjEyLToxMi06MTItOjEyLToxMi06MTItOjEyLjoxMi46MTIuOjEyLjoxMi46MTIuOjEyLjoxMi46MTItLGRubAorOjEyLToxMi06MTItOjEyLToxMi06MTItOjEyLToxMi0pLC0xLCxzdHJzdHItYnVnMiknCisgICAgICB0ZXN0IC16ICJgJGFjX3BhdGhfTTQgLUYgY29uZnRlc3QubTRmIDwvZGV2L251bGwgMj4mMWAiIFwKKyAgICAgICYmIHRlc3QgLXogImBBU19FQ0hPKFskYWNfc25pcHBldF0pIHwgJGFjX3BhdGhfTTQgLS10cmFjZT1tYWMgMj4mMWAiIFwKKyAgICAgICYmIHRlc3QgLWYgY29uZnRlc3QubTRmIFwKKyAgICAgICYmIGFjX2N2X3BhdGhfTTQ9JGFjX3BhdGhfTTQgYWNfcGF0aF9NNF9mb3VuZD06CisgICAgICBybSAtZiBjb25mdGVzdC5tNGZdLAorICAgICAgW0FDX01TR19FUlJPUihbbm8gYWNjZXB0YWJsZSBtNCBjb3VsZCBiZSBmb3VuZCBpbiBcJFBBVEguCitHTlUgTTQgMS40LjYgb3IgbGF0ZXIgaXMgcmVxdWlyZWQ7IDEuNC4xNiBvciBuZXdlciBpcyByZWNvbW1lbmRlZC4KK0dOVSBNNCAxLjQuMTUgdXNlcyBhIGJ1Z2d5IHJlcGxhY2VtZW50IHN0cnN0ciBvbiBzb21lIHN5c3RlbXMuCitHbGliYyAyLjkgLSAyLjEyIGFuZCBHTlUgTTQgMS40LjExIC0gMS40LjE1IGhhdmUgYW5vdGhlciBzdHJzdHIgYnVnLl0pXSldKQorICBNND0kYWNfY3ZfcGF0aF9NNAorICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciAkYWNfY3ZfcGF0aF9NNCBhY2NlcHRzIC0tZ251XSwKKyAgICBbYWNfY3ZfcHJvZ19nbnVfbTRfZ251XSwKKyAgICBbY2FzZSBgJE00IC0taGVscCA8IC9kZXYvbnVsbCAyPiYxYCBpbgorICAgICAgKi0tZ251KikgYWNfY3ZfcHJvZ19nbnVfbTRfZ251PXllcyA7OworICAgICAgKikgYWNfY3ZfcHJvZ19nbnVfbTRfZ251PW5vIDs7CisgICAgZXNhY10pCisgIGlmIHRlc3QgIiRhY19jdl9wcm9nX2dudV9tNF9nbnUiID0geWVzOyB0aGVuCisgICAgTTRfR05VPS0tZ251CisgIGVsc2UKKyAgICBNNF9HTlU9CisgIGZpCisgIEFDX1NVQlNUKFtNNF9HTlVdKQorICBpZiB0ZXN0IHgkYWNfaGFkX3Bvc2l4bHlfY29ycmVjdCA9IHh5ZXM7IHRoZW4KKyAgICBQT1NJWExZX0NPUlJFQ1Q9OgorICAgIGlmIHRlc3QgJGFjX2N2X3Byb2dfZ251X200X2dudSA9IG5vOyB0aGVuCisgICAgICBBQ19NU0dfV0FSTihbdGhlIHZlcnNpb24gb2YgTTQgdGhhdCB3YXMgZm91bmQgZG9lcyBub3Qgc3VwcG9ydCAtZ10pCisgICAgICBBQ19NU0dfV0FSTihbdXNpbmcgaXQgd2l0aCBQT1NJWExZX0NPUlJFQ1Qgc2V0IG1heSBjYXVzZSBwcm9ibGVtc10pCisgICAgZmkKKyAgZmkKKyAgQUNfQ0FDSEVfQ0hFQ0soW2hvdyBtNCBzdXBwb3J0cyB0cmFjZSBmaWxlc10sIFthY19jdl9wcm9nX2dudV9tNF9kZWJ1Z2ZpbGVdLAorICAgIFtjYXNlIGAkTTQgLS1oZWxwIDwgL2Rldi9udWxsIDI+JjFgIGluCisgICAgICAqZGVidWdmaWxlKikgYWNfY3ZfcHJvZ19nbnVfbTRfZGVidWdmaWxlPS0tZGVidWdmaWxlIDs7CisgICAgICAqKSBhY19jdl9wcm9nX2dudV9tNF9kZWJ1Z2ZpbGU9LS1lcnJvci1vdXRwdXQgOzsKKyAgICBlc2FjXSkKKyAgQUNfU1VCU1QoW000X0RFQlVHRklMRV0sIFskYWNfY3ZfcHJvZ19nbnVfbTRfZGVidWdmaWxlXSkKK10pCisKKyMgQ29tcGF0aWJpbGl0eSBmb3IgYm9vdHN0cmFwcGluZyB3aXRoIEF1dG9jb25mIDIuNjEuCitkbmwgRklYTUUgLSByZXBsYWNlIHRoaXMgd2l0aCBBQ19QUkVSRVEoWzIuNjJdKSBhZnRlciB0aGUgcmVsZWFzZS4KKyMgQUNfUEFUSF9QUk9HU19GRUFUVVJFX0NIRUNLIHdhcyBhZGRlZCB0aGUgc2FtZSB0aW1lIHRoZSBzbGlnaHRseSBicm9rZW4sCisjIHVuZG9jdW1lbnRlZCBfQUNfUEFUSF9QUk9HX0ZFQVRVUkVfQ0hFQ0sgd2FzIGRlbGV0ZWQuCittNF9pZm5kZWYoW0FDX1BBVEhfUFJPR1NfRkVBVFVSRV9DSEVDS10sCisgIFttNF9kZWZpbmUoW0FDX1BBVEhfUFJPR1NfRkVBVFVSRV9DSEVDS10sCisgICAgW19BQ19QQVRIX1BST0dfRkVBVFVSRV9DSEVDSyhbJDFdLCBbJDJdLCBbJDNdLCBbJDVdKQorXSldKQpkaWZmIC0tZ2l0IGEvbTQvbWFsbG9jLm00IGIvbTQvbWFsbG9jLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYTQ4ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9tYWxsb2MubTQKQEAgLTAsMCArMSw5OCBAQAorIyBtYWxsb2MubTQgc2VyaWFsIDE0CitkbmwgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworbTRfdmVyc2lvbl9wcmVyZXEoWzIuNzBdLCBbXSAsWworCisjIFRoaXMgaXMgdGFrZW4gZnJvbSB0aGUgZm9sbG93aW5nIEF1dG9jb25mIHBhdGNoOgorIyBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWF1dG9jb25mLmdpdDthPWNvbW1pdGRpZmY7aD03ZmJiNTUzNzI3ZWQ3ZTBlNjg5YTE3NTk0YjU4NTU5ZWNmM2VhNmU5CitBQ19ERUZVTihbX0FDX0ZVTkNfTUFMTE9DX0lGXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKWRubAorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sIGZvciBjcm9zcy1jb21waWxlcworICBBQ19DSEVDS19IRUFERVJTKFtzdGRsaWIuaF0pCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgR05VIGxpYmMgY29tcGF0aWJsZSBtYWxsb2NdLAorICAgIFthY19jdl9mdW5jX21hbGxvY18wX25vbm51bGxdLAorICAgIFtBQ19SVU5fSUZFTFNFKAorICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgW1sjaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBIQVZFX1NURExJQl9ICisgICAgICAgICAgICAjIGluY2x1ZGUgPHN0ZGxpYi5oPgorICAgICAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgIGNoYXIgKm1hbGxvYyAoKTsKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgIF1dLAorICAgICAgICAgIFtbcmV0dXJuICEgbWFsbG9jICgwKTtdXSkKKyAgICAgICBdLAorICAgICAgIFthY19jdl9mdW5jX21hbGxvY18wX25vbm51bGw9eWVzXSwKKyAgICAgICBbYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPW5vXSwKKyAgICAgICBbY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gcGxhdGZvcm1zIHdoZXJlIHdlIGtub3cgdGhlIHJlc3VsdC4KKyAgICAgICAgICAqLWdudSogfCBmcmVlYnNkKiB8IG5ldGJzZCogfCBvcGVuYnNkKiBcCisgICAgICAgICAgfCBocHV4KiB8IHNvbGFyaXMqIHwgY3lnd2luKiB8IG1pbmd3KikKKyAgICAgICAgICAgIGFjX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbD15ZXMgOzsKKyAgICAgICAgICAjIElmIHdlIGRvbid0IGtub3csIGFzc3VtZSB0aGUgd29yc3QuCisgICAgICAgICAgKikgYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPW5vIDs7CisgICAgICAgIGVzYWMKKyAgICAgICBdKQorICAgIF0pCisgIEFTX0lGKFt0ZXN0ICRhY19jdl9mdW5jX21hbGxvY18wX25vbm51bGwgPSB5ZXNdLCBbJDFdLCBbJDJdKQorXSkjIF9BQ19GVU5DX01BTExPQ19JRgorCitdKQorCisjIGdsX0ZVTkNfTUFMTE9DX0dOVQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdCB3aGV0aGVyICdtYWxsb2MgKDApJyBpcyBoYW5kbGVkIGxpa2UgaW4gR05VIGxpYmMsIGFuZCByZXBsYWNlIG1hbGxvYyBpZgorIyBpdCBpcyBub3QuCitBQ19ERUZVTihbZ2xfRlVOQ19NQUxMT0NfR05VXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfU1RETElCX0hfREVGQVVMVFNdKQorICBkbmwgX0FDX0ZVTkNfTUFMTE9DX0lGIGlzIGRlZmluZWQgaW4gQXV0b2NvbmYuCisgIF9BQ19GVU5DX01BTExPQ19JRigKKyAgICBbQUNfREVGSU5FKFtIQVZFX01BTExPQ19HTlVdLCBbMV0sCisgICAgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91ciBzeXN0ZW0gaGFzIGEgR05VIGxpYmMgY29tcGF0aWJsZSAnbWFsbG9jJworICAgICAgICAgICAgICAgIGZ1bmN0aW9uLCBhbmQgdG8gMCBvdGhlcndpc2UuXSldLAorICAgIFtBQ19ERUZJTkUoW0hBVkVfTUFMTE9DX0dOVV0sIFswXSkKKyAgICAgUkVQTEFDRV9NQUxMT0M9MQorICAgIF0pCitdKQorCisjIGdsX0ZVTkNfTUFMTE9DX1BPU0lYCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3Qgd2hldGhlciAnbWFsbG9jJyBpcyBQT1NJWCBjb21wbGlhbnQgKHNldHMgZXJybm8gdG8gRU5PTUVNIHdoZW4gaXQKKyMgZmFpbHMpLCBhbmQgcmVwbGFjZSBtYWxsb2MgaWYgaXQgaXMgbm90LgorQUNfREVGVU4oW2dsX0ZVTkNfTUFMTE9DX1BPU0lYXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfU1RETElCX0hfREVGQVVMVFNdKQorICBBQ19SRVFVSVJFKFtnbF9DSEVDS19NQUxMT0NfUE9TSVhdKQorICBpZiB0ZXN0ICRnbF9jdl9mdW5jX21hbGxvY19wb3NpeCA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShbSEFWRV9NQUxMT0NfUE9TSVhdLCBbMV0sCisgICAgICBbRGVmaW5lIGlmIHRoZSAnbWFsbG9jJyBmdW5jdGlvbiBpcyBQT1NJWCBjb21wbGlhbnQuXSkKKyAgZWxzZQorICAgIFJFUExBQ0VfTUFMTE9DPTEKKyAgZmkKK10pCisKKyMgVGVzdCB3aGV0aGVyIG1hbGxvYywgcmVhbGxvYywgY2FsbG9jIGFyZSBQT1NJWCBjb21wbGlhbnQsCisjIFNldCBnbF9jdl9mdW5jX21hbGxvY19wb3NpeCB0byB5ZXMgb3Igbm8gYWNjb3JkaW5nbHkuCitBQ19ERUZVTihbZ2xfQ0hFQ0tfTUFMTE9DX1BPU0lYXSwKK1sKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgbWFsbG9jLCByZWFsbG9jLCBjYWxsb2MgYXJlIFBPU0lYIGNvbXBsaWFudF0sCisgICAgW2dsX2N2X2Z1bmNfbWFsbG9jX3Bvc2l4XSwKKyAgICBbCisgICAgICBkbmwgSXQgaXMgdG9vIGRhbmdlcm91cyB0byB0cnkgdG8gYWxsb2NhdGUgYSBsYXJnZSBhbW91bnQgb2YgbWVtb3J5OgorICAgICAgZG5sIHNvbWUgc3lzdGVtcyBnbyB0byB0aGVpciBrbmVlcyB3aGVuIHlvdSBkbyB0aGF0LiBTbyBhc3N1bWUgdGhhdAorICAgICAgZG5sIGFsbCBVbml4IGltcGxlbWVudGF0aW9ucyBvZiB0aGUgZnVuY3Rpb24gYXJlIFBPU0lYIGNvbXBsaWFudC4KKyAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgICBbW11dLAorICAgICAgICAgICBbWyNpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCisgICAgICAgICAgICAgY2hva2UgbWUKKyAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgIF1dKV0sCisgICAgICAgIFtnbF9jdl9mdW5jX21hbGxvY19wb3NpeD15ZXNdLAorICAgICAgICBbZ2xfY3ZfZnVuY19tYWxsb2NfcG9zaXg9bm9dKQorICAgIF0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvbWF0aF9oLm00IGIvbTQvbWF0aF9oLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOGU4MGQKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9tYXRoX2gubTQKQEAgLTAsMCArMSwzNTMgQEAKKyMgbWF0aF9oLm00IHNlcmlhbCAxMTQKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ2xfTUFUSF9IXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfTUFUSF9IX0RFRkFVTFRTXSkKKyAgZ2xfQ0hFQ0tfTkVYVF9IRUFERVJTKFttYXRoLmhdKQorCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIE5BTiBtYWNybyB3b3Jrc10sIFtnbF9jdl9oZWFkZXJfbWF0aF9uYW5fd29ya3NdLAorICAgIFtBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbQCU6QGluY2x1ZGUgPG1hdGguaD5dXSwKKyAgICAgIFtbLyogU29sYXJpcyAxMCBoYXMgYSBicm9rZW4gZGVmaW5pdGlvbiBvZiBOQU4uICBPdGhlciBwbGF0Zm9ybXMKKyAgICAgICAgZmFpbCB0byBwcm92aWRlIE5BTiwgb3IgcHJvdmlkZSBpdCBvbmx5IGluIEM5OSBtb2RlOyB0aGlzCisgICAgICAgIHRlc3Qgb25seSBuZWVkcyB0byBmYWlsIHdoZW4gTkFOIGlzIHByb3ZpZGVkIGJ1dCB3cm9uZy4gICovCisgICAgICAgICBmbG9hdCBmID0gMS4wZjsKKyNpZmRlZiBOQU4KKyAgICAgICAgIGYgPSBOQU47CisjZW5kaWYKKyAgICAgICAgIHJldHVybiBmID09IDA7XV0pXSwKKyAgICAgIFtnbF9jdl9oZWFkZXJfbWF0aF9uYW5fd29ya3M9eWVzXSwKKyAgICAgIFtnbF9jdl9oZWFkZXJfbWF0aF9uYW5fd29ya3M9bm9dKV0pCisgIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9tYXRoX25hbl93b3JrcyA9IG5vOyB0aGVuCisgICAgUkVQTEFDRV9OQU49MQorICBmaQorICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBIVUdFX1ZBTCB3b3Jrc10sIFtnbF9jdl9oZWFkZXJfbWF0aF9odWdlX3ZhbF93b3Jrc10sCisgICAgW0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tAJTpAaW5jbHVkZSA8bWF0aC5oPl1dLAorICAgICAgW1svKiBTb2xhcmlzIDEwIGhhcyBhIGJyb2tlbiBkZWZpbml0aW9uIG9mIEhVR0VfVkFMLiAgKi8KKyAgICAgICAgIGRvdWJsZSBkID0gSFVHRV9WQUw7CisgICAgICAgICByZXR1cm4gZCA9PSAwO11dKV0sCisgICAgICBbZ2xfY3ZfaGVhZGVyX21hdGhfaHVnZV92YWxfd29ya3M9eWVzXSwKKyAgICAgIFtnbF9jdl9oZWFkZXJfbWF0aF9odWdlX3ZhbF93b3Jrcz1ub10pXSkKKyAgaWYgdGVzdCAkZ2xfY3ZfaGVhZGVyX21hdGhfaHVnZV92YWxfd29ya3MgPSBubzsgdGhlbgorICAgIFJFUExBQ0VfSFVHRV9WQUw9MQorICBmaQorCisgIGRubCBDaGVjayBmb3IgZGVjbGFyYXRpb25zIG9mIGFueXRoaW5nIHdlIHdhbnQgdG8gcG9pc29uIGlmIHRoZQorICBkbmwgY29ycmVzcG9uZGluZyBnbnVsaWIgbW9kdWxlIGlzIG5vdCBpbiB1c2UuCisgIGdsX1dBUk5fT05fVVNFX1BSRVBBUkUoW1sjaW5jbHVkZSA8bWF0aC5oPl1dLAorICAgIFthY29zZiBhY29zbCBhc2luZiBhc2lubCBhdGFuZiBhdGFubAorICAgICBjYnJ0IGNicnRmIGNicnRsIGNlaWxmIGNlaWxsIGNvcHlzaWduIGNvcHlzaWduZiBjb3B5c2lnbmwgY29zZiBjb3NsIGNvc2hmCisgICAgIGV4cGYgZXhwbCBleHAyIGV4cDJmIGV4cDJsIGV4cG0xIGV4cG0xZiBleHBtMWwKKyAgICAgZmFic2YgZmFic2wgZmxvb3JmIGZsb29ybCBmbWEgZm1hZiBmbWFsCisgICAgIGZtb2QgZm1vZGYgZm1vZGwgZnJleHBmIGZyZXhwbCBoeXBvdGYgaHlwb3RsCisgICAgIGlsb2diIGlsb2diZiBpbG9nYmwKKyAgICAgbGRleHBmIGxkZXhwbAorICAgICBsb2cgbG9nZiBsb2dsIGxvZzEwIGxvZzEwZiBsb2cxMGwgbG9nMXAgbG9nMXBmIGxvZzFwbCBsb2cyIGxvZzJmIGxvZzJsCisgICAgIGxvZ2IgbG9nYmYgbG9nYmwKKyAgICAgbW9kZiBtb2RmZiBtb2RmbCBwb3dmCisgICAgIHJlbWFpbmRlciByZW1haW5kZXJmIHJlbWFpbmRlcmwKKyAgICAgcmludCByaW50ZiByaW50bCByb3VuZCByb3VuZGYgcm91bmRsIHNpbmYgc2lubCBzaW5oZiBzcXJ0ZiBzcXJ0bAorICAgICB0YW5mIHRhbmwgdGFuaGYgdHJ1bmMgdHJ1bmNmIHRydW5jbF0pCitdKQorCitBQ19ERUZVTihbZ2xfTUFUSF9NT0RVTEVfSU5ESUNBVE9SXSwKK1sKKyAgZG5sIFVzZSBBQ19SRVFVSVJFIGhlcmUsIHNvIHRoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGV4cGFuZGVkIG9uY2Ugb25seS4KKyAgQUNfUkVRVUlSRShbZ2xfTUFUSF9IX0RFRkFVTFRTXSkKKyAgZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEUoWyQxXSkKKyAgZG5sIERlZmluZSBpdCBhbHNvIGFzIGEgQyBtYWNybywgZm9yIHRoZSBiZW5lZml0IG9mIHRoZSB1bml0IHRlc3RzLgorICBnbF9NT0RVTEVfSU5ESUNBVE9SX0ZPUl9URVNUUyhbJDFdKQorXSkKKworQUNfREVGVU4oW2dsX01BVEhfSF9ERUZBVUxUU10sCitbCisgIEdOVUxJQl9BQ09TRj0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfQUNPU0ZdKQorICBHTlVMSUJfQUNPU0w9MDsgICAgICBBQ19TVUJTVChbR05VTElCX0FDT1NMXSkKKyAgR05VTElCX0FTSU5GPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9BU0lORl0pCisgIEdOVUxJQl9BU0lOTD0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfQVNJTkxdKQorICBHTlVMSUJfQVRBTkY9MDsgICAgICBBQ19TVUJTVChbR05VTElCX0FUQU5GXSkKKyAgR05VTElCX0FUQU5MPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9BVEFOTF0pCisgIEdOVUxJQl9BVEFOMkY9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfQVRBTjJGXSkKKyAgR05VTElCX0NCUlQ9MDsgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9DQlJUXSkKKyAgR05VTElCX0NCUlRGPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9DQlJURl0pCisgIEdOVUxJQl9DQlJUTD0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfQ0JSVExdKQorICBHTlVMSUJfQ0VJTD0wOyAgICAgICBBQ19TVUJTVChbR05VTElCX0NFSUxdKQorICBHTlVMSUJfQ0VJTEY9MDsgICAgICBBQ19TVUJTVChbR05VTElCX0NFSUxGXSkKKyAgR05VTElCX0NFSUxMPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9DRUlMTF0pCisgIEdOVUxJQl9DT1BZU0lHTj0wOyAgIEFDX1NVQlNUKFtHTlVMSUJfQ09QWVNJR05dKQorICBHTlVMSUJfQ09QWVNJR05GPTA7ICBBQ19TVUJTVChbR05VTElCX0NPUFlTSUdORl0pCisgIEdOVUxJQl9DT1BZU0lHTkw9MDsgIEFDX1NVQlNUKFtHTlVMSUJfQ09QWVNJR05MXSkKKyAgR05VTElCX0NPU0Y9MDsgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9DT1NGXSkKKyAgR05VTElCX0NPU0w9MDsgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9DT1NMXSkKKyAgR05VTElCX0NPU0hGPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9DT1NIRl0pCisgIEdOVUxJQl9FWFBGPTA7ICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRVhQRl0pCisgIEdOVUxJQl9FWFBMPTA7ICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRVhQTF0pCisgIEdOVUxJQl9FWFAyPTA7ICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRVhQMl0pCisgIEdOVUxJQl9FWFAyRj0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRVhQMkZdKQorICBHTlVMSUJfRVhQMkw9MDsgICAgICBBQ19TVUJTVChbR05VTElCX0VYUDJMXSkKKyAgR05VTElCX0VYUE0xPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9FWFBNMV0pCisgIEdOVUxJQl9FWFBNMUY9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfRVhQTTFGXSkKKyAgR05VTElCX0VYUE0xTD0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9FWFBNMUxdKQorICBHTlVMSUJfRkFCU0Y9MDsgICAgICBBQ19TVUJTVChbR05VTElCX0ZBQlNGXSkKKyAgR05VTElCX0ZBQlNMPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9GQUJTTF0pCisgIEdOVUxJQl9GTE9PUj0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRkxPT1JdKQorICBHTlVMSUJfRkxPT1JGPTA7ICAgICBBQ19TVUJTVChbR05VTElCX0ZMT09SRl0pCisgIEdOVUxJQl9GTE9PUkw9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfRkxPT1JMXSkKKyAgR05VTElCX0ZNQT0wOyAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9GTUFdKQorICBHTlVMSUJfRk1BRj0wOyAgICAgICBBQ19TVUJTVChbR05VTElCX0ZNQUZdKQorICBHTlVMSUJfRk1BTD0wOyAgICAgICBBQ19TVUJTVChbR05VTElCX0ZNQUxdKQorICBHTlVMSUJfRk1PRD0wOyAgICAgICBBQ19TVUJTVChbR05VTElCX0ZNT0RdKQorICBHTlVMSUJfRk1PREY9MDsgICAgICBBQ19TVUJTVChbR05VTElCX0ZNT0RGXSkKKyAgR05VTElCX0ZNT0RMPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9GTU9ETF0pCisgIEdOVUxJQl9GUkVYUEY9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfRlJFWFBGXSkKKyAgR05VTElCX0ZSRVhQPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9GUkVYUF0pCisgIEdOVUxJQl9GUkVYUEw9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfRlJFWFBMXSkKKyAgR05VTElCX0hZUE9UPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9IWVBPVF0pCisgIEdOVUxJQl9IWVBPVEY9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfSFlQT1RGXSkKKyAgR05VTElCX0hZUE9UTD0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9IWVBPVExdKQorICBHTlVMSUJfSUxPR0I9MDsgICAgICBBQ19TVUJTVChbR05VTElCX0lMT0dCXSkKKyAgR05VTElCX0lMT0dCRj0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9JTE9HQkZdKQorICBHTlVMSUJfSUxPR0JMPTA7ICAgICBBQ19TVUJTVChbR05VTElCX0lMT0dCTF0pCisgIEdOVUxJQl9JU0ZJTklURT0wOyAgIEFDX1NVQlNUKFtHTlVMSUJfSVNGSU5JVEVdKQorICBHTlVMSUJfSVNJTkY9MDsgICAgICBBQ19TVUJTVChbR05VTElCX0lTSU5GXSkKKyAgR05VTElCX0lTTkFOPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9JU05BTl0pCisgIEdOVUxJQl9JU05BTkY9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfSVNOQU5GXSkKKyAgR05VTElCX0lTTkFORD0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9JU05BTkRdKQorICBHTlVMSUJfSVNOQU5MPTA7ICAgICBBQ19TVUJTVChbR05VTElCX0lTTkFOTF0pCisgIEdOVUxJQl9MREVYUEY9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfTERFWFBGXSkKKyAgR05VTElCX0xERVhQTD0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9MREVYUExdKQorICBHTlVMSUJfTE9HPTA7ICAgICAgICBBQ19TVUJTVChbR05VTElCX0xPR10pCisgIEdOVUxJQl9MT0dGPTA7ICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfTE9HRl0pCisgIEdOVUxJQl9MT0dMPTA7ICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfTE9HTF0pCisgIEdOVUxJQl9MT0cxMD0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfTE9HMTBdKQorICBHTlVMSUJfTE9HMTBGPTA7ICAgICBBQ19TVUJTVChbR05VTElCX0xPRzEwRl0pCisgIEdOVUxJQl9MT0cxMEw9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfTE9HMTBMXSkKKyAgR05VTElCX0xPRzFQPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9MT0cxUF0pCisgIEdOVUxJQl9MT0cxUEY9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfTE9HMVBGXSkKKyAgR05VTElCX0xPRzFQTD0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9MT0cxUExdKQorICBHTlVMSUJfTE9HMj0wOyAgICAgICBBQ19TVUJTVChbR05VTElCX0xPRzJdKQorICBHTlVMSUJfTE9HMkY9MDsgICAgICBBQ19TVUJTVChbR05VTElCX0xPRzJGXSkKKyAgR05VTElCX0xPRzJMPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9MT0cyTF0pCisgIEdOVUxJQl9MT0dCPTA7ICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfTE9HQl0pCisgIEdOVUxJQl9MT0dCRj0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfTE9HQkZdKQorICBHTlVMSUJfTE9HQkw9MDsgICAgICBBQ19TVUJTVChbR05VTElCX0xPR0JMXSkKKyAgR05VTElCX01PREY9MDsgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9NT0RGXSkKKyAgR05VTElCX01PREZGPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9NT0RGRl0pCisgIEdOVUxJQl9NT0RGTD0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfTU9ERkxdKQorICBHTlVMSUJfUE9XRj0wOyAgICAgICBBQ19TVUJTVChbR05VTElCX1BPV0ZdKQorICBHTlVMSUJfUkVNQUlOREVSPTA7ICBBQ19TVUJTVChbR05VTElCX1JFTUFJTkRFUl0pCisgIEdOVUxJQl9SRU1BSU5ERVJGPTA7IEFDX1NVQlNUKFtHTlVMSUJfUkVNQUlOREVSRl0pCisgIEdOVUxJQl9SRU1BSU5ERVJMPTA7IEFDX1NVQlNUKFtHTlVMSUJfUkVNQUlOREVSTF0pCisgIEdOVUxJQl9SSU5UPTA7ICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfUklOVF0pCisgIEdOVUxJQl9SSU5URj0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfUklOVEZdKQorICBHTlVMSUJfUklOVEw9MDsgICAgICBBQ19TVUJTVChbR05VTElCX1JJTlRMXSkKKyAgR05VTElCX1JPVU5EPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9ST1VORF0pCisgIEdOVUxJQl9ST1VOREY9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfUk9VTkRGXSkKKyAgR05VTElCX1JPVU5ETD0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9ST1VORExdKQorICBHTlVMSUJfU0lHTkJJVD0wOyAgICBBQ19TVUJTVChbR05VTElCX1NJR05CSVRdKQorICBHTlVMSUJfU0lORj0wOyAgICAgICBBQ19TVUJTVChbR05VTElCX1NJTkZdKQorICBHTlVMSUJfU0lOTD0wOyAgICAgICBBQ19TVUJTVChbR05VTElCX1NJTkxdKQorICBHTlVMSUJfU0lOSEY9MDsgICAgICBBQ19TVUJTVChbR05VTElCX1NJTkhGXSkKKyAgR05VTElCX1NRUlRGPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9TUVJURl0pCisgIEdOVUxJQl9TUVJUTD0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfU1FSVExdKQorICBHTlVMSUJfVEFORj0wOyAgICAgICBBQ19TVUJTVChbR05VTElCX1RBTkZdKQorICBHTlVMSUJfVEFOTD0wOyAgICAgICBBQ19TVUJTVChbR05VTElCX1RBTkxdKQorICBHTlVMSUJfVEFOSEY9MDsgICAgICBBQ19TVUJTVChbR05VTElCX1RBTkhGXSkKKyAgR05VTElCX1RSVU5DPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9UUlVOQ10pCisgIEdOVUxJQl9UUlVOQ0Y9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfVFJVTkNGXSkKKyAgR05VTElCX1RSVU5DTD0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9UUlVOQ0xdKQorICBkbmwgQXNzdW1lIHByb3BlciBHTlUgYmVoYXZpb3IgdW5sZXNzIGFub3RoZXIgbW9kdWxlIHNheXMgb3RoZXJ3aXNlLgorICBIQVZFX0FDT1NGPTE7ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0FDT1NGXSkKKyAgSEFWRV9BQ09TTD0xOyAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9BQ09TTF0pCisgIEhBVkVfQVNJTkY9MTsgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfQVNJTkZdKQorICBIQVZFX0FTSU5MPTE7ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0FTSU5MXSkKKyAgSEFWRV9BVEFORj0xOyAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9BVEFORl0pCisgIEhBVkVfQVRBTkw9MTsgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfQVRBTkxdKQorICBIQVZFX0FUQU4yRj0xOyAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0FUQU4yRl0pCisgIEhBVkVfQ0JSVD0xOyAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfQ0JSVF0pCisgIEhBVkVfQ0JSVEY9MTsgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfQ0JSVEZdKQorICBIQVZFX0NCUlRMPTE7ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0NCUlRMXSkKKyAgSEFWRV9DT1BZU0lHTj0xOyAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9DT1BZU0lHTl0pCisgIEhBVkVfQ09QWVNJR05MPTE7ICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfQ09QWVNJR05MXSkKKyAgSEFWRV9DT1NGPTE7ICAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9DT1NGXSkKKyAgSEFWRV9DT1NMPTE7ICAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9DT1NMXSkKKyAgSEFWRV9DT1NIRj0xOyAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9DT1NIRl0pCisgIEhBVkVfRVhQRj0xOyAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfRVhQRl0pCisgIEhBVkVfRVhQTD0xOyAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfRVhQTF0pCisgIEhBVkVfRVhQTTE9MTsgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfRVhQTTFdKQorICBIQVZFX0VYUE0xRj0xOyAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0VYUE0xRl0pCisgIEhBVkVfRkFCU0Y9MTsgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfRkFCU0ZdKQorICBIQVZFX0ZBQlNMPTE7ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0ZBQlNMXSkKKyAgSEFWRV9GTUE9MTsgICAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9GTUFdKQorICBIQVZFX0ZNQUY9MTsgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0ZNQUZdKQorICBIQVZFX0ZNQUw9MTsgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0ZNQUxdKQorICBIQVZFX0ZNT0RGPTE7ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0ZNT0RGXSkKKyAgSEFWRV9GTU9ETD0xOyAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9GTU9ETF0pCisgIEhBVkVfRlJFWFBGPTE7ICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfRlJFWFBGXSkKKyAgSEFWRV9IWVBPVEY9MTsgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9IWVBPVEZdKQorICBIQVZFX0hZUE9UTD0xOyAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0hZUE9UTF0pCisgIEhBVkVfSUxPR0I9MTsgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfSUxPR0JdKQorICBIQVZFX0lMT0dCRj0xOyAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0lMT0dCRl0pCisgIEhBVkVfSUxPR0JMPTE7ICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfSUxPR0JMXSkKKyAgSEFWRV9JU05BTkY9MTsgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9JU05BTkZdKQorICBIQVZFX0lTTkFORD0xOyAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0lTTkFORF0pCisgIEhBVkVfSVNOQU5MPTE7ICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfSVNOQU5MXSkKKyAgSEFWRV9MREVYUEY9MTsgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9MREVYUEZdKQorICBIQVZFX0xPR0Y9MTsgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0xPR0ZdKQorICBIQVZFX0xPR0w9MTsgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0xPR0xdKQorICBIQVZFX0xPRzEwRj0xOyAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0xPRzEwRl0pCisgIEhBVkVfTE9HMTBMPTE7ICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfTE9HMTBMXSkKKyAgSEFWRV9MT0cxUD0xOyAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9MT0cxUF0pCisgIEhBVkVfTE9HMVBGPTE7ICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfTE9HMVBGXSkKKyAgSEFWRV9MT0cxUEw9MTsgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9MT0cxUExdKQorICBIQVZFX0xPR0JGPTE7ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0xPR0JGXSkKKyAgSEFWRV9MT0dCTD0xOyAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9MT0dCTF0pCisgIEhBVkVfTU9ERkY9MTsgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfTU9ERkZdKQorICBIQVZFX01PREZMPTE7ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX01PREZMXSkKKyAgSEFWRV9QT1dGPTE7ICAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9QT1dGXSkKKyAgSEFWRV9SRU1BSU5ERVI9MTsgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9SRU1BSU5ERVJdKQorICBIQVZFX1JFTUFJTkRFUkY9MTsgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1JFTUFJTkRFUkZdKQorICBIQVZFX1JJTlQ9MTsgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1JJTlRdKQorICBIQVZFX1JJTlRMPTE7ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1JJTlRMXSkKKyAgSEFWRV9TSU5GPTE7ICAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9TSU5GXSkKKyAgSEFWRV9TSU5MPTE7ICAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9TSU5MXSkKKyAgSEFWRV9TSU5IRj0xOyAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9TSU5IRl0pCisgIEhBVkVfU1FSVEY9MTsgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfU1FSVEZdKQorICBIQVZFX1NRUlRMPTE7ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1NRUlRMXSkKKyAgSEFWRV9UQU5GPTE7ICAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9UQU5GXSkKKyAgSEFWRV9UQU5MPTE7ICAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9UQU5MXSkKKyAgSEFWRV9UQU5IRj0xOyAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9UQU5IRl0pCisgIEhBVkVfREVDTF9BQ09TTD0xOyAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9BQ09TTF0pCisgIEhBVkVfREVDTF9BU0lOTD0xOyAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9BU0lOTF0pCisgIEhBVkVfREVDTF9BVEFOTD0xOyAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9BVEFOTF0pCisgIEhBVkVfREVDTF9DQlJURj0xOyAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9DQlJURl0pCisgIEhBVkVfREVDTF9DQlJUTD0xOyAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9DQlJUTF0pCisgIEhBVkVfREVDTF9DRUlMRj0xOyAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9DRUlMRl0pCisgIEhBVkVfREVDTF9DRUlMTD0xOyAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9DRUlMTF0pCisgIEhBVkVfREVDTF9DT1BZU0lHTkY9MTsgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9DT1BZU0lHTkZdKQorICBIQVZFX0RFQ0xfQ09TTD0xOyAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0RFQ0xfQ09TTF0pCisgIEhBVkVfREVDTF9FWFBMPTE7ICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9FWFBMXSkKKyAgSEFWRV9ERUNMX0VYUDI9MTsgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9ERUNMX0VYUDJdKQorICBIQVZFX0RFQ0xfRVhQMkY9MTsgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0RFQ0xfRVhQMkZdKQorICBIQVZFX0RFQ0xfRVhQMkw9MTsgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0RFQ0xfRVhQMkxdKQorICBIQVZFX0RFQ0xfRVhQTTFMPTE7ICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0RFQ0xfRVhQTTFMXSkKKyAgSEFWRV9ERUNMX0ZMT09SRj0xOyAgICAgICAgICBBQ19TVUJTVChbSEFWRV9ERUNMX0ZMT09SRl0pCisgIEhBVkVfREVDTF9GTE9PUkw9MTsgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9GTE9PUkxdKQorICBIQVZFX0RFQ0xfRlJFWFBMPTE7ICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0RFQ0xfRlJFWFBMXSkKKyAgSEFWRV9ERUNMX0xERVhQTD0xOyAgICAgICAgICBBQ19TVUJTVChbSEFWRV9ERUNMX0xERVhQTF0pCisgIEhBVkVfREVDTF9MT0dMPTE7ICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9MT0dMXSkKKyAgSEFWRV9ERUNMX0xPRzEwTD0xOyAgICAgICAgICBBQ19TVUJTVChbSEFWRV9ERUNMX0xPRzEwTF0pCisgIEhBVkVfREVDTF9MT0cyPTE7ICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9MT0cyXSkKKyAgSEFWRV9ERUNMX0xPRzJGPTE7ICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9ERUNMX0xPRzJGXSkKKyAgSEFWRV9ERUNMX0xPRzJMPTE7ICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9ERUNMX0xPRzJMXSkKKyAgSEFWRV9ERUNMX0xPR0I9MTsgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9ERUNMX0xPR0JdKQorICBIQVZFX0RFQ0xfUkVNQUlOREVSPTE7ICAgICAgIEFDX1NVQlNUKFtIQVZFX0RFQ0xfUkVNQUlOREVSXSkKKyAgSEFWRV9ERUNMX1JFTUFJTkRFUkw9MTsgICAgICBBQ19TVUJTVChbSEFWRV9ERUNMX1JFTUFJTkRFUkxdKQorICBIQVZFX0RFQ0xfUklOVEY9MTsgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0RFQ0xfUklOVEZdKQorICBIQVZFX0RFQ0xfUk9VTkQ9MTsgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0RFQ0xfUk9VTkRdKQorICBIQVZFX0RFQ0xfUk9VTkRGPTE7ICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0RFQ0xfUk9VTkRGXSkKKyAgSEFWRV9ERUNMX1JPVU5ETD0xOyAgICAgICAgICBBQ19TVUJTVChbSEFWRV9ERUNMX1JPVU5ETF0pCisgIEhBVkVfREVDTF9TSU5MPTE7ICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9TSU5MXSkKKyAgSEFWRV9ERUNMX1NRUlRMPTE7ICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9ERUNMX1NRUlRMXSkKKyAgSEFWRV9ERUNMX1RBTkw9MTsgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9ERUNMX1RBTkxdKQorICBIQVZFX0RFQ0xfVFJVTkM9MTsgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0RFQ0xfVFJVTkNdKQorICBIQVZFX0RFQ0xfVFJVTkNGPTE7ICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0RFQ0xfVFJVTkNGXSkKKyAgSEFWRV9ERUNMX1RSVU5DTD0xOyAgICAgICAgICBBQ19TVUJTVChbSEFWRV9ERUNMX1RSVU5DTF0pCisgIFJFUExBQ0VfQ0JSVEY9MDsgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfQ0JSVEZdKQorICBSRVBMQUNFX0NCUlRMPTA7ICAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0NCUlRMXSkKKyAgUkVQTEFDRV9DRUlMPTA7ICAgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9DRUlMXSkKKyAgUkVQTEFDRV9DRUlMRj0wOyAgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9DRUlMRl0pCisgIFJFUExBQ0VfQ0VJTEw9MDsgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfQ0VJTExdKQorICBSRVBMQUNFX0VYUE0xPTA7ICAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0VYUE0xXSkKKyAgUkVQTEFDRV9FWFBNMUY9MDsgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9FWFBNMUZdKQorICBSRVBMQUNFX0VYUDI9MDsgICAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0VYUDJdKQorICBSRVBMQUNFX0VYUDJMPTA7ICAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0VYUDJMXSkKKyAgUkVQTEFDRV9GQUJTTD0wOyAgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9GQUJTTF0pCisgIFJFUExBQ0VfRkxPT1I9MDsgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfRkxPT1JdKQorICBSRVBMQUNFX0ZMT09SRj0wOyAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0ZMT09SRl0pCisgIFJFUExBQ0VfRkxPT1JMPTA7ICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfRkxPT1JMXSkKKyAgUkVQTEFDRV9GTUE9MDsgICAgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9GTUFdKQorICBSRVBMQUNFX0ZNQUY9MDsgICAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0ZNQUZdKQorICBSRVBMQUNFX0ZNQUw9MDsgICAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0ZNQUxdKQorICBSRVBMQUNFX0ZNT0Q9MDsgICAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0ZNT0RdKQorICBSRVBMQUNFX0ZNT0RGPTA7ICAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0ZNT0RGXSkKKyAgUkVQTEFDRV9GTU9ETD0wOyAgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9GTU9ETF0pCisgIFJFUExBQ0VfRlJFWFBGPTA7ICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfRlJFWFBGXSkKKyAgUkVQTEFDRV9GUkVYUD0wOyAgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9GUkVYUF0pCisgIFJFUExBQ0VfRlJFWFBMPTA7ICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfRlJFWFBMXSkKKyAgUkVQTEFDRV9IVUdFX1ZBTD0wOyAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9IVUdFX1ZBTF0pCisgIFJFUExBQ0VfSFlQT1Q9MDsgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfSFlQT1RdKQorICBSRVBMQUNFX0hZUE9URj0wOyAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0hZUE9URl0pCisgIFJFUExBQ0VfSFlQT1RMPTA7ICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfSFlQT1RMXSkKKyAgUkVQTEFDRV9JTE9HQj0wOyAgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9JTE9HQl0pCisgIFJFUExBQ0VfSUxPR0JGPTA7ICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfSUxPR0JGXSkKKyAgUkVQTEFDRV9JU0ZJTklURT0wOyAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9JU0ZJTklURV0pCisgIFJFUExBQ0VfSVNJTkY9MDsgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfSVNJTkZdKQorICBSRVBMQUNFX0lTTkFOPTA7ICAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0lTTkFOXSkKKyAgUkVQTEFDRV9MREVYUEw9MDsgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9MREVYUExdKQorICBSRVBMQUNFX0xPRz0wOyAgICAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0xPR10pCisgIFJFUExBQ0VfTE9HRj0wOyAgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfTE9HRl0pCisgIFJFUExBQ0VfTE9HTD0wOyAgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfTE9HTF0pCisgIFJFUExBQ0VfTE9HMTA9MDsgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfTE9HMTBdKQorICBSRVBMQUNFX0xPRzEwRj0wOyAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0xPRzEwRl0pCisgIFJFUExBQ0VfTE9HMTBMPTA7ICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfTE9HMTBMXSkKKyAgUkVQTEFDRV9MT0cxUD0wOyAgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9MT0cxUF0pCisgIFJFUExBQ0VfTE9HMVBGPTA7ICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfTE9HMVBGXSkKKyAgUkVQTEFDRV9MT0cxUEw9MDsgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9MT0cxUExdKQorICBSRVBMQUNFX0xPRzI9MDsgICAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0xPRzJdKQorICBSRVBMQUNFX0xPRzJGPTA7ICAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0xPRzJGXSkKKyAgUkVQTEFDRV9MT0cyTD0wOyAgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9MT0cyTF0pCisgIFJFUExBQ0VfTE9HQj0wOyAgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfTE9HQl0pCisgIFJFUExBQ0VfTE9HQkY9MDsgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfTE9HQkZdKQorICBSRVBMQUNFX0xPR0JMPTA7ICAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0xPR0JMXSkKKyAgUkVQTEFDRV9NT0RGPTA7ICAgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9NT0RGXSkKKyAgUkVQTEFDRV9NT0RGRj0wOyAgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9NT0RGRl0pCisgIFJFUExBQ0VfTU9ERkw9MDsgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfTU9ERkxdKQorICBSRVBMQUNFX05BTj0wOyAgICAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX05BTl0pCisgIFJFUExBQ0VfUkVNQUlOREVSPTA7ICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfUkVNQUlOREVSXSkKKyAgUkVQTEFDRV9SRU1BSU5ERVJGPTA7ICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9SRU1BSU5ERVJGXSkKKyAgUkVQTEFDRV9SRU1BSU5ERVJMPTA7ICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9SRU1BSU5ERVJMXSkKKyAgUkVQTEFDRV9ST1VORD0wOyAgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9ST1VORF0pCisgIFJFUExBQ0VfUk9VTkRGPTA7ICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfUk9VTkRGXSkKKyAgUkVQTEFDRV9ST1VOREw9MDsgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9ST1VORExdKQorICBSRVBMQUNFX1NJR05CSVQ9MDsgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX1NJR05CSVRdKQorICBSRVBMQUNFX1NJR05CSVRfVVNJTkdfR0NDPTA7IEFDX1NVQlNUKFtSRVBMQUNFX1NJR05CSVRfVVNJTkdfR0NDXSkKKyAgUkVQTEFDRV9TUVJUTD0wOyAgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9TUVJUTF0pCisgIFJFUExBQ0VfVFJVTkM9MDsgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfVFJVTkNdKQorICBSRVBMQUNFX1RSVU5DRj0wOyAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX1RSVU5DRl0pCisgIFJFUExBQ0VfVFJVTkNMPTA7ICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfVFJVTkNMXSkKK10pCisKKyMgZ2xfTE9OR19ET1VCTEVfVlNfRE9VQkxFCisjIGRldGVybWluZXMgd2hldGhlciAnbG9uZyBkb3VibGUnIGFuZCAnZG91YmxlJyBoYXZlIHRoZSBzYW1lIHJlcHJlc2VudGF0aW9uLgorIyBTZXRzIHZhcmlhYmxlIEhBVkVfU0FNRV9MT05HX0RPVUJMRV9BU19ET1VCTEUgdG8gMCBvciAxLCBhbmQgZGVmaW5lcworIyBIQVZFX1NBTUVfTE9OR19ET1VCTEVfQVNfRE9VQkxFIGFjY29yZGluZ2x5LgorIyBUaGUgY3VycmVudGx5IGtub3duIHBsYXRmb3JtcyB3aGVyZSB0aGlzIGlzIHRoZSBjYXNlIGFyZToKKyMgTGludXgvSFBQQSwgTWluaXggMy4xLjgsIEFJWCA1LCBBSVggNiBhbmQgNyB3aXRoIHhsYywgTVNWQyA5LgorQUNfREVGVU4oW2dsX0xPTkdfRE9VQkxFX1ZTX0RPVUJMRV0sCitbCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGxvbmcgZG91YmxlIGFuZCBkb3VibGUgYXJlIHRoZSBzYW1lXSwKKyAgICBbZ2xfY3ZfbG9uZ19kb3VibGVfZXF1YWxzX2RvdWJsZV0sCisgICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgIFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8ZmxvYXQuaD5dXSwKKyAgICAgICAgICBbW3R5cGVkZWYgaW50IGNoZWNrW3NpemVvZiAobG9uZyBkb3VibGUpID09IHNpemVvZiAoZG91YmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgTERCTF9NQU5UX0RJRyA9PSBEQkxfTUFOVF9ESUcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIExEQkxfTUFYX0VYUCA9PSBEQkxfTUFYX0VYUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgTERCTF9NSU5fRVhQID09IERCTF9NSU5fRVhQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDEgOiAtMV07CisgICAgICAgICAgXV0pXSwKKyAgICAgICBbZ2xfY3ZfbG9uZ19kb3VibGVfZXF1YWxzX2RvdWJsZT15ZXNdLAorICAgICAgIFtnbF9jdl9sb25nX2RvdWJsZV9lcXVhbHNfZG91YmxlPW5vXSkKKyAgICBdKQorICBpZiB0ZXN0ICRnbF9jdl9sb25nX2RvdWJsZV9lcXVhbHNfZG91YmxlID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKFtIQVZFX1NBTUVfTE9OR19ET1VCTEVfQVNfRE9VQkxFXSwgWzFdLAorICAgICAgW0RlZmluZSB0byAxIGlmICdsb25nIGRvdWJsZScgYW5kICdkb3VibGUnIGhhdmUgdGhlIHNhbWUgcmVwcmVzZW50YXRpb24uXSkKKyAgICBIQVZFX1NBTUVfTE9OR19ET1VCTEVfQVNfRE9VQkxFPTEKKyAgZWxzZQorICAgIEhBVkVfU0FNRV9MT05HX0RPVUJMRV9BU19ET1VCTEU9MAorICBmaQorICBBQ19TVUJTVChbSEFWRV9TQU1FX0xPTkdfRE9VQkxFX0FTX0RPVUJMRV0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvbWJjaGFyLm00IGIvbTQvbWJjaGFyLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NTAzODEKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9tYmNoYXIubTQKQEAgLTAsMCArMSwxMyBAQAorIyBtYmNoYXIubTQgc2VyaWFsIDkKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBhdXRvY29uZiB0ZXN0cyByZXF1aXJlZCBmb3IgdXNlIG9mIG1iY2hhci5tNAorZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorCitBQ19ERUZVTihbZ2xfTUJDSEFSXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSkKK10pCmRpZmYgLS1naXQgYS9tNC9tYml0ZXIubTQgYi9tNC9tYml0ZXIubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlhMWVmMwotLS0gL2Rldi9udWxsCisrKyBiL200L21iaXRlci5tNApAQCAtMCwwICsxLDE0IEBACisjIG1iaXRlci5tNCBzZXJpYWwgNworZG5sIENvcHlyaWdodCAoQykgMjAwNSwgMjAwOC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBhdXRvY29uZiB0ZXN0cyByZXF1aXJlZCBmb3IgdXNlIG9mIG1iaXRlci5oCitkbmwgRnJvbSBCcnVubyBIYWlibGUuCisKK0FDX0RFRlVOKFtnbF9NQklURVJdLAorWworICBBQ19SRVFVSVJFKFtBQ19UWVBFX01CU1RBVEVfVF0pCisgIDoKK10pCmRpZmYgLS1naXQgYS9tNC9tYnJ0b3djLm00IGIvbTQvbWJydG93Yy5tNAppbmRleCBhM2JkOTExLi44ZjgyOWM4IDEwMDY0NAotLS0gYS9tNC9tYnJ0b3djLm00CisrKyBiL200L21icnRvd2MubTQKQEAgLTEsMjIgKzEsNTYzIEBACi0jIG1icnRvd2MubTQgc2VyaWFsIDgKLWRubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgMjAwNC0yMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBtYnJ0b3djLm00IHNlcmlhbCAyNQorZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCAyMDA0LTIwMDUsIDIwMDgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitkbmwgSW5jLgogZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKIGRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKK0FDX0RFRlVOKFtnbF9GVU5DX01CUlRPV0NdLAorWworICBBQ19SRVFVSVJFKFtnbF9XQ0hBUl9IX0RFRkFVTFRTXSkKKworICBBQ19SRVFVSVJFKFtBQ19UWVBFX01CU1RBVEVfVF0pCisgIGdsX01CU1RBVEVfVF9CUk9LRU4KKworICBBQ19DSEVDS19GVU5DU19PTkNFKFttYnJ0b3djXSkKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19tYnJ0b3djID0gbm87IHRoZW4KKyAgICBIQVZFX01CUlRPV0M9MAorICAgIEFDX0NIRUNLX0RFQ0xTKFttYnJ0b3djXSwsLCBbWworLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQorICAgPHdjaGFyLmg+LgorICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorXV0pCisgICAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX21icnRvd2MgPSB5ZXM7IHRoZW4KKyAgICAgIGRubCBPbiBNaW5peCAzLjEuOCwgdGhlIHN5c3RlbSdzIDx3Y2hhci5oPiBkZWNsYXJlcyBtYnJ0b3djKCkgYWx0aG91Z2gKKyAgICAgIGRubCBpdCBkb2VzIG5vdCBoYXZlIHRoZSBmdW5jdGlvbi4gQXZvaWQgYSBjb2xsaXNpb24gd2l0aCBnbnVsaWIncworICAgICAgZG5sIHJlcGxhY2VtZW50LgorICAgICAgUkVQTEFDRV9NQlJUT1dDPTEKKyAgICBmaQorICBlbHNlCisgICAgaWYgdGVzdCAkUkVQTEFDRV9NQlNUQVRFX1QgPSAxOyB0aGVuCisgICAgICBSRVBMQUNFX01CUlRPV0M9MQorICAgIGVsc2UKKyAgICAgIGdsX01CUlRPV0NfTlVMTF9BUkcxCisgICAgICBnbF9NQlJUT1dDX05VTExfQVJHMgorICAgICAgZ2xfTUJSVE9XQ19SRVRWQUwKKyAgICAgIGdsX01CUlRPV0NfTlVMX1JFVFZBTAorICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfbWJydG93Y19udWxsX2FyZzEiIGluCisgICAgICAgICp5ZXMpIDs7CisgICAgICAgICopIEFDX0RFRklORShbTUJSVE9XQ19OVUxMX0FSRzFfQlVHXSwgWzFdLAorICAgICAgICAgICAgIFtEZWZpbmUgaWYgdGhlIG1icnRvd2MgZnVuY3Rpb24gaGFzIHRoZSBOVUxMIHB3YyBhcmd1bWVudCBidWcuXSkKKyAgICAgICAgICAgUkVQTEFDRV9NQlJUT1dDPTEKKyAgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX21icnRvd2NfbnVsbF9hcmcyIiBpbgorICAgICAgICAqeWVzKSA7OworICAgICAgICAqKSBBQ19ERUZJTkUoW01CUlRPV0NfTlVMTF9BUkcyX0JVR10sIFsxXSwKKyAgICAgICAgICAgICBbRGVmaW5lIGlmIHRoZSBtYnJ0b3djIGZ1bmN0aW9uIGhhcyB0aGUgTlVMTCBzdHJpbmcgYXJndW1lbnQgYnVnLl0pCisgICAgICAgICAgIFJFUExBQ0VfTUJSVE9XQz0xCisgICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19tYnJ0b3djX3JldHZhbCIgaW4KKyAgICAgICAgKnllcykgOzsKKyAgICAgICAgKikgQUNfREVGSU5FKFtNQlJUT1dDX1JFVFZBTF9CVUddLCBbMV0sCisgICAgICAgICAgICAgW0RlZmluZSBpZiB0aGUgbWJydG93YyBmdW5jdGlvbiByZXR1cm5zIGEgd3JvbmcgcmV0dXJuIHZhbHVlLl0pCisgICAgICAgICAgIFJFUExBQ0VfTUJSVE9XQz0xCisgICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19tYnJ0b3djX251bF9yZXR2YWwiIGluCisgICAgICAgICp5ZXMpIDs7CisgICAgICAgICopIEFDX0RFRklORShbTUJSVE9XQ19OVUxfUkVUVkFMX0JVR10sIFsxXSwKKyAgICAgICAgICAgICBbRGVmaW5lIGlmIHRoZSBtYnJ0b3djIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiAwIGZvciBhIE5VTCBjaGFyYWN0ZXIuXSkKKyAgICAgICAgICAgUkVQTEFDRV9NQlJUT1dDPTEKKyAgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorXSkKKworZG5sIFRlc3Qgd2hldGhlciBtYnNpbml0KCkgYW5kIG1icnRvd2MoKSBuZWVkIHRvIGJlIG92ZXJyaWRkZW4gaW4gYSB3YXkgdGhhdAorZG5sIHJlZGVmaW5lcyB0aGUgc2VtYW50aWNzIG9mIHRoZSBnaXZlbiBtYnN0YXRlX3QgdHlwZS4KK2RubCBSZXN1bHQgaXMgUkVQTEFDRV9NQlNUQVRFX1QuCitkbmwgV2hlbiB0aGlzIGlzIHNldCB0byAxLCB3ZSByZXBsYWNlIGJvdGggbWJzaW5pdCgpIGFuZCBtYnJ0b3djKCksIGluIG9yZGVyIHRvCitkbmwgYXZvaWQgaW5jb25zaXN0ZW5jaWVzLgorCitBQ19ERUZVTihbZ2xfTUJTVEFURV9UX0JST0tFTl0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1dDSEFSX0hfREVGQVVMVFNdKQorCisgIEFDX1JFUVVJUkUoW0FDX1RZUEVfTUJTVEFURV9UXSkKKyAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbbWJzaW5pdF0pCisgIEFDX0NIRUNLX0ZVTkNTX09OQ0UoW21icnRvd2NdKQorICBpZiB0ZXN0ICRhY19jdl9mdW5jX21ic2luaXQgPSB5ZXMgJiYgdGVzdCAkYWNfY3ZfZnVuY19tYnJ0b3djID0geWVzOyB0aGVuCisgICAgZ2xfTUJSVE9XQ19JTkNPTVBMRVRFX1NUQVRFCisgICAgZ2xfTUJSVE9XQ19TQU5JVFlDSEVDSworICAgIFJFUExBQ0VfTUJTVEFURV9UPTAKKyAgICBjYXNlICIkZ2xfY3ZfZnVuY19tYnJ0b3djX2luY29tcGxldGVfc3RhdGUiIGluCisgICAgICAqeWVzKSA7OworICAgICAgKikgUkVQTEFDRV9NQlNUQVRFX1Q9MSA7OworICAgIGVzYWMKKyAgICBjYXNlICIkZ2xfY3ZfZnVuY19tYnJ0b3djX3Nhbml0eWNoZWNrIiBpbgorICAgICAgKnllcykgOzsKKyAgICAgICopIFJFUExBQ0VfTUJTVEFURV9UPTEgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBSRVBMQUNFX01CU1RBVEVfVD0xCisgIGZpCitdKQorCitkbmwgVGVzdCB3aGV0aGVyIG1icnRvd2MgcHV0cyB0aGUgc3RhdGUgaW50byBub24taW5pdGlhbCBzdGF0ZSB3aGVuIHBhcnNpbmcgYW4KK2RubCBpbmNvbXBsZXRlIG11bHRpYnl0ZSBjaGFyYWN0ZXIuCitkbmwgUmVzdWx0IGlzIGdsX2N2X2Z1bmNfbWJydG93Y19pbmNvbXBsZXRlX3N0YXRlLgorCitBQ19ERUZVTihbZ2xfTUJSVE9XQ19JTkNPTVBMRVRFX1NUQVRFXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCisgIEFDX1JFUVVJUkUoW2d0X0xPQ0FMRV9KQV0pCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkgZG5sIGZvciBjcm9zcy1jb21waWxlcworICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBtYnJ0b3djIGhhbmRsZXMgaW5jb21wbGV0ZSBjaGFyYWN0ZXJzXSwKKyAgICBbZ2xfY3ZfZnVuY19tYnJ0b3djX2luY29tcGxldGVfc3RhdGVdLAorICAgIFsKKyAgICAgIGRubCBJbml0aWFsIGd1ZXNzLCB1c2VkIHdoZW4gY3Jvc3MtY29tcGlsaW5nIG9yIHdoZW4gbm8gc3VpdGFibGUgbG9jYWxlCisgICAgICBkbmwgaXMgcHJlc2VudC4KK2NoYW5nZXF1b3RlKCwpZG5sCisgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3Mgbm8gb24gQUlYIGFuZCBPU0YvMS4KKyAgICAgICAgYWl4KiB8IG9zZiopIGdsX2N2X2Z1bmNfbWJydG93Y19pbmNvbXBsZXRlX3N0YXRlPSJndWVzc2luZyBubyIgOzsKKyAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG90aGVyd2lzZS4KKyAgICAgICAgKikgICAgICAgICAgIGdsX2N2X2Z1bmNfbWJydG93Y19pbmNvbXBsZXRlX3N0YXRlPSJndWVzc2luZyB5ZXMiIDs7CisgICAgICBlc2FjCitjaGFuZ2VxdW90ZShbLF0pZG5sCisgICAgICBpZiB0ZXN0ICRMT0NBTEVfSkEgIT0gbm9uZTsgdGhlbgorICAgICAgICBBQ19SVU5fSUZFTFNFKAorICAgICAgICAgIFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgPGxvY2FsZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQorICAgPHdjaGFyLmg+LgorICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgoraW50IG1haW4gKCkKK3sKKyAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCAiJExPQ0FMRV9KQSIpICE9IE5VTEwpCisgICAgeworICAgICAgY29uc3QgY2hhciBpbnB1dFtdID0gIkJcMjE3XDI1M1wzNDRcMjE3XDI1MVwzMTZlciI7IC8qICJCw7zDn2VyIiAqLworICAgICAgbWJzdGF0ZV90IHN0YXRlOworICAgICAgd2NoYXJfdCB3YzsKKworICAgICAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisgICAgICBpZiAobWJydG93YyAoJndjLCBpbnB1dCArIDEsIDEsICZzdGF0ZSkgPT0gKHNpemVfdCkoLTIpKQorICAgICAgICBpZiAobWJzaW5pdCAoJnN0YXRlKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgIHJldHVybiAwOworfV1dKV0sCisgICAgICAgICAgW2dsX2N2X2Z1bmNfbWJydG93Y19pbmNvbXBsZXRlX3N0YXRlPXllc10sCisgICAgICAgICAgW2dsX2N2X2Z1bmNfbWJydG93Y19pbmNvbXBsZXRlX3N0YXRlPW5vXSwKKyAgICAgICAgICBbOl0pCisgICAgICBmaQorICAgIF0pCitdKQorCitkbmwgVGVzdCB3aGV0aGVyIG1icnRvd2Mgd29ya3Mgbm90IHdvcnNlIHRoYW4gbWJ0b3djLgorZG5sIFJlc3VsdCBpcyBnbF9jdl9mdW5jX21icnRvd2Nfc2FuaXR5Y2hlY2suCisKK0FDX0RFRlVOKFtnbF9NQlJUT1dDX1NBTklUWUNIRUNLXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCisgIEFDX1JFUVVJUkUoW2d0X0xPQ0FMRV9aSF9DTl0pCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkgZG5sIGZvciBjcm9zcy1jb21waWxlcworICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBtYnJ0b3djIHdvcmtzIGFzIHdlbGwgYXMgbWJ0b3djXSwKKyAgICBbZ2xfY3ZfZnVuY19tYnJ0b3djX3Nhbml0eWNoZWNrXSwKKyAgICBbCisgICAgICBkbmwgSW5pdGlhbCBndWVzcywgdXNlZCB3aGVuIGNyb3NzLWNvbXBpbGluZyBvciB3aGVuIG5vIHN1aXRhYmxlIGxvY2FsZQorICAgICAgZG5sIGlzIHByZXNlbnQuCitjaGFuZ2VxdW90ZSgsKWRubAorICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgICAgICMgR3Vlc3Mgbm8gb24gU29sYXJpcyA4LgorICAgICAgICBzb2xhcmlzMi44KSBnbF9jdl9mdW5jX21icnRvd2Nfc2FuaXR5Y2hlY2s9Imd1ZXNzaW5nIG5vIiA7OworICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvdGhlcndpc2UuCisgICAgICAgICopICAgICAgICAgIGdsX2N2X2Z1bmNfbWJydG93Y19zYW5pdHljaGVjaz0iZ3Vlc3NpbmcgeWVzIiA7OworICAgICAgZXNhYworY2hhbmdlcXVvdGUoWyxdKWRubAorICAgICAgaWYgdGVzdCAkTE9DQUxFX1pIX0NOICE9IG5vbmU7IHRoZW4KKyAgICAgICAgQUNfUlVOX0lGRUxTRSgKKyAgICAgICAgICBbQUNfTEFOR19TT1VSQ0UoW1sKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKy8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUKKyAgIDx3Y2hhci5oPi4KKyAgIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZQorICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KK2ludCBtYWluICgpCit7CisgIC8qIFRoaXMgZmFpbHMgb24gU29sYXJpcyA4OgorICAgICBtYnJ0b3djIHJldHVybnMgMiwgYW5kIHNldHMgd2MgdG8gMHgwMEYwLgorICAgICBtYnRvd2MgcmV0dXJucyA0IChjb3JyZWN0KSBhbmQgc2V0cyB3YyB0byAweDVFREMuICAqLworICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICIkTE9DQUxFX1pIX0NOIikgIT0gTlVMTCkKKyAgICB7CisgICAgICBjaGFyIGlucHV0W10gPSAiQlwyNTBcMjcxXDIwMVwwNjBcMjExXDA3MGVyIjsgLyogIkLDvMOfZXIiICovCisgICAgICBtYnN0YXRlX3Qgc3RhdGU7CisgICAgICB3Y2hhcl90IHdjOworCisgICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKyAgICAgIGlmIChtYnJ0b3djICgmd2MsIGlucHV0ICsgMywgNiwgJnN0YXRlKSAhPSA0CisgICAgICAgICAgJiYgbWJ0b3djICgmd2MsIGlucHV0ICsgMywgNikgPT0gNCkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICByZXR1cm4gMDsKK31dXSldLAorICAgICAgICAgIFtnbF9jdl9mdW5jX21icnRvd2Nfc2FuaXR5Y2hlY2s9eWVzXSwKKyAgICAgICAgICBbZ2xfY3ZfZnVuY19tYnJ0b3djX3Nhbml0eWNoZWNrPW5vXSwKKyAgICAgICAgICBbOl0pCisgICAgICBmaQorICAgIF0pCitdKQorCitkbmwgVGVzdCB3aGV0aGVyIG1icnRvd2Mgc3VwcG9ydHMgYSBOVUxMIHB3YyBhcmd1bWVudCBjb3JyZWN0bHkuCitkbmwgUmVzdWx0IGlzIGdsX2N2X2Z1bmNfbWJydG93Y19udWxsX2FyZzEuCisKK0FDX0RFRlVOKFtnbF9NQlJUT1dDX05VTExfQVJHMV0sCitbCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorICBBQ19SRVFVSVJFKFtndF9MT0NBTEVfRlJfVVRGOF0pCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkgZG5sIGZvciBjcm9zcy1jb21waWxlcworICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBtYnJ0b3djIGhhbmRsZXMgYSBOVUxMIHB3YyBhcmd1bWVudF0sCisgICAgW2dsX2N2X2Z1bmNfbWJydG93Y19udWxsX2FyZzFdLAorICAgIFsKKyAgICAgIGRubCBJbml0aWFsIGd1ZXNzLCB1c2VkIHdoZW4gY3Jvc3MtY29tcGlsaW5nIG9yIHdoZW4gbm8gc3VpdGFibGUgbG9jYWxlCisgICAgICBkbmwgaXMgcHJlc2VudC4KK2NoYW5nZXF1b3RlKCwpZG5sCisgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgICMgR3Vlc3Mgbm8gb24gU29sYXJpcy4KKyAgICAgICAgc29sYXJpcyopIGdsX2N2X2Z1bmNfbWJydG93Y19udWxsX2FyZzE9Imd1ZXNzaW5nIG5vIiA7OworICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb3RoZXJ3aXNlLgorICAgICAgICAqKSAgICAgICAgZ2xfY3ZfZnVuY19tYnJ0b3djX251bGxfYXJnMT0iZ3Vlc3NpbmcgeWVzIiA7OworICAgICAgZXNhYworY2hhbmdlcXVvdGUoWyxdKWRubAorICAgICAgaWYgdGVzdCAkTE9DQUxFX0ZSX1VURjggIT0gbm9uZTsgdGhlbgorICAgICAgICBBQ19SVU5fSUZFTFNFKAorICAgICAgICAgIFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgPGxvY2FsZS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQorICAgPHdjaGFyLmg+LgorICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgoraW50IG1haW4gKCkKK3sKKyAgaW50IHJlc3VsdCA9IDA7CisKKyAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCAiJExPQ0FMRV9GUl9VVEY4IikgIT0gTlVMTCkKKyAgICB7CisgICAgICBjaGFyIGlucHV0W10gPSAiXDMwM1wyMzdlciI7CisgICAgICBtYnN0YXRlX3Qgc3RhdGU7CisgICAgICB3Y2hhcl90IHdjOworICAgICAgc2l6ZV90IHJldDsKKworICAgICAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisgICAgICB3YyA9ICh3Y2hhcl90KSAweEJBREZBQ0U7CisgICAgICByZXQgPSBtYnJ0b3djICgmd2MsIGlucHV0LCA1LCAmc3RhdGUpOworICAgICAgaWYgKHJldCAhPSAyKQorICAgICAgICByZXN1bHQgfD0gMTsKKyAgICAgIGlmICghbWJzaW5pdCAoJnN0YXRlKSkKKyAgICAgICAgcmVzdWx0IHw9IDI7CisKKyAgICAgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworICAgICAgcmV0ID0gbWJydG93YyAoTlVMTCwgaW5wdXQsIDUsICZzdGF0ZSk7CisgICAgICBpZiAocmV0ICE9IDIpIC8qIFNvbGFyaXMgNyBmYWlscyBoZXJlOiByZXQgaXMgLTEuICAqLworICAgICAgICByZXN1bHQgfD0gNDsKKyAgICAgIGlmICghbWJzaW5pdCAoJnN0YXRlKSkKKyAgICAgICAgcmVzdWx0IHw9IDg7CisgICAgfQorICByZXR1cm4gcmVzdWx0OworfV1dKV0sCisgICAgICAgICAgW2dsX2N2X2Z1bmNfbWJydG93Y19udWxsX2FyZzE9eWVzXSwKKyAgICAgICAgICBbZ2xfY3ZfZnVuY19tYnJ0b3djX251bGxfYXJnMT1ub10sCisgICAgICAgICAgWzpdKQorICAgICAgZmkKKyAgICBdKQorXSkKKworZG5sIFRlc3Qgd2hldGhlciBtYnJ0b3djIHN1cHBvcnRzIGEgTlVMTCBzdHJpbmcgYXJndW1lbnQgY29ycmVjdGx5LgorZG5sIFJlc3VsdCBpcyBnbF9jdl9mdW5jX21icnRvd2NfbnVsbF9hcmcyLgorCitBQ19ERUZVTihbZ2xfTUJSVE9XQ19OVUxMX0FSRzJdLAorWworICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKyAgQUNfUkVRVUlSRShbZ3RfTE9DQUxFX0ZSX1VURjhdKQorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pIGRubCBmb3IgY3Jvc3MtY29tcGlsZXMKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgbWJydG93YyBoYW5kbGVzIGEgTlVMTCBzdHJpbmcgYXJndW1lbnRdLAorICAgIFtnbF9jdl9mdW5jX21icnRvd2NfbnVsbF9hcmcyXSwKKyAgICBbCisgICAgICBkbmwgSW5pdGlhbCBndWVzcywgdXNlZCB3aGVuIGNyb3NzLWNvbXBpbGluZyBvciB3aGVuIG5vIHN1aXRhYmxlIGxvY2FsZQorICAgICAgZG5sIGlzIHByZXNlbnQuCitjaGFuZ2VxdW90ZSgsKWRubAorICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICMgR3Vlc3Mgbm8gb24gT1NGLzEuCisgICAgICAgIG9zZiopIGdsX2N2X2Z1bmNfbWJydG93Y19udWxsX2FyZzI9Imd1ZXNzaW5nIG5vIiA7OworICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvdGhlcndpc2UuCisgICAgICAgICopICAgIGdsX2N2X2Z1bmNfbWJydG93Y19udWxsX2FyZzI9Imd1ZXNzaW5nIHllcyIgOzsKKyAgICAgIGVzYWMKK2NoYW5nZXF1b3RlKFssXSlkbmwKKyAgICAgIGlmIHRlc3QgJExPQ0FMRV9GUl9VVEY4ICE9IG5vbmU7IHRoZW4KKyAgICAgICAgQUNfUlVOX0lGRUxTRSgKKyAgICAgICAgICBbQUNfTEFOR19TT1VSQ0UoW1sKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKy8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUKKyAgIDx3Y2hhci5oPi4KKyAgIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZQorICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KK2ludCBtYWluICgpCit7CisgIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgIiRMT0NBTEVfRlJfVVRGOCIpICE9IE5VTEwpCisgICAgeworICAgICAgbWJzdGF0ZV90IHN0YXRlOworICAgICAgd2NoYXJfdCB3YzsKKyAgICAgIGludCByZXQ7CisKKyAgICAgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworICAgICAgd2MgPSAod2NoYXJfdCkgMHhCQURGQUNFOworICAgICAgbWJydG93YyAoJndjLCBOVUxMLCA1LCAmc3RhdGUpOworICAgICAgLyogQ2hlY2sgdGhhdCB3YyB3YXMgbm90IG1vZGlmaWVkLiAgKi8KKyAgICAgIGlmICh3YyAhPSAod2NoYXJfdCkgMHhCQURGQUNFKQorICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgIHJldHVybiAwOworfV1dKV0sCisgICAgICAgICAgW2dsX2N2X2Z1bmNfbWJydG93Y19udWxsX2FyZzI9eWVzXSwKKyAgICAgICAgICBbZ2xfY3ZfZnVuY19tYnJ0b3djX251bGxfYXJnMj1ub10sCisgICAgICAgICAgWzpdKQorICAgICAgZmkKKyAgICBdKQorXSkKKworZG5sIFRlc3Qgd2hldGhlciBtYnJ0b3djLCB3aGVuIHBhcnNpbmcgdGhlIGVuZCBvZiBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIsCitkbmwgY29ycmVjdGx5IHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdlcmUgbmVlZGVkIHRvIGNvbXBsZXRlIHRoZQorZG5sIGNoYXJhY3RlciAobm90IHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgb2YgdGhlIG11bHRpYnl0ZSBjaGFyYWN0ZXIpLgorZG5sIFJlc3VsdCBpcyBnbF9jdl9mdW5jX21icnRvd2NfcmV0dmFsLgorCitBQ19ERUZVTihbZ2xfTUJSVE9XQ19SRVRWQUxdLAorWworICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKyAgQUNfUkVRVUlSRShbZ3RfTE9DQUxFX0ZSX1VURjhdKQorICBBQ19SRVFVSVJFKFtndF9MT0NBTEVfSkFdKQorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIG1icnRvd2MgaGFzIGEgY29ycmVjdCByZXR1cm4gdmFsdWVdLAorICAgIFtnbF9jdl9mdW5jX21icnRvd2NfcmV0dmFsXSwKKyAgICBbCisgICAgICBkbmwgSW5pdGlhbCBndWVzcywgdXNlZCB3aGVuIGNyb3NzLWNvbXBpbGluZyBvciB3aGVuIG5vIHN1aXRhYmxlIGxvY2FsZQorICAgICAgZG5sIGlzIHByZXNlbnQuCitjaGFuZ2VxdW90ZSgsKWRubAorICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3Mgbm8gb24gSFAtVVgsIFNvbGFyaXMsIG5hdGl2ZSBXaW5kb3dzLgorICAgICAgICBocHV4KiB8IHNvbGFyaXMqIHwgbWluZ3cqKSBnbF9jdl9mdW5jX21icnRvd2NfcmV0dmFsPSJndWVzc2luZyBubyIgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb3RoZXJ3aXNlLgorICAgICAgICAqKSAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX21icnRvd2NfcmV0dmFsPSJndWVzc2luZyB5ZXMiIDs7CisgICAgICBlc2FjCitjaGFuZ2VxdW90ZShbLF0pZG5sCisgICAgICBpZiB0ZXN0ICRMT0NBTEVfRlJfVVRGOCAhPSBub25lIHx8IHRlc3QgJExPQ0FMRV9KQSAhPSBub25lIFwKKyAgICAgICAgIHx8IHsgY2FzZSAiJGhvc3Rfb3MiIGluIG1pbmd3KikgdHJ1ZTs7ICopIGZhbHNlOzsgZXNhYzsgfTsgdGhlbgorICAgICAgICBBQ19SVU5fSUZFTFNFKAorICAgICAgICAgIFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgPGxvY2FsZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQorICAgPHdjaGFyLmg+LgorICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgoraW50IG1haW4gKCkKK3sKKyAgaW50IHJlc3VsdCA9IDA7CisgIGludCBmb3VuZF9zb21lX2xvY2FsZSA9IDA7CisgIC8qIFRoaXMgZmFpbHMgb24gU29sYXJpcy4gICovCisgIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgIiRMT0NBTEVfRlJfVVRGOCIpICE9IE5VTEwpCisgICAgeworICAgICAgY2hhciBpbnB1dFtdID0gIkJcMzAzXDI3NFwzMDNcMjM3ZXIiOyAvKiAiQsO8w59lciIgKi8KKyAgICAgIG1ic3RhdGVfdCBzdGF0ZTsKKyAgICAgIHdjaGFyX3Qgd2M7CisKKyAgICAgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworICAgICAgaWYgKG1icnRvd2MgKCZ3YywgaW5wdXQgKyAxLCAxLCAmc3RhdGUpID09IChzaXplX3QpKC0yKSkKKyAgICAgICAgeworICAgICAgICAgIGlucHV0WzFdID0gJ1wwJzsKKyAgICAgICAgICBpZiAobWJydG93YyAoJndjLCBpbnB1dCArIDIsIDUsICZzdGF0ZSkgIT0gMSkKKyAgICAgICAgICAgIHJlc3VsdCB8PSAxOworICAgICAgICB9CisgICAgICBmb3VuZF9zb21lX2xvY2FsZSA9IDE7CisgICAgfQorICAvKiBUaGlzIGZhaWxzIG9uIEhQLVVYIDExLjExLiAgKi8KKyAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCAiJExPQ0FMRV9KQSIpICE9IE5VTEwpCisgICAgeworICAgICAgY2hhciBpbnB1dFtdID0gIkJcMjE3XDI1M1wzNDRcMjE3XDI1MVwzMTZlciI7IC8qICJCw7zDn2VyIiAqLworICAgICAgbWJzdGF0ZV90IHN0YXRlOworICAgICAgd2NoYXJfdCB3YzsKKworICAgICAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisgICAgICBpZiAobWJydG93YyAoJndjLCBpbnB1dCArIDEsIDEsICZzdGF0ZSkgPT0gKHNpemVfdCkoLTIpKQorICAgICAgICB7CisgICAgICAgICAgaW5wdXRbMV0gPSAnXDAnOworICAgICAgICAgIGlmIChtYnJ0b3djICgmd2MsIGlucHV0ICsgMiwgNSwgJnN0YXRlKSAhPSAyKQorICAgICAgICAgICAgcmVzdWx0IHw9IDI7CisgICAgICAgIH0KKyAgICAgIGZvdW5kX3NvbWVfbG9jYWxlID0gMTsKKyAgICB9CisgIC8qIFRoaXMgZmFpbHMgb24gbmF0aXZlIFdpbmRvd3MuICAqLworICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICJKYXBhbmVzZV9KYXBhbi45MzIiKSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGNoYXIgaW5wdXRbXSA9ICI8XDIyM1wzNzJcMjI2XDE3M1wyMTRcMzUyPiI7IC8qICI85pel5pys6KqePiIgKi8KKyAgICAgIG1ic3RhdGVfdCBzdGF0ZTsKKyAgICAgIHdjaGFyX3Qgd2M7CisKKyAgICAgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworICAgICAgaWYgKG1icnRvd2MgKCZ3YywgaW5wdXQgKyAzLCAxLCAmc3RhdGUpID09IChzaXplX3QpKC0yKSkKKyAgICAgICAgeworICAgICAgICAgIGlucHV0WzNdID0gJ1wwJzsKKyAgICAgICAgICBpZiAobWJydG93YyAoJndjLCBpbnB1dCArIDQsIDQsICZzdGF0ZSkgIT0gMSkKKyAgICAgICAgICAgIHJlc3VsdCB8PSA0OworICAgICAgICB9CisgICAgICBmb3VuZF9zb21lX2xvY2FsZSA9IDE7CisgICAgfQorICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICJDaGluZXNlX1RhaXdhbi45NTAiKSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGNoYXIgaW5wdXRbXSA9ICI8XDI0NFwzNTFcMjQ1XDI3M1wyNzNcMTcxPiI7IC8qICI85pel5pys6KqePiIgKi8KKyAgICAgIG1ic3RhdGVfdCBzdGF0ZTsKKyAgICAgIHdjaGFyX3Qgd2M7CisKKyAgICAgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworICAgICAgaWYgKG1icnRvd2MgKCZ3YywgaW5wdXQgKyAzLCAxLCAmc3RhdGUpID09IChzaXplX3QpKC0yKSkKKyAgICAgICAgeworICAgICAgICAgIGlucHV0WzNdID0gJ1wwJzsKKyAgICAgICAgICBpZiAobWJydG93YyAoJndjLCBpbnB1dCArIDQsIDQsICZzdGF0ZSkgIT0gMSkKKyAgICAgICAgICAgIHJlc3VsdCB8PSA4OworICAgICAgICB9CisgICAgICBmb3VuZF9zb21lX2xvY2FsZSA9IDE7CisgICAgfQorICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICJDaGluZXNlX0NoaW5hLjkzNiIpICE9IE5VTEwpCisgICAgeworICAgICAgY2hhciBpbnB1dFtdID0gIjxcMzEwXDMyNVwyNjFcMjc2XDMyNVwxMzI+IjsgLyogIjzml6XmnKzoqp4+IiAqLworICAgICAgbWJzdGF0ZV90IHN0YXRlOworICAgICAgd2NoYXJfdCB3YzsKKworICAgICAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisgICAgICBpZiAobWJydG93YyAoJndjLCBpbnB1dCArIDMsIDEsICZzdGF0ZSkgPT0gKHNpemVfdCkoLTIpKQorICAgICAgICB7CisgICAgICAgICAgaW5wdXRbM10gPSAnXDAnOworICAgICAgICAgIGlmIChtYnJ0b3djICgmd2MsIGlucHV0ICsgNCwgNCwgJnN0YXRlKSAhPSAxKQorICAgICAgICAgICAgcmVzdWx0IHw9IDE2OworICAgICAgICB9CisgICAgICBmb3VuZF9zb21lX2xvY2FsZSA9IDE7CisgICAgfQorICByZXR1cm4gKGZvdW5kX3NvbWVfbG9jYWxlID8gcmVzdWx0IDogNzcpOworfV1dKV0sCisgICAgICAgICAgW2dsX2N2X2Z1bmNfbWJydG93Y19yZXR2YWw9eWVzXSwKKyAgICAgICAgICBbaWYgdGVzdCAkPyAhPSA3NzsgdGhlbgorICAgICAgICAgICAgIGdsX2N2X2Z1bmNfbWJydG93Y19yZXR2YWw9bm8KKyAgICAgICAgICAgZmkKKyAgICAgICAgICBdLAorICAgICAgICAgIFs6XSkKKyAgICAgIGZpCisgICAgXSkKK10pCisKK2RubCBUZXN0IHdoZXRoZXIgbWJydG93Yywgd2hlbiBwYXJzaW5nIGEgTlVMIGNoYXJhY3RlciwgY29ycmVjdGx5IHJldHVybnMgMC4KK2RubCBSZXN1bHQgaXMgZ2xfY3ZfZnVuY19tYnJ0b3djX251bF9yZXR2YWwuCisKK0FDX0RFRlVOKFtnbF9NQlJUT1dDX05VTF9SRVRWQUxdLAorWworICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKyAgQUNfUkVRVUlSRShbZ3RfTE9DQUxFX1pIX0NOXSkKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKSBkbmwgZm9yIGNyb3NzLWNvbXBpbGVzCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIG1icnRvd2MgcmV0dXJucyAwIHdoZW4gcGFyc2luZyBhIE5VTCBjaGFyYWN0ZXJdLAorICAgIFtnbF9jdl9mdW5jX21icnRvd2NfbnVsX3JldHZhbF0sCisgICAgWworICAgICAgZG5sIEluaXRpYWwgZ3Vlc3MsIHVzZWQgd2hlbiBjcm9zcy1jb21waWxpbmcgb3Igd2hlbiBubyBzdWl0YWJsZSBsb2NhbGUKKyAgICAgIGRubCBpcyBwcmVzZW50LgorY2hhbmdlcXVvdGUoLClkbmwKKyAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIG5vIG9uIFNvbGFyaXMgOCBhbmQgOS4KKyAgICAgICAgc29sYXJpczIuWzg5XSkgZ2xfY3ZfZnVuY19tYnJ0b3djX251bF9yZXR2YWw9Imd1ZXNzaW5nIG5vIiA7OworICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvdGhlcndpc2UuCisgICAgICAgICopICAgICAgICAgICAgIGdsX2N2X2Z1bmNfbWJydG93Y19udWxfcmV0dmFsPSJndWVzc2luZyB5ZXMiIDs7CisgICAgICBlc2FjCitjaGFuZ2VxdW90ZShbLF0pZG5sCisgICAgICBpZiB0ZXN0ICRMT0NBTEVfWkhfQ04gIT0gbm9uZTsgdGhlbgorICAgICAgICBBQ19SVU5fSUZFTFNFKAorICAgICAgICAgIFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgPGxvY2FsZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQorICAgPHdjaGFyLmg+LgorICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgoraW50IG1haW4gKCkKK3sKKyAgLyogVGhpcyBmYWlscyBvbiBTb2xhcmlzIDggYW5kIDkuICAqLworICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICIkTE9DQUxFX1pIX0NOIikgIT0gTlVMTCkKKyAgICB7CisgICAgICBtYnN0YXRlX3Qgc3RhdGU7CisgICAgICB3Y2hhcl90IHdjOworCisgICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKyAgICAgIGlmIChtYnJ0b3djICgmd2MsICIiLCAxLCAmc3RhdGUpICE9IDApCisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgcmV0dXJuIDA7Cit9XV0pXSwKKyAgICAgICAgICBbZ2xfY3ZfZnVuY19tYnJ0b3djX251bF9yZXR2YWw9eWVzXSwKKyAgICAgICAgICBbZ2xfY3ZfZnVuY19tYnJ0b3djX251bF9yZXR2YWw9bm9dLAorICAgICAgICAgIFs6XSkKKyAgICAgIGZpCisgICAgXSkKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvbWJydG93Yy5jLgorQUNfREVGVU4oW2dsX1BSRVJFUV9NQlJUT1dDXSwgWworICA6CitdKQorCisKIGRubCBGcm9tIFBhdWwgRWdnZXJ0CiAKLWRubCBUaGlzIGZpbGUgY2FuIGJlIHJlbW92ZWQsIGFuZCBnbF9GVU5DX01CUlRPV0MgcmVwbGFjZWQgd2l0aAotZG5sIEFDX0ZVTkNfTUJSVE9XQywgd2hlbiBhdXRvY29uZiAyLjYwIGNhbiBiZSBhc3N1bWVkIGV2ZXJ5d2hlcmUuCitkbmwgVGhpcyBpcyBhbiBvdmVycmlkZSBvZiBhbiBhdXRvY29uZiBtYWNyby4KIAotQUNfREVGVU4oW2dsX0ZVTkNfTUJSVE9XQ10sCitBQ19ERUZVTihbQUNfRlVOQ19NQlJUT1dDXSwKIFsKICAgZG5sIFNhbWUgYXMgQUNfRlVOQ19NQlJUT1dDIGluIGF1dG9jb25mLTIuNjAuCiAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIG1icnRvd2MgYW5kIG1ic3RhdGVfdCBhcmUgcHJvcGVybHkgZGVjbGFyZWRdLAogICAgIGdsX2N2X2Z1bmNfbWJydG93YywKICAgICBbQUNfTElOS19JRkVMU0UoCiAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKLSAgICAgICAgICAgIFtbI2luY2x1ZGUgPHdjaGFyLmg+XV0sCisgICAgICAgICAgICBbWy8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZQorICAgICAgICAgICAgICAgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LgorICAgICAgICAgICAgICAgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+CisgICAgICAgICAgICAgICAgIG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovCisgICAgICAgICAgICAgICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICAgICAgICAgICAgICNpbmNsdWRlIDx0aW1lLmg+CisgICAgICAgICAgICAgICNpbmNsdWRlIDx3Y2hhci5oPl1dLAogICAgICAgICAgICAgW1t3Y2hhcl90IHdjOwogICAgICAgICAgICAgICBjaGFyIGNvbnN0IHNbXSA9ICIiOwogICAgICAgICAgICAgICBzaXplX3QgbiA9IDE7CkBAIC0yNSw3ICs1NjYsNyBAQAogICAgICAgIGdsX2N2X2Z1bmNfbWJydG93Yz15ZXMsCiAgICAgICAgZ2xfY3ZfZnVuY19tYnJ0b3djPW5vKV0pCiAgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfbWJydG93YyA9IHllczsgdGhlbgotICAgIEFDX0RFRklORShbSEFWRV9NQlJUT1dDXSwgMSwKKyAgICBBQ19ERUZJTkUoW0hBVkVfTUJSVE9XQ10sIFsxXSwKICAgICAgIFtEZWZpbmUgdG8gMSBpZiBtYnJ0b3djIGFuZCBtYnN0YXRlX3QgYXJlIHByb3Blcmx5IGRlY2xhcmVkLl0pCiAgIGZpCiBdKQpkaWZmIC0tZ2l0IGEvbTQvbWJzaW5pdC5tNCBiL200L21ic2luaXQubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE1NmMzZAotLS0gL2Rldi9udWxsCisrKyBiL200L21ic2luaXQubTQKQEAgLTAsMCArMSw1MSBAQAorIyBtYnNpbml0Lm00IHNlcmlhbCA4CitkbmwgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0ZVTkNfTUJTSU5JVF0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1dDSEFSX0hfREVGQVVMVFNdKQorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCisKKyAgQUNfUkVRVUlSRShbQUNfVFlQRV9NQlNUQVRFX1RdKQorICBnbF9NQlNUQVRFX1RfQlJPS0VOCisKKyAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbbWJzaW5pdF0pCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWJzaW5pdCA9IG5vOyB0aGVuCisgICAgSEFWRV9NQlNJTklUPTAKKyAgICBBQ19DSEVDS19ERUNMUyhbbWJzaW5pdF0sLCwgW1sKKy8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUKKyAgIDx3Y2hhci5oPi4KKyAgIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZQorICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KK11dKQorICAgIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9tYnNpbml0ID0geWVzOyB0aGVuCisgICAgICBkbmwgT24gTWluaXggMy4xLjgsIHRoZSBzeXN0ZW0ncyA8d2NoYXIuaD4gZGVjbGFyZXMgbWJzaW5pdCgpIGFsdGhvdWdoCisgICAgICBkbmwgaXQgZG9lcyBub3QgaGF2ZSB0aGUgZnVuY3Rpb24uIEF2b2lkIGEgY29sbGlzaW9uIHdpdGggZ251bGliJ3MKKyAgICAgIGRubCByZXBsYWNlbWVudC4KKyAgICAgIFJFUExBQ0VfTUJTSU5JVD0xCisgICAgZmkKKyAgZWxzZQorICAgIGlmIHRlc3QgJFJFUExBQ0VfTUJTVEFURV9UID0gMTsgdGhlbgorICAgICAgUkVQTEFDRV9NQlNJTklUPTEKKyAgICBlbHNlCisgICAgICBkbmwgT24gbWluZ3csIG1ic2luaXQoKSBhbHdheXMgcmV0dXJucyAxLCB3aGljaCBpcyBpbmFwcHJvcHJpYXRlIGZvcgorICAgICAgZG5sIHN0YXRlcyBwcm9kdWNlZCBieSBtYnJ0b3djKCkgZm9yIGFuIGluY29tcGxldGUgbXVsdGlieXRlIGNoYXJhY3RlcgorICAgICAgZG5sIGluIG11bHRpYnl0ZSBsb2NhbGVzLgorICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgIG1pbmd3KikgUkVQTEFDRV9NQlNJTklUPTEgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorXSkKKworIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9tYnNpbml0LmMuCitBQ19ERUZVTihbZ2xfUFJFUkVRX01CU0lOSVRdLCBbCisgIDoKK10pCmRpZmYgLS1naXQgYS9tNC9tYnN0YXRlX3QubTQgYi9tNC9tYnN0YXRlX3QubTQKaW5kZXggZGYyYTI3NS4uNjFhODE5MCAxMDA2NDQKLS0tIGEvbTQvbWJzdGF0ZV90Lm00CisrKyBiL200L21ic3RhdGVfdC5tNApAQCAtMSw1ICsxLDUgQEAKLSMgbWJzdGF0ZV90Lm00IHNlcmlhbCA5Ci1kbmwgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBtYnN0YXRlX3QubTQgc2VyaWFsIDEzCitkbmwgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIsIDIwMDgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiBkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgpAQCAtMTMsMTggKzEzLDI5IEBACiAjIEFDX1RZUEVfTUJTVEFURV9UCiAjIC0tLS0tLS0tLS0tLS0tLS0tCiBBQ19ERUZVTihbQUNfVFlQRV9NQlNUQVRFX1RdLAotICBbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBtYnN0YXRlX3RdLCBhY19jdl90eXBlX21ic3RhdGVfdCwKK1sKKyAgIEFDX1JFUVVJUkUoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10pIGRubCBmb3IgSFAtVVggMTEuMTEKKworICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBtYnN0YXRlX3RdLCBbYWNfY3ZfdHlwZV9tYnN0YXRlX3RdLAogICAgICBbQUNfQ09NUElMRV9JRkVMU0UoCi0JW0FDX0xBTkdfUFJPR1JBTSgKLQkgICBbQUNfSU5DTFVERVNfREVGQVVMVAotIwkgICAgaW5jbHVkZSA8d2NoYXIuaD5dLAotCSAgIFttYnN0YXRlX3QgeDsgcmV0dXJuIHNpemVvZiB4O10pXSwKLQlbYWNfY3ZfdHlwZV9tYnN0YXRlX3Q9eWVzXSwKLQlbYWNfY3ZfdHlwZV9tYnN0YXRlX3Q9bm9dKV0pCisgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgIFtBQ19JTkNMVURFU19ERUZBVUxUWworLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQorICAgPHdjaGFyLmg+LgorICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPl1dLAorICAgICAgICAgICBbW21ic3RhdGVfdCB4OyByZXR1cm4gc2l6ZW9mIHg7XV0pXSwKKyAgICAgICAgW2FjX2N2X3R5cGVfbWJzdGF0ZV90PXllc10sCisgICAgICAgIFthY19jdl90eXBlX21ic3RhdGVfdD1ub10pXSkKICAgIGlmIHRlc3QgJGFjX2N2X3R5cGVfbWJzdGF0ZV90ID0geWVzOyB0aGVuCi0gICAgIEFDX0RFRklORShbSEFWRV9NQlNUQVRFX1RdLCAxLAotCSAgICAgICBbRGVmaW5lIHRvIDEgaWYgPHdjaGFyLmg+IGRlY2xhcmVzIG1ic3RhdGVfdC5dKQorICAgICBBQ19ERUZJTkUoW0hBVkVfTUJTVEFURV9UXSwgWzFdLAorICAgICAgICAgICAgICAgW0RlZmluZSB0byAxIGlmIDx3Y2hhci5oPiBkZWNsYXJlcyBtYnN0YXRlX3QuXSkKICAgIGVsc2UKLSAgICAgQUNfREVGSU5FKFttYnN0YXRlX3RdLCBpbnQsCi0JICAgICAgIFtEZWZpbmUgdG8gYSB0eXBlIGlmIDx3Y2hhci5oPiBkb2VzIG5vdCBkZWZpbmUuXSkKLSAgIGZpXSkKKyAgICAgQUNfREVGSU5FKFttYnN0YXRlX3RdLCBbaW50XSwKKyAgICAgICAgICAgICAgIFtEZWZpbmUgdG8gYSB0eXBlIGlmIDx3Y2hhci5oPiBkb2VzIG5vdCBkZWZpbmUuXSkKKyAgIGZpCitdKQpkaWZmIC0tZ2l0IGEvbTQvbWJzd2lkdGgubTQgYi9tNC9tYnN3aWR0aC5tNAppbmRleCA4NzhlNTMxLi5lNWQwNDU3IDEwMDY0NAotLS0gYS9tNC9tYnN3aWR0aC5tNAorKysgYi9tNC9tYnN3aWR0aC5tNApAQCAtMSw1ICsxLDUgQEAKLSMgbWJzd2lkdGgubTQgc2VyaWFsIDExCi1kbmwgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIG1ic3dpZHRoLm00IHNlcmlhbCAxOAorZG5sIENvcHlyaWdodCAoQykgMjAwMC0yMDAyLCAyMDA0LCAyMDA2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KQEAgLTksNTAgKzksMzcgQEAKIAogQUNfREVGVU4oW2dsX01CU1dJRFRIXSwKIFsKLSAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKHdjaGFyLmggd2N0eXBlLmgpCi0gIEFDX0NIRUNLX0ZVTkNTX09OQ0UoaXNhc2NpaSBpc3dwcmludCBtYnNpbml0KQotICBBQ19DSEVDS19GVU5DUyhpc3djbnRybCB3Y3dpZHRoKQotICBnbF9GVU5DX01CUlRPV0MKLQotICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB3Y3dpZHRoIGlzIGRlY2xhcmVkXSwgYWNfY3ZfaGF2ZV9kZWNsX3djd2lkdGgsCi0gICAgW0FDX1RSWV9DT01QSUxFKFsKLS8qIEFJWCAzLjIuNSBkZWNsYXJlcyB3Y3dpZHRoIGluIDxzdHJpbmcuaD4uICovCi0jaWYgSEFWRV9TVFJJTkdfSAotIyBpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbmRpZgotI2lmIEhBVkVfV0NIQVJfSAotIyBpbmNsdWRlIDx3Y2hhci5oPgotI2VuZGlmCi1dLCBbCi0jaWZuZGVmIHdjd2lkdGgKLSAgY2hhciAqcCA9IChjaGFyICopIHdjd2lkdGg7Ci0jZW5kaWYKLV0sIGFjX2N2X2hhdmVfZGVjbF93Y3dpZHRoPXllcywgYWNfY3ZfaGF2ZV9kZWNsX3djd2lkdGg9bm8pXSkKLSAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3djd2lkdGggPSB5ZXM7IHRoZW4KLSAgICBhY192YWw9MQotICBlbHNlCi0gICAgYWNfdmFsPTAKLSAgZmkKLSAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfREVDTF9XQ1dJRFRILCAkYWNfdmFsLAotICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2Ygd2N3aWR0aCgpLCBhbmQgdG8gMCBvdGhlcndpc2UuXSkKKyAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKFt3Y2hhci5oXSkKKyAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbaXNhc2NpaSBtYnNpbml0XSkKIAogICBkbmwgVW5peFdhcmUgNy4xLjEgPHdjaGFyLmg+IGhhcyBhIGRlY2xhcmF0aW9uIG9mIGEgZnVuY3Rpb24gbWJzd2lkdGgoKQogICBkbmwgdGhhdCBjbGFzaGVzIHdpdGggb3Vycy4KICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgbWJzd2lkdGggaXMgZGVjbGFyZWQgaW4gPHdjaGFyLmg+XSwKLSAgICBhY19jdl9oYXZlX2RlY2xfbWJzd2lkdGgsCi0gICAgW0FDX1RSWV9DT01QSUxFKFsKLSNpZiBIQVZFX1dDSEFSX0gKLSMgaW5jbHVkZSA8d2NoYXIuaD4KLSNlbmRpZgotXSwgWworICAgIFthY19jdl9oYXZlX2RlY2xfbWJzd2lkdGhdLAorICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgIFtbCisvKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlCisgICA8d2NoYXIuaD4uCisgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUgaW5jbHVkZWQKKyAgIGJlZm9yZSA8d2NoYXIuaD4uICAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisgICAgICAgICAgXV0sCisgICAgICAgICAgW1sKICAgY2hhciAqcCA9IChjaGFyICopIG1ic3dpZHRoOwotXSwgYWNfY3ZfaGF2ZV9kZWNsX21ic3dpZHRoPXllcywgYWNfY3ZfaGF2ZV9kZWNsX21ic3dpZHRoPW5vKV0pCisgIHJldHVybiAhcDsKKyAgICAgICAgICBdXSldLAorICAgICAgIFthY19jdl9oYXZlX2RlY2xfbWJzd2lkdGg9eWVzXSwKKyAgICAgICBbYWNfY3ZfaGF2ZV9kZWNsX21ic3dpZHRoPW5vXSldKQogICBpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfbWJzd2lkdGggPSB5ZXM7IHRoZW4KICAgICBhY192YWw9MQogICBlbHNlCiAgICAgYWNfdmFsPTAKICAgZmkKLSAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfREVDTF9NQlNXSURUSF9JTl9XQ0hBUl9ILCAkYWNfdmFsLAorICBBQ19ERUZJTkVfVU5RVU9URUQoW0hBVkVfREVDTF9NQlNXSURUSF9JTl9XQ0hBUl9IXSwgWyRhY192YWxdLAogICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIGRlY2xhcmF0aW9uIG9mIG1ic3dpZHRoKCkgaW4gPHdjaGFyLmg+LCBhbmQgdG8gMCBvdGhlcndpc2UuXSkKIAogICBBQ19UWVBFX01CU1RBVEVfVApkaWZmIC0tZ2l0IGEvbTQvbWVtY2hyLm00IGIvbTQvbWVtY2hyLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNDAyOTQKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9tZW1jaHIubTQKQEAgLTAsMCArMSw4OCBAQAorIyBtZW1jaHIubTQgc2VyaWFsIDEyCitkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTl9PTkNFKFtnbF9GVU5DX01FTUNIUl0sCitbCisgIGRubCBDaGVjayBmb3IgcHJlcmVxdWlzaXRlcyBmb3IgbWVtb3J5IGZlbmNlIGNoZWNrcy4KKyAgZ2xfRlVOQ19NTUFQX0FOT04KKyAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKFtzeXMvbW1hbi5oXSkKKyAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbbXByb3RlY3RdKQorCisgIEFDX1JFUVVJUkUoW2dsX0hFQURFUl9TVFJJTkdfSF9ERUZBVUxUU10pCisgIG00X2lmZGVmKFtnbF9GVU5DX01FTUNIUl9PQlNPTEVURV0sIFsKKyAgICBkbmwgVGhlc2UgZGF5cywgd2UgYXNzdW1lIG1lbWNociBpcyBwcmVzZW50LiAgQnV0IGlmIHN1cHBvcnQgZm9yIG9sZAorICAgIGRubCBwbGF0Zm9ybXMgaXMgZGVzaXJlZDoKKyAgICBBQ19DSEVDS19GVU5DU19PTkNFKFttZW1jaHJdKQorICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWVtY2hyID0gbm87IHRoZW4KKyAgICAgIEhBVkVfTUVNQ0hSPTAKKyAgICBmaQorICBdKQorICBpZiB0ZXN0ICRIQVZFX01FTUNIUiA9IDE7IHRoZW4KKyAgICAjIERldGVjdCBwbGF0Zm9ybS1zcGVjaWZpYyBidWdzIGluIHNvbWUgdmVyc2lvbnMgb2YgZ2xpYmM6CisgICAgIyBtZW1jaHIgc2hvdWxkIG5vdCBkZXJlZmVyZW5jZSBhbnl0aGluZyB3aXRoIGxlbmd0aCAwCisgICAgIyAgIGh0dHA6Ly9idWd6aWxsYS5yZWRoYXQuY29tLzQ5OTY4OQorICAgICMgbWVtY2hyIHNob3VsZCBub3QgZGVyZWZlcmVuY2Ugb3ZlcmVzdGltYXRlZCBsZW5ndGggYWZ0ZXIgYSBtYXRjaAorICAgICMgICBodHRwOi8vYnVncy5kZWJpYW4ub3JnL2NnaS1iaW4vYnVncmVwb3J0LmNnaT9idWc9NTIxNzM3CisgICAgIyAgIGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTAxNjIKKyAgICAjIEFzc3VtZSB0aGF0IG1lbWNociB3b3JrcyBvbiBwbGF0Zm9ybXMgdGhhdCBsYWNrIG1wcm90ZWN0LgorICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIG1lbWNociB3b3Jrc10sIFtnbF9jdl9mdW5jX21lbWNocl93b3Jrc10sCisgICAgICBbQUNfUlVOX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9TWVNfTU1BTl9ICisjIGluY2x1ZGUgPGZjbnRsLmg+CisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyMgaW5jbHVkZSA8c3lzL21tYW4uaD4KKyMgaWZuZGVmIE1BUF9GSUxFCisjICBkZWZpbmUgTUFQX0ZJTEUgMAorIyBlbmRpZgorI2VuZGlmCitdXSwgW1sKKyAgaW50IHJlc3VsdCA9IDA7CisgIGNoYXIgKmZlbmNlID0gTlVMTDsKKyNpZiBIQVZFX1NZU19NTUFOX0ggJiYgSEFWRV9NUFJPVEVDVAorIyBpZiBIQVZFX01BUF9BTk9OWU1PVVMKKyAgY29uc3QgaW50IGZsYWdzID0gTUFQX0FOT05ZTU9VUyB8IE1BUF9QUklWQVRFOworICBjb25zdCBpbnQgZmQgPSAtMTsKKyMgZWxzZSAvKiAhSEFWRV9NQVBfQU5PTllNT1VTICovCisgIGNvbnN0IGludCBmbGFncyA9IE1BUF9GSUxFIHwgTUFQX1BSSVZBVEU7CisgIGludCBmZCA9IG9wZW4gKCIvZGV2L3plcm8iLCBPX1JET05MWSwgMDY2Nik7CisgIGlmIChmZCA+PSAwKQorIyBlbmRpZgorICAgIHsKKyAgICAgIGludCBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplICgpOworICAgICAgY2hhciAqdHdvX3BhZ2VzID0KKyAgICAgICAgKGNoYXIgKikgbW1hcCAoTlVMTCwgMiAqIHBhZ2VzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgZmQsIDApOworICAgICAgaWYgKHR3b19wYWdlcyAhPSAoY2hhciAqKSgtMSkKKyAgICAgICAgICAmJiBtcHJvdGVjdCAodHdvX3BhZ2VzICsgcGFnZXNpemUsIHBhZ2VzaXplLCBQUk9UX05PTkUpID09IDApCisgICAgICAgIGZlbmNlID0gdHdvX3BhZ2VzICsgcGFnZXNpemU7CisgICAgfQorI2VuZGlmCisgIGlmIChmZW5jZSkKKyAgICB7CisgICAgICBpZiAobWVtY2hyIChmZW5jZSwgMCwgMCkpCisgICAgICAgIHJlc3VsdCB8PSAxOworICAgICAgc3RyY3B5IChmZW5jZSAtIDksICIxMjM0NTY3OCIpOworICAgICAgaWYgKG1lbWNociAoZmVuY2UgLSA5LCAwLCA3OSkgIT0gZmVuY2UgLSAxKQorICAgICAgICByZXN1bHQgfD0gMjsKKyAgICAgIGlmIChtZW1jaHIgKGZlbmNlIC0gMSwgMCwgMykgIT0gZmVuY2UgLSAxKQorICAgICAgICByZXN1bHQgfD0gNDsKKyAgICB9CisgIHJldHVybiByZXN1bHQ7CitdXSldLCBbZ2xfY3ZfZnVuY19tZW1jaHJfd29ya3M9eWVzXSwgW2dsX2N2X2Z1bmNfbWVtY2hyX3dvcmtzPW5vXSwKKyAgICAgIFtkbmwgQmUgcGVzc2ltaXN0aWMgZm9yIG5vdy4KKyAgICAgICBnbF9jdl9mdW5jX21lbWNocl93b3Jrcz0iZ3Vlc3Npbmcgbm8iXSldKQorICAgIGlmIHRlc3QgIiRnbF9jdl9mdW5jX21lbWNocl93b3JrcyIgIT0geWVzOyB0aGVuCisgICAgICBSRVBMQUNFX01FTUNIUj0xCisgICAgZmkKKyAgZmkKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvbWVtY2hyLmMuCitBQ19ERUZVTihbZ2xfUFJFUkVRX01FTUNIUl0sIFsKKyAgQUNfQ0hFQ0tfSEVBREVSUyhbYnAtc3ltLmhdKQorXSkKZGlmZiAtLWdpdCBhL200L21tYXAtYW5vbi5tNCBiL200L21tYXAtYW5vbi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDhiMTdkCi0tLSAvZGV2L251bGwKKysrIGIvbTQvbW1hcC1hbm9uLm00CkBAIC0wLDAgKzEsNTUgQEAKKyMgbW1hcC1hbm9uLm00IHNlcmlhbCAxMAorZG5sIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgRGV0ZWN0IGhvdyBtbWFwIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhbm9ueW1vdXMgKG5vdCBmaWxlLWJhY2tlZCkgbWVtb3J5CisjIG1hcHBpbmdzLgorIyAtIE9uIExpbnV4LCBBSVgsIE9TRi8xLCBTb2xhcmlzLCBDeWd3aW4sIEludGVyaXgsIEhhaWt1LCBib3RoIE1BUF9BTk9OWU1PVVMKKyMgICBhbmQgTUFQX0FOT04gZXhpc3QgYW5kIGhhdmUgdGhlIHNhbWUgdmFsdWUuCisjIC0gT24gSFAtVVgsIG9ubHkgTUFQX0FOT05ZTU9VUyBleGlzdHMuCisjIC0gT24gTWFjIE9TIFgsIEZyZWVCU0QsIE5ldEJTRCwgT3BlbkJTRCwgb25seSBNQVBfQU5PTiBleGlzdHMuCisjIC0gT24gSVJJWCwgbmVpdGhlciBleGlzdHMsIGFuZCBhIGZpbGUgZGVzY3JpcHRvciBvcGVuZWQgdG8gL2Rldi96ZXJvIG11c3QgYmUKKyMgICB1c2VkLgorCitBQ19ERUZVTihbZ2xfRlVOQ19NTUFQX0FOT05dLAorWworICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHN5cy9tbWFuLmg+IHRvIGRlZmluZSBNQVBfQU5PTllNT1VTLgorICBBQ19SRVFVSVJFKFtnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorCisgICMgQ2hlY2sgZm9yIG1tYXAoKS4gRG9uJ3QgdXNlIEFDX0ZVTkNfTU1BUCwgYmVjYXVzZSBpdCBjaGVja3MgdG9vIG11Y2g6IGl0CisgICMgZmFpbHMgb24gSFAtVVggMTEsIGJlY2F1c2UgTUFQX0ZJWEVEIG1hcHBpbmdzIGRvIG5vdCB3b3JrLiBCdXQgdGhpcyBpcworICAjIGlycmVsZXZhbnQgZm9yIGFub255bW91cyBtYXBwaW5ncy4KKyAgQUNfQ0hFQ0tfRlVOQyhbbW1hcF0sIFtnbF9oYXZlX21tYXA9eWVzXSwgW2dsX2hhdmVfbW1hcD1ub10pCisKKyAgIyBUcnkgdG8gYWxsb3cgTUFQX0FOT05ZTU9VUy4KKyAgZ2xfaGF2ZV9tbWFwX2Fub255bW91cz1ubworICBpZiB0ZXN0ICRnbF9oYXZlX21tYXAgPSB5ZXM7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBNQVBfQU5PTllNT1VTXSkKKyAgICBBQ19FR1JFUF9DUFAoW0kgY2Fubm90IGlkZW50aWZ5IHRoaXMgbWFwXSwgWworI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaWZkZWYgTUFQX0FOT05ZTU9VUworICAgIEkgY2Fubm90IGlkZW50aWZ5IHRoaXMgbWFwCisjZW5kaWYKK10sCisgICAgICBbZ2xfaGF2ZV9tbWFwX2Fub255bW91cz15ZXNdKQorICAgIGlmIHRlc3QgJGdsX2hhdmVfbW1hcF9hbm9ueW1vdXMgIT0geWVzOyB0aGVuCisgICAgICBBQ19FR1JFUF9DUFAoW0kgY2Fubm90IGlkZW50aWZ5IHRoaXMgbWFwXSwgWworI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaWZkZWYgTUFQX0FOT04KKyAgICBJIGNhbm5vdCBpZGVudGlmeSB0aGlzIG1hcAorI2VuZGlmCitdLAorICAgICAgICBbQUNfREVGSU5FKFtNQVBfQU5PTllNT1VTXSwgW01BUF9BTk9OXSwKKyAgICAgICAgICBbRGVmaW5lIHRvIGEgc3Vic3RpdHV0ZSB2YWx1ZSBmb3IgbW1hcCgpJ3MgTUFQX0FOT05ZTU9VUyBmbGFnLl0pCisgICAgICAgICBnbF9oYXZlX21tYXBfYW5vbnltb3VzPXllc10pCisgICAgZmkKKyAgICBBQ19NU0dfUkVTVUxUKFskZ2xfaGF2ZV9tbWFwX2Fub255bW91c10pCisgICAgaWYgdGVzdCAkZ2xfaGF2ZV9tbWFwX2Fub255bW91cyA9IHllczsgdGhlbgorICAgICAgQUNfREVGSU5FKFtIQVZFX01BUF9BTk9OWU1PVVNdLCBbMV0sCisgICAgICAgIFtEZWZpbmUgdG8gMSBpZiBtbWFwKCkncyBNQVBfQU5PTllNT1VTIGZsYWcgaXMgYXZhaWxhYmxlIGFmdGVyIGluY2x1ZGluZworICAgICAgICAgY29uZmlnLmggYW5kIDxzeXMvbW1hbi5oPi5dKQorICAgIGZpCisgIGZpCitdKQpkaWZmIC0tZ2l0IGEvbTQvbW9kZV90Lm00IGIvbTQvbW9kZV90Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZjYxMmEKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9tb2RlX3QubTQKQEAgLTAsMCArMSwyNiBAQAorIyBtb2RlX3QubTQgc2VyaWFsIDIKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEZvciB1c2luZyBtb2RlX3QsIGl0J3Mgc3VmZmljaWVudCB0byB1c2UgQUNfVFlQRV9NT0RFX1QgYW5kCisjIGluY2x1ZGUgPHN5cy90eXBlcy5oPi4KKworIyBEZWZpbmUgUFJPTU9URURfTU9ERV9UIHRvIHRoZSB0eXBlIHRoYXQgaXMgdGhlIHJlc3VsdCBvZiAiZGVmYXVsdCBhcmd1bWVudAorIyBwcm9tb3Rpb24iIChJU08gQyA2LjUuMi4yLig2KSkgb2YgdGhlIHR5cGUgbW9kZV90LgorQUNfREVGVU4oW2dsX1BST01PVEVEX1RZUEVfTU9ERV9UXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfVFlQRV9NT0RFX1RdKQorICBBQ19DQUNIRV9DSEVDSyhbZm9yIHByb21vdGVkIG1vZGVfdCB0eXBlXSwgW2dsX2N2X3Byb21vdGVkX21vZGVfdF0sIFsKKyAgICBkbmwgQXNzdW1lIG1vZGVfdCBwcm9tb3RlcyB0byAnaW50JyBpZiBhbmQgb25seSBpZiBpdCBpcyBzbWFsbGVyIHRoYW4gJ2ludCcsCisgICAgZG5sIGFuZCB0byBpdHNlbGYgb3RoZXJ3aXNlLiBUaGlzIGFzc3VtcHRpb24gaXMgbm90IGd1YXJhbnRlZWQgYnkgdGhlIElTTyBDCisgICAgZG5sIHN0YW5kYXJkLCBidXQgd2UgZG9uJ3Qga25vdyBvZiBhbnkgcmVhbC13b3JsZCBjb3VudGVyZXhhbXBsZXMuCisgICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD5dXSwKKyAgICAgIFtbdHlwZWRlZiBpbnQgYXJyYXlbMiAqIChzaXplb2YgKG1vZGVfdCkgPCBzaXplb2YgKGludCkpIC0gMV07XV0pXSwKKyAgICAgIFtnbF9jdl9wcm9tb3RlZF9tb2RlX3Q9J2ludCddLAorICAgICAgW2dsX2N2X3Byb21vdGVkX21vZGVfdD0nbW9kZV90J10pCisgIF0pCisgIEFDX0RFRklORV9VTlFVT1RFRChbUFJPTU9URURfTU9ERV9UXSwgWyRnbF9jdl9wcm9tb3RlZF9tb2RlX3RdLAorICAgIFtEZWZpbmUgdG8gdGhlIHR5cGUgdGhhdCBpcyB0aGUgcmVzdWx0IG9mIGRlZmF1bHQgYXJndW1lbnQgcHJvbW90aW9ucyBvZiB0eXBlIG1vZGVfdC5dKQorXSkKZGlmZiAtLWdpdCBhL200L21zdmMtaW52YWwubTQgYi9tNC9tc3ZjLWludmFsLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYjQ2MTcKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9tc3ZjLWludmFsLm00CkBAIC0wLDAgKzEsMTkgQEAKKyMgbXN2Yy1pbnZhbC5tNCBzZXJpYWwgMQorZG5sIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9NU1ZDX0lOVkFMXSwKK1sKKyAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbX3NldF9pbnZhbGlkX3BhcmFtZXRlcl9oYW5kbGVyXSkKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19fc2V0X2ludmFsaWRfcGFyYW1ldGVyX2hhbmRsZXIgPSB5ZXM7IHRoZW4KKyAgICBIQVZFX01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUj0xCisgICAgQUNfREVGSU5FKFtIQVZFX01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUl0sIFsxXSwKKyAgICAgIFtEZWZpbmUgdG8gMSBvbiBNU1ZDIHBsYXRmb3JtcyB0aGF0IGhhdmUgdGhlICJpbnZhbGlkIHBhcmFtZXRlciBoYW5kbGVyIgorICAgICAgIGNvbmNlcHQuXSkKKyAgZWxzZQorICAgIEhBVkVfTVNWQ19JTlZBTElEX1BBUkFNRVRFUl9IQU5ETEVSPTAKKyAgZmkKKyAgQUNfU1VCU1QoW0hBVkVfTVNWQ19JTlZBTElEX1BBUkFNRVRFUl9IQU5ETEVSXSkKK10pCmRpZmYgLS1naXQgYS9tNC9tc3ZjLW5vdGhyb3cubTQgYi9tNC9tc3ZjLW5vdGhyb3cubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEyNTA1MAotLS0gL2Rldi9udWxsCisrKyBiL200L21zdmMtbm90aHJvdy5tNApAQCAtMCwwICsxLDEwIEBACisjIG1zdmMtbm90aHJvdy5tNCBzZXJpYWwgMQorZG5sIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9NU1ZDX05PVEhST1ddLAorWworICBBQ19SRVFVSVJFKFtnbF9NU1ZDX0lOVkFMXSkKK10pCmRpZmYgLS1naXQgYS9tNC9tdWx0aWFyY2gubTQgYi9tNC9tdWx0aWFyY2gubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMyODhiOAotLS0gL2Rldi9udWxsCisrKyBiL200L211bHRpYXJjaC5tNApAQCAtMCwwICsxLDYyIEBACisjIG11bHRpYXJjaC5tNCBzZXJpYWwgNworZG5sIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNvbXBpbGVyIGlzIG9yIG1heSBiZSBwcm9kdWNpbmcgdW5pdmVyc2FsIGJpbmFyaWVzLgorIworIyBPbiBNYWMgT1MgWCAxMC41IGFuZCBsYXRlciBzeXN0ZW1zLCB0aGUgdXNlciBjYW4gY3JlYXRlIGxpYnJhcmllcyBhbmQKKyMgZXhlY3V0YWJsZXMgdGhhdCB3b3JrIG9uIG11bHRpcGxlIHN5c3RlbSB0eXBlcy0ta25vd24gYXMgImZhdCIgb3IKKyMgInVuaXZlcnNhbCIgYmluYXJpZXMtLWJ5IHNwZWNpZnlpbmcgbXVsdGlwbGUgJy1hcmNoJyBvcHRpb25zIHRvIHRoZQorIyBjb21waWxlciBidXQgb25seSBhIHNpbmdsZSAnLWFyY2gnIG9wdGlvbiB0byB0aGUgcHJlcHJvY2Vzc29yLiAgTGlrZQorIyB0aGlzOgorIworIyAgICAgLi9jb25maWd1cmUgQ0M9ImdjYyAtYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCAtYXJjaCBwcGMgLWFyY2ggcHBjNjQiIFwKKyMgICAgICAgICAgICAgICAgIENYWD0iZysrIC1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IC1hcmNoIHBwYyAtYXJjaCBwcGM2NCIgXAorIyAgICAgICAgICAgICAgICAgQ1BQPSJnY2MgLUUiIENYWENQUD0iZysrIC1FIgorIworIyBEZXRlY3QgdGhpcyBzaXR1YXRpb24gYW5kIHNldCBBUFBMRV9VTklWRVJTQUxfQlVJTEQgYWNjb3JkaW5nbHkuCisKK0FDX0RFRlVOX09OQ0UoW2dsX01VTFRJQVJDSF0sCitbCisgIGRubCBDb2RlIHNpbWlsYXIgdG8gYXV0b2NvbmYtMi42MyBBQ19DX0JJR0VORElBTi4KKyAgZ2xfY3ZfY19tdWx0aWFyY2g9bm8KKyAgQUNfQ09NUElMRV9JRkVMU0UoCisgICAgW0FDX0xBTkdfU09VUkNFKAorICAgICAgW1sjaWZuZGVmIF9fQVBQTEVfQ0NfXworICAgICAgICAgbm90IGEgdW5pdmVyc2FsIGNhcGFibGUgY29tcGlsZXIKKyAgICAgICAgI2VuZGlmCisgICAgICAgIHR5cGVkZWYgaW50IGR1bW15OworICAgICAgXV0pXSwKKyAgICBbCisgICAgIGRubCBDaGVjayBmb3IgcG90ZW50aWFsIC1hcmNoIGZsYWdzLiAgSXQgaXMgbm90IHVuaXZlcnNhbCB1bmxlc3MKKyAgICAgZG5sIHRoZXJlIGFyZSBhdCBsZWFzdCB0d28gLWFyY2ggZmxhZ3Mgd2l0aCBkaWZmZXJlbnQgdmFsdWVzLgorICAgICBhcmNoPQorICAgICBwcmV2PQorICAgICBmb3Igd29yZCBpbiAke0NDfSAke0NGTEFHU30gJHtDUFBGTEFHU30gJHtMREZMQUdTfTsgZG8KKyAgICAgICBpZiB0ZXN0IC1uICIkcHJldiI7IHRoZW4KKyAgICAgICAgIGNhc2UgJHdvcmQgaW4KKyAgICAgICAgICAgaT84NiB8IHg4Nl82NCB8IHBwYyB8IHBwYzY0KQorICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRhcmNoIiB8fCB0ZXN0ICIkYXJjaCIgPSAiJHdvcmQiOyB0aGVuCisgICAgICAgICAgICAgICBhcmNoPSIkd29yZCIKKyAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICBnbF9jdl9jX211bHRpYXJjaD15ZXMKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIDs7CisgICAgICAgICBlc2FjCisgICAgICAgICBwcmV2PQorICAgICAgIGVsc2UKKyAgICAgICAgIGlmIHRlc3QgIngkd29yZCIgPSAieC1hcmNoIjsgdGhlbgorICAgICAgICAgICBwcmV2PWFyY2gKKyAgICAgICAgIGZpCisgICAgICAgZmkKKyAgICAgZG9uZQorICAgIF0pCisgIGlmIHRlc3QgJGdsX2N2X2NfbXVsdGlhcmNoID0geWVzOyB0aGVuCisgICAgQVBQTEVfVU5JVkVSU0FMX0JVSUxEPTEKKyAgZWxzZQorICAgIEFQUExFX1VOSVZFUlNBTF9CVUlMRD0wCisgIGZpCisgIEFDX1NVQlNUKFtBUFBMRV9VTklWRVJTQUxfQlVJTERdKQorXSkKZGlmZiAtLWdpdCBhL200L25scy5tNCBiL200L25scy5tNAppbmRleCAyMDgyYzNiLi4wODY2Njc3IDEwMDY0NAotLS0gYS9tNC9ubHMubTQKKysrIGIvbTQvbmxzLm00CkBAIC0xLDUgKzEsNiBAQAotIyBubHMubTQgc2VyaWFsIDIgKGdldHRleHQtMC4xNC4zKQotZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAzLCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBubHMubTQgc2VyaWFsIDUgKGdldHRleHQtMC4xOCkKK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMywgMjAwNS0yMDA2LCAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorZG5sIEluYy4KIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiBkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgpAQCAtMTcsMzUgKzE4LDE1IEBACiBkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS0yMDAwLgogZG5sICAgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAwLTIwMDMuCiAKLUFDX1BSRVJFUSgyLjUwKQorQUNfUFJFUkVRKFsyLjUwXSkKIAogQUNfREVGVU4oW0FNX05MU10sCiBbCiAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBOTFMgaXMgcmVxdWVzdGVkXSkKICAgZG5sIERlZmF1bHQgaXMgZW5hYmxlZCBOTFMKLSAgQUNfQVJHX0VOQUJMRShubHMsCisgIEFDX0FSR19FTkFCTEUoW25sc10sCiAgICAgWyAgLS1kaXNhYmxlLW5scyAgICAgICAgICAgZG8gbm90IHVzZSBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydF0sCiAgICAgVVNFX05MUz0kZW5hYmxldmFsLCBVU0VfTkxTPXllcykKLSAgQUNfTVNHX1JFU1VMVCgkVVNFX05MUykKLSAgQUNfU1VCU1QoVVNFX05MUykKLV0pCi0KLUFDX0RFRlVOKFtBTV9NS0lOU1RBTExESVJTXSwKLVsKLSAgZG5sIFRlbGwgYXV0b21ha2UgPj0gMS4xMCB0byBjb21wbGFpbiBpZiBta2luc3RhbGxkaXJzIGlzIG1pc3NpbmcuCi0gIG00X2lmZGVmKFtBQ19SRVFVSVJFX0FVWF9GSUxFXSwgW0FDX1JFUVVJUkVfQVVYX0ZJTEUoW21raW5zdGFsbGRpcnNdKV0pCi0gIGRubCBJZiB0aGUgQUNfQ09ORklHX0FVWF9ESVIgbWFjcm8gZm9yIGF1dG9jb25mIGlzIHVzZWQgd2UgcG9zc2libHkKLSAgZG5sIGZpbmQgdGhlIG1raW5zdGFsbGRpcnMgc2NyaXB0IGluIGFub3RoZXIgc3ViZGlyIGJ1dCAkKHRvcF9zcmNkaXIpLgotICBkbmwgVHJ5IHRvIGxvY2F0ZSBpdC4KLSAgTUtJTlNUQUxMRElSUz0KLSAgaWYgdGVzdCAtbiAiJGFjX2F1eF9kaXIiOyB0aGVuCi0gICAgY2FzZSAiJGFjX2F1eF9kaXIiIGluCi0gICAgICAvKikgTUtJTlNUQUxMRElSUz0iJGFjX2F1eF9kaXIvbWtpbnN0YWxsZGlycyIgOzsKLSAgICAgICopIE1LSU5TVEFMTERJUlM9IlwkKHRvcF9idWlsZGRpcikvJGFjX2F1eF9kaXIvbWtpbnN0YWxsZGlycyIgOzsKLSAgICBlc2FjCi0gIGZpCi0gIGlmIHRlc3QgLXogIiRNS0lOU1RBTExESVJTIjsgdGhlbgotICAgIE1LSU5TVEFMTERJUlM9IlwkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMiCi0gIGZpCi0gIEFDX1NVQlNUKE1LSU5TVEFMTERJUlMpCisgIEFDX01TR19SRVNVTFQoWyRVU0VfTkxTXSkKKyAgQUNfU1VCU1QoW1VTRV9OTFNdKQogXSkKZGlmZiAtLWdpdCBhL200L25vY3Jhc2gubTQgYi9tNC9ub2NyYXNoLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNjM4ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9ub2NyYXNoLm00CkBAIC0wLDAgKzEsMTMwIEBACisjIG5vY3Jhc2gubTQgc2VyaWFsIDQKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgQmFzZWQgb24gbGlic2lnc2VndiwgZnJvbSBCcnVubyBIYWlibGUgYW5kIFBhb2xvIEJvbnppbmkuCisKK0FDX1BSRVJFUShbMi4xM10pCisKK2RubCBFeHBhbmRzIHRvIHNvbWUgY29kZSBmb3IgdXNlIGluIC5jIHByb2dyYW1zIHRoYXQgd2lsbCBjYXVzZSB0aGUgY29uZmlndXJlCitkbmwgdGVzdCB0byBleGl0IGluc3RlYWQgb2YgY3Jhc2hpbmcuIFRoaXMgaXMgdXNlZnVsIHRvIGF2b2lkIHRyaWdnZXJpbmcKK2RubCBhY3Rpb24gZnJvbSBhIGJhY2tncm91bmQgZGVidWdnZXIgYW5kIHRvIGF2b2lkIGNvcmUgZHVtcHMuCitkbmwgVXNhZ2U6ICAgLi4uCitkbmwgICAgICAgICAgXUdMX05PQ1JBU0hbCitkbmwgICAgICAgICAgLi4uCitkbmwgICAgICAgICAgaW50IG1haW4oKSB7IG5vY3Jhc2hfaW5pdCgpOyAuLi4gfQorQUNfREVGVU4oW0dMX05PQ1JBU0hdLFtbCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWYgZGVmaW5lZCBfX01BQ0hfXyAmJiBkZWZpbmVkIF9fQVBQTEVfXworLyogQXZvaWQgYSBjcmFzaCBvbiBNYWMgT1MgWC4gICovCisjaW5jbHVkZSA8bWFjaC9tYWNoLmg+CisjaW5jbHVkZSA8bWFjaC9tYWNoX2Vycm9yLmg+CisjaW5jbHVkZSA8bWFjaC90aHJlYWRfc3RhdHVzLmg+CisjaW5jbHVkZSA8bWFjaC9leGNlcHRpb24uaD4KKyNpbmNsdWRlIDxtYWNoL3Rhc2suaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisvKiBUaGUgZXhjZXB0aW9uIHBvcnQgb24gd2hpY2ggb3VyIHRocmVhZCBsaXN0ZW5zLiAgKi8KK3N0YXRpYyBtYWNoX3BvcnRfdCBvdXJfZXhjZXB0aW9uX3BvcnQ7CisvKiBUaGUgbWFpbiBmdW5jdGlvbiBvZiB0aGUgdGhyZWFkIGxpc3RlbmluZyBmb3IgZXhjZXB0aW9ucyBvZiB0eXBlCisgICBFWENfQkFEX0FDQ0VTUy4gICovCitzdGF0aWMgdm9pZCAqCittYWNoX2V4Y2VwdGlvbl90aHJlYWQgKHZvaWQgKmFyZykKK3sKKyAgLyogQnVmZmVyIGZvciBhIG1lc3NhZ2UgdG8gYmUgcmVjZWl2ZWQuICAqLworICBzdHJ1Y3QgeworICAgIG1hY2hfbXNnX2hlYWRlcl90IGhlYWQ7CisgICAgbWFjaF9tc2dfYm9keV90IG1zZ2hfYm9keTsKKyAgICBjaGFyIGRhdGFbMTAyNF07CisgIH0gbXNnOworICBtYWNoX21zZ19yZXR1cm5fdCByZXR2YWw7CisgIC8qIFdhaXQgZm9yIGEgbWVzc2FnZSBvbiB0aGUgZXhjZXB0aW9uIHBvcnQuICAqLworICByZXR2YWwgPSBtYWNoX21zZyAoJm1zZy5oZWFkLCBNQUNIX1JDVl9NU0cgfCBNQUNIX1JDVl9MQVJHRSwgMCwgc2l6ZW9mIChtc2cpLAorICAgICAgICAgICAgICAgICAgICAgb3VyX2V4Y2VwdGlvbl9wb3J0LCBNQUNIX01TR19USU1FT1VUX05PTkUsIE1BQ0hfUE9SVF9OVUxMKTsKKyAgaWYgKHJldHZhbCAhPSBNQUNIX01TR19TVUNDRVNTKQorICAgIGFib3J0ICgpOworICBleGl0ICgxKTsKK30KK3N0YXRpYyB2b2lkCitub2NyYXNoX2luaXQgKHZvaWQpCit7CisgIG1hY2hfcG9ydF90IHNlbGYgPSBtYWNoX3Rhc2tfc2VsZiAoKTsKKyAgLyogQWxsb2NhdGUgYSBwb3J0IG9uIHdoaWNoIHRoZSB0aHJlYWQgc2hhbGwgbGlzdGVuIGZvciBleGNlcHRpb25zLiAgKi8KKyAgaWYgKG1hY2hfcG9ydF9hbGxvY2F0ZSAoc2VsZiwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsICZvdXJfZXhjZXB0aW9uX3BvcnQpCisgICAgICA9PSBLRVJOX1NVQ0NFU1MpIHsKKyAgICAvKiBTZWUgaHR0cDovL3dlYi5taXQuZWR1L2Rhcndpbi9zcmMvbW9kdWxlcy94bnUvb3NmbWsvbWFuL21hY2hfcG9ydF9pbnNlcnRfcmlnaHQuaHRtbC4gICovCisgICAgaWYgKG1hY2hfcG9ydF9pbnNlcnRfcmlnaHQgKHNlbGYsIG91cl9leGNlcHRpb25fcG9ydCwgb3VyX2V4Y2VwdGlvbl9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQUNIX01TR19UWVBFX01BS0VfU0VORCkKKyAgICAgICAgPT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAvKiBUaGUgZXhjZXB0aW9ucyB3ZSB3YW50IHRvIGNhdGNoLiAgT25seSBFWENfQkFEX0FDQ0VTUyBpcyBpbnRlcmVzdGluZworICAgICAgICAgZm9yIHVzLiAgKi8KKyAgICAgIGV4Y2VwdGlvbl9tYXNrX3QgbWFzayA9IEVYQ19NQVNLX0JBRF9BQ0NFU1M7CisgICAgICAvKiBDcmVhdGUgdGhlIHRocmVhZCBsaXN0ZW5pbmcgb24gdGhlIGV4Y2VwdGlvbiBwb3J0LiAgKi8KKyAgICAgIHB0aHJlYWRfYXR0cl90IGF0dHI7CisgICAgICBwdGhyZWFkX3QgdGhyZWFkOworICAgICAgaWYgKHB0aHJlYWRfYXR0cl9pbml0ICgmYXR0cikgPT0gMAorICAgICAgICAgICYmIHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSAoJmF0dHIsIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKSA9PSAwCisgICAgICAgICAgJiYgcHRocmVhZF9jcmVhdGUgKCZ0aHJlYWQsICZhdHRyLCBtYWNoX2V4Y2VwdGlvbl90aHJlYWQsIE5VTEwpID09IDApIHsKKyAgICAgICAgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgKCZhdHRyKTsKKyAgICAgICAgLyogUmVwbGFjZSB0aGUgZXhjZXB0aW9uIHBvcnQgaW5mbyBmb3IgdGhlc2UgZXhjZXB0aW9ucyB3aXRoIG91ciBvd24uCisgICAgICAgICAgIE5vdGUgdGhhdCB3ZSByZXBsYWNlIHRoZSBleGNlcHRpb24gcG9ydCBmb3IgdGhlIGVudGlyZSB0YXNrLCBub3Qgb25seQorICAgICAgICAgICBmb3IgYSBwYXJ0aWN1bGFyIHRocmVhZC4gIFRoaXMgaGFzIHRoZSBlZmZlY3QgdGhhdCB3aGVuIG91ciBleGNlcHRpb24KKyAgICAgICAgICAgcG9ydCBnZXRzIHRoZSBtZXNzYWdlLCB0aGUgdGhyZWFkIHNwZWNpZmljIGV4Y2VwdGlvbiBwb3J0IGhhcyBhbHJlYWR5CisgICAgICAgICAgIGJlZW4gYXNrZWQsIGFuZCB3ZSBkb24ndCBuZWVkIHRvIGJvdGhlciBhYm91dCBpdC4KKyAgICAgICAgICAgU2VlIGh0dHA6Ly93ZWIubWl0LmVkdS9kYXJ3aW4vc3JjL21vZHVsZXMveG51L29zZm1rL21hbi90YXNrX3NldF9leGNlcHRpb25fcG9ydHMuaHRtbC4gICovCisgICAgICAgIHRhc2tfc2V0X2V4Y2VwdGlvbl9wb3J0cyAoc2VsZiwgbWFzaywgb3VyX2V4Y2VwdGlvbl9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYQ0VQVElPTl9ERUZBVUxULCBNQUNISU5FX1RIUkVBRF9TVEFURSk7CisgICAgICB9CisgICAgfQorICB9Cit9CisjZWxpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCisvKiBBdm9pZCBhIGNyYXNoIG9uIG5hdGl2ZSBXaW5kb3dzLiAgKi8KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3aW5lcnJvci5oPgorc3RhdGljIExPTkcgV0lOQVBJCitleGNlcHRpb25fZmlsdGVyIChFWENFUFRJT05fUE9JTlRFUlMgKkV4Y2VwdGlvbkluZm8pCit7CisgIHN3aXRjaCAoRXhjZXB0aW9uSW5mby0+RXhjZXB0aW9uUmVjb3JkLT5FeGNlcHRpb25Db2RlKQorICAgIHsKKyAgICBjYXNlIEVYQ0VQVElPTl9BQ0NFU1NfVklPTEFUSU9OOgorICAgIGNhc2UgRVhDRVBUSU9OX0lOX1BBR0VfRVJST1I6CisgICAgY2FzZSBFWENFUFRJT05fU1RBQ0tfT1ZFUkZMT1c6CisgICAgY2FzZSBFWENFUFRJT05fR1VBUkRfUEFHRToKKyAgICBjYXNlIEVYQ0VQVElPTl9QUklWX0lOU1RSVUNUSU9OOgorICAgIGNhc2UgRVhDRVBUSU9OX0lMTEVHQUxfSU5TVFJVQ1RJT046CisgICAgY2FzZSBFWENFUFRJT05fREFUQVRZUEVfTUlTQUxJR05NRU5UOgorICAgIGNhc2UgRVhDRVBUSU9OX0FSUkFZX0JPVU5EU19FWENFRURFRDoKKyAgICBjYXNlIEVYQ0VQVElPTl9OT05DT05USU5VQUJMRV9FWENFUFRJT046CisgICAgICBleGl0ICgxKTsKKyAgICB9CisgIHJldHVybiBFWENFUFRJT05fQ09OVElOVUVfU0VBUkNIOworfQorc3RhdGljIHZvaWQKK25vY3Jhc2hfaW5pdCAodm9pZCkKK3sKKyAgU2V0VW5oYW5kbGVkRXhjZXB0aW9uRmlsdGVyICgoTFBUT1BfTEVWRUxfRVhDRVBUSU9OX0ZJTFRFUikgZXhjZXB0aW9uX2ZpbHRlcik7Cit9CisjZWxzZQorLyogQXZvaWQgYSBjcmFzaCBvbiBQT1NJWCBzeXN0ZW1zLiAgKi8KKyNpbmNsdWRlIDxzaWduYWwuaD4KKy8qIEEgUE9TSVggc2lnbmFsIGhhbmRsZXIuICAqLworc3RhdGljIHZvaWQKK2V4Y2VwdGlvbl9oYW5kbGVyIChpbnQgc2lnKQoreworICBleGl0ICgxKTsKK30KK3N0YXRpYyB2b2lkCitub2NyYXNoX2luaXQgKHZvaWQpCit7CisjaWZkZWYgU0lHU0VHVgorICBzaWduYWwgKFNJR1NFR1YsIGV4Y2VwdGlvbl9oYW5kbGVyKTsKKyNlbmRpZgorI2lmZGVmIFNJR0JVUworICBzaWduYWwgKFNJR0JVUywgZXhjZXB0aW9uX2hhbmRsZXIpOworI2VuZGlmCit9CisjZW5kaWYKK11dKQpkaWZmIC0tZ2l0IGEvbTQvb2JzdGFjay1wcmludGYubTQgYi9tNC9vYnN0YWNrLXByaW50Zi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTc1MTNlCi0tLSAvZGV2L251bGwKKysrIGIvbTQvb2JzdGFjay1wcmludGYubTQKQEAgLTAsMCArMSw0MSBAQAorIyBvYnN0YWNrLXByaW50Zi5tNCBzZXJpYWwgNAorZG5sIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIEVyaWMgQmxha2UuCitkbmwgVGVzdCB3aGV0aGVyIG9ic3RhY2tfcHJpbnRmKCkgZXhpc3RzLiAgRm9yIG5vdywgd2UgYXNzdW1lIHRoYXQKK2RubCBvYnN0YWNrX3ZwcmludGYgYmVoYXZlcyBpZGVudGljYWxseSwgc28gd2Ugb25seSB0ZXN0IGZvciBvbmUuCisKK0FDX0RFRlVOKFtnbF9GVU5DX09CU1RBQ0tfUFJJTlRGXSwKK1sKKyAgZG5sIFBlcnN1YWRlIGdsaWJjIDxzdGRpby5oPiB0byBkZWNsYXJlIG9ic3RhY2tfcHJpbnRmKCksIG9ic3RhY2tfdnByaW50ZigpLgorICBBQ19SRVFVSVJFKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorCisgIEFDX1JFUVVJUkUoW2dsX1NURElPX0hfREVGQVVMVFNdKQorICBBQ19DSEVDS19GVU5DU19PTkNFKFtvYnN0YWNrX3ByaW50Zl0pCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfb2JzdGFja19wcmludGYgPSBubyA7IHRoZW4KKyAgICBnbF9SRVBMQUNFX09CU1RBQ0tfUFJJTlRGCisgIGZpCisKKyAgZ2xfREVDTF9PQlNUQUNLX1BSSU5URgorXSkKKworQUNfREVGVU4oW2dsX1JFUExBQ0VfT0JTVEFDS19QUklOVEZdLAorWworICBBQ19SRVFVSVJFKFtnbF9TVERJT19IX0RFRkFVTFRTXSkKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19vYnN0YWNrX3ByaW50ZiA9IHllczsgdGhlbgorICAgIFJFUExBQ0VfT0JTVEFDS19QUklOVEY9MQorICBmaQorXSkKKworZG5sIEVuc3VyZSBvYnN0YWNrX3ByaW50ZigpIGFuZCBvYnN0YWNrX3ZwcmludGYoKSBhcmUgZGVjbGFyZWQKK2RubCAod2hldGhlciBvciBub3QgdGhleSBhcmUgYmVpbmcgcmVwbGFjZWQpLgorQUNfREVGVU4oW2dsX0RFQ0xfT0JTVEFDS19QUklOVEZdLAorWworICBBQ19DSEVDS19ERUNMU19PTkNFKFtvYnN0YWNrX3ByaW50Zl0pCisgIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9vYnN0YWNrX3ByaW50ZiA9IG5vOyB0aGVuCisgICAgSEFWRV9ERUNMX09CU1RBQ0tfUFJJTlRGPTAKKyAgZmkKK10pCmRpZmYgLS1naXQgYS9tNC9vYnN0YWNrLm00IGIvbTQvb2JzdGFjay5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE2MGY3Zi4uMDAwMDAwMAotLS0gYS9tNC9vYnN0YWNrLm00CisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotIyBvYnN0YWNrLm00IHNlcmlhbCA0Ci1kbmwgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi1kbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLWRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLUFDX0RFRlVOKFtnbF9PQlNUQUNLXSwKLVsKLSAgQUNfRlVOQ19PQlNUQUNLCi0gIGRubCBOb3RlOiBBQ19GVU5DX09CU1RBQ0sgZG9lcyBBQ19MSUJTT1VSQ0VTKFtvYnN0YWNrLmgsIG9ic3RhY2suY10pLgotICBpZiB0ZXN0ICRhY19jdl9mdW5jX29ic3RhY2sgPSBubzsgdGhlbgotICAgIGdsX1BSRVJFUV9PQlNUQUNLCi0gIGZpCi1dKQotCi0jIFByZXJlcXVpc2l0ZXMgb2YgbGliL29ic3RhY2suYy4KLUFDX0RFRlVOKFtnbF9QUkVSRVFfT0JTVEFDS10sCi1bCi0gIEFDX1JFUVVJUkUoW2dsX0FDX0hFQURFUl9JTlRUWVBFU19IXSkKLSAgQUNfUkVRVUlSRShbZ2xfQUNfSEVBREVSX1NURElOVF9IXSkKLSAgQUNfUkVRVUlSRShbZ2xfQUNfVFlQRV9VSU5UTUFYX1RdKQotICA6Ci1dKQpkaWZmIC0tZ2l0IGEvbTQvb2ZmX3QubTQgYi9tNC9vZmZfdC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmNhMmRmCi0tLSAvZGV2L251bGwKKysrIGIvbTQvb2ZmX3QubTQKQEAgLTAsMCArMSwxOCBAQAorIyBvZmZfdC5tNCBzZXJpYWwgMQorZG5sIENvcHlyaWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgQ2hlY2sgd2hldGhlciB0byBvdmVycmlkZSB0aGUgJ29mZl90JyB0eXBlLgorZG5sIFNldCBXSU5ET1dTXzY0X0JJVF9PRkZfVC4KKworQUNfREVGVU4oW2dsX1RZUEVfT0ZGX1RdLAorWworICBtNF9pZmRlZihbZ2xfTEFSR0VGSUxFXSwgWworICAgIEFDX1JFUVVJUkUoW2dsX0xBUkdFRklMRV0pCisgIF0sIFsKKyAgICBXSU5ET1dTXzY0X0JJVF9PRkZfVD0wCisgIF0pCisgIEFDX1NVQlNUKFtXSU5ET1dTXzY0X0JJVF9PRkZfVF0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvb25jZW9ubHkubTQgYi9tNC9vbmNlb25seS5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRkM2MwYi4uMDAwMDAwMAotLS0gYS9tNC9vbmNlb25seS5tNAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLSMgb25jZW9ubHlfMl81Ny5tNCBzZXJpYWwgMwotZG5sIENvcHlyaWdodCAoQykgMjAwMi0yMDAzLCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQotZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAotZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCi1kbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKLWRubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgotCi1kbmwgVGhpcyBmaWxlIGRlZmluZXMgc29tZSAib25jZSBvbmx5IiB2YXJpYW50cyBvZiBzdGFuZGFyZCBhdXRvY29uZiBtYWNyb3MuCi1kbmwgICBBQ19DSEVDS19IRUFERVJTX09OQ0UgICAgICAgICBsaWtlICBBQ19DSEVDS19IRUFERVJTCi1kbmwgICBBQ19DSEVDS19GVU5DU19PTkNFICAgICAgICAgICBsaWtlICBBQ19DSEVDS19GVU5DUwotZG5sICAgQUNfQ0hFQ0tfREVDTFNfT05DRSAgICAgICAgICAgbGlrZSAgQUNfQ0hFQ0tfREVDTFMKLWRubCAgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSkgIGxpa2UgIEFDX0hFQURFUl9TVERDCi1kbmwgVGhlIGFkdmFudGFnZSBpcyB0aGF0IHRoZSBjaGVjayBmb3IgZWFjaCBvZiB0aGUgaGVhZGVycy9mdW5jdGlvbnMvZGVjbHMKLWRubCB3aWxsIGJlIHB1dCBvbmx5IG9uY2UgaW50byB0aGUgJ2NvbmZpZ3VyZScgZmlsZS4gSXQga2VlcHMgdGhlIHNpemUgb2YKLWRubCB0aGUgJ2NvbmZpZ3VyZScgZmlsZSBkb3duLCBhbmQgYXZvaWRzIHJlZHVuZGFudCBvdXRwdXQgd2hlbiAnY29uZmlndXJlJwotZG5sIGlzIHJ1bi4KLWRubCBUaGUgZHJhd2JhY2sgaXMgdGhhdCB0aGUgY2hlY2tzIGNhbm5vdCBiZSBjb25kaXRpb25hbGl6ZWQuIElmIHlvdSB3cml0ZQotZG5sICAgaWYgc29tZV9jb25kaXRpb247IHRoZW4gZ2xfQ0hFQ0tfSEVBREVSUyhzdGRsaWIuaCk7IGZpCi1kbmwgaW5zaWRlIGFuIEFDX0RFRlVOZWQgZnVuY3Rpb24sIHRoZSBnbF9DSEVDS19IRUFERVJTIG1hY3JvIGNhbGwgZXhwYW5kcyB0bwotZG5sIGVtcHR5LCBhbmQgdGhlIGNoZWNrIHdpbGwgYmUgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBib2R5IG9mIHRoZSBBQ19ERUZVTmVkCi1kbmwgZnVuY3Rpb24uCi0KLWRubCBUaGlzIGlzIGxpa2Ugb25jZW9ubHkubTQsIGV4Y2VwdCB0aGF0IGl0IHVzZXMgZGl2ZXJzaW9ucyB0byBuYW1lZCBzZWN0aW9ucwotZG5sIERFRkFVTFRTIGFuZCBJTklUX1BSRVBBUkUgaW4gb3JkZXIgdG8gY2hlY2sgYWxsIHJlcXVlc3RlZCBoZWFkZXJzIGF0IG9uY2UsCi1kbmwgdGh1cyByZWR1Y2luZyB0aGUgc2l6ZSBvZiAnY29uZmlndXJlJy4gV29ya3Mgd2l0aCBhdXRvY29uZi0yLjU3LiBUaGUKLWRubCBzaXplIHJlZHVjdGlvbiBpcyBjYS4gOSUuCi0KLWRubCBBdXRvY29uZiB2ZXJzaW9uIDIuNTcgb3IgbmV3ZXIgaXMgcmVjb21tZW5kZWQuCi1BQ19QUkVSRVEoMi41NykKLQotIyBBQ19DSEVDS19IRUFERVJTX09OQ0UoSEVBREVSMSBIRUFERVIyIC4uLikgaXMgYSBvbmNlLW9ubHkgdmFyaWFudCBvZgotIyBBQ19DSEVDS19IRUFERVJTKEhFQURFUjEgSEVBREVSMiAuLi4pLgotQUNfREVGVU4oW0FDX0NIRUNLX0hFQURFUlNfT05DRV0sIFsKLSAgOgotICBBQ19GT1JFQUNIKFtnbF9IRUFERVJfTkFNRV0sIFskMV0sIFsKLSAgICBBQ19ERUZVTihbZ2xfQ0hFQ0tfSEVBREVSX11tNF9xdW90ZSh0cmFuc2xpdChnbF9IRUFERVJfTkFNRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLi8tXSwgW19fX10pKSwgWwotICAgICAgbTRfZGl2ZXJ0X3RleHQoW0lOSVRfUFJFUEFSRV0sCi0gICAgICAgIFtnbF9oZWFkZXJfbGlzdD0iJGdsX2hlYWRlcl9saXN0IGdsX0hFQURFUl9OQU1FIl0pCi0gICAgICBnbF9IRUFERVJTX0VYUEFOU0lPTgotICAgICAgQUhfVEVNUExBVEUoQVNfVFJfQ1BQKFtIQVZFX11tNF9kZWZuKFtnbF9IRUFERVJfTkFNRV0pKSwKLSAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8XW00X2RlZm4oW2dsX0hFQURFUl9OQU1FXSlbPiBoZWFkZXIgZmlsZS5dKQotICAgIF0pCi0gICAgQUNfUkVRVUlSRShbZ2xfQ0hFQ0tfSEVBREVSX11tNF9xdW90ZSh0cmFuc2xpdChnbF9IRUFERVJfTkFNRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsuLy1dLCBbX19fXSkpKQotICBdKQotXSkKLW00X2RlZmluZShbZ2xfSEVBREVSU19FWFBBTlNJT05dLCBbCi0gIG00X2RpdmVydF90ZXh0KFtERUZBVUxUU10sIFtnbF9oZWFkZXJfbGlzdD1dKQotICBBQ19DSEVDS19IRUFERVJTKFskZ2xfaGVhZGVyX2xpc3RdKQotICBtNF9kZWZpbmUoW2dsX0hFQURFUlNfRVhQQU5TSU9OXSwgW10pCi1dKQotCi0jIEFDX0NIRUNLX0ZVTkNTX09OQ0UoRlVOQzEgRlVOQzIgLi4uKSBpcyBhIG9uY2Utb25seSB2YXJpYW50IG9mCi0jIEFDX0NIRUNLX0ZVTkNTKEZVTkMxIEZVTkMyIC4uLikuCi1BQ19ERUZVTihbQUNfQ0hFQ0tfRlVOQ1NfT05DRV0sIFsKLSAgOgotICBBQ19GT1JFQUNIKFtnbF9GVU5DX05BTUVdLCBbJDFdLCBbCi0gICAgQUNfREVGVU4oW2dsX0NIRUNLX0ZVTkNfXW00X2RlZm4oW2dsX0ZVTkNfTkFNRV0pLCBbCi0gICAgICBtNF9kaXZlcnRfdGV4dChbSU5JVF9QUkVQQVJFXSwKLSAgICAgICAgW2dsX2Z1bmNfbGlzdD0iJGdsX2Z1bmNfbGlzdCBnbF9GVU5DX05BTUUiXSkKLSAgICAgIGdsX0ZVTkNTX0VYUEFOU0lPTgotICAgICAgQUhfVEVNUExBVEUoQVNfVFJfQ1BQKFtIQVZFX11tNF9kZWZuKFtnbF9GVU5DX05BTUVdKSksCi0gICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF1tNF9kZWZuKFtnbF9GVU5DX05BTUVdKVsnIGZ1bmN0aW9uLl0pCi0gICAgXSkKLSAgICBBQ19SRVFVSVJFKFtnbF9DSEVDS19GVU5DX11tNF9kZWZuKFtnbF9GVU5DX05BTUVdKSkKLSAgXSkKLV0pCi1tNF9kZWZpbmUoW2dsX0ZVTkNTX0VYUEFOU0lPTl0sIFsKLSAgbTRfZGl2ZXJ0X3RleHQoW0RFRkFVTFRTXSwgW2dsX2Z1bmNfbGlzdD1dKQotICBBQ19DSEVDS19GVU5DUyhbJGdsX2Z1bmNfbGlzdF0pCi0gIG00X2RlZmluZShbZ2xfRlVOQ1NfRVhQQU5TSU9OXSwgW10pCi1dKQotCi0jIEFDX0NIRUNLX0RFQ0xTX09OQ0UoREVDTDEgREVDTDIgLi4uKSBpcyBhIG9uY2Utb25seSB2YXJpYW50IG9mCi0jIEFDX0NIRUNLX0RFQ0xTKERFQ0wxLCBERUNMMiwgLi4uKS4KLUFDX0RFRlVOKFtBQ19DSEVDS19ERUNMU19PTkNFXSwgWwotICA6Ci0gIEFDX0ZPUkVBQ0goW2dsX0RFQ0xfTkFNRV0sIFskMV0sIFsKLSAgICBBQ19ERUZVTihbZ2xfQ0hFQ0tfREVDTF9dbTRfZGVmbihbZ2xfREVDTF9OQU1FXSksIFsKLSAgICAgIEFDX0NIRUNLX0RFQ0xTKG00X2RlZm4oW2dsX0RFQ0xfTkFNRV0pKQotICAgIF0pCi0gICAgQUNfUkVRVUlSRShbZ2xfQ0hFQ0tfREVDTF9dbTRfZGVmbihbZ2xfREVDTF9OQU1FXSkpCi0gIF0pCi1dKQpkaWZmIC0tZ2l0IGEvbTQvb3Blbi5tNCBiL200L29wZW4ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU3N2EyMgotLS0gL2Rldi9udWxsCisrKyBiL200L29wZW4ubTQKQEAgLTAsMCArMSw5MSBAQAorIyBvcGVuLm00IHNlcmlhbCAxNAorZG5sIENvcHlyaWdodCAoQykgMjAwNy0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9GVU5DX09QRU5dLAorWworICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCisgIGNhc2UgIiRob3N0X29zIiBpbgorICAgIG1pbmd3KiB8IHB3KikKKyAgICAgIFJFUExBQ0VfT1BFTj0xCisgICAgICA7OworICAgICopCisgICAgICBkbmwgb3BlbigiZm9vLyIpIHNob3VsZCBub3QgY3JlYXRlIGEgZmlsZSB3aGVuIHRoZSBmaWxlIG5hbWUgaGFzIGEKKyAgICAgIGRubCB0cmFpbGluZyBzbGFzaC4gIEZyZWVCU0Qgb25seSBoYXMgdGhlIHByb2JsZW0gb24gc3ltbGlua3MuCisgICAgICBBQ19DSEVDS19GVU5DU19PTkNFKFtsc3RhdF0pCisgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBvcGVuIHJlY29nbml6ZXMgYSB0cmFpbGluZyBzbGFzaF0sCisgICAgICAgIFtnbF9jdl9mdW5jX29wZW5fc2xhc2hdLAorICAgICAgICBbIyBBc3N1bWUgdGhhdCBpZiB3ZSBoYXZlIGxzdGF0LCB3ZSBjYW4gYWxzbyBjaGVjayBzeW1saW5rcy4KKyAgICAgICAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2xzdGF0ID0geWVzOyB0aGVuCisgICAgICAgICAgICB0b3VjaCBjb25mdGVzdC50bXAKKyAgICAgICAgICAgIGxuIC1zIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5sbmsKKyAgICAgICAgICBmaQorICAgICAgICAgIEFDX1JVTl9JRkVMU0UoCisgICAgICAgICAgICBbQUNfTEFOR19TT1VSQ0UoW1sKKyNpbmNsdWRlIDxmY250bC5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKK2ludCBtYWluICgpCit7CisgIGludCByZXN1bHQgPSAwOworI2lmIEhBVkVfTFNUQVQKKyAgaWYgKG9wZW4gKCJjb25mdGVzdC5sbmsvIiwgT19SRE9OTFkpICE9IC0xKQorICAgIHJlc3VsdCB8PSAxOworI2VuZGlmCisgIGlmIChvcGVuICgiY29uZnRlc3Quc2wvIiwgT19DUkVBVCwgMDYwMCkgPj0gMCkKKyAgICByZXN1bHQgfD0gMjsKKyAgcmV0dXJuIHJlc3VsdDsKK31dXSldLAorICAgICAgICAgICAgW2dsX2N2X2Z1bmNfb3Blbl9zbGFzaD15ZXNdLAorICAgICAgICAgICAgW2dsX2N2X2Z1bmNfb3Blbl9zbGFzaD1ub10sCisgICAgICAgICAgICBbCitjaGFuZ2VxdW90ZSgsKWRubAorICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgZnJlZWJzZCogfCBhaXgqIHwgaHB1eCogfCBzb2xhcmlzMi5bMC05XSB8IHNvbGFyaXMyLlswLTldLiopCisgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfb3Blbl9zbGFzaD0iZ3Vlc3Npbmcgbm8iIDs7CisgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX29wZW5fc2xhc2g9Imd1ZXNzaW5nIHllcyIgOzsKKyAgICAgICAgICAgICBlc2FjCitjaGFuZ2VxdW90ZShbLF0pZG5sCisgICAgICAgICAgICBdKQorICAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LnNsIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5sbmsKKyAgICAgICAgXSkKKyAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX29wZW5fc2xhc2giIGluCisgICAgICAgICpubykKKyAgICAgICAgICBBQ19ERUZJTkUoW09QRU5fVFJBSUxJTkdfU0xBU0hfQlVHXSwgWzFdLAorICAgICAgICAgICAgW0RlZmluZSB0byAxIGlmIG9wZW4oKSBmYWlscyB0byByZWNvZ25pemUgYSB0cmFpbGluZyBzbGFzaC5dKQorICAgICAgICAgIFJFUExBQ0VfT1BFTj0xCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgIGVzYWMKKyAgZG5sIFJlcGxhY2Ugb3BlbigpIGZvciBzdXBwb3J0aW5nIHRoZSBnbnVsaWItZGVmaW5lZCBmY2hkaXIoKSBmdW5jdGlvbiwKKyAgZG5sIHRvIGtlZXAgZmNoZGlyJ3MgYm9va2tlZXBpbmcgdXAtdG8tZGF0ZS4KKyAgbTRfaWZkZWYoW2dsX0ZVTkNfRkNIRElSXSwgWworICAgIGlmIHRlc3QgJFJFUExBQ0VfT1BFTiA9IDA7IHRoZW4KKyAgICAgIGdsX1RFU1RfRkNIRElSCisgICAgICBpZiB0ZXN0ICRIQVZFX0ZDSERJUiA9IDA7IHRoZW4KKyAgICAgICAgUkVQTEFDRV9PUEVOPTEKKyAgICAgIGZpCisgICAgZmkKKyAgXSkKKyAgZG5sIFJlcGxhY2Ugb3BlbigpIGZvciBzdXBwb3J0aW5nIHRoZSBnbnVsaWItZGVmaW5lZCBPX05PTkJMT0NLIGZsYWcuCisgIG00X2lmZGVmKFtnbF9OT05CTE9DS0lOR19JT10sIFsKKyAgICBpZiB0ZXN0ICRSRVBMQUNFX09QRU4gPSAwOyB0aGVuCisgICAgICBnbF9OT05CTE9DS0lOR19JTworICAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9vcGVuX09fTk9OQkxPQ0sgIT0geWVzOyB0aGVuCisgICAgICAgIFJFUExBQ0VfT1BFTj0xCisgICAgICBmaQorICAgIGZpCisgIF0pCitdKQorCisjIFByZXJlcXVpc2l0ZXMgb2YgbGliL29wZW4uYy4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfT1BFTl0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1BST01PVEVEX1RZUEVfTU9ERV9UXSkKKyAgOgorXSkKZGlmZiAtLWdpdCBhL200L3BhdGhtYXgubTQgYi9tNC9wYXRobWF4Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMTc4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9wYXRobWF4Lm00CkBAIC0wLDAgKzEsNDIgQEAKKyMgcGF0aG1heC5tNCBzZXJpYWwgMTAKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMywgMjAwNS0yMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorZG5sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ2xfUEFUSE1BWF0sCitbCisgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9wYXRobWF4LmguCisgIEFDX0NIRUNLX0hFQURFUlNfT05DRShbc3lzL3BhcmFtLmhdKQorXSkKKworIyBFeHBhbmRzIHRvIGEgcGllY2Ugb2YgQyBwcm9ncmFtIHRoYXQgZGVmaW5lcyBQQVRIX01BWCBpbiB0aGUgc2FtZSB3YXkgYXMKKyMgInBhdGhtYXguaCIgd2lsbCBkby4KK0FDX0RFRlVOKFtnbF9QQVRITUFYX1NOSVBQRVRdLCBbWworLyogQXJyYW5nZSB0byBkZWZpbmUgUEFUSF9NQVgsIGxpa2UgInBhdGhtYXguaCIgZG9lcy4gKi8KKyNpZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaWYgZGVmaW5lZCBIQVZFX1NZU19QQVJBTV9IICYmICFkZWZpbmVkIFBBVEhfTUFYICYmICFkZWZpbmVkIE1BWFBBVEhMRU4KKyMgaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQQVRIX01BWCAmJiBkZWZpbmVkIE1BWFBBVEhMRU4KKyMgZGVmaW5lIFBBVEhfTUFYIE1BWFBBVEhMRU4KKyNlbmRpZgorI2lmZGVmIF9faHB1eAorIyB1bmRlZiBQQVRIX01BWAorIyBkZWZpbmUgUEFUSF9NQVggMTAyNAorI2VuZGlmCisjaWYgKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXworIyB1bmRlZiBQQVRIX01BWAorIyBkZWZpbmUgUEFUSF9NQVggMjYwCisjZW5kaWYKK11dKQorCisjIFByZXJlcXVpc2l0ZXMgb2YgZ2xfUEFUSE1BWF9TTklQUEVULgorQUNfREVGVU4oW2dsX1BBVEhNQVhfU05JUFBFVF9QUkVSRVFdLAorWworICBBQ19DSEVDS19IRUFERVJTX09OQ0UoW3VuaXN0ZC5oIHN5cy9wYXJhbS5oXSkKK10pCmRpZmYgLS1naXQgYS9tNC9wZXJyb3IubTQgYi9tNC9wZXJyb3IubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY5YTgyNAotLS0gL2Rldi9udWxsCisrKyBiL200L3BlcnJvci5tNApAQCAtMCwwICsxLDYzIEBACisjIHBlcnJvci5tNCBzZXJpYWwgNgorZG5sIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9GVU5DX1BFUlJPUl0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1NURElPX0hfREVGQVVMVFNdKQorICBBQ19SRVFVSVJFKFtnbF9IRUFERVJfRVJSTk9fSF0pCisgIEFDX1JFUVVJUkUoW2dsX0ZVTkNfU1RSRVJST1JfUl0pCisgIEFDX1JFUVVJUkUoW2dsX0ZVTkNfU1RSRVJST1JfMF0pCisgIGRubCBXZSBpbnRlbnRpb25hbGx5IGRvIG5vdCBjaGVjayBmb3IgdGhlIGJyb2FkZXIgUkVQTEFDRV9TVFJFUlJPUl9SLAorICBkbmwgc2luY2Ugb24gZ2xpYmMgc3lzdGVtcywgc3RyZXJyb3JfciBpcyByZXBsYWNlZCBvbmx5IGZvciBzaWduYXR1cmUKKyAgZG5sIGlzc3VlcywgYW5kIHBlcnJvciBpcyBqdXN0IGZpbmUuICBSYXRoZXIsIHdlIG9ubHkgd2FudCB0bworICBkbmwgcmVwbGFjZSBwZXJyb3IgaWYgc3RyZXJyb3JfciB3YXMgcmVwbGFjZWQgZm9yIGEgY29udGVudCBmaXguCisgIGlmIHRlc3QgIiRFUlJOT19IOiRSRVBMQUNFX1NUUkVSUk9SXzAiICE9IDowOyB0aGVuCisgICAgZG5sIFRoZSBzeXN0ZW0ncyBwZXJyb3IoKSBjYW5ub3Qga25vdyBhYm91dCB0aGUgbmV3IGVycm5vIHZhbHVlcyB3ZSBhZGQKKyAgICBkbmwgdG8gPGVycm5vLmg+LCBvciBhbnkgZml4IGZvciBzdHJlcnJvcigwKS4gUmVwbGFjZSBpdC4KKyAgICBSRVBMQUNFX1BFUlJPUj0xCisgIGZpCisgIGNhc2UgJHtnbF9jdl9mdW5jX3N0cmVycm9yX3Jfd29ya3MtdW5zZXR9IGluCisgICAgdW5zZXR8KnllcykKKyAgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHBlcnJvciBtYXRjaGVzIHN0cmVycm9yXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfcGVycm9yX3dvcmtzXSwKKyAgICAgICAgW0FDX1JVTl9JRkVMU0UoCisgICAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgICAgIFtbI2luY2x1ZGUgPGVycm5vLmg+CisgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAgICAgICAgICAgICAgXV0sCisgICAgICAgICAgICAgIFtbY2hhciAqc3RyID0gc3RyZXJyb3IgKC0xKTsKKyAgICAgICAgICAgICAgICBpZiAoIWdldGVudigiQ09ORlRFU1RfT1VUUFVUIikpIHJldHVybiAwOworICAgICAgICAgICAgICAgIGlmICghc3RyKSBzdHIgPSAiIjsKKyAgICAgICAgICAgICAgICBwdXRzIChzdHIpOworICAgICAgICAgICAgICAgIGVycm5vID0gLTE7CisgICAgICAgICAgICAgICAgcGVycm9yICgiIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgIF1dKV0sCisgICAgICAgICAgIFtpZiBDT05GVEVTVF9PVVRQVVQ9MSAuL2NvbmZ0ZXN0JEVYRUVYVCA+Y29uZnRlc3QudHh0MSAyPmNvbmZ0ZXN0LnR4dDIgXAorICAgICAgICAgICAgICAgJiYgY21wIGNvbmZ0ZXN0LnR4dDEgY29uZnRlc3QudHh0MiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfcGVycm9yX3dvcmtzPXllcworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBnbF9jdl9mdW5jX3BlcnJvcl93b3Jrcz1ubworICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIHJtIC1yZiBjb25mdGVzdC50eHQxIGNvbmZ0ZXN0LnR4dDJdLAorICAgICAgICAgICBbZ2xfY3ZfZnVuY19wZXJyb3Jfd29ya3M9bm9dLAorICAgICAgICAgICBbZG5sIEd1ZXNzIG5vIHdoZW4gY3Jvc3MtY29tcGlsaW5nLgorICAgICAgICAgICAgZ2xfY3ZfZnVuY19wZXJyb3Jfd29ya3M9Imd1ZXNzaW5nIG5vIgorICAgICAgICAgICBdKQorICAgICAgICBdKQorICAgICAgaWYgdGVzdCAiJGdsX2N2X2Z1bmNfcGVycm9yX3dvcmtzIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgUkVQTEFDRV9QRVJST1I9MQorICAgICAgZmkKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGRubCBUaGUgc3lzdGVtJ3MgcGVycm9yKCkgcHJvYmFibHkgaW5oZXJpdHMgdGhlIGJ1Z3MgaW4gdGhlCisgICAgICBkbmwgc3lzdGVtJ3Mgc3RyZXJyb3JfcigpLiBSZXBsYWNlIGl0LgorICAgICAgUkVQTEFDRV9QRVJST1I9MQorICAgICAgOzsKKyAgZXNhYworXSkKZGlmZiAtLWdpdCBhL200L3BpcGUyLm00IGIvbTQvcGlwZTIubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBhZDgyYgotLS0gL2Rldi9udWxsCisrKyBiL200L3BpcGUyLm00CkBAIC0wLDAgKzEsMTggQEAKKyMgcGlwZTIubTQgc2VyaWFsIDIKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ2xfRlVOQ19QSVBFMl0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1VOSVNURF9IX0RFRkFVTFRTXSkKKworICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHVuaXN0ZC5oPiB0byBkZWNsYXJlIHBpcGUyKCkuCisgIEFDX1JFUVVJUkUoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10pCisKKyAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbcGlwZTJdKQorICBpZiB0ZXN0ICRhY19jdl9mdW5jX3BpcGUyICE9IHllczsgdGhlbgorICAgIEhBVkVfUElQRTI9MAorICBmaQorXSkKZGlmZiAtLWdpdCBhL200L3BvLm00IGIvbTQvcG8ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVkOGY3YgotLS0gL2Rldi9udWxsCisrKyBiL200L3BvLm00CkBAIC0wLDAgKzEsNDUyIEBACisjIHBvLm00IHNlcmlhbCAxN2IKK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorZG5sCitkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CitkbmwgZnVuY3Rpb25hbGl0eS4KK2RubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCitkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCitkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCitkbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisKK2RubCBBdXRob3JzOgorZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUtMjAwMC4KK2RubCAgIEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPiwgMjAwMC0yMDAzLgorCitBQ19QUkVSRVEoWzIuNTBdKQorCitkbmwgQ2hlY2tzIGZvciBhbGwgcHJlcmVxdWlzaXRlcyBvZiB0aGUgcG8gc3ViZGlyZWN0b3J5LgorQUNfREVGVU4oW0FNX1BPX1NVQkRJUlNdLAorWworICBBQ19SRVFVSVJFKFtBQ19QUk9HX01BS0VfU0VUXSlkbmwKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19JTlNUQUxMXSlkbmwKKyAgQUNfUkVRVUlSRShbQU1fUFJPR19NS0RJUl9QXSlkbmwgZGVmaW5lZCBieSBhdXRvbWFrZQorICBBQ19SRVFVSVJFKFtBTV9OTFNdKWRubAorCisgIGRubCBSZWxlYXNlIHZlcnNpb24gb2YgdGhlIGdldHRleHQgbWFjcm9zLiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQKKyAgZG5sIHRoZSBnZXR0ZXh0IG1hY3JvcyBhbmQgcG8vTWFrZWZpbGUuaW4uaW4gYXJlIGluIHN5bmMuCisgIEFDX1NVQlNUKFtHRVRURVhUX01BQ1JPX1ZFUlNJT05dLCBbMC4xOF0pCisKKyAgZG5sIFBlcmZvcm0gdGhlIGZvbGxvd2luZyB0ZXN0cyBhbHNvIGlmIC0tZGlzYWJsZS1ubHMgaGFzIGJlZW4gZ2l2ZW4sCisgIGRubCBiZWNhdXNlIHRoZXkgYXJlIG5lZWRlZCBmb3IgIm1ha2UgZGlzdCIgdG8gd29yay4KKworICBkbmwgU2VhcmNoIGZvciBHTlUgbXNnZm10IGluIHRoZSBQQVRILgorICBkbmwgVGhlIGZpcnN0IHRlc3QgZXhjbHVkZXMgU29sYXJpcyBtc2dmbXQgYW5kIGVhcmx5IEdOVSBtc2dmbXQgdmVyc2lvbnMuCisgIGRubCBUaGUgc2Vjb25kIHRlc3QgZXhjbHVkZXMgRnJlZUJTRCBtc2dmbXQuCisgIEFNX1BBVEhfUFJPR19XSVRIX1RFU1QoTVNHRk1ULCBtc2dmbXQsCisgICAgWyRhY19kaXIvJGFjX3dvcmQgLS1zdGF0aXN0aWNzIC9kZXYvbnVsbCA+Jl1BU19NRVNTQUdFX0xPR19GRFsgMj4mMSAmJgorICAgICAoaWYgJGFjX2Rpci8kYWNfd29yZCAtLXN0YXRpc3RpY3MgL2Rldi9udWxsIDI+JjEgPi9kZXYvbnVsbCB8IGdyZXAgdXNhZ2UgPi9kZXYvbnVsbDsgdGhlbiBleGl0IDE7IGVsc2UgZXhpdCAwOyBmaSldLAorICAgIDopCisgIEFDX1BBVEhfUFJPRyhbR01TR0ZNVF0sIFtnbXNnZm10XSwgWyRNU0dGTVRdKQorCisgIGRubCBUZXN0IHdoZXRoZXIgaXQgaXMgR05VIG1zZ2ZtdCA+PSAwLjE1LgorY2hhbmdlcXVvdGUoLClkbmwKKyAgY2FzZSBgJE1TR0ZNVCAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluCisgICAgJycgfCAwLlswLTldIHwgMC5bMC05XS4qIHwgMC4xWzAtNF0gfCAwLjFbMC00XS4qKSBNU0dGTVRfMDE1PTogOzsKKyAgICAqKSBNU0dGTVRfMDE1PSRNU0dGTVQgOzsKKyAgZXNhYworY2hhbmdlcXVvdGUoWyxdKWRubAorICBBQ19TVUJTVChbTVNHRk1UXzAxNV0pCitjaGFuZ2VxdW90ZSgsKWRubAorICBjYXNlIGAkR01TR0ZNVCAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluCisgICAgJycgfCAwLlswLTldIHwgMC5bMC05XS4qIHwgMC4xWzAtNF0gfCAwLjFbMC00XS4qKSBHTVNHRk1UXzAxNT06IDs7CisgICAgKikgR01TR0ZNVF8wMTU9JEdNU0dGTVQgOzsKKyAgZXNhYworY2hhbmdlcXVvdGUoWyxdKWRubAorICBBQ19TVUJTVChbR01TR0ZNVF8wMTVdKQorCisgIGRubCBTZWFyY2ggZm9yIEdOVSB4Z2V0dGV4dCAwLjEyIG9yIG5ld2VyIGluIHRoZSBQQVRILgorICBkbmwgVGhlIGZpcnN0IHRlc3QgZXhjbHVkZXMgU29sYXJpcyB4Z2V0dGV4dCBhbmQgZWFybHkgR05VIHhnZXR0ZXh0IHZlcnNpb25zLgorICBkbmwgVGhlIHNlY29uZCB0ZXN0IGV4Y2x1ZGVzIEZyZWVCU0QgeGdldHRleHQuCisgIEFNX1BBVEhfUFJPR19XSVRIX1RFU1QoWEdFVFRFWFQsIHhnZXR0ZXh0LAorICAgIFskYWNfZGlyLyRhY193b3JkIC0tb21pdC1oZWFkZXIgLS1jb3B5cmlnaHQtaG9sZGVyPSAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0gL2Rldi9udWxsID4mXUFTX01FU1NBR0VfTE9HX0ZEWyAyPiYxICYmCisgICAgIChpZiAkYWNfZGlyLyRhY193b3JkIC0tb21pdC1oZWFkZXIgLS1jb3B5cmlnaHQtaG9sZGVyPSAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0gL2Rldi9udWxsIDI+JjEgPi9kZXYvbnVsbCB8IGdyZXAgdXNhZ2UgPi9kZXYvbnVsbDsgdGhlbiBleGl0IDE7IGVsc2UgZXhpdCAwOyBmaSldLAorICAgIDopCisgIGRubCBSZW1vdmUgbGVmdG92ZXIgZnJvbSBGcmVlQlNEIHhnZXR0ZXh0IGNhbGwuCisgIHJtIC1mIG1lc3NhZ2VzLnBvCisKKyAgZG5sIFRlc3Qgd2hldGhlciBpdCBpcyBHTlUgeGdldHRleHQgPj0gMC4xNS4KK2NoYW5nZXF1b3RlKCwpZG5sCisgIGNhc2UgYCRYR0VUVEVYVCAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluCisgICAgJycgfCAwLlswLTldIHwgMC5bMC05XS4qIHwgMC4xWzAtNF0gfCAwLjFbMC00XS4qKSBYR0VUVEVYVF8wMTU9OiA7OworICAgICopIFhHRVRURVhUXzAxNT0kWEdFVFRFWFQgOzsKKyAgZXNhYworY2hhbmdlcXVvdGUoWyxdKWRubAorICBBQ19TVUJTVChbWEdFVFRFWFRfMDE1XSkKKworICBkbmwgU2VhcmNoIGZvciBHTlUgbXNnbWVyZ2UgMC4xMSBvciBuZXdlciBpbiB0aGUgUEFUSC4KKyAgQU1fUEFUSF9QUk9HX1dJVEhfVEVTVChNU0dNRVJHRSwgbXNnbWVyZ2UsCisgICAgWyRhY19kaXIvJGFjX3dvcmQgLS11cGRhdGUgLXEgL2Rldi9udWxsIC9kZXYvbnVsbCA+Jl1BU19NRVNTQUdFX0xPR19GRFsgMj4mMV0sIDopCisKKyAgZG5sIEluc3RhbGxhdGlvbiBkaXJlY3Rvcmllcy4KKyAgZG5sIEF1dG9jb25mID49IDIuNjAgZGVmaW5lcyBsb2NhbGVkaXIuIEZvciBvbGRlciB2ZXJzaW9ucyBvZiBhdXRvY29uZiwgd2UKKyAgZG5sIGhhdmUgdG8gZGVmaW5lIGl0IGhlcmUsIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgaW4gcG8vTWFrZWZpbGUuCisgIHRlc3QgLW4gIiRsb2NhbGVkaXIiIHx8IGxvY2FsZWRpcj0nJHtkYXRhZGlyfS9sb2NhbGUnCisgIEFDX1NVQlNUKFtsb2NhbGVkaXJdKQorCisgIGRubCBTdXBwb3J0IGZvciBBTV9YR0VUVEVYVF9PUFRJT04uCisgIHRlc3QgLW4gIiR7WEdFVFRFWFRfRVhUUkFfT1BUSU9OUytzZXR9IiB8fCBYR0VUVEVYVF9FWFRSQV9PUFRJT05TPQorICBBQ19TVUJTVChbWEdFVFRFWFRfRVhUUkFfT1BUSU9OU10pCisKKyAgQUNfQ09ORklHX0NPTU1BTkRTKFtwby1kaXJlY3Rvcmllc10sIFtbCisgICAgZm9yIGFjX2ZpbGUgaW4gJENPTkZJR19GSUxFUzsgZG8KKyAgICAgICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIKKyAgICAgIGNhc2UgIiRhY19maWxlIiBpbgorICAgICAgICAqOiopIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlOi4qJSUnYCA7OworICAgICAgZXNhYworICAgICAgIyBQTyBkaXJlY3RvcmllcyBoYXZlIGEgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGZyb20gTWFrZWZpbGUuaW4uaW4uCisgICAgICBjYXNlICIkYWNfZmlsZSIgaW4gKi9NYWtlZmlsZS5pbikKKyAgICAgICAgIyBBZGp1c3QgYSByZWxhdGl2ZSBzcmNkaXIuCisgICAgICAgIGFjX2Rpcj1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyUvW14vXVteL10qJCUlJ2AKKyAgICAgICAgYWNfZGlyX3N1ZmZpeD0iL2BlY2hvICIkYWNfZGlyInxzZWQgJ3MlXlwuLyUlJ2AiCisgICAgICAgIGFjX2RvdHM9YGVjaG8gIiRhY19kaXJfc3VmZml4InxzZWQgJ3MlL1teL10qJS4uLyVnJ2AKKyAgICAgICAgIyBJbiBhdXRvY29uZi0yLjEzIGl0IGlzIGNhbGxlZCAkYWNfZ2l2ZW5fc3JjZGlyLgorICAgICAgICAjIEluIGF1dG9jb25mLTIuNTAgaXQgaXMgY2FsbGVkICRzcmNkaXIuCisgICAgICAgIHRlc3QgLW4gIiRhY19naXZlbl9zcmNkaXIiIHx8IGFjX2dpdmVuX3NyY2Rpcj0iJHNyY2RpciIKKyAgICAgICAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KKyAgICAgICAgICAuKSAgdG9wX3NyY2Rpcj1gZWNobyAkYWNfZG90c3xzZWQgJ3MlLyQlJSdgIDs7CisgICAgICAgICAgLyopIHRvcF9zcmNkaXI9IiRhY19naXZlbl9zcmNkaXIiIDs7CisgICAgICAgICAgKikgIHRvcF9zcmNkaXI9IiRhY19kb3RzJGFjX2dpdmVuX3NyY2RpciIgOzsKKyAgICAgICAgZXNhYworICAgICAgICAjIFRyZWF0IGEgZGlyZWN0b3J5IGFzIGEgUE8gZGlyZWN0b3J5IGlmIGFuZCBvbmx5IGlmIGl0IGhhcyBhCisgICAgICAgICMgUE9URklMRVMuaW4gZmlsZS4gVGhpcyBhbGxvd3MgcGFja2FnZXMgdG8gaGF2ZSBtdWx0aXBsZSBQTworICAgICAgICAjIGRpcmVjdG9yaWVzIHVuZGVyIGRpZmZlcmVudCBuYW1lcyBvciBpbiBkaWZmZXJlbnQgbG9jYXRpb25zLgorICAgICAgICBpZiB0ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iOyB0aGVuCisgICAgICAgICAgcm0gLWYgIiRhY19kaXIvUE9URklMRVMiCisgICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19kaXIvUE9URklMRVMiIHx8IGVjaG8gImNyZWF0aW5nICRhY19kaXIvUE9URklMRVMiCisgICAgICAgICAgZ3RfdGFiPWBwcmludGYgJ1x0J2AKKyAgICAgICAgICBjYXQgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9QT1RGSUxFUy5pbiIgfCBzZWQgLWUgIi9eIy9kIiAtZSAiL15bICR7Z3RfdGFifV0qXCQvZCIgLWUgInMsLiosICAgICAkdG9wX3NyY2Rpci8mIFxcXFwsIiB8IHNlZCAtZSAiXCRzL1woLipcKSBcXFxcL1wxLyIgPiAiJGFjX2Rpci9QT1RGSUxFUyIKKyAgICAgICAgICBQT01BS0VGSUxFREVQUz0iUE9URklMRVMuaW4iCisgICAgICAgICAgIyBBTExfTElOR1VBUywgUE9GSUxFUywgVVBEQVRFUE9GSUxFUywgRFVNTVlQT0ZJTEVTLCBHTU9GSUxFUyBkZXBlbmQKKyAgICAgICAgICAjIG9uICRhY19kaXIgYnV0IGRvbid0IGRlcGVuZCBvbiB1c2VyLXNwZWNpZmllZCBjb25maWd1cmF0aW9uCisgICAgICAgICAgIyBwYXJhbWV0ZXJzLgorICAgICAgICAgIGlmIHRlc3QgLWYgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9MSU5HVUFTIjsgdGhlbgorICAgICAgICAgICAgIyBUaGUgTElOR1VBUyBmaWxlIGNvbnRhaW5zIHRoZSBzZXQgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcy4KKyAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRPQlNPTEVURV9BTExfTElOR1VBUyI7IHRoZW4KKyAgICAgICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IHNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIiB8fCBlY2hvICJzZXR0aW5nIEFMTF9MSU5HVUFTIGluIGNvbmZpZ3VyZS5pbiBpcyBvYnNvbGV0ZSIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBBTExfTElOR1VBU189YHNlZCAtZSAiL14jL2QiIC1lICJzLyMuKi8vIiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL0xJTkdVQVMiYAorICAgICAgICAgICAgIyBIaWRlIHRoZSBBTExfTElOR1VBUyBhc3NpZ25tZW50IGZyb20gYXV0b21ha2UgPCAxLjUuCisgICAgICAgICAgICBldmFsICdBTExfTElOR1VBUycnPSRBTExfTElOR1VBU18nCisgICAgICAgICAgICBQT01BS0VGSUxFREVQUz0iJFBPTUFLRUZJTEVERVBTIExJTkdVQVMiCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgIyBUaGUgc2V0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMgd2FzIGdpdmVuIGluIGNvbmZpZ3VyZS5pbi4KKyAgICAgICAgICAgICMgSGlkZSB0aGUgQUxMX0xJTkdVQVMgYXNzaWdubWVudCBmcm9tIGF1dG9tYWtlIDwgMS41LgorICAgICAgICAgICAgZXZhbCAnQUxMX0xJTkdVQVMnJz0kT0JTT0xFVEVfQUxMX0xJTkdVQVMnCisgICAgICAgICAgZmkKKyAgICAgICAgICAjIENvbXB1dGUgUE9GSUxFUworICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLnBvKQorICAgICAgICAgICMgQ29tcHV0ZSBVUERBVEVQT0ZJTEVTCisgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5wby11cGRhdGUpCisgICAgICAgICAgIyBDb21wdXRlIERVTU1ZUE9GSUxFUworICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQobGFuZykubm9wKQorICAgICAgICAgICMgQ29tcHV0ZSBHTU9GSUxFUworICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLmdtbykKKyAgICAgICAgICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgorICAgICAgICAgICAgLikgc3JjZGlycHJlPSA7OworICAgICAgICAgICAgKikgc3JjZGlycHJlPSckKHNyY2RpcikvJyA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgICBQT0ZJTEVTPQorICAgICAgICAgIFVQREFURVBPRklMRVM9CisgICAgICAgICAgRFVNTVlQT0ZJTEVTPQorICAgICAgICAgIEdNT0ZJTEVTPQorICAgICAgICAgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKyAgICAgICAgICAgIFBPRklMRVM9IiRQT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5wbyIKKyAgICAgICAgICAgIFVQREFURVBPRklMRVM9IiRVUERBVEVQT0ZJTEVTICRsYW5nLnBvLXVwZGF0ZSIKKyAgICAgICAgICAgIERVTU1ZUE9GSUxFUz0iJERVTU1ZUE9GSUxFUyAkbGFuZy5ub3AiCisgICAgICAgICAgICBHTU9GSUxFUz0iJEdNT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5nbW8iCisgICAgICAgICAgZG9uZQorICAgICAgICAgICMgQ0FUQUxPR1MgZGVwZW5kcyBvbiBib3RoICRhY19kaXIgYW5kIHRoZSB1c2VyJ3MgTElOR1VBUworICAgICAgICAgICMgZW52aXJvbm1lbnQgdmFyaWFibGUuCisgICAgICAgICAgSU5TVF9MSU5HVUFTPQorICAgICAgICAgIGlmIHRlc3QgLW4gIiRBTExfTElOR1VBUyI7IHRoZW4KKyAgICAgICAgICAgIGZvciBwcmVzZW50bGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisgICAgICAgICAgICAgIHVzZWl0PW5vCisgICAgICAgICAgICAgIGlmIHRlc3QgIiVVTlNFVCUiICE9ICIkTElOR1VBUyI7IHRoZW4KKyAgICAgICAgICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkTElOR1VBUyIKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRBTExfTElOR1VBUyIKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZm9yIGRlc2lyZWRsYW5nIGluICRkZXNpcmVkbGFuZ3VhZ2VzOyBkbworICAgICAgICAgICAgICAgICMgVXNlIHRoZSBwcmVzZW50bGFuZyBjYXRhbG9nIGlmIGRlc2lyZWRsYW5nIGlzCisgICAgICAgICAgICAgICAgIyAgIGEuIGVxdWFsIHRvIHByZXNlbnRsYW5nLCBvcgorICAgICAgICAgICAgICAgICMgICBiLiBhIHZhcmlhbnQgb2YgcHJlc2VudGxhbmcgKGJlY2F1c2UgaW4gdGhpcyBjYXNlLAorICAgICAgICAgICAgICAgICMgICAgICBwcmVzZW50bGFuZyBjYW4gYmUgdXNlZCBhcyBhIGZhbGxiYWNrIGZvciBtZXNzYWdlcworICAgICAgICAgICAgICAgICMgICAgICB3aGljaCBhcmUgbm90IHRyYW5zbGF0ZWQgaW4gdGhlIGRlc2lyZWRsYW5nIGNhdGFsb2cpLgorICAgICAgICAgICAgICAgIGNhc2UgIiRkZXNpcmVkbGFuZyIgaW4KKyAgICAgICAgICAgICAgICAgICIkcHJlc2VudGxhbmciKikgdXNlaXQ9eWVzOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgaWYgdGVzdCAkdXNlaXQgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgICBJTlNUX0xJTkdVQVM9IiRJTlNUX0xJTkdVQVMgJHByZXNlbnRsYW5nIgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZG9uZQorICAgICAgICAgIGZpCisgICAgICAgICAgQ0FUQUxPR1M9CisgICAgICAgICAgaWYgdGVzdCAtbiAiJElOU1RfTElOR1VBUyI7IHRoZW4KKyAgICAgICAgICAgIGZvciBsYW5nIGluICRJTlNUX0xJTkdVQVM7IGRvCisgICAgICAgICAgICAgIENBVEFMT0dTPSIkQ0FUQUxPR1MgJGxhbmcuZ21vIgorICAgICAgICAgICAgZG9uZQorICAgICAgICAgIGZpCisgICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19kaXIvTWFrZWZpbGUiIHx8IGVjaG8gImNyZWF0aW5nICRhY19kaXIvTWFrZWZpbGUiCisgICAgICAgICAgc2VkIC1lICIvXlBPVEZJTEVTID0vciAkYWNfZGlyL1BPVEZJTEVTIiAtZSAiL14jIE1ha2V2YXJzL3IgJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL01ha2V2YXJzIiAtZSAic3xAUE9GSUxFU0B8JFBPRklMRVN8ZyIgLWUgInN8QFVQREFURVBPRklMRVNAfCRVUERBVEVQT0ZJTEVTfGciIC1lICJzfEBEVU1NWVBPRklMRVNAfCREVU1NWVBPRklMRVN8ZyIgLWUgInN8QEdNT0ZJTEVTQHwkR01PRklMRVN8ZyIgLWUgInN8QENBVEFMT0dTQHwkQ0FUQUxPR1N8ZyIgLWUgInN8QFBPTUFLRUZJTEVERVBTQHwkUE9NQUtFRklMRURFUFN8ZyIgIiRhY19kaXIvTWFrZWZpbGUuaW4iID4gIiRhY19kaXIvTWFrZWZpbGUiCisgICAgICAgICAgZm9yIGYgaW4gIiRhY19naXZlbl9zcmNkaXIvJGFjX2RpciIvUnVsZXMtKjsgZG8KKyAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgorICAgICAgICAgICAgICBjYXNlICIkZiIgaW4KKyAgICAgICAgICAgICAgICAqLm9yaWcgfCAqLmJhayB8ICp+KSA7OworICAgICAgICAgICAgICAgICopIGNhdCAiJGYiID4+ICIkYWNfZGlyL01ha2VmaWxlIiA7OworICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBmaQorICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lXV0sCisgICBbIyBDYXB0dXJlIHRoZSB2YWx1ZSBvZiBvYnNvbGV0ZSBBTExfTElOR1VBUyBiZWNhdXNlIHdlIG5lZWQgaXQgdG8gY29tcHV0ZQorICAgICMgUE9GSUxFUywgVVBEQVRFUE9GSUxFUywgRFVNTVlQT0ZJTEVTLCBHTU9GSUxFUywgQ0FUQUxPR1MuIEJ1dCBoaWRlIGl0CisgICAgIyBmcm9tIGF1dG9tYWtlIDwgMS41LgorICAgIGV2YWwgJ09CU09MRVRFX0FMTF9MSU5HVUFTJyc9IiRBTExfTElOR1VBUyInCisgICAgIyBDYXB0dXJlIHRoZSB2YWx1ZSBvZiBMSU5HVUFTIGJlY2F1c2Ugd2UgbmVlZCBpdCB0byBjb21wdXRlIENBVEFMT0dTLgorICAgIExJTkdVQVM9IiR7TElOR1VBUy0lVU5TRVQlfSIKKyAgIF0pCitdKQorCitkbmwgUG9zdHByb2Nlc3NlcyBhIE1ha2VmaWxlIGluIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgUE8gZmlsZXMuCitBQ19ERUZVTihbQU1fUE9TVFBST0NFU1NfUE9fTUFLRUZJTEVdLAorWworICAjIFdoZW4gdGhpcyBjb2RlIGlzIHJ1biwgaW4gY29uZmlnLnN0YXR1cywgdHdvIHZhcmlhYmxlcyBoYXZlIGFscmVhZHkgYmVlbgorICAjIHNldDoKKyAgIyAtIE9CU09MRVRFX0FMTF9MSU5HVUFTIGlzIHRoZSB2YWx1ZSBvZiBMSU5HVUFTIHNldCBpbiBjb25maWd1cmUuaW4sCisgICMgLSBMSU5HVUFTIGlzIHRoZSB2YWx1ZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTElOR1VBUyBhdCBjb25maWd1cmUKKyAgIyAgIHRpbWUuCisKK2NoYW5nZXF1b3RlKCwpZG5sCisgICMgQWRqdXN0IGEgcmVsYXRpdmUgc3JjZGlyLgorICBhY19kaXI9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlL1teL11bXi9dKiQlJSdgCisgIGFjX2Rpcl9zdWZmaXg9Ii9gZWNobyAiJGFjX2RpciJ8c2VkICdzJV5cLi8lJSdgIgorICBhY19kb3RzPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCJ8c2VkICdzJS9bXi9dKiUuLi8lZydgCisgICMgSW4gYXV0b2NvbmYtMi4xMyBpdCBpcyBjYWxsZWQgJGFjX2dpdmVuX3NyY2Rpci4KKyAgIyBJbiBhdXRvY29uZi0yLjUwIGl0IGlzIGNhbGxlZCAkc3JjZGlyLgorICB0ZXN0IC1uICIkYWNfZ2l2ZW5fc3JjZGlyIiB8fCBhY19naXZlbl9zcmNkaXI9IiRzcmNkaXIiCisgIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCisgICAgLikgIHRvcF9zcmNkaXI9YGVjaG8gJGFjX2RvdHN8c2VkICdzJS8kJSUnYCA7OworICAgIC8qKSB0b3Bfc3JjZGlyPSIkYWNfZ2l2ZW5fc3JjZGlyIiA7OworICAgICopICB0b3Bfc3JjZGlyPSIkYWNfZG90cyRhY19naXZlbl9zcmNkaXIiIDs7CisgIGVzYWMKKworICAjIEZpbmQgYSB3YXkgdG8gZWNobyBzdHJpbmdzIHdpdGhvdXQgaW50ZXJwcmV0aW5nIGJhY2tzbGFzaC4KKyAgaWYgdGVzdCAiWGAoZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCc7IHRoZW4KKyAgICBndF9lY2hvPSdlY2hvJworICBlbHNlCisgICAgaWYgdGVzdCAiWGAocHJpbnRmICclc1xuJyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCc7IHRoZW4KKyAgICAgIGd0X2VjaG89J3ByaW50ZiAlc1xuJworICAgIGVsc2UKKyAgICAgIGVjaG9fZnVuYyAoKSB7CisgICAgICAgIGNhdCA8PEVPVAorJCoKK0VPVAorICAgICAgfQorICAgICAgZ3RfZWNobz0nZWNob19mdW5jJworICAgIGZpCisgIGZpCisKKyAgIyBBIHNlZCBzY3JpcHQgdGhhdCBleHRyYWN0cyB0aGUgdmFsdWUgb2YgVkFSSUFCTEUgZnJvbSBhIE1ha2VmaWxlLgorICB0YWI9YHByaW50ZiAnXHQnYAorICBzZWRfeF92YXJpYWJsZT0nCisjIFRlc3QgaWYgdGhlIGhvbGQgc3BhY2UgaXMgZW1wdHkuCit4CitzL1AvUC8KK3gKK3RhCisjIFllcyBpdCB3YXMgZW1wdHkuIExvb2sgaWYgd2UgaGF2ZSB0aGUgZXhwZWN0ZWQgdmFyaWFibGUgZGVmaW5pdGlvbi4KKy9eWyciJHt0YWJ9IicgXSpWQVJJQUJMRVsnIiR7dGFifSInIF0qPS97CisgICMgU2VlbiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgdmFyaWFibGUgZGVmaW5pdGlvbi4KKyAgcy9eWyciJHt0YWJ9IicgXSpWQVJJQUJMRVsnIiR7dGFifSInIF0qPS8vCisgIGJhCit9CitiZAorOmEKKyMgSGVyZSB3ZSBhcmUgcHJvY2Vzc2luZyBhIGxpbmUgZnJvbSB0aGUgdmFyaWFibGUgZGVmaW5pdGlvbi4KKyMgUmVtb3ZlIGNvbW1lbnQsIG1vcmUgcHJlY2lzZWx5IHJlcGxhY2UgaXQgd2l0aCBhIHNwYWNlLgorcy8jLiokLyAvCisjIFNlZSBpZiB0aGUgbGluZSBlbmRzIGluIGEgYmFja3NsYXNoLgordGIKKzpiCitzL1xcJC8vCisjIFByaW50IHRoZSBsaW5lLCB3aXRob3V0IHRoZSB0cmFpbGluZyBiYWNrc2xhc2guCitwCit0YworIyBUaGVyZSB3YXMgbm8gdHJhaWxpbmcgYmFja3NsYXNoLiBUaGUgZW5kIG9mIHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uIGlzCisjIHJlYWNoZWQuIENsZWFyIHRoZSBob2xkIHNwYWNlLgorcy9eLiokLy8KK3gKK2JkCis6YworIyBBIHRyYWlsaW5nIGJhY2tzbGFzaCBtZWFucyB0aGF0IHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uIGNvbnRpbnVlcyBpbiB0aGUKKyMgbmV4dCBsaW5lLiBQdXQgYSBub25lbXB0eSBzdHJpbmcgaW50byB0aGUgaG9sZCBzcGFjZSB0byBpbmRpY2F0ZSB0aGlzLgorcy9eLiokL1AvCit4Cis6ZAorJworY2hhbmdlcXVvdGUoWyxdKWRubAorCisgICMgU2V0IFBPVEZJTEVTIHRvIHRoZSB2YWx1ZSBvZiB0aGUgTWFrZWZpbGUgdmFyaWFibGUgUE9URklMRVMuCisgIHNlZF94X1BPVEZJTEVTPWAkZ3RfZWNobyAiJHNlZF94X3ZhcmlhYmxlIiB8IHNlZCAtZSAnL14gKiMvZCcgLWUgJ3MvVkFSSUFCTEUvUE9URklMRVMvZydgCisgIFBPVEZJTEVTPWBzZWQgLW4gLWUgIiRzZWRfeF9QT1RGSUxFUyIgPCAiJGFjX2ZpbGUiYAorICAjIENvbXB1dGUgUE9URklMRVNfREVQUyBhcworICAjICAgJChmb3JlYWNoIGZpbGUsICQoUE9URklMRVMpLCAkKHRvcF9zcmNkaXIpLyQoZmlsZSkpCisgIFBPVEZJTEVTX0RFUFM9CisgIGZvciBmaWxlIGluICRQT1RGSUxFUzsgZG8KKyAgICBQT1RGSUxFU19ERVBTPSIkUE9URklMRVNfREVQUyAiJyQodG9wX3NyY2RpcikvJyIkZmlsZSIKKyAgZG9uZQorICBQT01BS0VGSUxFREVQUz0iIgorCisgIGlmIHRlc3QgLW4gIiRPQlNPTEVURV9BTExfTElOR1VBUyI7IHRoZW4KKyAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogc2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiIHx8IGVjaG8gInNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIgorICBmaQorICBpZiB0ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyI7IHRoZW4KKyAgICAjIFRoZSBMSU5HVUFTIGZpbGUgY29udGFpbnMgdGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzLgorICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgLWUgInMvIy4qLy8iICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyJgCisgICAgUE9NQUtFRklMRURFUFM9IiRQT01BS0VGSUxFREVQUyBMSU5HVUFTIgorICBlbHNlCisgICAgIyBTZXQgQUxMX0xJTkdVQVMgdG8gdGhlIHZhbHVlIG9mIHRoZSBNYWtlZmlsZSB2YXJpYWJsZSBMSU5HVUFTLgorICAgIHNlZF94X0xJTkdVQVM9YCRndF9lY2hvICIkc2VkX3hfdmFyaWFibGUiIHwgc2VkIC1lICcvXiAqIy9kJyAtZSAncy9WQVJJQUJMRS9MSU5HVUFTL2cnYAorICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1uIC1lICIkc2VkX3hfTElOR1VBUyIgPCAiJGFjX2ZpbGUiYAorICBmaQorICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbm1lbnQgZnJvbSBhdXRvbWFrZSA8IDEuNS4KKyAgZXZhbCAnQUxMX0xJTkdVQVMnJz0kQUxMX0xJTkdVQVNfJworICAjIENvbXB1dGUgUE9GSUxFUworICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5wbykKKyAgIyBDb21wdXRlIFVQREFURVBPRklMRVMKKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5wby11cGRhdGUpCisgICMgQ29tcHV0ZSBEVU1NWVBPRklMRVMKKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5ub3ApCisgICMgQ29tcHV0ZSBHTU9GSUxFUworICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5nbW8pCisgICMgQ29tcHV0ZSBQUk9QRVJUSUVTRklMRVMKKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJCh0b3Bfc3JjZGlyKS8kKERPTUFJTilfJChsYW5nKS5wcm9wZXJ0aWVzKQorICAjIENvbXB1dGUgQ0xBU1NGSUxFUworICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHRvcF9zcmNkaXIpLyQoRE9NQUlOKV8kKGxhbmcpLmNsYXNzKQorICAjIENvbXB1dGUgUU1GSUxFUworICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5xbSkKKyAgIyBDb21wdXRlIE1TR0ZJTEVTCisgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGZyb2IgJChsYW5nKSkubXNnKQorICAjIENvbXB1dGUgUkVTT1VSQ0VTRExMRklMRVMKKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQoZnJvYiAkKGxhbmcpKS8kKERPTUFJTikucmVzb3VyY2VzLmRsbCkKKyAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KKyAgICAuKSBzcmNkaXJwcmU9IDs7CisgICAgKikgc3JjZGlycHJlPSckKHNyY2RpcikvJyA7OworICBlc2FjCisgIFBPRklMRVM9CisgIFVQREFURVBPRklMRVM9CisgIERVTU1ZUE9GSUxFUz0KKyAgR01PRklMRVM9CisgIFBST1BFUlRJRVNGSUxFUz0KKyAgQ0xBU1NGSUxFUz0KKyAgUU1GSUxFUz0KKyAgTVNHRklMRVM9CisgIFJFU09VUkNFU0RMTEZJTEVTPQorICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisgICAgUE9GSUxFUz0iJFBPRklMRVMgJHNyY2RpcnByZSRsYW5nLnBvIgorICAgIFVQREFURVBPRklMRVM9IiRVUERBVEVQT0ZJTEVTICRsYW5nLnBvLXVwZGF0ZSIKKyAgICBEVU1NWVBPRklMRVM9IiREVU1NWVBPRklMRVMgJGxhbmcubm9wIgorICAgIEdNT0ZJTEVTPSIkR01PRklMRVMgJHNyY2RpcnByZSRsYW5nLmdtbyIKKyAgICBQUk9QRVJUSUVTRklMRVM9IiRQUk9QRVJUSUVTRklMRVMgXCQodG9wX3NyY2RpcikvXCQoRE9NQUlOKV8kbGFuZy5wcm9wZXJ0aWVzIgorICAgIENMQVNTRklMRVM9IiRDTEFTU0ZJTEVTIFwkKHRvcF9zcmNkaXIpL1wkKERPTUFJTilfJGxhbmcuY2xhc3MiCisgICAgUU1GSUxFUz0iJFFNRklMRVMgJHNyY2RpcnByZSRsYW5nLnFtIgorICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL1wuLiokLy8nIC1lICd5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LydgCisgICAgTVNHRklMRVM9IiRNU0dGSUxFUyAkc3JjZGlycHJlJGZyb2JiZWRsYW5nLm1zZyIKKyAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9fLy0vZycgLWUgJ3MvXnNyLUNTL3NyLVNQLycgLWUgJ3MvQGxhdGluJC8tTGF0bi8nIC1lICdzL0BjeXJpbGxpYyQvLUN5cmwvJyAtZSAncy9ec3ItU1AkL3NyLVNQLUxhdG4vJyAtZSAncy9edXotVVokL3V6LVVaLUxhdG4vJ2AKKyAgICBSRVNPVVJDRVNETExGSUxFUz0iJFJFU09VUkNFU0RMTEZJTEVTICRzcmNkaXJwcmUkZnJvYmJlZGxhbmcvXCQoRE9NQUlOKS5yZXNvdXJjZXMuZGxsIgorICBkb25lCisgICMgQ0FUQUxPR1MgZGVwZW5kcyBvbiBib3RoICRhY19kaXIgYW5kIHRoZSB1c2VyJ3MgTElOR1VBUworICAjIGVudmlyb25tZW50IHZhcmlhYmxlLgorICBJTlNUX0xJTkdVQVM9CisgIGlmIHRlc3QgLW4gIiRBTExfTElOR1VBUyI7IHRoZW4KKyAgICBmb3IgcHJlc2VudGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworICAgICAgdXNlaXQ9bm8KKyAgICAgIGlmIHRlc3QgIiVVTlNFVCUiICE9ICIkTElOR1VBUyI7IHRoZW4KKyAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJExJTkdVQVMiCisgICAgICBlbHNlCisgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRBTExfTElOR1VBUyIKKyAgICAgIGZpCisgICAgICBmb3IgZGVzaXJlZGxhbmcgaW4gJGRlc2lyZWRsYW5ndWFnZXM7IGRvCisgICAgICAgICMgVXNlIHRoZSBwcmVzZW50bGFuZyBjYXRhbG9nIGlmIGRlc2lyZWRsYW5nIGlzCisgICAgICAgICMgICBhLiBlcXVhbCB0byBwcmVzZW50bGFuZywgb3IKKyAgICAgICAgIyAgIGIuIGEgdmFyaWFudCBvZiBwcmVzZW50bGFuZyAoYmVjYXVzZSBpbiB0aGlzIGNhc2UsCisgICAgICAgICMgICAgICBwcmVzZW50bGFuZyBjYW4gYmUgdXNlZCBhcyBhIGZhbGxiYWNrIGZvciBtZXNzYWdlcworICAgICAgICAjICAgICAgd2hpY2ggYXJlIG5vdCB0cmFuc2xhdGVkIGluIHRoZSBkZXNpcmVkbGFuZyBjYXRhbG9nKS4KKyAgICAgICAgY2FzZSAiJGRlc2lyZWRsYW5nIiBpbgorICAgICAgICAgICIkcHJlc2VudGxhbmciKikgdXNlaXQ9eWVzOzsKKyAgICAgICAgZXNhYworICAgICAgZG9uZQorICAgICAgaWYgdGVzdCAkdXNlaXQgPSB5ZXM7IHRoZW4KKyAgICAgICAgSU5TVF9MSU5HVUFTPSIkSU5TVF9MSU5HVUFTICRwcmVzZW50bGFuZyIKKyAgICAgIGZpCisgICAgZG9uZQorICBmaQorICBDQVRBTE9HUz0KKyAgSkFWQUNBVEFMT0dTPQorICBRVENBVEFMT0dTPQorICBUQ0xDQVRBTE9HUz0KKyAgQ1NIQVJQQ0FUQUxPR1M9CisgIGlmIHRlc3QgLW4gIiRJTlNUX0xJTkdVQVMiOyB0aGVuCisgICAgZm9yIGxhbmcgaW4gJElOU1RfTElOR1VBUzsgZG8KKyAgICAgIENBVEFMT0dTPSIkQ0FUQUxPR1MgJGxhbmcuZ21vIgorICAgICAgSkFWQUNBVEFMT0dTPSIkSkFWQUNBVEFMT0dTIFwkKERPTUFJTilfJGxhbmcucHJvcGVydGllcyIKKyAgICAgIFFUQ0FUQUxPR1M9IiRRVENBVEFMT0dTICRsYW5nLnFtIgorICAgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXC4uKiQvLycgLWUgJ3kvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovJ2AKKyAgICAgIFRDTENBVEFMT0dTPSIkVENMQ0FUQUxPR1MgJGZyb2JiZWRsYW5nLm1zZyIKKyAgICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL18vLS9nJyAtZSAncy9ec3ItQ1Mvc3ItU1AvJyAtZSAncy9AbGF0aW4kLy1MYXRuLycgLWUgJ3MvQGN5cmlsbGljJC8tQ3lybC8nIC1lICdzL15zci1TUCQvc3ItU1AtTGF0bi8nIC1lICdzL151ei1VWiQvdXotVVotTGF0bi8nYAorICAgICAgQ1NIQVJQQ0FUQUxPR1M9IiRDU0hBUlBDQVRBTE9HUyAkZnJvYmJlZGxhbmcvXCQoRE9NQUlOKS5yZXNvdXJjZXMuZGxsIgorICAgIGRvbmUKKyAgZmkKKworICBzZWQgLWUgInN8QFBPVEZJTEVTX0RFUFNAfCRQT1RGSUxFU19ERVBTfGciIC1lICJzfEBQT0ZJTEVTQHwkUE9GSUxFU3xnIiAtZSAic3xAVVBEQVRFUE9GSUxFU0B8JFVQREFURVBPRklMRVN8ZyIgLWUgInN8QERVTU1ZUE9GSUxFU0B8JERVTU1ZUE9GSUxFU3xnIiAtZSAic3xAR01PRklMRVNAfCRHTU9GSUxFU3xnIiAtZSAic3xAUFJPUEVSVElFU0ZJTEVTQHwkUFJPUEVSVElFU0ZJTEVTfGciIC1lICJzfEBDTEFTU0ZJTEVTQHwkQ0xBU1NGSUxFU3xnIiAtZSAic3xAUU1GSUxFU0B8JFFNRklMRVN8ZyIgLWUgInN8QE1TR0ZJTEVTQHwkTVNHRklMRVN8ZyIgLWUgInN8QFJFU09VUkNFU0RMTEZJTEVTQHwkUkVTT1VSQ0VTRExMRklMRVN8ZyIgLWUgInN8QENBVEFMT0dTQHwkQ0FUQUxPR1N8ZyIgLWUgInN8QEpBVkFDQVRBTE9HU0B8JEpBVkFDQVRBTE9HU3xnIiAtZSAic3xAUVRDQVRBTE9HU0B8JFFUQ0FUQUxPR1N8ZyIgLWUgInN8QFRDTENBVEFMT0dTQHwkVENMQ0FUQUxPR1N8ZyIgLWUgInN8QENTSEFSUENBVEFMT0dTQHwkQ1NIQVJQQ0FUQUxPR1N8ZyIgLWUgJ3MsXiNkaXN0ZGlyOixkaXN0ZGlyOiwnIDwgIiRhY19maWxlIiA+ICIkYWNfZmlsZS50bXAiCisgIHRhYj1gcHJpbnRmICdcdCdgCisgIGlmIGdyZXAgLWwgJ0BUQ0xDQVRBTE9HU0AnICIkYWNfZmlsZSIgPiAvZGV2L251bGw7IHRoZW4KKyAgICAjIEFkZCBkZXBlbmRlbmNpZXMgdGhhdCBjYW5ub3QgYmUgZm9ybXVsYXRlZCBhcyBhIHNpbXBsZSBzdWZmaXggcnVsZS4KKyAgICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9cLi4qJC8vJyAtZSAneS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8nYAorICAgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCiskZnJvYmJlZGxhbmcubXNnOiAkbGFuZy5wbworJHt0YWJ9QGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS10Y2wgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8iOyBcCiske3RhYn1cJChNU0dGTVQpIC1jIC0tdGNsIC1kICJcJChzcmNkaXIpIiAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gfHwgeyBybSAtZiAiXCQoc3JjZGlyKS8kZnJvYmJlZGxhbmcubXNnIjsgZXhpdCAxOyB9CitFT0YKKyAgICBkb25lCisgIGZpCisgIGlmIGdyZXAgLWwgJ0BDU0hBUlBDQVRBTE9HU0AnICIkYWNfZmlsZSIgPiAvZGV2L251bGw7IHRoZW4KKyAgICAjIEFkZCBkZXBlbmRlbmNpZXMgdGhhdCBjYW5ub3QgYmUgZm9ybXVsYXRlZCBhcyBhIHNpbXBsZSBzdWZmaXggcnVsZS4KKyAgICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9fLy0vZycgLWUgJ3MvXnNyLUNTL3NyLVNQLycgLWUgJ3MvQGxhdGluJC8tTGF0bi8nIC1lICdzL0BjeXJpbGxpYyQvLUN5cmwvJyAtZSAncy9ec3ItU1AkL3NyLVNQLUxhdG4vJyAtZSAncy9edXotVVokL3V6LVVaLUxhdG4vJ2AKKyAgICAgIGNhdCA+PiAiJGFjX2ZpbGUudG1wIiA8PEVPRgorJGZyb2JiZWRsYW5nL1wkKERPTUFJTikucmVzb3VyY2VzLmRsbDogJGxhbmcucG8KKyR7dGFifUBlY2hvICJcJChNU0dGTVQpIC1jIC0tY3NoYXJwIC1kIFwkKHNyY2RpcikgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIC1yIFwkKERPTUFJTikiOyBcCiske3RhYn1cJChNU0dGTVQpIC1jIC0tY3NoYXJwIC1kICJcJChzcmNkaXIpIiAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gLXIgIlwkKERPTUFJTikiIHx8IHsgcm0gLWYgIlwkKHNyY2RpcikvJGZyb2JiZWRsYW5nLm1zZyI7IGV4aXQgMTsgfQorRU9GCisgICAgZG9uZQorICBmaQorICBpZiB0ZXN0IC1uICIkUE9NQUtFRklMRURFUFMiOyB0aGVuCisgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCitNYWtlZmlsZTogJFBPTUFLRUZJTEVERVBTCitFT0YKKyAgZmkKKyAgbXYgIiRhY19maWxlLnRtcCIgIiRhY19maWxlIgorXSkKKworZG5sIEluaXRpYWxpemVzIHRoZSBhY2N1bXVsYXRvciB1c2VkIGJ5IEFNX1hHRVRURVhUX09QVElPTi4KK0FDX0RFRlVOKFtBTV9YR0VUVEVYVF9PUFRJT05fSU5JVF0sCitbCisgIFhHRVRURVhUX0VYVFJBX09QVElPTlM9CitdKQorCitkbmwgUmVnaXN0ZXJzIGFuIG9wdGlvbiB0byBiZSBwYXNzZWQgdG8geGdldHRleHQgaW4gdGhlIHBvIHN1YmRpcmVjdG9yeS4KK0FDX0RFRlVOKFtBTV9YR0VUVEVYVF9PUFRJT05dLAorWworICBBQ19SRVFVSVJFKFtBTV9YR0VUVEVYVF9PUFRJT05fSU5JVF0pCisgIFhHRVRURVhUX0VYVFJBX09QVElPTlM9IiRYR0VUVEVYVF9FWFRSQV9PUFRJT05TICQxIgorXSkKZGlmZiAtLWdpdCBhL200L3BvX2dsLm00IGIvbTQvcG9fZ2wubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNzk1ZWUuLjAwMDAwMDAKLS0tIGEvbTQvcG9fZ2wubTQKKysrIC9kZXYvbnVsbApAQCAtMSw0MjkgKzAsMCBAQAotIyBwby5tNCBzZXJpYWwgNyAoZ2V0dGV4dC0wLjE0LjMpCi1kbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLWRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLWRubAotZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKLWRubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi1kbmwgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAotZG5sIGZ1bmN0aW9uYWxpdHkuCi1kbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAotZG5sIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEdOVQotZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotZG5sIFRoZXkgYXJlICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgotCi1kbmwgQXV0aG9yczoKLWRubCAgIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAxOTk1LTIwMDAuCi1kbmwgICBCcnVubyBIYWlibGUgPGhhaWJsZUBjbGlzcC5jb25zLm9yZz4sIDIwMDAtMjAwMy4KLQotQUNfUFJFUkVRKDIuNTApCi0KLWRubCBDaGVja3MgZm9yIGFsbCBwcmVyZXF1aXNpdGVzIG9mIHRoZSBwbyBzdWJkaXJlY3RvcnkuCi1BQ19ERUZVTihbQU1fUE9fU1VCRElSU10sCi1bCi0gIEFDX1JFUVVJUkUoW0FDX1BST0dfTUFLRV9TRVRdKWRubAotICBBQ19SRVFVSVJFKFtBQ19QUk9HX0lOU1RBTExdKWRubAotICBBQ19SRVFVSVJFKFtBTV9NS0lOU1RBTExESVJTXSlkbmwKLSAgQUNfUkVRVUlSRShbQU1fTkxTXSlkbmwKLQotICBkbmwgUGVyZm9ybSB0aGUgZm9sbG93aW5nIHRlc3RzIGFsc28gaWYgLS1kaXNhYmxlLW5scyBoYXMgYmVlbiBnaXZlbiwKLSAgZG5sIGJlY2F1c2UgdGhleSBhcmUgbmVlZGVkIGZvciAibWFrZSBkaXN0IiB0byB3b3JrLgotCi0gIGRubCBTZWFyY2ggZm9yIEdOVSBtc2dmbXQgaW4gdGhlIFBBVEguCi0gIGRubCBUaGUgZmlyc3QgdGVzdCBleGNsdWRlcyBTb2xhcmlzIG1zZ2ZtdCBhbmQgZWFybHkgR05VIG1zZ2ZtdCB2ZXJzaW9ucy4KLSAgZG5sIFRoZSBzZWNvbmQgdGVzdCBleGNsdWRlcyBGcmVlQlNEIG1zZ2ZtdC4KLSAgQU1fUEFUSF9QUk9HX1dJVEhfVEVTVChNU0dGTVQsIG1zZ2ZtdCwKLSAgICBbJGFjX2Rpci8kYWNfd29yZCAtLXN0YXRpc3RpY3MgL2Rldi9udWxsID4mXUFTX01FU1NBR0VfTE9HX0ZEWyAyPiYxICYmCi0gICAgIChpZiAkYWNfZGlyLyRhY193b3JkIC0tc3RhdGlzdGljcyAvZGV2L251bGwgMj4mMSA+L2Rldi9udWxsIHwgZ3JlcCB1c2FnZSA+L2Rldi9udWxsOyB0aGVuIGV4aXQgMTsgZWxzZSBleGl0IDA7IGZpKV0sCi0gICAgOikKLSAgQUNfUEFUSF9QUk9HKEdNU0dGTVQsIGdtc2dmbXQsICRNU0dGTVQpCi0KLSAgZG5sIFNlYXJjaCBmb3IgR05VIHhnZXR0ZXh0IDAuMTIgb3IgbmV3ZXIgaW4gdGhlIFBBVEguCi0gIGRubCBUaGUgZmlyc3QgdGVzdCBleGNsdWRlcyBTb2xhcmlzIHhnZXR0ZXh0IGFuZCBlYXJseSBHTlUgeGdldHRleHQgdmVyc2lvbnMuCi0gIGRubCBUaGUgc2Vjb25kIHRlc3QgZXhjbHVkZXMgRnJlZUJTRCB4Z2V0dGV4dC4KLSAgQU1fUEFUSF9QUk9HX1dJVEhfVEVTVChYR0VUVEVYVCwgeGdldHRleHQsCi0gICAgWyRhY19kaXIvJGFjX3dvcmQgLS1vbWl0LWhlYWRlciAtLWNvcHlyaWdodC1ob2xkZXI9IC0tbXNnaWQtYnVncy1hZGRyZXNzPSAvZGV2L251bGwgPiZdQVNfTUVTU0FHRV9MT0dfRkRbIDI+JjEgJiYKLSAgICAgKGlmICRhY19kaXIvJGFjX3dvcmQgLS1vbWl0LWhlYWRlciAtLWNvcHlyaWdodC1ob2xkZXI9IC0tbXNnaWQtYnVncy1hZGRyZXNzPSAvZGV2L251bGwgMj4mMSA+L2Rldi9udWxsIHwgZ3JlcCB1c2FnZSA+L2Rldi9udWxsOyB0aGVuIGV4aXQgMTsgZWxzZSBleGl0IDA7IGZpKV0sCi0gICAgOikKLSAgZG5sIFJlbW92ZSBsZWZ0b3ZlciBmcm9tIEZyZWVCU0QgeGdldHRleHQgY2FsbC4KLSAgcm0gLWYgbWVzc2FnZXMucG8KLQotICBkbmwgU2VhcmNoIGZvciBHTlUgbXNnbWVyZ2UgMC4xMSBvciBuZXdlciBpbiB0aGUgUEFUSC4KLSAgQU1fUEFUSF9QUk9HX1dJVEhfVEVTVChNU0dNRVJHRSwgbXNnbWVyZ2UsCi0gICAgWyRhY19kaXIvJGFjX3dvcmQgLS11cGRhdGUgLXEgL2Rldi9udWxsIC9kZXYvbnVsbCA+Jl1BU19NRVNTQUdFX0xPR19GRFsgMj4mMV0sIDopCi0KLSAgZG5sIFRoaXMgY291bGQgZ28gYXdheSBzb21lIGRheTsgdGhlIFBBVEhfUFJPR19XSVRIX1RFU1QgYWxyZWFkeSBkb2VzIGl0LgotICBkbmwgVGVzdCB3aGV0aGVyIHdlIHJlYWxseSBmb3VuZCBHTlUgbXNnZm10LgotICBpZiB0ZXN0ICIkR01TR0ZNVCIgIT0gIjoiOyB0aGVuCi0gICAgZG5sIElmIGl0IGlzIG5vIEdOVSBtc2dmbXQgd2UgZGVmaW5lIGl0IGFzIDogc28gdGhhdCB0aGUKLSAgICBkbmwgTWFrZWZpbGVzIHN0aWxsIGNhbiB3b3JrLgotICAgIGlmICRHTVNHRk1UIC0tc3RhdGlzdGljcyAvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxICYmCi0gICAgICAgKGlmICRHTVNHRk1UIC0tc3RhdGlzdGljcyAvZGV2L251bGwgMj4mMSA+L2Rldi9udWxsIHwgZ3JlcCB1c2FnZSA+L2Rldi9udWxsOyB0aGVuIGV4aXQgMTsgZWxzZSBleGl0IDA7IGZpKTsgdGhlbgotICAgICAgOiA7Ci0gICAgZWxzZQotICAgICAgR01TR0ZNVD1gZWNobyAiJEdNU0dGTVQiIHwgc2VkIC1lICdzLF4uKi8sLCdgCi0gICAgICBBQ19NU0dfUkVTVUxUKAotICAgICAgICBbZm91bmQgJEdNU0dGTVQgcHJvZ3JhbSBpcyBub3QgR05VIG1zZ2ZtdDsgaWdub3JlIGl0XSkKLSAgICAgIEdNU0dGTVQ9IjoiCi0gICAgZmkKLSAgZmkKLQotICBkbmwgVGhpcyBjb3VsZCBnbyBhd2F5IHNvbWUgZGF5OyB0aGUgUEFUSF9QUk9HX1dJVEhfVEVTVCBhbHJlYWR5IGRvZXMgaXQuCi0gIGRubCBUZXN0IHdoZXRoZXIgd2UgcmVhbGx5IGZvdW5kIEdOVSB4Z2V0dGV4dC4KLSAgaWYgdGVzdCAiJFhHRVRURVhUIiAhPSAiOiI7IHRoZW4KLSAgICBkbmwgSWYgaXQgaXMgbm8gR05VIHhnZXR0ZXh0IHdlIGRlZmluZSBpdCBhcyA6IHNvIHRoYXQgdGhlCi0gICAgZG5sIE1ha2VmaWxlcyBzdGlsbCBjYW4gd29yay4KLSAgICBpZiAkWEdFVFRFWFQgLS1vbWl0LWhlYWRlciAtLWNvcHlyaWdodC1ob2xkZXI9IC0tbXNnaWQtYnVncy1hZGRyZXNzPSAvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxICYmCi0gICAgICAgKGlmICRYR0VUVEVYVCAtLW9taXQtaGVhZGVyIC0tY29weXJpZ2h0LWhvbGRlcj0gLS1tc2dpZC1idWdzLWFkZHJlc3M9IC9kZXYvbnVsbCAyPiYxID4vZGV2L251bGwgfCBncmVwIHVzYWdlID4vZGV2L251bGw7IHRoZW4gZXhpdCAxOyBlbHNlIGV4aXQgMDsgZmkpOyB0aGVuCi0gICAgICA6IDsKLSAgICBlbHNlCi0gICAgICBBQ19NU0dfUkVTVUxUKAotICAgICAgICBbZm91bmQgeGdldHRleHQgcHJvZ3JhbSBpcyBub3QgR05VIHhnZXR0ZXh0OyBpZ25vcmUgaXRdKQotICAgICAgWEdFVFRFWFQ9IjoiCi0gICAgZmkKLSAgICBkbmwgUmVtb3ZlIGxlZnRvdmVyIGZyb20gRnJlZUJTRCB4Z2V0dGV4dCBjYWxsLgotICAgIHJtIC1mIG1lc3NhZ2VzLnBvCi0gIGZpCi0KLSAgQUNfT1VUUFVUX0NPTU1BTkRTKFsKLSAgICBmb3IgYWNfZmlsZSBpbiAkQ09ORklHX0ZJTEVTOyBkbwotICAgICAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIgotICAgICAgY2FzZSAiJGFjX2ZpbGUiIGluCi0gICAgICAgICo6KikgYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyU6LiolJSdgIDs7Ci0gICAgICBlc2FjCi0gICAgICAjIFBPIGRpcmVjdG9yaWVzIGhhdmUgYSBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgZnJvbSBNYWtlZmlsZS5pbi5pbi4KLSAgICAgIGNhc2UgIiRhY19maWxlIiBpbiAqL01ha2VmaWxlLmluKQotICAgICAgICAjIEFkanVzdCBhIHJlbGF0aXZlIHNyY2Rpci4KLSAgICAgICAgYWNfZGlyPWBlY2hvICIkYWNfZmlsZSJ8c2VkICdzJS9bXi9dW14vXSokJSUnYAotICAgICAgICBhY19kaXJfc3VmZml4PSIvYGVjaG8gIiRhY19kaXIifHNlZCAncyVeXC4vJSUnYCIKLSAgICAgICAgYWNfZG90cz1gZWNobyAiJGFjX2Rpcl9zdWZmaXgifHNlZCAncyUvW14vXSolLi4vJWcnYAotICAgICAgICAjIEluIGF1dG9jb25mLTIuMTMgaXQgaXMgY2FsbGVkICRhY19naXZlbl9zcmNkaXIuCi0gICAgICAgICMgSW4gYXV0b2NvbmYtMi41MCBpdCBpcyBjYWxsZWQgJHNyY2Rpci4KLSAgICAgICAgdGVzdCAtbiAiJGFjX2dpdmVuX3NyY2RpciIgfHwgYWNfZ2l2ZW5fc3JjZGlyPSIkc3JjZGlyIgotICAgICAgICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgotICAgICAgICAgIC4pICB0b3Bfc3JjZGlyPWBlY2hvICRhY19kb3RzfHNlZCAncyUvJCUlJ2AgOzsKLSAgICAgICAgICAvKikgdG9wX3NyY2Rpcj0iJGFjX2dpdmVuX3NyY2RpciIgOzsKLSAgICAgICAgICAqKSAgdG9wX3NyY2Rpcj0iJGFjX2RvdHMkYWNfZ2l2ZW5fc3JjZGlyIiA7OwotICAgICAgICBlc2FjCi0gICAgICAgICMgVHJlYXQgYSBkaXJlY3RvcnkgYXMgYSBQTyBkaXJlY3RvcnkgaWYgYW5kIG9ubHkgaWYgaXQgaGFzIGEKLSAgICAgICAgIyBQT1RGSUxFUy5pbiBmaWxlLiBUaGlzIGFsbG93cyBwYWNrYWdlcyB0byBoYXZlIG11bHRpcGxlIFBPCi0gICAgICAgICMgZGlyZWN0b3JpZXMgdW5kZXIgZGlmZmVyZW50IG5hbWVzIG9yIGluIGRpZmZlcmVudCBsb2NhdGlvbnMuCi0gICAgICAgIGlmIHRlc3QgLWYgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9QT1RGSUxFUy5pbiI7IHRoZW4KLSAgICAgICAgICBybSAtZiAiJGFjX2Rpci9QT1RGSUxFUyIKLSAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2Rpci9QT1RGSUxFUyIgfHwgZWNobyAiY3JlYXRpbmcgJGFjX2Rpci9QT1RGSUxFUyIKLSAgICAgICAgICBjYXQgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9QT1RGSUxFUy5pbiIgfCBzZWQgLWUgIi9eIy9kIiAtZSAiL15bIAldKlwkL2QiIC1lICJzLC4qLCAgICAgJHRvcF9zcmNkaXIvJiBcXFxcLCIgfCBzZWQgLWUgIlwkcy9cKC4qXCkgXFxcXC9cMS8iID4gIiRhY19kaXIvUE9URklMRVMiCi0gICAgICAgICAgUE9NQUtFRklMRURFUFM9IlBPVEZJTEVTLmluIgotICAgICAgICAgICMgQUxMX0xJTkdVQVMsIFBPRklMRVMsIFVQREFURVBPRklMRVMsIERVTU1ZUE9GSUxFUywgR01PRklMRVMgZGVwZW5kCi0gICAgICAgICAgIyBvbiAkYWNfZGlyIGJ1dCBkb24ndCBkZXBlbmQgb24gdXNlci1zcGVjaWZpZWQgY29uZmlndXJhdGlvbgotICAgICAgICAgICMgcGFyYW1ldGVycy4KLSAgICAgICAgICBpZiB0ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyI7IHRoZW4KLSAgICAgICAgICAgICMgVGhlIExJTkdVQVMgZmlsZSBjb250YWlucyB0aGUgc2V0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMuCi0gICAgICAgICAgICBpZiB0ZXN0IC1uICIkT0JTT0xFVEVfQUxMX0xJTkdVQVMiOyB0aGVuCi0gICAgICAgICAgICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBzZXR0aW5nIEFMTF9MSU5HVUFTIGluIGNvbmZpZ3VyZS5pbiBpcyBvYnNvbGV0ZSIgfHwgZWNobyAic2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgQUxMX0xJTkdVQVNfPWBzZWQgLWUgIi9eIy9kIiAtZSAicy8jLiovLyIgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9MSU5HVUFTImAKLSAgICAgICAgICAgICMgSGlkZSB0aGUgQUxMX0xJTkdVQVMgYXNzaWdtZW50IGZyb20gYXV0b21ha2UuCi0gICAgICAgICAgICBldmFsICdBTExfTElOR1VBUycnPSRBTExfTElOR1VBU18nCi0gICAgICAgICAgICBQT01BS0VGSUxFREVQUz0iJFBPTUFLRUZJTEVERVBTIExJTkdVQVMiCi0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgIyBUaGUgc2V0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMgd2FzIGdpdmVuIGluIGNvbmZpZ3VyZS5pbi4KLSAgICAgICAgICAgIGV2YWwgJ0FMTF9MSU5HVUFTJyc9JE9CU09MRVRFX0FMTF9MSU5HVUFTJwotICAgICAgICAgIGZpCi0gICAgICAgICAgIyBDb21wdXRlIFBPRklMRVMKLSAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5wbykKLSAgICAgICAgICAjIENvbXB1dGUgVVBEQVRFUE9GSUxFUwotICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQobGFuZykucG8tdXBkYXRlKQotICAgICAgICAgICMgQ29tcHV0ZSBEVU1NWVBPRklMRVMKLSAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLm5vcCkKLSAgICAgICAgICAjIENvbXB1dGUgR01PRklMRVMKLSAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5nbW8pCi0gICAgICAgICAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KLSAgICAgICAgICAgIC4pIHNyY2RpcnByZT0gOzsKLSAgICAgICAgICAgICopIHNyY2RpcnByZT0nJChzcmNkaXIpLycgOzsKLSAgICAgICAgICBlc2FjCi0gICAgICAgICAgUE9GSUxFUz0KLSAgICAgICAgICBVUERBVEVQT0ZJTEVTPQotICAgICAgICAgIERVTU1ZUE9GSUxFUz0KLSAgICAgICAgICBHTU9GSUxFUz0KLSAgICAgICAgICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCi0gICAgICAgICAgICBQT0ZJTEVTPSIkUE9GSUxFUyAkc3JjZGlycHJlJGxhbmcucG8iCi0gICAgICAgICAgICBVUERBVEVQT0ZJTEVTPSIkVVBEQVRFUE9GSUxFUyAkbGFuZy5wby11cGRhdGUiCi0gICAgICAgICAgICBEVU1NWVBPRklMRVM9IiREVU1NWVBPRklMRVMgJGxhbmcubm9wIgotICAgICAgICAgICAgR01PRklMRVM9IiRHTU9GSUxFUyAkc3JjZGlycHJlJGxhbmcuZ21vIgotICAgICAgICAgIGRvbmUKLSAgICAgICAgICAjIENBVEFMT0dTIGRlcGVuZHMgb24gYm90aCAkYWNfZGlyIGFuZCB0aGUgdXNlcidzIExJTkdVQVMKLSAgICAgICAgICAjIGVudmlyb25tZW50IHZhcmlhYmxlLgotICAgICAgICAgIElOU1RfTElOR1VBUz0KLSAgICAgICAgICBpZiB0ZXN0IC1uICIkQUxMX0xJTkdVQVMiOyB0aGVuCi0gICAgICAgICAgICBmb3IgcHJlc2VudGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbwotICAgICAgICAgICAgICB1c2VpdD1ubwotICAgICAgICAgICAgICBpZiB0ZXN0ICIlVU5TRVQlIiAhPSAiJExJTkdVQVMiOyB0aGVuCi0gICAgICAgICAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJExJTkdVQVMiCi0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkQUxMX0xJTkdVQVMiCi0gICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgIGZvciBkZXNpcmVkbGFuZyBpbiAkZGVzaXJlZGxhbmd1YWdlczsgZG8KLSAgICAgICAgICAgICAgICAjIFVzZSB0aGUgcHJlc2VudGxhbmcgY2F0YWxvZyBpZiBkZXNpcmVkbGFuZyBpcwotICAgICAgICAgICAgICAgICMgICBhLiBlcXVhbCB0byBwcmVzZW50bGFuZywgb3IKLSAgICAgICAgICAgICAgICAjICAgYi4gYSB2YXJpYW50IG9mIHByZXNlbnRsYW5nIChiZWNhdXNlIGluIHRoaXMgY2FzZSwKLSAgICAgICAgICAgICAgICAjICAgICAgcHJlc2VudGxhbmcgY2FuIGJlIHVzZWQgYXMgYSBmYWxsYmFjayBmb3IgbWVzc2FnZXMKLSAgICAgICAgICAgICAgICAjICAgICAgd2hpY2ggYXJlIG5vdCB0cmFuc2xhdGVkIGluIHRoZSBkZXNpcmVkbGFuZyBjYXRhbG9nKS4KLSAgICAgICAgICAgICAgICBjYXNlICIkZGVzaXJlZGxhbmciIGluCi0gICAgICAgICAgICAgICAgICAiJHByZXNlbnRsYW5nIiopIHVzZWl0PXllczs7Ci0gICAgICAgICAgICAgICAgZXNhYwotICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICAgIGlmIHRlc3QgJHVzZWl0ID0geWVzOyB0aGVuCi0gICAgICAgICAgICAgICAgSU5TVF9MSU5HVUFTPSIkSU5TVF9MSU5HVUFTICRwcmVzZW50bGFuZyIKLSAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICBmaQotICAgICAgICAgIENBVEFMT0dTPQotICAgICAgICAgIGlmIHRlc3QgLW4gIiRJTlNUX0xJTkdVQVMiOyB0aGVuCi0gICAgICAgICAgICBmb3IgbGFuZyBpbiAkSU5TVF9MSU5HVUFTOyBkbwotICAgICAgICAgICAgICBDQVRBTE9HUz0iJENBVEFMT0dTICRsYW5nLmdtbyIKLSAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICBmaQotICAgICAgICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZGlyL01ha2VmaWxlIiB8fCBlY2hvICJjcmVhdGluZyAkYWNfZGlyL01ha2VmaWxlIgotICAgICAgICAgIHNlZCAtZSAiL15QT1RGSUxFUyA9L3IgJGFjX2Rpci9QT1RGSUxFUyIgLWUgIi9eIyBNYWtldmFycy9yICRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9NYWtldmFycyIgLWUgInN8QFBPRklMRVNAfCRQT0ZJTEVTfGciIC1lICJzfEBVUERBVEVQT0ZJTEVTQHwkVVBEQVRFUE9GSUxFU3xnIiAtZSAic3xARFVNTVlQT0ZJTEVTQHwkRFVNTVlQT0ZJTEVTfGciIC1lICJzfEBHTU9GSUxFU0B8JEdNT0ZJTEVTfGciIC1lICJzfEBDQVRBTE9HU0B8JENBVEFMT0dTfGciIC1lICJzfEBQT01BS0VGSUxFREVQU0B8JFBPTUFLRUZJTEVERVBTfGciICIkYWNfZGlyL01ha2VmaWxlLmluIiA+ICIkYWNfZGlyL01ha2VmaWxlIgotICAgICAgICAgIGZvciBmIGluICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIiL1J1bGVzLSo7IGRvCi0gICAgICAgICAgICBpZiB0ZXN0IC1mICIkZiI7IHRoZW4KLSAgICAgICAgICAgICAgY2FzZSAiJGYiIGluCi0gICAgICAgICAgICAgICAgKi5vcmlnIHwgKi5iYWsgfCAqfikgOzsKLSAgICAgICAgICAgICAgICAqKSBjYXQgIiRmIiA+PiAiJGFjX2Rpci9NYWtlZmlsZSIgOzsKLSAgICAgICAgICAgICAgZXNhYwotICAgICAgICAgICAgZmkKLSAgICAgICAgICBkb25lCi0gICAgICAgIGZpCi0gICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgZG9uZV0sCi0gICBbIyBDYXB0dXJlIHRoZSB2YWx1ZSBvZiBvYnNvbGV0ZSBBTExfTElOR1VBUyBiZWNhdXNlIHdlIG5lZWQgaXQgdG8gY29tcHV0ZQotICAgICMgUE9GSUxFUywgVVBEQVRFUE9GSUxFUywgRFVNTVlQT0ZJTEVTLCBHTU9GSUxFUywgQ0FUQUxPR1MuIEJ1dCBoaWRlIGl0Ci0gICAgIyBmcm9tIGF1dG9tYWtlLgotICAgIGV2YWwgJ09CU09MRVRFX0FMTF9MSU5HVUFTJyc9IiRBTExfTElOR1VBUyInCi0gICAgIyBDYXB0dXJlIHRoZSB2YWx1ZSBvZiBMSU5HVUFTIGJlY2F1c2Ugd2UgbmVlZCBpdCB0byBjb21wdXRlIENBVEFMT0dTLgotICAgIExJTkdVQVM9IiR7TElOR1VBUy0lVU5TRVQlfSIKLSAgIF0pCi1dKQotCi1kbmwgUG9zdHByb2Nlc3NlcyBhIE1ha2VmaWxlIGluIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgUE8gZmlsZXMuCi1BQ19ERUZVTihbQU1fUE9TVFBST0NFU1NfUE9fTUFLRUZJTEVdLAotWwotICAjIFdoZW4gdGhpcyBjb2RlIGlzIHJ1biwgaW4gY29uZmlnLnN0YXR1cywgdHdvIHZhcmlhYmxlcyBoYXZlIGFscmVhZHkgYmVlbgotICAjIHNldDoKLSAgIyAtIE9CU09MRVRFX0FMTF9MSU5HVUFTIGlzIHRoZSB2YWx1ZSBvZiBMSU5HVUFTIHNldCBpbiBjb25maWd1cmUuaW4sCi0gICMgLSBMSU5HVUFTIGlzIHRoZSB2YWx1ZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTElOR1VBUyBhdCBjb25maWd1cmUKLSAgIyAgIHRpbWUuCi0KLWNoYW5nZXF1b3RlKCwpZG5sCi0gICMgQWRqdXN0IGEgcmVsYXRpdmUgc3JjZGlyLgotICBhY19kaXI9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlL1teL11bXi9dKiQlJSdgCi0gIGFjX2Rpcl9zdWZmaXg9Ii9gZWNobyAiJGFjX2RpciJ8c2VkICdzJV5cLi8lJSdgIgotICBhY19kb3RzPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCJ8c2VkICdzJS9bXi9dKiUuLi8lZydgCi0gICMgSW4gYXV0b2NvbmYtMi4xMyBpdCBpcyBjYWxsZWQgJGFjX2dpdmVuX3NyY2Rpci4KLSAgIyBJbiBhdXRvY29uZi0yLjUwIGl0IGlzIGNhbGxlZCAkc3JjZGlyLgotICB0ZXN0IC1uICIkYWNfZ2l2ZW5fc3JjZGlyIiB8fCBhY19naXZlbl9zcmNkaXI9IiRzcmNkaXIiCi0gIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCi0gICAgLikgIHRvcF9zcmNkaXI9YGVjaG8gJGFjX2RvdHN8c2VkICdzJS8kJSUnYCA7OwotICAgIC8qKSB0b3Bfc3JjZGlyPSIkYWNfZ2l2ZW5fc3JjZGlyIiA7OwotICAgICopICB0b3Bfc3JjZGlyPSIkYWNfZG90cyRhY19naXZlbl9zcmNkaXIiIDs7Ci0gIGVzYWMKLQotICAjIEZpbmQgYSB3YXkgdG8gZWNobyBzdHJpbmdzIHdpdGhvdXQgaW50ZXJwcmV0aW5nIGJhY2tzbGFzaC4KLSAgaWYgdGVzdCAiWGAoZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCc7IHRoZW4KLSAgICBndF9lY2hvPSdlY2hvJwotICBlbHNlCi0gICAgaWYgdGVzdCAiWGAocHJpbnRmICclc1xuJyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCc7IHRoZW4KLSAgICAgIGd0X2VjaG89J3ByaW50ZiAlc1xuJwotICAgIGVsc2UKLSAgICAgIGVjaG9fZnVuYyAoKSB7Ci0gICAgICAgIGNhdCA8PEVPVAotJCoKLUVPVAotICAgICAgfQotICAgICAgZ3RfZWNobz0nZWNob19mdW5jJwotICAgIGZpCi0gIGZpCi0KLSAgIyBBIHNlZCBzY3JpcHQgdGhhdCBleHRyYWN0cyB0aGUgdmFsdWUgb2YgVkFSSUFCTEUgZnJvbSBhIE1ha2VmaWxlLgotICBzZWRfeF92YXJpYWJsZT0nCi0jIFRlc3QgaWYgdGhlIGhvbGQgc3BhY2UgaXMgZW1wdHkuCi14Ci1zL1AvUC8KLXgKLXRhCi0jIFllcyBpdCB3YXMgZW1wdHkuIExvb2sgaWYgd2UgaGF2ZSB0aGUgZXhwZWN0ZWQgdmFyaWFibGUgZGVmaW5pdGlvbi4KLS9eWwkgXSpWQVJJQUJMRVsJIF0qPS97Ci0gICMgU2VlbiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgdmFyaWFibGUgZGVmaW5pdGlvbi4KLSAgcy9eWwkgXSpWQVJJQUJMRVsJIF0qPS8vCi0gIGJhCi19Ci1iZAotOmEKLSMgSGVyZSB3ZSBhcmUgcHJvY2Vzc2luZyBhIGxpbmUgZnJvbSB0aGUgdmFyaWFibGUgZGVmaW5pdGlvbi4KLSMgUmVtb3ZlIGNvbW1lbnQsIG1vcmUgcHJlY2lzZWx5IHJlcGxhY2UgaXQgd2l0aCBhIHNwYWNlLgotcy8jLiokLyAvCi0jIFNlZSBpZiB0aGUgbGluZSBlbmRzIGluIGEgYmFja3NsYXNoLgotdGIKLTpiCi1zL1xcJC8vCi0jIFByaW50IHRoZSBsaW5lLCB3aXRob3V0IHRoZSB0cmFpbGluZyBiYWNrc2xhc2guCi1wCi10YwotIyBUaGVyZSB3YXMgbm8gdHJhaWxpbmcgYmFja3NsYXNoLiBUaGUgZW5kIG9mIHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uIGlzCi0jIHJlYWNoZWQuIENsZWFyIHRoZSBob2xkIHNwYWNlLgotcy9eLiokLy8KLXgKLWJkCi06YwotIyBBIHRyYWlsaW5nIGJhY2tzbGFzaCBtZWFucyB0aGF0IHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uIGNvbnRpbnVlcyBpbiB0aGUKLSMgbmV4dCBsaW5lLiBQdXQgYSBub25lbXB0eSBzdHJpbmcgaW50byB0aGUgaG9sZCBzcGFjZSB0byBpbmRpY2F0ZSB0aGlzLgotcy9eLiokL1AvCi14Ci06ZAotJwotY2hhbmdlcXVvdGUoWyxdKWRubAotCi0gICMgU2V0IFBPVEZJTEVTIHRvIHRoZSB2YWx1ZSBvZiB0aGUgTWFrZWZpbGUgdmFyaWFibGUgUE9URklMRVMuCi0gIHNlZF94X1BPVEZJTEVTPSJgJGd0X2VjaG8gXCIkc2VkX3hfdmFyaWFibGVcIiB8IHNlZCAtZSAnL14gKiMvZCcgLWUgJ3MvVkFSSUFCTEUvUE9URklMRVMvZydgIgotICBQT1RGSUxFUz1gc2VkIC1uIC1lICIkc2VkX3hfUE9URklMRVMiIDwgIiRhY19maWxlImAKLSAgIyBDb21wdXRlIFBPVEZJTEVTX0RFUFMgYXMKLSAgIyAgICQoZm9yZWFjaCBmaWxlLCAkKFBPVEZJTEVTKSwgJCh0b3Bfc3JjZGlyKS8kKGZpbGUpKQotICBQT1RGSUxFU19ERVBTPQotICBmb3IgZmlsZSBpbiAkUE9URklMRVM7IGRvCi0gICAgUE9URklMRVNfREVQUz0iJFBPVEZJTEVTX0RFUFMgIickKHRvcF9zcmNkaXIpLyciJGZpbGUiCi0gIGRvbmUKLSAgUE9NQUtFRklMRURFUFM9IiIKLQotICBpZiB0ZXN0IC1uICIkT0JTT0xFVEVfQUxMX0xJTkdVQVMiOyB0aGVuCi0gICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IHNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIiB8fCBlY2hvICJzZXR0aW5nIEFMTF9MSU5HVUFTIGluIGNvbmZpZ3VyZS5pbiBpcyBvYnNvbGV0ZSIKLSAgZmkKLSAgaWYgdGVzdCAtZiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL0xJTkdVQVMiOyB0aGVuCi0gICAgIyBUaGUgTElOR1VBUyBmaWxlIGNvbnRhaW5zIHRoZSBzZXQgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcy4KLSAgICBBTExfTElOR1VBU189YHNlZCAtZSAiL14jL2QiIC1lICJzLyMuKi8vIiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL0xJTkdVQVMiYAotICAgIFBPTUFLRUZJTEVERVBTPSIkUE9NQUtFRklMRURFUFMgTElOR1VBUyIKLSAgZWxzZQotICAgICMgU2V0IEFMTF9MSU5HVUFTIHRvIHRoZSB2YWx1ZSBvZiB0aGUgTWFrZWZpbGUgdmFyaWFibGUgTElOR1VBUy4KLSAgICBzZWRfeF9MSU5HVUFTPSJgJGd0X2VjaG8gXCIkc2VkX3hfdmFyaWFibGVcIiB8IHNlZCAtZSAnL14gKiMvZCcgLWUgJ3MvVkFSSUFCTEUvTElOR1VBUy9nJ2AiCi0gICAgQUxMX0xJTkdVQVNfPWBzZWQgLW4gLWUgIiRzZWRfeF9MSU5HVUFTIiA8ICIkYWNfZmlsZSJgCi0gIGZpCi0gICMgSGlkZSB0aGUgQUxMX0xJTkdVQVMgYXNzaWdtZW50IGZyb20gYXV0b21ha2UuCi0gIGV2YWwgJ0FMTF9MSU5HVUFTJyc9JEFMTF9MSU5HVUFTXycKLSAgIyBDb21wdXRlIFBPRklMRVMKLSAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQobGFuZykucG8pCi0gICMgQ29tcHV0ZSBVUERBVEVQT0ZJTEVTCi0gICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQobGFuZykucG8tdXBkYXRlKQotICAjIENvbXB1dGUgRFVNTVlQT0ZJTEVTCi0gICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQobGFuZykubm9wKQotICAjIENvbXB1dGUgR01PRklMRVMKLSAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQobGFuZykuZ21vKQotICAjIENvbXB1dGUgUFJPUEVSVElFU0ZJTEVTCi0gICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQodG9wX3NyY2RpcikvJChET01BSU4pXyQobGFuZykucHJvcGVydGllcykKLSAgIyBDb21wdXRlIENMQVNTRklMRVMKLSAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJCh0b3Bfc3JjZGlyKS8kKERPTUFJTilfJChsYW5nKS5jbGFzcykKLSAgIyBDb21wdXRlIFFNRklMRVMKLSAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQobGFuZykucW0pCi0gICMgQ29tcHV0ZSBNU0dGSUxFUwotICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChmcm9iICQobGFuZykpLm1zZykKLSAgIyBDb21wdXRlIFJFU09VUkNFU0RMTEZJTEVTCi0gICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGZyb2IgJChsYW5nKSkvJChET01BSU4pLnJlc291cmNlcy5kbGwpCi0gIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCi0gICAgLikgc3JjZGlycHJlPSA7OwotICAgICopIHNyY2RpcnByZT0nJChzcmNkaXIpLycgOzsKLSAgZXNhYwotICBQT0ZJTEVTPQotICBVUERBVEVQT0ZJTEVTPQotICBEVU1NWVBPRklMRVM9Ci0gIEdNT0ZJTEVTPQotICBQUk9QRVJUSUVTRklMRVM9Ci0gIENMQVNTRklMRVM9Ci0gIFFNRklMRVM9Ci0gIE1TR0ZJTEVTPQotICBSRVNPVVJDRVNETExGSUxFUz0KLSAgZm9yIGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbwotICAgIFBPRklMRVM9IiRQT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5wbyIKLSAgICBVUERBVEVQT0ZJTEVTPSIkVVBEQVRFUE9GSUxFUyAkbGFuZy5wby11cGRhdGUiCi0gICAgRFVNTVlQT0ZJTEVTPSIkRFVNTVlQT0ZJTEVTICRsYW5nLm5vcCIKLSAgICBHTU9GSUxFUz0iJEdNT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5nbW8iCi0gICAgUFJPUEVSVElFU0ZJTEVTPSIkUFJPUEVSVElFU0ZJTEVTIFwkKHRvcF9zcmNkaXIpL1wkKERPTUFJTilfJGxhbmcucHJvcGVydGllcyIKLSAgICBDTEFTU0ZJTEVTPSIkQ0xBU1NGSUxFUyBcJCh0b3Bfc3JjZGlyKS9cJChET01BSU4pXyRsYW5nLmNsYXNzIgotICAgIFFNRklMRVM9IiRRTUZJTEVTICRzcmNkaXJwcmUkbGFuZy5xbSIKLSAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9cLi4qJC8vJyAtZSAneS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8nYAotICAgIE1TR0ZJTEVTPSIkTVNHRklMRVMgJHNyY2RpcnByZSRmcm9iYmVkbGFuZy5tc2ciCi0gICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXy8tL2cnIC1lICdzL15zci1DUy9zci1TUC8nIC1lICdzL0BsYXRpbiQvLUxhdG4vJyAtZSAncy9AY3lyaWxsaWMkLy1DeXJsLycgLWUgJ3MvXnNyLVNQJC9zci1TUC1MYXRuLycgLWUgJ3MvXnV6LVVaJC91ei1VWi1MYXRuLydgCi0gICAgUkVTT1VSQ0VTRExMRklMRVM9IiRSRVNPVVJDRVNETExGSUxFUyAkc3JjZGlycHJlJGZyb2JiZWRsYW5nL1wkKERPTUFJTikucmVzb3VyY2VzLmRsbCIKLSAgZG9uZQotICAjIENBVEFMT0dTIGRlcGVuZHMgb24gYm90aCAkYWNfZGlyIGFuZCB0aGUgdXNlcidzIExJTkdVQVMKLSAgIyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KLSAgSU5TVF9MSU5HVUFTPQotICBpZiB0ZXN0IC1uICIkQUxMX0xJTkdVQVMiOyB0aGVuCi0gICAgZm9yIHByZXNlbnRsYW5nIGluICRBTExfTElOR1VBUzsgZG8KLSAgICAgIHVzZWl0PW5vCi0gICAgICBpZiB0ZXN0ICIlVU5TRVQlIiAhPSAiJExJTkdVQVMiOyB0aGVuCi0gICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRMSU5HVUFTIgotICAgICAgZWxzZQotICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkQUxMX0xJTkdVQVMiCi0gICAgICBmaQotICAgICAgZm9yIGRlc2lyZWRsYW5nIGluICRkZXNpcmVkbGFuZ3VhZ2VzOyBkbwotICAgICAgICAjIFVzZSB0aGUgcHJlc2VudGxhbmcgY2F0YWxvZyBpZiBkZXNpcmVkbGFuZyBpcwotICAgICAgICAjICAgYS4gZXF1YWwgdG8gcHJlc2VudGxhbmcsIG9yCi0gICAgICAgICMgICBiLiBhIHZhcmlhbnQgb2YgcHJlc2VudGxhbmcgKGJlY2F1c2UgaW4gdGhpcyBjYXNlLAotICAgICAgICAjICAgICAgcHJlc2VudGxhbmcgY2FuIGJlIHVzZWQgYXMgYSBmYWxsYmFjayBmb3IgbWVzc2FnZXMKLSAgICAgICAgIyAgICAgIHdoaWNoIGFyZSBub3QgdHJhbnNsYXRlZCBpbiB0aGUgZGVzaXJlZGxhbmcgY2F0YWxvZykuCi0gICAgICAgIGNhc2UgIiRkZXNpcmVkbGFuZyIgaW4KLSAgICAgICAgICAiJHByZXNlbnRsYW5nIiopIHVzZWl0PXllczs7Ci0gICAgICAgIGVzYWMKLSAgICAgIGRvbmUKLSAgICAgIGlmIHRlc3QgJHVzZWl0ID0geWVzOyB0aGVuCi0gICAgICAgIElOU1RfTElOR1VBUz0iJElOU1RfTElOR1VBUyAkcHJlc2VudGxhbmciCi0gICAgICBmaQotICAgIGRvbmUKLSAgZmkKLSAgQ0FUQUxPR1M9Ci0gIEpBVkFDQVRBTE9HUz0KLSAgUVRDQVRBTE9HUz0KLSAgVENMQ0FUQUxPR1M9Ci0gIENTSEFSUENBVEFMT0dTPQotICBpZiB0ZXN0IC1uICIkSU5TVF9MSU5HVUFTIjsgdGhlbgotICAgIGZvciBsYW5nIGluICRJTlNUX0xJTkdVQVM7IGRvCi0gICAgICBDQVRBTE9HUz0iJENBVEFMT0dTICRsYW5nLmdtbyIKLSAgICAgIEpBVkFDQVRBTE9HUz0iJEpBVkFDQVRBTE9HUyBcJChET01BSU4pXyRsYW5nLnByb3BlcnRpZXMiCi0gICAgICBRVENBVEFMT0dTPSIkUVRDQVRBTE9HUyAkbGFuZy5xbSIKLSAgICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL1wuLiokLy8nIC1lICd5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LydgCi0gICAgICBUQ0xDQVRBTE9HUz0iJFRDTENBVEFMT0dTICRmcm9iYmVkbGFuZy5tc2ciCi0gICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9fLy0vZycgLWUgJ3MvXnNyLUNTL3NyLVNQLycgLWUgJ3MvQGxhdGluJC8tTGF0bi8nIC1lICdzL0BjeXJpbGxpYyQvLUN5cmwvJyAtZSAncy9ec3ItU1AkL3NyLVNQLUxhdG4vJyAtZSAncy9edXotVVokL3V6LVVaLUxhdG4vJ2AKLSAgICAgIENTSEFSUENBVEFMT0dTPSIkQ1NIQVJQQ0FUQUxPR1MgJGZyb2JiZWRsYW5nL1wkKERPTUFJTikucmVzb3VyY2VzLmRsbCIKLSAgICBkb25lCi0gIGZpCi0KLSAgc2VkIC1lICJzfEBQT1RGSUxFU19ERVBTQHwkUE9URklMRVNfREVQU3xnIiAtZSAic3xAUE9GSUxFU0B8JFBPRklMRVN8ZyIgLWUgInN8QFVQREFURVBPRklMRVNAfCRVUERBVEVQT0ZJTEVTfGciIC1lICJzfEBEVU1NWVBPRklMRVNAfCREVU1NWVBPRklMRVN8ZyIgLWUgInN8QEdNT0ZJTEVTQHwkR01PRklMRVN8ZyIgLWUgInN8QFBST1BFUlRJRVNGSUxFU0B8JFBST1BFUlRJRVNGSUxFU3xnIiAtZSAic3xAQ0xBU1NGSUxFU0B8JENMQVNTRklMRVN8ZyIgLWUgInN8QFFNRklMRVNAfCRRTUZJTEVTfGciIC1lICJzfEBNU0dGSUxFU0B8JE1TR0ZJTEVTfGciIC1lICJzfEBSRVNPVVJDRVNETExGSUxFU0B8JFJFU09VUkNFU0RMTEZJTEVTfGciIC1lICJzfEBDQVRBTE9HU0B8JENBVEFMT0dTfGciIC1lICJzfEBKQVZBQ0FUQUxPR1NAfCRKQVZBQ0FUQUxPR1N8ZyIgLWUgInN8QFFUQ0FUQUxPR1NAfCRRVENBVEFMT0dTfGciIC1lICJzfEBUQ0xDQVRBTE9HU0B8JFRDTENBVEFMT0dTfGciIC1lICJzfEBDU0hBUlBDQVRBTE9HU0B8JENTSEFSUENBVEFMT0dTfGciIC1lICdzLF4jZGlzdGRpcjosZGlzdGRpcjosJyA8ICIkYWNfZmlsZSIgPiAiJGFjX2ZpbGUudG1wIgotICBpZiBncmVwIC1sICdAVENMQ0FUQUxPR1NAJyAiJGFjX2ZpbGUiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgIyBBZGQgZGVwZW5kZW5jaWVzIHRoYXQgY2Fubm90IGJlIGZvcm11bGF0ZWQgYXMgYSBzaW1wbGUgc3VmZml4IHJ1bGUuCi0gICAgZm9yIGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbwotICAgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXC4uKiQvLycgLWUgJ3kvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovJ2AKLSAgICAgIGNhdCA+PiAiJGFjX2ZpbGUudG1wIiA8PEVPRgotJGZyb2JiZWRsYW5nLm1zZzogJGxhbmcucG8KLQlAZWNobyAiXCQoTVNHRk1UKSAtYyAtLXRjbCAtZCBcJChzcmNkaXIpIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyI7IFwKLQlcJChNU0dGTVQpIC1jIC0tdGNsIC1kICJcJChzcmNkaXIpIiAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gfHwgeyBybSAtZiAiXCQoc3JjZGlyKS8kZnJvYmJlZGxhbmcubXNnIjsgZXhpdCAxOyB9Ci1FT0YKLSAgICBkb25lCi0gIGZpCi0gIGlmIGdyZXAgLWwgJ0BDU0hBUlBDQVRBTE9HU0AnICIkYWNfZmlsZSIgPiAvZGV2L251bGw7IHRoZW4KLSAgICAjIEFkZCBkZXBlbmRlbmNpZXMgdGhhdCBjYW5ub3QgYmUgZm9ybXVsYXRlZCBhcyBhIHNpbXBsZSBzdWZmaXggcnVsZS4KLSAgICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCi0gICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9fLy0vZycgLWUgJ3MvXnNyLUNTL3NyLVNQLycgLWUgJ3MvQGxhdGluJC8tTGF0bi8nIC1lICdzL0BjeXJpbGxpYyQvLUN5cmwvJyAtZSAncy9ec3ItU1AkL3NyLVNQLUxhdG4vJyAtZSAncy9edXotVVokL3V6LVVaLUxhdG4vJ2AKLSAgICAgIGNhdCA+PiAiJGFjX2ZpbGUudG1wIiA8PEVPRgotJGZyb2JiZWRsYW5nL1wkKERPTUFJTikucmVzb3VyY2VzLmRsbDogJGxhbmcucG8KLQlAZWNobyAiXCQoTVNHRk1UKSAtYyAtLWNzaGFycCAtZCBcJChzcmNkaXIpIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyAtciBcJChET01BSU4pIjsgXAotCVwkKE1TR0ZNVCkgLWMgLS1jc2hhcnAgLWQgIlwkKHNyY2RpcikiIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyAtciAiXCQoRE9NQUlOKSIgfHwgeyBybSAtZiAiXCQoc3JjZGlyKS8kZnJvYmJlZGxhbmcubXNnIjsgZXhpdCAxOyB9Ci1FT0YKLSAgICBkb25lCi0gIGZpCi0gIGlmIHRlc3QgLW4gIiRQT01BS0VGSUxFREVQUyI7IHRoZW4KLSAgICBjYXQgPj4gIiRhY19maWxlLnRtcCIgPDxFT0YKLU1ha2VmaWxlOiAkUE9NQUtFRklMRURFUFMKLUVPRgotICBmaQotICBtdiAiJGFjX2ZpbGUudG1wIiAiJGFjX2ZpbGUiCi1dKQpkaWZmIC0tZ2l0IGEvbTQvcG9zaXhfc3Bhd24ubTQgYi9tNC9wb3NpeF9zcGF3bi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzkyOGViCi0tLSAvZGV2L251bGwKKysrIGIvbTQvcG9zaXhfc3Bhd24ubTQKQEAgLTAsMCArMSw1MjcgQEAKKyMgcG9zaXhfc3Bhd24ubTQgc2VyaWFsIDExCitkbmwgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIFRlc3RzIHdoZXRoZXIgdGhlIGVudGlyZSBwb3NpeF9zcGF3biBmYWNpbGl0eSBpcyBhdmFpbGFibGUuCitBQ19ERUZVTihbZ2xfUE9TSVhfU1BBV05dLAorWworICBBQ19SRVFVSVJFKFtnbF9QT1NJWF9TUEFXTl9CT0RZXSkKK10pCisKK0FDX0RFRlVOKFtnbF9QT1NJWF9TUEFXTl9CT0RZXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfU1BBV05fSF9ERUZBVUxUU10pCisgIEFDX1JFUVVJUkUoW2dsX0hBVkVfUE9TSVhfU1BBV05dKQorICBkbmwgQXNzdW1lIHRoYXQgd2hlbiB0aGUgbWFpbiBmdW5jdGlvbiBleGlzdHMsIGFsbCB0aGUgb3RoZXJzLAorICBkbmwgZXhjZXB0IHBvc2l4X3NwYXduYXR0cl97Z2V0LHNldH1zY2hlZCosIGFyZSBhdmFpbGFibGUgYXMgd2VsbC4KKyAgZG5sIEFDX0NIRUNLX0ZVTkNTX09OQ0UoW3Bvc2l4X3NwYXducF0pCisgIGRubCBBQ19DSEVDS19GVU5DU19PTkNFKFtwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfaW5pdF0pCisgIGRubCBBQ19DSEVDS19GVU5DU19PTkNFKFtwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2VdKQorICBkbmwgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDJdKQorICBkbmwgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW5dKQorICBkbmwgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3ldKQorICBkbmwgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbcG9zaXhfc3Bhd25hdHRyX2luaXRdKQorICBkbmwgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbcG9zaXhfc3Bhd25hdHRyX2dldGZsYWdzXSkKKyAgZG5sIEFDX0NIRUNLX0ZVTkNTX09OQ0UoW3Bvc2l4X3NwYXduYXR0cl9zZXRmbGFnc10pCisgIGRubCBBQ19DSEVDS19GVU5DU19PTkNFKFtwb3NpeF9zcGF3bmF0dHJfZ2V0cGdyb3VwXSkKKyAgZG5sIEFDX0NIRUNLX0ZVTkNTX09OQ0UoW3Bvc2l4X3NwYXduYXR0cl9zZXRwZ3JvdXBdKQorICBkbmwgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbcG9zaXhfc3Bhd25hdHRyX2dldHNpZ2RlZmF1bHRdKQorICBkbmwgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbcG9zaXhfc3Bhd25hdHRyX3NldHNpZ2RlZmF1bHRdKQorICBkbmwgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbcG9zaXhfc3Bhd25hdHRyX2dldHNpZ21hc2tdKQorICBkbmwgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbcG9zaXhfc3Bhd25hdHRyX3NldHNpZ21hc2tdKQorICBkbmwgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbcG9zaXhfc3Bhd25hdHRyX2Rlc3Ryb3ldKQorICBpZiB0ZXN0ICRhY19jdl9mdW5jX3Bvc2l4X3NwYXduID0geWVzOyB0aGVuCisgICAgZ2xfUE9TSVhfU1BBV05fV09SS1MKKyAgICBjYXNlICIkZ2xfY3ZfZnVuY19wb3NpeF9zcGF3bl93b3JrcyIgaW4KKyAgICAgICp5ZXMpCisgICAgICAgIEFDX0RFRklORShbSEFWRV9XT1JLSU5HX1BPU0lYX1NQQVdOXSwgWzFdLAorICAgICAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHBvc2l4X3NwYXduIGFuZCBwb3NpeF9zcGF3bnAgZnVuY3Rpb25zIGFuZAorICAgICAgICAgICB0aGV5IHdvcmsuXSkKKyAgICAgICAgZG5sIEFzc3VtZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGlmIFBPU0lYX1NQQVdOX1NFVFNDSEVEVUxFUgorICAgICAgICBkbmwgZXZhbHVhdGVzIHRvIG5vbnplcm8uCisgICAgICAgIGRubCBBQ19DSEVDS19GVU5DU19PTkNFKFtwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwb2xpY3ldKQorICAgICAgICBkbmwgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbcG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcG9saWN5XSkKKyAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgcG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcG9saWN5IGlzIHN1cHBvcnRlZF0sCisgICAgICAgICAgW2dsX2N2X2Z1bmNfc3Bhd25hdHRyX3NldHNjaGVkcG9saWN5XSwKKyAgICAgICAgICBbQUNfRUdSRVBfQ1BQKFtQT1NJWCBzY2hlZHVsaW5nIHN1cHBvcnRlZF0sIFsKKyNpbmNsdWRlIDxzcGF3bi5oPgorI2lmIFBPU0lYX1NQQVdOX1NFVFNDSEVEVUxFUgorIFBPU0lYIHNjaGVkdWxpbmcgc3VwcG9ydGVkCisjZW5kaWYKK10sCisgICAgICAgICAgICAgW2dsX2N2X2Z1bmNfc3Bhd25hdHRyX3NldHNjaGVkcG9saWN5PXllc10sCisgICAgICAgICAgICAgW2dsX2N2X2Z1bmNfc3Bhd25hdHRyX3NldHNjaGVkcG9saWN5PW5vXSkKKyAgICAgICAgICBdKQorICAgICAgICBkbmwgQXNzdW1lIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgaWYgUE9TSVhfU1BBV05fU0VUU0NIRURQQVJBTQorICAgICAgICBkbmwgZXZhbHVhdGVzIHRvIG5vbnplcm8uCisgICAgICAgIGRubCBBQ19DSEVDS19GVU5DU19PTkNFKFtwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwYXJhbV0pCisgICAgICAgIGRubCBBQ19DSEVDS19GVU5DU19PTkNFKFtwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwYXJhbV0pCisgICAgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBhcmFtIGlzIHN1cHBvcnRlZF0sCisgICAgICAgICAgW2dsX2N2X2Z1bmNfc3Bhd25hdHRyX3NldHNjaGVkcGFyYW1dLAorICAgICAgICAgIFtBQ19FR1JFUF9DUFAoW1BPU0lYIHNjaGVkdWxpbmcgc3VwcG9ydGVkXSwgWworI2luY2x1ZGUgPHNwYXduLmg+CisjaWYgUE9TSVhfU1BBV05fU0VUU0NIRURQQVJBTQorIFBPU0lYIHNjaGVkdWxpbmcgc3VwcG9ydGVkCisjZW5kaWYKK10sCisgICAgICAgICAgICAgW2dsX2N2X2Z1bmNfc3Bhd25hdHRyX3NldHNjaGVkcGFyYW09eWVzXSwKKyAgICAgICAgICAgICBbZ2xfY3ZfZnVuY19zcGF3bmF0dHJfc2V0c2NoZWRwYXJhbT1ub10pCisgICAgICAgICAgXSkKKyAgICAgICAgOzsKKyAgICAgICopIFJFUExBQ0VfUE9TSVhfU1BBV049MSA7OworICAgIGVzYWMKKyAgZmkKK10pCisKK2RubCBUZXN0IHdoZXRoZXIgcG9zaXhfc3Bhd24gYWN0dWFsbHkgd29ya3MuCitkbmwgcG9zaXhfc3Bhd24gb24gQUlYIDUuMy4uNi4xIGhhcyB0d28gYnVnczoKK2RubCAxKSBXaGVuIGl0IGZhaWxzIHRvIGV4ZWN1dGUgdGhlIHByb2dyYW0sIHRoZSBjaGlsZCBwcm9jZXNzIGV4aXRzIHdpdGgKK2RubCAgICBleGl0KCkgcmF0aGVyIHRoYW4gX2V4aXQoKSwgd2hpY2ggY2F1c2VzIHRoZSBzdGRpbyBidWZmZXJzIHRvIGJlCitkbmwgICAgZmx1c2hlZC4gUmVwb3J0ZWQgYnkgUmFpbmVyIFRhbW1lci4KK2RubCAyKSBUaGUgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW4gZnVuY3Rpb24gZG9lcyBub3Qgc3VwcG9ydCBmaWxlCitkbmwgICAgbmFtZXMgdGhhdCBjb250YWluIGEgJyonLgorZG5sIHBvc2l4X3NwYXduIG9uIEFJWCA1LjMuLjYuMSBoYXMgYWxzbyBhIHRoaXJkIGJ1ZzogSXQgZG9lcyBub3Qgd29yaworZG5sIHdoZW4gUE9TSVggdGhyZWFkcyBhcmUgdXNlZC4gQnV0IHdlIGRvbid0IHRlc3QgYWdhaW5zdCB0aGlzIGJ1ZyBoZXJlLgorQUNfREVGVU4oW2dsX1BPU0lYX1NQQVdOX1dPUktTXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkgZG5sIGZvciBjcm9zcy1jb21waWxlcworICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBwb3NpeF9zcGF3biB3b3Jrc10sIFtnbF9jdl9mdW5jX3Bvc2l4X3NwYXduX3dvcmtzXSwKKyAgICBbaWYgdGVzdCAkY3Jvc3NfY29tcGlsaW5nID0gbm87IHRoZW4KKyAgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3Bhd24uaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorCitleHRlcm4gY2hhciAqKmVudmlyb247CisKKyNpZm5kZWYgU1RESU5fRklMRU5PCisjIGRlZmluZSBTVERJTl9GSUxFTk8gMAorI2VuZGlmCisjaWZuZGVmIFNURE9VVF9GSUxFTk8KKyMgZGVmaW5lIFNURE9VVF9GSUxFTk8gMQorI2VuZGlmCisjaWZuZGVmIFNUREVSUl9GSUxFTk8KKyMgZGVmaW5lIFNUREVSUl9GSUxFTk8gMgorI2VuZGlmCisKKyNpZm5kZWYgV1RFUk1TSUcKKyMgZGVmaW5lIFdURVJNU0lHKHgpICgoeCkgJiAweDdmKQorI2VuZGlmCisjaWZuZGVmIFdJRkVYSVRFRAorIyBkZWZpbmUgV0lGRVhJVEVEKHgpIChXVEVSTVNJRyAoeCkgPT0gMCkKKyNlbmRpZgorI2lmbmRlZiBXRVhJVFNUQVRVUworIyBkZWZpbmUgV0VYSVRTVEFUVVMoeCkgKCgoeCkgPj4gOCkgJiAweGZmKQorI2VuZGlmCisKKyNkZWZpbmUgQ0hJTERfUFJPR1JBTV9GSUxFTkFNRSAiL25vbi9leGlzdC9lbnQiCisKK3N0YXRpYyBpbnQKK2ZkX3NhZmVyIChpbnQgZmQpCit7CisgIGlmICgwIDw9IGZkICYmIGZkIDw9IDIpCisgICAgeworICAgICAgaW50IGYgPSBmZF9zYWZlciAoZHVwIChmZCkpOworICAgICAgaW50IGUgPSBlcnJubzsKKyAgICAgIGNsb3NlIChmZCk7CisgICAgICBlcnJubyA9IGU7CisgICAgICBmZCA9IGY7CisgICAgfQorCisgIHJldHVybiBmZDsKK30KKworaW50CittYWluICgpCit7CisgIGNoYXIgKmFyZ3ZbMl0gPSB7IENISUxEX1BST0dSQU1fRklMRU5BTUUsIE5VTEwgfTsKKyAgaW50IG9mZFsyXTsKKyAgc2lnc2V0X3QgYmxvY2tlZF9zaWduYWxzOworICBzaWdzZXRfdCBmYXRhbF9zaWduYWxfc2V0OworICBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCBhY3Rpb25zOworICBib29sIGFjdGlvbnNfYWxsb2NhdGVkOworICBwb3NpeF9zcGF3bmF0dHJfdCBhdHRyczsKKyAgYm9vbCBhdHRyc19hbGxvY2F0ZWQ7CisgIGludCBlcnI7CisgIHBpZF90IGNoaWxkOworICBpbnQgc3RhdHVzOworICBpbnQgZXhpdHN0YXR1czsKKworICBzZXR2YnVmIChzdGRvdXQsIE5VTEwsIF9JT0ZCRiwgMCk7CisgIHB1dHMgKCJUaGlzIHNob3VsZCBiZSBzZWVuIG9ubHkgb25jZS4iKTsKKyAgaWYgKHBpcGUgKG9mZCkgPCAwIHx8IChvZmRbMV0gPSBmZF9zYWZlciAob2ZkWzFdKSkgPCAwKQorICAgIHsKKyAgICAgIHBlcnJvciAoImNhbm5vdCBjcmVhdGUgcGlwZSIpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorICBzaWdwcm9jbWFzayAoU0lHX1NFVE1BU0ssIE5VTEwsICZibG9ja2VkX3NpZ25hbHMpOworICBzaWdlbXB0eXNldCAoJmZhdGFsX3NpZ25hbF9zZXQpOworICBzaWdhZGRzZXQgKCZmYXRhbF9zaWduYWxfc2V0LCBTSUdJTlQpOworICBzaWdhZGRzZXQgKCZmYXRhbF9zaWduYWxfc2V0LCBTSUdURVJNKTsKKyAgc2lnYWRkc2V0ICgmZmF0YWxfc2lnbmFsX3NldCwgU0lHSFVQKTsKKyAgc2lnYWRkc2V0ICgmZmF0YWxfc2lnbmFsX3NldCwgU0lHUElQRSk7CisgIHNpZ3Byb2NtYXNrIChTSUdfQkxPQ0ssICZmYXRhbF9zaWduYWxfc2V0LCBOVUxMKTsKKyAgYWN0aW9uc19hbGxvY2F0ZWQgPSBmYWxzZTsKKyAgYXR0cnNfYWxsb2NhdGVkID0gZmFsc2U7CisgIGlmICgoZXJyID0gcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2luaXQgKCZhY3Rpb25zKSkgIT0gMAorICAgICAgfHwgKGFjdGlvbnNfYWxsb2NhdGVkID0gdHJ1ZSwKKyAgICAgICAgICAoZXJyID0gcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDIgKCZhY3Rpb25zLCBvZmRbMF0sIFNURElOX0ZJTEVOTykpICE9IDAKKyAgICAgICAgICB8fCAoZXJyID0gcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlICgmYWN0aW9ucywgb2ZkWzBdKSkgIT0gMAorICAgICAgICAgIHx8IChlcnIgPSBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2UgKCZhY3Rpb25zLCBvZmRbMV0pKSAhPSAwCisgICAgICAgICAgfHwgKGVyciA9IHBvc2l4X3NwYXduYXR0cl9pbml0ICgmYXR0cnMpKSAhPSAwCisgICAgICAgICAgfHwgKGF0dHJzX2FsbG9jYXRlZCA9IHRydWUsCisgICAgICAgICAgICAgIChlcnIgPSBwb3NpeF9zcGF3bmF0dHJfc2V0c2lnbWFzayAoJmF0dHJzLCAmYmxvY2tlZF9zaWduYWxzKSkgIT0gMAorICAgICAgICAgICAgICB8fCAoZXJyID0gcG9zaXhfc3Bhd25hdHRyX3NldGZsYWdzICgmYXR0cnMsIFBPU0lYX1NQQVdOX1NFVFNJR01BU0spKSAhPSAwKQorICAgICAgICAgIHx8IChlcnIgPSBwb3NpeF9zcGF3bnAgKCZjaGlsZCwgQ0hJTERfUFJPR1JBTV9GSUxFTkFNRSwgJmFjdGlvbnMsICZhdHRycywgYXJndiwgZW52aXJvbikpICE9IDApKQorICAgIHsKKyAgICAgIGlmIChhY3Rpb25zX2FsbG9jYXRlZCkKKyAgICAgICAgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3kgKCZhY3Rpb25zKTsKKyAgICAgIGlmIChhdHRyc19hbGxvY2F0ZWQpCisgICAgICAgIHBvc2l4X3NwYXduYXR0cl9kZXN0cm95ICgmYXR0cnMpOworICAgICAgc2lncHJvY21hc2sgKFNJR19VTkJMT0NLLCAmZmF0YWxfc2lnbmFsX3NldCwgTlVMTCk7CisgICAgICBpZiAoZXJyID09IEVOT0VOVCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBlcnJubyA9IGVycjsKKyAgICAgICAgICBwZXJyb3IgKCJzdWJwcm9jZXNzIGZhaWxlZCIpOworICAgICAgICAgIGV4aXQgKDEpOworICAgICAgICB9CisgICAgfQorICBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfZGVzdHJveSAoJmFjdGlvbnMpOworICBwb3NpeF9zcGF3bmF0dHJfZGVzdHJveSAoJmF0dHJzKTsKKyAgc2lncHJvY21hc2sgKFNJR19VTkJMT0NLLCAmZmF0YWxfc2lnbmFsX3NldCwgTlVMTCk7CisgIGNsb3NlIChvZmRbMF0pOworICBjbG9zZSAob2ZkWzFdKTsKKyAgc3RhdHVzID0gMDsKKyAgd2hpbGUgKHdhaXRwaWQgKGNoaWxkLCAmc3RhdHVzLCAwKSAhPSBjaGlsZCkKKyAgICA7CisgIGlmICghV0lGRVhJVEVEIChzdGF0dXMpKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgInN1YnByb2Nlc3MgdGVybWluYXRlZCB3aXRoIHVuZXhwZWN0ZWQgd2FpdCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisgICAgICBleGl0ICgxKTsKKyAgICB9CisgIGV4aXRzdGF0dXMgPSBXRVhJVFNUQVRVUyAoc3RhdHVzKTsKKyAgaWYgKGV4aXRzdGF0dXMgIT0gMTI3KQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgInN1YnByb2Nlc3MgdGVybWluYXRlZCB3aXRoIHVuZXhwZWN0ZWQgZXhpdCBzdGF0dXMgJWRcbiIsIGV4aXRzdGF0dXMpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorICByZXR1cm4gMDsKK30KK11dKV0sCisgICAgICAgICBbaWYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgXAorICAgICAgICAgICAgICYmIC4vY29uZnRlc3QkYWNfZXhlZXh0ID4gY29uZnRlc3Qub3V0IFwKKyAgICAgICAgICAgICAmJiBlY2hvICdUaGlzIHNob3VsZCBiZSBzZWVuIG9ubHkgb25jZS4nID4gY29uZnRlc3Qub2sgXAorICAgICAgICAgICAgICYmIGNtcCBjb25mdGVzdC5vdXQgY29uZnRlc3Qub2sgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgIGdsX2N2X2Z1bmNfcG9zaXhfc3Bhd25fd29ya3M9eWVzCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZ2xfY3ZfZnVuY19wb3NpeF9zcGF3bl93b3Jrcz1ubworICAgICAgICAgIGZpXSwKKyAgICAgICAgIFtnbF9jdl9mdW5jX3Bvc2l4X3NwYXduX3dvcmtzPW5vXSkKKyAgICAgICBpZiB0ZXN0ICRnbF9jdl9mdW5jX3Bvc2l4X3NwYXduX3dvcmtzID0geWVzOyB0aGVuCisgICAgICAgICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWworLyogVGVzdCB3aGV0aGVyIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuIHN1cHBvcnRzIGZpbGVuYW1lIGFyZ3VtZW50cworICAgdGhhdCBjb250YWluIHNwZWNpYWwgY2hhcmFjdGVycyBzdWNoIGFzICcqJy4gICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3Bhd24uaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorCitleHRlcm4gY2hhciAqKmVudmlyb247CisKKyNpZm5kZWYgU1RESU5fRklMRU5PCisjIGRlZmluZSBTVERJTl9GSUxFTk8gMAorI2VuZGlmCisjaWZuZGVmIFNURE9VVF9GSUxFTk8KKyMgZGVmaW5lIFNURE9VVF9GSUxFTk8gMQorI2VuZGlmCisjaWZuZGVmIFNUREVSUl9GSUxFTk8KKyMgZGVmaW5lIFNUREVSUl9GSUxFTk8gMgorI2VuZGlmCisKKyNpZm5kZWYgV1RFUk1TSUcKKyMgZGVmaW5lIFdURVJNU0lHKHgpICgoeCkgJiAweDdmKQorI2VuZGlmCisjaWZuZGVmIFdJRkVYSVRFRAorIyBkZWZpbmUgV0lGRVhJVEVEKHgpIChXVEVSTVNJRyAoeCkgPT0gMCkKKyNlbmRpZgorI2lmbmRlZiBXRVhJVFNUQVRVUworIyBkZWZpbmUgV0VYSVRTVEFUVVMoeCkgKCgoeCkgPj4gOCkgJiAweGZmKQorI2VuZGlmCisKKyNkZWZpbmUgQ0hJTERfUFJPR1JBTV9GSUxFTkFNRSAiY29uZnRlc3QiCisjZGVmaW5lIERBVEFfRklMRU5BTUUgImNvbmZ0ZXN0JT0qIz8iCisKK3N0YXRpYyBpbnQKK3BhcmVudF9tYWluICh2b2lkKQoreworICBGSUxFICpmcDsKKyAgY2hhciAqYXJndlszXSA9IHsgQ0hJTERfUFJPR1JBTV9GSUxFTkFNRSwgIi1jaGlsZCIsIE5VTEwgfTsKKyAgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgYWN0aW9uczsKKyAgYm9vbCBhY3Rpb25zX2FsbG9jYXRlZDsKKyAgaW50IGVycjsKKyAgcGlkX3QgY2hpbGQ7CisgIGludCBzdGF0dXM7CisgIGludCBleGl0c3RhdHVzOworCisgIC8qIENyZWF0ZSBhIGRhdGEgZmlsZSB3aXRoIHNwZWNpZmljIGNvbnRlbnRzLiAgKi8KKyAgZnAgPSBmb3BlbiAoREFUQV9GSUxFTkFNRSwgIndiIik7CisgIGlmIChmcCA9PSBOVUxMKQorICAgIHsKKyAgICAgIHBlcnJvciAoImNhbm5vdCBjcmVhdGUgZGF0YSBmaWxlIik7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIGZ3cml0ZSAoIkhhbGxlIFBvdHRhIiwgMSwgMTEsIGZwKTsKKyAgaWYgKGZmbHVzaCAoZnApIHx8IGZjbG9zZSAoZnApKQorICAgIHsKKyAgICAgIHBlcnJvciAoImNhbm5vdCBwcmVwYXJlIGRhdGEgZmlsZSIpOworICAgICAgcmV0dXJuIDI7CisgICAgfQorCisgIC8qIEF2b2lkIHJlYWRpbmcgZnJvbSBvdXIgc3RkaW4sIGFzIGl0IGNvdWxkIGJsb2NrLiAgKi8KKyAgZnJlb3BlbiAoIi9kZXYvbnVsbCIsICJyYiIsIHN0ZGluKTsKKworICAvKiBUZXN0IHdoZXRoZXIgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW4gd2l0aCB0aGlzIGZpbGUgbmFtZQorICAgICBhY3R1YWxseSB3b3JrcywgYnV0IHNwYXduaW5nIGEgY2hpbGQgdGhhdCByZWFkcyBmcm9tIHRoaXMgZmlsZS4gICovCisgIGFjdGlvbnNfYWxsb2NhdGVkID0gZmFsc2U7CisgIGlmICgoZXJyID0gcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2luaXQgKCZhY3Rpb25zKSkgIT0gMAorICAgICAgfHwgKGFjdGlvbnNfYWxsb2NhdGVkID0gdHJ1ZSwKKyAgICAgICAgICAoZXJyID0gcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW4gKCZhY3Rpb25zLCBTVERJTl9GSUxFTk8sIERBVEFfRklMRU5BTUUsIE9fUkRPTkxZLCAwNjAwKSkgIT0gMAorICAgICAgICAgIHx8IChlcnIgPSBwb3NpeF9zcGF3biAoJmNoaWxkLCBDSElMRF9QUk9HUkFNX0ZJTEVOQU1FLCAmYWN0aW9ucywgTlVMTCwgYXJndiwgZW52aXJvbikpICE9IDApKQorICAgIHsKKyAgICAgIGlmIChhY3Rpb25zX2FsbG9jYXRlZCkKKyAgICAgICAgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3kgKCZhY3Rpb25zKTsKKyAgICAgIGVycm5vID0gZXJyOworICAgICAgcGVycm9yICgic3VicHJvY2VzcyBmYWlsZWQiKTsKKyAgICAgIHJldHVybiAzOworICAgIH0KKyAgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3kgKCZhY3Rpb25zKTsKKyAgc3RhdHVzID0gMDsKKyAgd2hpbGUgKHdhaXRwaWQgKGNoaWxkLCAmc3RhdHVzLCAwKSAhPSBjaGlsZCkKKyAgICA7CisgIGlmICghV0lGRVhJVEVEIChzdGF0dXMpKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgInN1YnByb2Nlc3MgdGVybWluYXRlZCB3aXRoIHVuZXhwZWN0ZWQgd2FpdCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisgICAgICByZXR1cm4gNDsKKyAgICB9CisgIGV4aXRzdGF0dXMgPSBXRVhJVFNUQVRVUyAoc3RhdHVzKTsKKyAgaWYgKGV4aXRzdGF0dXMgIT0gMCkKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJzdWJwcm9jZXNzIHRlcm1pbmF0ZWQgd2l0aCB1bmV4cGVjdGVkIGV4aXQgc3RhdHVzICVkXG4iLCBleGl0c3RhdHVzKTsKKyAgICAgIHJldHVybiA1OworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2NoaWxkX21haW4gKHZvaWQpCit7CisgIGNoYXIgYnVmWzEwMjRdOworCisgIC8qIFNlZSBpZiByZWFkaW5nIGZyb20gU1RESU5fRklMRU5PIHlpZWxkcyB0aGUgZXhwZWN0ZWQgY29udGVudHMuICAqLworICBpZiAoZnJlYWQgKGJ1ZiwgMSwgc2l6ZW9mIChidWYpLCBzdGRpbikgPT0gMTEKKyAgICAgICYmIG1lbWNtcCAoYnVmLCAiSGFsbGUgUG90dGEiLCAxMSkgPT0gMCkKKyAgICByZXR1cm4gMDsKKyAgZWxzZQorICAgIHJldHVybiA4OworfQorCitzdGF0aWMgdm9pZAorY2xlYW51cF90aGVuX2RpZSAoaW50IHNpZykKK3sKKyAgLyogQ2xlYW4gdXAgZGF0YSBmaWxlLiAgKi8KKyAgdW5saW5rIChEQVRBX0ZJTEVOQU1FKTsKKworICAvKiBSZS1yYWlzZSB0aGUgc2lnbmFsIGFuZCBkaWUgZnJvbSBpdC4gICovCisgIHNpZ25hbCAoc2lnLCBTSUdfREZMKTsKKyAgcmFpc2UgKHNpZyk7Cit9CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgaW50IGV4aXRzdGF0dXM7CisKKyAgaWYgKCEoYXJnYyA+IDEgJiYgc3RyY21wIChhcmd2WzFdLCAiLWNoaWxkIikgPT0gMCkpCisgICAgeworICAgICAgLyogVGhpcyBpcyB0aGUgcGFyZW50IHByb2Nlc3MuICAqLworICAgICAgc2lnbmFsIChTSUdJTlQsIGNsZWFudXBfdGhlbl9kaWUpOworICAgICAgc2lnbmFsIChTSUdURVJNLCBjbGVhbnVwX3RoZW5fZGllKTsKKyAgICAgICNpZmRlZiBTSUdIVVAKKyAgICAgIHNpZ25hbCAoU0lHSFVQLCBjbGVhbnVwX3RoZW5fZGllKTsKKyAgICAgICNlbmRpZgorCisgICAgICBleGl0c3RhdHVzID0gcGFyZW50X21haW4gKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogVGhpcyBpcyB0aGUgY2hpbGQgcHJvY2Vzcy4gICovCisKKyAgICAgIGV4aXRzdGF0dXMgPSBjaGlsZF9tYWluICgpOworICAgIH0KKyAgdW5saW5rIChEQVRBX0ZJTEVOQU1FKTsKKyAgcmV0dXJuIGV4aXRzdGF0dXM7Cit9CitdXSldLAorICAgICAgICAgICBbXSwKKyAgICAgICAgICAgW2dsX2N2X2Z1bmNfcG9zaXhfc3Bhd25fd29ya3M9bm9dKQorICAgICAgIGZpCisgICAgIGVsc2UKKyAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgIGFpeCopIGdsX2N2X2Z1bmNfcG9zaXhfc3Bhd25fd29ya3M9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAqKSAgICBnbF9jdl9mdW5jX3Bvc2l4X3NwYXduX3dvcmtzPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICBlc2FjCisgICAgIGZpCisgICAgXSkKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvc3Bhd25pLmMuCitBQ19ERUZVTihbZ2xfUFJFUkVRX1BPU0lYX1NQQVdOX0lOVEVSTkFMXSwKK1sKKyAgQUNfQ0hFQ0tfSEVBREVSUyhbcGF0aHMuaF0pCisgIEFDX0NIRUNLX0ZVTkNTKFtjb25mc3RyIHNjaGVkX3NldHBhcmFtIHNjaGVkX3NldHNjaGVkdWxlciBzZXRlZ2lkIHNldGV1aWQgdmZvcmtdKQorXSkKKworQUNfREVGVU4oW2dsX0ZVTkNfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERENMT1NFXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfU1BBV05fSF9ERUZBVUxUU10pCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pIGRubCBmb3IgY3Jvc3MtY29tcGlsZXMKKyAgZ2xfUE9TSVhfU1BBV04KKyAgaWYgdGVzdCAkUkVQTEFDRV9QT1NJWF9TUEFXTiA9IDE7IHRoZW4KKyAgICBSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRT0xCisgIGVsc2UKKyAgICBkbmwgT24gU29sYXJpcyAxMSAyMDExLTExLCBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2Ugc3VjY2VlZHMgZXZlbgorICAgIGRubCBpZiB0aGUgZmQgYXJndW1lbnQgaXMgb3V0IG9mIHJhbmdlLgorICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZSB3b3Jrc10sCisgICAgICBbZ2xfY3ZfZnVuY19wb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2Vfd29ya3NdLAorICAgICAgW0FDX1JVTl9JRkVMU0UoCisgICAgICAgICBbQUNfTEFOR19TT1VSQ0UoW1sKKyNpbmNsdWRlIDxzcGF3bi5oPgoraW50IG1haW4gKCkKK3sKKyAgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgYWN0aW9uczsKKyAgaWYgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19pbml0ICgmYWN0aW9ucykgIT0gMCkKKyAgICByZXR1cm4gMTsKKyAgaWYgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZSAoJmFjdGlvbnMsIDEwMDAwMDAwKSA9PSAwKQorICAgIHJldHVybiAyOworICByZXR1cm4gMDsKK31dXSldLAorICAgICAgICAgW2dsX2N2X2Z1bmNfcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlX3dvcmtzPXllc10sCisgICAgICAgICBbZ2xfY3ZfZnVuY19wb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2Vfd29ya3M9bm9dLAorICAgICAgICAgWyMgR3Vlc3Mgbm8gb24gU29sYXJpcywgeWVzIG90aGVyd2lzZS4KKyAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgIHNvbGFyaXMqKSBnbF9jdl9mdW5jX3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZV93b3Jrcz0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgICopICAgICAgICBnbF9jdl9mdW5jX3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZV93b3Jrcz0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgZXNhYworICAgICAgICAgXSkKKyAgICAgIF0pCisgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlX3dvcmtzIiBpbgorICAgICAgKnllcykgOzsKKyAgICAgICopIFJFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERENMT1NFPTEgOzsKKyAgICBlc2FjCisgIGZpCitdKQorCitBQ19ERUZVTihbZ2xfRlVOQ19QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMl0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1NQQVdOX0hfREVGQVVMVFNdKQorICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKSBkbmwgZm9yIGNyb3NzLWNvbXBpbGVzCisgIGdsX1BPU0lYX1NQQVdOCisgIGlmIHRlc3QgJFJFUExBQ0VfUE9TSVhfU1BBV04gPSAxOyB0aGVuCisgICAgUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMj0xCisgIGVsc2UKKyAgICBkbmwgT24gU29sYXJpcyAxMSAyMDExLTExLCBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkZHVwMiBzdWNjZWVkcyBldmVuCisgICAgZG5sIGlmIHRoZSBmZCBhcmd1bWVudCBpcyBvdXQgb2YgcmFuZ2UuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDIgd29ya3NdLAorICAgICAgW2dsX2N2X2Z1bmNfcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDJfd29ya3NdLAorICAgICAgW0FDX1JVTl9JRkVMU0UoCisgICAgICAgICBbQUNfTEFOR19TT1VSQ0UoW1sKKyNpbmNsdWRlIDxzcGF3bi5oPgoraW50IG1haW4gKCkKK3sKKyAgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgYWN0aW9uczsKKyAgaWYgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19pbml0ICgmYWN0aW9ucykgIT0gMCkKKyAgICByZXR1cm4gMTsKKyAgaWYgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyICgmYWN0aW9ucywgMTAwMDAwMDAsIDIpID09IDApCisgICAgcmV0dXJuIDI7CisgIHJldHVybiAwOworfV1dKV0sCisgICAgICAgICBbZ2xfY3ZfZnVuY19wb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkZHVwMl93b3Jrcz15ZXNdLAorICAgICAgICAgW2dsX2N2X2Z1bmNfcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDJfd29ya3M9bm9dLAorICAgICAgICAgWyMgR3Vlc3Mgbm8gb24gU29sYXJpcywgeWVzIG90aGVyd2lzZS4KKyAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgIHNvbGFyaXMqKSBnbF9jdl9mdW5jX3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyX3dvcmtzPSJndWVzc2luZyBubyI7OworICAgICAgICAgICAgKikgICAgICAgIGdsX2N2X2Z1bmNfcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDJfd29ya3M9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgIF0pCisgICAgICBdKQorICAgIGNhc2UgIiRnbF9jdl9mdW5jX3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyX3dvcmtzIiBpbgorICAgICAgKnllcykgOzsKKyAgICAgICopIFJFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDI9MSA7OworICAgIGVzYWMKKyAgZmkKK10pCisKK0FDX0RFRlVOKFtnbF9GVU5DX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERPUEVOXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfU1BBV05fSF9ERUZBVUxUU10pCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pIGRubCBmb3IgY3Jvc3MtY29tcGlsZXMKKyAgZ2xfUE9TSVhfU1BBV04KKyAgaWYgdGVzdCAkUkVQTEFDRV9QT1NJWF9TUEFXTiA9IDE7IHRoZW4KKyAgICBSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERPUEVOPTEKKyAgZWxzZQorICAgIGRubCBPbiBTb2xhcmlzIDExIDIwMTEtMTEsIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuIHN1Y2NlZWRzIGV2ZW4KKyAgICBkbmwgaWYgdGhlIGZkIGFyZ3VtZW50IGlzIG91dCBvZiByYW5nZS4KKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3BlbiB3b3Jrc10sCisgICAgICBbZ2xfY3ZfZnVuY19wb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3Blbl93b3Jrc10sCisgICAgICBbQUNfUlVOX0lGRUxTRSgKKyAgICAgICAgIFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgPHNwYXduLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KK2ludCBtYWluICgpCit7CisgIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190IGFjdGlvbnM7CisgIGlmIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfaW5pdCAoJmFjdGlvbnMpICE9IDApCisgICAgcmV0dXJuIDE7CisgIGlmIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3BlbiAoJmFjdGlvbnMsIDEwMDAwMDAwLCAiZm9vIiwgMCwgT19SRE9OTFkpCisgICAgICA9PSAwKQorICAgIHJldHVybiAyOworICByZXR1cm4gMDsKK31dXSldLAorICAgICAgICAgW2dsX2N2X2Z1bmNfcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW5fd29ya3M9eWVzXSwKKyAgICAgICAgIFtnbF9jdl9mdW5jX3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuX3dvcmtzPW5vXSwKKyAgICAgICAgIFsjIEd1ZXNzIG5vIG9uIFNvbGFyaXMsIHllcyBvdGhlcndpc2UuCisgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICBzb2xhcmlzKikgZ2xfY3ZfZnVuY19wb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3Blbl93b3Jrcz0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgICopICAgICAgICBnbF9jdl9mdW5jX3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuX3dvcmtzPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgICBdKQorICAgICAgXSkKKyAgICBjYXNlICIkZ2xfY3ZfZnVuY19wb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3Blbl93b3JrcyIgaW4KKyAgICAgICp5ZXMpIDs7CisgICAgICAqKSBSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERPUEVOPTEgOzsKKyAgICBlc2FjCisgIGZpCitdKQpkaWZmIC0tZ2l0IGEvbTQvcHJpbnRmLWZyZXhwLm00IGIvbTQvcHJpbnRmLWZyZXhwLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNWQ2NDEKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9wcmludGYtZnJleHAubTQKQEAgLTAsMCArMSwzOCBAQAorIyBwcmludGYtZnJleHAubTQgc2VyaWFsIDUKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgQ2hlY2sgaG93IHRvIGRlZmluZSBwcmludGZfZnJleHAoKSB3aXRob3V0IGxpbmtpbmcgd2l0aCBsaWJtLgorCitBQ19ERUZVTihbZ2xfRlVOQ19QUklOVEZfRlJFWFBdLAorWworICBBQ19SRVFVSVJFKFtnbF9DSEVDS19GUkVYUF9OT19MSUJNXSkKKyAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19mcmV4cF9ub19saWJtID0geWVzOyB0aGVuCisgICAgZ2xfRlVOQ19GUkVYUF9XT1JLUworICAgIGNhc2UgIiRnbF9jdl9mdW5jX2ZyZXhwX3dvcmtzIiBpbgorICAgICAgKnllcykKKyAgICAgICAgQUNfREVGSU5FKFtIQVZFX0ZSRVhQX0lOX0xJQkNdLCBbMV0sCisgICAgICAgICAgW0RlZmluZSBpZiB0aGUgZnJleHAgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGluIGxpYmMuXSkKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgbGRleHAgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibV0sCisgICAgW2dsX2N2X2Z1bmNfbGRleHBfbm9fbGlibV0sCisgICAgWworICAgICAgQUNfTElOS19JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgIFtbI2luY2x1ZGUgPG1hdGguaD4KKyAgICAgICAgICAgICBkb3VibGUgeDsKKyAgICAgICAgICAgICBpbnQgeTtdXSwKKyAgICAgICAgICAgW1tyZXR1cm4gbGRleHAgKHgsIHkpIDwgMTtdXSldLAorICAgICAgICBbZ2xfY3ZfZnVuY19sZGV4cF9ub19saWJtPXllc10sCisgICAgICAgIFtnbF9jdl9mdW5jX2xkZXhwX25vX2xpYm09bm9dKQorICAgIF0pCisgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfbGRleHBfbm9fbGlibSA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShbSEFWRV9MREVYUF9JTl9MSUJDXSwgWzFdLAorICAgICAgW0RlZmluZSBpZiB0aGUgbGRleHAgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGluIGxpYmMuXSkKKyAgZmkKK10pCmRpZmYgLS1naXQgYS9tNC9wcmludGYtZnJleHBsLm00IGIvbTQvcHJpbnRmLWZyZXhwbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTYwYTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbTQvcHJpbnRmLWZyZXhwbC5tNApAQCAtMCwwICsxLDQ4IEBACisjIHByaW50Zi1mcmV4cGwubTQgc2VyaWFsIDEwCitkbmwgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIENoZWNrIGhvdyB0byBkZWZpbmUgcHJpbnRmX2ZyZXhwbCgpIHdpdGhvdXQgbGlua2luZyB3aXRoIGxpYm0uCisKK0FDX0RFRlVOKFtnbF9GVU5DX1BSSU5URl9GUkVYUExdLAorWworICBBQ19SRVFVSVJFKFtnbF9NQVRIX0hfREVGQVVMVFNdKQorICBBQ19SRVFVSVJFKFtnbF9MT05HX0RPVUJMRV9WU19ET1VCTEVdKQorCisgIGRubCBTdWJzZXQgb2YgZ2xfRlVOQ19GUkVYUExfTk9fTElCTS4KKyAgZ2xfQ0hFQ0tfRlJFWFBMX05PX0xJQk0KKyAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19mcmV4cGxfbm9fbGlibSA9IHllczsgdGhlbgorICAgIGdsX0ZVTkNfRlJFWFBMX1dPUktTCisgICAgY2FzZSAiJGdsX2N2X2Z1bmNfZnJleHBsX3dvcmtzIiBpbgorICAgICAgKnllcykgZ2xfZnVuY19mcmV4cGxfbm9fbGlibT15ZXMgOzsKKyAgICAgICopICAgIGdsX2Z1bmNfZnJleHBsX25vX2xpYm09bm87IFJFUExBQ0VfRlJFWFBMPTEgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBnbF9mdW5jX2ZyZXhwbF9ub19saWJtPW5vCisgICAgZG5sIFNldCBSRVBMQUNFX0ZSRVhQTCBoZXJlIGJlY2F1c2UgdGhlIHN5c3RlbSBtYXkgaGF2ZSBmcmV4cGwgaW4gbGlibS4KKyAgICBSRVBMQUNFX0ZSRVhQTD0xCisgIGZpCisgIGlmIHRlc3QgJGdsX2Z1bmNfZnJleHBsX25vX2xpYm0gPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoW0hBVkVfRlJFWFBMX0lOX0xJQkNdLCBbMV0sCisgICAgICBbRGVmaW5lIGlmIHRoZSBmcmV4cGwgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGluIGxpYmMuXSkKKyAgICBkbmwgQWxzbyBjaGVjayB3aGV0aGVyIGl0J3MgZGVjbGFyZWQuCisgICAgZG5sIE1hYyBPUyBYIDEwLjMgaGFzIGZyZXhwbCgpIGluIGxpYmMgYnV0IGRvZXNuJ3QgZGVjbGFyZSBpdCBpbiA8bWF0aC5oPi4KKyAgICBBQ19DSEVDS19ERUNMKFtmcmV4cGxdLCAsIFtIQVZFX0RFQ0xfRlJFWFBMPTBdLCBbWyNpbmNsdWRlIDxtYXRoLmg+XV0pCisgIGZpCisKKyAgZ2xfQ0hFQ0tfTERFWFBMX05PX0xJQk0KKyAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19sZGV4cGxfbm9fbGlibSA9IHllczsgdGhlbgorICAgIGdsX0ZVTkNfTERFWFBMX1dPUktTCisgICAgY2FzZSAiJGdsX2N2X2Z1bmNfbGRleHBsX3dvcmtzIiBpbgorICAgICAgKnllcykKKyAgICAgICAgQUNfREVGSU5FKFtIQVZFX0xERVhQTF9JTl9MSUJDXSwgWzFdLAorICAgICAgICAgIFtEZWZpbmUgaWYgdGhlIGxkZXhwbCBmdW5jdGlvbiBpcyBhdmFpbGFibGUgaW4gbGliYy5dKQorICAgICAgICBkbmwgQWxzbyBjaGVjayB3aGV0aGVyIGl0J3MgZGVjbGFyZWQuCisgICAgICAgIGRubCBNYWMgT1MgWCAxMC4zIGhhcyBsZGV4cGwoKSBpbiBsaWJjIGJ1dCBkb2Vzbid0IGRlY2xhcmUgaXQgaW4gPG1hdGguaD4uCisgICAgICAgIEFDX0NIRUNLX0RFQ0woW2xkZXhwbF0sICwgW0hBVkVfREVDTF9MREVYUEw9MF0sIFtbI2luY2x1ZGUgPG1hdGguaD5dXSkKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGZpCitdKQpkaWZmIC0tZ2l0IGEvbTQvcHJpbnRmLXBvc2l4LXJwbC5tNCBiL200L3ByaW50Zi1wb3NpeC1ycGwubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJhYzA3NwotLS0gL2Rldi9udWxsCisrKyBiL200L3ByaW50Zi1wb3NpeC1ycGwubTQKQEAgLTAsMCArMSwyNiBAQAorIyBwcmludGYtcG9zaXgtcnBsLm00IHNlcmlhbCA0CitkbmwgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0ZVTkNfUFJJTlRGX1BPU0lYXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfRlVOQ19WRlBSSU5URl9QT1NJWF0pCisgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfdmZwcmludGZfcG9zaXggPSBubzsgdGhlbgorICAgIGdsX1JFUExBQ0VfUFJJTlRGCisgIGZpCitdKQorCitBQ19ERUZVTihbZ2xfUkVQTEFDRV9QUklOVEZdLAorWworICBBQ19SRVFVSVJFKFtnbF9TVERJT19IX0RFRkFVTFRTXSkKKyAgQUNfUkVRVUlSRShbZ2xfQVNNX1NZTUJPTF9QUkVGSVhdKQorICBBQ19MSUJPQkooW3ByaW50Zl0pCisgIFJFUExBQ0VfUFJJTlRGPTEKKyAgQUNfREVGSU5FKFtSRVBMQUNFX1BSSU5URl9QT1NJWF0sIFsxXSwKKyAgICBbRGVmaW5lIGlmIHByaW50ZiBpcyBvdmVycmlkZGVuIGJ5IGEgUE9TSVggY29tcGxpYW50IGdudWxpYiBpbXBsZW1lbnRhdGlvbi5dKQorICBnbF9QUkVSRVFfUFJJTlRGCitdKQorCitBQ19ERUZVTihbZ2xfUFJFUkVRX1BSSU5URl0sIFs6XSkKZGlmZiAtLWdpdCBhL200L3ByaW50Zi5tNCBiL200L3ByaW50Zi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTFlODk2Ci0tLSAvZGV2L251bGwKKysrIGIvbTQvcHJpbnRmLm00CkBAIC0wLDAgKzEsMTU3MCBAQAorIyBwcmludGYubTQgc2VyaWFsIDUwCitkbmwgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIFRlc3Qgd2hldGhlciB0aGUgKnByaW50ZiBmYW1pbHkgb2YgZnVuY3Rpb25zIHN1cHBvcnRzIHRoZSAnaicsICd6JywgJ3QnLAorZG5sICdMJyBzaXplIHNwZWNpZmllcnMuIChJU08gQzk5LCBQT1NJWDoyMDAxKQorZG5sIFJlc3VsdCBpcyBnbF9jdl9mdW5jX3ByaW50Zl9zaXplc19jOTkuCisKK0FDX0RFRlVOKFtnbF9QUklOVEZfU0laRVNfQzk5XSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCisgIEFDX1JFUVVJUkUoW2dsX0FDX0hFQURFUl9TVERJTlRfSF0pCisgIEFDX1JFUVVJUkUoW2dsX0FDX0hFQURFUl9JTlRUWVBFU19IXSkKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKSBkbmwgZm9yIGNyb3NzLWNvbXBpbGVzCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHByaW50ZiBzdXBwb3J0cyBzaXplIHNwZWNpZmllcnMgYXMgaW4gQzk5XSwKKyAgICBbZ2xfY3ZfZnVuY19wcmludGZfc2l6ZXNfYzk5XSwKKyAgICBbCisgICAgICBBQ19SVU5fSUZFTFNFKAorICAgICAgICBbQUNfTEFOR19TT1VSQ0UoW1sKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmIEhBVkVfU1RESU5UX0hfV0lUSF9VSU5UTUFYCisjIGluY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisjaWYgSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWAorIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2VuZGlmCitzdGF0aWMgY2hhciBidWZbMTAwXTsKK2ludCBtYWluICgpCit7CisgIGludCByZXN1bHQgPSAwOworI2lmIEhBVkVfU1RESU5UX0hfV0lUSF9VSU5UTUFYIHx8IEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVgKKyAgYnVmWzBdID0gJ1wwJzsKKyAgaWYgKHNwcmludGYgKGJ1ZiwgIiVqdSAlZCIsICh1aW50bWF4X3QpIDEyMzQ1NjcxLCAzMywgNDQsIDU1KSA8IDAKKyAgICAgIHx8IHN0cmNtcCAoYnVmLCAiMTIzNDU2NzEgMzMiKSAhPSAwKQorICAgIHJlc3VsdCB8PSAxOworI2VuZGlmCisgIGJ1ZlswXSA9ICdcMCc7CisgIGlmIChzcHJpbnRmIChidWYsICIlenUgJWQiLCAoc2l6ZV90KSAxMjM0NTY3MiwgMzMsIDQ0LCA1NSkgPCAwCisgICAgICB8fCBzdHJjbXAgKGJ1ZiwgIjEyMzQ1NjcyIDMzIikgIT0gMCkKKyAgICByZXN1bHQgfD0gMjsKKyAgYnVmWzBdID0gJ1wwJzsKKyAgaWYgKHNwcmludGYgKGJ1ZiwgIiV0dSAlZCIsIChwdHJkaWZmX3QpIDEyMzQ1NjczLCAzMywgNDQsIDU1KSA8IDAKKyAgICAgIHx8IHN0cmNtcCAoYnVmLCAiMTIzNDU2NzMgMzMiKSAhPSAwKQorICAgIHJlc3VsdCB8PSA0OworICBidWZbMF0gPSAnXDAnOworICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxnICVkIiwgKGxvbmcgZG91YmxlKSAxLjUsIDMzLCA0NCwgNTUpIDwgMAorICAgICAgfHwgc3RyY21wIChidWYsICIxLjUgMzMiKSAhPSAwKQorICAgIHJlc3VsdCB8PSA4OworICByZXR1cm4gcmVzdWx0OworfV1dKV0sCisgICAgICAgIFtnbF9jdl9mdW5jX3ByaW50Zl9zaXplc19jOTk9eWVzXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfcHJpbnRmX3NpemVzX2M5OT1ub10sCisgICAgICAgIFsKK2NoYW5nZXF1b3RlKCwpZG5sCisgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIGdsaWJjIHN5c3RlbXMuCisgICAgICAgICAgICotZ251KikgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9zaXplc19jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gRnJlZUJTRCA+PSA1LgorICAgICAgICAgICBmcmVlYnNkWzEtNF0qKSAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfc2l6ZXNfYzk5PSJndWVzc2luZyBubyI7OworICAgICAgICAgICBmcmVlYnNkKiB8IGtmcmVlYnNkKikgZ2xfY3ZfZnVuY19wcmludGZfc2l6ZXNfYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIE1hYyBPUyBYID49IDEwLjMuCisgICAgICAgICAgIGRhcndpblsxLTZdLiopICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9zaXplc19jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIGRhcndpbiopICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9zaXplc19jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gT3BlbkJTRCA+PSAzLjkuCisgICAgICAgICAgIG9wZW5ic2RbMS0yXS4qIHwgb3BlbmJzZDMuWzAtOF0gfCBvcGVuYnNkMy5bMC04XS4qKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfc2l6ZXNfYzk5PSJndWVzc2luZyBubyI7OworICAgICAgICAgICBvcGVuYnNkKikgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfc2l6ZXNfYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIFNvbGFyaXMgPj0gMi4xMC4KKyAgICAgICAgICAgc29sYXJpczIuWzEtOV1bMC05XSopIGdsX2N2X2Z1bmNfcHJpbnRmX3NpemVzX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgIHNvbGFyaXMqKSAgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9zaXplc19jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBOZXRCU0QgPj0gMy4KKyAgICAgICAgICAgbmV0YnNkWzEtMl0qIHwgbmV0YnNkZWxmWzEtMl0qIHwgbmV0YnNkYW91dFsxLTJdKiB8IG5ldGJzZGNvZmZbMS0yXSopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9zaXplc19jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIG5ldGJzZCopICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9zaXplc19jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiB3ZSBkb24ndCBrbm93LCBhc3N1bWUgdGhlIHdvcnN0LgorICAgICAgICAgICAqKSAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfc2l6ZXNfYzk5PSJndWVzc2luZyBubyI7OworICAgICAgICAgZXNhYworY2hhbmdlcXVvdGUoWyxdKWRubAorICAgICAgICBdKQorICAgIF0pCitdKQorCitkbmwgVGVzdCB3aGV0aGVyIHRoZSAqcHJpbnRmIGZhbWlseSBvZiBmdW5jdGlvbnMgc3VwcG9ydHMgJ2xvbmcgZG91YmxlJworZG5sIGFyZ3VtZW50cyB0b2dldGhlciB3aXRoIHRoZSAnTCcgc2l6ZSBzcGVjaWZpZXIuIChJU08gQzk5LCBQT1NJWDoyMDAxKQorZG5sIFJlc3VsdCBpcyBnbF9jdl9mdW5jX3ByaW50Zl9sb25nX2RvdWJsZS4KKworQUNfREVGVU4oW2dsX1BSSU5URl9MT05HX0RPVUJMRV0sCitbCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pIGRubCBmb3IgY3Jvc3MtY29tcGlsZXMKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgcHJpbnRmIHN1cHBvcnRzICdsb25nIGRvdWJsZScgYXJndW1lbnRzXSwKKyAgICBbZ2xfY3ZfZnVuY19wcmludGZfbG9uZ19kb3VibGVdLAorICAgIFsKKyAgICAgIEFDX1JVTl9JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CitzdGF0aWMgY2hhciBidWZbMTAwMDBdOworaW50IG1haW4gKCkKK3sKKyAgaW50IHJlc3VsdCA9IDA7CisgIGJ1ZlswXSA9ICdcMCc7CisgIGlmIChzcHJpbnRmIChidWYsICIlTGYgJWQiLCAxLjc1TCwgMzMsIDQ0LCA1NSkgPCAwCisgICAgICB8fCBzdHJjbXAgKGJ1ZiwgIjEuNzUwMDAwIDMzIikgIT0gMCkKKyAgICByZXN1bHQgfD0gMTsKKyAgYnVmWzBdID0gJ1wwJzsKKyAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZSAlZCIsIDEuNzVMLCAzMywgNDQsIDU1KSA8IDAKKyAgICAgIHx8IHN0cmNtcCAoYnVmLCAiMS43NTAwMDBlKzAwIDMzIikgIT0gMCkKKyAgICByZXN1bHQgfD0gMjsKKyAgYnVmWzBdID0gJ1wwJzsKKyAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZyAlZCIsIDEuNzVMLCAzMywgNDQsIDU1KSA8IDAKKyAgICAgIHx8IHN0cmNtcCAoYnVmLCAiMS43NSAzMyIpICE9IDApCisgICAgcmVzdWx0IHw9IDQ7CisgIHJldHVybiByZXN1bHQ7Cit9XV0pXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfcHJpbnRmX2xvbmdfZG91YmxlPXllc10sCisgICAgICAgIFtnbF9jdl9mdW5jX3ByaW50Zl9sb25nX2RvdWJsZT1ub10sCisgICAgICAgIFsKK2NoYW5nZXF1b3RlKCwpZG5sCisgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgYmVvcyopICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9sb25nX2RvdWJsZT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgbWluZ3cqIHwgcHcqKSBnbF9jdl9mdW5jX3ByaW50Zl9sb25nX2RvdWJsZT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgKikgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9sb25nX2RvdWJsZT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICBlc2FjCitjaGFuZ2VxdW90ZShbLF0pZG5sCisgICAgICAgIF0pCisgICAgXSkKK10pCisKK2RubCBUZXN0IHdoZXRoZXIgdGhlICpwcmludGYgZmFtaWx5IG9mIGZ1bmN0aW9ucyBzdXBwb3J0cyBpbmZpbml0ZSBhbmQgTmFOCitkbmwgJ2RvdWJsZScgYXJndW1lbnRzIGFuZCBuZWdhdGl2ZSB6ZXJvIGFyZ3VtZW50cyBpbiB0aGUgJWYsICVlLCAlZworZG5sIGRpcmVjdGl2ZXMuIChJU08gQzk5LCBQT1NJWDoyMDAxKQorZG5sIFJlc3VsdCBpcyBnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZS4KKworQUNfREVGVU4oW2dsX1BSSU5URl9JTkZJTklURV0sCitbCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pIGRubCBmb3IgY3Jvc3MtY29tcGlsZXMKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgcHJpbnRmIHN1cHBvcnRzIGluZmluaXRlICdkb3VibGUnIGFyZ3VtZW50c10sCisgICAgW2dsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlXSwKKyAgICBbCisgICAgICBBQ19SVU5fSUZFTFNFKAorICAgICAgICBbQUNfTEFOR19TT1VSQ0UoW1sKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorc3RhdGljIGludAorc3RyaXNuYW4gKGNvbnN0IGNoYXIgKnN0cmluZywgc2l6ZV90IHN0YXJ0X2luZGV4LCBzaXplX3QgZW5kX2luZGV4KQoreworICBpZiAoc3RhcnRfaW5kZXggPCBlbmRfaW5kZXgpCisgICAgeworICAgICAgaWYgKHN0cmluZ1tzdGFydF9pbmRleF0gPT0gJy0nKQorICAgICAgICBzdGFydF9pbmRleCsrOworICAgICAgaWYgKHN0YXJ0X2luZGV4ICsgMyA8PSBlbmRfaW5kZXgKKyAgICAgICAgICAmJiBtZW1jbXAgKHN0cmluZyArIHN0YXJ0X2luZGV4LCAibmFuIiwgMykgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIHN0YXJ0X2luZGV4ICs9IDM7CisgICAgICAgICAgaWYgKHN0YXJ0X2luZGV4ID09IGVuZF9pbmRleAorICAgICAgICAgICAgICB8fCAoc3RyaW5nW3N0YXJ0X2luZGV4XSA9PSAnKCcgJiYgc3RyaW5nW2VuZF9pbmRleCAtIDFdID09ICcpJykpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKyAgcmV0dXJuIDA7Cit9CitzdGF0aWMgaW50CitoYXZlX21pbnVzX3plcm8gKCkKK3sKKyAgc3RhdGljIGRvdWJsZSBwbHVzX3plcm8gPSAwLjA7CisgIGRvdWJsZSBtaW51c196ZXJvID0gLSBwbHVzX3plcm87CisgIHJldHVybiBtZW1jbXAgKCZwbHVzX3plcm8sICZtaW51c196ZXJvLCBzaXplb2YgKGRvdWJsZSkpICE9IDA7Cit9CitzdGF0aWMgY2hhciBidWZbMTAwMDBdOworc3RhdGljIGRvdWJsZSB6ZXJvID0gMC4wOworaW50IG1haW4gKCkKK3sKKyAgaW50IHJlc3VsdCA9IDA7CisgIGlmIChzcHJpbnRmIChidWYsICIlZiIsIDEuMCAvIHplcm8pIDwgMAorICAgICAgfHwgKHN0cmNtcCAoYnVmLCAiaW5mIikgIT0gMCAmJiBzdHJjbXAgKGJ1ZiwgImluZmluaXR5IikgIT0gMCkpCisgICAgcmVzdWx0IHw9IDE7CisgIGlmIChzcHJpbnRmIChidWYsICIlZiIsIC0xLjAgLyB6ZXJvKSA8IDAKKyAgICAgIHx8IChzdHJjbXAgKGJ1ZiwgIi1pbmYiKSAhPSAwICYmIHN0cmNtcCAoYnVmLCAiLWluZmluaXR5IikgIT0gMCkpCisgICAgcmVzdWx0IHw9IDE7CisgIGlmIChzcHJpbnRmIChidWYsICIlZiIsIHplcm8gLyB6ZXJvKSA8IDAKKyAgICAgIHx8ICFzdHJpc25hbiAoYnVmLCAwLCBzdHJsZW4gKGJ1ZikpKQorICAgIHJlc3VsdCB8PSAyOworICBpZiAoc3ByaW50ZiAoYnVmLCAiJWUiLCAxLjAgLyB6ZXJvKSA8IDAKKyAgICAgIHx8IChzdHJjbXAgKGJ1ZiwgImluZiIpICE9IDAgJiYgc3RyY21wIChidWYsICJpbmZpbml0eSIpICE9IDApKQorICAgIHJlc3VsdCB8PSA0OworICBpZiAoc3ByaW50ZiAoYnVmLCAiJWUiLCAtMS4wIC8gemVybykgPCAwCisgICAgICB8fCAoc3RyY21wIChidWYsICItaW5mIikgIT0gMCAmJiBzdHJjbXAgKGJ1ZiwgIi1pbmZpbml0eSIpICE9IDApKQorICAgIHJlc3VsdCB8PSA0OworICBpZiAoc3ByaW50ZiAoYnVmLCAiJWUiLCB6ZXJvIC8gemVybykgPCAwCisgICAgICB8fCAhc3RyaXNuYW4gKGJ1ZiwgMCwgc3RybGVuIChidWYpKSkKKyAgICByZXN1bHQgfD0gODsKKyAgaWYgKHNwcmludGYgKGJ1ZiwgIiVnIiwgMS4wIC8gemVybykgPCAwCisgICAgICB8fCAoc3RyY21wIChidWYsICJpbmYiKSAhPSAwICYmIHN0cmNtcCAoYnVmLCAiaW5maW5pdHkiKSAhPSAwKSkKKyAgICByZXN1bHQgfD0gMTY7CisgIGlmIChzcHJpbnRmIChidWYsICIlZyIsIC0xLjAgLyB6ZXJvKSA8IDAKKyAgICAgIHx8IChzdHJjbXAgKGJ1ZiwgIi1pbmYiKSAhPSAwICYmIHN0cmNtcCAoYnVmLCAiLWluZmluaXR5IikgIT0gMCkpCisgICAgcmVzdWx0IHw9IDE2OworICBpZiAoc3ByaW50ZiAoYnVmLCAiJWciLCB6ZXJvIC8gemVybykgPCAwCisgICAgICB8fCAhc3RyaXNuYW4gKGJ1ZiwgMCwgc3RybGVuIChidWYpKSkKKyAgICByZXN1bHQgfD0gMzI7CisgIC8qIFRoaXMgdGVzdCBmYWlscyBvbiBIUC1VWCAxMC4yMC4gICovCisgIGlmIChoYXZlX21pbnVzX3plcm8gKCkpCisgICAgaWYgKHNwcmludGYgKGJ1ZiwgIiVnIiwgLSB6ZXJvKSA8IDAKKyAgICAgICAgfHwgc3RyY21wIChidWYsICItMCIpICE9IDApCisgICAgcmVzdWx0IHw9IDY0OworICByZXR1cm4gcmVzdWx0OworfV1dKV0sCisgICAgICAgIFtnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZT15ZXNdLAorICAgICAgICBbZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGU9bm9dLAorICAgICAgICBbCitjaGFuZ2VxdW90ZSgsKWRubAorICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBnbGliYyBzeXN0ZW1zLgorICAgICAgICAgICAqLWdudSopICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGU9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gRnJlZUJTRCA+PSA2LgorICAgICAgICAgICBmcmVlYnNkWzEtNV0qKSAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGU9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIGZyZWVic2QqIHwga2ZyZWVic2QqKSBnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBNYWMgT1MgWCA+PSAxMC4zLgorICAgICAgICAgICBkYXJ3aW5bMS02XS4qKSAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGU9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIGRhcndpbiopICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBIUC1VWCA+PSAxMS4KKyAgICAgICAgICAgaHB1eFs3LTldKiB8IGhwdXgxMCopIGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlPSJndWVzc2luZyBubyI7OworICAgICAgICAgICBocHV4KikgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGU9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gTmV0QlNEID49IDMuCisgICAgICAgICAgIG5ldGJzZFsxLTJdKiB8IG5ldGJzZGVsZlsxLTJdKiB8IG5ldGJzZGFvdXRbMS0yXSogfCBuZXRic2Rjb2ZmWzEtMl0qKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGU9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIG5ldGJzZCopICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBCZU9TLgorICAgICAgICAgICBiZW9zKikgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGU9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiB3ZSBkb24ndCBrbm93LCBhc3N1bWUgdGhlIHdvcnN0LgorICAgICAgICAgICAqKSAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGU9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICBlc2FjCitjaGFuZ2VxdW90ZShbLF0pZG5sCisgICAgICAgIF0pCisgICAgXSkKK10pCisKK2RubCBUZXN0IHdoZXRoZXIgdGhlICpwcmludGYgZmFtaWx5IG9mIGZ1bmN0aW9ucyBzdXBwb3J0cyBpbmZpbml0ZSBhbmQgTmFOCitkbmwgJ2xvbmcgZG91YmxlJyBhcmd1bWVudHMgaW4gdGhlICVmLCAlZSwgJWcgZGlyZWN0aXZlcy4gKElTTyBDOTksIFBPU0lYOjIwMDEpCitkbmwgUmVzdWx0IGlzIGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlX2xvbmdfZG91YmxlLgorCitBQ19ERUZVTihbZ2xfUFJJTlRGX0lORklOSVRFX0xPTkdfRE9VQkxFXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX0xPTkdfRE9VQkxFXSkKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCisgIEFDX1JFUVVJUkUoW2dsX0JJR0VORElBTl0pCisgIEFDX1JFUVVJUkUoW2dsX0xPTkdfRE9VQkxFX1ZTX0RPVUJMRV0pCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkgZG5sIGZvciBjcm9zcy1jb21waWxlcworICBkbmwgVGhlIHVzZXIgY2FuIHNldCBvciB1bnNldCB0aGUgdmFyaWFibGUgZ2xfcHJpbnRmX3NhZmUgdG8gaW5kaWNhdGUKKyAgZG5sIHRoYXQgaGUgd2lzaGVzIGEgc2FmZSBoYW5kbGluZyBvZiBub24tSUVFRS03NTQgJ2xvbmcgZG91YmxlJyB2YWx1ZXMuCisgIGlmIHRlc3QgLW4gIiRnbF9wcmludGZfc2FmZSI7IHRoZW4KKyAgICBBQ19ERUZJTkUoW0NIRUNLX1BSSU5URl9TQUZFXSwgWzFdLAorICAgICAgW0RlZmluZSBpZiB5b3Ugd2lzaCAqcHJpbnRmKCkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBhIHNhZmUgaGFuZGxpbmcgb2YKKyAgICAgICBub24tSUVFRS03NTQgJ2xvbmcgZG91YmxlJyB2YWx1ZXMuXSkKKyAgZmkKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2xvbmdfZG91YmxlIiBpbgorICAgICp5ZXMpCisgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBwcmludGYgc3VwcG9ydHMgaW5maW5pdGUgJ2xvbmcgZG91YmxlJyBhcmd1bWVudHNdLAorICAgICAgICBbZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGVfbG9uZ19kb3VibGVdLAorICAgICAgICBbCisgICAgICAgICAgQUNfUlVOX0lGRUxTRSgKKyAgICAgICAgICAgIFtBQ19MQU5HX1NPVVJDRShbWworXUdMX05PQ1JBU0hbCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorc3RhdGljIGludAorc3RyaXNuYW4gKGNvbnN0IGNoYXIgKnN0cmluZywgc2l6ZV90IHN0YXJ0X2luZGV4LCBzaXplX3QgZW5kX2luZGV4KQoreworICBpZiAoc3RhcnRfaW5kZXggPCBlbmRfaW5kZXgpCisgICAgeworICAgICAgaWYgKHN0cmluZ1tzdGFydF9pbmRleF0gPT0gJy0nKQorICAgICAgICBzdGFydF9pbmRleCsrOworICAgICAgaWYgKHN0YXJ0X2luZGV4ICsgMyA8PSBlbmRfaW5kZXgKKyAgICAgICAgICAmJiBtZW1jbXAgKHN0cmluZyArIHN0YXJ0X2luZGV4LCAibmFuIiwgMykgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIHN0YXJ0X2luZGV4ICs9IDM7CisgICAgICAgICAgaWYgKHN0YXJ0X2luZGV4ID09IGVuZF9pbmRleAorICAgICAgICAgICAgICB8fCAoc3RyaW5nW3N0YXJ0X2luZGV4XSA9PSAnKCcgJiYgc3RyaW5nW2VuZF9pbmRleCAtIDFdID09ICcpJykpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKyAgcmV0dXJuIDA7Cit9CitzdGF0aWMgY2hhciBidWZbMTAwMDBdOworc3RhdGljIGxvbmcgZG91YmxlIHplcm9MID0gMC4wTDsKK2ludCBtYWluICgpCit7CisgIGludCByZXN1bHQgPSAwOworICBub2NyYXNoX2luaXQoKTsKKyAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZiIsIDEuMEwgLyB6ZXJvTCkgPCAwCisgICAgICB8fCAoc3RyY21wIChidWYsICJpbmYiKSAhPSAwICYmIHN0cmNtcCAoYnVmLCAiaW5maW5pdHkiKSAhPSAwKSkKKyAgICByZXN1bHQgfD0gMTsKKyAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZiIsIC0xLjBMIC8gemVyb0wpIDwgMAorICAgICAgfHwgKHN0cmNtcCAoYnVmLCAiLWluZiIpICE9IDAgJiYgc3RyY21wIChidWYsICItaW5maW5pdHkiKSAhPSAwKSkKKyAgICByZXN1bHQgfD0gMTsKKyAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZiIsIHplcm9MIC8gemVyb0wpIDwgMAorICAgICAgfHwgIXN0cmlzbmFuIChidWYsIDAsIHN0cmxlbiAoYnVmKSkpCisgICAgcmVzdWx0IHw9IDE7CisgIGlmIChzcHJpbnRmIChidWYsICIlTGUiLCAxLjBMIC8gemVyb0wpIDwgMAorICAgICAgfHwgKHN0cmNtcCAoYnVmLCAiaW5mIikgIT0gMCAmJiBzdHJjbXAgKGJ1ZiwgImluZmluaXR5IikgIT0gMCkpCisgICAgcmVzdWx0IHw9IDE7CisgIGlmIChzcHJpbnRmIChidWYsICIlTGUiLCAtMS4wTCAvIHplcm9MKSA8IDAKKyAgICAgIHx8IChzdHJjbXAgKGJ1ZiwgIi1pbmYiKSAhPSAwICYmIHN0cmNtcCAoYnVmLCAiLWluZmluaXR5IikgIT0gMCkpCisgICAgcmVzdWx0IHw9IDE7CisgIGlmIChzcHJpbnRmIChidWYsICIlTGUiLCB6ZXJvTCAvIHplcm9MKSA8IDAKKyAgICAgIHx8ICFzdHJpc25hbiAoYnVmLCAwLCBzdHJsZW4gKGJ1ZikpKQorICAgIHJlc3VsdCB8PSAxOworICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxnIiwgMS4wTCAvIHplcm9MKSA8IDAKKyAgICAgIHx8IChzdHJjbXAgKGJ1ZiwgImluZiIpICE9IDAgJiYgc3RyY21wIChidWYsICJpbmZpbml0eSIpICE9IDApKQorICAgIHJlc3VsdCB8PSAxOworICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxnIiwgLTEuMEwgLyB6ZXJvTCkgPCAwCisgICAgICB8fCAoc3RyY21wIChidWYsICItaW5mIikgIT0gMCAmJiBzdHJjbXAgKGJ1ZiwgIi1pbmZpbml0eSIpICE9IDApKQorICAgIHJlc3VsdCB8PSAxOworICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxnIiwgemVyb0wgLyB6ZXJvTCkgPCAwCisgICAgICB8fCAhc3RyaXNuYW4gKGJ1ZiwgMCwgc3RybGVuIChidWYpKSkKKyAgICByZXN1bHQgfD0gMTsKKyNpZiBDSEVDS19QUklOVEZfU0FGRSAmJiAoKGRlZmluZWQgX19pYTY0ICYmIExEQkxfTUFOVF9ESUcgPT0gNjQpIHx8IChkZWZpbmVkIF9feDg2XzY0X18gfHwgZGVmaW5lZCBfX2FtZDY0X18pIHx8IChkZWZpbmVkIF9faTM4NiB8fCBkZWZpbmVkIF9faTM4Nl9fIHx8IGRlZmluZWQgX0kzODYgfHwgZGVmaW5lZCBfTV9JWDg2IHx8IGRlZmluZWQgX1g4Nl8pKSAmJiAhSEFWRV9TQU1FX0xPTkdfRE9VQkxFX0FTX0RPVUJMRQorLyogUmVwcmVzZW50YXRpb24gb2YgYW4gODAtYml0ICdsb25nIGRvdWJsZScgYXMgYW4gaW5pdGlhbGl6ZXIgZm9yIGEgc2VxdWVuY2UKKyAgIG9mICd1bnNpZ25lZCBpbnQnIHdvcmRzLiAgKi8KKyMgaWZkZWYgV09SRFNfQklHRU5ESUFOCisjICBkZWZpbmUgTERCTDgwX1dPUkRTKGV4cG9uZW50LG1hbnRoaSxtYW50bG8pIFwKKyAgICAgeyAoKHVuc2lnbmVkIGludCkgKGV4cG9uZW50KSA8PCAxNikgfCAoKHVuc2lnbmVkIGludCkgKG1hbnRoaSkgPj4gMTYpLCBcCisgICAgICAgKCh1bnNpZ25lZCBpbnQpIChtYW50aGkpIDw8IDE2KSB8ICh1bnNpZ25lZCBpbnQpIChtYW50bG8pID4+IDE2KSwgICAgXAorICAgICAgICh1bnNpZ25lZCBpbnQpIChtYW50bG8pIDw8IDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfQorIyBlbHNlCisjICBkZWZpbmUgTERCTDgwX1dPUkRTKGV4cG9uZW50LG1hbnRoaSxtYW50bG8pIFwKKyAgICAgeyBtYW50bG8sIG1hbnRoaSwgZXhwb25lbnQgfQorIyBlbmRpZgorICB7IC8qIFF1aWV0IE5hTi4gICovCisgICAgc3RhdGljIHVuaW9uIHsgdW5zaWduZWQgaW50IHdvcmRbNF07IGxvbmcgZG91YmxlIHZhbHVlOyB9IHggPQorICAgICAgeyBMREJMODBfV09SRFMgKDB4RkZGRiwgMHhDMzMzMzMzMywgMHgwMDAwMDAwMCkgfTsKKyAgICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxmIiwgeC52YWx1ZSkgPCAwCisgICAgICAgIHx8ICFzdHJpc25hbiAoYnVmLCAwLCBzdHJsZW4gKGJ1ZikpKQorICAgICAgcmVzdWx0IHw9IDI7CisgICAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZSIsIHgudmFsdWUpIDwgMAorICAgICAgICB8fCAhc3RyaXNuYW4gKGJ1ZiwgMCwgc3RybGVuIChidWYpKSkKKyAgICAgIHJlc3VsdCB8PSAyOworICAgIGlmIChzcHJpbnRmIChidWYsICIlTGciLCB4LnZhbHVlKSA8IDAKKyAgICAgICAgfHwgIXN0cmlzbmFuIChidWYsIDAsIHN0cmxlbiAoYnVmKSkpCisgICAgICByZXN1bHQgfD0gMjsKKyAgfQorICB7CisgICAgLyogU2lnbmFsbGluZyBOYU4uICAqLworICAgIHN0YXRpYyB1bmlvbiB7IHVuc2lnbmVkIGludCB3b3JkWzRdOyBsb25nIGRvdWJsZSB2YWx1ZTsgfSB4ID0KKyAgICAgIHsgTERCTDgwX1dPUkRTICgweEZGRkYsIDB4ODMzMzMzMzMsIDB4MDAwMDAwMDApIH07CisgICAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZiIsIHgudmFsdWUpIDwgMAorICAgICAgICB8fCAhc3RyaXNuYW4gKGJ1ZiwgMCwgc3RybGVuIChidWYpKSkKKyAgICAgIHJlc3VsdCB8PSAyOworICAgIGlmIChzcHJpbnRmIChidWYsICIlTGUiLCB4LnZhbHVlKSA8IDAKKyAgICAgICAgfHwgIXN0cmlzbmFuIChidWYsIDAsIHN0cmxlbiAoYnVmKSkpCisgICAgICByZXN1bHQgfD0gMjsKKyAgICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxnIiwgeC52YWx1ZSkgPCAwCisgICAgICAgIHx8ICFzdHJpc25hbiAoYnVmLCAwLCBzdHJsZW4gKGJ1ZikpKQorICAgICAgcmVzdWx0IHw9IDI7CisgIH0KKyAgeyAvKiBQc2V1ZG8tTmFOLiAgKi8KKyAgICBzdGF0aWMgdW5pb24geyB1bnNpZ25lZCBpbnQgd29yZFs0XTsgbG9uZyBkb3VibGUgdmFsdWU7IH0geCA9CisgICAgICB7IExEQkw4MF9XT1JEUyAoMHhGRkZGLCAweDQwMDAwMDAxLCAweDAwMDAwMDAwKSB9OworICAgIGlmIChzcHJpbnRmIChidWYsICIlTGYiLCB4LnZhbHVlKSA8IDAKKyAgICAgICAgfHwgIXN0cmlzbmFuIChidWYsIDAsIHN0cmxlbiAoYnVmKSkpCisgICAgICByZXN1bHQgfD0gNDsKKyAgICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxlIiwgeC52YWx1ZSkgPCAwCisgICAgICAgIHx8ICFzdHJpc25hbiAoYnVmLCAwLCBzdHJsZW4gKGJ1ZikpKQorICAgICAgcmVzdWx0IHw9IDQ7CisgICAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZyIsIHgudmFsdWUpIDwgMAorICAgICAgICB8fCAhc3RyaXNuYW4gKGJ1ZiwgMCwgc3RybGVuIChidWYpKSkKKyAgICAgIHJlc3VsdCB8PSA0OworICB9CisgIHsgLyogUHNldWRvLUluZmluaXR5LiAgKi8KKyAgICBzdGF0aWMgdW5pb24geyB1bnNpZ25lZCBpbnQgd29yZFs0XTsgbG9uZyBkb3VibGUgdmFsdWU7IH0geCA9CisgICAgICB7IExEQkw4MF9XT1JEUyAoMHhGRkZGLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwKSB9OworICAgIGlmIChzcHJpbnRmIChidWYsICIlTGYiLCB4LnZhbHVlKSA8IDAKKyAgICAgICAgfHwgIXN0cmlzbmFuIChidWYsIDAsIHN0cmxlbiAoYnVmKSkpCisgICAgICByZXN1bHQgfD0gODsKKyAgICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxlIiwgeC52YWx1ZSkgPCAwCisgICAgICAgIHx8ICFzdHJpc25hbiAoYnVmLCAwLCBzdHJsZW4gKGJ1ZikpKQorICAgICAgcmVzdWx0IHw9IDg7CisgICAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZyIsIHgudmFsdWUpIDwgMAorICAgICAgICB8fCAhc3RyaXNuYW4gKGJ1ZiwgMCwgc3RybGVuIChidWYpKSkKKyAgICAgIHJlc3VsdCB8PSA4OworICB9CisgIHsgLyogUHNldWRvLVplcm8uICAqLworICAgIHN0YXRpYyB1bmlvbiB7IHVuc2lnbmVkIGludCB3b3JkWzRdOyBsb25nIGRvdWJsZSB2YWx1ZTsgfSB4ID0KKyAgICAgIHsgTERCTDgwX1dPUkRTICgweDQwMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDApIH07CisgICAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZiIsIHgudmFsdWUpIDwgMAorICAgICAgICB8fCAhc3RyaXNuYW4gKGJ1ZiwgMCwgc3RybGVuIChidWYpKSkKKyAgICAgIHJlc3VsdCB8PSAxNjsKKyAgICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxlIiwgeC52YWx1ZSkgPCAwCisgICAgICAgIHx8ICFzdHJpc25hbiAoYnVmLCAwLCBzdHJsZW4gKGJ1ZikpKQorICAgICAgcmVzdWx0IHw9IDE2OworICAgIGlmIChzcHJpbnRmIChidWYsICIlTGciLCB4LnZhbHVlKSA8IDAKKyAgICAgICAgfHwgIXN0cmlzbmFuIChidWYsIDAsIHN0cmxlbiAoYnVmKSkpCisgICAgICByZXN1bHQgfD0gMTY7CisgIH0KKyAgeyAvKiBVbm5vcm1hbGl6ZWQgbnVtYmVyLiAgKi8KKyAgICBzdGF0aWMgdW5pb24geyB1bnNpZ25lZCBpbnQgd29yZFs0XTsgbG9uZyBkb3VibGUgdmFsdWU7IH0geCA9CisgICAgICB7IExEQkw4MF9XT1JEUyAoMHg0MDAwLCAweDYzMzMzMzMzLCAweDAwMDAwMDAwKSB9OworICAgIGlmIChzcHJpbnRmIChidWYsICIlTGYiLCB4LnZhbHVlKSA8IDAKKyAgICAgICAgfHwgIXN0cmlzbmFuIChidWYsIDAsIHN0cmxlbiAoYnVmKSkpCisgICAgICByZXN1bHQgfD0gMzI7CisgICAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZSIsIHgudmFsdWUpIDwgMAorICAgICAgICB8fCAhc3RyaXNuYW4gKGJ1ZiwgMCwgc3RybGVuIChidWYpKSkKKyAgICAgIHJlc3VsdCB8PSAzMjsKKyAgICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxnIiwgeC52YWx1ZSkgPCAwCisgICAgICAgIHx8ICFzdHJpc25hbiAoYnVmLCAwLCBzdHJsZW4gKGJ1ZikpKQorICAgICAgcmVzdWx0IHw9IDMyOworICB9CisgIHsgLyogUHNldWRvLURlbm9ybWFsLiAgKi8KKyAgICBzdGF0aWMgdW5pb24geyB1bnNpZ25lZCBpbnQgd29yZFs0XTsgbG9uZyBkb3VibGUgdmFsdWU7IH0geCA9CisgICAgICB7IExEQkw4MF9XT1JEUyAoMHgwMDAwLCAweDgzMzMzMzMzLCAweDAwMDAwMDAwKSB9OworICAgIGlmIChzcHJpbnRmIChidWYsICIlTGYiLCB4LnZhbHVlKSA8IDAKKyAgICAgICAgfHwgIXN0cmlzbmFuIChidWYsIDAsIHN0cmxlbiAoYnVmKSkpCisgICAgICByZXN1bHQgfD0gNjQ7CisgICAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZSIsIHgudmFsdWUpIDwgMAorICAgICAgICB8fCAhc3RyaXNuYW4gKGJ1ZiwgMCwgc3RybGVuIChidWYpKSkKKyAgICAgIHJlc3VsdCB8PSA2NDsKKyAgICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxnIiwgeC52YWx1ZSkgPCAwCisgICAgICAgIHx8ICFzdHJpc25hbiAoYnVmLCAwLCBzdHJsZW4gKGJ1ZikpKQorICAgICAgcmVzdWx0IHw9IDY0OworICB9CisjZW5kaWYKKyAgcmV0dXJuIHJlc3VsdDsKK31dXSldLAorICAgICAgICAgICAgW2dsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlX2xvbmdfZG91YmxlPXllc10sCisgICAgICAgICAgICBbZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGVfbG9uZ19kb3VibGU9bm9dLAorICAgICAgICAgICAgWworY2hhbmdlcXVvdGUoLClkbmwKKyAgICAgICAgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyBubyBvbiBpYTY0LCB4ODZfNjQsIGkzODYuCisgICAgICAgICAgICAgICBpYTY0IHwgeDg2XzY0IHwgaSo4NikgZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGVfbG9uZ19kb3VibGU9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gZ2xpYmMgc3lzdGVtcy4KKyAgICAgICAgICAgICAgICAgICAqLWdudSopICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGVfbG9uZ19kb3VibGU9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBGcmVlQlNEID49IDYuCisgICAgICAgICAgICAgICAgICAgZnJlZWJzZFsxLTVdKikgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlX2xvbmdfZG91YmxlPSJndWVzc2luZyBubyI7OworICAgICAgICAgICAgICAgICAgIGZyZWVic2QqIHwga2ZyZWVic2QqKSBnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZV9sb25nX2RvdWJsZT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIEhQLVVYID49IDExLgorICAgICAgICAgICAgICAgICAgIGhwdXhbNy05XSogfCBocHV4MTAqKSBnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZV9sb25nX2RvdWJsZT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgICAgICAgICBocHV4KikgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGVfbG9uZ19kb3VibGU9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIHdlIGRvbid0IGtub3csIGFzc3VtZSB0aGUgd29yc3QuCisgICAgICAgICAgICAgICAgICAgKikgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlX2xvbmdfZG91YmxlPSJndWVzc2luZyBubyI7OworICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgZXNhYworY2hhbmdlcXVvdGUoWyxdKWRubAorICAgICAgICAgICAgXSkKKyAgICAgICAgXSkKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlX2xvbmdfZG91YmxlPSJpcnJlbGV2YW50IgorICAgICAgOzsKKyAgZXNhYworXSkKKworZG5sIFRlc3Qgd2hldGhlciB0aGUgKnByaW50ZiBmYW1pbHkgb2YgZnVuY3Rpb25zIHN1cHBvcnRzIHRoZSAnYScgYW5kICdBJworZG5sIGNvbnZlcnNpb24gc3BlY2lmaWVyIGZvciBoZXhhZGVjaW1hbCBvdXRwdXQgb2YgZmxvYXRpbmctcG9pbnQgbnVtYmVycy4KK2RubCAoSVNPIEM5OSwgUE9TSVg6MjAwMSkKK2RubCBSZXN1bHQgaXMgZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2EuCisKK0FDX0RFRlVOKFtnbF9QUklOVEZfRElSRUNUSVZFX0FdLAorWworICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKSBkbmwgZm9yIGNyb3NzLWNvbXBpbGVzCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHByaW50ZiBzdXBwb3J0cyB0aGUgJ2EnIGFuZCAnQScgZGlyZWN0aXZlc10sCisgICAgW2dsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9hXSwKKyAgICBbCisgICAgICBBQ19SVU5fSUZFTFNFKAorICAgICAgICBbQUNfTEFOR19TT1VSQ0UoW1sKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorc3RhdGljIGNoYXIgYnVmWzEwMF07CitzdGF0aWMgZG91YmxlIHplcm8gPSAwLjA7CitpbnQgbWFpbiAoKQoreworICBpbnQgcmVzdWx0ID0gMDsKKyAgaWYgKHNwcmludGYgKGJ1ZiwgIiVhICVkIiwgMy4xNDE2MDE1NjI1LCAzMywgNDQsIDU1KSA8IDAKKyAgICAgIHx8IChzdHJjbXAgKGJ1ZiwgIjB4MS45MjJwKzEgMzMiKSAhPSAwCisgICAgICAgICAgJiYgc3RyY21wIChidWYsICIweDMuMjQ0cCswIDMzIikgIT0gMAorICAgICAgICAgICYmIHN0cmNtcCAoYnVmLCAiMHg2LjQ4OHAtMSAzMyIpICE9IDAKKyAgICAgICAgICAmJiBzdHJjbXAgKGJ1ZiwgIjB4Yy45MXAtMiAzMyIpICE9IDApKQorICAgIHJlc3VsdCB8PSAxOworICBpZiAoc3ByaW50ZiAoYnVmLCAiJUEgJWQiLCAtMy4xNDE2MDE1NjI1LCAzMywgNDQsIDU1KSA8IDAKKyAgICAgIHx8IChzdHJjbXAgKGJ1ZiwgIi0wWDEuOTIyUCsxIDMzIikgIT0gMAorICAgICAgICAgICYmIHN0cmNtcCAoYnVmLCAiLTBYMy4yNDRQKzAgMzMiKSAhPSAwCisgICAgICAgICAgJiYgc3RyY21wIChidWYsICItMFg2LjQ4OFAtMSAzMyIpICE9IDAKKyAgICAgICAgICAmJiBzdHJjbXAgKGJ1ZiwgIi0wWEMuOTFQLTIgMzMiKSAhPSAwKSkKKyAgICByZXN1bHQgfD0gMjsKKyAgLyogVGhpcyBjYXRjaGVzIGEgRnJlZUJTRCA2LjEgYnVnOiBpdCBkb2Vzbid0IHJvdW5kLiAgKi8KKyAgaWYgKHNwcmludGYgKGJ1ZiwgIiUuMmEgJWQiLCAxLjUxLCAzMywgNDQsIDU1KSA8IDAKKyAgICAgIHx8IChzdHJjbXAgKGJ1ZiwgIjB4MS44M3ArMCAzMyIpICE9IDAKKyAgICAgICAgICAmJiBzdHJjbXAgKGJ1ZiwgIjB4My4wNXAtMSAzMyIpICE9IDAKKyAgICAgICAgICAmJiBzdHJjbXAgKGJ1ZiwgIjB4Ni4wYXAtMiAzMyIpICE9IDAKKyAgICAgICAgICAmJiBzdHJjbXAgKGJ1ZiwgIjB4Yy4xNHAtMyAzMyIpICE9IDApKQorICAgIHJlc3VsdCB8PSA0OworICAvKiBUaGlzIGNhdGNoZXMgYSBGcmVlQlNEIDYuMSBidWcuICBTZWUKKyAgICAgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctZ251bGliLzIwMDctMDQvbXNnMDAxMDcuaHRtbD4gKi8KKyAgaWYgKHNwcmludGYgKGJ1ZiwgIiUwMTBhICVkIiwgMS4wIC8gemVybywgMzMsIDQ0LCA1NSkgPCAwCisgICAgICB8fCBidWZbMF0gPT0gJzAnKQorICAgIHJlc3VsdCB8PSA4OworICAvKiBUaGlzIGNhdGNoZXMgYSBNYWMgT1MgWCAxMC4zLjkgKERhcndpbiA3LjkpIGJ1Zy4gICovCisgIGlmIChzcHJpbnRmIChidWYsICIlLjFhIiwgMS45OTkpIDwgMAorICAgICAgfHwgKHN0cmNtcCAoYnVmLCAiMHgxLjBwKzEiKSAhPSAwCisgICAgICAgICAgJiYgc3RyY21wIChidWYsICIweDIuMHArMCIpICE9IDAKKyAgICAgICAgICAmJiBzdHJjbXAgKGJ1ZiwgIjB4NC4wcC0xIikgIT0gMAorICAgICAgICAgICYmIHN0cmNtcCAoYnVmLCAiMHg4LjBwLTIiKSAhPSAwKSkKKyAgICByZXN1bHQgfD0gMTY7CisgIC8qIFRoaXMgY2F0Y2hlcyB0aGUgc2FtZSBNYWMgT1MgWCAxMC4zLjkgKERhcndpbiA3LjkpIGJ1ZyBhbmQgYWxzbyBhCisgICAgIGdsaWJjIDIuNCBidWcgPGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MjkwOD4uICAqLworICBpZiAoc3ByaW50ZiAoYnVmLCAiJS4xTGEiLCAxLjk5OUwpIDwgMAorICAgICAgfHwgKHN0cmNtcCAoYnVmLCAiMHgxLjBwKzEiKSAhPSAwCisgICAgICAgICAgJiYgc3RyY21wIChidWYsICIweDIuMHArMCIpICE9IDAKKyAgICAgICAgICAmJiBzdHJjbXAgKGJ1ZiwgIjB4NC4wcC0xIikgIT0gMAorICAgICAgICAgICYmIHN0cmNtcCAoYnVmLCAiMHg4LjBwLTIiKSAhPSAwKSkKKyAgICByZXN1bHQgfD0gMzI7CisgIHJldHVybiByZXN1bHQ7Cit9XV0pXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9hPXllc10sCisgICAgICAgIFtnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfYT1ub10sCisgICAgICAgIFsKKyAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gZ2xpYmMgPj0gMi41IHN5c3RlbXMuCisgICAgICAgICAgICotZ251KikKKyAgICAgICAgICAgICBBQ19FR1JFUF9DUFAoW0JaMjkwOF0sIFsKKyAgICAgICAgICAgICAgICNpbmNsdWRlIDxmZWF0dXJlcy5oPgorICAgICAgICAgICAgICAgI2lmZGVmIF9fR05VX0xJQlJBUllfXworICAgICAgICAgICAgICAgICNpZiAoKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSA1KSB8fCAoX19HTElCQ19fID4gMikpICYmICFkZWZpbmVkIF9fVUNMSUJDX18KKyAgICAgICAgICAgICAgICAgQloyOTA4CisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICBbZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2E9Imd1ZXNzaW5nIHllcyJdLAorICAgICAgICAgICAgICAgW2dsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9hPSJndWVzc2luZyBubyJdKQorICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIHdlIGRvbid0IGtub3csIGFzc3VtZSB0aGUgd29yc3QuCisgICAgICAgICAgICopICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfYT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgIGVzYWMKKyAgICAgICAgXSkKKyAgICBdKQorXSkKKworZG5sIFRlc3Qgd2hldGhlciB0aGUgKnByaW50ZiBmYW1pbHkgb2YgZnVuY3Rpb25zIHN1cHBvcnRzIHRoZSAlRiBmb3JtYXQKK2RubCBkaXJlY3RpdmUuIChJU08gQzk5LCBQT1NJWDoyMDAxKQorZG5sIFJlc3VsdCBpcyBnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfZi4KKworQUNfREVGVU4oW2dsX1BSSU5URl9ESVJFQ1RJVkVfRl0sCitbCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pIGRubCBmb3IgY3Jvc3MtY29tcGlsZXMKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgcHJpbnRmIHN1cHBvcnRzIHRoZSAnRicgZGlyZWN0aXZlXSwKKyAgICBbZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2ZdLAorICAgIFsKKyAgICAgIEFDX1JVTl9JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CitzdGF0aWMgY2hhciBidWZbMTAwXTsKK3N0YXRpYyBkb3VibGUgemVybyA9IDAuMDsKK2ludCBtYWluICgpCit7CisgIGludCByZXN1bHQgPSAwOworICBpZiAoc3ByaW50ZiAoYnVmLCAiJUYgJWQiLCAxMjM0NTY3LjAsIDMzLCA0NCwgNTUpIDwgMAorICAgICAgfHwgc3RyY21wIChidWYsICIxMjM0NTY3LjAwMDAwMCAzMyIpICE9IDApCisgICAgcmVzdWx0IHw9IDE7CisgIGlmIChzcHJpbnRmIChidWYsICIlRiIsIDEuMCAvIHplcm8pIDwgMAorICAgICAgfHwgKHN0cmNtcCAoYnVmLCAiSU5GIikgIT0gMCAmJiBzdHJjbXAgKGJ1ZiwgIklORklOSVRZIikgIT0gMCkpCisgICAgcmVzdWx0IHw9IDI7CisgIC8qIFRoaXMgY2F0Y2hlcyBhIEN5Z3dpbiAxLjUueCBidWcuICAqLworICBpZiAoc3ByaW50ZiAoYnVmLCAiJS5GIiwgMTIzNC4wKSA8IDAKKyAgICAgIHx8IHN0cmNtcCAoYnVmLCAiMTIzNCIpICE9IDApCisgICAgcmVzdWx0IHw9IDQ7CisgIHJldHVybiByZXN1bHQ7Cit9XV0pXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9mPXllc10sCisgICAgICAgIFtnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfZj1ub10sCisgICAgICAgIFsKK2NoYW5nZXF1b3RlKCwpZG5sCisgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIGdsaWJjIHN5c3RlbXMuCisgICAgICAgICAgICotZ251KikgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfZj0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBGcmVlQlNEID49IDYuCisgICAgICAgICAgIGZyZWVic2RbMS01XSopICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfZj0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgZnJlZWJzZCogfCBrZnJlZWJzZCopIGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9mPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIE1hYyBPUyBYID49IDEwLjMuCisgICAgICAgICAgIGRhcndpblsxLTZdLiopICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfZj0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgZGFyd2luKikgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9mPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIFNvbGFyaXMgPj0gMi4xMC4KKyAgICAgICAgICAgc29sYXJpczIuWzEtOV1bMC05XSopIGdsX2N2X2Z1bmNfcHJpbnRmX3NpemVzX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgIHNvbGFyaXMqKSAgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9zaXplc19jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIHdlIGRvbid0IGtub3csIGFzc3VtZSB0aGUgd29yc3QuCisgICAgICAgICAgICopICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfZj0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgIGVzYWMKK2NoYW5nZXF1b3RlKFssXSlkbmwKKyAgICAgICAgXSkKKyAgICBdKQorXSkKKworZG5sIFRlc3Qgd2hldGhlciB0aGUgKnByaW50ZiBmYW1pbHkgb2YgZnVuY3Rpb25zIHN1cHBvcnRzIHRoZSAlbiBmb3JtYXQKK2RubCBkaXJlY3RpdmUuIChJU08gQzk5LCBQT1NJWDoyMDAxKQorZG5sIFJlc3VsdCBpcyBnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbi4KKworQUNfREVGVU4oW2dsX1BSSU5URl9ESVJFQ1RJVkVfTl0sCitbCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pIGRubCBmb3IgY3Jvc3MtY29tcGlsZXMKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgcHJpbnRmIHN1cHBvcnRzIHRoZSAnbicgZGlyZWN0aXZlXSwKKyAgICBbZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX25dLAorICAgIFsKKyAgICAgIEFDX1JVTl9JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWZkZWYgX01TQ19WRVIKKy8qIFNlZSBwYWdlIGFib3V0ICJQYXJhbWV0ZXIgVmFsaWRhdGlvbiIgb24gbXNkbi5taWNyb3NvZnQuY29tLiAgKi8KK3N0YXRpYyB2b2lkIGNkZWNsCitpbnZhbGlkX3BhcmFtZXRlcl9oYW5kbGVyIChjb25zdCB3Y2hhcl90ICpleHByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICpmaWxlLCB1bnNpZ25lZCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnRwdHJfdCBkdW1teSkKK3sKKyAgZXhpdCAoMSk7Cit9CisjZW5kaWYKK3N0YXRpYyBjaGFyIGZtdHN0cmluZ1sxMF07CitzdGF0aWMgY2hhciBidWZbMTAwXTsKK2ludCBtYWluICgpCit7CisgIGludCBjb3VudCA9IC0xOworI2lmZGVmIF9NU0NfVkVSCisgIF9zZXRfaW52YWxpZF9wYXJhbWV0ZXJfaGFuZGxlciAoaW52YWxpZF9wYXJhbWV0ZXJfaGFuZGxlcik7CisjZW5kaWYKKyAgLyogQ29weSB0aGUgZm9ybWF0IHN0cmluZy4gIFNvbWUgc3lzdGVtcyAoZ2xpYmMgd2l0aCBfRk9SVElGWV9TT1VSQ0U9MikKKyAgICAgc3VwcG9ydCAlbiBpbiBmb3JtYXQgc3RyaW5ncyBpbiByZWFkLW9ubHkgbWVtb3J5IGJ1dCBub3QgaW4gd3JpdGFibGUKKyAgICAgbWVtb3J5LiAgKi8KKyAgc3RyY3B5IChmbXRzdHJpbmcsICIlZCAlbiIpOworICBpZiAoc3ByaW50ZiAoYnVmLCBmbXRzdHJpbmcsIDEyMywgJmNvdW50LCAzMywgNDQsIDU1KSA8IDAKKyAgICAgIHx8IHN0cmNtcCAoYnVmLCAiMTIzICIpICE9IDAKKyAgICAgIHx8IGNvdW50ICE9IDQpCisgICAgcmV0dXJuIDE7CisgIHJldHVybiAwOworfV1dKV0sCisgICAgICAgIFtnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbj15ZXNdLAorICAgICAgICBbZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX249bm9dLAorICAgICAgICBbCitjaGFuZ2VxdW90ZSgsKWRubAorICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgIG1pbmd3KikgZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX249Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICopICAgICAgZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX249Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgZXNhYworY2hhbmdlcXVvdGUoWyxdKWRubAorICAgICAgICBdKQorICAgIF0pCitdKQorCitkbmwgVGVzdCB3aGV0aGVyIHRoZSAqcHJpbnRmIGZhbWlseSBvZiBmdW5jdGlvbnMgc3VwcG9ydHMgdGhlICVscyBmb3JtYXQKK2RubCBkaXJlY3RpdmUgYW5kIGluIHBhcnRpY3VsYXIsIHdoZW4gYSBwcmVjaXNpb24gaXMgc3BlY2lmaWVkLCB3aGV0aGVyCitkbmwgdGhlIGZ1bmN0aW9ucyBzdG9wIGNvbnZlcnRpbmcgdGhlIHdpZGUgc3RyaW5nIGFyZ3VtZW50IHdoZW4gdGhlIG51bWJlcgorZG5sIG9mIGJ5dGVzIHRoYXQgaGF2ZSBiZWVuIHByb2R1Y2VkIGJ5IHRoaXMgY29udmVyc2lvbiBlcXVhbHMgb3IgZXhjZWVkcworZG5sIHRoZSBwcmVjaXNpb24uCitkbmwgUmVzdWx0IGlzIGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9scy4KKworQUNfREVGVU4oW2dsX1BSSU5URl9ESVJFQ1RJVkVfTFNdLAorWworICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKSBkbmwgZm9yIGNyb3NzLWNvbXBpbGVzCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHByaW50ZiBzdXBwb3J0cyB0aGUgJ2xzJyBkaXJlY3RpdmVdLAorICAgIFtnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbHNdLAorICAgIFsKKyAgICAgIEFDX1JVTl9JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1NPVVJDRShbWworLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQorICAgPHdjaGFyLmg+LgorICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgoraW50IG1haW4gKCkKK3sKKyAgaW50IHJlc3VsdCA9IDA7CisgIGNoYXIgYnVmWzEwMF07CisgIC8qIFRlc3Qgd2hldGhlciAlbHMgd29ya3MgYXQgYWxsLgorICAgICBUaGlzIHRlc3QgZmFpbHMgb24gT3BlbkJTRCA0LjAsIElSSVggNi41LCBTb2xhcmlzIDIuNiwgSGFpa3UsIGJ1dCBub3Qgb24KKyAgICAgQ3lnd2luIDEuNS4gICovCisgIHsKKyAgICBzdGF0aWMgY29uc3Qgd2NoYXJfdCB3c3RyaW5nW10gPSB7ICdhJywgJ2InLCAnYycsIDAgfTsKKyAgICBidWZbMF0gPSAnXDAnOworICAgIGlmIChzcHJpbnRmIChidWYsICIlbHMiLCB3c3RyaW5nKSA8IDAKKyAgICAgICAgfHwgc3RyY21wIChidWYsICJhYmMiKSAhPSAwKQorICAgICAgcmVzdWx0IHw9IDE7CisgIH0KKyAgLyogVGhpcyB0ZXN0IGZhaWxzIG9uIElSSVggNi41LCBTb2xhcmlzIDIuNiwgQ3lnd2luIDEuNSwgSGFpa3UgKHdpdGggYW4KKyAgICAgYXNzZXJ0aW9uIGZhaWx1cmUgaW5zaWRlIGxpYmMpLCBidXQgbm90IG9uIE9wZW5CU0QgNC4wLiAgKi8KKyAgeworICAgIHN0YXRpYyBjb25zdCB3Y2hhcl90IHdzdHJpbmdbXSA9IHsgJ2EnLCAwIH07CisgICAgYnVmWzBdID0gJ1wwJzsKKyAgICBpZiAoc3ByaW50ZiAoYnVmLCAiJWxzIiwgd3N0cmluZykgPCAwCisgICAgICAgIHx8IHN0cmNtcCAoYnVmLCAiYSIpICE9IDApCisgICAgICByZXN1bHQgfD0gMjsKKyAgfQorICAvKiBUZXN0IHdoZXRoZXIgcHJlY2lzaW9ucyBpbiAlbHMgYXJlIHN1cHBvcnRlZCBhcyBzcGVjaWZpZWQgaW4gSVNPIEMgOTkKKyAgICAgc2VjdGlvbiA3LjE5LjYuMToKKyAgICAgICAiSWYgYSBwcmVjaXNpb24gaXMgc3BlY2lmaWVkLCBubyBtb3JlIHRoYW4gdGhhdCBtYW55IGJ5dGVzIGFyZSB3cml0dGVuCisgICAgICAgIChpbmNsdWRpbmcgc2hpZnQgc2VxdWVuY2VzLCBpZiBhbnkpLCBhbmQgdGhlIGFycmF5IHNoYWxsIGNvbnRhaW4gYQorICAgICAgICBudWxsIHdpZGUgY2hhcmFjdGVyIGlmLCB0byBlcXVhbCB0aGUgbXVsdGlieXRlIGNoYXJhY3RlciBzZXF1ZW5jZQorICAgICAgICBsZW5ndGggZ2l2ZW4gYnkgdGhlIHByZWNpc2lvbiwgdGhlIGZ1bmN0aW9uIHdvdWxkIG5lZWQgdG8gYWNjZXNzIGEKKyAgICAgICAgd2lkZSBjaGFyYWN0ZXIgb25lIHBhc3QgdGhlIGVuZCBvZiB0aGUgYXJyYXkuIgorICAgICBUaGlzIHRlc3QgZmFpbHMgb24gU29sYXJpcyAxMC4gICovCisgIHsKKyAgICBzdGF0aWMgY29uc3Qgd2NoYXJfdCB3c3RyaW5nW10gPSB7ICdhJywgJ2InLCAod2NoYXJfdCkgMHhmZGZkZmRmZCwgMCB9OworICAgIGJ1ZlswXSA9ICdcMCc7CisgICAgaWYgKHNwcmludGYgKGJ1ZiwgIiUuMmxzIiwgd3N0cmluZykgPCAwCisgICAgICAgIHx8IHN0cmNtcCAoYnVmLCAiYWIiKSAhPSAwKQorICAgICAgcmVzdWx0IHw9IDg7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK31dXSldLAorICAgICAgICBbZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2xzPXllc10sCisgICAgICAgIFtnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbHM9bm9dLAorICAgICAgICBbCitjaGFuZ2VxdW90ZSgsKWRubAorICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgIG9wZW5ic2QqKSAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2xzPSJndWVzc2luZyBubyI7OworICAgICAgICAgICBpcml4KikgICAgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9scz0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgc29sYXJpcyopICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbHM9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIGN5Z3dpbiopICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2xzPSJndWVzc2luZyBubyI7OworICAgICAgICAgICBiZW9zKiB8IGhhaWt1KikgIGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9scz0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgKikgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbHM9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgZXNhYworY2hhbmdlcXVvdGUoWyxdKWRubAorICAgICAgICBdKQorICAgIF0pCitdKQorCitkbmwgVGVzdCB3aGV0aGVyIHRoZSAqcHJpbnRmIGZhbWlseSBvZiBmdW5jdGlvbnMgc3VwcG9ydHMgUE9TSVgvWFNJIGZvcm1hdAorZG5sIHN0cmluZ3Mgd2l0aCBwb3NpdGlvbnMuIChQT1NJWDoyMDAxKQorZG5sIFJlc3VsdCBpcyBnbF9jdl9mdW5jX3ByaW50Zl9wb3NpdGlvbnMuCisKK0FDX0RFRlVOKFtnbF9QUklOVEZfUE9TSVRJT05TXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkgZG5sIGZvciBjcm9zcy1jb21waWxlcworICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBwcmludGYgc3VwcG9ydHMgUE9TSVgvWFNJIGZvcm1hdCBzdHJpbmdzIHdpdGggcG9zaXRpb25zXSwKKyAgICBbZ2xfY3ZfZnVuY19wcmludGZfcG9zaXRpb25zXSwKKyAgICBbCisgICAgICBBQ19SVU5fSUZFTFNFKAorICAgICAgICBbQUNfTEFOR19TT1VSQ0UoW1sKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorLyogVGhlIHN0cmluZyAiJTIkZCAlMSRkIiwgd2l0aCBkb2xsYXIgY2hhcmFjdGVycyBwcm90ZWN0ZWQgZnJvbSB0aGUgc2hlbGwncworICAgZG9sbGFyIGV4cGFuc2lvbiAocG9zc2libHkgYW4gYXV0b2NvbmYgYnVnKS4gICovCitzdGF0aWMgY2hhciBmb3JtYXRbXSA9IHsgJyUnLCAnMicsICckJywgJ2QnLCAnICcsICclJywgJzEnLCAnJCcsICdkJywgJ1wwJyB9Oworc3RhdGljIGNoYXIgYnVmWzEwMF07CitpbnQgbWFpbiAoKQoreworICBzcHJpbnRmIChidWYsIGZvcm1hdCwgMzMsIDU1KTsKKyAgcmV0dXJuIChzdHJjbXAgKGJ1ZiwgIjU1IDMzIikgIT0gMCk7Cit9XV0pXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfcHJpbnRmX3Bvc2l0aW9ucz15ZXNdLAorICAgICAgICBbZ2xfY3ZfZnVuY19wcmludGZfcG9zaXRpb25zPW5vXSwKKyAgICAgICAgWworY2hhbmdlcXVvdGUoLClkbmwKKyAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICBuZXRic2RbMS0zXSogfCBuZXRic2RlbGZbMS0zXSogfCBuZXRic2Rhb3V0WzEtM10qIHwgbmV0YnNkY29mZlsxLTNdKikKKyAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9wb3NpdGlvbnM9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIGJlb3MqKSAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfcG9zaXRpb25zPSJndWVzc2luZyBubyI7OworICAgICAgICAgICBtaW5ndyogfCBwdyopIGdsX2N2X2Z1bmNfcHJpbnRmX3Bvc2l0aW9ucz0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgKikgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9wb3NpdGlvbnM9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgZXNhYworY2hhbmdlcXVvdGUoWyxdKWRubAorICAgICAgICBdKQorICAgIF0pCitdKQorCitkbmwgVGVzdCB3aGV0aGVyIHRoZSAqcHJpbnRmIGZhbWlseSBvZiBmdW5jdGlvbnMgc3VwcG9ydHMgUE9TSVgvWFNJIGZvcm1hdAorZG5sIHN0cmluZ3Mgd2l0aCB0aGUgJyBmbGFnIGZvciBncm91cGluZyBvZiBkZWNpbWFsIGRpZ2l0cy4gKFBPU0lYOjIwMDEpCitkbmwgUmVzdWx0IGlzIGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfZ3JvdXBpbmcuCisKK0FDX0RFRlVOKFtnbF9QUklOVEZfRkxBR19HUk9VUElOR10sCitbCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pIGRubCBmb3IgY3Jvc3MtY29tcGlsZXMKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgcHJpbnRmIHN1cHBvcnRzIHRoZSBncm91cGluZyBmbGFnXSwKKyAgICBbZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19ncm91cGluZ10sCisgICAgWworICAgICAgQUNfUlVOX0lGRUxTRSgKKyAgICAgICAgW0FDX0xBTkdfU09VUkNFKFtbCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KK3N0YXRpYyBjaGFyIGJ1ZlsxMDBdOworaW50IG1haW4gKCkKK3sKKyAgaWYgKHNwcmludGYgKGJ1ZiwgIiUnZCAlZCIsIDEyMzQ1NjcsIDk5KSA8IDAKKyAgICAgIHx8IGJ1ZltzdHJsZW4gKGJ1ZikgLSAxXSAhPSAnOScpCisgICAgcmV0dXJuIDE7CisgIHJldHVybiAwOworfV1dKV0sCisgICAgICAgIFtnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2dyb3VwaW5nPXllc10sCisgICAgICAgIFtnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2dyb3VwaW5nPW5vXSwKKyAgICAgICAgWworY2hhbmdlcXVvdGUoLClkbmwKKyAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICBjeWd3aW4qKSAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfZ3JvdXBpbmc9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIG5ldGJzZCopICAgICAgZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19ncm91cGluZz0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgbWluZ3cqIHwgcHcqKSBnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2dyb3VwaW5nPSJndWVzc2luZyBubyI7OworICAgICAgICAgICAqKSAgICAgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfZ3JvdXBpbmc9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgZXNhYworY2hhbmdlcXVvdGUoWyxdKWRubAorICAgICAgICBdKQorICAgIF0pCitdKQorCitkbmwgVGVzdCB3aGV0aGVyIHRoZSAqcHJpbnRmIGZhbWlseSBvZiBmdW5jdGlvbnMgc3VwcG9ydHMgdGhlIC0gZmxhZyBjb3JyZWN0bHkuCitkbmwgKElTTyBDOTkuKSBTZWUKK2RubCA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1jb3JldXRpbHMvMjAwOC0wMi9tc2cwMDAzNS5odG1sPgorZG5sIFJlc3VsdCBpcyBnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2xlZnRhZGp1c3QuCisKK0FDX0RFRlVOKFtnbF9QUklOVEZfRkxBR19MRUZUQURKVVNUXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkgZG5sIGZvciBjcm9zcy1jb21waWxlcworICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBwcmludGYgc3VwcG9ydHMgdGhlIGxlZnQtYWRqdXN0IGZsYWcgY29ycmVjdGx5XSwKKyAgICBbZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19sZWZ0YWRqdXN0XSwKKyAgICBbCisgICAgICBBQ19SVU5fSUZFTFNFKAorICAgICAgICBbQUNfTEFOR19TT1VSQ0UoW1sKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorc3RhdGljIGNoYXIgYnVmWzEwMF07CitpbnQgbWFpbiAoKQoreworICAvKiBDaGVjayB0aGF0IGEgJy0nIGZsYWcgaXMgbm90IGFubmloaWxhdGVkIGJ5IGEgbmVnYXRpdmUgd2lkdGguICAqLworICBpZiAoc3ByaW50ZiAoYnVmLCAiYSUtKnNjIiwgLTMsICJiIikgPCAwCisgICAgICB8fCBzdHJjbXAgKGJ1ZiwgImFiICBjIikgIT0gMCkKKyAgICByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9XV0pXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfbGVmdGFkanVzdD15ZXNdLAorICAgICAgICBbZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19sZWZ0YWRqdXN0PW5vXSwKKyAgICAgICAgWworY2hhbmdlcXVvdGUoLClkbmwKKyAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBIUC1VWCAxMS4KKyAgICAgICAgICAgaHB1eDExKikgZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19sZWZ0YWRqdXN0PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyBubyBvbiBIUC1VWCAxMCBhbmQgb2xkZXIuCisgICAgICAgICAgIGhwdXgqKSAgIGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfbGVmdGFkanVzdD0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb3RoZXJ3aXNlLgorICAgICAgICAgICAqKSAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2xlZnRhZGp1c3Q9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgZXNhYworY2hhbmdlcXVvdGUoWyxdKWRubAorICAgICAgICBdKQorICAgIF0pCitdKQorCitkbmwgVGVzdCB3aGV0aGVyIHRoZSAqcHJpbnRmIGZhbWlseSBvZiBmdW5jdGlvbnMgc3VwcG9ydHMgcGFkZGluZyBvZiBub24tZmluaXRlCitkbmwgdmFsdWVzIHdpdGggdGhlIDAgZmxhZyBjb3JyZWN0bHkuIChJU08gQzk5ICsgVEMxICsgVEMyLikgU2VlCitkbmwgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctZ251bGliLzIwMDctMDQvbXNnMDAxMDcuaHRtbD4KK2RubCBSZXN1bHQgaXMgZ2xfY3ZfZnVuY19wcmludGZfZmxhZ196ZXJvLgorCitBQ19ERUZVTihbZ2xfUFJJTlRGX0ZMQUdfWkVST10sCitbCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pIGRubCBmb3IgY3Jvc3MtY29tcGlsZXMKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgcHJpbnRmIHN1cHBvcnRzIHRoZSB6ZXJvIGZsYWcgY29ycmVjdGx5XSwKKyAgICBbZ2xfY3ZfZnVuY19wcmludGZfZmxhZ196ZXJvXSwKKyAgICBbCisgICAgICBBQ19SVU5fSUZFTFNFKAorICAgICAgICBbQUNfTEFOR19TT1VSQ0UoW1sKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorc3RhdGljIGNoYXIgYnVmWzEwMF07CitzdGF0aWMgZG91YmxlIHplcm8gPSAwLjA7CitpbnQgbWFpbiAoKQoreworICBpZiAoc3ByaW50ZiAoYnVmLCAiJTAxMGYiLCAxLjAgLyB6ZXJvLCAzMywgNDQsIDU1KSA8IDAKKyAgICAgIHx8IChzdHJjbXAgKGJ1ZiwgIiAgICAgICBpbmYiKSAhPSAwCisgICAgICAgICAgJiYgc3RyY21wIChidWYsICIgIGluZmluaXR5IikgIT0gMCkpCisgICAgcmV0dXJuIDE7CisgIHJldHVybiAwOworfV1dKV0sCisgICAgICAgIFtnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX3plcm89eWVzXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfemVybz1ub10sCisgICAgICAgIFsKK2NoYW5nZXF1b3RlKCwpZG5sCisgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBnbGliYyBzeXN0ZW1zLgorICAgICAgICAgICAqLWdudSopIGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfemVybz0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gQmVPUy4KKyAgICAgICAgICAgYmVvcyopICBnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX3plcm89Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICMgSWYgd2UgZG9uJ3Qga25vdywgYXNzdW1lIHRoZSB3b3JzdC4KKyAgICAgICAgICAgKikgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX3plcm89Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICBlc2FjCitjaGFuZ2VxdW90ZShbLF0pZG5sCisgICAgICAgIF0pCisgICAgXSkKK10pCisKK2RubCBUZXN0IHdoZXRoZXIgdGhlICpwcmludGYgZmFtaWx5IG9mIGZ1bmN0aW9ucyBzdXBwb3J0cyBsYXJnZSBwcmVjaXNpb25zLgorZG5sIE9uIG1pbmd3LCBwcmVjaXNpb25zIGxhcmdlciB0aGFuIDUxMiBhcmUgdHJlYXRlZCBsaWtlIDUxMiwgaW4gaW50ZWdlciwKK2RubCBmbG9hdGluZy1wb2ludCBvciBwb2ludGVyIG91dHB1dC4gT24gU29sYXJpcyAxMC94ODYsIHByZWNpc2lvbnMgbGFyZ2VyCitkbmwgdGhhbiA1MTAgaW4gZmxvYXRpbmctcG9pbnQgb3V0cHV0IGNyYXNoIHRoZSBwcm9ncmFtLiBPbiBTb2xhcmlzIDEwL1NQQVJDLAorZG5sIHByZWNpc2lvbnMgbGFyZ2VyIHRoYW4gNTEwIGluIGZsb2F0aW5nLXBvaW50IG91dHB1dCB5aWVsZCB3cm9uZyByZXN1bHRzLgorZG5sIE9uIEFJWCA3LjEsIHByZWNpc2lvbnMgbGFyZ2VyIHRoYW4gOTk4IGluIGZsb2F0aW5nLXBvaW50IG91dHB1dCB5aWVsZAorZG5sIHdyb25nIHJlc3VsdHMuIE9uIEJlT1MsIHByZWNpc2lvbnMgbGFyZ2VyIHRoYW4gMTA0NCBjcmFzaCB0aGUgcHJvZ3JhbS4KK2RubCBSZXN1bHQgaXMgZ2xfY3ZfZnVuY19wcmludGZfcHJlY2lzaW9uLgorCitBQ19ERUZVTihbZ2xfUFJJTlRGX1BSRUNJU0lPTl0sCitbCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pIGRubCBmb3IgY3Jvc3MtY29tcGlsZXMKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgcHJpbnRmIHN1cHBvcnRzIGxhcmdlIHByZWNpc2lvbnNdLAorICAgIFtnbF9jdl9mdW5jX3ByaW50Zl9wcmVjaXNpb25dLAorICAgIFsKKyAgICAgIEFDX1JVTl9JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CitzdGF0aWMgY2hhciBidWZbNTAwMF07CitpbnQgbWFpbiAoKQoreworICBpbnQgcmVzdWx0ID0gMDsKKyNpZmRlZiBfX0JFT1NfXworICAvKiBPbiBCZU9TLCB0aGlzIHdvdWxkIGNyYXNoIGFuZCBzaG93IGEgZGlhbG9nIGJveC4gIEF2b2lkIHRoZSBjcmFzaC4gICovCisgIHJldHVybiAxOworI2VuZGlmCisgIGlmIChzcHJpbnRmIChidWYsICIlLjQwMDBkICVkIiwgMSwgMzMsIDQ0KSA8IDQwMDAgKyAzKQorICAgIHJlc3VsdCB8PSAxOworICBpZiAoc3ByaW50ZiAoYnVmLCAiJS40MDAwZiAlZCIsIDEuMCwgMzMsIDQ0KSA8IDQwMDAgKyA1KQorICAgIHJlc3VsdCB8PSAyOworICBpZiAoc3ByaW50ZiAoYnVmLCAiJS41MTFmICVkIiwgMS4wLCAzMywgNDQpIDwgNTExICsgNQorICAgICAgfHwgYnVmWzBdICE9ICcxJykKKyAgICByZXN1bHQgfD0gNDsKKyAgaWYgKHNwcmludGYgKGJ1ZiwgIiUuOTk5ZiAlZCIsIDEuMCwgMzMsIDQ0KSA8IDk5OSArIDUKKyAgICAgIHx8IGJ1ZlswXSAhPSAnMScpCisgICAgcmVzdWx0IHw9IDQ7CisgIHJldHVybiByZXN1bHQ7Cit9XV0pXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfcHJpbnRmX3ByZWNpc2lvbj15ZXNdLAorICAgICAgICBbZ2xfY3ZfZnVuY19wcmludGZfcHJlY2lzaW9uPW5vXSwKKyAgICAgICAgWworY2hhbmdlcXVvdGUoLClkbmwKKyAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAjIEd1ZXNzIG5vIG9ubHkgb24gU29sYXJpcywgbmF0aXZlIFdpbmRvd3MsIGFuZCBCZU9TIHN5c3RlbXMuCisgICAgICAgICAgIHNvbGFyaXMqKSAgICAgZ2xfY3ZfZnVuY19wcmludGZfcHJlY2lzaW9uPSJndWVzc2luZyBubyIgOzsKKyAgICAgICAgICAgbWluZ3cqIHwgcHcqKSBnbF9jdl9mdW5jX3ByaW50Zl9wcmVjaXNpb249Imd1ZXNzaW5nIG5vIiA7OworICAgICAgICAgICBiZW9zKikgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX3ByZWNpc2lvbj0iZ3Vlc3Npbmcgbm8iIDs7CisgICAgICAgICAgICopICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfcHJlY2lzaW9uPSJndWVzc2luZyB5ZXMiIDs7CisgICAgICAgICBlc2FjCitjaGFuZ2VxdW90ZShbLF0pZG5sCisgICAgICAgIF0pCisgICAgXSkKK10pCisKK2RubCBUZXN0IHdoZXRoZXIgdGhlICpwcmludGYgZmFtaWx5IG9mIGZ1bmN0aW9ucyByZWNvdmVycyBncmFjZWZ1bGx5IGluIGNhc2UKK2RubCBvZiBhbiBvdXQtb2YtbWVtb3J5IGNvbmRpdGlvbiwgb3Igd2hldGhlciBpdCBjcmFzaGVzIHRoZSBlbnRpcmUgcHJvZ3JhbS4KK2RubCBSZXN1bHQgaXMgZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtLgorCitBQ19ERUZVTihbZ2xfUFJJTlRGX0VOT01FTV0sCitbCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorICBBQ19SRVFVSVJFKFtnbF9NVUxUSUFSQ0hdKQorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pIGRubCBmb3IgY3Jvc3MtY29tcGlsZXMKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgcHJpbnRmIHN1cnZpdmVzIG91dC1vZi1tZW1vcnkgY29uZGl0aW9uc10sCisgICAgW2dsX2N2X2Z1bmNfcHJpbnRmX2Vub21lbV0sCisgICAgWworICAgICAgZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtPSJndWVzc2luZyBubyIKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm87IHRoZW4KKyAgICAgICAgaWYgdGVzdCAkQVBQTEVfVU5JVkVSU0FMX0JVSUxEID0gMDsgdGhlbgorICAgICAgICAgIEFDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfU09VUkNFKFsKK11HTF9OT0NSQVNIWworY2hhbmdlcXVvdGUoLClkbmwKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KK2ludCBtYWluKCkKK3sKKyAgc3RydWN0IHJsaW1pdCBsaW1pdDsKKyAgaW50IHJldDsKKyAgbm9jcmFzaF9pbml0ICgpOworICAvKiBTb21lIHByaW50ZiBpbXBsZW1lbnRhdGlvbnMgYWxsb2NhdGUgdGVtcG9yYXJ5IHNwYWNlIHdpdGggbWFsbG9jLiAgKi8KKyAgLyogT24gQlNEIHN5c3RlbXMsIG1hbGxvYygpIGlzIGxpbWl0ZWQgYnkgUkxJTUlUX0RBVEEuICAqLworI2lmZGVmIFJMSU1JVF9EQVRBCisgIGlmIChnZXRybGltaXQgKFJMSU1JVF9EQVRBLCAmbGltaXQpIDwgMCkKKyAgICByZXR1cm4gNzc7CisgIGlmIChsaW1pdC5ybGltX21heCA9PSBSTElNX0lORklOSVRZIHx8IGxpbWl0LnJsaW1fbWF4ID4gNTAwMDAwMCkKKyAgICBsaW1pdC5ybGltX21heCA9IDUwMDAwMDA7CisgIGxpbWl0LnJsaW1fY3VyID0gbGltaXQucmxpbV9tYXg7CisgIGlmIChzZXRybGltaXQgKFJMSU1JVF9EQVRBLCAmbGltaXQpIDwgMCkKKyAgICByZXR1cm4gNzc7CisjZW5kaWYKKyAgLyogT24gTGludXggc3lzdGVtcywgbWFsbG9jKCkgaXMgbGltaXRlZCBieSBSTElNSVRfQVMuICAqLworI2lmZGVmIFJMSU1JVF9BUworICBpZiAoZ2V0cmxpbWl0IChSTElNSVRfQVMsICZsaW1pdCkgPCAwKQorICAgIHJldHVybiA3NzsKKyAgaWYgKGxpbWl0LnJsaW1fbWF4ID09IFJMSU1fSU5GSU5JVFkgfHwgbGltaXQucmxpbV9tYXggPiA1MDAwMDAwKQorICAgIGxpbWl0LnJsaW1fbWF4ID0gNTAwMDAwMDsKKyAgbGltaXQucmxpbV9jdXIgPSBsaW1pdC5ybGltX21heDsKKyAgaWYgKHNldHJsaW1pdCAoUkxJTUlUX0FTLCAmbGltaXQpIDwgMCkKKyAgICByZXR1cm4gNzc7CisjZW5kaWYKKyAgLyogU29tZSBwcmludGYgaW1wbGVtZW50YXRpb25zIGFsbG9jYXRlIHRlbXBvcmFyeSBzcGFjZSBvbiB0aGUgc3RhY2suICAqLworI2lmZGVmIFJMSU1JVF9TVEFDSworICBpZiAoZ2V0cmxpbWl0IChSTElNSVRfU1RBQ0ssICZsaW1pdCkgPCAwKQorICAgIHJldHVybiA3NzsKKyAgaWYgKGxpbWl0LnJsaW1fbWF4ID09IFJMSU1fSU5GSU5JVFkgfHwgbGltaXQucmxpbV9tYXggPiA1MDAwMDAwKQorICAgIGxpbWl0LnJsaW1fbWF4ID0gNTAwMDAwMDsKKyAgbGltaXQucmxpbV9jdXIgPSBsaW1pdC5ybGltX21heDsKKyAgaWYgKHNldHJsaW1pdCAoUkxJTUlUX1NUQUNLLCAmbGltaXQpIDwgMCkKKyAgICByZXR1cm4gNzc7CisjZW5kaWYKKyAgcmV0ID0gcHJpbnRmICgiJS41MDAwMDAwZiIsIDEuMCk7CisgIHJldHVybiAhKHJldCA9PSA1MDAwMDAyIHx8IChyZXQgPCAwICYmIGVycm5vID09IEVOT01FTSkpOworfQorY2hhbmdlcXVvdGUoWyxdKWRubAorICAgICAgICAgIF0pXSkKKyAgICAgICAgICBpZiBBQ19UUllfRVZBTChbYWNfbGlua10pICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICAgICAgICAoLi9jb25mdGVzdCAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgICAgICAgIHJlc3VsdD0kPworICAgICAgICAgICAgIF9BU19FQ0hPX0xPRyhbXCQ/ID0gJHJlc3VsdF0pCisgICAgICAgICAgICAgaWYgdGVzdCAkcmVzdWx0ICE9IDAgJiYgdGVzdCAkcmVzdWx0ICE9IDc3OyB0aGVuIHJlc3VsdD0xOyBmaQorICAgICAgICAgICAgIGV4aXQgJHJlc3VsdAorICAgICAgICAgICAgKSA+L2Rldi9udWxsIDI+L2Rldi9udWxsCisgICAgICAgICAgICBjYXNlICQ/IGluCisgICAgICAgICAgICAgIDApIGdsX2N2X2Z1bmNfcHJpbnRmX2Vub21lbT0ieWVzIiA7OworICAgICAgICAgICAgICA3NykgZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtPSJndWVzc2luZyBubyIgOzsKKyAgICAgICAgICAgICAgKikgZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtPSJubyIgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9lbm9tZW09Imd1ZXNzaW5nIG5vIgorICAgICAgICAgIGZpCisgICAgICAgICAgcm0gLWZyIGNvbmZ0ZXN0KgorICAgICAgICBlbHNlCisgICAgICAgICAgZG5sIEEgdW5pdmVyc2FsIGJ1aWxkIG9uIEFwcGxlIE1hYyBPUyBYIHBsYXRmb3Jtcy4KKyAgICAgICAgICBkbmwgVGhlIHJlc3VsdCB3b3VsZCBiZSAnbm8nIGluIDMyLWJpdCBtb2RlIGFuZCAneWVzJyBpbiA2NC1iaXQgbW9kZS4KKyAgICAgICAgICBkbmwgQnV0IHdlIG5lZWQgYSBjb25maWd1cmF0aW9uIHJlc3VsdCB0aGF0IGlzIHZhbGlkIGluIGJvdGggbW9kZXMuCisgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtPSJndWVzc2luZyBubyIKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtIiA9ICJndWVzc2luZyBubyI7IHRoZW4KK2NoYW5nZXF1b3RlKCwpZG5sCisgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBnbGliYyBzeXN0ZW1zLgorICAgICAgICAgICotZ251KikgICBnbF9jdl9mdW5jX3ByaW50Zl9lbm9tZW09Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBTb2xhcmlzLgorICAgICAgICAgIHNvbGFyaXMqKSBnbF9jdl9mdW5jX3ByaW50Zl9lbm9tZW09Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBBSVguCisgICAgICAgICAgYWl4KikgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2Vub21lbT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIEhQLVVYL2hwcGEuCisgICAgICAgICAgaHB1eCopICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKyAgICAgICAgICAgICAgICAgICAgICBocHBhKikgZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAqKSAgICAgZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtPSJndWVzc2luZyBubyI7OworICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIElSSVguCisgICAgICAgICAgaXJpeCopICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2Vub21lbT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIE9TRi8xLgorICAgICAgICAgIG9zZiopICAgICBnbF9jdl9mdW5jX3ByaW50Zl9lbm9tZW09Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBCZU9TLgorICAgICAgICAgIGJlb3MqKSAgICBnbF9jdl9mdW5jX3ByaW50Zl9lbm9tZW09Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBIYWlrdS4KKyAgICAgICAgICBoYWlrdSopICAgZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgIyBJZiB3ZSBkb24ndCBrbm93LCBhc3N1bWUgdGhlIHdvcnN0LgorICAgICAgICAgICopICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9lbm9tZW09Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgIGVzYWMKK2NoYW5nZXF1b3RlKFssXSlkbmwKKyAgICAgIGZpCisgICAgXSkKK10pCisKK2RubCBUZXN0IHdoZXRoZXIgdGhlIHNucHJpbnRmIGZ1bmN0aW9uIGV4aXN0cy4gKElTTyBDOTksIFBPU0lYOjIwMDEpCitkbmwgUmVzdWx0IGlzIGFjX2N2X2Z1bmNfc25wcmludGYuCisKK0FDX0RFRlVOKFtnbF9TTlBSSU5URl9QUkVTRU5DRV0sCitbCisgIEFDX0NIRUNLX0ZVTkNTX09OQ0UoW3NucHJpbnRmXSkKK10pCisKK2RubCBUZXN0IHdoZXRoZXIgdGhlIHN0cmluZyBwcm9kdWNlZCBieSB0aGUgc25wcmludGYgZnVuY3Rpb24gaXMgYWx3YXlzIE5VTAorZG5sIHRlcm1pbmF0ZWQuIChJU08gQzk5LCBQT1NJWDoyMDAxKQorZG5sIFJlc3VsdCBpcyBnbF9jdl9mdW5jX3NucHJpbnRmX3RydW5jYXRpb25fYzk5LgorCitBQ19ERUZVTihbZ2xfU05QUklOVEZfVFJVTkNBVElPTl9DOTldLAorWworICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKSBkbmwgZm9yIGNyb3NzLWNvbXBpbGVzCisgIEFDX1JFUVVJUkUoW2dsX1NOUFJJTlRGX1BSRVNFTkNFXSkKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgc25wcmludGYgdHJ1bmNhdGVzIHRoZSByZXN1bHQgYXMgaW4gQzk5XSwKKyAgICBbZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OV0sCisgICAgWworICAgICAgQUNfUlVOX0lGRUxTRSgKKyAgICAgICAgW0FDX0xBTkdfU09VUkNFKFtbCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1NOUFJJTlRGCisjIGRlZmluZSBteV9zbnByaW50ZiBzbnByaW50ZgorI2Vsc2UKKyMgaW5jbHVkZSA8c3RkYXJnLmg+CitzdGF0aWMgaW50IG15X3NucHJpbnRmIChjaGFyICpidWYsIGludCBzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdzOworICBpbnQgcmV0OworICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKyAgcmV0ID0gdnNucHJpbnRmIChidWYsIHNpemUsIGZvcm1hdCwgYXJncyk7CisgIHZhX2VuZCAoYXJncyk7CisgIHJldHVybiByZXQ7Cit9CisjZW5kaWYKK3N0YXRpYyBjaGFyIGJ1ZlsxMDBdOworaW50IG1haW4gKCkKK3sKKyAgc3RyY3B5IChidWYsICJBQkNERUYiKTsKKyAgbXlfc25wcmludGYgKGJ1ZiwgMywgIiVkICVkIiwgNDU2NywgODkpOworICBpZiAobWVtY21wIChidWYsICI0NVwwREVGIiwgNikgIT0gMCkKKyAgICByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9XV0pXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfc25wcmludGZfdHJ1bmNhdGlvbl9jOTk9eWVzXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfc25wcmludGZfdHJ1bmNhdGlvbl9jOTk9bm9dLAorICAgICAgICBbCitjaGFuZ2VxdW90ZSgsKWRubAorICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBnbGliYyBzeXN0ZW1zLgorICAgICAgICAgICAqLWdudSopICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBGcmVlQlNEID49IDUuCisgICAgICAgICAgIGZyZWVic2RbMS00XSopICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3RydW5jYXRpb25fYzk5PSJndWVzc2luZyBubyI7OworICAgICAgICAgICBmcmVlYnNkKiB8IGtmcmVlYnNkKikgZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBNYWMgT1MgWCA+PSAxMC4zLgorICAgICAgICAgICBkYXJ3aW5bMS02XS4qKSAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgZGFyd2luKikgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfdHJ1bmNhdGlvbl9jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gT3BlbkJTRCA+PSAzLjkuCisgICAgICAgICAgIG9wZW5ic2RbMS0yXS4qIHwgb3BlbmJzZDMuWzAtOF0gfCBvcGVuYnNkMy5bMC04XS4qKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgb3BlbmJzZCopICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfdHJ1bmNhdGlvbl9jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gU29sYXJpcyA+PSAyLjYuCisgICAgICAgICAgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfdHJ1bmNhdGlvbl9jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIHNvbGFyaXMqKSAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3RydW5jYXRpb25fYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIEFJWCA+PSA0LgorICAgICAgICAgICBhaXhbMS0zXSopICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgYWl4KikgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfdHJ1bmNhdGlvbl9jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gSFAtVVggPj0gMTEuCisgICAgICAgICAgIGhwdXhbNy05XSogfCBocHV4MTAqKSBnbF9jdl9mdW5jX3NucHJpbnRmX3RydW5jYXRpb25fYzk5PSJndWVzc2luZyBubyI7OworICAgICAgICAgICBocHV4KikgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBJUklYID49IDYuNS4KKyAgICAgICAgICAgaXJpeDYuNSkgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfdHJ1bmNhdGlvbl9jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gT1NGLzEgPj0gNS4KKyAgICAgICAgICAgb3NmWzMtNF0qKSAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfdHJ1bmNhdGlvbl9jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIG9zZiopICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3RydW5jYXRpb25fYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIE5ldEJTRCA+PSAzLgorICAgICAgICAgICBuZXRic2RbMS0yXSogfCBuZXRic2RlbGZbMS0yXSogfCBuZXRic2Rhb3V0WzEtMl0qIHwgbmV0YnNkY29mZlsxLTJdKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfdHJ1bmNhdGlvbl9jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIG5ldGJzZCopICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3RydW5jYXRpb25fYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIEJlT1MuCisgICAgICAgICAgIGJlb3MqKSAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3RydW5jYXRpb25fYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgd2UgZG9uJ3Qga25vdywgYXNzdW1lIHRoZSB3b3JzdC4KKyAgICAgICAgICAgKikgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfdHJ1bmNhdGlvbl9jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICBlc2FjCitjaGFuZ2VxdW90ZShbLF0pZG5sCisgICAgICAgIF0pCisgICAgXSkKK10pCisKK2RubCBUZXN0IHdoZXRoZXIgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgc25wcmludGYgZnVuY3Rpb24gaXMgdGhlIG51bWJlcgorZG5sIG9mIGJ5dGVzIChleGNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIE5VTCkgdGhhdCB3b3VsZCBoYXZlIGJlZW4gcHJvZHVjZWQKK2RubCBpZiB0aGUgYnVmZmVyIGhhZCBiZWVuIGxhcmdlIGVub3VnaC4gKElTTyBDOTksIFBPU0lYOjIwMDEpCitkbmwgRm9yIGV4YW1wbGUsIHRoaXMgdGVzdCBwcm9ncmFtIGZhaWxzIG9uIElSSVggNi41OgorZG5sICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CitkbmwgICAgIGludCBtYWluKCkKK2RubCAgICAgeworZG5sICAgICAgIHN0YXRpYyBjaGFyIGJ1Zls4XTsKK2RubCAgICAgICBpbnQgcmV0dmFsID0gc25wcmludGYgKGJ1ZiwgMywgIiVkIiwgMTIzNDUpOworZG5sICAgICAgIHJldHVybiByZXR2YWwgPj0gMCAmJiByZXR2YWwgPCAzOworZG5sICAgICB9CitkbmwgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFJlc3VsdCBpcyBnbF9jdl9mdW5jX3NucHJpbnRmX3JldHZhbF9jOTkuCisKK0FDX0RFRlVOX09OQ0UoW2dsX1NOUFJJTlRGX1JFVFZBTF9DOTldLAorWworICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKSBkbmwgZm9yIGNyb3NzLWNvbXBpbGVzCisgIEFDX1JFUVVJUkUoW2dsX1NOUFJJTlRGX1BSRVNFTkNFXSkKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgc25wcmludGYgcmV0dXJucyBhIGJ5dGUgY291bnQgYXMgaW4gQzk5XSwKKyAgICBbZ2xfY3ZfZnVuY19zbnByaW50Zl9yZXR2YWxfYzk5XSwKKyAgICBbCisgICAgICBBQ19SVU5fSUZFTFNFKAorICAgICAgICBbQUNfTEFOR19TT1VSQ0UoW1sKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfU05QUklOVEYKKyMgZGVmaW5lIG15X3NucHJpbnRmIHNucHJpbnRmCisjZWxzZQorIyBpbmNsdWRlIDxzdGRhcmcuaD4KK3N0YXRpYyBpbnQgbXlfc25wcmludGYgKGNoYXIgKmJ1ZiwgaW50IHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ3M7CisgIGludCByZXQ7CisgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworICByZXQgPSB2c25wcmludGYgKGJ1Ziwgc2l6ZSwgZm9ybWF0LCBhcmdzKTsKKyAgdmFfZW5kIChhcmdzKTsKKyAgcmV0dXJuIHJldDsKK30KKyNlbmRpZgorc3RhdGljIGNoYXIgYnVmWzEwMF07CitpbnQgbWFpbiAoKQoreworICBzdHJjcHkgKGJ1ZiwgIkFCQ0RFRiIpOworICBpZiAobXlfc25wcmludGYgKGJ1ZiwgMywgIiVkICVkIiwgNDU2NywgODkpICE9IDcpCisgICAgcmV0dXJuIDE7CisgIGlmIChteV9zbnByaW50ZiAoYnVmLCAwLCAiJWQgJWQiLCA0NTY3LCA4OSkgIT0gNykKKyAgICByZXR1cm4gMjsKKyAgaWYgKG15X3NucHJpbnRmIChOVUxMLCAwLCAiJWQgJWQiLCA0NTY3LCA4OSkgIT0gNykKKyAgICByZXR1cm4gMzsKKyAgcmV0dXJuIDA7Cit9XV0pXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfc25wcmludGZfcmV0dmFsX2M5OT15ZXNdLAorICAgICAgICBbZ2xfY3ZfZnVuY19zbnByaW50Zl9yZXR2YWxfYzk5PW5vXSwKKyAgICAgICAgWworY2hhbmdlcXVvdGUoLClkbmwKKyAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gZ2xpYmMgc3lzdGVtcy4KKyAgICAgICAgICAgKi1nbnUqKSAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfcmV0dmFsX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBGcmVlQlNEID49IDUuCisgICAgICAgICAgIGZyZWVic2RbMS00XSopICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3JldHZhbF9jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIGZyZWVic2QqIHwga2ZyZWVic2QqKSBnbF9jdl9mdW5jX3NucHJpbnRmX3JldHZhbF9jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gTWFjIE9TIFggPj0gMTAuMy4KKyAgICAgICAgICAgZGFyd2luWzEtNl0uKikgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfcmV0dmFsX2M5OT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgZGFyd2luKikgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfcmV0dmFsX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBPcGVuQlNEID49IDMuOS4KKyAgICAgICAgICAgb3BlbmJzZFsxLTJdLiogfCBvcGVuYnNkMy5bMC04XSB8IG9wZW5ic2QzLlswLThdLiopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3JldHZhbF9jOTk9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIG9wZW5ic2QqKSAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3JldHZhbF9jOTk9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gU29sYXJpcyA+PSAyLjEwLgorICAgICAgICAgICBzb2xhcmlzMi5bMS05XVswLTldKikgZ2xfY3ZfZnVuY19wcmludGZfc2l6ZXNfYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgc29sYXJpcyopICAgICAgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX3NpemVzX2M5OT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIEFJWCA+PSA0LgorICAgICAgICAgICBhaXhbMS0zXSopICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9yZXR2YWxfYzk5PSJndWVzc2luZyBubyI7OworICAgICAgICAgICBhaXgqKSAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9yZXR2YWxfYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIE5ldEJTRCA+PSAzLgorICAgICAgICAgICBuZXRic2RbMS0yXSogfCBuZXRic2RlbGZbMS0yXSogfCBuZXRic2Rhb3V0WzEtMl0qIHwgbmV0YnNkY29mZlsxLTJdKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfcmV0dmFsX2M5OT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgbmV0YnNkKikgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfcmV0dmFsX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBCZU9TLgorICAgICAgICAgICBiZW9zKikgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9yZXR2YWxfYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgd2UgZG9uJ3Qga25vdywgYXNzdW1lIHRoZSB3b3JzdC4KKyAgICAgICAgICAgKikgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfcmV0dmFsX2M5OT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgIGVzYWMKK2NoYW5nZXF1b3RlKFssXSlkbmwKKyAgICAgICAgXSkKKyAgICBdKQorXSkKKworZG5sIFRlc3Qgd2hldGhlciB0aGUgc25wcmludGYgZnVuY3Rpb24gc3VwcG9ydHMgdGhlICVuIGZvcm1hdCBkaXJlY3RpdmUKK2RubCBhbHNvIGluIHRydW5jYXRlZCBwb3J0aW9ucyBvZiB0aGUgZm9ybWF0IHN0cmluZy4gKElTTyBDOTksIFBPU0lYOjIwMDEpCitkbmwgUmVzdWx0IGlzIGdsX2N2X2Z1bmNfc25wcmludGZfZGlyZWN0aXZlX24uCisKK0FDX0RFRlVOKFtnbF9TTlBSSU5URl9ESVJFQ1RJVkVfTl0sCitbCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pIGRubCBmb3IgY3Jvc3MtY29tcGlsZXMKKyAgQUNfUkVRVUlSRShbZ2xfU05QUklOVEZfUFJFU0VOQ0VdKQorICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBzbnByaW50ZiBmdWxseSBzdXBwb3J0cyB0aGUgJ24nIGRpcmVjdGl2ZV0sCisgICAgW2dsX2N2X2Z1bmNfc25wcmludGZfZGlyZWN0aXZlX25dLAorICAgIFsKKyAgICAgIEFDX1JVTl9JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9TTlBSSU5URgorIyBkZWZpbmUgbXlfc25wcmludGYgc25wcmludGYKKyNlbHNlCisjIGluY2x1ZGUgPHN0ZGFyZy5oPgorc3RhdGljIGludCBteV9zbnByaW50ZiAoY2hhciAqYnVmLCBpbnQgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaW50IHJldDsKKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisgIHJldCA9IHZzbnByaW50ZiAoYnVmLCBzaXplLCBmb3JtYXQsIGFyZ3MpOworICB2YV9lbmQgKGFyZ3MpOworICByZXR1cm4gcmV0OworfQorI2VuZGlmCitzdGF0aWMgY2hhciBmbXRzdHJpbmdbMTBdOworc3RhdGljIGNoYXIgYnVmWzEwMF07CitpbnQgbWFpbiAoKQoreworICBpbnQgY291bnQgPSAtMTsKKyAgLyogQ29weSB0aGUgZm9ybWF0IHN0cmluZy4gIFNvbWUgc3lzdGVtcyAoZ2xpYmMgd2l0aCBfRk9SVElGWV9TT1VSQ0U9MikKKyAgICAgc3VwcG9ydCAlbiBpbiBmb3JtYXQgc3RyaW5ncyBpbiByZWFkLW9ubHkgbWVtb3J5IGJ1dCBub3QgaW4gd3JpdGFibGUKKyAgICAgbWVtb3J5LiAgKi8KKyAgc3RyY3B5IChmbXRzdHJpbmcsICIlZCAlbiIpOworICBteV9zbnByaW50ZiAoYnVmLCA0LCBmbXRzdHJpbmcsIDEyMzQ1LCAmY291bnQsIDMzLCA0NCwgNTUpOworICBpZiAoY291bnQgIT0gNikKKyAgICByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9XV0pXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfc25wcmludGZfZGlyZWN0aXZlX249eWVzXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfc25wcmludGZfZGlyZWN0aXZlX249bm9dLAorICAgICAgICBbCitjaGFuZ2VxdW90ZSgsKWRubAorICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBnbGliYyBzeXN0ZW1zLgorICAgICAgICAgICAqLWdudSopICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbj0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBGcmVlQlNEID49IDUuCisgICAgICAgICAgIGZyZWVic2RbMS00XSopICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX2RpcmVjdGl2ZV9uPSJndWVzc2luZyBubyI7OworICAgICAgICAgICBmcmVlYnNkKiB8IGtmcmVlYnNkKikgZ2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbj0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBNYWMgT1MgWCA+PSAxMC4zLgorICAgICAgICAgICBkYXJ3aW5bMS02XS4qKSAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbj0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgZGFyd2luKikgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfZGlyZWN0aXZlX249Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gU29sYXJpcyA+PSAyLjYuCisgICAgICAgICAgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfZGlyZWN0aXZlX249Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIHNvbGFyaXMqKSAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX2RpcmVjdGl2ZV9uPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIEFJWCA+PSA0LgorICAgICAgICAgICBhaXhbMS0zXSopICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbj0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgYWl4KikgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfZGlyZWN0aXZlX249Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gSVJJWCA+PSA2LjUuCisgICAgICAgICAgIGlyaXg2LjUpICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX2RpcmVjdGl2ZV9uPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIE9TRi8xID49IDUuCisgICAgICAgICAgIG9zZlszLTRdKikgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX2RpcmVjdGl2ZV9uPSJndWVzc2luZyBubyI7OworICAgICAgICAgICBvc2YqKSAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbj0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBOZXRCU0QgPj0gMy4KKyAgICAgICAgICAgbmV0YnNkWzEtMl0qIHwgbmV0YnNkZWxmWzEtMl0qIHwgbmV0YnNkYW91dFsxLTJdKiB8IG5ldGJzZGNvZmZbMS0yXSopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX2RpcmVjdGl2ZV9uPSJndWVzc2luZyBubyI7OworICAgICAgICAgICBuZXRic2QqKSAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbj0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBCZU9TLgorICAgICAgICAgICBiZW9zKikgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9kaXJlY3RpdmVfbj0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIHdlIGRvbid0IGtub3csIGFzc3VtZSB0aGUgd29yc3QuCisgICAgICAgICAgICopICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX2RpcmVjdGl2ZV9uPSJndWVzc2luZyBubyI7OworICAgICAgICAgZXNhYworY2hhbmdlcXVvdGUoWyxdKWRubAorICAgICAgICBdKQorICAgIF0pCitdKQorCitkbmwgVGVzdCB3aGV0aGVyIHRoZSBzbnByaW50ZiBmdW5jdGlvbiwgd2hlbiBwYXNzZWQgYSBzaXplID0gMSwgd3JpdGVzIGFueQorZG5sIG91dHB1dCB3aXRob3V0IGJvdW5kcyBpbiB0aGlzIGNhc2UsIGJlaGF2aW5nIGxpa2Ugc3ByaW50Zi4gVGhpcyBpcyB0aGUKK2RubCBjYXNlIG9uIExpbnV4IGxpYmM1LgorZG5sIFJlc3VsdCBpcyBnbF9jdl9mdW5jX3NucHJpbnRmX3NpemUxLgorCitBQ19ERUZVTihbZ2xfU05QUklOVEZfU0laRTFdLAorWworICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKyAgQUNfUkVRVUlSRShbZ2xfU05QUklOVEZfUFJFU0VOQ0VdKQorICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBzbnByaW50ZiByZXNwZWN0cyBhIHNpemUgb2YgMV0sCisgICAgW2dsX2N2X2Z1bmNfc25wcmludGZfc2l6ZTFdLAorICAgIFsKKyAgICAgIEFDX1JVTl9JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgSEFWRV9TTlBSSU5URgorIyBkZWZpbmUgbXlfc25wcmludGYgc25wcmludGYKKyNlbHNlCisjIGluY2x1ZGUgPHN0ZGFyZy5oPgorc3RhdGljIGludCBteV9zbnByaW50ZiAoY2hhciAqYnVmLCBpbnQgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaW50IHJldDsKKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisgIHJldCA9IHZzbnByaW50ZiAoYnVmLCBzaXplLCBmb3JtYXQsIGFyZ3MpOworICB2YV9lbmQgKGFyZ3MpOworICByZXR1cm4gcmV0OworfQorI2VuZGlmCitpbnQgbWFpbigpCit7CisgIHN0YXRpYyBjaGFyIGJ1Zls4XSA9IHsgJ0QnLCAnRScsICdBJywgJ0QnLCAnQicsICdFJywgJ0UnLCAnRicgfTsKKyAgbXlfc25wcmludGYgKGJ1ZiwgMSwgIiVkIiwgMTIzNDUpOworICByZXR1cm4gYnVmWzFdICE9ICdFJzsKK31dXSldLAorICAgICAgICBbZ2xfY3ZfZnVuY19zbnByaW50Zl9zaXplMT15ZXNdLAorICAgICAgICBbZ2xfY3ZfZnVuY19zbnByaW50Zl9zaXplMT1ub10sCisgICAgICAgIFtnbF9jdl9mdW5jX3NucHJpbnRmX3NpemUxPSJndWVzc2luZyB5ZXMiXSkKKyAgICBdKQorXSkKKworZG5sIFRlc3Qgd2hldGhlciB0aGUgdnNucHJpbnRmIGZ1bmN0aW9uLCB3aGVuIHBhc3NlZCBhIHplcm8gc2l6ZSwgcHJvZHVjZXMgbm8KK2RubCBvdXRwdXQuIChJU08gQzk5LCBQT1NJWDoyMDAxKQorZG5sIEZvciBleGFtcGxlLCBzbnByaW50ZiBuZXZlcnRoZWxlc3Mgd3JpdGVzIGEgTlVMIGJ5dGUgaW4gdGhpcyBjYXNlCitkbmwgb24gT1NGLzEgNS4xOgorZG5sICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CitkbmwgICAgIGludCBtYWluKCkKK2RubCAgICAgeworZG5sICAgICAgIHN0YXRpYyBjaGFyIGJ1Zls4XSA9IHsgJ0QnLCAnRScsICdBJywgJ0QnLCAnQicsICdFJywgJ0UnLCAnRicgfTsKK2RubCAgICAgICBzbnByaW50ZiAoYnVmLCAwLCAiJWQiLCAxMjM0NSk7CitkbmwgICAgICAgcmV0dXJuIGJ1ZlswXSAhPSAnRCc7CitkbmwgICAgIH0KK2RubCAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQW5kIHZzbnByaW50ZiB3cml0ZXMgYW55IG91dHB1dCB3aXRob3V0IGJvdW5kcyBpbiB0aGlzIGNhc2UsIGJlaGF2aW5nIGxpa2UKK2RubCB2c3ByaW50Ziwgb24gSFAtVVggMTEgYW5kIE9TRi8xIDUuMToKK2RubCAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgICAgICNpbmNsdWRlIDxzdGRhcmcuaD4KK2RubCAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CitkbmwgICAgIHN0YXRpYyBpbnQgbXlfc25wcmludGYgKGNoYXIgKmJ1ZiwgaW50IHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorZG5sICAgICB7CitkbmwgICAgICAgdmFfbGlzdCBhcmdzOworZG5sICAgICAgIGludCByZXQ7CitkbmwgICAgICAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CitkbmwgICAgICAgcmV0ID0gdnNucHJpbnRmIChidWYsIHNpemUsIGZvcm1hdCwgYXJncyk7CitkbmwgICAgICAgdmFfZW5kIChhcmdzKTsKK2RubCAgICAgICByZXR1cm4gcmV0OworZG5sICAgICB9CitkbmwgICAgIGludCBtYWluKCkKK2RubCAgICAgeworZG5sICAgICAgIHN0YXRpYyBjaGFyIGJ1Zls4XSA9IHsgJ0QnLCAnRScsICdBJywgJ0QnLCAnQicsICdFJywgJ0UnLCAnRicgfTsKK2RubCAgICAgICBteV9zbnByaW50ZiAoYnVmLCAwLCAiJWQiLCAxMjM0NSk7CitkbmwgICAgICAgcmV0dXJuIGJ1ZlswXSAhPSAnRCc7CitkbmwgICAgIH0KK2RubCAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgUmVzdWx0IGlzIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OS4KKworQUNfREVGVU4oW2dsX1ZTTlBSSU5URl9aRVJPU0laRV9DOTldLAorWworICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKSBkbmwgZm9yIGNyb3NzLWNvbXBpbGVzCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHZzbnByaW50ZiByZXNwZWN0cyBhIHplcm8gc2l6ZSBhcyBpbiBDOTldLAorICAgIFtnbF9jdl9mdW5jX3ZzbnByaW50Zl96ZXJvc2l6ZV9jOTldLAorICAgIFsKKyAgICAgIEFDX1JVTl9JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CitzdGF0aWMgaW50IG15X3NucHJpbnRmIChjaGFyICpidWYsIGludCBzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdzOworICBpbnQgcmV0OworICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKyAgcmV0ID0gdnNucHJpbnRmIChidWYsIHNpemUsIGZvcm1hdCwgYXJncyk7CisgIHZhX2VuZCAoYXJncyk7CisgIHJldHVybiByZXQ7Cit9CitpbnQgbWFpbigpCit7CisgIHN0YXRpYyBjaGFyIGJ1Zls4XSA9IHsgJ0QnLCAnRScsICdBJywgJ0QnLCAnQicsICdFJywgJ0UnLCAnRicgfTsKKyAgbXlfc25wcmludGYgKGJ1ZiwgMCwgIiVkIiwgMTIzNDUpOworICByZXR1cm4gYnVmWzBdICE9ICdEJzsKK31dXSldLAorICAgICAgICBbZ2xfY3ZfZnVuY192c25wcmludGZfemVyb3NpemVfYzk5PXllc10sCisgICAgICAgIFtnbF9jdl9mdW5jX3ZzbnByaW50Zl96ZXJvc2l6ZV9jOTk9bm9dLAorICAgICAgICBbCitjaGFuZ2VxdW90ZSgsKWRubAorICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBnbGliYyBzeXN0ZW1zLgorICAgICAgICAgICAqLWdudSopICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY192c25wcmludGZfemVyb3NpemVfYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIEZyZWVCU0QgPj0gNS4KKyAgICAgICAgICAgZnJlZWJzZFsxLTRdKikgICAgICAgIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgZnJlZWJzZCogfCBrZnJlZWJzZCopIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBNYWMgT1MgWCA+PSAxMC4zLgorICAgICAgICAgICBkYXJ3aW5bMS02XS4qKSAgICAgICAgZ2xfY3ZfZnVuY192c25wcmludGZfemVyb3NpemVfYzk5PSJndWVzc2luZyBubyI7OworICAgICAgICAgICBkYXJ3aW4qKSAgICAgICAgICAgICAgZ2xfY3ZfZnVuY192c25wcmludGZfemVyb3NpemVfYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIEN5Z3dpbi4KKyAgICAgICAgICAgY3lnd2luKikgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBTb2xhcmlzID49IDIuNi4KKyAgICAgICAgICAgc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY192c25wcmludGZfemVyb3NpemVfYzk5PSJndWVzc2luZyBubyI7OworICAgICAgICAgICBzb2xhcmlzKikgICAgICAgICAgICAgZ2xfY3ZfZnVuY192c25wcmludGZfemVyb3NpemVfYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIEFJWCA+PSA0LgorICAgICAgICAgICBhaXhbMS0zXSopICAgICAgICAgICAgZ2xfY3ZfZnVuY192c25wcmludGZfemVyb3NpemVfYzk5PSJndWVzc2luZyBubyI7OworICAgICAgICAgICBhaXgqKSAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY192c25wcmludGZfemVyb3NpemVfYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIElSSVggPj0gNi41LgorICAgICAgICAgICBpcml4Ni41KSAgICAgICAgICAgICAgZ2xfY3ZfZnVuY192c25wcmludGZfemVyb3NpemVfYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIE5ldEJTRCA+PSAzLgorICAgICAgICAgICBuZXRic2RbMS0yXSogfCBuZXRic2RlbGZbMS0yXSogfCBuZXRic2Rhb3V0WzEtMl0qIHwgbmV0YnNkY29mZlsxLTJdKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgbmV0YnNkKikgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBCZU9TLgorICAgICAgICAgICBiZW9zKikgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY192c25wcmludGZfemVyb3NpemVfYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIG1pbmd3LgorICAgICAgICAgICBtaW5ndyogfCBwdyopICAgICAgICAgZ2xfY3ZfZnVuY192c25wcmludGZfemVyb3NpemVfYzk5PSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgd2UgZG9uJ3Qga25vdywgYXNzdW1lIHRoZSB3b3JzdC4KKyAgICAgICAgICAgKikgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3plcm9zaXplX2M5OT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgIGVzYWMKK2NoYW5nZXF1b3RlKFssXSlkbmwKKyAgICAgICAgXSkKKyAgICBdKQorXSkKKworZG5sIFRoZSByZXN1bHRzIG9mIHRoZXNlIHRlc3RzIG9uIHZhcmlvdXMgcGxhdGZvcm1zIGFyZToKK2RubAorZG5sIDEgPSBnbF9QUklOVEZfU0laRVNfQzk5CitkbmwgMiA9IGdsX1BSSU5URl9MT05HX0RPVUJMRQorZG5sIDMgPSBnbF9QUklOVEZfSU5GSU5JVEUKK2RubCA0ID0gZ2xfUFJJTlRGX0lORklOSVRFX0xPTkdfRE9VQkxFCitkbmwgNSA9IGdsX1BSSU5URl9ESVJFQ1RJVkVfQQorZG5sIDYgPSBnbF9QUklOVEZfRElSRUNUSVZFX0YKK2RubCA3ID0gZ2xfUFJJTlRGX0RJUkVDVElWRV9OCitkbmwgOCA9IGdsX1BSSU5URl9ESVJFQ1RJVkVfTFMKK2RubCA5ID0gZ2xfUFJJTlRGX1BPU0lUSU9OUworZG5sIDEwID0gZ2xfUFJJTlRGX0ZMQUdfR1JPVVBJTkcKK2RubCAxMSA9IGdsX1BSSU5URl9GTEFHX0xFRlRBREpVU1QKK2RubCAxMiA9IGdsX1BSSU5URl9GTEFHX1pFUk8KK2RubCAxMyA9IGdsX1BSSU5URl9QUkVDSVNJT04KK2RubCAxNCA9IGdsX1BSSU5URl9FTk9NRU0KK2RubCAxNSA9IGdsX1NOUFJJTlRGX1BSRVNFTkNFCitkbmwgMTYgPSBnbF9TTlBSSU5URl9UUlVOQ0FUSU9OX0M5OQorZG5sIDE3ID0gZ2xfU05QUklOVEZfUkVUVkFMX0M5OQorZG5sIDE4ID0gZ2xfU05QUklOVEZfRElSRUNUSVZFX04KK2RubCAxOSA9IGdsX1NOUFJJTlRGX1NJWkUxCitkbmwgMjAgPSBnbF9WU05QUklOVEZfWkVST1NJWkVfQzk5CitkbmwKK2RubCAxID0gY2hlY2tpbmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgc2l6ZSBzcGVjaWZpZXJzIGFzIGluIEM5OS4uLgorZG5sIDIgPSBjaGVja2luZyB3aGV0aGVyIHByaW50ZiBzdXBwb3J0cyAnbG9uZyBkb3VibGUnIGFyZ3VtZW50cy4uLgorZG5sIDMgPSBjaGVja2luZyB3aGV0aGVyIHByaW50ZiBzdXBwb3J0cyBpbmZpbml0ZSAnZG91YmxlJyBhcmd1bWVudHMuLi4KK2RubCA0ID0gY2hlY2tpbmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgaW5maW5pdGUgJ2xvbmcgZG91YmxlJyBhcmd1bWVudHMuLi4KK2RubCA1ID0gY2hlY2tpbmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgdGhlICdhJyBhbmQgJ0EnIGRpcmVjdGl2ZXMuLi4KK2RubCA2ID0gY2hlY2tpbmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgdGhlICdGJyBkaXJlY3RpdmUuLi4KK2RubCA3ID0gY2hlY2tpbmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgdGhlICduJyBkaXJlY3RpdmUuLi4KK2RubCA4ID0gY2hlY2tpbmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgdGhlICdscycgZGlyZWN0aXZlLi4uCitkbmwgOSA9IGNoZWNraW5nIHdoZXRoZXIgcHJpbnRmIHN1cHBvcnRzIFBPU0lYL1hTSSBmb3JtYXQgc3RyaW5ncyB3aXRoIHBvc2l0aW9ucy4uLgorZG5sIDEwID0gY2hlY2tpbmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgdGhlIGdyb3VwaW5nIGZsYWcuLi4KK2RubCAxMSA9IGNoZWNraW5nIHdoZXRoZXIgcHJpbnRmIHN1cHBvcnRzIHRoZSBsZWZ0LWFkanVzdCBmbGFnIGNvcnJlY3RseS4uLgorZG5sIDEyID0gY2hlY2tpbmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgdGhlIHplcm8gZmxhZyBjb3JyZWN0bHkuLi4KK2RubCAxMyA9IGNoZWNraW5nIHdoZXRoZXIgcHJpbnRmIHN1cHBvcnRzIGxhcmdlIHByZWNpc2lvbnMuLi4KK2RubCAxNCA9IGNoZWNraW5nIHdoZXRoZXIgcHJpbnRmIHN1cnZpdmVzIG91dC1vZi1tZW1vcnkgY29uZGl0aW9ucy4uLgorZG5sIDE1ID0gY2hlY2tpbmcgZm9yIHNucHJpbnRmLi4uCitkbmwgMTYgPSBjaGVja2luZyB3aGV0aGVyIHNucHJpbnRmIHRydW5jYXRlcyB0aGUgcmVzdWx0IGFzIGluIEM5OS4uLgorZG5sIDE3ID0gY2hlY2tpbmcgd2hldGhlciBzbnByaW50ZiByZXR1cm5zIGEgYnl0ZSBjb3VudCBhcyBpbiBDOTkuLi4KK2RubCAxOCA9IGNoZWNraW5nIHdoZXRoZXIgc25wcmludGYgZnVsbHkgc3VwcG9ydHMgdGhlICduJyBkaXJlY3RpdmUuLi4KK2RubCAxOSA9IGNoZWNraW5nIHdoZXRoZXIgc25wcmludGYgcmVzcGVjdHMgYSBzaXplIG9mIDEuLi4KK2RubCAyMCA9IGNoZWNraW5nIHdoZXRoZXIgdnNucHJpbnRmIHJlc3BlY3RzIGEgemVybyBzaXplIGFzIGluIEM5OS4uLgorZG5sCitkbmwgLiA9IHllcywgIyA9IG5vLgorZG5sCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAxOCAxOSAyMAorZG5sICAgZ2xpYmMgMi41ICAgICAgICAgICAgICAgICAgICAgIC4gIC4gIC4gIC4gIC4gIC4gIC4gIC4gIC4gIC4gIC4gIC4gIC4gIC4gIC4gIC4gIC4gIC4gIC4gIC4KK2RubCAgIGdsaWJjIDIuMy42ICAgICAgICAgICAgICAgICAgICAuICAuICAuICAuICAjICAuICAuICAuICAuICAuICAuICAuICAuICAuICAuICAuICAuICAuICAuICAuCitkbmwgICBGcmVlQlNEIDUuNCwgNi4xICAgICAgICAgICAgICAgLiAgLiAgLiAgLiAgIyAgLiAgLiAgLiAgLiAgLiAgLiAgIyAgLiAgIyAgLiAgLiAgLiAgLiAgLiAgLgorZG5sICAgTWFjIE9TIFggMTAuNS44ICAgICAgICAgICAgICAgIC4gIC4gIC4gICMgICMgIC4gIC4gIC4gIC4gIC4gIC4gICMgIC4gIC4gIC4gIC4gIC4gIC4gIC4gIC4KK2RubCAgIE1hYyBPUyBYIDEwLjMuOSAgICAgICAgICAgICAgICAuICAuICAuICAuICAjICAuICAuICAuICAuICAuICAuICAjICAuICAjICAuICAuICAuICAuICAuICAuCitkbmwgICBPcGVuQlNEIDMuOSwgNC4wICAgICAgICAgICAgICAgLiAgLiAgIyAgIyAgIyAgIyAgLiAgIyAgLiAgIyAgLiAgIyAgLiAgIyAgLiAgLiAgLiAgLiAgLiAgLgorZG5sICAgQ3lnd2luIDEuNy4wICgyMDA5KSAgICAgICAgICAgIC4gIC4gIC4gICMgIC4gIC4gIC4gID8gIC4gIC4gIC4gIC4gIC4gID8gIC4gIC4gIC4gIC4gIC4gIC4KK2RubCAgIEN5Z3dpbiAxLjUuMjUgKDIwMDgpICAgICAgICAgICAuICAuICAuICAjICAjICAuICAuICAjICAuICAuICAuICAuICAuICAjICAuICAuICAuICAuICAuICAuCitkbmwgICBDeWd3aW4gMS41LjE5ICgyMDA2KSAgICAgICAgICAgIyAgLiAgLiAgIyAgIyAgIyAgLiAgIyAgLiAgIyAgLiAgIyAgIyAgIyAgLiAgLiAgLiAgLiAgLiAgLgorZG5sICAgU29sYXJpcyAxMSAyMDExLTExICAgICAgICAgICAgIC4gIC4gICMgICMgICMgIC4gIC4gICMgIC4gIC4gIC4gICMgIC4gIC4gIC4gIC4gIC4gIC4gIC4gIC4KK2RubCAgIFNvbGFyaXMgMTAgICAgICAgICAgICAgICAgICAgICAuICAuICAjICAjICAjICAuICAuICAjICAuICAuICAuICAjICAjICAuICAuICAuICAuICAuICAuICAuCitkbmwgICBTb2xhcmlzIDIuNiAuLi4gOSAgICAgICAgICAgICAgIyAgLiAgIyAgIyAgIyAgIyAgLiAgIyAgLiAgLiAgLiAgIyAgIyAgLiAgLiAgLiAgIyAgLiAgLiAgLgorZG5sICAgU29sYXJpcyAyLjUuMSAgICAgICAgICAgICAgICAgICMgIC4gICMgICMgICMgICMgIC4gICMgIC4gIC4gIC4gICMgIC4gIC4gICMgICMgICMgICMgICMgICMKK2RubCAgIEFJWCA3LjEgICAgICAgICAgICAgICAgICAgICAgICAuICAuICAjICAjICAjICAuICAuICAuICAuICAuICAuICAjICAjICAuICAuICAuICAuICAuICAuICAuCitkbmwgICBBSVggNS4yICAgICAgICAgICAgICAgICAgICAgICAgLiAgLiAgIyAgIyAgIyAgLiAgLiAgLiAgLiAgLiAgLiAgIyAgLiAgLiAgLiAgLiAgLiAgLiAgLiAgLgorZG5sICAgQUlYIDQuMy4yLCA1LjEgICAgICAgICAgICAgICAgICMgIC4gICMgICMgICMgICMgIC4gIC4gIC4gIC4gIC4gICMgIC4gIC4gIC4gIC4gICMgIC4gIC4gIC4KK2RubCAgIEhQLVVYIDExLjMxICAgICAgICAgICAgICAgICAgICAuICAuICAuICAuICAjICAuICAuICAuICAuICAuICAuICAjICAuICAuICAuICAuICAjICAjICAuICAuCitkbmwgICBIUC1VWCAxMS57MDAsMTEsMjN9ICAgICAgICAgICAgIyAgLiAgLiAgLiAgIyAgIyAgLiAgLiAgLiAgLiAgLiAgIyAgLiAgLiAgLiAgLiAgIyAgIyAgLiAgIworZG5sICAgSFAtVVggMTAuMjAgICAgICAgICAgICAgICAgICAgICMgIC4gICMgIC4gICMgICMgIC4gID8gIC4gIC4gICMgICMgIC4gIC4gIC4gIC4gICMgICMgID8gICMKK2RubCAgIElSSVggNi41ICAgICAgICAgICAgICAgICAgICAgICAjICAuICAjICAjICAjICAjICAuICAjICAuICAuICAuICAjICAuICAuICAuICAuICAjICAuICAuICAuCitkbmwgICBPU0YvMSA1LjEgICAgICAgICAgICAgICAgICAgICAgIyAgLiAgIyAgIyAgIyAgIyAgLiAgLiAgLiAgLiAgLiAgIyAgLiAgLiAgLiAgLiAgIyAgLiAgLiAgIworZG5sICAgT1NGLzEgNC4wZCAgICAgICAgICAgICAgICAgICAgICMgIC4gICMgICMgICMgICMgIC4gIC4gIC4gIC4gIC4gICMgIC4gIC4gICMgICMgICMgICMgICMgICMKK2RubCAgIE5ldEJTRCA1LjAgICAgICAgICAgICAgICAgICAgICAuICAuICAuICAjICAjICAuICAuICAuICAuICAuICAuICAjICAuICAjICAuICAuICAuICAuICAuICAuCitkbmwgICBOZXRCU0QgNC4wICAgICAgICAgICAgICAgICAgICAgLiAgPyAgPyAgPyAgPyAgPyAgLiAgPyAgLiAgPyAgPyAgPyAgPyAgPyAgLiAgLiAgLiAgPyAgPyAgPworZG5sICAgTmV0QlNEIDMuMCAgICAgICAgICAgICAgICAgICAgIC4gIC4gIC4gIC4gICMgICMgIC4gID8gICMgICMgID8gICMgIC4gICMgIC4gIC4gIC4gIC4gIC4gIC4KK2RubCAgIEhhaWt1ICAgICAgICAgICAgICAgICAgICAgICAgICAuICAuICAuICAjICAjICAjICAuICAjICAuICAuICAuICAuICAuICA/ICAuICAuICA/ICAuICAuICAuCitkbmwgICBCZU9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIyAgLiAgIyAgIyAgIyAgLiAgPyAgIyAgLiAgPyAgLiAgIyAgPyAgLiAgLiAgPyAgLiAgLiAgLgorZG5sICAgb2xkIG1pbmd3IC8gbXN2Y3J0ICAgICAgICAgICAgICMgICMgICMgICMgICMgICMgIC4gIC4gICMgICMgIC4gICMgICMgID8gIC4gICMgICMgICMgIC4gIC4KK2RubCAgIE1TVkMgOSAgICAgICAgICAgICAgICAgICAgICAgICAjICAjICAjICAjICAjICAjICAjICAuICAjICAjICAuICAjICAjICA/ICAjICAjICAjICAjICAuICAuCitkbmwgICBtaW5ndyAyMDA5LTIwMTEgICAgICAgICAgICAgICAgLiAgIyAgLiAgIyAgLiAgLiAgLiAgLiAgIyAgIyAgLiAgLiAgLiAgPyAgLiAgLiAgLiAgLiAgLiAgLgorZG5sICAgbWluZ3ctdzY0IDIwMTEgICAgICAgICAgICAgICAgICMgICMgICMgICMgICMgICMgIC4gIC4gICMgICMgIC4gICMgICMgID8gIC4gICMgICMgICMgIC4gIC4KZGlmZiAtLWdpdCBhL200L3Byb2d0ZXN0Lm00IGIvbTQvcHJvZ3Rlc3QubTQKaW5kZXggYTU2MzY1Yy4uY2UzYWJiYyAxMDA2NDQKLS0tIGEvbTQvcHJvZ3Rlc3QubTQKKysrIGIvbTQvcHJvZ3Rlc3QubTQKQEAgLTEsNSArMSw1IEBACi0jIHByb2d0ZXN0Lm00IHNlcmlhbCA0IChnZXR0ZXh0LTAuMTQuMikKLWRubCBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMywgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgcHJvZ3Rlc3QubTQgc2VyaWFsIDcgKGdldHRleHQtMC4xOC4yKQorZG5sIENvcHlyaWdodCAoQykgMTk5Ni0yMDAzLCAyMDA1LCAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KQEAgLTE2LDcgKzE2LDcgQEAKIGRubCBBdXRob3JzOgogZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTYuCiAKLUFDX1BSRVJFUSgyLjUwKQorQUNfUFJFUkVRKFsyLjUwXSkKIAogIyBTZWFyY2ggcGF0aCBmb3IgYSBwcm9ncmFtIHdoaWNoIHBhc3NlcyB0aGUgZ2l2ZW4gdGVzdC4KIApAQCAtMjcsMTUgKzI3LDE0IEBACiAjIFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuCiAjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KIGlmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCi0gIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKLSAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAotICBjaG1vZCAreCBjb25mJCQuc2gKLSAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICBQQVRIX1NFUEFSQVRPUj0nOycKLSAgZWxzZQotICAgIFBBVEhfU0VQQVJBVE9SPToKLSAgZmkKLSAgcm0gLWYgY29uZiQkLnNoCisgICMgRGV0ZXJtaW5lIFBBVEhfU0VQQVJBVE9SIGJ5IHRyeWluZyB0byBmaW5kIC9iaW4vc2ggaW4gYSBQQVRIIHdoaWNoCisgICMgY29udGFpbnMgb25seSAvYmluLiBOb3RlIHRoYXQga3NoIGxvb2tzIGFsc28gYXQgdGhlIEZQQVRIIHZhcmlhYmxlLAorICAjIHNvIHdlIGhhdmUgdG8gc2V0IHRoYXQgYXMgd2VsbCBmb3IgdGhlIHRlc3QuCisgIFBBVEhfU0VQQVJBVE9SPToKKyAgKFBBVEg9Jy9iaW47L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgXAorICAgICYmIHsgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgXAorICAgICAgICAgICB8fCBQQVRIX1NFUEFSQVRPUj0nOycKKyAgICAgICB9CiBmaQogCiAjIEZpbmQgb3V0IGhvdyB0byB0ZXN0IGZvciBleGVjdXRhYmxlIGZpbGVzLiBEb24ndCB1c2UgYSB6ZXJvLWJ5dGUgZmlsZSwKQEAgLTU1LDcgKzU0LDcgQEAKICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJDIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgogc2V0IGR1bW15ICQyOyBhY193b3JkPVskXTIKIEFDX01TR19DSEVDS0lORyhbZm9yICRhY193b3JkXSkKLUFDX0NBQ0hFX1ZBTChhY19jdl9wYXRoXyQxLAorQUNfQ0FDSEVfVkFMKFthY19jdl9wYXRoXyQxXSwKIFtjYXNlICJbJF0kMSIgaW4KICAgW1tcXC9dXSogfCA/OltbXFwvXV0qKQogICAgIGFjX2N2X3BhdGhfJDE9IlskXSQxIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KQEAgLTg0LDkgKzgzLDkgQEAKIGVzYWNdKWRubAogJDE9IiRhY19jdl9wYXRoXyQxIgogaWYgdGVzdCBpZmVsc2UoWyQ0XSwgLCBbLW4gIlskXSQxIl0sIFsiWyRdJDEiICE9ICIkNCJdKTsgdGhlbgotICBBQ19NU0dfUkVTVUxUKFskXSQxKQorICBBQ19NU0dfUkVTVUxUKFskXVskMV0pCiBlbHNlCi0gIEFDX01TR19SRVNVTFQobm8pCisgIEFDX01TR19SRVNVTFQoW25vXSkKIGZpCi1BQ19TVUJTVCgkMSlkbmwKK0FDX1NVQlNUKFskMV0pZG5sCiBdKQpkaWZmIC0tZ2l0IGEvbTQvcXVvdGUubTQgYi9tNC9xdW90ZS5tNAppbmRleCBjYTY2YjUzLi43YjA1NTg0IDEwMDY0NAotLS0gYS9tNC9xdW90ZS5tNAorKysgYi9tNC9xdW90ZS5tNApAQCAtMSwxNCArMSwxMyBAQAotIyBxdW90ZS5tNCBzZXJpYWwgNAotZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgcXVvdGUubTQgc2VyaWFsIDYKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMywgMjAwNS0yMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorZG5sIEluYy4KIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiBkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCiBBQ19ERUZVTihbZ2xfUVVPVEVdLAogWwotICBBQ19MSUJTT1VSQ0VTKFtxdW90ZS5jLCBxdW90ZS5oXSkKLSAgQUNfTElCT0JKKFtxdW90ZV0pCi0KICAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL3F1b3RlLmMuCiAgIGRubCAobm9uZSkKKyAgOgogXSkKZGlmZiAtLWdpdCBhL200L3F1b3RlYXJnLm00IGIvbTQvcXVvdGVhcmcubTQKaW5kZXggOThhZTEzMy4uMDljMzZiYiAxMDA2NDQKLS0tIGEvbTQvcXVvdGVhcmcubTQKKysrIGIvbTQvcXVvdGVhcmcubTQKQEAgLTEsMTcgKzEsMTAgQEAKLSMgcXVvdGVhcmcubTQgc2VyaWFsIDQKLWRubCBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIHF1b3RlYXJnLm00IHNlcmlhbCA5CitkbmwgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAogQUNfREVGVU4oW2dsX1FVT1RFQVJHXSwKIFsKLSAgQUNfTElCU09VUkNFUyhbcXVvdGVhcmcuYywgcXVvdGVhcmcuaF0pCi0gIEFDX0xJQk9CSihbcXVvdGVhcmddKQotCi0gIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9xdW90ZWFyZy5jLgotICBBQ19DSEVDS19IRUFERVJTX09OQ0Uod2NoYXIuaCB3Y3R5cGUuaCkKLSAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShpc3dwcmludCBtYnNpbml0KQotICBBQ19UWVBFX01CU1RBVEVfVAotICBnbF9GVU5DX01CUlRPV0MKKyAgOgogXSkKZGlmZiAtLWdpdCBhL200L3JhaXNlLm00IGIvbTQvcmFpc2UubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVlOWZjNAotLS0gL2Rldi9udWxsCisrKyBiL200L3JhaXNlLm00CkBAIC0wLDAgKzEsMzQgQEAKKyMgcmFpc2UubTQgc2VyaWFsIDMKK2RubCBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ2xfRlVOQ19SQUlTRV0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1NJR05BTF9IX0RFRkFVTFRTXSkKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorICBBQ19SRVFVSVJFKFtnbF9NU1ZDX0lOVkFMXSkKKyAgQUNfQ0hFQ0tfRlVOQ1MoW3JhaXNlXSkKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19yYWlzZSA9IG5vOyB0aGVuCisgICAgSEFWRV9SQUlTRT0wCisgIGVsc2UKKyAgICBpZiB0ZXN0ICRIQVZFX01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUiA9IDE7IHRoZW4KKyAgICAgIFJFUExBQ0VfUkFJU0U9MQorICAgIGZpCisgICAgbTRfaWZkZWYoW2dsX1NJR05BTEJMT0NLSU5HXSwgWworICAgICAgZ2xfU0lHTkFMQkxPQ0tJTkcKKyAgICAgIGlmIHRlc3QgJEhBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkcgPSAwOyB0aGVuCisgICAgICAgIG00X2lmZGVmKFtnbF9TSUdOQUxfU0lHUElQRV0sIFsKKyAgICAgICAgICBnbF9TSUdOQUxfU0lHUElQRQorICAgICAgICAgIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9zaWduYWxfaF9TSUdQSVBFICE9IHllczsgdGhlbgorICAgICAgICAgICAgUkVQTEFDRV9SQUlTRT0xCisgICAgICAgICAgZmkKKyAgICAgICAgXSwgWzpdKQorICAgICAgZmkKKyAgICBdKQorICBmaQorXSkKKworIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9yYWlzZS5jLgorQUNfREVGVU4oW2dsX1BSRVJFUV9SQUlTRV0sIFs6XSkKZGlmZiAtLWdpdCBhL200L3Jhd21lbWNoci5tNCBiL200L3Jhd21lbWNoci5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTMwMTY0Ci0tLSAvZGV2L251bGwKKysrIGIvbTQvcmF3bWVtY2hyLm00CkBAIC0wLDAgKzEsMjAgQEAKKyMgcmF3bWVtY2hyLm00IHNlcmlhbCAyCitkbmwgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0ZVTkNfUkFXTUVNQ0hSXSwKK1sKKyAgZG5sIFBlcnN1YWRlIGdsaWJjIDxzdHJpbmcuaD4gdG8gZGVjbGFyZSByYXdtZW1jaHIoKS4KKyAgQUNfUkVRVUlSRShbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSkKKworICBBQ19SRVFVSVJFKFtnbF9IRUFERVJfU1RSSU5HX0hfREVGQVVMVFNdKQorICBBQ19DSEVDS19GVU5DUyhbcmF3bWVtY2hyXSkKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19yYXdtZW1jaHIgPSBubzsgdGhlbgorICAgIEhBVkVfUkFXTUVNQ0hSPTAKKyAgZmkKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvc3RyY2hybnVsLmMuCitBQ19ERUZVTihbZ2xfUFJFUkVRX1JBV01FTUNIUl0sIFs6XSkKZGlmZiAtLWdpdCBhL200L3JlYWxsb2MubTQgYi9tNC9yZWFsbG9jLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NGMyZjAKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9yZWFsbG9jLm00CkBAIC0wLDAgKzEsNzYgQEAKKyMgcmVhbGxvYy5tNCBzZXJpYWwgMTMKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCittNF92ZXJzaW9uX3ByZXJlcShbMi43MF0sIFtdICxbCisKKyMgVGhpcyBpcyB0YWtlbiBmcm9tIHRoZSBmb2xsb3dpbmcgQXV0b2NvbmYgcGF0Y2g6CisjIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9YXV0b2NvbmYuZ2l0O2E9Y29tbWl0ZGlmZjtoPTdmYmI1NTM3MjdlZDdlMGU2ODlhMTc1OTRiNTg1NTllY2YzZWE2ZTkKK0FDX0RFRlVOKFtfQUNfRlVOQ19SRUFMTE9DX0lGXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKWRubAorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sIGZvciBjcm9zcy1jb21waWxlcworICBBQ19DSEVDS19IRUFERVJTKFtzdGRsaWIuaF0pCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgR05VIGxpYmMgY29tcGF0aWJsZSByZWFsbG9jXSwKKyAgICBbYWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbF0sCisgICAgW0FDX1JVTl9JRkVMU0UoCisgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICBbWyNpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIEhBVkVfU1RETElCX0gKKyAgICAgICAgICAgICMgaW5jbHVkZSA8c3RkbGliLmg+CisgICAgICAgICAgICAjZWxzZQorICAgICAgICAgICAgY2hhciAqcmVhbGxvYyAoKTsKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgIF1dLAorICAgICAgICAgIFtbcmV0dXJuICEgcmVhbGxvYyAoMCwgMCk7XV0pCisgICAgICAgXSwKKyAgICAgICBbYWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbD15ZXNdLAorICAgICAgIFthY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsPW5vXSwKKyAgICAgICBbY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gcGxhdGZvcm1zIHdoZXJlIHdlIGtub3cgdGhlIHJlc3VsdC4KKyAgICAgICAgICAqLWdudSogfCBmcmVlYnNkKiB8IG5ldGJzZCogfCBvcGVuYnNkKiBcCisgICAgICAgICAgfCBocHV4KiB8IHNvbGFyaXMqIHwgY3lnd2luKiB8IG1pbmd3KikKKyAgICAgICAgICAgIGFjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGw9eWVzIDs7CisgICAgICAgICAgIyBJZiB3ZSBkb24ndCBrbm93LCBhc3N1bWUgdGhlIHdvcnN0LgorICAgICAgICAgICopIGFjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGw9bm8gOzsKKyAgICAgICAgZXNhYworICAgICAgIF0pCisgICAgXSkKKyAgQVNfSUYoW3Rlc3QgJGFjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGwgPSB5ZXNdLCBbJDFdLCBbJDJdKQorXSkjIEFDX0ZVTkNfUkVBTExPQworCitdKQorCisjIGdsX0ZVTkNfUkVBTExPQ19HTlUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0IHdoZXRoZXIgJ3JlYWxsb2MgKDAsIDApJyBpcyBoYW5kbGVkIGxpa2UgaW4gR05VIGxpYmMsIGFuZCByZXBsYWNlCisjIHJlYWxsb2MgaWYgaXQgaXMgbm90LgorQUNfREVGVU4oW2dsX0ZVTkNfUkVBTExPQ19HTlVdLAorWworICBBQ19SRVFVSVJFKFtnbF9TVERMSUJfSF9ERUZBVUxUU10pCisgIGRubCBfQUNfRlVOQ19SRUFMTE9DX0lGIGlzIGRlZmluZWQgaW4gQXV0b2NvbmYuCisgIF9BQ19GVU5DX1JFQUxMT0NfSUYoCisgICAgW0FDX0RFRklORShbSEFWRV9SRUFMTE9DX0dOVV0sIFsxXSwKKyAgICAgICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3VyIHN5c3RlbSBoYXMgYSBHTlUgbGliYyBjb21wYXRpYmxlICdyZWFsbG9jJworICAgICAgICAgICAgICAgIGZ1bmN0aW9uLCBhbmQgdG8gMCBvdGhlcndpc2UuXSldLAorICAgIFtBQ19ERUZJTkUoW0hBVkVfUkVBTExPQ19HTlVdLCBbMF0pCisgICAgIFJFUExBQ0VfUkVBTExPQz0xCisgICAgXSkKK10pIyBnbF9GVU5DX1JFQUxMT0NfR05VCisKKyMgZ2xfRlVOQ19SRUFMTE9DX1BPU0lYCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0IHdoZXRoZXIgJ3JlYWxsb2MnIGlzIFBPU0lYIGNvbXBsaWFudCAoc2V0cyBlcnJubyB0byBFTk9NRU0gd2hlbiBpdAorIyBmYWlscyksIGFuZCByZXBsYWNlIHJlYWxsb2MgaWYgaXQgaXMgbm90LgorQUNfREVGVU4oW2dsX0ZVTkNfUkVBTExPQ19QT1NJWF0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1NURExJQl9IX0RFRkFVTFRTXSkKKyAgQUNfUkVRVUlSRShbZ2xfQ0hFQ0tfTUFMTE9DX1BPU0lYXSkKKyAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19tYWxsb2NfcG9zaXggPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoW0hBVkVfUkVBTExPQ19QT1NJWF0sIFsxXSwKKyAgICAgIFtEZWZpbmUgaWYgdGhlICdyZWFsbG9jJyBmdW5jdGlvbiBpcyBQT1NJWCBjb21wbGlhbnQuXSkKKyAgZWxzZQorICAgIFJFUExBQ0VfUkVBTExPQz0xCisgIGZpCitdKQpkaWZmIC0tZ2l0IGEvbTQvc2NoZWRfaC5tNCBiL200L3NjaGVkX2gubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM0NjE0NgotLS0gL2Rldi9udWxsCisrKyBiL200L3NjaGVkX2gubTQKQEAgLTAsMCArMSw0MCBAQAorIyBzY2hlZF9oLm00IHNlcmlhbCA2CitkbmwgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlLgorCitBQ19ERUZVTihbZ2xfU0NIRURfSF0sCitbCisgIEFDX0NPTVBJTEVfSUZFTFNFKAorICAgIFtBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAjaW5jbHVkZSA8c2NoZWQuaD4KKyAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gYTsKKyAgICAgICBpbnQgYltdID0geyBTQ0hFRF9GSUZPLCBTQ0hFRF9SUiwgU0NIRURfT1RIRVIgfTsKKyAgICAgICBwaWRfdCB0MTsKKyAgICAgXV0pXSwKKyAgICBbU0NIRURfSD0nJ10sCisgICAgW1NDSEVEX0g9J3NjaGVkLmgnCisKKyAgICAgZ2xfQ0hFQ0tfTkVYVF9IRUFERVJTKFtzY2hlZC5oXSkKKworICAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc2NoZWRfaCA9IHllczsgdGhlbgorICAgICAgIEhBVkVfU0NIRURfSD0xCisgICAgIGVsc2UKKyAgICAgICBIQVZFX1NDSEVEX0g9MAorICAgICBmaQorICAgICBBQ19TVUJTVChbSEFWRV9TQ0hFRF9IXSkKKworICAgICBBQ19DSEVDS19UWVBFKFtzdHJ1Y3Qgc2NoZWRfcGFyYW1dLAorICAgICAgIFtIQVZFX1NUUlVDVF9TQ0hFRF9QQVJBTT0xXSwgW0hBVkVfU1RSVUNUX1NDSEVEX1BBUkFNPTBdLAorICAgICAgIFsjaW5jbHVkZSA8c2NoZWQuaD5dKQorICAgICBBQ19TVUJTVChbSEFWRV9TVFJVQ1RfU0NIRURfUEFSQU1dKQorCisgICAgIGRubCBFbnN1cmUgdGhlIHR5cGUgcGlkX3QgZ2V0cyBkZWZpbmVkLgorICAgICBBQ19SRVFVSVJFKFtBQ19UWVBFX1BJRF9UXSkKKyAgICBdKQorICBBQ19TVUJTVChbU0NIRURfSF0pCisgIEFNX0NPTkRJVElPTkFMKFtHTF9HRU5FUkFURV9TQ0hFRF9IXSwgW3Rlc3QgLW4gIiRTQ0hFRF9IIl0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvc2V0ZW52Lm00IGIvbTQvc2V0ZW52Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxOTMxZTcKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9zZXRlbnYubTQKQEAgLTAsMCArMSwxNjAgQEAKKyMgc2V0ZW52Lm00IHNlcmlhbCAyNgorZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDA0LCAyMDA2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0ZVTkNfU0VURU5WXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfRlVOQ19TRVRFTlZfU0VQQVJBVEVdKQorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pIGRubCBmb3IgY3Jvc3MtY29tcGlsZXMKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zZXRlbnYgPSBubzsgdGhlbgorICAgIEhBVkVfU0VURU5WPTAKKyAgZWxzZQorICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHNldGVudiB2YWxpZGF0ZXMgYXJndW1lbnRzXSwKKyAgICAgIFtnbF9jdl9mdW5jX3NldGVudl93b3Jrc10sCisgICAgICBbQUNfUlVOX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAgICAgICNpbmNsdWRlIDxlcnJuby5oPgorICAgICAgICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAgICAgIF1dLCBbWworICAgICAgIGludCByZXN1bHQgPSAwOworICAgICAgIHsKKyAgICAgICAgIGlmIChzZXRlbnYgKCIiLCAiIiwgMCkgIT0gLTEpCisgICAgICAgICAgIHJlc3VsdCB8PSAxOworICAgICAgICAgZWxzZSBpZiAoZXJybm8gIT0gRUlOVkFMKQorICAgICAgICAgICByZXN1bHQgfD0gMjsKKyAgICAgICB9CisgICAgICAgeworICAgICAgICAgaWYgKHNldGVudiAoImEiLCAiPSIsIDEpICE9IDApCisgICAgICAgICAgIHJlc3VsdCB8PSA0OworICAgICAgICAgZWxzZSBpZiAoc3RyY21wIChnZXRlbnYgKCJhIiksICI9IikgIT0gMCkKKyAgICAgICAgICAgcmVzdWx0IHw9IDg7CisgICAgICAgfQorICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICBdXSldLAorICAgICAgW2dsX2N2X2Z1bmNfc2V0ZW52X3dvcmtzPXllc10sIFtnbF9jdl9mdW5jX3NldGVudl93b3Jrcz1ub10sCisgICAgICBbY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIGdsaWJjIHN5c3RlbXMuCisgICAgICAgICAqLWdudSopIGdsX2N2X2Z1bmNfc2V0ZW52X3dvcmtzPSJndWVzc2luZyB5ZXMiIDs7CisgICAgICAgICAgICAgICAgICMgSWYgd2UgZG9uJ3Qga25vdywgYXNzdW1lIHRoZSB3b3JzdC4KKyAgICAgICAgICopICAgICAgZ2xfY3ZfZnVuY19zZXRlbnZfd29ya3M9Imd1ZXNzaW5nIG5vIiA7OworICAgICAgIGVzYWMKKyAgICAgIF0pXSkKKyAgICBjYXNlICIkZ2xfY3ZfZnVuY19zZXRlbnZfd29ya3MiIGluCisgICAgICAqeWVzKSA7OworICAgICAgKikKKyAgICAgICAgUkVQTEFDRV9TRVRFTlY9MQorICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKK10pCisKKyMgTGlrZSBnbF9GVU5DX1NFVEVOViwgZXhjZXB0IHByZXBhcmUgZm9yIHNlcGFyYXRlIGNvbXBpbGF0aW9uCisjIChubyBSRVBMQUNFX1NFVEVOViwgbm8gQUNfTElCT0JKKS4KK0FDX0RFRlVOKFtnbF9GVU5DX1NFVEVOVl9TRVBBUkFURV0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1NURExJQl9IX0RFRkFVTFRTXSkKKyAgQUNfQ0hFQ0tfREVDTFNfT05DRShbc2V0ZW52XSkKKyAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3NldGVudiA9IG5vOyB0aGVuCisgICAgSEFWRV9ERUNMX1NFVEVOVj0wCisgIGZpCisgIEFDX0NIRUNLX0ZVTkNTX09OQ0UoW3NldGVudl0pCisgIGdsX1BSRVJFUV9TRVRFTlYKK10pCisKK0FDX0RFRlVOKFtnbF9GVU5DX1VOU0VURU5WXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfU1RETElCX0hfREVGQVVMVFNdKQorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pIGRubCBmb3IgY3Jvc3MtY29tcGlsZXMKKyAgQUNfQ0hFQ0tfREVDTFNfT05DRShbdW5zZXRlbnZdKQorICBpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfdW5zZXRlbnYgPSBubzsgdGhlbgorICAgIEhBVkVfREVDTF9VTlNFVEVOVj0wCisgIGZpCisgIEFDX0NIRUNLX0ZVTkNTKFt1bnNldGVudl0pCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfdW5zZXRlbnYgPSBubzsgdGhlbgorICAgIEhBVkVfVU5TRVRFTlY9MAorICBlbHNlCisgICAgSEFWRV9VTlNFVEVOVj0xCisgICAgZG5sIFNvbWUgQlNEcyByZXR1cm4gdm9pZCwgZmFpbGluZyB0byBkbyBlcnJvciBjaGVja2luZy4KKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIHVuc2V0ZW52KCkgcmV0dXJuIHR5cGVdLCBbZ3RfY3ZfZnVuY191bnNldGVudl9yZXRdLAorICAgICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgIFtbCisjdW5kZWYgX0JTRAorI2RlZmluZSBfQlNEIDEgLyogdW5oaWRlIHVuc2V0ZW52IGRlY2xhcmF0aW9uIGluIE9TRi8xIDUuMSA8c3RkbGliLmg+ICovCisjaW5jbHVkZSA8c3RkbGliLmg+CitleHRlcm4KKyNpZmRlZiBfX2NwbHVzcGx1cworIkMiCisjZW5kaWYKK2ludCB1bnNldGVudiAoY29uc3QgY2hhciAqbmFtZSk7CisgICAgICAgICAgICBdXSwKKyAgICAgICAgICAgIFtbXV0pXSwKKyAgICAgICAgIFtndF9jdl9mdW5jX3Vuc2V0ZW52X3JldD0naW50J10sCisgICAgICAgICBbZ3RfY3ZfZnVuY191bnNldGVudl9yZXQ9J3ZvaWQnXSldKQorICAgIGlmIHRlc3QgJGd0X2N2X2Z1bmNfdW5zZXRlbnZfcmV0ID0gJ3ZvaWQnOyB0aGVuCisgICAgICBBQ19ERUZJTkUoW1ZPSURfVU5TRVRFTlZdLCBbMV0sIFtEZWZpbmUgdG8gMSBpZiB1bnNldGVudiByZXR1cm5zIHZvaWQKKyAgICAgICBpbnN0ZWFkIG9mIGludC5dKQorICAgICAgUkVQTEFDRV9VTlNFVEVOVj0xCisgICAgZmkKKworICAgIGRubCBTb2xhcmlzIDEwIHVuc2V0ZW52IGRvZXMgbm90IHJlbW92ZSBhbGwgY29waWVzIG9mIGEgbmFtZS4KKyAgICBkbmwgSGFpa3UgYWxwaGEgMiB1bnNldGVudiBnZXRzIGNvbmZ1c2VkIGJ5IGFzc2lnbm1lbnQgdG8gZW52aXJvbi4KKyAgICBkbmwgT3BlbkJTRCA0LjcgdW5zZXRlbnYoIiIpIGRvZXMgbm90IGZhaWwuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdW5zZXRlbnYgb2JleXMgUE9TSVhdLAorICAgICAgW2dsX2N2X2Z1bmNfdW5zZXRlbnZfd29ya3NdLAorICAgICAgW0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworICAgICAgICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAgICAgICAjaW5jbHVkZSA8ZXJybm8uaD4KKyAgICAgICBleHRlcm4gY2hhciAqKmVudmlyb247CisgICAgICBdXSwgW1sKKyAgICAgICBjaGFyIGVudHJ5MVtdID0gImE9MSI7CisgICAgICAgY2hhciBlbnRyeTJbXSA9ICJiPTIiOworICAgICAgIGNoYXIgKmVudltdID0geyBlbnRyeTEsIGVudHJ5MiwgTlVMTCB9OworICAgICAgIGlmIChwdXRlbnYgKChjaGFyICopICJhPTEiKSkgcmV0dXJuIDE7CisgICAgICAgaWYgKHB1dGVudiAoZW50cnkyKSkgcmV0dXJuIDI7CisgICAgICAgZW50cnkyWzBdID0gJ2EnOworICAgICAgIHVuc2V0ZW52ICgiYSIpOworICAgICAgIGlmIChnZXRlbnYgKCJhIikpIHJldHVybiAzOworICAgICAgIGlmICghdW5zZXRlbnYgKCIiKSB8fCBlcnJubyAhPSBFSU5WQUwpIHJldHVybiA0OworICAgICAgIGVudHJ5MlswXSA9ICdiJzsKKyAgICAgICBlbnZpcm9uID0gZW52OworICAgICAgIGlmICghZ2V0ZW52ICgiYSIpKSByZXR1cm4gNTsKKyAgICAgICBlbnRyeTJbMF0gPSAnYSc7CisgICAgICAgdW5zZXRlbnYgKCJhIik7CisgICAgICAgaWYgKGdldGVudiAoImEiKSkgcmV0dXJuIDY7CisgICAgICBdXSldLAorICAgICAgW2dsX2N2X2Z1bmNfdW5zZXRlbnZfd29ya3M9eWVzXSwgW2dsX2N2X2Z1bmNfdW5zZXRlbnZfd29ya3M9bm9dLAorICAgICAgW2Nhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBnbGliYyBzeXN0ZW1zLgorICAgICAgICAgKi1nbnUqKSBnbF9jdl9mdW5jX3Vuc2V0ZW52X3dvcmtzPSJndWVzc2luZyB5ZXMiIDs7CisgICAgICAgICAgICAgICAgICMgSWYgd2UgZG9uJ3Qga25vdywgYXNzdW1lIHRoZSB3b3JzdC4KKyAgICAgICAgICopICAgICAgZ2xfY3ZfZnVuY191bnNldGVudl93b3Jrcz0iZ3Vlc3Npbmcgbm8iIDs7CisgICAgICAgZXNhYworICAgICAgXSldKQorICAgIGNhc2UgIiRnbF9jdl9mdW5jX3Vuc2V0ZW52X3dvcmtzIiBpbgorICAgICAgKnllcykgOzsKKyAgICAgICopCisgICAgICAgIFJFUExBQ0VfVU5TRVRFTlY9MQorICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvc2V0ZW52LmMuCitBQ19ERUZVTihbZ2xfUFJFUkVRX1NFVEVOVl0sCitbCisgIEFDX1JFUVVJUkUoW0FDX0ZVTkNfQUxMT0NBXSkKKyAgQUNfUkVRVUlSRShbZ2xfRU5WSVJPTl0pCisgIEFDX0NIRUNLX0hFQURFUlNfT05DRShbdW5pc3RkLmhdKQorICBBQ19DSEVDS19IRUFERVJTKFtzZWFyY2guaF0pCisgIEFDX0NIRUNLX0ZVTkNTKFt0c2VhcmNoXSkKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvdW5zZXRlbnYuYy4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfVU5TRVRFTlZdLAorWworICBBQ19SRVFVSVJFKFtnbF9FTlZJUk9OXSkKKyAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKFt1bmlzdGQuaF0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvc2lnX2F0b21pY190Lm00IGIvbTQvc2lnX2F0b21pY190Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZGEzNTYKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9zaWdfYXRvbWljX3QubTQKQEAgLTAsMCArMSwxNCBAQAorIyBzaWdfYXRvbWljX3QubTQgc2VyaWFsIDMKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ3RfVFlQRV9TSUdfQVRPTUlDX1RdLAorWworICBBQ19DSEVDS19UWVBFUyhbc2lnX2F0b21pY190XSwgLAorICAgIFtBQ19ERUZJTkUoW3NpZ19hdG9taWNfdF0sIFtpbnRdLAorICAgICAgIFtEZWZpbmUgYXMgYW4gaW50ZWdlciB0eXBlIHN1aXRhYmxlIGZvciBtZW1vcnkgbG9jYXRpb25zIHRoYXQgY2FuIGJlCisgICAgICAgIGFjY2Vzc2VkIGF0b21pY2FsbHkgZXZlbiBpbiB0aGUgcHJlc2VuY2Ugb2YgYXN5bmNocm9ub3VzIHNpZ25hbHMuXSldLAorICAgIFsjaW5jbHVkZSA8c2lnbmFsLmg+XSkKK10pCmRpZmYgLS1naXQgYS9tNC9zaWdhY3Rpb24ubTQgYi9tNC9zaWdhY3Rpb24ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThiZmQwMwotLS0gL2Rldi9udWxsCisrKyBiL200L3NpZ2FjdGlvbi5tNApAQCAtMCwwICsxLDQwIEBACisjIHNpZ2FjdGlvbi5tNCBzZXJpYWwgNworZG5sIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgRGV0ZXJtaW5lIGlmIHNpZ2FjdGlvbiBpbnRlcmZhY2UgaXMgcHJlc2VudC4KK0FDX0RFRlVOKFtnbF9TSUdBQ1RJT05dLAorWworICBBQ19SRVFVSVJFKFtnbF9TSUdOQUxfSF9ERUZBVUxUU10pCisgIEFDX0NIRUNLX0ZVTkNTX09OQ0UoW3NpZ2FjdGlvbl0pCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfc2lnYWN0aW9uID0geWVzOyB0aGVuCisgICAgQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IHNpZ2FjdGlvbi5zYV9zaWdhY3Rpb25dLCAsICwKKyAgICAgICAgICAgICAgICAgICAgIFtbI2luY2x1ZGUgPHNpZ25hbC5oPl1dKQorICAgIGlmIHRlc3QgJGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc2lnYWN0aW9uX3NhX3NpZ2FjdGlvbiA9IG5vOyB0aGVuCisgICAgICBIQVZFX1NUUlVDVF9TSUdBQ1RJT05fU0FfU0lHQUNUSU9OPTAKKyAgICBmaQorICBlbHNlCisgICAgSEFWRV9TSUdBQ1RJT049MAorICBmaQorXSkKKworIyBQcmVyZXF1aXNpdGVzIG9mIHRoZSBwYXJ0IG9mIGxpYi9zaWduYWwuaW4uaCBhbmQgb2YgbGliL3NpZ2FjdGlvbi5jLgorQUNfREVGVU4oW2dsX1BSRVJFUV9TSUdBQ1RJT05dLAorWworICBBQ19SRVFVSVJFKFtnbF9TSUdOQUxfSF9ERUZBVUxUU10pCisgIEFDX1JFUVVJUkUoW0FDX0NfUkVTVFJJQ1RdKQorICBBQ19SRVFVSVJFKFtBQ19UWVBFX1VJRF9UXSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJFUkVRX1NJR19IQU5ETEVSX0hdKQorICBBQ19DSEVDS19GVU5DU19PTkNFKFtzaWdhbHRzdGFjayBzaWdpbnRlcnJ1cHRdKQorICBBQ19DSEVDS19UWVBFUyhbc2lnaW5mb190XSwgW10sIFtdLCBbWworI2luY2x1ZGUgPHNpZ25hbC5oPgorICBdXSkKKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9zaWdpbmZvX3QgPSBubzsgdGhlbgorICAgIEhBVkVfU0lHSU5GT19UPTAKKyAgZmkKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvc2lnLWhhbmRsZXIuaC4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfU0lHX0hBTkRMRVJfSF0sIFs6XSkKZGlmZiAtLWdpdCBhL200L3NpZ25hbF9oLm00IGIvbTQvc2lnbmFsX2gubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0ZDczMAotLS0gL2Rldi9udWxsCisrKyBiL200L3NpZ25hbF9oLm00CkBAIC0wLDAgKzEsODMgQEAKKyMgc2lnbmFsX2gubTQgc2VyaWFsIDE4CitkbmwgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX1NJR05BTF9IXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfU0lHTkFMX0hfREVGQVVMVFNdKQorICBBQ19SRVFVSVJFKFtnbF9DSEVDS19UWVBFX1NJR1NFVF9UXSkKKyAgZ2xfTkVYVF9IRUFERVJTKFtzaWduYWwuaF0pCisKKyMgQUlYIGRlY2xhcmVzIHNpZ19hdG9taWNfdCB0byBhbHJlYWR5IGluY2x1ZGUgdm9sYXRpbGUsIGFuZCBDODkgY29tcGlsZXJzCisjIHRoZW4gY2hva2Ugb24gJ3ZvbGF0aWxlIHNpZ19hdG9taWNfdCcuICBDOTkgcmVxdWlyZXMgdGhhdCBpdCBjb21waWxlLgorICBBQ19DSEVDS19UWVBFKFt2b2xhdGlsZSBzaWdfYXRvbWljX3RdLCBbXSwKKyAgICBbSEFWRV9UWVBFX1ZPTEFUSUxFX1NJR19BVE9NSUNfVD0wXSwgW1sKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyAgICBdXSkKKworICBkbmwgRW5zdXJlIHRoZSB0eXBlIHBpZF90IGdldHMgZGVmaW5lZC4KKyAgQUNfUkVRVUlSRShbQUNfVFlQRV9QSURfVF0pCisKKyAgQUNfUkVRVUlSRShbQUNfVFlQRV9VSURfVF0pCisKKyAgZG5sIFBlcnN1YWRlIGdsaWJjIDxzaWduYWwuaD4gdG8gZGVmaW5lIHNpZ2hhbmRsZXJfdC4KKyAgQUNfUkVRVUlSRShbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSkKKyAgQUNfQ0hFQ0tfVFlQRShbc2lnaGFuZGxlcl90XSwgW10sIFtIQVZFX1NJR0hBTkRMRVJfVD0wXSwgW1sKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyAgICBdXSkKKworICBkbmwgQ2hlY2sgZm9yIGRlY2xhcmF0aW9ucyBvZiBhbnl0aGluZyB3ZSB3YW50IHRvIHBvaXNvbiBpZiB0aGUKKyAgZG5sIGNvcnJlc3BvbmRpbmcgZ251bGliIG1vZHVsZSBpcyBub3QgaW4gdXNlLgorICBnbF9XQVJOX09OX1VTRV9QUkVQQVJFKFtbI2luY2x1ZGUgPHNpZ25hbC5oPgorICAgIF1dLCBbcHRocmVhZF9zaWdtYXNrIHNpZ2FjdGlvbgorICAgIHNpZ2FkZHNldCBzaWdkZWxzZXQgc2lnZW1wdHlzZXQgc2lnZmlsbHNldCBzaWdpc21lbWJlcgorICAgIHNpZ3BlbmRpbmcgc2lncHJvY21hc2tdKQorXSkKKworQUNfREVGVU4oW2dsX0NIRUNLX1RZUEVfU0lHU0VUX1RdLAorWworICBBQ19DSEVDS19UWVBFUyhbc2lnc2V0X3RdLAorICAgIFtnbF9jdl90eXBlX3NpZ3NldF90PXllc10sIFtnbF9jdl90eXBlX3NpZ3NldF90PW5vXSwKKyAgICBbWworICAgICAgI2luY2x1ZGUgPHNpZ25hbC5oPgorICAgICAgLyogTWluZ3cgZGVmaW5lcyBzaWdzZXRfdCBub3QgaW4gPHNpZ25hbC5oPiwgYnV0IGluIDxzeXMvdHlwZXMuaD4uICAqLworICAgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgIF1dKQorICBpZiB0ZXN0ICRnbF9jdl90eXBlX3NpZ3NldF90ICE9IHllczsgdGhlbgorICAgIEhBVkVfU0lHU0VUX1Q9MAorICBmaQorXSkKKworQUNfREVGVU4oW2dsX1NJR05BTF9NT0RVTEVfSU5ESUNBVE9SXSwKK1sKKyAgZG5sIFVzZSBBQ19SRVFVSVJFIGhlcmUsIHNvIHRoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGV4cGFuZGVkIG9uY2Ugb25seS4KKyAgQUNfUkVRVUlSRShbZ2xfU0lHTkFMX0hfREVGQVVMVFNdKQorICBnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRShbJDFdKQorICBkbmwgRGVmaW5lIGl0IGFsc28gYXMgYSBDIG1hY3JvLCBmb3IgdGhlIGJlbmVmaXQgb2YgdGhlIHVuaXQgdGVzdHMuCisgIGdsX01PRFVMRV9JTkRJQ0FUT1JfRk9SX1RFU1RTKFskMV0pCitdKQorCitBQ19ERUZVTihbZ2xfU0lHTkFMX0hfREVGQVVMVFNdLAorWworICBHTlVMSUJfUFRIUkVBRF9TSUdNQVNLPTA7ICAgIEFDX1NVQlNUKFtHTlVMSUJfUFRIUkVBRF9TSUdNQVNLXSkKKyAgR05VTElCX1JBSVNFPTA7ICAgICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX1JBSVNFXSkKKyAgR05VTElCX1NJR05BTF9IX1NJR1BJUEU9MDsgICBBQ19TVUJTVChbR05VTElCX1NJR05BTF9IX1NJR1BJUEVdKQorICBHTlVMSUJfU0lHUFJPQ01BU0s9MDsgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfU0lHUFJPQ01BU0tdKQorICBHTlVMSUJfU0lHQUNUSU9OPTA7ICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfU0lHQUNUSU9OXSkKKyAgZG5sIEFzc3VtZSBwcm9wZXIgR05VIGJlaGF2aW9yIHVubGVzcyBhbm90aGVyIG1vZHVsZSBzYXlzIG90aGVyd2lzZS4KKyAgSEFWRV9QT1NJWF9TSUdOQUxCTE9DS0lORz0xOyBBQ19TVUJTVChbSEFWRV9QT1NJWF9TSUdOQUxCTE9DS0lOR10pCisgIEhBVkVfUFRIUkVBRF9TSUdNQVNLPTE7ICAgICAgQUNfU1VCU1QoW0hBVkVfUFRIUkVBRF9TSUdNQVNLXSkKKyAgSEFWRV9SQUlTRT0xOyAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9SQUlTRV0pCisgIEhBVkVfU0lHU0VUX1Q9MTsgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfU0lHU0VUX1RdKQorICBIQVZFX1NJR0lORk9fVD0xOyAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1NJR0lORk9fVF0pCisgIEhBVkVfU0lHQUNUSU9OPTE7ICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfU0lHQUNUSU9OXSkKKyAgSEFWRV9TVFJVQ1RfU0lHQUNUSU9OX1NBX1NJR0FDVElPTj0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1NUUlVDVF9TSUdBQ1RJT05fU0FfU0lHQUNUSU9OXSkKKyAgSEFWRV9UWVBFX1ZPTEFUSUxFX1NJR19BVE9NSUNfVD0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1RZUEVfVk9MQVRJTEVfU0lHX0FUT01JQ19UXSkKKyAgSEFWRV9TSUdIQU5ETEVSX1Q9MTsgICAgICAgICBBQ19TVUJTVChbSEFWRV9TSUdIQU5ETEVSX1RdKQorICBSRVBMQUNFX1BUSFJFQURfU0lHTUFTSz0wOyAgIEFDX1NVQlNUKFtSRVBMQUNFX1BUSFJFQURfU0lHTUFTS10pCisgIFJFUExBQ0VfUkFJU0U9MDsgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfUkFJU0VdKQorXSkKZGlmZiAtLWdpdCBhL200L3NpZ25hbGJsb2NraW5nLm00IGIvbTQvc2lnbmFsYmxvY2tpbmcubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNjYmI4NAotLS0gL2Rldi9udWxsCisrKyBiL200L3NpZ25hbGJsb2NraW5nLm00CkBAIC0wLDAgKzEsMjUgQEAKKyMgc2lnbmFsYmxvY2tpbmcubTQgc2VyaWFsIDE0CitkbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIERldGVybWluZSBhdmFpbGFibGUgc2lnbmFsIGJsb2NraW5nIHByaW1pdGl2ZXMuIFRocmVlIGRpZmZlcmVudCBBUElzIGV4aXN0OgorIyAxKSBQT1NJWDogc2lnZW1wdHlzZXQsIHNpZ2FkZHNldCwgc2lncHJvY21hc2sKKyMgMikgU1lTVjogc2lnaG9sZCwgc2lncmVsc2UKKyMgMykgQlNEOiBzaWdibG9jaywgc2lnc2V0bWFzaworIyBGb3Igc2ltcGxpY2l0eSwgaGVyZSB3ZSBjaGVjayBvbmx5IGZvciB0aGUgUE9TSVggc2lnbmFsIGJsb2NraW5nLgorQUNfREVGVU4oW2dsX1NJR05BTEJMT0NLSU5HXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfU0lHTkFMX0hfREVGQVVMVFNdKQorICBBQ19SRVFVSVJFKFtnbF9DSEVDS19UWVBFX1NJR1NFVF9UXSkKKyAgaWYgdGVzdCAkZ2xfY3ZfdHlwZV9zaWdzZXRfdCA9IHllczsgdGhlbgorICAgIEFDX0NIRUNLX0ZVTkMoW3NpZ3Byb2NtYXNrXSwgW2dsX2N2X2Z1bmNfc2lncHJvY21hc2s9MV0pCisgIGZpCisgIGlmIHRlc3QgLXogIiRnbF9jdl9mdW5jX3NpZ3Byb2NtYXNrIjsgdGhlbgorICAgIEhBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkc9MAorICBmaQorXSkKKworIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9zaWdwcm9jbWFzay5jLgorQUNfREVGVU4oW2dsX1BSRVJFUV9TSUdQUk9DTUFTS10sIFs6XSkKZGlmZiAtLWdpdCBhL200L3NpZ25iaXQubTQgYi9tNC9zaWduYml0Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNzA3YzkKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9zaWduYml0Lm00CkBAIC0wLDAgKzEsMzY1IEBACisjIHNpZ25iaXQubTQgc2VyaWFsIDEzCitkbmwgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX1NJR05CSVRdLAorWworICBBQ19SRVFVSVJFKFtnbF9NQVRIX0hfREVGQVVMVFNdKQorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pIGRubCBmb3IgY3Jvc3MtY29tcGlsZXMKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzaWduYml0IG1hY3JvXSwgW2dsX2N2X2Z1bmNfc2lnbmJpdF0sCisgICAgWworICAgICAgQUNfUlVOX0lGRUxTRSgKKyAgICAgICAgW0FDX0xBTkdfU09VUkNFKFtbCisjaW5jbHVkZSA8bWF0aC5oPgorLyogSWYgc2lnbmJpdCBpcyBkZWZpbmVkIGFzIGEgZnVuY3Rpb24sIGRvbid0IHVzZSBpdCwgc2luY2UgY2FsbGluZyBpdCBmb3IKKyAgICdmbG9hdCcgb3IgJ2xvbmcgZG91YmxlJyBhcmd1bWVudHMgd291bGQgaW52b2x2ZSBjb252ZXJzaW9ucy4KKyAgIElmIHNpZ25iaXQgaXMgbm90IGRlY2xhcmVkIGF0IGFsbCBidXQgZXhpc3RzIGFzIGEgbGlicmFyeSBmdW5jdGlvbiwgZG9uJ3QKKyAgIHVzZSBpdCwgc2luY2UgdGhlIHByb3RvdHlwZSBtYXkgbm90IG1hdGNoLgorICAgSWYgc2lnbmJpdCBpcyBub3QgZGVjbGFyZWQgYXQgYWxsIGJ1dCBleGlzdHMgYXMgYSBjb21waWxlciBidWlsdC1pbiwgZG9uJ3QKKyAgIHVzZSBpdCwgc2luY2UgaXQncyBwcmVmZXJhYmxlIHRvIHVzZSBfX2J1aWx0aW5fc2lnbmJpdCogKG5vIHdhcm5pbmdzLAorICAgbm8gY29udmVyc2lvbnMpLiAgKi8KKyNpZm5kZWYgc2lnbmJpdAorIyBlcnJvciAic2lnbmJpdCBzaG91bGQgYmUgYSBtYWNybyIKKyNlbmRpZgorI2luY2x1ZGUgPHN0cmluZy5oPgorXWdsX1NJR05CSVRfVEVTVF9QUk9HUkFNCitdKV0sCisgICAgICAgIFtnbF9jdl9mdW5jX3NpZ25iaXQ9eWVzXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfc2lnbmJpdD1ub10sCisgICAgICAgIFtjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBnbGliYyBzeXN0ZW1zLgorICAgICAgICAgICAqLWdudSopIGdsX2N2X2Z1bmNfc2lnbmJpdD0iZ3Vlc3NpbmcgeWVzIiA7OworICAgICAgICAgICAgICAgICAgICMgSWYgd2UgZG9uJ3Qga25vdywgYXNzdW1lIHRoZSB3b3JzdC4KKyAgICAgICAgICAgKikgICAgICBnbF9jdl9mdW5jX3NpZ25iaXQ9Imd1ZXNzaW5nIG5vIiA7OworICAgICAgICAgZXNhYworICAgICAgICBdKQorICAgIF0pCisgIGRubCBHQ0MgNC4wIGFuZCBuZXdlciBwcm92aWRlcyB0aHJlZSBidWlsdC1pbnMgZm9yIHNpZ25iaXQuCisgIGRubCBUaGV5IGNhbiBiZSB1c2VkIHdpdGhvdXQgd2FybmluZ3MsIGFsc28gaW4gQysrLCByZWdhcmRsZXNzIG9mIDxtYXRoLmg+LgorICBkbmwgQnV0IHRoZXkgbWF5IGV4cGFuZCB0byBjYWxscyB0byBmdW5jdGlvbnMsIHdoaWNoIG1heSBvciBtYXkgbm90IGJlIGluCisgIGRubCBsaWJjLgorICBBQ19DQUNIRV9DSEVDSyhbZm9yIHNpZ25iaXQgY29tcGlsZXIgYnVpbHQtaW5zXSwgW2dsX2N2X2Z1bmNfc2lnbmJpdF9nY2NdLAorICAgIFsKKyAgICAgIEFDX1JVTl9JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1NPVVJDRShbWworI2lmIF9fR05VQ19fID49IDQKKyMgZGVmaW5lIHNpZ25iaXQoeCkgXAorICAgKHNpemVvZiAoeCkgPT0gc2l6ZW9mIChsb25nIGRvdWJsZSkgPyBfX2J1aWx0aW5fc2lnbmJpdGwgKHgpIDogXAorICAgIHNpemVvZiAoeCkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19idWlsdGluX3NpZ25iaXQgKHgpIDogXAorICAgIF9fYnVpbHRpbl9zaWduYml0ZiAoeCkpCisjZWxzZQorIyBlcnJvciAic2lnbmJpdCBzaG91bGQgYmUgdGhyZWUgY29tcGlsZXIgYnVpbHQtaW5zIgorI2VuZGlmCisjaW5jbHVkZSA8c3RyaW5nLmg+CitdZ2xfU0lHTkJJVF9URVNUX1BST0dSQU0KK10pXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfc2lnbmJpdF9nY2M9eWVzXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfc2lnbmJpdF9nY2M9bm9dLAorICAgICAgICBbY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gZ2xpYmMgc3lzdGVtcy4KKyAgICAgICAgICAgKi1nbnUqKSBnbF9jdl9mdW5jX3NpZ25iaXRfZ2NjPSJndWVzc2luZyB5ZXMiIDs7CisgICAgICAgICAgICAgICAgICAgIyBJZiB3ZSBkb24ndCBrbm93LCBhc3N1bWUgdGhlIHdvcnN0LgorICAgICAgICAgICAqKSAgICAgIGdsX2N2X2Z1bmNfc2lnbmJpdF9nY2M9Imd1ZXNzaW5nIG5vIiA7OworICAgICAgICAgZXNhYworICAgICAgICBdKQorICAgIF0pCisgIGRubCBVc2UgdGhlIGNvbXBpbGVyIGJ1aWx0LWlucyB3aGVuZXZlciBwb3NzaWJsZSwgYmVjYXVzZSB0aGV5IGFyZSBtb3JlCisgIGRubCBlZmZpY2llbnQgdGhhbiB0aGUgc3lzdGVtIGxpYnJhcnkgZnVuY3Rpb25zIChpZiB0aGV5IGV4aXN0KS4KKyAgY2FzZSAiJGdsX2N2X2Z1bmNfc2lnbmJpdF9nY2MiIGluCisgICAgKnllcykKKyAgICAgIFJFUExBQ0VfU0lHTkJJVF9VU0lOR19HQ0M9MQorICAgICAgOzsKKyAgICAqKQorICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfc2lnbmJpdCIgaW4KKyAgICAgICAgKnllcykgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBkbmwgUkVQTEFDRV9TSUdOQklUPTEgbWFrZXMgc3VyZSB0aGUgc2lnbmJpdFtmZGxdIGZ1bmN0aW9ucyBnZXQgYnVpbHQuCisgICAgICAgICAgUkVQTEFDRV9TSUdOQklUPTEKKyAgICAgICAgICBnbF9GTE9BVF9TSUdOX0xPQ0FUSU9OCisgICAgICAgICAgZ2xfRE9VQkxFX1NJR05fTE9DQVRJT04KKyAgICAgICAgICBnbF9MT05HX0RPVUJMRV9TSUdOX0xPQ0FUSU9OCisgICAgICAgICAgaWYgdGVzdCAiJGdsX2N2X2NjX2Zsb2F0X3NpZ25iaXQiID0gdW5rbm93bjsgdGhlbgorICAgICAgICAgICAgZG5sIFRlc3Qgd2hldGhlciBjb3B5c2lnbmYoKSBpcyBkZWNsYXJlZC4KKyAgICAgICAgICAgIEFDX0NIRUNLX0RFQ0xTKFtjb3B5c2lnbmZdLCAsICwgW1sjaW5jbHVkZSA8bWF0aC5oPl1dKQorICAgICAgICAgICAgaWYgdGVzdCAiJGFjX2N2X2hhdmVfZGVjbF9jb3B5c2lnbmYiID0geWVzOyB0aGVuCisgICAgICAgICAgICAgIGRubCBUZXN0IHdoZXRoZXIgY29weXNpZ25mKCkgY2FuIGJlIHVzZWQgd2l0aG91dCBsaWJtLgorICAgICAgICAgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBjb3B5c2lnbmYgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibV0sCisgICAgICAgICAgICAgICAgW2dsX2N2X2Z1bmNfY29weXNpZ25mX25vX2xpYm1dLAorICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgIEFDX0xJTktfSUZFTFNFKAorICAgICAgICAgICAgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgICAgICAgICAgICAgICBbWyNpbmNsdWRlIDxtYXRoLmg+CisgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeCwgeTtdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgW1tyZXR1cm4gY29weXNpZ25mICh4LCB5KSA8IDA7XV0pXSwKKyAgICAgICAgICAgICAgICAgICAgW2dsX2N2X2Z1bmNfY29weXNpZ25mX25vX2xpYm09eWVzXSwKKyAgICAgICAgICAgICAgICAgICAgW2dsX2N2X2Z1bmNfY29weXNpZ25mX25vX2xpYm09bm9dKQorICAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICAgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfY29weXNpZ25mX25vX2xpYm0gPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoW0hBVkVfQ09QWVNJR05GX0lOX0xJQkNdLCBbMV0sCisgICAgICAgICAgICAgICAgICBbRGVmaW5lIGlmIHRoZSBjb3B5c2lnbmYgZnVuY3Rpb24gaXMgZGVjbGFyZWQgaW4gPG1hdGguaD4gYW5kIGF2YWlsYWJsZSBpbiBsaWJjLl0pCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgICAgaWYgdGVzdCAiJGdsX2N2X2NjX2RvdWJsZV9zaWduYml0IiA9IHVua25vd247IHRoZW4KKyAgICAgICAgICAgIGRubCBUZXN0IHdoZXRoZXIgY29weXNpZ24oKSBpcyBkZWNsYXJlZC4KKyAgICAgICAgICAgIEFDX0NIRUNLX0RFQ0xTKFtjb3B5c2lnbl0sICwgLCBbWyNpbmNsdWRlIDxtYXRoLmg+XV0pCisgICAgICAgICAgICBpZiB0ZXN0ICIkYWNfY3ZfaGF2ZV9kZWNsX2NvcHlzaWduIiA9IHllczsgdGhlbgorICAgICAgICAgICAgICBkbmwgVGVzdCB3aGV0aGVyIGNvcHlzaWduKCkgY2FuIGJlIHVzZWQgd2l0aG91dCBsaWJtLgorICAgICAgICAgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBjb3B5c2lnbiBjYW4gYmUgdXNlZCB3aXRob3V0IGxpbmtpbmcgd2l0aCBsaWJtXSwKKyAgICAgICAgICAgICAgICBbZ2xfY3ZfZnVuY19jb3B5c2lnbl9ub19saWJtXSwKKyAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICBBQ19MSU5LX0lGRUxTRSgKKyAgICAgICAgICAgICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgICAgICAgICAgICAgW1sjaW5jbHVkZSA8bWF0aC5oPgorICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB4LCB5O11dLAorICAgICAgICAgICAgICAgICAgICAgICBbW3JldHVybiBjb3B5c2lnbiAoeCwgeSkgPCAwO11dKV0sCisgICAgICAgICAgICAgICAgICAgIFtnbF9jdl9mdW5jX2NvcHlzaWduX25vX2xpYm09eWVzXSwKKyAgICAgICAgICAgICAgICAgICAgW2dsX2N2X2Z1bmNfY29weXNpZ25fbm9fbGlibT1ub10pCisgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19jb3B5c2lnbl9ub19saWJtID0geWVzOyB0aGVuCisgICAgICAgICAgICAgICAgQUNfREVGSU5FKFtIQVZFX0NPUFlTSUdOX0lOX0xJQkNdLCBbMV0sCisgICAgICAgICAgICAgICAgICBbRGVmaW5lIGlmIHRoZSBjb3B5c2lnbiBmdW5jdGlvbiBpcyBkZWNsYXJlZCBpbiA8bWF0aC5oPiBhbmQgYXZhaWxhYmxlIGluIGxpYmMuXSkKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgICBpZiB0ZXN0ICIkZ2xfY3ZfY2NfbG9uZ19kb3VibGVfc2lnbmJpdCIgPSB1bmtub3duOyB0aGVuCisgICAgICAgICAgICBkbmwgVGVzdCB3aGV0aGVyIGNvcHlzaWdubCgpIGlzIGRlY2xhcmVkLgorICAgICAgICAgICAgQUNfQ0hFQ0tfREVDTFMoW2NvcHlzaWdubF0sICwgLCBbWyNpbmNsdWRlIDxtYXRoLmg+XV0pCisgICAgICAgICAgICBpZiB0ZXN0ICIkYWNfY3ZfaGF2ZV9kZWNsX2NvcHlzaWdubCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgZG5sIFRlc3Qgd2hldGhlciBjb3B5c2lnbmwoKSBjYW4gYmUgdXNlZCB3aXRob3V0IGxpYm0uCisgICAgICAgICAgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGNvcHlzaWdubCBjYW4gYmUgdXNlZCB3aXRob3V0IGxpbmtpbmcgd2l0aCBsaWJtXSwKKyAgICAgICAgICAgICAgICBbZ2xfY3ZfZnVuY19jb3B5c2lnbmxfbm9fbGlibV0sCisgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgQUNfTElOS19JRkVMU0UoCisgICAgICAgICAgICAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgICAgICAgICAgICAgIFtbI2luY2x1ZGUgPG1hdGguaD4KKyAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRvdWJsZSB4LCB5O11dLAorICAgICAgICAgICAgICAgICAgICAgICBbW3JldHVybiBjb3B5c2lnbmwgKHgsIHkpIDwgMDtdXSldLAorICAgICAgICAgICAgICAgICAgICBbZ2xfY3ZfZnVuY19jb3B5c2lnbmxfbm9fbGlibT15ZXNdLAorICAgICAgICAgICAgICAgICAgICBbZ2xfY3ZfZnVuY19jb3B5c2lnbmxfbm9fbGlibT1ub10pCisgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19jb3B5c2lnbmxfbm9fbGlibSA9IHllczsgdGhlbgorICAgICAgICAgICAgICAgIEFDX0RFRklORShbSEFWRV9DT1BZU0lHTkxfSU5fTElCQ10sIFsxXSwKKyAgICAgICAgICAgICAgICAgIFtEZWZpbmUgaWYgdGhlIGNvcHlzaWdubCBmdW5jdGlvbiBpcyBkZWNsYXJlZCBpbiA8bWF0aC5oPiBhbmQgYXZhaWxhYmxlIGluIGxpYmMuXSkKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgZXNhYworXSkKKworQUNfREVGVU4oW2dsX1NJR05CSVRfVEVTVF9QUk9HUkFNXSwgW1sKKy8qIEdsb2JhbCB2YXJpYWJsZXMuCisgICBOZWVkZWQgYmVjYXVzZSBHQ0MgNCBjb25zdGFudC1mb2xkcyBfX2J1aWx0aW5fc2lnbmJpdGwgKGxpdGVyYWwpCisgICBidXQgY2Fubm90IGNvbnN0YW50LWZvbGQgICAgICAgICAgICBfX2J1aWx0aW5fc2lnbmJpdGwgKHZhcmlhYmxlKS4gICovCitmbG9hdCB2ZjsKK2RvdWJsZSB2ZDsKK2xvbmcgZG91YmxlIHZsOworaW50IG1haW4gKCkKK3sKKy8qIEhQIGNjIG9uIEhQLVVYIDEwLjIwIGhhcyBhIGJ1ZyB3aXRoIHRoZSBjb25zdGFudCBleHByZXNzaW9uIC0wLjAuCisgICBTbyB3ZSB1c2UgLXAwZiBhbmQgLXAwZCBpbnN0ZWFkLiAgKi8KK2Zsb2F0IHAwZiA9IDAuMGY7CitmbG9hdCBtMGYgPSAtcDBmOworZG91YmxlIHAwZCA9IDAuMDsKK2RvdWJsZSBtMGQgPSAtcDBkOworLyogT24gSFAtVVggMTAuMjAsIG5lZ2F0aW5nIDAuMEwgZG9lcyBub3QgeWllbGQgLTAuMEwuCisgICBTbyB3ZSB1c2UgYW5vdGhlciBjb25zdGFudCBleHByZXNzaW9uIGluc3RlYWQuCisgICBCdXQgdGhhdCBleHByZXNzaW9uIGRvZXMgbm90IHdvcmsgb24gb3RoZXIgcGxhdGZvcm1zLCBzdWNoIGFzIHdoZW4KKyAgIGNyb3NzLWNvbXBpbGluZyB0byBQb3dlclBDIG9uIE1hYyBPUyBYIDEwLjUuICAqLworbG9uZyBkb3VibGUgcDBsID0gMC4wTDsKKyNpZiBkZWZpbmVkIF9faHB1eCB8fCBkZWZpbmVkIF9fc2dpCitsb25nIGRvdWJsZSBtMGwgPSAtTERCTF9NSU4gKiBMREJMX01JTjsKKyNlbHNlCitsb25nIGRvdWJsZSBtMGwgPSAtcDBsOworI2VuZGlmCisgIGludCByZXN1bHQgPSAwOworICBpZiAoc2lnbmJpdCAodmYpKSAvKiBsaW5rIGNoZWNrICovCisgICAgdmYrKzsKKyAgeworICAgIGZsb2F0IHBsdXNfaW5mID0gMS4wZiAvIHAwZjsKKyAgICBmbG9hdCBtaW51c19pbmYgPSAtMS4wZiAvIHAwZjsKKyAgICBpZiAoISghc2lnbmJpdCAoMjU1LjBmKQorICAgICAgICAgICYmIHNpZ25iaXQgKC0yNTUuMGYpCisgICAgICAgICAgJiYgIXNpZ25iaXQgKHAwZikKKyAgICAgICAgICAmJiAobWVtY21wICgmbTBmLCAmcDBmLCBzaXplb2YgKGZsb2F0KSkgPT0gMCB8fCBzaWduYml0IChtMGYpKQorICAgICAgICAgICYmICFzaWduYml0IChwbHVzX2luZikKKyAgICAgICAgICAmJiBzaWduYml0IChtaW51c19pbmYpKSkKKyAgICAgIHJlc3VsdCB8PSAxOworICB9CisgIGlmIChzaWduYml0ICh2ZCkpIC8qIGxpbmsgY2hlY2sgKi8KKyAgICB2ZCsrOworICB7CisgICAgZG91YmxlIHBsdXNfaW5mID0gMS4wIC8gcDBkOworICAgIGRvdWJsZSBtaW51c19pbmYgPSAtMS4wIC8gcDBkOworICAgIGlmICghKCFzaWduYml0ICgyNTUuMCkKKyAgICAgICAgICAmJiBzaWduYml0ICgtMjU1LjApCisgICAgICAgICAgJiYgIXNpZ25iaXQgKHAwZCkKKyAgICAgICAgICAmJiAobWVtY21wICgmbTBkLCAmcDBkLCBzaXplb2YgKGRvdWJsZSkpID09IDAgfHwgc2lnbmJpdCAobTBkKSkKKyAgICAgICAgICAmJiAhc2lnbmJpdCAocGx1c19pbmYpCisgICAgICAgICAgJiYgc2lnbmJpdCAobWludXNfaW5mKSkpCisgICAgICByZXN1bHQgfD0gMjsKKyAgfQorICBpZiAoc2lnbmJpdCAodmwpKSAvKiBsaW5rIGNoZWNrICovCisgICAgdmwrKzsKKyAgeworICAgIGxvbmcgZG91YmxlIHBsdXNfaW5mID0gMS4wTCAvIHAwbDsKKyAgICBsb25nIGRvdWJsZSBtaW51c19pbmYgPSAtMS4wTCAvIHAwbDsKKyAgICBpZiAoc2lnbmJpdCAoMjU1LjBMKSkKKyAgICAgIHJlc3VsdCB8PSA0OworICAgIGlmICghc2lnbmJpdCAoLTI1NS4wTCkpCisgICAgICByZXN1bHQgfD0gNDsKKyAgICBpZiAoc2lnbmJpdCAocDBsKSkKKyAgICAgIHJlc3VsdCB8PSA4OworICAgIGlmICghKG1lbWNtcCAoJm0wbCwgJnAwbCwgc2l6ZW9mIChsb25nIGRvdWJsZSkpID09IDAgfHwgc2lnbmJpdCAobTBsKSkpCisgICAgICByZXN1bHQgfD0gMTY7CisgICAgaWYgKHNpZ25iaXQgKHBsdXNfaW5mKSkKKyAgICAgIHJlc3VsdCB8PSAzMjsKKyAgICBpZiAoIXNpZ25iaXQgKG1pbnVzX2luZikpCisgICAgICByZXN1bHQgfD0gNjQ7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KK11dKQorCitBQ19ERUZVTihbZ2xfRkxPQVRfU0lHTl9MT0NBVElPTl0sCitbCisgIGdsX0ZMT0FUVFlQRV9TSUdOX0xPQ0FUSU9OKFtmbG9hdF0sIFtnbF9jdl9jY19mbG9hdF9zaWduYml0XSwgW2ZdLCBbRkxUXSkKK10pCisKK0FDX0RFRlVOKFtnbF9ET1VCTEVfU0lHTl9MT0NBVElPTl0sCitbCisgIGdsX0ZMT0FUVFlQRV9TSUdOX0xPQ0FUSU9OKFtkb3VibGVdLCBbZ2xfY3ZfY2NfZG91YmxlX3NpZ25iaXRdLCBbXSwgW0RCTF0pCitdKQorCitBQ19ERUZVTihbZ2xfTE9OR19ET1VCTEVfU0lHTl9MT0NBVElPTl0sCitbCisgIGdsX0ZMT0FUVFlQRV9TSUdOX0xPQ0FUSU9OKFtsb25nIGRvdWJsZV0sIFtnbF9jdl9jY19sb25nX2RvdWJsZV9zaWduYml0XSwgW0xdLCBbTERCTF0pCitdKQorCitBQ19ERUZVTihbZ2xfRkxPQVRUWVBFX1NJR05fTE9DQVRJT05dLAorWworICBBQ19DQUNIRV9DSEVDSyhbd2hlcmUgdG8gZmluZCB0aGUgc2lnbiBiaXQgaW4gYSAnJDEnXSwKKyAgICBbJDJdLAorICAgIFsKKyAgICAgIEFDX1JVTl9JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIE5XT1JEUyBcCisgICgoc2l6ZW9mICgkMSkgKyBzaXplb2YgKHVuc2lnbmVkIGludCkgLSAxKSAvIHNpemVvZiAodW5zaWduZWQgaW50KSkKK3R5cGVkZWYgdW5pb24geyAkMSB2YWx1ZTsgdW5zaWduZWQgaW50IHdvcmRbTldPUkRTXTsgfQorICAgICAgICBtZW1vcnlfZmxvYXQ7CitzdGF0aWMgbWVtb3J5X2Zsb2F0IHBsdXMgPSB7IDEuMCQzIH07CitzdGF0aWMgbWVtb3J5X2Zsb2F0IG1pbnVzID0geyAtMS4wJDMgfTsKK2ludCBtYWluICgpCit7CisgIHNpemVfdCBqLCBrLCBpOworICB1bnNpZ25lZCBpbnQgbTsKKyAgRklMRSAqZnAgPSBmb3BlbiAoImNvbmZ0ZXN0Lm91dCIsICJ3Iik7CisgIGlmIChmcCA9PSBOVUxMKQorICAgIHJldHVybiAxOworICAvKiBGaW5kIHRoZSBkaWZmZXJlbnQgYml0LiAgKi8KKyAgayA9IDA7IG0gPSAwOworICBmb3IgKGogPSAwOyBqIDwgTldPUkRTOyBqKyspCisgICAgeworICAgICAgdW5zaWduZWQgaW50IHggPSBwbHVzLndvcmRbal0gXiBtaW51cy53b3JkW2pdOworICAgICAgaWYgKCh4ICYgKHggLSAxKSkgfHwgKHggJiYgbSkpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBNb3JlIHRoYW4gb25lIGJpdCBkaWZmZXJlbmNlLiAgKi8KKyAgICAgICAgICBmcHJpbnRmIChmcCwgInVua25vd24iKTsKKyAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgfQorICAgICAgaWYgKHgpCisgICAgICAgIHsKKyAgICAgICAgICBrID0gajsKKyAgICAgICAgICBtID0geDsKKyAgICAgICAgfQorICAgIH0KKyAgaWYgKG0gPT0gMCkKKyAgICB7CisgICAgICAvKiBObyBkaWZmZXJlbmNlLiAgKi8KKyAgICAgIGZwcmludGYgKGZwLCAidW5rbm93biIpOworICAgICAgcmV0dXJuIDM7CisgICAgfQorICAvKiBOb3cgbSA9IHBsdXMud29yZFtrXSBeIH5taW51cy53b3JkW2tdLiAgKi8KKyAgaWYgKHBsdXMud29yZFtrXSAmIH5taW51cy53b3JkW2tdKQorICAgIHsKKyAgICAgIC8qIE9oPyBUaGUgc2lnbiBiaXQgaXMgc2V0IGluIHRoZSBwb3NpdGl2ZSBhbmQgY2xlYXJlZCBpbiB0aGUgbmVnYXRpdmUKKyAgICAgICAgIG51bWJlcnM/ICAqLworICAgICAgZnByaW50ZiAoZnAsICJ1bmtub3duIik7CisgICAgICByZXR1cm4gNDsKKyAgICB9CisgIGZvciAoaSA9IDA7IDsgaSsrKQorICAgIGlmICgobSA+PiBpKSAmIDEpCisgICAgICBicmVhazsKKyAgZnByaW50ZiAoZnAsICJ3b3JkICVkIGJpdCAlZCIsIChpbnQpIGssIChpbnQpIGkpOworICBpZiAoZmNsb3NlIChmcCkgIT0gMCkKKyAgICByZXR1cm4gNTsKKyAgcmV0dXJuIDA7Cit9CisgICAgICAgIF1dKV0sCisgICAgICAgIFskMj1gY2F0IGNvbmZ0ZXN0Lm91dGBdLAorICAgICAgICBbJDI9InVua25vd24iXSwKKyAgICAgICAgWworICAgICAgICAgIGRubCBXaGVuIGNyb3NzLWNvbXBpbGluZywgd2UgZG9uJ3Qga25vdy4gSXQgZGVwZW5kcyBvbiB0aGUKKyAgICAgICAgICBkbmwgQUJJIGFuZCBjb21waWxlciB2ZXJzaW9uLiBUaGVyZSBhcmUgdG9vIG1hbnkgY2FzZXMuCisgICAgICAgICAgJDI9InVua25vd24iCisgICAgICAgIF0pCisgICAgICBybSAtZiBjb25mdGVzdC5vdXQKKyAgICBdKQorICBjYXNlICIkXSQyWyIgaW4KKyAgICB3b3JkKmJpdCopCisgICAgICB3b3JkPWBlY2hvICIkXSQyWyIgfCBzZWQgLWUgJ3Mvd29yZCAvLycgLWUgJ3MvIGJpdC4qLy8nYAorICAgICAgYml0PWBlY2hvICIkXSQyWyIgfCBzZWQgLWUgJ3Mvd29yZC4qYml0IC8vJ2AKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChbJDRdW19TSUdOQklUX1dPUkRdLCBbJHdvcmRdLAorICAgICAgICBbRGVmaW5lIGFzIHRoZSB3b3JkIGluZGV4IHdoZXJlIHRvIGZpbmQgdGhlIHNpZ24gb2YgJyQxJy5dKQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFskNF1bX1NJR05CSVRfQklUXSwgWyRiaXRdLAorICAgICAgICBbRGVmaW5lIGFzIHRoZSBiaXQgaW5kZXggaW4gdGhlIHdvcmQgd2hlcmUgdG8gZmluZCB0aGUgc2lnbiBvZiAnJDEnLl0pCisgICAgICA7OworICBlc2FjCitdKQorCisjIEV4cGFuZHMgdG8gY29kZSB0aGF0IGRlZmluZXMgYSBmdW5jdGlvbiBzaWduYml0ZihmbG9hdCkuCisjIEl0IGV4dHJhY3RzIHRoZSBzaWduIGJpdCBvZiBhIG5vbi1OYU4gdmFsdWUuCitBQ19ERUZVTihbZ2xfRkxPQVRfU0lHTkJJVF9DT0RFXSwKK1sKKyAgZ2xfRkxPQVRUWVBFX1NJR05CSVRfQ09ERShbZmxvYXRdLCBbZl0sIFtmXSkKK10pCisKKyMgRXhwYW5kcyB0byBjb2RlIHRoYXQgZGVmaW5lcyBhIGZ1bmN0aW9uIHNpZ25iaXRkKGRvdWJsZSkuCisjIEl0IGV4dHJhY3RzIHRoZSBzaWduIGJpdCBvZiBhIG5vbi1OYU4gdmFsdWUuCitBQ19ERUZVTihbZ2xfRE9VQkxFX1NJR05CSVRfQ09ERV0sCitbCisgIGdsX0ZMT0FUVFlQRV9TSUdOQklUX0NPREUoW2RvdWJsZV0sIFtkXSwgW10pCitdKQorCisjIEV4cGFuZHMgdG8gY29kZSB0aGF0IGRlZmluZXMgYSBmdW5jdGlvbiBzaWduYml0bChsb25nIGRvdWJsZSkuCisjIEl0IGV4dHJhY3RzIHRoZSBzaWduIGJpdCBvZiBhIG5vbi1OYU4gdmFsdWUuCitBQ19ERUZVTihbZ2xfTE9OR19ET1VCTEVfU0lHTkJJVF9DT0RFXSwKK1sKKyAgZ2xfRkxPQVRUWVBFX1NJR05CSVRfQ09ERShbbG9uZyBkb3VibGVdLCBbbF0sIFtMXSkKK10pCisKK0FDX0RFRlVOKFtnbF9GTE9BVFRZUEVfU0lHTkJJVF9DT0RFXSwKK1tbCitzdGF0aWMgaW50CitzaWduYml0JDIgKCQxIHZhbHVlKQoreworICB0eXBlZGVmIHVuaW9uIHsgJDEgZjsgdW5zaWduZWQgY2hhciBiW3NpemVvZiAoJDEpXTsgfSBmbG9hdF91bmlvbjsKKyAgc3RhdGljIGZsb2F0X3VuaW9uIHBsdXNfb25lID0geyAxLjAkMyB9OyAgIC8qIHVudXNlZCBiaXRzIGFyZSB6ZXJvIGhlcmUgKi8KKyAgc3RhdGljIGZsb2F0X3VuaW9uIG1pbnVzX29uZSA9IHsgLTEuMCQzIH07IC8qIHVudXNlZCBiaXRzIGFyZSB6ZXJvIGhlcmUgKi8KKyAgLyogQ29tcHV0ZSB0aGUgc2lnbiBiaXQgbWFzayBhcyB0aGUgWE9SIG9mIHBsdXNfb25lIGFuZCBtaW51c19vbmUuICAqLworICBmbG9hdF91bmlvbiB1OworICB1bnNpZ25lZCBpbnQgaTsKKyAgdS5mID0gdmFsdWU7CisgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YgKCQxKTsgaSsrKQorICAgIGlmICh1LmJbaV0gJiAocGx1c19vbmUuYltpXSBeIG1pbnVzX29uZS5iW2ldKSkKKyAgICAgIHJldHVybiAxOworICByZXR1cm4gMDsKK30KK11dKQpkaWZmIC0tZ2l0IGEvbTQvc2l6ZV9tYXgubTQgYi9tNC9zaXplX21heC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTgxNjJiCi0tLSAvZGV2L251bGwKKysrIGIvbTQvc2l6ZV9tYXgubTQKQEAgLTAsMCArMSw3OSBAQAorIyBzaXplX21heC5tNCBzZXJpYWwgMTAKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUtMjAwNiwgMjAwOC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKworQUNfREVGVU4oW2dsX1NJWkVfTUFYXSwKK1sKKyAgQUNfQ0hFQ0tfSEVBREVSUyhbc3RkaW50LmhdKQorICBkbmwgRmlyc3QgdGVzdCB3aGV0aGVyIHRoZSBzeXN0ZW0gYWxyZWFkeSBoYXMgU0laRV9NQVguCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgU0laRV9NQVhdLCBbZ2xfY3Zfc2l6ZV9tYXhdLCBbCisgICAgZ2xfY3Zfc2l6ZV9tYXg9CisgICAgQUNfRUdSRVBfQ1BQKFtGb3VuZCBpdF0sIFsKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpZiBIQVZFX1NURElOVF9ICisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKyNpZmRlZiBTSVpFX01BWAorRm91bmQgaXQKKyNlbmRpZgorXSwgW2dsX2N2X3NpemVfbWF4PXllc10pCisgICAgaWYgdGVzdCAteiAiJGdsX2N2X3NpemVfbWF4IjsgdGhlbgorICAgICAgZG5sIERlZmluZSBpdCBvdXJzZWx2ZXMuIEhlcmUgd2UgYXNzdW1lIHRoYXQgdGhlIHR5cGUgJ3NpemVfdCcgaXMgbm90IHdpZGVyCisgICAgICBkbmwgdGhhbiB0aGUgdHlwZSAndW5zaWduZWQgbG9uZycuIFRyeSBoYXJkIHRvIGZpbmQgYSBkZWZpbml0aW9uIHRoYXQgY2FuCisgICAgICBkbmwgYmUgdXNlZCBpbiBhIHByZXByb2Nlc3NvciAjaWYsIGkuZS4gZG9lc24ndCBjb250YWluIGEgY2FzdC4KKyAgICAgIEFDX0NPTVBVVEVfSU5UKFtzaXplX3RfYml0c19taW51c18xXSwgW3NpemVvZiAoc2l6ZV90KSAqIENIQVJfQklUIC0gMV0sCisgICAgICAgIFsjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+XSwgW3NpemVfdF9iaXRzX21pbnVzXzE9XSkKKyAgICAgIEFDX0NPTVBVVEVfSU5UKFtmaXRzX2luX3VpbnRdLCBbc2l6ZW9mIChzaXplX3QpIDw9IHNpemVvZiAodW5zaWduZWQgaW50KV0sCisgICAgICAgIFsjaW5jbHVkZSA8c3RkZGVmLmg+XSwgW2ZpdHNfaW5fdWludD1dKQorICAgICAgaWYgdGVzdCAtbiAiJHNpemVfdF9iaXRzX21pbnVzXzEiICYmIHRlc3QgLW4gIiRmaXRzX2luX3VpbnQiOyB0aGVuCisgICAgICAgIGlmIHRlc3QgJGZpdHNfaW5fdWludCA9IDE7IHRoZW4KKyAgICAgICAgICBkbmwgRXZlbiB0aG91Z2ggU0laRV9NQVggZml0cyBpbiBhbiB1bnNpZ25lZCBpbnQsIGl0IG11c3QgYmUgb2YgdHlwZQorICAgICAgICAgIGRubCAndW5zaWduZWQgbG9uZycgaWYgdGhlIHR5cGUgJ3NpemVfdCcgaXMgdGhlIHNhbWUgYXMgJ3Vuc2lnbmVkIGxvbmcnLgorICAgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgICAgIFtbI2luY2x1ZGUgPHN0ZGRlZi5oPgorICAgICAgICAgICAgICAgICBleHRlcm4gc2l6ZV90IGZvbzsKKyAgICAgICAgICAgICAgICAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZm9vOworICAgICAgICAgICAgICAgXV0sCisgICAgICAgICAgICAgICBbW11dKV0sCisgICAgICAgICAgICBbZml0c19pbl91aW50PTBdKQorICAgICAgICBmaQorICAgICAgICBkbmwgV2UgY2Fubm90IHVzZSAnZXhwcicgdG8gc2ltcGxpZnkgdGhpcyBleHByZXNzaW9uLCBiZWNhdXNlICdleHByJworICAgICAgICBkbmwgd29ya3Mgb25seSB3aXRoICdsb25nJyBpbnRlZ2VycyBpbiB0aGUgaG9zdCBlbnZpcm9ubWVudCwgd2hpbGUgd2UKKyAgICAgICAgZG5sIG1pZ2h0IGJlIGNyb3NzLWNvbXBpbGluZyBmcm9tIGEgMzItYml0IHBsYXRmb3JtIHRvIGEgNjQtYml0IHBsYXRmb3JtLgorICAgICAgICBpZiB0ZXN0ICRmaXRzX2luX3VpbnQgPSAxOyB0aGVuCisgICAgICAgICAgZ2xfY3Zfc2l6ZV9tYXg9IigoKDFVIDw8ICRzaXplX3RfYml0c19taW51c18xKSAtIDEpICogMiArIDEpIgorICAgICAgICBlbHNlCisgICAgICAgICAgZ2xfY3Zfc2l6ZV9tYXg9IigoKDFVTCA8PCAkc2l6ZV90X2JpdHNfbWludXNfMSkgLSAxKSAqIDIgKyAxKSIKKyAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgZG5sIFNob3VsZG4ndCBoYXBwZW4sIGJ1dCB3aG8ga25vd3MuLi4KKyAgICAgICAgZ2xfY3Zfc2l6ZV9tYXg9Jygoc2l6ZV90KX4oc2l6ZV90KTApJworICAgICAgZmkKKyAgICBmaQorICBdKQorICBpZiB0ZXN0ICIkZ2xfY3Zfc2l6ZV9tYXgiICE9IHllczsgdGhlbgorICAgIEFDX0RFRklORV9VTlFVT1RFRChbU0laRV9NQVhdLCBbJGdsX2N2X3NpemVfbWF4XSwKKyAgICAgIFtEZWZpbmUgYXMgdGhlIG1heGltdW0gdmFsdWUgb2YgdHlwZSAnc2l6ZV90JywgaWYgdGhlIHN5c3RlbSBkb2Vzbid0IGRlZmluZSBpdC5dKQorICBmaQorICBkbmwgRG9uJ3QgcmVkZWZpbmUgU0laRV9NQVggaW4gY29uZmlnLmggaWYgY29uZmlnLmggaXMgcmUtaW5jbHVkZWQgYWZ0ZXIKKyAgZG5sIDxzdGRpbnQuaD4uIFJlbWVtYmVyIHRoYXQgdGhlICN1bmRlZiBpbiBBSF9WRVJCQVRJTSBnZXRzIHJlcGxhY2VkIHdpdGgKKyAgZG5sICNkZWZpbmUgYnkgQUNfREVGSU5FX1VOUVVPVEVELgorICBBSF9WRVJCQVRJTShbU0laRV9NQVhdLAorWy8qIERlZmluZSBhcyB0aGUgbWF4aW11bSB2YWx1ZSBvZiB0eXBlICdzaXplX3QnLCBpZiB0aGUgc3lzdGVtIGRvZXNuJ3QgZGVmaW5lCisgICBpdC4gKi8KKyNpZm5kZWYgU0laRV9NQVgKKyMgdW5kZWYgU0laRV9NQVgKKyNlbmRpZl0pCitdKQorCitkbmwgQXV0b2NvbmYgPj0gMi42MSBoYXMgQUNfQ09NUFVURV9JTlQgYnVpbHQtaW4uCitkbmwgUmVtb3ZlIHRoaXMgd2hlbiB3ZSBjYW4gYXNzdW1lIGF1dG9jb25mID49IDIuNjEuCittNF9pZmRlZihbQUNfQ09NUFVURV9JTlRdLCBbXSwgWworICBBQ19ERUZVTihbQUNfQ09NUFVURV9JTlRdLCBbX0FDX0NPTVBVVEVfSU5UKFskMl0sWyQxXSxbJDNdLFskNF0pXSkKK10pCmRpZmYgLS1naXQgYS9tNC9zbnByaW50Zi1wb3NpeC5tNCBiL200L3NucHJpbnRmLXBvc2l4Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNmMyNGIKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9zbnByaW50Zi1wb3NpeC5tNApAQCAtMCwwICsxLDEyNiBAQAorIyBzbnByaW50Zi1wb3NpeC5tNCBzZXJpYWwgMTQKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ2xfRlVOQ19TTlBSSU5URl9QT1NJWF0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9TSVpFU19DOTldKQorICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfTE9OR19ET1VCTEVdKQorICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfSU5GSU5JVEVdKQorICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfSU5GSU5JVEVfTE9OR19ET1VCTEVdKQorICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfRElSRUNUSVZFX0FdKQorICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfRElSRUNUSVZFX0ZdKQorICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfRElSRUNUSVZFX05dKQorICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfRElSRUNUSVZFX0xTXSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX1BPU0lUSU9OU10pCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9GTEFHX0dST1VQSU5HXSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX0ZMQUdfTEVGVEFESlVTVF0pCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9GTEFHX1pFUk9dKQorICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfUFJFQ0lTSU9OXSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX0VOT01FTV0pCisgIGdsX2N2X2Z1bmNfc25wcmludGZfcG9zaXg9bm8KKyAgQUNfQ0hFQ0tfRlVOQ1MoW3NucHJpbnRmXSkKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zbnByaW50ZiA9IHllczsgdGhlbgorICAgIGdsX1NOUFJJTlRGX1RSVU5DQVRJT05fQzk5CisgICAgZ2xfU05QUklOVEZfUkVUVkFMX0M5OQorICAgIGdsX1NOUFJJTlRGX0RJUkVDVElWRV9OCisgICAgZ2xfU05QUklOVEZfU0laRTEKKyAgICBnbF9WU05QUklOVEZfWkVST1NJWkVfQzk5CisgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX3NpemVzX2M5OSIgaW4KKyAgICAgICp5ZXMpCisgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9sb25nX2RvdWJsZSIgaW4KKyAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlIiBpbgorICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZV9sb25nX2RvdWJsZSIgaW4KKyAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfYSIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9mIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbiIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbHMiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9wb3NpdGlvbnMiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfZ3JvdXBpbmciIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19sZWZ0YWRqdXN0IiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZmxhZ196ZXJvIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9wcmVjaXNpb24iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OSIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19zbnByaW50Zl9yZXR2YWxfYzk5IiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfc25wcmludGZfZGlyZWN0aXZlX24iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3NucHJpbnRmX3NpemUxIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ZzbnByaW50Zl96ZXJvc2l6ZV9jOTkiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNucHJpbnRmIGV4aXN0cyBhbmQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbHJlYWR5IFBPU0lYIGNvbXBsaWFudC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9wb3NpeD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfc25wcmludGZfcG9zaXggPSBubzsgdGhlbgorICAgIGdsX1BSRVJFUV9WQVNOUFJJTlRGX0xPTkdfRE9VQkxFCisgICAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfSU5GSU5JVEVfRE9VQkxFCisgICAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfSU5GSU5JVEVfTE9OR19ET1VCTEUKKyAgICBnbF9QUkVSRVFfVkFTTlBSSU5URl9ESVJFQ1RJVkVfQQorICAgIGdsX1BSRVJFUV9WQVNOUFJJTlRGX0RJUkVDVElWRV9GCisgICAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfRElSRUNUSVZFX0xTCisgICAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfRkxBR19HUk9VUElORworICAgIGdsX1BSRVJFUV9WQVNOUFJJTlRGX0ZMQUdfTEVGVEFESlVTVAorICAgIGdsX1BSRVJFUV9WQVNOUFJJTlRGX0ZMQUdfWkVSTworICAgIGdsX1BSRVJFUV9WQVNOUFJJTlRGX1BSRUNJU0lPTgorICAgIGdsX1BSRVJFUV9WQVNOUFJJTlRGX0VOT01FTQorICAgIGdsX1JFUExBQ0VfVkFTTlBSSU5URgorICAgIGdsX1JFUExBQ0VfU05QUklOVEYKKyAgZmkKK10pCmRpZmYgLS1naXQgYS9tNC9zbnByaW50Zi5tNCBiL200L3NucHJpbnRmLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlOTRlZGQKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9zbnByaW50Zi5tNApAQCAtMCwwICsxLDU0IEBACisjIHNucHJpbnRmLm00IHNlcmlhbCA2CitkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQsIDIwMDctMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgTGliaW50bCAwLjE3IHdpbGwgcmVwbGFjZSBzbnByaW50ZiBvbmx5IGlmIGl0IGRvZXMgbm90IHN1cHBvcnQgJTEkcywKK2RubCBidXQgZGVmZXJzIHRvIGFueSBnbnVsaWIgc25wcmludGYgcmVwbGFjZW1lbnRzLiAgVGhlcmVmb3JlLCBnbnVsaWIKK2RubCBtdXN0IGd1YXJhbnRlZSB0aGF0IHRoZSBkZWNpc2lvbiBmb3IgcmVwbGFjaW5nIHNucHJpbnRmIGlzIGEgc3VwZXJzZXQKK2RubCBvZiB0aGUgcmVhc29ucyBjaGVja2VkIGJ5IGxpYmludGwuCitBQ19ERUZVTihbZ2xfRlVOQ19TTlBSSU5URl0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1NURElPX0hfREVGQVVMVFNdKQorICBnbF9jdl9mdW5jX3NucHJpbnRmX3VzYWJsZT1ubworICBBQ19DSEVDS19GVU5DUyhbc25wcmludGZdKQorICBpZiB0ZXN0ICRhY19jdl9mdW5jX3NucHJpbnRmID0geWVzOyB0aGVuCisgICAgZ2xfU05QUklOVEZfU0laRTEKKyAgICBjYXNlICIkZ2xfY3ZfZnVuY19zbnByaW50Zl9zaXplMSIgaW4KKyAgICAgICp5ZXMpCisgICAgICAgIGdsX1NOUFJJTlRGX1JFVFZBTF9DOTkKKyAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfc25wcmludGZfcmV0dmFsX2M5OSIgaW4KKyAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgZ2xfUFJJTlRGX1BPU0lUSU9OUworICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX3Bvc2l0aW9ucyIgaW4KKyAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3VzYWJsZT15ZXMKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19zbnByaW50Zl91c2FibGUgPSBubzsgdGhlbgorICAgIGdsX1JFUExBQ0VfU05QUklOVEYKKyAgZmkKKyAgQUNfQ0hFQ0tfREVDTFNfT05DRShbc25wcmludGZdKQorICBpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfc25wcmludGYgPSBubzsgdGhlbgorICAgIEhBVkVfREVDTF9TTlBSSU5URj0wCisgIGZpCitdKQorCitBQ19ERUZVTihbZ2xfUkVQTEFDRV9TTlBSSU5URl0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1NURElPX0hfREVGQVVMVFNdKQorICBBQ19MSUJPQkooW3NucHJpbnRmXSkKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zbnByaW50ZiA9IHllczsgdGhlbgorICAgIFJFUExBQ0VfU05QUklOVEY9MQorICBmaQorICBnbF9QUkVSRVFfU05QUklOVEYKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvc25wcmludGYuYy4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfU05QUklOVEZdLCBbOl0pCmRpZmYgLS1naXQgYS9tNC9zcGF3bi1waXBlLm00IGIvbTQvc3Bhd24tcGlwZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTk4ZGRkCi0tLSAvZGV2L251bGwKKysrIGIvbTQvc3Bhd24tcGlwZS5tNApAQCAtMCwwICsxLDExIEBACisjIHNwYXduLXBpcGUubTQgc2VyaWFsIDIKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ2xfU1BBV05fUElQRV0sCitbCisgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9zcGF3bi1waXBlLmMuCisgIEFDX1JFUVVJUkUoW0FDX1RZUEVfTU9ERV9UXSkKK10pCmRpZmYgLS1naXQgYS9tNC9zcGF3bl9oLm00IGIvbTQvc3Bhd25faC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmZlYzhlCi0tLSAvZGV2L251bGwKKysrIGIvbTQvc3Bhd25faC5tNApAQCAtMCwwICsxLDExNyBAQAorIyBzcGF3bl9oLm00IHNlcmlhbCAxNgorZG5sIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZS4KKworQUNfREVGVU4oW2dsX1NQQVdOX0hdLAorWworICBkbmwgVXNlIEFDX1JFUVVJUkUgaGVyZSwgc28gdGhhdCB0aGUgZGVmYXVsdCBiZWhhdmlvciBiZWxvdyBpcyBleHBhbmRlZAorICBkbmwgb25jZSBvbmx5LCBiZWZvcmUgYWxsIHN0YXRlbWVudHMgdGhhdCBvY2N1ciBpbiBvdGhlciBtYWNyb3MuCisgIEFDX1JFUVVJUkUoW2dsX1NQQVdOX0hfREVGQVVMVFNdKQorCisgIGRubCA8c3Bhd24uaD4gaXMgYWx3YXlzIG92ZXJyaWRkZW4sIGJlY2F1c2Ugb2YgR05VTElCX1BPU0lYQ0hFQ0suCisgIGdsX0NIRUNLX05FWFRfSEVBREVSUyhbc3Bhd24uaF0pCisKKyAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3NwYXduX2ggPSB5ZXM7IHRoZW4KKyAgICBIQVZFX1NQQVdOX0g9MQorICAgIEFDX0NIRUNLX1RZUEVTKFtwb3NpeF9zcGF3bmF0dHJfdF0sIFtdLCBbSEFWRV9QT1NJWF9TUEFXTkFUVFJfVD0wXSwgW1sKKyNpbmNsdWRlIDxzcGF3bi5oPgorICAgICAgXV0pCisgICAgQUNfQ0hFQ0tfVFlQRVMoW3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190XSwgW10sCisgICAgICBbSEFWRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfVD0wXSwgW1sKKyNpbmNsdWRlIDxzcGF3bi5oPgorICAgICAgXV0pCisgIGVsc2UKKyAgICBIQVZFX1NQQVdOX0g9MAorICAgIEhBVkVfUE9TSVhfU1BBV05BVFRSX1Q9MAorICAgIEhBVkVfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX1Q9MAorICBmaQorICBBQ19TVUJTVChbSEFWRV9TUEFXTl9IXSkKKworICBkbmwgRW5zdXJlIHRoZSB0eXBlIHBpZF90IGdldHMgZGVmaW5lZC4KKyAgQUNfUkVRVUlSRShbQUNfVFlQRV9QSURfVF0pCisKKyAgZG5sIEVuc3VyZSB0aGUgdHlwZSBtb2RlX3QgZ2V0cyBkZWZpbmVkLgorICBBQ19SRVFVSVJFKFtBQ19UWVBFX01PREVfVF0pCisKKyAgQUNfUkVRVUlSRShbZ2xfSEFWRV9QT1NJWF9TUEFXTl0pCisKKyAgQUNfUkVRVUlSRShbQUNfQ19SRVNUUklDVF0pCisKKyAgZG5sIENoZWNrIGZvciBkZWNsYXJhdGlvbnMgb2YgYW55dGhpbmcgd2Ugd2FudCB0byBwb2lzb24gaWYgdGhlCisgIGRubCBjb3JyZXNwb25kaW5nIGdudWxpYiBtb2R1bGUgaXMgbm90IGluIHVzZS4KKyAgZ2xfV0FSTl9PTl9VU0VfUFJFUEFSRShbWyNpbmNsdWRlIDxzcGF3bi5oPgorICAgIF1dLCBbcG9zaXhfc3Bhd24gcG9zaXhfc3Bhd25wIHBvc2l4X3NwYXduYXR0cl9pbml0IHBvc2l4X3NwYXduYXR0cl9kZXN0cm95CisgICAgcG9zaXhfc3Bhd25hdHRyX2dldHNpZ2RlZmF1bHQgcG9zaXhfc3Bhd25hdHRyX3NldHNpZ2RlZmF1bHQKKyAgICBwb3NpeF9zcGF3bmF0dHJfZ2V0c2lnbWFzayBwb3NpeF9zcGF3bmF0dHJfc2V0c2lnbWFzaworICAgIHBvc2l4X3NwYXduYXR0cl9nZXRmbGFncyBwb3NpeF9zcGF3bmF0dHJfc2V0ZmxhZ3MKKyAgICBwb3NpeF9zcGF3bmF0dHJfZ2V0cGdyb3VwIHBvc2l4X3NwYXduYXR0cl9zZXRwZ3JvdXAKKyAgICBwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwb2xpY3kgcG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcG9saWN5CisgICAgcG9zaXhfc3Bhd25hdHRyX2dldHNjaGVkcGFyYW0gcG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcGFyYW0KKyAgICBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfaW5pdCBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfZGVzdHJveQorICAgIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZQorICAgIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyXSkKK10pCisKK2RubCBDaGVja3Mgd2hldGhlciB0aGUgc3lzdGVtIGhhcyB0aGUgZnVuY3Rpb25zIHBvc2l4X3NwYXduLgorZG5sIFNldHMgYWNfY3ZfZnVuY19wb3NpeF9zcGF3biBhbmQgSEFWRV9QT1NJWF9TUEFXTi4KK0FDX0RFRlVOKFtnbF9IQVZFX1BPU0lYX1NQQVdOXSwKK1sKKyAgZG5sIFVzZSBBQ19SRVFVSVJFIGhlcmUsIHNvIHRoYXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgYmVsb3cgaXMgZXhwYW5kZWQKKyAgZG5sIG9uY2Ugb25seSwgYmVmb3JlIGFsbCBzdGF0ZW1lbnRzIHRoYXQgb2NjdXIgaW4gb3RoZXIgbWFjcm9zLgorICBBQ19SRVFVSVJFKFtnbF9TUEFXTl9IX0RFRkFVTFRTXSkKKworICBBQ19DSEVDS19GVU5DU19PTkNFKFtwb3NpeF9zcGF3bl0pCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfcG9zaXhfc3Bhd24gIT0geWVzOyB0aGVuCisgICAgSEFWRV9QT1NJWF9TUEFXTj0wCisgIGZpCitdKQorCitBQ19ERUZVTihbZ2xfU1BBV05fTU9EVUxFX0lORElDQVRPUl0sCitbCisgIGRubCBVc2UgQUNfUkVRVUlSRSBoZXJlLCBzbyB0aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGFyZSBleHBhbmRlZCBvbmNlIG9ubHkuCisgIEFDX1JFUVVJUkUoW2dsX1NQQVdOX0hfREVGQVVMVFNdKQorICBnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRShbJDFdKQorICBkbmwgRGVmaW5lIGl0IGFsc28gYXMgYSBDIG1hY3JvLCBmb3IgdGhlIGJlbmVmaXQgb2YgdGhlIHVuaXQgdGVzdHMuCisgIGdsX01PRFVMRV9JTkRJQ0FUT1JfRk9SX1RFU1RTKFskMV0pCitdKQorCitBQ19ERUZVTihbZ2xfU1BBV05fSF9ERUZBVUxUU10sCitbCisgIEdOVUxJQl9QT1NJWF9TUEFXTj0wOyAgICAgICAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9QT1NJWF9TUEFXTl0pCisgIEdOVUxJQl9QT1NJWF9TUEFXTlA9MDsgICAgICAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9QT1NJWF9TUEFXTlBdKQorICBHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0lOSVQ9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0lOSVRdKQorICBHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERENMT1NFPTA7IEFDX1NVQlNUKFtHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERENMT1NFXSkKKyAgR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BREREVVAyPTA7ICBBQ19TVUJTVChbR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BREREVVAyXSkKKyAgR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERPUEVOPTA7ICBBQ19TVUJTVChbR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERPUEVOXSkKKyAgR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19ERVNUUk9ZPTA7ICBBQ19TVUJTVChbR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19ERVNUUk9ZXSkKKyAgR05VTElCX1BPU0lYX1NQQVdOQVRUUl9JTklUPTA7ICAgICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX1BPU0lYX1NQQVdOQVRUUl9JTklUXSkKKyAgR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRGTEFHUz0wOyAgICAgICAgICBBQ19TVUJTVChbR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRGTEFHU10pCisgIEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VURkxBR1M9MDsgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VURkxBR1NdKQorICBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFBHUk9VUD0wOyAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFBHUk9VUF0pCisgIEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUUEdST1VQPTA7ICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUUEdST1VQXSkKKyAgR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBBUkFNPTA7ICAgICBBQ19TVUJTVChbR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBBUkFNXSkKKyAgR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTQ0hFRFBBUkFNPTA7ICAgICBBQ19TVUJTVChbR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTQ0hFRFBBUkFNXSkKKyAgR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBPTElDWT0wOyAgICBBQ19TVUJTVChbR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBPTElDWV0pCisgIEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQT0xJQ1k9MDsgICAgQUNfU1VCU1QoW0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQT0xJQ1ldKQorICBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNJR0RFRkFVTFQ9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNJR0RFRkFVTFRdKQorICBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNJR0RFRkFVTFQ9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNJR0RFRkFVTFRdKQorICBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNJR01BU0s9MDsgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNJR01BU0tdKQorICBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNJR01BU0s9MDsgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNJR01BU0tdKQorICBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0RFU1RST1k9MDsgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0RFU1RST1ldKQorICBkbmwgQXNzdW1lIHByb3BlciBHTlUgYmVoYXZpb3IgdW5sZXNzIGFub3RoZXIgbW9kdWxlIHNheXMgb3RoZXJ3aXNlLgorICBIQVZFX1BPU0lYX1NQQVdOPTE7ICAgICAgICBBQ19TVUJTVChbSEFWRV9QT1NJWF9TUEFXTl0pCisgIEhBVkVfUE9TSVhfU1BBV05BVFRSX1Q9MTsgIEFDX1NVQlNUKFtIQVZFX1BPU0lYX1NQQVdOQVRUUl9UXSkKKyAgSEFWRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfVD0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfVF0pCisgIFJFUExBQ0VfUE9TSVhfU1BBV049MDsgICAgIEFDX1NVQlNUKFtSRVBMQUNFX1BPU0lYX1NQQVdOXSkKKyAgUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQUREQ0xPU0U9MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERENMT1NFXSkKKyAgUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMj0wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMl0pCisgIFJFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU49MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU5dKQorXSkKZGlmZiAtLWdpdCBhL200L3NwcmludGYtcG9zaXgubTQgYi9tNC9zcHJpbnRmLXBvc2l4Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZjUyMjIKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9zcHJpbnRmLXBvc2l4Lm00CkBAIC0wLDAgKzEsMTA4IEBACisjIHNwcmludGYtcG9zaXgubTQgc2VyaWFsIDEyCitkbmwgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0ZVTkNfU1BSSU5URl9QT1NJWF0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9TSVpFU19DOTldKQorICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfTE9OR19ET1VCTEVdKQorICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfSU5GSU5JVEVdKQorICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfSU5GSU5JVEVfTE9OR19ET1VCTEVdKQorICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfRElSRUNUSVZFX0FdKQorICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfRElSRUNUSVZFX0ZdKQorICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfRElSRUNUSVZFX05dKQorICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfRElSRUNUSVZFX0xTXSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX1BPU0lUSU9OU10pCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9GTEFHX0dST1VQSU5HXSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX0ZMQUdfTEVGVEFESlVTVF0pCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9GTEFHX1pFUk9dKQorICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfUFJFQ0lTSU9OXSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX0VOT01FTV0pCisgIGdsX2N2X2Z1bmNfc3ByaW50Zl9wb3NpeD1ubworICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfc2l6ZXNfYzk5IiBpbgorICAgICp5ZXMpCisgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfbG9uZ19kb3VibGUiIGluCisgICAgICAgICp5ZXMpCisgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlIiBpbgorICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlX2xvbmdfZG91YmxlIiBpbgorICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2EiIGluCisgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9mIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9uIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2xzIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9wb3NpdGlvbnMiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19ncm91cGluZyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfbGVmdGFkanVzdCIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZmxhZ196ZXJvIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX3ByZWNpc2lvbiIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2Vub21lbSIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNwcmludGYgZXhpc3RzIGFuZCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWxyZWFkeSBQT1NJWCBjb21wbGlhbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zcHJpbnRmX3Bvc2l4PXllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICBlc2FjCisgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfc3ByaW50Zl9wb3NpeCA9IG5vOyB0aGVuCisgICAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfTE9OR19ET1VCTEUKKyAgICBnbF9QUkVSRVFfVkFTTlBSSU5URl9JTkZJTklURV9ET1VCTEUKKyAgICBnbF9QUkVSRVFfVkFTTlBSSU5URl9JTkZJTklURV9MT05HX0RPVUJMRQorICAgIGdsX1BSRVJFUV9WQVNOUFJJTlRGX0RJUkVDVElWRV9BCisgICAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfRElSRUNUSVZFX0YKKyAgICBnbF9QUkVSRVFfVkFTTlBSSU5URl9ESVJFQ1RJVkVfTFMKKyAgICBnbF9QUkVSRVFfVkFTTlBSSU5URl9GTEFHX0dST1VQSU5HCisgICAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfRkxBR19MRUZUQURKVVNUCisgICAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfRkxBR19aRVJPCisgICAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfUFJFQ0lTSU9OCisgICAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfRU5PTUVNCisgICAgZ2xfUkVQTEFDRV9WQVNOUFJJTlRGCisgICAgZ2xfUkVQTEFDRV9TUFJJTlRGCisgIGZpCitdKQorCitBQ19ERUZVTihbZ2xfUkVQTEFDRV9TUFJJTlRGXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfU1RESU9fSF9ERUZBVUxUU10pCisgIEFDX0xJQk9CSihbc3ByaW50Zl0pCisgIFJFUExBQ0VfU1BSSU5URj0xCisgIGdsX1BSRVJFUV9TUFJJTlRGCitdKQorCitBQ19ERUZVTihbZ2xfUFJFUkVRX1NQUklOVEZdLCBbOl0pCmRpZmYgLS1naXQgYS9tNC9zc2l6ZV90Lm00IGIvbTQvc3NpemVfdC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDlkNjRjCi0tLSAvZGV2L251bGwKKysrIGIvbTQvc3NpemVfdC5tNApAQCAtMCwwICsxLDIzIEBACisjIHNzaXplX3QubTQgc2VyaWFsIDUgKGdldHRleHQtMC4xOC4yKQorZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDAzLCAyMDA2LCAyMDEwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorZG5sIFRlc3Qgd2hldGhlciBzc2l6ZV90IGlzIGRlZmluZWQuCisKK0FDX0RFRlVOKFtndF9UWVBFX1NTSVpFX1RdLAorWworICBBQ19DQUNIRV9DSEVDSyhbZm9yIHNzaXplX3RdLCBbZ3RfY3Zfc3NpemVfdF0sCisgICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgW1sjaW5jbHVkZSA8c3lzL3R5cGVzLmg+XV0sCisgICAgICAgICAgW1tpbnQgeCA9IHNpemVvZiAoc3NpemVfdCAqKSArIHNpemVvZiAoc3NpemVfdCk7CisgICAgICAgICAgICByZXR1cm4gIXg7XV0pXSwKKyAgICAgICBbZ3RfY3Zfc3NpemVfdD15ZXNdLCBbZ3RfY3Zfc3NpemVfdD1ub10pXSkKKyAgaWYgdGVzdCAkZ3RfY3Zfc3NpemVfdCA9IG5vOyB0aGVuCisgICAgQUNfREVGSU5FKFtzc2l6ZV90XSwgW2ludF0sCisgICAgICAgICAgICAgIFtEZWZpbmUgYXMgYSBzaWduZWQgdHlwZSBvZiB0aGUgc2FtZSBzaXplIGFzIHNpemVfdC5dKQorICBmaQorXSkKZGlmZiAtLWdpdCBhL200L3N0YXQubTQgYi9tNC9zdGF0Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZDExN2UKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9zdGF0Lm00CkBAIC0wLDAgKzEsNzEgQEAKKyMgc2VyaWFsIDExCisKKyMgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0ZVTkNfU1RBVF0sCitbCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkgZG5sIGZvciBjcm9zcy1jb21waWxlcworICBBQ19SRVFVSVJFKFtnbF9TWVNfU1RBVF9IX0RFRkFVTFRTXSkKKyAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbbHN0YXRdKQorICBkbmwgbWluZ3cgaXMgdGhlIG9ubHkga25vd24gcGxhdGZvcm0gd2hlcmUgc3RhdCgiLiIpIGFuZCBzdGF0KCIuLyIpIGRpZmZlcgorICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBzdGF0IGhhbmRsZXMgdHJhaWxpbmcgc2xhc2hlcyBvbiBkaXJlY3Rvcmllc10sCisgICAgICBbZ2xfY3ZfZnVuY19zdGF0X2Rpcl9zbGFzaF0sCisgICAgICBbQUNfUlVOX0lGRUxTRSgKKyAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgIFtbI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CitdXSwgW1tzdHJ1Y3Qgc3RhdCBzdDsgcmV0dXJuIHN0YXQgKCIuIiwgJnN0KSAhPSBzdGF0ICgiLi8iLCAmc3QpO11dKV0sCisgICAgICAgICBbZ2xfY3ZfZnVuY19zdGF0X2Rpcl9zbGFzaD15ZXNdLCBbZ2xfY3ZfZnVuY19zdGF0X2Rpcl9zbGFzaD1ub10sCisgICAgICAgICBbY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICAgICAgbWluZ3cqKSBnbF9jdl9mdW5jX3N0YXRfZGlyX3NsYXNoPSJndWVzc2luZyBubyI7OworICAgICAgICAgICAgKikgZ2xfY3ZfZnVuY19zdGF0X2Rpcl9zbGFzaD0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgZXNhY10pXSkKKyAgZG5sIEFJWCA3LjEsIFNvbGFyaXMgOSwgbWluZ3c2NCBtaXN0YWtlbmx5IHN1Y2NlZWQgb24gc3RhdCgiZmlsZS8iKS4KKyAgZG5sIChGb3IgbWluZ3csIHRoaXMgaXMgZHVlIHRvIGEgYnJva2VuIHN0YXQoKSBvdmVycmlkZSBpbiBsaWJtaW5nd2V4LmEuKQorICBkbmwgRnJlZUJTRCA3LjIgbWlzdGFrZW5seSBzdWNjZWVkcyBvbiBzdGF0KCJsaW5rLXRvLWZpbGUvIikuCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHN0YXQgaGFuZGxlcyB0cmFpbGluZyBzbGFzaGVzIG9uIGZpbGVzXSwKKyAgICAgIFtnbF9jdl9mdW5jX3N0YXRfZmlsZV9zbGFzaF0sCisgICAgICBbdG91Y2ggY29uZnRlc3QudG1wCisgICAgICAgIyBBc3N1bWUgdGhhdCBpZiB3ZSBoYXZlIGxzdGF0LCB3ZSBjYW4gYWxzbyBjaGVjayBzeW1saW5rcy4KKyAgICAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2xzdGF0ID0geWVzOyB0aGVuCisgICAgICAgICBsbiAtcyBjb25mdGVzdC50bXAgY29uZnRlc3QubG5rCisgICAgICAgZmkKKyAgICAgICBBQ19SVU5fSUZFTFNFKAorICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgW1sjaW5jbHVkZSA8c3lzL3N0YXQuaD4KK11dLCBbW2ludCByZXN1bHQgPSAwOworICAgICAgc3RydWN0IHN0YXQgc3Q7CisgICAgICBpZiAoIXN0YXQgKCJjb25mdGVzdC50bXAvIiwgJnN0KSkKKyAgICAgICAgcmVzdWx0IHw9IDE7CisjaWYgSEFWRV9MU1RBVAorICAgICAgaWYgKCFzdGF0ICgiY29uZnRlc3QubG5rLyIsICZzdCkpCisgICAgICAgIHJlc3VsdCB8PSAyOworI2VuZGlmCisgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICBdXSldLAorICAgICAgICAgW2dsX2N2X2Z1bmNfc3RhdF9maWxlX3NsYXNoPXllc10sIFtnbF9jdl9mdW5jX3N0YXRfZmlsZV9zbGFzaD1ub10sCisgICAgICAgICBbY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIGdsaWJjIHN5c3RlbXMuCisgICAgICAgICAgICAqLWdudSopIGdsX2N2X2Z1bmNfc3RhdF9maWxlX3NsYXNoPSJndWVzc2luZyB5ZXMiIDs7CisgICAgICAgICAgICAgICAgICAgICMgSWYgd2UgZG9uJ3Qga25vdywgYXNzdW1lIHRoZSB3b3JzdC4KKyAgICAgICAgICAgICopICAgICAgZ2xfY3ZfZnVuY19zdGF0X2ZpbGVfc2xhc2g9Imd1ZXNzaW5nIG5vIiA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgIF0pCisgICAgICAgcm0gLWYgY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lmxua10pCisgIGNhc2UgJGdsX2N2X2Z1bmNfc3RhdF9kaXJfc2xhc2ggaW4KKyAgICAqbm8pIFJFUExBQ0VfU1RBVD0xCisgICAgICBBQ19ERUZJTkUoW1JFUExBQ0VfRlVOQ19TVEFUX0RJUl0sIFsxXSwgW0RlZmluZSB0byAxIGlmIHN0YXQgbmVlZHMKKyAgICAgICAgaGVscCB3aGVuIHBhc3NlZCBhIGRpcmVjdG9yeSBuYW1lIHdpdGggYSB0cmFpbGluZyBzbGFzaF0pOzsKKyAgZXNhYworICBjYXNlICRnbF9jdl9mdW5jX3N0YXRfZmlsZV9zbGFzaCBpbgorICAgICpubykgUkVQTEFDRV9TVEFUPTEKKyAgICAgIEFDX0RFRklORShbUkVQTEFDRV9GVU5DX1NUQVRfRklMRV0sIFsxXSwgW0RlZmluZSB0byAxIGlmIHN0YXQgbmVlZHMKKyAgICAgICAgaGVscCB3aGVuIHBhc3NlZCBhIGZpbGUgbmFtZSB3aXRoIGEgdHJhaWxpbmcgc2xhc2hdKTs7CisgIGVzYWMKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvc3RhdC5jLgorQUNfREVGVU4oW2dsX1BSRVJFUV9TVEFUXSwgWzpdKQpkaWZmIC0tZ2l0IGEvbTQvc3RkYm9vbC5tNCBiL200L3N0ZGJvb2wubTQKaW5kZXggMjIwNGVjZC4uZWFiZmE2NCAxMDA2NDQKLS0tIGEvbTQvc3RkYm9vbC5tNAorKysgYi9tNC9zdGRib29sLm00CkBAIC0xLDE1ICsxLDE3IEBACiAjIENoZWNrIGZvciBzdGRib29sLmggdGhhdCBjb25mb3JtcyB0byBDOTkuCiAKLWRubCBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKIGRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKKyNzZXJpYWwgNQorCiAjIFByZXBhcmUgZm9yIHN1YnN0aXR1dGluZyA8c3RkYm9vbC5oPiBpZiBpdCBpcyBub3Qgc3VwcG9ydGVkLgogCiBBQ19ERUZVTihbQU1fU1REQk9PTF9IXSwKIFsKLSAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NUREJPT0xdKQorICBBQ19SRVFVSVJFKFtBQ19DSEVDS19IRUFERVJfU1REQk9PTF0pCiAKICAgIyBEZWZpbmUgdHdvIGFkZGl0aW9uYWwgdmFyaWFibGVzIHVzZWQgaW4gdGhlIE1ha2VmaWxlIHN1YnN0aXR1dGlvbi4KIApAQCAtMTksNiArMjEsNyBAQAogICAgIFNUREJPT0xfSD0nc3RkYm9vbC5oJwogICBmaQogICBBQ19TVUJTVChbU1REQk9PTF9IXSkKKyAgQU1fQ09ORElUSU9OQUwoW0dMX0dFTkVSQVRFX1NUREJPT0xfSF0sIFt0ZXN0IC1uICIkU1REQk9PTF9IIl0pCiAKICAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfX0Jvb2wiID0geWVzOyB0aGVuCiAgICAgSEFWRV9fQk9PTD0xCkBAIC0zMSw4NSArMzQsNjcgQEAKICMgQU1fU1REQk9PTF9IIHdpbGwgYmUgcmVuYW1lZCB0byBnbF9TVERCT09MX0ggaW4gdGhlIGZ1dHVyZS4KIEFDX0RFRlVOKFtnbF9TVERCT09MX0hdLCBbQU1fU1REQk9PTF9IXSkKIAotIyBUaGlzIG1hY3JvIGlzIG9ubHkgbmVlZGVkIGluIGF1dG9jb25mIDw9IDIuNTkuICBOZXdlciB2ZXJzaW9ucyBvZiBhdXRvY29uZgotIyBoYXZlIHRoaXMgbWFjcm8gYnVpbHQtaW4uCisjIFRoaXMgdmVyc2lvbiBvZiB0aGUgbWFjcm8gaXMgbmVlZGVkIGluIGF1dG9jb25mIDw9IDIuNjguCiAKLUFDX0RFRlVOKFtBQ19IRUFERVJfU1REQk9PTF0sCitBQ19ERUZVTihbQUNfQ0hFQ0tfSEVBREVSX1NUREJPT0xdLAogICBbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzdGRib29sLmggdGhhdCBjb25mb3JtcyB0byBDOTldLAogICAgICBbYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaF0sCi0gICAgIFtBQ19UUllfQ09NUElMRSgKLQlbCi0JICAjaW5jbHVkZSA8c3RkYm9vbC5oPgotCSAgI2lmbmRlZiBib29sCi0JICAgImVycm9yOiBib29sIGlzIG5vdCBkZWZpbmVkIgotCSAgI2VuZGlmCi0JICAjaWZuZGVmIGZhbHNlCi0JICAgImVycm9yOiBmYWxzZSBpcyBub3QgZGVmaW5lZCIKLQkgICNlbmRpZgotCSAgI2lmIGZhbHNlCi0JICAgImVycm9yOiBmYWxzZSBpcyBub3QgMCIKLQkgICNlbmRpZgotCSAgI2lmbmRlZiB0cnVlCi0JICAgImVycm9yOiB0cnVlIGlzIG5vdCBkZWZpbmVkIgotCSAgI2VuZGlmCi0JICAjaWYgdHJ1ZSAhPSAxCi0JICAgImVycm9yOiB0cnVlIGlzIG5vdCAxIgotCSAgI2VuZGlmCi0JICAjaWZuZGVmIF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkCi0JICAgImVycm9yOiBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCBpcyBub3QgZGVmaW5lZCIKLQkgICNlbmRpZgorICAgICBbQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgIFtbCisgICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyAgICAgICAgICAgICAjaWZuZGVmIGJvb2wKKyAgICAgICAgICAgICAgImVycm9yOiBib29sIGlzIG5vdCBkZWZpbmVkIgorICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICNpZm5kZWYgZmFsc2UKKyAgICAgICAgICAgICAgImVycm9yOiBmYWxzZSBpcyBub3QgZGVmaW5lZCIKKyAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAjaWYgZmFsc2UKKyAgICAgICAgICAgICAgImVycm9yOiBmYWxzZSBpcyBub3QgMCIKKyAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAjaWZuZGVmIHRydWUKKyAgICAgICAgICAgICAgImVycm9yOiB0cnVlIGlzIG5vdCBkZWZpbmVkIgorICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICNpZiB0cnVlICE9IDEKKyAgICAgICAgICAgICAgImVycm9yOiB0cnVlIGlzIG5vdCAxIgorICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICNpZm5kZWYgX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQKKyAgICAgICAgICAgICAgImVycm9yOiBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCBpcyBub3QgZGVmaW5lZCIKKyAgICAgICAgICAgICAjZW5kaWYKIAotCSAgc3RydWN0IHMgeyBfQm9vbCBzOiAxOyBfQm9vbCB0OyB9IHM7CisgICAgICAgICAgICAgc3RydWN0IHMgeyBfQm9vbCBzOiAxOyBfQm9vbCB0OyB9IHM7CiAKLQkgIGNoYXIgYVt0cnVlID09IDEgPyAxIDogLTFdOwotCSAgY2hhciBiW2ZhbHNlID09IDAgPyAxIDogLTFdOwotCSAgY2hhciBjW19fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkID09IDEgPyAxIDogLTFdOwotCSAgY2hhciBkWyhib29sKSAwLjUgPT0gdHJ1ZSA/IDEgOiAtMV07Ci0JICBib29sIGUgPSAmczsKLQkgIGNoYXIgZlsoX0Jvb2wpIDAuMCA9PSBmYWxzZSA/IDEgOiAtMV07Ci0JICBjaGFyIGdbdHJ1ZV07Ci0JICBjaGFyIGhbc2l6ZW9mIChfQm9vbCldOwotCSAgY2hhciBpW3NpemVvZiBzLnRdOwotCSAgZW51bSB7IGogPSBmYWxzZSwgayA9IHRydWUsIGwgPSBmYWxzZSAqIHRydWUsIG0gPSB0cnVlICogMjU2IH07Ci0JICBfQm9vbCBuW21dOwotCSAgY2hhciBvW3NpemVvZiBuID09IG0gKiBzaXplb2YgblswXSA/IDEgOiAtMV07Ci0JICBjaGFyIHBbLTEgLSAoX0Jvb2wpIDAgPCAwICYmIC0xIC0gKGJvb2wpIDAgPCAwID8gMSA6IC0xXTsKLQkgICNpZiBkZWZpbmVkIF9feGxjX18gfHwgZGVmaW5lZCBfX0dOVUNfXwotCSAgIC8qIENhdGNoIGEgYnVnIGluIElCTSBBSVggeGxjIGNvbXBpbGVyIHZlcnNpb24gNi4wLjAuMAotCSAgICAgIHJlcG9ydGVkIGJ5IEphbWVzIExlbWxleSBvbiAyMDA1LTEwLTA1OyBzZWUKLQkgICAgICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWNvcmV1dGlscy8yMDA1LTEwL21zZzAwMDg2Lmh0bWwKLQkgICAgICBUaGlzIHRlc3QgaXMgbm90IHF1aXRlIHJpZ2h0LCBzaW5jZSB4bGMgaXMgYWxsb3dlZCB0bwotCSAgICAgIHJlamVjdCB0aGlzIHByb2dyYW0sIGFzIHRoZSBpbml0aWFsaXplciBmb3IgeGxjYnVnIGlzCi0JICAgICAgbm90IG9uZSBvZiB0aGUgZm9ybXMgdGhhdCBDIHJlcXVpcmVzIHN1cHBvcnQgZm9yLgotCSAgICAgIEhvd2V2ZXIsIGRvaW5nIHRoZSB0ZXN0IHJpZ2h0IHdvdWxkIHJlcXVpcmUgYSBydW4tdGltZQotCSAgICAgIHRlc3QsIGFuZCB0aGF0IHdvdWxkIG1ha2UgY3Jvc3MtY29tcGlsYXRpb24gaGFyZGVyLgotCSAgICAgIExldCB1cyBob3BlIHRoYXQgSUJNIGZpeGVzIHRoZSB4bGMgYnVnLCBhbmQgYWxzbyBhZGRzCi0JICAgICAgc3VwcG9ydCBmb3IgdGhpcyBraW5kIG9mIGNvbnN0YW50IGV4cHJlc3Npb24uICBJbiB0aGUKLQkgICAgICBtZWFudGltZSwgdGhpcyB0ZXN0IHdpbGwgcmVqZWN0IHhsYywgd2hpY2ggaXMgT0ssIHNpbmNlCi0JICAgICAgb3VyIHN0ZGJvb2wuaCBzdWJzdGl0dXRlIHNob3VsZCBzdWZmaWNlLiAgV2UgYWxzbyB0ZXN0Ci0JICAgICAgdGhpcyB3aXRoIEdDQywgd2hlcmUgaXQgc2hvdWxkIHdvcmssIHRvIGRldGVjdCBtb3JlCi0JICAgICAgcXVpY2tseSB3aGV0aGVyIHNvbWVvbmUgbWVzc2VzIHVwIHRoZSB0ZXN0IGluIHRoZQotCSAgICAgIGZ1dHVyZS4gICovCi0JICAgY2hhciBkaWdzW10gPSAiMDEyMzQ1Njc4OSI7Ci0JICAgaW50IHhsY2J1ZyA9IDEgLyAoJihkaWdzICsgNSlbLTIgKyAoYm9vbCkgMV0gPT0gJmRpZ3NbNF0gPyAxIDogLTEpOwotCSAgI2VuZGlmCi0JICAvKiBDYXRjaCBhIGJ1ZyBpbiBhbiBIUC1VWCBDIGNvbXBpbGVyLiAgU2VlCi0JICAgICBodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAwMy0xMi9tc2cwMjMwMy5odG1sCi0JICAgICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWNvcmV1dGlscy8yMDA1LTExL21zZzAwMTYxLmh0bWwKLQkgICAqLwotCSAgX0Jvb2wgcSA9IHRydWU7Ci0JICBfQm9vbCAqcHEgPSAmcTsKLQldLAotCVsKLQkgICpwcSB8PSBxOwotCSAgKnBxIHw9ICEgcTsKLQkgIC8qIFJlZmVyIHRvIGV2ZXJ5IGRlY2xhcmVkIHZhbHVlLCB0byBhdm9pZCBjb21waWxlciBvcHRpbWl6YXRpb25zLiAgKi8KLQkgIHJldHVybiAoIWEgKyAhYiArICFjICsgIWQgKyAhZSArICFmICsgIWcgKyAhaCArICFpICsgISFqICsgIWsgKyAhIWwKLQkJICArICFtICsgIW4gKyAhbyArICFwICsgIXEgKyAhcHEpOwotCV0sCi0JW2FjX2N2X2hlYWRlcl9zdGRib29sX2g9eWVzXSwKLQlbYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaD1ub10pXSkKKyAgICAgICAgICAgICBjaGFyIGFbdHJ1ZSA9PSAxID8gMSA6IC0xXTsKKyAgICAgICAgICAgICBjaGFyIGJbZmFsc2UgPT0gMCA/IDEgOiAtMV07CisgICAgICAgICAgICAgY2hhciBjW19fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkID09IDEgPyAxIDogLTFdOworICAgICAgICAgICAgIGNoYXIgZFsoYm9vbCkgMC41ID09IHRydWUgPyAxIDogLTFdOworICAgICAgICAgICAgIC8qIFNlZSBib2R5IG9mIG1haW4gcHJvZ3JhbSBmb3IgJ2UnLiAgKi8KKyAgICAgICAgICAgICBjaGFyIGZbKF9Cb29sKSAwLjAgPT0gZmFsc2UgPyAxIDogLTFdOworICAgICAgICAgICAgIGNoYXIgZ1t0cnVlXTsKKyAgICAgICAgICAgICBjaGFyIGhbc2l6ZW9mIChfQm9vbCldOworICAgICAgICAgICAgIGNoYXIgaVtzaXplb2Ygcy50XTsKKyAgICAgICAgICAgICBlbnVtIHsgaiA9IGZhbHNlLCBrID0gdHJ1ZSwgbCA9IGZhbHNlICogdHJ1ZSwgbSA9IHRydWUgKiAyNTYgfTsKKyAgICAgICAgICAgICAvKiBUaGUgZm9sbG93aW5nIGZhaWxzIGZvcgorICAgICAgICAgICAgICAgIEhQIGFDKysvQU5TSSBDIEIzOTEwQiBBLjA1LjU1IFtEZWMgMDQgMjAwM10uICovCisgICAgICAgICAgICAgX0Jvb2wgblttXTsKKyAgICAgICAgICAgICBjaGFyIG9bc2l6ZW9mIG4gPT0gbSAqIHNpemVvZiBuWzBdID8gMSA6IC0xXTsKKyAgICAgICAgICAgICBjaGFyIHBbLTEgLSAoX0Jvb2wpIDAgPCAwICYmIC0xIC0gKGJvb2wpIDAgPCAwID8gMSA6IC0xXTsKKyAgICAgICAgICAgICAvKiBDYXRjaCBhIGJ1ZyBpbiBhbiBIUC1VWCBDIGNvbXBpbGVyLiAgU2VlCisgICAgICAgICAgICAgICAgaHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMDMtMTIvbXNnMDIzMDMuaHRtbAorICAgICAgICAgICAgICAgIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctY29yZXV0aWxzLzIwMDUtMTEvbXNnMDAxNjEuaHRtbAorICAgICAgICAgICAgICAqLworICAgICAgICAgICAgIF9Cb29sIHEgPSB0cnVlOworICAgICAgICAgICAgIF9Cb29sICpwcSA9ICZxOworICAgICAgICAgICBdXSwKKyAgICAgICAgICAgW1sKKyAgICAgICAgICAgICBib29sIGUgPSAmczsKKyAgICAgICAgICAgICAqcHEgfD0gcTsKKyAgICAgICAgICAgICAqcHEgfD0gISBxOworICAgICAgICAgICAgIC8qIFJlZmVyIHRvIGV2ZXJ5IGRlY2xhcmVkIHZhbHVlLCB0byBhdm9pZCBjb21waWxlciBvcHRpbWl6YXRpb25zLiAgKi8KKyAgICAgICAgICAgICByZXR1cm4gKCFhICsgIWIgKyAhYyArICFkICsgIWUgKyAhZiArICFnICsgIWggKyAhaSArICEhaiArICFrICsgISFsCisgICAgICAgICAgICAgICAgICAgICArICFtICsgIW4gKyAhbyArICFwICsgIXEgKyAhcHEpOworICAgICAgICAgICBdXSldLAorICAgICAgICBbYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaD15ZXNdLAorICAgICAgICBbYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaD1ub10pXSkKICAgIEFDX0NIRUNLX1RZUEVTKFtfQm9vbF0pCi0gICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYm9vbF9oID0geWVzOyB0aGVuCi0gICAgIEFDX0RFRklORShIQVZFX1NUREJPT0xfSCwgMSwgW0RlZmluZSB0byAxIGlmIHN0ZGJvb2wuaCBjb25mb3JtcyB0byBDOTkuXSkKLSAgIGZpXSkKK10pCmRpZmYgLS1naXQgYS9tNC9zdGRkZWZfaC5tNCBiL200L3N0ZGRlZl9oLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMTE2MDkKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9zdGRkZWZfaC5tNApAQCAtMCwwICsxLDQ3IEBACitkbmwgQSBwbGFjZWhvbGRlciBmb3IgUE9TSVggMjAwOCA8c3RkZGVmLmg+LCBmb3IgcGxhdGZvcm1zIHRoYXQgaGF2ZSBpc3N1ZXMuCisjIHN0ZGRlZl9oLm00IHNlcmlhbCA0CitkbmwgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX1NURERFRl9IXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfU1REREVGX0hfREVGQVVMVFNdKQorICBBQ19SRVFVSVJFKFtndF9UWVBFX1dDSEFSX1RdKQorICBTVERERUZfSD0KKyAgaWYgdGVzdCAkZ3RfY3ZfY193Y2hhcl90ID0gbm87IHRoZW4KKyAgICBIQVZFX1dDSEFSX1Q9MAorICAgIFNURERFRl9IPXN0ZGRlZi5oCisgIGZpCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIE5VTEwgY2FuIGJlIHVzZWQgaW4gYXJiaXRyYXJ5IGV4cHJlc3Npb25zXSwKKyAgICBbZ2xfY3ZfZGVjbF9udWxsX3dvcmtzXSwKKyAgICBbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgICAgIGludCB0ZXN0WzIgKiAoc2l6ZW9mIE5VTEwgPT0gc2l6ZW9mICh2b2lkICopKSAtMV07CitdXSldLAorICAgICAgW2dsX2N2X2RlY2xfbnVsbF93b3Jrcz15ZXNdLAorICAgICAgW2dsX2N2X2RlY2xfbnVsbF93b3Jrcz1ub10pXSkKKyAgaWYgdGVzdCAkZ2xfY3ZfZGVjbF9udWxsX3dvcmtzID0gbm87IHRoZW4KKyAgICBSRVBMQUNFX05VTEw9MQorICAgIFNURERFRl9IPXN0ZGRlZi5oCisgIGZpCisgIEFDX1NVQlNUKFtTVERERUZfSF0pCisgIEFNX0NPTkRJVElPTkFMKFtHTF9HRU5FUkFURV9TVERERUZfSF0sIFt0ZXN0IC1uICIkU1REREVGX0giXSkKKyAgaWYgdGVzdCAtbiAiJFNURERFRl9IIjsgdGhlbgorICAgIGdsX05FWFRfSEVBREVSUyhbc3RkZGVmLmhdKQorICBmaQorXSkKKworQUNfREVGVU4oW2dsX1NURERFRl9NT0RVTEVfSU5ESUNBVE9SXSwKK1sKKyAgZG5sIFVzZSBBQ19SRVFVSVJFIGhlcmUsIHNvIHRoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGV4cGFuZGVkIG9uY2Ugb25seS4KKyAgQUNfUkVRVUlSRShbZ2xfU1REREVGX0hfREVGQVVMVFNdKQorICBnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRShbJDFdKQorXSkKKworQUNfREVGVU4oW2dsX1NURERFRl9IX0RFRkFVTFRTXSwKK1sKKyAgZG5sIEFzc3VtZSBwcm9wZXIgR05VIGJlaGF2aW9yIHVubGVzcyBhbm90aGVyIG1vZHVsZSBzYXlzIG90aGVyd2lzZS4KKyAgUkVQTEFDRV9OVUxMPTA7ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX05VTExdKQorICBIQVZFX1dDSEFSX1Q9MTsgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfV0NIQVJfVF0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvc3RkaW50Lm00IGIvbTQvc3RkaW50Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZDM0MmUKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9zdGRpbnQubTQKQEAgLTAsMCArMSw0ODQgQEAKKyMgc3RkaW50Lm00IHNlcmlhbCA0MworZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIFBhdWwgRWdnZXJ0IGFuZCBCcnVubyBIYWlibGUuCitkbmwgVGVzdCB3aGV0aGVyIDxzdGRpbnQuaD4gaXMgc3VwcG9ydGVkIG9yIG11c3QgYmUgc3Vic3RpdHV0ZWQuCisKK0FDX0RFRlVOX09OQ0UoW2dsX1NURElOVF9IXSwKK1sKKyAgQUNfUFJFUkVRKFsyLjU5XSlkbmwKKworICBkbmwgQ2hlY2sgZm9yIGxvbmcgbG9uZyBpbnQgYW5kIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQuCisgIEFDX1JFUVVJUkUoW0FDX1RZUEVfTE9OR19MT05HX0lOVF0pCisgIGlmIHRlc3QgJGFjX2N2X3R5cGVfbG9uZ19sb25nX2ludCA9IHllczsgdGhlbgorICAgIEhBVkVfTE9OR19MT05HX0lOVD0xCisgIGVsc2UKKyAgICBIQVZFX0xPTkdfTE9OR19JTlQ9MAorICBmaQorICBBQ19TVUJTVChbSEFWRV9MT05HX0xPTkdfSU5UXSkKKyAgQUNfUkVRVUlSRShbQUNfVFlQRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UXSkKKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50ID0geWVzOyB0aGVuCisgICAgSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UPTEKKyAgZWxzZQorICAgIEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVD0wCisgIGZpCisgIEFDX1NVQlNUKFtIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRdKQorCisgIGRubCBDaGVjayBmb3IgPHdjaGFyLmg+LCBpbiB0aGUgc2FtZSB3YXkgYXMgZ2xfV0NIQVJfSCBkb2VzLgorICBBQ19DSEVDS19IRUFERVJTX09OQ0UoW3djaGFyLmhdKQorICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfd2NoYXJfaCA9IHllczsgdGhlbgorICAgIEhBVkVfV0NIQVJfSD0xCisgIGVsc2UKKyAgICBIQVZFX1dDSEFSX0g9MAorICBmaQorICBBQ19TVUJTVChbSEFWRV9XQ0hBUl9IXSkKKworICBkbmwgQ2hlY2sgZm9yIDxpbnR0eXBlcy5oPi4KKyAgZG5sIEFDX0lOQ0xVREVTX0RFRkFVTFQgZGVmaW5lcyAkYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2guCisgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0aGVuCisgICAgSEFWRV9JTlRUWVBFU19IPTEKKyAgZWxzZQorICAgIEhBVkVfSU5UVFlQRVNfSD0wCisgIGZpCisgIEFDX1NVQlNUKFtIQVZFX0lOVFRZUEVTX0hdKQorCisgIGRubCBDaGVjayBmb3IgPHN5cy90eXBlcy5oPi4KKyAgZG5sIEFDX0lOQ0xVREVTX0RFRkFVTFQgZGVmaW5lcyAkYWNfY3ZfaGVhZGVyX3N5c190eXBlc19oLgorICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3R5cGVzX2ggPSB5ZXM7IHRoZW4KKyAgICBIQVZFX1NZU19UWVBFU19IPTEKKyAgZWxzZQorICAgIEhBVkVfU1lTX1RZUEVTX0g9MAorICBmaQorICBBQ19TVUJTVChbSEFWRV9TWVNfVFlQRVNfSF0pCisKKyAgZ2xfQ0hFQ0tfTkVYVF9IRUFERVJTKFtzdGRpbnQuaF0pCisgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRpbnRfaCA9IHllczsgdGhlbgorICAgIEhBVkVfU1RESU5UX0g9MQorICBlbHNlCisgICAgSEFWRV9TVERJTlRfSD0wCisgIGZpCisgIEFDX1NVQlNUKFtIQVZFX1NURElOVF9IXSkKKworICBkbmwgTm93IHNlZSB3aGV0aGVyIHdlIG5lZWQgYSBzdWJzdGl0dXRlIDxzdGRpbnQuaD4uCisgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRpbnRfaCA9IHllczsgdGhlbgorICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHN0ZGludC5oIGNvbmZvcm1zIHRvIEM5OV0sCisgICAgICBbZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfc3RkaW50X2hdLAorICAgICAgW2dsX2N2X2hlYWRlcl93b3JraW5nX3N0ZGludF9oPW5vCisgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjZGVmaW5lIF9HTF9KVVNUX0lOQ0xVREVfU1lTVEVNX1NURElOVF9IIDEgLyogd29yayBpZiBidWlsZCBpc24ndCBjbGVhbiAqLworI2luY2x1ZGUgPHN0ZGludC5oPgorLyogRHJhZ29uZmx5IGRlZmluZXMgV0NIQVJfTUlOLCBXQ0hBUl9NQVggb25seSBpbiA8d2NoYXIuaD4uICAqLworI2lmICEoZGVmaW5lZCBXQ0hBUl9NSU4gJiYgZGVmaW5lZCBXQ0hBUl9NQVgpCisjZXJyb3IgIldDSEFSX01JTiwgV0NIQVJfTUFYIG5vdCBkZWZpbmVkIGluIDxzdGRpbnQuaD4iCisjZW5kaWYKK10KK2dsX1NURElOVF9JTkNMVURFUworWworI2lmZGVmIElOVDhfTUFYCitpbnQ4X3QgYTEgPSBJTlQ4X01BWDsKK2ludDhfdCBhMW1pbiA9IElOVDhfTUlOOworI2VuZGlmCisjaWZkZWYgSU5UMTZfTUFYCitpbnQxNl90IGEyID0gSU5UMTZfTUFYOworaW50MTZfdCBhMm1pbiA9IElOVDE2X01JTjsKKyNlbmRpZgorI2lmZGVmIElOVDMyX01BWAoraW50MzJfdCBhMyA9IElOVDMyX01BWDsKK2ludDMyX3QgYTNtaW4gPSBJTlQzMl9NSU47CisjZW5kaWYKKyNpZmRlZiBJTlQ2NF9NQVgKK2ludDY0X3QgYTQgPSBJTlQ2NF9NQVg7CitpbnQ2NF90IGE0bWluID0gSU5UNjRfTUlOOworI2VuZGlmCisjaWZkZWYgVUlOVDhfTUFYCit1aW50OF90IGIxID0gVUlOVDhfTUFYOworI2Vsc2UKK3R5cGVkZWYgaW50IGIxWyh1bnNpZ25lZCBjaGFyKSAtMSAhPSAyNTUgPyAxIDogLTFdOworI2VuZGlmCisjaWZkZWYgVUlOVDE2X01BWAordWludDE2X3QgYjIgPSBVSU5UMTZfTUFYOworI2VuZGlmCisjaWZkZWYgVUlOVDMyX01BWAordWludDMyX3QgYjMgPSBVSU5UMzJfTUFYOworI2VuZGlmCisjaWZkZWYgVUlOVDY0X01BWAordWludDY0X3QgYjQgPSBVSU5UNjRfTUFYOworI2VuZGlmCitpbnRfbGVhc3Q4X3QgYzEgPSBJTlQ4X0MgKDB4N2YpOworaW50X2xlYXN0OF90IGMxbWF4ID0gSU5UX0xFQVNUOF9NQVg7CitpbnRfbGVhc3Q4X3QgYzFtaW4gPSBJTlRfTEVBU1Q4X01JTjsKK2ludF9sZWFzdDE2X3QgYzIgPSBJTlQxNl9DICgweDdmZmYpOworaW50X2xlYXN0MTZfdCBjMm1heCA9IElOVF9MRUFTVDE2X01BWDsKK2ludF9sZWFzdDE2X3QgYzJtaW4gPSBJTlRfTEVBU1QxNl9NSU47CitpbnRfbGVhc3QzMl90IGMzID0gSU5UMzJfQyAoMHg3ZmZmZmZmZik7CitpbnRfbGVhc3QzMl90IGMzbWF4ID0gSU5UX0xFQVNUMzJfTUFYOworaW50X2xlYXN0MzJfdCBjM21pbiA9IElOVF9MRUFTVDMyX01JTjsKK2ludF9sZWFzdDY0X3QgYzQgPSBJTlQ2NF9DICgweDdmZmZmZmZmZmZmZmZmZmYpOworaW50X2xlYXN0NjRfdCBjNG1heCA9IElOVF9MRUFTVDY0X01BWDsKK2ludF9sZWFzdDY0X3QgYzRtaW4gPSBJTlRfTEVBU1Q2NF9NSU47Cit1aW50X2xlYXN0OF90IGQxID0gVUlOVDhfQyAoMHhmZik7Cit1aW50X2xlYXN0OF90IGQxbWF4ID0gVUlOVF9MRUFTVDhfTUFYOwordWludF9sZWFzdDE2X3QgZDIgPSBVSU5UMTZfQyAoMHhmZmZmKTsKK3VpbnRfbGVhc3QxNl90IGQybWF4ID0gVUlOVF9MRUFTVDE2X01BWDsKK3VpbnRfbGVhc3QzMl90IGQzID0gVUlOVDMyX0MgKDB4ZmZmZmZmZmYpOwordWludF9sZWFzdDMyX3QgZDNtYXggPSBVSU5UX0xFQVNUMzJfTUFYOwordWludF9sZWFzdDY0X3QgZDQgPSBVSU5UNjRfQyAoMHhmZmZmZmZmZmZmZmZmZmZmKTsKK3VpbnRfbGVhc3Q2NF90IGQ0bWF4ID0gVUlOVF9MRUFTVDY0X01BWDsKK2ludF9mYXN0OF90IGUxID0gSU5UX0ZBU1Q4X01BWDsKK2ludF9mYXN0OF90IGUxbWluID0gSU5UX0ZBU1Q4X01JTjsKK2ludF9mYXN0MTZfdCBlMiA9IElOVF9GQVNUMTZfTUFYOworaW50X2Zhc3QxNl90IGUybWluID0gSU5UX0ZBU1QxNl9NSU47CitpbnRfZmFzdDMyX3QgZTMgPSBJTlRfRkFTVDMyX01BWDsKK2ludF9mYXN0MzJfdCBlM21pbiA9IElOVF9GQVNUMzJfTUlOOworaW50X2Zhc3Q2NF90IGU0ID0gSU5UX0ZBU1Q2NF9NQVg7CitpbnRfZmFzdDY0X3QgZTRtaW4gPSBJTlRfRkFTVDY0X01JTjsKK3VpbnRfZmFzdDhfdCBmMSA9IFVJTlRfRkFTVDhfTUFYOwordWludF9mYXN0MTZfdCBmMiA9IFVJTlRfRkFTVDE2X01BWDsKK3VpbnRfZmFzdDMyX3QgZjMgPSBVSU5UX0ZBU1QzMl9NQVg7Cit1aW50X2Zhc3Q2NF90IGY0ID0gVUlOVF9GQVNUNjRfTUFYOworI2lmZGVmIElOVFBUUl9NQVgKK2ludHB0cl90IGcgPSBJTlRQVFJfTUFYOworaW50cHRyX3QgZ21pbiA9IElOVFBUUl9NSU47CisjZW5kaWYKKyNpZmRlZiBVSU5UUFRSX01BWAordWludHB0cl90IGggPSBVSU5UUFRSX01BWDsKKyNlbmRpZgoraW50bWF4X3QgaSA9IElOVE1BWF9NQVg7Cit1aW50bWF4X3QgaiA9IFVJTlRNQVhfTUFYOworCisjaW5jbHVkZSA8bGltaXRzLmg+IC8qIGZvciBDSEFSX0JJVCAqLworI2RlZmluZSBUWVBFX01JTklNVU0odCkgXAorICAoKHQpICgodCkgMCA8ICh0KSAtMSA/ICh0KSAwIDogfiBUWVBFX01BWElNVU0gKHQpKSkKKyNkZWZpbmUgVFlQRV9NQVhJTVVNKHQpIFwKKyAgKCh0KSAoKHQpIDAgPCAodCkgLTEgXAorICAgICAgICA/ICh0KSAtMSBcCisgICAgICAgIDogKCgoKHQpIDEgPDwgKHNpemVvZiAodCkgKiBDSEFSX0JJVCAtIDIpKSAtIDEpICogMiArIDEpKSkKK3N0cnVjdCBzIHsKKyAgaW50IGNoZWNrX1BUUkRJRkY6CisgICAgICBQVFJESUZGX01JTiA9PSBUWVBFX01JTklNVU0gKHB0cmRpZmZfdCkKKyAgICAgICYmIFBUUkRJRkZfTUFYID09IFRZUEVfTUFYSU1VTSAocHRyZGlmZl90KQorICAgICAgPyAxIDogLTE7CisgIC8qIERldGVjdCBidWcgaW4gRnJlZUJTRCA2LjAgLyBpYTY0LiAgKi8KKyAgaW50IGNoZWNrX1NJR19BVE9NSUM6CisgICAgICBTSUdfQVRPTUlDX01JTiA9PSBUWVBFX01JTklNVU0gKHNpZ19hdG9taWNfdCkKKyAgICAgICYmIFNJR19BVE9NSUNfTUFYID09IFRZUEVfTUFYSU1VTSAoc2lnX2F0b21pY190KQorICAgICAgPyAxIDogLTE7CisgIGludCBjaGVja19TSVpFOiBTSVpFX01BWCA9PSBUWVBFX01BWElNVU0gKHNpemVfdCkgPyAxIDogLTE7CisgIGludCBjaGVja19XQ0hBUjoKKyAgICAgIFdDSEFSX01JTiA9PSBUWVBFX01JTklNVU0gKHdjaGFyX3QpCisgICAgICAmJiBXQ0hBUl9NQVggPT0gVFlQRV9NQVhJTVVNICh3Y2hhcl90KQorICAgICAgPyAxIDogLTE7CisgIC8qIERldGVjdCBidWcgaW4gbWluZ3cuICAqLworICBpbnQgY2hlY2tfV0lOVDoKKyAgICAgIFdJTlRfTUlOID09IFRZUEVfTUlOSU1VTSAod2ludF90KQorICAgICAgJiYgV0lOVF9NQVggPT0gVFlQRV9NQVhJTVVNICh3aW50X3QpCisgICAgICA/IDEgOiAtMTsKKworICAvKiBEZXRlY3QgYnVncyBpbiBnbGliYyAyLjQgYW5kIFNvbGFyaXMgMTAgc3RkaW50LmgsIGFtb25nIG90aGVycy4gICovCisgIGludCBjaGVja19VSU5UOF9DOgorICAgICAgICAoLTEgPCBVSU5UOF9DICgwKSkgPT0gKC0xIDwgKHVpbnRfbGVhc3Q4X3QpIDApID8gMSA6IC0xOworICBpbnQgY2hlY2tfVUlOVDE2X0M6CisgICAgICAgICgtMSA8IFVJTlQxNl9DICgwKSkgPT0gKC0xIDwgKHVpbnRfbGVhc3QxNl90KSAwKSA/IDEgOiAtMTsKKworICAvKiBEZXRlY3QgYnVncyBpbiBPcGVuQlNEIDMuOSBzdGRpbnQuaC4gICovCisjaWZkZWYgVUlOVDhfTUFYCisgIGludCBjaGVja191aW50ODogKHVpbnQ4X3QpIC0xID09IFVJTlQ4X01BWCA/IDEgOiAtMTsKKyNlbmRpZgorI2lmZGVmIFVJTlQxNl9NQVgKKyAgaW50IGNoZWNrX3VpbnQxNjogKHVpbnQxNl90KSAtMSA9PSBVSU5UMTZfTUFYID8gMSA6IC0xOworI2VuZGlmCisjaWZkZWYgVUlOVDMyX01BWAorICBpbnQgY2hlY2tfdWludDMyOiAodWludDMyX3QpIC0xID09IFVJTlQzMl9NQVggPyAxIDogLTE7CisjZW5kaWYKKyNpZmRlZiBVSU5UNjRfTUFYCisgIGludCBjaGVja191aW50NjQ6ICh1aW50NjRfdCkgLTEgPT0gVUlOVDY0X01BWCA/IDEgOiAtMTsKKyNlbmRpZgorICBpbnQgY2hlY2tfdWludF9sZWFzdDg6ICh1aW50X2xlYXN0OF90KSAtMSA9PSBVSU5UX0xFQVNUOF9NQVggPyAxIDogLTE7CisgIGludCBjaGVja191aW50X2xlYXN0MTY6ICh1aW50X2xlYXN0MTZfdCkgLTEgPT0gVUlOVF9MRUFTVDE2X01BWCA/IDEgOiAtMTsKKyAgaW50IGNoZWNrX3VpbnRfbGVhc3QzMjogKHVpbnRfbGVhc3QzMl90KSAtMSA9PSBVSU5UX0xFQVNUMzJfTUFYID8gMSA6IC0xOworICBpbnQgY2hlY2tfdWludF9sZWFzdDY0OiAodWludF9sZWFzdDY0X3QpIC0xID09IFVJTlRfTEVBU1Q2NF9NQVggPyAxIDogLTE7CisgIGludCBjaGVja191aW50X2Zhc3Q4OiAodWludF9mYXN0OF90KSAtMSA9PSBVSU5UX0ZBU1Q4X01BWCA/IDEgOiAtMTsKKyAgaW50IGNoZWNrX3VpbnRfZmFzdDE2OiAodWludF9mYXN0MTZfdCkgLTEgPT0gVUlOVF9GQVNUMTZfTUFYID8gMSA6IC0xOworICBpbnQgY2hlY2tfdWludF9mYXN0MzI6ICh1aW50X2Zhc3QzMl90KSAtMSA9PSBVSU5UX0ZBU1QzMl9NQVggPyAxIDogLTE7CisgIGludCBjaGVja191aW50X2Zhc3Q2NDogKHVpbnRfZmFzdDY0X3QpIC0xID09IFVJTlRfRkFTVDY0X01BWCA/IDEgOiAtMTsKKyAgaW50IGNoZWNrX3VpbnRwdHI6ICh1aW50cHRyX3QpIC0xID09IFVJTlRQVFJfTUFYID8gMSA6IC0xOworICBpbnQgY2hlY2tfdWludG1heDogKHVpbnRtYXhfdCkgLTEgPT0gVUlOVE1BWF9NQVggPyAxIDogLTE7CisgIGludCBjaGVja19zaXplOiAoc2l6ZV90KSAtMSA9PSBTSVpFX01BWCA/IDEgOiAtMTsKK307CisgICAgICAgICBdXSldLAorICAgICAgICAgW2RubCBEZXRlcm1pbmUgd2hldGhlciB0aGUgdmFyaW91cyAqX01JTiwgKl9NQVggbWFjcm9zIGFyZSB1c2FibGUKKyAgICAgICAgICBkbmwgaW4gcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24uIFdlIGNvdWxkIGRvIGl0IGJ5IGNvbXBpbGluZyBhIHRlc3QKKyAgICAgICAgICBkbmwgcHJvZ3JhbSBmb3IgZWFjaCBvZiB0aGVzZSBtYWNyb3MuIEl0IGlzIGZhc3RlciB0byBydW4gYSBwcm9ncmFtCisgICAgICAgICAgZG5sIHRoYXQgaW5zcGVjdHMgdGhlIG1hY3JvIGV4cGFuc2lvbi4KKyAgICAgICAgICBkbmwgVGhpcyBkZXRlY3RzIGEgYnVnIG9uIEhQLVVYIDExLjIzL2lhNjQuCisgICAgICAgICAgQUNfUlVOX0lGRUxTRShbCisgICAgICAgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyNkZWZpbmUgX0dMX0pVU1RfSU5DTFVERV9TWVNURU1fU1RESU5UX0ggMSAvKiB3b3JrIGlmIGJ1aWxkIGlzbid0IGNsZWFuICovCisjaW5jbHVkZSA8c3RkaW50Lmg+CitdCitnbF9TVERJTlRfSU5DTFVERVMKK1sKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2RlZmluZSBNVkFMKG1hY3JvKSBNVkFMMShtYWNybykKKyNkZWZpbmUgTVZBTDEoZXhwcmVzc2lvbikgI2V4cHJlc3Npb24KK3N0YXRpYyBjb25zdCBjaGFyICptYWNyb192YWx1ZXNbXSA9CisgIHsKKyNpZmRlZiBJTlQ4X01BWAorICAgIE1WQUwgKElOVDhfTUFYKSwKKyNlbmRpZgorI2lmZGVmIElOVDE2X01BWAorICAgIE1WQUwgKElOVDE2X01BWCksCisjZW5kaWYKKyNpZmRlZiBJTlQzMl9NQVgKKyAgICBNVkFMIChJTlQzMl9NQVgpLAorI2VuZGlmCisjaWZkZWYgSU5UNjRfTUFYCisgICAgTVZBTCAoSU5UNjRfTUFYKSwKKyNlbmRpZgorI2lmZGVmIFVJTlQ4X01BWAorICAgIE1WQUwgKFVJTlQ4X01BWCksCisjZW5kaWYKKyNpZmRlZiBVSU5UMTZfTUFYCisgICAgTVZBTCAoVUlOVDE2X01BWCksCisjZW5kaWYKKyNpZmRlZiBVSU5UMzJfTUFYCisgICAgTVZBTCAoVUlOVDMyX01BWCksCisjZW5kaWYKKyNpZmRlZiBVSU5UNjRfTUFYCisgICAgTVZBTCAoVUlOVDY0X01BWCksCisjZW5kaWYKKyAgICBOVUxMCisgIH07CitdXSwgW1sKKyAgY29uc3QgY2hhciAqKm12OworICBmb3IgKG12ID0gbWFjcm9fdmFsdWVzOyAqbXYgIT0gTlVMTDsgbXYrKykKKyAgICB7CisgICAgICBjb25zdCBjaGFyICp2YWx1ZSA9ICptdjsKKyAgICAgIC8qIFRlc3Qgd2hldGhlciBpdCBsb29rcyBsaWtlIGEgY2FzdCBleHByZXNzaW9uLiAgKi8KKyAgICAgIGlmIChzdHJuY21wICh2YWx1ZSwgIigodW5zaWduZWQgaW50KSIvKikqLywgMTUpID09IDAKKyAgICAgICAgICB8fCBzdHJuY21wICh2YWx1ZSwgIigodW5zaWduZWQgc2hvcnQpIi8qKSovLCAxNykgPT0gMAorICAgICAgICAgIHx8IHN0cm5jbXAgKHZhbHVlLCAiKCh1bnNpZ25lZCBjaGFyKSIvKikqLywgMTYpID09IDAKKyAgICAgICAgICB8fCBzdHJuY21wICh2YWx1ZSwgIigoaW50KSIvKikqLywgNikgPT0gMAorICAgICAgICAgIHx8IHN0cm5jbXAgKHZhbHVlLCAiKChzaWduZWQgc2hvcnQpIi8qKSovLCAxNSkgPT0gMAorICAgICAgICAgIHx8IHN0cm5jbXAgKHZhbHVlLCAiKChzaWduZWQgY2hhcikiLyopKi8sIDE0KSA9PSAwKQorICAgICAgICByZXR1cm4gbXYgLSBtYWNyb192YWx1ZXMgKyAxOworICAgIH0KKyAgcmV0dXJuIDA7CitdXSldLAorICAgICAgICAgICAgICBbZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfc3RkaW50X2g9eWVzXSwKKyAgICAgICAgICAgICAgW10sCisgICAgICAgICAgICAgIFtkbmwgV2hlbiBjcm9zcy1jb21waWxpbmcsIGFzc3VtZSBpdCB3b3Jrcy4KKyAgICAgICAgICAgICAgIGdsX2N2X2hlYWRlcl93b3JraW5nX3N0ZGludF9oPXllcworICAgICAgICAgICAgICBdKQorICAgICAgICAgXSkKKyAgICAgIF0pCisgIGZpCisgIGlmIHRlc3QgIiRnbF9jdl9oZWFkZXJfd29ya2luZ19zdGRpbnRfaCIgPSB5ZXM7IHRoZW4KKyAgICBTVERJTlRfSD0KKyAgZWxzZQorICAgIGRubCBDaGVjayBmb3IgPHN5cy9pbnR0eXBlcy5oPiwgYW5kIGZvcgorICAgIGRubCA8c3lzL2JpdHlwZXMuaD4gKHVzZWQgaW4gTGludXggbGliYzQgPj0gNC42LjcgYW5kIGxpYmM1KS4KKyAgICBBQ19DSEVDS19IRUFERVJTKFtzeXMvaW50dHlwZXMuaCBzeXMvYml0eXBlcy5oXSkKKyAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX2ludHR5cGVzX2ggPSB5ZXM7IHRoZW4KKyAgICAgIEhBVkVfU1lTX0lOVFRZUEVTX0g9MQorICAgIGVsc2UKKyAgICAgIEhBVkVfU1lTX0lOVFRZUEVTX0g9MAorICAgIGZpCisgICAgQUNfU1VCU1QoW0hBVkVfU1lTX0lOVFRZUEVTX0hdKQorICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfYml0eXBlc19oID0geWVzOyB0aGVuCisgICAgICBIQVZFX1NZU19CSVRZUEVTX0g9MQorICAgIGVsc2UKKyAgICAgIEhBVkVfU1lTX0JJVFlQRVNfSD0wCisgICAgZmkKKyAgICBBQ19TVUJTVChbSEFWRV9TWVNfQklUWVBFU19IXSkKKworICAgIGdsX1NURElOVF9UWVBFX1BST1BFUlRJRVMKKyAgICBTVERJTlRfSD1zdGRpbnQuaAorICBmaQorICBBQ19TVUJTVChbU1RESU5UX0hdKQorICBBTV9DT05ESVRJT05BTChbR0xfR0VORVJBVEVfU1RESU5UX0hdLCBbdGVzdCAtbiAiJFNURElOVF9IIl0pCitdKQorCitkbmwgZ2xfU1RESU5UX0JJVFNJWkVPRihUWVBFUywgSU5DTFVERVMpCitkbmwgRGV0ZXJtaW5lIHRoZSBzaXplIG9mIGVhY2ggb2YgdGhlIGdpdmVuIHR5cGVzIGluIGJpdHMuCitBQ19ERUZVTihbZ2xfU1RESU5UX0JJVFNJWkVPRl0sCitbCisgIGRubCBVc2UgYSBzaGVsbCBsb29wLCB0byBhdm9pZCBibG9hdGluZyBjb25maWd1cmUsIGFuZAorICBkbmwgLSBleHRyYSBBSF9URU1QTEFURSBjYWxscywgc28gdGhhdCBhdXRvaGVhZGVyIGtub3dzIHdoYXQgdG8gcHV0IGludG8KKyAgZG5sICAgY29uZmlnLmguaW4sCisgIGRubCAtIGV4dHJhIEFDX1NVQlNUIGNhbGxzLCBzbyB0aGF0IHRoZSByaWdodCBzdWJzdGl0dXRpb25zIGFyZSBtYWRlLgorICBtNF9mb3JlYWNoX3coW2dsdHlwZV0sIFskMV0sCisgICAgW0FIX1RFTVBMQVRFKFtCSVRTSVpFT0ZfXW00X3RyYW5zbGl0KGdsdHlwZSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXogXSxbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfXSksCisgICAgICAgW0RlZmluZSB0byB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gdHlwZSAnXWdsdHlwZVsnLl0pXSkKKyAgZm9yIGdsdHlwZSBpbiAkMSA7IGRvCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBiaXQgc2l6ZSBvZiAkZ2x0eXBlXSwgW2dsX2N2X2JpdHNpemVvZl8ke2dsdHlwZX1dLAorICAgICAgW0FDX0NPTVBVVEVfSU5UKFtyZXN1bHRdLCBbc2l6ZW9mICgkZ2x0eXBlKSAqIENIQVJfQklUXSwKKyAgICAgICAgIFskMgorI2luY2x1ZGUgPGxpbWl0cy5oPl0sIFtyZXN1bHQ9dW5rbm93bl0pCisgICAgICAgZXZhbCBnbF9jdl9iaXRzaXplb2ZfJHtnbHR5cGV9PVwkcmVzdWx0CisgICAgICBdKQorICAgIGV2YWwgcmVzdWx0PVwkZ2xfY3ZfYml0c2l6ZW9mXyR7Z2x0eXBlfQorICAgIGlmIHRlc3QgJHJlc3VsdCA9IHVua25vd247IHRoZW4KKyAgICAgIGRubCBVc2UgYSBub25lbXB0eSBkZWZhdWx0LCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzLCBzdWNoIGFzIElSSVggNSBjYywKKyAgICAgIGRubCBkbyBhIHN5bnRheCBjaGVjayBldmVuIG9uIHVudXNlZCAjaWYgY29uZGl0aW9ucyBhbmQgZ2l2ZSBhbiBlcnJvcgorICAgICAgZG5sIG9uIHZhbGlkIEMgY29kZSBsaWtlIHRoaXM6CisgICAgICBkbmwgICAjaWYgMAorICAgICAgZG5sICAgIyBpZiAgPiAzMgorICAgICAgZG5sICAgIyBlbmRpZgorICAgICAgZG5sICAgI2VuZGlmCisgICAgICByZXN1bHQ9MAorICAgIGZpCisgICAgR0xUWVBFPWBlY2hvICIkZ2x0eXBlIiB8IHRyICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiAnICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl8nYAorICAgIEFDX0RFRklORV9VTlFVT1RFRChbQklUU0laRU9GXyR7R0xUWVBFfV0sIFskcmVzdWx0XSkKKyAgICBldmFsIEJJVFNJWkVPRl8ke0dMVFlQRX09XCRyZXN1bHQKKyAgZG9uZQorICBtNF9mb3JlYWNoX3coW2dsdHlwZV0sIFskMV0sCisgICAgW0FDX1NVQlNUKFtCSVRTSVpFT0ZfXW00X3RyYW5zbGl0KGdsdHlwZSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXogXSxbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfXSkpXSkKK10pCisKK2RubCBnbF9DSEVDS19UWVBFU19TSUdORUQoVFlQRVMsIElOQ0xVREVTKQorZG5sIERldGVybWluZSB0aGUgc2lnbmVkbmVzcyBvZiBlYWNoIG9mIHRoZSBnaXZlbiB0eXBlcy4KK2RubCBEZWZpbmUgSEFWRV9TSUdORURfVFlQRSBpZiB0eXBlIGlzIHNpZ25lZC4KK0FDX0RFRlVOKFtnbF9DSEVDS19UWVBFU19TSUdORURdLAorWworICBkbmwgVXNlIGEgc2hlbGwgbG9vcCwgdG8gYXZvaWQgYmxvYXRpbmcgY29uZmlndXJlLCBhbmQKKyAgZG5sIC0gZXh0cmEgQUhfVEVNUExBVEUgY2FsbHMsIHNvIHRoYXQgYXV0b2hlYWRlciBrbm93cyB3aGF0IHRvIHB1dCBpbnRvCisgIGRubCAgIGNvbmZpZy5oLmluLAorICBkbmwgLSBleHRyYSBBQ19TVUJTVCBjYWxscywgc28gdGhhdCB0aGUgcmlnaHQgc3Vic3RpdHV0aW9ucyBhcmUgbWFkZS4KKyAgbTRfZm9yZWFjaF93KFtnbHR5cGVdLCBbJDFdLAorICAgIFtBSF9URU1QTEFURShbSEFWRV9TSUdORURfXW00X3RyYW5zbGl0KGdsdHlwZSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXogXSxbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfXSksCisgICAgICAgW0RlZmluZSB0byAxIGlmICddZ2x0eXBlWycgaXMgYSBzaWduZWQgaW50ZWdlciB0eXBlLl0pXSkKKyAgZm9yIGdsdHlwZSBpbiAkMSA7IGRvCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgJGdsdHlwZSBpcyBzaWduZWRdLCBbZ2xfY3ZfdHlwZV8ke2dsdHlwZX1fc2lnbmVkXSwKKyAgICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oWyQyWworICAgICAgICAgICAgaW50IHZlcmlmeVsyICogKCgkZ2x0eXBlKSAtMSA8ICgkZ2x0eXBlKSAwKSAtIDFdO11dKV0sCisgICAgICAgICByZXN1bHQ9eWVzLCByZXN1bHQ9bm8pCisgICAgICAgZXZhbCBnbF9jdl90eXBlXyR7Z2x0eXBlfV9zaWduZWQ9XCRyZXN1bHQKKyAgICAgIF0pCisgICAgZXZhbCByZXN1bHQ9XCRnbF9jdl90eXBlXyR7Z2x0eXBlfV9zaWduZWQKKyAgICBHTFRZUEU9YGVjaG8gJGdsdHlwZSB8IHRyICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiAnICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl8nYAorICAgIGlmIHRlc3QgIiRyZXN1bHQiID0geWVzOyB0aGVuCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoW0hBVkVfU0lHTkVEXyR7R0xUWVBFfV0sIFsxXSkKKyAgICAgIGV2YWwgSEFWRV9TSUdORURfJHtHTFRZUEV9PTEKKyAgICBlbHNlCisgICAgICBldmFsIEhBVkVfU0lHTkVEXyR7R0xUWVBFfT0wCisgICAgZmkKKyAgZG9uZQorICBtNF9mb3JlYWNoX3coW2dsdHlwZV0sIFskMV0sCisgICAgW0FDX1NVQlNUKFtIQVZFX1NJR05FRF9dbTRfdHJhbnNsaXQoZ2x0eXBlLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiBdLFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9dKSldKQorXSkKKworZG5sIGdsX0lOVEVHRVJfVFlQRV9TVUZGSVgoVFlQRVMsIElOQ0xVREVTKQorZG5sIERldGVybWluZSB0aGUgc3VmZml4IHRvIHVzZSBmb3IgaW50ZWdlciBjb25zdGFudHMgb2YgdGhlIGdpdmVuIHR5cGVzLgorZG5sIERlZmluZSB0X1NVRkZJWCBmb3IgZWFjaCBzdWNoIHR5cGUuCitBQ19ERUZVTihbZ2xfSU5URUdFUl9UWVBFX1NVRkZJWF0sCitbCisgIGRubCBVc2UgYSBzaGVsbCBsb29wLCB0byBhdm9pZCBibG9hdGluZyBjb25maWd1cmUsIGFuZAorICBkbmwgLSBleHRyYSBBSF9URU1QTEFURSBjYWxscywgc28gdGhhdCBhdXRvaGVhZGVyIGtub3dzIHdoYXQgdG8gcHV0IGludG8KKyAgZG5sICAgY29uZmlnLmguaW4sCisgIGRubCAtIGV4dHJhIEFDX1NVQlNUIGNhbGxzLCBzbyB0aGF0IHRoZSByaWdodCBzdWJzdGl0dXRpb25zIGFyZSBtYWRlLgorICBtNF9mb3JlYWNoX3coW2dsdHlwZV0sIFskMV0sCisgICAgW0FIX1RFTVBMQVRFKG00X3RyYW5zbGl0KGdsdHlwZSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXogXSxbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfXSlbX1NVRkZJWF0sCisgICAgICAgW0RlZmluZSB0byBsLCBsbCwgdSwgdWwsIHVsbCwgZXRjLiwgYXMgc3VpdGFibGUgZm9yCisgICAgICAgIGNvbnN0YW50cyBvZiB0eXBlICddZ2x0eXBlWycuXSldKQorICBmb3IgZ2x0eXBlIGluICQxIDsgZG8KKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yICRnbHR5cGUgaW50ZWdlciBsaXRlcmFsIHN1ZmZpeF0sCisgICAgICBbZ2xfY3ZfdHlwZV8ke2dsdHlwZX1fc3VmZml4XSwKKyAgICAgIFtldmFsIGdsX2N2X3R5cGVfJHtnbHR5cGV9X3N1ZmZpeD1ubworICAgICAgIGV2YWwgcmVzdWx0PVwkZ2xfY3ZfdHlwZV8ke2dsdHlwZX1fc2lnbmVkCisgICAgICAgaWYgdGVzdCAiJHJlc3VsdCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgIGdsc3VmdT0KKyAgICAgICBlbHNlCisgICAgICAgICBnbHN1ZnU9dQorICAgICAgIGZpCisgICAgICAgZm9yIGdsc3VmIGluICIkZ2xzdWZ1IiAke2dsc3VmdX1sICR7Z2xzdWZ1fWxsICR7Z2xzdWZ1fWk2NDsgZG8KKyAgICAgICAgIGNhc2UgJGdsc3VmIGluCisgICAgICAgICAgICcnKSAgZ2x0eXBlMT0naW50Jzs7CisgICAgICAgICAgIGwpICAgZ2x0eXBlMT0nbG9uZyBpbnQnOzsKKyAgICAgICAgICAgbGwpICBnbHR5cGUxPSdsb25nIGxvbmcgaW50Jzs7CisgICAgICAgICAgIGk2NCkgZ2x0eXBlMT0nX19pbnQ2NCc7OworICAgICAgICAgICB1KSAgIGdsdHlwZTE9J3Vuc2lnbmVkIGludCc7OworICAgICAgICAgICB1bCkgIGdsdHlwZTE9J3Vuc2lnbmVkIGxvbmcgaW50Jzs7CisgICAgICAgICAgIHVsbCkgZ2x0eXBlMT0ndW5zaWduZWQgbG9uZyBsb25nIGludCc7OworICAgICAgICAgICB1aTY0KWdsdHlwZTE9J3Vuc2lnbmVkIF9faW50NjQnOzsKKyAgICAgICAgIGVzYWMKKyAgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKFskMlsKKyAgICAgICAgICAgICAgZXh0ZXJuICRnbHR5cGUgZm9vOworICAgICAgICAgICAgICBleHRlcm4gJGdsdHlwZTEgZm9vO11dKV0sCisgICAgICAgICAgIFtldmFsIGdsX2N2X3R5cGVfJHtnbHR5cGV9X3N1ZmZpeD1cJGdsc3VmXSkKKyAgICAgICAgIGV2YWwgcmVzdWx0PVwkZ2xfY3ZfdHlwZV8ke2dsdHlwZX1fc3VmZml4CisgICAgICAgICB0ZXN0ICIkcmVzdWx0IiAhPSBubyAmJiBicmVhaworICAgICAgIGRvbmVdKQorICAgIEdMVFlQRT1gZWNobyAkZ2x0eXBlIHwgdHIgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6ICcgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXydgCisgICAgZXZhbCByZXN1bHQ9XCRnbF9jdl90eXBlXyR7Z2x0eXBlfV9zdWZmaXgKKyAgICB0ZXN0ICIkcmVzdWx0IiA9IG5vICYmIHJlc3VsdD0KKyAgICBldmFsICR7R0xUWVBFfV9TVUZGSVg9XCRyZXN1bHQKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoWyR7R0xUWVBFfV9TVUZGSVhdLCBbJHJlc3VsdF0pCisgIGRvbmUKKyAgbTRfZm9yZWFjaF93KFtnbHR5cGVdLCBbJDFdLAorICAgIFtBQ19TVUJTVChtNF90cmFuc2xpdChnbHR5cGUsW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IF0sW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX10pW19TVUZGSVhdKV0pCitdKQorCitkbmwgZ2xfU1RESU5UX0lOQ0xVREVTCitBQ19ERUZVTihbZ2xfU1RESU5UX0lOQ0xVREVTXSwKK1tbCisgIC8qIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZQorICAgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyAgI2luY2x1ZGUgPHN0ZGRlZi5oPgorICAjaW5jbHVkZSA8c2lnbmFsLmg+CisgICNpZiBIQVZFX1dDSEFSX0gKKyAgIyBpbmNsdWRlIDxzdGRpby5oPgorICAjIGluY2x1ZGUgPHRpbWUuaD4KKyAgIyBpbmNsdWRlIDx3Y2hhci5oPgorICAjZW5kaWYKK11dKQorCitkbmwgZ2xfU1RESU5UX1RZUEVfUFJPUEVSVElFUworZG5sIENvbXB1dGUgSEFWRV9TSUdORURfdCwgQklUU0laRU9GX3QgYW5kIHRfU1VGRklYLCBmb3IgYWxsIHRoZSB0eXBlcyB0Citkbmwgb2YgaW50ZXJlc3QgdG8gc3RkaW50LmluLmguCitBQ19ERUZVTihbZ2xfU1RESU5UX1RZUEVfUFJPUEVSVElFU10sCitbCisgIEFDX1JFUVVJUkUoW2dsX01VTFRJQVJDSF0pCisgIGlmIHRlc3QgJEFQUExFX1VOSVZFUlNBTF9CVUlMRCA9IDA7IHRoZW4KKyAgICBnbF9TVERJTlRfQklUU0laRU9GKFtwdHJkaWZmX3Qgc2l6ZV90XSwKKyAgICAgIFtnbF9TVERJTlRfSU5DTFVERVNdKQorICBmaQorICBnbF9TVERJTlRfQklUU0laRU9GKFtzaWdfYXRvbWljX3Qgd2NoYXJfdCB3aW50X3RdLAorICAgIFtnbF9TVERJTlRfSU5DTFVERVNdKQorICBnbF9DSEVDS19UWVBFU19TSUdORUQoW3NpZ19hdG9taWNfdCB3Y2hhcl90IHdpbnRfdF0sCisgICAgW2dsX1NURElOVF9JTkNMVURFU10pCisgIGdsX2N2X3R5cGVfcHRyZGlmZl90X3NpZ25lZD15ZXMKKyAgZ2xfY3ZfdHlwZV9zaXplX3Rfc2lnbmVkPW5vCisgIGlmIHRlc3QgJEFQUExFX1VOSVZFUlNBTF9CVUlMRCA9IDA7IHRoZW4KKyAgICBnbF9JTlRFR0VSX1RZUEVfU1VGRklYKFtwdHJkaWZmX3Qgc2l6ZV90XSwKKyAgICAgIFtnbF9TVERJTlRfSU5DTFVERVNdKQorICBmaQorICBnbF9JTlRFR0VSX1RZUEVfU1VGRklYKFtzaWdfYXRvbWljX3Qgd2NoYXJfdCB3aW50X3RdLAorICAgIFtnbF9TVERJTlRfSU5DTFVERVNdKQorCisgIGRubCBJZiB3aW50X3QgaXMgc21hbGxlciB0aGFuICdpbnQnLCBpdCBjYW5ub3Qgc2F0aXNmeSB0aGUgSVNPIEMgOTkKKyAgZG5sIHJlcXVpcmVtZW50IHRoYXQgd2ludF90IGlzICJ1bmNoYW5nZWQgYnkgZGVmYXVsdCBhcmd1bWVudCBwcm9tb3Rpb25zIi4KKyAgZG5sIEluIHRoaXMgY2FzZSBnbnVsaWIncyA8d2NoYXIuaD4gYW5kIDx3Y3R5cGUuaD4gb3ZlcnJpZGUgd2ludF90LgorICBkbmwgU2V0IHRoZSB2YXJpYWJsZSBCSVRTSVpFT0ZfV0lOVF9UIGFjY29yZGluZ2x5LgorICBpZiB0ZXN0ICRCSVRTSVpFT0ZfV0lOVF9UIC1sdCAzMjsgdGhlbgorICAgIEJJVFNJWkVPRl9XSU5UX1Q9MzIKKyAgZmkKK10pCisKK2RubCBBdXRvY29uZiA+PSAyLjYxIGhhcyBBQ19DT01QVVRFX0lOVCBidWlsdC1pbi4KK2RubCBSZW1vdmUgdGhpcyB3aGVuIHdlIGNhbiBhc3N1bWUgYXV0b2NvbmYgPj0gMi42MS4KK200X2lmZGVmKFtBQ19DT01QVVRFX0lOVF0sIFtdLCBbCisgIEFDX0RFRlVOKFtBQ19DT01QVVRFX0lOVF0sIFtfQUNfQ09NUFVURV9JTlQoWyQyXSxbJDFdLFskM10sWyQ0XSldKQorXSkKKworIyBIZXkgRW1hY3MhCisjIExvY2FsIFZhcmlhYmxlczoKKyMgaW5kZW50LXRhYnMtbW9kZTogbmlsCisjIEVuZDoKZGlmZiAtLWdpdCBhL200L3N0ZGludF9oLm00IGIvbTQvc3RkaW50X2gubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgxZGU5NgotLS0gL2Rldi9udWxsCisrKyBiL200L3N0ZGludF9oLm00CkBAIC0wLDAgKzEsMjcgQEAKKyMgc3RkaW50X2gubTQgc2VyaWFsIDkKK2RubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwNCwgMjAwNiwgMjAwOC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorCisjIERlZmluZSBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCBpZiA8c3RkaW50Lmg+IGV4aXN0cywKKyMgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4sIGFuZCBkZWNsYXJlcyB1aW50bWF4X3QuCisKK0FDX0RFRlVOKFtnbF9BQ19IRUFERVJfU1RESU5UX0hdLAorWworICBBQ19DQUNIRV9DSEVDSyhbZm9yIHN0ZGludC5oXSwgW2dsX2N2X2hlYWRlcl9zdGRpbnRfaF0sCisgICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgW1sjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgICAgICAgICAgICAjaW5jbHVkZSA8c3RkaW50Lmg+XV0sCisgICAgICAgICAgW1t1aW50bWF4X3QgaSA9ICh1aW50bWF4X3QpIC0xOyByZXR1cm4gIWk7XV0pXSwKKyAgICAgICBbZ2xfY3ZfaGVhZGVyX3N0ZGludF9oPXllc10sCisgICAgICAgW2dsX2N2X2hlYWRlcl9zdGRpbnRfaD1ub10pXSkKKyAgaWYgdGVzdCAkZ2xfY3ZfaGVhZGVyX3N0ZGludF9oID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWF0sIFsxXSwKKyAgICAgIFtEZWZpbmUgaWYgPHN0ZGludC5oPiBleGlzdHMsIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LAorICAgICAgIGFuZCBkZWNsYXJlcyB1aW50bWF4X3QuIF0pCisgIGZpCitdKQpkaWZmIC0tZ2l0IGEvbTQvc3RkaW50X2hfZ2wubTQgYi9tNC9zdGRpbnRfaF9nbC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM1NWYzNS4uMDAwMDAwMAotLS0gYS9tNC9zdGRpbnRfaF9nbC5tNAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSMgc3RkaW50X2gubTQgc2VyaWFsIDUKLWRubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1kbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi1kbmwgRnJvbSBQYXVsIEVnZ2VydC4KLQotIyBEZWZpbmUgSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVggaWYgPHN0ZGludC5oPiBleGlzdHMsCi0jIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LCBhbmQgZGVjbGFyZXMgdWludG1heF90LgotCi1BQ19ERUZVTihbZ2xfQUNfSEVBREVSX1NURElOVF9IXSwKLVsKLSAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzdGRpbnQuaF0sIGdsX2N2X2hlYWRlcl9zdGRpbnRfaCwKLSAgW0FDX1RSWV9DT01QSUxFKAotICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+XSwKLSAgICBbdWludG1heF90IGkgPSAodWludG1heF90KSAtMTtdLAotICAgIGdsX2N2X2hlYWRlcl9zdGRpbnRfaD15ZXMsCi0gICAgZ2xfY3ZfaGVhZGVyX3N0ZGludF9oPW5vKV0pCi0gIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9zdGRpbnRfaCA9IHllczsgdGhlbgotICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCwgMSwKLSAgICAgIFtEZWZpbmUgaWYgPHN0ZGludC5oPiBleGlzdHMsIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LAotICAgICAgIGFuZCBkZWNsYXJlcyB1aW50bWF4X3QuIF0pCi0gIGZpCi1dKQpkaWZmIC0tZ2l0IGEvbTQvc3RkaW8tc2FmZXIubTQgYi9tNC9zdGRpby1zYWZlci5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I2MGFjYi4uMDAwMDAwMAotLS0gYS9tNC9zdGRpby1zYWZlci5tNAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLSNzZXJpYWwgNQotZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1kbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi1BQ19ERUZVTihbZ2xfU1RESU9fU0FGRVJdLAotWwotICBBQ19MSUJTT1VSQ0VTKFtmb3Blbi1zYWZlci5jLCBzdGRpby1zYWZlci5oLCBzdGRpby0tLmhdKQotICBBQ19MSUJPQkooW2ZvcGVuLXNhZmVyXSkKLV0pCmRpZmYgLS1naXQgYS9tNC9zdGRpb19oLm00IGIvbTQvc3RkaW9faC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmQ2NTgwCi0tLSAvZGV2L251bGwKKysrIGIvbTQvc3RkaW9faC5tNApAQCAtMCwwICsxLDE5NCBAQAorIyBzdGRpb19oLm00IHNlcmlhbCA0MworZG5sIENvcHlyaWdodCAoQykgMjAwNy0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9TVERJT19IXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfU1RESU9fSF9ERUZBVUxUU10pCisgIGdsX05FWFRfSEVBREVSUyhbc3RkaW8uaF0pCisKKyAgZG5sIE5vIG5lZWQgdG8gY3JlYXRlIGV4dHJhIG1vZHVsZXMgZm9yIHRoZXNlIGZ1bmN0aW9ucy4gRXZlcnlvbmUgd2hvIHVzZXMKKyAgZG5sIDxzdGRpby5oPiBsaWtlbHkgbmVlZHMgdGhlbS4KKyAgR05VTElCX0ZTQ0FORj0xCisgIGdsX01PRFVMRV9JTkRJQ0FUT1IoW2ZzY2FuZl0pCisgIEdOVUxJQl9TQ0FORj0xCisgIGdsX01PRFVMRV9JTkRJQ0FUT1IoW3NjYW5mXSkKKyAgR05VTElCX0ZHRVRDPTEKKyAgR05VTElCX0dFVEM9MQorICBHTlVMSUJfR0VUQ0hBUj0xCisgIEdOVUxJQl9GR0VUUz0xCisgIEdOVUxJQl9GUkVBRD0xCisgIGRubCBUaGlzIGlmZGVmIGlzIG5lY2Vzc2FyeSB0byBhdm9pZCBhbiBlcnJvciAibWlzc2luZyBmaWxlIGxpYi9zdGRpby1yZWFkLmMiCisgIGRubCAiZXhwZWN0ZWQgc291cmNlIGZpbGUsIHJlcXVpcmVkIHRocm91Z2ggQUNfTElCU09VUkNFUywgbm90IGZvdW5kIi4gSXQgaXMKKyAgZG5sIGFsc28gYW4gb3B0aW1pemF0aW9uLCB0byBhdm9pZCBwZXJmb3JtaW5nIGEgY29uZmlndXJlIGNoZWNrIHdob3NlIHJlc3VsdAorICBkbmwgaXMgbm90IHVzZWQuIEJ1dCBpdCBkb2VzIG5vdCBtYWtlIHRoZSB0ZXN0IG9mIEdOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HCisgIGRubCBvciBHTlVMSUJfTk9OQkxPQ0tJTkcgcmVkdW5kYW50LgorICBtNF9pZmRlZihbZ2xfTk9OQkxPQ0tJTkdfSU9dLCBbCisgICAgZ2xfTk9OQkxPQ0tJTkdfSU8KKyAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX25vbmJsb2NraW5nICE9IHllczsgdGhlbgorICAgICAgUkVQTEFDRV9TVERJT19SRUFEX0ZVTkNTPTEKKyAgICAgIEFDX0xJQk9CSihbc3RkaW8tcmVhZF0pCisgICAgZmkKKyAgXSkKKworICBkbmwgTm8gbmVlZCB0byBjcmVhdGUgZXh0cmEgbW9kdWxlcyBmb3IgdGhlc2UgZnVuY3Rpb25zLiBFdmVyeW9uZSB3aG8gdXNlcworICBkbmwgPHN0ZGlvLmg+IGxpa2VseSBuZWVkcyB0aGVtLgorICBHTlVMSUJfRlBSSU5URj0xCisgIEdOVUxJQl9QUklOVEY9MQorICBHTlVMSUJfVkZQUklOVEY9MQorICBHTlVMSUJfVlBSSU5URj0xCisgIEdOVUxJQl9GUFVUQz0xCisgIEdOVUxJQl9QVVRDPTEKKyAgR05VTElCX1BVVENIQVI9MQorICBHTlVMSUJfRlBVVFM9MQorICBHTlVMSUJfUFVUUz0xCisgIEdOVUxJQl9GV1JJVEU9MQorICBkbmwgVGhpcyBpZmRlZiBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgYW4gZXJyb3IgIm1pc3NpbmcgZmlsZSBsaWIvc3RkaW8td3JpdGUuYyIKKyAgZG5sICJleHBlY3RlZCBzb3VyY2UgZmlsZSwgcmVxdWlyZWQgdGhyb3VnaCBBQ19MSUJTT1VSQ0VTLCBub3QgZm91bmQiLiBJdCBpcworICBkbmwgYWxzbyBhbiBvcHRpbWl6YXRpb24sIHRvIGF2b2lkIHBlcmZvcm1pbmcgYSBjb25maWd1cmUgY2hlY2sgd2hvc2UgcmVzdWx0CisgIGRubCBpcyBub3QgdXNlZC4gQnV0IGl0IGRvZXMgbm90IG1ha2UgdGhlIHRlc3Qgb2YgR05VTElCX1NURElPX0hfU0lHUElQRSBvcgorICBkbmwgR05VTElCX1NJR1BJUEUgcmVkdW5kYW50LgorICBtNF9pZmRlZihbZ2xfU0lHTkFMX1NJR1BJUEVdLCBbCisgICAgZ2xfU0lHTkFMX1NJR1BJUEUKKyAgICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfc2lnbmFsX2hfU0lHUElQRSAhPSB5ZXM7IHRoZW4KKyAgICAgIFJFUExBQ0VfU1RESU9fV1JJVEVfRlVOQ1M9MQorICAgICAgQUNfTElCT0JKKFtzdGRpby13cml0ZV0pCisgICAgZmkKKyAgXSkKKyAgZG5sIFRoaXMgaWZkZWYgaXMgbmVjZXNzYXJ5IHRvIGF2b2lkIGFuIGVycm9yICJtaXNzaW5nIGZpbGUgbGliL3N0ZGlvLXdyaXRlLmMiCisgIGRubCAiZXhwZWN0ZWQgc291cmNlIGZpbGUsIHJlcXVpcmVkIHRocm91Z2ggQUNfTElCU09VUkNFUywgbm90IGZvdW5kIi4gSXQgaXMKKyAgZG5sIGFsc28gYW4gb3B0aW1pemF0aW9uLCB0byBhdm9pZCBwZXJmb3JtaW5nIGEgY29uZmlndXJlIGNoZWNrIHdob3NlIHJlc3VsdAorICBkbmwgaXMgbm90IHVzZWQuIEJ1dCBpdCBkb2VzIG5vdCBtYWtlIHRoZSB0ZXN0IG9mIEdOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HCisgIGRubCBvciBHTlVMSUJfTk9OQkxPQ0tJTkcgcmVkdW5kYW50LgorICBtNF9pZmRlZihbZ2xfTk9OQkxPQ0tJTkdfSU9dLCBbCisgICAgZ2xfTk9OQkxPQ0tJTkdfSU8KKyAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX25vbmJsb2NraW5nICE9IHllczsgdGhlbgorICAgICAgUkVQTEFDRV9TVERJT19XUklURV9GVU5DUz0xCisgICAgICBBQ19MSUJPQkooW3N0ZGlvLXdyaXRlXSkKKyAgICBmaQorICBdKQorCisgIGRubCBDaGVjayBmb3IgZGVjbGFyYXRpb25zIG9mIGFueXRoaW5nIHdlIHdhbnQgdG8gcG9pc29uIGlmIHRoZQorICBkbmwgY29ycmVzcG9uZGluZyBnbnVsaWIgbW9kdWxlIGlzIG5vdCBpbiB1c2UsIGFuZCB3aGljaCBpcyBub3QKKyAgZG5sIGd1YXJhbnRlZWQgYnkgYm90aCBDODkgYW5kIEMxMS4KKyAgZ2xfV0FSTl9PTl9VU0VfUFJFUEFSRShbWyNpbmNsdWRlIDxzdGRpby5oPgorICAgIF1dLCBbZHByaW50ZiBmcHVyZ2UgZnNlZWtvIGZ0ZWxsbyBnZXRkZWxpbSBnZXRsaW5lIGdldHMgcGNsb3NlIHBvcGVuCisgICAgcmVuYW1lYXQgc25wcmludGYgdG1wZmlsZSB2ZHByaW50ZiB2c25wcmludGZdKQorXSkKKworQUNfREVGVU4oW2dsX1NURElPX01PRFVMRV9JTkRJQ0FUT1JdLAorWworICBkbmwgVXNlIEFDX1JFUVVJUkUgaGVyZSwgc28gdGhhdCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBhcmUgZXhwYW5kZWQgb25jZSBvbmx5LgorICBBQ19SRVFVSVJFKFtnbF9TVERJT19IX0RFRkFVTFRTXSkKKyAgZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEUoWyQxXSkKKyAgZG5sIERlZmluZSBpdCBhbHNvIGFzIGEgQyBtYWNybywgZm9yIHRoZSBiZW5lZml0IG9mIHRoZSB1bml0IHRlc3RzLgorICBnbF9NT0RVTEVfSU5ESUNBVE9SX0ZPUl9URVNUUyhbJDFdKQorXSkKKworQUNfREVGVU4oW2dsX1NURElPX0hfREVGQVVMVFNdLAorWworICBHTlVMSUJfRFBSSU5URj0wOyAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9EUFJJTlRGXSkKKyAgR05VTElCX0ZDTE9TRT0wOyAgICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRkNMT1NFXSkKKyAgR05VTElCX0ZET1BFTj0wOyAgICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRkRPUEVOXSkKKyAgR05VTElCX0ZGTFVTSD0wOyAgICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRkZMVVNIXSkKKyAgR05VTElCX0ZHRVRDPTA7ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRkdFVENdKQorICBHTlVMSUJfRkdFVFM9MDsgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9GR0VUU10pCisgIEdOVUxJQl9GT1BFTj0wOyAgICAgICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX0ZPUEVOXSkKKyAgR05VTElCX0ZQUklOVEY9MDsgICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRlBSSU5URl0pCisgIEdOVUxJQl9GUFJJTlRGX1BPU0lYPTA7ICAgICAgICBBQ19TVUJTVChbR05VTElCX0ZQUklOVEZfUE9TSVhdKQorICBHTlVMSUJfRlBVUkdFPTA7ICAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9GUFVSR0VdKQorICBHTlVMSUJfRlBVVEM9MDsgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9GUFVUQ10pCisgIEdOVUxJQl9GUFVUUz0wOyAgICAgICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX0ZQVVRTXSkKKyAgR05VTElCX0ZSRUFEPTA7ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRlJFQURdKQorICBHTlVMSUJfRlJFT1BFTj0wOyAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9GUkVPUEVOXSkKKyAgR05VTElCX0ZTQ0FORj0wOyAgICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRlNDQU5GXSkKKyAgR05VTElCX0ZTRUVLPTA7ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRlNFRUtdKQorICBHTlVMSUJfRlNFRUtPPTA7ICAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9GU0VFS09dKQorICBHTlVMSUJfRlRFTEw9MDsgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9GVEVMTF0pCisgIEdOVUxJQl9GVEVMTE89MDsgICAgICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX0ZURUxMT10pCisgIEdOVUxJQl9GV1JJVEU9MDsgICAgICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX0ZXUklURV0pCisgIEdOVUxJQl9HRVRDPTA7ICAgICAgICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX0dFVENdKQorICBHTlVMSUJfR0VUQ0hBUj0wOyAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9HRVRDSEFSXSkKKyAgR05VTElCX0dFVERFTElNPTA7ICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfR0VUREVMSU1dKQorICBHTlVMSUJfR0VUTElORT0wOyAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9HRVRMSU5FXSkKKyAgR05VTElCX09CU1RBQ0tfUFJJTlRGPTA7ICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfT0JTVEFDS19QUklOVEZdKQorICBHTlVMSUJfT0JTVEFDS19QUklOVEZfUE9TSVg9MDsgQUNfU1VCU1QoW0dOVUxJQl9PQlNUQUNLX1BSSU5URl9QT1NJWF0pCisgIEdOVUxJQl9QQ0xPU0U9MDsgICAgICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX1BDTE9TRV0pCisgIEdOVUxJQl9QRVJST1I9MDsgICAgICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX1BFUlJPUl0pCisgIEdOVUxJQl9QT1BFTj0wOyAgICAgICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX1BPUEVOXSkKKyAgR05VTElCX1BSSU5URj0wOyAgICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfUFJJTlRGXSkKKyAgR05VTElCX1BSSU5URl9QT1NJWD0wOyAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfUFJJTlRGX1BPU0lYXSkKKyAgR05VTElCX1BVVEM9MDsgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfUFVUQ10pCisgIEdOVUxJQl9QVVRDSEFSPTA7ICAgICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX1BVVENIQVJdKQorICBHTlVMSUJfUFVUUz0wOyAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9QVVRTXSkKKyAgR05VTElCX1JFTU9WRT0wOyAgICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfUkVNT1ZFXSkKKyAgR05VTElCX1JFTkFNRT0wOyAgICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfUkVOQU1FXSkKKyAgR05VTElCX1JFTkFNRUFUPTA7ICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfUkVOQU1FQVRdKQorICBHTlVMSUJfU0NBTkY9MDsgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9TQ0FORl0pCisgIEdOVUxJQl9TTlBSSU5URj0wOyAgICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX1NOUFJJTlRGXSkKKyAgR05VTElCX1NQUklOVEZfUE9TSVg9MDsgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfU1BSSU5URl9QT1NJWF0pCisgIEdOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HPTA7ICBBQ19TVUJTVChbR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkddKQorICBHTlVMSUJfU1RESU9fSF9TSUdQSVBFPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9TVERJT19IX1NJR1BJUEVdKQorICBHTlVMSUJfVE1QRklMRT0wOyAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9UTVBGSUxFXSkKKyAgR05VTElCX1ZBU1BSSU5URj0wOyAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfVkFTUFJJTlRGXSkKKyAgR05VTElCX1ZGU0NBTkY9MDsgICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfVkZTQ0FORl0pCisgIEdOVUxJQl9WU0NBTkY9MDsgICAgICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX1ZTQ0FORl0pCisgIEdOVUxJQl9WRFBSSU5URj0wOyAgICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX1ZEUFJJTlRGXSkKKyAgR05VTElCX1ZGUFJJTlRGPTA7ICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfVkZQUklOVEZdKQorICBHTlVMSUJfVkZQUklOVEZfUE9TSVg9MDsgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9WRlBSSU5URl9QT1NJWF0pCisgIEdOVUxJQl9WUFJJTlRGPTA7ICAgICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX1ZQUklOVEZdKQorICBHTlVMSUJfVlBSSU5URl9QT1NJWD0wOyAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9WUFJJTlRGX1BPU0lYXSkKKyAgR05VTElCX1ZTTlBSSU5URj0wOyAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfVlNOUFJJTlRGXSkKKyAgR05VTElCX1ZTUFJJTlRGX1BPU0lYPTA7ICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfVlNQUklOVEZfUE9TSVhdKQorICBkbmwgQXNzdW1lIHByb3BlciBHTlUgYmVoYXZpb3IgdW5sZXNzIGFub3RoZXIgbW9kdWxlIHNheXMgb3RoZXJ3aXNlLgorICBIQVZFX0RFQ0xfRlBVUkdFPTE7ICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9GUFVSR0VdKQorICBIQVZFX0RFQ0xfRlNFRUtPPTE7ICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9GU0VFS09dKQorICBIQVZFX0RFQ0xfRlRFTExPPTE7ICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9GVEVMTE9dKQorICBIQVZFX0RFQ0xfR0VUREVMSU09MTsgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9HRVRERUxJTV0pCisgIEhBVkVfREVDTF9HRVRMSU5FPTE7ICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9ERUNMX0dFVExJTkVdKQorICBIQVZFX0RFQ0xfT0JTVEFDS19QUklOVEY9MTsgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9PQlNUQUNLX1BSSU5URl0pCisgIEhBVkVfREVDTF9TTlBSSU5URj0xOyAgICAgICAgICBBQ19TVUJTVChbSEFWRV9ERUNMX1NOUFJJTlRGXSkKKyAgSEFWRV9ERUNMX1ZTTlBSSU5URj0xOyAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0RFQ0xfVlNOUFJJTlRGXSkKKyAgSEFWRV9EUFJJTlRGPTE7ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0RQUklOVEZdKQorICBIQVZFX0ZTRUVLTz0xOyAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfRlNFRUtPXSkKKyAgSEFWRV9GVEVMTE89MTsgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0ZURUxMT10pCisgIEhBVkVfUENMT1NFPTE7ICAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9QQ0xPU0VdKQorICBIQVZFX1BPUEVOPTE7ICAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfUE9QRU5dKQorICBIQVZFX1JFTkFNRUFUPTE7ICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfUkVOQU1FQVRdKQorICBIQVZFX1ZBU1BSSU5URj0xOyAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfVkFTUFJJTlRGXSkKKyAgSEFWRV9WRFBSSU5URj0xOyAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1ZEUFJJTlRGXSkKKyAgUkVQTEFDRV9EUFJJTlRGPTA7ICAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0RQUklOVEZdKQorICBSRVBMQUNFX0ZDTE9TRT0wOyAgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfRkNMT1NFXSkKKyAgUkVQTEFDRV9GRE9QRU49MDsgICAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0ZET1BFTl0pCisgIFJFUExBQ0VfRkZMVVNIPTA7ICAgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9GRkxVU0hdKQorICBSRVBMQUNFX0ZPUEVOPTA7ICAgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfRk9QRU5dKQorICBSRVBMQUNFX0ZQUklOVEY9MDsgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfRlBSSU5URl0pCisgIFJFUExBQ0VfRlBVUkdFPTA7ICAgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9GUFVSR0VdKQorICBSRVBMQUNFX0ZSRU9QRU49MDsgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfRlJFT1BFTl0pCisgIFJFUExBQ0VfRlNFRUs9MDsgICAgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9GU0VFS10pCisgIFJFUExBQ0VfRlNFRUtPPTA7ICAgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9GU0VFS09dKQorICBSRVBMQUNFX0ZURUxMPTA7ICAgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfRlRFTExdKQorICBSRVBMQUNFX0ZURUxMTz0wOyAgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfRlRFTExPXSkKKyAgUkVQTEFDRV9HRVRERUxJTT0wOyAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0dFVERFTElNXSkKKyAgUkVQTEFDRV9HRVRMSU5FPTA7ICAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0dFVExJTkVdKQorICBSRVBMQUNFX09CU1RBQ0tfUFJJTlRGPTA7ICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfT0JTVEFDS19QUklOVEZdKQorICBSRVBMQUNFX1BFUlJPUj0wOyAgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfUEVSUk9SXSkKKyAgUkVQTEFDRV9QT1BFTj0wOyAgICAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX1BPUEVOXSkKKyAgUkVQTEFDRV9QUklOVEY9MDsgICAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX1BSSU5URl0pCisgIFJFUExBQ0VfUkVNT1ZFPTA7ICAgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9SRU1PVkVdKQorICBSRVBMQUNFX1JFTkFNRT0wOyAgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfUkVOQU1FXSkKKyAgUkVQTEFDRV9SRU5BTUVBVD0wOyAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX1JFTkFNRUFUXSkKKyAgUkVQTEFDRV9TTlBSSU5URj0wOyAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX1NOUFJJTlRGXSkKKyAgUkVQTEFDRV9TUFJJTlRGPTA7ICAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX1NQUklOVEZdKQorICBSRVBMQUNFX1NURElPX1JFQURfRlVOQ1M9MDsgICAgQUNfU1VCU1QoW1JFUExBQ0VfU1RESU9fUkVBRF9GVU5DU10pCisgIFJFUExBQ0VfU1RESU9fV1JJVEVfRlVOQ1M9MDsgICBBQ19TVUJTVChbUkVQTEFDRV9TVERJT19XUklURV9GVU5DU10pCisgIFJFUExBQ0VfVE1QRklMRT0wOyAgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9UTVBGSUxFXSkKKyAgUkVQTEFDRV9WQVNQUklOVEY9MDsgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX1ZBU1BSSU5URl0pCisgIFJFUExBQ0VfVkRQUklOVEY9MDsgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9WRFBSSU5URl0pCisgIFJFUExBQ0VfVkZQUklOVEY9MDsgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9WRlBSSU5URl0pCisgIFJFUExBQ0VfVlBSSU5URj0wOyAgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9WUFJJTlRGXSkKKyAgUkVQTEFDRV9WU05QUklOVEY9MDsgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX1ZTTlBSSU5URl0pCisgIFJFUExBQ0VfVlNQUklOVEY9MDsgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9WU1BSSU5URl0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvc3RkbGliX2gubTQgYi9tNC9zdGRsaWJfaC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzY5ZjJlCi0tLSAvZGV2L251bGwKKysrIGIvbTQvc3RkbGliX2gubTQKQEAgLTAsMCArMSwxMTUgQEAKKyMgc3RkbGliX2gubTQgc2VyaWFsIDQxCitkbmwgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX1NURExJQl9IXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfU1RETElCX0hfREVGQVVMVFNdKQorICBnbF9ORVhUX0hFQURFUlMoW3N0ZGxpYi5oXSkKKworICBkbmwgQ2hlY2sgZm9yIGRlY2xhcmF0aW9ucyBvZiBhbnl0aGluZyB3ZSB3YW50IHRvIHBvaXNvbiBpZiB0aGUKKyAgZG5sIGNvcnJlc3BvbmRpbmcgZ251bGliIG1vZHVsZSBpcyBub3QgaW4gdXNlLCBhbmQgd2hpY2ggaXMgbm90CisgIGRubCBndWFyYW50ZWVkIGJ5IEM4OS4KKyAgZ2xfV0FSTl9PTl9VU0VfUFJFUEFSRShbWyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZiBIQVZFX1NZU19MT0FEQVZHX0gKKyMgaW5jbHVkZSA8c3lzL2xvYWRhdmcuaD4KKyNlbmRpZgorI2lmIEhBVkVfUkFORE9NX0gKKyMgaW5jbHVkZSA8cmFuZG9tLmg+CisjZW5kaWYKKyAgICBdXSwgW19FeGl0IGF0b2xsIGNhbm9uaWNhbGl6ZV9maWxlX25hbWUgZ2V0bG9hZGF2ZyBnZXRzdWJvcHQgZ3JhbnRwdAorICAgIGluaXRzdGF0ZSBpbml0c3RhdGVfciBta2R0ZW1wIG1rb3N0ZW1wIG1rb3N0ZW1wcyBta3N0ZW1wIG1rc3RlbXBzCisgICAgcG9zaXhfb3BlbnB0IHB0c25hbWUgcHRzbmFtZV9yIHJhbmRvbSByYW5kb21fciByZWFscGF0aCBycG1hdGNoCisgICAgc2V0ZW52IHNldHN0YXRlIHNldHN0YXRlX3Igc3JhbmRvbSBzcmFuZG9tX3IKKyAgICBzdHJ0b2Qgc3RydG9sbCBzdHJ0b3VsbCB1bmxvY2twdCB1bnNldGVudl0pCitdKQorCitBQ19ERUZVTihbZ2xfU1RETElCX01PRFVMRV9JTkRJQ0FUT1JdLAorWworICBkbmwgVXNlIEFDX1JFUVVJUkUgaGVyZSwgc28gdGhhdCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBhcmUgZXhwYW5kZWQgb25jZSBvbmx5LgorICBBQ19SRVFVSVJFKFtnbF9TVERMSUJfSF9ERUZBVUxUU10pCisgIGdsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFKFskMV0pCisgIGRubCBEZWZpbmUgaXQgYWxzbyBhcyBhIEMgbWFjcm8sIGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgdW5pdCB0ZXN0cy4KKyAgZ2xfTU9EVUxFX0lORElDQVRPUl9GT1JfVEVTVFMoWyQxXSkKK10pCisKK0FDX0RFRlVOKFtnbF9TVERMSUJfSF9ERUZBVUxUU10sCitbCisgIEdOVUxJQl9fRVhJVD0wOyAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfX0VYSVRdKQorICBHTlVMSUJfQVRPTEw9MDsgICAgICAgICBBQ19TVUJTVChbR05VTElCX0FUT0xMXSkKKyAgR05VTElCX0NBTExPQ19QT1NJWD0wOyAgQUNfU1VCU1QoW0dOVUxJQl9DQUxMT0NfUE9TSVhdKQorICBHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRT0wOyAgQUNfU1VCU1QoW0dOVUxJQl9DQU5PTklDQUxJWkVfRklMRV9OQU1FXSkKKyAgR05VTElCX0dFVExPQURBVkc9MDsgICAgQUNfU1VCU1QoW0dOVUxJQl9HRVRMT0FEQVZHXSkKKyAgR05VTElCX0dFVFNVQk9QVD0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9HRVRTVUJPUFRdKQorICBHTlVMSUJfR1JBTlRQVD0wOyAgICAgICBBQ19TVUJTVChbR05VTElCX0dSQU5UUFRdKQorICBHTlVMSUJfTUFMTE9DX1BPU0lYPTA7ICBBQ19TVUJTVChbR05VTElCX01BTExPQ19QT1NJWF0pCisgIEdOVUxJQl9NQlRPV0M9MDsgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfTUJUT1dDXSkKKyAgR05VTElCX01LRFRFTVA9MDsgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9NS0RURU1QXSkKKyAgR05VTElCX01LT1NURU1QPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9NS09TVEVNUF0pCisgIEdOVUxJQl9NS09TVEVNUFM9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfTUtPU1RFTVBTXSkKKyAgR05VTElCX01LU1RFTVA9MDsgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9NS1NURU1QXSkKKyAgR05VTElCX01LU1RFTVBTPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9NS1NURU1QU10pCisgIEdOVUxJQl9QT1NJWF9PUEVOUFQ9MDsgIEFDX1NVQlNUKFtHTlVMSUJfUE9TSVhfT1BFTlBUXSkKKyAgR05VTElCX1BUU05BTUU9MDsgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9QVFNOQU1FXSkKKyAgR05VTElCX1BUU05BTUVfUj0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9QVFNOQU1FX1JdKQorICBHTlVMSUJfUFVURU5WPTA7ICAgICAgICBBQ19TVUJTVChbR05VTElCX1BVVEVOVl0pCisgIEdOVUxJQl9SQU5ET009MDsgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfUkFORE9NXSkKKyAgR05VTElCX1JBTkRPTV9SPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9SQU5ET01fUl0pCisgIEdOVUxJQl9SRUFMTE9DX1BPU0lYPTA7IEFDX1NVQlNUKFtHTlVMSUJfUkVBTExPQ19QT1NJWF0pCisgIEdOVUxJQl9SRUFMUEFUSD0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfUkVBTFBBVEhdKQorICBHTlVMSUJfUlBNQVRDSD0wOyAgICAgICBBQ19TVUJTVChbR05VTElCX1JQTUFUQ0hdKQorICBHTlVMSUJfU0VURU5WPTA7ICAgICAgICBBQ19TVUJTVChbR05VTElCX1NFVEVOVl0pCisgIEdOVUxJQl9TVFJUT0Q9MDsgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfU1RSVE9EXSkKKyAgR05VTElCX1NUUlRPTEw9MDsgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9TVFJUT0xMXSkKKyAgR05VTElCX1NUUlRPVUxMPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9TVFJUT1VMTF0pCisgIEdOVUxJQl9TWVNURU1fUE9TSVg9MDsgIEFDX1NVQlNUKFtHTlVMSUJfU1lTVEVNX1BPU0lYXSkKKyAgR05VTElCX1VOTE9DS1BUPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9VTkxPQ0tQVF0pCisgIEdOVUxJQl9VTlNFVEVOVj0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfVU5TRVRFTlZdKQorICBHTlVMSUJfV0NUT01CPTA7ICAgICAgICBBQ19TVUJTVChbR05VTElCX1dDVE9NQl0pCisgIGRubCBBc3N1bWUgcHJvcGVyIEdOVSBiZWhhdmlvciB1bmxlc3MgYW5vdGhlciBtb2R1bGUgc2F5cyBvdGhlcndpc2UuCisgIEhBVkVfX0VYSVQ9MTsgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX19FWElUXSkKKyAgSEFWRV9BVE9MTD0xOyAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfQVRPTExdKQorICBIQVZFX0NBTk9OSUNBTElaRV9GSUxFX05BTUU9MTsgIEFDX1NVQlNUKFtIQVZFX0NBTk9OSUNBTElaRV9GSUxFX05BTUVdKQorICBIQVZFX0RFQ0xfR0VUTE9BREFWRz0xOyAgICBBQ19TVUJTVChbSEFWRV9ERUNMX0dFVExPQURBVkddKQorICBIQVZFX0dFVFNVQk9QVD0xOyAgICAgICAgICBBQ19TVUJTVChbSEFWRV9HRVRTVUJPUFRdKQorICBIQVZFX0dSQU5UUFQ9MTsgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9HUkFOVFBUXSkKKyAgSEFWRV9NS0RURU1QPTE7ICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfTUtEVEVNUF0pCisgIEhBVkVfTUtPU1RFTVA9MTsgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX01LT1NURU1QXSkKKyAgSEFWRV9NS09TVEVNUFM9MTsgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfTUtPU1RFTVBTXSkKKyAgSEFWRV9NS1NURU1QPTE7ICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfTUtTVEVNUF0pCisgIEhBVkVfTUtTVEVNUFM9MTsgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX01LU1RFTVBTXSkKKyAgSEFWRV9QT1NJWF9PUEVOUFQ9MTsgICAgICAgQUNfU1VCU1QoW0hBVkVfUE9TSVhfT1BFTlBUXSkKKyAgSEFWRV9QVFNOQU1FPTE7ICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfUFRTTkFNRV0pCisgIEhBVkVfUFRTTkFNRV9SPTE7ICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1BUU05BTUVfUl0pCisgIEhBVkVfUkFORE9NPTE7ICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1JBTkRPTV0pCisgIEhBVkVfUkFORE9NX0g9MTsgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1JBTkRPTV9IXSkKKyAgSEFWRV9SQU5ET01fUj0xOyAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfUkFORE9NX1JdKQorICBIQVZFX1JFQUxQQVRIPTE7ICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9SRUFMUEFUSF0pCisgIEhBVkVfUlBNQVRDSD0xOyAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1JQTUFUQ0hdKQorICBIQVZFX1NFVEVOVj0xOyAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9TRVRFTlZdKQorICBIQVZFX0RFQ0xfU0VURU5WPTE7ICAgICAgICBBQ19TVUJTVChbSEFWRV9ERUNMX1NFVEVOVl0pCisgIEhBVkVfU1RSVE9EPTE7ICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1NUUlRPRF0pCisgIEhBVkVfU1RSVE9MTD0xOyAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1NUUlRPTExdKQorICBIQVZFX1NUUlRPVUxMPTE7ICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9TVFJUT1VMTF0pCisgIEhBVkVfU1RSVUNUX1JBTkRPTV9EQVRBPTE7IEFDX1NVQlNUKFtIQVZFX1NUUlVDVF9SQU5ET01fREFUQV0pCisgIEhBVkVfU1lTX0xPQURBVkdfSD0wOyAgICAgIEFDX1NVQlNUKFtIQVZFX1NZU19MT0FEQVZHX0hdKQorICBIQVZFX1VOTE9DS1BUPTE7ICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9VTkxPQ0tQVF0pCisgIEhBVkVfREVDTF9VTlNFVEVOVj0xOyAgICAgIEFDX1NVQlNUKFtIQVZFX0RFQ0xfVU5TRVRFTlZdKQorICBSRVBMQUNFX0NBTExPQz0wOyAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9DQUxMT0NdKQorICBSRVBMQUNFX0NBTk9OSUNBTElaRV9GSUxFX05BTUU9MDsgIEFDX1NVQlNUKFtSRVBMQUNFX0NBTk9OSUNBTElaRV9GSUxFX05BTUVdKQorICBSRVBMQUNFX01BTExPQz0wOyAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9NQUxMT0NdKQorICBSRVBMQUNFX01CVE9XQz0wOyAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9NQlRPV0NdKQorICBSRVBMQUNFX01LU1RFTVA9MDsgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9NS1NURU1QXSkKKyAgUkVQTEFDRV9QVFNOQU1FPTA7ICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfUFRTTkFNRV0pCisgIFJFUExBQ0VfUFRTTkFNRV9SPTA7ICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX1BUU05BTUVfUl0pCisgIFJFUExBQ0VfUFVURU5WPTA7ICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX1BVVEVOVl0pCisgIFJFUExBQ0VfUkFORE9NX1I9MDsgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX1JBTkRPTV9SXSkKKyAgUkVQTEFDRV9SRUFMTE9DPTA7ICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfUkVBTExPQ10pCisgIFJFUExBQ0VfUkVBTFBBVEg9MDsgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX1JFQUxQQVRIXSkKKyAgUkVQTEFDRV9TRVRFTlY9MDsgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfU0VURU5WXSkKKyAgUkVQTEFDRV9TVFJUT0Q9MDsgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfU1RSVE9EXSkKKyAgUkVQTEFDRV9VTlNFVEVOVj0wOyAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfVU5TRVRFTlZdKQorICBSRVBMQUNFX1dDVE9NQj0wOyAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9XQ1RPTUJdKQorXSkKZGlmZiAtLWdpdCBhL200L3N0cGNweS5tNCBiL200L3N0cGNweS5tNAppbmRleCBjZThkOTJmLi44ZTk1NDU3IDEwMDY0NAotLS0gYS9tNC9zdHBjcHkubTQKKysrIGIvbTQvc3RwY3B5Lm00CkBAIC0xLDUgKzEsNSBAQAotIyBzdHBjcHkubTQgc2VyaWFsIDEKLWRubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIHN0cGNweS5tNCBzZXJpYWwgOAorZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKIGRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCkBAIC03LDExICs3LDE1IEBACiBBQ19ERUZVTihbZ2xfRlVOQ19TVFBDUFldLAogWwogICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHN0cmluZy5oPiB0byBkZWNsYXJlIHN0cGNweSgpLgotICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAgQUNfUkVRVUlSRShbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSkKIAotICBBQ19SRVBMQUNFX0ZVTkNTKHN0cGNweSkKKyAgZG5sIFRoZSBzdHBjcHkoKSBkZWNsYXJhdGlvbiBpbiBsaWIvc3RyaW5nLmluLmggdXNlcyAncmVzdHJpY3QnLgorICBBQ19SRVFVSVJFKFtBQ19DX1JFU1RSSUNUXSkKKworICBBQ19SRVFVSVJFKFtnbF9IRUFERVJfU1RSSU5HX0hfREVGQVVMVFNdKQorICBBQ19DSEVDS19GVU5DUyhbc3RwY3B5XSkKICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zdHBjcHkgPSBubzsgdGhlbgotICAgIGdsX1BSRVJFUV9TVFBDUFkKKyAgICBIQVZFX1NUUENQWT0wCiAgIGZpCiBdKQogCkBAIC0xOSw0ICsyMywzIEBACiBBQ19ERUZVTihbZ2xfUFJFUkVRX1NUUENQWV0sIFsKICAgOgogXSkKLQpkaWZmIC0tZ2l0IGEvbTQvc3RyY2hybnVsLm00IGIvbTQvc3RyY2hybnVsLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZGZiOWEKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9zdHJjaHJudWwubTQKQEAgLTAsMCArMSw1MCBAQAorIyBzdHJjaHJudWwubTQgc2VyaWFsIDkKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ2xfRlVOQ19TVFJDSFJOVUxdLAorWworICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHN0cmluZy5oPiB0byBkZWNsYXJlIHN0cmNocm51bCgpLgorICBBQ19SRVFVSVJFKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorCisgIEFDX1JFUVVJUkUoW2dsX0hFQURFUl9TVFJJTkdfSF9ERUZBVUxUU10pCisgIEFDX0NIRUNLX0ZVTkNTKFtzdHJjaHJudWxdKQorICBpZiB0ZXN0ICRhY19jdl9mdW5jX3N0cmNocm51bCA9IG5vOyB0aGVuCisgICAgSEFWRV9TVFJDSFJOVUw9MAorICBlbHNlCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgc3RyY2hybnVsIHdvcmtzXSwKKyAgICAgIFtnbF9jdl9mdW5jX3N0cmNocm51bF93b3Jrc10sCisgICAgICBbQUNfUlVOX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8c3RyaW5nLmg+IC8qIGZvciBzdHJjaHJudWwgKi8KK11dLCBbW2NvbnN0IGNoYXIgKmJ1ZiA9ICJhIjsKKyAgICAgIHJldHVybiBzdHJjaHJudWwgKGJ1ZiwgJ2InKSAhPSBidWYgKyAxOworICAgIF1dKV0sCisgICAgICAgIFtnbF9jdl9mdW5jX3N0cmNocm51bF93b3Jrcz15ZXNdLAorICAgICAgICBbZ2xfY3ZfZnVuY19zdHJjaHJudWxfd29ya3M9bm9dLAorICAgICAgICBbZG5sIEN5Z3dpbiAxLjcuOSBpbnRyb2R1Y2VkIHN0cmNocm51bCwgYnV0IGl0IHdhcyBicm9rZW4gdW50aWwgMS43LjEwCisgICAgICAgICBBQ19FR1JFUF9DUFAoW0x1Y2t5IHVzZXJdLAorICAgICAgICAgICBbCisjaWYgZGVmaW5lZCBfX0NZR1dJTl9fCisgI2luY2x1ZGUgPGN5Z3dpbi92ZXJzaW9uLmg+CisgI2lmIENZR1dJTl9WRVJTSU9OX0RMTF9DT01CSU5FRCA+IENZR1dJTl9WRVJTSU9OX0RMTF9NQUtFX0NPTUJJTkVEICgxMDA3LCA5KQorICBMdWNreSB1c2VyCisgI2VuZGlmCisjZWxzZQorICBMdWNreSB1c2VyCisjZW5kaWYKKyAgICAgICAgICAgXSwKKyAgICAgICAgICAgW2dsX2N2X2Z1bmNfc3RyY2hybnVsX3dvcmtzPSJndWVzc2luZyB5ZXMiXSwKKyAgICAgICAgICAgW2dsX2N2X2Z1bmNfc3RyY2hybnVsX3dvcmtzPSJndWVzc2luZyBubyJdKQorICAgICAgICBdKQorICAgICAgXSkKKyAgICBjYXNlICIkZ2xfY3ZfZnVuY19zdHJjaHJudWxfd29ya3MiIGluCisgICAgICAqeWVzKSA7OworICAgICAgKikgUkVQTEFDRV9TVFJDSFJOVUw9MSA7OworICAgIGVzYWMKKyAgZmkKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvc3RyY2hybnVsLmMuCitBQ19ERUZVTihbZ2xfUFJFUkVRX1NUUkNIUk5VTF0sIFs6XSkKZGlmZiAtLWdpdCBhL200L3N0cmR1cC5tNCBiL200L3N0cmR1cC5tNAppbmRleCA0MjMyNWFiLi5kYjBjOGMxIDEwMDY0NAotLS0gYS9tNC9zdHJkdXAubTQKKysrIGIvbTQvc3RyZHVwLm00CkBAIC0xLDE2ICsxLDM1IEBACi0jIHN0cmR1cC5tNCBzZXJpYWwgNgotZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgc3RyZHVwLm00IHNlcmlhbCAxMworCitkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiBkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCiBBQ19ERUZVTihbZ2xfRlVOQ19TVFJEVVBdLAogWwotICBBQ19MSUJTT1VSQ0VTKFtzdHJkdXAuYywgc3RyZHVwLmhdKQorICBBQ19SRVFVSVJFKFtnbF9IRUFERVJfU1RSSU5HX0hfREVGQVVMVFNdKQorICBBQ19DSEVDS19GVU5DU19PTkNFKFtzdHJkdXBdKQorICBBQ19DSEVDS19ERUNMU19PTkNFKFtzdHJkdXBdKQorICBpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfc3RyZHVwID0gbm87IHRoZW4KKyAgICBIQVZFX0RFQ0xfU1RSRFVQPTAKKyAgZmkKK10pCiAKLSAgQUNfUkVQTEFDRV9GVU5DUyhzdHJkdXApCi0gIEFDX0NIRUNLX0RFQ0xTX09OQ0Uoc3RyZHVwKQotICBnbF9QUkVSRVFfU1RSRFVQCitBQ19ERUZVTihbZ2xfRlVOQ19TVFJEVVBfUE9TSVhdLAorWworICBBQ19SRVFVSVJFKFtnbF9IRUFERVJfU1RSSU5HX0hfREVGQVVMVFNdKQorICBBQ19SRVFVSVJFKFtnbF9DSEVDS19NQUxMT0NfUE9TSVhdKQorICBBQ19DSEVDS19GVU5DU19PTkNFKFtzdHJkdXBdKQorICBpZiB0ZXN0ICRhY19jdl9mdW5jX3N0cmR1cCA9IHllczsgdGhlbgorICAgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfbWFsbG9jX3Bvc2l4ICE9IHllczsgdGhlbgorICAgICAgUkVQTEFDRV9TVFJEVVA9MQorICAgIGZpCisgIGZpCisgIEFDX0NIRUNLX0RFQ0xTX09OQ0UoW3N0cmR1cF0pCisgIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9zdHJkdXAgPSBubzsgdGhlbgorICAgIEhBVkVfREVDTF9TVFJEVVA9MAorICBmaQogXSkKIAogIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9zdHJkdXAuYy4KZGlmZiAtLWdpdCBhL200L3N0cmVycm9yLm00IGIvbTQvc3RyZXJyb3IubTQKaW5kZXggMzJiYzdlZC4uMWM5NmU1MiAxMDA2NDQKLS0tIGEvbTQvc3RyZXJyb3IubTQKKysrIGIvbTQvc3RyZXJyb3IubTQKQEAgLTEsMTggKzEsOTYgQEAKLSMgc3RyZXJyb3IubTQgc2VyaWFsIDIKLWRubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIHN0cmVycm9yLm00IHNlcmlhbCAxNworZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNy0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKIGRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKIEFDX0RFRlVOKFtnbF9GVU5DX1NUUkVSUk9SXSwKIFsKLSAgQUNfUkVQTEFDRV9GVU5DUyhzdHJlcnJvcikKLSAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zdHJlcnJvciA9IG5vOyB0aGVuCi0gICAgZ2xfUFJFUkVRX1NUUkVSUk9SCisgIEFDX1JFUVVJUkUoW2dsX0hFQURFUl9TVFJJTkdfSF9ERUZBVUxUU10pCisgIEFDX1JFUVVJUkUoW2dsX0hFQURFUl9FUlJOT19IXSkKKyAgQUNfUkVRVUlSRShbZ2xfRlVOQ19TVFJFUlJPUl8wXSkKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKSBkbmwgZm9yIGNyb3NzLWNvbXBpbGVzCisgIG00X2lmZGVmKFtnbF9GVU5DX1NUUkVSUk9SX1JfV09SS1NdLCBbCisgICAgQUNfUkVRVUlSRShbZ2xfRlVOQ19TVFJFUlJPUl9SX1dPUktTXSkKKyAgXSkKKyAgaWYgdGVzdCAiJEVSUk5PX0g6JFJFUExBQ0VfU1RSRVJST1JfMCIgPSA6MDsgdGhlbgorICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igd29ya2luZyBzdHJlcnJvciBmdW5jdGlvbl0sCisgICAgIFtnbF9jdl9mdW5jX3dvcmtpbmdfc3RyZXJyb3JdLAorICAgICBbQUNfUlVOX0lGRUxTRSgKKyAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgW1sjaW5jbHVkZSA8c3RyaW5nLmg+CisgICAgICAgICAgIF1dLAorICAgICAgICAgICBbW2lmICghKnN0cmVycm9yICgtMikpIHJldHVybiAxO11dKV0sCisgICAgICAgIFtnbF9jdl9mdW5jX3dvcmtpbmdfc3RyZXJyb3I9eWVzXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfd29ya2luZ19zdHJlcnJvcj1ub10sCisgICAgICAgIFtjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBnbGliYyBzeXN0ZW1zLgorICAgICAgICAgICAqLWdudSopIGdsX2N2X2Z1bmNfd29ya2luZ19zdHJlcnJvcj0iZ3Vlc3NpbmcgeWVzIiA7OworICAgICAgICAgICAgICAgICAgICMgSWYgd2UgZG9uJ3Qga25vdywgYXNzdW1lIHRoZSB3b3JzdC4KKyAgICAgICAgICAgKikgICAgICBnbF9jdl9mdW5jX3dvcmtpbmdfc3RyZXJyb3I9Imd1ZXNzaW5nIG5vIiA7OworICAgICAgICAgZXNhYworICAgICAgICBdKQorICAgIF0pCisgICAgY2FzZSAiJGdsX2N2X2Z1bmNfd29ya2luZ19zdHJlcnJvciIgaW4KKyAgICAgICp5ZXMpIDs7CisgICAgICAqKQorICAgICAgICBkbmwgVGhlIHN5c3RlbSdzIHN0cmVycm9yKCkgZmFpbHMgdG8gcmV0dXJuIGEgc3RyaW5nIGZvciBvdXQtb2YtcmFuZ2UKKyAgICAgICAgZG5sIGludGVnZXJzLiBSZXBsYWNlIGl0LgorICAgICAgICBSRVBMQUNFX1NUUkVSUk9SPTEKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgbTRfaWZkZWYoW2dsX0ZVTkNfU1RSRVJST1JfUl9XT1JLU10sIFsKKyAgICAgIGRubCBJZiB0aGUgc3lzdGVtJ3Mgc3RyZXJyb3JfciBvciBfX3hwZ19zdHJlcnJvcl9yIGNsb2JiZXJzIHN0cmVycm9yJ3MKKyAgICAgIGRubCBidWZmZXIsIHdlIG11c3QgcmVwbGFjZSBzdHJlcnJvci4KKyAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3N0cmVycm9yX3Jfd29ya3MiIGluCisgICAgICAgICpubykgUkVQTEFDRV9TVFJFUlJPUj0xIDs7CisgICAgICBlc2FjCisgICAgXSkKKyAgZWxzZQorICAgIGRubCBUaGUgc3lzdGVtJ3Mgc3RyZXJyb3IoKSBjYW5ub3Qga25vdyBhYm91dCB0aGUgbmV3IGVycm5vIHZhbHVlcyB3ZSBhZGQKKyAgICBkbmwgdG8gPGVycm5vLmg+LCBvciBhbnkgZml4IGZvciBzdHJlcnJvcigwKS4gUmVwbGFjZSBpdC4KKyAgICBSRVBMQUNFX1NUUkVSUk9SPTEKICAgZmkKIF0pCiAKLSMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvc3RyZXJyb3IuYy4KLUFDX0RFRlVOKFtnbF9QUkVSRVFfU1RSRVJST1JdLCBbCi0gIDoKK2RubCBEZXRlY3QgaWYgc3RyZXJyb3IoMCkgcGFzc2VzICh0aGF0IGlzLCBkb2VzIG5vdCBzZXQgZXJybm8sIGFuZCBkb2VzIG5vdAorZG5sIHJldHVybiBhIHN0cmluZyB0aGF0IG1hdGNoZXMgc3RyZXJyb3IoLTEpKS4KK0FDX0RFRlVOKFtnbF9GVU5DX1NUUkVSUk9SXzBdLAorWworICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pIGRubCBmb3IgY3Jvc3MtY29tcGlsZXMKKyAgUkVQTEFDRV9TVFJFUlJPUl8wPTAKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgc3RyZXJyb3IoMCkgc3VjY2VlZHNdLAorICAgW2dsX2N2X2Z1bmNfc3RyZXJyb3JfMF93b3Jrc10sCisgICBbQUNfUlVOX0lGRUxTRSgKKyAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICBbWyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAgICAgICAgICAgI2luY2x1ZGUgPGVycm5vLmg+CisgICAgICAgICBdXSwKKyAgICAgICAgIFtbaW50IHJlc3VsdCA9IDA7CisgICAgICAgICAgIGNoYXIgKnN0cjsKKyAgICAgICAgICAgZXJybm8gPSAwOworICAgICAgICAgICBzdHIgPSBzdHJlcnJvciAoMCk7CisgICAgICAgICAgIGlmICghKnN0cikgcmVzdWx0IHw9IDE7CisgICAgICAgICAgIGlmIChlcnJubykgcmVzdWx0IHw9IDI7CisgICAgICAgICAgIGlmIChzdHJzdHIgKHN0ciwgIm5rbm93biIpIHx8IHN0cnN0ciAoc3RyLCAibmRlZmluZWQiKSkKKyAgICAgICAgICAgICByZXN1bHQgfD0gNDsKKyAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtdXSldLAorICAgICAgW2dsX2N2X2Z1bmNfc3RyZXJyb3JfMF93b3Jrcz15ZXNdLAorICAgICAgW2dsX2N2X2Z1bmNfc3RyZXJyb3JfMF93b3Jrcz1ub10sCisgICAgICBbY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIGdsaWJjIHN5c3RlbXMuCisgICAgICAgICAqLWdudSopIGdsX2N2X2Z1bmNfc3RyZXJyb3JfMF93b3Jrcz0iZ3Vlc3NpbmcgeWVzIiA7OworICAgICAgICAgICAgICAgICAjIElmIHdlIGRvbid0IGtub3csIGFzc3VtZSB0aGUgd29yc3QuCisgICAgICAgICAqKSAgICAgIGdsX2N2X2Z1bmNfc3RyZXJyb3JfMF93b3Jrcz0iZ3Vlc3Npbmcgbm8iIDs7CisgICAgICAgZXNhYworICAgICAgXSkKKyAgXSkKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfc3RyZXJyb3JfMF93b3JrcyIgaW4KKyAgICAqeWVzKSA7OworICAgICopCisgICAgICBSRVBMQUNFX1NUUkVSUk9SXzA9MQorICAgICAgQUNfREVGSU5FKFtSRVBMQUNFX1NUUkVSUk9SXzBdLCBbMV0sIFtEZWZpbmUgdG8gMSBpZiBzdHJlcnJvcigwKQorICAgICAgICBkb2VzIG5vdCByZXR1cm4gYSBtZXNzYWdlIGltcGx5aW5nIHN1Y2Nlc3MuXSkKKyAgICAgIDs7CisgIGVzYWMKIF0pCmRpZmYgLS1naXQgYS9tNC9zdHJlcnJvcl9yLm00IGIvbTQvc3RyZXJyb3Jfci5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjAzNWViCi0tLSAvZGV2L251bGwKKysrIGIvbTQvc3RyZXJyb3Jfci5tNApAQCAtMCwwICsxLDE3MyBAQAorIyBzdHJlcnJvcl9yLm00IHNlcmlhbCAxNQorZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNy0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9GVU5DX1NUUkVSUk9SX1JdLAorWworICBBQ19SRVFVSVJFKFtnbF9IRUFERVJfU1RSSU5HX0hfREVGQVVMVFNdKQorICBBQ19SRVFVSVJFKFtnbF9GVU5DX1NUUkVSUk9SX1JfV09SS1NdKQorCisgIGRubCBQZXJzdWFkZSBTb2xhcmlzIDxzdHJpbmcuaD4gdG8gZGVjbGFyZSBzdHJlcnJvcl9yKCkuCisgIEFDX1JFUVVJUkUoW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10pCisKKyAgZG5sIFNvbWUgc3lzdGVtcyBkb24ndCBkZWNsYXJlIHN0cmVycm9yX3IoKSBpZiBfVEhSRUFEX1NBRkUgYW5kIF9SRUVOVFJBTlQKKyAgZG5sIGFyZSBub3QgZGVmaW5lZC4KKyAgQUNfQ0hFQ0tfREVDTFNfT05DRShbc3RyZXJyb3Jfcl0pCisgIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9zdHJlcnJvcl9yID0gbm87IHRoZW4KKyAgICBIQVZFX0RFQ0xfU1RSRVJST1JfUj0wCisgIGZpCisKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zdHJlcnJvcl9yID0geWVzOyB0aGVuCisgICAgaWYgdGVzdCAiJEVSUk5PX0g6JFJFUExBQ0VfU1RSRVJST1JfMCIgPSA6MDsgdGhlbgorICAgICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19zdHJlcnJvcl9yX3Bvc2l4X3NpZ25hdHVyZSA9IHllczsgdGhlbgorICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19zdHJlcnJvcl9yX3dvcmtzIiBpbgorICAgICAgICAgIGRubCBUaGUgc3lzdGVtJ3Mgc3RyZXJyb3JfciBoYXMgYnVncy4gIFJlcGxhY2UgaXQuCisgICAgICAgICAgKm5vKSBSRVBMQUNFX1NUUkVSUk9SX1I9MSA7OworICAgICAgICBlc2FjCisgICAgICBlbHNlCisgICAgICAgIGRubCBUaGUgc3lzdGVtJ3Mgc3RyZXJyb3JfcigpIGhhcyBhIHdyb25nIHNpZ25hdHVyZS4gUmVwbGFjZSBpdC4KKyAgICAgICAgUkVQTEFDRV9TVFJFUlJPUl9SPTEKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgZG5sIFRoZSBzeXN0ZW0ncyBzdHJlcnJvcl9yKCkgY2Fubm90IGtub3cgYWJvdXQgdGhlIG5ldyBlcnJubyB2YWx1ZXMgd2UKKyAgICAgIGRubCBhZGQgdG8gPGVycm5vLmg+LCBvciBhbnkgZml4IGZvciBzdHJlcnJvcigwKS4gUmVwbGFjZSBpdC4KKyAgICAgIFJFUExBQ0VfU1RSRVJST1JfUj0xCisgICAgZmkKKyAgZmkKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvc3RyZXJyb3Jfci5jLgorQUNfREVGVU4oW2dsX1BSRVJFUV9TVFJFUlJPUl9SXSwgWworICBkbmwgZ2xpYmMgPj0gMi4zLjQgYW5kIGN5Z3dpbiAxLjcuOSBoYXZlIGEgZnVuY3Rpb24gX194cGdfc3RyZXJyb3Jfci4KKyAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbX194cGdfc3RyZXJyb3Jfcl0pCisgIEFDX0NIRUNLX0ZVTkNTX09OQ0UoW2NhdGdldHNdKQorICBBQ19DSEVDS19GVU5DU19PTkNFKFtzbnByaW50Zl0pCitdKQorCisjIERldGVjdCBpZiBzdHJlcnJvcl9yIHdvcmtzLCBidXQgd2l0aG91dCBhZmZlY3Rpbmcgd2hldGhlciBhIHJlcGxhY2VtZW50CisjIHN0cmVycm9yX3Igd2lsbCBiZSB1c2VkLgorQUNfREVGVU4oW2dsX0ZVTkNfU1RSRVJST1JfUl9XT1JLU10sCitbCisgIEFDX1JFUVVJUkUoW2dsX0hFQURFUl9FUlJOT19IXSkKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKSBkbmwgZm9yIGNyb3NzLWNvbXBpbGVzCisgIEFDX1JFUVVJUkUoW2dsX0ZVTkNfU1RSRVJST1JfMF0pCisKKyAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbc3RyZXJyb3Jfcl0pCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfc3RyZXJyb3JfciA9IHllczsgdGhlbgorICAgIGlmIHRlc3QgIiRFUlJOT19IOiRSRVBMQUNFX1NUUkVSUk9SXzAiID0gOjA7IHRoZW4KKyAgICAgIGRubCBUaGUgUE9TSVggcHJvdG90eXBlIGlzOiAgaW50IHN0cmVycm9yX3IgKGludCwgY2hhciAqLCBzaXplX3QpOworICAgICAgZG5sIGdsaWJjLCBDeWd3aW46ICAgICAgICAgICBjaGFyICpzdHJlcnJvcl9yIChpbnQsIGNoYXIgKiwgc2l6ZV90KTsKKyAgICAgIGRubCBBSVggNS4xLCBPU0YvMSA1LjE6ICAgICAgaW50IHN0cmVycm9yX3IgKGludCwgY2hhciAqLCBpbnQpOworICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzdHJlcnJvcl9yIHdpdGggUE9TSVggc2lnbmF0dXJlXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfc3RyZXJyb3Jfcl9wb3NpeF9zaWduYXR1cmVdLAorICAgICAgICBbQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgICAgIFtbI2luY2x1ZGUgPHN0cmluZy5oPgorICAgICAgICAgICAgICAgIGludCBzdHJlcnJvcl9yIChpbnQsIGNoYXIgKiwgc2l6ZV90KTsKKyAgICAgICAgICAgICAgXV0sCisgICAgICAgICAgICAgIFtdKV0sCisgICAgICAgICAgIFtnbF9jdl9mdW5jX3N0cmVycm9yX3JfcG9zaXhfc2lnbmF0dXJlPXllc10sCisgICAgICAgICAgIFtnbF9jdl9mdW5jX3N0cmVycm9yX3JfcG9zaXhfc2lnbmF0dXJlPW5vXSkKKyAgICAgICAgXSkKKyAgICAgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfc3RyZXJyb3Jfcl9wb3NpeF9zaWduYXR1cmUgPSB5ZXM7IHRoZW4KKyAgICAgICAgZG5sIEFJWCA2LjEgc3RyZXJyb3JfciBmYWlscyBieSByZXR1cm5pbmcgLTEsIG5vdCBhbiBlcnJvciBudW1iZXIuCisgICAgICAgIGRubCBIUC1VWCAxMS4zMSBzdHJlcnJvcl9yIGFsd2F5cyBmYWlscyB3aGVuIHRoZSBidWZmZXIgbGVuZ3RoIGFyZ3VtZW50CisgICAgICAgIGRubCBpcyBsZXNzIHRoYW4gODAuCisgICAgICAgIGRubCBGcmVlQlNEIDgucyBzdHJlcnJvcl9yIGNsYWltcyBmYWlsdXJlIG9uIDAKKyAgICAgICAgZG5sIE1hYyBPUyBYIDEwLjUgc3RyZXJyb3JfciB0cmVhdHMgMCBsaWtlIC0xCisgICAgICAgIGRubCBTb2xhcmlzIDEwIHN0cmVycm9yX3IgY29ycnVwdHMgZXJybm8gb24gZmFpbHVyZQorICAgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBzdHJlcnJvcl9yIHdvcmtzXSwKKyAgICAgICAgICBbZ2xfY3ZfZnVuY19zdHJlcnJvcl9yX3dvcmtzXSwKKyAgICAgICAgICBbQUNfUlVOX0lGRUxTRSgKKyAgICAgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgICAgICAgIFtbI2luY2x1ZGUgPGVycm5vLmg+CisgICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3RyaW5nLmg+CisgICAgICAgICAgICAgICAgXV0sCisgICAgICAgICAgICAgICAgW1tpbnQgcmVzdWx0ID0gMDsKKyAgICAgICAgICAgICAgICAgIGNoYXIgYnVmWzc5XTsKKyAgICAgICAgICAgICAgICAgIGlmIChzdHJlcnJvcl9yIChFQUNDRVMsIGJ1ZiwgMCkgPCAwKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gMTsKKyAgICAgICAgICAgICAgICAgIGVycm5vID0gMDsKKyAgICAgICAgICAgICAgICAgIGlmIChzdHJlcnJvcl9yIChFQUNDRVMsIGJ1Ziwgc2l6ZW9mIGJ1ZikgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDI7CisgICAgICAgICAgICAgICAgICBzdHJjcHkgKGJ1ZiwgIlVua25vd24iKTsKKyAgICAgICAgICAgICAgICAgIGlmIChzdHJlcnJvcl9yICgwLCBidWYsIHNpemVvZiBidWYpICE9IDApCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSA0OworICAgICAgICAgICAgICAgICAgaWYgKGVycm5vKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gODsKKyAgICAgICAgICAgICAgICAgIGlmIChzdHJzdHIgKGJ1ZiwgIm5rbm93biIpIHx8IHN0cnN0ciAoYnVmLCAibmRlZmluZWQiKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDB4MTA7CisgICAgICAgICAgICAgICAgICBlcnJubyA9IDA7CisgICAgICAgICAgICAgICAgICAqYnVmID0gMDsKKyAgICAgICAgICAgICAgICAgIGlmIChzdHJlcnJvcl9yICgtMywgYnVmLCBzaXplb2YgYnVmKSA8IDApCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSAweDIwOworICAgICAgICAgICAgICAgICAgaWYgKGVycm5vKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gMHg0MDsKKyAgICAgICAgICAgICAgICAgIGlmICghKmJ1ZikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDB4ODA7CisgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIF1dKV0sCisgICAgICAgICAgICAgW2dsX2N2X2Z1bmNfc3RyZXJyb3Jfcl93b3Jrcz15ZXNdLAorICAgICAgICAgICAgIFtnbF9jdl9mdW5jX3N0cmVycm9yX3Jfd29ya3M9bm9dLAorICAgICAgICAgICAgIFsKK2NoYW5nZXF1b3RlKCwpZG5sCisgICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIG5vIG9uIEFJWC4KKyAgICAgICAgICAgICAgICBhaXgqKSAgZ2xfY3ZfZnVuY19zdHJlcnJvcl9yX3dvcmtzPSJndWVzc2luZyBubyI7OworICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIG5vIG9uIEhQLVVYLgorICAgICAgICAgICAgICAgIGhwdXgqKSBnbF9jdl9mdW5jX3N0cmVycm9yX3Jfd29ya3M9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3Mgbm8gb24gQlNEIHZhcmlhbnRzLgorICAgICAgICAgICAgICAgICpic2QqKSAgZ2xfY3ZfZnVuY19zdHJlcnJvcl9yX3dvcmtzPSJndWVzc2luZyBubyI7OworICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvdGhlcndpc2UuCisgICAgICAgICAgICAgICAgKikgICAgIGdsX2N2X2Z1bmNfc3RyZXJyb3Jfcl93b3Jrcz0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgIGVzYWMKK2NoYW5nZXF1b3RlKFssXSlkbmwKKyAgICAgICAgICAgICBdKQorICAgICAgICAgIF0pCisgICAgICBlbHNlCisgICAgICAgIGRubCBUaGUgc3lzdGVtJ3Mgc3RyZXJyb3IoKSBoYXMgYSB3cm9uZyBzaWduYXR1cmUuCisgICAgICAgIGRubCBnbGliYyA+PSAyLjMuNCBhbmQgY3lnd2luIDEuNy45IGhhdmUgYSBmdW5jdGlvbiBfX3hwZ19zdHJlcnJvcl9yLgorICAgICAgICBBQ19DSEVDS19GVU5DU19PTkNFKFtfX3hwZ19zdHJlcnJvcl9yXSkKKyAgICAgICAgZG5sIEluIGdsaWJjIDwgMi4xNCwgX194cGdfc3RyZXJyb3JfciBkb2VzIG5vdCBwb3B1bGF0ZSBidWYgb24gZmFpbHVyZS4KKyAgICAgICAgZG5sIEluIGN5Z3dpbiA8IDEuNy4xMCwgX194cGdfc3RyZXJyb3JfciBjbG9iYmVycyBzdHJlcnJvcidzIGJ1ZmZlci4KKyAgICAgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19fX3hwZ19zdHJlcnJvcl9yID0geWVzOyB0aGVuCisgICAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgX194cGdfc3RyZXJyb3JfciB3b3Jrc10sCisgICAgICAgICAgICBbZ2xfY3ZfZnVuY19zdHJlcnJvcl9yX3dvcmtzXSwKKyAgICAgICAgICAgIFtBQ19SVU5fSUZFTFNFKAorICAgICAgICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgICAgICAgIFtbI2luY2x1ZGUgPGVycm5vLmg+CisgICAgICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAgICAgICAgICAgICAgICAgICAgZXh0ZXJuCisgICAgICAgICAgICAgICAgICAgICNpZmRlZiBfX2NwbHVzcGx1cworICAgICAgICAgICAgICAgICAgICAiQyIKKyAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIGludCBfX3hwZ19zdHJlcnJvcl9yKGludCwgY2hhciAqLCBzaXplX3QpOworICAgICAgICAgICAgICAgICAgXV0sCisgICAgICAgICAgICAgICAgICBbW2ludCByZXN1bHQgPSAwOworICAgICAgICAgICAgICAgICAgICBjaGFyIGJ1ZlsyNTZdID0gIl4iOworICAgICAgICAgICAgICAgICAgICBjaGFyIGNvcHlbMjU2XTsKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqc3RyID0gc3RyZXJyb3IgKC0xKTsKKyAgICAgICAgICAgICAgICAgICAgc3RyY3B5IChjb3B5LCBzdHIpOworICAgICAgICAgICAgICAgICAgICBpZiAoX194cGdfc3RyZXJyb3JfciAoLTIsIGJ1ZiwgMSkgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCpidWYpCisgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDI7CisgICAgICAgICAgICAgICAgICAgIF9feHBnX3N0cmVycm9yX3IgKC0yLCBidWYsIDI1Nik7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAgKHN0ciwgY29weSkpCisgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDQ7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICBdXSldLAorICAgICAgICAgICAgICAgW2dsX2N2X2Z1bmNfc3RyZXJyb3Jfcl93b3Jrcz15ZXNdLAorICAgICAgICAgICAgICAgW2dsX2N2X2Z1bmNfc3RyZXJyb3Jfcl93b3Jrcz1ub10sCisgICAgICAgICAgICAgICBbZG5sIEd1ZXNzIG5vIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBoYXZlIF9feHBnX3N0cmVycm9yX3IsCisgICAgICAgICAgICAgICAgZG5sIGF0IGxlYXN0IHVudGlsIGZpeGVkIGdsaWJjIGFuZCBjeWd3aW4gYXJlIG1vcmUgY29tbW9uLgorICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc3RyZXJyb3Jfcl93b3Jrcz0iZ3Vlc3Npbmcgbm8iCisgICAgICAgICAgICAgICBdKQorICAgICAgICAgICAgXSkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKK10pCmRpZmYgLS1naXQgYS9tNC9zdHJpbmdfaC5tNCBiL200L3N0cmluZ19oLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NzdlMDkKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9zdHJpbmdfaC5tNApAQCAtMCwwICsxLDEyMCBAQAorIyBDb25maWd1cmUgYSBHTlUtbGlrZSByZXBsYWNlbWVudCBmb3IgPHN0cmluZy5oPi4KKworIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCAyMQorCisjIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQuCisKK0FDX0RFRlVOKFtnbF9IRUFERVJfU1RSSU5HX0hdLAorWworICBkbmwgVXNlIEFDX1JFUVVJUkUgaGVyZSwgc28gdGhhdCB0aGUgZGVmYXVsdCBiZWhhdmlvciBiZWxvdyBpcyBleHBhbmRlZAorICBkbmwgb25jZSBvbmx5LCBiZWZvcmUgYWxsIHN0YXRlbWVudHMgdGhhdCBvY2N1ciBpbiBvdGhlciBtYWNyb3MuCisgIEFDX1JFUVVJUkUoW2dsX0hFQURFUl9TVFJJTkdfSF9CT0RZXSkKK10pCisKK0FDX0RFRlVOKFtnbF9IRUFERVJfU1RSSU5HX0hfQk9EWV0sCitbCisgIEFDX1JFUVVJUkUoW0FDX0NfUkVTVFJJQ1RdKQorICBBQ19SRVFVSVJFKFtnbF9IRUFERVJfU1RSSU5HX0hfREVGQVVMVFNdKQorICBnbF9ORVhUX0hFQURFUlMoW3N0cmluZy5oXSkKKworICBkbmwgQ2hlY2sgZm9yIGRlY2xhcmF0aW9ucyBvZiBhbnl0aGluZyB3ZSB3YW50IHRvIHBvaXNvbiBpZiB0aGUKKyAgZG5sIGNvcnJlc3BvbmRpbmcgZ251bGliIG1vZHVsZSBpcyBub3QgaW4gdXNlLCBhbmQgd2hpY2ggaXMgbm90CisgIGRubCBndWFyYW50ZWVkIGJ5IEM4OS4KKyAgZ2xfV0FSTl9PTl9VU0VfUFJFUEFSRShbWyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAgICBdXSwKKyAgICBbZmZzbCBmZnNsbCBtZW1tZW0gbWVtcGNweSBtZW1yY2hyIHJhd21lbWNociBzdHBjcHkgc3RwbmNweSBzdHJjaHJudWwKKyAgICAgc3RyZHVwIHN0cm5jYXQgc3RybmR1cCBzdHJubGVuIHN0cnBicmsgc3Ryc2VwIHN0cmNhc2VzdHIgc3RydG9rX3IKKyAgICAgc3RyZXJyb3JfciBzdHJzaWduYWwgc3RydmVyc2NtcF0pCitdKQorCitBQ19ERUZVTihbZ2xfU1RSSU5HX01PRFVMRV9JTkRJQ0FUT1JdLAorWworICBkbmwgVXNlIEFDX1JFUVVJUkUgaGVyZSwgc28gdGhhdCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBhcmUgZXhwYW5kZWQgb25jZSBvbmx5LgorICBBQ19SRVFVSVJFKFtnbF9IRUFERVJfU1RSSU5HX0hfREVGQVVMVFNdKQorICBnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRShbJDFdKQorICBkbmwgRGVmaW5lIGl0IGFsc28gYXMgYSBDIG1hY3JvLCBmb3IgdGhlIGJlbmVmaXQgb2YgdGhlIHVuaXQgdGVzdHMuCisgIGdsX01PRFVMRV9JTkRJQ0FUT1JfRk9SX1RFU1RTKFskMV0pCitdKQorCitBQ19ERUZVTihbZ2xfSEVBREVSX1NUUklOR19IX0RFRkFVTFRTXSwKK1sKKyAgR05VTElCX0ZGU0w9MDsgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRkZTTF0pCisgIEdOVUxJQl9GRlNMTD0wOyAgICAgICBBQ19TVUJTVChbR05VTElCX0ZGU0xMXSkKKyAgR05VTElCX01FTUNIUj0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfTUVNQ0hSXSkKKyAgR05VTElCX01FTU1FTT0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfTUVNTUVNXSkKKyAgR05VTElCX01FTVBDUFk9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfTUVNUENQWV0pCisgIEdOVUxJQl9NRU1SQ0hSPTA7ICAgICBBQ19TVUJTVChbR05VTElCX01FTVJDSFJdKQorICBHTlVMSUJfUkFXTUVNQ0hSPTA7ICAgQUNfU1VCU1QoW0dOVUxJQl9SQVdNRU1DSFJdKQorICBHTlVMSUJfU1RQQ1BZPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9TVFBDUFldKQorICBHTlVMSUJfU1RQTkNQWT0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9TVFBOQ1BZXSkKKyAgR05VTElCX1NUUkNIUk5VTD0wOyAgIEFDX1NVQlNUKFtHTlVMSUJfU1RSQ0hSTlVMXSkKKyAgR05VTElCX1NUUkRVUD0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfU1RSRFVQXSkKKyAgR05VTElCX1NUUk5DQVQ9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfU1RSTkNBVF0pCisgIEdOVUxJQl9TVFJORFVQPTA7ICAgICBBQ19TVUJTVChbR05VTElCX1NUUk5EVVBdKQorICBHTlVMSUJfU1RSTkxFTj0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9TVFJOTEVOXSkKKyAgR05VTElCX1NUUlBCUks9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfU1RSUEJSS10pCisgIEdOVUxJQl9TVFJTRVA9MDsgICAgICBBQ19TVUJTVChbR05VTElCX1NUUlNFUF0pCisgIEdOVUxJQl9TVFJTVFI9MDsgICAgICBBQ19TVUJTVChbR05VTElCX1NUUlNUUl0pCisgIEdOVUxJQl9TVFJDQVNFU1RSPTA7ICBBQ19TVUJTVChbR05VTElCX1NUUkNBU0VTVFJdKQorICBHTlVMSUJfU1RSVE9LX1I9MDsgICAgQUNfU1VCU1QoW0dOVUxJQl9TVFJUT0tfUl0pCisgIEdOVUxJQl9NQlNMRU49MDsgICAgICBBQ19TVUJTVChbR05VTElCX01CU0xFTl0pCisgIEdOVUxJQl9NQlNOTEVOPTA7ICAgICBBQ19TVUJTVChbR05VTElCX01CU05MRU5dKQorICBHTlVMSUJfTUJTQ0hSPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9NQlNDSFJdKQorICBHTlVMSUJfTUJTUkNIUj0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9NQlNSQ0hSXSkKKyAgR05VTElCX01CU1NUUj0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfTUJTU1RSXSkKKyAgR05VTElCX01CU0NBU0VDTVA9MDsgIEFDX1NVQlNUKFtHTlVMSUJfTUJTQ0FTRUNNUF0pCisgIEdOVUxJQl9NQlNOQ0FTRUNNUD0wOyBBQ19TVUJTVChbR05VTElCX01CU05DQVNFQ01QXSkKKyAgR05VTElCX01CU1BDQVNFQ01QPTA7IEFDX1NVQlNUKFtHTlVMSUJfTUJTUENBU0VDTVBdKQorICBHTlVMSUJfTUJTQ0FTRVNUUj0wOyAgQUNfU1VCU1QoW0dOVUxJQl9NQlNDQVNFU1RSXSkKKyAgR05VTElCX01CU0NTUE49MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfTUJTQ1NQTl0pCisgIEdOVUxJQl9NQlNQQlJLPTA7ICAgICBBQ19TVUJTVChbR05VTElCX01CU1BCUktdKQorICBHTlVMSUJfTUJTU1BOPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9NQlNTUE5dKQorICBHTlVMSUJfTUJTU0VQPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9NQlNTRVBdKQorICBHTlVMSUJfTUJTVE9LX1I9MDsgICAgQUNfU1VCU1QoW0dOVUxJQl9NQlNUT0tfUl0pCisgIEdOVUxJQl9TVFJFUlJPUj0wOyAgICBBQ19TVUJTVChbR05VTElCX1NUUkVSUk9SXSkKKyAgR05VTElCX1NUUkVSUk9SX1I9MDsgIEFDX1NVQlNUKFtHTlVMSUJfU1RSRVJST1JfUl0pCisgIEdOVUxJQl9TVFJTSUdOQUw9MDsgICBBQ19TVUJTVChbR05VTElCX1NUUlNJR05BTF0pCisgIEdOVUxJQl9TVFJWRVJTQ01QPTA7ICBBQ19TVUJTVChbR05VTElCX1NUUlZFUlNDTVBdKQorICBIQVZFX01CU0xFTj0wOyAgICAgICAgQUNfU1VCU1QoW0hBVkVfTUJTTEVOXSkKKyAgZG5sIEFzc3VtZSBwcm9wZXIgR05VIGJlaGF2aW9yIHVubGVzcyBhbm90aGVyIG1vZHVsZSBzYXlzIG90aGVyd2lzZS4KKyAgSEFWRV9GRlNMPTE7ICAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfRkZTTF0pCisgIEhBVkVfRkZTTEw9MTsgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0ZGU0xMXSkKKyAgSEFWRV9NRU1DSFI9MTsgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfTUVNQ0hSXSkKKyAgSEFWRV9ERUNMX01FTU1FTT0xOyAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9NRU1NRU1dKQorICBIQVZFX01FTVBDUFk9MTsgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9NRU1QQ1BZXSkKKyAgSEFWRV9ERUNMX01FTVJDSFI9MTsgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9NRU1SQ0hSXSkKKyAgSEFWRV9SQVdNRU1DSFI9MTsgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfUkFXTUVNQ0hSXSkKKyAgSEFWRV9TVFBDUFk9MTsgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfU1RQQ1BZXSkKKyAgSEFWRV9TVFBOQ1BZPTE7ICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfU1RQTkNQWV0pCisgIEhBVkVfU1RSQ0hSTlVMPTE7ICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1NUUkNIUk5VTF0pCisgIEhBVkVfREVDTF9TVFJEVVA9MTsgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0RFQ0xfU1RSRFVQXSkKKyAgSEFWRV9ERUNMX1NUUk5EVVA9MTsgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9TVFJORFVQXSkKKyAgSEFWRV9ERUNMX1NUUk5MRU49MTsgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9TVFJOTEVOXSkKKyAgSEFWRV9TVFJQQlJLPTE7ICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfU1RSUEJSS10pCisgIEhBVkVfU1RSU0VQPTE7ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1NUUlNFUF0pCisgIEhBVkVfU1RSQ0FTRVNUUj0xOyAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1NUUkNBU0VTVFJdKQorICBIQVZFX0RFQ0xfU1RSVE9LX1I9MTsgICAgICAgICBBQ19TVUJTVChbSEFWRV9ERUNMX1NUUlRPS19SXSkKKyAgSEFWRV9ERUNMX1NUUkVSUk9SX1I9MTsgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9TVFJFUlJPUl9SXSkKKyAgSEFWRV9ERUNMX1NUUlNJR05BTD0xOyAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9TVFJTSUdOQUxdKQorICBIQVZFX1NUUlZFUlNDTVA9MTsgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9TVFJWRVJTQ01QXSkKKyAgUkVQTEFDRV9NRU1DSFI9MDsgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfTUVNQ0hSXSkKKyAgUkVQTEFDRV9NRU1NRU09MDsgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfTUVNTUVNXSkKKyAgUkVQTEFDRV9TVFBOQ1BZPTA7ICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfU1RQTkNQWV0pCisgIFJFUExBQ0VfU1RSRFVQPTA7ICAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX1NUUkRVUF0pCisgIFJFUExBQ0VfU1RSU1RSPTA7ICAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX1NUUlNUUl0pCisgIFJFUExBQ0VfU1RSQ0FTRVNUUj0wOyAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX1NUUkNBU0VTVFJdKQorICBSRVBMQUNFX1NUUkNIUk5VTD0wOyAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9TVFJDSFJOVUxdKQorICBSRVBMQUNFX1NUUkVSUk9SPTA7ICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9TVFJFUlJPUl0pCisgIFJFUExBQ0VfU1RSRVJST1JfUj0wOyAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX1NUUkVSUk9SX1JdKQorICBSRVBMQUNFX1NUUk5DQVQ9MDsgICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9TVFJOQ0FUXSkKKyAgUkVQTEFDRV9TVFJORFVQPTA7ICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfU1RSTkRVUF0pCisgIFJFUExBQ0VfU1RSTkxFTj0wOyAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX1NUUk5MRU5dKQorICBSRVBMQUNFX1NUUlNJR05BTD0wOyAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9TVFJTSUdOQUxdKQorICBSRVBMQUNFX1NUUlRPS19SPTA7ICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9TVFJUT0tfUl0pCisgIFVOREVGSU5FX1NUUlRPS19SPTA7ICAgICAgICAgIEFDX1NVQlNUKFtVTkRFRklORV9TVFJUT0tfUl0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvc3RybmR1cC5tNCBiL200L3N0cm5kdXAubTQKaW5kZXggNDhiMTVjYy4uY2VmNjg4OSAxMDA2NDQKLS0tIGEvbTQvc3RybmR1cC5tNAorKysgYi9tNC9zdHJuZHVwLm00CkBAIC0xLDQ5ICsxLDU1IEBACi0jIHN0cm5kdXAubTQgc2VyaWFsIDYKLWRubCBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMywgMjAwNS0yMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBzdHJuZHVwLm00IHNlcmlhbCAyMQorZG5sIENvcHlyaWdodCAoQykgMjAwMi0yMDAzLCAyMDA1LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAogQUNfREVGVU4oW2dsX0ZVTkNfU1RSTkRVUF0sCiBbCi0gIEFDX0xJQlNPVVJDRVMoW3N0cm5kdXAuYywgc3RybmR1cC5oXSkKLQogICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHN0cmluZy5oPiB0byBkZWNsYXJlIHN0cm5kdXAoKS4KLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisgIEFDX1JFUVVJUkUoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10pCiAKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKSBkbmwgZm9yIGNyb3NzLWNvbXBpbGVzCisgIEFDX1JFUVVJUkUoW2dsX0hFQURFUl9TVFJJTkdfSF9ERUZBVUxUU10pCiAgIEFDX0NIRUNLX0RFQ0xTX09OQ0UoW3N0cm5kdXBdKQorICBBQ19DSEVDS19GVU5DU19PTkNFKFtzdHJuZHVwXSkKKyAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3N0cm5kdXAgPSBubzsgdGhlbgorICAgIEhBVkVfREVDTF9TVFJORFVQPTAKKyAgZmkKIAotICAjIEFJWCA0LjMuMywgQUlYIDUuMSBoYXZlIGEgZnVuY3Rpb24gdGhhdCBmYWlscyB0byBhZGQgdGhlIHRlcm1pbmF0aW5nICdcMCcuCi0gIEFDX0NBQ0hFX0NIRUNLKFtmb3Igd29ya2luZyBzdHJuZHVwXSwgZ2xfY3ZfZnVuY19zdHJuZHVwLAotICAgIFtBQ19SVU5fSUZFTFNFKFsKLSAgICAgICBBQ19MQU5HX1BST0dSQU0oWyNpbmNsdWRlIDxzdHJpbmcuaD5dLCBbWwotI2lmbmRlZiBIQVZFX0RFQ0xfU1RSTkRVUAotICBleHRlcm4gY2hhciAqc3RybmR1cCAoY29uc3QgY2hhciAqLCBzaXplX3QpOworICBpZiB0ZXN0ICRhY19jdl9mdW5jX3N0cm5kdXAgPSB5ZXM7IHRoZW4KKyAgICBIQVZFX1NUUk5EVVA9MQorICAgICMgQUlYIDQuMy4zLCBBSVggNS4xIGhhdmUgYSBmdW5jdGlvbiB0aGF0IGZhaWxzIHRvIGFkZCB0aGUgdGVybWluYXRpbmcgJ1wwJy4KKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIHdvcmtpbmcgc3RybmR1cF0sIFtnbF9jdl9mdW5jX3N0cm5kdXBfd29ya3NdLAorICAgICAgW0FDX1JVTl9JRkVMU0UoWworICAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHN0cmluZy5oPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPl1dLCBbWworI2lmICFIQVZFX0RFQ0xfU1RSTkRVUAorICBleHRlcm4KKyAgI2lmZGVmIF9fY3BsdXNwbHVzCisgICJDIgorICAjZW5kaWYKKyAgY2hhciAqc3RybmR1cCAoY29uc3QgY2hhciAqLCBzaXplX3QpOwogI2VuZGlmCiAgIGNoYXIgKnM7CiAgIHMgPSBzdHJuZHVwICgic29tZSBsb25nZXIgc3RyaW5nIiwgMTUpOwogICBmcmVlIChzKTsKICAgcyA9IHN0cm5kdXAgKCJzaG9ydGVyIHN0cmluZyIsIDEzKTsKICAgcmV0dXJuIHNbMTNdICE9ICdcMCc7XV0pXSwKLSAgICAgICBbZ2xfY3ZfZnVuY19zdHJuZHVwPXllc10sCi0gICAgICAgW2dsX2N2X2Z1bmNfc3RybmR1cD1ub10sCi0gICAgICAgW0FDX0VHUkVQX0NQUChbdG9vIHJpc2t5XSwgWwotI2lmZGVmIF9BSVgKLSAgICAgICAgICAgIHRvbyByaXNreQotI2VuZGlmCi0gICAgICAgICAgXSwKLSAgICAgICAgICBbZ2xfY3ZfZnVuY19zdHJuZHVwPW5vXSwKLSAgICAgICAgICBbZ2xfY3ZfZnVuY19zdHJuZHVwPXllc10pXSldKQotICBpZiB0ZXN0ICRnbF9jdl9mdW5jX3N0cm5kdXAgPSB5ZXM7IHRoZW4KLSAgICBBQ19ERUZJTkUoW0hBVkVfU1RSTkRVUF0sIDEsCi0gICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzdHJuZHVwKCkgZnVuY3Rpb24gYW5kIGl0IHdvcmtzLl0pCisgICAgICAgICBbZ2xfY3ZfZnVuY19zdHJuZHVwX3dvcmtzPXllc10sCisgICAgICAgICBbZ2xfY3ZfZnVuY19zdHJuZHVwX3dvcmtzPW5vXSwKKyAgICAgICAgIFsKK2NoYW5nZXF1b3RlKCwpZG5sCisgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICAgICAgYWl4IHwgYWl4WzMtNl0qKSBnbF9jdl9mdW5jX3N0cm5kdXBfd29ya3M9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICAqKSAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc3RybmR1cF93b3Jrcz0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgZXNhYworY2hhbmdlcXVvdGUoWyxdKWRubAorICAgICAgICAgXSldKQorICAgIGNhc2UgJGdsX2N2X2Z1bmNfc3RybmR1cF93b3JrcyBpbgorICAgICAgKm5vKSBSRVBMQUNFX1NUUk5EVVA9MSA7OworICAgIGVzYWMKICAgZWxzZQotICAgIEFDX0xJQk9CSihbc3RybmR1cF0pCi0gICAgQUNfREVGSU5FKHN0cm5kdXAsIHJwbF9zdHJuZHVwLAotICAgICAgW0RlZmluZSB0byBycGxfc3RybmR1cCBpZiB0aGUgcmVwbGFjZW1lbnQgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQsXSkKLSAgICBnbF9QUkVSRVFfU1RSTkRVUAorICAgIEhBVkVfU1RSTkRVUD0wCiAgIGZpCiBdKQotCi0jIFByZXJlcXVpc2l0ZXMgb2YgbGliL3N0cm5kdXAuYy4KLUFDX0RFRlVOKFtnbF9QUkVSRVFfU1RSTkRVUF0sIFs6XSkKZGlmZiAtLWdpdCBhL200L3N0cm5sZW4ubTQgYi9tNC9zdHJubGVuLm00CmluZGV4IDY3OTY0YzguLmQ5N2UzMDcgMTAwNjQ0Ci0tLSBhL200L3N0cm5sZW4ubTQKKysrIGIvbTQvc3Rybmxlbi5tNApAQCAtMSwyOSArMSwzMCBAQAotIyBzdHJubGVuLm00IHNlcmlhbCA1Ci1kbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIHN0cm5sZW4ubTQgc2VyaWFsIDEzCitkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMsIDIwMDUtMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK2RubCBJbmMuCiBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAogQUNfREVGVU4oW2dsX0ZVTkNfU1RSTkxFTl0sCiBbCi0gIEFDX0xJQlNPVVJDRVMoW3N0cm5sZW4uYywgc3Rybmxlbi5oXSkKKyAgQUNfUkVRVUlSRShbZ2xfSEVBREVSX1NUUklOR19IX0RFRkFVTFRTXSkKIAogICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHN0cmluZy5oPiB0byBkZWNsYXJlIHN0cm5sZW4oKS4KLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisgIEFDX1JFUVVJUkUoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10pCiAKLSAgQUNfRlVOQ19TVFJOTEVOCi0gIGlmIHRlc3QgJGFjX2N2X2Z1bmNfc3Rybmxlbl93b3JraW5nID0gbm87IHRoZW4KLSAgICAjIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYXV0b21ha2UtMS42LjEgZG9lbnMndCB1bmRlcnN0YW5kCi0gICAgIyB0aGF0IHRoZSBhYm92ZSB1c2Ugb2YgQUNfRlVOQ19TVFJOTEVOIG1lYW5zIHdlIG1heSBoYXZlIHRvIHVzZQotICAgICMgbGliL3N0cm5sZW4uYy4KLSAgICAjQUNfTElCT0JKKHN0cm5sZW4pCi0gICAgQUNfREVGSU5FKHN0cm5sZW4sIHJwbF9zdHJubGVuLAotICAgICAgW0RlZmluZSB0byBycGxfc3RybmxlbiBpZiB0aGUgcmVwbGFjZW1lbnQgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQuXSkKLSAgICBnbF9QUkVSRVFfU1RSTkxFTgorICBBQ19DSEVDS19ERUNMU19PTkNFKFtzdHJubGVuXSkKKyAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3N0cm5sZW4gPSBubzsgdGhlbgorICAgIEhBVkVfREVDTF9TVFJOTEVOPTAKKyAgZWxzZQorICAgIG00X3B1c2hkZWYoW0FDX0xJQk9CSl0sIFs6XSkKKyAgICBkbmwgTm90ZTogQUNfRlVOQ19TVFJOTEVOIGRvZXMgQUNfTElCT0JKKFtzdHJubGVuXSkuCisgICAgQUNfRlVOQ19TVFJOTEVOCisgICAgbTRfcG9wZGVmKFtBQ19MSUJPQkpdKQorICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfc3Rybmxlbl93b3JraW5nID0gbm87IHRoZW4KKyAgICAgIFJFUExBQ0VfU1RSTkxFTj0xCisgICAgZmkKICAgZmkKIF0pCiAKICMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvc3Rybmxlbi5jLgotQUNfREVGVU4oW2dsX1BSRVJFUV9TVFJOTEVOXSwgWwotICBBQ19DSEVDS19ERUNMU19PTkNFKHN0cm5sZW4pCi1dKQorQUNfREVGVU4oW2dsX1BSRVJFUV9TVFJOTEVOXSwgWzpdKQpkaWZmIC0tZ2l0IGEvbTQvc3RydG9sLm00IGIvbTQvc3RydG9sLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTMwOGVkLi4wMDAwMDAwCi0tLSBhL200L3N0cnRvbC5tNAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMgc3RydG9sLm00IHNlcmlhbCAzCi1kbmwgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi1kbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLWRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLUFDX0RFRlVOKFtnbF9GVU5DX1NUUlRPTF0sCi1bCi0gIEFDX1JFUExBQ0VfRlVOQ1Moc3RydG9sKQotICBpZiB0ZXN0ICRhY19jdl9mdW5jX3N0cnRvbCA9IG5vOyB0aGVuCi0gICAgZ2xfUFJFUkVRX1NUUlRPTAotICBmaQotXSkKLQotIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9zdHJ0b2wuYy4KLUFDX0RFRlVOKFtnbF9QUkVSRVFfU1RSVE9MXSwgWwotICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pCi0gIEFDX0NIRUNLX0ZVTkNTX09OQ0UoaXNhc2NpaSkKLV0pCmRpZmYgLS1naXQgYS9tNC9zdHJ0b3VsLm00IGIvbTQvc3RydG91bC5tNAppbmRleCA1MTJjZDA5Li45M2UyMjQ4IDEwMDY0NAotLS0gYS9tNC9zdHJ0b3VsLm00CisrKyBiL200L3N0cnRvdWwubTQKQEAgLTEsMTggKzEsMTAgQEAKLSMgc3RydG91bC5tNCBzZXJpYWwgMgotZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgc3RydG91bC5tNCBzZXJpYWwgNQorZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKIGRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKIEFDX0RFRlVOKFtnbF9GVU5DX1NUUlRPVUxdLAogWwotICBBQ19SRVBMQUNFX0ZVTkNTKHN0cnRvdWwpCi0gIGlmIHRlc3QgJGFjX2N2X2Z1bmNfc3RydG91bCA9IG5vOyB0aGVuCi0gICAgZ2xfUFJFUkVRX1NUUlRPVUwKLSAgZmkKLV0pCi0KLSMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvc3RydG91bC5jLgotQUNfREVGVU4oW2dsX1BSRVJFUV9TVFJUT1VMXSwgWwotICBnbF9QUkVSRVFfU1RSVE9MCisgIEFDX0NIRUNLX0ZVTkNTKFtzdHJ0b3VsXSkKIF0pCmRpZmYgLS1naXQgYS9tNC9zdHJ2ZXJzY21wLm00IGIvbTQvc3RydmVyc2NtcC5tNAppbmRleCA0NmUxNzhiLi5kNzQ0NjQ3IDEwMDY0NAotLS0gYS9tNC9zdHJ2ZXJzY21wLm00CisrKyBiL200L3N0cnZlcnNjbXAubTQKQEAgLTEsMTkgKzEsMTggQEAKLSMgc3RydmVyc2NtcC5tNCBzZXJpYWwgMwotZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgc3RydmVyc2NtcC5tNCBzZXJpYWwgOAorZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKIGRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKIEFDX0RFRlVOKFtnbF9GVU5DX1NUUlZFUlNDTVBdLAogWwotICBBQ19MSUJTT1VSQ0VTKFtzdHJ2ZXJzY21wLmMsIHN0cnZlcnNjbXAuaF0pCi0KICAgZG5sIFBlcnN1YWRlIGdsaWJjIDxzdHJpbmcuaD4gdG8gZGVjbGFyZSBzdHJ2ZXJzY21wKCkuCi0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorICBBQ19SRVFVSVJFKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQogCi0gIEFDX1JFUExBQ0VfRlVOQ1Moc3RydmVyc2NtcCkKKyAgQUNfUkVRVUlSRShbZ2xfSEVBREVSX1NUUklOR19IX0RFRkFVTFRTXSkKKyAgQUNfQ0hFQ0tfRlVOQ1MoW3N0cnZlcnNjbXBdKQogICBpZiB0ZXN0ICRhY19jdl9mdW5jX3N0cnZlcnNjbXAgPSBubzsgdGhlbgotICAgIGdsX1BSRVJFUV9TVFJWRVJTQ01QCisgICAgSEFWRV9TVFJWRVJTQ01QPTAKICAgZmkKIF0pCiAKZGlmZiAtLWdpdCBhL200L3N1YnBpcGUubTQgYi9tNC9zdWJwaXBlLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmY5MDljLi4wMDAwMDAwCi0tLSBhL200L3N1YnBpcGUubTQKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0jIC0qLSBBdXRvY29uZiAtKi0KLSMgQ2hlY2tzIHJlcXVpcmVkIHRvIHJ1biBgc3VicGlwZScuCi0jCi0jIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotIyAwMjExMC0xMzAxICBVU0EKLQotIyBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0IDxlZ2dlcnRAdHdpbnN1bi5jb20+LgotCi1BQ19ERUZVTihbQklTT05fUFJFUkVRX1NVQlBJUEVdLAotWwotIEFDX1RZUEVfUElEX1QKLSBBQ19IRUFERVJfU1lTX1dBSVQKLSBBQ19DSEVDS19GVU5DUyhkdXAyIHdhaXRwaWQpCi0gQUNfRlVOQ19GT1JLCi1dKQpkaWZmIC0tZ2l0IGEvbTQvc3lzX3NvY2tldF9oLm00IGIvbTQvc3lzX3NvY2tldF9oLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZmFlNDEKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9zeXNfc29ja2V0X2gubTQKQEAgLTAsMCArMSwxNzYgQEAKKyMgc3lzX3NvY2tldF9oLm00IHNlcmlhbCAyMworZG5sIENvcHlyaWdodCAoQykgMjAwNS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIFNpbW9uIEpvc2Vmc3Nvbi4KKworQUNfREVGVU4oW2dsX0hFQURFUl9TWVNfU09DS0VUXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfU1lTX1NPQ0tFVF9IX0RFRkFVTFRTXSkKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorCisgIGRubCBPbiBPU0YvMSwgdGhlIGZ1bmN0aW9ucyByZWN2KCksIHNlbmQoKSwgcmVjdmZyb20oKSwgc2VuZHRvKCkgaGF2ZQorICBkbmwgb2xkLXN0eWxlIGRlY2xhcmF0aW9ucyAod2l0aCByZXR1cm4gdHlwZSAnaW50JyBpbnN0ZWFkIG9mICdzc2l6ZV90JykKKyAgZG5sIHVubGVzcyBfUE9TSVhfUElJX1NPQ0tFVCBpcyBkZWZpbmVkLgorICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBvc2YqKQorICAgICAgQUNfREVGSU5FKFtfUE9TSVhfUElJX1NPQ0tFVF0sIFsxXSwKKyAgICAgICAgW0RlZmluZSB0byAxIGluIG9yZGVyIHRvIGdldCB0aGUgUE9TSVggY29tcGF0aWJsZSBkZWNsYXJhdGlvbnMKKyAgICAgICAgIG9mIHNvY2tldCBmdW5jdGlvbnMuXSkKKyAgICAgIDs7CisgIGVzYWMKKworICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciA8c3lzL3NvY2tldC5oPiBpcyBzZWxmLWNvbnRhaW5lZF0sCisgICAgW2dsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2VsZmNvbnRhaW5lZF0sCisgICAgWworICAgICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+XV0sIFtbXV0pXSwKKyAgICAgICAgW2dsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2VsZmNvbnRhaW5lZD15ZXNdLAorICAgICAgICBbZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zZWxmY29udGFpbmVkPW5vXSkKKyAgICBdKQorICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfc3lzX3NvY2tldF9oX3NlbGZjb250YWluZWQgPSB5ZXM7IHRoZW4KKyAgICBkbmwgSWYgdGhlIHNodXRkb3duIGZ1bmN0aW9uIGV4aXN0cywgPHN5cy9zb2NrZXQuaD4gc2hvdWxkIGRlZmluZQorICAgIGRubCBTSFVUX1JELCBTSFVUX1dSLCBTSFVUX1JEV1IuCisgICAgQUNfQ0hFQ0tfRlVOQ1MoW3NodXRkb3duXSkKKyAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX3NodXRkb3duID0geWVzOyB0aGVuCisgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciA8c3lzL3NvY2tldC5oPiBkZWZpbmVzIHRoZSBTSFVUXyogbWFjcm9zXSwKKyAgICAgICAgW2dsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2h1dF0sCisgICAgICAgIFsKKyAgICAgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8c3lzL3NvY2tldC5oPl1dLAorICAgICAgICAgICAgICAgW1tpbnQgYVtdID0geyBTSFVUX1JELCBTSFVUX1dSLCBTSFVUX1JEV1IgfTtdXSldLAorICAgICAgICAgICAgW2dsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2h1dD15ZXNdLAorICAgICAgICAgICAgW2dsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2h1dD1ub10pCisgICAgICAgIF0pCisgICAgICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfc3lzX3NvY2tldF9oX3NodXQgPSBubzsgdGhlbgorICAgICAgICBTWVNfU09DS0VUX0g9J3N5cy9zb2NrZXQuaCcKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKKyAgIyBXZSBuZWVkIHRvIGNoZWNrIGZvciB3czJ0Y3BpcC5oIG5vdy4KKyAgZ2xfUFJFUkVRX1NZU19IX1NPQ0tFVAorICBBQ19DSEVDS19UWVBFUyhbc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UsIHNhX2ZhbWlseV90XSwsLFsKKyAgLyogc3lzL3R5cGVzLmggaXMgbm90IG5lZWRlZCBhY2NvcmRpbmcgdG8gUE9TSVgsIGJ1dCB0aGUKKyAgICAgc3lzL3NvY2tldC5oIGluIGkzODYtdW5rbm93bi1mcmVlYnNkNC4xMCBhbmQKKyAgICAgcG93ZXJwYy1hcHBsZS1kYXJ3aW41LjUgcmVxdWlyZWQgaXQuICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1dTMlRDUElQX0gKKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2VuZGlmCitdKQorICBpZiB0ZXN0ICRhY19jdl90eXBlX3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlID0gbm87IHRoZW4KKyAgICBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFPTAKKyAgZmkKKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9zYV9mYW1pbHlfdCA9IG5vOyB0aGVuCisgICAgSEFWRV9TQV9GQU1JTFlfVD0wCisgIGZpCisgIGlmIHRlc3QgJGFjX2N2X3R5cGVfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2UgIT0gbm87IHRoZW4KKyAgICBBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZS5zc19mYW1pbHldLAorICAgICAgW10sCisgICAgICBbSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9TU19GQU1JTFk9MF0sCisgICAgICBbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgICAgICNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorICAgICAgICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgICAgICAgI2VuZGlmCisgICAgICAgI2lmZGVmIEhBVkVfV1MyVENQSVBfSAorICAgICAgICNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorICAgICAgICNlbmRpZgorICAgICAgXSkKKyAgZmkKKyAgaWYgdGVzdCAkSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRSA9IDAgfHwgdGVzdCAkSEFWRV9TQV9GQU1JTFlfVCA9IDAgXAorICAgICB8fCB0ZXN0ICRIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFX1NTX0ZBTUlMWSA9IDA7IHRoZW4KKyAgICBTWVNfU09DS0VUX0g9J3N5cy9zb2NrZXQuaCcKKyAgZmkKKyAgZ2xfUFJFUkVRX1NZU19IX1dJTlNPQ0syCisKKyAgZG5sIENoZWNrIGZvciBkZWNsYXJhdGlvbnMgb2YgYW55dGhpbmcgd2Ugd2FudCB0byBwb2lzb24gaWYgdGhlCisgIGRubCBjb3JyZXNwb25kaW5nIGdudWxpYiBtb2R1bGUgaXMgbm90IGluIHVzZS4KKyAgZ2xfV0FSTl9PTl9VU0VfUFJFUEFSRShbWworLyogU29tZSBzeXN0ZW1zIHJlcXVpcmUgcHJlcmVxdWlzaXRlIGhlYWRlcnMuICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyAgICBdXSwgW3NvY2tldCBjb25uZWN0IGFjY2VwdCBiaW5kIGdldHBlZXJuYW1lIGdldHNvY2tuYW1lIGdldHNvY2tvcHQKKyAgICBsaXN0ZW4gcmVjdiBzZW5kIHJlY3Zmcm9tIHNlbmR0byBzZXRzb2Nrb3B0IHNodXRkb3duIGFjY2VwdDRdKQorXSkKKworQUNfREVGVU4oW2dsX1BSRVJFUV9TWVNfSF9TT0NLRVRdLAorWworICBkbmwgQ2hlY2sgcHJlcmVxdWlzaXRlcyBvZiB0aGUgPHN5cy9zb2NrZXQuaD4gcmVwbGFjZW1lbnQuCisgIEFDX1JFUVVJUkUoW2dsX0NIRUNLX1NPQ0tFVF9IRUFERVJTXSkKKyAgZ2xfQ0hFQ0tfTkVYVF9IRUFERVJTKFtzeXMvc29ja2V0LmhdKQorICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3NvY2tldF9oID0geWVzOyB0aGVuCisgICAgSEFWRV9TWVNfU09DS0VUX0g9MQorICAgIEhBVkVfV1MyVENQSVBfSD0wCisgIGVsc2UKKyAgICBIQVZFX1NZU19TT0NLRVRfSD0wCisgICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3dzMnRjcGlwX2ggPSB5ZXM7IHRoZW4KKyAgICAgIEhBVkVfV1MyVENQSVBfSD0xCisgICAgZWxzZQorICAgICAgSEFWRV9XUzJUQ1BJUF9IPTAKKyAgICBmaQorICBmaQorICBBQ19TVUJTVChbSEFWRV9TWVNfU09DS0VUX0hdKQorICBBQ19TVUJTVChbSEFWRV9XUzJUQ1BJUF9IXSkKK10pCisKKyMgQ29tbW9uIHByZXJlcXVpc2l0ZXMgb2YgdGhlIDxzeXMvc29ja2V0Lmg+IHJlcGxhY2VtZW50IGFuZCBvZiB0aGUKKyMgPHN5cy9zZWxlY3QuaD4gcmVwbGFjZW1lbnQuCisjIFNldHMgYW5kIHN1YnN0aXR1dGVzIEhBVkVfV0lOU09DSzJfSC4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfU1lTX0hfV0lOU09DSzJdLAorWworICBtNF9pZmRlZihbZ2xfVU5JU1REX0hfREVGQVVMVFNdLCBbQUNfUkVRVUlSRShbZ2xfVU5JU1REX0hfREVGQVVMVFNdKV0pCisgIG00X2lmZGVmKFtnbF9TWVNfSU9DVExfSF9ERUZBVUxUU10sIFtBQ19SRVFVSVJFKFtnbF9TWVNfSU9DVExfSF9ERUZBVUxUU10pXSkKKyAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKFtzeXMvc29ja2V0LmhdKQorICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3NvY2tldF9oICE9IHllczsgdGhlbgorICAgIGRubCBXZSBjYW5ub3QgdXNlIEFDX0NIRUNLX0hFQURFUlNfT05DRSBoZXJlLCBiZWNhdXNlIHRoYXQgd291bGQgbWFrZQorICAgIGRubCB0aGUgY2hlY2sgZm9yIHRob3NlIGhlYWRlcnMgdW5jb25kaXRpb25hbDsgeWV0IGN5Z3dpbiByZXBvcnRzCisgICAgZG5sIHRoYXQgdGhlIGhlYWRlcnMgYXJlIHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCAoc2luY2Ugb24KKyAgICBkbmwgY3lnd2luLCBhbGwgc29ja2V0IGluZm9ybWF0aW9uIHNob3VsZCBjb21lIGZyb20gc3lzL3NvY2tldC5oKS4KKyAgICBBQ19DSEVDS19IRUFERVJTKFt3aW5zb2NrMi5oXSkKKyAgZmkKKyAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oIiA9IHllczsgdGhlbgorICAgIEhBVkVfV0lOU09DSzJfSD0xCisgICAgVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IPTEKKyAgICBTWVNfSU9DVExfSF9IQVZFX1dJTlNPQ0syX0g9MQorICBlbHNlCisgICAgSEFWRV9XSU5TT0NLMl9IPTAKKyAgZmkKKyAgQUNfU1VCU1QoW0hBVkVfV0lOU09DSzJfSF0pCitdKQorCitBQ19ERUZVTihbZ2xfU1lTX1NPQ0tFVF9NT0RVTEVfSU5ESUNBVE9SXSwKK1sKKyAgZG5sIFVzZSBBQ19SRVFVSVJFIGhlcmUsIHNvIHRoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGV4cGFuZGVkIG9uY2Ugb25seS4KKyAgQUNfUkVRVUlSRShbZ2xfU1lTX1NPQ0tFVF9IX0RFRkFVTFRTXSkKKyAgZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEUoWyQxXSkKKyAgZG5sIERlZmluZSBpdCBhbHNvIGFzIGEgQyBtYWNybywgZm9yIHRoZSBiZW5lZml0IG9mIHRoZSB1bml0IHRlc3RzLgorICBnbF9NT0RVTEVfSU5ESUNBVE9SX0ZPUl9URVNUUyhbJDFdKQorXSkKKworQUNfREVGVU4oW2dsX1NZU19TT0NLRVRfSF9ERUZBVUxUU10sCitbCisgIEdOVUxJQl9TT0NLRVQ9MDsgICAgICBBQ19TVUJTVChbR05VTElCX1NPQ0tFVF0pCisgIEdOVUxJQl9DT05ORUNUPTA7ICAgICBBQ19TVUJTVChbR05VTElCX0NPTk5FQ1RdKQorICBHTlVMSUJfQUNDRVBUPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9BQ0NFUFRdKQorICBHTlVMSUJfQklORD0wOyAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9CSU5EXSkKKyAgR05VTElCX0dFVFBFRVJOQU1FPTA7IEFDX1NVQlNUKFtHTlVMSUJfR0VUUEVFUk5BTUVdKQorICBHTlVMSUJfR0VUU09DS05BTUU9MDsgQUNfU1VCU1QoW0dOVUxJQl9HRVRTT0NLTkFNRV0pCisgIEdOVUxJQl9HRVRTT0NLT1BUPTA7ICBBQ19TVUJTVChbR05VTElCX0dFVFNPQ0tPUFRdKQorICBHTlVMSUJfTElTVEVOPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9MSVNURU5dKQorICBHTlVMSUJfUkVDVj0wOyAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9SRUNWXSkKKyAgR05VTElCX1NFTkQ9MDsgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfU0VORF0pCisgIEdOVUxJQl9SRUNWRlJPTT0wOyAgICBBQ19TVUJTVChbR05VTElCX1JFQ1ZGUk9NXSkKKyAgR05VTElCX1NFTkRUTz0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfU0VORFRPXSkKKyAgR05VTElCX1NFVFNPQ0tPUFQ9MDsgIEFDX1NVQlNUKFtHTlVMSUJfU0VUU09DS09QVF0pCisgIEdOVUxJQl9TSFVURE9XTj0wOyAgICBBQ19TVUJTVChbR05VTElCX1NIVVRET1dOXSkKKyAgR05VTElCX0FDQ0VQVDQ9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfQUNDRVBUNF0pCisgIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0U9MTsgQUNfU1VCU1QoW0hBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VdKQorICBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFX1NTX0ZBTUlMWT0xOworICAgICAgICAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfU1NfRkFNSUxZXSkKKyAgSEFWRV9TQV9GQU1JTFlfVD0xOyAgIEFDX1NVQlNUKFtIQVZFX1NBX0ZBTUlMWV9UXSkKKyAgSEFWRV9BQ0NFUFQ0PTE7ICAgICAgIEFDX1NVQlNUKFtIQVZFX0FDQ0VQVDRdKQorXSkKZGlmZiAtLWdpdCBhL200L3N5c19zdGF0X2gubTQgYi9tNC9zeXNfc3RhdF9oLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZjMzNTMKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9zeXNfc3RhdF9oLm00CkBAIC0wLDAgKzEsOTYgQEAKKyMgc3lzX3N0YXRfaC5tNCBzZXJpYWwgMjggICAtKi0gQXV0b2NvbmYgLSotCitkbmwgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gRXJpYyBCbGFrZS4KK2RubCBQcm92aWRlIGEgR05VLWxpa2UgPHN5cy9zdGF0Lmg+LgorCitBQ19ERUZVTihbZ2xfSEVBREVSX1NZU19TVEFUX0hdLAorWworICBBQ19SRVFVSVJFKFtnbF9TWVNfU1RBVF9IX0RFRkFVTFRTXSkKKworICBkbmwgQ2hlY2sgZm9yIGJyb2tlbiBzdGF0IG1hY3Jvcy4KKyAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NUQVRdKQorCisgIGdsX0NIRUNLX05FWFRfSEVBREVSUyhbc3lzL3N0YXQuaF0pCisKKyAgZG5sIEVuc3VyZSB0aGUgdHlwZSBtb2RlX3QgZ2V0cyBkZWZpbmVkLgorICBBQ19SRVFVSVJFKFtBQ19UWVBFX01PREVfVF0pCisKKyAgZG5sIFdoZXRoZXIgdG8gb3ZlcnJpZGUgJ3N0cnVjdCBzdGF0Jy4KKyAgbTRfaWZkZWYoW2dsX0xBUkdFRklMRV0sIFsKKyAgICBBQ19SRVFVSVJFKFtnbF9MQVJHRUZJTEVdKQorICBdLCBbCisgICAgV0lORE9XU182NF9CSVRfU1RfU0laRT0wCisgIF0pCisgIEFDX1NVQlNUKFtXSU5ET1dTXzY0X0JJVF9TVF9TSVpFXSkKKyAgaWYgdGVzdCAkV0lORE9XU182NF9CSVRfU1RfU0laRSA9IDE7IHRoZW4KKyAgICBBQ19ERUZJTkUoW19HTF9XSU5ET1dTXzY0X0JJVF9TVF9TSVpFXSwgWzFdLAorICAgICAgW0RlZmluZSB0byAxIGlmIEdudWxpYiBvdmVycmlkZXMgJ3N0cnVjdCBzdGF0JyBvbiBXaW5kb3dzIHNvIHRoYXQKKyAgICAgICBzdHJ1Y3Qgc3RhdC5zdF9zaXplIGJlY29tZXMgNjQtYml0Ll0pCisgIGZpCisKKyAgZG5sIERlZmluZSB0eXBlcyB0aGF0IGFyZSBzdXBwb3NlZCB0byBiZSBkZWZpbmVkIGluIDxzeXMvdHlwZXMuaD4gb3IKKyAgZG5sIDxzeXMvc3RhdC5oPi4KKyAgQUNfQ0hFQ0tfVFlQRShbbmxpbmtfdF0sIFtdLAorICAgIFtBQ19ERUZJTkUoW25saW5rX3RdLCBbaW50XSwKKyAgICAgICBbRGVmaW5lIHRvIHRoZSB0eXBlIG9mIHN0X25saW5rIGluIHN0cnVjdCBzdGF0LCBvciBhIHN1cGVydHlwZS5dKV0sCisgICAgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+XSkKKworICBkbmwgQ2hlY2sgZm9yIGRlY2xhcmF0aW9ucyBvZiBhbnl0aGluZyB3ZSB3YW50IHRvIHBvaXNvbiBpZiB0aGUKKyAgZG5sIGNvcnJlc3BvbmRpbmcgZ251bGliIG1vZHVsZSBpcyBub3QgaW4gdXNlLgorICBnbF9XQVJOX09OX1VTRV9QUkVQQVJFKFtbI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgICAgXV0sIFtmY2htb2RhdCBmc3RhdCBmc3RhdGF0IGZ1dGltZW5zIGxjaG1vZCBsc3RhdCBta2RpcmF0IG1rZmlmbyBta2ZpZm9hdAorICAgIG1rbm9kIG1rbm9kYXQgc3RhdCB1dGltZW5zYXRdKQorXSkgIyBnbF9IRUFERVJfU1lTX1NUQVRfSAorCitBQ19ERUZVTihbZ2xfU1lTX1NUQVRfTU9EVUxFX0lORElDQVRPUl0sCitbCisgIGRubCBVc2UgQUNfUkVRVUlSRSBoZXJlLCBzbyB0aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGFyZSBleHBhbmRlZCBvbmNlIG9ubHkuCisgIEFDX1JFUVVJUkUoW2dsX1NZU19TVEFUX0hfREVGQVVMVFNdKQorICBnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRShbJDFdKQorICBkbmwgRGVmaW5lIGl0IGFsc28gYXMgYSBDIG1hY3JvLCBmb3IgdGhlIGJlbmVmaXQgb2YgdGhlIHVuaXQgdGVzdHMuCisgIGdsX01PRFVMRV9JTkRJQ0FUT1JfRk9SX1RFU1RTKFskMV0pCitdKQorCitBQ19ERUZVTihbZ2xfU1lTX1NUQVRfSF9ERUZBVUxUU10sCitbCisgIEFDX1JFUVVJUkUoW2dsX1VOSVNURF9IX0RFRkFVTFRTXSkgZG5sIGZvciBSRVBMQUNFX0ZDSERJUgorICBHTlVMSUJfRkNITU9EQVQ9MDsgICAgQUNfU1VCU1QoW0dOVUxJQl9GQ0hNT0RBVF0pCisgIEdOVUxJQl9GU1RBVD0wOyAgICAgICBBQ19TVUJTVChbR05VTElCX0ZTVEFUXSkKKyAgR05VTElCX0ZTVEFUQVQ9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfRlNUQVRBVF0pCisgIEdOVUxJQl9GVVRJTUVOUz0wOyAgICBBQ19TVUJTVChbR05VTElCX0ZVVElNRU5TXSkKKyAgR05VTElCX0xDSE1PRD0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfTENITU9EXSkKKyAgR05VTElCX0xTVEFUPTA7ICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfTFNUQVRdKQorICBHTlVMSUJfTUtESVJBVD0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9NS0RJUkFUXSkKKyAgR05VTElCX01LRklGTz0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfTUtGSUZPXSkKKyAgR05VTElCX01LRklGT0FUPTA7ICAgIEFDX1NVQlNUKFtHTlVMSUJfTUtGSUZPQVRdKQorICBHTlVMSUJfTUtOT0Q9MDsgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9NS05PRF0pCisgIEdOVUxJQl9NS05PREFUPTA7ICAgICBBQ19TVUJTVChbR05VTElCX01LTk9EQVRdKQorICBHTlVMSUJfU1RBVD0wOyAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9TVEFUXSkKKyAgR05VTElCX1VUSU1FTlNBVD0wOyAgIEFDX1NVQlNUKFtHTlVMSUJfVVRJTUVOU0FUXSkKKyAgZG5sIEFzc3VtZSBwcm9wZXIgR05VIGJlaGF2aW9yIHVubGVzcyBhbm90aGVyIG1vZHVsZSBzYXlzIG90aGVyd2lzZS4KKyAgSEFWRV9GQ0hNT0RBVD0xOyAgICAgIEFDX1NVQlNUKFtIQVZFX0ZDSE1PREFUXSkKKyAgSEFWRV9GU1RBVEFUPTE7ICAgICAgIEFDX1NVQlNUKFtIQVZFX0ZTVEFUQVRdKQorICBIQVZFX0ZVVElNRU5TPTE7ICAgICAgQUNfU1VCU1QoW0hBVkVfRlVUSU1FTlNdKQorICBIQVZFX0xDSE1PRD0xOyAgICAgICAgQUNfU1VCU1QoW0hBVkVfTENITU9EXSkKKyAgSEFWRV9MU1RBVD0xOyAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0xTVEFUXSkKKyAgSEFWRV9NS0RJUkFUPTE7ICAgICAgIEFDX1NVQlNUKFtIQVZFX01LRElSQVRdKQorICBIQVZFX01LRklGTz0xOyAgICAgICAgQUNfU1VCU1QoW0hBVkVfTUtGSUZPXSkKKyAgSEFWRV9NS0ZJRk9BVD0xOyAgICAgIEFDX1NVQlNUKFtIQVZFX01LRklGT0FUXSkKKyAgSEFWRV9NS05PRD0xOyAgICAgICAgIEFDX1NVQlNUKFtIQVZFX01LTk9EXSkKKyAgSEFWRV9NS05PREFUPTE7ICAgICAgIEFDX1NVQlNUKFtIQVZFX01LTk9EQVRdKQorICBIQVZFX1VUSU1FTlNBVD0xOyAgICAgQUNfU1VCU1QoW0hBVkVfVVRJTUVOU0FUXSkKKyAgUkVQTEFDRV9GU1RBVD0wOyAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0ZTVEFUXSkKKyAgUkVQTEFDRV9GU1RBVEFUPTA7ICAgIEFDX1NVQlNUKFtSRVBMQUNFX0ZTVEFUQVRdKQorICBSRVBMQUNFX0ZVVElNRU5TPTA7ICAgQUNfU1VCU1QoW1JFUExBQ0VfRlVUSU1FTlNdKQorICBSRVBMQUNFX0xTVEFUPTA7ICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfTFNUQVRdKQorICBSRVBMQUNFX01LRElSPTA7ICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfTUtESVJdKQorICBSRVBMQUNFX01LRklGTz0wOyAgICAgQUNfU1VCU1QoW1JFUExBQ0VfTUtGSUZPXSkKKyAgUkVQTEFDRV9NS05PRD0wOyAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX01LTk9EXSkKKyAgUkVQTEFDRV9TVEFUPTA7ICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX1NUQVRdKQorICBSRVBMQUNFX1VUSU1FTlNBVD0wOyAgQUNfU1VCU1QoW1JFUExBQ0VfVVRJTUVOU0FUXSkKK10pCmRpZmYgLS1naXQgYS9tNC9zeXNfdHlwZXNfaC5tNCBiL200L3N5c190eXBlc19oLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMWVlZjIKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9zeXNfdHlwZXNfaC5tNApAQCAtMCwwICsxLDI0IEBACisjIHN5c190eXBlc19oLm00IHNlcmlhbCA0CitkbmwgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX1NZU19UWVBFU19IXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfU1lTX1RZUEVTX0hfREVGQVVMVFNdKQorICBnbF9ORVhUX0hFQURFUlMoW3N5cy90eXBlcy5oXSkKKworICBkbmwgRW5zdXJlIHRoZSB0eXBlIHBpZF90IGdldHMgZGVmaW5lZC4KKyAgQUNfUkVRVUlSRShbQUNfVFlQRV9QSURfVF0pCisKKyAgZG5sIEVuc3VyZSB0aGUgdHlwZSBtb2RlX3QgZ2V0cyBkZWZpbmVkLgorICBBQ19SRVFVSVJFKFtBQ19UWVBFX01PREVfVF0pCisKKyAgZG5sIFdoZXRoZXIgdG8gb3ZlcnJpZGUgdGhlICdvZmZfdCcgdHlwZS4KKyAgQUNfUkVRVUlSRShbZ2xfVFlQRV9PRkZfVF0pCitdKQorCitBQ19ERUZVTihbZ2xfU1lTX1RZUEVTX0hfREVGQVVMVFNdLAorWworXSkKZGlmZiAtLWdpdCBhL200L3N5c193YWl0X2gubTQgYi9tNC9zeXNfd2FpdF9oLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYmJhODYKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9zeXNfd2FpdF9oLm00CkBAIC0wLDAgKzEsMzYgQEAKKyMgc3lzX3dhaXRfaC5tNCBzZXJpYWwgNgorZG5sIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9TWVNfV0FJVF9IXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfU1lTX1dBSVRfSF9ERUZBVUxUU10pCisKKyAgZG5sIDxzeXMvd2FpdC5oPiBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgYmVjYXVzZSBvZiBHTlVMSUJfUE9TSVhDSEVDSy4KKyAgZ2xfQ0hFQ0tfTkVYVF9IRUFERVJTKFtzeXMvd2FpdC5oXSkKKworICBkbmwgRW5zdXJlIHRoZSB0eXBlIHBpZF90IGdldHMgZGVmaW5lZC4KKyAgQUNfUkVRVUlSRShbQUNfVFlQRV9QSURfVF0pCisKKyAgZG5sIENoZWNrIGZvciBkZWNsYXJhdGlvbnMgb2YgYW55dGhpbmcgd2Ugd2FudCB0byBwb2lzb24gaWYgdGhlCisgIGRubCBjb3JyZXNwb25kaW5nIGdudWxpYiBtb2R1bGUgaXMgbm90IGluIHVzZS4KKyAgZ2xfV0FSTl9PTl9VU0VfUFJFUEFSRShbWyNpbmNsdWRlIDxzeXMvd2FpdC5oPl1dLAorICAgIFt3YWl0cGlkXSkKK10pCisKK0FDX0RFRlVOKFtnbF9TWVNfV0FJVF9NT0RVTEVfSU5ESUNBVE9SXSwKK1sKKyAgZG5sIFVzZSBBQ19SRVFVSVJFIGhlcmUsIHNvIHRoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGV4cGFuZGVkIG9uY2Ugb25seS4KKyAgQUNfUkVRVUlSRShbZ2xfU1lTX1dBSVRfSF9ERUZBVUxUU10pCisgIGdsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFKFskMV0pCisgIGRubCBEZWZpbmUgaXQgYWxzbyBhcyBhIEMgbWFjcm8sIGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgdW5pdCB0ZXN0cy4KKyAgZ2xfTU9EVUxFX0lORElDQVRPUl9GT1JfVEVTVFMoWyQxXSkKK10pCisKK0FDX0RFRlVOKFtnbF9TWVNfV0FJVF9IX0RFRkFVTFRTXSwKK1sKKyAgR05VTElCX1dBSVRQSUQ9MDsgQUNfU1VCU1QoW0dOVUxJQl9XQUlUUElEXSkKKyAgZG5sIEFzc3VtZSBwcm9wZXIgR05VIGJlaGF2aW9yIHVubGVzcyBhbm90aGVyIG1vZHVsZSBzYXlzIG90aGVyd2lzZS4KK10pCmRpZmYgLS1naXQgYS9tNC90aHJlYWRsaWIubTQgYi9tNC90aHJlYWRsaWIubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I5MzM5MQotLS0gL2Rldi9udWxsCisrKyBiL200L3RocmVhZGxpYi5tNApAQCAtMCwwICsxLDM3MSBAQAorIyB0aHJlYWRsaWIubTQgc2VyaWFsIDEwIChnZXR0ZXh0LTAuMTguMikKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgRnJvbSBCcnVubyBIYWlibGUuCisKK2RubCBnbF9USFJFQURMSUIKK2RubCAtLS0tLS0tLS0tLS0KK2RubCBUZXN0cyBmb3IgYSBtdWx0aXRocmVhZGluZyBsaWJyYXJ5IHRvIGJlIHVzZWQuCitkbmwgSWYgdGhlIGNvbmZpZ3VyZS5hYyBjb250YWlucyBhIGRlZmluaXRpb24gb2YgdGhlIGdsX1RIUkVBRExJQl9ERUZBVUxUX05PCitkbmwgKGl0IG11c3QgYmUgcGxhY2VkIGJlZm9yZSB0aGUgaW52b2NhdGlvbiBvZiBnbF9USFJFQURMSUJfRUFSTFkhKSwgdGhlbiB0aGUKK2RubCBkZWZhdWx0IGlzICdubycsIG90aGVyd2lzZSBpdCBpcyBzeXN0ZW0gZGVwZW5kZW50LiBJbiBib3RoIGNhc2VzLCB0aGUgdXNlcgorZG5sIGNhbiBjaGFuZ2UgdGhlIGNob2ljZSB0aHJvdWdoIHRoZSBvcHRpb25zIC0tZW5hYmxlLXRocmVhZHM9Y2hvaWNlIG9yCitkbmwgLS1kaXNhYmxlLXRocmVhZHMuCitkbmwgRGVmaW5lcyBhdCBtb3N0IG9uZSBvZiB0aGUgbWFjcm9zIFVTRV9QT1NJWF9USFJFQURTLCBVU0VfU09MQVJJU19USFJFQURTLAorZG5sIFVTRV9QVEhfVEhSRUFEUywgVVNFX1dJTkRPV1NfVEhSRUFEUworZG5sIFNldHMgdGhlIHZhcmlhYmxlcyBMSUJUSFJFQUQgYW5kIExUTElCVEhSRUFEIHRvIHRoZSBsaW5rZXIgb3B0aW9ucyBmb3IgdXNlCitkbmwgaW4gYSBNYWtlZmlsZSAoTElCVEhSRUFEIGZvciB1c2Ugd2l0aG91dCBsaWJ0b29sLCBMVExJQlRIUkVBRCBmb3IgdXNlIHdpdGgKK2RubCBsaWJ0b29sKS4KK2RubCBTZXRzIHRoZSB2YXJpYWJsZXMgTElCTVVMVElUSFJFQUQgYW5kIExUTElCTVVMVElUSFJFQUQgc2ltaWxhcmx5LCBmb3IKK2RubCBwcm9ncmFtcyB0aGF0IHJlYWxseSBuZWVkIG11bHRpdGhyZWFkIGZ1bmN0aW9uYWxpdHkuIFRoZSBkaWZmZXJlbmNlCitkbmwgYmV0d2VlbiBMSUJUSFJFQUQgYW5kIExJQk1VTFRJVEhSRUFEIGlzIHRoYXQgb24gcGxhdGZvcm1zIHN1cHBvcnRpbmcgd2VhaworZG5sIHN5bWJvbHMsIHR5cGljYWxseSBMSUJUSFJFQUQ9IiIgd2hlcmVhcyBMSUJNVUxUSVRIUkVBRD0iLWxwdGhyZWFkIi4KK2RubCBBZGRzIHRvIENQUEZMQUdTIHRoZSBmbGFnIC1EX1JFRU5UUkFOVCBvciAtRF9USFJFQURfU0FGRSBpZiBuZWVkZWQgZm9yCitkbmwgbXVsdGl0aHJlYWQtc2FmZSBwcm9ncmFtcy4KKworQUNfREVGVU4oW2dsX1RIUkVBRExJQl9FQVJMWV0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1RIUkVBRExJQl9FQVJMWV9CT0RZXSkKK10pCisKK2RubCBUaGUgZ3V0cyBvZiBnbF9USFJFQURMSUJfRUFSTFkuIE5lZWRzIHRvIGJlIGV4cGFuZGVkIG9ubHkgb25jZS4KKworQUNfREVGVU4oW2dsX1RIUkVBRExJQl9FQVJMWV9CT0RZXSwKK1sKKyAgZG5sIE9yZGVyaW5nIGNvbnN0cmFpbnRzOiBUaGlzIG1hY3JvIG1vZGlmaWVzIENQUEZMQUdTIGluIGEgd2F5IHRoYXQKKyAgZG5sIGluZmx1ZW5jZXMgdGhlIHJlc3VsdCBvZiB0aGUgYXV0b2NvbmYgdGVzdHMgdGhhdCB0ZXN0IGZvciAqX3VubG9ja2VkCisgIGRubCBkZWNsYXJhdGlvbnMsIG9uIEFJWCA1IGF0IGxlYXN0LiBUaGVyZWZvcmUgaXQgbXVzdCBjb21lIGVhcmx5LgorICBBQ19CRUZPUkUoWyQwXSwgW2dsX0ZVTkNfR0xJQkNfVU5MT0NLRURfSU9dKWRubAorICBBQ19CRUZPUkUoWyQwXSwgW2dsX0FSR1BdKWRubAorCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKyAgZG5sIF9HTlVfU09VUkNFIGlzIG5lZWRlZCBmb3IgcHRocmVhZF9yd2xvY2tfdCBvbiBnbGliYyBzeXN0ZW1zLgorICBkbmwgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TIHdhcyBpbnRyb2R1Y2VkIGluIGF1dG9jb25mIDIuNjAgYW5kIG9ic29sZXRlcworICBkbmwgQUNfR05VX1NPVVJDRS4KKyAgbTRfaWZkZWYoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCisgICAgW0FDX1JFUVVJUkUoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10pXSwKKyAgICBbQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pXSkKKyAgZG5sIENoZWNrIGZvciBtdWx0aXRocmVhZGluZy4KKyAgbTRfaWZkZWYoW2dsX1RIUkVBRExJQl9ERUZBVUxUX05PXSwKKyAgICBbbTRfZGl2ZXJ0X3RleHQoW0RFRkFVTFRTXSwgW2dsX3VzZV90aHJlYWRzX2RlZmF1bHQ9bm9dKV0sCisgICAgW200X2RpdmVydF90ZXh0KFtERUZBVUxUU10sIFtnbF91c2VfdGhyZWFkc19kZWZhdWx0PV0pXSkKKyAgQUNfQVJHX0VOQUJMRShbdGhyZWFkc10sCitBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdGhyZWFkcz17cG9zaXh8c29sYXJpc3xwdGh8d2luZG93c31dLCBbc3BlY2lmeSBtdWx0aXRocmVhZGluZyBBUEldKW00X2lmZGVmKFtnbF9USFJFQURMSUJfREVGQVVMVF9OT10sIFtdLCBbCitBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXRocmVhZHNdLCBbYnVpbGQgd2l0aG91dCBtdWx0aXRocmVhZCBzYWZldHldKV0pLAorICAgIFtnbF91c2VfdGhyZWFkcz0kZW5hYmxldmFsXSwKKyAgICBbaWYgdGVzdCAtbiAiJGdsX3VzZV90aHJlYWRzX2RlZmF1bHQiOyB0aGVuCisgICAgICAgZ2xfdXNlX3RocmVhZHM9IiRnbF91c2VfdGhyZWFkc19kZWZhdWx0IgorICAgICBlbHNlCitjaGFuZ2VxdW90ZSgsKWRubAorICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgZG5sIERpc2FibGUgbXVsdGl0aHJlYWRpbmcgYnkgZGVmYXVsdCBvbiBPU0YvMSwgYmVjYXVzZSBpdCBpbnRlcmZlcmVzCisgICAgICAgICBkbmwgd2l0aCBmb3JrKCkvZXhlYygpOiBXaGVuIG1zZ2V4ZWMgaXMgbGlua2VkIHdpdGggLWxwdGhyZWFkLCBpdHMKKyAgICAgICAgIGRubCBjaGlsZCBwcm9jZXNzIGdldHMgYW4gZW5kbGVzcyBzZWdtZW50YXRpb24gZmF1bHQgaW5zaWRlIGV4ZWN2cCgpLgorICAgICAgICAgZG5sIERpc2FibGUgbXVsdGl0aHJlYWRpbmcgYnkgZGVmYXVsdCBvbiBDeWd3aW4gMS41LngsIGJlY2F1c2UgaXQgaGFzCisgICAgICAgICBkbmwgYnVncyB0aGF0IGxlYWQgdG8gZW5kbGVzcyBsb29wcyBvciBjcmFzaGVzLiBTZWUKKyAgICAgICAgIGRubCA8aHR0cDovL2N5Z3dpbi5jb20vbWwvY3lnd2luLzIwMDktMDgvbXNnMDAyODMuaHRtbD4uCisgICAgICAgICBvc2YqKSBnbF91c2VfdGhyZWFkcz1ubyA7OworICAgICAgICAgY3lnd2luKikKKyAgICAgICAgICAgICAgIGNhc2UgYHVuYW1lIC1yYCBpbgorICAgICAgICAgICAgICAgICAxLlswLTVdLiopIGdsX3VzZV90aHJlYWRzPW5vIDs7CisgICAgICAgICAgICAgICAgICopICAgICAgICAgZ2xfdXNlX3RocmVhZHM9eWVzIDs7CisgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICA7OworICAgICAgICAgKikgICAgZ2xfdXNlX3RocmVhZHM9eWVzIDs7CisgICAgICAgZXNhYworY2hhbmdlcXVvdGUoWyxdKWRubAorICAgICBmaQorICAgIF0pCisgIGlmIHRlc3QgIiRnbF91c2VfdGhyZWFkcyIgPSB5ZXMgfHwgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiA9IHBvc2l4OyB0aGVuCisgICAgIyBGb3IgdXNpbmcgPHB0aHJlYWQuaD46CisgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICBvc2YqKQorICAgICAgICAjIE9uIE9TRi8xLCB0aGUgY29tcGlsZXIgbmVlZHMgdGhlIGZsYWcgLURfUkVFTlRSQU5UIHNvIHRoYXQgaXQKKyAgICAgICAgIyBncm9rcyA8cHRocmVhZC5oPi4gY2MgYWxzbyB1bmRlcnN0YW5kcyB0aGUgZmxhZyAtcHRocmVhZCwgYnV0CisgICAgICAgICMgd2UgZG9uJ3QgdXNlIGl0IGJlY2F1c2UgMS4gZ2NjLTIuOTUgZG9lc24ndCB1bmRlcnN0YW5kIC1wdGhyZWFkLAorICAgICAgICAjIDIuIHB1dHRpbmcgYSBmbGFnIGludG8gQ1BQRkxBR1MgdGhhdCBoYXMgYW4gZWZmZWN0IG9uIHRoZSBsaW5rZXIKKyAgICAgICAgIyBjYXVzZXMgdGhlIEFDX0xJTktfSUZFTFNFIHRlc3QgYmVsb3cgdG8gc3VjY2VlZCB1bmV4cGVjdGVkbHksCisgICAgICAgICMgbGVhZGluZyB0byB3cm9uZyB2YWx1ZXMgb2YgTElCVEhSRUFEIGFuZCBMVExJQlRIUkVBRC4KKyAgICAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9SRUVOVFJBTlQiCisgICAgICAgIDs7CisgICAgZXNhYworICAgICMgU29tZSBzeXN0ZW1zIG9wdGltaXplIGZvciBzaW5nbGUtdGhyZWFkZWQgcHJvZ3JhbXMgYnkgZGVmYXVsdCwgYW5kCisgICAgIyBuZWVkIHNwZWNpYWwgZmxhZ3MgdG8gZGlzYWJsZSB0aGVzZSBvcHRpbWl6YXRpb25zLiBGb3IgZXhhbXBsZSwgdGhlCisgICAgIyBkZWZpbml0aW9uIG9mICdlcnJubycgaW4gPGVycm5vLmg+LgorICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgYWl4KiB8IGZyZWVic2QqKSBDUFBGTEFHUz0iJENQUEZMQUdTIC1EX1RIUkVBRF9TQUZFIiA7OworICAgICAgc29sYXJpcyopIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfUkVFTlRSQU5UIiA7OworICAgIGVzYWMKKyAgZmkKK10pCisKK2RubCBUaGUgZ3V0cyBvZiBnbF9USFJFQURMSUIuIE5lZWRzIHRvIGJlIGV4cGFuZGVkIG9ubHkgb25jZS4KKworQUNfREVGVU4oW2dsX1RIUkVBRExJQl9CT0RZXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfVEhSRUFETElCX0VBUkxZX0JPRFldKQorICBnbF90aHJlYWRzX2FwaT1ub25lCisgIExJQlRIUkVBRD0KKyAgTFRMSUJUSFJFQUQ9CisgIExJQk1VTFRJVEhSRUFEPQorICBMVExJQk1VTFRJVEhSRUFEPQorICBpZiB0ZXN0ICIkZ2xfdXNlX3RocmVhZHMiICE9IG5vOyB0aGVuCisgICAgZG5sIENoZWNrIHdoZXRoZXIgdGhlIGNvbXBpbGVyIGFuZCBsaW5rZXIgc3VwcG9ydCB3ZWFrIGRlY2xhcmF0aW9ucy4KKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpbXBvcnRlZCBzeW1ib2xzIGNhbiBiZSBkZWNsYXJlZCB3ZWFrXSwKKyAgICAgIFtnbF9jdl9oYXZlX3dlYWtdLAorICAgICAgW2dsX2N2X2hhdmVfd2Vhaz1ubworICAgICAgIGRubCBGaXJzdCwgdGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBhY2NlcHRzIGl0IHN5bnRhY3RpY2FsbHkuCisgICAgICAgQUNfTElOS19JRkVMU0UoCisgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgICAgW1tleHRlcm4gdm9pZCB4eXp6eSAoKTsKKyNwcmFnbWEgd2VhayB4eXp6eV1dLAorICAgICAgICAgICAgW1t4eXp6eSgpO11dKV0sCisgICAgICAgICBbZ2xfY3ZfaGF2ZV93ZWFrPW1heWJlXSkKKyAgICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX3dlYWsgPSBtYXliZTsgdGhlbgorICAgICAgICAgZG5sIFNlY29uZCwgdGVzdCB3aGV0aGVyIGl0IGFjdHVhbGx5IHdvcmtzLiBPbiBDeWd3aW4gMS43LjIsIHdpdGgKKyAgICAgICAgIGRubCBnY2MgNC4zLCBzeW1ib2xzIGRlY2xhcmVkIHdlYWsgYWx3YXlzIGV2YWx1YXRlIHRvIHRoZSBhZGRyZXNzIDAuCisgICAgICAgICBBQ19SVU5fSUZFTFNFKAorICAgICAgICAgICBbQUNfTEFOR19TT1VSQ0UoW1sKKyNpbmNsdWRlIDxzdGRpby5oPgorI3ByYWdtYSB3ZWFrIGZwdXRzCitpbnQgbWFpbiAoKQoreworICByZXR1cm4gKGZwdXRzID09IE5VTEwpOworfV1dKV0sCisgICAgICAgICAgIFtnbF9jdl9oYXZlX3dlYWs9eWVzXSwKKyAgICAgICAgICAgW2dsX2N2X2hhdmVfd2Vhaz1ub10sCisgICAgICAgICAgIFtkbmwgV2hlbiBjcm9zcy1jb21waWxpbmcsIGFzc3VtZSB0aGF0IG9ubHkgRUxGIHBsYXRmb3JtcyBzdXBwb3J0CisgICAgICAgICAgICBkbmwgd2VhayBzeW1ib2xzLgorICAgICAgICAgICAgQUNfRUdSRVBfQ1BQKFtFeHRlbnNpYmxlIExpbmtpbmcgRm9ybWF0XSwKKyAgICAgICAgICAgICAgWyNpZmRlZiBfX0VMRl9fCisgICAgICAgICAgICAgICBFeHRlbnNpYmxlIExpbmtpbmcgRm9ybWF0CisgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgW2dsX2N2X2hhdmVfd2Vhaz0iZ3Vlc3NpbmcgeWVzIl0sCisgICAgICAgICAgICAgIFtnbF9jdl9oYXZlX3dlYWs9Imd1ZXNzaW5nIG5vIl0pCisgICAgICAgICAgIF0pCisgICAgICAgZmkKKyAgICAgIF0pCisgICAgaWYgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiA9IHllcyB8fCB0ZXN0ICIkZ2xfdXNlX3RocmVhZHMiID0gcG9zaXg7IHRoZW4KKyAgICAgICMgT24gT1NGLzEsIHRoZSBjb21waWxlciBuZWVkcyB0aGUgZmxhZyAtcHRocmVhZCBvciAtRF9SRUVOVFJBTlQgc28gdGhhdAorICAgICAgIyBpdCBncm9rcyA8cHRocmVhZC5oPi4gSXQncyBhZGRlZCBhYm92ZSwgaW4gZ2xfVEhSRUFETElCX0VBUkxZX0JPRFkuCisgICAgICBBQ19DSEVDS19IRUFERVIoW3B0aHJlYWQuaF0sCisgICAgICAgIFtnbF9oYXZlX3B0aHJlYWRfaD15ZXNdLCBbZ2xfaGF2ZV9wdGhyZWFkX2g9bm9dKQorICAgICAgaWYgdGVzdCAiJGdsX2hhdmVfcHRocmVhZF9oIiA9IHllczsgdGhlbgorICAgICAgICAjIE90aGVyIHBvc3NpYmxlIHRlc3RzOgorICAgICAgICAjICAgLWxwdGhyZWFkcyAoRlNVIHRocmVhZHMsIFBDdGhyZWFkcykKKyAgICAgICAgIyAgIC1sZ3RocmVhZHMKKyAgICAgICAgZ2xfaGF2ZV9wdGhyZWFkPQorICAgICAgICAjIFRlc3Qgd2hldGhlciBib3RoIHB0aHJlYWRfbXV0ZXhfbG9jayBhbmQgcHRocmVhZF9tdXRleGF0dHJfaW5pdCBleGlzdAorICAgICAgICAjIGluIGxpYmMuIElSSVggNi41IGhhcyB0aGUgZmlyc3Qgb25lIGluIGJvdGggbGliYyBhbmQgbGlicHRocmVhZCwgYnV0CisgICAgICAgICMgdGhlIHNlY29uZCBvbmUgb25seSBpbiBsaWJwdGhyZWFkLCBhbmQgbG9jay5jIG5lZWRzIGl0LgorICAgICAgICBBQ19MSU5LX0lGRUxTRSgKKyAgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgICAgIFtbI2luY2x1ZGUgPHB0aHJlYWQuaD5dXSwKKyAgICAgICAgICAgICBbW3B0aHJlYWRfbXV0ZXhfbG9jaygocHRocmVhZF9tdXRleF90KikwKTsKKyAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoKHB0aHJlYWRfbXV0ZXhhdHRyX3QqKTApO11dKV0sCisgICAgICAgICAgW2dsX2hhdmVfcHRocmVhZD15ZXNdKQorICAgICAgICAjIFRlc3QgZm9yIGxpYnB0aHJlYWQgYnkgbG9va2luZyBmb3IgcHRocmVhZF9raWxsLiAoTm90IHB0aHJlYWRfc2VsZiwKKyAgICAgICAgIyBzaW5jZSBpdCBpcyBkZWZpbmVkIGFzIGEgbWFjcm8gb24gT1NGLzEuKQorICAgICAgICBpZiB0ZXN0IC1uICIkZ2xfaGF2ZV9wdGhyZWFkIjsgdGhlbgorICAgICAgICAgICMgVGhlIHByb2dyYW0gbGlua3MgZmluZSB3aXRob3V0IGxpYnB0aHJlYWQuIEJ1dCBpdCBtYXkgYWN0dWFsbHkKKyAgICAgICAgICAjIG5lZWQgdG8gbGluayB3aXRoIGxpYnB0aHJlYWQgaW4gb3JkZXIgdG8gY3JlYXRlIG11bHRpcGxlIHRocmVhZHMuCisgICAgICAgICAgQUNfQ0hFQ0tfTElCKFtwdGhyZWFkXSwgW3B0aHJlYWRfa2lsbF0sCisgICAgICAgICAgICBbTElCTVVMVElUSFJFQUQ9LWxwdGhyZWFkIExUTElCTVVMVElUSFJFQUQ9LWxwdGhyZWFkCisgICAgICAgICAgICAgIyBPbiBTb2xhcmlzIGFuZCBIUC1VWCwgbW9zdCBwdGhyZWFkIGZ1bmN0aW9ucyBleGlzdCBhbHNvIGluIGxpYmMuCisgICAgICAgICAgICAgIyBUaGVyZWZvcmUgcHRocmVhZF9pbl91c2UoKSBuZWVkcyB0byBhY3R1YWxseSB0cnkgdG8gY3JlYXRlIGEKKyAgICAgICAgICAgICAjIHRocmVhZDogcHRocmVhZF9jcmVhdGUgZnJvbSBsaWJjIHdpbGwgZmFpbCwgd2hlcmVhcworICAgICAgICAgICAgICMgcHRocmVhZF9jcmVhdGUgd2lsbCBhY3R1YWxseSBjcmVhdGUgYSB0aHJlYWQuCisgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICBzb2xhcmlzKiB8IGhwdXgqKQorICAgICAgICAgICAgICAgICBBQ19ERUZJTkUoW1BUSFJFQURfSU5fVVNFX0RFVEVDVElPTl9IQVJEXSwgWzFdLAorICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgaWYgdGhlIHB0aHJlYWRfaW5fdXNlKCkgZGV0ZWN0aW9uIGlzIGhhcmQuXSkKKyAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBdKQorICAgICAgICBlbHNlCisgICAgICAgICAgIyBTb21lIGxpYnJhcnkgaXMgbmVlZGVkLiBUcnkgbGlicHRocmVhZCBhbmQgbGliY19yLgorICAgICAgICAgIEFDX0NIRUNLX0xJQihbcHRocmVhZF0sIFtwdGhyZWFkX2tpbGxdLAorICAgICAgICAgICAgW2dsX2hhdmVfcHRocmVhZD15ZXMKKyAgICAgICAgICAgICBMSUJUSFJFQUQ9LWxwdGhyZWFkIExUTElCVEhSRUFEPS1scHRocmVhZAorICAgICAgICAgICAgIExJQk1VTFRJVEhSRUFEPS1scHRocmVhZCBMVExJQk1VTFRJVEhSRUFEPS1scHRocmVhZF0pCisgICAgICAgICAgaWYgdGVzdCAteiAiJGdsX2hhdmVfcHRocmVhZCI7IHRoZW4KKyAgICAgICAgICAgICMgRm9yIEZyZWVCU0QgNC4KKyAgICAgICAgICAgIEFDX0NIRUNLX0xJQihbY19yXSwgW3B0aHJlYWRfa2lsbF0sCisgICAgICAgICAgICAgIFtnbF9oYXZlX3B0aHJlYWQ9eWVzCisgICAgICAgICAgICAgICBMSUJUSFJFQUQ9LWxjX3IgTFRMSUJUSFJFQUQ9LWxjX3IKKyAgICAgICAgICAgICAgIExJQk1VTFRJVEhSRUFEPS1sY19yIExUTElCTVVMVElUSFJFQUQ9LWxjX3JdKQorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICAgIGlmIHRlc3QgLW4gIiRnbF9oYXZlX3B0aHJlYWQiOyB0aGVuCisgICAgICAgICAgZ2xfdGhyZWFkc19hcGk9cG9zaXgKKyAgICAgICAgICBBQ19ERUZJTkUoW1VTRV9QT1NJWF9USFJFQURTXSwgWzFdLAorICAgICAgICAgICAgW0RlZmluZSBpZiB0aGUgUE9TSVggbXVsdGl0aHJlYWRpbmcgbGlicmFyeSBjYW4gYmUgdXNlZC5dKQorICAgICAgICAgIGlmIHRlc3QgLW4gIiRMSUJNVUxUSVRIUkVBRCIgfHwgdGVzdCAtbiAiJExUTElCTVVMVElUSFJFQUQiOyB0aGVuCisgICAgICAgICAgICBpZiBjYXNlICIkZ2xfY3ZfaGF2ZV93ZWFrIiBpbiAqeWVzKSB0cnVlOzsgKikgZmFsc2U7OyBlc2FjOyB0aGVuCisgICAgICAgICAgICAgIEFDX0RFRklORShbVVNFX1BPU0lYX1RIUkVBRFNfV0VBS10sIFsxXSwKKyAgICAgICAgICAgICAgICBbRGVmaW5lIGlmIHJlZmVyZW5jZXMgdG8gdGhlIFBPU0lYIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgc2hvdWxkIGJlIG1hZGUgd2Vhay5dKQorICAgICAgICAgICAgICBMSUJUSFJFQUQ9CisgICAgICAgICAgICAgIExUTElCVEhSRUFEPQorICAgICAgICAgICAgZmkKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorICAgIGlmIHRlc3QgLXogIiRnbF9oYXZlX3B0aHJlYWQiOyB0aGVuCisgICAgICBpZiB0ZXN0ICIkZ2xfdXNlX3RocmVhZHMiID0geWVzIHx8IHRlc3QgIiRnbF91c2VfdGhyZWFkcyIgPSBzb2xhcmlzOyB0aGVuCisgICAgICAgIGdsX2hhdmVfc29sYXJpc3RocmVhZD0KKyAgICAgICAgZ2xfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgICAgTElCUz0iJExJQlMgLWx0aHJlYWQiCisgICAgICAgIEFDX0xJTktfSUZFTFNFKAorICAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgICAgW1sKKyNpbmNsdWRlIDx0aHJlYWQuaD4KKyNpbmNsdWRlIDxzeW5jaC5oPgorICAgICAgICAgICAgIF1dLAorICAgICAgICAgICAgIFtbdGhyX3NlbGYoKTtdXSldLAorICAgICAgICAgIFtnbF9oYXZlX3NvbGFyaXN0aHJlYWQ9eWVzXSkKKyAgICAgICAgTElCUz0iJGdsX3NhdmVfTElCUyIKKyAgICAgICAgaWYgdGVzdCAtbiAiJGdsX2hhdmVfc29sYXJpc3RocmVhZCI7IHRoZW4KKyAgICAgICAgICBnbF90aHJlYWRzX2FwaT1zb2xhcmlzCisgICAgICAgICAgTElCVEhSRUFEPS1sdGhyZWFkCisgICAgICAgICAgTFRMSUJUSFJFQUQ9LWx0aHJlYWQKKyAgICAgICAgICBMSUJNVUxUSVRIUkVBRD0iJExJQlRIUkVBRCIKKyAgICAgICAgICBMVExJQk1VTFRJVEhSRUFEPSIkTFRMSUJUSFJFQUQiCisgICAgICAgICAgQUNfREVGSU5FKFtVU0VfU09MQVJJU19USFJFQURTXSwgWzFdLAorICAgICAgICAgICAgW0RlZmluZSBpZiB0aGUgb2xkIFNvbGFyaXMgbXVsdGl0aHJlYWRpbmcgbGlicmFyeSBjYW4gYmUgdXNlZC5dKQorICAgICAgICAgIGlmIGNhc2UgIiRnbF9jdl9oYXZlX3dlYWsiIGluICp5ZXMpIHRydWU7OyAqKSBmYWxzZTs7IGVzYWM7IHRoZW4KKyAgICAgICAgICAgIEFDX0RFRklORShbVVNFX1NPTEFSSVNfVEhSRUFEU19XRUFLXSwgWzFdLAorICAgICAgICAgICAgICBbRGVmaW5lIGlmIHJlZmVyZW5jZXMgdG8gdGhlIG9sZCBTb2xhcmlzIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgc2hvdWxkIGJlIG1hZGUgd2Vhay5dKQorICAgICAgICAgICAgTElCVEhSRUFEPQorICAgICAgICAgICAgTFRMSUJUSFJFQUQ9CisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkZ2xfdXNlX3RocmVhZHMiID0gcHRoOyB0aGVuCisgICAgICBnbF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgICBBQ19MSUJfTElOS0ZMQUdTKFtwdGhdKQorICAgICAgZ2xfaGF2ZV9wdGg9CisgICAgICBnbF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICAgTElCUz0iJExJQlMgJExJQlBUSCIKKyAgICAgIEFDX0xJTktfSUZFTFNFKAorICAgICAgICBbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHB0aC5oPl1dLCBbW3B0aF9zZWxmKCk7XV0pXSwKKyAgICAgICAgW2dsX2hhdmVfcHRoPXllc10pCisgICAgICBMSUJTPSIkZ2xfc2F2ZV9MSUJTIgorICAgICAgaWYgdGVzdCAtbiAiJGdsX2hhdmVfcHRoIjsgdGhlbgorICAgICAgICBnbF90aHJlYWRzX2FwaT1wdGgKKyAgICAgICAgTElCVEhSRUFEPSIkTElCUFRIIgorICAgICAgICBMVExJQlRIUkVBRD0iJExUTElCUFRIIgorICAgICAgICBMSUJNVUxUSVRIUkVBRD0iJExJQlRIUkVBRCIKKyAgICAgICAgTFRMSUJNVUxUSVRIUkVBRD0iJExUTElCVEhSRUFEIgorICAgICAgICBBQ19ERUZJTkUoW1VTRV9QVEhfVEhSRUFEU10sIFsxXSwKKyAgICAgICAgICBbRGVmaW5lIGlmIHRoZSBHTlUgUHRoIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgY2FuIGJlIHVzZWQuXSkKKyAgICAgICAgaWYgdGVzdCAtbiAiJExJQk1VTFRJVEhSRUFEIiB8fCB0ZXN0IC1uICIkTFRMSUJNVUxUSVRIUkVBRCI7IHRoZW4KKyAgICAgICAgICBpZiBjYXNlICIkZ2xfY3ZfaGF2ZV93ZWFrIiBpbiAqeWVzKSB0cnVlOzsgKikgZmFsc2U7OyBlc2FjOyB0aGVuCisgICAgICAgICAgICBBQ19ERUZJTkUoW1VTRV9QVEhfVEhSRUFEU19XRUFLXSwgWzFdLAorICAgICAgICAgICAgICBbRGVmaW5lIGlmIHJlZmVyZW5jZXMgdG8gdGhlIEdOVSBQdGggbXVsdGl0aHJlYWRpbmcgbGlicmFyeSBzaG91bGQgYmUgbWFkZSB3ZWFrLl0pCisgICAgICAgICAgICBMSUJUSFJFQUQ9CisgICAgICAgICAgICBMVExJQlRIUkVBRD0KKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZWxzZQorICAgICAgICBDUFBGTEFHUz0iJGdsX3NhdmVfQ1BQRkxBR1MiCisgICAgICBmaQorICAgIGZpCisgICAgaWYgdGVzdCAteiAiJGdsX2hhdmVfcHRocmVhZCI7IHRoZW4KKyAgICAgIGNhc2UgIiRnbF91c2VfdGhyZWFkcyIgaW4KKyAgICAgICAgeWVzIHwgd2luZG93cyB8IHdpbjMyKSAjIFRoZSAnd2luMzInIGlzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorICAgICAgICAgIGlmIHsgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgIG1pbmd3KikgdHJ1ZTs7CisgICAgICAgICAgICAgICAgICopIGZhbHNlOzsKKyAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICB9OyB0aGVuCisgICAgICAgICAgICBnbF90aHJlYWRzX2FwaT13aW5kb3dzCisgICAgICAgICAgICBBQ19ERUZJTkUoW1VTRV9XSU5ET1dTX1RIUkVBRFNdLCBbMV0sCisgICAgICAgICAgICAgIFtEZWZpbmUgaWYgdGhlIG5hdGl2ZSBXaW5kb3dzIG11bHRpdGhyZWFkaW5nIEFQSSBjYW4gYmUgdXNlZC5dKQorICAgICAgICAgIGZpCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBtdWx0aXRocmVhZCBBUEkgdG8gdXNlXSkKKyAgQUNfTVNHX1JFU1VMVChbJGdsX3RocmVhZHNfYXBpXSkKKyAgQUNfU1VCU1QoW0xJQlRIUkVBRF0pCisgIEFDX1NVQlNUKFtMVExJQlRIUkVBRF0pCisgIEFDX1NVQlNUKFtMSUJNVUxUSVRIUkVBRF0pCisgIEFDX1NVQlNUKFtMVExJQk1VTFRJVEhSRUFEXSkKK10pCisKK0FDX0RFRlVOKFtnbF9USFJFQURMSUJdLAorWworICBBQ19SRVFVSVJFKFtnbF9USFJFQURMSUJfRUFSTFldKQorICBBQ19SRVFVSVJFKFtnbF9USFJFQURMSUJfQk9EWV0pCitdKQorCisKK2RubCBnbF9ESVNBQkxFX1RIUkVBRFMKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTZXRzIHRoZSBnbF9USFJFQURMSUIgZGVmYXVsdCBzbyB0aGF0IHRocmVhZHMgYXJlIG5vdCB1c2VkIGJ5IGRlZmF1bHQuCitkbmwgVGhlIHVzZXIgY2FuIHN0aWxsIG92ZXJyaWRlIGl0IGF0IGluc3RhbGxhdGlvbiB0aW1lLCBieSB1c2luZyB0aGUKK2RubCBjb25maWd1cmUgb3B0aW9uICctLWVuYWJsZS10aHJlYWRzJy4KKworQUNfREVGVU4oW2dsX0RJU0FCTEVfVEhSRUFEU10sIFsKKyAgbTRfZGl2ZXJ0X3RleHQoW0lOSVRfUFJFUEFSRV0sIFtnbF91c2VfdGhyZWFkc19kZWZhdWx0PW5vXSkKK10pCisKKworZG5sIFN1cnZleSBvZiBwbGF0Zm9ybXM6CitkbmwKK2RubCBQbGF0Zm9ybSAgICAgICAgICAgQXZhaWxhYmxlICBDb21waWxlciAgICBTdXBwb3J0cyAgIHRlc3QtbG9jaworZG5sICAgICAgICAgICAgICAgICAgICBmbGF2b3VycyAgIG9wdGlvbiAgICAgIHdlYWsgICAgICAgcmVzdWx0CitkbmwgLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLSAgLS0tLS0tLS0tICAgLS0tLS0tLS0gICAtLS0tLS0tLS0KK2RubCBMaW51eCAyLjQvZ2xpYmMgICAgcG9zaXggICAgICAtbHB0aHJlYWQgICAgICAgWSAgICAgIE9LCitkbmwKK2RubCBHTlUgSHVyZC9nbGliYyAgICAgcG9zaXgKK2RubAorZG5sIEZyZWVCU0QgNS4zICAgICAgICBwb3NpeCAgICAgIC1sY19yICAgICAgICAgICBZCitkbmwgICAgICAgICAgICAgICAgICAgIHBvc2l4ICAgICAgLWxrc2UgPyAgICAgICAgIFkKK2RubCAgICAgICAgICAgICAgICAgICAgcG9zaXggICAgICAtbHB0aHJlYWQgPyAgICAgWQorZG5sICAgICAgICAgICAgICAgICAgICBwb3NpeCAgICAgIC1sdGhyICAgICAgICAgICBZCitkbmwKK2RubCBGcmVlQlNEIDUuMiAgICAgICAgcG9zaXggICAgICAtbGNfciAgICAgICAgICAgWQorZG5sICAgICAgICAgICAgICAgICAgICBwb3NpeCAgICAgIC1sa3NlICAgICAgICAgICBZCitkbmwgICAgICAgICAgICAgICAgICAgIHBvc2l4ICAgICAgLWx0aHIgICAgICAgICAgIFkKK2RubAorZG5sIEZyZWVCU0QgNC4wLDQuMTAgICBwb3NpeCAgICAgIC1sY19yICAgICAgICAgICBZICAgICAgT0sKK2RubAorZG5sIE5ldEJTRCAxLjYgICAgICAgICAtLQorZG5sCitkbmwgT3BlbkJTRCAzLjQgICAgICAgIHBvc2l4ICAgICAgLWxwdGhyZWFkICAgICAgIFkgICAgICBPSworZG5sCitkbmwgTWFjIE9TIFggMTAuWzEyM10gIHBvc2l4ICAgICAgLWxwdGhyZWFkICAgICAgIFkgICAgICBPSworZG5sCitkbmwgU29sYXJpcyA3LDgsOSAgICAgIHBvc2l4ICAgICAgLWxwdGhyZWFkICAgICAgIFkgICAgICBTb2wgNyw4OiAwLjA7IFNvbCA5OiBPSworZG5sICAgICAgICAgICAgICAgICAgICBzb2xhcmlzICAgIC1sdGhyZWFkICAgICAgICBZICAgICAgU29sIDcsODogMC4wOyBTb2wgOTogT0sKK2RubAorZG5sIEhQLVVYIDExICAgICAgICAgICBwb3NpeCAgICAgIC1scHRocmVhZCAgICAgICBOIChjYykgT0sKK2RubCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWSAoZ2NjKQorZG5sCitkbmwgSVJJWCA2LjUgICAgICAgICAgIHBvc2l4ICAgICAgLWxwdGhyZWFkICAgICAgIFkgICAgICAwLjUKK2RubAorZG5sIEFJWCA0LjMsNS4xICAgICAgICBwb3NpeCAgICAgIC1scHRocmVhZCAgICAgICBOICAgICAgQUlYIDQ6IDAuNTsgQUlYIDU6IE9LCitkbmwKK2RubCBPU0YvMSA0LjAsNS4xICAgICAgcG9zaXggICAgICAtcHRocmVhZCAoY2MpICAgTiAgICAgIE9LCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWxwdGhyZWFkIChnY2MpIFkKK2RubAorZG5sIEN5Z3dpbiAgICAgICAgICAgICBwb3NpeCAgICAgIC1scHRocmVhZCAgICAgICBZICAgICAgT0sKK2RubAorZG5sIEFueSBvZiB0aGUgYWJvdmUgICBwdGggICAgICAgIC1scHRoICAgICAgICAgICAgICAgICAgMC4wCitkbmwKK2RubCBNaW5ndyAgICAgICAgICAgICAgd2luZG93cyAgICAgICAgICAgICAgICAgICAgTiAgICAgIE9LCitkbmwKK2RubCBCZU9TIDUgICAgICAgICAgICAgLS0KK2RubAorZG5sIFRoZSB0ZXN0LWxvY2sgcmVzdWx0IHNob3dzIHdoYXQgaGFwcGVucyBpZiBpbiB0ZXN0LWxvY2suYyBFWFBMSUNJVF9ZSUVMRCBpcworZG5sIHR1cm5lZCBvZmY6CitkbmwgICBPSyBpZiBhbGwgdGhyZWUgdGVzdHMgdGVybWluYXRlIE9LLAorZG5sICAgMC41IGlmIHRoZSBmaXJzdCB0ZXN0IHRlcm1pbmF0ZXMgT0sgYnV0IHRoZSBzZWNvbmQgb25lIGxvb3BzIGVuZGxlc3NseSwKK2RubCAgIDAuMCBpZiB0aGUgZmlyc3QgdGVzdCBhbHJlYWR5IGxvb3BzIGVuZGxlc3NseS4KZGlmZiAtLWdpdCBhL200L3RpbWVfaC5tNCBiL200L3RpbWVfaC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDE1YmZiCi0tLSAvZGV2L251bGwKKysrIGIvbTQvdGltZV9oLm00CkBAIC0wLDAgKzEsMTA5IEBACisjIENvbmZpZ3VyZSBhIG1vcmUtc3RhbmRhcmQgcmVwbGFjZW1lbnQgZm9yIDx0aW1lLmg+LgorCisjIENvcHlyaWdodCAoQykgMjAwMC0yMDAxLCAyMDAzLTIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBzZXJpYWwgNworCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0IGFuZCBKaW0gTWV5ZXJpbmcuCisKK0FDX0RFRlVOKFtnbF9IRUFERVJfVElNRV9IXSwKK1sKKyAgZG5sIFVzZSBBQ19SRVFVSVJFIGhlcmUsIHNvIHRoYXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgYmVsb3cgaXMgZXhwYW5kZWQKKyAgZG5sIG9uY2Ugb25seSwgYmVmb3JlIGFsbCBzdGF0ZW1lbnRzIHRoYXQgb2NjdXIgaW4gb3RoZXIgbWFjcm9zLgorICBBQ19SRVFVSVJFKFtnbF9IRUFERVJfVElNRV9IX0JPRFldKQorXSkKKworQUNfREVGVU4oW2dsX0hFQURFUl9USU1FX0hfQk9EWV0sCitbCisgIEFDX1JFUVVJUkUoW0FDX0NfUkVTVFJJQ1RdKQorICBBQ19SRVFVSVJFKFtnbF9IRUFERVJfVElNRV9IX0RFRkFVTFRTXSkKKyAgZ2xfTkVYVF9IRUFERVJTKFt0aW1lLmhdKQorICBBQ19SRVFVSVJFKFtnbF9DSEVDS19UWVBFX1NUUlVDVF9USU1FU1BFQ10pCitdKQorCitkbmwgQ2hlY2sgd2hldGhlciAnc3RydWN0IHRpbWVzcGVjJyBpcyBkZWNsYXJlZAorZG5sIGluIHRpbWUuaCwgc3lzL3RpbWUuaCwgb3IgcHRocmVhZC5oLgorCitBQ19ERUZVTihbZ2xfQ0hFQ0tfVFlQRV9TVFJVQ1RfVElNRVNQRUNdLAorWworICBBQ19DSEVDS19IRUFERVJTX09OQ0UoW3N5cy90aW1lLmhdKQorICBBQ19DQUNIRV9DSEVDSyhbZm9yIHN0cnVjdCB0aW1lc3BlYyBpbiA8dGltZS5oPl0sCisgICAgW2dsX2N2X3N5c19zdHJ1Y3RfdGltZXNwZWNfaW5fdGltZV9oXSwKKyAgICBbQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICBbWyNpbmNsdWRlIDx0aW1lLmg+CisgICAgICAgICAgXV0sCisgICAgICAgICAgW1tzdGF0aWMgc3RydWN0IHRpbWVzcGVjIHg7IHgudHZfc2VjID0geC50dl9uc2VjO11dKV0sCisgICAgICAgW2dsX2N2X3N5c19zdHJ1Y3RfdGltZXNwZWNfaW5fdGltZV9oPXllc10sCisgICAgICAgW2dsX2N2X3N5c19zdHJ1Y3RfdGltZXNwZWNfaW5fdGltZV9oPW5vXSldKQorCisgIFRJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQz0wCisgIFNZU19USU1FX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUM9MAorICBQVEhSRUFEX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUM9MAorICBpZiB0ZXN0ICRnbF9jdl9zeXNfc3RydWN0X3RpbWVzcGVjX2luX3RpbWVfaCA9IHllczsgdGhlbgorICAgIFRJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQz0xCisgIGVsc2UKKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIHN0cnVjdCB0aW1lc3BlYyBpbiA8c3lzL3RpbWUuaD5dLAorICAgICAgW2dsX2N2X3N5c19zdHJ1Y3RfdGltZXNwZWNfaW5fc3lzX3RpbWVfaF0sCisgICAgICBbQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgICAgW1sjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyAgICAgICAgICAgIF1dLAorICAgICAgICAgICAgW1tzdGF0aWMgc3RydWN0IHRpbWVzcGVjIHg7IHgudHZfc2VjID0geC50dl9uc2VjO11dKV0sCisgICAgICAgICBbZ2xfY3Zfc3lzX3N0cnVjdF90aW1lc3BlY19pbl9zeXNfdGltZV9oPXllc10sCisgICAgICAgICBbZ2xfY3Zfc3lzX3N0cnVjdF90aW1lc3BlY19pbl9zeXNfdGltZV9oPW5vXSldKQorICAgIGlmIHRlc3QgJGdsX2N2X3N5c19zdHJ1Y3RfdGltZXNwZWNfaW5fc3lzX3RpbWVfaCA9IHllczsgdGhlbgorICAgICAgU1lTX1RJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQz0xCisgICAgZWxzZQorICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzdHJ1Y3QgdGltZXNwZWMgaW4gPHB0aHJlYWQuaD5dLAorICAgICAgICBbZ2xfY3Zfc3lzX3N0cnVjdF90aW1lc3BlY19pbl9wdGhyZWFkX2hdLAorICAgICAgICBbQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgICAgIFtbI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyAgICAgICAgICAgICAgXV0sCisgICAgICAgICAgICAgIFtbc3RhdGljIHN0cnVjdCB0aW1lc3BlYyB4OyB4LnR2X3NlYyA9IHgudHZfbnNlYztdXSldLAorICAgICAgICAgICBbZ2xfY3Zfc3lzX3N0cnVjdF90aW1lc3BlY19pbl9wdGhyZWFkX2g9eWVzXSwKKyAgICAgICAgICAgW2dsX2N2X3N5c19zdHJ1Y3RfdGltZXNwZWNfaW5fcHRocmVhZF9oPW5vXSldKQorICAgICAgaWYgdGVzdCAkZ2xfY3Zfc3lzX3N0cnVjdF90aW1lc3BlY19pbl9wdGhyZWFkX2ggPSB5ZXM7IHRoZW4KKyAgICAgICAgUFRIUkVBRF9IX0RFRklORVNfU1RSVUNUX1RJTUVTUEVDPTEKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKKyAgQUNfU1VCU1QoW1RJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQ10pCisgIEFDX1NVQlNUKFtTWVNfVElNRV9IX0RFRklORVNfU1RSVUNUX1RJTUVTUEVDXSkKKyAgQUNfU1VCU1QoW1BUSFJFQURfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQ10pCitdKQorCitBQ19ERUZVTihbZ2xfVElNRV9NT0RVTEVfSU5ESUNBVE9SXSwKK1sKKyAgZG5sIFVzZSBBQ19SRVFVSVJFIGhlcmUsIHNvIHRoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGV4cGFuZGVkIG9uY2Ugb25seS4KKyAgQUNfUkVRVUlSRShbZ2xfSEVBREVSX1RJTUVfSF9ERUZBVUxUU10pCisgIGdsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFKFskMV0pCisgIGRubCBEZWZpbmUgaXQgYWxzbyBhcyBhIEMgbWFjcm8sIGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgdW5pdCB0ZXN0cy4KKyAgZ2xfTU9EVUxFX0lORElDQVRPUl9GT1JfVEVTVFMoWyQxXSkKK10pCisKK0FDX0RFRlVOKFtnbF9IRUFERVJfVElNRV9IX0RFRkFVTFRTXSwKK1sKKyAgR05VTElCX01LVElNRT0wOyAgICAgICAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9NS1RJTUVdKQorICBHTlVMSUJfTkFOT1NMRUVQPTA7ICAgICAgICAgICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX05BTk9TTEVFUF0pCisgIEdOVUxJQl9TVFJQVElNRT0wOyAgICAgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfU1RSUFRJTUVdKQorICBHTlVMSUJfVElNRUdNPTA7ICAgICAgICAgICAgICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX1RJTUVHTV0pCisgIEdOVUxJQl9USU1FX1I9MDsgICAgICAgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfVElNRV9SXSkKKyAgZG5sIEFzc3VtZSBwcm9wZXIgR05VIGJlaGF2aW9yIHVubGVzcyBhbm90aGVyIG1vZHVsZSBzYXlzIG90aGVyd2lzZS4KKyAgSEFWRV9ERUNMX0xPQ0FMVElNRV9SPTE7ICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9MT0NBTFRJTUVfUl0pCisgIEhBVkVfTkFOT1NMRUVQPTE7ICAgICAgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX05BTk9TTEVFUF0pCisgIEhBVkVfU1RSUFRJTUU9MTsgICAgICAgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1NUUlBUSU1FXSkKKyAgSEFWRV9USU1FR009MTsgICAgICAgICAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfVElNRUdNXSkKKyAgZG5sIElmIGFub3RoZXIgbW9kdWxlIHNheXMgdG8gcmVwbGFjZSBvciB0byBub3QgcmVwbGFjZSwgZG8gdGhhdC4KKyAgZG5sIE90aGVyd2lzZSwgcmVwbGFjZSBvbmx5IGlmIHNvbWVvbmUgY29tcGlsZXMgd2l0aCAtREdOVUxJQl9QT1JUQ0hFQ0s7CisgIGRubCB0aGlzIGxldHMgbWFpbnRhaW5lcnMgY2hlY2sgZm9yIHBvcnRhYmlsaXR5LgorICBSRVBMQUNFX0xPQ0FMVElNRV9SPUdOVUxJQl9QT1JUQ0hFQ0s7ICBBQ19TVUJTVChbUkVQTEFDRV9MT0NBTFRJTUVfUl0pCisgIFJFUExBQ0VfTUtUSU1FPUdOVUxJQl9QT1JUQ0hFQ0s7ICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX01LVElNRV0pCisgIFJFUExBQ0VfTkFOT1NMRUVQPUdOVUxJQl9QT1JUQ0hFQ0s7ICAgIEFDX1NVQlNUKFtSRVBMQUNFX05BTk9TTEVFUF0pCisgIFJFUExBQ0VfVElNRUdNPUdOVUxJQl9QT1JUQ0hFQ0s7ICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX1RJTUVHTV0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvdGltZXZhci5tNCBiL200L3RpbWV2YXIubTQKaW5kZXggMjcwNGE5MS4uZjhkMzYwNiAxMDA2NDQKLS0tIGEvbTQvdGltZXZhci5tNAorKysgYi9tNC90aW1ldmFyLm00CkBAIC0xLDExICsxLDExIEBACiAjIC0qLSBBdXRvY29uZiAtKi0KICMgQ2hlY2tzIHJlcXVpcmVkIHRvIHJ1biBgdGltZXZhcicsIGEgdGltZSB0cmFja2VyLgogIwotIyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwMi0yMDAzLCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAjCiAjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLApAQCAtMTQsOSArMTQsNyBAQAogIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogIwogIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0jIDAyMTEwLTEzMDEgIFVTQQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIAogIyBzZXJpYWwgMgogCmRpZmYgLS1naXQgYS9tNC91aW50bWF4X3RfZ2wubTQgYi9tNC91aW50bWF4X3RfZ2wubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmODNlZDcuLjAwMDAwMDAKLS0tIGEvbTQvdWludG1heF90X2dsLm00CisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotIyB1aW50bWF4X3QubTQgc2VyaWFsIDkKLWRubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1kbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi1kbmwgRnJvbSBQYXVsIEVnZ2VydC4KLQotQUNfUFJFUkVRKDIuMTMpCi0KLSMgRGVmaW5lIHVpbnRtYXhfdCB0byAndW5zaWduZWQgbG9uZycgb3IgJ3Vuc2lnbmVkIGxvbmcgbG9uZycKLSMgaWYgaXQgaXMgbm90IGFscmVhZHkgZGVmaW5lZCBpbiA8c3RkaW50Lmg+IG9yIDxpbnR0eXBlcy5oPi4KLQotQUNfREVGVU4oW2dsX0FDX1RZUEVfVUlOVE1BWF9UXSwKLVsKLSAgQUNfUkVRVUlSRShbZ2xfQUNfSEVBREVSX0lOVFRZUEVTX0hdKQotICBBQ19SRVFVSVJFKFtnbF9BQ19IRUFERVJfU1RESU5UX0hdKQotICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfaW50dHlwZXNfaCA9IG5vICYmIHRlc3QgJGdsX2N2X2hlYWRlcl9zdGRpbnRfaCA9IG5vOyB0aGVuCi0gICAgQUNfUkVRVUlSRShbZ2xfQUNfVFlQRV9VTlNJR05FRF9MT05HX0xPTkddKQotICAgIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nID0geWVzIFwKLSAgICAgICYmIGFjX3R5cGU9J3Vuc2lnbmVkIGxvbmcgbG9uZycgXAotICAgICAgfHwgYWNfdHlwZT0ndW5zaWduZWQgbG9uZycKLSAgICBBQ19ERUZJTkVfVU5RVU9URUQodWludG1heF90LCAkYWNfdHlwZSwKLSAgICAgIFtEZWZpbmUgdG8gdW5zaWduZWQgbG9uZyBvciB1bnNpZ25lZCBsb25nIGxvbmcKLSAgICAgICBpZiA8c3RkaW50Lmg+IGFuZCA8aW50dHlwZXMuaD4gZG9uJ3QgZGVmaW5lLl0pCi0gIGVsc2UKLSAgICBBQ19ERUZJTkUoSEFWRV9VSU5UTUFYX1QsIDEsCi0gICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAndWludG1heF90JyB0eXBlIGluIDxzdGRpbnQuaD4gb3IgPGludHR5cGVzLmg+Ll0pCi0gIGZpCi1dKQpkaWZmIC0tZ2l0IGEvbTQvdWxvbmdsb25nX2dsLm00IGIvbTQvdWxvbmdsb25nX2dsLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWUxMGNjLi4wMDAwMDAwCi0tLSBhL200L3Vsb25nbG9uZ19nbC5tNAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSMgdWxvbmdsb25nLm00IHNlcmlhbCA0Ci1kbmwgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLWRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotZG5sIEZyb20gUGF1bCBFZ2dlcnQuCi0KLSMgRGVmaW5lIEhBVkVfVU5TSUdORURfTE9OR19MT05HIGlmICd1bnNpZ25lZCBsb25nIGxvbmcnIHdvcmtzLgotCi1BQ19ERUZVTihbZ2xfQUNfVFlQRV9VTlNJR05FRF9MT05HX0xPTkddLAotWwotICBBQ19DQUNIRV9DSEVDSyhbZm9yIHVuc2lnbmVkIGxvbmcgbG9uZ10sIGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nLAotICBbQUNfVFJZX0xJTksoW3Vuc2lnbmVkIGxvbmcgbG9uZyB1bGwgPSAxVUxMOyBpbnQgaSA9IDYzO10sCi0gICAgW3Vuc2lnbmVkIGxvbmcgbG9uZyB1bGxtYXggPSAodW5zaWduZWQgbG9uZyBsb25nKSAtMTsKLSAgICAgcmV0dXJuIHVsbCA8PCBpIHwgdWxsID4+IGkgfCB1bGxtYXggLyB1bGwgfCB1bGxtYXggJSB1bGw7XSwKLSAgICBhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZz15ZXMsCi0gICAgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmc9bm8pXSkKLSAgaWYgdGVzdCAkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmcgPSB5ZXM7IHRoZW4KLSAgICBBQ19ERUZJTkUoSEFWRV9VTlNJR05FRF9MT05HX0xPTkcsIDEsCi0gICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAndW5zaWduZWQgbG9uZyBsb25nJyB0eXBlLl0pCi0gIGZpCi1dKQpkaWZmIC0tZ2l0IGEvbTQvdW5pc3RkLXNhZmVyLm00IGIvbTQvdW5pc3RkLXNhZmVyLm00CmluZGV4IDZmYmU0YzYuLjYyZTI5NWIgMTAwNjQ0Ci0tLSBhL200L3VuaXN0ZC1zYWZlci5tNAorKysgYi9tNC91bmlzdGQtc2FmZXIubTQKQEAgLTEsMTMgKzEsMTAgQEAKLSNzZXJpYWwgNwotZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyNzZXJpYWwgOQorZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNS0yMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAogQUNfREVGVU4oW2dsX1VOSVNURF9TQUZFUl0sCiBbCi0gIEFDX0xJQlNPVVJDRVMoW2R1cC1zYWZlci5jLCBmZC1zYWZlci5jLCBwaXBlLXNhZmVyLmMsIHVuaXN0ZC1zYWZlci5oLCB1bmlzdGQtLS5oXSkKLSAgQUNfTElCT0JKKFtkdXAtc2FmZXJdKQotICBBQ19MSUJPQkooW2ZkLXNhZmVyXSkKLSAgQUNfTElCT0JKKFtwaXBlLXNhZmVyXSkKKyAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbcGlwZV0pCiBdKQpkaWZmIC0tZ2l0IGEvbTQvdW5pc3RkX2gubTQgYi9tNC91bmlzdGRfaC5tNAppbmRleCA5Yzc3ZjliLi5mNjhmYmZmIDEwMDY0NAotLS0gYS9tNC91bmlzdGRfaC5tNAorKysgYi9tNC91bmlzdGRfaC5tNApAQCAtMSwxOCArMSwxODYgQEAKLSMgdW5pc3RkX2gubTQgc2VyaWFsIDIKLWRubCBDb3B5cmlnaHQgKEMpIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIHVuaXN0ZF9oLm00IHNlcmlhbCA2NgorZG5sIENvcHlyaWdodCAoQykgMjAwNi0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKIGRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKLWRubCBXcml0dGVuIGJ5IFNpbW9uIEpvc2Vmc3NvbgorZG5sIFdyaXR0ZW4gYnkgU2ltb24gSm9zZWZzc29uLCBCcnVubyBIYWlibGUuCiAKLUFDX0RFRlVOKFtnbF9IRUFERVJfVU5JU1REXSwKK0FDX0RFRlVOKFtnbF9VTklTVERfSF0sCiBbCi0gIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi91bmlzdGQuaC4KLSAgQUNfQ0hFQ0tfSEVBREVSUyhbdW5pc3RkLmhdLCBbCi0gICAgVU5JU1REX0g9JycKLSAgXSwgWwotICAgIFVOSVNURF9IPSd1bmlzdGQuaCcKLSAgXSkKLSAgQUNfU1VCU1QoVU5JU1REX0gpCisgIGRubCBVc2UgQUNfUkVRVUlSRSBoZXJlLCBzbyB0aGF0IHRoZSBkZWZhdWx0IGJlaGF2aW9yIGJlbG93IGlzIGV4cGFuZGVkCisgIGRubCBvbmNlIG9ubHksIGJlZm9yZSBhbGwgc3RhdGVtZW50cyB0aGF0IG9jY3VyIGluIG90aGVyIG1hY3Jvcy4KKyAgQUNfUkVRVUlSRShbZ2xfVU5JU1REX0hfREVGQVVMVFNdKQorCisgIGdsX0NIRUNLX05FWFRfSEVBREVSUyhbdW5pc3RkLmhdKQorICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfdW5pc3RkX2ggPSB5ZXM7IHRoZW4KKyAgICBIQVZFX1VOSVNURF9IPTEKKyAgZWxzZQorICAgIEhBVkVfVU5JU1REX0g9MAorICBmaQorICBBQ19TVUJTVChbSEFWRV9VTklTVERfSF0pCisKKyAgZG5sIEVuc3VyZSB0aGUgdHlwZSBwaWRfdCBnZXRzIGRlZmluZWQuCisgIEFDX1JFUVVJUkUoW0FDX1RZUEVfUElEX1RdKQorCisgIGRubCBEZXRlcm1pbmUgV0lORE9XU182NF9CSVRfT0ZGX1QuCisgIEFDX1JFUVVJUkUoW2dsX1RZUEVfT0ZGX1RdKQorCisgIGRubCBDaGVjayBmb3IgZGVjbGFyYXRpb25zIG9mIGFueXRoaW5nIHdlIHdhbnQgdG8gcG9pc29uIGlmIHRoZQorICBkbmwgY29ycmVzcG9uZGluZyBnbnVsaWIgbW9kdWxlIGlzIG5vdCBpbiB1c2UuCisgIGdsX1dBUk5fT05fVVNFX1BSRVBBUkUoW1sKKyNpZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisvKiBTb21lIHN5c3RlbXMgZGVjbGFyZSB2YXJpb3VzIGl0ZW1zIGluIHRoZSB3cm9uZyBoZWFkZXJzLiAgKi8KKyNpZiAhKGRlZmluZWQgX19HTElCQ19fICYmICFkZWZpbmVkIF9fVUNMSUJDX18pCisjIGluY2x1ZGUgPGZjbnRsLmg+CisjIGluY2x1ZGUgPHN0ZGlvLmg+CisjIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyBpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCisjICBpbmNsdWRlIDxpby5oPgorIyBlbmRpZgorI2VuZGlmCisgICAgXV0sIFtjaGRpciBjaG93biBkdXAgZHVwMiBkdXAzIGVudmlyb24gZXVpZGFjY2VzcyBmYWNjZXNzYXQgZmNoZGlyIGZjaG93bmF0CisgICAgZmRhdGFzeW5jIGZzeW5jIGZ0cnVuY2F0ZSBnZXRjd2QgZ2V0ZG9tYWlubmFtZSBnZXRkdGFibGVzaXplIGdldGdyb3VwcworICAgIGdldGhvc3RuYW1lIGdldGxvZ2luIGdldGxvZ2luX3IgZ2V0cGFnZXNpemUKKyAgICBnZXR1c2Vyc2hlbGwgc2V0dXNlcnNoZWxsIGVuZHVzZXJzaGVsbAorICAgIGdyb3VwX21lbWJlciBpc2F0dHkgbGNob3duIGxpbmsgbGlua2F0IGxzZWVrIHBpcGUgcGlwZTIgcHJlYWQgcHdyaXRlCisgICAgcmVhZGxpbmsgcmVhZGxpbmthdCBybWRpciBzZXRob3N0bmFtZSBzbGVlcCBzeW1saW5rIHN5bWxpbmthdCB0dHluYW1lX3IKKyAgICB1bmxpbmsgdW5saW5rYXQgdXNsZWVwXSkKK10pCisKK0FDX0RFRlVOKFtnbF9VTklTVERfTU9EVUxFX0lORElDQVRPUl0sCitbCisgIGRubCBVc2UgQUNfUkVRVUlSRSBoZXJlLCBzbyB0aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGFyZSBleHBhbmRlZCBvbmNlIG9ubHkuCisgIEFDX1JFUVVJUkUoW2dsX1VOSVNURF9IX0RFRkFVTFRTXSkKKyAgZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEUoWyQxXSkKKyAgZG5sIERlZmluZSBpdCBhbHNvIGFzIGEgQyBtYWNybywgZm9yIHRoZSBiZW5lZml0IG9mIHRoZSB1bml0IHRlc3RzLgorICBnbF9NT0RVTEVfSU5ESUNBVE9SX0ZPUl9URVNUUyhbJDFdKQorXSkKKworQUNfREVGVU4oW2dsX1VOSVNURF9IX0RFRkFVTFRTXSwKK1sKKyAgR05VTElCX0NIRElSPTA7ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfQ0hESVJdKQorICBHTlVMSUJfQ0hPV049MDsgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9DSE9XTl0pCisgIEdOVUxJQl9DTE9TRT0wOyAgICAgICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX0NMT1NFXSkKKyAgR05VTElCX0RVUD0wOyAgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRFVQXSkKKyAgR05VTElCX0RVUDI9MDsgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRFVQMl0pCisgIEdOVUxJQl9EVVAzPTA7ICAgICAgICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX0RVUDNdKQorICBHTlVMSUJfRU5WSVJPTj0wOyAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9FTlZJUk9OXSkKKyAgR05VTElCX0VVSURBQ0NFU1M9MDsgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRVVJREFDQ0VTU10pCisgIEdOVUxJQl9GQUNDRVNTQVQ9MDsgICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX0ZBQ0NFU1NBVF0pCisgIEdOVUxJQl9GQ0hESVI9MDsgICAgICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX0ZDSERJUl0pCisgIEdOVUxJQl9GQ0hPV05BVD0wOyAgICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX0ZDSE9XTkFUXSkKKyAgR05VTElCX0ZEQVRBU1lOQz0wOyAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRkRBVEFTWU5DXSkKKyAgR05VTElCX0ZTWU5DPTA7ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRlNZTkNdKQorICBHTlVMSUJfRlRSVU5DQVRFPTA7ICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9GVFJVTkNBVEVdKQorICBHTlVMSUJfR0VUQ1dEPTA7ICAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9HRVRDV0RdKQorICBHTlVMSUJfR0VURE9NQUlOTkFNRT0wOyAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9HRVRET01BSU5OQU1FXSkKKyAgR05VTElCX0dFVERUQUJMRVNJWkU9MDsgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfR0VURFRBQkxFU0laRV0pCisgIEdOVUxJQl9HRVRHUk9VUFM9MDsgICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX0dFVEdST1VQU10pCisgIEdOVUxJQl9HRVRIT1NUTkFNRT0wOyAgICAgICAgICBBQ19TVUJTVChbR05VTElCX0dFVEhPU1ROQU1FXSkKKyAgR05VTElCX0dFVExPR0lOPTA7ICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfR0VUTE9HSU5dKQorICBHTlVMSUJfR0VUTE9HSU5fUj0wOyAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9HRVRMT0dJTl9SXSkKKyAgR05VTElCX0dFVFBBR0VTSVpFPTA7ICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfR0VUUEFHRVNJWkVdKQorICBHTlVMSUJfR0VUVVNFUlNIRUxMPTA7ICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9HRVRVU0VSU0hFTExdKQorICBHTlVMSUJfR1JPVVBfTUVNQkVSPTA7ICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9HUk9VUF9NRU1CRVJdKQorICBHTlVMSUJfSVNBVFRZPTA7ICAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9JU0FUVFldKQorICBHTlVMSUJfTENIT1dOPTA7ICAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9MQ0hPV05dKQorICBHTlVMSUJfTElOSz0wOyAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9MSU5LXSkKKyAgR05VTElCX0xJTktBVD0wOyAgICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfTElOS0FUXSkKKyAgR05VTElCX0xTRUVLPTA7ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfTFNFRUtdKQorICBHTlVMSUJfUElQRT0wOyAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9QSVBFXSkKKyAgR05VTElCX1BJUEUyPTA7ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfUElQRTJdKQorICBHTlVMSUJfUFJFQUQ9MDsgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9QUkVBRF0pCisgIEdOVUxJQl9QV1JJVEU9MDsgICAgICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX1BXUklURV0pCisgIEdOVUxJQl9SRUFEPTA7ICAgICAgICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX1JFQURdKQorICBHTlVMSUJfUkVBRExJTks9MDsgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9SRUFETElOS10pCisgIEdOVUxJQl9SRUFETElOS0FUPTA7ICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX1JFQURMSU5LQVRdKQorICBHTlVMSUJfUk1ESVI9MDsgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9STURJUl0pCisgIEdOVUxJQl9TRVRIT1NUTkFNRT0wOyAgICAgICAgICBBQ19TVUJTVChbR05VTElCX1NFVEhPU1ROQU1FXSkKKyAgR05VTElCX1NMRUVQPTA7ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfU0xFRVBdKQorICBHTlVMSUJfU1lNTElOSz0wOyAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9TWU1MSU5LXSkKKyAgR05VTElCX1NZTUxJTktBVD0wOyAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfU1lNTElOS0FUXSkKKyAgR05VTElCX1RUWU5BTUVfUj0wOyAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfVFRZTkFNRV9SXSkKKyAgR05VTElCX1VOSVNURF9IX05PTkJMT0NLSU5HPTA7IEFDX1NVQlNUKFtHTlVMSUJfVU5JU1REX0hfTk9OQkxPQ0tJTkddKQorICBHTlVMSUJfVU5JU1REX0hfU0lHUElQRT0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9VTklTVERfSF9TSUdQSVBFXSkKKyAgR05VTElCX1VOTElOSz0wOyAgICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfVU5MSU5LXSkKKyAgR05VTElCX1VOTElOS0FUPTA7ICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfVU5MSU5LQVRdKQorICBHTlVMSUJfVVNMRUVQPTA7ICAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9VU0xFRVBdKQorICBHTlVMSUJfV1JJVEU9MDsgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9XUklURV0pCisgIGRubCBBc3N1bWUgcHJvcGVyIEdOVSBiZWhhdmlvciB1bmxlc3MgYW5vdGhlciBtb2R1bGUgc2F5cyBvdGhlcndpc2UuCisgIEhBVkVfQ0hPV049MTsgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0NIT1dOXSkKKyAgSEFWRV9EVVAyPTE7ICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfRFVQMl0pCisgIEhBVkVfRFVQMz0xOyAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0RVUDNdKQorICBIQVZFX0VVSURBQ0NFU1M9MTsgICAgICBBQ19TVUJTVChbSEFWRV9FVUlEQUNDRVNTXSkKKyAgSEFWRV9GQUNDRVNTQVQ9MTsgICAgICAgQUNfU1VCU1QoW0hBVkVfRkFDQ0VTU0FUXSkKKyAgSEFWRV9GQ0hESVI9MTsgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfRkNIRElSXSkKKyAgSEFWRV9GQ0hPV05BVD0xOyAgICAgICAgQUNfU1VCU1QoW0hBVkVfRkNIT1dOQVRdKQorICBIQVZFX0ZEQVRBU1lOQz0xOyAgICAgICBBQ19TVUJTVChbSEFWRV9GREFUQVNZTkNdKQorICBIQVZFX0ZTWU5DPTE7ICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9GU1lOQ10pCisgIEhBVkVfRlRSVU5DQVRFPTE7ICAgICAgIEFDX1NVQlNUKFtIQVZFX0ZUUlVOQ0FURV0pCisgIEhBVkVfR0VURFRBQkxFU0laRT0xOyAgIEFDX1NVQlNUKFtIQVZFX0dFVERUQUJMRVNJWkVdKQorICBIQVZFX0dFVEdST1VQUz0xOyAgICAgICBBQ19TVUJTVChbSEFWRV9HRVRHUk9VUFNdKQorICBIQVZFX0dFVEhPU1ROQU1FPTE7ICAgICBBQ19TVUJTVChbSEFWRV9HRVRIT1NUTkFNRV0pCisgIEhBVkVfR0VUTE9HSU49MTsgICAgICAgIEFDX1NVQlNUKFtIQVZFX0dFVExPR0lOXSkKKyAgSEFWRV9HRVRQQUdFU0laRT0xOyAgICAgQUNfU1VCU1QoW0hBVkVfR0VUUEFHRVNJWkVdKQorICBIQVZFX0dST1VQX01FTUJFUj0xOyAgICBBQ19TVUJTVChbSEFWRV9HUk9VUF9NRU1CRVJdKQorICBIQVZFX0xDSE9XTj0xOyAgICAgICAgICBBQ19TVUJTVChbSEFWRV9MQ0hPV05dKQorICBIQVZFX0xJTks9MTsgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9MSU5LXSkKKyAgSEFWRV9MSU5LQVQ9MTsgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfTElOS0FUXSkKKyAgSEFWRV9QSVBFPTE7ICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfUElQRV0pCisgIEhBVkVfUElQRTI9MTsgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1BJUEUyXSkKKyAgSEFWRV9QUkVBRD0xOyAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfUFJFQURdKQorICBIQVZFX1BXUklURT0xOyAgICAgICAgICBBQ19TVUJTVChbSEFWRV9QV1JJVEVdKQorICBIQVZFX1JFQURMSU5LPTE7ICAgICAgICBBQ19TVUJTVChbSEFWRV9SRUFETElOS10pCisgIEhBVkVfUkVBRExJTktBVD0xOyAgICAgIEFDX1NVQlNUKFtIQVZFX1JFQURMSU5LQVRdKQorICBIQVZFX1NFVEhPU1ROQU1FPTE7ICAgICBBQ19TVUJTVChbSEFWRV9TRVRIT1NUTkFNRV0pCisgIEhBVkVfU0xFRVA9MTsgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1NMRUVQXSkKKyAgSEFWRV9TWU1MSU5LPTE7ICAgICAgICAgQUNfU1VCU1QoW0hBVkVfU1lNTElOS10pCisgIEhBVkVfU1lNTElOS0FUPTE7ICAgICAgIEFDX1NVQlNUKFtIQVZFX1NZTUxJTktBVF0pCisgIEhBVkVfVU5MSU5LQVQ9MTsgICAgICAgIEFDX1NVQlNUKFtIQVZFX1VOTElOS0FUXSkKKyAgSEFWRV9VU0xFRVA9MTsgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfVVNMRUVQXSkKKyAgSEFWRV9ERUNMX0VOVklST049MTsgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9FTlZJUk9OXSkKKyAgSEFWRV9ERUNMX0ZDSERJUj0xOyAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9GQ0hESVJdKQorICBIQVZFX0RFQ0xfRkRBVEFTWU5DPTE7ICBBQ19TVUJTVChbSEFWRV9ERUNMX0ZEQVRBU1lOQ10pCisgIEhBVkVfREVDTF9HRVRET01BSU5OQU1FPTE7IEFDX1NVQlNUKFtIQVZFX0RFQ0xfR0VURE9NQUlOTkFNRV0pCisgIEhBVkVfREVDTF9HRVRMT0dJTl9SPTE7IEFDX1NVQlNUKFtIQVZFX0RFQ0xfR0VUTE9HSU5fUl0pCisgIEhBVkVfREVDTF9HRVRQQUdFU0laRT0xOyBBQ19TVUJTVChbSEFWRV9ERUNMX0dFVFBBR0VTSVpFXSkKKyAgSEFWRV9ERUNMX0dFVFVTRVJTSEVMTD0xOyBBQ19TVUJTVChbSEFWRV9ERUNMX0dFVFVTRVJTSEVMTF0pCisgIEhBVkVfREVDTF9TRVRIT1NUTkFNRT0xOyBBQ19TVUJTVChbSEFWRV9ERUNMX1NFVEhPU1ROQU1FXSkKKyAgSEFWRV9ERUNMX1RUWU5BTUVfUj0xOyAgQUNfU1VCU1QoW0hBVkVfREVDTF9UVFlOQU1FX1JdKQorICBIQVZFX09TX0g9MDsgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9PU19IXSkKKyAgSEFWRV9TWVNfUEFSQU1fSD0wOyAgICAgQUNfU1VCU1QoW0hBVkVfU1lTX1BBUkFNX0hdKQorICBSRVBMQUNFX0NIT1dOPTA7ICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9DSE9XTl0pCisgIFJFUExBQ0VfQ0xPU0U9MDsgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0NMT1NFXSkKKyAgUkVQTEFDRV9EVVA9MDsgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfRFVQXSkKKyAgUkVQTEFDRV9EVVAyPTA7ICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfRFVQMl0pCisgIFJFUExBQ0VfRkNIT1dOQVQ9MDsgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0ZDSE9XTkFUXSkKKyAgUkVQTEFDRV9GVFJVTkNBVEU9MDsgICAgQUNfU1VCU1QoW1JFUExBQ0VfRlRSVU5DQVRFXSkKKyAgUkVQTEFDRV9HRVRDV0Q9MDsgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfR0VUQ1dEXSkKKyAgUkVQTEFDRV9HRVRET01BSU5OQU1FPTA7IEFDX1NVQlNUKFtSRVBMQUNFX0dFVERPTUFJTk5BTUVdKQorICBSRVBMQUNFX0dFVExPR0lOX1I9MDsgICBBQ19TVUJTVChbUkVQTEFDRV9HRVRMT0dJTl9SXSkKKyAgUkVQTEFDRV9HRVRHUk9VUFM9MDsgICAgQUNfU1VCU1QoW1JFUExBQ0VfR0VUR1JPVVBTXSkKKyAgUkVQTEFDRV9HRVRQQUdFU0laRT0wOyAgQUNfU1VCU1QoW1JFUExBQ0VfR0VUUEFHRVNJWkVdKQorICBSRVBMQUNFX0lTQVRUWT0wOyAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9JU0FUVFldKQorICBSRVBMQUNFX0xDSE9XTj0wOyAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9MQ0hPV05dKQorICBSRVBMQUNFX0xJTks9MDsgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9MSU5LXSkKKyAgUkVQTEFDRV9MSU5LQVQ9MDsgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfTElOS0FUXSkKKyAgUkVQTEFDRV9MU0VFSz0wOyAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfTFNFRUtdKQorICBSRVBMQUNFX1BSRUFEPTA7ICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9QUkVBRF0pCisgIFJFUExBQ0VfUFdSSVRFPTA7ICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX1BXUklURV0pCisgIFJFUExBQ0VfUkVBRD0wOyAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX1JFQURdKQorICBSRVBMQUNFX1JFQURMSU5LPTA7ICAgICBBQ19TVUJTVChbUkVQTEFDRV9SRUFETElOS10pCisgIFJFUExBQ0VfUk1ESVI9MDsgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX1JNRElSXSkKKyAgUkVQTEFDRV9TTEVFUD0wOyAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfU0xFRVBdKQorICBSRVBMQUNFX1NZTUxJTks9MDsgICAgICBBQ19TVUJTVChbUkVQTEFDRV9TWU1MSU5LXSkKKyAgUkVQTEFDRV9UVFlOQU1FX1I9MDsgICAgQUNfU1VCU1QoW1JFUExBQ0VfVFRZTkFNRV9SXSkKKyAgUkVQTEFDRV9VTkxJTks9MDsgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfVU5MSU5LXSkKKyAgUkVQTEFDRV9VTkxJTktBVD0wOyAgICAgQUNfU1VCU1QoW1JFUExBQ0VfVU5MSU5LQVRdKQorICBSRVBMQUNFX1VTTEVFUD0wOyAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9VU0xFRVBdKQorICBSRVBMQUNFX1dSSVRFPTA7ICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9XUklURV0pCisgIFVOSVNURF9IX0hBVkVfV0lOU09DSzJfSD0wOyBBQ19TVUJTVChbVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IXSkKKyAgVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IX0FORF9VU0VfU09DS0VUUz0wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW1VOSVNURF9IX0hBVkVfV0lOU09DSzJfSF9BTkRfVVNFX1NPQ0tFVFNdKQogXSkKZGlmZiAtLWdpdCBhL200L3VubG9ja2VkLWlvLm00IGIvbTQvdW5sb2NrZWQtaW8ubTQKaW5kZXggZjU4ZTk2MC4uYzQ0YWRhZSAxMDA2NDQKLS0tIGEvbTQvdW5sb2NrZWQtaW8ubTQKKysrIGIvbTQvdW5sb2NrZWQtaW8ubTQKQEAgLTEsNyArMSw2IEBACi0jIHVubG9ja2VkLWlvLm00IHNlcmlhbCAxMworIyB1bmxvY2tlZC1pby5tNCBzZXJpYWwgMTUKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYKLSMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMTk5OC0yMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCkBAIC0xNyw5ICsxNiw3IEBACiAKIEFDX0RFRlVOKFtnbF9GVU5DX0dMSUJDX1VOTE9DS0VEX0lPXSwKIFsKLSAgQUNfTElCU09VUkNFUyhbdW5sb2NrZWQtaW8uaF0pCi0KLSAgQUNfREVGSU5FKFtVU0VfVU5MT0NLRURfSU9dLCAxLAorICBBQ19ERUZJTkUoW1VTRV9VTkxPQ0tFRF9JT10sIFsxXSwKICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgZ2V0YyBldGMuIHRvIHVzZSB1bmxvY2tlZCBJL08gaWYgYXZhaWxhYmxlLgogICAgICBVbmxvY2tlZCBJL08gY2FuIGltcHJvdmUgcGVyZm9ybWFuY2UgaW4gdW5pdGhyZWFkZWQgYXBwcywKICAgICAgYnV0IGl0IGlzIG5vdCBzYWZlIGZvciBtdWx0aXRocmVhZGVkIGFwcHMuXSkKZGlmZiAtLWdpdCBhL200L3Zhc25wcmludGYubTQgYi9tNC92YXNucHJpbnRmLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMzA4YzQKLS0tIC9kZXYvbnVsbAorKysgYi9tNC92YXNucHJpbnRmLm00CkBAIC0wLDAgKzEsMjkxIEBACisjIHZhc25wcmludGYubTQgc2VyaWFsIDM2CitkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQsIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ2xfRlVOQ19WQVNOUFJJTlRGXSwKK1sKKyAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbdmFzbnByaW50Zl0pCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfdmFzbnByaW50ZiA9IG5vOyB0aGVuCisgICAgZ2xfUkVQTEFDRV9WQVNOUFJJTlRGCisgIGZpCitdKQorCitBQ19ERUZVTihbZ2xfUkVQTEFDRV9WQVNOUFJJTlRGXSwKK1sKKyAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbdmFzbnByaW50Zl0pCisgIEFDX0xJQk9CSihbdmFzbnByaW50Zl0pCisgIEFDX0xJQk9CSihbcHJpbnRmLWFyZ3NdKQorICBBQ19MSUJPQkooW3ByaW50Zi1wYXJzZV0pCisgIEFDX0xJQk9CSihbYXNucHJpbnRmXSkKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY192YXNucHJpbnRmID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKFtSRVBMQUNFX1ZBU05QUklOVEZdLCBbMV0sCisgICAgICBbRGVmaW5lIGlmIHZhc25wcmludGYgZXhpc3RzIGJ1dCBpcyBvdmVycmlkZGVuIGJ5IGdudWxpYi5dKQorICBmaQorICBnbF9QUkVSRVFfUFJJTlRGX0FSR1MKKyAgZ2xfUFJFUkVRX1BSSU5URl9QQVJTRQorICBnbF9QUkVSRVFfVkFTTlBSSU5URgorICBnbF9QUkVSRVFfQVNOUFJJTlRGCitdKQorCisjIFByZXJlcXVpc2l0ZXMgb2YgbGliL3ByaW50Zi1hcmdzLmgsIGxpYi9wcmludGYtYXJncy5jLgorQUNfREVGVU4oW2dsX1BSRVJFUV9QUklOVEZfQVJHU10sCitbCisgIEFDX1JFUVVJUkUoW0FDX1RZUEVfTE9OR19MT05HX0lOVF0pCisgIEFDX1JFUVVJUkUoW2d0X1RZUEVfV0NIQVJfVF0pCisgIEFDX1JFUVVJUkUoW2d0X1RZUEVfV0lOVF9UXSkKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvcHJpbnRmLXBhcnNlLmgsIGxpYi9wcmludGYtcGFyc2UuYy4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfUFJJTlRGX1BBUlNFXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfRkVBVFVSRVNfSF0pCisgIEFDX1JFUVVJUkUoW0FDX1RZUEVfTE9OR19MT05HX0lOVF0pCisgIEFDX1JFUVVJUkUoW2d0X1RZUEVfV0NIQVJfVF0pCisgIEFDX1JFUVVJUkUoW2d0X1RZUEVfV0lOVF9UXSkKKyAgQUNfUkVRVUlSRShbQUNfVFlQRV9TSVpFX1RdKQorICBBQ19DSEVDS19UWVBFKFtwdHJkaWZmX3RdLCAsCisgICAgW0FDX0RFRklORShbcHRyZGlmZl90XSwgW2xvbmddLAorICAgICAgIFtEZWZpbmUgYXMgdGhlIHR5cGUgb2YgdGhlIHJlc3VsdCBvZiBzdWJ0cmFjdGluZyB0d28gcG9pbnRlcnMsIGlmIHRoZSBzeXN0ZW0gZG9lc24ndCBkZWZpbmUgaXQuXSkKKyAgICBdKQorICBBQ19SRVFVSVJFKFtndF9BQ19UWVBFX0lOVE1BWF9UXSkKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvdmFzbnByaW50Zi5jLgorQUNfREVGVU5fT05DRShbZ2xfUFJFUkVRX1ZBU05QUklOVEZdLAorWworICBBQ19SRVFVSVJFKFtBQ19GVU5DX0FMTE9DQV0pCisgIEFDX1JFUVVJUkUoW0FDX1RZUEVfTE9OR19MT05HX0lOVF0pCisgIEFDX1JFUVVJUkUoW2d0X1RZUEVfV0NIQVJfVF0pCisgIEFDX1JFUVVJUkUoW2d0X1RZUEVfV0lOVF9UXSkKKyAgQUNfQ0hFQ0tfRlVOQ1MoW3NucHJpbnRmIHN0cm5sZW4gd2NzbGVuIHdjc25sZW4gbWJydG93YyB3Y3J0b21iXSkKKyAgZG5sIFVzZSB0aGUgX3NucHJpbnRmIGZ1bmN0aW9uIG9ubHkgaWYgaXQgaXMgZGVjbGFyZWQgKGJlY2F1c2Ugb24gTmV0QlNEIGl0CisgIGRubCBpcyBkZWZpbmVkIGFzIGEgd2VhayBhbGlhcyBvZiBzbnByaW50Zjsgd2UgcHJlZmVyIHRvIHVzZSB0aGUgbGF0dGVyKS4KKyAgQUNfQ0hFQ0tfREVDTFMoW19zbnByaW50Zl0sICwgLCBbWyNpbmNsdWRlIDxzdGRpby5oPl1dKQorICBkbmwgS25vd2luZyBEQkxfRVhQQklUMF9XT1JEIGFuZCBEQkxfRVhQQklUMF9CSVQgZW5hYmxlcyBhbiBvcHRpbWl6YXRpb24KKyAgZG5sIGluIHRoZSBjb2RlIGZvciBORUVEX1BSSU5URl9MT05HX0RPVUJMRSB8fCBORUVEX1BSSU5URl9ET1VCTEUuCisgIEFDX1JFUVVJUkUoW2dsX0RPVUJMRV9FWFBPTkVOVF9MT0NBVElPTl0pCisgIGRubCBXZSBjYW4gYXZvaWQgYSBsb3Qgb2YgY29kZSBieSBhc3N1bWluZyB0aGF0IHNucHJpbnRmJ3MgcmV0dXJuIHZhbHVlCisgIGRubCBjb25mb3JtcyB0byBJU08gQzk5LiBTbyBjaGVjayB0aGF0LgorICBBQ19SRVFVSVJFKFtnbF9TTlBSSU5URl9SRVRWQUxfQzk5XSkKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfc25wcmludGZfcmV0dmFsX2M5OSIgaW4KKyAgICAqeWVzKQorICAgICAgQUNfREVGSU5FKFtIQVZFX1NOUFJJTlRGX1JFVFZBTF9DOTldLCBbMV0sCisgICAgICAgIFtEZWZpbmUgaWYgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgc25wcmludGYgZnVuY3Rpb24gaXMgdGhlIG51bWJlciBvZgorICAgICAgICAgb2YgYnl0ZXMgKGV4Y2x1ZGluZyB0aGUgdGVybWluYXRpbmcgTlVMKSB0aGF0IHdvdWxkIGhhdmUgYmVlbiBwcm9kdWNlZAorICAgICAgICAgaWYgdGhlIGJ1ZmZlciBoYWQgYmVlbiBsYXJnZSBlbm91Z2guXSkKKyAgICAgIDs7CisgIGVzYWMKK10pCisKKyMgRXh0cmEgcHJlcmVxdWlzaXRlcyBvZiBsaWIvdmFzbnByaW50Zi5jIGZvciBzdXBwb3J0aW5nICdsb25nIGRvdWJsZScKKyMgYXJndW1lbnRzLgorQUNfREVGVU5fT05DRShbZ2xfUFJFUkVRX1ZBU05QUklOVEZfTE9OR19ET1VCTEVdLAorWworICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfTE9OR19ET1VCTEVdKQorICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfbG9uZ19kb3VibGUiIGluCisgICAgKnllcykKKyAgICAgIDs7CisgICAgKikKKyAgICAgIEFDX0RFRklORShbTkVFRF9QUklOVEZfTE9OR19ET1VCTEVdLCBbMV0sCisgICAgICAgIFtEZWZpbmUgaWYgdGhlIHZhc25wcmludGYgaW1wbGVtZW50YXRpb24gbmVlZHMgc3BlY2lhbCBjb2RlIGZvcgorICAgICAgICAgJ2xvbmcgZG91YmxlJyBhcmd1bWVudHMuXSkKKyAgICAgIDs7CisgIGVzYWMKK10pCisKKyMgRXh0cmEgcHJlcmVxdWlzaXRlcyBvZiBsaWIvdmFzbnByaW50Zi5jIGZvciBzdXBwb3J0aW5nIGluZmluaXRlICdkb3VibGUnCisjIGFyZ3VtZW50cy4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfVkFTTlBSSU5URl9JTkZJTklURV9ET1VCTEVdLAorWworICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfSU5GSU5JVEVdKQorICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGUiIGluCisgICAgKnllcykKKyAgICAgIDs7CisgICAgKikKKyAgICAgIEFDX0RFRklORShbTkVFRF9QUklOVEZfSU5GSU5JVEVfRE9VQkxFXSwgWzFdLAorICAgICAgICBbRGVmaW5lIGlmIHRoZSB2YXNucHJpbnRmIGltcGxlbWVudGF0aW9uIG5lZWRzIHNwZWNpYWwgY29kZSBmb3IKKyAgICAgICAgIGluZmluaXRlICdkb3VibGUnIGFyZ3VtZW50cy5dKQorICAgICAgOzsKKyAgZXNhYworXSkKKworIyBFeHRyYSBwcmVyZXF1aXNpdGVzIG9mIGxpYi92YXNucHJpbnRmLmMgZm9yIHN1cHBvcnRpbmcgaW5maW5pdGUgJ2xvbmcgZG91YmxlJworIyBhcmd1bWVudHMuCitBQ19ERUZVTihbZ2xfUFJFUkVRX1ZBU05QUklOVEZfSU5GSU5JVEVfTE9OR19ET1VCTEVdLAorWworICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfSU5GSU5JVEVfTE9OR19ET1VCTEVdKQorICBkbmwgVGhlcmUgaXMgbm8gbmVlZCB0byBzZXQgTkVFRF9QUklOVEZfSU5GSU5JVEVfTE9OR19ET1VCTEUgaWYKKyAgZG5sIE5FRURfUFJJTlRGX0xPTkdfRE9VQkxFIGlzIGFscmVhZHkgc2V0LgorICBBQ19SRVFVSVJFKFtnbF9QUkVSRVFfVkFTTlBSSU5URl9MT05HX0RPVUJMRV0pCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9sb25nX2RvdWJsZSIgaW4KKyAgICAqeWVzKQorICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlX2xvbmdfZG91YmxlIiBpbgorICAgICAgICAqeWVzKQorICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgQUNfREVGSU5FKFtORUVEX1BSSU5URl9JTkZJTklURV9MT05HX0RPVUJMRV0sIFsxXSwKKyAgICAgICAgICAgIFtEZWZpbmUgaWYgdGhlIHZhc25wcmludGYgaW1wbGVtZW50YXRpb24gbmVlZHMgc3BlY2lhbCBjb2RlIGZvcgorICAgICAgICAgICAgIGluZmluaXRlICdsb25nIGRvdWJsZScgYXJndW1lbnRzLl0pCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgIGVzYWMKK10pCisKKyMgRXh0cmEgcHJlcmVxdWlzaXRlcyBvZiBsaWIvdmFzbnByaW50Zi5jIGZvciBzdXBwb3J0aW5nIHRoZSAnYScgZGlyZWN0aXZlLgorQUNfREVGVU4oW2dsX1BSRVJFUV9WQVNOUFJJTlRGX0RJUkVDVElWRV9BXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX0RJUkVDVElWRV9BXSkKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9hIiBpbgorICAgICp5ZXMpCisgICAgICA7OworICAgICopCisgICAgICBBQ19ERUZJTkUoW05FRURfUFJJTlRGX0RJUkVDVElWRV9BXSwgWzFdLAorICAgICAgICBbRGVmaW5lIGlmIHRoZSB2YXNucHJpbnRmIGltcGxlbWVudGF0aW9uIG5lZWRzIHNwZWNpYWwgY29kZSBmb3IKKyAgICAgICAgIHRoZSAnYScgYW5kICdBJyBkaXJlY3RpdmVzLl0pCisgICAgICBBQ19DSEVDS19GVU5DUyhbbmxfbGFuZ2luZm9dKQorICAgICAgOzsKKyAgZXNhYworXSkKKworIyBFeHRyYSBwcmVyZXF1aXNpdGVzIG9mIGxpYi92YXNucHJpbnRmLmMgZm9yIHN1cHBvcnRpbmcgdGhlICdGJyBkaXJlY3RpdmUuCitBQ19ERUZVTihbZ2xfUFJFUkVRX1ZBU05QUklOVEZfRElSRUNUSVZFX0ZdLAorWworICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfRElSRUNUSVZFX0ZdKQorICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2YiIGluCisgICAgKnllcykKKyAgICAgIDs7CisgICAgKikKKyAgICAgIEFDX0RFRklORShbTkVFRF9QUklOVEZfRElSRUNUSVZFX0ZdLCBbMV0sCisgICAgICAgIFtEZWZpbmUgaWYgdGhlIHZhc25wcmludGYgaW1wbGVtZW50YXRpb24gbmVlZHMgc3BlY2lhbCBjb2RlIGZvcgorICAgICAgICAgdGhlICdGJyBkaXJlY3RpdmUuXSkKKyAgICAgIDs7CisgIGVzYWMKK10pCisKKyMgRXh0cmEgcHJlcmVxdWlzaXRlcyBvZiBsaWIvdmFzbnByaW50Zi5jIGZvciBzdXBwb3J0aW5nIHRoZSAnbHMnIGRpcmVjdGl2ZS4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfVkFTTlBSSU5URl9ESVJFQ1RJVkVfTFNdLAorWworICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfRElSRUNUSVZFX0xTXSkKKyAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9scyIgaW4KKyAgICAqeWVzKQorICAgICAgOzsKKyAgICAqKQorICAgICAgQUNfREVGSU5FKFtORUVEX1BSSU5URl9ESVJFQ1RJVkVfTFNdLCBbMV0sCisgICAgICAgIFtEZWZpbmUgaWYgdGhlIHZhc25wcmludGYgaW1wbGVtZW50YXRpb24gbmVlZHMgc3BlY2lhbCBjb2RlIGZvcgorICAgICAgICAgdGhlICdscycgZGlyZWN0aXZlLl0pCisgICAgICA7OworICBlc2FjCitdKQorCisjIEV4dHJhIHByZXJlcXVpc2l0ZXMgb2YgbGliL3Zhc25wcmludGYuYyBmb3Igc3VwcG9ydGluZyB0aGUgJyBmbGFnLgorQUNfREVGVU4oW2dsX1BSRVJFUV9WQVNOUFJJTlRGX0ZMQUdfR1JPVVBJTkddLAorWworICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfRkxBR19HUk9VUElOR10pCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2dyb3VwaW5nIiBpbgorICAgICp5ZXMpCisgICAgICA7OworICAgICopCisgICAgICBBQ19ERUZJTkUoW05FRURfUFJJTlRGX0ZMQUdfR1JPVVBJTkddLCBbMV0sCisgICAgICAgIFtEZWZpbmUgaWYgdGhlIHZhc25wcmludGYgaW1wbGVtZW50YXRpb24gbmVlZHMgc3BlY2lhbCBjb2RlIGZvciB0aGUKKyAgICAgICAgICcgZmxhZy5dKQorICAgICAgOzsKKyAgZXNhYworXSkKKworIyBFeHRyYSBwcmVyZXF1aXNpdGVzIG9mIGxpYi92YXNucHJpbnRmLmMgZm9yIHN1cHBvcnRpbmcgdGhlICctJyBmbGFnLgorQUNfREVGVU4oW2dsX1BSRVJFUV9WQVNOUFJJTlRGX0ZMQUdfTEVGVEFESlVTVF0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9GTEFHX0xFRlRBREpVU1RdKQorICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19sZWZ0YWRqdXN0IiBpbgorICAgICp5ZXMpCisgICAgICA7OworICAgICopCisgICAgICBBQ19ERUZJTkUoW05FRURfUFJJTlRGX0ZMQUdfTEVGVEFESlVTVF0sIFsxXSwKKyAgICAgICAgW0RlZmluZSBpZiB0aGUgdmFzbnByaW50ZiBpbXBsZW1lbnRhdGlvbiBuZWVkcyBzcGVjaWFsIGNvZGUgZm9yIHRoZQorICAgICAgICAgJy0nIGZsYWcuXSkKKyAgICAgIDs7CisgIGVzYWMKK10pCisKKyMgRXh0cmEgcHJlcmVxdWlzaXRlcyBvZiBsaWIvdmFzbnByaW50Zi5jIGZvciBzdXBwb3J0aW5nIHRoZSAwIGZsYWcuCitBQ19ERUZVTihbZ2xfUFJFUkVRX1ZBU05QUklOVEZfRkxBR19aRVJPXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX0ZMQUdfWkVST10pCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX3plcm8iIGluCisgICAgKnllcykKKyAgICAgIDs7CisgICAgKikKKyAgICAgIEFDX0RFRklORShbTkVFRF9QUklOVEZfRkxBR19aRVJPXSwgWzFdLAorICAgICAgICBbRGVmaW5lIGlmIHRoZSB2YXNucHJpbnRmIGltcGxlbWVudGF0aW9uIG5lZWRzIHNwZWNpYWwgY29kZSBmb3IgdGhlCisgICAgICAgICAwIGZsYWcuXSkKKyAgICAgIDs7CisgIGVzYWMKK10pCisKKyMgRXh0cmEgcHJlcmVxdWlzaXRlcyBvZiBsaWIvdmFzbnByaW50Zi5jIGZvciBzdXBwb3J0aW5nIGxhcmdlIHByZWNpc2lvbnMuCitBQ19ERUZVTihbZ2xfUFJFUkVRX1ZBU05QUklOVEZfUFJFQ0lTSU9OXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX1BSRUNJU0lPTl0pCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9wcmVjaXNpb24iIGluCisgICAgKnllcykKKyAgICAgIDs7CisgICAgKikKKyAgICAgIEFDX0RFRklORShbTkVFRF9QUklOVEZfVU5CT1VOREVEX1BSRUNJU0lPTl0sIFsxXSwKKyAgICAgICAgW0RlZmluZSBpZiB0aGUgdmFzbnByaW50ZiBpbXBsZW1lbnRhdGlvbiBuZWVkcyBzcGVjaWFsIGNvZGUgZm9yCisgICAgICAgICBzdXBwb3J0aW5nIGxhcmdlIHByZWNpc2lvbnMgd2l0aG91dCBhcmJpdHJhcnkgYm91bmRzLl0pCisgICAgICBBQ19ERUZJTkUoW05FRURfUFJJTlRGX0RPVUJMRV0sIFsxXSwKKyAgICAgICAgW0RlZmluZSBpZiB0aGUgdmFzbnByaW50ZiBpbXBsZW1lbnRhdGlvbiBuZWVkcyBzcGVjaWFsIGNvZGUgZm9yCisgICAgICAgICAnZG91YmxlJyBhcmd1bWVudHMuXSkKKyAgICAgIEFDX0RFRklORShbTkVFRF9QUklOVEZfTE9OR19ET1VCTEVdLCBbMV0sCisgICAgICAgIFtEZWZpbmUgaWYgdGhlIHZhc25wcmludGYgaW1wbGVtZW50YXRpb24gbmVlZHMgc3BlY2lhbCBjb2RlIGZvcgorICAgICAgICAgJ2xvbmcgZG91YmxlJyBhcmd1bWVudHMuXSkKKyAgICAgIDs7CisgIGVzYWMKK10pCisKKyMgRXh0cmEgcHJlcmVxdWlzaXRlcyBvZiBsaWIvdmFzbnByaW50Zi5jIGZvciBzdXJ2aXZpbmcgb3V0LW9mLW1lbW9yeQorIyBjb25kaXRpb25zLgorQUNfREVGVU4oW2dsX1BSRVJFUV9WQVNOUFJJTlRGX0VOT01FTV0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9FTk9NRU1dKQorICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtIiBpbgorICAgICp5ZXMpCisgICAgICA7OworICAgICopCisgICAgICBBQ19ERUZJTkUoW05FRURfUFJJTlRGX0VOT01FTV0sIFsxXSwKKyAgICAgICAgW0RlZmluZSBpZiB0aGUgdmFzbnByaW50ZiBpbXBsZW1lbnRhdGlvbiBuZWVkcyBzcGVjaWFsIGNvZGUgZm9yCisgICAgICAgICBzdXJ2aXZpbmcgb3V0LW9mLW1lbW9yeSBjb25kaXRpb25zLl0pCisgICAgICBBQ19ERUZJTkUoW05FRURfUFJJTlRGX0RPVUJMRV0sIFsxXSwKKyAgICAgICAgW0RlZmluZSBpZiB0aGUgdmFzbnByaW50ZiBpbXBsZW1lbnRhdGlvbiBuZWVkcyBzcGVjaWFsIGNvZGUgZm9yCisgICAgICAgICAnZG91YmxlJyBhcmd1bWVudHMuXSkKKyAgICAgIEFDX0RFRklORShbTkVFRF9QUklOVEZfTE9OR19ET1VCTEVdLCBbMV0sCisgICAgICAgIFtEZWZpbmUgaWYgdGhlIHZhc25wcmludGYgaW1wbGVtZW50YXRpb24gbmVlZHMgc3BlY2lhbCBjb2RlIGZvcgorICAgICAgICAgJ2xvbmcgZG91YmxlJyBhcmd1bWVudHMuXSkKKyAgICAgIDs7CisgIGVzYWMKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvdmFzbnByaW50Zi5jIGluY2x1ZGluZyBhbGwgZXh0cmFzIGZvciBQT1NJWCBjb21wbGlhbmNlLgorQUNfREVGVU4oW2dsX1BSRVJFUV9WQVNOUFJJTlRGX1dJVEhfRVhUUkFTXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfUFJFUkVRX1ZBU05QUklOVEZdKQorICBnbF9QUkVSRVFfVkFTTlBSSU5URl9MT05HX0RPVUJMRQorICBnbF9QUkVSRVFfVkFTTlBSSU5URl9JTkZJTklURV9ET1VCTEUKKyAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfSU5GSU5JVEVfTE9OR19ET1VCTEUKKyAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfRElSRUNUSVZFX0EKKyAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfRElSRUNUSVZFX0YKKyAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfRElSRUNUSVZFX0xTCisgIGdsX1BSRVJFUV9WQVNOUFJJTlRGX0ZMQUdfR1JPVVBJTkcKKyAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfRkxBR19MRUZUQURKVVNUCisgIGdsX1BSRVJFUV9WQVNOUFJJTlRGX0ZMQUdfWkVSTworICBnbF9QUkVSRVFfVkFTTlBSSU5URl9QUkVDSVNJT04KKyAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfRU5PTUVNCitdKQorCisjIFByZXJlcXVpc2l0ZXMgb2YgbGliL2FzbnByaW50Zi5jLgorQUNfREVGVU4oW2dsX1BSRVJFUV9BU05QUklOVEZdLAorWworXSkKZGlmZiAtLWdpdCBhL200L3ZmcHJpbnRmLXBvc2l4Lm00IGIvbTQvdmZwcmludGYtcG9zaXgubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQxYmQ1NwotLS0gL2Rldi9udWxsCisrKyBiL200L3ZmcHJpbnRmLXBvc2l4Lm00CkBAIC0wLDAgKzEsMTEwIEBACisjIHZmcHJpbnRmLXBvc2l4Lm00IHNlcmlhbCAxNAorZG5sIENvcHlyaWdodCAoQykgMjAwNy0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9GVU5DX1ZGUFJJTlRGX1BPU0lYXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX1NJWkVTX0M5OV0pCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9MT05HX0RPVUJMRV0pCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9JTkZJTklURV0pCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9JTkZJTklURV9MT05HX0RPVUJMRV0pCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9ESVJFQ1RJVkVfQV0pCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9ESVJFQ1RJVkVfRl0pCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9ESVJFQ1RJVkVfTl0pCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9ESVJFQ1RJVkVfTFNdKQorICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfUE9TSVRJT05TXSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX0ZMQUdfR1JPVVBJTkddKQorICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfRkxBR19MRUZUQURKVVNUXSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX0ZMQUdfWkVST10pCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9QUkVDSVNJT05dKQorICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfRU5PTUVNXSkKKyAgZ2xfY3ZfZnVuY192ZnByaW50Zl9wb3NpeD1ubworICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfc2l6ZXNfYzk5IiBpbgorICAgICp5ZXMpCisgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfbG9uZ19kb3VibGUiIGluCisgICAgICAgICp5ZXMpCisgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlIiBpbgorICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlX2xvbmdfZG91YmxlIiBpbgorICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2EiIGluCisgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9mIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9uIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2xzIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9wb3NpdGlvbnMiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19ncm91cGluZyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfbGVmdGFkanVzdCIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZmxhZ196ZXJvIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX3ByZWNpc2lvbiIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2Vub21lbSIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHZmcHJpbnRmIGV4aXN0cyBhbmQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFscmVhZHkgUE9TSVggY29tcGxpYW50LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfdmZwcmludGZfcG9zaXg9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgIGVzYWMKKyAgaWYgdGVzdCAkZ2xfY3ZfZnVuY192ZnByaW50Zl9wb3NpeCA9IG5vOyB0aGVuCisgICAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfTE9OR19ET1VCTEUKKyAgICBnbF9QUkVSRVFfVkFTTlBSSU5URl9JTkZJTklURV9ET1VCTEUKKyAgICBnbF9QUkVSRVFfVkFTTlBSSU5URl9JTkZJTklURV9MT05HX0RPVUJMRQorICAgIGdsX1BSRVJFUV9WQVNOUFJJTlRGX0RJUkVDVElWRV9BCisgICAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfRElSRUNUSVZFX0YKKyAgICBnbF9QUkVSRVFfVkFTTlBSSU5URl9ESVJFQ1RJVkVfTFMKKyAgICBnbF9QUkVSRVFfVkFTTlBSSU5URl9GTEFHX0dST1VQSU5HCisgICAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfRkxBR19MRUZUQURKVVNUCisgICAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfRkxBR19aRVJPCisgICAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfUFJFQ0lTSU9OCisgICAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfRU5PTUVNCisgICAgZ2xfUkVQTEFDRV9WQVNOUFJJTlRGCisgICAgZ2xfUkVQTEFDRV9WRlBSSU5URgorICBmaQorXSkKKworQUNfREVGVU4oW2dsX1JFUExBQ0VfVkZQUklOVEZdLAorWworICBBQ19SRVFVSVJFKFtnbF9TVERJT19IX0RFRkFVTFRTXSkKKyAgQUNfTElCT0JKKFt2ZnByaW50Zl0pCisgIFJFUExBQ0VfVkZQUklOVEY9MQorICBBQ19ERUZJTkUoW1JFUExBQ0VfVkZQUklOVEZfUE9TSVhdLCBbMV0sCisgICAgW0RlZmluZSBpZiB2ZnByaW50ZiBpcyBvdmVycmlkZGVuIGJ5IGEgUE9TSVggY29tcGxpYW50IGdudWxpYiBpbXBsZW1lbnRhdGlvbi5dKQorICBnbF9QUkVSRVFfVkZQUklOVEYKK10pCisKK0FDX0RFRlVOKFtnbF9QUkVSRVFfVkZQUklOVEZdLCBbOl0pCmRpZmYgLS1naXQgYS9tNC92c25wcmludGYtcG9zaXgubTQgYi9tNC92c25wcmludGYtcG9zaXgubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U5OWU1YQotLS0gL2Rldi9udWxsCisrKyBiL200L3ZzbnByaW50Zi1wb3NpeC5tNApAQCAtMCwwICsxLDEyNyBAQAorIyB2c25wcmludGYtcG9zaXgubTQgc2VyaWFsIDE1CitkbmwgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0ZVTkNfVlNOUFJJTlRGX1BPU0lYXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX1NJWkVTX0M5OV0pCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9MT05HX0RPVUJMRV0pCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9JTkZJTklURV0pCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9JTkZJTklURV9MT05HX0RPVUJMRV0pCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9ESVJFQ1RJVkVfQV0pCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9ESVJFQ1RJVkVfRl0pCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9ESVJFQ1RJVkVfTl0pCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9ESVJFQ1RJVkVfTFNdKQorICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfUE9TSVRJT05TXSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX0ZMQUdfR1JPVVBJTkddKQorICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfRkxBR19MRUZUQURKVVNUXSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX0ZMQUdfWkVST10pCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9QUkVDSVNJT05dKQorICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfRU5PTUVNXSkKKyAgZ2xfY3ZfZnVuY192c25wcmludGZfcG9zaXg9bm8KKyAgQUNfQ0hFQ0tfRlVOQ1MoW3ZzbnByaW50Zl0pCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfdnNucHJpbnRmID0geWVzOyB0aGVuCisgICAgZG5sIFRoZXNlIHRlc3RzIHVzZSB2c25wcmludGYoKSBpZiBzbnByaW50ZigpIGRvZXMgbm90IGV4aXN0LgorICAgIGdsX1NOUFJJTlRGX1RSVU5DQVRJT05fQzk5CisgICAgZ2xfU05QUklOVEZfUkVUVkFMX0M5OQorICAgIGdsX1NOUFJJTlRGX0RJUkVDVElWRV9OCisgICAgZ2xfU05QUklOVEZfU0laRTEKKyAgICBnbF9WU05QUklOVEZfWkVST1NJWkVfQzk5CisgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX3NpemVzX2M5OSIgaW4KKyAgICAgICp5ZXMpCisgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9sb25nX2RvdWJsZSIgaW4KKyAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlIiBpbgorICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZV9sb25nX2RvdWJsZSIgaW4KKyAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfYSIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9mIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbiIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbHMiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9wb3NpdGlvbnMiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfZ3JvdXBpbmciIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19sZWZ0YWRqdXN0IiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZmxhZ196ZXJvIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9wcmVjaXNpb24iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19zbnByaW50Zl90cnVuY2F0aW9uX2M5OSIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19zbnByaW50Zl9yZXR2YWxfYzk5IiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfc25wcmludGZfZGlyZWN0aXZlX24iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3NucHJpbnRmX3NpemUxIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ZzbnByaW50Zl96ZXJvc2l6ZV9jOTkiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHZzbnByaW50ZiBleGlzdHMgYW5kIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWxyZWFkeSBQT1NJWCBjb21wbGlhbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfdnNucHJpbnRmX3Bvc2l4PXllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgaWYgdGVzdCAkZ2xfY3ZfZnVuY192c25wcmludGZfcG9zaXggPSBubzsgdGhlbgorICAgIGdsX1BSRVJFUV9WQVNOUFJJTlRGX0xPTkdfRE9VQkxFCisgICAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfSU5GSU5JVEVfRE9VQkxFCisgICAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfSU5GSU5JVEVfTE9OR19ET1VCTEUKKyAgICBnbF9QUkVSRVFfVkFTTlBSSU5URl9ESVJFQ1RJVkVfQQorICAgIGdsX1BSRVJFUV9WQVNOUFJJTlRGX0RJUkVDVElWRV9GCisgICAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfRElSRUNUSVZFX0xTCisgICAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfRkxBR19HUk9VUElORworICAgIGdsX1BSRVJFUV9WQVNOUFJJTlRGX0ZMQUdfTEVGVEFESlVTVAorICAgIGdsX1BSRVJFUV9WQVNOUFJJTlRGX0ZMQUdfWkVSTworICAgIGdsX1BSRVJFUV9WQVNOUFJJTlRGX1BSRUNJU0lPTgorICAgIGdsX1BSRVJFUV9WQVNOUFJJTlRGX0VOT01FTQorICAgIGdsX1JFUExBQ0VfVkFTTlBSSU5URgorICAgIGdsX1JFUExBQ0VfVlNOUFJJTlRGCisgIGZpCitdKQpkaWZmIC0tZ2l0IGEvbTQvdnNucHJpbnRmLm00IGIvbTQvdnNucHJpbnRmLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZWM1N2IKLS0tIC9kZXYvbnVsbAorKysgYi9tNC92c25wcmludGYubTQKQEAgLTAsMCArMSw1NCBAQAorIyB2c25wcmludGYubTQgc2VyaWFsIDYKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCwgMjAwNy0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBMaWJpbnRsIDAuMTcgd2lsbCByZXBsYWNlIHZzbnByaW50ZiBvbmx5IGlmIGl0IGRvZXMgbm90IHN1cHBvcnQgJTEkcywKK2RubCBidXQgZGVmZXJzIHRvIGFueSBnbnVsaWIgdnNucHJpbnRmIHJlcGxhY2VtZW50cy4gIFRoZXJlZm9yZSwgZ251bGliCitkbmwgbXVzdCBndWFyYW50ZWUgdGhhdCB0aGUgZGVjaXNpb24gZm9yIHJlcGxhY2luZyB2c25wcmludGYgaXMgYSBzdXBlcnNldAorZG5sIG9mIHRoZSByZWFzb25zIGNoZWNrZWQgYnkgbGliaW50bC4KK0FDX0RFRlVOKFtnbF9GVU5DX1ZTTlBSSU5URl0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1NURElPX0hfREVGQVVMVFNdKQorICBnbF9jdl9mdW5jX3ZzbnByaW50Zl91c2FibGU9bm8KKyAgQUNfQ0hFQ0tfRlVOQ1MoW3ZzbnByaW50Zl0pCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfdnNucHJpbnRmID0geWVzOyB0aGVuCisgICAgZ2xfU05QUklOVEZfU0laRTEKKyAgICBjYXNlICIkZ2xfY3ZfZnVuY19zbnByaW50Zl9zaXplMSIgaW4KKyAgICAgICp5ZXMpCisgICAgICAgIGdsX1NOUFJJTlRGX1JFVFZBTF9DOTkKKyAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfc25wcmludGZfcmV0dmFsX2M5OSIgaW4KKyAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgZ2xfUFJJTlRGX1BPU0lUSU9OUworICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX3Bvc2l0aW9ucyIgaW4KKyAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ZzbnByaW50Zl91c2FibGU9eWVzCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfdnNucHJpbnRmX3VzYWJsZSA9IG5vOyB0aGVuCisgICAgZ2xfUkVQTEFDRV9WU05QUklOVEYKKyAgZmkKKyAgQUNfQ0hFQ0tfREVDTFNfT05DRShbdnNucHJpbnRmXSkKKyAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3ZzbnByaW50ZiA9IG5vOyB0aGVuCisgICAgSEFWRV9ERUNMX1ZTTlBSSU5URj0wCisgIGZpCitdKQorCitBQ19ERUZVTihbZ2xfUkVQTEFDRV9WU05QUklOVEZdLAorWworICBBQ19SRVFVSVJFKFtnbF9TVERJT19IX0RFRkFVTFRTXSkKKyAgQUNfTElCT0JKKFt2c25wcmludGZdKQorICBpZiB0ZXN0ICRhY19jdl9mdW5jX3ZzbnByaW50ZiA9IHllczsgdGhlbgorICAgIFJFUExBQ0VfVlNOUFJJTlRGPTEKKyAgZmkKKyAgZ2xfUFJFUkVRX1ZTTlBSSU5URgorXSkKKworIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi92c25wcmludGYuYy4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfVlNOUFJJTlRGXSwgWzpdKQpkaWZmIC0tZ2l0IGEvbTQvdnNwcmludGYtcG9zaXgubTQgYi9tNC92c3ByaW50Zi1wb3NpeC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmE4NjkyCi0tLSAvZGV2L251bGwKKysrIGIvbTQvdnNwcmludGYtcG9zaXgubTQKQEAgLTAsMCArMSwxMDggQEAKKyMgdnNwcmludGYtcG9zaXgubTQgc2VyaWFsIDEyCitkbmwgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0ZVTkNfVlNQUklOVEZfUE9TSVhdLAorWworICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfU0laRVNfQzk5XSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX0xPTkdfRE9VQkxFXSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX0lORklOSVRFXSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX0lORklOSVRFX0xPTkdfRE9VQkxFXSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX0RJUkVDVElWRV9BXSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX0RJUkVDVElWRV9GXSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX0RJUkVDVElWRV9OXSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX0RJUkVDVElWRV9MU10pCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9QT1NJVElPTlNdKQorICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfRkxBR19HUk9VUElOR10pCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9GTEFHX0xFRlRBREpVU1RdKQorICBBQ19SRVFVSVJFKFtnbF9QUklOVEZfRkxBR19aRVJPXSkKKyAgQUNfUkVRVUlSRShbZ2xfUFJJTlRGX1BSRUNJU0lPTl0pCisgIEFDX1JFUVVJUkUoW2dsX1BSSU5URl9FTk9NRU1dKQorICBnbF9jdl9mdW5jX3ZzcHJpbnRmX3Bvc2l4PW5vCisgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9zaXplc19jOTkiIGluCisgICAgKnllcykKKyAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9sb25nX2RvdWJsZSIgaW4KKyAgICAgICAgKnllcykKKyAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGUiIGluCisgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGVfbG9uZ19kb3VibGUiIGluCisgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfYSIgaW4KKyAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2YiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX24iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbHMiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX3Bvc2l0aW9ucyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2dyb3VwaW5nIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19sZWZ0YWRqdXN0IiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX3plcm8iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfcHJlY2lzaW9uIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdnNwcmludGYgZXhpc3RzIGFuZCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWxyZWFkeSBQT1NJWCBjb21wbGlhbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY192c3ByaW50Zl9wb3NpeD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgZXNhYworICBpZiB0ZXN0ICRnbF9jdl9mdW5jX3ZzcHJpbnRmX3Bvc2l4ID0gbm87IHRoZW4KKyAgICBnbF9QUkVSRVFfVkFTTlBSSU5URl9MT05HX0RPVUJMRQorICAgIGdsX1BSRVJFUV9WQVNOUFJJTlRGX0lORklOSVRFX0RPVUJMRQorICAgIGdsX1BSRVJFUV9WQVNOUFJJTlRGX0lORklOSVRFX0xPTkdfRE9VQkxFCisgICAgZ2xfUFJFUkVRX1ZBU05QUklOVEZfRElSRUNUSVZFX0EKKyAgICBnbF9QUkVSRVFfVkFTTlBSSU5URl9ESVJFQ1RJVkVfRgorICAgIGdsX1BSRVJFUV9WQVNOUFJJTlRGX0RJUkVDVElWRV9MUworICAgIGdsX1BSRVJFUV9WQVNOUFJJTlRGX0ZMQUdfR1JPVVBJTkcKKyAgICBnbF9QUkVSRVFfVkFTTlBSSU5URl9GTEFHX0xFRlRBREpVU1QKKyAgICBnbF9QUkVSRVFfVkFTTlBSSU5URl9GTEFHX1pFUk8KKyAgICBnbF9QUkVSRVFfVkFTTlBSSU5URl9QUkVDSVNJT04KKyAgICBnbF9QUkVSRVFfVkFTTlBSSU5URl9FTk9NRU0KKyAgICBnbF9SRVBMQUNFX1ZBU05QUklOVEYKKyAgICBnbF9SRVBMQUNFX1ZTUFJJTlRGCisgIGZpCitdKQorCitBQ19ERUZVTihbZ2xfUkVQTEFDRV9WU1BSSU5URl0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1NURElPX0hfREVGQVVMVFNdKQorICBBQ19MSUJPQkooW3ZzcHJpbnRmXSkKKyAgUkVQTEFDRV9WU1BSSU5URj0xCisgIGdsX1BSRVJFUV9WU1BSSU5URgorXSkKKworQUNfREVGVU4oW2dsX1BSRVJFUV9WU1BSSU5URl0sIFs6XSkKZGlmZiAtLWdpdCBhL200L3dhaXQtcHJvY2Vzcy5tNCBiL200L3dhaXQtcHJvY2Vzcy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDUyNGIwCi0tLSAvZGV2L251bGwKKysrIGIvbTQvd2FpdC1wcm9jZXNzLm00CkBAIC0wLDAgKzEsMTIgQEAKKyMgd2FpdC1wcm9jZXNzLm00IHNlcmlhbCA2CitkbmwgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX1dBSVRfUFJPQ0VTU10sCitbCisgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi93YWl0LXByb2Nlc3MuYy4KKyAgQUNfUkVRVUlSRShbZ3RfVFlQRV9TSUdfQVRPTUlDX1RdKQorICBBQ19DSEVDS19GVU5DUyhbd2FpdGlkXSkKK10pCmRpZmYgLS1naXQgYS9tNC93YWl0cGlkLm00IGIvbTQvd2FpdHBpZC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmE4M2JiCi0tLSAvZGV2L251bGwKKysrIGIvbTQvd2FpdHBpZC5tNApAQCAtMCwwICsxLDE0IEBACisjIHdhaXRwaWQubTQgc2VyaWFsIDIKK2RubCBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ2xfRlVOQ19XQUlUUElEXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorICBIQVZFX1dBSVRQSUQ9MQorICBjYXNlICRob3N0X29zIGluCisgICAgbWluZ3cqKSBIQVZFX1dBSVRQSUQ9MCA7OworICBlc2FjCitdKQpkaWZmIC0tZ2l0IGEvbTQvd2Fybi1vbi11c2UubTQgYi9tNC93YXJuLW9uLXVzZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzc4MDJlCi0tLSAvZGV2L251bGwKKysrIGIvbTQvd2Fybi1vbi11c2UubTQKQEAgLTAsMCArMSw0NyBAQAorIyB3YXJuLW9uLXVzZS5tNCBzZXJpYWwgNQorZG5sIENvcHlyaWdodCAoQykgMjAxMC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgZ2xfV0FSTl9PTl9VU0VfUFJFUEFSRShJTkNMVURFUywgTkFNRVMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGb3IgZWFjaCB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBlbGVtZW50IGluIHRoZSBsaXN0IG9mIE5BTUVTLCBkZWZpbmUKKyMgSEFWRV9SQVdfREVDTF9uYW1lIGlmIHRoZSBmdW5jdGlvbiBoYXMgYSBkZWNsYXJhdGlvbiBhbW9uZyBJTkNMVURFUworIyBldmVuIGFmdGVyIGJlaW5nIHVuZGVmaW5lZCBhcyBhIG1hY3JvLgorIworIyBTZWUgd2Fybi1vbi11c2UuaCBmb3Igc29tZSBoaW50cyBvbiBob3cgdG8gcG9pc29uIGZ1bmN0aW9uIG5hbWVzLCBhcworIyB3ZWxsIGFzIGlkZWFzIG9uIHBvaXNvbmluZyBnbG9iYWwgdmFyaWFibGVzIGFuZCBtYWNyb3MuICBOQU1FUyBtYXkKKyMgaW5jbHVkZSBnbG9iYWwgdmFyaWFibGVzLCBidXQgcmVtZW1iZXIgdGhhdCBvbmx5IGZ1bmN0aW9ucyB3b3JrIHdpdGgKKyMgX0dMX1dBUk5fT05fVVNFLiAgVHlwaWNhbGx5LCBJTkNMVURFUyBvbmx5IG5lZWRzIHRvIGxpc3QgYSBzaW5nbGUKKyMgaGVhZGVyLCBidXQgaWYgdGhlIHJlcGxhY2VtZW50IGhlYWRlciBwdWxscyBpbiBvdGhlciBoZWFkZXJzIGJlY2F1c2UKKyMgc29tZSBzeXN0ZW1zIGRlY2xhcmUgZnVuY3Rpb25zIGluIHRoZSB3cm9uZyBoZWFkZXIsIHRoZW4gSU5DTFVERVMKKyMgc2hvdWxkIGRvIGxpa2V3aXNlLgorIworIyBJdCBpcyBnZW5lcmFsbHkgc2FmZSB0byBhc3N1bWUgZGVjbGFyYXRpb25zIGZvciBmdW5jdGlvbnMgZGVjbGFyZWQKKyMgaW4gdGhlIGludGVyc2VjdGlvbiBvZiBDODkgYW5kIEMxMSAoc3VjaCBhcyBwcmludGYpIHdpdGhvdXQKKyMgbmVlZGluZyBnbF9XQVJOX09OX1VTRV9QUkVQQVJFLgorQUNfREVGVU4oW2dsX1dBUk5fT05fVVNFX1BSRVBBUkVdLAorWworICBtNF9mb3JlYWNoX3coW2dsX2RlY2xdLCBbJDJdLAorICAgIFtBSF9URU1QTEFURShbSEFWRV9SQVdfREVDTF9dQVNfVFJfQ1BQKG00X2RlZm4oW2dsX2RlY2xdKSksCisgICAgICBbRGVmaW5lIHRvIDEgaWYgXW00X2RlZm4oW2dsX2RlY2xdKVsgaXMgZGVjbGFyZWQgZXZlbiBhZnRlcgorICAgICAgIHVuZGVmaW5pbmcgbWFjcm9zLl0pXSlkbmwKK2RubCBGSVhNRTogZ2xfU3ltYm9sIG11c3QgYmUgdXNlZCB1bnF1b3RlZCB1bnRpbCB3ZSBjYW4gYXNzdW1lCitkbmwgYXV0b2NvbmYgMi42NCBvciBuZXdlci4KKyAgZm9yIGdsX2Z1bmMgaW4gbTRfZmxhdHRlbihbJDJdKTsgZG8KKyAgICBBU19WQVJfUFVTSERFRihbZ2xfU3ltYm9sXSwgW2dsX2N2X2hhdmVfcmF3X2RlY2xfJGdsX2Z1bmNdKWRubAorICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyICRnbF9mdW5jIGlzIGRlY2xhcmVkIHdpdGhvdXQgYSBtYWNyb10sCisgICAgICBnbF9TeW1ib2wsCisgICAgICBbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbJDFdLAorW0AlOkB1bmRlZiAkZ2xfZnVuYworICAodm9pZCkgJGdsX2Z1bmM7XSldLAorICAgICAgICBbQVNfVkFSX1NFVChnbF9TeW1ib2wsIFt5ZXNdKV0sIFtBU19WQVJfU0VUKGdsX1N5bWJvbCwgW25vXSldKV0pCisgICAgQVNfVkFSX0lGKGdsX1N5bWJvbCwgW3llc10sCisgICAgICBbQUNfREVGSU5FX1VOUVVPVEVEKEFTX1RSX0NQUChbSEFWRV9SQVdfREVDTF8kZ2xfZnVuY10pLCBbMV0pCisgICAgICAgZG5sIHNob3J0Y3V0IC0gaWYgdGhlIHJhdyBkZWNsYXJhdGlvbiBleGlzdHMsIHRoZW4gc2V0IGEgY2FjaGUKKyAgICAgICBkbmwgdmFyaWFibGUgdG8gYWxsb3cgc2tpcHBpbmcgYW55IGxhdGVyIEFDX0NIRUNLX0RFQ0wgZWZmb3J0cworICAgICAgIGV2YWwgYWNfY3ZfaGF2ZV9kZWNsXyRnbF9mdW5jPXllc10pCisgICAgQVNfVkFSX1BPUERFRihbZ2xfU3ltYm9sXSlkbmwKKyAgZG9uZQorXSkKZGlmZiAtLWdpdCBhL200L3dhcm5pbmcubTQgYi9tNC93YXJuaW5nLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTM5YmVjLi4wMDAwMDAwCi0tLSBhL200L3dhcm5pbmcubTQKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0jIEZpbmRpbmcgdmFsaWQgd2FybmluZyBmbGFncyBmb3IgdGhlIEMgQ29tcGlsZXIuICAgICAgICAgICAtKi1BdXRvY29uZi0qLQotIwotIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0jIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSMgMDIxMTAtMTMwMSAgVVNBCi0KLSMgc2VyaWFsIDEKLQotQUNfREVGVU4oW0JJU09OX1dBUk5JTkddLAotW0FDX01TR19DSEVDS0lORyh3aGV0aGVyIGNvbXBpbGVyIGFjY2VwdHMgJDEpCi1BQ19TVUJTVChXQVJOSU5HX0NGTEFHUykKLWFjX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotQ0ZMQUdTPSIkQ0ZMQUdTICQxIgotQUNfVFJZX0NPTVBJTEUoLAotW2ludCB4O10sCi1XQVJOSU5HX0NGTEFHUz0iJFdBUk5JTkdfQ0ZMQUdTICQxIgotQUNfTVNHX1JFU1VMVCh5ZXMpLAotQUNfTVNHX1JFU1VMVChubykpCi1DRkxBR1M9IiRhY19zYXZlX0NGTEFHUyJdKQpkaWZmIC0tZ2l0IGEvbTQvd2FybmluZ3MubTQgYi9tNC93YXJuaW5ncy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGI4Mjk0Ci0tLSAvZGV2L251bGwKKysrIGIvbTQvd2FybmluZ3MubTQKQEAgLTAsMCArMSw2MSBAQAorIyB3YXJuaW5ncy5tNCBzZXJpYWwgNworZG5sIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIFNpbW9uIEpvc2Vmc3NvbgorCisjIGdsX0FTX1ZBUl9BUFBFTkQoVkFSLCBWQUxVRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm92aWRlIHRoZSBmdW5jdGlvbmFsaXR5IG9mIEFTX1ZBUl9BUFBFTkQgaWYgQXV0b2NvbmYgZG9lcyBub3QgaGF2ZSBpdC4KK200X2lmZGVmKFtBU19WQVJfQVBQRU5EXSwKK1ttNF9jb3B5KFtBU19WQVJfQVBQRU5EXSwgW2dsX0FTX1ZBUl9BUFBFTkRdKV0sCitbbTRfZGVmaW5lKFtnbF9BU19WQVJfQVBQRU5EXSwKK1tBU19WQVJfU0VUKFskMV0sIFtBU19WQVJfR0VUKFskMV0pJDJdKV0pXSkKKworCisjIGdsX0NPTVBJTEVSX09QVElPTl9JRihPUFRJT04sIFtJRi1TVVBQT1JURURdLCBbSUYtTk9ULVNVUFBPUlRFRF0sCisjICAgICAgICAgICAgICAgICAgICAgICBbUFJPR1JBTSA9IEFDX0xBTkdfUFJPR1JBTSgpXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIE9QVElPTiB3aGVuIGNvbXBpbGluZyBQUk9HUkFNLgorIworIyBGSVhNRTogZ2xfV2FybiBtdXN0IGJlIHVzZWQgdW5xdW90ZWQgdW50aWwgd2UgY2FuIGFzc3VtZSBBdXRvY29uZgorIyAyLjY0IG9yIG5ld2VyLgorQUNfREVGVU4oW2dsX0NPTVBJTEVSX09QVElPTl9JRl0sCitbQVNfVkFSX1BVU0hERUYoW2dsX1dhcm5dLCBbZ2xfY3Zfd2Fybl9bXV9BQ19MQU5HX0FCQlJFVltdXyQxXSlkbmwKK0FTX1ZBUl9QVVNIREVGKFtnbF9GbGFnc10sIFtfQUNfTEFOR19QUkVGSVhbXUZMQUdTXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIF9BQ19MQU5HIGNvbXBpbGVyIGhhbmRsZXMgJDFdLCBtNF9kZWZuKFtnbF9XYXJuXSksIFsKKyAgZ2xfc2F2ZV9jb21waWxlcl9GTEFHUz0iJGdsX0ZsYWdzIgorICBnbF9BU19WQVJfQVBQRU5EKG00X2RlZm4oW2dsX0ZsYWdzXSksIFsiICQxIl0pCisgIEFDX0NPTVBJTEVfSUZFTFNFKFttNF9kZWZhdWx0KFskNF0sIFtBQ19MQU5HX1BST0dSQU0oW10pXSldLAorICAgICAgICAgICAgICAgICAgICBbQVNfVkFSX1NFVChnbF9XYXJuLCBbeWVzXSldLAorICAgICAgICAgICAgICAgICAgICBbQVNfVkFSX1NFVChnbF9XYXJuLCBbbm9dKV0pCisgIGdsX0ZsYWdzPSIkZ2xfc2F2ZV9jb21waWxlcl9GTEFHUyIKK10pCitBU19WQVJfSUYoZ2xfV2FybiwgW3llc10sIFskMl0sIFskM10pCitBU19WQVJfUE9QREVGKFtnbF9GbGFnc10pZG5sCitBU19WQVJfUE9QREVGKFtnbF9XYXJuXSlkbmwKK10pCisKKworIyBnbF9XQVJOX0FERChPUFRJT04sIFtWQVJJQUJMRSA9IFdBUk5fQ0ZMQUdTXSwKKyMgICAgICAgICAgICAgW1BST0dSQU0gPSBBQ19MQU5HX1BST0dSQU0oKV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBZGRzIHBhcmFtZXRlciB0byBXQVJOX0NGTEFHUyBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgaXQgd2hlbgorIyBjb21waWxpbmcgUFJPR1JBTS4gIEZvciBleGFtcGxlLCBnbF9XQVJOX0FERChbLVdwYXJlbnRoZXNlc10pLgorIworIyBJZiBWQVJJQUJMRSBpcyBhIHZhcmlhYmxlIG5hbWUsIEFDX1NVQlNUIGl0LgorQUNfREVGVU4oW2dsX1dBUk5fQUREXSwKK1tnbF9DT01QSUxFUl9PUFRJT05fSUYoWyQxXSwKKyAgW2dsX0FTX1ZBUl9BUFBFTkQobTRfaWYoWyQyXSwgW10sIFtbV0FSTl9DRkxBR1NdXSwgW1skMl1dKSwgWyIgJDEiXSldLAorICBbXSwKKyAgWyQzXSkKK200X2lmdmFsKFskMl0sCisgICAgICAgICBbQVNfTElURVJBTF9JRihbJDJdLCBbQUNfU1VCU1QoWyQyXSldKV0sCisgICAgICAgICBbQUNfU1VCU1QoW1dBUk5fQ0ZMQUdTXSldKWRubAorXSkKKworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6IGF1dG9jb25mCisjIEVuZDoKZGlmZiAtLWdpdCBhL200L3djaGFyX2gubTQgYi9tNC93Y2hhcl9oLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YThiMmQKLS0tIC9kZXYvbnVsbAorKysgYi9tNC93Y2hhcl9oLm00CkBAIC0wLDAgKzEsMjI1IEBACitkbmwgQSBwbGFjZWhvbGRlciBmb3IgSVNPIEM5OSA8d2NoYXIuaD4sIGZvciBwbGF0Zm9ybXMgdGhhdCBoYXZlIGlzc3Vlcy4KKworZG5sIENvcHlyaWdodCAoQykgMjAwNy0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBXcml0dGVuIGJ5IEVyaWMgQmxha2UuCisKKyMgd2NoYXJfaC5tNCBzZXJpYWwgMzkKKworQUNfREVGVU4oW2dsX1dDSEFSX0hdLAorWworICBBQ19SRVFVSVJFKFtnbF9XQ0hBUl9IX0RFRkFVTFRTXSkKKyAgQUNfUkVRVUlSRShbZ2xfV0NIQVJfSF9JTkxJTkVfT0tdKQorICBkbmwgUHJlcGFyZSBmb3IgY3JlYXRpbmcgc3Vic3RpdHV0ZSA8d2NoYXIuaD4uCisgIGRubCBDaGVjayBmb3IgPHdjaGFyLmg+IChtaXNzaW5nIGluIExpbnV4IHVDbGliYyB3aGVuIGJ1aWx0IHdpdGhvdXQgd2lkZQorICBkbmwgY2hhcmFjdGVyIHN1cHBvcnQpLgorICBkbmwgPHdjaGFyLmg+IGlzIGFsd2F5cyBvdmVycmlkZGVuLCBiZWNhdXNlIG9mIEdOVUxJQl9QT1NJWENIRUNLLgorICBnbF9DSEVDS19ORVhUX0hFQURFUlMoW3djaGFyLmhdKQorICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfd2NoYXJfaCA9IHllczsgdGhlbgorICAgIEhBVkVfV0NIQVJfSD0xCisgIGVsc2UKKyAgICBIQVZFX1dDSEFSX0g9MAorICBmaQorICBBQ19TVUJTVChbSEFWRV9XQ0hBUl9IXSkKKworICBBQ19SRVFVSVJFKFtnbF9GRUFUVVJFU19IXSkKKworICBBQ19SRVFVSVJFKFtndF9UWVBFX1dJTlRfVF0pCisgIGlmIHRlc3QgJGd0X2N2X2Nfd2ludF90ID0geWVzOyB0aGVuCisgICAgSEFWRV9XSU5UX1Q9MQorICBlbHNlCisgICAgSEFWRV9XSU5UX1Q9MAorICBmaQorICBBQ19TVUJTVChbSEFWRV9XSU5UX1RdKQorCisgIGRubCBDaGVjayBmb3IgZGVjbGFyYXRpb25zIG9mIGFueXRoaW5nIHdlIHdhbnQgdG8gcG9pc29uIGlmIHRoZQorICBkbmwgY29ycmVzcG9uZGluZyBnbnVsaWIgbW9kdWxlIGlzIG5vdCBpbiB1c2UuCisgIGdsX1dBUk5fT05fVVNFX1BSRVBBUkUoW1sKKy8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUKKyAgIDx3Y2hhci5oPi4KKyAgIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZQorICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovCisjaWYgIShkZWZpbmVkIF9fR0xJQkNfXyAmJiAhZGVmaW5lZCBfX1VDTElCQ19fKQorIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyMgaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisjaW5jbHVkZSA8d2NoYXIuaD4KKyAgICBdXSwKKyAgICBbYnRvd2Mgd2N0b2IgbWJzaW5pdCBtYnJ0b3djIG1icmxlbiBtYnNydG93Y3MgbWJzbnJ0b3djcyB3Y3J0b21iCisgICAgIHdjc3J0b21icyB3Y3NucnRvbWJzIHdjd2lkdGggd21lbWNociB3bWVtY21wIHdtZW1jcHkgd21lbW1vdmUgd21lbXNldAorICAgICB3Y3NsZW4gd2NzbmxlbiB3Y3NjcHkgd2NwY3B5IHdjc25jcHkgd2NwbmNweSB3Y3NjYXQgd2NzbmNhdCB3Y3NjbXAKKyAgICAgd2NzbmNtcCB3Y3NjYXNlY21wIHdjc25jYXNlY21wIHdjc2NvbGwgd2NzeGZybSB3Y3NkdXAgd2NzY2hyIHdjc3JjaHIKKyAgICAgd2NzY3NwbiB3Y3NzcG4gd2NzcGJyayB3Y3NzdHIgd2NzdG9rIHdjc3dpZHRoCisgICAgXSkKK10pCisKK2RubCBDaGVjayB3aGV0aGVyIDx3Y2hhci5oPiBpcyB1c2FibGUgYXQgYWxsLgorQUNfREVGVU4oW2dsX1dDSEFSX0hfSU5MSU5FX09LXSwKK1sKKyAgZG5sIFRlc3Qgd2hldGhlciA8d2NoYXIuaD4gc3VmZmVycyBkdWUgdG8gdGhlIHRyYW5zaXRpb24gZnJvbSAnX19pbmxpbmUnIHRvCisgIGRubCAnZ251X2lubGluZScuIFNlZSA8aHR0cDovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00MDIyPgorICBkbmwgYW5kIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQyNDQwPi4gSW4gc3VtbWFyeSwKKyAgZG5sIGdsaWJjIHZlcnNpb24gMi41IG9yIG9sZGVyLCB0b2dldGhlciB3aXRoIGdjYyB2ZXJzaW9uIDQuMyBvciBuZXdlciBhbmQKKyAgZG5sIHRoZSBvcHRpb24gLXN0ZD1jOTkgb3IgLXN0ZD1nbnU5OSwgbGVhZHMgdG8gYSBicm9rZW4gPHdjaGFyLmg+LgorICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciA8d2NoYXIuaD4gdXNlcyAnaW5saW5lJyBjb3JyZWN0bHldLAorICAgIFtnbF9jdl9oZWFkZXJfd2NoYXJfaF9jb3JyZWN0X2lubGluZV0sCisgICAgW2dsX2N2X2hlYWRlcl93Y2hhcl9oX2NvcnJlY3RfaW5saW5lPXllcworICAgICBBQ19MQU5HX0NPTkZURVNUKFsKKyAgICAgICBBQ19MQU5HX1NPVVJDRShbWyNkZWZpbmUgd2NzdG9kIHJlbmFtZWRfd2NzdG9kCisvKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlCisgICA8d2NoYXIuaD4uCisgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUKKyAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CitleHRlcm4gaW50IHplcm8gKHZvaWQpOworaW50IG1haW4gKCkgeyByZXR1cm4gemVybygpOyB9CitdXSldKQorICAgICBpZiBBQ19UUllfRVZBTChbYWNfY29tcGlsZV0pOyB0aGVuCisgICAgICAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdDEuJGFjX29iamV4dAorICAgICAgIEFDX0xBTkdfQ09ORlRFU1QoWworICAgICAgICAgQUNfTEFOR19TT1VSQ0UoW1sjZGVmaW5lIHdjc3RvZCByZW5hbWVkX3djc3RvZAorLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQorICAgPHdjaGFyLmg+LgorICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgoraW50IHplcm8gKHZvaWQpIHsgcmV0dXJuIDA7IH0KK11dKV0pCisgICAgICAgaWYgQUNfVFJZX0VWQUwoW2FjX2NvbXBpbGVdKTsgdGhlbgorICAgICAgICAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdDIuJGFjX29iamV4dAorICAgICAgICAgaWYgJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0MS4kYWNfb2JqZXh0IGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ICRMSUJTID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4mMTsgdGhlbgorICAgICAgICAgICA6CisgICAgICAgICBlbHNlCisgICAgICAgICAgIGdsX2N2X2hlYWRlcl93Y2hhcl9oX2NvcnJlY3RfaW5saW5lPW5vCisgICAgICAgICBmaQorICAgICAgIGZpCisgICAgIGZpCisgICAgIHJtIC1mIGNvbmZ0ZXN0MS4kYWNfb2JqZXh0IGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICAgIF0pCisgIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl93Y2hhcl9oX2NvcnJlY3RfaW5saW5lID0gbm87IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoWzx3Y2hhci5oPiBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoaXMgY29tcGlsZXIgKCRDQyAkQ0ZMQUdTICRDUFBGTEFHUykuCitUaGlzIGlzIGEga25vd24gaW50ZXJvcGVyYWJpbGl0eSBwcm9ibGVtIG9mIGdsaWJjIDw9IDIuNSB3aXRoIGdjYyA+PSA0LjMgaW4KK0M5OSBtb2RlLiBZb3UgaGF2ZSBmb3VyIG9wdGlvbnM6CisgIC0gQWRkIHRoZSBmbGFnIC1mZ251ODktaW5saW5lIHRvIENDIGFuZCByZWNvbmZpZ3VyZSwgb3IKKyAgLSBGaXggeW91ciBpbmNsdWRlIGZpbGVzLCB1c2luZyBwYXJ0cyBvZgorICAgIDxodHRwOi8vc291cmNld2FyZS5vcmcvZ2l0Lz9wPWdsaWJjLmdpdDthPWNvbW1pdGRpZmY7aD1iMDM3YTI5M2E0ODcxOGFmMzBkNzA2YzJlMThjOTI5ZDBlNjlhNjIxPiwgb3IKKyAgLSBVc2UgYSBnY2MgdmVyc2lvbiBvbGRlciB0aGFuIDQuMywgb3IKKyAgLSBEb24ndCB1c2UgdGhlIGZsYWdzIC1zdGQ9Yzk5IG9yIC1zdGQ9Z251OTkuCitDb25maWd1cmF0aW9uIGFib3J0ZWQuXSkKKyAgZmkKK10pCisKK0FDX0RFRlVOKFtnbF9XQ0hBUl9NT0RVTEVfSU5ESUNBVE9SXSwKK1sKKyAgZG5sIFVzZSBBQ19SRVFVSVJFIGhlcmUsIHNvIHRoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGV4cGFuZGVkIG9uY2Ugb25seS4KKyAgQUNfUkVRVUlSRShbZ2xfV0NIQVJfSF9ERUZBVUxUU10pCisgIGdsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFKFskMV0pCisgIGRubCBEZWZpbmUgaXQgYWxzbyBhcyBhIEMgbWFjcm8sIGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgdW5pdCB0ZXN0cy4KKyAgZ2xfTU9EVUxFX0lORElDQVRPUl9GT1JfVEVTVFMoWyQxXSkKK10pCisKK0FDX0RFRlVOKFtnbF9XQ0hBUl9IX0RFRkFVTFRTXSwKK1sKKyAgR05VTElCX0JUT1dDPTA7ICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfQlRPV0NdKQorICBHTlVMSUJfV0NUT0I9MDsgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9XQ1RPQl0pCisgIEdOVUxJQl9NQlNJTklUPTA7ICAgICBBQ19TVUJTVChbR05VTElCX01CU0lOSVRdKQorICBHTlVMSUJfTUJSVE9XQz0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9NQlJUT1dDXSkKKyAgR05VTElCX01CUkxFTj0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfTUJSTEVOXSkKKyAgR05VTElCX01CU1JUT1dDUz0wOyAgIEFDX1NVQlNUKFtHTlVMSUJfTUJTUlRPV0NTXSkKKyAgR05VTElCX01CU05SVE9XQ1M9MDsgIEFDX1NVQlNUKFtHTlVMSUJfTUJTTlJUT1dDU10pCisgIEdOVUxJQl9XQ1JUT01CPTA7ICAgICBBQ19TVUJTVChbR05VTElCX1dDUlRPTUJdKQorICBHTlVMSUJfV0NTUlRPTUJTPTA7ICAgQUNfU1VCU1QoW0dOVUxJQl9XQ1NSVE9NQlNdKQorICBHTlVMSUJfV0NTTlJUT01CUz0wOyAgQUNfU1VCU1QoW0dOVUxJQl9XQ1NOUlRPTUJTXSkKKyAgR05VTElCX1dDV0lEVEg9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfV0NXSURUSF0pCisgIEdOVUxJQl9XTUVNQ0hSPTA7ICAgICBBQ19TVUJTVChbR05VTElCX1dNRU1DSFJdKQorICBHTlVMSUJfV01FTUNNUD0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9XTUVNQ01QXSkKKyAgR05VTElCX1dNRU1DUFk9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfV01FTUNQWV0pCisgIEdOVUxJQl9XTUVNTU9WRT0wOyAgICBBQ19TVUJTVChbR05VTElCX1dNRU1NT1ZFXSkKKyAgR05VTElCX1dNRU1TRVQ9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfV01FTVNFVF0pCisgIEdOVUxJQl9XQ1NMRU49MDsgICAgICBBQ19TVUJTVChbR05VTElCX1dDU0xFTl0pCisgIEdOVUxJQl9XQ1NOTEVOPTA7ICAgICBBQ19TVUJTVChbR05VTElCX1dDU05MRU5dKQorICBHTlVMSUJfV0NTQ1BZPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9XQ1NDUFldKQorICBHTlVMSUJfV0NQQ1BZPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9XQ1BDUFldKQorICBHTlVMSUJfV0NTTkNQWT0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9XQ1NOQ1BZXSkKKyAgR05VTElCX1dDUE5DUFk9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfV0NQTkNQWV0pCisgIEdOVUxJQl9XQ1NDQVQ9MDsgICAgICBBQ19TVUJTVChbR05VTElCX1dDU0NBVF0pCisgIEdOVUxJQl9XQ1NOQ0FUPTA7ICAgICBBQ19TVUJTVChbR05VTElCX1dDU05DQVRdKQorICBHTlVMSUJfV0NTQ01QPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9XQ1NDTVBdKQorICBHTlVMSUJfV0NTTkNNUD0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9XQ1NOQ01QXSkKKyAgR05VTElCX1dDU0NBU0VDTVA9MDsgIEFDX1NVQlNUKFtHTlVMSUJfV0NTQ0FTRUNNUF0pCisgIEdOVUxJQl9XQ1NOQ0FTRUNNUD0wOyBBQ19TVUJTVChbR05VTElCX1dDU05DQVNFQ01QXSkKKyAgR05VTElCX1dDU0NPTEw9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfV0NTQ09MTF0pCisgIEdOVUxJQl9XQ1NYRlJNPTA7ICAgICBBQ19TVUJTVChbR05VTElCX1dDU1hGUk1dKQorICBHTlVMSUJfV0NTRFVQPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9XQ1NEVVBdKQorICBHTlVMSUJfV0NTQ0hSPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9XQ1NDSFJdKQorICBHTlVMSUJfV0NTUkNIUj0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9XQ1NSQ0hSXSkKKyAgR05VTElCX1dDU0NTUE49MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfV0NTQ1NQTl0pCisgIEdOVUxJQl9XQ1NTUE49MDsgICAgICBBQ19TVUJTVChbR05VTElCX1dDU1NQTl0pCisgIEdOVUxJQl9XQ1NQQlJLPTA7ICAgICBBQ19TVUJTVChbR05VTElCX1dDU1BCUktdKQorICBHTlVMSUJfV0NTU1RSPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9XQ1NTVFJdKQorICBHTlVMSUJfV0NTVE9LPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9XQ1NUT0tdKQorICBHTlVMSUJfV0NTV0lEVEg9MDsgICAgQUNfU1VCU1QoW0dOVUxJQl9XQ1NXSURUSF0pCisgIGRubCBBc3N1bWUgcHJvcGVyIEdOVSBiZWhhdmlvciB1bmxlc3MgYW5vdGhlciBtb2R1bGUgc2F5cyBvdGhlcndpc2UuCisgIEhBVkVfQlRPV0M9MTsgICAgICAgICBBQ19TVUJTVChbSEFWRV9CVE9XQ10pCisgIEhBVkVfTUJTSU5JVD0xOyAgICAgICBBQ19TVUJTVChbSEFWRV9NQlNJTklUXSkKKyAgSEFWRV9NQlJUT1dDPTE7ICAgICAgIEFDX1NVQlNUKFtIQVZFX01CUlRPV0NdKQorICBIQVZFX01CUkxFTj0xOyAgICAgICAgQUNfU1VCU1QoW0hBVkVfTUJSTEVOXSkKKyAgSEFWRV9NQlNSVE9XQ1M9MTsgICAgIEFDX1NVQlNUKFtIQVZFX01CU1JUT1dDU10pCisgIEhBVkVfTUJTTlJUT1dDUz0xOyAgICBBQ19TVUJTVChbSEFWRV9NQlNOUlRPV0NTXSkKKyAgSEFWRV9XQ1JUT01CPTE7ICAgICAgIEFDX1NVQlNUKFtIQVZFX1dDUlRPTUJdKQorICBIQVZFX1dDU1JUT01CUz0xOyAgICAgQUNfU1VCU1QoW0hBVkVfV0NTUlRPTUJTXSkKKyAgSEFWRV9XQ1NOUlRPTUJTPTE7ICAgIEFDX1NVQlNUKFtIQVZFX1dDU05SVE9NQlNdKQorICBIQVZFX1dNRU1DSFI9MTsgICAgICAgQUNfU1VCU1QoW0hBVkVfV01FTUNIUl0pCisgIEhBVkVfV01FTUNNUD0xOyAgICAgICBBQ19TVUJTVChbSEFWRV9XTUVNQ01QXSkKKyAgSEFWRV9XTUVNQ1BZPTE7ICAgICAgIEFDX1NVQlNUKFtIQVZFX1dNRU1DUFldKQorICBIQVZFX1dNRU1NT1ZFPTE7ICAgICAgQUNfU1VCU1QoW0hBVkVfV01FTU1PVkVdKQorICBIQVZFX1dNRU1TRVQ9MTsgICAgICAgQUNfU1VCU1QoW0hBVkVfV01FTVNFVF0pCisgIEhBVkVfV0NTTEVOPTE7ICAgICAgICBBQ19TVUJTVChbSEFWRV9XQ1NMRU5dKQorICBIQVZFX1dDU05MRU49MTsgICAgICAgQUNfU1VCU1QoW0hBVkVfV0NTTkxFTl0pCisgIEhBVkVfV0NTQ1BZPTE7ICAgICAgICBBQ19TVUJTVChbSEFWRV9XQ1NDUFldKQorICBIQVZFX1dDUENQWT0xOyAgICAgICAgQUNfU1VCU1QoW0hBVkVfV0NQQ1BZXSkKKyAgSEFWRV9XQ1NOQ1BZPTE7ICAgICAgIEFDX1NVQlNUKFtIQVZFX1dDU05DUFldKQorICBIQVZFX1dDUE5DUFk9MTsgICAgICAgQUNfU1VCU1QoW0hBVkVfV0NQTkNQWV0pCisgIEhBVkVfV0NTQ0FUPTE7ICAgICAgICBBQ19TVUJTVChbSEFWRV9XQ1NDQVRdKQorICBIQVZFX1dDU05DQVQ9MTsgICAgICAgQUNfU1VCU1QoW0hBVkVfV0NTTkNBVF0pCisgIEhBVkVfV0NTQ01QPTE7ICAgICAgICBBQ19TVUJTVChbSEFWRV9XQ1NDTVBdKQorICBIQVZFX1dDU05DTVA9MTsgICAgICAgQUNfU1VCU1QoW0hBVkVfV0NTTkNNUF0pCisgIEhBVkVfV0NTQ0FTRUNNUD0xOyAgICBBQ19TVUJTVChbSEFWRV9XQ1NDQVNFQ01QXSkKKyAgSEFWRV9XQ1NOQ0FTRUNNUD0xOyAgIEFDX1NVQlNUKFtIQVZFX1dDU05DQVNFQ01QXSkKKyAgSEFWRV9XQ1NDT0xMPTE7ICAgICAgIEFDX1NVQlNUKFtIQVZFX1dDU0NPTExdKQorICBIQVZFX1dDU1hGUk09MTsgICAgICAgQUNfU1VCU1QoW0hBVkVfV0NTWEZSTV0pCisgIEhBVkVfV0NTRFVQPTE7ICAgICAgICBBQ19TVUJTVChbSEFWRV9XQ1NEVVBdKQorICBIQVZFX1dDU0NIUj0xOyAgICAgICAgQUNfU1VCU1QoW0hBVkVfV0NTQ0hSXSkKKyAgSEFWRV9XQ1NSQ0hSPTE7ICAgICAgIEFDX1NVQlNUKFtIQVZFX1dDU1JDSFJdKQorICBIQVZFX1dDU0NTUE49MTsgICAgICAgQUNfU1VCU1QoW0hBVkVfV0NTQ1NQTl0pCisgIEhBVkVfV0NTU1BOPTE7ICAgICAgICBBQ19TVUJTVChbSEFWRV9XQ1NTUE5dKQorICBIQVZFX1dDU1BCUks9MTsgICAgICAgQUNfU1VCU1QoW0hBVkVfV0NTUEJSS10pCisgIEhBVkVfV0NTU1RSPTE7ICAgICAgICBBQ19TVUJTVChbSEFWRV9XQ1NTVFJdKQorICBIQVZFX1dDU1RPSz0xOyAgICAgICAgQUNfU1VCU1QoW0hBVkVfV0NTVE9LXSkKKyAgSEFWRV9XQ1NXSURUSD0xOyAgICAgIEFDX1NVQlNUKFtIQVZFX1dDU1dJRFRIXSkKKyAgSEFWRV9ERUNMX1dDVE9CPTE7ICAgIEFDX1NVQlNUKFtIQVZFX0RFQ0xfV0NUT0JdKQorICBIQVZFX0RFQ0xfV0NXSURUSD0xOyAgQUNfU1VCU1QoW0hBVkVfREVDTF9XQ1dJRFRIXSkKKyAgUkVQTEFDRV9NQlNUQVRFX1Q9MDsgIEFDX1NVQlNUKFtSRVBMQUNFX01CU1RBVEVfVF0pCisgIFJFUExBQ0VfQlRPV0M9MDsgICAgICBBQ19TVUJTVChbUkVQTEFDRV9CVE9XQ10pCisgIFJFUExBQ0VfV0NUT0I9MDsgICAgICBBQ19TVUJTVChbUkVQTEFDRV9XQ1RPQl0pCisgIFJFUExBQ0VfTUJTSU5JVD0wOyAgICBBQ19TVUJTVChbUkVQTEFDRV9NQlNJTklUXSkKKyAgUkVQTEFDRV9NQlJUT1dDPTA7ICAgIEFDX1NVQlNUKFtSRVBMQUNFX01CUlRPV0NdKQorICBSRVBMQUNFX01CUkxFTj0wOyAgICAgQUNfU1VCU1QoW1JFUExBQ0VfTUJSTEVOXSkKKyAgUkVQTEFDRV9NQlNSVE9XQ1M9MDsgIEFDX1NVQlNUKFtSRVBMQUNFX01CU1JUT1dDU10pCisgIFJFUExBQ0VfTUJTTlJUT1dDUz0wOyBBQ19TVUJTVChbUkVQTEFDRV9NQlNOUlRPV0NTXSkKKyAgUkVQTEFDRV9XQ1JUT01CPTA7ICAgIEFDX1NVQlNUKFtSRVBMQUNFX1dDUlRPTUJdKQorICBSRVBMQUNFX1dDU1JUT01CUz0wOyAgQUNfU1VCU1QoW1JFUExBQ0VfV0NTUlRPTUJTXSkKKyAgUkVQTEFDRV9XQ1NOUlRPTUJTPTA7IEFDX1NVQlNUKFtSRVBMQUNFX1dDU05SVE9NQlNdKQorICBSRVBMQUNFX1dDV0lEVEg9MDsgICAgQUNfU1VCU1QoW1JFUExBQ0VfV0NXSURUSF0pCisgIFJFUExBQ0VfV0NTV0lEVEg9MDsgICBBQ19TVUJTVChbUkVQTEFDRV9XQ1NXSURUSF0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvd2NoYXJfdC5tNCBiL200L3djaGFyX3QubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM0NzM1ZAotLS0gL2Rldi9udWxsCisrKyBiL200L3djaGFyX3QubTQKQEAgLTAsMCArMSwyNCBAQAorIyB3Y2hhcl90Lm00IHNlcmlhbCA0IChnZXR0ZXh0LTAuMTguMikKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMywgMjAwOC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KK2RubCBUZXN0IHdoZXRoZXIgPHN0ZGRlZi5oPiBoYXMgdGhlICd3Y2hhcl90JyB0eXBlLgorZG5sIFByZXJlcXVpc2l0ZTogQUNfUFJPR19DQworCitBQ19ERUZVTihbZ3RfVFlQRV9XQ0hBUl9UXSwKK1sKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3Y2hhcl90XSwgW2d0X2N2X2Nfd2NoYXJfdF0sCisgICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgW1sjaW5jbHVkZSA8c3RkZGVmLmg+CisgICAgICAgICAgICB3Y2hhcl90IGZvbyA9ICh3Y2hhcl90KSdcMCc7XV0sCisgICAgICAgICAgW1tdXSldLAorICAgICAgIFtndF9jdl9jX3djaGFyX3Q9eWVzXSwKKyAgICAgICBbZ3RfY3ZfY193Y2hhcl90PW5vXSldKQorICBpZiB0ZXN0ICRndF9jdl9jX3djaGFyX3QgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoW0hBVkVfV0NIQVJfVF0sIFsxXSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3djaGFyX3QnIHR5cGUuXSkKKyAgZmkKK10pCmRpZmYgLS1naXQgYS9tNC93Y3R5cGVfaC5tNCBiL200L3djdHlwZV9oLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NWU2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9tNC93Y3R5cGVfaC5tNApAQCAtMCwwICsxLDIwOSBAQAorIyB3Y3R5cGVfaC5tNCBzZXJpYWwgMTgKKworZG5sIEEgcGxhY2Vob2xkZXIgZm9yIElTTyBDOTkgPHdjdHlwZS5oPiwgZm9yIHBsYXRmb3JtcyB0aGF0IGxhY2sgaXQuCisKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgV3JpdHRlbiBieSBQYXVsIEVnZ2VydC4KKworQUNfREVGVU4oW2dsX1dDVFlQRV9IXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfV0NUWVBFX0hfREVGQVVMVFNdKQorICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorICBBQ19DSEVDS19GVU5DU19PTkNFKFtpc3djbnRybF0pCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfaXN3Y250cmwgPSB5ZXM7IHRoZW4KKyAgICBIQVZFX0lTV0NOVFJMPTEKKyAgZWxzZQorICAgIEhBVkVfSVNXQ05UUkw9MAorICBmaQorICBBQ19TVUJTVChbSEFWRV9JU1dDTlRSTF0pCisKKyAgQUNfUkVRVUlSRShbZ3RfVFlQRV9XSU5UX1RdKQorICBpZiB0ZXN0ICRndF9jdl9jX3dpbnRfdCA9IHllczsgdGhlbgorICAgIEhBVkVfV0lOVF9UPTEKKyAgZWxzZQorICAgIEhBVkVfV0lOVF9UPTAKKyAgZmkKKyAgQUNfU1VCU1QoW0hBVkVfV0lOVF9UXSkKKworICBnbF9DSEVDS19ORVhUX0hFQURFUlMoW3djdHlwZS5oXSkKKyAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3djdHlwZV9oID0geWVzOyB0aGVuCisgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19pc3djbnRybCA9IHllczsgdGhlbgorICAgICAgZG5sIExpbnV4IGxpYmM1IGhhcyBhbiBpc3dwcmludCBmdW5jdGlvbiB0aGF0IHJldHVybnMgMCBmb3IgYWxsIGFyZ3VtZW50cy4KKyAgICAgIGRubCBUaGUgb3RoZXIgZnVuY3Rpb25zIGFyZSBsaWtlbHkgYnJva2VuIGluIHRoZSBzYW1lIHdheS4KKyAgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGlzd2NudHJsIHdvcmtzXSwgW2dsX2N2X2Z1bmNfaXN3Y250cmxfd29ya3NdLAorICAgICAgICBbCisgICAgICAgICAgQUNfUlVOX0lGRUxTRSgKKyAgICAgICAgICAgIFtBQ19MQU5HX1NPVVJDRShbWworICAgICAgICAgICAgICAgLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlCisgICAgICAgICAgICAgICAgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LgorICAgICAgICAgICAgICAgICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPgorICAgICAgICAgICAgICAgICAgbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyAgICAgICAgICAgICAgICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgICAgICAgICAgICAgICNpbmNsdWRlIDxzdGRpby5oPgorICAgICAgICAgICAgICAgI2luY2x1ZGUgPHRpbWUuaD4KKyAgICAgICAgICAgICAgICNpbmNsdWRlIDx3Y2hhci5oPgorICAgICAgICAgICAgICAgI2luY2x1ZGUgPHdjdHlwZS5oPgorICAgICAgICAgICAgICAgaW50IG1haW4gKCkgeyByZXR1cm4gaXN3cHJpbnQgKCd4JykgPT0gMDsgfQorICAgICAgICAgICAgXV0pXSwKKyAgICAgICAgICAgIFtnbF9jdl9mdW5jX2lzd2NudHJsX3dvcmtzPXllc10sIFtnbF9jdl9mdW5jX2lzd2NudHJsX3dvcmtzPW5vXSwKKyAgICAgICAgICAgIFtBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAgICAgICAgICAgICAgICAgICAgICAgICAjaWYgX19HTlVfTElCUkFSWV9fID09IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTGludXggbGliYzUgaTE4biBpcyBicm9rZW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICNlbmRpZl1dLCBbXSldLAorICAgICAgICAgICAgICBbZ2xfY3ZfZnVuY19pc3djbnRybF93b3Jrcz0iZ3Vlc3NpbmcgeWVzIl0sCisgICAgICAgICAgICAgIFtnbF9jdl9mdW5jX2lzd2NudHJsX3dvcmtzPSJndWVzc2luZyBubyJdKQorICAgICAgICAgICAgXSkKKyAgICAgICAgXSkKKyAgICBmaQorICAgIEhBVkVfV0NUWVBFX0g9MQorICBlbHNlCisgICAgSEFWRV9XQ1RZUEVfSD0wCisgIGZpCisgIEFDX1NVQlNUKFtIQVZFX1dDVFlQRV9IXSkKKworICBjYXNlICIkZ2xfY3ZfZnVuY19pc3djbnRybF93b3JrcyIgaW4KKyAgICAqeWVzKSBSRVBMQUNFX0lTV0NOVFJMPTAgOzsKKyAgICAqKSAgICBSRVBMQUNFX0lTV0NOVFJMPTEgOzsKKyAgZXNhYworICBBQ19TVUJTVChbUkVQTEFDRV9JU1dDTlRSTF0pCisKKyAgaWYgdGVzdCAkSEFWRV9JU1dDTlRSTCA9IDAgfHwgdGVzdCAkUkVQTEFDRV9JU1dDTlRSTCA9IDE7IHRoZW4KKyAgICBkbmwgUmVkZWZpbmUgYWxsIG9mIGlzd2NudHJsLCAuLi4sIGlzd3hkaWdpdCBpbiA8d2N0eXBlLmg+LgorICAgIDoKKyAgZmkKKworICBpZiB0ZXN0ICRSRVBMQUNFX0lTV0NOVFJMID0gMTsgdGhlbgorICAgIFJFUExBQ0VfVE9XTE9XRVI9MQorICBlbHNlCisgICAgQUNfQ0hFQ0tfRlVOQ1MoW3Rvd2xvd2VyXSkKKyAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX3Rvd2xvd2VyID0geWVzOyB0aGVuCisgICAgICBSRVBMQUNFX1RPV0xPV0VSPTAKKyAgICBlbHNlCisgICAgICBBQ19DSEVDS19ERUNMUyhbdG93bG93ZXJdLCwsCisgICAgICAgIFtbLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlCisgICAgICAgICAgICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4KKyAgICAgICAgICAgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+CisgICAgICAgICAgICAgbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyAgICAgICAgICAjaW5jbHVkZSA8c3RkZGVmLmg+CisgICAgICAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICAgICAgICAgI2luY2x1ZGUgPHRpbWUuaD4KKyAgICAgICAgICAjaW5jbHVkZSA8d2NoYXIuaD4KKyAgICAgICAgICAjaWYgSEFWRV9XQ1RZUEVfSAorICAgICAgICAgICMgaW5jbHVkZSA8d2N0eXBlLmg+CisgICAgICAgICAgI2VuZGlmCisgICAgICAgIF1dKQorICAgICAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3Rvd2xvd2VyID0geWVzOyB0aGVuCisgICAgICAgIGRubCBPbiBNaW5peCAzLjEuOCwgdGhlIHN5c3RlbSdzIDx3Y3R5cGUuaD4gZGVjbGFyZXMgdG93bG93ZXIoKSBhbmQKKyAgICAgICAgZG5sIHRvd3VwcGVyKCkgYWx0aG91Z2ggaXQgZG9lcyBub3QgaGF2ZSB0aGUgZnVuY3Rpb25zLiBBdm9pZCBhCisgICAgICAgIGRubCBjb2xsaXNpb24gd2l0aCBnbnVsaWIncyByZXBsYWNlbWVudC4KKyAgICAgICAgUkVQTEFDRV9UT1dMT1dFUj0xCisgICAgICBlbHNlCisgICAgICAgIFJFUExBQ0VfVE9XTE9XRVI9MAorICAgICAgZmkKKyAgICBmaQorICBmaQorICBBQ19TVUJTVChbUkVQTEFDRV9UT1dMT1dFUl0pCisKKyAgaWYgdGVzdCAkSEFWRV9JU1dDTlRSTCA9IDAgfHwgdGVzdCAkUkVQTEFDRV9UT1dMT1dFUiA9IDE7IHRoZW4KKyAgICBkbmwgUmVkZWZpbmUgdG93bG93ZXIsIHRvd3VwcGVyIGluIDx3Y3R5cGUuaD4uCisgICAgOgorICBmaQorCisgIGRubCBXZSBhc3N1bWUgdGhhdCB0aGUgd2N0eXBlKCkgYW5kIGlzd2N0eXBlKCkgZnVuY3Rpb25zIGV4aXN0IGlmIGFuZCBvbmx5CisgIGRubCBpZiB0aGUgdHlwZSB3Y3R5cGVfdCBpcyBkZWZpbmVkIGluIDx3Y2hhci5oPiBvciBpbiA8d2N0eXBlLmg+IGlmIHRoYXQKKyAgZG5sIGV4aXN0cy4KKyAgZG5sIEhQLVVYIDExLjAwIGRlY2xhcmVzIGFsbCB0aGVzZSBpbiA8d2NoYXIuaD4gYW5kIGxhY2tzIDx3Y3R5cGUuaD4uCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igd2N0eXBlX3RdLCBbZ2xfY3ZfdHlwZV93Y3R5cGVfdF0sCisgICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgW1svKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUKKyAgICAgICAgICAgICAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uCisgICAgICAgICAgICAgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+CisgICAgICAgICAgICAgICBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLworICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGRlZi5oPgorICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICAgICAgICAgICAjaW5jbHVkZSA8dGltZS5oPgorICAgICAgICAgICAgI2luY2x1ZGUgPHdjaGFyLmg+CisgICAgICAgICAgICAjaWYgSEFWRV9XQ1RZUEVfSAorICAgICAgICAgICAgIyBpbmNsdWRlIDx3Y3R5cGUuaD4KKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgd2N0eXBlX3QgYTsKKyAgICAgICAgICBdXSwKKyAgICAgICAgICBbW11dKV0sCisgICAgICAgW2dsX2N2X3R5cGVfd2N0eXBlX3Q9eWVzXSwKKyAgICAgICBbZ2xfY3ZfdHlwZV93Y3R5cGVfdD1ub10pCisgICAgXSkKKyAgaWYgdGVzdCAkZ2xfY3ZfdHlwZV93Y3R5cGVfdCA9IG5vOyB0aGVuCisgICAgSEFWRV9XQ1RZUEVfVD0wCisgIGZpCisKKyAgZG5sIFdlIGFzc3VtZSB0aGF0IHRoZSB3Y3RyYW5zKCkgYW5kIHRvd2N0cmFucygpIGZ1bmN0aW9ucyBleGlzdCBpZiBhbmQgb25seQorICBkbmwgaWYgdGhlIHR5cGUgd2N0cmFuc190IGlzIGRlZmluZWQgaW4gPHdjdHlwZS5oPi4KKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3Y3RyYW5zX3RdLCBbZ2xfY3ZfdHlwZV93Y3RyYW5zX3RdLAorICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgIFtbLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlCisgICAgICAgICAgICAgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LgorICAgICAgICAgICAgICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPgorICAgICAgICAgICAgICAgbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyAgICAgICAgICAgICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgICAgICAgICAgICNpbmNsdWRlIDxzdGRpby5oPgorICAgICAgICAgICAgI2luY2x1ZGUgPHRpbWUuaD4KKyAgICAgICAgICAgICNpbmNsdWRlIDx3Y2hhci5oPgorICAgICAgICAgICAgI2luY2x1ZGUgPHdjdHlwZS5oPgorICAgICAgICAgICAgd2N0cmFuc190IGE7CisgICAgICAgICAgXV0sCisgICAgICAgICAgW1tdXSldLAorICAgICAgIFtnbF9jdl90eXBlX3djdHJhbnNfdD15ZXNdLAorICAgICAgIFtnbF9jdl90eXBlX3djdHJhbnNfdD1ub10pCisgICAgXSkKKyAgaWYgdGVzdCAkZ2xfY3ZfdHlwZV93Y3RyYW5zX3QgPSBubzsgdGhlbgorICAgIEhBVkVfV0NUUkFOU19UPTAKKyAgZmkKKworICBkbmwgQ2hlY2sgZm9yIGRlY2xhcmF0aW9ucyBvZiBhbnl0aGluZyB3ZSB3YW50IHRvIHBvaXNvbiBpZiB0aGUKKyAgZG5sIGNvcnJlc3BvbmRpbmcgZ251bGliIG1vZHVsZSBpcyBub3QgaW4gdXNlLgorICBnbF9XQVJOX09OX1VTRV9QUkVQQVJFKFtbCisvKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlCisgICA8d2NoYXIuaD4uCisgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUKKyAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLworI2lmICEoZGVmaW5lZCBfX0dMSUJDX18gJiYgIWRlZmluZWQgX19VQ0xJQkNfXykKKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisjIGluY2x1ZGUgPHN0ZGlvLmg+CisjIGluY2x1ZGUgPHRpbWUuaD4KKyMgaW5jbHVkZSA8d2NoYXIuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHdjdHlwZS5oPgorICAgIF1dLAorICAgIFt3Y3R5cGUgaXN3Y3R5cGUgd2N0cmFucyB0b3djdHJhbnMKKyAgICBdKQorXSkKKworQUNfREVGVU4oW2dsX1dDVFlQRV9NT0RVTEVfSU5ESUNBVE9SXSwKK1sKKyAgZG5sIFVzZSBBQ19SRVFVSVJFIGhlcmUsIHNvIHRoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGV4cGFuZGVkIG9uY2Ugb25seS4KKyAgQUNfUkVRVUlSRShbZ2xfV0NUWVBFX0hfREVGQVVMVFNdKQorICBnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRShbJDFdKQorICBkbmwgRGVmaW5lIGl0IGFsc28gYXMgYSBDIG1hY3JvLCBmb3IgdGhlIGJlbmVmaXQgb2YgdGhlIHVuaXQgdGVzdHMuCisgIGdsX01PRFVMRV9JTkRJQ0FUT1JfRk9SX1RFU1RTKFskMV0pCitdKQorCitBQ19ERUZVTihbZ2xfV0NUWVBFX0hfREVGQVVMVFNdLAorWworICBHTlVMSUJfSVNXQkxBTks9MDsgICAgQUNfU1VCU1QoW0dOVUxJQl9JU1dCTEFOS10pCisgIEdOVUxJQl9XQ1RZUEU9MDsgICAgICBBQ19TVUJTVChbR05VTElCX1dDVFlQRV0pCisgIEdOVUxJQl9JU1dDVFlQRT0wOyAgICBBQ19TVUJTVChbR05VTElCX0lTV0NUWVBFXSkKKyAgR05VTElCX1dDVFJBTlM9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfV0NUUkFOU10pCisgIEdOVUxJQl9UT1dDVFJBTlM9MDsgICBBQ19TVUJTVChbR05VTElCX1RPV0NUUkFOU10pCisgIGRubCBBc3N1bWUgcHJvcGVyIEdOVSBiZWhhdmlvciB1bmxlc3MgYW5vdGhlciBtb2R1bGUgc2F5cyBvdGhlcndpc2UuCisgIEhBVkVfSVNXQkxBTks9MTsgICAgICBBQ19TVUJTVChbSEFWRV9JU1dCTEFOS10pCisgIEhBVkVfV0NUWVBFX1Q9MTsgICAgICBBQ19TVUJTVChbSEFWRV9XQ1RZUEVfVF0pCisgIEhBVkVfV0NUUkFOU19UPTE7ICAgICBBQ19TVUJTVChbSEFWRV9XQ1RSQU5TX1RdKQorICBSRVBMQUNFX0lTV0JMQU5LPTA7ICAgQUNfU1VCU1QoW1JFUExBQ0VfSVNXQkxBTktdKQorXSkKZGlmZiAtLWdpdCBhL200L3djd2lkdGgubTQgYi9tNC93Y3dpZHRoLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNDBiY2MKLS0tIC9kZXYvbnVsbAorKysgYi9tNC93Y3dpZHRoLm00CkBAIC0wLDAgKzEsMTAxIEBACisjIHdjd2lkdGgubTQgc2VyaWFsIDIzCitkbmwgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0ZVTkNfV0NXSURUSF0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1dDSEFSX0hfREVGQVVMVFNdKQorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pIGRubCBmb3IgY3Jvc3MtY29tcGlsZXMKKworICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHdjaGFyLmg+IHRvIGRlY2xhcmUgd2N3aWR0aCgpLgorICBBQ19SRVFVSVJFKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorCisgIEFDX1JFUVVJUkUoW2d0X1RZUEVfV0NIQVJfVF0pCisgIEFDX1JFUVVJUkUoW2d0X1RZUEVfV0lOVF9UXSkKKworICBBQ19DSEVDS19IRUFERVJTX09OQ0UoW3djaGFyLmhdKQorICBBQ19DSEVDS19GVU5DU19PTkNFKFt3Y3dpZHRoXSkKKworICBBQ19DSEVDS19ERUNMUyhbd2N3aWR0aF0sIFtdLCBbXSwgW1sKKy8qIEFJWCAzLjIuNSBkZWNsYXJlcyB3Y3dpZHRoIGluIDxzdHJpbmcuaD4uICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisvKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlCisgICA8d2NoYXIuaD4uCisgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUgaW5jbHVkZWQKKyAgIGJlZm9yZSA8d2NoYXIuaD4uICAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CitdXSkKKyAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3djd2lkdGggIT0geWVzOyB0aGVuCisgICAgSEFWRV9ERUNMX1dDV0lEVEg9MAorICBmaQorCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfd2N3aWR0aCA9IHllczsgdGhlbgorICAgIEhBVkVfV0NXSURUSD0xCisgICAgZG5sIE9uIE1hYyBPUyBYIDEwLjMsIHdjd2lkdGgoMHgwMzAxKSAoQ09NQklOSU5HIEFDVVRFIEFDQ0VOVCkgcmV0dXJucyAxLgorICAgIGRubCBPbiBPcGVuQlNEIDUuMCwgd2N3aWR0aCgweDA1QjApIChIRUJSRVcgUE9JTlQgU0hFVkEpIHJldHVybnMgMS4KKyAgICBkbmwgT24gT1NGLzEgNS4xLCB3Y3dpZHRoKDB4MjAwQikgKFpFUk8gV0lEVEggU1BBQ0UpIHJldHVybnMgMS4KKyAgICBkbmwgVGhpcyBsZWFkcyB0byBidWdzIGluICdscycgKGNvcmV1dGlscykuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgd2N3aWR0aCB3b3JrcyByZWFzb25hYmx5IGluIFVURi04IGxvY2FsZXNdLAorICAgICAgW2dsX2N2X2Z1bmNfd2N3aWR0aF93b3Jrc10sCisgICAgICBbCisgICAgICAgIEFDX1JVTl9JRkVMU0UoCisgICAgICAgICAgW0FDX0xBTkdfU09VUkNFKFtbCisjaW5jbHVkZSA8bG9jYWxlLmg+CisvKiBBSVggMy4yLjUgZGVjbGFyZXMgd2N3aWR0aCBpbiA8c3RyaW5nLmg+LiAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQorICAgPHdjaGFyLmg+LgorICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlIGluY2x1ZGVkCisgICBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorI2lmICFIQVZFX0RFQ0xfV0NXSURUSAorZXh0ZXJuCisjIGlmZGVmIF9fY3BsdXNwbHVzCisiQyIKKyMgZW5kaWYKK2ludCB3Y3dpZHRoIChpbnQpOworI2VuZGlmCitpbnQgbWFpbiAoKQoreworICBpbnQgcmVzdWx0ID0gMDsKKyAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCAiZnJfRlIuVVRGLTgiKSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGlmICh3Y3dpZHRoICgweDAzMDEpID4gMCkKKyAgICAgICAgcmVzdWx0IHw9IDE7CisgICAgICBpZiAod2N3aWR0aCAoMHgwNUIwKSA+IDApCisgICAgICAgIHJlc3VsdCB8PSAyOworICAgICAgaWYgKHdjd2lkdGggKDB4MjAwQikgPiAwKQorICAgICAgICByZXN1bHQgfD0gNDsKKyAgICB9CisgIHJldHVybiByZXN1bHQ7Cit9XV0pXSwKKyAgICAgICAgICBbZ2xfY3ZfZnVuY193Y3dpZHRoX3dvcmtzPXllc10sCisgICAgICAgICAgW2dsX2N2X2Z1bmNfd2N3aWR0aF93b3Jrcz1ub10sCisgICAgICAgICAgWworY2hhbmdlcXVvdGUoLClkbmwKKyAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBnbGliYyBhbmQgQUlYIDcgc3lzdGVtcy4KKyAgICAgICAgICAgICAqLWdudSogfCBhaXhbNy05XSopIGdsX2N2X2Z1bmNfd2N3aWR0aF93b3Jrcz0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgKikgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3djd2lkdGhfd29ya3M9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgIGVzYWMKK2NoYW5nZXF1b3RlKFssXSlkbmwKKyAgICAgICAgICBdKQorICAgICAgXSkKKyAgICBjYXNlICIkZ2xfY3ZfZnVuY193Y3dpZHRoX3dvcmtzIiBpbgorICAgICAgKnllcykgOzsKKyAgICAgICpubykgUkVQTEFDRV9XQ1dJRFRIPTEgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBIQVZFX1dDV0lEVEg9MAorICBmaQorICBkbmwgV2UgZG9uJ3Qgc3Vic3RpdHV0ZSBIQVZFX1dDV0lEVEguIFdlIGFzc3VtZSB0aGF0IGlmIHRoZSBzeXN0ZW0gZG9lcyBub3QKKyAgZG5sIGhhdmUgdGhlIHdjd2lkdGggZnVuY3Rpb24sIHRoZW4gaXQgZG9lcyBub3QgZGVjbGFyZSBpdC4KK10pCmRpZmYgLS1naXQgYS9tNC93aW50X3QubTQgYi9tNC93aW50X3QubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI2MGNjZQotLS0gL2Rldi9udWxsCisrKyBiL200L3dpbnRfdC5tNApAQCAtMCwwICsxLDMyIEBACisjIHdpbnRfdC5tNCBzZXJpYWwgNSAoZ2V0dGV4dC0wLjE4LjIpCitkbmwgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorZG5sIFRlc3Qgd2hldGhlciA8d2NoYXIuaD4gaGFzIHRoZSAnd2ludF90JyB0eXBlLgorZG5sIFByZXJlcXVpc2l0ZTogQUNfUFJPR19DQworCitBQ19ERUZVTihbZ3RfVFlQRV9XSU5UX1RdLAorWworICBBQ19DQUNIRV9DSEVDSyhbZm9yIHdpbnRfdF0sIFtndF9jdl9jX3dpbnRfdF0sCisgICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgW1sKKy8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUKKyAgIDx3Y2hhci5oPi4KKyAgIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZSBpbmNsdWRlZAorICAgYmVmb3JlIDx3Y2hhci5oPi4gICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyAgICAgICAgICAgIHdpbnRfdCBmb28gPSAod2NoYXJfdCknXDAnO11dLAorICAgICAgICAgIFtbXV0pXSwKKyAgICAgICBbZ3RfY3ZfY193aW50X3Q9eWVzXSwKKyAgICAgICBbZ3RfY3ZfY193aW50X3Q9bm9dKV0pCisgIGlmIHRlc3QgJGd0X2N2X2Nfd2ludF90ID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKFtIQVZFX1dJTlRfVF0sIFsxXSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3dpbnRfdCcgdHlwZS5dKQorICBmaQorXSkKZGlmZiAtLWdpdCBhL200L3hhbGxvYy5tNCBiL200L3hhbGxvYy5tNAppbmRleCBjMDg0N2RkLi42YzJkNWQwIDEwMDY0NAotLS0gYS9tNC94YWxsb2MubTQKKysrIGIvbTQveGFsbG9jLm00CkBAIC0xLDI1ICsxLDcgQEAKLSMgeGFsbG9jLm00IHNlcmlhbCAxMgotZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgeGFsbG9jLm00IHNlcmlhbCAxOAorZG5sIENvcHlyaWdodCAoQykgMjAwMi0yMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotQUNfREVGVU4oW2dsX1hBTExPQ10sCi1bCi0gIEFDX0xJQlNPVVJDRVMoW3htYWxsb2MuYywgeGFsbG9jLmhdKQotICBBQ19MSUJPQkooW3htYWxsb2NdKQotCi0gIGdsX1BSRVJFUV9YQUxMT0MKLSAgZ2xfUFJFUkVRX1hNQUxMT0MKLV0pCi0KLSMgUHJlcmVxdWlzaXRlcyBvZiBsaWIveGFsbG9jLmguCi1BQ19ERUZVTihbZ2xfUFJFUkVRX1hBTExPQ10sIFsKLSAgOgotXSkKLQotIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi94bWFsbG9jLmMuCi1BQ19ERUZVTihbZ2xfUFJFUkVRX1hNQUxMT0NdLCBbCi0gIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSkKLSAgOgotXSkKK0FDX0RFRlVOKFtnbF9YQUxMT0NdLCBbOl0pCmRpZmYgLS1naXQgYS9tNC94c2l6ZS5tNCBiL200L3hzaXplLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NWE1ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9tNC94c2l6ZS5tNApAQCAtMCwwICsxLDEyIEBACisjIHhzaXplLm00IHNlcmlhbCA1CitkbmwgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQsIDIwMDgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ2xfWFNJWkVdLAorWworICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIveHNpemUuaC4KKyAgQUNfUkVRVUlSRShbZ2xfU0laRV9NQVhdKQorICBBQ19DSEVDS19IRUFERVJTKFtzdGRpbnQuaF0pCitdKQpkaWZmIC0tZ2l0IGEvbTQveHN0cm5kdXAubTQgYi9tNC94c3RybmR1cC5tNAppbmRleCA4YTMwYWIxLi4xNjQyY2E1IDEwMDY0NAotLS0gYS9tNC94c3RybmR1cC5tNAorKysgYi9tNC94c3RybmR1cC5tNApAQCAtMSw1ICsxLDUgQEAKICMgeHN0cm5kdXAubTQgc2VyaWFsIDIKLWRubCBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KZGlmZiAtLWdpdCBhL21haW50Lm1rIGIvbWFpbnQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNjMjUwOAotLS0gL2Rldi9udWxsCisrKyBiL21haW50Lm1rCkBAIC0wLDAgKzEsMTY1NCBAQAorIyAtKi1NYWtlZmlsZS0qLQorIyBUaGlzIE1ha2VmaWxlIGZyYWdtZW50IHRyaWVzIHRvIGJlIGdlbmVyYWwtcHVycG9zZSBlbm91Z2ggdG8gYmUKKyMgdXNlZCBieSBtYW55IHByb2plY3RzIHZpYSB0aGUgZ251bGliIG1haW50YWluZXItbWFrZWZpbGUgbW9kdWxlLgorCisjIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMjCisjIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIyMKKyMjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjIworIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFRoaXMgaXMgcmVwb3J0ZWQgbm90IHRvIHdvcmsgd2l0aCBtYWtlLTMuNzkuMQorIyBNRSA6PSAkKHdvcmQgJCh3b3JkcyAkKE1BS0VGSUxFX0xJU1QpKSwkKE1BS0VGSUxFX0xJU1QpKQorTUUgOj0gbWFpbnQubWsKKworIyBEaWFnbm9zdGljIGZvciBjb250aW51ZWQgdXNlIG9mIGRlcHJlY2F0ZWQgdmFyaWFibGUuCisjIFJlbW92ZSBpbiAyMDEzCitpZm5lcSAoJChidWlsZF9hdXgpLCkKKyAkKGVycm9yICIkKE1FKTogXAorc2V0ICQkKF9idWlsZC1hdXgpIHJlbGF0aXZlIHRvICQkKHNyY2RpcikgaW5zdGVhZCBvZiAkJChidWlsZF9hdXgpIikKK2VuZGlmCisKKyMgSGVscGVyIHZhcmlhYmxlcy4KK19lbXB0eSA9Citfc3AgPSAkKF9lbXB0eSkgJChfZW1wdHkpCisKKyMgX2VxdWFsLFMxLFMyCisjIC0tLS0tLS0tLS0tLQorIyBJZiBTMSA9PSBTMiwgcmV0dXJuIFMxLCBvdGhlcndpc2UgdGhlIGVtcHR5IHN0cmluZy4KK19lcXVhbCA9ICQoYW5kICQoZmluZHN0cmluZyAkKDEpLCQoMikpLCQoZmluZHN0cmluZyAkKDIpLCQoMSkpKQorCisjIG1lbWJlci1jaGVjayxWQVJJQUJMRSxWQUxJRC1WQUxVRVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB0aGF0ICQoVkFSSUFCTEUpIGlzIGluIHRoZSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBWQUxJRC1WQUxVRVMsIGFuZAorIyByZXR1cm4gaXQuICBEaWUgb3RoZXJ3aXNlLgorbWVtYmVyLWNoZWNrID0JCQkJCQkJCVwKKyAgJChzdHJpcAkJCQkJCQkJXAorICAgICQoaWYgJCgkKDEpKSwJCQkJCQkJXAorICAgICAgJChpZiAkKGZpbmRzdHJpbmcgJChfc3ApLCQoJCgxKSkpLAkJCQlcCisgICAgICAgICAgJChlcnJvciBpbnZhbGlkICQoMSk6ICckKCQoMSkpJywgZXhwZWN0ZWQgJCgyKSksCQlcCisgICAgICAgICAgJChvciAkKGZpbmRzdHJpbmcgJChfc3ApJCgkKDEpKSQoX3NwKSwkKF9zcCkkKDIpJChfc3ApKSwJXAorICAgICAgICAgICAgJChlcnJvciBpbnZhbGlkICQoMSk6ICckKCQoMSkpJywgZXhwZWN0ZWQgJCgyKSkpKSwJCVwKKyAgICAgICQoZXJyb3IgJCgxKSB1bmRlZmluZWQpKSkKKworIyBEbyBub3Qgc2F2ZSB0aGUgb3JpZ2luYWwgbmFtZSBvciB0aW1lc3RhbXAgaW4gdGhlIC50YXIuZ3ogZmlsZS4KKyMgVXNlIC0tcnN5bmNhYmxlIGlmIGF2YWlsYWJsZS4KK2d6aXBfcnN5bmNhYmxlIDo9IFwKKyAgJChzaGVsbCBnemlwIC0taGVscCAyPi9kZXYvbnVsbHxncmVwIHJzeW5jYWJsZSA+L2Rldi9udWxsIFwKKyAgICAmJiBwcmludGYgJXMgLS1yc3luY2FibGUpCitHWklQX0VOViA9ICctLW5vLW5hbWUgLS1iZXN0ICQoZ3ppcF9yc3luY2FibGUpJworCitHSVQgPSBnaXQKK1ZDID0gJChHSVQpCisKK1ZDX0xJU1QgPSAkKHNyY2RpcikvJChfYnVpbGQtYXV4KS92Yy1saXN0LWZpbGVzIC1DICQoc3JjZGlyKQorCisjIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyB2YXJpYWJsZSBpbiBjZmcubWsgdG8gc2V0IHlvdXIgb3duIHJlZ2V4cAorIyBtYXRjaGluZyBmaWxlcyB0byBpZ25vcmUuCitWQ19MSVNUX0FMV0FZU19FWENMVURFX1JFR0VYID89IF4kJAorCisjIFRoaXMgaXMgdG8gcHJlcHJvY2VzcyByb2J1c3RseSB0aGUgb3V0cHV0IG9mICQoVkNfTElTVCksIHNvIHRoYXQgZXZlbgorIyB3aGVuICQoc3JjZGlyKSBpcyBhIHBhdGhvbG9naWNhbCBuYW1lIGxpa2UgIi4uLi4iLCB0aGUgbGVhZGluZyBzZWQgY29tbWFuZAorIyByZW1vdmVzIG9ubHkgdGhlIGludGVuZGVkIHByZWZpeC4KK19kb3RfZXNjYXBlZF9zcmNkaXIgPSAkKHN1YnN0IC4sXC4sJChzcmNkaXIpKQorCisjIFBvc3QtcHJvY2VzcyAkKFZDX0xJU1QpIG91dHB1dCwgcHJlcGVuZGluZyAkKHNyY2RpcikvLCBidXQgb25seQorIyB3aGVuICQoc3JjZGlyKSBpcyBub3QgIi4iLgoraWZlcSAoJChzcmNkaXIpLC4pCisgIF9wcmVwZW5kX3NyY2Rpcl9wcmVmaXggPQorZWxzZQorICBfcHJlcGVuZF9zcmNkaXJfcHJlZml4ID0gfCBzZWQgJ3N8XnwkKHNyY2RpcikvfCcKK2VuZGlmCisKKyMgSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBjb25zaXN0ZW50bHkgZmlsdGVyICIuIi1yZWxhdGl2ZSBuYW1lcywKKyMgKGkuZS4sIHdpdGggbm8gJChzcmNkaXIpIHByZWZpeCksIHRoaXMgZGVmaW5pdGlvbiBpcyBjYXJlZnVsIHRvCisjIHJlbW92ZSBhbnkgJChzcmNkaXIpIHByZWZpeCwgYW5kIHRvIHJlc3RvcmUgd2hhdCBpdCByZW1vdmVzLgorX3NjX2V4Y2wgPSBcCisgICQob3IgJChleGNsdWRlX2ZpbGVfbmFtZV9yZWdleHAtLSRAKSxeJCQpCitWQ19MSVNUX0VYQ0VQVCA9IFwKKyAgJChWQ19MSVNUKSB8IHNlZCAnc3xeJChfZG90X2VzY2FwZWRfc3JjZGlyKS98fCcgXAorCXwgaWYgdGVzdCAtZiAkKHNyY2RpcikvLngtJEA7IHRoZW4gZ3JlcCAtdkVmICQoc3JjZGlyKS8ueC0kQDsgXAorCSAgZWxzZSBncmVwIC1FdiAtZSAiJCR7VkNfTElTVF9FWENFUFRfREVGQVVMVC1DaGFuZ2VMb2d9IjsgZmkgXAorCXwgZ3JlcCAtRXYgLWUgJygkKFZDX0xJU1RfQUxXQVlTX0VYQ0xVREVfUkVHRVgpfCQoX3NjX2V4Y2wpKScgXAorCSQoX3ByZXBlbmRfc3JjZGlyX3ByZWZpeCkKKworaWZlcSAoJChvcmlnaW4gcHJldl92ZXJzaW9uX2ZpbGUpLCB1bmRlZmluZWQpCisgIHByZXZfdmVyc2lvbl9maWxlID0gJChzcmNkaXIpLy5wcmV2LXZlcnNpb24KK2VuZGlmCisKK1BSRVZfVkVSU0lPTiA6PSAkKHNoZWxsIGNhdCAkKHByZXZfdmVyc2lvbl9maWxlKSAyPi9kZXYvbnVsbCkKK1ZFUlNJT05fUkVHRVhQID0gJChzdWJzdCAuLFwuLCQoVkVSU0lPTikpCitQUkVWX1ZFUlNJT05fUkVHRVhQID0gJChzdWJzdCAuLFwuLCQoUFJFVl9WRVJTSU9OKSkKKworaWZlcSAoJChWQyksJChHSVQpKQorICB0aGlzLXZjLXRhZyA9IHYkKFZFUlNJT04pCisgIHRoaXMtdmMtdGFnLXJlZ2V4cCA9IHYkKFZFUlNJT05fUkVHRVhQKQorZWxzZQorICB0YWctcGFja2FnZSA9ICQoc2hlbGwgZWNobyAiJChQQUNLQUdFKSIgfCB0ciAnWzpsb3dlcjpdJyAnWzp1cHBlcjpdJykKKyAgdGFnLXRoaXMtdmVyc2lvbiA9ICQoc3Vic3QgLixfLCQoVkVSU0lPTikpCisgIHRoaXMtdmMtdGFnID0gJCh0YWctcGFja2FnZSktJCh0YWctdGhpcy12ZXJzaW9uKQorICB0aGlzLXZjLXRhZy1yZWdleHAgPSAkKHRoaXMtdmMtdGFnKQorZW5kaWYKK215X2Rpc3RkaXIgPSAkKFBBQ0tBR0UpLSQoVkVSU0lPTikKKworIyBPbGQgcmVsZWFzZXMgYXJlIHN0b3JlZCBoZXJlLgorcmVsZWFzZV9hcmNoaXZlX2RpciA/PSAuLi9yZWxlYXNlCisKKyMgSWYgUkVMRUFTRV9UWVBFIGlzIHVuZGVmaW5lZCwgYnV0IFJFTEVBU0UgaXMsIHVzZSBpdHMgc2Vjb25kIHdvcmQuCisjIEJ1dCBvdmVyd3JpdGUgVkVSU0lPTi4KK2lmZGVmIFJFTEVBU0UKKyAgVkVSU0lPTiA6PSAkKHdvcmQgMSwgJChSRUxFQVNFKSkKKyAgUkVMRUFTRV9UWVBFID89ICQod29yZCAyLCAkKFJFTEVBU0UpKQorZW5kaWYKKworIyBWYWxpZGF0ZSBhbmQgcmV0dXJuICQoUkVMRUFTRV9UWVBFKSwgb3IgZGllLgorUkVMRUFTRV9UWVBFUyA9IGFscGhhIGJldGEgc3RhYmxlCityZWxlYXNlLXR5cGUgPSAkKGNhbGwgbWVtYmVyLWNoZWNrLFJFTEVBU0VfVFlQRSwkKFJFTEVBU0VfVFlQRVMpKQorCisjIE92ZXJyaWRlIGdudV9yZWxfaG9zdCBhbmQgdXJsX2Rpcl9saXN0IGluIGNmZy5tayBpZiB0aGVzZSBhcmUgbm90IHJpZ2h0LgorIyBVc2UgYWxwaGEuZ251Lm9yZyBmb3IgYWxwaGEgYW5kIGJldGEgcmVsZWFzZXMuCisjIFVzZSBmdHAuZ251Lm9yZyBmb3Igc3RhYmxlIHJlbGVhc2VzLgorZ251X2Z0cF9ob3N0LWFscGhhID0gYWxwaGEuZ251Lm9yZworZ251X2Z0cF9ob3N0LWJldGEgPSBhbHBoYS5nbnUub3JnCitnbnVfZnRwX2hvc3Qtc3RhYmxlID0gZnRwLmdudS5vcmcKK2dudV9yZWxfaG9zdCA/PSAkKGdudV9mdHBfaG9zdC0kKHJlbGVhc2UtdHlwZSkpCisKK3VybF9kaXJfbGlzdCA/PSAkKGlmICQoY2FsbCBfZXF1YWwsJChnbnVfcmVsX2hvc3QpLGZ0cC5nbnUub3JnKSwJXAorICAgICAgICAgICAgICAgICAgICAgaHR0cDovL2Z0cG1pcnJvci5nbnUub3JnLyQoUEFDS0FHRSksCQlcCisgICAgICAgICAgICAgICAgICAgICBmdHA6Ly8kKGdudV9yZWxfaG9zdCkvZ251LyQoUEFDS0FHRSkpCisKKyMgT3ZlcnJpZGUgdGhpcyBpbiBjZmcubWsgaWYgeW91IGFyZSB1c2luZyBhIGRpZmZlcmVudCBmb3JtYXQgaW4geW91cgorIyBORVdTIGZpbGUuCit0b2RheSA9ICQoc2hlbGwgZGF0ZSArJVktJW0tJWQpCisKKyMgU2VsZWN0IHdoaWNoIGxpbmVzIG9mIE5FV1MgYXJlIHNlYXJjaGVkIGZvciAkKG5ld3MtY2hlY2stcmVnZXhwKS4KKyMgVGhpcyBpcyBhIHNlZCBsaW5lIG51bWJlciBzcGVjLiAgVGhlIGRlZmF1bHQgc2F5cyB0aGF0IHdlIHNlYXJjaAorIyBsaW5lcyAxLi4xMCBvZiBORVdTIGZvciAkKG5ld3MtY2hlY2stcmVnZXhwKS4KKyMgSWYgeW91IHdhbnQgdG8gc2VhcmNoIG9ubHkgbGluZSAzIG9yIG9ubHkgbGluZXMgMjAtMjIsIHVzZSAiMyIgb3IgIjIwLDIyIi4KK25ld3MtY2hlY2stbGluZXMtc3BlYyA/PSAxLDEwCituZXdzLWNoZWNrLXJlZ2V4cCA/PSAnXlwqLiogJChWRVJTSU9OX1JFR0VYUCkgXCgkKHRvZGF5KVwpJworCisjIFByZXZlbnQgcHJvZ3JhbXMgbGlrZSAnc29ydCcgZnJvbSBjb25zaWRlcmluZyBkaXN0aW5jdCBzdHJpbmdzIHRvIGJlIGVxdWFsLgorIyBEb2luZyBpdCBoZXJlIHNhdmVzIHVzIGZyb20gaGF2aW5nIHRvIHNldCBMQ19BTEwgZWxzZXdoZXJlIGluIHRoaXMgZmlsZS4KK2V4cG9ydCBMQ19BTEwgPSBDCisKKyMjIC0tLS0tLS0tLS0tLS0tLSAjIworIyMgU2FuaXR5IGNoZWNrcy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0gIyMKKworX2NmZ19tayA6PSAkKHdpbGRjYXJkICQoc3JjZGlyKS9jZmcubWspCisKKyMgQ29sbGVjdCB0aGUgbmFtZXMgb2YgcnVsZXMgc3RhcnRpbmcgd2l0aCAnc2NfJy4KK3N5bnRheC1jaGVjay1ydWxlcyA6PSAkKHNvcnQgJChzaGVsbCBzZWQgLW4gJ3MvXlwoc2NfW2EtekEtWjAtOV8tXSpcKTouKi9cMS9wJyBcCisJCQkkKHNyY2RpcikvJChNRSkgJChfY2ZnX21rKSkpCisuUEhPTlk6ICQoc3ludGF4LWNoZWNrLXJ1bGVzKQorCitpZmVxICgkKHNoZWxsICQoVkNfTElTVCkgPi9kZXYvbnVsbCAyPiYxOyBlY2hvICQkPyksMCkKKyAgbG9jYWwtY2hlY2tzLWF2YWlsYWJsZSArPSAkKHN5bnRheC1jaGVjay1ydWxlcykKK2Vsc2UKKyAgbG9jYWwtY2hlY2tzLWF2YWlsYWJsZSArPSBuby12Yy1kZXRlY3RlZAorbm8tdmMtZGV0ZWN0ZWQ6CisJQGVjaG8gIk5vIHZlcnNpb24gY29udHJvbCBmaWxlcyBkZXRlY3RlZDsgc2tpcHBpbmcgc3ludGF4IGNoZWNrIgorZW5kaWYKKy5QSE9OWTogJChsb2NhbC1jaGVja3MtYXZhaWxhYmxlKQorCisjIEFycmFuZ2UgdG8gcHJpbnQgdGhlIG5hbWUgb2YgZWFjaCBzeW50YXgtY2hlY2tpbmcgcnVsZSBqdXN0IGJlZm9yZSBydW5uaW5nIGl0LgorJChzeW50YXgtY2hlY2stcnVsZXMpOiAlOiAlLm0KK3NjX21fcnVsZXNfID0gJChwYXRzdWJzdCAlLCAlLm0sICQoc3ludGF4LWNoZWNrLXJ1bGVzKSkKKy5QSE9OWTogJChzY19tX3J1bGVzXykKKyQoc2NfbV9ydWxlc18pOgorCUBlY2hvICQocGF0c3Vic3Qgc2NfJS5tLCAlLCAkQCkKKwlAZGF0ZSArJXMuJU4gPiAuc2Mtc3RhcnQtJChiYXNlbmFtZSAkQCkKKworIyBDb21wdXRlIGFuZCBwcmludCB0aGUgZWxhcHNlZCB0aW1lIGZvciBlYWNoIHN5bnRheC1jaGVjayBydWxlLgorc2Nfel9ydWxlc18gPSAkKHBhdHN1YnN0ICUsICUueiwgJChzeW50YXgtY2hlY2stcnVsZXMpKQorLlBIT05ZOiAkKHNjX3pfcnVsZXNfKQorJChzY196X3J1bGVzXyk6ICUuejogJQorCUBlbmQ9JCQoZGF0ZSArJXMuJU4pOwkJCQkJCVwKKwlzdGFydD0kJChjYXQgLnNjLXN0YXJ0LSQqKTsJCQkJCVwKKwlybSAtZiAuc2Mtc3RhcnQtJCo7CQkJCQkJXAorCWF3ayAtdiBzPSQkc3RhcnQgLXYgZT0kJGVuZAkJCQkJXAorCSAgJ0VORCB7cHJpbnRmICIlLjJmICQocGF0c3Vic3Qgc2NfJSwlLCQqKVxuIiwgZSAtIHN9JyA8IC9kZXYvbnVsbAorCisjIFRoZSBwYXRzdWJzdCBoZXJlIGlzIHRvIHJlcGxhY2UgZWFjaCBzY18lIHJ1bGUgd2l0aCBpdHMgc2NfJS56IHdyYXBwZXIKKyMgdGhhdCBjb21wdXRlcyBhbmQgcHJpbnRzIGVsYXBzZWQgdGltZS4KK2xvY2FsLWNoZWNrIDo9CQkJCQkJCQlcCisgICQocGF0c3Vic3Qgc2NfJSwgc2NfJS56LAkJCQkJCVwKKyAgICAkKGZpbHRlci1vdXQgJChsb2NhbC1jaGVja3MtdG8tc2tpcCksICQobG9jYWwtY2hlY2tzLWF2YWlsYWJsZSkpKQorCitzeW50YXgtY2hlY2s6ICQobG9jYWwtY2hlY2spCisKKyMgX3NjX3NlYXJjaF9yZWdleHAKKyMKKyMgVGhpcyBtYWNybyBzZWFyY2hlcyBmb3IgYSBnaXZlbiBjb25zdHJ1Y3QgaW4gdGhlIHNlbGVjdGVkIGZpbGVzIGFuZAorIyB0aGVuIHRha2VzIHNvbWUgYWN0aW9uLgorIworIyBQYXJhbWV0ZXJzIChzaGVsbCB2YXJpYWJsZXMpOgorIworIyAgcHJvaGliaXQgfCByZXF1aXJlCisjCisjICAgICBSZWd1bGFyIGV4cHJlc3Npb24gKEVSRSkgZGVub3RpbmcgZWl0aGVyIGEgZm9yYmlkZGVuIGNvbnN0cnVjdAorIyAgICAgb3IgYSByZXF1aXJlZCBjb25zdHJ1Y3QuICBUaG9zZSBhcmd1bWVudHMgYXJlIGV4Y2x1c2l2ZS4KKyMKKyMgIGV4Y2x1ZGUKKyMKKyMgICAgIFJlZ3VsYXIgZXhwcmVzc2lvbiAoRVJFKSBkZW5vdGluZyBsaW5lcyB0byBpZ25vcmUgdGhhdCBtYXRjaGVkCisjICAgICBhIHByb2hpYml0IGNvbnN0cnVjdC4gIEZvciBleGFtcGxlLCB0aGlzIGNhbiBiZSB1c2VkIHRvIGV4Y2x1ZGUKKyMgICAgIGNvbW1lbnRzIHRoYXQgbWVudGlvbiB3aHkgdGhlIG5lYXJieSBjb2RlIHVzZXMgYW4gYWx0ZXJuYXRpdmUKKyMgICAgIGNvbnN0cnVjdCBpbnN0ZWFkIG9mIHRoZSBzaW1wbGVyIHByb2hpYml0ZWQgY29uc3RydWN0LgorIworIyAgaW5fdmNfZmlsZXMgfCBpbl9maWxlcworIworIyAgICAgZ3JlcC1FLXN0eWxlIHJlZ2V4cCBzZWxlY3RpbmcgdGhlIGZpbGVzIHRvIGNoZWNrLiAgRm9yIGluX3ZjX2ZpbGVzLAorIyAgICAgdGhlIHJlZ2V4cCBpcyB1c2VkIHRvIHNlbGVjdCBtYXRjaGluZyBmaWxlcyBmcm9tIHRoZSBsaXN0IG9mIGFsbAorIyAgICAgdmVyc2lvbi1jb250cm9sbGVkIGZpbGVzOyBmb3IgaW5fZmlsZXMsIGl0J3MgZnJvbSB0aGUgbmFtZXMgcHJpbnRlZAorIyAgICAgYnkgImZpbmQgJChzcmNkaXIpIi4gIFdoZW4gbmVpdGhlciBpcyBzcGVjaWZpZWQsIHVzZSBhbGwgZmlsZXMgdGhhdAorIyAgICAgYXJlIHVuZGVyIHZlcnNpb24gY29udHJvbC4KKyMKKyMgIGNvbnRhaW5pbmcgfCBub25fY29udGFpbmluZworIworIyAgICAgU2VsZWN0IHRoZSBmaWxlcyAobm9uKSBjb250YWluaW5nIHN0cmluZ3MgbWF0Y2hpbmcgdGhpcyByZWdleHAuCisjICAgICBJZiBib3RoIGFyZ3VtZW50cyBhcmUgc3BlY2lmaWVkIHRoZW4gQ09OVEFJTklORyB0YWtlcworIyAgICAgcHJlY2VkZW5jZS4KKyMKKyMgIHdpdGhfZ3JlcF9vcHRpb25zCisjCisjICAgICBFeHRyYSBvcHRpb25zIGZvciBncmVwLgorIworIyAgaWdub3JlX2Nhc2UKKyMKKyMgICAgIElnbm9yZSBjYXNlLgorIworIyAgaGFsdAorIworIyAgICAgTWVzc2FnZSB0byBkaXNwbGF5IGJlZm9yZSB0byBoYWx0aW5nIGV4ZWN1dGlvbi4KKyMKKyMgRmluYWxseSwgeW91IG1heSBleGVtcHQgZmlsZXMgYmFzZWQgb24gYW4gRVJFIG1hdGNoaW5nIGZpbGUgbmFtZXMuCisjIEZvciBleGFtcGxlLCB0byBleGVtcHQgZnJvbSB0aGUgc2Nfc3BhY2VfdGFiIGNoZWNrIGFsbCBmaWxlcyB3aXRoIHRoZQorIyAuZGlmZiBzdWZmaXgsIHNldCB0aGlzIE1ha2UgdmFyaWFibGU6CisjCisjIGV4Y2x1ZGVfZmlsZV9uYW1lX3JlZ2V4cC0tc2Nfc3BhY2VfdGFiID0gXC5kaWZmJAorIworIyBOb3RlIHRoYXQgd2hpbGUgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIG1vc3RseSBpbmhlcml0ZWQgdmlhIFZDX0xJU1RfRVhDRVBULAorIyB3aGVuIGZpbHRlcmluZyBieSBuYW1lIHZpYSBpbl9maWxlcywgd2UgZXhwbGljaXRseSBmaWx0ZXIgb3V0IG1hdGNoaW5nCisjIG5hbWVzIGhlcmUgYXMgd2VsbC4KKworIyBJbml0aWFsaXplIGVhY2gsIHNvIHRoYXQgZW52dmFyIHNldHRpbmdzIGNhbm5vdCBpbnRlcmZlcmUuCitleHBvcnQgcmVxdWlyZSA9CitleHBvcnQgcHJvaGliaXQgPQorZXhwb3J0IGV4Y2x1ZGUgPQorZXhwb3J0IGluX3ZjX2ZpbGVzID0KK2V4cG9ydCBpbl9maWxlcyA9CitleHBvcnQgY29udGFpbmluZyA9CitleHBvcnQgbm9uX2NvbnRhaW5pbmcgPQorZXhwb3J0IGhhbHQgPQorZXhwb3J0IHdpdGhfZ3JlcF9vcHRpb25zID0KKworIyBCeSBkZWZhdWx0LCBfc2Nfc2VhcmNoX3JlZ2V4cCBkb2VzIG5vdCBpZ25vcmUgY2FzZS4KK2V4cG9ydCBpZ25vcmVfY2FzZSA9CitfaWdub3JlX2Nhc2UgPSAkJCh0ZXN0IC1uICIkJGlnbm9yZV9jYXNlIiAmJiBwcmludGYgJXMgLWkgfHwgOikKKworZGVmaW5lIF9zY19zYXlfYW5kX2V4aXQKKyAgIGR1bW15PTsgOiBzbyB3ZSBkbyBub3QgbmVlZCBhIHNlbWljb2xvbiBiZWZvcmUgZWFjaCB1c2U7CQlcCisgICB7IHByaW50ZiAnJXNcbicgIiQoTUUpOiAkJG1zZyIgMT4mMjsgZXhpdCAxOyB9OworZW5kZWYKKworZGVmaW5lIF9zY19zZWFyY2hfcmVnZXhwCisgICBkdW1teT07IDogc28gd2UgZG8gbm90IG5lZWQgYSBzZW1pY29sb24gYmVmb3JlIGVhY2ggdXNlOwkJXAorCQkJCQkJCQkJXAorICAgOiBDaGVjayBhcmd1bWVudHM7CQkJCQkJCVwKKyAgIHRlc3QgLW4gIiQkcHJvaGliaXQiICYmIHRlc3QgLW4gIiQkcmVxdWlyZSIJCQkJXAorICAgICAmJiB7IG1zZz0nQ2Fubm90IHNwZWNpZnkgYm90aCBwcm9oaWJpdCBhbmQgcmVxdWlyZScJCVwKKyAgICAgICAgICAkKF9zY19zYXlfYW5kX2V4aXQpIH0gfHwgOjsJCQkJCVwKKyAgIHRlc3QgLXogIiQkcHJvaGliaXQiICYmIHRlc3QgLXogIiQkcmVxdWlyZSIJCQkJXAorICAgICAmJiB7IG1zZz0nU2hvdWxkIHNwZWNpZnkgZWl0aGVyIHByb2hpYml0IG9yIHJlcXVpcmUnCQlcCisgICAgICAgICAgJChfc2Nfc2F5X2FuZF9leGl0KSB9IHx8IDo7CQkJCQlcCisgICB0ZXN0IC16ICIkJHByb2hpYml0IiAmJiB0ZXN0IC1uICIkJGV4Y2x1ZGUiCQkJCVwKKyAgICAgJiYgeyBtc2c9J1VzZSBvZiBleGNsdWRlIHJlcXVpcmVzIGEgcHJvaGliaXQgcGF0dGVybicJCVwKKyAgICAgICAgICAkKF9zY19zYXlfYW5kX2V4aXQpIH0gfHwgOjsJCQkJCVwKKyAgIHRlc3QgLW4gIiQkaW5fdmNfZmlsZXMiICYmIHRlc3QgLW4gIiQkaW5fZmlsZXMiCQkJXAorICAgICAmJiB7IG1zZz0nQ2Fubm90IHNwZWNpZnkgYm90aCBpbl92Y19maWxlcyBhbmQgaW5fZmlsZXMnCQlcCisgICAgICAgICAgJChfc2Nfc2F5X2FuZF9leGl0KSB9IHx8IDo7CQkJCQlcCisgICB0ZXN0ICJ4JCRoYWx0IiAhPSB4CQkJCQkJCVwKKyAgICAgfHwgeyBtc2c9J2hhbHQgbm90IGRlZmluZWQnICQoX3NjX3NheV9hbmRfZXhpdCkgfTsJCQlcCisJCQkJCQkJCQlcCisgICA6IEZpbHRlciBieSBmaWxlIG5hbWU7CQkJCQkJXAorICAgaWYgdGVzdCAtbiAiJCRpbl9maWxlcyI7IHRoZW4JCQkJCVwKKyAgICAgZmlsZXM9JCQoZmluZCAkKHNyY2RpcikgfCBncmVwIC1FICIkJGluX2ZpbGVzIgkJCVwKKyAgICAgICAgICAgICAgfCBncmVwIC1FdiAnJChfc2NfZXhjbCknKTsJCQkJXAorICAgZWxzZQkJCQkJCQkJCVwKKyAgICAgZmlsZXM9JCQoJChWQ19MSVNUX0VYQ0VQVCkpOwkJCQkJXAorICAgICBpZiB0ZXN0IC1uICIkJGluX3ZjX2ZpbGVzIjsgdGhlbgkJCQkJXAorICAgICAgIGZpbGVzPSQkKGVjaG8gIiQkZmlsZXMiIHwgZ3JlcCAtRSAiJCRpbl92Y19maWxlcyIpOwkJXAorICAgICBmaTsJCQkJCQkJCVwKKyAgIGZpOwkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgIDogRmlsdGVyIGJ5IGNvbnRlbnQ7CQkJCQkJCVwKKyAgIHRlc3QgLW4gIiQkZmlsZXMiICYmIHRlc3QgLW4gIiQkY29udGFpbmluZyIJCQkJXAorICAgICAmJiB7IGZpbGVzPSQkKGdyZXAgLWwgIiQkY29udGFpbmluZyIgJCRmaWxlcyk7IH0gfHwgOjsJCVwKKyAgIHRlc3QgLW4gIiQkZmlsZXMiICYmIHRlc3QgLW4gIiQkbm9uX2NvbnRhaW5pbmciCQkJXAorICAgICAmJiB7IGZpbGVzPSQkKGdyZXAgLXZsICIkJG5vbl9jb250YWluaW5nIiAkJGZpbGVzKTsgfSB8fCA6OwlcCisJCQkJCQkJCQlcCisgICA6IENoZWNrIGZvciB0aGUgY29uc3RydWN0OwkJCQkJCVwKKyAgIGlmIHRlc3QgLW4gIiQkZmlsZXMiOyB0aGVuCQkJCQkJXAorICAgICBpZiB0ZXN0IC1uICIkJHByb2hpYml0IjsgdGhlbgkJCQkJXAorICAgICAgIGdyZXAgJCR3aXRoX2dyZXBfb3B0aW9ucyAkKF9pZ25vcmVfY2FzZSkgLW5FICIkJHByb2hpYml0IiAkJGZpbGVzIFwKKyAgICAgICAgIHwgZ3JlcCAtdkUgIiQke2V4Y2x1ZGU6LV4kJH0iCQkJCQlcCisgICAgICAgICAmJiB7IG1zZz0iJCRoYWx0IiAkKF9zY19zYXlfYW5kX2V4aXQpIH0gfHwgOjsJCQlcCisgICAgIGVsc2UJCQkJCQkJCVwKKyAgICAgICBncmVwICQkd2l0aF9ncmVwX29wdGlvbnMgJChfaWdub3JlX2Nhc2UpIC1MRSAiJCRyZXF1aXJlIiAkJGZpbGVzIFwKKyAgICAgICAgICAgfCBncmVwIC4JCQkJCQkJXAorICAgICAgICAgJiYgeyBtc2c9IiQkaGFsdCIgJChfc2Nfc2F5X2FuZF9leGl0KSB9IHx8IDo7CQkJXAorICAgICBmaQkJCQkJCQkJCVwKKyAgIGVsc2UgOjsJCQkJCQkJCVwKKyAgIGZpIHx8IDo7CitlbmRlZgorCitzY19hdm9pZF9pZl9iZWZvcmVfZnJlZToKKwlAJChzcmNkaXIpLyQoX2J1aWxkLWF1eCkvdXNlbGVzcy1pZi1iZWZvcmUtZnJlZQkJCVwKKwkJJCh1c2VsZXNzX2ZyZWVfb3B0aW9ucykJCQkJCVwKKwkgICAgJCQoJChWQ19MSVNUX0VYQ0VQVCkgfCBncmVwIC12IHVzZWxlc3MtaWYtYmVmb3JlLWZyZWUpICYmCVwKKwkgIHsgZWNobyAnJChNRSk6IGZvdW5kIHVzZWxlc3MgImlmIiBiZWZvcmUgImZyZWUiIGFib3ZlJyAxPiYyOwlcCisJICAgIGV4aXQgMTsgfSB8fCA6CisKK3NjX2Nhc3Rfb2ZfYXJndW1lbnRfdG9fZnJlZToKKwlAcHJvaGliaXQ9J1w8ZnJlZSAqXCggKlwoJyBoYWx0PSJkb24ndCBjYXN0IGZyZWUgYXJndW1lbnQiCVwKKwkgICQoX3NjX3NlYXJjaF9yZWdleHApCisKK3NjX2Nhc3Rfb2ZfeF9hbGxvY19yZXR1cm5fdmFsdWU6CisJQHByb2hpYml0PSdcKlwpICp4KG18Y3xyZSlhbGxvY1w+JwkJCQlcCisJaGFsdD0iZG9uJ3QgY2FzdCB4KmFsbG9jIHJldHVybiB2YWx1ZSIJCQkJXAorCSAgJChfc2Nfc2VhcmNoX3JlZ2V4cCkKKworc2NfY2FzdF9vZl9hbGxvY2FfcmV0dXJuX3ZhbHVlOgorCUBwcm9oaWJpdD0nXCpcKSAqYWxsb2NhXD4nCQkJCQlcCisJaGFsdD0iZG9uJ3QgY2FzdCBhbGxvY2EgcmV0dXJuIHZhbHVlIgkJCQlcCisJICAkKF9zY19zZWFyY2hfcmVnZXhwKQorCitzY19zcGFjZV90YWI6CisJQHByb2hpYml0PSdbIF0JJwkJCQkJCVwKKwloYWx0PSdmb3VuZCBTUEFDRS1UQUIgc2VxdWVuY2U7IHJlbW92ZSB0aGUgU1BBQ0UnCQlcCisJICAkKF9zY19zZWFyY2hfcmVnZXhwKQorCisjIERvbid0IHVzZSAqc2NhbmYgb3IgdGhlIG9sZCBhdG8qIGZ1bmN0aW9ucyBpbiAicmVhbCIgY29kZS4KKyMgVGhleSBwcm92aWRlIG5vIGVycm9yIGNoZWNraW5nIG1lY2hhbmlzbS4KKyMgSW5zdGVhZCwgdXNlIHN0cnRvKiBmdW5jdGlvbnMuCitzY19wcm9oaWJpdF9hdG9pX2F0b2Y6CisJQHByb2hpYml0PSdcPChbZnNdP3NjYW5mfGF0byhbZmlscV18bGwpKSAqXCgnCQkJCVwKKwloYWx0PSdkbyBub3QgdXNlICpzY2FuJydmLCBhdG8nJ2YsIGF0bycnaSwgYXRvJydsLCBhdG8nJ2xsIG9yIGF0bycncScJXAorCSAgJChfc2Nfc2VhcmNoX3JlZ2V4cCkKKworIyBVc2UgU1RSRVEgcmF0aGVyIHRoYW4gY29tcGFyaW5nIHN0cmNtcCA9PSAwLCBvciAhPSAwLgorc3BfID0gc3RyY21wICpcKC4rXCkKK3NjX3Byb2hpYml0X3N0cmNtcDoKKwlAcHJvaGliaXQ9JyEgKnN0cmNtcCAqXCh8XDwkKHNwXykgKlshPV09fFshPV09ICokKHNwXyknCQlcCisJZXhjbHVkZT0nIyAqZGVmaW5lIFNUUk4/RVFcKCcJCQkJCVwKKwloYWx0PSdyZXBsYWNlIHN0cmNtcCBjYWxscyBhYm92ZSB3aXRoIFNUUkVRL1NUUk5FUScJCVwKKwkgICQoX3NjX3NlYXJjaF9yZWdleHApCisKKyMgUmVhbGx5LiAgWW91IGRvbid0IHdhbnQgdG8gdXNlIHRoaXMgZnVuY3Rpb24uCisjIEl0IG1heSBmYWlsIHRvIE5VTC10ZXJtaW5hdGUgdGhlIGRlc3RpbmF0aW9uLAorIyBhbmQgYWx3YXlzIE5VTC1wYWRzIG91dCB0byB0aGUgc3BlY2lmaWVkIGxlbmd0aC4KK3NjX3Byb2hpYml0X3N0cm5jcHk6CisJQHByb2hpYml0PSdcPHN0cm5jcHkgKlwoJwkJCQkJXAorCWhhbHQ9J2RvIG5vdCB1c2Ugc3RybmNweSwgcGVyaW9kJwkJCQlcCisJICAkKF9zY19zZWFyY2hfcmVnZXhwKQorCisjIFBhc3MgRVhJVF8qLCBub3QgbnVtYmVyLCB0byB1c2FnZSwgZXhpdCwgYW5kIGVycm9yICh3aGVuIGV4aXRpbmcpCisjIENvbnZlcnQgYWxsIHVzZXMgYXV0b21hdGljYWxseSwgdmlhIHRoZXNlIHR3byBjb21tYW5kczoKKyMgZ2l0IGdyZXAgLWwgJ1w8ZXhpdCAqKDEpJyBcCisjICB8IGdyZXAgLXZFZiAueC1zY19wcm9oaWJpdF9tYWdpY19udW1iZXJfZXhpdCBcCisjICB8IHhhcmdzIC0tbm8tcnVuLWlmLWVtcHR5IFwKKyMgICAgICBwZXJsIC1waSAtZSAncy8oXnxbXi5dKVxiKGV4aXQgPylcKDFcKS8kMSQyKEVYSVRfRkFJTFVSRSkvJworIyBnaXQgZ3JlcCAtbCAnXDxleGl0ICooMCknIFwKKyMgIHwgZ3JlcCAtdkVmIC54LXNjX3Byb2hpYml0X21hZ2ljX251bWJlcl9leGl0IFwKKyMgIHwgeGFyZ3MgLS1uby1ydW4taWYtZW1wdHkgXAorIyAgICAgIHBlcmwgLXBpIC1lICdzLyhefFteLl0pXGIoZXhpdCA/KVwoMFwpLyQxJDIoRVhJVF9TVUNDRVNTKS8nCitzY19wcm9oaWJpdF9tYWdpY19udW1iZXJfZXhpdDoKKwlAcHJvaGliaXQ9JyhefFteLl0pXDwodXNhZ2V8ZXhpdHxlcnJvcikgP1woLT9bMC05XStbLCldJwlcCisJZXhjbHVkZT0nZXhpdCBcKDc3XCl8ZXJyb3IgP1woKCgwfDc3KSx8W14sXSopJwkJCVwKKwloYWx0PSd1c2UgRVhJVF8qIHZhbHVlcyByYXRoZXIgdGhhbiBtYWdpYyBudW1iZXInCQlcCisJICAkKF9zY19zZWFyY2hfcmVnZXhwKQorCisjIFVzaW5nIEVYSVRfU1VDQ0VTUyBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gZXJyb3IgaXMgbWlzbGVhZGluZywKKyMgc2luY2Ugd2hlbiB0aGF0IHBhcmFtZXRlciBpcyAwLCBlcnJvciBkb2VzIG5vdCBleGl0LiAgVXNlICcwJyBpbnN0ZWFkLgorc2NfZXJyb3JfZXhpdF9zdWNjZXNzOgorCUBwcm9oaWJpdD0nZXJyb3IgKlwoRVhJVF9TVUNDRVNTLCcJCQkJXAorCWluX3ZjX2ZpbGVzPSdcLltjaGx5XSQkJwkJCQkJXAorCWhhbHQ9J2ZvdW5kIGVycm9yIChFWElUX1NVQ0NFU1MnCQkJCVwKKwkgJChfc2Nfc2VhcmNoX3JlZ2V4cCkKKworIyAiRkFUQUw6IiBzaG91bGQgYmUgZnVsbHkgdXBwZXItY2FzZWQgaW4gZXJyb3IgbWVzc2FnZXMKKyMgIldBUk5JTkc6IiBzaG91bGQgYmUgZnVsbHkgdXBwZXItY2FzZWQsIG9yIGZ1bGx5IGxvd2VyLWNhc2VkCitzY19lcnJvcl9tZXNzYWdlX3dhcm5fZmF0YWw6CisJQGdyZXAgLW5FQTIgJ1tecnBdZXJyb3IgKlwoJyAkJCgkKFZDX0xJU1RfRVhDRVBUKSkJCVwKKwkgICAgfCBncmVwIC1FICciV2FybmluZ3wiRmF0YWx8ImZhdGFsJyAmJgkJCVwKKwkgIHsgZWNobyAnJChNRSk6IHVzZSBGQVRBTCwgV0FSTklORyBvciB3YXJuaW5nJwkxPiYyOwkJXAorCSAgICBleGl0IDE7IH0gfHwgOgorCisjIEVycm9yIG1lc3NhZ2VzIHNob3VsZCBub3Qgc3RhcnQgd2l0aCBhIGNhcGl0YWwgbGV0dGVyCitzY19lcnJvcl9tZXNzYWdlX3VwcGVyY2FzZToKKwlAZ3JlcCAtbkVBMiAnW15ycF1lcnJvciAqXCgnICQkKCQoVkNfTElTVF9FWENFUFQpKQkJXAorCSAgICB8IGdyZXAgLUUgJyJbQS1aXScJCQkJCQlcCisJICAgIHwgZ3JlcCAtdkUgJyJGQVRBTHwiV0FSTklOR3wiSmF2YXwiQyN8UFJJdU1BWCcgJiYJCVwKKwkgIHsgZWNobyAnJChNRSk6IGZvdW5kIGNhcGl0YWxpemVkIGVycm9yIG1lc3NhZ2UnIDE+JjI7CQlcCisJICAgIGV4aXQgMTsgfSB8fCA6CisKKyMgRXJyb3IgbWVzc2FnZXMgc2hvdWxkIG5vdCBlbmQgd2l0aCBhIHBlcmlvZAorc2NfZXJyb3JfbWVzc2FnZV9wZXJpb2Q6CisJQGdyZXAgLW5FQTIgJ1tecnBdZXJyb3IgKlwoJyAkJCgkKFZDX0xJU1RfRVhDRVBUKSkJCVwKKwkgICAgfCBncmVwIC1FICdbXi4iXVwuIicgJiYJCQkJCVwKKwkgIHsgZWNobyAnJChNRSk6IGZvdW5kIGVycm9yIG1lc3NhZ2UgZW5kaW5nIGluIHBlcmlvZCcgMT4mMjsJXAorCSAgICBleGl0IDE7IH0gfHwgOgorCitzY19maWxlX3N5c3RlbToKKwlAcHJvaGliaXQ9ZmlsZScnc3lzdGVtCQkJCQkJXAorCWlnbm9yZV9jYXNlPTEJCQkJCQkJXAorCWhhbHQ9J2ZvdW5kIHVzZSBvZiAiZmlsZScnc3lzdGVtIjsgc3BlbGwgaXQgImZpbGUgc3lzdGVtIicJXAorCSAgJChfc2Nfc2VhcmNoX3JlZ2V4cCkKKworIyBEb24ndCB1c2UgY3BwIHRlc3RzIG9mIHRoaXMgc3ltYm9sLiAgQWxsIGNvZGUgYXNzdW1lcyBjb25maWcuaCBpcyBpbmNsdWRlZC4KK3NjX3Byb2hpYml0X2hhdmVfY29uZmlnX2g6CisJQHByb2hpYml0PSdeIyAqaWYuKkhBVkUnJ19DT05GSUdfSCcJCQkJXAorCWhhbHQ9J2ZvdW5kIHVzZSBvZiBIQVZFJydfQ09ORklHX0g7IHJlbW92ZScJCQlcCisJICAkKF9zY19zZWFyY2hfcmVnZXhwKQorCisjIE5lYXJseSBhbGwgLmMgZmlsZXMgbXVzdCBpbmNsdWRlIDxjb25maWcuaD4uICBIb3dldmVyLCB3ZSBhbHNvIHBlcm1pdCB0aGlzCisjIHZpYSBpbmNsdXNpb24gb2YgYSBwYWNrYWdlLXNwZWNpZmljIGhlYWRlciwgaWYgY2ZnLm1rIHNwZWNpZmllZCBvbmUuCisjIGNvbmZpZ19oX2hlYWRlciBtdXN0IGJlIHN1aXRhYmxlIGZvciBncmVwIC1FLgorY29uZmlnX2hfaGVhZGVyID89IDxjb25maWdcLmg+CitzY19yZXF1aXJlX2NvbmZpZ19oOgorCUByZXF1aXJlPSdeIyAqaW5jbHVkZSAkKGNvbmZpZ19oX2hlYWRlciknCQkJXAorCWluX3ZjX2ZpbGVzPSdcLmMkJCcJCQkJCQlcCisJaGFsdD0ndGhlIGFib3ZlIGZpbGVzIGRvIG5vdCBpbmNsdWRlIDxjb25maWcuaD4nCQlcCisJICAkKF9zY19zZWFyY2hfcmVnZXhwKQorCisjIFlvdSBtdXN0IGluY2x1ZGUgPGNvbmZpZy5oPiBiZWZvcmUgaW5jbHVkaW5nIGFueSBvdGhlciBoZWFkZXIgZmlsZS4KKyMgVGhpcyBjYW4gcG9zc2libHkgYmUgdmlhIGEgcGFja2FnZS1zcGVjaWZpYyBoZWFkZXIsIGlmIGdpdmVuIGJ5IGNmZy5tay4KK3NjX3JlcXVpcmVfY29uZmlnX2hfZmlyc3Q6CisJQGlmICQoVkNfTElTVF9FWENFUFQpIHwgZ3JlcCAtbCAnXC5jJCQnID4gL2Rldi9udWxsOyB0aGVuCVwKKwkgIGZhaWw9MDsJCQkJCQkJXAorCSAgZm9yIGkgaW4gJCQoJChWQ19MSVNUX0VYQ0VQVCkgfCBncmVwICdcLmMkJCcpOyBkbwkJXAorCSAgICBncmVwICdeIyAqaW5jbHVkZVw+JyAkJGkgfCBzZWQgMXEJCQkJXAorCQl8IGdyZXAgLUUgJ14jICppbmNsdWRlICQoY29uZmlnX2hfaGVhZGVyKScgPiAvZGV2L251bGwJXAorCSAgICAgIHx8IHsgZWNobyAkJGk7IGZhaWw9MTsgfTsJCQkJCVwKKwkgIGRvbmU7CQkJCQkJCQlcCisJICB0ZXN0ICQkZmFpbCA9IDEgJiYJCQkJCQlcCisJICAgIHsgZWNobyAnJChNRSk6IHRoZSBhYm92ZSBmaWxlcyBpbmNsdWRlIHNvbWUgb3RoZXIgaGVhZGVyJwlcCisJCSdiZWZvcmUgPGNvbmZpZy5oPicgMT4mMjsgZXhpdCAxOyB9IHx8IDo7CQlcCisJZWxzZSA6OwkJCQkJCQkJXAorCWZpCisKK3NjX3Byb2hpYml0X0hBVkVfTUJSVE9XQzoKKwlAcHJvaGliaXQ9J1xiSEFWRV9NQlJUT1dDXGInCQkJCQlcCisJaGFsdD0iZG8gbm90IHVzZSAkJHByb2hpYml0OyBpdCBpcyBhbHdheXMgZGVmaW5lZCIJCVwKKwkgICQoX3NjX3NlYXJjaF9yZWdleHApCisKKyMgVG8gdXNlIHRoaXMgImNvbW1hbmQiIG1hY3JvLCB5b3UgbXVzdCBmaXJzdCBkZWZpbmUgdHdvIHNoZWxsIHZhcmlhYmxlczoKKyMgaDogdGhlIGhlYWRlciBuYW1lLCB3aXRoIG5vIGVuY2xvc2luZyA8PiBvciAiIgorIyByZTogYSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBtYXRjaGVzIElGRiBzb21ldGhpbmcgcHJvdmlkZWQgYnkgJGggaXMgdXNlZC4KK2RlZmluZSBfc2NfaGVhZGVyX3dpdGhvdXRfdXNlCisgIGR1bW15PTsgOiBzbyB3ZSBkbyBub3QgbmVlZCBhIHNlbWljb2xvbiBiZWZvcmUgZWFjaCB1c2U7CQlcCisgIGhfZXNjPWBlY2hvICdbPCJdJyIkJGgiJ1siPl0nfHNlZCAncy9cLi9cXFxcLi9nJ2A7CQkJXAorICBpZiAkKFZDX0xJU1RfRVhDRVBUKSB8IGdyZXAgLWwgJ1wuYyQkJyA+IC9kZXYvbnVsbDsgdGhlbgkJXAorICAgIGZpbGVzPSQkKGdyZXAgLWwgJ14jICppbmNsdWRlICciJCRoX2VzYyIJCQkJXAorCSAgICAgJCQoJChWQ19MSVNUX0VYQ0VQVCkgfCBncmVwICdcLmMkJCcpKSAmJgkJCVwKKyAgICBncmVwIC1MRSAiJCRyZSIgJCRmaWxlcyB8IGdyZXAgLiAmJgkJCQkJXAorICAgICAgeyBlY2hvICIkKE1FKTogdGhlIGFib3ZlIGZpbGVzIGluY2x1ZGUgJCRoIGJ1dCBkb24ndCB1c2UgaXQiCVwKKwkxPiYyOyBleGl0IDE7IH0gfHwgOjsJCQkJCQlcCisgIGVsc2UgOjsJCQkJCQkJCVwKKyAgZmkKK2VuZGVmCisKKyMgUHJvaGliaXQgdGhlIGluY2x1c2lvbiBvZiBhc3NlcnQuaCB3aXRob3V0IGFuIGFjdHVhbCB1c2Ugb2YgYXNzZXJ0Lgorc2NfcHJvaGliaXRfYXNzZXJ0X3dpdGhvdXRfdXNlOgorCUBoPSdhc3NlcnQuaCcgcmU9J1w8YXNzZXJ0ICpcKCcgJChfc2NfaGVhZGVyX3dpdGhvdXRfdXNlKQorCisjIFByb2hpYml0IHRoZSBpbmNsdXNpb24gb2YgY2xvc2Utc3RyZWFtLmggd2l0aG91dCBhbiBhY3R1YWwgdXNlLgorc2NfcHJvaGliaXRfY2xvc2Vfc3RyZWFtX3dpdGhvdXRfdXNlOgorCUBoPSdjbG9zZS1zdHJlYW0uaCcgcmU9J1w8Y2xvc2Vfc3RyZWFtICpcKCcgJChfc2NfaGVhZGVyX3dpdGhvdXRfdXNlKQorCisjIFByb2hpYml0IHRoZSBpbmNsdXNpb24gb2YgZ2V0b3B0Lmggd2l0aG91dCBhbiBhY3R1YWwgdXNlLgorc2NfcHJvaGliaXRfZ2V0b3B0X3dpdGhvdXRfdXNlOgorCUBoPSdnZXRvcHQuaCcgcmU9J1w8Z2V0b3B0KF9sb25nKT8gKlwoJyAkKF9zY19oZWFkZXJfd2l0aG91dF91c2UpCisKKyMgRG9uJ3QgaW5jbHVkZSBxdW90ZWFyZy5oIHVubGVzcyB5b3UgdXNlIG9uZSBvZiBpdHMgZnVuY3Rpb25zLgorc2NfcHJvaGliaXRfcXVvdGVhcmdfd2l0aG91dF91c2U6CisJQGg9J3F1b3RlYXJnLmgnIHJlPSdcPHF1b3RlYXJnKF9bXiBdKyk/ICpcKCcgJChfc2NfaGVhZGVyX3dpdGhvdXRfdXNlKQorCisjIERvbid0IGluY2x1ZGUgcXVvdGUuaCB1bmxlc3MgeW91IHVzZSBvbmUgb2YgaXRzIGZ1bmN0aW9ucy4KK3NjX3Byb2hpYml0X3F1b3RlX3dpdGhvdXRfdXNlOgorCUBoPSdxdW90ZS5oJyByZT0nXDxxdW90ZSgoX24pPyAqXCh8X3F1b3Rpbmdfb3B0aW9uc1w+KScgXAorCSAgJChfc2NfaGVhZGVyX3dpdGhvdXRfdXNlKQorCisjIERvbid0IGluY2x1ZGUgdGhpcyBoZWFkZXIgdW5sZXNzIHlvdSB1c2Ugb25lIG9mIGl0cyBmdW5jdGlvbnMuCitzY19wcm9oaWJpdF9sb25nX29wdGlvbnNfd2l0aG91dF91c2U6CisJQGg9J2xvbmctb3B0aW9ucy5oJyByZT0nXDxwYXJzZV9sb25nX29wdGlvbnMgKlwoJyBcCisJICAkKF9zY19oZWFkZXJfd2l0aG91dF91c2UpCisKKyMgRG9uJ3QgaW5jbHVkZSB0aGlzIGhlYWRlciB1bmxlc3MgeW91IHVzZSBvbmUgb2YgaXRzIGZ1bmN0aW9ucy4KK3NjX3Byb2hpYml0X2ludHRvc3RyX3dpdGhvdXRfdXNlOgorCUBoPSdpbnR0b3N0ci5oJyByZT0nXDwob2ZmfFtpdV1tYXh8dWludCl0b3N0ciAqXCgnIFwKKwkgICQoX3NjX2hlYWRlcl93aXRob3V0X3VzZSkKKworIyBEb24ndCBpbmNsdWRlIHRoaXMgaGVhZGVyIHVubGVzcyB5b3UgdXNlIG9uZSBvZiBpdHMgZnVuY3Rpb25zLgorc2NfcHJvaGliaXRfaWdub3JlX3ZhbHVlX3dpdGhvdXRfdXNlOgorCUBoPSdpZ25vcmUtdmFsdWUuaCcgcmU9J1w8aWdub3JlXyh2YWx1ZXxwdHIpICpcKCcgXAorCSAgJChfc2NfaGVhZGVyX3dpdGhvdXRfdXNlKQorCisjIERvbid0IGluY2x1ZGUgdGhpcyBoZWFkZXIgdW5sZXNzIHlvdSB1c2Ugb25lIG9mIGl0cyBmdW5jdGlvbnMuCitzY19wcm9oaWJpdF9lcnJvcl93aXRob3V0X3VzZToKKwlAaD0nZXJyb3IuaCcgXAorCXJlPSdcPGVycm9yKF9hdF9saW5lfF9wcmludF9wcm9nbmFtZXxfb25lX3Blcl9saW5lfF9tZXNzYWdlX2NvdW50KT8gKlwoJ1wKKwkgICQoX3NjX2hlYWRlcl93aXRob3V0X3VzZSkKKworIyBEb24ndCBpbmNsdWRlIHhhbGxvYy5oIHVubGVzcyB5b3UgdXNlIG9uZSBvZiBpdHMgZnVuY3Rpb25zLgorIyBDb25zaWRlciB0aGVzZSBzeW1ib2xzOgorIyBwZXJsIC1sbmUgJy9eIyAqZGVmaW5lIChcdyspXCgvIGFuZCBwcmludCAkMScgbGliL3hhbGxvYy5ofGdyZXAgLXYgJ15fXyc7CisjIHBlcmwgLWxuZSAnL14oPzpleHRlcm4gKT8oPzp2b2lkfGNoYXIpIFwqPyhcdyspICpcKC8gYW5kIHByaW50ICQxJyBsaWIveGFsbG9jLmgKKyMgRGl2aWRlIGludG8gdHdvIHNldHMgb24gY2FzZSwgYW5kIGZpbHRlciBlYWNoIHRocm91Z2ggdGhpczoKKyMgfCBzb3J0IHwgcGVybCAtTVJlZ2V4cDo6QXNzZW1ibGUgLWxlIFwKKyMgICdwcmludCBSZWdleHA6OkFzc2VtYmxlLT5uZXcoZmlsZSA9PiAiL2Rldi9zdGRpbiIpLT5hc19zdHJpbmcnfHNlZCAncy9cPzovL2cnCisjIE5vdGUgdGhpcyB3YXMgcHJvZHVjZWQgYnkgdGhlIGFib3ZlOgorIyBfeGExID0gXAorI3goKCgybj8pP3JlfGMoaGFyKT98bihyZXxtKXx6KWFsbG9jfGFsbG9jXyhvdmVyc2l6ZWR8ZGllKXxtKGFsbG9jfGVtZHVwKXxzdHJkdXApCisjIEJ1dCB3ZSBjYW4gZG8gYmV0dGVyLCBpbiBhdCBsZWFzdCB0d28gd2F5czoKKyMgMSkgdGFrZSBhZHZhbnRhZ2Ugb2YgdHdvICJkdXAiLXN1ZmZpeGVkIHN0cmluZ3M6CisjIHgoKCgybj8pP3JlfGMoaGFyKT98bihyZXxtKXxbbXpdKWFsbG9jfGFsbG9jXyhvdmVyc2l6ZWR8ZGllKXwobWVtfHN0cilkdXApCisjIDIpIG5vdGljZSB0aGF0ICJjKGhhcik/fFttel0iIGlzIGVxdWl2YWxlbnQgdG8gdGhlIHNob3J0ZXIgYW5kIG1vcmUgcmVhZGFibGUKKyMgImNoYXJ8W2Ntel0iCisjIHgoKCgybj8pP3JlfGNoYXJ8bihyZXxtKXxbY216XSlhbGxvY3xhbGxvY18ob3ZlcnNpemVkfGRpZSl8KG1lbXxzdHIpZHVwKQorX3hhMSA9IHgoKCgybj8pP3JlfGNoYXJ8bihyZXxtKXxbY216XSlhbGxvY3xhbGxvY18ob3ZlcnNpemVkfGRpZSl8KG1lbXxzdHIpZHVwKQorX3hhMiA9IFgoW0NaXXxOP00pQUxMT0MKK3NjX3Byb2hpYml0X3hhbGxvY193aXRob3V0X3VzZToKKwlAaD0neGFsbG9jLmgnIFwKKwlyZT0nXDwoJChfeGExKXwkKF94YTIpKSAqXCgnXAorCSAgJChfc2NfaGVhZGVyX3dpdGhvdXRfdXNlKQorCisjIEV4dHJhY3QgZnVuY3Rpb24gbmFtZXM6CisjIHBlcmwgLWxuZSAnL14oPzpleHRlcm4gKT8oPzp2b2lkfGNoYXIpIFwqPyhcdyspICpcKC8gYW5kIHByaW50ICQxJyBsaWIvaGFzaC5oCitfaGFzaF9yZSA9IFwKK2NsZWFyfGRlbGV0ZXxmcmVlfGdldF8oZmlyc3R8bmV4dCl8aW5zZXJ0fGxvb2t1cHxwcmludF9zdGF0aXN0aWNzfHJlc2V0X3R1bmluZworX2hhc2hfZm4gPSBcPCgkKF9oYXNoX3JlKSkgKlwoCitfaGFzaF9zdHJ1Y3QgPSAoc3RydWN0ICk/XDxbSGhdYXNoXyh0YWJsZXx0dW5pbmcpXD4KK3NjX3Byb2hpYml0X2hhc2hfd2l0aG91dF91c2U6CisJQGg9J2hhc2guaCcgXAorCXJlPSckKF9oYXNoX2ZuKXwkKF9oYXNoX3N0cnVjdCknXAorCSAgJChfc2NfaGVhZGVyX3dpdGhvdXRfdXNlKQorCitzY19wcm9oaWJpdF9jbG9leGVjX3dpdGhvdXRfdXNlOgorCUBoPSdjbG9leGVjLmgnIHJlPSdcPChzZXRfY2xvZXhlY19mbGFnfGR1cF9jbG9leGVjKSAqXCgnIFwKKwkgICQoX3NjX2hlYWRlcl93aXRob3V0X3VzZSkKKworc2NfcHJvaGliaXRfcG9zaXh2ZXJfd2l0aG91dF91c2U6CisJQGg9J3Bvc2l4dmVyLmgnIHJlPSdcPHBvc2l4Ml92ZXJzaW9uICpcKCcgJChfc2NfaGVhZGVyX3dpdGhvdXRfdXNlKQorCitzY19wcm9oaWJpdF9zYW1lX3dpdGhvdXRfdXNlOgorCUBoPSdzYW1lLmgnIHJlPSdcPHNhbWVfbmFtZSAqXCgnICQoX3NjX2hlYWRlcl93aXRob3V0X3VzZSkKKworc2NfcHJvaGliaXRfaGFzaF9wandfd2l0aG91dF91c2U6CisJQGg9J2hhc2gtcGp3LmgnIFwKKwlyZT0nXDxoYXNoX3Bqd1w+JyBcCisJICAkKF9zY19oZWFkZXJfd2l0aG91dF91c2UpCisKK3NjX3Byb2hpYml0X3NhZmVfcmVhZF93aXRob3V0X3VzZToKKwlAaD0nc2FmZS1yZWFkLmgnIHJlPScoXDxTQUZFX1JFQURfRVJST1JcPnxcPHNhZmVfcmVhZCAqXCgpJyBcCisJICAkKF9zY19oZWFkZXJfd2l0aG91dF91c2UpCisKK3NjX3Byb2hpYml0X2FyZ21hdGNoX3dpdGhvdXRfdXNlOgorCUBoPSdhcmdtYXRjaC5oJyBcCisJcmU9JyhcPChBUlJBWV9DQVJESU5BTElUWXxYP0FSR01BVENIKHxfVE9fQVJHVU1FTlR8X1ZFUklGWSkpXD58XDwoaW52YWxpZF9hcmd8YXJnbWF0Y2goX2V4aXRfZm58Xyhpbik/dmFsaWQpPykgKlwoKScgXAorCSAgJChfc2NfaGVhZGVyX3dpdGhvdXRfdXNlKQorCitzY19wcm9oaWJpdF9jYW5vbmljYWxpemVfd2l0aG91dF91c2U6CisJQGg9J2Nhbm9uaWNhbGl6ZS5oJyBcCisJcmU9J0NBTl8oRVhJU1RJTkd8QUxMX0JVVF9MQVNUfE1JU1NJTkcpfGNhbm9uaWNhbGl6ZV8obW9kZV90fGZpbGVuYW1lX21vZGV8ZmlsZV9uYW1lKScgXAorCSAgJChfc2NfaGVhZGVyX3dpdGhvdXRfdXNlKQorCitzY19wcm9oaWJpdF9yb290X2Rldl9pbm9fd2l0aG91dF91c2U6CisJQGg9J3Jvb3QtZGV2LWluby5oJyBcCisJcmU9JyhcPFJPT1RfREVWX0lOT18oQ0hFQ0t8V0FSTilcPnxcPGdldF9yb290X2Rldl9pbm8gKlwoKScgXAorCSAgJChfc2NfaGVhZGVyX3dpdGhvdXRfdXNlKQorCitzY19wcm9oaWJpdF9vcGVuYXRfd2l0aG91dF91c2U6CisJQGg9J29wZW5hdC5oJyBcCisJcmU9J1w8KG9wZW5hdF8ocGVybWlzc2l2ZXxuZWVkc19mY2hkaXJ8KHNhdmV8cmVzdG9yZSlfZmFpbCl8bD8oc3RhdHxjaChvd258bW9kKSlhdHwoZXVpZCk/YWNjZXNzYXQpXD4nIFwKKwkgICQoX3NjX2hlYWRlcl93aXRob3V0X3VzZSkKKworIyBQcm9oaWJpdCB0aGUgaW5jbHVzaW9uIG9mIGMtY3R5cGUuaCB3aXRob3V0IGFuIGFjdHVhbCB1c2UuCitjdHlwZV9yZSA9IGlzYWxudW18aXNhbHBoYXxpc2FzY2lpfGlzYmxhbmt8aXNjbnRybHxpc2RpZ2l0fGlzZ3JhcGh8aXNsb3dlclwKK3xpc3ByaW50fGlzcHVuY3R8aXNzcGFjZXxpc3VwcGVyfGlzeGRpZ2l0fHRvbG93ZXJ8dG91cHBlcgorc2NfcHJvaGliaXRfY19jdHlwZV93aXRob3V0X3VzZToKKwlAaD0nYy1jdHlwZS5oJyByZT0nXDxjXygkKGN0eXBlX3JlKSkgKlwoJyBcCisJICAkKF9zY19oZWFkZXJfd2l0aG91dF91c2UpCisKKyMgVGhlIGZvbGxvd2luZyBsaXN0IHdhcyBnZW5lcmF0ZWQgYnkgcnVubmluZzoKKyMgbWFuIHNpZ25hbC5ofGNvbCAtYnxwZXJsIC1uZSAnL2JzZF9zaWduYWwuKjsvLi4uL3NpZ3dhaXRpbmZvLio7LyBhbmQgcHJpbnQnIFwKKyMgICB8IHBlcmwgLWxuZSAnL15ccysoPzppbnR8dm9pZCkuKj8oXHcrKS4qLyBhbmQgcHJpbnQgJDEnIHwgZm10Citfc2lnX2Z1bmN0aW9ucyA9IFwKKyAgYnNkX3NpZ25hbCBraWxsIGtpbGxwZyBwdGhyZWFkX2tpbGwgcHRocmVhZF9zaWdtYXNrIHJhaXNlIHNpZ2FjdGlvbiBcCisgIHNpZ2FkZHNldCBzaWdhbHRzdGFjayBzaWdkZWxzZXQgc2lnZW1wdHlzZXQgc2lnZmlsbHNldCBzaWdob2xkIHNpZ2lnbm9yZSBcCisgIHNpZ2ludGVycnVwdCBzaWdpc21lbWJlciBzaWduYWwgc2lncGF1c2Ugc2lncGVuZGluZyBzaWdwcm9jbWFzayBzaWdxdWV1ZSBcCisgIHNpZ3JlbHNlIHNpZ3NldCBzaWdzdXNwZW5kIHNpZ3RpbWVkd2FpdCBzaWd3YWl0IHNpZ3dhaXRpbmZvCitfc2lnX2Z1bmN0aW9uX3JlID0gJChzdWJzdCAkKF9zcCksfCwkKHN0cmlwICQoX3NpZ19mdW5jdGlvbnMpKSkKKyMgVGhlIGZvbGxvd2luZyB3ZXJlIGV4dHJhY3RlZCBmcm9tICJtYW4gc2lnbmFsLmgiIG1hbnVhbGx5LgorX3NpZ190eXBlc19hbmRfY29uc3RzID0JCQkJCQkJXAorICBNSU5TSUdTVEtTWiBTQV9OT0NMRFNUT1AgU0FfTk9DTERXQUlUIFNBX05PREVGRVIgU0FfT05TVEFDSwkJXAorICBTQV9SRVNFVEhBTkQgU0FfUkVTVEFSVCBTQV9TSUdJTkZPIFNJR0VWX05PTkUgU0lHRVZfU0lHTkFMCQlcCisgIFNJR0VWX1RIUkVBRCBTSUdTVEtTWiBTSUdfQkxPQ0sgU0lHX1NFVE1BU0sgU0lHX1VOQkxPQ0sgU1NfRElTQUJMRQlcCisgIFNTX09OU1RBQ0sgbWNvbnRleHRfdCBwaWRfdCBzaWdfYXRvbWljX3Qgc2lnZXZlbnQgc2lnaW5mb190IHNpZ3NldF90CVwKKyAgc2lnc3RhY2sgc2lndmFsIHN0YWNrX3QgdWNvbnRleHRfdAorIyBnZW5lcmF0ZWQgdmlhIHRoaXM6CisjIHBlcmwgLWxuZSAnL14jaWZkZWYgKFNJR1x3KykvIGFuZCBwcmludCAkMScgbGliL3NpZzJzdHIuY3xzb3J0IC11fGZtdCAtNzAKK19zaWdfbmFtZXMgPQkJCQkJCQkJXAorICBTSUdBQlJUIFNJR0FMUk0gU0lHQUxSTTEgU0lHQlVTIFNJR0NBTkNFTCBTSUdDSExEIFNJR0NMRCBTSUdDT05UCVwKKyAgU0lHREFOR0VSIFNJR0RJTCBTSUdFTVQgU0lHRlBFIFNJR0ZSRUVaRSBTSUdHUkFOVCBTSUdIVVAgU0lHSUxMCVwKKyAgU0lHSU5GTyBTSUdJTlQgU0lHSU8gU0lHSU9UIFNJR0tBUCBTSUdLSUxMIFNJR0tJTExUSFIgU0lHTE9TVCBTSUdMV1AJXAorICBTSUdNSUdSQVRFIFNJR01TRyBTSUdQSE9ORSBTSUdQSVBFIFNJR1BPTEwgU0lHUFJFIFNJR1BST0YgU0lHUFdSCVwKKyAgU0lHUVVJVCBTSUdSRVRSQUNUIFNJR1NBSyBTSUdTRUdWIFNJR1NPVU5EIFNJR1NUS0ZMVCBTSUdTVE9QIFNJR1NZUwlcCisgIFNJR1RFUk0gU0lHVEhBVyBTSUdUUkFQIFNJR1RTVFAgU0lHVFRJTiBTSUdUVE9VIFNJR1VSRyBTSUdVU1IxCVwKKyAgU0lHVVNSMiBTSUdWSVJUIFNJR1ZUQUxSTSBTSUdXQUlUSU5HIFNJR1dJTkNIIFNJR1dJTkQgU0lHV0lORE9XCVwKKyAgU0lHWENQVSBTSUdYRlNaCitfc2lnX3N5bXNfcmUgPSAkKHN1YnN0ICQoX3NwKSx8LCQoc3RyaXAgJChfc2lnX25hbWVzKSAkKF9zaWdfdHlwZXNfYW5kX2NvbnN0cykpKQorCisjIFByb2hpYml0IHRoZSBpbmNsdXNpb24gb2Ygc2lnbmFsLmggd2l0aG91dCBhbiBhY3R1YWwgdXNlLgorc2NfcHJvaGliaXRfc2lnbmFsX3dpdGhvdXRfdXNlOgorCUBoPSdzaWduYWwuaCcJCQkJCQkJXAorCXJlPSdcPCgkKF9zaWdfZnVuY3Rpb25fcmUpKSAqXCh8XDwoJChfc2lnX3N5bXNfcmUpKVw+JwkJXAorCSAgJChfc2NfaGVhZGVyX3dpdGhvdXRfdXNlKQorCisjIERvbid0IGluY2x1ZGUgc3RkaW8tLS5oIHVubGVzcyB5b3UgdXNlIG9uZSBvZiBpdHMgZnVuY3Rpb25zLgorc2NfcHJvaGliaXRfc3RkaW8tLV93aXRob3V0X3VzZToKKwlAaD0nc3RkaW8tLS5oJyByZT0nXDwoKGYocmUpP3xwKW9wZW58dG1wZmlsZSkgKlwoJwkJXAorCSAgJChfc2NfaGVhZGVyX3dpdGhvdXRfdXNlKQorCisjIERvbid0IGluY2x1ZGUgc3RkaW8tc2FmZXIuaCB1bmxlc3MgeW91IHVzZSBvbmUgb2YgaXRzIGZ1bmN0aW9ucy4KK3NjX3Byb2hpYml0X3N0ZGlvLXNhZmVyX3dpdGhvdXRfdXNlOgorCUBoPSdzdGRpby1zYWZlci5oJyByZT0nXDwoKGYocmUpP3xwKW9wZW58dG1wZmlsZSlfc2FmZXIgKlwoJwlcCisJICAkKF9zY19oZWFkZXJfd2l0aG91dF91c2UpCisKKyMgUHJvaGliaXQgdGhlIGluY2x1c2lvbiBvZiBzdHJpbmdzLmggd2l0aG91dCBhIHNlbnNpYmxlIHVzZS4KKyMgVXNpbmcgdGhlIGxpa2VzIG9mIGJjbXAsIGJjb3B5LCBiemVybywgaW5kZXggb3IgcmluZGV4IGlzIG5vdCBzZW5zaWJsZS4KK3NjX3Byb2hpYml0X3N0cmluZ3Nfd2l0aG91dF91c2U6CisJQGg9J3N0cmluZ3MuaCcJCQkJCQkJXAorCXJlPSdcPChzdHJuP2Nhc2VjbXB8ZmZzKGxsKT8pXD4nCQkJCVwKKwkgICQoX3NjX2hlYWRlcl93aXRob3V0X3VzZSkKKworIyBHZXQgdGhlIGxpc3Qgb2Ygc3ltYm9sIG5hbWVzIHdpdGggdGhpczoKKyMgcGVybCAtbG5lICcvXiMgKmRlZmluZSAoW0EtWl1cdyspXCgvIGFuZCBwcmludCAkMScgbGliL2ludHByb3BzLmh8Zm10CitfaW50cHJvcHNfbmFtZXMgPQkJCQkJCQlcCisgIFRZUEVfSVNfSU5URUdFUiBUWVBFX1RXT1NfQ09NUExFTUVOVCBUWVBFX09ORVNfQ09NUExFTUVOVAkJXAorICBUWVBFX1NJR05FRF9NQUdOSVRVREUgVFlQRV9TSUdORUQgVFlQRV9NSU5JTVVNIFRZUEVfTUFYSU1VTQkJXAorICBJTlRfQklUU19TVFJMRU5fQk9VTkQgSU5UX1NUUkxFTl9CT1VORCBJTlRfQlVGU0laRV9CT1VORAkJXAorICBJTlRfQUREX1JBTkdFX09WRVJGTE9XIElOVF9TVUJUUkFDVF9SQU5HRV9PVkVSRkxPVwkJCVwKKyAgSU5UX05FR0FURV9SQU5HRV9PVkVSRkxPVyBJTlRfTVVMVElQTFlfUkFOR0VfT1ZFUkZMT1cJCQlcCisgIElOVF9ESVZJREVfUkFOR0VfT1ZFUkZMT1cgSU5UX1JFTUFJTkRFUl9SQU5HRV9PVkVSRkxPVwkJXAorICBJTlRfTEVGVF9TSElGVF9SQU5HRV9PVkVSRkxPVyBJTlRfQUREX09WRVJGTE9XIElOVF9TVUJUUkFDVF9PVkVSRkxPVwlcCisgIElOVF9ORUdBVEVfT1ZFUkZMT1cgSU5UX01VTFRJUExZX09WRVJGTE9XIElOVF9ESVZJREVfT1ZFUkZMT1cJCVwKKyAgSU5UX1JFTUFJTkRFUl9PVkVSRkxPVyBJTlRfTEVGVF9TSElGVF9PVkVSRkxPVworX2ludHByb3BzX3N5bXNfcmUgPSAkKHN1YnN0ICQoX3NwKSx8LCQoc3RyaXAgJChfaW50cHJvcHNfbmFtZXMpKSkKKyMgUHJvaGliaXQgdGhlIGluY2x1c2lvbiBvZiBpbnRwcm9wcy5oIHdpdGhvdXQgYW4gYWN0dWFsIHVzZS4KK3NjX3Byb2hpYml0X2ludHByb3BzX3dpdGhvdXRfdXNlOgorCUBoPSdpbnRwcm9wcy5oJwkJCQkJCQlcCisJcmU9J1w8KCQoX2ludHByb3BzX3N5bXNfcmUpKSAqXCgnCQkJCVwKKwkgICQoX3NjX2hlYWRlcl93aXRob3V0X3VzZSkKKworX3N0ZGRlZl9zeW1zX3JlID0gTlVMTHxvZmZzZXRvZnxwdHJkaWZmX3R8c2l6ZV90fHdjaGFyX3QKKyMgUHJvaGliaXQgdGhlIGluY2x1c2lvbiBvZiBzdGRkZWYuaCB3aXRob3V0IGFuIGFjdHVhbCB1c2UuCitzY19wcm9oaWJpdF9zdGRkZWZfd2l0aG91dF91c2U6CisJQGg9J3N0ZGRlZi5oJwkJCQkJCQlcCisJcmU9J1w8KCQoX3N0ZGRlZl9zeW1zX3JlKSlcPicJCQkJCVwKKwkgICQoX3NjX2hlYWRlcl93aXRob3V0X3VzZSkKKworX2RlMSA9IGRpcmZkfChjbG9zZXwoZmQpP29wZW58cmVhZHxyZXdpbmR8c2Vla3x0ZWxsKWRpcig2NCk/KF9yKT8KK19kZTIgPSAodmVyc2lvbnNvcnR8c3RydWN0IGRpcmVudHxnZXRkaXJlbnRyaWVzfGFscGhhc29ydHxzY2FuZGlyKGF0KT8pKDY0KT8KK19kZTMgPSBNQVhOQU1MRU58RElSfGlub190fGRfaW5vfGRfZmlsZW5vfGRfbmFtbGVuCitfZGlyZW50X3N5bXNfcmUgPSAkKF9kZTEpfCQoX2RlMil8JChfZGUzKQorIyBQcm9oaWJpdCB0aGUgaW5jbHVzaW9uIG9mIGRpcmVudC5oIHdpdGhvdXQgYW4gYWN0dWFsIHVzZS4KK3NjX3Byb2hpYml0X2RpcmVudF93aXRob3V0X3VzZToKKwlAaD0nZGlyZW50LmgnCQkJCQkJCVwKKwlyZT0nXDwoJChfZGlyZW50X3N5bXNfcmUpKVw+JwkJCQkJXAorCSAgJChfc2NfaGVhZGVyX3dpdGhvdXRfdXNlKQorCisjIFByb2hpYml0IHRoZSBpbmNsdXNpb24gb2YgdmVyaWZ5Lmggd2l0aG91dCBhbiBhY3R1YWwgdXNlLgorc2NfcHJvaGliaXRfdmVyaWZ5X3dpdGhvdXRfdXNlOgorCUBoPSd2ZXJpZnkuaCcJCQkJCQkJXAorCXJlPSdcPCh2ZXJpZnkodHJ1ZXxleHByKT98c3RhdGljX2Fzc2VydCkgKlwoJwkJCVwKKwkgICQoX3NjX2hlYWRlcl93aXRob3V0X3VzZSkKKworIyBEb24ndCBpbmNsdWRlIHhmcmVvcGVuLmggdW5sZXNzIHlvdSB1c2Ugb25lIG9mIGl0cyBmdW5jdGlvbnMuCitzY19wcm9oaWJpdF94ZnJlb3Blbl93aXRob3V0X3VzZToKKwlAaD0neGZyZW9wZW4uaCcgcmU9J1w8eGZyZW9wZW4gKlwoJyAkKF9zY19oZWFkZXJfd2l0aG91dF91c2UpCisKK3NjX29ic29sZXRlX3N5bWJvbHM6CisJQHByb2hpYml0PSdcPChIQVZFJydfRkNOVExfSHxPJydfTkRFTEFZKVw+JwkJCVwKKwloYWx0PSdkbyBub3QgdXNlIEhBVkUnJ19GQ05UTF9IIG9yIE8nX05ERUxBWQkJCVwKKwkgICQoX3NjX3NlYXJjaF9yZWdleHApCisKKyMgRklYTUU6IHdhcm4gYWJvdXQgZGVmaW5pdGlvbnMgb2YgRVhJVF9GQUlMVVJFLCBFWElUX1NVQ0NFU1MsIFNUUkVRCisKKyMgRWFjaCBub25lbXB0eSBDaGFuZ2VMb2cgbGluZSBtdXN0IHN0YXJ0IHdpdGggYSB5ZWFyIG51bWJlciwgb3IgYSBUQUIuCitzY19jaGFuZ2Vsb2c6CisJQHByb2hpYml0PSdeW14xMgldJwkJCQkJXAorCWluX3ZjX2ZpbGVzPSdeQ2hhbmdlTG9nJCQnCQkJCQlcCisJaGFsdD0nZm91bmQgdW5leHBlY3RlZCBwcmVmaXggaW4gYSBDaGFuZ2VMb2cnCQkJXAorCSAgJChfc2Nfc2VhcmNoX3JlZ2V4cCkKKworIyBFbnN1cmUgdGhhdCBlYWNoIC5jIGZpbGUgY29udGFpbmluZyBhICJtYWluIiBmdW5jdGlvbiBhbHNvCisjIGNhbGxzIHNldF9wcm9ncmFtX25hbWUuCitzY19wcm9ncmFtX25hbWU6CisJQHJlcXVpcmU9J3NldF9wcm9ncmFtX25hbWUgKlwobT9hcmd2XFswXF1cKTsnCQkJXAorCWluX3ZjX2ZpbGVzPSdcLmMkJCcJCQkJCQlcCisJY29udGFpbmluZz0nXDxtYWluICooJwkJCQkJCVwKKwloYWx0PSd0aGUgYWJvdmUgZmlsZXMgZG8gbm90IGNhbGwgc2V0X3Byb2dyYW1fbmFtZScJCVwKKwkgICQoX3NjX3NlYXJjaF9yZWdleHApCisKKyMgRW5zdXJlIHRoYXQgZWFjaCAuYyBmaWxlIGNvbnRhaW5pbmcgYSAibWFpbiIgZnVuY3Rpb24gYWxzbworIyBjYWxscyBiaW5kdGV4dGRvbWFpbi4KK3NjX2JpbmR0ZXh0ZG9tYWluOgorCUByZXF1aXJlPSdiaW5kdGV4dGRvbWFpbiAqXCgnCQkJCQlcCisJaW5fdmNfZmlsZXM9J1wuYyQkJwkJCQkJCVwKKwljb250YWluaW5nPSdcPG1haW4gKignCQkJCQkJXAorCWhhbHQ9J3RoZSBhYm92ZSBmaWxlcyBkbyBub3QgY2FsbCBiaW5kdGV4dGRvbWFpbicJCVwKKwkgICQoX3NjX3NlYXJjaF9yZWdleHApCisKKyMgUmVxdWlyZSB0aGF0IHRoZSBmaW5hbCBsaW5lIG9mIGVhY2ggdGVzdC1saWIuc2gtdXNpbmcgdGVzdCBiZSB0aGlzIG9uZToKKyMgRXhpdCAkZmFpbAorIyBOb3RlOiB0aGlzIHRlc3QgcmVxdWlyZXMgR05VIGdyZXAncyAtLWxhYmVsPSBvcHRpb24uCitFeGl0X3dpdG5lc3NfZmlsZSA/PSB0ZXN0cy90ZXN0LWxpYi5zaAorRXhpdF9iYXNlIDo9ICQobm90ZGlyICQoRXhpdF93aXRuZXNzX2ZpbGUpKQorc2NfcmVxdWlyZV90ZXN0X2V4aXRfaWRpb206CisJQGlmIHRlc3QgLWYgJChzcmNkaXIpLyQoRXhpdF93aXRuZXNzX2ZpbGUpOyB0aGVuCQlcCisJICBkaWU9MDsJCQkJCQkJXAorCSAgZm9yIGkgaW4gJCQoZ3JlcCAtbCAtRiAnc3JjZGlyLyQoRXhpdF9iYXNlKScJCQlcCisJCSQkKCQoVkNfTElTVCkgdGVzdHMpKTsgZG8JCQkJXAorCSAgICB0YWlsIC1uMSAkJGkgfCBncmVwICdeRXhpdCAuJyA+IC9kZXYvbnVsbAkJCVwKKwkgICAgICAmJiA6IHx8IHsgZGllPTE7IGVjaG8gJCRpOyB9CQkJCVwKKwkgIGRvbmU7CQkJCQkJCQlcCisJICB0ZXN0ICQkZGllID0gMSAmJgkJCQkJCVwKKwkgICAgeyBlY2hvIDE+JjIgJyQoTUUpOiB0aGUgZmluYWwgbGluZSBpbiBlYWNoIG9mIHRoZSBhYm92ZSBpcyBub3Q6JzsgXAorCSAgICAgIGVjaG8gMT4mMiAnRXhpdCBzb21ldGhpbmcnOwkJCQlcCisJICAgICAgZXhpdCAxOyB9IHx8IDo7CQkJCQkJXAorCWZpCisKK3NjX3RyYWlsaW5nX2JsYW5rOgorCUBwcm9oaWJpdD0nWwkgXSQkJwkJCQkJCVwKKwloYWx0PSdmb3VuZCB0cmFpbGluZyBibGFuayhzKScJCQkJCVwKKwlleGNsdWRlPSdeQmluYXJ5IGZpbGUgLiogbWF0Y2hlcyQkJwkJCQlcCisJICAkKF9zY19zZWFyY2hfcmVnZXhwKQorCisjIE1hdGNoIGxpbmVzIGxpa2UgdGhlIGZvbGxvd2luZywgYnV0IHdoZXJlIHRoZXJlIGlzIG9ubHkgb25lIHNwYWNlCisjIGJldHdlZW4gdGhlIG9wdGlvbnMgYW5kIHRoZSBkZXNjcmlwdGlvbjoKKyMgICAtRCwgLS1hbGwtcmVwZWF0ZWRbPWRlbGltaXQtbWV0aG9kXSAgcHJpbnQgYWxsIGR1cGxpY2F0ZSBsaW5lc1xuCitsb25nb3B0X3JlID0gLS1bYS16XVswLTlBLVphLXotXSooXFs/PVswLTlBLVphLXotXSpcXT8pPworc2NfdHdvX3NwYWNlX3NlcGFyYXRvcl9pbl91c2FnZToKKwlAcHJvaGliaXQ9J14gICAqKC1bQS1aYS16XSwpPyAkKGxvbmdvcHRfcmUpIFteIF0uKlxcJCQnCQlcCisJaGFsdD0naGVscDJtYW4gcmVxdWlyZXMgYXQgbGVhc3QgdHdvIHNwYWNlcyBiZXR3ZWVuIGFuIG9wdGlvbiBhbmQgaXRzIGRlc2NyaXB0aW9uJ1wKKwkgICQoX3NjX3NlYXJjaF9yZWdleHApCisKKyMgQSByZWdleHAgbWF0Y2hpbmcgZnVuY3Rpb24gbmFtZXMgbGlrZSAiZXJyb3IiIHRoYXQgbWF5IGJlIHVzZWQKKyMgdG8gZW1pdCB0cmFuc2xhdGFibGUgbWVzc2FnZXMuCitfZ2xfdHJhbnNsYXRhYmxlX2RpYWdfZnVuY19yZSA/PSBlcnJvcgorCisjIExvb2sgZm9yIGRpYWdub3N0aWNzIHRoYXQgYXJlbid0IG1hcmtlZCBmb3IgdHJhbnNsYXRpb24uCisjIFRoaXMgd29uJ3QgZmluZCBhbnkgZm9yIHdoaWNoIGVycm9yJ3MgZm9ybWF0IHN0cmluZyBpcyBvbiBhIHNlcGFyYXRlIGxpbmUuCitzY191bm1hcmtlZF9kaWFnbm9zdGljczoKKwlAcHJvaGliaXQ9J1w8JChfZ2xfdHJhbnNsYXRhYmxlX2RpYWdfZnVuY19yZSkgKlwoW14iXSoiW14iXSpbYS16XXszfScgXAorCWV4Y2x1ZGU9JyhffG5nZXR0ZXh0ID8pXCgnCQkJCQlcCisJaGFsdD0nZm91bmQgdW5tYXJrZWQgZGlhZ25vc3RpYyhzKScJCQkJXAorCSAgJChfc2Nfc2VhcmNoX3JlZ2V4cCkKKworIyBBdm9pZCB1c2VsZXNzIHBhcmVudGhlc2VzIGxpa2UgdGhvc2UgaW4gdGhpcyBleGFtcGxlOgorIyAjaWYgZGVmaW5lZCAoU1lNQk9MKSB8fCBkZWZpbmVkIChTWU0yKQorc2NfdXNlbGVzc19jcHBfcGFyZW5zOgorCUBwcm9oaWJpdD0nXiMgKmlmIC4qZGVmaW5lZCAqXCgnCQkJCVwKKwloYWx0PSdmb3VuZCB1c2VsZXNzIHBhcmVudGhlc2VzIGluIGNwcCBkaXJlY3RpdmUnCQlcCisJICAkKF9zY19zZWFyY2hfcmVnZXhwKQorCisjIExpc3QgaGVhZGVycyBmb3Igd2hpY2ggSEFWRV9IRUFERVJfSCBpcyBhbHdheXMgdHJ1ZSwgYXNzdW1pbmcgeW91IGFyZQorIyB1c2luZyB0aGUgYXBwcm9wcmlhdGUgZ251bGliIG1vZHVsZS4gIENBVVRJT046IGZvciBlYWNoICJ1bm5lY2Vzc2FyeSIKKyMgI2lmIEhBVkVfSEVBREVSX0ggdGhhdCB5b3UgcmVtb3ZlLCBiZSBzdXJlIHRoYXQgeW91ciBwcm9qZWN0IGV4cGxpY2l0bHkKKyMgcmVxdWlyZXMgdGhlIGdudWxpYiBtb2R1bGUgdGhhdCBndWFyYW50ZWVzIHRoZSB1c2FiaWxpdHkgb2YgdGhhdCBoZWFkZXIuCitnbF9hc3N1cmVkX2hlYWRlcnNfID0gXAorICBjZCAkKGdudWxpYl9kaXIpL2xpYiAmJiBlY2hvICouaW4uaHxzZWQgJ3MvXC5pblwuaC8vZycKKworIyBDb252ZXJ0IHRoZSBsaXN0IG9mIG5hbWVzIHRvIHVwcGVyIGNhc2UsIGFuZCByZXBsYWNlIGVhY2ggc3BhY2Ugd2l0aCAifCIuCithel8gPSBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorQVpfID0gQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKK2dsX2hlYWRlcl91cHBlcl9jYXNlX29yXyA9CQkJCQkJXAorICAkJCgkKGdsX2Fzc3VyZWRfaGVhZGVyc18pCQkJCQkJXAorICAgIHwgdHIgJChhel8pLy4tICQoQVpfKV9fXwkJCQkJCVwKKyAgICB8IHRyIC1zICcgJyAnfCcJCQkJCQkJXAorICAgICkKK3NjX3Byb2hpYml0X2Fsd2F5c190cnVlX2hlYWRlcl90ZXN0czoKKwlAb3I9JChnbF9oZWFkZXJfdXBwZXJfY2FzZV9vcl8pOwkJCQlcCisJcmU9IkhBVkVfKCQkb3IpX0giOwkJCQkJCVwKKwlwcm9oaWJpdD0nXDwnIiQkcmUiJ1w+JwkJCQkJCVwKKwloYWx0PSQkKHByaW50ZiAnJXNcbicJCQkJCQlcCisJJ2RvIG5vdCB0ZXN0IHRoZSBhYm92ZSBIQVZFXzxoZWFkZXI+X0ggc3ltYm9sKHMpOycJCVwKKwknICB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGdudWxpYiBtb2R1bGUsIHRoZXkgYXJlIGFsd2F5cyB0cnVlJykJXAorCSAgJChfc2Nfc2VhcmNoX3JlZ2V4cCkKKworc2NfcHJvaGliaXRfZGVmaW5lZF9oYXZlX2RlY2xfdGVzdHM6CisJQHByb2hpYml0PScjWwkgXSppZihuP2RlZnwuKlw8ZGVmaW5lZClcPlsJIChdK0hBVkVfREVDTF8nCVwKKwloYWx0PSdIQVZFX0RFQ0wgbWFjcm9zIGFyZSBhbHdheXMgZGVmaW5lZCcJCQlcCisJICAkKF9zY19zZWFyY2hfcmVnZXhwKQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorZ2xfb3RoZXJfaGVhZGVyc18gPz0gXAorICBpbnRwcm9wcy5oCVwKKyAgb3BlbmF0LmgJXAorICBzdGF0LW1hY3Jvcy5oCisKKyMgUGVybCAtbG5lIGNvZGUgdG8gZXh0cmFjdCAic2lnbmlmaWNhbnQiIGNwcC1kZWZpbmVkIHN5bWJvbHMgZnJvbSBhCisjIGdudWxpYiBoZWFkZXIgZmlsZSwgZWxpbWluYXRpbmcgYSBmZXcgY29tbW9uIGZhbHNlLXBvc2l0aXZlcy4KKyMgVGhlIGV4ZW1wdGVkIG5hbWVzIGJlbG93IGFyZSBkZWZpbmVkIG9ubHkgY29uZGl0aW9uYWxseSBpbiBnbnVsaWIsCisjIGFuZCBoZW5jZSBzb21ldGltZXMgbXVzdC9tYXkgYmUgZGVmaW5lZCBpbiBhcHBsaWNhdGlvbiBjb2RlLgorZ2xfZXh0cmFjdF9zaWduaWZpY2FudF9kZWZpbmVzXyA9IFwKKyAgL15cIyAqZGVmaW5lIChbXl8gKF1bXiAoXSopKFxzKlwofFxzK1x3KykvXAorICAgICYmICQkMiAhfiAvKD86cnBsX3xfdXNlZF93aXRob3V0XykvXAorICAgICYmICQkMSAhfiAvXig/Ok5TSUd8RU5PREFUQSkkJC9cCisgICAgJiYgJCQxICF+IC9eKD86U0FfUkVTRVRIQU5EfFNBX1JFU1RBUlQpJCQvXAorICAgIGFuZCBwcmludCAkJDEKKworIyBDcmVhdGUgYSBsaXN0IG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgbWF0Y2hpbmcgdGhlIG5hbWVzCisjIG9mIG1hY3JvcyB0aGF0IGFyZSBndWFyYW50ZWVkIHRvIGJlIGRlZmluZWQgYnkgcGFydHMgb2YgZ251bGliLgorZGVmaW5lIGRlZl9zeW1fcmVnZXgKKwlnZW5faD0kKGdsX2dlbmVyYXRlZF9oZWFkZXJzXyk7CQkJCQlcCisJKGNkICQoZ251bGliX2RpcikvbGliOwkJCQkJCVwKKwkgIGZvciBmIGluICouaW4uaCAkKGdsX290aGVyX2hlYWRlcnNfKTsgZG8JCQlcCisJICAgIHRlc3QgLWYgJCRmCQkJCQkJCVwKKwkgICAgICAmJiBwZXJsIC1sbmUgJyQoZ2xfZXh0cmFjdF9zaWduaWZpY2FudF9kZWZpbmVzXyknICQkZjsJXAorCSAgZG9uZTsJCQkJCQkJCVwKKwkpIHwgc29ydCAtdQkJCQkJCQlcCisJICB8IHNlZCAncy9eL14gKiMgKihkZWZpbmV8dW5kZWYpICAqLztzLyQkL1xcPi8nCitlbmRlZgorCisjIERvbid0IGRlZmluZSBtYWNyb3MgdGhhdCB3ZSBhbHJlYWR5IGdldCBmcm9tIGdudWxpYiBoZWFkZXIgZmlsZXMuCitzY19wcm9oaWJpdF9hbHdheXMtZGVmaW5lZF9tYWNyb3M6CisJQGlmIHRlc3QgLWQgJChnbnVsaWJfZGlyKTsgdGhlbgkJCQkJXAorCSAgY2FzZSAkJChlY2hvIGFsbDogfCBncmVwIC1sIC1mIC0gTWFrZWZpbGUpIGluIE1ha2VmaWxlKTs7ICopCVwKKwkgICAgZWNobyAnJChNRSk6IHNraXBwaW5nICRAOiB5b3UgbGFjayBHTlUgZ3JlcCcgMT4mMjsgZXhpdCAwOzsJXAorCSAgZXNhYzsJCQkJCQkJCVwKKwkgICQoZGVmX3N5bV9yZWdleCkgfCBncmVwIC1FIC1mIC0gJCQoJChWQ19MSVNUX0VYQ0VQVCkpCQlcCisJICAgICYmIHsgZWNobyAnJChNRSk6IGRlZmluZSB0aGUgYWJvdmUgdmlhIHNvbWUgZ251bGliIC5oIGZpbGUnCVwKKwkJICAxPiYyOyAgZXhpdCAxOyB9IHx8IDo7CQkJCVwKKwlmaQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyBQcm9oaWJpdCBjaGVja2VkIGluIGJhY2t1cCBmaWxlcy4KK3NjX3Byb2hpYml0X2JhY2t1cF9maWxlczoKKwlAJChWQ19MSVNUKSB8IGdyZXAgJ34kJCcgJiYJCQkJXAorCSAgeyBlY2hvICckKE1FKTogZm91bmQgdmVyc2lvbiBjb250cm9sbGVkIGJhY2t1cCBmaWxlJyAxPiYyOwlcCisJICAgIGV4aXQgMTsgfSB8fCA6CisKKyMgUmVxdWlyZSB0aGUgbGF0ZXN0IEdQTC4KK3NjX0dQTF92ZXJzaW9uOgorCUBwcm9oaWJpdD0nZWl0aGVyICcndmVyc2lvbiBbXjNdJwkJCQlcCisJaGFsdD0nR1BMIHZOLCBOIT0zJwkJCQkJCVwKKwkgICQoX3NjX3NlYXJjaF9yZWdleHApCisKKyMgUmVxdWlyZSB0aGUgbGF0ZXN0IEdGREwuICBUd28gcmVnZXhwLCBzaW5jZSBzb21lIC50ZXhpIGZpbGVzIGVuZCB1cAorIyBsaW5lIHdyYXBwaW5nIGJldHdlZW4gJ0ZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCcgYW5kICdWZXJzaW9uJy4KK19HRkRMX3JlZ2V4cCA9IChGcmVlICcnRG9jdW1lbnRhdGlvbi4qVmVyc2lvbiAxXC5bXjNdfFZlcnNpb24gMVwuW14zXSBvciBhbnkpCitzY19HRkRMX3ZlcnNpb246CisJQHByb2hpYml0PSckKF9HRkRMX3JlZ2V4cCknCQkJCQlcCisJaGFsdD0nR0ZETCB2TiwgTiE9MycJCQkJCQlcCisJICAkKF9zY19zZWFyY2hfcmVnZXhwKQorCisjIERvbid0IHVzZSBUZXhpbmZvJ3MgQGFjcm9ueW17fS4KKyMgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1nbnVsaWIvMjAxMC0wMy9tc2cwMDMyMS5odG1sCit0ZXhpbmZvX3N1ZmZpeF9yZV8gPz0gXC4odHhpfHRleGkobmZvKT8pJCQKK3NjX3RleGluZm9fYWNyb255bToKKwlAcHJvaGliaXQ9J0BhY3JvbnltXHsnCQkJCQkJXAorCWluX3ZjX2ZpbGVzPSckKHRleGluZm9fc3VmZml4X3JlXyknCQkJCVwKKwloYWx0PSdmb3VuZCB1c2Ugb2YgVGV4aW5mbyBAYWNyb255bXt9JwkJCQlcCisJICAkKF9zY19zZWFyY2hfcmVnZXhwKQorCitjdnNfa2V5d29yZHMgPSBcCisgIEF1dGhvcnxEYXRlfEhlYWRlcnxJZHxOYW1lfExvY2tlcnxMb2d8UkNTZmlsZXxSZXZpc2lvbnxTb3VyY2V8U3RhdGUKKworc2NfcHJvaGliaXRfY3ZzX2tleXdvcmQ6CisJQHByb2hpYml0PSdcJCQoJChjdnNfa2V5d29yZHMpKVwkJCcJCQkJXAorCWhhbHQ9J2RvIG5vdCB1c2UgQ1ZTIGtleXdvcmQgZXhwYW5zaW9uJwkJCQlcCisJICAkKF9zY19zZWFyY2hfcmVnZXhwKQorCisjIFRoaXMgUGVybCBjb2RlIGlzIHNsaWdodGx5IG9iZnVzY2F0ZWQuICBOb3Qgb25seSBpcyBlYWNoICIkIiBkb3VibGVkCisjIGJlY2F1c2UgaXQncyBpbiBhIE1ha2VmaWxlLCBidXQgdGhlICQkYydzIGFyZSBjb21tZW50czsgIHdlIGNhbm5vdAorIyB1c2UgIiMiIGR1ZSB0byB0aGUgd2F5IHRoZSBzY3JpcHQgZW5kcyB1cCBjb25jYXRlbmF0ZWQgb250byBvbmUgbGluZS4KKyMgSXQgd291bGQgYmUgbXVjaCBtb3JlIGNvbmNpc2UsIGFuZCB3b3VsZCBwcm9kdWNlIGJldHRlciBvdXRwdXQgKGluY2x1ZGluZworIyBjb3VudHMpIGlmIHdyaXR0ZW4gYXM6CisjICAgcGVybCAtbG4gLTA3NzcgLWUgJy9cbihcbispJC8gYW5kIHByaW50ICIkQVJHVjogIi5sZW5ndGggJDEnIC4uLgorIyBidXQgdGhhdCB3b3VsZCBiZSBmYXIgbGVzcyBlZmZpY2llbnQsIHJlYWRpbmcgdGhlIGVudGlyZSBjb250ZW50cworIyBvZiBlYWNoIGZpbGUsIHJhdGhlciB0aGFuIGp1c3QgdGhlIGxhc3QgdHdvIGJ5dGVzIG9mIGVhY2guCisjIEluIGFkZGl0aW9uLCB3aGlsZSB0aGUgY29kZSBiZWxvdyBkZXRlY3RzIGJvdGggYmxhbmsgbGluZXMgYW5kIGEgbWlzc2luZworIyBuZXdsaW5lIGF0IEVPRiwgdGhlIGFib3ZlIGRldGVjdHMgb25seSB0aGUgZm9ybWVyLgorIworIyBUaGlzIGlzIGEgcGVybCBzY3JpcHQgdGhhdCBpcyBleHBlY3RlZCB0byBiZSB0aGUgc2luZ2xlLXF1b3RlZCBhcmd1bWVudAorIyB0byBhIGNvbW1hbmQtbGluZSAiLWxlIi4gIFRoZSByZW1haW5pbmcgYXJndW1lbnRzIGFyZSBmaWxlIG5hbWVzLgorIyBQcmludCB0aGUgbmFtZSBvZiBlYWNoIGZpbGUgdGhhdCBkb2VzIG5vdCBlbmQgaW4gZXhhY3RseSBvbmUgbmV3bGluZSBieXRlLgorIyBJLmUuLCB3YXJuIGlmIHRoZXJlIGFyZSBibGFuayBsaW5lcyAoMiBvciBtb3JlIG5ld2xpbmVzKSwgb3IgaWYgdGhlCisjIGxhc3QgYnl0ZSBpcyBub3QgYSBuZXdsaW5lLiAgSG93ZXZlciwgY3VycmVudGx5IHdlIGRvbid0IGNvbXBsYWluCisjIGFib3V0IGFueSBmaWxlIHRoYXQgY29udGFpbnMgZXhhY3RseSBvbmUgYnl0ZS4KKyMgRXhpdCBub256ZXJvIGlmIGF0IGxlYXN0IG9uZSBzdWNoIGZpbGUgaXMgZm91bmQsIG90aGVyd2lzZSwgZXhpdCAwLgorIyBXYXJuIGFib3V0LCBidXQgb3RoZXJ3aXNlIGlnbm9yZSBvcGVuIGZhaWx1cmUuICBJZ25vcmUgc2Vlay9yZWFkIGZhaWx1cmUuCisjCisjIFVzZSB0aGlzIGlmIHlvdSB3YW50IHRvIHJlbW92ZSB0cmFpbGluZyBlbXB0eSBsaW5lcyBmcm9tIHNlbGVjdGVkIGZpbGVzOgorIyAgIHBlcmwgLXBpIC0wNzc3IC1lICdzL1xuXG4rJC9cbi8nIGZpbGVzLi4uCisjCityZXF1aXJlX2V4YWN0bHlfb25lX05MX2F0X0VPRl8gPQkJCQkJXAorICBmb3JlYWNoIG15ICQkZiAoQEFSR1YpCQkJCQkJXAorICAgIHsJCQkJCQkJCQlcCisgICAgICBvcGVuIEYsICI8IiwgJCRmIG9yICh3YXJuICJmYWlsZWQgdG8gb3BlbiAkJGY6ICQkIVxuIiksIG5leHQ7CVwKKyAgICAgIG15ICQkcCA9IHN5c3NlZWsgKEYsIC0yLCAyKTsJCQkJCVwKKyAgICAgIG15ICQkYyA9ICJzZWVrIGZhaWx1cmUgcHJvYmFibHkgbWVhbnMgZmlsZSBoYXMgPCAyIGJ5dGVzOyBpZ25vcmUiOyBcCisgICAgICBteSAkJGxhc3RfdHdvX2J5dGVzOwkJCQkJCVwKKyAgICAgIGRlZmluZWQgJCRwIGFuZCAkJHAgPSBzeXNyZWFkIEYsICQkbGFzdF90d29fYnl0ZXMsIDI7CQlcCisgICAgICBjbG9zZSBGOwkJCQkJCQkJXAorICAgICAgJCRjID0gImlnbm9yZSByZWFkIGZhaWx1cmUiOwkJCQkJXAorICAgICAgJCRwICYmICgkJGxhc3RfdHdvX2J5dGVzIGVxICJcblxuIgkJCQlcCisgICAgICAgICAgICAgIHx8IHN1YnN0ciAoJCRsYXN0X3R3b19ieXRlcywxKSBuZSAiXG4iKQkJCVwKKyAgICAgICAgICBhbmQgKHByaW50ICQkZiksICQkZmFpbD0xOwkJCQkJXAorICAgIH0JCQkJCQkJCQlcCisgIEVORCB7IGV4aXQgZGVmaW5lZCAkJGZhaWwgfQorc2NfcHJvaGliaXRfZW1wdHlfbGluZXNfYXRfRU9GOgorCUBwZXJsIC1sZSAnJChyZXF1aXJlX2V4YWN0bHlfb25lX05MX2F0X0VPRl8pJyAkJCgkKFZDX0xJU1RfRVhDRVBUKSkgXAorCSAgfHwgeyBlY2hvICckKE1FKTogZW1wdHkgbGluZShzKSBvciBubyBuZXdsaW5lIGF0IEVPRicJCVwKKwkJMT4mMjsgZXhpdCAxOyB9IHx8IDoKKworIyBNYWtlIHN1cmUgd2UgZG9uJ3QgdXNlIHN0X2Jsb2Nrcy4gIFVzZSBTVF9OQkxPQ0tTIGluc3RlYWQuCisjIFRoaXMgaXMgYSBiaXQgb2YgYSBrbHVkZ2UsIHNpbmNlIGl0IHByZXZlbnRzIHVzZSBvZiB0aGUgc3RyaW5nCisjIGV2ZW4gaW4gY29tbWVudHMsIGJ1dCBmb3Igbm93IGl0IGRvZXMgdGhlIGpvYiB3aXRoIG5vIGZhbHNlIHBvc2l0aXZlcy4KK3NjX3Byb2hpYml0X3N0YXRfc3RfYmxvY2tzOgorCUBwcm9oaWJpdD0nWy4+XXN0X2Jsb2NrcycJCQkJCVwKKwloYWx0PSdkbyBub3QgdXNlIHN0X2Jsb2NrczsgdXNlIFNUX05CTE9DS1MnCQkJXAorCSAgJChfc2Nfc2VhcmNoX3JlZ2V4cCkKKworIyBNYWtlIHN1cmUgd2UgZG9uJ3QgZGVmaW5lIGFueSBTX0lTKiBtYWNyb3MgaW4gc3JjLyouYyBmaWxlcy4KKyMgVGhleSdyZSBhbHJlYWR5IGRlZmluZWQgdmlhIGdudWxpYidzIHN5cy9zdGF0LmggcmVwbGFjZW1lbnQuCitzY19wcm9oaWJpdF9TX0lTX2RlZmluaXRpb246CisJQHByb2hpYml0PSdeICojICpkZWZpbmUgICpTX0lTJwkJCQkJXAorCWhhbHQ9J2RvIG5vdCBkZWZpbmUgU19JUyogbWFjcm9zOyBpbmNsdWRlIDxzeXMvc3RhdC5oPicJCVwKKwkgICQoX3NjX3NlYXJjaF9yZWdleHApCisKKyMgUGVybCBibG9jayB0byBjb252ZXJ0IGEgbWF0Y2ggdG8gRklMRV9OQU1FOkxJTkVOTzpURVNULAorIyB0aGF0IGlzIHNoYXJlZCBieSB0d28gZGVmaW5pdGlvbnMgYmVsb3cuCitwZXJsX2ZpbGVuYW1lX2xpbmVub190ZXh0XyA9CQkJCQkJXAorICAgIC1lICcgIHsnCQkJCQkJCQlcCisgICAgLWUgJyAgICAkJG4gPSAoJCRgID1+IHRyL1xuL1xuLyArIDEpOycJCQkJXAorICAgIC1lICcgICAgKCQkdiA9ICQkJikgPX4gcy9cbi9cXG4vZzsnCQkJCQlcCisgICAgLWUgJyAgICBwcmludCAiJCRBUkdWOiQkbjokJHZcbiI7JwkJCQkJXAorICAgIC1lICcgIH0nCisKK3Byb2hpYml0X2RvdWJsZWRfd29yZF9SRV8gPz0gXAorICAvXGIodGhlbj98W2lhb11ufGlbZnN0XXxidXR8Zj9vcnxhdHxhbmR8W2R0XW8pXHMrXDFcYi9naW1zCitwcm9oaWJpdF9kb3VibGVkX3dvcmRfID0JCQkJCQlcCisgICAgLWUgJ3doaWxlICgkKHByb2hpYml0X2RvdWJsZWRfd29yZF9SRV8pKScJCQkJXAorICAgICQocGVybF9maWxlbmFtZV9saW5lbm9fdGV4dF8pCisKKyMgRGVmaW5lIHRoaXMgdG8gYSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBtYXRjaGVzCisjIGFueSBmaWxlbmFtZTpkZDptYXRjaCBsaW5lcyB5b3Ugd2FudCB0byBpZ25vcmUuCisjIFRoZSBkZWZhdWx0IGlzIHRvIGlnbm9yZSBubyBtYXRjaGVzLgoraWdub3JlX2RvdWJsZWRfd29yZF9tYXRjaF9SRV8gPz0gXiQkCisKK3NjX3Byb2hpYml0X2RvdWJsZWRfd29yZDoKKwlAcGVybCAtbiAtMDc3NyAkKHByb2hpYml0X2RvdWJsZWRfd29yZF8pICQkKCQoVkNfTElTVF9FWENFUFQpKQlcCisJICB8IGdyZXAgLXZFICckKGlnbm9yZV9kb3VibGVkX3dvcmRfbWF0Y2hfUkVfKScJCQlcCisJICB8IGdyZXAgLiAmJiB7IGVjaG8gJyQoTUUpOiBkb3VibGVkIHdvcmRzJyAxPiYyOyBleGl0IDE7IH0gfHwgOgorCisjIEEgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIHVuZGVzaXJhYmxlIGNvbWJpbmF0aW9ucyBvZiB3b3JkcyBsaWtlCisjICJjYW4gbm90IjsgdGhpcyBtYXRjaGVzIHRoZW0gZXZlbiB3aGVuIHRoZSB0d28gd29yZHMgYXBwZWFyIG9uIGRpZmZlcmVudAorIyBsaW5lcywgYnV0IG5vdCB3aGVuIHRoZXJlIGlzIGFuIGludGVydmVuaW5nIGRlbGltaXRlciBsaWtlICIjIiBvciAiKiIuCisjIFNpbWlsYXJseSB1bmRlc2lyYWJsZSwgIlNlZSBAeHJlZnsuLi59Iiwgc2luY2UgYW4gQHhyZWYgc2hvdWxkIHN0YXJ0CisjIGEgc2VudGVuY2UuICBFeHBsaWNpdGx5IHByb2hpYml0IGFueSBwcmVmaXggb2YgInNlZSIgb3IgImFsc28iLgorIyBBbHNvIHByb2hpYml0IGEgcHJlZml4IG1hdGNoaW5nICJcdysgKyIuCisjIEBweHJlZiBnZXRzIHRoZSBzYW1lIHNlZS9hbHNvIHRyZWF0bWVudCBhbmQgc2hvdWxkIGJlIHBhcmVudGhlc2l6ZWQ7CisjIHByZXN1bWUgaXQgbXVzdCAqbm90KiBzdGFydCBhIHNlbnRlbmNlLgorYmFkX3hyZWZfcmVfID89ICg/Oltcdyw6O10gK3woPzpzZWV8YWxzbylccyspXEB4cmVmXHsKK2JhZF9weHJlZl9yZV8gPz0gKD86Wy4hP118KD86c2VlfGFsc28pKVxzK1xAcHhyZWZceworcHJvaGliaXRfdW5kZXNpcmFibGVfd29yZF9zZXFfUkVfID89CQkJCQlcCisgIC8oPzpcYmNhblxzK25vdFxifCQoYmFkX3hyZWZfcmVfKXwkKGJhZF9weHJlZl9yZV8pKS9naW1zCitwcm9oaWJpdF91bmRlc2lyYWJsZV93b3JkX3NlcV8gPQkJCQkJXAorICAgIC1lICd3aGlsZSAoJChwcm9oaWJpdF91bmRlc2lyYWJsZV93b3JkX3NlcV9SRV8pKScJCQlcCisgICAgJChwZXJsX2ZpbGVuYW1lX2xpbmVub190ZXh0XykKKyMgRGVmaW5lIHRoaXMgdG8gYSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBtYXRjaGVzCisjIGFueSBmaWxlbmFtZTpkZDptYXRjaCBsaW5lcyB5b3Ugd2FudCB0byBpZ25vcmUuCisjIFRoZSBkZWZhdWx0IGlzIHRvIGlnbm9yZSBubyBtYXRjaGVzLgoraWdub3JlX3VuZGVzaXJhYmxlX3dvcmRfc2VxdWVuY2VfUkVfID89IF4kJAorCitzY19wcm9oaWJpdF91bmRlc2lyYWJsZV93b3JkX3NlcToKKwlAcGVybCAtbiAtMDc3NyAkKHByb2hpYml0X3VuZGVzaXJhYmxlX3dvcmRfc2VxXykJCVwKKwkgICAgICQkKCQoVkNfTElTVF9FWENFUFQpKQkJCQkJXAorCSAgfCBncmVwIC12RSAnJChpZ25vcmVfdW5kZXNpcmFibGVfd29yZF9zZXF1ZW5jZV9SRV8pJyB8IGdyZXAgLglcCisJICAmJiB7IGVjaG8gJyQoTUUpOiB1bmRlc2lyYWJsZSB3b3JkIHNlcXVlbmNlJyA+JjI7IGV4aXQgMTsgfSB8fCA6CisKK19wdG0xID0gdXNlICJ0ZXN0IEMxICYmIHRlc3QgQzIiLCBub3QgInRlc3QgQzEgLScnYSBDMiIKK19wdG0yID0gdXNlICJ0ZXN0IEMxIHx8IHRlc3QgQzIiLCBub3QgInRlc3QgQzEgLScnbyBDMiIKKyMgVXNpbmcgdGVzdCdzIC1hIGFuZCAtbyBvcGVyYXRvcnMgaXMgbm90IHBvcnRhYmxlLgorIyBXZSBwcmVmZXIgdGVzdCBvdmVyIFssIHNpbmNlIHRoZSBsYXR0ZXIgaXMgc3BlbGxlZCBbWyBpbiBjb25maWd1cmUuYWMuCitzY19wcm9oaWJpdF90ZXN0X21pbnVzX2FvOgorCUBwcm9oaWJpdD0nKFw8dGVzdHwgXFsrKSAuKyAtW2FvXSAnCQkJCVwKKwloYWx0PSckKF9wdG0xKTsgJChfcHRtMiknCQkJCQlcCisJICAkKF9zY19zZWFyY2hfcmVnZXhwKQorCisjIEF2b2lkIGEgdGVzdCBiYXNoaXNtLgorc2NfcHJvaGliaXRfdGVzdF9kb3VibGVfZXF1YWw6CisJQHByb2hpYml0PScoXDx0ZXN0fCBcWyspIC4rID09ICcJCQkJXAorCWNvbnRhaW5pbmc9JyMhICovYmluL1thLXpdKnNoJwkJCQkJXAorCWhhbHQ9J3VzZSAidGVzdCB4ID0geCIsIG5vdCAidGVzdCB4ID0nJz0geCInCQkJXAorCSAgJChfc2Nfc2VhcmNoX3JlZ2V4cCkKKworIyBFYWNoIHByb2dyYW0gdGhhdCB1c2VzIHByb3Blcl9uYW1lX3V0ZjggbXVzdCBsaW5rIHdpdGggb25lIG9mIHRoZQorIyBJQ09OViBsaWJyYXJpZXMuICBPdGhlcndpc2UsIHNvbWUgSUNPTlYgbGlicmFyeSBtdXN0IGFwcGVhciBpbiBMREFERC4KKyMgVGhlIHBlcmwgLTA3NzcgaW52b2NhdGlvbiBiZWxvdyBleHRyYWN0cyB0aGUgcG9zc2libHktbXVsdGktbGluZQorIyBkZWZpbml0aW9uIG9mIExEQUREIGZyb20gdGhlIGFwcHJvcHJpYXRlIE1ha2VmaWxlLmFtIGFuZCBleGl0cyAwCisjIHdoZW4gaXQgY29udGFpbnMgIklDT05WIi4KK3NjX3Byb3Blcl9uYW1lX3V0ZjhfcmVxdWlyZXNfSUNPTlY6CisJQHByb2dzPSQkKGdyZXAgLWwgJ3Byb3Blcl9uYW1lX3V0ZjggJycoIicgJCQoJChWQ19MSVNUX0VYQ0VQVCkpKTtcCisJaWYgdGVzdCAieCQkcHJvZ3MiICE9IHg7IHRoZW4JCQkJCVwKKwkgIGZhaWw9MDsJCQkJCQkJXAorCSAgZm9yIHAgaW4gJCRwcm9nczsgZG8JCQkJCQlcCisJICAgIGRpcj0kJChkaXJuYW1lICIkJHAiKTsJCQkJCVwKKwkgICAgcGVybCAtMDc3NwkJCQkJCQlcCisJICAgICAgLW5lICdleGl0ICEoL15MREFERCA9KC4rP1teXFxdXG4pL21zICYmICQkMSA9fiAvSUNPTlYvKScJXAorCSAgICAgICQkZGlyL01ha2VmaWxlLmFtICYmIGNvbnRpbnVlOwkJCQlcCisJICAgIGJhc2U9JCQoYmFzZW5hbWUgIiQkcCIgLmMpOwkJCQkJXAorCSAgICBncmVwICIkJHtiYXNlfV9MREFERC4qSUNPTlYpIiAkJGRpci9NYWtlZmlsZS5hbSA+IC9kZXYvbnVsbAlcCisJICAgICAgfHwgeyBmYWlsPTE7IGVjaG8gMT4mMiAiJChNRSk6ICQkcCB1c2VzIHByb3Blcl9uYW1lX3V0ZjgiOyB9OyBcCisJICBkb25lOwkJCQkJCQkJXAorCSAgdGVzdCAkJGZhaWwgPSAxICYmCQkJCQkJXAorCSAgICB7IGVjaG8gMT4mMiAnJChNRSk6IHRoZSBhYm92ZSBkbyBub3QgbGluayB3aXRoIGFueSBJQ09OViBsaWJyYXJ5JzsgXAorCSAgICAgIGV4aXQgMTsgfSB8fCA6OwkJCQkJCVwKKwlmaQorCisjIFdhcm4gYWJvdXQgImMwbnN0IHN0cnVjdCBGb28gY29uc3QgZm9vW10iLAorIyBidXQgbm90IGFib3V0ICJjaGFyIGNvbnN0ICpjb25zdCBmb28iIG9yICIjZGVmaW5lIGNvbnN0IGNvbnN0Ii4KK3NjX3JlZHVuZGFudF9jb25zdDoKKwlAcHJvaGliaXQ9J1xiY29uc3RcYltbOnNwYWNlOl1bOmFsbnVtOl1dezIsfVxiY29uc3RcYicJCVwKKwloYWx0PSdyZWR1bmRhbnQgImNvbnN0IiBpbiBkZWNsYXJhdGlvbnMnCQkJXAorCSAgJChfc2Nfc2VhcmNoX3JlZ2V4cCkKKworc2NfY29uc3RfbG9uZ19vcHRpb246CisJQHByb2hpYml0PSdeICpzdGF0aWMuKnN0cnVjdCBvcHRpb24gJwkJCQlcCisJZXhjbHVkZT0nY29uc3Qgc3RydWN0IG9wdGlvbnxzdHJ1Y3Qgb3B0aW9uIGNvbnN0JwkJXAorCWhhbHQ9J2FkZCAiY29uc3QiIHRvIHRoZSBhYm92ZSBkZWNsYXJhdGlvbnMnCQkJXAorCSAgJChfc2Nfc2VhcmNoX3JlZ2V4cCkKKworTkVXU19oYXNoID0JCQkJCQkJCVwKKyAgJCQoc2VkIC1uICcvXlwqLiogJChQUkVWX1ZFUlNJT05fUkVHRVhQKSAoWzAtOS1dKikvLCQkcCcJCVwKKyAgICAgICAkKHNyY2RpcikvTkVXUwkJCQkJCQlcCisgICAgIHwgcGVybCAtMDc3NyAtcGUJCQkJCQkJXAorCSdzL15Db3B5cmlnaHQuKz9GcmVlXHNTb2Z0d2FyZVxzRm91bmRhdGlvbixcc0luY1wuXG4vL21zJwlcCisgICAgIHwgbWQ1c3VtIC0JCQkJCQkJCVwKKyAgICAgfCBzZWQgJ3MvIC4qLy8nKQorCisjIEVuc3VyZSB0aGF0IHdlIGRvbid0IGFjY2lkZW50YWxseSBpbnNlcnQgYW4gZW50cnkgaW50byBhbiBvbGQgTkVXUyBibG9jay4KK3NjX2ltbXV0YWJsZV9ORVdTOgorCUBpZiB0ZXN0IC1mICQoc3JjZGlyKS9ORVdTOyB0aGVuCQkJCVwKKwkgIHRlc3QgIiQoTkVXU19oYXNoKSIgPSAnJChvbGRfTkVXU19oYXNoKScgJiYgOiB8fAkJXAorCSAgICB7IGVjaG8gJyQoTUUpOiB5b3UgaGF2ZSBtb2RpZmllZCBvbGQgTkVXUycgMT4mMjsgZXhpdCAxOyB9OwlcCisJZmkKKworIyBVcGRhdGUgdGhlIGhhc2ggc3RvcmVkIGFib3ZlLiAgRG8gdGhpcyBhZnRlciBlYWNoIHJlbGVhc2UgYW5kCisjIGZvciBhbnkgY29ycmVjdGlvbnMgdG8gb2xkIGVudHJpZXMuCit1cGRhdGUtTkVXUy1oYXNoOiBORVdTCisJcGVybCAtcGkgLWUgJ3MvXihvbGRfTkVXU19oYXNoWyBcdF0rOj89WyBcdF0rKS4qLyQkezF9JyIkKE5FV1NfaGFzaCkvIiBcCisJICAkKHNyY2RpcikvY2ZnLm1rCisKKyMgRW5zdXJlIHRoYXQgd2UgdXNlIG9ubHkgdGhlIHN0YW5kYXJkICQoVkFSKSBub3RhdGlvbiwKKyMgbm90IEAuLi5AIGluIE1ha2VmaWxlLmFtLCBub3cgdGhhdCB3ZSBjYW4gcmVseSBvbiBhdXRvbWFrZQorIyB0byBlbWl0IGEgZGVmaW5pdGlvbiBmb3IgZWFjaCBzdWJzdGl0dXRlZCB2YXJpYWJsZS4KKyMgSG93ZXZlciwgdGhlcmUgaXMgc3RpbGwgb25lIGNhc2UgaW4gd2hpY2ggQFZBUkAgdXNlIGlzIG5vdCBqdXN0CisjIGxlZ2l0aW1hdGUsIGJ1dCBhY3R1YWxseSByZXF1aXJlZDogd2hlbiBhdWdtZW50aW5nIGFuIGF1dG9tYWtlLWRlZmluZWQKKyMgdmFyaWFibGUgd2l0aCBhIHByZWZpeC4gIEZvciBleGFtcGxlLCBnZXR0ZXh0IHVzZXMgdGhpczoKKyMgTUFLRUlORk8gPSBlbnYgTEFORz0gTENfTUVTU0FHRVM9IExDX0FMTD0gTEFOR1VBR0U9IEBNQUtFSU5GT0AKKyMgb3RoZXJ3aXNlLCBtYWtlaW5mbyB3b3VsZCBwdXQgR2VybWFuIG9yIEZyZW5jaCAoY3VycmVudCBsb2NhbGUpCisjIG5hdmlnYXRpb24gaGludHMgaW4gdGhlIG90aGVyd2lzZS1FbmdsaXNoIGRvY3VtZW50YXRpb24uCisjCisjIEFsbG93IHRoZSBwYWNrYWdlIHRvIGFkZCBleGNlcHRpb25zIHZpYSBhIGhvb2sgaW4gY2ZnLm1rOworIyBmb3IgZXhhbXBsZSwgQFBSQUdNQV9TWVNURU1fSEVBREVSQCBjYW4gYmUgcGVybWl0dGVkIGJ5CisjIHNldHRpbmcgdGhpcyB0byAnICYmICEvUFJBR01BX1NZU1RFTV9IRUFERVIvJy4KK19tYWtlZmlsZV9hdF9hdF9jaGVja19leGNlcHRpb25zID89CitzY19tYWtlZmlsZV9hdF9hdF9jaGVjazoKKwlAcGVybCAtbmUgJy9cQFx3K1xALycJCQkJCQlcCisgICAgICAgICAgLWUgJyAmJiAhLyhcdyspXHMrPS4qXEBcMVxAJCQvJwkJCQlcCisgICAgICAgICAgLWUgJyckKF9tYWtlZmlsZV9hdF9hdF9jaGVja19leGNlcHRpb25zKQkJCVwKKwkgIC1lICdhbmQgKHByaW50ICIkJEFSR1Y6JCQuOiAkJF8iKSwgJCRtPTE7IEVORCB7ZXhpdCAhJCRtfScJXAorCSAgICAkJCgkKFZDX0xJU1RfRVhDRVBUKSB8IGdyZXAgLUUgJyhefC8pKE1ha2VmaWxlXC5hbXxbXi9dK1wubWspJCQnKSBcCisJICAmJiB7IGVjaG8gJyQoTUUpOiB1c2UgJCQoLi4uKSwgbm90IEAuLi5AJyAxPiYyOyBleGl0IDE7IH0gfHwgOgorCituZXdzLWNoZWNrOiBORVdTCisJJChBTV9WX0dFTilpZiBzZWQgLW4gJChuZXdzLWNoZWNrLWxpbmVzLXNwZWMpcCAkPAkJXAorCSAgICB8IGdyZXAgLUUgJChuZXdzLWNoZWNrLXJlZ2V4cCkgPi9kZXYvbnVsbDsgdGhlbgkJXAorCSAgOjsJCQkJCQkJCVwKKwllbHNlCQkJCQkJCQlcCisJICBlY2hvICdORVdTOiAkJChuZXdzLWNoZWNrLXJlZ2V4cCkgZmFpbGVkIHRvIG1hdGNoJyAxPiYyOwlcCisJICBleGl0IDE7CQkJCQkJCVwKKwlmaQorCitzY19tYWtlZmlsZV9UQUJfb25seV9pbmRlbnRhdGlvbjoKKwlAcHJvaGliaXQ9J14JWyBdezh9JwkJCQkJCVwKKwlpbl92Y19maWxlcz0nYWtlZmlsZXxcLm1rJCQnCQkJCQlcCisJaGFsdD0nZm91bmQgVEFCLTgtc3BhY2UgaW5kZW50YXRpb24nCQkJCVwKKwkgICQoX3NjX3NlYXJjaF9yZWdleHApCisKK3NjX200X3F1b3RlX2NoZWNrOgorCUBwcm9oaWJpdD0nKEFDX0RFRklORShfVU5RVU9URUQpP3xBQ19ERUZVTilcKFteW10nCQlcCisJaW5fdmNfZmlsZXM9JyheY29uZmlndXJlXC5hY3xcLm00KSQkJwkJCQlcCisJaGFsdD0ncXVvdGUgdGhlIGZpcnN0IGFyZyB0byBBQ19ERUYqJwkJCQlcCisJICAkKF9zY19zZWFyY2hfcmVnZXhwKQorCitmaXhfcG9fZmlsZV9kaWFnID0gXAorJ3lvdSBoYXZlIGNoYW5nZWQgdGhlIHNldCBvZiBmaWxlcyB3aXRoIHRyYW5zbGF0YWJsZSBkaWFnbm9zdGljcztcblwKK2FwcGx5IHRoZSBhYm92ZSBwYXRjaFxuJworCisjIFZlcmlmeSB0aGF0IGFsbCBzb3VyY2UgZmlsZXMgdXNpbmcgXygpIChtb3JlIHNwZWNpZmljYWxseSwgZmlsZXMgdGhhdAorIyBtYXRjaCAkKF9nbF90cmFuc2xhdGFibGVfc3RyaW5nX3JlKSkgYXJlIGxpc3RlZCBpbiBwby9QT1RGSUxFUy5pbi4KK3BvX2ZpbGUgPz0gJChzcmNkaXIpL3BvL1BPVEZJTEVTLmluCitnZW5lcmF0ZWRfZmlsZXMgPz0gJChzcmNkaXIpL2xpYi8qLltjaF0KK19nbF90cmFuc2xhdGFibGVfc3RyaW5nX3JlID89IFxiKE4/X3xnZXR0ZXh0ICopXChbXikiXSooInwkJCkKK3NjX3BvX2NoZWNrOgorCUBpZiB0ZXN0IC1mICQocG9fZmlsZSk7IHRoZW4JCQkJCVwKKwkgIGdyZXAgLUUgLXYgJ14oI3wkJCknICQocG9fZmlsZSkJCQkJXAorCSAgICB8IGdyZXAgLXYgJ15zcmMvZmFsc2VcLmMkJCcgfCBzb3J0ID4gJEAtMTsJCQlcCisJICBmaWxlcz07CQkJCQkJCVwKKwkgIGZvciBmaWxlIGluICQkKCQoVkNfTElTVF9FWENFUFQpKSAkKGdlbmVyYXRlZF9maWxlcyk7IGRvCVwKKwkgICAgdGVzdCAtciAkJGZpbGUgfHwgY29udGludWU7CQkJCQlcCisJICAgIGNhc2UgJCRmaWxlIGluCQkJCQkJXAorCSAgICAgICoubTR8Ki5taykgY29udGludWUgOzsJCQkJCVwKKwkgICAgICAqLj98Ki4/PykgOzsJCQkJCQlcCisJICAgICAgKikgY29udGludWU7OwkJCQkJCVwKKwkgICAgZXNhYzsJCQkJCQkJXAorCSAgICBjYXNlICQkZmlsZSBpbgkJCQkJCVwKKwkgICAgKi5bY2hdKQkJCQkJCQlcCisJICAgICAgYmFzZT1gZXhwciAiICQkZmlsZSIgOiAnIFwoLipcKVwuLidgOwkJCVwKKwkgICAgICB7IHRlc3QgLWYgJCRiYXNlLmwgfHwgdGVzdCAtZiAkJGJhc2UueTsgfSAmJiBjb250aW51ZTs7CVwKKwkgICAgZXNhYzsJCQkJCQkJXAorCSAgICBmaWxlcz0iJCRmaWxlcyAkJGZpbGUiOwkJCQkJXAorCSAgZG9uZTsJCQkJCQkJCVwKKwkgIGdyZXAgLUUgLWwgJyQoX2dsX3RyYW5zbGF0YWJsZV9zdHJpbmdfcmUpJyAkJGZpbGVzCQlcCisJICAgIHwgc2VkICdzfF4kKF9kb3RfZXNjYXBlZF9zcmNkaXIpL3x8JyB8IHNvcnQgLXUgPiAkQC0yOwlcCisJICBkaWZmIC11IC1MICQocG9fZmlsZSkgLUwgJChwb19maWxlKSAkQC0xICRALTIJCQlcCisJICAgIHx8IHsgcHJpbnRmICckKE1FKTogJyQoZml4X3BvX2ZpbGVfZGlhZykgMT4mMjsgZXhpdCAxOyB9OwlcCisJICBybSAtZiAkQC0xICRALTI7CQkJCQkJXAorCWZpCisKKyMgU29tZXRpbWVzIGl0IGlzIHVzZWZ1bCB0byBjaGFuZ2UgdGhlIFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUKKyMgaW4gTWFrZWZpbGVzLiAgV2hlbiBkb2luZyBzbywgaXQncyBiZXR0ZXIgbm90IHRvIHVzZSB0aGUgVW5peC1jZW50cmljCisjIHBhdGggc2VwYXJhdG9yIG9mICc6JywgYnV0IHJhdGhlciB0aGUgYXV0b21ha2UtcHJvdmlkZWQgJyQoUEFUSF9TRVBBUkFUT1IpJy4KK21zZyA9ICdEbyBub3QgdXNlICI6IiBhYm92ZTsgdXNlICQkKFBBVEhfU0VQQVJBVE9SKSBpbnN0ZWFkJworc2NfbWFrZWZpbGVfcGF0aF9zZXBhcmF0b3JfY2hlY2s6CisJQHByb2hpYml0PSdQQVRIWz1dLio6JwkJCQkJCVwKKwlpbl92Y19maWxlcz0nYWtlZmlsZXxcLm1rJCQnCQkJCQlcCisJaGFsdD0kKG1zZykJCQkJCQkJXAorCSAgJChfc2Nfc2VhcmNoX3JlZ2V4cCkKKworIyBDaGVjayB0aGF0ICdtYWtlIGFscGhhJyB3aWxsIG5vdCBmYWlsIGF0IHRoZSBlbmQgb2YgdGhlIHByb2Nlc3MsCisjIGkuZS4sIHdoZW4gcGtnLU0uTi50YXIueHogYWxyZWFkeSBleGlzdHMgKGVpdGhlciBpbiAiLiIgb3IgaW4gLi4vcmVsZWFzZSkKKyMgYW5kIGlzIHJlYWQtb25seS4KK3dyaXRhYmxlLWZpbGVzOgorCSQoQU1fVl9HRU4paWYgdGVzdCAtZCAkKHJlbGVhc2VfYXJjaGl2ZV9kaXIpOyB0aGVuCQlcCisJICBmb3IgZmlsZSBpbiAkKERJU1RfQVJDSElWRVMpOyBkbwkJCQlcCisJICAgIGZvciBwIGluIC4vICQocmVsZWFzZV9hcmNoaXZlX2RpcikvOyBkbwkJCVwKKwkgICAgICB0ZXN0IC1lICQkcCQkZmlsZSB8fCBjb250aW51ZTsJCQkJXAorCSAgICAgIHRlc3QgLXcgJCRwJCRmaWxlCQkJCQkJXAorCQl8fCB7IGVjaG8gRVJST1I6ICQkcCQkZmlsZSBpcyBub3Qgd3JpdGFibGU7IGZhaWw9MTsgfTsJXAorCSAgICBkb25lOwkJCQkJCQlcCisJICBkb25lOwkJCQkJCQkJXAorCSAgdGVzdCAiJCRmYWlsIiAmJiBleGl0IDEgfHwgOiA7CQkJCVwKKwllbHNlIDo7CQkJCQkJCQlcCisJZmkKKwordl9ldGNfZmlsZSA9ICQoZ251bGliX2RpcikvbGliL3ZlcnNpb24tZXRjLmMKK3NhbXBsZS10ZXN0ID0gdGVzdHMvc2FtcGxlLXRlc3QKK3RleGkgPSBkb2MvJChQQUNLQUdFKS50ZXhpCisjIE1ha2Ugc3VyZSB0aGF0IHRoZSBjb3B5cmlnaHQgZGF0ZSBpbiAkKHZfZXRjX2ZpbGUpIGlzIHVwIHRvIGRhdGUuCisjIERvIHRoZSBzYW1lIGZvciB0aGUgJChzYW1wbGUtdGVzdCkgYW5kIHRoZSBtYWluIGRvYy8udGV4aSBmaWxlLgorc2NfY29weXJpZ2h0X2NoZWNrOgorCUByZXF1aXJlPSdlbnVtIHsgQ09QWVJJR0hUX1lFQVIgPSAnJCQoZGF0ZSArJVkpJyB9OycJCVwKKwlpbl9maWxlcz0kKHZfZXRjX2ZpbGUpCQkJCQkJXAorCWhhbHQ9J291dCBvZiBkYXRlIGNvcHlyaWdodCBpbiAkKHZfZXRjX2ZpbGUpOyB1cGRhdGUgaXQnCVwKKwkgICQoX3NjX3NlYXJjaF9yZWdleHApCisJQHJlcXVpcmU9JyMgQ29weXJpZ2h0IFwoQ1wpICckJChkYXRlICslWSknIEZyZWUnCQlcCisJaW5fdmNfZmlsZXM9JChzYW1wbGUtdGVzdCkJCQkJCVwKKwloYWx0PSdvdXQgb2YgZGF0ZSBjb3B5cmlnaHQgaW4gJChzYW1wbGUtdGVzdCk7IHVwZGF0ZSBpdCcJXAorCSAgJChfc2Nfc2VhcmNoX3JlZ2V4cCkKKwlAcmVxdWlyZT0nQ29weXJpZ2h0IEBjb3B5cmlnaHRce1x9IC4qJyQkKGRhdGUgKyVZKScgRnJlZScJXAorCWluX3ZjX2ZpbGVzPSQodGV4aSkJCQkJCQlcCisJaGFsdD0nb3V0IG9mIGRhdGUgY29weXJpZ2h0IGluICQodGV4aSk7IHVwZGF0ZSBpdCcJCVwKKwkgICQoX3NjX3NlYXJjaF9yZWdleHApCisKKyMgSWYgdGVzdHMvaGVscC12ZXJzaW9uIGV4aXN0cyBhbmQgc2VlbXMgdG8gYmUgbmV3IGVub3VnaCwgYXNzdW1lIHRoYXQgaXRzCisjIHVzZSBvZiBpbml0LnNoIGFuZCBwYXRoX3ByZXBlbmRfIGlzIGNvcnJlY3QsIGFuZCBlbnN1cmUgdGhhdCBldmVyeSBvdGhlcgorIyB1c2Ugb2YgaW5pdC5zaCBpcyBpZGVudGljYWwuCisjIFRoaXMgaXMgdXNlZnVsIGJlY2F1c2UgaGVscC12ZXJzaW9uIGNyb3NzLWNoZWNrcyBwcm9nIC0tdmVyc2lvbgorIyB3aXRoICQoVkVSU0lPTiksIHdoaWNoIHZlcmlmaWVzIHRoYXQgaXRzIHBhdGhfcHJlcGVuZF8gaW52b2NhdGlvbgorIyBzZXRzIFBBVEggY29ycmVjdGx5LiAgVGhpcyBpcyBhbiBpbmV4cGVuc2l2ZSB3YXkgdG8gZW5zdXJlIHRoYXQKKyMgdGhlIG90aGVyIGluaXQuc2gtdXNpbmcgdGVzdHMgYWxzbyBnZXQgaXQgcmlnaHQuCitfaHZfZmlsZSA/PSAkKHNyY2RpcikvdGVzdHMvaGVscC12ZXJzaW9uCitfaHZfcmVnZXhfd2VhayA/PSBeICpcLiAuKi9pbml0XC5zaCIKKyMgRml4IHN5bnRheC1oaWdobGlnaHRlcnMgIgorX2h2X3JlZ2V4X3N0cm9uZyA/PSBeICpcLiAiXCQke3NyY2Rpcj1cLn0vaW5pdFwuc2giCitzY19jcm9zc19jaGVja19QQVRIX3VzYWdlX2luX3Rlc3RzOgorCUBpZiB0ZXN0IC1mICQoX2h2X2ZpbGUpOyB0aGVuCQkJCQlcCisJICBncmVwIC1sICdWRVJTSU9OIG1pc21hdGNoJyAkKF9odl9maWxlKSA+L2Rldi9udWxsCQlcCisJICAgIHx8IHsgZWNobyAiJEA6IHNraXBwZWQ6IG5vIHN1Y2ggZmlsZTogJChfaHZfZmlsZSkiIDE+JjI7CVwKKwkJIGV4aXQgMDsgfTsJCQkJCQlcCisJICBncmVwIC1sRSAnJChfaHZfcmVnZXhfc3Ryb25nKScgJChfaHZfZmlsZSkgPi9kZXYvbnVsbAkJXAorCSAgICB8fCB7IGVjaG8gIiRAOiAkKF9odl9maWxlKSBsYWNrcyBjb25mb3JtaW5nIHVzZSBvZiBpbml0LnNoIiAxPiYyOyBcCisJCSBleGl0IDE7IH07CQkJCQkJXAorCSAgZ29vZD0kJChncmVwIC1FICckKF9odl9yZWdleF9zdHJvbmcpJyAkKF9odl9maWxlKSk7CQlcCisJICBncmVwIC1MRnggIiQkZ29vZCIJCQkJCQlcCisJCSQkKGdyZXAgLWxFICckKF9odl9yZWdleF93ZWFrKScgJCQoJChWQ19MSVNUX0VYQ0VQVCkpKQlcCisJICAgICAgfCBncmVwIC4gJiYJCQkJCQlcCisJICAgIHsgZWNobyAiJChNRSk6IHRoZSBhYm92ZSBmaWxlcyB1c2UgcGF0aF9wcmVwZW5kXyBpbmNvbnNpc3RlbnRseSIgXAorCQkxPiYyOyBleGl0IDE7IH0gfHwgOjsJCQkJCVwKKwlmaQorCisjIEJSRSByZWdleCBvZiBmaWxlIGNvbnRlbnRzIHRvIGlkZW50aWZ5IGEgdGVzdCBzY3JpcHQuCitfdGVzdF9zY3JpcHRfcmVnZXggPz0gXDxpbml0XC5zaFw+CisKKyMgSW4gdGVzdHMsIHVzZSAiY29tcGFyZSBleHBlY3RlZCBhY3R1YWwiLCBub3QgdGhlIHJldmVyc2UuCitzY19wcm9oaWJpdF9yZXZlcnNlZF9jb21wYXJlX2ZhaWx1cmU6CisJQHByb2hpYml0PSdcPGNvbXBhcmUgW14gXSsgKFteIF0qZXhwfC9kZXYvbnVsbCknCQlcCisJY29udGFpbmluZz0nJChfdGVzdF9zY3JpcHRfcmVnZXgpJwkJCQlcCisJaGFsdD0ncmV2ZXJzZWQgY29tcGFyZSBhcmd1bWVudHMnCQkJCVwKKwkgICQoX3NjX3NlYXJjaF9yZWdleHApCisKKyMgI2lmIEhBVkVfLi4uIHdpbGwgZXZhbHVhdGUgdG8gZmFsc2UgZm9yIGFueSBub24gbnVtZXJpYyBzdHJpbmcuCisjIFRoYXQgd291bGQgYmUgZmxhZ2dlZCBieSB1c2luZyAtV3VuZGVmLCBob3dldmVyIGdudWxpYiBjdXJyZW50bHkKKyMgdGVzdHMgbWFueSB1bmRlZmluZWQgbWFjcm9zLCBhbmQgc28gd2UgY2FuJ3QgZW5hYmxlIHRoYXQgb3B0aW9uLgorIyBTbyBhdCBsZWFzdCBwcmVjbHVkZSBjb21tb24gYm9vbGVhbiBzdHJpbmdzIGFzIG1hY3JvIHZhbHVlcy4KK3NjX1d1bmRlZl9ib29sZWFuOgorCUBwcm9oaWJpdD0nXiNkZWZpbmUuKih5ZXN8bm98dHJ1ZXxmYWxzZSkkJCcJCQlcCisJaW5fZmlsZXM9JyQoQ09ORklHX0lOQ0xVREUpJwkJCQkJXAorCWhhbHQ9J1VzZSAwIG9yIDEgZm9yIG1hY3JvIHZhbHVlcycJCQkJXAorCSAgJChfc2Nfc2VhcmNoX3JlZ2V4cCkKKworIyBFdmVuIGlmIHlvdSB1c2UgcGF0aG1heC5oIHRvIGd1YXJhbnRlZSB0aGF0IFBBVEhfTUFYIGlzIGRlZmluZWQsIGl0IG1pZ2h0CisjIG5vdCBiZSBjb25zdGFudCwgb3IgbWlnaHQgb3ZlcmZsb3cgYSBzdGFjay4gIEluIGdlbmVyYWwsIHVzZSBQQVRIX01BWCBhcworIyBhIGxpbWl0LCBub3QgYW4gYXJyYXkgb3IgYWxsb2NhIHNpemUuCitzY19wcm9oaWJpdF9wYXRoX21heF9hbGxvY2F0aW9uOgorCUBwcm9oaWJpdD0nKFxiYWxsb2NhICpcKFteKV0qfFxbW15dXSopXGJQQVRIX01BWCcJCVwKKwloYWx0PSdBdm9pZCBzdGFjayBhbGxvY2F0aW9ucyBvZiBzaXplIFBBVEhfTUFYJwkJCVwKKwkgICQoX3NjX3NlYXJjaF9yZWdleHApCisKK3NjX3Z1bG5lcmFibGVfbWFrZWZpbGVfQ1ZFLTIwMDktNDAyOToKKwlAcHJvaGliaXQ9J3Blcm0gLTc3NyAtZXhlYyBjaG1vZCBhXCtyd3h8Y2htb2QgNzc3IFwkJFwoZGlzdGRpclwpJyBcCisJaW5fZmlsZXM9JyhefC8pTWFrZWZpbGVcLmluJCQnCQkJCQlcCisJaGFsdD0kJChwcmludGYgJyVzXG4nCQkJCQkJXAorCSAgJ3RoZSBhYm92ZSBmaWxlcyBhcmUgdnVsbmVyYWJsZTsgYmV3YXJlIG9mIHJ1bm5pbmcnCQlcCisJICAnICAibWFrZSBkaXN0KiIgcnVsZXMsIGFuZCB1cGdyYWRlIHRvIGZpeGVkIGF1dG9tYWtlJwkJXAorCSAgJyAgc2VlIGh0dHA6Ly9idWd6aWxsYS5yZWRoYXQuY29tLzU0MjYwOSBmb3IgZGV0YWlscycpCVwKKwkgICQoX3NjX3NlYXJjaF9yZWdleHApCisKK3NjX3Z1bG5lcmFibGVfbWFrZWZpbGVfQ1ZFLTIwMTItMzM4NjoKKwlAcHJvaGliaXQ9J2NobW9kIGFcK3cgXCQkXChkaXN0ZGlyXCknCQkJCVwKKwlpbl9maWxlcz0nKF58LylNYWtlZmlsZVwuaW4kJCcJCQkJCVwKKwloYWx0PSQkKHByaW50ZiAnJXNcbicJCQkJCQlcCisJICAndGhlIGFib3ZlIGZpbGVzIGFyZSB2dWxuZXJhYmxlOyBiZXdhcmUgb2YgcnVubmluZycJCVwKKwkgICcgICJtYWtlIGRpc3RjaGVjayIsIGFuZCB1cGdyYWRlIHRvIGZpeGVkIGF1dG9tYWtlJwkJXAorCSAgJyAgc2VlIGh0dHA6Ly9idWd6aWxsYS5yZWRoYXQuY29tL0NWRS0yMDEyLTMzODYgZm9yIGRldGFpbHMnKQlcCisJICAkKF9zY19zZWFyY2hfcmVnZXhwKQorCit2Yy1kaWZmLWNoZWNrOgorCSQoQU1fVl9HRU4pKHVuc2V0IENEUEFUSDsgY2QgJChzcmNkaXIpICYmICQoVkMpIGRpZmYpID4gdmMtZGlmZnMgfHwgOgorCSQoQU1fVl9hdClpZiB0ZXN0IC1zIHZjLWRpZmZzOyB0aGVuCQkJXAorCSAgY2F0IHZjLWRpZmZzOwkJCQkJCVwKKwkgIGVjaG8gIlNvbWUgZmlsZXMgYXJlIGxvY2FsbHkgbW9kaWZpZWQ6IiAxPiYyOwkJXAorCSAgZXhpdCAxOwkJCQkJCVwKKwllbHNlCQkJCQkJCVwKKwkgIHJtIHZjLWRpZmZzOwkJCQkJCVwKKwlmaQorCityZWwtZmlsZXMgPSAkKERJU1RfQVJDSElWRVMpCisKK2dudWxpYl9kaXIgPz0gJChzcmNkaXIpL2dudWxpYgorZ251bGliLXZlcnNpb24gPSAkJChjZCAkKGdudWxpYl9kaXIpICYmIGdpdCBkZXNjcmliZSkKK2Jvb3RzdHJhcC10b29scyA/PSBhdXRvY29uZixhdXRvbWFrZSxnbnVsaWIKKworIyBJZiBpdCdzIG5vdCBhbHJlYWR5IHNwZWNpZmllZCwgZGVyaXZlIHRoZSBHUEcga2V5IElEIGZyb20KKyMgdGhlIHNpZ25lZCB0YWcgd2UndmUganVzdCBhcHBsaWVkIHRvIG1hcmsgdGhpcyByZWxlYXNlLgorZ3BnX2tleV9JRCA/PQkJCQkJCQkJXAorICAkJChjZCAkKHNyY2RpcikJCQkJCQkJXAorICAgICAmJiBnaXQgY2F0LWZpbGUgdGFnIHYkKFZFUlNJT04pCQkJCQlcCisgICAgICAgIHwgZ3BndiAtLXN0YXR1cy1mZCAxIC0ta2V5cmluZyAvZGV2L251bGwgLSAtIDI+L2Rldi9udWxsCVwKKyAgICAgICAgfCBhd2sgJy9eXFtHTlVQRzpcXSBFUlJTSUcgLyB7cHJpbnQgJCQzOyBleGl0fScpCisKK3RyYW5zbGF0aW9uX3Byb2plY3RfID89IGNvb3JkaW5hdG9yQHRyYW5zbGF0aW9ucHJvamVjdC5vcmcKKworIyBNYWtlIGluZm8tZ251IHRoZSBkZWZhdWx0IG9ubHkgZm9yIGEgc3RhYmxlIHJlbGVhc2UuCithbm5vdW5jZW1lbnRfQ2Nfc3RhYmxlID0gJCh0cmFuc2xhdGlvbl9wcm9qZWN0XyksICQoUEFDS0FHRV9CVUdSRVBPUlQpCithbm5vdW5jZW1lbnRfbWFpbF9oZWFkZXJzX3N0YWJsZSA9CQlcCisgIFRvOiBpbmZvLWdudUBnbnUub3JnCQkJCVwKKyAgQ2M6ICQoYW5ub3VuY2VtZW50X0NjXykJCQlcCisgIE1haWwtRm9sbG93dXAtVG86ICQoUEFDS0FHRV9CVUdSRVBPUlQpCisKK2Fubm91bmNlbWVudF9DY19hbHBoYSA9ICQodHJhbnNsYXRpb25fcHJvamVjdF8pCithbm5vdW5jZW1lbnRfbWFpbF9oZWFkZXJzX2FscGhhID0JCVwKKyAgVG86ICQoUEFDS0FHRV9CVUdSRVBPUlQpCQkJXAorICBDYzogJChhbm5vdW5jZW1lbnRfQ2NfKQorCithbm5vdW5jZW1lbnRfbWFpbF9DY19iZXRhID0gJChhbm5vdW5jZW1lbnRfbWFpbF9DY19hbHBoYSkKK2Fubm91bmNlbWVudF9tYWlsX2hlYWRlcnNfYmV0YSA9ICQoYW5ub3VuY2VtZW50X21haWxfaGVhZGVyc19hbHBoYSkKKworYW5ub3VuY2VtZW50X21haWxfQ2NfID89ICQoYW5ub3VuY2VtZW50X21haWxfQ2NfJChyZWxlYXNlLXR5cGUpKQorYW5ub3VuY2VtZW50X21haWxfaGVhZGVyc18gPz0gJChhbm5vdW5jZW1lbnRfbWFpbF9oZWFkZXJzXyQocmVsZWFzZS10eXBlKSkKK2Fubm91bmNlbWVudDogTkVXUyBDaGFuZ2VMb2cgJChyZWwtZmlsZXMpCisjIE5vdCAkKEFNX1ZfR0VOKSBzaW5jZSB0aGUgb3V0cHV0IG9mIHRoaXMgY29tbWFuZCBzZXJ2ZXMgYXMKKyMgYW5ub3VuY2VtZW50IG1lc3NhZ2U6IGl0IHdvdWxkIHN0YXJ0IHdpdGggIiBHRU4gYW5ub3VuY2VtZW50Ii4KKwkkKEFNX1ZfYXQpJChzcmNkaXIpLyQoX2J1aWxkLWF1eCkvYW5ub3VuY2UtZ2VuCQkJXAorCSAgICAtLW1haWwtaGVhZGVycz0nJChhbm5vdW5jZW1lbnRfbWFpbF9oZWFkZXJzXyknCQlcCisJICAgIC0tcmVsZWFzZS10eXBlPSQocmVsZWFzZS10eXBlKQkJCQlcCisJICAgIC0tcGFja2FnZT0kKFBBQ0tBR0UpCQkJCQlcCisJICAgIC0tcHJldj0kKFBSRVZfVkVSU0lPTikJCQkJCVwKKwkgICAgLS1jdXJyPSQoVkVSU0lPTikJCQkJCQlcCisJICAgIC0tZ3BnLWtleS1pZD0kKGdwZ19rZXlfSUQpCQkJCQlcCisJICAgIC0tc3JjZGlyPSQoc3JjZGlyKQkJCQkJCVwKKwkgICAgLS1uZXdzPSQoc3JjZGlyKS9ORVdTCQkJCQlcCisJICAgIC0tYm9vdHN0cmFwLXRvb2xzPSQoYm9vdHN0cmFwLXRvb2xzKQkJCVwKKwkgICAgJCQoY2FzZSAsJChib290c3RyYXAtdG9vbHMpLCBpbiAoKixnbnVsaWIsKikJCVwKKwkgICAgICAgZWNobyAtLWdudWxpYi12ZXJzaW9uPSQoZ251bGliLXZlcnNpb24pOzsgZXNhYykJCVwKKwkgICAgLS1uby1wcmludC1jaGVja3N1bXMJCQkJCVwKKwkgICAgJChhZGRwcmVmaXggLS11cmwtZGlyPSwgJCh1cmxfZGlyX2xpc3QpKQorCisuUEhPTlk6IHJlbGVhc2UtY29tbWl0CityZWxlYXNlLWNvbW1pdDoKKwkkKEFNX1ZfR0VOKWNkICQoc3JjZGlyKQkJCQlcCisJICAmJiAkKF9idWlsZC1hdXgpL2RvLXJlbGVhc2UtY29tbWl0LWFuZC10YWcJXAorCSAgICAgICAtQyAkKGFic19idWlsZGRpcikgJChSRUxFQVNFKQorCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjCisjIyBVcGRhdGluZyBmaWxlcy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjCisKK2Z0cC1nbnUgPSBmdHA6Ly9mdHAuZ251Lm9yZy9nbnUKK3d3dy1nbnUgPSBodHRwOi8vd3d3LmdudS5vcmcKKwordXBsb2FkX2Rlc3RfZGlyXyA/PSAkKFBBQ0tBR0UpCit1cGxvYWRfY29tbWFuZCA9CQkJCQkJXAorICAkKHNyY2RpcikvJChfYnVpbGQtYXV4KS9nbnVwbG9hZCAkKEdOVVBMT0FERkxBR1MpCQlcCisgIC0tdG8gJChnbnVfcmVsX2hvc3QpOiQodXBsb2FkX2Rlc3RfZGlyXykJCQlcCisgICQocmVsLWZpbGVzKQorZW1pdF91cGxvYWRfY29tbWFuZHM6CisJQGVjaG8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCUBlY2hvID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlAZWNobyAnJCh1cGxvYWRfY29tbWFuZCknCisJQGVjaG8gJyMgc2VuZCB0aGUgfi9hbm5vdW5jZS0kKG15X2Rpc3RkaXIpIGUtbWFpbCcKKwlAZWNobyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJQGVjaG8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuUEhPTlk6IHVwbG9hZAordXBsb2FkOgorCSQoQU1fVl9HRU4pJCh1cGxvYWRfY29tbWFuZCkKKworZGVmaW5lIGVtaXQtY29tbWl0LWxvZworICBwcmludGYgJyVzXG4nICdtYWludDogcG9zdC1yZWxlYXNlIGFkbWluaXN0cml2aWEnICcnCQkJXAorICAgICcqIE5FV1M6IEFkZCBoZWFkZXIgbGluZSBmb3IgbmV4dCByZWxlYXNlLicJCQkJXAorICAgICcqIC5wcmV2LXZlcnNpb246IFJlY29yZCBwcmV2aW91cyB2ZXJzaW9uLicJCQkJXAorICAgICcqIGNmZy5tayAob2xkX05FV1NfaGFzaCk6IEF1dG8tdXBkYXRlLicKK2VuZGVmCisKKy5QSE9OWTogbm8tc3VibW9kdWxlLWNoYW5nZXMKK25vLXN1Ym1vZHVsZS1jaGFuZ2VzOgorCSQoQU1fVl9HRU4paWYgdGVzdCAtZCAkKHNyY2RpcikvLmdpdDsgdGhlbgkJCVwKKwkgIGRpZmY9JCQoY2QgJChzcmNkaXIpICYmIGdpdCBzdWJtb2R1bGUgLXEgZm9yZWFjaAkJXAorCQkgIGdpdCBkaWZmLWluZGV4IC0tbmFtZS1vbmx5IEhFQUQpCQkJXAorCSAgICB8fCBleGl0IDE7CQkJCQkJCVwKKwkgIGNhc2UgJCRkaWZmIGluICcnKSA7OwkJCQkJCVwKKwkgICAgKikgZWNobyAnJChNRSk6IHN1Ym1vZHVsZSBmaWxlcyBhcmUgbG9jYWxseSBtb2RpZmllZDonOwlcCisJCWVjaG8gIiQkZGlmZiI7IGV4aXQgMTs7IGVzYWM7CQkJCVwKKwllbHNlCQkJCQkJCQlcCisJICA6IDsJCQkJCQkJCVwKKwlmaQorCitzdWJtb2R1bGUtY2hlY2tzID89IG5vLXN1Ym1vZHVsZS1jaGFuZ2VzIHB1YmxpYy1zdWJtb2R1bGUtY29tbWl0CisKKyMgRW5zdXJlIHRoYXQgZWFjaCBzdWItbW9kdWxlIGNvbW1pdCB3ZSdyZSB1c2luZyBpcyBwdWJsaWMuCisjIFdpdGhvdXQgdGhpcywgaXQgaXMgdG9vIGVhc3kgdG8gdGFnIGFuZCByZWxlYXNlIGNvZGUgdGhhdAorIyBjYW5ub3QgYmUgYnVpbHQgZnJvbSBhIGZyZXNoIGNsb25lLgorLlBIT05ZOiBwdWJsaWMtc3VibW9kdWxlLWNvbW1pdAorcHVibGljLXN1Ym1vZHVsZS1jb21taXQ6CisJJChBTV9WX0dFTilpZiB0ZXN0IC1kICQoc3JjZGlyKS8uZ2l0OyB0aGVuCQkJXAorCSAgY2QgJChzcmNkaXIpICYmCQkJCQkJXAorCSAgZ2l0IHN1Ym1vZHVsZSAtLXF1aWV0IGZvcmVhY2gJCQkJCVwKKwkgICAgICB0ZXN0ICciJCQoZ2l0IHJldi1wYXJzZSAiJCRzaGExIikiJwkJCVwKKwkgICAgICA9ICciJCQoZ2l0IG1lcmdlLWJhc2Ugb3JpZ2luICIkJHNoYTEiKSInCQkJXAorCSAgICB8fCB7IGVjaG8gJyQoTUUpOiBmb3VuZCBub24tcHVibGljIHN1Ym1vZHVsZSBjb21taXQnID4mMjsJXAorCQkgZXhpdCAxOyB9OwkJCQkJCVwKKwllbHNlCQkJCQkJCQlcCisJICA6IDsJCQkJCQkJCVwKKwlmaQorIyBUaGlzIHJ1bGUgaGFzIGEgaGlnaCBlbm91Z2ggdXRpbGl0eS9jb3N0IHJhdGlvIHRoYXQgaXQgc2hvdWxkIGJlIGEKKyMgZGVwZW5kZW50IG9mICJjaGVjayIgYnkgZGVmYXVsdC4gIEhvd2V2ZXIsIHNvbWUgb2YgdXMgZG8gb2NjYXNpb25hbGx5CisjIGNvbW1pdCBhIHRlbXBvcmFyeSBjaGFuZ2UgdGhhdCBkZWxpYmVyYXRlbHkgcG9pbnRzIHRvIGEgbm9uLXB1YmxpYworIyBzdWJtb2R1bGUgY29tbWl0LCBhbmQgd2FudCB0byBiZSBhYmxlIHRvIHVzZSBydWxlcyBsaWtlICJtYWtlIGNoZWNrIi4KKyMgSW4gdGhhdCBjYXNlLCBydW4gZS5nLiwgIm1ha2UgY2hlY2sgZ2xfcHVibGljX3N1Ym1vZHVsZV9jb21taXQ9IgorIyB0byBkaXNhYmxlIHRoaXMgdGVzdC4KK2dsX3B1YmxpY19zdWJtb2R1bGVfY29tbWl0ID89IHB1YmxpYy1zdWJtb2R1bGUtY29tbWl0CitjaGVjazogJChnbF9wdWJsaWNfc3VibW9kdWxlX2NvbW1pdCkKKworLlBIT05ZOiBhbHBoYSBiZXRhIHN0YWJsZSByZWxlYXNlCitBTExfUkVDVVJTSVZFX1RBUkdFVFMgKz0gYWxwaGEgYmV0YSBzdGFibGUKK2FscGhhIGJldGEgc3RhYmxlOiAkKGxvY2FsLWNoZWNrKSB3cml0YWJsZS1maWxlcyAkKHN1Ym1vZHVsZS1jaGVja3MpCisJJChBTV9WX0dFTil0ZXN0ICRAID0gc3RhYmxlCQkJCQlcCisJICAmJiB7IGVjaG8gJChWRVJTSU9OKSB8IGdyZXAgLUUgJ15bMC05XSsoXC5bMC05XSspKyQkJwkJXAorCSAgICAgICB8fCB7IGVjaG8gImludmFsaWQgdmVyc2lvbiBzdHJpbmc6ICQoVkVSU0lPTikiIDE+JjI7IGV4aXQgMTt9O31cCisJICB8fCA6CisJJChBTV9WX2F0KSQoTUFLRSkgdmMtZGlmZi1jaGVjaworCSQoQU1fVl9hdCkkKE1BS0UpIG5ld3MtY2hlY2sKKwkkKEFNX1ZfYXQpJChNQUtFKSBkaXN0Y2hlY2sKKwkkKEFNX1ZfYXQpJChNQUtFKSBkaXN0CisJJChBTV9WX2F0KSQoTUFLRSkgJChyZWxlYXNlLXByZXAtaG9vaykgUkVMRUFTRV9UWVBFPSRACisJJChBTV9WX2F0KSQoTUFLRSkgLXMgZW1pdF91cGxvYWRfY29tbWFuZHMgUkVMRUFTRV9UWVBFPSRACisKK3JlbGVhc2U6CisJJChBTV9WX0dFTikkKE1BS0UpICQocmVsZWFzZS10eXBlKQorCisjIE92ZXJyaWRlIHRoaXMgaW4gY2ZnLm1rIGlmIHlvdSBmb2xsb3cgZGlmZmVyZW50IHByb2NlZHVyZXMuCityZWxlYXNlLXByZXAtaG9vayA/PSByZWxlYXNlLXByZXAKKworZ2xfbm90ZXdvcnRoeV9uZXdzXyA9ICogTm90ZXdvcnRoeSBjaGFuZ2VzIGluIHJlbGVhc2UgPy4/ICg/Pz8/LT8/LT8/KSBbP10KKy5QSE9OWTogcmVsZWFzZS1wcmVwCityZWxlYXNlLXByZXA6CisJJChBTV9WX0dFTikkKE1BS0UpIC0tbm8tcHJpbnQtZGlyZWN0b3J5IC1zIGFubm91bmNlbWVudCBcCisJICA+IH4vYW5ub3VuY2UtJChteV9kaXN0ZGlyKQorCSQoQU1fVl9hdClpZiB0ZXN0IC1kICQocmVsZWFzZV9hcmNoaXZlX2Rpcik7IHRoZW4JXAorCSAgbG4gJChyZWwtZmlsZXMpICQocmVsZWFzZV9hcmNoaXZlX2Rpcik7CQlcCisJICBjaG1vZCBhLXcgJChyZWwtZmlsZXMpOwkJCQlcCisJZmkKKwkkKEFNX1ZfYXQpZWNobyAkKFZFUlNJT04pID4gJChwcmV2X3ZlcnNpb25fZmlsZSkKKwkkKEFNX1ZfYXQpJChNQUtFKSB1cGRhdGUtTkVXUy1oYXNoCisJJChBTV9WX2F0KXBlcmwgLXBpCQkJCQkJXAorCSAgLWUgJyQkLiA9PSAzIGFuZCBwcmludCAiJChnbF9ub3Rld29ydGh5X25ld3NfKVxuXG5cbiInCVwKKwkgICQoc3JjZGlyKS9ORVdTCisJJChBTV9WX2F0KW1zZz0kJCgkKGVtaXQtY29tbWl0LWxvZykpIHx8IGV4aXQgMTsJCVwKKwljZCAkKHNyY2RpcikgJiYgJChWQykgY29tbWl0IC1tICIkJG1zZyIgLWEKKworIyBPdmVycmlkZSB0aGlzIHdpdGggZS5nLiwgLXMgJChzcmNkaXIpL3NvbWVfb3RoZXJfbmFtZS50ZXhpCisjIGlmIHRoZSBkZWZhdWx0ICQoUEFDS0FHRSktZGVyaXZlZCBuYW1lIGRvZXNuJ3QgYXBwbHkuCitnZW5kb2NzX29wdGlvbnNfID89CisKKy5QSE9OWTogd2ViLW1hbnVhbAord2ViLW1hbnVhbDoKKwkkKEFNX1ZfR0VOKXRlc3QgLXogIiQobWFudWFsX3RpdGxlKSIgXAorCSAgJiYgeyBlY2hvIGRlZmluZSBtYW51YWxfdGl0bGUgaW4gY2ZnLm1rIDE+JjI7IGV4aXQgMTsgfSB8fCA6CisJJChBTV9WX2F0KWNkICckKHNyY2RpcikvZG9jJzsgXAorCSAgJChTSEVMTCkgLi4vJChfYnVpbGQtYXV4KS9nZW5kb2NzLnNoICQoZ2VuZG9jc19vcHRpb25zXykgXAorCSAgICAgLW8gJyQoYWJzX2J1aWxkZGlyKS9kb2MvbWFudWFsJyBcCisJICAgICAtLWVtYWlsICQoUEFDS0FHRV9CVUdSRVBPUlQpICQoUEFDS0FHRSkgXAorCSAgICAiJChQQUNLQUdFX05BTUUpIC0gJChtYW51YWxfdGl0bGUpIgorCSQoQU1fVl9hdCllY2hvICIgKioqIFVwbG9hZCB0aGUgZG9jL21hbnVhbCBkaXJlY3RvcnkgdG8gd2ViLWN2cy4iCisKKy5QSE9OWTogd2ViLW1hbnVhbC11cGRhdGUKK3dlYi1tYW51YWwtdXBkYXRlOgorCSQoQU1fVl9HRU4pY2QgJChzcmNkaXIpIFwKKwkgICYmICQoX2J1aWxkLWF1eCkvZ251LXdlYi1kb2MtdXBkYXRlIC1DICQoYWJzX2J1aWxkZGlyKQorCisKKyMgQ29kZSBDb3ZlcmFnZQorCitpbml0LWNvdmVyYWdlOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNsZWFuCisJbGNvdiAtLWRpcmVjdG9yeSAuIC0temVyb2NvdW50ZXJzCisKK0NPVkVSQUdFX0NDT1BUUyA/PSAiLWcgLS1jb3ZlcmFnZSIKK0NPVkVSQUdFX09VVCA/PSBkb2MvY292ZXJhZ2UKKworYnVpbGQtY292ZXJhZ2U6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgQ0ZMQUdTPSQoQ09WRVJBR0VfQ0NPUFRTKSBDWFhGTEFHUz0kKENPVkVSQUdFX0NDT1BUUykKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBDRkxBR1M9JChDT1ZFUkFHRV9DQ09QVFMpIENYWEZMQUdTPSQoQ09WRVJBR0VfQ0NPUFRTKSBjaGVjaworCW1rZGlyIC1wICQoQ09WRVJBR0VfT1VUKQorCWxjb3YgLS1kaXJlY3RvcnkgLiAtLW91dHB1dC1maWxlICQoQ09WRVJBR0VfT1VUKS8kKFBBQ0tBR0UpLmluZm8gXAorCQktLWNhcHR1cmUKKworZ2VuLWNvdmVyYWdlOgorCWdlbmh0bWwgLS1vdXRwdXQtZGlyZWN0b3J5ICQoQ09WRVJBR0VfT1VUKSBcCisJCSQoQ09WRVJBR0VfT1VUKS8kKFBBQ0tBR0UpLmluZm8gXAorCQktLWhpZ2hsaWdodCAtLWZyYW1lcyAtLWxlZ2VuZCBcCisJCS0tdGl0bGUgIiQoUEFDS0FHRV9OQU1FKSIKKworY292ZXJhZ2U6IGluaXQtY292ZXJhZ2UgYnVpbGQtY292ZXJhZ2UgZ2VuLWNvdmVyYWdlCisKKyMgU29tZSBwcm9qZWN0cyBjYXJyeSBsb2NhbCBhZGp1c3RtZW50cyBmb3IgZ251bGliIG1vZHVsZXMgdmlhIHBhdGNoZXMgaW4KKyMgYSBnbnVsaWIgcGF0Y2ggZGlyZWN0b3J5IHdob3NlIGRlZmF1bHQgbmFtZSBpcyBnbC8gKGRlZmluZWQgaW4gYm9vdHN0cmFwCisjIHZpYSBsb2NhbF9nbF9kaXI9Z2wpLiAgVGhvc2UgcGF0Y2hlcyBiZWNvbWUgc3RhbGUgYXMgdGhlIG9yaWdpbmFscyBldm9sdmUKKyMgaW4gZ251bGliLiAgVXNlIHRoaXMgcnVsZSB0byByZWZyZXNoIGFueSBzdGFsZSBwYXRjaGVzLiAgSXQgYXBwbGllcyBlYWNoCisjIHBhdGNoIHRvIHRoZSBvcmlnaW5hbCBpbiAkKGdudWxpYl9kaXIpIGFuZCB1c2VzIHRoZSB0ZW1wb3JhcnkgcmVzdWx0IHRvCisjIGdlbmVyYXRlIGEgZnV6ei1mcmVlIC5kaWZmIGZpbGUuICBJZiB5b3UgY3VzdG9taXplIHRoZSBuYW1lIG9mIHlvdXIgbG9jYWwKKyMgZ251bGliIHBhdGNoIGRpcmVjdG9yeSB2aWEgYm9vdHN0cmFwLmNvbmYsIHRoaXMgcnVsZSBkZXRlY3RzIHRoYXQgbmFtZS4KKyMgUnVuIHRoaXMgZnJvbSBhIG5vbi1WUEFUSCAoaS5lLiwgc3JjZGlyKSBidWlsZCBkaXJlY3RvcnkuCisuUEhPTlk6IHJlZnJlc2gtZ251bGliLXBhdGNoZXMKK3JlZnJlc2gtZ251bGliLXBhdGNoZXM6CisJZ2w9Z2w7CQkJCQkJCQlcCisJaWYgdGVzdCAtZiBib290c3RyYXAuY29uZjsgdGhlbgkJCQkJXAorCSAgdD0kJChwZXJsIC1sbmUgJy9eXHMqbG9jYWxfZ2xfZGlyPShcUyspLyBhbmQgJCRkPSQkMTsnCVwKKwkgICAgICAgLWUgJ0VORHtkZWZpbmVkICQkZCBhbmQgcHJpbnQgJCRkfScgYm9vdHN0cmFwLmNvbmYpOwlcCisJICB0ZXN0IC1uICIkJHQiICYmIGdsPSQkdDsJCQkJCVwKKwlmaTsJCQkJCQkJCVwKKwlmb3IgZGlmZiBpbiAkJChjZCAkJGdsOyBnaXQgbHMtZmlsZXMgfCBncmVwICdcLmRpZmYkJCcpOyBkbwlcCisJICBiPSQkKHByaW50ZiAlcyAiJCRkaWZmInxzZWQgJ3MvXC5kaWZmJCQvLycpOwkJCVwKKwkgIFZFUlNJT05fQ09OVFJPTD1ub25lCQkJCQkJXAorCSAgICBwYXRjaCAiJChnbnVsaWJfZGlyKS8kJGIiICIkJGdsLyQkZGlmZiIgfHwgZXhpdCAxOwkJXAorCSAgKCBjZCAkKGdudWxpYl9kaXIpIHx8IGV4aXQgMTsJCQkJCVwKKwkgICAgZ2l0IGRpZmYgIiQkYiIgPiAiLi4vJCRnbC8kJGRpZmYiOwkJCQlcCisJICAgIGdpdCBjaGVja291dCAkJGIgKSB8fCBleGl0IDE7CQkJCVwKKwlkb25lCisKKyMgVXBkYXRlIGdldHRleHQgZmlsZXMuCitQQUNLQUdFID89ICQoc2hlbGwgYmFzZW5hbWUgJChQV0QpKQorUE9fRE9NQUlOID89ICQoUEFDS0FHRSkKK1BPVVJMID0gaHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvbGF0ZXN0LyQoUE9fRE9NQUlOKS8KK1BPRElSID89IHBvCityZWZyZXNoLXBvOgorCXJtIC1mICQoUE9ESVIpLyoucG8gJiYgXAorCWVjaG8gIiQoTUUpOiBnZXR0aW5nIHRyYW5zbGF0aW9ucyBpbnRvIHBvIChwbGVhc2UgaWdub3JlIHRoZSByb2JvdHMudHh0IEVSUk9SIDQwNCkuLi4iICYmIFwKKwl3Z2V0IC0tbm8tdmVyYm9zZSAtLWRpcmVjdG9yeS1wcmVmaXggJChQT0RJUikgLS1uby1kaXJlY3RvcmllcyAtLXJlY3Vyc2l2ZSAtLWxldmVsIDEgLS1hY2NlcHQgLnBvIC0tYWNjZXB0IC5wby4xICQoUE9VUkwpICYmIFwKKwllY2hvICdlbkBib2xkcXVvdCcgPiAkKFBPRElSKS9MSU5HVUFTICYmIFwKKwllY2hvICdlbkBxdW90JyA+PiAkKFBPRElSKS9MSU5HVUFTICYmIFwKKwlscyAkKFBPRElSKS8qLnBvIHwgc2VkICdzL1wucG8vLztzLCQoUE9ESVIpLywsJyB8IHNvcnQgPj4gJChQT0RJUikvTElOR1VBUworCisgIyBSdW5uaW5nIGluZGVudCBvbmNlIGlzIG5vdCBpZGVtcG90ZW50LCBidXQgcnVubmluZyBpdCB0d2ljZSBpcy4KK0lOREVOVF9TT1VSQ0VTID89ICQoQ19TT1VSQ0VTKQorLlBIT05ZOiBpbmRlbnQKK2luZGVudDoKKwlpbmRlbnQgJChJTkRFTlRfU09VUkNFUykKKwlpbmRlbnQgJChJTkRFTlRfU09VUkNFUykKKworIyBJZiB5b3Ugd2FudCB0byBzZXQgVVBEQVRFX0NPUFlSSUdIVF8qIGVudmlyb25tZW50IHZhcmlhYmxlcywKKyMgcHV0IHRoZSBhc3NpZ25tZW50cyBpbiB0aGlzIHZhcmlhYmxlLgordXBkYXRlLWNvcHlyaWdodC1lbnYgPz0KKworIyBSdW4gdGhpcyBydWxlIG9uY2UgcGVyIHllYXIgKHVzdWFsbHkgZWFybHkgaW4gSmFudWFyeSkKKyMgdG8gdXBkYXRlIGFsbCBGU0YgY29weXJpZ2h0IHllYXIgbGlzdHMgaW4geW91ciBwcm9qZWN0LgorIyBJZiB5b3UgaGF2ZSBhbiBhZGRpdGlvbmFsIHByb2plY3Qtc3BlY2lmaWMgcnVsZSwKKyMgYWRkIGl0IGluIGNmZy5tayBhbG9uZyB3aXRoIGEgbGluZSAndXBkYXRlLWNvcHlyaWdodDogcHJlcmVxJy4KKyMgQnkgZGVmYXVsdCwgZXhjbHVkZSBhbGwgdmFyaWFudHMgb2YgQ09QWUlORzsgeW91IGNhbiBhbHNvCisjIGFkZCBleGVtcHRpb25zIChzdWNoIGFzIENoYW5nZUxvZy4uKiBmb3Igcm90YXRlZCBjaGFuZ2UgbG9ncykKKyMgaW4gdGhlIGZpbGUgLngtdXBkYXRlLWNvcHlyaWdodC4KKy5QSE9OWTogdXBkYXRlLWNvcHlyaWdodAordXBkYXRlLWNvcHlyaWdodDoKKwkkKEFNX1ZfR0VOKWdyZXAgLWwgLXcgQ29weXJpZ2h0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICQkKGV4cG9ydCBWQ19MSVNUX0VYQ0VQVF9ERUZBVUxUPUNPUFlJTkcgJiYgJChWQ19MSVNUX0VYQ0VQVCkpIFwKKwkgIHwgJCh1cGRhdGUtY29weXJpZ2h0LWVudikgeGFyZ3MgJChzcmNkaXIpLyQoX2J1aWxkLWF1eCkvJEAKKworIyBUaGlzIHRpZ2h0X3Njb3BlIHRlc3QgaXMgc2tpcHBlZCB3aXRoIGEgd2FybmluZyBpZiAkKF9nbF9UU19oZWFkZXJzKSBpcyBub3QKKyMgb3ZlcnJpZGRlbiBhbmQgJChfZ2xfVFNfZGlyKS9NYWtlZmlsZS5hbSBkb2VzIG5vdCBtZW50aW9uIG5vaW5zdF9IRUFERVJTLgorCisjIE5PVEU6IHRvIG92ZXJyaWRlIGFueSBfZ2xfVFNfKiBkZWZhdWx0IHZhbHVlLCB5b3UgbXVzdAorIyBkZWZpbmUgdGhlIHZhcmlhYmxlKHMpIHVzaW5nICJleHBvcnQiIGluIGNmZy5tay4KK19nbF9UU19kaXIgPz0gc3JjCisKK0FMTF9SRUNVUlNJVkVfVEFSR0VUUyArPSBzY190aWdodF9zY29wZQorc2NfdGlnaHRfc2NvcGU6IHRpZ2h0LXNjb3BlLm1rCisJQGZhaWw9MDsJCQkJCQkJXAorCWlmICEgZ3JlcCAnXiAqZXhwb3J0IF9nbF9UU19oZWFkZXJzICo9JyAkKHNyY2RpcikvY2ZnLm1rCVwKKwkJPiAvZGV2L251bGwJCQkJCQlcCisJICAgJiYgISBncmVwIC13IG5vaW5zdF9IRUFERVJTICQoc3JjZGlyKS8kKF9nbF9UU19kaXIpL01ha2VmaWxlLmFtIFwKKwkJPiAvZGV2L251bGwgMj4mMTsgdGhlbgkJCQkJXAorCSAgICBlY2hvICckKE1FKTogc2tpcHBpbmcgJEAnOwkJCQkJXAorCWVsc2UJCQkJCQkJCVwKKwkgICAgJChNQUtFKSAtcyAtQyAkKF9nbF9UU19kaXIpCQkJCQlcCisJCS1mIE1ha2VmaWxlCQkJCQkJXAorCQktZiAkKGFic190b3Bfc3JjZGlyKS9jZmcubWsJCQkJXAorCQktZiAkKGFic190b3BfYnVpbGRkaXIpLyQ8CQkJCVwKKwkgICAgICBfZ2xfdGlnaHRfc2NvcGUJCQkJCQlcCisJCXx8IGZhaWw9MTsJCQkJCQlcCisJZmk7CQkJCQkJCQlcCisJcm0gLWYgJDw7CQkJCQkJCVwKKwlleGl0ICQkZmFpbAorCit0aWdodC1zY29wZS5tazogJChNRSkKKwlAcm0gLWYgJEAgJEAtdAorCUBwZXJsIC1uZSAnL14jIFRTLXN0YXJ0Ly4uLi9eIyBUUy1lbmQvIGFuZCBwcmludCcgJChzcmNkaXIpLyQoTUUpID4gJEAtdAorCUBjaG1vZCBhPXIgJEAtdCAmJiBtdiAkQC10ICRACisKK2lmZXEgKGEsYikKKyMgVFMtc3RhcnQKKworIyBNb3N0IGZ1bmN0aW9ucyBzaG91bGQgaGF2ZSBzdGF0aWMgc2NvcGUuCisjIEFueSB0aGF0IGRvbid0IG11c3QgYmUgbWFya2VkIHdpdGggJ2V4dGVybicsIGJ1dCAnbWFpbicKKyMgYW5kICd1c2FnZScgYXJlIGV4Y2VwdGlvbnM6IHRoZXkncmUgYWx3YXlzIGV4dGVybiwgYnV0CisjIGRvIG5vdCBuZWVkIHRvIGJlIG1hcmtlZC4gIFN5bWJvbHMgbWF0Y2hpbmcgJ19fLionIGFyZQorIyByZXNlcnZlZCBieSB0aGUgY29tcGlsZXIsIHNvIGFyZSBhdXRvbWF0aWNhbGx5IGV4Y2x1ZGVkIGJlbG93LgorX2dsX1RTX3VubWFya2VkX2V4dGVybl9mdW5jdGlvbnMgPz0gbWFpbiB1c2FnZQorX2dsX1RTX2Z1bmN0aW9uX21hdGNoID89IC9eKD86JChfZ2xfVFNfZXh0ZXJuKSkgKy4qPyhcUyspICpcKC8KKworIyBJZiB5b3VyIHByb2plY3QgdXNlcyBhIG1hY3JvIGxpa2UgIlhURVJOIiwgdGhlbiBwdXQKKyMgdGhlIGZvbGxvd2luZyBpbiBjZmcubWsgdG8gb3ZlcnJpZGUgdGhpcyBkZWZhdWx0OgorIyBleHBvcnQgX2dsX1RTX2V4dGVybiA9IGV4dGVybnxYVEVSTgorX2dsX1RTX2V4dGVybiA/PSBleHRlcm4KKworIyBUaGUgc2Vjb25kIG5tfGdyZXAgY2hlY2tzIGZvciBmaWxlLXNjb3BlIHZhcmlhYmxlcyB3aXRoICdleHRlcm4nIHNjb3BlLgorIyBXaXRob3V0IGdudWxpYidzIHByb2duYW1lIG1vZHVsZSwgeW91IG1pZ2h0IHB1dCBwcm9ncmFtX25hbWUgaGVyZS4KKyMgU3ltYm9scyBtYXRjaGluZyAnX18uKicgYXJlIHJlc2VydmVkIGJ5IHRoZSBjb21waWxlciwKKyMgc28gYXJlIGF1dG9tYXRpY2FsbHkgZXhjbHVkZWQgYmVsb3cuCitfZ2xfVFNfdW5tYXJrZWRfZXh0ZXJuX3ZhcnMgPz0KKworIyBOT1RFOiB0aGUgX21hdGNoIHZhcmlhYmxlcyBhcmUgcGVybCBleHByZXNzaW9ucyAtLSBub3QgbWVyZSByZWd1bGFyCisjIGV4cHJlc3Npb25zIC0tIHNvIHRoYXQgeW91IGNhbiBleHRlbmQgdGhlbSB0byBtYXRjaCBvdGhlciBwYXR0ZXJucworIyBhbmQgZWFzaWx5IGV4dHJhY3QgbWF0Y2hlZCB2YXJpYWJsZSBuYW1lcy4KKyMgRm9yIGV4YW1wbGUsIGlmIHlvdXIgcHJvamVjdCBkZWNsYXJlcyBzb21lIGdsb2JhbCB2YXJpYWJsZXMgdmlhCisjIGEgbWFjcm8gbGlrZSB0aGlzOiBHTE9CQUwodHlwZSwgdmFyX25hbWUsIGluaXRpYWxpemVyKSwgdGhlbiB5b3UKKyMgY2FuIG92ZXJyaWRlIHRoaXMgZGVmaW5pdGlvbiB0byBhdXRvbWF0aWNhbGx5IGV4dHJhY3QgdGhvc2UgbmFtZXM6CisjIGV4cG9ydCBfZ2xfVFNfdmFyX21hdGNoID0gXAorIyAgIC9eKD86JChfZ2xfVFNfZXh0ZXJuKSkgLio/XCoqKFx3KykoXFsuKj9cXSk/Oy8gfHwgL1xiR0xPQkFMXCguKj8sXHMqKC4qPyksLworX2dsX1RTX3Zhcl9tYXRjaCA/PSAvXig/OiQoX2dsX1RTX2V4dGVybikpIC4qPyhcdyspKFxbLio/XF0pPzsvCisKKyMgVGhlIG5hbWVzIG9mIG9iamVjdCBmaWxlcyBpbiAob3IgcmVsYXRpdmUgdG8pICQoX2dsX1RTX2RpcikuCitfZ2xfVFNfb2JqX2ZpbGVzID89ICouJChPQkpFWFQpCisKKyMgRmlsZXMgaW4gd2hpY2ggdG8gc2VhcmNoIGZvciB0aGUgb25lLWxpbmUgc3R5bGUgZXh0ZXJuIGRlY2xhcmF0aW9ucy4KKyMgJChfZ2xfVFNfZGlyKS1yZWxhdGl2ZS4KK19nbF9UU19oZWFkZXJzID89ICQobm9pbnN0X0hFQURFUlMpCitfZ2xfVFNfb3RoZXJfaGVhZGVycyA/PSAqLmgKKworLlBIT05ZOiBfZ2xfdGlnaHRfc2NvcGUKK19nbF90aWdodF9zY29wZTogJChiaW5fUFJPR1JBTVMpCisJdD1leGNlcHRpb25zLSQkJCQ7CQkJCQkJXAorCXRyYXAgJ3M9JCQ/OyBybSAtZiAkJHQ7IGV4aXQgJCRzJyAwOwkJCQlcCisJZm9yIHNpZyBpbiAxIDIgMyAxMyAxNTsgZG8JCQkJCVwKKwkgIGV2YWwgInRyYXAgJ3Y9YGV4cHIgJCRzaWcgKyAxMjhgOyAoZXhpdCAkJHYpOyBleGl0ICQkdicgJCRzaWciOyBcCisJZG9uZTsJCQkJCQkJCVwKKwlzcmM9YGZvciBmIGluICQoU09VUkNFUyk7IGRvCQkJCQlcCisJICAgICAgIHRlc3QgLWYgJCRmICYmIGQ9IHx8IGQ9JChzcmNkaXIpLzsgZWNobyAkJGQkJGY7IGRvbmVgOwlcCisJaGRyPWBmb3IgZiBpbiAkKF9nbF9UU19oZWFkZXJzKTsgZG8JCQkJXAorCSAgICAgICB0ZXN0IC1mICQkZiAmJiBkPSB8fCBkPSQoc3JjZGlyKS87IGVjaG8gJCRkJCRmOyBkb25lYDsJXAorCSggcHJpbnRmICdeJXMkJFxuJyAnX18uKicgJChfZ2xfVFNfdW5tYXJrZWRfZXh0ZXJuX2Z1bmN0aW9ucyk7CVwKKwkgIGdyZXAgLWggLUExICdeZXh0ZXJuIC4qW147XSQkJyAkJHNyYwkJCQlcCisJICAgIHwgZ3JlcCAtdkUgJ14oZXh0ZXJuIHwtLSknIHwgc2VkICdzLyAuKi8vJzsJCQlcCisJICBwZXJsIC1sbmUJCQkJCQkJXAorCSAgICAgJyQoX2dsX1RTX2Z1bmN0aW9uX21hdGNoKSBhbmQgcHJpbnQgIl4kJDFcJCQiJyAkJGhkcjsJXAorCSkgfCBzb3J0IC11ID4gJCR0OwkJCQkJCVwKKwlubSAtZSAkKF9nbF9UU19vYmpfZmlsZXMpIHwgc2VkIC1uICdzLy4qIFQgLy9wJ3xncmVwIC1FdiAtZiAkJHQJXAorCSAgJiYgeyBlY2hvIHRoZSBhYm92ZSBmdW5jdGlvbnMgc2hvdWxkIGhhdmUgc3RhdGljIHNjb3BlID4mMjsJXAorCSAgICAgICBleGl0IDE7IH0gfHwgOiA7CQkJCQkJXAorCSggcHJpbnRmICdeJXMkJFxuJyAnX18uKicgJChfZ2xfVFNfdW5tYXJrZWRfZXh0ZXJuX3ZhcnMpOwlcCisJICBwZXJsIC1sbmUgJyQoX2dsX1RTX3Zhcl9tYXRjaCkgYW5kIHByaW50ICJeJCQxXCQkIicJCVwKKwkJJCRoZHIgJChfZ2xfVFNfb3RoZXJfaGVhZGVycykJCQkJXAorCSkgfCBzb3J0IC11ID4gJCR0OwkJCQkJCVwKKwlubSAtZSAkKF9nbF9UU19vYmpfZmlsZXMpIHwgc2VkIC1uICdzLy4qIFtCQ0RHUlNdIC8vcCcJCVwKKyAgICAgICAgICAgIHwgc29ydCAtdSB8IGdyZXAgLUV2IC1mICQkdAkJCQkJXAorCSAgJiYgeyBlY2hvIHRoZSBhYm92ZSB2YXJpYWJsZXMgc2hvdWxkIGhhdmUgc3RhdGljIHNjb3BlID4mMjsJXAorCSAgICAgICBleGl0IDE7IH0gfHwgOgorIyBUUy1lbmQKK2VuZGlmCmRpZmYgLS1naXQgYS9wby9MSU5HVUFTIGIvcG8vTElOR1VBUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2E5ZDYyCi0tLSAvZGV2L251bGwKKysrIGIvcG8vTElOR1VBUwpAQCAtMCwwICsxLDI4IEBACitkYQorZGUKK2VsCitlbworZXMKK2V0CitmaQorZnIKK2dhCitocgoraWQKK2l0CitqYQorbXMKK25iCitubAorcGwKK3B0CitwdF9CUgorcm8KK3J1Citzcgorc3YKK3RyCit1awordmkKK3poX0NOCit6aF9UVwpkaWZmIC0tZ2l0IGEvcG8vTWFrZWZpbGUuaW4uaW4gYi9wby9NYWtlZmlsZS5pbi5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTcxOTgzCi0tLSAvZGV2L251bGwKKysrIGIvcG8vTWFrZWZpbGUuaW4uaW4KQEAgLTAsMCArMSw0NDYgQEAKKyMgTWFrZWZpbGUgZm9yIFBPIGRpcmVjdG9yeSBpbiBhbnkgcGFja2FnZSB1c2luZyBHTlUgZ2V0dGV4dC4KKyMgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcsIDIwMDAtMjAwNywgMjAwOS0yMDEwIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PgorIworIyBUaGlzIGZpbGUgY2FuIGJlIGNvcGllZCBhbmQgdXNlZCBmcmVlbHkgd2l0aG91dCByZXN0cmljdGlvbnMuICBJdCBjYW4KKyMgYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKKyMgZnVuY3Rpb25hbGl0eS4KKyMgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgR05VIGdldHRleHQgaXMgY292ZXJlZCBieSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIGlzICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgorIworIyBPcmlnaW46IGdldHRleHQtMC4xOAorR0VUVEVYVF9NQUNST19WRVJTSU9OID0gMC4xOAorCitQQUNLQUdFID0gQFBBQ0tBR0VACitWRVJTSU9OID0gQFZFUlNJT05ACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKKworU0hFTEwgPSAvYmluL3NoCitAU0VUX01BS0VACisKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACisKK3ByZWZpeCA9IEBwcmVmaXhACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2dldHRleHRzcmNkaXIgPSAkKGRhdGFkaXIpL2dldHRleHQvcG8KKworSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKKworIyBXZSB1c2UgJChta2Rpcl9wKS4KKyMgSW4gYXV0b21ha2UgPD0gMS45LngsICQobWtkaXJfcCkgaXMgZGVmaW5lZCBlaXRoZXIgYXMgIm1rZGlyIC1wIC0tIiBvciBhcworIyAiJChta2luc3RhbGxkaXJzKSIgb3IgYXMgIiQoaW5zdGFsbF9zaCkgLWQiLiBGb3IgdGhlc2UgYXV0b21ha2UgdmVyc2lvbnMsCisjIEBpbnN0YWxsX3NoQCBkb2VzIG5vdCBzdGFydCB3aXRoICQoU0hFTEwpLCBzbyB3ZSBhZGQgaXQuCisjIEluIGF1dG9tYWtlID49IDEuMTAsIEBta2Rpcl9wQCBpcyBkZXJpdmVkIGZyb20gJHtNS0RJUl9QfSwgd2hpY2ggaXMgZGVmaW5lZAorIyBlaXRoZXIgYXMgIi9wYXRoL3RvL21rZGlyIC1wIiBvciAiLi4uL2luc3RhbGwtc2ggLWMgLWQiLiBGb3IgdGhlc2UgYXV0b21ha2UKKyMgdmVyc2lvbnMsICQobWtpbnN0YWxsZGlycykgYW5kICQoaW5zdGFsbF9zaCkgYXJlIHVudXNlZC4KK21raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSBAaW5zdGFsbF9zaEAgLWQKK2luc3RhbGxfc2ggPSAkKFNIRUxMKSBAaW5zdGFsbF9zaEAKK01LRElSX1AgPSBATUtESVJfUEAKK21rZGlyX3AgPSBAbWtkaXJfcEAKKworR01TR0ZNVF8gPSBAR01TR0ZNVEAKK0dNU0dGTVRfbm8gPSBAR01TR0ZNVEAKK0dNU0dGTVRfeWVzID0gQEdNU0dGTVRfMDE1QAorR01TR0ZNVCA9ICQoR01TR0ZNVF8kKFVTRV9NU0dDVFhUKSkKK01TR0ZNVF8gPSBATVNHRk1UQAorTVNHRk1UX25vID0gQE1TR0ZNVEAKK01TR0ZNVF95ZXMgPSBATVNHRk1UXzAxNUAKK01TR0ZNVCA9ICQoTVNHRk1UXyQoVVNFX01TR0NUWFQpKQorWEdFVFRFWFRfID0gQFhHRVRURVhUQAorWEdFVFRFWFRfbm8gPSBAWEdFVFRFWFRACitYR0VUVEVYVF95ZXMgPSBAWEdFVFRFWFRfMDE1QAorWEdFVFRFWFQgPSAkKFhHRVRURVhUXyQoVVNFX01TR0NUWFQpKQorTVNHTUVSR0UgPSBtc2dtZXJnZQorTVNHTUVSR0VfVVBEQVRFID0gQE1TR01FUkdFQCAtLXVwZGF0ZQorTVNHSU5JVCA9IG1zZ2luaXQKK01TR0NPTlYgPSBtc2djb252CitNU0dGSUxURVIgPSBtc2dmaWx0ZXIKKworUE9GSUxFUyA9IEBQT0ZJTEVTQAorR01PRklMRVMgPSBAR01PRklMRVNACitVUERBVEVQT0ZJTEVTID0gQFVQREFURVBPRklMRVNACitEVU1NWVBPRklMRVMgPSBARFVNTVlQT0ZJTEVTQAorRElTVEZJTEVTLmNvbW1vbiA9IE1ha2VmaWxlLmluLmluIHJlbW92ZS1wb3RjZGF0ZS5zaW4gXAorJChESVNURklMRVMuY29tbW9uLmV4dHJhMSkgJChESVNURklMRVMuY29tbW9uLmV4dHJhMikgJChESVNURklMRVMuY29tbW9uLmV4dHJhMykKK0RJU1RGSUxFUyA9ICQoRElTVEZJTEVTLmNvbW1vbikgTWFrZXZhcnMgUE9URklMRVMuaW4gXAorJChQT0ZJTEVTKSAkKEdNT0ZJTEVTKSBcCiskKERJU1RGSUxFUy5leHRyYTEpICQoRElTVEZJTEVTLmV4dHJhMikgJChESVNURklMRVMuZXh0cmEzKQorCitQT1RGSUxFUyA9IFwKKworQ0FUQUxPR1MgPSBAQ0FUQUxPR1NACisKKyMgTWFrZXZhcnMgZ2V0cyBpbnNlcnRlZCBoZXJlLiAoRG9uJ3QgcmVtb3ZlIHRoaXMgbGluZSEpCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLnBvIC5nbW8gLm1vIC5zZWQgLnNpbiAubm9wIC5wby1jcmVhdGUgLnBvLXVwZGF0ZQorCisucG8ubW86CisJQGVjaG8gIiQoTVNHRk1UKSAtYyAtbyAkQCAkPCI7IFwKKwkkKE1TR0ZNVCkgLWMgLW8gdC0kQCAkPCAmJiBtdiB0LSRAICRACisKKy5wby5nbW86CisJQGxhbmc9YGVjaG8gJCogfCBzZWQgLWUgJ3MsLiovLCwnYDsgXAorCXRlc3QgIiQoc3JjZGlyKSIgPSAuICYmIGNkY21kPSIiIHx8IGNkY21kPSJjZCAkKHNyY2RpcikgJiYgIjsgXAorCWVjaG8gIiQke2NkY21kfXJtIC1mICQke2xhbmd9LmdtbyAmJiAkKEdNU0dGTVQpIC1jIC0tc3RhdGlzdGljcyAtLXZlcmJvc2UgLW8gJCR7bGFuZ30uZ21vICQke2xhbmd9LnBvIjsgXAorCWNkICQoc3JjZGlyKSAmJiBybSAtZiAkJHtsYW5nfS5nbW8gJiYgJChHTVNHRk1UKSAtYyAtLXN0YXRpc3RpY3MgLS12ZXJib3NlIC1vIHQtJCR7bGFuZ30uZ21vICQke2xhbmd9LnBvICYmIG12IHQtJCR7bGFuZ30uZ21vICQke2xhbmd9LmdtbworCisuc2luLnNlZDoKKwlzZWQgLWUgJy9eIy9kJyAkPCA+IHQtJEAKKwltdiB0LSRAICRACisKKworYWxsOiBhbGwtQFVTRV9OTFNACisKK2FsbC15ZXM6IHN0YW1wLXBvCithbGwtbm86CisKKyMgRW5zdXJlIHRoYXQgdGhlIGdldHRleHQgbWFjcm9zIGFuZCB0aGlzIE1ha2VmaWxlLmluLmluIGFyZSBpbiBzeW5jLgorQ0hFQ0tfTUFDUk9fVkVSU0lPTiA9IFwKKwl0ZXN0ICIkKEdFVFRFWFRfTUFDUk9fVkVSU0lPTikiID0gIkBHRVRURVhUX01BQ1JPX1ZFUlNJT05AIiBcCisJICB8fCB7IGVjaG8gIioqKiBlcnJvcjogZ2V0dGV4dCBpbmZyYXN0cnVjdHVyZSBtaXNtYXRjaDogdXNpbmcgYSBNYWtlZmlsZS5pbi5pbiBmcm9tIGdldHRleHQgdmVyc2lvbiAkKEdFVFRFWFRfTUFDUk9fVkVSU0lPTikgYnV0IHRoZSBhdXRvY29uZiBtYWNyb3MgYXJlIGZyb20gZ2V0dGV4dCB2ZXJzaW9uIEBHRVRURVhUX01BQ1JPX1ZFUlNJT05AIiAxPiYyOyBcCisJICAgICAgIGV4aXQgMTsgXAorCSAgICAgfQorCisjICQoc3JjZGlyKS8kKERPTUFJTikucG90IGlzIG9ubHkgY3JlYXRlZCB3aGVuIG5lZWRlZC4gV2hlbiB4Z2V0dGV4dCBmaW5kcyBubworIyBpbnRlcm5hdGlvbmFsaXplZCBtZXNzYWdlcywgbm8gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgaXMgY3JlYXRlZCAoYmVjYXVzZQorIyB3ZSBkb24ndCB3YW50IHRvIGJvdGhlciB0cmFuc2xhdG9ycyB3aXRoIGVtcHR5IFBPVCBmaWxlcykuIFdlIGFzc3VtZSB0aGF0CisjIExJTkdVQVMgaXMgZW1wdHkgaW4gdGhpcyBjYXNlLCBpLmUuICQoUE9GSUxFUykgYW5kICQoR01PRklMRVMpIGFyZSBlbXB0eS4KKyMgSW4gdGhpcyBjYXNlLCBzdGFtcC1wbyBpcyBhIG5vcCAoaS5lLiBhIHBob255IHRhcmdldCkuCisKKyMgc3RhbXAtcG8gaXMgYSB0aW1lc3RhbXAgZGVub3RpbmcgdGhlIGxhc3QgdGltZSBhdCB3aGljaCB0aGUgQ0FUQUxPR1MgaGF2ZQorIyBiZWVuIGxvb3NlbHkgdXBkYXRlZC4gSXRzIHB1cnBvc2UgaXMgdGhhdCB3aGVuIGEgZGV2ZWxvcGVyIG9yIHRyYW5zbGF0b3IKKyMgY2hlY2tzIG91dCB0aGUgcGFja2FnZSB2aWEgQ1ZTLCBhbmQgdGhlICQoRE9NQUlOKS5wb3QgZmlsZSBpcyBub3QgaW4gQ1ZTLAorIyAibWFrZSIgd2lsbCB1cGRhdGUgdGhlICQoRE9NQUlOKS5wb3QgYW5kIHRoZSAkKENBVEFMT0dTKSwgYnV0IHN1YnNlcXVlbnQKKyMgaW52b2NhdGlvbnMgb2YgIm1ha2UiIHdpbGwgZG8gbm90aGluZy4gVGhpcyB0aW1lc3RhbXAgd291bGQgbm90IGJlIG5lY2Vzc2FyeQorIyBpZiB1cGRhdGluZyB0aGUgJChDQVRBTE9HUykgd291bGQgYWx3YXlzIHRvdWNoIHRoZW07IGhvd2V2ZXIsIHRoZSBydWxlIGZvcgorIyAkKFBPRklMRVMpIGhhcyBiZWVuIGRlc2lnbmVkIHRvIG5vdCB0b3VjaCBmaWxlcyB0aGF0IGRvbid0IG5lZWQgdG8gYmUKKyMgY2hhbmdlZC4KK3N0YW1wLXBvOiAkKHNyY2RpcikvJChET01BSU4pLnBvdAorCUAkKENIRUNLX01BQ1JPX1ZFUlNJT04pCisJdGVzdCAhIC1mICQoc3JjZGlyKS8kKERPTUFJTikucG90IHx8IFwKKwkgIHRlc3QgLXogIiQoR01PRklMRVMpIiB8fCAkKE1BS0UpICQoR01PRklMRVMpCisJQHRlc3QgISAtZiAkKHNyY2RpcikvJChET01BSU4pLnBvdCB8fCB7IFwKKwkgIGVjaG8gInRvdWNoIHN0YW1wLXBvIiAmJiBcCisJICBlY2hvIHRpbWVzdGFtcCA+IHN0YW1wLXBvVCAmJiBcCisJICBtdiBzdGFtcC1wb1Qgc3RhbXAtcG87IFwKKwl9CisKKyMgTm90ZTogVGFyZ2V0ICdhbGwnIG11c3Qgbm90IGRlcGVuZCBvbiB0YXJnZXQgJyQoRE9NQUlOKS5wb3QtdXBkYXRlJywKKyMgb3RoZXJ3aXNlIHBhY2thZ2VzIGxpa2UgR0NDIGNhbiBub3QgYmUgYnVpbHQgaWYgb25seSBwYXJ0cyBvZiB0aGUgc291cmNlCisjIGhhdmUgYmVlbiBkb3dubG9hZGVkLgorCisjIFRoaXMgdGFyZ2V0IHJlYnVpbGRzICQoRE9NQUlOKS5wb3Q7IGl0IGlzIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb24uCisjIE5vdGUgdGhhdCAkKERPTUFJTikucG90IGlzIG5vdCB0b3VjaGVkIGlmIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBjaGFuZ2VkLgorJChET01BSU4pLnBvdC11cGRhdGU6ICQoUE9URklMRVMpICQoc3JjZGlyKS9QT1RGSUxFUy5pbiByZW1vdmUtcG90Y2RhdGUuc2VkCisJaWYgTENfQUxMPUMgZ3JlcCAnR05VIEBQQUNLQUdFQCcgJCh0b3Bfc3JjZGlyKS8qIDI+L2Rldi9udWxsIHwgZ3JlcCAtdiAnbGlidG9vbDonID4vZGV2L251bGw7IHRoZW4gXAorCSAgcGFja2FnZV9nbnU9J0dOVSAnOyBcCisJZWxzZSBcCisJICBwYWNrYWdlX2dudT0nJzsgXAorCWZpOyBcCisJaWYgdGVzdCAtbiAnJChNU0dJRF9CVUdTX0FERFJFU1MpJyB8fCB0ZXN0ICckKFBBQ0tBR0VfQlVHUkVQT1JUKScgPSAnQCdQQUNLQUdFX0JVR1JFUE9SVCdAJzsgdGhlbiBcCisJICBtc2dpZF9idWdzX2FkZHJlc3M9JyQoTVNHSURfQlVHU19BRERSRVNTKSc7IFwKKwllbHNlIFwKKwkgIG1zZ2lkX2J1Z3NfYWRkcmVzcz0nJChQQUNLQUdFX0JVR1JFUE9SVCknOyBcCisJZmk7IFwKKwljYXNlIGAkKFhHRVRURVhUKSAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluIFwKKwkgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTVdIHwgMC4xWzAtNV0uKiB8IDAuMTYgfCAwLjE2LlswLTFdKikgXAorCSAgICAkKFhHRVRURVhUKSAtLWRlZmF1bHQtZG9tYWluPSQoRE9NQUlOKSAtLWRpcmVjdG9yeT0kKHRvcF9zcmNkaXIpIFwKKwkgICAgICAtLWFkZC1jb21tZW50cz1UUkFOU0xBVE9SUzogJChYR0VUVEVYVF9PUFRJT05TKSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AgXAorCSAgICAgIC0tZmlsZXMtZnJvbT0kKHNyY2RpcikvUE9URklMRVMuaW4gXAorCSAgICAgIC0tY29weXJpZ2h0LWhvbGRlcj0nJChDT1BZUklHSFRfSE9MREVSKScgXAorCSAgICAgIC0tbXNnaWQtYnVncy1hZGRyZXNzPSIkJG1zZ2lkX2J1Z3NfYWRkcmVzcyIgXAorCSAgICA7OyBcCisJICAqKSBcCisJICAgICQoWEdFVFRFWFQpIC0tZGVmYXVsdC1kb21haW49JChET01BSU4pIC0tZGlyZWN0b3J5PSQodG9wX3NyY2RpcikgXAorCSAgICAgIC0tYWRkLWNvbW1lbnRzPVRSQU5TTEFUT1JTOiAkKFhHRVRURVhUX09QVElPTlMpIEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQCBcCisJICAgICAgLS1maWxlcy1mcm9tPSQoc3JjZGlyKS9QT1RGSUxFUy5pbiBcCisJICAgICAgLS1jb3B5cmlnaHQtaG9sZGVyPSckKENPUFlSSUdIVF9IT0xERVIpJyBcCisJICAgICAgLS1wYWNrYWdlLW5hbWU9IiQke3BhY2thZ2VfZ251fUBQQUNLQUdFQCIgXAorCSAgICAgIC0tcGFja2FnZS12ZXJzaW9uPSdAVkVSU0lPTkAnIFwKKwkgICAgICAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0iJCRtc2dpZF9idWdzX2FkZHJlc3MiIFwKKwkgICAgOzsgXAorCWVzYWMKKwl0ZXN0ICEgLWYgJChET01BSU4pLnBvIHx8IHsgXAorCSAgaWYgdGVzdCAtZiAkKHNyY2RpcikvJChET01BSU4pLnBvdDsgdGhlbiBcCisJICAgIHNlZCAtZiByZW1vdmUtcG90Y2RhdGUuc2VkIDwgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgPiAkKERPTUFJTikuMXBvICYmIFwKKwkgICAgc2VkIC1mIHJlbW92ZS1wb3RjZGF0ZS5zZWQgPCAkKERPTUFJTikucG8gPiAkKERPTUFJTikuMnBvICYmIFwKKwkgICAgaWYgY21wICQoRE9NQUlOKS4xcG8gJChET01BSU4pLjJwbyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgICAgIHJtIC1mICQoRE9NQUlOKS4xcG8gJChET01BSU4pLjJwbyAkKERPTUFJTikucG87IFwKKwkgICAgZWxzZSBcCisJICAgICAgcm0gLWYgJChET01BSU4pLjFwbyAkKERPTUFJTikuMnBvICQoc3JjZGlyKS8kKERPTUFJTikucG90ICYmIFwKKwkgICAgICBtdiAkKERPTUFJTikucG8gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IFwKKwkgICAgZmk7IFwKKwkgIGVsc2UgXAorCSAgICBtdiAkKERPTUFJTikucG8gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IFwKKwkgIGZpOyBcCisJfQorCisjIFRoaXMgcnVsZSBoYXMgbm8gZGVwZW5kZW5jaWVzOiB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSAkKERPTUFJTikucG90IGF0CisjIGV2ZXJ5ICJtYWtlIiBpbnZvY2F0aW9uLCBvbmx5IGNyZWF0ZSBpdCB3aGVuIGl0IGlzIG1pc3NpbmcuCisjIE9ubHkgIm1ha2UgJChET01BSU4pLnBvdC11cGRhdGUiIG9yICJtYWtlIGRpc3QiIHdpbGwgZm9yY2UgYW4gdXBkYXRlLgorJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q6CisJJChNQUtFKSAkKERPTUFJTikucG90LXVwZGF0ZQorCisjIFRoaXMgdGFyZ2V0IHJlYnVpbGRzIGEgUE8gZmlsZSBpZiAkKERPTUFJTikucG90IGhhcyBjaGFuZ2VkLgorIyBOb3RlIHRoYXQgYSBQTyBmaWxlIGlzIG5vdCB0b3VjaGVkIGlmIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBjaGFuZ2VkLgorJChQT0ZJTEVTKTogJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QKKwlAbGFuZz1gZWNobyAkQCB8IHNlZCAtZSAncywuKi8sLCcgLWUgJ3MvXC5wbyQkLy8nYDsgXAorCWlmIHRlc3QgLWYgIiQoc3JjZGlyKS8kJHtsYW5nfS5wbyI7IHRoZW4gXAorCSAgdGVzdCAiJChzcmNkaXIpIiA9IC4gJiYgY2RjbWQ9IiIgfHwgY2RjbWQ9ImNkICQoc3JjZGlyKSAmJiAiOyBcCisJICBlY2hvICIkJHtjZGNtZH0kKE1TR01FUkdFX1VQREFURSkgJChNU0dNRVJHRV9PUFRJT05TKSAtLWxhbmc9JCR7bGFuZ30gJCR7bGFuZ30ucG8gJChET01BSU4pLnBvdCI7IFwKKwkgIGNkICQoc3JjZGlyKSBcCisJICAgICYmIHsgY2FzZSBgJChNU0dNRVJHRV9VUERBVEUpIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4gXAorCSAgICAgICAgICAgJycgfCAwLlswLTldIHwgMC5bMC05XS4qIHwgMC4xWzAtN10gfCAwLjFbMC03XS4qKSBcCisJICAgICAgICAgICAgICQoTVNHTUVSR0VfVVBEQVRFKSAkKE1TR01FUkdFX09QVElPTlMpICQke2xhbmd9LnBvICQoRE9NQUlOKS5wb3Q7OyBcCisJICAgICAgICAgICAqKSBcCisJICAgICAgICAgICAgICQoTVNHTUVSR0VfVVBEQVRFKSAkKE1TR01FUkdFX09QVElPTlMpIC0tbGFuZz0kJHtsYW5nfSAkJHtsYW5nfS5wbyAkKERPTUFJTikucG90OzsgXAorCSAgICAgICAgIGVzYWM7IFwKKwkgICAgICAgfTsgXAorCWVsc2UgXAorCSAgJChNQUtFKSAkJHtsYW5nfS5wby1jcmVhdGU7IFwKKwlmaQorCisKK2luc3RhbGw6IGluc3RhbGwtZXhlYyBpbnN0YWxsLWRhdGEKK2luc3RhbGwtZXhlYzoKK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLUBVU0VfTkxTQAorCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKwkgICQobWtkaXJfcCkgJChERVNURElSKSQoZ2V0dGV4dHNyY2Rpcik7IFwKKwkgIGZvciBmaWxlIGluICQoRElTVEZJTEVTLmNvbW1vbikgTWFrZXZhcnMudGVtcGxhdGU7IGRvIFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGZpbGUgXAorCQkJICAgICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAorCSAgZG9uZTsgXAorCSAgZm9yIGZpbGUgaW4gTWFrZXZhcnM7IGRvIFwKKwkgICAgcm0gLWYgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisJICBkb25lOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCitpbnN0YWxsLWRhdGEtbm86IGFsbAoraW5zdGFsbC1kYXRhLXllczogYWxsCisJQGNhdGFsb2dzPSckKENBVEFMT0dTKSc7IFwKKwlmb3IgY2F0IGluICQkY2F0YWxvZ3M7IGRvIFwKKwkgIGNhdD1gYmFzZW5hbWUgJCRjYXRgOyBcCisJICBsYW5nPWBlY2hvICQkY2F0IHwgc2VkIC1lICdzL1wuZ21vJCQvLydgOyBcCisJICBkaXI9JChsb2NhbGVkaXIpLyQkbGFuZy9MQ19NRVNTQUdFUzsgXAorCSAgJChta2Rpcl9wKSAkKERFU1RESVIpJCRkaXI7IFwKKwkgIGlmIHRlc3QgLXIgJCRjYXQ7IHRoZW4gcmVhbGNhdD0kJGNhdDsgZWxzZSByZWFsY2F0PSQoc3JjZGlyKS8kJGNhdDsgZmk7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJHJlYWxjYXQgJChERVNURElSKSQkZGlyLyQoRE9NQUlOKS5tbzsgXAorCSAgZWNobyAiaW5zdGFsbGluZyAkJHJlYWxjYXQgYXMgJChERVNURElSKSQkZGlyLyQoRE9NQUlOKS5tbyI7IFwKKwkgIGZvciBsYyBpbiAnJyAkKEVYVFJBX0xPQ0FMRV9DQVRFR09SSUVTKTsgZG8gXAorCSAgICBpZiB0ZXN0IC1uICIkJGxjIjsgdGhlbiBcCisJICAgICAgaWYgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nICYmIExDX0FMTD1DIGxzIC1sIC1kICQkbGMgMj4vZGV2L251bGwpIHwgZ3JlcCAnIC0+ICcgPi9kZXYvbnVsbDsgdGhlbiBcCisJICAgICAgICBsaW5rPWBjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIHwgc2VkIC1lICdzL14uKiAtPiAvLydgOyBcCisJICAgICAgICBtdiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCisJICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICAoY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQgJiYgXAorCSAgICAgICAgIGZvciBmaWxlIGluICo7IGRvIFwKKwkgICAgICAgICAgIGlmIHRlc3QgLWYgJCRmaWxlOyB0aGVuIFwKKwkgICAgICAgICAgICAgbG4gLXMgLi4vJCRsaW5rLyQkZmlsZSAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQkZmlsZTsgXAorCSAgICAgICAgICAgZmk7IFwKKwkgICAgICAgICBkb25lKTsgXAorCSAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQ7IFwKKwkgICAgICBlbHNlIFwKKwkgICAgICAgIGlmIHRlc3QgLWQgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgdGhlbiBcCisJICAgICAgICAgIDo7IFwKKwkgICAgICAgIGVsc2UgXAorCSAgICAgICAgICBybSAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICAgIG1rZGlyICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IFwKKwkgICAgICAgIGZpOyBcCisJICAgICAgZmk7IFwKKwkgICAgICBybSAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbzsgXAorCSAgICAgIGxuIC1zIC4uL0xDX01FU1NBR0VTLyQoRE9NQUlOKS5tbyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbyAyPi9kZXYvbnVsbCB8fCBcCisJICAgICAgbG4gJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVMvJChET01BSU4pLm1vICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vIDI+L2Rldi9udWxsIHx8IFwKKwkgICAgICBjcCAtcCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy9MQ19NRVNTQUdFUy8kKERPTUFJTikubW8gJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW87IFwKKwkgICAgICBlY2hvICJpbnN0YWxsaW5nICQkcmVhbGNhdCBsaW5rIGFzICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vIjsgXAorCSAgICBmaTsgXAorCSAgZG9uZTsgXAorCWRvbmUKKworaW5zdGFsbC1zdHJpcDogaW5zdGFsbAorCitpbnN0YWxsLWR2aSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1pbmZvIGluc3RhbGwtcGRmIGluc3RhbGwtcHM6CitpbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtZXhlYyBpbnN0YWxsZGlycy1kYXRhCitpbnN0YWxsZGlycy1leGVjOgoraW5zdGFsbGRpcnMtZGF0YTogaW5zdGFsbGRpcnMtZGF0YS1AVVNFX05MU0AKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICAkKG1rZGlyX3ApICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCitpbnN0YWxsZGlycy1kYXRhLW5vOgoraW5zdGFsbGRpcnMtZGF0YS15ZXM6CisJQGNhdGFsb2dzPSckKENBVEFMT0dTKSc7IFwKKwlmb3IgY2F0IGluICQkY2F0YWxvZ3M7IGRvIFwKKwkgIGNhdD1gYmFzZW5hbWUgJCRjYXRgOyBcCisJICBsYW5nPWBlY2hvICQkY2F0IHwgc2VkIC1lICdzL1wuZ21vJCQvLydgOyBcCisJICBkaXI9JChsb2NhbGVkaXIpLyQkbGFuZy9MQ19NRVNTQUdFUzsgXAorCSAgJChta2Rpcl9wKSAkKERFU1RESVIpJCRkaXI7IFwKKwkgIGZvciBsYyBpbiAnJyAkKEVYVFJBX0xPQ0FMRV9DQVRFR09SSUVTKTsgZG8gXAorCSAgICBpZiB0ZXN0IC1uICIkJGxjIjsgdGhlbiBcCisJICAgICAgaWYgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nICYmIExDX0FMTD1DIGxzIC1sIC1kICQkbGMgMj4vZGV2L251bGwpIHwgZ3JlcCAnIC0+ICcgPi9kZXYvbnVsbDsgdGhlbiBcCisJICAgICAgICBsaW5rPWBjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIHwgc2VkIC1lICdzL14uKiAtPiAvLydgOyBcCisJICAgICAgICBtdiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCisJICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICAoY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQgJiYgXAorCSAgICAgICAgIGZvciBmaWxlIGluICo7IGRvIFwKKwkgICAgICAgICAgIGlmIHRlc3QgLWYgJCRmaWxlOyB0aGVuIFwKKwkgICAgICAgICAgICAgbG4gLXMgLi4vJCRsaW5rLyQkZmlsZSAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQkZmlsZTsgXAorCSAgICAgICAgICAgZmk7IFwKKwkgICAgICAgICBkb25lKTsgXAorCSAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQ7IFwKKwkgICAgICBlbHNlIFwKKwkgICAgICAgIGlmIHRlc3QgLWQgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgdGhlbiBcCisJICAgICAgICAgIDo7IFwKKwkgICAgICAgIGVsc2UgXAorCSAgICAgICAgICBybSAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICAgIG1rZGlyICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IFwKKwkgICAgICAgIGZpOyBcCisJICAgICAgZmk7IFwKKwkgICAgZmk7IFwKKwkgIGRvbmU7IFwKKwlkb25lCisKKyMgRGVmaW5lIHRoaXMgYXMgZW1wdHkgdW50aWwgSSBmb3VuZCBhIHVzZWZ1bCBhcHBsaWNhdGlvbi4KK2luc3RhbGxjaGVjazoKKwordW5pbnN0YWxsOiB1bmluc3RhbGwtZXhlYyB1bmluc3RhbGwtZGF0YQordW5pbnN0YWxsLWV4ZWM6Cit1bmluc3RhbGwtZGF0YTogdW5pbnN0YWxsLWRhdGEtQFVTRV9OTFNACisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorCSAgZm9yIGZpbGUgaW4gJChESVNURklMRVMuY29tbW9uKSBNYWtldmFycy50ZW1wbGF0ZTsgZG8gXAorCSAgICBybSAtZiAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKwkgIGRvbmU7IFwKKwllbHNlIFwKKwkgIDogOyBcCisJZmkKK3VuaW5zdGFsbC1kYXRhLW5vOgordW5pbnN0YWxsLWRhdGEteWVzOgorCWNhdGFsb2dzPSckKENBVEFMT0dTKSc7IFwKKwlmb3IgY2F0IGluICQkY2F0YWxvZ3M7IGRvIFwKKwkgIGNhdD1gYmFzZW5hbWUgJCRjYXRgOyBcCisJICBsYW5nPWBlY2hvICQkY2F0IHwgc2VkIC1lICdzL1wuZ21vJCQvLydgOyBcCisJICBmb3IgbGMgaW4gTENfTUVTU0FHRVMgJChFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyk7IGRvIFwKKwkgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW87IFwKKwkgIGRvbmU7IFwKKwlkb25lCisKK2NoZWNrOiBhbGwKKworaW5mbyBkdmkgcHMgcGRmIGh0bWwgdGFncyBUQUdTIGN0YWdzIENUQUdTIElEOgorCittb3N0bHljbGVhbjoKKwlybSAtZiByZW1vdmUtcG90Y2RhdGUuc2VkCisJcm0gLWYgc3RhbXAtcG9UCisJcm0gLWYgY29yZSBjb3JlLiogJChET01BSU4pLnBvICQoRE9NQUlOKS4xcG8gJChET01BSU4pLjJwbyAqLm5ldy5wbworCXJtIC1mciAqLm8KKworY2xlYW46IG1vc3RseWNsZWFuCisKK2Rpc3RjbGVhbjogY2xlYW4KKwlybSAtZiBNYWtlZmlsZSBNYWtlZmlsZS5pbiBQT1RGSUxFUyAqLm1vCisKK21haW50YWluZXItY2xlYW46IGRpc3RjbGVhbgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZTsiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorCXJtIC1mIHN0YW1wLXBvICQoR01PRklMRVMpCisKK2Rpc3RkaXIgPSAkKHRvcF9idWlsZGRpcikvJChQQUNLQUdFKS0kKFZFUlNJT04pLyQoc3ViZGlyKQorZGlzdCBkaXN0ZGlyOgorCSQoTUFLRSkgdXBkYXRlLXBvCisJQCQoTUFLRSkgZGlzdDIKKyMgVGhpcyBpcyBhIHNlcGFyYXRlIHRhcmdldCBiZWNhdXNlICd1cGRhdGUtcG8nIG11c3QgYmUgZXhlY3V0ZWQgYmVmb3JlLgorZGlzdDI6IHN0YW1wLXBvICQoRElTVEZJTEVTKQorCWRpc3RzPSIkKERJU1RGSUxFUykiOyBcCisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorCSAgZGlzdHM9IiQkZGlzdHMgTWFrZXZhcnMudGVtcGxhdGUiOyBcCisJZmk7IFwKKwlpZiB0ZXN0IC1mICQoc3JjZGlyKS8kKERPTUFJTikucG90OyB0aGVuIFwKKwkgIGRpc3RzPSIkJGRpc3RzICQoRE9NQUlOKS5wb3Qgc3RhbXAtcG8iOyBcCisJZmk7IFwKKwlpZiB0ZXN0IC1mICQoc3JjZGlyKS9DaGFuZ2VMb2c7IHRoZW4gXAorCSAgZGlzdHM9IiQkZGlzdHMgQ2hhbmdlTG9nIjsgXAorCWZpOyBcCisJZm9yIGkgaW4gMCAxIDIgMyA0IDUgNiA3IDggOTsgZG8gXAorCSAgaWYgdGVzdCAtZiAkKHNyY2RpcikvQ2hhbmdlTG9nLiQkaTsgdGhlbiBcCisJICAgIGRpc3RzPSIkJGRpc3RzIENoYW5nZUxvZy4kJGkiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlpZiB0ZXN0IC1mICQoc3JjZGlyKS9MSU5HVUFTOyB0aGVuIGRpc3RzPSIkJGRpc3RzIExJTkdVQVMiOyBmaTsgXAorCWZvciBmaWxlIGluICQkZGlzdHM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlOyB0aGVuIFwKKwkgICAgY3AgLXAgJCRmaWxlICQoZGlzdGRpcikgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgY3AgLXAgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisKK3VwZGF0ZS1wbzogTWFrZWZpbGUKKwkkKE1BS0UpICQoRE9NQUlOKS5wb3QtdXBkYXRlCisJdGVzdCAteiAiJChVUERBVEVQT0ZJTEVTKSIgfHwgJChNQUtFKSAkKFVQREFURVBPRklMRVMpCisJJChNQUtFKSB1cGRhdGUtZ21vCisKKyMgR2VuZXJhbCBydWxlIGZvciBjcmVhdGluZyBQTyBmaWxlcy4KKworLm5vcC5wby1jcmVhdGU6CisJQGxhbmc9YGVjaG8gJEAgfCBzZWQgLWUgJ3MvXC5wby1jcmVhdGUkJC8vJ2A7IFwKKwllY2hvICJGaWxlICQkbGFuZy5wbyBkb2VzIG5vdCBleGlzdC4gSWYgeW91IGFyZSBhIHRyYW5zbGF0b3IsIHlvdSBjYW4gY3JlYXRlIGl0IHRocm91Z2ggJ21zZ2luaXQnLiIgMT4mMjsgXAorCWV4aXQgMQorCisjIEdlbmVyYWwgcnVsZSBmb3IgdXBkYXRpbmcgUE8gZmlsZXMuCisKKy5ub3AucG8tdXBkYXRlOgorCUBsYW5nPWBlY2hvICRAIHwgc2VkIC1lICdzL1wucG8tdXBkYXRlJCQvLydgOyBcCisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gUEFUSD1gcHdkYC8uLi9zcmM6JCRQQVRIOyBmaTsgXAorCXRtcGRpcj1gcHdkYDsgXAorCWVjaG8gIiQkbGFuZzoiOyBcCisJdGVzdCAiJChzcmNkaXIpIiA9IC4gJiYgY2RjbWQ9IiIgfHwgY2RjbWQ9ImNkICQoc3JjZGlyKSAmJiAiOyBcCisJZWNobyAiJCR7Y2RjbWR9JChNU0dNRVJHRSkgJChNU0dNRVJHRV9PUFRJT05TKSAtLWxhbmc9JCRsYW5nICQkbGFuZy5wbyAkKERPTUFJTikucG90IC1vICQkbGFuZy5uZXcucG8iOyBcCisJY2QgJChzcmNkaXIpOyBcCisJaWYgeyBjYXNlIGAkKE1TR01FUkdFKSAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluIFwKKwkgICAgICAgJycgfCAwLlswLTldIHwgMC5bMC05XS4qIHwgMC4xWzAtN10gfCAwLjFbMC03XS4qKSBcCisJICAgICAgICAgJChNU0dNRVJHRSkgJChNU0dNRVJHRV9PUFRJT05TKSAtbyAkJHRtcGRpci8kJGxhbmcubmV3LnBvICQkbGFuZy5wbyAkKERPTUFJTikucG90OzsgXAorCSAgICAgICAqKSBcCisJICAgICAgICAgJChNU0dNRVJHRSkgJChNU0dNRVJHRV9PUFRJT05TKSAtLWxhbmc9JCRsYW5nIC1vICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gJCRsYW5nLnBvICQoRE9NQUlOKS5wb3Q7OyBcCisJICAgICBlc2FjOyBcCisJICAgfTsgdGhlbiBcCisJICBpZiBjbXAgJCRsYW5nLnBvICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgICAgcm0gLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbzsgXAorCSAgZWxzZSBcCisJICAgIGlmIG12IC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gJCRsYW5nLnBvOyB0aGVuIFwKKwkgICAgICA6OyBcCisJICAgIGVsc2UgXAorCSAgICAgIGVjaG8gIm1zZ21lcmdlIGZvciAkJGxhbmcucG8gZmFpbGVkOiBjYW5ub3QgbW92ZSAkJHRtcGRpci8kJGxhbmcubmV3LnBvIHRvICQkbGFuZy5wbyIgMT4mMjsgXAorCSAgICAgIGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgZmk7IFwKKwllbHNlIFwKKwkgIGVjaG8gIm1zZ21lcmdlIGZvciAkJGxhbmcucG8gZmFpbGVkISIgMT4mMjsgXAorCSAgcm0gLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbzsgXAorCWZpCisKKyQoRFVNTVlQT0ZJTEVTKToKKwordXBkYXRlLWdtbzogTWFrZWZpbGUgJChHTU9GSUxFUykKKwlAOgorCisjIFJlY3JlYXRlIE1ha2VmaWxlIGJ5IGludm9raW5nIGNvbmZpZy5zdGF0dXMuIEV4cGxpY2l0bHkgaW52b2tlIHRoZSBzaGVsbCwKKyMgYmVjYXVzZSBleGVjdXRpb24gcGVybWlzc2lvbiBiaXRzIG1heSBub3Qgd29yayBvbiB0aGUgY3VycmVudCBmaWxlIHN5c3RlbS4KKyMgVXNlIEBTSEVMTEAsIHdoaWNoIGlzIHRoZSBzaGVsbCBkZXRlcm1pbmVkIGJ5IGF1dG9jb25mIGZvciB0aGUgdXNlIGJ5IGl0cworIyBzY3JpcHRzLCBub3QgJChTSEVMTCkgd2hpY2ggaXMgaGFyZHdpcmVkIHRvIC9iaW4vc2ggYW5kIG1heSBiZSBkZWZpY2llbnQuCitNYWtlZmlsZTogTWFrZWZpbGUuaW4uaW4gTWFrZXZhcnMgJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgQFBPTUFLRUZJTEVERVBTQAorCWNkICQodG9wX2J1aWxkZGlyKSBcCisJICAmJiBAU0hFTExAIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAuaW4gcG8tZGlyZWN0b3JpZXMKKworZm9yY2U6CisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSBub3QgdG8gZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3BvL01ha2V2YXJzIGIvcG8vTWFrZXZhcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ2NTQ0YgotLS0gL2Rldi9udWxsCisrKyBiL3BvL01ha2V2YXJzCkBAIC0wLDAgKzEsNTMgQEAKKyMgTWFrZWZpbGUgdmFyaWFibGVzIGZvciBQTyBkaXJlY3RvcnkgaW4gYW55IHBhY2thZ2UgdXNpbmcgR05VIGdldHRleHQuCisKKyMgVXN1YWxseSB0aGUgbWVzc2FnZSBkb21haW4gaXMgdGhlIHNhbWUgYXMgdGhlIHBhY2thZ2UgbmFtZS4KK0RPTUFJTiA9ICQoUEFDS0FHRSkKKworIyBUaGVzZSB0d28gdmFyaWFibGVzIGRlcGVuZCBvbiB0aGUgbG9jYXRpb24gb2YgdGhpcyBkaXJlY3RvcnkuCitzdWJkaXIgPSBwbwordG9wX2J1aWxkZGlyID0gLi4KKworIyBUaGVzZSBvcHRpb25zIGdldCBwYXNzZWQgdG8geGdldHRleHQuCitYR0VUVEVYVF9PUFRJT05TID0gLS1rZXl3b3JkPV8gLS1rZXl3b3JkPU5fIFwKK1wKKy0tZmxhZz1fOjE6cGFzcy1jLWZvcm1hdFwKKy0tZmxhZz1OXzoxOnBhc3MtYy1mb3JtYXRcCistLWZsYWc9ZXJyb3I6MzpjLWZvcm1hdCAtLWZsYWc9ZXJyb3JfYXRfbGluZTo1OmMtZm9ybWF0XAorXAorLS1mcm9tLWNvZGU9VVRGLThcCistLWZsYWc9YXNwcmludGY6MjpjLWZvcm1hdFwKKy0tZmxhZz1jb21wbGFpbjoxOmMtZm9ybWF0IC0tZmxhZz1jb21wbGFpbl9hdDoyOmMtZm9ybWF0XAorLS1mbGFnPWZhdGFsOjE6Yy1mb3JtYXQgLS1mbGFnPWZhdGFsX2F0OjI6Yy1mb3JtYXRcCistLWZsYWc9d2FybjoxOmMtZm9ybWF0ICAtLWZsYWc9d2Fybl9hdDoyOmMtZm9ybWF0XAorLS1mbGFnPXVuZXhwZWN0ZWRfZW5kOjI6Yy1mb3JtYXRcCiskJHtlbmRfb2ZfeGdldHRleHRfb3B0aW9ucyt9CisKKyMgVGhpcyBpcyB0aGUgY29weXJpZ2h0IGhvbGRlciB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byB0aGUgaGVhZGVyIG9mIHRoZQorIyAkKERPTUFJTikucG90IGZpbGUuICBTZXQgdGhpcyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgc3Vycm91bmRpbmcKKyMgcGFja2FnZS4gIChOb3RlIHRoYXQgdGhlIG1zZ3N0ciBzdHJpbmdzLCBleHRyYWN0ZWQgZnJvbSB0aGUgcGFja2FnZSdzCisjIHNvdXJjZXMsIGJlbG9uZyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgcGFja2FnZS4pICBUcmFuc2xhdG9ycyBhcmUKKyMgZXhwZWN0ZWQgdG8gdHJhbnNmZXIgdGhlIGNvcHlyaWdodCBmb3IgdGhlaXIgdHJhbnNsYXRpb25zIHRvIHRoaXMgcGVyc29uCisjIG9yIGVudGl0eSwgb3IgdG8gZGlzY2xhaW0gdGhlaXIgY29weXJpZ2h0LiAgVGhlIGVtcHR5IHN0cmluZyBzdGFuZHMgZm9yCisjIHRoZSBwdWJsaWMgZG9tYWluOyBpbiB0aGlzIGNhc2UgdGhlIHRyYW5zbGF0b3JzIGFyZSBleHBlY3RlZCB0byBkaXNjbGFpbQorIyB0aGVpciBjb3B5cmlnaHQuCitDT1BZUklHSFRfSE9MREVSID0gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBpcyB0aGUgZW1haWwgYWRkcmVzcyBvciBVUkwgdG8gd2hpY2ggdGhlIHRyYW5zbGF0b3JzIHNoYWxsIHJlcG9ydAorIyBidWdzIGluIHRoZSB1bnRyYW5zbGF0ZWQgc3RyaW5nczoKKyMgLSBTdHJpbmdzIHdoaWNoIGFyZSBub3QgZW50aXJlIHNlbnRlbmNlcywgc2VlIHRoZSBtYWludGFpbmVyIGd1aWRlbGluZXMKKyMgICBpbiB0aGUgR05VIGdldHRleHQgZG9jdW1lbnRhdGlvbiwgc2VjdGlvbiAnUHJlcGFyaW5nIFN0cmluZ3MnLgorIyAtIFN0cmluZ3Mgd2hpY2ggdXNlIHVuY2xlYXIgdGVybXMgb3IgcmVxdWlyZSBhZGRpdGlvbmFsIGNvbnRleHQgdG8gYmUKKyMgICB1bmRlcnN0b29kLgorIyAtIFN0cmluZ3Mgd2hpY2ggbWFrZSBpbnZhbGlkIGFzc3VtcHRpb25zIGFib3V0IG5vdGF0aW9uIG9mIGRhdGUsIHRpbWUgb3IKKyMgICBtb25leS4KKyMgLSBQbHVyYWxpc2F0aW9uIHByb2JsZW1zLgorIyAtIEluY29ycmVjdCBFbmdsaXNoIHNwZWxsaW5nLgorIyAtIEluY29ycmVjdCBmb3JtYXR0aW5nLgorIyBJdCBjYW4gYmUgeW91ciBlbWFpbCBhZGRyZXNzLCBvciBhIG1haWxpbmcgbGlzdCBhZGRyZXNzIHdoZXJlIHRyYW5zbGF0b3JzCisjIGNhbiB3cml0ZSB0byB3aXRob3V0IGJlaW5nIHN1YnNjcmliZWQsIG9yIHRoZSBVUkwgb2YgYSB3ZWIgcGFnZSB0aHJvdWdoCisjIHdoaWNoIHRoZSB0cmFuc2xhdG9ycyBjYW4gY29udGFjdCB5b3UuCitNU0dJRF9CVUdTX0FERFJFU1MgPSBidWctYmlzb25AZ251Lm9yZworCisjIFRoaXMgaXMgdGhlIGxpc3Qgb2YgbG9jYWxlIGNhdGVnb3JpZXMsIGJleW9uZCBMQ19NRVNTQUdFUywgZm9yIHdoaWNoIHRoZQorIyBtZXNzYWdlIGNhdGFsb2dzIHNoYWxsIGJlIHVzZWQuICBJdCBpcyB1c3VhbGx5IGVtcHR5LgorRVhUUkFfTE9DQUxFX0NBVEVHT1JJRVMgPSAKZGlmZiAtLWdpdCBhL3BvL1BPVEZJTEVTLmluIGIvcG8vUE9URklMRVMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUzNDg3OQotLS0gL2Rldi9udWxsCisrKyBiL3BvL1BPVEZJTEVTLmluCkBAIC0wLDAgKzEsMzMgQEAKK3NyYy9jb21wbGFpbi5jCitzcmMvY29uZmxpY3RzLmMKK3NyYy9maWxlcy5jCitzcmMvZ2V0YXJncy5jCitzcmMvZ3JhbS5jCitzcmMvZ3JhcGh2aXouYworc3JjL2xvY2F0aW9uLmMKK3NyYy9tYWluLmMKK3NyYy9tdXNjbGUtdGFiLmMKK3NyYy9wYXJzZS1ncmFtLnkKK3NyYy9wcmludC5jCitzcmMvcHJpbnRfZ3JhcGguYworc3JjL3JlYWRlci5jCitzcmMvcmVkdWNlLmMKK3NyYy9zY2FuLWNvZGUubAorc3JjL3NjYW4tZ3JhbS5sCitzcmMvc2Nhbi1za2VsLmwKK3NyYy9zeW1saXN0LmMKK3NyYy9zeW10YWIuYworCitkamdwcC9zdWJwaXBlLmMKK2xpYi9hcmdtYXRjaC5jCitsaWIvYml0c2V0X3N0YXRzLmMKK2xpYi9jbG9zZW91dC5jCitsaWIvZXJyb3IuYworbGliL2dldG9wdC5jCitsaWIvb2JzdGFjay5jCitsaWIvc3Bhd24tcGlwZS5jCitsaWIvcXVvdGVhcmcuYworbGliL3RpbWV2YXIuYworbGliL3czMnNwYXduLmgKK2xpYi93YWl0LXByb2Nlc3MuYworbGliL3hhbGxvYy1kaWUuYwpkaWZmIC0tZ2l0IGEvcG8vUnVsZXMtcXVvdCBiL3BvL1J1bGVzLXF1b3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY1MjQ4NwotLS0gL2Rldi9udWxsCisrKyBiL3BvL1J1bGVzLXF1b3QKQEAgLTAsMCArMSw0NyBAQAorIyBTcGVjaWFsIE1ha2VmaWxlIHJ1bGVzIGZvciBFbmdsaXNoIG1lc3NhZ2UgY2F0YWxvZ3Mgd2l0aCBxdW90YXRpb24gbWFya3MuCisKK0RJU1RGSUxFUy5jb21tb24uZXh0cmExID0gcXVvdC5zZWQgYm9sZHF1b3Quc2VkIGVuQHF1b3QuaGVhZGVyIGVuQGJvbGRxdW90LmhlYWRlciBpbnNlcnQtaGVhZGVyLnNpbiBSdWxlcy1xdW90CisKKy5TVUZGSVhFUzogLmluc2VydC1oZWFkZXIgLnBvLXVwZGF0ZS1lbgorCitlbkBxdW90LnBvLWNyZWF0ZToKKwkkKE1BS0UpIGVuQHF1b3QucG8tdXBkYXRlCitlbkBib2xkcXVvdC5wby1jcmVhdGU6CisJJChNQUtFKSBlbkBib2xkcXVvdC5wby11cGRhdGUKKworZW5AcXVvdC5wby11cGRhdGU6IGVuQHF1b3QucG8tdXBkYXRlLWVuCitlbkBib2xkcXVvdC5wby11cGRhdGU6IGVuQGJvbGRxdW90LnBvLXVwZGF0ZS1lbgorCisuaW5zZXJ0LWhlYWRlci5wby11cGRhdGUtZW46CisJQGxhbmc9YGVjaG8gJEAgfCBzZWQgLWUgJ3MvXC5wby11cGRhdGUtZW4kJC8vJ2A7IFwKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0IjsgdGhlbiBQQVRIPWBwd2RgLy4uL3NyYzokJFBBVEg7IEdFVFRFWFRMSUJESVI9YGNkICQodG9wX3NyY2Rpcikvc3JjICYmIHB3ZGA7IGV4cG9ydCBHRVRURVhUTElCRElSOyBmaTsgXAorCXRtcGRpcj1gcHdkYDsgXAorCWVjaG8gIiQkbGFuZzoiOyBcCisJbGw9YGVjaG8gJCRsYW5nIHwgc2VkIC1lICdzL0AuKi8vJ2A7IFwKKwlMQ19BTEw9QzsgZXhwb3J0IExDX0FMTDsgXAorCWNkICQoc3JjZGlyKTsgXAorCWlmICQoTVNHSU5JVCkgLWkgJChET01BSU4pLnBvdCAtLW5vLXRyYW5zbGF0b3IgLWwgJCRsYW5nIC1vIC0gMj4vZGV2L251bGwgfCBzZWQgLWYgJCR0bXBkaXIvJCRsYW5nLmluc2VydC1oZWFkZXIgfCAkKE1TR0NPTlYpIC10IFVURi04IHwgJChNU0dGSUxURVIpIHNlZCAtZiBgZWNobyAkJGxhbmcgfCBzZWQgLWUgJ3MvLipALy8nYC5zZWQgMj4vZGV2L251bGwgPiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyB0aGVuIFwKKwkgIGlmIGNtcCAkJGxhbmcucG8gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgICBybSAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyBcCisJICBlbHNlIFwKKwkgICAgaWYgbXYgLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyAkJGxhbmcucG87IHRoZW4gXAorCSAgICAgIDo7IFwKKwkgICAgZWxzZSBcCisJICAgICAgZWNobyAiY3JlYXRpb24gb2YgJCRsYW5nLnBvIGZhaWxlZDogY2Fubm90IG1vdmUgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyB0byAkJGxhbmcucG8iIDE+JjI7IFwKKwkgICAgICBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgIGZpOyBcCisJZWxzZSBcCisJICBlY2hvICJjcmVhdGlvbiBvZiAkJGxhbmcucG8gZmFpbGVkISIgMT4mMjsgXAorCSAgcm0gLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbzsgXAorCWZpCisKK2VuQHF1b3QuaW5zZXJ0LWhlYWRlcjogaW5zZXJ0LWhlYWRlci5zaW4KKwlzZWQgLWUgJy9eIy9kJyAtZSAncy9IRUFERVIvZW5AcXVvdC5oZWFkZXIvZycgJChzcmNkaXIpL2luc2VydC1oZWFkZXIuc2luID4gZW5AcXVvdC5pbnNlcnQtaGVhZGVyCisKK2VuQGJvbGRxdW90Lmluc2VydC1oZWFkZXI6IGluc2VydC1oZWFkZXIuc2luCisJc2VkIC1lICcvXiMvZCcgLWUgJ3MvSEVBREVSL2VuQGJvbGRxdW90LmhlYWRlci9nJyAkKHNyY2RpcikvaW5zZXJ0LWhlYWRlci5zaW4gPiBlbkBib2xkcXVvdC5pbnNlcnQtaGVhZGVyCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1xdW90Cittb3N0bHljbGVhbi1xdW90OgorCXJtIC1mICouaW5zZXJ0LWhlYWRlcgpkaWZmIC0tZ2l0IGEvcG8vYmlzb24ucG90IGIvcG8vYmlzb24ucG90Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMDJjMmEKLS0tIC9kZXYvbnVsbAorKysgYi9wby9iaXNvbi5wb3QKQEAgLTAsMCArMSwxMDk0IEBACisjIFNPTUUgREVTQ1JJUFRJVkUgVElUTEUuCisjIENvcHlyaWdodCAoQykgWUVBUiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIFBBQ0tBR0UgcGFja2FnZS4KKyMgRklSU1QgQVVUSE9SIDxFTUFJTEBBRERSRVNTPiwgWUVBUi4KKyMKKyMsIGZ1enp5Cittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBiaXNvbiAyLjdcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLWJpc29uQGdudS5vcmdcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMi0xMi0xMiAxNjowOSswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogWUVBUi1NTy1EQSBITzpNSStaT05FXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBGVUxMIE5BTUUgPEVNQUlMQEFERFJFU1M+XG4iCisiTGFuZ3VhZ2UtVGVhbTogTEFOR1VBR0UgPExMQGxpLm9yZz5cbiIKKyJMYW5ndWFnZTogXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9Q0hBUlNFVFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPUlOVEVHRVI7IHBsdXJhbD1FWFBSRVNTSU9OO1xuIgorCisjOiBzcmMvY29tcGxhaW4uYzoxMjAgc3JjL2NvbXBsYWluLmM6MTMxIHNyYy9jb21wbGFpbi5jOjE0MCBzcmMvY29tcGxhaW4uYzoxODgKKyM6IHNyYy9jb21wbGFpbi5jOjE5OAorbXNnaWQgIndhcm5pbmciCittc2dzdHIgIiIKKworIzogc3JjL2NvbXBsYWluLmM6MTUxIHNyYy9jb21wbGFpbi5jOjE2MCBzcmMvY29tcGxhaW4uYzoxNjcKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiIgorCisjOiBzcmMvY29tcGxhaW4uYzoyMDggc3JjL2NvbXBsYWluLmM6MjE1Cittc2dpZCAiZmF0YWwgZXJyb3IiCittc2dzdHIgIiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIHNoaWZ0IgorbXNnc3RyICIiCisKKyM6IHNyYy9jb25mbGljdHMuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyByZWR1Y2UiCittc2dzdHIgIiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIGFuIGVycm9yIgorbXNnc3RyICIiCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCBzaGlmdC9yZWR1Y2UsICVkIHJlZHVjZS9yZWR1Y2VcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgc2hpZnQvcmVkdWNlXG4iCittc2dzdHIgIiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdHM6ICVkIHJlZHVjZS9yZWR1Y2VcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YXRlICVkICIKK21zZ3N0ciAiIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlZXhwZWN0LXJyIGFwcGxpZXMgb25seSB0byBHTFIgcGFyc2VycyIKK21zZ3N0ciAiIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NjE2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICVkIHNoaWZ0L3JlZHVjZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiZXhwZWN0ZWQgJWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IHNyYy9jb25mbGljdHMuYzo2MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJWQgcmVkdWNlL3JlZHVjZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiZXhwZWN0ZWQgJWQgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBzcmMvZmlsZXMuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBvcGVuIgorbXNnc3RyICIiCisKKyM6IHNyYy9maWxlcy5jOjEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnB1dC9vdXRwdXQgZXJyb3IiCittc2dzdHIgIiIKKworIzogc3JjL2ZpbGVzLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjbG9zZSBmaWxlIgorbXNnc3RyICIiCisKKyM6IHNyYy9maWxlcy5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBvdmVyd3JpdGUgdGhlIGlucHV0IGZpbGUgJXMiCittc2dzdHIgIiIKKworIzogc3JjL2ZpbGVzLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0aW5nIG91dHB1dHMgdG8gZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFtPUFRJT05dLi4uIEZJTEVcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwMgorbXNnaWQgIiIKKyJHZW5lcmF0ZSBhIGRldGVybWluaXN0aWMgTFIgb3IgZ2VuZXJhbGl6ZWQgTFIgKEdMUikgcGFyc2VyIGVtcGxveWluZ1xuIgorIkxBTFIoMSksIElFTFIoMSksIG9yIGNhbm9uaWNhbCBMUigxKSBwYXJzZXIgdGFibGVzLiAgSUVMUigxKSBhbmRcbiIKKyJjYW5vbmljYWwgTFIoMSkgc3VwcG9ydCBpcyBleHBlcmltZW50YWwuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozMDkKK21zZ2lkICIiCisiTWFuZGF0b3J5IGFyZ3VtZW50cyB0byBsb25nIG9wdGlvbnMgYXJlIG1hbmRhdG9yeSBmb3Igc2hvcnQgb3B0aW9ucyB0b28uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozMTIKK21zZ2lkICJUaGUgc2FtZSBpcyB0cnVlIGZvciBvcHRpb25hbCBhcmd1bWVudHMuXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozMTYKK21zZ2lkICIiCisiXG4iCisiT3BlcmF0aW9uIG1vZGVzOlxuIgorIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKKyIgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCisiICAgICAgLS1wcmludC1sb2NhbGVkaXIgICAgICBvdXRwdXQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgbG9jYWxlLWRlcGVuZGVudCAiCisiZGF0YVxuIgorIiAgICAgIC0tcHJpbnQtZGF0YWRpciAgICAgICAgb3V0cHV0IGRpcmVjdG9yeSBjb250YWluaW5nIHNrZWxldG9ucyBhbmQgWFNMVFxuIgorIiAgLXksIC0teWFjYyAgICAgICAgICAgICAgICAgZW11bGF0ZSBQT1NJWCBZYWNjXG4iCisiICAtVywgLS13YXJuaW5nc1s9Q0FURUdPUlldICByZXBvcnQgdGhlIHdhcm5pbmdzIGZhbGxpbmcgaW4gQ0FURUdPUllcbiIKKyIgIC1mLCAtLWZlYXR1cmVbPUZFQVRVUkVdICAgIGFjdGl2YXRlIG1pc2NlbGxhbmVvdXMgZmVhdHVyZXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFyc2VyOlxuIgorIiAgLUwsIC0tbGFuZ3VhZ2U9TEFOR1VBR0UgICAgICAgICAgc3BlY2lmeSB0aGUgb3V0cHV0IHByb2dyYW1taW5nIGxhbmd1YWdlXG4iCisiICAtUywgLS1za2VsZXRvbj1GSUxFICAgICAgICAgICAgICBzcGVjaWZ5IHRoZSBza2VsZXRvbiB0byB1c2VcbiIKKyIgIC10LCAtLWRlYnVnICAgICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnQgdGhlIHBhcnNlciBmb3IgZGVidWdnaW5nXG4iCisiICAgICAgLS1sb2NhdGlvbnMgICAgICAgICAgICAgICAgICBlbmFibGUgbG9jYXRpb24gc3VwcG9ydFxuIgorIiAgLUQsIC0tZGVmaW5lPU5BTUVbPVZBTFVFXSAgICAgICAgc2ltaWxhciB0byAnJWRlZmluZSBOQU1FIFwiVkFMVUVcIidcbiIKKyIgIC1GLCAtLWZvcmNlLWRlZmluZT1OQU1FWz1WQUxVRV0gIG92ZXJyaWRlICclZGVmaW5lIE5BTUUgXCJWQUxVRVwiJ1xuIgorIiAgLXAsIC0tbmFtZS1wcmVmaXg9UFJFRklYICAgICAgICAgcHJlcGVuZCBQUkVGSVggdG8gdGhlIGV4dGVybmFsIHN5bWJvbHNcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQgYnkgJy1EYXBpLnByZWZpeD1QUkVGSVgnXG4iCisiICAtbCwgLS1uby1saW5lcyAgICAgICAgICAgICAgICAgICBkb24ndCBnZW5lcmF0ZSAnI2xpbmUnIGRpcmVjdGl2ZXNcbiIKKyIgIC1rLCAtLXRva2VuLXRhYmxlICAgICAgICAgICAgICAgIGluY2x1ZGUgYSB0YWJsZSBvZiB0b2tlbiBuYW1lc1xuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6MzQ2Cittc2dpZCAiIgorIk91dHB1dDpcbiIKKyIgICAgICAtLWRlZmluZXNbPUZJTEVdICAgICAgIGFsc28gcHJvZHVjZSBhIGhlYWRlciBmaWxlXG4iCisiICAtZCAgICAgICAgICAgICAgICAgICAgICAgICBsaWtld2lzZSBidXQgY2Fubm90IHNwZWNpZnkgRklMRSAoZm9yIFBPU0lYICIKKyJZYWNjKVxuIgorIiAgLXIsIC0tcmVwb3J0PVRISU5HUyAgICAgICAgYWxzbyBwcm9kdWNlIGRldGFpbHMgb24gdGhlIGF1dG9tYXRvblxuIgorIiAgICAgIC0tcmVwb3J0LWZpbGU9RklMRSAgICAgd3JpdGUgcmVwb3J0IHRvIEZJTEVcbiIKKyIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIHNhbWUgYXMgYC0tcmVwb3J0PXN0YXRlJ1xuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg9UFJFRklYICAgc3BlY2lmeSBhIFBSRUZJWCBmb3Igb3V0cHV0IGZpbGVzXG4iCisiICAtbywgLS1vdXRwdXQ9RklMRSAgICAgICAgICBsZWF2ZSBvdXRwdXQgdG8gRklMRVxuIgorIiAgLWcsIC0tZ3JhcGhbPUZJTEVdICAgICAgICAgYWxzbyBvdXRwdXQgYSBncmFwaCBvZiB0aGUgYXV0b21hdG9uXG4iCisiICAteCwgLS14bWxbPUZJTEVdICAgICAgICAgICBhbHNvIG91dHB1dCBhbiBYTUwgcmVwb3J0IG9mIHRoZSBhdXRvbWF0b25cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGUgWE1MIHNjaGVtYSBpcyBleHBlcmltZW50YWwpXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozNjEKK21zZ2lkICIiCisiV2FybmluZyBjYXRlZ29yaWVzIGluY2x1ZGU6XG4iCisiICBgbWlkcnVsZS12YWx1ZXMnICB1bnNldCBvciB1bnVzZWQgbWlkcnVsZSB2YWx1ZXNcbiIKKyIgIGB5YWNjJyAgICAgICAgICAgIGluY29tcGF0aWJpbGl0aWVzIHdpdGggUE9TSVggWWFjY1xuIgorIiAgYGNvbmZsaWN0cy1zcicgICAgUy9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGNvbmZsaWN0cy1ycicgICAgUi9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGRlcHJlY2F0ZWQnICAgICAgb2Jzb2xldGUgY29uc3RydWN0c1xuIgorIiAgYG90aGVyJyAgICAgICAgICAgYWxsIG90aGVyIHdhcm5pbmdzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgYWxsJyAgICAgICAgICAgICBhbGwgdGhlIHdhcm5pbmdzXG4iCisiICBgbm8tQ0FURUdPUlknICAgICB0dXJuIG9mZiB3YXJuaW5ncyBpbiBDQVRFR09SWVxuIgorIiAgYG5vbmUnICAgICAgICAgICAgdHVybiBvZmYgYWxsIHRoZSB3YXJuaW5nc1xuIgorIiAgYGVycm9yJyAgICAgICAgICAgdHJlYXQgd2FybmluZ3MgYXMgZXJyb3JzXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozNzYKK21zZ2lkICIiCisiVEhJTkdTIGlzIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMgdGhhdCBjYW4gaW5jbHVkZTpcbiIKKyIgIGBzdGF0ZScgICAgICAgIGRlc2NyaWJlIHRoZSBzdGF0ZXNcbiIKKyIgIGBpdGVtc2V0JyAgICAgIGNvbXBsZXRlIHRoZSBjb3JlIGl0ZW0gc2V0cyB3aXRoIHRoZWlyIGNsb3N1cmVcbiIKKyIgIGBsb29rYWhlYWQnICAgIGV4cGxpY2l0bHkgYXNzb2NpYXRlIGxvb2thaGVhZCB0b2tlbnMgdG8gaXRlbXNcbiIKKyIgIGBzb2x2ZWQnICAgICAgIGRlc2NyaWJlIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMgc29sdmluZ1xuIgorIiAgYGFsbCcgICAgICAgICAgaW5jbHVkZSBhbGwgdGhlIGFib3ZlIGluZm9ybWF0aW9uXG4iCisiICBgbm9uZScgICAgICAgICBkaXNhYmxlIHRoZSByZXBvcnRcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjM4NworbXNnaWQgIiIKKyJGRUFUVVJFIGlzIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMgdGhhdCBjYW4gaW5jbHVkZTpcbiIKKyIgIGBjYXJldCcgICAgICAgIHNob3cgZXJyb3JzIHdpdGggY2FyZXRzXG4iCisiICBgYWxsJyAgICAgICAgICBhbGwgb2YgdGhlIGFib3ZlXG4iCisiICBgbm9uZScgICAgICAgICBkaXNhYmxlIGFsbCBvZiB0aGUgYWJvdmVcbiIKKyIgICIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhvbWUgcGFnZTogPCVzPi5cbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NworbXNnaWQgIkdlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBSZXBsYWNlIExBTkdfQ09ERSBpbiB0aGlzIFVSTCB3aXRoIHlvdXIgbGFuZ3VhZ2UKKyMuIGNvZGUgPGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vTEFOR19DT0RFLmh0bWw+IHRvCisjLiBmb3JtIG9uZSBvZiB0aGUgVVJMcyBhdCBodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtLy4KKyMuIE90aGVyd2lzZSwgcmVwbGFjZSB0aGUgZW50aXJlIFVSTCB3aXRoIHlvdXIgdHJhbnNsYXRpb24gdGVhbSdzCisjLiBlbWFpbCBhZGRyZXNzLgorIzogc3JjL2dldGFyZ3MuYzo0MTAKK21zZ2lkICJSZXBvcnQgdHJhbnNsYXRpb24gYnVncyB0byA8aHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS8+LlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDEyCittc2dpZCAiRm9yIGNvbXBsZXRlIGRvY3VtZW50YXRpb24sIHJ1bjogaW5mbyBiaXNvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJiaXNvbiAoR05VIEJpc29uKSAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjQzMAorbXNnaWQgIldyaXR0ZW4gYnkgUm9iZXJ0IENvcmJldHQgYW5kIFJpY2hhcmQgU3RhbGxtYW4uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29weXJpZ2h0IChDKSAlZCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjQzNworbXNnaWQgIiIKKyJUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOT1xuIgorIndhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHNrZWxldG9uIGRlY2xhcmF0aW9ucyBhcmUgaW52YWxpZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBsYW5ndWFnZSIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ3OQorbXNnaWQgIm11bHRpcGxlIGxhbmd1YWdlIGRlY2xhcmF0aW9ucyBhcmUgaW52YWxpZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjc0NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogbWlzc2luZyBvcGVyYW5kIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6NzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dHJhIG9wZXJhbmQgJXMiCittc2dzdHIgIiIKKworIzogc3JjL2dyYW0uYzoxMTIKK21zZ2lkICJlbXB0eSIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ3JhbS5jOjIwMQorbXNnaWQgIkdyYW1tYXIiCittc2dzdHIgIiIKKworIzogc3JjL2dyYXBodml6LmM6NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIi8vIEdlbmVyYXRlZCBieSAlcy5cbiIKKyIvLyBSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorIi8vIEhvbWUgcGFnZTogPCVzPi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvbG9jYXRpb24uYzo5MyBzcmMvc2Nhbi1ncmFtLmw6ODU5CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgbnVtYmVyIG92ZXJmbG93IgorbXNnc3RyICIiCisKKyM6IHNyYy9sb2NhdGlvbi5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbHVtbiBudW1iZXIgb3ZlcmZsb3ciCittc2dzdHIgIiIKKworIzogc3JjL21haW4uYzoxNDYKK21zZ2lkICJydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHMiCittc2dzdHIgIiIKKworIzogc3JjL211c2NsZS10YWIuYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSVkZWZpbmUgdmFyaWFibGUgJXMgcmVkZWZpbmVkIgorbXNnc3RyICIiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NDUzCittc2dpZCAicHJldmlvdXMgZGVmaW5pdGlvbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ5MCBzcmMvbXVzY2xlLXRhYi5jOjUwNCBzcmMvbXVzY2xlLXRhYi5jOjU1NgorIzogc3JjL211c2NsZS10YWIuYzo2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVuZGVmaW5lZCAlJWRlZmluZSB2YXJpYWJsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlJWRlZmluZSBCb29sZWFuIHZhcmlhYmxlICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjA5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICUlZGVmaW5lIHZhcmlhYmxlICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjYxMworIywgYy1mb3JtYXQKK21zZ2lkICJhY2NlcHRlZCB2YWx1ZTogJXMiCittc2dzdHIgIiIKKworIzogc3JjL3BhcnNlLWdyYW0ueTo3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBpZGVudGlmaWVyIGluIHBhcmFtZXRlciBkZWNsYXJhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvcHJpbnQuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICIgdHlwZSAlZCBpcyAlc1xuIgorbXNnc3RyICIiCisKKyM6IHNyYy9wcmludC5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICJzaGlmdCwgYW5kIGdvIHRvIHN0YXRlICVkXG4iCittc2dzdHIgIiIKKworIzogc3JjL3ByaW50LmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImdvIHRvIHN0YXRlICVkXG4iCittc2dzdHIgIiIKKworIzogc3JjL3ByaW50LmM6MjAzCittc2dpZCAiZXJyb3IgKG5vbmFzc29jaWF0aXZlKVxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9wcmludC5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWR1Y2UgdXNpbmcgcnVsZSAlZCAoJXMpIgorbXNnc3RyICIiCisKKyM6IHNyYy9wcmludC5jOjIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJhY2NlcHQiCittc2dzdHIgIiIKKworIzogc3JjL3ByaW50LmM6MjY0IHNyYy9wcmludC5jOjMzOAorbXNnaWQgIiRkZWZhdWx0IgorbXNnc3RyICIiCisKKyM6IHNyYy9wcmludC5jOjM3MyBzcmMvcHJpbnRfZ3JhcGguYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJTdGF0ZSAlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvcHJpbnQuYzo0MDkKK21zZ2lkICJUZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIiCittc2dzdHIgIiIKKworIzogc3JjL3ByaW50LmM6NDM2Cittc2dpZCAiTm9udGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyIgorbXNnc3RyICIiCisKKyM6IHNyYy9wcmludC5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICIgb24gbGVmdDoiCittc2dzdHIgIiIKKworIzogc3JjL3ByaW50LmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiByaWdodDoiCittc2dzdHIgIiIKKworIzogc3JjL3ByaW50LmM6NTEwCittc2dpZCAiUnVsZXMgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cyIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVhZGVyLmM6NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgJXMgZGVjbGFyYXRpb25zIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVzdWx0IHR5cGUgY2xhc2ggb24gbWVyZ2UgZnVuY3Rpb24gJXM6IDwlcz4gIT0gPCVzPiIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVhZGVyLmM6MTM5IHNyYy9zeW10YWIuYzoxNTYgc3JjL3N5bXRhYi5jOjE2NiBzcmMvc3ltdGFiLmM6OTM4CisjOiBzcmMvc3ltdGFiLmM6OTUzIHNyYy9zeW10YWIuYzo5Njggc3JjL3N5bXRhYi5jOjk4MworbXNnaWQgInByZXZpb3VzIGRlY2xhcmF0aW9uIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlZCBzeW1ib2wgbmFtZSBmb3IgJXMgaWdub3JlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVhZGVyLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bGUgZ2l2ZW4gZm9yICVzLCB3aGljaCBpcyBhIHRva2VuIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidHlwZSBjbGFzaCBvbiBkZWZhdWx0IGFjdGlvbjogPCVzPiAhPSA8JXM+IgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzozMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgcnVsZSBmb3IgdHlwZWQgbm9udGVybWluYWwsIGFuZCBubyBhY3Rpb24iCittc2dzdHIgIiIKKworIzogc3JjL3JlYWRlci5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnVzZWQgdmFsdWU6ICQlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVhZGVyLmM6MzMwCittc2dpZCAidW5zZXQgdmFsdWU6ICQkIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9rZW4gZm9yICUlcHJlYyBpcyBub3QgZGVmaW5lZDogJXMiCittc2dzdHIgIiIKKworIzogc3JjL3JlYWRlci5jOjQzMSBzcmMvcmVhZGVyLmM6NDQ1IHNyYy9yZWFkZXIuYzo0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSBvbmUgJXMgYWxsb3dlZCBwZXIgcnVsZSIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVhZGVyLmM6NDQxIHNyYy9yZWFkZXIuYzo0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWZmZWN0cyBvbmx5IEdMUiBwYXJzZXJzIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzo0NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgbXVzdCBiZSBmb2xsb3dlZCBieSBwb3NpdGl2ZSBudW1iZXIiCittc2dzdHIgIiIKKworIzogc3JjL3JlYWRlci5jOjU1NAorIywgYy1mb3JtYXQKK21zZ2lkICJydWxlIGlzIHRvbyBsb25nIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzo2NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcnVsZXMgaW4gdGhlIGlucHV0IGdyYW1tYXIiCittc2dzdHIgIiIKKworIzogc3JjL3JlZHVjZS5jOjI0MQorbXNnaWQgInJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWR1Y2UuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVkdWNlLmM6MzUwCittc2dpZCAiTm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVkdWNlLmM6MzYzCittc2dpZCAiVGVybWluYWxzIHVudXNlZCBpbiBncmFtbWFyIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWR1Y2UuYzozNzIKK21zZ2lkICJSdWxlcyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgIiIKKworIzogc3JjL3JlZHVjZS5jOjM4NQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dpZF9wbHVyYWwgIiVkIG5vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBzcmMvcmVkdWNlLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnaWRfcGx1cmFsICIlZCBydWxlcyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBzcmMvcmVkdWNlLmM6NDE5CisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0IHN5bWJvbCAlcyBkb2VzIG5vdCBkZXJpdmUgYW55IHNlbnRlbmNlIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYXkgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjI5Cittc2dpZCAiYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjIzMgorbXNnaWQgImZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVzZSBvZiBZWUZBSUwsIHdoaWNoIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDMxIHNyYy9zY2FuLWNvZGUubDo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJzIHRvOiAlYyVzIGF0ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zc2libHkgbWVhbnQ6ICVjIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCBoaWRpbmcgJWMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICIgYXQgJXMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ3MgorIywgYy1mb3JtYXQKK21zZ2lkICIsIGNhbm5vdCBiZSBhY2Nlc3NlZCBmcm9tIG1pZC1ydWxlIGFjdGlvbiBhdCAkJWQiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjUyMSBzcmMvc2Nhbi1ncmFtLmw6NzgzCisjLCBjLWZvcm1hdAorbXNnaWQgImludGVnZXIgb3V0IG9mIHJhbmdlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjE5CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciBhZnRlciAnJWMnLCBleHBlY3RpbmcgaW50ZWdlciwgbGV0dGVyLCAnXycsICdbJywgb3IgJyQnIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uIGJlZm9yZSAkJWQ6ICUuKnMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjYzMworIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246ICUuKnMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNsZWFkaW5nIHJlZmVyZW5jZTogJXMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGxpY2l0IHR5cGUgZ2l2ZW4gaW4gdW50eXBlZCBncmFtbWFyIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJCQgZm9yIHRoZSBtaWRydWxlIGF0ICQlZCBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiQkIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJCVzIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYXkgJywnIHRyZWF0ZWQgYXMgd2hpdGUgc3BhY2UiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRpcmVjdGl2ZTogJXMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50aWZpZXI6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyOTUKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciIKK21zZ2lkX3BsdXJhbCAiaW52YWxpZCBjaGFyYWN0ZXJzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGlkZW50aWZpZXIgaW4gYnJhY2tldGVkIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW4gaWRlbnRpZmllciBleHBlY3RlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MzgxCittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIgaW4gYnJhY2tldGVkIG5hbWUiCittc2dpZF9wbHVyYWwgImludmFsaWQgY2hhcmFjdGVycyBpbiBicmFja2V0ZWQgbmFtZSIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo0ODEgc3JjL3NjYW4tZ3JhbS5sOjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBjaGFyYWN0ZXIgbGl0ZXJhbCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NDg2IHNyYy9zY2FuLWdyYW0ubDo1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0cmEgY2hhcmFjdGVycyBpbiBjaGFyYWN0ZXIgbGl0ZXJhbCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVsbCBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjUzMSBzcmMvc2Nhbi1ncmFtLmw6NTQxIHNyYy9zY2FuLWdyYW0ubDo1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgYWZ0ZXIgXFwtZXNjYXBlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NTczCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY2hhcmFjdGVyIGFmdGVyIFxcLWVzY2FwZTogJXMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjkwMQorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzIGF0IGVuZCBvZiBmaWxlIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo5MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyBhdCBlbmQgb2YgbGluZSIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1za2VsLmw6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuY2xvc2VkICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1za2VsLmw6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBmZXcgYXJndW1lbnRzIGZvciAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tc2tlbC5sOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgZm9yICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltbGlzdC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICQgdmFsdWU6ICQlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUE9TSVggWWFjYyBmb3JiaWRzIGRhc2hlcyBpbiBzeW1ib2wgbmFtZXM6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW10YWIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBzeW1ib2xzIGluIGlucHV0IGdyYW1tYXIgKGxpbWl0IGlzICVkKSIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW10YWIuYzoxNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVkZWNsYXJhdGlvbiBmb3IgPCVzPiIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyByZWRlZmluZWQiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgcmVkZWNsYXJlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6MzY3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVmaW5pbmcgdXNlciB0b2tlbiBudW1iZXIgb2YgJXMiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgaXMgdXNlZCwgYnV0IGlzIG5vdCBkZWZpbmVkIGFzIGEgdG9rZW4gYW5kIGhhcyBubyBydWxlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyB1c2VkIG1vcmUgdGhhbiBvbmNlIGFzIGEgbGl0ZXJhbCBzdHJpbmciCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjQxOAorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgZ2l2ZW4gbW9yZSB0aGFuIG9uZSBsaXRlcmFsIHN0cmluZyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6NTM1CisjLCBjLWZvcm1hdAorbXNnaWQgInVzZXIgdG9rZW4gbnVtYmVyICVkIHJlZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW10YWIuYzo1MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJldmlvdXMgZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW10YWIuYzo5MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHN0YXJ0IHN5bWJvbCAlcyBpcyB1bmRlZmluZWQiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgc3RhcnQgc3ltYm9sICVzIGlzIGEgdG9rZW4iCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjkzNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlJWRlc3RydWN0b3IiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjk1MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJSVkZXN0cnVjdG9yIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW10YWIuYzo5NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdnZWQgJSVwcmludGVyIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW10YWIuYzo5ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdsZXNzICUlcHJpbnRlciIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6NjMgZGpncHAvc3VicGlwZS5jOjI4NiBkamdwcC9zdWJwaXBlLmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92aW5nIG9mICclcycgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzo4NSBkamdwcC9zdWJwaXBlLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3JlYXRpb24gb2YgYSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJzYXZpbmcgc3RkaW4gZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAic2F2aW5nIHN0ZG91dCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjE1MyBkamdwcC9zdWJwaXBlLmM6MTk3IGRqZ3BwL3N1YnBpcGUuYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlbmluZyBvZiB0bXBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIGJpc29uJ3Mgc3Rkb3V0IHRvIHRoZSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBtNCdzIHN0ZGluIGZyb20gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZW5pbmcgb2YgYSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjIxOAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBtNCdzIHN0ZG91dCB0byBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSAnJXMnIGludGVycnVwdGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAic3Vic2lkaWFyeSBwcm9ncmFtICclcycgbm90IGZvdW5kIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgYmlzb24ncyBzdGRpbiBmcm9tIHRoZSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogbGliL2FyZ21hdGNoLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgJXMgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgYXJndW1lbnQgJXMgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjE1MworbXNnaWQgIlZhbGlkIGFyZ3VtZW50cyBhcmU6IgorbXNnc3RyICIiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X2FsbG9jcywgJXUgZnJlZWQgKCUuMmYlJSkuXG4iCittc2dzdHIgIiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfc2V0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfcmVzZXRzLCAldSBjYWNoZWQgKCUuMmYlJSlcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF90ZXN0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfbGlzdHNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTkyCittc2dpZCAiY291bnQgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTUKK21zZ2lkICJzaXplIGxvZyBoaXN0b2dyYW1cbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTk4Cittc2dpZCAiZGVuc2l0eSBoaXN0b2dyYW1cbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCaXRzZXQgc3RhdGlzdGljczpcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkFjY3VtdWxhdGVkIHJ1bnMgPSAldVxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyNTkgbGliL2JpdHNldF9zdGF0cy5jOjI2NAorbXNnaWQgImNhbm5vdCByZWFkIHN0YXRzIGZpbGUiCittc2dzdHIgIiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgc3RhdHMgZmlsZSBzaXplXG4iCittc2dzdHIgIiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI4NyBsaWIvYml0c2V0X3N0YXRzLmM6Mjg5Cittc2dpZCAiY2Fubm90IHdyaXRlIHN0YXRzIGZpbGUiCittc2dzdHIgIiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI5MgorbXNnaWQgImNhbm5vdCBvcGVuIHN0YXRzIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIiIKKworIzogbGliL2Nsb3Nlb3V0LmM6MTEyCittc2dpZCAid3JpdGUgZXJyb3IiCittc2dzdHIgIiIKKworIzogbGliL2Vycm9yLmM6MTg4Cittc2dpZCAiVW5rbm93biBzeXN0ZW0gZXJyb3IiCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjU0NyBsaWIvZ2V0b3B0LmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJyVzJyBpcyBhbWJpZ3VvdXM7IHBvc3NpYmlsaXRpZXM6IgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo2MjQgbGliL2dldG9wdC5jOjYyOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjYzNyBsaWIvZ2V0b3B0LmM6NjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJyVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6Njg1IGxpYi9nZXRvcHQuYzo3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLS0lcycgcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzQyIGxpYi9nZXRvcHQuYzo3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gJy0tJXMnXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjc1MyBsaWIvZ2V0b3B0LmM6NzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uICclYyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo4MDUgbGliL2dldG9wdC5jOjgwOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBvcHRpb24gLS0gJyVjJ1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo4NjEgbGliL2dldG9wdC5jOjg3OCBsaWIvZ2V0b3B0LmM6MTA4OCBsaWIvZ2V0b3B0LmM6MTEwNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICclYydcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6OTM0IGxpYi9nZXRvcHQuYzo5NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLVcgJXMnIGlzIGFtYmlndW91c1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo5NzQgbGliL2dldG9wdC5jOjk5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzoxMDEzIGxpYi9nZXRvcHQuYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9vYnN0YWNrLmM6NDEzIGxpYi9vYnN0YWNrLmM6NDE1IGxpYi94YWxsb2MtZGllLmM6MzQKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9zcGF3bi1waXBlLmM6MTQwIGxpYi9zcGF3bi1waXBlLmM6MTQzIGxpYi9zcGF3bi1waXBlLmM6MjY0CisjOiBsaWIvc3Bhd24tcGlwZS5jOjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIHBpcGUiCittc2dzdHIgIiIKKworIzogbGliL3NwYXduLXBpcGUuYzoyMzQgbGliL3NwYXduLXBpcGUuYzozNDggbGliL3dhaXQtcHJvY2Vzcy5jOjI4MgorIzogbGliL3dhaXQtcHJvY2Vzcy5jOjM1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdWJwcm9jZXNzIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzoKKyMuIEdldCB0cmFuc2xhdGlvbnMgZm9yIG9wZW4gYW5kIGNsb3NpbmcgcXVvdGF0aW9uIG1hcmtzLgorIy4gVGhlIG1lc3NhZ2UgY2F0YWxvZyBzaG91bGQgdHJhbnNsYXRlICJgIiB0byBhIGxlZnQKKyMuIHF1b3RhdGlvbiBtYXJrIHN1aXRhYmxlIGZvciB0aGUgbG9jYWxlLCBhbmQgc2ltaWxhcmx5IGZvcgorIy4gIiciLiAgRm9yIGV4YW1wbGUsIGEgRnJlbmNoIFVuaWNvZGUgbG9jYWwgc2hvdWxkIHRyYW5zbGF0ZQorIy4gdGhlc2UgdG8gVSswMEFCIChMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRQorIy4gUVVPVEFUSU9OIE1BUkspLCBhbmQgVSswMEJCIChSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUKKyMuIFFVT1RBVElPTiBNQVJLKSwgcmVzcGVjdGl2ZWx5LgorIy4KKyMuIElmIHRoZSBjYXRhbG9nIGhhcyBubyB0cmFuc2xhdGlvbiwgd2Ugd2lsbCB0cnkgdG8KKyMuIHVzZSBVbmljb2RlIFUrMjAxOCAoTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspIGFuZAorIy4gVW5pY29kZSBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykuICBJZiB0aGUKKyMuIGN1cnJlbnQgbG9jYWxlIGlzIG5vdCBVbmljb2RlLCBsb2NhbGVfcXVvdGluZ19zdHlsZQorIy4gd2lsbCBxdW90ZSAnbGlrZSB0aGlzJywgYW5kIGNsb2NhbGVfcXVvdGluZ19zdHlsZSB3aWxsCisjLiBxdW90ZSAibGlrZSB0aGlzIi4gIFlvdSBzaG91bGQgYWx3YXlzIGluY2x1ZGUgdHJhbnNsYXRpb25zCisjLiBmb3IgImAiIGFuZCAiJyIgZXZlbiBpZiBVKzIwMTggYW5kIFUrMjAxOSBhcmUgYXBwcm9wcmlhdGUKKyMuIGZvciB5b3VyIGxvY2FsZS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFya3NfaW5fb3RoZXJfbGFuZ3VhZ2VzPgorIy4gYW5kIHVzZSBnbHlwaHMgc3VpdGFibGUgZm9yIHlvdXIgbGFuZ3VhZ2UuCisjOiBsaWIvcXVvdGVhcmcuYzozMTIKK21zZ2lkICJgIgorbXNnc3RyICIiCisKKyM6IGxpYi9xdW90ZWFyZy5jOjMxMworbXNnaWQgIiciCittc2dzdHIgIiIKKworIzogbGliL3RpbWV2YXIuYzo0NzUKK21zZ2lkICIiCisiXG4iCisiRXhlY3V0aW9uIHRpbWVzIChzZWNvbmRzKVxuIgorbXNnc3RyICIiCisKKyM6IGxpYi90aW1ldmFyLmM6NTI1Cittc2dpZCAiIFRPVEFMICAgICAgICAgICAgICAgICA6IgorbXNnc3RyICIiCisKKyM6IGxpYi90aW1ldmFyLmM6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWUgaW4gJXM6ICVsZC4lMDZsZCAoJWxkJSUpXG4iCittc2dzdHIgIiIKKworIzogbGliL3czMnNwYXduLmg6NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiX29wZW5fb3NmaGFuZGxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvdzMyc3Bhd24uaDo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdG9yZSBmZCAlZDogZHVwMiBmYWlsZWQiCittc2dzdHIgIiIKKworIzogbGliL3dhaXQtcHJvY2Vzcy5jOjIyMyBsaWIvd2FpdC1wcm9jZXNzLmM6MjU1IGxpYi93YWl0LXByb2Nlc3MuYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6Mjc0IGxpYi93YWl0LXByb2Nlc3MuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyBnb3QgZmF0YWwgc2lnbmFsICVkIgorbXNnc3RyICIiCmRpZmYgLS1naXQgYS9wby9ib2xkcXVvdC5zZWQgYi9wby9ib2xkcXVvdC5zZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI5MzdhYQotLS0gL2Rldi9udWxsCisrKyBiL3BvL2JvbGRxdW90LnNlZApAQCAtMCwwICsxLDEwIEBACitzLyJcKFteIl0qXCkiL+KAnFwx4oCdL2cKK3MvYFwoW15gJ10qXCknL+KAmFwx4oCZL2cKK3MvICdcKFteYCddKlwpJyAvIOKAmFwx4oCZIC9nCitzLyAnXChbXmAnXSpcKSckLyDigJhcMeKAmS9nCitzL14nXChbXmAnXSpcKScgL+KAmFwx4oCZIC9nCitzL+KAnOKAnS8iIi9nCitzL+KAnC/igJwbWzFtL2cKK3Mv4oCdLxtbMG3igJ0vZworcy/igJgv4oCYG1sxbS9nCitzL+KAmS8bWzBt4oCZL2cKZGlmZiAtLWdpdCBhL3BvL2RhLmdtbyBiL3BvL2RhLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2FiNmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vZGEuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2RhLnBvIGIvcG8vZGEucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM2ZTg5MgotLS0gL2Rldi9udWxsCisrKyBiL3BvL2RhLnBvCkBAIC0wLDAgKzEsMTI0MyBAQAorIyBEYW5pc2ggbWVzc2FnZXMgZm9yIGJpc29uLgorIyBDb3B5cmlnaHQgqSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBLZWxkIFNpbW9uc2VuIDxrZWxkQGRrdXVnLmRrPiwgMjAwMi4KKyMgQnlyaWFsIE9sZSBKZW5zZW4gPGJ5cmlhbEBpbWFnZS5kaz4sIDIwMDItMjAwNC4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGJpc29uIDEuODc1ZFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBidWctYmlzb25AZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEyLTEyLTEyIDE2OjA5KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA0LTA1LTIyIDExOjE0KzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEJ5cmlhbCBPbGUgSmVuc2VuIDxieXJpYWxAaW1hZ2UuZGs+XG4iCisiTGFuZ3VhZ2UtVGVhbTogRGFuaXNoIDxkYW5za0BrbGlkLmRrPlxuIgorIkxhbmd1YWdlOiBkYVxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PWlzby04ODU5LTFcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IHNyYy9jb21wbGFpbi5jOjEyMCBzcmMvY29tcGxhaW4uYzoxMzEgc3JjL2NvbXBsYWluLmM6MTQwIHNyYy9jb21wbGFpbi5jOjE4OAorIzogc3JjL2NvbXBsYWluLmM6MTk4Cittc2dpZCAid2FybmluZyIKK21zZ3N0ciAiYWR2YXJzZWwiCisKKyM6IHNyYy9jb21wbGFpbi5jOjE1MSBzcmMvY29tcGxhaW4uYzoxNjAgc3JjL2NvbXBsYWluLmM6MTY3CisjLCBmdXp6eQorbXNnaWQgImVycm9yIgorbXNnc3RyICJGZWpsIHZlZCBpbmQtIGVsbGVyIHVkbOZzbmluZyIKKworIzogc3JjL2NvbXBsYWluLmM6MjA4IHNyYy9jb21wbGFpbi5jOjIxNQorIywgZnV6enkKK21zZ2lkICJmYXRhbCBlcnJvciIKK21zZ3N0ciAiZmF0YWwgZmVqbDogIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgc2hpZnQiCittc2dzdHIgIiAgICBLb25mbGlrdCBtZWxsZW0gcmVnZWwgJWQgb2cgZWxlbWVudCAlcyBs+HN0ZXMgc29tIHNraWZ0IgorCisjOiBzcmMvY29uZmxpY3RzLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgcmVkdWNlIgorbXNnc3RyICIgICAgS29uZmxpa3QgbWVsbGVtIHJlZ2VsICVkIG9nIGVsZW1lbnQgJXMgbPhzdGVzIHNvbSByZWR1Y+lyIgorCisjOiBzcmMvY29uZmxpY3RzLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgYW4gZXJyb3IiCittc2dzdHIgIiAgICBLb25mbGlrdCBtZWxsZW0gcmVnZWwgJWQgb2cgZWxlbWVudCAlcyBs+HN0ZXMgc29tIGVuIGZlamwiCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCBzaGlmdC9yZWR1Y2UsICVkIHJlZHVjZS9yZWR1Y2VcbiIKK21zZ3N0ciAia29uZmxpa3RlcjogJWQgc2tpZnQvcmVkdWPpciwgJWQgcmVkdWPpci9yZWR1Y+lyXG4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCBzaGlmdC9yZWR1Y2VcbiIKK21zZ3N0ciAia29uZmxpa3RlcjogICVkIHNraWZ0L3JlZHVj6XJcbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdHM6ICVkIHJlZHVjZS9yZWR1Y2VcbiIKK21zZ3N0ciAia29uZmxpa3RlcjogICVkIHJlZHVj6XIvcmVkdWPpclxuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YXRlICVkICIKK21zZ3N0ciAiVGlsc3RhbmQgJWQgIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlZXhwZWN0LXJyIGFwcGxpZXMgb25seSB0byBHTFIgcGFyc2VycyIKK21zZ3N0ciAiJSVleHBlY3QtcnIga2FuIGt1biBicnVnZXMgdmVkIEdMUi1mb3J0b2xrZXJlIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NjE2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICVkIHNoaWZ0L3JlZHVjZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiZXhwZWN0ZWQgJWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAiZm9ydmVudGVkZSAlZCBza2lmdC9yZWR1Y+lyLWtvbmZsaWt0IgorbXNnc3RyWzFdICJmb3J2ZW50ZWRlICVkIHNraWZ0L3JlZHVj6XIta29uZmxpa3RlciIKKworIzogc3JjL2NvbmZsaWN0cy5jOjYyMQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCAlZCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJleHBlY3RlZCAlZCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAiZm9ydmVudGVkZSAlZCByZWR1Y+lyL3JlZHVj6XIta29uZmxpa3QiCittc2dzdHJbMV0gImZvcnZlbnRlZGUgJWQgcmVkdWPpci9yZWR1Y+lyLWtvbmZsaWt0ZXIiCisKKyM6IHNyYy9maWxlcy5jOjExNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBvcGVuIgorbXNnc3RyICJrYW4gaWtrZSDlYm5lIGZpbGVuIFwiJXNcIiIKKworIzogc3JjL2ZpbGVzLmM6MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImlucHV0L291dHB1dCBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBzcmMvZmlsZXMuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNsb3NlIGZpbGUiCittc2dzdHIgImthbiBpa2tlIGx1a2tlIGZpbCIKKworIzogc3JjL2ZpbGVzLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIG92ZXJ3cml0ZSB0aGUgaW5wdXQgZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvZmlsZXMuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3Rpbmcgb3V0cHV0cyB0byBmaWxlICVzIgorbXNnc3RyICJrb25mbGlrdGVuZGUgdWRkYXRhIHRpbCBmaWxlbiAlcyIKKworIzogc3JjL2dldGFyZ3MuYzoyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5IGAlcyAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIgorbXNnc3RyICJQcvh2IG1lZCBcIiVzIC0taGVscFwiIGZvciBtZXJlIGluZm9ybWF0aW9uLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgW09QVElPTl0uLi4gRklMRVxuIgorbXNnc3RyICJCcnVnOiAlcyBbRkxBR10uLi4gRklMXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzAyCittc2dpZCAiIgorIkdlbmVyYXRlIGEgZGV0ZXJtaW5pc3RpYyBMUiBvciBnZW5lcmFsaXplZCBMUiAoR0xSKSBwYXJzZXIgZW1wbG95aW5nXG4iCisiTEFMUigxKSwgSUVMUigxKSwgb3IgY2Fub25pY2FsIExSKDEpIHBhcnNlciB0YWJsZXMuICBJRUxSKDEpIGFuZFxuIgorImNhbm9uaWNhbCBMUigxKSBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwOQorbXNnaWQgIiIKKyJNYW5kYXRvcnkgYXJndW1lbnRzIHRvIGxvbmcgb3B0aW9ucyBhcmUgbWFuZGF0b3J5IGZvciBzaG9ydCBvcHRpb25zIHRvby5cbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjMxMgorbXNnaWQgIlRoZSBzYW1lIGlzIHRydWUgZm9yIG9wdGlvbmFsIGFyZ3VtZW50cy5cbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjMxNgorbXNnaWQgIiIKKyJcbiIKKyJPcGVyYXRpb24gbW9kZXM6XG4iCisiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIKKyIgICAgICAtLXByaW50LWxvY2FsZWRpciAgICAgIG91dHB1dCBkaXJlY3RvcnkgY29udGFpbmluZyBsb2NhbGUtZGVwZW5kZW50ICIKKyJkYXRhXG4iCisiICAgICAgLS1wcmludC1kYXRhZGlyICAgICAgICBvdXRwdXQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgc2tlbGV0b25zIGFuZCBYU0xUXG4iCisiICAteSwgLS15YWNjICAgICAgICAgICAgICAgICBlbXVsYXRlIFBPU0lYIFlhY2NcbiIKKyIgIC1XLCAtLXdhcm5pbmdzWz1DQVRFR09SWV0gIHJlcG9ydCB0aGUgd2FybmluZ3MgZmFsbGluZyBpbiBDQVRFR09SWVxuIgorIiAgLWYsIC0tZmVhdHVyZVs9RkVBVFVSRV0gICAgYWN0aXZhdGUgbWlzY2VsbGFuZW91cyBmZWF0dXJlc1xuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6MzI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFyc2VyOlxuIgorIiAgLUwsIC0tbGFuZ3VhZ2U9TEFOR1VBR0UgICAgICAgICAgc3BlY2lmeSB0aGUgb3V0cHV0IHByb2dyYW1taW5nIGxhbmd1YWdlXG4iCisiICAtUywgLS1za2VsZXRvbj1GSUxFICAgICAgICAgICAgICBzcGVjaWZ5IHRoZSBza2VsZXRvbiB0byB1c2VcbiIKKyIgIC10LCAtLWRlYnVnICAgICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnQgdGhlIHBhcnNlciBmb3IgZGVidWdnaW5nXG4iCisiICAgICAgLS1sb2NhdGlvbnMgICAgICAgICAgICAgICAgICBlbmFibGUgbG9jYXRpb24gc3VwcG9ydFxuIgorIiAgLUQsIC0tZGVmaW5lPU5BTUVbPVZBTFVFXSAgICAgICAgc2ltaWxhciB0byAnJWRlZmluZSBOQU1FIFwiVkFMVUVcIidcbiIKKyIgIC1GLCAtLWZvcmNlLWRlZmluZT1OQU1FWz1WQUxVRV0gIG92ZXJyaWRlICclZGVmaW5lIE5BTUUgXCJWQUxVRVwiJ1xuIgorIiAgLXAsIC0tbmFtZS1wcmVmaXg9UFJFRklYICAgICAgICAgcHJlcGVuZCBQUkVGSVggdG8gdGhlIGV4dGVybmFsIHN5bWJvbHNcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQgYnkgJy1EYXBpLnByZWZpeD1QUkVGSVgnXG4iCisiICAtbCwgLS1uby1saW5lcyAgICAgICAgICAgICAgICAgICBkb24ndCBnZW5lcmF0ZSAnI2xpbmUnIGRpcmVjdGl2ZXNcbiIKKyIgIC1rLCAtLXRva2VuLXRhYmxlICAgICAgICAgICAgICAgIGluY2x1ZGUgYSB0YWJsZSBvZiB0b2tlbiBuYW1lc1xuIgorbXNnc3RyICIiCisiRm9ydG9sa2VyOlxuIgorIiAgLVMsIC0tc2tlbGV0b249RklMICAgICAgICAgYW5naXYgc2tlbGV0ZmlsZW4gc29tIHNrYWwgYnJ1Z2VzXG4iCisiICAtdCwgLS1kZWJ1ZyAgICAgICAgICAgICAgICBpbnN0cnVtZW506XIgZm9ydG9sa2VyZW4gZm9yIGZlamxz+GduaW5nXG4iCisiICAgICAgLS1sb2NhdGlvbnMgICAgICAgICAgICBha3RpdulyIHRpbHN0YW5kc2JlcmVnbmluZ1xuIgorIiAgLXAsIC0tbmFtZS1wcmVmaXg9UFLGRklLUyAgdGlsZvhqIFBSxkZJS1MgZm9yIGVrc3Rlcm5lIHN5bWJvbGVyXG4iCisiICAtbCwgLS1uby1saW5lcyAgICAgICAgICAgICBnZW5lculyIGlra2UgXCIjbGluZVwiLWRpcmVrdGl2ZXJcbiIKKyIgIC1uLCAtLW5vLXBhcnNlciAgICAgICAgICAgIGdlbmVy6XIga3VuIHRhYmVsbGVybmVcbiIKKyIgIC1rLCAtLXRva2VuLXRhYmxlICAgICAgICAgIGlua2x1ZOlyIGVuIHRhYmVsIG92ZXIgZWxlbWVudG5hdm5lXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzQ2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJPdXRwdXQ6XG4iCisiICAgICAgLS1kZWZpbmVzWz1GSUxFXSAgICAgICBhbHNvIHByb2R1Y2UgYSBoZWFkZXIgZmlsZVxuIgorIiAgLWQgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZXdpc2UgYnV0IGNhbm5vdCBzcGVjaWZ5IEZJTEUgKGZvciBQT1NJWCAiCisiWWFjYylcbiIKKyIgIC1yLCAtLXJlcG9ydD1USElOR1MgICAgICAgIGFsc28gcHJvZHVjZSBkZXRhaWxzIG9uIHRoZSBhdXRvbWF0b25cbiIKKyIgICAgICAtLXJlcG9ydC1maWxlPUZJTEUgICAgIHdyaXRlIHJlcG9ydCB0byBGSUxFXG4iCisiICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgICBzYW1lIGFzIGAtLXJlcG9ydD1zdGF0ZSdcbiIKKyIgIC1iLCAtLWZpbGUtcHJlZml4PVBSRUZJWCAgIHNwZWNpZnkgYSBQUkVGSVggZm9yIG91dHB1dCBmaWxlc1xuIgorIiAgLW8sIC0tb3V0cHV0PUZJTEUgICAgICAgICAgbGVhdmUgb3V0cHV0IHRvIEZJTEVcbiIKKyIgIC1nLCAtLWdyYXBoWz1GSUxFXSAgICAgICAgIGFsc28gb3V0cHV0IGEgZ3JhcGggb2YgdGhlIGF1dG9tYXRvblxuIgorIiAgLXgsIC0teG1sWz1GSUxFXSAgICAgICAgICAgYWxzbyBvdXRwdXQgYW4gWE1MIHJlcG9ydCBvZiB0aGUgYXV0b21hdG9uXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhlIFhNTCBzY2hlbWEgaXMgZXhwZXJpbWVudGFsKVxuIgorbXNnc3RyICIiCisiVWRkYXRhOlxuIgorIiAgLWQsIC0tZGVmaW5lcyAgICAgICAgICAgICAgbGF2IG9nc+UgZW4gaG92ZWRmaWxcbiIKKyIgIC1yLCAtLXJlcG9ydD1TQUdFUiAgICAgICAgIGxhdiBvZ3PlIGRldGFsamVyIG9tIGF1dG9tYXRlblxuIgorIiAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgc2FtbWUgc29tIFwiLS1yZXBvcnQ9c3RhdGVcIlxuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg9UFLGRklLUyAgYW5naXYgZXQgUFLGRklLUyBmb3IgdWRkYXRhZmlsZXJcbiIKKyIgIC1vLCAtLW91dHB1dD1GSUwgICAgICAgICAgIGzmZyB1ZGRhdGEgaSBGSUxcbiIKKyIgIC1nLCAtLWdyYXBoICAgICAgICAgICAgICAgIGxhdiBvZ3PlIGVuIFZDRy1iZXNrcml2ZWxzZSBhZiBhdXRvbWF0ZW5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozNjEKK21zZ2lkICIiCisiV2FybmluZyBjYXRlZ29yaWVzIGluY2x1ZGU6XG4iCisiICBgbWlkcnVsZS12YWx1ZXMnICB1bnNldCBvciB1bnVzZWQgbWlkcnVsZSB2YWx1ZXNcbiIKKyIgIGB5YWNjJyAgICAgICAgICAgIGluY29tcGF0aWJpbGl0aWVzIHdpdGggUE9TSVggWWFjY1xuIgorIiAgYGNvbmZsaWN0cy1zcicgICAgUy9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGNvbmZsaWN0cy1ycicgICAgUi9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGRlcHJlY2F0ZWQnICAgICAgb2Jzb2xldGUgY29uc3RydWN0c1xuIgorIiAgYG90aGVyJyAgICAgICAgICAgYWxsIG90aGVyIHdhcm5pbmdzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgYWxsJyAgICAgICAgICAgICBhbGwgdGhlIHdhcm5pbmdzXG4iCisiICBgbm8tQ0FURUdPUlknICAgICB0dXJuIG9mZiB3YXJuaW5ncyBpbiBDQVRFR09SWVxuIgorIiAgYG5vbmUnICAgICAgICAgICAgdHVybiBvZmYgYWxsIHRoZSB3YXJuaW5nc1xuIgorIiAgYGVycm9yJyAgICAgICAgICAgdHJlYXQgd2FybmluZ3MgYXMgZXJyb3JzXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozNzYKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRISU5HUyBpcyBhIGxpc3Qgb2YgY29tbWEgc2VwYXJhdGVkIHdvcmRzIHRoYXQgY2FuIGluY2x1ZGU6XG4iCisiICBgc3RhdGUnICAgICAgICBkZXNjcmliZSB0aGUgc3RhdGVzXG4iCisiICBgaXRlbXNldCcgICAgICBjb21wbGV0ZSB0aGUgY29yZSBpdGVtIHNldHMgd2l0aCB0aGVpciBjbG9zdXJlXG4iCisiICBgbG9va2FoZWFkJyAgICBleHBsaWNpdGx5IGFzc29jaWF0ZSBsb29rYWhlYWQgdG9rZW5zIHRvIGl0ZW1zXG4iCisiICBgc29sdmVkJyAgICAgICBkZXNjcmliZSBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIHNvbHZpbmdcbiIKKyIgIGBhbGwnICAgICAgICAgIGluY2x1ZGUgYWxsIHRoZSBhYm92ZSBpbmZvcm1hdGlvblxuIgorIiAgYG5vbmUnICAgICAgICAgZGlzYWJsZSB0aGUgcmVwb3J0XG4iCittc2dzdHIgIiIKKyJUSU5HIGVyIGVuIGxpc3RlIG1lZCBrb21tYXNlcGFyZXJlZGUgb3JkIHNvbSBrYW4gaW5kZWhvbGRlOlxuIgorIiAgXCJzdGF0ZVwiICAgICAgICBiZXNrcml2IHRpbHN0YW5kZW5lXG4iCisiICBcIml0ZW1zZXRcIiAgICAgIGtvbXBsZXR06XIga2VybmVvYmpla3Rt5m5nZGVybmUgbWVkIGRlcmVzIGFmc2x1dG5pbmdlclxuIgorIiAgXCJsb29rYWhlYWRcIiAgICBrb2JsIHVkdHJ5a2tlbGlndCBmcmVtYWRraWcgdGlsIG9iamVrdGVyXG4iCisiICBcInNvbHZlZFwiICAgICAgIGJlc2tyaXYgbPhzbmluZ2VyIGFmIHNraWZ0L3JlZHVj6XIta29uZmxpa3RlclxuIgorIiAgXCJhbGxcIiAgICAgICAgICBpbmtsdWTpciBhbCBvdmVuc3TlZW5kZSBpbmZvcm1hdGlvblxuIgorIiAgXCJub25lXCIgICAgICAgICBkZWFrdGl26XIgcmFwcG9ydGVuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzg3Cittc2dpZCAiIgorIkZFQVRVUkUgaXMgYSBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCB3b3JkcyB0aGF0IGNhbiBpbmNsdWRlOlxuIgorIiAgYGNhcmV0JyAgICAgICAgc2hvdyBlcnJvcnMgd2l0aCBjYXJldHNcbiIKKyIgIGBhbGwnICAgICAgICAgIGFsbCBvZiB0aGUgYWJvdmVcbiIKKyIgIGBub25lJyAgICAgICAgIGRpc2FibGUgYWxsIG9mIHRoZSBhYm92ZVxuIgorIiAgIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorbXNnc3RyICIiCisiUmFwcG9ydOlyIGZlamwgdGlsIDxidWctYmlzb25AZ251Lm9yZz4uXG4iCisiUmFwcG9ydOlyIHN5bnB1bmt0ZXIgb20gb3ZlcnPmdHRlbHNlbiB0aWwgPGRhbnNrQGtsaWQuZGs+LlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBob21lIHBhZ2U6IDwlcz4uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozOTcKK21zZ2lkICJHZW5lcmFsIGhlbHAgdXNpbmcgR05VIHNvZnR3YXJlOiA8aHR0cDovL3d3dy5nbnUub3JnL2dldGhlbHAvPi5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogUmVwbGFjZSBMQU5HX0NPREUgaW4gdGhpcyBVUkwgd2l0aCB5b3VyIGxhbmd1YWdlCisjLiBjb2RlIDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtL0xBTkdfQ09ERS5odG1sPiB0bworIy4gZm9ybSBvbmUgb2YgdGhlIFVSTHMgYXQgaHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS8uCisjLiBPdGhlcndpc2UsIHJlcGxhY2UgdGhlIGVudGlyZSBVUkwgd2l0aCB5b3VyIHRyYW5zbGF0aW9uIHRlYW0ncworIy4gZW1haWwgYWRkcmVzcy4KKyM6IHNyYy9nZXRhcmdzLmM6NDEwCittc2dpZCAiUmVwb3J0IHRyYW5zbGF0aW9uIGJ1Z3MgdG8gPGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vPi5cbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjQxMgorbXNnaWQgIkZvciBjb21wbGV0ZSBkb2N1bWVudGF0aW9uLCBydW46IGluZm8gYmlzb24uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmlzb24gKEdOVSBCaXNvbikgJXMiCittc2dzdHIgImJpc29uIChHTlUgQmlzb24pICVzIgorCisjOiBzcmMvZ2V0YXJncy5jOjQzMAorbXNnaWQgIldyaXR0ZW4gYnkgUm9iZXJ0IENvcmJldHQgYW5kIFJpY2hhcmQgU3RhbGxtYW4uXG4iCittc2dzdHIgIlNrcmV2ZXQgYWYgUm9iZXJ0IENvcmJldHQgb2cgUmljaGFyZCBTdGFsbG1hbi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29weXJpZ2h0IChDKSAlZCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKK21zZ3N0ciAiQ29weXJpZ2h0IKkgJWQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDM3Cittc2dpZCAiIgorIlRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PXG4iCisid2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuXG4iCittc2dzdHIgIiIKKyJEZXR0ZSBlciBmcml0IHByb2dyYW1tZWwsIHNlIGtpbGRla29kZW4gZm9yIGtvcGllcmluZ3NiZXRpbmdlbHNlci4gRGVyXG4iCisiZ2l2ZXMgSU5HRU4gZ2FyYW50aSwgZW5kb2cgaWtrZSBmb3IgU0FMR0JBUkhFRCBlbGxlciBFR05FVEhFRCBGT1IgTk9HRVRcbiIKKyJCRVNURU1UIEZPUk3FTC5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0NTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHNrZWxldG9uIGRlY2xhcmF0aW9ucyBhcmUgaW52YWxpZCIKK21zZ3N0ciAiZmxlcmUgJXMtZGVrbGFyYXRpb25lciIKKworIzogc3JjL2dldGFyZ3MuYzo0NzYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIGxhbmd1YWdlIgorbXNnc3RyICJmZWpsYWd0aWcgduZyZGk6ICVzIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ3OQorIywgZnV6enkKK21zZ2lkICJtdWx0aXBsZSBsYW5ndWFnZSBkZWNsYXJhdGlvbnMgYXJlIGludmFsaWQiCittc2dzdHIgImZsZXJlICVzLWRla2xhcmF0aW9uZXIiCisKKyM6IHNyYy9nZXRhcmdzLmM6NzQ3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogbWlzc2luZyBvcGVyYW5kIgorbXNnc3RyICJtYW5nbGVuZGUgb3BlcmFuZCBlZnRlciBcIiVzXCIiCisKKyM6IHNyYy9nZXRhcmdzLmM6NzQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJleHRyYSBvcGVyYW5kICVzIgorbXNnc3RyICJvdmVydGFsbGlnIG9wZXJhbmQgXCIlc1wiIgorCisjOiBzcmMvZ3JhbS5jOjExMgorbXNnaWQgImVtcHR5IgorbXNnc3RyICJ0b20iCisKKyM6IHNyYy9ncmFtLmM6MjAxCittc2dpZCAiR3JhbW1hciIKK21zZ3N0ciAiR3JhbW1hdGlrIgorCisjOiBzcmMvZ3JhcGh2aXouYzo0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiLy8gR2VuZXJhdGVkIGJ5ICVzLlxuIgorIi8vIFJlcG9ydCBidWdzIHRvIDwlcz4uXG4iCisiLy8gSG9tZSBwYWdlOiA8JXM+LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9sb2NhdGlvbi5jOjkzIHNyYy9zY2FuLWdyYW0ubDo4NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSBudW1iZXIgb3ZlcmZsb3ciCittc2dzdHIgIiIKKworIzogc3JjL2xvY2F0aW9uLmM6OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29sdW1uIG51bWJlciBvdmVyZmxvdyIKK21zZ3N0ciAiIgorCisjOiBzcmMvbWFpbi5jOjE0NgorIywgZnV6enkKK21zZ2lkICJydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHMiCittc2dzdHIgInJlZ2VsIGFsZHJpZyByZWR1Y2VyZXQgcOUgZ3J1bmQgYWYga29uZmxpa3RlciIKKworIzogc3JjL211c2NsZS10YWIuYzo0NTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiUlZGVmaW5lIHZhcmlhYmxlICVzIHJlZGVmaW5lZCIKK21zZ3N0ciAic3ltYm9sICVzIHJlZGVmaW5lcmV0IgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ1MworbXNnaWQgInByZXZpb3VzIGRlZmluaXRpb24iCittc2dzdHIgIiIKKworIzogc3JjL211c2NsZS10YWIuYzo0OTAgc3JjL211c2NsZS10YWIuYzo1MDQgc3JjL211c2NsZS10YWIuYzo1NTYKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgJXMiCittc2dzdHIgIiIKKworIzogc3JjL211c2NsZS10YWIuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJSVkZWZpbmUgQm9vbGVhbiB2YXJpYWJsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjYwOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlJWRlZmluZSB2YXJpYWJsZSAlczogJXMiCittc2dzdHIgIiIKKworIzogc3JjL211c2NsZS10YWIuYzo2MTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImFjY2VwdGVkIHZhbHVlOiAlcyIKK21zZ3N0ciAiZmVqbGFndGlnIHbmcmRpOiAlcyIKKworIzogc3JjL3BhcnNlLWdyYW0ueTo3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBpZGVudGlmaWVyIGluIHBhcmFtZXRlciBkZWNsYXJhdGlvbiIKK21zZ3N0ciAibWFuZ2xlbmRlIGlkZW50aWZpa2F0b3IgaSBwYXJhbWV0ZXJkZWtsYXJhdGlvbiIKKworIzogc3JjL3ByaW50LmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIHR5cGUgJWQgaXMgJXNcbiIKK21zZ3N0ciAiIHR5cGUgJWQgZXIgJXNcbiIKKworIzogc3JjL3ByaW50LmM6MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgInNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgJWRcbiIKK21zZ3N0ciAic2tpZnQsIG9nIGflIHRpbCB0aWxzdGFuZCAlZFxuIgorCisjOiBzcmMvcHJpbnQuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ28gdG8gc3RhdGUgJWRcbiIKK21zZ3N0ciAiZ+UgdGlsIHRpbHN0YW5kICVkXG4iCisKKyM6IHNyYy9wcmludC5jOjIwMworbXNnaWQgImVycm9yIChub25hc3NvY2lhdGl2ZSlcbiIKK21zZ3N0ciAiZmVqbCAoaWtrZS1hc3NvY2lhdGl2KVxuIgorCisjOiBzcmMvcHJpbnQuYzoyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkdWNlIHVzaW5nIHJ1bGUgJWQgKCVzKSIKK21zZ3N0ciAicmVkdWPpciBtZWQgcmVnZWwgJWQgKCVzKSIKKworIzogc3JjL3ByaW50LmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgImFjY2VwdCIKK21zZ3N0ciAiYWNjZXB06XIiCisKKyM6IHNyYy9wcmludC5jOjI2NCBzcmMvcHJpbnQuYzozMzgKK21zZ2lkICIkZGVmYXVsdCIKK21zZ3N0ciAiJGRlZmF1bHQiCisKKyM6IHNyYy9wcmludC5jOjM3MyBzcmMvcHJpbnRfZ3JhcGguYzo3OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU3RhdGUgJWQiCittc2dzdHIgIlRpbHN0YW5kICVkICIKKworIzogc3JjL3ByaW50LmM6NDA5Cittc2dpZCAiVGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyIgorbXNnc3RyICJUZXJtaW5hbGVyLCBtZWQgcmVnbGVyIGh2b3IgZGUgZm9yZWtvbW1lciIKKworIzogc3JjL3ByaW50LmM6NDM2Cittc2dpZCAiTm9udGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyIgorbXNnc3RyICJJa2tlLXRlcm1pbmFsZXIsIG1lZCByZWdsZXIgaHZvciBkZSBmb3Jla29tbWVyIgorCisjOiBzcmMvcHJpbnQuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uIGxlZnQ6IgorbXNnc3RyICIgdGlsIHZlbnN0cmU6IgorCisjOiBzcmMvcHJpbnQuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uIHJpZ2h0OiIKK21zZ3N0ciAiIHRpbCBo+GpyZToiCisKKyM6IHNyYy9wcmludC5jOjUxMAorIywgZnV6enkKK21zZ2lkICJSdWxlcyB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzIgorbXNnc3RyICJyZWdlbCBhbGRyaWcgcmVkdWNlcmV0IHDlIGdydW5kIGFmIGtvbmZsaWt0ZXIiCisKKyM6IHNyYy9yZWFkZXIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSAlcyBkZWNsYXJhdGlvbnMiCittc2dzdHIgImZsZXJlICVzLWRla2xhcmF0aW9uZXIiCisKKyM6IHNyYy9yZWFkZXIuYzoxMzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInJlc3VsdCB0eXBlIGNsYXNoIG9uIG1lcmdlIGZ1bmN0aW9uICVzOiA8JXM+ICE9IDwlcz4iCittc2dzdHIgInJlc3VsdGF0dHlwZWtvbmZsaWt0IHZlZCBzYW1tZW5mbGV0bmluZ3NmdW5rdGlvbiAlczogPCVzPiAhPSA8JXM+IgorCisjOiBzcmMvcmVhZGVyLmM6MTM5IHNyYy9zeW10YWIuYzoxNTYgc3JjL3N5bXRhYi5jOjE2NiBzcmMvc3ltdGFiLmM6OTM4CisjOiBzcmMvc3ltdGFiLmM6OTUzIHNyYy9zeW10YWIuYzo5Njggc3JjL3N5bXRhYi5jOjk4MworIywgZnV6enkKK21zZ2lkICJwcmV2aW91cyBkZWNsYXJhdGlvbiIKK21zZ3N0ciAiZmxlcmUgJXMtZGVrbGFyYXRpb25lciIKKworIzogc3JjL3JlYWRlci5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGVkIHN5bWJvbCBuYW1lIGZvciAlcyBpZ25vcmVkIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzoyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVsZSBnaXZlbiBmb3IgJXMsIHdoaWNoIGlzIGEgdG9rZW4iCittc2dzdHIgInJlZ2VsIGdpdmV0IGZvciAlcyBzb20gZXIgZXQgZWxlbWVudCIKKworIzogc3JjL3JlYWRlci5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ0eXBlIGNsYXNoIG9uIGRlZmF1bHQgYWN0aW9uOiA8JXM+ICE9IDwlcz4iCittc2dzdHIgInR5cGVrb25mbGlrdCBmb3Igc3RhbmRhcmRoYW5kbGluZzogPCVzPiAhPSA8JXM+IgorCisjOiBzcmMvcmVhZGVyLmM6MzEwCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IHJ1bGUgZm9yIHR5cGVkIG5vbnRlcm1pbmFsLCBhbmQgbm8gYWN0aW9uIgorbXNnc3RyICJ0b20gcmVnZWwgZm9yIHR5cGV0IGlra2UtdGVybWluYWwsIG9nIGluZ2VuIGhhbmRsaW5nIgorCisjOiBzcmMvcmVhZGVyLmM6MzI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bnVzZWQgdmFsdWU6ICQlZCIKK21zZ3N0ciAiZmVqbGFndGlnIHbmcmRpOiAlcyIKKworIzogc3JjL3JlYWRlci5jOjMzMAorbXNnaWQgInVuc2V0IHZhbHVlOiAkJCIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVhZGVyLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgInRva2VuIGZvciAlJXByZWMgaXMgbm90IGRlZmluZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzo0MzEgc3JjL3JlYWRlci5jOjQ0NSBzcmMvcmVhZGVyLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgb25lICVzIGFsbG93ZWQgcGVyIHJ1bGUiCittc2dzdHIgImt1biBlbiAlcyB0aWxsYWR0IHBlciByZWdlbCIKKworIzogc3JjL3JlYWRlci5jOjQ0MSBzcmMvcmVhZGVyLmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFmZmVjdHMgb25seSBHTFIgcGFyc2VycyIKK21zZ3N0ciAiJXMgcOV2aXJrZXIga3VuIEdMUi1mb3J0b2xrZXJlIgorCisjOiBzcmMvcmVhZGVyLmM6NDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIG11c3QgYmUgZm9sbG93ZWQgYnkgcG9zaXRpdmUgbnVtYmVyIgorbXNnc3RyICIlcyBza2FsIGb4bGdlcyBhZiBldCBwb3NpdGl2dCB0YWwiCisKKyM6IHNyYy9yZWFkZXIuYzo1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVsZSBpcyB0b28gbG9uZyIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVhZGVyLmM6NjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJ1bGVzIGluIHRoZSBpbnB1dCBncmFtbWFyIgorbXNnc3RyICJpbmdlbiByZWdsZXIgaSBpbmRkYXRhZ3JhbW1hdGlra2VuIgorCisjOiBzcmMvcmVkdWNlLmM6MjQxCisjLCBmdXp6eQorbXNnaWQgInJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyICJpbmdlbiByZWdsZXIgaSBpbmRkYXRhZ3JhbW1hdGlra2VuIgorCisjOiBzcmMvcmVkdWNlLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogJXMiCittc2dzdHIgIiIKKworIzogc3JjL3JlZHVjZS5jOjM1MAorIywgZnV6enkKK21zZ2lkICJOb250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyICJJa2tlLXRlcm1pbmFsZXIsIG1lZCByZWdsZXIgaHZvciBkZSBmb3Jla29tbWVyIgorCisjOiBzcmMvcmVkdWNlLmM6MzYzCisjLCBmdXp6eQorbXNnaWQgIlRlcm1pbmFscyB1bnVzZWQgaW4gZ3JhbW1hciIKK21zZ3N0ciAiaW5nZW4gcmVnbGVyIGkgaW5kZGF0YWdyYW1tYXRpa2tlbiIKKworIzogc3JjL3JlZHVjZS5jOjM3MgorIywgZnV6enkKK21zZ2lkICJSdWxlcyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgImluZ2VuIHJlZ2xlciBpIGluZGRhdGFncmFtbWF0aWtrZW4iCisKKyM6IHNyYy9yZWR1Y2UuYzozODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnaWRfcGx1cmFsICIlZCBub250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogc3JjL3JlZHVjZS5jOjM5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJWQgcnVsZSB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dpZF9wbHVyYWwgIiVkIHJ1bGVzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0clswXSAiaW5nZW4gcmVnbGVyIGkgaW5kZGF0YWdyYW1tYXRpa2tlbiIKK21zZ3N0clsxXSAiaW5nZW4gcmVnbGVyIGkgaW5kZGF0YWdyYW1tYXRpa2tlbiIKKworIzogc3JjL3JlZHVjZS5jOjQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydCBzeW1ib2wgJXMgZG9lcyBub3QgZGVyaXZlIGFueSBzZW50ZW5jZSIKK21zZ3N0ciAic3RhcnRzeW1ib2xldCAlcyBnZW5lcmVyZXIgaW5nZW4gc+Z0bmluZ2VyIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmF5ICclcyciCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjIyOQorbXNnaWQgImEgJzsnIG1pZ2h0IGJlIG5lZWRlZCBhdCB0aGUgZW5kIG9mIGFjdGlvbiBjb2RlIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyMzIKK21zZ2lkICJmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24gd2lsbCBub3QgYWRkIHRoZSAnOyciCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2Ugb2YgWVlGQUlMLCB3aGljaCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQzMSBzcmMvc2Nhbi1jb2RlLmw6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVycyB0bzogJWMlcyBhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBvc3NpYmx5IG1lYW50OiAlYyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgaGlkaW5nICVjIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGF0ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCBjYW5ub3QgYmUgYWNjZXNzZWQgZnJvbSBtaWQtcnVsZSBhY3Rpb24gYXQgJCVkIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo1MjEgc3JjL3NjYW4tZ3JhbS5sOjc4MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlZ2VyIG91dCBvZiByYW5nZTogJXMiCittc2dzdHIgImhlbHRhbCB1ZGVuIGZvciBneWxkaWdzaGVkc29tcuVkZXQ6ICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjEwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZmVyZW5jZTogJXMiCittc2dzdHIgInVneWxkaWd0IGRpcmVrdGl2OiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IgYWZ0ZXIgJyVjJywgZXhwZWN0aW5nIGludGVnZXIsIGxldHRlciwgJ18nLCAnWycsIG9yICckJyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbiBiZWZvcmUgJCVkOiAlLipzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiAlLipzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2NDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm1pc2xlYWRpbmcgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAicmVkZWZpbml0aW9uIGFmIHBy5mNlZGVucyBmb3IgJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2NjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImFtYmlndW91cyByZWZlcmVuY2U6ICVzIgorbXNnc3RyICJmbGVydHlkaWd0IGFyZ3VtZW50ICVzIHRpbCAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJleHBsaWNpdCB0eXBlIGdpdmVuIGluIHVudHlwZWQgZ3JhbW1hciIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NzU5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIkJCBmb3IgdGhlIG1pZHJ1bGUgYXQgJCVkIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICIkJWQgZm9yIFwiJXNcIiBoYXIgaW5nZW4gZXJrbOZyZXQgdHlwZSIKKworIzogc3JjL3NjYW4tY29kZS5sOjc2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJCQgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiQkIGZvciBcIiVzXCIgaGFyIGluZ2VuIGVya2zmcmV0IHR5cGUiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3ODYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiQlcyBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiJCVkIGZvciBcIiVzXCIgaGFyIGluZ2VuIGVya2zmcmV0IHR5cGUiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoxNDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN0cmF5ICcsJyB0cmVhdGVkIGFzIHdoaXRlIHNwYWNlIgorbXNnc3RyICJNYWxwbGFjZXJldCBcIixcIiBiZWhhbmRsZXQgc29tIGJsYW5rdGVnbiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRpcmVjdGl2ZTogJXMiCittc2dzdHIgInVneWxkaWd0IGRpcmVrdGl2OiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjI1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudGlmaWVyOiAlcyIKK21zZ3N0ciAidWd5bGRpZ3QgZGlyZWt0aXY6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6Mjk1CisjLCBmdXp6eQorbXNnaWQgImludmFsaWQgY2hhcmFjdGVyIgorbXNnaWRfcGx1cmFsICJpbnZhbGlkIGNoYXJhY3RlcnMiCittc2dzdHJbMF0gInVneWxkaWd0IHRlZ246ICVzIgorbXNnc3RyWzFdICJ1Z3lsZGlndCB0ZWduOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGlkZW50aWZpZXIgaW4gYnJhY2tldGVkIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW4gaWRlbnRpZmllciBleHBlY3RlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MzgxCisjLCBmdXp6eQorbXNnaWQgImludmFsaWQgY2hhcmFjdGVyIGluIGJyYWNrZXRlZCBuYW1lIgorbXNnaWRfcGx1cmFsICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gYnJhY2tldGVkIG5hbWUiCittc2dzdHJbMF0gInVneWxkaWd0IHRlZ246ICVzIgorbXNnc3RyWzFdICJ1Z3lsZGlndCB0ZWduOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjQ4MSBzcmMvc2Nhbi1ncmFtLmw6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGNoYXJhY3RlciBsaXRlcmFsIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo0ODYgc3JjL3NjYW4tZ3JhbS5sOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJleHRyYSBjaGFyYWN0ZXJzIGluIGNoYXJhY3RlciBsaXRlcmFsIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudWxsIGNoYXJhY3RlciIKK21zZ3N0ciAidWd5bGRpZ3QgTlVMLXRlZ24iCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1MzEgc3JjL3NjYW4tZ3JhbS5sOjU0MSBzcmMvc2Nhbi1ncmFtLmw6NTYxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBhZnRlciBcXC1lc2NhcGU6ICVzIgorbXNnc3RyICJ1Z3lsZGlndCBOVUwtdGVnbjogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1NzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY2hhcmFjdGVyIGFmdGVyIFxcLWVzY2FwZTogJXMiCittc2dzdHIgInVneWxkaWd0IHRlZ246ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6OTAxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzIGF0IGVuZCBvZiBmaWxlIgorbXNnc3RyICJtYW5nbGVuZGUgXCIlc1wiIHZlZCBzbHV0bmluZ2VuIGFmIGZpbGVuIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6OTEyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzIGF0IGVuZCBvZiBsaW5lIgorbXNnc3RyICJtYW5nbGVuZGUgXCIlc1wiIHZlZCBzbHV0bmluZ2VuIGFmIGxpbmplbiIKKworIzogc3JjL3NjYW4tc2tlbC5sOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmNsb3NlZCAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tc2tlbC5sOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gZmV3IGFyZ3VtZW50cyBmb3IgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGZvciAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iCittc2dzdHIgIiIKKworIzogc3JjL3N5bWxpc3QuYzoyMTEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJCB2YWx1ZTogJCVkIgorbXNnc3RyICJmZWpsYWd0aWcgduZyZGk6ICVzIgorCisjOiBzcmMvc3ltdGFiLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUE9TSVggWWFjYyBmb3JiaWRzIGRhc2hlcyBpbiBzeW1ib2wgbmFtZXM6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW10YWIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBzeW1ib2xzIGluIGlucHV0IGdyYW1tYXIgKGxpbWl0IGlzICVkKSIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICJnZW50YWdlbiAlcy1lcmts5nJpbmcgZm9yICVzIgorCisjOiBzcmMvc3ltdGFiLmM6MTY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciA8JXM+IgorbXNnc3RyICJnZW50YWdlbiAlcy1lcmts5nJpbmcgZm9yICVzIgorCisjOiBzcmMvc3ltdGFiLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyByZWRlZmluZWQiCittc2dzdHIgInN5bWJvbCAlcyByZWRlZmluZXJldCIKKworIzogc3JjL3N5bXRhYi5jOjM0NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHJlZGVjbGFyZWQiCittc2dzdHIgInN5bWJvbCAlcyByZWRlZmluZXJldCIKKworIzogc3JjL3N5bXRhYi5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlZmluaW5nIHVzZXIgdG9rZW4gbnVtYmVyIG9mICVzIgorbXNnc3RyICJyZWRlZmluaXRpb24gYWYgZWxlbWVudG51bW1lciBmb3IgJXMiCisKKyM6IHNyYy9zeW10YWIuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIGlzIHVzZWQsIGJ1dCBpcyBub3QgZGVmaW5lZCBhcyBhIHRva2VuIGFuZCBoYXMgbm8gcnVsZXMiCittc2dzdHIgIiIKKyJzeW1ib2wgJXMgYnJ1Z2VzLCBtZW4gZXIgaWtrZSBkZWZpbmVyZXQgc29tIGV0IGVsZW1lbnQgb2cgaGFyIGluZ2VuIHJlZ2xlciIKKworIzogc3JjL3N5bXRhYi5jOjQxNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHVzZWQgbW9yZSB0aGFuIG9uY2UgYXMgYSBsaXRlcmFsIHN0cmluZyIKK21zZ3N0ciAic3ltYm9sIFwiJXNcIiBicnVnZXMgbWVyZSBlbmQgZW4gZ2FuZyBzb20gZW4gYm9nc3RhdmVsaWcgc3RyZW5nIgorCisjOiBzcmMvc3ltdGFiLmM6NDE4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgZ2l2ZW4gbW9yZSB0aGFuIG9uZSBsaXRlcmFsIHN0cmluZyIKK21zZ3N0ciAic3ltYm9sIFwiJXNcIiBoYXIgZuVldCBtZXJlIGVuZCDpbiBib2dzdGF2ZWxpZyBzdHJlbmciCisKKyM6IHNyYy9zeW10YWIuYzo1MzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVzZXIgdG9rZW4gbnVtYmVyICVkIHJlZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICJnZW50YWdlbiB0eXBlZXJrbOZyaW5nIGZvciAlcyIKKworIzogc3JjL3N5bXRhYi5jOjUzOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicHJldmlvdXMgZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICJnZW50YWdlbiB0eXBlZXJrbOZyaW5nIGZvciAlcyIKKworIzogc3JjL3N5bXRhYi5jOjkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgc3RhcnQgc3ltYm9sICVzIGlzIHVuZGVmaW5lZCIKK21zZ3N0ciAic3RhcnRzeW1ib2xldCAlcyBlciB1ZGVmaW5lcmV0IgorCisjOiBzcmMvc3ltdGFiLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBzdGFydCBzeW1ib2wgJXMgaXMgYSB0b2tlbiIKK21zZ3N0ciAic3RhcnRzeW1ib2xldCAlcyBlciBldCBlbGVtZW50IgorCisjOiBzcmMvc3ltdGFiLmM6OTM1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICUlZGVzdHJ1Y3RvciIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnbGVzcyAlJWRlc3RydWN0b3IiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlJXByaW50ZXIiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjk4MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJSVwcmludGVyIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzo2MyBkamdwcC9zdWJwaXBlLmM6Mjg2IGRqZ3BwL3N1YnBpcGUuYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3Zpbmcgb2YgJyVzJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjg1IGRqZ3BwL3N1YnBpcGUuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGlvbiBvZiBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgInNhdmluZyBzdGRpbiBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJzYXZpbmcgc3Rkb3V0IGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTUzIGRqZ3BwL3N1YnBpcGUuYzoxOTcgZGpncHAvc3VicGlwZS5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nIG9mIHRtcGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgYmlzb24ncyBzdGRvdXQgdG8gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIG00J3Mgc3RkaW4gZnJvbSB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlbmluZyBvZiBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIG00J3Mgc3Rkb3V0IHRvIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSAnJXMnIGludGVycnVwdGVkIgorbXNnc3RyICJoauZscGVwcm9ncmFtbWV0IFwiJXNcIiBmZWpsZWRlIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjQxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gJyVzJyBub3QgZm91bmQiCittc2dzdHIgImhq5mxwZXByb2dyYW1tZXQgXCIlc1wiIGlra2UgZnVuZGV0IgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIGJpc29uJ3Mgc3RkaW4gZnJvbSB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGFyZ3VtZW50ICVzIGZvciAlcyIKK21zZ3N0ciAidWd5bGRpZ3QgYXJndW1lbnQgJXMgdGlsICVzIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIGFyZ3VtZW50ICVzIGZvciAlcyIKK21zZ3N0ciAiZmxlcnR5ZGlndCBhcmd1bWVudCAlcyB0aWwgJXMiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjE1MworbXNnaWQgIlZhbGlkIGFyZ3VtZW50cyBhcmU6IgorbXNnc3RyICJHeWxkaWdlIGFyZ3VtZW50ZXIgZXI6IgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9hbGxvY3MsICV1IGZyZWVkICglLjJmJSUpLlxuIgorbXNnc3RyICIldSBiaXRt5m5nZGVhbGxva2VyaW5nZXIsICV1IGZyaWdqb3J0ICglLjJmJSUpLlxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9zZXRzLCAldSBjYWNoZWQgKCUuMmYlJSlcbiIKK21zZ3N0ciAiJXUgYml0beZuZ2RlaW5kc3RpbGxpbmdlciwgJXUgY2FjaGVkZSAoJS4yZiUlKVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9yZXNldHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorbXNnc3RyICIldSBiaXRt5m5nZGVudWxzdGlsbGluZ2VyLCAldSBjYWNoZWRlICglLjJmJSUpXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3Rlc3RzLCAldSBjYWNoZWQgKCUuMmYlJSlcbiIKK21zZ3N0ciAiJXUgYml0beZuZ2RldGVzdCwgJXUgY2FjaGVkZSAoJS4yZiUlKVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9saXN0c1xuIgorbXNnc3RyICIldSBiaXRt5m5nZGVsaXN0ZXJcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5MgorbXNnaWQgImNvdW50IGxvZyBoaXN0b2dyYW1cbiIKK21zZ3N0ciAia2FsZHNsb2doaXN0b2dyYW1cbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5NQorbXNnaWQgInNpemUgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICJzdPhycmVsc2VzbG9naGlzdG9ncmFtXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTgKK21zZ2lkICJkZW5zaXR5IGhpc3RvZ3JhbVxuIgorbXNnc3RyICJkZW5zaXRldHNoaXN0b2dyYW1cbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQml0c2V0IHN0YXRpc3RpY3M6XG4iCisiXG4iCittc2dzdHIgIiIKKyJCaXRt5m5nZGVzdGF0aXN0aWs6XG4iCisiXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWNjdW11bGF0ZWQgcnVucyA9ICV1XG4iCittc2dzdHIgIkFra3VtdWxlcmVkZSBr+HJzbGVyID0gJXVcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI1OSBsaWIvYml0c2V0X3N0YXRzLmM6MjY0CisjLCBmdXp6eQorbXNnaWQgImNhbm5vdCByZWFkIHN0YXRzIGZpbGUiCittc2dzdHIgIkt1bm5lIGlra2UgbOZzZSBzdGF0aXN0aWtmaWwuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjYxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJiYWQgc3RhdHMgZmlsZSBzaXplXG4iCittc2dzdHIgIkTlcmxpZyBzdGF0aXN0aWtmaWxzdPhycmVsc2UuXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyODcgbGliL2JpdHNldF9zdGF0cy5jOjI4OQorIywgZnV6enkKK21zZ2lkICJjYW5ub3Qgd3JpdGUgc3RhdHMgZmlsZSIKK21zZ3N0ciAiS3VubmUgaWtrZSBza3JpdmUgc3RhdGlzdGlrZmlsLiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI5MgorIywgZnV6enkKK21zZ2lkICJjYW5ub3Qgb3BlbiBzdGF0cyBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJLdW5uZSBpa2tlIOVibmUgc3RhdGlzdGlrZmlsIGZvciBza3Jpdm5pbmcuIgorCisjOiBsaWIvY2xvc2VvdXQuYzoxMTIKKyMsIGZ1enp5Cittc2dpZCAid3JpdGUgZXJyb3IiCittc2dzdHIgImZhdGFsIGZlamw6ICIKKworIzogbGliL2Vycm9yLmM6MTg4Cittc2dpZCAiVW5rbm93biBzeXN0ZW0gZXJyb3IiCittc2dzdHIgIlVrZW5kdCBzeXN0ZW1mZWpsIgorCisjOiBsaWIvZ2V0b3B0LmM6NTQ3IGxpYi9nZXRvcHQuYzo1NzYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJyVzJyBpcyBhbWJpZ3VvdXM7IHBvc3NpYmlsaXRpZXM6IgorbXNnc3RyICIlczogZmxhZ2V0IFwiJXNcIiBlciBmbGVydHlkaWd0XG4iCisKKyM6IGxpYi9nZXRvcHQuYzo2MjQgbGliL2dldG9wdC5jOjYyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLS0lcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogZmxhZ2V0IFwiLS0lc1wiIHRhZ2VyIGludGV0IGFyZ3VtZW50XG4iCisKKyM6IGxpYi9nZXRvcHQuYzo2MzcgbGliL2dldG9wdC5jOjY0MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnJWMlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogZmxhZ2V0IFwiJWMlc1wiIHRhZ2VyIGludGV0IGFyZ3VtZW50XG4iCisKKyM6IGxpYi9nZXRvcHQuYzo2ODUgbGliL2dldG9wdC5jOjcwNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLS0lcycgcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IGZsYWdldCBcIiVzXCIgYmVo+HZlciBldCBhcmd1bWVudFxuIgorCisjOiBsaWIvZ2V0b3B0LmM6NzQyIGxpYi9nZXRvcHQuYzo3NDUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uICctLSVzJ1xuIgorbXNnc3RyICIlczogdWtlbmR0IGZsYWcgXCItLSVzXCJcbiIKKworIzogbGliL2dldG9wdC5jOjc1MyBsaWIvZ2V0b3B0LmM6NzU2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiAnJWMlcydcbiIKK21zZ3N0ciAiJXM6IHVrZW5kdCBmbGFnIFwiJWMlc1wiXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo4MDUgbGliL2dldG9wdC5jOjgwOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgb3B0aW9uIC0tICclYydcbiIKK21zZ3N0ciAiJXM6IHVneWxkaWd0IGZsYWcgLS0lY1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6ODYxIGxpYi9nZXRvcHQuYzo4NzggbGliL2dldG9wdC5jOjEwODggbGliL2dldG9wdC5jOjExMDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgLS0gJyVjJ1xuIgorbXNnc3RyICIlczogZmxhZ2V0IGJlaPh2ZXIgZXQgYXJndW1lbnQgLS0gJWNcbiIKKworIzogbGliL2dldG9wdC5jOjkzNCBsaWIvZ2V0b3B0LmM6OTUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiVzOiBmbGFnZXQgXCItVyAlc1wiIGVyIGZsZXJ0eWRpZ3RcbiIKKworIzogbGliL2dldG9wdC5jOjk3NCBsaWIvZ2V0b3B0LmM6OTkyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogZmxhZ2V0IFwiLVcgJXNcIiB0YWdlciBpbnRldCBhcmd1bWVudFxuIgorCisjOiBsaWIvZ2V0b3B0LmM6MTAxMyBsaWIvZ2V0b3B0LmM6MTAzMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLVcgJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBmbGFnZXQgXCIlc1wiIGJlaPh2ZXIgZXQgYXJndW1lbnRcbiIKKworIzogbGliL29ic3RhY2suYzo0MTMgbGliL29ic3RhY2suYzo0MTUgbGliL3hhbGxvYy1kaWUuYzozNAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgImh1a29tbWVsc2VuIG9wYnJ1Z3QiCisKKyM6IGxpYi9zcGF3bi1waXBlLmM6MTQwIGxpYi9zcGF3bi1waXBlLmM6MTQzIGxpYi9zcGF3bi1waXBlLmM6MjY0CisjOiBsaWIvc3Bhd24tcGlwZS5jOjI2NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBwaXBlIgorbXNnc3RyICJrYW4gaWtrZSBsdWtrZSBmaWwiCisKKyM6IGxpYi9zcGF3bi1waXBlLmM6MjM0IGxpYi9zcGF3bi1waXBlLmM6MzQ4IGxpYi93YWl0LXByb2Nlc3MuYzoyODIKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyBmYWlsZWQiCittc2dzdHIgIiIKKworIyBO5XIgdmkgZ+VyIG92ZXIgdGlsIFVuaWNvZGUgbWVyZSBhbGxt5m50IG3lc2tlIHZpIGL4ciBvdmVyc+Z0dHRhIGLlZGEgZGlzc2UKKyMgbWVkIFUrMjAxRCAoUklHSFQgRE9VQkxFIFFVT1RBVElPTiBNQVJLKSBw5SBzdmVuc2thLiAgRWxsZXI/CisjCisjLiBUUkFOU0xBVE9SUzoKKyMuIEdldCB0cmFuc2xhdGlvbnMgZm9yIG9wZW4gYW5kIGNsb3NpbmcgcXVvdGF0aW9uIG1hcmtzLgorIy4gVGhlIG1lc3NhZ2UgY2F0YWxvZyBzaG91bGQgdHJhbnNsYXRlICJgIiB0byBhIGxlZnQKKyMuIHF1b3RhdGlvbiBtYXJrIHN1aXRhYmxlIGZvciB0aGUgbG9jYWxlLCBhbmQgc2ltaWxhcmx5IGZvcgorIy4gIiciLiAgRm9yIGV4YW1wbGUsIGEgRnJlbmNoIFVuaWNvZGUgbG9jYWwgc2hvdWxkIHRyYW5zbGF0ZQorIy4gdGhlc2UgdG8gVSswMEFCIChMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRQorIy4gUVVPVEFUSU9OIE1BUkspLCBhbmQgVSswMEJCIChSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUKKyMuIFFVT1RBVElPTiBNQVJLKSwgcmVzcGVjdGl2ZWx5LgorIy4KKyMuIElmIHRoZSBjYXRhbG9nIGhhcyBubyB0cmFuc2xhdGlvbiwgd2Ugd2lsbCB0cnkgdG8KKyMuIHVzZSBVbmljb2RlIFUrMjAxOCAoTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspIGFuZAorIy4gVW5pY29kZSBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykuICBJZiB0aGUKKyMuIGN1cnJlbnQgbG9jYWxlIGlzIG5vdCBVbmljb2RlLCBsb2NhbGVfcXVvdGluZ19zdHlsZQorIy4gd2lsbCBxdW90ZSAnbGlrZSB0aGlzJywgYW5kIGNsb2NhbGVfcXVvdGluZ19zdHlsZSB3aWxsCisjLiBxdW90ZSAibGlrZSB0aGlzIi4gIFlvdSBzaG91bGQgYWx3YXlzIGluY2x1ZGUgdHJhbnNsYXRpb25zCisjLiBmb3IgImAiIGFuZCAiJyIgZXZlbiBpZiBVKzIwMTggYW5kIFUrMjAxOSBhcmUgYXBwcm9wcmlhdGUKKyMuIGZvciB5b3VyIGxvY2FsZS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFya3NfaW5fb3RoZXJfbGFuZ3VhZ2VzPgorIy4gYW5kIHVzZSBnbHlwaHMgc3VpdGFibGUgZm9yIHlvdXIgbGFuZ3VhZ2UuCisjOiBsaWIvcXVvdGVhcmcuYzozMTIKK21zZ2lkICJgIgorbXNnc3RyICJcIiIKKworIzogbGliL3F1b3RlYXJnLmM6MzEzCittc2dpZCAiJyIKK21zZ3N0ciAiXCIiCisKKyM6IGxpYi90aW1ldmFyLmM6NDc1Cittc2dpZCAiIgorIlxuIgorIkV4ZWN1dGlvbiB0aW1lcyAoc2Vjb25kcylcbiIKK21zZ3N0ciAiIgorIlxuIgorIlVkZvhyZWxzZXN0aWRlciAoc2VrdW5kZXIpXG4iCisKKyM6IGxpYi90aW1ldmFyLmM6NTI1Cittc2dpZCAiIFRPVEFMICAgICAgICAgICAgICAgICA6IgorbXNnc3RyICIgVE9UQUxUICAgICAgICAgICAgICAgIDoiCisKKyM6IGxpYi90aW1ldmFyLmM6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWUgaW4gJXM6ICVsZC4lMDZsZCAoJWxkJSUpXG4iCittc2dzdHIgInRpZCBpICVzOiAlbGQuJTA2bGQgKCVsZCUlKVxuIgorCisjOiBsaWIvdzMyc3Bhd24uaDo0MworIywgYy1mb3JtYXQKK21zZ2lkICJfb3Blbl9vc2ZoYW5kbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi93MzJzcGF3bi5oOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXN0b3JlIGZkICVkOiBkdXAyIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6MjIzIGxpYi93YWl0LXByb2Nlc3MuYzoyNTUgbGliL3dhaXQtcHJvY2Vzcy5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdWJwcm9jZXNzIgorbXNnc3RyICIiCisKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzoyNzQgbGliL3dhaXQtcHJvY2Vzcy5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdWJwcm9jZXNzIGdvdCBmYXRhbCBzaWduYWwgJWQiCittc2dzdHIgIiIKKworI34gbXNnaWQgInN0YXRlICVkIgorI34gbXNnc3RyICJ0aWxzdGFuZCAlZCIKKworI34gbXNnaWQgIndhcm5pbmc6ICIKKyN+IG1zZ3N0ciAiYWR2YXJzZWw6ICIKKworI34gbXNnaWQgIkdOVSBiaXNvbiBnZW5lcmF0ZXMgcGFyc2VycyBmb3IgTEFMUigxKSBncmFtbWFycy5cbiIKKyN+IG1zZ3N0ciAiR05VIGJpc29uIGdlbmVyZXJlciBmb3J0b2xrZXJlIHRpbCBMQUxSKDEpLWdyYW1tYXRpa2VyLlxuIgorCisjfiBtc2dpZCAiIgorI34gIklmIGEgbG9uZyBvcHRpb24gc2hvd3MgYW4gYXJndW1lbnQgYXMgbWFuZGF0b3J5LCB0aGVuIGl0IGlzIG1hbmRhdG9yeVxuIgorI34gImZvciB0aGUgZXF1aXZhbGVudCBzaG9ydCBvcHRpb24gYWxzby4gIFNpbWlsYXJseSBmb3Igb3B0aW9uYWwgYXJndW1lbnRzLlxuIgorI34gbXNnc3RyICIiCisjfiAiSHZpcyBldCBsYW5nIGZsYWcgdmlzZXIgZXQgYXJndW1lbnQgc29tIG9ibGlnYXRvcmlzaywgZXIgZGV0IG9nc+VcbiIKKyN+ICJvYmxpZ2F0b3Jpc2sgZm9yIGRldCB0aWxzdmFyZW5kZSBrb3J0ZSBmbGFnLiBUaWxzdmFyZW5kZVxuIgorI34gImZvciB2YWxnZnJpZSBhcmd1bWVudGVyLlxuIgorCisjfiBtc2dpZCAiIgorI34gIk9wZXJhdGlvbiBtb2RlczpcbiIKKyN+ICIgIC1oLCAtLWhlbHAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorI34gIiAgLVYsIC0tdmVyc2lvbiAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCisjfiAiICAteSwgLS15YWNjICAgICAgZW11bGF0ZSBQT1NJWCB5YWNjXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJBcmJlamRzdGlsc3RhbmRlOlxuIgorI34gIiAgLWgsIC0taGVscCAgICAgIHZpcyBkZW5uZSBoauZscGV0ZWtzdCBvZyBhZnNsdXRcbiIKKyN+ICIgIC1WLCAtLXZlcnNpb24gICB2aXMgdmVyc2lvbnNpbmZvcm1hdGlvbiBvZyBhZnNsdXRcbiIKKyN+ICIgIC15LCAtLXlhY2MgICAgICBlbXVs6XIgUE9TSVgteWFjY1xuIgorCisjfiBtc2dpZCAiUE9TSVggZm9yYmlkcyBkZWNsYXJhdGlvbnMgaW4gdGhlIGdyYW1tYXIiCisjfiBtc2dzdHIgIlBPU0lYIGZvcmJ5ZGVyIGRla2xhcmF0aW9uZXIgaSBncmFtbWF0aWtrZW4iCisKKyN+IG1zZ2lkICJSdWxlcyBuZXZlciByZWR1Y2VkIgorI34gbXNnc3RyICJBbGRyaWcgcmVkdWNlcmVkZSByZWdsZXIiCisKKyN+IG1zZ2lkICJ1c2VsZXNzIHJ1bGUiCisjfiBtc2dzdHIgInVicnVnZWxpZyByZWdlbCIKKworI34gbXNnaWQgInVzZWxlc3Mgbm9udGVybWluYWw6ICVzIgorI34gbXNnc3RyICJ1YnJ1Z2VsaWcgaWtrZS10ZXJtaW5hbDogJXMiCisKKyN+IG1zZ2lkICJVc2VsZXNzIG5vbnRlcm1pbmFscyIKKyN+IG1zZ3N0ciAiVWJydWdlbGlnZSBpa2tlLXRlcm1pbmFsZXIiCisKKyN+IG1zZ2lkICJUZXJtaW5hbHMgd2hpY2ggYXJlIG5vdCB1c2VkIgorI34gbXNnc3RyICJUZXJtaW5hbGVyIHNvbSBpa2tlIGJydWdlcyIKKworI34gbXNnaWQgIlVzZWxlc3MgcnVsZXMiCisjfiBtc2dzdHIgIlVicnVnZWxpZ2UgcmVnbGVyIgorCisjfiBtc2dpZCAiJWQgcnVsZSBuZXZlciByZWR1Y2VkXG4iCisjfiBtc2dpZF9wbHVyYWwgIiVkIHJ1bGVzIG5ldmVyIHJlZHVjZWRcbiIKKyN+IG1zZ3N0clswXSAiJWQgcmVnZWwgcmVkdWNlcmVzIGFsZHJpZ1xuIgorI34gbXNnc3RyWzFdICIlZCByZWdsZXIgcmVkdWNlcmVzIGFsZHJpZ1xuIgorCisjfiBtc2dpZCAiJWQgdXNlbGVzcyBub250ZXJtaW5hbCIKKyN+IG1zZ2lkX3BsdXJhbCAiJWQgdXNlbGVzcyBub250ZXJtaW5hbHMiCisjfiBtc2dzdHJbMF0gIiVkIHVicnVnZWxpZyBpa2tlLXRlcm1pbmFsIgorI34gbXNnc3RyWzFdICIlZCB1YnJ1Z2VsaWdlIGlra2UtdGVybWluYWxlciIKKworI34gbXNnaWQgIiBhbmQgIgorI34gbXNnc3RyICIgb2cgIgorCisjfiBtc2dpZCAiJWQgdXNlbGVzcyBydWxlIgorI34gbXNnaWRfcGx1cmFsICIlZCB1c2VsZXNzIHJ1bGVzIgorI34gbXNnc3RyWzBdICIlZCB1YnJ1Z2VsaWcgcmVnZWwiCisjfiBtc2dzdHJbMV0gIiVkIHVicnVnZWxpZ2UgcmVnbGVyIgorCisjfiBtc2dpZCAiaW52YWxpZCBlc2NhcGUgc2VxdWVuY2U6ICVzIgorI34gbXNnc3RyICJ1Z3lsZGlnIHVuZHZpZ2VzZWt2ZW5zOiAlcyIKKworI34gbXNnaWQgInVucmVjb2duaXplZCBlc2NhcGUgc2VxdWVuY2U6ICVzIgorI34gbXNnc3RyICJ1a2VuZHQgdW5kdmlnZXNla3ZlbnM6ICVzIgorCisjfiBtc2dpZCAibWlzc2luZyBgeycgaW4gYCVzJyIKKyN+IG1zZ3N0ciAibWFuZ2xlbmRlIFwie1wiIGkgXCIlc1wiIgorCisjfiBtc2dpZCAiaW52YWxpZCAkIHZhbHVlIgorI34gbXNnc3RyICJmZWpsYWd0aWcgJC125nJkaSIKKworI34gbXNnaWQgImNvbmZsaWN0aW5nIHByZWNlZGVuY2VzIGZvciAlcyBhbmQgJXMiCisjfiBtc2dzdHIgIm1vZHN0cmlkaWdlIHBy5mNlZGVuc2VyIG1lbGxlbSAlcyBvZyAlcyIKKworI34gbXNnaWQgImNvbmZsaWN0aW5nIGFzc29jaWF0aXZpdGllcyBmb3IgJXMgKCVzKSBhbmQgJXMgKCVzKSIKKyN+IG1zZ3N0ciAibW9kc3RyaWRpZ2UgYXNzb2NpYXRpdml0ZXRlciBmb3IgJXMgKCVzKSBvZyAlcyAoJXMpIgorCisjfiBtc2dpZCAidG9rZW5zICVzIGFuZCAlcyBib3RoIGFzc2lnbmVkIG51bWJlciAlZCIKKyN+IG1zZ3N0ciAiZWxlbWVudGVybmUgJXMgb2cgJXMgaGFyIGJlZ2dlIGblZXQgbnVtbWVyICVkIgorCisjfiBtc2dpZCAiJXM6IGlsbGVnYWwgb3B0aW9uIC0tICVjXG4iCisjfiBtc2dzdHIgIiVzOiBpa2tlIHRpbGxhZHQgZmxhZyAtLSAlY1xuIgorCisjfiBtc2dpZCAic3Vic2lkaWFyeSBwcm9ncmFtIGAlcycgY291bGQgbm90IGJlIGludm9rZWQiCisjfiBtc2dzdHIgImhq5mxwZXByb2dyYW1tZXQgXCIlc1wiIGt1bm5lIGlra2Ugc3RhcnRlcyIKKworI34gbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSBgJXMnIGZhaWxlZCAoZXhpdCBzdGF0dXMgJWQpIgorI34gbXNnc3RyICJoauZscGVwcm9ncmFtbWV0IFwiJXNcIiBmZWpsZWRlIG1lZCBhZnNsdXRuaW5nc2tvZGUgJWQiCmRpZmYgLS1naXQgYS9wby9kZS5nbW8gYi9wby9kZS5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY4ZGY1ZgotLS0gL2Rldi9udWxsCisrKyBiL3BvL2RlLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9kZS5wbyBiL3BvL2RlLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZTFhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9wby9kZS5wbwpAQCAtMCwwICsxLDE0MDggQEAKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGJpc29uIHBhY2thZ2UuCisjIEdlcm1hbiB0cmFuc2xhdGlvbiBmb3IgbWVzc2FnZSBvZiBHTlUgYmlzb24uCisjIENvcHlyaWdodCAoQykgMTk5NiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+LCAxOTk2LgorIyBNaWNoYWVsIFBpZWZlbCA8cGllZmVsQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPiwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAxMCwgMjAxMSwgMjAxMi4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGJpc29uIDIuNi45MFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBidWctYmlzb25AZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEyLTEyLTEyIDE2OjA5KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEyLTEyLTExIDIwOjA1KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IE1pY2hhZWwgUGllZmVsIDxwaWVmZWxAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+XG4iCisiTGFuZ3VhZ2UtVGVhbTogR2VybWFuIDx0cmFuc2xhdGlvbi10ZWFtLWRlQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZTogZGVcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDgtYml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9biAhPSAxO1xuIgorCisjOiBzcmMvY29tcGxhaW4uYzoxMjAgc3JjL2NvbXBsYWluLmM6MTMxIHNyYy9jb21wbGFpbi5jOjE0MCBzcmMvY29tcGxhaW4uYzoxODgKKyM6IHNyYy9jb21wbGFpbi5jOjE5OAorbXNnaWQgIndhcm5pbmciCittc2dzdHIgIldhcm51bmciCisKKyM6IHNyYy9jb21wbGFpbi5jOjE1MSBzcmMvY29tcGxhaW4uYzoxNjAgc3JjL2NvbXBsYWluLmM6MTY3Cittc2dpZCAiZXJyb3IiCittc2dzdHIgIkZlaGxlciIKKworIzogc3JjL2NvbXBsYWluLmM6MjA4IHNyYy9jb21wbGFpbi5jOjIxNQorbXNnaWQgImZhdGFsIGVycm9yIgorbXNnc3RyICJmYXRhbGVyIEZlaGxlciIKKworIzogc3JjL2NvbmZsaWN0cy5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIHNoaWZ0IgorbXNnc3RyICIiCisiICAgIEtvbmZsaWt0IHp3aXNjaGVuIFJlZ2VsICVkIGFuZCBUb2tlbiAlcyB3dXJkZSBkdXJjaCBTY2hpZWJlbiBnZWzDtnN0IgorCisjOiBzcmMvY29uZmxpY3RzLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgcmVkdWNlIgorbXNnc3RyICIiCisiICAgIEtvbmZsaWt0IHp3aXNjaGVuIFJlZ2VsICVkIGFuZCBUb2tlbiAlcyB3dXJkZSBkdXJjaCBSZWR1emllcnVuZyBnZWzDtnN0IgorCisjOiBzcmMvY29uZmxpY3RzLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgYW4gZXJyb3IiCittc2dzdHIgIiIKKyIgICAgS29uZmxpa3Qgendpc2NoZW4gUmVnZWwgJWQgYW5kIFRva2VuICVzIHd1cmRlIGFscyBGZWhsZXIgYmV0cmFjaHRldCIKKworIzogc3JjL2NvbmZsaWN0cy5jOjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdHM6ICVkIHNoaWZ0L3JlZHVjZSwgJWQgcmVkdWNlL3JlZHVjZVxuIgorbXNnc3RyICJLb25mbGlrdGU6ICVkIFNjaGllYmUvUmVkdXppZXJlLCAlZCBSZWR1emllcmUvUmVkdXppZXJlXG4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCBzaGlmdC9yZWR1Y2VcbiIKK21zZ3N0ciAiS29uZmxpa3RlOiAlZCBTY2hpZWJlL1JlZHV6aWVyZVxuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgcmVkdWNlL3JlZHVjZVxuIgorbXNnc3RyICJLb25mbGlrdGU6ICVkIFJlZHV6aWVyZS9SZWR1emllcmVcbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdGF0ZSAlZCAiCittc2dzdHIgIlp1c3RhbmQgJWQgIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlZXhwZWN0LXJyIGFwcGxpZXMgb25seSB0byBHTFIgcGFyc2VycyIKK21zZ3N0ciAiJSVleHBlY3QtcnIgYmV0cmlmZnQgbnVyIEdMUi1QYXJzZXIiCisKKyM6IHNyYy9jb25mbGljdHMuYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJleHBlY3RlZCAlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIgorbXNnc3RyWzBdICJlcndhcnRldGUgJWQgU2NoaWViZS9SZWR1emllcmUtS29uZmxpa3QiCittc2dzdHJbMV0gImVyd2FydGV0ZSAlZCBTY2hpZWJlL1JlZHV6aWVyZS1Lb25mbGlrdGUiCisKKyM6IHNyYy9jb25mbGljdHMuYzo2MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJWQgcmVkdWNlL3JlZHVjZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiZXhwZWN0ZWQgJWQgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMiCittc2dzdHJbMF0gImVyd2FydGV0ZSAlZCBSZWR1emllcmUvUmVkdXppZXJlLUtvbmZsaWt0IgorbXNnc3RyWzFdICJlcndhcnRldGUgJWQgUmVkdXppZXJlL1JlZHV6aWVyZS1Lb25mbGlrdGUiCisKKyM6IHNyYy9maWxlcy5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IG9wZW4iCittc2dzdHIgIiVzOiBrYW5uIG5pY2h0IMO2ZmZuZW4iCisKKyM6IHNyYy9maWxlcy5jOjEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnB1dC9vdXRwdXQgZXJyb3IiCittc2dzdHIgIkVpbmdhYmUtL0F1c2dhYmUtRmVobGVyIgorCisjOiBzcmMvZmlsZXMuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNsb3NlIGZpbGUiCittc2dzdHIgImthbm4gRGF0ZWkgbmljaHQgc2NobGllw59lbiIKKworIzogc3JjL2ZpbGVzLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIG92ZXJ3cml0ZSB0aGUgaW5wdXQgZmlsZSAlcyIKK21zZ3N0ciAid2VyZGUgZGllIEVpbmdhYmVkYXRlaSAlcyBuaWNodCDDvGJlcnNjaHJlaWJlbiIKKworIzogc3JjL2ZpbGVzLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0aW5nIG91dHB1dHMgdG8gZmlsZSAlcyIKK21zZ3N0ciAid2lkZXJzcHLDvGNobGljaGUgQXVzZ2FiZW4gaW4gRGF0ZWkgJXMiCisKKyM6IHNyYy9nZXRhcmdzLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeSBgJXMgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKK21zZ3N0ciAi4oCeJXMgLS1oZWxw4oCcIGdpYnQgd2VpdGVyZSBJbmZvcm1hdGlvbmVuLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgW09QVElPTl0uLi4gRklMRVxuIgorbXNnc3RyICJBdWZydWY6ICVzIFtPUFRJT05dLi4uIERBVEVJXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzAyCittc2dpZCAiIgorIkdlbmVyYXRlIGEgZGV0ZXJtaW5pc3RpYyBMUiBvciBnZW5lcmFsaXplZCBMUiAoR0xSKSBwYXJzZXIgZW1wbG95aW5nXG4iCisiTEFMUigxKSwgSUVMUigxKSwgb3IgY2Fub25pY2FsIExSKDEpIHBhcnNlciB0YWJsZXMuICBJRUxSKDEpIGFuZFxuIgorImNhbm9uaWNhbCBMUigxKSBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkVpbmVuIGRldGVybWluaXN0aXNjaGVuIExSLSBvZGVyIHZlcmFsbGdlbWVpbmVydGVuIExSLVBhcnNlciAoR0xSKSAiCisiZXJzdGVsbGVuLFxuIgorInVudGVyIFp1aGlsZmVuYWhtZSB2b24gTEFMUigxKS0sIElFTFIoMSktIG9kZXIga2Fub25pc2NoZW4gTFIoMSktVGFiZWxsZW4uXG4iCisiVW50ZXJzdMO8dHp1bmcgZsO8ciBJRUxSKDEpIHVuZCBrYW5vbmlzY2hlIExSKDEpIGlzIGV4cGVyaW1lbnRlbGwuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzA5Cittc2dpZCAiIgorIk1hbmRhdG9yeSBhcmd1bWVudHMgdG8gbG9uZyBvcHRpb25zIGFyZSBtYW5kYXRvcnkgZm9yIHNob3J0IG9wdGlvbnMgdG9vLlxuIgorbXNnc3RyICIiCisiRXJmb3JkZXJsaWNoZSBBcmd1bWVudGUgZsO8ciBsYW5nZSBPcHRpb25lbiBzaW5kIGF1Y2ggZsO8ciBLdXJ6Zm9ybWVuICIKKyJlcmZvcmRlcmxpY2guXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzEyCittc2dpZCAiVGhlIHNhbWUgaXMgdHJ1ZSBmb3Igb3B0aW9uYWwgYXJndW1lbnRzLlxuIgorbXNnc3RyICJEYXMgZ2xlaWNoZSBnaWx0IGbDvHIgb3B0aW9uYWxlIEFyZ3VtZW50ZS5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozMTYKK21zZ2lkICIiCisiXG4iCisiT3BlcmF0aW9uIG1vZGVzOlxuIgorIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKKyIgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCisiICAgICAgLS1wcmludC1sb2NhbGVkaXIgICAgICBvdXRwdXQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgbG9jYWxlLWRlcGVuZGVudCAiCisiZGF0YVxuIgorIiAgICAgIC0tcHJpbnQtZGF0YWRpciAgICAgICAgb3V0cHV0IGRpcmVjdG9yeSBjb250YWluaW5nIHNrZWxldG9ucyBhbmQgWFNMVFxuIgorIiAgLXksIC0teWFjYyAgICAgICAgICAgICAgICAgZW11bGF0ZSBQT1NJWCBZYWNjXG4iCisiICAtVywgLS13YXJuaW5nc1s9Q0FURUdPUlldICByZXBvcnQgdGhlIHdhcm5pbmdzIGZhbGxpbmcgaW4gQ0FURUdPUllcbiIKKyIgIC1mLCAtLWZlYXR1cmVbPUZFQVRVUkVdICAgIGFjdGl2YXRlIG1pc2NlbGxhbmVvdXMgZmVhdHVyZXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkFyYmVpdHNtb2RpOlxuIgorIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgZGllc2UgSGlsZmUgYW56ZWlnZW4gdW5kIGJlZW5kZW5cbiIKKyIgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgIFZlcnNpb25zaW5mb3JtYXRpb24gYW56ZWlnZW4gdW5kIGJlZW5kZW5cbiIKKyIgICAgICAtLXByaW50LWxvY2FsZWRpciAgICAgIFZlcnplaWNobmlzIG1pdCBMb2NhbGUtYWJow6RuZ2lnZW4gRGF0ZW4gIgorImFuemVpZ2VuXG4iCisiICAgICAgLS1wcmludC1kYXRhZGlyICAgICAgICBWZXJ6ZWljaG5pcyBtaXQgU2tlbGV0dGVuIHVuZCBYU0xUIGFuemVpZ2VuXG4iCisiICAteSwgLS15YWNjICAgICAgICAgICAgICAgICBQT1NJWOKAmSBZYWNjIGVtdWxpZXJlblxuIgorIiAgLVcsIC0td2FybmluZ3NbPUtBVEVHT1JJRV0gIFdhcm51bmdlbiwgZGllIGluIEtBVEVHT1JJRSBmYWxsZW4sIGFuemVpZ2VuXG4iCisiICAtZiwgLS1mZWF0dXJlWz1GRUFUVVJFXSAgICB2ZXJzY2hpZWRlbmUgRmVhdHVyZXMgYWt0aXZpZXJlblxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFyc2VyOlxuIgorIiAgLUwsIC0tbGFuZ3VhZ2U9TEFOR1VBR0UgICAgICAgICAgc3BlY2lmeSB0aGUgb3V0cHV0IHByb2dyYW1taW5nIGxhbmd1YWdlXG4iCisiICAtUywgLS1za2VsZXRvbj1GSUxFICAgICAgICAgICAgICBzcGVjaWZ5IHRoZSBza2VsZXRvbiB0byB1c2VcbiIKKyIgIC10LCAtLWRlYnVnICAgICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnQgdGhlIHBhcnNlciBmb3IgZGVidWdnaW5nXG4iCisiICAgICAgLS1sb2NhdGlvbnMgICAgICAgICAgICAgICAgICBlbmFibGUgbG9jYXRpb24gc3VwcG9ydFxuIgorIiAgLUQsIC0tZGVmaW5lPU5BTUVbPVZBTFVFXSAgICAgICAgc2ltaWxhciB0byAnJWRlZmluZSBOQU1FIFwiVkFMVUVcIidcbiIKKyIgIC1GLCAtLWZvcmNlLWRlZmluZT1OQU1FWz1WQUxVRV0gIG92ZXJyaWRlICclZGVmaW5lIE5BTUUgXCJWQUxVRVwiJ1xuIgorIiAgLXAsIC0tbmFtZS1wcmVmaXg9UFJFRklYICAgICAgICAgcHJlcGVuZCBQUkVGSVggdG8gdGhlIGV4dGVybmFsIHN5bWJvbHNcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQgYnkgJy1EYXBpLnByZWZpeD1QUkVGSVgnXG4iCisiICAtbCwgLS1uby1saW5lcyAgICAgICAgICAgICAgICAgICBkb24ndCBnZW5lcmF0ZSAnI2xpbmUnIGRpcmVjdGl2ZXNcbiIKKyIgIC1rLCAtLXRva2VuLXRhYmxlICAgICAgICAgICAgICAgIGluY2x1ZGUgYSB0YWJsZSBvZiB0b2tlbiBuYW1lc1xuIgorbXNnc3RyICIiCisiUGFyc2VyOlxuIgorIiAgLUwsIC0tbGFuZ3VhZ2U9U1BSQUNIRSAgICAgZGllIEF1c2dhYmVzcHJhY2hlIGJlc3RpbW1lblxuIgorIiAgLVMsIC0tc2tlbGV0b249REFURUkgICAgICAgenUgYmVudXR6ZW5kZSBTa2VsZXR0ZGF0ZWkgYW5nZWJlblxuIgorIiAgLXQsIC0tZGVidWcgICAgICAgICAgICAgICAgZGVuIFBhcnNlciBhdWYgRGVidWdnaW5nLVVudGVyc3TDvHR6dW5nICIKKyJ2b3JiZXJlaXRlblxuIgorIiAgICAgIC0tbG9jYXRpb25zICAgICAgICAgICAgU3RhbmRvcnRiZXJlY2hudW5nIGVybcO2Z2xpY2hlblxuIgorIiAgLUQsIC0tZGVmaW5lPU5BTUVbPVZBTFVFXSAgICAgICAgw6RobmxpY2ggenUg4oCeJWRlZmluZSBOQU1FIFwiVkFMVUVcIuKAnFxuIgorIiAgLUYsIC0tZm9yY2UtZGVmaW5lPU5BTUVbPVZBTFVFXSAg4oCeJWRlZmluZSBOQU1FIFwiVkFMVUVcIuKAnCDDvGJlcnNjaHJlaWJlblxuIgorIiAgLXAsIC0tbmFtZS1wcmVmaXg9UFLDhEZJWCAgIFBSw4RGSVggdm9yIGFsbGUgZXh0ZXJuZW4gU3ltYm9sZSBzZXR6ZW47XG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJhbHRldCwgZHVyY2gg4oCeLURhcGkucHJlZml4PVBSRUZJWOKAnCBlcnNldHp0XG4iCisiICAtbCwgLS1uby1saW5lcyAgICAgICAgICAgICBrZWluZSDigJ4jbGluZeKAnC1EaXJla3RpdmVuIGVyemV1Z2VuXG4iCisiICAtaywgLS10b2tlbi10YWJsZSAgICAgICAgICBlaW5lIFRhYmVsbGUgZGVyIFRva2VuLU5hbWVuIG1pdCBlaW5zY2hsaWXDn2VuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzQ2Cittc2dpZCAiIgorIk91dHB1dDpcbiIKKyIgICAgICAtLWRlZmluZXNbPUZJTEVdICAgICAgIGFsc28gcHJvZHVjZSBhIGhlYWRlciBmaWxlXG4iCisiICAtZCAgICAgICAgICAgICAgICAgICAgICAgICBsaWtld2lzZSBidXQgY2Fubm90IHNwZWNpZnkgRklMRSAoZm9yIFBPU0lYICIKKyJZYWNjKVxuIgorIiAgLXIsIC0tcmVwb3J0PVRISU5HUyAgICAgICAgYWxzbyBwcm9kdWNlIGRldGFpbHMgb24gdGhlIGF1dG9tYXRvblxuIgorIiAgICAgIC0tcmVwb3J0LWZpbGU9RklMRSAgICAgd3JpdGUgcmVwb3J0IHRvIEZJTEVcbiIKKyIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIHNhbWUgYXMgYC0tcmVwb3J0PXN0YXRlJ1xuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg9UFJFRklYICAgc3BlY2lmeSBhIFBSRUZJWCBmb3Igb3V0cHV0IGZpbGVzXG4iCisiICAtbywgLS1vdXRwdXQ9RklMRSAgICAgICAgICBsZWF2ZSBvdXRwdXQgdG8gRklMRVxuIgorIiAgLWcsIC0tZ3JhcGhbPUZJTEVdICAgICAgICAgYWxzbyBvdXRwdXQgYSBncmFwaCBvZiB0aGUgYXV0b21hdG9uXG4iCisiICAteCwgLS14bWxbPUZJTEVdICAgICAgICAgICBhbHNvIG91dHB1dCBhbiBYTUwgcmVwb3J0IG9mIHRoZSBhdXRvbWF0b25cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGUgWE1MIHNjaGVtYSBpcyBleHBlcmltZW50YWwpXG4iCittc2dzdHIgIiIKKyJBdXNnYWJlOlxuIgorIiAgICAgIC0tZGVmaW5lc1s9REFURUldICAgICAgYXVjaCBlaW5lIEhlYWRlci1EYXRlaSBoZXJzdGVsbGVuXG4iCisiICAtZCAgICAgICAgICAgICAgICAgICAgICAgICBnZW5hdXNvLCBhYmVyIERBVEVJIGthbm4gbmljaHQgYW5nZWdlYmVuICIKKyJ3ZXJkZW5cbiIKKyIgIC1yLCAtLXJlcG9ydD1ESU5HRSAgICAgICAgIGF1Y2ggRGV0YWlscyBkZXMgQXV0b21hdGVuIGF1c2dlYmVuXG4iCisiICAgICAgLS1yZXBvcnQtZmlsZT1EQVRFSSAgICBSZXBvcnQgaW4gREFURUkgYXVzZ2ViZW5cbiIKKyIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIGRhcyBHbGVpY2hlIHdpZSDigJ4tLXJlcG9ydD1zdGF0ZeKAnFxuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg9UFLDhEZJWCAgIGVpbmVuIFBSw4RGSVggZsO8ciBBdXNnYWJlLURhdGVpZW4gYW5nZWJlblxuIgorIiAgLW8sIC0tb3V0cHV0PURBVEVJICAgICAgICAgQXVzZ2FiZSBpbiBEQVRFSSBzY2hyZWliZW5cbiIKKyIgIC1nLCAtLWdyYXBoWz1EQVRFSV0gICAgICAgIGF1Y2ggZWluZW4gR3JhcGhlbiBkZXMgQXV0b21hdGVuIGhlcnN0ZWxsZW5cbiIKKyIgIC14LCAtLXhtbFs9REFURUldICAgICAgICAgIGF1Y2ggZWluZW4gWE1MLVJlcG9ydCBkZXMgQXV0b21hdGVuIGhlcnN0ZWxsZW5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhcyBYTUwtU2NoZW1hIGlzdCBleHBlcmltZW50ZWxsKVxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM2MQorbXNnaWQgIiIKKyJXYXJuaW5nIGNhdGVnb3JpZXMgaW5jbHVkZTpcbiIKKyIgIGBtaWRydWxlLXZhbHVlcycgIHVuc2V0IG9yIHVudXNlZCBtaWRydWxlIHZhbHVlc1xuIgorIiAgYHlhY2MnICAgICAgICAgICAgaW5jb21wYXRpYmlsaXRpZXMgd2l0aCBQT1NJWCBZYWNjXG4iCisiICBgY29uZmxpY3RzLXNyJyAgICBTL1IgY29uZmxpY3RzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgY29uZmxpY3RzLXJyJyAgICBSL1IgY29uZmxpY3RzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgZGVwcmVjYXRlZCcgICAgICBvYnNvbGV0ZSBjb25zdHJ1Y3RzXG4iCisiICBgb3RoZXInICAgICAgICAgICBhbGwgb3RoZXIgd2FybmluZ3MgKGVuYWJsZWQgYnkgZGVmYXVsdClcbiIKKyIgIGBhbGwnICAgICAgICAgICAgIGFsbCB0aGUgd2FybmluZ3NcbiIKKyIgIGBuby1DQVRFR09SWScgICAgIHR1cm4gb2ZmIHdhcm5pbmdzIGluIENBVEVHT1JZXG4iCisiICBgbm9uZScgICAgICAgICAgICB0dXJuIG9mZiBhbGwgdGhlIHdhcm5pbmdzXG4iCisiICBgZXJyb3InICAgICAgICAgICB0cmVhdCB3YXJuaW5ncyBhcyBlcnJvcnNcbiIKK21zZ3N0ciAiIgorIkRpZSBXYXJudW5ncy1LYXRlZ29yaWVuIHNjaGxpZcOfZW4gZWluOlxuIgorIiAg4oCebWlkcnVsZS12YWx1ZXPigJwgIG5pY2h0IGdlc2V0enRlIG9kZXIgbmljaHQgYmVudXR6dGUgV2VydGUgaW5taXR0ZW4gZWluZXIgIgorIlJlZ2VsXG4iCisiICDigJ55YWNj4oCcICAgICAgICAgICAgSW5rb21wYXRpYmlsaXTDpHRlbiBtaXQgUE9TSVjigJkgWUFDQ1xuIgorIiAg4oCeY29uZmxpY3RzLXNy4oCcICAgIFMvUi1Lb25mbGlrdGUgKHN0YW5kYXJkbcOkw59pZyBhbilcbiIKKyIgIOKAnmNvbmZsaWN0cy1ycuKAnCAgICBSL1ItS29uZmxpa3RlIChzdGFuZGFyZG3DpMOfaWcgYW4pXG4iCisiICDigJ5kZXByZWNhdGVk4oCcICAgICAgdmVyYWx0ZXRlIEtvbnN0cnVrdGVcbiIKKyIgIOKAnm90aGVy4oCcICAgICAgICAgICBhbGxlIGFuZGVyZW4gV2FybnVuZ2VuIChzdGFuZGFyZG3DpMOfaWcgYW4pXG4iCisiICDigJ5hbGzigJwgICAgICAgICAgICAgYWxsZSBXYXJudW5nZW5cbiIKKyIgIOKAnm5vLUtBVEVHT1JJReKAnCAgICBXYXJudW5nZW4gaW4gS0FURUdPUklFIGFic2NoYWx0ZW5cbiIKKyIgIOKAnm5vbmXigJwgICAgICAgICAgICBhbGxlIFdhcm51bmdlbiBhYnNjaGFsdGVuXG4iCisiICDigJ5lcnJvcuKAnCAgICAgICAgICAgV2FybnVuZ2VuIGFscyBGZWhsZXIgYmVoYW5kZWxuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzc2Cittc2dpZCAiIgorIlRISU5HUyBpcyBhIGxpc3Qgb2YgY29tbWEgc2VwYXJhdGVkIHdvcmRzIHRoYXQgY2FuIGluY2x1ZGU6XG4iCisiICBgc3RhdGUnICAgICAgICBkZXNjcmliZSB0aGUgc3RhdGVzXG4iCisiICBgaXRlbXNldCcgICAgICBjb21wbGV0ZSB0aGUgY29yZSBpdGVtIHNldHMgd2l0aCB0aGVpciBjbG9zdXJlXG4iCisiICBgbG9va2FoZWFkJyAgICBleHBsaWNpdGx5IGFzc29jaWF0ZSBsb29rYWhlYWQgdG9rZW5zIHRvIGl0ZW1zXG4iCisiICBgc29sdmVkJyAgICAgICBkZXNjcmliZSBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIHNvbHZpbmdcbiIKKyIgIGBhbGwnICAgICAgICAgIGluY2x1ZGUgYWxsIHRoZSBhYm92ZSBpbmZvcm1hdGlvblxuIgorIiAgYG5vbmUnICAgICAgICAgZGlzYWJsZSB0aGUgcmVwb3J0XG4iCittc2dzdHIgIiIKKyJESU5HRSBpc3QgZWluZSBMaXN0ZSBrb21tYWdldHJlbm50ZXIgV8O2cnRlciBhdXM6XG4iCisiICDigJ5zdGF0ZeKAnCAgICAgICAgZGllIFp1c3TDpG5kZSBiZXNjaHJlaWJlblxuIgorIiAg4oCeaXRlbXNldOKAnCAgICAgIGRpZSBLZXJuc3ltYm9sbWVuZ2VuIG1pdCBpaHJlbSBBYnNjaGx1c3MgdmVydm9sbHN0w6RuZGlnZW5cbiIKKyIgIOKAnmxvb2thaGVhZOKAnCAgICBleHBsaXppdCBWb3JzY2hhdXRva2VuIG1pdCBTeW1ib2xlbiB2ZXJiaW5kZW5cbiIKKyIgIOKAnnNvbHZlZOKAnCAgICAgICBTY2hpZWJlLS9SZWR1emllci1Lb25mbGlrdGzDtnN1bmdlbiBiZXNjaHJlaWJlblxuIgorIiAg4oCeYWxs4oCcICAgICAgICAgIGFsbGUgb2JlbiBnZW5hbm50ZW4gSW5mb3JtYXRpb25lblxuIgorIiAg4oCebm9uZeKAnCAgICAgICAgIGRlbiBSZXBvcnQgYWJzY2hhbHRlblxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM4NworbXNnaWQgIiIKKyJGRUFUVVJFIGlzIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMgdGhhdCBjYW4gaW5jbHVkZTpcbiIKKyIgIGBjYXJldCcgICAgICAgIHNob3cgZXJyb3JzIHdpdGggY2FyZXRzXG4iCisiICBgYWxsJyAgICAgICAgICBhbGwgb2YgdGhlIGFib3ZlXG4iCisiICBgbm9uZScgICAgICAgICBkaXNhYmxlIGFsbCBvZiB0aGUgYWJvdmVcbiIKKyIgICIKK21zZ3N0ciAiIgorIkZFQVRVUkUgaXMgZWluZSBMaXN0ZSBrb21tYXNlcGFyaWVydGVyIFfDtnJ0ZXIsIGRpZSBlaW5zY2hsaWXDn2VuIGvDtm5uZW46XG4iCisiICDigJ5jYXJldOKAnCAgICAgICAgRmVobGVyIG1pdCBaaXJrdW1mbGV4ZW4gKOKAnl7igJwpIG1hcmtpZXJlblxuIgorIiAg4oCeYWxs4oCcICAgICAgICAgIGFsbGUgb2JlbiBnZW5hbm50ZW5cbiIKKyIgIOKAnm5vbmXigJwgICAgICAgICBrZWlucyBkZXIgb2JlbiBnZW5hbm50ZW5cbiIKKyIgICIKKworIzogc3JjL2dldGFyZ3MuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKK21zZ3N0ciAiQmVyaWNodGVuIFNpZSBGZWhsZXIgKGF1ZiBFbmdsaXNjaCwgbWl0IExDX0FMTD1DKSBhbiA8JXM+LlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBob21lIHBhZ2U6IDwlcz4uXG4iCittc2dzdHIgIkhvbWUtUGFnZSB2b24gJXM6IDwlcz4uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk3Cittc2dpZCAiR2VuZXJhbCBoZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4uXG4iCittc2dzdHIgIiIKKyJBbGxnZW1laW5lIEhpbGZlIHp1ciBOdXR6dW5nIHZvbiBHTlUtU29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8iCisiPi5cbiIKKworIy4gVFJBTlNMQVRPUlM6IFJlcGxhY2UgTEFOR19DT0RFIGluIHRoaXMgVVJMIHdpdGggeW91ciBsYW5ndWFnZQorIy4gY29kZSA8aHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS9MQU5HX0NPREUuaHRtbD4gdG8KKyMuIGZvcm0gb25lIG9mIHRoZSBVUkxzIGF0IGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vLgorIy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRoZSBlbnRpcmUgVVJMIHdpdGggeW91ciB0cmFuc2xhdGlvbiB0ZWFtJ3MKKyMuIGVtYWlsIGFkZHJlc3MuCisjOiBzcmMvZ2V0YXJncy5jOjQxMAorbXNnaWQgIlJlcG9ydCB0cmFuc2xhdGlvbiBidWdzIHRvIDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtLz4uXG4iCittc2dzdHIgIiIKKyJCZXJpY2h0ZW4gU2llIMOcYmVyc2V0enVuZ3NmZWhsZXIgYW4gPGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vZGUuIgorImh0bWw+LlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQxMgorbXNnaWQgIkZvciBjb21wbGV0ZSBkb2N1bWVudGF0aW9uLCBydW46IGluZm8gYmlzb24uXG4iCittc2dzdHIgIkbDvHIgZGllIHZvbGxzdMOkbmRpZ2UgRG9rdW1lbnRhdGlvbiBydWZlbiBTaWUg4oCeaW5mbyBiaXNvbuKAnCBhdWYuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImJpc29uIChHTlUgQmlzb24pICVzIgorbXNnc3RyICJiaXNvbiAoR05VIEJpc29uKSAlcyIKKworIzogc3JjL2dldGFyZ3MuYzo0MzAKK21zZ2lkICJXcml0dGVuIGJ5IFJvYmVydCBDb3JiZXR0IGFuZCBSaWNoYXJkIFN0YWxsbWFuLlxuIgorbXNnc3RyICJHZXNjaHJpZWJlbiB2b24gUm9iZXJ0IENvcmJldHQgdW5kIFJpY2hhcmQgU3RhbGxtYW4uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcHlyaWdodCAoQykgJWQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCittc2dzdHIgIkNvcHlyaWdodCDCqSAlZCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MzcKK21zZ2lkICIiCisiVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk9cbiIKKyJ3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cbiIKK21zZ3N0ciAiIgorIkRpZXMgaXN0IGZyZWllIFNvZnR3YXJlOyBkaWUgS29waWVyYmVkaW5ndW5nZW4gc3RlaGVuIGluIGRlbiBRdWVsbGVuLiBFc1xuIgorImdpYnQga2VpbmUgR2FyYW50aWU7IGF1Y2ggbmljaHQgZsO8ciBWRVJLQVVGQkFSS0VJVCBvZGVyIEbDnFIgU1BFWklFTExFICIKKyJaV0VDS0UuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHNrZWxldG9uIGRlY2xhcmF0aW9ucyBhcmUgaW52YWxpZCIKK21zZ3N0ciAibWVocmZhY2hlIFNrZWxldHQtRGVrbGFyYXRpb25lbiBzaW5kIHVuZ8O8bHRpZyIKKworIzogc3JjL2dldGFyZ3MuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgbGFuZ3VhZ2UiCittc2dzdHIgIiVzOiB1bnp1bMOkc3NpZ2UgU3ByYWNoZSIKKworIzogc3JjL2dldGFyZ3MuYzo0NzkKK21zZ2lkICJtdWx0aXBsZSBsYW5ndWFnZSBkZWNsYXJhdGlvbnMgYXJlIGludmFsaWQiCittc2dzdHIgIm1laHJmYWNoZSBTcHJhY2gtRGVrbGFyYXRpb25lbiBzaW5kIHVuZ8O8bHRpZyIKKworIzogc3JjL2dldGFyZ3MuYzo3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG1pc3Npbmcgb3BlcmFuZCIKK21zZ3N0ciAiJXM6IGZlaGxlbmRlciBPcGVyYW5kIgorCisjOiBzcmMvZ2V0YXJncy5jOjc0OQorIywgYy1mb3JtYXQKK21zZ2lkICJleHRyYSBvcGVyYW5kICVzIgorbXNnc3RyICJ6dXPDpHR6bGljaGVyIE9wZXJhbmQgJXMiCisKKyM6IHNyYy9ncmFtLmM6MTEyCittc2dpZCAiZW1wdHkiCittc2dzdHIgImxlZXIiCisKKyM6IHNyYy9ncmFtLmM6MjAxCittc2dpZCAiR3JhbW1hciIKK21zZ3N0ciAiR3JhbW1hdGlrIgorCisjOiBzcmMvZ3JhcGh2aXouYzo0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiLy8gR2VuZXJhdGVkIGJ5ICVzLlxuIgorIi8vIFJlcG9ydCBidWdzIHRvIDwlcz4uXG4iCisiLy8gSG9tZSBwYWdlOiA8JXM+LlxuIgorIlxuIgorbXNnc3RyICIiCisiLy8gR2VuZXJpZXJ0IGR1cmNoICVzLlxuIgorIi8vIE1lbGRlbiBTaWUgRmVobGVyIGFuIDwlcz4uXG4iCisiLy8gSG9tZXBhZ2U6IDwlcz4uXG4iCisiXG4iCisKKyM6IHNyYy9sb2NhdGlvbi5jOjkzIHNyYy9zY2FuLWdyYW0ubDo4NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSBudW1iZXIgb3ZlcmZsb3ciCittc2dzdHIgIsOcYmVybGF1ZiBiZWkgZGVuIFplaWxlbm51bW1lcm4iCisKKyM6IHNyYy9sb2NhdGlvbi5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbHVtbiBudW1iZXIgb3ZlcmZsb3ciCittc2dzdHIgIsOcYmVybGF1ZiBiZWkgZGVuIFNwYWx0ZW5udW1tZXJuIgorCisjOiBzcmMvbWFpbi5jOjE0NgorbXNnaWQgInJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cyIKK21zZ3N0ciAiUmVnZWwgbnV0emxvcyBpbSBQYXJzZXIgd2VnZW4gS29uZmxpa3RlbiIKKworIzogc3JjL211c2NsZS10YWIuYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSVkZWZpbmUgdmFyaWFibGUgJXMgcmVkZWZpbmVkIgorbXNnc3RyICIlJWRlZmluZS1WYXJpYWJsZSAlcyBub2NoIGVpbm1hbCBkZWZpbmllcnQiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NDUzCittc2dpZCAicHJldmlvdXMgZGVmaW5pdGlvbiIKK21zZ3N0ciAidm9yaGVyZ2VoZW5kZSBEZWZpbml0aW9uIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ5MCBzcmMvbXVzY2xlLXRhYi5jOjUwNCBzcmMvbXVzY2xlLXRhYi5jOjU1NgorIzogc3JjL211c2NsZS10YWIuYzo2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVuZGVmaW5lZCAlJWRlZmluZSB2YXJpYWJsZSAlcyIKK21zZ3N0ciAiJXM6IHVuZGVmaW5pZXJ0ZSAlJWRlZmluZS1WYXJpYWJsZSAlcyIKKworIzogc3JjL211c2NsZS10YWIuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJSVkZWZpbmUgQm9vbGVhbiB2YXJpYWJsZSAlcyIKK21zZ3N0ciAidW5nw7xsdGlnZXIgV2VydCBmw7xyIEJvb2xl4oCZc2NoZSAlJWRlZmluZS1WYXJpYWJsZSAlcyIKKworIzogc3JjL211c2NsZS10YWIuYzo2MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJSVkZWZpbmUgdmFyaWFibGUgJXM6ICVzIgorbXNnc3RyICJ1bmfDvGx0aWdlciBXZXJ0IGbDvHIgJSVkZWZpbmUtVmFyaWFibGUgJXM6ICVzIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjYxMworIywgYy1mb3JtYXQKK21zZ2lkICJhY2NlcHRlZCB2YWx1ZTogJXMiCittc2dzdHIgImFremVwdGllcnRlIFdlcnRlOiAlcyIKKworIzogc3JjL3BhcnNlLWdyYW0ueTo3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBpZGVudGlmaWVyIGluIHBhcmFtZXRlciBkZWNsYXJhdGlvbiIKK21zZ3N0ciAiZmVobGVuZGVyIEJlemVpY2huZXIgaW4gUGFyYW1ldGVyZGVrbGFyYXRpb24iCisKKyM6IHNyYy9wcmludC5jOjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiB0eXBlICVkIGlzICVzXG4iCittc2dzdHIgIiBUeXAgJWQgaXN0ICVzXG4iCisKKyM6IHNyYy9wcmludC5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICJzaGlmdCwgYW5kIGdvIHRvIHN0YXRlICVkXG4iCittc2dzdHIgInNjaGllYmUgdW5kIGdlaGUgenUgWnVzdGFuZCAlZCDDvGJlclxuIgorCisjOiBzcmMvcHJpbnQuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ28gdG8gc3RhdGUgJWRcbiIKK21zZ3N0ciAiZ2VoZSB6dSBadXN0YW5kICVkIMO8YmVyXG4iCisKKyM6IHNyYy9wcmludC5jOjIwMworbXNnaWQgImVycm9yIChub25hc3NvY2lhdGl2ZSlcbiIKK21zZ3N0ciAiRmVobGVyIChuaWNodCBhc3NvemlhdGl2KVxuIgorCisjOiBzcmMvcHJpbnQuYzoyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkdWNlIHVzaW5nIHJ1bGUgJWQgKCVzKSIKK21zZ3N0ciAicmVkdXppZXJlIG1pdCBSZWdlbCAlZCAoJXMpIgorCisjOiBzcmMvcHJpbnQuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWNjZXB0IgorbXNnc3RyICJhbm5laG1lbiIKKworIzogc3JjL3ByaW50LmM6MjY0IHNyYy9wcmludC5jOjMzOAorbXNnaWQgIiRkZWZhdWx0IgorbXNnc3RyICIkZGVmYXVsdCIKKworIzogc3JjL3ByaW50LmM6MzczIHNyYy9wcmludF9ncmFwaC5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YXRlICVkIgorbXNnc3RyICJadXN0YW5kICVkIgorCisjOiBzcmMvcHJpbnQuYzo0MDkKK21zZ2lkICJUZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIiCittc2dzdHIgIlRlcm1pbmFsZSB1bmQgZGllIFJlZ2VsbiwgaW4gZGVuZW4gc2llIHZlcndlbmRldCB3ZXJkZW4iCisKKyM6IHNyYy9wcmludC5jOjQzNgorbXNnaWQgIk5vbnRlcm1pbmFscywgd2l0aCBydWxlcyB3aGVyZSB0aGV5IGFwcGVhciIKK21zZ3N0ciAiTmljaHQtVGVybWluYWwgdW5kIGRpZSBSZWdlbG4sIGluIGRlbmVuIHNpZSB2ZXJ3ZW5kZXQgd2VyZGVuIgorCisjOiBzcmMvcHJpbnQuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uIGxlZnQ6IgorbXNnc3RyICIgYXVmIGRlciBsaW5rZW4gU2VpdGU6IgorCisjOiBzcmMvcHJpbnQuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uIHJpZ2h0OiIKK21zZ3N0ciAiIGF1ZiBkZXIgcmVjaHRlbiBTZWl0ZToiCisKKyM6IHNyYy9wcmludC5jOjUxMAorbXNnaWQgIlJ1bGVzIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHMiCittc2dzdHIgIlJlZ2VsbiBudXR6bG9zIGltIFBhcnNlciB3ZWdlbiBLb25mbGlrdGVuIgorCisjOiBzcmMvcmVhZGVyLmM6NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgJXMgZGVjbGFyYXRpb25zIgorbXNnc3RyICJtZWhyIGFscyBlaW5lICVzLURla2xhcmF0aW9uIgorCisjOiBzcmMvcmVhZGVyLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlc3VsdCB0eXBlIGNsYXNoIG9uIG1lcmdlIGZ1bmN0aW9uICVzOiA8JXM+ICE9IDwlcz4iCittc2dzdHIgIlLDvGNrZ2FiZXR5cC1Lb25mbGlrdCBpbiBtZXJnZS1GdW5rdGlvbiAlczogPCVzPiAhPSA8JXM+IgorCisjOiBzcmMvcmVhZGVyLmM6MTM5IHNyYy9zeW10YWIuYzoxNTYgc3JjL3N5bXRhYi5jOjE2NiBzcmMvc3ltdGFiLmM6OTM4CisjOiBzcmMvc3ltdGFiLmM6OTUzIHNyYy9zeW10YWIuYzo5Njggc3JjL3N5bXRhYi5jOjk4MworbXNnaWQgInByZXZpb3VzIGRlY2xhcmF0aW9uIgorbXNnc3RyICJ2b3JoZXJnZWhlbmRlIERla2xhcmF0aW9uIgorCisjOiBzcmMvcmVhZGVyLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZWQgc3ltYm9sIG5hbWUgZm9yICVzIGlnbm9yZWQiCittc2dzdHIgImRvcHBlbHRlciBTeW1ib2xuYW1lIGbDvHIgJXMgaWdub3JpZXJ0IgorCisjOiBzcmMvcmVhZGVyLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bGUgZ2l2ZW4gZm9yICVzLCB3aGljaCBpcyBhIHRva2VuIgorbXNnc3RyICJSZWdlbCBmw7xyICVzIHZvcmhhbmRlbiwgd2VsY2hlcyBhYmVyIGVpbiBUb2tlbiBpc3QiCisKKyM6IHNyYy9yZWFkZXIuYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidHlwZSBjbGFzaCBvbiBkZWZhdWx0IGFjdGlvbjogPCVzPiAhPSA8JXM+IgorbXNnc3RyICJUeXBrb25mbGlrdCBiZWkgRGVmYXVsdC1Ba3Rpb246IDwlcz4gIT0gPCVzPikgIgorCisjOiBzcmMvcmVhZGVyLmM6MzEwCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IHJ1bGUgZm9yIHR5cGVkIG5vbnRlcm1pbmFsLCBhbmQgbm8gYWN0aW9uIgorbXNnc3RyICJsZWVyZSBSZWdlbCBmw7xyIE5pY2h0LVRlcm1pbmFsIG1pdCBUeXAgdW5kIGtlaW5lIEFrdGlvbiIKKworIzogc3JjL3JlYWRlci5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnVzZWQgdmFsdWU6ICQlZCIKK21zZ3N0ciAidW5iZW51dHp0ZXIgV2VydDogJCVkIgorCisjOiBzcmMvcmVhZGVyLmM6MzMwCittc2dpZCAidW5zZXQgdmFsdWU6ICQkIgorbXNnc3RyICJuaWNodCBnZXNldHp0ZXIgV2VydDogJCQiCisKKyM6IHNyYy9yZWFkZXIuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9rZW4gZm9yICUlcHJlYyBpcyBub3QgZGVmaW5lZDogJXMiCittc2dzdHIgIlRva2VuIGbDvHIgJSVwcmVjIGlzdCBuaWNodCBkZWZpbmllcnQ6ICVzIgorCisjOiBzcmMvcmVhZGVyLmM6NDMxIHNyYy9yZWFkZXIuYzo0NDUgc3JjL3JlYWRlci5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5IG9uZSAlcyBhbGxvd2VkIHBlciBydWxlIgorbXNnc3RyICJudXIgZWluICVzIHBybyBSZWdlbCBlcmxhdWJ0IgorCisjOiBzcmMvcmVhZGVyLmM6NDQxIHNyYy9yZWFkZXIuYzo0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWZmZWN0cyBvbmx5IEdMUiBwYXJzZXJzIgorbXNnc3RyICIlcyBiZXRyaWZmdCBudXIgR0xSLVBhcnNlciIKKworIzogc3JjL3JlYWRlci5jOjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBtdXN0IGJlIGZvbGxvd2VkIGJ5IHBvc2l0aXZlIG51bWJlciIKK21zZ3N0ciAiJXMgbXVzcyB2b24gcG9zaXRpdmVyIFphaGwgZ2Vmb2xndCBzZWluIgorCisjOiBzcmMvcmVhZGVyLmM6NTU0CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bGUgaXMgdG9vIGxvbmciCittc2dzdHIgIlJlZ2VsIGlzdCB6dSBsYW5nIgorCisjOiBzcmMvcmVhZGVyLmM6NjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJ1bGVzIGluIHRoZSBpbnB1dCBncmFtbWFyIgorbXNnc3RyICJFaW5nYWJlZ3JhbW1hdGlrIGVudGjDpGx0IGtlaW5lIFJlZ2VsbiIKKworIzogc3JjL3JlZHVjZS5jOjI0MQorbXNnaWQgInJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyICJSZWdlbG4gbnV0emxvcyBpbiBHcmFtbWF0aWsiCisKKyM6IHNyYy9yZWR1Y2UuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiAlcyIKK21zZ3N0ciAiTmljaHQtVGVybWluYWwgbnV0emxvcyBpbiBHcmFtbWF0aWs6ICVzIgorCisjOiBzcmMvcmVkdWNlLmM6MzUwCittc2dpZCAiTm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAiTmljaHQtVGVybWluYWxlLCBkaWUgaW4gR3JhbW1hdGlrIG51dHpsb3Mgc2luZCIKKworIzogc3JjL3JlZHVjZS5jOjM2MworbXNnaWQgIlRlcm1pbmFscyB1bnVzZWQgaW4gZ3JhbW1hciIKK21zZ3N0ciAiVGVybWluYWxlLCBkaWUgaW4gR3JhbW1hdGlrIHVuYmVudXR6dCBzaW5kIgorCisjOiBzcmMvcmVkdWNlLmM6MzcyCittc2dpZCAiUnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyICJSZWdlbG4sIGRpZSBpbiBHcmFtbWF0aWsgbnV0emxvcyBzaW5kIgorCisjOiBzcmMvcmVkdWNlLmM6Mzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ2lkX3BsdXJhbCAiJWQgbm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0clswXSAiJWQgTmljaHQtVGVybWluYWwsIGRhcyBpbiBHcmFtbWF0aWsgbnV0emxvcyBpc3QiCittc2dzdHJbMV0gIiVkIE5pY2h0LVRlcm1pbmFsZSwgZGllIGluIEdyYW1tYXRpayBudXR6bG9zIHNpbmQiCisKKyM6IHNyYy9yZWR1Y2UuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgcnVsZSB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dpZF9wbHVyYWwgIiVkIHJ1bGVzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0clswXSAiJWQgUmVnZWwsIGRpZSBpbiBHcmFtbWF0aWsgbnV0emxvcyBpc3QiCittc2dzdHJbMV0gIiVkIFJlZ2VsbiwgZGllIGluIEdyYW1tYXRpayBudXR6bG9zIHNpbmQiCisKKyM6IHNyYy9yZWR1Y2UuYzo0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnQgc3ltYm9sICVzIGRvZXMgbm90IGRlcml2ZSBhbnkgc2VudGVuY2UiCittc2dzdHIgImVzIGxhc3NlbiBzaWNoIGtlaW5lIFPDpHR6ZSB2b20gU3RhcnRzeW1ib2wgJXMgYWJsZWl0ZW4iCisKKyM6IHNyYy9zY2FuLWNvZGUubDoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYXkgJyVzJyIKK21zZ3N0ciAiaGVydW1zdHJldW5lbmRlcyDigJolc+KAmCIKKworIzogc3JjL3NjYW4tY29kZS5sOjIyOQorbXNnaWQgImEgJzsnIG1pZ2h0IGJlIG5lZWRlZCBhdCB0aGUgZW5kIG9mIGFjdGlvbiBjb2RlIgorbXNnc3RyICJlaW4g4oCaO+KAmCBrw7ZubnRlIGFtIEVuZGUgdm9uIEFrdGlvbnNjb2RlIG7DtnRpZyBzZWluIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjMyCittc2dpZCAiZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnIgorbXNnc3RyICJ6dWvDvG5mdGlnZSBWZXJzaW9uZW4gdm9uIEJpc29uIHdlcmRlbiBkYXMg4oCaO+KAmCBuaWNodCBoaW56dWbDvGdlbiIKKworIzogc3JjL3NjYW4tY29kZS5sOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2Ugb2YgWVlGQUlMLCB3aGljaCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQiCittc2dzdHIgIkJlbnV0enVuZyB2b24gWVlGQUlMLCB3YXMgdmVyYWx0ZXQgaXN0IHVuZCBiYWxkIGVudGZlcm50IHdpcmQiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0MzEgc3JjL3NjYW4tY29kZS5sOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcnMgdG86ICVjJXMgYXQgJXMiCittc2dzdHIgInZlcndlaXN0IGF1ZjogJWMlcyBiZWkgJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zc2libHkgbWVhbnQ6ICVjIgorbXNnc3RyICJtZWludGUgbcO2Z2xpY2hlcndlaXNlOiAlYyIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICIsIGhpZGluZyAlYyIKK21zZ3N0ciAiLCB2ZXJzdGVja3QgZGFiZWkgJWMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGF0ICVzIgorbXNnc3RyICIgYmVpICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiwgY2Fubm90IGJlIGFjY2Vzc2VkIGZyb20gbWlkLXJ1bGUgYWN0aW9uIGF0ICQlZCIKK21zZ3N0ciAiIgorIiwga2FubiBuaWNodCBhdXMgQWt0aW9uIGlubWl0dGVuIGVpbmVyIFJlZ2VsIGJlaSAkJWQgaGVyYXVzIHp1Z2VncmlmZmVuICIKKyJ3ZXJkZW4iCisKKyM6IHNyYy9zY2FuLWNvZGUubDo1MjEgc3JjL3NjYW4tZ3JhbS5sOjc4MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlZ2VyIG91dCBvZiByYW5nZTogJXMiCittc2dzdHIgIkdhbnp6YWhsIGF1w59lcmhhbGIgZGVzIFdlcnRlYmVyZWljaHM6ICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAidW5nw7xsdGlnZXIgVmVyd2VpczogJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yIGFmdGVyICclYycsIGV4cGVjdGluZyBpbnRlZ2VyLCBsZXR0ZXIsICdfJywgJ1snLCBvciAnJCciCittc2dzdHIgIlN5bnRheGZlaGxlciBuYWNoIOKAmiVj4oCYLCBlcndhcnRlIEdhbnp6YWhsLCBCdWNoc3RhYmUsIOKAml/igJgsIOKAmlvigJggb2RlciDigJok4oCYIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbiBiZWZvcmUgJCVkOiAlLipzIgorbXNnc3RyICJTeW1ib2wgbmljaHQgaW4gUHJvZHVrdGlvbiBnZWZ1bmRlbiB2b3IgJCVkOiAlLipzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjMzCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogJS4qcyIKK21zZ3N0ciAiU3ltYm9sIG5pY2h0IGluIFByb2R1a3Rpb24gZ2VmdW5kZW46ICUuKnMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzbGVhZGluZyByZWZlcmVuY2U6ICVzIgorbXNnc3RyICJpcnJlZsO8aHJlbmRlciBWZXJ3ZWlzOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAibWVocmRldXRpZ2VyIFZlcndlaXM6ICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGxpY2l0IHR5cGUgZ2l2ZW4gaW4gdW50eXBlZCBncmFtbWFyIgorbXNnc3RyICJleHBsaXppdGVyIFR5cCBhbmdlZ2ViZW4gdW5kIHVuZ2V0eXB0ZXIgR3JhbW1hdGlrIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NzU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiQkIGZvciB0aGUgbWlkcnVsZSBhdCAkJWQgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiQkIGbDvHIgUmVnZWxtaXR0ZSBiZWkgJCVkIHZvbiAlcyBoYXQga2VpbmVuIGRla2xhcmllcnRlbiBUeXAiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJCQgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiQkIHZvbiAlcyBoYXQga2VpbmVuIGRla2xhcmllcnRlbiBUeXAiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJCVzIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICIkJXMgdm9uICVzIGhhdCBrZWluZW4gZGVrbGFyaWVydGVuIFR5cCIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJheSAnLCcgdHJlYXRlZCBhcyB3aGl0ZSBzcGFjZSIKK21zZ3N0ciAiw7xiZXJ6w6RobGlnZXMg4oCeLOKAnCBhbHMgRnJlaXJhdW0gYmV0cmFjaHRldCIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRpcmVjdGl2ZTogJXMiCittc2dzdHIgInVuZ8O8bHRpZ2UgRGlyZWt0aXZlOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50aWZpZXI6ICVzIgorbXNnc3RyICJ1bmfDvGx0aWdlciBCZXplaWNobmVyOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjI5NQorbXNnaWQgImludmFsaWQgY2hhcmFjdGVyIgorbXNnaWRfcGx1cmFsICJpbnZhbGlkIGNoYXJhY3RlcnMiCittc2dzdHJbMF0gInVuZ8O8bHRpZ2VzIFplaWNoZW4iCittc2dzdHJbMV0gInVuZ8O8bHRpZ2UgWmVpY2hlbiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGlkZW50aWZpZXIgaW4gYnJhY2tldGVkIG5hbWU6ICVzIgorbXNnc3RyICJ1bmVyd2FydGV0ZXIgQmV6ZWljaG5lciBpbSBnZWtsYW1tZXJ0ZW4gTmFtZW46ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgImFuIGlkZW50aWZpZXIgZXhwZWN0ZWQiCittc2dzdHIgIkJlemVpY2huZXIgZXJ3YXJ0ZXQiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozODEKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciBpbiBicmFja2V0ZWQgbmFtZSIKK21zZ2lkX3BsdXJhbCAiaW52YWxpZCBjaGFyYWN0ZXJzIGluIGJyYWNrZXRlZCBuYW1lIgorbXNnc3RyWzBdICJ1bmfDvGx0aWdlcyBaZWljaGVuIGltIGdla2xhbW1lcnRlbiBOYW1lbiIKK21zZ3N0clsxXSAidW5nw7xsdGlnZSBaZWljaGVuIGltIGdla2xhbW1lcnRlbiBOYW1lbiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjQ4MSBzcmMvc2Nhbi1ncmFtLmw6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGNoYXJhY3RlciBsaXRlcmFsIgorbXNnc3RyICJsZWVyZXMgWmVpY2hlbmxpdGVyYWwiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo0ODYgc3JjL3NjYW4tZ3JhbS5sOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJleHRyYSBjaGFyYWN0ZXJzIGluIGNoYXJhY3RlciBsaXRlcmFsIgorbXNnc3RyICJ6dXPDpHR6bGljaGUgWmVpY2hlbiBpbiBaZWljaGVubGl0ZXJhbCIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bGwgY2hhcmFjdGVyIgorbXNnc3RyICJ1bmfDvGx0aWdlcyBOdWxsLVplaWNoZW4iCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1MzEgc3JjL3NjYW4tZ3JhbS5sOjU0MSBzcmMvc2Nhbi1ncmFtLmw6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIGFmdGVyIFxcLWVzY2FwZTogJXMiCittc2dzdHIgInVuZ8O8bHRpZ2UgWmFobCBoaW50ZXIgXFwtRmx1Y2h0OiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjU3MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciBhZnRlciBcXC1lc2NhcGU6ICVzIgorbXNnc3RyICJ1bmfDvGx0aWdlcyBaZWljaGVuIGhpbnRlciBcXC1GbHVjaHQ6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6OTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgJXMgYXQgZW5kIG9mIGZpbGUiCittc2dzdHIgImZlaGxlbmRlcyAlcyBhbSBFbmRlIGRlciBEYXRlaSIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjkxMgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzIGF0IGVuZCBvZiBsaW5lIgorbXNnc3RyICJmZWhsZW5kZXMgJXMgYW0gRW5kZSBkZXIgWmVpbGUiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5jbG9zZWQgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICJuaWNodCBnZXNjaGxvc3NlbmUgRGlyZWt0aXZlICVzIGltIFNrZWxldHQiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIGZldyBhcmd1bWVudHMgZm9yICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAienUgd2VuaWdlIEFyZ3VtZW50ZSBmw7xyIERpcmVrdGl2ZSAlcyBpbSBTa2VsZXR0IgorCisjOiBzcmMvc2Nhbi1za2VsLmw6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBmb3IgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICJ6dSB2aWVsZSBBcmd1bWVudGUgZsO8ciBEaXJla3RpdmUgJXMgaW0gU2tlbGV0dCIKKworIzogc3JjL3N5bWxpc3QuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAkIHZhbHVlOiAkJWQiCittc2dzdHIgInVuenVsw6Rzc2lnZXIgJC1XZXJ0OiAkJWQiCisKKyM6IHNyYy9zeW10YWIuYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJQT1NJWCBZYWNjIGZvcmJpZHMgZGFzaGVzIGluIHN5bWJvbCBuYW1lczogJXMiCittc2dzdHIgIlBPU0lYLVlhY2MgdmVyYmlldGV0IEJpbmRlc3RyaWNoZSBpbiBTeW1ib2xuYW1lbjogJXMiCisKKyM6IHNyYy9zeW10YWIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBzeW1ib2xzIGluIGlucHV0IGdyYW1tYXIgKGxpbWl0IGlzICVkKSIKK21zZ3N0ciAienUgdmllbGUgU3ltYm9sZSBpbiBFaW5nYWJlZ3JhbW1hdGlrIChNYXhpbXVtIGlzdCAlZCkiCisKKyM6IHNyYy9zeW10YWIuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVkZWNsYXJhdGlvbiBmb3IgJXMiCittc2dzdHIgIiVzIGVybmV1dGUgRGVrbGFyYXRpb24gZsO8ciAlcyIKKworIzogc3JjL3N5bXRhYi5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciA8JXM+IgorbXNnc3RyICIlcyBlcm5ldXRlIERla2xhcmF0aW9uIGbDvHIgPCVzPiIKKworIzogc3JjL3N5bXRhYi5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgcmVkZWZpbmVkIgorbXNnc3RyICJTeW1ib2wgJXMgbm9jaCBlaW5tYWwgZGVmaW5pZXJ0IgorCisjOiBzcmMvc3ltdGFiLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyByZWRlY2xhcmVkIgorbXNnc3RyICJTeW1ib2wgJXMgbm9jaCBlaW5tYWwgZGVrbGFyaWVydCIKKworIzogc3JjL3N5bXRhYi5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlZmluaW5nIHVzZXIgdG9rZW4gbnVtYmVyIG9mICVzIgorbXNnc3RyICJkZWZpbmllcmUgTnV0emVydG9rZW5udW1tZXIgdm9uICVzIGVybmV1dCIKKworIzogc3JjL3N5bXRhYi5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgaXMgdXNlZCwgYnV0IGlzIG5vdCBkZWZpbmVkIGFzIGEgdG9rZW4gYW5kIGhhcyBubyBydWxlcyIKK21zZ3N0ciAiIgorIlN5bWJvbCAlcyB3aXJkIGJlbnV0enQsIGlzdCBhYmVyIG5pY2h0IGFscyBUb2tlbiBkZWZpbmllcnQgdW5kIGhhdCBrZWluZSAiCisiUmVnZWwiCisKKyM6IHNyYy9zeW10YWIuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHVzZWQgbW9yZSB0aGFuIG9uY2UgYXMgYSBsaXRlcmFsIHN0cmluZyIKK21zZ3N0ciAiU3ltYm9sICVzIHdpcmQgbWVociBhbHMgZWlubWFsIGFscyBsaXRlcmFsZSBaZWljaGVua2V0dGUgYmVudXR6dCIKKworIzogc3JjL3N5bXRhYi5jOjQxOAorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgZ2l2ZW4gbW9yZSB0aGFuIG9uZSBsaXRlcmFsIHN0cmluZyIKK21zZ3N0ciAiU3ltYm9sICVzIHdpcmQgbWVociBhbHMgZWluZSBsaXRlcmFsZSBaZWljaGVua2V0dGUgZ2VnZWJlbiIKKworIzogc3JjL3N5bXRhYi5jOjUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2VyIHRva2VuIG51bWJlciAlZCByZWRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAiVG9rZW5udW1tZXIgJWQgZXJuZXV0IGRla2xhcmllcnQgZsO8ciAlcyIKKworIzogc3JjL3N5bXRhYi5jOjUzOQorIywgYy1mb3JtYXQKK21zZ2lkICJwcmV2aW91cyBkZWNsYXJhdGlvbiBmb3IgJXMiCittc2dzdHIgInZvcmhlcmdlaGVuZGUgRGVrbGFyYXRpb24gZsO8ciAlcyIKKworIzogc3JjL3N5bXRhYi5jOjkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgc3RhcnQgc3ltYm9sICVzIGlzIHVuZGVmaW5lZCIKK21zZ3N0ciAiZGFzIFN0YXJ0c3ltYm9sICVzIGlzdCB1bmRlZmluaWVydCIKKworIzogc3JjL3N5bXRhYi5jOjkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgc3RhcnQgc3ltYm9sICVzIGlzIGEgdG9rZW4iCittc2dzdHIgImRhcyBTdGFydHN5bWJvbCAlcyBpc3QgZWluIFRva2VuIgorCisjOiBzcmMvc3ltdGFiLmM6OTM1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICUlZGVzdHJ1Y3RvciIKK21zZ3N0ciAiZXJuZXV0ZSBEZWtsYXJhdGlvbiBmw7xyIHZvcmVpbmdlc3RlbGx0ZW4gbWFya2llcnRlbiAlJWRlc3RydWN0b3IiCisKKyM6IHNyYy9zeW10YWIuYzo5NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdsZXNzICUlZGVzdHJ1Y3RvciIKK21zZ3N0ciAiZXJuZXV0ZSBEZWtsYXJhdGlvbiBmw7xyIHZvcmVpbmdlc3RlbGx0ZW4gbmljaHQtbWFya2llcnRlbiAlJWRlc3RydWN0b3IiCisKKyM6IHNyYy9zeW10YWIuYzo5NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdnZWQgJSVwcmludGVyIgorbXNnc3RyICJlcm5ldXRlIERla2xhcmF0aW9uIGbDvHIgdm9yZWluZ2VzdGVsbHRlbiBtYXJraWVydGVuICUlcHJpbnRlciIKKworIzogc3JjL3N5bXRhYi5jOjk4MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJSVwcmludGVyIgorbXNnc3RyICJlcm5ldXRlIERla2xhcmF0aW9uIGbDvHIgdm9yZWluZ2VzdGVsbHRlbiBuaWNodC1tYXJraWVydGVuICUlcHJpbnRlciIKKworIzogZGpncHAvc3VicGlwZS5jOjYzIGRqZ3BwL3N1YnBpcGUuYzoyODYgZGpncHAvc3VicGlwZS5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdmluZyBvZiAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiRW50ZmVybmVuIHZvbiDigJ4lc+KAnCBmZWhsZ2VzY2hsYWdlbiIKKworIzogZGpncHAvc3VicGlwZS5jOjg1IGRqZ3BwL3N1YnBpcGUuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGlvbiBvZiBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiRXJzdGVsbGVuIGVpbmVyIHRlbXBvcsOkcmVuIERhdGVpIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgInNhdmluZyBzdGRpbiBmYWlsZWQiCittc2dzdHIgIlNwZWljaGVybiBkZXIgU3RhbmRhcmRlaW5nYWJlIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgInNhdmluZyBzdGRvdXQgZmFpbGVkIgorbXNnc3RyICJTcGVpY2hlcm4gZGVyIFN0YW5kYXJkYXVzZ2FiZSBmZWhsZ2VzY2hsYWdlbiIKKworIzogZGpncHAvc3VicGlwZS5jOjE1MyBkamdwcC9zdWJwaXBlLmM6MTk3IGRqZ3BwL3N1YnBpcGUuYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlbmluZyBvZiB0bXBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiw5ZmZm5lbiBkZXIgRGF0ZWkgdG1wZmlsZSBmZWhsZ2VzY2hsYWdlbiIKKworIzogZGpncHAvc3VicGlwZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBiaXNvbidzIHN0ZG91dCB0byB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisiVW1sZWl0ZW4gZGVyIFN0YW5kYXJkYXVzZ2FiZSB2b24gQmlzb24gaW4gZGllIHRlbXBvcsOkcmUgRGF0ZWkgZmVobGdlc2NobGFnZW4iCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgbTQncyBzdGRpbiBmcm9tIHRoZSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKyJVbWxlaXRlbiBkZXIgU3RhbmRhcmRlaW5nYWJlIHZvbiBtNCBhdXMgZGVyIHRlbXBvcsOkcmVuIERhdGVpIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZW5pbmcgb2YgYSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIsOWZmZuZW4gZWluZXIgdGVtcG9yw6RyZW4gRGF0ZWkgZmVobGdlc2NobGFnZW4iCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgbTQncyBzdGRvdXQgdG8gYSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKyJVbWxlaXRlbiBkZXIgU3RhbmRhcmRhdXNnYWJlIHZvbiBtNCBpbiBlaW5lIHRlbXBvcsOkcmUgRGF0ZWkgZmVobGdlc2NobGFnZW4iCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3Vic2lkaWFyeSBwcm9ncmFtICclcycgaW50ZXJydXB0ZWQiCittc2dzdHIgInVudGVyZ2VvcmRuZXRlcyBQcm9ncmFtbSDigJ4lc+KAnCB1bnRlcmJyb2NoZW4iCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAic3Vic2lkaWFyeSBwcm9ncmFtICclcycgbm90IGZvdW5kIgorbXNnc3RyICJ1bnRlcmdlb3JkbmV0ZXMgUHJvZ3JhbW0g4oCeJXPigJwgbmljaHQgZ2VmdW5kZW4iCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgYmlzb24ncyBzdGRpbiBmcm9tIHRoZSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKyJVbWxlaXRlbiBkZXIgU3RhbmRhcmRlaW5nYWJlIHZvbiBCaXNvbiBhdXMgZGVyIHRlbXBvcsOkcmVuIERhdGVpICIKKyJmZWhsZ2VzY2hsYWdlbiIKKworIzogbGliL2FyZ21hdGNoLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgJXMgZm9yICVzIgorbXNnc3RyICJ1bnp1bMOkc3NpZ2VzIEFyZ3VtZW50ICVzIGbDvHIgJXMiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgYXJndW1lbnQgJXMgZm9yICVzIgorbXNnc3RyICJtZWhyZGV1dGlnZXMgQXJndW1lbnQgJXMgZsO8ciAlcyIKKworIzogbGliL2FyZ21hdGNoLmM6MTUzCittc2dpZCAiVmFsaWQgYXJndW1lbnRzIGFyZToiCittc2dzdHIgIkfDvGx0aWdlIEFyZ3VtZW50ZSBzaW5kOiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfYWxsb2NzLCAldSBmcmVlZCAoJS4yZiUlKS5cbiIKK21zZ3N0ciAiJXUgYml0c2V0X2FsbG9jcywgJXUgZnJlaWdlZ2ViZW4gKCUuMmYlJSkuXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3NldHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorbXNnc3RyICIldSBiaXRzZXRfc2V0cywgJXUgendpc2NoZW5nZXNwZWljaGVydCAoJS4yZiUlKVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9yZXNldHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorbXNnc3RyICIldSBiaXRzZXRfcmVzZXRzLCAldSB6d2lzY2hlbmdlc3BlaWNoZXJ0ICglLjJmJSUpXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3Rlc3RzLCAldSBjYWNoZWQgKCUuMmYlJSlcbiIKK21zZ3N0ciAiJXUgYml0c2V0X3Rlc3RzLCAldSB6d2lzY2hlbmdlc3BlaWNoZXJ0ICglLjJmJSUpXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X2xpc3RzXG4iCittc2dzdHIgIiV1IGJpdHNldF9saXN0c1xuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTkyCittc2dpZCAiY291bnQgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICJaw6RobGVyLUhpc3RvZ3JhbW1cbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5NQorbXNnaWQgInNpemUgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICJHcsO2w59lLUhpc3RvZ3JhbW1cbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5OAorbXNnaWQgImRlbnNpdHkgaGlzdG9ncmFtXG4iCittc2dzdHIgIkRpY2h0ZS1IaXN0b2dyYW1tXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJpdHNldCBzdGF0aXN0aWNzOlxuIgorIlxuIgorbXNnc3RyICIiCisiQml0c2V0LVN0YXRpc3Rpa2VuOlxuIgorIlxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkFjY3VtdWxhdGVkIHJ1bnMgPSAldVxuIgorbXNnc3RyICJHZXNhbW1lbHRlIER1cmNobMOkdWZlID0gJXVcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI1OSBsaWIvYml0c2V0X3N0YXRzLmM6MjY0Cittc2dpZCAiY2Fubm90IHJlYWQgc3RhdHMgZmlsZSIKK21zZ3N0ciAia2FubiBTdGF0aXN0aWstRGF0ZWkgbmljaHQgbGVzZW4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHN0YXRzIGZpbGUgc2l6ZVxuIgorbXNnc3RyICJ1bmfDvGx0aWdlIFN0YXRpc3Rpay1EYXRlaS1HcsO2w59lXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyODcgbGliL2JpdHNldF9zdGF0cy5jOjI4OQorbXNnaWQgImNhbm5vdCB3cml0ZSBzdGF0cyBmaWxlIgorbXNnc3RyICJrYW5uIFN0YXRpc3Rpay1EYXRlaSBuaWNodCBzY2hyZWliZW4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyOTIKK21zZ2lkICJjYW5ub3Qgb3BlbiBzdGF0cyBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJrYW5uIFN0YXRpc3Rpay1EYXRlaSBuaWNodCB6dW0gU2NocmVpYmVuIMO2ZmZuZW4iCisKKyM6IGxpYi9jbG9zZW91dC5jOjExMgorbXNnaWQgIndyaXRlIGVycm9yIgorbXNnc3RyICJTY2hyZWliZmVobGVyIgorCisjOiBsaWIvZXJyb3IuYzoxODgKK21zZ2lkICJVbmtub3duIHN5c3RlbSBlcnJvciIKK21zZ3N0ciAiVW5iZWthbm50ZXIgU3lzdGVtZmVobGVyIgorCisjOiBsaWIvZ2V0b3B0LmM6NTQ3IGxpYi9nZXRvcHQuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnJXMnIGlzIGFtYmlndW91czsgcG9zc2liaWxpdGllczoiCittc2dzdHIgIiVzOiBPcHRpb24g4oCeJXPigJwgaXN0IG1laHJkZXV0aWc7IG3DtmdsaWNoIHNpbmQ6IgorCisjOiBsaWIvZ2V0b3B0LmM6NjI0IGxpYi9nZXRvcHQuYzo2MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLS0lcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogT3B0aW9uIOKAni0tJXPigJwgZXJsYXVidCBrZWluIEFyZ3VtZW50XG4iCisKKyM6IGxpYi9nZXRvcHQuYzo2MzcgbGliL2dldG9wdC5jOjY0MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICclYyVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBPcHRpb24g4oCeJWMlc+KAnCBlcmxhdWJ0IGtlaW4gQXJndW1lbnRcbiIKKworIzogbGliL2dldG9wdC5jOjY4NSBsaWIvZ2V0b3B0LmM6NzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy0tJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBPcHRpb24g4oCeLS0lc+KAnCBlcmZvcmRlcnQgZWluIEFyZ3VtZW50XG4iCisKKyM6IGxpYi9nZXRvcHQuYzo3NDIgbGliL2dldG9wdC5jOjc0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiAnLS0lcydcbiIKK21zZ3N0ciAiJXM6IHVuYmVrYW5udGUgT3B0aW9uIOKAni0tJXPigJxcbiIKKworIzogbGliL2dldG9wdC5jOjc1MyBsaWIvZ2V0b3B0LmM6NzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uICclYyVzJ1xuIgorbXNnc3RyICIlczogdW5iZWthbm50ZSBPcHRpb24g4oCeJWMlc+KAnFxuIgorCisjOiBsaWIvZ2V0b3B0LmM6ODA1IGxpYi9nZXRvcHQuYzo4MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgb3B0aW9uIC0tICclYydcbiIKK21zZ3N0ciAiJXM6IHVuZ8O8bHRpZ2UgT3B0aW9uIC0tIOKAniVj4oCcXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo4NjEgbGliL2dldG9wdC5jOjg3OCBsaWIvZ2V0b3B0LmM6MTA4OCBsaWIvZ2V0b3B0LmM6MTEwNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICclYydcbiIKK21zZ3N0ciAiJXM6IE9wdGlvbiBlcmZvcmRlcnQgZWluIEFyZ3VtZW50IC0tIOKAniVj4oCcXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo5MzQgbGliL2dldG9wdC5jOjk1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiVzOiBPcHRpb24g4oCeLVcgJXPigJwgaXN0IG1laHJkZXV0aWdcbiIKKworIzogbGliL2dldG9wdC5jOjk3NCBsaWIvZ2V0b3B0LmM6OTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBPcHRpb24g4oCeLVcgJXPigJwgZXJsYXVidCBrZWluIEFyZ3VtZW50XG4iCisKKyM6IGxpYi9nZXRvcHQuYzoxMDEzIGxpYi9nZXRvcHQuYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogT3B0aW9uIOKAni1XICVz4oCcIGVyZm9yZGVydCBlaW4gQXJndW1lbnRcbiIKKworIzogbGliL29ic3RhY2suYzo0MTMgbGliL29ic3RhY2suYzo0MTUgbGliL3hhbGxvYy1kaWUuYzozNAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIlNwZWljaGVyIGF1c2dlc2Now7ZwZnQiCisKKyM6IGxpYi9zcGF3bi1waXBlLmM6MTQwIGxpYi9zcGF3bi1waXBlLmM6MTQzIGxpYi9zcGF3bi1waXBlLmM6MjY0CisjOiBsaWIvc3Bhd24tcGlwZS5jOjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIHBpcGUiCittc2dzdHIgImthbm4gRGF0ZWkgbmljaHQgc2NobGllw59lbiIKKworIzogbGliL3NwYXduLXBpcGUuYzoyMzQgbGliL3NwYXduLXBpcGUuYzozNDggbGliL3dhaXQtcHJvY2Vzcy5jOjI4MgorIzogbGliL3dhaXQtcHJvY2Vzcy5jOjM1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdWJwcm9jZXNzIGZhaWxlZCIKK21zZ3N0ciAiVW50ZXJwcm96ZXNzICVzIGZlaGxnZXNjaGxhZ2VuIgorCisjLiBUUkFOU0xBVE9SUzoKKyMuIEdldCB0cmFuc2xhdGlvbnMgZm9yIG9wZW4gYW5kIGNsb3NpbmcgcXVvdGF0aW9uIG1hcmtzLgorIy4gVGhlIG1lc3NhZ2UgY2F0YWxvZyBzaG91bGQgdHJhbnNsYXRlICJgIiB0byBhIGxlZnQKKyMuIHF1b3RhdGlvbiBtYXJrIHN1aXRhYmxlIGZvciB0aGUgbG9jYWxlLCBhbmQgc2ltaWxhcmx5IGZvcgorIy4gIiciLiAgRm9yIGV4YW1wbGUsIGEgRnJlbmNoIFVuaWNvZGUgbG9jYWwgc2hvdWxkIHRyYW5zbGF0ZQorIy4gdGhlc2UgdG8gVSswMEFCIChMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRQorIy4gUVVPVEFUSU9OIE1BUkspLCBhbmQgVSswMEJCIChSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUKKyMuIFFVT1RBVElPTiBNQVJLKSwgcmVzcGVjdGl2ZWx5LgorIy4KKyMuIElmIHRoZSBjYXRhbG9nIGhhcyBubyB0cmFuc2xhdGlvbiwgd2Ugd2lsbCB0cnkgdG8KKyMuIHVzZSBVbmljb2RlIFUrMjAxOCAoTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspIGFuZAorIy4gVW5pY29kZSBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykuICBJZiB0aGUKKyMuIGN1cnJlbnQgbG9jYWxlIGlzIG5vdCBVbmljb2RlLCBsb2NhbGVfcXVvdGluZ19zdHlsZQorIy4gd2lsbCBxdW90ZSAnbGlrZSB0aGlzJywgYW5kIGNsb2NhbGVfcXVvdGluZ19zdHlsZSB3aWxsCisjLiBxdW90ZSAibGlrZSB0aGlzIi4gIFlvdSBzaG91bGQgYWx3YXlzIGluY2x1ZGUgdHJhbnNsYXRpb25zCisjLiBmb3IgImAiIGFuZCAiJyIgZXZlbiBpZiBVKzIwMTggYW5kIFUrMjAxOSBhcmUgYXBwcm9wcmlhdGUKKyMuIGZvciB5b3VyIGxvY2FsZS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFya3NfaW5fb3RoZXJfbGFuZ3VhZ2VzPgorIy4gYW5kIHVzZSBnbHlwaHMgc3VpdGFibGUgZm9yIHlvdXIgbGFuZ3VhZ2UuCisjOiBsaWIvcXVvdGVhcmcuYzozMTIKK21zZ2lkICJgIgorbXNnc3RyICLigJ4iCisKKyM6IGxpYi9xdW90ZWFyZy5jOjMxMworbXNnaWQgIiciCittc2dzdHIgIuKAnCIKKworIzogbGliL3RpbWV2YXIuYzo0NzUKK21zZ2lkICIiCisiXG4iCisiRXhlY3V0aW9uIHRpbWVzIChzZWNvbmRzKVxuIgorbXNnc3RyICIiCisiXG4iCisiQXVzZsO8aHJ1bmdzemVpdGVuIChTZWt1bmRlbilcbiIKKworIzogbGliL3RpbWV2YXIuYzo1MjUKK21zZ2lkICIgVE9UQUwgICAgICAgICAgICAgICAgIDoiCittc2dzdHIgIiBaVVNBTU1FTiAgICAgICAgICAgICAgOiIKKworIzogbGliL3RpbWV2YXIuYzo1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZSBpbiAlczogJWxkLiUwNmxkICglbGQlJSlcbiIKK21zZ3N0ciAiWmVpdCBpbiAlczogJWxkLiUwNmxkICglbGQlJSlcbiIKKworIzogbGliL3czMnNwYXduLmg6NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiX29wZW5fb3NmaGFuZGxlIGZhaWxlZCIKK21zZ3N0ciAiX29wZW5fb3NmaGFuZGxlIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBsaWIvdzMyc3Bhd24uaDo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdG9yZSBmZCAlZDogZHVwMiBmYWlsZWQiCittc2dzdHIgImthbm4gRGF0ZWlkZXNrcmlwdG9yICVkIG5pY2h0IHdpZWRlciBoZXJzdGVsbGVuOiBkdXAyIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6MjIzIGxpYi93YWl0LXByb2Nlc3MuYzoyNTUgbGliL3dhaXQtcHJvY2Vzcy5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdWJwcm9jZXNzIgorbXNnc3RyICJVbnRlcnByb3plc3MgJXMiCisKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzoyNzQgbGliL3dhaXQtcHJvY2Vzcy5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdWJwcm9jZXNzIGdvdCBmYXRhbCBzaWduYWwgJWQiCittc2dzdHIgIlVudGVycHJvemVzcyAlcyBlcmhpZWx0IHTDtmRsaWNoZXMgU2lnbmFsICVkIgorCisjfiBtc2dpZCAic3RhdGUgJWQiCisjfiBtc2dzdHIgIlp1c3RhbmQgJWQiCisKKyN+IG1zZ2lkICJzdHJheSAnQCciCisjfiBtc2dzdHIgImhlcnVtc3RyZXVuZW5kZXMg4oCaQOKAmCIKKworI34gbXNnaWQgIiIKKyN+ICJ1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgYCVzJyBwYXNzZWQgdG8gbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2dldF9sb2MiCisjfiBtc2dzdHIgIiIKKyN+ICJ1bmRlZmluaWVydGUgJSVkZWZpbmUtVmFyaWFibGUg4oCeJXPigJwgYW4gbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2dldF9sb2MgIgorI34gIsO8YmVyZ2ViZW4iCisKKyN+IG1zZ2lkICIiCisjfiAidW5kZWZpbmVkICUlZGVmaW5lIHZhcmlhYmxlIGAlcycgcGFzc2VkIHRvICIKKyN+ICJtdXNjbGVfcGVyY2VudF9kZWZpbmVfZ2V0X3N5bmNsaW5lIgorI34gbXNnc3RyICIiCisjfiAidW5kZWZpbmllcnRlICUlZGVmaW5lLVZhcmlhYmxlIOKAniVz4oCcIGFuIG11c2NsZV9wZXJjZW50X2RlZmluZV9nZXRfc3luY2xpbmUgIgorI34gIsO8YmVyZ2ViZW4iCisKKyN+IG1zZ2lkICIiCisjfiAidW5kZWZpbmVkICUlZGVmaW5lIHZhcmlhYmxlIGAlcycgcGFzc2VkIHRvIG11c2NsZV9wZXJjZW50X2RlZmluZV9mbGFnX2lmIgorI34gbXNnc3RyICIiCisjfiAidW5kZWZpbmllcnRlICUlZGVmaW5lLVZhcmlhYmxlIOKAniVz4oCcIGFuIG11c2NsZV9wZXJjZW50X2RlZmluZV9mbGFnX2lmICIKKyN+ICLDvGJlcmdlYmVuIgorCisjfiBtc2dpZCAiIgorI34gInVuZGVmaW5lZCAlJWRlZmluZSB2YXJpYWJsZSBgJXMnIHBhc3NlZCB0byAiCisjfiAibXVzY2xlX3BlcmNlbnRfZGVmaW5lX2NoZWNrX3ZhbHVlcyIKKyN+IG1zZ3N0ciAiIgorI34gInVuZGVmaW5pZXJ0ZSAlJWRlZmluZS1WYXJpYWJsZSDigJ4lc+KAnCBhbiBtdXNjbGVfcGVyY2VudF9kZWZpbmVfY2hlY2tfdmFsdWVzICIKKyN+ICLDvGJlcmdlYmVuIgorCisjfiBtc2dpZCAidXNlbGVzcyBub250ZXJtaW5hbDogJXMiCisjfiBtc2dzdHIgIm51dHpsb3NlcyBOaWNodC1UZXJtaW5hbDogJXMiCisKKyN+IG1zZ2lkICJVc2VsZXNzIG5vbnRlcm1pbmFscyIKKyN+IG1zZ3N0ciAiTnV0emxvc2UgTmljaHQtVGVybWluYWxlIgorCisjfiBtc2dpZCAiVGVybWluYWxzIHdoaWNoIGFyZSBub3QgdXNlZCIKKyN+IG1zZ3N0ciAiTmljaHQgZ2VudXR6dGUgVGVybWluYWxlIgorCisjfiBtc2dpZCAiVXNlbGVzcyBydWxlcyIKKyN+IG1zZ3N0ciAiTnV0emxvc2UgUmVnZWxuIgorCisjfiBtc2dpZCAiJWQgcnVsZSBuZXZlciByZWR1Y2VkXG4iCisjfiBtc2dpZF9wbHVyYWwgIiVkIHJ1bGVzIG5ldmVyIHJlZHVjZWRcbiIKKyN+IG1zZ3N0clswXSAiJWQgUmVnZWwgd3VyZGUgbmllbWFscyByZWR1emllcnRcbiIKKyN+IG1zZ3N0clsxXSAiJWQgUmVnZWxuIHd1cmRlbiBuaWVtYWxzIHJlZHV6aWVydFxuIgorCisjfiBtc2dpZCAiUE9TSVggZm9yYmlkcyBkZWNsYXJhdGlvbnMgaW4gdGhlIGdyYW1tYXIiCisjfiBtc2dzdHIgIlBPU0lYIHZlcmJpZXRldCBEZWtsYXJhdGlvbmVuIGluIGRlciBHcmFtbWF0aWsiCisKKyN+IG1zZ2lkICJpbnZhbGlkICQgdmFsdWUiCisjfiBtc2dzdHIgInVuenVsw6Rzc2lnZXIgJC1XZXJ0IgorCisjfiBtc2dpZCAiY29uZmxpY3RpbmcgcHJlY2VkZW5jZXMgZm9yICVzIGFuZCAlcyIKKyN+IG1zZ3N0ciAiVm9ycmFuZyBmw7xyICVzIHVuZCAlcyB3aWRlcnNwcmVjaGVuIHNpY2giCisKKyN+IG1zZ2lkICJjb25mbGljdGluZyBhc3NvY2lhdGl2aXRpZXMgZm9yICVzICglcykgYW5kICVzICglcykiCisjfiBtc2dzdHIgIkFzc296aWF0aXZpdMOkdHMtV2VydGUgZsO8ciAlcyAoJXMpIHVuZCAlcyAoJXMpIHdpZGVyc3ByZWNoZW4gc2ljaCIKKworI34gbXNnaWQgImFuZCIKKyN+IG1zZ3N0ciAidW5kIgorCisjfiBtc2dpZCAiY29uZmxpY3RzOiAiCisjfiBtc2dzdHIgIktvbmZsaWt0ZTogIgorCisjfiBtc2dpZCAiU3RhdGUgJWQgY29udGFpbnMgIgorI34gbXNnc3RyICJadXN0YW5kICVkIGVudGjDpGx0ICIKKworI34gbXNnaWQgInRvbyBtYW55IGdvdG9zIChtYXggJWQpIgorI34gbXNnc3RyICJ6dSB2aWVsZSBHb3RvcyAobWF4ICVkKSIKKworI34gbXNnaWQgIiVzIGlzIGludmFsaWQiCisjfiBtc2dzdHIgIiVzIGlzdCB1bnp1bMOkc3NpZyIKKworI34gbXNnaWQgInRvbyBtYW55IHN0YXRlcyAobWF4ICVkKSIKKyN+IG1zZ3N0ciAienUgdmllbGUgWnVzdMOkbmRlIChtYXggJWQpIgorCisjfiBtc2dpZCAiJXM6IG5vIGdyYW1tYXIgZmlsZSBnaXZlblxuIgorI34gbXNnc3RyICIlczoga2VpbmUgR3JhbW1hdGlrLURhdGVpIGFuZ2VnZWJlblxuIgorCisjfiBtc2dpZCAiJXM6IGV4dHJhIGFyZ3VtZW50cyBpZ25vcmVkIGFmdGVyIGAlcydcbiIKKyN+IG1zZ3N0ciAiJXM6IHp1c8OkdHpsaWNoZSBBcmd1bWVudGUgbmFjaCDigJ4lc+KAnCB3ZXJkZW4gaWdub3JpZXJ0XG4iCisKKyN+IG1zZ2lkICJ0d28gQHByZWMncyBpbiBhIHJvdyIKKyN+IG1zZ3N0ciAiendlaSBAcHJlYy1BbndlaXN1bmdlbiBuYWNoZWluYW5kZXIiCisKKyN+IG1zZ2lkICJvbmx5IG9uZSAlJWRwcmVjIGFsbG93ZWQgcGVyIHJ1bGUiCisjfiBtc2dzdHIgIm51ciBlaW4gJSVkcHJlYyBwcm8gUmVnZWwgZXJsYXVidCIKKworI34gbXNnaWQgIkVudGVyaW5nIGFwcGVuZF9zdGF0ZXMsIHN0YXRlID0gJWRcbiIKKyN+IG1zZ3N0ciAiQmV0cmV0ZSBhcHBlbmRfc3RhdGVzLCBadXN0YW5kID0gJWRcbiIKKworI34gbXNnaWQgIlByb2Nlc3Npbmcgc3RhdGUgJWQgKHJlYWNoZWQgYnkgJXMpXG4iCisjfiBtc2dzdHIgIlZlcmFyYmVpdGUgWnVzdGFuZCAlZCAoZXJyZWljaHQgdm9uICVzKVxuIgorCisjfiBtc2dpZCAidW5kZWZpbmVkIGFzc29jaWF0aXZpdHkiCisjfiBtc2dzdHIgInVuZGVmaW5pZXJ0ZSBBc3NvemlhdGl2aXTDpHQiCisKKyN+IG1zZ2lkICJDbG9zdXJlOiAlc1xuIgorI34gbXNnc3RyICJBYnNjaGx1c3M6ICVzXG4iCisKKyN+IG1zZ2lkICIgIChydWxlICVkKVxuIgorI34gbXNnc3RyICIgIChSZWdlbCAlZClcbiIKKworI34gbXNnaWQgImlucHV0IgorI34gbXNnc3RyICJFaW5nYWJlIgorCisjfiBtc2dpZCAib3V0cHV0IgorI34gbXNnc3RyICJBdXNnYWJlIgorCisjfiBtc2dpZCAiU3RhdGUgJWQ6ICVkIGxvb2thaGVhZHNcbiIKKyN+IG1zZ3N0ciAiWnVzdGFuZCAlZDogJWQgVm9yc2NoYXVlblxuIgorCisjfiBtc2dpZCAiICAgb24gJWQgKCVzKSAtPiBydWxlICVkXG4iCisjfiBtc2dzdHIgIiAgIGF1ZiAlZCAoJXMpIC0+IFJlZ2VsICVkXG4iCisKKyN+IG1zZ2lkICJMb29rYWhlYWRzOiBFTkRcbiIKKyN+IG1zZ3N0ciAiVm9yc2NoYXU6IEVOREVcbiIKKworI34gbXNnaWQgInJlbGF0aW9uX3RyYW5zcG9zZTogaW5wdXRcbiIKKyN+IG1zZ3N0ciAicmVsYXRpb25fdHJhbnNwb3NlOiBFaW5nYWJlXG4iCisKKyN+IG1zZ2lkICJyZWxhdGlvbl90cmFuc3Bvc2U6IG91dHB1dFxuIgorI34gbXNnc3RyICJyZWxhdGlvbl90cmFuc3Bvc2U6IEF1c2dhYmVcbiIKKworI34gbXNnaWQgInVuZXNjYXBlZCBuZXdsaW5lIGluIGNvbnN0YW50IgorI34gbXNnc3RyICJuaWNodCBtYXNraWVydGVzIFplaWxlbmVuZGV6ZWljaGVuIGluIEtvbnN0YW50ZSIKKworI34gbXNnaWQgIm9jdGFsIHZhbHVlIG91dHNpZGUgcmFuZ2UgMC4uLjI1NTogYFxcJW8nIgorI34gbXNnc3RyICJva3RhbGVyIFphaGxlbndlcnQgYXXDn2VyaGFsYiBkZXMgQmVyZWljaHMgMC4uLjI1NTog4oCeXFwlb+KAnCIKKworI34gbXNnaWQgImhleGFkZWNpbWFsIHZhbHVlIGFib3ZlIDI1NTogYFxceCV4JyIKKyN+IG1zZ3N0ciAiaGV4YWRlemltYWxlciBaYWhsZW53ZXJ0IGdyw7bDn2VyIGFscyAyNTU6IOKAnlxceCV44oCcIgorCisjIE9kZXIgc29sbCBtYW4gZGVuIEJlZ3JpZmYgIkVzY2FwZXplaWNoZW4iIHZlcndlbmRlbj8KKyN+IG1zZ2lkICJ1bmtub3duIGVzY2FwZSBzZXF1ZW5jZTogYFxcJyBmb2xsb3dlZCBieSBgJXMnIgorI34gbXNnc3RyICJ1bmJla2FubnRlcyBFc2NhcGV6ZWljaGVuOiDigJ5cXOKAnCBnZWZvbGd0IHZvbiDigJ4lc+KAnCIKKworI34gbXNnaWQgInVudGVybWluYXRlZCB0eXBlIG5hbWUgYXQgZW5kIG9mIGZpbGUiCisjfiBtc2dzdHIgInVuZXJ3YXJ0ZXRlciBUeXBuYW1lIGFtIEVuZGUgZGVyIERhdGVpIgorCisjfiBtc2dpZCAidW50ZXJtaW5hdGVkIHR5cGUgbmFtZSIKKyN+IG1zZ3N0ciAidW5lcndhcnRldGVyIFR5cG5hbWUiCisKKyN+IG1zZ2lkICJ1c2UgXCIuLi5cIiBmb3IgbXVsdGktY2hhcmFjdGVyIGxpdGVyYWwgdG9rZW5zIgorI34gbXNnc3RyICJmw7xyIExpdGVyYWwgbWl0IG1laHJlcmVuIFplaWNoZW4gYml0dGUgXCIuLi5cIiB2ZXJ3ZW5kZW4iCisKKyN+IG1zZ2lkICIgICAgJGRlZmF1bHRcdHJlZHVjZSB1c2luZyBydWxlICVkICglcylcbiIKKyN+IG1zZ3N0ciAiICAgICRkZWZhdWx0XHRyZWR1emllcmUgbWl0IFJlZ2VsICVkICglcylcbiIKKworI34gbXNnaWQgIiAgICAkZGVmYXVsdFx0YWNjZXB0XG4iCisjfiBtc2dzdHIgIiAgICAkZGVmYXVsdFx0YWt6ZXB0aWVyZVxuIgorCisjfiBtc2dpZCAiTnVtYmVyLCBMaW5lLCBSdWxlIgorI34gbXNnc3RyICJOdW1tZXIsIFplaWxlLCBSZWdlbCIKKworI34gbXNnaWQgIiAgIFNraXBwaW5nIHRvIG5leHQgXFxuIgorI34gbXNnc3RyICIgICDDnGJlcnNwcmluZ2UgWmVpY2hlbiBiaXMgenVtIG7DpGNoc3RlbiBcXG4iCisKKyN+IG1zZ2lkICIgICBTa2lwcGluZyB0byBuZXh0ICVjIgorI34gbXNnc3RyICIgICDDnGJlcnNwcmluZ2UgWmVpY2hlbiBiaXMgenVtIG7DpGNodGVuICVjIgorCisjfiBtc2dpZCAidW50ZXJtaW5hdGVkIHN0cmluZyIKKyN+IG1zZ3N0ciAidW5iZWVuZGV0ZSBaZWljaGVua2V0dGUiCisKKyN+IG1zZ2lkICJ1bnRlcm1pbmF0ZWQgYCV7JyBkZWZpbml0aW9uIgorI34gbXNnc3RyICJ1bmJlZW5kZXRlIOKAniV74oCcLURlZmluaXRpb24iCisKKyN+IG1zZ2lkICJQcmVtYXR1cmUgRU9GIGFmdGVyICVzIgorI34gbXNnc3RyICJWb3J6ZWl0aWdlcyBFT0YgbmFjaCAlcyIKKworI34gbXNnaWQgImAlcycgaXMgaW52YWxpZCBpbiAlcyIKKyN+IG1zZ3N0ciAi4oCeJXPigJwgaXN0IGluICVzIG5pY2h0IGVybGF1YnQiCisKKyN+IG1zZ2lkICIldHlwZSBkZWNsYXJhdGlvbiBoYXMgbm8gPHR5cGVuYW1lPiIKKyN+IG1zZ3N0ciAiJXR5cGUtRGVrbGFyYXRpb24gaGF0IGtlaW5lbiA8VHlwLU5hbWVuPiIKKworI34gbXNnaWQgImludmFsaWQgJSV0eXBlIGRlY2xhcmF0aW9uIGR1ZSB0byBpdGVtOiAlcyIKKyN+IG1zZ3N0ciAidW5nw7xsdGlnZSAlJXR5cGUtRGVrbGFyYXRpb24gd2VnZW46ICVzIgorCisjfiBtc2dpZCAiaW52YWxpZCB0ZXh0ICglcykgLSBudW1iZXIgc2hvdWxkIGJlIGFmdGVyIGlkZW50aWZpZXIiCisjfiBtc2dzdHIgInVuenVsw6Rzc2lnZXIgVGV4dCAoJXMpIC0gWmFobCBzb2xsdGUgbmFjaCBCZXplaWNobmVyIGtvbW1lbiIKKworI34gbXNnaWQgInVuZXhwZWN0ZWQgaXRlbTogJXMiCisjfiBtc2dzdHIgInVuZXJ3YXJ0ZXRlcyBTeW1ib2w6ICVzIgorCisjfiBtc2dpZCAidW5tYXRjaGVkICVzIgorI34gbXNnc3RyICIlcyBvaG5lIEdlZ2Vuc3TDvGNrIgorCisjfiBtc2dpZCAiYXJndW1lbnQgb2YgJSVleHBlY3QgaXMgbm90IGFuIGludGVnZXIiCisjfiBtc2dzdHIgIkFyZ3VtZW50IHZvbiAlJWV4cGVjdCBpc3Qga2VpbmUgZ2FuemUgWmFobCIKKworI34gbXNnaWQgInVucmVjb2duaXplZCBpdGVtICVzLCBleHBlY3RlZCBhbiBpZGVudGlmaWVyIgorI34gbXNnc3RyICJ1bmVyd2FydGV0ZXMgU3ltYm9sICVzLCBoaWVyIHdpcmQgZWluIEJlemVpY2huZXIgZXJ3YXJ0ZXQiCisKKyN+IG1zZ2lkICJleHBlY3RlZCBzdHJpbmcgY29uc3RhbnQgaW5zdGVhZCBvZiAlcyIKKyN+IG1zZ3N0ciAiaGllciB3aXJkIGVpbmUgWmVpY2hlbmtldHRlIGVyd2FydGV0LCBuaWNodCAlcyIKKworI34gbXNnaWQgIm5vIGlucHV0IGdyYW1tYXIiCisjfiBtc2dzdHIgImtlaW5lIEVpbmdhYmUtR3JhbW1hdGlrIgorCisjfiBtc2dpZCAidW5rbm93biBjaGFyYWN0ZXI6ICVzIgorI34gbXNnc3RyICJ1bmJla2FubnRlcyBaZWljaGVuOiAlcyIKKworI34gbXNnaWQgImlsbC1mb3JtZWQgcnVsZTogaW5pdGlhbCBzeW1ib2wgbm90IGZvbGxvd2VkIGJ5IGNvbG9uIgorI34gbXNnc3RyICIiCisjfiAiZmFsc2NoIGdlZm9ybXRlIFJlZ2VsOiBmw7xocmVuZGVzIFN5bWJvbCB3aXJkIG5pY2h0IHZvbiBlaW5lbSBTZW1pa29sb24gIgorI34gImdlZm9sZ3QiCisKKyN+IG1zZ2lkICJncmFtbWFyIHN0YXJ0cyB3aXRoIHZlcnRpY2FsIGJhciIKKyN+IG1zZ3N0ciAiR3JhbW1hdGlrIGbDpG5ndCBtaXQgZWluZW0gdmVydGlrYWxlbiBTdHJpY2ggKOKAnnzigJwpIGFuIgorCisjfiBtc2dpZCAicHJldmlvdXMgcnVsZSBsYWNrcyBhbiBlbmRpbmcgYDsnIgorI34gbXNnc3RyICJ2b3JhbmdlaGVuZGUgUmVnZWwgaGF0IGtlaW4gYWJzY2hsaWXDn2VuZGVzIOKAnjvigJwiCisKKyN+IG1zZ2lkICJ0d28gYWN0aW9ucyBhdCBlbmQgb2Ygb25lIHJ1bGUiCisjfiBtc2dzdHIgIlp3ZWkgQWt0aW9uZW4gYW0gRW5kZSBlaW5lciBSZWdlbCIKKworI34gbXNnaWQgIiAgICAkICAgXHRnbyB0byBzdGF0ZSAlZFxuIgorI34gbXNnc3RyICIgICAgJCAgIFx0Z2VoZSB6dSBadXN0YW5kICVkIMO8YmVyXG4iCmRpZmYgLS1naXQgYS9wby9lbC5nbW8gYi9wby9lbC5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQwNTgyMwotLS0gL2Rldi9udWxsCisrKyBiL3BvL2VsLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9lbC5wbyBiL3BvL2VsLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYjRkNjUKLS0tIC9kZXYvbnVsbAorKysgYi9wby9lbC5wbwpAQCAtMCwwICsxLDEyMDMgQEAKKyMgdHJhbnNsYXRpb24gb2YgYmlzb24tMi4zYi5wbyB0byBHcmVlaworIyBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBiaXNvbiBwYWNrYWdlLgorIworIyBMZWZ0ZXJpcyBEaW1pdHJvdWxha2lzIDxlZGltaXRyb0B0ZWUuZ3I+LCAyMDA4LgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYmlzb24tMi40XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDgtMTEtMzAgMTc6NTcrMDMwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogTGVmdGVyaXMgRGltaXRyb3VsYWtpcyA8ZWRpbWl0cm9AdGVlLmdyPlxuIgorIkxhbmd1YWdlLVRlYW06IEdyZWVrIDx0ZWFtQGxpc3RzLmdub21lLmdyPlxuIgorIkxhbmd1YWdlOiBlbFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPSggbiAhPTEpO1xuIgorIlgtR2VuZXJhdG9yOiBLQmFiZWwgMS4xMS40XG4iCisKKyM6IHNyYy9jb21wbGFpbi5jOjEyMCBzcmMvY29tcGxhaW4uYzoxMzEgc3JjL2NvbXBsYWluLmM6MTQwIHNyYy9jb21wbGFpbi5jOjE4OAorIzogc3JjL2NvbXBsYWluLmM6MTk4Cittc2dpZCAid2FybmluZyIKK21zZ3N0ciAiz4DPgc6/zrXOuc60zr/PgM6/zq/Ot8+DzrciCisKKyM6IHNyYy9jb21wbGFpbi5jOjE1MSBzcmMvY29tcGxhaW4uYzoxNjAgc3JjL2NvbXBsYWluLmM6MTY3CisjLCBmdXp6eQorbXNnaWQgImVycm9yIgorbXNnc3RyICLPg8+GzqzOu868zrEgSS9PIgorCisjOiBzcmMvY29tcGxhaW4uYzoyMDggc3JjL2NvbXBsYWluLmM6MjE1Cittc2dpZCAiZmF0YWwgZXJyb3IiCittc2dzdHIgIs68zr/Ouc+BzrHOr86/IM+Dz4bOrM67zrzOsSIKKworIzogc3JjL2NvbmZsaWN0cy5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIHNoaWZ0IgorbXNnc3RyICIiCisiICAgIM6XIM+Dz43Os866z4HOv8+Fz4POtyDOvM61z4TOsc6+z40gz4TOv8+FIM66zrHOvc+Mzr3OsSAlZCDOus6xzrkgz4TOt8+CIM67zrXOus+EzrnOus6uz4IgzrzOv869zqzOtM6xz4IgJXMgzrXPgM65zrvPjc64zrfOus61ICIKKyLPic+CIM6/zrvOr8+DzrjOt8+DzrciCisKKyM6IHNyYy9jb25mbGljdHMuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyByZWR1Y2UiCittc2dzdHIgIiIKKyIgICAgzpcgz4PPjc6zzrrPgc6/z4XPg863IM68zrXPhM6xzr7PjSDPhM6/z4UgzrrOsc69z4zOvc6xICVkIM66zrHOuSDPhM63z4IgzrvOtc66z4TOuc66zq7PgiDOvM6/zr3OrM60zrHPgiAlcyDOtc+AzrnOu8+NzrjOt866zrUgIgorIs+Jz4IgzrXOu86sz4TPhM+Jz4POtyIKKworIzogc3JjL2NvbmZsaWN0cy5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIGFuIGVycm9yIgorbXNnc3RyICIiCisiICAgIM6XIM+Dz43Os866z4HOv8+Fz4POtyDOvM61z4TOsc6+z40gz4TOv8+FIM66zrHOvc+Mzr3OsSAlZCDOus6xzrkgz4TOt8+CIM67zrXOus+EzrnOus6uz4IgzrzOv869zqzOtM6xz4IgJXMgzrXPgM65zrvPjc64zrfOus61ICIKKyLPic+CIM+Dz4bOrM67zrzOsSIKKworIzogc3JjL2NvbmZsaWN0cy5jOjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdHM6ICVkIHNoaWZ0L3JlZHVjZSwgJWQgcmVkdWNlL3JlZHVjZVxuIgorbXNnc3RyICLPg8+FzrPOus+Bzr/Pjc+DzrXOuc+COiAlZCDOv867zq/Pg864zrfPg863L861zrvOrM+Ez4TPic+DzrcsICVkIM61zrvOrM+Ez4TPic+DzrcvzrXOu86sz4TPhM+Jz4POt1xuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgc2hpZnQvcmVkdWNlXG4iCittc2dzdHIgIs+Dz4XOs866z4HOv8+Nz4POtc65z4I6ICVkIM6/zrvOr8+DzrjOt8+DzrcvzrXOu86sz4TPhM+Jz4POt1xuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgcmVkdWNlL3JlZHVjZVxuIgorbXNnc3RyICLPg8+FzrPOus+Bzr/Pjc+DzrXOuc+COiAlZCDOtc67zqzPhM+Ez4nPg863L861zrvOrM+Ez4TPic+DzrdcbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdGF0ZSAlZCAiCittc2dzdHIgIs6azrHPhM6sz4PPhM6xz4POtyAlZCAiCisKKyM6IHNyYy9jb25mbGljdHMuYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSVleHBlY3QtcnIgYXBwbGllcyBvbmx5IHRvIEdMUiBwYXJzZXJzIgorbXNnc3RyICIlJWV4cGVjdC1yciDOrc+HzrXOuSDOtc+GzrHPgc68zr/Os86uIM68z4zOvc6/IM+DzrUgz4PPhc69z4TOsc66z4TOuc66zr/Pjc+CIM6xzr3Osc67z4XPhM6tz4IgR0xSIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NjE2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICVkIHNoaWZ0L3JlZHVjZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiZXhwZWN0ZWQgJWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAizrHOvc6tzrzOtc69zrEgJWQgz4PPjc6zzrrPgc6/z4XPg863IM6/zrvOr8+DzrjOt8+DzrcvzrXOu86sz4TPhM+Jz4POtyIKK21zZ3N0clsxXSAizrHOvc6tzrzOtc69zrEgJWQgz4PPhc6zzrrPgc6/z43Pg861zrnPgiDOv867zq/Pg864zrfPg863L861zrvOrM+Ez4TPic+DzrciCisKKyM6IHNyYy9jb25mbGljdHMuYzo2MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJWQgcmVkdWNlL3JlZHVjZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiZXhwZWN0ZWQgJWQgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMiCittc2dzdHJbMF0gIs6xzr3Orc68zrXOvc6xICVkIM+Dz43Os866z4HOv8+Fz4POtyDOtc67zqzPhM+Ez4nPg863L861zrvOrM+Ez4TPic+DzrciCittc2dzdHJbMV0gIs6xzr3Orc68zrXOvc6xICVkIM+Dz4XOs866z4HOv8+Nz4POtc65z4IgzrXOu86sz4TPhM+Jz4POty/Otc67zqzPhM+Ez4nPg863IgorCisjOiBzcmMvZmlsZXMuYzoxMTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3Qgb3BlbiIKK21zZ3N0ciAizrHOtM+Fzr3Osc68zq/OsSDOsc69zr/Or86zzrzOsc+Ezr/PgiDPhM6/z4UgzrHPgc+HzrXOr86/z4Ugwqslc8K7IgorCisjOiBzcmMvZmlsZXMuYzoxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5wdXQvb3V0cHV0IGVycm9yIgorbXNnc3RyICIiCisKKyM6IHNyYy9maWxlcy5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2UgZmlsZSIKK21zZ3N0ciAizrTOtc69IM68z4DOv8+Bz44gzr3OsSDOus67zrXOr8+Dz4kgz4TOvyDOsc+Bz4fOtc6vzr8iCisKKyM6IHNyYy9maWxlcy5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBvdmVyd3JpdGUgdGhlIGlucHV0IGZpbGUgJXMiCittc2dzdHIgIs6sz4HOvc63z4POtyDOs8+BzrHPiM6vzrzOsc+Ezr/PgiDPgM6szr3PiSDPg8+Ezr8gzrHPgc+HzrXOr86/IM61zrnPg8+MzrTOv8+FICVzIgorCisjOiBzcmMvZmlsZXMuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3Rpbmcgb3V0cHV0cyB0byBmaWxlICVzIgorbXNnc3RyICLOsc69z4TOuc66z4HOv8+Fz4zOvM61zr3Otc+CIM6tzr7Ov860zr/OuSDPg8+Ezr8gzrHPgc+HzrXOr86/ICVzIgorCisjOiBzcmMvZ2V0YXJncy5jOjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCittc2dzdHIgIs6Uzr/Ous6vzrzOsc+DzrUgwqslcyAtLWhlbHDCuyDOs865zrEgz4DOtc+BzrnPg8+Dz4zPhM61z4HOtc+CIM+AzrvOt8+Bzr/Phs6/z4HOr861z4IuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbT1BUSU9OXS4uLiBGSUxFXG4iCittc2dzdHIgIs6nz4HOrs+Dzrc6ICVzIFvOlc6gzpvOn86TzpXOo10uLi4gzpHOoc6nzpXOmc6fXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzAyCittc2dpZCAiIgorIkdlbmVyYXRlIGEgZGV0ZXJtaW5pc3RpYyBMUiBvciBnZW5lcmFsaXplZCBMUiAoR0xSKSBwYXJzZXIgZW1wbG95aW5nXG4iCisiTEFMUigxKSwgSUVMUigxKSwgb3IgY2Fub25pY2FsIExSKDEpIHBhcnNlciB0YWJsZXMuICBJRUxSKDEpIGFuZFxuIgorImNhbm9uaWNhbCBMUigxKSBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwOQorbXNnaWQgIiIKKyJNYW5kYXRvcnkgYXJndW1lbnRzIHRvIGxvbmcgb3B0aW9ucyBhcmUgbWFuZGF0b3J5IGZvciBzaG9ydCBvcHRpb25zIHRvby5cbiIKK21zZ3N0ciAiIgorIs6lz4DOv8+Hz4HOtc+Jz4TOuc66zqwgzr/Pgc6vz4POvM6xz4TOsSDPg861IM68zrHOus+Bzq3PgiDOtc+AzrnOu86/zrPOrc+CIM61zq/Ovc6xzrkgz4XPgM6/z4fPgc61z4nPhM65zrrOrCDOtc+Azq/Pg863z4IgzrrOsc65IM+Dz4TOuc+CICIKKyLOus6/zr3PhM6tz4IuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzEyCittc2dpZCAiVGhlIHNhbWUgaXMgdHJ1ZSBmb3Igb3B0aW9uYWwgYXJndW1lbnRzLlxuIgorbXNnc3RyICLOpM6/IM6vzrTOuc6/IM65z4PPh8+NzrXOuSDOus6xzrkgzrPOuc6xIM+EzrEgzrzOtyDPhc+Azr/Ph8+BzrXPic+EzrnOus6sIM6/z4HOr8+DzrzOsc+EzrEuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzE2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJPcGVyYXRpb24gbW9kZXM6XG4iCisiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIKKyIgICAgICAtLXByaW50LWxvY2FsZWRpciAgICAgIG91dHB1dCBkaXJlY3RvcnkgY29udGFpbmluZyBsb2NhbGUtZGVwZW5kZW50ICIKKyJkYXRhXG4iCisiICAgICAgLS1wcmludC1kYXRhZGlyICAgICAgICBvdXRwdXQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgc2tlbGV0b25zIGFuZCBYU0xUXG4iCisiICAteSwgLS15YWNjICAgICAgICAgICAgICAgICBlbXVsYXRlIFBPU0lYIFlhY2NcbiIKKyIgIC1XLCAtLXdhcm5pbmdzWz1DQVRFR09SWV0gIHJlcG9ydCB0aGUgd2FybmluZ3MgZmFsbGluZyBpbiBDQVRFR09SWVxuIgorIiAgLWYsIC0tZmVhdHVyZVs9RkVBVFVSRV0gICAgYWN0aXZhdGUgbWlzY2VsbGFuZW91cyBmZWF0dXJlc1xuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisizqTPgc+Mz4DOv865IM67zrXOuc+Ezr/Phc+BzrPOr86xz4I6XG4iCisiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICDOtc68z4bOrM69zrnPg863IM6xz4XPhM6uz4IgzrXOtM+OIM+EzrfPgiDOss6/zq7OuM61zrnOsc+CIM66zrkgzq3Ovs6/zrTOv8+CXG4iCisiICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICDPgM67zrfPgc6/z4bOv8+Bzq/Otc+CIM6tzrrOtM6/z4POt8+CIM66zrkgzq3Ovs6/zrTOv8+CXG4iCisiICAgICAgLS1wcmludC1sb2NhbGVkaXIgICAgICDOvyDOus6xz4TOrM67zr/Os86/z4IgzrzOtSDPhM6xIM60zrXOtM6/zrzOrc69zrEgz4TPic69IGxvY2FsZVxuIgorIiAgICAgIC0tcHJpbnQtZGF0YWRpciAgICAgICAgzr8gzrrOsc+EzqzOu86/zrPOv8+CIM68zrUgz4POus61zrvOtc+Ezr/Pjc+CIM66zrHOuSBYU0xUXG4iCisiICAteSwgLS15YWNjICAgICAgICAgICAgICAgICBlbXVsYXRlIFBPU0lYIFlhY2NcbiIKKyIgIC1XLCAtLXdhcm5pbmdzPVvOms6RzqTOl86Tzp/Ooc6ZzpFdICDPgM6xz4HOv8+Fz4POuc6szrbOtc65IM+EzrnPgiDPgM+Bzr/Otc65zrTOv8+Azr/Ouc6uz4POtc65z4Igz4DOv8+FIM6xzr3Ors66zr/Phc69ICIKKyLPg8+EzrcgzprOkc6kzpfOk86fzqHOmc6RXG4iCisiXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFyc2VyOlxuIgorIiAgLUwsIC0tbGFuZ3VhZ2U9TEFOR1VBR0UgICAgICAgICAgc3BlY2lmeSB0aGUgb3V0cHV0IHByb2dyYW1taW5nIGxhbmd1YWdlXG4iCisiICAtUywgLS1za2VsZXRvbj1GSUxFICAgICAgICAgICAgICBzcGVjaWZ5IHRoZSBza2VsZXRvbiB0byB1c2VcbiIKKyIgIC10LCAtLWRlYnVnICAgICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnQgdGhlIHBhcnNlciBmb3IgZGVidWdnaW5nXG4iCisiICAgICAgLS1sb2NhdGlvbnMgICAgICAgICAgICAgICAgICBlbmFibGUgbG9jYXRpb24gc3VwcG9ydFxuIgorIiAgLUQsIC0tZGVmaW5lPU5BTUVbPVZBTFVFXSAgICAgICAgc2ltaWxhciB0byAnJWRlZmluZSBOQU1FIFwiVkFMVUVcIidcbiIKKyIgIC1GLCAtLWZvcmNlLWRlZmluZT1OQU1FWz1WQUxVRV0gIG92ZXJyaWRlICclZGVmaW5lIE5BTUUgXCJWQUxVRVwiJ1xuIgorIiAgLXAsIC0tbmFtZS1wcmVmaXg9UFJFRklYICAgICAgICAgcHJlcGVuZCBQUkVGSVggdG8gdGhlIGV4dGVybmFsIHN5bWJvbHNcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQgYnkgJy1EYXBpLnByZWZpeD1QUkVGSVgnXG4iCisiICAtbCwgLS1uby1saW5lcyAgICAgICAgICAgICAgICAgICBkb24ndCBnZW5lcmF0ZSAnI2xpbmUnIGRpcmVjdGl2ZXNcbiIKKyIgIC1rLCAtLXRva2VuLXRhYmxlICAgICAgICAgICAgICAgIGluY2x1ZGUgYSB0YWJsZSBvZiB0b2tlbiBuYW1lc1xuIgorbXNnc3RyICIiCisizpHOvc6xzrvPhc+Ezq7PgjpcbiIKKyIgIC1MLCAtLWxhbmd1YWdlPc6TzpvOqc6jzqPOkSAgICDPgM+Bzr/Pg860zrnOv8+Bzq/Ots61zrkgz4TOtyDOs867z47Pg8+DzrEgz4DPgc6/zrPPgc6xzrzOvM6xz4TOuc+DzrzOv8+NIM+Dz4TOt869ICIKKyLOrc6+zr/OtM6/XG4iCisiICAtUywgLS1za2VsZXRvbj3Okc6hzqfOlc6Zzp8gICAgICAgIM+Az4HOv8+DzrTOuc6/z4HOr862zrXOuSDPhM6/zr0gz4DPgc6/z4Igz4fPgc6uz4POtyBza2VsZXRvblxuIgorIiAgLXQsIC0tZGVidWcgICAgICAgICAgICAgICAgzrXOvc61z4HOs86/z4DOv86vzrfPg863IM+EzrfPgiDOtM+Fzr3Osc+Ez4zPhM63z4TOsc+CIM6xz4DOv8+Dz4bOsc67zrzOrM+Ez4nPg863z4JcbiIKKyIgICAgICAtLWxvY2F0aW9ucyAgICAgICAgICAgIM61z4DOuc+Ez4HOrc+AzrXOuSDPhM6/zr0gz4XPgM6/zrvOv86zzrnPg868z4wgz4TPic69IM64zq3Pg861z4nOvVxuIgorIiAgLXAsIC0tbmFtZS1wcmVmaXg9zqDOoc6fzpjOlc6czpEgICAgzrLOrM67zrUgz4TOvyDOoM6hzp/OmM6VzpzOkSDOvM+Az4HOv8+Dz4TOrCDOsc+Az4wgz4TOsSDOtc6+z4nPhM61z4HOuc66zqwgIgorIs+Dz43OvM6yzr/Ou86xXG4iCisiICAtbCwgLS1uby1saW5lcyAgICAgICAgICAgICDOvc6xIM68zrfOvSDOtM63zrzOuc6/z4XPgc6zzr/Pjc69z4TOsc65IM6/zrTOt86zzq/Otc+CIM+EzrfPgiDOvM6/z4HPhs6uz4IgIgorIsKrI2xpbmXCu1xuIgorIiAgLWssIC0tdG9rZW4tdGFibGUgICAgICAgICAgz4PPhc68z4DOtc+BzrnOu86xzrzOss6szr3Otc65IM+Azq/Ovc6xzrrOsSDOv869zr/OvM6sz4TPic69IM67zrXOus+EzrnOus+Ozr0gIgorIs68zr/Ovc6szrTPic69XG4iCisiXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzQ2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJPdXRwdXQ6XG4iCisiICAgICAgLS1kZWZpbmVzWz1GSUxFXSAgICAgICBhbHNvIHByb2R1Y2UgYSBoZWFkZXIgZmlsZVxuIgorIiAgLWQgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZXdpc2UgYnV0IGNhbm5vdCBzcGVjaWZ5IEZJTEUgKGZvciBQT1NJWCAiCisiWWFjYylcbiIKKyIgIC1yLCAtLXJlcG9ydD1USElOR1MgICAgICAgIGFsc28gcHJvZHVjZSBkZXRhaWxzIG9uIHRoZSBhdXRvbWF0b25cbiIKKyIgICAgICAtLXJlcG9ydC1maWxlPUZJTEUgICAgIHdyaXRlIHJlcG9ydCB0byBGSUxFXG4iCisiICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgICBzYW1lIGFzIGAtLXJlcG9ydD1zdGF0ZSdcbiIKKyIgIC1iLCAtLWZpbGUtcHJlZml4PVBSRUZJWCAgIHNwZWNpZnkgYSBQUkVGSVggZm9yIG91dHB1dCBmaWxlc1xuIgorIiAgLW8sIC0tb3V0cHV0PUZJTEUgICAgICAgICAgbGVhdmUgb3V0cHV0IHRvIEZJTEVcbiIKKyIgIC1nLCAtLWdyYXBoWz1GSUxFXSAgICAgICAgIGFsc28gb3V0cHV0IGEgZ3JhcGggb2YgdGhlIGF1dG9tYXRvblxuIgorIiAgLXgsIC0teG1sWz1GSUxFXSAgICAgICAgICAgYWxzbyBvdXRwdXQgYW4gWE1MIHJlcG9ydCBvZiB0aGUgYXV0b21hdG9uXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhlIFhNTCBzY2hlbWEgaXMgZXhwZXJpbWVudGFsKVxuIgorbXNnc3RyICIiCisizojOvs6/zrTOv8+COlxuIgorIiAgICAgIC0tZGVmaW5lc1s9zpHOoc6nzpXOmc6fXSAgICAgICDPgM6xz4HOrM6zzrXOuSDOtc+Azq/Pg863z4Igzq3Ovc6xIM6xz4HPh861zq/OvyDOtc+AzrnOus61z4bOsc67zq/OtM6xz4JcbiIKKyIgIC1kICAgICAgICAgICAgICAgz4TOvyDOr860zrnOvyDOsc67zrvOrCDPh8+Jz4HOr8+CIM6/z4HOuc+DzrzPjCDOkc6hzqfOlc6Zzp/OpSAozrPOuc6xIM+Ezr8gUE9TSVggWWFjYylcbiIKKyIgIC1yLCAtLXJlcG9ydD3OoM6hzpHOk86czpHOpM6RICAgICAgz4DOsc+BzqzOs861zrkgzrvOtc+Az4TOv868zq3Pgc61zrnOtc+CIM+Dz4fOtc+EzrnOus6tz4IgzrzOtSDPhM6xIM6xz4XPhM+MzrzOsc+EzrFcbiIKKyIgICAgICAtLXJlcG9ydC1maWxlPc6RzqHOp86VzpnOnyAgICAgICAgICAgICAgICAgICDOs8+BzqzPiM65zrzOvyDOsc69zrHPhs6/z4HOrM+CIM+Dz4TOvyDOkc6hzqfOlc6Zzp9cbiIKKyIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgICAgICAgICAgICAgICDPhM6/IM6vzrTOuc6/IM68zrUgIMKrLS1yZXBvcnQ9c3RhdGXCu1xuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg9zqDOoc6fzpjOlc6czpEgICDOus6xzrjOv8+Bzq/Ots61zrkgzqDOoc6fzpjOlc6czpEgzrPOuc6xIM+EzrEgzrHPgc+HzrXOr86xIM61zr7PjM60zr/PhVxuIgorIiAgLW8sIC0tb3V0cHV0Pc6RzqHOp86VzpnOnyAgICAgICAgICDOrc6+zr/OtM6/z4Igz4PPhM6/IM6RzqHOp86VzpnOn1xuIgorIiAgLWcsIC0tZ3JhcGhbPc6RzqHOp86VzpnOn10gICAgICAgICDOus6xzrjOv8+BzrnPg868z4zPgiDPg861IFZDRyDPhM63z4IgzrXOvs+MzrTOv8+FIM+Ezr/PhSDOsc+Fz4TOv868zqzPhM6/z4VcbiIKKyIgIC14LCAtLXhtbFs9zpHOoc6nzpXOmc6fXSAgICAgICAgICAgzrHOvc6xz4bOv8+BzqwgzrHPgM+MIM+Ezr8gzrHPhc+Ez4zOvM6xz4TOvyDPg861IM68zr/Pgc+Gzq4gWE1MXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAozrcgzrzOv8+Bz4bOriBYTUwgzrXOr869zrHOuSDPg861IM+AzrXOuc+BzrHOvM6xz4TOuc66z4wgz4PPhM6szrTOuc6/KVxuIgorIlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM2MQorIywgZnV6enkKK21zZ2lkICIiCisiV2FybmluZyBjYXRlZ29yaWVzIGluY2x1ZGU6XG4iCisiICBgbWlkcnVsZS12YWx1ZXMnICB1bnNldCBvciB1bnVzZWQgbWlkcnVsZSB2YWx1ZXNcbiIKKyIgIGB5YWNjJyAgICAgICAgICAgIGluY29tcGF0aWJpbGl0aWVzIHdpdGggUE9TSVggWWFjY1xuIgorIiAgYGNvbmZsaWN0cy1zcicgICAgUy9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGNvbmZsaWN0cy1ycicgICAgUi9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGRlcHJlY2F0ZWQnICAgICAgb2Jzb2xldGUgY29uc3RydWN0c1xuIgorIiAgYG90aGVyJyAgICAgICAgICAgYWxsIG90aGVyIHdhcm5pbmdzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgYWxsJyAgICAgICAgICAgICBhbGwgdGhlIHdhcm5pbmdzXG4iCisiICBgbm8tQ0FURUdPUlknICAgICB0dXJuIG9mZiB3YXJuaW5ncyBpbiBDQVRFR09SWVxuIgorIiAgYG5vbmUnICAgICAgICAgICAgdHVybiBvZmYgYWxsIHRoZSB3YXJuaW5nc1xuIgorIiAgYGVycm9yJyAgICAgICAgICAgdHJlYXQgd2FybmluZ3MgYXMgZXJyb3JzXG4iCittc2dzdHIgIiIKKyLOms6xz4TOt86zzr/Pgc6vzrXPgiDPgM+Bzr/Otc65zrTOv8+Azr/Or863z4POt8+CIM+AzrXPgc65zrvOsc68zrLOrM69zr/Phc69OlxuIgorIiAgYG1pZHJ1bGUtdmFsdWVzJyAgzrzOtyDOtc69zrXPgc6zzr/PgM6/zrnOt868zq3Ovc61z4Igzq4gzrzOtyDPh8+BzrfPg865zrzOv8+Azr/Ouc6/z43OvM61zr3Otc+CIM+EzrnOvM6tz4IgbWlkcnVsZVxuIgorIiAgYHlhY2MnICAgICAgICAgICAgzrHPg8+FzrzOss6xz4TPjM+EzrfPhM61z4IgzrzOtSBQT1NJWCBZQUNDXG4iCisiICBgYWxsJyAgICAgICAgICAgICDPjM67zrXPgiDOv865IM+Az4HOv861zrnOtM6/z4DOv865zq7Pg861zrnPglxuIgorIiAgYG5vLUNBVEVHT1JZJyAgICAgzrHPgM61zr3Otc+BzrPOv8+Azr/Or863z4POtyDPgM+Bzr/Otc65zrTOv8+Azr/Ouc6uz4POtc+Jzr0gzrPOuc6xIM+EzrfOvSBDQVRFR09SWVxuIgorIiAgYG5vbmUnICAgICAgICAgICAgzrHPgM61zr3Otc+BzrPOv8+Azr/Or863z4POtyDPjM67z4nOvSDPhM+Jzr0gz4DPgc6/zrXOuc60zr/PgM6/zrnOrs+DzrXPic69XG4iCisiICBgZXJyb3InICAgICAgICAgICDOuM61z47Pgc63z4POtSDPjM67zrXPgiDPhM65z4Igz4DPgc6/zrXOuc60zr/PgM6/zrnOrs+DzrXOuc+CIM+Jz4Igz4PPhs6szrvOvM6xz4TOsVxuIgorIlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM3NgorbXNnaWQgIiIKKyJUSElOR1MgaXMgYSBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCB3b3JkcyB0aGF0IGNhbiBpbmNsdWRlOlxuIgorIiAgYHN0YXRlJyAgICAgICAgZGVzY3JpYmUgdGhlIHN0YXRlc1xuIgorIiAgYGl0ZW1zZXQnICAgICAgY29tcGxldGUgdGhlIGNvcmUgaXRlbSBzZXRzIHdpdGggdGhlaXIgY2xvc3VyZVxuIgorIiAgYGxvb2thaGVhZCcgICAgZXhwbGljaXRseSBhc3NvY2lhdGUgbG9va2FoZWFkIHRva2VucyB0byBpdGVtc1xuIgorIiAgYHNvbHZlZCcgICAgICAgZGVzY3JpYmUgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cyBzb2x2aW5nXG4iCisiICBgYWxsJyAgICAgICAgICBpbmNsdWRlIGFsbCB0aGUgYWJvdmUgaW5mb3JtYXRpb25cbiIKKyIgIGBub25lJyAgICAgICAgIGRpc2FibGUgdGhlIHJlcG9ydFxuIgorbXNnc3RyICIiCisizqDOoc6RzpPOnM6RzqTOkSDOtc6vzr3Osc65IM68zrnOsSDOu86vz4PPhM6xIM67zq3Ovs61z4nOvSDPgM6/z4Ugz4fPic+Bzq/Ots6/zr3PhM6xzrkgzrHPgM+MIM66z4zOvM68zrHPhM6xIM66zrHOuSAiCisiz4DOtc+BzrnOu86xzrzOss6szr3Ov8+Fzr06XG4iCisiICBgc3RhdGUnICAgICAgICDPgM61z4HOuc6zz4HOrM+GzrXOuSDOus6xz4TOsc+Dz4TOrM+DzrXOuc+CXG4iCisiICBgaXRlbXNldCcgICAgICBjb21wbGV0ZSB0aGUgY29yZSBpdGVtIHNldHMgd2l0aCB0aGVpciBjbG9zdXJlXG4iCisiICBgbG9va2FoZWFkJyAgICDPgc63z4TOriDPg8+Fz4PPh86tz4TOuc+Dzrcgzq7OtM63IM60zrnOsc6yzrHPg868zq3Ovc+Jzr0gzrvOtc66z4TOuc66z47OvSDOvM6/zr3OrM60z4nOvSDOvM61IGl0ZW1zXG4iCisiICBgc29sdmVkJyAgICAgICDPgM61z4HOuc6zz4HOrM+GzrXOuSDOtc+Azq/Ou8+Fz4POtyDPg8+FzrPOus+Bzr/Pjc+DzrXPic69IM68zrUgzr/Ou86vz4POuM63z4POty/Otc67zqzPhM+Ez4nPg863XG4iCisiICBgYWxsJyAgICAgICAgICDPgM61z4HOuc67zrHOvM6yzqzOvc61zrkgz4zOu861z4Igz4TOuc+CIM+AzrHPgc6xz4DOrM69z4kgz4DOu863z4HOv8+Gzr/Pgc6vzrXPglxuIgorIiAgYG5vbmUnICAgICAgICAgzrHPgM61zr3Otc+BzrPOv8+Azr/Or863z4POtyDOsc69zrHPhs6/z4HOrM+CXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzg3Cittc2dpZCAiIgorIkZFQVRVUkUgaXMgYSBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCB3b3JkcyB0aGF0IGNhbiBpbmNsdWRlOlxuIgorIiAgYGNhcmV0JyAgICAgICAgc2hvdyBlcnJvcnMgd2l0aCBjYXJldHNcbiIKKyIgIGBhbGwnICAgICAgICAgIGFsbCBvZiB0aGUgYWJvdmVcbiIKKyIgIGBub25lJyAgICAgICAgIGRpc2FibGUgYWxsIG9mIHRoZSBhYm92ZVxuIgorIiAgIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorbXNnc3RyICIiCisiXG4iCisizpHOvc6xz4bOv8+Bzqwgz4PPhs6xzrvOvM6sz4TPic69IM+DzrUgPCVzPi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaG9tZSBwYWdlOiA8JXM+LlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk3Cittc2dpZCAiR2VuZXJhbCBoZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4uXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IFJlcGxhY2UgTEFOR19DT0RFIGluIHRoaXMgVVJMIHdpdGggeW91ciBsYW5ndWFnZQorIy4gY29kZSA8aHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS9MQU5HX0NPREUuaHRtbD4gdG8KKyMuIGZvcm0gb25lIG9mIHRoZSBVUkxzIGF0IGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vLgorIy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRoZSBlbnRpcmUgVVJMIHdpdGggeW91ciB0cmFuc2xhdGlvbiB0ZWFtJ3MKKyMuIGVtYWlsIGFkZHJlc3MuCisjOiBzcmMvZ2V0YXJncy5jOjQxMAorbXNnaWQgIlJlcG9ydCB0cmFuc2xhdGlvbiBidWdzIHRvIDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtLz4uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzo0MTIKK21zZ2lkICJGb3IgY29tcGxldGUgZG9jdW1lbnRhdGlvbiwgcnVuOiBpbmZvIGJpc29uLlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImJpc29uIChHTlUgQmlzb24pICVzIgorbXNnc3RyICJiaXNvbiAoR05VIEJpc29uKSAlcyIKKworIzogc3JjL2dldGFyZ3MuYzo0MzAKK21zZ2lkICJXcml0dGVuIGJ5IFJvYmVydCBDb3JiZXR0IGFuZCBSaWNoYXJkIFN0YWxsbWFuLlxuIgorbXNnc3RyICLOk8+BzqzPhs+EzrfOus61IM6xz4DPjCDPhM6/z4XPgiBSb2JlcnQgQ29yYmV0dCDOus6xzrkgUmljaGFyZCBTdGFsbG1hbi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29weXJpZ2h0IChDKSAlZCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKK21zZ3N0ciAiQ29weXJpZ2h0IChDKSAlZCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MzcKK21zZ2lkICIiCisiVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk9cbiIKKyJ3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cbiIKK21zZ3N0ciAiIgorIlRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PXG4iCisid2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHNrZWxldG9uIGRlY2xhcmF0aW9ucyBhcmUgaW52YWxpZCIKK21zZ3N0ciAiz4DOv867zrvOsc+AzrvOrc+CIM60zrfOu8+Oz4POtc65z4Igz4POus61zrvOtc+Ezr/PjSDOtc6vzr3Osc65IM68zrcgzq3Os866z4XPgc61z4IiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBsYW5ndWFnZSIKK21zZ3N0ciAizrzOtyDOrc6zzrrPhc+BzrcgzrPOu8+Oz4PPg86xIGAlcyciCisKKyM6IHNyYy9nZXRhcmdzLmM6NDc5Cittc2dpZCAibXVsdGlwbGUgbGFuZ3VhZ2UgZGVjbGFyYXRpb25zIGFyZSBpbnZhbGlkIgorbXNnc3RyICLPgM6/zrvOu86xz4DOu86tz4IgzrTOt867z47Pg861zrnPgiDOs867z47Pg8+DzrHPgiDOtc6vzr3Osc65IM68zrcgzq3Os866z4XPgc61z4IiCisKKyM6IHNyYy9nZXRhcmdzLmM6NzQ3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogbWlzc2luZyBvcGVyYW5kIgorbXNnc3RyICLOu861zq/PgM61zrkgz4TOtc67zrXPg8+Ezq3Ov8+CIM68zrXPhM6sIM6xz4DPjCDCqyVzwrsiCisKKyM6IHNyYy9nZXRhcmdzLmM6NzQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJleHRyYSBvcGVyYW5kICVzIgorbXNnc3RyICLOtc+Azq8gz4DOu86tzr/OvSDPhM61zrvOtc+Dz4TOrc6/z4Igwqslc8K7IgorCisjOiBzcmMvZ3JhbS5jOjExMgorbXNnaWQgImVtcHR5IgorbXNnc3RyICLOus61zr3PjCIKKworIzogc3JjL2dyYW0uYzoyMDEKK21zZ2lkICJHcmFtbWFyIgorbXNnc3RyICLOk8+BzrHOvM68zrHPhM65zrrOriIKKworIzogc3JjL2dyYXBodml6LmM6NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIi8vIEdlbmVyYXRlZCBieSAlcy5cbiIKKyIvLyBSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorIi8vIEhvbWUgcGFnZTogPCVzPi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvbG9jYXRpb24uYzo5MyBzcmMvc2Nhbi1ncmFtLmw6ODU5CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgbnVtYmVyIG92ZXJmbG93IgorbXNnc3RyICLPhc+AzrXPgc+HzrXOr867zrnPg863IM6xz4HOuc64zrzOv8+NIM6zz4HOsc68zrzPjs69IgorCisjOiBzcmMvbG9jYXRpb24uYzo5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb2x1bW4gbnVtYmVyIG92ZXJmbG93IgorbXNnc3RyICLPhc+AzrXPgc+HzrXOr867zrnPg863IM6xz4HOuc64zrzOv8+NIM+Dz4TOt867z47OvSIKKworIzogc3JjL21haW4uYzoxNDYKK21zZ2lkICJydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHMiCittc2dzdHIgIs6/IM66zrHOvc+Mzr3Osc+CIM61zq/Ovc6xzrkgzqzPh8+BzrfPg8+Ezr/PgiDPg8+Ezr/OvSDOsc69zrHOu8+Fz4TOriDOu8+MzrPPiSDPg8+FzrPOus+Bzr/Pjc+DzrXPic69IgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJSVkZWZpbmUgdmFyaWFibGUgJXMgcmVkZWZpbmVkIgorbXNnc3RyICLPhM6/IM+Dz43OvM6yzr/Ou86/ICVzIM6xzr3Osc66zrHOuM6/z4HOr8+Dz4TOt866zrUiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NDUzCisjLCBmdXp6eQorbXNnaWQgInByZXZpb3VzIGRlZmluaXRpb24iCittc2dzdHIgIs+Az4HOv863zrPOv8+NzrzOtc69zrcgzrTOrs67z4nPg863IgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ5MCBzcmMvbXVzY2xlLXRhYi5jOjUwNCBzcmMvbXVzY2xlLXRhYi5jOjU1NgorIzogc3JjL211c2NsZS10YWIuYzo2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVuZGVmaW5lZCAlJWRlZmluZSB2YXJpYWJsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlJWRlZmluZSBCb29sZWFuIHZhcmlhYmxlICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjA5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICUlZGVmaW5lIHZhcmlhYmxlICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjYxMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYWNjZXB0ZWQgdmFsdWU6ICVzIgorbXNnc3RyICLOvM63IM+Hz4HOt8+DzrnOvM6/z4DOv865zr/Pjc68zrXOvc63IM+EzrnOvM6uOiAkJWQiCisKKyM6IHNyYy9wYXJzZS1ncmFtLnk6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgaWRlbnRpZmllciBpbiBwYXJhbWV0ZXIgZGVjbGFyYXRpb24iCittc2dzdHIgIs+Ezr8gz4zOvc6/zrzOsSDOu861zq/PgM61zrkgz4PPhM63IM60zq7Ou8+Jz4POtyDPgM6xz4HOsc68zq3PhM+Bzr/PhSIKKworIzogc3JjL3ByaW50LmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIHR5cGUgJWQgaXMgJXNcbiIKK21zZ3N0ciAizr8gz4TPjc+Azr/PgiAlZCDOtc6vzr3Osc65ICVzXG4iCisKKyM6IHNyYy9wcmludC5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICJzaGlmdCwgYW5kIGdvIHRvIHN0YXRlICVkXG4iCittc2dzdHIgIs6/zrvOr8+DzrjOt8+DzrcsIM66zrHOuSDOvM61z4TOrM6yzrHPg863IM+Dz4TOtyDOus6xz4TOrM+Dz4TOsc+DzrcgJWRcbiIKKworIzogc3JjL3ByaW50LmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImdvIHRvIHN0YXRlICVkXG4iCittc2dzdHIgIs+Azq7Os86xzrnOvc61IM+Dz4TOt869IM66zrHPhM6sz4PPhM6xz4POtyAlZFxuIgorCisjOiBzcmMvcHJpbnQuYzoyMDMKK21zZ2lkICJlcnJvciAobm9uYXNzb2NpYXRpdmUpXG4iCittc2dzdHIgIs+Dz4bOrM67zrzOsSAozrzOtyDPgM+Bzr/Pg861z4TOsc65z4HOuc+Dz4TOuc66z4wpXG4iCisKKyM6IHNyYy9wcmludC5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWR1Y2UgdXNpbmcgcnVsZSAlZCAoJXMpIgorbXNnc3RyICLOtc67zqzPhM+Ez4nPg863IM68zrUgz4fPgc6uz4POtyDPhM6/z4UgzrrOsc69z4zOvc6xICVkICglcykiCisKKyM6IHNyYy9wcmludC5jOjIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJhY2NlcHQiCittc2dzdHIgIs6xz4DOv860zr/Ph86uIgorCisjOiBzcmMvcHJpbnQuYzoyNjQgc3JjL3ByaW50LmM6MzM4Cittc2dpZCAiJGRlZmF1bHQiCittc2dzdHIgIiRkZWZhdWx0IgorCisjOiBzcmMvcHJpbnQuYzozNzMgc3JjL3ByaW50X2dyYXBoLmM6NzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlN0YXRlICVkIgorbXNnc3RyICLOms6xz4TOrM+Dz4TOsc+DzrcgJWQgIgorCisjOiBzcmMvcHJpbnQuYzo0MDkKK21zZ2lkICJUZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIiCittc2dzdHIgIs6kzrXPgc68zrHPhM65zrrOrCDPg8+NzrzOss6/zrvOsSwgzrzOtSDOus6xzr3PjM69zrXPgiDPjM+Azr/PhSDOtc68z4bOsc69zq/Ots6/zr3PhM6xzrkiCisKKyM6IHNyYy9wcmludC5jOjQzNgorbXNnaWQgIk5vbnRlcm1pbmFscywgd2l0aCBydWxlcyB3aGVyZSB0aGV5IGFwcGVhciIKK21zZ3N0ciAizpzOtyDPhM61z4HOvM6xz4TOuc66zqwgz4PPjc68zrLOv867zrEsIM68zrUgzrrOsc69z4zOvc61z4Igz4zPgM6/z4UgzrXOvM+GzrHOvc6vzrbOv869z4TOsc65IgorCisjOiBzcmMvcHJpbnQuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uIGxlZnQ6IgorbXNnc3RyICLPg8+EzrEgzrHPgc65z4PPhM61z4HOrDoiCisKKyM6IHNyYy9wcmludC5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgb24gcmlnaHQ6IgorbXNnc3RyICLPg8+EzrEgzrTOtc6+zrnOrDoiCisKKyM6IHNyYy9wcmludC5jOjUxMAorbXNnaWQgIlJ1bGVzIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHMiCittc2dzdHIgIs6azrHOvc+Mzr3Otc+CIM6sz4fPgc63z4PPhM6/zrkgz4PPhM6/zr0gzrHOvc6xzrvPhc+Ezq4gzrvPjM6zz4kgz4PPhc6zzrrPgc6/z43Pg861z4nOvSIKKworIzogc3JjL3JlYWRlci5jOjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlICVzIGRlY2xhcmF0aW9ucyIKK21zZ3N0ciAiz4DOv867zrvOsc+AzrvOrc+CIM60zrfOu8+Oz4POtc65z4Igz4TOv8+FICVzIgorCisjOiBzcmMvcmVhZGVyLmM6MTMzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJyZXN1bHQgdHlwZSBjbGFzaCBvbiBtZXJnZSBmdW5jdGlvbiAlczogPCVzPiAhPSA8JXM+IgorbXNnc3RyICIiCisiz4PPjc6zzrrPgc6/z4XPg863IM+AzrHPgc6xzrPPjM68zrXOvc6/z4Ugz4TPjc+Azr/PhSDPg8+Ezrcgz4PPhc69zqzPgc+EzrfPg863IM+Dz4XOs8+Hz47Ovc61z4XPg863z4Igwqslc8K7OiA8JXM+ICE9IDwlcz4iCisKKyM6IHNyYy9yZWFkZXIuYzoxMzkgc3JjL3N5bXRhYi5jOjE1NiBzcmMvc3ltdGFiLmM6MTY2IHNyYy9zeW10YWIuYzo5MzgKKyM6IHNyYy9zeW10YWIuYzo5NTMgc3JjL3N5bXRhYi5jOjk2OCBzcmMvc3ltdGFiLmM6OTgzCittc2dpZCAicHJldmlvdXMgZGVjbGFyYXRpb24iCittc2dzdHIgIs+Az4HOv863zrPOv8+NzrzOtc69zrcgzrTOrs67z4nPg863IgorCisjOiBzcmMvcmVhZGVyLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZWQgc3ltYm9sIG5hbWUgZm9yICVzIGlnbm9yZWQiCittc2dzdHIgIiIKKworIzogc3JjL3JlYWRlci5jOjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICJydWxlIGdpdmVuIGZvciAlcywgd2hpY2ggaXMgYSB0b2tlbiIKK21zZ3N0ciAizrrOsc69z4zOvc6xz4IgzrTOv8+DzrzOrc69zr/PgiDOs865zrEgJXMsIM+Azr/PhSDOtc6vzr3Osc65IM67zrXOus+EzrnOus6uIM68zr/Ovc6szrTOsSIKKworIzogc3JjL3JlYWRlci5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ0eXBlIGNsYXNoIG9uIGRlZmF1bHQgYWN0aW9uOiA8JXM+ICE9IDwlcz4iCittc2dzdHIgIs+Dz43Os866z4HOv8+Fz4POtyDPhM+Nz4DPic69IM+Dz4TOt869IM+Az4HOv861z4DOuc67zrXOs868zq3Ovc63IM61zr3Orc+BzrPOtc65zrE6IDwlcz4gIT0gPCVzPiIKKworIzogc3JjL3JlYWRlci5jOjMxMAorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBydWxlIGZvciB0eXBlZCBub250ZXJtaW5hbCwgYW5kIG5vIGFjdGlvbiIKK21zZ3N0ciAizrrOtc69z4zPgiDOus6xzr3PjM69zrHPgiDOs865zrEgzrzOtyDPhM61z4HOvM6xz4TOuc66z4wgz4PPjc68zrLOv867zr8gzrzOtSDPhM+Nz4DOvywgzrrOsc65IM6/z4XOtM61zrzOr86xIM61zr3Orc+BzrPOtc65zrEiCisKKyM6IHNyYy9yZWFkZXIuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW51c2VkIHZhbHVlOiAkJWQiCittc2dzdHIgIs68zrcgz4fPgc63z4POuc68zr/PgM6/zrnOv8+NzrzOtc69zrcgz4TOuc68zq46ICQlZCIKKworIzogc3JjL3JlYWRlci5jOjMzMAorbXNnaWQgInVuc2V0IHZhbHVlOiAkJCIKK21zZ3N0ciAizrzOtyDOus6xzrjOv8+BzrnPg868zq3Ovc63IM+EzrnOvM6uOiAkJCIKKworIzogc3JjL3JlYWRlci5jOjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b2tlbiBmb3IgJSVwcmVjIGlzIG5vdCBkZWZpbmVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVhZGVyLmM6NDMxIHNyYy9yZWFkZXIuYzo0NDUgc3JjL3JlYWRlci5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5IG9uZSAlcyBhbGxvd2VkIHBlciBydWxlIgorbXNnc3RyICLOvM+Mzr3OvyDOrc69zrEgJXMgzrHOvc6sIM66zrHOvc+Mzr3OsSDOrc+HzrXOuSDOtc+AzrnPhM+BzrHPgM61zq8iCisKKyM6IHNyYy9yZWFkZXIuYzo0NDEgc3JjL3JlYWRlci5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhZmZlY3RzIG9ubHkgR0xSIHBhcnNlcnMiCittc2dzdHIgIiVzIM61z4DOt8+BzrXOrM62zrXOuSDOvM+Mzr3OvyDOsc69zrHOu8+Fz4TOrc+CIEdMUiIKKworIzogc3JjL3JlYWRlci5jOjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBtdXN0IGJlIGZvbGxvd2VkIGJ5IHBvc2l0aXZlIG51bWJlciIKK21zZ3N0ciAiJXMgz4DPgc6tz4DOtc65IM69zrEgzrHOus6/zrvOv8+FzrjOtc6vz4TOsc65IM6xz4DPjCDOuM61z4TOuc66z4wgzrHPgc65zrjOvM+MIgorCisjOiBzcmMvcmVhZGVyLmM6NTU0CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bGUgaXMgdG9vIGxvbmciCittc2dzdHIgIs66zrHOvc+Mzr3Osc+CIM+Azr/Ou8+NIM61z4DOuc68zq7Ous63z4IiCisKKyM6IHNyYy9yZWFkZXIuYzo2NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcnVsZXMgaW4gdGhlIGlucHV0IGdyYW1tYXIiCittc2dzdHIgIs6zz4HOsc68zrzOsc+EzrnOus6uIM61zrnPg8+MzrTOv8+FIM+Hz4nPgc6vz4IgzrrOsc69z4zOvc61z4IiCisKKyM6IHNyYy9yZWR1Y2UuYzoyNDEKK21zZ2lkICJydWxlIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAizqzPh8+BzrfPg8+Ezr/PgiDOus6xzr3PjM69zrHPgiDPg8+EzrcgzrPPgc6xzrzOvM6xz4TOuc66zq4iCisKKyM6IHNyYy9yZWR1Y2UuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiAlcyIKK21zZ3N0ciAizrzOtyDPhM61z4HOvM6xz4TOuc66z4wgz4PPjc68zrLOv867zr8gzqzPh8+BzrfPg8+Ezr8gz4PPhM63IM6zz4HOsc68zrzOsc+EzrnOus6uOiAlcyIKKworIzogc3JjL3JlZHVjZS5jOjM1MAorbXNnaWQgIk5vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgIs6czrcgz4TOtc+BzrzOsc+EzrnOus6sIM+Dz43OvM6yzr/Ou86xIM6sz4fPgc63z4PPhM6xIM+Dz4TOtyDOs8+BzrHOvM68zrHPhM65zrrOriIKKworIzogc3JjL3JlZHVjZS5jOjM2MworbXNnaWQgIlRlcm1pbmFscyB1bnVzZWQgaW4gZ3JhbW1hciIKK21zZ3N0ciAizqTOtc+BzrzOsc+EzrnOus6sIM+Dz43OvM6yzr/Ou86xIM68zrcgz4fPgc63z4POuc68zr/PgM6/zrnOv8+NzrzOtc69zrEgz4PPhM63IM6zz4HOsc68zrzOsc+EzrnOus6uIgorCisjOiBzcmMvcmVkdWNlLmM6MzcyCittc2dpZCAiUnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyICLOhs+Hz4HOt8+Dz4TOv865IM66zrHOvc+Mzr3Otc+CIM+Dz4TOtyDOs8+BzrHOvM68zrHPhM65zrrOriIKKworIzogc3JjL3JlZHVjZS5jOjM4NQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dpZF9wbHVyYWwgIiVkIG5vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHJbMF0gIs68zrcgz4TOtc+BzrzOsc+EzrnOus+MIM+Dz43OvM6yzr/Ou86/ICVkIM6sz4fPgc63z4PPhM6/IM+Dz4TOtyDOs8+BzrHOvM68zrHPhM65zrrOriIKK21zZ3N0clsxXSAizrzOtyDPhM61z4HOvM6xz4TOuc66zqwgz4PPjc68zrLOv867zrEgJWQgzqzPh8+BzrfPg8+EzrEgz4PPhM63IM6zz4HOsc68zrzOsc+EzrnOus6uIgorCisjOiBzcmMvcmVkdWNlLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnaWRfcGx1cmFsICIlZCBydWxlcyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHJbMF0gIs6/IM66zrHOvc+Mzr3Osc+CICVkIM61zq/Ovc6xzrkgzqzPh8+BzrfPg8+Ezr/PgiDPg8+EzrcgzrPPgc6xzrzOvM6xz4TOuc66zq4iCittc2dzdHJbMV0gIs6/zrkgzrrOsc69z4zOvc61z4IgJWQgzrXOr869zrHOuSDOrM+Hz4HOt8+Dz4TOv865IM+Dz4TOtyDOs8+BzrHOvM68zrHPhM65zrrOriIKKworIzogc3JjL3JlZHVjZS5jOjQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydCBzeW1ib2wgJXMgZG9lcyBub3QgZGVyaXZlIGFueSBzZW50ZW5jZSIKK21zZ3N0ciAiz4TOvyDOsc+Bz4fOuc66z4wgz4PPjc68zrLOv867zr8gJXMgzrTOtc69IM+AzrHPgc6szrPOtc65IM66zrHOvM65zqwgz4DPgc+Mz4TOsc+DzrciCisKKyM6IHNyYy9zY2FuLWNvZGUubDoxODgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN0cmF5ICclcyciCittc2dzdHIgIs68zr/Ovc6xz4fOuc66z4wgwqskwrsiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyMjkKK21zZ2lkICJhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZSIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjMyCittc2dpZCAiZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNlIG9mIFlZRkFJTCwgd2hpY2ggaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0MzEgc3JjL3NjYW4tY29kZS5sOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcnMgdG86ICVjJXMgYXQgJXMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NzaWJseSBtZWFudDogJWMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICIsIGhpZGluZyAlYyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiBhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiwgY2Fubm90IGJlIGFjY2Vzc2VkIGZyb20gbWlkLXJ1bGUgYWN0aW9uIGF0ICQlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NTIxIHNyYy9zY2FuLWdyYW0ubDo3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZWdlciBvdXQgb2YgcmFuZ2U6ICVzIgorbXNnc3RyICLOsc66zq3Pgc6xzrnOv8+CIM61zrrPhM+Mz4Igzr/Pgc6vz4nOvTogJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAizrzOtyDOrc6zzrrPhc+Bzrcgzr/OtM63zrPOr86xOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IgYWZ0ZXIgJyVjJywgZXhwZWN0aW5nIGludGVnZXIsIGxldHRlciwgJ18nLCAnWycsIG9yICckJyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbiBiZWZvcmUgJCVkOiAlLipzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiAlLipzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzbGVhZGluZyByZWZlcmVuY2U6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2NjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImFtYmlndW91cyByZWZlcmVuY2U6ICVzIgorbXNnc3RyICLOsc+DzrHPhs6tz4Igz4zPgc65z4POvM6xICVzIM6zzrnOsSAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJleHBsaWNpdCB0eXBlIGdpdmVuIGluIHVudHlwZWQgZ3JhbW1hciIKK21zZ3N0ciAiz4HOt8+Ezq4gzrTOrs67z4nPg863IM+Ez43PgM6/z4UgzrTPjM64zrfOus61IM+DzrUgzrPPgc6xzrzOvM6xz4TOuc66zq4gz4fPic+Bzq/PgiDPhM+Nz4DOv8+Fz4IiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3NTkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiQkIGZvciB0aGUgbWlkcnVsZSBhdCAkJWQgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiQkIM6zzrnOsSDPhM63zr0gbWlkcnVsZSDPg8+Ezr8gJCVkIM+Ezr/PhSDCqyVzwrsgzrTOtc69IM6tz4fOtc65IM60zrfOu8+JzrzOrc69zr8gz4TPjc+Azr8iCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3NjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiQkIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICIkJCDPhM6/z4Ugwqslc8K7IM60zrXOvSDOrc+HzrXOuSDOtM63zrvPic68zq3Ovc6/IM+Ez43PgM6/IgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6Nzg2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIkJXMgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiQlZCDPhM6/z4Ugwqslc8K7IM60zrXOvSDOrc+HzrXOuSDOtM63zrvPic68zq3Ovc6/IM+Ez43PgM6/IgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MTQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzdHJheSAnLCcgdHJlYXRlZCBhcyB3aGl0ZSBzcGFjZSIKK21zZ3N0ciAizrzOv869zrHPh865zrrPjCDCqyAsIMK7IM64zrXPic+Bzq7OuM63zrrOtSDPic+CIM67zrXPhc66z4wgzrTOuc6sz4PPhM63zrzOsSIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRpcmVjdGl2ZTogJXMiCittc2dzdHIgIs68zrcgzq3Os866z4XPgc63IM6/zrTOt86zzq/OsTogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyNTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaWRlbnRpZmllcjogJXMiCittc2dzdHIgIs68zrcgzq3Os866z4XPgc63IM6/zrTOt86zzq/OsTogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyOTUKKyMsIGZ1enp5Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIiCittc2dpZF9wbHVyYWwgImludmFsaWQgY2hhcmFjdGVycyIKK21zZ3N0clswXSAizrzOtyDOrc6zzrrPhc+Bzr/PgiDPh86xz4HOsc66z4TOrs+BzrHPgjogJXMiCittc2dzdHJbMV0gIs68zrcgzq3Os866z4XPgc6/z4Igz4fOsc+BzrHOus+Ezq7Pgc6xz4I6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgaWRlbnRpZmllciBpbiBicmFja2V0ZWQgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJhbiBpZGVudGlmaWVyIGV4cGVjdGVkIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozODEKKyMsIGZ1enp5Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIgaW4gYnJhY2tldGVkIG5hbWUiCittc2dpZF9wbHVyYWwgImludmFsaWQgY2hhcmFjdGVycyBpbiBicmFja2V0ZWQgbmFtZSIKK21zZ3N0clswXSAizrzOtyDOrc6zzrrPhc+Bzr/PgiDPh86xz4HOsc66z4TOrs+BzrHPgjogJXMiCittc2dzdHJbMV0gIs68zrcgzq3Os866z4XPgc6/z4Igz4fOsc+BzrHOus+Ezq7Pgc6xz4I6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NDgxIHNyYy9zY2FuLWdyYW0ubDo1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgY2hhcmFjdGVyIGxpdGVyYWwiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjQ4NiBzcmMvc2Nhbi1ncmFtLmw6NTA3CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dHJhIGNoYXJhY3RlcnMgaW4gY2hhcmFjdGVyIGxpdGVyYWwiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bGwgY2hhcmFjdGVyIgorbXNnc3RyICLOvM63IM6tzrPOus+Fz4HOv8+CIM68zrfOtM61zr3Ouc66z4zPgiDPh86xz4HOsc66z4TOrs+BzrHPgiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjUzMSBzcmMvc2Nhbi1ncmFtLmw6NTQxIHNyYy9zY2FuLWdyYW0ubDo1NjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIGFmdGVyIFxcLWVzY2FwZTogJXMiCittc2dzdHIgIs68zrcgzq3Os866z4XPgc6/z4IgzrzOt860zrXOvc65zrrPjM+CIM+HzrHPgc6xzrrPhM6uz4HOsc+COiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjU3MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgXFwtZXNjYXBlOiAlcyIKK21zZ3N0ciAizrzOtyDOrc6zzrrPhc+Bzr/PgiDPh86xz4HOsc66z4TOrs+BzrHPgjogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo5MDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgJXMgYXQgZW5kIG9mIGZpbGUiCittc2dzdHIgIs+Dz4TOvyDPhM6tzrvOv8+CIM+Ezr/PhSDOsc+Bz4fOtc6vzr/PhSDOu861zq/PgM61zrkgwqslc8K7IgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6OTEyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzIGF0IGVuZCBvZiBsaW5lIgorbXNnc3RyICLPg8+Ezr8gz4TOrc67zr/PgiDPhM63z4IgzrPPgc6xzrzOvM6uz4IgzrvOtc6vz4DOtc65IMKrJXPCuyIKKworIzogc3JjL3NjYW4tc2tlbC5sOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmNsb3NlZCAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tc2tlbC5sOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gZmV3IGFyZ3VtZW50cyBmb3IgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGZvciAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iCittc2dzdHIgIiIKKworIzogc3JjL3N5bWxpc3QuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAkIHZhbHVlOiAkJWQiCittc2dzdHIgIs+EzrnOvM6uICQgzrzOtyDOrc6zzrrPhc+Bzrc6ICQlZCIKKworIzogc3JjL3N5bXRhYi5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlBPU0lYIFlhY2MgZm9yYmlkcyBkYXNoZXMgaW4gc3ltYm9sIG5hbWVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgc3ltYm9scyBpbiBpbnB1dCBncmFtbWFyIChsaW1pdCBpcyAlZCkiCittc2dzdHIgIs+AzqzPgc6xIM+Azr/Ou867zqwgz4PPjc68zrLOv867zrEgz4PPhM63IM6zz4HOsc68zrzOsc+EzrnOus6uIM61zrnPg8+MzrTOv8+FICjPhM6/IM+Mz4HOuc6/IM61zq/Ovc6xzrkgJWQpIgorCisjOiBzcmMvc3ltdGFiLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICLOtM6uzrvPic+Dzrcgzr7Osc69zqwgz4TOv8+FICVzIM6zzrnOsSAlcyIKKworIzogc3JjL3N5bXRhYi5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciA8JXM+IgorbXNnc3RyICLOtM6uzrvPic+Dzrcgzr7Osc69zqwgz4TOv8+FICVzIM6zzrnOsSA8JXM+IgorCisjOiBzcmMvc3ltdGFiLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyByZWRlZmluZWQiCittc2dzdHIgIs+Ezr8gz4PPjc68zrLOv867zr8gJXMgzrHOvc6xzrrOsc64zr/Pgc6vz4PPhM63zrrOtSIKKworIzogc3JjL3N5bXRhYi5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgcmVkZWNsYXJlZCIKK21zZ3N0ciAiz4TOvyDPg8+NzrzOss6/zrvOvyAlcyDOvs6xzr3Osc60zrfOu8+OzrjOt866zrUiCisKKyM6IHNyYy9zeW10YWIuYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWZpbmluZyB1c2VyIHRva2VuIG51bWJlciBvZiAlcyIKK21zZ3N0ciAizr/Pgc65z4POvM+Mz4Igzr7Osc69zqwgz4TOv8+FIM6xz4HOuc64zrzOv8+NIM67zrXOus+EzrnOus6uz4IgzrzOv869zqzOtM6xz4Igz4TOv8+FICVzIgorCisjOiBzcmMvc3ltdGFiLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyBpcyB1c2VkLCBidXQgaXMgbm90IGRlZmluZWQgYXMgYSB0b2tlbiBhbmQgaGFzIG5vIHJ1bGVzIgorbXNnc3RyICIiCisiz4TOvyDPg8+NzrzOss6/zrvOvyAlcyDPh8+BzrfPg865zrzOv8+Azr/Ouc61zq/PhM6xzrksIM6xzrvOu86sIM60zrXOvSDOus6xzrjOv8+Bzq/Ots61z4TOsc65IM+Jz4IgzrvOtc66z4TOuc66zq4gzrzOv869zqzOtM6xIM66zrHOuSAiCisizrTOtc69IM60zrnOsc64zq3PhM61zrkgzrrOsc69z4zOvc61z4IiCisKKyM6IHNyYy9zeW10YWIuYzo0MTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyB1c2VkIG1vcmUgdGhhbiBvbmNlIGFzIGEgbGl0ZXJhbCBzdHJpbmciCittc2dzdHIgIiIKKyLPhM6/IM+Dz43OvM6yzr/Ou86/IMKrJXPCuyDPh8+BzrfPg865zrzOv8+Azr/Ouc6uzrjOt866zrUgz4DOtc+BzrnPg8+Dz4zPhM61z4HOtc+CIM6xz4DPjCDOvM65zrEgz4bOv8+Bzq3PgiDPic+CIM66z4XPgc65zr/Ou861zrrPhM65zrrPjCAiCisizrHOu8+GzrHPgc65zrjOvM63z4TOuc66z4wiCisKKyM6IHNyYy9zeW10YWIuYzo0MTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyBnaXZlbiBtb3JlIHRoYW4gb25lIGxpdGVyYWwgc3RyaW5nIgorbXNnc3RyICIgz4TOvyDPg8+NzrzOss6/zrvOvyDCqyVzwrsgzq3OtM+Jz4POtSDPgM61z4HOuc+Dz4PPjM+EzrXPgc6xIM+Ezr/PhSDOtc69z4zPgiDOus+Fz4HOuc6/zrvOtc66z4TOuc66zqwgzrHOu8+GzrHPgc65zrjOvM63z4TOuc66zqwiCisKKyM6IHNyYy9zeW10YWIuYzo1MzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVzZXIgdG9rZW4gbnVtYmVyICVkIHJlZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICLOtM6uzrvPic+Dzrcgzr7Osc69zqwgz4TOv8+FICVzIM6zzrnOsSAlcyIKKworIzogc3JjL3N5bXRhYi5jOjUzOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicHJldmlvdXMgZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICLPgM+Bzr/Ot86zzr/Pjc68zrXOvc63IM60zq7Ou8+Jz4POtyIKKworIzogc3JjL3N5bXRhYi5jOjkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgc3RhcnQgc3ltYm9sICVzIGlzIHVuZGVmaW5lZCIKK21zZ3N0ciAiz4TOvyDPg8+NzrzOss6/zrvOvyDOtc66zrrOr869zrfPg863z4IgJXMgzrTOtc69IM61zq/Ovc6xzrkgzrrOsc64zr/Pgc65z4POvM6tzr3OvyIKKworIzogc3JjL3N5bXRhYi5jOjkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgc3RhcnQgc3ltYm9sICVzIGlzIGEgdG9rZW4iCittc2dzdHIgIs+Ezr8gz4PPjc68zrLOv867zr8gzrXOus66zq/Ovc63z4POt8+CICAlcyDOtc6vzr3Osc65IM67zrXOus+EzrnOus6uIM68zr/Ovc6szrTOsSIKKworIzogc3JjL3N5bXRhYi5jOjkzNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlJWRlc3RydWN0b3IiCittc2dzdHIgIs60zq7Ou8+Jz4POtyDOvs6xzr3OrCDPhM6/z4Ugz4DPgc6/zrXPgM65zrvOtc6zzrzOrc69zr/PhSDOus6xz4TOsc+Dz4TPgc6/z4bOrc6xICUlIgorCisjOiBzcmMvc3ltdGFiLmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnbGVzcyAlJWRlc3RydWN0b3IiCittc2dzdHIgIs60zq7Ou8+Jz4POtyDOvs6xzr3OrCDPhM6/z4Ugz4DPgc6/zrXPgM65zrvOtc6zzrzOrc69zr/PhSDOus6xz4TOsc+Dz4TPgc6/z4bOrc6xICUlIgorCisjOiBzcmMvc3ltdGFiLmM6OTY1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICUlcHJpbnRlciIKK21zZ3N0ciAizrTOrs67z4nPg863IM6+zrHOvc6sIM+Ezr/PhSDPgM+Bzr/Otc+AzrnOu861zrPOvM6tzr3Ov8+FIM61zrrPhM+Fz4DPic+Ezq4gJSUiCisKKyM6IHNyYy9zeW10YWIuYzo5ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdsZXNzICUlcHJpbnRlciIKK21zZ3N0ciAizrTOrs67z4nPg863IM6+zrHOvc6sIM+Ezr/PhSDPgM+Bzr/Otc+AzrnOu861zrPOvM6tzr3Ov8+FIM61zrrPhM+Fz4DPic+Ezq4gJSUiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzo2MyBkamdwcC9zdWJwaXBlLmM6Mjg2IGRqZ3BwL3N1YnBpcGUuYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3Zpbmcgb2YgJyVzJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjg1IGRqZ3BwL3N1YnBpcGUuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGlvbiBvZiBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgInNhdmluZyBzdGRpbiBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJzYXZpbmcgc3Rkb3V0IGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTUzIGRqZ3BwL3N1YnBpcGUuYzoxOTcgZGpncHAvc3VicGlwZS5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nIG9mIHRtcGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgYmlzb24ncyBzdGRvdXQgdG8gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIG00J3Mgc3RkaW4gZnJvbSB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlbmluZyBvZiBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIG00J3Mgc3Rkb3V0IHRvIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSAnJXMnIGludGVycnVwdGVkIgorbXNnc3RyICLPhM6/IM+Fz4DOv8+Az4HPjM6zz4HOsc68zrzOsSDCqyVzwrsgzrTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TPjCDOvc6xIM66zrvOt864zrXOryIKKworIzogZGpncHAvc3VicGlwZS5jOjI0MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic3Vic2lkaWFyeSBwcm9ncmFtICclcycgbm90IGZvdW5kIgorbXNnc3RyICLPhM6/IM+Fz4DOv8+Az4HPjM6zz4HOsc68zrzOsSDCqyVzwrsgzrTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TPjCDOvc6xIM66zrvOt864zrXOryIKKworIzogZGpncHAvc3VicGlwZS5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBiaXNvbidzIHN0ZGluIGZyb20gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCAlcyBmb3IgJXMiCittc2dzdHIgIs68zrcgzq3Os866z4XPgc6/IM+Mz4HOuc+DzrzOsSAlcyDOs865zrEgJXMiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgYXJndW1lbnQgJXMgZm9yICVzIgorbXNnc3RyICLOsc+DzrHPhs6tz4Igz4zPgc65z4POvM6xICVzIM6zzrnOsSAlcyIKKworIzogbGliL2FyZ21hdGNoLmM6MTUzCittc2dpZCAiVmFsaWQgYXJndW1lbnRzIGFyZToiCittc2dzdHIgIs6IzrPOus+Fz4HOsSDOv8+Bzq/Pg868zrHPhM6xIM61zq/Ovc6xzrk6IgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9hbGxvY3MsICV1IGZyZWVkICglLjJmJSUpLlxuIgorbXNnc3RyICIldSBiaXRzZXRfYWxsb2NzLCAldSDOtc67zrXPhc64zrXPgc+OzrjOt866zrHOvSAoJS4yZiUlKS5cbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfc2V0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF9zZXRzLCAldSDPg8+EzrcgzrLOv863zrjOt8+EzrnOus6uIM68zr3Ors68zrcgKCUuMmYlJSlcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfcmVzZXRzLCAldSBjYWNoZWQgKCUuMmYlJSlcbiIKK21zZ3N0ciAiJXUgYml0c2V0X3Jlc2V0cywgJXUgz4PPhM63IM6yzr/Ot864zrfPhM65zrrOriDOvM69zq7OvM63ICglLjJmJSUpXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3Rlc3RzLCAldSBjYWNoZWQgKCUuMmYlJSlcbiIKK21zZ3N0ciAiJXUgYml0c2V0X3Rlc3RzLCAldSDPg8+EzrcgzrLOv863zrjOt8+EzrnOus6uIM68zr3Ors68zrcgKCUuMmYlJSlcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfbGlzdHNcbiIKK21zZ3N0ciAiJXUgYml0c2V0X2xpc3RzXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTIKK21zZ2lkICJjb3VudCBsb2cgaGlzdG9ncmFtXG4iCittc2dzdHIgIs65z4PPhM+MzrPPgc6xzrzOvM6xIM68zrXPhM+Bzq7Pg861z4nOvVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTk1Cittc2dpZCAic2l6ZSBsb2cgaGlzdG9ncmFtXG4iCittc2dzdHIgIs65z4PPhM+MzrPPgc6xzrzOvM6xIM68zrXOs861zrjPjs69XG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTgKK21zZ2lkICJkZW5zaXR5IGhpc3RvZ3JhbVxuIgorbXNnc3RyICLOuc+Dz4TPjM6zz4HOsc68zrzOsSDPgM+FzrrOvc+Mz4TOt8+EzrHPglxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCaXRzZXQgc3RhdGlzdGljczpcbiIKKyJcbiIKK21zZ3N0ciAiIgorIs6jz4TOsc+EzrnPg8+EzrnOus6tz4Igz4TPic69IEJpdHNldDpcbiIKKyJcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJBY2N1bXVsYXRlZCBydW5zID0gJXVcbiIKK21zZ3N0ciAizqPPhc+Dz4PPic+BzrXPhc68zq3Ovc6xIM+Ez4HOtc6+zq/OvM6xz4TOsSA9ICV1XG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyNTkgbGliL2JpdHNldF9zdGF0cy5jOjI2NAorIywgZnV6enkKK21zZ2lkICJjYW5ub3QgcmVhZCBzdGF0cyBmaWxlIgorbXNnc3RyICLOkc60z4XOvc6xzrzOr86xIM6xzr3OrM6zzr3Pic+DzrfPgiDOsc+Bz4fOtc6vzr/PhSDPg8+EzrHPhM65z4PPhM65zrrPjs69IgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjYxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJiYWQgc3RhdHMgZmlsZSBzaXplXG4iCittc2dzdHIgIs6bzqzOuM6/z4IgzrzOrc6zzrXOuM6/z4IgzrHPgc+HzrXOr86/z4UgzrzOtSDPg8+EzrHPhM65z4PPhM65zrrOrC5cbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI4NyBsaWIvYml0c2V0X3N0YXRzLmM6Mjg5CisjLCBmdXp6eQorbXNnaWQgImNhbm5vdCB3cml0ZSBzdGF0cyBmaWxlIgorbXNnc3RyICLOlM61zr0gzrzPgM+Mz4HOtc+DzrEgzr3OsSDOs8+BzqzPiM+JIM+Ezr8gzrHPgc+HzrXOr86/IM68zrUgz4TOsSDPg8+EzrHPhM65z4PPhM65zrrOrC4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyOTIKKyMsIGZ1enp5Cittc2dpZCAiY2Fubm90IG9wZW4gc3RhdHMgZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAizpTOtc69IM68z4DPjM+BzrXPg86xIM69zrEgzrHOvc6/zq/Ovs+JIM6zzrnOsSDOs8+BzqzPiM65zrzOvyDPhM6/IM6xz4HPh861zq/OvyDOvM61IM+EzrEgz4PPhM6xz4TOuc+Dz4TOuc66zqwuIgorCisjOiBsaWIvY2xvc2VvdXQuYzoxMTIKKyMsIGZ1enp5Cittc2dpZCAid3JpdGUgZXJyb3IiCittc2dzdHIgIs68zr/Ouc+BzrHOr86/IM+Dz4bOrM67zrzOsSIKKworIzogbGliL2Vycm9yLmM6MTg4Cittc2dpZCAiVW5rbm93biBzeXN0ZW0gZXJyb3IiCittc2dzdHIgIs6GzrPOvc+Jz4PPhM6/IM+Dz4bOrM67zrzOsSDPg8+Fz4PPhM6uzrzOsc+Ezr/PgiIKKworIzogbGliL2dldG9wdC5jOjU0NyBsaWIvZ2V0b3B0LmM6NTc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICclcycgaXMgYW1iaWd1b3VzOyBwb3NzaWJpbGl0aWVzOiIKK21zZ3N0ciAiJXM6IM63IM61z4DOuc67zr/Os86uIMKrJXPCuyDOtc6vzr3Osc65IM6xz4POsc+Gzq7PglxuIgorCisjOiBsaWIvZ2V0b3B0LmM6NjI0IGxpYi9nZXRvcHQuYzo2MjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy0tJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IM63IM61z4DOuc67zr/Os86uIMKrLS0lc8K7IM60zrXOvSDOtc+AzrnPhM+Bzq3PgM61zrkgz4zPgc65z4POvM6xXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo2MzcgbGliL2dldG9wdC5jOjY0MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnJWMlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogzrcgzrXPgM65zrvOv86zzq4gwqslYyVzwrsgzrTOtc69IM61z4DOuc+Ez4HOrc+AzrXOuSDPjM+BzrnPg868zrFcbiIKKworIzogbGliL2dldG9wdC5jOjY4NSBsaWIvZ2V0b3B0LmM6NzA0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctLSVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogzrcgzrXPgM65zrvOv86zzq4gwqslc8K7IM6xz4DOsc65z4TOtc6vIM+Mz4HOuc+DzrzOsVxuIgorCisjOiBsaWIvZ2V0b3B0LmM6NzQyIGxpYi9nZXRvcHQuYzo3NDUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uICctLSVzJ1xuIgorbXNnc3RyICIlczogzqzOs869z4nPg8+EzrcgzrXPgM65zrvOv86zzq4gwqstLSVzwrtcbiIKKworIzogbGliL2dldG9wdC5jOjc1MyBsaWIvZ2V0b3B0LmM6NzU2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiAnJWMlcydcbiIKK21zZ3N0ciAiJXM6IM6szrPOvc+Jz4PPhM63IM61z4DOuc67zr/Os86uIMKrJWMlc8K7XG4iCisKKyM6IGxpYi9nZXRvcHQuYzo4MDUgbGliL2dldG9wdC5jOjgwOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgb3B0aW9uIC0tICclYydcbiIKK21zZ3N0ciAiJXM6IM68zrcgzq3Os866z4XPgc63IM61z4DOuc67zr/Os86uIC0tICVjXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo4NjEgbGliL2dldG9wdC5jOjg3OCBsaWIvZ2V0b3B0LmM6MTA4OCBsaWIvZ2V0b3B0LmM6MTEwNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAnJWMnXG4iCittc2dzdHIgIiVzOiDOtyDOtc+AzrnOu86/zrPOriDOsc+AzrHOuc+EzrXOryDPjM+BzrnPg868zrEgLS0gJWNcbiIKKworIzogbGliL2dldG9wdC5jOjkzNCBsaWIvZ2V0b3B0LmM6OTUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiVzOiDOtyDOtc+AzrnOu86/zrPOriDCqy1XICVzwrsgzrXOr869zrHOuSDOsc+DzrHPhs6uz4JcbiIKKworIzogbGliL2dldG9wdC5jOjk3NCBsaWIvZ2V0b3B0LmM6OTkyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogzrcgzrXPgM65zrvOv86zzq4gwqstVyAlc8K7IM60zrXOvSDOtc+AzrnPhM+Bzq3PgM61zrkgz4zPgc65z4POvM6xXG4iCisKKyM6IGxpYi9nZXRvcHQuYzoxMDEzIGxpYi9nZXRvcHQuYzoxMDMxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IM63IM61z4DOuc67zr/Os86uIMKrJXPCuyDOsc+AzrHOuc+EzrXOryDPjM+BzrnPg868zrFcbiIKKworIzogbGliL29ic3RhY2suYzo0MTMgbGliL29ic3RhY2suYzo0MTUgbGliL3hhbGxvYy1kaWUuYzozNAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIs61zr7Osc69z4TOu863zrzOrc69zrcgzrzOvc6uzrzOtyIKKworIzogbGliL3NwYXduLXBpcGUuYzoxNDAgbGliL3NwYXduLXBpcGUuYzoxNDMgbGliL3NwYXduLXBpcGUuYzoyNjQKKyM6IGxpYi9zcGF3bi1waXBlLmM6MjY3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIHBpcGUiCittc2dzdHIgIs60zrXOvSDOvM+Azr/Pgc+OIM69zrEgzrrOu861zq/Pg8+JIM+Ezr8gzrHPgc+HzrXOr86/IgorCisjOiBsaWIvc3Bhd24tcGlwZS5jOjIzNCBsaWIvc3Bhd24tcGlwZS5jOjM0OCBsaWIvd2FpdC1wcm9jZXNzLmM6MjgyCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MgZmFpbGVkIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOgorIy4gR2V0IHRyYW5zbGF0aW9ucyBmb3Igb3BlbiBhbmQgY2xvc2luZyBxdW90YXRpb24gbWFya3MuCisjLiBUaGUgbWVzc2FnZSBjYXRhbG9nIHNob3VsZCB0cmFuc2xhdGUgImAiIHRvIGEgbGVmdAorIy4gcXVvdGF0aW9uIG1hcmsgc3VpdGFibGUgZm9yIHRoZSBsb2NhbGUsIGFuZCBzaW1pbGFybHkgZm9yCisjLiAiJyIuICBGb3IgZXhhbXBsZSwgYSBGcmVuY2ggVW5pY29kZSBsb2NhbCBzaG91bGQgdHJhbnNsYXRlCisjLiB0aGVzZSB0byBVKzAwQUIgKExFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFCisjLiBRVU9UQVRJT04gTUFSSyksIGFuZCBVKzAwQkIgKFJJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRQorIy4gUVVPVEFUSU9OIE1BUkspLCByZXNwZWN0aXZlbHkuCisjLgorIy4gSWYgdGhlIGNhdGFsb2cgaGFzIG5vIHRyYW5zbGF0aW9uLCB3ZSB3aWxsIHRyeSB0bworIy4gdXNlIFVuaWNvZGUgVSsyMDE4IChMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykgYW5kCisjLiBVbmljb2RlIFUrMjAxOSAoUklHSFQgU0lOR0xFIFFVT1RBVElPTiBNQVJLKS4gIElmIHRoZQorIy4gY3VycmVudCBsb2NhbGUgaXMgbm90IFVuaWNvZGUsIGxvY2FsZV9xdW90aW5nX3N0eWxlCisjLiB3aWxsIHF1b3RlICdsaWtlIHRoaXMnLCBhbmQgY2xvY2FsZV9xdW90aW5nX3N0eWxlIHdpbGwKKyMuIHF1b3RlICJsaWtlIHRoaXMiLiAgWW91IHNob3VsZCBhbHdheXMgaW5jbHVkZSB0cmFuc2xhdGlvbnMKKyMuIGZvciAiYCIgYW5kICInIiBldmVuIGlmIFUrMjAxOCBhbmQgVSsyMDE5IGFyZSBhcHByb3ByaWF0ZQorIy4gZm9yIHlvdXIgbG9jYWxlLgorIy4KKyMuIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gcHV0IGhlcmUsIHBsZWFzZSBzZWUKKyMuIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1F1b3RhdGlvbl9tYXJrc19pbl9vdGhlcl9sYW5ndWFnZXM+CisjLiBhbmQgdXNlIGdseXBocyBzdWl0YWJsZSBmb3IgeW91ciBsYW5ndWFnZS4KKyM6IGxpYi9xdW90ZWFyZy5jOjMxMgorbXNnaWQgImAiCittc2dzdHIgIsKrIgorCisjOiBsaWIvcXVvdGVhcmcuYzozMTMKK21zZ2lkICInIgorbXNnc3RyICLCuyIKKworIzogbGliL3RpbWV2YXIuYzo0NzUKK21zZ2lkICIiCisiXG4iCisiRXhlY3V0aW9uIHRpbWVzIChzZWNvbmRzKVxuIgorbXNnc3RyICIiCisiXG4iCisizqfPgc+Mzr3Ov8+CIM61zrrPhM6tzrvOtc+DzrfPgiAozrTOtc+Fz4TOtc+Bz4zOu861z4DPhM6xKVxuIgorCisjOiBsaWIvdGltZXZhci5jOjUyNQorbXNnaWQgIiBUT1RBTCAgICAgICAgICAgICAgICAgOiIKK21zZ3N0ciAizqPOpc6dzp/Om86fICAgICAgICAgICAgICAgICA6IgorCisjOiBsaWIvdGltZXZhci5jOjU2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lIGluICVzOiAlbGQuJTA2bGQgKCVsZCUlKVxuIgorbXNnc3RyICLPh8+Bz4zOvc6/z4Igz4POtSAlczogJWxkLiUwNmxkICglbGQlJSlcbiIKKworIzogbGliL3czMnNwYXduLmg6NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiX29wZW5fb3NmaGFuZGxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvdzMyc3Bhd24uaDo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdG9yZSBmZCAlZDogZHVwMiBmYWlsZWQiCittc2dzdHIgIiIKKworIzogbGliL3dhaXQtcHJvY2Vzcy5jOjIyMyBsaWIvd2FpdC1wcm9jZXNzLmM6MjU1IGxpYi93YWl0LXByb2Nlc3MuYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6Mjc0IGxpYi93YWl0LXByb2Nlc3MuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyBnb3QgZmF0YWwgc2lnbmFsICVkIgorbXNnc3RyICIiCisKKyN+IG1zZ2lkICJzdGF0ZSAlZCIKKyN+IG1zZ3N0ciAizrrOsc+EzqzPg8+EzrHPg863ICVkIgorCisjLCBmdXp6eQorI34gbXNnaWQgInN0cmF5ICdAJyIKKyN+IG1zZ3N0ciAizrzOv869zrHPh865zrrPjCDCq0DCuyIKKworI34gbXNnaWQgIiIKKyN+ICJHZW5lcmF0ZSBMQUxSKDEpIGFuZCBHTFIgcGFyc2Vycy5cbiIKKyN+ICJcbiIKKyN+IG1zZ3N0ciAiIgorI34gIs6UzrfOvM65zr/Phc+BzrPOr86xIM6xzr3Osc67z4XPhM+Ozr0gTEFMUigxKSDOus6xzrkgR0xSLlxuIgorI34gIlxuIgorCisjfiBtc2dpZCAiaW52YWxpZCBlc2NhcGUgc2VxdWVuY2U6ICVzIgorI34gbXNnc3RyICLOvM63IM6tzrPOus+Fz4HOtyDOsc66zr/Ou86/z4XOuM6vzrEgzrTOuc6xz4bPhc6zzq7PgjogJXMiCisKKyN+IG1zZ2lkICJ1bnJlY29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlOiAlcyIKKyN+IG1zZ3N0ciAizqzOs869z4nPg8+EzrcgzrHOus6/zrvOv8+FzrjOr86xIM60zrnOsc+Gz4XOs86uz4I6ICVzIgorCisjfiBtc2dpZCAidG9rZW5zICVzIGFuZCAlcyBib3RoIGFzc2lnbmVkIG51bWJlciAlZCIKKyN+IG1zZ3N0ciAizr/OuSDOu861zrrPhM65zrrOrc+CIM68zr/Ovc6szrTOtc+CICVzIM66zrHOuSAlcyDOsc69zqzOuM61z4POsc69IM+Ezr/OvSDOsc+BzrnOuM68z4wgJWQgzrrOsc65IM6/zrkgzrTPjc6/IgorCisjfiBtc2dpZCAiJXM6IGlsbGVnYWwgb3B0aW9uIC0tICVjXG4iCisjfiBtc2dzdHIgIiVzOiDPgM6xz4HOrM69zr/OvM63IM61z4DOuc67zr/Os86uIC0tICVjXG4iCmRpZmYgLS1naXQgYS9wby9lbkBib2xkcXVvdC5oZWFkZXIgYi9wby9lbkBib2xkcXVvdC5oZWFkZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVkYjZhMAotLS0gL2Rldi9udWxsCisrKyBiL3BvL2VuQGJvbGRxdW90LmhlYWRlcgpAQCAtMCwwICsxLDI1IEBACisjIEFsbCB0aGlzIGNhdGFsb2cgInRyYW5zbGF0ZXMiIGFyZSBxdW90YXRpb24gY2hhcmFjdGVycy4KKyMgVGhlIG1zZ2lkcyBtdXN0IGJlIEFTQ0lJIGFuZCB0aGVyZWZvcmUgY2Fubm90IGNvbnRhaW4gcmVhbCBxdW90YXRpb24KKyMgY2hhcmFjdGVycywgb25seSBzdWJzdGl0dXRlcyBsaWtlIGdyYXZlIGFjY2VudCAoMHg2MCksIGFwb3N0cm9waGUgKDB4MjcpCisjIGFuZCBkb3VibGUgcXVvdGUgKDB4MjIpLiBUaGVzZSBzdWJzdGl0dXRlcyBsb29rIHN0cmFuZ2U7IHNlZQorIyBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdWNzL3F1b3Rlcy5odG1sCisjCisjIFRoaXMgY2F0YWxvZyB0cmFuc2xhdGVzIGdyYXZlIGFjY2VudCAoMHg2MCkgYW5kIGFwb3N0cm9waGUgKDB4MjcpIHRvCisjIGxlZnQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTgpIGFuZCByaWdodCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOSkuCisjIEl0IGFsc28gdHJhbnNsYXRlcyBwYWlycyBvZiBhcG9zdHJvcGhlICgweDI3KSB0bworIyBsZWZ0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE4KSBhbmQgcmlnaHQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTkpCisjIGFuZCBwYWlycyBvZiBxdW90YXRpb24gbWFyayAoMHgyMikgdG8KKyMgbGVmdCBkb3VibGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxQykgYW5kIHJpZ2h0IGRvdWJsZSBxdW90YXRpb24gbWFyayAoVSsyMDFEKS4KKyMKKyMgV2hlbiBvdXRwdXQgdG8gYW4gVVRGLTggdGVybWluYWwsIHRoZSBxdW90YXRpb24gY2hhcmFjdGVycyBhcHBlYXIgcGVyZmVjdGx5LgorIyBXaGVuIG91dHB1dCB0byBhbiBJU08tODg1OS0xIHRlcm1pbmFsLCB0aGUgc2luZ2xlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKyMgdHJhbnNsaXRlcmF0ZWQgdG8gYXBvc3Ryb3BoZXMgKGJ5IGljb252IGluIGdsaWJjIDIuMiBvciBuZXdlcikgb3IgdG8KKyMgZ3JhdmUvYWN1dGUgYWNjZW50IChieSBsaWJpY29udiksIGFuZCB0aGUgZG91YmxlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKyMgdHJhbnNsaXRlcmF0ZWQgdG8gMHgyMi4KKyMgV2hlbiBvdXRwdXQgdG8gYW4gQVNDSUkgdGVybWluYWwsIHRoZSBzaW5nbGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorIyB0cmFuc2xpdGVyYXRlZCB0byBhcG9zdHJvcGhlcywgYW5kIHRoZSBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorIyB0cmFuc2xpdGVyYXRlZCB0byAweDIyLgorIworIyBUaGlzIGNhdGFsb2cgZnVydGhlcm1vcmUgZGlzcGxheXMgdGhlIHRleHQgYmV0d2VlbiB0aGUgcXVvdGF0aW9uIG1hcmtzIGluCisjIGJvbGQgZmFjZSwgYXNzdW1pbmcgdGhlIFZUMTAwL1hUZXJtIGVzY2FwZSBzZXF1ZW5jZXMuCisjCmRpZmYgLS1naXQgYS9wby9lbkBxdW90LmhlYWRlciBiL3BvL2VuQHF1b3QuaGVhZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NjQ3ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9wby9lbkBxdW90LmhlYWRlcgpAQCAtMCwwICsxLDIyIEBACisjIEFsbCB0aGlzIGNhdGFsb2cgInRyYW5zbGF0ZXMiIGFyZSBxdW90YXRpb24gY2hhcmFjdGVycy4KKyMgVGhlIG1zZ2lkcyBtdXN0IGJlIEFTQ0lJIGFuZCB0aGVyZWZvcmUgY2Fubm90IGNvbnRhaW4gcmVhbCBxdW90YXRpb24KKyMgY2hhcmFjdGVycywgb25seSBzdWJzdGl0dXRlcyBsaWtlIGdyYXZlIGFjY2VudCAoMHg2MCksIGFwb3N0cm9waGUgKDB4MjcpCisjIGFuZCBkb3VibGUgcXVvdGUgKDB4MjIpLiBUaGVzZSBzdWJzdGl0dXRlcyBsb29rIHN0cmFuZ2U7IHNlZQorIyBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdWNzL3F1b3Rlcy5odG1sCisjCisjIFRoaXMgY2F0YWxvZyB0cmFuc2xhdGVzIGdyYXZlIGFjY2VudCAoMHg2MCkgYW5kIGFwb3N0cm9waGUgKDB4MjcpIHRvCisjIGxlZnQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTgpIGFuZCByaWdodCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOSkuCisjIEl0IGFsc28gdHJhbnNsYXRlcyBwYWlycyBvZiBhcG9zdHJvcGhlICgweDI3KSB0bworIyBsZWZ0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE4KSBhbmQgcmlnaHQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTkpCisjIGFuZCBwYWlycyBvZiBxdW90YXRpb24gbWFyayAoMHgyMikgdG8KKyMgbGVmdCBkb3VibGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxQykgYW5kIHJpZ2h0IGRvdWJsZSBxdW90YXRpb24gbWFyayAoVSsyMDFEKS4KKyMKKyMgV2hlbiBvdXRwdXQgdG8gYW4gVVRGLTggdGVybWluYWwsIHRoZSBxdW90YXRpb24gY2hhcmFjdGVycyBhcHBlYXIgcGVyZmVjdGx5LgorIyBXaGVuIG91dHB1dCB0byBhbiBJU08tODg1OS0xIHRlcm1pbmFsLCB0aGUgc2luZ2xlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKyMgdHJhbnNsaXRlcmF0ZWQgdG8gYXBvc3Ryb3BoZXMgKGJ5IGljb252IGluIGdsaWJjIDIuMiBvciBuZXdlcikgb3IgdG8KKyMgZ3JhdmUvYWN1dGUgYWNjZW50IChieSBsaWJpY29udiksIGFuZCB0aGUgZG91YmxlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKyMgdHJhbnNsaXRlcmF0ZWQgdG8gMHgyMi4KKyMgV2hlbiBvdXRwdXQgdG8gYW4gQVNDSUkgdGVybWluYWwsIHRoZSBzaW5nbGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorIyB0cmFuc2xpdGVyYXRlZCB0byBhcG9zdHJvcGhlcywgYW5kIHRoZSBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorIyB0cmFuc2xpdGVyYXRlZCB0byAweDIyLgorIwpkaWZmIC0tZ2l0IGEvcG8vZW8uZ21vIGIvcG8vZW8uZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MmQ5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9wby9lby5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vZW8ucG8gYi9wby9lby5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGZhMjk4Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vZW8ucG8KQEAgLTAsMCArMSwxMjAzIEBACisjIEVzcGVyYW50byB0cmFuc2xhdGlvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBiaXNvbiBwYWNrYWdlLgorIyBGZWxpcGUgQ2FzdHJvIDxmZWZjYXNAZ21haWwuY29tPiwgMjAxMi4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGJpc29uIDIuNi45MFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBidWctYmlzb25AZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEyLTEyLTEyIDE2OjA5KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEyLTEyLTA5IDE1OjQwLTAzMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEZlbGlwZSBDYXN0cm8gPGZlZmNhc0BnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogRXNwZXJhbnRvIDx0cmFuc2xhdGlvbi10ZWFtLWVvQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZTogZW9cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiE9MSk7XG4iCisKKyM6IHNyYy9jb21wbGFpbi5jOjEyMCBzcmMvY29tcGxhaW4uYzoxMzEgc3JjL2NvbXBsYWluLmM6MTQwIHNyYy9jb21wbGFpbi5jOjE4OAorIzogc3JjL2NvbXBsYWluLmM6MTk4Cittc2dpZCAid2FybmluZyIKK21zZ3N0ciAiYXZlcnRvIgorCisjOiBzcmMvY29tcGxhaW4uYzoxNTEgc3JjL2NvbXBsYWluLmM6MTYwIHNyYy9jb21wbGFpbi5jOjE2NworbXNnaWQgImVycm9yIgorbXNnc3RyICJlcmFybyIKKworIzogc3JjL2NvbXBsYWluLmM6MjA4IHNyYy9jb21wbGFpbi5jOjIxNQorbXNnaWQgImZhdGFsIGVycm9yIgorbXNnc3RyICJuZXJpcGFyZWJsYSBlcmFybyIKKworIzogc3JjL2NvbmZsaWN0cy5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIHNoaWZ0IgorbXNnc3RyICIgICAgS29uZmxpa3RvIGludGVyIHJlZ3VsbyAlZCBrYWogxLVldG9ubyAlcyBlc3RpcyBzb2x2YXRhIGtpZWwgxZ1vdm8iCisKKyM6IHNyYy9jb25mbGljdHMuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyByZWR1Y2UiCittc2dzdHIgIiAgICBLb25mbGlrdG8gaW50ZXIgcmVndWxvICVkIGthaiDEtWV0b25vICVzIGVzdGlzIHNvbHZhdGEga2llbCByZWR1a3RvIgorCisjOiBzcmMvY29uZmxpY3RzLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgYW4gZXJyb3IiCittc2dzdHIgIiAgICBLb25mbGlrdG8gaW50ZXIgcmVndWxvICVkIGthaiDEtWV0b25vICVzIGVzdGlzIHNvbHZhdGEga2llbCBlcmFybyIKKworIzogc3JjL2NvbmZsaWN0cy5jOjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdHM6ICVkIHNoaWZ0L3JlZHVjZSwgJWQgcmVkdWNlL3JlZHVjZVxuIgorbXNnc3RyICJrb25mbGlrdG9qOiAlZCDFnW92by9yZWR1a3RvLCAlZCByZWR1a3RvL3JlZHVrdG9cbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdHM6ICVkIHNoaWZ0L3JlZHVjZVxuIgorbXNnc3RyICJrb25mbGlrdG9qOiAlZCDFnW92by9yZWR1a3RvXG4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCByZWR1Y2UvcmVkdWNlXG4iCittc2dzdHIgImtvbmZsaWt0b2o6ICVkIHJlZHVrdG8vcmVkdWt0b1xuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YXRlICVkICIKK21zZ3N0ciAiU3RhdG8gJWQiCisKKyM6IHNyYy9jb25mbGljdHMuYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSVleHBlY3QtcnIgYXBwbGllcyBvbmx5IHRvIEdMUiBwYXJzZXJzIgorbXNnc3RyICIlJWV4cGVjdC1yciBhcGxpa2VibGFzIG51ciBhbCBhbmFsaXppbG9qIEdMUiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjYxNgorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCAlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3QiCittc2dpZF9wbHVyYWwgImV4cGVjdGVkICVkIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMiCittc2dzdHJbMF0gImVzdGlzIGF0ZW5kYXRhICVkIGtvbmZsaWt0byDFnW92by9yZWR1a3RvIgorbXNnc3RyWzFdICJlc3RpcyBhdGVuZGF0YWogJWQga29uZmxpa3RvaiDFnW92by9yZWR1a3RvIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICVkIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3QiCittc2dpZF9wbHVyYWwgImV4cGVjdGVkICVkIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3RzIgorbXNnc3RyWzBdICJlc3RpcyBhdGVuZGF0YSAlZCBrb25mbGlrdG8gcmVkdWt0by9yZWR1a3RvIgorbXNnc3RyWzFdICJlc3RpcyBhdGVuZGF0YWogJWQga29uZmxpa3RvaiByZWR1a3RvL3JlZHVrdG8iCisKKyM6IHNyYy9maWxlcy5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IG9wZW4iCittc2dzdHIgIiVzOiBuZSBlYmxhcyBtYWxmZXJtaSIKKworIzogc3JjL2ZpbGVzLmM6MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImlucHV0L291dHB1dCBlcnJvciIKK21zZ3N0ciAiZW5pZy9lbGlnYSBlcmFybyIKKworIzogc3JjL2ZpbGVzLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjbG9zZSBmaWxlIgorbXNnc3RyICJuZSBlYmxhcyBmZXJtaSBkb3NpZXJvbiIKKworIzogc3JjL2ZpbGVzLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIG92ZXJ3cml0ZSB0aGUgaW5wdXQgZmlsZSAlcyIKK21zZ3N0ciAibmkgcmlmdXphcyBhbnN0YXRhxa1pZ2kgbGEgZW5pZ2FuIGRvc2llcm9uICVzIgorCisjOiBzcmMvZmlsZXMuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3Rpbmcgb3V0cHV0cyB0byBmaWxlICVzIgorbXNnc3RyICJrb25mbGlrdGFudGFqIGVsaWdvaiBhbCBkb3NpZXJvICVzIgorCisjOiBzcmMvZ2V0YXJncy5jOjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCittc2dzdHIgIlByb3Z1ICclcyAtLWhlbHAnIHBvciBwbGkgZGEgaW5mb3Jtby5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFtPUFRJT05dLi4uIEZJTEVcbiIKK21zZ3N0ciAiVXphZG86ICVzIFtNT0RJRklMT10uLi4gRE9TSUVST1xuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwMgorbXNnaWQgIiIKKyJHZW5lcmF0ZSBhIGRldGVybWluaXN0aWMgTFIgb3IgZ2VuZXJhbGl6ZWQgTFIgKEdMUikgcGFyc2VyIGVtcGxveWluZ1xuIgorIkxBTFIoMSksIElFTFIoMSksIG9yIGNhbm9uaWNhbCBMUigxKSBwYXJzZXIgdGFibGVzLiAgSUVMUigxKSBhbmRcbiIKKyJjYW5vbmljYWwgTFIoMSkgc3VwcG9ydCBpcyBleHBlcmltZW50YWwuXG4iCisiXG4iCittc2dzdHIgIiIKKyJHZW5lcmFzIGRldGVybWluZWNhbiBhbmFsaXppbG9uIExSIGHFrSDEnWVuZXJhbGEgTFIgKEdMUikgYXBsaWthbnRlXG4iCisiYW5hbGl6LXRhYmVsb2puIExBTFIoMSksIElFTFIoMSksIGHFrcKga2Fub25hbiBMUigxKS4gIFN1YnRlbm8gYWwgSUVMUigxKVxuIgorImthaiBrYW5vbmEgTFIoMSkgZXN0YXMgZWtzcGVyaW1lbnRhLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwOQorbXNnaWQgIiIKKyJNYW5kYXRvcnkgYXJndW1lbnRzIHRvIGxvbmcgb3B0aW9ucyBhcmUgbWFuZGF0b3J5IGZvciBzaG9ydCBvcHRpb25zIHRvby5cbiIKK21zZ3N0ciAiIgorIk5lcHJhaiBhcmd1bWVudG9qIHBvciBsb25nYWogbW9kaWZpbG9qIGFua2HFrSBuZXByYXMgcG9yIGxhIG1hbGxvbmdhai5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozMTIKK21zZ2lkICJUaGUgc2FtZSBpcyB0cnVlIGZvciBvcHRpb25hbCBhcmd1bWVudHMuXG4iCittc2dzdHIgIkxhIHNhbW8gZXN0YXMgdmVybyBwb3IgbWFsbmVwcmFqIGFyZ3VtZW50b2ouXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzE2Cittc2dpZCAiIgorIlxuIgorIk9wZXJhdGlvbiBtb2RlczpcbiIKKyIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCisiICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorIiAgICAgIC0tcHJpbnQtbG9jYWxlZGlyICAgICAgb3V0cHV0IGRpcmVjdG9yeSBjb250YWluaW5nIGxvY2FsZS1kZXBlbmRlbnQgIgorImRhdGFcbiIKKyIgICAgICAtLXByaW50LWRhdGFkaXIgICAgICAgIG91dHB1dCBkaXJlY3RvcnkgY29udGFpbmluZyBza2VsZXRvbnMgYW5kIFhTTFRcbiIKKyIgIC15LCAtLXlhY2MgICAgICAgICAgICAgICAgIGVtdWxhdGUgUE9TSVggWWFjY1xuIgorIiAgLVcsIC0td2FybmluZ3NbPUNBVEVHT1JZXSAgcmVwb3J0IHRoZSB3YXJuaW5ncyBmYWxsaW5nIGluIENBVEVHT1JZXG4iCisiICAtZiwgLS1mZWF0dXJlWz1GRUFUVVJFXSAgICBhY3RpdmF0ZSBtaXNjZWxsYW5lb3VzIGZlYXR1cmVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJPcGVyYWNpYWogcmXEnWltb2o6XG4iCisiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICBtb250cmlnaSB0aXVuIMSJaSBoZWxwb24ga2FqIGVsaXJpXG4iCisiICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICBlbGlnaSB2ZXJzaS1pbmZvcm1vbiBrYWogZWxpcmlcbiIKKyIgICAgICAtLXByaW50LWxvY2FsZWRpciAgICAgIGVsaWdpIGRvc2llcnVqb24gZW5oYXZhbnRhbiBsb2thxLVhci1kZXBlbmRhbiAiCisiZGF0dW1hcm9uXG4iCisiICAgICAgLS1wcmludC1kYXRhZGlyICAgICAgICBlbGlnaSBkb3NpZXJvbiBlbmhhdmFudGFuIHNrZWxldG9qbiBrYWogWFNMVFxuIgorIiAgLXksIC0teWFjYyAgICAgICAgICAgICAgICAgxZ1ham5pZ2kgUE9TSVggWWFjY1xuIgorIiAgLVcsIC0td2FybmluZ3NbPUtBVEVHT1JJT10gcmFwb3J0aSBsYSBhdmVydG9qbiBhcGFydGVuYW50YWpuIGFsIEtBVEVHT1JJT1xuIgorIiAgLWYsIC0tZmVhdHVyZVs9QVBBUlRBxLRPXSAgIGFrdGl2aWdpIGRpdmVyc2FqbiBhcGFydGHEtW9qblxuIgorIlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFyc2VyOlxuIgorIiAgLUwsIC0tbGFuZ3VhZ2U9TEFOR1VBR0UgICAgICAgICAgc3BlY2lmeSB0aGUgb3V0cHV0IHByb2dyYW1taW5nIGxhbmd1YWdlXG4iCisiICAtUywgLS1za2VsZXRvbj1GSUxFICAgICAgICAgICAgICBzcGVjaWZ5IHRoZSBza2VsZXRvbiB0byB1c2VcbiIKKyIgIC10LCAtLWRlYnVnICAgICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnQgdGhlIHBhcnNlciBmb3IgZGVidWdnaW5nXG4iCisiICAgICAgLS1sb2NhdGlvbnMgICAgICAgICAgICAgICAgICBlbmFibGUgbG9jYXRpb24gc3VwcG9ydFxuIgorIiAgLUQsIC0tZGVmaW5lPU5BTUVbPVZBTFVFXSAgICAgICAgc2ltaWxhciB0byAnJWRlZmluZSBOQU1FIFwiVkFMVUVcIidcbiIKKyIgIC1GLCAtLWZvcmNlLWRlZmluZT1OQU1FWz1WQUxVRV0gIG92ZXJyaWRlICclZGVmaW5lIE5BTUUgXCJWQUxVRVwiJ1xuIgorIiAgLXAsIC0tbmFtZS1wcmVmaXg9UFJFRklYICAgICAgICAgcHJlcGVuZCBQUkVGSVggdG8gdGhlIGV4dGVybmFsIHN5bWJvbHNcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQgYnkgJy1EYXBpLnByZWZpeD1QUkVGSVgnXG4iCisiICAtbCwgLS1uby1saW5lcyAgICAgICAgICAgICAgICAgICBkb24ndCBnZW5lcmF0ZSAnI2xpbmUnIGRpcmVjdGl2ZXNcbiIKKyIgIC1rLCAtLXRva2VuLXRhYmxlICAgICAgICAgICAgICAgIGluY2x1ZGUgYSB0YWJsZSBvZiB0b2tlbiBuYW1lc1xuIgorbXNnc3RyICIiCisiQW5hbGl6aWxvOlxuIgorIiAgLUwsIC0tbGFuZ3VhZ2U9TElOR1ZPICAgICAgICAgICAgaW5kaWtpIGxhIGVsaWdhbiBwcm9ncmFtLWxpbmd2b25cbiIKKyIgIC1TLCAtLXNrZWxldG9uPURPU0lFUk8gICAgICAgICAgIGluZGlraSBsYSBza2VsZXRvbiB1em90YW5cbiIKKyIgIC10LCAtLWRlYnVnICAgICAgICAgICAgICAgICAgICAgIGVraXBpZ2kgbGEgYW5hbGl6aWxvbiBwb3IgcmFmaW5hZG9cbiIKKyIgICAgICAtLWxvY2F0aW9ucyAgICAgICAgICAgICAgICAgIGVsaWdpIHN1YnRlbm9uIGFsIGxva2lnb2puXG4iCisiICAtRCwgLS1kZWZpbmU9Tk9NT1s9VkFMT1JPXSAgICAgICBzaW1pbGUgYWwgJyVkZWZpbmUgTk9NTyBcIlZBTE9ST1wiJ1xuIgorIiAgLUYsIC0tZm9yY2UtZGVmaW5lPU5PTU9bPVZBTE9ST10gYW5zdGF0YcWtaWdpICclZGVmaW5lIE5PTU8gXCJWQUxPUk9cIidcbiIKKyIgIC1wLCAtLW5hbWUtcHJlZml4PVBSRUZJS1NPICAgICAgIGFudGHFrW1ldGkgUFJFRklLU09uIGFsIGxhIGVrc3RlcmFqICIKKyJzaW1ib2xvalxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5zdGF0YcWtaWdpbmRlIHBlciAnLURhcGkuIgorInByZWZpeD1QUkVGSUtTTydcbiIKKyIgIC1sLCAtLW5vLWxpbmVzICAgICAgICAgICAgICAgICAgIG5lIGdlbmVyaSBpbnN0cnVrY2lvam4gJyNsaW5lJ1xuIgorIiAgLWssIC0tdG9rZW4tdGFibGUgICAgICAgICAgICAgICAgaW5rbHV6aXZpZ2kgdGFiZWxvbiBkZSDEtWV0b25vLW5vbW9qXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzQ2Cittc2dpZCAiIgorIk91dHB1dDpcbiIKKyIgICAgICAtLWRlZmluZXNbPUZJTEVdICAgICAgIGFsc28gcHJvZHVjZSBhIGhlYWRlciBmaWxlXG4iCisiICAtZCAgICAgICAgICAgICAgICAgICAgICAgICBsaWtld2lzZSBidXQgY2Fubm90IHNwZWNpZnkgRklMRSAoZm9yIFBPU0lYICIKKyJZYWNjKVxuIgorIiAgLXIsIC0tcmVwb3J0PVRISU5HUyAgICAgICAgYWxzbyBwcm9kdWNlIGRldGFpbHMgb24gdGhlIGF1dG9tYXRvblxuIgorIiAgICAgIC0tcmVwb3J0LWZpbGU9RklMRSAgICAgd3JpdGUgcmVwb3J0IHRvIEZJTEVcbiIKKyIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIHNhbWUgYXMgYC0tcmVwb3J0PXN0YXRlJ1xuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg9UFJFRklYICAgc3BlY2lmeSBhIFBSRUZJWCBmb3Igb3V0cHV0IGZpbGVzXG4iCisiICAtbywgLS1vdXRwdXQ9RklMRSAgICAgICAgICBsZWF2ZSBvdXRwdXQgdG8gRklMRVxuIgorIiAgLWcsIC0tZ3JhcGhbPUZJTEVdICAgICAgICAgYWxzbyBvdXRwdXQgYSBncmFwaCBvZiB0aGUgYXV0b21hdG9uXG4iCisiICAteCwgLS14bWxbPUZJTEVdICAgICAgICAgICBhbHNvIG91dHB1dCBhbiBYTUwgcmVwb3J0IG9mIHRoZSBhdXRvbWF0b25cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGUgWE1MIHNjaGVtYSBpcyBleHBlcmltZW50YWwpXG4iCittc2dzdHIgIiIKKyJFbGlnbzpcbiIKKyIgICAgICAtLWRlZmluZXNbPURPU0lFUk9dICAgIGFsZG9uZSBwcm9kdWt0aSBrYXAtZG9zaWVyb25cbiIKKyIgIC1kICAgICAgICAgICAgICAgICAgICAgICAgIHNpbWlsZSBzZWQgbmUgcG92YXMgaW5kaWtpIERPU0lFUk9uIChwb3IgUE9TSVggIgorIllhY2MpXG4iCisiICAtciwgLS1yZXBvcnQ9QUZFUk9KICAgICAgICBhbGRvbmUgcHJvZHVrdGkgZGV0YWxvam4gcHJpIGxhIHJvYm90b1xuIgorIiAgICAgIC0tcmVwb3J0LWZpbGU9RE9TSUVSTyAgc2tyaWJpIHJhcG9ydG9uIGFsIERPU0lFUk9cbiIKKyIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIHNhbWUgb2wgYC0tcmVwb3J0PXN0YXRlJ1xuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg9UFJFRklLU08gaW5kaWtpIFBSRUZJU09uIHBvciBlbGlnYWogZG9zaWVyb2pcbiIKKyIgIC1vLCAtLW91dHB1dD1ET1NJRVJPICAgICAgIGtvbmR1a2kgZWxpZ29uIGFsIERPU0lFUk9cbiIKKyIgIC1nLCAtLWdyYXBoWz1ET1NJRVJPXSAgICAgIGFsZG9uZSBlbGlnaSBncmFmZW9uIHByaSBsYSByb2JvdG9cbiIKKyIgIC14LCAtLXhtbFs9RE9TSUVST10gICAgICAgIGFsZG9uZSBlbGlnaSByYXBvcnRvbiBYTUwgcHJpIGxhIHJvYm90b1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhIFhNTC1za2VtbyBlc3RhcyBla3NwZXJpbWVudGEpXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzYxCittc2dpZCAiIgorIldhcm5pbmcgY2F0ZWdvcmllcyBpbmNsdWRlOlxuIgorIiAgYG1pZHJ1bGUtdmFsdWVzJyAgdW5zZXQgb3IgdW51c2VkIG1pZHJ1bGUgdmFsdWVzXG4iCisiICBgeWFjYycgICAgICAgICAgICBpbmNvbXBhdGliaWxpdGllcyB3aXRoIFBPU0lYIFlhY2NcbiIKKyIgIGBjb25mbGljdHMtc3InICAgIFMvUiBjb25mbGljdHMgKGVuYWJsZWQgYnkgZGVmYXVsdClcbiIKKyIgIGBjb25mbGljdHMtcnInICAgIFIvUiBjb25mbGljdHMgKGVuYWJsZWQgYnkgZGVmYXVsdClcbiIKKyIgIGBkZXByZWNhdGVkJyAgICAgIG9ic29sZXRlIGNvbnN0cnVjdHNcbiIKKyIgIGBvdGhlcicgICAgICAgICAgIGFsbCBvdGhlciB3YXJuaW5ncyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGFsbCcgICAgICAgICAgICAgYWxsIHRoZSB3YXJuaW5nc1xuIgorIiAgYG5vLUNBVEVHT1JZJyAgICAgdHVybiBvZmYgd2FybmluZ3MgaW4gQ0FURUdPUllcbiIKKyIgIGBub25lJyAgICAgICAgICAgIHR1cm4gb2ZmIGFsbCB0aGUgd2FybmluZ3NcbiIKKyIgIGBlcnJvcicgICAgICAgICAgIHRyZWF0IHdhcm5pbmdzIGFzIGVycm9yc1xuIgorbXNnc3RyICIiCisiQXZlcnRhaiBrYXRlZ29yaW9qIGlua2x1eml2YXM6XG4iCisiICBgbWlkcnVsZS12YWx1ZXMnICBuZWRpZmluaXRhaiBhxa0gbmV1eml0YWogbWV6cmVndWxhaiB2YWxvcm9qXG4iCisiICBgeWFjYycgICAgICAgICAgICBtYWxrb25ncnVvaiBrdW4gUE9TSVggWWFjY1xuIgorIiAgYGNvbmZsaWN0cy1zcicgICAga29uZmxpa3RvaiDFnC9SIChlYmxlZ2l0YWogYXByaW9yZSlcbiIKKyIgIGBjb25mbGljdHMtcnInICAgIGtvbmZsaWt0b2ogUi9SIChlYmxpZ2l0YWogYXByaW9yZSlcbiIKKyIgIGBkZXByZWNhdGVkJyAgICAgIG1hbHJla29tZW5kaW5kYWogYXJhbsSdb2pcbiIKKyIgIGBvdGhlcicgICAgICAgICAgIMSJaXVqIGFsaWFqIGF2ZXJ0b2ogKGVibGlnaXRhaiBhcHJpb3JlKVxuIgorIiAgYGFsbCcgICAgICAgICAgICAgxIlpdWogYXZlcnRvalxuIgorIiAgYG5vLUtBVEVHT1JJTycgICAgbWFsZWJsaWdpIGF2ZXJ0b2puIGVuIEtBVEVHT1JJT1xuIgorIiAgYG5vbmUnICAgICAgICAgICAgbWFsZWJsaWdpIMSJaXVqbiBhdmVydG9qblxuIgorIiAgYGVycm9yJyAgICAgICAgICAgdHJha3RpIGF2ZXJ0b2puIGtpZWwgZXJhcm9qblxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM3NgorbXNnaWQgIiIKKyJUSElOR1MgaXMgYSBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCB3b3JkcyB0aGF0IGNhbiBpbmNsdWRlOlxuIgorIiAgYHN0YXRlJyAgICAgICAgZGVzY3JpYmUgdGhlIHN0YXRlc1xuIgorIiAgYGl0ZW1zZXQnICAgICAgY29tcGxldGUgdGhlIGNvcmUgaXRlbSBzZXRzIHdpdGggdGhlaXIgY2xvc3VyZVxuIgorIiAgYGxvb2thaGVhZCcgICAgZXhwbGljaXRseSBhc3NvY2lhdGUgbG9va2FoZWFkIHRva2VucyB0byBpdGVtc1xuIgorIiAgYHNvbHZlZCcgICAgICAgZGVzY3JpYmUgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cyBzb2x2aW5nXG4iCisiICBgYWxsJyAgICAgICAgICBpbmNsdWRlIGFsbCB0aGUgYWJvdmUgaW5mb3JtYXRpb25cbiIKKyIgIGBub25lJyAgICAgICAgIGRpc2FibGUgdGhlIHJlcG9ydFxuIgorbXNnc3RyICIiCisiQUZFUk9KIGVzdGFzIGxpc3RvIGRlIGtvbS1hcGFydGl0YWogdm9ydG9qLCBraXVqIHBvdmFzIGlua2x1eml2aTpcbiIKKyIgIGBzdGF0ZScgICAgICAgIHByaXNrcmliaSBsYSBzdGF0b2puXG4iCisiICBgaXRlbXNldCcgICAgICBrb21wbGV0aWdpIGxhIGtlcm5ham4gZWxlbWVudGFyb2puIHBlciBpbGlhaiBmdW5rY2lvalxuIgorIiAgYGxvb2thaGVhZCcgICAgbWFsaW1wbGljaXRlIGFzb2NpaWdpIMS1ZXRvbm9qbiAnbG9va2FoZWFkJyBhbCBlbGVtZW50b2pcbiIKKyIgIGBzb2x2ZWQnICAgICAgIHByaXNrcmliaSBzb2x2YWRvbiBkZSBrb25mbGlrdG9qIMWdb3ZvL3JlZHVrdG9cbiIKKyIgIGBhbGwnICAgICAgICAgIGlua2x1eml2aWdpIGxhIHR1dGFuIGluZm9ybWFyb24gc3VwcmVcbiIKKyIgIGBub25lJyAgICAgICAgIG1hbGVibGlnaSBsYSByYXBvcnRvblxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM4NworbXNnaWQgIiIKKyJGRUFUVVJFIGlzIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMgdGhhdCBjYW4gaW5jbHVkZTpcbiIKKyIgIGBjYXJldCcgICAgICAgIHNob3cgZXJyb3JzIHdpdGggY2FyZXRzXG4iCisiICBgYWxsJyAgICAgICAgICBhbGwgb2YgdGhlIGFib3ZlXG4iCisiICBgbm9uZScgICAgICAgICBkaXNhYmxlIGFsbCBvZiB0aGUgYWJvdmVcbiIKKyIgICIKK21zZ3N0ciAiIgorIkFQQVJUQcS0TyBlc3RhcyBsaXN0byBkYSBrb20tYXBhcnRpdGFqIHZvcnRvaiwga2l1aiBwb3ZhcyBpbmtsdXppdmlnaTpcbiIKKyIgIGBjYXJldCcgICAgICAgIG1vbnRyaSBlcmFyb2puIHBlciB0YWpwLW1vbnRyaWxvalxuIgorIiAgYGFsbCcgICAgICAgICAgxIlpbyBlbCBzdXByZVxuIgorIiAgYG5vbmUnICAgICAgICAgbWFsZWJsaWdpIMSJaW9uIGVsIHN1cHJlXG4iCisiICAiCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlcG9ydCBidWdzIHRvIDwlcz4uXG4iCittc2dzdHIgIlJhcG9ydHUgbWlzb2puIGFsIDwlcz4uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhvbWUgcGFnZTogPCVzPi5cbiIKK21zZ3N0ciAiJXMgaGVqbXBhxJ1vOiA8JXM+LlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NworbXNnaWQgIkdlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LlxuIgorbXNnc3RyICIiCisixJxlbmVyYWxhIGhlbHBvIHBvciB1emkgcHJvZ3JhbWFyb24gR05VOiA8aHR0cDovL3d3dy5nbnUub3JnL2dldGhlbHAvPi5cbiIKKworIy4gVFJBTlNMQVRPUlM6IFJlcGxhY2UgTEFOR19DT0RFIGluIHRoaXMgVVJMIHdpdGggeW91ciBsYW5ndWFnZQorIy4gY29kZSA8aHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS9MQU5HX0NPREUuaHRtbD4gdG8KKyMuIGZvcm0gb25lIG9mIHRoZSBVUkxzIGF0IGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vLgorIy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRoZSBlbnRpcmUgVVJMIHdpdGggeW91ciB0cmFuc2xhdGlvbiB0ZWFtJ3MKKyMuIGVtYWlsIGFkZHJlc3MuCisjOiBzcmMvZ2V0YXJncy5jOjQxMAorbXNnaWQgIlJlcG9ydCB0cmFuc2xhdGlvbiBidWdzIHRvIDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtLz4uXG4iCittc2dzdHIgIlJhcG9ydHUgbWlzdHJhZHVrb2puIGFsIDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtLz4uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDEyCittc2dpZCAiRm9yIGNvbXBsZXRlIGRvY3VtZW50YXRpb24sIHJ1bjogaW5mbyBiaXNvbi5cbiIKK21zZ3N0ciAiUG9yIGxhIHR1dGEgZG9rdW1lbnRhcm8sIGxhbsSJdTogaW5mbyBiaXNvbi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmlzb24gKEdOVSBCaXNvbikgJXMiCittc2dzdHIgImJpc29uIChHTlUtYSBCaXNvbikgJXMiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDMwCittc2dpZCAiV3JpdHRlbiBieSBSb2JlcnQgQ29yYmV0dCBhbmQgUmljaGFyZCBTdGFsbG1hbi5cbiIKK21zZ3N0ciAiVmVya2l0YSBkZSBSb2JlcnQgQ29yYmV0dCBrYWogUmljaGFyZCBTdGFsbG1hbi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29weXJpZ2h0IChDKSAlZCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKK21zZ3N0ciAiS29waXJhanRvIChDKSAlZCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MzcKK21zZ2lkICIiCisiVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk9cbiIKKyJ3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cbiIKK21zZ3N0ciAiIgorIlRpbyDEiWkgZXN0YXMgbGliZXJhIHByb2dyYW1hcm87IHZpZHUgbGEga29kdW1hxLVvbiBwb3Iga29waS1rb25kacSJb2ouICAiCisiRWt6aXN0YXMgTkVOSVVcbiIKKyJnYXJhbnRpbzsgZcSJIG5lIHBvciBNRVJLQVRJR08gYcWtIFRBxaxHTyBQT1IgUFJJVkFUQSBDRUxPLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSBza2VsZXRvbiBkZWNsYXJhdGlvbnMgYXJlIGludmFsaWQiCittc2dzdHIgIm11bHRvYmxhaiBkZWtsYXJvaiBkZSBza2VsZXRvIG5lIGVzdGFzIHZhbGlkZSIKKworIzogc3JjL2dldGFyZ3MuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgbGFuZ3VhZ2UiCittc2dzdHIgIiVzOiBtYWx2YWxpZGEgbGluZ3ZvIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ3OQorbXNnaWQgIm11bHRpcGxlIGxhbmd1YWdlIGRlY2xhcmF0aW9ucyBhcmUgaW52YWxpZCIKK21zZ3N0ciAibXVsdG9ibGFqIGRla2xhcm9qIGRlIGxpbmd2byBuZSBlc3RhcyB2YWxpZGUiCisKKyM6IHNyYy9nZXRhcmdzLmM6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBtaXNzaW5nIG9wZXJhbmQiCittc2dzdHIgIiVzOiBtYW5rYXMgYXJndW1lbnRvIgorCisjOiBzcmMvZ2V0YXJncy5jOjc0OQorIywgYy1mb3JtYXQKK21zZ2lkICJleHRyYSBvcGVyYW5kICVzIgorbXNnc3RyICJrcm9tYSBhcmd1bWVudG8gJXMiCisKKyM6IHNyYy9ncmFtLmM6MTEyCittc2dpZCAiZW1wdHkiCittc2dzdHIgIm1hbHBsZW5hIgorCisjOiBzcmMvZ3JhbS5jOjIwMQorbXNnaWQgIkdyYW1tYXIiCittc2dzdHIgIkdyYW1hdGlrbyIKKworIzogc3JjL2dyYXBodml6LmM6NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIi8vIEdlbmVyYXRlZCBieSAlcy5cbiIKKyIvLyBSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorIi8vIEhvbWUgcGFnZTogPCVzPi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIi8vIEdlbmVyaXRhIGRlICVzLlxuIgorIi8vIFJhcG9ydHUgbWlzb2puIGFsIDwlcz4uXG4iCisiLy8gSGVqbXBhxJ1vOiA8JXM+LlxuIgorIlxuIgorCisjOiBzcmMvbG9jYXRpb24uYzo5MyBzcmMvc2Nhbi1ncmFtLmw6ODU5CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgbnVtYmVyIG92ZXJmbG93IgorbXNnc3RyICJ0cm9hIGxpbmktbnVtZXJvIgorCisjOiBzcmMvbG9jYXRpb24uYzo5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb2x1bW4gbnVtYmVyIG92ZXJmbG93IgorbXNnc3RyICJ0cm9hIGtvbHVtbi1udW1lcm8iCisKKyM6IHNyYy9tYWluLmM6MTQ2Cittc2dpZCAicnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzIgorbXNnc3RyICJyZWd1bG8gbmV1dGlsYSBlbiBhbmFsaXppbG8gcHJvIGtvbmZsaWt0b2oiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlZGVmaW5lIHZhcmlhYmxlICVzIHJlZGVmaW5lZCIKK21zZ3N0ciAiJyUlZGVmaW5lJy12YXJpYWJsbyAlcyBlc3RpcyByZWRpZmluYXRhIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ1MworbXNnaWQgInByZXZpb3VzIGRlZmluaXRpb24iCittc2dzdHIgImFudGHFrWEgZGlmaW5vIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ5MCBzcmMvbXVzY2xlLXRhYi5jOjUwNCBzcmMvbXVzY2xlLXRhYi5jOjU1NgorIzogc3JjL211c2NsZS10YWIuYzo2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVuZGVmaW5lZCAlJWRlZmluZSB2YXJpYWJsZSAlcyIKK21zZ3N0ciAiJXM6IG5lZGlmaW5pdGEgJyUlZGVmaW5lJy12YXJpYWJsbyAlcyIKKworIzogc3JjL211c2NsZS10YWIuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJSVkZWZpbmUgQm9vbGVhbiB2YXJpYWJsZSAlcyIKK21zZ3N0ciAibWFsdmFsaWRhIHZhbG9ybyBwb3IgYnVsZWEgJyUlZGVmaW5lJy12YXJpYWJsbyAlcyIKKworIzogc3JjL211c2NsZS10YWIuYzo2MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJSVkZWZpbmUgdmFyaWFibGUgJXM6ICVzIgorbXNnc3RyICJtYWx2YWxpZGEgdmFsb3JvIHBvciAnJSVkZWZpbmUnLXZhcmlhYmxvICVzOiAlcyIKKworIzogc3JjL211c2NsZS10YWIuYzo2MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWNjZXB0ZWQgdmFsdWU6ICVzIgorbXNnc3RyICJha2NlcHRpdGEgdmFsb3JvOiAlcyIKKworIzogc3JjL3BhcnNlLWdyYW0ueTo3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBpZGVudGlmaWVyIGluIHBhcmFtZXRlciBkZWNsYXJhdGlvbiIKK21zZ3N0ciAibWFua2FzIGlkZW50aWdpbG9uIGVuIGRla2xhcm8gZGUgcGFyYW1ldHJvIgorCisjOiBzcmMvcHJpbnQuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICIgdHlwZSAlZCBpcyAlc1xuIgorbXNnc3RyICIgdGlwbyAlZCBlc3RhcyAlc1xuIgorCisjOiBzcmMvcHJpbnQuYzoxNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAlZFxuIgorbXNnc3RyICLFnW92aSwga2FqIGlyaSBhbCBzdGF0byAlZFxuIgorCisjOiBzcmMvcHJpbnQuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ28gdG8gc3RhdGUgJWRcbiIKK21zZ3N0ciAiaXJpIGFsIHN0YXRvICVkXG4iCisKKyM6IHNyYy9wcmludC5jOjIwMworbXNnaWQgImVycm9yIChub25hc3NvY2lhdGl2ZSlcbiIKK21zZ3N0ciAiZXJhcm8gKG5lLWFzb2NpaWdhKVxuIgorCisjOiBzcmMvcHJpbnQuYzoyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkdWNlIHVzaW5nIHJ1bGUgJWQgKCVzKSIKK21zZ3N0ciAicmVkdWt0aSB1emFudGUgcmVndWxvbiAlZCAoJXMpIgorCisjOiBzcmMvcHJpbnQuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWNjZXB0IgorbXNnc3RyICJha2NlcHRpIgorCisjOiBzcmMvcHJpbnQuYzoyNjQgc3JjL3ByaW50LmM6MzM4Cittc2dpZCAiJGRlZmF1bHQiCittc2dzdHIgIiRkZWZhdWx0IgorCisjOiBzcmMvcHJpbnQuYzozNzMgc3JjL3ByaW50X2dyYXBoLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhdGUgJWQiCittc2dzdHIgIlN0YXRvICVkIgorCisjOiBzcmMvcHJpbnQuYzo0MDkKK21zZ2lkICJUZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIiCittc2dzdHIgIlRlcm1pbmFsb2osIGt1biByZWd1bG9qIGtpZSBpbGkgYXBlcmFzIgorCisjOiBzcmMvcHJpbnQuYzo0MzYKK21zZ2lkICJOb250ZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIiCittc2dzdHIgIk5ldGVybWluYWxvaiwga3VuIHJlZ3Vsb2oga2llIGlsaSBhcGVyYXMiCisKKyM6IHNyYy9wcmludC5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICIgb24gbGVmdDoiCittc2dzdHIgIiBtYWxkZWtzdHJlOiIKKworIzogc3JjL3ByaW50LmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiByaWdodDoiCittc2dzdHIgIiBkZWtzdHJlOiIKKworIzogc3JjL3ByaW50LmM6NTEwCittc2dpZCAiUnVsZXMgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cyIKK21zZ3N0ciAiUmVndWxvaiBuZXV0aWxhaiBlbiBhbmFsaXppbG8gcHJvIGtvbmZsaWt0b2oiCisKKyM6IHNyYy9yZWFkZXIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSAlcyBkZWNsYXJhdGlvbnMiCittc2dzdHIgIm11bHRvYmxhaiBkZWtsYXJvaiAlcyIKKworIzogc3JjL3JlYWRlci5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJyZXN1bHQgdHlwZSBjbGFzaCBvbiBtZXJnZSBmdW5jdGlvbiAlczogPCVzPiAhPSA8JXM+IgorbXNnc3RyICJrb2xpemlvIGRlIHJlenVsdG8tdGlwbyBqZSBsYSBrdW5taWtzYSBmdW5rY2lvICVzOiA8JXM+ICE9IDwlcz4iCisKKyM6IHNyYy9yZWFkZXIuYzoxMzkgc3JjL3N5bXRhYi5jOjE1NiBzcmMvc3ltdGFiLmM6MTY2IHNyYy9zeW10YWIuYzo5MzgKKyM6IHNyYy9zeW10YWIuYzo5NTMgc3JjL3N5bXRhYi5jOjk2OCBzcmMvc3ltdGFiLmM6OTgzCittc2dpZCAicHJldmlvdXMgZGVjbGFyYXRpb24iCittc2dzdHIgImFudGHFrWEgZGVrbGFybyIKKworIzogc3JjL3JlYWRlci5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGVkIHN5bWJvbCBuYW1lIGZvciAlcyBpZ25vcmVkIgorbXNnc3RyICJkdW9ibGlnaXRhIHNpbWJvbC1ub21vIHBvciAlcyBlc3RhcyBwcmV0ZXJhdGVudGl0YSIKKworIzogc3JjL3JlYWRlci5jOjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICJydWxlIGdpdmVuIGZvciAlcywgd2hpY2ggaXMgYSB0b2tlbiIKK21zZ3N0ciAicmVndWxvIGNlbGFudGEgJXMsIGtpbyBlc3RhcyDEtWV0b25vIgorCisjOiBzcmMvcmVhZGVyLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgInR5cGUgY2xhc2ggb24gZGVmYXVsdCBhY3Rpb246IDwlcz4gIT0gPCVzPiIKK21zZ3N0ciAia29saXppbyBkZSB0aXBvIGplIGxhIGFwcmlvcmEgYWdvOiA8JXM+ICE9IDwlcz4iCisKKyM6IHNyYy9yZWFkZXIuYzozMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgcnVsZSBmb3IgdHlwZWQgbm9udGVybWluYWwsIGFuZCBubyBhY3Rpb24iCittc2dzdHIgIm1hbHBsZW5hIHJlZ3VsbyBwb3IgdGlwaWdpdGEgbmV0ZXJtaW5hbG8sIGthaiBuZW5pdSBhZ28iCisKKyM6IHNyYy9yZWFkZXIuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW51c2VkIHZhbHVlOiAkJWQiCittc2dzdHIgIm5ldXppdGEgdmFsb3JvOiAkJWQiCisKKyM6IHNyYy9yZWFkZXIuYzozMzAKK21zZ2lkICJ1bnNldCB2YWx1ZTogJCQiCittc2dzdHIgIm5lZGlmaW5pdGEgdmFsb3JvIgorCisjOiBzcmMvcmVhZGVyLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgInRva2VuIGZvciAlJXByZWMgaXMgbm90IGRlZmluZWQ6ICVzIgorbXNnc3RyICLEtWV0b25vIHBvciAlJXByZWMgbmUgZXN0YXMgZGlmaW5pdGE6ICVzIgorCisjOiBzcmMvcmVhZGVyLmM6NDMxIHNyYy9yZWFkZXIuYzo0NDUgc3JjL3JlYWRlci5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5IG9uZSAlcyBhbGxvd2VkIHBlciBydWxlIgorbXNnc3RyICJudXIgcG8gdW51ICVzIHBlcm1lc2F0ZSBwb3IgcmVndWxvIgorCisjOiBzcmMvcmVhZGVyLmM6NDQxIHNyYy9yZWFkZXIuYzo0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWZmZWN0cyBvbmx5IEdMUiBwYXJzZXJzIgorbXNnc3RyICIlcyBpbmZsdWFzIG51ciBhbmFsaXppbG9qbiBHTFIiCisKKyM6IHNyYy9yZWFkZXIuYzo0NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgbXVzdCBiZSBmb2xsb3dlZCBieSBwb3NpdGl2ZSBudW1iZXIiCittc2dzdHIgIiVzIGRldmFzIGVzdGlzIHNla3ZhdGEgZGUgcG96aXRpdmEgbnVtZXJvIgorCisjOiBzcmMvcmVhZGVyLmM6NTU0CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bGUgaXMgdG9vIGxvbmciCittc2dzdHIgInJlZ3VsbyB0cm8gbG9uZ2FzIgorCisjOiBzcmMvcmVhZGVyLmM6NjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJ1bGVzIGluIHRoZSBpbnB1dCBncmFtbWFyIgorbXNnc3RyICJuZW5pdSByZWd1bG8gZW4gZW5pZ2EgZ3JhbWF0aWtvIgorCisjOiBzcmMvcmVkdWNlLmM6MjQxCittc2dpZCAicnVsZSB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgInJlZ3VsbyBuZXV0aWxhIGVuIGdyYW1hdGlrbyIKKworIzogc3JjL3JlZHVjZS5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6ICVzIgorbXNnc3RyICJuZXRlcm1pbmFsbyBuZXV0aWxhIGVuIGdyYW1hdGlrbzogJXMiCisKKyM6IHNyYy9yZWR1Y2UuYzozNTAKK21zZ2lkICJOb250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyICJOZXRlcm1pbmFsb2ogbmV1dGlsYWogZW4gZ3JhbWF0aWtvIgorCisjOiBzcmMvcmVkdWNlLmM6MzYzCittc2dpZCAiVGVybWluYWxzIHVudXNlZCBpbiBncmFtbWFyIgorbXNnc3RyICJUZXJtaW5hbG9qIG5ldXppdGFqIGVuIGdyYW1hdGlrbyIKKworIzogc3JjL3JlZHVjZS5jOjM3MgorbXNnaWQgIlJ1bGVzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAiUmVndWxvaiBuZXV0aWxhaiBlbiBncmFtYXRpa28iCisKKyM6IHNyYy9yZWR1Y2UuYzozODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnaWRfcGx1cmFsICIlZCBub250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyWzBdICIlZCBuZXRlcm1pbmFsbyBuZXV0aWxhIGVuIGdyYW1hdGlrbyIKK21zZ3N0clsxXSAiJWQgbmV0ZXJtaW5hbG9qIG5ldXRpbGFqIGVuIGdyYW1hdGlrbyIKKworIzogc3JjL3JlZHVjZS5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ2lkX3BsdXJhbCAiJWQgcnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyWzBdICIlZCByZWd1bG8gbmV1dGlsYSBlbiBncmFtYXRpa28iCittc2dzdHJbMV0gIiVkIHJlZ3Vsb2ogbmV1dGlsYWogZW4gZ3JhbWF0aWtvIgorCisjOiBzcmMvcmVkdWNlLmM6NDE5CisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0IHN5bWJvbCAlcyBkb2VzIG5vdCBkZXJpdmUgYW55IHNlbnRlbmNlIgorbXNnc3RyICJla2lnYSBzaW1ib2xvICVzIG5lIGRlcml2YXMgaXVuIGFqbiBmcmF6b24iCisKKyM6IHNyYy9zY2FuLWNvZGUubDoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYXkgJyVzJyIKK21zZ3N0ciAicGVyZGl0YSAnJXMnIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjI5Cittc2dpZCAiYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUiCittc2dzdHIgIic7JyBwb3Z1cyBlc3RpIG5lY2V6YSDEiWUgbGEgZmlubyBkZSBhZ28ta29kbyIKKworIzogc3JjL3NjYW4tY29kZS5sOjIzMgorbXNnaWQgImZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JyIKK21zZ3N0ciAiZXN0b250YWogdmVyc2lvaiBkZSBCaXNvbiBuZSBhbGRvbm9zIGxhICc7JyIKKworIzogc3JjL3NjYW4tY29kZS5sOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2Ugb2YgWVlGQUlMLCB3aGljaCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQiCittc2dzdHIgInV6byBkZSBZWUZBSUwsIGtpbyBlc3RhcyBtYWxyZWtvbWVuZGluZGEga2FqIGVzdG9zIGZvcmlnYXRhIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDMxIHNyYy9zY2FuLWNvZGUubDo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJzIHRvOiAlYyVzIGF0ICVzIgorbXNnc3RyICJyZWZlcmVuY2FzIGFsOiAlYyVzIMSJZSAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NzaWJseSBtZWFudDogJWMiCittc2dzdHIgImVibGUgc2lnbmlmaXM6ICVjIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgaGlkaW5nICVjIgorbXNnc3RyICIsIGthxZ1hbnRhICVjIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiBhdCAlcyIKK21zZ3N0ciAiIMSJZSAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ3MgorIywgYy1mb3JtYXQKK21zZ2lkICIsIGNhbm5vdCBiZSBhY2Nlc3NlZCBmcm9tIG1pZC1ydWxlIGFjdGlvbiBhdCAkJWQiCittc2dzdHIgIiwgbmUgcG92YXMgZXN0aSBhbGlyYXRhIGVsIG1lei1yZWd1bGEgYWdvIMSJZSAkJWQiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo1MjEgc3JjL3NjYW4tZ3JhbS5sOjc4MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlZ2VyIG91dCBvZiByYW5nZTogJXMiCittc2dzdHIgImVudGplcm8gZm9yIGRlIGxpbW86ICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAibWFsdmFsaWRhIHJlZmVyZW5jbzogJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yIGFmdGVyICclYycsIGV4cGVjdGluZyBpbnRlZ2VyLCBsZXR0ZXIsICdfJywgJ1snLCBvciAnJCciCittc2dzdHIgIiIKKyJzaW50YWtzYSBlcmFybyBwb3N0ICclYycsIGVzdGFzIGF0ZW5kYXRhIGVudGplcm8sIGxpdGVybywgJ18nLCAnWycgYcWtICckJyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb24gYmVmb3JlICQlZDogJS4qcyIKK21zZ3N0ciAic2ltYm9sbyBuZSB0cm92aXRhIGVuIHByb2R1a3RhZG8gYW50YcWtICQlZDogJS4qcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYzMworIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246ICUuKnMiCittc2dzdHIgInNpbWJvbG8gbmUgdHJvdml0YSBlbiBwcm9kdWt0YWRvOiAlLipzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc2xlYWRpbmcgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAidHJvbXBpZ2EgcmVmZXJlbmNvOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAicGx1cnNlbmNhIHJlZmVyZW5jbzogJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwbGljaXQgdHlwZSBnaXZlbiBpbiB1bnR5cGVkIGdyYW1tYXIiCittc2dzdHIgIm1hbGltcGxpY2l0YSB0aXBvIGxpdmVyaXRhIGVuIG5ldGlwaWdpdGEgZ3JhbWF0aWtvIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NzU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiQkIGZvciB0aGUgbWlkcnVsZSBhdCAkJWQgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiQkIHBvciBsYSBtZXpyZWd1bG8gxIllICQlZCBkZSAlcyBoYXZhcyBuZW5pdW4gZGVrbGFyaXRhbiB0aXBvbiAiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJCQgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiQkIGRlICVzIGhhdmFzIG5lbml1biBkZWtsYXJpdGFuIHRpcG9uIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiQlcyBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiJCVzIGRlICVzIGhhdmFzIG5lbml1biBkZWtsYXJpdGFuIHRpcG9uIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmF5ICcsJyB0cmVhdGVkIGFzIHdoaXRlIHNwYWNlIgorbXNnc3RyICJwZXJkaXRhICcsJyB0cmFrdGl0YSBraWVsIGJsYW5rLXNwYWNvbiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRpcmVjdGl2ZTogJXMiCittc2dzdHIgIm1hbHZhbGlkYSBpbnN0cnVrY2lvOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50aWZpZXI6ICVzIgorbXNnc3RyICJtYWx2YWxpZGEgaWRlbnRpZ2lsbzogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyOTUKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciIKK21zZ2lkX3BsdXJhbCAiaW52YWxpZCBjaGFyYWN0ZXJzIgorbXNnc3RyWzBdICJtYWx2YWxpZGEgc2lnbm8iCittc2dzdHJbMV0gIm1hbHZhbGlkYWogc2lnbm9qIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgaWRlbnRpZmllciBpbiBicmFja2V0ZWQgbmFtZTogJXMiCittc2dzdHIgIm5lYXRlbmRhdGEgaWRlbnRpZ2lsbyBlbiByZWt0LWtyYW1waWdpdGEgbm9tbzogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW4gaWRlbnRpZmllciBleHBlY3RlZCIKK21zZ3N0ciAiaWRlbnRpZ2lsbyBlc3RhcyBhdGVuZGF0YSIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjM4MQorbXNnaWQgImludmFsaWQgY2hhcmFjdGVyIGluIGJyYWNrZXRlZCBuYW1lIgorbXNnaWRfcGx1cmFsICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gYnJhY2tldGVkIG5hbWUiCittc2dzdHJbMF0gIm1hbHZhbGlkYSBzaWdubyBlbiByZWt0LWtyYW1waWdpdGEgbm9tbyIKK21zZ3N0clsxXSAibWFsdmFsaWRhaiBzaWdub2ogZW4gcmVrdC1rcmFtcGlnaXRhIG5vbW8iCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo0ODEgc3JjL3NjYW4tZ3JhbS5sOjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBjaGFyYWN0ZXIgbGl0ZXJhbCIKK21zZ3N0ciAibWFscGxlbmEgc2lnbm8tbGl0ZXJvIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NDg2IHNyYy9zY2FuLWdyYW0ubDo1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0cmEgY2hhcmFjdGVycyBpbiBjaGFyYWN0ZXIgbGl0ZXJhbCIKK21zZ3N0ciAia3JvbWFqIHNpZ25vaiBlbiBzaWduby1saXRlcm8iCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudWxsIGNoYXJhY3RlciIKK21zZ3N0ciAibWFsdmFsaWRhIG51bC1zaWdubyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjUzMSBzcmMvc2Nhbi1ncmFtLmw6NTQxIHNyYy9zY2FuLWdyYW0ubDo1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgYWZ0ZXIgXFwtZXNjYXBlOiAlcyIKK21zZ3N0ciAibWFsdmFsaWRhIG51bWVybyBwb3N0IFxcLWVza2FwbzogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgXFwtZXNjYXBlOiAlcyIKK21zZ3N0ciAibWFsdmFsaWRhIHNpZ25vIHBvc3QgXFwtZXNrYXBvOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjkwMQorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzIGF0IGVuZCBvZiBmaWxlIgorbXNnc3RyICJtYW5rYXMgJXMgxIllIGxhIGRvc2llcmZpbm8iCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo5MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyBhdCBlbmQgb2YgbGluZSIKK21zZ3N0ciAibWFua2FzICVzIMSJZSBsYSBsaW5pZmlubyIKKworIzogc3JjL3NjYW4tc2tlbC5sOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmNsb3NlZCAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iCittc2dzdHIgIm5lZmVybWl0YSBpbnN0cnVrY2lvICVzIGVuIHNrZWxldG8iCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIGZldyBhcmd1bWVudHMgZm9yICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAidHJvIG1hbG11bHRhaiBhcmd1bWVudG9qIHBvciBpbnN0cnVrY2lvICVzIGVuIHNrZWxldG8iCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGZvciAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iCittc2dzdHIgInRybyBtdWx0YWogYXJndW1lbnRvaiBwb3IgaW5zdHJ1a2NpbyAlcyBlbiBza2VsZXRvIgorCisjOiBzcmMvc3ltbGlzdC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICQgdmFsdWU6ICQlZCIKK21zZ3N0ciAibWFsdmFsaWRhIHZhbG9ybyAkOiAkJWQiCisKKyM6IHNyYy9zeW10YWIuYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJQT1NJWCBZYWNjIGZvcmJpZHMgZGFzaGVzIGluIHN5bWJvbCBuYW1lczogJXMiCittc2dzdHIgIlBPU0lYIFlhY2MgbWFscGVybWVzYXMgc3RyZWtvam4gZW4gc2ltYm9sLW5vbW9qOiAlcyIKKworIzogc3JjL3N5bXRhYi5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IHN5bWJvbHMgaW4gaW5wdXQgZ3JhbW1hciAobGltaXQgaXMgJWQpIgorbXNnc3RyICJ0cm8gbXVsdGFqIHNpbWJvbG9qbiBlbiBlbmlnYSBncmFtYXRpa28gKGxpbW8gZXN0YXMgJWQpIgorCisjOiBzcmMvc3ltdGFiLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICJyZWRla2xhcm8gZGUgJXMgcG9yICVzIgorCisjOiBzcmMvc3ltdGFiLmM6MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlZGVjbGFyYXRpb24gZm9yIDwlcz4iCittc2dzdHIgInJlZGVrbGFybyBkZSAlcyBwb3IgPCVzPiIKKworIzogc3JjL3N5bXRhYi5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgcmVkZWZpbmVkIgorbXNnc3RyICJzaW1ib2xvICVzIGVzdGFzIHJlZGlmaW5pdGEiCisKKyM6IHNyYy9zeW10YWIuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHJlZGVjbGFyZWQiCittc2dzdHIgInNpbWJvbG8gJXMgZXN0YXMgcmVkZWtsYXJpdGEiCisKKyM6IHNyYy9zeW10YWIuYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWZpbmluZyB1c2VyIHRva2VuIG51bWJlciBvZiAlcyIKK21zZ3N0ciAicmVkaWZpbmFkbyBkZSB1emFudC3EtWV0b25hIG5vbWJybyBkYSAlcyIKKworIzogc3JjL3N5bXRhYi5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgaXMgdXNlZCwgYnV0IGlzIG5vdCBkZWZpbmVkIGFzIGEgdG9rZW4gYW5kIGhhcyBubyBydWxlcyIKK21zZ3N0ciAiIgorInNpbWJvbG8gJXMgZXN0YXMgdXphdGEsIHNlZCBuZSBlc3RhcyBkaWZpbml0YSBraWVsIMS1ZXRvbm9uIGthaiBoYXZhcyBuZW5pdW4gIgorInJlZ3Vsb24iCisKKyM6IHNyYy9zeW10YWIuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHVzZWQgbW9yZSB0aGFuIG9uY2UgYXMgYSBsaXRlcmFsIHN0cmluZyIKK21zZ3N0ciAic2ltYm9sbyAlcyBlc3RhcyB1emF0YSBwbGkgb2wgdW51Zm9qZSBraWVsIGxpdGVyYW4gxIllbm9uIgorCisjOiBzcmMvc3ltdGFiLmM6NDE4CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyBnaXZlbiBtb3JlIHRoYW4gb25lIGxpdGVyYWwgc3RyaW5nIgorbXNnc3RyICJhbCBsYSBzaW1ib2xvICVzIGVzdGlzIGRvbmF0YSBwbGkgb2wgdW51IGxpdGVyYSDEiWVubyIKKworIzogc3JjL3N5bXRhYi5jOjUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2VyIHRva2VuIG51bWJlciAlZCByZWRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAicmVkZWtsYXJvIGRlIHV6YW50LcS1ZXRvbm8gbnVtZXJvICVkIHBvciAlcyIKKworIzogc3JjL3N5bXRhYi5jOjUzOQorIywgYy1mb3JtYXQKK21zZ2lkICJwcmV2aW91cyBkZWNsYXJhdGlvbiBmb3IgJXMiCittc2dzdHIgImFudGHFrWEgZGVrbGFybyBwb3IgJXMiCisKKyM6IHNyYy9zeW10YWIuYzo5MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHN0YXJ0IHN5bWJvbCAlcyBpcyB1bmRlZmluZWQiCittc2dzdHIgImxhIGVraWdhIHNpbWJvbG8gJXMgZXN0YXMgbmVkaWZpbml0YSIKKworIzogc3JjL3N5bXRhYi5jOjkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgc3RhcnQgc3ltYm9sICVzIGlzIGEgdG9rZW4iCittc2dzdHIgImxhIGVraWdhIHNpbWJvbG8gJXMgZXN0YXMgxLVldG9ubyIKKworIzogc3JjL3N5bXRhYi5jOjkzNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlJWRlc3RydWN0b3IiCittc2dzdHIgInJlZGVrbGFybyBwb3IgYXByaW9yZSBtYXJraXRhICclJWRlc3RydWN0b3InIgorCisjOiBzcmMvc3ltdGFiLmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnbGVzcyAlJWRlc3RydWN0b3IiCittc2dzdHIgInJlZGVrbGFybyBwb3IgYXByaW9yZSBzZW5tYXJrYSAnJSVkZXN0cnVjdG9yJyIKKworIzogc3JjL3N5bXRhYi5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlJXByaW50ZXIiCittc2dzdHIgInJlZGVrbGFybyBwb3IgYXByaW9yZSBtYXJraXRhICclJXByaW50ZXInIgorCisjOiBzcmMvc3ltdGFiLmM6OTgwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnbGVzcyAlJXByaW50ZXIiCittc2dzdHIgInJlZGVrbGFybyBwb3IgYXByaW9yZSBzZW5tYXJrYSAnJSVwcmludGVyJyIKKworIzogZGpncHAvc3VicGlwZS5jOjYzIGRqZ3BwL3N1YnBpcGUuYzoyODYgZGpncHAvc3VicGlwZS5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdmluZyBvZiAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiZm9yaWdvIGRlICclcycgZmlhc2tpcyIKKworIzogZGpncHAvc3VicGlwZS5jOjg1IGRqZ3BwL3N1YnBpcGUuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGlvbiBvZiBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAia3JlYWRvIGRlIHByb3Zpem9yYSBkb3NpZXJvIGZpYXNraXMiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAic2F2aW5nIHN0ZGluIGZhaWxlZCIKK21zZ3N0ciAia29uc2VydmFkbyBkZSBub3JtLWVuaWdvIGZpYXNraXMiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAic2F2aW5nIHN0ZG91dCBmYWlsZWQiCittc2dzdHIgImtvbnNlcnZhZG8gZGUgbm9ybS1lbGlnbyBmaWFza2lzIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTUzIGRqZ3BwL3N1YnBpcGUuYzoxOTcgZGpncHAvc3VicGlwZS5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nIG9mIHRtcGZpbGUgZmFpbGVkIgorbXNnc3RyICJtYWxmZXJtbyBkZSB0bXBmaWxlIGZpYXNraXMiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgYmlzb24ncyBzdGRvdXQgdG8gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAicmVkaXJla3RhZG8gZGUgbGEgbm9ybS1lbGlnbyBkZSBiaXNvbiBhbCBsYSBwcm92aXpvcmEgZG9zaWVybyBmaWFza2lzICIKKworIzogZGpncHAvc3VicGlwZS5jOjIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBtNCdzIHN0ZGluIGZyb20gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAicmVkaXJla3RhZG8gZGUgbGEgbm9ybS1lbmlnbyBkZSBtNCBkZSBsYSBwcm92aXpvcmEgZG9zaWVybyBmaWFza2lzIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZW5pbmcgb2YgYSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIm1hbGZlcm1vIGRlIHByb3Zpem9yYSBkb3NpZXJvIGZpYXNraXMiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgbTQncyBzdGRvdXQgdG8gYSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgInJlZGlyZWt0YWRvIGRlIGxhIG5vcm0tZWxpZ28gZGUgbTQgYWwgcHJvdml6b3JhIGRvc2llcm8gZmlhc2tpcyIKKworIzogZGpncHAvc3VicGlwZS5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gJyVzJyBpbnRlcnJ1cHRlZCIKK21zZ3N0ciAibGEgaGVscGEgcHJvZ3JhbW8gJyVzJyDEiWVzaXMiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAic3Vic2lkaWFyeSBwcm9ncmFtICclcycgbm90IGZvdW5kIgorbXNnc3RyICJsYSBoZWxwYSBwcm9ncmFtbyAnJXMnIG5lIGVzdGlzIHRyb3ZhdGEiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgYmlzb24ncyBzdGRpbiBmcm9tIHRoZSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgInJlZGlyZWt0YWRvIGRlIGxhIG5vcm0tZW5pZ28gZGUgYmlzb24gYWwgcHJvdml6b3JhIGRvc2llcm8gZmlhc2tpcyIKKworIzogbGliL2FyZ21hdGNoLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgJXMgZm9yICVzIgorbXNnc3RyICJtYWx2YWxpZGEgYXJndW1lbnRvICVzIHBvciAlcyIKKworIzogbGliL2FyZ21hdGNoLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImFtYmlndW91cyBhcmd1bWVudCAlcyBmb3IgJXMiCittc2dzdHIgInBsdXJzZW5jYSBhcmd1bWVudG8gJXMgcG9yICVzIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxNTMKK21zZ2lkICJWYWxpZCBhcmd1bWVudHMgYXJlOiIKK21zZ3N0ciAiVmFsaWRhaiBhcmd1bWVudG9qIGVzdGFzOiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfYWxsb2NzLCAldSBmcmVlZCAoJS4yZiUlKS5cbiIKK21zZ3N0ciAiJXUgYml0c2V0X2FsbG9jcywgJXUgbGliZXJpZ2l0YWogKCUuMmYlJSkuXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3NldHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorbXNnc3RyICIldSBiaXRzZXRfc2V0cywgJXUga2HFnW1lbW9yaWdpdGFqICglLjJmJSUpXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3Jlc2V0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF9yZXNldHMsICV1IGthxZ1tZW1vcmlnaXRhaiAoJS4yZiUlKVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF90ZXN0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF90ZXN0cywgJXUga2HFnW1lbW9yaWdpdGFqICglLjJmJSUpXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X2xpc3RzXG4iCittc2dzdHIgIiV1IGJpdHNldF9saXN0c1xuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTkyCittc2dpZCAiY291bnQgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICJoaXN0b2dyYW1vIHByaSBrYWxrdWxvLXByb3Rva29sYWRvXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTUKK21zZ2lkICJzaXplIGxvZyBoaXN0b2dyYW1cbiIKK21zZ3N0ciAiaGlzdG9ncmFtbyBwcmkgZ3JhbmRlY28tcHJvdG9rb2xhZG9cbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5OAorbXNnaWQgImRlbnNpdHkgaGlzdG9ncmFtXG4iCittc2dzdHIgImhpc3RvZ3JhbW8gcHJpIGRlbnNvXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJpdHNldCBzdGF0aXN0aWNzOlxuIgorIlxuIgorbXNnc3RyICIiCisiU3RhdGlzdGlrb2ogYml0c2V0OlxuIgorIlxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkFjY3VtdWxhdGVkIHJ1bnMgPSAldVxuIgorbXNnc3RyICJBa3VtdWxpdGFqIHJ1bG9qID0gJXVcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI1OSBsaWIvYml0c2V0X3N0YXRzLmM6MjY0Cittc2dpZCAiY2Fubm90IHJlYWQgc3RhdHMgZmlsZSIKK21zZ3N0ciAibmUgZWJsYXMgbGVnaSBzdGF0aXN0aWthbiBkb3NpZXJvbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgc3RhdHMgZmlsZSBzaXplXG4iCittc2dzdHIgIm1hbMSddXN0YSBncmFuZG8gZGUgc3RhdGlzdGlrYSBkb3NpZXJvXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyODcgbGliL2JpdHNldF9zdGF0cy5jOjI4OQorbXNnaWQgImNhbm5vdCB3cml0ZSBzdGF0cyBmaWxlIgorbXNnc3RyICJOZSBlYmxhcyBza3JpYmkgc3RhdGlzdGlrYW4gZG9zaWVyb24iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyOTIKK21zZ2lkICJjYW5ub3Qgb3BlbiBzdGF0cyBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJuZSBlYmxhcyBtYWxmZXJtaSBzdGF0aXN0aWthbiBkb3NpZXJvbiBwb3Igc2tyaWJhZG8iCisKKyM6IGxpYi9jbG9zZW91dC5jOjExMgorbXNnaWQgIndyaXRlIGVycm9yIgorbXNnc3RyICJza3JpYmEgZXJhcm8iCisKKyM6IGxpYi9lcnJvci5jOjE4OAorbXNnaWQgIlVua25vd24gc3lzdGVtIGVycm9yIgorbXNnc3RyICJOZWtvbmF0YSBzaXN0ZW0tZXJhcm8iCisKKyM6IGxpYi9nZXRvcHQuYzo1NDcgbGliL2dldG9wdC5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICclcycgaXMgYW1iaWd1b3VzOyBwb3NzaWJpbGl0aWVzOiIKK21zZ3N0ciAiJXM6IG1vZGlmaWxvICclcycgZXN0YXMgcGx1cnNlbmNhOyBlYmxlY29qOiIKKworIzogbGliL2dldG9wdC5jOjYyNCBsaWIvZ2V0b3B0LmM6NjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy0tJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IG1vZGlmaWxvICctLSVzJyBuZSBwZXJtZXNhcyBhcmd1bWVudG9uXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo2MzcgbGliL2dldG9wdC5jOjY0MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICclYyVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBtb2RpZmlsbyAnJWMlcycgbmUgcGVybWVzYXMgYXJndW1lbnRvblxuIgorCisjOiBsaWIvZ2V0b3B0LmM6Njg1IGxpYi9nZXRvcHQuYzo3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLS0lcycgcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IG1vZGlmaWxvICctLSVzJyBwb3N0dWxhcyBhcmd1bWVudG9uXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo3NDIgbGliL2dldG9wdC5jOjc0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiAnLS0lcydcbiIKK21zZ3N0ciAiJXM6IG5lcmVrb25pdGEgbW9kaWZpbG8gJy0tJXMnXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo3NTMgbGliL2dldG9wdC5jOjc1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiAnJWMlcydcbiIKK21zZ3N0ciAiJXM6IG5lcmVrb25pdGEgbW9kaWZpbG8gJyVjJXMnXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo4MDUgbGliL2dldG9wdC5jOjgwOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBvcHRpb24gLS0gJyVjJ1xuIgorbXNnc3RyICIlczogbWFsdmFsaWRhIG1vZGlmaWxvIC0tICclYydcbiIKKworIzogbGliL2dldG9wdC5jOjg2MSBsaWIvZ2V0b3B0LmM6ODc4IGxpYi9nZXRvcHQuYzoxMDg4IGxpYi9nZXRvcHQuYzoxMTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgLS0gJyVjJ1xuIgorbXNnc3RyICIlczogbGEgbW9kaWZpbG8gcG9zdHVsYXMgYXJndW1lbnRvbiAtLSAnJWMnXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo5MzQgbGliL2dldG9wdC5jOjk1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiVzOiBtb2RpZmlsbyAnLVcgJXMnIGVzdGFzIHBsdXJzZW5jYVxuIgorCisjOiBsaWIvZ2V0b3B0LmM6OTc0IGxpYi9nZXRvcHQuYzo5OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLVcgJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IG1vZGlmaWxvICctVyAlcycgbmUgcGVybWVzYXMgYXJndW1lbnRvblxuIgorCisjOiBsaWIvZ2V0b3B0LmM6MTAxMyBsaWIvZ2V0b3B0LmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IG1vZGlmaWxvICctVyAlcycgcG9zdHVsYXMgYXJndW1lbnRvblxuIgorCisjOiBsaWIvb2JzdGFjay5jOjQxMyBsaWIvb2JzdGFjay5jOjQxNSBsaWIveGFsbG9jLWRpZS5jOjM0Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAibWVtb3JvIGVzdGFzIHBsZW5pZ2l0YSIKKworIzogbGliL3NwYXduLXBpcGUuYzoxNDAgbGliL3NwYXduLXBpcGUuYzoxNDMgbGliL3NwYXduLXBpcGUuYzoyNjQKKyM6IGxpYi9zcGF3bi1waXBlLmM6MjY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZSIKK21zZ3N0ciAibmUgZWJsYXMga3JlaSBkdWt0b24iCisKKyM6IGxpYi9zcGF3bi1waXBlLmM6MjM0IGxpYi9zcGF3bi1waXBlLmM6MzQ4IGxpYi93YWl0LXByb2Nlc3MuYzoyODIKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyBmYWlsZWQiCittc2dzdHIgIiVzIHN1YnByb2Nlem8gZmlhc2tpcyIKKworIy4gVFJBTlNMQVRPUlM6CisjLiBHZXQgdHJhbnNsYXRpb25zIGZvciBvcGVuIGFuZCBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrcy4KKyMuIFRoZSBtZXNzYWdlIGNhdGFsb2cgc2hvdWxkIHRyYW5zbGF0ZSAiYCIgdG8gYSBsZWZ0CisjLiBxdW90YXRpb24gbWFyayBzdWl0YWJsZSBmb3IgdGhlIGxvY2FsZSwgYW5kIHNpbWlsYXJseSBmb3IKKyMuICInIi4gIEZvciBleGFtcGxlLCBhIEZyZW5jaCBVbmljb2RlIGxvY2FsIHNob3VsZCB0cmFuc2xhdGUKKyMuIHRoZXNlIHRvIFUrMDBBQiAoTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUKKyMuIFFVT1RBVElPTiBNQVJLKSwgYW5kIFUrMDBCQiAoUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFCisjLiBRVU9UQVRJT04gTUFSSyksIHJlc3BlY3RpdmVseS4KKyMuCisjLiBJZiB0aGUgY2F0YWxvZyBoYXMgbm8gdHJhbnNsYXRpb24sIHdlIHdpbGwgdHJ5IHRvCisjLiB1c2UgVW5pY29kZSBVKzIwMTggKExFRlQgU0lOR0xFIFFVT1RBVElPTiBNQVJLKSBhbmQKKyMuIFVuaWNvZGUgVSsyMDE5IChSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspLiAgSWYgdGhlCisjLiBjdXJyZW50IGxvY2FsZSBpcyBub3QgVW5pY29kZSwgbG9jYWxlX3F1b3Rpbmdfc3R5bGUKKyMuIHdpbGwgcXVvdGUgJ2xpa2UgdGhpcycsIGFuZCBjbG9jYWxlX3F1b3Rpbmdfc3R5bGUgd2lsbAorIy4gcXVvdGUgImxpa2UgdGhpcyIuICBZb3Ugc2hvdWxkIGFsd2F5cyBpbmNsdWRlIHRyYW5zbGF0aW9ucworIy4gZm9yICJgIiBhbmQgIiciIGV2ZW4gaWYgVSsyMDE4IGFuZCBVKzIwMTkgYXJlIGFwcHJvcHJpYXRlCisjLiBmb3IgeW91ciBsb2NhbGUuCisjLgorIy4gSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBwdXQgaGVyZSwgcGxlYXNlIHNlZQorIy4gPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUXVvdGF0aW9uX21hcmtzX2luX290aGVyX2xhbmd1YWdlcz4KKyMuIGFuZCB1c2UgZ2x5cGhzIHN1aXRhYmxlIGZvciB5b3VyIGxhbmd1YWdlLgorIzogbGliL3F1b3RlYXJnLmM6MzEyCittc2dpZCAiYCIKK21zZ3N0ciAi4oCYIgorCisjOiBsaWIvcXVvdGVhcmcuYzozMTMKK21zZ2lkICInIgorbXNnc3RyICLigJkiCisKKyM6IGxpYi90aW1ldmFyLmM6NDc1Cittc2dpZCAiIgorIlxuIgorIkV4ZWN1dGlvbiB0aW1lcyAoc2Vjb25kcylcbiIKK21zZ3N0ciAiIgorIlxuIgorIlRlbXBvaiBkZSBwbGVudW1hZG8gKHNla3VuZG9qKVxuIgorCisjOiBsaWIvdGltZXZhci5jOjUyNQorbXNnaWQgIiBUT1RBTCAgICAgICAgICAgICAgICAgOiIKK21zZ3N0ciAiIFRPVEFMTyAgICAgICAgICAgICAgICA6IgorCisjOiBsaWIvdGltZXZhci5jOjU2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lIGluICVzOiAlbGQuJTA2bGQgKCVsZCUlKVxuIgorbXNnc3RyICJ0ZW1wbyBlbiAlczogJWxkLiUwNmxkICglbGQlJSlcbiIKKworIzogbGliL3czMnNwYXduLmg6NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiX29wZW5fb3NmaGFuZGxlIGZhaWxlZCIKK21zZ3N0ciAiX29wZW5fb3NmaGFuZGxlIGZpYXNraXMiCisKKyM6IGxpYi93MzJzcGF3bi5oOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXN0b3JlIGZkICVkOiBkdXAyIGZhaWxlZCIKK21zZ3N0ciAibmUgZWJsYXMgcmVzdGFyaWdpIGZkICVkOiBkdXAyIGZpYXNraXMiCisKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzoyMjMgbGliL3dhaXQtcHJvY2Vzcy5jOjI1NSBsaWIvd2FpdC1wcm9jZXNzLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MiCittc2dzdHIgInN1YnByb2Nlem8gJXMiCisKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzoyNzQgbGliL3dhaXQtcHJvY2Vzcy5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdWJwcm9jZXNzIGdvdCBmYXRhbCBzaWduYWwgJWQiCittc2dzdHIgInN1YnByb2Nlem8gJXMgcmljZXZpcyBuZXJpcGFyZWJsYW4gc2lnbmFsb24gJWQiCisKKyN+IG1zZ2lkICJzdGF0ZSAlZCIKKyN+IG1zZ3N0ciAic3RhdG8gJWQiCisKKyN+IG1zZ2lkICJzdHJheSAnQCciCisjfiBtc2dzdHIgInBlcmRpdGEgJ0AnIgorCisjfiBtc2dpZCAiIgorI34gInVuZGVmaW5lZCAlJWRlZmluZSB2YXJpYWJsZSBgJXMnIHBhc3NlZCB0byBtdXNjbGVfcGVyY2VudF9kZWZpbmVfZ2V0X2xvYyIKKyN+IG1zZ3N0ciAiIgorI34gIm5lZGlmaW5pdGEgJyUlZGVmaW5lJy12YXJpYWJsbyAnJXMnIGVzdGlzIHBhc2F0YSBhbCAiCisjfiAibXVzY2xlX3BlcmNlbnRfZGVmaW5lX2dldF9sb2MiCisKKyN+IG1zZ2lkICIiCisjfiAidW5kZWZpbmVkICUlZGVmaW5lIHZhcmlhYmxlIGAlcycgcGFzc2VkIHRvICIKKyN+ICJtdXNjbGVfcGVyY2VudF9kZWZpbmVfZ2V0X3N5bmNsaW5lIgorI34gbXNnc3RyICIiCisjfiAibmVkaWZpbml0YSAnJSVkZWZpbmUnLXZhcmlhYmxvICclcycgZXN0aXMgcGFzYXRhIGFsICIKKyN+ICJtdXNjbGVfcGVyY2VudF9kZWZpbmVfZ2V0X3N5bmNsaW5lIgorCisjfiBtc2dpZCAiIgorI34gInVuZGVmaW5lZCAlJWRlZmluZSB2YXJpYWJsZSBgJXMnIHBhc3NlZCB0byBtdXNjbGVfcGVyY2VudF9kZWZpbmVfZmxhZ19pZiIKKyN+IG1zZ3N0ciAiIgorI34gIm5lZGlmaW5pdGEgJyUlZGVmaW5lJy12YXJpYWJsbyAnJXMnIGVzdGlzIHBhc2F0YSBhbCAiCisjfiAibXVzY2xlX3BlcmNlbnRfZGVmaW5lX2ZsYWdfaWYiCisKKyN+IG1zZ2lkICIiCisjfiAidW5kZWZpbmVkICUlZGVmaW5lIHZhcmlhYmxlIGAlcycgcGFzc2VkIHRvICIKKyN+ICJtdXNjbGVfcGVyY2VudF9kZWZpbmVfY2hlY2tfdmFsdWVzIgorI34gbXNnc3RyICIiCisjfiAibmVkaWZpbml0YSAnJSVkZWZpbmUnLXZhcmlhYmxvICclcycgZXN0aXMgcGFzYXRhIGFsICIKKyN+ICJtdXNjbGVfcGVyY2VudF9kZWZpbmVfY2hlY2tfdmFsdWVzIgpkaWZmIC0tZ2l0IGEvcG8vZXMuZ21vIGIvcG8vZXMuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MTZmMWQKLS0tIC9kZXYvbnVsbAorKysgYi9wby9lcy5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vZXMucG8gYi9wby9lcy5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzM2Y2UwCi0tLSAvZGV2L251bGwKKysrIGIvcG8vZXMucG8KQEAgLTAsMCArMSwxNTUwIEBACisjIE1lbnNhamVzIGVuIGVzcGHxb2wgcGFyYSBHTlUgQmlzb24uCisjIENvcHlyaWdodCAoQykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgTmljb2zhcyBHYXJj7WEtUGVkcmFqYXMgPG5nYXJjaWEtcGVkcmFqYXNAYWNtLm9yZz4sIDE5OTguCisjCisjIENvcnJlZ2lkbyBwb3I6CisjCisjIGNsbCAtIENhcmxvcyBMaW5hcmVzIEzzcGV6ICAgICAgICBjbGluYXJlc0BhY20ub3JnCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGluYXJlc0BkZWxpY2lhcy5kaWEuZmkudXBtLmVzCisjCisjIE5vdGFzOgorIworIyAxLiBOaWNvbOFzLCBlbiBhbGd1bmFzIG9jYXNpb25lcyBub3RhcuFzIHF1ZSBhbGd1bm9zIGBtc2dzdHInIG5vIGVzdOFuCisjIGluZGVudGFkb3MgY29tbyBsb3MgYG1zZ2lkJy4gTm8gdGUgcHJlb2N1cGVzLCBlc28gZXMgcG9ycXVlIHlvIHV0aWxpem8KKyMgZWwgYHBvLW1vZGUnIGRlIEVtYWNzLCAuLi4gyWwgZXMgZWwgcmVzcG9uc2FibGUgZGUgZXNhcyBpbmRlbnRhY2lvbmVzCisjIGRlbCBgbXNnc3RyJyA6KQorIworIyAyLiBUb2RvcyBsb3MgY29tZW50YXJpb3MgcXVlIGNvbnRlbmdhbiAiRHVkYToiIGRlYmllcmFuIHJldmlzYXJzZS4KKyMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW4gbWkgb3BpbmnzbiBoYXMgaGVjaG8gdW4gZXhjZWxlbnRlIHRyYWJham8geSB0ZSBhbmltbyBhIHF1ZSBzaWdhcworIyBtYW50ZW5pZW5kbyBlc3RhIHRyYWR1Y2Np824geSBhIHF1ZSBsbyBpbnRlbnRlcyBjb24gb3RyYXMuCisjCisjICihdGUgbG8gZGljZSBlbCB07W8gcXVlIGhhIHRyYWR1Y2lkbyBlbCBwYXF1ZXRlIG3hcyBncmFuZGU6IDE0MDYKKyMgbWVuc2FqZXMgZW4gZWwgY2xpc3AhKQorIworIyAJCQkJCQkgICAgICBDYXJsb3MgTGluYXJlcworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogR05VIGJpc29uIDIuMlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBidWctYmlzb25AZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEyLTEyLTEyIDE2OjA5KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA2LTA2LTA1IDEzOjUxKzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IE5pY29s4XMgR2FyY+1hLVBlZHJhamFzIDxuZ2FyY2lhLXBlZHJhamFzQGFjbS5vcmc+XG4iCisiTGFuZ3VhZ2UtVGVhbTogU3BhbmlzaCA8ZXNAbGkub3JnPlxuIgorIkxhbmd1YWdlOiBlc1xuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTFcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4LWJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorCisjOiBzcmMvY29tcGxhaW4uYzoxMjAgc3JjL2NvbXBsYWluLmM6MTMxIHNyYy9jb21wbGFpbi5jOjE0MCBzcmMvY29tcGxhaW4uYzoxODgKKyM6IHNyYy9jb21wbGFpbi5jOjE5OAorbXNnaWQgIndhcm5pbmciCittc2dzdHIgImF2aXNvIgorCisjOiBzcmMvY29tcGxhaW4uYzoxNTEgc3JjL2NvbXBsYWluLmM6MTYwIHNyYy9jb21wbGFpbi5jOjE2NworIywgZnV6enkKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiRXJyb3IgZGUgRS9TIgorCisjIER1ZGE6IGRlc2Nvbm96Y28gY3XhbCBzZXLhIGVsIGNvbnZlbmlvIGVuIGxhIGxpc3RhIGRlIGNvcnJlbyBhCisjIHByb3Dzc2l0byBkZSAiZmF0YWwiLiBQb3IgZmF2b3IsIGNvbXBydWViYSBxdWUgImVycm9yIGdyYXZlIiBlcworIyBwcmVmZXJpZG8gcG9yIHRvZG9zIGxvcyBtaWVtYnJvcyBhICJlcnJvciBmYXRhbCIgLSBjbGwKKyMgdmVyZW1vcyBxdWUgZGljZSBsYSBtYXlvcu1hLCBjb21vIGhheSBvdHJvcyAyIHJldmlzb3JlcworIyBMYSB2ZXJkYWQgZXMgcXVlIGEgbWkgbG8gZGUgZXJyb3IgZmF0YWwgbWUgc3VlbmEgZmF0YWwKKyMgbmdwCisjCisjOiBzcmMvY29tcGxhaW4uYzoyMDggc3JjL2NvbXBsYWluLmM6MjE1CisjLCBmdXp6eQorbXNnaWQgImZhdGFsIGVycm9yIgorbXNnc3RyICJlcnJvciBncmF2ZTogIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgc2hpZnQiCittc2dzdHIgIiIKKyIgICAgRWwgY29uZmxpY3RvIGVudHJlIGxhIHJlZ2xhICVkIHkgZWwgdGVybWluYWwgJXMgc2UgcmVzdWVsdmUgY29tbyAiCisiZGVzcGxhemFtaWVudG8uIgorCisjOiBzcmMvY29uZmxpY3RzLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgcmVkdWNlIgorbXNnc3RyICIiCisiICAgIEVsIGNvbmZsaWN0byBlbnRyZSBsYSByZWdsYSAlZCB5IGVsIHRlcm1pbmFsICVzIHNlIHJlc3VlbHZlIGNvbW8gIgorInJlZHVjY2nzbi4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyBhbiBlcnJvciIKK21zZ3N0ciAiIgorIiAgICBFbCBjb25mbGljdG8gZW50cmUgbGEgcmVnbGEgJWQgeSBlbCB0ZXJtaW5hbCAlcyBzZSByZXN1ZWx2ZSBjb21vIHVuICIKKyJlcnJvci4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCBzaGlmdC9yZWR1Y2UsICVkIHJlZHVjZS9yZWR1Y2VcbiIKK21zZ3N0ciAiY29uZmxpY3RvczogJWQgZGVzcGxhemFtaWVudG8vcmVkdWNjafNuLCAlZCByZWR1Y2Np824vcmVkdWNjafNuXG4iCisKKyMgRGF0ZSBjdWVudGEgZGUgcXVlIGAlZCcgcHVlZGUgc2VyIGN1YWxxdWllciBu+m1lcm8gZGVjaW1hbC4gUG9kcu1hCisjIG9jdXJyaXIsIHBvciBsbyB0YW50bywgcXVlIHR1IG1lbnNhamUgZW4gZWplY3VjafNuIHNlIHZlYSBsdWVnbyBjb21vOgorIworIyAyMzg0NTc4OTI0Mzc4OSBkZXNwbGF6YW1pZW50by9yZWR1Y2Np824KKyMKKyMgKKFlc3RveSBleGFnZXJhbmRvISwgcG9yIHN1cHVlc3RvIDopCisjCisjIFRlIHN1Z2llcm8gcG9yIGxvIHRhbnRvIHF1ZSBh8WFkYXMgZWwgY2FzbyAocykgdGFsIHkgY29tbyBzZSBoYWNlIGVuCisjIGVzcGHxb2wgaGFiaXR1YWxtZW50ZS4KKyMgb2sKKyMgbmdwCisjCisjOiBzcmMvY29uZmxpY3RzLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgc2hpZnQvcmVkdWNlXG4iCittc2dzdHIgImNvbmZsaWN0b3M6ICVkIGRlc3BsYXphbWllbnRvKHMpL3JlZHVjY2nzbihvbmVzKVxuIgorCisjIERhdGUgY3VlbnRhIGRlIHF1ZSBgJWQnIHB1ZWRlIHNlciBjdWFscXVpZXIgbvptZXJvIGRlY2ltYWwuIFBvZHLtYQorIyBvY3VycmlyLCBwb3IgbG8gdGFudG8sIHF1ZSB0dSBtZW5zYWplIGVuIGVqZWN1Y2nzbiBzZSB2ZWEgbHVlZ28gY29tbzoKKyMKKyMgMjM4NDU3ODkyNDM3ODkgcmVkdWNjafNuL3JlZHVjY2nzbgorIworIyAooWVzdG95IGV4YWdlcmFuZG8hLCBwb3Igc3VwdWVzdG8gOikKKyMKKyMgVGUgc3VnaWVybyBwb3IgbG8gdGFudG8gcXVlIGHxYWRhcyBlbCBjYXNvIChzKSB0YWwgeSBjb21vIHNlIGhhY2UgZW4KKyMgZXNwYfFvbCBoYWJpdHVhbG1lbnRlLgorIworIyBvaworIyBuZ3AKKyM6IHNyYy9jb25mbGljdHMuYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCByZWR1Y2UvcmVkdWNlXG4iCittc2dzdHIgImNvbmZsaWN0b3M6ICVkIHJlZHVjY2nzbihvbmVzKS9yZWR1Y2Np824ob25lcylcbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdGF0ZSAlZCAiCittc2dzdHIgIkVzdGFkbyAlZCAiCisKKyM6IHNyYy9jb25mbGljdHMuYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSVleHBlY3QtcnIgYXBwbGllcyBvbmx5IHRvIEdMUiBwYXJzZXJzIgorbXNnc3RyICIlJWV4cGVjdC1yciBhZmVjdGEgc/NsbyBhIGxvcyBhbmFsaXphZG9yZXMgR0xSIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NjE2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICVkIHNoaWZ0L3JlZHVjZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiZXhwZWN0ZWQgJWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAiZXNwZXJhZG8gJWQgY29uZmxpY3RvIGRlc3BsYXphbWllbnRvL3JlZHVjY2nzbiIKK21zZ3N0clsxXSAiZXNwZXJhZG9zICVkIGNvbmZsaWN0b3MgZGVzcGxhemFtaWVudG8vcmVkdWNjafNuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICVkIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3QiCittc2dpZF9wbHVyYWwgImV4cGVjdGVkICVkIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3RzIgorbXNnc3RyWzBdICJlc3BlcmFkbyAlZCBjb25mbGljdG8gcmVkdWNjafNuL3JlZHVjY2nzbiIKK21zZ3N0clsxXSAiZXNwZXJhZG9zICVkIGNvbmZsaWN0b3MgcmVkdWNjafNuL3JlZHVjY2nzbiIKKworIzogc3JjL2ZpbGVzLmM6MTE0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IG9wZW4iCittc2dzdHIgIm5vIHNlIHB1ZWRlIGFicmlyIGVsIGZpY2hlcm8gYCVzJyIKKworIzogc3JjL2ZpbGVzLmM6MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImlucHV0L291dHB1dCBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBzcmMvZmlsZXMuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNsb3NlIGZpbGUiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGNlcnJhciBlbCBmaWNoZXJvIgorCisjOiBzcmMvZmlsZXMuYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gb3ZlcndyaXRlIHRoZSBpbnB1dCBmaWxlICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9maWxlcy5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdGluZyBvdXRwdXRzIHRvIGZpbGUgJXMiCittc2dzdHIgInNhbGlkYXMgZW4gY29uZmxpY3RvIGFsIGZpY2hlcm8gJXMiCisKKyM6IHNyYy9nZXRhcmdzLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeSBgJXMgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKK21zZ3N0ciAiUHJ1ZWJlIGAlcyAtLWhlbHAnIHBhcmEgbeFzIGluZm9ybWFjafNuLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgW09QVElPTl0uLi4gRklMRVxuIgorbXNnc3RyICJVdGlsaXphY2nzbjogJXMgW09QQ0nTTl0uLi4gRklDSEVST1xuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwMgorbXNnaWQgIiIKKyJHZW5lcmF0ZSBhIGRldGVybWluaXN0aWMgTFIgb3IgZ2VuZXJhbGl6ZWQgTFIgKEdMUikgcGFyc2VyIGVtcGxveWluZ1xuIgorIkxBTFIoMSksIElFTFIoMSksIG9yIGNhbm9uaWNhbCBMUigxKSBwYXJzZXIgdGFibGVzLiAgSUVMUigxKSBhbmRcbiIKKyJjYW5vbmljYWwgTFIoMSkgc3VwcG9ydCBpcyBleHBlcmltZW50YWwuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozMDkKK21zZ2lkICIiCisiTWFuZGF0b3J5IGFyZ3VtZW50cyB0byBsb25nIG9wdGlvbnMgYXJlIG1hbmRhdG9yeSBmb3Igc2hvcnQgb3B0aW9ucyB0b28uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozMTIKK21zZ2lkICJUaGUgc2FtZSBpcyB0cnVlIGZvciBvcHRpb25hbCBhcmd1bWVudHMuXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozMTYKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIk9wZXJhdGlvbiBtb2RlczpcbiIKKyIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCisiICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorIiAgICAgIC0tcHJpbnQtbG9jYWxlZGlyICAgICAgb3V0cHV0IGRpcmVjdG9yeSBjb250YWluaW5nIGxvY2FsZS1kZXBlbmRlbnQgIgorImRhdGFcbiIKKyIgICAgICAtLXByaW50LWRhdGFkaXIgICAgICAgIG91dHB1dCBkaXJlY3RvcnkgY29udGFpbmluZyBza2VsZXRvbnMgYW5kIFhTTFRcbiIKKyIgIC15LCAtLXlhY2MgICAgICAgICAgICAgICAgIGVtdWxhdGUgUE9TSVggWWFjY1xuIgorIiAgLVcsIC0td2FybmluZ3NbPUNBVEVHT1JZXSAgcmVwb3J0IHRoZSB3YXJuaW5ncyBmYWxsaW5nIGluIENBVEVHT1JZXG4iCisiICAtZiwgLS1mZWF0dXJlWz1GRUFUVVJFXSAgICBhY3RpdmF0ZSBtaXNjZWxsYW5lb3VzIGZlYXR1cmVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJNb2RvcyBkZSBvcGVyYWNp8246XG4iCisiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICAgICBtdWVzdHJhIGVzdGEgYXl1ZGEgeSB0ZXJtaW5hXG4iCisiICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICAgICBpbmZvcm1hIGRlIGxhIHZlcnNp824geSB0ZXJtaW5hXG4iCisiICAgICAgLS1wcmludC1sb2NhbGVkaXIgICAgICAgICBpbmZvcm1hIGRlbCBkaXJlY3RvcmlvIHF1ZSBjb250aWVuZSAiCisiaW5mb3JtYWNp824gXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRpZW50ZSBkZSBsYSBjb25maWd1cmFjafNuIGxvY2FsXG4iCisiICAteSwgLS15YWNjICAgICAgICAgICAgICAgICAgICBlbXVsYSBQT1NJWCB5YWNjXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFyc2VyOlxuIgorIiAgLUwsIC0tbGFuZ3VhZ2U9TEFOR1VBR0UgICAgICAgICAgc3BlY2lmeSB0aGUgb3V0cHV0IHByb2dyYW1taW5nIGxhbmd1YWdlXG4iCisiICAtUywgLS1za2VsZXRvbj1GSUxFICAgICAgICAgICAgICBzcGVjaWZ5IHRoZSBza2VsZXRvbiB0byB1c2VcbiIKKyIgIC10LCAtLWRlYnVnICAgICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnQgdGhlIHBhcnNlciBmb3IgZGVidWdnaW5nXG4iCisiICAgICAgLS1sb2NhdGlvbnMgICAgICAgICAgICAgICAgICBlbmFibGUgbG9jYXRpb24gc3VwcG9ydFxuIgorIiAgLUQsIC0tZGVmaW5lPU5BTUVbPVZBTFVFXSAgICAgICAgc2ltaWxhciB0byAnJWRlZmluZSBOQU1FIFwiVkFMVUVcIidcbiIKKyIgIC1GLCAtLWZvcmNlLWRlZmluZT1OQU1FWz1WQUxVRV0gIG92ZXJyaWRlICclZGVmaW5lIE5BTUUgXCJWQUxVRVwiJ1xuIgorIiAgLXAsIC0tbmFtZS1wcmVmaXg9UFJFRklYICAgICAgICAgcHJlcGVuZCBQUkVGSVggdG8gdGhlIGV4dGVybmFsIHN5bWJvbHNcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQgYnkgJy1EYXBpLnByZWZpeD1QUkVGSVgnXG4iCisiICAtbCwgLS1uby1saW5lcyAgICAgICAgICAgICAgICAgICBkb24ndCBnZW5lcmF0ZSAnI2xpbmUnIGRpcmVjdGl2ZXNcbiIKKyIgIC1rLCAtLXRva2VuLXRhYmxlICAgICAgICAgICAgICAgIGluY2x1ZGUgYSB0YWJsZSBvZiB0b2tlbiBuYW1lc1xuIgorbXNnc3RyICIiCisiQW5hbGl6YWRvcjpcbiIKKyIgIC1TLCAtLXNrZWxldG9uPUZJQ0hFUk8gICAgIGVzcGVjaWZpY2EgZWwgc2tlbGV0b24gYSB1dGlsaXphclxuIgorIiAgLXQsIC0tZGVidWcgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGEgYWwgYW5hbGl6YWRvciBwYXJhIGRlcHVyYWNp825cbiIKKyIgICAgICAtLWxvY2F0aW9ucyAgICAgICAgICAgIGFiaWxpdGEgbGEgY29tcHV0YWNp824gZGUgbG9jYWxpemFjaW9uZXNcbiIKKyIgIC1wLCAtLW5hbWUtcHJlZml4PVBSRUZJSk8gIHByZWHxYWRlIFBSRUZJSk8gYSBsb3Mgc+1tYm9sb3MgZXh0ZXJub3NcbiIKKyIgIC1sLCAtLW5vLWxpbmVzICAgICAgICAgICAgIG5vIGdlbmVyYSBsYSBkaXJlY3RpdmEgYCNsaW5lJ1xuIgorIiAgLW4sIC0tbm8tcGFyc2VyICAgICAgICAgICAgc29sYW1lbnRlIGdlbmVyYSBsYXMgdGFibGFzXG4iCisiIC0taywgLS10b2tlbi10YWJsZSAgICAgICAgICBpbmNsdXllIHVuYSB0YWJsYSBkZSBub21icmVzIGRlIHRlcm1pbmFsZXNcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNDYKKyMsIGZ1enp5Cittc2dpZCAiIgorIk91dHB1dDpcbiIKKyIgICAgICAtLWRlZmluZXNbPUZJTEVdICAgICAgIGFsc28gcHJvZHVjZSBhIGhlYWRlciBmaWxlXG4iCisiICAtZCAgICAgICAgICAgICAgICAgICAgICAgICBsaWtld2lzZSBidXQgY2Fubm90IHNwZWNpZnkgRklMRSAoZm9yIFBPU0lYICIKKyJZYWNjKVxuIgorIiAgLXIsIC0tcmVwb3J0PVRISU5HUyAgICAgICAgYWxzbyBwcm9kdWNlIGRldGFpbHMgb24gdGhlIGF1dG9tYXRvblxuIgorIiAgICAgIC0tcmVwb3J0LWZpbGU9RklMRSAgICAgd3JpdGUgcmVwb3J0IHRvIEZJTEVcbiIKKyIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIHNhbWUgYXMgYC0tcmVwb3J0PXN0YXRlJ1xuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg9UFJFRklYICAgc3BlY2lmeSBhIFBSRUZJWCBmb3Igb3V0cHV0IGZpbGVzXG4iCisiICAtbywgLS1vdXRwdXQ9RklMRSAgICAgICAgICBsZWF2ZSBvdXRwdXQgdG8gRklMRVxuIgorIiAgLWcsIC0tZ3JhcGhbPUZJTEVdICAgICAgICAgYWxzbyBvdXRwdXQgYSBncmFwaCBvZiB0aGUgYXV0b21hdG9uXG4iCisiICAteCwgLS14bWxbPUZJTEVdICAgICAgICAgICBhbHNvIG91dHB1dCBhbiBYTUwgcmVwb3J0IG9mIHRoZSBhdXRvbWF0b25cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGUgWE1MIHNjaGVtYSBpcyBleHBlcmltZW50YWwpXG4iCittc2dzdHIgIiIKKyJTYWxpZGE6XG4iCisiICAtZCwgLS1kZWZpbmVzICAgICAgICAgICAgICB0YW1iaeluIHByb2R1Y2UgdW4gZmljaGVybyBkZSBjYWJlY2VyYVxuIgorIiAgLXIsIC0tcmVwb3J0PVRISU5HUyAgICAgICAgdGFtYmnpbiBwcm9kdWNlIGRldGFsbGVzIGRlbCBhdXRvbWF0b25cbiIKKyIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIHRhbWJp6W4gcHJvZHVjZSB1bmEgZXhwbGljYWNp824gZGVsIGF1dG9tYXRvblxuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg9UFJFRklKTyAgZXNwZWNpZmlhIGVsIFBSRUZJSk8gcGFyYSBsb3MgZmljaGVyb3MgZGUgIgorInNhbGlkYVxuIgorIiAgLW8sIC0tb3V0cHV0PUZJQ0hFUk8gICAgICAgYWxtYWNlbmEgbGEgc2FsaWRhIGVuIEZJQ0hFUk9cbiIKKyIgIC1nLCAtLWdyYXBoICAgICAgICAgICAgICAgIHRhbWJp6W4gcHJvZHVjZSB1bmEgZGVzY3JpcGNp824gZW4gVkNHIGRlbCAiCisiYXV0b21hdG9uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzYxCittc2dpZCAiIgorIldhcm5pbmcgY2F0ZWdvcmllcyBpbmNsdWRlOlxuIgorIiAgYG1pZHJ1bGUtdmFsdWVzJyAgdW5zZXQgb3IgdW51c2VkIG1pZHJ1bGUgdmFsdWVzXG4iCisiICBgeWFjYycgICAgICAgICAgICBpbmNvbXBhdGliaWxpdGllcyB3aXRoIFBPU0lYIFlhY2NcbiIKKyIgIGBjb25mbGljdHMtc3InICAgIFMvUiBjb25mbGljdHMgKGVuYWJsZWQgYnkgZGVmYXVsdClcbiIKKyIgIGBjb25mbGljdHMtcnInICAgIFIvUiBjb25mbGljdHMgKGVuYWJsZWQgYnkgZGVmYXVsdClcbiIKKyIgIGBkZXByZWNhdGVkJyAgICAgIG9ic29sZXRlIGNvbnN0cnVjdHNcbiIKKyIgIGBvdGhlcicgICAgICAgICAgIGFsbCBvdGhlciB3YXJuaW5ncyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGFsbCcgICAgICAgICAgICAgYWxsIHRoZSB3YXJuaW5nc1xuIgorIiAgYG5vLUNBVEVHT1JZJyAgICAgdHVybiBvZmYgd2FybmluZ3MgaW4gQ0FURUdPUllcbiIKKyIgIGBub25lJyAgICAgICAgICAgIHR1cm4gb2ZmIGFsbCB0aGUgd2FybmluZ3NcbiIKKyIgIGBlcnJvcicgICAgICAgICAgIHRyZWF0IHdhcm5pbmdzIGFzIGVycm9yc1xuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzc2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJUSElOR1MgaXMgYSBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCB3b3JkcyB0aGF0IGNhbiBpbmNsdWRlOlxuIgorIiAgYHN0YXRlJyAgICAgICAgZGVzY3JpYmUgdGhlIHN0YXRlc1xuIgorIiAgYGl0ZW1zZXQnICAgICAgY29tcGxldGUgdGhlIGNvcmUgaXRlbSBzZXRzIHdpdGggdGhlaXIgY2xvc3VyZVxuIgorIiAgYGxvb2thaGVhZCcgICAgZXhwbGljaXRseSBhc3NvY2lhdGUgbG9va2FoZWFkIHRva2VucyB0byBpdGVtc1xuIgorIiAgYHNvbHZlZCcgICAgICAgZGVzY3JpYmUgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cyBzb2x2aW5nXG4iCisiICBgYWxsJyAgICAgICAgICBpbmNsdWRlIGFsbCB0aGUgYWJvdmUgaW5mb3JtYXRpb25cbiIKKyIgIGBub25lJyAgICAgICAgIGRpc2FibGUgdGhlIHJlcG9ydFxuIgorbXNnc3RyICIiCisiVEhJTkdTIGVzIHVuYSBsaXN0YSBkZSBwYWxhYnJhcyBzZXBhcmFkYXMgcG9yIGNvbWFzIHF1ZSBwdWVkZSBpbmNsdWlyOlxuIgorIiAgYHN0YXRlJyAgICAgICAgZGVzY3JpYmUgbG9zIGVzdGFkb3NcbiIKKyIgIGBpdGVtc2V0JyAgICAgIGNvbXBsZXRhIGxvcyBjb25qdW50b3MgZGUg7XRlbXMgbvpjbGVvIGNvbiBzdXMgY2llcnJlc1xuIgorIiAgYGxvb2thaGVhZCcgICAgYXNvY2lhIGV4cGztY2l0YW1lbnRlIGxvb2thaGVhZHMgYSBsb3Mg7XRlbXNcbiIKKyIgIGBzb2x2ZWQnICAgICAgIGRlc2NyaWJlIGxhIHJlc29sdWNp824gZGUgbG9zIGNvbmZsaWN0b3MgZGVzcGxhemFtaWVudG8vIgorInJlZHVjY2nzblxuIgorIiAgYGFsbCcgICAgICAgICAgaW5jbHV5ZSB0b2RhIGxhIGluZm9ybWFjafNuIGFudGVyaW9yXG4iCisiICBgbm9uZScgICAgICAgICBkaXNhYmxlIHRoZSByZXBvcnRcbiIKKworIzogc3JjL2dldGFyZ3MuYzozODcKK21zZ2lkICIiCisiRkVBVFVSRSBpcyBhIGxpc3Qgb2YgY29tbWEgc2VwYXJhdGVkIHdvcmRzIHRoYXQgY2FuIGluY2x1ZGU6XG4iCisiICBgY2FyZXQnICAgICAgICBzaG93IGVycm9ycyB3aXRoIGNhcmV0c1xuIgorIiAgYGFsbCcgICAgICAgICAgYWxsIG9mIHRoZSBhYm92ZVxuIgorIiAgYG5vbmUnICAgICAgICAgZGlzYWJsZSBhbGwgb2YgdGhlIGFib3ZlXG4iCisiICAiCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozOTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlJlcG9ydCBidWdzIHRvIDwlcz4uXG4iCittc2dzdHIgIkluZm9ybWUgZGUgbG9zIGVycm9yZXMgYSA8YnVnLWJpc29uQGdudS5vcmc+LlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBob21lIHBhZ2U6IDwlcz4uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozOTcKK21zZ2lkICJHZW5lcmFsIGhlbHAgdXNpbmcgR05VIHNvZnR3YXJlOiA8aHR0cDovL3d3dy5nbnUub3JnL2dldGhlbHAvPi5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogUmVwbGFjZSBMQU5HX0NPREUgaW4gdGhpcyBVUkwgd2l0aCB5b3VyIGxhbmd1YWdlCisjLiBjb2RlIDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtL0xBTkdfQ09ERS5odG1sPiB0bworIy4gZm9ybSBvbmUgb2YgdGhlIFVSTHMgYXQgaHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS8uCisjLiBPdGhlcndpc2UsIHJlcGxhY2UgdGhlIGVudGlyZSBVUkwgd2l0aCB5b3VyIHRyYW5zbGF0aW9uIHRlYW0ncworIy4gZW1haWwgYWRkcmVzcy4KKyM6IHNyYy9nZXRhcmdzLmM6NDEwCittc2dpZCAiUmVwb3J0IHRyYW5zbGF0aW9uIGJ1Z3MgdG8gPGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vPi5cbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjQxMgorbXNnaWQgIkZvciBjb21wbGV0ZSBkb2N1bWVudGF0aW9uLCBydW46IGluZm8gYmlzb24uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmlzb24gKEdOVSBCaXNvbikgJXMiCittc2dzdHIgImJpc29uIChHTlUgYmlzb24pICVzIgorCisjOiBzcmMvZ2V0YXJncy5jOjQzMAorbXNnaWQgIldyaXR0ZW4gYnkgUm9iZXJ0IENvcmJldHQgYW5kIFJpY2hhcmQgU3RhbGxtYW4uXG4iCittc2dzdHIgIkVzY3JpdG8gcG9yIFJvYmVydCBDb3JiZXR0IHkgUmljaGFyZCBTdGFsbG1hbi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29weXJpZ2h0IChDKSAlZCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKK21zZ3N0ciAiQ29weXJpZ2h0IChDKSAlZCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MzcKK21zZ2lkICIiCisiVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk9cbiIKKyJ3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cbiIKK21zZ3N0ciAiIgorIkVzdG8gZXMgc29mdHdhcmUgbGlicmU7IG1pcmUgZWwgZnVlbnRlIHBhcmEgbGFzIGNvbmRpY2lvbmVzIGRlIGNvcGlhLiBObyAiCisiaGF5XG4iCisiTklOR1VOQSBnYXJhbnTtYTsgbmkgc2lxdWllcmEgcGFyYSBDT01FUkNJQUxJWkFDSdNOIG8gQURBUFRBQ0nTTiBQQVJBIFVOXG4iCisiVVNPIFBBUlRJQ1VMQVJcbiIKKworIzogc3JjL2dldGFyZ3MuYzo0NTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHNrZWxldG9uIGRlY2xhcmF0aW9ucyBhcmUgaW52YWxpZCIKK21zZ3N0ciAibfpsdGlwbGVzIGRlY2xhcmFjaW9uZXMgZGUgJXMiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBsYW5ndWFnZSIKK21zZ3N0ciAidmFsb3Igbm8gduFsaWRvOiAlcyIKKworIzogc3JjL2dldGFyZ3MuYzo0NzkKKyMsIGZ1enp5Cittc2dpZCAibXVsdGlwbGUgbGFuZ3VhZ2UgZGVjbGFyYXRpb25zIGFyZSBpbnZhbGlkIgorbXNnc3RyICJt+mx0aXBsZXMgZGVjbGFyYWNpb25lcyBkZSAlcyIKKworIzogc3JjL2dldGFyZ3MuYzo3NDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBtaXNzaW5nIG9wZXJhbmQiCittc2dzdHIgImZhbHRhIHVuIG9wZXJhbmRvIGRlc3B16XMgZGUgYCVzJyIKKworIzogc3JjL2dldGFyZ3MuYzo3NDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImV4dHJhIG9wZXJhbmQgJXMiCittc2dzdHIgIm9wZXJhbmRvIGV4dHJhIGAlcyciCisKKyM6IHNyYy9ncmFtLmM6MTEyCittc2dpZCAiZW1wdHkiCittc2dzdHIgInZhY+1vIgorCisjOiBzcmMvZ3JhbS5jOjIwMQorbXNnaWQgIkdyYW1tYXIiCittc2dzdHIgIkdyYW3hdGljYSIKKworIzogc3JjL2dyYXBodml6LmM6NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIi8vIEdlbmVyYXRlZCBieSAlcy5cbiIKKyIvLyBSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorIi8vIEhvbWUgcGFnZTogPCVzPi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvbG9jYXRpb24uYzo5MyBzcmMvc2Nhbi1ncmFtLmw6ODU5CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgbnVtYmVyIG92ZXJmbG93IgorbXNnc3RyICJkZXNib3JkYW1pZW50byBkZWwgbvptZXJvIGRlIGztbmVhIgorCisjOiBzcmMvbG9jYXRpb24uYzo5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb2x1bW4gbnVtYmVyIG92ZXJmbG93IgorbXNnc3RyICJkZXNib3JkYW1pZW50byBkZWwgbvptZXJvIGRlIGNvbHVtbmEiCisKKyM6IHNyYy9tYWluLmM6MTQ2CisjLCBmdXp6eQorbXNnaWQgInJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cyIKK21zZ3N0ciAibGEgcmVnbGEgbnVuY2Egc2UgcmVkdWpvIGRlYmlkbyBhIGxvcyBjb25mbGljdG9zIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJSVkZWZpbmUgdmFyaWFibGUgJXMgcmVkZWZpbmVkIgorbXNnc3RyICJyZWRlZmluaWRvIGVsIHPtbWJvbG8gJXMiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NDUzCittc2dpZCAicHJldmlvdXMgZGVmaW5pdGlvbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ5MCBzcmMvbXVzY2xlLXRhYi5jOjUwNCBzcmMvbXVzY2xlLXRhYi5jOjU1NgorIzogc3JjL211c2NsZS10YWIuYzo2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVuZGVmaW5lZCAlJWRlZmluZSB2YXJpYWJsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlJWRlZmluZSBCb29sZWFuIHZhcmlhYmxlICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjA5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICUlZGVmaW5lIHZhcmlhYmxlICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjYxMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYWNjZXB0ZWQgdmFsdWU6ICVzIgorbXNnc3RyICJ2YWxvciBubyB24WxpZG86ICVzIgorCisjOiBzcmMvcGFyc2UtZ3JhbS55Ojc0NworIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGlkZW50aWZpZXIgaW4gcGFyYW1ldGVyIGRlY2xhcmF0aW9uIgorbXNnc3RyICJmYWx0YSBlbCBpZGVudGlmaWNhZG9yIGVsIGxhIGRlY2xhcmFjafNuIGRlbCBwYXLhbWV0cm8iCisKKyM6IHNyYy9wcmludC5jOjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiB0eXBlICVkIGlzICVzXG4iCittc2dzdHIgIiBlbCB0aXBvICVkIGVzICVzXG4iCisKKyM6IHNyYy9wcmludC5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICJzaGlmdCwgYW5kIGdvIHRvIHN0YXRlICVkXG4iCittc2dzdHIgImRlc3BsYXphciBlIGlyIGFsIGVzdGFkbyAlZFxuIgorCisjOiBzcmMvcHJpbnQuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ28gdG8gc3RhdGUgJWRcbiIKK21zZ3N0ciAiaXIgYWwgZXN0YWRvICVkXG4iCisKKyM6IHNyYy9wcmludC5jOjIwMworbXNnaWQgImVycm9yIChub25hc3NvY2lhdGl2ZSlcbiIKK21zZ3N0ciAiZXJyb3IgKG5vIGFzb2NpYXRpdm8pXG4iCisKKyM6IHNyYy9wcmludC5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWR1Y2UgdXNpbmcgcnVsZSAlZCAoJXMpIgorbXNnc3RyICJyZWR1Y2UgdXNhbmRvIGxhIHJlZ2xhICVkICglcykiCisKKyM6IHNyYy9wcmludC5jOjIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJhY2NlcHQiCittc2dzdHIgImFjZXB0YXIiCisKKyM6IHNyYy9wcmludC5jOjI2NCBzcmMvcHJpbnQuYzozMzgKK21zZ2lkICIkZGVmYXVsdCIKK21zZ3N0ciAiJGRlZmF1bHQiCisKKyM6IHNyYy9wcmludC5jOjM3MyBzcmMvcHJpbnRfZ3JhcGguYzo3OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU3RhdGUgJWQiCittc2dzdHIgIkVzdGFkbyAlZCAiCisKKyM6IHNyYy9wcmludC5jOjQwOQorbXNnaWQgIlRlcm1pbmFscywgd2l0aCBydWxlcyB3aGVyZSB0aGV5IGFwcGVhciIKK21zZ3N0ciAiVGVybWluYWxlcyBjb24gbGFzIHJlZ2xhcyBkb25kZSBhcGFyZWNlbiIKKworIzogc3JjL3ByaW50LmM6NDM2Cittc2dpZCAiTm9udGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyIgorbXNnc3RyICJObyB0ZXJtaW5hbGVzIGNvbiBsYXMgcmVnbGFzIGRvbmRlIGFwYXJlY2VuIgorCisjOiBzcmMvcHJpbnQuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uIGxlZnQ6IgorbXNnc3RyICIgZW4gbGEgaXpxdWllcmRhOiIKKworIzogc3JjL3ByaW50LmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiByaWdodDoiCittc2dzdHIgIiBlbiBsYSBkZXJlY2hhOiIKKworIzogc3JjL3ByaW50LmM6NTEwCisjLCBmdXp6eQorbXNnaWQgIlJ1bGVzIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHMiCittc2dzdHIgImxhIHJlZ2xhIG51bmNhIHNlIHJlZHVqbyBkZWJpZG8gYSBsb3MgY29uZmxpY3RvcyIKKworIzogc3JjL3JlYWRlci5jOjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlICVzIGRlY2xhcmF0aW9ucyIKK21zZ3N0ciAibfpsdGlwbGVzIGRlY2xhcmFjaW9uZXMgZGUgJXMiCisKKyM6IHNyYy9yZWFkZXIuYzoxMzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInJlc3VsdCB0eXBlIGNsYXNoIG9uIG1lcmdlIGZ1bmN0aW9uICVzOiA8JXM+ICE9IDwlcz4iCittc2dzdHIgInRpcG8gcmVzdWx0YWRvIGluY29tcGF0aWJsZSBlbiBsYSBmdW5jafNuIGNvbWJpbmFkYSAlczogPCVzPiAhPSA8JXM+IgorCisjOiBzcmMvcmVhZGVyLmM6MTM5IHNyYy9zeW10YWIuYzoxNTYgc3JjL3N5bXRhYi5jOjE2NiBzcmMvc3ltdGFiLmM6OTM4CisjOiBzcmMvc3ltdGFiLmM6OTUzIHNyYy9zeW10YWIuYzo5Njggc3JjL3N5bXRhYi5jOjk4MworIywgZnV6enkKK21zZ2lkICJwcmV2aW91cyBkZWNsYXJhdGlvbiIKK21zZ3N0ciAicHJpbWVyYSBkZWNsYXJhY2nzbiIKKworIzogc3JjL3JlYWRlci5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGVkIHN5bWJvbCBuYW1lIGZvciAlcyBpZ25vcmVkIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzoyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVsZSBnaXZlbiBmb3IgJXMsIHdoaWNoIGlzIGEgdG9rZW4iCittc2dzdHIgInNlIGhhIGRhZG8gdW5hIHJlZ2xhIHBhcmEgJXMsIHF1ZSBlcyB1biB0ZXJtaW5hbCIKKworIzogc3JjL3JlYWRlci5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ0eXBlIGNsYXNoIG9uIGRlZmF1bHQgYWN0aW9uOiA8JXM+ICE9IDwlcz4iCittc2dzdHIgImluY29tcGF0aWJpbGlkYWQgZGUgdGlwb3MgZW4gbGEgYWNjafNuIHBvciBkZWZlY3RvOiA8JXM+ICE9IDwlcz4iCisKKyM6IHNyYy9yZWFkZXIuYzozMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgcnVsZSBmb3IgdHlwZWQgbm9udGVybWluYWwsIGFuZCBubyBhY3Rpb24iCittc2dzdHIgInJlZ2xhIHZhY+1hIHBhcmEgdW4gbm8gdGVybWluYWwgY29uIHRpcG8geSBubyBoYXkgbmluZ3VuYSBhY2Np824iCisKKyM6IHNyYy9yZWFkZXIuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW51c2VkIHZhbHVlOiAkJWQiCittc2dzdHIgInZhbG9yIG5vIHVzYWRvOiAkJWQiCisKKyM6IHNyYy9yZWFkZXIuYzozMzAKK21zZ2lkICJ1bnNldCB2YWx1ZTogJCQiCittc2dzdHIgInZhbG9yIG5vIGZpamFkbzogJCQiCisKKyM6IHNyYy9yZWFkZXIuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9rZW4gZm9yICUlcHJlYyBpcyBub3QgZGVmaW5lZDogJXMiCittc2dzdHIgIiIKKworIzogc3JjL3JlYWRlci5jOjQzMSBzcmMvcmVhZGVyLmM6NDQ1IHNyYy9yZWFkZXIuYzo0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSBvbmUgJXMgYWxsb3dlZCBwZXIgcnVsZSIKK21zZ3N0ciAic/NsbyBzZSBwZXJtaXRlIHVuICVzIHBvciByZWdsYSIKKworIzogc3JjL3JlYWRlci5jOjQ0MSBzcmMvcmVhZGVyLmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFmZmVjdHMgb25seSBHTFIgcGFyc2VycyIKK21zZ3N0ciAiJXMgYWZlY3RhIHPzbG8gYSBsb3MgYW5hbGl6YWRvcmVzIEdMUiIKKworIzogc3JjL3JlYWRlci5jOjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBtdXN0IGJlIGZvbGxvd2VkIGJ5IHBvc2l0aXZlIG51bWJlciIKK21zZ3N0ciAiJXMgZGViZSBlc3RhciBzZWd1aWRvIHBvciB1biBu+m1lcm8gcG9zaXRpdm8iCisKKyM6IHNyYy9yZWFkZXIuYzo1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVsZSBpcyB0b28gbG9uZyIKK21zZ3N0ciAibGEgcmVnbGEgZXMgZGVtYXNpYWRvIGxhcmdhIgorCisjOiBzcmMvcmVhZGVyLmM6NjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJ1bGVzIGluIHRoZSBpbnB1dCBncmFtbWFyIgorbXNnc3RyICJubyBoYXkgcmVnbGFzIGVuIGxhIGdyYW3hdGljYSBkZSBlbnRyYWRhIgorCisjOiBzcmMvcmVkdWNlLmM6MjQxCisjLCBmdXp6eQorbXNnaWQgInJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyICJubyBoYXkgcmVnbGFzIGVuIGxhIGdyYW3hdGljYSBkZSBlbnRyYWRhIgorCisjOiBzcmMvcmVkdWNlLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogJXMiCittc2dzdHIgIiIKKworIzogc3JjL3JlZHVjZS5jOjM1MAorIywgZnV6enkKK21zZ2lkICJOb250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyICJObyB0ZXJtaW5hbGVzIGNvbiBsYXMgcmVnbGFzIGRvbmRlIGFwYXJlY2VuIgorCisjOiBzcmMvcmVkdWNlLmM6MzYzCisjLCBmdXp6eQorbXNnaWQgIlRlcm1pbmFscyB1bnVzZWQgaW4gZ3JhbW1hciIKK21zZ3N0ciAibm8gaGF5IHJlZ2xhcyBlbiBsYSBncmFt4XRpY2EgZGUgZW50cmFkYSIKKworIzogc3JjL3JlZHVjZS5jOjM3MgorIywgZnV6enkKK21zZ2lkICJSdWxlcyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgIm5vIGhheSByZWdsYXMgZW4gbGEgZ3JhbeF0aWNhIGRlIGVudHJhZGEiCisKKyM6IHNyYy9yZWR1Y2UuYzozODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnaWRfcGx1cmFsICIlZCBub250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogc3JjL3JlZHVjZS5jOjM5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJWQgcnVsZSB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dpZF9wbHVyYWwgIiVkIHJ1bGVzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0clswXSAibm8gaGF5IHJlZ2xhcyBlbiBsYSBncmFt4XRpY2EgZGUgZW50cmFkYSIKK21zZ3N0clsxXSAibm8gaGF5IHJlZ2xhcyBlbiBsYSBncmFt4XRpY2EgZGUgZW50cmFkYSIKKworIzogc3JjL3JlZHVjZS5jOjQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydCBzeW1ib2wgJXMgZG9lcyBub3QgZGVyaXZlIGFueSBzZW50ZW5jZSIKK21zZ3N0ciAiRWwgc+1tYm9sbyBkZSBpbmljaW8gKGF4aW9tYSkgJXMgbm8gZGVyaXZhIG5pbmd1bmEgc2VudGVuY2lhIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MTg4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzdHJheSAnJXMnIgorbXNnc3RyICJgJCBleHRyYXZpYWRvIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjI5Cittc2dpZCAiYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjIzMgorbXNnaWQgImZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVzZSBvZiBZWUZBSUwsIHdoaWNoIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDMxIHNyYy9zY2FuLWNvZGUubDo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJzIHRvOiAlYyVzIGF0ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zc2libHkgbWVhbnQ6ICVjIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCBoaWRpbmcgJWMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICIgYXQgJXMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ3MgorIywgYy1mb3JtYXQKK21zZ2lkICIsIGNhbm5vdCBiZSBhY2Nlc3NlZCBmcm9tIG1pZC1ydWxlIGFjdGlvbiBhdCAkJWQiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjUyMSBzcmMvc2Nhbi1ncmFtLmw6NzgzCisjLCBjLWZvcm1hdAorbXNnaWQgImludGVnZXIgb3V0IG9mIHJhbmdlOiAlcyIKK21zZ3N0ciAiZW50ZXJvIGZ1ZXJhIGRlIHJhbmdvOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYxMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWZlcmVuY2U6ICVzIgorbXNnc3RyICJkaXJlY3RpdmEgbm8gduFsaWRhOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IgYWZ0ZXIgJyVjJywgZXhwZWN0aW5nIGludGVnZXIsIGxldHRlciwgJ18nLCAnWycsIG9yICckJyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbiBiZWZvcmUgJCVkOiAlLipzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiAlLipzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2NDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm1pc2xlYWRpbmcgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAicmVkZWZpbmljafNuIGRlIGxhIHByZWNlZGVuY2lhIGRlICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjYzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAiYXJndW1lbnRvICVzIGFtYmln/G8gcGFyYSAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJleHBsaWNpdCB0eXBlIGdpdmVuIGluIHVudHlwZWQgZ3JhbW1hciIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NzU5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIkJCBmb3IgdGhlIG1pZHJ1bGUgYXQgJCVkIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICIkJWQgZGUgYCVzJyBubyB0aWVuZSB0aXBvIGRlY2xhcmFkbyIKKworIzogc3JjL3NjYW4tY29kZS5sOjc2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJCQgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiQkIGRlIGAlcycgbm8gdGllbmUgdGlwbyBkZWNsYXJhZG8iCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3ODYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiQlcyBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiJCVkIGRlIGAlcycgbm8gdGllbmUgdGlwbyBkZWNsYXJhZG8iCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoxNDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN0cmF5ICcsJyB0cmVhdGVkIGFzIHdoaXRlIHNwYWNlIgorbXNnc3RyICJgLCcgcGVyZGlkbyBzZSB0cmF0byBjb21vIHVuIGVzcGFjaW8gZW4gYmxhbmNvIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZGlyZWN0aXZlOiAlcyIKK21zZ3N0ciAiZGlyZWN0aXZhIG5vIHbhbGlkYTogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyNTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaWRlbnRpZmllcjogJXMiCittc2dzdHIgImRpcmVjdGl2YSBubyB24WxpZGE6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6Mjk1CisjLCBmdXp6eQorbXNnaWQgImludmFsaWQgY2hhcmFjdGVyIgorbXNnaWRfcGx1cmFsICJpbnZhbGlkIGNoYXJhY3RlcnMiCittc2dzdHJbMF0gImNhcuFjdGVyIG5vIHbhbGlkbzogJXMiCittc2dzdHJbMV0gImNhcuFjdGVyIG5vIHbhbGlkbzogJXMiCisKKyMgRW4gdW5hcyBvY2FzaW9uZXMsIGhhcyB0cmFkdWNpZG8gYHVuZXhwZWN0ZWQnIGNvbW8gYG5vIGVzcGVyYWRvJyB5LCBlbgorIyBvdHJhcywgY29tbyBgaW5lc3BlcmFkbycuIEN1YWxxdWllcmEgZXMgY29ycmVjdGEsIHBvciBzdXB1ZXN0byB5LCBlbgorIyBlc3RlIGNhc28sIGxhIHNlZ3VuZGEgbWUgcGFyZWNlIG3hcyBhcHJvcGlhZGEgLSBjbGwKKyMgb2sgLSBuZ3AKKyM6IHNyYy9zY2FuLWdyYW0ubDozNTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgaWRlbnRpZmllciBpbiBicmFja2V0ZWQgbmFtZTogJXMiCittc2dzdHIgIu10ZW0gaW5lc3BlcmFkbzogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW4gaWRlbnRpZmllciBleHBlY3RlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MzgxCisjLCBmdXp6eQorbXNnaWQgImludmFsaWQgY2hhcmFjdGVyIGluIGJyYWNrZXRlZCBuYW1lIgorbXNnaWRfcGx1cmFsICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gYnJhY2tldGVkIG5hbWUiCittc2dzdHJbMF0gImNhcuFjdGVyIG5vIHbhbGlkbzogJXMiCittc2dzdHJbMV0gImNhcuFjdGVyIG5vIHbhbGlkbzogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo0ODEgc3JjL3NjYW4tZ3JhbS5sOjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBjaGFyYWN0ZXIgbGl0ZXJhbCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NDg2IHNyYy9zY2FuLWdyYW0ubDo1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0cmEgY2hhcmFjdGVycyBpbiBjaGFyYWN0ZXIgbGl0ZXJhbCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVsbCBjaGFyYWN0ZXIiCittc2dzdHIgImNhcuFjdGVyIG51bG8gbm8gduFsaWRvIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NTMxIHNyYy9zY2FuLWdyYW0ubDo1NDEgc3JjL3NjYW4tZ3JhbS5sOjU2MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgYWZ0ZXIgXFwtZXNjYXBlOiAlcyIKK21zZ3N0ciAiY2Fy4WN0ZXIgbnVsbyBubyB24WxpZG86ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NTczCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciBhZnRlciBcXC1lc2NhcGU6ICVzIgorbXNnc3RyICJjYXLhY3RlciBubyB24WxpZG86ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6OTAxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzIGF0IGVuZCBvZiBmaWxlIgorbXNnc3RyICJmYWx0YSBjYWRlbmEgYCVzJyBhbCBmaW5hbCBkZWwgZmljaGVybyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjkxMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyBhdCBlbmQgb2YgbGluZSIKK21zZ3N0ciAiZmFsdGEgY2FkZW5hIGAlcycgYWwgZmluYWwgZGVsIGZpY2hlcm8iCisKKyM6IHNyYy9zY2FuLXNrZWwubDoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5jbG9zZWQgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIGZldyBhcmd1bWVudHMgZm9yICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1za2VsLmw6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBmb3IgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW1saXN0LmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJCB2YWx1ZTogJCVkIgorbXNnc3RyICJ2YWxvciAkIG5vIHbhbGlkbzogJCVkIgorCisjOiBzcmMvc3ltdGFiLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUE9TSVggWWFjYyBmb3JiaWRzIGRhc2hlcyBpbiBzeW1ib2wgbmFtZXM6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW10YWIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBzeW1ib2xzIGluIGlucHV0IGdyYW1tYXIgKGxpbWl0IGlzICVkKSIKK21zZ3N0ciAiZGVtYXNpYWRvcyBz7W1ib2xvcyBlbiBsYSBncmFt4XRpY2EgZGUgZW50cmFkYSAoZWwgbO1taXRlIGVzICVkKSIKKworIzogc3JjL3N5bXRhYi5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAiJXMgcmVkZWNsYXJhY2nzbiBkZSAlcyIKKworIzogc3JjL3N5bXRhYi5jOjE2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVkZWNsYXJhdGlvbiBmb3IgPCVzPiIKK21zZ3N0ciAiJXMgcmVkZWNsYXJhY2nzbiBkZSAlcyIKKworIzogc3JjL3N5bXRhYi5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgcmVkZWZpbmVkIgorbXNnc3RyICJyZWRlZmluaWRvIGVsIHPtbWJvbG8gJXMiCisKKyM6IHNyYy9zeW10YWIuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHJlZGVjbGFyZWQiCittc2dzdHIgInJlZGVmaW5pZG8gZWwgc+1tYm9sbyAlcyIKKworIzogc3JjL3N5bXRhYi5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlZmluaW5nIHVzZXIgdG9rZW4gbnVtYmVyIG9mICVzIgorbXNnc3RyICJyZWRlZmluaWNp824gZGVsIG76bWVybyBkZWwgdGVybWluYWwgZGVsIHVzdWFyaW8gZGUgJXMiCisKKyMgYHRva2VuJyBzZSBkZWJlIHRyYWR1Y2lyIGNvbW8gYGxpdGVyYWwnIC0gY2xsCisjIGVuIHRlcm1pbm9sb2ftYSBkZSBjb21waWxhZG9yZXMgdG9rZW4gZXMgbeFzIHVuIHRlcm1pbmFsIC0gbmdwCisjCisjOiBzcmMvc3ltdGFiLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyBpcyB1c2VkLCBidXQgaXMgbm90IGRlZmluZWQgYXMgYSB0b2tlbiBhbmQgaGFzIG5vIHJ1bGVzIgorbXNnc3RyICIiCisic2UgdXNhIGVsIHPtbWJvbG8gJXMsIHBlcm8gbm8gZXN04SBkZWZpbmlkbyBjb21vIHRlcm1pbmFsIHkgbm8gdGllbmUgcmVnbGFzIgorCisjOiBzcmMvc3ltdGFiLmM6NDE1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgdXNlZCBtb3JlIHRoYW4gb25jZSBhcyBhIGxpdGVyYWwgc3RyaW5nIgorbXNnc3RyICJz7W1ib2xvIGAlcycgdXRpbGl6YWRvIG3hcyBkZSB1bmEgdmV6IGNvbW8gY2FkZW5hIGxpdGVyYWwiCisKKyM6IHNyYy9zeW10YWIuYzo0MTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyBnaXZlbiBtb3JlIHRoYW4gb25lIGxpdGVyYWwgc3RyaW5nIgorbXNnc3RyICJhbCBz7W1ib2xvIGAlcycgc2UgbGUgaGEgZGFkbyBt4XMgZGUgdW5hIGNhZGVuYSBsaXRlcmFsIgorCisjOiBzcmMvc3ltdGFiLmM6NTM1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1c2VyIHRva2VuIG51bWJlciAlZCByZWRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAicmVkZWNsYXJhY2nzbiBkZWwgdGlwbyBkZSAlcyIKKworIzogc3JjL3N5bXRhYi5jOjUzOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicHJldmlvdXMgZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICJyZWRlY2xhcmFjafNuIGRlbCB0aXBvIGRlICVzIgorCisjOiBzcmMvc3ltdGFiLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBzdGFydCBzeW1ib2wgJXMgaXMgdW5kZWZpbmVkIgorbXNnc3RyICJlbCBz7W1ib2xvIGRlIGluaWNpbyAoYXhpb21hKSAlcyBubyBlc3ThIGRlZmluaWRvIgorCisjOiBzcmMvc3ltdGFiLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBzdGFydCBzeW1ib2wgJXMgaXMgYSB0b2tlbiIKK21zZ3N0ciAiZWwgc+1tYm9sbyBkZSBpbmljaW8gKGF4aW9tYSkgJXMgZXMgdW4gdGVybWluYWwiCisKKyM6IHNyYy9zeW10YWIuYzo5MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdnZWQgJSVkZXN0cnVjdG9yIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW10YWIuYzo5NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdsZXNzICUlZGVzdHJ1Y3RvciIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6OTY1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICUlcHJpbnRlciIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6OTgwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnbGVzcyAlJXByaW50ZXIiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjYzIGRqZ3BwL3N1YnBpcGUuYzoyODYgZGpncHAvc3VicGlwZS5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdmluZyBvZiAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6ODUgZGpncHAvc3VicGlwZS5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNyZWF0aW9uIG9mIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAic2F2aW5nIHN0ZGluIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgInNhdmluZyBzdGRvdXQgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxNTMgZGpncHAvc3VicGlwZS5jOjE5NyBkamdwcC9zdWJwaXBlLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZW5pbmcgb2YgdG1wZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBiaXNvbidzIHN0ZG91dCB0byB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgbTQncyBzdGRpbiBmcm9tIHRoZSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nIG9mIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgbTQncyBzdGRvdXQgdG8gYSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjIzNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic3Vic2lkaWFyeSBwcm9ncmFtICclcycgaW50ZXJydXB0ZWQiCittc2dzdHIgImZhbGzzIGVsIHByb2dyYW1hIHN1YnNpZGlhcmlvIGAlcyciCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyNDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAibm8gc2UgZW5jb250cvMgZWwgcHJvZ3JhbWEgc3Vic2lkaWFyaW8gYCVzJyIKKworIzogZGpncHAvc3VicGlwZS5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBiaXNvbidzIHN0ZGluIGZyb20gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCAlcyBmb3IgJXMiCittc2dzdHIgImFyZ3VtZW50byBubyB24WxpZG8gJXMgcGFyYSAlcyIKKworIzogbGliL2FyZ21hdGNoLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImFtYmlndW91cyBhcmd1bWVudCAlcyBmb3IgJXMiCittc2dzdHIgImFyZ3VtZW50byAlcyBhbWJpZ/xvIHBhcmEgJXMiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjE1MworbXNnaWQgIlZhbGlkIGFyZ3VtZW50cyBhcmU6IgorbXNnc3RyICJMb3MgYXJndW1lbnRvcyB24WxpZG9zIHNvbjoiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X2FsbG9jcywgJXUgZnJlZWQgKCUuMmYlJSkuXG4iCittc2dzdHIgIiV1IGJpdHNldF9hbGxvY3MsICV1IGxpYmVyYWRvcyAoJS4yZiUlKS5cbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfc2V0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF9zZXRzLCAldSBlbiBsYSBjYWNo6SAoJS4yZiUlKVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9yZXNldHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorbXNnc3RyICIldSBiaXRzZXRfcmVzZXRzLCAldSBlbiBsYSBjYWNo6SAoJS4yZiUlKVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF90ZXN0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF90ZXN0cywgJXUgZW4gbGEgY2FjaOkgKCUuMmYlJSlcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfbGlzdHNcbiIKK21zZ3N0ciAiJXUgYml0c2V0X2xpc3RzXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTIKK21zZ2lkICJjb3VudCBsb2cgaGlzdG9ncmFtXG4iCittc2dzdHIgImhpc3RvZ3JhbWEgZGVsIHJlZ2lzdHJvIGRlIGNvbnRlb1xuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTk1Cittc2dpZCAic2l6ZSBsb2cgaGlzdG9ncmFtXG4iCittc2dzdHIgImhpc3RvZ3JhbWEgZGVsIHJlZ2lzdHJvIGRlIHRhbWHxb1xuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTk4Cittc2dpZCAiZGVuc2l0eSBoaXN0b2dyYW1cbiIKK21zZ3N0ciAiaGlzdG9ncmFtYSBkZSBkZW5zaWRhZFxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCaXRzZXQgc3RhdGlzdGljczpcbiIKKyJcbiIKK21zZ3N0ciAiRXN0YWTtc3RpY2FzIGRlIGJpdHNldFxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkFjY3VtdWxhdGVkIHJ1bnMgPSAldVxuIgorbXNnc3RyICJFamVjdWNpb25lcyBhY3VtdWxhZGFzID0gJXVcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI1OSBsaWIvYml0c2V0X3N0YXRzLmM6MjY0CisjLCBmdXp6eQorbXNnaWQgImNhbm5vdCByZWFkIHN0YXRzIGZpbGUiCittc2dzdHIgIk5vIHB1ZGUgbGVlciBmaWNoZXJvIGRlIGVzdGFk7XN0aWNhcyIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI2MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYmFkIHN0YXRzIGZpbGUgc2l6ZVxuIgorbXNnc3RyICJGaWNoZXJvIGRlIGVzdGFk7XN0aWNhIG5vIHbhbGlkby5cbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI4NyBsaWIvYml0c2V0X3N0YXRzLmM6Mjg5CisjLCBmdXp6eQorbXNnaWQgImNhbm5vdCB3cml0ZSBzdGF0cyBmaWxlIgorbXNnc3RyICJObyBwdWRlIGVzY3JpYmlyIGVsIGZpY2hlcm8gZGUgZXN0YWTtc3RpY2FzLiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI5MgorIywgZnV6enkKK21zZ2lkICJjYW5ub3Qgb3BlbiBzdGF0cyBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJObyBwdWRlIGFicmlyIGVsIGZpY2hlcm8gZGUgZXN0YWTtc3RpY2FzIHBhcmEgZXNjcml0dXJhIgorCisjIER1ZGE6IGRlc2Nvbm96Y28gY3XhbCBzZXLhIGVsIGNvbnZlbmlvIGVuIGxhIGxpc3RhIGRlIGNvcnJlbyBhCisjIHByb3Dzc2l0byBkZSAiZmF0YWwiLiBQb3IgZmF2b3IsIGNvbXBydWViYSBxdWUgImVycm9yIGdyYXZlIiBlcworIyBwcmVmZXJpZG8gcG9yIHRvZG9zIGxvcyBtaWVtYnJvcyBhICJlcnJvciBmYXRhbCIgLSBjbGwKKyMgdmVyZW1vcyBxdWUgZGljZSBsYSBtYXlvcu1hLCBjb21vIGhheSBvdHJvcyAyIHJldmlzb3JlcworIyBMYSB2ZXJkYWQgZXMgcXVlIGEgbWkgbG8gZGUgZXJyb3IgZmF0YWwgbWUgc3VlbmEgZmF0YWwKKyMgbmdwCisjCisjOiBsaWIvY2xvc2VvdXQuYzoxMTIKKyMsIGZ1enp5Cittc2dpZCAid3JpdGUgZXJyb3IiCittc2dzdHIgImVycm9yIGdyYXZlOiAiCisKKyM6IGxpYi9lcnJvci5jOjE4OAorbXNnaWQgIlVua25vd24gc3lzdGVtIGVycm9yIgorbXNnc3RyICJFcnJvciBkZWwgc2lzdGVtYSBkZXNjb25vY2lkbyIKKworIzogbGliL2dldG9wdC5jOjU0NyBsaWIvZ2V0b3B0LmM6NTc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICclcycgaXMgYW1iaWd1b3VzOyBwb3NzaWJpbGl0aWVzOiIKK21zZ3N0ciAiJXM6IGxhIG9wY2nzbiBgJXMnIGVzIGFtYmlndWFcbiIKKworIyBQb25nbyBlc3RvIGNvbW8gZW4gb3Ryb3MgLnBvLiBzdgorIzogbGliL2dldG9wdC5jOjYyNCBsaWIvZ2V0b3B0LmM6NjI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBsYSBvcGNp824gYC0tJXMnIG5vIGFkbWl0ZSBuaW5n+m4gYXJndW1lbnRvXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo2MzcgbGliL2dldG9wdC5jOjY0MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnJWMlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogbGEgb3BjafNuIGAlYyVzJyBubyBhZG1pdGUgbmluZ/puIGFyZ3VtZW50b1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6Njg1IGxpYi9nZXRvcHQuYzo3MDQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy0tJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBsYSBvcGNp824gYCVzJyByZXF1aWVyZSB1biBhcmd1bWVudG9cbiIKKworIzogbGliL2dldG9wdC5jOjc0MiBsaWIvZ2V0b3B0LmM6NzQ1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiAnLS0lcydcbiIKK21zZ3N0ciAiJXM6IG9wY2nzbiBgLS0lcycgbm8gcmVjb25vY2lkYVxuIgorCisjOiBsaWIvZ2V0b3B0LmM6NzUzIGxpYi9nZXRvcHQuYzo3NTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uICclYyVzJ1xuIgorbXNnc3RyICIlczogb3BjafNuIGAlYyVzJyBubyByZWNvbm9jaWRhXG4iCisKKyMgoU11eSBiaWVuIHRyYWR1Y2lkbyEgRW4gZWwgZ3J1cG8gZGUgdHJhZHVjY2nzbiBoYSBoYWJpZG8gYXV06W50aWNhcworIyBiYXRhbGxhcyBjb24gZWwgdGVtYSAiaW52YWxpZCAtIGluduFsaWRvL2EiIDopIC0gY2xsCisjIFBvcnF1ZSBFbnJpcXVlIGRlY+1hIHF1ZSBsZSByZWNvcmRhYmEgYSBkaXNtaW51aWRvcyBm7XNpY29zLgorIyBGcmFuY2FtZW50ZSwgbm8gY3JlbyBxdWUgaGF5YSBxdWUgYW5kYXIgY29uIGVzdGFzICJmb2JpYXMiLgorIyBQb25nbyBpbnbhbGlkYS4gc3YKKyM6IGxpYi9nZXRvcHQuYzo4MDUgbGliL2dldG9wdC5jOjgwOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgb3B0aW9uIC0tICclYydcbiIKK21zZ3N0ciAiJXM6IG9wY2nzbiAtLSAlYyBubyB24WxpZGFcbiIKKworIzogbGliL2dldG9wdC5jOjg2MSBsaWIvZ2V0b3B0LmM6ODc4IGxpYi9nZXRvcHQuYzoxMDg4IGxpYi9nZXRvcHQuYzoxMTA2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICclYydcbiIKK21zZ3N0ciAiJXM6IGxhIG9wY2nzbiAtLSAlYyByZXF1aWVyZSB1biBhcmd1bWVudG9cbiIKKworIzogbGliL2dldG9wdC5jOjkzNCBsaWIvZ2V0b3B0LmM6OTUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiVzOiBsYSBvcGNp824gYC1XICVzJyBlcyBhbWJpZ3VhXG4iCisKKyMgUG9uZ28gZXN0byBjb21vIGVuIG90cm9zIC5wby4gc3YKKyM6IGxpYi9nZXRvcHQuYzo5NzQgbGliL2dldG9wdC5jOjk5MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLVcgJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IGxhIG9wY2nzbiBgLVcgJXMnIG5vIGFkbWl0ZSBuaW5n+m4gYXJndW1lbnRvXG4iCisKKyM6IGxpYi9nZXRvcHQuYzoxMDEzIGxpYi9nZXRvcHQuYzoxMDMxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IGxhIG9wY2nzbiBgJXMnIHJlcXVpZXJlIHVuIGFyZ3VtZW50b1xuIgorCisjOiBsaWIvb2JzdGFjay5jOjQxMyBsaWIvb2JzdGFjay5jOjQxNSBsaWIveGFsbG9jLWRpZS5jOjM0Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAibWVtb3JpYSBhZ290YWRhIgorCisjOiBsaWIvc3Bhd24tcGlwZS5jOjE0MCBsaWIvc3Bhd24tcGlwZS5jOjE0MyBsaWIvc3Bhd24tcGlwZS5jOjI2NAorIzogbGliL3NwYXduLXBpcGUuYzoyNjcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZSIKK21zZ3N0ciAibm8gc2UgcHVlZGUgY2VycmFyIGVsIGZpY2hlcm8iCisKKyM6IGxpYi9zcGF3bi1waXBlLmM6MjM0IGxpYi9zcGF3bi1waXBlLmM6MzQ4IGxpYi93YWl0LXByb2Nlc3MuYzoyODIKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyBmYWlsZWQiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6CisjLiBHZXQgdHJhbnNsYXRpb25zIGZvciBvcGVuIGFuZCBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrcy4KKyMuIFRoZSBtZXNzYWdlIGNhdGFsb2cgc2hvdWxkIHRyYW5zbGF0ZSAiYCIgdG8gYSBsZWZ0CisjLiBxdW90YXRpb24gbWFyayBzdWl0YWJsZSBmb3IgdGhlIGxvY2FsZSwgYW5kIHNpbWlsYXJseSBmb3IKKyMuICInIi4gIEZvciBleGFtcGxlLCBhIEZyZW5jaCBVbmljb2RlIGxvY2FsIHNob3VsZCB0cmFuc2xhdGUKKyMuIHRoZXNlIHRvIFUrMDBBQiAoTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUKKyMuIFFVT1RBVElPTiBNQVJLKSwgYW5kIFUrMDBCQiAoUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFCisjLiBRVU9UQVRJT04gTUFSSyksIHJlc3BlY3RpdmVseS4KKyMuCisjLiBJZiB0aGUgY2F0YWxvZyBoYXMgbm8gdHJhbnNsYXRpb24sIHdlIHdpbGwgdHJ5IHRvCisjLiB1c2UgVW5pY29kZSBVKzIwMTggKExFRlQgU0lOR0xFIFFVT1RBVElPTiBNQVJLKSBhbmQKKyMuIFVuaWNvZGUgVSsyMDE5IChSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspLiAgSWYgdGhlCisjLiBjdXJyZW50IGxvY2FsZSBpcyBub3QgVW5pY29kZSwgbG9jYWxlX3F1b3Rpbmdfc3R5bGUKKyMuIHdpbGwgcXVvdGUgJ2xpa2UgdGhpcycsIGFuZCBjbG9jYWxlX3F1b3Rpbmdfc3R5bGUgd2lsbAorIy4gcXVvdGUgImxpa2UgdGhpcyIuICBZb3Ugc2hvdWxkIGFsd2F5cyBpbmNsdWRlIHRyYW5zbGF0aW9ucworIy4gZm9yICJgIiBhbmQgIiciIGV2ZW4gaWYgVSsyMDE4IGFuZCBVKzIwMTkgYXJlIGFwcHJvcHJpYXRlCisjLiBmb3IgeW91ciBsb2NhbGUuCisjLgorIy4gSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBwdXQgaGVyZSwgcGxlYXNlIHNlZQorIy4gPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUXVvdGF0aW9uX21hcmtzX2luX290aGVyX2xhbmd1YWdlcz4KKyMuIGFuZCB1c2UgZ2x5cGhzIHN1aXRhYmxlIGZvciB5b3VyIGxhbmd1YWdlLgorIzogbGliL3F1b3RlYXJnLmM6MzEyCittc2dpZCAiYCIKK21zZ3N0ciAiYCIKKworIzogbGliL3F1b3RlYXJnLmM6MzEzCittc2dpZCAiJyIKK21zZ3N0ciAiJyIKKworIzogbGliL3RpbWV2YXIuYzo0NzUKK21zZ2lkICIiCisiXG4iCisiRXhlY3V0aW9uIHRpbWVzIChzZWNvbmRzKVxuIgorbXNnc3RyICIiCisiXG4iCisiVGllbXBvcyBkZSBlamVjdWNp824gKHNlZ3VuZG8pXG4iCisKKyM6IGxpYi90aW1ldmFyLmM6NTI1Cittc2dpZCAiIFRPVEFMICAgICAgICAgICAgICAgICA6IgorbXNnc3RyICIgVE9UQUwgICAgICAgICAgICAgICAgIDoiCisKKyM6IGxpYi90aW1ldmFyLmM6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWUgaW4gJXM6ICVsZC4lMDZsZCAoJWxkJSUpXG4iCittc2dzdHIgInRpZW1wbyBlbiAlczogJWxkLiUwNmxkICglbGQlJSlcbiIKKworIzogbGliL3czMnNwYXduLmg6NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiX29wZW5fb3NmaGFuZGxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvdzMyc3Bhd24uaDo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdG9yZSBmZCAlZDogZHVwMiBmYWlsZWQiCittc2dzdHIgIiIKKworIzogbGliL3dhaXQtcHJvY2Vzcy5jOjIyMyBsaWIvd2FpdC1wcm9jZXNzLmM6MjU1IGxpYi93YWl0LXByb2Nlc3MuYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6Mjc0IGxpYi93YWl0LXByb2Nlc3MuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyBnb3QgZmF0YWwgc2lnbmFsICVkIgorbXNnc3RyICIiCisKKyN+IG1zZ2lkICJzdGF0ZSAlZCIKKyN+IG1zZ3N0ciAiZXN0YWRvICVkIgorCisjLCBmdXp6eQorI34gbXNnaWQgInN0cmF5ICdAJyIKKyN+IG1zZ3N0ciAiYEAgZXh0cmF2aWFkbyIKKworI34gbXNnaWQgIndhcm5pbmc6ICIKKyN+IG1zZ3N0ciAiYXZpc286ICIKKworI34gbXNnaWQgIkdOVSBiaXNvbiBnZW5lcmF0ZXMgcGFyc2VycyBmb3IgTEFMUigxKSBncmFtbWFycy5cbiIKKyN+IG1zZ3N0ciAiR05VIGJpc29uIGdlbmVyYSBhbmFsaXphZG9yZXMgcGFyYSBncmFt4XRpY2FzIExBTFIoMSkuXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiSWYgYSBsb25nIG9wdGlvbiBzaG93cyBhbiBhcmd1bWVudCBhcyBtYW5kYXRvcnksIHRoZW4gaXQgaXMgbWFuZGF0b3J5XG4iCisjfiAiZm9yIHRoZSBlcXVpdmFsZW50IHNob3J0IG9wdGlvbiBhbHNvLiAgU2ltaWxhcmx5IGZvciBvcHRpb25hbCBhcmd1bWVudHMuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJTaSB1bmEgb3BjafNuIGxhcmdhIG11ZXN0cmEgdW4gYXJndW1lbnRvIGNvbW8gb2JsaWdhdG9yaW8sIGVudG9uY2VzIGVzICIKKyN+ICJvYmxpZ2F0b3Jpb1xuIgorI34gInBhcmEgbGEgb3BjafNuIGNvcnRhIGVxdWl2YWxlbnRlIHRhbWJp6W4uIERlIGlndWFsIGZvcm1hIHBhcmEgbG9zICIKKyN+ICJhcmd1bWVudG9zIG9wY2lvbmFsZXMuXG4iCisKKyN+IG1zZ2lkICJSdWxlcyBuZXZlciByZWR1Y2VkIgorI34gbXNnc3RyICJSZWdsYXMgbnVuY2EgcmVkdWNpZGFzIgorCisjfiBtc2dpZCAidXNlbGVzcyBydWxlIgorI34gbXNnc3RyICJyZWdsYSBzaW4gdXNvIgorCisjfiBtc2dpZCAidXNlbGVzcyBub250ZXJtaW5hbDogJXMiCisjfiBtc2dzdHIgIk5vIHRlcm1pbmFsIHNpbiB1c286ICVzIgorCisjfiBtc2dpZCAiVXNlbGVzcyBub250ZXJtaW5hbHMiCisjfiBtc2dzdHIgIk5vIHRlcm1pbmFsZXMgc2luIHVzbyIKKworI34gbXNnaWQgIlRlcm1pbmFscyB3aGljaCBhcmUgbm90IHVzZWQiCisjfiBtc2dzdHIgIlRlcm1pbmFsZXMgcXVlIG5vIHNlIHVzYW4iCisKKyN+IG1zZ2lkICJVc2VsZXNzIHJ1bGVzIgorI34gbXNnc3RyICJSZWdsYXMgc2luIHVzbyIKKworI34gbXNnaWQgIiVkIHJ1bGUgbmV2ZXIgcmVkdWNlZFxuIgorI34gbXNnaWRfcGx1cmFsICIlZCBydWxlcyBuZXZlciByZWR1Y2VkXG4iCisjfiBtc2dzdHJbMF0gIiVkIHJlZ2xhIHF1ZSBudW5jYSBzZSBoYSByZWR1Y2lkb1xuIgorI34gbXNnc3RyWzFdICIlZCByZWdsYXMgcXVlIG51bmNhIHNlIGhhbiByZWR1Y2lkb1xuIgorCisjfiBtc2dpZCAiJWQgdXNlbGVzcyBub250ZXJtaW5hbCIKKyN+IG1zZ2lkX3BsdXJhbCAiJWQgdXNlbGVzcyBub250ZXJtaW5hbHMiCisjfiBtc2dzdHJbMF0gIiVkIG5vIHRlcm1pbmFsIHNpbiB1c28iCisjfiBtc2dzdHJbMV0gIiVkIG5vIHRlcm1pbmFsZXMgc2luIHVzbyIKKworI34gbXNnaWQgIiBhbmQgIgorI34gbXNnc3RyICIgeSAiCisKKyN+IG1zZ2lkICIlZCB1c2VsZXNzIHJ1bGUiCisjfiBtc2dpZF9wbHVyYWwgIiVkIHVzZWxlc3MgcnVsZXMiCisjfiBtc2dzdHJbMF0gIiVkIHJlZ2xhIHNpbiB1c28iCisjfiBtc2dzdHJbMV0gIiVkIHJlZ2xhcyBzaW4gdXNvIgorCisjfiBtc2dpZCAiaW52YWxpZCBlc2NhcGUgc2VxdWVuY2U6ICVzIgorI34gbXNnc3RyICJzZWN1ZW5jaWEgZGUgZXNjYXBlIG5vIHbhbGlkYTogJXMiCisKKyN+IG1zZ2lkICJ1bnJlY29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlOiAlcyIKKyN+IG1zZ3N0ciAic2VjdWVuY2lhIGRlIGVzY2FwZSBubyByZWNvbm9jaWRhOiAlcyIKKworI34gbXNnaWQgIm1pc3NpbmcgYHsnIGluICVzIgorI34gbXNnc3RyICJmYWx0YSBgeycgZW4gJXMiCisKKyN+IG1zZ2lkICJ0b2tlbnMgJXMgYW5kICVzIGJvdGggYXNzaWduZWQgbnVtYmVyICVkIgorI34gbXNnc3RyICJsb3MgdGVybWluYWxlcyAlcyB5ICVzIHRpZW5lbiBhc2lnbmFkb3MgYW1ib3MgZWwgbvptZXJvICVkIgorCisjIL9RdekgZW5jdWVudHJhcyBkZSBtYWxvIGVuIHRyYWR1Y2lyIGBpbGxlZ2FsJyBjb21vIGBpbGVnYWwnPyBEYXRlCisjIGN1ZW50YSBkZSBxdWUgZWwgbWVuc2FqZSAib3BjafNuIG5vIHbhbGlkYSIgcGFyZWNlIGFtYmlndWEgeSBoYXLhCisjIHBlbnNhciBhbCB1c3VhcmlvIGRlIHF1ZSB0YWwgdmV6IGxhIGhhIHVzYWRvIGluY29ycmVjdGFtZW50ZSwgc2luCisjIHJlcGFyYXIsIHBvciBsbyB0YW50bywgZW4gcXVlIGxhIG9wY2nzbiBtaXNtYSBlcyBpbGVnYWwuIEVzdG8gZXMsIKGhbm8KKyMgZXhpc3RlISEgKHBvcnF1ZSBpbWFnaW5vIHF1ZSBlcyBlbiBlc3RlIHNlbnRpZG8gY29tbyBzZSBoYSBwcm9ncmFtYWRvKQorIyAtIGNsbAorIyBTb2JyZSBlc3RvIGh1Ym8gdW5hIGRpc2N1c2nzbiBlbiBsYSBsaXN0YSBoYWNlIHRpZW1wbywKKyMgcXVpeuFzIGlsZWdhbCBxdWVkYSB1biBwb2NvIGZ1ZXJ0ZSwgYWxndWllbiBkZWPtYSBxdWUgcGFyZWPtYSBxdWUKKyMgaWJhcyBhIGlyIGEgbGEgY2FyY2VsIHBvciB1c2FyIGxhIG9wY2nzbi4KKyMgbmdwCisjCisjIFPtLCBlcmEgRW5yaXF1ZSBhIHF1aWVuIG5vIGxlIGd1c3RhYmEgbGEgcGFsYWJyYS4KKyMgTm8gY3JlbyBxdWUgZGViYW1vcyBkZWphciBkZSBkZWNpciBhbGdvIHBvciBsYSAiY29ycmVjY2nzbiBwb2ztdGljYSIKKyMgWW8gY3JlbyBxdWUgc2kgZWwgMzg2IHRpZW5lIGluc3RydWNjaW9uZXMgKmlsZWdhbGVzKiwgdGFtYmnpbiBwdWVkZQorIyBoYWJlciBvcGNpb25lcyBpbGVnYWxlcywgZGlnbyB5bywgeSBubyBwb3IgZXNvIGxhcyBDUFVzIHZhbgorIyBhIGxhIGPhcmNlbCAoY29tbyBtdWNobyBzZSBjdWVsZ2FuLCBqZSwgamUsIDBmZjAgOi0pLiBzdgorIworI34gbXNnaWQgIiVzOiBpbGxlZ2FsIG9wdGlvbiAtLSAlY1xuIgorI34gbXNnc3RyICIlczogb3BjafNuIC0tICVjIGlsZWdhbFxuIgorCisjfiBtc2dpZCAic3Vic2lkaWFyeSBwcm9ncmFtIGAlcycgY291bGQgbm90IGJlIGludm9rZWQiCisjfiBtc2dzdHIgIm5vIHNlIHB1ZG8gaW52b2NhciBlbCBwcm9ncmFtYSBzdWJzaWRpYXJpbyBgJXMnIgorCisjfiBtc2dpZCAic3Vic2lkaWFyeSBwcm9ncmFtIGAlcycgZmFpbGVkIChleGl0IHN0YXR1cyAlZCkiCisjfiBtc2dzdHIgImZhbGzzIGVsIHByb2dyYW1hIHN1YnNpZGlhcmlvIGAlcycgKGVzdGFkbyBkZSBzYWxpZGEgJWQpIgorCisjfiBtc2dpZCAiUE9TSVggZm9yYmlkcyBkZWNsYXJhdGlvbnMgaW4gdGhlIGdyYW1tYXIiCisjfiBtc2dzdHIgIlBPU0lYIHByb2jtYmUgZGVjbGFyYWNpb25lcyBlbiBhIGdyYW3hdGljYSIKKworI34gbXNnaWQgImludmFsaWQgJCB2YWx1ZSIKKyN+IG1zZ3N0ciAidmFsb3IgJCBubyB24WxpZG8iCisKKyN+IG1zZ2lkICJjb25mbGljdGluZyBwcmVjZWRlbmNlcyBmb3IgJXMgYW5kICVzIgorI34gbXNnc3RyICJwcmVjZWRlbmNpYXMgZW4gY29uZmxpY3RvIGVudHJlICVzIHkgJXMiCisKKyN+IG1zZ2lkICJjb25mbGljdGluZyBhc3NvY2lhdGl2aXRpZXMgZm9yICVzICglcykgYW5kICVzICglcykiCisjfiBtc2dzdHIgImNvbmZsaWN0byBkZSBhc29jaWFjaWF0aXZpZGFkZXMgcGFyYSAlcyAoJXMpIHkgJXMgKCVzKSIKKworI34gbXNnaWQgInRvbyBtYW55IHN0YXRlcyAobWF4ICVkKSIKKyN+IG1zZ3N0ciAiZGVtYXNpYWRvcyBlc3RhZG9zICht4XhpbW8gJWQpIgorCisjfiBtc2dpZCAicmVkdWNlIgorI34gbXNnc3RyICJyZWR1Y2UiCisKKyN+IG1zZ2lkICJzaGlmdCIKKyN+IG1zZ3N0ciAiZGVzcGxhemEiCisKKyN+IG1zZ2lkICIlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3QiCisjfiBtc2dpZF9wbHVyYWwgIiVkIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMiCisjfiBtc2dzdHJbMF0gIiVkIGNvbmZsaWN0byBkZXNwbGF6YW1pZW50by9yZWR1Y2Np824iCisjfiBtc2dzdHJbMV0gIiVkIGNvbmZsaWN0b3MgZGVzcGxhemFtaWVudG8vcmVkdWNjafNuIgorCisjfiBtc2dpZCAiYW5kIgorI34gbXNnc3RyICJ5IgorCisjfiBtc2dpZCAiU3RhdGUgJWQgY29udGFpbnMgIgorI34gbXNnc3RyICJFbCBlc3RhZG8gJWQgY29udGllbmUiCisKKyN+IG1zZ2lkICJjb25mbGljdHM6ICIKKyN+IG1zZ3N0ciAiY29uZmxpY3RvczogIgorCisjfiBtc2dpZCAiJXMgY29udGFpbnMgIgorI34gbXNnc3RyICIlcyBjb250aWVuZSAiCisKKyN+IG1zZ2lkICJgJXMnIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiCisjfiBtc2dzdHIgImAlcycgeWEgbm8gZXN04SBzb3BvcnRhZG8iCisKKyMgTWUgcGFyZWNlIG1lbm9zICJjb21wdXRhZG9yYSIgZGVjaXIgIm5pbmf6biBmaWNoZXJvIGRlIGdyYW3hdGljYSIgLSBjbGwKKyMKKyN+IG1zZ2lkICIlczogbm8gZ3JhbW1hciBmaWxlIGdpdmVuXG4iCisjfiBtc2dzdHIgIiVzOiBubyBzZSBoYSBlc3BlY2lmaWNhZG8gbmluZ/puIGZpY2hlcm8gZGUgZ3JhbeF0aWNhXG4iCisKKyMgSWdub3JhciBlcyBubyBzYWJlciwgdG8gaWdub3JlIGVzIG5vIGhhY2VyIGNhc28sIHF1ZSBubyBlcyBsbyBtaXNtby4gc3YKKyN+IG1zZ2lkICIlczogZXh0cmEgYXJndW1lbnRzIGlnbm9yZWQgYWZ0ZXIgYCVzJ1xuIgorI34gbXNnc3RyICIlczogbG9zIGFyZ3VtZW50b3MgZXh0cmEgZGVzcHXpcyBkZSAnJXMnIG5vIHNlIHRlbmRy4W4gZW4gY3VlbnRhXG4iCisKKyN+IG1zZ2lkICJ0b28gbWFueSBnb3RvcyAobWF4ICVkKSIKKyN+IG1zZ3N0ciAiZGVtYXNpYWRvcyBnb3RvcyAobeF4aW1vICVkKSIKKworIyB0byBpZ25vcmUgbm8gZXMgaWdub3Jhci4gUG9uIG90cmEgY29zYSwgcGxlYXNlLiBzdgorI34gbXNnaWQgInVuZXhwZWN0ZWQgYC8nIGZvdW5kIGFuZCBpZ25vcmVkIgorI34gbXNnc3RyICJzZSBoYSBlbmNvbnRyYWRvIGAvJyBjdWFuZG8gbm8gc2UgZXNwZXJhYmEsIG5vIHNlIHRlbmRy4W4gZW4gY3VlbnRhIgorCisjfiBtc2dpZCAidW50ZXJtaW5hdGVkIGNvbW1lbnQiCisjfiBtc2dzdHIgImNvbWVudGFyaW8gc2luIHRlcm1pbmFyIgorCisjfiBtc2dpZCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIKKyN+IG1zZ3N0ciAiZmluIGRlIGZpY2hlcm8gaW5lc3BlcmFkbyIKKworIyC/dW5lc2NhcGVkPworI34gbXNnaWQgInVuZXNjYXBlZCBuZXdsaW5lIGluIGNvbnN0YW50IgorI34gbXNnc3RyICJzYWx0byBkZSBs7W5lYSBlbiBjb25zdGFudGUgc2luIHNlY3VlbmNpYSBkZSBlc2NhcGUiCisKKyN+IG1zZ2lkICJvY3RhbCB2YWx1ZSBvdXRzaWRlIHJhbmdlIDAuLi4yNTU6IGBcXCVvJyIKKyN+IG1zZ3N0ciAidmFsb3Igb2N0YWwgZnVlcmEgZGVsIHJhbmdvIDAuLi4yNTU6IGBcXCVvJyIKKworI34gbXNnaWQgImhleGFkZWNpbWFsIHZhbHVlIGFib3ZlIDI1NTogYFxceCV4JyIKKyN+IG1zZ3N0ciAidmFsb3IgaGV4YWRlY2ltYWwgbWF5b3IgcXVlIDI1NTogYFxceCV4JyIKKworI34gbXNnaWQgInVua25vd24gZXNjYXBlIHNlcXVlbmNlOiBgXFwnIGZvbGxvd2VkIGJ5IGAlcyciCisjfiBtc2dzdHIgInNlY3VlbmNpYSBkZSBlc2NhcGUgZGVzY29ub2NpZGE6IGBcXCcgc2VndWlkbyBkZSBgJXMnIgorCisjfiBtc2dpZCAidW50ZXJtaW5hdGVkIHR5cGUgbmFtZSBhdCBlbmQgb2YgZmlsZSIKKyN+IG1zZ3N0ciAibm9tYnJlIGRlIHRpcG8gc2luIHRlcm1pbmFyIGFsIGZpbmFsIGRlbCBmaWNoZXJvIgorCisjfiBtc2dpZCAidW50ZXJtaW5hdGVkIHR5cGUgbmFtZSIKKyN+IG1zZ3N0ciAibm9tYnJlIGRlIHRpcG8gc2luIHRlcm1pbmFyIgorCisjIL9tdWx0aWNhcuFjdGVyIG8gbXVsdGljYXJhY3RlcmVzPyBzdgorI34gbXNnaWQgInVzZSBcIi4uLlwiIGZvciBtdWx0aS1jaGFyYWN0ZXIgbGl0ZXJhbCB0b2tlbnMiCisjfiBtc2dzdHIgInVzZSBcIi4uLlwiIHBhcmEgdGVybWluYWxlcyBsaXRlcmFsZXMgbXVsdGljYXLhY3RlciIKKworI34gbXNnaWQgImAlcycgc3VwcG9ydHMgbm8gYXJndW1lbnQ6ICVzIgorI34gbXNnc3RyICJgJXMnIG5vIHNvcG9ydGEgZWwgYXJndW1lbnRvOiAlcyIKKworI34gbXNnaWQgImAlcycgcmVxdWlyZXMgYW4gYXJndW1lbnQiCisjfiBtc2dzdHIgImAlcycgcmVxdWllcmUgdW4gYXJndW1lbnRvIgorCisjfiBtc2dpZCAiICAgKHJ1bGUgJWQpIgorI34gbXNnc3RyICIgICAocmVnbGEgJWQpIgorCisjfiBtc2dpZCAiICAgICUtNHNcdGVycm9yIChub25hc3NvY2lhdGl2ZSlcbiIKKyN+IG1zZ3N0ciAiICAgICUtNHNcdGVycm9yIChubyBhc29jaWF0aXZvKVxuIgorCisjfiBtc2dpZCAiIgorI34gIiAgICAkZGVmYXVsdFx0cmVkdWNlIHVzaW5nIHJ1bGUgJWQgKCVzKVxuIgorI34gIlxuIgorI34gbXNnc3RyICIiCisjfiAiICAgICRkZWZhdWx0XHRyZWR1Y2UgdXNhbmRvIGxhIHJlZ2xhICVkICglcylcbiIKKyN+ICJcbiIKKworI34gbXNnaWQgIiAgICAlLTRzXHRbcmVkdWNlIHVzaW5nIHJ1bGUgJWQgKCVzKV1cbiIKKyN+IG1zZ3N0ciAiICAgICUtNHNcdFtyZWR1Y2UgdXNhbmRvIGxhIHJlZ2xhICAlZCAoJXMpXVxuIgorCisjfiBtc2dpZCAiICAgICUtNHNcdHJlZHVjZSB1c2luZyBydWxlICVkICglcylcbiIKKyN+IG1zZ3N0ciAiICAgICUtNHNcdHJlZHVjZSB1c2FuZG8gbGEgcmVnbGEgICVkICglcylcbiIKKworI34gbXNnaWQgIiAgICAkZGVmYXVsdFx0cmVkdWNlIHVzaW5nIHJ1bGUgJWQgKCVzKVxuIgorI34gbXNnc3RyICIgICAgJGRlZmF1bHRcdHJlZHVjZSB1c2FuZG8gbGEgcmVnbGEgJWQgKCVzKVxuIgorCisjfiBtc2dpZCAiICAgICRkZWZhdWx0XHRhY2NlcHRcbiIKKyN+IG1zZ3N0ciAiICAgICRkZWZhdWx0XHRhY2VwdGFyXG4iCisKKyN+IG1zZ2lkICIgICAgTk8gQUNUSU9OU1xuIgorI34gbXNnc3RyICIgICAgU0lOIEFDQ0lPTkVTXG4iCisKKyN+IG1zZ2lkICJOdW1iZXIsIExpbmUsIFJ1bGUiCisjfiBtc2dzdHIgIk76bWVybywgTO1uZWEsIFJlZ2xhIgorCisjfiBtc2dpZCAiICAlM2QgJTNkICVzIC0+IgorI34gbXNnc3RyICIgICUzZCAlM2QgJXMgLT4iCisKKyN+IG1zZ2lkICIgICBTa2lwcGluZyB0byBuZXh0IFxcbiIKKyN+IG1zZ3N0ciAiICAgU2FsdGFuZG8gYWwgc2lndWllbnRlIFxcbiIKKworI34gbXNnaWQgIiAgIFNraXBwaW5nIHRvIG5leHQgJWMiCisjfiBtc2dzdHIgIiAgIFNhbHRhbmRvIGFsIHNpZ3VpZW50ZSAlYyIKKworI34gbXNnaWQgInVudGVybWluYXRlZCBzdHJpbmciCisjfiBtc2dzdHIgImNhZGVuYSBzaW4gdGVybWluYXIiCisKKyN+IG1zZ2lkICIlcyBpcyBpbnZhbGlkIgorI34gbXNnc3RyICIlcyBubyBlcyB24WxpZG8iCisKKyN+IG1zZ2lkICJ1bnRlcm1pbmF0ZWQgYCV7JyBkZWZpbml0aW9uIgorI34gbXNnc3RyICJkZWZpbmljafNuIGAleycgc2luIHRlcm1pbmFyIgorCisjfiBtc2dpZCAiUHJlbWF0dXJlIEVPRiBhZnRlciAlcyIKKyN+IG1zZ3N0ciAiRU9GIHByZW1hdHVybyBkZXNwdelzIGRlICVzIgorCisjfiBtc2dpZCAiYCVzJyBpcyBpbnZhbGlkIGluICVzIgorI34gbXNnc3RyICJgJXMnIG5vIGVzIHbhbGlkbyBlbiAlcyIKKworI34gbXNnaWQgIiV0eXBlIGRlY2xhcmF0aW9uIGhhcyBubyA8dHlwZW5hbWU+IgorI34gbXNnc3RyICJsYSBkZWNsYXJhY2nzbiAldHlwZSBubyB0aWVuZSA8bm9tYnJlLXRpcG8+IgorCisjfiBtc2dpZCAiaW52YWxpZCAlJXR5cGUgZGVjbGFyYXRpb24gZHVlIHRvIGl0ZW06ICVzIgorI34gbXNnc3RyICJkZWNsYXJhY2nzbiBkZSAlJXR5cGUgbm8gduFsaWRhIGRlYmlkbyBhbCDtdGVtOiAlcyIKKworIyBVbmEgY29ycmVjY2nzbiBtZW5vcjogZW4gcmVhbGlkYWQsIGBzaG91bGQnIGVzIGVsIHBhc2FkbyB5IGNvbmRpY2lvbmFsCisjIGRlICJ0byBtdXN0IiB5IGFxde0gc2UgZW1wbGVhIGVuIHN1IGZvcm1hIGNvbmRpY2lvbmFsLiBQb3IgZXNvLCBoZQorIyBjYW1iaWFkbyBgZGViZScgcG9yIGBkZWJlcu1hJyAtIGNsbAorIyBhaO0gbWUgaGFzIHBpbGxhZG8gZW4gdW4gb2x2aWRvIGRlbCBpbmds6XMgLSBuZ3AKKyN+IG1zZ2lkICJpbnZhbGlkIHRleHQgKCVzKSAtIG51bWJlciBzaG91bGQgYmUgYWZ0ZXIgaWRlbnRpZmllciIKKyN+IG1zZ3N0ciAiIgorI34gInRleHRvIG5vIHbhbGlkbyAoJXMpIC0gZWwgbvptZXJvIGRlYmVy7WEgZXN0YXIgZGVzcHXpcyBkZWwgaWRlbnRpZmljYWRvciIKKworIyBDYW1iaW8gZWwgb3JkZW4geSBlbCBzZXhvLiBBaG9yYSBlc3ThICJlbiBlc3Bh8W9sIi4gc3YKKyN+IG1zZ2lkICJ1bm1hdGNoZWQgJXMiCisjfiBtc2dzdHIgIiVzIGRlc2VtcGFyZWphZG8vYSIKKworI34gbXNnaWQgImFyZ3VtZW50IG9mICUlZXhwZWN0IGlzIG5vdCBhbiBpbnRlZ2VyIgorI34gbXNnc3RyICJlbCBhcmd1bWVudG8gZGUgJSVleHBlY3Qgbm8gZXMgdW4gZW50ZXJvIgorCisjIE5vIHRlIHJlY29taWVuZG8gcXVlIGVtcGxlZXMgcGFydGljaXBpb3MgcGFyYSBleHByZXNhciBhY2Npb25lcyAooXNpCisjIG1lIG95ZXJhIG1pIGFudGlndWEgcHJvZmVzb3JhIGRlIGxlbmd1YSwgbGxvcmFy7WEgZGUgZW1vY2nzbiEgOikuIEVuCisjIHZleiBkZSBlc28sIGVtcGxlYSBsYXMgY29uanVnYWNpb25lcyBoYWJpdHVhbGVzLCBxdWUgcGFyYSBlc28gZXN04W4gOikKKyMgLSBjbGwKKyMgb2sgLSBuZ3AKKyMKKyN+IG1zZ2lkICJ1bnJlY29nbml6ZWQgaXRlbSAlcywgZXhwZWN0ZWQgYW4gaWRlbnRpZmllciIKKyN+IG1zZ3N0ciAibm8gc2UgcmVjb25vY2UgZWwg7XRlbSAlcywgc2UgZXNwZXJhYmEgdW4gaWRlbnRpZmljYWRvciIKKworI34gbXNnaWQgImV4cGVjdGVkIHN0cmluZyBjb25zdGFudCBpbnN0ZWFkIG9mICVzIgorI34gbXNnc3RyICJzZSBlc3BlcmFiYSB1bmEgY2FkZW5hIGNvbnN0YW50ZSBlbiBsdWdhciBkZSAlcyIKKworI34gbXNnaWQgIm5vIGlucHV0IGdyYW1tYXIiCisjfiBtc2dzdHIgIm5vIGhheSBncmFt4XRpY2EgZGUgZW50cmFkYSIKKworI34gbXNnaWQgImlsbC1mb3JtZWQgcnVsZTogaW5pdGlhbCBzeW1ib2wgbm90IGZvbGxvd2VkIGJ5IGNvbG9uIgorI34gbXNnc3RyICJyZWdsYSBtYWwgZm9ybWFkYTogZWwgc+1tYm9sbyBpbmljaWFsIG5vIGVzdOEgc2VndWlkbyBwb3IgOiIKKworI34gbXNnaWQgImdyYW1tYXIgc3RhcnRzIHdpdGggdmVydGljYWwgYmFyIgorI34gbXNnc3RyICJsYSBncmFt4XRpY2EgY29taWVuemEgY29uIHVuYSBiYXJyYSB2ZXJ0aWNhbCIKKworI34gbXNnaWQgInByZXZpb3VzIHJ1bGUgbGFja3MgYW4gZW5kaW5nIGA7JyIKKyN+IG1zZ3N0ciAiYSBsYSByZWdsYSBwcmV2aWEgbGUgZmFsdGEgdW4gYDsnIGFsIGZpbmFsIgorCisjfiBtc2dpZCAidHdvIEBwcmVjJ3MgaW4gYSByb3ciCisjfiBtc2dzdHIgImRvcyBAcHJlYyBlbiB1bmEgbO1uZWEiCisKKyMgSW5zaXN0bywgZWwgZW1wbGVvIGRlIHBhcnRpY2lwaW9zIGEgc2VjYXMgbWUgcGFyZWNlIGNvbW8gaGFibGFyIGVuCisjIGluZGlvLiBQb3IgZmF2b3IsIHBlcm3tdGVtZSBxdWUgYfFhZGEgdW4gImVzdOEiIDopIC0gY2xsCisjIG9rIC0gbmdwCisjfiBtc2dpZCAiJSVndWFyZCBwcmVzZW50IGJ1dCAlJXNlbWFudGljX3BhcnNlciBub3Qgc3BlY2lmaWVkIgorI34gbXNnc3RyICIlJWd1YXJkIHByZXNlbnRlIHBlcm8gJSVzZW1hbnRpY19wYXJzZXIgZXN04SBzaW4gZXNwZWNpZmljYXIiCisKKyN+IG1zZ2lkICJ0d28gYWN0aW9ucyBhdCBlbmQgb2Ygb25lIHJ1bGUiCisjfiBtc2dzdHIgImRvcyBhY2Npb25lcyBhbCBmaW5hbCBkZSB1bmEgcmVnbGEiCisKKyMg2m5pY2FtZW50ZSBjYW1iaW8gbGEgcG9zaWNp824gZGVsIGFkamV0aXZvIGBt4XhpbW8nLiBFbiB2ZXogZGUgZGVzcHXpcworIyBkZSBgdGFibGEnLCBkZXNwdelzIGRlIGB0YW1h8W8nIC0gY2xsCisjIGVuIGluZ2zpcyBlcmEgYXPtLCBwZXJvIHF1aXrhcyBlbiBlc3Bh8W9sIHNlYSBtZWpvciBjb21vIGRpY2VzCisjIG5ncAorIworI34gbXNnaWQgIm1heGltdW0gdGFibGUgc2l6ZSAoJWQpIGV4Y2VlZGVkIgorI34gbXNnc3RyICJleGNlZGlkbyBlbCB0YW1h8W8gbeF4aW1vIGRlIGxhIHRhYmxhICglZCkiCisKKyN+IG1zZ2lkICIgICAgJCAgIFx0Z28gdG8gc3RhdGUgJWRcbiIKKyN+IG1zZ3N0ciAiICAgICQgICBcdGlyIGFsIGVzdGFkbyAlZFxuIgorCisjIFRhbCB2ZXogcHVlZGEgcGFyZWNlciBwZWRhbnRlLCBwZXJvIGBpbmNvbmNsdXNhJyBtZSBzdWVuYSBtdWNo7XNpbW8KKyMgbWVqb3IgcXVlIGBzaW4gdGVybWluYXInIHF1ZSBtZSBwYXJlY2UgbeFzICJjb21wdXRlcml6YWRvIiAtIGNsbAorIyBxdWl64XMgdW4gcG9jbyBjYWNvZvNuaWNvIGxvIGRlIGNsYfpzdWxhIGluY29uY2x1c2EgLSBuZ3AKKyMKKyN+IG1zZ2lkICJ1bnRlcm1pbmF0ZWQgJWd1YXJkIGNsYXVzZSIKKyN+IG1zZ3N0ciAiY2zhdXN1bGEgJWd1YXJkIHNpbiB0ZXJtaW5hciIKZGlmZiAtLWdpdCBhL3BvL2V0LmdtbyBiL3BvL2V0LmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTAyMjA4Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vZXQuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2V0LnBvIGIvcG8vZXQucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMzMmMxNwotLS0gL2Rldi9udWxsCisrKyBiL3BvL2V0LnBvCkBAIC0wLDAgKzEsMTE3MiBAQAorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgYmlzb24gcGFja2FnZS4KKyMgRXN0b25pYW4gdHJhbnNsYXRpb25zIGZvciBiaXNvbi4KKyMgQ29weXJpZ2h0IChDKSAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUb29tYXMgU29vbWUgPFRvb21hcy5Tb29tZUBtaWNyb2xpbmsuZWU+LCAyMDEyLgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYmlzb24gMi42LjkwXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTItMTItMDggMTk6MjArMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogVG9vbWFzIFNvb21lIDxUb29tYXMuU29vbWVAbWljcm9saW5rLmVlPlxuIgorIkxhbmd1YWdlLVRlYW06IEVzdG9uaWFuIDxsaW51eC1lZUBsaXN0cy5lZW5ldC5lZT5cbiIKKyJMYW5ndWFnZTogZXRcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xNVxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDgtYml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IHNyYy9jb21wbGFpbi5jOjEyMCBzcmMvY29tcGxhaW4uYzoxMzEgc3JjL2NvbXBsYWluLmM6MTQwIHNyYy9jb21wbGFpbi5jOjE4OAorIzogc3JjL2NvbXBsYWluLmM6MTk4Cittc2dpZCAid2FybmluZyIKK21zZ3N0ciAiaG9pYXR1cyIKKworIzogc3JjL2NvbXBsYWluLmM6MTUxIHNyYy9jb21wbGFpbi5jOjE2MCBzcmMvY29tcGxhaW4uYzoxNjcKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAidmlnYSIKKworIzogc3JjL2NvbXBsYWluLmM6MjA4IHNyYy9jb21wbGFpbi5jOjIxNQorbXNnaWQgImZhdGFsIGVycm9yIgorbXNnc3RyICJmYXRhYWxuZSB2aWdhIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgc2hpZnQiCittc2dzdHIgIiAgICBLb25mbGlrdCByZWVnbGkgJWQgamEgbeRyZ2kgJXMgdmFoZWwgbGFoZW5kYXR1ZCBuaWhrZWdhIgorCisjOiBzcmMvY29uZmxpY3RzLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgcmVkdWNlIgorbXNnc3RyICIgICAgS29uZmxpa3QgcmVlZ2xpICVkIGphIG3kcmdpICVzIHZhaGVsIGxhaGVuZGF0dWQgcmVkdXRzZWVyaW1pc2VnYSIKKworIzogc3JjL2NvbmZsaWN0cy5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIGFuIGVycm9yIgorbXNnc3RyICIgICAgS29uZmxpa3QgcmVlZ2xpICVkIGphIG3kcmdpICVzIHZhaGVsIGxhaGVuZGF0dWQgdmVhbmEiCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCBzaGlmdC9yZWR1Y2UsICVkIHJlZHVjZS9yZWR1Y2VcbiIKK21zZ3N0ciAiIgorImtvbmZsaWt0aWQ6ICVkIG5paHV0YW1pbmUvcmVkdXRzZWVyaW1pbmUsICVkIHJlZHV0c2VlcmltaW5lL3JlZHV0c2VlcmltaW5lXG4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCBzaGlmdC9yZWR1Y2VcbiIKK21zZ3N0ciAia29uZmxpa3RpZDogICVkIG5paHV0YW1pbmUvcmVkdXRzZWVyaW1pbmVcbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdHM6ICVkIHJlZHVjZS9yZWR1Y2VcbiIKK21zZ3N0ciAia29uZmxpa3RpZDogJWQgcmVkdXRzZWVyaW1pbmUvcmVkdXRzZWVyaW1pbmVcbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdGF0ZSAlZCAiCittc2dzdHIgIk9sZWsgJWQgIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlZXhwZWN0LXJyIGFwcGxpZXMgb25seSB0byBHTFIgcGFyc2VycyIKK21zZ3N0ciAiJSVleHBlY3QtcnIgcHV1ZHV0YWIgYWludWx0IEdMUiBwYXJzZXJlaWQiCisKKyM6IHNyYy9jb25mbGljdHMuYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJleHBlY3RlZCAlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIgorbXNnc3RyWzBdICJlZWxkYXNpbWUgJWQgbmlodXRhbWluZS9yZWR1dHNlZXJpbWluZSBrb25mbGlrdGkiCittc2dzdHJbMV0gImVlbGRhc2ltZSAlZCBuaWh1dGFtaW5lL3JlZHV0c2VlcmltaW5lIGtvbmZsaWt0aSIKKworIzogc3JjL2NvbmZsaWN0cy5jOjYyMQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCAlZCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJleHBlY3RlZCAlZCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAiZWVsZGFzaW4gJWQgcmVkdXRzZWVyaW1pbmUvcmVkdXRzZWVyaW1pbmUga29uZmxpa3RpIgorbXNnc3RyWzFdICJlZWxkYXNpbiAlZCByZWR1dHNlZXJpbWluZS9yZWR1dHNlZXJpbWluZSBrb25mbGlrdGkiCisKKyM6IHNyYy9maWxlcy5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IG9wZW4iCittc2dzdHIgIiVzOiBlaSBzYWEgYXZhZGEiCisKKyM6IHNyYy9maWxlcy5jOjEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnB1dC9vdXRwdXQgZXJyb3IiCittc2dzdHIgInNpc2VuZC925GxqdW5kIHZpZ2EiCisKKyM6IHNyYy9maWxlcy5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2UgZmlsZSIKK21zZ3N0ciAiZmFpbGkgZWkg9W5uZXN0dSBzdWxnZWRhIgorCisjOiBzcmMvZmlsZXMuYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gb3ZlcndyaXRlIHRoZSBpbnB1dCBmaWxlICVzIgorbXNnc3RyICJrZWVsZHVuIHNpc2VuZGZhaWxpICVzIPxsZSBraXJqdXRhbWFzdCIKKworIzogc3JjL2ZpbGVzLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0aW5nIG91dHB1dHMgdG8gZmlsZSAlcyIKK21zZ3N0ciAia29uZmxpa3RzZWQgduRsanVuZGlkIGZhaWxpICVzIgorCisjOiBzcmMvZ2V0YXJncy5jOjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCittc2dzdHIgIkxpc2FpbmZvIHNhYW1pc2VrcyBwcm9vdmlnZSBgJXMgLS1oZWxwJy5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFtPUFRJT05dLi4uIEZJTEVcbiIKK21zZ3N0ciAiS2FzdXRhOiAlcyBbVtVUSV0uLi5GQUlMXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzAyCittc2dpZCAiIgorIkdlbmVyYXRlIGEgZGV0ZXJtaW5pc3RpYyBMUiBvciBnZW5lcmFsaXplZCBMUiAoR0xSKSBwYXJzZXIgZW1wbG95aW5nXG4iCisiTEFMUigxKSwgSUVMUigxKSwgb3IgY2Fub25pY2FsIExSKDEpIHBhcnNlciB0YWJsZXMuICBJRUxSKDEpIGFuZFxuIgorImNhbm9uaWNhbCBMUigxKSBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkdlbmVyZWVyaSBkZXRlcm1pbmVlcml0dWQgTFIgdvVpIPxsZGlzdGF0dWQgTFIgKEdMUikgcGFyc2VyIGthc3V0YWRlc1xuIgorIkxBTFIoMSksIElFTFIoMSkgdvVpIGthbm9vbmlsaXNpIExSKDEpIHBhcnNlcmkgdGFiZWxlaWQuICBJRUxSKDEpIGphXG4iCisia2Fub29uaWxpc2UgTFIoMSkgdHVnaSBvbiBla3NwZXJpbWVudGFhbG5lLlxuIgorIlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwOQorbXNnaWQgIiIKKyJNYW5kYXRvcnkgYXJndW1lbnRzIHRvIGxvbmcgb3B0aW9ucyBhcmUgbWFuZGF0b3J5IGZvciBzaG9ydCBvcHRpb25zIHRvby5cbiIKK21zZ3N0ciAiIgorIktvaHVzdHVzbGlrdWQgYXJndW1lbmRpZCBwaWtrYWRlbGUgdvV0bWV0ZWxlIG9uIGtvaHVzdHVzbGlrdXMga2EgIgorImz8aGlrZXN0ZWxlLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMxMgorbXNnaWQgIlRoZSBzYW1lIGlzIHRydWUgZm9yIG9wdGlvbmFsIGFyZ3VtZW50cy5cbiIKK21zZ3N0ciAiU2FtYSBrYSBtaXR0ZWtvaHVzdHVzbGlrZSBhcmd1bWVudGlkZSBrb3JyYWwuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzE2Cittc2dpZCAiIgorIlxuIgorIk9wZXJhdGlvbiBtb2RlczpcbiIKKyIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCisiICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorIiAgICAgIC0tcHJpbnQtbG9jYWxlZGlyICAgICAgb3V0cHV0IGRpcmVjdG9yeSBjb250YWluaW5nIGxvY2FsZS1kZXBlbmRlbnQgIgorImRhdGFcbiIKKyIgICAgICAtLXByaW50LWRhdGFkaXIgICAgICAgIG91dHB1dCBkaXJlY3RvcnkgY29udGFpbmluZyBza2VsZXRvbnMgYW5kIFhTTFRcbiIKKyIgIC15LCAtLXlhY2MgICAgICAgICAgICAgICAgIGVtdWxhdGUgUE9TSVggWWFjY1xuIgorIiAgLVcsIC0td2FybmluZ3NbPUNBVEVHT1JZXSAgcmVwb3J0IHRoZSB3YXJuaW5ncyBmYWxsaW5nIGluIENBVEVHT1JZXG4iCisiICAtZiwgLS1mZWF0dXJlWz1GRUFUVVJFXSAgICBhY3RpdmF0ZSBtaXNjZWxsYW5lb3VzIGZlYXR1cmVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJU9vZtb29kaWQ6XG4iCisiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICBlc2l0YSBzZWUgYWJpaW5mbyBqYSBs9XBldGEgdPb2XG4iCisiICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICBlc2l0YSB2ZXJzaW9vbmlpbmZvIGphIGz1cGV0YSB09vZcbiIKKyIgICAgICAtLXByaW50LWxvY2FsZWRpciAgICAgIGVzaXRhIGxva2FhZGkgaW5mb3Qgc2lzYWxkYXZhIGthdGFsb29naSBuaW1pXG4iCisiICAgICAgLS1wcmludC1kYXRhZGlyICAgICAgICBlc2l0YSBza2VsZXR0aWRlIGphIFhTTFQga2F0YWxvb2dpIG5pbWlcbiIKKyIgIC15LCAtLXlhY2MgICAgICAgICAgICAgICAgIGVtdWxlZXJpIFBPU0lYIHlhY2NcbiIKKyIgIC1XLCAtLXdhcm5pbmdzWz1LQVRFR09PUklBXSByYXBvcnRlZXJpIGFudHVkIGthdGVnb29yaWEgaG9pYXR1c2lcbiIKKyIgIC1mLCAtLWZlYXR1cmVbPU9NQURVU10gICAgIGFrdGl2ZWVyaSBtdWlkIG9tYWR1c2lcbiIKKworIzogc3JjL2dldGFyZ3MuYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnNlcjpcbiIKKyIgIC1MLCAtLWxhbmd1YWdlPUxBTkdVQUdFICAgICAgICAgIHNwZWNpZnkgdGhlIG91dHB1dCBwcm9ncmFtbWluZyBsYW5ndWFnZVxuIgorIiAgLVMsIC0tc2tlbGV0b249RklMRSAgICAgICAgICAgICAgc3BlY2lmeSB0aGUgc2tlbGV0b24gdG8gdXNlXG4iCisiICAtdCwgLS1kZWJ1ZyAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50IHRoZSBwYXJzZXIgZm9yIGRlYnVnZ2luZ1xuIgorIiAgICAgIC0tbG9jYXRpb25zICAgICAgICAgICAgICAgICAgZW5hYmxlIGxvY2F0aW9uIHN1cHBvcnRcbiIKKyIgIC1ELCAtLWRlZmluZT1OQU1FWz1WQUxVRV0gICAgICAgIHNpbWlsYXIgdG8gJyVkZWZpbmUgTkFNRSBcIlZBTFVFXCInXG4iCisiICAtRiwgLS1mb3JjZS1kZWZpbmU9TkFNRVs9VkFMVUVdICBvdmVycmlkZSAnJWRlZmluZSBOQU1FIFwiVkFMVUVcIidcbiIKKyIgIC1wLCAtLW5hbWUtcHJlZml4PVBSRUZJWCAgICAgICAgIHByZXBlbmQgUFJFRklYIHRvIHRoZSBleHRlcm5hbCBzeW1ib2xzXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXByZWNhdGVkIGJ5ICctRGFwaS5wcmVmaXg9UFJFRklYJ1xuIgorIiAgLWwsIC0tbm8tbGluZXMgICAgICAgICAgICAgICAgICAgZG9uJ3QgZ2VuZXJhdGUgJyNsaW5lJyBkaXJlY3RpdmVzXG4iCisiICAtaywgLS10b2tlbi10YWJsZSAgICAgICAgICAgICAgICBpbmNsdWRlIGEgdGFibGUgb2YgdG9rZW4gbmFtZXNcbiIKK21zZ3N0ciAiIgorIlBhcnNlcjpcbiIKKyIgIC1MLCAtLWxhbmd1YWdlPUtFRUwgICAgICAgIG3k5HJhIHbkbGp1ZGkgcHJvZ3JhbW1lZXJpbWlzZSBrZWVsXG4iCisiICAtUywgLS1za2VsZXRvbj1GQUlMICAgICAgICBrYXN1dGF0YXZhIHNrZWxldGkga2lyamVsZHVzXG4iCisiICAtdCwgLS1kZWJ1ZyAgICAgICAgICAgICAgICB2YXJ1c3RhIHBhcnNlciBzaWx1bWlzaW5mb2dhXG4iCisiICAgICAgLS1sb2NhdGlvbnMgICAgICAgICAgICBsdWJhIGFzdWtvaHRhZGUgYXJ2ZXN0YW1pbmVcbiIKKyIgIC1ELCAtLWRlZmluZT1OSU1JWz1WxMRSVFVTXSBzYW1hIGt1aSAnJWRlZmluZSBOSU1JIFxcXCJWxMRSVFVTXFxcIidcbiIKKyIgIC1GLCAtLWZvcmNlLWRlZmluZT1OSU1JWz1WxMRSVFVTXSBraXJqdXRhICclZGVmaW5lIE5JTUkgXFxcIlbExFJUVVNcXFwiJyAiCisi/GxlXG4iCisiICAtcCwgLS1uYW1lLXByZWZpeD1QUkVGSUtTICBsaXNhIHbkbGlzc/xtYm9saXRlIG5pbWVkZWxlIFBSRUZJS1NcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthc3V0YWdlIHNlbGxlIGFzZW1lbCAnLURhcGkucHJlZml4PVBSRUZJS1MnXG4iCisiICAtbCwgLS1uby1saW5lcyAgICAgICAgICAgICDkcmEgZ2VuZXJlZXJpICcjbGluZScgZGlyZWt0aWl2ZVxuIgorIiAgLW4sIC0tbm8tcGFyc2VyICAgICAgICAgICAgZ2VuZXJlZXJpIGFpbnVsdCB0YWJlbGlkXG4iCisiICAtaywgLS10b2tlbi10YWJsZSAgICAgICAgICBsaXNhIGthIHP8bWJvbGl0ZSBuaW1lZGUgdGFiZWxcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNDYKK21zZ2lkICIiCisiT3V0cHV0OlxuIgorIiAgICAgIC0tZGVmaW5lc1s9RklMRV0gICAgICAgYWxzbyBwcm9kdWNlIGEgaGVhZGVyIGZpbGVcbiIKKyIgIC1kICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2V3aXNlIGJ1dCBjYW5ub3Qgc3BlY2lmeSBGSUxFIChmb3IgUE9TSVggIgorIllhY2MpXG4iCisiICAtciwgLS1yZXBvcnQ9VEhJTkdTICAgICAgICBhbHNvIHByb2R1Y2UgZGV0YWlscyBvbiB0aGUgYXV0b21hdG9uXG4iCisiICAgICAgLS1yZXBvcnQtZmlsZT1GSUxFICAgICB3cml0ZSByZXBvcnQgdG8gRklMRVxuIgorIiAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgc2FtZSBhcyBgLS1yZXBvcnQ9c3RhdGUnXG4iCisiICAtYiwgLS1maWxlLXByZWZpeD1QUkVGSVggICBzcGVjaWZ5IGEgUFJFRklYIGZvciBvdXRwdXQgZmlsZXNcbiIKKyIgIC1vLCAtLW91dHB1dD1GSUxFICAgICAgICAgIGxlYXZlIG91dHB1dCB0byBGSUxFXG4iCisiICAtZywgLS1ncmFwaFs9RklMRV0gICAgICAgICBhbHNvIG91dHB1dCBhIGdyYXBoIG9mIHRoZSBhdXRvbWF0b25cbiIKKyIgIC14LCAtLXhtbFs9RklMRV0gICAgICAgICAgIGFsc28gb3V0cHV0IGFuIFhNTCByZXBvcnQgb2YgdGhlIGF1dG9tYXRvblxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoZSBYTUwgc2NoZW1hIGlzIGV4cGVyaW1lbnRhbClcbiIKK21zZ3N0ciAiIgorIlbkbGp1bmQ6XG4iCisiICAgICAgLS1kZWZpbmVzWz1GQUlMXSAgICAgICBsb28ga2EgcORpc2ZhaWxcbiIKKyIgIC1kICAgICAgICAgICAgICAgICAgICAgICAgIHNhbWEsIGFnYSBmYWlsaSBuaW1lIGVpIHNhYSBt5ORyYXRhIChQT1NJWCAiCisiWWFjYylcbiIKKyIgIC1yLCAtLXJlcG9ydD1BU0pBRCAgICAgICAgIHbkbGphc3RhIGF1dG9tYWFkaSBrb2h0YSBzZWxnaXR1c2lcbiIKKyIgICAgICAtLXJlcG9ydC1maWxlPUZBSUwgICAgIGtpcmp1dGEgcmFwb3J0IGZhaWxpXG4iCisiICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgICBzYW1hLCBrdWkgYC0tcmVwb3J0PXN0YXRlJ1xuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg9UFJFRklLUyAga2FzdXRhIHbkbGp1bmRmYWlsaWRlIG5pbWVkZXMgUFJFRklLU2l0XG4iCisiICAtbywgLS1vdXRwdXQ9RkFJTCAgICAgICAgICBq5HRhIHbkbGp1bmQgRkFJTGlcbiIKKyIgIC1nLCAtLWdyYXBoICAgICAgICAgICAgICAgIGxvbyBhdXRvbWFhZGkga2lyamVsZHVzIGdyYWFmaW5hXG4iCisiICAteCwgLS14bWxbPUZBSUxdICAgICAgICAgICBsb28gYXV0b21hYWRpIFhNTCByYXBvcnRcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChYTUwgc2tlZW0gb24gZWtzcGVyaW1lbnRhYWxuZSlcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNjEKK21zZ2lkICIiCisiV2FybmluZyBjYXRlZ29yaWVzIGluY2x1ZGU6XG4iCisiICBgbWlkcnVsZS12YWx1ZXMnICB1bnNldCBvciB1bnVzZWQgbWlkcnVsZSB2YWx1ZXNcbiIKKyIgIGB5YWNjJyAgICAgICAgICAgIGluY29tcGF0aWJpbGl0aWVzIHdpdGggUE9TSVggWWFjY1xuIgorIiAgYGNvbmZsaWN0cy1zcicgICAgUy9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGNvbmZsaWN0cy1ycicgICAgUi9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGRlcHJlY2F0ZWQnICAgICAgb2Jzb2xldGUgY29uc3RydWN0c1xuIgorIiAgYG90aGVyJyAgICAgICAgICAgYWxsIG90aGVyIHdhcm5pbmdzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgYWxsJyAgICAgICAgICAgICBhbGwgdGhlIHdhcm5pbmdzXG4iCisiICBgbm8tQ0FURUdPUlknICAgICB0dXJuIG9mZiB3YXJuaW5ncyBpbiBDQVRFR09SWVxuIgorIiAgYG5vbmUnICAgICAgICAgICAgdHVybiBvZmYgYWxsIHRoZSB3YXJuaW5nc1xuIgorIiAgYGVycm9yJyAgICAgICAgICAgdHJlYXQgd2FybmluZ3MgYXMgZXJyb3JzXG4iCittc2dzdHIgIiIKKyJIb2lhdHVzdGUga2F0ZWdvb3JpYWQgb24gauRyZ25ldmFkOlxuIgorIiAgYG1pZHJ1bGUtdmFsdWVzJyAgc2VhZG1hdGEgdvVpIGthc3V0YW1hdGEgdmFoZXJlZWdsaXRlIHbk5HJ0dXNlZFxuIgorIiAgYHlhY2MnICAgICAgICAgICAgbWl0dGX8aGlsZHV2dXNlZCBQT1NJWCBZYWNjIHN1aHRlc1xuIgorIiAgYGNvbmZsaWN0cy1zcicgICAgUy9SIGtvbmZsaWt0aWQgKHZhaWtpbWlzaSlcbiIKKyIgIGBjb25mbGljdHMtcnInICAgIFIvUiBrb25mbGlrdGlkICh2YWlraW1pc2kpXG4iCisiICBgZGVwcmVjYXRlZCcgICAgICBhZWd1bnVkIGtvbnN0cnVrdHNpb29uaWRcbiIKKyIgIGBvdGhlcicgICAgICAgICAgIGv1aWsgbXV1ZCBob2lhdHVzZWQgKHZhaWtpbWlzaSlcbiIKKyIgIGBhbGwnICAgICAgICAgICAgIGv1aWsgaG9pYXR1c2VkXG4iCisiICBgbm8tQ0FURUdPUlknICAgICBrZWVsYSBhbnR1ZCBrYXRlZ29vcmlhIGhvaWF0dXNlZFxuIgorIiAgYG5vbmUnICAgICAgICAgICAga2VlbGEga/VpayBob2lhdHVzZWRcbiIKKyIgIGBlcnJvcicgICAgICAgICAgIGvkc2l0bGUgaG9pYXR1c2kgdmlnYWRlbmFcbiIKKyJcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNzYKK21zZ2lkICIiCisiVEhJTkdTIGlzIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMgdGhhdCBjYW4gaW5jbHVkZTpcbiIKKyIgIGBzdGF0ZScgICAgICAgIGRlc2NyaWJlIHRoZSBzdGF0ZXNcbiIKKyIgIGBpdGVtc2V0JyAgICAgIGNvbXBsZXRlIHRoZSBjb3JlIGl0ZW0gc2V0cyB3aXRoIHRoZWlyIGNsb3N1cmVcbiIKKyIgIGBsb29rYWhlYWQnICAgIGV4cGxpY2l0bHkgYXNzb2NpYXRlIGxvb2thaGVhZCB0b2tlbnMgdG8gaXRlbXNcbiIKKyIgIGBzb2x2ZWQnICAgICAgIGRlc2NyaWJlIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMgc29sdmluZ1xuIgorIiAgYGFsbCcgICAgICAgICAgaW5jbHVkZSBhbGwgdGhlIGFib3ZlIGluZm9ybWF0aW9uXG4iCisiICBgbm9uZScgICAgICAgICBkaXNhYmxlIHRoZSByZXBvcnRcbiIKK21zZ3N0ciAiIgorIkFTSkFEIG9uIGxvZW5kIGtvbWFkZWdhIGVyYWxkYXR1ZCBq5HJnbmV2YWlkIHP1bnU6XG4iCisiICBgc3RhdGUnICAgICAgICBvbGVrdXRlIGtpcmplbGR1c1xuIgorIiAgYGl0ZW1zZXQnICAgICAgdORpZW5kYSBw9WhpbGlzaSBlbGVtZW50ZSBuZW5kZSBzdWx1bmRpdGVnYVxuIgorIiAgYGxvb2stYWhlYWQnICAgc2VvIGV0dGV2YWF0YW1pc2VkIGVsZW1lbnRpZGVnYVxuIgorIiAgYHNvbHZlZCcgICAgICAga2lyamVsZGEgbmlodXRhL3JlZHV0c2Vlcmkga29uZmxpa3RpZGUgbGFoZW5kYW1pc2lcbiIKKyIgIGBhbGwnICAgICAgICAgIGtvZ3Ug/GxhbHRvb2R1ZCBpbmZvXG4iCisiICBgbm9uZScgICAgICAgICBibG9rZWVyaSByYXBvcnRcbiIKKworIzogc3JjL2dldGFyZ3MuYzozODcKK21zZ2lkICIiCisiRkVBVFVSRSBpcyBhIGxpc3Qgb2YgY29tbWEgc2VwYXJhdGVkIHdvcmRzIHRoYXQgY2FuIGluY2x1ZGU6XG4iCisiICBgY2FyZXQnICAgICAgICBzaG93IGVycm9ycyB3aXRoIGNhcmV0c1xuIgorIiAgYGFsbCcgICAgICAgICAgYWxsIG9mIHRoZSBhYm92ZVxuIgorIiAgYG5vbmUnICAgICAgICAgZGlzYWJsZSBhbGwgb2YgdGhlIGFib3ZlXG4iCisiICAiCittc2dzdHIgIiIKKyJPTUFEVVMgb24ga29tYWRlZ2EgZXJhbGRhdHVkIGrkcmduZXZhdGUgc/VuYWRlIGxvZW5kOlxuIgorIiAgYGNhcmV0JyAgICAgICAgbeRyZ2kgdmVhZCBz/G1ib2xpZ2EgXlxuIgorIiAgYGFsbCcgICAgICAgICAga/VpayD8bGFsdG9vZHVkXG4iCisiICBgbm9uZScgICAgICAgICBibG9rZWVyaSBr9WlrIPxsYWx0b29kdWRcbiIKKyIgICIKKworIzogc3JjL2dldGFyZ3MuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKK21zZ3N0ciAiVGVhdGFnZSBwYWx1biB2aWdhZGVzdCBhYWRyZXNzaWwgPCVzPi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaG9tZSBwYWdlOiA8JXM+LlxuIgorbXNnc3RyICIlcyBrb2R1bGVodDogPCVzPi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozOTcKK21zZ2lkICJHZW5lcmFsIGhlbHAgdXNpbmcgR05VIHNvZnR3YXJlOiA8aHR0cDovL3d3dy5nbnUub3JnL2dldGhlbHAvPi5cbiIKK21zZ3N0ciAi3GxkaW5lIGFiaWluZm8gR05VIHRhcmt2YXJhIGtvaHRhOiA8aHR0cDovL3d3dy5nbnUub3JnL2dldGhlbHAvPi5cbiIKKworIy4gVFJBTlNMQVRPUlM6IFJlcGxhY2UgTEFOR19DT0RFIGluIHRoaXMgVVJMIHdpdGggeW91ciBsYW5ndWFnZQorIy4gY29kZSA8aHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS9MQU5HX0NPREUuaHRtbD4gdG8KKyMuIGZvcm0gb25lIG9mIHRoZSBVUkxzIGF0IGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vLgorIy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRoZSBlbnRpcmUgVVJMIHdpdGggeW91ciB0cmFuc2xhdGlvbiB0ZWFtJ3MKKyMuIGVtYWlsIGFkZHJlc3MuCisjOiBzcmMvZ2V0YXJncy5jOjQxMAorbXNnaWQgIlJlcG9ydCB0cmFuc2xhdGlvbiBidWdzIHRvIDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtLz4uXG4iCittc2dzdHIgIiIKKyJU9WxrZXZpZ2FkZXN0IHRlYXRhZ2UgcGFsdW4gYWFkcmVzc2lsIDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtLyIKKyI+LlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQxMgorbXNnaWQgIkZvciBjb21wbGV0ZSBkb2N1bWVudGF0aW9uLCBydW46IGluZm8gYmlzb24uXG4iCittc2dzdHIgIlTkaWVsaWt1IGRva3VtZW50YXRzaW9vbmkgbHVnZW1pc2VrcyBr5Gl2aXRhZ2U6IGluZm8gYmlzb24uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImJpc29uIChHTlUgQmlzb24pICVzIgorbXNnc3RyICJiaXNvbiAoR05VIEJpc29uKSAlcyIKKworIzogc3JjL2dldGFyZ3MuYzo0MzAKK21zZ2lkICJXcml0dGVuIGJ5IFJvYmVydCBDb3JiZXR0IGFuZCBSaWNoYXJkIFN0YWxsbWFuLlxuIgorbXNnc3RyICJLaXJqdXRhbnVkIFJvYmVydCBDb3JiZXR0IGphIFJpY2hhcmQgU3RhbGxtYW4uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcHlyaWdodCAoQykgJWQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCittc2dzdHIgIkF1dG9yafVpZ3VzIKkgJWQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDM3Cittc2dpZCAiIgorIlRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PXG4iCisid2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuXG4iCittc2dzdHIgIiIKKyJTZWUgb24gdmFiYSB0YXJrdmFyYTsga29wZWVyaW1pc3RpbmdpbXVzZWQgbGVpYXRlIGzkaHRldGVrc3RpZGVzdC4gR2FyYW50aWlcbiIKKyJQVVVEVUI7IGthIG38/Gdpa3MgdvVpIG1pbmdpbCBlZXNt5HJnaWwga2FzdXRhbWlzZWtzLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSBza2VsZXRvbiBkZWNsYXJhdGlvbnMgYXJlIGludmFsaWQiCittc2dzdHIgImtvcmR1dmFkIHNrZWxldGkgZGVrbGFyYXRzaW9vbmlkIGVpIG9sZSBsdWJhdHVkIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBsYW5ndWFnZSIKK21zZ3N0ciAiJXM6IHZpZ2FuZSBrZWVsIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ3OQorbXNnaWQgIm11bHRpcGxlIGxhbmd1YWdlIGRlY2xhcmF0aW9ucyBhcmUgaW52YWxpZCIKK21zZ3N0ciAia29yZHV2YWQga2VlbGUgZGVrbGFyYXRzaW9vbmlkIGVpIG9sZSBsdWJhdHVkIgorCisjOiBzcmMvZ2V0YXJncy5jOjc0NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogbWlzc2luZyBvcGVyYW5kIgorbXNnc3RyICIlczogcHV1ZHViIG9wZXJhbmQiCisKKyM6IHNyYy9nZXRhcmdzLmM6NzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dHJhIG9wZXJhbmQgJXMiCittc2dzdHIgImxpaWduZSBvcGVyYW5kICVzIgorCisjOiBzcmMvZ3JhbS5jOjExMgorbXNnaWQgImVtcHR5IgorbXNnc3RyICJ0/GhpIgorCisjOiBzcmMvZ3JhbS5jOjIwMQorbXNnaWQgIkdyYW1tYXIiCittc2dzdHIgIkdyYW1tYXRpa2EiCisKKyM6IHNyYy9ncmFwaHZpei5jOjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIvLyBHZW5lcmF0ZWQgYnkgJXMuXG4iCisiLy8gUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKKyIvLyBIb21lIHBhZ2U6IDwlcz4uXG4iCisiXG4iCittc2dzdHIgIiIKKyIvLyBHZW5lcmVlcmlzICVzLlxuIgorIi8vIFZpZ2FkZXN0IHRlYXRhZ2UgPCVzPi5cbiIKKyIvLyBLb2R1bGVodDogPCVzPi5cbiIKKyJcbiIKKworIzogc3JjL2xvY2F0aW9uLmM6OTMgc3JjL3NjYW4tZ3JhbS5sOjg1OQorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lIG51bWJlciBvdmVyZmxvdyIKK21zZ3N0ciAicmVhIG51bWJyaSD8bGV05Gl0dW1pbmUiCisKKyM6IHNyYy9sb2NhdGlvbi5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbHVtbiBudW1iZXIgb3ZlcmZsb3ciCittc2dzdHIgInZlZXJ1IG51bWJyaSD8bGV05Gl0dW1pbmUiCisKKyM6IHNyYy9tYWluLmM6MTQ2Cittc2dpZCAicnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzIgorbXNnc3RyICJyZWVnZWwgb24ga29uZmxpa3RpZGUgdPV0dHUga2FzdXR1IgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlJWRlZmluZSB2YXJpYWJsZSAlcyByZWRlZmluZWQiCittc2dzdHIgIiUlZGVmaW5lIG11dXR1amEgJXMgZGVrbGFyZWVyaXRpIHV1ZXN0aSIKKworIzogc3JjL211c2NsZS10YWIuYzo0NTMKK21zZ2lkICJwcmV2aW91cyBkZWZpbml0aW9uIgorbXNnc3RyICJlZWxtaW5lIGRla2xhcmF0c2lvb24iCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NDkwIHNyYy9tdXNjbGUtdGFiLmM6NTA0IHNyYy9tdXNjbGUtdGFiLmM6NTU2CisjOiBzcmMvbXVzY2xlLXRhYi5jOjYyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5kZWZpbmVkICUlZGVmaW5lIHZhcmlhYmxlICVzIgorbXNnc3RyICIlczogZGVmaW5lZXJpbWF0YSAlJWRlZmluZSBtdXV0dWphICVzIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlJWRlZmluZSBCb29sZWFuIHZhcmlhYmxlICVzIgorbXNnc3RyICJ2aWdhbmUgJSVkZWZpbmUgdPVlduTkcnR1cyBtdXV0dWphICVzIHbk5HJ0dXMiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjA5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICUlZGVmaW5lIHZhcmlhYmxlICVzOiAlcyIKK21zZ3N0ciAidmlnYW5lIHbk5HJ0dXMgJSVkZWZpbmUgbXV1dHVqYWxlICVzOiAlcyIKKworIzogc3JjL211c2NsZS10YWIuYzo2MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWNjZXB0ZWQgdmFsdWU6ICVzIgorbXNnc3RyICJsdWJhdHVkIHbk5HJ0dXM6ICVzIgorCisjOiBzcmMvcGFyc2UtZ3JhbS55Ojc0NworIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGlkZW50aWZpZXIgaW4gcGFyYW1ldGVyIGRlY2xhcmF0aW9uIgorbXNnc3RyICJwYXJhbWVldHJpIGRla2xhcmF0c2lvb25pcyBwdXVkdWIgaWRlbnRpZmlrYWF0b3IiCisKKyM6IHNyYy9wcmludC5jOjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiB0eXBlICVkIGlzICVzXG4iCittc2dzdHIgIiB0/PxwICVkIG9uICVzXG4iCisKKyM6IHNyYy9wcmludC5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICJzaGlmdCwgYW5kIGdvIHRvIHN0YXRlICVkXG4iCittc2dzdHIgIm5paHV0YSBqYSBsaWlndSBvbGVrdWxlICVkXG4iCisKKyM6IHNyYy9wcmludC5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJnbyB0byBzdGF0ZSAlZFxuIgorbXNnc3RyICJsaWlndSBvbGVrdWxlICVkXG4iCisKKyM6IHNyYy9wcmludC5jOjIwMworbXNnaWQgImVycm9yIChub25hc3NvY2lhdGl2ZSlcbiIKK21zZ3N0ciAidmlnYSAobWl0dGVhc3NvdHNpYXRpaXZuZSlcbiIKKworIzogc3JjL3ByaW50LmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZHVjZSB1c2luZyBydWxlICVkICglcykiCittc2dzdHIgInJlZHV0c2VlcmluIGthc3V0YWRlcyByZWVnbGl0ICVkICglcykiCisKKyM6IHNyYy9wcmludC5jOjIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJhY2NlcHQiCittc2dzdHIgIm71dXN0dW4iCisKKyM6IHNyYy9wcmludC5jOjI2NCBzcmMvcHJpbnQuYzozMzgKK21zZ2lkICIkZGVmYXVsdCIKK21zZ3N0ciAiJGRlZmF1bHQiCisKKyM6IHNyYy9wcmludC5jOjM3MyBzcmMvcHJpbnRfZ3JhcGguYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJTdGF0ZSAlZCIKK21zZ3N0ciAiT2xlayAlZCIKKworIzogc3JjL3ByaW50LmM6NDA5Cittc2dpZCAiVGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyIgorbXNnc3RyICJUZXJtaW5hbGlkLCBrb29zIHJlZWdsaXRlZ2Ega3VzIG5hZCBpbG11dmFkIgorCisjOiBzcmMvcHJpbnQuYzo0MzYKK21zZ2lkICJOb250ZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIiCittc2dzdHIgIk1pdHRldGVybWluYWxpZCwga29vcyByZWVnbGl0ZWdhIGt1cyBuYWQgaWxtdXZhZCIKKworIzogc3JjL3ByaW50LmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiBsZWZ0OiIKK21zZ3N0ciAiIHZhc2FrdWw6IgorCisjOiBzcmMvcHJpbnQuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uIHJpZ2h0OiIKK21zZ3N0ciAiIHBhcmVtYWw6IgorCisjOiBzcmMvcHJpbnQuYzo1MTAKK21zZ2lkICJSdWxlcyB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzIgorbXNnc3RyICJSZWVnbGlkIG9uIHBhcnNlcmlzIGtvbmZsaWt0aWRlIHT1dHR1IGthc3V0dWQiCisKKyM6IHNyYy9yZWFkZXIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSAlcyBkZWNsYXJhdGlvbnMiCittc2dzdHIgImtvcmR1dmFkICVzIGRla2xhcmF0c2lvb25pZCIKKworIzogc3JjL3JlYWRlci5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJyZXN1bHQgdHlwZSBjbGFzaCBvbiBtZXJnZSBmdW5jdGlvbiAlczogPCVzPiAhPSA8JXM+IgorbXNnc3RyICJ0dWxlbXVzZSB0/PxiaWtvbmZsaWt0IG1lc3RpbWlzZSBmdW5rdHNpb29uaXMgJXM6IDwlcz4gIT0gPCVzPiIKKworIzogc3JjL3JlYWRlci5jOjEzOSBzcmMvc3ltdGFiLmM6MTU2IHNyYy9zeW10YWIuYzoxNjYgc3JjL3N5bXRhYi5jOjkzOAorIzogc3JjL3N5bXRhYi5jOjk1MyBzcmMvc3ltdGFiLmM6OTY4IHNyYy9zeW10YWIuYzo5ODMKK21zZ2lkICJwcmV2aW91cyBkZWNsYXJhdGlvbiIKK21zZ3N0ciAiZWVsbWluZSBkZWtsYXJhdHNpb29uIgorCisjOiBzcmMvcmVhZGVyLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZWQgc3ltYm9sIG5hbWUgZm9yICVzIGlnbm9yZWQiCittc2dzdHIgImlnbm9yZWVyaW4gZHVibGVlcml0dWQgc/xtYm9saSBuaW1lICVzIgorCisjOiBzcmMvcmVhZGVyLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bGUgZ2l2ZW4gZm9yICVzLCB3aGljaCBpcyBhIHRva2VuIgorbXNnc3RyICIlcyBqYW9rcyBvbiBhbnR1ZCByZWVnZWwsIGFnYSBzZWUgb24gbeRyayIKKworIzogc3JjL3JlYWRlci5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ0eXBlIGNsYXNoIG9uIGRlZmF1bHQgYWN0aW9uOiA8JXM+ICE9IDwlcz4iCittc2dzdHIgInZhaWtpbWlzaSB0ZWdldnVzZSB0/PxiaWtvbmZsaWt0OiA8JXM+ICE9IDwlcz4iCisKKyM6IHNyYy9yZWFkZXIuYzozMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgcnVsZSBmb3IgdHlwZWQgbm9udGVybWluYWwsIGFuZCBubyBhY3Rpb24iCittc2dzdHIgInT8/GJpZ2EgbWl0dGV0ZXJtaW5hbGlsIG9uIHT8aGkgcmVlZ2VsIGphIHB1dWR1YiB0ZWdldnVzIgorCisjOiBzcmMvcmVhZGVyLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNlZCB2YWx1ZTogJCVkIgorbXNnc3RyICJrYXN1dGFtYXRhIHbk5HJ0dXM6ICQlZCIKKworIzogc3JjL3JlYWRlci5jOjMzMAorbXNnaWQgInVuc2V0IHZhbHVlOiAkJCIKK21zZ3N0ciAic2VhZG1hdGEgduTkcnR1czogJCQiCisKKyM6IHNyYy9yZWFkZXIuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9rZW4gZm9yICUlcHJlYyBpcyBub3QgZGVmaW5lZDogJXMiCittc2dzdHIgIiUlcHJlYyBt5HJnZW5kIGVpIG9sZSBkZWZpbmVlcml0dWQ6ICVzIgorCisjOiBzcmMvcmVhZGVyLmM6NDMxIHNyYy9yZWFkZXIuYzo0NDUgc3JjL3JlYWRlci5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5IG9uZSAlcyBhbGxvd2VkIHBlciBydWxlIgorbXNnc3RyICJyZWVnbGlzIG9uIGx1YmF0dWQgYWludWx0IPxrcyAlcyIKKworIzogc3JjL3JlYWRlci5jOjQ0MSBzcmMvcmVhZGVyLmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFmZmVjdHMgb25seSBHTFIgcGFyc2VycyIKK21zZ3N0ciAiJXMgcHV1ZHV0YWIgYWludWx0IEdMUiBwYXJzZXJlaWQiCisKKyM6IHNyYy9yZWFkZXIuYzo0NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgbXVzdCBiZSBmb2xsb3dlZCBieSBwb3NpdGl2ZSBudW1iZXIiCittc2dzdHIgIiVzIGrkcmVsIHBlYWIgb2xlbWEgcG9zaXRpaXZuZSBudW1iZXIiCisKKyM6IHNyYy9yZWFkZXIuYzo1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVsZSBpcyB0b28gbG9uZyIKK21zZ3N0ciAicmVlZ2VsIG9uIGxpaWdhIHBpa2siCisKKyM6IHNyYy9yZWFkZXIuYzo2NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcnVsZXMgaW4gdGhlIGlucHV0IGdyYW1tYXIiCittc2dzdHIgInNpc2VuZGdyYW1tYXRpa2FzIHBvbGUgcmVlZ2xlaWQiCisKKyM6IHNyYy9yZWR1Y2UuYzoyNDEKK21zZ2lkICJydWxlIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAicmVlZ2VsIGVpIG9sZSBncmFtbWF0aWthcyBrYXN1dGF0YXYiCisKKyM6IHNyYy9yZWR1Y2UuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiAlcyIKK21zZ3N0ciAibWl0dGV0ZXJtaW5hbCBvbiBncmFtbWF0aWthcyBrYXN1dHU6ICVzIgorCisjOiBzcmMvcmVkdWNlLmM6MzUwCittc2dpZCAiTm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAiTWl0dGV0ZXJtaW5hbGlkIGVpIG9sZSBncmFtbWF0aWthcyBrYXN1dGF0YXZhZCIKKworIzogc3JjL3JlZHVjZS5jOjM2MworbXNnaWQgIlRlcm1pbmFscyB1bnVzZWQgaW4gZ3JhbW1hciIKK21zZ3N0ciAiR3JhbW1hdGlrYXMgbWl0dGUga2FzdXRhdHVkIHRlcm1pbmFsaWQiCisKKyM6IHNyYy9yZWR1Y2UuYzozNzIKK21zZ2lkICJSdWxlcyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgIkdyYW1tYXRpa2FzIGthc3V0dWQgcmVlZ2xpZCIKKworIzogc3JjL3JlZHVjZS5jOjM4NQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dpZF9wbHVyYWwgIiVkIG5vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHJbMF0gIiVkIGdyYW1tYXRpa2FzIGthc3V0dSBtaXR0ZXRlcm1pbmFsIgorbXNnc3RyWzFdICIlZCBncmFtbWF0aWthcyBrYXN1dHV0IG1pdHRldGVybWluYWxpIgorCisjOiBzcmMvcmVkdWNlLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnaWRfcGx1cmFsICIlZCBydWxlcyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHJbMF0gIiVkIGdyYW1tYXRpa2FzIGthc3V0dSByZWVnZWwiCittc2dzdHJbMV0gIiVkIGdyYW1tYXRpa2FzIGthc3V0dXQgcmVlZ2xpdCIKKworIzogc3JjL3JlZHVjZS5jOjQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydCBzeW1ib2wgJXMgZG9lcyBub3QgZGVyaXZlIGFueSBzZW50ZW5jZSIKK21zZ3N0ciAic3RhcmRpc/xtYm9saXN0ICVzIGVpIHR1bGV0YXRhIPxodGVnaSBsYXVzZXQiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYXkgJyVzJyIKK21zZ3N0ciAibGlpZ25lICclcyciCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyMjkKK21zZ2lkICJhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZSIKK21zZ3N0ciAidGVnZXZ1c2Uga29vZGkgbPVwdXMgdvVpYiBvbGxhIHZhamEgJzsnIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjMyCittc2dpZCAiZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnIgorbXNnc3RyICJCaXNvbmkgdXVlbWFkIHZlcnNpb29uaWQgZWkgbGlzYSAnOyciCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNlIG9mIFlZRkFJTCwgd2hpY2ggaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIgorbXNnc3RyICJZWUZBSUwga2FzdXRhbWluZSBlaSBvbGUgc29vdml0YXRhdiBqYSBlZW1hbGRhdGFrc2UiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0MzEgc3JjL3NjYW4tY29kZS5sOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcnMgdG86ICVjJXMgYXQgJXMiCittc2dzdHIgInZpaXRhYjogJWMlcyBrb2hhbCAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NzaWJseSBtZWFudDogJWMiCittc2dzdHIgImFydmF0YXZhc3RpIG31ZWxkaTogJWMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCBoaWRpbmcgJWMiCittc2dzdHIgIiwgcGVpZGFiICVjIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiBhdCAlcyIKK21zZ3N0ciAiIGtvaGFsICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiwgY2Fubm90IGJlIGFjY2Vzc2VkIGZyb20gbWlkLXJ1bGUgYWN0aW9uIGF0ICQlZCIKK21zZ3N0ciAiLCBlaSBzYWEgdmFoZSByZWVnbGkgdGVnZXZ1c2VsIGthc3V0YWRhIGtvaGFsICQlZCIKKworIzogc3JjL3NjYW4tY29kZS5sOjUyMSBzcmMvc2Nhbi1ncmFtLmw6NzgzCisjLCBjLWZvcm1hdAorbXNnaWQgImludGVnZXIgb3V0IG9mIHJhbmdlOiAlcyIKK21zZ3N0ciAibnVtYmVyIHBpaXJpZGVzdCB25GxqYXM6ICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAidmlnYW5lIHZpaWRlOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IgYWZ0ZXIgJyVjJywgZXhwZWN0aW5nIGludGVnZXIsIGxldHRlciwgJ18nLCAnWycsIG9yICckJyIKK21zZ3N0ciAic/xudGFrc2kgdmlnYSBwZWFsZSAnJWMnLCBvb3RhbiBudW1icml0LCB05Gh0ZSwgJ18nLCAnWycgdvVpICckJyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb24gYmVmb3JlICQlZDogJS4qcyIKK21zZ3N0ciAic/xtYm9sIHB1dWR1YiBwcm9kdWt0c2lvb25pcyAkJWQgZWVzOiAlLipzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjMzCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogJS4qcyIKK21zZ3N0ciAic/xtYm9sIHB1dWR1YiBwcm9kdWt0c2lvb25pczogJS4qcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNsZWFkaW5nIHJlZmVyZW5jZTogJXMiCittc2dzdHIgInNlZ2FkdXN0IHRla2l0YXYgdmlpZGU6ICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImFtYmlndW91cyByZWZlcmVuY2U6ICVzIgorbXNnc3RyICJzZWdhbmUgdmlpZGU6ICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGxpY2l0IHR5cGUgZ2l2ZW4gaW4gdW50eXBlZCBncmFtbWFyIgorbXNnc3RyICJ0/PxwaW1hdGEgZ3JhbW1hdGlrYXMga2FzdXRhdGkga29ua3JlZXRzZXQgdPz8cGkiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJCQgZm9yIHRoZSBtaWRydWxlIGF0ICQlZCBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiJCQgdmFoZXJlZWdsaXMga29oYWwgJCVkICclcycgZWkgb21hIGRla2xhcmVlcml0dWQgdPz8cGkiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJCQgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiQkIG3kcmdpbCAnJXMnIGVpIG9tYSBkZWtsYXJlZXJpdHVkIHT8/HBpIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiQlcyBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiJCVzIG3kcmdpbCAnJXMnIGVpIG9tYSBkZWtsYXJlZXJpdHVkIHT8/HBpIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmF5ICcsJyB0cmVhdGVkIGFzIHdoaXRlIHNwYWNlIgorbXNnc3RyICJr5HNpdGxlbiBqdWh1c2xpa2t1ICcsJyBrdWkgdPxoaWt1dCIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRpcmVjdGl2ZTogJXMiCittc2dzdHIgInZpZ2FuZSBqdWh1czogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudGlmaWVyOiAlcyIKK21zZ3N0ciAidmlnYW5lIGlkZW50aWZpa2FhdG9yOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjI5NQorbXNnaWQgImludmFsaWQgY2hhcmFjdGVyIgorbXNnaWRfcGx1cmFsICJpbnZhbGlkIGNoYXJhY3RlcnMiCittc2dzdHJbMF0gInZpZ2FuZSBz/G1ib2wiCittc2dzdHJbMV0gInZpZ2FzZWQgc/xtYm9saWQiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBpZGVudGlmaWVyIGluIGJyYWNrZXRlZCBuYW1lOiAlcyIKK21zZ3N0ciAibnVya3N1bGd1ZGVzIG5pbWVzIG9uIGVlb3RhbWF0dSBpZGVudGlmaWthYXRvcjogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW4gaWRlbnRpZmllciBleHBlY3RlZCIKK21zZ3N0ciAib29kYXRpIGlkZW50aWZpa2FhdG9yaXQiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozODEKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciBpbiBicmFja2V0ZWQgbmFtZSIKK21zZ2lkX3BsdXJhbCAiaW52YWxpZCBjaGFyYWN0ZXJzIGluIGJyYWNrZXRlZCBuYW1lIgorbXNnc3RyWzBdICJ2aWdhbmUgc/xtYm9sIHN1bGd1ZGVnYSBuaW1lcyIKK21zZ3N0clsxXSAidmlnYXNlZCBz/G1ib2xpZCBzdWxndWRlZ2EgbmltZXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo0ODEgc3JjL3NjYW4tZ3JhbS5sOjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBjaGFyYWN0ZXIgbGl0ZXJhbCIKK21zZ3N0ciAidPxoaSBz/G1ib2wgbGl0ZXJhYWwiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo0ODYgc3JjL3NjYW4tZ3JhbS5sOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJleHRyYSBjaGFyYWN0ZXJzIGluIGNoYXJhY3RlciBsaXRlcmFsIgorbXNnc3RyICJsaWlnc2VkIHP8bWJvbGlkIHP8bWJvbCBsaXRlcmFhbGlzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVsbCBjaGFyYWN0ZXIiCittc2dzdHIgInZpZ2FuZSBudWxsIHP8bWJvbCIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjUzMSBzcmMvc2Nhbi1ncmFtLmw6NTQxIHNyYy9zY2FuLWdyYW0ubDo1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgYWZ0ZXIgXFwtZXNjYXBlOiAlcyIKK21zZ3N0ciAidmlnYW5lIG51bWJlciBwZWFsZSBcXC1qYWRhOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjU3MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciBhZnRlciBcXC1lc2NhcGU6ICVzIgorbXNnc3RyICJ2aWdhbmUgc/xtYm9sIHBlYWxlIFxcLWphZGE6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6OTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgJXMgYXQgZW5kIG9mIGZpbGUiCittc2dzdHIgImZhaWxpIGz1cHVzIHB1dWR1YiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjkxMgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzIGF0IGVuZCBvZiBsaW5lIgorbXNnc3RyICJyZWEgbPVwdXMgcHV1ZHViICVzIgorCisjOiBzcmMvc2Nhbi1za2VsLmw6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuY2xvc2VkICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAic2tlbGV0aXMgb24gc3VsZ2VtYXRhICVzIGRpcmVrdGlpdiIKKworIzogc3JjL3NjYW4tc2tlbC5sOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gZmV3IGFyZ3VtZW50cyBmb3IgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICJza2VsZXRpcyBvbiAlcyBkaXJla3RpaXZpbGUgbGlpZ2EgduRoZSBhcmd1bWVudGUiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGZvciAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iCittc2dzdHIgInNrZWxldGlzIG9uICVzIGRpcmVrdGlpdmlsZSBsaWlnYSBwYWxqdSBhcmd1bWVudGUiCisKKyM6IHNyYy9zeW1saXN0LmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJCB2YWx1ZTogJCVkIgorbXNnc3RyICJ2aWdhbmUgJCB25ORydHVzOiAkJWQiCisKKyM6IHNyYy9zeW10YWIuYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJQT1NJWCBZYWNjIGZvcmJpZHMgZGFzaGVzIGluIHN5bWJvbCBuYW1lczogJXMiCittc2dzdHIgIlBPU0lYIFlhY2Mga2VlbGFiIGtyaWlwc3VkIHP8bWJvbGl0ZSBuaW1lZGVzOiAlcyIKKworIzogc3JjL3N5bXRhYi5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IHN5bWJvbHMgaW4gaW5wdXQgZ3JhbW1hciAobGltaXQgaXMgJWQpIgorbXNnc3RyICJzaXNlbmRncmFtbWF0aWthcyBvbiBsaWlnYSBwYWxqdSBz/G1ib2xlaWQgKHBpaXJhbmcgb24gJWQpIgorCisjOiBzcmMvc3ltdGFiLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICIlcyB1dWVzdGkgZGVrbGFyZWVyaW1pbmUgJXMgamFva3MiCisKKyM6IHNyYy9zeW10YWIuYzoxNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVkZWNsYXJhdGlvbiBmb3IgPCVzPiIKK21zZ3N0ciAiJXMgZGVrbGFyZWVyaXRpIDwlcz4gamFva3MgdXVlc3RpIgorCisjOiBzcmMvc3ltdGFiLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyByZWRlZmluZWQiCittc2dzdHIgInP8bWJvbCAlcyBvbiB1dWVzdGkgZGVmaW5lZXJpdHVkIgorCisjOiBzcmMvc3ltdGFiLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyByZWRlY2xhcmVkIgorbXNnc3RyICJz/G1ib2wgJXMgb24gdXVlc3RpIGRla2xhcmVlcml0dWQiCisKKyM6IHNyYy9zeW10YWIuYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWZpbmluZyB1c2VyIHRva2VuIG51bWJlciBvZiAlcyIKK21zZ3N0ciAiJXMga2FzdXRhamEgbeRyZ2kgbnVtYnJpIHV1ZXN0aSBkZWZpbmVlcmltaW5lIgorCisjOiBzcmMvc3ltdGFiLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyBpcyB1c2VkLCBidXQgaXMgbm90IGRlZmluZWQgYXMgYSB0b2tlbiBhbmQgaGFzIG5vIHJ1bGVzIgorbXNnc3RyICIiCisia2FzdXRhdGFrc2Ugc/xtYm9saXQgJXMsIG1pcyBlaSBvbGUgZGVmaW5lZXJpdHVkIG3kcmdpbmEgamEgbWlsbGVsIHB1dWR1dmFkICIKKyJyZWVnbGlkIgorCisjOiBzcmMvc3ltdGFiLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyB1c2VkIG1vcmUgdGhhbiBvbmNlIGFzIGEgbGl0ZXJhbCBzdHJpbmciCittc2dzdHIgInP8bWJvbGl0ICVzIG9uIGthc3V0YXR1ZCBlbmFtIGt1aSBrb3JkIGxpdGVyYWFsIHP1bmVuYSIKKworIzogc3JjL3N5bXRhYi5jOjQxOAorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgZ2l2ZW4gbW9yZSB0aGFuIG9uZSBsaXRlcmFsIHN0cmluZyIKK21zZ3N0ciAic/xtYm9saWxlICVzIG9uIGFudHVkIGVuYW0ga3VpIPxrcyBsaXRlcmFhbCBz9W5lIgorCisjOiBzcmMvc3ltdGFiLmM6NTM1CisjLCBjLWZvcm1hdAorbXNnaWQgInVzZXIgdG9rZW4gbnVtYmVyICVkIHJlZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICJrYXN1dGFqYSBt5HJnaSBudW1iZXIgJWQgdXVlc3RpIGRla2xhcmVlcmltaW5lICVzIGphb2tzIgorCisjOiBzcmMvc3ltdGFiLmM6NTM5CisjLCBjLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIGRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAiJXMgZWVsbWluZSBkZWtsYXJhdHNpb29uIgorCisjOiBzcmMvc3ltdGFiLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBzdGFydCBzeW1ib2wgJXMgaXMgdW5kZWZpbmVkIgorbXNnc3RyICJzdGFyZGlz/G1ib2wgJXMgZWkgb2xlIGRlZmluZWVyaXR1ZCIKKworIzogc3JjL3N5bXRhYi5jOjkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgc3RhcnQgc3ltYm9sICVzIGlzIGEgdG9rZW4iCittc2dzdHIgInN0YXJkaXP8bWJvbCAlcyBvbiBt5HJrIgorCisjOiBzcmMvc3ltdGFiLmM6OTM1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICUlZGVzdHJ1Y3RvciIKK21zZ3N0ciAidmFpa2ltaXNpIG3kcmdpdHVkICUlZGVzdHJ1Y3RvciB1dWVzdGkgZGVrbGFyZWVyaW1pbmUiCisKKyM6IHNyYy9zeW10YWIuYzo5NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdsZXNzICUlZGVzdHJ1Y3RvciIKK21zZ3N0ciAidmFpa2ltaXNpIG3kcmtpbWF0YSAlJWRlc3RydWN0b3IgdXVlc3RpIGRla2xhcmVlcmltaW5lIgorCisjOiBzcmMvc3ltdGFiLmM6OTY1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICUlcHJpbnRlciIKK21zZ3N0ciAidmFpa2ltaXNpIG3kcmdpdHVkICUlcHJpbnRlciB1dWVzdGkgZGVrbGFyZWVyaW1pbmUiCisKKyM6IHNyYy9zeW10YWIuYzo5ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdsZXNzICUlcHJpbnRlciIKK21zZ3N0ciAidmFpa2ltaXNpIG3kcmtpbWF0YSAlJXByaW50ZXIgdXVlc3RpIGRla2xhcmVlcmltaW5lIgorCisjOiBkamdwcC9zdWJwaXBlLmM6NjMgZGpncHAvc3VicGlwZS5jOjI4NiBkamdwcC9zdWJwaXBlLmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92aW5nIG9mICclcycgZmFpbGVkIgorbXNnc3RyICInJXMnIGVlbWFsZGFtaW5lIGViYfVubmVzdHVzIgorCisjOiBkamdwcC9zdWJwaXBlLmM6ODUgZGpncHAvc3VicGlwZS5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNyZWF0aW9uIG9mIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICJhanV0aXNlIGZhaWxpIGxvb21pbmUgZWJh9W5uZXN0dXMiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAic2F2aW5nIHN0ZGluIGZhaWxlZCIKK21zZ3N0ciAic3RhbmRhcmRzaXNlbmRpIHNhbHZlc3RhbWluZSBlYmH1bm5lc3R1cyIKKworIzogZGpncHAvc3VicGlwZS5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJzYXZpbmcgc3Rkb3V0IGZhaWxlZCIKK21zZ3N0ciAic3RhbmRhcmR25GxqdW5kaSBzYWx2ZXN0YW1pbmUgZWJh9W5uZXN0dXMiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxNTMgZGpncHAvc3VicGlwZS5jOjE5NyBkamdwcC9zdWJwaXBlLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZW5pbmcgb2YgdG1wZmlsZSBmYWlsZWQiCittc2dzdHIgImFqdXRpc2UgZmFpbGkgYXZhbWluZSBlYmH1bm5lc3R1cyIKKworIzogZGpncHAvc3VicGlwZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBiaXNvbidzIHN0ZG91dCB0byB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICJiaXNvbmkgduRsanVuZGkgc3V1bmFtaW5lIGFqdXRpc3NlIGZhaWxpIGViYfVubmVzdHVzIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIG00J3Mgc3RkaW4gZnJvbSB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICJhanV0aXNlc3QgZmFpbGlzdCBtNCBzaXNlbmRpIHNlYWRtaW5lIGViYfVubmVzdHVzIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZW5pbmcgb2YgYSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgImFqdXRpc2UgZmFpbGkgYXZhbWluZSBlYmH1bm5lc3R1cyIKKworIzogZGpncHAvc3VicGlwZS5jOjIxOAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBtNCdzIHN0ZG91dCB0byBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAibTQgduRsanVuZGkgYWp1dGlzc2UgZmFpbGkgc3V1bmFtaW5lIGViYfVubmVzdHVzIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSAnJXMnIGludGVycnVwdGVkIgorbXNnc3RyICJsaXNhcHJvZ3JhbW0gJyVzJyBrYXRrZXN0YXRpIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAibGlzYXByb2dyYW1taSAnJXMnIGVpIG9sZSIKKworIzogZGpncHAvc3VicGlwZS5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBiaXNvbidzIHN0ZGluIGZyb20gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiYmlzb25pIHNpc2VuZGkgc2VhZG1pbmUgYWp1dGlzZXN0IGZhaWxpc3QgZWJh9W5uZXN0dXMiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGFyZ3VtZW50ICVzIGZvciAlcyIKK21zZ3N0ciAidmlnYW5lIGFyZ3VtZW50ICVzICVzJ2xlIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIGFyZ3VtZW50ICVzIGZvciAlcyIKK21zZ3N0ciAic2VnYW5lIGFyZ3VtZW50ICVzICVzJ2xlIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxNTMKK21zZ2lkICJWYWxpZCBhcmd1bWVudHMgYXJlOiIKK21zZ3N0ciAiTHViYXR1ZCBhcmd1bWVuZGlkIG9uOiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfYWxsb2NzLCAldSBmcmVlZCAoJS4yZiUlKS5cbiIKK21zZ3N0ciAiJXUgYml0c2V0X2FsbG9jcywgJXUgdmFiYXN0YXR1ZCAoJS4yZiUlKS5cbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfc2V0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF9zZXRzLCAldSBwdWh2ZXJkYXR1ZCAoJS4yZiUlKVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9yZXNldHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorbXNnc3RyICIldSBiaXRzZXRfcmVzZXRzLCAldSBwdWh2ZXJkYXR1ZCAoJS4yZiUlKVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF90ZXN0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF90ZXN0cywgJXUgcHVodmVyZGF0dWQgKCUuMmYlJSlcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfbGlzdHNcbiIKK21zZ3N0ciAiJXUgYml0c2V0X2xpc3RzXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTIKK21zZ2lkICJjb3VudCBsb2cgaGlzdG9ncmFtXG4iCittc2dzdHIgImxvZW5kdXJpIGxvZ2kgaGlzdG9ncmFtbVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTk1Cittc2dpZCAic2l6ZSBsb2cgaGlzdG9ncmFtXG4iCittc2dzdHIgInN1dXJ1c3RlIGxvZ2kgaGlzdG9ncmFtbVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTk4Cittc2dpZCAiZGVuc2l0eSBoaXN0b2dyYW1cbiIKK21zZ3N0ciAidGloZWR1c2UgaGlzdG9ncmFtbVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCaXRzZXQgc3RhdGlzdGljczpcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkJpdHNldCBzdGF0aXN0aWthOlxuIgorIlxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkFjY3VtdWxhdGVkIHJ1bnMgPSAldVxuIgorbXNnc3RyICJTYWx2ZXN0YXR1ZCBs5GJpbWlzaSA9ICV1XG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyNTkgbGliL2JpdHNldF9zdGF0cy5jOjI2NAorbXNnaWQgImNhbm5vdCByZWFkIHN0YXRzIGZpbGUiCittc2dzdHIgInN0YXRpc3Rpa2EgZmFpbGkgZWkgc2FhIGx1Z2VkYSIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgc3RhdHMgZmlsZSBzaXplXG4iCittc2dzdHIgInZpZ2FuZSBzdGF0aXN0aWthIGZhaWxpIHN1dXJ1cy5cbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI4NyBsaWIvYml0c2V0X3N0YXRzLmM6Mjg5Cittc2dpZCAiY2Fubm90IHdyaXRlIHN0YXRzIGZpbGUiCittc2dzdHIgInN0YXRpc3Rpa2EgZmFpbGkgZWkgc2FhIGtpcmp1dGFkYSIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI5MgorbXNnaWQgImNhbm5vdCBvcGVuIHN0YXRzIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgInN0YXRpc3Rpa2EgZmFpbGkgZWkgc2FhIGtpcmp1dGFtaXNla3MgYXZhZGEiCisKKyM6IGxpYi9jbG9zZW91dC5jOjExMgorbXNnaWQgIndyaXRlIGVycm9yIgorbXNnc3RyICJ2aWdhIGtpcmp1dGFtaXNlbCIKKworIzogbGliL2Vycm9yLmM6MTg4Cittc2dpZCAiVW5rbm93biBzeXN0ZW0gZXJyb3IiCittc2dzdHIgIlR1bmRtYXR1IHP8c3RlZW1pIHZpZ2EiCisKKyM6IGxpYi9nZXRvcHQuYzo1NDcgbGliL2dldG9wdC5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICclcycgaXMgYW1iaWd1b3VzOyBwb3NzaWJpbGl0aWVzOiIKK21zZ3N0ciAiJXM6IHb1dGkgJyVzJyBvbiBzZWdhbmU7IHZhbGlrdWQ6IgorCisjOiBsaWIvZ2V0b3B0LmM6NjI0IGxpYi9nZXRvcHQuYzo2MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLS0lcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogdvV0aSAnLS0lcycgZWkgbHViYSBhcmd1bWVudGlcbiIKKworIzogbGliL2dldG9wdC5jOjYzNyBsaWIvZ2V0b3B0LmM6NjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJyVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IHb1dGkgJyVjJXMnIGVpIGx1YmEgYXJndW1lbnRpXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo2ODUgbGliL2dldG9wdC5jOjcwNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctLSVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogdvV0aSAnLS0lcycgbvV1YWIgYXJndW1lbnRpXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo3NDIgbGliL2dldG9wdC5jOjc0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiAnLS0lcydcbiIKK21zZ3N0ciAiJXM6IHR1bmRtYXR1IHb1dGkgJy0tJXMnXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo3NTMgbGliL2dldG9wdC5jOjc1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiAnJWMlcydcbiIKK21zZ3N0ciAiJXM6IHR1bmRtYXR1IHb1dGkgJyVjJXMnXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo4MDUgbGliL2dldG9wdC5jOjgwOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBvcHRpb24gLS0gJyVjJ1xuIgorbXNnc3RyICIlczogdmlnYW5lIHb1dGkgLS0gJyVjJ1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6ODYxIGxpYi9nZXRvcHQuYzo4NzggbGliL2dldG9wdC5jOjEwODggbGliL2dldG9wdC5jOjExMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAnJWMnXG4iCittc2dzdHIgIiVzOiB29XRpIG71dWFiIGFyZ3VtZW50aSAtLSAnJWMnXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo5MzQgbGliL2dldG9wdC5jOjk1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiVzOiB29XRpICctVyAlcycgb24gc2VnYW5lXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo5NzQgbGliL2dldG9wdC5jOjk5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogdvV0aSAnLVcgJXMnIGVpIGx1YmEgYXJndW1lbnRpXG4iCisKKyM6IGxpYi9nZXRvcHQuYzoxMDEzIGxpYi9nZXRvcHQuYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogdvV0aSAnLVcgJXMnIG71dWFiIGFyZ3VtZW50aVxuIgorCisjOiBsaWIvb2JzdGFjay5jOjQxMyBsaWIvb2JzdGFjay5jOjQxNSBsaWIveGFsbG9jLWRpZS5jOjM0Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAibeRsdSBvbiBvdHNhcyIKKworIzogbGliL3NwYXduLXBpcGUuYzoxNDAgbGliL3NwYXduLXBpcGUuYzoxNDMgbGliL3NwYXduLXBpcGUuYzoyNjQKKyM6IGxpYi9zcGF3bi1waXBlLmM6MjY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZSIKK21zZ3N0ciAidG9ydSBlaSD1bm5lc3R1IGx1dWEiCisKKyM6IGxpYi9zcGF3bi1waXBlLmM6MjM0IGxpYi9zcGF3bi1waXBlLmM6MzQ4IGxpYi93YWl0LXByb2Nlc3MuYzoyODIKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyBmYWlsZWQiCittc2dzdHIgIiVzIGFsYW1wcm90c2VzcyBzYWkgdmVhIgorCisjLiBUUkFOU0xBVE9SUzoKKyMuIEdldCB0cmFuc2xhdGlvbnMgZm9yIG9wZW4gYW5kIGNsb3NpbmcgcXVvdGF0aW9uIG1hcmtzLgorIy4gVGhlIG1lc3NhZ2UgY2F0YWxvZyBzaG91bGQgdHJhbnNsYXRlICJgIiB0byBhIGxlZnQKKyMuIHF1b3RhdGlvbiBtYXJrIHN1aXRhYmxlIGZvciB0aGUgbG9jYWxlLCBhbmQgc2ltaWxhcmx5IGZvcgorIy4gIiciLiAgRm9yIGV4YW1wbGUsIGEgRnJlbmNoIFVuaWNvZGUgbG9jYWwgc2hvdWxkIHRyYW5zbGF0ZQorIy4gdGhlc2UgdG8gVSswMEFCIChMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRQorIy4gUVVPVEFUSU9OIE1BUkspLCBhbmQgVSswMEJCIChSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUKKyMuIFFVT1RBVElPTiBNQVJLKSwgcmVzcGVjdGl2ZWx5LgorIy4KKyMuIElmIHRoZSBjYXRhbG9nIGhhcyBubyB0cmFuc2xhdGlvbiwgd2Ugd2lsbCB0cnkgdG8KKyMuIHVzZSBVbmljb2RlIFUrMjAxOCAoTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspIGFuZAorIy4gVW5pY29kZSBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykuICBJZiB0aGUKKyMuIGN1cnJlbnQgbG9jYWxlIGlzIG5vdCBVbmljb2RlLCBsb2NhbGVfcXVvdGluZ19zdHlsZQorIy4gd2lsbCBxdW90ZSAnbGlrZSB0aGlzJywgYW5kIGNsb2NhbGVfcXVvdGluZ19zdHlsZSB3aWxsCisjLiBxdW90ZSAibGlrZSB0aGlzIi4gIFlvdSBzaG91bGQgYWx3YXlzIGluY2x1ZGUgdHJhbnNsYXRpb25zCisjLiBmb3IgImAiIGFuZCAiJyIgZXZlbiBpZiBVKzIwMTggYW5kIFUrMjAxOSBhcmUgYXBwcm9wcmlhdGUKKyMuIGZvciB5b3VyIGxvY2FsZS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFya3NfaW5fb3RoZXJfbGFuZ3VhZ2VzPgorIy4gYW5kIHVzZSBnbHlwaHMgc3VpdGFibGUgZm9yIHlvdXIgbGFuZ3VhZ2UuCisjOiBsaWIvcXVvdGVhcmcuYzozMTIKK21zZ2lkICJgIgorbXNnc3RyICJgIgorCisjOiBsaWIvcXVvdGVhcmcuYzozMTMKK21zZ2lkICInIgorbXNnc3RyICInIgorCisjOiBsaWIvdGltZXZhci5jOjQ3NQorbXNnaWQgIiIKKyJcbiIKKyJFeGVjdXRpb24gdGltZXMgKHNlY29uZHMpXG4iCittc2dzdHIgIiIKKyJcbiIKKyJU5Gl0bWlzZSBhamFkIChzZWt1bmRpdGVzKVxuIgorCisjOiBsaWIvdGltZXZhci5jOjUyNQorbXNnaWQgIiBUT1RBTCAgICAgICAgICAgICAgICAgOiIKK21zZ3N0ciAiIEtPS0tVICAgICAgICAgICAgICAgICA6IgorCisjOiBsaWIvdGltZXZhci5jOjU2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lIGluICVzOiAlbGQuJTA2bGQgKCVsZCUlKVxuIgorbXNnc3RyICJhZWcgJXM6ICVsZC4lMDZsZCAoJWxkJSUpXG4iCisKKyM6IGxpYi93MzJzcGF3bi5oOjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIl9vcGVuX29zZmhhbmRsZSBmYWlsZWQiCittc2dzdHIgIl9vcGVuX29zZmhhbmRsZSBlYmH1bm5lc3R1cyIKKworIzogbGliL3czMnNwYXduLmg6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlc3RvcmUgZmQgJWQ6IGR1cDIgZmFpbGVkIgorbXNnc3RyICJlaSD1bm5lc3R1IHRhYXN0YWRhIGZhaWxpIHBpZGV0ICVkOiBkdXAyIHNhaSB2ZWEiCisKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzoyMjMgbGliL3dhaXQtcHJvY2Vzcy5jOjI1NSBsaWIvd2FpdC1wcm9jZXNzLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MiCittc2dzdHIgIiVzIGFsYW1wcm90c2VzcyIKKworIzogbGliL3dhaXQtcHJvY2Vzcy5jOjI3NCBsaWIvd2FpdC1wcm9jZXNzLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MgZ290IGZhdGFsIHNpZ25hbCAlZCIKK21zZ3N0ciAiJXMgYWxhbXByb3RzZXNzIHNhaSBmYXRhYWxzZSBzaWduYWFsaSAlZCIKZGlmZiAtLWdpdCBhL3BvL2ZpLmdtbyBiL3BvL2ZpLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjM5OTAxCi0tLSAvZGV2L251bGwKKysrIGIvcG8vZmkuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2ZpLnBvIGIvcG8vZmkucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUyYzk4ZgotLS0gL2Rldi9udWxsCisrKyBiL3BvL2ZpLnBvCkBAIC0wLDAgKzEsMTI0OCBAQAorIyBGaW5uaXNoIG1lc3NhZ2VzIGZvciBiaXNvbi4KKyMgQ29weXJpZ2h0IMKpIDIwMTAsIDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBiaXNvbiBwYWNrYWdlLgorIyBKb3JtYSBLYXJ2b25lbiA8a2Fydm9uZW4uam9ybWFAZ21haWwuY29tPiwgMjAwOS0yMDEyLgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYmlzb24gMi42LjkwXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTItMTItMDkgMTg6NDkrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogSm9ybWEgS2Fydm9uZW4gPGthcnZvbmVuLmpvcm1hQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBGaW5uaXNoIDx0cmFuc2xhdGlvbi10ZWFtLWZpQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZTogZmlcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKyJYLVBvZWRpdC1Cb29rbWFya3M6IDEzNiwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMVxuIgorCisjOiBzcmMvY29tcGxhaW4uYzoxMjAgc3JjL2NvbXBsYWluLmM6MTMxIHNyYy9jb21wbGFpbi5jOjE0MCBzcmMvY29tcGxhaW4uYzoxODgKKyM6IHNyYy9jb21wbGFpbi5jOjE5OAorbXNnaWQgIndhcm5pbmciCittc2dzdHIgInZhcm9pdHVzIgorCisjOiBzcmMvY29tcGxhaW4uYzoxNTEgc3JjL2NvbXBsYWluLmM6MTYwIHNyYy9jb21wbGFpbi5jOjE2NworbXNnaWQgImVycm9yIgorbXNnc3RyICJ2aXJoZSIKKworIzogc3JjL2NvbXBsYWluLmM6MjA4IHNyYy9jb21wbGFpbi5jOjIxNQorbXNnaWQgImZhdGFsIGVycm9yIgorbXNnc3RyICJ2YWthdmEgdmlyaGUiCisKKyMgICh0b2tlbiBpbiBjb21wdXRpbmcpIEFuIGF0b21pYyBwaWVjZSBvZiBkYXRhIChlc3AuIHRoZSB0ZXh0IG9mIGEgY29tcHV0ZXIgcHJvZ3JhbSkgZm9yIHdoaWNoIGEgbWVhbmluZyBtYXkgYmUgaW5mZXJyZWQgZHVyaW5nIHBhcnNpbmcuIEFsc28gY2FsbGVkIGEgc3ltYm9sLgorIyAgKHRva2VuIGluIGNvbXB1dGluZykgQW4gYXRvbWljIHBpZWNlIG9mIGRhdGEsIHN1Y2ggYXMgYSB3b3JkLCBmb3Igd2hpY2ggYSBtZWFuaW5nIG1heSBiZSBpbmZlcnJlZCBkdXJpbmcgcGFyc2luZy4gQWxzbyBjYWxsZWQgYSBzeW1ib2wuCisjOiBzcmMvY29uZmxpY3RzLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgc2hpZnQiCittc2dzdHIgIiIKKyIgICAgU8Okw6RubsO2biAlZCBqYSBtZXJra2lzeW1ib2xpbiAlcyB2w6RsaW5lbiByaXN0aXJpaXRhIG9uIHJhdGthaXN0dSBzaWlydG9uYSIKKworIzogc3JjL2NvbmZsaWN0cy5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIHJlZHVjZSIKK21zZ3N0ciAiIgorIiAgICBTw6TDpG5uw7ZuICVkIGphIG1lcmtraXN5bWJvbGluICVzIHbDpGxpbmVuIHJpc3RpcmlpdGEgb24gcmF0a2Fpc3R1ICIKKyJzdXBpc3RhbWlzZW5hIgorCisjOiBzcmMvY29uZmxpY3RzLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgYW4gZXJyb3IiCittc2dzdHIgIiIKKyIgICAgU8Okw6RubsO2biAlZCBqYSBtZXJra2lzeW1ib2xpbiAlcyB2w6RsaW5lbiByaXN0aXJpaXRhIG9uIHJhdGthaXN0dSB2aXJoZWVuw6QiCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCBzaGlmdC9yZWR1Y2UsICVkIHJlZHVjZS9yZWR1Y2VcbiIKK21zZ3N0ciAicmlzdGlyaWlkYXQ6ICVkIHNpaXJ0by9zdXBpc3RhbWluZW4sICVkIHN1cGlzdGFtaW5lbi9zdXBpc3RhbWluZW5cbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdHM6ICVkIHNoaWZ0L3JlZHVjZVxuIgorbXNnc3RyICJyaXN0aXJpaWRhdDogJWQgc2lpcnRvL3N1cGlzdGFtaW5lblxuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgcmVkdWNlL3JlZHVjZVxuIgorbXNnc3RyICJyaXN0aXJpaWRhdDogJWQgc3VwaXN0YW1pbmVuL3N1cGlzdGFtaW5lblxuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YXRlICVkICIKK21zZ3N0ciAiVGlsYSAlZCAiCisKKyM6IHNyYy9jb25mbGljdHMuYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSVleHBlY3QtcnIgYXBwbGllcyBvbmx5IHRvIEdMUiBwYXJzZXJzIgorbXNnc3RyICIlJWV4cGVjdC1yciBzb3ZlbHR1dSB2YWluIEdMUi1qw6RzZW50aW1paW4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJleHBlY3RlZCAlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIgorbXNnc3RyWzBdICJvZG90ZXR0aWluICVkIHNpaXJ0by9zdXBpc3RhbWluZW4gLXJpc3RpcmlpdGEiCittc2dzdHJbMV0gIm9kb3RldHRpaW4gJWQgc2lpcnRvL3N1cGlzdGFtaW5lbiAtcmlzdGlyaWl0YWEiCisKKyM6IHNyYy9jb25mbGljdHMuYzo2MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJWQgcmVkdWNlL3JlZHVjZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiZXhwZWN0ZWQgJWQgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMiCittc2dzdHJbMF0gIm9kb3RldHRpaW4gJWQgc2lpcnRvL3N1cGlzdGFtaW5lbiAtcmlzdGlyaWl0YSIKK21zZ3N0clsxXSAib2RvdGV0dGlpbiAlZCBzaWlydG8vc3VwaXN0YW1pbmVuIC1yaXN0aXJpaXRhYSIKKworIzogc3JjL2ZpbGVzLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3Qgb3BlbiIKK21zZ3N0ciAiJXM6IHRpZWRvc3RvbiBhdmF1cyBlcMOkb25uaXN0dWkiCisKKyM6IHNyYy9maWxlcy5jOjEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnB1dC9vdXRwdXQgZXJyb3IiCittc2dzdHIgInN5w7Z0dMO2L3R1bG9zdGV2aXJoZSIKKworIzogc3JjL2ZpbGVzLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjbG9zZSBmaWxlIgorbXNnc3RyICJ0aWVkb3N0b24gc3Vsa2VtaW5lbiBlcMOkb25uaXN0dWkiCisKKyM6IHNyYy9maWxlcy5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBvdmVyd3JpdGUgdGhlIGlucHV0IGZpbGUgJXMiCittc2dzdHIgImtpZWx0w6R5ZHl0w6TDpG4ga29ydmFhbWFzdGEgc3nDtnRldGllZG9zdG9hICVzIgorCisjOiBzcmMvZmlsZXMuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3Rpbmcgb3V0cHV0cyB0byBmaWxlICVzIgorbXNnc3RyICJrZXNrZW7DpMOkbiByaXN0aXJpaXRhaXNpYSB0dWxvc3RlaXRhIHRpZWRvc3Rvb24gJXMiCisKKyM6IHNyYy9nZXRhcmdzLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeSBgJXMgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKK21zZ3N0ciAiUHl5ZMOkIGxpc8OkdGlldG9qYSBrb21lbm5vbGxhIOKAnSVzIC0taGVscOKAnS5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFtPUFRJT05dLi4uIEZJTEVcbiIKK21zZ3N0ciAiS8OkeXR0w7Y6ICVzIFtWQUxJVFNJTl0uLi4gVElFRE9TVE9cbiIKKworIzogc3JjL2dldGFyZ3MuYzozMDIKK21zZ2lkICIiCisiR2VuZXJhdGUgYSBkZXRlcm1pbmlzdGljIExSIG9yIGdlbmVyYWxpemVkIExSIChHTFIpIHBhcnNlciBlbXBsb3lpbmdcbiIKKyJMQUxSKDEpLCBJRUxSKDEpLCBvciBjYW5vbmljYWwgTFIoMSkgcGFyc2VyIHRhYmxlcy4gIElFTFIoMSkgYW5kXG4iCisiY2Fub25pY2FsIExSKDEpIHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsLlxuIgorIlxuIgorbXNnc3RyICIiCisiVHVvdGEgZGV0ZXJtaW5pc3RpbmVuIExSLSB0YWkgeWxlaXN0ZXR0eSBMUiAoR0xSKSAtasOkc2VubmluLCBqb2thIGvDpHl0dMOkw6RcbiIKKyJMQUxSKDEpLSwgSUVMUigxKS0sIHRhaSBrYW5vbmlzaWEgTFIoMSktasOkc2VubmludGF1bHVqYS4gIElFTFIoMSktIGphXG4iCisia2Fub25pbmVuIExSKDEpIC10dWtpIG9uIGtva2VlbGxpbmVuLlxuIgorIlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwOQorbXNnaWQgIiIKKyJNYW5kYXRvcnkgYXJndW1lbnRzIHRvIGxvbmcgb3B0aW9ucyBhcmUgbWFuZGF0b3J5IGZvciBzaG9ydCBvcHRpb25zIHRvby5cbiIKK21zZ3N0ciAiIgorIlBha29sbGlzZXQgYXJndW1lbnRpdCBwaXRraWxsZSB2YWxpdHNpbWlsbGUgb3ZhdCBwYWtvbGxpc2lhIG15w7ZzIGx5aHlpbGxlICIKKyJ2YWxpdHNpbWlsbGUuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzEyCittc2dpZCAiVGhlIHNhbWUgaXMgdHJ1ZSBmb3Igb3B0aW9uYWwgYXJndW1lbnRzLlxuIgorbXNnc3RyICJTYW1hIHDDpHRlZSB2YWxpbm5haXNpbGxlIGFyZ3VtZW50ZWlsbGUuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzE2Cittc2dpZCAiIgorIlxuIgorIk9wZXJhdGlvbiBtb2RlczpcbiIKKyIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCisiICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorIiAgICAgIC0tcHJpbnQtbG9jYWxlZGlyICAgICAgb3V0cHV0IGRpcmVjdG9yeSBjb250YWluaW5nIGxvY2FsZS1kZXBlbmRlbnQgIgorImRhdGFcbiIKKyIgICAgICAtLXByaW50LWRhdGFkaXIgICAgICAgIG91dHB1dCBkaXJlY3RvcnkgY29udGFpbmluZyBza2VsZXRvbnMgYW5kIFhTTFRcbiIKKyIgIC15LCAtLXlhY2MgICAgICAgICAgICAgICAgIGVtdWxhdGUgUE9TSVggWWFjY1xuIgorIiAgLVcsIC0td2FybmluZ3NbPUNBVEVHT1JZXSAgcmVwb3J0IHRoZSB3YXJuaW5ncyBmYWxsaW5nIGluIENBVEVHT1JZXG4iCisiICAtZiwgLS1mZWF0dXJlWz1GRUFUVVJFXSAgICBhY3RpdmF0ZSBtaXNjZWxsYW5lb3VzIGZlYXR1cmVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJUb2ltaW50b3RpbGF0OlxuIgorIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgbsOkeXTDpCB0w6Rtw6Qgb3Bhc3RlIGphIHBvaXN0dVxuIgorIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgdHVsb3N0YSB2ZXJzaW90aWVkb3QgamEgcG9pc3R1XG4iCisiICAgICAgLS1wcmludC1sb2NhbGVkaXIgICAgICB0dWxvc3RlaGFrZW1pc3RvLCBqb2thIHNpc8OkbHTDpMOkIG1hYS1hc2V0dWtzZXN0YSAiCisicmlpcHB1dmFhIGRhdGFhXG4iCisiICAgICAgLS1wcmludC1kYXRhZGlyICAgICAgICB0dWxvc3RlaGFrZW1pc3RvLCBqb2thIHNpc8OkbHTDpMOkIHJ1bmdvdCBqYSBYU0xULSIKKyJrb29kaW5cbiIKKyIgIC15LCAtLXlhY2MgICAgICAgICAgICAgICAgIG1hdGtpIFBPU0lYIFlhY2MgLW9oamVsbWFhXG4iCisiICAtVywgLS13YXJuaW5ncz1bS0FURUdPUklBXSByYXBvcnRvaSB0w6Row6RuIEtBVEVHT1JJQWFuIGt1dWx1dmF0ICIKKyJ2YXJvaXR1a3NldFxuIgorIiAgLWYsIC0tZmVhdHVyZVs9T01JTkFJU1VVU10gYWt0aXZvaSBzZWthbGFpc2V0IG9taW5haXN1dWRldFxuIgorIlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFyc2VyOlxuIgorIiAgLUwsIC0tbGFuZ3VhZ2U9TEFOR1VBR0UgICAgICAgICAgc3BlY2lmeSB0aGUgb3V0cHV0IHByb2dyYW1taW5nIGxhbmd1YWdlXG4iCisiICAtUywgLS1za2VsZXRvbj1GSUxFICAgICAgICAgICAgICBzcGVjaWZ5IHRoZSBza2VsZXRvbiB0byB1c2VcbiIKKyIgIC10LCAtLWRlYnVnICAgICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnQgdGhlIHBhcnNlciBmb3IgZGVidWdnaW5nXG4iCisiICAgICAgLS1sb2NhdGlvbnMgICAgICAgICAgICAgICAgICBlbmFibGUgbG9jYXRpb24gc3VwcG9ydFxuIgorIiAgLUQsIC0tZGVmaW5lPU5BTUVbPVZBTFVFXSAgICAgICAgc2ltaWxhciB0byAnJWRlZmluZSBOQU1FIFwiVkFMVUVcIidcbiIKKyIgIC1GLCAtLWZvcmNlLWRlZmluZT1OQU1FWz1WQUxVRV0gIG92ZXJyaWRlICclZGVmaW5lIE5BTUUgXCJWQUxVRVwiJ1xuIgorIiAgLXAsIC0tbmFtZS1wcmVmaXg9UFJFRklYICAgICAgICAgcHJlcGVuZCBQUkVGSVggdG8gdGhlIGV4dGVybmFsIHN5bWJvbHNcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQgYnkgJy1EYXBpLnByZWZpeD1QUkVGSVgnXG4iCisiICAtbCwgLS1uby1saW5lcyAgICAgICAgICAgICAgICAgICBkb24ndCBnZW5lcmF0ZSAnI2xpbmUnIGRpcmVjdGl2ZXNcbiIKKyIgIC1rLCAtLXRva2VuLXRhYmxlICAgICAgICAgICAgICAgIGluY2x1ZGUgYSB0YWJsZSBvZiB0b2tlbiBuYW1lc1xuIgorbXNnc3RyICIiCisiSsOkc2VubmluOlxuIgorIiAgLUwsIC0tbGFuZ3VhZ2U9S0lFTEkgICAgICAgICAgIG3DpMOkcml0dGVsZSB0dWxvc3Rlb2hqZWxtb2ludGlraWVsaVxuIgorIiAgLVMsIC0tc2tlbGV0b249VElFRE9TVE8gICAgICAgIG3DpMOkcml0dGVsZSBrw6R5dGV0dMOkdsOkIHJ1bmtvXG4iCisiICAtdCwgLS1kZWJ1ZyAgICAgICAgICAgICAgICAgICAgbGlzw6TDpCBqw6RzZW5uaW4gdmlhbmrDpGxqaXR5a3NlZW5cbiIKKyIgICAgICAtLWxvY2F0aW9ucyAgICAgICAgICAgICAgICBvdGEga8OkeXR0w7bDtm4gcGFpa2tvamVuIGxhc2tlbnRhXG4iCisiICAtRCwgLS1kZWZpbmU9TklNSVs9QVJWT10gICAgICAgc2FtYW5sYWluZW4ga3VpbiDigJ0lZGVmaW5lIE5BTUUgXCJWQUxVRVwi4oCdXG4iCisiICAtRiwgLS1mb3JjZS1kZWZpbmU9TklNSVs9QVJWT10ga29ydmFhIG3DpMOkcml0dGVseW4g4oCdJWRlZmluZSBOQU1FIFwiVkFMVUUiCisiXCLigJ1cbiIKKyIgIC1wLCAtLW5hbWUtcHJlZml4PUVUVUxJSVRFICAgICBsaXPDpMOkIEVUVUxJSVRFIHVsa29pc2lpbiBzeW1ib2xlaWhpblxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGl0c2ltZW4g4oCdLURhcGkucHJlZml4PUVUVUxJSVRF4oCdICIKKyJ2YW5oZW50YW1hXG4iCisiICAtbCwgLS1uby1saW5lcyAgICAgICAgICAgICAgICAgw6Rsw6QgdHVvdGEg4oCdI2xpbmXigJ0tZGlyZWt0aWl2ZWrDpFxuIgorIiAgLWssIC0tdG9rZW4tdGFibGUgICAgICAgICAgICAgIHNpc8OkbGx5dMOkIG1lcmtraXN5bWJvbGluaW1pZW4gdGF1bHVcbiIKKyJcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNDYKK21zZ2lkICIiCisiT3V0cHV0OlxuIgorIiAgICAgIC0tZGVmaW5lc1s9RklMRV0gICAgICAgYWxzbyBwcm9kdWNlIGEgaGVhZGVyIGZpbGVcbiIKKyIgIC1kICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2V3aXNlIGJ1dCBjYW5ub3Qgc3BlY2lmeSBGSUxFIChmb3IgUE9TSVggIgorIllhY2MpXG4iCisiICAtciwgLS1yZXBvcnQ9VEhJTkdTICAgICAgICBhbHNvIHByb2R1Y2UgZGV0YWlscyBvbiB0aGUgYXV0b21hdG9uXG4iCisiICAgICAgLS1yZXBvcnQtZmlsZT1GSUxFICAgICB3cml0ZSByZXBvcnQgdG8gRklMRVxuIgorIiAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgc2FtZSBhcyBgLS1yZXBvcnQ9c3RhdGUnXG4iCisiICAtYiwgLS1maWxlLXByZWZpeD1QUkVGSVggICBzcGVjaWZ5IGEgUFJFRklYIGZvciBvdXRwdXQgZmlsZXNcbiIKKyIgIC1vLCAtLW91dHB1dD1GSUxFICAgICAgICAgIGxlYXZlIG91dHB1dCB0byBGSUxFXG4iCisiICAtZywgLS1ncmFwaFs9RklMRV0gICAgICAgICBhbHNvIG91dHB1dCBhIGdyYXBoIG9mIHRoZSBhdXRvbWF0b25cbiIKKyIgIC14LCAtLXhtbFs9RklMRV0gICAgICAgICAgIGFsc28gb3V0cHV0IGFuIFhNTCByZXBvcnQgb2YgdGhlIGF1dG9tYXRvblxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoZSBYTUwgc2NoZW1hIGlzIGV4cGVyaW1lbnRhbClcbiIKK21zZ3N0ciAiIgorIlR1bG9zdGU6XG4iCisiICAgICAgLS1kZWZpbmVzWz1USUVET1NUT10gICB0dW90YSBtecO2cyBvdHNha2V0aWVkb3N0b1xuIgorIiAgLWQgICAgICAgICAgICAgICAgICAgICAgICAgc2Ftb2luLCBtdXR0YSBUSUVET1NUT24gKFBPU0lYIFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWWFjYy15aHRlZW5zb3BpdnV1cyltw6TDpHJpdHRlbHkgZXDDpG9ubmlzdHVpXG4iCisiICAtciwgLS1yZXBvcnQ9VEhJTkdTICAgICAgICB0dW90YSBtecO2cyB5a3NpdHlpc2tvaGRhdCBhdXRvbWFhdGlzc2FcbiIKKyIgICAgICAtLXJlcG9ydC1maWxlPVRJRURPU1RPIGtpcmpvaXRhIHJhcG9ydHRpIFRJRURPU1RPb25cbiIKKyIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIHNhbWEga3VpbiDigJ0tLXJlcG9ydD1zdGF0ZeKAnVxuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg9RVRVTElJVEUgbcOkw6RyaXR0ZWxlIEVUVUxJSVRFIHR1bG9zdGV0aWVkb3N0b2lsbGVcbiIKKyIgIC1vLCAtLW91dHB1dD1USUVET1NUTyAgICAgIGrDpHTDpCB0dWxvc3RlIFRJRURPU1RPb25cbiIKKyIgIC1nLCAtLWdyYXBoWz1USUVET1NUT10gICAgIHR1bG9zdGEgbXnDtnMgYXV0b21hYXRpbiBrYWF2aW9cbiIKKyIgIC14LCAtLXhtbFs9VElFRE9TVE9dICAgICAgIHR1bG9zdGEgbXnDtnMgYXV0b21hYXRpbiBYTUwtcmFwb3J0dGlcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChYTUwtc2tlZW1hIG9uIGtva2VlbGxpbmVuKVxuIgorIlxuIgorCisjICBLb29kaXNzYSBtaWRydWxlIG9uIGtlc2tlbGzDpCBvbGV2YSBsb2hrbywgam90YSBlZGVsdMOkw6QgdG9wcnVsZSBqYSBqb25rYSBhbGxhIG9uIGJvdHRvbXJ1bGUuCisjOiBzcmMvZ2V0YXJncy5jOjM2MQorbXNnaWQgIiIKKyJXYXJuaW5nIGNhdGVnb3JpZXMgaW5jbHVkZTpcbiIKKyIgIGBtaWRydWxlLXZhbHVlcycgIHVuc2V0IG9yIHVudXNlZCBtaWRydWxlIHZhbHVlc1xuIgorIiAgYHlhY2MnICAgICAgICAgICAgaW5jb21wYXRpYmlsaXRpZXMgd2l0aCBQT1NJWCBZYWNjXG4iCisiICBgY29uZmxpY3RzLXNyJyAgICBTL1IgY29uZmxpY3RzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgY29uZmxpY3RzLXJyJyAgICBSL1IgY29uZmxpY3RzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgZGVwcmVjYXRlZCcgICAgICBvYnNvbGV0ZSBjb25zdHJ1Y3RzXG4iCisiICBgb3RoZXInICAgICAgICAgICBhbGwgb3RoZXIgd2FybmluZ3MgKGVuYWJsZWQgYnkgZGVmYXVsdClcbiIKKyIgIGBhbGwnICAgICAgICAgICAgIGFsbCB0aGUgd2FybmluZ3NcbiIKKyIgIGBuby1DQVRFR09SWScgICAgIHR1cm4gb2ZmIHdhcm5pbmdzIGluIENBVEVHT1JZXG4iCisiICBgbm9uZScgICAgICAgICAgICB0dXJuIG9mZiBhbGwgdGhlIHdhcm5pbmdzXG4iCisiICBgZXJyb3InICAgICAgICAgICB0cmVhdCB3YXJuaW5ncyBhcyBlcnJvcnNcbiIKK21zZ3N0ciAiIgorIlZhcm9pdHVza2F0ZWdvcmlhdCBzaXPDpGx0w6R2w6R0OlxuIgorIiAgYG1pZHJ1bGUtdmFsdWVzJyAgYXNldHRhYSBqYSBwb2lzdGFhIG1pZHJ1bGUtYXJ2b2phXG4iCisiICBgeWFjYycgICAgICAgICAgICB5aHRlZW5zb3BpbWF0dG9tdXVkZXQgUE9TSVggWUFDQyAtb2hqZWxtYW4ga2Fuc3NhXG4iCisiICBgY29uZmxpY3RzLXNyJyAgICBTL1ItcmlzdGlyaWlkYXQgKG9sZXR1a3NlbmEgb3RldHR1IGvDpHl0dMO2w7ZuKVxuIgorIiAgYGNvbmZsaWN0cy1ycicgICAgUi9SLXJpc3RpcmlpZGF0IChvbGV0dWtzZW5hIG90ZXR0dSBrw6R5dHTDtsO2bilcbiIKKyIgIGBkZXByZWNhdGVkJyAgICAgIHZhbmhlbnR1bmVldCByYWtlbnRlZXRcbiIKKyIgIGBvdGhlcicgICAgICAgICAgIGthaWtraSBtdXV0IHZhcm9pdHVrc2V0IChvbGV0dWtzZW5hIG90ZXR0dSBrw6R5dHTDtsO2bilcbiIKKyIgIGBhbGwnICAgICAgICAgICAgIGthaWtraSB2YXJvaXR1a3NldFxuIgorIiAgYG5vLUNBVEVHT1JZJyAgICAga8Okw6RubsOkIHBvaXMgcMOkw6RsdMOkIGthaWtraSB2YXJvaXR1a3NldCBrYXRlZ29yaWFzc2EgIgorIkNBVEVHT1JZXG4iCisiICBgbm9uZScgICAgICAgICAgICBrw6TDpG5uw6QgcG9pcyBrYWlra2kgdmFyb2l0dWtzZXRcbiIKKyIgIGBlcnJvcicgICAgICAgICAgIGvDpHNpdHRlbGUgdmFyb2l0dWtzaWEgdmlyaGVpbsOkXG4iCisiXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzc2Cittc2dpZCAiIgorIlRISU5HUyBpcyBhIGxpc3Qgb2YgY29tbWEgc2VwYXJhdGVkIHdvcmRzIHRoYXQgY2FuIGluY2x1ZGU6XG4iCisiICBgc3RhdGUnICAgICAgICBkZXNjcmliZSB0aGUgc3RhdGVzXG4iCisiICBgaXRlbXNldCcgICAgICBjb21wbGV0ZSB0aGUgY29yZSBpdGVtIHNldHMgd2l0aCB0aGVpciBjbG9zdXJlXG4iCisiICBgbG9va2FoZWFkJyAgICBleHBsaWNpdGx5IGFzc29jaWF0ZSBsb29rYWhlYWQgdG9rZW5zIHRvIGl0ZW1zXG4iCisiICBgc29sdmVkJyAgICAgICBkZXNjcmliZSBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIHNvbHZpbmdcbiIKKyIgIGBhbGwnICAgICAgICAgIGluY2x1ZGUgYWxsIHRoZSBhYm92ZSBpbmZvcm1hdGlvblxuIgorIiAgYG5vbmUnICAgICAgICAgZGlzYWJsZSB0aGUgcmVwb3J0XG4iCittc2dzdHIgIiIKKyJUSElOR1Mgb24gcGlsa3VpbGxhIGVyb3RlbHR1IGx1ZXR0ZWxvLCBqb2thIHZvaSBzaXPDpGx0w6TDpDpcbiIKKyIgIGBzdGF0ZScgICAgICAgIGt1dmFhIHRpbGF0XG4iCisiICBgaXRlbXNldCcgICAgICB0w6R5ZGVudMOkw6QgeWRpbmFsa2lvam91a290IG5paWRlbiBzdWxrZXVtYWxsYVxuIgorIiAgYGxvb2thaGVhZCcgICAgZWtzcGxpc2lpdHRpc2VzdGkgbGlpdHTDpMOkIGVubmFrb2ludGltZXJra2lzeW1ib2xpdCAiCisiYWxraW9paGluXG4iCisiICBgc29sdmVkJyAgICAgICBrdXZhaWxlZSBzaWlydG8vc3VwaXN0YW1pbmVuIC1yaXN0aXJpaXRvamVuIHJhdGthaXNlbWlzZW5cbiIKKyIgIGBhbGwnICAgICAgICAgIHNpc8OkbHTDpMOkIGthaWtraSB5bGzDpCBtYWluaXR1dCB0aWVkb3RcbiIKKyIgIGBub25lJyAgICAgICAgIHBvaXN0YWEgcmFwb3J0b2lubmluXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzg3Cittc2dpZCAiIgorIkZFQVRVUkUgaXMgYSBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCB3b3JkcyB0aGF0IGNhbiBpbmNsdWRlOlxuIgorIiAgYGNhcmV0JyAgICAgICAgc2hvdyBlcnJvcnMgd2l0aCBjYXJldHNcbiIKKyIgIGBhbGwnICAgICAgICAgIGFsbCBvZiB0aGUgYWJvdmVcbiIKKyIgIGBub25lJyAgICAgICAgIGRpc2FibGUgYWxsIG9mIHRoZSBhYm92ZVxuIgorIiAgIgorbXNnc3RyICIiCisiT01JTkFJU1VVUyBvbiBwaWxrdWxsYSBlcm90ZWx0dWplbiBzYW5vamVuIGx1ZXR0ZWxvLCBqb2thIHZvaSBzaXPDpGx0w6TDpDpcbiIKKyIgIGBjYXJldCcgICAgICAgIG7DpHl0w6QgdmlyaGVldCBzaXJrdW1mbGVrc2lsbGFcbiIKKyIgIGBhbGwnICAgICAgICAgIGthaWtraSB5bGzDpFxuIgorIiAgYG5vbmUnICAgICAgICAgb3RhIGthaWtraSB5bGzDpCBvbGV2YXQgcG9pcyBrw6R5dMO2c3TDpFxuIgorIiAgIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorbXNnc3RyICJJbG1vaXRhIHZpcmhlaXN0w6QgKGVuZ2xhbm5pa3NpKSBvc29pdHRlZXNlZW4gPCVzPi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaG9tZSBwYWdlOiA8JXM+LlxuIgorbXNnc3RyICIlcyBrb3Rpc2l2dTogPCVzPi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozOTcKK21zZ2lkICJHZW5lcmFsIGhlbHAgdXNpbmcgR05VIHNvZnR3YXJlOiA8aHR0cDovL3d3dy5nbnUub3JnL2dldGhlbHAvPi5cbiIKK21zZ3N0ciAiIgorIllsZWluZW4gb3Bhc3RlIEdOVS1vaGplbG1pc3RvamVuIGvDpHl0dMOkbWlzZXN0w6Q6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8iCisiPi5cbiIKKworIy4gVFJBTlNMQVRPUlM6IFJlcGxhY2UgTEFOR19DT0RFIGluIHRoaXMgVVJMIHdpdGggeW91ciBsYW5ndWFnZQorIy4gY29kZSA8aHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS9MQU5HX0NPREUuaHRtbD4gdG8KKyMuIGZvcm0gb25lIG9mIHRoZSBVUkxzIGF0IGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vLgorIy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRoZSBlbnRpcmUgVVJMIHdpdGggeW91ciB0cmFuc2xhdGlvbiB0ZWFtJ3MKKyMuIGVtYWlsIGFkZHJlc3MuCisjOiBzcmMvZ2V0YXJncy5jOjQxMAorbXNnaWQgIlJlcG9ydCB0cmFuc2xhdGlvbiBidWdzIHRvIDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtLz4uXG4iCittc2dzdHIgIiIKKyJJbG1vaXRhIGvDpMOkbm7DtnN2aXJoZWlzdMOkIG9zb2l0dGVlc2VlbiA8dHJhbnNsYXRpb24tdGVhbS1maUBsaXN0cy5zb3VyY2Vmb3JnZS4iCisibmV0Pi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MTIKK21zZ2lkICJGb3IgY29tcGxldGUgZG9jdW1lbnRhdGlvbiwgcnVuOiBpbmZvIGJpc29uLlxuIgorbXNnc3RyICJUw6R5ZGVsbGlzZW4gZG9rdW1lbnRhYXRpb24gc2FhdCBzdW9yaXR0YW1hbGxhIGtvbWVubm9uOiBpbmZvIGJpc29uLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJiaXNvbiAoR05VIEJpc29uKSAlcyIKK21zZ3N0ciAiYmlzb24gKEdOVSBCaXNvbikgJXMiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDMwCittc2dpZCAiV3JpdHRlbiBieSBSb2JlcnQgQ29yYmV0dCBhbmQgUmljaGFyZCBTdGFsbG1hbi5cbiIKK21zZ3N0ciAiS2lyam9pdHRhamF0OiBSb2JlcnQgQ29yYmV0dCBqYSBSaWNoYXJkIFN0YWxsbWFuLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3B5cmlnaHQgKEMpICVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorbXNnc3RyICJDb3B5cmlnaHQgwqkgJWQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDM3Cittc2dpZCAiIgorIlRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PXG4iCisid2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuXG4iCittc2dzdHIgIiIKKyJUw6Rtw6Qgb24gdmFwYWEgb2hqZWxtaXN0bzoga2F0c28gbMOkaGRla29vZGlzdGEga29waW9pbnRpZWhkb3QuIE9oamVsbWFsbGUgRUlcbiIKKyJPTEUgTUlUw4TDhE4gVEFLVVVUQTsgZWkgZWRlcyBLQVVQUEFLRUxQT0lTVVVERUxMRSB0YWkgU09QSVZVVURFTExFIFRJRVRUWVlOICIKKyJUQVJLT0lUVUtTRUVOLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSBza2VsZXRvbiBkZWNsYXJhdGlvbnMgYXJlIGludmFsaWQiCittc2dzdHIgIm1vbmlydW5rb2VzaXR0ZWx5dCBvdmF0IHZpcmhlZWxsaXNpw6QiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIGxhbmd1YWdlIgorbXNnc3RyICIlczogdmlyaGVlbGxpbmVuIGtpZWxpIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ3OQorbXNnaWQgIm11bHRpcGxlIGxhbmd1YWdlIGRlY2xhcmF0aW9ucyBhcmUgaW52YWxpZCIKK21zZ3N0ciAibW9uaWtpZWxpZXNpdHRlbHl0IG92YXQgdmlyaGVlbGxpc2nDpCIKKworIzogc3JjL2dldGFyZ3MuYzo3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG1pc3Npbmcgb3BlcmFuZCIKK21zZ3N0ciAiJXM6IHB1dXR0dXZhIG9wZXJhbmRpIgorCisjOiBzcmMvZ2V0YXJncy5jOjc0OQorIywgYy1mb3JtYXQKK21zZ2lkICJleHRyYSBvcGVyYW5kICVzIgorbXNnc3RyICJ5bGltw6TDpHLDpGluZW4gb3BlcmFuZGkgJXMiCisKKyM6IHNyYy9ncmFtLmM6MTEyCittc2dpZCAiZW1wdHkiCittc2dzdHIgInR5aGrDpCIKKworIzogc3JjL2dyYW0uYzoyMDEKK21zZ2lkICJHcmFtbWFyIgorbXNnc3RyICJLaWVsaW9wcGkiCisKKyM6IHNyYy9ncmFwaHZpei5jOjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIvLyBHZW5lcmF0ZWQgYnkgJXMuXG4iCisiLy8gUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKKyIvLyBIb21lIHBhZ2U6IDwlcz4uXG4iCisiXG4iCittc2dzdHIgIiIKKyIvLyBUdW90dGFqYTogJXMuXG4iCisiLy8gSWxtb2l0YSB2aW9pc3RhIG9zb2l0dGVlc2VlbiA8JXM+LlxuIgorIi8vIElsbW9pdGEga8Okw6RubsO2c3ZpcmhlaXN0w6Qgb3NvaXR0ZWVzZWVuIDx0cmFuc2xhdGlvbi10ZWFtLWZpQGxpc3RzLiIKKyJzb3VyY2Vmb3JnZS5uZXQ+LlxuIgorIi8vIEtvdGlzaXZ1OiA8JXM+LlxuIgorIlxuIgorCisjOiBzcmMvbG9jYXRpb24uYzo5MyBzcmMvc2Nhbi1ncmFtLmw6ODU5CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgbnVtYmVyIG92ZXJmbG93IgorbXNnc3RyICJyaXZpbnVtZXJvbiB5bGl2dW90byIKKworIzogc3JjL2xvY2F0aW9uLmM6OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29sdW1uIG51bWJlciBvdmVyZmxvdyIKK21zZ3N0ciAic2FyYWtlbnVtZXJvbiB5bGl2dW90byIKKworIzogc3JjL21haW4uYzoxNDYKK21zZ2lkICJydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHMiCittc2dzdHIgInPDpMOkbnTDtiBvbiBoecO2ZHl0w7ZuIGrDpHNlbnRpbWVzc8OkIHJpc3RpcmlpdG9qZW4gdnVva3NpIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlJWRlZmluZSB2YXJpYWJsZSAlcyByZWRlZmluZWQiCittc2dzdHIgIiUlZGVmaW5lLW11dXR0dWphICVzIG9uIG3DpMOkcml0ZWx0eSB1dWRlbGxlZW4iCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NDUzCittc2dpZCAicHJldmlvdXMgZGVmaW5pdGlvbiIKK21zZ3N0ciAiZWRlbGxpbmVuIG3DpMOkcml0dGVseSIKKworIzogc3JjL211c2NsZS10YWIuYzo0OTAgc3JjL211c2NsZS10YWIuYzo1MDQgc3JjL211c2NsZS10YWIuYzo1NTYKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgJXMiCittc2dzdHIgIiVzOiBtw6TDpHJpdHRlbGVtw6R0w7ZuICUlZGVmaW5lLW11dXR0dWphICVzIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlJWRlZmluZSBCb29sZWFuIHZhcmlhYmxlICVzIgorbXNnc3RyICJ2aXJoZWVsbGluZW4gYXJ2byBrb2h0ZWVsbGUgJSVkZWZpbmUtYm9vbGVhbm11dXR0dWphICVzIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjYwOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlJWRlZmluZSB2YXJpYWJsZSAlczogJXMiCittc2dzdHIgInZpcmhlZWxsaW5lbiBhcnZvIGtvaHRlZWxsZSAlJWRlZmluZS1tdXV0dHVqYSAlczogJXMiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjEzCisjLCBjLWZvcm1hdAorbXNnaWQgImFjY2VwdGVkIHZhbHVlOiAlcyIKK21zZ3N0ciAiaHl2w6Rrc3l0dHkgYXJ2bzogJXMiCisKKyM6IHNyYy9wYXJzZS1ncmFtLnk6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgaWRlbnRpZmllciBpbiBwYXJhbWV0ZXIgZGVjbGFyYXRpb24iCittc2dzdHIgInB1dXR0dXZhIHR1bm5pc3RlIHBhcmFtZXRyaWVzaXR0ZWx5c3PDpCIKKworIzogc3JjL3ByaW50LmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIHR5cGUgJWQgaXMgJXNcbiIKK21zZ3N0ciAiIHR5eXBwaSAlZCBvbiAlc1xuIgorCisjOiBzcmMvcHJpbnQuYzoxNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAlZFxuIgorbXNnc3RyICJzaWlydG8sIGphIHNpaXJyeSB0aWxhYW4gJWRcbiIKKworIzogc3JjL3ByaW50LmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImdvIHRvIHN0YXRlICVkXG4iCittc2dzdHIgInNpaXJyeSB0aWxhYW4gJWRcbiIKKworIzogc3JjL3ByaW50LmM6MjAzCittc2dpZCAiZXJyb3IgKG5vbmFzc29jaWF0aXZlKVxuIgorbXNnc3RyICJ2aXJoZSAoZWktYXNzb3NpYXRpaXZpbmVuKVxuIgorCisjOiBzcmMvcHJpbnQuYzoyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkdWNlIHVzaW5nIHJ1bGUgJWQgKCVzKSIKK21zZ3N0ciAic3VwaXN0YW1pbmVuIGvDpHl0dMOkZW4gc8Okw6RudMO2w6QgJWQgKCVzKSIKKworIzogc3JjL3ByaW50LmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgImFjY2VwdCIKK21zZ3N0ciAiYWNjZXB0IgorCisjOiBzcmMvcHJpbnQuYzoyNjQgc3JjL3ByaW50LmM6MzM4Cittc2dpZCAiJGRlZmF1bHQiCittc2dzdHIgIiRkZWZhdWx0IgorCisjOiBzcmMvcHJpbnQuYzozNzMgc3JjL3ByaW50X2dyYXBoLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhdGUgJWQiCittc2dzdHIgIlRpbGEgJWQiCisKKyM6IHNyYy9wcmludC5jOjQwOQorbXNnaWQgIlRlcm1pbmFscywgd2l0aCBydWxlcyB3aGVyZSB0aGV5IGFwcGVhciIKK21zZ3N0ciAiUMOkw6R0dGVldCwgc8Okw6RubsO2aWxsw6QgbWlzc8OkIG5paW4gdGFydml0YWFuIgorCisjOiBzcmMvcHJpbnQuYzo0MzYKK21zZ2lkICJOb250ZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIiCittc2dzdHIgIkVpLXDDpMOkdHRlZXQsIHPDpMOkbm7DtmlsbMOkIG1pc3PDpCBuaWl0w6QgdGFydml0YWFuIgorCisjOiBzcmMvcHJpbnQuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uIGxlZnQ6IgorbXNnc3RyICIgdmFzZW1tYWxsYToiCisKKyM6IHNyYy9wcmludC5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgb24gcmlnaHQ6IgorbXNnc3RyICIgb2lrZWFsbGE6IgorCisjOiBzcmMvcHJpbnQuYzo1MTAKK21zZ2lkICJSdWxlcyB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzIgorbXNnc3RyICJTw6TDpG5uw7Z0IG92YXQgaHnDtmR5dHTDtm1pw6QgasOkc2VudGltZXNzw6QgcmlzdGlyaWl0b2plbiB2dW9rc2kiCisKKyM6IHNyYy9yZWFkZXIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSAlcyBkZWNsYXJhdGlvbnMiCittc2dzdHIgInVzZWl0YSAlcyBlc2l0dGVseWrDpCIKKworIzogc3JjL3JlYWRlci5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJyZXN1bHQgdHlwZSBjbGFzaCBvbiBtZXJnZSBmdW5jdGlvbiAlczogPCVzPiAhPSA8JXM+IgorbXNnc3RyICJ0dWxvc3R5eXBwaWVuIHlodGVlbnTDtnJtw6R5cyBtZXJnZS1mdW5rdGlvc3NhICVzOiA8JXM+ICE9IDwlcz4iCisKKyM6IHNyYy9yZWFkZXIuYzoxMzkgc3JjL3N5bXRhYi5jOjE1NiBzcmMvc3ltdGFiLmM6MTY2IHNyYy9zeW10YWIuYzo5MzgKKyM6IHNyYy9zeW10YWIuYzo5NTMgc3JjL3N5bXRhYi5jOjk2OCBzcmMvc3ltdGFiLmM6OTgzCittc2dpZCAicHJldmlvdXMgZGVjbGFyYXRpb24iCittc2dzdHIgImVkZWxsaW5lbiBlc2l0dGVseSIKKworIzogc3JjL3JlYWRlci5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGVkIHN5bWJvbCBuYW1lIGZvciAlcyBpZ25vcmVkIgorbXNnc3RyICJrYWtzb2lza2FwcGFsZXN5bWJvbGluaW1pIGtvaHRlZWxsZSAlcyBvaGl0ZXR0aWluIgorCisjOiBzcmMvcmVhZGVyLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bGUgZ2l2ZW4gZm9yICVzLCB3aGljaCBpcyBhIHRva2VuIgorbXNnc3RyICJzw6TDpG50w7YgYW5uZXR0dSBrb2h0ZWVsbGUgJXMsIGpva2Egb24gbWVya2tpc3ltYm9saSIKKworIzogc3JjL3JlYWRlci5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ0eXBlIGNsYXNoIG9uIGRlZmF1bHQgYWN0aW9uOiA8JXM+ICE9IDwlcz4iCittc2dzdHIgInR5eXBwaWVuIHTDtnJtw6R5cyB2YXN0YWtrYWluIG9sZXR1c3RvaW1pbmFzc2E6IDwlcz4gIT0gPCVzPiIKKworIzogc3JjL3JlYWRlci5jOjMxMAorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBydWxlIGZvciB0eXBlZCBub250ZXJtaW5hbCwgYW5kIG5vIGFjdGlvbiIKK21zZ3N0ciAidHloasOkIHPDpMOkbnTDtiB0eXlwaXRldHlsbGUgZWktcMOkw6R0dGVlbGxlLCBqYSBlaSB0b2ltaW50b2EiCisKKyM6IHNyYy9yZWFkZXIuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW51c2VkIHZhbHVlOiAkJWQiCittc2dzdHIgImvDpHl0dMOkbcOkdMO2biBhcnZvOiAkJWQiCisKKyM6IHNyYy9yZWFkZXIuYzozMzAKK21zZ2lkICJ1bnNldCB2YWx1ZTogJCQiCittc2dzdHIgImFzZXR0YW1hdG9uIGFydm86ICQkIgorCisjOiBzcmMvcmVhZGVyLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgInRva2VuIGZvciAlJXByZWMgaXMgbm90IGRlZmluZWQ6ICVzIgorbXNnc3RyICJtZXJra2lzeW1ib2xpYSBrb2h0ZWVsbGUgJSVwcmVjIGVpIG9sZSBtw6TDpHJpdGVsdHk6ICVzIgorCisjOiBzcmMvcmVhZGVyLmM6NDMxIHNyYy9yZWFkZXIuYzo0NDUgc3JjL3JlYWRlci5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5IG9uZSAlcyBhbGxvd2VkIHBlciBydWxlIgorbXNnc3RyICJ2YWluIHlrc2kgJXMgb24gc2FsbGl0dHUgc8Okw6RudMO2w6Qga29oZGVuIgorCisjOiBzcmMvcmVhZGVyLmM6NDQxIHNyYy9yZWFkZXIuYzo0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWZmZWN0cyBvbmx5IEdMUiBwYXJzZXJzIgorbXNnc3RyICIlcyB2YWlrdXR0YWEgdmFpbiBHTFItasOkc2VudGltaWluIgorCisjOiBzcmMvcmVhZGVyLmM6NDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIG11c3QgYmUgZm9sbG93ZWQgYnkgcG9zaXRpdmUgbnVtYmVyIgorbXNnc3RyICJrb2hkZXR0YSAlcyBvbiBzZXVyYXR0YXZhIHBvc3RpaXZpbmVuIG51bWVybyIKKworIzogc3JjL3JlYWRlci5jOjU1NAorIywgYy1mb3JtYXQKK21zZ2lkICJydWxlIGlzIHRvbyBsb25nIgorbXNnc3RyICJzw6TDpG50w7Ygb24gbGlpYW4gcGl0a8OkIgorCisjOiBzcmMvcmVhZGVyLmM6NjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJ1bGVzIGluIHRoZSBpbnB1dCBncmFtbWFyIgorbXNnc3RyICJlaSBzw6TDpG50w7Zqw6Qgc3nDtnRla2llbGlvcGlzc2EiCisKKyM6IHNyYy9yZWR1Y2UuYzoyNDEKK21zZ2lkICJydWxlIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAic8Okw6RudMO2IG9uIGh5w7ZkeXTDtm4ga2llbGlvcGlzc2EiCisKKyM6IHNyYy9yZWR1Y2UuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiAlcyIKK21zZ3N0ciAiZWktcMOkw6R0ZSBvbiBoecO2ZHl0w7ZuIGtpZWxpb3Bpc3NhOiAlcyIKKworIzogc3JjL3JlZHVjZS5jOjM1MAorbXNnaWQgIk5vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgIkVpLXDDpMOkdHRlZXQgb3ZhdCBoecO2ZHl0dMO2bWnDpCBraWVsaW9waXNzYSIKKworIzogc3JjL3JlZHVjZS5jOjM2MworbXNnaWQgIlRlcm1pbmFscyB1bnVzZWQgaW4gZ3JhbW1hciIKK21zZ3N0ciAiUMOkw6R0dGVldCBvdmF0IGvDpHl0dMOkbcOkdHTDtm1pw6Qga2llbGlvcGlzc2EiCisKKyM6IHNyYy9yZWR1Y2UuYzozNzIKK21zZ2lkICJSdWxlcyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgIlPDpMOkbm7DtnQgb3ZhdCBoecO2ZHl0dMO2bWnDpCBraWVsaW9waXNzYSIKKworIzogc3JjL3JlZHVjZS5jOjM4NQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dpZF9wbHVyYWwgIiVkIG5vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHJbMF0gIiVkIGVpLXDDpMOkdGUgb24gaHnDtmR5dMO2biBraWVsaW9waXNzYSIKK21zZ3N0clsxXSAiJWQgZWktcMOkw6R0ZXR0w6Qgb3ZhdCBoecO2ZHl0dMO2bWnDpCBraWVsaW9waXNzYSIKKworIzogc3JjL3JlZHVjZS5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ2lkX3BsdXJhbCAiJWQgcnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyWzBdICIlZCBzw6TDpG50w7Ygb24gaHnDtmR5dMO2biBraWVsaW9waXNzYSIKK21zZ3N0clsxXSAiJWQgc8Okw6RudMO2w6Qgb3ZhdCBoecO2ZHl0dMO2bWnDpCBraWVsaW9waXNzYSIKKworIzogc3JjL3JlZHVjZS5jOjQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydCBzeW1ib2wgJXMgZG9lcyBub3QgZGVyaXZlIGFueSBzZW50ZW5jZSIKK21zZ3N0ciAiYWxvaXR1c3N5bWJvbGkgJXMgZWkgam9oZGEgbGF1c2Vlc2VlbiIKKworIzogc3JjL3NjYW4tY29kZS5sOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJheSAnJXMnIgorbXNnc3RyICJ5a3NpbsOkaW5lbiDigJklc+KAmSIKKworIzogc3JjL3NjYW4tY29kZS5sOjIyOQorbXNnaWQgImEgJzsnIG1pZ2h0IGJlIG5lZWRlZCBhdCB0aGUgZW5kIG9mIGFjdGlvbiBjb2RlIgorbXNnc3RyICJtZXJra2nDpCDigJk74oCZIHNhYXRldGFhbiB0YXJ2aXRhIHRvaW1pbnRha29vZGluIGxvcHVzc2EiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyMzIKK21zZ2lkICJmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24gd2lsbCBub3QgYWRkIHRoZSAnOyciCittc2dzdHIgInR1bGV2YXQgQmlzb24tdmVyc2lvdCBlaXbDpHQgbGlzw6TDpCBtZXJra2nDpCDigJk74oCZIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVzZSBvZiBZWUZBSUwsIHdoaWNoIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCIKK21zZ3N0ciAiWVlGQUlMLWvDpHl0dMO2LCBqb2thIG9uIHZhbmhlbnR1bnV0IGphIHBvaXN0ZXRhYW4iCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0MzEgc3JjL3NjYW4tY29kZS5sOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcnMgdG86ICVjJXMgYXQgJXMiCittc2dzdHIgInZpaXR0YWEga29odGVlc2VlbjogJWMlcyBvc29pdHRlZXNzYSAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NzaWJseSBtZWFudDogJWMiCittc2dzdHIgIm1haGRvbGxpc2VzdGkgdGFya29pdHRpOiAlYyIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICIsIGhpZGluZyAlYyIKK21zZ3N0ciAiLCBwaWlsb3RldGFhbiAlYyIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICIgYXQgJXMiCittc2dzdHIgIiBvc29pdHRlZXNzYSAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ3MgorIywgYy1mb3JtYXQKK21zZ2lkICIsIGNhbm5vdCBiZSBhY2Nlc3NlZCBmcm9tIG1pZC1ydWxlIGFjdGlvbiBhdCAkJWQiCittc2dzdHIgIiwgZWkga3lldMOkIGvDpHl0dMOkbcOkw6RuIG1pZC1ydWxlIC10b2ltaW50b2Egb3NvaXR0ZWVzc2EgJCVkIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NTIxIHNyYy9zY2FuLWdyYW0ubDo3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZWdlciBvdXQgb2YgcmFuZ2U6ICVzIgorbXNnc3RyICJrb2tvbmFpc2x1a3Ugb24gbHVrdWFsdWVlbiB1bGtvcHVvbGVsbGE6ICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAidmlyaGVlbGxpbmVuIHZpaXRlOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IgYWZ0ZXIgJyVjJywgZXhwZWN0aW5nIGludGVnZXIsIGxldHRlciwgJ18nLCAnWycsIG9yICckJyIKK21zZ3N0ciAiIgorInN5bnRha3NpdmlyaGUgbWVya2luIOKAmSVj4oCZIGrDpGxrZWVuLCBvZG90ZXR0aWluIGtva29uYWlzbHVrdWEsIGtpcmphaW50YSwgdGFpICIKKyJtZXJra2Vqw6Qg4oCZX+KAmSwg4oCZW+KAmSwg4oCZJOKAmSIKKworIzogc3JjL3NjYW4tY29kZS5sOjYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb24gYmVmb3JlICQlZDogJS4qcyIKK21zZ3N0ciAic3ltYm9saWEgZWkgbMO2eXR5bnl0IHR1b3Rhbm5vc3RhIGVubmVuICQlZDogJS4qcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYzMworIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246ICUuKnMiCittc2dzdHIgInN5bWJvbGlhIGVpIGzDtnl0eW55dCB0dW90YW5ub3N0YTogJS4qcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNsZWFkaW5nIHJlZmVyZW5jZTogJXMiCittc2dzdHIgImhhcmhhYW5qb2h0YXZhIHZpaXRlOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAiZWkteWtzaXNlbGl0dGVpbmVuIHZpaXRlOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJleHBsaWNpdCB0eXBlIGdpdmVuIGluIHVudHlwZWQgZ3JhbW1hciIKK21zZ3N0ciAiZWtzcGxpc2lpdHRpbmVuIHR5eXBwaSBhbm5ldHR1IHR5eXBpdHTDtm3DpHNzw6Qga2llbGlvcGlzc2EiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJCQgZm9yIHRoZSBtaWRydWxlIGF0ICQlZCBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiJCQgbWlkcnVsZS1sb2hrb2xsZSBvc29pdHRlZXNzYSAkJWQvJXMgZWkgb2xlIGVzaXRlbHR5w6QgdHl5cHBpw6QiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJCQgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiQkLyVzIGVpIG9sZSBlc2l0ZWx0eSB0eXlwcGkiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJCVzIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICIkJXMvJXMgZWkgb2xlIGVzaXRlbHR5IHR5eXBwaSIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJheSAnLCcgdHJlYXRlZCBhcyB3aGl0ZSBzcGFjZSIKK21zZ3N0ciAieWtzaW7DpGluZW4g4oCZLOKAmSBrw6RzaXRlbGzDpMOkbiB0eWhqZW1lcmtraW7DpCIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRpcmVjdGl2ZTogJXMiCittc2dzdHIgInZpcmhlZWxsaW5lbiBkaXJla3RpaXZpOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50aWZpZXI6ICVzIgorbXNnc3RyICJ2aXJoZWVsbGluZW4gdHVubmlzdGU6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6Mjk1Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIiCittc2dpZF9wbHVyYWwgImludmFsaWQgY2hhcmFjdGVycyIKK21zZ3N0clswXSAidmlyaGVlbGxpbmVuIG1lcmtraTogJXMiCittc2dzdHJbMV0gInZpcmhlZWxsaXNpw6QgbWVya2tlasOkOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGlkZW50aWZpZXIgaW4gYnJhY2tldGVkIG5hbWU6ICVzIgorbXNnc3RyICJvZG90dGFtYXRvbiB0dW5uaXN0ZSBzdWxrdW1lcmtpbGxpc2Vzc8OkIG5pbWVzc8OkOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJhbiBpZGVudGlmaWVyIGV4cGVjdGVkIgorbXNnc3RyICJvZG90ZXR0aWluIHR1bm5pc3RldHRhIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MzgxCittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIgaW4gYnJhY2tldGVkIG5hbWUiCittc2dpZF9wbHVyYWwgImludmFsaWQgY2hhcmFjdGVycyBpbiBicmFja2V0ZWQgbmFtZSIKK21zZ3N0clswXSAidmlyaGVlbGxpbmVuIG1lcmtraSBzdWxrZWlzc2Egb2xldmFzc2EgbmltZXNzw6Q6ICVzIgorbXNnc3RyWzFdICJ2aXJoZWVsbGlzacOkIG1lcmtrZWrDpCBzdWxrZWlzc2Egb2xldmFzc2EgbmltZXNzw6Q6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NDgxIHNyYy9zY2FuLWdyYW0ubDo1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgY2hhcmFjdGVyIGxpdGVyYWwiCittc2dzdHIgInR5aGrDpCBtZXJra2lsaXRlcmFhbGkiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo0ODYgc3JjL3NjYW4tZ3JhbS5sOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJleHRyYSBjaGFyYWN0ZXJzIGluIGNoYXJhY3RlciBsaXRlcmFsIgorbXNnc3RyICJ5bGltw6TDpHLDpGlzacOkIG1lcmtrZWrDpCBtZXJra2lsaXRlcmFhbGlzc2EiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudWxsIGNoYXJhY3RlciIKK21zZ3N0ciAidmlyaGVlbGxpbmVuIG51bGwtbWVya2tpIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NTMxIHNyYy9zY2FuLWdyYW0ubDo1NDEgc3JjL3NjYW4tZ3JhbS5sOjU2MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBhZnRlciBcXC1lc2NhcGU6ICVzIgorbXNnc3RyICJ2aXJoZWVsbGluZW4gbnVtZXJvIFxcLWtvb2RpbnZhaWh0b21lcmtpbiBqw6Rsa2VlbjogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgXFwtZXNjYXBlOiAlcyIKK21zZ3N0ciAidmlyaGVlbGxpbmVuIG1lcmtraSBcXC1rb29kaW52YWlodG9tZXJraW4gasOkbGtlZW46ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6OTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgJXMgYXQgZW5kIG9mIGZpbGUiCittc2dzdHIgInB1dXR0dXZhICVzIHRpZWRvc3RvbiBsb3B1c3NhIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6OTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgJXMgYXQgZW5kIG9mIGxpbmUiCittc2dzdHIgInB1dXR0dXZhICVzIHJpdmluIGxvcHVzc2EiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5jbG9zZWQgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICJzdWxrZW1hdG9uICVzLWRpcmVrdGlpdmkgcnVuZ29zc2EiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIGZldyBhcmd1bWVudHMgZm9yICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAibGlpYW4gdsOkaMOkbiBhcmd1bWVudHRlamEgJXMtZGlyZWt0aWl2aWxsZSBydW5nb3NzYSIKKworIzogc3JjL3NjYW4tc2tlbC5sOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgZm9yICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAibGlpYW4gbW9udGEgYXJndW1lbnR0aWEgJXMtZGlyZWt0aWl2aWxsZSBydW5nb3NzYSIKKworIzogc3JjL3N5bWxpc3QuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAkIHZhbHVlOiAkJWQiCittc2dzdHIgInZpcmhlZWxsaW5lbiAkLWFydm86ICQlZCIKKworIzogc3JjL3N5bXRhYi5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlBPU0lYIFlhY2MgZm9yYmlkcyBkYXNoZXMgaW4gc3ltYm9sIG5hbWVzOiAlcyIKK21zZ3N0ciAiUE9TSVggWWFjYyBraWVsdMOkw6QgYWphdHVzdmlpdmF0IHN5bWJvbGluaW1pc3PDpDogJXMiCisKKyM6IHNyYy9zeW10YWIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBzeW1ib2xzIGluIGlucHV0IGdyYW1tYXIgKGxpbWl0IGlzICVkKSIKK21zZ3N0ciAibGlpYW4gbW9udGEgc3ltYm9saWEgc3nDtnRla2llbGlvcGlzc2EgKHJhamEgb24gJWQpIgorCisjOiBzcmMvc3ltdGFiLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICIlcyB1dWRlbGxlZW5lc2l0dGVseSBrb2h0ZWVsbGUgJXMiCisKKyM6IHNyYy9zeW10YWIuYzoxNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVkZWNsYXJhdGlvbiBmb3IgPCVzPiIKK21zZ3N0ciAiJXMgdXVkZWxsZWVuZXNpdHRlbHkga29odGVlbGxlIDwlcz4iCisKKyM6IHNyYy9zeW10YWIuYzozMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHJlZGVmaW5lZCIKK21zZ3N0ciAic3ltYm9saSAlcyBvbiBtw6TDpHJpdGVsdHkgdXVkZWxsZWVuIgorCisjOiBzcmMvc3ltdGFiLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyByZWRlY2xhcmVkIgorbXNnc3RyICJzeW1ib2xpICVzIG9uIGVzaXRlbHR5IHV1ZGVsbGVlbiIKKworIzogc3JjL3N5bXRhYi5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlZmluaW5nIHVzZXIgdG9rZW4gbnVtYmVyIG9mICVzIgorbXNnc3RyICJtw6TDpHJpdGVsbMOkw6RuIHV1ZGVsbGVlbiBrb2h0ZWVuICVzIGvDpHl0dMOkasOkbWVya2tpc3ltYm9saW51bWVybyIKKworIzogc3JjL3N5bXRhYi5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgaXMgdXNlZCwgYnV0IGlzIG5vdCBkZWZpbmVkIGFzIGEgdG9rZW4gYW5kIGhhcyBubyBydWxlcyIKK21zZ3N0ciAiIgorInN5bWJvbGlhICVzIGvDpHl0ZXTDpMOkbiwgbXV0dGEgc2l0w6QgZWkgb2xlIG3DpMOkcml0ZWx0eSBtZXJra2lzeW1ib2xpbmEgZWlrw6QgIgorInNpbGzDpCBvbGUgc8Okw6RudMO2asOkIgorCisjOiBzcmMvc3ltdGFiLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyB1c2VkIG1vcmUgdGhhbiBvbmNlIGFzIGEgbGl0ZXJhbCBzdHJpbmciCittc2dzdHIgInN5bWJvbGlhICVzIG9uIGvDpHl0ZXR0eSB1c2VhbW1pbiBrdWluIGtlcnJhbiBsaXRlcmFhbGltZXJra2lqb25vbmEiCisKKyM6IHNyYy9zeW10YWIuYzo0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIGdpdmVuIG1vcmUgdGhhbiBvbmUgbGl0ZXJhbCBzdHJpbmciCittc2dzdHIgInN5bWJvbGkgJXMgb24gYW5uZXR0dSB1c2VhbW1hc3NhIGt1aW4geWhkZXNzw6QgbGl0ZXJhYWxpbWVya2tpam9ub3NzYSIKKworIzogc3JjL3N5bXRhYi5jOjUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2VyIHRva2VuIG51bWJlciAlZCByZWRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAia8OkeXR0w6Rqw6RtZXJra2lqb25vbnVtZXJvbiAlZCB1dWRlbGxlZW5lc2l0dGVseSBrb2h0ZWVsbGUgJXMiCisKKyM6IHNyYy9zeW10YWIuYzo1MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJldmlvdXMgZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICJlZGVsbGluZW4gZXNpdHRlbHkga29odGVlbGxlICVzIgorCisjOiBzcmMvc3ltdGFiLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBzdGFydCBzeW1ib2wgJXMgaXMgdW5kZWZpbmVkIgorbXNnc3RyICJhbG9pdHVzc3ltYm9saSAlcyBvbiBtw6TDpHJpdHRlbGVtw6R0w7ZuIgorCisjOiBzcmMvc3ltdGFiLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBzdGFydCBzeW1ib2wgJXMgaXMgYSB0b2tlbiIKK21zZ3N0ciAiYWxvaXR1c3N5bWJvbGkgJXMgb24gbWVya2tpc3ltYm9saSIKKworIzogc3JjL3N5bXRhYi5jOjkzNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlJWRlc3RydWN0b3IiCittc2dzdHIgInV1ZGVsbGVlbmVzaXR0ZWx5IG9sZXR1c21lcmtpdHlsbGUgJSVkZXN0cnVjdG9yIgorCisjOiBzcmMvc3ltdGFiLmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnbGVzcyAlJWRlc3RydWN0b3IiCittc2dzdHIgInV1ZGVsbGVlbmVzaXR0ZWx5IG9sZXR1cy1laS1tZXJraXR5bGxlICUlZGVzdHJ1Y3RvciIKKworIzogc3JjL3N5bXRhYi5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlJXByaW50ZXIiCittc2dzdHIgInV1ZGVsbGVlbmVzaXR0ZWx5IG9sZXR1cy1tZXJraXR5bGxlICUlcHJpbnRlciIKKworIzogc3JjL3N5bXRhYi5jOjk4MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJSVwcmludGVyIgorbXNnc3RyICJ1dWRlbGxlZW5lc2l0dGVseSBvbGV0dXMtZWktbWVya2l0eWxsZSAlJXByaW50ZXIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzo2MyBkamdwcC9zdWJwaXBlLmM6Mjg2IGRqZ3BwL3N1YnBpcGUuYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3Zpbmcgb2YgJyVzJyBmYWlsZWQiCittc2dzdHIgImtvaHRlZW4g4oCZJXPigJkgcG9pc3RhbWluZW4gZXDDpG9ubmlzdHVpIgorCisjOiBkamdwcC9zdWJwaXBlLmM6ODUgZGpncHAvc3VicGlwZS5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNyZWF0aW9uIG9mIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICJ0aWxhcMOkaXNlbiB0aWVkb3N0b24gbHVvbWluZW4gZXDDpG9ubmlzdHVpIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgInNhdmluZyBzdGRpbiBmYWlsZWQiCittc2dzdHIgInZha2lvc3nDtnTDtm4gdGFsbGVudGFtaW5lbiBlcMOkb25uaXN0dWkiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAic2F2aW5nIHN0ZG91dCBmYWlsZWQiCittc2dzdHIgInZha2lvdHVsb3N0ZWVuIHRhbGxlbnRhbWluZW4gZXDDpG9ubmlzdHVpIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTUzIGRqZ3BwL3N1YnBpcGUuYzoxOTcgZGpncHAvc3VicGlwZS5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nIG9mIHRtcGZpbGUgZmFpbGVkIgorbXNnc3RyICJ0aWxhcMOkaXNlbiB0aWVkb3N0b24gdG1wZmlsZSBhdmFhbWluZW4gZXDDpG9ubmlzdHVpIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIGJpc29uJ3Mgc3Rkb3V0IHRvIHRoZSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKyJiaXNvbi12YWtpb3R1bG9zdGVlbiBlZGVsbGVlbm9oamFhbWluZW4gdGlsYXDDpGlzZWVuIHRpZWRvc3Rvb24gZXDDpG9ubmlzdHVpIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIG00J3Mgc3RkaW4gZnJvbSB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICJtNC12YWtpb3N5w7Z0dGVlbiBlZGVsbGVlbm9oamFhbWluZW4gdGlsYXDDpGlzZWVuIHRpZWRvc3Rvb24gZXDDpG9ubmlzdHVpIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZW5pbmcgb2YgYSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgInRpbGFww6Rpc2VuIHRpZWRvc3RvbiBhdmFhbWluZW4gZXDDpG9ubmlzdHVpIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIG00J3Mgc3Rkb3V0IHRvIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisibTQtdmFraW90dWxvc3RlZW4gZWRlbGxlZW5vaGphYW1pbmVuIHRpbGFww6Rpc2VlbiB0aWVkb3N0b29uIGVww6Rvbm5pc3R1aSIKKworIzogZGpncHAvc3VicGlwZS5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gJyVzJyBpbnRlcnJ1cHRlZCIKK21zZ3N0ciAidHl0w6Ryb2hqZWxtYSDigJklc+KAmSBvbiBrZXNrZXl0ZXR0eSIKKworIzogZGpncHAvc3VicGlwZS5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gJyVzJyBub3QgZm91bmQiCittc2dzdHIgInR5dMOkcm9oamVsbWFhIOKAmSVz4oCZIGVpIGzDtnl0eW55dCIKKworIzogZGpncHAvc3VicGlwZS5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBiaXNvbidzIHN0ZGluIGZyb20gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorImJpc29uLXZha2lvc3nDtnR0ZWVuIGVkZWxsZWVub2hqYWFtaW5lbiB0aWxhcMOkaXNlZW4gdGllZG9zdG9vbiBlcMOkb25uaXN0dWkiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGFyZ3VtZW50ICVzIGZvciAlcyIKK21zZ3N0ciAidmlyaGVlbGxpbmVuIGFyZ3VtZW50dGkgJXMgdmFsaXRzaW1lbGxlICVzIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIGFyZ3VtZW50ICVzIGZvciAlcyIKK21zZ3N0ciAiZWkteWtzaXNlbGl0dGVpbmVuIGFyZ3VtZW50dGkgJXMgdmFsaXRzaW1lbGxlICVzIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxNTMKK21zZ2lkICJWYWxpZCBhcmd1bWVudHMgYXJlOiIKK21zZ3N0ciAiTWFoZG9sbGlzZXQgYXJndW1lbnRpdCBvdmF0OiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfYWxsb2NzLCAldSBmcmVlZCAoJS4yZiUlKS5cbiIKK21zZ3N0ciAiJXUgYml0c2V0X2FsbG9jcywgJXUgdmFwYXV0ZXR0dSAoJS4yZiUlKS5cbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfc2V0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF9zZXRzLCAldSB0YWxsZW5uZXR0dSB2w6RsaW11aXN0aWluICglLjJmJSUpXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3Jlc2V0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF9yZXNldHMsICV1IHRhbGxlbm5ldHR1IHbDpGxpbXVpc3RpaW4gKCUuMmYlJSlcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfdGVzdHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorbXNnc3RyICIldSBiaXRzZXRfdGVzdHMsICV1IHRhbGxlbm5ldHR1IHbDpGxpbXVpc3RpaW4gKCUuMmYlJSlcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfbGlzdHNcbiIKK21zZ3N0ciAiJXUgYml0c2V0X2xpc3RzXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTIKK21zZ2lkICJjb3VudCBsb2cgaGlzdG9ncmFtXG4iCittc2dzdHIgImx1a3Vtw6TDpHLDpGxva2loaXN0b2dyYW1taVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTk1Cittc2dpZCAic2l6ZSBsb2cgaGlzdG9ncmFtXG4iCittc2dzdHIgImtva29sb2tpaGlzdG9ncmFtbWlcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5OAorbXNnaWQgImRlbnNpdHkgaGlzdG9ncmFtXG4iCittc2dzdHIgInRpaGV5c2hpc3RvZ3JhbW1pXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJpdHNldCBzdGF0aXN0aWNzOlxuIgorIlxuIgorbXNnc3RyICIiCisiQml0dGl2ZWt0b3JpdGlsYXN0b3Q6XG4iCisiXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWNjdW11bGF0ZWQgcnVucyA9ICV1XG4iCittc2dzdHIgIkt1bXVsb2l0dW5lZXQgYWpvdCA9ICV1XG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyNTkgbGliL2JpdHNldF9zdGF0cy5jOjI2NAorbXNnaWQgImNhbm5vdCByZWFkIHN0YXRzIGZpbGUiCittc2dzdHIgInN0YXRzLXRpZWRvc3RvbiBsdWtlbWluZW4gZXDDpG9ubmlzdHVpIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBzdGF0cyBmaWxlIHNpemVcbiIKK21zZ3N0ciAidmlyaGVlbGxpbmVuIHN0YXRzLXRpZWRvc3Rva29rb1xuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6Mjg3IGxpYi9iaXRzZXRfc3RhdHMuYzoyODkKK21zZ2lkICJjYW5ub3Qgd3JpdGUgc3RhdHMgZmlsZSIKK21zZ3N0ciAic3RhdHMtdGllZG9zdG9vbiBraXJqb2l0dGFtaW5lbiBlcMOkb25uaXN0dWkiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyOTIKK21zZ2lkICJjYW5ub3Qgb3BlbiBzdGF0cyBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJzdGF0cy10aWVkb3N0b24gYXZhYW1pbmVuIGtpcmpvaXR0YW1pc3RhIHZhcnRlbiBlcMOkb25uaXN0dWkiCisKKyM6IGxpYi9jbG9zZW91dC5jOjExMgorbXNnaWQgIndyaXRlIGVycm9yIgorbXNnc3RyICJraXJqb2l0dXN2aXJoZSIKKworIzogbGliL2Vycm9yLmM6MTg4Cittc2dpZCAiVW5rbm93biBzeXN0ZW0gZXJyb3IiCittc2dzdHIgIlR1bnRlbWF0b24gasOkcmplc3RlbG3DpHZpcmhlIgorCisjOiBsaWIvZ2V0b3B0LmM6NTQ3IGxpYi9nZXRvcHQuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnJXMnIGlzIGFtYmlndW91czsgcG9zc2liaWxpdGllczoiCittc2dzdHIgIiVzOiB2YWxpdHNpbiDigJklc+KAmSBlaSBvbGUgeWtzaXNlbGl0dGVpbmVuOyBtYWhkb2xsaXN1dWRldDoiCisKKyM6IGxpYi9nZXRvcHQuYzo2MjQgbGliL2dldG9wdC5jOjYyOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiB2YWxpdHNpbiDigJktLSVz4oCZIGVpIHNhbGxpIGFyZ3VtZW50dGlhXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo2MzcgbGliL2dldG9wdC5jOjY0MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICclYyVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiB2YWxpdHNpbiDigJklYyVz4oCZIGVpIHNhbGxpIGFyZ3VtZW50dGlhXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo2ODUgbGliL2dldG9wdC5jOjcwNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctLSVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogdmFsaXRzaW4g4oCZLS0lc+KAmSB2YWF0aWkgYXJndW1lbnRpblxuIgorCisjOiBsaWIvZ2V0b3B0LmM6NzQyIGxpYi9nZXRvcHQuYzo3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gJy0tJXMnXG4iCittc2dzdHIgIiVzOiB0dW5uaXN0YW1hdG9uIHZhbGl0c2luIOKAmS0tJXPigJlcbiIKKworIzogbGliL2dldG9wdC5jOjc1MyBsaWIvZ2V0b3B0LmM6NzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uICclYyVzJ1xuIgorbXNnc3RyICIlczogdHVubmlzdGFtYXRvbiB2YWxpdHNpbiDigJklYyVz4oCZXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo4MDUgbGliL2dldG9wdC5jOjgwOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBvcHRpb24gLS0gJyVjJ1xuIgorbXNnc3RyICIlczogdmlyaGVlbGxpbmVuIHZhbGl0c2luIOKAlCDigJklY+KAmVxuIgorCisjOiBsaWIvZ2V0b3B0LmM6ODYxIGxpYi9nZXRvcHQuYzo4NzggbGliL2dldG9wdC5jOjEwODggbGliL2dldG9wdC5jOjExMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAnJWMnXG4iCittc2dzdHIgIiVzOiB2YWxpdHNpbiB2YWF0aWkgYXJndW1lbnRpbiDigJQg4oCZJWPigJlcbiIKKworIzogbGliL2dldG9wdC5jOjkzNCBsaWIvZ2V0b3B0LmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyBpcyBhbWJpZ3VvdXNcbiIKK21zZ3N0ciAiJXM6IHZhbGl0c2luIOKAmS1XICVz4oCZIGVpIG9sZSB5a3Npc2VsaXR0ZWluZW5cbiIKKworIzogbGliL2dldG9wdC5jOjk3NCBsaWIvZ2V0b3B0LmM6OTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiB2YWxpdHNpbiDigJktVyAlc+KAmSBlaSBzYWxsaSBhcmd1bWVudHRpYVxuIgorCisjOiBsaWIvZ2V0b3B0LmM6MTAxMyBsaWIvZ2V0b3B0LmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IHZhbGl0c2luIOKAmS1XICVz4oCZIHZhYXRpaSBhcmd1bWVudGluXG4iCisKKyM6IGxpYi9vYnN0YWNrLmM6NDEzIGxpYi9vYnN0YWNrLmM6NDE1IGxpYi94YWxsb2MtZGllLmM6MzQKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJtdWlzdGkgbG9wcHVpIgorCisjOiBsaWIvc3Bhd24tcGlwZS5jOjE0MCBsaWIvc3Bhd24tcGlwZS5jOjE0MyBsaWIvc3Bhd24tcGlwZS5jOjI2NAorIzogbGliL3NwYXduLXBpcGUuYzoyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBwaXBlIgorbXNnc3RyICJwdXRrZW4gbHVvbWluZW4gZXDDpG9ubmlzdHVpIgorCisjOiBsaWIvc3Bhd24tcGlwZS5jOjIzNCBsaWIvc3Bhd24tcGlwZS5jOjM0OCBsaWIvd2FpdC1wcm9jZXNzLmM6MjgyCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MgZmFpbGVkIgorbXNnc3RyICIlcy1hbGlwcm9zZXNzaSBlcMOkb25uaXN0dWkiCisKKyMuIFRSQU5TTEFUT1JTOgorIy4gR2V0IHRyYW5zbGF0aW9ucyBmb3Igb3BlbiBhbmQgY2xvc2luZyBxdW90YXRpb24gbWFya3MuCisjLiBUaGUgbWVzc2FnZSBjYXRhbG9nIHNob3VsZCB0cmFuc2xhdGUgImAiIHRvIGEgbGVmdAorIy4gcXVvdGF0aW9uIG1hcmsgc3VpdGFibGUgZm9yIHRoZSBsb2NhbGUsIGFuZCBzaW1pbGFybHkgZm9yCisjLiAiJyIuICBGb3IgZXhhbXBsZSwgYSBGcmVuY2ggVW5pY29kZSBsb2NhbCBzaG91bGQgdHJhbnNsYXRlCisjLiB0aGVzZSB0byBVKzAwQUIgKExFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFCisjLiBRVU9UQVRJT04gTUFSSyksIGFuZCBVKzAwQkIgKFJJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRQorIy4gUVVPVEFUSU9OIE1BUkspLCByZXNwZWN0aXZlbHkuCisjLgorIy4gSWYgdGhlIGNhdGFsb2cgaGFzIG5vIHRyYW5zbGF0aW9uLCB3ZSB3aWxsIHRyeSB0bworIy4gdXNlIFVuaWNvZGUgVSsyMDE4IChMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykgYW5kCisjLiBVbmljb2RlIFUrMjAxOSAoUklHSFQgU0lOR0xFIFFVT1RBVElPTiBNQVJLKS4gIElmIHRoZQorIy4gY3VycmVudCBsb2NhbGUgaXMgbm90IFVuaWNvZGUsIGxvY2FsZV9xdW90aW5nX3N0eWxlCisjLiB3aWxsIHF1b3RlICdsaWtlIHRoaXMnLCBhbmQgY2xvY2FsZV9xdW90aW5nX3N0eWxlIHdpbGwKKyMuIHF1b3RlICJsaWtlIHRoaXMiLiAgWW91IHNob3VsZCBhbHdheXMgaW5jbHVkZSB0cmFuc2xhdGlvbnMKKyMuIGZvciAiYCIgYW5kICInIiBldmVuIGlmIFUrMjAxOCBhbmQgVSsyMDE5IGFyZSBhcHByb3ByaWF0ZQorIy4gZm9yIHlvdXIgbG9jYWxlLgorIy4KKyMuIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gcHV0IGhlcmUsIHBsZWFzZSBzZWUKKyMuIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1F1b3RhdGlvbl9tYXJrc19pbl9vdGhlcl9sYW5ndWFnZXM+CisjLiBhbmQgdXNlIGdseXBocyBzdWl0YWJsZSBmb3IgeW91ciBsYW5ndWFnZS4KKyM6IGxpYi9xdW90ZWFyZy5jOjMxMgorbXNnaWQgImAiCittc2dzdHIgIuKAnSIKKworIzogbGliL3F1b3RlYXJnLmM6MzEzCittc2dpZCAiJyIKK21zZ3N0ciAi4oCdIgorCisjOiBsaWIvdGltZXZhci5jOjQ3NQorbXNnaWQgIiIKKyJcbiIKKyJFeGVjdXRpb24gdGltZXMgKHNlY29uZHMpXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTdW9yaXR1c2FqYXQgKHNla3VudGVqYSlcbiIKKworIzogbGliL3RpbWV2YXIuYzo1MjUKK21zZ2lkICIgVE9UQUwgICAgICAgICAgICAgICAgIDoiCittc2dzdHIgIiBZSFRFRU5Tw4QgICAgICAgICAgICAgIDoiCisKKyM6IGxpYi90aW1ldmFyLmM6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWUgaW4gJXM6ICVsZC4lMDZsZCAoJWxkJSUpXG4iCittc2dzdHIgImFpa2Ega29odGVlc3NhICVzOiAlbGQuJTA2bGQgKCVsZCUlKVxuIgorCisjOiBsaWIvdzMyc3Bhd24uaDo0MworIywgYy1mb3JtYXQKK21zZ2lkICJfb3Blbl9vc2ZoYW5kbGUgZmFpbGVkIgorbXNnc3RyICJfb3Blbl9vc2ZoYW5kbGUgZXDDpG9ubmlzdHVpIgorCisjOiBsaWIvdzMyc3Bhd24uaDo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdG9yZSBmZCAlZDogZHVwMiBmYWlsZWQiCittc2dzdHIgImVpIHZvaWRhIHBhbGF1dHRhYSB0aWVkb3N0b3R1bm5pc3RldHRhICVkOiBkdXAyIGVww6Rvbm5pc3R1aSIKKworIzogbGliL3dhaXQtcHJvY2Vzcy5jOjIyMyBsaWIvd2FpdC1wcm9jZXNzLmM6MjU1IGxpYi93YWl0LXByb2Nlc3MuYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyIKK21zZ3N0ciAiJXMtYWxpcHJvc2Vzc2kiCisKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzoyNzQgbGliL3dhaXQtcHJvY2Vzcy5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdWJwcm9jZXNzIGdvdCBmYXRhbCBzaWduYWwgJWQiCittc2dzdHIgIiVzLWFsaXByb3Nlc3NpIHNhaSBrb2h0YWxva2thYW4gc2lnbmFhbGluICVkIgorCisjfiBtc2dpZCAic3RhdGUgJWQiCisjfiBtc2dzdHIgInRpbGEgJWQiCisKKyN+IG1zZ2lkICJzdHJheSAnQCciCisjfiBtc2dzdHIgInlrc2luw6RpbmVuIOKAmUDigJkiCisKKyN+IG1zZ2lkICIiCisjfiAidW5kZWZpbmVkICUlZGVmaW5lIHZhcmlhYmxlIGAlcycgcGFzc2VkIHRvIG11c2NsZV9wZXJjZW50X2RlZmluZV9nZXRfbG9jIgorI34gbXNnc3RyICIiCisjfiAibcOkw6RyaXR0ZWxlbcOkdMO2biAlJWRlZmluZS1tdXV0dHVqYSDigJ0lc+KAnSB2w6RsaXRldHR5IGtvaHRlZWxsZSAiCisjfiAibXVzY2xlX3BlcmNlbnRfZGVmaW5lX2dldF9sb2MiCisKKyN+IG1zZ2lkICIiCisjfiAidW5kZWZpbmVkICUlZGVmaW5lIHZhcmlhYmxlIGAlcycgcGFzc2VkIHRvICIKKyN+ICJtdXNjbGVfcGVyY2VudF9kZWZpbmVfZ2V0X3N5bmNsaW5lIgorI34gbXNnc3RyICIiCisjfiAibcOkw6RyaXR0ZWxlbcOkdMO2biAlJWRlZmluZS1tdXV0dHVqYSDigJ0lc+KAnSB2w6RsaXRldHR5IGtvaHRlZWxsZSAiCisjfiAibXVzY2xlX3BlcmNlbnRfZGVmaW5lX2dldF9zeW5jbGluZSIKKworI34gbXNnaWQgIiIKKyN+ICJ1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgYCVzJyBwYXNzZWQgdG8gbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2ZsYWdfaWYiCisjfiBtc2dzdHIgIiIKKyN+ICJtw6TDpHJpdHRlbGVtw6R0w7ZuICUlZGVmaW5lLW11dXR0dWphIOKAnSVz4oCdIHbDpGxpdGV0dHkga29odGVlbGxlICIKKyN+ICJtdXNjbGVfcGVyY2VudF9kZWZpbmVfZmxhZ19pZiIKKworI34gbXNnaWQgIiIKKyN+ICJ1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgYCVzJyBwYXNzZWQgdG8gIgorI34gIm11c2NsZV9wZXJjZW50X2RlZmluZV9jaGVja192YWx1ZXMiCisjfiBtc2dzdHIgIiIKKyN+ICJtw6TDpHJpdHRlbGVtw6R0w7ZuICUlZGVmaW5lLW11dXR0dWphIOKAnSVz4oCdIHbDpGxpdGV0dHkga29odGVlbGxlICIKKyN+ICJtdXNjbGVfcGVyY2VudF9kZWZpbmVfY2hlY2tfdmFsdWVzIgorCisjfiBtc2dpZCAiIgorI34gIkdlbmVyYXRlIExBTFIoMSkgYW5kIEdMUiBwYXJzZXJzLlxuIgorI34gIlxuIgorI34gbXNnc3RyICIiCisjfiAiVHVvdGEgTEFMUigxKSBqYSBHTFIgLWrDpHNlbnRpbWV0LlxuIgorI34gIlxuIgorCisjfiBtc2dpZCAidG9rZW5zICVzIGFuZCAlcyBib3RoIGFzc2lnbmVkIG51bWJlciAlZCIKKyN+IG1zZ3N0ciAibWVya2tpc3ltYm9sZWlsbGUgJXMgamEgJXMgb24gYW5uZXR0dSBzYW1hIG51bWVybyAlZCIKKworI34gbXNnaWQgImludmFsaWQgZXNjYXBlIHNlcXVlbmNlOiAlcyIKKyN+IG1zZ3N0ciAidmlyaGVlbGxpbmVuIGtvb2RpbnZhaWh0b3Nla3ZlbnNzaTogJXMiCisKKyN+IG1zZ2lkICJ1bnJlY29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlOiAlcyIKKyN+IG1zZ3N0ciAidHVubmlzdGFtYXRvbiBrb29kaW52YWlodG9zZWt2ZW5zc2k6ICVzIgorCisjfiBtc2dpZCAiJXM6IGlsbGVnYWwgb3B0aW9uIC0tICVjXG4iCisjfiBtc2dzdHIgIiVzOiB2aXJoZWVsbGluZW4gdmFsaXRzaW4g4oCUICVjXG4iCmRpZmYgLS1naXQgYS9wby9mci5nbW8gYi9wby9mci5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg3NDlmNgotLS0gL2Rldi9udWxsCisrKyBiL3BvL2ZyLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9mci5wbyBiL3BvL2ZyLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZGE0YzYKLS0tIC9kZXYvbnVsbAorKysgYi9wby9mci5wbwpAQCAtMCwwICsxLDEyMTkgQEAKKyMgTWVzc2FnZXMgZnJhbsOnYWlzIHBvdXIgQmlzb24uCisjIENvcHlyaWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGJpc29uIHBhY2thZ2UuCisjIE1pY2hlbCBSb2JpdGFpbGxlIDxyb2JpdGFpbEBJUk8uVU1vbnRyZWFsLkNBPiwgdHJhZHVjdGV1ciBkZXB1aXMvc2luY2UgMTk5NgorIyBEb21pbmlxdWUgQm91Y2hlciBhIMOpdMOpIGxlIHRyYWR1Y3RldXIgZGUgMTk5NiDDoCAyMDAwCisjIEZyw6lkw6lyaWMgTWFyY2hhbCA8Zm1hcmNoYWxAcGVyc28uYmU+LCAyMDEyLgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogR05VIGJpc29uIDIuNi45MFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBidWctYmlzb25AZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEyLTEyLTEyIDE2OjA5KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEyLTEyLTExIDIwOjE1KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEZyw6lkw6lyaWMgTWFyY2hhbCA8Zm1hcmNoYWxAcGVyc28uYmU+XG4iCisiTGFuZ3VhZ2UtVGVhbTogRnJlbmNoIDx0cmFkdWNAdHJhZHVjLm9yZz5cbiIKKyJMYW5ndWFnZTogZnJcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6ICBucGx1cmFscz0yOyBwbHVyYWw9KG4gPiAxKTtcbiIKKyJYLUdlbmVyYXRvcjogTG9rYWxpemUgMS41XG4iCisKKyM6IHNyYy9jb21wbGFpbi5jOjEyMCBzcmMvY29tcGxhaW4uYzoxMzEgc3JjL2NvbXBsYWluLmM6MTQwIHNyYy9jb21wbGFpbi5jOjE4OAorIzogc3JjL2NvbXBsYWluLmM6MTk4Cittc2dpZCAid2FybmluZyIKK21zZ3N0ciAiYXZlcnRpc3NlbWVudCIKKworIzogc3JjL2NvbXBsYWluLmM6MTUxIHNyYy9jb21wbGFpbi5jOjE2MCBzcmMvY29tcGxhaW4uYzoxNjcKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiZXJyZXVyIgorCisjOiBzcmMvY29tcGxhaW4uYzoyMDggc3JjL2NvbXBsYWluLmM6MjE1Cittc2dpZCAiZmF0YWwgZXJyb3IiCittc2dzdHIgImVycmV1ciBmYXRhbGUiCisKKyM6IHNyYy9jb25mbGljdHMuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyBzaGlmdCIKK21zZ3N0ciAiICAgIENvbmZsaXQgZW50cmUgbGEgcsOoZ2xlICVkIGV0IGxlIGpldG9uICVzIHLDqXNvbHUgcGFyIGTDqWNhbGFnZSIKKworIzogc3JjL2NvbmZsaWN0cy5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIHJlZHVjZSIKK21zZ3N0ciAiICAgIENvbmZsaXQgZW50cmUgbGEgcsOoZ2xlICVkIGV0IGxlIGpldG9uICVzIHLDqXNvbHUgcGFyIHLDqWR1Y3Rpb24iCisKKyM6IHNyYy9jb25mbGljdHMuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyBhbiBlcnJvciIKK21zZ3N0ciAiIgorIiAgICBDb25mbGl0IGVudHJlIGxhIHLDqGdsZSAlZCBldCBsZSBqZXRvbiAlcyByw6lzb2x1IGNvbW1lIMOpdGFudCB1bmUgZXJyZXVyIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgc2hpZnQvcmVkdWNlLCAlZCByZWR1Y2UvcmVkdWNlXG4iCittc2dzdHIgImNvbmZsaXRzOiAlZCBkw6ljYWxhZ2UvcsOpZHVjdGlvbiwgJWQgcsOpZHVjdGlvbi9yw6lkdWN0aW9uXG4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCBzaGlmdC9yZWR1Y2VcbiIKK21zZ3N0ciAiY29uZmxpdHM6ICVkIGTDqWNhbGFnZS9yw6lkdWN0aW9uXG4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCByZWR1Y2UvcmVkdWNlXG4iCittc2dzdHIgImNvbmZsaXRzOiAlZCByw6lkdWN0aW9uL3LDqWR1Y3Rpb25cbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdGF0ZSAlZCAiCittc2dzdHIgIsOJdGF0ICVkICIKKworIzogc3JjL2NvbmZsaWN0cy5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICIlJWV4cGVjdC1yciBhcHBsaWVzIG9ubHkgdG8gR0xSIHBhcnNlcnMiCittc2dzdHIgIiUlZXhwZWN0LXJyIGFmZmVjdGUgc2V1bGVtZW50IGxlcyBhbmFseXNldXJzIEdMUiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjYxNgorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCAlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3QiCittc2dpZF9wbHVyYWwgImV4cGVjdGVkICVkIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMiCittc2dzdHJbMF0gImF0dGVuZGFpdCAlZCBjb25mbGl0IHBhciBkw6ljYWxhZ2UvcsOpZHVjdGlvbiIKK21zZ3N0clsxXSAiYXR0ZW5kYWl0ICVkIGNvbmZsaXRzIHBhciBkw6ljYWxhZ2UvcsOpZHVjdGlvbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjYyMQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCAlZCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJleHBlY3RlZCAlZCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAiYXR0ZW5kYWl0ICVkIGNvbmZsaXQgcGFyIHLDqWR1Y3Rpb24vcsOpZHVjdGlvbiIKK21zZ3N0clsxXSAiYXR0ZW5kYWl0ICVkIGNvbmZsaXRzIHBhciByw6lkdWN0aW9uL3LDqWR1Y3Rpb24iCisKKyM6IHNyYy9maWxlcy5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IG9wZW4iCittc2dzdHIgIiVzOiBvdXZlcnR1cmUgaW1wb3NzaWJsZSIKKworIzogc3JjL2ZpbGVzLmM6MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImlucHV0L291dHB1dCBlcnJvciIKK21zZ3N0ciAiZXJyZXVyIGQnZW50csOpZS9zb3J0aWUiCisKKyM6IHNyYy9maWxlcy5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2UgZmlsZSIKK21zZ3N0ciAibmUgcGV1dCBmZXJtZXIgbGUgZmljaGllciIKKworIzogc3JjL2ZpbGVzLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIG92ZXJ3cml0ZSB0aGUgaW5wdXQgZmlsZSAlcyIKK21zZ3N0ciAicmVmdXMgZCfDqWNyYXNlciBsZSBmaWNoaWVyIGQnZW50csOpZSAlcyIKKworIzogc3JjL2ZpbGVzLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0aW5nIG91dHB1dHMgdG8gZmlsZSAlcyIKK21zZ3N0ciAic29ydGllcyBlbiBjb25mbGl0IHZlcnMgbGUgZmljaGllciAlcyIKKworIzogc3JjL2dldGFyZ3MuYzoyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5IGAlcyAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIgorbXNnc3RyICJQb3VyIGVuIHNhdm9pciBkYXZhbnRhZ2UsIGZhaXRlczogwqvCoCVzIC0taGVscMKgwrsuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbT1BUSU9OXS4uLiBGSUxFXG4iCittc2dzdHIgIlVzYWdlOiAlcyBbT1BUSU9OXS4uLiBGSUNISUVSXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzAyCittc2dpZCAiIgorIkdlbmVyYXRlIGEgZGV0ZXJtaW5pc3RpYyBMUiBvciBnZW5lcmFsaXplZCBMUiAoR0xSKSBwYXJzZXIgZW1wbG95aW5nXG4iCisiTEFMUigxKSwgSUVMUigxKSwgb3IgY2Fub25pY2FsIExSKDEpIHBhcnNlciB0YWJsZXMuICBJRUxSKDEpIGFuZFxuIgorImNhbm9uaWNhbCBMUigxKSBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkfDqW7DqXJhdGlvbiBkJ3VuIGFuYWx5c2V1ciBMUiBkw6l0ZXJtaW5pc3RlIG9yIGQndW4gTFIgZ8OpbsOpcmFsaXPDqSAoR0xSKSAiCisiZW1wbG95YW50XG4iCisiTEFMUigxKSwgSUVMUigxKSBvdSBkZXMgdGFibGVzIGQnYW5hbHlzZXVyIExSKDEpIGNhbm9uaXF1ZS4gTGUgc3VwcG9ydCBkZSAiCisiSUVMUigxKVxuIgorImV0IGRlIExSKDEpIGNhbm9uaXF1ZSBlc3QgZXhww6lyaW1lbnRhbC5cbiIKKyJcbiIKKworIzogc3JjL2dldGFyZ3MuYzozMDkKK21zZ2lkICIiCisiTWFuZGF0b3J5IGFyZ3VtZW50cyB0byBsb25nIG9wdGlvbnMgYXJlIG1hbmRhdG9yeSBmb3Igc2hvcnQgb3B0aW9ucyB0b28uXG4iCittc2dzdHIgIiIKKyJMZXMgcGFyYW3DqHRyZXMgcmVxdWlzIHBvdXIgbGVzIG9wdGlvbnMgbG9uZ3VlcyBzb250IMOpZ2FsZW1lbnQgcmVxdWlzIHBvdXIgIgorImxlcyBvcHRpb25zIGNvdXJ0ZXMuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzEyCittc2dpZCAiVGhlIHNhbWUgaXMgdHJ1ZSBmb3Igb3B0aW9uYWwgYXJndW1lbnRzLlxuIgorbXNnc3RyICJMYSBtw6ptZSBjaG9zZSBlc3QgdnJhaWUgcG91ciBsZXMgcGFyYW3DqHRyZXMgb3B0aW9ubmVscy5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozMTYKK21zZ2lkICIiCisiXG4iCisiT3BlcmF0aW9uIG1vZGVzOlxuIgorIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKKyIgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCisiICAgICAgLS1wcmludC1sb2NhbGVkaXIgICAgICBvdXRwdXQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgbG9jYWxlLWRlcGVuZGVudCAiCisiZGF0YVxuIgorIiAgICAgIC0tcHJpbnQtZGF0YWRpciAgICAgICAgb3V0cHV0IGRpcmVjdG9yeSBjb250YWluaW5nIHNrZWxldG9ucyBhbmQgWFNMVFxuIgorIiAgLXksIC0teWFjYyAgICAgICAgICAgICAgICAgZW11bGF0ZSBQT1NJWCBZYWNjXG4iCisiICAtVywgLS13YXJuaW5nc1s9Q0FURUdPUlldICByZXBvcnQgdGhlIHdhcm5pbmdzIGZhbGxpbmcgaW4gQ0FURUdPUllcbiIKKyIgIC1mLCAtLWZlYXR1cmVbPUZFQVRVUkVdICAgIGFjdGl2YXRlIG1pc2NlbGxhbmVvdXMgZmVhdHVyZXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIk1vZGVzIGQndXRpbGlzYXRpb246XG4iCisiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICBhZmZpY2hlciBsJ2FpZGUtbcOpbW9pcmVcbiIKKyIgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgIGFmZmljaGVyIGxlIG5vbSBldCBsYSB2ZXJzaW9uIGR1IGxvZ2ljaWVsXG4iCisiICAgICAgLS1wcmludC1sb2NhbGVkaXIgICAgICBhZmZpY2hlciBsZSByw6lwZXJ0b2lyZSBjb250ZW5hbnQgbGVzIGRvbm7DqWVzICIKKyJhdmVjIGTDqXBlbmRhbmNlIGRlcyBsb2NhbGVzXG4iCisiICAgICAgLS1wcmludC1kYXRhZGlyICAgICAgICBhZmZpY2hlciBsZSByw6lwZXJ0b2lyZSBjb250ZW5hbnQgbGVzIHNxdWVsZXR0ZXMgIgorImV0IFhTTFRcbiIKKyIgIC15LCAtLXlhY2MgICAgICAgICAgICAgICAgIMOpbXVsZXIgeWFjYyBlbiBtb2RlIFBPU0lYXG4iCisiICAtVywgLS13YXJuaW5nc1s9Q0FUw4lHT1JJRV0gc2lnbmFsZXIgbGVzIGF2ZXJ0aXNzZW1lbnRzIGRlIGxhIENBVMOJR09SSUVcbiIKKyIgIC1mLCAtLWZlYXR1cmVbPUZPTkNUSU9OXSAgIGFjdGl2ZXIgZGVzIGZvbmN0aW9ubmFsaXTDqXMgZGl2ZXJzZXNcbiIKKyJcbiIKKworIzogc3JjL2dldGFyZ3MuYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnNlcjpcbiIKKyIgIC1MLCAtLWxhbmd1YWdlPUxBTkdVQUdFICAgICAgICAgIHNwZWNpZnkgdGhlIG91dHB1dCBwcm9ncmFtbWluZyBsYW5ndWFnZVxuIgorIiAgLVMsIC0tc2tlbGV0b249RklMRSAgICAgICAgICAgICAgc3BlY2lmeSB0aGUgc2tlbGV0b24gdG8gdXNlXG4iCisiICAtdCwgLS1kZWJ1ZyAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50IHRoZSBwYXJzZXIgZm9yIGRlYnVnZ2luZ1xuIgorIiAgICAgIC0tbG9jYXRpb25zICAgICAgICAgICAgICAgICAgZW5hYmxlIGxvY2F0aW9uIHN1cHBvcnRcbiIKKyIgIC1ELCAtLWRlZmluZT1OQU1FWz1WQUxVRV0gICAgICAgIHNpbWlsYXIgdG8gJyVkZWZpbmUgTkFNRSBcIlZBTFVFXCInXG4iCisiICAtRiwgLS1mb3JjZS1kZWZpbmU9TkFNRVs9VkFMVUVdICBvdmVycmlkZSAnJWRlZmluZSBOQU1FIFwiVkFMVUVcIidcbiIKKyIgIC1wLCAtLW5hbWUtcHJlZml4PVBSRUZJWCAgICAgICAgIHByZXBlbmQgUFJFRklYIHRvIHRoZSBleHRlcm5hbCBzeW1ib2xzXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXByZWNhdGVkIGJ5ICctRGFwaS5wcmVmaXg9UFJFRklYJ1xuIgorIiAgLWwsIC0tbm8tbGluZXMgICAgICAgICAgICAgICAgICAgZG9uJ3QgZ2VuZXJhdGUgJyNsaW5lJyBkaXJlY3RpdmVzXG4iCisiICAtaywgLS10b2tlbi10YWJsZSAgICAgICAgICAgICAgICBpbmNsdWRlIGEgdGFibGUgb2YgdG9rZW4gbmFtZXNcbiIKK21zZ3N0ciAiIgorIkFuYWx5c2V1cjpcbiIKKyIgIC1MLCAtLWxhbmd1YWdlPUxBTkdBR0UgICAgICAgICAgIGluZGlxdWVyIGxhIGxhbmdhZ2UgZGUgcHJvZ3JhbW1hdGlvbiBkZSAiCisic29ydGllXG4iCisiICAtUywgLS1za2VsZXRvbj1GSUNISUVSICAgICAgICAgICB1dGlsaXNlciBsZSBGSUNISUVSIHNxdWVsZXR0ZVxuIgorIiAgLXQsIC0tZGVidWcgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlciBsZSBtb2RlIGRlIG1pc2UgYXUgcG9pbnRcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlIGwnYW5hbHlzZXVyXG4iCisiICAgICAgLS1sb2NhdGlvbnMgICAgICAgICAgICAgICAgICBwZXJtZXR0cmUgbGUgY2FsY3VsIGRlcyBsb2NhbGlzYXRpb25zXG4iCisiICAtRCwgLS1kZWZpbmU9Tk9NWz1WQUxFVVJdICAgICAgICBzaW1pbGFpcmUgw6AgwqvCoCVkZWZpbmUgTk9NIFwiVkFMRVVSXCLCoMK7XG4iCisiICAtRiwgLS1mb3JjZS1kZWZpbmU9Tk9NWz1WQUxFVVJdICBvdXRyZXBhc3NlIMKrwqAlZGVmaW5lIE5PTSBcIlZBTEVVUlwiwqDCu1xuIgorIiAgLXAsIC0tbmFtZS1wcmVmaXg9UFLDiUZJWEUgICAgICAgIGFjY29sZXIgbGUgUFLDiUZJWEUgYXV4IHN5bWJvbGVzIGV4dGVybmVzXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kdSBvYnNvbMOodGUgcGFyIMKrwqAtRGFwaS4iCisicHJlZml4PVBSw4lGSVhFwqDCu1xuIgorIiAgLWwsIC0tbm8tbGluZXMgICAgICAgICAgICAgICAgICAgbmUgcGFzIGfDqW7DqXJlciBsZXMgZGlyZWN0aXZlcyDCq8KgI2xpbmXCoMK7XG4iCisiICAtaywgLS10b2tlbi10YWJsZSAgICAgICAgICAgICAgICBpbmNsdXJlIGxhIHRhYmxlIGRlcyBub21zIGRlIGpldG9uc1xuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM0NgorbXNnaWQgIiIKKyJPdXRwdXQ6XG4iCisiICAgICAgLS1kZWZpbmVzWz1GSUxFXSAgICAgICBhbHNvIHByb2R1Y2UgYSBoZWFkZXIgZmlsZVxuIgorIiAgLWQgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZXdpc2UgYnV0IGNhbm5vdCBzcGVjaWZ5IEZJTEUgKGZvciBQT1NJWCAiCisiWWFjYylcbiIKKyIgIC1yLCAtLXJlcG9ydD1USElOR1MgICAgICAgIGFsc28gcHJvZHVjZSBkZXRhaWxzIG9uIHRoZSBhdXRvbWF0b25cbiIKKyIgICAgICAtLXJlcG9ydC1maWxlPUZJTEUgICAgIHdyaXRlIHJlcG9ydCB0byBGSUxFXG4iCisiICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgICBzYW1lIGFzIGAtLXJlcG9ydD1zdGF0ZSdcbiIKKyIgIC1iLCAtLWZpbGUtcHJlZml4PVBSRUZJWCAgIHNwZWNpZnkgYSBQUkVGSVggZm9yIG91dHB1dCBmaWxlc1xuIgorIiAgLW8sIC0tb3V0cHV0PUZJTEUgICAgICAgICAgbGVhdmUgb3V0cHV0IHRvIEZJTEVcbiIKKyIgIC1nLCAtLWdyYXBoWz1GSUxFXSAgICAgICAgIGFsc28gb3V0cHV0IGEgZ3JhcGggb2YgdGhlIGF1dG9tYXRvblxuIgorIiAgLXgsIC0teG1sWz1GSUxFXSAgICAgICAgICAgYWxzbyBvdXRwdXQgYW4gWE1MIHJlcG9ydCBvZiB0aGUgYXV0b21hdG9uXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhlIFhNTCBzY2hlbWEgaXMgZXhwZXJpbWVudGFsKVxuIgorbXNnc3RyICIiCisiU29ydGllOlxuIgorIiAgICAgIC0tZGVmaW5lc1s9RklDSElFUl0gICAgcHJvZHVpcmUgdW4gZmljaGllciBkJ2VuLXTDqnRlXG4iCisiICAtZCAgICAgICAgICAgICAgICAgICAgICAgICBpZGVtIG1haXMgc2FucyBzcMOpY2lmaWVyIGxlIEZJQ0hJRVIgKHBvdXIgbGUgIgorIllhY2MgUE9TSVgpXG4iCisiICAtciwgLS1yZXBvcnQ9Q0hPU0VTICAgICAgICBnw6luw6lyZXIgbGVzIGTDqXRhaWxzIGNvbmNlcm5hbnQgbCdhdXRvbWF0ZVxuIgorIiAgICAgIC0tcmVwb3J0LWZpbGU9RklDSElFUiAgw6ljcmlyZSBsZSByYXBwb3J0IGRhbnMgbGUgRklDSElFUlxuIgorIiAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgaWRlbnRpcXVlIMOgIMKrwqAtLXJlcG9ydD1zdGF0ZcKgwrtcbiIKKyIgIC1iLCAtLWZpbGUtcHJlZml4PVBSw4lGSVhFICB1dGlsaXNlciBsZSBQUsOJRklYRSBwb3VyIGxlIGZpY2hpZXIgZGUgc29ydGllXG4iCisiICAtbywgLS1vdXRwdXQ9RklDSElFUiAgICAgICBwcm9kdWlyZSBsYSBzb3J0aWUgZGFucyBsZSBGSUNISUVSXG4iCisiICAtZywgLS1ncmFwaFs9RklDSElFUl0gICAgICBwcm9kdWlyZSBhdXNzaSB1biBncmFwaGUgZGUgbCdhdXRvbWF0ZVxuIgorIiAgLXgsIC0teG1sWz1GSUNISUVSXSAgICAgICAgcHJvZHVpcmUgdW4gcmFwcG9ydCBYTUwgZGUgbCdhdXRvbWF0ZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxlIHNjaMOpbWEgWE1MIGVzdCBleHDDqXJpbWVudGFsKVxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM2MQorbXNnaWQgIiIKKyJXYXJuaW5nIGNhdGVnb3JpZXMgaW5jbHVkZTpcbiIKKyIgIGBtaWRydWxlLXZhbHVlcycgIHVuc2V0IG9yIHVudXNlZCBtaWRydWxlIHZhbHVlc1xuIgorIiAgYHlhY2MnICAgICAgICAgICAgaW5jb21wYXRpYmlsaXRpZXMgd2l0aCBQT1NJWCBZYWNjXG4iCisiICBgY29uZmxpY3RzLXNyJyAgICBTL1IgY29uZmxpY3RzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgY29uZmxpY3RzLXJyJyAgICBSL1IgY29uZmxpY3RzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgZGVwcmVjYXRlZCcgICAgICBvYnNvbGV0ZSBjb25zdHJ1Y3RzXG4iCisiICBgb3RoZXInICAgICAgICAgICBhbGwgb3RoZXIgd2FybmluZ3MgKGVuYWJsZWQgYnkgZGVmYXVsdClcbiIKKyIgIGBhbGwnICAgICAgICAgICAgIGFsbCB0aGUgd2FybmluZ3NcbiIKKyIgIGBuby1DQVRFR09SWScgICAgIHR1cm4gb2ZmIHdhcm5pbmdzIGluIENBVEVHT1JZXG4iCisiICBgbm9uZScgICAgICAgICAgICB0dXJuIG9mZiBhbGwgdGhlIHdhcm5pbmdzXG4iCisiICBgZXJyb3InICAgICAgICAgICB0cmVhdCB3YXJuaW5ncyBhcyBlcnJvcnNcbiIKK21zZ3N0ciAiIgorIkxlcyBjYXTDqWdvcmllcyBkJ2F2ZXJ0aXNzZW1lbnRzIGNvbXByZW5uZW50OlxuIgorIiAgwqvCoG1pZHJ1bGUtdmFsdWVzwqDCuyAgdmFsZXVyIGRlIHLDqGdsZSBpbnRlcm3DqWRpYWlyZSBub24gZMOpZmluaWUgb3UgIgorImludXRpbGlzw6llXG4iCisiICDCq8KgeWFjY8KgwrsgICAgICAgICAgICBpbmNvbXBhdGliaWxpdMOpIGF2ZWMgbGUgWUFDQyBQT1NJWFxuIgorIiAgwqvCoGNvbmZsaWN0cy1zcsKgwrsgICAgY29uZmxpdHMgUy9SIChhY3RpdsOpIHBhciBkw6lmYXV0KVxuIgorIiAgwqvCoGNvbmZsaWN0cy1ycsKgwrsgICAgY29uZmxpdHMgUi9SIChhY3RpdsOpIHBhciBkw6lmYXV0KVxuIgorIiAgwqvCoGRlcHJlY2F0ZWTCoMK7ICAgICAgY29uc3RydWN0aW9ucyBvYnNvbMOodGVzXG4iCisiICDCq8Kgb3RoZXLCoMK7ICAgICAgICAgICB0b3VzIGxlcyBhdXRyZXMgYXZlcnRpc3NlbWVudHMgKGFjdGl2w6kgcGFyIGTDqWZhdXQpXG4iCisiICDCq8KgYWxswqDCuyAgICAgICAgICAgICB0b3VzIGxlcyBhdmVydGlzc2VtZW50c1xuIgorIiAgwqvCoG5vLUNBVMOJR09SSUXCoMK7ICAgIHN1cHByaW1lIGxlcyBhdmVydGlzc2VtZW50cyBkZSBsYSBDQVTDiUdPUklFXG4iCisiICDCq8Kgbm9uZcKgwrsgICAgICAgICAgICBzdXBwcmltZSB0b3VzIGxlcyBhdmVydGlzc2VtZW50c1xuIgorIiAgwqvCoGVycm9ywqDCuyAgICAgICAgICAgdHJhaXRlIGxlcyBhdmVydGlzc2VtZW50cyBjb21tZSBkZXMgZXJyZXVyc1xuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM3NgorbXNnaWQgIiIKKyJUSElOR1MgaXMgYSBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCB3b3JkcyB0aGF0IGNhbiBpbmNsdWRlOlxuIgorIiAgYHN0YXRlJyAgICAgICAgZGVzY3JpYmUgdGhlIHN0YXRlc1xuIgorIiAgYGl0ZW1zZXQnICAgICAgY29tcGxldGUgdGhlIGNvcmUgaXRlbSBzZXRzIHdpdGggdGhlaXIgY2xvc3VyZVxuIgorIiAgYGxvb2thaGVhZCcgICAgZXhwbGljaXRseSBhc3NvY2lhdGUgbG9va2FoZWFkIHRva2VucyB0byBpdGVtc1xuIgorIiAgYHNvbHZlZCcgICAgICAgZGVzY3JpYmUgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cyBzb2x2aW5nXG4iCisiICBgYWxsJyAgICAgICAgICBpbmNsdWRlIGFsbCB0aGUgYWJvdmUgaW5mb3JtYXRpb25cbiIKKyIgIGBub25lJyAgICAgICAgIGRpc2FibGUgdGhlIHJlcG9ydFxuIgorbXNnc3RyICIiCisiQ0hPU0VTIGVzdCB1bmUgbGlzdGUgZGUgbW90cyBzw6lwYXLDqXMgcGFyIGRlcyB2aXJndWxlcyBxdWkgcGV1dmVudCBpbmNsdXJlOlxuIgorIiAgYHN0YXRlJyAgICAgICAgZMOpY3JpcmUgZGVzIMOpdGF0c1xuIgorIiAgYGl0ZW1zZXQnICAgICAgY29tcGzDqXRlciBsZSBjb3JwcyBkdSBqZXUgZCdpdGVtcyBhdmVjIGxldXIgZmVybWV0dXJlXG4iCisiICBgbG9va2FoZWFkJyAgICBhc3NvY2llciBleHBsaWNpdGVtZW50IGxlcyBqZXRvbnMgbG9va2FoZWFkIGF1eCBpdGVtc1xuIgorIiAgYHNvbHZlZCcgICAgICAgZMOpY3JpcmUgbGEgcsOpc29sdXRpb24gZGVzIGNvbmZsaXRzIGTDqWNhbGFnZS9yw6lkdWN0aW9uXG4iCisiICBgYWxsJyAgICAgICAgICBpbmNsdXJlIHRvdXRlcyBsZXMgaW5mb3JtYXRpb25zIGNpLWhhdXRcbiIKKyIgIGBub25lJyAgICAgICAgIGTDqXNhY3RpdmVyIGxhIGfDqW7DqXJhdGlvbiBkZSByYXBwb3J0XG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzg3Cittc2dpZCAiIgorIkZFQVRVUkUgaXMgYSBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCB3b3JkcyB0aGF0IGNhbiBpbmNsdWRlOlxuIgorIiAgYGNhcmV0JyAgICAgICAgc2hvdyBlcnJvcnMgd2l0aCBjYXJldHNcbiIKKyIgIGBhbGwnICAgICAgICAgIGFsbCBvZiB0aGUgYWJvdmVcbiIKKyIgIGBub25lJyAgICAgICAgIGRpc2FibGUgYWxsIG9mIHRoZSBhYm92ZVxuIgorIiAgIgorbXNnc3RyICIiCisiRk9OQ1RJT04gZXN0IHVuZSBsaXN0ZSBkZSBtb3RzIHPDqXBhcsOpcyBwYXIgZGVzIHZpcmd1bGVzIGluY2x1YW50OlxuIgorIiAgwqvCoGNhcmV0wqDCuyAgICAgICBtb250cmVyIGxlcyBlcnJldXJzIGF2ZWMgZGVzIGNhcmV0c1xuIgorIiAgwqvCoGFsbMKgwrsgICAgICAgICB0b3V0ZXMgY2VsbGVzIGNpLWRlc3N1c1xuIgorIiAgwqvCoG5vbmXCoMK7ICAgICAgICBhdWN1bmUgZGUgY2VsbGVzIGNpLWRlc3N1c1xuIgorIiAgIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorbXNnc3RyICJSYXBwb3J0ZXogdG91dGVzIGFub21hbGllcyDDoCA8JXM+LlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBob21lIHBhZ2U6IDwlcz4uXG4iCittc2dzdHIgInBhZ2UgZCdhY2N1ZWlsIGRlICVzOiA8JXM+LlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NworbXNnaWQgIkdlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LlxuIgorbXNnc3RyICIiCisiQWlkZSBnw6luw6lyaXF1ZSBzdXIgbCd1dGlsaXNhdGlvbiBkZXMgbG9naWNpZWxzIEdOVTogPGh0dHA6Ly93d3cuZ251Lm9yZy9oZWxwLyIKKyJnZXRoZWxwLmZyLmh0bWw+LlxuIgorCisjLiBUUkFOU0xBVE9SUzogUmVwbGFjZSBMQU5HX0NPREUgaW4gdGhpcyBVUkwgd2l0aCB5b3VyIGxhbmd1YWdlCisjLiBjb2RlIDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtL0xBTkdfQ09ERS5odG1sPiB0bworIy4gZm9ybSBvbmUgb2YgdGhlIFVSTHMgYXQgaHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS8uCisjLiBPdGhlcndpc2UsIHJlcGxhY2UgdGhlIGVudGlyZSBVUkwgd2l0aCB5b3VyIHRyYW5zbGF0aW9uIHRlYW0ncworIy4gZW1haWwgYWRkcmVzcy4KKyM6IHNyYy9nZXRhcmdzLmM6NDEwCittc2dpZCAiUmVwb3J0IHRyYW5zbGF0aW9uIGJ1Z3MgdG8gPGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vPi5cbiIKK21zZ3N0ciAiIgorIlNpZ25hbGV6IGxlcyBlcnJldXJzIGRlIHRyYWR1Y3Rpb25zIMOgIDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtL2ZyLiIKKyJodG1sPi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MTIKK21zZ2lkICJGb3IgY29tcGxldGUgZG9jdW1lbnRhdGlvbiwgcnVuOiBpbmZvIGJpc29uLlxuIgorbXNnc3RyICJQb3VyIGxhIGRvY3VtZW50YXRpb24gY29tcGzDqHRlLCBleMOpY3V0ZXo6IGluZm8gYmlzb24uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImJpc29uIChHTlUgQmlzb24pICVzIgorbXNnc3RyICJiaXNvbiAoR05VIEJpc29uKSAlcyIKKworIzogc3JjL2dldGFyZ3MuYzo0MzAKK21zZ2lkICJXcml0dGVuIGJ5IFJvYmVydCBDb3JiZXR0IGFuZCBSaWNoYXJkIFN0YWxsbWFuLlxuIgorbXNnc3RyICLDiWNyaXQgcGFyIFJvYmVydCBDb3JiZXR0IGV0IFJpY2hhcmQgU3RhbGxtYW4uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcHlyaWdodCAoQykgJWQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCittc2dzdHIgIkNvcHlyaWdodCDCqSAlZCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MzcKK21zZ2lkICIiCisiVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk9cbiIKKyJ3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cbiIKK21zZ3N0ciAiIgorIkNlIGxvZ2ljaWVsIGVzdCBsaWJyZTsgdm9pciBsZXMgc291cmNlcyBwb3VyIGxlcyBjb25kaXRpb25zIGRlXG4iCisicmVwcm9kdWN0aW9uLiBBVUNVTkUgZ2FyYW50aWUgbidlc3QgZG9ubsOpZTsgdGFudCBwb3VyIGRlcyByYWlzb25zXG4iCisiQ09NTUVSQ0lBTEVTIHF1ZSBwb3VyIFLDiVBPTkRSRSDDgCBVTiBCRVNPSU4gUEFSVElDVUxJRVIuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHNrZWxldG9uIGRlY2xhcmF0aW9ucyBhcmUgaW52YWxpZCIKK21zZ3N0ciAiZMOpY2xhcmF0aW9ucyBtdWx0aXBsZXMgZGUgc3F1ZWxldHRlcyBzb250IGluYWNjZXB0YWJsZXMiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIGxhbmd1YWdlIgorbXNnc3RyICIlczogbGFuZ2FnZSBpbmFjY2VwdGFibGUiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDc5Cittc2dpZCAibXVsdGlwbGUgbGFuZ3VhZ2UgZGVjbGFyYXRpb25zIGFyZSBpbnZhbGlkIgorbXNnc3RyICJsZXMgZMOpY2xhcmF0aW9ucyBtdWx0aXBsZXMgZHUgbGFuZ2FnZSBzb250IGludGVyZGl0cyIKKworIzogc3JjL2dldGFyZ3MuYzo3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG1pc3Npbmcgb3BlcmFuZCIKK21zZ3N0ciAiJXM6IG9ww6lyYW5kZSBtYW5xdWFudGUiCisKKyM6IHNyYy9nZXRhcmdzLmM6NzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dHJhIG9wZXJhbmQgJXMiCittc2dzdHIgIm9ww6lyYW5kZSBzdXBlcmZsdSAlcyIKKworIzogc3JjL2dyYW0uYzoxMTIKK21zZ2lkICJlbXB0eSIKK21zZ3N0ciAidmlkZSIKKworIzogc3JjL2dyYW0uYzoyMDEKK21zZ2lkICJHcmFtbWFyIgorbXNnc3RyICJHcmFtbWFpcmUiCisKKyM6IHNyYy9ncmFwaHZpei5jOjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIvLyBHZW5lcmF0ZWQgYnkgJXMuXG4iCisiLy8gUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKKyIvLyBIb21lIHBhZ2U6IDwlcz4uXG4iCisiXG4iCittc2dzdHIgIiIKKyIvLyBQcm9kdWl0IHBhciAlcy5cbiIKKyIvLyBSYXBwb3J0ZXIgbGVzIGJ1Z3Mgw6AgPCVzPi5cbiIKKyIvLyBQYWdlIGQnYWNjdWVpbDogPCVzPi5cbiIKKyJcbiIKKworIzogc3JjL2xvY2F0aW9uLmM6OTMgc3JjL3NjYW4tZ3JhbS5sOjg1OQorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lIG51bWJlciBvdmVyZmxvdyIKK21zZ3N0ciAiZMOpYm9yZGVtZW50IGR1IG5vbWJyZSBkZSBsaWduZXMiCisKKyM6IHNyYy9sb2NhdGlvbi5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbHVtbiBudW1iZXIgb3ZlcmZsb3ciCittc2dzdHIgImTDqWJvcmRlbWVudCBkdSBub21icmUgZGUgY29sb25uZXMiCisKKyM6IHNyYy9tYWluLmM6MTQ2Cittc2dpZCAicnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzIgorbXNnc3RyICJsYSByw6hnbGUgZXN0IGludXRpbGUgZGFucyBsJ2FuYWx5c2V1ciDDoCBjYXVzZSBkZSBjb25mbGl0cyIKKworIzogc3JjL211c2NsZS10YWIuYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSVkZWZpbmUgdmFyaWFibGUgJXMgcmVkZWZpbmVkIgorbXNnc3RyICJ2YXJpYWJsZSAlJWRlZmluZSAlcyByZWTDqWZpbmllIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ1MworbXNnaWQgInByZXZpb3VzIGRlZmluaXRpb24iCittc2dzdHIgImTDqWZpbml0aW9uIHByw6ljw6lkZW50ZSIKKworIzogc3JjL211c2NsZS10YWIuYzo0OTAgc3JjL211c2NsZS10YWIuYzo1MDQgc3JjL211c2NsZS10YWIuYzo1NTYKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgJXMiCittc2dzdHIgIiVzOiB2YXJpYWJsZSAlJWRlZmluZSAlcyBub24gZMOpZmluaWUiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICUlZGVmaW5lIEJvb2xlYW4gdmFyaWFibGUgJXMiCittc2dzdHIgInZhbGV1ciBpbmFjY2VwdGFibGUgcG91ciAlJWRlZmluZSBkZSBsYSB2YXJpYWJsZSBCb29sw6llbm5lICVzIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjYwOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlJWRlZmluZSB2YXJpYWJsZSAlczogJXMiCittc2dzdHIgInZhbGV1ciBpbmFjY2VwdGFibGUgcG91ciAlJWRlZmluZSBkZSBsYSB2YXJpYWJsZSAlc8KgOiAlcyIKKworIzogc3JjL211c2NsZS10YWIuYzo2MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWNjZXB0ZWQgdmFsdWU6ICVzIgorbXNnc3RyICJ2YWxldXIgYWNjZXB0w6llwqA6ICVzIgorCisjOiBzcmMvcGFyc2UtZ3JhbS55Ojc0NworIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGlkZW50aWZpZXIgaW4gcGFyYW1ldGVyIGRlY2xhcmF0aW9uIgorbXNnc3RyICJpZGVudGlmaWNhdGV1ciBtYW5xdWFudCBkYW5zIGxhIGTDqWNsYXJhdGlvbiBkZSBwYXJhbcOodHJlcyIKKworIzogc3JjL3ByaW50LmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIHR5cGUgJWQgaXMgJXNcbiIKK21zZ3N0ciAiIGxlIHR5cGUgJWQgZXN0ICVzXG4iCisKKyM6IHNyYy9wcmludC5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICJzaGlmdCwgYW5kIGdvIHRvIHN0YXRlICVkXG4iCittc2dzdHIgImTDqWNhbGFnZSBldCBhbGxlciDDoCBsJ8OpdGF0ICVkXG4iCisKKyM6IHNyYy9wcmludC5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJnbyB0byBzdGF0ZSAlZFxuIgorbXNnc3RyICJhbGxlciDDoCBsJ8OpdGF0ICVkXG4iCisKKyM6IHNyYy9wcmludC5jOjIwMworbXNnaWQgImVycm9yIChub25hc3NvY2lhdGl2ZSlcbiIKK21zZ3N0ciAiZXJyZXVyIChub24tYXNzb2NpYXRpdmUpXG4iCisKKyM6IHNyYy9wcmludC5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWR1Y2UgdXNpbmcgcnVsZSAlZCAoJXMpIgorbXNnc3RyICJyw6lkdWN0aW9uIHBhciB1dGlsaXNhdGlvbiBkZSBsYSByw6hnbGUgJWQgKCVzKSIKKworIzogc3JjL3ByaW50LmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgImFjY2VwdCIKK21zZ3N0ciAiYWNjZXB0ZXIiCisKKyM6IHNyYy9wcmludC5jOjI2NCBzcmMvcHJpbnQuYzozMzgKK21zZ2lkICIkZGVmYXVsdCIKK21zZ3N0ciAiJGTDqWZhdXQiCisKKyM6IHNyYy9wcmludC5jOjM3MyBzcmMvcHJpbnRfZ3JhcGguYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJTdGF0ZSAlZCIKK21zZ3N0ciAiw4l0YXQgJWQiCisKKyM6IHNyYy9wcmludC5jOjQwOQorbXNnaWQgIlRlcm1pbmFscywgd2l0aCBydWxlcyB3aGVyZSB0aGV5IGFwcGVhciIKK21zZ3N0ciAiVGVybWluYXV4LCBzdWl2aXMgZGVzIHLDqGdsZXMgb8O5IGlscyBhcHBhcmFpc3NlbnQiCisKKyM6IHNyYy9wcmludC5jOjQzNgorbXNnaWQgIk5vbnRlcm1pbmFscywgd2l0aCBydWxlcyB3aGVyZSB0aGV5IGFwcGVhciIKK21zZ3N0ciAiTm9uLXRlcm1pbmF1eCwgc3VpdmlzIGRlcyByw6hnbGVzIG/DuSBpbHMgYXBwYXJhaXNzZW50IgorCisjOiBzcmMvcHJpbnQuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uIGxlZnQ6IgorbXNnc3RyICIgw6AgZ2F1Y2hlOiIKKworIzogc3JjL3ByaW50LmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiByaWdodDoiCittc2dzdHIgIiDDoCBkcm9pdGU6IgorCisjOiBzcmMvcHJpbnQuYzo1MTAKK21zZ2lkICJSdWxlcyB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzIgorbXNnc3RyICJMYSByw6hnbGUgZXN0IGludXRpbGUgZGFucyBsJ2FuYWx5c2V1ciDDoCBjYXVzZSBkZSBjb25mbGl0cyIKKworIzogc3JjL3JlYWRlci5jOjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlICVzIGRlY2xhcmF0aW9ucyIKK21zZ3N0ciAiZMOpY2xhcmF0aW9ucyBtdWx0aXBsZXMgZGUgJXMiCisKKyM6IHNyYy9yZWFkZXIuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVzdWx0IHR5cGUgY2xhc2ggb24gbWVyZ2UgZnVuY3Rpb24gJXM6IDwlcz4gIT0gPCVzPiIKK21zZ3N0ciAiIgorImNvbmZsaXQgZGFucyBsZSB0eXBlIGR1IHLDqXN1bHRhdCBkZSBsYSBmb25jdGlvbiBkZSBmdXNpb24gJXPCoDogPCVzPiAhPSA8JXM+IgorCisjOiBzcmMvcmVhZGVyLmM6MTM5IHNyYy9zeW10YWIuYzoxNTYgc3JjL3N5bXRhYi5jOjE2NiBzcmMvc3ltdGFiLmM6OTM4CisjOiBzcmMvc3ltdGFiLmM6OTUzIHNyYy9zeW10YWIuYzo5Njggc3JjL3N5bXRhYi5jOjk4MworbXNnaWQgInByZXZpb3VzIGRlY2xhcmF0aW9uIgorbXNnc3RyICJkw6ljbGFyYXRpb24gcHLDqWPDqWRlbnRlIgorCisjOiBzcmMvcmVhZGVyLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZWQgc3ltYm9sIG5hbWUgZm9yICVzIGlnbm9yZWQiCittc2dzdHIgImRvdWJsb24gZGFucyBsZSBub20gZGUgc3ltYm9sZSAlcyBlc3QgaWdub3LDqSIKKworIzogc3JjL3JlYWRlci5jOjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICJydWxlIGdpdmVuIGZvciAlcywgd2hpY2ggaXMgYSB0b2tlbiIKK21zZ3N0ciAibGEgcsOoZ2xlIHBvdXIgJXMsIHF1aSBlc3QgdW4gdGVybWluYWwiCisKKyM6IHNyYy9yZWFkZXIuYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidHlwZSBjbGFzaCBvbiBkZWZhdWx0IGFjdGlvbjogPCVzPiAhPSA8JXM+IgorbXNnc3RyICJjb25mbGl0IGRlIHR5cGUgcG91ciBsJ2FjdGlvbiBwYXIgZMOpZmF1dDogPCVzPiAhPSA8JXM+IgorCisjOiBzcmMvcmVhZGVyLmM6MzEwCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IHJ1bGUgZm9yIHR5cGVkIG5vbnRlcm1pbmFsLCBhbmQgbm8gYWN0aW9uIgorbXNnc3RyICJyw6hnbGUgdmlkZSBwb3VyIHVuZSBjYXTDqWdvcmllIHR5cMOpZSBldCBhdWN1bmUgYWN0aW9uIgorCisjOiBzcmMvcmVhZGVyLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNlZCB2YWx1ZTogJCVkIgorbXNnc3RyICJ2YWxldXIgaW51dGlsaXPDqWU6ICQlZCIKKworIzogc3JjL3JlYWRlci5jOjMzMAorbXNnaWQgInVuc2V0IHZhbHVlOiAkJCIKK21zZ3N0ciAidmFsZXVyIG5vbiBpbml0aWFsaXPDqWU6ICQkIgorCisjOiBzcmMvcmVhZGVyLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgInRva2VuIGZvciAlJXByZWMgaXMgbm90IGRlZmluZWQ6ICVzIgorbXNnc3RyICJsZSBqZXRvbiBwb3VyICUlcHJlYyBuJ2VzdCBwYXMgZMOpZmluaSA6ICVzIgorCisjOiBzcmMvcmVhZGVyLmM6NDMxIHNyYy9yZWFkZXIuYzo0NDUgc3JjL3JlYWRlci5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5IG9uZSAlcyBhbGxvd2VkIHBlciBydWxlIgorbXNnc3RyICJzZXVsIHVuICVzIGVzdCBwZXJtaXMgcGFyIHLDqGdsZSIKKworIzogc3JjL3JlYWRlci5jOjQ0MSBzcmMvcmVhZGVyLmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFmZmVjdHMgb25seSBHTFIgcGFyc2VycyIKK21zZ3N0ciAiJXMgYWZmZWN0ZSBzZXVsZW1lbnQgbGVzIGFuYWx5c2V1cnMgR0xSIgorCisjOiBzcmMvcmVhZGVyLmM6NDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIG11c3QgYmUgZm9sbG93ZWQgYnkgcG9zaXRpdmUgbnVtYmVyIgorbXNnc3RyICIlcyBkb2l0IMOqdHJlIHN1aXZpIGQndW4gbm9tYnJlIHBvc2l0aWYiCisKKyM6IHNyYy9yZWFkZXIuYzo1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVsZSBpcyB0b28gbG9uZyIKK21zZ3N0ciAicsOoZ2xlIHRyb3AgbG9uZ3VlIgorCisjOiBzcmMvcmVhZGVyLmM6NjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJ1bGVzIGluIHRoZSBpbnB1dCBncmFtbWFyIgorbXNnc3RyICJsYSBncmFtbWFpcmUgbidhIHBhcyBkZSByw6hnbGVzIgorCisjOiBzcmMvcmVkdWNlLmM6MjQxCittc2dpZCAicnVsZSB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgInLDqGdsZSBpbnV0aWxlIGRhbnMgbGEgZ3JhbW1haXJlIgorCisjOiBzcmMvcmVkdWNlLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogJXMiCittc2dzdHIgInVuaXTDqSBub24gdGVybWluYWxlIGludXRpbGUgZGFucyBsYSBncmFtbWFpcmUgOiAlcyIKKworIzogc3JjL3JlZHVjZS5jOjM1MAorbXNnaWQgIk5vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgIk5vbi10ZXJtaW5hdXggaW51dGlsZXMgZGFucyBsYSBncmFtbWFpcmUiCisKKyM6IHNyYy9yZWR1Y2UuYzozNjMKK21zZ2lkICJUZXJtaW5hbHMgdW51c2VkIGluIGdyYW1tYXIiCittc2dzdHIgIlRlcm1pbmF1eCBpbnV0aWxpc8OpcyBkYW5zIGxhIGdyYW1tYWlyZSIKKworIzogc3JjL3JlZHVjZS5jOjM3MgorbXNnaWQgIlJ1bGVzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAiUsOoZ2xlcyBpbnV0aWxlcyBkYW5zIGxhIGdyYW1tYWlyZSIKKworIzogc3JjL3JlZHVjZS5jOjM4NQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dpZF9wbHVyYWwgIiVkIG5vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHJbMF0gIiVkIG5vbiB0ZXJtaW5hbCBpbnV0aWxlIGRhbnMgbGEgZ3JhbW1haXJlIgorbXNnc3RyWzFdICIlZCBub24gdGVybWluYXV4IGludXRpbGVzIGRhbnMgbGEgZ3JhbW1haXJlIgorCisjOiBzcmMvcmVkdWNlLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnaWRfcGx1cmFsICIlZCBydWxlcyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHJbMF0gIiVkIHLDqGdsZSBpbnV0aWxlIGRhbnMgbGEgZ3JhbW1haXJlIgorbXNnc3RyWzFdICIlZCByw6hnbGVzIGludXRpbGVzIGRhbnMgbGEgZ3JhbW1haXJlIgorCisjOiBzcmMvcmVkdWNlLmM6NDE5CisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0IHN5bWJvbCAlcyBkb2VzIG5vdCBkZXJpdmUgYW55IHNlbnRlbmNlIgorbXNnc3RyICJzeW1ib2xlIGRlIGTDqXBhcnQgJXMgbmUgcHJvZHVpdCBhdWN1bmUgcGhyYXNlIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmF5ICclcyciCittc2dzdHIgIsKrwqAlc8Kgwrsgc3VwZXJmbHUiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyMjkKK21zZ2lkICJhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZSIKK21zZ3N0ciAidW4gwqvCoDvCoMK7IGVzdCBwZXV0LcOqdHJlIG7DqWNlc3NhaXJlIMOgIGxhIGZpbiBkdSBjb2RlIGQnYWN0aW9uIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjMyCittc2dpZCAiZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnIgorbXNnc3RyICJsZXMgdmVyc2lvbnMgc3VpdmFudGVzIGRlIEJpc29uIG4nYWpvdXRlcm9udCBwYXMgbGUgwqvCoDvCoMK7IgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVzZSBvZiBZWUZBSUwsIHdoaWNoIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCIKK21zZ3N0ciAibCd1dGlsaXNhdGlvbiBkZSBZWUZBSUwgZXN0IG9ic29sw6h0ZSBldCBzZXJhIHN1cHByaW3DqWUiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0MzEgc3JjL3NjYW4tY29kZS5sOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcnMgdG86ICVjJXMgYXQgJXMiCittc2dzdHIgInZvaXIgJWMlcyDDoCAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NzaWJseSBtZWFudDogJWMiCittc2dzdHIgInNpZ25pZmlhaXQgcHJvYmFibGVtZW50OiAlYyIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICIsIGhpZGluZyAlYyIKK21zZ3N0ciAiLCBjYWNoZSAlYyIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICIgYXQgJXMiCittc2dzdHIgIiDDoCAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ3MgorIywgYy1mb3JtYXQKK21zZ2lkICIsIGNhbm5vdCBiZSBhY2Nlc3NlZCBmcm9tIG1pZC1ydWxlIGFjdGlvbiBhdCAkJWQiCittc2dzdHIgIiwgbidlc3QgcGFzIGFjY2Vzc2libGUgZGVwdWlzIHVuZSBhY3Rpb24gZGUgbWlsaWV1IGRlIHLDqGdsZSDDoCAlZCIKKworIzogc3JjL3NjYW4tY29kZS5sOjUyMSBzcmMvc2Nhbi1ncmFtLmw6NzgzCisjLCBjLWZvcm1hdAorbXNnaWQgImludGVnZXIgb3V0IG9mIHJhbmdlOiAlcyIKK21zZ3N0ciAiZW50aWVyIGhvcnMgbGltaXRlOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYxMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZmVyZW5jZTogJXMiCittc2dzdHIgInLDqWbDqXJlbmNlIGludmFsaWRlOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IgYWZ0ZXIgJyVjJywgZXhwZWN0aW5nIGludGVnZXIsIGxldHRlciwgJ18nLCAnWycsIG9yICckJyIKK21zZ3N0ciAiIgorImVycmV1ciBkZSBzeW50YXhlIGFwcsOocyDCq8KgJWPCoMK7LCBhdHRlbmR1wqA6IGVudGllciwgbGV0dHJlLCDCq8KgX8KgwrssIMKrwqBbwqDCuyBvdSAiCisiwqvCoCTCoMK7IgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbiBiZWZvcmUgJCVkOiAlLipzIgorbXNnc3RyICJzeW1ib2xlIHBhcyB0cm91dsOpIGVuIHByb2R1Y3Rpb24gYXZhbnQgJCVkOiAlLipzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjMzCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogJS4qcyIKK21zZ3N0ciAic3ltYm9sZSBwYXMgdHJvdXbDqSBlbiBwcm9kdWN0aW9uOiAlLipzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc2xlYWRpbmcgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAicsOpZsOpcmVuY2UgdHJvbXBldXNlOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAicsOpZsOpcmVuY2UgYW1iaWd1w6s6ICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGxpY2l0IHR5cGUgZ2l2ZW4gaW4gdW50eXBlZCBncmFtbWFyIgorbXNnc3RyICJ0eXBlIGV4cGxpY2l0ZW1lbnQgYXR0cmlidcOpIMOgIHVuZSBncmFtbWFpcmUgc2FucyB0eXBlIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NzU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiQkIGZvciB0aGUgbWlkcnVsZSBhdCAkJWQgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiIKKyJsZSAkJCBkZSBsYSByw6hnbGUgaW50ZXJtw6lkaWFpcmUgw6AgJCVkIGRlIMKrwqAlc8KgwrsgbidhIHBhcyBkZSB0eXBlIGTDqWNsYXLDqSIKKworIzogc3JjL3NjYW4tY29kZS5sOjc2NAorIywgYy1mb3JtYXQKK21zZ2lkICIkJCBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiJCQgZGUgJXMgbidhIHBhcyBkZSB0eXBlIGTDqWNsYXLDqSIKKworIzogc3JjL3NjYW4tY29kZS5sOjc4NgorIywgYy1mb3JtYXQKK21zZ2lkICIkJXMgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiQlcyBkZSAlcyBuJ2EgcGFzIGRlIHR5cGUgZMOpY2xhcsOpIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmF5ICcsJyB0cmVhdGVkIGFzIHdoaXRlIHNwYWNlIgorbXNnc3RyICLCq8KgLMKgwrsgc3VwZXJmbHVlIHRyYWl0w6llIGNvbW1lIHVuIGJsYW5jIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZGlyZWN0aXZlOiAlcyIKK21zZ3N0ciAiZGlyZWN0aXZlIGludmFsaWRlOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50aWZpZXI6ICVzIgorbXNnc3RyICJpZGVudGlmaWNhdGV1ciBpbnZhbGlkZTogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyOTUKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciIKK21zZ2lkX3BsdXJhbCAiaW52YWxpZCBjaGFyYWN0ZXJzIgorbXNnc3RyWzBdICJjYXJhY3TDqHJlIGludmFsaWRlIgorbXNnc3RyWzFdICJjYXJhY3TDqHJlcyBpbnZhbGlkZXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBpZGVudGlmaWVyIGluIGJyYWNrZXRlZCBuYW1lOiAlcyIKK21zZ3N0ciAiaWRlbnRpZmljYXRldXIgaW5hdHRlbmR1IGRhbnMgdW4gbm9tIGVudHJlIGFjY29sYWRlczogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW4gaWRlbnRpZmllciBleHBlY3RlZCIKK21zZ3N0ciAidW4gaWRlbnRpZmljYXRldXIgZXN0IGF0dGVuZHUiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozODEKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciBpbiBicmFja2V0ZWQgbmFtZSIKK21zZ2lkX3BsdXJhbCAiaW52YWxpZCBjaGFyYWN0ZXJzIGluIGJyYWNrZXRlZCBuYW1lIgorbXNnc3RyWzBdICJjYXJhY3TDqHJlIGludmFsaWRlIGRhbnMgdW4gbm9tIGVudHJlIGFjY29sYWRlcyIKK21zZ3N0clsxXSAiY2FyYWN0w6hyZXMgaW52YWxpZGVzIGRhbnMgdW4gbm9tIGVudHJlIGFjY29sYWRlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjQ4MSBzcmMvc2Nhbi1ncmFtLmw6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGNoYXJhY3RlciBsaXRlcmFsIgorbXNnc3RyICJjYXJhY3TDqHJlIGxpdHTDqXJhbCB2aWRlIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NDg2IHNyYy9zY2FuLWdyYW0ubDo1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0cmEgY2hhcmFjdGVycyBpbiBjaGFyYWN0ZXIgbGl0ZXJhbCIKK21zZ3N0ciAiY2FyYWN0w6hyZXMgZW4gdHJvcCBkYW5zIGxlIGNhcmFjdMOocmUgbGl0dMOpcmFsIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVsbCBjaGFyYWN0ZXIiCittc2dzdHIgImNhcmFjdMOocmUgbnVsIGludmFsaWRlIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NTMxIHNyYy9zY2FuLWdyYW0ubDo1NDEgc3JjL3NjYW4tZ3JhbS5sOjU2MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBhZnRlciBcXC1lc2NhcGU6ICVzIgorbXNnc3RyICJub21icmUgaW5jb3JyZWN0IGFwcsOocyBsYSBzw6lxdWVuY2UgZCfDqWNoYXBwZW1lbnQgXFwgOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjU3MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciBhZnRlciBcXC1lc2NhcGU6ICVzIgorbXNnc3RyICJjYXJhY3TDqHJlIGludmFsaWRlIGFwcsOocyBsYSBzw6lxdWVuY2UgZCfDqWNoYXBwZW1lbnQgXFwgOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjkwMQorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzIGF0IGVuZCBvZiBmaWxlIgorbXNnc3RyICJjaGHDrm5lIGRlIGNhcmFjdMOocmVzICVzIG1hbnF1YW50ZSBlbiBmaW4gZGUgZmljaGllciIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjkxMgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzIGF0IGVuZCBvZiBsaW5lIgorbXNnc3RyICIlcyBtYW5xdWFudCDDoCBsYSBmaW4gZGUgZmljaGllciIKKworIzogc3JjL3NjYW4tc2tlbC5sOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmNsb3NlZCAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iCittc2dzdHIgImRpcmVjdGl2ZSAlcyBwYXMgZmVybcOpZSBkYW5zIGxlIHNxdWVsZXR0ZSIKKworIzogc3JjL3NjYW4tc2tlbC5sOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gZmV3IGFyZ3VtZW50cyBmb3IgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICJ0cm9wIHBldSBkZSBwYXJhbcOodHJlcyBwb3VyIGxhIGRpcmVjdGl2ZSAlcyBkdSBzcXVlbGV0dGUiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGZvciAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iCittc2dzdHIgInRyb3AgZGUgcGFyYW3DqHRyZXMgcG91ciBsYSBkaXJlY3RpdmUgJXMgZHUgc3F1ZWxldHRlIgorCisjOiBzcmMvc3ltbGlzdC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICQgdmFsdWU6ICQlZCIKK21zZ3N0ciAidmFsZXVyICQgaW52YWxpZGU6ICQlZCIKKworIzogc3JjL3N5bXRhYi5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlBPU0lYIFlhY2MgZm9yYmlkcyBkYXNoZXMgaW4gc3ltYm9sIG5hbWVzOiAlcyIKK21zZ3N0ciAiTGUgWWFjYyBQT1NJWCBpbnRlcmRpdCBsZXMgdGlyZXRzIGRhbnMgbGVzIG5vbXMgZGUgc3ltYm9sZXM6ICVzIgorCisjOiBzcmMvc3ltdGFiLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgc3ltYm9scyBpbiBpbnB1dCBncmFtbWFyIChsaW1pdCBpcyAlZCkiCittc2dzdHIgInRyb3AgZGUgc3ltYm9sZXMgZGFucyBsYSBncmFtbWFpcmUgZCdlbnRyw6llIChsaW1pdGUgZXN0ICVkKSIKKworIzogc3JjL3N5bXRhYi5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAicmVkw6ljbGFyYXRpb24gZGUgJXMgcG91ciAlcyIKKworIzogc3JjL3N5bXRhYi5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciA8JXM+IgorbXNnc3RyICJyZWTDqWNsYXJhdGlvbiBkZSAlcyBwb3VyIDwlcz4iCisKKyM6IHNyYy9zeW10YWIuYzozMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHJlZGVmaW5lZCIKK21zZ3N0ciAic3ltYm9sZSAlcyBlc3QgcmVkw6lmaW5pIgorCisjOiBzcmMvc3ltdGFiLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyByZWRlY2xhcmVkIgorbXNnc3RyICJzeW1ib2xlICVzIGVzdCByZWTDqWNsYXLDqSIKKworIzogc3JjL3N5bXRhYi5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlZmluaW5nIHVzZXIgdG9rZW4gbnVtYmVyIG9mICVzIgorbXNnc3RyICJyZWTDqWZpbml0aW9uIGR1IGpldG9uIHVzYWdlciBudW3DqXJvIGRlICVzIgorCisjOiBzcmMvc3ltdGFiLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyBpcyB1c2VkLCBidXQgaXMgbm90IGRlZmluZWQgYXMgYSB0b2tlbiBhbmQgaGFzIG5vIHJ1bGVzIgorbXNnc3RyICIiCisibGUgc3ltYm9sZSAlcyBlc3QgdXRpbGlzw6kgbWFpcyBjZSBuJ2VzdCBwYXMgdW4gdGVybWluYWwgZXQgaWwgbmUgcG9zc8OoZGUgcGFzICIKKyJkZSByw6hnbGUiCisKKyM6IHNyYy9zeW10YWIuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHVzZWQgbW9yZSB0aGFuIG9uY2UgYXMgYSBsaXRlcmFsIHN0cmluZyIKK21zZ3N0ciAic3ltYm9sZSAlcyB1dGlsaXPDqSBwbHVzIGQndW5lIGZvaXMgZGFucyB1bmUgY2hhw65uZSBsaXR0w6lyYWxlIgorCisjOiBzcmMvc3ltdGFiLmM6NDE4CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyBnaXZlbiBtb3JlIHRoYW4gb25lIGxpdGVyYWwgc3RyaW5nIgorbXNnc3RyICJzeW1ib2xlICVzIHByw6lzZW50IGRhbnMgcGx1cyBkJ3VuZSBjaGHDrm5lIGxpdHTDqXJhbGUiCisKKyM6IHNyYy9zeW10YWIuYzo1MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNlciB0b2tlbiBudW1iZXIgJWQgcmVkZWNsYXJhdGlvbiBmb3IgJXMiCittc2dzdHIgInJlZMOpY2xhcmF0aW9uIGR1IG51bcOpcm8gZGUgamV0b24gdXRpbGlzYXRldXIgJWQgcG91ciAlcyIKKworIzogc3JjL3N5bXRhYi5jOjUzOQorIywgYy1mb3JtYXQKK21zZ2lkICJwcmV2aW91cyBkZWNsYXJhdGlvbiBmb3IgJXMiCittc2dzdHIgImTDqWNsYXJhdGlvbiBwcsOpY8OpZGVudGUgZGUgJXMiCisKKyM6IHNyYy9zeW10YWIuYzo5MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHN0YXJ0IHN5bWJvbCAlcyBpcyB1bmRlZmluZWQiCittc2dzdHIgImxlIHN5bWJvbGUgZGUgZMOpcGFydCAlcyBuJ2VzdCBwYXMgZMOpZmluaSIKKworIzogc3JjL3N5bXRhYi5jOjkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgc3RhcnQgc3ltYm9sICVzIGlzIGEgdG9rZW4iCittc2dzdHIgImxlIHN5bWJvbGUgZGUgZMOpcGFydCAlcyBlc3QgdW4gdGVybWluYWwiCisKKyM6IHNyYy9zeW10YWIuYzo5MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdnZWQgJSVkZXN0cnVjdG9yIgorbXNnc3RyICJyZWTDqWNsYXJhdGlvbiBkdSAlJWRlc3RydWN0ZXVyIHBhciBkw6lmYXV0IGF2ZWMgw6l0aXF1ZXR0ZSIKKworIzogc3JjL3N5bXRhYi5jOjk1MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJSVkZXN0cnVjdG9yIgorbXNnc3RyICJyZWTDqWNsYXJhdGlvbiBwb3VyIGxlICUlZGVzdHJ1Y3RldXIgcGFyIGTDqWZhdXQgc2FucyDDqXRpcXVldHRlIgorCisjOiBzcmMvc3ltdGFiLmM6OTY1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICUlcHJpbnRlciIKK21zZ3N0ciAicmVkw6ljbGFyYXRpb24gZGUgbCclJWltcHJpbWFudGUgcGFyIGTDqWZhdXQgYXZlYyDDqXRpcXVldHRlIgorCisjOiBzcmMvc3ltdGFiLmM6OTgwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnbGVzcyAlJXByaW50ZXIiCittc2dzdHIgInJlZMOpY2xhcmF0aW9uIGRlIGwnJSVpbXByaW1hbnRlIHBhciBkw6lmYXV0IHNhbnMgw6l0aXF1ZXR0ZSIKKworIzogZGpncHAvc3VicGlwZS5jOjYzIGRqZ3BwL3N1YnBpcGUuYzoyODYgZGpncHAvc3VicGlwZS5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdmluZyBvZiAnJXMnIGZhaWxlZCIKK21zZ3N0ciAibGUgc3VwcHJlc3Npb24gZGUgwqvCoCVzwqDCuyBhIMOpY2hvdcOpIgorCisjOiBkamdwcC9zdWJwaXBlLmM6ODUgZGpncHAvc3VicGlwZS5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNyZWF0aW9uIG9mIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICJsYSBjcsOpYXRpb24gZCd1biBmaWNoaWVyIHRlbXBvcmFpcmUgYSDDqWNob3XDqSIKKworIzogZGpncHAvc3VicGlwZS5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJzYXZpbmcgc3RkaW4gZmFpbGVkIgorbXNnc3RyICJsYSBzYXV2ZWdhcmRlIGRlIHN0ZGluIGEgw6ljaG91w6kiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAic2F2aW5nIHN0ZG91dCBmYWlsZWQiCittc2dzdHIgImxhIHNhdXZlZ2FyZGUgZGUgc3Rkb3V0IGEgw6ljaG91w6kiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxNTMgZGpncHAvc3VicGlwZS5jOjE5NyBkamdwcC9zdWJwaXBlLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZW5pbmcgb2YgdG1wZmlsZSBmYWlsZWQiCittc2dzdHIgImwnb3V2ZXJ0dXJlIGRlIHRtcGZpbGUgYSDDqWNob3XDqSIKKworIzogZGpncHAvc3VicGlwZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBiaXNvbidzIHN0ZG91dCB0byB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICJsYSByZWRpcmVjdGlvbiBkdSBzdGRvdXQgZGUgYmlzb24gdmVycyB1biBmaWNoaWVyIHRlbXBvcmFpcmUgYSDDqWNob3XDqSIKKworIzogZGpncHAvc3VicGlwZS5jOjIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBtNCdzIHN0ZGluIGZyb20gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAibGEgcmVkaXJlY3Rpb24gZHUgc3RkaW4gZGUgbTQgZGVwdWlzIHVuIGZpY2hpZXIgdGVtcG9yYWlyZSBhIMOpY2hvdcOpIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZW5pbmcgb2YgYSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgImwnb3V2ZXJ0dXJlIGQndW4gZmljaGllciB0ZW1wb3JhaXJlIGEgw6ljaG91w6kiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgbTQncyBzdGRvdXQgdG8gYSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgImxhIHJlZGlyZWN0aW9uIGR1IHN0ZG91dCBkZSBtNCB2ZXJzIHVuIGZpY2hpZXIgdGVtcG9yYWlyZSBhIMOpY2hvdcOpIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSAnJXMnIGludGVycnVwdGVkIgorbXNnc3RyICJwcm9ncmFtbWUgc3Vic2lkaWFpcmUgwqvCoCVzwqDCuyBpbnRlcnJvbXB1IgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAicHJvZ3JhbW1lIHN1YnNpZGlhaXJlIMKrwqAlc8KgwrsgcGFzIHRyb3V2w6kiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgYmlzb24ncyBzdGRpbiBmcm9tIHRoZSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgImxhIHJlZGlyZWN0aW9uIGR1IHN0ZGluIGRlIGJpc29uIGRlcHVpcyB1biBmaWNoaWVyIHRlbXBvcmFpcmUgYSDDqWNob3XDqSIKKworIzogbGliL2FyZ21hdGNoLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgJXMgZm9yICVzIgorbXNnc3RyICJwYXJhbcOodHJlICVzIHBhcyB2YWxhYmxlIHBvdXIgJXMiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgYXJndW1lbnQgJXMgZm9yICVzIgorbXNnc3RyICJwYXJhbcOodHJlICVzIGFtYmlndSBwb3VyICVzIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxNTMKK21zZ2lkICJWYWxpZCBhcmd1bWVudHMgYXJlOiIKK21zZ3N0ciAiTGVzIHBhcmFtw6h0cmVzIHZhbGlkZXMgc29udDoiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X2FsbG9jcywgJXUgZnJlZWQgKCUuMmYlJSkuXG4iCittc2dzdHIgIiV1IGJpdHNldF9hbGxvY3MsICV1IGxpYsOpcsOpcyAoJS4yZiUlKS5cbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfc2V0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF9zZXRzLCAldSBkYW5zIGxlIGNhY2hlICglLjJmJSUpXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3Jlc2V0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF9yZXNldHMsICV1IGRhbnMgbGUgY2FjaGUgKCUuMmYlJSlcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfdGVzdHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorbXNnc3RyICIldSBiaXRzZXRfdGVzdHMsICV1IGRhbnMgbGUgY2FjaGUgKCUuMmYlJSlcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfbGlzdHNcbiIKK21zZ3N0ciAiJXUgYml0c2V0X2xpc3RzXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTIKK21zZ2lkICJjb3VudCBsb2cgaGlzdG9ncmFtXG4iCittc2dzdHIgImhpc3RvZ3JhbW1lIGRlcyBjb21wdGV1cnNcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5NQorbXNnaWQgInNpemUgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICJ0YWlsbGUgZGUgbCdoaXN0b2dyYW1tZSBkZXMgY29tcHRldXJzXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTgKK21zZ2lkICJkZW5zaXR5IGhpc3RvZ3JhbVxuIgorbXNnc3RyICJkZW5zaXTDqSBkZSBsJ2hpc3RvZ3JhbW1lXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJpdHNldCBzdGF0aXN0aWNzOlxuIgorIlxuIgorbXNnc3RyICIiCisiU3RhdGlzdGlxdWVzIGRlcyBiaXRzZXQ6XG4iCisiXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWNjdW11bGF0ZWQgcnVucyA9ICV1XG4iCittc2dzdHIgIkV4w6ljdXRpb25zIGFjY3VtdWzDqWVzID0gJXVcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI1OSBsaWIvYml0c2V0X3N0YXRzLmM6MjY0Cittc2dpZCAiY2Fubm90IHJlYWQgc3RhdHMgZmlsZSIKK21zZ3N0ciAibmUgcGV1dCBsaXJlIGxlIGZpY2hpZXIgZGUgc3RhdHMiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHN0YXRzIGZpbGUgc2l6ZVxuIgorbXNnc3RyICJ0YWlsbGUgZXJyb27DqWUgZHUgZmljaGllciBkZSBzdGF0c1xuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6Mjg3IGxpYi9iaXRzZXRfc3RhdHMuYzoyODkKK21zZ2lkICJjYW5ub3Qgd3JpdGUgc3RhdHMgZmlsZSIKK21zZ3N0ciAibmUgcGV1dCDDqWNyaXJlIGxlIGZpY2hpZXIgZGUgc3RhdHMiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyOTIKK21zZ2lkICJjYW5ub3Qgb3BlbiBzdGF0cyBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnb3V2cmlyIGxlIGZpY2hpZXIgZGUgc3RhdHMgZW4gw6ljcml0dXJlIgorCisjOiBsaWIvY2xvc2VvdXQuYzoxMTIKK21zZ2lkICJ3cml0ZSBlcnJvciIKK21zZ3N0ciAiZXJyZXVyIGQnw6ljcml0dXJlIgorCisjOiBsaWIvZXJyb3IuYzoxODgKK21zZ2lkICJVbmtub3duIHN5c3RlbSBlcnJvciIKK21zZ3N0ciAiRXJyZXVyIHN5c3TDqG1lIGluY29ubnVlIgorCisjOiBsaWIvZ2V0b3B0LmM6NTQ3IGxpYi9nZXRvcHQuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnJXMnIGlzIGFtYmlndW91czsgcG9zc2liaWxpdGllczoiCittc2dzdHIgIiVzOiBsJ29wdGlvbiDCq8KgJXPCoMK7IGVzdCBhbWJpZ3XDqzsgbGVzIHBvc3NpYmlsaXTDqXMgc29udDoiCisKKyM6IGxpYi9nZXRvcHQuYzo2MjQgbGliL2dldG9wdC5jOjYyOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBsJ29wdGlvbiDCqy0tJXPCuyBuJ2FkbWV0IHBhcyBkZSBwYXJhbcOodHJlXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo2MzcgbGliL2dldG9wdC5jOjY0MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICclYyVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBsJ29wdGlvbiDCqyVjJXPCuyBuJ2FkbWV0IHBhcyBkZSBwYXJhbcOodHJlXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo2ODUgbGliL2dldG9wdC5jOjcwNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctLSVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogbCdvcHRpb24gwqstLSVzwrsgcmVxdWllcnQgdW4gcGFyYW3DqHRyZVxuIgorCisjOiBsaWIvZ2V0b3B0LmM6NzQyIGxpYi9nZXRvcHQuYzo3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gJy0tJXMnXG4iCittc2dzdHIgIiVzOiBsJ29wdGlvbiDCqy0tJXPCuyBlc3QgaW5jb25udWVcbiIKKworIzogbGliL2dldG9wdC5jOjc1MyBsaWIvZ2V0b3B0LmM6NzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uICclYyVzJ1xuIgorbXNnc3RyICIlczogbCdvcHRpb24gwqslYyVzwrsgZXN0IGluY29ubnVlXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo4MDUgbGliL2dldG9wdC5jOjgwOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBvcHRpb24gLS0gJyVjJ1xuIgorbXNnc3RyICIlczogb3B0aW9uIG5vbiB2YWxpZGUgLS0gwqslY8K7XG4iCisKKyM6IGxpYi9nZXRvcHQuYzo4NjEgbGliL2dldG9wdC5jOjg3OCBsaWIvZ2V0b3B0LmM6MTA4OCBsaWIvZ2V0b3B0LmM6MTEwNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICclYydcbiIKK21zZ3N0ciAiJXM6IGwnb3B0aW9uIHJlcXVpZXJ0IHVuIHBhcmFtw6h0cmUgLS0gwqslY8K7XG4iCisKKyM6IGxpYi9nZXRvcHQuYzo5MzQgbGliL2dldG9wdC5jOjk1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiVzOiBsJ29wdGlvbiDCqy1XICVzwrsgZXN0IGFtYmlndcOrXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo5NzQgbGliL2dldG9wdC5jOjk5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogbCdvcHRpb24gwqstVyAlc8K7IG4nYWRtZXQgcGFzIGRlIHBhcmFtw6h0cmVcbiIKKworIzogbGliL2dldG9wdC5jOjEwMTMgbGliL2dldG9wdC5jOjEwMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLVcgJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBsJ29wdGlvbiDCqy1XICVzwrsgcmVxdWllcnQgdW4gcGFyYW3DqHRyZVxuIgorCisjOiBsaWIvb2JzdGFjay5jOjQxMyBsaWIvb2JzdGFjay5jOjQxNSBsaWIveGFsbG9jLWRpZS5jOjM0Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAibcOpbW9pcmUgw6lwdWlzw6llIgorCisjOiBsaWIvc3Bhd24tcGlwZS5jOjE0MCBsaWIvc3Bhd24tcGlwZS5jOjE0MyBsaWIvc3Bhd24tcGlwZS5jOjI2NAorIzogbGliL3NwYXduLXBpcGUuYzoyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBwaXBlIgorbXNnc3RyICJuZSBwZXV0IGNyw6llciBsZSB0dWJlIgorCisjOiBsaWIvc3Bhd24tcGlwZS5jOjIzNCBsaWIvc3Bhd24tcGlwZS5jOjM0OCBsaWIvd2FpdC1wcm9jZXNzLmM6MjgyCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MgZmFpbGVkIgorbXNnc3RyICJsZSBzb3VzLXByb2Nlc3N1cyAlcyBhIMOpY2hvdcOpIgorCisjLiBUUkFOU0xBVE9SUzoKKyMuIEdldCB0cmFuc2xhdGlvbnMgZm9yIG9wZW4gYW5kIGNsb3NpbmcgcXVvdGF0aW9uIG1hcmtzLgorIy4gVGhlIG1lc3NhZ2UgY2F0YWxvZyBzaG91bGQgdHJhbnNsYXRlICJgIiB0byBhIGxlZnQKKyMuIHF1b3RhdGlvbiBtYXJrIHN1aXRhYmxlIGZvciB0aGUgbG9jYWxlLCBhbmQgc2ltaWxhcmx5IGZvcgorIy4gIiciLiAgRm9yIGV4YW1wbGUsIGEgRnJlbmNoIFVuaWNvZGUgbG9jYWwgc2hvdWxkIHRyYW5zbGF0ZQorIy4gdGhlc2UgdG8gVSswMEFCIChMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRQorIy4gUVVPVEFUSU9OIE1BUkspLCBhbmQgVSswMEJCIChSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUKKyMuIFFVT1RBVElPTiBNQVJLKSwgcmVzcGVjdGl2ZWx5LgorIy4KKyMuIElmIHRoZSBjYXRhbG9nIGhhcyBubyB0cmFuc2xhdGlvbiwgd2Ugd2lsbCB0cnkgdG8KKyMuIHVzZSBVbmljb2RlIFUrMjAxOCAoTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspIGFuZAorIy4gVW5pY29kZSBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykuICBJZiB0aGUKKyMuIGN1cnJlbnQgbG9jYWxlIGlzIG5vdCBVbmljb2RlLCBsb2NhbGVfcXVvdGluZ19zdHlsZQorIy4gd2lsbCBxdW90ZSAnbGlrZSB0aGlzJywgYW5kIGNsb2NhbGVfcXVvdGluZ19zdHlsZSB3aWxsCisjLiBxdW90ZSAibGlrZSB0aGlzIi4gIFlvdSBzaG91bGQgYWx3YXlzIGluY2x1ZGUgdHJhbnNsYXRpb25zCisjLiBmb3IgImAiIGFuZCAiJyIgZXZlbiBpZiBVKzIwMTggYW5kIFUrMjAxOSBhcmUgYXBwcm9wcmlhdGUKKyMuIGZvciB5b3VyIGxvY2FsZS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFya3NfaW5fb3RoZXJfbGFuZ3VhZ2VzPgorIy4gYW5kIHVzZSBnbHlwaHMgc3VpdGFibGUgZm9yIHlvdXIgbGFuZ3VhZ2UuCisjOiBsaWIvcXVvdGVhcmcuYzozMTIKK21zZ2lkICJgIgorbXNnc3RyICLCqyIKKworIzogbGliL3F1b3RlYXJnLmM6MzEzCittc2dpZCAiJyIKK21zZ3N0ciAiwrsiCisKKyM6IGxpYi90aW1ldmFyLmM6NDc1Cittc2dpZCAiIgorIlxuIgorIkV4ZWN1dGlvbiB0aW1lcyAoc2Vjb25kcylcbiIKK21zZ3N0ciAiIgorIlxuIgorIlRlbXBzIGQnZXjDqWN1dGlvbiAoc2Vjb25kZXMpXG4iCisKKyM6IGxpYi90aW1ldmFyLmM6NTI1Cittc2dpZCAiIFRPVEFMICAgICAgICAgICAgICAgICA6IgorbXNnc3RyICIgVE9UQUwgICAgICAgICAgICAgICAgIDoiCisKKyM6IGxpYi90aW1ldmFyLmM6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWUgaW4gJXM6ICVsZC4lMDZsZCAoJWxkJSUpXG4iCittc2dzdHIgInRlbXBzIGRhbnMgJXM6ICVsZC4lMDZsZCAoJWxkJSUpXG4iCisKKyM6IGxpYi93MzJzcGF3bi5oOjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIl9vcGVuX29zZmhhbmRsZSBmYWlsZWQiCittc2dzdHIgIl9vcGVuX29zZmhhbmRsZSBhIMOpY2hvdcOpIgorCisjOiBsaWIvdzMyc3Bhd24uaDo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdG9yZSBmZCAlZDogZHVwMiBmYWlsZWQiCittc2dzdHIgImltcG9zc2libGUgZGUgcsOpdGFibGlyIGxlIGZkICVkOiBkdXAyIGEgw6ljaG91w6kiCisKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzoyMjMgbGliL3dhaXQtcHJvY2Vzcy5jOjI1NSBsaWIvd2FpdC1wcm9jZXNzLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MiCittc2dzdHIgInNvdXMtcHJvY2Vzc3VzICVzIgorCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6Mjc0IGxpYi93YWl0LXByb2Nlc3MuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyBnb3QgZmF0YWwgc2lnbmFsICVkIgorbXNnc3RyICJsZSBzb3VzLXByb2Nlc3N1cyAlcyBhIHJlw6d1IGxlIHNpZ25hbCBmYXRhbCAlZCIKKworI34gbXNnaWQgInN0YXRlICVkIgorI34gbXNnc3RyICLDqXRhdCAlZCIKKworI34gbXNnaWQgInN0cmF5ICdAJyIKKyN+IG1zZ3N0ciAiwqvCoEDCoMK7IHN1cGVyZmx1IgorCisjfiBtc2dpZCAiIgorI34gInVuZGVmaW5lZCAlJWRlZmluZSB2YXJpYWJsZSBgJXMnIHBhc3NlZCB0byBtdXNjbGVfcGVyY2VudF9kZWZpbmVfZ2V0X2xvYyIKKyN+IG1zZ3N0ciAiIgorI34gInZhcmlhYmxlICUlZGVmaW5lIMKrwqAlc8Kgwrsgbm9uIGTDqWZpbmllIHBhc3PDqWUgw6AgIgorI34gIm11c2NsZV9wZXJjZW50X2RlZmluZV9nZXRfbG9jIgorCisjfiBtc2dpZCAiIgorI34gInVuZGVmaW5lZCAlJWRlZmluZSB2YXJpYWJsZSBgJXMnIHBhc3NlZCB0byAiCisjfiAibXVzY2xlX3BlcmNlbnRfZGVmaW5lX2dldF9zeW5jbGluZSIKKyN+IG1zZ3N0ciAiIgorI34gInZhcmlhYmxlICUlZGVmaW5lIMKrwqAlc8Kgwrsgbm9uIGTDqWZpbmllIHBhc3PDqWUgw6AgIgorI34gIm11c2NsZV9wZXJjZW50X2RlZmluZV9nZXRfc3luY2xpbmUiCisKKyN+IG1zZ2lkICIiCisjfiAidW5kZWZpbmVkICUlZGVmaW5lIHZhcmlhYmxlIGAlcycgcGFzc2VkIHRvIG11c2NsZV9wZXJjZW50X2RlZmluZV9mbGFnX2lmIgorI34gbXNnc3RyICIiCisjfiAidmFyaWFibGUgJSVkZWZpbmUgwqvCoCVzwqDCuyBub24gZMOpZmluaWUgcGFzc8OpZSDDoCAiCisjfiAibXVzY2xlX3BlcmNlbnRfZGVmaW5lX2ZsYWdfaWYiCisKKyN+IG1zZ2lkICIiCisjfiAidW5kZWZpbmVkICUlZGVmaW5lIHZhcmlhYmxlIGAlcycgcGFzc2VkIHRvICIKKyN+ICJtdXNjbGVfcGVyY2VudF9kZWZpbmVfY2hlY2tfdmFsdWVzIgorI34gbXNnc3RyICIiCisjfiAidmFyaWFibGUgJSVkZWZpbmUgwqvCoCVzwqDCuyBub24gZMOpZmluaWUgcGFzc8OpZSDDoCAiCisjfiAibXVzY2xlX3BlcmNlbnRfZGVmaW5lX2NoZWNrX3ZhbHVlcyIKZGlmZiAtLWdpdCBhL3BvL2dhLmdtbyBiL3BvL2dhLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTFlNjEzCi0tLSAvZGV2L251bGwKKysrIGIvcG8vZ2EuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2dhLnBvIGIvcG8vZ2EucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE5MWY0NQotLS0gL2Rldi9udWxsCisrKyBiL3BvL2dhLnBvCkBAIC0wLDAgKzEsMTM4NSBAQAorIyBJcmlzaCB0cmFuc2xhdGlvbnMgZm9yIGJpc29uLgorIyBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBiaXNvbiBwYWNrYWdlLgorIyBLZXZpbiBQYXRyaWNrIFNjYW5uZWxsIDxzY2FubmVsbEBTTFUuRURVPiwgMjAwNCwgMjAwNiwgMjAwOCwgMjAxMCwgMjAxMgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYmlzb24gMi41XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTItMDUtMjIgMTg6NTItMDUwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogS2V2aW4gU2Nhbm5lbGwgPGtzY2FubmVAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IElyaXNoIDxnYWVpbGdlLWdudWxpbnV4QGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZTogZ2FcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTU7IHBsdXJhbD1uPT0xID8gMCA6IG49PTIgPyAxIDogKG4+MiAmJiBuPDcpID8gMiA6IgorIihuPjYgJiYgbjwxMSkgPyAzIDogNDtcbiIKKworIzogc3JjL2NvbXBsYWluLmM6MTIwIHNyYy9jb21wbGFpbi5jOjEzMSBzcmMvY29tcGxhaW4uYzoxNDAgc3JjL2NvbXBsYWluLmM6MTg4CisjOiBzcmMvY29tcGxhaW4uYzoxOTgKK21zZ2lkICJ3YXJuaW5nIgorbXNnc3RyICJyYWJoYWRoIgorCisjOiBzcmMvY29tcGxhaW4uYzoxNTEgc3JjL2NvbXBsYWluLmM6MTYwIHNyYy9jb21wbGFpbi5jOjE2NworIywgZnV6enkKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiRWFycsOhaWQgSS9BIgorCisjOiBzcmMvY29tcGxhaW4uYzoyMDggc3JjL2NvbXBsYWluLmM6MjE1Cittc2dpZCAiZmF0YWwgZXJyb3IiCittc2dzdHIgImVhcnLDoWlkIG1oYXJmYWNoIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgc2hpZnQiCittc2dzdHIgIiIKKyIgICAgQ29pbmJobGVhY2h0IGlkaXIgcmlhaWwgJWQgYWd1cyB0ZWFnaHLDoW4gY29taGFydGhhY2ggJXM6IHLDqWl0w61vZGggbWFyICIKKyJpb21sYW9pZCIKKworIzogc3JjL2NvbmZsaWN0cy5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIHJlZHVjZSIKK21zZ3N0ciAiIgorIiAgICBDb2luYmhsZWFjaHQgaWRpciByaWFpbCAlZCBhZ3VzIHRlYWdocsOhbiBjb21oYXJ0aGFjaCAlczogcsOpaXTDrW9kaCBtYXIgIgorImxhZ2hkw7oiCisKKyM6IHNyYy9jb25mbGljdHMuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyBhbiBlcnJvciIKK21zZ3N0ciAiIgorIiAgICBDb2luYmhsZWFjaHQgaWRpciByaWFpbCAlZCBhZ3VzIHRlYWdocsOhbiBjb21oYXJ0aGFjaCAlczogcsOpaXTDrW9kaCBtYXIgIgorImVhcnLDoWlkIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgc2hpZnQvcmVkdWNlLCAlZCByZWR1Y2UvcmVkdWNlXG4iCittc2dzdHIgImNvaW5iaGxlYWNodGHDrTogJWQgaW9tbGFvaWQvbGFnaGTDuiwgJWQgbGFnaGTDui9sYWdoZMO6XG4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCBzaGlmdC9yZWR1Y2VcbiIKK21zZ3N0ciAiY29pbmJobGVhY2h0YcOtOiAlZCBpb21sYW9pZC9sYWdoZMO6XG4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCByZWR1Y2UvcmVkdWNlXG4iCittc2dzdHIgImNvaW5iaGxlYWNodGHDrTogJWQgbGFnaGTDui9sYWdoZMO6XG4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhdGUgJWQgIgorbXNnc3RyICJTdGFpZCAlZCAiCisKKyM6IHNyYy9jb25mbGljdHMuYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSVleHBlY3QtcnIgYXBwbGllcyBvbmx5IHRvIEdMUiBwYXJzZXJzIgorbXNnc3RyICJOw61sICUlZXhwZWN0LXJyIGluIMO6c8OhaWQgYWNoIGxlIHBhcnPDoWxhaXRoZSBHTFIiCisKKyM6IHNyYy9jb25mbGljdHMuYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJleHBlY3RlZCAlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIgorbXNnc3RyWzBdICJiaMOtb3RoYXMgYWcgc8O6aWwgbGUgJWQgY29pbmJobGVhY2h0IGlvbWxhb2lkL2xhZ2hkw7oiCittc2dzdHJbMV0gImJow61vdGhhcyBhZyBzw7ppbCBsZSAlZCBjaG9pbmJobGVhY2h0IGlvbWxhb2lkL2xhZ2hkw7oiCittc2dzdHJbMl0gImJow61vdGhhcyBhZyBzw7ppbCBsZSAlZCBjaG9pbmJobGVhY2h0IGlvbWxhb2lkL2xhZ2hkw7oiCittc2dzdHJbM10gImJow61vdGhhcyBhZyBzw7ppbCBsZSAlZCBnY29pbmJobGVhY2h0IGlvbWxhb2lkL2xhZ2hkw7oiCittc2dzdHJbNF0gImJow61vdGhhcyBhZyBzw7ppbCBsZSAlZCBjb2luYmhsZWFjaHQgaW9tbGFvaWQvbGFnaGTDuiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjYyMQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCAlZCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJleHBlY3RlZCAlZCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAiYmjDrW90aGFzIGFnIHPDumlsIGxlICVkIGNvaW5iaGxlYWNodCBsYWdoZMO6L2xhZ2hkw7oiCittc2dzdHJbMV0gImJow61vdGhhcyBhZyBzw7ppbCBsZSAlZCBjaG9pbmJobGVhY2h0IGxhZ2hkw7ovbGFnaGTDuiIKK21zZ3N0clsyXSAiYmjDrW90aGFzIGFnIHPDumlsIGxlICVkIGNob2luYmhsZWFjaHQgbGFnaGTDui9sYWdoZMO6IgorbXNnc3RyWzNdICJiaMOtb3RoYXMgYWcgc8O6aWwgbGUgJWQgZ2NvaW5iaGxlYWNodCBsYWdoZMO6L2xhZ2hkw7oiCittc2dzdHJbNF0gImJow61vdGhhcyBhZyBzw7ppbCBsZSAlZCBjb2luYmhsZWFjaHQgbGFnaGTDui9sYWdoZMO6IgorCisjOiBzcmMvZmlsZXMuYzoxMTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3Qgb3BlbiIKK21zZ3N0ciAibsOtIGbDqWlkaXIgY29taGFkIGAlcycgYSBvc2NhaWx0IgorCisjOiBzcmMvZmlsZXMuYzoxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5wdXQvb3V0cHV0IGVycm9yIgorbXNnc3RyICIiCisKKyM6IHNyYy9maWxlcy5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2UgZmlsZSIKK21zZ3N0ciAibsOtIGbDqWlkaXIgY29taGFkIGEgZGjDum5hZGgiCisKKyM6IHNyYy9maWxlcy5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBvdmVyd3JpdGUgdGhlIGlucHV0IGZpbGUgJXMiCittc2dzdHIgImRpw7psdGHDrXRlYXIgaW5jaG9taGFkICVzIGEgZmhvcnNjcsOtb2JoIgorCisjOiBzcmMvZmlsZXMuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3Rpbmcgb3V0cHV0cyB0byBmaWxlICVzIgorbXNnc3RyICJhc2NodWlyIGNob250csOhcnRoYSBzY3LDrW9mYSBpIGdjb21oYWQgJXMiCisKKyM6IHNyYy9nZXRhcmdzLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeSBgJXMgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKK21zZ3N0ciAiQmFpbiB0cmlhaWwgYXMgYCVzIC0taGVscCcgY2h1biB0dWlsbGVhZGggZW9sYWlzIGEgZmjDoWlsLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgW09QVElPTl0uLi4gRklMRVxuIgorbXNnc3RyICLDmnPDoWlkOiAlcyBbUk9HSEFdLi4uIENPTUhBRFxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwMgorbXNnaWQgIiIKKyJHZW5lcmF0ZSBhIGRldGVybWluaXN0aWMgTFIgb3IgZ2VuZXJhbGl6ZWQgTFIgKEdMUikgcGFyc2VyIGVtcGxveWluZ1xuIgorIkxBTFIoMSksIElFTFIoMSksIG9yIGNhbm9uaWNhbCBMUigxKSBwYXJzZXIgdGFibGVzLiAgSUVMUigxKSBhbmRcbiIKKyJjYW5vbmljYWwgTFIoMSkgc3VwcG9ydCBpcyBleHBlcmltZW50YWwuXG4iCisiXG4iCittc2dzdHIgIiIKKyJDcnV0aGFpZ2ggcGFyc8OhbGHDrSBjaW5udGl0aGVhY2ggTFIgbsOzIHBhcnPDoWxhw60gZ2luZWFyw6FsYWl0aGUgTFIgKEdMUilcbiIKKyJhIMO6c8OhaWRlYW5uIHTDoWJsYcOtIHBhcnPDoWxhaXRoZSBMQUxSKDEpLCBJRUxSKDEpLCBuw7MgTFIoMSkgY2Fuw7NudGEuXG4iCisiVGFjYcOtb2NodCB0aHVyZ25hbWhhY2ggYW1ow6FpbiBhciBJRUxSKDEpIGFndXMgTFIoMSkgY2Fuw7NudGEuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzA5Cittc2dpZCAiIgorIk1hbmRhdG9yeSBhcmd1bWVudHMgdG8gbG9uZyBvcHRpb25zIGFyZSBtYW5kYXRvcnkgZm9yIHNob3J0IG9wdGlvbnMgdG9vLlxuIgorbXNnc3RyICIiCisiSXMgcmlhY2h0YW5hY2ggbGUgcm9naGEgZ2hlYXJyIGFvbiBhcmfDs2ludCBhdMOhIHJpYWNodGFuYWNoIGxlaXMgYW4gcm9naGEgIgorImZoYWRhLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMxMgorbXNnaWQgIlRoZSBzYW1lIGlzIHRydWUgZm9yIG9wdGlvbmFsIGFyZ3VtZW50cy5cbiIKK21zZ3N0ciAiQWd1cyBtYXIgYW4gZ2PDqWFubmEgbGUgaGFnaGFpZGggYXJnw7NpbnTDrSByb2dobmFjaGEgZnJlaXNpbi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozMTYKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIk9wZXJhdGlvbiBtb2RlczpcbiIKKyIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCisiICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorIiAgICAgIC0tcHJpbnQtbG9jYWxlZGlyICAgICAgb3V0cHV0IGRpcmVjdG9yeSBjb250YWluaW5nIGxvY2FsZS1kZXBlbmRlbnQgIgorImRhdGFcbiIKKyIgICAgICAtLXByaW50LWRhdGFkaXIgICAgICAgIG91dHB1dCBkaXJlY3RvcnkgY29udGFpbmluZyBza2VsZXRvbnMgYW5kIFhTTFRcbiIKKyIgIC15LCAtLXlhY2MgICAgICAgICAgICAgICAgIGVtdWxhdGUgUE9TSVggWWFjY1xuIgorIiAgLVcsIC0td2FybmluZ3NbPUNBVEVHT1JZXSAgcmVwb3J0IHRoZSB3YXJuaW5ncyBmYWxsaW5nIGluIENBVEVHT1JZXG4iCisiICAtZiwgLS1mZWF0dXJlWz1GRUFUVVJFXSAgICBhY3RpdmF0ZSBtaXNjZWxsYW5lb3VzIGZlYXR1cmVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJNw7NpZCBvaWJyZTpcbiIKKyIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIHRhaXNwZcOhaW4gYW4gY2hhYmhhaXIgc2VvIGFndXMgc2NvaXJcbiIKKyIgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgIHRhaXNwZcOhaW4gZW9sYXMgZmFvaW4gbGVhZ2FuIGFndXMgc2NvaXJcbiIKKyIgICAgICAtLXByaW50LWxvY2FsZWRpciAgICAgIHRhaXNwZcOhaW4gYW4gY2hvbWhhZGxhbm4gaW5hIGJoZnVpbCBzb25yYcOtICIKKyJsb2djaGFpZ2hkZcOhaW5cbiIKKyIgICAgICAtLXByaW50LWRhdGFkaXIgICAgICAgIHRhaXNwZcOhaW4gYW4gY2hvbWhhZGxhbm4gaW5hIGJoZnVpbCBjcmVhdGxhY2hhICIKKyJhZ3VzIFhTTFRcbiIKKyIgIC15LCAtLXlhY2MgICAgICAgICAgICAgICAgIGTDqWFuIGFpdGhyaXMgYXIgWWFjYyBQT1NJWFxuIgorIiAgLVcsIC0td2FybmluZ3M9W0NBVEFHw5NJUl0gIHRhaXNwZcOhaW4gbmEgcmFiaGFpZGggYXTDoSBpIGdDQVRBR8OTSVJcbiIKKyJcbiIKKworIzogc3JjL2dldGFyZ3MuYzozMjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJzZXI6XG4iCisiICAtTCwgLS1sYW5ndWFnZT1MQU5HVUFHRSAgICAgICAgICBzcGVjaWZ5IHRoZSBvdXRwdXQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VcbiIKKyIgIC1TLCAtLXNrZWxldG9uPUZJTEUgICAgICAgICAgICAgIHNwZWNpZnkgdGhlIHNrZWxldG9uIHRvIHVzZVxuIgorIiAgLXQsIC0tZGVidWcgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudCB0aGUgcGFyc2VyIGZvciBkZWJ1Z2dpbmdcbiIKKyIgICAgICAtLWxvY2F0aW9ucyAgICAgICAgICAgICAgICAgIGVuYWJsZSBsb2NhdGlvbiBzdXBwb3J0XG4iCisiICAtRCwgLS1kZWZpbmU9TkFNRVs9VkFMVUVdICAgICAgICBzaW1pbGFyIHRvICclZGVmaW5lIE5BTUUgXCJWQUxVRVwiJ1xuIgorIiAgLUYsIC0tZm9yY2UtZGVmaW5lPU5BTUVbPVZBTFVFXSAgb3ZlcnJpZGUgJyVkZWZpbmUgTkFNRSBcIlZBTFVFXCInXG4iCisiICAtcCwgLS1uYW1lLXByZWZpeD1QUkVGSVggICAgICAgICBwcmVwZW5kIFBSRUZJWCB0byB0aGUgZXh0ZXJuYWwgc3ltYm9sc1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZCBieSAnLURhcGkucHJlZml4PVBSRUZJWCdcbiIKKyIgIC1sLCAtLW5vLWxpbmVzICAgICAgICAgICAgICAgICAgIGRvbid0IGdlbmVyYXRlICcjbGluZScgZGlyZWN0aXZlc1xuIgorIiAgLWssIC0tdG9rZW4tdGFibGUgICAgICAgICAgICAgICAgaW5jbHVkZSBhIHRhYmxlIG9mIHRva2VuIG5hbWVzXG4iCittc2dzdHIgIiIKKyJQYXJzw6FsYcOtOlxuIgorIiAgLUwsIC0tbGFuZ3VhZ2U9VEVBTkdBICAgICAgc29jcmFpZ2ggYW4gcsOtb21odGhlYW5nYSBsZSBoYXNjaHVyXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ27DqSB0aHVyZ25hbWhhY2ggw6kgc2VvKVxuIgorIiAgLVMsIC0tc2tlbGV0b249Q09NSEFEICAgICAgc29jcmFpZ2ggYW4gY2hyZWF0bGFjaCBsZSBow7pzw6FpZFxuIgorIiAgLXQsIC0tZGVidWcgICAgICAgICAgICAgICAgdWxsbWhhaWdoIGFuIHBhcnPDoWxhw60gbGUgaGFnaGFpZGggIgorImTDrWZoYWJodGFpdGhlXG4iCisiICAgICAgLS1sb2NhdGlvbnMgICAgICAgICAgICBjdW1hc2FpZ2ggdGFjYcOtb2NodCBkbyBzaHXDrW1oXG4iCisiICAtRCwgLS1kZWZpbmU9QUlOTVs9TFVBQ0hdICBjb3PDumlsIGxlIGAlZGVmaW5lIEFJTk0gXCJMVUFDSFwiJ1xuIgorIiAgLUYsIC0tZm9yY2UtZGVmaW5lPUFJTk1bPUxVQUNIXSAgc8OhcmFpZ2ggYCVkZWZpbmUgQUlOTSBcIkxVQUNIXCInXG4iCisiICAtcCwgLS1uYW1lLXByZWZpeD1Sw4lJTcONUiAgIGN1aXIgUsOJSU3DjVIgcm9pbWggZ2FjaCBzaW9tYmFpbCBzaGVhY2h0cmFjaFxuIgorIiAgLWwsIC0tbm8tbGluZXMgICAgICAgICAgICAgbsOhIGNydXRoYWlnaCB0cmVvcmFjaGEgYCNsaW5lJ1xuIgorIiAgLWssIC0tdG9rZW4tdGFibGUgICAgICAgICAgY3VpciB0w6FibGEgZCdhaW5tbmVhY2hhIHRlYWdocsOhbiBzYW4gw6FpcmVhbWhcbiIKKyJcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNDYKKyMsIGZ1enp5Cittc2dpZCAiIgorIk91dHB1dDpcbiIKKyIgICAgICAtLWRlZmluZXNbPUZJTEVdICAgICAgIGFsc28gcHJvZHVjZSBhIGhlYWRlciBmaWxlXG4iCisiICAtZCAgICAgICAgICAgICAgICAgICAgICAgICBsaWtld2lzZSBidXQgY2Fubm90IHNwZWNpZnkgRklMRSAoZm9yIFBPU0lYICIKKyJZYWNjKVxuIgorIiAgLXIsIC0tcmVwb3J0PVRISU5HUyAgICAgICAgYWxzbyBwcm9kdWNlIGRldGFpbHMgb24gdGhlIGF1dG9tYXRvblxuIgorIiAgICAgIC0tcmVwb3J0LWZpbGU9RklMRSAgICAgd3JpdGUgcmVwb3J0IHRvIEZJTEVcbiIKKyIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIHNhbWUgYXMgYC0tcmVwb3J0PXN0YXRlJ1xuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg9UFJFRklYICAgc3BlY2lmeSBhIFBSRUZJWCBmb3Igb3V0cHV0IGZpbGVzXG4iCisiICAtbywgLS1vdXRwdXQ9RklMRSAgICAgICAgICBsZWF2ZSBvdXRwdXQgdG8gRklMRVxuIgorIiAgLWcsIC0tZ3JhcGhbPUZJTEVdICAgICAgICAgYWxzbyBvdXRwdXQgYSBncmFwaCBvZiB0aGUgYXV0b21hdG9uXG4iCisiICAteCwgLS14bWxbPUZJTEVdICAgICAgICAgICBhbHNvIG91dHB1dCBhbiBYTUwgcmVwb3J0IG9mIHRoZSBhdXRvbWF0b25cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGUgWE1MIHNjaGVtYSBpcyBleHBlcmltZW50YWwpXG4iCittc2dzdHIgIiIKKyJBc2NodXI6XG4iCisiICAgICAgLS1kZWZpbmVzWz1DT01IQURdICAgICBnaW4gY29taGFkIGNlYW5udMOhc2NhIGZyZWlzaW5cbiIKKyIgIC1kICAgICAgICAgICAgICAgICAgICAgICAgIG1hciBhbiBnY8OpYW5uYSwgYWNoIGdhbiBDT01IQUQgKGxlIGhhZ2hhaWRoICIKKyJZYWNjIFBPU0lYKVxuIgorIiAgLXIsIC0tcmVwb3J0PVJVREHDjSAgICAgICAgIHRhYmhhaXIgc29ucmHDrSBmYW9pbiB1YXRob2licmXDoW5cbiIKKyIgICAgICAtLXJlcG9ydC1maWxlPUNPTUhBRCAgIHNjcsOtb2JoIHR1YWlyaXNjIGkgZ0NPTUhBRFxuIgorIiAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgYXIgY29taGJocsOtIGxlIGAtLXJlcG9ydD1zdGF0ZSdcbiIKKyIgIC1iLCAtLWZpbGUtcHJlZml4PVLDiUlNw41SICAgUsOJSU3DjVIgYXIgYXNjaG9taGFpZFxuIgorIiAgLW8sIC0tb3V0cHV0PUNPTUhBRCAgICAgICAgc2Nyw61vYmggYXNjaHVyIHNhIENIT01IQURcbiIKKyIgIC1nLCAtLWdyYXBoWz1DT01IQURdICAgICAgIHNjcsOtb2JoIGdyYWYgYW4gdWF0aG9pYnJlw6FpblxuIgorIiAgLXgsIC0teG1sWz1DT01IQURdICAgICAgICAgc2Nyw61vYmggdHVhaXJpc2MgYXIgYW4gdWF0aG9pYnJlw6FuIG1hciBYTUxcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpcyB0cmlhbGFjaCDDqSBhbiBzY8OpaW1yZSBYTUwpXG4iCisiXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzYxCisjLCBmdXp6eQorbXNnaWQgIiIKKyJXYXJuaW5nIGNhdGVnb3JpZXMgaW5jbHVkZTpcbiIKKyIgIGBtaWRydWxlLXZhbHVlcycgIHVuc2V0IG9yIHVudXNlZCBtaWRydWxlIHZhbHVlc1xuIgorIiAgYHlhY2MnICAgICAgICAgICAgaW5jb21wYXRpYmlsaXRpZXMgd2l0aCBQT1NJWCBZYWNjXG4iCisiICBgY29uZmxpY3RzLXNyJyAgICBTL1IgY29uZmxpY3RzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgY29uZmxpY3RzLXJyJyAgICBSL1IgY29uZmxpY3RzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgZGVwcmVjYXRlZCcgICAgICBvYnNvbGV0ZSBjb25zdHJ1Y3RzXG4iCisiICBgb3RoZXInICAgICAgICAgICBhbGwgb3RoZXIgd2FybmluZ3MgKGVuYWJsZWQgYnkgZGVmYXVsdClcbiIKKyIgIGBhbGwnICAgICAgICAgICAgIGFsbCB0aGUgd2FybmluZ3NcbiIKKyIgIGBuby1DQVRFR09SWScgICAgIHR1cm4gb2ZmIHdhcm5pbmdzIGluIENBVEVHT1JZXG4iCisiICBgbm9uZScgICAgICAgICAgICB0dXJuIG9mZiBhbGwgdGhlIHdhcm5pbmdzXG4iCisiICBgZXJyb3InICAgICAgICAgICB0cmVhdCB3YXJuaW5ncyBhcyBlcnJvcnNcbiIKK21zZ3N0ciAiIgorIlNlbyBpYWQgY2F0YWfDs2lyw60gcmFiaGFpZGg6XG4iCisiICBgbWlkcnVsZS12YWx1ZXMnICBsdWFjaGFubmEgbWXDoW5yaWFsYWNoIGdhbiBzb2Nyw7ogbsOzIGdhbiDDunPDoWlkXG4iCisiICBgeWFjYycgICAgICAgICAgICBuZWFtaC1jaG9taG9pcmnDumludMOtIGxlIFlhY2MgUE9TSVhcbiIKKyIgIGBjb25mbGljdHMtc3InICAgIGNvaW5iaGxlYWNodGHDrSBTL1IgKHLDqWFtaHNob2Nyw7opXG4iCisiICBgY29uZmxpY3RzLXJyJyAgICBjb2luYmhsZWFjaHRhw60gUi9SIChyw6lhbWhzaG9jcsO6KVxuIgorIiAgYG90aGVyJyAgICAgICAgICAgZ2FjaCByYWJoYWRoIGVpbGUgKHLDqWFtaHNob2Nyw7opXG4iCisiICBgYWxsJyAgICAgICAgICAgICBnYWNoIHJhYmhhZGhcbiIKKyIgIGBuby1DQVRBR8OTSVInICAgICBuw6EgdGFpc3Blw6FpbiByYWJoYWlkaCDDsyBDQVRBR8OTSVJcbiIKKyIgIGBub25lJyAgICAgICAgICAgIG7DoSB0YWlzcGXDoWluIHJhYmhhaWRoIGFyIGJpdGhcbiIKKyIgIGBlcnJvcicgICAgICAgICAgIGNhaXRoIGxlIHJhYmhhaWRoIG1hciBlYXJyw6FpZMOtXG4iCisiXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzc2Cittc2dpZCAiIgorIlRISU5HUyBpcyBhIGxpc3Qgb2YgY29tbWEgc2VwYXJhdGVkIHdvcmRzIHRoYXQgY2FuIGluY2x1ZGU6XG4iCisiICBgc3RhdGUnICAgICAgICBkZXNjcmliZSB0aGUgc3RhdGVzXG4iCisiICBgaXRlbXNldCcgICAgICBjb21wbGV0ZSB0aGUgY29yZSBpdGVtIHNldHMgd2l0aCB0aGVpciBjbG9zdXJlXG4iCisiICBgbG9va2FoZWFkJyAgICBleHBsaWNpdGx5IGFzc29jaWF0ZSBsb29rYWhlYWQgdG9rZW5zIHRvIGl0ZW1zXG4iCisiICBgc29sdmVkJyAgICAgICBkZXNjcmliZSBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIHNvbHZpbmdcbiIKKyIgIGBhbGwnICAgICAgICAgIGluY2x1ZGUgYWxsIHRoZSBhYm92ZSBpbmZvcm1hdGlvblxuIgorIiAgYG5vbmUnICAgICAgICAgZGlzYWJsZSB0aGUgcmVwb3J0XG4iCittc2dzdHIgIiIKKyJJcyDDqWFyZCBhdMOhIGkgUlVEQcONIG7DoSBsaW9zdGEgZm9jYWwsIHNjYXJ0aGEgbGUgY2Ftw7NnYSwgYXMgbmEgcm9naGFubmEgc2VvOlxuIgorIiAgYHN0YXRlJyAgICAgICAgZMOpYW4gY3VyIHPDrW9zIGFyIG5hIHN0YWlkZWFubmFcbiIKKyIgIGBpdGVtc2V0JyAgICAgIGNvbWhsw61vbiBuYSBjcm/DrXRoYWNhaXIgbcOtcmUgbGVuYSBnY2xhYmhzw7pyXG4iCisiICBgbG9vay1haGVhZCcgICBjZWFuZ2FpbCB0ZWFnaHLDoWluIHLDqWFtaGZoZWljZcOhbGEgbGUgbcOtcmVhbm5hIGdvIGZvbGxhc2FjaFxuIgorIiAgYHNvbHZlZCcgICAgICAgcsOpaXRlYWNoIGRlIGNob2luYmhsZWFjaHRhw60gaW9tbGFvaWQvbGFnaGTDulxuIgorIiAgYGFsbCcgICAgICAgICAgY3VpciBnYWNoIHNvbnJhIHRodWFzIHNhbiDDoWlyZWFtaFxuIgorIiAgYG5vbmUnICAgICAgICAgZMOtY2h1bWFzYWlnaCBhbiB0dWFpcmlzY1xuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM4NworbXNnaWQgIiIKKyJGRUFUVVJFIGlzIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMgdGhhdCBjYW4gaW5jbHVkZTpcbiIKKyIgIGBjYXJldCcgICAgICAgIHNob3cgZXJyb3JzIHdpdGggY2FyZXRzXG4iCisiICBgYWxsJyAgICAgICAgICBhbGwgb2YgdGhlIGFib3ZlXG4iCisiICBgbm9uZScgICAgICAgICBkaXNhYmxlIGFsbCBvZiB0aGUgYWJvdmVcbiIKKyIgICIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlNlb2wgdHVhaXJpc2PDrSBhciBmaGFiaHRhbm5hIGNodWlnIDwlcz4uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhvbWUgcGFnZTogPCVzPi5cbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NworbXNnaWQgIkdlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBSZXBsYWNlIExBTkdfQ09ERSBpbiB0aGlzIFVSTCB3aXRoIHlvdXIgbGFuZ3VhZ2UKKyMuIGNvZGUgPGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vTEFOR19DT0RFLmh0bWw+IHRvCisjLiBmb3JtIG9uZSBvZiB0aGUgVVJMcyBhdCBodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtLy4KKyMuIE90aGVyd2lzZSwgcmVwbGFjZSB0aGUgZW50aXJlIFVSTCB3aXRoIHlvdXIgdHJhbnNsYXRpb24gdGVhbSdzCisjLiBlbWFpbCBhZGRyZXNzLgorIzogc3JjL2dldGFyZ3MuYzo0MTAKK21zZ2lkICJSZXBvcnQgdHJhbnNsYXRpb24gYnVncyB0byA8aHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS8+LlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDEyCittc2dpZCAiRm9yIGNvbXBsZXRlIGRvY3VtZW50YXRpb24sIHJ1bjogaW5mbyBiaXNvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJiaXNvbiAoR05VIEJpc29uKSAlcyIKK21zZ3N0ciAiYmlzb24gKEdOVSBCaXNvbikgJXMiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDMwCittc2dpZCAiV3JpdHRlbiBieSBSb2JlcnQgQ29yYmV0dCBhbmQgUmljaGFyZCBTdGFsbG1hbi5cbiIKK21zZ3N0ciAiTGUgUm9iZXJ0IENvcmJldHQgYWd1cyBSaWNoYXJkIFN0YWxsbWFuLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3B5cmlnaHQgKEMpICVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorbXNnc3RyICJDb3B5cmlnaHQgwqkgJWQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDM3Cittc2dpZCAiIgorIlRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PXG4iCisid2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuXG4iCittc2dzdHIgIiIKKyJJcyBzYW9yYmhvZ2VhcnJhIGFuIHLDrW9taGNobMOhciBzZW87IGbDqWFjaCBhciBhbiBiaHVuY2jDs2QgbGUgaGFnaGFpZGhcbiIKKyJjb2lubsOtb2xsYWNoYSBjw7NpcGXDoWxhLiAgTsOtbCBiYXLDoW50YSBhciBiaXRoIGFubjsgZ28gZmnDuiBuw61sIGJhcsOhbnRhIGFublxuIgorImQnSU5Ew41PTFRBQ0hUIG7DsyBGRUlMScOaTkFDSFQgRCdGSEVJREhNIEFSIExFSVRILlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSBza2VsZXRvbiBkZWNsYXJhdGlvbnMgYXJlIGludmFsaWQiCittc2dzdHIgIm7DrSBjaGVhZGHDrXRlYXIgbsOtb3MgbcOzIG7DoSBjcmVhdGxhY2ggYW1ow6FpbiIKKworIzogc3JjL2dldGFyZ3MuYzo0NzYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIGxhbmd1YWdlIgorbXNnc3RyICJ0ZWFuZ2EgbmVhbWhiaGFpbMOtIGAlcyciCisKKyM6IHNyYy9nZXRhcmdzLmM6NDc5Cittc2dpZCAibXVsdGlwbGUgbGFuZ3VhZ2UgZGVjbGFyYXRpb25zIGFyZSBpbnZhbGlkIgorbXNnc3RyICJuw60gY2hlYWRhw610ZWFyIG7DrW9zIG3DsyBuw6EgdGVhbmdhIGFtaMOhaW4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NzQ3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogbWlzc2luZyBvcGVyYW5kIgorbXNnc3RyICJvaWJyZWFubiBhciBpYXJyYWlkaCBpIG5kaWFpZGggYCVzJyIKKworIzogc3JjL2dldGFyZ3MuYzo3NDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImV4dHJhIG9wZXJhbmQgJXMiCittc2dzdHIgIm9pYnJlYW5uIGJyZWlzZSBgJXMnIgorCisjOiBzcmMvZ3JhbS5jOjExMgorbXNnaWQgImVtcHR5IgorbXNnc3RyICJmb2xhbWgiCisKKyM6IHNyYy9ncmFtLmM6MjAxCittc2dpZCAiR3JhbW1hciIKK21zZ3N0ciAiR3JhbWFkYWNoIgorCisjOiBzcmMvZ3JhcGh2aXouYzo0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiLy8gR2VuZXJhdGVkIGJ5ICVzLlxuIgorIi8vIFJlcG9ydCBidWdzIHRvIDwlcz4uXG4iCisiLy8gSG9tZSBwYWdlOiA8JXM+LlxuIgorIlxuIgorbXNnc3RyICIiCisiLy8gQ3J1dGhhaXRoZSBhZyAlcy5cbiIKKyIvLyBUdWFpcmlzY8OtIGFyIGZoYWJodGFubmEgY2h1aWcgPCVzPi5cbiIKKyIvLyBMZWF0aGFuYWNoIGJhaWxlOiA8JXM+LlxuIgorIlxuIgorCisjOiBzcmMvbG9jYXRpb24uYzo5MyBzcmMvc2Nhbi1ncmFtLmw6ODU5CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgbnVtYmVyIG92ZXJmbG93IgorbXNnc3RyICJsw61uZS11aW1oaXIgdGhhciBtYW9pbCIKKworIzogc3JjL2xvY2F0aW9uLmM6OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29sdW1uIG51bWJlciBvdmVyZmxvdyIKK21zZ3N0ciAidWltaGlyIGFuIGNob2zDumluIHRoYXIgbWFvaWwiCisKKyM6IHNyYy9tYWluLmM6MTQ2Cittc2dpZCAicnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzIgorbXNnc3RyICJyaWFpbCBnYW4gdGFpcmJoZSBzYSBwaGFyc8OhbGHDrSBkZSBiaHLDrSBjb2luYmhsZWFjaHRhw60iCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NDUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlJWRlZmluZSB2YXJpYWJsZSAlcyByZWRlZmluZWQiCittc2dzdHIgInNhaW5taMOtbmnDuiBudWEgYXIgYXRocsOzZyAlJWRlZmluZSBgJXMnIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ1MworbXNnaWQgInByZXZpb3VzIGRlZmluaXRpb24iCittc2dzdHIgInNhaW5taMOtbmnDuiByb2ltaGUgc2VvIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ5MCBzcmMvbXVzY2xlLXRhYi5jOjUwNCBzcmMvbXVzY2xlLXRhYi5jOjU1NgorIzogc3JjL211c2NsZS10YWIuYzo2MjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgJXMiCittc2dzdHIgImx1YWNoIG5lYW1oYmhhaWzDrSBhciBhdGhyw7NnICUlZGVmaW5lIGAlcyc6IGAlcyciCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NTUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlJWRlZmluZSBCb29sZWFuIHZhcmlhYmxlICVzIgorbXNnc3RyICJsdWFjaCBuZWFtaGJoYWlsw60gYXIgYXRocsOzZyBCb29sZSAlJWRlZmluZSBgJXMnIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjYwOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJSVkZWZpbmUgdmFyaWFibGUgJXM6ICVzIgorbXNnc3RyICJsdWFjaCBuZWFtaGJoYWlsw60gYXIgYXRocsOzZyAlJWRlZmluZSBgJXMnOiBgJXMnIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjYxMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYWNjZXB0ZWQgdmFsdWU6ICVzIgorbXNnc3RyICJsdWFjaCBnbGFjdGhhOiBgJXMnIgorCisjOiBzcmMvcGFyc2UtZ3JhbS55Ojc0NworIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGlkZW50aWZpZXIgaW4gcGFyYW1ldGVyIGRlY2xhcmF0aW9uIgorbXNnc3RyICJhaXRoZWFudMOzaXIgYXIgaWFycmFpZGggaSBiaGbDs2dyYSBwYXJhaW3DqWFkYWlyIgorCisjIGRvbid0IGtub3cgaWYgYWxpZ25tZW50IG1hdHRlcnMgaGVyZSwgc28gdXNlIDQtbGV0dGVyICdzw7NydCcgdnMuICdjaW5lw6FsJy1LUFMKKyM6IHNyYy9wcmludC5jOjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiB0eXBlICVkIGlzICVzXG4iCittc2dzdHIgIiBkZSBjaGluZcOhbCAlZCBpcyAlc1xuIgorCisjOiBzcmMvcHJpbnQuYzoxNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAlZFxuIgorbXNnc3RyICJkw6lhbiBpb21sYW9pZCwgYWd1cyB0w6lpZ2ggZ28gc3RhaWQgJWRcbiIKKworIzogc3JjL3ByaW50LmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImdvIHRvIHN0YXRlICVkXG4iCittc2dzdHIgInTDqWlnaCBnbyBzdGFpZCAlZFxuIgorCisjOiBzcmMvcHJpbnQuYzoyMDMKK21zZ2lkICJlcnJvciAobm9uYXNzb2NpYXRpdmUpXG4iCittc2dzdHIgImVhcnLDoWlkIChuZWFtaC1jaG9taHRoaW9tc2FpdGhlYWNoKVxuIgorCisjOiBzcmMvcHJpbnQuYzoyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkdWNlIHVzaW5nIHJ1bGUgJWQgKCVzKSIKK21zZ3N0ciAibGFnaGRhaWdoLCBhZyDDunPDoWlkIHJpYWxhY2ggJWQgKCVzKSIKKworIzogc3JjL3ByaW50LmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgImFjY2VwdCIKK21zZ3N0ciAiZ2xhYyBsZWlzIgorCisjOiBzcmMvcHJpbnQuYzoyNjQgc3JjL3ByaW50LmM6MzM4Cittc2dpZCAiJGRlZmF1bHQiCittc2dzdHIgIiRyw6lhbWhzaG9jcmFpdGhlIgorCisjOiBzcmMvcHJpbnQuYzozNzMgc3JjL3ByaW50X2dyYXBoLmM6NzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlN0YXRlICVkIgorbXNnc3RyICJTdGFpZCAlZCAiCisKKyM6IHNyYy9wcmludC5jOjQwOQorbXNnaWQgIlRlcm1pbmFscywgd2l0aCBydWxlcyB3aGVyZSB0aGV5IGFwcGVhciIKK21zZ3N0ciAiU2xvaW5uIGRvbGFnaGRhaXRoZSwgbGUgcmlhbGFjaGEgbcOhcyBjdcOtIgorCisjOiBzcmMvcHJpbnQuYzo0MzYKK21zZ2lkICJOb250ZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIiCittc2dzdHIgIlNsb2lubiBpbmxhZ2hkYWl0aGUsIGxlIHJpYWxhY2hhIG3DoXMgY3XDrSIKKworIzogc3JjL3ByaW50LmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiBsZWZ0OiIKK21zZ3N0ciAiIGFyIGNsw6k6IgorCisjOiBzcmMvcHJpbnQuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uIHJpZ2h0OiIKK21zZ3N0ciAiIGFyIGRoZWlzOiIKKworIzogc3JjL3ByaW50LmM6NTEwCittc2dpZCAiUnVsZXMgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cyIKK21zZ3N0ciAiUmlhbGFjaGEgZ2FuIHRhaXJiaGUgc2EgcGhhcnPDoWxhw60gZGUgYmhyw60gY29pbmJobGVhY2h0YcOtIgorCisjOiBzcmMvcmVhZGVyLmM6NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgJXMgZGVjbGFyYXRpb25zIgorbXNnc3RyICJuw61vcyBtw7MgbsOhIGbDs2dyYSBhbWjDoWluICVzIgorCisjIEZSVEYgY2Fpc21pcnQKKyM6IHNyYy9yZWFkZXIuYzoxMzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInJlc3VsdCB0eXBlIGNsYXNoIG9uIG1lcmdlIGZ1bmN0aW9uICVzOiA8JXM+ICE9IDwlcz4iCittc2dzdHIgIiIKKyJjYWlzbWlydCBpZGlyIGNpbmXDoWxhY2hhIHRvcmFpZGggaSBiaGZlaWRobSBjaHVtYWlzY3RoZSBgJXMnOiA8JXM+ICE9IDwlcz4iCisKKyM6IHNyYy9yZWFkZXIuYzoxMzkgc3JjL3N5bXRhYi5jOjE1NiBzcmMvc3ltdGFiLmM6MTY2IHNyYy9zeW10YWIuYzo5MzgKKyM6IHNyYy9zeW10YWIuYzo5NTMgc3JjL3N5bXRhYi5jOjk2OCBzcmMvc3ltdGFiLmM6OTgzCittc2dpZCAicHJldmlvdXMgZGVjbGFyYXRpb24iCittc2dzdHIgImbDs2dyYSByb2ltaGUgc2VvIgorCisjOiBzcmMvcmVhZGVyLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZWQgc3ltYm9sIG5hbWUgZm9yICVzIGlnbm9yZWQiCittc2dzdHIgInJpbm5lYWRoIG5lYW1oYWlyZCBkJ2Fpbm0gZMO6YmFpbHRlIGFyICVzIgorCisjOiBzcmMvcmVhZGVyLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bGUgZ2l2ZW4gZm9yICVzLCB3aGljaCBpcyBhIHRva2VuIgorbXNnc3RyICJ0dWdhZGggcmlhaWwgaSBnY29taGFpciAlcyBhdMOhIGluYSB0aGVhZ2hyw6FuIGNvbWhhcnRoYWNoIgorCisjOiBzcmMvcmVhZGVyLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgInR5cGUgY2xhc2ggb24gZGVmYXVsdCBhY3Rpb246IDwlcz4gIT0gPCVzPiIKK21zZ3N0ciAiY2Fpc21pcnQgaWRpciBjaW5lw6FsYWNoYSBsZWlzIGFuIGdobsOtb21oIHLDqWFtaHNob2NyYWl0aGU6IDwlcz4gIT0gPCVzPiIKKworIzogc3JjL3JlYWRlci5jOjMxMAorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBydWxlIGZvciB0eXBlZCBub250ZXJtaW5hbCwgYW5kIG5vIGFjdGlvbiIKK21zZ3N0ciAiIgorInJpYWlsIGZob2xhbWggaSBnY29taGFpciB0ZWFnaHLDoW4gaW5sYWdoZGFpdGhlIGxlIGNpbmXDoWwsIGFjaCBuw61sIGFvbiBnaG7DrW9taCIKKworIzogc3JjL3JlYWRlci5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnVzZWQgdmFsdWU6ICQlZCIKK21zZ3N0ciAibHVhY2ggZ2FuIMO6c8OhaWQ6ICQlZCIKKworIzogc3JjL3JlYWRlci5jOjMzMAorbXNnaWQgInVuc2V0IHZhbHVlOiAkJCIKK21zZ3N0ciAibHVhY2ggZ2FuIHNvY3LDujogJCQiCisKKyM6IHNyYy9yZWFkZXIuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9rZW4gZm9yICUlcHJlYyBpcyBub3QgZGVmaW5lZDogJXMiCittc2dzdHIgInRlYWdocsOhbiBjb21oYXJ0aGFjaCBsZSBoYWdoYWlkaCAlJXByZWMgZ2FuIHNhaW5taMOtbmnDujogJXMiCisKKyM6IHNyYy9yZWFkZXIuYzo0MzEgc3JjL3JlYWRlci5jOjQ0NSBzcmMvcmVhZGVyLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgb25lICVzIGFsbG93ZWQgcGVyIHJ1bGUiCittc2dzdHIgIm7DrSBjaGVhZGHDrXRlYXIgYWNoICVzIGFtaMOhaW4gYW4gcmlhaWwiCisKKyM6IHNyYy9yZWFkZXIuYzo0NDEgc3JjL3JlYWRlci5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhZmZlY3RzIG9ubHkgR0xSIHBhcnNlcnMiCittc2dzdHIgIk7DrWwgJXMgY3VydGhhIGkgYmhmZWlkaG0gYWNoIGFyIHBoYXJzw6FsYWl0aGUgR0xSIgorCisjOiBzcmMvcmVhZGVyLmM6NDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIG11c3QgYmUgZm9sbG93ZWQgYnkgcG9zaXRpdmUgbnVtYmVyIgorbXNnc3RyICJOw60gZm9sw6FpciB1aW1oaXIgZGhlaW1obmVhY2ggYSB0aGVhY2h0IGkgbmRpYWlkaCAlcyIKKworIzogc3JjL3JlYWRlci5jOjU1NAorIywgYy1mb3JtYXQKK21zZ2lkICJydWxlIGlzIHRvbyBsb25nIgorbXNnc3RyICJyaWFpbCByw7NmaGFkYSIKKworIzogc3JjL3JlYWRlci5jOjY3MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBydWxlcyBpbiB0aGUgaW5wdXQgZ3JhbW1hciIKK21zZ3N0ciAibsOtbCBhb24gcmlhaWwgc2EgZ2hyYW1hZGFjaCBpb25jaHVydGhhIgorCisjOiBzcmMvcmVkdWNlLmM6MjQxCittc2dpZCAicnVsZSB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgInJpYWlsIGdhbiB0YWlyYmhlIHNhIGdocmFtYWRhY2giCisKKyM6IHNyYy9yZWR1Y2UuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiAlcyIKK21zZ3N0ciAic2xvbm4gaW5sYWdoZGFpdGhlIGdhbiB0YWlyYmhlIHNhIGdocmFtYWRhY2g6ICVzIgorCisjOiBzcmMvcmVkdWNlLmM6MzUwCittc2dpZCAiTm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAiU2xvaW5uIGlubGFnaGRhaXRoZSBnYW4gdGFpcmJoZSBzYSBnaHJhbWFkYWNoIgorCisjOiBzcmMvcmVkdWNlLmM6MzYzCittc2dpZCAiVGVybWluYWxzIHVudXNlZCBpbiBncmFtbWFyIgorbXNnc3RyICJTbG9pbm4gZG9sYWdoZGFpdGhlIGdhbiDDunPDoWlkIHNhIGdocmFtYWRhY2giCisKKyM6IHNyYy9yZWR1Y2UuYzozNzIKK21zZ2lkICJSdWxlcyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgIlJpYWxhY2hhIGdhbiB0YWlyYmhlIHNhIGdocmFtYWRhY2giCisKKyM6IHNyYy9yZWR1Y2UuYzozODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnaWRfcGx1cmFsICIlZCBub250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyWzBdICIlZCBzbG9ubiBpbmxhZ2hkYWl0aGUgZ2FuIHRhaXJiaGUgc2EgZ2hyYW1hZGFjaCIKK21zZ3N0clsxXSAiJWQgc2hsb25uIGlubGFnaGRhaXRoZSBnYW4gdGFpcmJoZSBzYSBnaHJhbWFkYWNoIgorbXNnc3RyWzJdICIlZCBzaGxvbm4gaW5sYWdoZGFpdGhlIGdhbiB0YWlyYmhlIHNhIGdocmFtYWRhY2giCittc2dzdHJbM10gIiVkIHNsb25uIGlubGFnaGRhaXRoZSBnYW4gdGFpcmJoZSBzYSBnaHJhbWFkYWNoIgorbXNnc3RyWzRdICIlZCBzbG9ubiBpbmxhZ2hkYWl0aGUgZ2FuIHRhaXJiaGUgc2EgZ2hyYW1hZGFjaCIKKworIzogc3JjL3JlZHVjZS5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ2lkX3BsdXJhbCAiJWQgcnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyWzBdICIlZCByaWFpbCBnYW4gdGFpcmJoZSBzYSBnaHJhbWFkYWNoIgorbXNnc3RyWzFdICIlZCByaWFpbCBnYW4gdGFpcmJoZSBzYSBnaHJhbWFkYWNoIgorbXNnc3RyWzJdICIlZCByaWFpbCBnYW4gdGFpcmJoZSBzYSBnaHJhbWFkYWNoIgorbXNnc3RyWzNdICIlZCByaWFpbCBnYW4gdGFpcmJoZSBzYSBnaHJhbWFkYWNoIgorbXNnc3RyWzRdICIlZCByaWFpbCBnYW4gdGFpcmJoZSBzYSBnaHJhbWFkYWNoIgorCisjOiBzcmMvcmVkdWNlLmM6NDE5CisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0IHN5bWJvbCAlcyBkb2VzIG5vdCBkZXJpdmUgYW55IHNlbnRlbmNlIgorbXNnc3RyICJuw61sIGFvbiBhYmFpcnQgZMOtb3J0aGFpdGhlIMOzbiBzaW9tYmFpbCB0b3NhaWdoICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MTg4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzdHJheSAnJXMnIgorbXNnc3RyICJgJCcgYXIgc3RyYWUiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyMjkKKyMsIGZ1enp5Cittc2dpZCAiYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUiCittc2dzdHIgInNlYW5zIGdvIGJoZnVpbCBgOycgYXIgaWFycmFpZGggYWcgZGVpcmVhZGggYW4gZ2huw61taCIKKworIzogc3JjL3NjYW4tY29kZS5sOjIzMgorIywgZnV6enkKK21zZ2lkICJmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24gd2lsbCBub3QgYWRkIHRoZSAnOyciCittc2dzdHIgIm7DrSBjaHVpcmZlYXIgYDsnIGxlaXMgaSBsZWFnYW5hY2hhIGRlIEJpc29uIGFtYWNoIGFuc2VvIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVzZSBvZiBZWUZBSUwsIHdoaWNoIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCIKK21zZ3N0ciAidMOhIFlZRkFJTCBpIGzDqWlnIGFndXMgYmFpbmZlYXIgYW1hY2ggw6kgc2EgdG9kaGNoYcOtIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDMxIHNyYy9zY2FuLWNvZGUubDo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJzIHRvOiAlYyVzIGF0ICVzIgorbXNnc3RyICJkw6lhbmFubiBzw6kgdGFnYWlydCBkbzogJWMlcyBhZyAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NzaWJseSBtZWFudDogJWMiCittc2dzdHIgImInZmjDqWlkaXI6ICVjIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgaGlkaW5nICVjIgorbXNnc3RyICIsICVjIMOhIGNodXIgaSBiaGZvbGFjaCIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICIgYXQgJXMiCittc2dzdHIgIiBhZyAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ3MgorIywgYy1mb3JtYXQKK21zZ2lkICIsIGNhbm5vdCBiZSBhY2Nlc3NlZCBmcm9tIG1pZC1ydWxlIGFjdGlvbiBhdCAkJWQiCittc2dzdHIgIiwgbsOtbCBhb24gZmjDoWlsIGFpciDDsyBnaG7DrW9taCBtZcOhbnJpYWxhY2ggYWcgJCVkIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NTIxIHNyYy9zY2FuLWdyYW0ubDo3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZWdlciBvdXQgb2YgcmFuZ2U6ICVzIgorbXNnc3RyICJzbMOhbnVpbWhpciBhcyByYW9uOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYxMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZmVyZW5jZTogJXMiCittc2dzdHIgInRhZ2FpcnQgbmVhbWhiaGFpbMOtOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYxOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yIGFmdGVyICclYycsIGV4cGVjdGluZyBpbnRlZ2VyLCBsZXR0ZXIsICdfJywgJ1snLCBvciAnJCciCittc2dzdHIgIiIKKyJlYXJyw6FpZCBjaG9taHLDqWlyZSB0YXIgw6lpcyBgJWMnLCBiaMOtb3RoYXMgYWcgc8O6aWwgbGUgc2zDoW51aW1oaXIsIGxpdGlyLCBgXycsICIKKyJgWycsIG9yIGAkJyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb24gYmVmb3JlICQlZDogJS4qcyIKK21zZ3N0ciAic2lvbWJhaWwgZ2FuIGFpbXNpw7ogaSByaWFpbCBnaHJhbWFkYcOtIHJvaW1oICQlZDogJS4qcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYzMworIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246ICUuKnMiCittc2dzdHIgInNpb21iYWlsIGdhbiBhaW1zacO6IGkgcmlhaWwgZ2hyYW1hZGHDrTogJS4qcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNsZWFkaW5nIHJlZmVyZW5jZTogJXMiCittc2dzdHIgInRhZ2FpcnQgbWjDrXRocmVvcmFjaDogJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIHJlZmVyZW5jZTogJXMiCittc2dzdHIgInRhZ2FpcnQgZGjDqWJocsOtb2NoOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJleHBsaWNpdCB0eXBlIGdpdmVuIGluIHVudHlwZWQgZ3JhbW1hciIKK21zZ3N0ciAiY2luZcOhbCBmb2xsYXNhY2ggaSBuZ3JhbWFkYWNoIGdhbiBjaGluZcOhbGFjaGEiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3NTkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiQkIGZvciB0aGUgbWlkcnVsZSBhdCAkJWQgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIk7DrWwgYW9uIGNoaW5lw6FsIGbDs2dhcnRoYSBhZyAkJCBuYSBtZcOhbnJpYWxhY2ggYWcgJCVkIGRlIGAlcyciCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3NjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiQkIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICJOw61sIGFvbiBjaGluZcOhbCBmw7NnYXJ0aGEgYWcgJCQgZGUgYCVzJyIKKworIzogc3JjL3NjYW4tY29kZS5sOjc4NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJCVzIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICJOw61sIGFvbiBjaGluZcOhbCBmw7NnYXJ0aGEgYWcgJCVzIGRlIGAlcyciCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoxNDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN0cmF5ICcsJyB0cmVhdGVkIGFzIHdoaXRlIHNwYWNlIgorbXNnc3RyICJgLCcgYXIgc2VhY2hyw6FuLCBjYWl0aCBsZWlzIG1hciBzcMOhcyBiw6FuIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZGlyZWN0aXZlOiAlcyIKK21zZ3N0ciAidHJlb2lyIG5lYW1oYmhhaWzDrTogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudGlmaWVyOiAlcyIKK21zZ3N0ciAiYWl0aGVhbnTDs2lyIG5lYW1oYmhhaWzDrTogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyOTUKKyMsIGZ1enp5Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIiCittc2dpZF9wbHVyYWwgImludmFsaWQgY2hhcmFjdGVycyIKK21zZ3N0clswXSAiY2FyYWNodGFyIG5lYW1oYmhhaWzDrTogJXMiCittc2dzdHJbMV0gImNhcmFjaHRhciBuZWFtaGJoYWlsw606ICVzIgorbXNnc3RyWzJdICJjYXJhY2h0YXIgbmVhbWhiaGFpbMOtOiAlcyIKK21zZ3N0clszXSAiY2FyYWNodGFyIG5lYW1oYmhhaWzDrTogJXMiCittc2dzdHJbNF0gImNhcmFjaHRhciBuZWFtaGJoYWlsw606ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgaWRlbnRpZmllciBpbiBicmFja2V0ZWQgbmFtZTogJXMiCittc2dzdHIgImFpdGhlYW50w7NpciBnYW4gc8O6aWwgbGVpcyBpbiBhaW5tIGlkaXIgbMO6aWLDrW7DrTogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW4gaWRlbnRpZmllciBleHBlY3RlZCIKK21zZ3N0ciAiYmjDrW90aGFzIGFnIHPDumlsIGxlIGhhaXRoZWFudMOzaXIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozODEKKyMsIGZ1enp5Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIgaW4gYnJhY2tldGVkIG5hbWUiCittc2dpZF9wbHVyYWwgImludmFsaWQgY2hhcmFjdGVycyBpbiBicmFja2V0ZWQgbmFtZSIKK21zZ3N0clswXSAiY2FyYWNodGFyIG5lYW1oYmhhaWzDrSBpbiBhaW5tIGlkaXIgbMO6aWLDrW7DrTogJXMiCittc2dzdHJbMV0gImNhcmFjaHRhciBuZWFtaGJoYWlsw60gaW4gYWlubSBpZGlyIGzDumliw61uw606ICVzIgorbXNnc3RyWzJdICJjYXJhY2h0YXIgbmVhbWhiaGFpbMOtIGluIGFpbm0gaWRpciBsw7ppYsOtbsOtOiAlcyIKK21zZ3N0clszXSAiY2FyYWNodGFyIG5lYW1oYmhhaWzDrSBpbiBhaW5tIGlkaXIgbMO6aWLDrW7DrTogJXMiCittc2dzdHJbNF0gImNhcmFjaHRhciBuZWFtaGJoYWlsw60gaW4gYWlubSBpZGlyIGzDumliw61uw606ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NDgxIHNyYy9zY2FuLWdyYW0ubDo1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgY2hhcmFjdGVyIGxpdGVyYWwiCittc2dzdHIgImNhcmFjaHRhciBsaXRyacO6aWwgZm9sYW1oIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NDg2IHNyYy9zY2FuLWdyYW0ubDo1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0cmEgY2hhcmFjdGVycyBpbiBjaGFyYWN0ZXIgbGl0ZXJhbCIKK21zZ3N0ciAiY2FyYWNodGFpciBiaHJlaXNlIGkgZ2NhcmFjaHRhciBsaXRyacO6aWwiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudWxsIGNoYXJhY3RlciIKK21zZ3N0ciAiY2FyYWNodGFyIG5lYW1oYmhhaWzDrSBuaWFsYXNhY2giCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1MzEgc3JjL3NjYW4tZ3JhbS5sOjU0MSBzcmMvc2Nhbi1ncmFtLmw6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIGFmdGVyIFxcLWVzY2FwZTogJXMiCittc2dzdHIgInVpbWhpciBuZWFtaGJoYWlsw60gdGFyIMOpaXMgw6lhbMO6Y2jDoWluLVxcOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjU3MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciBhZnRlciBcXC1lc2NhcGU6ICVzIgorbXNnc3RyICJjYXJhY2h0YXIgbmVhbWhiaGFpbMOtIHRhciDDqWlzIMOpYWzDumNow6Fpbi1cXDogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo5MDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgJXMgYXQgZW5kIG9mIGZpbGUiCittc2dzdHIgImAlcycgYXIgaWFycmFpZGggYWcgY3LDrW9jaCBhbiBjaG9taGFpZCIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjkxMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyBhdCBlbmQgb2YgbGluZSIKK21zZ3N0ciAiYCVzJyBhciBpYXJyYWlkaCBhZyBjcsOtb2NoIG5hIGzDrW5lIgorCisjOiBzcmMvc2Nhbi1za2VsLmw6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuY2xvc2VkICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAidHJlb2lyICVzIGdhbiBkw7puYWRoIGkgZ2NyZWF0bGFjaCIKKworIzogc3JjL3NjYW4tc2tlbC5sOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gZmV3IGFyZ3VtZW50cyBmb3IgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICJlYXNwYSBhcmfDs2ludMOtIGRvIHRocmVvaXIgJXMgaSBnY3JlYXRsYWNoIgorCisjOiBzcmMvc2Nhbi1za2VsLmw6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBmb3IgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICJhbiBpb21hcmNhIGFyZ8OzaW50w60gZG8gdGhyZW9pciAlcyBpIGdjcmVhdGxhY2giCisKKyM6IHNyYy9zeW1saXN0LmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJCB2YWx1ZTogJCVkIgorbXNnc3RyICJsdWFjaCBuZWFtaGJoYWlsw60gJDogJCVkIgorCisjOiBzcmMvc3ltdGFiLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUE9TSVggWWFjYyBmb3JiaWRzIGRhc2hlcyBpbiBzeW1ib2wgbmFtZXM6ICVzIgorbXNnc3RyICJOw60gY2hlYWRhw61vbm4gWWFjYyBQT1NJWCBkYWlzZWFubmEgaW4gYWlubW5lYWNoYTogJXMiCisKKyM6IHNyYy9zeW10YWIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBzeW1ib2xzIGluIGlucHV0IGdyYW1tYXIgKGxpbWl0IGlzICVkKSIKK21zZ3N0ciAiYW4gaW9tYXJjYSBzaW9tYmFpbMOtIHNhIGdocmFtYWRhY2ggaW9uY2h1cnRoYSAodWFzbWjDqWlkICVkKSIKKworIzogc3JjL3N5bXRhYi5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAiYXRoZmjDs2dyYSAlcyBhciAlcyIKKworIzogc3JjL3N5bXRhYi5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciA8JXM+IgorbXNnc3RyICJhdGhmaMOzZ3JhICVzIGFyIDwlcz4iCisKKyM6IHNyYy9zeW10YWIuYzozMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHJlZGVmaW5lZCIKK21zZ3N0ciAic2Fpbm1ow61uacO6IG51YSBhciBzaGlvbWJhaWwgJXMiCisKKyM6IHNyYy9zeW10YWIuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHJlZGVjbGFyZWQiCittc2dzdHIgImF0aGZow7NncmEgYXIgc2hpb21iYWlsICVzIgorCisjOiBzcmMvc3ltdGFiLmM6MzY3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVmaW5pbmcgdXNlciB0b2tlbiBudW1iZXIgb2YgJXMiCittc2dzdHIgInNhaW5taMOtbmnDuiBudWEgYXIgYW4gdWltaGlyIHRoZWFnaHLDoWluIGRvICVzIgorCisjOiBzcmMvc3ltdGFiLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyBpcyB1c2VkLCBidXQgaXMgbm90IGRlZmluZWQgYXMgYSB0b2tlbiBhbmQgaGFzIG5vIHJ1bGVzIgorbXNnc3RyICIiCisidMOhIHNpb21iYWlsICVzIGluIMO6c8OhaWQsIGFjaCBuw61sIHPDqSBpbmEgdGVhZ2hyw6FuIGNvbWhhcnRoYWNoIGFndXMgbsOtbCBhb24gIgorInJpYWlsIGFpY2kiCisKKyM6IHNyYy9zeW10YWIuYzo0MTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyB1c2VkIG1vcmUgdGhhbiBvbmNlIGFzIGEgbGl0ZXJhbCBzdHJpbmciCittc2dzdHIgInNpb21iYWlsIGAlcycgaW4gw7pzw6FpZCBuw61vcyBtw7MgbsOhIHVhaXIgYW1ow6FpbiBtYXIgdGhlYWdocsOhbiBsaXRyacO6aWwiCisKKyM6IHNyYy9zeW10YWIuYzo0MTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyBnaXZlbiBtb3JlIHRoYW4gb25lIGxpdGVyYWwgc3RyaW5nIgorbXNnc3RyICJ0w6EgbsOtb3MgbcOzIG7DoSBhb24gdGVhZ2hyw6FuIGxpdHJpw7ppbCBhbWjDoWluIGFnIGFuIHRzaW9tYmFpbCBgJXMnIgorCisjOiBzcmMvc3ltdGFiLmM6NTM1CisjLCBjLWZvcm1hdAorbXNnaWQgInVzZXIgdG9rZW4gbnVtYmVyICVkIHJlZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICJhdGhmaMOzZ3JhIGFyIHVpbWhpciB0aGVhZ2hyw6FpbiAlZCBkbyAlcyIKKworIzogc3JjL3N5bXRhYi5jOjUzOQorIywgYy1mb3JtYXQKK21zZ2lkICJwcmV2aW91cyBkZWNsYXJhdGlvbiBmb3IgJXMiCittc2dzdHIgImbDs2dyYSByb2ltaGUgc2VvIGFyICVzIgorCisjOiBzcmMvc3ltdGFiLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBzdGFydCBzeW1ib2wgJXMgaXMgdW5kZWZpbmVkIgorbXNnc3RyICJzaW9tYmFpbCB0b3NhaWdoICVzIGdhbiBzYWlubWjDrW5pw7oiCisKKyM6IHNyYy9zeW10YWIuYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHN0YXJ0IHN5bWJvbCAlcyBpcyBhIHRva2VuIgorbXNnc3RyICJpcyB0ZWFnaHLDoW4gY29taGFydGhhY2ggw60gYW4gdHNpb21iYWlsIHRvc2FpZ2ggJXMiCisKKyM6IHNyYy9zeW10YWIuYzo5MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdnZWQgJSVkZXN0cnVjdG9yIgorbXNnc3RyICJhdGhmaMOzZ3JhIGFyICUlZGVzdHJ1Y3RvciByw6lhbWhzaG9jcmFpdGhlIGNsaWJlw6FpbHRlIgorCisjOiBzcmMvc3ltdGFiLmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnbGVzcyAlJWRlc3RydWN0b3IiCittc2dzdHIgImF0aGZow7NncmEgYXIgJSVkZXN0cnVjdG9yIHLDqWFtaHNob2NyYWl0aGUgZ2FuIGNobGliIgorCisjOiBzcmMvc3ltdGFiLmM6OTY1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICUlcHJpbnRlciIKK21zZ3N0ciAiYXRoZmjDs2dyYSBhciAlJXByaW50ZXIgcsOpYW1oc2hvY3JhaXRoZSBjbGliZcOhaWx0ZSIKKworIzogc3JjL3N5bXRhYi5jOjk4MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJSVwcmludGVyIgorbXNnc3RyICJhdGhmaMOzZ3JhIGFyICUlcHJpbnRlciByw6lhbWhzaG9jcmFpdGhlIGdhbiBjaGxpYiIKKworIzogZGpncHAvc3VicGlwZS5jOjYzIGRqZ3BwL3N1YnBpcGUuYzoyODYgZGpncHAvc3VicGlwZS5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdmluZyBvZiAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6ODUgZGpncHAvc3VicGlwZS5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNyZWF0aW9uIG9mIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAic2F2aW5nIHN0ZGluIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgInNhdmluZyBzdGRvdXQgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxNTMgZGpncHAvc3VicGlwZS5jOjE5NyBkamdwcC9zdWJwaXBlLmM6MjU4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nIG9mIHRtcGZpbGUgZmFpbGVkIgorbXNnc3RyICJ0aGVpcCBhciBfb3Blbl9vc2ZoYW5kbGUiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgYmlzb24ncyBzdGRvdXQgdG8gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIG00J3Mgc3RkaW4gZnJvbSB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlbmluZyBvZiBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIG00J3Mgc3Rkb3V0IHRvIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSAnJXMnIGludGVycnVwdGVkIgorbXNnc3RyICJ0aGVpcCBhciBhbiBmaG9jaGzDoXIgYCVzJyIKKworIzogZGpncHAvc3VicGlwZS5jOjI0MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic3Vic2lkaWFyeSBwcm9ncmFtICclcycgbm90IGZvdW5kIgorbXNnc3RyICJmb2NobMOhciBgJXMnIGdhbiBhaW1zacO6IgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIGJpc29uJ3Mgc3RkaW4gZnJvbSB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGFyZ3VtZW50ICVzIGZvciAlcyIKK21zZ3N0ciAiYXJnw7NpbnQgbmVhbWhiaGFpbMOtICVzIGNodW4gJXMiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgYXJndW1lbnQgJXMgZm9yICVzIgorbXNnc3RyICJhcmfDs2ludCBkaMOpYmhyw61vY2ggJXMgY2h1biAlcyIKKworIzogbGliL2FyZ21hdGNoLmM6MTUzCittc2dpZCAiVmFsaWQgYXJndW1lbnRzIGFyZToiCittc2dzdHIgIk5hIGhhcmfDs2ludMOtIGJhaWzDrToiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X2FsbG9jcywgJXUgZnJlZWQgKCUuMmYlJSkuXG4iCittc2dzdHIgIiV1IGJpdHNldF9hbGxvY3MsICV1IHNjYW9pbHRlICglLjJmJSUpLlxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9zZXRzLCAldSBjYWNoZWQgKCUuMmYlJSlcbiIKK21zZ3N0ciAiJXUgYml0c2V0X3NldHMsICV1IGN1cnRoYSBpIGR0YWlzY2UgKCUuMmYlJSlcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfcmVzZXRzLCAldSBjYWNoZWQgKCUuMmYlJSlcbiIKK21zZ3N0ciAiJXUgYml0c2V0X3Jlc2V0cywgJXUgY3VydGhhIGkgZHRhaXNjZSAoJS4yZiUlKVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF90ZXN0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF90ZXN0cywgJXUgY3VydGhhIGkgZHRhaXNjZSAoJS4yZiUlKVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9saXN0c1xuIgorbXNnc3RyICIldSBiaXRzZXRfbGlzdHNcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5MgorbXNnaWQgImNvdW50IGxvZyBoaXN0b2dyYW1cbiIKK21zZ3N0ciAiaGlzdGVhZ3JhbSBsb2dhIMOhaXJpbWhcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5NQorbXNnaWQgInNpemUgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICJoaXN0ZWFncmFtIGxvZ2EgbcOpaWRcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5OAorbXNnaWQgImRlbnNpdHkgaGlzdG9ncmFtXG4iCittc2dzdHIgImhpc3RlYWdyYW0gZGzDuml0aGVcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQml0c2V0IHN0YXRpc3RpY3M6XG4iCisiXG4iCittc2dzdHIgIiIKKyJTdGFpdGlzdGljIEJpdHNldDpcbiIKKyJcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJBY2N1bXVsYXRlZCBydW5zID0gJXVcbiIKK21zZ3N0ciAiUml0w60gY2FybmFjaGEgPSAldVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjU5IGxpYi9iaXRzZXRfc3RhdHMuYzoyNjQKKyMsIGZ1enp5Cittc2dpZCAiY2Fubm90IHJlYWQgc3RhdHMgZmlsZSIKK21zZ3N0ciAiTsOtb3JiaCBmaMOpaWRpciBhbiBjb21oYWQgc3RhaXRpc3RpY2UgYSBsw6lhbWguIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjYxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJiYWQgc3RhdHMgZmlsZSBzaXplXG4iCittc2dzdHIgIk3DqWlkIGNvbWhhaWQgc3RhaXRpc3RpY2UgZWFycsOhaWRlYWNoLlxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6Mjg3IGxpYi9iaXRzZXRfc3RhdHMuYzoyODkKKyMsIGZ1enp5Cittc2dpZCAiY2Fubm90IHdyaXRlIHN0YXRzIGZpbGUiCittc2dzdHIgIk7DrW9yYmggZmjDqWlkaXIgc2Nyw61vYmggYXIgYW4gY2hvbWhhZCBzdGFpdGlzdGljZS4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyOTIKKyMsIGZ1enp5Cittc2dpZCAiY2Fubm90IG9wZW4gc3RhdHMgZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAiTsOtb3JiaCBmaMOpaWRpciBhbiBjb21oYWQgc3RhaXRpc3RpY2UgYSBvc2NhaWx0IGNodW4gc2Nyw61vYmggYW5uLiIKKworIzogbGliL2Nsb3Nlb3V0LmM6MTEyCisjLCBmdXp6eQorbXNnaWQgIndyaXRlIGVycm9yIgorbXNnc3RyICJlYXJyw6FpZCBtaGFyZmFjaCIKKworIzogbGliL2Vycm9yLmM6MTg4Cittc2dpZCAiVW5rbm93biBzeXN0ZW0gZXJyb3IiCittc2dzdHIgIkVhcnLDoWlkIGNow7NyYWlzIGFuYWl0aG5pZCIKKworIzogbGliL2dldG9wdC5jOjU0NyBsaWIvZ2V0b3B0LmM6NTc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICclcycgaXMgYW1iaWd1b3VzOyBwb3NzaWJpbGl0aWVzOiIKK21zZ3N0ciAiJXM6IFTDoSBhbiByb2doYSAnJXMnIGTDqWJocsOtb2NoXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo2MjQgbGliL2dldG9wdC5jOjYyOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBuw60gY2hlYWRhw610ZWFyIGFyZ8OzaW50IGkgbmRpYWlkaCBuYSByb2doYSAnLS0lcydcbiIKKworIzogbGliL2dldG9wdC5jOjYzNyBsaWIvZ2V0b3B0LmM6NjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJyVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IG7DrSBjaGVhZGHDrXRlYXIgYXJnw7NpbnQgaSBuZGlhaWRoIG5hIHJvZ2hhICclYyVzJ1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6Njg1IGxpYi9nZXRvcHQuYzo3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLS0lcycgcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IHTDoSBhcmfDs2ludCBkZSBkaMOtdGggaSBuZGlhaWRoIG5hIHJvZ2hhICctLSVzJ1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6NzQyIGxpYi9nZXRvcHQuYzo3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gJy0tJXMnXG4iCittc2dzdHIgIiVzOiByb2doYSBhbmFpdGhuaWQgJy0tJXMnXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo3NTMgbGliL2dldG9wdC5jOjc1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiAnJWMlcydcbiIKK21zZ3N0ciAiJXM6IHJvZ2hhIGFuYWl0aG5pZCAnJWMlcydcbiIKKworIzogbGliL2dldG9wdC5jOjgwNSBsaWIvZ2V0b3B0LmM6ODA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIG9wdGlvbiAtLSAnJWMnXG4iCittc2dzdHIgIiVzOiByb2doYSBuZWFtaGJoYWlsw60gLS0gJyVjJ1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6ODYxIGxpYi9nZXRvcHQuYzo4NzggbGliL2dldG9wdC5jOjEwODggbGliL2dldG9wdC5jOjExMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAnJWMnXG4iCittc2dzdHIgIiVzOiB0w6EgYXJnw7NpbnQgZGUgZGjDrXRoIGkgbmRpYWlkaCBuYSByb2doYSAtLSAnJWMnXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo5MzQgbGliL2dldG9wdC5jOjk1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiVzOiBUw6EgYW4gcm9naGEgJy1XICVzJyBkw6liaHLDrW9jaFxuIgorCisjOiBsaWIvZ2V0b3B0LmM6OTc0IGxpYi9nZXRvcHQuYzo5OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLVcgJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IG7DrSBjaGVhZGHDrXRlYXIgYXJnw7NpbnQgaSBuZGlhaWRoIG5hIHJvZ2hhICctVyAlcydcbiIKKworIzogbGliL2dldG9wdC5jOjEwMTMgbGliL2dldG9wdC5jOjEwMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLVcgJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiB0w6EgYXJnw7NpbnQgZGUgZGjDrXRoIGkgbmRpYWlkaCBuYSByb2doYSAnLVcgJXMnXG4iCisKKyM6IGxpYi9vYnN0YWNrLmM6NDEzIGxpYi9vYnN0YWNrLmM6NDE1IGxpYi94YWxsb2MtZGllLmM6MzQKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJjdWltaG5lIMOtZGl0aGUiCisKKyM6IGxpYi9zcGF3bi1waXBlLmM6MTQwIGxpYi9zcGF3bi1waXBlLmM6MTQzIGxpYi9zcGF3bi1waXBlLmM6MjY0CisjOiBsaWIvc3Bhd24tcGlwZS5jOjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIHBpcGUiCittc2dzdHIgIm7DrSBmw6lpZGlyIHDDrW9wYSBhIGNocnV0aMO6IgorCisjOiBsaWIvc3Bhd24tcGlwZS5jOjIzNCBsaWIvc3Bhd24tcGlwZS5jOjM0OCBsaWIvd2FpdC1wcm9jZXNzLmM6MjgyCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MgZmFpbGVkIgorbXNnc3RyICJ0aGVpcCBhciBmaG9waHLDs2lzZWFzICVzIgorCisjLiBUUkFOU0xBVE9SUzoKKyMuIEdldCB0cmFuc2xhdGlvbnMgZm9yIG9wZW4gYW5kIGNsb3NpbmcgcXVvdGF0aW9uIG1hcmtzLgorIy4gVGhlIG1lc3NhZ2UgY2F0YWxvZyBzaG91bGQgdHJhbnNsYXRlICJgIiB0byBhIGxlZnQKKyMuIHF1b3RhdGlvbiBtYXJrIHN1aXRhYmxlIGZvciB0aGUgbG9jYWxlLCBhbmQgc2ltaWxhcmx5IGZvcgorIy4gIiciLiAgRm9yIGV4YW1wbGUsIGEgRnJlbmNoIFVuaWNvZGUgbG9jYWwgc2hvdWxkIHRyYW5zbGF0ZQorIy4gdGhlc2UgdG8gVSswMEFCIChMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRQorIy4gUVVPVEFUSU9OIE1BUkspLCBhbmQgVSswMEJCIChSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUKKyMuIFFVT1RBVElPTiBNQVJLKSwgcmVzcGVjdGl2ZWx5LgorIy4KKyMuIElmIHRoZSBjYXRhbG9nIGhhcyBubyB0cmFuc2xhdGlvbiwgd2Ugd2lsbCB0cnkgdG8KKyMuIHVzZSBVbmljb2RlIFUrMjAxOCAoTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspIGFuZAorIy4gVW5pY29kZSBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykuICBJZiB0aGUKKyMuIGN1cnJlbnQgbG9jYWxlIGlzIG5vdCBVbmljb2RlLCBsb2NhbGVfcXVvdGluZ19zdHlsZQorIy4gd2lsbCBxdW90ZSAnbGlrZSB0aGlzJywgYW5kIGNsb2NhbGVfcXVvdGluZ19zdHlsZSB3aWxsCisjLiBxdW90ZSAibGlrZSB0aGlzIi4gIFlvdSBzaG91bGQgYWx3YXlzIGluY2x1ZGUgdHJhbnNsYXRpb25zCisjLiBmb3IgImAiIGFuZCAiJyIgZXZlbiBpZiBVKzIwMTggYW5kIFUrMjAxOSBhcmUgYXBwcm9wcmlhdGUKKyMuIGZvciB5b3VyIGxvY2FsZS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFya3NfaW5fb3RoZXJfbGFuZ3VhZ2VzPgorIy4gYW5kIHVzZSBnbHlwaHMgc3VpdGFibGUgZm9yIHlvdXIgbGFuZ3VhZ2UuCisjOiBsaWIvcXVvdGVhcmcuYzozMTIKK21zZ2lkICJgIgorbXNnc3RyICJgIgorCisjOiBsaWIvcXVvdGVhcmcuYzozMTMKK21zZ2lkICInIgorbXNnc3RyICInIgorCisjOiBsaWIvdGltZXZhci5jOjQ3NQorbXNnaWQgIiIKKyJcbiIKKyJFeGVjdXRpb24gdGltZXMgKHNlY29uZHMpXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBZ2HDrSByaXRlIChzb2ljaW5kw60pXG4iCisKKyM6IGxpYi90aW1ldmFyLmM6NTI1Cittc2dpZCAiIFRPVEFMICAgICAgICAgICAgICAgICA6IgorbXNnc3RyICIgSU9NTMOBTiAgICAgICAgICAgICAgICA6IgorCisjOiBsaWIvdGltZXZhci5jOjU2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lIGluICVzOiAlbGQuJTA2bGQgKCVsZCUlKVxuIgorbXNnc3RyICJhZ2EgaSAlczogJWxkLiUwNmxkICglbGQlJSlcbiIKKworIzogbGliL3czMnNwYXduLmg6NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiX29wZW5fb3NmaGFuZGxlIGZhaWxlZCIKK21zZ3N0ciAidGhlaXAgYXIgX29wZW5fb3NmaGFuZGxlIgorCisjOiBsaWIvdzMyc3Bhd24uaDo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdG9yZSBmZCAlZDogZHVwMiBmYWlsZWQiCittc2dzdHIgIm7DrSBmw6lpZGlyIGZkICVkIGEgYXRoY2jDs2lyacO6OiB0aGVpcCBhciBkdXAyIgorCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6MjIzIGxpYi93YWl0LXByb2Nlc3MuYzoyNTUgbGliL3dhaXQtcHJvY2Vzcy5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdWJwcm9jZXNzIgorbXNnc3RyICJmb3BocsOzaXNlYXMgJXMiCisKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzoyNzQgbGliL3dhaXQtcHJvY2Vzcy5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdWJwcm9jZXNzIGdvdCBmYXRhbCBzaWduYWwgJWQiCittc2dzdHIgImZ1YWlyIGZvcGhyw7Npc2VhcyAlcyBjb21oYXJ0aGEgbWFyZmFjaCAlZCIKKworI34gbXNnaWQgInN0YXRlICVkIgorI34gbXNnc3RyICJzdGFpZCAlZCIKKworIywgZnV6enkKKyN+IG1zZ2lkICJzdHJheSAnQCciCisjfiBtc2dzdHIgImBAJyBhciBzdHJhZSIKKworI34gbXNnaWQgIiIKKyN+ICJ1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgYCVzJyBwYXNzZWQgdG8gbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2dldF9sb2MiCisjfiBtc2dzdHIgIiIKKyN+ICJhdGhyw7NnICUlZGVmaW5lIGAlcycgZ2FuIHNhaW5taMOtbmnDuiBzZW9sdGEgY2h1aWcgIgorI34gIm11c2NsZV9wZXJjZW50X2RlZmluZV9nZXRfbG9jIgorCisjfiBtc2dpZCAiIgorI34gInVuZGVmaW5lZCAlJWRlZmluZSB2YXJpYWJsZSBgJXMnIHBhc3NlZCB0byAiCisjfiAibXVzY2xlX3BlcmNlbnRfZGVmaW5lX2dldF9zeW5jbGluZSIKKyN+IG1zZ3N0ciAiIgorI34gImF0aHLDs2cgJSVkZWZpbmUgYCVzJyBnYW4gc2Fpbm1ow61uacO6IHNlb2x0YSBjaHVpZyAiCisjfiAibXVzY2xlX3BlcmNlbnRfZGVmaW5lX2dldF9zeW5jbGluZSIKKworI34gbXNnaWQgIiIKKyN+ICJ1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgYCVzJyBwYXNzZWQgdG8gbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2ZsYWdfaWYiCisjfiBtc2dzdHIgIiIKKyN+ICJhdGhyw7NnICUlZGVmaW5lIGAlcycgZ2FuIHNhaW5taMOtbmnDuiBzZW9sdGEgY2h1aWcgIgorI34gIm11c2NsZV9wZXJjZW50X2RlZmluZV9mbGFnX2lmIgorCisjfiBtc2dpZCAiIgorI34gInVuZGVmaW5lZCAlJWRlZmluZSB2YXJpYWJsZSBgJXMnIHBhc3NlZCB0byAiCisjfiAibXVzY2xlX3BlcmNlbnRfZGVmaW5lX2NoZWNrX3ZhbHVlcyIKKyN+IG1zZ3N0ciAiIgorI34gImF0aHLDs2cgJSVkZWZpbmUgYCVzJyBnYW4gc2Fpbm1ow61uacO6IHNlb2x0YSBjaHVpZyAiCisjfiAibXVzY2xlX3BlcmNlbnRfZGVmaW5lX2NoZWNrX3ZhbHVlcyIKKworI34gbXNnaWQgIiIKKyN+ICJHZW5lcmF0ZSBMQUxSKDEpIGFuZCBHTFIgcGFyc2Vycy5cbiIKKyN+ICJcbiIKKyN+IG1zZ3N0ciAiIgorI34gIkdpbiBwYXJzw6FsYWl0aGUgTEFMUigxKSBhZ3VzIEdMUi5cbiIKKyN+ICJcbiIKKworI34gbXNnaWQgInRva2VucyAlcyBhbmQgJXMgYm90aCBhc3NpZ25lZCBudW1iZXIgJWQiCisjfiBtc2dzdHIgIiIKKyN+ICJ0w6EgdGVhZ2hyw6FpbiBjaG9taGFydGhhY2ggYW5uICglcyBhZ3VzICVzKSBsZWlzIGFuIHVpbWhpciBjaMOpYW5uYSAoJWQpIgorCisjfiBtc2dpZCAiaW52YWxpZCBlc2NhcGUgc2VxdWVuY2U6ICVzIgorI34gbXNnc3RyICLDqWFsw7pjaMOhbiBuZWFtaGJoYWlsw606ICVzIgorCisjfiBtc2dpZCAidW5yZWNvZ25pemVkIGVzY2FwZSBzZXF1ZW5jZTogJXMiCisjfiBtc2dzdHIgInNlaWNoZWFtaCDDqWFsw7pjaMOhaW4gYW5haXRobmlkOiAlcyIKKworI34gbXNnaWQgIiVzOiBpbGxlZ2FsIG9wdGlvbiAtLSAlY1xuIgorI34gbXNnc3RyICIlczogcm9naGEgbmVhbWhjaGVhZGFpdGhlIC0tICVjXG4iCisKKyN+IG1zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gYCVzJyBjb3VsZCBub3QgYmUgaW52b2tlZCIKKyN+IG1zZ3N0ciAibsOtb3JiaCBmaMOpaWRpciBhbiBmb2NobMOhciBgJXMnIGEgcml0aCIKKworI34gbXNnaWQgIiVkIG5vbnRlcm1pbmFsIgorI34gbXNnaWRfcGx1cmFsICIlZCBub250ZXJtaW5hbHMiCisjfiBtc2dzdHJbMF0gIiVkIHNsb25uIGRvbGFnaGRhaXRoZSIKKyN+IG1zZ3N0clsxXSAiJWQgc2hsb25uIGRvbGFnaGRhaXRoZSIKKyN+IG1zZ3N0clsyXSAiJWQgc2hsb25uIGRvbGFnaGRhaXRoZSIKKyN+IG1zZ3N0clszXSAiJWQgc2xvbm4gZG9sYWdoZGFpdGhlIgorI34gbXNnc3RyWzRdICIlZCBzbG9ubiBkb2xhZ2hkYWl0aGUiCisKKyN+IG1zZ2lkICIgYW5kICIKKyN+IG1zZ3N0ciAiIGFndXMgIgorCisjfiBtc2dpZCAiJWQgcnVsZSIKKyN+IG1zZ2lkX3BsdXJhbCAiJWQgcnVsZXMiCisjfiBtc2dzdHJbMF0gIiVkIHJpYWlsIgorI34gbXNnc3RyWzFdICIlZCByaWFpbCIKKyN+IG1zZ3N0clsyXSAiJWQgcmlhaWwiCisjfiBtc2dzdHJbM10gIiVkIHJpYWlsIgorI34gbXNnc3RyWzRdICIlZCByaWFpbCIKKworI34gbXNnaWQgIiB1c2VsZXNzIGluIGdyYW1tYXIiCisjfiBtc2dzdHIgIiBnYW4gdGFpcmJoZSBzYSBnaHJhbWFkYWNoIgorCisjfiBtc2dpZCAiIgorI34gIklmIGEgbG9uZyBvcHRpb24gc2hvd3MgYW4gYXJndW1lbnQgYXMgbWFuZGF0b3J5LCB0aGVuIGl0IGlzIG1hbmRhdG9yeVxuIgorI34gImZvciB0aGUgZXF1aXZhbGVudCBzaG9ydCBvcHRpb24gYWxzby4gIFNpbWlsYXJseSBmb3Igb3B0aW9uYWwgYXJndW1lbnRzLlxuIgorI34gbXNnc3RyICIiCisjfiAiSXMgcmlhY2h0YW5hY2ggbGUgcm9naGEgZ2hlYXJyIGFvbiBhcmfDs2ludCBhdMOhIHJpYWNodGFuYWNoXG4iCisjfiAibGVpcyBhbiByb2doYSBmaGFkYSwgYWd1cyBhciBhbiBuw7NzIGPDqWFubmEgbGVpcyBuYSBoYXJnw7NpbnTDrSByb2dobmFjaGEuXG4iCisKKyN+IG1zZ2lkICJSdWxlcyBuZXZlciByZWR1Y2VkIgorI34gbXNnc3RyICJSaWFsYWNoYSBuYWNoIGxhZ2hkYWl0aGUgcmlhbWgiCisKKyN+IG1zZ2lkICJUZXJtaW5hbHMgd2hpY2ggYXJlIG5vdCB1c2VkIgorI34gbXNnc3RyICJTbG9pbm4gZG9sYWdoZGFpdGhlIG5hY2ggaW4gw7pzw6FpZCIKKworI34gbXNnaWQgIndhcm5pbmc6ICIKKyN+IG1zZ3N0ciAicmFiaGFkaDogIgorCisjfiBtc2dpZCAic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIKKyN+IG1zZ3N0ciAiZWFycsOhaWQgY2hvbWhyw6lpcmU6IG7DrSBmw6lpZGlyIGPDumzDuiIKKworI34gbXNnaWQgIlN0YWNrIG5vdyIKKyN+IG1zZ3N0ciAiQ3J1YWNoIGFub2lzIgorCisjfiBtc2dpZCAiUmVkdWNpbmcgc3RhY2sgYnkgcnVsZSAlZCAobGluZSAldSksICIKKyN+IG1zZ3N0ciAiQ3J1YWNoIMOhIGxhZ2hkw7osIGFnIMO6c8OhaWQgcmlhbGFjaCAlZCAobMOtbmUgJXUpIgorCisjfiBtc2dpZCAicGFyc2VyIHN0YWNrIG92ZXJmbG93IgorI34gbXNnc3RyICJjcnVhY2ggcGhhcnPDoWxhIHRoYXIgbWFvaWwiCisKKyN+IG1zZ2lkICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIKKyN+IG1zZ3N0ciAiTcOpYWRhw61vZGggYW4gY2hydWFjaCBnbyAlbHVcbiIKKworI34gbXNnaWQgIkVudGVyaW5nIHN0YXRlICVkXG4iCisjfiBtc2dzdHIgIkFnIGR1bCBnbyBzdGFpZCAlZFxuIgorCisjfiBtc2dpZCAiUmVhZGluZyBhIHRva2VuOiAiCisjfiBtc2dzdHIgIlRlYWdocsOhbiBjb21oYXJ0aGFjaCDDoSBsw6lhbWg6ICIKKworI34gbXNnaWQgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iCisjfiBtc2dzdHIgIkFnIGRlaXJlYWRoIGFuIGlvbmNodWlyLlxuIgorCisjfiBtc2dpZCAiTmV4dCB0b2tlbiBpcyIKKyN+IG1zZ3N0ciAiQW4gY2jDqWFkIHRlYWdocsOhbiBjb21oYXJ0aGFjaCBlaWxlIgorCisjfiBtc2dpZCAiU2hpZnRpbmciCisjfiBtc2dzdHIgIkFnIGTDqWFuYW1oIGlvbWxhb2lkIgorCisjfiBtc2dpZCAiUE9TSVggZm9yYmlkcyBkZWNsYXJhdGlvbnMgaW4gdGhlIGdyYW1tYXIiCisjfiBtc2dzdHIgIk7DrSBjaGVhZGHDrXRlYXIgZsOzZ3Jhw60gc2EgZ2hyYW1hZGFjaCBkZSByw6lpciBQT1NJWCIKKworI34gbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIKKyN+IG1zZ3N0ciAiZWFycsOhaWQgY2hvbWhyw6lpcmUsICVzIGdhbiBjaG9pbm5lIgorCisjfiBtc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMiCisjfiBtc2dzdHIgImVhcnLDoWlkIGNob21ocsOpaXJlLCAlcyBnYW4gY2hvaW5uZSwgYmjDrW90aGFzIGFnIHPDumlsIGxlICVzIgorCisjfiBtc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiCisjfiBtc2dzdHIgImVhcnLDoWlkIGNob21ocsOpaXJlLCAlcyBnYW4gY2hvaW5uZSwgYmjDrW90aGFzIGFnIHPDumlsIGxlICVzIG7DsyAlcyIKKworI34gbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIgorI34gbXNnc3RyICIiCisjfiAiZWFycsOhaWQgY2hvbWhyw6lpcmUsICVzIGdhbiBjaG9pbm5lLCBiaMOtb3RoYXMgYWcgc8O6aWwgbGUgJXMgbsOzICVzIG7DsyAlcyIKKworI34gbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIgorI34gbXNnc3RyICIiCisjfiAiZWFycsOhaWQgY2hvbWhyw6lpcmUsICVzIGdhbiBjaG9pbm5lLCBiaMOtb3RoYXMgYWcgc8O6aWwgbGUgJXMgbsOzICVzIG7DsyAlcyBuw7MgIgorI34gIiVzIgorCisjfiBtc2dpZCAic3ludGF4IGVycm9yOyBhbHNvIG1lbW9yeSBleGhhdXN0ZWQiCisjfiBtc2dzdHIgImVhcnLDoWlkIGNob21ocsOpaXJlOyBjdWltaG5lIMOtZGl0aGUgZnJlaXNpbiIKKworI34gbXNnaWQgInN5bnRheCBlcnJvciIKKyN+IG1zZ3N0ciAiZWFycsOhaWQgY2hvbWhyw6lpcmUiCisKKyN+IG1zZ2lkICJFcnJvcjogZGlzY2FyZGluZyIKKyN+IG1zZ3N0ciAiRWFycsOhaWQ6IGN1cnRoYSBpIGxlYXRhb2JoIgorCisjfiBtc2dpZCAiRXJyb3I6IHBvcHBpbmciCisjfiBtc2dzdHIgIkVhcnLDoWlkOiDDoSBwaGxvYmFkaCIKKworI34gbXNnaWQgIkVycm9yOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIKKyN+IG1zZ3N0ciAiRWFycsOhaWQ6IHLDqWFtaGZoZWljZcOhaWwgY3VydGhhIGkgbGVhdGFvYmgiCisKKyN+IG1zZ2lkICJtaXNzaW5nIGB7JyBpbiBgJXMnIgorI34gbXNnc3RyICJgeycgYXIgaWFycmFpZGggaSBgJXMnIgorCisjfiBtc2dpZCAiaW52YWxpZCAkIHZhbHVlIgorI34gbXNnc3RyICJsdWFjaCAkIG5lYW1oYmhhaWzDrSIKKworI34gbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSBgJXMnIGZhaWxlZCAoZXhpdCBzdGF0dXMgJWQpIgorI34gbXNnc3RyICJ0aGVpcCBhciBhbiBmaG9jaGzDoXIgYCVzJyAoc3TDoWRhcyBzY29ydGhhICVkKSIKKworI34gbXNnaWQgImNvbmZsaWN0aW5nIHByZWNlZGVuY2VzIGZvciAlcyBhbmQgJXMiCisjfiBtc2dzdHIgInRvc2HDrW9jaHRhw60gY29udHLDoXJ0aGEgaWRpciAlcyBhZ3VzICVzIgorCisjfiBtc2dpZCAiY29uZmxpY3RpbmcgYXNzb2NpYXRpdml0aWVzIGZvciAlcyAoJXMpIGFuZCAlcyAoJXMpIgorI34gbXNnc3RyICJjb21odGhpb21zYWl0aGVhY2h0IGNob250csOhcnRoYSBpZGlyICVzICglcykgYWd1cyAlcyAoJXMpIgpkaWZmIC0tZ2l0IGEvcG8vaHIuZ21vIGIvcG8vaHIuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZDFjMWMKLS0tIC9kZXYvbnVsbAorKysgYi9wby9oci5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vaHIucG8gYi9wby9oci5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2YxNjIxCi0tLSAvZGV2L251bGwKKysrIGIvcG8vaHIucG8KQEAgLTAsMCArMSwxNDgxIEBACisjIFRyYW5zbGF0aW9uIG9mIGJpc29uIHRvIENyb2F0aWFuLgorIyBDb3B5cmlnaHQgwqkgMjAwMiwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGJpc29uIHBhY2thZ2UuCisjIERlbmlzIExhY2tvdmljIDxkZWxhY2tvQGZseS5zcmsuZmVyLmhyPiwgMjAwMi4KKyMgVG9taXNsYXYgS3J6bmFyIDx0b21pc2xhdi5rcnpuYXJAZ21haWwuY29tPiwgMjAxMi4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGJpc29uIDIuNi41XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTItMTEtMDkgMTY6NTIrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogVG9taXNsYXYgS3J6bmFyIDx0b21pc2xhdi5rcnpuYXJAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IENyb2F0aWFuIDxsb2thbGl6YWNpamFAbGludXguaHI+XG4iCisiTGFuZ3VhZ2U6IGhyXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0zOyBwbHVyYWw9KG4lMTA9PTEgJiYgbiUxMDAhPTExID8gMCA6IG4lMTA+PTIgJiYgbiIKKyIlMTA8PTQgJiYgKG4lMTAwPDEwIHx8IG4lMTAwPj0yMCkgPyAxIDogMik7XG4iCisiWC1HZW5lcmF0b3I6IExva2FsaXplIDEuNFxuIgorCisjOiBzcmMvY29tcGxhaW4uYzoxMjAgc3JjL2NvbXBsYWluLmM6MTMxIHNyYy9jb21wbGFpbi5jOjE0MCBzcmMvY29tcGxhaW4uYzoxODgKKyM6IHNyYy9jb21wbGFpbi5jOjE5OAorbXNnaWQgIndhcm5pbmciCittc2dzdHIgInVwb3pvcmVuamUiCisKKyM6IHNyYy9jb21wbGFpbi5jOjE1MSBzcmMvY29tcGxhaW4uYzoxNjAgc3JjL2NvbXBsYWluLmM6MTY3CisjLCBmdXp6eQorbXNnaWQgImVycm9yIgorbXNnc3RyICJVL0kgZ3JlxaFrYSIKKworIzogc3JjL2NvbXBsYWluLmM6MjA4IHNyYy9jb21wbGFpbi5jOjIxNQorbXNnaWQgImZhdGFsIGVycm9yIgorbXNnc3RyICJmYXRhbG5hIGdyZcWha2EiCisKKyM6IHNyYy9jb25mbGljdHMuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyBzaGlmdCIKK21zZ3N0ciAiICAgIEtvbmZsaWt0IGl6bWXEkXUgcHJhdmlsYSAlZCBpIHNpbWJvbGEgJXMgcmF6cmlqZcWhZW4ga2FvIHBvbWFrIgorCisjOiBzcmMvY29uZmxpY3RzLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgcmVkdWNlIgorbXNnc3RyICIgICAgS29uZmxpa3QgaXptZcSRdSBwcmF2aWxhICVkIGkgc2ltYm9sYSAlcyByYXpyaWplxaFlbiBrYW8gcmVkdWtjaWphIgorCisjOiBzcmMvY29uZmxpY3RzLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgYW4gZXJyb3IiCittc2dzdHIgIiAgICBLb25mbGlrdCBpem1lxJF1IHByYXZpbGEgJWQgaSBzaW1ib2xhICVzIHJhenJpamXFoWVuIGthbyBncmXFoWthIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgc2hpZnQvcmVkdWNlLCAlZCByZWR1Y2UvcmVkdWNlXG4iCittc2dzdHIgImtvbmZsaWt0aTogJWQgcG9tYWtuaS9yZWR1Y2lyYWosICVkIHJlZHVjaXJhai9yZWR1Y2lyYWpcbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdHM6ICVkIHNoaWZ0L3JlZHVjZVxuIgorbXNnc3RyICJrb25mbGlrdGk6ICVkIHBvbWFrbmkvcmVkdWNpcmFqXG4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCByZWR1Y2UvcmVkdWNlXG4iCittc2dzdHIgImtvbmZsaWt0aTogJWQgcmVkdWNpcmFqL3JlZHVjaXJhalxuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YXRlICVkICIKK21zZ3N0ciAiU3RhbmplICVkICIKKworIzogc3JjL2NvbmZsaWN0cy5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICIlJWV4cGVjdC1yciBhcHBsaWVzIG9ubHkgdG8gR0xSIHBhcnNlcnMiCittc2dzdHIgIiUlZXhwZWN0LXJyIHNlIHByaW1qZW5qdWplIHNhbW8gbmEgR0xSIGFuYWxpemF0b3JlIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NjE2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICVkIHNoaWZ0L3JlZHVjZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiZXhwZWN0ZWQgJWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAib8SNZWt1amVtICVkIHBvbWFrbmkvcmVkdWNpcmFqIGtvbmZsaWt0IgorbXNnc3RyWzFdICJvxI1la3VqZW0gJWQgcG9tYWtuaS9yZWR1Y2lyYWoga29uZmxpa3RhIgorbXNnc3RyWzJdICJvxI1la3VqZW0gJWQgcG9tYWtuaS9yZWR1Y2lyYWoga29uZmxpa2F0YSIKKworIzogc3JjL2NvbmZsaWN0cy5jOjYyMQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCAlZCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJleHBlY3RlZCAlZCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAib8SNZWt1amVtICVkIHJlZHVjaXJhai9yZWR1Y2lyYWoga29uZmxpa3QiCittc2dzdHJbMV0gIm/EjWVrdWplbSAlZCByZWR1Y2lyYWovcmVkdWNpcmFqIGtvbmZsaWt0YSIKK21zZ3N0clsyXSAib8SNZWt1amVtICVkIHJlZHVjaXJhai9yZWR1Y2lyYWoga29uZmxpa2F0YSIKKworIzogc3JjL2ZpbGVzLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3Qgb3BlbiIKK21zZ3N0ciAiJXM6IG5lIG1vZ3Ugb3R2b3JpdGkiCisKKyM6IHNyYy9maWxlcy5jOjEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnB1dC9vdXRwdXQgZXJyb3IiCittc2dzdHIgInVsYXpuby9pemxhem5hIGdyZcWha2EiCisKKyM6IHNyYy9maWxlcy5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2UgZmlsZSIKK21zZ3N0ciAibmUgbW9ndSB6YXR2b3JpdGkgZGF0b3Rla3UiCisKKyM6IHNyYy9maWxlcy5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBvdmVyd3JpdGUgdGhlIGlucHV0IGZpbGUgJXMiCittc2dzdHIgIm9kYmlqYW0gcGlzYXRpIHByZWtvIHVsYXpuZSBkYXRvdGVrZSAlcyIKKworIzogc3JjL2ZpbGVzLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0aW5nIG91dHB1dHMgdG8gZmlsZSAlcyIKK21zZ3N0ciAia29uZmxpa3RuaSBpemxhemkgdSBkYXRvdGVrdSAlcyIKKworIzogc3JjL2dldGFyZ3MuYzoyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5IGAlcyAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIgorbXNnc3RyICJQb2t1xaFhanRlIOKAniVzIC0taGVscOKAnSB6YSB2acWhZSBpbmZvcm1hY2lqYS5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFtPUFRJT05dLi4uIEZJTEVcbiIKK21zZ3N0ciAiVXBvcmFiYTogJXMgW09QQ0lKQV0uLi4gREFUT1RFS0FcbiIKKworIzogc3JjL2dldGFyZ3MuYzozMDIKK21zZ2lkICIiCisiR2VuZXJhdGUgYSBkZXRlcm1pbmlzdGljIExSIG9yIGdlbmVyYWxpemVkIExSIChHTFIpIHBhcnNlciBlbXBsb3lpbmdcbiIKKyJMQUxSKDEpLCBJRUxSKDEpLCBvciBjYW5vbmljYWwgTFIoMSkgcGFyc2VyIHRhYmxlcy4gIElFTFIoMSkgYW5kXG4iCisiY2Fub25pY2FsIExSKDEpIHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsLlxuIgorIlxuIgorbXNnc3RyICIiCisiU3R2b3JpIGRldGVybWluaXN0acSNa2kgTFIgaWxpIG9wxIdlbml0aSBMUiAoR0xSKSBhbmFsaXphdG9yIGtvamlcbiIKKyJrb3Jpc3RpIExBTFIoMSksIElFTFIoMSkgaWxpIGthbm9uc2tlIExSKDEpIHRhYmxpY2UgYW5hbGl6ZS5cbiIKKyJQb2RyxaFrYSB6YSBJRUxSKDEpIGkga2Fub25za2kgTFIoMSkgamUgZWtzcGVyaW1lbnRhbG5hLlxuIgorIlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwOQorbXNnaWQgIiIKKyJNYW5kYXRvcnkgYXJndW1lbnRzIHRvIGxvbmcgb3B0aW9ucyBhcmUgbWFuZGF0b3J5IGZvciBzaG9ydCBvcHRpb25zIHRvby5cbiIKK21zZ3N0ciAiIgorIk9iYXZlem5pIGFyZ3VtZW50aSBkdWdhxI1raWggb3BjaWphIHRha2/EkWVyIHN1IG9iYXZlem5pIHphIGtyYXRrZSBvcGNpamUuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzEyCittc2dpZCAiVGhlIHNhbWUgaXMgdHJ1ZSBmb3Igb3B0aW9uYWwgYXJndW1lbnRzLlxuIgorbXNnc3RyICJJc3RvIHZyaWplZGkgaSB6YSBvcGNpb25hbG5lIGFyZ3VtZW50ZS5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozMTYKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIk9wZXJhdGlvbiBtb2RlczpcbiIKKyIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCisiICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorIiAgICAgIC0tcHJpbnQtbG9jYWxlZGlyICAgICAgb3V0cHV0IGRpcmVjdG9yeSBjb250YWluaW5nIGxvY2FsZS1kZXBlbmRlbnQgIgorImRhdGFcbiIKKyIgICAgICAtLXByaW50LWRhdGFkaXIgICAgICAgIG91dHB1dCBkaXJlY3RvcnkgY29udGFpbmluZyBza2VsZXRvbnMgYW5kIFhTTFRcbiIKKyIgIC15LCAtLXlhY2MgICAgICAgICAgICAgICAgIGVtdWxhdGUgUE9TSVggWWFjY1xuIgorIiAgLVcsIC0td2FybmluZ3NbPUNBVEVHT1JZXSAgcmVwb3J0IHRoZSB3YXJuaW5ncyBmYWxsaW5nIGluIENBVEVHT1JZXG4iCisiICAtZiwgLS1mZWF0dXJlWz1GRUFUVVJFXSAgICBhY3RpdmF0ZSBtaXNjZWxsYW5lb3VzIGZlYXR1cmVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJOYcSNaW5pIHJhZGE6XG4iCisiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICBwcmlrYcW+aSBvdnUgcG9tb8SHIGkgaXphxJFpXG4iCisiICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICBpc3BpxaFpIGluZm9ybWFjaWplIG8gaW5hxI1pY2kgaSBpemHEkWlcbiIKKyIgICAgICAtLXByaW50LWxvY2FsZWRpciAgICAgIGlzcGnFoWkgZGlyZWt0b3JpaiBzIHBvZGFjaW1hIG92aXNuaW1hIG8gbG9rYWx1XG4iCisiICAgICAgLS1wcmludC1kYXRhZGlyICAgICAgICBpc3BpxaFpIGRpcmVrdG9yaWogcyBwcmVkbG/FoWNpbWEgaSBYU0xULW9tXG4iCisiICAteSwgLS15YWNjICAgICAgICAgICAgICAgICBlbXVsaXJhaiBQT1NJWCBZYWNjXG4iCisiICAtVywgLS13YXJuaW5nc1s9S0FURUdPUklKQV0gIHByaWphdmkgdXBvem9yZW5qYSBpeiBLQVRFR09SSUpFXG4iCisiXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFyc2VyOlxuIgorIiAgLUwsIC0tbGFuZ3VhZ2U9TEFOR1VBR0UgICAgICAgICAgc3BlY2lmeSB0aGUgb3V0cHV0IHByb2dyYW1taW5nIGxhbmd1YWdlXG4iCisiICAtUywgLS1za2VsZXRvbj1GSUxFICAgICAgICAgICAgICBzcGVjaWZ5IHRoZSBza2VsZXRvbiB0byB1c2VcbiIKKyIgIC10LCAtLWRlYnVnICAgICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnQgdGhlIHBhcnNlciBmb3IgZGVidWdnaW5nXG4iCisiICAgICAgLS1sb2NhdGlvbnMgICAgICAgICAgICAgICAgICBlbmFibGUgbG9jYXRpb24gc3VwcG9ydFxuIgorIiAgLUQsIC0tZGVmaW5lPU5BTUVbPVZBTFVFXSAgICAgICAgc2ltaWxhciB0byAnJWRlZmluZSBOQU1FIFwiVkFMVUVcIidcbiIKKyIgIC1GLCAtLWZvcmNlLWRlZmluZT1OQU1FWz1WQUxVRV0gIG92ZXJyaWRlICclZGVmaW5lIE5BTUUgXCJWQUxVRVwiJ1xuIgorIiAgLXAsIC0tbmFtZS1wcmVmaXg9UFJFRklYICAgICAgICAgcHJlcGVuZCBQUkVGSVggdG8gdGhlIGV4dGVybmFsIHN5bWJvbHNcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQgYnkgJy1EYXBpLnByZWZpeD1QUkVGSVgnXG4iCisiICAtbCwgLS1uby1saW5lcyAgICAgICAgICAgICAgICAgICBkb24ndCBnZW5lcmF0ZSAnI2xpbmUnIGRpcmVjdGl2ZXNcbiIKKyIgIC1rLCAtLXRva2VuLXRhYmxlICAgICAgICAgICAgICAgIGluY2x1ZGUgYSB0YWJsZSBvZiB0b2tlbiBuYW1lc1xuIgorbXNnc3RyICIiCisiUGFyc2VyOlxuIgorIiAgLUwsIC0tbGFuZ3VhZ2U9SkVaSUsgICAgICAgICAgICAgbmF2ZWRpIGl6bGF6bmkgcHJvZ3JhbXNraSBqZXppa1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG92byBqZSBla3NwZXJpbWVudGFsbmEgbW9ndcSHbm9zdClcbiIKKyIgIC1TLCAtLXNrZWxldG9uPURBVE9URUtBICAgICAgICAgIG5hdmVkaSBwcmVkbG/FvmFrIHphIGtvcmnFoXRlbmplXG4iCisiICAtdCwgLS1kZWJ1ZyAgICAgICAgICAgICAgICAgICAgICBwcmlwcmVtaSBhbmFsaXphdG9yIHphIGlzcHJhdmxqYW5qZSAiCisiZ3JlxaFha2FcbiIKKyIgICAgICAtLWxvY2F0aW9ucyAgICAgICAgICAgICAgICAgIG9tb2d1xIdpIHBvZHLFoWt1IHphIGxva2FjaWplXG4iCisiICAtRCwgLS1kZWZpbmU9SU1FWz1WUklKRUROT1NUXSAgICBzbGnEjW5vIGthbyDigJ4lZGVmaW5lIElNRSBcIlZSSUpFRE5PU1RcIuKAnVxuIgorIiAgLUYsIC0tZm9yY2UtZGVmaW5lPUlNRVs9VlJJSkVETk9TVF0gIHByb21pamVuaSDigJ4lZGVmaW5lIElNRSBcIlZSSUpFRE5PU1QiCisiXCLigJ1cbiIKKyIgIC1wLCAtLW5hbWUtcHJlZml4PVBSRUZJS1MgICAgICAgIGRvZGFqIFBSRUZJS1MgaXNwcmVkIHZhbmpza2loIHNpbWJvbGFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHphc3RhcmplbG8gemJvZyDigJ4tRGFwaS5wcmVmaXg9UFJFRklLU+KAnVxuIgorIiAgLWwsIC0tbm8tbGluZXMgICAgICAgICAgICAgICAgICAgbmUgc3R2YXJhaiDigJ4jbGluZeKAnSBwcm9waXNlXG4iCisiICAtaywgLS10b2tlbi10YWJsZSAgICAgICAgICAgICAgICB1a2xqdcSNaSB0YWJsaWN1IGltZW5hIHNpbWJvbGFcbiIKKyJcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNDYKKyMsIGZ1enp5Cittc2dpZCAiIgorIk91dHB1dDpcbiIKKyIgICAgICAtLWRlZmluZXNbPUZJTEVdICAgICAgIGFsc28gcHJvZHVjZSBhIGhlYWRlciBmaWxlXG4iCisiICAtZCAgICAgICAgICAgICAgICAgICAgICAgICBsaWtld2lzZSBidXQgY2Fubm90IHNwZWNpZnkgRklMRSAoZm9yIFBPU0lYICIKKyJZYWNjKVxuIgorIiAgLXIsIC0tcmVwb3J0PVRISU5HUyAgICAgICAgYWxzbyBwcm9kdWNlIGRldGFpbHMgb24gdGhlIGF1dG9tYXRvblxuIgorIiAgICAgIC0tcmVwb3J0LWZpbGU9RklMRSAgICAgd3JpdGUgcmVwb3J0IHRvIEZJTEVcbiIKKyIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIHNhbWUgYXMgYC0tcmVwb3J0PXN0YXRlJ1xuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg9UFJFRklYICAgc3BlY2lmeSBhIFBSRUZJWCBmb3Igb3V0cHV0IGZpbGVzXG4iCisiICAtbywgLS1vdXRwdXQ9RklMRSAgICAgICAgICBsZWF2ZSBvdXRwdXQgdG8gRklMRVxuIgorIiAgLWcsIC0tZ3JhcGhbPUZJTEVdICAgICAgICAgYWxzbyBvdXRwdXQgYSBncmFwaCBvZiB0aGUgYXV0b21hdG9uXG4iCisiICAteCwgLS14bWxbPUZJTEVdICAgICAgICAgICBhbHNvIG91dHB1dCBhbiBYTUwgcmVwb3J0IG9mIHRoZSBhdXRvbWF0b25cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGUgWE1MIHNjaGVtYSBpcyBleHBlcmltZW50YWwpXG4iCittc2dzdHIgIiIKKyJJemxhejpcbiIKKyIgICAgICAtLWRlZmluZXNbPURBVE9URUtBXSAgIHRha2/EkWVyIG5hcHJhdmkgZGF0b3Rla3UgemFnbGF2bGphXG4iCisiICAtZCAgICAgICAgICAgICAgICAgICAgICAgICBpc3RvLCBiZXogbmF2b8SRZW5qYSBkYXRvdGVrZSAoemEgUE9TSVggWWFjYylcbiIKKyIgIC1yLCAtLXJlcG9ydD1TVFZBUkkgICAgICAgIHRha2/EkWVyIG5hcHJhdmkgcG9qZWRpbm9zdGkgbyBhdXRvbWF0aW1hXG4iCisiICAgICAgLS1yZXBvcnQtZmlsZT1EQVRPVEVLQSBzcHJlbWkgaXp2amXFoXRhaiB1IERBVE9URUtVXG4iCisiICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgICBpc3RvIGthbyDigJ4tLXJlcG9ydD1zdGF0ZeKAnVxuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg9UFJFRklLUyAgbmF2ZWRpIFBSRUZJS1MgemEgaXpsYXpuZSBkYXRvdGVrZVxuIgorIiAgLW8sIC0tb3V0cHV0PURBVE9URUtBICAgICAgc3ByZW1pIGl6bGF6IHUgREFUT1RFS1VcbiIKKyIgIC1nLCAtLWdyYXBoWz1EQVRPVEVLQV0gICAgIHRha2/EkWVyIGlzcGnFoWkgZ3JhZiBhdXRvbWF0YVxuIgorIiAgLXgsIC0teG1sWz1EQVRPVEVLQV0gICAgICAgdGFrb8SRZXIgaXNwacWhaSBYTUwgaXp2amXFoXRhaiBvIGF1dG9tYXR1XG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWE1MIHNoZW1hIGplIGVrc3BlcmltZW50YWxuYSlcbiIKKyJcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNjEKKyMsIGZ1enp5Cittc2dpZCAiIgorIldhcm5pbmcgY2F0ZWdvcmllcyBpbmNsdWRlOlxuIgorIiAgYG1pZHJ1bGUtdmFsdWVzJyAgdW5zZXQgb3IgdW51c2VkIG1pZHJ1bGUgdmFsdWVzXG4iCisiICBgeWFjYycgICAgICAgICAgICBpbmNvbXBhdGliaWxpdGllcyB3aXRoIFBPU0lYIFlhY2NcbiIKKyIgIGBjb25mbGljdHMtc3InICAgIFMvUiBjb25mbGljdHMgKGVuYWJsZWQgYnkgZGVmYXVsdClcbiIKKyIgIGBjb25mbGljdHMtcnInICAgIFIvUiBjb25mbGljdHMgKGVuYWJsZWQgYnkgZGVmYXVsdClcbiIKKyIgIGBkZXByZWNhdGVkJyAgICAgIG9ic29sZXRlIGNvbnN0cnVjdHNcbiIKKyIgIGBvdGhlcicgICAgICAgICAgIGFsbCBvdGhlciB3YXJuaW5ncyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGFsbCcgICAgICAgICAgICAgYWxsIHRoZSB3YXJuaW5nc1xuIgorIiAgYG5vLUNBVEVHT1JZJyAgICAgdHVybiBvZmYgd2FybmluZ3MgaW4gQ0FURUdPUllcbiIKKyIgIGBub25lJyAgICAgICAgICAgIHR1cm4gb2ZmIGFsbCB0aGUgd2FybmluZ3NcbiIKKyIgIGBlcnJvcicgICAgICAgICAgIHRyZWF0IHdhcm5pbmdzIGFzIGVycm9yc1xuIgorbXNnc3RyICIiCisiS2F0ZWdvcmlqZSB1cG96b3JlbmphIHVrbGp1xI11anU6XG4iCisiICDigJ5taWRydWxlLXZhbHVlc+KAnSAgbmVwb3N0YXZsamVuZSBpbGkgbmVrb3JpxaF0ZW5lIG1pZHJ1bGUgdnJpamVkbm9zdGlcbiIKKyIgIOKAnnlhY2PigJ0gICAgICAgICAgICBuZWtvbXBhdGliaWxub3N0aSB6YSBQT1NJWCBZYWNjXG4iCisiICDigJ5jb25mbGljdHMtc3LigJ0gICAgUC9SIGtvbmZsaWt0ZSAodW9iacSNYWplbm8gdWtsanXEjWVubylcbiIKKyIgIOKAnmNvbmZsaWN0cy1ycuKAnSAgICBSL1Iga29uZmxpa3RlICh1b2JpxI1hamVubyB1a2xqdcSNZW5vKVxuIgorIiAg4oCeb3RoZXLigJ0gICAgICAgICAgIHN2YSBvc3RhbGEgdXBvem9yZW5qYSAodW9iacSNYWplbm8gdWtsanXEjWVubylcbiIKKyIgIOKAnmFsbOKAnSAgICAgICAgICAgICBzdmEgdXBvem9yZW5qYVxuIgorIiAg4oCebm8tS0FURUdPUklKQeKAnSAgIGlza2xqdcSNaSB1cG96b3JlbmphIGl6IEtBVEVHT1JJSkVcbiIKKyIgIOKAnm5vbmXigJ0gICAgICAgICAgICBpc2tsanXEjWkgc3ZhIHVwb3pvcmVuamFcbiIKKyIgIOKAnmVycm9y4oCdICAgICAgICAgICBwb3N0dXBhaiBzIHVwb3pvcmVuamltYSBrYW8gcyBncmXFoWthbWFcbiIKKyJcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNzYKK21zZ2lkICIiCisiVEhJTkdTIGlzIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMgdGhhdCBjYW4gaW5jbHVkZTpcbiIKKyIgIGBzdGF0ZScgICAgICAgIGRlc2NyaWJlIHRoZSBzdGF0ZXNcbiIKKyIgIGBpdGVtc2V0JyAgICAgIGNvbXBsZXRlIHRoZSBjb3JlIGl0ZW0gc2V0cyB3aXRoIHRoZWlyIGNsb3N1cmVcbiIKKyIgIGBsb29rYWhlYWQnICAgIGV4cGxpY2l0bHkgYXNzb2NpYXRlIGxvb2thaGVhZCB0b2tlbnMgdG8gaXRlbXNcbiIKKyIgIGBzb2x2ZWQnICAgICAgIGRlc2NyaWJlIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMgc29sdmluZ1xuIgorIiAgYGFsbCcgICAgICAgICAgaW5jbHVkZSBhbGwgdGhlIGFib3ZlIGluZm9ybWF0aW9uXG4iCisiICBgbm9uZScgICAgICAgICBkaXNhYmxlIHRoZSByZXBvcnRcbiIKK21zZ3N0ciAiIgorIlNUVkFSSSBzdSByaWplxI1pIG9kdm9qZW5lIHphcmV6b20ga29qZSBtb2d1IGJpdGk6XG4iCisiICDigJ5zdGF0ZeKAnSAgICAgICAgb3BpxaFpIHN0YW5qYVxuIgorIiAg4oCeaXRlbXNldOKAnSAgICAgIGRvdnLFoWkgb3Nub3ZuZSBza3Vwb3ZlIHByZWRtZXRhIHMgbmppaG92aW0gemFrbGp1xI1lbmplbVxuIgorIiAg4oCebG9va2FoZWFk4oCdICAgIGVrc3BsaWNpdG5vIGRvZGlqZWxpIOKAnmxvb2thaGVhZOKAnSBzaW1ib2xlIHByZWRtZXRpbWFcbiIKKyIgIOKAnnNvbHZlZOKAnSAgICAgICBvcGnFoWkgcmplxaFhdmFuamUgcG9tYWtuaS9yZWR1Y2lyYWoga29uZmxpa2F0YVxuIgorIiAg4oCeYWxs4oCdICAgICAgICAgIHVrbGp1xI1pIHN2ZSBnb3JlIG5hdmVkZW5lIGluZm9ybWFjaWplXG4iCisiICDigJ5ub25l4oCdICAgICAgICAgb25lbW9ndcSHaSBpenZqZcWhdGFqXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzg3Cittc2dpZCAiIgorIkZFQVRVUkUgaXMgYSBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCB3b3JkcyB0aGF0IGNhbiBpbmNsdWRlOlxuIgorIiAgYGNhcmV0JyAgICAgICAgc2hvdyBlcnJvcnMgd2l0aCBjYXJldHNcbiIKKyIgIGBhbGwnICAgICAgICAgIGFsbCBvZiB0aGUgYWJvdmVcbiIKKyIgIGBub25lJyAgICAgICAgIGRpc2FibGUgYWxsIG9mIHRoZSBhYm92ZVxuIgorIiAgIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlcG9ydCBidWdzIHRvIDwlcz4uXG4iCittc2dzdHIgIlByaWphdml0ZSBncmXFoWtlIG5hIDwlcz4uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhvbWUgcGFnZTogPCVzPi5cbiIKK21zZ3N0ciAiJXMgcG/EjWV0bmEgc3RyYW5pY2E6IDwlcz4uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk3Cittc2dpZCAiR2VuZXJhbCBoZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4uXG4iCittc2dzdHIgIiIKKyJPcMSHZW5pdGEgcG9tb8SHIHphIGtvcmnFoXRlbmplIEdOVSBzb2Z0dmVyYTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4uXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBSZXBsYWNlIExBTkdfQ09ERSBpbiB0aGlzIFVSTCB3aXRoIHlvdXIgbGFuZ3VhZ2UKKyMuIGNvZGUgPGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vTEFOR19DT0RFLmh0bWw+IHRvCisjLiBmb3JtIG9uZSBvZiB0aGUgVVJMcyBhdCBodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtLy4KKyMuIE90aGVyd2lzZSwgcmVwbGFjZSB0aGUgZW50aXJlIFVSTCB3aXRoIHlvdXIgdHJhbnNsYXRpb24gdGVhbSdzCisjLiBlbWFpbCBhZGRyZXNzLgorIzogc3JjL2dldGFyZ3MuYzo0MTAKK21zZ2lkICJSZXBvcnQgdHJhbnNsYXRpb24gYnVncyB0byA8aHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS8+LlxuIgorbXNnc3RyICIiCisiUHJpamF2aXRlIGdyZcWha2UgcHJpamV2b2RhIG5hIDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtL2hyLmh0bWw+LlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQxMgorbXNnaWQgIkZvciBjb21wbGV0ZSBkb2N1bWVudGF0aW9uLCBydW46IGluZm8gYmlzb24uXG4iCittc2dzdHIgIlphIHByaWtheiBjamVsb2t1cG5lIGRva3VtZW50YWNpamUgcG9rcmVuaXRlIOKAnmluZm8gYmlzb27igJ0uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImJpc29uIChHTlUgQmlzb24pICVzIgorbXNnc3RyICJiaXNvbiAoR05VIEJpc29uKSAlcyIKKworIzogc3JjL2dldGFyZ3MuYzo0MzAKK21zZ2lkICJXcml0dGVuIGJ5IFJvYmVydCBDb3JiZXR0IGFuZCBSaWNoYXJkIFN0YWxsbWFuLlxuIgorbXNnc3RyICJOYXBpc2FsaSBSb2JlcnQgQ29yYmV0dCBpIFJpY2hhcmQgU3RhbGxtYW4uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcHlyaWdodCAoQykgJWQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCittc2dzdHIgIkNvcHlyaWdodCDCqSAlZCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MzcKK21zZ2lkICIiCisiVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk9cbiIKKyJ3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cbiIKK21zZ3N0ciAiIgorIk92byBqZSBzbG9ib2RhbiBzb2Z0dmVyLCBwb2dsZWRhanRlIGtvZCB6YSB1cHV0ZSBvIGtvcGlyYW5qdS4gTkVNQSAiCisiamFtc3RhdmEsXG4iCisixI1hayBuaSB6YSBUUkdPVklOU0tVIFBSSUtMQUROT1NUIGlsaSBPREdPVkFSQU5KRSBPRFJFxJBFTk9KIFNWUlNJLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSBza2VsZXRvbiBkZWNsYXJhdGlvbnMgYXJlIGludmFsaWQiCittc2dzdHIgInZpxaFlc3RydWtlIGRla2xhcmFjaWplIHByZWRsb8Wha2EgbmlzdSBpc3ByYXZuZSIKKworIzogc3JjL2dldGFyZ3MuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgbGFuZ3VhZ2UiCittc2dzdHIgIiVzOiBuZWlzcHJhdmFuIGplemlrIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ3OQorbXNnaWQgIm11bHRpcGxlIGxhbmd1YWdlIGRlY2xhcmF0aW9ucyBhcmUgaW52YWxpZCIKK21zZ3N0ciAidmnFoWVzdHJ1a2UgZGVrbGFyYWNpamUgamV6aWthIG5pc3UgaXNwcmF2bmUiCisKKyM6IHNyYy9nZXRhcmdzLmM6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBtaXNzaW5nIG9wZXJhbmQiCittc2dzdHIgIiVzOiBuZWRvc3RhamUgb3BlcmFuZCIKKworIzogc3JjL2dldGFyZ3MuYzo3NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0cmEgb3BlcmFuZCAlcyIKK21zZ3N0ciAib3BlcmFuZCB2acWha2EgJXMiCisKKyM6IHNyYy9ncmFtLmM6MTEyCittc2dpZCAiZW1wdHkiCittc2dzdHIgInByYXpubyIKKworIzogc3JjL2dyYW0uYzoyMDEKK21zZ2lkICJHcmFtbWFyIgorbXNnc3RyICJHcmFtYXRpa2EiCisKKyM6IHNyYy9ncmFwaHZpei5jOjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIvLyBHZW5lcmF0ZWQgYnkgJXMuXG4iCisiLy8gUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKKyIvLyBIb21lIHBhZ2U6IDwlcz4uXG4iCisiXG4iCittc2dzdHIgIiIKKyIvLyBOYXByYXZpbyAlcy5cbiIKKyIvLyBQcmlqYXZpdGUgZ3JlxaFrZSBuYSA8JXM+LlxuIgorIi8vIFBvxI1ldG5hIHN0cmFuaWNhOiA8JXM+LlxuIgorIlxuIgorCisjOiBzcmMvbG9jYXRpb24uYzo5MyBzcmMvc2Nhbi1ncmFtLmw6ODU5CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgbnVtYmVyIG92ZXJmbG93IgorbXNnc3RyICJwcmVsamV2IGJyb2phIHJlZGFrYSIKKworIzogc3JjL2xvY2F0aW9uLmM6OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29sdW1uIG51bWJlciBvdmVyZmxvdyIKK21zZ3N0ciAicHJlbGpldiBicm9qYSBzdHVwYWNhIgorCisjOiBzcmMvbWFpbi5jOjE0NgorbXNnaWQgInJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cyIKK21zZ3N0ciAicHJhdmlsbyBiZXNrb3Jpc25vIHUgYW5hbGl6YXRvcnUgemJvZyBrb25mbGlrYXRhIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlJWRlZmluZSB2YXJpYWJsZSAlcyByZWRlZmluZWQiCittc2dzdHIgIiUlZGVmaW5lIHZhcmlqYWJsYSAlcyBqZSBwb25vdm8gZGVmaW5pcmFuYSIKKworIzogc3JjL211c2NsZS10YWIuYzo0NTMKK21zZ2lkICJwcmV2aW91cyBkZWZpbml0aW9uIgorbXNnc3RyICJwcmV0aG9kbmEgZGVmaW5pY2lqYSIKKworIzogc3JjL211c2NsZS10YWIuYzo0OTAgc3JjL211c2NsZS10YWIuYzo1MDQgc3JjL211c2NsZS10YWIuYzo1NTYKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgJXMiCittc2dzdHIgIiVzOiBuZWRlZmluaXJhbmEgJSVkZWZpbmUgdmFyaWphYmxhICVzIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlJWRlZmluZSBCb29sZWFuIHZhcmlhYmxlICVzIgorbXNnc3RyICJuZWlzcHJhdm5hIHZyaWplZG5vc3QgJSVkZWZpbmUgbG9nacSNa2UgdmFyaWphYmxlICVzIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjYwOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlJWRlZmluZSB2YXJpYWJsZSAlczogJXMiCittc2dzdHIgIm5laXNwcmF2bmEgdnJpamVkbm9zdCAlJWRlZmluZSB2YXJpamFibGUgJXM6ICVzIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjYxMworIywgYy1mb3JtYXQKK21zZ2lkICJhY2NlcHRlZCB2YWx1ZTogJXMiCittc2dzdHIgInByaWh2YcSHZW5hIHZyaWplZG5vc3Q6ICVzIgorCisjOiBzcmMvcGFyc2UtZ3JhbS55Ojc0NworIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGlkZW50aWZpZXIgaW4gcGFyYW1ldGVyIGRlY2xhcmF0aW9uIgorbXNnc3RyICJuZWRvc3RhamUgaWRlbnRpZmlrYXRvciB1IGRla2xhcmFjaWppIHBhcmVtZXRyYSIKKworIzogc3JjL3ByaW50LmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIHR5cGUgJWQgaXMgJXNcbiIKK21zZ3N0ciAiIHZyc3RhICVkIGplICVzXG4iCisKKyM6IHNyYy9wcmludC5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICJzaGlmdCwgYW5kIGdvIHRvIHN0YXRlICVkXG4iCittc2dzdHIgInBvbWFrbmkgaSBpZGkgdSBzdGFuamUgJWRcbiIKKworIzogc3JjL3ByaW50LmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImdvIHRvIHN0YXRlICVkXG4iCittc2dzdHIgImlkaSB1IHN0YW5qZSAlZFxuIgorCisjOiBzcmMvcHJpbnQuYzoyMDMKK21zZ2lkICJlcnJvciAobm9uYXNzb2NpYXRpdmUpXG4iCittc2dzdHIgImdyZcWha2EgKG5lYXNvY2lqYXRpdm5hKVxuIgorCisjOiBzcmMvcHJpbnQuYzoyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkdWNlIHVzaW5nIHJ1bGUgJWQgKCVzKSIKK21zZ3N0ciAicmVkdWNpcmFqIGtvcmlzdGXEh2kgcHJhdmlsbyAlZCAoJXMpIgorCisjOiBzcmMvcHJpbnQuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWNjZXB0IgorbXNnc3RyICJwcmlodmF0aSIKKworIzogc3JjL3ByaW50LmM6MjY0IHNyYy9wcmludC5jOjMzOAorbXNnaWQgIiRkZWZhdWx0IgorbXNnc3RyICIkZGVmYXVsdCIKKworIzogc3JjL3ByaW50LmM6MzczIHNyYy9wcmludF9ncmFwaC5jOjc4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTdGF0ZSAlZCIKK21zZ3N0ciAiU3RhbmplICVkICIKKworIzogc3JjL3ByaW50LmM6NDA5Cittc2dpZCAiVGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyIgorbXNnc3RyICJaYXZyxaFuaSB6bmFrb3ZpLCBzIHByYXZpbGltYSBnZGplIHNlIHBvamF2bGp1anUiCisKKyM6IHNyYy9wcmludC5jOjQzNgorbXNnaWQgIk5vbnRlcm1pbmFscywgd2l0aCBydWxlcyB3aGVyZSB0aGV5IGFwcGVhciIKK21zZ3N0ciAiTmV6YXZyxaFuaSB6bmFrb3ZpLCBzIHByYXZpbGltYSBnZGplIHNlIHBvamF2bGp1anUiCisKKyM6IHNyYy9wcmludC5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICIgb24gbGVmdDoiCittc2dzdHIgIiBzIGxpamV2YToiCisKKyM6IHNyYy9wcmludC5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgb24gcmlnaHQ6IgorbXNnc3RyICIgcyBkZXNuYToiCisKKyM6IHNyYy9wcmludC5jOjUxMAorbXNnaWQgIlJ1bGVzIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHMiCittc2dzdHIgIlByYXZpbGEgc3UgYmVza29yaXNuYSB1IGFuYWxpemF0b3J1IHpib2cga29uZmxpa2F0YSIKKworIzogc3JjL3JlYWRlci5jOjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlICVzIGRlY2xhcmF0aW9ucyIKK21zZ3N0ciAidmnFoWVzdHJ1a2UgJXMgZGVrbGFyYWNpamUiCisKKyM6IHNyYy9yZWFkZXIuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVzdWx0IHR5cGUgY2xhc2ggb24gbWVyZ2UgZnVuY3Rpb24gJXM6IDwlcz4gIT0gPCVzPiIKK21zZ3N0ciAic3Vrb2IgcmV6dWx0YW50bmUgdnJzdGUgdSBmdW5rY2lqaSBzcGFqYW5qYSAlczogPCVzPiAhPSA8JXM+IgorCisjOiBzcmMvcmVhZGVyLmM6MTM5IHNyYy9zeW10YWIuYzoxNTYgc3JjL3N5bXRhYi5jOjE2NiBzcmMvc3ltdGFiLmM6OTM4CisjOiBzcmMvc3ltdGFiLmM6OTUzIHNyYy9zeW10YWIuYzo5Njggc3JjL3N5bXRhYi5jOjk4MworbXNnaWQgInByZXZpb3VzIGRlY2xhcmF0aW9uIgorbXNnc3RyICJwcmV0aG9kbmEgZGVrbGFyYWNpamEiCisKKyM6IHNyYy9yZWFkZXIuYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlZCBzeW1ib2wgbmFtZSBmb3IgJXMgaWdub3JlZCIKK21zZ3N0ciAiZHZvc3RydWtvIGltZSBzaW1ib2xhIHphICVzIGplIHphbmVtYXJlbm8iCisKKyM6IHNyYy9yZWFkZXIuYzoyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVsZSBnaXZlbiBmb3IgJXMsIHdoaWNoIGlzIGEgdG9rZW4iCittc2dzdHIgIm5hdmVkZW5vIGplIHByYXZpbG8gemEgJXMsIGEgdG8gamUgc2ltYm9sIgorCisjOiBzcmMvcmVhZGVyLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgInR5cGUgY2xhc2ggb24gZGVmYXVsdCBhY3Rpb246IDwlcz4gIT0gPCVzPiIKK21zZ3N0ciAic3Vrb2IgdnJzdGEgdSB6YWRhbm9qIHJhZG5qaTogPCVzPiAhPSA8JXM+IgorCisjOiBzcmMvcmVhZGVyLmM6MzEwCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IHJ1bGUgZm9yIHR5cGVkIG5vbnRlcm1pbmFsLCBhbmQgbm8gYWN0aW9uIgorbXNnc3RyICJwcmF6bm8gcHJhdmlsbyB6YSBuZXphdnLFoW5pIHpuYWsgaSBuZW1hIHJhZG5qZSIKKworIzogc3JjL3JlYWRlci5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnVzZWQgdmFsdWU6ICQlZCIKK21zZ3N0ciAibmVrb3JpxaF0ZW5hIHZyaWplZG5vc3Q6ICQlZCIKKworIzogc3JjL3JlYWRlci5jOjMzMAorbXNnaWQgInVuc2V0IHZhbHVlOiAkJCIKK21zZ3N0ciAibmVwb3N0YXZsamVuYSB2cmlqZWRub3N0OiAkJCIKKworIzogc3JjL3JlYWRlci5jOjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b2tlbiBmb3IgJSVwcmVjIGlzIG5vdCBkZWZpbmVkOiAlcyIKK21zZ3N0ciAic2ltYm9sIHphICUlcHJlYyBuaWplIGRlZmluaXJhbjogJXMiCisKKyM6IHNyYy9yZWFkZXIuYzo0MzEgc3JjL3JlYWRlci5jOjQ0NSBzcmMvcmVhZGVyLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgb25lICVzIGFsbG93ZWQgcGVyIHJ1bGUiCittc2dzdHIgInNhbW8gamUgamVkYW4gJXMgZG96dm9samVuIHBvIHByYXZpbHUiCisKKyM6IHNyYy9yZWFkZXIuYzo0NDEgc3JjL3JlYWRlci5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhZmZlY3RzIG9ubHkgR0xSIHBhcnNlcnMiCittc2dzdHIgIiVzIHV0amXEjWUgc2FtbyBuYSBHTFIgYW5hbGl6YXRvcmUiCisKKyM6IHNyYy9yZWFkZXIuYzo0NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgbXVzdCBiZSBmb2xsb3dlZCBieSBwb3NpdGl2ZSBudW1iZXIiCittc2dzdHIgIm5ha29uICVzIG1vcmEgc2xpamVkaXRpIHBveml0aXZhbiBicm9qIgorCisjOiBzcmMvcmVhZGVyLmM6NTU0CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bGUgaXMgdG9vIGxvbmciCittc2dzdHIgInByYXZpbG8gamUgcHJlZHVnYcSNa28iCisKKyM6IHNyYy9yZWFkZXIuYzo2NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcnVsZXMgaW4gdGhlIGlucHV0IGdyYW1tYXIiCittc2dzdHIgIm5lbWEgcHJhdmlsYSB1IHVsYXpub2ogZ3JhbWF0aWNpIgorCisjOiBzcmMvcmVkdWNlLmM6MjQxCittc2dpZCAicnVsZSB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgInByYXZpbG8gamUgYmVza29yaXNubyB1IGdyYW1hdGljaSIKKworIzogc3JjL3JlZHVjZS5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6ICVzIgorbXNnc3RyICJuZXphdnLFoW5pIHpuYWsgamUgYmVza29yaXN0YW4gdSBncmFtYXRpY2k6ICVzIgorCisjOiBzcmMvcmVkdWNlLmM6MzUwCittc2dpZCAiTm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAiTmV6YXZyxaFuaSB6bmFrb3ZpIGJlc2tvcmlzbmkgdSBncmFtYXRpY2kiCisKKyM6IHNyYy9yZWR1Y2UuYzozNjMKK21zZ2lkICJUZXJtaW5hbHMgdW51c2VkIGluIGdyYW1tYXIiCittc2dzdHIgIlphdnLFoW5pIHpuYWtvdmkgbmVrb3JpxaF0ZW5pIHUgZ3JhbWF0aWNpIgorCisjOiBzcmMvcmVkdWNlLmM6MzcyCittc2dpZCAiUnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyICJQcmF2aWxhIGJlc2tvcmlzbmEgdSBncmFtYXRpY2kiCisKKyM6IHNyYy9yZWR1Y2UuYzozODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnaWRfcGx1cmFsICIlZCBub250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyWzBdICIlZCBuZXphdnLFoW5pIHpuYWsgYmVza29yaXN0YW4gdSBncmFtYXRpY2kiCittc2dzdHJbMV0gIiVkIG5lemF2csWhbmEgem5ha2EgYmVza29yaXNuYSB1IGdyYW1hdGljaSIKK21zZ3N0clsyXSAiJWQgbmV6YXZyxaFuaWggem5ha292YSBiZXNrb3Jpc25paCB1IGdyYW1hdGljaSIKKworIzogc3JjL3JlZHVjZS5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ2lkX3BsdXJhbCAiJWQgcnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyWzBdICIlZCBwcmF2aWxvIGJlc2tvcmlzbm8gdSBncmFtYXRpY2kiCittc2dzdHJbMV0gIiVkIHByYXZpbGEgYmVza29yaXNuYSB1IGdyYW1hdGljaSIKK21zZ3N0clsyXSAiJWQgcHJhdmlsYSBiZXNrb3Jpc25paCB1IGdyYW1hdGljaSIKKworIzogc3JjL3JlZHVjZS5jOjQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydCBzeW1ib2wgJXMgZG9lcyBub3QgZGVyaXZlIGFueSBzZW50ZW5jZSIKK21zZ3N0ciAicG/EjWV0bmkgc2ltYm9sICVzIG5lIGRhamUgbml0aSBqZWRudSByZcSNZW5pY3UiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYXkgJyVzJyIKK21zZ3N0ciAiemFsdXRhbGkg4oCeJXPigJ0iCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyMjkKK21zZ2lkICJhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZSIKK21zZ3N0ciAibW/FvmUgYml0aSBwb3RyZWJuYSDigJ474oCdIG5hIGtyYWp1IGtvZGEgcmFkbmplIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjMyCittc2dpZCAiZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnIgorbXNnc3RyICJidWR1xIdlIGluYcSNaWNlIEJpc29uYSBuZcSHZSBkb2RhdmF0aSDigJ474oCdIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVzZSBvZiBZWUZBSUwsIHdoaWNoIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCIKK21zZ3N0ciAia29yacWhdGVuamUgWVlGQUlMLCDFoXRvIGplIHphc3RhcmplbG8gaSBiaXQgxIdlIHVrbG9uamVubyIKKworIzogc3JjL3NjYW4tY29kZS5sOjQzMSBzcmMvc2Nhbi1jb2RlLmw6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVycyB0bzogJWMlcyBhdCAlcyIKK21zZ3N0ciAib2Rub3NpIHNlIG5hOiAlYyVzIG5hICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBvc3NpYmx5IG1lYW50OiAlYyIKK21zZ3N0ciAidmplcm9qYXRubyB6bmHEjWk6ICVjIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgaGlkaW5nICVjIgorbXNnc3RyICIsIHNrcml2YWp1xIdpICVjIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiBhdCAlcyIKK21zZ3N0ciAiIG5hICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiwgY2Fubm90IGJlIGFjY2Vzc2VkIGZyb20gbWlkLXJ1bGUgYWN0aW9uIGF0ICQlZCIKK21zZ3N0ciAiLCBuZSBtb8W+ZSBtdSBwcmlzdHVwaXRpIG1pZC1ydWxlIHJhZG5qYSBuYSAkJWQiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo1MjEgc3JjL3NjYW4tZ3JhbS5sOjc4MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlZ2VyIG91dCBvZiByYW5nZTogJXMiCittc2dzdHIgImNpamVsaSBicm9qIGl6dmFuIGdyYW5pY2E6ICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAibmVpc3ByYXZuYSByZWZlcmVuY2E6ICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjE5CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciBhZnRlciAnJWMnLCBleHBlY3RpbmcgaW50ZWdlciwgbGV0dGVyLCAnXycsICdbJywgb3IgJyQnIgorbXNnc3RyICIiCisic2ludGFrc25hIGdyZcWha2EgbmFrb24g4oCeJWPigJ0sIG/EjWVrdWplbSBjaWplbGkgYnJvaiwgc2xvdm8sIOKAnl/igJ0sIOKAnlvigJ0gaWxpIOKAniTigJ0iCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uIGJlZm9yZSAkJWQ6ICUuKnMiCittc2dzdHIgInNpbWJvbCBuaWplIHByb25hxJFlbiB1IHByb2l6dm9kbmppIHByaWplICQlZDogJS4qcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYzMworIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246ICUuKnMiCittc2dzdHIgInNpbWJvbCBuaWplIHByb25hxJFlbiB1IHByb2l6dm9kbmppOiAlLipzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc2xlYWRpbmcgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAia3Jpdm8gbmF2b2RlxIdhIHJlZmVyZW5jYTogJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIHJlZmVyZW5jZTogJXMiCittc2dzdHIgInZpxaFlem5hxI1uYSByZWZlcmVuY2E6ICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGxpY2l0IHR5cGUgZ2l2ZW4gaW4gdW50eXBlZCBncmFtbWFyIgorbXNnc3RyICJuYXZlZGVuYSBla3NwbGljaXRuYSB2cnN0YSB1IG5ldW5lc2Vub2ogZ3JhbWF0aWNpIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NzU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiQkIGZvciB0aGUgbWlkcnVsZSBhdCAkJWQgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiQkIHphIHNyZWRuamUgcHJhdmlsbyBuYSAkJWQgb2QgJXMgbmVtYSBkZWtsYXJpcmFudSB2cnN0dSIKKworIzogc3JjL3NjYW4tY29kZS5sOjc2NAorIywgYy1mb3JtYXQKK21zZ2lkICIkJCBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiJCQgb2QgJXMgbmVtYSBkZWtsYXJpcmFudSB2cnN0dSIKKworIzogc3JjL3NjYW4tY29kZS5sOjc4NgorIywgYy1mb3JtYXQKK21zZ2lkICIkJXMgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiQlcyBvZCAlcyBuZW1hIGRla2xhcmlyYW51IHZyc3R1IgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmF5ICcsJyB0cmVhdGVkIGFzIHdoaXRlIHNwYWNlIgorbXNnc3RyICJwb3N0dXBhbSBzYSB6YWx1dGFsaW0g4oCeLOKAnSBrYW8gcHJhem5pbSBwcm9zdG9yb20iCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBkaXJlY3RpdmU6ICVzIgorbXNnc3RyICJuZWlzcHJhdmFuIHByb3BpczogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudGlmaWVyOiAlcyIKK21zZ3N0ciAibmVpc3ByYXZhbiBpZGVudGlmaWthdG9yOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjI5NQorIywgZnV6enkKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciIKK21zZ2lkX3BsdXJhbCAiaW52YWxpZCBjaGFyYWN0ZXJzIgorbXNnc3RyWzBdICJuZWlzcHJhdmFuIHpuYWs6ICVzIgorbXNnc3RyWzFdICJuZWlzcHJhdmFuIHpuYWs6ICVzIgorbXNnc3RyWzJdICJuZWlzcHJhdmFuIHpuYWs6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgaWRlbnRpZmllciBpbiBicmFja2V0ZWQgbmFtZTogJXMiCittc2dzdHIgIm5lb8SNZWtpdmFuaSBpZGVudGlmaWthdG9yIHUgemFncmHEkWVub20gaW1lbnU6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgImFuIGlkZW50aWZpZXIgZXhwZWN0ZWQiCittc2dzdHIgIm/EjWVrdWplbSBpZGVudGlmaWthdG9yIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MzgxCisjLCBmdXp6eQorbXNnaWQgImludmFsaWQgY2hhcmFjdGVyIGluIGJyYWNrZXRlZCBuYW1lIgorbXNnaWRfcGx1cmFsICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gYnJhY2tldGVkIG5hbWUiCittc2dzdHJbMF0gIm5laXNwcmF2YW4gem5hayB1IHphZ3JhxJFlbm9tIGltZW51OiAlcyIKK21zZ3N0clsxXSAibmVpc3ByYXZhbiB6bmFrIHUgemFncmHEkWVub20gaW1lbnU6ICVzIgorbXNnc3RyWzJdICJuZWlzcHJhdmFuIHpuYWsgdSB6YWdyYcSRZW5vbSBpbWVudTogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo0ODEgc3JjL3NjYW4tZ3JhbS5sOjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBjaGFyYWN0ZXIgbGl0ZXJhbCIKK21zZ3N0ciAicHJhem5hIHpuYWtvdm5hIGtvbnN0YW50YSIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjQ4NiBzcmMvc2Nhbi1ncmFtLmw6NTA3CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dHJhIGNoYXJhY3RlcnMgaW4gY2hhcmFjdGVyIGxpdGVyYWwiCittc2dzdHIgInZpxaFhayB6bmFrb3ZhIHUgem5ha292bm9qIGtvbnN0YW50aSIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bGwgY2hhcmFjdGVyIgorbXNnc3RyICJuZWlzcHJhdmFuIHByYXphbiB6bmFrIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NTMxIHNyYy9zY2FuLWdyYW0ubDo1NDEgc3JjL3NjYW4tZ3JhbS5sOjU2MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBhZnRlciBcXC1lc2NhcGU6ICVzIgorbXNnc3RyICJuZWlzcHJhdmFuIGJyb2ogbmFrb24gXFwtaXpsYXphOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjU3MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciBhZnRlciBcXC1lc2NhcGU6ICVzIgorbXNnc3RyICJuZWlzcHJhdmFuIHpuYWsgbmFrb24gXFwtaXpsYXphOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjkwMQorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzIGF0IGVuZCBvZiBmaWxlIgorbXNnc3RyICJuZWRvc3RhamUgJXMgbmEga3JhanUgZGF0b3Rla2UiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo5MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyBhdCBlbmQgb2YgbGluZSIKK21zZ3N0ciAibmVkb3N0YWplICVzIG5hIGtyYWp1IHJldGthIgorCisjOiBzcmMvc2Nhbi1za2VsLmw6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuY2xvc2VkICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAibmV6YXR2b3JlbiAlcyBwcm9waXMgdSBwcmVkbG/FoWt1IgorCisjOiBzcmMvc2Nhbi1za2VsLmw6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBmZXcgYXJndW1lbnRzIGZvciAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iCittc2dzdHIgInByZW1hbG8gYXJndW1lbmF0YSAlcyBwcm9waXNhIHUgcHJlZGxvxaFrdSIKKworIzogc3JjL3NjYW4tc2tlbC5sOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgZm9yICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAicHJlbWFsbyBhcmd1bWVuYXRhICVzIHByb3Bpc2EgdSBwcmVkbG/FoWt1IgorCisjOiBzcmMvc3ltbGlzdC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICQgdmFsdWU6ICQlZCIKK21zZ3N0ciAibmVpc3ByYXZuYSAkIHZyaWplZG5vc3Q6ICQlZCIKKworIzogc3JjL3N5bXRhYi5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlBPU0lYIFlhY2MgZm9yYmlkcyBkYXNoZXMgaW4gc3ltYm9sIG5hbWVzOiAlcyIKK21zZ3N0ciAiUE9TSVggWWFjYyB6YWJyYW5qdWplIHBvdmxha2UgdSBpbWVuaW1hIHNpbWJvbGE6ICVzIgorCisjOiBzcmMvc3ltdGFiLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgc3ltYm9scyBpbiBpbnB1dCBncmFtbWFyIChsaW1pdCBpcyAlZCkiCittc2dzdHIgInByZXZpxaFlIHNpbWJvbGEgdSB1bGF6bm9qIGdyYW1hdGljaSAob2dyYW5pxI1lbmplIGplICVkKSIKKworIzogc3JjL3N5bXRhYi5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAicG9ub3ZuYSBkZWtsYXJhY2lqYSAlcyB6YSAlcyIKKworIzogc3JjL3N5bXRhYi5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciA8JXM+IgorbXNnc3RyICJwb25vdm5hIGRla2xhcmFjaWphICVzIHphIDwlcz4iCisKKyM6IHNyYy9zeW10YWIuYzozMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHJlZGVmaW5lZCIKK21zZ3N0ciAic2ltYm9sICVzIHBvbm92byBkZWZpbmlyYW4iCisKKyM6IHNyYy9zeW10YWIuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHJlZGVjbGFyZWQiCittc2dzdHIgInNpbWJvbCAlcyBwb25vdm8gZGVrbGFyaXJhbiIKKworIzogc3JjL3N5bXRhYi5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlZmluaW5nIHVzZXIgdG9rZW4gbnVtYmVyIG9mICVzIgorbXNnc3RyICJwb25vdm8gZGVmaW5pcmFtIGJyb2oga29yaXNuacSNa29nIHNpbWJvbGEgb2QgJXMiCisKKyM6IHNyYy9zeW10YWIuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIGlzIHVzZWQsIGJ1dCBpcyBub3QgZGVmaW5lZCBhcyBhIHRva2VuIGFuZCBoYXMgbm8gcnVsZXMiCittc2dzdHIgInNpbWJvbCAlcyBqZSBrb3JpxaF0ZW4sIGFsaSBuaWplIGRlZmluaXJhbiBrYW8gc2ltYm9sIGkgbmVtYSBwcmF2aWxhIgorCisjOiBzcmMvc3ltdGFiLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyB1c2VkIG1vcmUgdGhhbiBvbmNlIGFzIGEgbGl0ZXJhbCBzdHJpbmciCittc2dzdHIgInNpbWJvbCAlcyBqZSBrb3JpxaF0ZW4gdmnFoWUgcHV0YSBrYW8ga29uc3RhbnRhbiBuaXoiCisKKyM6IHNyYy9zeW10YWIuYzo0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIGdpdmVuIG1vcmUgdGhhbiBvbmUgbGl0ZXJhbCBzdHJpbmciCittc2dzdHIgInNpbWJvbHUgJXMgamUgZGFubyB2acWhZSBvZCBqZWRub2cga29uc3RhbnRub2cgbml6YSIKKworIzogc3JjL3N5bXRhYi5jOjUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2VyIHRva2VuIG51bWJlciAlZCByZWRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAicG9ub3ZuYSBkZWtsYXJhY2lqYSBicm9qYSBrb3Jpc25pxI1rb2cgc2ltYm9sYSAlZCB6YSAlcyIKKworIzogc3JjL3N5bXRhYi5jOjUzOQorIywgYy1mb3JtYXQKK21zZ2lkICJwcmV2aW91cyBkZWNsYXJhdGlvbiBmb3IgJXMiCittc2dzdHIgInByZXRob2RuYSBkZWtsYXJhY2lqYSB6YSAlcyIKKworIzogc3JjL3N5bXRhYi5jOjkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgc3RhcnQgc3ltYm9sICVzIGlzIHVuZGVmaW5lZCIKK21zZ3N0ciAicG/EjWV0bmkgc2ltYm9sICVzIG5pamUgZGVmaW5pcmFuIgorCisjOiBzcmMvc3ltdGFiLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBzdGFydCBzeW1ib2wgJXMgaXMgYSB0b2tlbiIKK21zZ3N0ciAicG/EjWV0bmkgc2ltYm9sICVzIGplIHNpbWJvbCIKKworIzogc3JjL3N5bXRhYi5jOjkzNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlJWRlc3RydWN0b3IiCittc2dzdHIgInBvbm92bmEgZGVrbGFyYWNpamEgemEgemFkYW5pIG96bmHEjWVuaSAlJWRlc3RydWN0b3IiCisKKyM6IHNyYy9zeW10YWIuYzo5NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdsZXNzICUlZGVzdHJ1Y3RvciIKK21zZ3N0ciAicG9ub3ZuYSBkZWtsYXJhY2lqYSB6YSB6YWRhbmkgbmVvem5hxI1lbmkgJSVkZXN0cnVjdG9yIgorCisjOiBzcmMvc3ltdGFiLmM6OTY1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICUlcHJpbnRlciIKK21zZ3N0ciAicG9ub3ZuYSBkZWtsYXJhY2lqYSB6YSB6YWRhbmkgb3puYcSNZW5pICUlcHJpbnRlciIKKworIzogc3JjL3N5bXRhYi5jOjk4MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJSVwcmludGVyIgorbXNnc3RyICJwb25vdm5hIGRla2xhcmFjaWphIHphIHphZGFuaSBuZW96bmHEjWVuaSAlJXByaW50ZXIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzo2MyBkamdwcC9zdWJwaXBlLmM6Mjg2IGRqZ3BwL3N1YnBpcGUuYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3Zpbmcgb2YgJyVzJyBmYWlsZWQiCittc2dzdHIgInVrbGFuamFuamUg4oCeJXPigJ0gbmlqZSB1c3BqZWxvIgorCisjOiBkamdwcC9zdWJwaXBlLmM6ODUgZGpncHAvc3VicGlwZS5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNyZWF0aW9uIG9mIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICJzdHZhcmFuamUgcHJpdnJlbWVuZSBkYXRvdGVrZSBuaWplIHVzcGplbG8iCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAic2F2aW5nIHN0ZGluIGZhaWxlZCIKK21zZ3N0ciAic3ByZW1hbmplIHN0YW5kYXJkbm9nIHVsYXphIG5pamUgdXNwamVsbyIKKworIzogZGpncHAvc3VicGlwZS5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJzYXZpbmcgc3Rkb3V0IGZhaWxlZCIKK21zZ3N0ciAic3ByZW1hbmplIHN0YW5kYXJkbm9nIGl6bGF6YSBuaWplIHVzcGplbG8iCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxNTMgZGpncHAvc3VicGlwZS5jOjE5NyBkamdwcC9zdWJwaXBlLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZW5pbmcgb2YgdG1wZmlsZSBmYWlsZWQiCittc2dzdHIgIm90dmFyYW5qZSBwcml2cmVtZW5lIGRhdG90ZWtlIG5pamUgdXNwamVsbyIKKworIzogZGpncHAvc3VicGlwZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBiaXNvbidzIHN0ZG91dCB0byB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisicHJldXNtamVyYXZhbmplIHN0YW5kYXJkbm9nIGl6bGF6YSBwcm9ncmFtYSBiaXNvbiB1IHByaXZyZW1lbnUgZGF0b3Rla3UgbmlqZSAiCisidXNwamVsbyIKKworIzogZGpncHAvc3VicGlwZS5jOjIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBtNCdzIHN0ZGluIGZyb20gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorInByZXVzbWplcmF2YW5qZSBzdGFuZGFyZG5vZyB1bGF6YSBwcm9ncmFtYSBtNCBpeiBwcml2cmVtZW5lIGRhdG90ZWtlIG5pamUgIgorInVzcGplbG8iCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlbmluZyBvZiBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAib3R2YXJhbmplIHByaXZyZW1lbmUgZGF0b3Rla2UgbmlqZSB1c3BqZWxvIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIG00J3Mgc3Rkb3V0IHRvIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisicHJldXNtamVyYXZhbmplIHN0YW5kYXJkbm9nIGl6bGF6YSBwcm9ncmFtYSB1IHByaXZyZW1lbnUgZGF0b3Rla3UgbmlqZSAiCisidXNwamVsbyIKKworIzogZGpncHAvc3VicGlwZS5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gJyVzJyBpbnRlcnJ1cHRlZCIKK21zZ3N0ciAicG9kcmXEkWVuaSBwcm9ncmFtIOKAniVz4oCdIGplIHByZWtpbnV0IgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAicG9kcmXEkWVuaSBwcm9ncmFtIOKAniVz4oCdIG5pamUgcHJvbmHEkWVuIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIGJpc29uJ3Mgc3RkaW4gZnJvbSB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisicHJldXNtamVyYXZhbmplIHN0YW5kYXJkbm9nIHVsYXphIHByb2dyYW1hIGJpc29uIGl6IHByaXZyZW1lbmUgZGF0b3Rla2UgbmlqZSAiCisidXNwamVsbyIKKworIzogbGliL2FyZ21hdGNoLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgJXMgZm9yICVzIgorbXNnc3RyICJuZWlzcHJhdmFuIGFyZ3VtZW50ICVzIHphICVzIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIGFyZ3VtZW50ICVzIGZvciAlcyIKK21zZ3N0ciAidmnFoWV6bmHEjWFuIGFyZ3VtZW50ICVzIHphICVzIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxNTMKK21zZ2lkICJWYWxpZCBhcmd1bWVudHMgYXJlOiIKK21zZ3N0ciAiSXNwcmF2bmkgYXJndW1lbnRpIHN1OiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfYWxsb2NzLCAldSBmcmVlZCAoJS4yZiUlKS5cbiIKK21zZ3N0ciAiJXUgYml0c2V0X2FsbG9jcywgJXUgb3Nsb2JvxJFlbm8gKCUuMmYlJSkuXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3NldHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorbXNnc3RyICIldSBiaXRzZXRfc2V0cywgJXUgdSBzcHJlbW5pa3UgKCUuMmYlJSlcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfcmVzZXRzLCAldSBjYWNoZWQgKCUuMmYlJSlcbiIKK21zZ3N0ciAiJXUgYml0c2V0X3Jlc2V0cywgJXUgdSBzcHJlbW5pa3UgKCUuMmYlJSlcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfdGVzdHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorbXNnc3RyICIldSBiaXRzZXRfdGVzdHMsICV1IHUgc3ByZW1uaWt1ICglLjJmJSUpXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X2xpc3RzXG4iCittc2dzdHIgIiV1IGJpdHNldF9saXN0c1xuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTkyCittc2dpZCAiY291bnQgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICJoaXN0b2dyYW0gZG5ldm5pa2EgYnJvamFuamFcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5NQorbXNnaWQgInNpemUgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICJoaXN0b2dyYW0gZG5ldm5pa2EgdmVsacSNaW5lXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTgKK21zZ2lkICJkZW5zaXR5IGhpc3RvZ3JhbVxuIgorbXNnc3RyICJoaXN0b2dyYW0gZ3VzdG/Eh2VcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQml0c2V0IHN0YXRpc3RpY3M6XG4iCisiXG4iCittc2dzdHIgIiIKKyJTdGF0aXN0aWtlIHBvc3RhdmxqYW5qYSBiaXRvdmE6XG4iCisiXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWNjdW11bGF0ZWQgcnVucyA9ICV1XG4iCittc2dzdHIgIkFrdW11bGlyYW5hIGl6dnLFoWF2YW5qYSA9ICV1XG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyNTkgbGliL2JpdHNldF9zdGF0cy5jOjI2NAorbXNnaWQgImNhbm5vdCByZWFkIHN0YXRzIGZpbGUiCittc2dzdHIgIm5lIG1vZ3UgxI1pdGF0aSBkYXRvdGVrdSBzdGFuamEiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHN0YXRzIGZpbGUgc2l6ZVxuIgorbXNnc3RyICJuZWlzcHJhdm5hIHZlbGnEjWluYSBkYXRvdGVrZSBzdGFuamFcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI4NyBsaWIvYml0c2V0X3N0YXRzLmM6Mjg5Cittc2dpZCAiY2Fubm90IHdyaXRlIHN0YXRzIGZpbGUiCittc2dzdHIgIm5lIG1vZ3UgemFwaXNhdGkgZGF0b3Rla3Ugc3RhbmphIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjkyCittc2dpZCAiY2Fubm90IG9wZW4gc3RhdHMgZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAibmUgbW9ndSBvdHZvcml0aSBkYXRvdGVrdSBzdGFuamEgemEgcGlzYW5qZSIKKworIzogbGliL2Nsb3Nlb3V0LmM6MTEyCittc2dpZCAid3JpdGUgZXJyb3IiCittc2dzdHIgImdyZcWha2EgcGlzYW5qYSIKKworIzogbGliL2Vycm9yLmM6MTg4Cittc2dpZCAiVW5rbm93biBzeXN0ZW0gZXJyb3IiCittc2dzdHIgIk5lcG96bmF0YSBncmXFoWthIHN1c3RhdmEiCisKKyM6IGxpYi9nZXRvcHQuYzo1NDcgbGliL2dldG9wdC5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICclcycgaXMgYW1iaWd1b3VzOyBwb3NzaWJpbGl0aWVzOiIKK21zZ3N0ciAiJXM6IG9wY2lqYSDigJ4lc+KAnSBqZSB2acWhZXpuYcSNbmEsIG1vZ3XEh25vc3RpOiIKKworIzogbGliL2dldG9wdC5jOjYyNCBsaWIvZ2V0b3B0LmM6NjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy0tJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IG9wY2lqYSDigJ4tLSVz4oCdIG5lIGRvenZvbGphdmEgYXJndW1lbnRcbiIKKworIzogbGliL2dldG9wdC5jOjYzNyBsaWIvZ2V0b3B0LmM6NjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJyVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IG9wY2lqYSDigJ4lYyVz4oCdIG5lIGRvenZvbGphdmEgYXJndW1lbnRcbiIKKworIzogbGliL2dldG9wdC5jOjY4NSBsaWIvZ2V0b3B0LmM6NzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy0tJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBvcGNpamEg4oCeLS0lc+KAnSB6YWh0aWpldmEgYXJndW1lbnRcbiIKKworIzogbGliL2dldG9wdC5jOjc0MiBsaWIvZ2V0b3B0LmM6NzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uICctLSVzJ1xuIgorbXNnc3RyICIlczogbmVwcmVwb3puYXRhIG9wY2lqYSDigJ4tLSVz4oCdXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo3NTMgbGliL2dldG9wdC5jOjc1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiAnJWMlcydcbiIKK21zZ3N0ciAiJXM6IG5lcHJlcG96bmF0YSBvcGNpamEg4oCeJWMlc+KAnVxuIgorCisjOiBsaWIvZ2V0b3B0LmM6ODA1IGxpYi9nZXRvcHQuYzo4MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgb3B0aW9uIC0tICclYydcbiIKK21zZ3N0ciAiJXM6IG5laXNwcmF2bmEgb3BjaWphIC0tIOKAniVj4oCdXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo4NjEgbGliL2dldG9wdC5jOjg3OCBsaWIvZ2V0b3B0LmM6MTA4OCBsaWIvZ2V0b3B0LmM6MTEwNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICclYydcbiIKK21zZ3N0ciAiJXM6IG9wY2lqYSB6YWh0aWpldmEgYXJndW1lbnQgLS0g4oCeJWPigJ1cbiIKKworIzogbGliL2dldG9wdC5jOjkzNCBsaWIvZ2V0b3B0LmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyBpcyBhbWJpZ3VvdXNcbiIKK21zZ3N0ciAiJXM6IG9wY2lqYSDigJ4tVyAlc+KAnSBqZSB2acWhZXpuYcSNbmFcbiIKKworIzogbGliL2dldG9wdC5jOjk3NCBsaWIvZ2V0b3B0LmM6OTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBvcGNpamEg4oCeLVcgJXPigJ0gbmUgZG96dm9samF2YSBhcmd1bWVudFxuIgorCisjOiBsaWIvZ2V0b3B0LmM6MTAxMyBsaWIvZ2V0b3B0LmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IG9wY2lqYSDigJ4tVyAlc+KAnSB6YWh0aWpldmEgYXJndW1lbnRcbiIKKworIzogbGliL29ic3RhY2suYzo0MTMgbGliL29ic3RhY2suYzo0MTUgbGliL3hhbGxvYy1kaWUuYzozNAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIm1lbW9yaWphIGlzY3JwbGplbmEiCisKKyM6IGxpYi9zcGF3bi1waXBlLmM6MTQwIGxpYi9zcGF3bi1waXBlLmM6MTQzIGxpYi9zcGF3bi1waXBlLmM6MjY0CisjOiBsaWIvc3Bhd24tcGlwZS5jOjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIHBpcGUiCittc2dzdHIgIm5lIG1vZ3UgbmFwcmF2aXRpIGNqZXZvdm9kIgorCisjOiBsaWIvc3Bhd24tcGlwZS5jOjIzNCBsaWIvc3Bhd24tcGlwZS5jOjM0OCBsaWIvd2FpdC1wcm9jZXNzLmM6MjgyCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MgZmFpbGVkIgorbXNnc3RyICIlcyBwb3Rwcm9jZXMgbmlqZSB1c3BpbyIKKworIy4gVFJBTlNMQVRPUlM6CisjLiBHZXQgdHJhbnNsYXRpb25zIGZvciBvcGVuIGFuZCBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrcy4KKyMuIFRoZSBtZXNzYWdlIGNhdGFsb2cgc2hvdWxkIHRyYW5zbGF0ZSAiYCIgdG8gYSBsZWZ0CisjLiBxdW90YXRpb24gbWFyayBzdWl0YWJsZSBmb3IgdGhlIGxvY2FsZSwgYW5kIHNpbWlsYXJseSBmb3IKKyMuICInIi4gIEZvciBleGFtcGxlLCBhIEZyZW5jaCBVbmljb2RlIGxvY2FsIHNob3VsZCB0cmFuc2xhdGUKKyMuIHRoZXNlIHRvIFUrMDBBQiAoTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUKKyMuIFFVT1RBVElPTiBNQVJLKSwgYW5kIFUrMDBCQiAoUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFCisjLiBRVU9UQVRJT04gTUFSSyksIHJlc3BlY3RpdmVseS4KKyMuCisjLiBJZiB0aGUgY2F0YWxvZyBoYXMgbm8gdHJhbnNsYXRpb24sIHdlIHdpbGwgdHJ5IHRvCisjLiB1c2UgVW5pY29kZSBVKzIwMTggKExFRlQgU0lOR0xFIFFVT1RBVElPTiBNQVJLKSBhbmQKKyMuIFVuaWNvZGUgVSsyMDE5IChSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspLiAgSWYgdGhlCisjLiBjdXJyZW50IGxvY2FsZSBpcyBub3QgVW5pY29kZSwgbG9jYWxlX3F1b3Rpbmdfc3R5bGUKKyMuIHdpbGwgcXVvdGUgJ2xpa2UgdGhpcycsIGFuZCBjbG9jYWxlX3F1b3Rpbmdfc3R5bGUgd2lsbAorIy4gcXVvdGUgImxpa2UgdGhpcyIuICBZb3Ugc2hvdWxkIGFsd2F5cyBpbmNsdWRlIHRyYW5zbGF0aW9ucworIy4gZm9yICJgIiBhbmQgIiciIGV2ZW4gaWYgVSsyMDE4IGFuZCBVKzIwMTkgYXJlIGFwcHJvcHJpYXRlCisjLiBmb3IgeW91ciBsb2NhbGUuCisjLgorIy4gSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBwdXQgaGVyZSwgcGxlYXNlIHNlZQorIy4gPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUXVvdGF0aW9uX21hcmtzX2luX290aGVyX2xhbmd1YWdlcz4KKyMuIGFuZCB1c2UgZ2x5cGhzIHN1aXRhYmxlIGZvciB5b3VyIGxhbmd1YWdlLgorIzogbGliL3F1b3RlYXJnLmM6MzEyCittc2dpZCAiYCIKK21zZ3N0ciAi4oCeIgorCisjOiBsaWIvcXVvdGVhcmcuYzozMTMKK21zZ2lkICInIgorbXNnc3RyICLigJ0iCisKKyM6IGxpYi90aW1ldmFyLmM6NDc1Cittc2dpZCAiIgorIlxuIgorIkV4ZWN1dGlvbiB0aW1lcyAoc2Vjb25kcylcbiIKK21zZ3N0ciAiIgorIlxuIgorIlZyZW1lbmEgaXp2csWhYXZhbmphICh1IHNla3VuZGFtYSlcbiIKKworIzogbGliL3RpbWV2YXIuYzo1MjUKK21zZ2lkICIgVE9UQUwgICAgICAgICAgICAgICAgIDoiCittc2dzdHIgIiBVS1VQTk8gICAgICAgICAgICAgICAgOiIKKworIzogbGliL3RpbWV2YXIuYzo1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZSBpbiAlczogJWxkLiUwNmxkICglbGQlJSlcbiIKK21zZ3N0ciAidnJpamVtZSB1ICVzOiAlbGQuJTA2bGQgKCVsZCUlKVxuIgorCisjOiBsaWIvdzMyc3Bhd24uaDo0MworIywgYy1mb3JtYXQKK21zZ2lkICJfb3Blbl9vc2ZoYW5kbGUgZmFpbGVkIgorbXNnc3RyICJfb3Blbl9vc2ZoYW5kbGUgbmlqZSB1c3BpbyIKKworIzogbGliL3czMnNwYXduLmg6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlc3RvcmUgZmQgJWQ6IGR1cDIgZmFpbGVkIgorbXNnc3RyICJuZSBtb2d1IG9ibm92aXRpIGZkICVkOiBkdXAyIG5pamUgdXNwaW8iCisKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzoyMjMgbGliL3dhaXQtcHJvY2Vzcy5jOjI1NSBsaWIvd2FpdC1wcm9jZXNzLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MiCittc2dzdHIgIiVzIHBvdHByb2NlcyIKKworIzogbGliL3dhaXQtcHJvY2Vzcy5jOjI3NCBsaWIvd2FpdC1wcm9jZXNzLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MgZ290IGZhdGFsIHNpZ25hbCAlZCIKK21zZ3N0ciAiJXMgcG90cHJvY2VzIGplIHByaW1pbyBmYXRhbG5pIHNpZ25hbCAlZCIKKworI34gbXNnaWQgInN0YXRlICVkIgorI34gbXNnc3RyICJzdGFuamUgJWQiCisKKyN+IG1zZ2lkICJzdHJheSAnQCciCisjfiBtc2dzdHIgInN0cmF5IOKAnkDigJ0iCisKKyN+IG1zZ2lkICIiCisjfiAidW5kZWZpbmVkICUlZGVmaW5lIHZhcmlhYmxlIGAlcycgcGFzc2VkIHRvIG11c2NsZV9wZXJjZW50X2RlZmluZV9nZXRfbG9jIgorI34gbXNnc3RyICIiCisjfiAibmVkZWZpbmlyYW5hICUlZGVmaW5lIHZhcmlqYWJsYSDigJ4lc+KAnSBqZSBwcm9zbGlqZcSRZW5hICIKKyN+ICJtdXNjbGVfcGVyY2VudF9kZWZpbmVfZ2V0X2xvYyIKKworI34gbXNnaWQgIiIKKyN+ICJ1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgYCVzJyBwYXNzZWQgdG8gIgorI34gIm11c2NsZV9wZXJjZW50X2RlZmluZV9nZXRfc3luY2xpbmUiCisjfiBtc2dzdHIgIiIKKyN+ICJuZWRlZmluaXJhbmEgJSVkZWZpbmUgdmFyaWphYmxhIOKAniVz4oCdIGplIHByb3NsaWplxJFlbmEgIgorI34gIm11c2NsZV9wZXJjZW50X2RlZmluZV9nZXRfc3luY2xpbmUiCisKKyN+IG1zZ2lkICIiCisjfiAidW5kZWZpbmVkICUlZGVmaW5lIHZhcmlhYmxlIGAlcycgcGFzc2VkIHRvIG11c2NsZV9wZXJjZW50X2RlZmluZV9mbGFnX2lmIgorI34gbXNnc3RyICIiCisjfiAibmVkZWZpbmlyYW5hICUlZGVmaW5lIHZhcmlqYWJsYSDigJ4lc+KAnSBqZSBwcm9zbGlqZcSRZW5hICIKKyN+ICJtdXNjbGVfcGVyY2VudF9kZWZpbmVfZmxhZ19pZiIKKworI34gbXNnaWQgIiIKKyN+ICJ1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgYCVzJyBwYXNzZWQgdG8gIgorI34gIm11c2NsZV9wZXJjZW50X2RlZmluZV9jaGVja192YWx1ZXMiCisjfiBtc2dzdHIgIiIKKyN+ICJuZWRlZmluaXJhbmEgJSVkZWZpbmUgdmFyaWphYmxlIOKAniVz4oCdIGplIHByb3NsaWplxJFlbmEgIgorI34gIm11c2NsZV9wZXJjZW50X2RlZmluZV9jaGVja192YWx1ZXMiCisKKyN+IG1zZ2lkICJ0b28gbWFueSBzdGF0ZXMgKG1heCAlZCkiCisjfiBtc2dzdHIgInByZXZpxaFlIHN0YW5qYSAobWFrcyAlZCkiCisKKyN+IG1zZ2lkICJyZWR1Y2UiCisjfiBtc2dzdHIgInJlZHVjaXJhaiIKKworI34gbXNnaWQgInNoaWZ0IgorI34gbXNnc3RyICJwb21ha25pIgorCisjfiBtc2dpZCAiJWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0IgorI34gbXNnaWRfcGx1cmFsICIlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIgorI34gbXNnc3RyWzBdICIlZCBwb21ha25pL3JlZHVjaXJhaiBrb25mbGlrYXQiCisjfiBtc2dzdHJbMV0gIiVkIHBvbWFrbmkvcmVkdWNpcmFqIGtvbmZsaWthdGEiCisKKyN+IG1zZ2lkICJhbmQiCisjfiBtc2dzdHIgImkiCisKKyN+IG1zZ2lkICJTdGF0ZSAlZCBjb250YWlucyAiCisjfiBtc2dzdHIgIlN0YW5qZSAlZCBzYWRyxb5pIgorCisjfiBtc2dpZCAiY29uZmxpY3RzOiAiCisjfiBtc2dzdHIgImtvbmZsaWt0OiIKKworI34gbXNnaWQgIiVzIGNvbnRhaW5zICIKKyN+IG1zZ3N0ciAiJXMgc2FkcsW+aSIKKworI34gbXNnaWQgIiAgICAlLTRzXHRbcmVkdWNlIHVzaW5nIHJ1bGUgJWQgKCVzKV1cbiIKKyN+IG1zZ3N0ciAiICAgICUtNHNcdFtyZWR1Y2lyYWoga29yaXN0ZcSHaSBwcmF2aWxvICVkICglcyldXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiICAgICRkZWZhdWx0XHRyZWR1Y2UgdXNpbmcgcnVsZSAlZCAoJXMpXG4iCisjfiAiXG4iCisjfiBtc2dzdHIgIiIKKyN+ICIgICAgJGRlZmF1bHRcdHJlZHVjaXJhaiBrb3Jpc3RlxIdpIHByYXZpbG8gJWQgKCVzKVxuIgorI34gIlxuIgorCisjfiBtc2dpZCAiICAgICUtNHNcdHJlZHVjZSB1c2luZyBydWxlICVkICglcylcbiIKKyN+IG1zZ3N0ciAiICAgICUtNHNcdHJlZHVjaXJhaiBrb3Jpc3RlxIdpIHByYXZpbG8gJWQgKCVzKVxuIgorCisjfiBtc2dpZCAiICAgICRkZWZhdWx0XHRyZWR1Y2UgdXNpbmcgcnVsZSAlZCAoJXMpXG4iCisjfiBtc2dzdHIgIiAgICAkZGVmYXVsdFx0cmVkdWNpcmFqIGtvcmlzdGXEh2kgcHJhdmlsbyAlZCAoJXMpXG4iCisKKyN+IG1zZ2lkICJHTlUgYmlzb24gZ2VuZXJhdGVzIHBhcnNlcnMgZm9yIExBTFIoMSkgZ3JhbW1hcnMuXG4iCisjfiBtc2dzdHIgIkdOVSBiaXNvbiBnZW5lcmlyYSBwYXJzZXJlIHphIExBTFIoMSkgZ3JhbWF0aWtlLlxuIgorCisjfiBtc2dpZCAiIgorI34gIklmIGEgbG9uZyBvcHRpb24gc2hvd3MgYW4gYXJndW1lbnQgYXMgbWFuZGF0b3J5LCB0aGVuIGl0IGlzIG1hbmRhdG9yeVxuIgorI34gImZvciB0aGUgZXF1aXZhbGVudCBzaG9ydCBvcHRpb24gYWxzby4gIFNpbWlsYXJseSBmb3Igb3B0aW9uYWwgYXJndW1lbnRzLlxuIgorI34gbXNnc3RyICIiCisjfiAiQWtvIGR1Z2Egb3BjaWphIGthxb5lIGRhIGplIGFyZ3VtZW50IG9iYXZlemFuLCB0YWRhIGplIG9uIG9iYXZlemFuXG4iCisjfiAiaSB6YSBla3ZpdmFsZW50bnUga3JhdGt1IG9wY2lqdS4gU2xpxI1ubyBqZSBpIHphIG9wY2lvbmFsbmUgYXJndW1lbnRlLlxuIgorCisjfiBtc2dpZCAiIgorI34gIk9wZXJhdGlvbiBtb2RlczpcbiIKKyN+ICIgIC1oLCAtLWhlbHAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorI34gIiAgLVYsIC0tdmVyc2lvbiAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCisjfiAiICAteSwgLS15YWNjICAgICAgZW11bGF0ZSBQT1NJWCB5YWNjXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJOYcSNaW5pIHJhZGE6XG4iCisjfiAiICAtaCwgLS1oZWxwICAgICAgcHJpa2HFvmkgb3Z1IHBvbW/EhyBpIGl6YcSRaVxuIgorI34gIiAgLVYsIC0tdmVyc2lvbiAgIHByaWthxb5pIHZlcnppanUgaSBpemHEkWlcbiIKKyN+ICIgIC15LCAtLXlhY2MgICAgICBlbXVsaXJhaiBQT1NJWCB5YWNjXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiT3V0cHV0OlxuIgorI34gIiAgLWQsIC0tZGVmaW5lcyAgICAgICAgICAgICAgYWxzbyBwcm9kdWNlIGEgaGVhZGVyIGZpbGVcbiIKKyN+ICIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIGFsc28gcHJvZHVjZSBhbiBleHBsYW5hdGlvbiBvZiB0aGUgIgorI34gImF1dG9tYXRvblxuIgorI34gIiAgLWIsIC0tZmlsZS1wcmVmaXg9UFJFRklYICAgc3BlY2lmeSBhIFBSRUZJWCBmb3Igb3V0cHV0IGZpbGVzXG4iCisjfiAiICAtbywgLS1vdXRwdXQ9RklMRSAgICAgICAgICBsZWF2ZSBvdXRwdXQgdG8gRklMRVxuIgorI34gIiAgLWcsIC0tZ3JhcGggICAgICAgICAgICAgICAgYWxzbyBwcm9kdWNlIGEgVkNHIGRlc2NyaXB0aW9uIG9mIHRoZSAiCisjfiAiYXV0b21hdG9uXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJJemxhejpcbiIKKyN+ICIgIC1kLCAtLWRlZmluZXMgICAgICAgICAgICAgIHRha2/EkWVyIHByb2l6dmVkaSBoZWFkZXIgZGF0b3Rla3VcbiIKKyN+ICIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIHRha2/EkWVyIHByb2l6dmVkaSBvYmphxaFuamVuamUgYXV0b21hdGFcbiIKKyN+ICIgIC1iLCAtLWZpbGUtcHJlZml4PVBSRUZJS1MgICBzcGVjaWZpY2lyYWogUFJFRklLUyB6YSBpemxhem5lIGRhdG90ZWtlXG4iCisjfiAiICAtbywgLS1vdXRwdXQ9REFUT1RFS0EgICAgICAgICAgaXNwacWhaSBpemxheiB1IERBVE9URUtVXG4iCisjfiAiICAtZywgLS1ncmFwaCAgICAgICAgICAgICAgICB0YWtvxJFlciBwcm9penZlZGkgVkNHIG9waXMgYXV0b21hdGFcbiIKKworI34gbXNnaWQgImAlcycgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIKKyN+IG1zZ3N0ciAiYCVzJyB2acWhZSBuaWplIHBvZHLFvmFubyIKKworI34gbXNnaWQgIiVzOiBubyBncmFtbWFyIGZpbGUgZ2l2ZW5cbiIKKyN+IG1zZ3N0ciAiJXM6IG5pamUgZGF0YSBkYXRvdGVrYSBzYSBncmFtYXRpa29tXG4iCisKKyN+IG1zZ2lkICIlczogZXh0cmEgYXJndW1lbnRzIGlnbm9yZWQgYWZ0ZXIgYCVzJ1xuIgorI34gbXNnc3RyICIlczogZG9kYXRuaSBhcmd1bWVudGkgc2UgaWdub3JpcmFqdSBuYWtvbiBgJXMnXG4iCisKKyN+IG1zZ2lkICJ0b28gbWFueSBnb3RvcyAobWF4ICVkKSIKKyN+IG1zZ3N0ciAicHJldmnFoWUgZ290by1hIChtYWtzaW1hbG5vICVkKSIKKworI34gbXNnaWQgInVuZXhwZWN0ZWQgYC8nIGZvdW5kIGFuZCBpZ25vcmVkIgorI34gbXNnc3RyICJuZW/EjWVraXZhbiAgYC8nIG5hxJFlbiBpIHphbmVtYXJlbiIKKworI34gbXNnaWQgInVudGVybWluYXRlZCBjb21tZW50IgorI34gbXNnc3RyICJuZXphdnLFoWVuaSBrb21lbnRhciIKKworI34gbXNnaWQgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiCisjfiBtc2dzdHIgIm5lb8SNZWtpdmFuIGtyYWogZGF0b3Rla2UiCisKKyN+IG1zZ2lkICJ1bmVzY2FwZWQgbmV3bGluZSBpbiBjb25zdGFudCIKKyN+IG1zZ3N0ciAibmVvxI1la2l2YW4gem5hayB6YSBub3Z1IGxpbmlqdSB1IGtvbnN0YW50aSIKKworI34gbXNnaWQgIm9jdGFsIHZhbHVlIG91dHNpZGUgcmFuZ2UgMC4uLjI1NTogYFxcJW8nIgorI34gbXNnc3RyICJva3RhbG5hIHZyaWplZG5vc3QgaXp2YW4gZG9zZWdhIDAuLi4yNTU6IGBcXCVvJyIKKworI34gbXNnaWQgImhleGFkZWNpbWFsIHZhbHVlIGFib3ZlIDI1NTogYFxceCV4JyIKKyN+IG1zZ3N0ciAiaGVrc2FkZWNpbWFsbmEgdnJpamVkbm9zdCB2acWhYSBvZCAyNTU6IGBcXHgleCciCisKKyN+IG1zZ2lkICJ1bmtub3duIGVzY2FwZSBzZXF1ZW5jZTogYFxcJyBmb2xsb3dlZCBieSBgJXMnIgorI34gbXNnc3RyICJuZXBvem5hdGEgZXNjYXBlIHNla3ZlbmNhOiBgXFwnIGtvanUgc2xpamVkaSBgJXMnIgorCisjfiBtc2dpZCAidW50ZXJtaW5hdGVkIHR5cGUgbmFtZSBhdCBlbmQgb2YgZmlsZSIKKyN+IG1zZ3N0ciAibmV6YXZyxaFlbm8gaW1lIHRpcGEgcHJpIGtyYWp1IGRhdG90ZWtlIgorCisjfiBtc2dpZCAidW50ZXJtaW5hdGVkIHR5cGUgbmFtZSIKKyN+IG1zZ3N0ciAibmV6YXZyxaFlbm8gaW1lIHRpcGEiCisKKyN+IG1zZ2lkICJ1c2UgXCIuLi5cIiBmb3IgbXVsdGktY2hhcmFjdGVyIGxpdGVyYWwgdG9rZW5zIgorI34gbXNnc3RyICJrb3Jpc3RpIFwiLi4uXCIgemEgdmnFoWViYWp0bmUgem5ha292ZSIKKworI34gbXNnaWQgImAlcycgc3VwcG9ydHMgbm8gYXJndW1lbnQ6ICVzIgorI34gbXNnc3RyICJgJXMnIG5lIHBvZHLFvmF2YSBhcmd1bWVudDogJXMiCisKKyN+IG1zZ2lkICJgJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgorI34gbXNnc3RyICJgJXMnIHphaHRpamV2YSBhcmd1bWVudCIKKworI34gbXNnaWQgIm1heGltdW0gdGFibGUgc2l6ZSAoJWQpIGV4Y2VlZGVkIgorI34gbXNnc3RyICJtYWtzaW1hbG5hIHZlbGnEjWluYSB0YWJsaWNlICglZCkgcHJla29yYcSNZW5hIgorCisjfiBtc2dpZCAiICAgKHJ1bGUgJWQpIgorI34gbXNnc3RyICIgICAocHJhdmlsbyAlZCkiCisKKyN+IG1zZ2lkICIgICAgJGRlZmF1bHRcdGFjY2VwdFxuIgorI34gbXNnc3RyICIgICAgJGRlZmF1bHRcdHByaWh2YXRpXG4iCisKKyN+IG1zZ2lkICIgICAgTk8gQUNUSU9OU1xuIgorI34gbXNnc3RyICIgICAgTkVNQSBBS0NJSkFcbiIKKworI34gbXNnaWQgIiAgICAlLTRzXHRlcnJvciAobm9uYXNzb2NpYXRpdmUpXG4iCisjfiBtc2dzdHIgIiAgICAlLTRzXHRncmXFoWthIChub25hc3NvY2lhdGl2ZSlcbiIKKworI34gbXNnaWQgIiAgICAlLTRzXHRnbyB0byBzdGF0ZSAlZFxuIgorI34gbXNnc3RyICIgICAgJS00c1x0aWR1IHUgc3RhbmplICVkXG4iCisKKyN+IG1zZ2lkICJOdW1iZXIsIExpbmUsIFJ1bGUiCisjfiBtc2dzdHIgIkJyb2osIExpbmlqYSwgUHJhdmlsbyIKKworI34gbXNnaWQgIiAgJTNkICUzZCAlcyAtPiIKKyN+IG1zZ3N0ciAiICAlM2QgJTNkICVzIC0+IgorCisjfiBtc2dpZCAiICAgU2tpcHBpbmcgdG8gbmV4dCBcXG4iCisjfiBtc2dzdHIgIiAgIFByZXNrYcSNZW0gbmEgc2xpamVkZcSHZSBcXG4iCisKKyN+IG1zZ2lkICIgICBTa2lwcGluZyB0byBuZXh0ICVjIgorI34gbXNnc3RyICIgICBQcmVza2HEjWVtIG5hIHNsaWplZGXEh2kgJWMiCisKKyN+IG1zZ2lkICJ1bnRlcm1pbmF0ZWQgc3RyaW5nIgorI34gbXNnc3RyICJuZXphdnLFoWVuaSB6bmFrb3ZuaSBuaXoiCisKKyN+IG1zZ2lkICJpbnZhbGlkIEAgdmFsdWUiCisjfiBtc2dzdHIgIm5lZG96dm9samVuYSAgQCB2cmlqZWRub3N0IgorCisjfiBtc2dpZCAiJXMgaXMgaW52YWxpZCIKKyN+IG1zZ3N0ciAiJXMgamUgbmVkb3p2b2xqZW5vIgorCisjfiBtc2dpZCAidW50ZXJtaW5hdGVkIGAleycgZGVmaW5pdGlvbiIKKyN+IG1zZ3N0ciAibmV6YXZyxaFlbmEgYCV7JyBkZWZpbmljaWphIgorCisjfiBtc2dpZCAiUHJlbWF0dXJlIEVPRiBhZnRlciAlcyIKKyN+IG1zZ3N0ciAiUHJldXJhbmplbmkgRU9GIG5ha29uICVzIgorCisjfiBtc2dpZCAiYCVzJyBpcyBpbnZhbGlkIGluICVzIgorI34gbXNnc3RyICJgJXMnIGplIG5lZG96dm9samVuIHUgJXMiCisKKyN+IG1zZ2lkICIldHlwZSBkZWNsYXJhdGlvbiBoYXMgbm8gPHR5cGVuYW1lPiIKKyN+IG1zZ3N0ciAiJXR5cGUgZGVrbGFyYWNpamEgbmVtYSAgPHR5cGVuYW1lPiIKKworI34gbXNnaWQgImludmFsaWQgJSV0eXBlIGRlY2xhcmF0aW9uIGR1ZSB0byBpdGVtOiAlcyIKKyN+IG1zZ3N0ciAibmVkb3p2b2xqZW5hICUldHlwZSBkZWtsYXJhY2lqYSB6Ym9nOiAlcyIKKworI34gbXNnaWQgImludmFsaWQgdGV4dCAoJXMpIC0gbnVtYmVyIHNob3VsZCBiZSBhZnRlciBpZGVudGlmaWVyIgorI34gbXNnc3RyICJuZWRvenZvbGplbm8gdGVrc3QgKCVzKSAtIGJyb2ogYmkgdHJlYmFvIGJpdGkgbmFrb24gaWRlbnRpZmlrYXRvcmEiCisKKyN+IG1zZ2lkICJ1bm1hdGNoZWQgJXMiCisjfiBtc2dzdHIgIm5pamUgcHJvbmHEkWVuICVzIgorCisjfiBtc2dpZCAiYXJndW1lbnQgb2YgJSVleHBlY3QgaXMgbm90IGFuIGludGVnZXIiCisjfiBtc2dzdHIgImFyZ3VtZW50IG9kICUlZXhwZWN0IG5pamUgY2lqZWxpIGJyb2oiCisKKyN+IG1zZ2lkICJ1bnJlY29nbml6ZWQgaXRlbSAlcywgZXhwZWN0ZWQgYW4gaWRlbnRpZmllciIKKyN+IG1zZ3N0ciAibmVwcmVwb3puYXRpICVzLCBvxI1la2l2YW4gbmFrb24gaWRlbnRpZmlrYXRvcmEiCisKKyN+IG1zZ2lkICJleHBlY3RlZCBzdHJpbmcgY29uc3RhbnQgaW5zdGVhZCBvZiAlcyIKKyN+IG1zZ3N0ciAib8SNZWtpdmFuYSB6bmFrb3ZuYSBrb25zdGFuYSB1bWplc3RvICVzIgorCisjfiBtc2dpZCAidW5yZWNvZ25pemVkOiAlcyIKKyN+IG1zZ3N0ciAibmVwcmVwb3puYXRpOiAlcyIKKworI34gbXNnaWQgIm5vIGlucHV0IGdyYW1tYXIiCisjfiBtc2dzdHIgIm5lbWEgdWxhem5lIGdyYW1hdGlrZSIKKworI34gbXNnaWQgInVudGVybWluYXRlZCAlZ3VhcmQgY2xhdXNlIgorI34gbXNnc3RyICJuZXphdnLFoWVuYSAlZ3VhcmQga2xhdXp1bGEiCisKKyN+IG1zZ2lkICJpbGwtZm9ybWVkIHJ1bGU6IGluaXRpYWwgc3ltYm9sIG5vdCBmb2xsb3dlZCBieSBjb2xvbiIKKyN+IG1zZ3N0ciAibG/FoWUgcHJhdmlsbzogemFyZXogbmUgYmkgdHJlYmFvIHNsaWplZGl0aSBwb8SNZXRuaSBzaW1ib2wiCisKKyN+IG1zZ2lkICJncmFtbWFyIHN0YXJ0cyB3aXRoIHZlcnRpY2FsIGJhciIKKyN+IG1zZ3N0ciAiZ3JhbWF0aWthIHBvxI1pbmplIHNhIG9rb21pdG9tIGNydG9tIgorCisjfiBtc2dpZCAicHJldmlvdXMgcnVsZSBsYWNrcyBhbiBlbmRpbmcgYDsnIgorI34gbXNnc3RyICJwcmV0aG9kbm9tIHByYXZpbHUgbmVkb3N0YWplIHphdnLFoWV0YWsgYDsnIgorCisjfiBtc2dpZCAidHdvIEBwcmVjJ3MgaW4gYSByb3ciCisjfiBtc2dzdHIgImR2YSBAcHJlYydzIHUgcmV0a3UiCisKKyN+IG1zZ2lkICIlJWd1YXJkIHByZXNlbnQgYnV0ICUlc2VtYW50aWNfcGFyc2VyIG5vdCBzcGVjaWZpZWQiCisjfiBtc2dzdHIgIiUlZ3VhcmQgcHJpc3V0YW4gYWxpICUlc2VtYW50aWNfcGFyc2VyIG5pamUgc3BlY2lmaWNpcmFuIgorCisjfiBtc2dpZCAidHdvIGFjdGlvbnMgYXQgZW5kIG9mIG9uZSBydWxlIgorI34gbXNnc3RyICJkdmlqZSBha2NpamUgcHJpIGtyYWp1IGplZG5vZyBwcmF2aWxhIgorCisjfiBtc2dpZCAidG9rZW5zICVzIGFuZCAlcyBib3RoIGFzc2lnbmVkIG51bWJlciAlZCIKKyN+IG1zZ3N0ciAib2JqZW1hIHpuYWtvdmltYSAlcyBpICVzIGplIHByaWRydcW+ZW4gYnJvaiAlZCIKKworI34gbXNnaWQgImNvbmZsaWN0aW5nIHByZWNlZGVuY2VzIGZvciAlcyBhbmQgJXMiCisjfiBtc2dzdHIgImtvbmZsaWt0IHUgcHJldGhvZG5pY2kgemEgJXMgYW5kICVzIgorCisjfiBtc2dpZCAiVXNlbGVzcyBub250ZXJtaW5hbHM6IgorI34gbXNnc3RyICJCZXNrb3Jpc25pIG5lemF2csWhbmkgem5ha292aToiCisKKyN+IG1zZ2lkICJUZXJtaW5hbHMgd2hpY2ggYXJlIG5vdCB1c2VkOiIKKyN+IG1zZ3N0ciAiWmF2csWhbmkgem5ha292aSBrb2ppIG5pc3Uga29yacWhdGVuaToiCisKKyN+IG1zZ2lkICJVc2VsZXNzIHJ1bGVzOiIKKyN+IG1zZ3N0ciAiQmVza29yaXNuYSBwcmF2aWxhOiIKKworI34gbXNnaWQgIiVkIHJ1bGUgbmV2ZXIgcmVkdWNlZFxuIgorI34gbXNnaWRfcGx1cmFsICIlZCBydWxlcyBuZXZlciByZWR1Y2VkXG4iCisjfiBtc2dzdHJbMF0gIiVkIHByYXZpbG8gbmlqZSBuaWthZCByZWR1Y2lyYW5vXG4iCisjfiBtc2dzdHJbMV0gIiVkIHByYXZpbGEgbmlzdSBuaWthZCByZWR1Y2lyYW5hXG4iCisKKyN+IG1zZ2lkICIlZCB1c2VsZXNzIG5vbnRlcm1pbmFsIgorI34gbXNnaWRfcGx1cmFsICIlZCB1c2VsZXNzIG5vbnRlcm1pbmFscyIKKyN+IG1zZ3N0clswXSAiJWQgYmVza29yaXNhbiBuZXphdnLFoW5pIHpuYWsiCisjfiBtc2dzdHJbMV0gIiVkIGJlc2tvcmlzbmloIG5lemF2csWhbmloIHpuYWtvdmEiCisKKyN+IG1zZ2lkICIgYW5kICIKKyN+IG1zZ3N0ciAiIGkiCisKKyN+IG1zZ2lkICIlZCB1c2VsZXNzIHJ1bGUiCisjfiBtc2dpZF9wbHVyYWwgIiVkIHVzZWxlc3MgcnVsZXMiCisjfiBtc2dzdHJbMF0gIiVkIGJlc2tvcmlzbm8gcHJhdmlsbyIKKyN+IG1zZ3N0clsxXSAiJWQgYmVza29yaXNuaWggcHJhdmlsYSIKKworI34gbXNnaWQgIiVzOiBpbGxlZ2FsIG9wdGlvbiAtLSAlY1xuIgorI34gbXNnc3RyICIlczogbmVkb3p2b2xqZW5hIG9wY2lqYSAtLSAlY1xuIgpkaWZmIC0tZ2l0IGEvcG8vaWQuZ21vIGIvcG8vaWQuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNjU3ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9wby9pZC5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vaWQucG8gYi9wby9pZC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGJkYjFlCi0tLSAvZGV2L251bGwKKysrIGIvcG8vaWQucG8KQEAgLTAsMCArMSwxMjUwIEBACisjIFBlc2FuIGJhaGFzYSBpbmRvbmVzaWEgdW50dWsgYmlzb24KKyMgYmlzb24gMS44NzUgKEluZG9uZXNpYW4pCisjIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGJpc29uIHBhY2thZ2UuCisjCisjIFRlZGkgSGVyaXlhbnRvIDx0ZWRpX2hAZ214Lm5ldD4sIDIwMDIsIDIwMDMuCisjIFRlZGkgSGVyaXlhbnRvIDx0ZWRpX2hlcml5YW50b0B5YWhvby5jb20+LCAyMDA2LgorIyBBcmlmIEUuIE51Z3JvaG8gPGFyaWZfZW5kcm9AeWFob28uY29tPiwgMjAwOCwgMjAxMC4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGJpc29uLTIuNC4xYlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBidWctYmlzb25AZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEyLTEyLTEyIDE2OjA5KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTAyLTI3IDA3OjMwKzA3MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEFyaWYgRS4gTnVncm9obyA8YXJpZl9lbmRyb0B5YWhvby5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogSW5kb25lc2lhbiA8dHJhbnNsYXRpb24tdGVhbS1pZEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCisiTGFuZ3VhZ2U6IGlkXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0xOyBwbHVyYWw9MDtcbiIKKworIzogc3JjL2NvbXBsYWluLmM6MTIwIHNyYy9jb21wbGFpbi5jOjEzMSBzcmMvY29tcGxhaW4uYzoxNDAgc3JjL2NvbXBsYWluLmM6MTg4CisjOiBzcmMvY29tcGxhaW4uYzoxOTgKK21zZ2lkICJ3YXJuaW5nIgorbXNnc3RyICJwZXJpbmdhdGFuIgorCisjOiBzcmMvY29tcGxhaW4uYzoxNTEgc3JjL2NvbXBsYWluLmM6MTYwIHNyYy9jb21wbGFpbi5jOjE2NworIywgZnV6enkKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiS2VzYWxhaGFuIEkvTyIKKworIzogc3JjL2NvbXBsYWluLmM6MjA4IHNyYy9jb21wbGFpbi5jOjIxNQorbXNnaWQgImZhdGFsIGVycm9yIgorbXNnc3RyICJrZXNhbGFoYW4gZmF0YWwiCisKKyM6IHNyYy9jb25mbGljdHMuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyBzaGlmdCIKK21zZ3N0ciAiICAgIEtvbmZsaWsgYW50YXJhIGF0dXJhbiAlZCBkYW4gdG9rZW4gJXMgZGlzZWxlc2Fpa2FuIHNlYmFnYWkgc2hpZnQiCisKKyM6IHNyYy9jb25mbGljdHMuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyByZWR1Y2UiCittc2dzdHIgIiAgICBLb25mbGlrIGFudGFyYSBhdHVyYW4gJWQgZGFuIHRva2VuICVzIGRpc2VsZXNhaWthbiBzZWJhZ2FpIHJlZHVjZSIKKworIzogc3JjL2NvbmZsaWN0cy5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIGFuIGVycm9yIgorbXNnc3RyICIiCisiICAgIEtvbmZsaWsgYW50YXJhIGF0dXJhbiAlZCBkYW4gdG9rZW4gJXMgZGlzZWxlc2Fpa2FuIHNlYmFnYWkga2VzYWxhaGFuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgc2hpZnQvcmVkdWNlLCAlZCByZWR1Y2UvcmVkdWNlXG4iCittc2dzdHIgImtvbmZsaWs6ICVkIGdlc2VyL2t1cmFuZ2ksICVkIGt1cmFuZ2kva3VyYW5naVxuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgc2hpZnQvcmVkdWNlXG4iCittc2dzdHIgImtvbmZsaWs6ICVkIGdlc2VyL2t1cmFuZ2lcbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdHM6ICVkIHJlZHVjZS9yZWR1Y2VcbiIKK21zZ3N0ciAia29uZmxpazogJWQga3VyYW5naS9rdXJhbmdpXG4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhdGUgJWQgIgorbXNnc3RyICJTdGF0ZSAlZCAiCisKKyM6IHNyYy9jb25mbGljdHMuYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSVleHBlY3QtcnIgYXBwbGllcyBvbmx5IHRvIEdMUiBwYXJzZXJzIgorbXNnc3RyICIlJWV4cGVjdC1yciBoYW55YSBiZXJsYWt1IGJhZ2kgcGFyc2VyIEdMUiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjYxNgorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCAlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3QiCittc2dpZF9wbHVyYWwgImV4cGVjdGVkICVkIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMiCittc2dzdHJbMF0gIm1lbmdoYXJhcGthbiAlZCBzaGlmdC9yZWR1Y2Uga29uZmxpayIKKworIzogc3JjL2NvbmZsaWN0cy5jOjYyMQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCAlZCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJleHBlY3RlZCAlZCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAiZGloYXJhcGthbiAlZCBrdXJhbmdpL2t1cmFuZ2kga29uZmxpayIKKworIzogc3JjL2ZpbGVzLmM6MTE0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IG9wZW4iCittc2dzdHIgInRpZGFrIGRhcGF0IG1lbWJ1a2EgZmlsZSBgJXMnIgorCisjOiBzcmMvZmlsZXMuYzoxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5wdXQvb3V0cHV0IGVycm9yIgorbXNnc3RyICIiCisKKyM6IHNyYy9maWxlcy5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2UgZmlsZSIKK21zZ3N0ciAidGlkYWsgZGFwYXQgbWVudXR1cCBmaWxlIgorCisjOiBzcmMvZmlsZXMuYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gb3ZlcndyaXRlIHRoZSBpbnB1dCBmaWxlICVzIgorbXNnc3RyICJtZW5vbGFrIHVudHVrIG92ZXJ3cml0ZSBiZXJrYXMgbWFzdWthbiAlcyIKKworIzogc3JjL2ZpbGVzLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0aW5nIG91dHB1dHMgdG8gZmlsZSAlcyIKK21zZ3N0ciAib3V0cHV0IGtvbmZsaWsga2UgZmlsZSAlcyIKKworIzogc3JjL2dldGFyZ3MuYzoyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5IGAlcyAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIgorbXNnc3RyICJDb2JhIGAlcyAtLWhlbHAnIHVudHVrIGluZm9ybWFzaSBsZWJpaCBsYW5qdXQuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbT1BUSU9OXS4uLiBGSUxFXG4iCittc2dzdHIgIlBlbmdndW5hYW46ICVzIFtPUFRJT05dLi4uIEZJTEVcbiIKKworIzogc3JjL2dldGFyZ3MuYzozMDIKK21zZ2lkICIiCisiR2VuZXJhdGUgYSBkZXRlcm1pbmlzdGljIExSIG9yIGdlbmVyYWxpemVkIExSIChHTFIpIHBhcnNlciBlbXBsb3lpbmdcbiIKKyJMQUxSKDEpLCBJRUxSKDEpLCBvciBjYW5vbmljYWwgTFIoMSkgcGFyc2VyIHRhYmxlcy4gIElFTFIoMSkgYW5kXG4iCisiY2Fub25pY2FsIExSKDEpIHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6MzA5Cittc2dpZCAiIgorIk1hbmRhdG9yeSBhcmd1bWVudHMgdG8gbG9uZyBvcHRpb25zIGFyZSBtYW5kYXRvcnkgZm9yIHNob3J0IG9wdGlvbnMgdG9vLlxuIgorbXNnc3RyICJBcmd1bWVuIHdhamliIHVudHVrIG9wc2kgcGFuamFuZyBqdWdhIHdhamliIHVudHVrIG9wc2kgcGVuZGVrIGp1Z2EuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzEyCittc2dpZCAiVGhlIHNhbWUgaXMgdHJ1ZSBmb3Igb3B0aW9uYWwgYXJndW1lbnRzLlxuIgorbXNnc3RyICJJdHUganVnYSBiZW5hciB1bnR1ayBvcHNpb25hbCBhcmd1bWVuLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMxNgorIywgZnV6enkKK21zZ2lkICIiCisiXG4iCisiT3BlcmF0aW9uIG1vZGVzOlxuIgorIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKKyIgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCisiICAgICAgLS1wcmludC1sb2NhbGVkaXIgICAgICBvdXRwdXQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgbG9jYWxlLWRlcGVuZGVudCAiCisiZGF0YVxuIgorIiAgICAgIC0tcHJpbnQtZGF0YWRpciAgICAgICAgb3V0cHV0IGRpcmVjdG9yeSBjb250YWluaW5nIHNrZWxldG9ucyBhbmQgWFNMVFxuIgorIiAgLXksIC0teWFjYyAgICAgICAgICAgICAgICAgZW11bGF0ZSBQT1NJWCBZYWNjXG4iCisiICAtVywgLS13YXJuaW5nc1s9Q0FURUdPUlldICByZXBvcnQgdGhlIHdhcm5pbmdzIGZhbGxpbmcgaW4gQ0FURUdPUllcbiIKKyIgIC1mLCAtLWZlYXR1cmVbPUZFQVRVUkVdICAgIGFjdGl2YXRlIG1pc2NlbGxhbmVvdXMgZmVhdHVyZXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIk1vZGUgT3BlcmFzaTpcbiIKKyIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIHRhbXBpbGthbiBiYW50dWFuIGluaSBkYW4ga2VsdWFyXG4iCisiICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICB0YW1waWxrYW4gaW5mb3JtYXNpIHZlcnNpIGRhbiBrZWx1YXJcbiIKKyIgICAgICAgLS1wcmludC1sb2NhbGVkaXIgICAgIGRpcmVrdG9yaSBoYXNpbCBiZXJpc2lrYW4gZGF0YSBsb2NhbGUtIgorImRlcGVuZGVudFxuIgorIiAgICAgICAtLXByaW50LWRhdGFkaXIgICAgICAgZGlyZWt0b3JpIGhhc2lsIGJlcmlzaWthbiBrZXJhbmdrYSBkYW4gWFNMVFxuIgorIiAgLXksIC0teWFjYyAgICAgICAgICAgICAgICAgZW11bGFzaWthbiBQT1NJWCB5YWNjXG4iCisiICAtVywgLS13YXJuaW5ncz1bS0FURUdPUkldICBsYXBvcmthbiBwZXJpbmdhdGFuIGtlZ2FnYWxhbiBkYWxhbSBLQVRFR09SSVxuIgorIlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMyOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnNlcjpcbiIKKyIgIC1MLCAtLWxhbmd1YWdlPUxBTkdVQUdFICAgICAgICAgIHNwZWNpZnkgdGhlIG91dHB1dCBwcm9ncmFtbWluZyBsYW5ndWFnZVxuIgorIiAgLVMsIC0tc2tlbGV0b249RklMRSAgICAgICAgICAgICAgc3BlY2lmeSB0aGUgc2tlbGV0b24gdG8gdXNlXG4iCisiICAtdCwgLS1kZWJ1ZyAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50IHRoZSBwYXJzZXIgZm9yIGRlYnVnZ2luZ1xuIgorIiAgICAgIC0tbG9jYXRpb25zICAgICAgICAgICAgICAgICAgZW5hYmxlIGxvY2F0aW9uIHN1cHBvcnRcbiIKKyIgIC1ELCAtLWRlZmluZT1OQU1FWz1WQUxVRV0gICAgICAgIHNpbWlsYXIgdG8gJyVkZWZpbmUgTkFNRSBcIlZBTFVFXCInXG4iCisiICAtRiwgLS1mb3JjZS1kZWZpbmU9TkFNRVs9VkFMVUVdICBvdmVycmlkZSAnJWRlZmluZSBOQU1FIFwiVkFMVUVcIidcbiIKKyIgIC1wLCAtLW5hbWUtcHJlZml4PVBSRUZJWCAgICAgICAgIHByZXBlbmQgUFJFRklYIHRvIHRoZSBleHRlcm5hbCBzeW1ib2xzXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXByZWNhdGVkIGJ5ICctRGFwaS5wcmVmaXg9UFJFRklYJ1xuIgorIiAgLWwsIC0tbm8tbGluZXMgICAgICAgICAgICAgICAgICAgZG9uJ3QgZ2VuZXJhdGUgJyNsaW5lJyBkaXJlY3RpdmVzXG4iCisiICAtaywgLS10b2tlbi10YWJsZSAgICAgICAgICAgICAgICBpbmNsdWRlIGEgdGFibGUgb2YgdG9rZW4gbmFtZXNcbiIKK21zZ3N0ciAiIgorIlBhcnNlcjpcbiIKKyIgIC1MLCAtLWxhbmd1YWdlPUJBSEFTQSAgICAgIHNwZXNpZmlrYXNpa2FuIGJhaGFzYSBrZWx1YXJhbiBwZW1yb2dyYW1hblxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluaSBhZGFsYWggZml0dXIgdWppIGNvYmEpXG4iCisiICAtUywgLS1za2VsZXRvbj1GSUxFICAgICAgICBzcGVjaWZpa2FzaWthbiByYW5na2EgeWFuZyBha2FuIGRpZ3VuYWthblxuIgorIiAgLXQsIC0tZGVidWcgICAgICAgICAgICAgICAgaW5zdHJ1bWVuIHBhcnNlciB1bnR1ayBkZWJ1Z2dpbmdcbiIKKyIgICAgICAtLWxvY2F0aW9ucyAgICAgICAgICAgIGFrdGlma2FuIGxva2FzaSBwZXJoaXR1bmdhblxuIgorIiAgLXAsIC0tbmFtZS1wcmVmaXg9UFJFRklYICAgdGFtYmFoa2FuIFBSRUZJWCBrZSBzaW1ib2wgZWtzdGVybmFsXG4iCisiICAtbCwgLS1uby1saW5lcyAgICAgICAgICAgICBqYW5nYW4gaGFzaWxrYW4gZGlyZWt0aXYgYCNsaW5lJ1xuIgorIiAgLW4sIC0tbm8tcGFyc2VyICAgICAgICAgICAgaGFzaWxrYW4gaGFueWEgdGFiZWxcbiIKKyIgIC1rLCAtLXRva2VuLXRhYmxlICAgICAgICAgIHNlcnRha2FuIHRhYmVsIG5hbWEgdG9rZW5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozNDYKKyMsIGZ1enp5Cittc2dpZCAiIgorIk91dHB1dDpcbiIKKyIgICAgICAtLWRlZmluZXNbPUZJTEVdICAgICAgIGFsc28gcHJvZHVjZSBhIGhlYWRlciBmaWxlXG4iCisiICAtZCAgICAgICAgICAgICAgICAgICAgICAgICBsaWtld2lzZSBidXQgY2Fubm90IHNwZWNpZnkgRklMRSAoZm9yIFBPU0lYICIKKyJZYWNjKVxuIgorIiAgLXIsIC0tcmVwb3J0PVRISU5HUyAgICAgICAgYWxzbyBwcm9kdWNlIGRldGFpbHMgb24gdGhlIGF1dG9tYXRvblxuIgorIiAgICAgIC0tcmVwb3J0LWZpbGU9RklMRSAgICAgd3JpdGUgcmVwb3J0IHRvIEZJTEVcbiIKKyIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIHNhbWUgYXMgYC0tcmVwb3J0PXN0YXRlJ1xuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg9UFJFRklYICAgc3BlY2lmeSBhIFBSRUZJWCBmb3Igb3V0cHV0IGZpbGVzXG4iCisiICAtbywgLS1vdXRwdXQ9RklMRSAgICAgICAgICBsZWF2ZSBvdXRwdXQgdG8gRklMRVxuIgorIiAgLWcsIC0tZ3JhcGhbPUZJTEVdICAgICAgICAgYWxzbyBvdXRwdXQgYSBncmFwaCBvZiB0aGUgYXV0b21hdG9uXG4iCisiICAteCwgLS14bWxbPUZJTEVdICAgICAgICAgICBhbHNvIG91dHB1dCBhbiBYTUwgcmVwb3J0IG9mIHRoZSBhdXRvbWF0b25cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGUgWE1MIHNjaGVtYSBpcyBleHBlcmltZW50YWwpXG4iCittc2dzdHIgIiIKKyJPdXRwdXQ6XG4iCisiICAgICAgLS1kZWZpbmVzICAgICAgICAgICAgICBqdWdhIGhhc2lsa2FuIGZpbGUgaGVhZGVyXG4iCisiICAtZCAgICAgICAgICAgICAgICAgICAgICAgICBzZXBlcnRpIGl0dSB0ZXRhcGkgdGlkYWsgZGFwYXQgIgorIm1lbnNwZXNpZmlrYXNpa2FuIEJFUktBUyAodW50dWsgUE9TSVggWWFjYylcbiIKKyIgIC1yLCAtLXJlcG9ydD1USElOR1MgICAgICAgIGp1Z2EgaGFzaWxrYW4gZGV0aWwgdGVudGFuZyBvdG9tYXRvblxuIgorIiAgICAgIC0tcmVwb3J0LWZpbGU9QkVSS0FTICAgdHVsaXMgbGFwb3JhbiBrZSBCRVJLQVNcbiIKKyIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIHNhbWEgc2VwZXJ0aSBgLS1yZXBvcnQ9c3RhdGUnXG4iCisiICAtYiwgLS1maWxlLXByZWZpeD1QUkVGSVggICBzcGVzaWZpa2FzaWthbiBQUkVGSVggdW50dWsgZmlsZSBvdXRwdXRcbiIKKyIgIC1vLCAtLW91dHB1dD1GSUxFICAgICAgICAgIHNpbXBhbiBvdXRwdXQga2UgRklMRVxuIgorIiAgLWcsIC0tZ3JhcGggICAgICAgICAgICAgICAganVnYSBoYXNpbGthbiBkZXNrcmlwc2kgVkNHIGF1dG9tYXRvblxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM2MQorIywgZnV6enkKK21zZ2lkICIiCisiV2FybmluZyBjYXRlZ29yaWVzIGluY2x1ZGU6XG4iCisiICBgbWlkcnVsZS12YWx1ZXMnICB1bnNldCBvciB1bnVzZWQgbWlkcnVsZSB2YWx1ZXNcbiIKKyIgIGB5YWNjJyAgICAgICAgICAgIGluY29tcGF0aWJpbGl0aWVzIHdpdGggUE9TSVggWWFjY1xuIgorIiAgYGNvbmZsaWN0cy1zcicgICAgUy9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGNvbmZsaWN0cy1ycicgICAgUi9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGRlcHJlY2F0ZWQnICAgICAgb2Jzb2xldGUgY29uc3RydWN0c1xuIgorIiAgYG90aGVyJyAgICAgICAgICAgYWxsIG90aGVyIHdhcm5pbmdzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgYWxsJyAgICAgICAgICAgICBhbGwgdGhlIHdhcm5pbmdzXG4iCisiICBgbm8tQ0FURUdPUlknICAgICB0dXJuIG9mZiB3YXJuaW5ncyBpbiBDQVRFR09SWVxuIgorIiAgYG5vbmUnICAgICAgICAgICAgdHVybiBvZmYgYWxsIHRoZSB3YXJuaW5nc1xuIgorIiAgYGVycm9yJyAgICAgICAgICAgdHJlYXQgd2FybmluZ3MgYXMgZXJyb3JzXG4iCittc2dzdHIgIiIKKyJLYXRlZ29yaSBwZXJpbmdhdGFuIHRlcm1hc3VrOlxuIgorIiAgYG1pZHJ1bGUtdmFsdWVzJyAgdW5zZXQgYXRhdSB0aWRhayBtZW5nZ3VuYWthbiBhdHVyYW4gbWlkcnVsZVxuIgorIiAgYHlhY2MnICAgICAgICAgICAgdGlkYWsga29tcGF0aWJlbCBkZW5nYW4gUE9TSVggWUFDQ1xuIgorIiAgYGFsbCcgICAgICAgICAgICAgc2VsdXJ1aCBwZXJpbmdhdGFuXG4iCisiICBgbm8tQ0FURUdPUlknICAgICBub24tYWt0aWZrYW4gcGVyaW5nYXRhbiBkaSBLQVRFR09SSVxuIgorIiAgYG5vbmUnICAgICAgICAgICAgbm9uLWFrdGlma2FuIHNlbHVydWggcGVyaW5nYXRhblxuIgorIiAgYGVycm9yJyAgICAgICAgICAgcGVybGFrdWthbiBwZXJpbmdhdGFuIHNlYmFnYWkgZXJyb3JzXG4iCisiXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzc2Cittc2dpZCAiIgorIlRISU5HUyBpcyBhIGxpc3Qgb2YgY29tbWEgc2VwYXJhdGVkIHdvcmRzIHRoYXQgY2FuIGluY2x1ZGU6XG4iCisiICBgc3RhdGUnICAgICAgICBkZXNjcmliZSB0aGUgc3RhdGVzXG4iCisiICBgaXRlbXNldCcgICAgICBjb21wbGV0ZSB0aGUgY29yZSBpdGVtIHNldHMgd2l0aCB0aGVpciBjbG9zdXJlXG4iCisiICBgbG9va2FoZWFkJyAgICBleHBsaWNpdGx5IGFzc29jaWF0ZSBsb29rYWhlYWQgdG9rZW5zIHRvIGl0ZW1zXG4iCisiICBgc29sdmVkJyAgICAgICBkZXNjcmliZSBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIHNvbHZpbmdcbiIKKyIgIGBhbGwnICAgICAgICAgIGluY2x1ZGUgYWxsIHRoZSBhYm92ZSBpbmZvcm1hdGlvblxuIgorIiAgYG5vbmUnICAgICAgICAgZGlzYWJsZSB0aGUgcmVwb3J0XG4iCittc2dzdHIgIiIKKyJUSElOR1MgYWRhbGFoIGRhZnRhciBrYXRhIHlhbmcgZGlwaXNhaGthbiBrb21hIG1lbmNha3VwOlxuIgorIiAgYHN0YXRlJyAgICAgICAgbWVuZ2dhbWJhcmthbiBzdGF0ZVxuIgorIiAgYGl0ZW1zZXQnICAgICAgbGVuZ2thcGkgaGltcHVuYW4gaXRlbSBpbnRpIGRlbmdhbiBrbG9zdXJueWFcbiIKKyIgIGBsb29rYWhlYWQnICAgIGFzb3NpYXNpa2FuIGxvb2thaGVhZHMga2UgaXRlbSBzZWNhcmEgZWtzcGxpc2l0XG4iCisiICBgc29sdmVkJyAgICAgICBnYW1iYXJrYW4gcGVueWVsZXNhaWFuIGtvbmZsaWsgc2hpZnQvcmVkdWNlXG4iCisiICBgYWxsJyAgICAgICAgICBzZXJ0YWthbiBzZW11YSBpbmZvcm1hc2kgZGkgYXRhc1xuIgorIiAgYG5vbmUnICAgICAgICAgdGlhZGFrYW4gbGFwb3JhblxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM4NworbXNnaWQgIiIKKyJGRUFUVVJFIGlzIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMgdGhhdCBjYW4gaW5jbHVkZTpcbiIKKyIgIGBjYXJldCcgICAgICAgIHNob3cgZXJyb3JzIHdpdGggY2FyZXRzXG4iCisiICBgYWxsJyAgICAgICAgICBhbGwgb2YgdGhlIGFib3ZlXG4iCisiICBgbm9uZScgICAgICAgICBkaXNhYmxlIGFsbCBvZiB0aGUgYWJvdmVcbiIKKyIgICIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkxhcG9ya2FuIGJ1Z3Mga2UgPCVzPi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaG9tZSBwYWdlOiA8JXM+LlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk3Cittc2dpZCAiR2VuZXJhbCBoZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4uXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IFJlcGxhY2UgTEFOR19DT0RFIGluIHRoaXMgVVJMIHdpdGggeW91ciBsYW5ndWFnZQorIy4gY29kZSA8aHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS9MQU5HX0NPREUuaHRtbD4gdG8KKyMuIGZvcm0gb25lIG9mIHRoZSBVUkxzIGF0IGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vLgorIy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRoZSBlbnRpcmUgVVJMIHdpdGggeW91ciB0cmFuc2xhdGlvbiB0ZWFtJ3MKKyMuIGVtYWlsIGFkZHJlc3MuCisjOiBzcmMvZ2V0YXJncy5jOjQxMAorbXNnaWQgIlJlcG9ydCB0cmFuc2xhdGlvbiBidWdzIHRvIDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtLz4uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzo0MTIKK21zZ2lkICJGb3IgY29tcGxldGUgZG9jdW1lbnRhdGlvbiwgcnVuOiBpbmZvIGJpc29uLlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImJpc29uIChHTlUgQmlzb24pICVzIgorbXNnc3RyICJiaXNvbiAoR05VIEJpc29uKSAlcyIKKworIzogc3JjL2dldGFyZ3MuYzo0MzAKK21zZ2lkICJXcml0dGVuIGJ5IFJvYmVydCBDb3JiZXR0IGFuZCBSaWNoYXJkIFN0YWxsbWFuLlxuIgorbXNnc3RyICJXcml0dGVuIGJ5IFJvYmVydCBDb3JiZXR0IGFuZCBSaWNoYXJkIFN0YWxsbWFuLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3B5cmlnaHQgKEMpICVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorbXNnc3RyICJDb3B5cmlnaHQgKEMpICVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQzNworbXNnaWQgIiIKKyJUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOT1xuIgorIndhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLlxuIgorbXNnc3RyICIiCisiVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk9cbiIKKyJ3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgc2tlbGV0b24gZGVjbGFyYXRpb25zIGFyZSBpbnZhbGlkIgorbXNnc3RyICJkZWtsYXJhc2kga2VyYW5na2EgZ2FuZGEgdGlkYWsgdmFsaWQiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBsYW5ndWFnZSIKK21zZ3N0ciAiYmFoYXNhIHRpZGFrIHZhbGlkOiBgJXMnIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ3OQorbXNnaWQgIm11bHRpcGxlIGxhbmd1YWdlIGRlY2xhcmF0aW9ucyBhcmUgaW52YWxpZCIKK21zZ3N0ciAiZGVrbGFyYXNpIGJhaGFzYSBnYW5kYSB0aWRhayB2YWxpZCIKKworIzogc3JjL2dldGFyZ3MuYzo3NDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBtaXNzaW5nIG9wZXJhbmQiCittc2dzdHIgIm9wZXJhbmQgaGlsYW5nIHNldGVsYWggYCVzJyIKKworIzogc3JjL2dldGFyZ3MuYzo3NDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImV4dHJhIG9wZXJhbmQgJXMiCittc2dzdHIgIm9wZXJhbmQgZWtzdHJhIGAlcyciCisKKyM6IHNyYy9ncmFtLmM6MTEyCittc2dpZCAiZW1wdHkiCittc2dzdHIgImtvc29uZyIKKworIzogc3JjL2dyYW0uYzoyMDEKK21zZ2lkICJHcmFtbWFyIgorbXNnc3RyICJHcmFtbWFyIgorCisjOiBzcmMvZ3JhcGh2aXouYzo0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiLy8gR2VuZXJhdGVkIGJ5ICVzLlxuIgorIi8vIFJlcG9ydCBidWdzIHRvIDwlcz4uXG4iCisiLy8gSG9tZSBwYWdlOiA8JXM+LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9sb2NhdGlvbi5jOjkzIHNyYy9zY2FuLWdyYW0ubDo4NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSBudW1iZXIgb3ZlcmZsb3ciCittc2dzdHIgIm92ZXJmbG93IG5vbW9yIGJhcmlzIgorCisjOiBzcmMvbG9jYXRpb24uYzo5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb2x1bW4gbnVtYmVyIG92ZXJmbG93IgorbXNnc3RyICJvdmVyZmxvdyBqdW1sYWgga29sb20iCisKKyM6IHNyYy9tYWluLmM6MTQ2Cittc2dpZCAicnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzIgorbXNnc3RyICJhdHVyYW4gdGlkYWsgYmVyZ3VuYSBkYWxhbSBwYXJzZXIga2FyZW5hIGtvbmZsaWsiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NDUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlJWRlZmluZSB2YXJpYWJsZSAlcyByZWRlZmluZWQiCittc2dzdHIgIiVzIGAlcycgZGlkZWZpbmlzaWthbiB1bGFuZyIKKworIzogc3JjL211c2NsZS10YWIuYzo0NTMKK21zZ2lkICJwcmV2aW91cyBkZWZpbml0aW9uIgorbXNnc3RyICJkZWZpbmlzaSBzZWJlbHVtbnlhIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ5MCBzcmMvbXVzY2xlLXRhYi5jOjUwNCBzcmMvbXVzY2xlLXRhYi5jOjU1NgorIzogc3JjL211c2NsZS10YWIuYzo2MjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgJXMiCittc2dzdHIgIm5pbGFpIHRpZGFrIHZhbGlkIHVudHVrICUlZGVmaW5lIHZhcmlhYmxlIGAlcyc6IGAlcyciCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NTUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlJWRlZmluZSBCb29sZWFuIHZhcmlhYmxlICVzIgorbXNnc3RyICJuaWxhaSB0aWRhayB2YWxpZCB1bnR1ayAlJWRlZmluZSBCb29sZWFuIHZhcmlhYmxlIGAlcyciCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjA5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlJWRlZmluZSB2YXJpYWJsZSAlczogJXMiCittc2dzdHIgIm5pbGFpIHRpZGFrIHZhbGlkIHVudHVrICUlZGVmaW5lIHZhcmlhYmxlIGAlcyc6IGAlcyciCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjEzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJhY2NlcHRlZCB2YWx1ZTogJXMiCittc2dzdHIgIm5pbGFpIHRpZGFrIGRpZ3VuYWthbjogJCVkIgorCisjOiBzcmMvcGFyc2UtZ3JhbS55Ojc0NworIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGlkZW50aWZpZXIgaW4gcGFyYW1ldGVyIGRlY2xhcmF0aW9uIgorbXNnc3RyICJpZGVudGlmaWVyIHRpZGFrIGFkYSBkYWxhbSBkZWtsYXJhc2kgcGFyYW1ldGVyIgorCisjOiBzcmMvcHJpbnQuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICIgdHlwZSAlZCBpcyAlc1xuIgorbXNnc3RyICIgdGlwZSAlZCBhZGFsYWggJXNcbiIKKworIzogc3JjL3ByaW50LmM6MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgInNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgJWRcbiIKK21zZ3N0ciAiZ2VzZXIsIGRhbiBrZSBzdGF0ZSAlZFxuIgorCisjOiBzcmMvcHJpbnQuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ28gdG8gc3RhdGUgJWRcbiIKK21zZ3N0ciAia2Ugc3RhdGUgJWRcbiIKKworIzogc3JjL3ByaW50LmM6MjAzCittc2dpZCAiZXJyb3IgKG5vbmFzc29jaWF0aXZlKVxuIgorbXNnc3RyICJrZXNhbGFoYW4obm9uYXNvc2lhdGlmKVxuIgorCisjOiBzcmMvcHJpbnQuYzoyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkdWNlIHVzaW5nIHJ1bGUgJWQgKCVzKSIKK21zZ3N0ciAia3VyYW5naSBndW5ha2FuIGF0dXJhbiAlZCAoJXMpIgorCisjOiBzcmMvcHJpbnQuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWNjZXB0IgorbXNnc3RyICJ0ZXJpbWEiCisKKyM6IHNyYy9wcmludC5jOjI2NCBzcmMvcHJpbnQuYzozMzgKK21zZ2lkICIkZGVmYXVsdCIKK21zZ3N0ciAiJGRlZmF1bHQiCisKKyM6IHNyYy9wcmludC5jOjM3MyBzcmMvcHJpbnRfZ3JhcGguYzo3OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU3RhdGUgJWQiCittc2dzdHIgIlN0YXRlICVkICIKKworIzogc3JjL3ByaW50LmM6NDA5Cittc2dpZCAiVGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyIgorbXNnc3RyICJUZXJtaW5hbCwgZGVuZ2FuIGF0dXJhbiB0ZW1wYXQgbWVyZWthIG11bmN1bCIKKworIzogc3JjL3ByaW50LmM6NDM2Cittc2dpZCAiTm9udGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyIgorbXNnc3RyICJOb250ZXJtaW5hbCwgZGVuZ2FuIGF0dXJhbiB0ZW1wYXQgbWVyZWthIG11bmN1bCIKKworIzogc3JjL3ByaW50LmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiBsZWZ0OiIKK21zZ3N0ciAiIGRpIGtpcmk6IgorCisjOiBzcmMvcHJpbnQuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uIHJpZ2h0OiIKK21zZ3N0ciAiIGRpIGthbmFuOiIKKworIzogc3JjL3ByaW50LmM6NTEwCittc2dpZCAiUnVsZXMgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cyIKK21zZ3N0ciAiYXR1cmFuIHRpZGFrIGJlcmd1bmEgZGFsYW0gcGFyc2VyIGthcmVuYSBrb25mbGlrIgorCisjOiBzcmMvcmVhZGVyLmM6NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgJXMgZGVjbGFyYXRpb25zIgorbXNnc3RyICJkZWtsYXJhc2kgZ2FuZGEgJXMiCisKKyM6IHNyYy9yZWFkZXIuYzoxMzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInJlc3VsdCB0eXBlIGNsYXNoIG9uIG1lcmdlIGZ1bmN0aW9uICVzOiA8JXM+ICE9IDwlcz4iCittc2dzdHIgInRpcGUgaGFzaWwgYmVudHJvayBwYWRhIGZ1bmdzaSBtZXJnZSAnJXMnOiA8JXM+ICE9IDwlcz4iCisKKyM6IHNyYy9yZWFkZXIuYzoxMzkgc3JjL3N5bXRhYi5jOjE1NiBzcmMvc3ltdGFiLmM6MTY2IHNyYy9zeW10YWIuYzo5MzgKKyM6IHNyYy9zeW10YWIuYzo5NTMgc3JjL3N5bXRhYi5jOjk2OCBzcmMvc3ltdGFiLmM6OTgzCittc2dpZCAicHJldmlvdXMgZGVjbGFyYXRpb24iCittc2dzdHIgImRla2xhcmFzaSBzZWJlbHVtbnlhIgorCisjOiBzcmMvcmVhZGVyLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZWQgc3ltYm9sIG5hbWUgZm9yICVzIGlnbm9yZWQiCittc2dzdHIgIiIKKworIzogc3JjL3JlYWRlci5jOjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICJydWxlIGdpdmVuIGZvciAlcywgd2hpY2ggaXMgYSB0b2tlbiIKK21zZ3N0ciAiYXR1cmFuIGRpYmVyaWthbiB1bnR1ayAlcywgeWFuZyBtZXJ1cGFrYW4gc2VidWFoIHRva2VuIgorCisjOiBzcmMvcmVhZGVyLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgInR5cGUgY2xhc2ggb24gZGVmYXVsdCBhY3Rpb246IDwlcz4gIT0gPCVzPiIKK21zZ3N0ciAiYmVudHJva2FuIHRpcGUgcGFkYSBha3NpIGJha3U6IDwlcz4gIT0gPCVzPiIKKworIzogc3JjL3JlYWRlci5jOjMxMAorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBydWxlIGZvciB0eXBlZCBub250ZXJtaW5hbCwgYW5kIG5vIGFjdGlvbiIKK21zZ3N0ciAiYXR1cmFuIGtvc29uZyB1bnR1ayBub250ZXJtaW5hbCB0eXBlZCwgZGFuIHRpZGFrIGFkYSBha3NpIgorCisjOiBzcmMvcmVhZGVyLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNlZCB2YWx1ZTogJCVkIgorbXNnc3RyICJuaWxhaSB0aWRhayBkaWd1bmFrYW46ICQlZCIKKworIzogc3JjL3JlYWRlci5jOjMzMAorbXNnaWQgInVuc2V0IHZhbHVlOiAkJCIKK21zZ3N0ciAibmlsYWkgdGlkYWsgZGlzZXQ6ICQkIgorCisjOiBzcmMvcmVhZGVyLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgInRva2VuIGZvciAlJXByZWMgaXMgbm90IGRlZmluZWQ6ICVzIgorbXNnc3RyICJ0YW5kYSB1bnR1ayAlJXByZWMgYmVsdW0gZGlkZWZpbmlzaWthbjogJXMiCisKKyM6IHNyYy9yZWFkZXIuYzo0MzEgc3JjL3JlYWRlci5jOjQ0NSBzcmMvcmVhZGVyLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgb25lICVzIGFsbG93ZWQgcGVyIHJ1bGUiCittc2dzdHIgImhhbnlhIHNhdHUgJXMgeWFuZyBkaWJvbGVoa2FuIHBlciBhdHVyYW4iCisKKyM6IHNyYy9yZWFkZXIuYzo0NDEgc3JjL3JlYWRlci5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhZmZlY3RzIG9ubHkgR0xSIHBhcnNlcnMiCittc2dzdHIgIiVzIGhhbnlhIG1lbXBlbmdhcnVoaSBwYXJzZXIgR0xSIgorCisjOiBzcmMvcmVhZGVyLmM6NDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIG11c3QgYmUgZm9sbG93ZWQgYnkgcG9zaXRpdmUgbnVtYmVyIgorbXNnc3RyICIlcyBoYXJ1cyBkaWlrdXRpIGFuZ2thIHBvc2l0aWYiCisKKyM6IHNyYy9yZWFkZXIuYzo1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVsZSBpcyB0b28gbG9uZyIKK21zZ3N0ciAiYXR1cmFuIHRlcmxhbHUgcGFuamFuZyIKKworIzogc3JjL3JlYWRlci5jOjY3MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBydWxlcyBpbiB0aGUgaW5wdXQgZ3JhbW1hciIKK21zZ3N0ciAidGlkYWsgYWRhIGF0dXJhbiBkYWxhbSB0YXRhIGJhaGFzYSBtYXN1a2FuIgorCisjOiBzcmMvcmVkdWNlLmM6MjQxCittc2dpZCAicnVsZSB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgImF0dXJhbiB0aWRhayBiZXJndW5hIGRhbGFtIHRhdGEgYmFoYXNhIgorCisjOiBzcmMvcmVkdWNlLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogJXMiCittc2dzdHIgImJ1a2FuIHRlcm1pbmFsIHRpZGFrIGJlcmd1bmEgZGFsYW0gdGF0YSBiYWhhc2E6ICVzIgorCisjOiBzcmMvcmVkdWNlLmM6MzUwCittc2dpZCAiTm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAiQnVrYW4gdGVybWluYWwsIHRpZGFrIGJlcmd1bmEgZGFsYW0gdGF0YSBiYWhhc2EiCisKKyM6IHNyYy9yZWR1Y2UuYzozNjMKK21zZ2lkICJUZXJtaW5hbHMgdW51c2VkIGluIGdyYW1tYXIiCittc2dzdHIgIlRlcm1pbmFsIHRpZGFrIGRpZ3VuYWthbiBkYWxhbSB0YXRhIGJhaGFzYSIKKworIzogc3JjL3JlZHVjZS5jOjM3MgorbXNnaWQgIlJ1bGVzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAiQXR1cmFuIHRpZGFrIGJlcmd1bmEgZGFsYW0gdGF0YSBiYWhhc2EiCisKKyM6IHNyYy9yZWR1Y2UuYzozODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnaWRfcGx1cmFsICIlZCBub250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyWzBdICIlZCBidWthbiB0ZXJtaW5hbCB0aWRhayBiZXJndW5hIGRhbGFtIHRhdGEgYmFoYXNhIgorCisjOiBzcmMvcmVkdWNlLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnaWRfcGx1cmFsICIlZCBydWxlcyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHJbMF0gIiVkIGF0dXJhbiB0aWRhayBiZXJndW5hIGRhbGFtIHRhdGEgYmFoYXNhIgorCisjOiBzcmMvcmVkdWNlLmM6NDE5CisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0IHN5bWJvbCAlcyBkb2VzIG5vdCBkZXJpdmUgYW55IHNlbnRlbmNlIgorbXNnc3RyICJzaW1ib2wgYXdhbCAlcyB0aWRhayBtZWxhaGlya2FuIGthbGltYXQiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoxODgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN0cmF5ICclcyciCittc2dzdHIgImtlbGViaWhhbiBgJCciCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyMjkKK21zZ2lkICJhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZSIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjMyCittc2dpZCAiZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNlIG9mIFlZRkFJTCwgd2hpY2ggaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0MzEgc3JjL3NjYW4tY29kZS5sOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcnMgdG86ICVjJXMgYXQgJXMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NzaWJseSBtZWFudDogJWMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICIsIGhpZGluZyAlYyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiBhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiwgY2Fubm90IGJlIGFjY2Vzc2VkIGZyb20gbWlkLXJ1bGUgYWN0aW9uIGF0ICQlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NTIxIHNyYy9zY2FuLWdyYW0ubDo3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZWdlciBvdXQgb2YgcmFuZ2U6ICVzIgorbXNnc3RyICJpbnRlZ2VyIGtlIGx1YXIgYmF0YXM6ICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjEwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZmVyZW5jZTogJXMiCittc2dzdHIgImRpcmVrdGlmIHRpZGFrIHZhbGlkOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IgYWZ0ZXIgJyVjJywgZXhwZWN0aW5nIGludGVnZXIsIGxldHRlciwgJ18nLCAnWycsIG9yICckJyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbiBiZWZvcmUgJCVkOiAlLipzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiAlLipzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzbGVhZGluZyByZWZlcmVuY2U6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2NjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImFtYmlndW91cyByZWZlcmVuY2U6ICVzIgorbXNnc3RyICJhcmd1bWVuICVzIGFtYmlndSB1bnR1ayAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJleHBsaWNpdCB0eXBlIGdpdmVuIGluIHVudHlwZWQgZ3JhbW1hciIKK21zZ3N0ciAidGlwZSBla3NwbGlzaXQgZGliZXJpa2FuIGRhbGFtIHRhdGEgYmFoYXNhIHlhbmcgdGlkYWsgZGlrZXRpa2FuIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NzU5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIkJCBmb3IgdGhlIG1pZHJ1bGUgYXQgJCVkIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICIiCisiJCQgdW50dWsgYXR1cmFuIHRlbmdhaCBkaSAkJWQgZGFyaSBgJXMnIHRpZGFrIG1lbWlsaWtpIHRpcGUgeWFuZyB0ZXJkZWtsYXJhc2kiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3NjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiQkIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICIkJCBkYXJpIGAlcycgdGlkYWsgbWVtaWxpa2kgdGlwZSB5YW5nIHRlcmRla2xhcmFzaSIKKworIzogc3JjL3NjYW4tY29kZS5sOjc4NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJCVzIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICIkJWQgZGFyaSBgJXMnIHRpZGFrIG1lbWlsaWtpIHRpcGUgeWFuZyB0ZXJkZWtsYXJhc2kiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoxNDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN0cmF5ICcsJyB0cmVhdGVkIGFzIHdoaXRlIHNwYWNlIgorbXNnc3RyICJzdHJheSBgLCcgZGlhbmdnYXAgc2ViYWdhaSB3aGl0ZSBzcGFjZSIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRpcmVjdGl2ZTogJXMiCittc2dzdHIgImRpcmVrdGlmIHRpZGFrIHZhbGlkOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjI1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudGlmaWVyOiAlcyIKK21zZ3N0ciAiZGlyZWt0aWYgdGlkYWsgdmFsaWQ6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6Mjk1CisjLCBmdXp6eQorbXNnaWQgImludmFsaWQgY2hhcmFjdGVyIgorbXNnaWRfcGx1cmFsICJpbnZhbGlkIGNoYXJhY3RlcnMiCittc2dzdHJbMF0gImthcmFrdGVyIHRpZGFrIHZhbGlkOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGlkZW50aWZpZXIgaW4gYnJhY2tldGVkIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW4gaWRlbnRpZmllciBleHBlY3RlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MzgxCisjLCBmdXp6eQorbXNnaWQgImludmFsaWQgY2hhcmFjdGVyIGluIGJyYWNrZXRlZCBuYW1lIgorbXNnaWRfcGx1cmFsICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gYnJhY2tldGVkIG5hbWUiCittc2dzdHJbMF0gImthcmFrdGVyIHRpZGFrIHZhbGlkIHNldGVsYWggXFwtZXNjYXBlOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjQ4MSBzcmMvc2Nhbi1ncmFtLmw6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGNoYXJhY3RlciBsaXRlcmFsIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo0ODYgc3JjL3NjYW4tZ3JhbS5sOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJleHRyYSBjaGFyYWN0ZXJzIGluIGNoYXJhY3RlciBsaXRlcmFsIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudWxsIGNoYXJhY3RlciIKK21zZ3N0ciAia2FyYWt0ZXIgbnVsbCB0aWRhayB2YWxpZCIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjUzMSBzcmMvc2Nhbi1ncmFtLmw6NTQxIHNyYy9zY2FuLWdyYW0ubDo1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgYWZ0ZXIgXFwtZXNjYXBlOiAlcyIKK21zZ3N0ciAibm9tb3IgdGlkYWsgdmFsaWQgc2V0ZWxhaCBcXC1lc2NhcGU6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NTczCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY2hhcmFjdGVyIGFmdGVyIFxcLWVzY2FwZTogJXMiCittc2dzdHIgImthcmFrdGVyIHRpZGFrIHZhbGlkIHNldGVsYWggXFwtZXNjYXBlOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjkwMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyBhdCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAia2VoaWxhbmdhbiBgJXMnIGRpIGFraGlyIGZpbGUiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo5MTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgJXMgYXQgZW5kIG9mIGxpbmUiCittc2dzdHIgImhpbGFuZyBgJXMnIGRpIGFraGlyIGJhcmlzIgorCisjOiBzcmMvc2Nhbi1za2VsLmw6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuY2xvc2VkICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAiZGlyZWt0aWYgJXMgdGlkYWsgdGVydHV0dXAgZGFsYW0ga2VyYW5na2EiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIGZldyBhcmd1bWVudHMgZm9yICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAidGVybGFsdSBzZWRpa2l0IGFyZ3VtZW4gdW50dWsgZGlyZWt0aWYgJXMgZGFsYW0gc2tlbGV0b24iCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGZvciAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iCittc2dzdHIgInRlcmxhbHUgYmFueWFrIGFyZ3VtZW4gdW50dWsgZGlyZWt0aWYgJXMgZGFsYW0gc2tlbGV0b24iCisKKyM6IHNyYy9zeW1saXN0LmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJCB2YWx1ZTogJCVkIgorbXNnc3RyICJuaWxhaSAkIHRpZGFrIHZhbGlkOiAlZCIKKworIzogc3JjL3N5bXRhYi5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlBPU0lYIFlhY2MgZm9yYmlkcyBkYXNoZXMgaW4gc3ltYm9sIG5hbWVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgc3ltYm9scyBpbiBpbnB1dCBncmFtbWFyIChsaW1pdCBpcyAlZCkiCittc2dzdHIgInRlcmxhbHUgYmFueWFrIHNpbWJvbCBkYWxhbSBncmFtbWFyIGlucHV0IChiYXRhc255YSBhZGFsYWggJWQpIgorCisjOiBzcmMvc3ltdGFiLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICIlcyByZWRla2xhcmFzaSB1bnR1ayAlcyIKKworIzogc3JjL3N5bXRhYi5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciA8JXM+IgorbXNnc3RyICIlcyByZWRla2xhcmFzaSB1bnR1ayA8JXM+IgorCisjOiBzcmMvc3ltdGFiLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyByZWRlZmluZWQiCittc2dzdHIgInNpbWJvbCAlcyBkaWRlZmluaXNpa2FuIHVsYW5nIgorCisjOiBzcmMvc3ltdGFiLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyByZWRlY2xhcmVkIgorbXNnc3RyICJzaW1ib2wgJXMgZGlkZWtsYXJhc2lrYW4gdWxhbmciCisKKyM6IHNyYy9zeW10YWIuYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWZpbmluZyB1c2VyIHRva2VuIG51bWJlciBvZiAlcyIKK21zZ3N0ciAibWVuZGVmaW5pc2lrYW4gdWxhbmcgbm9tb3IgdG9rZW4gdXNlciAlcyIKKworIzogc3JjL3N5bXRhYi5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgaXMgdXNlZCwgYnV0IGlzIG5vdCBkZWZpbmVkIGFzIGEgdG9rZW4gYW5kIGhhcyBubyBydWxlcyIKK21zZ3N0ciAiIgorInNpbWJvbCAlcyBkaWd1bmFrYW4sIG5hbXVuIHRpZGFrIGRpZGVmaW5pc2lrYW4gc2ViYWdhaSB0b2tlbiBkYW4gdGlkYWsgIgorIm1lbWlsaWtpIGF0dXJhbiIKKworIzogc3JjL3N5bXRhYi5jOjQxNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHVzZWQgbW9yZSB0aGFuIG9uY2UgYXMgYSBsaXRlcmFsIHN0cmluZyIKK21zZ3N0ciAic2ltYm9sIGAlcycgZGlndW5ha2FuIGxlYmloIGRhcmkgc2F0dSBrYWxpIHNlYmFnYWkgc3RyaW5nIGxpdGVyYWwiCisKKyM6IHNyYy9zeW10YWIuYzo0MTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyBnaXZlbiBtb3JlIHRoYW4gb25lIGxpdGVyYWwgc3RyaW5nIgorbXNnc3RyICJzaW1ib2wgYCVzJyBkaWJlcmlrYW4gbGViaWggZGFyaSBzYXR1IHN0cmluZyBsaXRlcmFsIgorCisjOiBzcmMvc3ltdGFiLmM6NTM1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1c2VyIHRva2VuIG51bWJlciAlZCByZWRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAiJXMgcmVkZWtsYXJhc2kgdW50dWsgJXMiCisKKyM6IHNyYy9zeW10YWIuYzo1MzkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIGRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAiZGVrbGFyYXNpIHNlYmVsdW1ueWEiCisKKyM6IHNyYy9zeW10YWIuYzo5MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHN0YXJ0IHN5bWJvbCAlcyBpcyB1bmRlZmluZWQiCittc2dzdHIgInNpbWJvbCBhd2FsICVzIHRpZGFrIGRpZGVmaW5pc2lrYW4iCisKKyM6IHNyYy9zeW10YWIuYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHN0YXJ0IHN5bWJvbCAlcyBpcyBhIHRva2VuIgorbXNnc3RyICJzaW1ib2wgYXdhbCAlcyBhZGFsYWggc2VidWFoIHRva2VuIgorCisjOiBzcmMvc3ltdGFiLmM6OTM1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICUlZGVzdHJ1Y3RvciIKK21zZ3N0ciAiZGVrbGFyYXNpIHVsYW5nIHVudHVrIHRhZ2dlZCAlJWRlc3RydWN0b3IgYmFrdSIKKworIzogc3JjL3N5bXRhYi5jOjk1MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJSVkZXN0cnVjdG9yIgorbXNnc3RyICJkZWtsYXJhc2kgdWxhbmcgdW50dWsgdGFnbGVzcyAlJWRlc3RydWN0b3IgYmFrdSIKKworIzogc3JjL3N5bXRhYi5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlJXByaW50ZXIiCittc2dzdHIgImRla2xhcmFzaSB1bGFuZyB1bnR1ayB0YWdnZWQgJSVwcmludGVyIGJha3UiCisKKyM6IHNyYy9zeW10YWIuYzo5ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdsZXNzICUlcHJpbnRlciIKK21zZ3N0ciAiZGVrbGFyYXNpIHVsYW5nIHVudHVrIHRhZ2dsZXNzICUlcHJpbnRlciBiYWt1IgorCisjOiBkamdwcC9zdWJwaXBlLmM6NjMgZGpncHAvc3VicGlwZS5jOjI4NiBkamdwcC9zdWJwaXBlLmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92aW5nIG9mICclcycgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzo4NSBkamdwcC9zdWJwaXBlLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3JlYXRpb24gb2YgYSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJzYXZpbmcgc3RkaW4gZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAic2F2aW5nIHN0ZG91dCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjE1MyBkamdwcC9zdWJwaXBlLmM6MTk3IGRqZ3BwL3N1YnBpcGUuYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlbmluZyBvZiB0bXBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIGJpc29uJ3Mgc3Rkb3V0IHRvIHRoZSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBtNCdzIHN0ZGluIGZyb20gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZW5pbmcgb2YgYSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjIxOAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBtNCdzIHN0ZG91dCB0byBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjM0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gJyVzJyBpbnRlcnJ1cHRlZCIKK21zZ3N0ciAicHJvZ3JhbSBzdWJzaWRlciBgJXMnIHRpZGFrIGRhcGF0IGRpcGFuZ2dpbCIKKworIzogZGpncHAvc3VicGlwZS5jOjI0MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic3Vic2lkaWFyeSBwcm9ncmFtICclcycgbm90IGZvdW5kIgorbXNnc3RyICJwcm9ncmFtIHN1YnNpZGVyIGAlcycgdGlkYWsgZGFwYXQgZGlwYW5nZ2lsIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIGJpc29uJ3Mgc3RkaW4gZnJvbSB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGFyZ3VtZW50ICVzIGZvciAlcyIKK21zZ3N0ciAiYXJndW1lbnQgJXMgdGlkYWsgdmFsaWQgdW50dWsgJXMiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgYXJndW1lbnQgJXMgZm9yICVzIgorbXNnc3RyICJhcmd1bWVuICVzIGFtYmlndSB1bnR1ayAlcyIKKworIzogbGliL2FyZ21hdGNoLmM6MTUzCittc2dpZCAiVmFsaWQgYXJndW1lbnRzIGFyZToiCittc2dzdHIgIkFyZ3VtZW4gdmFsaWQgYWRhbGFoOiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfYWxsb2NzLCAldSBmcmVlZCAoJS4yZiUlKS5cbiIKK21zZ3N0ciAiJXUgYml0c2V0X2FsbG9jcywgJXUgZnJlZWQgKCUuMmYlJSkuXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3NldHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorbXNnc3RyICIldSBiaXRzZXRfc2V0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3Jlc2V0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF9yZXNldHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF90ZXN0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF90ZXN0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X2xpc3RzXG4iCittc2dzdHIgIiV1IGJpdHNldF9saXN0c1xuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTkyCittc2dpZCAiY291bnQgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICJoaXR1bmcgbG9nIGhpc3RvZ3JhbVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTk1Cittc2dpZCAic2l6ZSBsb2cgaGlzdG9ncmFtXG4iCittc2dzdHIgInVrdXJhbiBsb2cgaGlzdG9ncmFtXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTgKK21zZ2lkICJkZW5zaXR5IGhpc3RvZ3JhbVxuIgorbXNnc3RyICJrZXBhZGF0YW4gaGlzdG9ncmFtXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJpdHNldCBzdGF0aXN0aWNzOlxuIgorIlxuIgorbXNnc3RyICIiCisiU3RhdGlzdGlrIGJpdHNldDpcbiIKKyJcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJBY2N1bXVsYXRlZCBydW5zID0gJXVcbiIKK21zZ3N0ciAiUnVuIHRlcmFrdW11bGFzaSA9ICV1XG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyNTkgbGliL2JpdHNldF9zdGF0cy5jOjI2NAorIywgZnV6enkKK21zZ2lkICJjYW5ub3QgcmVhZCBzdGF0cyBmaWxlIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZW1iYWNhIGZpbGUgc3RhdC4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyNjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImJhZCBzdGF0cyBmaWxlIHNpemVcbiIKK21zZ3N0ciAiVWt1cmFuIGZpbGUgc3RhdCBidXJ1ay5cbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI4NyBsaWIvYml0c2V0X3N0YXRzLmM6Mjg5CisjLCBmdXp6eQorbXNnaWQgImNhbm5vdCB3cml0ZSBzdGF0cyBmaWxlIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZW51bGlzIGZpbGUgc3RhdC4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyOTIKKyMsIGZ1enp5Cittc2dpZCAiY2Fubm90IG9wZW4gc3RhdHMgZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVtYnVrYSBmaWxlIHN0YXQgdW50dWsgZGl0dWxpc2kuIgorCisjOiBsaWIvY2xvc2VvdXQuYzoxMTIKKyMsIGZ1enp5Cittc2dpZCAid3JpdGUgZXJyb3IiCittc2dzdHIgImtlc2FsYWhhbiBmYXRhbCIKKworIzogbGliL2Vycm9yLmM6MTg4Cittc2dpZCAiVW5rbm93biBzeXN0ZW0gZXJyb3IiCittc2dzdHIgIktlc2FsYWhhbiBzaXN0ZW0gdGlkYWsgZGlrZW5hbCIKKworIzogbGliL2dldG9wdC5jOjU0NyBsaWIvZ2V0b3B0LmM6NTc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICclcycgaXMgYW1iaWd1b3VzOyBwb3NzaWJpbGl0aWVzOiIKK21zZ3N0ciAiJXM6IHBpbGloYW4gJyVzJyBhbWJpZ3VcbiIKKworIzogbGliL2dldG9wdC5jOjYyNCBsaWIvZ2V0b3B0LmM6NjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy0tJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IHBpbGloYW4gJy0tJXMnIHRpZGFrIG1lbWJvbGVoa2FuIHNlYnVhaCBhcmd1bWVuXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo2MzcgbGliL2dldG9wdC5jOjY0MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICclYyVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBwaWxpaGFuICclYyVzJyB0aWRhayBtZW1ib2xlaGthbiBzZWJ1YWggYXJndW1lblxuIgorCisjOiBsaWIvZ2V0b3B0LmM6Njg1IGxpYi9nZXRvcHQuYzo3MDQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy0tJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBwaWxpaGFuICclcycgbWVtYnV0dWhrYW4gc2VidWFoIGFyZ3VtZW5cbiIKKworIzogbGliL2dldG9wdC5jOjc0MiBsaWIvZ2V0b3B0LmM6NzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uICctLSVzJ1xuIgorbXNnc3RyICIlczogcGlsaWhhbiB0aWRhayBkaWtlbmFsICctLSVzJ1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6NzUzIGxpYi9nZXRvcHQuYzo3NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gJyVjJXMnXG4iCittc2dzdHIgIiVzOiBwaWxpaGFuIHRpZGFrIGRpa2VuYWwgJyVjJXMnXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo4MDUgbGliL2dldG9wdC5jOjgwOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBvcHRpb24gLS0gJyVjJ1xuIgorbXNnc3RyICIlczogcGlsaWhhbiB0aWRhayB2YWxpZCAtLSAnJWMnXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo4NjEgbGliL2dldG9wdC5jOjg3OCBsaWIvZ2V0b3B0LmM6MTA4OCBsaWIvZ2V0b3B0LmM6MTEwNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICclYydcbiIKK21zZ3N0ciAiJXM6IHBpbGloYW4gbWVtYnV0dWhrYW4gc2VidWFoIGFyZ3VtZW4gLS0gJyVjJ1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6OTM0IGxpYi9nZXRvcHQuYzo5NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLVcgJXMnIGlzIGFtYmlndW91c1xuIgorbXNnc3RyICIlczogcGlsaWhhbiAnLVcgJXMnIGFtYmlndVxuIgorCisjOiBsaWIvZ2V0b3B0LmM6OTc0IGxpYi9nZXRvcHQuYzo5OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLVcgJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IHBpbGloYW4gJy1XICVzJyB0aWRhayBtZW1ib2xlaGthbiBzZWJ1YWggYXJndW1lblxuIgorCisjOiBsaWIvZ2V0b3B0LmM6MTAxMyBsaWIvZ2V0b3B0LmM6MTAzMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLVcgJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBwaWxpaGFuICclcycgbWVtYnV0dWhrYW4gc2VidWFoIGFyZ3VtZW5cbiIKKworIzogbGliL29ic3RhY2suYzo0MTMgbGliL29ic3RhY2suYzo0MTUgbGliL3hhbGxvYy1kaWUuYzozNAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIm1lbW9yaSBoYWJpcyIKKworIzogbGliL3NwYXduLXBpcGUuYzoxNDAgbGliL3NwYXduLXBpcGUuYzoxNDMgbGliL3NwYXduLXBpcGUuYzoyNjQKKyM6IGxpYi9zcGF3bi1waXBlLmM6MjY3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIHBpcGUiCittc2dzdHIgInRpZGFrIGRhcGF0IG1lbnV0dXAgZmlsZSIKKworIzogbGliL3NwYXduLXBpcGUuYzoyMzQgbGliL3NwYXduLXBpcGUuYzozNDggbGliL3dhaXQtcHJvY2Vzcy5jOjI4MgorIzogbGliL3dhaXQtcHJvY2Vzcy5jOjM1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdWJwcm9jZXNzIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzoKKyMuIEdldCB0cmFuc2xhdGlvbnMgZm9yIG9wZW4gYW5kIGNsb3NpbmcgcXVvdGF0aW9uIG1hcmtzLgorIy4gVGhlIG1lc3NhZ2UgY2F0YWxvZyBzaG91bGQgdHJhbnNsYXRlICJgIiB0byBhIGxlZnQKKyMuIHF1b3RhdGlvbiBtYXJrIHN1aXRhYmxlIGZvciB0aGUgbG9jYWxlLCBhbmQgc2ltaWxhcmx5IGZvcgorIy4gIiciLiAgRm9yIGV4YW1wbGUsIGEgRnJlbmNoIFVuaWNvZGUgbG9jYWwgc2hvdWxkIHRyYW5zbGF0ZQorIy4gdGhlc2UgdG8gVSswMEFCIChMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRQorIy4gUVVPVEFUSU9OIE1BUkspLCBhbmQgVSswMEJCIChSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUKKyMuIFFVT1RBVElPTiBNQVJLKSwgcmVzcGVjdGl2ZWx5LgorIy4KKyMuIElmIHRoZSBjYXRhbG9nIGhhcyBubyB0cmFuc2xhdGlvbiwgd2Ugd2lsbCB0cnkgdG8KKyMuIHVzZSBVbmljb2RlIFUrMjAxOCAoTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspIGFuZAorIy4gVW5pY29kZSBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykuICBJZiB0aGUKKyMuIGN1cnJlbnQgbG9jYWxlIGlzIG5vdCBVbmljb2RlLCBsb2NhbGVfcXVvdGluZ19zdHlsZQorIy4gd2lsbCBxdW90ZSAnbGlrZSB0aGlzJywgYW5kIGNsb2NhbGVfcXVvdGluZ19zdHlsZSB3aWxsCisjLiBxdW90ZSAibGlrZSB0aGlzIi4gIFlvdSBzaG91bGQgYWx3YXlzIGluY2x1ZGUgdHJhbnNsYXRpb25zCisjLiBmb3IgImAiIGFuZCAiJyIgZXZlbiBpZiBVKzIwMTggYW5kIFUrMjAxOSBhcmUgYXBwcm9wcmlhdGUKKyMuIGZvciB5b3VyIGxvY2FsZS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFya3NfaW5fb3RoZXJfbGFuZ3VhZ2VzPgorIy4gYW5kIHVzZSBnbHlwaHMgc3VpdGFibGUgZm9yIHlvdXIgbGFuZ3VhZ2UuCisjOiBsaWIvcXVvdGVhcmcuYzozMTIKK21zZ2lkICJgIgorbXNnc3RyICJgIgorCisjOiBsaWIvcXVvdGVhcmcuYzozMTMKK21zZ2lkICInIgorbXNnc3RyICInIgorCisjOiBsaWIvdGltZXZhci5jOjQ3NQorbXNnaWQgIiIKKyJcbiIKKyJFeGVjdXRpb24gdGltZXMgKHNlY29uZHMpXG4iCittc2dzdHIgIiIKKyJcbiIKKyJXYWt0dSBla3Nla3VzaSAoZGV0aWspXG4iCisKKyM6IGxpYi90aW1ldmFyLmM6NTI1Cittc2dpZCAiIFRPVEFMICAgICAgICAgICAgICAgICA6IgorbXNnc3RyICIgVE9UQUwgICAgICAgICAgICAgICAgIDoiCisKKyM6IGxpYi90aW1ldmFyLmM6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWUgaW4gJXM6ICVsZC4lMDZsZCAoJWxkJSUpXG4iCittc2dzdHIgIndha3R1IGRhbGFtICVzOiAlbGQuJTA2bGQgKCVsZCUlKVxuIgorCisjOiBsaWIvdzMyc3Bhd24uaDo0MworIywgYy1mb3JtYXQKK21zZ2lkICJfb3Blbl9vc2ZoYW5kbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi93MzJzcGF3bi5oOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXN0b3JlIGZkICVkOiBkdXAyIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6MjIzIGxpYi93YWl0LXByb2Nlc3MuYzoyNTUgbGliL3dhaXQtcHJvY2Vzcy5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdWJwcm9jZXNzIgorbXNnc3RyICIiCisKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzoyNzQgbGliL3dhaXQtcHJvY2Vzcy5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdWJwcm9jZXNzIGdvdCBmYXRhbCBzaWduYWwgJWQiCittc2dzdHIgIiIKKworI34gbXNnaWQgInN0YXRlICVkIgorI34gbXNnc3RyICJzdGF0ZSAlZCIKKworIywgZnV6enkKKyN+IG1zZ2lkICJzdHJheSAnQCciCisjfiBtc2dzdHIgImtlbGViaWhhbiBgQCciCisKKyN+IG1zZ2lkICIiCisjfiAidW5kZWZpbmVkICUlZGVmaW5lIHZhcmlhYmxlIGAlcycgcGFzc2VkIHRvIG11c2NsZV9wZXJjZW50X2RlZmluZV9nZXRfbG9jIgorI34gbXNnc3RyICIiCisjfiAidGlkYWsgdGVyZGVmaW5pc2kgJSVkZWZpbmUgdmFyaWFiZWwgYCVzJyBkaWxld2F0a2FuIGtlICIKKyN+ICJtdXNjbGVfcGVyY2VudF9kZWZpbmVfZ2V0X2xvYyIKKworI34gbXNnaWQgIiIKKyN+ICJ1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgYCVzJyBwYXNzZWQgdG8gIgorI34gIm11c2NsZV9wZXJjZW50X2RlZmluZV9nZXRfc3luY2xpbmUiCisjfiBtc2dzdHIgIiIKKyN+ICJ0aWRhayB0ZXJkZWZpbmlzaSAlJWRlZmluZSB2YXJpYWJlbCBgJXMnIGRpbGV3YXRrYW4ga2UgIgorI34gIm11c2NsZV9wZXJjZW50X2RlZmluZV9nZXRfc3luY2xpbmUiCisKKyN+IG1zZ2lkICIiCisjfiAidW5kZWZpbmVkICUlZGVmaW5lIHZhcmlhYmxlIGAlcycgcGFzc2VkIHRvIG11c2NsZV9wZXJjZW50X2RlZmluZV9mbGFnX2lmIgorI34gbXNnc3RyICIiCisjfiAidGlkYWsgdGVyZGVmaW5pc2kgJSVkZWZpbmUgdmFyaWFibGUgYCVzJyBkaWxld2F0a2FuIGtlICIKKyN+ICJtdXNjbGVfcGVyY2VudF9kZWZpbmVfZmxhZ19pZiIKKworI34gbXNnaWQgIiIKKyN+ICJ1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgYCVzJyBwYXNzZWQgdG8gIgorI34gIm11c2NsZV9wZXJjZW50X2RlZmluZV9jaGVja192YWx1ZXMiCisjfiBtc2dzdHIgIiIKKyN+ICJ0aWRhayB0ZXJkZWZpbmlzaSAlJWRlZmluZSB2YXJpYWJlbCBgJXMnIGRpbGV3YXRrYW4ga2UgIgorI34gIm11c2NsZV9wZXJjZW50X2RlZmluZV9jaGVja192YWx1ZXMiCisKKyN+IG1zZ2lkICIiCisjfiAiR2VuZXJhdGUgTEFMUigxKSBhbmQgR0xSIHBhcnNlcnMuXG4iCisjfiAiXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJIYXNpbGthbiBwYXJzZXIgTEFMUigxKSBkYW4gR0xSLlxuIgorI34gIlxuIgorCisjfiBtc2dpZCAidG9rZW5zICVzIGFuZCAlcyBib3RoIGFzc2lnbmVkIG51bWJlciAlZCIKKyN+IG1zZ3N0ciAidG9rZW4gJXMgZGFuICVzIGtlZHVhbnlhIG1lbWlsaWtpIGFuZ2thICVkIgorCisjfiBtc2dpZCAiaW52YWxpZCBlc2NhcGUgc2VxdWVuY2U6ICVzIgorI34gbXNnc3RyICJ1cnV0YW4gZXNjYXBlIHRpZGFrIHZhbGlkOiAlcyIKKworI34gbXNnaWQgInVucmVjb2duaXplZCBlc2NhcGUgc2VxdWVuY2U6ICVzIgorI34gbXNnc3RyICJ1cnV0YW4gZXNjYXBlIHRpZGFrIGRpa2VuYWw6ICVzIgorCisjfiBtc2dpZCAiJXM6IGlsbGVnYWwgb3B0aW9uIC0tICVjXG4iCisjfiBtc2dzdHIgIiVzOiBvcHRpb24gaWxlZ2FsIC0tICVjXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiSWYgYSBsb25nIG9wdGlvbiBzaG93cyBhbiBhcmd1bWVudCBhcyBtYW5kYXRvcnksIHRoZW4gaXQgaXMgbWFuZGF0b3J5XG4iCisjfiAiZm9yIHRoZSBlcXVpdmFsZW50IHNob3J0IG9wdGlvbiBhbHNvLiAgU2ltaWxhcmx5IGZvciBvcHRpb25hbCBhcmd1bWVudHMuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJKaWthIG9wdGlvbiBwYW5qYW5nIG1lbnlhdGFrYW4gYXJndW1lbiBzZWJhZ2FpIG1hbmRhdG9yaSwgbWFrYSBpYSAiCisjfiAibWFuZGF0b3JpIGp1Z2FcbiIKKyN+ICJ1bnR1ayBvcHRpb24gcGVuZGVrLiAgSGFsIHlhbmcgc2FtYSB1bnR1ayBhcmd1bWVuIG9wc2lvbmFsLlxuIgorCisjfiBtc2dpZCAiUnVsZXMgbmV2ZXIgcmVkdWNlZCIKKyN+IG1zZ3N0ciAiQXR1cmFuIHRpZGFrIHBlcm5haCBkaWt1cmFuZ2kiCisKKyN+IG1zZ2lkICJ1c2VsZXNzIHJ1bGUiCisjfiBtc2dzdHIgImF0dXJhbiB0aWRhayBiZXJndW5hIgorCisjfiBtc2dpZCAidXNlbGVzcyBub250ZXJtaW5hbDogJXMiCisjfiBtc2dzdHIgIm5vbnRlcm1pbmFsIHRpZGFrIGJlcmd1bmE6ICVzIgorCisjfiBtc2dpZCAiVXNlbGVzcyBub250ZXJtaW5hbHMiCisjfiBtc2dzdHIgIk5vbnRlcm1pbmFsIHRpZGFrIGJlcmd1bmEiCisKKyN+IG1zZ2lkICJUZXJtaW5hbHMgd2hpY2ggYXJlIG5vdCB1c2VkIgorI34gbXNnc3RyICJUZXJtaW5hbCB5YW5nIHRpZGFrIGRpZ3VuYWthbiIKKworI34gbXNnaWQgIlVzZWxlc3MgcnVsZXMiCisjfiBtc2dzdHIgIlVzZWxlc3MgcnVsZXMiCisKKyN+IG1zZ2lkICIlZCBydWxlIG5ldmVyIHJlZHVjZWRcbiIKKyN+IG1zZ2lkX3BsdXJhbCAiJWQgcnVsZXMgbmV2ZXIgcmVkdWNlZFxuIgorI34gbXNnc3RyWzBdICJBdHVyYW4gJWQgdGlkYWsgcGVybmFoIGRpa3VyYW5naVxuIgorCisjfiBtc2dpZCAiJWQgdXNlbGVzcyBub250ZXJtaW5hbCIKKyN+IG1zZ2lkX3BsdXJhbCAiJWQgdXNlbGVzcyBub250ZXJtaW5hbHMiCisjfiBtc2dzdHJbMF0gIm5vbnRlcm1pbmFsIHRpZGFrIGJlcmd1bmEgJWQiCisKKyN+IG1zZ2lkICIgYW5kICIKKyN+IG1zZ3N0ciAiIGRhbiAiCisKKyN+IG1zZ2lkICIlZCB1c2VsZXNzIHJ1bGUiCisjfiBtc2dpZF9wbHVyYWwgIiVkIHVzZWxlc3MgcnVsZXMiCisjfiBtc2dzdHJbMF0gImF0dXJhbiB0aWRhayBiZXJndW5hICVkIgpkaWZmIC0tZ2l0IGEvcG8vaW5zZXJ0LWhlYWRlci5zaW4gYi9wby9pbnNlcnQtaGVhZGVyLnNpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjZkZTAxCi0tLSAvZGV2L251bGwKKysrIGIvcG8vaW5zZXJ0LWhlYWRlci5zaW4KQEAgLTAsMCArMSwyMyBAQAorIyBTZWQgc2NyaXB0IHRoYXQgaW5zZXJ0cyB0aGUgZmlsZSBjYWxsZWQgSEVBREVSIGJlZm9yZSB0aGUgaGVhZGVyIGVudHJ5LgorIworIyBBdCBlYWNoIG9jY3VycmVuY2Ugb2YgYSBsaW5lIHN0YXJ0aW5nIHdpdGggIm1zZ2lkICIsIHdlIGV4ZWN1dGUgdGhlIGZvbGxvd2luZworIyBjb21tYW5kcy4gQXQgdGhlIGZpcnN0IG9jY3VycmVuY2UsIGluc2VydCB0aGUgZmlsZS4gQXQgdGhlIGZvbGxvd2luZworIyBvY2N1cnJlbmNlcywgZG8gbm90aGluZy4gVGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlIGZpcnN0IGFuZCB0aGUgZm9sbG93aW5nCisjIG9jY3VycmVuY2VzIGlzIGFjaGlldmVkIGJ5IGxvb2tpbmcgYXQgdGhlIGhvbGQgc3BhY2UuCisvXm1zZ2lkIC97Cit4CisjIFRlc3QgaWYgdGhlIGhvbGQgc3BhY2UgaXMgZW1wdHkuCitzL20vbS8KK3RhCisjIFllcyBpdCB3YXMgZW1wdHkuIEZpcnN0IG9jY3VycmVuY2UuIFJlYWQgdGhlIGZpbGUuCityIEhFQURFUgorIyBPdXRwdXQgdGhlIGZpbGUncyBjb250ZW50cyBieSByZWFkaW5nIHRoZSBuZXh0IGxpbmUuIEJ1dCBkb24ndCBsb3NlIHRoZQorIyBjdXJyZW50IGxpbmUgd2hpbGUgZG9pbmcgdGhpcy4KK2cKK04KK2JiCis6YQorIyBUaGUgaG9sZCBzcGFjZSB3YXMgbm9uZW1wdHkuIEZvbGxvd2luZyBvY2N1cnJlbmNlcy4gRG8gbm90aGluZy4KK3gKKzpiCit9CmRpZmYgLS1naXQgYS9wby9pdC5nbW8gYi9wby9pdC5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEwZDdiNgotLS0gL2Rldi9udWxsCisrKyBiL3BvL2l0LmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9pdC5wbyBiL3BvL2l0LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZTFmMTAKLS0tIC9kZXYvbnVsbAorKysgYi9wby9pdC5wbwpAQCAtMCwwICsxLDEyOTMgQEAKKyMgSXRhbGlhbiB0cmFuc2xhdGlvbiBmb3IgbWVzc2FnZSBvZiBHTlUgYmlzb24uCisjIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgUGFvbG8gQm9uemluaSA8Ym9uemluaUBnbnUub3JnPiwgMjAwMi4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGJpc29uIDIuMFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBidWctYmlzb25AZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEyLTEyLTEyIDE2OjA5KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA1LTA1LTIzIDEyOjM3KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFBhb2xvIEJvbnppbmkgPGJvbnppbmlAZ251Lm9yZz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBJdGFsaWFuIDx0cEBsaXN0cy5saW51eC5pdD5cbiIKKyJMYW5ndWFnZTogaXRcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOC1iaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKworIzogc3JjL2NvbXBsYWluLmM6MTIwIHNyYy9jb21wbGFpbi5jOjEzMSBzcmMvY29tcGxhaW4uYzoxNDAgc3JjL2NvbXBsYWluLmM6MTg4CisjOiBzcmMvY29tcGxhaW4uYzoxOTgKK21zZ2lkICJ3YXJuaW5nIgorbXNnc3RyICJhdHRlbnppb25lIgorCisjOiBzcmMvY29tcGxhaW4uYzoxNTEgc3JjL2NvbXBsYWluLmM6MTYwIHNyYy9jb21wbGFpbi5jOjE2NworIywgZnV6enkKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiZXJyb3JlIGRpIGlucHV0L291dHB1dCIKKworIzogc3JjL2NvbXBsYWluLmM6MjA4IHNyYy9jb21wbGFpbi5jOjIxNQorIywgZnV6enkKK21zZ2lkICJmYXRhbCBlcnJvciIKK21zZ3N0ciAiZXJyb3JlIGZhdGFsZTogIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgc2hpZnQiCittc2dzdHIgIiAgICBDb25mbGl0dG8gdHJhIGxhIHJlZ29sYSAlZCBlIGlsIHRva2VuICVzIHJpc29sdG8gY29tZSBzaGlmdCIKKworIzogc3JjL2NvbmZsaWN0cy5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIHJlZHVjZSIKK21zZ3N0ciAiICAgIENvbmZsaXR0byB0cmEgbGEgcmVnb2xhICVkIGUgaWwgdG9rZW4gJXMgcmlzb2x0byBjb21lIHJpZHV6aW9uZSIKKworIzogc3JjL2NvbmZsaWN0cy5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIGFuIGVycm9yIgorbXNnc3RyICIgICAgQ29uZmxpdHRvIHRyYSBsYSByZWdvbGEgJWQgZSBpbCB0b2tlbiAlcyByaXNvbHRvIGNvbWUgZXJyb3JlIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgc2hpZnQvcmVkdWNlLCAlZCByZWR1Y2UvcmVkdWNlXG4iCittc2dzdHIgImNvbmZsaXR0aTogJWQgc2hpZnQvcmlkdXppb25lLCAlZCByaWR1emlvbmUvcmlkdXppb25lXG4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCBzaGlmdC9yZWR1Y2VcbiIKK21zZ3N0ciAiICVkIGNvbmZsaXR0aSBzaGlmdC9yaWR1emlvbmVcbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdHM6ICVkIHJlZHVjZS9yZWR1Y2VcbiIKK21zZ3N0ciAiICVkIGNvbmZsaXR0aSByaWR1emlvbmUvcmlkdXppb25lXG4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhdGUgJWQgIgorbXNnc3RyICJTdGF0byAlZCIKKworIzogc3JjL2NvbmZsaWN0cy5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICIlJWV4cGVjdC1yciBhcHBsaWVzIG9ubHkgdG8gR0xSIHBhcnNlcnMiCittc2dzdHIgIiUlZXhwZWN0LXJyIGNvbnNpZGVyYXRvIHNvbG8gbmVpIHBhcnNlciBHTFIiCisKKyM6IHNyYy9jb25mbGljdHMuYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJleHBlY3RlZCAlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIgorbXNnc3RyWzBdICJhdHRlc28gJWQgY29uZmxpdHRvIHNoaWZ0L3JpZHV6aW9uZSIKK21zZ3N0clsxXSAiYXR0ZXNpICVkIGNvbmZsaXR0aSBzaGlmdC9yaWR1emlvbmUiCisKKyM6IHNyYy9jb25mbGljdHMuYzo2MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJWQgcmVkdWNlL3JlZHVjZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiZXhwZWN0ZWQgJWQgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMiCittc2dzdHJbMF0gImF0dGVzbyAlZCBjb25mbGl0dG8gcmlkdXppb25lL3JpZHV6aW9uZSIKK21zZ3N0clsxXSAiYXR0ZXNpICVkIGNvbmZsaXR0aSByaWR1emlvbmUvcmlkdXppb25lIgorCisjOiBzcmMvZmlsZXMuYzoxMTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3Qgb3BlbiIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXByaXJlIGlsIGZpbGUgYCVzJyIKKworIzogc3JjL2ZpbGVzLmM6MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImlucHV0L291dHB1dCBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBzcmMvZmlsZXMuYzoxMzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjbG9zZSBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjaGl1ZGVyZSBpbCBmaWxlIGAlcyciCisKKyM6IHNyYy9maWxlcy5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBvdmVyd3JpdGUgdGhlIGlucHV0IGZpbGUgJXMiCittc2dzdHIgIiIKKworIzogc3JjL2ZpbGVzLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0aW5nIG91dHB1dHMgdG8gZmlsZSAlcyIKK21zZ3N0ciAiY29uZmxpdHRvIG5lbGwnb3V0cHV0IHN1bCBmaWxlICVzIgorCisjOiBzcmMvZ2V0YXJncy5jOjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCittc2dzdHIgIlByb3ZhcmUgYCVzIC0taGVscCcgcGVyIHVsdGVyaW9yaSBpbmZvcm1hemlvbmkuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbT1BUSU9OXS4uLiBGSUxFXG4iCittc2dzdHIgIlV0aWxpenpvOiAlcyBbT1BaSU9ORV0uLi4gRklMRVxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwMgorbXNnaWQgIiIKKyJHZW5lcmF0ZSBhIGRldGVybWluaXN0aWMgTFIgb3IgZ2VuZXJhbGl6ZWQgTFIgKEdMUikgcGFyc2VyIGVtcGxveWluZ1xuIgorIkxBTFIoMSksIElFTFIoMSksIG9yIGNhbm9uaWNhbCBMUigxKSBwYXJzZXIgdGFibGVzLiAgSUVMUigxKSBhbmRcbiIKKyJjYW5vbmljYWwgTFIoMSkgc3VwcG9ydCBpcyBleHBlcmltZW50YWwuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozMDkKK21zZ2lkICIiCisiTWFuZGF0b3J5IGFyZ3VtZW50cyB0byBsb25nIG9wdGlvbnMgYXJlIG1hbmRhdG9yeSBmb3Igc2hvcnQgb3B0aW9ucyB0b28uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozMTIKK21zZ2lkICJUaGUgc2FtZSBpcyB0cnVlIGZvciBvcHRpb25hbCBhcmd1bWVudHMuXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozMTYKK21zZ2lkICIiCisiXG4iCisiT3BlcmF0aW9uIG1vZGVzOlxuIgorIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKKyIgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCisiICAgICAgLS1wcmludC1sb2NhbGVkaXIgICAgICBvdXRwdXQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgbG9jYWxlLWRlcGVuZGVudCAiCisiZGF0YVxuIgorIiAgICAgIC0tcHJpbnQtZGF0YWRpciAgICAgICAgb3V0cHV0IGRpcmVjdG9yeSBjb250YWluaW5nIHNrZWxldG9ucyBhbmQgWFNMVFxuIgorIiAgLXksIC0teWFjYyAgICAgICAgICAgICAgICAgZW11bGF0ZSBQT1NJWCBZYWNjXG4iCisiICAtVywgLS13YXJuaW5nc1s9Q0FURUdPUlldICByZXBvcnQgdGhlIHdhcm5pbmdzIGZhbGxpbmcgaW4gQ0FURUdPUllcbiIKKyIgIC1mLCAtLWZlYXR1cmVbPUZFQVRVUkVdICAgIGFjdGl2YXRlIG1pc2NlbGxhbmVvdXMgZmVhdHVyZXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjMyOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnNlcjpcbiIKKyIgIC1MLCAtLWxhbmd1YWdlPUxBTkdVQUdFICAgICAgICAgIHNwZWNpZnkgdGhlIG91dHB1dCBwcm9ncmFtbWluZyBsYW5ndWFnZVxuIgorIiAgLVMsIC0tc2tlbGV0b249RklMRSAgICAgICAgICAgICAgc3BlY2lmeSB0aGUgc2tlbGV0b24gdG8gdXNlXG4iCisiICAtdCwgLS1kZWJ1ZyAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50IHRoZSBwYXJzZXIgZm9yIGRlYnVnZ2luZ1xuIgorIiAgICAgIC0tbG9jYXRpb25zICAgICAgICAgICAgICAgICAgZW5hYmxlIGxvY2F0aW9uIHN1cHBvcnRcbiIKKyIgIC1ELCAtLWRlZmluZT1OQU1FWz1WQUxVRV0gICAgICAgIHNpbWlsYXIgdG8gJyVkZWZpbmUgTkFNRSBcIlZBTFVFXCInXG4iCisiICAtRiwgLS1mb3JjZS1kZWZpbmU9TkFNRVs9VkFMVUVdICBvdmVycmlkZSAnJWRlZmluZSBOQU1FIFwiVkFMVUVcIidcbiIKKyIgIC1wLCAtLW5hbWUtcHJlZml4PVBSRUZJWCAgICAgICAgIHByZXBlbmQgUFJFRklYIHRvIHRoZSBleHRlcm5hbCBzeW1ib2xzXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXByZWNhdGVkIGJ5ICctRGFwaS5wcmVmaXg9UFJFRklYJ1xuIgorIiAgLWwsIC0tbm8tbGluZXMgICAgICAgICAgICAgICAgICAgZG9uJ3QgZ2VuZXJhdGUgJyNsaW5lJyBkaXJlY3RpdmVzXG4iCisiICAtaywgLS10b2tlbi10YWJsZSAgICAgICAgICAgICAgICBpbmNsdWRlIGEgdGFibGUgb2YgdG9rZW4gbmFtZXNcbiIKK21zZ3N0ciAiIgorIlBhcnNlcjpcbiIKKyIgIC1TLCAtLXNrZWxldG9uPUZJTEUgICAgICAgIHNwZWNpZmljYSBsbyBzY2hlbGV0cm8gZGEgdXNhcmVcbiIKKyIgIC10LCAtLWRlYnVnICAgICAgICAgICAgICAgIGFnZ2l1bmdlIGluZm9ybWF6aW9uaSBkaSBkZWJ1ZyBhbCBwYXJzZXJcbiIKKyIgICAgICAtLWxvY2F0aW9ucyAgICAgICAgICAgIGFiaWxpdGEgaWwgY2FsY29sbyBkZWxsZSBsb2NhemlvbmkgKEBOKVxuIgorIiAgLXAsIC0tbmFtZS1wcmVmaXg9UFJFRklTU08gcHJlcG9uZSBQUkVGSVggYWkgc2ltYm9saSBnbG9iYWxpXG4iCisiICAtbCwgLS1uby1saW5lcyAgICAgICAgICAgICBub24gZ2VuZXJhIGRpcmV0dGl2ZSBgI2xpbmUnXG4iCisiICAtbiwgLS1uby1wYXJzZXIgICAgICAgICAgICBnZW5lcmEgbGUgc29sZSB0YWJlbGxlXG4iCisiICAtaywgLS10b2tlbi10YWJsZSAgICAgICAgICBpbmNsdWRlIHVuYSB0YWJlbGxhIGRpIG5vbWkgZGVpIHRva2VuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzQ2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJPdXRwdXQ6XG4iCisiICAgICAgLS1kZWZpbmVzWz1GSUxFXSAgICAgICBhbHNvIHByb2R1Y2UgYSBoZWFkZXIgZmlsZVxuIgorIiAgLWQgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZXdpc2UgYnV0IGNhbm5vdCBzcGVjaWZ5IEZJTEUgKGZvciBQT1NJWCAiCisiWWFjYylcbiIKKyIgIC1yLCAtLXJlcG9ydD1USElOR1MgICAgICAgIGFsc28gcHJvZHVjZSBkZXRhaWxzIG9uIHRoZSBhdXRvbWF0b25cbiIKKyIgICAgICAtLXJlcG9ydC1maWxlPUZJTEUgICAgIHdyaXRlIHJlcG9ydCB0byBGSUxFXG4iCisiICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgICBzYW1lIGFzIGAtLXJlcG9ydD1zdGF0ZSdcbiIKKyIgIC1iLCAtLWZpbGUtcHJlZml4PVBSRUZJWCAgIHNwZWNpZnkgYSBQUkVGSVggZm9yIG91dHB1dCBmaWxlc1xuIgorIiAgLW8sIC0tb3V0cHV0PUZJTEUgICAgICAgICAgbGVhdmUgb3V0cHV0IHRvIEZJTEVcbiIKKyIgIC1nLCAtLWdyYXBoWz1GSUxFXSAgICAgICAgIGFsc28gb3V0cHV0IGEgZ3JhcGggb2YgdGhlIGF1dG9tYXRvblxuIgorIiAgLXgsIC0teG1sWz1GSUxFXSAgICAgICAgICAgYWxzbyBvdXRwdXQgYW4gWE1MIHJlcG9ydCBvZiB0aGUgYXV0b21hdG9uXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhlIFhNTCBzY2hlbWEgaXMgZXhwZXJpbWVudGFsKVxuIgorbXNnc3RyICIiCisiT3V0cHV0OlxuIgorIiAgLWQsIC0tZGVmaW5lcyAgICAgICAgICAgICAgcHJvZHVjZSBhbmNoZSB1bm8gaGVhZGVyXG4iCisiICAtciwgLS1yZXBvcnQ9UEFSVEkgICAgICAgICBwcm9kdWNlIGFuY2hlIGRldHRhZ2xpIHN1bGwnYXV0b21hXG4iCisiICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgICBwcm9kdWNlIGFuY2hlIHVuYSBzcGllZ2F6aW9uZSBkZWxsJ2F1dG9tYVxuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg9UFJFRklTU08gc3BlY2lmaWNhIHVuIHByZWZpc3NvIHBlciBpbCBmaWxlIGRpIG91dHB1dFxuIgorIiAgLW8sIC0tb3V0cHV0PUZJTEUgICAgICAgICAgbGFzY2lhIGwnb3V0cHV0IGluIEZJTEVcbiIKKyIgIC1nLCAtLWdyYXBoICAgICAgICAgICAgICAgIHByb2R1Y2UgYW5jaGUgdW5hIGRlc2NyaXppb25lIFZDRyBkZWxsJ2F1dG9tYVxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM2MQorbXNnaWQgIiIKKyJXYXJuaW5nIGNhdGVnb3JpZXMgaW5jbHVkZTpcbiIKKyIgIGBtaWRydWxlLXZhbHVlcycgIHVuc2V0IG9yIHVudXNlZCBtaWRydWxlIHZhbHVlc1xuIgorIiAgYHlhY2MnICAgICAgICAgICAgaW5jb21wYXRpYmlsaXRpZXMgd2l0aCBQT1NJWCBZYWNjXG4iCisiICBgY29uZmxpY3RzLXNyJyAgICBTL1IgY29uZmxpY3RzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgY29uZmxpY3RzLXJyJyAgICBSL1IgY29uZmxpY3RzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgZGVwcmVjYXRlZCcgICAgICBvYnNvbGV0ZSBjb25zdHJ1Y3RzXG4iCisiICBgb3RoZXInICAgICAgICAgICBhbGwgb3RoZXIgd2FybmluZ3MgKGVuYWJsZWQgYnkgZGVmYXVsdClcbiIKKyIgIGBhbGwnICAgICAgICAgICAgIGFsbCB0aGUgd2FybmluZ3NcbiIKKyIgIGBuby1DQVRFR09SWScgICAgIHR1cm4gb2ZmIHdhcm5pbmdzIGluIENBVEVHT1JZXG4iCisiICBgbm9uZScgICAgICAgICAgICB0dXJuIG9mZiBhbGwgdGhlIHdhcm5pbmdzXG4iCisiICBgZXJyb3InICAgICAgICAgICB0cmVhdCB3YXJuaW5ncyBhcyBlcnJvcnNcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjM3NgorIywgZnV6enkKK21zZ2lkICIiCisiVEhJTkdTIGlzIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMgdGhhdCBjYW4gaW5jbHVkZTpcbiIKKyIgIGBzdGF0ZScgICAgICAgIGRlc2NyaWJlIHRoZSBzdGF0ZXNcbiIKKyIgIGBpdGVtc2V0JyAgICAgIGNvbXBsZXRlIHRoZSBjb3JlIGl0ZW0gc2V0cyB3aXRoIHRoZWlyIGNsb3N1cmVcbiIKKyIgIGBsb29rYWhlYWQnICAgIGV4cGxpY2l0bHkgYXNzb2NpYXRlIGxvb2thaGVhZCB0b2tlbnMgdG8gaXRlbXNcbiIKKyIgIGBzb2x2ZWQnICAgICAgIGRlc2NyaWJlIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMgc29sdmluZ1xuIgorIiAgYGFsbCcgICAgICAgICAgaW5jbHVkZSBhbGwgdGhlIGFib3ZlIGluZm9ybWF0aW9uXG4iCisiICBgbm9uZScgICAgICAgICBkaXNhYmxlIHRoZSByZXBvcnRcbiIKK21zZ3N0ciAiIgorIlBBUlRJIOggdW4gZWxlbmNvIGRpIHBhcm9sZSBzZXBhcmF0ZSBkYSB2aXJnb2xhIHNjZWx0ZSB0cmE6XG4iCisiICBgc3RhdGUnICAgICAgICBkZXNjcml2ZSBnbGkgc3RhdGlcbiIKKyIgIGBpdGVtc2V0JyAgICAgIGNvbXBsZXRhIGdsaSBpbnNpZW1pIGRlaSBzaW1ib2xpIGNvbiBsYSBsb3JvIGNoaXVzdXJhICIKKyJ0cmFuc2l0aXZhXG4iCisiICBgbG9vay1haGVhZCcgICBhc3NvY2lhIGkgdG9rZW4gZGkgcHJvc3BlemlvbmUgYWkgc2ltYm9saVxuIgorIiAgYHNvbHZlZCcgICAgICAgZGVzY3JpdmUgbGEgcmlkdXppb25lIGRlaSBjb25mbGl0dGkgc2hpZnQvcmlkdXppb25lXG4iCisiICBgYWxsJyAgICAgICAgICBpbmNsdWRlIHR1dHRlIHF1ZXN0ZSBpbmZvcm1hemlvbmlcbiIKKyIgIGBub25lJyAgICAgICAgIGRpc2FiaWxpdGEgbGEgcHJvZHV6aW9uZSBkZWwgcmFwcG9ydG9cbiIKKworIzogc3JjL2dldGFyZ3MuYzozODcKK21zZ2lkICIiCisiRkVBVFVSRSBpcyBhIGxpc3Qgb2YgY29tbWEgc2VwYXJhdGVkIHdvcmRzIHRoYXQgY2FuIGluY2x1ZGU6XG4iCisiICBgY2FyZXQnICAgICAgICBzaG93IGVycm9ycyB3aXRoIGNhcmV0c1xuIgorIiAgYGFsbCcgICAgICAgICAgYWxsIG9mIHRoZSBhYm92ZVxuIgorIiAgYG5vbmUnICAgICAgICAgZGlzYWJsZSBhbGwgb2YgdGhlIGFib3ZlXG4iCisiICAiCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozOTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlJlcG9ydCBidWdzIHRvIDwlcz4uXG4iCittc2dzdHIgIlNlZ25hbGFyZSBldmVudHVhbGkgYnVnIGEgPGJ1Zy1iaXNvbkBnbnUub3JnPi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaG9tZSBwYWdlOiA8JXM+LlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk3Cittc2dpZCAiR2VuZXJhbCBoZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4uXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IFJlcGxhY2UgTEFOR19DT0RFIGluIHRoaXMgVVJMIHdpdGggeW91ciBsYW5ndWFnZQorIy4gY29kZSA8aHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS9MQU5HX0NPREUuaHRtbD4gdG8KKyMuIGZvcm0gb25lIG9mIHRoZSBVUkxzIGF0IGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vLgorIy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRoZSBlbnRpcmUgVVJMIHdpdGggeW91ciB0cmFuc2xhdGlvbiB0ZWFtJ3MKKyMuIGVtYWlsIGFkZHJlc3MuCisjOiBzcmMvZ2V0YXJncy5jOjQxMAorbXNnaWQgIlJlcG9ydCB0cmFuc2xhdGlvbiBidWdzIHRvIDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtLz4uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzo0MTIKK21zZ2lkICJGb3IgY29tcGxldGUgZG9jdW1lbnRhdGlvbiwgcnVuOiBpbmZvIGJpc29uLlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImJpc29uIChHTlUgQmlzb24pICVzIgorbXNnc3RyICJiaXNvbiAoR05VIEJpc29uKSAlcyIKKworIzogc3JjL2dldGFyZ3MuYzo0MzAKK21zZ2lkICJXcml0dGVuIGJ5IFJvYmVydCBDb3JiZXR0IGFuZCBSaWNoYXJkIFN0YWxsbWFuLlxuIgorbXNnc3RyICJTY3JpdHRvIGRhIFJvYmVydCBDb3JiZXR0IGUgUmljaGFyZCBTdGFsbG1hbi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29weXJpZ2h0IChDKSAlZCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKK21zZ3N0ciAiQ29weXJpZ2h0IChDKSAlZCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MzcKK21zZ2lkICIiCisiVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk9cbiIKKyJ3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cbiIKK21zZ3N0ciAiIgorIlF1ZXN0byBlJyBzb2Z0d2FyZSBsaWJlcm87IHZlZGVyZSBpbCBzb3JnZW50ZSBwZXIgbGUgY29uZGl6aW9uaSBjdWkgZSdcbiIKKyJzb3R0b3Bvc3RhIGxhIGNvcGlhLiBOT04gYyfoIEFMQ1VOQSBnYXJhbnppYSwgbmVhbmNoZSBkaVxuIgorIkNPTU1FUkNJQUJJTElUQWAgbyBkaSBBREVHVUFURVpaQSBBRCBVTiBQQVJUSUNPTEFSRSBTQ09QTy5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0NTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHNrZWxldG9uIGRlY2xhcmF0aW9ucyBhcmUgaW52YWxpZCIKK21zZ3N0ciAiZGljaGlhcmF6aW9uaSBtdWx0aXBsZSBwZXIgJXMiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBsYW5ndWFnZSIKK21zZ3N0ciAidmFsb3JlIG5vbiB2YWxpZG86ICVzIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ3OQorIywgZnV6enkKK21zZ2lkICJtdWx0aXBsZSBsYW5ndWFnZSBkZWNsYXJhdGlvbnMgYXJlIGludmFsaWQiCittc2dzdHIgImRpY2hpYXJhemlvbmkgbXVsdGlwbGUgcGVyICVzIgorCisjOiBzcmMvZ2V0YXJncy5jOjc0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG1pc3Npbmcgb3BlcmFuZCIKK21zZ3N0ciAibWFuY2EgdW4gb3BlcmFuZG8gZG9wbyBgJXMnIgorCisjOiBzcmMvZ2V0YXJncy5jOjc0OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZXh0cmEgb3BlcmFuZCAlcyIKK21zZ3N0ciAib3BlcmFuZG8gbm9uIHJpY2hpZXN0byBgJXMnIgorCisjOiBzcmMvZ3JhbS5jOjExMgorbXNnaWQgImVtcHR5IgorbXNnc3RyICJ2dW90byIKKworIzogc3JjL2dyYW0uYzoyMDEKK21zZ2lkICJHcmFtbWFyIgorbXNnc3RyICJHcmFtbWF0aWNhIgorCisjOiBzcmMvZ3JhcGh2aXouYzo0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiLy8gR2VuZXJhdGVkIGJ5ICVzLlxuIgorIi8vIFJlcG9ydCBidWdzIHRvIDwlcz4uXG4iCisiLy8gSG9tZSBwYWdlOiA8JXM+LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9sb2NhdGlvbi5jOjkzIHNyYy9zY2FuLWdyYW0ubDo4NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSBudW1iZXIgb3ZlcmZsb3ciCittc2dzdHIgIiIKKworIzogc3JjL2xvY2F0aW9uLmM6OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29sdW1uIG51bWJlciBvdmVyZmxvdyIKK21zZ3N0ciAiIgorCisjOiBzcmMvbWFpbi5jOjE0NgorIywgZnV6enkKK21zZ2lkICJydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHMiCittc2dzdHIgInJlZ29sYSBtYWkgcmlkb3R0YSBhIGNhdXNhIGRlaSBjb25mbGl0dGkiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NDUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlJWRlZmluZSB2YXJpYWJsZSAlcyByZWRlZmluZWQiCittc2dzdHIgInNpbWJvbG8gJXMgcmlkZWZpbml0byIKKworIzogc3JjL211c2NsZS10YWIuYzo0NTMKK21zZ2lkICJwcmV2aW91cyBkZWZpbml0aW9uIgorbXNnc3RyICIiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NDkwIHNyYy9tdXNjbGUtdGFiLmM6NTA0IHNyYy9tdXNjbGUtdGFiLmM6NTU2CisjOiBzcmMvbXVzY2xlLXRhYi5jOjYyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5kZWZpbmVkICUlZGVmaW5lIHZhcmlhYmxlICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICUlZGVmaW5lIEJvb2xlYW4gdmFyaWFibGUgJXMiCittc2dzdHIgIiIKKworIzogc3JjL211c2NsZS10YWIuYzo2MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJSVkZWZpbmUgdmFyaWFibGUgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjEzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJhY2NlcHRlZCB2YWx1ZTogJXMiCittc2dzdHIgInZhbG9yZSBub24gdmFsaWRvOiAlcyIKKworIzogc3JjL3BhcnNlLWdyYW0ueTo3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBpZGVudGlmaWVyIGluIHBhcmFtZXRlciBkZWNsYXJhdGlvbiIKK21zZ3N0ciAibWFuY2EgdW4gaWRlbnRpZmljYXRvcmUgbmVsbGEgZGljaGlyYXppb25lIGRpIHVuIHBhcmFtZXRybyIKKworIzogc3JjL3ByaW50LmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIHR5cGUgJWQgaXMgJXNcbiIKK21zZ3N0ciAiIGlsIHRpcG8gJWQg6CAlc1xuIgorCisjOiBzcmMvcHJpbnQuYzoxNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAlZFxuIgorbXNnc3RyICJzaGlmdCBlIHByb3NlY3V6aW9uZSBhbGxvIHN0YXRvICVkXG4iCisKKyM6IHNyYy9wcmludC5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJnbyB0byBzdGF0ZSAlZFxuIgorbXNnc3RyICJwcm9zZWN1emlvbmUgYWxsbyBzdGF0byAlZFxuIgorCisjOiBzcmMvcHJpbnQuYzoyMDMKK21zZ2lkICJlcnJvciAobm9uYXNzb2NpYXRpdmUpXG4iCittc2dzdHIgImVycm9yZSAobm9uIGFzc29jaWF0aXZvKVxuIgorCisjOiBzcmMvcHJpbnQuYzoyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkdWNlIHVzaW5nIHJ1bGUgJWQgKCVzKSIKK21zZ3N0ciAicmlkdXppb25lIGNvbiBsYSByZWdvbGEgJWQgKCVzKSIKKworIzogc3JjL3ByaW50LmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgImFjY2VwdCIKK21zZ3N0ciAiYWNjZXR0YSIKKworIzogc3JjL3ByaW50LmM6MjY0IHNyYy9wcmludC5jOjMzOAorbXNnaWQgIiRkZWZhdWx0IgorbXNnc3RyICIkZGVmYXVsdCIKKworIzogc3JjL3ByaW50LmM6MzczIHNyYy9wcmludF9ncmFwaC5jOjc4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTdGF0ZSAlZCIKK21zZ3N0ciAiU3RhdG8gJWQiCisKKyM6IHNyYy9wcmludC5jOjQwOQorbXNnaWQgIlRlcm1pbmFscywgd2l0aCBydWxlcyB3aGVyZSB0aGV5IGFwcGVhciIKK21zZ3N0ciAiU2ltYm9saSB0ZXJtaW5hbGkgZSByZWdvbGUgaW4gY3VpIGFwcGFpb25vIgorCisjOiBzcmMvcHJpbnQuYzo0MzYKK21zZ2lkICJOb250ZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIiCittc2dzdHIgIlNpbWJvbGkgbm9udGVybWluYWxpIGUgcmVnb2xlIGluIGN1aSBhcHBhaW9ubyIKKworIzogc3JjL3ByaW50LmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiBsZWZ0OiIKK21zZ3N0ciAiIG5lbCBwcmltbyBtZW1icm86IgorCisjOiBzcmMvcHJpbnQuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uIHJpZ2h0OiIKK21zZ3N0ciAiIG5lbCBzZWNvbmRvIG1lbWJybzoiCisKKyM6IHNyYy9wcmludC5jOjUxMAorIywgZnV6enkKK21zZ2lkICJSdWxlcyB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzIgorbXNnc3RyICJyZWdvbGEgbWFpIHJpZG90dGEgYSBjYXVzYSBkZWkgY29uZmxpdHRpIgorCisjOiBzcmMvcmVhZGVyLmM6NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgJXMgZGVjbGFyYXRpb25zIgorbXNnc3RyICJkaWNoaWFyYXppb25pIG11bHRpcGxlIHBlciAlcyIKKworIzogc3JjL3JlYWRlci5jOjEzMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicmVzdWx0IHR5cGUgY2xhc2ggb24gbWVyZ2UgZnVuY3Rpb24gJXM6IDwlcz4gIT0gPCVzPiIKK21zZ3N0ciAiIgorImNvbmZsaXR0byBuZWkgdGlwaSBkZWwgcmlzdWx0YXRvIGRlbGxhIGZ1bnppb25lIGRpIG1lcmdlICVzOiA8JXM+ICE9IDwlcz4iCisKKyM6IHNyYy9yZWFkZXIuYzoxMzkgc3JjL3N5bXRhYi5jOjE1NiBzcmMvc3ltdGFiLmM6MTY2IHNyYy9zeW10YWIuYzo5MzgKKyM6IHNyYy9zeW10YWIuYzo5NTMgc3JjL3N5bXRhYi5jOjk2OCBzcmMvc3ltdGFiLmM6OTgzCisjLCBmdXp6eQorbXNnaWQgInByZXZpb3VzIGRlY2xhcmF0aW9uIgorbXNnc3RyICJwcmltYSBkaWNoaWFyYXppb25lIgorCisjOiBzcmMvcmVhZGVyLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZWQgc3ltYm9sIG5hbWUgZm9yICVzIGlnbm9yZWQiCittc2dzdHIgIiIKKworIzogc3JjL3JlYWRlci5jOjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICJydWxlIGdpdmVuIGZvciAlcywgd2hpY2ggaXMgYSB0b2tlbiIKK21zZ3N0ciAiZm9ybml0YSB1bmEgcmVnb2xhIHBlciBpbCB0b2tlbiAlcyIKKworIzogc3JjL3JlYWRlci5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ0eXBlIGNsYXNoIG9uIGRlZmF1bHQgYWN0aW9uOiA8JXM+ICE9IDwlcz4iCittc2dzdHIgImNvbmZsaXR0byBkaSB0aXBvIG5lbGwnYXppb25lIGRpIGRlZmF1bHQ6IDwlcz4gZSA8JXM+IgorCisjOiBzcmMvcmVhZGVyLmM6MzEwCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IHJ1bGUgZm9yIHR5cGVkIG5vbnRlcm1pbmFsLCBhbmQgbm8gYWN0aW9uIgorbXNnc3RyICJyZWdvbGEgdnVvdGEgZSBuZXNzdW5hIGF6aW9uZSBwZXIgdW4gbm9udGVybWluYWxlIGNvbiB0aXBvIgorCisjOiBzcmMvcmVhZGVyLmM6MzI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bnVzZWQgdmFsdWU6ICQlZCIKK21zZ3N0ciAidmFsb3JlIG5vbiB2YWxpZG86ICVzIgorCisjOiBzcmMvcmVhZGVyLmM6MzMwCittc2dpZCAidW5zZXQgdmFsdWU6ICQkIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9rZW4gZm9yICUlcHJlYyBpcyBub3QgZGVmaW5lZDogJXMiCittc2dzdHIgIiIKKworIzogc3JjL3JlYWRlci5jOjQzMSBzcmMvcmVhZGVyLmM6NDQ1IHNyYy9yZWFkZXIuYzo0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSBvbmUgJXMgYWxsb3dlZCBwZXIgcnVsZSIKK21zZ3N0ciAic29sbyB1biAlcyDoIHBlcm1lc3NvIGluIHVuYSByZWdvbGEiCisKKyM6IHNyYy9yZWFkZXIuYzo0NDEgc3JjL3JlYWRlci5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhZmZlY3RzIG9ubHkgR0xSIHBhcnNlcnMiCittc2dzdHIgIiVzIGNvbnNpZGVyYXRvIHNvbG8gbmVpIHBhcnNlciBHTFIiCisKKyM6IHNyYy9yZWFkZXIuYzo0NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgbXVzdCBiZSBmb2xsb3dlZCBieSBwb3NpdGl2ZSBudW1iZXIiCittc2dzdHIgIiVzIGRldmUgZXNzZXJlIHNlZ3VpdG8gZGEgdW4gaW50ZXJvIHBvc2l0aXZvIgorCisjOiBzcmMvcmVhZGVyLmM6NTU0CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bGUgaXMgdG9vIGxvbmciCittc2dzdHIgIiIKKworIzogc3JjL3JlYWRlci5jOjY3MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBydWxlcyBpbiB0aGUgaW5wdXQgZ3JhbW1hciIKK21zZ3N0ciAibmVzc3VuYSByZWdvbGEgbmVsbGEgZ3JhbW1hdGljYSBkaSBpbnB1dCIKKworIzogc3JjL3JlZHVjZS5jOjI0MQorIywgZnV6enkKK21zZ2lkICJydWxlIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAibmVzc3VuYSByZWdvbGEgbmVsbGEgZ3JhbW1hdGljYSBkaSBpbnB1dCIKKworIzogc3JjL3JlZHVjZS5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWR1Y2UuYzozNTAKKyMsIGZ1enp5Cittc2dpZCAiTm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAiU2ltYm9saSBub250ZXJtaW5hbGkgZSByZWdvbGUgaW4gY3VpIGFwcGFpb25vIgorCisjOiBzcmMvcmVkdWNlLmM6MzYzCisjLCBmdXp6eQorbXNnaWQgIlRlcm1pbmFscyB1bnVzZWQgaW4gZ3JhbW1hciIKK21zZ3N0ciAibmVzc3VuYSByZWdvbGEgbmVsbGEgZ3JhbW1hdGljYSBkaSBpbnB1dCIKKworIzogc3JjL3JlZHVjZS5jOjM3MgorIywgZnV6enkKK21zZ2lkICJSdWxlcyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgIm5lc3N1bmEgcmVnb2xhIG5lbGxhIGdyYW1tYXRpY2EgZGkgaW5wdXQiCisKKyM6IHNyYy9yZWR1Y2UuYzozODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnaWRfcGx1cmFsICIlZCBub250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogc3JjL3JlZHVjZS5jOjM5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJWQgcnVsZSB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dpZF9wbHVyYWwgIiVkIHJ1bGVzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0clswXSAibmVzc3VuYSByZWdvbGEgbmVsbGEgZ3JhbW1hdGljYSBkaSBpbnB1dCIKK21zZ3N0clsxXSAibmVzc3VuYSByZWdvbGEgbmVsbGEgZ3JhbW1hdGljYSBkaSBpbnB1dCIKKworIzogc3JjL3JlZHVjZS5jOjQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydCBzeW1ib2wgJXMgZG9lcyBub3QgZGVyaXZlIGFueSBzZW50ZW5jZSIKK21zZ3N0ciAiZGFsIHNpbWJvbG8gaW5pemlhbGUgJXMgbm9uIGRlcml2YSBhbGN1bmEgZnJhc2UiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYXkgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjI5Cittc2dpZCAiYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjIzMgorbXNnaWQgImZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVzZSBvZiBZWUZBSUwsIHdoaWNoIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDMxIHNyYy9zY2FuLWNvZGUubDo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJzIHRvOiAlYyVzIGF0ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zc2libHkgbWVhbnQ6ICVjIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCBoaWRpbmcgJWMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICIgYXQgJXMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ3MgorIywgYy1mb3JtYXQKK21zZ2lkICIsIGNhbm5vdCBiZSBhY2Nlc3NlZCBmcm9tIG1pZC1ydWxlIGFjdGlvbiBhdCAkJWQiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjUyMSBzcmMvc2Nhbi1ncmFtLmw6NzgzCisjLCBjLWZvcm1hdAorbXNnaWQgImludGVnZXIgb3V0IG9mIHJhbmdlOiAlcyIKK21zZ3N0ciAiaW50ZXJvIGZ1b3JpIGRhaSBsaW1pdGk6ICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjEwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZmVyZW5jZTogJXMiCittc2dzdHIgImRpcmV0dGl2YSBub24gdmFsaWRhOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IgYWZ0ZXIgJyVjJywgZXhwZWN0aW5nIGludGVnZXIsIGxldHRlciwgJ18nLCAnWycsIG9yICckJyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbiBiZWZvcmUgJCVkOiAlLipzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiAlLipzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzbGVhZGluZyByZWZlcmVuY2U6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2NjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImFtYmlndW91cyByZWZlcmVuY2U6ICVzIgorbXNnc3RyICJhcmdvbWVudG8gYW1iaWd1byAlcyBwZXIgJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwbGljaXQgdHlwZSBnaXZlbiBpbiB1bnR5cGVkIGdyYW1tYXIiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjc1OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJCQgZm9yIHRoZSBtaWRydWxlIGF0ICQlZCBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiTWFuY2EgdW5hIGRpY2hpYXJhemlvbmUgZGkgdGlwbyBwZXIgJCVkIGRpIGAlcyciCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3NjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiQkIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICJNYW5jYSB1bmEgZGljaGlhcmF6aW9uZSBkaSB0aXBvIHBlciAkJCBkaSBgJXMnIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6Nzg2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIkJXMgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIk1hbmNhIHVuYSBkaWNoaWFyYXppb25lIGRpIHRpcG8gcGVyICQlZCBkaSBgJXMnIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MTQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzdHJheSAnLCcgdHJlYXRlZCBhcyB3aGl0ZSBzcGFjZSIKK21zZ3N0ciAiYCwnIGluYXR0ZXNhIGludGVycHJldGF0YSBjb21lIHVubyBzcGF6aW8iCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBkaXJlY3RpdmU6ICVzIgorbXNnc3RyICJkaXJldHRpdmEgbm9uIHZhbGlkYTogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyNTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaWRlbnRpZmllcjogJXMiCittc2dzdHIgImRpcmV0dGl2YSBub24gdmFsaWRhOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjI5NQorIywgZnV6enkKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciIKK21zZ2lkX3BsdXJhbCAiaW52YWxpZCBjaGFyYWN0ZXJzIgorbXNnc3RyWzBdICJjYXJhdHRlcmUgbm9uIHZhbGlkbzogJXMiCittc2dzdHJbMV0gImNhcmF0dGVyZSBub24gdmFsaWRvOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGlkZW50aWZpZXIgaW4gYnJhY2tldGVkIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW4gaWRlbnRpZmllciBleHBlY3RlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MzgxCisjLCBmdXp6eQorbXNnaWQgImludmFsaWQgY2hhcmFjdGVyIGluIGJyYWNrZXRlZCBuYW1lIgorbXNnaWRfcGx1cmFsICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gYnJhY2tldGVkIG5hbWUiCittc2dzdHJbMF0gImNhcmF0dGVyZSBub24gdmFsaWRvOiAlcyIKK21zZ3N0clsxXSAiY2FyYXR0ZXJlIG5vbiB2YWxpZG86ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NDgxIHNyYy9zY2FuLWdyYW0ubDo1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgY2hhcmFjdGVyIGxpdGVyYWwiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjQ4NiBzcmMvc2Nhbi1ncmFtLmw6NTA3CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dHJhIGNoYXJhY3RlcnMgaW4gY2hhcmFjdGVyIGxpdGVyYWwiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bGwgY2hhcmFjdGVyIgorbXNnc3RyICJjYXJhdHRlcmUgbnVsbG8gbm9uIHZhbGlkbyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjUzMSBzcmMvc2Nhbi1ncmFtLmw6NTQxIHNyYy9zY2FuLWdyYW0ubDo1NjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIGFmdGVyIFxcLWVzY2FwZTogJXMiCittc2dzdHIgImNhcmF0dGVyZSBudWxsbyBub24gdmFsaWRvOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjU3MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgXFwtZXNjYXBlOiAlcyIKK21zZ3N0ciAiY2FyYXR0ZXJlIG5vbiB2YWxpZG86ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6OTAxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzIGF0IGVuZCBvZiBmaWxlIgorbXNnc3RyICJtYW5jYSB1biBgJXMnIGFsbGEgZmluZSBkZWwgZmlsZSIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjkxMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyBhdCBlbmQgb2YgbGluZSIKK21zZ3N0ciAibWFuY2EgdW4gYCVzJyBhbGxhIGZpbmUgZGVsbGEgbGluZWEiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5jbG9zZWQgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIGZldyBhcmd1bWVudHMgZm9yICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1za2VsLmw6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBmb3IgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW1saXN0LmM6MjExCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICQgdmFsdWU6ICQlZCIKK21zZ3N0ciAidmFsb3JlIG5vbiB2YWxpZG86ICVzIgorCisjOiBzcmMvc3ltdGFiLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUE9TSVggWWFjYyBmb3JiaWRzIGRhc2hlcyBpbiBzeW1ib2wgbmFtZXM6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW10YWIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBzeW1ib2xzIGluIGlucHV0IGdyYW1tYXIgKGxpbWl0IGlzICVkKSIKK21zZ3N0ciAidHJvcHBpIHNpbWJvbGkgbmVsbGEgZ3JhbW1hdGljYSAoaWwgbGltaXRlIOggJWQpIgorCisjOiBzcmMvc3ltdGFiLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICJkaWNoaWFyYXppb25lIGR1ZSB2b2x0ZSBkaSAlcyBwZXIgJXMiCisKKyM6IHNyYy9zeW10YWIuYzoxNjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlZGVjbGFyYXRpb24gZm9yIDwlcz4iCittc2dzdHIgImRpY2hpYXJhemlvbmUgZHVlIHZvbHRlIGRpICVzIHBlciAlcyIKKworIzogc3JjL3N5bXRhYi5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgcmVkZWZpbmVkIgorbXNnc3RyICJzaW1ib2xvICVzIHJpZGVmaW5pdG8iCisKKyM6IHNyYy9zeW10YWIuYzozNDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyByZWRlY2xhcmVkIgorbXNnc3RyICJzaW1ib2xvICVzIHJpZGVmaW5pdG8iCisKKyM6IHNyYy9zeW10YWIuYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWZpbmluZyB1c2VyIHRva2VuIG51bWJlciBvZiAlcyIKK21zZ3N0ciAibnVtZXJvIGRpIHRva2VuIGRlZmluaXRvIGRhbGwndXRlbnRlIHNwZWNpZmljYXRvIGR1ZSB2b2x0ZSBwZXIgJXMiCisKKyM6IHNyYy9zeW10YWIuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIGlzIHVzZWQsIGJ1dCBpcyBub3QgZGVmaW5lZCBhcyBhIHRva2VuIGFuZCBoYXMgbm8gcnVsZXMiCittc2dzdHIgInVzYXRvIGlsIHNpbWJvbG8gJXMsIG1hIG5vbiDoIHVuIHRva2VuIGUgbm9uIGhhIHJlZ29sZSIKKworIzogc3JjL3N5bXRhYi5jOjQxNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHVzZWQgbW9yZSB0aGFuIG9uY2UgYXMgYSBsaXRlcmFsIHN0cmluZyIKK21zZ3N0ciAic2ltYm9sbyBgJXMnIHVzYXRvIHBp+SBkaSB1bmEgdm9sdGEgaW4gdW5hIHN0cmluZ2EgbGV0dGVyYWxlIgorCisjOiBzcmMvc3ltdGFiLmM6NDE4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgZ2l2ZW4gbW9yZSB0aGFuIG9uZSBsaXRlcmFsIHN0cmluZyIKK21zZ3N0ciAiaWwgc2ltYm9sbyBgJXMnIGTgIHBpJmdyYXZlOyBkaSB1bmEgc3RyaW5nYSBsZXR0ZXJhbGUiCisKKyM6IHNyYy9zeW10YWIuYzo1MzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVzZXIgdG9rZW4gbnVtYmVyICVkIHJlZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICJkaWNoaWFyYXppb25lIGR1ZSB2b2x0ZSBkaSAlcyBwZXIgJXMiCisKKyM6IHNyYy9zeW10YWIuYzo1MzkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIGRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAiZGljaGlhcmF6aW9uZSBkdWUgdm9sdGUgZGkgJXMgcGVyICVzIgorCisjOiBzcmMvc3ltdGFiLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBzdGFydCBzeW1ib2wgJXMgaXMgdW5kZWZpbmVkIgorbXNnc3RyICJzaW1ib2xvIGluaXppYWxlICVzIG5vbiBkZWZpbml0byIKKworIzogc3JjL3N5bXRhYi5jOjkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgc3RhcnQgc3ltYm9sICVzIGlzIGEgdG9rZW4iCittc2dzdHIgInNwZWNpZmljYXRvIGlsIHRva2VuICVzIGNvbWUgc2ltYm9sbyBpbml6aWFsZSIKKworIzogc3JjL3N5bXRhYi5jOjkzNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlJWRlc3RydWN0b3IiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjk1MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJSVkZXN0cnVjdG9yIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW10YWIuYzo5NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdnZWQgJSVwcmludGVyIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW10YWIuYzo5ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdsZXNzICUlcHJpbnRlciIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6NjMgZGpncHAvc3VicGlwZS5jOjI4NiBkamdwcC9zdWJwaXBlLmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92aW5nIG9mICclcycgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzo4NSBkamdwcC9zdWJwaXBlLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3JlYXRpb24gb2YgYSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJzYXZpbmcgc3RkaW4gZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAic2F2aW5nIHN0ZG91dCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjE1MyBkamdwcC9zdWJwaXBlLmM6MTk3IGRqZ3BwL3N1YnBpcGUuYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlbmluZyBvZiB0bXBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIGJpc29uJ3Mgc3Rkb3V0IHRvIHRoZSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBtNCdzIHN0ZGluIGZyb20gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZW5pbmcgb2YgYSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjIxOAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBtNCdzIHN0ZG91dCB0byBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjM0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gJyVzJyBpbnRlcnJ1cHRlZCIKK21zZ3N0ciAiZXNlY3V6aW9uZSBkZWwgcHJvZ3JhbW1hIGF1c2lsaWFyaW8gYCVzJyBmYWxsaXRhIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjQxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gJyVzJyBub3QgZm91bmQiCittc2dzdHIgImltcG9zc2liaWxlIHRyb3ZhcmUgaWwgcHJvZ3JhbW1hIGF1c2lsaWFyaW8gYCVzJyIKKworIzogZGpncHAvc3VicGlwZS5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBiaXNvbidzIHN0ZGluIGZyb20gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCAlcyBmb3IgJXMiCittc2dzdHIgImFyZ29tZW50byBub24gdmFsaWRvICVzIHBlciAlcyIKKworIzogbGliL2FyZ21hdGNoLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImFtYmlndW91cyBhcmd1bWVudCAlcyBmb3IgJXMiCittc2dzdHIgImFyZ29tZW50byBhbWJpZ3VvICVzIHBlciAlcyIKKworIzogbGliL2FyZ21hdGNoLmM6MTUzCittc2dpZCAiVmFsaWQgYXJndW1lbnRzIGFyZToiCittc2dzdHIgIkdsaSBhcmdvbWVudGkgdmFsaWRpIHNvbm86IgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9hbGxvY3MsICV1IGZyZWVkICglLjJmJSUpLlxuIgorbXNnc3RyICIldSBiaXRzZXRfYWxsb2MsICV1IGxpYmVyYXRpICglLjJmJSUpLlxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9zZXRzLCAldSBjYWNoZWQgKCUuMmYlJSlcbiIKK21zZ3N0ciAiJXUgYml0c2V0X3NldCwgJXUgaW4gY2FjaGUgKCUuMmYlJSlcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfcmVzZXRzLCAldSBjYWNoZWQgKCUuMmYlJSlcbiIKK21zZ3N0ciAiJXUgYml0c2V0X3Jlc2V0LCAldSBpbiBjYWNoZSAoJS4yZiUlKVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF90ZXN0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF90ZXN0LCAldSBpbiBjYWNoZSAoJS4yZiUlKVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9saXN0c1xuIgorbXNnc3RyICIldSBiaXRzZXRfbGlzdFxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTkyCittc2dpZCAiY291bnQgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICJpc3RvZ3JhbW1hIGRlaSBjb250ZWdnaVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTk1Cittc2dpZCAic2l6ZSBsb2cgaGlzdG9ncmFtXG4iCittc2dzdHIgImlzdG9ncmFtbWEgZGVsbGUgZGltZW5zaW9uaVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTk4Cittc2dpZCAiZGVuc2l0eSBoaXN0b2dyYW1cbiIKK21zZ3N0ciAiaXN0b2dyYW5uYSBkZWxsZSBkZW5zaXTgXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJpdHNldCBzdGF0aXN0aWNzOlxuIgorIlxuIgorbXNnc3RyICIiCisiU3RhdGlzdGljaGUgZGVpIGJpdHNldDpcbiIKKyJcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJBY2N1bXVsYXRlZCBydW5zID0gJXVcbiIKK21zZ3N0ciAiRXNlY3V6aW9uaSBhY2N1bXVsYXRlID0gJXVcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI1OSBsaWIvYml0c2V0X3N0YXRzLmM6MjY0CisjLCBmdXp6eQorbXNnaWQgImNhbm5vdCByZWFkIHN0YXRzIGZpbGUiCittc2dzdHIgIkltcG9zc2liaWxlIGxlZ2dlcmUgaWwgZmlsZSBkZWxsZSBzdGF0aXN0aWNoZS4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyNjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImJhZCBzdGF0cyBmaWxlIHNpemVcbiIKK21zZ3N0ciAiRGltZW5zaW9uZSBlcnJhdGEgZGVsIGZpbGUgZGVsbGUgc3RhdGlzdGljaGUuXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyODcgbGliL2JpdHNldF9zdGF0cy5jOjI4OQorIywgZnV6enkKK21zZ2lkICJjYW5ub3Qgd3JpdGUgc3RhdHMgZmlsZSIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgc2NyaXZlcmUgaWwgZmlsZSBkZWxsZSBzdGF0aXN0aWNoZS4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyOTIKKyMsIGZ1enp5Cittc2dpZCAiY2Fubm90IG9wZW4gc3RhdHMgZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYXByaXJlIGluIHNjcml0dHVyYSBpbCBmaWxlIGRlbGxlIHN0YXRpc3RpY2hlLiIKKworIzogbGliL2Nsb3Nlb3V0LmM6MTEyCisjLCBmdXp6eQorbXNnaWQgIndyaXRlIGVycm9yIgorbXNnc3RyICJlcnJvcmUgZmF0YWxlOiAiCisKKyM6IGxpYi9lcnJvci5jOjE4OAorbXNnaWQgIlVua25vd24gc3lzdGVtIGVycm9yIgorbXNnc3RyICJFcnJvcmUgZGkgc2lzdGVtYSBzY29ub3NjaXV0byIKKworIzogbGliL2dldG9wdC5jOjU0NyBsaWIvZ2V0b3B0LmM6NTc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICclcycgaXMgYW1iaWd1b3VzOyBwb3NzaWJpbGl0aWVzOiIKK21zZ3N0ciAiJXM6IGwnb3B6aW9uZSBgJXMnIOggYW1iaWd1YVxuIgorCisjOiBsaWIvZ2V0b3B0LmM6NjI0IGxpYi9nZXRvcHQuYzo2MjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy0tJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IGwnb3B6aW9uZSBgLS0lcycgbm9uIGFtbWV0dGUgYXJnb21lbnRpXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo2MzcgbGliL2dldG9wdC5jOjY0MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnJWMlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogbCdvcHppb25lIGAlYyVzJyBub24gYW1tZXR0ZSBhcmdvbWVudGlcbiIKKworIzogbGliL2dldG9wdC5jOjY4NSBsaWIvZ2V0b3B0LmM6NzA0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctLSVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogbCdvcHppb25lIGAlcycgcmljaGllZGUgdW4gYXJnb21lbnRvXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo3NDIgbGliL2dldG9wdC5jOjc0NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gJy0tJXMnXG4iCittc2dzdHIgIiVzOiBvcHppb25lIHNjb25vc2NpdXRhIGAtLSVzJ1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6NzUzIGxpYi9nZXRvcHQuYzo3NTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uICclYyVzJ1xuIgorbXNnc3RyICIlczogb3B6aW9uZSBzY29ub3NjaXV0YSBgJWMlcydcbiIKKworIzogbGliL2dldG9wdC5jOjgwNSBsaWIvZ2V0b3B0LmM6ODA4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBvcHRpb24gLS0gJyVjJ1xuIgorbXNnc3RyICIlczogb3B6aW9uZSBub24gdmFsaWRhIC0tICVjXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo4NjEgbGliL2dldG9wdC5jOjg3OCBsaWIvZ2V0b3B0LmM6MTA4OCBsaWIvZ2V0b3B0LmM6MTEwNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAnJWMnXG4iCittc2dzdHIgIiVzOiBsJ29wemlvbmUgcmljaGllZGUgdW4gYXJnb21lbnRvIC0tICVjXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo5MzQgbGliL2dldG9wdC5jOjk1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLVcgJXMnIGlzIGFtYmlndW91c1xuIgorbXNnc3RyICIlczogbCdvcHppb25lIGAtVyAlcycg6CBhbWJpZ3VhXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo5NzQgbGliL2dldG9wdC5jOjk5MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLVcgJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IGwnb3B6aW9uZSBgLVcgJXMnIG5vbiBhbW1ldHRlIHVuIGFyZ29tZW50b1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6MTAxMyBsaWIvZ2V0b3B0LmM6MTAzMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLVcgJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBsJ29wemlvbmUgYCVzJyByaWNoaWVkZSB1biBhcmdvbWVudG9cbiIKKworIzogbGliL29ic3RhY2suYzo0MTMgbGliL29ic3RhY2suYzo0MTUgbGliL3hhbGxvYy1kaWUuYzozNAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIm1lbW9yaWEgZXNhdXJpdGEiCisKKyM6IGxpYi9zcGF3bi1waXBlLmM6MTQwIGxpYi9zcGF3bi1waXBlLmM6MTQzIGxpYi9zcGF3bi1waXBlLmM6MjY0CisjOiBsaWIvc3Bhd24tcGlwZS5jOjI2NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBwaXBlIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjaGl1ZGVyZSBpbCBmaWxlIGAlcyciCisKKyM6IGxpYi9zcGF3bi1waXBlLmM6MjM0IGxpYi9zcGF3bi1waXBlLmM6MzQ4IGxpYi93YWl0LXByb2Nlc3MuYzoyODIKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyBmYWlsZWQiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6CisjLiBHZXQgdHJhbnNsYXRpb25zIGZvciBvcGVuIGFuZCBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrcy4KKyMuIFRoZSBtZXNzYWdlIGNhdGFsb2cgc2hvdWxkIHRyYW5zbGF0ZSAiYCIgdG8gYSBsZWZ0CisjLiBxdW90YXRpb24gbWFyayBzdWl0YWJsZSBmb3IgdGhlIGxvY2FsZSwgYW5kIHNpbWlsYXJseSBmb3IKKyMuICInIi4gIEZvciBleGFtcGxlLCBhIEZyZW5jaCBVbmljb2RlIGxvY2FsIHNob3VsZCB0cmFuc2xhdGUKKyMuIHRoZXNlIHRvIFUrMDBBQiAoTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUKKyMuIFFVT1RBVElPTiBNQVJLKSwgYW5kIFUrMDBCQiAoUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFCisjLiBRVU9UQVRJT04gTUFSSyksIHJlc3BlY3RpdmVseS4KKyMuCisjLiBJZiB0aGUgY2F0YWxvZyBoYXMgbm8gdHJhbnNsYXRpb24sIHdlIHdpbGwgdHJ5IHRvCisjLiB1c2UgVW5pY29kZSBVKzIwMTggKExFRlQgU0lOR0xFIFFVT1RBVElPTiBNQVJLKSBhbmQKKyMuIFVuaWNvZGUgVSsyMDE5IChSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspLiAgSWYgdGhlCisjLiBjdXJyZW50IGxvY2FsZSBpcyBub3QgVW5pY29kZSwgbG9jYWxlX3F1b3Rpbmdfc3R5bGUKKyMuIHdpbGwgcXVvdGUgJ2xpa2UgdGhpcycsIGFuZCBjbG9jYWxlX3F1b3Rpbmdfc3R5bGUgd2lsbAorIy4gcXVvdGUgImxpa2UgdGhpcyIuICBZb3Ugc2hvdWxkIGFsd2F5cyBpbmNsdWRlIHRyYW5zbGF0aW9ucworIy4gZm9yICJgIiBhbmQgIiciIGV2ZW4gaWYgVSsyMDE4IGFuZCBVKzIwMTkgYXJlIGFwcHJvcHJpYXRlCisjLiBmb3IgeW91ciBsb2NhbGUuCisjLgorIy4gSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBwdXQgaGVyZSwgcGxlYXNlIHNlZQorIy4gPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUXVvdGF0aW9uX21hcmtzX2luX290aGVyX2xhbmd1YWdlcz4KKyMuIGFuZCB1c2UgZ2x5cGhzIHN1aXRhYmxlIGZvciB5b3VyIGxhbmd1YWdlLgorIzogbGliL3F1b3RlYXJnLmM6MzEyCittc2dpZCAiYCIKK21zZ3N0ciAiYCIKKworIzogbGliL3F1b3RlYXJnLmM6MzEzCittc2dpZCAiJyIKK21zZ3N0ciAiJyIKKworIzogbGliL3RpbWV2YXIuYzo0NzUKK21zZ2lkICIiCisiXG4iCisiRXhlY3V0aW9uIHRpbWVzIChzZWNvbmRzKVxuIgorbXNnc3RyICIiCisiXG4iCisiVGVtcG8gZGkgZXNlY3V6aW9uZSAoaW4gc2Vjb25kaSlcbiIKKworIzogbGliL3RpbWV2YXIuYzo1MjUKK21zZ2lkICIgVE9UQUwgICAgICAgICAgICAgICAgIDoiCittc2dzdHIgIiBUT1RBTEUgICAgICAgICAgICAgICAgOiIKKworIzogbGliL3RpbWV2YXIuYzo1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZSBpbiAlczogJWxkLiUwNmxkICglbGQlJSlcbiIKK21zZ3N0ciAidGVtcG8gaW4gJXM6ICVsZC4lMDZsZCAoJWxkJSUpXG4iCisKKyM6IGxpYi93MzJzcGF3bi5oOjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIl9vcGVuX29zZmhhbmRsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogbGliL3czMnNwYXduLmg6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlc3RvcmUgZmQgJWQ6IGR1cDIgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzoyMjMgbGliL3dhaXQtcHJvY2Vzcy5jOjI1NSBsaWIvd2FpdC1wcm9jZXNzLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MiCittc2dzdHIgIiIKKworIzogbGliL3dhaXQtcHJvY2Vzcy5jOjI3NCBsaWIvd2FpdC1wcm9jZXNzLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MgZ290IGZhdGFsIHNpZ25hbCAlZCIKK21zZ3N0ciAiIgorCisjfiBtc2dpZCAic3RhdGUgJWQiCisjfiBtc2dzdHIgInN0YXRvICVkIgorCisjfiBtc2dpZCAid2FybmluZzogIgorI34gbXNnc3RyICJhdHRlbnppb25lOiAiCisKKyN+IG1zZ2lkICJHTlUgYmlzb24gZ2VuZXJhdGVzIHBhcnNlcnMgZm9yIExBTFIoMSkgZ3JhbW1hcnMuXG4iCisjfiBtc2dzdHIgIkdOVSBiaXNvbiBnZW5lcmEgcGFyc2VyIHBlciBncmFtbWF0aWNoZSBMQUxSKDEpLlxuIgorCisjfiBtc2dpZCAiIgorI34gIklmIGEgbG9uZyBvcHRpb24gc2hvd3MgYW4gYXJndW1lbnQgYXMgbWFuZGF0b3J5LCB0aGVuIGl0IGlzIG1hbmRhdG9yeVxuIgorI34gImZvciB0aGUgZXF1aXZhbGVudCBzaG9ydCBvcHRpb24gYWxzby4gIFNpbWlsYXJseSBmb3Igb3B0aW9uYWwgYXJndW1lbnRzLlxuIgorI34gbXNnc3RyICIiCisjfiAiU2UgdW4gYXJnb21lbnRvIOggaW5kaWNhdG8gY29tZSBvYmJsaWdhdG9yaW8gaW4gdW4nb3B6aW9uZSBsdW5nYSwgYWxsb3JhXG4iCisjfiAi6CBvYmJsaWdhdG9yaW8gYW5jaGUgcGVyIGwnZXF1aXZhbGVudGUgb3B6aW9uZSBjb3J0YS4gIEFuYWxvZ2FtZW50ZSBwZXJcbiIKKyN+ICJnbGkgYXJnb21lbnRpIG9wemlvbmFsaS5cbiIKKworI34gbXNnaWQgIiIKKyN+ICJPcGVyYXRpb24gbW9kZXM6XG4iCisjfiAiICAtaCwgLS1oZWxwICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKKyN+ICIgIC1WLCAtLXZlcnNpb24gICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorI34gIiAgLXksIC0teWFjYyAgICAgIGVtdWxhdGUgUE9TSVggeWFjY1xuIgorI34gbXNnc3RyICIiCisjfiAiTW9kYWxpdOAgb3BlcmF0aXZlOlxuIgorI34gIiAgLWgsIC0taGVscCAgICAgIG1vc3RyYSBxdWVzdG8gYWl1dG8gZWQgZXNjZVxuIgorI34gIiAgLVYsIC0tdmVyc2lvbiAgIG1vc3RyYSBpbmZvcm1hemlvbmkgc3VsbGEgdmVyc2lvbmUgZWQgZXNjZVxuIgorI34gIiAgLXksIC0teWFjYyAgICAgIGVtdWxhIGlsIGNvbXBvcnRhbWVudG8gZGkgUE9TSVggeWFjY1xuIgorCisjfiBtc2dpZCAiUE9TSVggZm9yYmlkcyBkZWNsYXJhdGlvbnMgaW4gdGhlIGdyYW1tYXIiCisjfiBtc2dzdHIgIlBPU0lYIHByb2liaXNjZSBsJ3VzbyBkaSBkaWNoaWFyYXppb25pIGludGVybmUgYWxsYSBncmFtbWF0aWNhIgorCisjfiBtc2dpZCAiUnVsZXMgbmV2ZXIgcmVkdWNlZCIKKyN+IG1zZ3N0ciAiUmVnb2xlIG1haSByaWRvdHRlIgorCisjfiBtc2dpZCAidXNlbGVzcyBydWxlIgorI34gbXNnc3RyICJyZWdvbGEgaW51dGlsZSIKKworI34gbXNnaWQgInVzZWxlc3Mgbm9udGVybWluYWw6ICVzIgorI34gbXNnc3RyICJzaW1ib2xvIG5vbnRlcm1pbmFsZSBpbnV0aWxpenphdG86ICVzIgorCisjfiBtc2dpZCAiVXNlbGVzcyBub250ZXJtaW5hbHMiCisjfiBtc2dzdHIgIlNpbWJvbGkgbm9udGVybWluYWxpIGludXRpbGkiCisKKyN+IG1zZ2lkICJUZXJtaW5hbHMgd2hpY2ggYXJlIG5vdCB1c2VkIgorI34gbXNnc3RyICJTaW1ib2xpIHRlcm1pbmFsaSBpbnV0aWxpenphdGkiCisKKyN+IG1zZ2lkICJVc2VsZXNzIHJ1bGVzIgorI34gbXNnc3RyICJSZWdvbGUgaW51dGlsaSIKKworI34gbXNnaWQgIiVkIHJ1bGUgbmV2ZXIgcmVkdWNlZFxuIgorI34gbXNnaWRfcGx1cmFsICIlZCBydWxlcyBuZXZlciByZWR1Y2VkXG4iCisjfiBtc2dzdHJbMF0gIiVkIHJlZ29sYSBub24gYXBwbGljYXRhXG4iCisjfiBtc2dzdHJbMV0gIiVkIHJlZ29sZSBub24gYXBwbGljYXRlXG4iCisKKyN+IG1zZ2lkICIlZCB1c2VsZXNzIG5vbnRlcm1pbmFsIgorI34gbXNnaWRfcGx1cmFsICIlZCB1c2VsZXNzIG5vbnRlcm1pbmFscyIKKyN+IG1zZ3N0clswXSAiJWQgc2ltYm9sbyBub250ZXJtaW5hbGUgaW51dGlsaXp6YXRvIgorI34gbXNnc3RyWzFdICIlZCBzaW1ib2xpIG5vbnRlcm1pbmFsaSBpbnV0aWxpenphdGkiCisKKyN+IG1zZ2lkICIgYW5kICIKKyN+IG1zZ3N0ciAiIGUgIgorCisjfiBtc2dpZCAiJWQgdXNlbGVzcyBydWxlIgorI34gbXNnaWRfcGx1cmFsICIlZCB1c2VsZXNzIHJ1bGVzIgorI34gbXNnc3RyWzBdICIlZCByZWdvbGEgaW51dGlsZSIKKyN+IG1zZ3N0clsxXSAiJWQgcmVnb2xlIGludXRpbGkiCisKKyN+IG1zZ2lkICJpbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZTogJXMiCisjfiBtc2dzdHIgImVzY2FwZSBub24gdmFsaWRvOiAlcyIKKworI34gbXNnaWQgInVucmVjb2duaXplZCBlc2NhcGUgc2VxdWVuY2U6ICVzIgorI34gbXNnc3RyICJlc2NhcGUgbm9uIHJpY29ub3NjaXV0bzogJXMiCisKKyN+IG1zZ2lkICJtaXNzaW5nIGB7JyBpbiBgJXMnIgorI34gbXNnc3RyICJtYW5jYSB1biBgeycgaW4gYCVzJyIKKworI34gbXNnaWQgImludmFsaWQgJCB2YWx1ZSIKKyN+IG1zZ3N0ciAidmFsb3JlICQgbm9uIHZhbGlkbyIKKworI34gbXNnaWQgInRva2VucyAlcyBhbmQgJXMgYm90aCBhc3NpZ25lZCBudW1iZXIgJWQiCisjfiBtc2dzdHIgImkgdG9rZW4gJXMgZSAlcyBoYW5ubyBsbyBzdGVzc28gbnVtZXJvICVkIgorCisjfiBtc2dpZCAiJXM6IGlsbGVnYWwgb3B0aW9uIC0tICVjXG4iCisjfiBtc2dzdHIgIiVzOiBvcHppb25lIG5vbiB2YWxpZGEgLS0gJWNcbiIKKworI34gbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSBgJXMnIGNvdWxkIG5vdCBiZSBpbnZva2VkIgorI34gbXNnc3RyICJpbXBvc3NpYmlsZSBpbnZvY2FyZSBpbCBwcm9ncmFtbWEgYXVzaWxpYXJpbyBgJXMnIgorCisjfiBtc2dpZCAic3Vic2lkaWFyeSBwcm9ncmFtIGAlcycgZmFpbGVkIChleGl0IHN0YXR1cyAlZCkiCisjfiBtc2dzdHIgIiIKKyN+ICJlc2VjdXppb25lIGRlbCBwcm9ncmFtbWEgYXVzaWxpYXJpbyBgJXMnIGZhbGxpdGEgKGNvZGljZSBkaSB1c2NpdGEgJWQpIgorCisjfiBtc2dpZCAic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIKKyN+IG1zZ3N0ciAiZXJyb3JlIGRpIHNpbnRhc3NpOiBpbXBvc3NpYmlsZSB0b3JuYXJlIGluZGlldHJvIgorCisjfiBtc2dpZCAiU3RhY2sgbm93IgorI34gbXNnc3RyICJDb250ZW51dG8gZGVsbG8gc3RhY2siCisKKyN+IG1zZ2lkICJSZWR1Y2luZyBzdGFjayBieSBydWxlICVkIChsaW5lICV1KSwgIgorI34gbXNnc3RyICJyaWR1emlvbmUgY29uIGxhIHJlZ29sYSAlZCAobGluZWEgJXUpIgorCisjfiBtc2dpZCAicGFyc2VyIHN0YWNrIG92ZXJmbG93IgorI34gbXNnc3RyICJzdGFjayB0cm9wcG8gZ3JhbmRlIgorCisjfiBtc2dpZCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWx1XG4iCisjfiBtc2dzdHIgIkxhIG51b3ZhIGRpbWVuc2lvbmUgZGVsbG8gc3RhY2sg6CAlbHVcbiIKKworI34gbXNnaWQgIkVudGVyaW5nIHN0YXRlICVkXG4iCisjfiBtc2dzdHIgIlByb3NlY3V6aW9uZSBhbGxvIHN0YXRvICVkXG4iCisKKyN+IG1zZ2lkICJSZWFkaW5nIGEgdG9rZW46ICIKKyN+IG1zZ3N0ciAiTGVnZ28gdW4gdG9rZW46ICIKKworI34gbXNnaWQgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iCisjfiBtc2dzdHIgIk9yYSBhbGxhIGZpbmUgZGVsIGZpbGUuXG4iCisKKyN+IG1zZ2lkICJOZXh0IHRva2VuIGlzIgorI34gbXNnc3RyICJJbCBwcm9zc2ltbyB0b2tlbiDoIgorCisjfiBtc2dpZCAiU2hpZnRpbmciCisjfiBtc2dzdHIgIlNoaWZ0IgorCisjfiBtc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIgorI34gbXNnc3RyICJlcnJvcmUgZGkgc2ludGFzc2ksICVzIG5vbiBhdHRlc28iCisKKyN+IG1zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIKKyN+IG1zZ3N0ciAiZXJyb3JlIGRpIHNpbnRhc3NpLCBhdHRlc28gJTIkcyBlIG5vbiAlMSRzIgorCisjfiBtc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiCisjfiBtc2dzdHIgImVycm9yZSBkaSBzaW50YXNzaSwgYXR0ZXNvICUyJHMgbyAlMyRzIGUgbm9uICUxJHMiCisKKyN+IG1zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIKKyN+IG1zZ3N0ciAiZXJyb3JlIGRpIHNpbnRhc3NpLCBhdHRlc28gJTIkcyBvICUzJHMgbyAlNCRzIGUgbm9uICUxJHMiCisKKyN+IG1zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIKKyN+IG1zZ3N0ciAiZXJyb3JlIGRpIHNpbnRhc3NpLCBhdHRlc28gJTIkcyBvICUzJHMgbyAlNCRzIG8gJTUkcyBlIG5vbiAlMSRzIgorCisjfiBtc2dpZCAic3ludGF4IGVycm9yOyBhbHNvIG1lbW9yeSBleGhhdXN0ZWQiCisjfiBtc2dzdHIgImVycm9yZSBkaSBzaW50YXNzaTsgbWVtb3JpYSBlc2F1cml0YSIKKworI34gbXNnaWQgInN5bnRheCBlcnJvciIKKyN+IG1zZ3N0ciAiZXJyb3JlIGRpIHNpbnRhc3NpIgorCisjfiBtc2dpZCAiRXJyb3I6IGRpc2NhcmRpbmciCisjfiBtc2dzdHIgIkVycm9yZTogc2NhcnRvIgorCisjfiBtc2dpZCAiRXJyb3I6IHBvcHBpbmciCisjfiBtc2dzdHIgIkVycm9yZTogcG9wIGRpIgorCisjfiBtc2dpZCAiRXJyb3I6IGRpc2NhcmRpbmcgbG9va2FoZWFkIgorI34gbXNnc3RyICJFcnJvcmU6IHNjYXJ0byBpbCBsb29rYWhlYWQiCmRpZmYgLS1naXQgYS9wby9qYS5nbW8gYi9wby9qYS5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU4NDgyYQotLS0gL2Rldi9udWxsCisrKyBiL3BvL2phLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9qYS5wbyBiL3BvL2phLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhOGZhMDYKLS0tIC9kZXYvbnVsbAorKysgYi9wby9qYS5wbwpAQCAtMCwwICsxLDE3NjAgQEAKKyMgSmFwYW5lc2UgbWVzc2FnZSBmb3IgR05VIGJpc29uCisjIENvcHlyaWdodCAoQykgMjAwMSwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGJpc29uIHBhY2thZ2UuCisjIERhaXN1a2UgWWFtYXNoaXRhIDx5YW1hZEBtYi5pbmZvd2ViLm5lLmpwPiwgMjAwMS4KKyMgWWFzdWFraSBUYW5pZ3VjaGkgPHlhc3Vha2l0QGdtYWlsLmNvbT4sIDIwMTAKKyMgVGFrZXNoaSBIYW1hc2FraSA8aG1hdHJqcEB1c2Vycy5zb3VyY2Vmb3JnZS5qcD4sIDIwMTIKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IEdOVSBiaXNvbiAyLjUuMVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBidWctYmlzb25AZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEyLTEyLTEyIDE2OjA5KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEyLTA2LTEwIDE4OjQ3KzA5MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFRha2VzaGkgSGFtYXNha2kgPGhtYXRyanBAdXNlcnMuc291cmNlZm9yZ2UuanA+XG4iCisiTGFuZ3VhZ2UtVGVhbTogSmFwYW5lc2UgPHRyYW5zbGF0aW9uLXRlYW0tamFAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiBqYVxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MTsgcGx1cmFsPTA7XG4iCisKKyM6IHNyYy9jb21wbGFpbi5jOjEyMCBzcmMvY29tcGxhaW4uYzoxMzEgc3JjL2NvbXBsYWluLmM6MTQwIHNyYy9jb21wbGFpbi5jOjE4OAorIzogc3JjL2NvbXBsYWluLmM6MTk4Cittc2dpZCAid2FybmluZyIKK21zZ3N0ciAi6K2m5ZGKIgorCisjOiBzcmMvY29tcGxhaW4uYzoxNTEgc3JjL2NvbXBsYWluLmM6MTYwIHNyYy9jb21wbGFpbi5jOjE2NworIywgZnV6enkKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAi44Ko44Op44O8IgorCisjOiBzcmMvY29tcGxhaW4uYzoyMDggc3JjL2NvbXBsYWluLmM6MjE1Cittc2dpZCAiZmF0YWwgZXJyb3IiCittc2dzdHIgIuiHtOWRveeahOOCqOODqeODvCIKKworIzogc3JjL2NvbmZsaWN0cy5jOjc3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyBzaGlmdCIKK21zZ3N0ciAi54q25oWLICVkIOOBruimj+WJhyAlZCDjgajjg4jjg7zjgq/jg7MgJXMg44Gu56u25ZCI44KSJXPjgajjgZfjgabop6PmsbrjgIJcbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjg2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyByZWR1Y2UiCittc2dzdHIgIueKtuaFiyAlZCDjga7opo/liYcgJWQg44Go44OI44O844Kv44OzICVzIOOBruertuWQiOOCkiVz44Go44GX44Gm6Kej5rG644CCXG4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo5NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgYW4gZXJyb3IiCittc2dzdHIgIueKtuaFiyAlZCDjga7opo/liYcgJWQg44Go44OI44O844Kv44OzICVzIOOBruertuWQiOOCkiVz44Go44GX44Gm6Kej5rG644CCXG4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgc2hpZnQvcmVkdWNlLCAlZCByZWR1Y2UvcmVkdWNlXG4iCittc2dzdHIgIuWkieWMluiomOWPt+OCkuWNiumfs+S9juOBj+OBmeOCiyIKKworIzogc3JjL2NvbmZsaWN0cy5jOjQ5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCBzaGlmdC9yZWR1Y2VcbiIKK21zZ3N0ciAi5aSJ5YyW6KiY5Y+344KS5Y2K6Z+z5L2O44GP44GZ44KLIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDk3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdHM6ICVkIHJlZHVjZS9yZWR1Y2VcbiIKK21zZ3N0ciAi55m65YWJ44KS5rib44KJ44GZKF9MKSIKKworIzogc3JjL2NvbmZsaWN0cy5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdGF0ZSAlZCAiCittc2dzdHIgIueKtuaFiyAlZCAiCisKKyM6IHNyYy9jb25mbGljdHMuYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSVleHBlY3QtcnIgYXBwbGllcyBvbmx5IHRvIEdMUiBwYXJzZXJzIgorbXNnc3RyICIiCisKKyM6IHNyYy9jb25mbGljdHMuYzo2MTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICVkIHNoaWZ0L3JlZHVjZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiZXhwZWN0ZWQgJWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAi5pys5p2lICVkIOWAi+OBruOCt+ODleODiC/pgoTlhYPooZ3nqoHjgafjgYLjgovjga/jgZrjgafjgZlcbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjYyMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJWQgcmVkdWNlL3JlZHVjZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiZXhwZWN0ZWQgJWQgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMiCittc2dzdHJbMF0gIuODm+OCueODiOWQjeOBruihneeqgVxuIgorCisjOiBzcmMvZmlsZXMuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBvcGVuIgorbXNnc3RyICIlczog6ZaL44GP44GT44Go44GM44Gn44GN44G+44Gb44KTIgorCisjOiBzcmMvZmlsZXMuYzoxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5wdXQvb3V0cHV0IGVycm9yIgorbXNnc3RyICLlhaXlipsv5Ye65Yqb44Ko44Op44O844Gn44GZIgorCisjOiBzcmMvZmlsZXMuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNsb3NlIGZpbGUiCittc2dzdHIgIuODleOCoeOCpOODq+OCkumWieOBmOOCi+OBk+OBqOOBjOOBp+OBjeOBvuOBm+OCkyIKKworIzogc3JjL2ZpbGVzLmM6MzUyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBvdmVyd3JpdGUgdGhlIGlucHV0IGZpbGUgJXMiCittc2dzdHIgIiDjg5XjgqHjgqTjg6vjgpLkuIrmm7jjgY3jgZfjgojjgYbjgajjgZfjgZ/pmpssIOWGjeWPluW+l+OBq+WkseaVl+OBl+OBvuOBl+OBnyIKKworIzogc3JjL2ZpbGVzLmM6MzYyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdGluZyBvdXRwdXRzIHRvIGZpbGUgJXMiCittc2dzdHIgIuODquODouODvOODiOODleOCoeOCpOODq+OBuOOBruWPgueFpyIKKworIzogc3JjL2dldGFyZ3MuYzoyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5IGAlcyAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIgorbXNnc3RyICJgJXMgLS1oZWxwJyDjgafoqbPntLDmg4XloLHjgpLlj4LnhafjgZfjgabjgY/jgaDjgZXjgYRcbiIKKworIzogc3JjL2dldGFyZ3MuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFtPUFRJT05dLi4uIEZJTEVcbiIKK21zZ3N0ciAi5L2/44GE5pa5OiAlcyBb44Kq44OX44K344On44OzXS4uLiDjg5XjgqHjgqTjg6tcbiIKKworIzogc3JjL2dldGFyZ3MuYzozMDIKK21zZ2lkICIiCisiR2VuZXJhdGUgYSBkZXRlcm1pbmlzdGljIExSIG9yIGdlbmVyYWxpemVkIExSIChHTFIpIHBhcnNlciBlbXBsb3lpbmdcbiIKKyJMQUxSKDEpLCBJRUxSKDEpLCBvciBjYW5vbmljYWwgTFIoMSkgcGFyc2VyIHRhYmxlcy4gIElFTFIoMSkgYW5kXG4iCisiY2Fub25pY2FsIExSKDEpIHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6MzA5CisjLCBmdXp6eQorbXNnaWQgIiIKKyJNYW5kYXRvcnkgYXJndW1lbnRzIHRvIGxvbmcgb3B0aW9ucyBhcmUgbWFuZGF0b3J5IGZvciBzaG9ydCBvcHRpb25zIHRvby5cbiIKK21zZ3N0ciAi6ZW344GE44Kq44OX44K344On44Oz44Gr5b+F6aCI44Gu5byV5pWw44Gv55+t44GE44Kq44OX44K344On44Oz44Gr44KC5b+F6aCI44Gn44GZLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMxMgorbXNnaWQgIlRoZSBzYW1lIGlzIHRydWUgZm9yIG9wdGlvbmFsIGFyZ3VtZW50cy5cbiIKK21zZ3N0ciAi44Kq44OX44K344On44Oz44Gu5byV5pWw44Gr44Gk44GE44Gm44KC5ZCM5qeY44Gn44GZ44CCXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzE2Cittc2dpZCAiIgorIlxuIgorIk9wZXJhdGlvbiBtb2RlczpcbiIKKyIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCisiICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorIiAgICAgIC0tcHJpbnQtbG9jYWxlZGlyICAgICAgb3V0cHV0IGRpcmVjdG9yeSBjb250YWluaW5nIGxvY2FsZS1kZXBlbmRlbnQgIgorImRhdGFcbiIKKyIgICAgICAtLXByaW50LWRhdGFkaXIgICAgICAgIG91dHB1dCBkaXJlY3RvcnkgY29udGFpbmluZyBza2VsZXRvbnMgYW5kIFhTTFRcbiIKKyIgIC15LCAtLXlhY2MgICAgICAgICAgICAgICAgIGVtdWxhdGUgUE9TSVggWWFjY1xuIgorIiAgLVcsIC0td2FybmluZ3NbPUNBVEVHT1JZXSAgcmVwb3J0IHRoZSB3YXJuaW5ncyBmYWxsaW5nIGluIENBVEVHT1JZXG4iCisiICAtZiwgLS1mZWF0dXJlWz1GRUFUVVJFXSAgICBhY3RpdmF0ZSBtaXNjZWxsYW5lb3VzIGZlYXR1cmVzXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozMjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJzZXI6XG4iCisiICAtTCwgLS1sYW5ndWFnZT1MQU5HVUFHRSAgICAgICAgICBzcGVjaWZ5IHRoZSBvdXRwdXQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VcbiIKKyIgIC1TLCAtLXNrZWxldG9uPUZJTEUgICAgICAgICAgICAgIHNwZWNpZnkgdGhlIHNrZWxldG9uIHRvIHVzZVxuIgorIiAgLXQsIC0tZGVidWcgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudCB0aGUgcGFyc2VyIGZvciBkZWJ1Z2dpbmdcbiIKKyIgICAgICAtLWxvY2F0aW9ucyAgICAgICAgICAgICAgICAgIGVuYWJsZSBsb2NhdGlvbiBzdXBwb3J0XG4iCisiICAtRCwgLS1kZWZpbmU9TkFNRVs9VkFMVUVdICAgICAgICBzaW1pbGFyIHRvICclZGVmaW5lIE5BTUUgXCJWQUxVRVwiJ1xuIgorIiAgLUYsIC0tZm9yY2UtZGVmaW5lPU5BTUVbPVZBTFVFXSAgb3ZlcnJpZGUgJyVkZWZpbmUgTkFNRSBcIlZBTFVFXCInXG4iCisiICAtcCwgLS1uYW1lLXByZWZpeD1QUkVGSVggICAgICAgICBwcmVwZW5kIFBSRUZJWCB0byB0aGUgZXh0ZXJuYWwgc3ltYm9sc1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZCBieSAnLURhcGkucHJlZml4PVBSRUZJWCdcbiIKKyIgIC1sLCAtLW5vLWxpbmVzICAgICAgICAgICAgICAgICAgIGRvbid0IGdlbmVyYXRlICcjbGluZScgZGlyZWN0aXZlc1xuIgorIiAgLWssIC0tdG9rZW4tdGFibGUgICAgICAgICAgICAgICAgaW5jbHVkZSBhIHRhYmxlIG9mIHRva2VuIG5hbWVzXG4iCittc2dzdHIgIiIKKyLmp4vmlofop6PmnpDlmag6XG4iCisiICAtUywgLS1za2VsZXRvbj1GSUxFICAgICAgICDliKnnlKjjgZnjgovjgrnjgrHjg6vjg4jjg7PjgpLmjIflrprjgZnjgotcbiIKKyIgIC10LCAtLWRlYnVnICAgICAgICAgICAgICAgIOani+aWh+ino+aekOOBruODh+ODkOODg+OCsOeUqOOBruaJi+autVxuIgorIiAgICAgIC0tbG9jYXRpb25zICAgICAgICAgICAg6KiI566X57WQ5p6c5L2N572u44KS5pyJ5Yq544Gr44GZ44KLXG4iCisiICAtcCwgLS1uYW1lLXByZWZpeD1QUkVGSVggICBQUkVGSVgg44KS5aSW6YOo44K344Oz44Oc44Or44Go44GX44Gm5YWI6aCt44Gr5oy/5YWl44GZ44KLXG4iCisiICAtbCwgLS1uby1saW5lcyAgICAgICAgICAgICBgI2xpbmUnIOODh+OCo+ODrOOCr+ODhuOCo+ODluOCkueUn+aIkOOBl+OBquOBhFxuIgorIiAgLW4sIC0tbm8tcGFyc2VyICAgICAgICAgICAg44OG44O844OW44Or44Gu44G/44KS55Sf5oiQ44GZ44KLXG4iCisiICAtaywgLS10b2tlbi10YWJsZSAgICAgICAgICDjg4jjg7zjgq/jg7PlkI3jga7jg4bjg7zjg5bjg6vjgpLlkKvjgoHjgotcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNDYKK21zZ2lkICIiCisiT3V0cHV0OlxuIgorIiAgICAgIC0tZGVmaW5lc1s9RklMRV0gICAgICAgYWxzbyBwcm9kdWNlIGEgaGVhZGVyIGZpbGVcbiIKKyIgIC1kICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2V3aXNlIGJ1dCBjYW5ub3Qgc3BlY2lmeSBGSUxFIChmb3IgUE9TSVggIgorIllhY2MpXG4iCisiICAtciwgLS1yZXBvcnQ9VEhJTkdTICAgICAgICBhbHNvIHByb2R1Y2UgZGV0YWlscyBvbiB0aGUgYXV0b21hdG9uXG4iCisiICAgICAgLS1yZXBvcnQtZmlsZT1GSUxFICAgICB3cml0ZSByZXBvcnQgdG8gRklMRVxuIgorIiAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgc2FtZSBhcyBgLS1yZXBvcnQ9c3RhdGUnXG4iCisiICAtYiwgLS1maWxlLXByZWZpeD1QUkVGSVggICBzcGVjaWZ5IGEgUFJFRklYIGZvciBvdXRwdXQgZmlsZXNcbiIKKyIgIC1vLCAtLW91dHB1dD1GSUxFICAgICAgICAgIGxlYXZlIG91dHB1dCB0byBGSUxFXG4iCisiICAtZywgLS1ncmFwaFs9RklMRV0gICAgICAgICBhbHNvIG91dHB1dCBhIGdyYXBoIG9mIHRoZSBhdXRvbWF0b25cbiIKKyIgIC14LCAtLXhtbFs9RklMRV0gICAgICAgICAgIGFsc28gb3V0cHV0IGFuIFhNTCByZXBvcnQgb2YgdGhlIGF1dG9tYXRvblxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoZSBYTUwgc2NoZW1hIGlzIGV4cGVyaW1lbnRhbClcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjM2MQorbXNnaWQgIiIKKyJXYXJuaW5nIGNhdGVnb3JpZXMgaW5jbHVkZTpcbiIKKyIgIGBtaWRydWxlLXZhbHVlcycgIHVuc2V0IG9yIHVudXNlZCBtaWRydWxlIHZhbHVlc1xuIgorIiAgYHlhY2MnICAgICAgICAgICAgaW5jb21wYXRpYmlsaXRpZXMgd2l0aCBQT1NJWCBZYWNjXG4iCisiICBgY29uZmxpY3RzLXNyJyAgICBTL1IgY29uZmxpY3RzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgY29uZmxpY3RzLXJyJyAgICBSL1IgY29uZmxpY3RzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgZGVwcmVjYXRlZCcgICAgICBvYnNvbGV0ZSBjb25zdHJ1Y3RzXG4iCisiICBgb3RoZXInICAgICAgICAgICBhbGwgb3RoZXIgd2FybmluZ3MgKGVuYWJsZWQgYnkgZGVmYXVsdClcbiIKKyIgIGBhbGwnICAgICAgICAgICAgIGFsbCB0aGUgd2FybmluZ3NcbiIKKyIgIGBuby1DQVRFR09SWScgICAgIHR1cm4gb2ZmIHdhcm5pbmdzIGluIENBVEVHT1JZXG4iCisiICBgbm9uZScgICAgICAgICAgICB0dXJuIG9mZiBhbGwgdGhlIHdhcm5pbmdzXG4iCisiICBgZXJyb3InICAgICAgICAgICB0cmVhdCB3YXJuaW5ncyBhcyBlcnJvcnNcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjM3NgorbXNnaWQgIiIKKyJUSElOR1MgaXMgYSBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCB3b3JkcyB0aGF0IGNhbiBpbmNsdWRlOlxuIgorIiAgYHN0YXRlJyAgICAgICAgZGVzY3JpYmUgdGhlIHN0YXRlc1xuIgorIiAgYGl0ZW1zZXQnICAgICAgY29tcGxldGUgdGhlIGNvcmUgaXRlbSBzZXRzIHdpdGggdGhlaXIgY2xvc3VyZVxuIgorIiAgYGxvb2thaGVhZCcgICAgZXhwbGljaXRseSBhc3NvY2lhdGUgbG9va2FoZWFkIHRva2VucyB0byBpdGVtc1xuIgorIiAgYHNvbHZlZCcgICAgICAgZGVzY3JpYmUgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cyBzb2x2aW5nXG4iCisiICBgYWxsJyAgICAgICAgICBpbmNsdWRlIGFsbCB0aGUgYWJvdmUgaW5mb3JtYXRpb25cbiIKKyIgIGBub25lJyAgICAgICAgIGRpc2FibGUgdGhlIHJlcG9ydFxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzg3Cittc2dpZCAiIgorIkZFQVRVUkUgaXMgYSBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCB3b3JkcyB0aGF0IGNhbiBpbmNsdWRlOlxuIgorIiAgYGNhcmV0JyAgICAgICAgc2hvdyBlcnJvcnMgd2l0aCBjYXJldHNcbiIKKyIgIGBhbGwnICAgICAgICAgIGFsbCBvZiB0aGUgYWJvdmVcbiIKKyIgIGBub25lJyAgICAgICAgIGRpc2FibGUgYWxsIG9mIHRoZSBhYm92ZVxuIgorIiAgIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorbXNnc3RyICIiCisiXG4iCisi44OQ44Kw44KS55m66KaL44GX44Gf44KJIDwlcz4g5a6b44Gr5aCx5ZGK44GX44Gm5LiL44GV44GE44CCXG4iCisi57+76Kiz44Gr6Zai44GZ44KL44OQ44Kw44GvPHRyYW5zbGF0aW9uLXRlYW0tamFAbGlzdHMuc291cmNlZm9yZ2UubmV0PuOBq+WgseWRiuOBl+OBpuOBj+OBoOOBlSIKKyLjgYTjgIJcbiIKKworIzogc3JjL2dldGFyZ3MuYzozOTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIGhvbWUgcGFnZTogPCVzPi5cbiIKK21zZ3N0ciAiJXMg44Gu44Ob44O844Og44Oa44O844K4OiA8JXM+XG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk3CisjLCBmdXp6eQorbXNnaWQgIkdlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LlxuIgorbXNnc3RyICIiCisiR05VIOOCveODleODiOOCpuOCp+OCouOCkuS9v+eUqOOBmeOCi+mam+OBruS4gOiIrOeahOOBquODmOODq+ODlzogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz5cbiIKKworIy4gVFJBTlNMQVRPUlM6IFJlcGxhY2UgTEFOR19DT0RFIGluIHRoaXMgVVJMIHdpdGggeW91ciBsYW5ndWFnZQorIy4gY29kZSA8aHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS9MQU5HX0NPREUuaHRtbD4gdG8KKyMuIGZvcm0gb25lIG9mIHRoZSBVUkxzIGF0IGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vLgorIy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRoZSBlbnRpcmUgVVJMIHdpdGggeW91ciB0cmFuc2xhdGlvbiB0ZWFtJ3MKKyMuIGVtYWlsIGFkZHJlc3MuCisjOiBzcmMvZ2V0YXJncy5jOjQxMAorbXNnaWQgIlJlcG9ydCB0cmFuc2xhdGlvbiBidWdzIHRvIDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtLz4uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzo0MTIKK21zZ2lkICJGb3IgY29tcGxldGUgZG9jdW1lbnRhdGlvbiwgcnVuOiBpbmZvIGJpc29uLlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImJpc29uIChHTlUgQmlzb24pICVzIgorbXNnc3RyICJiaXNvbiAoR05VIEJpc29uKSAlcyIKKworIzogc3JjL2dldGFyZ3MuYzo0MzAKK21zZ2lkICJXcml0dGVuIGJ5IFJvYmVydCBDb3JiZXR0IGFuZCBSaWNoYXJkIFN0YWxsbWFuLlxuIgorbXNnc3RyICJSb2JlcnQgQ29yYmV0dCDjgaggUmljaGFyZCBTdGFsbG1hbiDjgavjgojjgaPjgabmm7jjgYvjgozjgb7jgZfjgZ9cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29weXJpZ2h0IChDKSAlZCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKK21zZ3N0ciAiQ29weXJpZ2h0IChDKSAlZCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MzcKK21zZ2lkICIiCisiVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk9cbiIKKyJ3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cbiIKK21zZ3N0ciAiIgorIlRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PXG4iCisid2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuXG4iCisiW+WPguiAg+iosyAtLSDms5XnmoTlirnlipvjga/oi7HmlofjgYzpgannlKjjgZXjgozjgb7jgZldXG4iCisi44GT44KM44Gv44OV44Oq44O844K944OV44OI44Km44Kn44Ki44Gn44GZIC0tIOikh+ijveOBq+OBpOOBhOOBpuOBruadoeS7tuOBr+OCveODvOOCueOCkuimi+OBvuOBl+OCh+OBhuOAglxuIgorIuS4gOWIh+OBruS/neiovOOBr+OBguOCiuOBvuOBm+OCkyAtLSDllYbmpa3mgKfjgoTnm67nmoTpganlkIjmgKfjgavjgaTjgYTjgabjga7kv53oqLzjgZnjgonjgYLjgorjgb7jgZvjgpPjgIJcbiIKKworIzogc3JjL2dldGFyZ3MuYzo0NTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHNrZWxldG9uIGRlY2xhcmF0aW9ucyBhcmUgaW52YWxpZCIKK21zZ3N0ciAiJXMg44GM6KSH5pWw5YCL5a6j6KiA44GV44KM44G+44GX44GfIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBsYW5ndWFnZSIKK21zZ3N0ciAiJXM6IOeEoeWKueOBquiogOiqniIKKworIzogc3JjL2dldGFyZ3MuYzo0NzkKKyMsIGZ1enp5Cittc2dpZCAibXVsdGlwbGUgbGFuZ3VhZ2UgZGVjbGFyYXRpb25zIGFyZSBpbnZhbGlkIgorbXNnc3RyICIlcyDjgYzopIfmlbDlgIvlrqPoqIDjgZXjgozjgb7jgZfjgZ8iCisKKyM6IHNyYy9nZXRhcmdzLmM6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBtaXNzaW5nIG9wZXJhbmQiCittc2dzdHIgIiVzOiDjgqrjg5rjg6njg7Pjg4njgYzjgYLjgorjgb7jgZvjgpMiCisKKyM6IHNyYy9nZXRhcmdzLmM6NzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dHJhIG9wZXJhbmQgJXMiCittc2dzdHIgIuS9meWIhuOBquOCquODmuODqeODs+ODiSAlcyIKKworIzogc3JjL2dyYW0uYzoxMTIKK21zZ2lkICJlbXB0eSIKK21zZ3N0ciAi56m6IgorCisjOiBzcmMvZ3JhbS5jOjIwMQorbXNnaWQgIkdyYW1tYXIiCittc2dzdHIgIuaWh+azlSIKKworIzogc3JjL2dyYXBodml6LmM6NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIi8vIEdlbmVyYXRlZCBieSAlcy5cbiIKKyIvLyBSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorIi8vIEhvbWUgcGFnZTogPCVzPi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvbG9jYXRpb24uYzo5MyBzcmMvc2Nhbi1ncmFtLmw6ODU5CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgbnVtYmVyIG92ZXJmbG93IgorbXNnc3RyICLooYznlarlj7fjgYzjgqrjg7zjg5Djg7zjg5Xjg63jg7zjgZfjgb7jgZfjgZ8iCisKKyM6IHNyYy9sb2NhdGlvbi5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbHVtbiBudW1iZXIgb3ZlcmZsb3ciCittc2dzdHIgIuWIl+eVquWPt+OBjOOCquODvOODkOODvOODleODreODvOOBl+OBvuOBl+OBnyIKKworIzogc3JjL21haW4uYzoxNDYKK21zZ2lkICJydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHMiCittc2dzdHIgIuihneeqgeOBruOBm+OBhOOBp+ODkeODvOOCteWGheOBruimj+WJh+OBjOS9v+eUqOOBp+OBjeOBvuOBm+OCkyIKKworIzogc3JjL211c2NsZS10YWIuYzo0NTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiUlZGVmaW5lIHZhcmlhYmxlICVzIHJlZGVmaW5lZCIKK21zZ3N0ciAi5aSJ5pWw44Kk44Oz44OH44OD44Kv44K544GM5LiN5q2j44Gn44GZIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ1MworIywgZnV6enkKK21zZ2lkICJwcmV2aW91cyBkZWZpbml0aW9uIgorbXNnc3RyICLliY3jga7lrprnvqnjgYzjgZPjgZPjgavjgYLjgorjgb7jgZfjgZ8iCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NDkwIHNyYy9tdXNjbGUtdGFiLmM6NTA0IHNyYy9tdXNjbGUtdGFiLmM6NTU2CisjOiBzcmMvbXVzY2xlLXRhYi5jOjYyNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVuZGVmaW5lZCAlJWRlZmluZSB2YXJpYWJsZSAlcyIKK21zZ3N0ciAi6K2m5ZGKOiDmnKrlrprnvqnjga7lpInmlbAgYCUuKnMnIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlJWRlZmluZSBCb29sZWFuIHZhcmlhYmxlICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjA5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlJWRlZmluZSB2YXJpYWJsZSAlczogJXMiCittc2dzdHIgIuOCouOCpOOCs+ODs+Wei+OBqOOBl+OBpuS4jemBqeWIh+OBquWApCAnJXMnIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjYxMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYWNjZXB0ZWQgdmFsdWU6ICVzIgorbXNnc3RyICLnhKHlirnjgarlgKRcbiIKKworIzogc3JjL3BhcnNlLWdyYW0ueTo3NDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgaWRlbnRpZmllciBpbiBwYXJhbWV0ZXIgZGVjbGFyYXRpb24iCittc2dzdHIgIuODnuOCr+ODreS7ruW8leaVsOODquOCueODiOOBqyAnKScg44GM44GC44KK44G+44Gb44KTIgorCisjOiBzcmMvcHJpbnQuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICIgdHlwZSAlZCBpcyAlc1xuIgorbXNnc3RyICIg44K/44Kk44OXICVkIOOBryAlcyDjgafjgZlcbiIKKworIzogc3JjL3ByaW50LmM6MTY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzaGlmdCwgYW5kIGdvIHRvIHN0YXRlICVkXG4iCittc2dzdHIgIiAgICAlLTRzXHTjgrfjg5Xjg4jjgIHjgYrjgojjgbPnirbmhYsgJWQg44G4XG4iCisKKyM6IHNyYy9wcmludC5jOjE2NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZ28gdG8gc3RhdGUgJWRcbiIKK21zZ3N0ciAi5YWI6aCt44Gr56e75YuVIgorCisjOiBzcmMvcHJpbnQuYzoyMDMKKyMsIGZ1enp5Cittc2dpZCAiZXJyb3IgKG5vbmFzc29jaWF0aXZlKVxuIgorbXNnc3RyICIlcyDjgrXjg5bjg5fjg63jgrvjgrnlhaXlh7rlipvjgqjjg6njg7wiCisKKyM6IHNyYy9wcmludC5jOjIyNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicmVkdWNlIHVzaW5nIHJ1bGUgJWQgKCVzKSIKK21zZ3N0ciAiIChcIiVzXCLjgYvjgonjga7opo/liYcsICVk6KGMKSIKKworIzogc3JjL3ByaW50LmM6MjI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJhY2NlcHQiCittc2dzdHIgIuioseWPr+OBmeOCiyhfQSkiCisKKyM6IHNyYy9wcmludC5jOjI2NCBzcmMvcHJpbnQuYzozMzgKKyMsIGZ1enp5Cittc2dpZCAiJGRlZmF1bHQiCittc2dzdHIgIuODh+ODleOCqeODq+ODiCIKKworIzogc3JjL3ByaW50LmM6MzczIHNyYy9wcmludF9ncmFwaC5jOjc4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTdGF0ZSAlZCIKK21zZ3N0ciAi54q25oWLICVkICIKKworIzogc3JjL3ByaW50LmM6NDA5Cittc2dpZCAiVGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyIgorbXNnc3RyICLlh7rnj77kvY3nva7jga7opo/liYfjgavjgojjgovntYLnq68iCisKKyM6IHNyYy9wcmludC5jOjQzNgorbXNnaWQgIk5vbnRlcm1pbmFscywgd2l0aCBydWxlcyB3aGVyZSB0aGV5IGFwcGVhciIKK21zZ3N0ciAi5Ye654++5L2N572u44Gu6KaP5YmH44Gr44KI44KL6Z2e57WC56uvIgorCisjOiBzcmMvcHJpbnQuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uIGxlZnQ6IgorbXNnc3RyICIg5bem6L66OiIKKworIzogc3JjL3ByaW50LmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiByaWdodDoiCittc2dzdHIgIiDlj7Povro6IgorCisjOiBzcmMvcHJpbnQuYzo1MTAKK21zZ2lkICJSdWxlcyB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzIgorbXNnc3RyICLooZ3nqoHjga7jgZvjgYTjgafjg5Hjg7zjgrXlhoXjga7opo/liYfjgYzkvb/nlKjjgafjgY3jgb7jgZvjgpMiCisKKyM6IHNyYy9yZWFkZXIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSAlcyBkZWNsYXJhdGlvbnMiCittc2dzdHIgIiVzIOOBjOikh+aVsOWAi+Wuo+iogOOBleOCjOOBvuOBl+OBnyIKKworIzogc3JjL3JlYWRlci5jOjEzMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicmVzdWx0IHR5cGUgY2xhc2ggb24gbWVyZ2UgZnVuY3Rpb24gJXM6IDwlcz4gIT0gPCVzPiIKK21zZ3N0ciAi5Yid5pyf54q25oWL44Gu5YuV5L2c44Gn44Gv5Z6LIChgJXMnIGAlcycpIOOBjOihneeqgeOBl+OBvuOBmSIKKworIzogc3JjL3JlYWRlci5jOjEzOSBzcmMvc3ltdGFiLmM6MTU2IHNyYy9zeW10YWIuYzoxNjYgc3JjL3N5bXRhYi5jOjkzOAorIzogc3JjL3N5bXRhYi5jOjk1MyBzcmMvc3ltdGFiLmM6OTY4IHNyYy9zeW10YWIuYzo5ODMKKyMsIGZ1enp5Cittc2dpZCAicHJldmlvdXMgZGVjbGFyYXRpb24iCittc2dzdHIgIuOCueOCs+ODvOODl+OBruWuo+iogCIKKworIzogc3JjL3JlYWRlci5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGVkIHN5bWJvbCBuYW1lIGZvciAlcyBpZ25vcmVkIgorbXNnc3RyICIlcyDjga7ph43opIfjgZnjgovjgrfjg7Pjg5zjg6vlkI3jgpLnhKHoppbjgZfjgb7jgZkiCisKKyM6IHNyYy9yZWFkZXIuYzoyNDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInJ1bGUgZ2l2ZW4gZm9yICVzLCB3aGljaCBpcyBhIHRva2VuIgorbXNnc3RyICIlcyDjgavopo/liYfjgYzkuI7jgYjjgonjgozjgIHjgZ3jgozjga/jg4jjg7zjgq/jg7Pjgajjgarjgorjgb7jgZkiCisKKyM6IHNyYy9yZWFkZXIuYzozMDQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInR5cGUgY2xhc2ggb24gZGVmYXVsdCBhY3Rpb246IDwlcz4gIT0gPCVzPiIKK21zZ3N0ciAi5Yid5pyf54q25oWL44Gu5YuV5L2c44Gn44Gv5Z6LIChgJXMnIGAlcycpIOOBjOihneeqgeOBl+OBvuOBmSIKKworIzogc3JjL3JlYWRlci5jOjMxMAorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBydWxlIGZvciB0eXBlZCBub250ZXJtaW5hbCwgYW5kIG5vIGFjdGlvbiIKK21zZ3N0ciAi56m644Gu5Z6L5LuY44GN6Z2e57WC56uv44Ki44Kk44OG44Og55So6KaP5YmH44Gn44GC44KK44CB5YuV5L2c44GM6LW344KK44G+44Gb44KTIgorCisjOiBzcmMvcmVhZGVyLmM6MzI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bnVzZWQgdmFsdWU6ICQlZCIKK21zZ3N0ciAi54Sh5Yq544Gq5YCkXG4iCisKKyM6IHNyYy9yZWFkZXIuYzozMzAKKyMsIGZ1enp5Cittc2dpZCAidW5zZXQgdmFsdWU6ICQkIgorbXNnc3RyICLnhKHlirnjgarlgKRcbiIKKworIzogc3JjL3JlYWRlci5jOjM0MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidG9rZW4gZm9yICUlcHJlYyBpcyBub3QgZGVmaW5lZDogJXMiCittc2dzdHIgIuODiOODvOOCr+ODsyAlcyDjga7lgKTjga/pganliIfjgaogVVRGLTgg5paH5a2X5YiX44Gn44Gv44GC44KK44G+44Gb44KTIgorCisjOiBzcmMvcmVhZGVyLmM6NDMxIHNyYy9yZWFkZXIuYzo0NDUgc3JjL3JlYWRlci5jOjQ1OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAib25seSBvbmUgJXMgYWxsb3dlZCBwZXIgcnVsZSIKK21zZ3N0ciAi5LiA44Gk44Gu5p2h5Lu26YOo44Gr44Gk44GN5LiA44Gk44GX44GLIGBlbHNlJyDjgpLkvb/jgYjjgb7jgZvjgpMiCisKKyM6IHNyYy9yZWFkZXIuYzo0NDEgc3JjL3JlYWRlci5jOjQ1NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgYWZmZWN0cyBvbmx5IEdMUiBwYXJzZXJzIgorbXNnc3RyICLjgrPjg7zjg4nlpInmj5vjga/jg4bjgq3jgrnjg4jlnovmt7vku5jjg5XjgqHjgqTjg6vjgavjga7jgb/mnInlirnjgIIiCisKKyM6IHNyYy9yZWFkZXIuYzo0NDMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIG11c3QgYmUgZm9sbG93ZWQgYnkgcG9zaXRpdmUgbnVtYmVyIgorbXNnc3RyICLjg5XjgqPjg7zjg6vjg4nlkI0gYCUuKnMnIOOBruW+jOOBr+OCs+ODreODs+OBp+OBquOBkeOCjOOBsOOBquOCiuOBvuOBm+OCkyIKKworIzogc3JjL3JlYWRlci5jOjU1NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicnVsZSBpcyB0b28gbG9uZyIKK21zZ3N0ciAi6L+w6YOo44GM6ZW344GZ44GO44G+44GZIgorCisjOiBzcmMvcmVhZGVyLmM6NjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJ1bGVzIGluIHRoZSBpbnB1dCBncmFtbWFyIgorbXNnc3RyICLlhaXlipvjgZfjgZ/mlofms5Xjgavopo/liYfjgYzlrprnvqnjgZXjgozjgabjgYTjgb7jgZvjgpMiCisKKyM6IHNyYy9yZWR1Y2UuYzoyNDEKKyMsIGZ1enp5Cittc2dpZCAicnVsZSB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgIuWFpeWKm+OBl+OBn+aWh+azleOBq+imj+WJh+OBjOWumue+qeOBleOCjOOBpuOBhOOBvuOBm+OCkyIKKworIzogc3JjL3JlZHVjZS5jOjMwMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiAlcyIKK21zZ3N0ciAi5YWl5Yqb44GX44Gf5paH5rOV44Gr6KaP5YmH44GM5a6a576p44GV44KM44Gm44GE44G+44Gb44KTIgorCisjOiBzcmMvcmVkdWNlLmM6MzUwCisjLCBmdXp6eQorbXNnaWQgIk5vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgIuWFpeWKm+OBl+OBn+aWh+azleOBq+imj+WJh+OBjOWumue+qeOBleOCjOOBpuOBhOOBvuOBm+OCkyIKKworIzogc3JjL3JlZHVjZS5jOjM2MworIywgZnV6enkKK21zZ2lkICJUZXJtaW5hbHMgdW51c2VkIGluIGdyYW1tYXIiCittc2dzdHIgIuWFpeWKm+OBl+OBn+aWh+azleOBq+imj+WJh+OBjOWumue+qeOBleOCjOOBpuOBhOOBvuOBm+OCkyIKKworIzogc3JjL3JlZHVjZS5jOjM3MgorIywgZnV6enkKK21zZ2lkICJSdWxlcyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgIuWFpeWKm+OBl+OBn+aWh+azleOBq+imj+WJh+OBjOWumue+qeOBleOCjOOBpuOBhOOBvuOBm+OCkyIKKworIzogc3JjL3JlZHVjZS5jOjM4NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJWQgbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnaWRfcGx1cmFsICIlZCBub250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyWzBdICLlhaXlipvjgZfjgZ/mlofms5Xjgavopo/liYfjgYzlrprnvqnjgZXjgozjgabjgYTjgb7jgZvjgpMiCisKKyM6IHNyYy9yZWR1Y2UuYzozOTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVkIHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnaWRfcGx1cmFsICIlZCBydWxlcyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHJbMF0gIuWFpeWKm+OBl+OBn+aWh+azleOBq+imj+WJh+OBjOWumue+qeOBleOCjOOBpuOBhOOBvuOBm+OCkyIKKworIzogc3JjL3JlZHVjZS5jOjQxOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic3RhcnQgc3ltYm9sICVzIGRvZXMgbm90IGRlcml2ZSBhbnkgc2VudGVuY2UiCittc2dzdHIgIumWi+Wni+OCt+ODs+ODnOODqyAlcyDjga/jganjga7mlofjgavjgoLnlLHmnaXjgZfjgb7jgZvjgpMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYXkgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjI5Cittc2dpZCAiYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjIzMgorbXNnaWQgImZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JyIKK21zZ3N0ciAi5bCG5p2l44Gu44OQ44O844K444On44Oz44GuIEJpc29uIOOBryAnOycg44KS6L+95Yqg44GX44G+44Gb44KTIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVzZSBvZiBZWUZBSUwsIHdoaWNoIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDMxIHNyYy9zY2FuLWNvZGUubDo0MzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInJlZmVycyB0bzogJWMlcyBhdCAlcyIKK21zZ3N0ciAiJyVzJyDjga/jg4fjgqPjg6zjgq/jg4jjg6rjgpLmjIfjgZfjgabjgYTjgb7jgZkiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInBvc3NpYmx5IG1lYW50OiAlYyIKK21zZ3N0ciAi5aSa5YiG44CB44Kr44Km44Oz44OI44GM6ZaT6YGV44Gj44Gm44GE44G+44GZ44CCIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDU5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIsIGhpZGluZyAlYyIKK21zZ3N0ciAi5YWlL+mAgOWHuuODoeODg+OCu+ODvOOCuOOBruWItumZkCIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ2NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIGF0ICVzIgorbXNnc3RyICIlcyAoJXMpIGF0ICIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ3MgorIywgYy1mb3JtYXQKK21zZ2lkICIsIGNhbm5vdCBiZSBhY2Nlc3NlZCBmcm9tIG1pZC1ydWxlIGFjdGlvbiBhdCAkJWQiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjUyMSBzcmMvc2Nhbi1ncmFtLmw6NzgzCisjLCBjLWZvcm1hdAorbXNnaWQgImludGVnZXIgb3V0IG9mIHJhbmdlOiAlcyIKK21zZ3N0ciAi5pW05pWw44GM5YCk44Gu56+E5Zuy5aSW44Gn44GZOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYxMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZmVyZW5jZTogJXMiCittc2dzdHIgIueEoeWKueOBquWPgueFpzogJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yIGFmdGVyICclYycsIGV4cGVjdGluZyBpbnRlZ2VyLCBsZXR0ZXIsICdfJywgJ1snLCBvciAnJCciCittc2dzdHIgIiIKKyInJWMnIOOBruW+jOOBq+aWh+azleOCqOODqeODvOOBjOOBguOCiuOBvuOBmeOAguaVtOaVsOOAgeaWh+Wtl+OAgSdfJywgJ1snLCckJyDjgYzmnaXjgovjga/jgZrjgafjgZnjgIIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uIGJlZm9yZSAkJWQ6ICUuKnMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjYzMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiAlLipzIgorbXNnc3RyICIlcyDjgYwgZ2ZsYXJlc19saXN0IOS4reOBq+imi+S7mOOBi+OCiuOBvuOBm+OCkyIKKworIzogc3JjL3NjYW4tY29kZS5sOjY0OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibWlzbGVhZGluZyByZWZlcmVuY2U6ICVzIgorbXNnc3RyICLpq5jluqbjga7ljZjkvY0iCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2NjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImFtYmlndW91cyByZWZlcmVuY2U6ICVzIgorbXNnc3RyICLpq5jluqbjga7ljZjkvY0iCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwbGljaXQgdHlwZSBnaXZlbiBpbiB1bnR5cGVkIGdyYW1tYXIiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjc1OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJCQgZm9yIHRoZSBtaWRydWxlIGF0ICQlZCBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiJCVkIOWAi+OBriBgJXMnIOOBjOWuo+iogOOBleOCjOOBn+Wei+OCkuaMgeOBo+OBpuOBhOOBvuOBm+OCkyIKKworIzogc3JjL3NjYW4tY29kZS5sOjc2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJCQgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgImAlcycg44GuICQkIOOBq+Wuo+iogOOBruOBquOBhOWei+OBjOOBguOCiuOBvuOBmSIKKworIzogc3JjL3NjYW4tY29kZS5sOjc4NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJCVzIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICJgJXMnIOOBriAkJCDjgavlrqPoqIDjga7jgarjgYTlnovjgYzjgYLjgorjgb7jgZkiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYXkgJywnIHRyZWF0ZWQgYXMgd2hpdGUgc3BhY2UiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjIyMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBkaXJlY3RpdmU6ICVzIgorbXNnc3RyICLnhKHlirnjgaogIyVzIOaMh+ekuuOBp+OBmSIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjI1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudGlmaWVyOiAlcyIKK21zZ3N0ciAi5LiN5q2j44GqVVJOICUxOiDkuI3pganliIfjgarlkI3liY3nqbrplpPorZjliKXlrZAiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyOTUKKyMsIGZ1enp5Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIiCittc2dpZF9wbHVyYWwgImludmFsaWQgY2hhcmFjdGVycyIKK21zZ3N0clswXSAi54Sh5Yq544Gq5paH5a2XOiBgJXMnIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MzU0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGlkZW50aWZpZXIgaW4gYnJhY2tldGVkIG5hbWU6ICVzIgorbXNnc3RyICLorZjliKXlrZAgXCIlc1wiIOOBryBDKysg44Gu54m55Yil44Gq5ryU566X5a2Q5ZCN44Gn44GZIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6Mzc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJhbiBpZGVudGlmaWVyIGV4cGVjdGVkIgorbXNnc3RyICLorZjliKXlrZDjgYzmnJ/lvoXjgZXjgozjgabjgYTjgb7jgZkuIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MzgxCisjLCBmdXp6eQorbXNnaWQgImludmFsaWQgY2hhcmFjdGVyIGluIGJyYWNrZXRlZCBuYW1lIgorbXNnaWRfcGx1cmFsICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gYnJhY2tldGVkIG5hbWUiCittc2dzdHJbMF0gIueEoeWKueOBquODpuODvOOCtuWQjSBcIiVzXCIg44GMICVzOiVkIOOBq+OBguOCiuOBvuOBmeOAguS4reaWreOBl+OBvuOBmSIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjQ4MSBzcmMvc2Nhbi1ncmFtLmw6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGNoYXJhY3RlciBsaXRlcmFsIgorbXNnc3RyICLnqbrjga7mloflrZflrprmlbAiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo0ODYgc3JjL3NjYW4tZ3JhbS5sOjUwNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZXh0cmEgY2hhcmFjdGVycyBpbiBjaGFyYWN0ZXIgbGl0ZXJhbCIKK21zZ3N0ciAi44Oq44OG44Op44Or5Lit44GnIG51bGwg5paH5a2X44GM56K65L+d44GV44KM44G+44GX44GfIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVsbCBjaGFyYWN0ZXIiCittc2dzdHIgIueEoeWKueOBqiBudWxsIOaWh+WtlyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjUzMSBzcmMvc2Nhbi1ncmFtLmw6NTQxIHNyYy9zY2FuLWdyYW0ubDo1NjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIGFmdGVyIFxcLWVzY2FwZTogJXMiCittc2dzdHIgIi1xPSDjga7lvozjgavnlarlj7fjgYzmnJ/lvoXjgZXjgozjgb7jgZnjgYzjgIElcyDjgYzkuI7jgYjjgonjgozjgb7jgZfjgZ9cbiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjU3MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgXFwtZXNjYXBlOiAlcyIKK21zZ3N0ciAi44Ko44K544Kx44O844OX44Kt44Oj44Op44Kv44K/44KS5rG65a6a44Gn44GN44G+44Gb44KTIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6OTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgJXMgYXQgZW5kIG9mIGZpbGUiCittc2dzdHIgIuODleOCoeOCpOODq+acq+WwvuOBqyAlcyDjgYzjgYLjgorjgb7jgZvjgpMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo5MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyBhdCBlbmQgb2YgbGluZSIKK21zZ3N0ciAi6KGM5pyr44GrICVzIOOBjOOBguOCiuOBvuOBm+OCkyIKKworIzogc3JjL3NjYW4tc2tlbC5sOjE0NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5jbG9zZWQgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICLmloflrZfliJfjgYzlkb3ku6Tjga7pgJTkuK3jgafntYLjgo/jgaPjgabjgYTjgb7jgZkuIgorCisjOiBzcmMvc2Nhbi1za2VsLmw6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBmZXcgYXJndW1lbnRzIGZvciAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tc2tlbC5sOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgZm9yICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltbGlzdC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICQgdmFsdWU6ICQlZCIKK21zZ3N0ciAi54Sh5Yq544GqICQg5YCkOiAkJWQiCisKKyM6IHNyYy9zeW10YWIuYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJQT1NJWCBZYWNjIGZvcmJpZHMgZGFzaGVzIGluIHN5bWJvbCBuYW1lczogJXMiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjkxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBzeW1ib2xzIGluIGlucHV0IGdyYW1tYXIgKGxpbWl0IGlzICVkKSIKK21zZ3N0ciAi44K344Oz44Oc44Or44GM5aSa44GZ44GO44G+44GZICjjg4jjg7zjgq/jg7MgKyDpnZ7ntYLnq6/jgqLjgqTjg4bjg6ApIC0tIOacgOWkpyAlZCIKKworIzogc3JjL3N5bXRhYi5jOjE1NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVkZWNsYXJhdGlvbiBmb3IgJXMiCittc2dzdHIgIlwiJXNcIiDjga7jg6njg5njg6s6IgorCisjOiBzcmMvc3ltdGFiLmM6MTY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciA8JXM+IgorbXNnc3RyICJcIiVzXCIg44Gu44Op44OZ44OrOiIKKworIzogc3JjL3N5bXRhYi5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgcmVkZWZpbmVkIgorbXNnc3RyICLjgrfjg7Pjg5zjg6sgJXMg44GM5YaN5a6a576p44GV44KM44G+44GX44GfIgorCisjOiBzcmMvc3ltdGFiLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyByZWRlY2xhcmVkIgorbXNnc3RyICLjgrfjg7Pjg5zjg6sgJXMg44GM5YaN5a6j6KiA44GV44KM44G+44GX44GfIgorCisjOiBzcmMvc3ltdGFiLmM6MzY3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJyZWRlZmluaW5nIHVzZXIgdG9rZW4gbnVtYmVyIG9mICVzIgorbXNnc3RyICIlcyDjgavlhYjooYzjgZfjgZ/lho3lrprnvqnjgafjgZkiCisKKyM6IHNyYy9zeW10YWIuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIGlzIHVzZWQsIGJ1dCBpcyBub3QgZGVmaW5lZCBhcyBhIHRva2VuIGFuZCBoYXMgbm8gcnVsZXMiCittc2dzdHIgIiIKKyLjgrfjg7Pjg5zjg6sgJXMg44GM5L2/44KP44KM44Gm44GE44G+44GZ44GM44CB44OI44O844Kv44Oz44Go44GX44Gm5a6a576p44GV44KM44Gm44GK44KJ44Ga44CB6KaP5YmH44KS5oyB44Gh44G+IgorIuOBm+OCkyIKKworIzogc3JjL3N5bXRhYi5jOjQxNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHVzZWQgbW9yZSB0aGFuIG9uY2UgYXMgYSBsaXRlcmFsIHN0cmluZyIKK21zZ3N0ciAi44K344Oz44Oc44OrIGAlcycg44Gv44Oq44OG44Op44Or5paH5a2X5YiX44Go44GX44Gm6KSH5pWw5Zue5L2/44KP44KM44G+44GX44GfIgorCisjOiBzcmMvc3ltdGFiLmM6NDE4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgZ2l2ZW4gbW9yZSB0aGFuIG9uZSBsaXRlcmFsIHN0cmluZyIKK21zZ3N0ciAi44K344Oz44Oc44OrIGAlcycg44Gv6KSH5pWw44Gu44Oq44OG44Op44Or5paH5a2X5YiX44GM5LiO44GI44KJ44KM44G+44GX44GfIgorCisjOiBzcmMvc3ltdGFiLmM6NTM1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1c2VyIHRva2VuIG51bWJlciAlZCByZWRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAiJXMg44Gu5Z6L44GM5YaN5a6a576p44GV44KM44G+44GX44GfIgorCisjOiBzcmMvc3ltdGFiLmM6NTM5CisjLCBjLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIGRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAiJXMg44Gr5a++44GZ44KL5Lul5YmN44Gu5a6j6KiAIgorCisjOiBzcmMvc3ltdGFiLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBzdGFydCBzeW1ib2wgJXMgaXMgdW5kZWZpbmVkIgorbXNnc3RyICLplovlp4vjgrfjg7Pjg5zjg6sgJXMg44Gv5a6a576p44GV44KM44Gm44GE44G+44Gb44KTIgorCisjOiBzcmMvc3ltdGFiLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBzdGFydCBzeW1ib2wgJXMgaXMgYSB0b2tlbiIKK21zZ3N0ciAi6ZaL5aeL44K344Oz44Oc44OrICVzIOOBr+ODiOODvOOCr+ODs+OBp+OBmSIKKworIzogc3JjL3N5bXRhYi5jOjkzNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlJWRlc3RydWN0b3IiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjk1MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJSVkZXN0cnVjdG9yIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW10YWIuYzo5NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdnZWQgJSVwcmludGVyIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW10YWIuYzo5ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdsZXNzICUlcHJpbnRlciIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6NjMgZGpncHAvc3VicGlwZS5jOjI4NiBkamdwcC9zdWJwaXBlLmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92aW5nIG9mICclcycgZmFpbGVkIgorbXNnc3RyICInJXMnIOOBruWJiumZpOOBq+WkseaVl+OBl+OBvuOBl+OBnyIKKworIzogZGpncHAvc3VicGlwZS5jOjg1IGRqZ3BwL3N1YnBpcGUuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGlvbiBvZiBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAi5LiA5pmC44OV44Kh44Kk44Or44Gu55Sf5oiQ44Gr5aSx5pWX44GX44G+44GX44GfIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgInNhdmluZyBzdGRpbiBmYWlsZWQiCittc2dzdHIgIuaomea6luWFpeWKm+OBruS/neWtmOOBq+WkseaVl+OBl+OBvuOBl+OBnyIKKworIzogZGpncHAvc3VicGlwZS5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJzYXZpbmcgc3Rkb3V0IGZhaWxlZCIKK21zZ3N0ciAi5qiZ5rqW5Ye65Yqb44Gu5L+d5a2Y44Gr5aSx5pWX44GX44G+44GX44GfIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTUzIGRqZ3BwL3N1YnBpcGUuYzoxOTcgZGpncHAvc3VicGlwZS5jOjI1OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAib3BlbmluZyBvZiB0bXBmaWxlIGZhaWxlZCIKK21zZ3N0ciAi6L6e5pu444KS6ZaL44GP44Gu44Gr5aSx5pWX44GX44G+44GX44GfOiAlcyIKKworIzogZGpncHAvc3VicGlwZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBiaXNvbidzIHN0ZG91dCB0byB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgbTQncyBzdGRpbiBmcm9tIHRoZSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjIxMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAib3BlbmluZyBvZiBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAi5L2c5qWt55So44OV44Kh44Kk44Or44Gu44Kq44O844OX44Oz44Gr5aSx5pWX44GX44G+44GX44GfIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIG00J3Mgc3Rkb3V0IHRvIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSAnJXMnIGludGVycnVwdGVkIgorbXNnc3RyICLjgrfjgrDjg4rjg6vjgavjgojjgovlibLjgorovrzjgb8iCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyNDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAiJXM6IOOCt+OCp+ODq+ODl+ODreOCsOODqeODoOOBjOimi+OBpOOBi+OCiuOBvuOBm+OCk+OBp+OBl+OBnyIKKworIzogZGpncHAvc3VicGlwZS5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBiaXNvbidzIHN0ZGluIGZyb20gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCAlcyBmb3IgJXMiCittc2dzdHIgIiUyJHMg44Gr5a++44GZ44KL5byV5pWwICUxJHMg44GM6ZaT6YGV44Gj44Gm44GE44G+44GZIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIGFyZ3VtZW50ICVzIGZvciAlcyIKK21zZ3N0ciAiJTIkcyDjgavlr77jgZnjgovlvJXmlbAgJTEkcyDjgYzmm5bmmKfjgafjgZkiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjE1MworbXNnaWQgIlZhbGlkIGFyZ3VtZW50cyBhcmU6IgorbXNnc3RyICLmnInlirnjgarlvJXmlbA6IgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9hbGxvY3MsICV1IGZyZWVkICglLjJmJSUpLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3NldHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3Jlc2V0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfdGVzdHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9saXN0c1xuIgorbXNnc3RyICLjg5Hjg4PjgrHjg7zjgrjjg6rjgrnjg4jjgpLoqq3jgb/ovrzjgpPjgafjgYTjgb7jgZkiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTIKKyMsIGZ1enp5Cittc2dpZCAiY291bnQgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICIiCisi44OS44K544OI44Kw44Op44Og44OA44Kk44Ki44Ot44Kw44KS6ZaL44GN44G+44GZ44CCXG4iCisi44Ki44Kv44OG44Kj44OW44Gq55S75YOP44Gu44OS44K544OI44Kw44Op44Og44KS6KGo56S644GX44G+44GZ44CCIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTk1CisjLCBmdXp6eQorbXNnaWQgInNpemUgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICLjg63jgrDjga7lkIjoqIjjgrXjgqTjgro6IgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTk4CisjLCBmdXp6eQorbXNnaWQgImRlbnNpdHkgaGlzdG9ncmFtXG4iCittc2dzdHIgIuODkuOCueODiOOCsOODqeODoOOBrueorumhniIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjIxMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkJpdHNldCBzdGF0aXN0aWNzOlxuIgorIlxuIgorbXNnc3RyICI8Yj7ntbHoqIjjgqrjg5fjgrfjg6fjg7M8L2I+IgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkFjY3VtdWxhdGVkIHJ1bnMgPSAldVxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyNTkgbGliL2JpdHNldF9zdGF0cy5jOjI2NAorIywgZnV6enkKK21zZ2lkICJjYW5ub3QgcmVhZCBzdGF0cyBmaWxlIgorbXNnc3RyICIiCisiIOWFg+ODleOCoeOCpOODqyBcIiVzXCIg44KS6Kqt44KB44G+44Gb44KTXG4iCisiICVzICIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI2MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYmFkIHN0YXRzIGZpbGUgc2l6ZVxuIgorbXNnc3RyICIiCisiPGI+44OV44Kh44Kk44OrOjwvYj4gJXNcbiIKKyI8Yj7jgrXjgqTjgro6PC9iPiAlc1xuIgorIjxiPueUu+WDj+OBruOCteOCpOOCujo8L2I+ICVkeCVkIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6Mjg3IGxpYi9iaXRzZXRfc3RhdHMuYzoyODkKKyMsIGZ1enp5Cittc2dpZCAiY2Fubm90IHdyaXRlIHN0YXRzIGZpbGUiCittc2dzdHIgIiIKKyIg44K/44O844Ky44OD44OI44OV44Kh44Kk44OrIFwiJXNcIiDjgavmm7jjgY3ovrzjgoHjgb7jgZvjgpNcbiIKKyIgJXMgIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjkyCisjLCBmdXp6eQorbXNnaWQgImNhbm5vdCBvcGVuIHN0YXRzIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIuODkOODg+OCr+OCouODg+ODl+ODleOCoeOCpOODqyBcIiVzXCIg44KS5pu444GN6L6844G/55So44Gr6ZaL44GP44GT44Go44GM44Gn44GN44G+44Gb44KTIgorCisjOiBsaWIvY2xvc2VvdXQuYzoxMTIKK21zZ2lkICJ3cml0ZSBlcnJvciIKK21zZ3N0ciAi5pu444GN6L6844G/44Ko44Op44O8IgorCisjOiBsaWIvZXJyb3IuYzoxODgKK21zZ2lkICJVbmtub3duIHN5c3RlbSBlcnJvciIKK21zZ3N0ciAi5LiN5piO44Gq44K344K544OG44Og44Ko44Op44O8IgorCisjOiBsaWIvZ2V0b3B0LmM6NTQ3IGxpYi9nZXRvcHQuYzo1NzYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJyVzJyBpcyBhbWJpZ3VvdXM7IHBvc3NpYmlsaXRpZXM6IgorbXNnc3RyICIlczog44Kq44OX44K344On44OzICclcycg44Gv5puW5pin44Gn44GZOyDlgJnoo5w6IgorCisjOiBsaWIvZ2V0b3B0LmM6NjI0IGxpYi9nZXRvcHQuYzo2MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLS0lcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczog44Kq44OX44K344On44OzICctLSVzJyDjga/lvJXmlbDjgpLlj5bjgovjgZPjgajjgYzjgafjgY3jgb7jgZvjgpNcbiIKKworIzogbGliL2dldG9wdC5jOjYzNyBsaWIvZ2V0b3B0LmM6NjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJyVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IOOCquODl+OCt+ODp+ODsyAnJWMlcycg44Gv5byV5pWw44KS5Y+W44KL44GT44Go44GM44Gn44GN44G+44Gb44KTXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo2ODUgbGliL2dldG9wdC5jOjcwNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLS0lcycgcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IOOCquODl+OCt+ODp+ODsyAnLS0lcycg44Gr44Gv5byV5pWw44GM5b+F6KaB44Gn44GZXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo3NDIgbGliL2dldG9wdC5jOjc0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiAnLS0lcydcbiIKK21zZ3N0ciAiJXM6IOOCquODl+OCt+ODp+ODsyAnLS0lcycg44KS6KqN6K2Y44Gn44GN44G+44Gb44KTXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo3NTMgbGliL2dldG9wdC5jOjc1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiAnJWMlcydcbiIKK21zZ3N0ciAiJXM6IOOCquODl+OCt+ODp+ODsyAnJWMlcycg44KS6KqN6K2Y44Gn44GN44G+44Gb44KTXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo4MDUgbGliL2dldG9wdC5jOjgwOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBvcHRpb24gLS0gJyVjJ1xuIgorbXNnc3RyICIlczog54Sh5Yq544Gq44Kq44OX44K344On44OzIC0tICclYydcbiIKKworIzogbGliL2dldG9wdC5jOjg2MSBsaWIvZ2V0b3B0LmM6ODc4IGxpYi9nZXRvcHQuYzoxMDg4IGxpYi9nZXRvcHQuYzoxMTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgLS0gJyVjJ1xuIgorbXNnc3RyICIlczog44Kq44OX44K344On44Oz44Gr44Gv5byV5pWw44GM5b+F6KaB44Gn44GZIC0tICclYydcbiIKKworIzogbGliL2dldG9wdC5jOjkzNCBsaWIvZ2V0b3B0LmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyBpcyBhbWJpZ3VvdXNcbiIKK21zZ3N0ciAiJXM6IOOCquODl+OCt+ODp+ODsyAnLVcgJXMnIOOBr+abluaYp+OBp+OBmVxuIgorCisjOiBsaWIvZ2V0b3B0LmM6OTc0IGxpYi9nZXRvcHQuYzo5OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLVcgJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IOOCquODl+OCt+ODp+ODsyAnLVcgJXMnIOOBr+W8leaVsOOCkuWPluOCi+OBk+OBqOOBjOOBp+OBjeOBvuOBm+OCk1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6MTAxMyBsaWIvZ2V0b3B0LmM6MTAzMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLVcgJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiDjgqrjg5fjgrfjg6fjg7MgJy1XICVzJyDjgavjga/lvJXmlbDjgYzlv4XopoHjgafjgZlcbiIKKworIzogbGliL29ic3RhY2suYzo0MTMgbGliL29ic3RhY2suYzo0MTUgbGliL3hhbGxvYy1kaWUuYzozNAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIuODoeODouODquOCkuS9v+OBhOaenOOBn+OBl+OBvuOBl+OBnyIKKworIzogbGliL3NwYXduLXBpcGUuYzoxNDAgbGliL3NwYXduLXBpcGUuYzoxNDMgbGliL3NwYXduLXBpcGUuYzoyNjQKKyM6IGxpYi9zcGF3bi1waXBlLmM6MjY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZSIKK21zZ3N0ciAi44OR44Kk44OX44KS5L2c5oiQ44Gn44GN44G+44Gb44KTIgorCisjOiBsaWIvc3Bhd24tcGlwZS5jOjIzNCBsaWIvc3Bhd24tcGlwZS5jOjM0OCBsaWIvd2FpdC1wcm9jZXNzLmM6MjgyCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MgZmFpbGVkIgorbXNnc3RyICIlcyDjgrXjg5bjg5fjg63jgrvjgrnjgYzlpLHmlZfjgZfjgb7jgZfjgZ8iCisKKyMuIFRSQU5TTEFUT1JTOgorIy4gR2V0IHRyYW5zbGF0aW9ucyBmb3Igb3BlbiBhbmQgY2xvc2luZyBxdW90YXRpb24gbWFya3MuCisjLiBUaGUgbWVzc2FnZSBjYXRhbG9nIHNob3VsZCB0cmFuc2xhdGUgImAiIHRvIGEgbGVmdAorIy4gcXVvdGF0aW9uIG1hcmsgc3VpdGFibGUgZm9yIHRoZSBsb2NhbGUsIGFuZCBzaW1pbGFybHkgZm9yCisjLiAiJyIuICBGb3IgZXhhbXBsZSwgYSBGcmVuY2ggVW5pY29kZSBsb2NhbCBzaG91bGQgdHJhbnNsYXRlCisjLiB0aGVzZSB0byBVKzAwQUIgKExFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFCisjLiBRVU9UQVRJT04gTUFSSyksIGFuZCBVKzAwQkIgKFJJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRQorIy4gUVVPVEFUSU9OIE1BUkspLCByZXNwZWN0aXZlbHkuCisjLgorIy4gSWYgdGhlIGNhdGFsb2cgaGFzIG5vIHRyYW5zbGF0aW9uLCB3ZSB3aWxsIHRyeSB0bworIy4gdXNlIFVuaWNvZGUgVSsyMDE4IChMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykgYW5kCisjLiBVbmljb2RlIFUrMjAxOSAoUklHSFQgU0lOR0xFIFFVT1RBVElPTiBNQVJLKS4gIElmIHRoZQorIy4gY3VycmVudCBsb2NhbGUgaXMgbm90IFVuaWNvZGUsIGxvY2FsZV9xdW90aW5nX3N0eWxlCisjLiB3aWxsIHF1b3RlICdsaWtlIHRoaXMnLCBhbmQgY2xvY2FsZV9xdW90aW5nX3N0eWxlIHdpbGwKKyMuIHF1b3RlICJsaWtlIHRoaXMiLiAgWW91IHNob3VsZCBhbHdheXMgaW5jbHVkZSB0cmFuc2xhdGlvbnMKKyMuIGZvciAiYCIgYW5kICInIiBldmVuIGlmIFUrMjAxOCBhbmQgVSsyMDE5IGFyZSBhcHByb3ByaWF0ZQorIy4gZm9yIHlvdXIgbG9jYWxlLgorIy4KKyMuIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gcHV0IGhlcmUsIHBsZWFzZSBzZWUKKyMuIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1F1b3RhdGlvbl9tYXJrc19pbl9vdGhlcl9sYW5ndWFnZXM+CisjLiBhbmQgdXNlIGdseXBocyBzdWl0YWJsZSBmb3IgeW91ciBsYW5ndWFnZS4KKyM6IGxpYi9xdW90ZWFyZy5jOjMxMgorbXNnaWQgImAiCittc2dzdHIgImAiCisKKyM6IGxpYi9xdW90ZWFyZy5jOjMxMworbXNnaWQgIiciCittc2dzdHIgIiciCisKKyM6IGxpYi90aW1ldmFyLmM6NDc1Cittc2dpZCAiIgorIlxuIgorIkV4ZWN1dGlvbiB0aW1lcyAoc2Vjb25kcylcbiIKK21zZ3N0ciAiIgorIlxuIgorIuWun+ihjOaZgumWkyAo56eSKVxuIgorCisjOiBsaWIvdGltZXZhci5jOjUyNQorbXNnaWQgIiBUT1RBTCAgICAgICAgICAgICAgICAgOiIKK21zZ3N0ciAiIOWQiOioiCAgICAgICAgICAgICAgICAgIDoiCisKKyM6IGxpYi90aW1ldmFyLmM6NTYxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ0aW1lIGluICVzOiAlbGQuJTA2bGQgKCVsZCUlKVxuIgorbXNnc3RyICLnj77lnKjjga7jgrfjgrnjg4bjg6DmmYLplpM6ICVsZCA9ICVzXG4iCisKKyM6IGxpYi93MzJzcGF3bi5oOjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIl9vcGVuX29zZmhhbmRsZSBmYWlsZWQiCittc2dzdHIgIl9vcGVuX29zZmhhbmRsZSDjgavlpLHmlZfjgZfjgb7jgZfjgZ8iCisKKyM6IGxpYi93MzJzcGF3bi5oOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXN0b3JlIGZkICVkOiBkdXAyIGZhaWxlZCIKK21zZ3N0ciAi44OV44Kh44Kk44Or6KiY6L+w5a2QIChmZCkgJWQg44KS44Oq44K544OI44Ki44Gn44GN44G+44Gb44KTOiBkdXAyIOOBq+WkseaVl+OBl+OBvuOBl+OBnyIKKworIzogbGliL3dhaXQtcHJvY2Vzcy5jOjIyMyBsaWIvd2FpdC1wcm9jZXNzLmM6MjU1IGxpYi93YWl0LXByb2Nlc3MuYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyIKK21zZ3N0ciAiJXMg5a2Q44OX44Ot44K744K5IgorCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6Mjc0IGxpYi93YWl0LXByb2Nlc3MuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyBnb3QgZmF0YWwgc2lnbmFsICVkIgorbXNnc3RyICIlcyDlrZDjg5fjg63jgrvjgrnjgYzoh7Tlkb3nmoTjgarjgrfjgrDjg4rjg6sgJWQg44KS5Y+X5L+h44GX44G+44GX44GfIgorCisjfiBtc2dpZCAic3RhdGUgJWQiCisjfiBtc2dzdHIgIueKtuaFiyAlZCIKKworIywgZnV6enkKKyN+IG1zZ2lkICIlcyBgJXMnIHJlZGVmaW5lZCIKKyN+IG1zZ3N0ciAi44K344Oz44Oc44OrICVzIOOBjOWGjeWumue+qeOBleOCjOOBvuOBl+OBnyIKKworI34gbXNnaWQgInRva2VucyAlcyBhbmQgJXMgYm90aCBhc3NpZ25lZCBudW1iZXIgJWQiCisjfiBtc2dzdHIgIuODiOODvOOCr+ODsyAlcyDjgaggJXMg44Gu5Y+M5pa544GM55Wq5Y+3ICVkIOOBq+WJsuOCiuW9k+OBpuOCieOCjOOBvuOBl+OBnyIKKworI34gbXNnaWQgIkFSR1BfSEVMUF9GTVQ6ICVzIHZhbHVlIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcyIKKyN+IG1zZ3N0ciAiQVJHUF9IRUxQX0ZNVDogJXMg44Gu5YCk44GvICVzIOOBruWApOS7peS4i+OBp+OBmSIKKworI34gbXNnaWQgIiUuKnM6IEFSR1BfSEVMUF9GTVQgcGFyYW1ldGVyIHJlcXVpcmVzIGEgdmFsdWUiCisjfiBtc2dzdHIgIiUuKnM6IEFSR1BfSEVMUF9GTVQg44OR44Op44Oh44O844K/44Gr44Gv5YCk44GM5b+F6KaB44Gn44GZIgorCisjfiBtc2dpZCAiJS4qczogQVJHUF9IRUxQX0ZNVCBwYXJhbWV0ZXIgbXVzdCBiZSBwb3NpdGl2ZSIKKyN+IG1zZ3N0ciAiJS4qczogQVJHUF9IRUxQX0ZNVCDjg5Hjg6njg6Hjg7zjgr/jga/mraPjga7lgKTjgafjgarjgZHjgozjgbDjgYTjgZHjgb7jgZvjgpMiCisKKyN+IG1zZ2lkICIlLipzOiBVbmtub3duIEFSR1BfSEVMUF9GTVQgcGFyYW1ldGVyIgorI34gbXNnc3RyICIlLipzOiDkuI3mmI7jgaogQVJHUF9IRUxQX0ZNVCDjg5Hjg6njg6Hjg7zjgr8iCisKKyN+IG1zZ2lkICJHYXJiYWdlIGluIEFSR1BfSEVMUF9GTVQ6ICVzIgorI34gbXNnc3RyICJBUkdQX0hFTFBfRk1UIOS4reOBq+OBlOOBv+OBjOOBguOCiuOBvuOBmTogJXMiCisKKyN+IG1zZ2lkICIiCisjfiAiTWFuZGF0b3J5IG9yIG9wdGlvbmFsIGFyZ3VtZW50cyB0byBsb25nIG9wdGlvbnMgYXJlIGFsc28gbWFuZGF0b3J5IG9yICIKKyN+ICJvcHRpb25hbCBmb3IgYW55IGNvcnJlc3BvbmRpbmcgc2hvcnQgb3B0aW9ucy4iCisjfiBtc2dzdHIgIiIKKyN+ICLplbfjgYTlvaLlvI/jga7jgqrjg5fjgrfjg6fjg7Pjgaflv4XpoIjjgb7jgZ/jga/ku7vmhI/jga7lvJXmlbDjga/jgIHjgZ3jgozjgavlr77lv5zjgZnjgovnn63jgYTlvaLlvI/jga7jgqrjg5ciCisjfiAi44K344On44Oz44Gn44KC5ZCM5qeY44Gr5b+F6aCI44G+44Gf44Gv5Lu75oSP44Gn44GZ44CCIgorCisjfiBtc2dpZCAiVXNhZ2U6IgorI34gbXNnc3RyICLkvb/nlKjms5U6IgorCisjfiBtc2dpZCAiICBvcjogIgorI34gbXNnc3RyICLjgb7jgZ/jga86ICIKKworI34gbXNnaWQgIiBbT1BUSU9OLi4uXSIKKyN+IG1zZ3N0ciAiIFtPUFRJT04uLi5dIgorCisjfiBtc2dpZCAiVHJ5IGAlcyAtLWhlbHAnIG9yIGAlcyAtLXVzYWdlJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKKyN+IG1zZ3N0ciAi6Kmz57Sw44GvIGAlcyAtLWhlbHAnIOOBvuOBn+OBryBgJXMgLS11c2FnZScg44KS5a6f6KGM44GX44Gm5LiL44GV44GE44CCXG4iCisKKyN+IG1zZ2lkICJSZXBvcnQgYnVncyB0byAlcy5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIuODkOOCsOOCkueZuuimi+OBl+OBn+OCiSA8JXM+IOOBq+WgseWRiuOBl+OBpuS4i+OBleOBhOOAglxuIgorI34gIue/u+ios+OBq+mWouOBmeOCi+ODkOOCsOOBrzx0cmFuc2xhdGlvbi10ZWFtLWphQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD7jgavloLHlkYrjgZfjgabjgY8iCisjfiAi44Gg44GV44GE44CCXG4iCisKKyN+IG1zZ2lkICJnaXZlIHRoaXMgaGVscCBsaXN0IgorI34gbXNnc3RyICLjgZPjga7jg5jjg6vjg5fjgpLooajnpLrjgZnjgosiCisKKyN+IG1zZ2lkICJnaXZlIGEgc2hvcnQgdXNhZ2UgbWVzc2FnZSIKKyN+IG1zZ3N0ciAi55+t44GE5L2/55So5pa55rOV44KS6KGo56S644GZ44KLIgorCisjfiBtc2dpZCAiTkFNRSIKKyN+IG1zZ3N0ciAi5ZCN5YmNIgorCisjfiBtc2dpZCAic2V0IHRoZSBwcm9ncmFtIG5hbWUiCisjfiBtc2dzdHIgIuODl+ODreOCsOODqeODoOWQjeOCkuioreWumuOBmeOCiyIKKworI34gbXNnaWQgIlNFQ1MiCisjfiBtc2dzdHIgIlNFQ1MiCisKKyN+IG1zZ2lkICJoYW5nIGZvciBTRUNTIHNlY29uZHMgKGRlZmF1bHQgMzYwMCkiCisjfiBtc2dzdHIgIlNFQ1Mg56eS44Gn44OP44Oz44KwICjjg4fjg5Xjgqnjg6vjg4ggMzYwMCkiCisKKyN+IG1zZ2lkICJwcmludCBwcm9ncmFtIHZlcnNpb24iCisjfiBtc2dzdHIgIuODl+ODreOCsOODqeODoOOBruODkOODvOOCuOODp+ODs+OCkuihqOekuuOBmeOCiyIKKworI34gbXNnaWQgIihQUk9HUkFNIEVSUk9SKSBObyB2ZXJzaW9uIGtub3duIT8iCisjfiBtc2dzdHIgIijjg5fjg63jgrDjg6njg6Djgqjjg6njg7wpIOS4jeaYjuOBquODkOODvOOCuOODp+ODsyE/IgorCisjfiBtc2dpZCAiJXM6IFRvbyBtYW55IGFyZ3VtZW50c1xuIgorI34gbXNnc3RyICIlczog5byV5pWw44GM5aSa44GZ44GO44G+44GZXG4iCisKKyN+IG1zZ2lkICIoUFJPR1JBTSBFUlJPUikgT3B0aW9uIHNob3VsZCBoYXZlIGJlZW4gcmVjb2duaXplZCE/IgorI34gbXNnc3RyICIo44OX44Ot44Kw44Op44Og44Ko44Op44O8KSDjgqrjg5fjgrfjg6fjg7Pjga/oqo3orZjjgZXjgozjgabjgYTjgovjgbnjgY3jgafjgZkhPyIKKworI34gbXNnaWQgInByb2dyYW0gZXJyb3IiCisjfiBtc2dzdHIgIuODl+ODreOCsOODqeODoOOCqOODqeODvCIKKworI34gbXNnaWQgInN0YWNrIG92ZXJmbG93IgorI34gbXNnc3RyICLjgrnjgr/jg4Pjgq/jgqrjg7zjg5Djg7zjg5Xjg63jg7wiCisKKyN+IG1zZ2lkICJjYW5ub3QgZmluZCBhIHRlbXBvcmFyeSBkaXJlY3RvcnksIHRyeSBzZXR0aW5nICRUTVBESVIiCisjfiBtc2dzdHIgIuS4gOaZguODh+OCo+ODrOOCr+ODiOODquOCkuS9nOaIkOOBp+OBjeOBvuOBm+OCk+OAgiAkVE1QRElSIOOCkuioreWumuOBl+OBpuOBv+OBpuOBj+OBoOOBleOBhCIKKworI34gbXNnaWQgImNhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHVzaW5nIHRlbXBsYXRlIFwiJXNcIiIKKyN+IG1zZ3N0ciAi44OG44Oz44OX44Os44O844OIIFwiJXNcIiDjgpLkvb/nlKjjgZfjgZ/kuIDmmYLjg4fjgqPjg6zjgq/jg4jjg6rjgpLkvZzmiJDjgafjgY3jgb7jgZvjgpMiCisKKyN+IG1zZ2lkICJjYW5ub3QgcmVtb3ZlIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXMiCisjfiBtc2dzdHIgIuS4gOaZguODh+OCo+ODrOOCr+ODiOODqiAlcyDjgpLliYrpmaTjgafjgY3jgb7jgZvjgpMiCisKKyN+IG1zZ2lkICJlcnJvciBjbG9zaW5nIGZpbGUiCisjfiBtc2dzdHIgIuODleOCoeOCpOODq+OCr+ODreODvOOCuuOCqOODqeODvCIKKworI34gbXNnaWQgInByZXNlcnZpbmcgcGVybWlzc2lvbnMgZm9yICVzIgorI34gbXNnc3RyICIlcyDjga7jg5Hjg7zjg5/jg4Pjgrfjg6fjg7PjgpLkv53lrZjjgZfjgabjgYTjgb7jgZkiCisKKyN+IG1zZ2lkICJlcnJvciB3aGlsZSBvcGVuaW5nIFwiJXNcIiBmb3IgcmVhZGluZyIKKyN+IG1zZ3N0ciAiXCIlc1wi44KS6Kqt6L6844KA44Gf44KB6ZaL44GE44Gm44GE44KL6Zqb44Gr44Ko44Op44O844GM55m655Sf44GX44G+44GX44GfIgorCisjfiBtc2dpZCAiZXJyb3IgcmVhZGluZyBcIiVzXCIiCisjfiBtc2dzdHIgIlwiJXNcIuOBruiqrei+vOOBv+S4reOBq+OCqOODqeODvOOBjOeZuueUn+OBl+OBvuOBl+OBnyIKKworI34gbXNnaWQgImVycm9yIHdyaXRpbmcgXCIlc1wiIgorI34gbXNnc3RyICJcIiVzXCLjga7mm7jovrzjgb/kuK3jgavjgqjjg6njg7zjgYznmbrnlJ/jgZfjgb7jgZfjgZ8iCisKKyN+IG1zZ2lkICJlcnJvciBhZnRlciByZWFkaW5nIFwiJXNcIiIKKyN+IG1zZ3N0ciAiXCIlc1wi44Gu6Kqt6L6844G/5b6M44Gr44Ko44Op44O844GM55m655Sf44GX44G+44GX44GfIgorCisjfiBtc2dpZCAiZmRvcGVuKCkgZmFpbGVkIgorI34gbXNnc3RyICJmZG9wZW4oKeOBq+WkseaVl+OBl+OBvuOBl+OBnyIKKworI34gbXNnaWQgIkMjIGNvbXBpbGVyIG5vdCBmb3VuZCwgdHJ5IGluc3RhbGxpbmcgcG5ldCIKKyN+IG1zZ3N0ciAiQyMg44Kz44Oz44OR44Kk44Op44GM6KaL44Gk44KK44G+44Gb44KT44CCcG5ldCDjgpLjgqTjg7Pjgrnjg4jjg7zjg6vjgZfjgabjgb/jgabjgY/jgaDjgZXjgYQiCisKKyN+IG1zZ2lkICJDIyB2aXJ0dWFsIG1hY2hpbmUgbm90IGZvdW5kLCB0cnkgaW5zdGFsbGluZyBwbmV0IgorI34gbXNnc3RyICJDIyDku67mg7Pjg57jgrfjg7PjgYzopovjgaTjgYvjgorjgb7jgZvjgpPjgIJwbmV0IOOCkuOCpOODs+OCueODiOODvOODq+OBl+OBpuOBv+OBpuOBj+OBoOOBleOBhCIKKworI34gbXNnaWQgInJlZ3VsYXIgZW1wdHkgZmlsZSIKKyN+IG1zZ3N0ciAi6YCa5bi444Gu56m644OV44Kh44Kk44OrIgorCisjfiBtc2dpZCAicmVndWxhciBmaWxlIgorI34gbXNnc3RyICLpgJrluLjjg5XjgqHjgqTjg6siCisKKyN+IG1zZ2lkICJkaXJlY3RvcnkiCisjfiBtc2dzdHIgIuODh+OCo+ODrOOCr+ODiOODqiIKKworI34gbXNnaWQgImJsb2NrIHNwZWNpYWwgZmlsZSIKKyN+IG1zZ3N0ciAi44OW44Ot44OD44Kv44K544Oa44K344Oj44Or44OV44Kh44Kk44OrIgorCisjfiBtc2dpZCAiY2hhcmFjdGVyIHNwZWNpYWwgZmlsZSIKKyN+IG1zZ3N0ciAi44Kt44Oj44Op44Kv44K/44K544Oa44K344Oj44Or44OV44Kh44Kk44OrIgorCisjfiBtc2dpZCAiZmlmbyIKKyN+IG1zZ3N0ciAiZmlmbyIKKworI34gbXNnaWQgInN5bWJvbGljIGxpbmsiCisjfiBtc2dzdHIgIuOCt+ODs+ODnOODquODg+OCr+ODquODs+OCryIKKworI34gbXNnaWQgInNvY2tldCIKKyN+IG1zZ3N0ciAi44K944Kx44OD44OIIgorCisjfiBtc2dpZCAibWVzc2FnZSBxdWV1ZSIKKyN+IG1zZ3N0ciAi44Oh44OD44K744O844K444Kt44Ol44O8IgorCisjfiBtc2dpZCAic2VtYXBob3JlIgorI34gbXNnc3RyICLjgrvjg57jg5XjgqkiCisKKyN+IG1zZ2lkICJzaGFyZWQgbWVtb3J5IG9iamVjdCIKKyN+IG1zZ3N0ciAi5YWx5pyJ44Oh44Oi44Oq44Kq44OW44K444Kn44Kv44OIIgorCisjfiBtc2dpZCAidHlwZWQgbWVtb3J5IG9iamVjdCIKKyN+IG1zZ3N0ciAi5Z6L5LuY44Oh44Oi44Oq44Kq44OW44K444Kn44Kv44OIIgorCisjfiBtc2dpZCAid2VpcmQgZmlsZSIKKyN+IG1zZ3N0ciAi5LiN5piO44Gq44OV44Kh44Kk44OrIgorCisjfiBtc2dpZCAiQWRkcmVzcyBmYW1pbHkgZm9yIGhvc3RuYW1lIG5vdCBzdXBwb3J0ZWQiCisjfiBtc2dzdHIgIuODm+OCueODiOWQjeOBq+WvvuOBmeOCiyBBZGRyZXNzIGZhbWlseSDjgYzjgrXjg53jg7zjg4jjgZXjgozjgabjgYTjgb7jgZvjgpMiCisKKyN+IG1zZ2lkICJUZW1wb3JhcnkgZmFpbHVyZSBpbiBuYW1lIHJlc29sdXRpb24iCisjfiBtc2dzdHIgIuWQjeWJjeino+axuuOBq+S4gOaZgueahOOBq+WkseaVl+OBl+OBvuOBl+OBnyIKKworI34gbXNnaWQgIkJhZCB2YWx1ZSBmb3IgYWlfZmxhZ3MiCisjfiBtc2dzdHIgImFpX2ZsYWdzIOOBq+WvvuOBmeOCi+iqpOOBo+OBn+WApOOBp+OBmSIKKworI34gbXNnaWQgIk5vbi1yZWNvdmVyYWJsZSBmYWlsdXJlIGluIG5hbWUgcmVzb2x1dGlvbiIKKyN+IG1zZ3N0ciAi5ZCN5YmN6Kej5rG644Gn44Oq44Kr44OQ44Oq44Gn44GN44Gq44GE5aSx5pWX44GM55m655Sf44GX44G+44GX44GfIgorCisjfiBtc2dpZCAiYWlfZmFtaWx5IG5vdCBzdXBwb3J0ZWQiCisjfiBtc2dzdHIgImFpX2ZhbWlseSDjga/jgrXjg53jg7zjg4jjgZXjgozjgabjgYTjgb7jgZvjgpMiCisKKyN+IG1zZ2lkICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIgorI34gbXNnc3RyICLjg6Hjg6Ljg6rphY3nva7jgavlpLHmlZfjgZfjgb7jgZfjgZ8iCisKKyN+IG1zZ2lkICJObyBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCBob3N0bmFtZSIKKyN+IG1zZ3N0ciAi44Ob44K544OI5ZCN44Gr44Ki44OJ44Os44K544GM5Ymy44KK5b2T44Gm44KJ44KM44Gm44GE44G+44Gb44KTIgorCisjfiBtc2dpZCAiTmFtZSBvciBzZXJ2aWNlIG5vdCBrbm93biIKKyN+IG1zZ3N0ciAi5ZCN5YmN44G+44Gf44Gv44K144O844OT44K544GM5LiN5piO44Gn44GZIgorCisjfiBtc2dpZCAiU2Vydm5hbWUgbm90IHN1cHBvcnRlZCBmb3IgYWlfc29ja3R5cGUiCisjfiBtc2dzdHIgImFpX3NvY2t0eXBlIOOBq+WvvuOBl+OBpiBTZXJ2bmFtZSDjgYzjgrXjg53jg7zjg4jjgZXjgozjgabjgYTjgb7jgZvjgpMiCisKKyN+IG1zZ2lkICJhaV9zb2NrdHlwZSBub3Qgc3VwcG9ydGVkIgorI34gbXNnc3RyICJhaV9zb2NrdHlwZSDjga/jgrXjg53jg7zjg4jjgZXjgozjgabjgYTjgb7jgZvjgpMiCisKKyN+IG1zZ2lkICJTeXN0ZW0gZXJyb3IiCisjfiBtc2dzdHIgIuOCt+OCueODhuODoOOCqOODqeODvCIKKworI34gbXNnaWQgIkFyZ3VtZW50IGJ1ZmZlciB0b28gc21hbGwiCisjfiBtc2dzdHIgIuW8leaVsOODkOODg+ODleOCoeOBjOWwj+OBleOBmeOBjuOBvuOBmSIKKworI34gbXNnaWQgIlByb2Nlc3NpbmcgcmVxdWVzdCBpbiBwcm9ncmVzcyIKKyN+IG1zZ3N0ciAi6KaB5rGC44GV44KM44Gf5Yem55CG44Gv5a6f6KGM5Lit44Gn44GZIgorCisjfiBtc2dpZCAiUmVxdWVzdCBjYW5jZWxlZCIKKyN+IG1zZ3N0ciAi6KaB5rGC44GM44Kt44Oj44Oz44K744Or44GV44KM44G+44GX44GfIgorCisjfiBtc2dpZCAiUmVxdWVzdCBub3QgY2FuY2VsZWQiCisjfiBtc2dzdHIgIuimgeaxguOBjOOCreODo+ODs+OCu+ODq+OBleOCjOOBvuOBm+OCk+OBp+OBl+OBnyIKKworI34gbXNnaWQgIkFsbCByZXF1ZXN0cyBkb25lIgorI34gbXNnc3RyICLjgZnjgbnjgabjga7opoHmsYLjgYzlrozkuobjgZfjgb7jgZfjgZ8iCisKKyN+IG1zZ2lkICJJbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCIKKyN+IG1zZ3N0ciAi44K344Kw44OK44Or5Ymy44KK6L6844G/44GM55m655Sf44GX44G+44GX44GfIgorCisjfiBtc2dpZCAiUGFyYW1ldGVyIHN0cmluZyBub3QgY29ycmVjdGx5IGVuY29kZWQiCisjfiBtc2dzdHIgIuODkeODqeODoeODvOOCv+ODvOaWh+Wtl+WIl+OBjOato+OBl+OBj+OCqOODs+OCs+ODvOODieOBleOCjOOBpuOBhOOBvuOBm+OCkyIKKworI34gbXNnaWQgIlVua25vd24gZXJyb3IiCisjfiBtc2dzdHIgIuS4jeaYjuOBquOCqOODqeODvCIKKworI34gbXNnaWQgIiVzOiBvcHRpb24gJyVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorI34gbXNnc3RyICIlczog44Kq44OX44K344On44OzICctLSVzJyDjga/lvJXmlbDjgYzlv4XopoHjgafjgZlcbiIKKworI34gbXNnaWQgImludmFsaWQgc291cmNlX3ZlcnNpb24gYXJndW1lbnQgdG8gY29tcGlsZV9qYXZhX2NsYXNzIgorI34gbXNnc3RyICJjb21waWxlX2phdmFfY2xhc3Mg44G444GuIHNvdXJjZV92ZXJzaW9uIOW8leaVsOOBjOeEoeWKueOBp+OBmSIKKworI34gbXNnaWQgImludmFsaWQgdGFyZ2V0X3ZlcnNpb24gYXJndW1lbnQgdG8gY29tcGlsZV9qYXZhX2NsYXNzIgorI34gbXNnc3RyICJjb21waWxlX2phdmFfY2xhc3Mg44G444GuIHRhcmdldF92ZXJzaW9uIOW8leaVsOOBjOeEoeWKueOBp+OBmSIKKworI34gbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgXCIlc1wiIgorI34gbXNnc3RyICJcIiVzXCIg44Gu5L2c5oiQ44Gr5aSx5pWX44GX44G+44GX44GfIgorCisjfiBtc2dpZCAiZXJyb3Igd2hpbGUgd3JpdGluZyBcIiVzXCIgZmlsZSIKKyN+IG1zZ3N0ciAiXCIlc1wiIOODleOCoeOCpOODq+OBruabuOOBjei+vOOBv+S4reOBq+OCqOODqeODvOOBjOeZuueUn+OBl+OBvuOBl+OBnyIKKworI34gbXNnaWQgIkphdmEgY29tcGlsZXIgbm90IGZvdW5kLCB0cnkgaW5zdGFsbGluZyBnY2ogb3Igc2V0ICRKQVZBQyIKKyN+IG1zZ3N0ciAiIgorI34gIkphdmEg44Kz44Oz44OR44Kk44Op44GM6KaL44Gk44GL44KK44G+44Gb44KT44CCIGdjaiDjgpLjgqTjg7Pjgrnjg4jjg7zjg6vjgZnjgovjgYvjgIHjgb7jgZ/jga90ICIKKyN+ICIkSkFWQUMg44KS6Kit5a6a44GX44Gm44G/44Gm44GP44Gg44GV44GEIgorCisjfiBtc2dpZCAiSmF2YSB2aXJ0dWFsIG1hY2hpbmUgbm90IGZvdW5kLCB0cnkgaW5zdGFsbGluZyBnaWogb3Igc2V0ICRKQVZBIgorI34gbXNnc3RyICIiCisjfiAiSmF2YSDku67mg7Pjg57jgrfjg7PjgYzopovjgaTjgYvjgorjgb7jgZvjgpPjgIIgZ2lqIOOCkuOCpOODs+OCueODiOODvOODq+OBmeOCi+OBi+OAgeOBvuOBn+OBryAkSkFWQSAiCisjfiAi44KS6Kit5a6a44GX44Gm44G/44Gm44GP44Gg44GV44GEIgorCisjfiBtc2dpZCAiJXMgc3VicHJvY2VzcyBJL08gZXJyb3IiCisjfiBtc2dzdHIgIiVzIOOCteODluODl+ODreOCu+OCuSBJL08g44Ko44Op44O8IgorCisjfiBtc2dpZCAiY2Fubm90IGNoYW5nZSBwZXJtaXNzaW9ucyBvZiAlcyIKKyN+IG1zZ3N0ciAiJXMg44Gu44OR44O844Of44OD44K344On44Oz44KS5aSJ5pu044Gn44GN44G+44Gb44KTIgorCisjfiBtc2dpZCAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJXMiCisjfiBtc2dzdHIgIuODh+OCo+ODrOOCr+ODiOODqiAlcyDjgpLkvZzmiJDjgafjgY3jgb7jgZvjgpMiCisKKyN+IG1zZ2lkICJ1bmFibGUgdG8gcmVjb3JkIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiCisjfiBtc2dzdHIgIuePvuWcqOOBruS9nOalreODh+OCo+ODrOOCr+ODiOODquOCkuiomOmMsuOBmeOCi+OBk+OBqOOBjOOBp+OBjeOBvuOBm+OCkyIKKworI34gbXNnaWQgImZhaWxlZCB0byByZXR1cm4gdG8gaW5pdGlhbCB3b3JraW5nIGRpcmVjdG9yeSIKKyN+IG1zZ3N0ciAi5Yid5pyf5L2c5qWt44OH44Kj44Os44Kv44OI44Oq44Gr5oi744KL44Gu44Gr5aSx5pWX44GX44G+44GX44GfIgorCisjfiBtc2dpZCAiRmFpbGVkIHRvIG9wZW4gL2Rldi96ZXJvIGZvciByZWFkIgorI34gbXNnc3RyICIvZGV2L3plcm/jgpLoqq3ovrzjgb/nlKjjgavplovjgZHjgb7jgZvjgpMiCisKKyN+IG1zZ2lkICJjcmVhdGlvbiBvZiByZWFkaW5nIHRocmVhZCBmYWlsZWQiCisjfiBtc2dzdHIgIuiqreOBv+i+vOOBv+OCueODrOODg+ODieOBruS9nOaIkOOBq+WkseaVl+OBl+OBvuOBl+OBnyIKKworI34gbXNnaWQgImNhbm5vdCBzZXQgdXAgbm9uYmxvY2tpbmcgSS9PIHRvICVzIHN1YnByb2Nlc3MiCisjfiBtc2dzdHIgIiVzIOWtkOODl+ODreOCu+OCueOBuOmdnuODluODreODg+OCryBJL08g44KS6Kit5a6a44Gn44GN44G+44Gb44KTIgorCisjfiBtc2dpZCAiY29tbXVuaWNhdGlvbiB3aXRoICVzIHN1YnByb2Nlc3MgZmFpbGVkIgorI34gbXNnc3RyICIlcyDlrZDjg5fjg63jgrvjgrnjgajjga7pgJrkv6HjgavlpLHmlZfjgZfjgb7jgZfjgZ8iCisKKyN+IG1zZ2lkICJ3cml0ZSB0byAlcyBzdWJwcm9jZXNzIGZhaWxlZCIKKyN+IG1zZ3N0ciAiJXMg5a2Q44OX44Ot44K744K544G444Gu5pu444GN6L6844G/44Gr5aSx5pWX44GX44G+44GX44GfIgorCisjfiBtc2dpZCAicmVhZCBmcm9tICVzIHN1YnByb2Nlc3MgZmFpbGVkIgorI34gbXNnc3RyICIlcyDlrZDjg5fjg63jgrvjgrnjgYvjgonjga7oqq3jgb/ovrzjgb/jgavlpLHmlZfjgZfjgb7jgZfjgZ8iCisKKyN+IG1zZ2lkICJzdWJwcm9jZXNzICVzIHRlcm1pbmF0ZWQgd2l0aCBleGl0IGNvZGUgJWQiCisjfiBtc2dzdHIgIuWtkOODl+ODreOCu+OCuSAlcyDjgYzntYLkuobjgrPjg7zjg4kgJWQg44Gn57WC5LqG44GX44G+44GX44GfIgorCisjfiBtc2dpZCAiJXMgc3VicHJvY2VzcyB0ZXJtaW5hdGVkIHdpdGggZXhpdCBjb2RlICVkIgorI34gbXNnc3RyICIlcyDlrZDjg5fjg63jgrvjgrnjgYzntYLkuobjgrPjg7zjg4kgJWQg44Gn57WC5LqG44GX44G+44GX44GfIgorCisjfiBtc2dpZCAiU3VjY2VzcyIKKyN+IG1zZ3N0ciAi5oiQ5Yqf44Gn44GZIgorCisjfiBtc2dpZCAiTm8gbWF0Y2giCisjfiBtc2dzdHIgIuS4gOiHtOOBl+OBvuOBm+OCkyIKKworI34gbXNnaWQgIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uIgorI34gbXNnc3RyICLnhKHlirnjgarmraPopo/ooajnj77jgafjgZkiCisKKyN+IG1zZ2lkICJJbnZhbGlkIGNvbGxhdGlvbiBjaGFyYWN0ZXIiCisjfiBtc2dzdHIgIueEoeWKueOBqueFp+WQiOaWh+Wtl+OBp+OBmSIKKworI34gbXNnaWQgIkludmFsaWQgY2hhcmFjdGVyIGNsYXNzIG5hbWUiCisjfiBtc2dzdHIgIueEoeWKueOBquaWh+Wtl+OCr+ODqeOCueWQjeOBp+OBmSIKKworI34gbXNnaWQgIlRyYWlsaW5nIGJhY2tzbGFzaCIKKyN+IG1zZ3N0ciAi57WC56uv44Gu44OQ44OD44Kv44K544Op44OD44K344OlIgorCisjfiBtc2dpZCAiSW52YWxpZCBiYWNrIHJlZmVyZW5jZSIKKyN+IG1zZ3N0ciAi54Sh5Yq544Gq5YmN5pa55Y+C54Wn44Gn44GZIgorCisjfiBtc2dpZCAiVW5tYXRjaGVkIFsgb3IgW14iCisjfiBtc2dzdHIgIlsg44G+44Gf44GvIFteIOOBjOS4jeS4gOiHtOOBp+OBmSIKKworI34gbXNnaWQgIlVubWF0Y2hlZCAoIG9yIFxcKCIKKyN+IG1zZ3N0ciAiKCDjgb7jgZ/jga8gXFwoIOOBjOS4jeS4gOiHtOOBp+OBmSIKKworI34gbXNnaWQgIlVubWF0Y2hlZCBcXHsiCisjfiBtc2dzdHIgIlxceyDjgYzkuI3kuIDoh7TjgafjgZkiCisKKyN+IG1zZ2lkICJJbnZhbGlkIGNvbnRlbnQgb2YgXFx7XFx9IgorI34gbXNnc3RyICJcXHtcXH0g44Gu5Lit6Lqr44GM54Sh5Yq544Gn44GZIgorCisjfiBtc2dpZCAiSW52YWxpZCByYW5nZSBlbmQiCisjfiBtc2dzdHIgIueEoeWKueOBquevhOWbsue1guS6huOBp+OBmSIKKworI34gbXNnaWQgIk1lbW9yeSBleGhhdXN0ZWQiCisjfiBtc2dzdHIgIuODoeODouODquOCkuS9v+OBhOaenOOBn+OBl+OBvuOBl+OBnyIKKworI34gbXNnaWQgIkludmFsaWQgcHJlY2VkaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiIKKyN+IG1zZ3N0ciAi54Sh5Yq544Gq5YmN5pa55q2j6KaP6KGo54++44Gn44GZIgorCisjfiBtc2dpZCAiUHJlbWF0dXJlIGVuZCBvZiByZWd1bGFyIGV4cHJlc3Npb24iCisjfiBtc2dzdHIgIuato+imj+ihqOePvuOBjOmAlOS4reOBp+e1guS6huOBl+OBvuOBl+OBnyIKKworI34gbXNnaWQgIlJlZ3VsYXIgZXhwcmVzc2lvbiB0b28gYmlnIgorI34gbXNnc3RyICLmraPopo/ooajnj77jgYzlpKfjgY3jgZnjgY7jgb7jgZkiCisKKyN+IG1zZ2lkICJVbm1hdGNoZWQgKSBvciBcXCkiCisjfiBtc2dzdHIgIikg44G+44Gf44GvIFxcKSDjgYzkuI3kuIDoh7TjgafjgZkiCisKKyN+IG1zZ2lkICJObyBwcmV2aW91cyByZWd1bGFyIGV4cHJlc3Npb24iCisjfiBtc2dzdHIgIuS7peWJjeOBq+ato+imj+ihqOePvuOBjOOBguOCiuOBvuOBm+OCkyIKKworI34gbXNnaWQgIl5beVldIgorI34gbXNnc3RyICJeW3lZXSIKKworI34gbXNnaWQgIl5bbk5dIgorI34gbXNnc3RyICJeW25OXSIKKworI34gbXNnaWQgInNldHRpbmcgcGVybWlzc2lvbnMgZm9yICVzIgorI34gbXNnc3RyICIlcyDjga7jg5Hjg7zjg5/jg4Pjgrfjg6fjg7PjgpLoqK3lrprjgZfjgb7jgZkiCisKKyN+IG1zZ2lkICJIYW5ndXAiCisjfiBtc2dzdHIgIkhhbmd1cCIKKworI34gbXNnaWQgIkludGVycnVwdCIKKyN+IG1zZ3N0ciAi5Ymy44KK6L6844G/IgorCisjfiBtc2dpZCAiUXVpdCIKKyN+IG1zZ3N0ciAi57WC5LqGIgorCisjfiBtc2dpZCAiSWxsZWdhbCBpbnN0cnVjdGlvbiIKKyN+IG1zZ3N0ciAiSWxsZWdhbCBpbnN0cnVjdGlvbiIKKworI34gbXNnaWQgIlRyYWNlL2JyZWFrcG9pbnQgdHJhcCIKKyN+IG1zZ3N0ciAiVHJhY2UvYnJlYWtwb2ludCB0cmFwIgorCisjfiBtc2dpZCAiQWJvcnRlZCIKKyN+IG1zZ3N0ciAi5Lit5q2iIgorCisjfiBtc2dpZCAiRmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uIgorI34gbXNnc3RyICLmta7li5XlsI/mlbDngrnkvovlpJYiCisKKyN+IG1zZ2lkICJLaWxsZWQiCisjfiBtc2dzdHIgIuW8t+WItue1guS6hiIKKworI34gbXNnaWQgIkJ1cyBlcnJvciIKKyN+IG1zZ3N0ciAi44OQ44K544Ko44Op44O8IgorCisjfiBtc2dpZCAiU2VnbWVudGF0aW9uIGZhdWx0IgorI34gbXNnc3RyICJTZWdtZW50YXRpb24gZmF1bHQiCisKKyN+IG1zZ2lkICJCcm9rZW4gcGlwZSIKKyN+IG1zZ3N0ciAiQnJva2VuIHBpcGUiCisKKyN+IG1zZ2lkICJBbGFybSBjbG9jayIKKyN+IG1zZ3N0ciAiQWxhcm0gY2xvY2siCisKKyN+IG1zZ2lkICJUZXJtaW5hdGVkIgorI34gbXNnc3RyICJUZXJtaW5hdGVkIgorCisjfiBtc2dpZCAiVXJnZW50IEkvTyBjb25kaXRpb24iCisjfiBtc2dzdHIgIue3iuaApSBJL08g54q25oWLIgorCisjfiBtc2dpZCAiU3RvcHBlZCAoc2lnbmFsKSIKKyN+IG1zZ3N0ciAi5YGc5q2iICjjgrfjgrDjg4rjg6spIgorCisjfiBtc2dpZCAiU3RvcHBlZCIKKyN+IG1zZ3N0ciAi5YGc5q2iIgorCisjfiBtc2dpZCAiQ29udGludWVkIgorI34gbXNnc3RyICLntpnntpoiCisKKyN+IG1zZ2lkICJDaGlsZCBleGl0ZWQiCisjfiBtc2dzdHIgIuWtkOODl+ODreOCu+OCuee1guS6hiIKKworI34gbXNnaWQgIlN0b3BwZWQgKHR0eSBpbnB1dCkiCisjfiBtc2dzdHIgIuWBnOatoiAodHR5IOWFpeWKmykiCisKKyN+IG1zZ2lkICJTdG9wcGVkICh0dHkgb3V0cHV0KSIKKyN+IG1zZ3N0ciAi5YGc5q2iICh0dHkg5Ye65YqbKSIKKworI34gbXNnaWQgIkkvTyBwb3NzaWJsZSIKKyN+IG1zZ3N0ciAiSS9PIOWPr+iDvSIKKworI34gbXNnaWQgIkNQVSB0aW1lIGxpbWl0IGV4Y2VlZGVkIgorI34gbXNnc3RyICJDUFXmmYLplpPliLbpmZDjgpLotoXpgY7jgZfjgb7jgZfjgZ8iCisKKyN+IG1zZ2lkICJGaWxlIHNpemUgbGltaXQgZXhjZWVkZWQiCisjfiBtc2dzdHIgIuODleOCoeOCpOODq+OCteOCpOOCuuWItumZkOOCkui2hemBjuOBl+OBvuOBl+OBnyIKKworI34gbXNnaWQgIlZpcnR1YWwgdGltZXIgZXhwaXJlZCIKKyN+IG1zZ3N0ciAi5Luu5oOz44K/44Kk44Oe44O844GM57WC5LqG44GX44G+44GX44GfIgorCisjfiBtc2dpZCAiUHJvZmlsaW5nIHRpbWVyIGV4cGlyZWQiCisjfiBtc2dzdHIgIuODl+ODreODleOCoeOCpOODquODs+OCsOOCv+OCpOODnuODvOOBjOe1guS6huOBl+OBvuOBl+OBnyIKKworI34gbXNnaWQgIldpbmRvdyBjaGFuZ2VkIgorI34gbXNnc3RyICJXaW5kb3cg44GM5aSJ5pu044GV44KM44G+44GX44GfIgorCisjfiBtc2dpZCAiVXNlciBkZWZpbmVkIHNpZ25hbCAxIgorI34gbXNnc3RyICLjg6bjg7zjgrbjg7zlrprnvqnjgrfjgrDjg4rjg6sxIgorCisjfiBtc2dpZCAiVXNlciBkZWZpbmVkIHNpZ25hbCAyIgorI34gbXNnc3RyICLjg6bjg7zjgrbjg7zlrprnvqnjgrfjgrDjg4rjg6syIgorCisjfiBtc2dpZCAiRU1UIHRyYXAiCisjfiBtc2dzdHIgIkVNVCDjg4jjg6njg4Pjg5ciCisKKyN+IG1zZ2lkICJCYWQgc3lzdGVtIGNhbGwiCisjfiBtc2dzdHIgIumWk+mBleOBo+OBn+OCt+OCueODhuODoOOCs+ODvOODqyIKKworI34gbXNnaWQgIlN0YWNrIGZhdWx0IgorI34gbXNnc3RyICLjgrnjgr/jg4Pjgq/jgqjjg6njg7wiCisKKyN+IG1zZ2lkICJJbmZvcm1hdGlvbiByZXF1ZXN0IgorI34gbXNnc3RyICLmg4XloLHopoHmsYIiCisKKyN+IG1zZ2lkICJQb3dlciBmYWlsdXJlIgorI34gbXNnc3RyICLpm7vmupDjgqjjg6njg7wiCisKKyN+IG1zZ2lkICJSZXNvdXJjZSBsb3N0IgorI34gbXNnc3RyICLjg6rjgr3jg7zjgrnjgYznhKHjgY/jgarjgorjgb7jgZfjgZ8iCisKKyN+IG1zZ2lkICJlcnJvciB3cml0aW5nIHRvIGEgY2xvc2VkIHBpcGUgb3Igc29ja2V0IgorI34gbXNnc3RyICLplonjgZjjgZ/jg5HjgqTjg5fjgb7jgZ/jga/jgr3jgrHjg4Pjg4jjgbjjga7mm7jjgY3ovrzjgb/jgafjgqjjg6njg7zjgYznmbrnlJ/jgZfjgb7jgZfjgZ8iCisKKyN+IG1zZ2lkICJSZWFsLXRpbWUgc2lnbmFsICVkIgorI34gbXNnc3RyICLjg6rjgqLjg6vjgr/jgqTjg6DjgrfjgrDjg4rjg6sgJWQiCisKKyN+IG1zZ2lkICJVbmtub3duIHNpZ25hbCAlZCIKKyN+IG1zZ3N0ciAi5LiN5piO44Gq44K344Kw44OK44OrICVkIgorCisjfiBtc2dpZCAiaWNvbnYgZnVuY3Rpb24gbm90IHVzYWJsZSIKKyN+IG1zZ3N0ciAiaWNvbnYg6Zai5pWw44GM5L2/44GI44G+44Gb44KTIgorCisjfiBtc2dpZCAiaWNvbnYgZnVuY3Rpb24gbm90IGF2YWlsYWJsZSIKKyN+IG1zZ3N0ciAiaWNvbnYg6Zai5pWw44GM5pyJ5Yq544Gn44Gv44GC44KK44G+44Gb44KTIgorCisjfiBtc2dpZCAiY2hhcmFjdGVyIG91dCBvZiByYW5nZSIKKyN+IG1zZ3N0ciAi56+E5Zuy5aSW44Gu5paH5a2XIgorCisjfiBtc2dpZCAiY2Fubm90IGNvbnZlcnQgVSslMDRYIHRvIGxvY2FsIGNoYXJhY3RlciBzZXQiCisjfiBtc2dzdHIgIlUrJTA0WCDjgpLjg63jg7zjgqvjg6vmloflrZfjgrvjg4Pjg4jjgavlpInmj5vjgafjgY3jgb7jgZvjgpMiCisKKyN+IG1zZ2lkICJjYW5ub3QgY29udmVydCBVKyUwNFggdG8gbG9jYWwgY2hhcmFjdGVyIHNldDogJXMiCisjfiBtc2dzdHIgIlUrJTA0WCDjgpLjg63jg7zjgqvjg6vmloflrZfjgrvjg4Pjg4ggJXMg44Gr5aSJ5o+b44Gn44GN44G+44Gb44KTIgorCisjfiBtc2dpZCAiaW52YWxpZCB1c2VyIgorI34gbXNnc3RyICLnhKHlirnjgarjg6bjg7zjgrYiCisKKyN+IG1zZ2lkICJpbnZhbGlkIGdyb3VwIgorI34gbXNnc3RyICLnhKHlirnjgarjgrDjg6vjg7zjg5ciCisKKyN+IG1zZ2lkICJpbnZhbGlkIHNwZWMiCisjfiBtc2dzdHIgIueEoeWKueOBquaMh+WumiIKKworI34gbXNnaWQgInVuYWJsZSB0byBkaXNwbGF5IGVycm9yIG1lc3NhZ2UiCisjfiBtc2dzdHIgIuOCqOODqeODvOODoeODg+OCu+ODvOOCuOOCkuihqOekuuOBp+OBjeOBvuOBm+OCkyIKKworI34gbXNnaWQgIlBhY2thZ2VkIGJ5ICVzICglcylcbiIKKyN+IG1zZ3N0ciAi44OR44OD44Kx44O844K45L2c5oiQ6ICFOiAlcyAoJXMpXG4iCisKKyN+IG1zZ2lkICJQYWNrYWdlZCBieSAlc1xuIgorI34gbXNnc3RyICLjg5Hjg4PjgrHjg7zjgrjkvZzmiJDogIU6ICVzXG4iCisKKyN+IG1zZ2lkICIoQykiCisjfiBtc2dzdHIgIihDKSIKKworI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICJMaWNlbnNlIEdQTHYzKzogR05VIEdQTCB2ZXJzaW9uIDMgb3IgbGF0ZXIgPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2dwbC4iCisjfiAiaHRtbD4uXG4iCisjfiAiVGhpcyBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgYXJlIGZyZWUgdG8gY2hhbmdlIGFuZCByZWRpc3RyaWJ1dGUgaXQuXG4iCisjfiAiVGhlcmUgaXMgTk8gV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy5cbiIKKyN+ICJcbiIKKyN+IG1zZ3N0ciAiIgorI34gIlxuIgorI34gIuODqeOCpOOCu+ODs+OCuSBHUEx2Mys6IEdOVSBHUEwgdmVyc2lvbiAzIG9yIGxhdGVyIDxodHRwOi8vZ251Lm9yZy9saWNlbnNlcy8iCisjfiAiZ3BsLmh0bWw+LlxuIgorI34gIlRoaXMgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmlidXRlIGl0LlxuIgorI34gIlRoZXJlIGlzIE5PIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuXG4iCisjfiAiXG4iCisKKyN+IG1zZ2lkICJXcml0dGVuIGJ5ICVzLlxuIgorI34gbXNnc3RyICLkvZzogIUgJXPjgIJcbiIKKworI34gbXNnaWQgIldyaXR0ZW4gYnkgJXMgYW5kICVzLlxuIgorI34gbXNnc3RyICLkvZzogIUgJXMg44GK44KI44GzICVz44CCXG4iCisKKyN+IG1zZ2lkICJXcml0dGVuIGJ5ICVzLCAlcywgYW5kICVzLlxuIgorI34gbXNnc3RyICLkvZzogIUgJXPjgIEgJXPjgIHjgYrjgojjgbMgJXPjgIJcbiIKKworI34gbXNnaWQgIiIKKyN+ICJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisjfiAiYW5kICVzLlxuIgorI34gbXNnc3RyICIiCisjfiAi5L2c6ICFICVz44CBICVz44CBICVz44CBXG4iCisjfiAi44GK44KI44GzICVz44CCXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorI34gIiVzLCBhbmQgJXMuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICLkvZzogIUgJXPjgIEgJXPjgIEgJXPjgIFcbiIKKyN+ICIlc+OAgeOBiuOCiOOBsyAlc+OAglxuIgorCisjfiBtc2dpZCAiIgorI34gIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyN+ICIlcywgJXMsIGFuZCAlcy5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIuS9nOiAhSAlc+OAgSAlc+OAgSAlc+OAgVxuIgorI34gIiVz44CBICVz44CB44GK44KI44GzICVz44CCXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorI34gIiVzLCAlcywgJXMsIGFuZCAlcy5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIuS9nOiAhSAlc+OAgSAlc+OAgSAlc+OAgVxuIgorI34gIiVz44CBICVz44CBICVz44CB44GK44KI44GzICVz44CCXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorI34gIiVzLCAlcywgJXMsICVzLFxuIgorI34gImFuZCAlcy5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIuS9nOiAhSAlc+OAgSAlc+OAgSAlc+OAgVxuIgorI34gIiVz44CBICVz44CBICVz44CBICVz44CBXG4iCisjfiAi44GK44KI44GzICVz44CCXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorI34gIiVzLCAlcywgJXMsICVzLFxuIgorI34gIiVzLCBhbmQgJXMuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICLkvZzogIUgJXPjgIEgJXPjgIEgJXPjgIFcbiIKKyN+ICIlc+OAgSAlc+OAgSAlc+OAgSAlc+OAgVxuIgorI34gIiVz44CB44GK44KI44GzICVz44CCXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorI34gIiVzLCAlcywgJXMsICVzLFxuIgorI34gIiVzLCAlcywgYW5kIG90aGVycy5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIuS9nOiAhSAlc+OAgSAlc+OAgSAlc+OAgVxuIgorI34gIiVz44CBICVz44CBICVz44CBICVz44CBXG4iCisjfiAiJXPjgIEgJXPjgIEg44GK44KI44Gz5LuW44Gu5pa544CF44CCXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiXG4iCisjfiAiUmVwb3J0IGJ1Z3MgdG86ICVzXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICLjg5DjgrDjgpLnmbropovjgZfjgZ/jgokgPCVzPiDjgavloLHlkYrjgZfjgabkuIvjgZXjgYTjgIJcbiIKKyN+ICLnv7voqLPjgavplqLjgZnjgovjg5DjgrDjga88dHJhbnNsYXRpb24tdGVhbS1qYUBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+44Gr5aCx5ZGK44GX44Gm44GPIgorI34gIuOBoOOBleOBhOOAglxuIgorCisjfiBtc2dpZCAiUmVwb3J0ICVzIGJ1Z3MgdG86ICVzXG4iCisjfiBtc2dzdHIgIiVzIOOBruODkOOCsOOBryA8JXM+IOOBq+WgseWRiuOBl+OBpuOBj+OBoOOBleOBhOOAglxuIgorCisjfiBtc2dpZCAiJXMgaG9tZSBwYWdlOiA8aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlLyVzLz5cbiIKKyN+IG1zZ3N0ciAiJXMg44Gu44Ob44O844Og44Oa44O844K4OiA8aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlLyVzLz5cbiIKKworI34gbXNnaWQgInN0ZGluIgorI34gbXNnc3RyICLmqJnmupblhaXlipsiCisKKyN+IG1zZ2lkICJzdGRvdXQiCisjfiBtc2dzdHIgIuaomea6luWHuuWKmyIKKworI34gbXNnaWQgInN0ZGVyciIKKyN+IG1zZ3N0ciAi5qiZ5rqW44Ko44Op44O85Ye65YqbIgorCisjfiBtc2dpZCAidW5rbm93biBzdHJlYW0iCisjfiBtc2dzdHIgIuS4jeaYjuOBquOCueODiOODquODvOODoCIKKworI34gbXNnaWQgImZhaWxlZCB0byByZW9wZW4gJXMgd2l0aCBtb2RlICVzIgorI34gbXNnc3RyICIlcyDjgpLjg6Ljg7zjg4kgJXMg44Gn5YaN5bqm6ZaL44GP44GT44Go44Gr5aSx5pWX44GX44G+44GX44GfIgorCisjfiBtc2dpZCAiU2V0IExDX0FMTD0nQycgdG8gd29yayBhcm91bmQgdGhlIHByb2JsZW0uIgorI34gbXNnc3RyICLllY/poYzjgpLlm57pgb/jgZnjgovjgZ/jgoHjgasgTENfQUxMPSdDJyDjgpLmjIflrprjgZfjgabjgY/jgaDjgZXjgYQuIgorCisjfiBtc2dpZCAiVGhlIHN0cmluZ3MgY29tcGFyZWQgd2VyZSAlcyBhbmQgJXMuIgorI34gbXNnc3RyICLmr5TovIPjgZfjgZ/mloflrZfliJfjga8gJXMg44GoICVzIOOBp+OBmS4iCisKKyN+IG1zZ2lkICJjYW5ub3QgcGVyZm9ybSBmb3JtYXR0ZWQgb3V0cHV0IgorI34gbXNnc3RyICLmm7jlvI/oqK3lrprjgpLooYzjgaPjgZ/lh7rlipvjgpLlrp/ooYzjgZnjgovjgZPjgajjgYzjgafjgY3jgb7jgZvjgpMiCisKKyN+IG1zZ2lkICJpbnZhbGlkICVzJXMgYXJndW1lbnQgYCVzJyIKKyN+IG1zZ3N0ciAi5byV5pWwIGAlMyRzJyDjgavlr77jgZfjgaYgJTEkcyUyJHMg44GM54Sh5Yq544Gn44GZIgorCisjfiBtc2dpZCAiaW52YWxpZCBzdWZmaXggaW4gJXMlcyBhcmd1bWVudCBgJXMnIgorI34gbXNnc3RyICLlvJXmlbAgYCUzJHMnIOOBq+WvvuOBl+OBpueEoeWKueOBquaOpeWwvui+niAlMSRzJTIkcyDjgafjgZkiCisKKyN+IG1zZ2lkICIlcyVzIGFyZ3VtZW50IGAlcycgdG9vIGxhcmdlIgorI34gbXNnc3RyICLlvJXmlbAgYCUzJHMnIOOBq+WvvuOBmeOCiyAlMSRzJTIkcyDjgYzlpKfjgY3jgZnjgY7jgb7jgZkiCmRpZmYgLS1naXQgYS9wby9tcy5nbW8gYi9wby9tcy5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU0ZTJhYwotLS0gL2Rldi9udWxsCisrKyBiL3BvL21zLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9tcy5wbyBiL3BvL21zLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0M2JjNTYKLS0tIC9kZXYvbnVsbAorKysgYi9wby9tcy5wbwpAQCAtMCwwICsxLDExODkgQEAKKyMgQmlzb24gQmFoYXNhIE1lbGF5dSAoTWFsYXkpIChtcykuCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIEJpc29uIHBhY2thZ2UuCisjIFNoYXJ1enphbWFuIEFobWF0IFJhc2xhbiA8c2hhcnV6emFtYW5AbXlyZWFsYm94LmNvbT4sIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBiaXNvbiAyLjQuMVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBidWctYmlzb25AZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEyLTEyLTEyIDE2OjA5KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA5LTAxLTEzIDAwOjM1KzA4MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFNoYXJ1enphbWFuIEFobWF0IFJhc2xhbiA8c2hhcnV6emFtYW5AbXlyZWFsYm94LmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBNYWxheSA8dHJhbnNsYXRpb24tdGVhbS1tc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCisiTGFuZ3VhZ2U6IG1zXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0xOyBwbHVyYWw9MDtcbiIKKyJYLUdlbmVyYXRvcjogS0JhYmVsIDAuOS41XG4iCisKKyM6IHNyYy9jb21wbGFpbi5jOjEyMCBzcmMvY29tcGxhaW4uYzoxMzEgc3JjL2NvbXBsYWluLmM6MTQwIHNyYy9jb21wbGFpbi5jOjE4OAorIzogc3JjL2NvbXBsYWluLmM6MTk4Cittc2dpZCAid2FybmluZyIKK21zZ3N0ciAiYW1hcmFuIgorCisjOiBzcmMvY29tcGxhaW4uYzoxNTEgc3JjL2NvbXBsYWluLmM6MTYwIHNyYy9jb21wbGFpbi5jOjE2NworIywgZnV6enkKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiUmFsYXQgSS9PIgorCisjOiBzcmMvY29tcGxhaW4uYzoyMDggc3JjL2NvbXBsYWluLmM6MjE1Cittc2dpZCAiZmF0YWwgZXJyb3IiCittc2dzdHIgInJhbGF0IG1hdXQiCisKKyM6IHNyYy9jb25mbGljdHMuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyBzaGlmdCIKK21zZ3N0ciAiICAgIEtvbmZsaWsgYW50YXJhIGh1a3VtICVkIGRhbiB0b2tlbiAlcyBkaXNlbGVzYWlrYW4gc2ViYWdhaSBwaW5kYWhhbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIHJlZHVjZSIKK21zZ3N0ciAiIgorIiAgICBLb25mbGlrIGFudGFyYSBodWt1bSAlZCBkYW4gdG9rZW4gJXMgZGlzZWxlc2Fpa2FuIHNlYmFnYWkgcGVuZ3VyYW5nYW4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyBhbiBlcnJvciIKK21zZ3N0ciAiICAgIEtvbmZsaWsgYW50YXJhIGh1a3VtICVkIGRhbiB0b2tlbiAlcyBkaXNlbGVzYWlrYW4gc2ViYWdhaSByYWxhdCIKKworIzogc3JjL2NvbmZsaWN0cy5jOjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdHM6ICVkIHNoaWZ0L3JlZHVjZSwgJWQgcmVkdWNlL3JlZHVjZVxuIgorbXNnc3RyICJrb25mbGlrOiAlZCBwZW1pbmRhaGFuL3Blbmd1cmFuZ2FuLCAlZCBwZW5ndXJhbmdhbi9wZW5ndXJhbmdhblxuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgc2hpZnQvcmVkdWNlXG4iCittc2dzdHIgImtvbmZsaWs6ICVkIHBlbWluZGFoYW4vcGVuZ3VyYW5nYW5cbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdHM6ICVkIHJlZHVjZS9yZWR1Y2VcbiIKK21zZ3N0ciAia29uZmxpazogJWQgcGVuZ3VyYW5nYW4vcGVuZ3VyYW5nYW5cbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdGF0ZSAlZCAiCittc2dzdHIgIktlYWRhYW4gJWQgIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlZXhwZWN0LXJyIGFwcGxpZXMgb25seSB0byBHTFIgcGFyc2VycyIKK21zZ3N0ciAiJSVleHBlY3QtcnIgaGFueWEgYmVya2VzYW4ga2VwYWRhIHBhcnNlciBHTFIiCisKKyM6IHNyYy9jb25mbGljdHMuYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJleHBlY3RlZCAlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIgorbXNnc3RyWzBdICJqYW5na2FhbiAlZCBrb25mbGlrIHBlbWluZGFoYW4vcGVuZ3VyYW5nYW4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo2MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJWQgcmVkdWNlL3JlZHVjZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiZXhwZWN0ZWQgJWQgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMiCittc2dzdHJbMF0gImRpamFuZ2tha2FuICVkIHBlbmd1cmFuZ2FuL3Blbmd1cmFuZ2FuIGtvbmZsaWsiCisKKyM6IHNyYy9maWxlcy5jOjExNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBvcGVuIgorbXNnc3RyICJ0aWRhayBkYXBhdCBtZW1idWthIGZhaWwgYCVzJyIKKworIzogc3JjL2ZpbGVzLmM6MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImlucHV0L291dHB1dCBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBzcmMvZmlsZXMuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNsb3NlIGZpbGUiCittc2dzdHIgInRpZGFrIGRhcGF0IG1lbnV0dXAgZmFpbCIKKworIzogc3JjL2ZpbGVzLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIG92ZXJ3cml0ZSB0aGUgaW5wdXQgZmlsZSAlcyIKK21zZ3N0ciAiZW5nZ2FuIHVudHVrIG1lbnVsaXNnYW50aSBmYWlsIG1hc3VrYW4gJXMiCisKKyM6IHNyYy9maWxlcy5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdGluZyBvdXRwdXRzIHRvIGZpbGUgJXMiCittc2dzdHIgImtlbHVhcmFuIGJlcmtvbmZsaWsga2VwYWRhIGZhaWwgJXMiCisKKyM6IHNyYy9nZXRhcmdzLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeSBgJXMgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKK21zZ3N0ciAiQ3ViYSBgJXMgLS1oZWxwJyB1bnR1ayBsZWJpaCBtYWtsdW1hdC5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFtPUFRJT05dLi4uIEZJTEVcbiIKK21zZ3N0ciAiUGVuZ2d1bmFhbjogJXMgW1BJTElIQU5dLi4uIEZBSUxcbiIKKworIzogc3JjL2dldGFyZ3MuYzozMDIKK21zZ2lkICIiCisiR2VuZXJhdGUgYSBkZXRlcm1pbmlzdGljIExSIG9yIGdlbmVyYWxpemVkIExSIChHTFIpIHBhcnNlciBlbXBsb3lpbmdcbiIKKyJMQUxSKDEpLCBJRUxSKDEpLCBvciBjYW5vbmljYWwgTFIoMSkgcGFyc2VyIHRhYmxlcy4gIElFTFIoMSkgYW5kXG4iCisiY2Fub25pY2FsIExSKDEpIHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6MzA5Cittc2dpZCAiIgorIk1hbmRhdG9yeSBhcmd1bWVudHMgdG8gbG9uZyBvcHRpb25zIGFyZSBtYW5kYXRvcnkgZm9yIHNob3J0IG9wdGlvbnMgdG9vLlxuIgorbXNnc3RyICIiCisiSHVqYWggd2FqaWIga2VwYWRhIHBpbGloYW4gcGFuamFuZyBhZGFsYWggd2FqaWIgdW50dWsgcGlsaWhhbiBwZW5kZWsganVnYS5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozMTIKK21zZ2lkICJUaGUgc2FtZSBpcyB0cnVlIGZvciBvcHRpb25hbCBhcmd1bWVudHMuXG4iCittc2dzdHIgIlBlcmthcmEgeWFuZyBzYW1hIGJhZ2kgaHVqYWggcGlsaWhhbi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozMTYKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIk9wZXJhdGlvbiBtb2RlczpcbiIKKyIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCisiICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorIiAgICAgIC0tcHJpbnQtbG9jYWxlZGlyICAgICAgb3V0cHV0IGRpcmVjdG9yeSBjb250YWluaW5nIGxvY2FsZS1kZXBlbmRlbnQgIgorImRhdGFcbiIKKyIgICAgICAtLXByaW50LWRhdGFkaXIgICAgICAgIG91dHB1dCBkaXJlY3RvcnkgY29udGFpbmluZyBza2VsZXRvbnMgYW5kIFhTTFRcbiIKKyIgIC15LCAtLXlhY2MgICAgICAgICAgICAgICAgIGVtdWxhdGUgUE9TSVggWWFjY1xuIgorIiAgLVcsIC0td2FybmluZ3NbPUNBVEVHT1JZXSAgcmVwb3J0IHRoZSB3YXJuaW5ncyBmYWxsaW5nIGluIENBVEVHT1JZXG4iCisiICAtZiwgLS1mZWF0dXJlWz1GRUFUVVJFXSAgICBhY3RpdmF0ZSBtaXNjZWxsYW5lb3VzIGZlYXR1cmVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJNb2Qgb3BlcmFzaTpcbiIKKyIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIHBhcGFyIGJhbnR1YW4gaW5pIGRhbiBrZWx1YXJcbiIKKyIgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgIGtlbHVhcmthbiBtYWtsdW1hdCB2ZXJzaSBkYW4ga2VsdWFyXG4iCisiICAgICAgLS1wcmludC1sb2NhbGVkaXIgICAgICBrZWx1YXJrYW4gZGlyZWt0b3JpIG1lbmdhbmR1bmdpIGRhdGEgYmVyZ2FudHVuZyAiCisibG9jYWxlXG4iCisiICAgICAgLS1wcmludC1kYXRhZGlyICAgICAgICBrZWx1YXJrYW4gZGlyZWt0b3JpIG1lbmdhbmR1bmdpIHJhbmdrYSBkYW4gIgorIlhTTFRcbiIKKyIgIC15LCAtLXlhY2MgICAgICAgICAgICAgICAgIHRpcnUgUE9TSVggeWFjY1xuIgorIiAgLVcsIC0td2FybmluZ3M9W0tBVEVHT1JJXSAgbGFwb3IgYW1hcmFuIHlhbmcgYmVyYWRhIGRhbGFtIEtBVEVHT1JJXG4iCisiXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFyc2VyOlxuIgorIiAgLUwsIC0tbGFuZ3VhZ2U9TEFOR1VBR0UgICAgICAgICAgc3BlY2lmeSB0aGUgb3V0cHV0IHByb2dyYW1taW5nIGxhbmd1YWdlXG4iCisiICAtUywgLS1za2VsZXRvbj1GSUxFICAgICAgICAgICAgICBzcGVjaWZ5IHRoZSBza2VsZXRvbiB0byB1c2VcbiIKKyIgIC10LCAtLWRlYnVnICAgICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnQgdGhlIHBhcnNlciBmb3IgZGVidWdnaW5nXG4iCisiICAgICAgLS1sb2NhdGlvbnMgICAgICAgICAgICAgICAgICBlbmFibGUgbG9jYXRpb24gc3VwcG9ydFxuIgorIiAgLUQsIC0tZGVmaW5lPU5BTUVbPVZBTFVFXSAgICAgICAgc2ltaWxhciB0byAnJWRlZmluZSBOQU1FIFwiVkFMVUVcIidcbiIKKyIgIC1GLCAtLWZvcmNlLWRlZmluZT1OQU1FWz1WQUxVRV0gIG92ZXJyaWRlICclZGVmaW5lIE5BTUUgXCJWQUxVRVwiJ1xuIgorIiAgLXAsIC0tbmFtZS1wcmVmaXg9UFJFRklYICAgICAgICAgcHJlcGVuZCBQUkVGSVggdG8gdGhlIGV4dGVybmFsIHN5bWJvbHNcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQgYnkgJy1EYXBpLnByZWZpeD1QUkVGSVgnXG4iCisiICAtbCwgLS1uby1saW5lcyAgICAgICAgICAgICAgICAgICBkb24ndCBnZW5lcmF0ZSAnI2xpbmUnIGRpcmVjdGl2ZXNcbiIKKyIgIC1rLCAtLXRva2VuLXRhYmxlICAgICAgICAgICAgICAgIGluY2x1ZGUgYSB0YWJsZSBvZiB0b2tlbiBuYW1lc1xuIgorbXNnc3RyICIiCisiUGVuZ2h1cmFpOlxuIgorIiAgLUwsIC0tbGFuZ3VhZ2U9QkFIQVNBICAgICAgbnlhdGFrYW4gYmFoYXNhIHBlbmdhdHVyY2FyYWFuIGtlbHVhcmFuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5pIGFkYWxhaCBjaXJpIHVqaWthamkpXG4iCisiICAtUywgLS1za2VsZXRvbj1GQUlMICAgICAgICBueWF0YWthbiByYW5na2EgdW50dWsgZGlndW5ha2FuXG4iCisiICAtdCwgLS1kZWJ1ZyAgICAgICAgICAgICAgICBwZXJhbGF0YW4gcGFyc2VyIHVudHVrIG55YWhwZXBpamF0XG4iCisiICAgICAgLS1sb2NhdGlvbnMgICAgICAgICAgICBoaWR1cGthbiBwZW5naXJhYW4gbG9rYXNpXG4iCisiICAtcCwgLS1uYW1lLXByZWZpeD1BV0FMQU4gICB0YW1iYWggQVdBTEFOIGtlcGFkYSBzaW1ib2wgbHVhcmFuXG4iCisiICAtbCwgLS1uby1saW5lcyAgICAgICAgICAgICBqYW5nYW4gamFuYSBhcmFoYW4gYCNsaW5lJ1xuIgorIiAgLWssIC0tdG9rZW4tdGFibGUgICAgICAgICAgc2VydGFrYW4gamFkdWFsIG5hbWEgdG9rZW5cbiIKKyJcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNDYKKyMsIGZ1enp5Cittc2dpZCAiIgorIk91dHB1dDpcbiIKKyIgICAgICAtLWRlZmluZXNbPUZJTEVdICAgICAgIGFsc28gcHJvZHVjZSBhIGhlYWRlciBmaWxlXG4iCisiICAtZCAgICAgICAgICAgICAgICAgICAgICAgICBsaWtld2lzZSBidXQgY2Fubm90IHNwZWNpZnkgRklMRSAoZm9yIFBPU0lYICIKKyJZYWNjKVxuIgorIiAgLXIsIC0tcmVwb3J0PVRISU5HUyAgICAgICAgYWxzbyBwcm9kdWNlIGRldGFpbHMgb24gdGhlIGF1dG9tYXRvblxuIgorIiAgICAgIC0tcmVwb3J0LWZpbGU9RklMRSAgICAgd3JpdGUgcmVwb3J0IHRvIEZJTEVcbiIKKyIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIHNhbWUgYXMgYC0tcmVwb3J0PXN0YXRlJ1xuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg9UFJFRklYICAgc3BlY2lmeSBhIFBSRUZJWCBmb3Igb3V0cHV0IGZpbGVzXG4iCisiICAtbywgLS1vdXRwdXQ9RklMRSAgICAgICAgICBsZWF2ZSBvdXRwdXQgdG8gRklMRVxuIgorIiAgLWcsIC0tZ3JhcGhbPUZJTEVdICAgICAgICAgYWxzbyBvdXRwdXQgYSBncmFwaCBvZiB0aGUgYXV0b21hdG9uXG4iCisiICAteCwgLS14bWxbPUZJTEVdICAgICAgICAgICBhbHNvIG91dHB1dCBhbiBYTUwgcmVwb3J0IG9mIHRoZSBhdXRvbWF0b25cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGUgWE1MIHNjaGVtYSBpcyBleHBlcmltZW50YWwpXG4iCittc2dzdHIgIiIKKyJLZWx1YXJhbjpcbiIKKyIgICAgICAtLWRlZmluZXNbPUZBSUxdICAgICAgIGp1Z2EgaGFzaWxrYW4gZmFpbCBwZW5nZXBhbGFcbiIKKyIgIC1kLCAgICAgICAgICAgICAgICAgICAgICAgIHNhbWEganVnYSB0ZXRhcGkgdGlkYWsgYm9sZWggbWVueWF0YWthbiBGQUlMICIKKyIodW50dWsgWWFjYyBQT1NJWClcbiIKKyIgIC1yLCAtLXJlcG9ydD1QRVJLQVJBICAgICAgIGp1Z2EgaGFzaWxrYW4gYnV0aXIgdGVycGVyaW5jaSBiYWdpIGF1dG9tYXRvblxuIgorIiAgICAgIC0tcmVwb3J0LWZpbGU9RkFJTCAgICAgdHVsaXMgbGFwb3JhbiBrZSBGQUlMXG4iCisiICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgICBzYW1hIHNlcGVydGkgYC0tcmVwb3J0PXN0YXRlJ1xuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg9QVdBTEFOICAgbnlhdGFrYW4gQVdBTEFOIHVudHVrIGZhaWwga2VsdWFyYW5cbiIKKyIgIC1vLCAtLW91dHB1dD1GQUlMICAgICAgICAgIGJpYXJrYW4ga2VsdWFyYW4ga2VwYWRhIEZBSUxcbiIKKyIgIC1nLCAtLWdyYXBoICAgICAgICAgICAgICAgIGp1Z2EgaGFzaWxrYW4gZ3JhZiBiYWdpIGF1dG9tYXRvblxuIgorIiAgLXgsIC0teG1sWz1GQUlMXSAgICAgICAgICAganVnYSBoYXNpbGthbiBsYXBvcmFuIFhNTCBiYWdpIGF1dG9tYXRvblxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNrZW1hIFhNTCBhZGFsYWggbWFzaWggdGFoYXAga2FqaWFuKVxuIgorIlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM2MQorIywgZnV6enkKK21zZ2lkICIiCisiV2FybmluZyBjYXRlZ29yaWVzIGluY2x1ZGU6XG4iCisiICBgbWlkcnVsZS12YWx1ZXMnICB1bnNldCBvciB1bnVzZWQgbWlkcnVsZSB2YWx1ZXNcbiIKKyIgIGB5YWNjJyAgICAgICAgICAgIGluY29tcGF0aWJpbGl0aWVzIHdpdGggUE9TSVggWWFjY1xuIgorIiAgYGNvbmZsaWN0cy1zcicgICAgUy9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGNvbmZsaWN0cy1ycicgICAgUi9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGRlcHJlY2F0ZWQnICAgICAgb2Jzb2xldGUgY29uc3RydWN0c1xuIgorIiAgYG90aGVyJyAgICAgICAgICAgYWxsIG90aGVyIHdhcm5pbmdzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgYWxsJyAgICAgICAgICAgICBhbGwgdGhlIHdhcm5pbmdzXG4iCisiICBgbm8tQ0FURUdPUlknICAgICB0dXJuIG9mZiB3YXJuaW5ncyBpbiBDQVRFR09SWVxuIgorIiAgYG5vbmUnICAgICAgICAgICAgdHVybiBvZmYgYWxsIHRoZSB3YXJuaW5nc1xuIgorIiAgYGVycm9yJyAgICAgICAgICAgdHJlYXQgd2FybmluZ3MgYXMgZXJyb3JzXG4iCittc2dzdHIgIiIKKyJLYXRlZ29yaSBhbWFyYW4gdGVybWFzdWs6XG4iCisiICBgbWlkcnVsZS12YWx1ZXMnICBuaWxhaSBodWt1bXRlbmdhaCBueWFodGV0YXAgYXRhdSB0aWRhayBkaWd1bmFrYW5cbiIKKyIgIGB5YWNjJyAgICAgICAgICAgIHRpZGFrIHNlcmFzaSBkZW5nYW4gUE9TSVggWUFDQ1xuIgorIiAgYGFsbCcgICAgICAgICAgICAgc2VtdWEgYW1hcmFuXG4iCisiICBgbm8tQ0FURUdPUlknICAgICBtYXRpa2FuIGFtYXJhbiBkYWxhbSBDQVRFR09SWVxuIgorIiAgYG5vbmUnICAgICAgICAgICAgbWF0aWthbiBzZW11YSBhbWFyYW5cbiIKKyIgIGBlcnJvcicgICAgICAgICAgIGphZGlrYW4gYW1hcmFuIHNlYmFnYWkgcmFsYXRcbiIKKyJcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNzYKK21zZ2lkICIiCisiVEhJTkdTIGlzIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMgdGhhdCBjYW4gaW5jbHVkZTpcbiIKKyIgIGBzdGF0ZScgICAgICAgIGRlc2NyaWJlIHRoZSBzdGF0ZXNcbiIKKyIgIGBpdGVtc2V0JyAgICAgIGNvbXBsZXRlIHRoZSBjb3JlIGl0ZW0gc2V0cyB3aXRoIHRoZWlyIGNsb3N1cmVcbiIKKyIgIGBsb29rYWhlYWQnICAgIGV4cGxpY2l0bHkgYXNzb2NpYXRlIGxvb2thaGVhZCB0b2tlbnMgdG8gaXRlbXNcbiIKKyIgIGBzb2x2ZWQnICAgICAgIGRlc2NyaWJlIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMgc29sdmluZ1xuIgorIiAgYGFsbCcgICAgICAgICAgaW5jbHVkZSBhbGwgdGhlIGFib3ZlIGluZm9ybWF0aW9uXG4iCisiICBgbm9uZScgICAgICAgICBkaXNhYmxlIHRoZSByZXBvcnRcbiIKK21zZ3N0ciAiIgorIlBFUktBUkEgYWRhbGFoIHNlbmFyYWkgcGVya2F0YWFuIGRpcGlzYWgga29tYSB5YW5nIGJvbGVoIHRlcm1hc3VrOlxuIgorIiAgYHN0YXRlJyAgICAgICAgbnlhdGFrYW4ga2VhZGFhblxuIgorIiAgYGl0ZW1zZXQnICAgICAgbGVuZ2thcGthbiBzZXQgcGVya2FyYSBhc2FzIGRlbmdhbiBwZW51dHVwbnlhXG4iCisiICBgbG9va2FoZWFkJyAgICBkZW5nYW4gamVsYXMga2FpdGthbiB0b2tlbiBsb29rYWhlYWQga2VwYWRhIHBlcmthcmFcbiIKKyIgIGBzb2x2ZWQnICAgICAgIG55YXRha2FuIHBlbnllbGVzYWlhbiBrb25mbGlrIHBlbWluZGFoYW4vcGVuZ3VyYW5nYW5cbiIKKyIgIGBhbGwnICAgICAgICAgIG1hc3Vra2FuIHNlbXVhIG1ha2x1bWF0IGRpYXRhc1xuIgorIiAgYG5vbmUnICAgICAgICAgbWF0aWthbiBsYXBvcmFuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzg3Cittc2dpZCAiIgorIkZFQVRVUkUgaXMgYSBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCB3b3JkcyB0aGF0IGNhbiBpbmNsdWRlOlxuIgorIiAgYGNhcmV0JyAgICAgICAgc2hvdyBlcnJvcnMgd2l0aCBjYXJldHNcbiIKKyIgIGBhbGwnICAgICAgICAgIGFsbCBvZiB0aGUgYWJvdmVcbiIKKyIgIGBub25lJyAgICAgICAgIGRpc2FibGUgYWxsIG9mIHRoZSBhYm92ZVxuIgorIiAgIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorbXNnc3RyICIiCisiXG4iCisiTGFwb3IgcGVwaWphdCBrZSA8JXM+LlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBob21lIHBhZ2U6IDwlcz4uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozOTcKK21zZ2lkICJHZW5lcmFsIGhlbHAgdXNpbmcgR05VIHNvZnR3YXJlOiA8aHR0cDovL3d3dy5nbnUub3JnL2dldGhlbHAvPi5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogUmVwbGFjZSBMQU5HX0NPREUgaW4gdGhpcyBVUkwgd2l0aCB5b3VyIGxhbmd1YWdlCisjLiBjb2RlIDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtL0xBTkdfQ09ERS5odG1sPiB0bworIy4gZm9ybSBvbmUgb2YgdGhlIFVSTHMgYXQgaHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS8uCisjLiBPdGhlcndpc2UsIHJlcGxhY2UgdGhlIGVudGlyZSBVUkwgd2l0aCB5b3VyIHRyYW5zbGF0aW9uIHRlYW0ncworIy4gZW1haWwgYWRkcmVzcy4KKyM6IHNyYy9nZXRhcmdzLmM6NDEwCittc2dpZCAiUmVwb3J0IHRyYW5zbGF0aW9uIGJ1Z3MgdG8gPGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vPi5cbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjQxMgorbXNnaWQgIkZvciBjb21wbGV0ZSBkb2N1bWVudGF0aW9uLCBydW46IGluZm8gYmlzb24uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmlzb24gKEdOVSBCaXNvbikgJXMiCittc2dzdHIgImJpc29uIChHTlUgQmlzb24pICVzIgorCisjOiBzcmMvZ2V0YXJncy5jOjQzMAorbXNnaWQgIldyaXR0ZW4gYnkgUm9iZXJ0IENvcmJldHQgYW5kIFJpY2hhcmQgU3RhbGxtYW4uXG4iCittc2dzdHIgIkRpdHVsaXMgb2xlaCBSb2JlcnQgQ29yYmV0dCBkYW4gUmljaGFyZCBTdGFsbG1hbi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29weXJpZ2h0IChDKSAlZCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKK21zZ3N0ciAiSGFrY2lwdGEgKEMpICVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQzNworbXNnaWQgIiIKKyJUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOT1xuIgorIndhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLlxuIgorbXNnc3RyICIiCisiSW5pIGFkYWxhaCBwZXJpc2lhbiBiZWJhczsgbGloYXQgc3VtYmVyIHVudHVrIHN5YXJhdCBtZW55YWxpbi4gIFRJQURBXG4iCisiamFtaW5hbiBkaXNlZGlha2FuOyB0aWRhayBqdWdhIHVudHVrIEtFQk9MRUhEQUdBTkdBTiBhdGF1IEtFVVBBWUFBTiBVTlRVSyAiCisiU0VTVUFUVSBUVUpVQU4gS0hVU1VTLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSBza2VsZXRvbiBkZWNsYXJhdGlvbnMgYXJlIGludmFsaWQiCittc2dzdHIgInBlbGJhZ2FpIHJhbmdrYSBwZW5naXN5dGloYXJhbiB0aWRhayBzYWgiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBsYW5ndWFnZSIKK21zZ3N0ciAiYmFoYXNhIGAlcycgdGlkYWsgc2FoIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ3OQorbXNnaWQgIm11bHRpcGxlIGxhbmd1YWdlIGRlY2xhcmF0aW9ucyBhcmUgaW52YWxpZCIKK21zZ3N0ciAicGVsYmFnYWkgcGVuZ2lzeXRpaGFyYW4gYmFoYXNhIGFkYWxhaCB0aWRhayBzYWgiCisKKyM6IHNyYy9nZXRhcmdzLmM6NzQ3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogbWlzc2luZyBvcGVyYW5kIgorbXNnc3RyICJvcGVyYW4gaGlsYW5nIHNlbGVwYXMgYCVzJyIKKworIzogc3JjL2dldGFyZ3MuYzo3NDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImV4dHJhIG9wZXJhbmQgJXMiCittc2dzdHIgIm9wZXJhbiB0YW1iYWhhbiBgJXMnIgorCisjOiBzcmMvZ3JhbS5jOjExMgorbXNnaWQgImVtcHR5IgorbXNnc3RyICJrb3NvbmciCisKKyM6IHNyYy9ncmFtLmM6MjAxCittc2dpZCAiR3JhbW1hciIKK21zZ3N0ciAiVGF0YWJhaGFzYSIKKworIzogc3JjL2dyYXBodml6LmM6NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIi8vIEdlbmVyYXRlZCBieSAlcy5cbiIKKyIvLyBSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorIi8vIEhvbWUgcGFnZTogPCVzPi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvbG9jYXRpb24uYzo5MyBzcmMvc2Nhbi1ncmFtLmw6ODU5CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgbnVtYmVyIG92ZXJmbG93IgorbXNnc3RyICJub21ib3IgYmFyaXMgbWVsaW1wYWgiCisKKyM6IHNyYy9sb2NhdGlvbi5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbHVtbiBudW1iZXIgb3ZlcmZsb3ciCittc2dzdHIgIm5vbWJvciBsYWp1ciBtZWxpbXBhaCIKKworIzogc3JjL21haW4uYzoxNDYKK21zZ2lkICJydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHMiCittc2dzdHIgImh1a3VtIHRpZGFrIGRpZ3VuYWthbiBrZXJhbmEga29uZmxpayIKKworIzogc3JjL211c2NsZS10YWIuYzo0NTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiUlZGVmaW5lIHZhcmlhYmxlICVzIHJlZGVmaW5lZCIKK21zZ3N0ciAic2ltYm9sICVzIGRpdGFrcmlmIHNlbXVsYSIKKworIzogc3JjL211c2NsZS10YWIuYzo0NTMKKyMsIGZ1enp5Cittc2dpZCAicHJldmlvdXMgZGVmaW5pdGlvbiIKK21zZ3N0ciAicGVuZ2lzeXRpaGFyYW4gdGVyZGFodWx1IgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ5MCBzcmMvbXVzY2xlLXRhYi5jOjUwNCBzcmMvbXVzY2xlLXRhYi5jOjU1NgorIzogc3JjL211c2NsZS10YWIuYzo2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVuZGVmaW5lZCAlJWRlZmluZSB2YXJpYWJsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlJWRlZmluZSBCb29sZWFuIHZhcmlhYmxlICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjA5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICUlZGVmaW5lIHZhcmlhYmxlICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjYxMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYWNjZXB0ZWQgdmFsdWU6ICVzIgorbXNnc3RyICJuaWxhaSB0aWRhayBkaWd1bmFrYW46ICQlZCIKKworIzogc3JjL3BhcnNlLWdyYW0ueTo3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBpZGVudGlmaWVyIGluIHBhcmFtZXRlciBkZWNsYXJhdGlvbiIKK21zZ3N0ciAicGVuZ2VjYW0gaGlsYW5nIGRhbGFtIHBhcmFtZXRlciBwZW5naXN5dGloYXJhbiIKKworIzogc3JjL3ByaW50LmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIHR5cGUgJWQgaXMgJXNcbiIKK21zZ3N0ciAiIGplbmlzICVkIGFkYWxhaCAlc1xuIgorCisjOiBzcmMvcHJpbnQuYzoxNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAlZFxuIgorbXNnc3RyICJwaW5kYWgsIGRhbiBwZXJnaSBrZSBrZWFkYWFuICVkXG4iCisKKyM6IHNyYy9wcmludC5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJnbyB0byBzdGF0ZSAlZFxuIgorbXNnc3RyICJwZXJnaSBrZSBrZWFkYWFuICVkXG4iCisKKyM6IHNyYy9wcmludC5jOjIwMworbXNnaWQgImVycm9yIChub25hc3NvY2lhdGl2ZSlcbiIKK21zZ3N0ciAicmFsYXQgKHRpZGFrIGJlcmdhYnVuZylcbiIKKworIzogc3JjL3ByaW50LmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZHVjZSB1c2luZyBydWxlICVkICglcykiCittc2dzdHIgImt1cmFuZyBtZW5nZ3VuYWthbiBodWt1bSAlZCAoJXMpIgorCisjOiBzcmMvcHJpbnQuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWNjZXB0IgorbXNnc3RyICJ0ZXJpbWEiCisKKyM6IHNyYy9wcmludC5jOjI2NCBzcmMvcHJpbnQuYzozMzgKK21zZ2lkICIkZGVmYXVsdCIKK21zZ3N0ciAiJGRlZmF1bHQiCisKKyM6IHNyYy9wcmludC5jOjM3MyBzcmMvcHJpbnRfZ3JhcGguYzo3OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU3RhdGUgJWQiCittc2dzdHIgIktlYWRhYW4gJWQgIgorCisjOiBzcmMvcHJpbnQuYzo0MDkKK21zZ2lkICJUZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIiCittc2dzdHIgIlRlcm1pbmFsLCBkZW5nYW4gaHVrdW0gZGltYW5hIG1lcmVrYSBrZWxpaGF0YW4iCisKKyM6IHNyYy9wcmludC5jOjQzNgorbXNnaWQgIk5vbnRlcm1pbmFscywgd2l0aCBydWxlcyB3aGVyZSB0aGV5IGFwcGVhciIKK21zZ3N0ciAiVGlkYWsgdGVybWluYWwsIGRlbmdhbiBodWt1bSBkaW1hbmEgbWVyZWthIGtlbGloYXRhbiIKKworIzogc3JjL3ByaW50LmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiBsZWZ0OiIKK21zZ3N0ciAiIHBhZGEga2lyaToiCisKKyM6IHNyYy9wcmludC5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgb24gcmlnaHQ6IgorbXNnc3RyICIgcGFkYSBrYW5hbjoiCisKKyM6IHNyYy9wcmludC5jOjUxMAorbXNnaWQgIlJ1bGVzIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHMiCittc2dzdHIgIkh1a3VtIHRpZGFrIGRpZ3VuYWthbiBkYWxhbSBwZW5naHVyYWkga2VyYW5hIGtvbmZsaWsiCisKKyM6IHNyYy9yZWFkZXIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSAlcyBkZWNsYXJhdGlvbnMiCittc2dzdHIgInBlbGJhZ2FpIHBlbmdpc3l0aWhhcmFuICVzIgorCisjOiBzcmMvcmVhZGVyLmM6MTMzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJyZXN1bHQgdHlwZSBjbGFzaCBvbiBtZXJnZSBmdW5jdGlvbiAlczogPCVzPiAhPSA8JXM+IgorbXNnc3RyICJqZW5pcyBoYXNpbCBiZXJ0ZWxpbmdrYWggcGFkYSBmdW5nc2kgZ2FidW5nICVzOiA8JXM+ICE9IDwlcz4iCisKKyM6IHNyYy9yZWFkZXIuYzoxMzkgc3JjL3N5bXRhYi5jOjE1NiBzcmMvc3ltdGFiLmM6MTY2IHNyYy9zeW10YWIuYzo5MzgKKyM6IHNyYy9zeW10YWIuYzo5NTMgc3JjL3N5bXRhYi5jOjk2OCBzcmMvc3ltdGFiLmM6OTgzCittc2dpZCAicHJldmlvdXMgZGVjbGFyYXRpb24iCittc2dzdHIgInBlbmdpc3l0aWhhcmFuIHRlcmRhaHVsdSIKKworIzogc3JjL3JlYWRlci5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGVkIHN5bWJvbCBuYW1lIGZvciAlcyBpZ25vcmVkIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzoyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVsZSBnaXZlbiBmb3IgJXMsIHdoaWNoIGlzIGEgdG9rZW4iCittc2dzdHIgImh1a3VtIGRpYmVyaSB1bnR1ayAlcywgZGltYW5hIGlhIGFkYWxhaCB0b2tlbiIKKworIzogc3JjL3JlYWRlci5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ0eXBlIGNsYXNoIG9uIGRlZmF1bHQgYWN0aW9uOiA8JXM+ICE9IDwlcz4iCittc2dzdHIgInBlcnRlbGluZ2thaGFuIGplbmlzIHBhZGEgdGluZGFrYW4gZGVmYXVsdDogPCVzPiAhPSA8JXM+IgorCisjOiBzcmMvcmVhZGVyLmM6MzEwCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IHJ1bGUgZm9yIHR5cGVkIG5vbnRlcm1pbmFsLCBhbmQgbm8gYWN0aW9uIgorbXNnc3RyICJodWt1bSBrb3NvbmcgdW50dWsgYnVrYW4gdGVybWluYWwgZGl0YWlwLCBkYW4gdGlhZGEgdGluZGFrYW4iCisKKyM6IHNyYy9yZWFkZXIuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW51c2VkIHZhbHVlOiAkJWQiCittc2dzdHIgIm5pbGFpIHRpZGFrIGRpZ3VuYWthbjogJCVkIgorCisjOiBzcmMvcmVhZGVyLmM6MzMwCittc2dpZCAidW5zZXQgdmFsdWU6ICQkIgorbXNnc3RyICJueWFodGV0YXAgbmlsYWk6ICQkIgorCisjOiBzcmMvcmVhZGVyLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgInRva2VuIGZvciAlJXByZWMgaXMgbm90IGRlZmluZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzo0MzEgc3JjL3JlYWRlci5jOjQ0NSBzcmMvcmVhZGVyLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgb25lICVzIGFsbG93ZWQgcGVyIHJ1bGUiCittc2dzdHIgImhhbnlhIHNhdHUgJXMgZGliZW5hcmthbiBzZXRpYXAgaHVrdW0iCisKKyM6IHNyYy9yZWFkZXIuYzo0NDEgc3JjL3JlYWRlci5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhZmZlY3RzIG9ubHkgR0xSIHBhcnNlcnMiCittc2dzdHIgIiVzIGhhbnlhIGJlcmtlc2FuIGtlcGFkYSBwYXJzZXIgR0xSIgorCisjOiBzcmMvcmVhZGVyLmM6NDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIG11c3QgYmUgZm9sbG93ZWQgYnkgcG9zaXRpdmUgbnVtYmVyIgorbXNnc3RyICIlcyBtZXN0aSBkaWlrdXRpIGRlbmdhbiBub21ib3IgcG9zaXRpZiIKKworIzogc3JjL3JlYWRlci5jOjU1NAorIywgYy1mb3JtYXQKK21zZ2lkICJydWxlIGlzIHRvbyBsb25nIgorbXNnc3RyICJwZXJhdHVyYW4gdGVybGFsdSBwYW5qYW5nIgorCisjOiBzcmMvcmVhZGVyLmM6NjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJ1bGVzIGluIHRoZSBpbnB1dCBncmFtbWFyIgorbXNnc3RyICJ0aWFkYSBodWt1bSBkYWxhbSBtYXN1a2FuIHRhdGFiYWhhc2EiCisKKyM6IHNyYy9yZWR1Y2UuYzoyNDEKK21zZ2lkICJydWxlIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAiaHVrdW0gdGlkYWsgZGlndW5ha2FuIHRhdGFiYWhhc2EiCisKKyM6IHNyYy9yZWR1Y2UuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiAlcyIKK21zZ3N0ciAiYnVrYW4gdGVybWluYWwgdGlkYWsgYmVyZ3VuYSBkYWxhbSB0YXRhYmFoYXNhOiAlcyIKKworIzogc3JjL3JlZHVjZS5jOjM1MAorbXNnaWQgIk5vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgIkJ1a2FuIHRlcm1pbmFsIHRpZGFrIGRpZ3VuYWthbiBkYWxhbSB0YXRhYmFoYXNhIgorCisjOiBzcmMvcmVkdWNlLmM6MzYzCittc2dpZCAiVGVybWluYWxzIHVudXNlZCBpbiBncmFtbWFyIgorbXNnc3RyICJUZXJtaW5hbCB0aWRhayBkaWd1bmFrYW4gZGFsYW0gdGF0YWJhaGFzYSIKKworIzogc3JjL3JlZHVjZS5jOjM3MgorbXNnaWQgIlJ1bGVzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAiSHVrdW0gdGlkYWsgYmVyZ3VuYSBkYWxhbSB0YXRhYmFoYXNhIgorCisjOiBzcmMvcmVkdWNlLmM6Mzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ2lkX3BsdXJhbCAiJWQgbm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0clswXSAiJWQgYnVrYW4gdGVybWluYWwgdGlkYWsgZGlndW5ha2FuIGRhbGFtIHRhdGFiYWhhc2EiCisKKyM6IHNyYy9yZWR1Y2UuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgcnVsZSB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dpZF9wbHVyYWwgIiVkIHJ1bGVzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0clswXSAiJWQgaHVrdW0gdGlkYWsgZGlndW5ha2FuIGRhbGFtIHRhdGFiYWhhc2EiCisKKyM6IHNyYy9yZWR1Y2UuYzo0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnQgc3ltYm9sICVzIGRvZXMgbm90IGRlcml2ZSBhbnkgc2VudGVuY2UiCittc2dzdHIgInNpbWJvbCBwZXJtdWxhYW4gJXMgdGlkYWsgbWVuZ2hhc2lsa2FuIHNlYmFyYW5nIHBlcmthdGFhbiIKKworIzogc3JjL3NjYW4tY29kZS5sOjE4OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic3RyYXkgJyVzJyIKK21zZ3N0ciAiYCQnIGxpbGF1IgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjI5Cittc2dpZCAiYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjIzMgorbXNnaWQgImZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVzZSBvZiBZWUZBSUwsIHdoaWNoIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDMxIHNyYy9zY2FuLWNvZGUubDo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJzIHRvOiAlYyVzIGF0ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zc2libHkgbWVhbnQ6ICVjIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCBoaWRpbmcgJWMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICIgYXQgJXMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ3MgorIywgYy1mb3JtYXQKK21zZ2lkICIsIGNhbm5vdCBiZSBhY2Nlc3NlZCBmcm9tIG1pZC1ydWxlIGFjdGlvbiBhdCAkJWQiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjUyMSBzcmMvc2Nhbi1ncmFtLmw6NzgzCisjLCBjLWZvcm1hdAorbXNnaWQgImludGVnZXIgb3V0IG9mIHJhbmdlOiAlcyIKK21zZ3N0ciAiaW50ZWdlciBkaWx1YXIganVsYXQ6ICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjEwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZmVyZW5jZTogJXMiCittc2dzdHIgImFyYWhhbiB0aWRhayBzYWg6ICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjE5CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciBhZnRlciAnJWMnLCBleHBlY3RpbmcgaW50ZWdlciwgbGV0dGVyLCAnXycsICdbJywgb3IgJyQnIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uIGJlZm9yZSAkJWQ6ICUuKnMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjYzMworIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246ICUuKnMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNsZWFkaW5nIHJlZmVyZW5jZTogJXMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjY2MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIHJlZmVyZW5jZTogJXMiCittc2dzdHIgImh1amFoIGthYnVyICVzIHVudHVrICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGxpY2l0IHR5cGUgZ2l2ZW4gaW4gdW50eXBlZCBncmFtbWFyIgorbXNnc3RyICJKZW5pcyB0aWRhayB0ZXJzaXJhdCBkaWJlcmlrYW4gZGFsYW0gdGF0YWJhaGFzYSB0YW5wYSBqZW5pcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjc1OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJCQgZm9yIHRoZSBtaWRydWxlIGF0ICQlZCBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiIgorIiQkIHVudHVrIGh1a3VtIHBlcnRlbmdhaGFuIHBhZGEgJCVkIGJhZ2kgYCVzJyB0aWRhayBtZW1wdW55YWkgamVuaXMgIgorImRpbnlhdGFrYW4iCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3NjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiQkIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICIkJCBiYWdpIGAlcycgdGlhZGEgamVuaXMgZGlueWF0YWthbiIKKworIzogc3JjL3NjYW4tY29kZS5sOjc4NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJCVzIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICIkJWQgYmFnaSBgJXMnIHRpYWRhIGplbmlzIGRpbnlhdGFrYW4iCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoxNDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN0cmF5ICcsJyB0cmVhdGVkIGFzIHdoaXRlIHNwYWNlIgorbXNnc3RyICJgLCcgc2VzYXQgZGlhbmdnYXAgc2ViYWdhaSBydWFuZyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRpcmVjdGl2ZTogJXMiCittc2dzdHIgImFyYWhhbiB0aWRhayBzYWg6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MjUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50aWZpZXI6ICVzIgorbXNnc3RyICJhcmFoYW4gdGlkYWsgc2FoOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjI5NQorIywgZnV6enkKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciIKK21zZ2lkX3BsdXJhbCAiaW52YWxpZCBjaGFyYWN0ZXJzIgorbXNnc3RyWzBdICJha3NhcmEgdGlkYWsgc2FoOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGlkZW50aWZpZXIgaW4gYnJhY2tldGVkIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW4gaWRlbnRpZmllciBleHBlY3RlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MzgxCisjLCBmdXp6eQorbXNnaWQgImludmFsaWQgY2hhcmFjdGVyIGluIGJyYWNrZXRlZCBuYW1lIgorbXNnaWRfcGx1cmFsICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gYnJhY2tldGVkIG5hbWUiCittc2dzdHJbMF0gImFrc2FyYSB0aWRhayBzYWg6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NDgxIHNyYy9zY2FuLWdyYW0ubDo1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgY2hhcmFjdGVyIGxpdGVyYWwiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjQ4NiBzcmMvc2Nhbi1ncmFtLmw6NTA3CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dHJhIGNoYXJhY3RlcnMgaW4gY2hhcmFjdGVyIGxpdGVyYWwiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bGwgY2hhcmFjdGVyIgorbXNnc3RyICJha3NhcmEgbnVsbCB0aWRhayBzYWgiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1MzEgc3JjL3NjYW4tZ3JhbS5sOjU0MSBzcmMvc2Nhbi1ncmFtLmw6NTYxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBhZnRlciBcXC1lc2NhcGU6ICVzIgorbXNnc3RyICJha3NhcmEgbnVsbCB0aWRhayBzYWg6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NTczCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciBhZnRlciBcXC1lc2NhcGU6ICVzIgorbXNnc3RyICJha3NhcmEgdGlkYWsgc2FoOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjkwMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyBhdCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiYCVzJyBoaWxhbmcgcGFkYSBwZW5naHVqdW5nIGZhaWwiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo5MTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgJXMgYXQgZW5kIG9mIGxpbmUiCittc2dzdHIgImAlcycgaGlsYW5nIHBhZGEgcGVuZ2h1anVuZyBiYXJpcyIKKworIzogc3JjL3NjYW4tc2tlbC5sOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmNsb3NlZCAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tc2tlbC5sOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gZmV3IGFyZ3VtZW50cyBmb3IgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGZvciAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iCittc2dzdHIgIiIKKworIzogc3JjL3N5bWxpc3QuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAkIHZhbHVlOiAkJWQiCittc2dzdHIgIm5pbGFpICQgdGlkYWsgc2FoOiAkJWQiCisKKyM6IHNyYy9zeW10YWIuYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJQT1NJWCBZYWNjIGZvcmJpZHMgZGFzaGVzIGluIHN5bWJvbCBuYW1lczogJXMiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IHN5bWJvbHMgaW4gaW5wdXQgZ3JhbW1hciAobGltaXQgaXMgJWQpIgorbXNnc3RyICJ0ZXJsYWx1IGJhbnlhayBzaW1ib2wgZGFsYW0gdGF0YWJhaGFzYSBtYXN1a2FuIChoYWQgYWRhbGFoICVkKSIKKworIzogc3JjL3N5bXRhYi5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAiJXMgcGVuZ2lzeXRpaGFyYW4gc2VtdWxhIHVudHVrICVzIgorCisjOiBzcmMvc3ltdGFiLmM6MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlZGVjbGFyYXRpb24gZm9yIDwlcz4iCittc2dzdHIgIiVzIHBlbmdpc3l0aWhhcmFuIHNlbXVsYSB1bnR1ayA8JXM+IgorCisjOiBzcmMvc3ltdGFiLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyByZWRlZmluZWQiCittc2dzdHIgInNpbWJvbCAlcyBkaXRha3JpZiBzZW11bGEiCisKKyM6IHNyYy9zeW10YWIuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHJlZGVjbGFyZWQiCittc2dzdHIgInNpbWJvbCAlcyBkaXRha3JpZiBzZW11bGEiCisKKyM6IHNyYy9zeW10YWIuYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWZpbmluZyB1c2VyIHRva2VuIG51bWJlciBvZiAlcyIKK21zZ3N0ciAibWVudGFrcmlmIHNlbXVsYSBub21ib3IgdG9rZW4gcGVuZ2d1bmEgJXMiCisKKyM6IHNyYy9zeW10YWIuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIGlzIHVzZWQsIGJ1dCBpcyBub3QgZGVmaW5lZCBhcyBhIHRva2VuIGFuZCBoYXMgbm8gcnVsZXMiCittc2dzdHIgIiIKKyJzaW1ib2wgJXMgZGlndW5ha2FuLCB0ZXRhcGkgdGlkYWsgZGl0YWtyaWZrYW4gc2ViYWdhaSB0b2tlbiBhdGF1IG1lbXB1bnlhaSAiCisiaHVrdW0iCisKKyM6IHNyYy9zeW10YWIuYzo0MTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyB1c2VkIG1vcmUgdGhhbiBvbmNlIGFzIGEgbGl0ZXJhbCBzdHJpbmciCittc2dzdHIgInNpbWJvbCBgJXMnIGRpZ3VuYWthbiBsZWJpaCBkYXJpIHNla2FsaSBzZWJhZ2FpIHJlbnRldGFuIHBlcmthdGFhbiIKKworIzogc3JjL3N5bXRhYi5jOjQxOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIGdpdmVuIG1vcmUgdGhhbiBvbmUgbGl0ZXJhbCBzdHJpbmciCittc2dzdHIgInNpbWJvbCBgJXMnIGRpYmVyaWthbiBsZWJpaCBkYXJpcGFkYSBzYXR1IHJlbnRldGFuIHBlcmthdGFhbiIKKworIzogc3JjL3N5bXRhYi5jOjUzNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidXNlciB0b2tlbiBudW1iZXIgJWQgcmVkZWNsYXJhdGlvbiBmb3IgJXMiCittc2dzdHIgIiVzIHBlbmdpc3l0aWhhcmFuIHNlbXVsYSB1bnR1ayAlcyIKKworIzogc3JjL3N5bXRhYi5jOjUzOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicHJldmlvdXMgZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICJwZW5naXN5dGloYXJhbiB0ZXJkYWh1bHUiCisKKyM6IHNyYy9zeW10YWIuYzo5MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHN0YXJ0IHN5bWJvbCAlcyBpcyB1bmRlZmluZWQiCittc2dzdHIgInNpbWJvbCBwZXJtdWxhYW4gJXMgdGlkYWsgZGl0YWtyaWZrYW4iCisKKyM6IHNyYy9zeW10YWIuYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHN0YXJ0IHN5bWJvbCAlcyBpcyBhIHRva2VuIgorbXNnc3RyICJzaW1ib2wgcGVybXVsYWFuICVzIGFkYWxhaCB0b2tlbiIKKworIzogc3JjL3N5bXRhYi5jOjkzNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlJWRlc3RydWN0b3IiCittc2dzdHIgInBlbmdpc3l0aWhhcmFuIHNlbXVsYSB1bnR1ayAlJWRlc3RydWN0b3IgZGl0YWcgZGVmYXVsdCIKKworIzogc3JjL3N5bXRhYi5jOjk1MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJSVkZXN0cnVjdG9yIgorbXNnc3RyICJwZW5naXN5dGloYXJhbiBzZW11bGEgdW50dWsgJSVkZXN0cnVjdG9yIHRhbnBhIHRhZyBkZWZhdWx0IgorCisjOiBzcmMvc3ltdGFiLmM6OTY1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICUlcHJpbnRlciIKK21zZ3N0ciAicGVuZ2lzeXRpaGFyYW4gc2VtdWxhIHVudHVrICUlcHJpbnRlciBkaXRhZyBkZWZhdWx0IgorCisjOiBzcmMvc3ltdGFiLmM6OTgwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnbGVzcyAlJXByaW50ZXIiCittc2dzdHIgInBlbmdpc3l0aWhhcmFuIHNlbXVsYSB1bnR1ayAlJXByaW50ZXIgdGFucGEgdGFnIGRlZmF1bHQiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzo2MyBkamdwcC9zdWJwaXBlLmM6Mjg2IGRqZ3BwL3N1YnBpcGUuYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3Zpbmcgb2YgJyVzJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjg1IGRqZ3BwL3N1YnBpcGUuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGlvbiBvZiBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgInNhdmluZyBzdGRpbiBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJzYXZpbmcgc3Rkb3V0IGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTUzIGRqZ3BwL3N1YnBpcGUuYzoxOTcgZGpncHAvc3VicGlwZS5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nIG9mIHRtcGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgYmlzb24ncyBzdGRvdXQgdG8gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIG00J3Mgc3RkaW4gZnJvbSB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlbmluZyBvZiBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIG00J3Mgc3Rkb3V0IHRvIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSAnJXMnIGludGVycnVwdGVkIgorbXNnc3RyICJwcm9ncmFtIHN1YnNpZGlhcmkgYCVzJyB0aWRhayBkYXBhdCBkaWxha3NhbmFrYW4iCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyNDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAicHJvZ3JhbSBzdWJzaWRpYXJpIGAlcycgdGlkYWsgZGFwYXQgZGlsYWtzYW5ha2FuIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIGJpc29uJ3Mgc3RkaW4gZnJvbSB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGFyZ3VtZW50ICVzIGZvciAlcyIKK21zZ3N0ciAiaHVqYWggdGlkYWsgc2FoICVzIHVudHVrICVzIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIGFyZ3VtZW50ICVzIGZvciAlcyIKK21zZ3N0ciAiaHVqYWgga2FidXIgJXMgdW50dWsgJXMiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjE1MworbXNnaWQgIlZhbGlkIGFyZ3VtZW50cyBhcmU6IgorbXNnc3RyICJIdWphaCB5YW5nIHNhaCBhZGFsYWg6IgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9hbGxvY3MsICV1IGZyZWVkICglLjJmJSUpLlxuIgorbXNnc3RyICIldSBiaXRzZXRfYWxsb2NzLCAldSBkaWJlYmFza2FuICglLjJmJSUpLlxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9zZXRzLCAldSBjYWNoZWQgKCUuMmYlJSlcbiIKK21zZ3N0ciAiJXUgYml0c2V0X3NldHMsICV1IGRpc2ltcGFuICglLjJmJSUpXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3Jlc2V0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF9yZXNldHMsICV1IGRpc2ltcGFuICglLjJmJSUpXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3Rlc3RzLCAldSBjYWNoZWQgKCUuMmYlJSlcbiIKK21zZ3N0ciAiJXUgYml0c2V0X3Rlc3RzLCAldSBkaXNpbXBhbiAoJS4yZiUlKVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9saXN0c1xuIgorbXNnc3RyICIldSBiaXRzZXRfbGlzdHNcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5MgorbXNnaWQgImNvdW50IGxvZyBoaXN0b2dyYW1cbiIKK21zZ3N0ciAia2lyYSBoaXN0b2dyYW0gbG9nXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTUKK21zZ2lkICJzaXplIGxvZyBoaXN0b2dyYW1cbiIKK21zZ3N0ciAic2FpeiBoaXN0b2dyYW0gbG9nXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTgKK21zZ2lkICJkZW5zaXR5IGhpc3RvZ3JhbVxuIgorbXNnc3RyICJoaXN0b2dyYW0ga2VwYWRhdGFuXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJpdHNldCBzdGF0aXN0aWNzOlxuIgorIlxuIgorbXNnc3RyICIiCisiU3RhdGlzdGlrIGJpdHNldDpcbiIKKyJcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJBY2N1bXVsYXRlZCBydW5zID0gJXVcbiIKK21zZ3N0ciAiUGVsYWtzYW5hYW4gdGVya3VtcHVsID0gJXVcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI1OSBsaWIvYml0c2V0X3N0YXRzLmM6MjY0CisjLCBmdXp6eQorbXNnaWQgImNhbm5vdCByZWFkIHN0YXRzIGZpbGUiCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbWJhY2EgZmFpbCBzdGF0cy4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyNjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImJhZCBzdGF0cyBmaWxlIHNpemVcbiIKK21zZ3N0ciAiU2FpeiBmYWlsIHN0YXRzIHRpZGFrIGJldHVsLlxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6Mjg3IGxpYi9iaXRzZXRfc3RhdHMuYzoyODkKKyMsIGZ1enp5Cittc2dpZCAiY2Fubm90IHdyaXRlIHN0YXRzIGZpbGUiCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbnVsaXMgZmFpbCBzdGF0cy4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyOTIKKyMsIGZ1enp5Cittc2dpZCAiY2Fubm90IG9wZW4gc3RhdHMgZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVtYnVrYSBmYWlsIHN0YXRzIHVudHVrIG1lbnVsaXMuIgorCisjOiBsaWIvY2xvc2VvdXQuYzoxMTIKKyMsIGZ1enp5Cittc2dpZCAid3JpdGUgZXJyb3IiCittc2dzdHIgInJhbGF0IG1hdXQiCisKKyM6IGxpYi9lcnJvci5jOjE4OAorbXNnaWQgIlVua25vd24gc3lzdGVtIGVycm9yIgorbXNnc3RyICJSYWxhdCBzaXN0ZW0gdGlkYWsgZGlrZXRhaHVpIgorCisjOiBsaWIvZ2V0b3B0LmM6NTQ3IGxpYi9nZXRvcHQuYzo1NzYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJyVzJyBpcyBhbWJpZ3VvdXM7IHBvc3NpYmlsaXRpZXM6IgorbXNnc3RyICIlczogcGlsaWhhbiBgJXMnIGFkYWxhaCBrYWJ1clxuIgorCisjOiBsaWIvZ2V0b3B0LmM6NjI0IGxpYi9nZXRvcHQuYzo2MjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy0tJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IHBpbGloYW4gYC0tJXMnIHRpZGFrIG1lbmdpemlua2FuIGh1amFoXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo2MzcgbGliL2dldG9wdC5jOjY0MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnJWMlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogcGlsaWhhbiBgJWMlcycgdGlkYWsgbWVuZ2l6aW5rYW4gaHVqYWhcbiIKKworIzogbGliL2dldG9wdC5jOjY4NSBsaWIvZ2V0b3B0LmM6NzA0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctLSVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogcGlsaWhhbiBgJXMnIG1lbWVybHVrYW4gaHVqYWhcbiIKKworIzogbGliL2dldG9wdC5jOjc0MiBsaWIvZ2V0b3B0LmM6NzQ1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiAnLS0lcydcbiIKK21zZ3N0ciAiJXM6IHBpbGloYW4gdGlkYWsgZGlrZW5hbGkgYC0tJXMnXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo3NTMgbGliL2dldG9wdC5jOjc1NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gJyVjJXMnXG4iCittc2dzdHIgIiVzOiBwaWxpaGFuIHRpZGFrIGRpa2VuYWxpICclYyVzJ1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6ODA1IGxpYi9nZXRvcHQuYzo4MDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIG9wdGlvbiAtLSAnJWMnXG4iCittc2dzdHIgIiVzOiBwaWxpaGFuIHRpZGFrIHNhaCAtLSAlY1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6ODYxIGxpYi9nZXRvcHQuYzo4NzggbGliL2dldG9wdC5jOjEwODggbGliL2dldG9wdC5jOjExMDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgLS0gJyVjJ1xuIgorbXNnc3RyICIlczogcGlsaWhhbiBtZW1lcmx1a2FuIGh1amFoIC0tICVjXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo5MzQgbGliL2dldG9wdC5jOjk1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLVcgJXMnIGlzIGFtYmlndW91c1xuIgorbXNnc3RyICIlczogcGlsaWhhbiBgLVcgJXMnIGFkYWxhaCBrYWJ1clxuIgorCisjOiBsaWIvZ2V0b3B0LmM6OTc0IGxpYi9nZXRvcHQuYzo5OTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBwaWxpaGFuIGAtVyAlcycgdGlkYWsgbWVuZ2l6aW5rYW4gaHVqYWhcbiIKKworIzogbGliL2dldG9wdC5jOjEwMTMgbGliL2dldG9wdC5jOjEwMzEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogcGlsaWhhbiBgJXMnIG1lbWVybHVrYW4gaHVqYWhcbiIKKworIzogbGliL29ic3RhY2suYzo0MTMgbGliL29ic3RhY2suYzo0MTUgbGliL3hhbGxvYy1kaWUuYzozNAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgImtlaGFiaXNhbiBtZW1vcmkiCisKKyM6IGxpYi9zcGF3bi1waXBlLmM6MTQwIGxpYi9zcGF3bi1waXBlLmM6MTQzIGxpYi9zcGF3bi1waXBlLmM6MjY0CisjOiBsaWIvc3Bhd24tcGlwZS5jOjI2NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBwaXBlIgorbXNnc3RyICJ0aWRhayBkYXBhdCBtZW51dHVwIGZhaWwiCisKKyM6IGxpYi9zcGF3bi1waXBlLmM6MjM0IGxpYi9zcGF3bi1waXBlLmM6MzQ4IGxpYi93YWl0LXByb2Nlc3MuYzoyODIKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyBmYWlsZWQiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6CisjLiBHZXQgdHJhbnNsYXRpb25zIGZvciBvcGVuIGFuZCBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrcy4KKyMuIFRoZSBtZXNzYWdlIGNhdGFsb2cgc2hvdWxkIHRyYW5zbGF0ZSAiYCIgdG8gYSBsZWZ0CisjLiBxdW90YXRpb24gbWFyayBzdWl0YWJsZSBmb3IgdGhlIGxvY2FsZSwgYW5kIHNpbWlsYXJseSBmb3IKKyMuICInIi4gIEZvciBleGFtcGxlLCBhIEZyZW5jaCBVbmljb2RlIGxvY2FsIHNob3VsZCB0cmFuc2xhdGUKKyMuIHRoZXNlIHRvIFUrMDBBQiAoTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUKKyMuIFFVT1RBVElPTiBNQVJLKSwgYW5kIFUrMDBCQiAoUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFCisjLiBRVU9UQVRJT04gTUFSSyksIHJlc3BlY3RpdmVseS4KKyMuCisjLiBJZiB0aGUgY2F0YWxvZyBoYXMgbm8gdHJhbnNsYXRpb24sIHdlIHdpbGwgdHJ5IHRvCisjLiB1c2UgVW5pY29kZSBVKzIwMTggKExFRlQgU0lOR0xFIFFVT1RBVElPTiBNQVJLKSBhbmQKKyMuIFVuaWNvZGUgVSsyMDE5IChSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspLiAgSWYgdGhlCisjLiBjdXJyZW50IGxvY2FsZSBpcyBub3QgVW5pY29kZSwgbG9jYWxlX3F1b3Rpbmdfc3R5bGUKKyMuIHdpbGwgcXVvdGUgJ2xpa2UgdGhpcycsIGFuZCBjbG9jYWxlX3F1b3Rpbmdfc3R5bGUgd2lsbAorIy4gcXVvdGUgImxpa2UgdGhpcyIuICBZb3Ugc2hvdWxkIGFsd2F5cyBpbmNsdWRlIHRyYW5zbGF0aW9ucworIy4gZm9yICJgIiBhbmQgIiciIGV2ZW4gaWYgVSsyMDE4IGFuZCBVKzIwMTkgYXJlIGFwcHJvcHJpYXRlCisjLiBmb3IgeW91ciBsb2NhbGUuCisjLgorIy4gSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBwdXQgaGVyZSwgcGxlYXNlIHNlZQorIy4gPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUXVvdGF0aW9uX21hcmtzX2luX290aGVyX2xhbmd1YWdlcz4KKyMuIGFuZCB1c2UgZ2x5cGhzIHN1aXRhYmxlIGZvciB5b3VyIGxhbmd1YWdlLgorIzogbGliL3F1b3RlYXJnLmM6MzEyCittc2dpZCAiYCIKK21zZ3N0ciAiYCIKKworIzogbGliL3F1b3RlYXJnLmM6MzEzCittc2dpZCAiJyIKK21zZ3N0ciAiJyIKKworIzogbGliL3RpbWV2YXIuYzo0NzUKK21zZ2lkICIiCisiXG4iCisiRXhlY3V0aW9uIHRpbWVzIChzZWNvbmRzKVxuIgorbXNnc3RyICIiCisiXG4iCisiTWFzYSBwZWxha3NhbmFhbiAoc2FhdClcbiIKKworIzogbGliL3RpbWV2YXIuYzo1MjUKK21zZ2lkICIgVE9UQUwgICAgICAgICAgICAgICAgIDoiCittc2dzdHIgIiBKVU1MQUggICAgICAgICAgICAgICAgIDoiCisKKyM6IGxpYi90aW1ldmFyLmM6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWUgaW4gJXM6ICVsZC4lMDZsZCAoJWxkJSUpXG4iCittc2dzdHIgIm1hc2EgZGFsYW0gJXM6ICVsZC4lMDZsZCAoJWxkJSUpXG4iCisKKyM6IGxpYi93MzJzcGF3bi5oOjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIl9vcGVuX29zZmhhbmRsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogbGliL3czMnNwYXduLmg6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlc3RvcmUgZmQgJWQ6IGR1cDIgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzoyMjMgbGliL3dhaXQtcHJvY2Vzcy5jOjI1NSBsaWIvd2FpdC1wcm9jZXNzLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MiCittc2dzdHIgIiIKKworIzogbGliL3dhaXQtcHJvY2Vzcy5jOjI3NCBsaWIvd2FpdC1wcm9jZXNzLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MgZ290IGZhdGFsIHNpZ25hbCAlZCIKK21zZ3N0ciAiIgorCisjfiBtc2dpZCAic3RhdGUgJWQiCisjfiBtc2dzdHIgImtlYWRhYW4gJWQiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAic3RyYXkgJ0AnIgorI34gbXNnc3RyICJgQCcgbGlsYXUiCisKKyN+IG1zZ2lkICIiCisjfiAiR2VuZXJhdGUgTEFMUigxKSBhbmQgR0xSIHBhcnNlcnMuXG4iCisjfiAiXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJKYW5ha2FuIHBlbmdodXJhaSBMQUxSKDEpIGRhbiBHTFIuXG4iCisjfiAiXG4iCisKKyN+IG1zZ2lkICJpbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZTogJXMiCisjfiBtc2dzdHIgInR1cnV0YW4gZXNjYXBlIHRpZGFrIHNhaDogJXMiCisKKyN+IG1zZ2lkICJ1bnJlY29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlOiAlcyIKKyN+IG1zZ3N0ciAidHVydXRhbiBlc2NhcGUgdGlkYWsgZGlrZW5hbGk6ICVzIgorCisjfiBtc2dpZCAidG9rZW5zICVzIGFuZCAlcyBib3RoIGFzc2lnbmVkIG51bWJlciAlZCIKKyN+IG1zZ3N0ciAidG9rZW4gJXMgZGFuICVzIGtlZHVhLWR1bnlhIGRpYmVyaSBub21ib3IgJWQiCisKKyN+IG1zZ2lkICIlczogaWxsZWdhbCBvcHRpb24gLS0gJWNcbiIKKyN+IG1zZ3N0ciAiJXM6IHBpbGloYW4gc2FsYWggIC0tICVjXG4iCmRpZmYgLS1naXQgYS9wby9uYi5nbW8gYi9wby9uYi5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBiMzlhZAotLS0gL2Rldi9udWxsCisrKyBiL3BvL25iLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9uYi5wbyBiL3BvL25iLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYmVjN2IKLS0tIC9kZXYvbnVsbAorKysgYi9wby9uYi5wbwpAQCAtMCwwICsxLDEyNTUgQEAKKyMgTm9yd2VnaWFuIGJva23lbCB0cmFuc2xhdGlvbiBvZiBHTlUgYmlzb24uCisjIENvcHlyaWdodCAoQykgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIFBBQ0tBR0UgcGFja2FnZS4KKyMgVHJvbmQgRW5kcmVzdPhsIDxUcm9uZC5FbmRyZXN0b2xAZ3RmLm9sLm5vPiwgMjAwNC4KKyMKKyMgU2VuZCB0aGlzIGZpbGUgYXMgYW4gZ3ppcHBlZCBhdHRhY2htZW50IHRvOgorIyB0cmFuc2xhdGlvbkBpcm8udW1vbnRyZWFsLmNhCisjIHdpdGggdGhlIHN1YmplY3Q6CisjIFRQLVJvYm90IFBBQ0tBR0UtVkVSU0lPTi5URUFNLnBvCisjCisjIFRoZSBzdWJqZWN0IGZvciB0aGUgTm9yd2VnaWFuIGJva23lbCB0cmFuc2xhdGlvbiBvZiBHTlUgYmlzb24gMi4wCisjIHdvdWxkIHRoZW4gYmU6CisjIFRQLVJvYm90IGJpc29uLTIuMC5uYi5wbworIworIyBIZXJlJ3MgdGhlIFVSTCBmb3IgdGhlIE5vcndlZ2lhbiB0cmFuc2xhdGlvbiB0ZWFtOgorIyBodHRwOi8vd3d3Mi5pcm8udW1vbnRyZWFsLmNhL35waW5hcmQvcG8vcmVnaXN0cnkuY2dpP3RlYW09bm8KKyMKKyMgSGVyZSdzIHRoZSBVUkwgZm9yIHRoZSBjdXJyZW50IHRyYW5zbGF0aW9ucyBvZiBHTlUgYmlzb246CisjIGh0dHA6Ly93d3cyLmlyby51bW9udHJlYWwuY2EvfnBpbmFyZC9wby9yZWdpc3RyeS5jZ2k/ZG9tYWluPWJpc29uCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBiaXNvbiAyLjBcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLWJpc29uQGdudS5vcmdcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMi0xMi0xMiAxNjowOSswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwNS0wMy0wMSAxMDowNiswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBUcm9uZCBFbmRyZXN0+GwgPFRyb25kLkVuZHJlc3RvbEBndGYub2wubm8+XG4iCisiTGFuZ3VhZ2UtVGVhbTogTm9yd2VnaWFuIEJva21hYWwgPGkxOG4tbmJAbGlzdGVyLnBpbmcudWlvLm5vPlxuIgorIkxhbmd1YWdlOiBuYlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTFcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IHNyYy9jb21wbGFpbi5jOjEyMCBzcmMvY29tcGxhaW4uYzoxMzEgc3JjL2NvbXBsYWluLmM6MTQwIHNyYy9jb21wbGFpbi5jOjE4OAorIzogc3JjL2NvbXBsYWluLmM6MTk4Cittc2dpZCAid2FybmluZyIKK21zZ3N0ciAiYWR2YXJzZWwiCisKKyM6IHNyYy9jb21wbGFpbi5jOjE1MSBzcmMvY29tcGxhaW4uYzoxNjAgc3JjL2NvbXBsYWluLmM6MTY3CisjLCBmdXp6eQorbXNnaWQgImVycm9yIgorbXNnc3RyICJJL08tZmVpbCIKKworIzogc3JjL2NvbXBsYWluLmM6MjA4IHNyYy9jb21wbGFpbi5jOjIxNQorIywgZnV6enkKK21zZ2lkICJmYXRhbCBlcnJvciIKK21zZ3N0ciAiYWx2b3JsaWcgZmVpbDogIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgc2hpZnQiCittc2dzdHIgIiAgICBLb25mbGlrdCBtZWxsb20gcmVnZWwgJWQgb2cgdG9rZW4gJXMgYmxlIGz4c3Qgc29tIHNraWZ0IgorCisjOiBzcmMvY29uZmxpY3RzLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgcmVkdWNlIgorbXNnc3RyICIgICAgS29uZmxpa3QgbWVsbG9tIHJlZ2VsICVkIG9nIHRva2VuICVzIGJsZSBs+HN0IHNvbSByZWR1a3Nqb24iCisKKyM6IHNyYy9jb25mbGljdHMuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyBhbiBlcnJvciIKK21zZ3N0ciAiICAgIEtvbmZsaWt0IG1lbGxvbSByZWdlbCAlZCBvZyB0b2tlbiAlcyBibGUgbPhzdCBzb20gZW4gZmVpbCIKKworIzogc3JjL2NvbmZsaWN0cy5jOjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdHM6ICVkIHNoaWZ0L3JlZHVjZSwgJWQgcmVkdWNlL3JlZHVjZVxuIgorbXNnc3RyICJrb25mbGlrdGVyOiAlZCBza2lmdC9yZWR1a3Nqb24sICVkIHJlZHVrc2pvbi9yZWR1a3Nqb25cbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdHM6ICVkIHNoaWZ0L3JlZHVjZVxuIgorbXNnc3RyICJrb25mbGlrdGVyOiAlZCBza2lmdC9yZWR1a3Nqb25cbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdHM6ICVkIHJlZHVjZS9yZWR1Y2VcbiIKK21zZ3N0ciAia29uZmxpa3RlcjogJWQgcmVkdWtzam9uL3JlZHVrc2pvblxuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YXRlICVkICIKK21zZ3N0ciAiVGlsc3RhbmQgJWQgIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlZXhwZWN0LXJyIGFwcGxpZXMgb25seSB0byBHTFIgcGFyc2VycyIKK21zZ3N0ciAiJSVleHBlY3QtcnIgZ2plbGRlciBiYXJlIGZvciBHTFItcGFyc2VyZSIKKworIzogc3JjL2NvbmZsaWN0cy5jOjYxNgorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCAlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3QiCittc2dpZF9wbHVyYWwgImV4cGVjdGVkICVkIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMiCittc2dzdHJbMF0gImZvcnZlbnRldCAlZCBza2lmdC9yZWR1a3Nqb24ta29uZmxpa3QiCittc2dzdHJbMV0gImZvcnZlbnRldCAlZCBza2lmdC9yZWR1a3Nqb24ta29uZmxpa3RlciIKKworIzogc3JjL2NvbmZsaWN0cy5jOjYyMQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCAlZCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJleHBlY3RlZCAlZCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAiZm9ydmVudGV0ICVkIHJlZHVrc2pvbi9yZWR1a3Nqb24ta29uZmxpa3QiCittc2dzdHJbMV0gImZvcnZlbnRldCAlZCByZWR1a3Nqb24vcmVkdWtzam9uLWtvbmZsaWt0ZXIiCisKKyM6IHNyYy9maWxlcy5jOjExNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBvcGVuIgorbXNnc3RyICJrYW4gaWtrZSDlcG5lIGZpbGVuIKslc7siCisKKyM6IHNyYy9maWxlcy5jOjEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnB1dC9vdXRwdXQgZXJyb3IiCittc2dzdHIgIiIKKworIzogc3JjL2ZpbGVzLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjbG9zZSBmaWxlIgorbXNnc3RyICJrYW4gaWtrZSBsdWtrZSBmaWxlbiIKKworIzogc3JjL2ZpbGVzLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIG92ZXJ3cml0ZSB0aGUgaW5wdXQgZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvZmlsZXMuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3Rpbmcgb3V0cHV0cyB0byBmaWxlICVzIgorbXNnc3RyICJtb3RzdHJpZGVuZGUgb3V0cHV0IHRpbCBmaWxhICVzIgorCisjOiBzcmMvZ2V0YXJncy5jOjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCittc2dzdHIgIlBy+HYgqyVzIC0taGVscLsgZm9yIG1lciBpbmZvcm1hc2pvbi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFtPUFRJT05dLi4uIEZJTEVcbiIKK21zZ3N0ciAiQnJ1a3Nt5XRlOiAlcyBbVkFMR10uLi4gRklMXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzAyCittc2dpZCAiIgorIkdlbmVyYXRlIGEgZGV0ZXJtaW5pc3RpYyBMUiBvciBnZW5lcmFsaXplZCBMUiAoR0xSKSBwYXJzZXIgZW1wbG95aW5nXG4iCisiTEFMUigxKSwgSUVMUigxKSwgb3IgY2Fub25pY2FsIExSKDEpIHBhcnNlciB0YWJsZXMuICBJRUxSKDEpIGFuZFxuIgorImNhbm9uaWNhbCBMUigxKSBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwOQorbXNnaWQgIiIKKyJNYW5kYXRvcnkgYXJndW1lbnRzIHRvIGxvbmcgb3B0aW9ucyBhcmUgbWFuZGF0b3J5IGZvciBzaG9ydCBvcHRpb25zIHRvby5cbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjMxMgorbXNnaWQgIlRoZSBzYW1lIGlzIHRydWUgZm9yIG9wdGlvbmFsIGFyZ3VtZW50cy5cbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjMxNgorbXNnaWQgIiIKKyJcbiIKKyJPcGVyYXRpb24gbW9kZXM6XG4iCisiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIKKyIgICAgICAtLXByaW50LWxvY2FsZWRpciAgICAgIG91dHB1dCBkaXJlY3RvcnkgY29udGFpbmluZyBsb2NhbGUtZGVwZW5kZW50ICIKKyJkYXRhXG4iCisiICAgICAgLS1wcmludC1kYXRhZGlyICAgICAgICBvdXRwdXQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgc2tlbGV0b25zIGFuZCBYU0xUXG4iCisiICAteSwgLS15YWNjICAgICAgICAgICAgICAgICBlbXVsYXRlIFBPU0lYIFlhY2NcbiIKKyIgIC1XLCAtLXdhcm5pbmdzWz1DQVRFR09SWV0gIHJlcG9ydCB0aGUgd2FybmluZ3MgZmFsbGluZyBpbiBDQVRFR09SWVxuIgorIiAgLWYsIC0tZmVhdHVyZVs9RkVBVFVSRV0gICAgYWN0aXZhdGUgbWlzY2VsbGFuZW91cyBmZWF0dXJlc1xuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6MzI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFyc2VyOlxuIgorIiAgLUwsIC0tbGFuZ3VhZ2U9TEFOR1VBR0UgICAgICAgICAgc3BlY2lmeSB0aGUgb3V0cHV0IHByb2dyYW1taW5nIGxhbmd1YWdlXG4iCisiICAtUywgLS1za2VsZXRvbj1GSUxFICAgICAgICAgICAgICBzcGVjaWZ5IHRoZSBza2VsZXRvbiB0byB1c2VcbiIKKyIgIC10LCAtLWRlYnVnICAgICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnQgdGhlIHBhcnNlciBmb3IgZGVidWdnaW5nXG4iCisiICAgICAgLS1sb2NhdGlvbnMgICAgICAgICAgICAgICAgICBlbmFibGUgbG9jYXRpb24gc3VwcG9ydFxuIgorIiAgLUQsIC0tZGVmaW5lPU5BTUVbPVZBTFVFXSAgICAgICAgc2ltaWxhciB0byAnJWRlZmluZSBOQU1FIFwiVkFMVUVcIidcbiIKKyIgIC1GLCAtLWZvcmNlLWRlZmluZT1OQU1FWz1WQUxVRV0gIG92ZXJyaWRlICclZGVmaW5lIE5BTUUgXCJWQUxVRVwiJ1xuIgorIiAgLXAsIC0tbmFtZS1wcmVmaXg9UFJFRklYICAgICAgICAgcHJlcGVuZCBQUkVGSVggdG8gdGhlIGV4dGVybmFsIHN5bWJvbHNcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQgYnkgJy1EYXBpLnByZWZpeD1QUkVGSVgnXG4iCisiICAtbCwgLS1uby1saW5lcyAgICAgICAgICAgICAgICAgICBkb24ndCBnZW5lcmF0ZSAnI2xpbmUnIGRpcmVjdGl2ZXNcbiIKKyIgIC1rLCAtLXRva2VuLXRhYmxlICAgICAgICAgICAgICAgIGluY2x1ZGUgYSB0YWJsZSBvZiB0b2tlbiBuYW1lc1xuIgorbXNnc3RyICIiCisiUGFyc2VyOlxuIgorIiAgLVMsIC0tc2tlbGV0b249RklMICAgICAgICAgYW5naSBza2plbGV0dGV0IHNvbSBza2FsIGJydWtlc1xuIgorIiAgLXQsIC0tZGVidWcgICAgICAgICAgICAgICAgbGVnZ2UgcGFyc2VyZW4gdGlsIHJldHRlIGZvciBkZWJ1Z2dpbmdcbiIKKyIgICAgICAtLWxvY2F0aW9ucyAgICAgICAgICAgIHNs5SBw5SBiZXJlZ25pbmcgYXYgcGxhc3NlcmluZ1xuIgorIiAgLXAsIC0tbmFtZS1wcmVmaXg9UFJFRklLUyAgc2V0dGUgUFJFRklLUyBpIGZvcmthbnQgYXYgbmF2bmVuZSB0aWxcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlIGVrc3Rlcm5lIHN5bWJvbGVuZVxuIgorIiAgLWwsIC0tbm8tbGluZXMgICAgICAgICAgICAgaWtrZSBnZW5lcmVyIKsjbGluZbstZGlyZWt0aXZlclxuIgorIiAgLW4sIC0tbm8tcGFyc2VyICAgICAgICAgICAgYmFyZSBnZW5lcmVyIHRhYmVsbGVuZVxuIgorIiAgLWssIC0tdG9rZW4tdGFibGUgICAgICAgICAgbGVnZyB2ZWQgZW4gdGFiZWxsIG1lZCB0b2tlbm5hdm5lbmVcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNDYKKyMsIGZ1enp5Cittc2dpZCAiIgorIk91dHB1dDpcbiIKKyIgICAgICAtLWRlZmluZXNbPUZJTEVdICAgICAgIGFsc28gcHJvZHVjZSBhIGhlYWRlciBmaWxlXG4iCisiICAtZCAgICAgICAgICAgICAgICAgICAgICAgICBsaWtld2lzZSBidXQgY2Fubm90IHNwZWNpZnkgRklMRSAoZm9yIFBPU0lYICIKKyJZYWNjKVxuIgorIiAgLXIsIC0tcmVwb3J0PVRISU5HUyAgICAgICAgYWxzbyBwcm9kdWNlIGRldGFpbHMgb24gdGhlIGF1dG9tYXRvblxuIgorIiAgICAgIC0tcmVwb3J0LWZpbGU9RklMRSAgICAgd3JpdGUgcmVwb3J0IHRvIEZJTEVcbiIKKyIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIHNhbWUgYXMgYC0tcmVwb3J0PXN0YXRlJ1xuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg9UFJFRklYICAgc3BlY2lmeSBhIFBSRUZJWCBmb3Igb3V0cHV0IGZpbGVzXG4iCisiICAtbywgLS1vdXRwdXQ9RklMRSAgICAgICAgICBsZWF2ZSBvdXRwdXQgdG8gRklMRVxuIgorIiAgLWcsIC0tZ3JhcGhbPUZJTEVdICAgICAgICAgYWxzbyBvdXRwdXQgYSBncmFwaCBvZiB0aGUgYXV0b21hdG9uXG4iCisiICAteCwgLS14bWxbPUZJTEVdICAgICAgICAgICBhbHNvIG91dHB1dCBhbiBYTUwgcmVwb3J0IG9mIHRoZSBhdXRvbWF0b25cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGUgWE1MIHNjaGVtYSBpcyBleHBlcmltZW50YWwpXG4iCittc2dzdHIgIiIKKyJPdXRwdXQ6XG4iCisiICAtZCwgLS1kZWZpbmVzICAgICAgICAgICAgICBvZ3PlIGxhZyBlbiBoZWFkZXJmaWxcbiIKKyIgIC1yLCAtLXJlcG9ydD1USU5HICAgICAgICAgIG9nc+UgbGFnIGRldGFsamVyIG9tIGF1dG9tYXRlblxuIgorIiAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgc2FtbWUgc29tIKstLXJlcG9ydD1zdGF0ZbtcbiIKKyIgIC1iLCAtLWZpbGUtcHJlZml4PVBSRUZJS1MgIGFuZ2kgZXQgUFJFRklLUyBmb3Igb3V0cHV0ZmlsZXJcbiIKKyIgIC1vLCAtLW91dHB1dD1GSUwgICAgICAgICAgIHNlbmQgb3V0cHV0IHRpbCBGSUxcbiIKKyIgIC1nLCAtLWdyYXBoICAgICAgICAgICAgICAgIG9nc+UgbGFnIGVuIFZDRy1iZXNrcml2ZWxzZSBhdiBhdXRvbWF0ZW5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozNjEKK21zZ2lkICIiCisiV2FybmluZyBjYXRlZ29yaWVzIGluY2x1ZGU6XG4iCisiICBgbWlkcnVsZS12YWx1ZXMnICB1bnNldCBvciB1bnVzZWQgbWlkcnVsZSB2YWx1ZXNcbiIKKyIgIGB5YWNjJyAgICAgICAgICAgIGluY29tcGF0aWJpbGl0aWVzIHdpdGggUE9TSVggWWFjY1xuIgorIiAgYGNvbmZsaWN0cy1zcicgICAgUy9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGNvbmZsaWN0cy1ycicgICAgUi9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGRlcHJlY2F0ZWQnICAgICAgb2Jzb2xldGUgY29uc3RydWN0c1xuIgorIiAgYG90aGVyJyAgICAgICAgICAgYWxsIG90aGVyIHdhcm5pbmdzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgYWxsJyAgICAgICAgICAgICBhbGwgdGhlIHdhcm5pbmdzXG4iCisiICBgbm8tQ0FURUdPUlknICAgICB0dXJuIG9mZiB3YXJuaW5ncyBpbiBDQVRFR09SWVxuIgorIiAgYG5vbmUnICAgICAgICAgICAgdHVybiBvZmYgYWxsIHRoZSB3YXJuaW5nc1xuIgorIiAgYGVycm9yJyAgICAgICAgICAgdHJlYXQgd2FybmluZ3MgYXMgZXJyb3JzXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozNzYKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRISU5HUyBpcyBhIGxpc3Qgb2YgY29tbWEgc2VwYXJhdGVkIHdvcmRzIHRoYXQgY2FuIGluY2x1ZGU6XG4iCisiICBgc3RhdGUnICAgICAgICBkZXNjcmliZSB0aGUgc3RhdGVzXG4iCisiICBgaXRlbXNldCcgICAgICBjb21wbGV0ZSB0aGUgY29yZSBpdGVtIHNldHMgd2l0aCB0aGVpciBjbG9zdXJlXG4iCisiICBgbG9va2FoZWFkJyAgICBleHBsaWNpdGx5IGFzc29jaWF0ZSBsb29rYWhlYWQgdG9rZW5zIHRvIGl0ZW1zXG4iCisiICBgc29sdmVkJyAgICAgICBkZXNjcmliZSBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIHNvbHZpbmdcbiIKKyIgIGBhbGwnICAgICAgICAgIGluY2x1ZGUgYWxsIHRoZSBhYm92ZSBpbmZvcm1hdGlvblxuIgorIiAgYG5vbmUnICAgICAgICAgZGlzYWJsZSB0aGUgcmVwb3J0XG4iCittc2dzdHIgIiIKKyJUSU5HIGVyIGVuIGxpc3RlIG1lZCBrb21tYXNlcGFyZXJ0ZSBvcmQgaGVudGV0IGZyYSBkZW5uZSBsaXN0YTpcbiIKKyIgIKtzdGF0ZbsgICAgICAgIGJlc2tyaXZlIHRpbHN0YW5kZW5lXG4iCisiICCraXRlbXNldLsgICAgICBmdWxsZvhyZSBkZSBzZW50cmFsZSBwdW5rdG1lbmdkZW5lIG1lZCBkZXJlcyBzbHV0bmluZ1xuIgorIiAgq2xvb2thaGVhZLsgICAgZWtzcGxpc2l0dCBhc3Nvc2llcmUgbG9va2FoZWFkcyBtZWQgcHVua3RlclxuIgorIiAgq3NvbHZlZLsgICAgICAgYmVza3JpdmUgbPhzaW5nIGF2IHNraWZ0L3JlZHVrc2pvbi1rb25mbGlrdGVyXG4iCisiICCrYWxsuyAgICAgICAgICBpbmtsdWRlcmUgYWx0IGF2IGRlbiBvdmVyc3TlZW5kZSBpbmZvcm1hc2pvbmVuXG4iCisiICCrbm9uZbsgICAgICAgICBzbOUgYXYgYWxsIHJhcHBvcnRlcmluZ1xuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM4NworbXNnaWQgIiIKKyJGRUFUVVJFIGlzIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMgdGhhdCBjYW4gaW5jbHVkZTpcbiIKKyIgIGBjYXJldCcgICAgICAgIHNob3cgZXJyb3JzIHdpdGggY2FyZXRzXG4iCisiICBgYWxsJyAgICAgICAgICBhbGwgb2YgdGhlIGFib3ZlXG4iCisiICBgbm9uZScgICAgICAgICBkaXNhYmxlIGFsbCBvZiB0aGUgYWJvdmVcbiIKKyIgICIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKK21zZ3N0ciAiUmFwcG9ydGVyIGZlaWwgdGlsIDxidWctYmlzb25AZ251Lm9yZz4uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhvbWUgcGFnZTogPCVzPi5cbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NworbXNnaWQgIkdlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBSZXBsYWNlIExBTkdfQ09ERSBpbiB0aGlzIFVSTCB3aXRoIHlvdXIgbGFuZ3VhZ2UKKyMuIGNvZGUgPGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vTEFOR19DT0RFLmh0bWw+IHRvCisjLiBmb3JtIG9uZSBvZiB0aGUgVVJMcyBhdCBodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtLy4KKyMuIE90aGVyd2lzZSwgcmVwbGFjZSB0aGUgZW50aXJlIFVSTCB3aXRoIHlvdXIgdHJhbnNsYXRpb24gdGVhbSdzCisjLiBlbWFpbCBhZGRyZXNzLgorIzogc3JjL2dldGFyZ3MuYzo0MTAKK21zZ2lkICJSZXBvcnQgdHJhbnNsYXRpb24gYnVncyB0byA8aHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS8+LlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDEyCittc2dpZCAiRm9yIGNvbXBsZXRlIGRvY3VtZW50YXRpb24sIHJ1bjogaW5mbyBiaXNvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJiaXNvbiAoR05VIEJpc29uKSAlcyIKK21zZ3N0ciAiYmlzb24gKEdOVSBCaXNvbikgJXMiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDMwCittc2dpZCAiV3JpdHRlbiBieSBSb2JlcnQgQ29yYmV0dCBhbmQgUmljaGFyZCBTdGFsbG1hbi5cbiIKK21zZ3N0ciAiU2tyZXZldCBhdiBSb2JlcnQgQ29yYmV0dCBvZyBSaWNoYXJkIFN0YWxsbWFuLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3B5cmlnaHQgKEMpICVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorbXNnc3RyICJDb3B5cmlnaHQgKEMpICVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQzNworbXNnaWQgIiIKKyJUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOT1xuIgorIndhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLlxuIgorbXNnc3RyICIiCisiRGV0dGUgZXIgZnJpIHByb2dyYW12YXJlOyBzZSBpIGtpbGRla29kZW4gZm9yIGtvcGllcmluZ3NiZXRpbmdlbHNlci5cbiIKKyJEZXQgZXIgSU5HRU4gZ2FyYW50aTsgaWtrZSBlbiBnYW5nIGZvciBTQUxHQkFSSEVUIGVsbGVyIFNLSUtLRVRIRVRcbiIKKyJGT1IgRVQgQkVTVEVNVCBGT1JNxUwuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDU4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSBza2VsZXRvbiBkZWNsYXJhdGlvbnMgYXJlIGludmFsaWQiCittc2dzdHIgImZsZXJlIGRla2xhcmFzam9uZXIgYXYgJXMiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBsYW5ndWFnZSIKK21zZ3N0ciAidWd5bGRpZyB2ZXJkaTogJXMiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDc5CisjLCBmdXp6eQorbXNnaWQgIm11bHRpcGxlIGxhbmd1YWdlIGRlY2xhcmF0aW9ucyBhcmUgaW52YWxpZCIKK21zZ3N0ciAiZmxlcmUgZGVrbGFyYXNqb25lciBhdiAlcyIKKworIzogc3JjL2dldGFyZ3MuYzo3NDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBtaXNzaW5nIG9wZXJhbmQiCittc2dzdHIgIm1hbmdsZXIgb3BlcmFuZCBldHRlciCrJXO7IgorCisjOiBzcmMvZ2V0YXJncy5jOjc0OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZXh0cmEgb3BlcmFuZCAlcyIKK21zZ3N0ciAiZWtzdHJhIG9wZXJhbmQgqyVzuyIKKworIzogc3JjL2dyYW0uYzoxMTIKK21zZ2lkICJlbXB0eSIKK21zZ3N0ciAidG9tIgorCisjOiBzcmMvZ3JhbS5jOjIwMQorbXNnaWQgIkdyYW1tYXIiCittc2dzdHIgIkdyYW1tYXRpa2siCisKKyM6IHNyYy9ncmFwaHZpei5jOjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIvLyBHZW5lcmF0ZWQgYnkgJXMuXG4iCisiLy8gUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKKyIvLyBIb21lIHBhZ2U6IDwlcz4uXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogc3JjL2xvY2F0aW9uLmM6OTMgc3JjL3NjYW4tZ3JhbS5sOjg1OQorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lIG51bWJlciBvdmVyZmxvdyIKK21zZ3N0ciAiIgorCisjOiBzcmMvbG9jYXRpb24uYzo5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb2x1bW4gbnVtYmVyIG92ZXJmbG93IgorbXNnc3RyICIiCisKKyM6IHNyYy9tYWluLmM6MTQ2CisjLCBmdXp6eQorbXNnaWQgInJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cyIKK21zZ3N0ciAicmVnZWwgYmxlIGFsZHJpIHJlZHVzZXJ0IHDlIGdydW5uIGF2IGtvbmZsaWt0ZXIiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NDUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlJWRlZmluZSB2YXJpYWJsZSAlcyByZWRlZmluZWQiCittc2dzdHIgInN5bWJvbGV0ICVzIGJsZSByZWRlZmluZXJ0IgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ1MworbXNnaWQgInByZXZpb3VzIGRlZmluaXRpb24iCittc2dzdHIgIiIKKworIzogc3JjL211c2NsZS10YWIuYzo0OTAgc3JjL211c2NsZS10YWIuYzo1MDQgc3JjL211c2NsZS10YWIuYzo1NTYKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgJXMiCittc2dzdHIgIiIKKworIzogc3JjL211c2NsZS10YWIuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJSVkZWZpbmUgQm9vbGVhbiB2YXJpYWJsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjYwOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlJWRlZmluZSB2YXJpYWJsZSAlczogJXMiCittc2dzdHIgIiIKKworIzogc3JjL211c2NsZS10YWIuYzo2MTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImFjY2VwdGVkIHZhbHVlOiAlcyIKK21zZ3N0ciAidWd5bGRpZyB2ZXJkaTogJXMiCisKKyM6IHNyYy9wYXJzZS1ncmFtLnk6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgaWRlbnRpZmllciBpbiBwYXJhbWV0ZXIgZGVjbGFyYXRpb24iCittc2dzdHIgIm1hbmdsZXIgaWRlbnRpZmlrYXRvciBpIHBhcmFtZXRlcmRla2xhcmFzam9uZW4iCisKKyM6IHNyYy9wcmludC5jOjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiB0eXBlICVkIGlzICVzXG4iCittc2dzdHIgIiB0eXBlICVkIGVyICVzXG4iCisKKyM6IHNyYy9wcmludC5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICJzaGlmdCwgYW5kIGdvIHRvIHN0YXRlICVkXG4iCittc2dzdHIgInNraWZ0IG9nIGflIHRpbCB0aWxzdGFuZCAlZFxuIgorCisjOiBzcmMvcHJpbnQuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ28gdG8gc3RhdGUgJWRcbiIKK21zZ3N0ciAiZ+UgdGlsIHRpbHN0YW5kICVkXG4iCisKKyM6IHNyYy9wcmludC5jOjIwMworbXNnaWQgImVycm9yIChub25hc3NvY2lhdGl2ZSlcbiIKK21zZ3N0ciAiZmVpbCAoaWtrZS1hc3Nvc2lhdGl2KVxuIgorCisjOiBzcmMvcHJpbnQuYzoyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkdWNlIHVzaW5nIHJ1bGUgJWQgKCVzKSIKK21zZ3N0ciAicmVkdWtzam9uIHZlZCBoamVscCBhdiByZWdlbCAlZCAoJXMpIgorCisjOiBzcmMvcHJpbnQuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWNjZXB0IgorbXNnc3RyICJha3NlcHQiCisKKyMgRGV0IGVyIHZlbCBpa2tlIHPlIG15ZSDlIG92ZXJzZXR0ZSBkZW5uZSBtZWQuCisjIFtURSwgMjAwNC0wNi0wMl0KKyM6IHNyYy9wcmludC5jOjI2NCBzcmMvcHJpbnQuYzozMzgKK21zZ2lkICIkZGVmYXVsdCIKK21zZ3N0ciAiJGRlZmF1bHQiCisKKyM6IHNyYy9wcmludC5jOjM3MyBzcmMvcHJpbnRfZ3JhcGguYzo3OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU3RhdGUgJWQiCittc2dzdHIgIlRpbHN0YW5kICVkICIKKworIzogc3JjL3ByaW50LmM6NDA5Cittc2dpZCAiVGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyIgorbXNnc3RyICJUZXJtaW5hbGVyIG1lZCByZWdsZXIgaHZvciBkZSBvcHB0cmVyIgorCisjOiBzcmMvcHJpbnQuYzo0MzYKK21zZ2lkICJOb250ZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIiCittc2dzdHIgIklra2UtdGVybWluYWxlciBtZWQgcmVnbGVyIGh2b3IgZGUgb3BwdHJlciIKKworIzogc3JjL3ByaW50LmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiBsZWZ0OiIKK21zZ3N0ciAiIHRpbCB2ZW5zdHJlOiIKKworIzogc3JjL3ByaW50LmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiByaWdodDoiCittc2dzdHIgIiB0aWwgaPh5cmU6IgorCisjOiBzcmMvcHJpbnQuYzo1MTAKKyMsIGZ1enp5Cittc2dpZCAiUnVsZXMgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cyIKK21zZ3N0ciAicmVnZWwgYmxlIGFsZHJpIHJlZHVzZXJ0IHDlIGdydW5uIGF2IGtvbmZsaWt0ZXIiCisKKyM6IHNyYy9yZWFkZXIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSAlcyBkZWNsYXJhdGlvbnMiCittc2dzdHIgImZsZXJlIGRla2xhcmFzam9uZXIgYXYgJXMiCisKKyMgRGVubmUgb3ZlcnNldHRlbHNlbiBlciBlbiBzbXVsZSB1bGxlbi4gIE3lIHNqZWtrZSBraWxkZWtvZGVuIG9nIHBy+HZlCisjIGV0IGVrc2VtcGVsIGZvciDlIHZpdGUgaHZhIGRlbm5lIHN0cmVuZ2VuIGL4ciBvdmVyc2V0dGVzIG1lZC4gIERlcnNvbQorIyBhbmRyZSBoYXIgZ29kZSBoaW50LCBz5SBmb3IgYWxsIGRlbCwgc3luZyB1dCEgIFtURSwgMjAwNC0wNS0zMV0KKyM6IHNyYy9yZWFkZXIuYzoxMzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInJlc3VsdCB0eXBlIGNsYXNoIG9uIG1lcmdlIGZ1bmN0aW9uICVzOiA8JXM+ICE9IDwlcz4iCittc2dzdHIgImtvbGxpc2pvbiBw5SByZXN1bHRhdHR5cGUgZm9yIGZsZXR0ZWZ1bmtzam9uICVzOiA8JXM+ICE9IDwlcz4iCisKKyM6IHNyYy9yZWFkZXIuYzoxMzkgc3JjL3N5bXRhYi5jOjE1NiBzcmMvc3ltdGFiLmM6MTY2IHNyYy9zeW10YWIuYzo5MzgKKyM6IHNyYy9zeW10YWIuYzo5NTMgc3JjL3N5bXRhYi5jOjk2OCBzcmMvc3ltdGFiLmM6OTgzCisjLCBmdXp6eQorbXNnaWQgInByZXZpb3VzIGRlY2xhcmF0aW9uIgorbXNnc3RyICJm+HJzdGUgZGVrbGFyYXNqb24iCisKKyM6IHNyYy9yZWFkZXIuYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlZCBzeW1ib2wgbmFtZSBmb3IgJXMgaWdub3JlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVhZGVyLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bGUgZ2l2ZW4gZm9yICVzLCB3aGljaCBpcyBhIHRva2VuIgorbXNnc3RyICJyZWdlbCBlciBhbmdpdHQgZm9yICVzLCBzb20gZXIgZXQgdG9rZW4iCisKKyMgRGVubmUgb3ZlcnNldHRlbHNlbiBlciBvZ3PlIGVuIHNtdWxlIHVsbGVuLgorIyBbVEUsIDIwMDQtMDUtMzFdCisjOiBzcmMvcmVhZGVyLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgInR5cGUgY2xhc2ggb24gZGVmYXVsdCBhY3Rpb246IDwlcz4gIT0gPCVzPiIKK21zZ3N0ciAia29sbGlzam9uIHDlIHR5cGUgZm9yIHN0YW5kYXJkIGhhbmRsaW5nOiA8JXM+ICE9IDwlcz4iCisKKyM6IHNyYy9yZWFkZXIuYzozMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgcnVsZSBmb3IgdHlwZWQgbm9udGVybWluYWwsIGFuZCBubyBhY3Rpb24iCittc2dzdHIgInRvbSByZWdlbCBmb3IgdHlwZXQgaWtrZS10ZXJtaW5hbCBvZyBpbmdlbiBoYW5kbGluZyIKKworIzogc3JjL3JlYWRlci5jOjMyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW51c2VkIHZhbHVlOiAkJWQiCittc2dzdHIgInVneWxkaWcgdmVyZGk6ICVzIgorCisjOiBzcmMvcmVhZGVyLmM6MzMwCittc2dpZCAidW5zZXQgdmFsdWU6ICQkIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9rZW4gZm9yICUlcHJlYyBpcyBub3QgZGVmaW5lZDogJXMiCittc2dzdHIgIiIKKworIzogc3JjL3JlYWRlci5jOjQzMSBzcmMvcmVhZGVyLmM6NDQ1IHNyYy9yZWFkZXIuYzo0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSBvbmUgJXMgYWxsb3dlZCBwZXIgcnVsZSIKK21zZ3N0ciAiYmFyZSBlbiAlcyBwciByZWdlbCBlciB0aWxsYXR0IgorCisjOiBzcmMvcmVhZGVyLmM6NDQxIHNyYy9yZWFkZXIuYzo0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWZmZWN0cyBvbmx5IEdMUiBwYXJzZXJzIgorbXNnc3RyICIlcyBw5XZpcmtlciBiYXJlIEdMUi1wYXJzZXJlIgorCisjOiBzcmMvcmVhZGVyLmM6NDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIG11c3QgYmUgZm9sbG93ZWQgYnkgcG9zaXRpdmUgbnVtYmVyIgorbXNnc3RyICIlcyBt5SBibGkgZnVsZ3QgYXYgZXQgcG9zaXRpdnQgdGFsbCIKKworIzogc3JjL3JlYWRlci5jOjU1NAorIywgYy1mb3JtYXQKK21zZ2lkICJydWxlIGlzIHRvbyBsb25nIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzo2NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcnVsZXMgaW4gdGhlIGlucHV0IGdyYW1tYXIiCittc2dzdHIgImluZ2VuIHJlZ2xlciBpIGRlbiBhbmdpdHRlIGdyYW1tYXRpa2tlbiIKKworIzogc3JjL3JlZHVjZS5jOjI0MQorIywgZnV6enkKK21zZ2lkICJydWxlIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAiaW5nZW4gcmVnbGVyIGkgZGVuIGFuZ2l0dGUgZ3JhbW1hdGlra2VuIgorCisjOiBzcmMvcmVkdWNlLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogJXMiCittc2dzdHIgIiIKKworIzogc3JjL3JlZHVjZS5jOjM1MAorIywgZnV6enkKK21zZ2lkICJOb250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyICJJa2tlLXRlcm1pbmFsZXIgbWVkIHJlZ2xlciBodm9yIGRlIG9wcHRyZXIiCisKKyM6IHNyYy9yZWR1Y2UuYzozNjMKKyMsIGZ1enp5Cittc2dpZCAiVGVybWluYWxzIHVudXNlZCBpbiBncmFtbWFyIgorbXNnc3RyICJpbmdlbiByZWdsZXIgaSBkZW4gYW5naXR0ZSBncmFtbWF0aWtrZW4iCisKKyM6IHNyYy9yZWR1Y2UuYzozNzIKKyMsIGZ1enp5Cittc2dpZCAiUnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyICJpbmdlbiByZWdsZXIgaSBkZW4gYW5naXR0ZSBncmFtbWF0aWtrZW4iCisKKyM6IHNyYy9yZWR1Y2UuYzozODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnaWRfcGx1cmFsICIlZCBub250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogc3JjL3JlZHVjZS5jOjM5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJWQgcnVsZSB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dpZF9wbHVyYWwgIiVkIHJ1bGVzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0clswXSAiaW5nZW4gcmVnbGVyIGkgZGVuIGFuZ2l0dGUgZ3JhbW1hdGlra2VuIgorbXNnc3RyWzFdICJpbmdlbiByZWdsZXIgaSBkZW4gYW5naXR0ZSBncmFtbWF0aWtrZW4iCisKKyM6IHNyYy9yZWR1Y2UuYzo0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnQgc3ltYm9sICVzIGRvZXMgbm90IGRlcml2ZSBhbnkgc2VudGVuY2UiCittc2dzdHIgInN0YXJ0c3ltYm9sZXQgJXMgYXZsZWRlciBpbmdlbiBzZXRuaW5nZXIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYXkgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjI5Cittc2dpZCAiYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjIzMgorbXNnaWQgImZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVzZSBvZiBZWUZBSUwsIHdoaWNoIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDMxIHNyYy9zY2FuLWNvZGUubDo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJzIHRvOiAlYyVzIGF0ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zc2libHkgbWVhbnQ6ICVjIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCBoaWRpbmcgJWMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICIgYXQgJXMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ3MgorIywgYy1mb3JtYXQKK21zZ2lkICIsIGNhbm5vdCBiZSBhY2Nlc3NlZCBmcm9tIG1pZC1ydWxlIGFjdGlvbiBhdCAkJWQiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjUyMSBzcmMvc2Nhbi1ncmFtLmw6NzgzCisjLCBjLWZvcm1hdAorbXNnaWQgImludGVnZXIgb3V0IG9mIHJhbmdlOiAlcyIKK21zZ3N0ciAiaGVsdGFsbCB1dGVuZm9yIHRhbGxvbXLlZGU6ICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjEwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZmVyZW5jZTogJXMiCittc2dzdHIgInVneWxkaWcgZGlyZWt0aXY6ICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjE5CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciBhZnRlciAnJWMnLCBleHBlY3RpbmcgaW50ZWdlciwgbGV0dGVyLCAnXycsICdbJywgb3IgJyQnIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uIGJlZm9yZSAkJWQ6ICUuKnMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjYzMworIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246ICUuKnMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNsZWFkaW5nIHJlZmVyZW5jZTogJXMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjY2MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIHJlZmVyZW5jZTogJXMiCittc2dzdHIgImZsZXJ0eWRpZyBhcmd1bWVudCAlcyBmb3IgJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwbGljaXQgdHlwZSBnaXZlbiBpbiB1bnR5cGVkIGdyYW1tYXIiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjc1OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJCQgZm9yIHRoZSBtaWRydWxlIGF0ICQlZCBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiJCVkIGF2IKslc7sgaGFyIGluZ2VuIGRla2xhcmVydCB0eXBlIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NzY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIkJCBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiJCQgdGlsIKslc7sgaGFyIGluZ2VuIGRla2xhcmVydCB0eXBlIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6Nzg2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIkJXMgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiQlZCBhdiCrJXO7IGhhciBpbmdlbiBkZWtsYXJlcnQgdHlwZSIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjE0OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic3RyYXkgJywnIHRyZWF0ZWQgYXMgd2hpdGUgc3BhY2UiCittc2dzdHIgIm92ZXJmbPhkaWcgqyy7IGJsZSBiZWhhbmRsZXQgc29tIHRvbXJvbSIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRpcmVjdGl2ZTogJXMiCittc2dzdHIgInVneWxkaWcgZGlyZWt0aXY6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MjUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50aWZpZXI6ICVzIgorbXNnc3RyICJ1Z3lsZGlnIGRpcmVrdGl2OiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjI5NQorIywgZnV6enkKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciIKK21zZ2lkX3BsdXJhbCAiaW52YWxpZCBjaGFyYWN0ZXJzIgorbXNnc3RyWzBdICJ1Z3lsZGlnIHRlZ246ICVzIgorbXNnc3RyWzFdICJ1Z3lsZGlnIHRlZ246ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgaWRlbnRpZmllciBpbiBicmFja2V0ZWQgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJhbiBpZGVudGlmaWVyIGV4cGVjdGVkIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozODEKKyMsIGZ1enp5Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIgaW4gYnJhY2tldGVkIG5hbWUiCittc2dpZF9wbHVyYWwgImludmFsaWQgY2hhcmFjdGVycyBpbiBicmFja2V0ZWQgbmFtZSIKK21zZ3N0clswXSAidWd5bGRpZyB0ZWduOiAlcyIKK21zZ3N0clsxXSAidWd5bGRpZyB0ZWduOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjQ4MSBzcmMvc2Nhbi1ncmFtLmw6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGNoYXJhY3RlciBsaXRlcmFsIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo0ODYgc3JjL3NjYW4tZ3JhbS5sOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJleHRyYSBjaGFyYWN0ZXJzIGluIGNoYXJhY3RlciBsaXRlcmFsIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudWxsIGNoYXJhY3RlciIKK21zZ3N0ciAidWd5bGRpZyBudWxsLXRlZ24iCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1MzEgc3JjL3NjYW4tZ3JhbS5sOjU0MSBzcmMvc2Nhbi1ncmFtLmw6NTYxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBhZnRlciBcXC1lc2NhcGU6ICVzIgorbXNnc3RyICJ1Z3lsZGlnIG51bGwtdGVnbjogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1NzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY2hhcmFjdGVyIGFmdGVyIFxcLWVzY2FwZTogJXMiCittc2dzdHIgInVneWxkaWcgdGVnbjogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo5MDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgJXMgYXQgZW5kIG9mIGZpbGUiCittc2dzdHIgIm1hbmdsZXIgqyVzuyB2ZWQgc2x1dHRlbiBhdiBmaWxlbiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjkxMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyBhdCBlbmQgb2YgbGluZSIKK21zZ3N0ciAibWFuZ2xlciCrJXO7IHDlIHNsdXR0ZW4gYXYgbGluamVuIgorCisjOiBzcmMvc2Nhbi1za2VsLmw6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuY2xvc2VkICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1za2VsLmw6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBmZXcgYXJndW1lbnRzIGZvciAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tc2tlbC5sOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgZm9yICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltbGlzdC5jOjIxMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAkIHZhbHVlOiAkJWQiCittc2dzdHIgInVneWxkaWcgdmVyZGk6ICVzIgorCisjOiBzcmMvc3ltdGFiLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUE9TSVggWWFjYyBmb3JiaWRzIGRhc2hlcyBpbiBzeW1ib2wgbmFtZXM6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW10YWIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBzeW1ib2xzIGluIGlucHV0IGdyYW1tYXIgKGxpbWl0IGlzICVkKSIKK21zZ3N0ciAiZm9yIG1hbmdlIHN5bWJvbGVyIGkgaW5wdXRncmFtbWF0aWtrZW4gKGdyZW5zZW4gZXIgJWQpIgorCisjOiBzcmMvc3ltdGFiLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICIlcyBlciBlbiByZWRla2xhcmFzam9uIGF2ICVzIgorCisjOiBzcmMvc3ltdGFiLmM6MTY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciA8JXM+IgorbXNnc3RyICIlcyBlciBlbiByZWRla2xhcmFzam9uIGF2ICVzIgorCisjOiBzcmMvc3ltdGFiLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyByZWRlZmluZWQiCittc2dzdHIgInN5bWJvbGV0ICVzIGJsZSByZWRlZmluZXJ0IgorCisjOiBzcmMvc3ltdGFiLmM6MzQ2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgcmVkZWNsYXJlZCIKK21zZ3N0ciAic3ltYm9sZXQgJXMgYmxlIHJlZGVmaW5lcnQiCisKKyM6IHNyYy9zeW10YWIuYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWZpbmluZyB1c2VyIHRva2VuIG51bWJlciBvZiAlcyIKK21zZ3N0ciAicmVkZWZpbmVyZXIgYnJ1a2VydG9rZW5udW1tZXJldCB0aWwgJXMiCisKKyM6IHNyYy9zeW10YWIuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIGlzIHVzZWQsIGJ1dCBpcyBub3QgZGVmaW5lZCBhcyBhIHRva2VuIGFuZCBoYXMgbm8gcnVsZXMiCittc2dzdHIgIiIKKyJzeW1ib2xldCAlcyBlciBicnVrdCwgbWVuIGVyIGlra2UgZGVmaW5lcnQgc29tIGV0IHRva2VuIG9nIGhhciBpbmdlbiByZWdsZXIiCisKKyM6IHNyYy9zeW10YWIuYzo0MTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyB1c2VkIG1vcmUgdGhhbiBvbmNlIGFzIGEgbGl0ZXJhbCBzdHJpbmciCittc2dzdHIgInN5bWJvbGV0IKslc7sgZXIgYnJ1a3QgbWVyIGVubiBlbiBnYW5nIHNvbSBlbiBsaXRlcmFsc3RyZW5nIgorCisjOiBzcmMvc3ltdGFiLmM6NDE4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgZ2l2ZW4gbW9yZSB0aGFuIG9uZSBsaXRlcmFsIHN0cmluZyIKK21zZ3N0ciAic3ltYm9sZXQgqyVzuyBlciBnaXR0IG1lciBlbm4gZW4gbGl0ZXJhbHN0cmVuZyIKKworIzogc3JjL3N5bXRhYi5jOjUzNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidXNlciB0b2tlbiBudW1iZXIgJWQgcmVkZWNsYXJhdGlvbiBmb3IgJXMiCittc2dzdHIgIiVzIGVyIGVuIHJlZGVrbGFyYXNqb24gYXYgJXMiCisKKyM6IHNyYy9zeW10YWIuYzo1MzkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIGRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAiJXMgZXIgZW4gcmVkZWtsYXJhc2pvbiBhdiAlcyIKKworIzogc3JjL3N5bXRhYi5jOjkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgc3RhcnQgc3ltYm9sICVzIGlzIHVuZGVmaW5lZCIKK21zZ3N0ciAic3RhcnRzeW1ib2xldCAlcyBlciB1ZGVmaW5lcnQiCisKKyM6IHNyYy9zeW10YWIuYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHN0YXJ0IHN5bWJvbCAlcyBpcyBhIHRva2VuIgorbXNnc3RyICJzdGFydHN5bWJvbGV0ICVzIGVyIGV0IHRva2VuIgorCisjOiBzcmMvc3ltdGFiLmM6OTM1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICUlZGVzdHJ1Y3RvciIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnbGVzcyAlJWRlc3RydWN0b3IiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlJXByaW50ZXIiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjk4MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJSVwcmludGVyIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzo2MyBkamdwcC9zdWJwaXBlLmM6Mjg2IGRqZ3BwL3N1YnBpcGUuYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3Zpbmcgb2YgJyVzJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjg1IGRqZ3BwL3N1YnBpcGUuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGlvbiBvZiBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgInNhdmluZyBzdGRpbiBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJzYXZpbmcgc3Rkb3V0IGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTUzIGRqZ3BwL3N1YnBpcGUuYzoxOTcgZGpncHAvc3VicGlwZS5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nIG9mIHRtcGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgYmlzb24ncyBzdGRvdXQgdG8gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIG00J3Mgc3RkaW4gZnJvbSB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlbmluZyBvZiBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIG00J3Mgc3Rkb3V0IHRvIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSAnJXMnIGludGVycnVwdGVkIgorbXNnc3RyICJoamVscGVwcm9ncmFtbWV0IKslc7sgbWlzbHlrdGVzIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjQxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gJyVzJyBub3QgZm91bmQiCittc2dzdHIgImZhbnQgaWtrZSBoamVscGVwcm9ncmFtbWV0IKslc7siCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgYmlzb24ncyBzdGRpbiBmcm9tIHRoZSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogbGliL2FyZ21hdGNoLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgJXMgZm9yICVzIgorbXNnc3RyICJ1Z3lsZGlnIGFyZ3VtZW50ICVzIGZvciAlcyIKKworIzogbGliL2FyZ21hdGNoLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImFtYmlndW91cyBhcmd1bWVudCAlcyBmb3IgJXMiCittc2dzdHIgImZsZXJ0eWRpZyBhcmd1bWVudCAlcyBmb3IgJXMiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjE1MworbXNnaWQgIlZhbGlkIGFyZ3VtZW50cyBhcmU6IgorbXNnc3RyICJHeWxkaWdlIGFyZ3VtZW50ZXIgZXI6IgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9hbGxvY3MsICV1IGZyZWVkICglLjJmJSUpLlxuIgorbXNnc3RyICIldSBiaXRzZXRfYWxsb2NzLCAldSBmcmlnam9ydCAoJS4yZiUlKS5cbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfc2V0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF9zZXRzLCAldSBtZWxsb21sYWdyZXQgKCUuMmYlJSlcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfcmVzZXRzLCAldSBjYWNoZWQgKCUuMmYlJSlcbiIKK21zZ3N0ciAiJXUgYml0c2V0X3Jlc2V0cywgJXUgbWVsbG9tbGFncmV0ICglLjJmJSUpXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3Rlc3RzLCAldSBjYWNoZWQgKCUuMmYlJSlcbiIKK21zZ3N0ciAiJXUgYml0c2V0X3Rlc3RzLCAldSBtZWxsb21sYWdyZXQgKCUuMmYlJSlcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfbGlzdHNcbiIKK21zZ3N0ciAiJXUgYml0c2V0X2xpc3RzXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTIKK21zZ2lkICJjb3VudCBsb2cgaGlzdG9ncmFtXG4iCittc2dzdHIgImNvdW50IGxvZyBoaXN0b2dyYW1cbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5NQorbXNnaWQgInNpemUgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICJzaXplIGxvZyBoaXN0b2dyYW1cbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5OAorbXNnaWQgImRlbnNpdHkgaGlzdG9ncmFtXG4iCittc2dzdHIgInRldHRoZXRzaGlzdG9ncmFtXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJpdHNldCBzdGF0aXN0aWNzOlxuIgorIlxuIgorbXNnc3RyICIiCisiQml0bWVuZ2Rlc3RhdGlzdGlrazpcbiIKKyJcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJBY2N1bXVsYXRlZCBydW5zID0gJXVcbiIKK21zZ3N0ciAiQWtrdW11bGVydGUga2r4cmluZ2VyID0gJXVcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI1OSBsaWIvYml0c2V0X3N0YXRzLmM6MjY0CisjLCBmdXp6eQorbXNnaWQgImNhbm5vdCByZWFkIHN0YXRzIGZpbGUiCittc2dzdHIgIkt1bm5lIGlra2UgbGVzZSBzdGF0c2ZpbGVuLiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI2MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYmFkIHN0YXRzIGZpbGUgc2l6ZVxuIgorbXNnc3RyICJGZWlsIHN0+HJyZWxzZSBw5SBzdGF0c2ZpbGVuLlxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6Mjg3IGxpYi9iaXRzZXRfc3RhdHMuYzoyODkKKyMsIGZ1enp5Cittc2dpZCAiY2Fubm90IHdyaXRlIHN0YXRzIGZpbGUiCittc2dzdHIgIkt1bm5lIGlra2Ugc2tyaXZlIHN0YXRzZmlsZW4uIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjkyCisjLCBmdXp6eQorbXNnaWQgImNhbm5vdCBvcGVuIHN0YXRzIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkt1bm5lIGlra2Ug5XBuZSBzdGF0c2ZpbGVuIGZvciBza3JpdmluZy4iCisKKyM6IGxpYi9jbG9zZW91dC5jOjExMgorIywgZnV6enkKK21zZ2lkICJ3cml0ZSBlcnJvciIKK21zZ3N0ciAiYWx2b3JsaWcgZmVpbDogIgorCisjOiBsaWIvZXJyb3IuYzoxODgKK21zZ2lkICJVbmtub3duIHN5c3RlbSBlcnJvciIKK21zZ3N0ciAiVWtqZW50IHN5c3RlbWZlaWwiCisKKyM6IGxpYi9nZXRvcHQuYzo1NDcgbGliL2dldG9wdC5jOjU3NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnJXMnIGlzIGFtYmlndW91czsgcG9zc2liaWxpdGllczoiCittc2dzdHIgIiVzOiB2YWxnZXQgqyVzuyBlciBmbGVydHlkaWdcbiIKKworIzogbGliL2dldG9wdC5jOjYyNCBsaWIvZ2V0b3B0LmM6NjI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiB2YWxnZXQgqy0tJXO7IHRpbGxhdGVyIGlra2UgZXQgYXJndW1lbnRcbiIKKworIzogbGliL2dldG9wdC5jOjYzNyBsaWIvZ2V0b3B0LmM6NjQyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICclYyVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiB2YWxnZXQgqyVjJXO7IHRpbGxhdGVyIGlra2UgZXQgYXJndW1lbnRcbiIKKworIzogbGliL2dldG9wdC5jOjY4NSBsaWIvZ2V0b3B0LmM6NzA0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctLSVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogdmFsZ2V0IKslc7sga3JldmVyIGV0IGFyZ3VtZW50XG4iCisKKyM6IGxpYi9nZXRvcHQuYzo3NDIgbGliL2dldG9wdC5jOjc0NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gJy0tJXMnXG4iCittc2dzdHIgIiVzOiB1a2plbnQgdmFsZyCrLS0lc7tcbiIKKworIzogbGliL2dldG9wdC5jOjc1MyBsaWIvZ2V0b3B0LmM6NzU2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiAnJWMlcydcbiIKK21zZ3N0ciAiJXM6IHVramVudCB2YWxnIKslYyVzu1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6ODA1IGxpYi9nZXRvcHQuYzo4MDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIG9wdGlvbiAtLSAnJWMnXG4iCittc2dzdHIgIiVzOiB1Z3lsZGlnIHZhbGcgLS0gJWNcbiIKKworIzogbGliL2dldG9wdC5jOjg2MSBsaWIvZ2V0b3B0LmM6ODc4IGxpYi9nZXRvcHQuYzoxMDg4IGxpYi9nZXRvcHQuYzoxMTA2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICclYydcbiIKK21zZ3N0ciAiJXM6IHZhbGdldCBrcmV2ZXQgZXQgYXJndW1lbnQgLS0gJWNcbiIKKworIzogbGliL2dldG9wdC5jOjkzNCBsaWIvZ2V0b3B0LmM6OTUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiVzOiB2YWxnZXQgqy1XICVzuyBlciBmbGVydHlkaWdcbiIKKworIzogbGliL2dldG9wdC5jOjk3NCBsaWIvZ2V0b3B0LmM6OTkyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogdmFsZ2V0IKstVyAlc7sgdGlsbGF0ZXIgaWtrZSBldCBhcmd1bWVudFxuIgorCisjOiBsaWIvZ2V0b3B0LmM6MTAxMyBsaWIvZ2V0b3B0LmM6MTAzMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLVcgJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiB2YWxnZXQgqyVzuyBrcmV2ZXIgZXQgYXJndW1lbnRcbiIKKworIzogbGliL29ic3RhY2suYzo0MTMgbGliL29ic3RhY2suYzo0MTUgbGliL3hhbGxvYy1kaWUuYzozNAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIm1pbm5lIGVyIHV0dPhtdCIKKworIzogbGliL3NwYXduLXBpcGUuYzoxNDAgbGliL3NwYXduLXBpcGUuYzoxNDMgbGliL3NwYXduLXBpcGUuYzoyNjQKKyM6IGxpYi9zcGF3bi1waXBlLmM6MjY3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIHBpcGUiCittc2dzdHIgImthbiBpa2tlIGx1a2tlIGZpbGVuIgorCisjOiBsaWIvc3Bhd24tcGlwZS5jOjIzNCBsaWIvc3Bhd24tcGlwZS5jOjM0OCBsaWIvd2FpdC1wcm9jZXNzLmM6MjgyCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MgZmFpbGVkIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOgorIy4gR2V0IHRyYW5zbGF0aW9ucyBmb3Igb3BlbiBhbmQgY2xvc2luZyBxdW90YXRpb24gbWFya3MuCisjLiBUaGUgbWVzc2FnZSBjYXRhbG9nIHNob3VsZCB0cmFuc2xhdGUgImAiIHRvIGEgbGVmdAorIy4gcXVvdGF0aW9uIG1hcmsgc3VpdGFibGUgZm9yIHRoZSBsb2NhbGUsIGFuZCBzaW1pbGFybHkgZm9yCisjLiAiJyIuICBGb3IgZXhhbXBsZSwgYSBGcmVuY2ggVW5pY29kZSBsb2NhbCBzaG91bGQgdHJhbnNsYXRlCisjLiB0aGVzZSB0byBVKzAwQUIgKExFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFCisjLiBRVU9UQVRJT04gTUFSSyksIGFuZCBVKzAwQkIgKFJJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRQorIy4gUVVPVEFUSU9OIE1BUkspLCByZXNwZWN0aXZlbHkuCisjLgorIy4gSWYgdGhlIGNhdGFsb2cgaGFzIG5vIHRyYW5zbGF0aW9uLCB3ZSB3aWxsIHRyeSB0bworIy4gdXNlIFVuaWNvZGUgVSsyMDE4IChMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykgYW5kCisjLiBVbmljb2RlIFUrMjAxOSAoUklHSFQgU0lOR0xFIFFVT1RBVElPTiBNQVJLKS4gIElmIHRoZQorIy4gY3VycmVudCBsb2NhbGUgaXMgbm90IFVuaWNvZGUsIGxvY2FsZV9xdW90aW5nX3N0eWxlCisjLiB3aWxsIHF1b3RlICdsaWtlIHRoaXMnLCBhbmQgY2xvY2FsZV9xdW90aW5nX3N0eWxlIHdpbGwKKyMuIHF1b3RlICJsaWtlIHRoaXMiLiAgWW91IHNob3VsZCBhbHdheXMgaW5jbHVkZSB0cmFuc2xhdGlvbnMKKyMuIGZvciAiYCIgYW5kICInIiBldmVuIGlmIFUrMjAxOCBhbmQgVSsyMDE5IGFyZSBhcHByb3ByaWF0ZQorIy4gZm9yIHlvdXIgbG9jYWxlLgorIy4KKyMuIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gcHV0IGhlcmUsIHBsZWFzZSBzZWUKKyMuIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1F1b3RhdGlvbl9tYXJrc19pbl9vdGhlcl9sYW5ndWFnZXM+CisjLiBhbmQgdXNlIGdseXBocyBzdWl0YWJsZSBmb3IgeW91ciBsYW5ndWFnZS4KKyM6IGxpYi9xdW90ZWFyZy5jOjMxMgorbXNnaWQgImAiCittc2dzdHIgIqsiCisKKyM6IGxpYi9xdW90ZWFyZy5jOjMxMworbXNnaWQgIiciCittc2dzdHIgIrsiCisKKyM6IGxpYi90aW1ldmFyLmM6NDc1Cittc2dpZCAiIgorIlxuIgorIkV4ZWN1dGlvbiB0aW1lcyAoc2Vjb25kcylcbiIKK21zZ3N0ciAiIgorIlxuIgorIlV0ZvhyaW5nc3RpZGVyIChzZWt1bmRlcilcbiIKKworIzogbGliL3RpbWV2YXIuYzo1MjUKK21zZ2lkICIgVE9UQUwgICAgICAgICAgICAgICAgIDoiCittc2dzdHIgIiBUT1RBTCAgICAgICAgICAgICAgICAgOiIKKworIzogbGliL3RpbWV2YXIuYzo1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZSBpbiAlczogJWxkLiUwNmxkICglbGQlJSlcbiIKK21zZ3N0ciAidGlkIGZvciAlczogJWxkLiUwNmxkICglbGQlJSlcbiIKKworIzogbGliL3czMnNwYXduLmg6NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiX29wZW5fb3NmaGFuZGxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvdzMyc3Bhd24uaDo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdG9yZSBmZCAlZDogZHVwMiBmYWlsZWQiCittc2dzdHIgIiIKKworIzogbGliL3dhaXQtcHJvY2Vzcy5jOjIyMyBsaWIvd2FpdC1wcm9jZXNzLmM6MjU1IGxpYi93YWl0LXByb2Nlc3MuYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6Mjc0IGxpYi93YWl0LXByb2Nlc3MuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyBnb3QgZmF0YWwgc2lnbmFsICVkIgorbXNnc3RyICIiCisKKyN+IG1zZ2lkICJzdGF0ZSAlZCIKKyN+IG1zZ3N0ciAidGlsc3RhbmQgJWQiCisKKyN+IG1zZ2lkICJ3YXJuaW5nOiAiCisjfiBtc2dzdHIgImFkdmFyc2VsOiAiCisKKyN+IG1zZ2lkICJHTlUgYmlzb24gZ2VuZXJhdGVzIHBhcnNlcnMgZm9yIExBTFIoMSkgZ3JhbW1hcnMuXG4iCisjfiBtc2dzdHIgIkdOVSBiaXNvbiBnZW5lcmVyZXIgcGFyc2VyZSBmb3IgTEFMUigxKS1ncmFtbWF0aWtrLlxuIgorCisjfiBtc2dpZCAiIgorI34gIklmIGEgbG9uZyBvcHRpb24gc2hvd3MgYW4gYXJndW1lbnQgYXMgbWFuZGF0b3J5LCB0aGVuIGl0IGlzIG1hbmRhdG9yeVxuIgorI34gImZvciB0aGUgZXF1aXZhbGVudCBzaG9ydCBvcHRpb24gYWxzby4gIFNpbWlsYXJseSBmb3Igb3B0aW9uYWwgYXJndW1lbnRzLlxuIgorI34gbXNnc3RyICIiCisjfiAiRGVyc29tIGV0IGxhbmd0IHZhbGcgdmlzZXIgZXQgb2JsaWdhdG9yaXNrIGFyZ3VtZW50LCBz5SBlciBhcmd1bWVudGV0XG4iCisjfiAib2dz5SBvYmxpZ2F0b3Jpc2sgZm9yIGRldCB0aWxzdmFyZW5kZSBrb3J0ZSB2YWxnZXQuICBEZXQgc2FtbWUgZ2plbGRlclxuIgorI34gImZvciB2YWxnZnJpZSBhcmd1bWVudGVyLlxuIgorCisjfiBtc2dpZCAiIgorI34gIk9wZXJhdGlvbiBtb2RlczpcbiIKKyN+ICIgIC1oLCAtLWhlbHAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorI34gIiAgLVYsIC0tdmVyc2lvbiAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCisjfiAiICAteSwgLS15YWNjICAgICAgZW11bGF0ZSBQT1NJWCB5YWNjXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJWaXJrZW3ldGVyOlxuIgorI34gIiAgLWgsIC0taGVscCAgICAgIHZpc2UgZGVubmUgaGplbHBlbiBvZyBhdnNsdXR0ZVxuIgorI34gIiAgLVYsIC0tdmVyc2lvbiAgIHNrcml2ZSB2ZXJzam9uc251bW1lciBvZyBhdnNsdXR0ZVxuIgorI34gIiAgLXksIC0teWFjYyAgICAgIGVtdWxlcmUgUE9TSVggeWFjY1xuIgorCisjfiBtc2dpZCAiUE9TSVggZm9yYmlkcyBkZWNsYXJhdGlvbnMgaW4gdGhlIGdyYW1tYXIiCisjfiBtc2dzdHIgIlBPU0lYIGZvcmJ5ciBkZWtsYXJhc2pvbmVyIGkgZ3JhbW1hdGlra2VuIgorCisjfiBtc2dpZCAiUnVsZXMgbmV2ZXIgcmVkdWNlZCIKKyN+IG1zZ3N0ciAiUmVnbGVyIHNvbSBhbGRyaSBibGUgcmVkdXNlcnQiCisKKyN+IG1zZ2lkICJ1c2VsZXNzIHJ1bGUiCisjfiBtc2dzdHIgInVicnVrZWxpZyByZWdlbCIKKworI34gbXNnaWQgInVzZWxlc3Mgbm9udGVybWluYWw6ICVzIgorI34gbXNnc3RyICJ1YnJ1a2VsaWcgaWtrZS10ZXJtaW5hbDogJXMiCisKKyN+IG1zZ2lkICJVc2VsZXNzIG5vbnRlcm1pbmFscyIKKyN+IG1zZ3N0ciAiVWJydWtlbGlnZSBpa2tlLXRlcm1pbmFsZXIiCisKKyN+IG1zZ2lkICJUZXJtaW5hbHMgd2hpY2ggYXJlIG5vdCB1c2VkIgorI34gbXNnc3RyICJUZXJtaW5hbGVyIHNvbSBlciBpa2tlIGVyIGkgYnJ1ayIKKworI34gbXNnaWQgIlVzZWxlc3MgcnVsZXMiCisjfiBtc2dzdHIgIlVicnVrZWxpZ2UgcmVnbGVyIgorCisjfiBtc2dpZCAiJWQgcnVsZSBuZXZlciByZWR1Y2VkXG4iCisjfiBtc2dpZF9wbHVyYWwgIiVkIHJ1bGVzIG5ldmVyIHJlZHVjZWRcbiIKKyN+IG1zZ3N0clswXSAiJWQgcmVnZWwgYmxlIGFsZHJpIHJlZHVzZXJ0XG4iCisjfiBtc2dzdHJbMV0gIiVkIHJlZ2xlciBibGUgYWxkcmkgcmVkdXNlcnRcbiIKKworI34gbXNnaWQgIiVkIHVzZWxlc3Mgbm9udGVybWluYWwiCisjfiBtc2dpZF9wbHVyYWwgIiVkIHVzZWxlc3Mgbm9udGVybWluYWxzIgorI34gbXNnc3RyWzBdICIlZCB1YnJ1a2VsaWcgaWtrZS10ZXJtaW5hbCIKKyN+IG1zZ3N0clsxXSAiJWQgdWJydWtlbGlnZSBpa2tlLXRlcm1pbmFsZXIiCisKKyN+IG1zZ2lkICIgYW5kICIKKyN+IG1zZ3N0ciAiIG9nICIKKworI34gbXNnaWQgIiVkIHVzZWxlc3MgcnVsZSIKKyN+IG1zZ2lkX3BsdXJhbCAiJWQgdXNlbGVzcyBydWxlcyIKKyN+IG1zZ3N0clswXSAiJWQgdWJydWtlbGlnIHJlZ2VsIgorI34gbXNnc3RyWzFdICIlZCB1YnJ1a2VsaWdlIHJlZ2xlciIKKworI34gbXNnaWQgImludmFsaWQgZXNjYXBlIHNlcXVlbmNlOiAlcyIKKyN+IG1zZ3N0ciAidWd5bGRpZyBlc2NhcGVzZWt2ZW5zOiAlcyIKKworI34gbXNnaWQgInVucmVjb2duaXplZCBlc2NhcGUgc2VxdWVuY2U6ICVzIgorI34gbXNnc3RyICJ1Z2plbmtqZW5uZWxpZyBlc2NhcGVzZWt2ZW5zOiAlcyIKKworI34gbXNnaWQgIm1pc3NpbmcgYHsnIGluIGAlcyciCisjfiBtc2dzdHIgIm1hbmdsZXIgq3u7IGluIKslc7siCisKKyN+IG1zZ2lkICJpbnZhbGlkICQgdmFsdWUiCisjfiBtc2dzdHIgInVneWxkaWcgJC12ZXJkaSIKKworI34gbXNnaWQgInRva2VucyAlcyBhbmQgJXMgYm90aCBhc3NpZ25lZCBudW1iZXIgJWQiCisjfiBtc2dzdHIgInRva2VuZSAlcyBvZyAlcyBlciBiZWdnZSB0aWxvcmRuZXQgbnVtbWVyZXQgJWQiCisKKyN+IG1zZ2lkICIlczogaWxsZWdhbCBvcHRpb24gLS0gJWNcbiIKKyN+IG1zZ3N0ciAiJXM6IHVsb3ZsaWcgdmFsZyAtLSAlY1xuIgorCisjfiBtc2dpZCAic3Vic2lkaWFyeSBwcm9ncmFtIGAlcycgY291bGQgbm90IGJlIGludm9rZWQiCisjfiBtc2dzdHIgImt1bm5lIGlra2Ugc3RhcnRlIG9wcCBoamVscGVwcm9ncmFtbWV0IKslc7siCisKKyN+IG1zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gYCVzJyBmYWlsZWQgKGV4aXQgc3RhdHVzICVkKSIKKyN+IG1zZ3N0ciAiaGplbHBlcHJvZ3JhbW1ldCCrJXO7IG1pc2x5a3RlcyAocmV0dXJ2ZXJkaSAlZCkiCmRpZmYgLS1naXQgYS9wby9ubC5nbW8gYi9wby9ubC5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ1OTBlNAotLS0gL2Rldi9udWxsCisrKyBiL3BvL25sLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9ubC5wbyBiL3BvL25sLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmOTczMjAKLS0tIC9kZXYvbnVsbAorKysgYi9wby9ubC5wbwpAQCAtMCwwICsxLDEyMjMgQEAKKyMgRHV0Y2ggbWVzc2FnZXMgZm9yIEdOVSBiaXNvbi4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGJpc29uIHBhY2thZ2UuCisjIENvcHlyaWdodCAoQykgMTk5NiwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGltIFZhbiBIb2xkZXIgPHRpbS52YW4uaG9sZGVyQHRlbGVuZXQuYmU+LCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDEwLgorIyBFcmljayBCcmFuZGVyaG9yc3QgPGJyYW5kZXJoQGRlYmlhbi5vcmc+LCAxOTk2LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYmlzb24gMi40LjNcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLWJpc29uQGdudS5vcmdcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMi0xMi0xMiAxNjowOSswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0xMS0wNCAxNjozNiswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBUaW0gVmFuIEhvbGRlciA8dGltLnZhbi5ob2xkZXJAdGVsZW5ldC5iZT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBEdXRjaCA8dmVydGFsaW5nQHZyaWpzY2hyaWZ0Lm9yZz5cbiIKKyJMYW5ndWFnZTogbmxcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKworIzogc3JjL2NvbXBsYWluLmM6MTIwIHNyYy9jb21wbGFpbi5jOjEzMSBzcmMvY29tcGxhaW4uYzoxNDAgc3JjL2NvbXBsYWluLmM6MTg4CisjOiBzcmMvY29tcGxhaW4uYzoxOTgKK21zZ2lkICJ3YXJuaW5nIgorbXNnc3RyICJsZXQgb3AiCisKKyM6IHNyYy9jb21wbGFpbi5jOjE1MSBzcmMvY29tcGxhaW4uYzoxNjAgc3JjL2NvbXBsYWluLmM6MTY3CisjLCBmdXp6eQorbXNnaWQgImVycm9yIgorbXNnc3RyICJJL08tZm91dCIKKworIzogc3JjL2NvbXBsYWluLmM6MjA4IHNyYy9jb21wbGFpbi5jOjIxNQorbXNnaWQgImZhdGFsIGVycm9yIgorbXNnc3RyICJmYXRhbGUgZm91dCIKKworIzogc3JjL2NvbmZsaWN0cy5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIHNoaWZ0IgorbXNnc3RyICIgICAgQ29uZmxpY3QgdHVzc2VuIHJlZ2VsICVkIGVuIHRva2VuICVzIG9wZ2Vsb3N0IGFscyBzaGlmdCIKKworIzogc3JjL2NvbmZsaWN0cy5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIHJlZHVjZSIKK21zZ3N0ciAiICAgIENvbmZsaWN0IHR1c3NlbiByZWdlbCAlZCBlbiB0b2tlbiAlcyBvcGdlbG9zdCBhbHMgcmVkdWN0aWUiCisKKyM6IHNyYy9jb25mbGljdHMuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyBhbiBlcnJvciIKK21zZ3N0ciAiICAgIENvbmZsaWN0IHR1c3NlbiByZWdlbCAlZCBlbiB0b2tlbiAlcyBvcGdlbG9zdCBhbHMgZWVuIGZvdXQiCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCBzaGlmdC9yZWR1Y2UsICVkIHJlZHVjZS9yZWR1Y2VcbiIKK21zZ3N0ciAiY29uZmxpY3RlbjogJWQgc2hpZnQvcmVkdWN0aWUsICVkIHJlZHVjdGllL3JlZHVjdGllXG4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCBzaGlmdC9yZWR1Y2VcbiIKK21zZ3N0ciAiY29uZmxpY3RlbjogJWQgc2hpZnQvcmVkdWN0aWVcbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdHM6ICVkIHJlZHVjZS9yZWR1Y2VcbiIKK21zZ3N0ciAiY29uZmxpY3RlbjogJWQgcmVkdWN0aWUvcmVkdWN0aWVcbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdGF0ZSAlZCAiCittc2dzdHIgIlN0YWF0ICVkIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlZXhwZWN0LXJyIGFwcGxpZXMgb25seSB0byBHTFIgcGFyc2VycyIKK21zZ3N0ciAiJSVleHBlY3QtcnIgaXMgZW5rZWwgdmFuIHRvZXBhc3Npbmcgb3AgR0xSLXBhcnNlcnMiCisKKyM6IHNyYy9jb25mbGljdHMuYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJleHBlY3RlZCAlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIgorbXNnc3RyWzBdICJlciB3ZXJkICVkIHNoaWZ0L3JlZHVjdGllIGNvbmZsaWN0IHZlcndhY2h0IgorbXNnc3RyWzFdICJlciB3ZXJkZW4gJWQgc2hpZnQvcmVkdWN0aWUgY29uZmxpY3RlbiB2ZXJ3YWNodCIKKworIzogc3JjL2NvbmZsaWN0cy5jOjYyMQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCAlZCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJleHBlY3RlZCAlZCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAiZXIgd2VyZCAlZCByZWR1Y3RpZS9yZWR1Y3RpZSBjb25mbGljdCB2ZXJ3YWNodCIKK21zZ3N0clsxXSAiZXIgd2VyZGVuICVkIHJlZHVjdGllL3JlZHVjdGllIGNvbmZsaWN0ZW4gdmVyd2FjaHQiCisKKyM6IHNyYy9maWxlcy5jOjExNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBvcGVuIgorbXNnc3RyICJrYW4gYmVzdGFuZCBgJXMnIG5pZXQgb3BlbmVuIgorCisjOiBzcmMvZmlsZXMuYzoxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5wdXQvb3V0cHV0IGVycm9yIgorbXNnc3RyICIiCisKKyM6IHNyYy9maWxlcy5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2UgZmlsZSIKK21zZ3N0ciAia2FuIGJlc3RhbmQgbmlldCBzbHVpdGVuIgorCisjIEJldGVyZSBmb3JtdWxlcmluZyAoaWstdm9ybSB2ZXJtaWpkZW4pPworIzogc3JjL2ZpbGVzLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIG92ZXJ3cml0ZSB0aGUgaW5wdXQgZmlsZSAlcyIKK21zZ3N0ciAiaWsgd2VpZ2VyIG9tIGludm9lcmJlc3RhbmQgJXMgdGUgb3ZlcnNjaHJpanZlbiIKKworIzogc3JjL2ZpbGVzLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0aW5nIG91dHB1dHMgdG8gZmlsZSAlcyIKK21zZ3N0ciAiY29uZmxpY3RlcmVuZGUgdWl0dm9lciBuYWFyIGJlc3RhbmQgJXMiCisKKyM6IHNyYy9nZXRhcmdzLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeSBgJXMgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKK21zZ3N0ciAiUHJvYmVlciBgJXMgLS1oZWxwJyB2b29yIG1lZXIgaW5mb3JtYXRpZS5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFtPUFRJT05dLi4uIEZJTEVcbiIKK21zZ3N0ciAiR2VicnVpazogJXMgW09QVElFXS4uLiBCRVNUQU5EXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzAyCittc2dpZCAiIgorIkdlbmVyYXRlIGEgZGV0ZXJtaW5pc3RpYyBMUiBvciBnZW5lcmFsaXplZCBMUiAoR0xSKSBwYXJzZXIgZW1wbG95aW5nXG4iCisiTEFMUigxKSwgSUVMUigxKSwgb3IgY2Fub25pY2FsIExSKDEpIHBhcnNlciB0YWJsZXMuICBJRUxSKDEpIGFuZFxuIgorImNhbm9uaWNhbCBMUigxKSBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwOQorbXNnaWQgIiIKKyJNYW5kYXRvcnkgYXJndW1lbnRzIHRvIGxvbmcgb3B0aW9ucyBhcmUgbWFuZGF0b3J5IGZvciBzaG9ydCBvcHRpb25zIHRvby5cbiIKK21zZ3N0ciAiIgorIldhbm5lZXIgZWVuIGxhbmdlIG9wdGllIGVlbiBhcmd1bWVudCBhbHMgdmVycGxpY2h0IGFhbmR1aWR0LCBkYW4gaXMgZGF0XG4iCisiYXJndW1lbnQgZXZlbmVlbnMgdmVycGxpY2h0IGJpaiBkZSBvdmVyZWVua29tc3RpZ2Uga29ydGUgb3B0aWUuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzEyCittc2dpZCAiVGhlIHNhbWUgaXMgdHJ1ZSBmb3Igb3B0aW9uYWwgYXJndW1lbnRzLlxuIgorbXNnc3RyICJIZXR6ZWxmZGUgZ2VsZHQgdm9vciBvcHRpb25lbGUgYXJndW1lbnRlbi5cbiIKKworIyBNaXNzY2hpZW4gYmV0ZXIgJ2VlbiBQT1NJWC1jb21wYXRpYmVsZSB5YWNjJz8KKyMgRW4gZGUgdGVrc3Qgdm9vciAtVyBrYW4gYmV0ZXIgZGVuayBpay4KKyM6IHNyYy9nZXRhcmdzLmM6MzE2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJPcGVyYXRpb24gbW9kZXM6XG4iCisiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIKKyIgICAgICAtLXByaW50LWxvY2FsZWRpciAgICAgIG91dHB1dCBkaXJlY3RvcnkgY29udGFpbmluZyBsb2NhbGUtZGVwZW5kZW50ICIKKyJkYXRhXG4iCisiICAgICAgLS1wcmludC1kYXRhZGlyICAgICAgICBvdXRwdXQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgc2tlbGV0b25zIGFuZCBYU0xUXG4iCisiICAteSwgLS15YWNjICAgICAgICAgICAgICAgICBlbXVsYXRlIFBPU0lYIFlhY2NcbiIKKyIgIC1XLCAtLXdhcm5pbmdzWz1DQVRFR09SWV0gIHJlcG9ydCB0aGUgd2FybmluZ3MgZmFsbGluZyBpbiBDQVRFR09SWVxuIgorIiAgLWYsIC0tZmVhdHVyZVs9RkVBVFVSRV0gICAgYWN0aXZhdGUgbWlzY2VsbGFuZW91cyBmZWF0dXJlc1xuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiV2Vya3dpanplczpcbiIKKyIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIHRvb24gZGV6ZSBodWxwdGVrc3QgZW4gYmXDq2luZGlnIGhldCBwcm9ncmFtbWFcbiIKKyIgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgIHRvb24gdmVyc2llLWluZm9ybWF0aWUgZW4gYmXDq2luZGlnIGhldCAiCisicHJvZ3JhbW1hXG4iCisiICAgICAgLS1wcmludC1sb2NhbGVkaXIgICAgICB0b29uIGRlIGZvbGRlciBtZXQgcmVnaW8tYWZoYW5rZWxpamtlIGdlZ2V2ZW5zXG4iCisiICAgICAgLS1wcmludC1kYXRhZGlyICAgICAgICB0b29uIGRlIGZvbGRlciBtZXQgc2tlbGV0dGVuIGVuIFhTTFQtYmVzdGFuZGVuXG4iCisiICAteSwgLS15YWNjICAgICAgICAgICAgICAgICBlbXVsZWVyIFBPU0lYIFlhY2NcbiIKKyIgIC1XLCAtLXdhcm5pbmdzWz1TT09SVF0gICAgIHdhYXJzY2h1dyBvdmVyIHByb2JsZW1lbiAodmFuIGhldCB0eXBlIFNPT1JUKVxuIgorCisjIENvcnJlY3RlIHZlcnZvZWdpbmcgdmFuICd2b29ydm9lZ2VuJz8KKyMgQmV0ZXJlIHZlcnRhbGluZyB2b29yICdkaXJlY3RpdmVzJz8KKyM6IHNyYy9nZXRhcmdzLmM6MzI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFyc2VyOlxuIgorIiAgLUwsIC0tbGFuZ3VhZ2U9TEFOR1VBR0UgICAgICAgICAgc3BlY2lmeSB0aGUgb3V0cHV0IHByb2dyYW1taW5nIGxhbmd1YWdlXG4iCisiICAtUywgLS1za2VsZXRvbj1GSUxFICAgICAgICAgICAgICBzcGVjaWZ5IHRoZSBza2VsZXRvbiB0byB1c2VcbiIKKyIgIC10LCAtLWRlYnVnICAgICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnQgdGhlIHBhcnNlciBmb3IgZGVidWdnaW5nXG4iCisiICAgICAgLS1sb2NhdGlvbnMgICAgICAgICAgICAgICAgICBlbmFibGUgbG9jYXRpb24gc3VwcG9ydFxuIgorIiAgLUQsIC0tZGVmaW5lPU5BTUVbPVZBTFVFXSAgICAgICAgc2ltaWxhciB0byAnJWRlZmluZSBOQU1FIFwiVkFMVUVcIidcbiIKKyIgIC1GLCAtLWZvcmNlLWRlZmluZT1OQU1FWz1WQUxVRV0gIG92ZXJyaWRlICclZGVmaW5lIE5BTUUgXCJWQUxVRVwiJ1xuIgorIiAgLXAsIC0tbmFtZS1wcmVmaXg9UFJFRklYICAgICAgICAgcHJlcGVuZCBQUkVGSVggdG8gdGhlIGV4dGVybmFsIHN5bWJvbHNcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQgYnkgJy1EYXBpLnByZWZpeD1QUkVGSVgnXG4iCisiICAtbCwgLS1uby1saW5lcyAgICAgICAgICAgICAgICAgICBkb24ndCBnZW5lcmF0ZSAnI2xpbmUnIGRpcmVjdGl2ZXNcbiIKKyIgIC1rLCAtLXRva2VuLXRhYmxlICAgICAgICAgICAgICAgIGluY2x1ZGUgYSB0YWJsZSBvZiB0b2tlbiBuYW1lc1xuIgorbXNnc3RyICIiCisiUGFyc2VyOlxuIgorIiAgLUwsIC0tbGFuZ3VhZ2U9VEFBTCAgICAgICAgZ2VlZiBkZSB0ZSBnZWJydWlrZW4gcHJvZ3JhbW1lZXJ0YWFsIG9wXG4iCisiICAtUywgLS1za2VsZXRvbj1CRVNUQU5EICAgICBnZWVmIGhldCB0ZSBnZWJydWlrZW4gc2tlbGV0YmVzdGFuZCBvcFxuIgorIiAgLXQsIC0tZGVidWcgICAgICAgICAgICAgICAgbWFhayBkZSBwYXJzZXIgZ2VzY2hpa3Qgdm9vciBkZWJ1Z2dpbmdcbiIKKyIgICAgICAtLWxvY2F0aW9ucyAgICAgICAgICAgIGhvdWQgc3ltYm9vbGxva2F0aWVzIGJpalxuIgorIiAgLXAsIC0tbmFtZS1wcmVmaXg9UFJFRklYICAgZ2VlZiBkZSBleHRlcm5lIHN5bWJvb2xuYW1lbiBkZXplIFBSRUZJWFxuIgorIiAgLWwsIC0tbm8tbGluZXMgICAgICAgICAgICAgZ2VuZXJlZXIgZ2VlbiBgI2xpbmUnIGRpcmVjdGlldmVuXG4iCisiICAtaywgLS10b2tlbi10YWJsZSAgICAgICAgICBnZW5lcmVlciBvb2sgZWVuIHRhYmVsIHZhbiB0b2tlbm5hbWVuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzQ2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJPdXRwdXQ6XG4iCisiICAgICAgLS1kZWZpbmVzWz1GSUxFXSAgICAgICBhbHNvIHByb2R1Y2UgYSBoZWFkZXIgZmlsZVxuIgorIiAgLWQgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZXdpc2UgYnV0IGNhbm5vdCBzcGVjaWZ5IEZJTEUgKGZvciBQT1NJWCAiCisiWWFjYylcbiIKKyIgIC1yLCAtLXJlcG9ydD1USElOR1MgICAgICAgIGFsc28gcHJvZHVjZSBkZXRhaWxzIG9uIHRoZSBhdXRvbWF0b25cbiIKKyIgICAgICAtLXJlcG9ydC1maWxlPUZJTEUgICAgIHdyaXRlIHJlcG9ydCB0byBGSUxFXG4iCisiICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgICBzYW1lIGFzIGAtLXJlcG9ydD1zdGF0ZSdcbiIKKyIgIC1iLCAtLWZpbGUtcHJlZml4PVBSRUZJWCAgIHNwZWNpZnkgYSBQUkVGSVggZm9yIG91dHB1dCBmaWxlc1xuIgorIiAgLW8sIC0tb3V0cHV0PUZJTEUgICAgICAgICAgbGVhdmUgb3V0cHV0IHRvIEZJTEVcbiIKKyIgIC1nLCAtLWdyYXBoWz1GSUxFXSAgICAgICAgIGFsc28gb3V0cHV0IGEgZ3JhcGggb2YgdGhlIGF1dG9tYXRvblxuIgorIiAgLXgsIC0teG1sWz1GSUxFXSAgICAgICAgICAgYWxzbyBvdXRwdXQgYW4gWE1MIHJlcG9ydCBvZiB0aGUgYXV0b21hdG9uXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhlIFhNTCBzY2hlbWEgaXMgZXhwZXJpbWVudGFsKVxuIgorbXNnc3RyICIiCisiVWl0dm9lcjpcbiIKKyIgICAgICAtLWRlZmluZXNbPUJFU1RBTkRdICAgIGdlbmVyZWVyIG9vayBlZW4gaGVhZGVyLWJlc3RhbmRcbiIKKyIgIC1kICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW0sIG1hYXIgYmVzdGFuZCBrYW4gbmlldCBvcGVnZWdldmVuIHdvcmRlblxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvb3IgUE9TSVggWWFjYylcbiIKKyIgIC1yLCAtLXJlcG9ydD1ESU5HRU4gICAgICAgIGdlbmVyZWVyIG9vayBkZXRhaWxzIG92ZXIgZGUgYXV0b21hYXRcbiIKKyIgICAgICAtLXJlcG9ydC1maWxlPUJFU1RBTkQgIHNjaHJpamYgaGV0IHJhcHBvcnQgd2VnIGluIEJFU1RBTkRcbiIKKyIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIGhldHplbGZkZSBhbHMgYC0tcmVwb3J0PXN0YXRlJ1xuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg9UFJFRklYICAgZ2VlZiBkZSB1aXR2b2VyYmVzdGFuZHNuYW1lbiBkZXplIFBSRUZJWFxuIgorIiAgLW8sIC0tb3V0cHV0PUJFU1RBTkQgICAgICAgc2NocmlqZiB1aXR2b2VyIG5hYXIgQkVTVEFORFxuIgorIiAgLWcsIC0tZ3JhcGhbPUJFU1RBTkRdICAgICAgZ2VuZXJlZXIgb29rIGVlbiBncmFhZiB2YW4gZGUgYXV0b21hYXRcbiIKKyIgIC14LCAtLXhtbFs9QkVTVEFORF0gICAgICAgIGdlbmVyZWVyIG9vayBlZW4gWE1MLXJhcHBvcnQgb3ZlciBkZSBhdXRvbWFhdFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhldCBYTUwgc2NoZW1hIGlzIGV4cGVyaW1lbnRlZWwpXG4iCisiXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzYxCisjLCBmdXp6eQorbXNnaWQgIiIKKyJXYXJuaW5nIGNhdGVnb3JpZXMgaW5jbHVkZTpcbiIKKyIgIGBtaWRydWxlLXZhbHVlcycgIHVuc2V0IG9yIHVudXNlZCBtaWRydWxlIHZhbHVlc1xuIgorIiAgYHlhY2MnICAgICAgICAgICAgaW5jb21wYXRpYmlsaXRpZXMgd2l0aCBQT1NJWCBZYWNjXG4iCisiICBgY29uZmxpY3RzLXNyJyAgICBTL1IgY29uZmxpY3RzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgY29uZmxpY3RzLXJyJyAgICBSL1IgY29uZmxpY3RzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgZGVwcmVjYXRlZCcgICAgICBvYnNvbGV0ZSBjb25zdHJ1Y3RzXG4iCisiICBgb3RoZXInICAgICAgICAgICBhbGwgb3RoZXIgd2FybmluZ3MgKGVuYWJsZWQgYnkgZGVmYXVsdClcbiIKKyIgIGBhbGwnICAgICAgICAgICAgIGFsbCB0aGUgd2FybmluZ3NcbiIKKyIgIGBuby1DQVRFR09SWScgICAgIHR1cm4gb2ZmIHdhcm5pbmdzIGluIENBVEVHT1JZXG4iCisiICBgbm9uZScgICAgICAgICAgICB0dXJuIG9mZiBhbGwgdGhlIHdhcm5pbmdzXG4iCisiICBgZXJyb3InICAgICAgICAgICB0cmVhdCB3YXJuaW5ncyBhcyBlcnJvcnNcbiIKK21zZ3N0ciAiIgorIlNvb3J0ZW4gdmFuIHdhYXJzY2h1d2luZyB6aWpuOlxuIgorIiAgYG1pZHJ1bGUtdmFsdWVzJyAgbWlkcnVsZSB3YWFyZGVuIGRpZSBuaWV0IGdlemV0IG9mIGdlYnJ1aWt0IHdvcmRlblxuIgorIiAgYHlhY2MnICAgICAgICAgICAgZGluZ2VuIGRpZSBuaWV0IGNvbXBhdGliZWwgemlqbiBtZXQgUE9TSVggWWFjY1xuIgorIiAgYGFsbCcgICAgICAgICAgICAgYWxsZSB3YWFyc2NodXdpbmdlblxuIgorIiAgYG5vLVNPT1JUJyAgICAgICAgZ2VlbiB3YWFyc2NodXdpbmdlbiB2YW4gdHlwZSBTT09SVFxuIgorIiAgYG5vbmUnICAgICAgICAgICAgaGVsZW1hYWwgZ2VlbiB3YWFyc2NodXdpbmdlblxuIgorIiAgYGVycm9yJyAgICAgICAgICAgYmVzY2hvdXcgd2FhcnNjaHV3aW5nZW4gYWxzIGZvdXRlblxuIgorIlxuIgorCisjIFZlcnNjaGlsbGVuZGUgZGluZ2VuIGRpZSBiZXRlciB6b3VkZW4gbW9ldGVuIGt1bm5lbiAtIHpla2VyIGRlICdpdGVtc2V0JyB0ZWtzdAorIzogc3JjL2dldGFyZ3MuYzozNzYKK21zZ2lkICIiCisiVEhJTkdTIGlzIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMgdGhhdCBjYW4gaW5jbHVkZTpcbiIKKyIgIGBzdGF0ZScgICAgICAgIGRlc2NyaWJlIHRoZSBzdGF0ZXNcbiIKKyIgIGBpdGVtc2V0JyAgICAgIGNvbXBsZXRlIHRoZSBjb3JlIGl0ZW0gc2V0cyB3aXRoIHRoZWlyIGNsb3N1cmVcbiIKKyIgIGBsb29rYWhlYWQnICAgIGV4cGxpY2l0bHkgYXNzb2NpYXRlIGxvb2thaGVhZCB0b2tlbnMgdG8gaXRlbXNcbiIKKyIgIGBzb2x2ZWQnICAgICAgIGRlc2NyaWJlIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMgc29sdmluZ1xuIgorIiAgYGFsbCcgICAgICAgICAgaW5jbHVkZSBhbGwgdGhlIGFib3ZlIGluZm9ybWF0aW9uXG4iCisiICBgbm9uZScgICAgICAgICBkaXNhYmxlIHRoZSByZXBvcnRcbiIKK21zZ3N0ciAiIgorIkRJTkdFTiBpcyBlZW4gZG9vciBrb21tYSdzIGdlc2NoZWlkZW4gbGlqc3QgdmFuIHdvb3JkZW47IGdlbGRpZ2Ugd29vcmRlbiAiCisiemlqbjpcbiIKKyIgIGBzdGF0ZScgICAgICAgIGJlc2NocmlqZiBkZSB0b2VzdGFuZGVuIHZhbiBkZSBhdXRvbWFhdFxuIgorIiAgYGl0ZW1zZXQnICAgICAgdmVydm9sbGVkaWcgZGUgdmVyemFtZWxpbmdlbiB2YW4ga2Vybi1pdGVtcyBtZXQgaHVuICIKKyJjbG9zdXJlc1xuIgorIiAgYGxvb2stYWhlYWQnICAgdmVyYmluZCBsb29rLWFoZWFkIHRva2VucyBleHBsaWNpZXQgbWV0IGl0ZW1zXG4iCisiICBgc29sdmVkJyAgICAgICBiZXNjaHJpamYgaGV0IG9wbG9zc2VuIHZhbiBzaGlmdC9yZWR1Y3RpZSBjb25mbGljdGVuXG4iCisiICBgYWxsJyAgICAgICAgICBwcm9kdWNlZXIgYWxsZSBib3Zlbmdlbm9lbWRlIGluZm9ybWF0aWVcbiIKKyIgIGBub25lJyAgICAgICAgIHNjaGFrZWwgZGUgcmFwcG9ydGVyaW5nIHVpdFxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM4NworbXNnaWQgIiIKKyJGRUFUVVJFIGlzIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMgdGhhdCBjYW4gaW5jbHVkZTpcbiIKKyIgIGBjYXJldCcgICAgICAgIHNob3cgZXJyb3JzIHdpdGggY2FyZXRzXG4iCisiICBgYWxsJyAgICAgICAgICBhbGwgb2YgdGhlIGFib3ZlXG4iCisiICBgbm9uZScgICAgICAgICBkaXNhYmxlIGFsbCBvZiB0aGUgYWJvdmVcbiIKKyIgICIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIk1lbGQgZm91dGVuIGluIGRlIHZlcnRhbGluZyBhYW4gPHZlcnRhbGluZ0B2cmlqc2NocmlmdC5vcmc+LlxuIgorIk1lbGQgYnVncyBhYW4gPCVzPi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaG9tZSBwYWdlOiA8JXM+LlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk3Cittc2dpZCAiR2VuZXJhbCBoZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4uXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IFJlcGxhY2UgTEFOR19DT0RFIGluIHRoaXMgVVJMIHdpdGggeW91ciBsYW5ndWFnZQorIy4gY29kZSA8aHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS9MQU5HX0NPREUuaHRtbD4gdG8KKyMuIGZvcm0gb25lIG9mIHRoZSBVUkxzIGF0IGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vLgorIy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRoZSBlbnRpcmUgVVJMIHdpdGggeW91ciB0cmFuc2xhdGlvbiB0ZWFtJ3MKKyMuIGVtYWlsIGFkZHJlc3MuCisjOiBzcmMvZ2V0YXJncy5jOjQxMAorbXNnaWQgIlJlcG9ydCB0cmFuc2xhdGlvbiBidWdzIHRvIDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtLz4uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzo0MTIKK21zZ2lkICJGb3IgY29tcGxldGUgZG9jdW1lbnRhdGlvbiwgcnVuOiBpbmZvIGJpc29uLlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImJpc29uIChHTlUgQmlzb24pICVzIgorbXNnc3RyICJiaXNvbiAoR05VIEJpc29uKSAlcyIKKworIzogc3JjL2dldGFyZ3MuYzo0MzAKK21zZ2lkICJXcml0dGVuIGJ5IFJvYmVydCBDb3JiZXR0IGFuZCBSaWNoYXJkIFN0YWxsbWFuLlxuIgorbXNnc3RyICJHZXNjaHJldmVuIGRvb3IgUm9iZXJ0IENvcmJldHQgZW4gUmljaGFyZCBTdGFsbG1hbi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29weXJpZ2h0IChDKSAlZCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKK21zZ3N0ciAiQ29weXJpZ2h0IChDKSAlZCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MzcKK21zZ2lkICIiCisiVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk9cbiIKKyJ3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cbiIKK21zZ3N0ciAiIgorIkRpdCBpcyB2cmlqZSBzb2Z0d2FyZTsgemllIGRlIGJyb25jb2RlIHZvb3Iga29waWVlcmNvbmRpdGllcy4gIEVyIGlzIEdFRU5cbiIKKyJnYXJhbnRpZTsgemVsZnMgbmlldCB2b29yIFZFUktPT1BCQUFSSEVJRCBvZiBHRVNDSElLVEhFSUQgVk9PUiBFRU4gQkVQQUFMRFxuIgorIkRPRUwuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHNrZWxldG9uIGRlY2xhcmF0aW9ucyBhcmUgaW52YWxpZCIKK21zZ3N0ciAibWVlcmRlcmUgc2tlbGV0dGVuIG9wZ2V2ZW4gaXMgbmlldCB0b2VnZXN0YWFuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ3NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgbGFuZ3VhZ2UiCittc2dzdHIgIm9uZ2VsZGlnZSB0YWFsIGAlcyciCisKKyM6IHNyYy9nZXRhcmdzLmM6NDc5Cittc2dpZCAibXVsdGlwbGUgbGFuZ3VhZ2UgZGVjbGFyYXRpb25zIGFyZSBpbnZhbGlkIgorbXNnc3RyICJtZWVyZGVyZSB0YWxlbiBvcGdldmVuIGlzIG5pZXQgdG9lZ2VzdGFhbiIKKworIzogc3JjL2dldGFyZ3MuYzo3NDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBtaXNzaW5nIG9wZXJhbmQiCittc2dzdHIgIm9wZXJhbmQgb250YnJlZWt0IG5hIGAlcyciCisKKyM6IHNyYy9nZXRhcmdzLmM6NzQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJleHRyYSBvcGVyYW5kICVzIgorbXNnc3RyICJvdmVydG9sbGlnZSBvcGVyYW5kIGAlcyciCisKKyM6IHNyYy9ncmFtLmM6MTEyCittc2dpZCAiZW1wdHkiCittc2dzdHIgImxlZWciCisKKyM6IHNyYy9ncmFtLmM6MjAxCittc2dpZCAiR3JhbW1hciIKK21zZ3N0ciAiR3JhbW1hdGljYSIKKworIzogc3JjL2dyYXBodml6LmM6NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIi8vIEdlbmVyYXRlZCBieSAlcy5cbiIKKyIvLyBSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorIi8vIEhvbWUgcGFnZTogPCVzPi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvbG9jYXRpb24uYzo5MyBzcmMvc2Nhbi1ncmFtLmw6ODU5CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgbnVtYmVyIG92ZXJmbG93IgorbXNnc3RyICJvdmVyZmxvdyB2YW4gbGlqbm51bW1lcnMiCisKKyM6IHNyYy9sb2NhdGlvbi5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbHVtbiBudW1iZXIgb3ZlcmZsb3ciCittc2dzdHIgIm92ZXJmbG93IHZhbiBrb2xvbW51bW1lcnMiCisKKyM6IHNyYy9tYWluLmM6MTQ2Cittc2dpZCAicnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzIgorbXNnc3RyICJyZWdlbCBpcyBudXR0ZWxvb3MgaW4gZGUgZ3JhbW1hdGljYSBvbXdpbGxlIHZhbiBjb25mbGljdGVuIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJSVkZWZpbmUgdmFyaWFibGUgJXMgcmVkZWZpbmVkIgorbXNnc3RyICIlcyBgJXMnIG9wbmlldXcgZ2VkZWZpbmllZXJkIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ1MworbXNnaWQgInByZXZpb3VzIGRlZmluaXRpb24iCittc2dzdHIgImVlcmRlcmUgZGVmaW5pdGllIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ5MCBzcmMvbXVzY2xlLXRhYi5jOjUwNCBzcmMvbXVzY2xlLXRhYi5jOjU1NgorIzogc3JjL211c2NsZS10YWIuYzo2MjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgJXMiCittc2dzdHIgIm9uZ2VsZGlnZSB3YWFyZGUgdm9vciAlJWRlZmluZSB2YXJpYWJlbGUgYCVzJzogYCVzJyIKKworIzogc3JjL211c2NsZS10YWIuYzo1NTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICUlZGVmaW5lIEJvb2xlYW4gdmFyaWFibGUgJXMiCittc2dzdHIgIm9uZ2VsZGlnZSB3YWFyZGUgdm9vciBCb29sZWFhbnNlICUlZGVmaW5lIHZhcmlhYmVsZSBgJXMnIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjYwOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJSVkZWZpbmUgdmFyaWFibGUgJXM6ICVzIgorbXNnc3RyICJvbmdlbGRpZ2Ugd2FhcmRlIHZvb3IgJSVkZWZpbmUgdmFyaWFiZWxlIGAlcyc6IGAlcyciCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjEzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJhY2NlcHRlZCB2YWx1ZTogJXMiCittc2dzdHIgIndhYXJkZSBuaWV0IGdlYnJ1aWt0OiAkJWQiCisKKyM6IHNyYy9wYXJzZS1ncmFtLnk6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgaWRlbnRpZmllciBpbiBwYXJhbWV0ZXIgZGVjbGFyYXRpb24iCittc2dzdHIgIm5hYW0gb250YnJlZWt0IGluIHBhcmFtZXRlcmRlY2xhcmF0aWUiCisKKyM6IHNyYy9wcmludC5jOjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiB0eXBlICVkIGlzICVzXG4iCittc2dzdHIgIiB0eXBlICVkIGlzICVzXG4iCisKKyM6IHNyYy9wcmludC5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICJzaGlmdCwgYW5kIGdvIHRvIHN0YXRlICVkXG4iCittc2dzdHIgInNoaWZ0LCBlbiBnYSBuYWFyIHRvZXN0YW5kICVkXG4iCisKKyM6IHNyYy9wcmludC5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJnbyB0byBzdGF0ZSAlZFxuIgorbXNnc3RyICJnYSBuYWFyIHRvZXN0YW5kICVkXG4iCisKKyM6IHNyYy9wcmludC5jOjIwMworbXNnaWQgImVycm9yIChub25hc3NvY2lhdGl2ZSlcbiIKK21zZ3N0ciAiZm91dCAobmlldCBhc3NvY2lhdGllZilcbiIKKworIzogc3JjL3ByaW50LmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZHVjZSB1c2luZyBydWxlICVkICglcykiCittc2dzdHIgInJlZHVjZXJlbiB2aWEgcmVnZWwgJWQgKCVzKSIKKworIzogc3JjL3ByaW50LmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgImFjY2VwdCIKK21zZ3N0ciAiYWNjZXB0ZWVyIgorCisjOiBzcmMvcHJpbnQuYzoyNjQgc3JjL3ByaW50LmM6MzM4Cittc2dpZCAiJGRlZmF1bHQiCittc2dzdHIgIiRzdGFuZGFhcmQiCisKKyM6IHNyYy9wcmludC5jOjM3MyBzcmMvcHJpbnRfZ3JhcGguYzo3OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU3RhdGUgJWQiCittc2dzdHIgIlN0YWF0ICVkIgorCisjOiBzcmMvcHJpbnQuYzo0MDkKK21zZ2lkICJUZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIiCittc2dzdHIgIkVpbmRzeW1ib2xlbiwgbWV0IGRlIHJlZ2VscyB3YWFyaW4gemUgdm9vcmtvbWVuIgorCisjIEJldGVyZSB2ZXJ0YWxpbmcgdm9vciBub24tdGVybWluYWxzPyAndHVzc2Vuc3ltYm9sZW4nPworIzogc3JjL3ByaW50LmM6NDM2Cittc2dpZCAiTm9udGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyIgorbXNnc3RyICJOaWV0LWVpbmRzeW1ib2xlbiwgbWV0IGRlIHJlZ2VscyB3YWFyaW4gemUgdm9vcmtvbWVuIgorCisjOiBzcmMvcHJpbnQuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uIGxlZnQ6IgorbXNnc3RyICIgbGlua3M6IgorCisjOiBzcmMvcHJpbnQuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uIHJpZ2h0OiIKK21zZ3N0ciAiIHJlY2h0czoiCisKKyM6IHNyYy9wcmludC5jOjUxMAorbXNnaWQgIlJ1bGVzIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHMiCittc2dzdHIgIlJlZ2VscyBkaWUsIG9td2lsbGUgdmFuIGNvbmZsaWN0ZW4sIG51dHRlbG9vcyB6aWpuIGluIGRlIGdyYW1tYXRpY2EiCisKKyM6IHNyYy9yZWFkZXIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSAlcyBkZWNsYXJhdGlvbnMiCittc2dzdHIgIm1lZXJkZXJlICVzIGRlY2xhcmF0aWVzIgorCisjOiBzcmMvcmVhZGVyLmM6MTMzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJyZXN1bHQgdHlwZSBjbGFzaCBvbiBtZXJnZSBmdW5jdGlvbiAlczogPCVzPiAhPSA8JXM+IgorbXNnc3RyICJjb25mbGljdCB0dXNzZW4gcmVzdWx0YWF0dHlwZXMgYmlqIG1lcmdlLWZ1bmN0aWUgYCVzJzogPCVzPiAhPSA8JXM+IgorCisjOiBzcmMvcmVhZGVyLmM6MTM5IHNyYy9zeW10YWIuYzoxNTYgc3JjL3N5bXRhYi5jOjE2NiBzcmMvc3ltdGFiLmM6OTM4CisjOiBzcmMvc3ltdGFiLmM6OTUzIHNyYy9zeW10YWIuYzo5Njggc3JjL3N5bXRhYi5jOjk4MworbXNnaWQgInByZXZpb3VzIGRlY2xhcmF0aW9uIgorbXNnc3RyICJlZXJkZXJlIGRlY2xhcmF0aWUiCisKKyM6IHNyYy9yZWFkZXIuYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlZCBzeW1ib2wgbmFtZSBmb3IgJXMgaWdub3JlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVhZGVyLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bGUgZ2l2ZW4gZm9yICVzLCB3aGljaCBpcyBhIHRva2VuIgorbXNnc3RyICJyZWdlbCBvcGdlZ2V2ZW4gdm9vciB0b2tlbiAoJXMpIgorCisjOiBzcmMvcmVhZGVyLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgInR5cGUgY2xhc2ggb24gZGVmYXVsdCBhY3Rpb246IDwlcz4gIT0gPCVzPiIKK21zZ3N0ciAidHlwZS1jb25mbGljdCBiaWogc3RhbmRhYXJkYWt0aWU6IDwlcz4gIT0gPCVzPiIKKworIzogc3JjL3JlYWRlci5jOjMxMAorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBydWxlIGZvciB0eXBlZCBub250ZXJtaW5hbCwgYW5kIG5vIGFjdGlvbiIKK21zZ3N0ciAibGVnZSByZWdlbCB2b29yIG5pZXQtZWluZHN5bWJvb2wgbWV0IHR5cGUsIGVuIGdlZW4gYWN0aWUiCisKKyM6IHNyYy9yZWFkZXIuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW51c2VkIHZhbHVlOiAkJWQiCittc2dzdHIgIndhYXJkZSBuaWV0IGdlYnJ1aWt0OiAkJWQiCisKKyM6IHNyYy9yZWFkZXIuYzozMzAKK21zZ2lkICJ1bnNldCB2YWx1ZTogJCQiCittc2dzdHIgIndhYXJkZSBuaWV0IGdlemV0OiAkJCIKKworIzogc3JjL3JlYWRlci5jOjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b2tlbiBmb3IgJSVwcmVjIGlzIG5vdCBkZWZpbmVkOiAlcyIKK21zZ3N0ciAidG9rZW4gdm9vciAlJXByZWMgaXMgbmlldCBnZWRlZmluaWVlcmQ6ICVzIgorCisjOiBzcmMvcmVhZGVyLmM6NDMxIHNyYy9yZWFkZXIuYzo0NDUgc3JjL3JlYWRlci5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5IG9uZSAlcyBhbGxvd2VkIHBlciBydWxlIgorbXNnc3RyICJzbGVjaHRzIMOpw6luICVzIHRvZWdlc3RhYW4gcGVyIHJlZ2VsIgorCisjOiBzcmMvcmVhZGVyLmM6NDQxIHNyYy9yZWFkZXIuYzo0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWZmZWN0cyBvbmx5IEdMUiBwYXJzZXJzIgorbXNnc3RyICIlcyBpcyBlbmtlbCB2YW4gdG9lcGFzc2luZyBvcCBHTFItcGFyc2VycyIKKworIzogc3JjL3JlYWRlci5jOjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBtdXN0IGJlIGZvbGxvd2VkIGJ5IHBvc2l0aXZlIG51bWJlciIKK21zZ3N0ciAiJXMgbW9ldCBnZXZvbGdkIHdvcmRlbiBkb29yIGVlbiBwb3NpdGllZiBnZXRhbCIKKworIzogc3JjL3JlYWRlci5jOjU1NAorIywgYy1mb3JtYXQKK21zZ2lkICJydWxlIGlzIHRvbyBsb25nIgorbXNnc3RyICJyZWdlbCBpcyB0ZSBsYW5nIgorCisjOiBzcmMvcmVhZGVyLmM6NjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJ1bGVzIGluIHRoZSBpbnB1dCBncmFtbWFyIgorbXNnc3RyICJpbnZvZXJncmFtbWF0aWNhIGJldmF0IGdlZW4gcmVnZWxzIgorCisjOiBzcmMvcmVkdWNlLmM6MjQxCittc2dpZCAicnVsZSB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgInJlZ2VsIGlzIG51dHRlbG9vcyBpbiBkZSBncmFtbWF0aWNhIgorCisjOiBzcmMvcmVkdWNlLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogJXMiCittc2dzdHIgIm5pZXQtZWluZHN5bWJvb2wgaXMgbnV0dGVsb29zIGluIGRlIGdyYW1tYXRpY2E6ICVzIgorCisjOiBzcmMvcmVkdWNlLmM6MzUwCittc2dpZCAiTm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAiTmlldC1laW5kc3ltYm9sZW4gZGllIG51dHRlbG9vcyB6aWpuIGluIGRlIGdyYW1tYXRpY2EiCisKKyM6IHNyYy9yZWR1Y2UuYzozNjMKK21zZ2lkICJUZXJtaW5hbHMgdW51c2VkIGluIGdyYW1tYXIiCittc2dzdHIgIkVpbmRzeW1ib2xlbiBkaWUgbmlldCBnZWJydWlrdCB3b3JkZW4gaW4gZGUgZ3JhbW1hdGljYSIKKworIzogc3JjL3JlZHVjZS5jOjM3MgorbXNnaWQgIlJ1bGVzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAiUmVnZWxzIGRpZSBudXR0ZWxvb3MgemlqbiBpbiBkZSBncmFtbWF0aWNhIgorCisjOiBzcmMvcmVkdWNlLmM6Mzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ2lkX3BsdXJhbCAiJWQgbm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0clswXSAiJWQgbmlldC1laW5kc3ltYm9vbCBpcyBudXR0ZWxvb3MgaW4gZGUgZ3JhbW1hdGljYSIKK21zZ3N0clsxXSAiJWQgbmlldC1laW5kc3ltYm9sZW4gemlqbiBudXR0ZWxvb3MgaW4gZGUgZ3JhbW1hdGljYSIKKworIzogc3JjL3JlZHVjZS5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ2lkX3BsdXJhbCAiJWQgcnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyWzBdICIlZCByZWdlbCBpcyBudXR0ZWxvb3MgaW4gZGUgZ3JhbW1hdGljYSIKK21zZ3N0clsxXSAiJWQgcmVnZWxzIHppam4gbnV0dGVsb29zIGluIGRlIGdyYW1tYXRpY2EiCisKKyMgSWsgX2RlbmtfIGRhdCBkaXQgY29ycmVjdCB3ZWVyZ2VlZnQgd2F0IGVyIGJlZG9lbGQgd29yZHQgKG0uYS53LiBlciBpcyBnZWVuIHJlZ2VsIHZvb3IgaGV0IHN0YXJ0c3ltYm9vbCkKKyM6IHNyYy9yZWR1Y2UuYzo0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnQgc3ltYm9sICVzIGRvZXMgbm90IGRlcml2ZSBhbnkgc2VudGVuY2UiCittc2dzdHIgInVpdCBzdGFydHN5bWJvb2wgJXMga2FuIGdlZW4gZW5rZWxlIHppbiBhZmdlbGVpZCB3b3JkZW4iCisKKyM6IHNyYy9zY2FuLWNvZGUubDoxODgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN0cmF5ICclcyciCittc2dzdHIgImxvc3NlIGAkJyIKKworIzogc3JjL3NjYW4tY29kZS5sOjIyOQorbXNnaWQgImEgJzsnIG1pZ2h0IGJlIG5lZWRlZCBhdCB0aGUgZW5kIG9mIGFjdGlvbiBjb2RlIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyMzIKK21zZ2lkICJmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24gd2lsbCBub3QgYWRkIHRoZSAnOyciCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2Ugb2YgWVlGQUlMLCB3aGljaCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQzMSBzcmMvc2Nhbi1jb2RlLmw6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVycyB0bzogJWMlcyBhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBvc3NpYmx5IG1lYW50OiAlYyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgaGlkaW5nICVjIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGF0ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCBjYW5ub3QgYmUgYWNjZXNzZWQgZnJvbSBtaWQtcnVsZSBhY3Rpb24gYXQgJCVkIgorbXNnc3RyICIiCisKKyMgSGllciB6b3Ugd2VsIGhldCBiZXJlaWsgYmlqIHZlcm1lbGQgbW9nZW4gd29yZGVuLi4uCisjOiBzcmMvc2Nhbi1jb2RlLmw6NTIxIHNyYy9zY2FuLWdyYW0ubDo3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZWdlciBvdXQgb2YgcmFuZ2U6ICVzIgorbXNnc3RyICJpbnRlZ2VyIGJ1aXRlbiBiZXJlaWs6ICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjEwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZmVyZW5jZTogJXMiCittc2dzdHIgIm9uZ2VsZGlnIGNvbW1hbmRvOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IgYWZ0ZXIgJyVjJywgZXhwZWN0aW5nIGludGVnZXIsIGxldHRlciwgJ18nLCAnWycsIG9yICckJyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbiBiZWZvcmUgJCVkOiAlLipzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiAlLipzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzbGVhZGluZyByZWZlcmVuY2U6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2NjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImFtYmlndW91cyByZWZlcmVuY2U6ICVzIgorbXNnc3RyICJhcmd1bWVudCAlcyB2b29yICVzIGlzIG5pZXQgZWVuZHVpZGlnIgorCisjIGJldGVyZSB2ZXJ0YWxpbmcgdm9vciAndW50eXBlZCc/CisjOiBzcmMvc2Nhbi1jb2RlLmw6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGxpY2l0IHR5cGUgZ2l2ZW4gaW4gdW50eXBlZCBncmFtbWFyIgorbXNnc3RyICJleHBsaWNpZXQgdHlwZSBvcGdlZ2V2ZW4gaW4gZWVuIHR5cGVsb3plIGdyYW1tYXRpY2EiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3NTkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiQkIGZvciB0aGUgbWlkcnVsZSBhdCAkJWQgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiQkIHZvb3IgZGUgbWlkcnVsZSBvcCAkJWQgdmFuIGAlcycgaGVlZnQgZ2VlbiBnZWRlY2xhcmVlcmQgdHlwZSIKKworIzogc3JjL3NjYW4tY29kZS5sOjc2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJCQgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiQkIHZhbiBgJXMnIGhlZWZ0IGdlZW4gZ2VkZWNsYXJlZXJkIHR5cGUiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3ODYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiQlcyBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiJCVkIHZhbiBgJXMnIGhlZWZ0IGdlZW4gZ2VkZWNsYXJlZXJkIHR5cGUiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoxNDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN0cmF5ICcsJyB0cmVhdGVkIGFzIHdoaXRlIHNwYWNlIgorbXNnc3RyICJsb3NzZSBgLCcgYmVoYW5kZWxkIGFscyB3aXRydWltdGUiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBkaXJlY3RpdmU6ICVzIgorbXNnc3RyICJvbmdlbGRpZyBjb21tYW5kbzogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyNTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaWRlbnRpZmllcjogJXMiCittc2dzdHIgIm9uZ2VsZGlnIGNvbW1hbmRvOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjI5NQorIywgZnV6enkKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciIKK21zZ2lkX3BsdXJhbCAiaW52YWxpZCBjaGFyYWN0ZXJzIgorbXNnc3RyWzBdICJvbmdlbGRpZyB0ZWtlbjogJXMiCittc2dzdHJbMV0gIm9uZ2VsZGlnIHRla2VuOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGlkZW50aWZpZXIgaW4gYnJhY2tldGVkIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW4gaWRlbnRpZmllciBleHBlY3RlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MzgxCisjLCBmdXp6eQorbXNnaWQgImludmFsaWQgY2hhcmFjdGVyIGluIGJyYWNrZXRlZCBuYW1lIgorbXNnaWRfcGx1cmFsICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gYnJhY2tldGVkIG5hbWUiCittc2dzdHJbMF0gIm9uZ2VsZGlnIHRla2VuIG5hIFxcLWVzY2FwZTogJXMiCittc2dzdHJbMV0gIm9uZ2VsZGlnIHRla2VuIG5hIFxcLWVzY2FwZTogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo0ODEgc3JjL3NjYW4tZ3JhbS5sOjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBjaGFyYWN0ZXIgbGl0ZXJhbCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NDg2IHNyYy9zY2FuLWdyYW0ubDo1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0cmEgY2hhcmFjdGVycyBpbiBjaGFyYWN0ZXIgbGl0ZXJhbCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVsbCBjaGFyYWN0ZXIiCittc2dzdHIgIm9uZ2VsZGlnIG51bGwtdGVrZW4iCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1MzEgc3JjL3NjYW4tZ3JhbS5sOjU0MSBzcmMvc2Nhbi1ncmFtLmw6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIGFmdGVyIFxcLWVzY2FwZTogJXMiCittc2dzdHIgIm9uZ2VsZGlnIGdldGFsIG5hIFxcLWVzY2FwZTogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgXFwtZXNjYXBlOiAlcyIKK21zZ3N0ciAib25nZWxkaWcgdGVrZW4gbmEgXFwtZXNjYXBlOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjkwMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyBhdCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiYCVzJyBvbnRicmVla3QgYWFuIGVpbmRlIHZhbiBiZXN0YW5kIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6OTEyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzIGF0IGVuZCBvZiBsaW5lIgorbXNnc3RyICJgJXMnIG9udGJyZWVrdCBhYW4gZWluZGUgdmFuIHJlZ2VsIgorCisjOiBzcmMvc2Nhbi1za2VsLmw6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuY2xvc2VkICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAib25iZcOraW5kaWdkICVzIGNvbW1hbmRvIGluIHNrZWxldCIKKworIzogc3JjL3NjYW4tc2tlbC5sOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gZmV3IGFyZ3VtZW50cyBmb3IgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICJ0ZSB3ZWluaWcgYXJndW1lbnRlbiB2b29yICVzIGNvbW1hbmRvIGluIHNrZWxldCIKKworIzogc3JjL3NjYW4tc2tlbC5sOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgZm9yICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAidGV2ZWVsIGFyZ3VtZW50ZW4gdm9vciAlcyBjb21tYW5kbyBpbiBza2VsZXQiCisKKyM6IHNyYy9zeW1saXN0LmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJCB2YWx1ZTogJCVkIgorbXNnc3RyICJvbmdlbGRpZ2UgJC13YWFyZGU6ICQlZCIKKworIzogc3JjL3N5bXRhYi5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlBPU0lYIFlhY2MgZm9yYmlkcyBkYXNoZXMgaW4gc3ltYm9sIG5hbWVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgc3ltYm9scyBpbiBpbnB1dCBncmFtbWFyIChsaW1pdCBpcyAlZCkiCittc2dzdHIgInRlIHZlZWwgc3ltYm9sZW4gaW4gZGUgaW52b2VyZ3JhbW1hdGljYSAoZGUgbGltaWV0IGlzICVkKSIKKworIyBEaXQgemlldCBlciBhbHMgZWVuIHBvdGVudGllZWwgc2xlY2h0ZSBvcmlnaW5lbGUgc3RyaW5nIHVpdCAtIHdhdCBrYW4gZXIgaW4gZGllIGVlcnN0ZSAnJXMnIHN0YWFuPworIzogc3JjL3N5bXRhYi5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAiJXMgaGVyZGVjbGFyYXRpZSB2b29yICVzIgorCisjIERpdCB6aWV0IGVyIGFscyBlZW4gcG90ZW50aWVlbCBzbGVjaHRlIG9yaWdpbmVsZSBzdHJpbmcgdWl0IC0gd2F0IGthbiBlciBpbiBkaWUgZWVyc3RlICclcycgc3RhYW4/CisjOiBzcmMvc3ltdGFiLmM6MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlZGVjbGFyYXRpb24gZm9yIDwlcz4iCittc2dzdHIgIiVzIGhlcmRlY2xhcmF0aWUgdm9vciA8JXM+IgorCisjOiBzcmMvc3ltdGFiLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyByZWRlZmluZWQiCittc2dzdHIgInN5bWJvb2wgJXMgb3BuaWV1dyBnZWRlZmluaWVlcmQiCisKKyM6IHNyYy9zeW10YWIuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHJlZGVjbGFyZWQiCittc2dzdHIgInN5bWJvb2wgJXMgb3BuaWV1dyBnZWRlY2xhcmVlcmQiCisKKyM6IHNyYy9zeW10YWIuYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWZpbmluZyB1c2VyIHRva2VuIG51bWJlciBvZiAlcyIKK21zZ3N0ciAiaGVyZGVmaW5pdGllIHZhbiBoZXQgZG9vciBkZSBnZWJydWlrZXIgZ2Vrb3plbiB0b2tlbm51bW1lciB2YW4gJXMiCisKKyM6IHNyYy9zeW10YWIuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIGlzIHVzZWQsIGJ1dCBpcyBub3QgZGVmaW5lZCBhcyBhIHRva2VuIGFuZCBoYXMgbm8gcnVsZXMiCittc2dzdHIgIiIKKyJzeW1ib29sICVzIHdvcmR0IGdlYnJ1aWt0LCBtYWFyIGlzIG5pZXQgZ2VkZWZpbmllZXJkIGFscyBlZW4gdG9rZW4gZW4gaGVlZnQgIgorImdlZW4gcmVnZWxzIgorCisjOiBzcmMvc3ltdGFiLmM6NDE1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgdXNlZCBtb3JlIHRoYW4gb25jZSBhcyBhIGxpdGVyYWwgc3RyaW5nIgorbXNnc3RyICJzeW1ib29sIGAlcycgbWVlciBkYW4gZWVucyBnZWJydWlrdCBhbHMgZWVuIGxldHRlcmxpamtlIHN0cmluZyIKKworIzogc3JjL3N5bXRhYi5jOjQxOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIGdpdmVuIG1vcmUgdGhhbiBvbmUgbGl0ZXJhbCBzdHJpbmciCittc2dzdHIgInN5bWJvb2wgYCVzJyBrcmlqZ3QgbWVlciBkYW4gw6nDqW4gbGV0dGVybGlqa2Ugc3RyaW5nIHRvZWdld2V6ZW4iCisKKyMgRGl0IHppZXQgZXIgYWxzIGVlbiBwb3RlbnRpZWVsIHNsZWNodGUgb3JpZ2luZWxlIHN0cmluZyB1aXQgLSB3YXQga2FuIGVyIGluIGRpZSBlZXJzdGUgJyVzJyBzdGFhbj8KKyM6IHNyYy9zeW10YWIuYzo1MzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVzZXIgdG9rZW4gbnVtYmVyICVkIHJlZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICIlcyBoZXJkZWNsYXJhdGllIHZvb3IgJXMiCisKKyM6IHNyYy9zeW10YWIuYzo1MzkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIGRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAiZWVyZGVyZSBkZWNsYXJhdGllIgorCisjOiBzcmMvc3ltdGFiLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBzdGFydCBzeW1ib2wgJXMgaXMgdW5kZWZpbmVkIgorbXNnc3RyICJoZXQgc3RhcnRzeW1ib29sICVzIGlzIG5pZXQgZ2VkZWZpbmllZXJkIgorCisjOiBzcmMvc3ltdGFiLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBzdGFydCBzeW1ib2wgJXMgaXMgYSB0b2tlbiIKK21zZ3N0ciAiaGV0IHN0YXJ0c3ltYm9vbCAlcyBpcyBlZW4gdG9rZW4iCisKKyMgdGFnZ2VkIGVuIHRhZ2xlc3M/IHdhc2Rhdm9vcmlldD8KKyM6IHNyYy9zeW10YWIuYzo5MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdnZWQgJSVkZXN0cnVjdG9yIgorbXNnc3RyICJoZXJkZWNsYXJhdGllIHZhbiBzdGFuZGFhcmQgXCJ0YWdnZWRcIiAlJWRlc3RydWN0b3IiCisKKyM6IHNyYy9zeW10YWIuYzo5NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdsZXNzICUlZGVzdHJ1Y3RvciIKK21zZ3N0ciAiaGVyZGVjbGFyYXRpZSB2YW4gc3RhbmRhYXJkIFwidGFnbGVzc1wiICUlZGVzdHJ1Y3RvciIKKworIzogc3JjL3N5bXRhYi5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlJXByaW50ZXIiCittc2dzdHIgImhlcmRlY2xhcmF0aWUgdmFuIHN0YW5kYWFyZCBcInRhZ2dlZFwiICUlcHJpbnRlciIKKworIzogc3JjL3N5bXRhYi5jOjk4MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJSVwcmludGVyIgorbXNnc3RyICJoZXJkZWNsYXJhdGllIHZhbiBzdGFuZGFhcmQgXCJ0YWdsZXNzXCIgJSVwcmludGVyIgorCisjOiBkamdwcC9zdWJwaXBlLmM6NjMgZGpncHAvc3VicGlwZS5jOjI4NiBkamdwcC9zdWJwaXBlLmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92aW5nIG9mICclcycgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzo4NSBkamdwcC9zdWJwaXBlLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3JlYXRpb24gb2YgYSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJzYXZpbmcgc3RkaW4gZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAic2F2aW5nIHN0ZG91dCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjE1MyBkamdwcC9zdWJwaXBlLmM6MTk3IGRqZ3BwL3N1YnBpcGUuYzoyNTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm9wZW5pbmcgb2YgdG1wZmlsZSBmYWlsZWQiCittc2dzdHIgIl9vcGVuX29zZmhhbmRsZSBtaXNsdWt0IgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIGJpc29uJ3Mgc3Rkb3V0IHRvIHRoZSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBtNCdzIHN0ZGluIGZyb20gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZW5pbmcgb2YgYSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjIxOAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBtNCdzIHN0ZG91dCB0byBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSAnJXMnIGludGVycnVwdGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAic3Vic2lkaWFyeSBwcm9ncmFtICclcycgbm90IGZvdW5kIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgYmlzb24ncyBzdGRpbiBmcm9tIHRoZSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogbGliL2FyZ21hdGNoLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgJXMgZm9yICVzIgorbXNnc3RyICJvbmdlbGRpZyBhcmd1bWVudCAlcyB2b29yICVzIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIGFyZ3VtZW50ICVzIGZvciAlcyIKK21zZ3N0ciAiYXJndW1lbnQgJXMgdm9vciAlcyBpcyBuaWV0IGVlbmR1aWRpZyIKKworIzogbGliL2FyZ21hdGNoLmM6MTUzCittc2dpZCAiVmFsaWQgYXJndW1lbnRzIGFyZToiCittc2dzdHIgIkdlbGRpZ2UgYXJndW1lbnRlbiB6aWpuOiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfYWxsb2NzLCAldSBmcmVlZCAoJS4yZiUlKS5cbiIKK21zZ3N0ciAiJXUgYml0c2V0X2FsbG9jcywgJXUgdnJpamdlZ2V2ZW4gKCUuMmYlJSkuXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3NldHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorbXNnc3RyICIldSBiaXRzZXRfc2V0cywgJXUgZ2VjYWNoZWQgKCUuMmYlJSlcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfcmVzZXRzLCAldSBjYWNoZWQgKCUuMmYlJSlcbiIKK21zZ3N0ciAiJXUgYml0c2V0X3Jlc2V0cywgJXUgZ2VjYWNoZWQgKCUuMmYlJSlcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfdGVzdHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorbXNnc3RyICIldSBiaXRzZXRfdGVzdHMsICV1IGdlY2FjaGVkICglLjJmJSUpXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X2xpc3RzXG4iCittc2dzdHIgIiV1IGJpdHNldF9saXN0c1xuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTkyCittc2dpZCAiY291bnQgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICJoaXN0b2dyYW0gdmFuIGFhbnRhbCBnZXpldHRlIGJpdHNcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5NQorbXNnaWQgInNpemUgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICJoaXN0b2dyYW0gdmFuIGJpdHNldC1ncm9vdHRlc1xuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTk4Cittc2dpZCAiZGVuc2l0eSBoaXN0b2dyYW1cbiIKK21zZ3N0ciAiaGlzdG9ncmFtIHZhbiBkaWNodGhlaWQgYWFuIGdlemV0dGUgYml0c1xuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCaXRzZXQgc3RhdGlzdGljczpcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkJpdHNldC1zdGF0aXN0aWVrZW46XG4iCisiXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWNjdW11bGF0ZWQgcnVucyA9ICV1XG4iCittc2dzdHIgIkFhbnRhbCB1aXR2b2VyaW5nZW4gPSAldVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjU5IGxpYi9iaXRzZXRfc3RhdHMuYzoyNjQKKyMsIGZ1enp5Cittc2dpZCAiY2Fubm90IHJlYWQgc3RhdHMgZmlsZSIKK21zZ3N0ciAiS29uIGhldCBzdGF0aXN0aWVrZW5iZXN0YW5kIG5pZXQgbGV6ZW4uIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjYxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJiYWQgc3RhdHMgZmlsZSBzaXplXG4iCittc2dzdHIgIkhldCBzdGF0aXN0aWVrZW5iZXN0YW5kIGhlZWZ0IGVlbiB2ZXJrZWVyZGUgZ3Jvb3R0ZS5cbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI4NyBsaWIvYml0c2V0X3N0YXRzLmM6Mjg5CisjLCBmdXp6eQorbXNnaWQgImNhbm5vdCB3cml0ZSBzdGF0cyBmaWxlIgorbXNnc3RyICJLb24gbmlldCBzY2hyaWp2ZW4gbmFhciBoZXQgc3RhdGlzdGlla2VuYmVzdGFuZC4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyOTIKKyMsIGZ1enp5Cittc2dpZCAiY2Fubm90IG9wZW4gc3RhdHMgZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAiS29uIGhldCBzdGF0aXN0aWVrZW5iZXN0YW5kIG5pZXQgb3BlbmVuIHZvb3Igc2NocmlqdmVuLiIKKworIzogbGliL2Nsb3Nlb3V0LmM6MTEyCisjLCBmdXp6eQorbXNnaWQgIndyaXRlIGVycm9yIgorbXNnc3RyICJmYXRhbGUgZm91dCIKKworIzogbGliL2Vycm9yLmM6MTg4Cittc2dpZCAiVW5rbm93biBzeXN0ZW0gZXJyb3IiCittc2dzdHIgIk9uYmVrZW5kZSBzeXN0ZWVtZm91dCIKKworIzogbGliL2dldG9wdC5jOjU0NyBsaWIvZ2V0b3B0LmM6NTc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICclcycgaXMgYW1iaWd1b3VzOyBwb3NzaWJpbGl0aWVzOiIKK21zZ3N0ciAiJXM6IG9wdGllICclcycgaXMgbmlldCBlZW5kdWlkaWdcbiIKKworIzogbGliL2dldG9wdC5jOjYyNCBsaWIvZ2V0b3B0LmM6NjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy0tJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IG9wdGllICctLSVzJyBzdGFhdCBnZWVuIGFyZ3VtZW50IHRvZVxuIgorCisjOiBsaWIvZ2V0b3B0LmM6NjM3IGxpYi9nZXRvcHQuYzo2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnJWMlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogb3B0aWUgJyVjJXMnIHN0YWF0IGdlZW4gYXJndW1lbnQgdG9lXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo2ODUgbGliL2dldG9wdC5jOjcwNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctLSVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogb3B0aWUgJy0tJXMnIHZlcmVpc3QgZWVuIGFyZ3VtZW50XG4iCisKKyM6IGxpYi9nZXRvcHQuYzo3NDIgbGliL2dldG9wdC5jOjc0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiAnLS0lcydcbiIKK21zZ3N0ciAiJXM6IG9uYmVrZW5kZSBvcHRpZSAnLS0lcydcbiIKKworIzogbGliL2dldG9wdC5jOjc1MyBsaWIvZ2V0b3B0LmM6NzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uICclYyVzJ1xuIgorbXNnc3RyICIlczogb25iZWtlbmRlIG9wdGllICclYyVzJ1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6ODA1IGxpYi9nZXRvcHQuYzo4MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgb3B0aW9uIC0tICclYydcbiIKK21zZ3N0ciAiJXM6IG9uZ2VsZGlnZSBvcHRpZSAtLSAnJWMnXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo4NjEgbGliL2dldG9wdC5jOjg3OCBsaWIvZ2V0b3B0LmM6MTA4OCBsaWIvZ2V0b3B0LmM6MTEwNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICclYydcbiIKK21zZ3N0ciAiJXM6IG9wdGllIHZlcmVpc3QgZWVuIGFyZ3VtZW50IC0tICclYydcbiIKKworIzogbGliL2dldG9wdC5jOjkzNCBsaWIvZ2V0b3B0LmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyBpcyBhbWJpZ3VvdXNcbiIKK21zZ3N0ciAiJXM6IG9wdGllICctVyAlcycgaXMgbmlldCBlZW5kdWlkaWdcbiIKKworIzogbGliL2dldG9wdC5jOjk3NCBsaWIvZ2V0b3B0LmM6OTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBvcHRpZSAnLVcgJXMnIHN0YWF0IGdlZW4gYXJndW1lbnQgdG9lXG4iCisKKyM6IGxpYi9nZXRvcHQuYzoxMDEzIGxpYi9nZXRvcHQuYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogb3B0aWUgJy1XICVzJyB2ZXJlaXN0IGVlbiBhcmd1bWVudFxuIgorCisjOiBsaWIvb2JzdGFjay5jOjQxMyBsaWIvb2JzdGFjay5jOjQxNSBsaWIveGFsbG9jLWRpZS5jOjM0Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiZ2VlbiBnZWhldWdlbiBtZWVyIGJlc2NoaWtiYWFyIgorCisjIElzIGhpZXIgZWVuIE5lZGVybGFuZHNlIHRlcm0gdm9vcj8gIkRhdGFwaWpwIj8gIlNsdWlzIiAodmlhICJkb29yc2x1aXplbiIgYWxzIHZlcnRhbGluZyB2b29yICJwaXBlIiBhbHMgd2Vya3dvb3JkKT8KKyM6IGxpYi9zcGF3bi1waXBlLmM6MTQwIGxpYi9zcGF3bi1waXBlLmM6MTQzIGxpYi9zcGF3bi1waXBlLmM6MjY0CisjOiBsaWIvc3Bhd24tcGlwZS5jOjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIHBpcGUiCittc2dzdHIgImthbiBnZWVuIHBpcGUgYWFubWFrZW4iCisKKyM6IGxpYi9zcGF3bi1waXBlLmM6MjM0IGxpYi9zcGF3bi1waXBlLmM6MzQ4IGxpYi93YWl0LXByb2Nlc3MuYzoyODIKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyBmYWlsZWQiCittc2dzdHIgIiVzIHN1YnByb2NlcyBtaXNsdWt0IgorCisjLiBUUkFOU0xBVE9SUzoKKyMuIEdldCB0cmFuc2xhdGlvbnMgZm9yIG9wZW4gYW5kIGNsb3NpbmcgcXVvdGF0aW9uIG1hcmtzLgorIy4gVGhlIG1lc3NhZ2UgY2F0YWxvZyBzaG91bGQgdHJhbnNsYXRlICJgIiB0byBhIGxlZnQKKyMuIHF1b3RhdGlvbiBtYXJrIHN1aXRhYmxlIGZvciB0aGUgbG9jYWxlLCBhbmQgc2ltaWxhcmx5IGZvcgorIy4gIiciLiAgRm9yIGV4YW1wbGUsIGEgRnJlbmNoIFVuaWNvZGUgbG9jYWwgc2hvdWxkIHRyYW5zbGF0ZQorIy4gdGhlc2UgdG8gVSswMEFCIChMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRQorIy4gUVVPVEFUSU9OIE1BUkspLCBhbmQgVSswMEJCIChSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUKKyMuIFFVT1RBVElPTiBNQVJLKSwgcmVzcGVjdGl2ZWx5LgorIy4KKyMuIElmIHRoZSBjYXRhbG9nIGhhcyBubyB0cmFuc2xhdGlvbiwgd2Ugd2lsbCB0cnkgdG8KKyMuIHVzZSBVbmljb2RlIFUrMjAxOCAoTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspIGFuZAorIy4gVW5pY29kZSBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykuICBJZiB0aGUKKyMuIGN1cnJlbnQgbG9jYWxlIGlzIG5vdCBVbmljb2RlLCBsb2NhbGVfcXVvdGluZ19zdHlsZQorIy4gd2lsbCBxdW90ZSAnbGlrZSB0aGlzJywgYW5kIGNsb2NhbGVfcXVvdGluZ19zdHlsZSB3aWxsCisjLiBxdW90ZSAibGlrZSB0aGlzIi4gIFlvdSBzaG91bGQgYWx3YXlzIGluY2x1ZGUgdHJhbnNsYXRpb25zCisjLiBmb3IgImAiIGFuZCAiJyIgZXZlbiBpZiBVKzIwMTggYW5kIFUrMjAxOSBhcmUgYXBwcm9wcmlhdGUKKyMuIGZvciB5b3VyIGxvY2FsZS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFya3NfaW5fb3RoZXJfbGFuZ3VhZ2VzPgorIy4gYW5kIHVzZSBnbHlwaHMgc3VpdGFibGUgZm9yIHlvdXIgbGFuZ3VhZ2UuCisjOiBsaWIvcXVvdGVhcmcuYzozMTIKK21zZ2lkICJgIgorbXNnc3RyICJgIgorCisjOiBsaWIvcXVvdGVhcmcuYzozMTMKK21zZ2lkICInIgorbXNnc3RyICInIgorCisjOiBsaWIvdGltZXZhci5jOjQ3NQorbXNnaWQgIiIKKyJcbiIKKyJFeGVjdXRpb24gdGltZXMgKHNlY29uZHMpXG4iCittc2dzdHIgIiIKKyJcbiIKKyJVaXR2b2VyaW5nc3RpamRlbiAoaW4gc2Vjb25kZW4pXG4iCisKKyM6IGxpYi90aW1ldmFyLmM6NTI1Cittc2dpZCAiIFRPVEFMICAgICAgICAgICAgICAgICA6IgorbXNnc3RyICIgVE9UQUFMICAgICAgICAgICAgICAgIDoiCisKKyM6IGxpYi90aW1ldmFyLmM6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWUgaW4gJXM6ICVsZC4lMDZsZCAoJWxkJSUpXG4iCittc2dzdHIgInRpamQgaW4gJXM6ICVsZC4lMDZsZCAoJWxkJSUpXG4iCisKKyM6IGxpYi93MzJzcGF3bi5oOjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIl9vcGVuX29zZmhhbmRsZSBmYWlsZWQiCittc2dzdHIgIl9vcGVuX29zZmhhbmRsZSBtaXNsdWt0IgorCisjOiBsaWIvdzMyc3Bhd24uaDo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdG9yZSBmZCAlZDogZHVwMiBmYWlsZWQiCittc2dzdHIgImthbiBmZCAlZCBuaWV0IGhlcnN0ZWxsZW46IGR1cDIgbWlzbHVrdCIKKworIzogbGliL3dhaXQtcHJvY2Vzcy5jOjIyMyBsaWIvd2FpdC1wcm9jZXNzLmM6MjU1IGxpYi93YWl0LXByb2Nlc3MuYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyIKK21zZ3N0ciAiJXMgc3VicHJvY2VzIgorCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6Mjc0IGxpYi93YWl0LXByb2Nlc3MuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyBnb3QgZmF0YWwgc2lnbmFsICVkIgorbXNnc3RyICIlcyBzdWJwcm9jZXMga3JlZWcgZmF0YWFsIHNpZ25hYWwgJWQiCisKKyN+IG1zZ2lkICJzdGF0ZSAlZCIKKyN+IG1zZ3N0ciAidG9lc3RhbmQgJWQiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAic3RyYXkgJ0AnIgorI34gbXNnc3RyICJsb3NzZSBgQCciCisKKyN+IG1zZ2lkICIiCisjfiAidW5kZWZpbmVkICUlZGVmaW5lIHZhcmlhYmxlIGAlcycgcGFzc2VkIHRvIG11c2NsZV9wZXJjZW50X2RlZmluZV9nZXRfbG9jIgorI34gbXNnc3RyICIiCisjfiAibmlldC1nZWRlZmluaWVlcmRlICUlZGVmaW5lIHZhcmlhYmVsZSBgJXMnIGRvb3JnZWdldmVuIGFhbiAiCisjfiAibXVzY2xlX3BlcmNlbnRfZGVmaW5lX2dldF9sb2MiCisKKyN+IG1zZ2lkICIiCisjfiAidW5kZWZpbmVkICUlZGVmaW5lIHZhcmlhYmxlIGAlcycgcGFzc2VkIHRvICIKKyN+ICJtdXNjbGVfcGVyY2VudF9kZWZpbmVfZ2V0X3N5bmNsaW5lIgorI34gbXNnc3RyICIiCisjfiAibmlldC1nZWRlZmluaWVlcmRlICUlZGVmaW5lIHZhcmlhYmVsZSBgJXMnIGRvb3JnZWdldmVuIGFhbiAiCisjfiAibXVzY2xlX3BlcmNlbnRfZGVmaW5lX2dldF9zeW5jbGluZSIKKworI34gbXNnaWQgIiIKKyN+ICJ1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgYCVzJyBwYXNzZWQgdG8gbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2ZsYWdfaWYiCisjfiBtc2dzdHIgIiIKKyN+ICJuaWV0LWdlZGVmaW5pZWVyZGUgJSVkZWZpbmUgdmFyaWFiZWxlIGAlcycgZG9vcmdlZ2V2ZW4gYWFuICIKKyN+ICJtdXNjbGVfcGVyY2VudF9kZWZpbmVfZmxhZ19pZiIKKworI34gbXNnaWQgIiIKKyN+ICJ1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgYCVzJyBwYXNzZWQgdG8gIgorI34gIm11c2NsZV9wZXJjZW50X2RlZmluZV9jaGVja192YWx1ZXMiCisjfiBtc2dzdHIgIiIKKyN+ICJuaWV0LWdlZGVmaW5pZWVyZGUgJSVkZWZpbmUgdmFyaWFiZWxlIGAlcycgZG9vcmdlZ2V2ZW4gYWFuICIKKyN+ICJtdXNjbGVfcGVyY2VudF9kZWZpbmVfY2hlY2tfdmFsdWVzIgorCisjfiBtc2dpZCAiIgorI34gIkdlbmVyYXRlIExBTFIoMSkgYW5kIEdMUiBwYXJzZXJzLlxuIgorI34gIlxuIgorI34gbXNnc3RyICIiCisjfiAiR2VuZXJlZXIgTEFMUigxKSBlbiBHTFIgcGFyc2Vycy5cbiIKKyN+ICJcbiIKKworI34gbXNnaWQgInRva2VucyAlcyBhbmQgJXMgYm90aCBhc3NpZ25lZCBudW1iZXIgJWQiCisjfiBtc2dzdHIgInRva2VucyAlcyBlbiAlcyBoZWJiZW4gYmVpZGUgbnVtbWVyICVkIHRvZWdld2V6ZW4gZ2VrcmVnZW4iCmRpZmYgLS1naXQgYS9wby9wbC5nbW8gYi9wby9wbC5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI3MjFhYgotLS0gL2Rldi9udWxsCisrKyBiL3BvL3BsLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9wbC5wbyBiL3BvL3BsLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczY2UyNzUKLS0tIC9kZXYvbnVsbAorKysgYi9wby9wbC5wbwpAQCAtMCwwICsxLDEzNzggQEAKKyMgUG9saXNoIHRyYW5zbGF0aW9ucyBmb3IgR05VIEJpc29uIHBhY2thZ2UuCisjIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAxMCwgMjAxMSwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGJpc29uIHBhY2thZ2UuCisjIFdvamNpZWNoIFBvbGFrIDxwb2xha0BnbnUub3JnPiwgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAxMCwgMjAxMSwgMjAxMi4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGJpc29uIDIuNi45MFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBidWctYmlzb25AZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEyLTEyLTEyIDE2OjA5KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEyLTEyLTEwIDE5OjI0KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFdvamNpZWNoIFBvbGFrIDxwb2xha0BnbnUub3JnPlxuIgorIkxhbmd1YWdlLVRlYW06IFBvbGlzaCA8dHJhbnNsYXRpb24tdGVhbS1wbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCisiTGFuZ3VhZ2U6IHBsXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0zOyBwbHVyYWw9KG49PTEgPyAwIDogbiUxMD49MiAmJiBuJTEwPD00ICYmIChuJTEwMDwxMCAiCisifHwgbiUxMDA+PTIwKSA/IDEgOiAyKTtcbiIKKworIzogc3JjL2NvbXBsYWluLmM6MTIwIHNyYy9jb21wbGFpbi5jOjEzMSBzcmMvY29tcGxhaW4uYzoxNDAgc3JjL2NvbXBsYWluLmM6MTg4CisjOiBzcmMvY29tcGxhaW4uYzoxOTgKK21zZ2lkICJ3YXJuaW5nIgorbXNnc3RyICJvc3RyemXFvGVuaWUiCisKKyM6IHNyYy9jb21wbGFpbi5jOjE1MSBzcmMvY29tcGxhaW4uYzoxNjAgc3JjL2NvbXBsYWluLmM6MTY3Cittc2dpZCAiZXJyb3IiCittc2dzdHIgImLFgsSFZCIKKworIzogc3JjL2NvbXBsYWluLmM6MjA4IHNyYy9jb21wbGFpbi5jOjIxNQorbXNnaWQgImZhdGFsIGVycm9yIgorbXNnc3RyICJmYXRhbG55IGLFgsSFZCIKKworIzogc3JjL2NvbmZsaWN0cy5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIHNoaWZ0IgorbXNnc3RyICIiCisiICAgIEtvbmZsaWt0IHBvbWnEmWR6eSByZWd1xYLEhSAlZCBpIHN5bWJvbGVtIGxla3N5a2FsbnltICVzIHJvendpxIV6YW55IGpha28gIgorInByemVzdW5pxJljaWUiCisKKyM6IHNyYy9jb25mbGljdHMuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyByZWR1Y2UiCittc2dzdHIgIiIKKyIgICAgS29uZmxpa3QgcG9tacSZZHp5IHJlZ3XFgsSFICVkIGkgc3ltYm9sZW0gbGVrc3lrYWxueW0gJXMgcm96d2nEhXphbnkgamFrbyAiCisicmVkdWtjamEiCisKKyM6IHNyYy9jb25mbGljdHMuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyBhbiBlcnJvciIKK21zZ3N0ciAiIgorIiAgICBLb25mbGlrdCBwb21pxJlkenkgcmVndcWCxIUgJWQgaSBzeW1ib2xlbSBsZWtzeWthbG55bSAlcyByb3p3acSFemFueSBqYWtvICIKKyJixYLEhWQiCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCBzaGlmdC9yZWR1Y2UsICVkIHJlZHVjZS9yZWR1Y2VcbiIKK21zZ3N0ciAia29uZmxpa3R5OiAlZCBwcnplc3VuacSZY2llL3JlZHVrY2phLCAlZCByZWR1a2NqYS9yZWR1a2NqYVxuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgc2hpZnQvcmVkdWNlXG4iCittc2dzdHIgImtvbmZsaWt0eTogJWQgcHJ6ZXN1bmnEmWNpZS9yZWR1a2NqYVxuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgcmVkdWNlL3JlZHVjZVxuIgorbXNnc3RyICJrb25mbGlrdHk6ICVkIHJlZHVrY2phL3JlZHVrY2phXG4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhdGUgJWQgIgorbXNnc3RyICJTdGFuICVkICIKKworIzogc3JjL2NvbmZsaWN0cy5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICIlJWV4cGVjdC1yciBhcHBsaWVzIG9ubHkgdG8gR0xSIHBhcnNlcnMiCittc2dzdHIgIiUlZXhwZWN0LXJyIG9kbm9zaSBzacSZIHR5bGtvIGRvIGFuYWxpemF0b3LDs3cgc2vFgmFkbmkgR0xSIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NjE2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICVkIHNoaWZ0L3JlZHVjZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiZXhwZWN0ZWQgJWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAic3BvZHppZXdhbm8gc2nEmSAlZCBrb25mbGlrdHUgcHJ6ZXN1bmnEmWNpZS9yZWR1a2NqYSIKK21zZ3N0clsxXSAic3BvZHppZXdhbm8gc2nEmSAlZCBrb25mbGlrdMOzdyBwcnplc3VuacSZY2llL3JlZHVrY2phIgorbXNnc3RyWzJdICJzcG9kemlld2FubyBzacSZICVkIGtvbmZsaWt0w7N3IHByemVzdW5pxJljaWUvcmVkdWtjamEiCisKKyM6IHNyYy9jb25mbGljdHMuYzo2MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJWQgcmVkdWNlL3JlZHVjZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiZXhwZWN0ZWQgJWQgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMiCittc2dzdHJbMF0gInNwb2R6aWV3YW5vIHNpxJkgJWQga29uZmxpa3R1IHJlZHVrY2phL3JlZHVrY2phIgorbXNnc3RyWzFdICJzcG9kemlld2FubyBzacSZICVkIGtvbmZsaWt0w7N3IHJlZHVrY2phL3JlZHVrY2phIgorbXNnc3RyWzJdICJzcG9kemlld2FubyBzacSZICVkIGtvbmZsaWt0w7N3IHJlZHVrY2phL3JlZHVrY2phIgorCisjOiBzcmMvZmlsZXMuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBvcGVuIgorbXNnc3RyICIlczogbmllIG1vxbxuYSBvdHdvcnp5xIciCisKKyM6IHNyYy9maWxlcy5jOjEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnB1dC9vdXRwdXQgZXJyb3IiCittc2dzdHIgImLFgsSFZCB3ZWrFm2NpYS93eWrFm2NpYSIKKworIzogc3JjL2ZpbGVzLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjbG9zZSBmaWxlIgorbXNnc3RyICJuaWUgbW/FvG5hIHphbWtuxIXEhyBwbGlrdSIKKworIzogc3JjL2ZpbGVzLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIG92ZXJ3cml0ZSB0aGUgaW5wdXQgZmlsZSAlcyIKK21zZ3N0ciAib2Rtb3dhIG5hZHBpc2FuaWEgcGxpa3Ugd2VqxZtjaW93ZWdvICVzIgorCisjOiBzcmMvZmlsZXMuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3Rpbmcgb3V0cHV0cyB0byBmaWxlICVzIgorbXNnc3RyICJrb25mbGlrdCB3eWrFm8SHIGRvIHBsaWt1ICVzIgorCisjOiBzcmMvZ2V0YXJncy5jOjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCittc2dzdHIgIlNwcsOzYnVqIGAlcyAtLWhlbHAnIGFieSB1enlza2HEhyB3acSZY2VqIGluZm9ybWFjamkuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbT1BUSU9OXS4uLiBGSUxFXG4iCittc2dzdHIgIlXFvHljaWU6ICVzIFtPUENKQV0uLi4gUExJS1xuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwMgorbXNnaWQgIiIKKyJHZW5lcmF0ZSBhIGRldGVybWluaXN0aWMgTFIgb3IgZ2VuZXJhbGl6ZWQgTFIgKEdMUikgcGFyc2VyIGVtcGxveWluZ1xuIgorIkxBTFIoMSksIElFTFIoMSksIG9yIGNhbm9uaWNhbCBMUigxKSBwYXJzZXIgdGFibGVzLiAgSUVMUigxKSBhbmRcbiIKKyJjYW5vbmljYWwgTFIoMSkgc3VwcG9ydCBpcyBleHBlcmltZW50YWwuXG4iCisiXG4iCittc2dzdHIgIiIKKyJUd29yenkgZGV0ZXJtaW5pc3R5Y3pueSBhbmFsaXphdG9yIHNrxYJhZG5pIExSIGx1YiB1b2fDs2xuaW9ueSBMUiAoR0xSKVxuIgorInXFvHl3YWrEhWMgdGFibGljIExBTFIoMSksIElFTFIoMSkgbHViIGthbm9uaWN6bmVqIExSKDEpLlxuIgorIldzcGFyY2llIGRsYSBJRUxSKDEpIGkga2Fub25pY3puZWdvIExSKDEpIGplc3QgZWtzcGVyeW1lbnRhbG5lLlxuIgorIlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwOQorbXNnaWQgIiIKKyJNYW5kYXRvcnkgYXJndW1lbnRzIHRvIGxvbmcgb3B0aW9ucyBhcmUgbWFuZGF0b3J5IGZvciBzaG9ydCBvcHRpb25zIHRvby5cbiIKK21zZ3N0ciAiIgorIk9ib3dpxIV6a293ZSBhcmd1bWVudHkgZGxhIGTFgnVnaWNoIG9wY2ppIHPEhSBvYm93acSFemtvd2UgcsOzd25pZcW8IGRsYSBrcsOzdGtpY2ggIgorIm9wY2ppLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMxMgorbXNnaWQgIlRoZSBzYW1lIGlzIHRydWUgZm9yIG9wdGlvbmFsIGFyZ3VtZW50cy5cbiIKK21zZ3N0ciAiVG8gc2FtbyBkb3R5Y3p5IGFyZ3VtZW50w7N3IG9wY2pvbmFsbnljaC5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozMTYKK21zZ2lkICIiCisiXG4iCisiT3BlcmF0aW9uIG1vZGVzOlxuIgorIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKKyIgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCisiICAgICAgLS1wcmludC1sb2NhbGVkaXIgICAgICBvdXRwdXQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgbG9jYWxlLWRlcGVuZGVudCAiCisiZGF0YVxuIgorIiAgICAgIC0tcHJpbnQtZGF0YWRpciAgICAgICAgb3V0cHV0IGRpcmVjdG9yeSBjb250YWluaW5nIHNrZWxldG9ucyBhbmQgWFNMVFxuIgorIiAgLXksIC0teWFjYyAgICAgICAgICAgICAgICAgZW11bGF0ZSBQT1NJWCBZYWNjXG4iCisiICAtVywgLS13YXJuaW5nc1s9Q0FURUdPUlldICByZXBvcnQgdGhlIHdhcm5pbmdzIGZhbGxpbmcgaW4gQ0FURUdPUllcbiIKKyIgIC1mLCAtLWZlYXR1cmVbPUZFQVRVUkVdICAgIGFjdGl2YXRlIG1pc2NlbGxhbmVvdXMgZmVhdHVyZXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlRyeWJ5IGR6aWHFgmFuaWE6XG4iCisiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICB3ecWbd2lldGxhIHBvbW9jIGkga2/FhGN6eSBwcmFjxJlcbiIKKyIgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgIHd5xZt3aWV0bGEgaW5mb3JtYWNqZSBvIHdlcnNqaSBpIGtvxYRjenkgcHJhY8SZXG4iCisiICAgICAgLS1wcmludC1sb2NhbGVkaXIgICAgICB3ecWbd2lldGxhIGthdGFsb2cgeiBkYW55bWkgZG90eWN6xIVjeW1pICIKKyJsb2thbGl6YWNqaVxuIgorIiAgICAgIC0tcHJpbnQtZGF0YWRpciAgICAgICAgd3nFm3dpZXRsYSBrYXRhbG9nIHphd2llcmFqxIVjeSBzemtpZWxldHkgaSBYU0xUXG4iCisiICAteSwgLS15YWNjICAgICAgICAgICAgICAgICBlbXVsdWplIFBPU0lYIFlhY2NcbiIKKyIgIC1XLCAtLXdhcm5pbmdzWz1LQVRFR09SSUFdIHpnxYJhc3phIG9zdHJ6ZcW8ZW5pYSBkb3R5Y3rEhWNlIGRhbmVqIGthdGVnb3JpaVxuIgorIiAgLWYsIC0tZmVhdHVyZVs9RlVOS0NKQV0gICAgYWt0eXd1amUgcsOzxbxuZSBmdW5rY2plIHByb2dyYW11XG4iCisiXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJzZXI6XG4iCisiICAtTCwgLS1sYW5ndWFnZT1MQU5HVUFHRSAgICAgICAgICBzcGVjaWZ5IHRoZSBvdXRwdXQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VcbiIKKyIgIC1TLCAtLXNrZWxldG9uPUZJTEUgICAgICAgICAgICAgIHNwZWNpZnkgdGhlIHNrZWxldG9uIHRvIHVzZVxuIgorIiAgLXQsIC0tZGVidWcgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudCB0aGUgcGFyc2VyIGZvciBkZWJ1Z2dpbmdcbiIKKyIgICAgICAtLWxvY2F0aW9ucyAgICAgICAgICAgICAgICAgIGVuYWJsZSBsb2NhdGlvbiBzdXBwb3J0XG4iCisiICAtRCwgLS1kZWZpbmU9TkFNRVs9VkFMVUVdICAgICAgICBzaW1pbGFyIHRvICclZGVmaW5lIE5BTUUgXCJWQUxVRVwiJ1xuIgorIiAgLUYsIC0tZm9yY2UtZGVmaW5lPU5BTUVbPVZBTFVFXSAgb3ZlcnJpZGUgJyVkZWZpbmUgTkFNRSBcIlZBTFVFXCInXG4iCisiICAtcCwgLS1uYW1lLXByZWZpeD1QUkVGSVggICAgICAgICBwcmVwZW5kIFBSRUZJWCB0byB0aGUgZXh0ZXJuYWwgc3ltYm9sc1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZCBieSAnLURhcGkucHJlZml4PVBSRUZJWCdcbiIKKyIgIC1sLCAtLW5vLWxpbmVzICAgICAgICAgICAgICAgICAgIGRvbid0IGdlbmVyYXRlICcjbGluZScgZGlyZWN0aXZlc1xuIgorIiAgLWssIC0tdG9rZW4tdGFibGUgICAgICAgICAgICAgICAgaW5jbHVkZSBhIHRhYmxlIG9mIHRva2VuIG5hbWVzXG4iCittc2dzdHIgIiIKKyJBbmFsaXphdG9yIHNrxYJhZG5pOlxuIgorIiAgLUwsIC0tbGFuZ3VhZ2U9SsSYWllLICAgICAgIHXFvHl3YSB3eWrFm2Npb3d5IGrEmXp5ayBwcm9ncmFtb3dhbmlhXG4iCisiICAtUywgLS1za2VsZXRvbj1QTElLICAgICAgICB1xbx5d2EgcG9kYW5lZ28gc3praWVsZXR1XG4iCisiICAtdCwgLS1kZWJ1ZyAgICAgICAgICAgICAgICBwcm9kdWt1amUgYW5hbGl6YXRvciB6ZG9sbnkgZG8gb2RwbHVza3dpYW5pYVxuIgorIiAgICAgIC0tbG9jYXRpb25zICAgICAgICAgICAgd8WCxIVjemEgb2JsaWN6YW5pZSBsb2thY2ppXG4iCisiICAtRCwgLS1kZWZpbmU9TkFaV0FbPVdBUlRPxZrEhl0gcG9kb2JuaWUgamFrIGAlZGVmaW5lIE5BWldBIFwiV0FSVE/FmsSGXCInXG4iCisiICAtRiwgLS1mb3JjZS1kZWZpbmU9TkFaV0FbPVdBUlRPxZpDXSBuYWRwaXN1amUgYCVkZWZpbmUgTkFaV0EgXCJXQVJUT8WaxIZcIidcbiIKKyIgIC1wLCAtLW5hbWUtcHJlZml4PVBSRUZJS1MgIGRvcGlzdWplIHBvY3rEhXRrb3d5IFBSRUZJS1MgZG8gemV3bsSZdHJ6bnljaCAiCisic3ltYm9saVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemFzdMSFcGlvbmUgcHJ6ZXogJy1EYXBpLnByZWZpeD1QUkVGSUtTJ1xuIgorIiAgLWwsIC0tbm8tbGluZXMgICAgICAgICAgICAgemFicmFuaWEgdHdvcnplbmlhIGR5cmVrdHl3IGAjbGluZSdcbiIKKyIgIC1rLCAtLXRva2VuLXRhYmxlICAgICAgICAgIGRvxYLEhWN6YSB0YWJsaWPEmSBuYXp3IHN5bWJvbGkgbGVrc3lrYWxueWNoXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzQ2Cittc2dpZCAiIgorIk91dHB1dDpcbiIKKyIgICAgICAtLWRlZmluZXNbPUZJTEVdICAgICAgIGFsc28gcHJvZHVjZSBhIGhlYWRlciBmaWxlXG4iCisiICAtZCAgICAgICAgICAgICAgICAgICAgICAgICBsaWtld2lzZSBidXQgY2Fubm90IHNwZWNpZnkgRklMRSAoZm9yIFBPU0lYICIKKyJZYWNjKVxuIgorIiAgLXIsIC0tcmVwb3J0PVRISU5HUyAgICAgICAgYWxzbyBwcm9kdWNlIGRldGFpbHMgb24gdGhlIGF1dG9tYXRvblxuIgorIiAgICAgIC0tcmVwb3J0LWZpbGU9RklMRSAgICAgd3JpdGUgcmVwb3J0IHRvIEZJTEVcbiIKKyIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIHNhbWUgYXMgYC0tcmVwb3J0PXN0YXRlJ1xuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg9UFJFRklYICAgc3BlY2lmeSBhIFBSRUZJWCBmb3Igb3V0cHV0IGZpbGVzXG4iCisiICAtbywgLS1vdXRwdXQ9RklMRSAgICAgICAgICBsZWF2ZSBvdXRwdXQgdG8gRklMRVxuIgorIiAgLWcsIC0tZ3JhcGhbPUZJTEVdICAgICAgICAgYWxzbyBvdXRwdXQgYSBncmFwaCBvZiB0aGUgYXV0b21hdG9uXG4iCisiICAteCwgLS14bWxbPUZJTEVdICAgICAgICAgICBhbHNvIG91dHB1dCBhbiBYTUwgcmVwb3J0IG9mIHRoZSBhdXRvbWF0b25cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGUgWE1MIHNjaGVtYSBpcyBleHBlcmltZW50YWwpXG4iCittc2dzdHIgIiIKKyJXeWrFm2NpZTpcbiIKKyIgICAgICAtLWRlZmluZXNbPVBMSUtdICAgICAgIHByb2R1a3VqZSB0YWvFvGUgcGxpayBuYWfFgsOzd2tvd3lcbiIKKyIgIC1kICAgICAgICAgICAgICAgICAgICAgICAgIHBvZG9ibmllLCBhbGUgYmV6IHBvZGFuaWEgUExJS1UgKGRsYSBQT1NJWCAiCisiWWFjYylcbiIKKyIgIC1yLCAtLXJlcG9ydD1MSVNUQSAgICAgICAgIHByb2R1a3VqZSB0YWvFvGUgc3pjemVnw7PFgnkgbmEgdGVtYXQgYXV0b21hdHVcbiIKKyIgICAgICAtLXJlcG9ydC1maWxlPVBMSUsgICAgIHphcGlzdWplIHJhcG9ydCBkbyBQTElLVVxuIgorIiAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgdG8gc2FtbyBjbyBgLS1yZXBvcnQ9c3RhdGUnXG4iCisiICAtYiwgLS1maWxlLXByZWZpeD1QUkVGSUtTICB1c3RhdyBQUkVGSUtTIGRsYSBwbGlrw7N3IHd5asWbY2lvd3ljaFxuIgorIiAgLW8sIC0tb3V0cHV0PVBMSUsgICAgICAgICAgcHJ6ZWtpZXJvd3VqZSB3eWrFm2NpZSBkbyBQTElLVVxuIgorIiAgLWcsIC0tZ3JhcGhbPVBMSUtdICAgICAgICAgcHJvZHVrdWplIHRha8W8ZSBncmFmIGF1dG9tYXR1XG4iCisiICAteCwgLS14bWxbPVBMSUtdICAgICAgICAgICBwcm9kdWt1amUgdGFrxbxlIHJhcG9ydCBYTUwgbmEgdGVtYXQgYXV0b21hdHVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzY2hlbWF0IFhNTCBqZXN0IGVrc3BlcnltZW50YWxueSlcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNjEKK21zZ2lkICIiCisiV2FybmluZyBjYXRlZ29yaWVzIGluY2x1ZGU6XG4iCisiICBgbWlkcnVsZS12YWx1ZXMnICB1bnNldCBvciB1bnVzZWQgbWlkcnVsZSB2YWx1ZXNcbiIKKyIgIGB5YWNjJyAgICAgICAgICAgIGluY29tcGF0aWJpbGl0aWVzIHdpdGggUE9TSVggWWFjY1xuIgorIiAgYGNvbmZsaWN0cy1zcicgICAgUy9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGNvbmZsaWN0cy1ycicgICAgUi9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGRlcHJlY2F0ZWQnICAgICAgb2Jzb2xldGUgY29uc3RydWN0c1xuIgorIiAgYG90aGVyJyAgICAgICAgICAgYWxsIG90aGVyIHdhcm5pbmdzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgYWxsJyAgICAgICAgICAgICBhbGwgdGhlIHdhcm5pbmdzXG4iCisiICBgbm8tQ0FURUdPUlknICAgICB0dXJuIG9mZiB3YXJuaW5ncyBpbiBDQVRFR09SWVxuIgorIiAgYG5vbmUnICAgICAgICAgICAgdHVybiBvZmYgYWxsIHRoZSB3YXJuaW5nc1xuIgorIiAgYGVycm9yJyAgICAgICAgICAgdHJlYXQgd2FybmluZ3MgYXMgZXJyb3JzXG4iCittc2dzdHIgIiIKKyJLYXRlZ29yaWUgb3N0cnplxbxlxYQ6XG4iCisiICBgbWlkcnVsZS12YWx1ZXMnICBuaWV1c3Rhd2lvbmUgbHViIG5pZXXFvHl3YW5lIHdhcnRvxZtjaSByZWd1xYJcbiIKKyIgIGB5YWNjJyAgICAgICAgICAgIG5pZWtvbXBhdHliaWxub8WbY2kgeiBQT1NJWCBZYWNjXG4iCisiICBgY29uZmxpY3RzLXNyJyAgICBrb25mbGlrdHkgcHJ6ZXN1bmnEmWNpZS9yZWR1a2NqYSAoZG9tecWbbG5pZSB3xYLEhWN6b25lKVxuIgorIiAgYGNvbmZsaWN0cy1ycicgICAga29uZmxpa3R5IHJlZHVrY2phL3JlZHVrY2phIChkb215xZtsbmllIHfFgsSFY3pvbmUpXG4iCisiICBgZGVwcmVjYXRlZCcgICAgICBwcnplc3RyemHFgmUga29uc3RydWtjamVcbiIKKyIgIGBvdGhlcicgICAgICAgICAgIHdzenlzdGtpZSBpbm5lIG9zdHJ6ZcW8ZW5pYSAoZG9tecWbbG5pZSB3xYLEhWN6b25lKVxuIgorIiAgYGFsbCcgICAgICAgICAgICAgd3N6eXN0a2llIG9zdHJ6ZcW8ZW5pYVxuIgorIiAgYG5vLUtBVEVHT1JJQScgICAgd3nFgsSFY3phIG9zdHJ6ZcW8ZW5pYSB3IEtBVEVHT1JJSVxuIgorIiAgYG5vbmUnICAgICAgICAgICAgd3nFgsSFY3phIHdzenlzdGtpZSBvc3RyemXFvGVuaWFcbiIKKyIgIGBlcnJvcicgICAgICAgICAgIHRyYWt0dWplIG9zdHJ6ZcW8ZW5pYSBqYWtvIGLFgsSZZHlcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNzYKK21zZ2lkICIiCisiVEhJTkdTIGlzIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMgdGhhdCBjYW4gaW5jbHVkZTpcbiIKKyIgIGBzdGF0ZScgICAgICAgIGRlc2NyaWJlIHRoZSBzdGF0ZXNcbiIKKyIgIGBpdGVtc2V0JyAgICAgIGNvbXBsZXRlIHRoZSBjb3JlIGl0ZW0gc2V0cyB3aXRoIHRoZWlyIGNsb3N1cmVcbiIKKyIgIGBsb29rYWhlYWQnICAgIGV4cGxpY2l0bHkgYXNzb2NpYXRlIGxvb2thaGVhZCB0b2tlbnMgdG8gaXRlbXNcbiIKKyIgIGBzb2x2ZWQnICAgICAgIGRlc2NyaWJlIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMgc29sdmluZ1xuIgorIiAgYGFsbCcgICAgICAgICAgaW5jbHVkZSBhbGwgdGhlIGFib3ZlIGluZm9ybWF0aW9uXG4iCisiICBgbm9uZScgICAgICAgICBkaXNhYmxlIHRoZSByZXBvcnRcbiIKK21zZ3N0ciAiIgorIkxJU1RBIHN0YW5vd2kgc8WCb3dhIHByemVkemllbG9uZSBwcnplY2lua2FtaS4gRG9wdXN6Y3phbG5lIHPEhSBuYXN0xJlwdWrEhWNlICIKKyJzxYJvd2E6XG4iCisiICBgc3RhdGUnICAgICAgICBvcGlzdWplIHN0YW55XG4iCisiICBgaXRlbXNldCcgICAgICBkb2RhamUgc3ltYm9sZSBwb2Nob2RuZSBkbyBsaXN0eSBzeW1ib2xpIHBvZHN0YXdvd3ljaFxuIgorIiAgYGxvb2stYWhlYWQnICAgZHJ1a3VqZSBsaXN0xJkgbW/FvGxpd3ljaCB3IGthxbxkZWogcG96eWNqaSBzeW1ib2xpLW5hc3TEmXBjw7N3XG4iCisiICBgc29sdmVkJyAgICAgICBvcGlzdWplIHJvendpxIV6YW5pZSBrb25mbGlrdMOzdyBwcnplc3VuacSZY2llL3JlZHVrY2phXG4iCisiICBgYWxsJyAgICAgICAgICBkb8WCxIVjemEgd3N6eXN0a2llIHBvd3nFvHN6ZSBpbmZvcm1hY2plXG4iCisiICBgbm9uZScgICAgICAgICB3ecWCxIVjemEgcmFwb3J0XG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzg3Cittc2dpZCAiIgorIkZFQVRVUkUgaXMgYSBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCB3b3JkcyB0aGF0IGNhbiBpbmNsdWRlOlxuIgorIiAgYGNhcmV0JyAgICAgICAgc2hvdyBlcnJvcnMgd2l0aCBjYXJldHNcbiIKKyIgIGBhbGwnICAgICAgICAgIGFsbCBvZiB0aGUgYWJvdmVcbiIKKyIgIGBub25lJyAgICAgICAgIGRpc2FibGUgYWxsIG9mIHRoZSBhYm92ZVxuIgorIiAgIgorbXNnc3RyICIiCisiRlVOS0NKQSBzdGFub3dpIHPFgm93YSBwcnplZHppZWxvbmUgcHJ6ZWNpbmthbWkuIERvcHVzemN6YWxuZSBzxIUgbmFzdMSZcHVqxIVjZSAiCisic8WCb3dhOlxuIgorIiAgYGNhcmV0JyAgICAgICAgcG9rYXp1amUgYsWCxJlkeSBwcnp5IHXFvHljaXUga2FyZXR5IChzeW1ib2wgXilcbiIKKyIgIGBhbGwnICAgICAgICAgIHdzenlzdGtpZSBwb3d5xbxzemVcbiIKKyIgIGBub25lJyAgICAgICAgIMW8YWRuZSB6IHBvd3nFvHN6eWNoXG4iCisiICAiCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlcG9ydCBidWdzIHRvIDwlcz4uXG4iCittc2dzdHIgIk8gYsWCxJlkYWNoIHByb2dyYW11IHBvaW5mb3JtdWogPCVzPi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaG9tZSBwYWdlOiA8JXM+LlxuIgorbXNnc3RyICJzdHJvbmEgZG9tb3dhICVzOiA8JXM+LlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NworbXNnaWQgIkdlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LlxuIgorbXNnc3RyICJQb21vYyB3IHXFvHl3YW5pdSBvcHJvZ3JhbW93YW5pYSBHTlU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LlxuIgorCisjLiBUUkFOU0xBVE9SUzogUmVwbGFjZSBMQU5HX0NPREUgaW4gdGhpcyBVUkwgd2l0aCB5b3VyIGxhbmd1YWdlCisjLiBjb2RlIDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtL0xBTkdfQ09ERS5odG1sPiB0bworIy4gZm9ybSBvbmUgb2YgdGhlIFVSTHMgYXQgaHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS8uCisjLiBPdGhlcndpc2UsIHJlcGxhY2UgdGhlIGVudGlyZSBVUkwgd2l0aCB5b3VyIHRyYW5zbGF0aW9uIHRlYW0ncworIy4gZW1haWwgYWRkcmVzcy4KKyM6IHNyYy9nZXRhcmdzLmM6NDEwCittc2dpZCAiUmVwb3J0IHRyYW5zbGF0aW9uIGJ1Z3MgdG8gPGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vPi5cbiIKK21zZ3N0ciAiIgorIk8gYsWCxJlkYWNoIHTFgnVtYWN6ZW5pYSBwb2luZm9ybXVqIDx0cmFuc2xhdGlvbi10ZWFtLXBsQGxpc3RzLnNvdXJjZWZvcmdlLiIKKyJuZXQ+LlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQxMgorbXNnaWQgIkZvciBjb21wbGV0ZSBkb2N1bWVudGF0aW9uLCBydW46IGluZm8gYmlzb24uXG4iCittc2dzdHIgIkRsYSBwZcWCbmVqIGRva3VtZW50YWNqaSwgdXJ1Y2hvbTogaW5mbyBiaXNvblxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJiaXNvbiAoR05VIEJpc29uKSAlcyIKK21zZ3N0ciAiYmlzb24gKEdOVSBCaXNvbikgJXMiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDMwCittc2dpZCAiV3JpdHRlbiBieSBSb2JlcnQgQ29yYmV0dCBhbmQgUmljaGFyZCBTdGFsbG1hbi5cbiIKK21zZ3N0ciAiTmFwaXNhbnkgcHJ6ZXogUm9iZXJ0YSBDb3JiZXR0YSBpIFJpY2hhcmRhIFN0YWxsbWFuYS5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29weXJpZ2h0IChDKSAlZCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKK21zZ3N0ciAiQ29weXJpZ2h0IChDKSAlZCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MzcKK21zZ2lkICIiCisiVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk9cbiIKKyJ3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cbiIKK21zZ3N0ciAiIgorIk5pbmllanN6eSBwcm9ncmFtIGplc3Qgd29sbnltIG9wcm9ncmFtb3dhbmllbTsgd2FydW5raSBrb3Bpb3dhbmlhIHPEhSAiCisib3Bpc2FuZVxuIgorIncgxbpyw7NkxYJhY2guIEF1dG9yenkgbmllIGRhasSFIMW7QUROWUNIIGd3YXJhbmNqaSwgdyB0eW0gcsOzd25pZcW8IGd3YXJhbmNqaVxuIgorIlBSWllEQVROT8WaQ0kgRE8gU1BSWkVEQcW7WSBMVUIgRE8gS09OS1JFVE5ZQ0ggQ0VMw5NXLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSBza2VsZXRvbiBkZWNsYXJhdGlvbnMgYXJlIGludmFsaWQiCittc2dzdHIgIndpZWxva3JvdG5lIGRla2xhcmFjamUgc3praWVsZXR1IHPEhSBuaWVwcmF3aWTFgm93ZSIKKworIzogc3JjL2dldGFyZ3MuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgbGFuZ3VhZ2UiCittc2dzdHIgIiVzOiBuaWVwcmF3aWTFgm93eSBqxJl6eWsiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDc5Cittc2dpZCAibXVsdGlwbGUgbGFuZ3VhZ2UgZGVjbGFyYXRpb25zIGFyZSBpbnZhbGlkIgorbXNnc3RyICJ3aWVsb2tyb3RuZSBkZWtsYXJhY2plIGrEmXp5a293ZSBzxIUgbmllcHJhd2lkxYJvd2UiCisKKyM6IHNyYy9nZXRhcmdzLmM6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBtaXNzaW5nIG9wZXJhbmQiCittc2dzdHIgIiVzOiBicmFrdWrEhWN5IGFyZ3VtZW50IgorCisjOiBzcmMvZ2V0YXJncy5jOjc0OQorIywgYy1mb3JtYXQKK21zZ2lkICJleHRyYSBvcGVyYW5kICVzIgorbXNnc3RyICJkb2RhdGtvd3kgYXJndW1lbnQgJXMiCisKKyM6IHNyYy9ncmFtLmM6MTEyCittc2dpZCAiZW1wdHkiCittc2dzdHIgInB1c3RhIgorCisjOiBzcmMvZ3JhbS5jOjIwMQorbXNnaWQgIkdyYW1tYXIiCittc2dzdHIgIkdyYW1hdHlrYSIKKworIzogc3JjL2dyYXBodml6LmM6NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIi8vIEdlbmVyYXRlZCBieSAlcy5cbiIKKyIvLyBSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorIi8vIEhvbWUgcGFnZTogPCVzPi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIi8vIFV0d29yem9uZSBwcnpleiAlcy5cbiIKKyIvLyBCxYLEmWR5IHByb3N6xJkgemfFgmFzemHEhyBuYSBhZHJlcyA8JXM+LlxuIgorIi8vIFN0cm9uYSBkb21vd2E6IDwlcz4uXG4iCisiXG4iCisKKyM6IHNyYy9sb2NhdGlvbi5jOjkzIHNyYy9zY2FuLWdyYW0ubDo4NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSBudW1iZXIgb3ZlcmZsb3ciCittc2dzdHIgInByemVwZcWCbmllbmllIG51bWVydSBsaW5paSIKKworIzogc3JjL2xvY2F0aW9uLmM6OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29sdW1uIG51bWJlciBvdmVyZmxvdyIKK21zZ3N0ciAicHJ6ZXBlxYJuaWVuaWUgbnVtZXJ1IGtvbHVtbnkiCisKKyM6IHNyYy9tYWluLmM6MTQ2Cittc2dpZCAicnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzIgorbXNnc3RyICJiZXp1xbx5dGVjem5hIHJlZ3XFgmEgdyBhbmFsaXphdG9yemUgeiBwb3dvZHUga29uZmxpa3TDs3ciCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlZGVmaW5lIHZhcmlhYmxlICVzIHJlZGVmaW5lZCIKK21zZ3N0ciAienJlZGVmaW5pb3dhbmEgem1pZW5uYSAlJWRlZmluZSAlcyIKKworIzogc3JjL211c2NsZS10YWIuYzo0NTMKK21zZ2lkICJwcmV2aW91cyBkZWZpbml0aW9uIgorbXNnc3RyICJwb3ByemVkbmlhIGRlZmluaWNqYSIKKworIzogc3JjL211c2NsZS10YWIuYzo0OTAgc3JjL211c2NsZS10YWIuYzo1MDQgc3JjL211c2NsZS10YWIuYzo1NTYKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgJXMiCittc2dzdHIgIiVzOiBuaWV6ZGVmaW5pb3dhbmEgem1pZW5uYSAlJWRlZmluZSAlcyIKKworIzogc3JjL211c2NsZS10YWIuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJSVkZWZpbmUgQm9vbGVhbiB2YXJpYWJsZSAlcyIKK21zZ3N0ciAibmllcHJhd2lkxYJvd2Egd2FydG/Fm8SHIGRsYSBib29sZSdvd3NraWVqIHptaWVubmVqICUlZGVmaW5lICVzIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjYwOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlJWRlZmluZSB2YXJpYWJsZSAlczogJXMiCittc2dzdHIgIm5pZXByYXdpZMWCb3dhIHdhcnRvxZvEhyBkbGEgem1pZW5uZWogJSVkZWZpbmUgJXM6ICVzIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjYxMworIywgYy1mb3JtYXQKK21zZ2lkICJhY2NlcHRlZCB2YWx1ZTogJXMiCittc2dzdHIgInphYWtjZXB0b3dhbmEgd2FydG/Fm8SHOiAlcyIKKworIzogc3JjL3BhcnNlLWdyYW0ueTo3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBpZGVudGlmaWVyIGluIHBhcmFtZXRlciBkZWNsYXJhdGlvbiIKK21zZ3N0ciAiYnJha3VqxIVjeSBpZGVudHlmaWthdG9yIHcgZGVrbGFyYWNqaSBwYXJhbWV0csOzdyIKKworIzogc3JjL3ByaW50LmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIHR5cGUgJWQgaXMgJXNcbiIKK21zZ3N0ciAiIHR5cCAlZCBqZXN0ICVzXG4iCisKKyM6IHNyYy9wcmludC5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICJzaGlmdCwgYW5kIGdvIHRvIHN0YXRlICVkXG4iCittc2dzdHIgInByemVzdW5pxJljaWUsIGkgcHJ6ZWrFm2NpZSBkbyBzdGFudSAlZFxuIgorCisjOiBzcmMvcHJpbnQuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ28gdG8gc3RhdGUgJWRcbiIKK21zZ3N0ciAicHJ6ZWrFm2NpZSBkbyBzdGFudSAlZFxuIgorCisjOiBzcmMvcHJpbnQuYzoyMDMKK21zZ2lkICJlcnJvciAobm9uYXNzb2NpYXRpdmUpXG4iCittc2dzdHIgImLFgsSFZCAoc3ltYm9sIG5pZcWCxIVjesSFY3kgc2nEmSlcbiIKKworIzogc3JjL3ByaW50LmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZHVjZSB1c2luZyBydWxlICVkICglcykiCittc2dzdHIgInJlZHVrY2phIHByenkgdcW8eWNpdSByZWd1xYJ5ICVkICglcykiCisKKyM6IHNyYy9wcmludC5jOjIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJhY2NlcHQiCittc2dzdHIgImFrY2VwdG93YW5pZSIKKworIzogc3JjL3ByaW50LmM6MjY0IHNyYy9wcmludC5jOjMzOAorbXNnaWQgIiRkZWZhdWx0IgorbXNnc3RyICIkZG9tecWbbG5pZSIKKworIzogc3JjL3ByaW50LmM6MzczIHNyYy9wcmludF9ncmFwaC5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YXRlICVkIgorbXNnc3RyICJTdGFuICVkIgorCisjOiBzcmMvcHJpbnQuYzo0MDkKK21zZ2lkICJUZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIiCittc2dzdHIgIlN5bWJvbGUgdGVybWluYWxuZSBpIHJlZ3XFgnksIHcga3TDs3J5Y2ggd3lzdMSZcHVqxIUiCisKKyM6IHNyYy9wcmludC5jOjQzNgorbXNnaWQgIk5vbnRlcm1pbmFscywgd2l0aCBydWxlcyB3aGVyZSB0aGV5IGFwcGVhciIKK21zZ3N0ciAiU3ltYm9sZSBuaWV0ZXJtaW5hbG5lIGkgcmVndcWCeSwgdyBrdMOzcnljaCB3eXN0xJlwdWrEhSIKKworIzogc3JjL3ByaW50LmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiBsZWZ0OiIKK21zZ3N0ciAiIHBvIGxld2VqOiIKKworIzogc3JjL3ByaW50LmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiByaWdodDoiCittc2dzdHIgIiBwbyBwcmF3ZWo6IgorCisjOiBzcmMvcHJpbnQuYzo1MTAKK21zZ2lkICJSdWxlcyB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzIgorbXNnc3RyICJCZXp1xbx5dGVjem5lIHJlZ3XFgnkgdyBhbmFsaXphdG9yemUgeiBwb3dvZHUga29uZmxpa3TDs3ciCisKKyM6IHNyYy9yZWFkZXIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSAlcyBkZWNsYXJhdGlvbnMiCittc2dzdHIgIndpZWxva3JvdG5lIGRla2xhcmFjamUgJXMiCisKKyM6IHNyYy9yZWFkZXIuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVzdWx0IHR5cGUgY2xhc2ggb24gbWVyZ2UgZnVuY3Rpb24gJXM6IDwlcz4gIT0gPCVzPiIKK21zZ3N0ciAibmllemdvZG5vxZvEhyB0eXDDs3cgcG93cm90dSBwcnp5IHBvxYLEhWN6ZW5pdSBmdW5rY2ppICVzOiA8JXM+ICE9IDwlcz4iCisKKyM6IHNyYy9yZWFkZXIuYzoxMzkgc3JjL3N5bXRhYi5jOjE1NiBzcmMvc3ltdGFiLmM6MTY2IHNyYy9zeW10YWIuYzo5MzgKKyM6IHNyYy9zeW10YWIuYzo5NTMgc3JjL3N5bXRhYi5jOjk2OCBzcmMvc3ltdGFiLmM6OTgzCittc2dpZCAicHJldmlvdXMgZGVjbGFyYXRpb24iCittc2dzdHIgInBvcHJ6ZWRuaWEgZGVrbGFyYWNqYSIKKworIzogc3JjL3JlYWRlci5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGVkIHN5bWJvbCBuYW1lIGZvciAlcyBpZ25vcmVkIgorbXNnc3RyICJ6aWdub3Jvd2FubyBwb3d0w7Nyem9uxIUgbmF6d8SZIHN5bWJvbHUgZGxhICVzIgorCisjOiBzcmMvcmVhZGVyLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bGUgZ2l2ZW4gZm9yICVzLCB3aGljaCBpcyBhIHRva2VuIgorbXNnc3RyICJyZWd1xYJhIGRhbmEgZGxhIHN5bWJvbHUgbGVrc3lrYWxuZWdvICVzIgorCisjOiBzcmMvcmVhZGVyLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgInR5cGUgY2xhc2ggb24gZGVmYXVsdCBhY3Rpb246IDwlcz4gIT0gPCVzPiIKK21zZ3N0ciAia29uZmxpa3QgdHlwdSB3IGRvbXnFm2xuZWogYWtjamk6IDwlcz4gIT0gPCVzPiIKKworIzogc3JjL3JlYWRlci5jOjMxMAorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBydWxlIGZvciB0eXBlZCBub250ZXJtaW5hbCwgYW5kIG5vIGFjdGlvbiIKK21zZ3N0ciAiIgorInB1c3RhIHJlZ3XFgmEgaSBicmFrIGFrY2ppIGRsYSBzeW1ib2x1IG5pZXRlcm1pbmFsbmVnbyB6IG9rcmXFm2xlbmllbSB0eXB1IgorCisjOiBzcmMvcmVhZGVyLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNlZCB2YWx1ZTogJCVkIgorbXNnc3RyICJuaWV1xbx5d2FuYSB3YXJ0b8WbxIc6ICQlZCIKKworIzogc3JjL3JlYWRlci5jOjMzMAorbXNnaWQgInVuc2V0IHZhbHVlOiAkJCIKK21zZ3N0ciAibmlldXN0YXdpb25hIHdhcnRvxZvEhzogJCQiCisKKyM6IHNyYy9yZWFkZXIuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9rZW4gZm9yICUlcHJlYyBpcyBub3QgZGVmaW5lZDogJXMiCittc2dzdHIgInN5bWJvbCBsZWtzeWthbG55IGRsYSAlJXByZWMgbmllIGplc3QgemRlZmluaW93YW55OiAlcyIKKworIzogc3JjL3JlYWRlci5jOjQzMSBzcmMvcmVhZGVyLmM6NDQ1IHNyYy9yZWFkZXIuYzo0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSBvbmUgJXMgYWxsb3dlZCBwZXIgcnVsZSIKK21zZ3N0ciAidHlsa28gamVkbm8gJXMgZG96d29sb25lIG5hIGplZG7EhSByZWd1xYLEmSIKKworIzogc3JjL3JlYWRlci5jOjQ0MSBzcmMvcmVhZGVyLmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFmZmVjdHMgb25seSBHTFIgcGFyc2VycyIKK21zZ3N0ciAiJXMgd3DFgnl3YSB0eWxrbyBuYSBhbmFsaXphdG9yeSBza8WCYWRuaSBHTFIiCisKKyM6IHNyYy9yZWFkZXIuYzo0NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgbXVzdCBiZSBmb2xsb3dlZCBieSBwb3NpdGl2ZSBudW1iZXIiCittc2dzdHIgInphICVzIG11c2kgYnnEhyB1bWllc3pjem9uYSBsaWN6YmEgZG9kYXRuaWEiCisKKyM6IHNyYy9yZWFkZXIuYzo1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVsZSBpcyB0b28gbG9uZyIKK21zZ3N0ciAiemJ5dCBkxYJ1Z2EgcmVndcWCYSIKKworIzogc3JjL3JlYWRlci5jOjY3MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBydWxlcyBpbiB0aGUgaW5wdXQgZ3JhbW1hciIKK21zZ3N0ciAiYnJhayByZWd1xYIgdyBncmFtYXR5Y2Ugd2VqxZtjaW93ZWoiCisKKyM6IHNyYy9yZWR1Y2UuYzoyNDEKK21zZ2lkICJydWxlIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAicmVndcWCYSBiZXp1xbx5dGVjem5hIHcgZ3JhbWF0eWNlIgorCisjOiBzcmMvcmVkdWNlLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogJXMiCittc2dzdHIgIlN5bWJvbCBuaWV0ZXJtaW5hbG55IGJlenXFvHl0ZWN6bnkgdyBncmFtYXR5Y2U6ICVzIgorCisjOiBzcmMvcmVkdWNlLmM6MzUwCittc2dpZCAiTm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAiU3ltYm9sZSBuaWV0ZXJtaW5hbG5lIGJlenXFvHl0ZWN6bmUgdyBncmFtYXR5Y2UiCisKKyM6IHNyYy9yZWR1Y2UuYzozNjMKK21zZ2lkICJUZXJtaW5hbHMgdW51c2VkIGluIGdyYW1tYXIiCittc2dzdHIgIk5pZXXFvHl3YW5lIHN5bWJvbGUgdGVybWluYWxuZSB3IGdyYW1hdHljZSIKKworIzogc3JjL3JlZHVjZS5jOjM3MgorbXNnaWQgIlJ1bGVzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAiQmV6dcW8eXRlY3puZSByZWd1xYJ5IHcgZ3JhbWF0eWNlIgorCisjOiBzcmMvcmVkdWNlLmM6Mzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ2lkX3BsdXJhbCAiJWQgbm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0clswXSAiJWQgYmV6dcW8eXRlY3pueSBzeW1ib2wgbmlldGVybWluYWxueSB3IGdyYW1hdHljZSIKK21zZ3N0clsxXSAiJWQgYmV6dcW8eXRlY3puZSBzeW1ib2xlIG5pZXRlcm1pbmFsbmUgdyBncmFtYXR5Y2UiCittc2dzdHJbMl0gIiVkIGJlenXFvHl0ZWN6bnljaCBzeW1ib2xpIG5pZXRlcm1pbmFsbnljaCB3IGdyYW1hdHljZSIKKworIzogc3JjL3JlZHVjZS5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ2lkX3BsdXJhbCAiJWQgcnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyWzBdICIlZCBiZXp1xbx5dGVjem5hIHJlZ3XFgmEgdyBncmFtYXR5Y2UiCittc2dzdHJbMV0gIiVkIGJlenXFvHl0ZWN6bmUgcmVndcWCeSB3IGdyYW1hdHljZSIKK21zZ3N0clsyXSAiJWQgYmV6dcW8eXRlY3pueWNoIHJlZ3XFgiB3IGdyYW1hdHljZSIKKworIzogc3JjL3JlZHVjZS5jOjQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydCBzeW1ib2wgJXMgZG9lcyBub3QgZGVyaXZlIGFueSBzZW50ZW5jZSIKK21zZ3N0ciAicG9jesSFdGtvd3kgc3ltYm9sICVzIG5pZSBkemllZHppY3p5IMW8YWRuZWdvIHpkYW5pYSIKKworIzogc3JjL3NjYW4tY29kZS5sOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJheSAnJXMnIgorbXNnc3RyICJ6YWLFgsSFa2FueSAnJXMnIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjI5Cittc2dpZCAiYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUiCittc2dzdHIgInpuYWsgJzsnIG1vxbxlIGJ5xIcga29uaWVjem55IG5hIGtvxYRjdSBrb2R1IGFrY2ppIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjMyCittc2dpZCAiZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnIgorbXNnc3RyICJwcnp5c3rFgmUgd2Vyc2plIEJpc29uYSBuaWUgYsSZZMSFIGRvZGF3YcSHIHpuYWt1ICc7JyIKKworIzogc3JjL3NjYW4tY29kZS5sOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2Ugb2YgWVlGQUlMLCB3aGljaCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQiCittc2dzdHIgInXFvHljaWUgWVlGQUlMLCBrdMOzcmUgamVzdCBwcnplc3RhcnphxYJlIGkgYsSZZHppZSB1c3VuacSZdGUiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0MzEgc3JjL3NjYW4tY29kZS5sOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcnMgdG86ICVjJXMgYXQgJXMiCittc2dzdHIgIm9kbm9zaSBzacSZIGRvOiAlYyVzIHcgJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zc2libHkgbWVhbnQ6ICVjIgorbXNnc3RyICJtb8W8ZSBjaG9kemnFgm8gbzogJWMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCBoaWRpbmcgJWMiCittc2dzdHIgIiwgdWtyeXdhbmllICVjIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiBhdCAlcyIKK21zZ3N0ciAiIHcgJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCBjYW5ub3QgYmUgYWNjZXNzZWQgZnJvbSBtaWQtcnVsZSBhY3Rpb24gYXQgJCVkIgorbXNnc3RyICIsIG5pZSBqZXN0IGRvc3TEmXBuZSB6IGFrY2ppIG1pZC1ydWxlIHcgJCVkIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NTIxIHNyYy9zY2FuLWdyYW0ubDo3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZWdlciBvdXQgb2YgcmFuZ2U6ICVzIgorbXNnc3RyICJsaWN6YmEgY2HFgmtvd2l0YSBwb3phIHpha3Jlc2VtOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYxMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZmVyZW5jZTogJXMiCittc2dzdHIgIm5pZXByYXdpZMWCb3dlIG9kd2/FgmFuaWU6ICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjE5CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciBhZnRlciAnJWMnLCBleHBlY3RpbmcgaW50ZWdlciwgbGV0dGVyLCAnXycsICdbJywgb3IgJyQnIgorbXNnc3RyICIiCisiYsWCxIVkIHNrxYJhZG5pIHphIHpuYWtpZW0gJyVjJywgc3BvZHppZXdhbm8gc2nEmSBsaWN6YnksIGxpdGVyeSwgJ18nLCAnWycsIGx1YiAiCisiJyQnIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbiBiZWZvcmUgJCVkOiAlLipzIgorbXNnc3RyICJuaWUgem5hbGV6aW9ubyBzeW1ib2x1IHcgcHJvZHVrY2ppIHByemVkICQlZDogJS4qcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYzMworIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246ICUuKnMiCittc2dzdHIgIm5pZSB6bmFsZXppb25vIHN5bWJvbHUgdyBwcm9kdWtjamk6ICUuKnMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzbGVhZGluZyByZWZlcmVuY2U6ICVzIgorbXNnc3RyICJteWzEhWNlIG9kbmllc2llbmllOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAibmllamVkbm96bmFjem5lIG9kbmllc2llbmllOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJleHBsaWNpdCB0eXBlIGdpdmVuIGluIHVudHlwZWQgZ3JhbW1hciIKK21zZ3N0ciAiamF3bnkgdHlwIHcgZ3JhbWF0eWNlIGJlenR5cG93ZWoiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJCQgZm9yIHRoZSBtaWRydWxlIGF0ICQlZCBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiIgorIiQkIHcgcG96eWNqaSAkJWQgbmFsZcW8xIVjeSBkbyBwb8WbcmVkbmllaiByZWd1xYJ5ICVzIG5pZSBwb3NpYWRhICIKKyJ6YWRla2xhcm93YW5lZ28gdHlwdSIKKworIzogc3JjL3NjYW4tY29kZS5sOjc2NAorIywgYy1mb3JtYXQKK21zZ2lkICIkJCBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiJCQgbmFsZcW8xIVjeSBkbyAlcyBuaWUgcG9zaWFkYSB6YWRla2xhcm93YW5lZ28gdHlwdSIKKworIzogc3JjL3NjYW4tY29kZS5sOjc4NgorIywgYy1mb3JtYXQKK21zZ2lkICIkJXMgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiQlcyBuYWxlxbzEhWN5IGRvICVzIG5pZSBwb3NpYWRhIHphZGVrbGFyb3dhbmVnbyB0eXB1IgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmF5ICcsJyB0cmVhdGVkIGFzIHdoaXRlIHNwYWNlIgorbXNnc3RyICJ6YWLFgsSFa2FueSB6bmFrICcsJyBwb3RyYWt0b3dhbnkgamFrbyBiaWHFgnkgem5hayIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRpcmVjdGl2ZTogJXMiCittc2dzdHIgIm5pZXByYXdpZMWCb3dhIGR5cmVrdHl3YTogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudGlmaWVyOiAlcyIKK21zZ3N0ciAibmllcHJhd2lkxYJvd3kgaWRlbnR5ZmlrYXRvcjogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyOTUKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciIKK21zZ2lkX3BsdXJhbCAiaW52YWxpZCBjaGFyYWN0ZXJzIgorbXNnc3RyWzBdICJuaWVwcmF3aWTFgm93eSB6bmFrIgorbXNnc3RyWzFdICJuaWVwcmF3aWTFgm93ZSB6bmFraSIKK21zZ3N0clsyXSAibmllcHJhd2lkxYJvd3ljaCB6bmFrw7N3IgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgaWRlbnRpZmllciBpbiBicmFja2V0ZWQgbmFtZTogJXMiCittc2dzdHIgIm5pZXNwb2R6aWV3YW55IGlkZW50eWZpa2F0b3IgdyBuYXp3aWU6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgImFuIGlkZW50aWZpZXIgZXhwZWN0ZWQiCittc2dzdHIgIm9jemVraXdhbm8gaWRlbnR5ZmlrYXRvcmEiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozODEKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciBpbiBicmFja2V0ZWQgbmFtZSIKK21zZ2lkX3BsdXJhbCAiaW52YWxpZCBjaGFyYWN0ZXJzIGluIGJyYWNrZXRlZCBuYW1lIgorbXNnc3RyWzBdICJuaWVwcmF3aWTFgm93eSB6bmFrIHcgbmF6d2llIgorbXNnc3RyWzFdICJuaWVwcmF3aWTFgm93ZSB6bmFraSB3IG5hendpZSIKK21zZ3N0clsyXSAibmllcHJhd2lkxYJvd3ljaCB6bmFrw7N3IHcgbmF6d2llIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NDgxIHNyYy9zY2FuLWdyYW0ubDo1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgY2hhcmFjdGVyIGxpdGVyYWwiCittc2dzdHIgInB1c3R5IGxpdGVyYWxueSB6bmFrIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NDg2IHNyYy9zY2FuLWdyYW0ubDo1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0cmEgY2hhcmFjdGVycyBpbiBjaGFyYWN0ZXIgbGl0ZXJhbCIKK21zZ3N0ciAiZG9kYXRrb3dlIHpuYWtpIHcgbGl0ZXJhbG55bSB6bmFrdSIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bGwgY2hhcmFjdGVyIgorbXNnc3RyICJuaWVwcmF3aWTFgm93eSBwdXN0eSB6bmFrIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NTMxIHNyYy9zY2FuLWdyYW0ubDo1NDEgc3JjL3NjYW4tZ3JhbS5sOjU2MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBhZnRlciBcXC1lc2NhcGU6ICVzIgorbXNnc3RyICJuaWVwcmF3aWTFgm93YSBsaWN6YmEgcG8gXFwtZXNjYXBlOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjU3MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciBhZnRlciBcXC1lc2NhcGU6ICVzIgorbXNnc3RyICJuaWVwcmF3aWTFgm93eSB6bmFrIHBvIFxcLWVzY2FwZTogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo5MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyBhdCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiYnJha3VqxIVjeSAlcyBuYSBrb8WEY3UgcGxpa3UiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo5MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyBhdCBlbmQgb2YgbGluZSIKK21zZ3N0ciAiYnJha3VqxIVjeSAlcyBuYSBrb8WEY3UgbGluaWkiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5jbG9zZWQgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICJuaWVkb21rbmnEmXRhIGR5cmVrdHl3YSAlcyB3IHN6a2llbGVjaWUiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIGZldyBhcmd1bWVudHMgZm9yICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAiemEgbWHFgm8gYXJndW1lbnTDs3cgZGxhIGR5cmVrdHl3eSAlcyB3IHN6a2llbGVjaWUiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGZvciAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iCittc2dzdHIgInphIGR1xbxvIGFyZ3VtZW50w7N3IGRsYSBkeXJla3R5d3kgJXMgdyBzemtpZWxlY2llIgorCisjOiBzcmMvc3ltbGlzdC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICQgdmFsdWU6ICQlZCIKK21zZ3N0ciAibmllcHJhd2lkxYJvd2Egd2FydG/Fm8SHICQ6ICQlZCIKKworIzogc3JjL3N5bXRhYi5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlBPU0lYIFlhY2MgZm9yYmlkcyBkYXNoZXMgaW4gc3ltYm9sIG5hbWVzOiAlcyIKK21zZ3N0ciAiUE9TSVggWWFjYyB6YWJyYW5pYSBtecWbbG5pa8OzdyB3IG5hendhY2ggc3ltYm9saTogJXMiCisKKyM6IHNyYy9zeW10YWIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBzeW1ib2xzIGluIGlucHV0IGdyYW1tYXIgKGxpbWl0IGlzICVkKSIKK21zZ3N0ciAiemJ5dCBkdcW8byBzeW1ib2xpIHcgZ3JhbWF0eWNlIHdlasWbY2lvd2VqIChsaW1pdCB3eW5vc2kgJWQpIgorCisjOiBzcmMvc3ltdGFiLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICIlcyByZWRla2xhcmFjamEgZGxhICVzIgorCisjOiBzcmMvc3ltdGFiLmM6MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlZGVjbGFyYXRpb24gZm9yIDwlcz4iCittc2dzdHIgIiVzIHJlZGVrbGFyYWNqYSBkbGEgPCVzPiIKKworIzogc3JjL3N5bXRhYi5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgcmVkZWZpbmVkIgorbXNnc3RyICJ6cmVkZWZpbmlvd2FueSBzeW1ib2wgJXMiCisKKyM6IHNyYy9zeW10YWIuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHJlZGVjbGFyZWQiCittc2dzdHIgInpyZWRlZmluaW93YW55IHN5bWJvbCAlcyIKKworIzogc3JjL3N5bXRhYi5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlZmluaW5nIHVzZXIgdG9rZW4gbnVtYmVyIG9mICVzIgorbXNnc3RyICJwcnplZGVmaW5pb3dhbmllIG51bWVydSBzeW1ib2x1IGxla3N5a2FsbmVnbyAlcyIKKworIzogc3JjL3N5bXRhYi5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgaXMgdXNlZCwgYnV0IGlzIG5vdCBkZWZpbmVkIGFzIGEgdG9rZW4gYW5kIGhhcyBubyBydWxlcyIKK21zZ3N0ciAiIgorInXFvHl0eSBzeW1ib2wgJXMgbmllIGplc3QgemRlZmluaW93YW55IGpha28gc3ltYm9sIGxla3N5a2FsbnkgaSBuaWUgcG9zaWFkYSAiCisicmVndcWCIgorCisjOiBzcmMvc3ltdGFiLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyB1c2VkIG1vcmUgdGhhbiBvbmNlIGFzIGEgbGl0ZXJhbCBzdHJpbmciCittc2dzdHIgInN5bWJvbCAlcyB1xbx5dHkgd2nEmWNlaiBuacW8IGplZGVuIHJheiBqYWtvIMWCYcWEY3VjaCBsaXRlcmFsbnkiCisKKyM6IHNyYy9zeW10YWIuYzo0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIGdpdmVuIG1vcmUgdGhhbiBvbmUgbGl0ZXJhbCBzdHJpbmciCittc2dzdHIgInN5bWJvbCAlcyBwb2Rhbnkgd2nEmWNlaiBuacW8IGplZGVuIMWCYcWEY3VjaCBsaXRlcmFsbnkiCisKKyM6IHNyYy9zeW10YWIuYzo1MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNlciB0b2tlbiBudW1iZXIgJWQgcmVkZWNsYXJhdGlvbiBmb3IgJXMiCittc2dzdHIgInJlZGVrbGFyYWNqYSBudW1lcnUgc3ltYm9sdSBsZWtzeWthbG5lZ28gJWQgZGxhICVzIgorCisjOiBzcmMvc3ltdGFiLmM6NTM5CisjLCBjLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIGRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAicG9wcnplZG5pYSBkZWtsYXJhY2phIGRsYSAlcyIKKworIzogc3JjL3N5bXRhYi5jOjkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgc3RhcnQgc3ltYm9sICVzIGlzIHVuZGVmaW5lZCIKK21zZ3N0ciAic3ltYm9sIHBvY3rEhXRrb3d5ICVzIGplc3QgbmllemRlZmluaW93YW55IgorCisjOiBzcmMvc3ltdGFiLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBzdGFydCBzeW1ib2wgJXMgaXMgYSB0b2tlbiIKK21zZ3N0ciAic3ltYm9sIHBvY3rEhXRrb3d5ICVzIGplc3Qgc3ltYm9sZW0gbGVrc3lrYWxueW0iCisKKyM6IHNyYy9zeW10YWIuYzo5MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdnZWQgJSVkZXN0cnVjdG9yIgorbXNnc3RyICJkb215xZtsbnkgb3puYWN6b255ICUlZGVzdHJ1Y3RvciBkZWtsYXJvd2FueSBwb25vd25pZSIKKworIzogc3JjL3N5bXRhYi5jOjk1MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJSVkZXN0cnVjdG9yIgorbXNnc3RyICJkb215xZtsbnkgbmllb3puYWN6b255ICUlZGVzdHJ1Y3RvciBkZWtsYXJvd2FueSBwb25vd25pZSIKKworIzogc3JjL3N5bXRhYi5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlJXByaW50ZXIiCittc2dzdHIgImRvbXnFm2xueSBvem5hY3pvbnkgJSVwcmludGVyIGRla2xhcm93YW55IHBvbm93bmllIgorCisjOiBzcmMvc3ltdGFiLmM6OTgwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnbGVzcyAlJXByaW50ZXIiCittc2dzdHIgImRvbXnFm2xueSBuaWVvem5hY3pvbnkgJSVwcmludGVyIGRla2xhcm93YW55IHBvbm93bmllIgorCisjOiBkamdwcC9zdWJwaXBlLmM6NjMgZGpncHAvc3VicGlwZS5jOjI4NiBkamdwcC9zdWJwaXBlLmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92aW5nIG9mICclcycgZmFpbGVkIgorbXNnc3RyICJ1c3V3YW5pZSAnJXMnIG5pZSBwb3dpb2TFgm8gc2nEmSIKKworIzogZGpncHAvc3VicGlwZS5jOjg1IGRqZ3BwL3N1YnBpcGUuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGlvbiBvZiBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAidXR3b3J6ZW5pZSB0eW1jemFzb3dlZ28gcGxpa3UgbmllIHBvd2lvZMWCbyBzacSZIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgInNhdmluZyBzdGRpbiBmYWlsZWQiCittc2dzdHIgInphcGlzYW5pZSBzdGFuZGFyZG93ZWdvIHdlasWbY2lhIG5pZSBwb3dpb2TFgm8gc2nEmSIKKworIzogZGpncHAvc3VicGlwZS5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJzYXZpbmcgc3Rkb3V0IGZhaWxlZCIKK21zZ3N0ciAiemFwaXNhbmllIHN0YW5kYXJkb3dlZ28gd3lqxZtjaWEgbmllIHBvd2lvZMWCbyBzacSZIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTUzIGRqZ3BwL3N1YnBpcGUuYzoxOTcgZGpncHAvc3VicGlwZS5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nIG9mIHRtcGZpbGUgZmFpbGVkIgorbXNnc3RyICJvdHdhcmNpZSB0bXBmaWxlIG5pZSBwb3dpb2TFgm8gc2nEmSIKKworIzogZGpncHAvc3VicGlwZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBiaXNvbidzIHN0ZG91dCB0byB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICJuaWUgcG93aW9kxYJvIHNpxJkgcHJ6ZWtpZXJvd2FuaWUgc3Rkb3V0IGJpc29uYSBkbyB0eW1jemFzb3dlZ28gcGxpa3UiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgbTQncyBzdGRpbiBmcm9tIHRoZSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIm5pZSBwb3dpb2TFgm8gc2nEmSBwcnpla2llcm93YW5pZSBzdGRpbiBtNCB6IHR5bWN6YXNvd2VnbyBwbGlrdSIKKworIzogZGpncHAvc3VicGlwZS5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nIG9mIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICJvdHdhcmNpZSB0eW1jemFzb3dlZ28gcGxpa3UgbmllIHBvd2lvZMWCbyBzacSZIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIG00J3Mgc3Rkb3V0IHRvIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICJuaWUgcG93aW9kxYJvIHNpxJkgcHJ6ZWtpZXJvd2FuaWUgc3Rkb3V0IG00IGRvIHR5bWN6YXNvd2VnbyBwbGlrdSIKKworIzogZGpncHAvc3VicGlwZS5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gJyVzJyBpbnRlcnJ1cHRlZCIKK21zZ3N0ciAiZG9kYXRrb3d5IHByb2dyYW0gJyVzJyBwcnplcndhbnkiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAic3Vic2lkaWFyeSBwcm9ncmFtICclcycgbm90IGZvdW5kIgorbXNnc3RyICJkb2RhdGtvd3kgcHJvZ3JhbSAnJXMnIG5pZSB6bmFsZXppb255IgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIGJpc29uJ3Mgc3RkaW4gZnJvbSB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICJuaWUgcG93aW9kxYJvIHNpxJkgcHJ6ZWtpZXJvd2FuaWUgc3RkaW4gYmlzb25hIHogdHltY3phc293ZWdvIHBsaWt1IgorCisjOiBsaWIvYXJnbWF0Y2guYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCAlcyBmb3IgJXMiCittc2dzdHIgIm5pZXByYXdpZMWCb3d5IGFyZ3VtZW50ICVzIGRsYSAlcyIKKworIzogbGliL2FyZ21hdGNoLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImFtYmlndW91cyBhcmd1bWVudCAlcyBmb3IgJXMiCittc2dzdHIgIm5pZWplZG5vem5hY3pueSBhcmd1bWVudCAlcyBkbGEgJXMiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjE1MworbXNnaWQgIlZhbGlkIGFyZ3VtZW50cyBhcmU6IgorbXNnc3RyICJQcmF3aWTFgm93ZSBhcmd1bWVudHkgdG86IgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9hbGxvY3MsICV1IGZyZWVkICglLjJmJSUpLlxuIgorbXNnc3RyICIldSBiaXRzZXRfYWxsb2NzLCAldSB6d29sbmlvbmUgKCUuMmYlJSkuXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3NldHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorbXNnc3RyICIldSBiaXRzZXRfc2V0cywgJXUgemFwYW1pxJl0YW5lICglLjJmJSUpXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3Jlc2V0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF9yZXNldHMsICV1IHphcGFtacSZdGFuZSAoJS4yZiUlKVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF90ZXN0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF90ZXN0cywgJXUgemFwYW1pxJl0YW5lICglLjJmJSUpXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X2xpc3RzXG4iCittc2dzdHIgIiV1IGJpdHNldF9saXN0c1xuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTkyCittc2dpZCAiY291bnQgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICJoaXN0b2dyYW0gcmVqZXN0cnUgemxpY3plxYRcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5NQorbXNnaWQgInNpemUgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICJoaXN0b2dyYW0gcmVqZXN0cnUgd2llbGtvxZtjaVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTk4Cittc2dpZCAiZGVuc2l0eSBoaXN0b2dyYW1cbiIKK21zZ3N0ciAiaGlzdG9ncmFtIGfEmXN0b8WbY2lcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQml0c2V0IHN0YXRpc3RpY3M6XG4iCisiXG4iCittc2dzdHIgIiIKKyJTdGF0eXN0eWtpIGJpdHNldDpcbiIKKyJcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJBY2N1bXVsYXRlZCBydW5zID0gJXVcbiIKK21zZ3N0ciAiWmFrdW11bG93YW5lIHByemViaWVnaSA9ICV1XG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyNTkgbGliL2JpdHNldF9zdGF0cy5jOjI2NAorbXNnaWQgImNhbm5vdCByZWFkIHN0YXRzIGZpbGUiCittc2dzdHIgIm5pZSBtb8W8bmEgb2Rjenl0YcSHIHBsaWt1IHN0YXR5c3R5ayIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgc3RhdHMgZmlsZSBzaXplXG4iCittc2dzdHIgInrFgnkgcm96bWlhciBwbGlrdSBzdGF0eXN0eWtcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI4NyBsaWIvYml0c2V0X3N0YXRzLmM6Mjg5Cittc2dpZCAiY2Fubm90IHdyaXRlIHN0YXRzIGZpbGUiCittc2dzdHIgIm5pZSBtb8W8bmEgemFwaXNhxIcgcGxpa3Ugc3RhdHlzdHlrIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjkyCittc2dpZCAiY2Fubm90IG9wZW4gc3RhdHMgZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAibmllIG1vxbxuYSBvdHdvcnp5xIcgcGxpa3Ugc3RhdHlzdHlrIGRvIHphcGlzdSIKKworIzogbGliL2Nsb3Nlb3V0LmM6MTEyCittc2dpZCAid3JpdGUgZXJyb3IiCittc2dzdHIgImLFgsSFZCB6YXBpc3UiCisKKyM6IGxpYi9lcnJvci5jOjE4OAorbXNnaWQgIlVua25vd24gc3lzdGVtIGVycm9yIgorbXNnc3RyICJOaWV6bmFueSBixYLEhWQgc3lzdGVtdSIKKworIzogbGliL2dldG9wdC5jOjU0NyBsaWIvZ2V0b3B0LmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJyVzJyBpcyBhbWJpZ3VvdXM7IHBvc3NpYmlsaXRpZXM6IgorbXNnc3RyICIlczogb3BjamEgJyVzJyBqZXN0IG5pZWplZG5vem5hY3puYTsgbW/FvGxpd2/Fm2NpOiIKKworIzogbGliL2dldG9wdC5jOjYyNCBsaWIvZ2V0b3B0LmM6NjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy0tJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IG9wY2phICctLSVzJyBuaWUgbW/FvGUgbWllxIcgYXJndW1lbnTDs3dcbiIKKworIzogbGliL2dldG9wdC5jOjYzNyBsaWIvZ2V0b3B0LmM6NjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJyVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IG9wY2phICclYyVzJyBuaWUgbW/FvGUgbWllxIcgYXJndW1lbnTDs3dcbiIKKworIzogbGliL2dldG9wdC5jOjY4NSBsaWIvZ2V0b3B0LmM6NzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy0tJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBvcGNqYSAnLS0lcycgd3ltYWdhIGFyZ3VtZW50dVxuIgorCisjOiBsaWIvZ2V0b3B0LmM6NzQyIGxpYi9nZXRvcHQuYzo3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gJy0tJXMnXG4iCittc2dzdHIgIiVzOiBuaWV6bmFuYSBvcGNqYSAnLS0lcydcbiIKKworIzogbGliL2dldG9wdC5jOjc1MyBsaWIvZ2V0b3B0LmM6NzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uICclYyVzJ1xuIgorbXNnc3RyICIlczogbmllem5hbmEgb3BjamEgJyVjJXMnXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo4MDUgbGliL2dldG9wdC5jOjgwOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBvcHRpb24gLS0gJyVjJ1xuIgorbXNnc3RyICIlczogYsWCxJlkbmEgb3BjamEgLS0gJyVjJ1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6ODYxIGxpYi9nZXRvcHQuYzo4NzggbGliL2dldG9wdC5jOjEwODggbGliL2dldG9wdC5jOjExMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAnJWMnXG4iCittc2dzdHIgIiVzOiBvcGNqYSB3eW1hZ2EgYXJndW1lbnR1IC0tICclYydcbiIKKworIzogbGliL2dldG9wdC5jOjkzNCBsaWIvZ2V0b3B0LmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyBpcyBhbWJpZ3VvdXNcbiIKK21zZ3N0ciAiJXM6IG9wY2phICctVyAlcycgamVzdCBuaWVqZWRub3puYWN6bmFcbiIKKworIzogbGliL2dldG9wdC5jOjk3NCBsaWIvZ2V0b3B0LmM6OTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBvcGNqYSAnLVcgJXMnIG5pZSBtb8W8ZSBtaWXEhyBhcmd1bWVudMOzd1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6MTAxMyBsaWIvZ2V0b3B0LmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IG9wY2phICctVyAlcycgd3ltYWdhIGFyZ3VtZW50dVxuIgorCisjOiBsaWIvb2JzdGFjay5jOjQxMyBsaWIvb2JzdGFjay5jOjQxNSBsaWIveGFsbG9jLWRpZS5jOjM0Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAicGFtacSZxIcgd3ljemVycGFuYSIKKworIzogbGliL3NwYXduLXBpcGUuYzoxNDAgbGliL3NwYXduLXBpcGUuYzoxNDMgbGliL3NwYXduLXBpcGUuYzoyNjQKKyM6IGxpYi9zcGF3bi1waXBlLmM6MjY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZSIKK21zZ3N0ciAibmllIG1vxbxuYSB1dHdvcnp5xIcgcG90b2t1IgorCisjOiBsaWIvc3Bhd24tcGlwZS5jOjIzNCBsaWIvc3Bhd24tcGlwZS5jOjM0OCBsaWIvd2FpdC1wcm9jZXNzLmM6MjgyCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MgZmFpbGVkIgorbXNnc3RyICJwb2Rwcm9jZXMgJXMgbmllIHBvd2nDs2TFgiBzacSZIgorCisjLiBUUkFOU0xBVE9SUzoKKyMuIEdldCB0cmFuc2xhdGlvbnMgZm9yIG9wZW4gYW5kIGNsb3NpbmcgcXVvdGF0aW9uIG1hcmtzLgorIy4gVGhlIG1lc3NhZ2UgY2F0YWxvZyBzaG91bGQgdHJhbnNsYXRlICJgIiB0byBhIGxlZnQKKyMuIHF1b3RhdGlvbiBtYXJrIHN1aXRhYmxlIGZvciB0aGUgbG9jYWxlLCBhbmQgc2ltaWxhcmx5IGZvcgorIy4gIiciLiAgRm9yIGV4YW1wbGUsIGEgRnJlbmNoIFVuaWNvZGUgbG9jYWwgc2hvdWxkIHRyYW5zbGF0ZQorIy4gdGhlc2UgdG8gVSswMEFCIChMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRQorIy4gUVVPVEFUSU9OIE1BUkspLCBhbmQgVSswMEJCIChSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUKKyMuIFFVT1RBVElPTiBNQVJLKSwgcmVzcGVjdGl2ZWx5LgorIy4KKyMuIElmIHRoZSBjYXRhbG9nIGhhcyBubyB0cmFuc2xhdGlvbiwgd2Ugd2lsbCB0cnkgdG8KKyMuIHVzZSBVbmljb2RlIFUrMjAxOCAoTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspIGFuZAorIy4gVW5pY29kZSBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykuICBJZiB0aGUKKyMuIGN1cnJlbnQgbG9jYWxlIGlzIG5vdCBVbmljb2RlLCBsb2NhbGVfcXVvdGluZ19zdHlsZQorIy4gd2lsbCBxdW90ZSAnbGlrZSB0aGlzJywgYW5kIGNsb2NhbGVfcXVvdGluZ19zdHlsZSB3aWxsCisjLiBxdW90ZSAibGlrZSB0aGlzIi4gIFlvdSBzaG91bGQgYWx3YXlzIGluY2x1ZGUgdHJhbnNsYXRpb25zCisjLiBmb3IgImAiIGFuZCAiJyIgZXZlbiBpZiBVKzIwMTggYW5kIFUrMjAxOSBhcmUgYXBwcm9wcmlhdGUKKyMuIGZvciB5b3VyIGxvY2FsZS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFya3NfaW5fb3RoZXJfbGFuZ3VhZ2VzPgorIy4gYW5kIHVzZSBnbHlwaHMgc3VpdGFibGUgZm9yIHlvdXIgbGFuZ3VhZ2UuCisjOiBsaWIvcXVvdGVhcmcuYzozMTIKK21zZ2lkICJgIgorbXNnc3RyICJgIgorCisjOiBsaWIvcXVvdGVhcmcuYzozMTMKK21zZ2lkICInIgorbXNnc3RyICInIgorCisjOiBsaWIvdGltZXZhci5jOjQ3NQorbXNnaWQgIiIKKyJcbiIKKyJFeGVjdXRpb24gdGltZXMgKHNlY29uZHMpXG4iCittc2dzdHIgIiIKKyJcbiIKKyJDemFzIHd5a29uYW5pYSAodyBzZWt1bmRhY2gpXG4iCisKKyM6IGxpYi90aW1ldmFyLmM6NTI1Cittc2dpZCAiIFRPVEFMICAgICAgICAgICAgICAgICA6IgorbXNnc3RyICIgQ0HFgUtPV0lUWSAgICAgICAgICAgICA6IgorCisjOiBsaWIvdGltZXZhci5jOjU2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lIGluICVzOiAlbGQuJTA2bGQgKCVsZCUlKVxuIgorbXNnc3RyICJjemFzIHcgJXM6ICVsZC4lMDZsZCAoJWxkJSUpXG4iCisKKyM6IGxpYi93MzJzcGF3bi5oOjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIl9vcGVuX29zZmhhbmRsZSBmYWlsZWQiCittc2dzdHIgIl9vcGVuX29zZmhhbmRsZSBuaWUgcG93aW9kxYJvIHNpxJkiCisKKyM6IGxpYi93MzJzcGF3bi5oOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXN0b3JlIGZkICVkOiBkdXAyIGZhaWxlZCIKK21zZ3N0ciAibmllIG1vxbxuYSBvZHp5c2thxIcgZmQgJWQ6IHd5d2/FgmFuaWUgZHVwMiBuaWUgcG93aW9kxYJvIHNpxJkiCisKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzoyMjMgbGliL3dhaXQtcHJvY2Vzcy5jOjI1NSBsaWIvd2FpdC1wcm9jZXNzLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MiCittc2dzdHIgInBvZHByb2NlcyAlcyIKKworIzogbGliL3dhaXQtcHJvY2Vzcy5jOjI3NCBsaWIvd2FpdC1wcm9jZXNzLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MgZ290IGZhdGFsIHNpZ25hbCAlZCIKK21zZ3N0ciAicG9kcHJvY2VzICVzIG90cnp5bWHFgiBuaWVwcmF3aWTFgm93eSBzeWduYcWCICVkIgorCisjfiBtc2dpZCAic3RhdGUgJWQiCisjfiBtc2dzdHIgInN0YW4gJWQiCisKKyN+IG1zZ2lkICJzdHJheSAnQCciCisjfiBtc2dzdHIgInphYsWCxIVrYW55ICdAJyIKKworI34gbXNnaWQgIiIKKyN+ICJ1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgYCVzJyBwYXNzZWQgdG8gbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2dldF9sb2MiCisjfiBtc2dzdHIgIiIKKyN+ICJuaWV6ZGVmaW5pb3dhbmEgem1pZW5uYSAlJWRlZmluZSBgJXMnIHByemVrYXphbmEgZG8gIgorI34gIm11c2NsZV9wZXJjZW50X2RlZmluZV9nZXRfbG9jIgorCisjfiBtc2dpZCAiIgorI34gInVuZGVmaW5lZCAlJWRlZmluZSB2YXJpYWJsZSBgJXMnIHBhc3NlZCB0byAiCisjfiAibXVzY2xlX3BlcmNlbnRfZGVmaW5lX2dldF9zeW5jbGluZSIKKyN+IG1zZ3N0ciAiIgorI34gIm5pZXpkZWZpbmlvd2FuYSB6bWllbm5hICUlZGVmaW5lIGAlcycgcHJ6ZWthemFuYSBkbyAiCisjfiAibXVzY2xlX3BlcmNlbnRfZGVmaW5lX2dldF9zeW5jbGluZSIKKworI34gbXNnaWQgIiIKKyN+ICJ1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgYCVzJyBwYXNzZWQgdG8gbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2ZsYWdfaWYiCisjfiBtc2dzdHIgIiIKKyN+ICJuaWV6ZGVmaW5pb3dhbmEgem1pZW5uYSAlJWRlZmluZSBgJXMnIHByemVrYXphbmEgZG8gIgorI34gIm11c2NsZV9wZXJjZW50X2RlZmluZV9mbGFnX2lmIgorCisjfiBtc2dpZCAiIgorI34gInVuZGVmaW5lZCAlJWRlZmluZSB2YXJpYWJsZSBgJXMnIHBhc3NlZCB0byAiCisjfiAibXVzY2xlX3BlcmNlbnRfZGVmaW5lX2NoZWNrX3ZhbHVlcyIKKyN+IG1zZ3N0ciAiIgorI34gIm5pZXpkZWZpbmlvd2FuYSB6bWllbm5hICUlZGVmaW5lIGAlcycgcHJ6ZWthemFuYSBkbyAiCisjfiAibXVzY2xlX3BlcmNlbnRfZGVmaW5lX2NoZWNrX3ZhbHVlcyIKKworI34gbXNnaWQgIiIKKyN+ICJHZW5lcmF0ZSBMQUxSKDEpIGFuZCBHTFIgcGFyc2Vycy5cbiIKKyN+ICJcbiIKKyN+IG1zZ3N0ciAiIgorI34gIkdOVSBCaXNvbiB0d29yenkgYW5hbGl6YXRvcnkgc2vFgmFkbmkgTEFMUigxKSBpIEdMUi5cbiIKKyN+ICJcbiIKKworI34gbXNnaWQgInRva2VucyAlcyBhbmQgJXMgYm90aCBhc3NpZ25lZCBudW1iZXIgJWQiCisjfiBtc2dzdHIgIm9iYSBzeW1ib2xlIGxla3N5a2FsbmUgJXMgaSAlcyBtYWrEhSBwcnp5cGlzYW7EhSB3YXJ0b8WbxIcgJWQiCisKKyN+IG1zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gYCVzJyBjb3VsZCBub3QgYmUgaW52b2tlZCIKKyN+IG1zZ3N0ciAiZG9kYXRrb3d5IHByb2dyYW0gYCVzJyBuaWUgbcOzZ8WCIGJ5xIcgd3l3b8WCYW55IgorCisjfiBtc2dpZCAiaW52YWxpZCBlc2NhcGUgc2VxdWVuY2U6ICVzIgorI34gbXNnc3RyICJuaWVwcmF3aWTFgm93YSBzZWt3ZW5jamEgdWNpZWN6a2k6ICVzIgorCisjfiBtc2dpZCAidW5yZWNvZ25pemVkIGVzY2FwZSBzZXF1ZW5jZTogJXMiCisjfiBtc2dzdHIgIm5pZXJvenBvem5hbmEgc2Vrd2VuY2phIHVjaWVjemtpOiAlcyIKKworI34gbXNnaWQgIiVzOiBpbGxlZ2FsIG9wdGlvbiAtLSAlY1xuIgorI34gbXNnc3RyICIlczogbmlld8WCYcWbY2l3YSBvcGNqYSAtLSAlY1xuIgorCisjfiBtc2dpZCAiJWQgbm9udGVybWluYWwiCisjfiBtc2dpZF9wbHVyYWwgIiVkIG5vbnRlcm1pbmFscyIKKyN+IG1zZ3N0clswXSAiJWQgbmlldGVybWluYWwiCisjfiBtc2dzdHJbMV0gIiVkIG5pZXRlcm1pbmFsZSIKKyN+IG1zZ3N0clsyXSAiJWQgbmlldGVybWluYWxpIgorCisjfiBtc2dpZCAiIGFuZCAiCisjfiBtc2dzdHIgIiBpICIKKworI34gbXNnaWQgIiVkIHJ1bGUiCisjfiBtc2dpZF9wbHVyYWwgIiVkIHJ1bGVzIgorI34gbXNnc3RyWzBdICIlZCByZWd1xYJhIgorI34gbXNnc3RyWzFdICIlZCByZWd1xYJ5IgorI34gbXNnc3RyWzJdICIlZCByZWd1xYIiCisKKyN+IG1zZ2lkICIiCisjfiAiSWYgYSBsb25nIG9wdGlvbiBzaG93cyBhbiBhcmd1bWVudCBhcyBtYW5kYXRvcnksIHRoZW4gaXQgaXMgbWFuZGF0b3J5XG4iCisjfiAiZm9yIHRoZSBlcXVpdmFsZW50IHNob3J0IG9wdGlvbiBhbHNvLiAgU2ltaWxhcmx5IGZvciBvcHRpb25hbCBhcmd1bWVudHMuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJKZcWbbGkgZMWCdWdhIG9wY2phIHBvc2lhZGEgb2Jvd2nEhXprb3d5IGFyZ3VtZW50LCB0byB3dGVkeSBvYm93acSFemtvd3kgIgorI34gImplc3RcbiIKKyN+ICJvbiB0YWvFvGUgZGxhIHLDs3dub3dhxbxuZWogamVqIG9wY2ppIGtyw7N0a2llai4gIFBvZG9ibmllIGplc3QgZGxhICIKKyN+ICJhcmd1bWVudMOzd1xuIgorI34gIm9wY2pvbmFsbnljaC5cbiIKKworI34gbXNnaWQgIlJ1bGVzIG5ldmVyIHJlZHVjZWQiCisjfiBtc2dzdHIgIlJlZ3XFgnkgbmllcmVkdWtvd2FsbmUiCisKKyN+IG1zZ2lkICJ1c2VsZXNzIHJ1bGUiCisjfiBtc2dzdHIgImJlenXFvHl0ZWN6bmEgcmVndcWCYSIKKworI34gbXNnaWQgInVzZWxlc3Mgbm9udGVybWluYWw6ICVzIgorI34gbXNnc3RyICJiZXp1xbx5dGVjem55IHN5bWJvbCBuaWV0ZXJtaW5hbG55OiAlcyIKKworI34gbXNnaWQgIlVzZWxlc3Mgbm9udGVybWluYWxzIgorI34gbXNnc3RyICJCZXp1xbx5dGVjem5lIHN5bWJvbGUgbmlldGVybWluYWxuZSIKKworI34gbXNnaWQgIlRlcm1pbmFscyB3aGljaCBhcmUgbm90IHVzZWQiCisjfiBtc2dzdHIgIlN5bWJvbGUgdGVybWluYWxuZSwga3TDs3JlIG5pZSBzxIUgdcW8eXRlIgorCisjfiBtc2dpZCAiVXNlbGVzcyBydWxlcyIKKyN+IG1zZ3N0ciAiQmV6dcW8eXRlY3puZSByZWd1xYJ5IgorCisjfiBtc2dpZCAiJWQgcnVsZSBuZXZlciByZWR1Y2VkXG4iCisjfiBtc2dpZF9wbHVyYWwgIiVkIHJ1bGVzIG5ldmVyIHJlZHVjZWRcbiIKKyN+IG1zZ3N0clswXSAiJWQgbmllcmVkdWtvd2FsbmEgcmVndcWCYVxuIgorI34gbXNnc3RyWzFdICIlZCBuaWVyZWR1a293YWxuZSByZWd1xYJ5XG4iCisjfiBtc2dzdHJbMl0gIiVkIG5pZXJlZHVrb3dhbG55Y2ggcmVndcWCXG4iCisKKyN+IG1zZ2lkICJ3YXJuaW5nOiAiCisjfiBtc2dzdHIgIm9zdHJ6ZcW8ZW5pZTogIgorCisjfiBtc2dpZCAibWlzc2luZyBgeycgaW4gJXMiCisjfiBtc2dzdHIgImJyYWt1amUgYHsnIHcgJXMiCisKKyN+IG1zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gYCVzJyBmYWlsZWQgKGV4aXQgc3RhdHVzICVkKSIKKyN+IG1zZ3N0ciAiZG9kYXRrb3d5IHByb2dyYW0gYCVzJyBuaWUgcG93acOzZMWCIHNpxJkgKGtvZCB3eWrFm2NpYSAlZCkiCisKKyN+IG1zZ2lkICJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIgorI34gbXNnc3RyICJixYLEhWQgc2vFgmFkbmk6IG5pZSBtb8W8bmEgY29mbsSFxIcgcHJ6ZXN1bmnEmWNpYSBzeW1ib2x1IGxla3N5a2FsbmVnbyIKKworI34gbXNnaWQgIlN0YWNrIG5vdyIKKyN+IG1zZ3N0ciAiU3RvcyBvYmVjbmllIgorCisjfiBtc2dpZCAiUmVkdWNpbmcgc3RhY2sgYnkgcnVsZSAlZCAobGluZSAldSksICIKKyN+IG1zZ3N0ciAiUmVkdWtjamEgc3Rvc3UgcG9wcnpleiByZWd1xYLEmSAlZCAobGluaWEgJXUpLCAiCisKKyN+IG1zZ2lkICJwYXJzZXIgc3RhY2sgb3ZlcmZsb3ciCisjfiBtc2dzdHIgInByemVwZcWCbmllbmllIHN0b3N1IGFuYWxpemF0b3JhIgorCisjfiBtc2dpZCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWx1XG4iCisjfiBtc2dzdHIgIlJvem1pYXIgc3Rvc3UgendpxJlrc3pvbnkgZG8gJWx1XG4iCisKKyN+IG1zZ2lkICJFbnRlcmluZyBzdGF0ZSAlZFxuIgorI34gbXNnc3RyICJXZWrFm2NpZSB3IHN0YW4gJWRcbiIKKworI34gbXNnaWQgIlJlYWRpbmcgYSB0b2tlbjogIgorI34gbXNnc3RyICJPZGN6eXQgc3ltYm9sdSBsZWtzeWthbG5lZ286ICIKKworI34gbXNnaWQgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iCisjfiBtc2dzdHIgIlRlcmF6IG5hIGtvxYRjdSB3ZWrFm2NpYS5cbiIKKworI34gbXNnaWQgIk5leHQgdG9rZW4gaXMiCisjfiBtc2dzdHIgIk5hc3TEmXBueSBzeW1ib2wgbGVrc3lrYWxueSB0byIKKworI34gbXNnaWQgIlNoaWZ0aW5nIgorI34gbXNnc3RyICJQcnplc3VuacSZY2llIgorCisjfiBtc2dpZCAiUE9TSVggZm9yYmlkcyBkZWNsYXJhdGlvbnMgaW4gdGhlIGdyYW1tYXIiCisjfiBtc2dzdHIgIlBPU0lYIHphYnJhbmlhIGRla2xhcmFjamkgdyBncmFtYXR5Y2UiCisKKyN+IG1zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiCisjfiBtc2dzdHIgImLFgsSFZCBza8WCYWRuaSwgbmllc3BvZHppZXdhbnkgc3ltYm9sICVzIgorCisjfiBtc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMiCisjfiBtc2dzdHIgImLFgsSFZCBza8WCYWRuaSwgbmllc3BvZHppZXdhbnkgc3ltYm9sICVzLCBvY3pla2l3YW5vICVzIgorCisjfiBtc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiCisjfiBtc2dzdHIgImLFgsSFZCBza8WCYWRuaSwgbmllc3BvZHppZXdhbnkgc3ltYm9sICVzLCBvY3pla2l3YW5vICVzIGx1YiAlcyIKKworI34gbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIgorI34gbXNnc3RyICJixYLEhWQgc2vFgmFkbmksIG5pZXNwb2R6aWV3YW55ICVzLCBvY3pla2l3YW5vICVzIGx1YiAlcyBsdWIgJXMiCisKKyN+IG1zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIKKyN+IG1zZ3N0ciAiIgorI34gImLFgsSFZCBza8WCYWRuaSwgbmllc3BvZHppZXdhbnkgc3ltYm9sICVzLCBvY3pla2l3YW5vICVzIGx1YiAlcyBsdWIgJXMgbHViICVzIgorCisjfiBtc2dpZCAic3ludGF4IGVycm9yOyBhbHNvIG1lbW9yeSBleGhhdXN0ZWQiCisjfiBtc2dzdHIgImLFgsSFZCBza8WCYWRuaTsgcG9uYWR0byB3eWN6ZXJwYW5hIHBhbWnEmcSHIgorCisjfiBtc2dpZCAic3ludGF4IGVycm9yIgorI34gbXNnc3RyICJixYLEhWQgc2vFgmFkbmkiCisKKyN+IG1zZ2lkICJFcnJvcjogZGlzY2FyZGluZyIKKyN+IG1zZ3N0ciAiQsWCxIVkOiBvZHJ6dWNlbmllIgorCisjfiBtc2dpZCAiRXJyb3I6IHBvcHBpbmciCisjfiBtc2dzdHIgIkLFgsSFZDogemRlam1vd2FuaWUiCisKKyN+IG1zZ2lkICJFcnJvcjogZGlzY2FyZGluZyBsb29rYWhlYWQiCisjfiBtc2dzdHIgIkLFgsSFZDogb2RyenVjZW5pZSBzeW1ib2x1LW5hc3TEmXBjeSIKKworI34gbXNnaWQgImludmFsaWQgJCB2YWx1ZSIKKyN+IG1zZ3N0ciAibmllcHJhd2lkxYJvd2Egd2FydG/Fm8SHICQiCisKKyN+IG1zZ2lkICJjb25mbGljdGluZyBwcmVjZWRlbmNlcyBmb3IgJXMgYW5kICVzIgorI34gbXNnc3RyICJrb25mbGlrdCBwaWVyd3N6ZcWEc3R3IGRsYSAlcyBpICVzIgorCisjfiBtc2dpZCAiY29uZmxpY3RpbmcgYXNzb2NpYXRpdml0aWVzIGZvciAlcyAoJXMpIGFuZCAlcyAoJXMpIgorI34gbXNnc3RyICJrb25mbGlrdCDFgsSFY3pub8WbY2kgb3BlcmF0b3LDs3cgZGxhICVzICglcykgaSAlcyAoJXMpIgpkaWZmIC0tZ2l0IGEvcG8vcHQuZ21vIGIvcG8vcHQuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNzE2NzMKLS0tIC9kZXYvbnVsbAorKysgYi9wby9wdC5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vcHQucG8gYi9wby9wdC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTAzZmMxCi0tLSAvZGV2L251bGwKKysrIGIvcG8vcHQucG8KQEAgLTAsMCArMSwxMTA0IEBACisjIGJpc29uLTIuNC4xOiBUcmFuc2xhdGlvbiB0byBQb3J0dWd1ZXNlLgorIyBDb3B5cmlnaHQgKEMpIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBiaXNvbiBwYWNrYWdlLgorIyBIdWdvIFBhdHLDrWNpbyA8aHVnby5hLnBhdHJpY2lvQGdtYWlsLmNvbT4sIDIwMDkuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBiaXNvbi0yLjQuMVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBidWctYmlzb25AZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEyLTEyLTEyIDE2OjA5KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA5LTAxLTI4IDAwOjE1KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEh1Z28gUGF0csOtY2lvIDxodWdvLmEucGF0cmljaW9AZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IFBvcnR1Z3Vlc2UgPHRyYW5zbGF0aW9uLXRlYW0tcHRAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiBwdFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlgtUG9lZGl0LUxhbmd1YWdlOiBQb3J0dWd1ZXNlXG4iCisiWC1Qb2VkaXQtQ291bnRyeTogUE9SVFVHQUxcbiIKKyJYLVBvZWRpdC1Tb3VyY2VDaGFyc2V0OiB1dGYtOFxuIgorCisjOiBzcmMvY29tcGxhaW4uYzoxMjAgc3JjL2NvbXBsYWluLmM6MTMxIHNyYy9jb21wbGFpbi5jOjE0MCBzcmMvY29tcGxhaW4uYzoxODgKKyM6IHNyYy9jb21wbGFpbi5jOjE5OAorbXNnaWQgIndhcm5pbmciCittc2dzdHIgImF2aXNvIgorCisjOiBzcmMvY29tcGxhaW4uYzoxNTEgc3JjL2NvbXBsYWluLmM6MTYwIHNyYy9jb21wbGFpbi5jOjE2NworIywgZnV6enkKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiRXJybyBkZSBFL1MiCisKKyM6IHNyYy9jb21wbGFpbi5jOjIwOCBzcmMvY29tcGxhaW4uYzoyMTUKK21zZ2lkICJmYXRhbCBlcnJvciIKK21zZ3N0ciAiZXJybyBmYXRhbCIKKworIzogc3JjL2NvbmZsaWN0cy5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIHNoaWZ0IgorbXNnc3RyICIiCisKKyM6IHNyYy9jb25mbGljdHMuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyByZWR1Y2UiCittc2dzdHIgIiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIGFuIGVycm9yIgorbXNnc3RyICIiCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCBzaGlmdC9yZWR1Y2UsICVkIHJlZHVjZS9yZWR1Y2VcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgc2hpZnQvcmVkdWNlXG4iCittc2dzdHIgIiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdHM6ICVkIHJlZHVjZS9yZWR1Y2VcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YXRlICVkICIKK21zZ3N0ciAiIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlZXhwZWN0LXJyIGFwcGxpZXMgb25seSB0byBHTFIgcGFyc2VycyIKK21zZ3N0ciAiIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NjE2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICVkIHNoaWZ0L3JlZHVjZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiZXhwZWN0ZWQgJWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IHNyYy9jb25mbGljdHMuYzo2MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJWQgcmVkdWNlL3JlZHVjZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiZXhwZWN0ZWQgJWQgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBzcmMvZmlsZXMuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBvcGVuIgorbXNnc3RyICIiCisKKyM6IHNyYy9maWxlcy5jOjEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnB1dC9vdXRwdXQgZXJyb3IiCittc2dzdHIgIiIKKworIzogc3JjL2ZpbGVzLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjbG9zZSBmaWxlIgorbXNnc3RyICJjYW5ub3QgY2xvc2UgZmlsZSIKKworIzogc3JjL2ZpbGVzLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIG92ZXJ3cml0ZSB0aGUgaW5wdXQgZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvZmlsZXMuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3Rpbmcgb3V0cHV0cyB0byBmaWxlICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeSBgJXMgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgW09QVElPTl0uLi4gRklMRVxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6MzAyCittc2dpZCAiIgorIkdlbmVyYXRlIGEgZGV0ZXJtaW5pc3RpYyBMUiBvciBnZW5lcmFsaXplZCBMUiAoR0xSKSBwYXJzZXIgZW1wbG95aW5nXG4iCisiTEFMUigxKSwgSUVMUigxKSwgb3IgY2Fub25pY2FsIExSKDEpIHBhcnNlciB0YWJsZXMuICBJRUxSKDEpIGFuZFxuIgorImNhbm9uaWNhbCBMUigxKSBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwOQorbXNnaWQgIiIKKyJNYW5kYXRvcnkgYXJndW1lbnRzIHRvIGxvbmcgb3B0aW9ucyBhcmUgbWFuZGF0b3J5IGZvciBzaG9ydCBvcHRpb25zIHRvby5cbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjMxMgorbXNnaWQgIlRoZSBzYW1lIGlzIHRydWUgZm9yIG9wdGlvbmFsIGFyZ3VtZW50cy5cbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjMxNgorbXNnaWQgIiIKKyJcbiIKKyJPcGVyYXRpb24gbW9kZXM6XG4iCisiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIKKyIgICAgICAtLXByaW50LWxvY2FsZWRpciAgICAgIG91dHB1dCBkaXJlY3RvcnkgY29udGFpbmluZyBsb2NhbGUtZGVwZW5kZW50ICIKKyJkYXRhXG4iCisiICAgICAgLS1wcmludC1kYXRhZGlyICAgICAgICBvdXRwdXQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgc2tlbGV0b25zIGFuZCBYU0xUXG4iCisiICAteSwgLS15YWNjICAgICAgICAgICAgICAgICBlbXVsYXRlIFBPU0lYIFlhY2NcbiIKKyIgIC1XLCAtLXdhcm5pbmdzWz1DQVRFR09SWV0gIHJlcG9ydCB0aGUgd2FybmluZ3MgZmFsbGluZyBpbiBDQVRFR09SWVxuIgorIiAgLWYsIC0tZmVhdHVyZVs9RkVBVFVSRV0gICAgYWN0aXZhdGUgbWlzY2VsbGFuZW91cyBmZWF0dXJlc1xuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJzZXI6XG4iCisiICAtTCwgLS1sYW5ndWFnZT1MQU5HVUFHRSAgICAgICAgICBzcGVjaWZ5IHRoZSBvdXRwdXQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VcbiIKKyIgIC1TLCAtLXNrZWxldG9uPUZJTEUgICAgICAgICAgICAgIHNwZWNpZnkgdGhlIHNrZWxldG9uIHRvIHVzZVxuIgorIiAgLXQsIC0tZGVidWcgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudCB0aGUgcGFyc2VyIGZvciBkZWJ1Z2dpbmdcbiIKKyIgICAgICAtLWxvY2F0aW9ucyAgICAgICAgICAgICAgICAgIGVuYWJsZSBsb2NhdGlvbiBzdXBwb3J0XG4iCisiICAtRCwgLS1kZWZpbmU9TkFNRVs9VkFMVUVdICAgICAgICBzaW1pbGFyIHRvICclZGVmaW5lIE5BTUUgXCJWQUxVRVwiJ1xuIgorIiAgLUYsIC0tZm9yY2UtZGVmaW5lPU5BTUVbPVZBTFVFXSAgb3ZlcnJpZGUgJyVkZWZpbmUgTkFNRSBcIlZBTFVFXCInXG4iCisiICAtcCwgLS1uYW1lLXByZWZpeD1QUkVGSVggICAgICAgICBwcmVwZW5kIFBSRUZJWCB0byB0aGUgZXh0ZXJuYWwgc3ltYm9sc1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZCBieSAnLURhcGkucHJlZml4PVBSRUZJWCdcbiIKKyIgIC1sLCAtLW5vLWxpbmVzICAgICAgICAgICAgICAgICAgIGRvbid0IGdlbmVyYXRlICcjbGluZScgZGlyZWN0aXZlc1xuIgorIiAgLWssIC0tdG9rZW4tdGFibGUgICAgICAgICAgICAgICAgaW5jbHVkZSBhIHRhYmxlIG9mIHRva2VuIG5hbWVzXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozNDYKK21zZ2lkICIiCisiT3V0cHV0OlxuIgorIiAgICAgIC0tZGVmaW5lc1s9RklMRV0gICAgICAgYWxzbyBwcm9kdWNlIGEgaGVhZGVyIGZpbGVcbiIKKyIgIC1kICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2V3aXNlIGJ1dCBjYW5ub3Qgc3BlY2lmeSBGSUxFIChmb3IgUE9TSVggIgorIllhY2MpXG4iCisiICAtciwgLS1yZXBvcnQ9VEhJTkdTICAgICAgICBhbHNvIHByb2R1Y2UgZGV0YWlscyBvbiB0aGUgYXV0b21hdG9uXG4iCisiICAgICAgLS1yZXBvcnQtZmlsZT1GSUxFICAgICB3cml0ZSByZXBvcnQgdG8gRklMRVxuIgorIiAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgc2FtZSBhcyBgLS1yZXBvcnQ9c3RhdGUnXG4iCisiICAtYiwgLS1maWxlLXByZWZpeD1QUkVGSVggICBzcGVjaWZ5IGEgUFJFRklYIGZvciBvdXRwdXQgZmlsZXNcbiIKKyIgIC1vLCAtLW91dHB1dD1GSUxFICAgICAgICAgIGxlYXZlIG91dHB1dCB0byBGSUxFXG4iCisiICAtZywgLS1ncmFwaFs9RklMRV0gICAgICAgICBhbHNvIG91dHB1dCBhIGdyYXBoIG9mIHRoZSBhdXRvbWF0b25cbiIKKyIgIC14LCAtLXhtbFs9RklMRV0gICAgICAgICAgIGFsc28gb3V0cHV0IGFuIFhNTCByZXBvcnQgb2YgdGhlIGF1dG9tYXRvblxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoZSBYTUwgc2NoZW1hIGlzIGV4cGVyaW1lbnRhbClcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjM2MQorbXNnaWQgIiIKKyJXYXJuaW5nIGNhdGVnb3JpZXMgaW5jbHVkZTpcbiIKKyIgIGBtaWRydWxlLXZhbHVlcycgIHVuc2V0IG9yIHVudXNlZCBtaWRydWxlIHZhbHVlc1xuIgorIiAgYHlhY2MnICAgICAgICAgICAgaW5jb21wYXRpYmlsaXRpZXMgd2l0aCBQT1NJWCBZYWNjXG4iCisiICBgY29uZmxpY3RzLXNyJyAgICBTL1IgY29uZmxpY3RzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgY29uZmxpY3RzLXJyJyAgICBSL1IgY29uZmxpY3RzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgZGVwcmVjYXRlZCcgICAgICBvYnNvbGV0ZSBjb25zdHJ1Y3RzXG4iCisiICBgb3RoZXInICAgICAgICAgICBhbGwgb3RoZXIgd2FybmluZ3MgKGVuYWJsZWQgYnkgZGVmYXVsdClcbiIKKyIgIGBhbGwnICAgICAgICAgICAgIGFsbCB0aGUgd2FybmluZ3NcbiIKKyIgIGBuby1DQVRFR09SWScgICAgIHR1cm4gb2ZmIHdhcm5pbmdzIGluIENBVEVHT1JZXG4iCisiICBgbm9uZScgICAgICAgICAgICB0dXJuIG9mZiBhbGwgdGhlIHdhcm5pbmdzXG4iCisiICBgZXJyb3InICAgICAgICAgICB0cmVhdCB3YXJuaW5ncyBhcyBlcnJvcnNcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjM3NgorbXNnaWQgIiIKKyJUSElOR1MgaXMgYSBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCB3b3JkcyB0aGF0IGNhbiBpbmNsdWRlOlxuIgorIiAgYHN0YXRlJyAgICAgICAgZGVzY3JpYmUgdGhlIHN0YXRlc1xuIgorIiAgYGl0ZW1zZXQnICAgICAgY29tcGxldGUgdGhlIGNvcmUgaXRlbSBzZXRzIHdpdGggdGhlaXIgY2xvc3VyZVxuIgorIiAgYGxvb2thaGVhZCcgICAgZXhwbGljaXRseSBhc3NvY2lhdGUgbG9va2FoZWFkIHRva2VucyB0byBpdGVtc1xuIgorIiAgYHNvbHZlZCcgICAgICAgZGVzY3JpYmUgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cyBzb2x2aW5nXG4iCisiICBgYWxsJyAgICAgICAgICBpbmNsdWRlIGFsbCB0aGUgYWJvdmUgaW5mb3JtYXRpb25cbiIKKyIgIGBub25lJyAgICAgICAgIGRpc2FibGUgdGhlIHJlcG9ydFxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzg3Cittc2dpZCAiIgorIkZFQVRVUkUgaXMgYSBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCB3b3JkcyB0aGF0IGNhbiBpbmNsdWRlOlxuIgorIiAgYGNhcmV0JyAgICAgICAgc2hvdyBlcnJvcnMgd2l0aCBjYXJldHNcbiIKKyIgIGBhbGwnICAgICAgICAgIGFsbCBvZiB0aGUgYWJvdmVcbiIKKyIgIGBub25lJyAgICAgICAgIGRpc2FibGUgYWxsIG9mIHRoZSBhYm92ZVxuIgorIiAgIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlcG9ydCBidWdzIHRvIDwlcz4uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaG9tZSBwYWdlOiA8JXM+LlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk3Cittc2dpZCAiR2VuZXJhbCBoZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4uXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IFJlcGxhY2UgTEFOR19DT0RFIGluIHRoaXMgVVJMIHdpdGggeW91ciBsYW5ndWFnZQorIy4gY29kZSA8aHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS9MQU5HX0NPREUuaHRtbD4gdG8KKyMuIGZvcm0gb25lIG9mIHRoZSBVUkxzIGF0IGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vLgorIy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRoZSBlbnRpcmUgVVJMIHdpdGggeW91ciB0cmFuc2xhdGlvbiB0ZWFtJ3MKKyMuIGVtYWlsIGFkZHJlc3MuCisjOiBzcmMvZ2V0YXJncy5jOjQxMAorbXNnaWQgIlJlcG9ydCB0cmFuc2xhdGlvbiBidWdzIHRvIDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtLz4uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzo0MTIKK21zZ2lkICJGb3IgY29tcGxldGUgZG9jdW1lbnRhdGlvbiwgcnVuOiBpbmZvIGJpc29uLlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImJpc29uIChHTlUgQmlzb24pICVzIgorbXNnc3RyICJiaXNvbiAoR05VIEJpc29uKSAlcyIKKworIzogc3JjL2dldGFyZ3MuYzo0MzAKK21zZ2lkICJXcml0dGVuIGJ5IFJvYmVydCBDb3JiZXR0IGFuZCBSaWNoYXJkIFN0YWxsbWFuLlxuIgorbXNnc3RyICJFc2NyaXRvIHBvciBSb2JlcnQgQ29yYmV0dCBlIFJpY2hhcmQgU3RhbGxtYW4uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcHlyaWdodCAoQykgJWQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCittc2dzdHIgIkNvcHlyaWdodCAoQykgJWQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDM3Cittc2dpZCAiIgorIlRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PXG4iCisid2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzo0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgc2tlbGV0b24gZGVjbGFyYXRpb25zIGFyZSBpbnZhbGlkIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIGxhbmd1YWdlIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDc5Cittc2dpZCAibXVsdGlwbGUgbGFuZ3VhZ2UgZGVjbGFyYXRpb25zIGFyZSBpbnZhbGlkIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBtaXNzaW5nIG9wZXJhbmQiCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzo3NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0cmEgb3BlcmFuZCAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ3JhbS5jOjExMgorbXNnaWQgImVtcHR5IgorbXNnc3RyICJ2YXppbyIKKworIzogc3JjL2dyYW0uYzoyMDEKK21zZ2lkICJHcmFtbWFyIgorbXNnc3RyICJHcmFtw6F0aWNhIgorCisjOiBzcmMvZ3JhcGh2aXouYzo0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiLy8gR2VuZXJhdGVkIGJ5ICVzLlxuIgorIi8vIFJlcG9ydCBidWdzIHRvIDwlcz4uXG4iCisiLy8gSG9tZSBwYWdlOiA8JXM+LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9sb2NhdGlvbi5jOjkzIHNyYy9zY2FuLWdyYW0ubDo4NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSBudW1iZXIgb3ZlcmZsb3ciCittc2dzdHIgInVsdHJhcGFzc2FkbyBvIG7Dum1lcm8gZGUgbGluaGFzIgorCisjOiBzcmMvbG9jYXRpb24uYzo5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb2x1bW4gbnVtYmVyIG92ZXJmbG93IgorbXNnc3RyICJ1bHRyYXBhc3NhZG8gbyBuw7ptZXJvIGRlIGNvbHVuYXMiCisKKyM6IHNyYy9tYWluLmM6MTQ2Cittc2dpZCAicnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzIgorbXNnc3RyICIiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlZGVmaW5lIHZhcmlhYmxlICVzIHJlZGVmaW5lZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ1MworbXNnaWQgInByZXZpb3VzIGRlZmluaXRpb24iCittc2dzdHIgIiIKKworIzogc3JjL211c2NsZS10YWIuYzo0OTAgc3JjL211c2NsZS10YWIuYzo1MDQgc3JjL211c2NsZS10YWIuYzo1NTYKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgJXMiCittc2dzdHIgIiIKKworIzogc3JjL211c2NsZS10YWIuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJSVkZWZpbmUgQm9vbGVhbiB2YXJpYWJsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjYwOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlJWRlZmluZSB2YXJpYWJsZSAlczogJXMiCittc2dzdHIgIiIKKworIzogc3JjL211c2NsZS10YWIuYzo2MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWNjZXB0ZWQgdmFsdWU6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9wYXJzZS1ncmFtLnk6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgaWRlbnRpZmllciBpbiBwYXJhbWV0ZXIgZGVjbGFyYXRpb24iCittc2dzdHIgIiIKKworIzogc3JjL3ByaW50LmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIHR5cGUgJWQgaXMgJXNcbiIKK21zZ3N0ciAidGlwbyAlZCDDqSAlc1xuIgorCisjOiBzcmMvcHJpbnQuYzoxNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAlZFxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9wcmludC5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJnbyB0byBzdGF0ZSAlZFxuIgorbXNnc3RyICJpciBwYXJhIG8gZXN0YWRvICVkXG4iCisKKyM6IHNyYy9wcmludC5jOjIwMworbXNnaWQgImVycm9yIChub25hc3NvY2lhdGl2ZSlcbiIKK21zZ3N0ciAiZXJybyAobsOjby1hc3NvY2lhdGl2bylcbiIKKworIzogc3JjL3ByaW50LmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZHVjZSB1c2luZyBydWxlICVkICglcykiCittc2dzdHIgIiIKKworIzogc3JjL3ByaW50LmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgImFjY2VwdCIKK21zZ3N0ciAiYWNlaXRlIgorCisjOiBzcmMvcHJpbnQuYzoyNjQgc3JjL3ByaW50LmM6MzM4Cittc2dpZCAiJGRlZmF1bHQiCittc2dzdHIgIiIKKworIzogc3JjL3ByaW50LmM6MzczIHNyYy9wcmludF9ncmFwaC5jOjc4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTdGF0ZSAlZCIKK21zZ3N0ciAiaXIgcGFyYSBvIGVzdGFkbyAlZFxuIgorCisjOiBzcmMvcHJpbnQuYzo0MDkKK21zZ2lkICJUZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIiCittc2dzdHIgIiIKKworIzogc3JjL3ByaW50LmM6NDM2Cittc2dpZCAiTm9udGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyIgorbXNnc3RyICIiCisKKyM6IHNyYy9wcmludC5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICIgb24gbGVmdDoiCittc2dzdHIgIsOgIGVzcXVlcmRhOiIKKworIzogc3JjL3ByaW50LmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiByaWdodDoiCittc2dzdHIgIsOgIGRpcmVpdGE6IgorCisjOiBzcmMvcHJpbnQuYzo1MTAKK21zZ2lkICJSdWxlcyB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSAlcyBkZWNsYXJhdGlvbnMiCittc2dzdHIgIiIKKworIzogc3JjL3JlYWRlci5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJyZXN1bHQgdHlwZSBjbGFzaCBvbiBtZXJnZSBmdW5jdGlvbiAlczogPCVzPiAhPSA8JXM+IgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzoxMzkgc3JjL3N5bXRhYi5jOjE1NiBzcmMvc3ltdGFiLmM6MTY2IHNyYy9zeW10YWIuYzo5MzgKKyM6IHNyYy9zeW10YWIuYzo5NTMgc3JjL3N5bXRhYi5jOjk2OCBzcmMvc3ltdGFiLmM6OTgzCittc2dpZCAicHJldmlvdXMgZGVjbGFyYXRpb24iCittc2dzdHIgIiIKKworIzogc3JjL3JlYWRlci5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGVkIHN5bWJvbCBuYW1lIGZvciAlcyBpZ25vcmVkIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzoyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVsZSBnaXZlbiBmb3IgJXMsIHdoaWNoIGlzIGEgdG9rZW4iCittc2dzdHIgIiIKKworIzogc3JjL3JlYWRlci5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ0eXBlIGNsYXNoIG9uIGRlZmF1bHQgYWN0aW9uOiA8JXM+ICE9IDwlcz4iCittc2dzdHIgIiIKKworIzogc3JjL3JlYWRlci5jOjMxMAorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBydWxlIGZvciB0eXBlZCBub250ZXJtaW5hbCwgYW5kIG5vIGFjdGlvbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVhZGVyLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNlZCB2YWx1ZTogJCVkIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzozMzAKK21zZ2lkICJ1bnNldCB2YWx1ZTogJCQiCittc2dzdHIgIiIKKworIzogc3JjL3JlYWRlci5jOjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b2tlbiBmb3IgJSVwcmVjIGlzIG5vdCBkZWZpbmVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVhZGVyLmM6NDMxIHNyYy9yZWFkZXIuYzo0NDUgc3JjL3JlYWRlci5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5IG9uZSAlcyBhbGxvd2VkIHBlciBydWxlIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzo0NDEgc3JjL3JlYWRlci5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhZmZlY3RzIG9ubHkgR0xSIHBhcnNlcnMiCittc2dzdHIgIiIKKworIzogc3JjL3JlYWRlci5jOjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBtdXN0IGJlIGZvbGxvd2VkIGJ5IHBvc2l0aXZlIG51bWJlciIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVhZGVyLmM6NTU0CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bGUgaXMgdG9vIGxvbmciCittc2dzdHIgInJlZ3JhIMOpIG11aXRvIGxvbmdhIgorCisjOiBzcmMvcmVhZGVyLmM6NjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJ1bGVzIGluIHRoZSBpbnB1dCBncmFtbWFyIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWR1Y2UuYzoyNDEKK21zZ2lkICJydWxlIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVkdWNlLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogJXMiCittc2dzdHIgIiIKKworIzogc3JjL3JlZHVjZS5jOjM1MAorbXNnaWQgIk5vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgIiIKKworIzogc3JjL3JlZHVjZS5jOjM2MworbXNnaWQgIlRlcm1pbmFscyB1bnVzZWQgaW4gZ3JhbW1hciIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVkdWNlLmM6MzcyCittc2dpZCAiUnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWR1Y2UuYzozODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnaWRfcGx1cmFsICIlZCBub250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogc3JjL3JlZHVjZS5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ2lkX3BsdXJhbCAiJWQgcnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogc3JjL3JlZHVjZS5jOjQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydCBzeW1ib2wgJXMgZG9lcyBub3QgZGVyaXZlIGFueSBzZW50ZW5jZSIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmF5ICclcyciCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjIyOQorbXNnaWQgImEgJzsnIG1pZ2h0IGJlIG5lZWRlZCBhdCB0aGUgZW5kIG9mIGFjdGlvbiBjb2RlIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyMzIKK21zZ2lkICJmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24gd2lsbCBub3QgYWRkIHRoZSAnOyciCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2Ugb2YgWVlGQUlMLCB3aGljaCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQzMSBzcmMvc2Nhbi1jb2RlLmw6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVycyB0bzogJWMlcyBhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBvc3NpYmx5IG1lYW50OiAlYyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgaGlkaW5nICVjIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGF0ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCBjYW5ub3QgYmUgYWNjZXNzZWQgZnJvbSBtaWQtcnVsZSBhY3Rpb24gYXQgJCVkIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo1MjEgc3JjL3NjYW4tZ3JhbS5sOjc4MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlZ2VyIG91dCBvZiByYW5nZTogJXMiCittc2dzdHIgImludGVncmFsIGZvcmEgZGUgYWxjYW5jZTogJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAiZGlyZWN0cml6IGludsOhbGlkYTogJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yIGFmdGVyICclYycsIGV4cGVjdGluZyBpbnRlZ2VyLCBsZXR0ZXIsICdfJywgJ1snLCBvciAnJCciCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb24gYmVmb3JlICQlZDogJS4qcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjMzCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogJS4qcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc2xlYWRpbmcgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImFtYmlndW91cyByZWZlcmVuY2U6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwbGljaXQgdHlwZSBnaXZlbiBpbiB1bnR5cGVkIGdyYW1tYXIiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjc1OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJCQgZm9yIHRoZSBtaWRydWxlIGF0ICQlZCBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiJCQgZGUgYCVzJyBuw6NvIHRlbSB0aXBvIGRlY2xhcmFkbyIKKworIzogc3JjL3NjYW4tY29kZS5sOjc2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJCQgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiQkIGRlIGAlcycgbsOjbyB0ZW0gdGlwbyBkZWNsYXJhZG8iCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3ODYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiQlcyBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiJCVkIGRlIGAlcycgbsOjbyB0ZW0gdGlwbyBkZWNsYXJhZG8iCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYXkgJywnIHRyZWF0ZWQgYXMgd2hpdGUgc3BhY2UiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRpcmVjdGl2ZTogJXMiCittc2dzdHIgImRpcmVjdHJpeiBpbnbDoWxpZGE6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MjUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50aWZpZXI6ICVzIgorbXNnc3RyICJkaXJlY3RyaXogaW52w6FsaWRhOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjI5NQorIywgZnV6enkKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciIKK21zZ2lkX3BsdXJhbCAiaW52YWxpZCBjaGFyYWN0ZXJzIgorbXNnc3RyWzBdICJjYXJhY3RlciBpbnbDoWxpZG86ICVzIgorbXNnc3RyWzFdICJjYXJhY3RlciBpbnbDoWxpZG86ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgaWRlbnRpZmllciBpbiBicmFja2V0ZWQgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJhbiBpZGVudGlmaWVyIGV4cGVjdGVkIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozODEKKyMsIGZ1enp5Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIgaW4gYnJhY2tldGVkIG5hbWUiCittc2dpZF9wbHVyYWwgImludmFsaWQgY2hhcmFjdGVycyBpbiBicmFja2V0ZWQgbmFtZSIKK21zZ3N0clswXSAiY2FyYWN0ZXIgaW52w6FsaWRvOiAlcyIKK21zZ3N0clsxXSAiY2FyYWN0ZXIgaW52w6FsaWRvOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjQ4MSBzcmMvc2Nhbi1ncmFtLmw6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGNoYXJhY3RlciBsaXRlcmFsIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo0ODYgc3JjL3NjYW4tZ3JhbS5sOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJleHRyYSBjaGFyYWN0ZXJzIGluIGNoYXJhY3RlciBsaXRlcmFsIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudWxsIGNoYXJhY3RlciIKK21zZ3N0ciAiY2FyYWN0ZXIgbnVsbyBpbnbDoWxpZG8iCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1MzEgc3JjL3NjYW4tZ3JhbS5sOjU0MSBzcmMvc2Nhbi1ncmFtLmw6NTYxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBhZnRlciBcXC1lc2NhcGU6ICVzIgorbXNnc3RyICJjYXJhY3RlciBudWxvIGludsOhbGlkbzogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1NzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY2hhcmFjdGVyIGFmdGVyIFxcLWVzY2FwZTogJXMiCittc2dzdHIgImNhcmFjdGVyIGludsOhbGlkbzogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo5MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyBhdCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6OTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgJXMgYXQgZW5kIG9mIGxpbmUiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tc2tlbC5sOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmNsb3NlZCAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tc2tlbC5sOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gZmV3IGFyZ3VtZW50cyBmb3IgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGZvciAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iCittc2dzdHIgIiIKKworIzogc3JjL3N5bWxpc3QuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAkIHZhbHVlOiAkJWQiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlBPU0lYIFlhY2MgZm9yYmlkcyBkYXNoZXMgaW4gc3ltYm9sIG5hbWVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgc3ltYm9scyBpbiBpbnB1dCBncmFtbWFyIChsaW1pdCBpcyAlZCkiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlZGVjbGFyYXRpb24gZm9yIDwlcz4iCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgcmVkZWZpbmVkIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW10YWIuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHJlZGVjbGFyZWQiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlZmluaW5nIHVzZXIgdG9rZW4gbnVtYmVyIG9mICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW10YWIuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIGlzIHVzZWQsIGJ1dCBpcyBub3QgZGVmaW5lZCBhcyBhIHRva2VuIGFuZCBoYXMgbm8gcnVsZXMiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgdXNlZCBtb3JlIHRoYW4gb25jZSBhcyBhIGxpdGVyYWwgc3RyaW5nIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW10YWIuYzo0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIGdpdmVuIG1vcmUgdGhhbiBvbmUgbGl0ZXJhbCBzdHJpbmciCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2VyIHRva2VuIG51bWJlciAlZCByZWRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6NTM5CisjLCBjLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIGRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBzdGFydCBzeW1ib2wgJXMgaXMgdW5kZWZpbmVkIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW10YWIuYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHN0YXJ0IHN5bWJvbCAlcyBpcyBhIHRva2VuIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW10YWIuYzo5MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdnZWQgJSVkZXN0cnVjdG9yIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW10YWIuYzo5NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdsZXNzICUlZGVzdHJ1Y3RvciIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6OTY1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICUlcHJpbnRlciIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6OTgwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnbGVzcyAlJXByaW50ZXIiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjYzIGRqZ3BwL3N1YnBpcGUuYzoyODYgZGpncHAvc3VicGlwZS5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdmluZyBvZiAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6ODUgZGpncHAvc3VicGlwZS5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNyZWF0aW9uIG9mIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAic2F2aW5nIHN0ZGluIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgInNhdmluZyBzdGRvdXQgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxNTMgZGpncHAvc3VicGlwZS5jOjE5NyBkamdwcC9zdWJwaXBlLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZW5pbmcgb2YgdG1wZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBiaXNvbidzIHN0ZG91dCB0byB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgbTQncyBzdGRpbiBmcm9tIHRoZSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nIG9mIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgbTQncyBzdGRvdXQgdG8gYSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gJyVzJyBpbnRlcnJ1cHRlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIGJpc29uJ3Mgc3RkaW4gZnJvbSB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGFyZ3VtZW50ICVzIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIGFyZ3VtZW50ICVzIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxNTMKK21zZ2lkICJWYWxpZCBhcmd1bWVudHMgYXJlOiIKK21zZ3N0ciAiIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9hbGxvY3MsICV1IGZyZWVkICglLjJmJSUpLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3NldHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3Jlc2V0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfdGVzdHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X2xpc3RzXG4iCittc2dzdHIgIiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5MgorbXNnaWQgImNvdW50IGxvZyBoaXN0b2dyYW1cbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTk1Cittc2dpZCAic2l6ZSBsb2cgaGlzdG9ncmFtXG4iCittc2dzdHIgIiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5OAorbXNnaWQgImRlbnNpdHkgaGlzdG9ncmFtXG4iCittc2dzdHIgIiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQml0c2V0IHN0YXRpc3RpY3M6XG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJBY2N1bXVsYXRlZCBydW5zID0gJXVcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjU5IGxpYi9iaXRzZXRfc3RhdHMuYzoyNjQKKyMsIGZ1enp5Cittc2dpZCAiY2Fubm90IHJlYWQgc3RhdHMgZmlsZSIKK21zZ3N0ciAiY2Fubm90IGNsb3NlIGZpbGUiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHN0YXRzIGZpbGUgc2l6ZVxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyODcgbGliL2JpdHNldF9zdGF0cy5jOjI4OQorIywgZnV6enkKK21zZ2lkICJjYW5ub3Qgd3JpdGUgc3RhdHMgZmlsZSIKK21zZ3N0ciAiY2Fubm90IGNsb3NlIGZpbGUiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyOTIKK21zZ2lkICJjYW5ub3Qgb3BlbiBzdGF0cyBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICIiCisKKyM6IGxpYi9jbG9zZW91dC5jOjExMgorIywgZnV6enkKK21zZ2lkICJ3cml0ZSBlcnJvciIKK21zZ3N0ciAiZXJybyBmYXRhbCIKKworIzogbGliL2Vycm9yLmM6MTg4Cittc2dpZCAiVW5rbm93biBzeXN0ZW0gZXJyb3IiCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjU0NyBsaWIvZ2V0b3B0LmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJyVzJyBpcyBhbWJpZ3VvdXM7IHBvc3NpYmlsaXRpZXM6IgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo2MjQgbGliL2dldG9wdC5jOjYyOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjYzNyBsaWIvZ2V0b3B0LmM6NjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJyVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6Njg1IGxpYi9nZXRvcHQuYzo3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLS0lcycgcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzQyIGxpYi9nZXRvcHQuYzo3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gJy0tJXMnXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjc1MyBsaWIvZ2V0b3B0LmM6NzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uICclYyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo4MDUgbGliL2dldG9wdC5jOjgwOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBvcHRpb24gLS0gJyVjJ1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo4NjEgbGliL2dldG9wdC5jOjg3OCBsaWIvZ2V0b3B0LmM6MTA4OCBsaWIvZ2V0b3B0LmM6MTEwNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICclYydcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6OTM0IGxpYi9nZXRvcHQuYzo5NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLVcgJXMnIGlzIGFtYmlndW91c1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo5NzQgbGliL2dldG9wdC5jOjk5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzoxMDEzIGxpYi9nZXRvcHQuYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9vYnN0YWNrLmM6NDEzIGxpYi9vYnN0YWNrLmM6NDE1IGxpYi94YWxsb2MtZGllLmM6MzQKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJtZW3Ds3JpYSBleGF1c3RhIgorCisjOiBsaWIvc3Bhd24tcGlwZS5jOjE0MCBsaWIvc3Bhd24tcGlwZS5jOjE0MyBsaWIvc3Bhd24tcGlwZS5jOjI2NAorIzogbGliL3NwYXduLXBpcGUuYzoyNjcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZSIKK21zZ3N0ciAiY2Fubm90IGNsb3NlIGZpbGUiCisKKyM6IGxpYi9zcGF3bi1waXBlLmM6MjM0IGxpYi9zcGF3bi1waXBlLmM6MzQ4IGxpYi93YWl0LXByb2Nlc3MuYzoyODIKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyBmYWlsZWQiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6CisjLiBHZXQgdHJhbnNsYXRpb25zIGZvciBvcGVuIGFuZCBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrcy4KKyMuIFRoZSBtZXNzYWdlIGNhdGFsb2cgc2hvdWxkIHRyYW5zbGF0ZSAiYCIgdG8gYSBsZWZ0CisjLiBxdW90YXRpb24gbWFyayBzdWl0YWJsZSBmb3IgdGhlIGxvY2FsZSwgYW5kIHNpbWlsYXJseSBmb3IKKyMuICInIi4gIEZvciBleGFtcGxlLCBhIEZyZW5jaCBVbmljb2RlIGxvY2FsIHNob3VsZCB0cmFuc2xhdGUKKyMuIHRoZXNlIHRvIFUrMDBBQiAoTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUKKyMuIFFVT1RBVElPTiBNQVJLKSwgYW5kIFUrMDBCQiAoUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFCisjLiBRVU9UQVRJT04gTUFSSyksIHJlc3BlY3RpdmVseS4KKyMuCisjLiBJZiB0aGUgY2F0YWxvZyBoYXMgbm8gdHJhbnNsYXRpb24sIHdlIHdpbGwgdHJ5IHRvCisjLiB1c2UgVW5pY29kZSBVKzIwMTggKExFRlQgU0lOR0xFIFFVT1RBVElPTiBNQVJLKSBhbmQKKyMuIFVuaWNvZGUgVSsyMDE5IChSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspLiAgSWYgdGhlCisjLiBjdXJyZW50IGxvY2FsZSBpcyBub3QgVW5pY29kZSwgbG9jYWxlX3F1b3Rpbmdfc3R5bGUKKyMuIHdpbGwgcXVvdGUgJ2xpa2UgdGhpcycsIGFuZCBjbG9jYWxlX3F1b3Rpbmdfc3R5bGUgd2lsbAorIy4gcXVvdGUgImxpa2UgdGhpcyIuICBZb3Ugc2hvdWxkIGFsd2F5cyBpbmNsdWRlIHRyYW5zbGF0aW9ucworIy4gZm9yICJgIiBhbmQgIiciIGV2ZW4gaWYgVSsyMDE4IGFuZCBVKzIwMTkgYXJlIGFwcHJvcHJpYXRlCisjLiBmb3IgeW91ciBsb2NhbGUuCisjLgorIy4gSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBwdXQgaGVyZSwgcGxlYXNlIHNlZQorIy4gPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUXVvdGF0aW9uX21hcmtzX2luX290aGVyX2xhbmd1YWdlcz4KKyMuIGFuZCB1c2UgZ2x5cGhzIHN1aXRhYmxlIGZvciB5b3VyIGxhbmd1YWdlLgorIzogbGliL3F1b3RlYXJnLmM6MzEyCittc2dpZCAiYCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcXVvdGVhcmcuYzozMTMKK21zZ2lkICInIgorbXNnc3RyICIiCisKKyM6IGxpYi90aW1ldmFyLmM6NDc1Cittc2dpZCAiIgorIlxuIgorIkV4ZWN1dGlvbiB0aW1lcyAoc2Vjb25kcylcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvdGltZXZhci5jOjUyNQorbXNnaWQgIiBUT1RBTCAgICAgICAgICAgICAgICAgOiIKK21zZ3N0ciAiIgorCisjOiBsaWIvdGltZXZhci5jOjU2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lIGluICVzOiAlbGQuJTA2bGQgKCVsZCUlKVxuIgorbXNnc3RyICIiCisKKyM6IGxpYi93MzJzcGF3bi5oOjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIl9vcGVuX29zZmhhbmRsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogbGliL3czMnNwYXduLmg6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlc3RvcmUgZmQgJWQ6IGR1cDIgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzoyMjMgbGliL3dhaXQtcHJvY2Vzcy5jOjI1NSBsaWIvd2FpdC1wcm9jZXNzLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MiCittc2dzdHIgIiIKKworIzogbGliL3dhaXQtcHJvY2Vzcy5jOjI3NCBsaWIvd2FpdC1wcm9jZXNzLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MgZ290IGZhdGFsIHNpZ25hbCAlZCIKK21zZ3N0ciAiIgorCisjfiBtc2dpZCAiaW52YWxpZCBlc2NhcGUgc2VxdWVuY2U6ICVzIgorI34gbXNnc3RyICJzZXF1w6puY2lhIGRlIGVzY2FwZSBpbnbDoWxpZGE6ICVzIgpkaWZmIC0tZ2l0IGEvcG8vcHRfQlIuZ21vIGIvcG8vcHRfQlIuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MGFjYzUKLS0tIC9kZXYvbnVsbAorKysgYi9wby9wdF9CUi5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vcHRfQlIucG8gYi9wby9wdF9CUi5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDNhOGRkCi0tLSAvZGV2L251bGwKKysrIGIvcG8vcHRfQlIucG8KQEAgLTAsMCArMSwxMjM2IEBACisjIGJpc29uOiB0cmFuc2xhdGlvbiB0byBCcmF6aWxpYW4gUG9ydHVndWVzZSAocHRfQlIpCisjIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQWxleGFuZHJlIEZvbGxlIGRlIE1lbmV6ZXMgPGFmbWVuZXpAdGVycmEuY29tLmJyPiwgMjAwMiwgMjAwMy4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGJpc29uIDEuODc1XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDMtMDEtMDYgMDI6MzAtMDMwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogQWxleGFuZHJlIEZvbGxlIGRlIE1lbmV6ZXMgPGFmbWVuZXpAdGVycmEuY29tLmJyPlxuIgorIkxhbmd1YWdlLVRlYW06IEJyYXppbGlhbiBQb3J0dWd1ZXNlIDxsZHAtYnJAYmF6YXIuY29uZWN0aXZhLmNvbS5icj5cbiIKKyJMYW5ndWFnZTogcHRfQlJcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOC1iaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiA+IDEpO1xuIgorCisjOiBzcmMvY29tcGxhaW4uYzoxMjAgc3JjL2NvbXBsYWluLmM6MTMxIHNyYy9jb21wbGFpbi5jOjE0MCBzcmMvY29tcGxhaW4uYzoxODgKKyM6IHNyYy9jb21wbGFpbi5jOjE5OAorbXNnaWQgIndhcm5pbmciCittc2dzdHIgImF2aXNvIgorCisjOiBzcmMvY29tcGxhaW4uYzoxNTEgc3JjL2NvbXBsYWluLmM6MTYwIHNyYy9jb21wbGFpbi5jOjE2NworIywgZnV6enkKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiRXJybyBkZSBFL1MiCisKKyM6IHNyYy9jb21wbGFpbi5jOjIwOCBzcmMvY29tcGxhaW4uYzoyMTUKKyMsIGZ1enp5Cittc2dpZCAiZmF0YWwgZXJyb3IiCittc2dzdHIgImVycm8gZmF0YWw6ICIKKworIzogc3JjL2NvbmZsaWN0cy5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIHNoaWZ0IgorbXNnc3RyICIgICAgQ29uZmxpdG8gZW50cmUgYSByZWdyYSAlZCBlIGEgdG9rZW4gJXMgcmVzb2x2aWRvIGNvbW8gYHNoaWZ0YC4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyByZWR1Y2UiCittc2dzdHIgIiAgICBDb25mbGl0byBlbnRyZSBhIHJlZ3JhICVkIGUgYSB0b2tlbiAlcyByZXNvbHZpZG8gY29tbyBgcmVkdWNlYC4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyBhbiBlcnJvciIKK21zZ3N0ciAiICAgIENvbmZsaXRvIGVudHJlIGEgcmVncmEgJWQgZSBhIHRva2VuICVzIHJlc29sdmlkbyBjb21vIHVtIGVycm8uIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgc2hpZnQvcmVkdWNlLCAlZCByZWR1Y2UvcmVkdWNlXG4iCittc2dzdHIgImNvbmZsaXRvczogJWQgZGUgZGVzbG9jYW1lbnRvL3JlZHXn428sICVkIGRlIHJlZHXn428vcmVkdefjb1xuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgc2hpZnQvcmVkdWNlXG4iCittc2dzdHIgImNvbmZsaXRvczogJWQgZGUgZGVzbG9jYW1lbnRvL3JlZHXn429cbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdHM6ICVkIHJlZHVjZS9yZWR1Y2VcbiIKK21zZ3N0ciAiY29uZmxpdG9zOiAlZCBkZSByZWR15+NvL3JlZHXn429cbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdGF0ZSAlZCAiCittc2dzdHIgIkVzdGFkbyAlZCIKKworIzogc3JjL2NvbmZsaWN0cy5jOjU4MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJSVleHBlY3QtcnIgYXBwbGllcyBvbmx5IHRvIEdMUiBwYXJzZXJzIgorbXNnc3RyICIlcyBhZmV0YSBhcGVuYXMgYW5hbGlzYWRvcmVzIEdMUiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjYxNgorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCAlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3QiCittc2dpZF9wbHVyYWwgImV4cGVjdGVkICVkIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMiCittc2dzdHJbMF0gImVzcGVyYWRvOiAlZCBjb25mbGl0byBkZSBkZXNsb2NhbWVudG8vcmVkdefjbyIKK21zZ3N0clsxXSAiZXNwZXJhZG9zOiAlZCBjb25mbGl0b3MgZGUgZGVzbG9jYW1lbnRvL3JlZHXn428iCisKKyM6IHNyYy9jb25mbGljdHMuYzo2MjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICVkIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3QiCittc2dpZF9wbHVyYWwgImV4cGVjdGVkICVkIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3RzIgorbXNnc3RyWzBdICJlc3BlcmFkb3MgMCBjb25mbGl0b3MgZGUgcmVkdefjby9yZWR15+NvIgorbXNnc3RyWzFdICJlc3BlcmFkb3MgMCBjb25mbGl0b3MgZGUgcmVkdefjby9yZWR15+NvIgorCisjOiBzcmMvZmlsZXMuYzoxMTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3Qgb3BlbiIKK21zZ3N0ciAiaW1wb3Nz7XZlbCBhYnJpciBvIGFycXVpdm8gYCVzJyIKKworIzogc3JjL2ZpbGVzLmM6MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImlucHV0L291dHB1dCBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBzcmMvZmlsZXMuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNsb3NlIGZpbGUiCittc2dzdHIgImltcG9zc+12ZWwgZmVjaGFyIG8gYXJxdWl2byIKKworIzogc3JjL2ZpbGVzLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIG92ZXJ3cml0ZSB0aGUgaW5wdXQgZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvZmlsZXMuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3Rpbmcgb3V0cHV0cyB0byBmaWxlICVzIgorbXNnc3RyICJzYe1kYXMgY29uZmxpdGFudGVzIHBhcmEgbyBhcnF1aXZvICVzIgorCisjOiBzcmMvZ2V0YXJncy5jOjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCittc2dzdHIgInRlbnRlIGAlcyAtLWhlbHAnIHBhcmEgbWFpcyBpbmZvcm1h5/Vlcy5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFtPUFRJT05dLi4uIEZJTEVcbiIKK21zZ3N0ciAiVXNvOiAlcyBbT1BDQU9dLi4uIEFSUVVJVk9cbiIKKworIzogc3JjL2dldGFyZ3MuYzozMDIKK21zZ2lkICIiCisiR2VuZXJhdGUgYSBkZXRlcm1pbmlzdGljIExSIG9yIGdlbmVyYWxpemVkIExSIChHTFIpIHBhcnNlciBlbXBsb3lpbmdcbiIKKyJMQUxSKDEpLCBJRUxSKDEpLCBvciBjYW5vbmljYWwgTFIoMSkgcGFyc2VyIHRhYmxlcy4gIElFTFIoMSkgYW5kXG4iCisiY2Fub25pY2FsIExSKDEpIHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6MzA5Cittc2dpZCAiIgorIk1hbmRhdG9yeSBhcmd1bWVudHMgdG8gbG9uZyBvcHRpb25zIGFyZSBtYW5kYXRvcnkgZm9yIHNob3J0IG9wdGlvbnMgdG9vLlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6MzEyCittc2dpZCAiVGhlIHNhbWUgaXMgdHJ1ZSBmb3Igb3B0aW9uYWwgYXJndW1lbnRzLlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6MzE2Cittc2dpZCAiIgorIlxuIgorIk9wZXJhdGlvbiBtb2RlczpcbiIKKyIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCisiICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorIiAgICAgIC0tcHJpbnQtbG9jYWxlZGlyICAgICAgb3V0cHV0IGRpcmVjdG9yeSBjb250YWluaW5nIGxvY2FsZS1kZXBlbmRlbnQgIgorImRhdGFcbiIKKyIgICAgICAtLXByaW50LWRhdGFkaXIgICAgICAgIG91dHB1dCBkaXJlY3RvcnkgY29udGFpbmluZyBza2VsZXRvbnMgYW5kIFhTTFRcbiIKKyIgIC15LCAtLXlhY2MgICAgICAgICAgICAgICAgIGVtdWxhdGUgUE9TSVggWWFjY1xuIgorIiAgLVcsIC0td2FybmluZ3NbPUNBVEVHT1JZXSAgcmVwb3J0IHRoZSB3YXJuaW5ncyBmYWxsaW5nIGluIENBVEVHT1JZXG4iCisiICAtZiwgLS1mZWF0dXJlWz1GRUFUVVJFXSAgICBhY3RpdmF0ZSBtaXNjZWxsYW5lb3VzIGZlYXR1cmVzXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozMjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJzZXI6XG4iCisiICAtTCwgLS1sYW5ndWFnZT1MQU5HVUFHRSAgICAgICAgICBzcGVjaWZ5IHRoZSBvdXRwdXQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VcbiIKKyIgIC1TLCAtLXNrZWxldG9uPUZJTEUgICAgICAgICAgICAgIHNwZWNpZnkgdGhlIHNrZWxldG9uIHRvIHVzZVxuIgorIiAgLXQsIC0tZGVidWcgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudCB0aGUgcGFyc2VyIGZvciBkZWJ1Z2dpbmdcbiIKKyIgICAgICAtLWxvY2F0aW9ucyAgICAgICAgICAgICAgICAgIGVuYWJsZSBsb2NhdGlvbiBzdXBwb3J0XG4iCisiICAtRCwgLS1kZWZpbmU9TkFNRVs9VkFMVUVdICAgICAgICBzaW1pbGFyIHRvICclZGVmaW5lIE5BTUUgXCJWQUxVRVwiJ1xuIgorIiAgLUYsIC0tZm9yY2UtZGVmaW5lPU5BTUVbPVZBTFVFXSAgb3ZlcnJpZGUgJyVkZWZpbmUgTkFNRSBcIlZBTFVFXCInXG4iCisiICAtcCwgLS1uYW1lLXByZWZpeD1QUkVGSVggICAgICAgICBwcmVwZW5kIFBSRUZJWCB0byB0aGUgZXh0ZXJuYWwgc3ltYm9sc1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZCBieSAnLURhcGkucHJlZml4PVBSRUZJWCdcbiIKKyIgIC1sLCAtLW5vLWxpbmVzICAgICAgICAgICAgICAgICAgIGRvbid0IGdlbmVyYXRlICcjbGluZScgZGlyZWN0aXZlc1xuIgorIiAgLWssIC0tdG9rZW4tdGFibGUgICAgICAgICAgICAgICAgaW5jbHVkZSBhIHRhYmxlIG9mIHRva2VuIG5hbWVzXG4iCittc2dzdHIgIiIKKyJBbmFsaXphZG9yOlxuIgorIiAgLVMsIC0tc2tlbGV0b249YXJxdWl2byAgICAgZXNwZWNpZmljYSBvIHNrZWxldG8gYSBzZXIgdXNhZG9cbiIKKyIgIC10LCAtLWRlYnVnICAgICAgICAgICAgICAgIGluc3RydW1lbnRhIG8gYW5hbGlzYWRvciBwYXJhIGRlcHVyYefjb1xuIgorIiAgICAgIC0tbG9jYXRpb25zICAgICAgICAgICAgaGFiaWxpdGEgYSBjb21wdXRh5+NvIGRlIGxvY2FsaXph5/Vlc1xuIgorIiAgLXAsIC0tbmFtZS1wcmVmaXg9UFJFRklYTyAgYWRpY2lvbmEgUFJFRklYTyBhb3Mgc+1tYm9sb3MgZXh0ZXJub3NcbiIKKyIgIC1sLCAtLW5vLWxpbmVzICAgICAgICAgICAgIG7jbyBnZXJhIGRpcmV0aXZhcyBgI2xpbmUnXG4iCisiICAtbiwgLS1uby1wYXJzZXIgICAgICAgICAgICBhcGVuYXMgZ2VyYSBhcyB0YWJlbGFzXG4iCisiIC0taywgLS10b2tlbi10YWJsZSAgICAgICAgICBpbmNsdWkgdW1hIHRhYmVsYSBkZSBub21lcyBkZSB0b2tlbnNcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNDYKKyMsIGZ1enp5Cittc2dpZCAiIgorIk91dHB1dDpcbiIKKyIgICAgICAtLWRlZmluZXNbPUZJTEVdICAgICAgIGFsc28gcHJvZHVjZSBhIGhlYWRlciBmaWxlXG4iCisiICAtZCAgICAgICAgICAgICAgICAgICAgICAgICBsaWtld2lzZSBidXQgY2Fubm90IHNwZWNpZnkgRklMRSAoZm9yIFBPU0lYICIKKyJZYWNjKVxuIgorIiAgLXIsIC0tcmVwb3J0PVRISU5HUyAgICAgICAgYWxzbyBwcm9kdWNlIGRldGFpbHMgb24gdGhlIGF1dG9tYXRvblxuIgorIiAgICAgIC0tcmVwb3J0LWZpbGU9RklMRSAgICAgd3JpdGUgcmVwb3J0IHRvIEZJTEVcbiIKKyIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIHNhbWUgYXMgYC0tcmVwb3J0PXN0YXRlJ1xuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg9UFJFRklYICAgc3BlY2lmeSBhIFBSRUZJWCBmb3Igb3V0cHV0IGZpbGVzXG4iCisiICAtbywgLS1vdXRwdXQ9RklMRSAgICAgICAgICBsZWF2ZSBvdXRwdXQgdG8gRklMRVxuIgorIiAgLWcsIC0tZ3JhcGhbPUZJTEVdICAgICAgICAgYWxzbyBvdXRwdXQgYSBncmFwaCBvZiB0aGUgYXV0b21hdG9uXG4iCisiICAteCwgLS14bWxbPUZJTEVdICAgICAgICAgICBhbHNvIG91dHB1dCBhbiBYTUwgcmVwb3J0IG9mIHRoZSBhdXRvbWF0b25cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGUgWE1MIHNjaGVtYSBpcyBleHBlcmltZW50YWwpXG4iCittc2dzdHIgIiIKKyJTYe1kYTpcbiIKKyIgIC1kLCAtLWRlZmluZXMgICAgICAgICAgICAgIHRhbWLpbSBwcm9kdXogdW0gYXJxdWl2byBkZSBjYWJl52FsaG9cbiIKKyIgIC1yLCAtLXJlcG9ydD1JVEVOUyAgICAgICAgIHRhbWLpbSBwcm9kdXogZGV0YWxoZXMgZG8gYXV09G1hdG9cbiIKKyIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIG8gbWVzbW8gcXVlIGAtLXJlcG9ydD1zdGF0ZSdcbiIKKyIgIC1iLCAtLWZpbGUtcHJlZml4PVBSRUZJWE8gIGVzcGVjaWZpY2EgbyBQUkVGSVhPIHBhcmEgb3MgYXJxdWl2b3MgZGUgc2HtZGFcbiIKKyIgIC1vLCAtLW91dHB1dD1BUlFVSVZPICAgICAgIGFybWF6ZW5hIGEgc2HtZGEgZW0gQVJRVUlWT1xuIgorIiAgLWcsIC0tZ3JhcGggICAgICAgICAgICAgICAgdGFtYultIHByb2R1eiB1bWEgZGVzY3Jp5+NvIGVtIFZDRyBkbyBhdXT0bWF0b1xuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM2MQorbXNnaWQgIiIKKyJXYXJuaW5nIGNhdGVnb3JpZXMgaW5jbHVkZTpcbiIKKyIgIGBtaWRydWxlLXZhbHVlcycgIHVuc2V0IG9yIHVudXNlZCBtaWRydWxlIHZhbHVlc1xuIgorIiAgYHlhY2MnICAgICAgICAgICAgaW5jb21wYXRpYmlsaXRpZXMgd2l0aCBQT1NJWCBZYWNjXG4iCisiICBgY29uZmxpY3RzLXNyJyAgICBTL1IgY29uZmxpY3RzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgY29uZmxpY3RzLXJyJyAgICBSL1IgY29uZmxpY3RzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgZGVwcmVjYXRlZCcgICAgICBvYnNvbGV0ZSBjb25zdHJ1Y3RzXG4iCisiICBgb3RoZXInICAgICAgICAgICBhbGwgb3RoZXIgd2FybmluZ3MgKGVuYWJsZWQgYnkgZGVmYXVsdClcbiIKKyIgIGBhbGwnICAgICAgICAgICAgIGFsbCB0aGUgd2FybmluZ3NcbiIKKyIgIGBuby1DQVRFR09SWScgICAgIHR1cm4gb2ZmIHdhcm5pbmdzIGluIENBVEVHT1JZXG4iCisiICBgbm9uZScgICAgICAgICAgICB0dXJuIG9mZiBhbGwgdGhlIHdhcm5pbmdzXG4iCisiICBgZXJyb3InICAgICAgICAgICB0cmVhdCB3YXJuaW5ncyBhcyBlcnJvcnNcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjM3NgorIywgZnV6enkKK21zZ2lkICIiCisiVEhJTkdTIGlzIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMgdGhhdCBjYW4gaW5jbHVkZTpcbiIKKyIgIGBzdGF0ZScgICAgICAgIGRlc2NyaWJlIHRoZSBzdGF0ZXNcbiIKKyIgIGBpdGVtc2V0JyAgICAgIGNvbXBsZXRlIHRoZSBjb3JlIGl0ZW0gc2V0cyB3aXRoIHRoZWlyIGNsb3N1cmVcbiIKKyIgIGBsb29rYWhlYWQnICAgIGV4cGxpY2l0bHkgYXNzb2NpYXRlIGxvb2thaGVhZCB0b2tlbnMgdG8gaXRlbXNcbiIKKyIgIGBzb2x2ZWQnICAgICAgIGRlc2NyaWJlIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMgc29sdmluZ1xuIgorIiAgYGFsbCcgICAgICAgICAgaW5jbHVkZSBhbGwgdGhlIGFib3ZlIGluZm9ybWF0aW9uXG4iCisiICBgbm9uZScgICAgICAgICBkaXNhYmxlIHRoZSByZXBvcnRcbiIKK21zZ3N0ciAiIgorIklURU5TIOkgdW1hIGxpc3RhIHNlcGFyYWRhIHBvciB27XJndWxhcywgcXVlIHBvZGUgaW5jbHVpcjpcbiIKKyIgIGBzdGF0ZScgICAgICAgIGRlc2NyZXZlIG9zIGVzdGFkb3NcbiIKKyIgIGBpdGVtc2V0JyAgICAgIGNvbXBsZXRhIG9zIGNvbmp1bnRvcyBkZSDtdGVucyBi4XNpY29zIGNvbSBzZXVzICIKKyJmZWNoYW1lbnRvc1xuIgorIiAgYGxvb2thaGVhZCcgICAgYXNzb2NpYSBleHBsaWNpdGFtZW50ZSBhcyBwcmV2aXP1ZXMgY29tIG9zIO10ZW5zXG4iCisiICBgc29sdmVkJyAgICAgICBkZXNjcmV2ZSBhIHNvbHXn428gZGUgY29uZmxpdG9zIGRlIGRlc2xvY2FtZW50by9yZWR15+NvXG4iCisiICBgYWxsJyAgICAgICAgICBpbmNsdWkgdG9kYXMgYXMgaW5mb3JtYef1ZXMgYWNpbWFcbiIKKyIgIGBub25lJyAgICAgICAgIGRlc2FiaWxpdGEgbyByZWxhdPNyaW9cbiIKKworIzogc3JjL2dldGFyZ3MuYzozODcKK21zZ2lkICIiCisiRkVBVFVSRSBpcyBhIGxpc3Qgb2YgY29tbWEgc2VwYXJhdGVkIHdvcmRzIHRoYXQgY2FuIGluY2x1ZGU6XG4iCisiICBgY2FyZXQnICAgICAgICBzaG93IGVycm9ycyB3aXRoIGNhcmV0c1xuIgorIiAgYGFsbCcgICAgICAgICAgYWxsIG9mIHRoZSBhYm92ZVxuIgorIiAgYG5vbmUnICAgICAgICAgZGlzYWJsZSBhbGwgb2YgdGhlIGFib3ZlXG4iCisiICAiCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozOTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlJlcG9ydCBidWdzIHRvIDwlcz4uXG4iCittc2dzdHIgIkluZm9ybWUgb3MgZXJyb3MgcGFyYSA8YnVnLWJpc29uQGdudS5vcmc+LlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBob21lIHBhZ2U6IDwlcz4uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozOTcKK21zZ2lkICJHZW5lcmFsIGhlbHAgdXNpbmcgR05VIHNvZnR3YXJlOiA8aHR0cDovL3d3dy5nbnUub3JnL2dldGhlbHAvPi5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogUmVwbGFjZSBMQU5HX0NPREUgaW4gdGhpcyBVUkwgd2l0aCB5b3VyIGxhbmd1YWdlCisjLiBjb2RlIDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtL0xBTkdfQ09ERS5odG1sPiB0bworIy4gZm9ybSBvbmUgb2YgdGhlIFVSTHMgYXQgaHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS8uCisjLiBPdGhlcndpc2UsIHJlcGxhY2UgdGhlIGVudGlyZSBVUkwgd2l0aCB5b3VyIHRyYW5zbGF0aW9uIHRlYW0ncworIy4gZW1haWwgYWRkcmVzcy4KKyM6IHNyYy9nZXRhcmdzLmM6NDEwCittc2dpZCAiUmVwb3J0IHRyYW5zbGF0aW9uIGJ1Z3MgdG8gPGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vPi5cbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjQxMgorbXNnaWQgIkZvciBjb21wbGV0ZSBkb2N1bWVudGF0aW9uLCBydW46IGluZm8gYmlzb24uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmlzb24gKEdOVSBCaXNvbikgJXMiCittc2dzdHIgImJpc29uIChHTlUgYmlzb24pICVzIgorCisjOiBzcmMvZ2V0YXJncy5jOjQzMAorbXNnaWQgIldyaXR0ZW4gYnkgUm9iZXJ0IENvcmJldHQgYW5kIFJpY2hhcmQgU3RhbGxtYW4uXG4iCittc2dzdHIgIkVzY3JpdG8gcG9yIFJvYmVydCBDb3JiZXR0IGUgUmljaGFyZCBTdGFsbG1hbi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29weXJpZ2h0IChDKSAlZCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKK21zZ3N0ciAiQ29weXJpZ2h0IKkgJWQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDM3Cittc2dpZCAiIgorIlRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PXG4iCisid2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuXG4iCittc2dzdHIgIiIKKyJFc3RlIOkgdW0gc29mdHdhcmUgbGl2cmU7IHZlamEgbyBj82RpZ28gZm9udGUgcGFyYSBjb25kaef1ZXMgZGUgY29weXJpZ2h0LiAiCisiTuNvXG4iCisiZXhpc3RlIE5FTkhVTUEgZ2FyYW50aWE7IG5lbSBtZXNtbyBhIGdhcmFudGlhIGltcGztY2l0YSBkZSBDT01FUkNJQUJJTElEQURFICIKKyJvdVxuIgorIkFERVFVQcfDTyDAIFFVQUxRVUVSIEZJTkFMSURBREUgUEFSVElDVUxBUi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0NTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHNrZWxldG9uIGRlY2xhcmF0aW9ucyBhcmUgaW52YWxpZCIKK21zZ3N0ciAiZGVjbGFyYef1ZXMgZGUgJXMgbfpsdGlwbGFzIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ3NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgbGFuZ3VhZ2UiCittc2dzdHIgInZhbG9yIGluduFsaWRvOiAlcyIKKworIzogc3JjL2dldGFyZ3MuYzo0NzkKKyMsIGZ1enp5Cittc2dpZCAibXVsdGlwbGUgbGFuZ3VhZ2UgZGVjbGFyYXRpb25zIGFyZSBpbnZhbGlkIgorbXNnc3RyICJkZWNsYXJh5/VlcyBkZSAlcyBt+mx0aXBsYXMiCisKKyM6IHNyYy9nZXRhcmdzLmM6NzQ3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogbWlzc2luZyBvcGVyYW5kIgorbXNnc3RyICJmYWx0YSBvcGVyYW5kbyBkZXBvaXMgZGUgYCVzJyIKKworIzogc3JjL2dldGFyZ3MuYzo3NDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImV4dHJhIG9wZXJhbmQgJXMiCittc2dzdHIgIm9wZXJhbmRvIGAlcycgc29icmFuZG8iCisKKyM6IHNyYy9ncmFtLmM6MTEyCittc2dpZCAiZW1wdHkiCittc2dzdHIgInZhemlvIgorCisjOiBzcmMvZ3JhbS5jOjIwMQorbXNnaWQgIkdyYW1tYXIiCittc2dzdHIgIkdyYW3hdGljYSIKKworIzogc3JjL2dyYXBodml6LmM6NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIi8vIEdlbmVyYXRlZCBieSAlcy5cbiIKKyIvLyBSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorIi8vIEhvbWUgcGFnZTogPCVzPi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvbG9jYXRpb24uYzo5MyBzcmMvc2Nhbi1ncmFtLmw6ODU5CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgbnVtYmVyIG92ZXJmbG93IgorbXNnc3RyICIiCisKKyM6IHNyYy9sb2NhdGlvbi5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbHVtbiBudW1iZXIgb3ZlcmZsb3ciCittc2dzdHIgIiIKKworIzogc3JjL21haW4uYzoxNDYKKyMsIGZ1enp5Cittc2dpZCAicnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzIgorbXNnc3RyICJyZWdyYSBu428gcmVkdXppZGEgcG9yIGNhdXNhIGRlIGNvbmZsaXRvcyIKKworIzogc3JjL211c2NsZS10YWIuYzo0NTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiUlZGVmaW5lIHZhcmlhYmxlICVzIHJlZGVmaW5lZCIKK21zZ3N0ciAic+1tYm9sbyAlcyByZWRlZmluaWRvIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ1MworbXNnaWQgInByZXZpb3VzIGRlZmluaXRpb24iCittc2dzdHIgIiIKKworIzogc3JjL211c2NsZS10YWIuYzo0OTAgc3JjL211c2NsZS10YWIuYzo1MDQgc3JjL211c2NsZS10YWIuYzo1NTYKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgJXMiCittc2dzdHIgIiIKKworIzogc3JjL211c2NsZS10YWIuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJSVkZWZpbmUgQm9vbGVhbiB2YXJpYWJsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjYwOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlJWRlZmluZSB2YXJpYWJsZSAlczogJXMiCittc2dzdHIgIiIKKworIzogc3JjL211c2NsZS10YWIuYzo2MTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImFjY2VwdGVkIHZhbHVlOiAlcyIKK21zZ3N0ciAidmFsb3IgaW524WxpZG86ICVzIgorCisjOiBzcmMvcGFyc2UtZ3JhbS55Ojc0NworIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGlkZW50aWZpZXIgaW4gcGFyYW1ldGVyIGRlY2xhcmF0aW9uIgorbXNnc3RyICJpZGVudGlmaWNhZG9yIGZhbHRhbmRvIG5hIGRlY2xhcmHn428gZG8gcGFy4m1ldHJvIgorCisjOiBzcmMvcHJpbnQuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICIgdHlwZSAlZCBpcyAlc1xuIgorbXNnc3RyICIgdGlwbyAlZCDpICVzXG4iCisKKyM6IHNyYy9wcmludC5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICJzaGlmdCwgYW5kIGdvIHRvIHN0YXRlICVkXG4iCittc2dzdHIgImRlc2xvY2FyLCBlIGlyIGFvIGVzdGFkbyAlZFxuIgorCisjOiBzcmMvcHJpbnQuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ28gdG8gc3RhdGUgJWRcbiIKK21zZ3N0ciAiaXIgYW8gZXN0YWRvICVkXG4iCisKKyM6IHNyYy9wcmludC5jOjIwMworbXNnaWQgImVycm9yIChub25hc3NvY2lhdGl2ZSlcbiIKK21zZ3N0ciAiZXJybyAobuNvIGFzc29jaWF0aXZvKVxuIgorCisjOiBzcmMvcHJpbnQuYzoyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkdWNlIHVzaW5nIHJ1bGUgJWQgKCVzKSIKK21zZ3N0ciAicmVkdXppciB1c2FuZG8gYSByZWdyYSAlZCAoJXMpIgorCisjOiBzcmMvcHJpbnQuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWNjZXB0IgorbXNnc3RyICJhY2VpdGFyIgorCisjOiBzcmMvcHJpbnQuYzoyNjQgc3JjL3ByaW50LmM6MzM4Cittc2dpZCAiJGRlZmF1bHQiCittc2dzdHIgIiRwYWRy428iCisKKyM6IHNyYy9wcmludC5jOjM3MyBzcmMvcHJpbnRfZ3JhcGguYzo3OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU3RhdGUgJWQiCittc2dzdHIgIkVzdGFkbyAlZCIKKworIzogc3JjL3ByaW50LmM6NDA5Cittc2dpZCAiVGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyIgorbXNnc3RyICJUZXJtaW5haXMsIGNvbSBhcyByZWdyYXMgb25kZSBlbGVzIGFwYXJlY2VtIgorCisjOiBzcmMvcHJpbnQuYzo0MzYKK21zZ2lkICJOb250ZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIiCittc2dzdHIgIk7jby10ZXJtaW5haXMgY29tIGFzIHJlZ3JhcyBvbmRlIGVsZXMgYXBhcmVjZW0iCisKKyM6IHNyYy9wcmludC5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICIgb24gbGVmdDoiCittc2dzdHIgIiDgIGVzcXVlcmRhOiIKKworIzogc3JjL3ByaW50LmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiByaWdodDoiCittc2dzdHIgIiDgIGRpcmVpdGE6IgorCisjOiBzcmMvcHJpbnQuYzo1MTAKKyMsIGZ1enp5Cittc2dpZCAiUnVsZXMgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cyIKK21zZ3N0ciAicmVncmEgbuNvIHJlZHV6aWRhIHBvciBjYXVzYSBkZSBjb25mbGl0b3MiCisKKyM6IHNyYy9yZWFkZXIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSAlcyBkZWNsYXJhdGlvbnMiCittc2dzdHIgImRlY2xhcmHn9WVzIGRlICVzIG36bHRpcGxhcyIKKworIzogc3JjL3JlYWRlci5jOjEzMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicmVzdWx0IHR5cGUgY2xhc2ggb24gbWVyZ2UgZnVuY3Rpb24gJXM6IDwlcz4gIT0gPCVzPiIKK21zZ3N0ciAidGlwbyBkZSByZXN1bHRhZG8gY29uZmxpdGEgbmEgZnXn428gZGUgbWVzY2xhICVzOiA8JXM+ICE9IDwlcz4iCisKKyM6IHNyYy9yZWFkZXIuYzoxMzkgc3JjL3N5bXRhYi5jOjE1NiBzcmMvc3ltdGFiLmM6MTY2IHNyYy9zeW10YWIuYzo5MzgKKyM6IHNyYy9zeW10YWIuYzo5NTMgc3JjL3N5bXRhYi5jOjk2OCBzcmMvc3ltdGFiLmM6OTgzCisjLCBmdXp6eQorbXNnaWQgInByZXZpb3VzIGRlY2xhcmF0aW9uIgorbXNnc3RyICJkZWNsYXJh5/VlcyBkZSAlcyBt+mx0aXBsYXMiCisKKyM6IHNyYy9yZWFkZXIuYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlZCBzeW1ib2wgbmFtZSBmb3IgJXMgaWdub3JlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVhZGVyLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bGUgZ2l2ZW4gZm9yICVzLCB3aGljaCBpcyBhIHRva2VuIgorbXNnc3RyICJyZWdyYSBmb3JuZWNpZGEgcGFyYSAlcywgcXVlIOkgdW0gdG9rZW4iCisKKyM6IHNyYy9yZWFkZXIuYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidHlwZSBjbGFzaCBvbiBkZWZhdWx0IGFjdGlvbjogPCVzPiAhPSA8JXM+IgorbXNnc3RyICJjb25mbGl0byBkZSB0aXBvcyBuYSBh5+NvIHBhZHLjbzogPCVzPiAhPSA8JXM+IgorCisjOiBzcmMvcmVhZGVyLmM6MzEwCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IHJ1bGUgZm9yIHR5cGVkIG5vbnRlcm1pbmFsLCBhbmQgbm8gYWN0aW9uIgorbXNnc3RyICJyZWdyYSB2YXppYSBwYXJhIHVtIG7jby10ZXJtaW5hbCBjb20gdGlwbywgZSBu428gaOEgYef1ZXMiCisKKyM6IHNyYy9yZWFkZXIuYzozMjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVudXNlZCB2YWx1ZTogJCVkIgorbXNnc3RyICJ2YWxvciBpbnbhbGlkbzogJXMiCisKKyM6IHNyYy9yZWFkZXIuYzozMzAKK21zZ2lkICJ1bnNldCB2YWx1ZTogJCQiCittc2dzdHIgIiIKKworIzogc3JjL3JlYWRlci5jOjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b2tlbiBmb3IgJSVwcmVjIGlzIG5vdCBkZWZpbmVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVhZGVyLmM6NDMxIHNyYy9yZWFkZXIuYzo0NDUgc3JjL3JlYWRlci5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5IG9uZSAlcyBhbGxvd2VkIHBlciBydWxlIgorbXNnc3RyICJhcGVuYXMgdW0gJXMg6SBwZXJtaXRpZG8gcG9yIHJlZ3JhIgorCisjOiBzcmMvcmVhZGVyLmM6NDQxIHNyYy9yZWFkZXIuYzo0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWZmZWN0cyBvbmx5IEdMUiBwYXJzZXJzIgorbXNnc3RyICIlcyBhZmV0YSBhcGVuYXMgYW5hbGlzYWRvcmVzIEdMUiIKKworIzogc3JjL3JlYWRlci5jOjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBtdXN0IGJlIGZvbGxvd2VkIGJ5IHBvc2l0aXZlIG51bWJlciIKK21zZ3N0ciAiJXMgZGV2ZSBzZXIgc2VndWlkbyBwb3IgdW0gbvptZXJvIHBvc2l0aXZvIgorCisjOiBzcmMvcmVhZGVyLmM6NTU0CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bGUgaXMgdG9vIGxvbmciCittc2dzdHIgIiIKKworIzogc3JjL3JlYWRlci5jOjY3MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBydWxlcyBpbiB0aGUgaW5wdXQgZ3JhbW1hciIKK21zZ3N0ciAibuNvIGjhIHJlZ3JhcyBuYSBncmFt4XRpY2EgZGUgZW50cmFkYSIKKworIzogc3JjL3JlZHVjZS5jOjI0MQorIywgZnV6enkKK21zZ2lkICJydWxlIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAibuNvIGjhIHJlZ3JhcyBuYSBncmFt4XRpY2EgZGUgZW50cmFkYSIKKworIzogc3JjL3JlZHVjZS5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWR1Y2UuYzozNTAKKyMsIGZ1enp5Cittc2dpZCAiTm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAiTuNvLXRlcm1pbmFpcyBjb20gYXMgcmVncmFzIG9uZGUgZWxlcyBhcGFyZWNlbSIKKworIzogc3JjL3JlZHVjZS5jOjM2MworIywgZnV6enkKK21zZ2lkICJUZXJtaW5hbHMgdW51c2VkIGluIGdyYW1tYXIiCittc2dzdHIgIm7jbyBo4SByZWdyYXMgbmEgZ3JhbeF0aWNhIGRlIGVudHJhZGEiCisKKyM6IHNyYy9yZWR1Y2UuYzozNzIKKyMsIGZ1enp5Cittc2dpZCAiUnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyICJu428gaOEgcmVncmFzIG5hIGdyYW3hdGljYSBkZSBlbnRyYWRhIgorCisjOiBzcmMvcmVkdWNlLmM6Mzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ2lkX3BsdXJhbCAiJWQgbm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IHNyYy9yZWR1Y2UuYzozOTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVkIHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnaWRfcGx1cmFsICIlZCBydWxlcyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHJbMF0gIm7jbyBo4SByZWdyYXMgbmEgZ3JhbeF0aWNhIGRlIGVudHJhZGEiCittc2dzdHJbMV0gIm7jbyBo4SByZWdyYXMgbmEgZ3JhbeF0aWNhIGRlIGVudHJhZGEiCisKKyM6IHNyYy9yZWR1Y2UuYzo0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnQgc3ltYm9sICVzIGRvZXMgbm90IGRlcml2ZSBhbnkgc2VudGVuY2UiCittc2dzdHIgInPtbWJvbG8gZGUgaW7tY2lvICVzIG7jbyBkZXJpdmEgbmVuaHVtYSBzZW50ZW7nYSIKKworIzogc3JjL3NjYW4tY29kZS5sOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJheSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyMjkKK21zZ2lkICJhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZSIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjMyCittc2dpZCAiZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNlIG9mIFlZRkFJTCwgd2hpY2ggaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0MzEgc3JjL3NjYW4tY29kZS5sOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcnMgdG86ICVjJXMgYXQgJXMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NzaWJseSBtZWFudDogJWMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICIsIGhpZGluZyAlYyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiBhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiwgY2Fubm90IGJlIGFjY2Vzc2VkIGZyb20gbWlkLXJ1bGUgYWN0aW9uIGF0ICQlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NTIxIHNyYy9zY2FuLWdyYW0ubDo3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZWdlciBvdXQgb2YgcmFuZ2U6ICVzIgorbXNnc3RyICJpbnRlaXJvIGZvcmEgZGUgZmFpeGE6ICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjEwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZmVyZW5jZTogJXMiCittc2dzdHIgImRpcmV0aXZhIGluduFsaWRhOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IgYWZ0ZXIgJyVjJywgZXhwZWN0aW5nIGludGVnZXIsIGxldHRlciwgJ18nLCAnWycsIG9yICckJyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbiBiZWZvcmUgJCVkOiAlLipzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiAlLipzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2NDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm1pc2xlYWRpbmcgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAicmVkZWZpbmluZG8gcHJlY2Vk6m5jaWEgZGUgJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2NjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImFtYmlndW91cyByZWZlcmVuY2U6ICVzIgorbXNnc3RyICJhcmd1bWVudG8gJXMgYW1i7Wd1byBwYXJhICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGxpY2l0IHR5cGUgZ2l2ZW4gaW4gdW50eXBlZCBncmFtbWFyIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3NTkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiQkIGZvciB0aGUgbWlkcnVsZSBhdCAkJWQgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiQlZCBkZSBgJXMnIG7jbyB0ZW0gdGlwbyBkZWNsYXJhZG8iCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3NjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiQkIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICIkJCBkZSBgJXMnIG7jbyB0ZW0gdGlwbyBkZWNsYXJhZG8iCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3ODYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiQlcyBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiJCVkIGRlIGAlcycgbuNvIHRlbSB0aXBvIGRlY2xhcmFkbyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjE0OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic3RyYXkgJywnIHRyZWF0ZWQgYXMgd2hpdGUgc3BhY2UiCittc2dzdHIgImAsJyBwZXJkaWRhIHRyYXRhZGEgY29tbyBicmFuY28iCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBkaXJlY3RpdmU6ICVzIgorbXNnc3RyICJkaXJldGl2YSBpbnbhbGlkYTogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyNTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaWRlbnRpZmllcjogJXMiCittc2dzdHIgImRpcmV0aXZhIGluduFsaWRhOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjI5NQorIywgZnV6enkKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciIKK21zZ2lkX3BsdXJhbCAiaW52YWxpZCBjaGFyYWN0ZXJzIgorbXNnc3RyWzBdICJjYXJhY3RlcmUgaW524WxpZG86ICVzIgorbXNnc3RyWzFdICJjYXJhY3RlcmUgaW524WxpZG86ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgaWRlbnRpZmllciBpbiBicmFja2V0ZWQgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJhbiBpZGVudGlmaWVyIGV4cGVjdGVkIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozODEKKyMsIGZ1enp5Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIgaW4gYnJhY2tldGVkIG5hbWUiCittc2dpZF9wbHVyYWwgImludmFsaWQgY2hhcmFjdGVycyBpbiBicmFja2V0ZWQgbmFtZSIKK21zZ3N0clswXSAiY2FyYWN0ZXJlIGluduFsaWRvOiAlcyIKK21zZ3N0clsxXSAiY2FyYWN0ZXJlIGluduFsaWRvOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjQ4MSBzcmMvc2Nhbi1ncmFtLmw6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGNoYXJhY3RlciBsaXRlcmFsIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo0ODYgc3JjL3NjYW4tZ3JhbS5sOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJleHRyYSBjaGFyYWN0ZXJzIGluIGNoYXJhY3RlciBsaXRlcmFsIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1MTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVsbCBjaGFyYWN0ZXIiCittc2dzdHIgImNhcmFjdGVyZSBpbnbhbGlkbzogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1MzEgc3JjL3NjYW4tZ3JhbS5sOjU0MSBzcmMvc2Nhbi1ncmFtLmw6NTYxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBhZnRlciBcXC1lc2NhcGU6ICVzIgorbXNnc3RyICJzZXH86m5jaWEgZGUgZXNjYXBlIGluduFsaWRhOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjU3MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgXFwtZXNjYXBlOiAlcyIKK21zZ3N0ciAiY2FyYWN0ZXJlIGluduFsaWRvOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjkwMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyBhdCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiYCVzJyBmYWx0YW5kbyBubyBmaW5hbCBkbyBhcnF1aXZvIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6OTEyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzIGF0IGVuZCBvZiBsaW5lIgorbXNnc3RyICJgJXMnIGZhbHRhbmRvIG5vIGZpbmFsIGRvIGFycXVpdm8iCisKKyM6IHNyYy9zY2FuLXNrZWwubDoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5jbG9zZWQgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIGZldyBhcmd1bWVudHMgZm9yICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1za2VsLmw6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBmb3IgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW1saXN0LmM6MjExCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICQgdmFsdWU6ICQlZCIKK21zZ3N0ciAidmFsb3IgaW524WxpZG86ICVzIgorCisjOiBzcmMvc3ltdGFiLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUE9TSVggWWFjYyBmb3JiaWRzIGRhc2hlcyBpbiBzeW1ib2wgbmFtZXM6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW10YWIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBzeW1ib2xzIGluIGlucHV0IGdyYW1tYXIgKGxpbWl0IGlzICVkKSIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICJyZWRlY2xhcmHn428gZGUgJXMgcGFyYSAlcyIKKworIzogc3JjL3N5bXRhYi5jOjE2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVkZWNsYXJhdGlvbiBmb3IgPCVzPiIKK21zZ3N0ciAicmVkZWNsYXJh5+NvIGRlICVzIHBhcmEgJXMiCisKKyM6IHNyYy9zeW10YWIuYzozMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHJlZGVmaW5lZCIKK21zZ3N0ciAic+1tYm9sbyAlcyByZWRlZmluaWRvIgorCisjOiBzcmMvc3ltdGFiLmM6MzQ2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgcmVkZWNsYXJlZCIKK21zZ3N0ciAic+1tYm9sbyAlcyByZWRlZmluaWRvIgorCisjOiBzcmMvc3ltdGFiLmM6MzY3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVmaW5pbmcgdXNlciB0b2tlbiBudW1iZXIgb2YgJXMiCittc2dzdHIgInJlZGVmaW5pbmRvIG76bWVybyBkZSB0b2tlbiBkZSB1c3XhcmlvIGRlICVzIgorCisjOiBzcmMvc3ltdGFiLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyBpcyB1c2VkLCBidXQgaXMgbm90IGRlZmluZWQgYXMgYSB0b2tlbiBhbmQgaGFzIG5vIHJ1bGVzIgorbXNnc3RyICJz7W1ib2xvICVzIHVzYWRvLCBtYXMgbuNvIGRlZmluaWRvIGNvbW8gdW1hIHRva2VuIGUgbuNvIHRlbSByZWdyYXMiCisKKyM6IHNyYy9zeW10YWIuYzo0MTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyB1c2VkIG1vcmUgdGhhbiBvbmNlIGFzIGEgbGl0ZXJhbCBzdHJpbmciCittc2dzdHIgInPtbWJvbG8gYCVzJyB1c2FkbyBtYWlzIHRoZSB1bWEgdmV6IGNvbW8gdW1hIHN0cmluZyBsaXRlcmFsIgorCisjOiBzcmMvc3ltdGFiLmM6NDE4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgZ2l2ZW4gbW9yZSB0aGFuIG9uZSBsaXRlcmFsIHN0cmluZyIKK21zZ3N0ciAic+1tYm9sbyBgJXMnIGFzc29jaWFkbyBhIG1haXMgZGUgdW1hIHN0cmluZyBsaXRlcmFsIgorCisjOiBzcmMvc3ltdGFiLmM6NTM1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1c2VyIHRva2VuIG51bWJlciAlZCByZWRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAicmVkZWNsYXJh5+NvIGRlIHRpcG8gcGFyYSAlcyIKKworIzogc3JjL3N5bXRhYi5jOjUzOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicHJldmlvdXMgZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICJyZWRlY2xhcmHn428gZGUgdGlwbyBwYXJhICVzIgorCisjOiBzcmMvc3ltdGFiLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBzdGFydCBzeW1ib2wgJXMgaXMgdW5kZWZpbmVkIgorbXNnc3RyICJvIHPtbWJvbG8gZGUgaW7tY2lvICVzIG7jbyBlc3ThIGRlZmluaWRvIgorCisjOiBzcmMvc3ltdGFiLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBzdGFydCBzeW1ib2wgJXMgaXMgYSB0b2tlbiIKK21zZ3N0ciAibyBz7W1ib2xvIGRlIGlu7WNpbyAlcyDpIHVtIHRlcm1pbmFsIgorCisjOiBzcmMvc3ltdGFiLmM6OTM1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICUlZGVzdHJ1Y3RvciIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnbGVzcyAlJWRlc3RydWN0b3IiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlJXByaW50ZXIiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjk4MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJSVwcmludGVyIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzo2MyBkamdwcC9zdWJwaXBlLmM6Mjg2IGRqZ3BwL3N1YnBpcGUuYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3Zpbmcgb2YgJyVzJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjg1IGRqZ3BwL3N1YnBpcGUuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGlvbiBvZiBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgInNhdmluZyBzdGRpbiBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJzYXZpbmcgc3Rkb3V0IGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTUzIGRqZ3BwL3N1YnBpcGUuYzoxOTcgZGpncHAvc3VicGlwZS5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nIG9mIHRtcGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgYmlzb24ncyBzdGRvdXQgdG8gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIG00J3Mgc3RkaW4gZnJvbSB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlbmluZyBvZiBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIG00J3Mgc3Rkb3V0IHRvIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSAnJXMnIGludGVycnVwdGVkIgorbXNnc3RyICJwcm9ncmFtYSBzdWJzaWRp4XJpbyBgJXMnIGZhbGhvdSIKKworIzogZGpncHAvc3VicGlwZS5jOjI0MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic3Vic2lkaWFyeSBwcm9ncmFtICclcycgbm90IGZvdW5kIgorbXNnc3RyICJwcm9ncmFtYSBzdWJzaWRp4XJpbyBgJXMnIG7jbyBmb2kgZW5jb250cmFkbyIKKworIzogZGpncHAvc3VicGlwZS5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBiaXNvbidzIHN0ZGluIGZyb20gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCAlcyBmb3IgJXMiCittc2dzdHIgImFyZ3VtZW50byAlcyBpbnbhbGlkbyBwYXJhICVzIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIGFyZ3VtZW50ICVzIGZvciAlcyIKK21zZ3N0ciAiYXJndW1lbnRvICVzIGFtYu1ndW8gcGFyYSAlcyIKKworIzogbGliL2FyZ21hdGNoLmM6MTUzCittc2dpZCAiVmFsaWQgYXJndW1lbnRzIGFyZToiCittc2dzdHIgIkFyZ3VtZW50b3MgduFsaWRvcyBz4286IgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9hbGxvY3MsICV1IGZyZWVkICglLjJmJSUpLlxuIgorbXNnc3RyICIldSBiaXRzZXRfYWxsb2NzLCAldSBsaWJlcmFkb3MgKCUuMmYlJSkuXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3NldHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorbXNnc3RyICIldSBiaXRzZXRfc2V0cywgJXUgZW0gY2FjaGUgKCUuMmYlJSlcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfcmVzZXRzLCAldSBjYWNoZWQgKCUuMmYlJSlcbiIKK21zZ3N0ciAiJXUgYml0c2V0X3Jlc2V0cywgJXUgZW0gY2FjaGUgKCUuMmYlJSlcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfdGVzdHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorbXNnc3RyICIldSBiaXRzZXRfdGVzdHMsICV1IGVtIGNhY2hlICglLjJmJSUpXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X2xpc3RzXG4iCittc2dzdHIgIiV1IGJpdHNldF9saXN0c1xuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTkyCittc2dpZCAiY291bnQgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICJoaXN0b2dyYW1hIGRlIGxvZyBkZSBjb250YWdlbnNcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5NQorbXNnaWQgInNpemUgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICJoaXN0b2dyYW1hIGRlIGxvZyBkZSB0YW1hbmhvc1xuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTk4Cittc2dpZCAiZGVuc2l0eSBoaXN0b2dyYW1cbiIKK21zZ3N0ciAiaGlzdG9ncmFtYSBkZSBkZW5zaWRhZGVzXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJpdHNldCBzdGF0aXN0aWNzOlxuIgorIlxuIgorbXNnc3RyICIiCisiRXN0YXTtc3RpY2FzIGRlIGJpdHNldDpcbiIKKyJcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJBY2N1bXVsYXRlZCBydW5zID0gJXVcbiIKK21zZ3N0ciAiRXhlY3Xn9WVzIGFjdW11bGFkYXMgPSAldVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjU5IGxpYi9iaXRzZXRfc3RhdHMuYzoyNjQKKyMsIGZ1enp5Cittc2dpZCAiY2Fubm90IHJlYWQgc3RhdHMgZmlsZSIKK21zZ3N0ciAiSW1wb3Nz7XZlbCBsZXIgbyBhcnF1aXZvIGRlIGVzdGF07XN0aWNhcy4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyNjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImJhZCBzdGF0cyBmaWxlIHNpemVcbiIKK21zZ3N0ciAiVGFtYW5obyBkbyBhcnF1aXZvIGRlIGVzdGF07XN0aWNhcyBjb20gZXJyby5cbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI4NyBsaWIvYml0c2V0X3N0YXRzLmM6Mjg5CisjLCBmdXp6eQorbXNnaWQgImNhbm5vdCB3cml0ZSBzdGF0cyBmaWxlIgorbXNnc3RyICJJbXBvc3PtdmVsIGRlIGVzY3JldmVyIG5vIGFycXVpdm8gZGUgZXN0YXTtc3RpY2FzLiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI5MgorIywgZnV6enkKK21zZ2lkICJjYW5ub3Qgb3BlbiBzdGF0cyBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJJbXBvc3PtdmVsIGFicmlyIGFycXVpdm8gZGUgZXN0YXTtc3RpY2FzIHBhcmEgZXNjcml0YS4iCisKKyM6IGxpYi9jbG9zZW91dC5jOjExMgorIywgZnV6enkKK21zZ2lkICJ3cml0ZSBlcnJvciIKK21zZ3N0ciAiZXJybyBmYXRhbDogIgorCisjOiBsaWIvZXJyb3IuYzoxODgKK21zZ2lkICJVbmtub3duIHN5c3RlbSBlcnJvciIKK21zZ3N0ciAiRXJybyBkZSBzaXN0ZW1hIGRlc2NvbmhlY2lkbyIKKworIzogbGliL2dldG9wdC5jOjU0NyBsaWIvZ2V0b3B0LmM6NTc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICclcycgaXMgYW1iaWd1b3VzOyBwb3NzaWJpbGl0aWVzOiIKK21zZ3N0ciAiJXM6IGEgb3Dn428gYCVzJyDpIGFtYu1ndWFcbiIKKworIzogbGliL2dldG9wdC5jOjYyNCBsaWIvZ2V0b3B0LmM6NjI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBhIG9w5+NvIGAtLSVzJyBubyBhZG1pdGUgbmVuaHVtIGFyZ3VtZW50b1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6NjM3IGxpYi9nZXRvcHQuYzo2NDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJyVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IGEgb3Dn428gYCVjJXMnIG7jbyBhZG1pdGUgbmVuaHVtIGFyZ3VtZW50b1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6Njg1IGxpYi9nZXRvcHQuYzo3MDQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy0tJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBhIG9w5+NvIGAlcycgZXhpZ2UgdW0gYXJndW1lbnRvXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo3NDIgbGliL2dldG9wdC5jOjc0NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gJy0tJXMnXG4iCittc2dzdHIgIiVzOiBvcOfjbyBgLS0lcycgbuNvIHJlY29uaGVjaWRhXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo3NTMgbGliL2dldG9wdC5jOjc1NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gJyVjJXMnXG4iCittc2dzdHIgIiVzOiBvcOfjbyBgJWMlcycgbuNvIHJlY29uaGVjaWRhXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo4MDUgbGliL2dldG9wdC5jOjgwOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgb3B0aW9uIC0tICclYydcbiIKK21zZ3N0ciAiJXM6IG9w5+NvIC0tICVjIGluduFsaWRhXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo4NjEgbGliL2dldG9wdC5jOjg3OCBsaWIvZ2V0b3B0LmM6MTA4OCBsaWIvZ2V0b3B0LmM6MTEwNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAnJWMnXG4iCittc2dzdHIgIiVzOiBhIG9w5+NvIC0tICVjIGV4aWdlIHVtIGFyZ3VtZW50b1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6OTM0IGxpYi9nZXRvcHQuYzo5NTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyBpcyBhbWJpZ3VvdXNcbiIKK21zZ3N0ciAiJXM6IGEgb3Dn428gYC1XICVzJyDpIGFtYu1ndWFcbiIKKworIzogbGliL2dldG9wdC5jOjk3NCBsaWIvZ2V0b3B0LmM6OTkyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogYSBvcOfjbyBgLVcgJXMnIG7jbyBhZG1pdGUgbmVuaHVtIGFyZ3VtZW50b1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6MTAxMyBsaWIvZ2V0b3B0LmM6MTAzMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLVcgJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBhIG9w5+NvIGAlcycgZXhpZ2UgdW0gYXJndW1lbnRvXG4iCisKKyM6IGxpYi9vYnN0YWNrLmM6NDEzIGxpYi9vYnN0YWNrLmM6NDE1IGxpYi94YWxsb2MtZGllLmM6MzQKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJtZW3zcmlhIGVzZ290YWRhIgorCisjOiBsaWIvc3Bhd24tcGlwZS5jOjE0MCBsaWIvc3Bhd24tcGlwZS5jOjE0MyBsaWIvc3Bhd24tcGlwZS5jOjI2NAorIzogbGliL3NwYXduLXBpcGUuYzoyNjcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZSIKK21zZ3N0ciAiaW1wb3Nz7XZlbCBmZWNoYXIgbyBhcnF1aXZvIgorCisjOiBsaWIvc3Bhd24tcGlwZS5jOjIzNCBsaWIvc3Bhd24tcGlwZS5jOjM0OCBsaWIvd2FpdC1wcm9jZXNzLmM6MjgyCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MgZmFpbGVkIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOgorIy4gR2V0IHRyYW5zbGF0aW9ucyBmb3Igb3BlbiBhbmQgY2xvc2luZyBxdW90YXRpb24gbWFya3MuCisjLiBUaGUgbWVzc2FnZSBjYXRhbG9nIHNob3VsZCB0cmFuc2xhdGUgImAiIHRvIGEgbGVmdAorIy4gcXVvdGF0aW9uIG1hcmsgc3VpdGFibGUgZm9yIHRoZSBsb2NhbGUsIGFuZCBzaW1pbGFybHkgZm9yCisjLiAiJyIuICBGb3IgZXhhbXBsZSwgYSBGcmVuY2ggVW5pY29kZSBsb2NhbCBzaG91bGQgdHJhbnNsYXRlCisjLiB0aGVzZSB0byBVKzAwQUIgKExFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFCisjLiBRVU9UQVRJT04gTUFSSyksIGFuZCBVKzAwQkIgKFJJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRQorIy4gUVVPVEFUSU9OIE1BUkspLCByZXNwZWN0aXZlbHkuCisjLgorIy4gSWYgdGhlIGNhdGFsb2cgaGFzIG5vIHRyYW5zbGF0aW9uLCB3ZSB3aWxsIHRyeSB0bworIy4gdXNlIFVuaWNvZGUgVSsyMDE4IChMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykgYW5kCisjLiBVbmljb2RlIFUrMjAxOSAoUklHSFQgU0lOR0xFIFFVT1RBVElPTiBNQVJLKS4gIElmIHRoZQorIy4gY3VycmVudCBsb2NhbGUgaXMgbm90IFVuaWNvZGUsIGxvY2FsZV9xdW90aW5nX3N0eWxlCisjLiB3aWxsIHF1b3RlICdsaWtlIHRoaXMnLCBhbmQgY2xvY2FsZV9xdW90aW5nX3N0eWxlIHdpbGwKKyMuIHF1b3RlICJsaWtlIHRoaXMiLiAgWW91IHNob3VsZCBhbHdheXMgaW5jbHVkZSB0cmFuc2xhdGlvbnMKKyMuIGZvciAiYCIgYW5kICInIiBldmVuIGlmIFUrMjAxOCBhbmQgVSsyMDE5IGFyZSBhcHByb3ByaWF0ZQorIy4gZm9yIHlvdXIgbG9jYWxlLgorIy4KKyMuIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gcHV0IGhlcmUsIHBsZWFzZSBzZWUKKyMuIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1F1b3RhdGlvbl9tYXJrc19pbl9vdGhlcl9sYW5ndWFnZXM+CisjLiBhbmQgdXNlIGdseXBocyBzdWl0YWJsZSBmb3IgeW91ciBsYW5ndWFnZS4KKyM6IGxpYi9xdW90ZWFyZy5jOjMxMgorbXNnaWQgImAiCittc2dzdHIgImAiCisKKyM6IGxpYi9xdW90ZWFyZy5jOjMxMworbXNnaWQgIiciCittc2dzdHIgIiciCisKKyM6IGxpYi90aW1ldmFyLmM6NDc1Cittc2dpZCAiIgorIlxuIgorIkV4ZWN1dGlvbiB0aW1lcyAoc2Vjb25kcylcbiIKK21zZ3N0ciAiIgorIlxuIgorIlRlbXBvcyBkZSBleGVjdefjbyAoc2VndW5kb3MpXG4iCisKKyM6IGxpYi90aW1ldmFyLmM6NTI1Cittc2dpZCAiIFRPVEFMICAgICAgICAgICAgICAgICA6IgorbXNnc3RyICIgVE9UQUwgICAgICAgICAgICAgICAgIDoiCisKKyM6IGxpYi90aW1ldmFyLmM6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWUgaW4gJXM6ICVsZC4lMDZsZCAoJWxkJSUpXG4iCittc2dzdHIgInRlbXBvIGVtICAlczogJWxkLiUwNmxkICglbGQlJSlcbiIKKworIzogbGliL3czMnNwYXduLmg6NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiX29wZW5fb3NmaGFuZGxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvdzMyc3Bhd24uaDo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdG9yZSBmZCAlZDogZHVwMiBmYWlsZWQiCittc2dzdHIgIiIKKworIzogbGliL3dhaXQtcHJvY2Vzcy5jOjIyMyBsaWIvd2FpdC1wcm9jZXNzLmM6MjU1IGxpYi93YWl0LXByb2Nlc3MuYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6Mjc0IGxpYi93YWl0LXByb2Nlc3MuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyBnb3QgZmF0YWwgc2lnbmFsICVkIgorbXNnc3RyICIiCisKKyN+IG1zZ2lkICJzdGF0ZSAlZCIKKyN+IG1zZ3N0ciAiZXN0YWRvICVkIgorCisjfiBtc2dpZCAid2FybmluZzogIgorI34gbXNnc3RyICJhdmlzbzogIgorCisjfiBtc2dpZCAiR05VIGJpc29uIGdlbmVyYXRlcyBwYXJzZXJzIGZvciBMQUxSKDEpIGdyYW1tYXJzLlxuIgorI34gbXNnc3RyICJHTlUgYmlzb24gZ2VyYSBhbmFsaXNhZG9yZXMgcGFyYSBncmFt4XRpY2FzIExBTFIoMSkuXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiSWYgYSBsb25nIG9wdGlvbiBzaG93cyBhbiBhcmd1bWVudCBhcyBtYW5kYXRvcnksIHRoZW4gaXQgaXMgbWFuZGF0b3J5XG4iCisjfiAiZm9yIHRoZSBlcXVpdmFsZW50IHNob3J0IG9wdGlvbiBhbHNvLiAgU2ltaWxhcmx5IGZvciBvcHRpb25hbCBhcmd1bWVudHMuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJTZSB1bWEgb3Dn428gbG9uZ2EgbW9zdHJhIHVtIGFyZ3VtZW50byBjb21vIG9icmlnYXTzcmlvLCBlbnTjbyBlbGUg6VxuIgorI34gIm9icmlnYXTzcmlvIHBhcmEgYSBvcOfjbyBjdXJ0YSBlcXVpdmFsZW50ZSB0YW1i6W0uICBJZ3VhbG1lbnRlIHBhcmEgb3NcbiIKKyN+ICJhcmd1bWVudG9zIG9wY2lvbmFpcy5cbiIKKworI34gbXNnaWQgIiIKKyN+ICJPcGVyYXRpb24gbW9kZXM6XG4iCisjfiAiICAtaCwgLS1oZWxwICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKKyN+ICIgIC1WLCAtLXZlcnNpb24gICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorI34gIiAgLXksIC0teWFjYyAgICAgIGVtdWxhdGUgUE9TSVggeWFjY1xuIgorI34gbXNnc3RyICIiCisjfiAiTW9kb3MgZGUgb3BlcmHn4286XG4iCisjfiAiICAtaCwgLS1oZWxwICAgICAgZXhpYmUgZXN0YSBhanVkYSBlIHNhaVxuIgorI34gIiAgLVYsIC0tdmVyc2lvbiAgIG1vc3RyYSBpbmZvcm1h5/VlcyBkZSB2ZXJz428gZSBzYWlcbiIKKyN+ICIgIC15LCAtLXlhY2MgICAgICBlbXVsYSBvIHlhY2MgUE9TSVhcbiIKKworI34gbXNnaWQgIlBPU0lYIGZvcmJpZHMgZGVjbGFyYXRpb25zIGluIHRoZSBncmFtbWFyIgorI34gbXNnc3RyICJvIFBPU0lYIHByb+1iZSBkZWNsYXJh5/VlcyBuYSBncmFt4XRpY2EiCisKKyN+IG1zZ2lkICJSdWxlcyBuZXZlciByZWR1Y2VkIgorI34gbXNnc3RyICJSZWdyYXMgbnVuY2EgcmVkdXppZGFzIgorCisjfiBtc2dpZCAidXNlbGVzcyBydWxlIgorI34gbXNnc3RyICJyZWdyYSBpbvp0aWwiCisKKyN+IG1zZ2lkICJ1c2VsZXNzIG5vbnRlcm1pbmFsOiAlcyIKKyN+IG1zZ3N0ciAibuNvLXRlcm1pbmFsIGlu+nRpbDogJXMiCisKKyN+IG1zZ2lkICJVc2VsZXNzIG5vbnRlcm1pbmFscyIKKyN+IG1zZ3N0ciAiTuNvLXRlcm1pbmFpcyBpbvp0ZWlzIgorCisjfiBtc2dpZCAiVGVybWluYWxzIHdoaWNoIGFyZSBub3QgdXNlZCIKKyN+IG1zZ3N0ciAiVGVybWluYWlzIHF1ZSBu428gZm9yYW0gdXNhZG9zIgorCisjfiBtc2dpZCAiVXNlbGVzcyBydWxlcyIKKyN+IG1zZ3N0ciAiUmVncmFzIGlu+nRlaXMiCisKKyN+IG1zZ2lkICIlZCBydWxlIG5ldmVyIHJlZHVjZWRcbiIKKyN+IG1zZ2lkX3BsdXJhbCAiJWQgcnVsZXMgbmV2ZXIgcmVkdWNlZFxuIgorI34gbXNnc3RyWzBdICIlZCByZWdyYSBxdWUgbnVuY2EgZm9pIHJlZHV6aWRhXG4iCisjfiBtc2dzdHJbMV0gIiVkIHJlZ3JhcyBxdWUgbnVuY2EgZm9yYW0gcmVkdXppZGFzXG4iCisKKyN+IG1zZ2lkICIlZCB1c2VsZXNzIG5vbnRlcm1pbmFsIgorI34gbXNnaWRfcGx1cmFsICIlZCB1c2VsZXNzIG5vbnRlcm1pbmFscyIKKyN+IG1zZ3N0clswXSAiJWQgbuNvLXRlcm1pbmFsIGlu+nRpbCIKKyN+IG1zZ3N0clsxXSAiJWQgbuNvLXRlcm1pbmFsIGlu+nRpbCIKKworI34gbXNnaWQgIiBhbmQgIgorI34gbXNnc3RyICIgZSAiCisKKyN+IG1zZ2lkICIlZCB1c2VsZXNzIHJ1bGUiCisjfiBtc2dpZF9wbHVyYWwgIiVkIHVzZWxlc3MgcnVsZXMiCisjfiBtc2dzdHJbMF0gIiVkIHJlZ3JhIGlu+nRpbCIKKyN+IG1zZ3N0clsxXSAiJWQgcmVncmFzIGlu+nRlaXMiCisKKyN+IG1zZ2lkICJ1bnJlY29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlOiAlcyIKKyN+IG1zZ3N0ciAic2Vx/OpuY2lhIGRlIGVzY2FwZSBu428gcmVjb25oZWNpZGE6ICVzIgorCisjfiBtc2dpZCAibWlzc2luZyBgeycgaW4gYCVzJyIKKyN+IG1zZ3N0ciAiZmFsdGEgYHsnIGVtIGAlcyciCisKKyN+IG1zZ2lkICJpbnZhbGlkICQgdmFsdWUiCisjfiBtc2dzdHIgInZhbG9yICQgaW524WxpZG8iCisKKyN+IG1zZ2lkICJjb25mbGljdGluZyBwcmVjZWRlbmNlcyBmb3IgJXMgYW5kICVzIgorI34gbXNnc3RyICJwcmVjZWTqbmNpYXMgY29uZmxpdGFudGVzIHBhcmEgICVzIGUgJXMiCisKKyN+IG1zZ2lkICJjb25mbGljdGluZyBhc3NvY2lhdGl2aXRpZXMgZm9yICVzICglcykgYW5kICVzICglcykiCisjfiBtc2dzdHIgInZhbG9yZXMgYXNzb2NpYXRpdm9zIGNvbmZsaXRhbnRlcyBwYXJhICVzICglcykgZSAlcyAoJXMpIgorCisjfiBtc2dpZCAidG9rZW5zICVzIGFuZCAlcyBib3RoIGFzc2lnbmVkIG51bWJlciAlZCIKKyN+IG1zZ3N0ciAidG9rZW5zICVzIGUgJXMgYXNzb2NpYWRhcyBhbyBtZXNtbyBu+m1lcm8gJWQiCisKKyN+IG1zZ2lkICIlczogaWxsZWdhbCBvcHRpb24gLS0gJWNcbiIKKyN+IG1zZ3N0ciAiJXM6IG9w5+NvIC0tICVjIGlsZWdhbFxuIgorCisjfiBtc2dpZCAic3Vic2lkaWFyeSBwcm9ncmFtIGAlcycgY291bGQgbm90IGJlIGludm9rZWQiCisjfiBtc2dzdHIgInByb2dyYW1hIHN1YnNpZGnhcmlvIGAlcycgbuNvIHD0ZGUgc2VyIGludm9jYWRvIgorCisjfiBtc2dpZCAic3Vic2lkaWFyeSBwcm9ncmFtIGAlcycgZmFpbGVkIChleGl0IHN0YXR1cyAlZCkiCisjfiBtc2dzdHIgInByb2dyYW1hIHN1YnNpZGnhcmlvIGAlcycgZmFsaG91IChlc3RhZG8gZGUgc2HtZGEgJWQpIgpkaWZmIC0tZ2l0IGEvcG8vcXVvdC5zZWQgYi9wby9xdW90LnNlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTIyYzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vcXVvdC5zZWQKQEAgLTAsMCArMSw2IEBACitzLyJcKFteIl0qXCkiL+KAnFwx4oCdL2cKK3MvYFwoW15gJ10qXCknL+KAmFwx4oCZL2cKK3MvICdcKFteYCddKlwpJyAvIOKAmFwx4oCZIC9nCitzLyAnXChbXmAnXSpcKSckLyDigJhcMeKAmS9nCitzL14nXChbXmAnXSpcKScgL+KAmFwx4oCZIC9nCitzL+KAnOKAnS8iIi9nCmRpZmYgLS1naXQgYS9wby9yZW1vdmUtcG90Y2RhdGUuc2luIGIvcG8vcmVtb3ZlLXBvdGNkYXRlLnNpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDM2YzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vcmVtb3ZlLXBvdGNkYXRlLnNpbgpAQCAtMCwwICsxLDE5IEBACisjIFNlZCBzY3JpcHQgdGhhdCByZW1vdmUgdGhlIFBPVC1DcmVhdGlvbi1EYXRlIGxpbmUgaW4gdGhlIGhlYWRlciBlbnRyeQorIyBmcm9tIGEgUE9UIGZpbGUuCisjCisjIFRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIGZvbGxvd2luZyBvY2N1cnJlbmNlcyBvZiB0aGUKKyMgcGF0dGVybiBpcyBhY2hpZXZlZCBieSBsb29raW5nIGF0IHRoZSBob2xkIHNwYWNlLgorL14iUE9ULUNyZWF0aW9uLURhdGU6IC4qIiQveworeAorIyBUZXN0IGlmIHRoZSBob2xkIHNwYWNlIGlzIGVtcHR5Lgorcy9QL1AvCit0YQorIyBZZXMgaXQgd2FzIGVtcHR5LiBGaXJzdCBvY2N1cnJlbmNlLiBSZW1vdmUgdGhlIGxpbmUuCitnCitkCitiYgorOmEKKyMgVGhlIGhvbGQgc3BhY2Ugd2FzIG5vbmVtcHR5LiBGb2xsb3dpbmcgb2NjdXJyZW5jZXMuIERvIG5vdGhpbmcuCit4Cis6YgorfQpkaWZmIC0tZ2l0IGEvcG8vcm8uZ21vIGIvcG8vcm8uZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNGE5MDYKLS0tIC9kZXYvbnVsbAorKysgYi9wby9yby5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vcm8ucG8gYi9wby9yby5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWU2MDI3Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vcm8ucG8KQEAgLTAsMCArMSwxMzAyIEBACisjIE1lc2FqZWxlIO5uIGxpbWJhIHJvbeJu4yBwZW50cnUgR05VIEJpc29uLgorIyBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIEFjZXN0IGZpumllciBlc3RlIGRpc3RyaWJ1aXQgc3ViIGFjZWVhumkgbGljZW7+4yBjYSC6aSBwYWNoZXR1bCBiaXNvbi4KKyMgTGF1cmVudGl1IEJ1emR1Z2FuIDxsYnV6QHJvbGl4Lm9yZz4sIDIwMDMsMjAwNCwyMDA1LgorIworIworIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYmlzb24gMi4wYVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBidWctYmlzb25AZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEyLTEyLTEyIDE2OjA5KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA1LTA2LTAzIDEyOjAwLTA1MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IExhdXJlbnRpdSBCdXpkdWdhbiA8bGJ1ekByb2xpeC5vcmc+XG4iCisiTGFuZ3VhZ2UtVGVhbTogUm9tYW5pYW4gPHRyYW5zbGF0aW9uLXRlYW0tcm9AbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiByb1xuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTJcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IHNyYy9jb21wbGFpbi5jOjEyMCBzcmMvY29tcGxhaW4uYzoxMzEgc3JjL2NvbXBsYWluLmM6MTQwIHNyYy9jb21wbGFpbi5jOjE4OAorIzogc3JjL2NvbXBsYWluLmM6MTk4Cittc2dpZCAid2FybmluZyIKK21zZ3N0ciAiYXZlcnRpc21lbnQiCisKKyM6IHNyYy9jb21wbGFpbi5jOjE1MSBzcmMvY29tcGxhaW4uYzoxNjAgc3JjL2NvbXBsYWluLmM6MTY3CisjLCBmdXp6eQorbXNnaWQgImVycm9yIgorbXNnc3RyICJFcm9hcmUgSS9PIgorCisjOiBzcmMvY29tcGxhaW4uYzoyMDggc3JjL2NvbXBsYWluLmM6MjE1CisjLCBmdXp6eQorbXNnaWQgImZhdGFsIGVycm9yIgorbXNnc3RyICJlcm9hcmUgZmF0YWzjOiAiCisKKyM6IHNyYy9jb25mbGljdHMuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyBzaGlmdCIKK21zZ3N0ciAiICAgIENvbmZsaWN0IO5udHJlIHJlZ3VsYSAlZCC6aSBlbGVtZW50dWwgKHRva2VuKSAlcyByZXpvbHZhdCBjYSBzaGlmdCIKKworIzogc3JjL2NvbmZsaWN0cy5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIHJlZHVjZSIKK21zZ3N0ciAiIgorIiAgICBDb25mbGljdCDubnRyZSByZWd1bGEgJWQgumkgZWxlbWVudHVsICh0b2tlbikgJXMgcmV6b2x2YXQgY2EgcmVkdWNlIgorCisjOiBzcmMvY29uZmxpY3RzLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgYW4gZXJyb3IiCittc2dzdHIgIiIKKyIgICAgQ29uZmxpY3Qg7m50cmUgcmVndWxhICVkILppIGVsZW1lbnR1bCAodG9rZW4pICVzIHJlem9sdmF0IGNhIGVyb2FyZSIKKworIzogc3JjL2NvbmZsaWN0cy5jOjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdHM6ICVkIHNoaWZ0L3JlZHVjZSwgJWQgcmVkdWNlL3JlZHVjZVxuIgorbXNnc3RyICJjb25mbGljdGU6ICVkIHNoaWZ0L3JlZHVjZSwgJWQgcmVkdWNlL3JlZHVjZVxuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgc2hpZnQvcmVkdWNlXG4iCittc2dzdHIgImNvbmZsaWN0ZTogJWQgc2hpZnQvcmVkdWNlXG4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCByZWR1Y2UvcmVkdWNlXG4iCittc2dzdHIgImNvbmZsaWN0ZTogJWQgcmVkdWNlL3JlZHVjZVxuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YXRlICVkICIKK21zZ3N0ciAiU3RhcmUgJWQiCisKKyM6IHNyYy9jb25mbGljdHMuYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSVleHBlY3QtcnIgYXBwbGllcyBvbmx5IHRvIEdMUiBwYXJzZXJzIgorbXNnc3RyICIlJSBleHBlY3QtcnIgcG9hdGUgZmkgZm9sb3NpdCBudW1haSBwZW50cnUgcGFyc2VyZSBHTFIiCisKKyM6IHNyYy9jb25mbGljdHMuYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJleHBlY3RlZCAlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIgorbXNnc3RyWzBdICJhbSBhunRlcHRhdCAlZCBjb25mbGljdCBzaGlmdC9yZWR1Y2UiCittc2dzdHJbMV0gImFtIGG6dGVwdGF0ICVkIGNvbmZsaWN0ZSBzaGlmdC9yZWR1Y2UiCisKKyM6IHNyYy9jb25mbGljdHMuYzo2MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJWQgcmVkdWNlL3JlZHVjZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiZXhwZWN0ZWQgJWQgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMiCittc2dzdHJbMF0gImFtIGG6dGVwdGF0ICVkIGNvbmZsaWN0IHJlZHVjZS9yZWR1Y2UiCittc2dzdHJbMV0gImFtIGG6dGVwdGF0ICVkIGNvbmZsaWN0ZSByZWR1Y2UvcmVkdWNlIgorCisjOiBzcmMvZmlsZXMuYzoxMTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3Qgb3BlbiIKK21zZ3N0ciAibnUgYW0gcHV0dXQgZGVzY2hpZGUgZmm6aWVydWwgYCVzJyIKKworIzogc3JjL2ZpbGVzLmM6MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImlucHV0L291dHB1dCBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBzcmMvZmlsZXMuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNsb3NlIGZpbGUiCittc2dzdHIgIm51IHBvdCDubmNoaWRlIGZpumllcnVsIgorCisjOiBzcmMvZmlsZXMuYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gb3ZlcndyaXRlIHRoZSBpbnB1dCBmaWxlICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9maWxlcy5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdGluZyBvdXRwdXRzIHRvIGZpbGUgJXMiCittc2dzdHIgImllumlyaSDubiBjb25mbGljdCDubiBmabppZXJ1bCAlcyIKKworIzogc3JjL2dldGFyZ3MuYzoyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5IGAlcyAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIgorbXNnc3RyICLObmNlcmNh/mkgYCVzIC0taGVscCcgcGVudHJ1IGluZm9ybWH+aWkgc3VwbGltZW50YXJlLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgW09QVElPTl0uLi4gRklMRVxuIgorbXNnc3RyICJGb2xvc2lyZTogJXMgW09Q3klVTkVdLi4uIEZJqklFUlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwMgorbXNnaWQgIiIKKyJHZW5lcmF0ZSBhIGRldGVybWluaXN0aWMgTFIgb3IgZ2VuZXJhbGl6ZWQgTFIgKEdMUikgcGFyc2VyIGVtcGxveWluZ1xuIgorIkxBTFIoMSksIElFTFIoMSksIG9yIGNhbm9uaWNhbCBMUigxKSBwYXJzZXIgdGFibGVzLiAgSUVMUigxKSBhbmRcbiIKKyJjYW5vbmljYWwgTFIoMSkgc3VwcG9ydCBpcyBleHBlcmltZW50YWwuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozMDkKK21zZ2lkICIiCisiTWFuZGF0b3J5IGFyZ3VtZW50cyB0byBsb25nIG9wdGlvbnMgYXJlIG1hbmRhdG9yeSBmb3Igc2hvcnQgb3B0aW9ucyB0b28uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozMTIKK21zZ2lkICJUaGUgc2FtZSBpcyB0cnVlIGZvciBvcHRpb25hbCBhcmd1bWVudHMuXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozMTYKK21zZ2lkICIiCisiXG4iCisiT3BlcmF0aW9uIG1vZGVzOlxuIgorIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKKyIgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCisiICAgICAgLS1wcmludC1sb2NhbGVkaXIgICAgICBvdXRwdXQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgbG9jYWxlLWRlcGVuZGVudCAiCisiZGF0YVxuIgorIiAgICAgIC0tcHJpbnQtZGF0YWRpciAgICAgICAgb3V0cHV0IGRpcmVjdG9yeSBjb250YWluaW5nIHNrZWxldG9ucyBhbmQgWFNMVFxuIgorIiAgLXksIC0teWFjYyAgICAgICAgICAgICAgICAgZW11bGF0ZSBQT1NJWCBZYWNjXG4iCisiICAtVywgLS13YXJuaW5nc1s9Q0FURUdPUlldICByZXBvcnQgdGhlIHdhcm5pbmdzIGZhbGxpbmcgaW4gQ0FURUdPUllcbiIKKyIgIC1mLCAtLWZlYXR1cmVbPUZFQVRVUkVdICAgIGFjdGl2YXRlIG1pc2NlbGxhbmVvdXMgZmVhdHVyZXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjMyOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnNlcjpcbiIKKyIgIC1MLCAtLWxhbmd1YWdlPUxBTkdVQUdFICAgICAgICAgIHNwZWNpZnkgdGhlIG91dHB1dCBwcm9ncmFtbWluZyBsYW5ndWFnZVxuIgorIiAgLVMsIC0tc2tlbGV0b249RklMRSAgICAgICAgICAgICAgc3BlY2lmeSB0aGUgc2tlbGV0b24gdG8gdXNlXG4iCisiICAtdCwgLS1kZWJ1ZyAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50IHRoZSBwYXJzZXIgZm9yIGRlYnVnZ2luZ1xuIgorIiAgICAgIC0tbG9jYXRpb25zICAgICAgICAgICAgICAgICAgZW5hYmxlIGxvY2F0aW9uIHN1cHBvcnRcbiIKKyIgIC1ELCAtLWRlZmluZT1OQU1FWz1WQUxVRV0gICAgICAgIHNpbWlsYXIgdG8gJyVkZWZpbmUgTkFNRSBcIlZBTFVFXCInXG4iCisiICAtRiwgLS1mb3JjZS1kZWZpbmU9TkFNRVs9VkFMVUVdICBvdmVycmlkZSAnJWRlZmluZSBOQU1FIFwiVkFMVUVcIidcbiIKKyIgIC1wLCAtLW5hbWUtcHJlZml4PVBSRUZJWCAgICAgICAgIHByZXBlbmQgUFJFRklYIHRvIHRoZSBleHRlcm5hbCBzeW1ib2xzXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXByZWNhdGVkIGJ5ICctRGFwaS5wcmVmaXg9UFJFRklYJ1xuIgorIiAgLWwsIC0tbm8tbGluZXMgICAgICAgICAgICAgICAgICAgZG9uJ3QgZ2VuZXJhdGUgJyNsaW5lJyBkaXJlY3RpdmVzXG4iCisiICAtaywgLS10b2tlbi10YWJsZSAgICAgICAgICAgICAgICBpbmNsdWRlIGEgdGFibGUgb2YgdG9rZW4gbmFtZXNcbiIKK21zZ3N0ciAiIgorIlBhcnNlcjpcbiIKKyIgIC1TLCAtLXNrZWxldG9uPUZJqklFUiAgICAgIHNwZWNpZmlj4yBzY2hlbGV0dWwgZGUgZm9sb3NpdFxuIgorIiAgLXQsIC0tZGVidWcgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGVheuMgcGFyc2VydWwgcGVudHJ1IGRlcGFuYXJlXG4iCisiICAgICAgLS1sb2NhdGlvbnMgICAgICAgICAgICBhY3RpdmVheuMgY2FsY3VsdWwgbG9jYf5paWxvclxuIgorIiAgLXAsIC0tbmFtZS1wcmVmaXg9UFJFRklYICAgcHVuZSBwcmVmaXggUFJFRklYIGxhIHNpbWJvbHVyaWxlIGV4dGVybmVcbiIKKyIgIC1sLCAtLW5vLWxpbmVzICAgICAgICAgICAgIG51IGdlbmVyYSBkaXJlY3RpdmUgYCNsaW5lJ1xuIgorIiAgLW4sIC0tbm8tcGFyc2VyICAgICAgICAgICAgZ2VuZXJlYXrjIG51bWFpIHRhYmVsZWxlXG4iCisiICAtaywgLS10b2tlbi10YWJsZSAgICAgICAgICBpbmNsdWRlIHVuIHRhYmVsIGN1IG51bWUgZGUgZWxlbWVudGVcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNDYKKyMsIGZ1enp5Cittc2dpZCAiIgorIk91dHB1dDpcbiIKKyIgICAgICAtLWRlZmluZXNbPUZJTEVdICAgICAgIGFsc28gcHJvZHVjZSBhIGhlYWRlciBmaWxlXG4iCisiICAtZCAgICAgICAgICAgICAgICAgICAgICAgICBsaWtld2lzZSBidXQgY2Fubm90IHNwZWNpZnkgRklMRSAoZm9yIFBPU0lYICIKKyJZYWNjKVxuIgorIiAgLXIsIC0tcmVwb3J0PVRISU5HUyAgICAgICAgYWxzbyBwcm9kdWNlIGRldGFpbHMgb24gdGhlIGF1dG9tYXRvblxuIgorIiAgICAgIC0tcmVwb3J0LWZpbGU9RklMRSAgICAgd3JpdGUgcmVwb3J0IHRvIEZJTEVcbiIKKyIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIHNhbWUgYXMgYC0tcmVwb3J0PXN0YXRlJ1xuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg9UFJFRklYICAgc3BlY2lmeSBhIFBSRUZJWCBmb3Igb3V0cHV0IGZpbGVzXG4iCisiICAtbywgLS1vdXRwdXQ9RklMRSAgICAgICAgICBsZWF2ZSBvdXRwdXQgdG8gRklMRVxuIgorIiAgLWcsIC0tZ3JhcGhbPUZJTEVdICAgICAgICAgYWxzbyBvdXRwdXQgYSBncmFwaCBvZiB0aGUgYXV0b21hdG9uXG4iCisiICAteCwgLS14bWxbPUZJTEVdICAgICAgICAgICBhbHNvIG91dHB1dCBhbiBYTUwgcmVwb3J0IG9mIHRoZSBhdXRvbWF0b25cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGUgWE1MIHNjaGVtYSBpcyBleHBlcmltZW50YWwpXG4iCittc2dzdHIgIiIKKyJJZbppcmU6XG4iCisiICAtZCwgLS1kZWZpbmVzICAgICAgICAgICAgICBjcmVheuMgumkgdW4gZmm6aWVyIGhlYWRlclxuIgorIiAgLXIsIC0tcmVwb3J0PUxVQ1JVUkkgICAgICAgY3JlYXrjILppIGRldGFsaWkgZGVzcHJlIGF1dG9tYXRvblxuIgorIiAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgbGEgZmVsIGNhIGAtLXJlcG9ydD1zdGF0ZSdcbiIKKyIgIC1iLCAtLWZpbGUtcHJlZml4PVBSRUZJWCAgIHNwZWNpZmlj4yB1biBQUkVGSVggcGVudHJ1IGZpumllcmVsZSBpZbppcmVcbiIKKyIgIC1vLCAtLW91dHB1dD1GSapJRVIgICAgICAgIGNyZWF64yBpZbppcmUg7m4gRkmqSUVSXG4iCisiICAtZywgLS1ncmFwaCAgICAgICAgICAgICAgICBjcmVheuMgumkgbyBkZXNjcmllcmUgVkNHIGEgYXV0b21hdG9uLXVsdWlcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNjEKK21zZ2lkICIiCisiV2FybmluZyBjYXRlZ29yaWVzIGluY2x1ZGU6XG4iCisiICBgbWlkcnVsZS12YWx1ZXMnICB1bnNldCBvciB1bnVzZWQgbWlkcnVsZSB2YWx1ZXNcbiIKKyIgIGB5YWNjJyAgICAgICAgICAgIGluY29tcGF0aWJpbGl0aWVzIHdpdGggUE9TSVggWWFjY1xuIgorIiAgYGNvbmZsaWN0cy1zcicgICAgUy9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGNvbmZsaWN0cy1ycicgICAgUi9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGRlcHJlY2F0ZWQnICAgICAgb2Jzb2xldGUgY29uc3RydWN0c1xuIgorIiAgYG90aGVyJyAgICAgICAgICAgYWxsIG90aGVyIHdhcm5pbmdzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgYWxsJyAgICAgICAgICAgICBhbGwgdGhlIHdhcm5pbmdzXG4iCisiICBgbm8tQ0FURUdPUlknICAgICB0dXJuIG9mZiB3YXJuaW5ncyBpbiBDQVRFR09SWVxuIgorIiAgYG5vbmUnICAgICAgICAgICAgdHVybiBvZmYgYWxsIHRoZSB3YXJuaW5nc1xuIgorIiAgYGVycm9yJyAgICAgICAgICAgdHJlYXQgd2FybmluZ3MgYXMgZXJyb3JzXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozNzYKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRISU5HUyBpcyBhIGxpc3Qgb2YgY29tbWEgc2VwYXJhdGVkIHdvcmRzIHRoYXQgY2FuIGluY2x1ZGU6XG4iCisiICBgc3RhdGUnICAgICAgICBkZXNjcmliZSB0aGUgc3RhdGVzXG4iCisiICBgaXRlbXNldCcgICAgICBjb21wbGV0ZSB0aGUgY29yZSBpdGVtIHNldHMgd2l0aCB0aGVpciBjbG9zdXJlXG4iCisiICBgbG9va2FoZWFkJyAgICBleHBsaWNpdGx5IGFzc29jaWF0ZSBsb29rYWhlYWQgdG9rZW5zIHRvIGl0ZW1zXG4iCisiICBgc29sdmVkJyAgICAgICBkZXNjcmliZSBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIHNvbHZpbmdcbiIKKyIgIGBhbGwnICAgICAgICAgIGluY2x1ZGUgYWxsIHRoZSBhYm92ZSBpbmZvcm1hdGlvblxuIgorIiAgYG5vbmUnICAgICAgICAgZGlzYWJsZSB0aGUgcmVwb3J0XG4iCittc2dzdHIgIiIKKyJMVUNSVVJJIGVzdGUgbyBsaXN04yBkZSBjdXZpbnRlIHNlcGFyYXRlIGRlIHZpcmd1bOMgY2UgcG90IGZpOlxuIgorIiAgYHN0YXRlJyAgICAgICAgZGVzY3JpZSBzdONyaWxlXG4iCisiICBgaXRlbXNldCcgICAgICBjb21wbGV0ZWF64yBzZXR1cmlsZSBkZSBlbGVtZW50ZSBudWNsZXUgY3Ug7m5jaGlkZXJlYSBsb3JcbiIKKyIgIGBsb29rLWFoZWFkJyAgIGFzb2NpYXrjIGV4cGxpY2l0IGxvb2thaGVhZHMgbGEgZWxlbWVudGVcbiIKKyIgIGBzb2x2ZWQnICAgICAgIGRlc2NyaWUgcmV6b2x2YXJlYSBjb25mbGljdGVsb3Igc2hpZnQvcmVkdWNlXG4iCisiICBgYWxsJyAgICAgICAgICBpbmNsdWRlIHRvYXTjIGluZm9ybWH+aWEgZGUgbWFpIHN1c1xuIgorIiAgYG5vbmUnICAgICAgICAgZGVhY3RpdmVheuMgcmFwb3J0YXJlYVxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM4NworbXNnaWQgIiIKKyJGRUFUVVJFIGlzIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMgdGhhdCBjYW4gaW5jbHVkZTpcbiIKKyIgIGBjYXJldCcgICAgICAgIHNob3cgZXJyb3JzIHdpdGggY2FyZXRzXG4iCisiICBgYWxsJyAgICAgICAgICBhbGwgb2YgdGhlIGFib3ZlXG4iCisiICBgbm9uZScgICAgICAgICBkaXNhYmxlIGFsbCBvZiB0aGUgYWJvdmVcbiIKKyIgICIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKK21zZ3N0ciAiUmFwb3J0Yf5pIGJ1Zy11cmkgbGEgPGJ1Zy1iaXNvbkBnbnUub3JnPi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaG9tZSBwYWdlOiA8JXM+LlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk3Cittc2dpZCAiR2VuZXJhbCBoZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4uXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IFJlcGxhY2UgTEFOR19DT0RFIGluIHRoaXMgVVJMIHdpdGggeW91ciBsYW5ndWFnZQorIy4gY29kZSA8aHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS9MQU5HX0NPREUuaHRtbD4gdG8KKyMuIGZvcm0gb25lIG9mIHRoZSBVUkxzIGF0IGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vLgorIy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRoZSBlbnRpcmUgVVJMIHdpdGggeW91ciB0cmFuc2xhdGlvbiB0ZWFtJ3MKKyMuIGVtYWlsIGFkZHJlc3MuCisjOiBzcmMvZ2V0YXJncy5jOjQxMAorbXNnaWQgIlJlcG9ydCB0cmFuc2xhdGlvbiBidWdzIHRvIDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtLz4uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzo0MTIKK21zZ2lkICJGb3IgY29tcGxldGUgZG9jdW1lbnRhdGlvbiwgcnVuOiBpbmZvIGJpc29uLlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImJpc29uIChHTlUgQmlzb24pICVzIgorbXNnc3RyICJiaXNvbiAoR05VIEJpc29uKSAlcyIKKworIzogc3JjL2dldGFyZ3MuYzo0MzAKK21zZ2lkICJXcml0dGVuIGJ5IFJvYmVydCBDb3JiZXR0IGFuZCBSaWNoYXJkIFN0YWxsbWFuLlxuIgorbXNnc3RyICJTY3JpcyBkZSBSb2JlcnQgQ29yYmV0dCC6aSBSaWNoYXJkIFN0YWxsbWFuLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3B5cmlnaHQgKEMpICVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorbXNnc3RyICJDb3B5cmlnaHQgKEMpICVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQzNworbXNnaWQgIiIKKyJUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOT1xuIgorIndhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLlxuIgorbXNnc3RyICIiCisiQWNlc3RhIGVzdGUgc29mdHdhcmUgbGliZXI7IHZlZGX+aSBjb2R1bCBzdXJz4yBwZW50cnUgY29uZGn+aWkgZGVzcHJlICIKKyJjb3BpZXJlLlxuIgorIk51IGV4aXN04yBuaWNpIG8gZ2FyYW7+aWU7IG5pY2kgY2hpYXIgcGVudHJ1IENPTUVSQ0lBTElaQVJFIHNhdSBkZSAiCisiUE9UUklWSVJFXG4iCisiUEVOVFJVIFVOIFNDT1AgQU5VTUUuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDU4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSBza2VsZXRvbiBkZWNsYXJhdGlvbnMgYXJlIGludmFsaWQiCittc2dzdHIgImRlY2xhcmH+aWkgJXMgbXVsdGlwbGUiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBsYW5ndWFnZSIKK21zZ3N0ciAidmFsb2FyZSBpbnZhbGlk4zogJXMiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDc5CisjLCBmdXp6eQorbXNnaWQgIm11bHRpcGxlIGxhbmd1YWdlIGRlY2xhcmF0aW9ucyBhcmUgaW52YWxpZCIKK21zZ3N0ciAiZGVjbGFyYf5paSAlcyBtdWx0aXBsZSIKKworIzogc3JjL2dldGFyZ3MuYzo3NDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBtaXNzaW5nIG9wZXJhbmQiCittc2dzdHIgIm9wZXJhdG9yIGxpcHPjIGR1cOMgYCVzJyIKKworIzogc3JjL2dldGFyZ3MuYzo3NDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImV4dHJhIG9wZXJhbmQgJXMiCittc2dzdHIgImV4dHJhIG9wZXJhdG9yIGAlcyciCisKKyM6IHNyYy9ncmFtLmM6MTEyCittc2dpZCAiZW1wdHkiCittc2dzdHIgImdvbGW6dGUiCisKKyM6IHNyYy9ncmFtLmM6MjAxCittc2dpZCAiR3JhbW1hciIKK21zZ3N0ciAiR3JhbWF0aWPjIgorCisjOiBzcmMvZ3JhcGh2aXouYzo0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiLy8gR2VuZXJhdGVkIGJ5ICVzLlxuIgorIi8vIFJlcG9ydCBidWdzIHRvIDwlcz4uXG4iCisiLy8gSG9tZSBwYWdlOiA8JXM+LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9sb2NhdGlvbi5jOjkzIHNyYy9zY2FuLWdyYW0ubDo4NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSBudW1iZXIgb3ZlcmZsb3ciCittc2dzdHIgIiIKKworIzogc3JjL2xvY2F0aW9uLmM6OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29sdW1uIG51bWJlciBvdmVyZmxvdyIKK21zZ3N0ciAiIgorCisjOiBzcmMvbWFpbi5jOjE0NgorIywgZnV6enkKK21zZ2lkICJydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHMiCittc2dzdHIgInJlZ3VsYSBudSBlc3RlIHJlZHVz4yBuaWNpb2RhdOMgZGluIGNhdXphIGNvbmZsaWN0ZWxvciIKKworIzogc3JjL211c2NsZS10YWIuYzo0NTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiUlZGVmaW5lIHZhcmlhYmxlICVzIHJlZGVmaW5lZCIKK21zZ3N0ciAic2ltYm9sICVzIHJlZGVmaW5pdCIKKworIzogc3JjL211c2NsZS10YWIuYzo0NTMKK21zZ2lkICJwcmV2aW91cyBkZWZpbml0aW9uIgorbXNnc3RyICIiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NDkwIHNyYy9tdXNjbGUtdGFiLmM6NTA0IHNyYy9tdXNjbGUtdGFiLmM6NTU2CisjOiBzcmMvbXVzY2xlLXRhYi5jOjYyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5kZWZpbmVkICUlZGVmaW5lIHZhcmlhYmxlICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICUlZGVmaW5lIEJvb2xlYW4gdmFyaWFibGUgJXMiCittc2dzdHIgIiIKKworIzogc3JjL211c2NsZS10YWIuYzo2MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJSVkZWZpbmUgdmFyaWFibGUgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjEzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJhY2NlcHRlZCB2YWx1ZTogJXMiCittc2dzdHIgInZhbG9hcmUgaW52YWxpZOM6ICVzIgorCisjOiBzcmMvcGFyc2UtZ3JhbS55Ojc0NworIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGlkZW50aWZpZXIgaW4gcGFyYW1ldGVyIGRlY2xhcmF0aW9uIgorbXNnc3RyICJpZGVudGlmaWNhdG9yIGxpcHPjIO5uIGRlY2xhcmH+aWEgcGFyYW1ldHJ1bHVpIgorCisjOiBzcmMvcHJpbnQuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICIgdHlwZSAlZCBpcyAlc1xuIgorbXNnc3RyICIgdGlwdWwgJWQgZXN0ZSAlc1xuIgorCisjOiBzcmMvcHJpbnQuYzoxNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAlZFxuIgorbXNnc3RyICJzaGlmdCwgumkgbWVyZ2kg7m4gc3RhcmVhICVkXG4iCisKKyM6IHNyYy9wcmludC5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJnbyB0byBzdGF0ZSAlZFxuIgorbXNnc3RyICJtZXJnaSDubiBzdGFyZWEgJWRcbiIKKworIzogc3JjL3ByaW50LmM6MjAzCittc2dpZCAiZXJyb3IgKG5vbmFzc29jaWF0aXZlKVxuIgorbXNnc3RyICJlcm9hcmUgKG5lLWFzb2NpYXRpdml0YXRlKVxuIgorCisjOiBzcmMvcHJpbnQuYzoyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkdWNlIHVzaW5nIHJ1bGUgJWQgKCVzKSIKK21zZ3N0ciAicmVkdWNlIGZvbG9zaW5kIHJlZ3VsYSAlZCAoJXMpIgorCisjOiBzcmMvcHJpbnQuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWNjZXB0IgorbXNnc3RyICJhY2NlcHQiCisKKyM6IHNyYy9wcmludC5jOjI2NCBzcmMvcHJpbnQuYzozMzgKK21zZ2lkICIkZGVmYXVsdCIKK21zZ3N0ciAiJGltcGxpY2l0IgorCisjOiBzcmMvcHJpbnQuYzozNzMgc3JjL3ByaW50X2dyYXBoLmM6NzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlN0YXRlICVkIgorbXNnc3RyICJTdGFyZSAlZCIKKworIzogc3JjL3ByaW50LmM6NDA5Cittc2dpZCAiVGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyIgorbXNnc3RyICJUZXJtaW5hbGUsIGN1IHJlZ3VsaSBhY29sbyB1bmRlIGFjZXN0ZWEgYXBhciIKKworIzogc3JjL3ByaW50LmM6NDM2Cittc2dpZCAiTm9udGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyIgorbXNnc3RyICJOb24tdGVybWluYWxlLCBjdSByZWd1bGkgYWNvbG8gdW5kZSBhY2VzdGVhIGFwYXIiCisKKyM6IHNyYy9wcmludC5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICIgb24gbGVmdDoiCittc2dzdHIgIiBwZSBzdOJuZ2E6IgorCisjOiBzcmMvcHJpbnQuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uIHJpZ2h0OiIKK21zZ3N0ciAiIHBlIGRyZWFwdGE6IgorCisjOiBzcmMvcHJpbnQuYzo1MTAKKyMsIGZ1enp5Cittc2dpZCAiUnVsZXMgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cyIKK21zZ3N0ciAicmVndWxhIG51IGVzdGUgcmVkdXPjIG5pY2lvZGF04yBkaW4gY2F1emEgY29uZmxpY3RlbG9yIgorCisjOiBzcmMvcmVhZGVyLmM6NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgJXMgZGVjbGFyYXRpb25zIgorbXNnc3RyICJkZWNsYXJh/mlpICVzIG11bHRpcGxlIgorCisjOiBzcmMvcmVhZGVyLmM6MTMzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJyZXN1bHQgdHlwZSBjbGFzaCBvbiBtZXJnZSBmdW5jdGlvbiAlczogPCVzPiAhPSA8JXM+IgorbXNnc3RyICIiCisidGlwdWwgcmV6dWx0YXR1bHVpIO5uIGNvbmZsaWN0IGN1IGZ1bmP+aWEgZGUgY29tYmluYXJlICVzOiA8JXM+ICE9IDwlcz4iCisKKyM6IHNyYy9yZWFkZXIuYzoxMzkgc3JjL3N5bXRhYi5jOjE1NiBzcmMvc3ltdGFiLmM6MTY2IHNyYy9zeW10YWIuYzo5MzgKKyM6IHNyYy9zeW10YWIuYzo5NTMgc3JjL3N5bXRhYi5jOjk2OCBzcmMvc3ltdGFiLmM6OTgzCisjLCBmdXp6eQorbXNnaWQgInByZXZpb3VzIGRlY2xhcmF0aW9uIgorbXNnc3RyICJwcmltYSBkZWNsYXJh/mllIgorCisjOiBzcmMvcmVhZGVyLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZWQgc3ltYm9sIG5hbWUgZm9yICVzIGlnbm9yZWQiCittc2dzdHIgIiIKKworIzogc3JjL3JlYWRlci5jOjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICJydWxlIGdpdmVuIGZvciAlcywgd2hpY2ggaXMgYSB0b2tlbiIKK21zZ3N0ciAicmVndWxhIGRhdOMgcGVudHJ1ICVzLCBjYXJlIGVzdGUgdW4gZWxlbWVudCAodG9rZW4pIgorCisjOiBzcmMvcmVhZGVyLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgInR5cGUgY2xhc2ggb24gZGVmYXVsdCBhY3Rpb246IDwlcz4gIT0gPCVzPiIKK21zZ3N0ciAiY29uZmxpY3QgZGUgdGlwIHBlbnRydSBhY/5pdW5lYSBpbXBsaWNpdOM6IDwlcz4gIT0gPCVzPiIKKworIzogc3JjL3JlYWRlci5jOjMxMAorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBydWxlIGZvciB0eXBlZCBub250ZXJtaW5hbCwgYW5kIG5vIGFjdGlvbiIKK21zZ3N0ciAicmVndWzjIHZpZOMgcGVudHJ1IG5vbnRlcm1pbmFsIGN1IHRpcCwgumkgbmljaSBvIGFj/ml1bmUiCisKKyM6IHNyYy9yZWFkZXIuYzozMjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVudXNlZCB2YWx1ZTogJCVkIgorbXNnc3RyICJ2YWxvYXJlIGludmFsaWTjOiAlcyIKKworIzogc3JjL3JlYWRlci5jOjMzMAorbXNnaWQgInVuc2V0IHZhbHVlOiAkJCIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVhZGVyLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgInRva2VuIGZvciAlJXByZWMgaXMgbm90IGRlZmluZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzo0MzEgc3JjL3JlYWRlci5jOjQ0NSBzcmMvcmVhZGVyLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgb25lICVzIGFsbG93ZWQgcGVyIHJ1bGUiCittc2dzdHIgInVuIHNpbmd1ciAlcyBwZXJtaXMgcGUgZmllY2FyZSByZWd1bOMiCisKKyM6IHNyYy9yZWFkZXIuYzo0NDEgc3JjL3JlYWRlci5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhZmZlY3RzIG9ubHkgR0xSIHBhcnNlcnMiCittc2dzdHIgIiVzIGFmZWN0ZWF64yBudW1haSBwYXJzZXJlIEdMUiIKKworIzogc3JjL3JlYWRlci5jOjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBtdXN0IGJlIGZvbGxvd2VkIGJ5IHBvc2l0aXZlIG51bWJlciIKK21zZ3N0ciAiJXMgdHJlYnVpZSBz4yBmaWUgdXJtYXQgZGUgbnVtZXJlIHBveml0aXZlIgorCisjOiBzcmMvcmVhZGVyLmM6NTU0CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bGUgaXMgdG9vIGxvbmciCittc2dzdHIgIiIKKworIzogc3JjL3JlYWRlci5jOjY3MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBydWxlcyBpbiB0aGUgaW5wdXQgZ3JhbW1hciIKK21zZ3N0ciAibmljaSBvIHJlZ3Vs4yDubiBncmFtYXRpY2EgZnVybml6YXTjIgorCisjOiBzcmMvcmVkdWNlLmM6MjQxCisjLCBmdXp6eQorbXNnaWQgInJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyICJuaWNpIG8gcmVndWzjIO5uIGdyYW1hdGljYSBmdXJuaXphdOMiCisKKyM6IHNyYy9yZWR1Y2UuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVkdWNlLmM6MzUwCisjLCBmdXp6eQorbXNnaWQgIk5vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgIk5vbi10ZXJtaW5hbGUsIGN1IHJlZ3VsaSBhY29sbyB1bmRlIGFjZXN0ZWEgYXBhciIKKworIzogc3JjL3JlZHVjZS5jOjM2MworIywgZnV6enkKK21zZ2lkICJUZXJtaW5hbHMgdW51c2VkIGluIGdyYW1tYXIiCittc2dzdHIgIm5pY2kgbyByZWd1bOMg7m4gZ3JhbWF0aWNhIGZ1cm5pemF04yIKKworIzogc3JjL3JlZHVjZS5jOjM3MgorIywgZnV6enkKK21zZ2lkICJSdWxlcyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgIm5pY2kgbyByZWd1bOMg7m4gZ3JhbWF0aWNhIGZ1cm5pemF04yIKKworIzogc3JjL3JlZHVjZS5jOjM4NQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dpZF9wbHVyYWwgIiVkIG5vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBzcmMvcmVkdWNlLmM6MzkwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlZCBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ2lkX3BsdXJhbCAiJWQgcnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyWzBdICJuaWNpIG8gcmVndWzjIO5uIGdyYW1hdGljYSBmdXJuaXphdOMiCittc2dzdHJbMV0gIm5pY2kgbyByZWd1bOMg7m4gZ3JhbWF0aWNhIGZ1cm5pemF04yIKKworIzogc3JjL3JlZHVjZS5jOjQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydCBzeW1ib2wgJXMgZG9lcyBub3QgZGVyaXZlIGFueSBzZW50ZW5jZSIKK21zZ3N0ciAic2ltYm9sIGRlIHN0YXJ0ICVzIG51IGRlcml2ZWF64yBuaWNpIG8gcHJvcG96af5pZSIKKworIzogc3JjL3NjYW4tY29kZS5sOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJheSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyMjkKK21zZ2lkICJhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZSIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjMyCittc2dpZCAiZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNlIG9mIFlZRkFJTCwgd2hpY2ggaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0MzEgc3JjL3NjYW4tY29kZS5sOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcnMgdG86ICVjJXMgYXQgJXMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NzaWJseSBtZWFudDogJWMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICIsIGhpZGluZyAlYyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiBhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiwgY2Fubm90IGJlIGFjY2Vzc2VkIGZyb20gbWlkLXJ1bGUgYWN0aW9uIGF0ICQlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NTIxIHNyYy9zY2FuLWdyYW0ubDo3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZWdlciBvdXQgb2YgcmFuZ2U6ICVzIgorbXNnc3RyICLubnRyZWcg7m4gYWZhcmEgZG9tZW5pdWx1aTogJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAiZGlyZWN0aXbjIGludmFsaWTjOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IgYWZ0ZXIgJyVjJywgZXhwZWN0aW5nIGludGVnZXIsIGxldHRlciwgJ18nLCAnWycsIG9yICckJyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbiBiZWZvcmUgJCVkOiAlLipzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiAlLipzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzbGVhZGluZyByZWZlcmVuY2U6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2NjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImFtYmlndW91cyByZWZlcmVuY2U6ICVzIgorbXNnc3RyICJhcmd1bWVudCBhbWJpZ3V1ICVzIHBlbnRydSAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJleHBsaWNpdCB0eXBlIGdpdmVuIGluIHVudHlwZWQgZ3JhbW1hciIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NzU5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIkJCBmb3IgdGhlIG1pZHJ1bGUgYXQgJCVkIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICIkJWQgYSBsdWkgYCVzJyBudSBhcmUgbmljaSB1biB0aXAgZGVjbGFyYXQiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3NjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiQkIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICIkJCBhIGx1aSBgJXMnIG51IGFyZSBuaWNpIHVuIHRpcCBkZWNsYXJhdCIKKworIzogc3JjL3NjYW4tY29kZS5sOjc4NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJCVzIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICIkJWQgYSBsdWkgYCVzJyBudSBhcmUgbmljaSB1biB0aXAgZGVjbGFyYXQiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoxNDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN0cmF5ICcsJyB0cmVhdGVkIGFzIHdoaXRlIHNwYWNlIgorbXNnc3RyICJWaXJndWzjIGAsJyBy43TjY2l04yB0cmF0YXTjIGNhIHNwYf5pdSBnb2wiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBkaXJlY3RpdmU6ICVzIgorbXNnc3RyICJkaXJlY3RpduMgaW52YWxpZOM6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MjUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50aWZpZXI6ICVzIgorbXNnc3RyICJkaXJlY3RpduMgaW52YWxpZOM6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6Mjk1CisjLCBmdXp6eQorbXNnaWQgImludmFsaWQgY2hhcmFjdGVyIgorbXNnaWRfcGx1cmFsICJpbnZhbGlkIGNoYXJhY3RlcnMiCittc2dzdHJbMF0gImNhcmFjdGVyIGludmFsaWQ6ICVzIgorbXNnc3RyWzFdICJjYXJhY3RlciBpbnZhbGlkOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGlkZW50aWZpZXIgaW4gYnJhY2tldGVkIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW4gaWRlbnRpZmllciBleHBlY3RlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MzgxCisjLCBmdXp6eQorbXNnaWQgImludmFsaWQgY2hhcmFjdGVyIGluIGJyYWNrZXRlZCBuYW1lIgorbXNnaWRfcGx1cmFsICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gYnJhY2tldGVkIG5hbWUiCittc2dzdHJbMF0gImNhcmFjdGVyIGludmFsaWQ6ICVzIgorbXNnc3RyWzFdICJjYXJhY3RlciBpbnZhbGlkOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjQ4MSBzcmMvc2Nhbi1ncmFtLmw6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGNoYXJhY3RlciBsaXRlcmFsIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo0ODYgc3JjL3NjYW4tZ3JhbS5sOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJleHRyYSBjaGFyYWN0ZXJzIGluIGNoYXJhY3RlciBsaXRlcmFsIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudWxsIGNoYXJhY3RlciIKK21zZ3N0ciAiY2FyYWN0ZXIgbnVsbCBpbnZhbGlkIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NTMxIHNyYy9zY2FuLWdyYW0ubDo1NDEgc3JjL3NjYW4tZ3JhbS5sOjU2MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgYWZ0ZXIgXFwtZXNjYXBlOiAlcyIKK21zZ3N0ciAiY2FyYWN0ZXIgbnVsbCBpbnZhbGlkOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjU3MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgXFwtZXNjYXBlOiAlcyIKK21zZ3N0ciAiY2FyYWN0ZXIgaW52YWxpZDogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo5MDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgJXMgYXQgZW5kIG9mIGZpbGUiCittc2dzdHIgImAlcycgbGlwc+MgbGEgc2bicrppdHVsIGZpumllcnVsdWkiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo5MTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgJXMgYXQgZW5kIG9mIGxpbmUiCittc2dzdHIgImAlcycgbGlwc+MgbGEgc2bicrppdHVsIGxpbmllaSIKKworIzogc3JjL3NjYW4tc2tlbC5sOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmNsb3NlZCAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tc2tlbC5sOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gZmV3IGFyZ3VtZW50cyBmb3IgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGZvciAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iCittc2dzdHIgIiIKKworIzogc3JjL3N5bWxpc3QuYzoyMTEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJCB2YWx1ZTogJCVkIgorbXNnc3RyICJ2YWxvYXJlIGludmFsaWTjOiAlcyIKKworIzogc3JjL3N5bXRhYi5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlBPU0lYIFlhY2MgZm9yYmlkcyBkYXNoZXMgaW4gc3ltYm9sIG5hbWVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgc3ltYm9scyBpbiBpbnB1dCBncmFtbWFyIChsaW1pdCBpcyAlZCkiCittc2dzdHIgInByZWEgbXVsdGUgc2ltYm9sdXJpIO5uIGdyYW1hdGljYSBkZSBpbnRyYXJlIChsaW1pdGEgZXN0ZSAlZCkiCisKKyM6IHNyYy9zeW10YWIuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVkZWNsYXJhdGlvbiBmb3IgJXMiCittc2dzdHIgInJlZGVjbGFyYXJlICVzIHBlbnRydSAlcyIKKworIzogc3JjL3N5bXRhYi5jOjE2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVkZWNsYXJhdGlvbiBmb3IgPCVzPiIKK21zZ3N0ciAicmVkZWNsYXJhcmUgJXMgcGVudHJ1ICVzIgorCisjOiBzcmMvc3ltdGFiLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyByZWRlZmluZWQiCittc2dzdHIgInNpbWJvbCAlcyByZWRlZmluaXQiCisKKyM6IHNyYy9zeW10YWIuYzozNDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyByZWRlY2xhcmVkIgorbXNnc3RyICJzaW1ib2wgJXMgcmVkZWZpbml0IgorCisjOiBzcmMvc3ltdGFiLmM6MzY3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVmaW5pbmcgdXNlciB0b2tlbiBudW1iZXIgb2YgJXMiCittc2dzdHIgIm51beNydWwgZWxlbWVudHVsdWkgKHRva2VuKSBkZWZpbml0IGRlIHV0aWxpemF0b3IgcmVkZWZpbml0IHBlbnRydSAlcyIKKworIzogc3JjL3N5bXRhYi5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgaXMgdXNlZCwgYnV0IGlzIG5vdCBkZWZpbmVkIGFzIGEgdG9rZW4gYW5kIGhhcyBubyBydWxlcyIKK21zZ3N0ciAiIgorInNpbWJvbHVsICVzIGUgZm9sb3NpdCwgZGFyIG51IGVzdGUgZGVmaW5pdCBjYSBlbGVtZW50ICh0b2tlbikgumkgbnUgYXJlIG5pY2kgIgorIm8gcmVndWzjIgorCisjOiBzcmMvc3ltdGFiLmM6NDE1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgdXNlZCBtb3JlIHRoYW4gb25jZSBhcyBhIGxpdGVyYWwgc3RyaW5nIgorbXNnc3RyICJzaW1ib2x1bCBgJXMnIGVzdGUgZm9sb3NpdCBkZSBtYWkgbXVsdGUgb3JpIGNhILppciBsaXRlcmFyIgorCisjOiBzcmMvc3ltdGFiLmM6NDE4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgZ2l2ZW4gbW9yZSB0aGFuIG9uZSBsaXRlcmFsIHN0cmluZyIKK21zZ3N0ciAic2ltYm9sdWx1aSBgJXMnIO5pIGVzdGUgZGF0IG1haSBtdWx0IGRlIHVuIHNpbmd1ciC6aXIgbGl0ZXJhciIKKworIzogc3JjL3N5bXRhYi5jOjUzNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidXNlciB0b2tlbiBudW1iZXIgJWQgcmVkZWNsYXJhdGlvbiBmb3IgJXMiCittc2dzdHIgInJlZGVjbGFyYXJlICVzIHBlbnRydSAlcyIKKworIzogc3JjL3N5bXRhYi5jOjUzOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicHJldmlvdXMgZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICJyZWRlY2xhcmFyZSAlcyBwZW50cnUgJXMiCisKKyM6IHNyYy9zeW10YWIuYzo5MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHN0YXJ0IHN5bWJvbCAlcyBpcyB1bmRlZmluZWQiCittc2dzdHIgInNpbWJvbHVsIGRlIHN0YXJ0ICVzIG51IGVzdGUgZGVmaW5pdCIKKworIzogc3JjL3N5bXRhYi5jOjkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgc3RhcnQgc3ltYm9sICVzIGlzIGEgdG9rZW4iCittc2dzdHIgInNpbWJvbHVsIGRlIHN0YXJ0ICVzIGVzdGUgdW4gZWxlbWVudCAodG9rZW4pIgorCisjOiBzcmMvc3ltdGFiLmM6OTM1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICUlZGVzdHJ1Y3RvciIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnbGVzcyAlJWRlc3RydWN0b3IiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlJXByaW50ZXIiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjk4MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJSVwcmludGVyIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzo2MyBkamdwcC9zdWJwaXBlLmM6Mjg2IGRqZ3BwL3N1YnBpcGUuYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3Zpbmcgb2YgJyVzJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjg1IGRqZ3BwL3N1YnBpcGUuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGlvbiBvZiBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgInNhdmluZyBzdGRpbiBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJzYXZpbmcgc3Rkb3V0IGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTUzIGRqZ3BwL3N1YnBpcGUuYzoxOTcgZGpncHAvc3VicGlwZS5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nIG9mIHRtcGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgYmlzb24ncyBzdGRvdXQgdG8gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIG00J3Mgc3RkaW4gZnJvbSB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlbmluZyBvZiBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIG00J3Mgc3Rkb3V0IHRvIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSAnJXMnIGludGVycnVwdGVkIgorbXNnc3RyICJwcm9ncmFtdWwgYXV4aWxpYXIgYCVzJyBhIGW6dWF0IgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjQxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gJyVzJyBub3QgZm91bmQiCittc2dzdHIgInByb2dyYW11bCBhdXhpbGlhciBgJXMnIG51IGEgZm9zdCBn43NpdCIKKworIzogZGpncHAvc3VicGlwZS5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBiaXNvbidzIHN0ZGluIGZyb20gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCAlcyBmb3IgJXMiCittc2dzdHIgImFyZ3VtZW50IGludmFsaWQgJXMgcGVudHJ1ICVzIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIGFyZ3VtZW50ICVzIGZvciAlcyIKK21zZ3N0ciAiYXJndW1lbnQgYW1iaWd1dSAlcyBwZW50cnUgJXMiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjE1MworbXNnaWQgIlZhbGlkIGFyZ3VtZW50cyBhcmU6IgorbXNnc3RyICJBcmd1bWVudGUgdmFsaWRlIHN1bnQ6IgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9hbGxvY3MsICV1IGZyZWVkICglLjJmJSUpLlxuIgorbXNnc3RyICIldSBiaXRzZXRfYWxsb2NzLCAldSBlbGliZXJhdGUgKCUuMmYlJSkuXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3NldHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorbXNnc3RyICIldSBiaXRzZXRfc2V0cywgJXUgc3RvY2F0ZSAoY2FjaGVkKSAoJS4yZiUlKVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9yZXNldHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorbXNnc3RyICIldSBiaXRzZXRfcmVzZXRzLCAldSBzdG9jYXRlIChjYWNoZWQpICglLjJmJSUpXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3Rlc3RzLCAldSBjYWNoZWQgKCUuMmYlJSlcbiIKK21zZ3N0ciAiJXUgYml0c2V0X3Rlc3RzLCAldSBzdG9jYXRlIChjYWNoZWQpICglLjJmJSUpXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X2xpc3RzXG4iCittc2dzdHIgIiV1IGJpdHNldF9saXN0c1xuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTkyCittc2dpZCAiY291bnQgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICJudW3jcuMgaGlzdG9ncmFtYSBqdXJuYWxcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5NQorbXNnaWQgInNpemUgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICJkaW1lbnNpdW5lIGhpc3RvZ3JhbeMganVybmFsXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTgKK21zZ2lkICJkZW5zaXR5IGhpc3RvZ3JhbVxuIgorbXNnc3RyICJkZW5zaXRhdGUgaGlzdG9ncmFt41xuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCaXRzZXQgc3RhdGlzdGljczpcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlN0YXRpc3RpY2kgYml0c2V0OlxuIgorIlxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkFjY3VtdWxhdGVkIHJ1bnMgPSAldVxuIgorbXNnc3RyICJSdWzjcmkgYWN1bXVsYXRlID0gJXVcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI1OSBsaWIvYml0c2V0X3N0YXRzLmM6MjY0CisjLCBmdXp6eQorbXNnaWQgImNhbm5vdCByZWFkIHN0YXRzIGZpbGUiCittc2dzdHIgIk51IGFtIHB1dHV0IGNpdGkgZmm6aWVydWwgZGUgc3RhdGlzdGljaS4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyNjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImJhZCBzdGF0cyBmaWxlIHNpemVcbiIKK21zZ3N0ciAiRGltZW5zaXVuZSBmabppZXIgY3Ugc3RhdGlzdGljaSBpbmNvcmVjdOMuXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyODcgbGliL2JpdHNldF9zdGF0cy5jOjI4OQorIywgZnV6enkKK21zZ2lkICJjYW5ub3Qgd3JpdGUgc3RhdHMgZmlsZSIKK21zZ3N0ciAiTnUgYW0gcHV0dXQgc2NyaWUgZmm6aWVyIHN0YXRpc3RpY2kuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjkyCisjLCBmdXp6eQorbXNnaWQgImNhbm5vdCBvcGVuIHN0YXRzIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIk51IGFtIHB1dHV0IGRlc2NoaWRlIGZpumllcnVsIGRlIHN0YXRpc3RpY2kgcGVudHJ1IHNjcmllcmUuIgorCisjOiBsaWIvY2xvc2VvdXQuYzoxMTIKKyMsIGZ1enp5Cittc2dpZCAid3JpdGUgZXJyb3IiCittc2dzdHIgImVyb2FyZSBmYXRhbOM6ICIKKworIzogbGliL2Vycm9yLmM6MTg4Cittc2dpZCAiVW5rbm93biBzeXN0ZW0gZXJyb3IiCittc2dzdHIgIkVyb2FyZSBkZSBzaXN0ZW0gbmVjdW5vc2N1dOMiCisKKyM6IGxpYi9nZXRvcHQuYzo1NDcgbGliL2dldG9wdC5jOjU3NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnJXMnIGlzIGFtYmlndW91czsgcG9zc2liaWxpdGllczoiCittc2dzdHIgIiVzOiBvcP5pdW5lYSBgJXMnIGVzdGUgYW1iaWd141xuIgorCisjOiBsaWIvZ2V0b3B0LmM6NjI0IGxpYi9nZXRvcHQuYzo2MjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy0tJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IG9w/ml1bmVhIGAtLSVzJyBudSBwZXJtaXRlIHVuIGFyZ3VtZW50XG4iCisKKyM6IGxpYi9nZXRvcHQuYzo2MzcgbGliL2dldG9wdC5jOjY0MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnJWMlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogb3D+aXVuZWEgYCVjJXMnIG51IHBlcm1pdGUgdW4gYXJndW1lbnRcbiIKKworIzogbGliL2dldG9wdC5jOjY4NSBsaWIvZ2V0b3B0LmM6NzA0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctLSVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogb3D+aXVuZWEgYCVzJyBuZWNlc2l04yB1biBhcmd1bWVudFxuIgorCisjOiBsaWIvZ2V0b3B0LmM6NzQyIGxpYi9nZXRvcHQuYzo3NDUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uICctLSVzJ1xuIgorbXNnc3RyICIlczogb3D+aXVuZSBuZXJlY3Vub3NjdXTjIGAtLSVzJ1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6NzUzIGxpYi9nZXRvcHQuYzo3NTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uICclYyVzJ1xuIgorbXNnc3RyICIlczogb3D+aXVuZSBuZXJlY3Vub3NjdXTjIGAlYyVzJ1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6ODA1IGxpYi9nZXRvcHQuYzo4MDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIG9wdGlvbiAtLSAnJWMnXG4iCittc2dzdHIgIiVzOiBvcP5pdW5lIGlsZWdhbOMgLS0gJWNcbiIKKworIzogbGliL2dldG9wdC5jOjg2MSBsaWIvZ2V0b3B0LmM6ODc4IGxpYi9nZXRvcHQuYzoxMDg4IGxpYi9nZXRvcHQuYzoxMTA2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICclYydcbiIKK21zZ3N0ciAiJXM6IG9w/ml1bmVhIG5lY2VzaXTjIHVuIGFyZ3VtZW50IC0tICVjXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo5MzQgbGliL2dldG9wdC5jOjk1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLVcgJXMnIGlzIGFtYmlndW91c1xuIgorbXNnc3RyICIlczogb3D+aXVuZWEgYC1XICVzJyBlc3RlIGFtYmlndeNcbiIKKworIzogbGliL2dldG9wdC5jOjk3NCBsaWIvZ2V0b3B0LmM6OTkyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogb3D+aXVuZWEgYC1XICVzJyBudSBwZXJtaXRlIHVuIGFyZ3VtZW50XG4iCisKKyM6IGxpYi9nZXRvcHQuYzoxMDEzIGxpYi9nZXRvcHQuYzoxMDMxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IG9w/ml1bmVhIGAlcycgbmVjZXNpdOMgdW4gYXJndW1lbnRcbiIKKworIzogbGliL29ic3RhY2suYzo0MTMgbGliL29ic3RhY2suYzo0MTUgbGliL3hhbGxvYy1kaWUuYzozNAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIm1lbW9yaWUgZXB1aXphdOMiCisKKyM6IGxpYi9zcGF3bi1waXBlLmM6MTQwIGxpYi9zcGF3bi1waXBlLmM6MTQzIGxpYi9zcGF3bi1waXBlLmM6MjY0CisjOiBsaWIvc3Bhd24tcGlwZS5jOjI2NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBwaXBlIgorbXNnc3RyICJudSBwb3Qg7m5jaGlkZSBmabppZXJ1bCIKKworIzogbGliL3NwYXduLXBpcGUuYzoyMzQgbGliL3NwYXduLXBpcGUuYzozNDggbGliL3dhaXQtcHJvY2Vzcy5jOjI4MgorIzogbGliL3dhaXQtcHJvY2Vzcy5jOjM1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdWJwcm9jZXNzIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzoKKyMuIEdldCB0cmFuc2xhdGlvbnMgZm9yIG9wZW4gYW5kIGNsb3NpbmcgcXVvdGF0aW9uIG1hcmtzLgorIy4gVGhlIG1lc3NhZ2UgY2F0YWxvZyBzaG91bGQgdHJhbnNsYXRlICJgIiB0byBhIGxlZnQKKyMuIHF1b3RhdGlvbiBtYXJrIHN1aXRhYmxlIGZvciB0aGUgbG9jYWxlLCBhbmQgc2ltaWxhcmx5IGZvcgorIy4gIiciLiAgRm9yIGV4YW1wbGUsIGEgRnJlbmNoIFVuaWNvZGUgbG9jYWwgc2hvdWxkIHRyYW5zbGF0ZQorIy4gdGhlc2UgdG8gVSswMEFCIChMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRQorIy4gUVVPVEFUSU9OIE1BUkspLCBhbmQgVSswMEJCIChSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUKKyMuIFFVT1RBVElPTiBNQVJLKSwgcmVzcGVjdGl2ZWx5LgorIy4KKyMuIElmIHRoZSBjYXRhbG9nIGhhcyBubyB0cmFuc2xhdGlvbiwgd2Ugd2lsbCB0cnkgdG8KKyMuIHVzZSBVbmljb2RlIFUrMjAxOCAoTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspIGFuZAorIy4gVW5pY29kZSBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykuICBJZiB0aGUKKyMuIGN1cnJlbnQgbG9jYWxlIGlzIG5vdCBVbmljb2RlLCBsb2NhbGVfcXVvdGluZ19zdHlsZQorIy4gd2lsbCBxdW90ZSAnbGlrZSB0aGlzJywgYW5kIGNsb2NhbGVfcXVvdGluZ19zdHlsZSB3aWxsCisjLiBxdW90ZSAibGlrZSB0aGlzIi4gIFlvdSBzaG91bGQgYWx3YXlzIGluY2x1ZGUgdHJhbnNsYXRpb25zCisjLiBmb3IgImAiIGFuZCAiJyIgZXZlbiBpZiBVKzIwMTggYW5kIFUrMjAxOSBhcmUgYXBwcm9wcmlhdGUKKyMuIGZvciB5b3VyIGxvY2FsZS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFya3NfaW5fb3RoZXJfbGFuZ3VhZ2VzPgorIy4gYW5kIHVzZSBnbHlwaHMgc3VpdGFibGUgZm9yIHlvdXIgbGFuZ3VhZ2UuCisjOiBsaWIvcXVvdGVhcmcuYzozMTIKK21zZ2lkICJgIgorbXNnc3RyICJgIgorCisjOiBsaWIvcXVvdGVhcmcuYzozMTMKK21zZ2lkICInIgorbXNnc3RyICInIgorCisjOiBsaWIvdGltZXZhci5jOjQ3NQorbXNnaWQgIiIKKyJcbiIKKyJFeGVjdXRpb24gdGltZXMgKHNlY29uZHMpXG4iCittc2dzdHIgIiIKKyJcbiIKKyJUaW1wIGRlIGV4ZWN1/mllIChzZWN1bmRlKVxuIgorCisjOiBsaWIvdGltZXZhci5jOjUyNQorbXNnaWQgIiBUT1RBTCAgICAgICAgICAgICAgICAgOiIKK21zZ3N0ciAiIFRPVEFMICAgICAgICAgICAgICAgICA6IgorCisjOiBsaWIvdGltZXZhci5jOjU2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lIGluICVzOiAlbGQuJTA2bGQgKCVsZCUlKVxuIgorbXNnc3RyICJ0aW1wIO5uICVzOiAlbGQuJTA2bGQgKCVsZCUlKVxuIgorCisjOiBsaWIvdzMyc3Bhd24uaDo0MworIywgYy1mb3JtYXQKK21zZ2lkICJfb3Blbl9vc2ZoYW5kbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi93MzJzcGF3bi5oOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXN0b3JlIGZkICVkOiBkdXAyIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6MjIzIGxpYi93YWl0LXByb2Nlc3MuYzoyNTUgbGliL3dhaXQtcHJvY2Vzcy5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdWJwcm9jZXNzIgorbXNnc3RyICIiCisKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzoyNzQgbGliL3dhaXQtcHJvY2Vzcy5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdWJwcm9jZXNzIGdvdCBmYXRhbCBzaWduYWwgJWQiCittc2dzdHIgIiIKKworI34gbXNnaWQgInN0YXRlICVkIgorI34gbXNnc3RyICJzdGFyZSAlZCIKKworI34gbXNnaWQgIndhcm5pbmc6ICIKKyN+IG1zZ3N0ciAiYXZlcnRpc21lbnQ6ICIKKworI34gbXNnaWQgIkdOVSBiaXNvbiBnZW5lcmF0ZXMgcGFyc2VycyBmb3IgTEFMUigxKSBncmFtbWFycy5cbiIKKyN+IG1zZ3N0ciAiR05VIGJpc29uIGdlbmVyZWF64yBwYXJzZXJlIHBlbnRydSBncmFtYXRpY2kgTEFMUigxKS5cbiIKKworI34gbXNnaWQgIiIKKyN+ICJJZiBhIGxvbmcgb3B0aW9uIHNob3dzIGFuIGFyZ3VtZW50IGFzIG1hbmRhdG9yeSwgdGhlbiBpdCBpcyBtYW5kYXRvcnlcbiIKKyN+ICJmb3IgdGhlIGVxdWl2YWxlbnQgc2hvcnQgb3B0aW9uIGFsc28uICBTaW1pbGFybHkgZm9yIG9wdGlvbmFsIGFyZ3VtZW50cy5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIkRhY+MgbyBvcP5pdW5lIGx1bmfjIGFyYXTjIHVuIGFyZ3VtZW50IGNhIG5lY2VzYXIsIGF0dW5jaSBlbCBlc3RlICIKKyN+ICJuZWNlc2FyXG4iCisjfiAiumkgcGVudHJ1IG9w/ml1bmVhIHNjdXJ04yBlY2hpdmFsZW504y4gU2ltaWxhciBwZW50cnUgYXJndW1lbnRlbGUgIgorI34gIm9w/mlvbmFsZS5cbiIKKworI34gbXNnaWQgIiIKKyN+ICJPcGVyYXRpb24gbW9kZXM6XG4iCisjfiAiICAtaCwgLS1oZWxwICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKKyN+ICIgIC1WLCAtLXZlcnNpb24gICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorI34gIiAgLXksIC0teWFjYyAgICAgIGVtdWxhdGUgUE9TSVggeWFjY1xuIgorI34gbXNnc3RyICIiCisjfiAiTW9kdXJpIGRlIG9wZXJhcmU6XG4iCisjfiAiICAtaCwgLS1oZWxwICAgICAgYWZpumVheuMgYWNlc3QgbWVzYWogumkgdGVybWlu41xuIgorI34gIiAgLVYsIC0tdmVyc2lvbiAgIGFmabplYXrjIGluZm9ybWH+aWkgZGVzcHJlIHZlcnNpdW5lILppIHRlcm1pbuNcbiIKKyN+ICIgIC15LCAtLXlhY2MgICAgICBlbXVsZWF64yBQT1NJWCB5YWNjXG4iCisKKyN+IG1zZ2lkICJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIgorI34gbXNnc3RyICJlcm9hcmUgZGUgc2ludGF44zogbnUgcG90IGRhIO5uYXBvaSIKKworI34gbXNnaWQgIlN0YWNrIG5vdyIKKyN+IG1zZ3N0ciAiU3RpdmEgY3VyZW504yIKKworI34gbXNnaWQgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJXUpLCAiCisjfiBtc2dzdHIgIlN0aXbjIHJlZHVz4yBmb2xvc2luZCByZWd1bGEgJWQgKGxpbmlhICV1KSwgIgorCisjfiBtc2dpZCAicGFyc2VyIHN0YWNrIG92ZXJmbG93IgorI34gbXNnc3RyICJkZXDjc2lyZSBkZSBzdGl24yBwZW50cnUgcGFyc2VyIgorCisjfiBtc2dpZCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWx1XG4iCisjfiBtc2dzdHIgIkRpbWVuc2l1bmUgc3RpdmVpIGNyZXNjdXTjIGxhICVsdVxuIgorCisjfiBtc2dpZCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIKKyN+IG1zZ3N0ciAiSW50cnUg7m4gc3RhcmVhICVkXG4iCisKKyN+IG1zZ2lkICJSZWFkaW5nIGEgdG9rZW46ICIKKyN+IG1zZ3N0ciAiQ2l0ZXNjIHVuIGVsZW1lbnQgKHRva2VuKTogIgorCisjfiBtc2dpZCAiTm93IGF0IGVuZCBvZiBpbnB1dC5cbiIKKyN+IG1zZ3N0ciAiQWN1bSBsYSBzZuJyuml0dWwgaW50cuNyaWkuXG4iCisKKyN+IG1zZ2lkICJOZXh0IHRva2VuIGlzIgorI34gbXNnc3RyICJVcm3jdG9ydWwgZWxlbWVudCAodG9rZW4pIGVzdGUiCisKKyN+IG1zZ2lkICJTaGlmdGluZyIKKyN+IG1zZ3N0ciAiU2hpZnQtZXoiCisKKyN+IG1zZ2lkICJQT1NJWCBmb3JiaWRzIGRlY2xhcmF0aW9ucyBpbiB0aGUgZ3JhbW1hciIKKyN+IG1zZ3N0ciAiUE9TSVggaW50ZXJ6aWNlIGRlY2xhcmH+aWkg7m4gZ3JhbWF0aWPjIgorCisjfiBtc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIgorI34gbXNnc3RyICJlcm9hcmUgZGUgc2ludGF44ywgJXMgbmVhunRlcHRhdCIKKworI34gbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIgorI34gbXNnc3RyICJlcm9hcmUgZGUgc2ludGF44ywgJXMgbmVhunRlcHRhdCwgYbp0ZXB0ICVzIgorCisjfiBtc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiCisjfiBtc2dzdHIgImVyb2FyZSBkZSBzaW50YXjjLCAlcyBuZWG6dGVwdGF0LCBhunRlcHQgJXMgc2F1ICVzIgorCisjfiBtc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiCisjfiBtc2dzdHIgImVyb2FyZSBkZSBzaW50YXjjLCAlcyBuZWG6dGVwdGF0LCBhunRlcHQgJXMgc2F1ICVzIHNhdSAlcyIKKworI34gbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIgorI34gbXNnc3RyICJlcm9hcmUgZGUgc2ludGF44ywgJXMgbmVhunRlcHRhdCwgYbp0ZXB0ICVzIHNhdSAlcyBzYXUgJXMgc2F1ICVzIgorCisjfiBtc2dpZCAic3ludGF4IGVycm9yOyBhbHNvIG1lbW9yeSBleGhhdXN0ZWQiCisjfiBtc2dzdHIgImVyb2FyZSBkZSBzaW50YXjjILppIG1lbW9yaWUgZXB1aXphdOMiCisKKyN+IG1zZ2lkICJzeW50YXggZXJyb3IiCisjfiBtc2dzdHIgImVyb2FyZSBkZSBzaW50YXjjIgorCisjfiBtc2dpZCAiRXJyb3I6IGRpc2NhcmRpbmciCisjfiBtc2dzdHIgIkVyb2FyZTogZWxpbWluIgorCisjfiBtc2dpZCAiRXJyb3I6IHBvcHBpbmciCisjfiBtc2dzdHIgIkVyb2FyZTogc2NvdCAocG9wcGluZykiCisKKyN+IG1zZ2lkICJFcnJvcjogZGlzY2FyZGluZyBsb29rYWhlYWQiCisjfiBtc2dzdHIgIkVyb2FyZTogZWxpbWluIGxvb2thaGVhZCIKKworI34gbXNnaWQgIlJ1bGVzIG5ldmVyIHJlZHVjZWQiCisjfiBtc2dzdHIgIlJlZ3VsaWxlIG51IGF1IGZvc3QgcmVkdXNlIgorCisjfiBtc2dpZCAidXNlbGVzcyBydWxlIgorI34gbXNnc3RyICJyZWd1bOMgZuNy4yByb3N0IgorCisjfiBtc2dpZCAidXNlbGVzcyBub250ZXJtaW5hbDogJXMiCisjfiBtc2dzdHIgIm5vbnRlcm1pbmFsIGbjcuMgcm9zdDogJXMiCisKKyN+IG1zZ2lkICJVc2VsZXNzIG5vbnRlcm1pbmFscyIKKyN+IG1zZ3N0ciAiTm9udGVybWluYWxlIGbjcuMgcm9zdCIKKworI34gbXNnaWQgIlRlcm1pbmFscyB3aGljaCBhcmUgbm90IHVzZWQiCisjfiBtc2dzdHIgIlRlcm1pbmFsZSBjYXJlIG51IHN1bnQgZm9sb3NpdGUiCisKKyN+IG1zZ2lkICJVc2VsZXNzIHJ1bGVzIgorI34gbXNnc3RyICJSZWd1bGkgZuNy4yByb3N0IgorCisjfiBtc2dpZCAiJWQgcnVsZSBuZXZlciByZWR1Y2VkXG4iCisjfiBtc2dpZF9wbHVyYWwgIiVkIHJ1bGVzIG5ldmVyIHJlZHVjZWRcbiIKKyN+IG1zZ3N0clswXSAiJWQgcmVndWzjIG5pY2lvZGF04yByZWR1c+NcbiIKKyN+IG1zZ3N0clsxXSAiJWQgcmVndWxpIG5pY2lvZGF04yByZWR1c2VcbiIKKworI34gbXNnaWQgIiVkIHVzZWxlc3Mgbm9udGVybWluYWwiCisjfiBtc2dpZF9wbHVyYWwgIiVkIHVzZWxlc3Mgbm9udGVybWluYWxzIgorI34gbXNnc3RyWzBdICIlZCBub250ZXJtaW5hbCBm43LjIHJvc3QiCisjfiBtc2dzdHJbMV0gIiVkIG5vbnRlcm1pbmFsZSBm43LjIHJvc3QiCisKKyN+IG1zZ2lkICIgYW5kICIKKyN+IG1zZ3N0ciAiILppICIKKworI34gbXNnaWQgIiVkIHVzZWxlc3MgcnVsZSIKKyN+IG1zZ2lkX3BsdXJhbCAiJWQgdXNlbGVzcyBydWxlcyIKKyN+IG1zZ3N0clswXSAiJWQgcmVndWzjIGbjcuMgcm9zdCIKKyN+IG1zZ3N0clsxXSAiJWQgcmVndWxpIGbjcuMgcm9zdCIKKworI34gbXNnaWQgImludmFsaWQgZXNjYXBlIHNlcXVlbmNlOiAlcyIKKyN+IG1zZ3N0ciAic2VjdmVu/uMgZXNjYXBlIGludmFsaWTjOiAlcyIKKworI34gbXNnaWQgInVucmVjb2duaXplZCBlc2NhcGUgc2VxdWVuY2U6ICVzIgorI34gbXNnc3RyICJzZWN2ZW7+4yBlc2NhcGUgbmVyZWN1bm9zY3V04zogJXMiCisKKyN+IG1zZ2lkICJtaXNzaW5nIGB7JyBpbiBgJXMnIgorI34gbXNnc3RyICJgeycgbGlwc+Mg7m4gYCVzJyIKKworI34gbXNnaWQgImludmFsaWQgJCB2YWx1ZSIKKyN+IG1zZ3N0ciAidmFsb2FyZSAkIGludmFsaWTjIgorCisjfiBtc2dpZCAidG9rZW5zICVzIGFuZCAlcyBib3RoIGFzc2lnbmVkIG51bWJlciAlZCIKKyN+IG1zZ3N0ciAiIgorI34gImFtYmVsb3IgZWxlbWVudGVsZSAodG9rZW5zKSAlcyC6aSAlcyBsZSBzdW50IGFsb2NhdGUgYWNlbGG6aSBudW3jciAlZCIKKworI34gbXNnaWQgIiVzOiBpbGxlZ2FsIG9wdGlvbiAtLSAlY1xuIgorI34gbXNnc3RyICIlczogb3D+aXVuZSBpbGVnYWzjIC0tICVjXG4iCisKKyN+IG1zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gYCVzJyBjb3VsZCBub3QgYmUgaW52b2tlZCIKKyN+IG1zZ3N0ciAicHJvZ3JhbXVsIGF1eGlsaWFyIGAlcycgbnUgcG9hdGUgZmkgaW52b2NhdCIKKworI34gbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSBgJXMnIGZhaWxlZCAoZXhpdCBzdGF0dXMgJWQpIgorI34gbXNnc3RyICJwcm9ncmFtdWwgYXV4aWxpYXIgYCVzJyBhIGW6dWF0IChzdGFyZSBkZSB0ZXJtaW5hcmUgJWQpIgpkaWZmIC0tZ2l0IGEvcG8vcnUuZ21vIGIvcG8vcnUuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMzNmMDcKLS0tIC9kZXYvbnVsbAorKysgYi9wby9ydS5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vcnUucG8gYi9wby9ydS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2EyMTFjCi0tLSAvZGV2L251bGwKKysrIGIvcG8vcnUucG8KQEAgLTAsMCArMSwxNTM5IEBACisjIFRyYW5zbGF0aW9uIG9mIGJpc29uIG1lc3NhZ2VzIHRvIFJ1c3NpYW4KKyMgQ29weXJpZ2h0IChDKSAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgYmlzb24gcGFja2FnZS4KKyMKKyMgRG1pdHJ5IFMuIFNpdmFjaGVua28gPGRpbWFAQ2hnLlJVPiwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMi4KKyMgRGltaXRyaXkgUnlhemFudGNldiA8REptMDBuQG1haWwucnU+LCAyMDA5LgorIyBQYXZlbCBNYXJ5YW5vdiA8YWNpZF9qYWNrQHVrci5uZXQ+LCAyMDA5LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYmlzb24gMi40LjFcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLWJpc29uQGdudS5vcmdcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMi0xMi0xMiAxNjowOSswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOS0wMi0wNCAxOTo0NCswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBQYXZlbCBNYXJ5YW5vdiA8YWNpZF9qYWNrQHVrci5uZXQ+XG4iCisiTGFuZ3VhZ2UtVGVhbTogUnVzc2lhbiA8Z251QG14LnJ1PlxuIgorIkxhbmd1YWdlOiBydVxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MzsgcGx1cmFsPW4lMTA9PTEgJiYgbiUxMDAhPTExID8gMCA6IG4lMTA+PTIgJiYgbiIKKyIlMTA8PTQgJiYgKG4lMTAwPDEwIHx8IG4lMTAwPj0yMCkgPyAxIDogMjtcbiIKKworIzogc3JjL2NvbXBsYWluLmM6MTIwIHNyYy9jb21wbGFpbi5jOjEzMSBzcmMvY29tcGxhaW4uYzoxNDAgc3JjL2NvbXBsYWluLmM6MTg4CisjOiBzcmMvY29tcGxhaW4uYzoxOTgKK21zZ2lkICJ3YXJuaW5nIgorbXNnc3RyICLQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1IgorCisjOiBzcmMvY29tcGxhaW4uYzoxNTEgc3JjL2NvbXBsYWluLmM6MTYwIHNyYy9jb21wbGFpbi5jOjE2NworIywgZnV6enkKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAi0L7RiNC40LHQutCwINCy0LLQvtC00LAt0LLRi9Cy0L7QtNCwIgorCisjOiBzcmMvY29tcGxhaW4uYzoyMDggc3JjL2NvbXBsYWluLmM6MjE1Cittc2dpZCAiZmF0YWwgZXJyb3IiCittc2dzdHIgItGE0LDRgtCw0LvRjNC90LDRjyDQvtGI0LjQsdC60LAiCisKKyM6IHNyYy9jb25mbGljdHMuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyBzaGlmdCIKK21zZ3N0ciAiICAgINCa0L7QvdGE0LvQuNC60YIg0LzQtdC20LTRgyDQv9GA0LDQstC40LvQvtC8ICVkINC4INC70LXQutGB0LXQvNC+0LkgJXMg0YDQsNC30YDQtdGI0LXQvSDRgdC00LLQuNCz0L7QvCIKKworIzogc3JjL2NvbmZsaWN0cy5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIHJlZHVjZSIKK21zZ3N0ciAiICAgINCa0L7QvdGE0LvQuNC60YIg0LzQtdC20LTRgyDQv9GA0LDQstC40LvQvtC8ICVkINC4INC70LXQutGB0LXQvNC+0LkgJXMg0YDQsNC30YDQtdGI0LXQvSDQstGL0LLQvtC00L7QvCIKKworIzogc3JjL2NvbmZsaWN0cy5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIGFuIGVycm9yIgorbXNnc3RyICIgICAg0JrQvtC90YTQu9C40LrRgiDQvNC10LbQtNGDINC/0YDQsNCy0LjQu9C+0LwgJWQg0Lgg0LvQtdC60YHQtdC80L7QuSAlcyDRgNCw0LfRgNC10YjQtdC9INC60LDQuiDQvtGI0LjQsdC60LAiCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCBzaGlmdC9yZWR1Y2UsICVkIHJlZHVjZS9yZWR1Y2VcbiIKK21zZ3N0ciAi0LrQvtC90YTQu9C40LrRgtGLOiAlZCDRgdC00LLQuNCz0LAv0LLRi9Cy0L7QtNCwLCAlZCDQstGL0LLQvtC00LAv0LLRi9Cy0L7QtNCwXG4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCBzaGlmdC9yZWR1Y2VcbiIKK21zZ3N0ciAi0LrQvtC90YTQu9C40LrRgtGLOiAlZCDRgdC00LLQuNCz0LAv0LLRi9Cy0L7QtNCwXG4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCByZWR1Y2UvcmVkdWNlXG4iCittc2dzdHIgItC60L7QvdGE0LvQuNC60YLRizogJWQg0LLRi9Cy0L7QtNCwL9Cy0YvQstC+0LTQsFxuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YXRlICVkICIKK21zZ3N0ciAi0KHQvtGB0YLQvtGP0L3QuNC1ICVkICIKKworIzogc3JjL2NvbmZsaWN0cy5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICIlJWV4cGVjdC1yciBhcHBsaWVzIG9ubHkgdG8gR0xSIHBhcnNlcnMiCittc2dzdHIgIiUlZXhwZWN0LXJyINC/0YDQuNC80LXQvdC40LzQviDRgtC+0LvRjNC60L4g0LogR0xSINC/0LDRgNGB0LXRgNCw0LwiCisKKyM6IHNyYy9jb25mbGljdHMuYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJleHBlY3RlZCAlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIgorbXNnc3RyWzBdICLQvtC20LjQtNCw0LvRgdGPICVkINC60L7QvdGE0LvQuNC60YIg0YHQtNCy0LjQs9CwL9Cy0YvQstC+0LTQsCIKK21zZ3N0clsxXSAi0L7QttC40LTQsNC70L7RgdGMICVkINC60L7QvdGE0LvQuNC60YLQsCDRgdC00LLQuNCz0LAv0LLRi9Cy0L7QtNCwIgorbXNnc3RyWzJdICLQvtC20LjQtNCw0LvQvtGB0YwgJWQg0LrQvtC90YTQu9C40LrRgtC+0LIg0YHQtNCy0LjQs9CwL9Cy0YvQstC+0LTQsCIKKworIzogc3JjL2NvbmZsaWN0cy5jOjYyMQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCAlZCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJleHBlY3RlZCAlZCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAi0L7QttC40LTQsNC70YHRjyAlZCDQutC+0L3RhNC70LjQutGCINCy0YvQstC+0LTQsC/QstGL0LLQvtC00LAiCittc2dzdHJbMV0gItC+0LbQuNC00LDQu9C+0YHRjCAlZCDQutC+0L3RhNC70LjQutGC0LAg0LLRi9Cy0L7QtNCwL9Cy0YvQstC+0LTQsCIKK21zZ3N0clsyXSAi0L7QttC40LTQsNC70L7RgdGMICVkINC60L7QvdGE0LvQuNC60YLQvtCyINCy0YvQstC+0LTQsC/QstGL0LLQvtC00LAiCisKKyM6IHNyYy9maWxlcy5jOjExNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBvcGVuIgorbXNnc3RyICLQvdC1INGD0LTQsNC10YLRgdGPINC+0YLQutGA0YvRgtGMINGE0LDQudC7IMKrJXPCuyIKKworIzogc3JjL2ZpbGVzLmM6MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImlucHV0L291dHB1dCBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBzcmMvZmlsZXMuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNsb3NlIGZpbGUiCittc2dzdHIgItC90LUg0YPQtNCw0LXRgtGB0Y8g0LfQsNC60YDRi9GC0Ywg0YTQsNC50LsiCisKKyM6IHNyYy9maWxlcy5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBvdmVyd3JpdGUgdGhlIGlucHV0IGZpbGUgJXMiCittc2dzdHIgItC+0YLQutCw0Lcg0L/QtdGA0LXQt9Cw0L/QuNGB0Lgg0LLRhdC+0LTQvdC+0LPQviDRhNCw0LnQu9CwICVzIgorCisjOiBzcmMvZmlsZXMuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3Rpbmcgb3V0cHV0cyB0byBmaWxlICVzIgorbXNnc3RyICLQutC+0L3RhNC70LjQutGCINCy0YvQstC+0LTQsCDQsiDRhNCw0LnQuyAlcyIKKworIzogc3JjL2dldGFyZ3MuYzoyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5IGAlcyAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIgorbXNnc3RyICLQmNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrJXMgLS1oZWxwwrsg0LTQu9GPINC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdC+0Lkg0LjQvdGE0L7RgNC80LDRhtC40LguXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbT1BUSU9OXS4uLiBGSUxFXG4iCittc2dzdHIgItCY0YHQv9C+0LvRjNC30L7QstCw0L3QuNC1OiAlcyBb0JrQm9Cu0KfQmF0uLi4g0KTQkNCZ0JtcbiIKKworIzogc3JjL2dldGFyZ3MuYzozMDIKK21zZ2lkICIiCisiR2VuZXJhdGUgYSBkZXRlcm1pbmlzdGljIExSIG9yIGdlbmVyYWxpemVkIExSIChHTFIpIHBhcnNlciBlbXBsb3lpbmdcbiIKKyJMQUxSKDEpLCBJRUxSKDEpLCBvciBjYW5vbmljYWwgTFIoMSkgcGFyc2VyIHRhYmxlcy4gIElFTFIoMSkgYW5kXG4iCisiY2Fub25pY2FsIExSKDEpIHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6MzA5Cittc2dpZCAiIgorIk1hbmRhdG9yeSBhcmd1bWVudHMgdG8gbG9uZyBvcHRpb25zIGFyZSBtYW5kYXRvcnkgZm9yIHNob3J0IG9wdGlvbnMgdG9vLlxuIgorbXNnc3RyICLQodC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RidC40LUg0LTQu9GP0L3QvdGL0LUg0L7Qv9GG0LjQuCDRgtCw0LrQttC1INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPRjtGCINC4INC60L7RgNC+0YLQutC40Lwg0L7Qv9GG0LjRj9C8LlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMxMgorbXNnaWQgIlRoZSBzYW1lIGlzIHRydWUgZm9yIG9wdGlvbmFsIGFyZ3VtZW50cy5cbiIKK21zZ3N0ciAi0KLQvi3QttC1INC00L7Qv9GD0YHRgtC40LzQviDQtNC70Y8g0L7Qv9GG0LjQvtC90LDQu9GM0L3Ri9GFINC/0LDRgNCw0LzQtdGC0YDQvtCyLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMxNgorIywgZnV6enkKK21zZ2lkICIiCisiXG4iCisiT3BlcmF0aW9uIG1vZGVzOlxuIgorIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKKyIgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCisiICAgICAgLS1wcmludC1sb2NhbGVkaXIgICAgICBvdXRwdXQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgbG9jYWxlLWRlcGVuZGVudCAiCisiZGF0YVxuIgorIiAgICAgIC0tcHJpbnQtZGF0YWRpciAgICAgICAgb3V0cHV0IGRpcmVjdG9yeSBjb250YWluaW5nIHNrZWxldG9ucyBhbmQgWFNMVFxuIgorIiAgLXksIC0teWFjYyAgICAgICAgICAgICAgICAgZW11bGF0ZSBQT1NJWCBZYWNjXG4iCisiICAtVywgLS13YXJuaW5nc1s9Q0FURUdPUlldICByZXBvcnQgdGhlIHdhcm5pbmdzIGZhbGxpbmcgaW4gQ0FURUdPUllcbiIKKyIgIC1mLCAtLWZlYXR1cmVbPUZFQVRVUkVdICAgIGFjdGl2YXRlIG1pc2NlbGxhbmVvdXMgZmVhdHVyZXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorItCg0LXQttC40LzRiyDRhNGD0L3QutGG0LjQvtC90LjRgNC+0LLQsNC90LjRjzpcbiIKKyIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgICDQstGL0LLQtdGB0YLQuCDRjdGC0YMg0YHQv9GA0LDQstC60YMg0Lgg0LLRi9C50YLQuFxuIgorIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgINCy0YvQstC10YHRgtC4INC40L3RhNC+0YDQvNCw0YbQuNGOINC+INCy0LXRgNGB0LjQuCDQuCDQstGL0LnRgtC4XG4iCisiICAgICAgLS1wcmludC1sb2NhbGVkaXIgICAgICAg0LLRi9Cy0LXRgdGC0Lgg0LrQsNGC0LDQu9C+0LMsINGB0L7QtNC10YDQttCw0YnQuNC5INC30LDQstC40YHQuNC80YvQtSDQvtGCICIKKyLQu9C+0LrQsNC70Lgg0LTQsNC90L3Ri9C1XG4iCisiICAgICAgLS1wcmludC1kYXRhZGlyICAgICAgICAg0LLRi9Cy0LXRgdGC0Lgg0LrQsNGC0LDQu9C+0LMg0YHQvtC00LXRgNC20LDRidC40Lkg0LfQsNCz0L7RgtC+0LLQutC4INC4IFhTTFRcbiIKKyIgIC15LCAtLXlhY2MgICAgICAgICAgICAgICAgICDQuNC80LjRgtC40YDQvtCy0LDRgtGMIFBPU0lYIHlhY2NcbiIKKyIgIC1XLCAtLXdhcm5pbmdzPVvQmtCQ0KLQldCT0J7QoNCY0K9dICDQstGL0LLQvtC00LjRgtGMINC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40Y8g0LIg0YHQvtC+0YLQstC10YLRgdGC0LLQuNC4INGBICIKKyLQmtCQ0KLQldCT0J7QoNCY0JXQmVxuIgorIlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMyOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnNlcjpcbiIKKyIgIC1MLCAtLWxhbmd1YWdlPUxBTkdVQUdFICAgICAgICAgIHNwZWNpZnkgdGhlIG91dHB1dCBwcm9ncmFtbWluZyBsYW5ndWFnZVxuIgorIiAgLVMsIC0tc2tlbGV0b249RklMRSAgICAgICAgICAgICAgc3BlY2lmeSB0aGUgc2tlbGV0b24gdG8gdXNlXG4iCisiICAtdCwgLS1kZWJ1ZyAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50IHRoZSBwYXJzZXIgZm9yIGRlYnVnZ2luZ1xuIgorIiAgICAgIC0tbG9jYXRpb25zICAgICAgICAgICAgICAgICAgZW5hYmxlIGxvY2F0aW9uIHN1cHBvcnRcbiIKKyIgIC1ELCAtLWRlZmluZT1OQU1FWz1WQUxVRV0gICAgICAgIHNpbWlsYXIgdG8gJyVkZWZpbmUgTkFNRSBcIlZBTFVFXCInXG4iCisiICAtRiwgLS1mb3JjZS1kZWZpbmU9TkFNRVs9VkFMVUVdICBvdmVycmlkZSAnJWRlZmluZSBOQU1FIFwiVkFMVUVcIidcbiIKKyIgIC1wLCAtLW5hbWUtcHJlZml4PVBSRUZJWCAgICAgICAgIHByZXBlbmQgUFJFRklYIHRvIHRoZSBleHRlcm5hbCBzeW1ib2xzXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXByZWNhdGVkIGJ5ICctRGFwaS5wcmVmaXg9UFJFRklYJ1xuIgorIiAgLWwsIC0tbm8tbGluZXMgICAgICAgICAgICAgICAgICAgZG9uJ3QgZ2VuZXJhdGUgJyNsaW5lJyBkaXJlY3RpdmVzXG4iCisiICAtaywgLS10b2tlbi10YWJsZSAgICAgICAgICAgICAgICBpbmNsdWRlIGEgdGFibGUgb2YgdG9rZW4gbmFtZXNcbiIKK21zZ3N0ciAiIgorItCQ0L3QsNC70LjQt9Cw0YLQvtGAOlxuIgorIiAgLUwsIC0tbGFuZ3VhZ2U90K/Ql9Cr0JogICAgICAgINGD0LrQsNC30LDRgtGMINCy0YvRhdC+0LTQvdC+0Lkg0Y/Qt9GL0Log0L/RgNC+0LPRgNCw0LzQvNC40YDQvtCy0LDQvdC40Y9cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICjRjdC60YHQv9C10YDQtdC80LXQvdGC0LDQu9GM0L3QsNGPINGE0YPQvdC60YbQuNGPKVxuIgorIiAgLVMsIC0tc2tlbGV0b2490KTQkNCZ0JsgICAgICAgINGD0LrQsNC30LDRgtGMINGE0LDQudC7INGI0LDQsdC70L7QvdCwXG4iCisiICAtdCwgLS1kZWJ1ZyAgICAgICAgICAgICAgICDQvdCw0YHRgtGA0L7QuNGC0Ywg0LDQvdCw0LvQuNC30LDRgtC+0YAg0LTQu9GPINC+0YLQu9Cw0LTQutC4XG4iCisiICAgICAgLS1sb2NhdGlvbnMgICAgICAgICAgICDQstC60LvRjtGH0LjRgtGMINCy0YvRh9C40YHQu9C10L3QuNC1INC80LXRgdGC0L7Qv9C+0LvQvtC20LXQvdC40LlcbiIKKyIgIC1wLCAtLW5hbWUtcHJlZml4PdCf0KDQldCk0JjQmtChICDQv9C+0LTRgdGC0LDQstC40YLRjCDQn9Cg0JXQpNCY0JrQoSDQtNC70Y8g0LLQvdC10YjQvdC40YUg0YHQuNC80LLQvtC70L7QslxuIgorIiAgLWwsIC0tbm8tbGluZXMgICAgICAgICAgICAg0L3QtSDQs9C10L3QtdGA0LjRgNC+0LLQsNGC0Ywg0LTQuNGA0LXQutGC0LjQstGLIMKrI2xpbmXCu1xuIgorIiAgLWssIC0tdG9rZW4tdGFibGUgICAgICAgICAg0LLQutC70Y7Rh9C40YLRjCDRgtCw0LHQu9C40YbRgyDQuNC80LXQvSDQu9C10LrRgdC10LxcbiIKKyJcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNDYKKyMsIGZ1enp5Cittc2dpZCAiIgorIk91dHB1dDpcbiIKKyIgICAgICAtLWRlZmluZXNbPUZJTEVdICAgICAgIGFsc28gcHJvZHVjZSBhIGhlYWRlciBmaWxlXG4iCisiICAtZCAgICAgICAgICAgICAgICAgICAgICAgICBsaWtld2lzZSBidXQgY2Fubm90IHNwZWNpZnkgRklMRSAoZm9yIFBPU0lYICIKKyJZYWNjKVxuIgorIiAgLXIsIC0tcmVwb3J0PVRISU5HUyAgICAgICAgYWxzbyBwcm9kdWNlIGRldGFpbHMgb24gdGhlIGF1dG9tYXRvblxuIgorIiAgICAgIC0tcmVwb3J0LWZpbGU9RklMRSAgICAgd3JpdGUgcmVwb3J0IHRvIEZJTEVcbiIKKyIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIHNhbWUgYXMgYC0tcmVwb3J0PXN0YXRlJ1xuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg9UFJFRklYICAgc3BlY2lmeSBhIFBSRUZJWCBmb3Igb3V0cHV0IGZpbGVzXG4iCisiICAtbywgLS1vdXRwdXQ9RklMRSAgICAgICAgICBsZWF2ZSBvdXRwdXQgdG8gRklMRVxuIgorIiAgLWcsIC0tZ3JhcGhbPUZJTEVdICAgICAgICAgYWxzbyBvdXRwdXQgYSBncmFwaCBvZiB0aGUgYXV0b21hdG9uXG4iCisiICAteCwgLS14bWxbPUZJTEVdICAgICAgICAgICBhbHNvIG91dHB1dCBhbiBYTUwgcmVwb3J0IG9mIHRoZSBhdXRvbWF0b25cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGUgWE1MIHNjaGVtYSBpcyBleHBlcmltZW50YWwpXG4iCittc2dzdHIgIiIKKyLQktGL0LLQvtC0OlxuIgorIiAgICAgIC0tZGVmaW5lc1s90KTQkNCZ0JtdICAgICAgINGB0L7Qt9C00LDRgtGMINGC0LDQutC20LUg0YTQsNC50Lsg0LfQsNCz0L7Qu9C+0LLQutC+0LJcbiIKKyIgIC1kICAgICAgICAgICAgICAgICAgICAgICAgINC40LvQuCDQtdGB0LvQuCDQvNGLINC90LUg0LzQvtC20LXQvCDRg9C60LDQt9Cw0YLRjCDQpNCQ0JnQmyAiCisiKNGB0L7QstC80LXRgdGC0LjQvNC+0YHRgtGMINGBIFBPU0lYIFlhY2MpXG4iCisiICAtciwgLS1yZXBvcnQ90JLQldCp0JggICAgICAgICAg0YHQvtC30LTQsNGC0Ywg0YLQsNC60LbQtSDQv9C+0Y/RgdC90LXQvdC40Y8g0LIg0LDQstGC0L7QvNCw0YLRg1xuIgorIiAgICAgIC0tcmVwb3J0LWZpbGU9RklMRSAgICAg0LfQsNC/0LjRgdCw0YLRjCDQvtGC0YfQtdGCINCyINCk0JDQmdCbXG4iCisiICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgICDRgtC+INC20LUsINGH0YLQviDQuCDCqy0tcmVwb3J0PXN0YXRlwrtcbiIKKyIgIC1iLCAtLWZpbGUtcHJlZml4PdCf0KDQldCk0JjQmtChICDRg9C60LDQt9Cw0YLRjCDQn9Cg0JXQpNCY0JrQoSDQtNC70Y8g0LLRi9GF0L7QtNC90YvRhSDRhNCw0LnQu9C+0LJcbiIKKyIgIC1vLCAtLW91dHB1dD3QpNCQ0JnQmyAgICAgICAgICDQv9C+0LzQtdGB0YLQuNGC0Ywg0LLRi9Cy0L7QtCDQsiDQpNCQ0JnQm1xuIgorIiAgLWcsIC0tZ3JhcGhbPdCk0JDQmdCbXSAgICAgICAgINGC0LDQutC20LUg0LLRi9Cy0LXRgdGC0Lgg0LPRgNCw0YQg0LDQstGC0L7QvNCw0YLQsFxuIgorIiAgLXgsIC0teG1sWz3QpNCQ0JnQm10gICAgICAgICAgINGC0LDQutC20LUg0LLRi9Cy0LXRgdGC0LggWE1MINC+0YLRh9C10YIg0LDQstGC0L7QvNCw0YLQsFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKNGB0YbQtdC90LDRgNC40LkgWE1MIC0g0Y3QutGB0L/QtdGA0LXQvNC10L3RgtCw0LvRjNC90YvQuSlcbiIKKyJcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNjEKKyMsIGZ1enp5Cittc2dpZCAiIgorIldhcm5pbmcgY2F0ZWdvcmllcyBpbmNsdWRlOlxuIgorIiAgYG1pZHJ1bGUtdmFsdWVzJyAgdW5zZXQgb3IgdW51c2VkIG1pZHJ1bGUgdmFsdWVzXG4iCisiICBgeWFjYycgICAgICAgICAgICBpbmNvbXBhdGliaWxpdGllcyB3aXRoIFBPU0lYIFlhY2NcbiIKKyIgIGBjb25mbGljdHMtc3InICAgIFMvUiBjb25mbGljdHMgKGVuYWJsZWQgYnkgZGVmYXVsdClcbiIKKyIgIGBjb25mbGljdHMtcnInICAgIFIvUiBjb25mbGljdHMgKGVuYWJsZWQgYnkgZGVmYXVsdClcbiIKKyIgIGBkZXByZWNhdGVkJyAgICAgIG9ic29sZXRlIGNvbnN0cnVjdHNcbiIKKyIgIGBvdGhlcicgICAgICAgICAgIGFsbCBvdGhlciB3YXJuaW5ncyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGFsbCcgICAgICAgICAgICAgYWxsIHRoZSB3YXJuaW5nc1xuIgorIiAgYG5vLUNBVEVHT1JZJyAgICAgdHVybiBvZmYgd2FybmluZ3MgaW4gQ0FURUdPUllcbiIKKyIgIGBub25lJyAgICAgICAgICAgIHR1cm4gb2ZmIGFsbCB0aGUgd2FybmluZ3NcbiIKKyIgIGBlcnJvcicgICAgICAgICAgIHRyZWF0IHdhcm5pbmdzIGFzIGVycm9yc1xuIgorbXNnc3RyICIiCisi0JrQsNGC0LXQs9C+0YDQuNC4INC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40Y8g0LLQutC70Y7Rh9Cw0Y7RgjpcbiIKKyIgIMKrbWlkcnVsZS12YWx1ZXPCuyAg0L3QtdC90LDQt9C90LDRh9C10L3QvdGL0LUg0LjQu9C4INC90LXQuNGB0L/QvtC70YzQt9GD0LXQvNGL0LUg0LfQvdCw0YfQtdC90LjRjyDQsiDQv9GA0LDQstC40LvQsNGFXG4iCisiICDCq3lhY2PCuyAgICAgICAgICAgINC90LXRgdC+0LLQvNC10YHRgtC40LzQvtGB0YLQuCDRgSBQT1NJWCBZQUNDXG4iCisiICDCq2FsbMK7ICAgICAgICAgICAgINCy0YHQtSDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNGPXG4iCisiICDCq25vLdCa0JDQotCV0JPQntCg0JjQr8K7ICAgINCy0YvQutC70Y7Rh9C40YLRjCDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNGPINCyINCa0JDQotCV0JPQntCg0JjQr1xuIgorIiAgwqtub25lwrsgICAgICAgICAgICDQstGL0LrQu9GO0YfQuNGC0Ywg0LLRgdC1INC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40Y9cbiIKKyIgIMKrZXJyb3LCuyAgICAgICAgICAg0LLQvtGB0L/RgNC40L3QuNC80LDRgtGMINCy0YHQtSDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNGPINC60LDQuiDQvtGI0LjQsdC60LhcbiIKKyJcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNzYKK21zZ2lkICIiCisiVEhJTkdTIGlzIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMgdGhhdCBjYW4gaW5jbHVkZTpcbiIKKyIgIGBzdGF0ZScgICAgICAgIGRlc2NyaWJlIHRoZSBzdGF0ZXNcbiIKKyIgIGBpdGVtc2V0JyAgICAgIGNvbXBsZXRlIHRoZSBjb3JlIGl0ZW0gc2V0cyB3aXRoIHRoZWlyIGNsb3N1cmVcbiIKKyIgIGBsb29rYWhlYWQnICAgIGV4cGxpY2l0bHkgYXNzb2NpYXRlIGxvb2thaGVhZCB0b2tlbnMgdG8gaXRlbXNcbiIKKyIgIGBzb2x2ZWQnICAgICAgIGRlc2NyaWJlIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMgc29sdmluZ1xuIgorIiAgYGFsbCcgICAgICAgICAgaW5jbHVkZSBhbGwgdGhlIGFib3ZlIGluZm9ybWF0aW9uXG4iCisiICBgbm9uZScgICAgICAgICBkaXNhYmxlIHRoZSByZXBvcnRcbiIKK21zZ3N0ciAiIgorItCS0JXQqdCYIC0g0Y3RgtC+INGB0L/QuNGB0L7QuiDRgNCw0LfQtNC10LvQtdC90L3Ri9GFINC30LDQv9GP0YLQvtC5INGB0LvQvtCyLCDQutC+0YLQvtGA0YvQuSDQvNC+0LbQtdGCINCy0LrQu9GO0YfQsNGC0Yw6XG4iCisiICDCq3N0YXRlwrsgICAgICAgINC+0L/QuNGB0LDRgtGMINGB0L7RgdGC0L7Rj9C90LjRj1xuIgorIiAgwqtpdGVtc2V0wrsgICAgICDQv9C+0LvQvdGL0Lkg0L3QsNCx0L7RgCDQvtGB0L3QvtCy0L3Ri9GFINGN0LvQtdC80LXQvdGC0L7QsiDQstC80LXRgdGC0LUg0YEg0LjRhSDRgdC+0YHQtdC00Y/QvNC4XG4iCisiICDCq2xvb2stYWhlYWTCuyAgINGC0L7Rh9C90YvQtSDRgdC+0L7RgtCy0LXRgtGB0YLQstC40Y8g0YHQu9C10LTRg9GO0YnQuNGFINGC0L7QutC10L3QvtCyINGN0LvQtdC80LXQvdGC0LDQvFxuIgorIiAgwqtzb2x2ZWTCuyAgICAgICDQvtC/0LjRgdCw0L3QuNC1INGA0LXRiNC10L3QuNGPINC60L7QvdGE0LvQuNC60YLQvtCyINGB0LTQstC40LPQsC/QstGL0LLQvtC00LBcbiIKKyIgIMKrYWxswrsgICAgICAgICAg0LLQutC70Y7Rh9C40YLRjCDQstGB0Y4g0Y3RgtGDINC40L3RhNC+0YDQvNCw0YbQuNGOXG4iCisiICDCq25vbmXCuyAgICAgICAgINC+0YLQutC70Y7Rh9C40YLRjCDQvtGC0YfQtdGCXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzg3Cittc2dpZCAiIgorIkZFQVRVUkUgaXMgYSBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCB3b3JkcyB0aGF0IGNhbiBpbmNsdWRlOlxuIgorIiAgYGNhcmV0JyAgICAgICAgc2hvdyBlcnJvcnMgd2l0aCBjYXJldHNcbiIKKyIgIGBhbGwnICAgICAgICAgIGFsbCBvZiB0aGUgYWJvdmVcbiIKKyIgIGBub25lJyAgICAgICAgIGRpc2FibGUgYWxsIG9mIHRoZSBhYm92ZVxuIgorIiAgIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorbXNnc3RyICIiCisiXG4iCisi0J7RiNC40LHQutC4INGB0L7QvtCx0YnQsNC50YLQtSDQv9C+INCw0LTRgNC10YHRgyA8JXM+LlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBob21lIHBhZ2U6IDwlcz4uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozOTcKK21zZ2lkICJHZW5lcmFsIGhlbHAgdXNpbmcgR05VIHNvZnR3YXJlOiA8aHR0cDovL3d3dy5nbnUub3JnL2dldGhlbHAvPi5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogUmVwbGFjZSBMQU5HX0NPREUgaW4gdGhpcyBVUkwgd2l0aCB5b3VyIGxhbmd1YWdlCisjLiBjb2RlIDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtL0xBTkdfQ09ERS5odG1sPiB0bworIy4gZm9ybSBvbmUgb2YgdGhlIFVSTHMgYXQgaHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS8uCisjLiBPdGhlcndpc2UsIHJlcGxhY2UgdGhlIGVudGlyZSBVUkwgd2l0aCB5b3VyIHRyYW5zbGF0aW9uIHRlYW0ncworIy4gZW1haWwgYWRkcmVzcy4KKyM6IHNyYy9nZXRhcmdzLmM6NDEwCittc2dpZCAiUmVwb3J0IHRyYW5zbGF0aW9uIGJ1Z3MgdG8gPGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vPi5cbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjQxMgorbXNnaWQgIkZvciBjb21wbGV0ZSBkb2N1bWVudGF0aW9uLCBydW46IGluZm8gYmlzb24uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmlzb24gKEdOVSBCaXNvbikgJXMiCittc2dzdHIgImJpc29uIChHTlUgQmlzb24pICVzIgorCisjOiBzcmMvZ2V0YXJncy5jOjQzMAorbXNnaWQgIldyaXR0ZW4gYnkgUm9iZXJ0IENvcmJldHQgYW5kIFJpY2hhcmQgU3RhbGxtYW4uXG4iCittc2dzdHIgItCQ0LLRgtC+0YDRizog0KDQvtCx0LXRgNGCINCa0L7RgNCx0LXRgiDQuCDQoNC40YfQsNGA0LQg0KHRgtC+0LvQvNC10L0uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcHlyaWdodCAoQykgJWQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCittc2dzdHIgIkNvcHlyaWdodCAoQykgJWQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDM3Cittc2dpZCAiIgorIlRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PXG4iCisid2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuXG4iCittc2dzdHIgIiIKKyLQrdGC0L4g0YHQstC+0LHQvtC00L3QsNGPINC/0YDQvtCz0YDQsNC80LzQsDsg0YPRgdC70L7QstC40Y8g0YDQsNGB0L/RgNC+0YHRgtGA0LDQvdC10L3QuNGPINGB0LzQvtGC0YDQuNGC0LUg0LIg0LjRgdGF0L7QtNC90YvRhSAiCisi0YLQtdC60YHRgtCw0YUuXG4iCisi0J3QmNCa0JDQmtCY0KUg0LPQsNGA0LDQvdGC0LjQuSDQvdC1INC/0YDQtdC00L7RgdGC0LDQstC70Y/QtdGC0YHRjywg0LTQsNC20LUg0LPQsNGA0LDQvdGC0LjQuCDQn9Ce0JvQldCX0J3QntCh0KLQmCDQuNC70LggIgorItCf0KDQmNCT0J7QlNCd0J7QodCi0JhcbiIKKyLQlNCb0K8g0J7Qn9Cg0JXQlNCV0JvQldCd0J3QntCZINCm0JXQm9CYLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSBza2VsZXRvbiBkZWNsYXJhdGlvbnMgYXJlIGludmFsaWQiCittc2dzdHIgItC80L3QvtC20LXRgdGC0LLQtdC90L3Ri9C1INC+0L/QuNGB0LDQvdC40Y8g0YHQutC10LvQtdGC0LAg0L3QtSDQv9GA0LjQvNC10L3QuNC80L4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBsYW5ndWFnZSIKK21zZ3N0ciAi0L3QtdC00L7Qv9GD0YHRgtC40LzRi9C5INGP0LfRi9C6IMKrJXPCuyIKKworIzogc3JjL2dldGFyZ3MuYzo0NzkKK21zZ2lkICJtdWx0aXBsZSBsYW5ndWFnZSBkZWNsYXJhdGlvbnMgYXJlIGludmFsaWQiCittc2dzdHIgItC80L3QvtC20LXRgdGC0LLQtdC90L3Ri9C1INC+0L/QuNGB0LDQvdC40Y8g0Y/Qt9GL0LrQsCDQvdC1INC/0YDQuNC80LXQvdC40LzQviIKKworIzogc3JjL2dldGFyZ3MuYzo3NDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBtaXNzaW5nIG9wZXJhbmQiCittc2dzdHIgItC/0L7RgdC70LUgwqslc8K7INC/0YDQvtC/0YPRidC10L0g0L7Qv9C10YDQsNC90LQiCisKKyM6IHNyYy9nZXRhcmdzLmM6NzQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJleHRyYSBvcGVyYW5kICVzIgorbXNnc3RyICLQu9C40YjQvdC40Lkg0L7Qv9C10YDQsNC90LQgwqslc8K7IgorCisjOiBzcmMvZ3JhbS5jOjExMgorbXNnaWQgImVtcHR5IgorbXNnc3RyICLQv9GD0YHRgtC+IgorCisjOiBzcmMvZ3JhbS5jOjIwMQorbXNnaWQgIkdyYW1tYXIiCittc2dzdHIgItCT0YDQsNC80LzQsNGC0LjQutCwIgorCisjOiBzcmMvZ3JhcGh2aXouYzo0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiLy8gR2VuZXJhdGVkIGJ5ICVzLlxuIgorIi8vIFJlcG9ydCBidWdzIHRvIDwlcz4uXG4iCisiLy8gSG9tZSBwYWdlOiA8JXM+LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9sb2NhdGlvbi5jOjkzIHNyYy9zY2FuLWdyYW0ubDo4NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSBudW1iZXIgb3ZlcmZsb3ciCittc2dzdHIgItC/0LXRgNC10L/QvtC70L3QtdC90LjQtSDQvdC+0LzQtdGA0LAg0YHRgtGA0L7QutC4IgorCisjOiBzcmMvbG9jYXRpb24uYzo5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb2x1bW4gbnVtYmVyIG92ZXJmbG93IgorbXNnc3RyICLQv9C10YDQtdC/0L7Qu9C90LXQvdC40LUg0L3QvtC80LXRgNCwINGB0YLQvtC70LHRhtCwIgorCisjOiBzcmMvbWFpbi5jOjE0NgorbXNnaWQgInJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cyIKK21zZ3N0ciAi0L/RgNCw0LLQuNC70L4g0L3QtSDQv9GA0LjQvNC10L3QuNC80L4g0LIg0L/QsNGA0YHQtdGA0LUg0LjQty3Qt9CwINC60L7QvdGE0LvQuNC60YLQvtCyIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJSVkZWZpbmUgdmFyaWFibGUgJXMgcmVkZWZpbmVkIgorbXNnc3RyICLQv9C+0LLRgtC+0YDQvdC+0LUg0L7Qv9GA0LXQtNC10LvQtdC90LjQtSDRgdC40LzQstC+0LvQsCAlcyIKKworIzogc3JjL211c2NsZS10YWIuYzo0NTMKKyMsIGZ1enp5Cittc2dpZCAicHJldmlvdXMgZGVmaW5pdGlvbiIKK21zZ3N0ciAi0L/RgNC10LTRi9C00YPRidC10LUg0L7Qv9C40YHQsNC90LjQtSIKKworIzogc3JjL211c2NsZS10YWIuYzo0OTAgc3JjL211c2NsZS10YWIuYzo1MDQgc3JjL211c2NsZS10YWIuYzo1NTYKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgJXMiCittc2dzdHIgIiIKKworIzogc3JjL211c2NsZS10YWIuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJSVkZWZpbmUgQm9vbGVhbiB2YXJpYWJsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjYwOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlJWRlZmluZSB2YXJpYWJsZSAlczogJXMiCittc2dzdHIgIiIKKworIzogc3JjL211c2NsZS10YWIuYzo2MTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImFjY2VwdGVkIHZhbHVlOiAlcyIKK21zZ3N0ciAi0L3QtdC40YHQv9C+0LvRjNC30YPQtdC80LDRjyDQv9C10YDQtdC80LXQvdC90LDRjzogJCVkIgorCisjOiBzcmMvcGFyc2UtZ3JhbS55Ojc0NworIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGlkZW50aWZpZXIgaW4gcGFyYW1ldGVyIGRlY2xhcmF0aW9uIgorbXNnc3RyICLQsiDQvtC/0LjRgdCw0L3QuNC4INC/0LDRgNCw0LzQtdGC0YDQsCDQvtGC0YHRg9GC0YHRgtCy0YPQtdGCINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAIgorCisjOiBzcmMvcHJpbnQuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICIgdHlwZSAlZCBpcyAlc1xuIgorbXNnc3RyICIg0YLQuNC/ICVkINGP0LLQu9GP0LXRgtGB0Y8gJXNcbiIKKworIzogc3JjL3ByaW50LmM6MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgInNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgJWRcbiIKK21zZ3N0ciAi0YHQtNCy0LjQsywg0Lgg0L/QtdGA0LXRhdC+0LQg0LIg0YHQvtGB0YLQvtGP0L3QuNC1ICVkXG4iCisKKyM6IHNyYy9wcmludC5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJnbyB0byBzdGF0ZSAlZFxuIgorbXNnc3RyICLQv9C10YDQtdGF0L7QtCDQsiDRgdC+0YHRgtC+0Y/QvdC40LUgJWRcbiIKKworIzogc3JjL3ByaW50LmM6MjAzCittc2dpZCAiZXJyb3IgKG5vbmFzc29jaWF0aXZlKVxuIgorbXNnc3RyICLQvtGI0LjQsdC60LAgKNC90LXQsNGB0YHQvtGG0LjQsNGC0LjQstC90LDRjylcbiIKKworIzogc3JjL3ByaW50LmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZHVjZSB1c2luZyBydWxlICVkICglcykiCittc2dzdHIgItCy0YvQstC+0LQg0YEg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQvCDQv9GA0LDQstC40LvQsCAlZCAoJXMpIgorCisjOiBzcmMvcHJpbnQuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWNjZXB0IgorbXNnc3RyICLQv9GA0LjQvdGP0YLRjCIKKworIzogc3JjL3ByaW50LmM6MjY0IHNyYy9wcmludC5jOjMzOAorbXNnaWQgIiRkZWZhdWx0IgorbXNnc3RyICIkZGVmYXVsdCIKKworIzogc3JjL3ByaW50LmM6MzczIHNyYy9wcmludF9ncmFwaC5jOjc4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTdGF0ZSAlZCIKK21zZ3N0ciAi0KHQvtGB0YLQvtGP0L3QuNC1ICVkICIKKworIzogc3JjL3ByaW50LmM6NDA5Cittc2dpZCAiVGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyIgorbXNnc3RyICLQotC10YDQvNC40L3QsNC70YzQvdGL0LUg0YHQuNC80LLQvtC70Ysg0YEg0L/RgNCw0LLQuNC70LDQvNC4LCDQsiDQutC+0YLQvtGA0YvRhSDQvtC90Lgg0L/QvtGP0LLQu9GP0Y7RgtGB0Y8iCisKKyM6IHNyYy9wcmludC5jOjQzNgorbXNnaWQgIk5vbnRlcm1pbmFscywgd2l0aCBydWxlcyB3aGVyZSB0aGV5IGFwcGVhciIKK21zZ3N0ciAi0J3QtdGC0LXRgNC80LjQvdCw0LvRjNC90YvQtSDRgdC40LzQstC+0LvRiyDRgSDQv9GA0LDQstC40LvQsNC80LgsINCyINC60L7RgtC+0YDRi9GFINC+0L3QuCDQv9C+0Y/QstC70Y/RjtGC0YHRjyIKKworIzogc3JjL3ByaW50LmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiBsZWZ0OiIKK21zZ3N0ciAiINC90LDQu9C10LLQvjoiCisKKyM6IHNyYy9wcmludC5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgb24gcmlnaHQ6IgorbXNnc3RyICIg0L3QsNC/0YDQsNCy0L46IgorCisjOiBzcmMvcHJpbnQuYzo1MTAKK21zZ2lkICJSdWxlcyB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzIgorbXNnc3RyICLQn9GA0LDQstC40LvQviDQvdC1INC/0YDQuNC80LXQvdC40LzQviDQsiDQv9Cw0YDRgdC10YDQtSDQuNC3LdC30LAg0LrQvtC90YTQu9C40LrRgtC+0LIiCisKKyM6IHNyYy9yZWFkZXIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSAlcyBkZWNsYXJhdGlvbnMiCittc2dzdHIgItC80L3QvtC20LXRgdGC0LLQtdC90L3QvtC1INC+0L/QuNGB0LDQvdC40LUgJXMiCisKKyM6IHNyYy9yZWFkZXIuYzoxMzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInJlc3VsdCB0eXBlIGNsYXNoIG9uIG1lcmdlIGZ1bmN0aW9uICVzOiA8JXM+ICE9IDwlcz4iCittc2dzdHIgItC60L7QvdGE0LvQuNC60YIg0YLQuNC/0L7QsiDRgNC10LfRg9C70YzRgtCw0YLQsCDQv9GA0Lgg0YHQu9C40Y/QvdC40Lgg0YTRg9C90LrRhtC40Lggwqslc8K7OiA8JXM+ICE9IDwlcz4iCisKKyM6IHNyYy9yZWFkZXIuYzoxMzkgc3JjL3N5bXRhYi5jOjE1NiBzcmMvc3ltdGFiLmM6MTY2IHNyYy9zeW10YWIuYzo5MzgKKyM6IHNyYy9zeW10YWIuYzo5NTMgc3JjL3N5bXRhYi5jOjk2OCBzcmMvc3ltdGFiLmM6OTgzCittc2dpZCAicHJldmlvdXMgZGVjbGFyYXRpb24iCittc2dzdHIgItC/0YDQtdC00YvQtNGD0YnQtdC1INC+0L/QuNGB0LDQvdC40LUiCisKKyM6IHNyYy9yZWFkZXIuYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlZCBzeW1ib2wgbmFtZSBmb3IgJXMgaWdub3JlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVhZGVyLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bGUgZ2l2ZW4gZm9yICVzLCB3aGljaCBpcyBhIHRva2VuIgorbXNnc3RyICLQv9GA0LDQstC40LvQviDQt9Cw0LTQsNC90L4g0LTQu9GPICVzLCDQutC+0YLQvtGA0YvQuSDRj9Cy0LvRj9C10YLRgdGPINC70LXQutGB0LXQvNC+0LkiCisKKyM6IHNyYy9yZWFkZXIuYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidHlwZSBjbGFzaCBvbiBkZWZhdWx0IGFjdGlvbjogPCVzPiAhPSA8JXM+IgorbXNnc3RyICLQutC+0L3RhNC70LjQutGCINGC0LjQv9C+0LIg0L3QsCDQtNC10LnRgdGC0LLQuNC4INC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOOiA8JXM+ICE9IDwlcz4iCisKKyM6IHNyYy9yZWFkZXIuYzozMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgcnVsZSBmb3IgdHlwZWQgbm9udGVybWluYWwsIGFuZCBubyBhY3Rpb24iCittc2dzdHIgIiIKKyLQv9GD0YHRgtC+0LUg0L/RgNCw0LLQuNC70L4g0LTQu9GPINGC0LjQv9C40LfQuNGA0L7QstCw0L3QvdC+0LPQviDQvdC10YLQtdGA0LzQuNC90LDQu9GM0L3QvtCz0L4g0YHQuNC80LLQvtC70LAsINC4INC90LXRgiDQtNC10LnRgdGC0LLQuNGPIgorCisjOiBzcmMvcmVhZGVyLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNlZCB2YWx1ZTogJCVkIgorbXNnc3RyICLQvdC10LjRgdC/0L7Qu9GM0LfRg9C10LzQsNGPINC/0LXRgNC10LzQtdC90L3QsNGPOiAkJWQiCisKKyM6IHNyYy9yZWFkZXIuYzozMzAKK21zZ2lkICJ1bnNldCB2YWx1ZTogJCQiCittc2dzdHIgItC90LXRg9C60LDQt9Cw0L3QvdC+0LUg0LfQvdCw0YfQtdC90LjQtTogJCQiCisKKyM6IHNyYy9yZWFkZXIuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9rZW4gZm9yICUlcHJlYyBpcyBub3QgZGVmaW5lZDogJXMiCittc2dzdHIgIiIKKworIzogc3JjL3JlYWRlci5jOjQzMSBzcmMvcmVhZGVyLmM6NDQ1IHNyYy9yZWFkZXIuYzo0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSBvbmUgJXMgYWxsb3dlZCBwZXIgcnVsZSIKK21zZ3N0ciAi0YLQvtC70YzQutC+INC+0LTQvdC+ICVzINGA0LDQt9GA0LXRiNC10L3QviDQvdCwINC/0YDQsNCy0LjQu9C+IgorCisjOiBzcmMvcmVhZGVyLmM6NDQxIHNyYy9yZWFkZXIuYzo0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWZmZWN0cyBvbmx5IEdMUiBwYXJzZXJzIgorbXNnc3RyICIlcyDQstC70LjRj9C10YIg0YLQvtC70YzQutC+INC90LAgR0xSINC/0LDRgNGB0LXRgNGLIgorCisjOiBzcmMvcmVhZGVyLmM6NDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIG11c3QgYmUgZm9sbG93ZWQgYnkgcG9zaXRpdmUgbnVtYmVyIgorbXNnc3RyICLQt9CwICVzINC00L7Qu9C20L3QviDRgdC70LXQtNC+0LLQsNGC0Ywg0L/QvtC70L7QttC40YLQtdC70YzQvdC+0LUg0YfQuNGB0LvQviIKKworIzogc3JjL3JlYWRlci5jOjU1NAorIywgYy1mb3JtYXQKK21zZ2lkICJydWxlIGlzIHRvbyBsb25nIgorbXNnc3RyICLRgdC70LjRiNC60L7QvCDQtNC70LjQvdC90L7QtSDQv9GA0LDQstC40LvQviIKKworIzogc3JjL3JlYWRlci5jOjY3MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBydWxlcyBpbiB0aGUgaW5wdXQgZ3JhbW1hciIKK21zZ3N0ciAi0L7RgtGB0YPRgtGB0YLQstGD0Y7RgiDQv9GA0LDQstC40LvQsCDQstC+INCy0YXQvtC00L3QvtC5INCz0YDQsNC80LzQsNGC0LjQutC1IgorCisjOiBzcmMvcmVkdWNlLmM6MjQxCittc2dpZCAicnVsZSB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgItCx0LXRgdC/0L7Qu9C10LfQvdC+0LUg0L/RgNCw0LLQuNC70L4g0LIg0LPRgNCw0LzQvNCw0YLQuNC60LUiCisKKyM6IHNyYy9yZWR1Y2UuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiAlcyIKK21zZ3N0ciAi0L3QtdGC0LXRgNC80LjQvdCw0Lsg0LHQtdGB0L/QvtC70LXQt9C10L0g0LIg0LPRgNCw0LzQvNCw0YLQuNC60LU6ICVzIgorCisjOiBzcmMvcmVkdWNlLmM6MzUwCittc2dpZCAiTm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAi0J3QtdGC0LXRgNC80LjQvdCw0Lsg0LHQtdGB0L/QvtC70LXQt9C10L0g0LIg0LPRgNCw0LzQvNCw0YLQuNC60LUiCisKKyM6IHNyYy9yZWR1Y2UuYzozNjMKK21zZ2lkICJUZXJtaW5hbHMgdW51c2VkIGluIGdyYW1tYXIiCittc2dzdHIgItCi0LXRgNC80LjQvdCw0LvRiyDQvdC1INC40YHQv9C+0LvRjNC30YPRjtGC0YHRjyDQsiDQs9GA0LDQvNC80LDRgtC40LrQtSIKKworIzogc3JjL3JlZHVjZS5jOjM3MgorbXNnaWQgIlJ1bGVzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAi0J/RgNCw0LLQuNC70LAg0L3QtSDQuNGB0L/QvtC70YzQt9GD0Y7RgtGB0Y8g0LIg0LPRgNCw0LzQvNCw0YLQuNC60LUiCisKKyM6IHNyYy9yZWR1Y2UuYzozODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnaWRfcGx1cmFsICIlZCBub250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyWzBdICIlZCDQvdC10YLQtdGA0LzQuNC90LDQuyDQsdC10YHQv9C+0LvQtdC30LXQvSDQsiDQs9GA0LDQvNC80LDRgtC40LrQtSIKK21zZ3N0clsxXSAiJWQg0L3QtdGC0LXRgNC80LjQvdCw0LvQsCDQsdC10YHQv9C+0LvQtdC30L3QviDQsiDQs9GA0LDQvNC80LDRgtC40LrQtSIKK21zZ3N0clsyXSAiJWQg0L3QtdGC0LXRgNC80LjQvdCw0LvQvtCyINCx0LXRgdC/0L7Qu9C10LfQvdC+INCyINCz0YDQsNC80LzQsNGC0LjQutC1IgorCisjOiBzcmMvcmVkdWNlLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnaWRfcGx1cmFsICIlZCBydWxlcyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHJbMF0gIiVkINC/0YDQsNCy0LjQu9C+INCx0LXRgdC/0L7Qu9C10LfQvdC+INCyINCz0YDQsNC80LzQsNGC0LjQutC1IgorbXNnc3RyWzFdICIlZCDQv9GA0LDQstC40LvQsCDQsdC10YHQv9C+0LvQtdC30L3QviDQsiDQs9GA0LDQvNC80LDRgtC40LrQtSIKK21zZ3N0clsyXSAiJWQg0L/RgNCw0LLQuNC70LAg0LHQtdGB0L/QvtC70LXQt9C90L4g0LIg0LPRgNCw0LzQvNCw0YLQuNC60LUiCisKKyM6IHNyYy9yZWR1Y2UuYzo0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnQgc3ltYm9sICVzIGRvZXMgbm90IGRlcml2ZSBhbnkgc2VudGVuY2UiCittc2dzdHIgItC90LDRh9Cw0LvRjNC90YvQuSDRgdC40LzQstC+0LsgJXMg0L3QtSDQstGL0LLQvtC00LjRgiDQvdC4INC+0LTQvdC+0LPQviDQv9GA0LXQtNC70L7QttC10L3QuNGPIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MTg4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzdHJheSAnJXMnIgorbXNnc3RyICLQvdC10LrQvtGA0YDQtdC60YLQvdGL0LkgwqskwrsiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyMjkKK21zZ2lkICJhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZSIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjMyCittc2dpZCAiZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNlIG9mIFlZRkFJTCwgd2hpY2ggaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0MzEgc3JjL3NjYW4tY29kZS5sOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcnMgdG86ICVjJXMgYXQgJXMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NzaWJseSBtZWFudDogJWMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICIsIGhpZGluZyAlYyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiBhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiwgY2Fubm90IGJlIGFjY2Vzc2VkIGZyb20gbWlkLXJ1bGUgYWN0aW9uIGF0ICQlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NTIxIHNyYy9zY2FuLWdyYW0ubDo3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZWdlciBvdXQgb2YgcmFuZ2U6ICVzIgorbXNnc3RyICLQstGL0YXQvtC0INC30LAg0LPRgNCw0L3QuNGG0Ysg0LTQuNCw0L/QsNC30L7QvdCwINGG0LXQu9C+0LPQvjogJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAi0L3QtdCy0LXRgNC90LDRjyDQtNC40YDQtdC60YLQuNCy0LA6ICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjE5CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciBhZnRlciAnJWMnLCBleHBlY3RpbmcgaW50ZWdlciwgbGV0dGVyLCAnXycsICdbJywgb3IgJyQnIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uIGJlZm9yZSAkJWQ6ICUuKnMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjYzMworIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246ICUuKnMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjY0OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibWlzbGVhZGluZyByZWZlcmVuY2U6ICVzIgorbXNnc3RyICLQv9C10YDQtdC+0L/RgNC10LTQtdC70LXQvdC40LUg0L/RgNC40L7RgNC40YLQtdGC0LAg0LTQu9GPICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjYzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAi0L3QtdC+0LTQvdC+0LfQvdCw0YfQvdGL0Lkg0LDRgNCz0YPQvNC10L3RgiAlcyDQtNC70Y8gJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwbGljaXQgdHlwZSBnaXZlbiBpbiB1bnR5cGVkIGdyYW1tYXIiCittc2dzdHIgItGD0LrQsNC30LDQvSDRgtC40L8g0LIg0L3QtdGC0LjQv9C40LfQuNGA0L7QstCw0L3QvdC+0Lkg0LPRgNCw0LzQvNCw0YLQuNC60LUiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3NTkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiQkIGZvciB0aGUgbWlkcnVsZSBhdCAkJWQgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiQkINC00LvRjyDQv9GA0LDQstC40LvQsCAkJWQg0LjQtyDCqyVzwrsg0L3QtSDQuNC80LXQtdGCINC+0L/QuNGB0LDQvdC90L7Qs9C+INGC0LjQv9CwIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NzY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIkJCBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiJCQg0LIgwqslc8K7INC90LUg0LjQvNC10LXRgiDQvtC/0LjRgdCw0L3QvdC+0LPQviDRgtC40L/QsCIKKworIzogc3JjL3NjYW4tY29kZS5sOjc4NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJCVzIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICIkJWQg0LjQtyDCqyVzwrsg0L3QtSDQuNC80LXQtdGCINC+0L/QuNGB0LDQvdC90L7Qs9C+INGC0LjQv9CwIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MTQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzdHJheSAnLCcgdHJlYXRlZCBhcyB3aGl0ZSBzcGFjZSIKK21zZ3N0ciAi0LvQuNGI0L3Rj9GPIMKrLMK7INGB0YfQuNGC0LDQtdGC0YHRjyDQv9GA0L7QsdC10LvQvtC8IgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZGlyZWN0aXZlOiAlcyIKK21zZ3N0ciAi0L3QtdCy0LXRgNC90LDRjyDQtNC40YDQtdC60YLQuNCy0LA6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MjUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50aWZpZXI6ICVzIgorbXNnc3RyICLQvdC10LLQtdGA0L3QsNGPINC00LjRgNC10LrRgtC40LLQsDogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyOTUKKyMsIGZ1enp5Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIiCittc2dpZF9wbHVyYWwgImludmFsaWQgY2hhcmFjdGVycyIKK21zZ3N0clswXSAi0L3QtdC00L7Qv9GD0YHRgtC40LzRi9C5INGB0LjQvNCy0L7QuzogJXMiCittc2dzdHJbMV0gItC90LXQtNC+0L/Rg9GB0YLQuNC80YvQuSDRgdC40LzQstC+0Ls6ICVzIgorbXNnc3RyWzJdICLQvdC10LTQvtC/0YPRgdGC0LjQvNGL0Lkg0YHQuNC80LLQvtC7OiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjM1NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBpZGVudGlmaWVyIGluIGJyYWNrZXRlZCBuYW1lOiAlcyIKK21zZ3N0ciAi0L3QtdC+0LbQuNC00LDQvdC90YvQuSDRjdC70LXQvNC10L3RgjogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW4gaWRlbnRpZmllciBleHBlY3RlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MzgxCisjLCBmdXp6eQorbXNnaWQgImludmFsaWQgY2hhcmFjdGVyIGluIGJyYWNrZXRlZCBuYW1lIgorbXNnaWRfcGx1cmFsICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gYnJhY2tldGVkIG5hbWUiCittc2dzdHJbMF0gItC90LXQtNC+0L/Rg9GB0YLQuNC80YvQuSDRgdC40LzQstC+0Ls6ICVzIgorbXNnc3RyWzFdICLQvdC10LTQvtC/0YPRgdGC0LjQvNGL0Lkg0YHQuNC80LLQvtC7OiAlcyIKK21zZ3N0clsyXSAi0L3QtdC00L7Qv9GD0YHRgtC40LzRi9C5INGB0LjQvNCy0L7QuzogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo0ODEgc3JjL3NjYW4tZ3JhbS5sOjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBjaGFyYWN0ZXIgbGl0ZXJhbCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NDg2IHNyYy9zY2FuLWdyYW0ubDo1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0cmEgY2hhcmFjdGVycyBpbiBjaGFyYWN0ZXIgbGl0ZXJhbCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVsbCBjaGFyYWN0ZXIiCittc2dzdHIgItC90LXQtNC+0L/Rg9GB0YLQuNC80YvQuSDQvdGD0LvQtdCy0L7QuSDRgdC40LzQstC+0LsiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1MzEgc3JjL3NjYW4tZ3JhbS5sOjU0MSBzcmMvc2Nhbi1ncmFtLmw6NTYxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBhZnRlciBcXC1lc2NhcGU6ICVzIgorbXNnc3RyICLQvdC10LTQvtC/0YPRgdGC0LjQvNGL0Lkg0L3Rg9C70LXQstC+0Lkg0YHQuNC80LLQvtC7OiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjU3MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgXFwtZXNjYXBlOiAlcyIKK21zZ3N0ciAi0L3QtdC00L7Qv9GD0YHRgtC40LzRi9C5INGB0LjQvNCy0L7QuzogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo5MDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgJXMgYXQgZW5kIG9mIGZpbGUiCittc2dzdHIgItC+0YLRgdGD0YLRgdGC0LLRg9C10YIgwqslc8K7INCyINC60L7QvdGG0LUg0YTQsNC50LvQsCIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjkxMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyBhdCBlbmQgb2YgbGluZSIKK21zZ3N0ciAi0L7RgtGB0YPRgtGB0YLQstGD0LXRgiDCqyVzwrsg0LIg0LrQvtC90YbQtSDRgdGC0YDQvtC60LgiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5jbG9zZWQgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIGZldyBhcmd1bWVudHMgZm9yICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1za2VsLmw6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBmb3IgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW1saXN0LmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJCB2YWx1ZTogJCVkIgorbXNnc3RyICLQvdC10LTQvtC/0YPRgdGC0LjQvNC+0LUgJCDQt9C90LDRh9C10L3QuNC1OiAkJWQiCisKKyM6IHNyYy9zeW10YWIuYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJQT1NJWCBZYWNjIGZvcmJpZHMgZGFzaGVzIGluIHN5bWJvbCBuYW1lczogJXMiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IHN5bWJvbHMgaW4gaW5wdXQgZ3JhbW1hciAobGltaXQgaXMgJWQpIgorbXNnc3RyICLRgdC70LjRiNC60L7QvCDQvNC90L7Qs9C+INGB0LjQvNCy0L7Qu9C+0LIg0LLQviDQstGF0L7QtNGP0YnQtdC5INCz0YDQsNC80LzQsNGC0LjQutC1ICjQvNCw0LrRgdC40LzQsNC70YzQvdC+ICVkKSIKKworIzogc3JjL3N5bXRhYi5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAi0L/QvtCy0YLQvtGA0L3QvtC1INC+0L/QuNGB0LDQvdC40LUgJXMg0LTQu9GPICVzIgorCisjOiBzcmMvc3ltdGFiLmM6MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlZGVjbGFyYXRpb24gZm9yIDwlcz4iCittc2dzdHIgIiVzINC/0L7QstGC0L7RgNC90L4g0L7Qv9C40YHQsNC9INC00LvRjyA8JXM+IgorCisjOiBzcmMvc3ltdGFiLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyByZWRlZmluZWQiCittc2dzdHIgItC/0L7QstGC0L7RgNC90L7QtSDQvtC/0YDQtdC00LXQu9C10L3QuNC1INGB0LjQvNCy0L7Qu9CwICVzIgorCisjOiBzcmMvc3ltdGFiLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyByZWRlY2xhcmVkIgorbXNnc3RyICLQv9C10YDQtdC+0L/RgNC10LTQtdC70LXQvdC40LUg0YHQuNC80LLQvtC70LAgJXMiCisKKyM6IHNyYy9zeW10YWIuYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWZpbmluZyB1c2VyIHRva2VuIG51bWJlciBvZiAlcyIKK21zZ3N0ciAi0L/QtdGA0LXQvtC/0YDQtdC00LXQu9C10L3QuNC1INC90L7QvNC10YDQsCDQu9C10LrRgdC10LzRiyDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0LTQu9GPICVzIgorCisjOiBzcmMvc3ltdGFiLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyBpcyB1c2VkLCBidXQgaXMgbm90IGRlZmluZWQgYXMgYSB0b2tlbiBhbmQgaGFzIG5vIHJ1bGVzIgorbXNnc3RyICLRgdC40LzQstC+0LsgJXMg0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPLCDQvdC+INC90LUg0L7Qv9GA0LXQtNC10LvQtdC9INC60LDQuiDQu9C10LrRgdC10LzQsCDQuCDQvdC1INC40LzQtdC10YIg0L/RgNCw0LLQuNC7IgorCisjOiBzcmMvc3ltdGFiLmM6NDE1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgdXNlZCBtb3JlIHRoYW4gb25jZSBhcyBhIGxpdGVyYWwgc3RyaW5nIgorbXNnc3RyICLRgdC40LzQstC+0Lsgwqslc8K7INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDQsdC+0LvQtdC1INC+0LTQvdC+0LPQviDRgNCw0LfQsCDQutCw0Log0YHRgtGA0L7QutCwINC70LjRgtC10YDQsNC70LAiCisKKyM6IHNyYy9zeW10YWIuYzo0MTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyBnaXZlbiBtb3JlIHRoYW4gb25lIGxpdGVyYWwgc3RyaW5nIgorbXNnc3RyICLRgdC40LzQstC+0Lsgwqslc8K7INGD0LrQsNC30LDQvSDQsdC+0LvQtdC1INC+0LTQvdC+0Lkg0YHRgtGA0L7QutC4INC70LjRgtC10YDQsNC70LAiCisKKyM6IHNyYy9zeW10YWIuYzo1MzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVzZXIgdG9rZW4gbnVtYmVyICVkIHJlZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICLQv9C+0LLRgtC+0YDQvdC+0LUg0L7Qv9C40YHQsNC90LjQtSDRgtC40L/QsCDQtNC70Y8gJXMiCisKKyM6IHNyYy9zeW10YWIuYzo1MzkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIGRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAi0L/RgNC10LTRi9C00YPRidC10LUg0L7Qv9C40YHQsNC90LjQtSIKKworIzogc3JjL3N5bXRhYi5jOjkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgc3RhcnQgc3ltYm9sICVzIGlzIHVuZGVmaW5lZCIKK21zZ3N0ciAi0L3QsNGH0LDQu9GM0L3Ri9C5INGB0LjQvNCy0L7QuyAlcyDQvdC1INC+0L/RgNC10LTQtdC70LXQvSIKKworIzogc3JjL3N5bXRhYi5jOjkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgc3RhcnQgc3ltYm9sICVzIGlzIGEgdG9rZW4iCittc2dzdHIgItC90LDRh9Cw0LvRjNC90YvQuSDRgdC40LzQstC+0LsgJXMg0Y/QstC70Y/QtdGC0YHRjyDQu9C10LrRgdC10LzQvtC5IgorCisjOiBzcmMvc3ltdGFiLmM6OTM1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICUlZGVzdHJ1Y3RvciIKK21zZ3N0ciAi0L/QtdGA0LXQvtC/0YDQtdC00LXQu9C10L3QuNC1INC00LvRjyDRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L4g0L3QsNC30L3QsNGH0LXQvdC90L7Qs9C+ICUlZGVzdHJ1Y3RvciIKKworIzogc3JjL3N5bXRhYi5jOjk1MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJSVkZXN0cnVjdG9yIgorbXNnc3RyICLQv9C10YDQtdC+0L/RgNC10LTQtdC70LXQvdC40LUg0LTQu9GPINGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDQvdC10L3QsNC30L3QsNGH0LXQvdC90L7Qs9C+ICUlZGVzdHJ1Y3RvciIKKworIzogc3JjL3N5bXRhYi5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlJXByaW50ZXIiCittc2dzdHIgItC/0LXRgNC10L7Qv9GA0LXQtNC10LvQtdC90LjQtSDQtNC70Y8g0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+INC90LDQt9C90LDRh9C10L3QvdC+0LPQviAlJXByaW50ZXIiCisKKyM6IHNyYy9zeW10YWIuYzo5ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdsZXNzICUlcHJpbnRlciIKK21zZ3N0ciAi0L/QtdGA0LXQvtC/0YDQtdC00LXQu9C10L3QuNC1INC00LvRjyDRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L4g0L3QtdC90LDQt9C90LDRh9C10L3QvdC+0LPQviAlJXByaW50ZXIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzo2MyBkamdwcC9zdWJwaXBlLmM6Mjg2IGRqZ3BwL3N1YnBpcGUuYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3Zpbmcgb2YgJyVzJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjg1IGRqZ3BwL3N1YnBpcGUuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGlvbiBvZiBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgInNhdmluZyBzdGRpbiBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJzYXZpbmcgc3Rkb3V0IGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTUzIGRqZ3BwL3N1YnBpcGUuYzoxOTcgZGpncHAvc3VicGlwZS5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nIG9mIHRtcGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgYmlzb24ncyBzdGRvdXQgdG8gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIG00J3Mgc3RkaW4gZnJvbSB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlbmluZyBvZiBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIG00J3Mgc3Rkb3V0IHRvIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSAnJXMnIGludGVycnVwdGVkIgorbXNnc3RyICLQstGB0L/QvtC80L7Qs9Cw0YLQtdC70YzQvdCw0Y8g0L/RgNC+0LPRgNCw0LzQvNCwIGAlcycg0LfQsNCy0LXRgNGI0LjQu9Cw0YHRjCDQvdC10YPQtNCw0YfQvdC+IgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjQxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gJyVzJyBub3QgZm91bmQiCittc2dzdHIgItCy0YHQv9C+0LzQvtCz0LDRgtC10LvRjNC90LDRjyDQv9GA0L7Qs9GA0LDQvNC80LAgYCVzJyDQvdC1INC90LDQudC00LXQvdCwIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIGJpc29uJ3Mgc3RkaW4gZnJvbSB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGFyZ3VtZW50ICVzIGZvciAlcyIKK21zZ3N0ciAi0L3QtdC00L7Qv9GD0YHRgtC40LzRi9C5INCw0YDQs9GD0LzQtdC90YIgJXMg0LTQu9GPICVzIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIGFyZ3VtZW50ICVzIGZvciAlcyIKK21zZ3N0ciAi0L3QtdC+0LTQvdC+0LfQvdCw0YfQvdGL0Lkg0LDRgNCz0YPQvNC10L3RgiAlcyDQtNC70Y8gJXMiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjE1MworbXNnaWQgIlZhbGlkIGFyZ3VtZW50cyBhcmU6IgorbXNnc3RyICLQlNC+0L/Rg9GB0YLQuNC80YvQtSDQsNGA0LPRg9C80LXQvdGC0Ys6IgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9hbGxvY3MsICV1IGZyZWVkICglLjJmJSUpLlxuIgorbXNnc3RyICIldSBiaXRzZXRfYWxsb2NzLCAldSDQvtGB0LLQvtCx0L7QttC00LXQvdC+ICglLjJmJSUpLlxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9zZXRzLCAldSBjYWNoZWQgKCUuMmYlJSlcbiIKK21zZ3N0ciAiJXUgYml0c2V0X3NldHMsICV1INC60Y3RiNC40YDQvtCy0LDQvdC+ICglLjJmJSUpXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3Jlc2V0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF9yZXNldHMsICV1INC60Y3RiNC40YDQvtCy0LDQvdC+ICglLjJmJSUpXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3Rlc3RzLCAldSBjYWNoZWQgKCUuMmYlJSlcbiIKK21zZ3N0ciAiJXUgYml0c2V0X3Rlc3RzLCAldSDQutGN0YjQuNGA0L7QstCw0L3QviAoJS4yZiUlKVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9saXN0c1xuIgorbXNnc3RyICIldSBiaXRzZXRfbGlzdHNcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5MgorbXNnaWQgImNvdW50IGxvZyBoaXN0b2dyYW1cbiIKK21zZ3N0ciAi0L/QvtGB0YfQuNGC0LDRgtGMINCz0LjRgdGC0L7Qs9GA0LDQvNC80YMg0LbRg9GA0L3QsNC70LBcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5NQorbXNnaWQgInNpemUgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICLQs9C40YHRgtC+0LPRgNCw0LzQvNCwINGA0LDQt9C80LXRgNCwINC20YPRgNC90LDQu9CwXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTgKK21zZ2lkICJkZW5zaXR5IGhpc3RvZ3JhbVxuIgorbXNnc3RyICLQs9C40YHRgtC+0LPRgNCw0LzQvNCwINC/0LvQvtGC0L3QvtGB0YLQuFxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCaXRzZXQgc3RhdGlzdGljczpcbiIKKyJcbiIKK21zZ3N0ciAiIgorItCh0YLQsNGC0LjRgdGC0LjQutCwIGJpdHNldDpcbiIKKyJcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJBY2N1bXVsYXRlZCBydW5zID0gJXVcbiIKK21zZ3N0ciAi0J3QsNC60L7Qv9C70LXQvdC+INC30LDQv9GD0YHQutC+0LIgPSAldVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjU5IGxpYi9iaXRzZXRfc3RhdHMuYzoyNjQKKyMsIGZ1enp5Cittc2dpZCAiY2Fubm90IHJlYWQgc3RhdHMgZmlsZSIKK21zZ3N0ciAi0J3QtSDRg9C00LDQtdGC0YHRjyDQv9GA0L7Rh9C40YLQsNGC0Ywg0YTQsNC50Lsg0YHRgtCw0YLQuNGB0YLQuNC60LguIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjYxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJiYWQgc3RhdHMgZmlsZSBzaXplXG4iCittc2dzdHIgItCd0LXQstC10YDQvdGL0Lkg0YDQsNC30LzQtdGAINGE0LDQudC70LAg0YHRgtCw0YLQuNGB0YLQuNC60LguXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyODcgbGliL2JpdHNldF9zdGF0cy5jOjI4OQorIywgZnV6enkKK21zZ2lkICJjYW5ub3Qgd3JpdGUgc3RhdHMgZmlsZSIKK21zZ3N0ciAi0J3QtSDRg9C00LDQtdGC0YHRjyDQt9Cw0L/QuNGB0LDRgtGMINCyINGE0LDQudC7INGB0YLQsNGC0LjRgdGC0LjQutC4LiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI5MgorIywgZnV6enkKK21zZ2lkICJjYW5ub3Qgb3BlbiBzdGF0cyBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICLQndC1INGD0LTQsNC10YLRgdGPINC+0YLQutGA0YvRgtGMINGE0LDQudC7INGB0YLQsNGC0LjRgdGC0LjQutC4INC00LvRjyDQt9Cw0L/QuNGB0LguIgorCisjOiBsaWIvY2xvc2VvdXQuYzoxMTIKKyMsIGZ1enp5Cittc2dpZCAid3JpdGUgZXJyb3IiCittc2dzdHIgItGE0LDRgtCw0LvRjNC90LDRjyDQvtGI0LjQsdC60LAiCisKKyM6IGxpYi9lcnJvci5jOjE4OAorbXNnaWQgIlVua25vd24gc3lzdGVtIGVycm9yIgorbXNnc3RyICLQndC10LjQt9Cy0LXRgdGC0L3QsNGPINGB0LjRgdGC0LXQvNC90LDRjyDQvtGI0LjQsdC60LAiCisKKyM6IGxpYi9nZXRvcHQuYzo1NDcgbGliL2dldG9wdC5jOjU3NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnJXMnIGlzIGFtYmlndW91czsgcG9zc2liaWxpdGllczoiCittc2dzdHIgIiVzOiDQvdC10L7QtNC90L7Qt9C90LDRh9C90YvQuSDQutC70Y7RhyDCqyVzwrtcbiIKKworIzogbGliL2dldG9wdC5jOjYyNCBsaWIvZ2V0b3B0LmM6NjI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiDQutC70Y7RhyDCqy0tJXPCuyDQtNC+0LvQttC10L0g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGM0YHRjyDQsdC10Lcg0LDRgNCz0YPQvNC10L3RgtCwXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo2MzcgbGliL2dldG9wdC5jOjY0MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnJWMlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczog0LrQu9GO0YcgwqslYyVzwrsg0LTQvtC70LbQtdC9INC40YHQv9C+0LvRjNC30L7QstCw0YLRjNGB0Y8g0LHQtdC3INCw0YDQs9GD0LzQtdC90YLQsFxuIgorCisjOiBsaWIvZ2V0b3B0LmM6Njg1IGxpYi9nZXRvcHQuYzo3MDQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy0tJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiDQutC70Y7RhyDCqyVzwrsg0LTQvtC70LbQtdC9INC40YHQv9C+0LvRjNC30L7QstCw0YLRjNGB0Y8g0YEg0LDRgNCz0YPQvNC10L3RgtC+0LxcbiIKKworIzogbGliL2dldG9wdC5jOjc0MiBsaWIvZ2V0b3B0LmM6NzQ1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiAnLS0lcydcbiIKK21zZ3N0ciAiJXM6INC90LXQuNC30LLQtdGB0YLQvdGL0Lkg0LrQu9GO0YcgwqstLSVzwrtcbiIKKworIzogbGliL2dldG9wdC5jOjc1MyBsaWIvZ2V0b3B0LmM6NzU2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiAnJWMlcydcbiIKK21zZ3N0ciAiJXM6INC90LXQuNC30LLQtdGB0YLQvdGL0Lkg0LrQu9GO0YcgwqslYyVzwrtcbiIKKworIzogbGliL2dldG9wdC5jOjgwNSBsaWIvZ2V0b3B0LmM6ODA4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBvcHRpb24gLS0gJyVjJ1xuIgorbXNnc3RyICIlczog0L3QtdCy0LXRgNC90YvQuSDQutC70Y7RhyAtLSAlY1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6ODYxIGxpYi9nZXRvcHQuYzo4NzggbGliL2dldG9wdC5jOjEwODggbGliL2dldG9wdC5jOjExMDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgLS0gJyVjJ1xuIgorbXNnc3RyICIlczog0LrQu9GO0Ycg0LTQvtC70LbQtdC9INC40YHQv9C+0LvRjNC30L7QstCw0YLRjNGB0Y8g0YEg0LDRgNCz0YPQvNC10L3RgtC+0LwgLS0gJWNcbiIKKworIzogbGliL2dldG9wdC5jOjkzNCBsaWIvZ2V0b3B0LmM6OTUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiVzOiDQvdC10L7QtNC90L7Qt9C90LDRh9C90YvQuSDQutC70Y7RhyDCqy1XICVzwrtcbiIKKworIzogbGliL2dldG9wdC5jOjk3NCBsaWIvZ2V0b3B0LmM6OTkyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczog0LrQu9GO0YcgwqstVyAlc8K7INC00L7Qu9C20LXQvSDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0YzRgdGPINCx0LXQtyDQsNGA0LPRg9C80LXQvdGC0LBcbiIKKworIzogbGliL2dldG9wdC5jOjEwMTMgbGliL2dldG9wdC5jOjEwMzEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczog0LrQu9GO0Ycgwqslc8K7INC00L7Qu9C20LXQvSDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0YzRgdGPINGBINCw0YDQs9GD0LzQtdC90YLQvtC8XG4iCisKKyM6IGxpYi9vYnN0YWNrLmM6NDEzIGxpYi9vYnN0YWNrLmM6NDE1IGxpYi94YWxsb2MtZGllLmM6MzQKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICLQv9Cw0LzRj9GC0Ywg0LjRgdGH0LXRgNC/0LDQvdCwIgorCisjOiBsaWIvc3Bhd24tcGlwZS5jOjE0MCBsaWIvc3Bhd24tcGlwZS5jOjE0MyBsaWIvc3Bhd24tcGlwZS5jOjI2NAorIzogbGliL3NwYXduLXBpcGUuYzoyNjcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZSIKK21zZ3N0ciAi0L3QtSDRg9C00LDQtdGC0YHRjyDQt9Cw0LrRgNGL0YLRjCDRhNCw0LnQuyIKKworIzogbGliL3NwYXduLXBpcGUuYzoyMzQgbGliL3NwYXduLXBpcGUuYzozNDggbGliL3dhaXQtcHJvY2Vzcy5jOjI4MgorIzogbGliL3dhaXQtcHJvY2Vzcy5jOjM1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdWJwcm9jZXNzIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzoKKyMuIEdldCB0cmFuc2xhdGlvbnMgZm9yIG9wZW4gYW5kIGNsb3NpbmcgcXVvdGF0aW9uIG1hcmtzLgorIy4gVGhlIG1lc3NhZ2UgY2F0YWxvZyBzaG91bGQgdHJhbnNsYXRlICJgIiB0byBhIGxlZnQKKyMuIHF1b3RhdGlvbiBtYXJrIHN1aXRhYmxlIGZvciB0aGUgbG9jYWxlLCBhbmQgc2ltaWxhcmx5IGZvcgorIy4gIiciLiAgRm9yIGV4YW1wbGUsIGEgRnJlbmNoIFVuaWNvZGUgbG9jYWwgc2hvdWxkIHRyYW5zbGF0ZQorIy4gdGhlc2UgdG8gVSswMEFCIChMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRQorIy4gUVVPVEFUSU9OIE1BUkspLCBhbmQgVSswMEJCIChSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUKKyMuIFFVT1RBVElPTiBNQVJLKSwgcmVzcGVjdGl2ZWx5LgorIy4KKyMuIElmIHRoZSBjYXRhbG9nIGhhcyBubyB0cmFuc2xhdGlvbiwgd2Ugd2lsbCB0cnkgdG8KKyMuIHVzZSBVbmljb2RlIFUrMjAxOCAoTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspIGFuZAorIy4gVW5pY29kZSBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykuICBJZiB0aGUKKyMuIGN1cnJlbnQgbG9jYWxlIGlzIG5vdCBVbmljb2RlLCBsb2NhbGVfcXVvdGluZ19zdHlsZQorIy4gd2lsbCBxdW90ZSAnbGlrZSB0aGlzJywgYW5kIGNsb2NhbGVfcXVvdGluZ19zdHlsZSB3aWxsCisjLiBxdW90ZSAibGlrZSB0aGlzIi4gIFlvdSBzaG91bGQgYWx3YXlzIGluY2x1ZGUgdHJhbnNsYXRpb25zCisjLiBmb3IgImAiIGFuZCAiJyIgZXZlbiBpZiBVKzIwMTggYW5kIFUrMjAxOSBhcmUgYXBwcm9wcmlhdGUKKyMuIGZvciB5b3VyIGxvY2FsZS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFya3NfaW5fb3RoZXJfbGFuZ3VhZ2VzPgorIy4gYW5kIHVzZSBnbHlwaHMgc3VpdGFibGUgZm9yIHlvdXIgbGFuZ3VhZ2UuCisjOiBsaWIvcXVvdGVhcmcuYzozMTIKK21zZ2lkICJgIgorbXNnc3RyICLCqyIKKworIzogbGliL3F1b3RlYXJnLmM6MzEzCittc2dpZCAiJyIKK21zZ3N0ciAiwrsiCisKKyM6IGxpYi90aW1ldmFyLmM6NDc1Cittc2dpZCAiIgorIlxuIgorIkV4ZWN1dGlvbiB0aW1lcyAoc2Vjb25kcylcbiIKK21zZ3N0ciAiIgorIlxuIgorItCS0YDQtdC80Y8g0LLRi9C/0L7Qu9C90LXQvdC40Y8gKNGB0LXQui4pXG4iCisKKyM6IGxpYi90aW1ldmFyLmM6NTI1Cittc2dpZCAiIFRPVEFMICAgICAgICAgICAgICAgICA6IgorbXNnc3RyICIg0KHQo9Cc0JzQkCAgICAgICAgICAgICAgICAgOiIKKworIzogbGliL3RpbWV2YXIuYzo1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZSBpbiAlczogJWxkLiUwNmxkICglbGQlJSlcbiIKK21zZ3N0ciAi0LLRgNC10LzRjyDQsiAlczogJWxkLiUwNmxkICglbGQlJSlcbiIKKworIzogbGliL3czMnNwYXduLmg6NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiX29wZW5fb3NmaGFuZGxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvdzMyc3Bhd24uaDo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdG9yZSBmZCAlZDogZHVwMiBmYWlsZWQiCittc2dzdHIgIiIKKworIzogbGliL3dhaXQtcHJvY2Vzcy5jOjIyMyBsaWIvd2FpdC1wcm9jZXNzLmM6MjU1IGxpYi93YWl0LXByb2Nlc3MuYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6Mjc0IGxpYi93YWl0LXByb2Nlc3MuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyBnb3QgZmF0YWwgc2lnbmFsICVkIgorbXNnc3RyICIiCisKKyN+IG1zZ2lkICJzdGF0ZSAlZCIKKyN+IG1zZ3N0ciAi0YHQvtGB0YLQvtGP0L3QuNC1ICVkIgorCisjLCBmdXp6eQorI34gbXNnaWQgInN0cmF5ICdAJyIKKyN+IG1zZ3N0ciAi0L3QtdC60L7RgNGA0LXQutGC0L3Ri9C5IMKrQMK7IgorCisjfiBtc2dpZCAiIgorI34gIkdlbmVyYXRlIExBTFIoMSkgYW5kIEdMUiBwYXJzZXJzLlxuIgorI34gIlxuIgorI34gbXNnc3RyICIiCisjfiAi0JPQtdC90LXRgNC40YDRg9C10YIgTEFMUigxKSDQuCBHTFIg0L/QsNGA0YHQtdGA0YsuXG4iCisjfiAiXG4iCisKKyN+IG1zZ2lkICJpbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZTogJXMiCisjfiBtc2dzdHIgItC90LXQtNC+0L/Rg9GB0YLQuNC80LDRjyDRjdC60YDQsNC90LjRgNGD0Y7RidCw0Y8g0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70YzQvdC+0YHRgtGMOiAlcyIKKworI34gbXNnaWQgInVucmVjb2duaXplZCBlc2NhcGUgc2VxdWVuY2U6ICVzIgorI34gbXNnc3RyICLQvdC10YDQsNGB0L/QvtC30L3QsNC90L3QsNGPINGN0LrRgNCw0L3QuNGA0YPRjtGJ0LDRjyDQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvRjNC90L7RgdGC0Yw6ICVzIgorCisjfiBtc2dpZCAidG9rZW5zICVzIGFuZCAlcyBib3RoIGFzc2lnbmVkIG51bWJlciAlZCIKKyN+IG1zZ3N0ciAi0L7QsdC10LjQvCDQu9C10LrRgdC10LzQsNC8ICVzINC4ICVzINC/0YDQuNGB0LLQvtC10L0g0L3QvtC80LXRgCAlZCIKKworI34gbXNnaWQgIiVzOiBpbGxlZ2FsIG9wdGlvbiAtLSAlY1xuIgorI34gbXNnc3RyICIlczog0L3QtdC00L7Qv9GD0YHRgtC40LzRi9C5INC60LvRjtGHIC0tICVjXG4iCisKKyN+IG1zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gYCVzJyBjb3VsZCBub3QgYmUgaW52b2tlZCIKKyN+IG1zZ3N0ciAi0L3QtSDRg9C00LDQtdGC0YHRjyDQstGL0L/QvtC70L3QuNGC0Ywg0LLRgdC/0L7QvNC+0LPQsNGC0LXQu9GM0L3Rg9GOINC/0YDQvtCz0YDQsNC80LzRgyDCqyVzwrsiCisKKyN+IG1zZ2lkICJ3YXJuaW5nOiAiCisjfiBtc2dzdHIgItC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LU6ICIKKworI34gbXNnaWQgIkdOVSBiaXNvbiBnZW5lcmF0ZXMgcGFyc2VycyBmb3IgTEFMUigxKSBncmFtbWFycy5cbiIKKyN+IG1zZ3N0ciAiR05VIGJpc29uINCz0LXQvdC10YDQuNGA0YPQtdGCINCw0L3QsNC70LjQt9Cw0YLQvtGA0Ysg0LTQu9GPINCz0YDQsNC80LzQsNGC0LjQuiBMQUxSKDEpLlxuIgorCisjfiBtc2dpZCAiIgorI34gIklmIGEgbG9uZyBvcHRpb24gc2hvd3MgYW4gYXJndW1lbnQgYXMgbWFuZGF0b3J5LCB0aGVuIGl0IGlzIG1hbmRhdG9yeVxuIgorI34gImZvciB0aGUgZXF1aXZhbGVudCBzaG9ydCBvcHRpb24gYWxzby4gIFNpbWlsYXJseSBmb3Igb3B0aW9uYWwgYXJndW1lbnRzLlxuIgorI34gbXNnc3RyICIiCisjfiAi0JXRgdC70Lgg0LTQu9C40L3QvdCw0Y8g0YTQvtGA0LzQsCDQutC70Y7Rh9CwINC+0L/RgNC10LTQtdC70Y/QtdGCINCw0YDQs9GD0LzQtdC90YIg0LrQsNC6INC+0LHRj9C30LDRgtC10LvRjNC90YvQuSwg0YLQviDQvtC9ICIKKyN+ICLRgtCw0LrQttC1XG4iCisjfiAi0Y/QstC70Y/QtdGC0YHRjyDQvtCx0Y/Qt9Cw0YLQtdC70YzQvdGL0Lwg0LTQu9GPINC60L7RgNC+0YLQutC+0Lkg0YTQvtGA0LzRiy4gINCi0L4g0LbQtSDQutCw0YHQsNC10YLRgdGPINC90LXQvtCx0Y/Qt9Cw0YLQtdC70YzQvdGL0YVcbiIKKyN+ICLQsNGA0LPRg9C80LXQvdGC0L7Qsi5cbiIKKworIywgZnV6enkKKyN+IG1zZ2lkICIiCisjfiAiT3BlcmF0aW9uIG1vZGVzOlxuIgorI34gIiAgLWgsIC0taGVscCAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCisjfiAiICAtViwgLS12ZXJzaW9uICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIKKyN+ICIgIC15LCAtLXlhY2MgICAgICBlbXVsYXRlIFBPU0lYIHlhY2NcbiIKKyN+IG1zZ3N0ciAiIgorI34gItCg0LXQttC40LzRiyDRhNGD0L3QutGG0LjQvtC90LjRgNC+0LLQsNC90LjRjzpcbiIKKyN+ICIgIC1oLCAtLWhlbHAgICAgICAgICAgICAg0LLRi9Cy0LXRgdGC0Lgg0Y3RgtGDINGB0L/RgNCw0LLQutGDINC4INCy0YvQudGC0LhcbiIKKyN+ICIgIC1WLCAtLXZlcnNpb24gICAgICAgICAg0LLRi9Cy0LXRgdGC0Lgg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L4g0LLQtdGA0YHQuNC4INC4INCy0YvQudGC0LhcbiIKKyN+ICIgICAgICAtLXByaW50LWxvY2FsZWRpciAg0LLRi9Cy0LXRgdGC0Lgg0LrQsNGC0LDQu9C+0LMsINGB0L7QtNC10YDQttCw0YnQuNC5INC30LDQstC40YHQuNC80YvQtSDQvtGCINC70L7QutCw0LvQuCAiCisjfiAi0LTQsNC90L3Ri9C1XG4iCisjfiAiICAteSwgLS15YWNjICAgICAgICAgICAgINC40LzQuNGC0LjRgNC+0LLQsNGC0YwgUE9TSVggeWFjY1xuIgorCisjfiBtc2dpZCAiUE9TSVggZm9yYmlkcyBkZWNsYXJhdGlvbnMgaW4gdGhlIGdyYW1tYXIiCisjfiBtc2dzdHIgIlBPU0lYINC30LDQv9GA0LXRidCw0LXRgiDQv9C+0LzQtdGJ0LDRgtGMINC+0L/QuNGB0LDQvdC40Y8g0LIg0LPRgNCw0LzQvNCw0YLQuNC60LUiCisKKyN+IG1zZ2lkICJSdWxlcyBuZXZlciByZWR1Y2VkIgorI34gbXNnc3RyICLQn9GA0LDQstC40LvQsCDQvdC1INGB0LLQtdC00LXQvdGLIgorCisjfiBtc2dpZCAidXNlbGVzcyBydWxlIgorI34gbXNnc3RyICLQsdC10YHQv9C+0LvQtdC30L3QvtC1INC/0YDQsNCy0LjQu9C+IgorCisjfiBtc2dpZCAidXNlbGVzcyBub250ZXJtaW5hbDogJXMiCisjfiBtc2dzdHIgItCx0LXRgdC/0L7Qu9C10LfQvdGL0LUg0L3QtdGC0LXRgNC80LjQvdCw0Ls6ICVzIgorCisjfiBtc2dpZCAiVXNlbGVzcyBub250ZXJtaW5hbHMiCisjfiBtc2dzdHIgItCR0LXRgdC/0L7Qu9C10LfQvdGL0LUg0L3QtdGC0LXRgNC80LjQvdCw0LvRiyIKKworI34gbXNnaWQgIlRlcm1pbmFscyB3aGljaCBhcmUgbm90IHVzZWQiCisjfiBtc2dzdHIgItCd0LXQuNGB0L/QvtC70YzQt9C+0LLQsNC90L3Ri9C1INGC0LXRgNC80LjQvdCw0LvRiyIKKworI34gbXNnaWQgIlVzZWxlc3MgcnVsZXMiCisjfiBtc2dzdHIgItCR0LXRgdC/0L7Qu9C10LfQvdGL0LUg0L/RgNCw0LLQuNC70LAiCisKKyN+IG1zZ2lkICIlZCBydWxlIG5ldmVyIHJlZHVjZWRcbiIKKyN+IG1zZ2lkX3BsdXJhbCAiJWQgcnVsZXMgbmV2ZXIgcmVkdWNlZFxuIgorI34gbXNnc3RyWzBdICIlZCDQv9GA0LDQstC40LvQviDQvdC1INGB0LLQtdC00LXQvdC+XG4iCisjfiBtc2dzdHJbMV0gIiVkINC/0YDQsNCy0LjQu9CwINC90LUg0YHQstC10LTQtdC90L5cbiIKKyN+IG1zZ3N0clsyXSAiJWQg0L/RgNCw0LLQuNC7INC90LUg0YHQstC10LTQtdC90L5cbiIKKworI34gbXNnaWQgIiVkIHVzZWxlc3Mgbm9udGVybWluYWwiCisjfiBtc2dpZF9wbHVyYWwgIiVkIHVzZWxlc3Mgbm9udGVybWluYWxzIgorI34gbXNnc3RyWzBdICIlZCDQsdC10YHQv9C+0LvQtdC30L3Ri9C5INC90LXRgtC10YDQvNC40L3QsNC7IgorI34gbXNnc3RyWzFdICIlZCDQsdC10YHQv9C+0LvQtdC30L3Ri9GFINC90LXRgtC10YDQvNC40L3QsNC70LAiCisjfiBtc2dzdHJbMl0gIiVkINCx0LXRgdC/0L7Qu9C10LfQvdGL0YUg0L3QtdGC0LXRgNC80LjQvdCw0LvQvtCyIgorCisjfiBtc2dpZCAiIGFuZCAiCisjfiBtc2dzdHIgIiDQuCAiCisKKyN+IG1zZ2lkICIlZCB1c2VsZXNzIHJ1bGUiCisjfiBtc2dpZF9wbHVyYWwgIiVkIHVzZWxlc3MgcnVsZXMiCisjfiBtc2dzdHJbMF0gIiVkINCx0LXRgdC/0L7Qu9C10LfQvdC+0LUg0L/RgNCw0LLQuNC70L4iCisjfiBtc2dzdHJbMV0gIiVkINCx0LXRgdC/0L7Qu9C10LfQvdGL0YUg0L/RgNCw0LLQuNC70LAiCisjfiBtc2dzdHJbMl0gIiVkINCx0LXRgdC/0L7Qu9C10LfQvdGL0YUg0L/RgNCw0LLQuNC7IgorCisjLCBmdXp6eQorI34gbXNnaWQgIm1pc3NpbmcgYHsnIGluIGAlcyciCisjfiBtc2dzdHIgItC+0YLRgdGD0YLRgdGC0LLRg9C10YIgYHsnINCyICVzIgorCisjfiBtc2dpZCAiaW52YWxpZCAkIHZhbHVlIgorI34gbXNnc3RyICLQvdC10LLQtdGA0L3QvtC1ICQg0LfQvdCw0YfQtdC90LjQtSIKKworI34gbXNnaWQgImNvbmZsaWN0aW5nIHByZWNlZGVuY2VzIGZvciAlcyBhbmQgJXMiCisjfiBtc2dzdHIgItC/0YDQvtGC0LjQstC+0YDQtdGH0LjQstGL0LUg0L/RgNC40L7RgNC40YLQtdGC0Ysg0LTQu9GPICVzINC4ICVzIgorCisjfiBtc2dpZCAiY29uZmxpY3RpbmcgYXNzb2NpYXRpdml0aWVzIGZvciAlcyAoJXMpIGFuZCAlcyAoJXMpIgorI34gbXNnc3RyICLQv9GA0L7RgtC40LLQvtGA0LXRh9C40LLRi9C1INC30L3QsNGH0LXQvdC40Y8g0LDRgdGB0L7RhtC40LDRgtC40LLQvdC+0YHRgtC4INC00LvRjyAlcyAoJXMpINC4ICVzICglcykiCisKKyN+IG1zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gYCVzJyBmYWlsZWQgKGV4aXQgc3RhdHVzICVkKSIKKyN+IG1zZ3N0ciAiIgorI34gItCy0YHQv9C+0LzQvtCz0LDRgtC10LvRjNC90LDRjyDQv9GA0L7Qs9GA0LDQvNC80LAgYCVzJyDQt9Cw0LLQtdGA0YjQuNC70LDRgdGMINC90LXRg9C00LDRh9C90L4gKNC60L7QtCDQt9Cw0LLQtdGA0YjQtdC90LjRjyAlZCkiCisKKyN+IG1zZ2lkICJ0b28gbWFueSBzdGF0ZXMgKG1heCAlZCkiCisjfiBtc2dzdHIgItGB0LvQuNGI0LrQvtC8INC80L3QvtCz0L4g0YHQvtGB0YLQvtGP0L3QuNC5ICjQvNCw0LrRgdC40LzQsNC70YzQvdC+ICVkKSIKKworI34gbXNnaWQgInJlZHVjZSIKKyN+IG1zZ3N0ciAi0LLRi9Cy0L7QtCIKKworI34gbXNnaWQgInNoaWZ0IgorI34gbXNnc3RyICLRgdC00LLQuNCzIgorCisjfiBtc2dpZCAiJWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0IgorI34gbXNnaWRfcGx1cmFsICIlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIgorI34gbXNnc3RyWzBdICIlZCDQutC+0L3RhNC70LjQutGCINGB0LTQstC40LPQsC/QstGL0LLQvtC00LAiCisjfiBtc2dzdHJbMV0gIiVkINC60L7QvdGE0LvQuNC60YLQsCDRgdC00LLQuNCz0LAv0LLRi9Cy0L7QtNCwIgorI34gbXNnc3RyWzJdICIlZCDQutC+0L3RhNC70LjQutGC0L7QsiDRgdC00LLQuNCz0LAv0LLRi9Cy0L7QtNCwIgorCisjfiBtc2dpZCAiYW5kIgorI34gbXNnc3RyICLQuCIKKworI34gbXNnaWQgIlN0YXRlICVkIGNvbnRhaW5zICIKKyN+IG1zZ3N0ciAi0KHQvtGB0YLQvtGP0L3QuNC1ICVkINGB0L7QtNC10YDQttC40YIgIgorCisjfiBtc2dpZCAiY29uZmxpY3RzOiAiCisjfiBtc2dzdHIgItC60L7QvdGE0LvQuNC60YLRizogIgorCisjfiBtc2dpZCAiJXMgY29udGFpbnMgIgorI34gbXNnc3RyICIlcyDRgdC+0LTQtdGA0LbQuNGCICIKKworI34gbXNnaWQgImAlcycgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIKKyN+IG1zZ3N0ciAiYCVzJyDQsdC+0LvRjNGI0LUg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YLRgdGPIgorCisjfiBtc2dpZCAiJXM6IG5vIGdyYW1tYXIgZmlsZSBnaXZlblxuIgorI34gbXNnc3RyICIlczog0L3QtSDQt9Cw0LTQsNC9INGE0LDQudC7INGBINCz0YDQsNC80LzQsNGC0LjQutC+0LlcbiIKKworI34gbXNnaWQgIiVzOiBleHRyYSBhcmd1bWVudHMgaWdub3JlZCBhZnRlciBgJXMnXG4iCisjfiBtc2dzdHIgIiVzOiDQu9C40YjQvdC40LUg0LDRgNCz0YPQvNC10L3RgtGLINC/0L7RgdC70LUgYCVzJyDQuNCz0L3QvtGA0LjRgNC+0LLQsNC90YtcbiIKKworI34gbXNnaWQgInRvbyBtYW55IGdvdG9zIChtYXggJWQpIgorI34gbXNnc3RyICLRgdC70LjRiNC60L7QvCDQvNC90L7Qs9C+IGdvdG8gKNC80LDQutGB0LjQvNCw0LvRjNC90L4gJWQpIgorCisjfiBtc2dpZCAidW5leHBlY3RlZCBgLycgZm91bmQgYW5kIGlnbm9yZWQiCisjfiBtc2dzdHIgItCy0YHRgtGA0LXRh9C10L0g0Lgg0L/RgNC+0LjQs9C90L7RgNC40YDQvtCy0LDQvSDQvdC10L7QttC40LTQsNC90L3Ri9C5INGB0LjQvNCy0L7QuyBgLyciCisKKyN+IG1zZ2lkICJ1bnRlcm1pbmF0ZWQgY29tbWVudCIKKyN+IG1zZ3N0ciAi0L3QtdC30LDQutC+0L3Rh9C10L3QvdGL0Lkg0LrQvtC80LzQtdC90YLQsNGA0LjQuSIKKworI34gbXNnaWQgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiCisjfiBtc2dzdHIgItC90LXQvtC20LjQtNCw0L3QvdGL0Lkg0LrQvtC90LXRhiDRhNCw0LnQu9CwIgorCisjfiBtc2dpZCAidW5lc2NhcGVkIG5ld2xpbmUgaW4gY29uc3RhbnQiCisjfiBtc2dzdHIgItC90LXRjdC60YDQsNC90LjRgNC+0LLQsNC90L3Ri9C5INC/0LXRgNC10LLQvtC0INGB0YLRgNC+0LrQuCDQsiDQutC+0L3RgdGC0LDQvdGC0LUiCisKKyN+IG1zZ2lkICJvY3RhbCB2YWx1ZSBvdXRzaWRlIHJhbmdlIDAuLi4yNTU6IGBcXCVvJyIKKyN+IG1zZ3N0ciAi0LLQvtGB0YzQvNC10YDQuNGH0L3QsNGPINCy0LXQu9C40YfQuNC90LAg0LfQsCDQv9GA0LXQtNC10LvQsNC80Lgg0LTQuNCw0L/QsNC30L7QvdCwIDAuLi4yNTU6IGBcXCVvJyIKKworI34gbXNnaWQgImhleGFkZWNpbWFsIHZhbHVlIGFib3ZlIDI1NTogYFxceCV4JyIKKyN+IG1zZ3N0ciAi0YjQtdGB0YLQvdCw0LTRhtCw0YLQtdGA0LjRh9C90LDRjyDQstC10LvQuNGH0LjQvdCwINC/0YDQtdCy0YvRiNCw0LXRgiAyNTU6IGBcXHgleCciCisKKyN+IG1zZ2lkICJ1bmtub3duIGVzY2FwZSBzZXF1ZW5jZTogYFxcJyBmb2xsb3dlZCBieSBgJXMnIgorI34gbXNnc3RyICLQvdC10LjQt9Cy0LXRgdGC0L3QsNGPIGVzY2FwZS3Qv9C+0YHQu9C10LTQvtCy0LDRgtC10LvRjNC90L7RgdGC0Yw6IGAlcycg0L/QvtGB0LvQtSBgXFwnIgorCisjfiBtc2dpZCAidW50ZXJtaW5hdGVkIHR5cGUgbmFtZSBhdCBlbmQgb2YgZmlsZSIKKyN+IG1zZ3N0ciAi0L3QtdC30LDQutC+0L3Rh9C10L3QvdC+0LUg0LjQvNGPINGC0LjQv9CwINCyINC60L7QvdGG0LUg0YTQsNC50LvQsCIKKworI34gbXNnaWQgInVudGVybWluYXRlZCB0eXBlIG5hbWUiCisjfiBtc2dzdHIgItC90LXQt9Cw0LrQvtC90YfQtdC90L3QvtC1INC40LzRjyDRgtC40L/QsCIKKworI34gbXNnaWQgInVzZSBcIi4uLlwiIGZvciBtdWx0aS1jaGFyYWN0ZXIgbGl0ZXJhbCB0b2tlbnMiCisjfiBtc2dzdHIgItC40YHQv9C+0LvRjNC30YPQudGC0LUgXCIuLi5cIiDQtNC70Y8g0LzQvdC+0LPQvtGB0LjQvNCy0L7Qu9GM0L3Ri9GFINC70LjRgtC10YDQsNC70YzQvdGL0YUg0LvQtdC60YHQtdC8IgorCisjfiBtc2dpZCAiYCVzJyBzdXBwb3J0cyBubyBhcmd1bWVudDogJXMiCisjfiBtc2dzdHIgImAlcycg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YIg0LDRgNCz0YPQvNC10L3RgtCwICVzIgorCisjfiBtc2dpZCAiYCVzJyByZXF1aXJlcyBhbiBhcmd1bWVudCIKKyN+IG1zZ3N0ciAi0LrQu9GO0YcgYCVzJyDQtNC+0LvQttC10L0g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGM0YHRjyDRgSDQsNGA0LPRg9C80LXQvdGC0L7QvCIKKworI34gbXNnaWQgIiAgIChydWxlICVkKSIKKyN+IG1zZ3N0ciAiICAgKNC/0YDQsNCy0LjQu9C+ICVkKSIKKworI34gbXNnaWQgIiAgICAlLTRzXHRlcnJvciAobm9uYXNzb2NpYXRpdmUpXG4iCisjfiBtc2dzdHIgIiAgICAlLTRzXHTQvtGI0LjQsdC60LAgKNC90LXQsNGB0YHQvtGG0LjQsNGC0LjQstC90LDRjylcbiIKKworI34gbXNnaWQgIiIKKyN+ICIgICAgJGRlZmF1bHRcdHJlZHVjZSB1c2luZyBydWxlICVkICglcylcbiIKKyN+ICJcbiIKKyN+IG1zZ3N0ciAiIgorI34gIiAgICAkZGVmYXVsdFx00LLRi9Cy0L7QtCDRgSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdC8INC/0YDQsNCy0LjQu9CwICVkICglcylcbiIKKyN+ICJcbiIKKworI34gbXNnaWQgIiAgICAlLTRzXHRbcmVkdWNlIHVzaW5nIHJ1bGUgJWQgKCVzKV1cbiIKKyN+IG1zZ3N0ciAiICAgICUtNHNcdFvQstGL0LLQvtC0INGBINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10Lwg0L/RgNCw0LLQuNC70LAgJWQgKCVzKV1cbiIKKworI34gbXNnaWQgIiAgICAlLTRzXHRyZWR1Y2UgdXNpbmcgcnVsZSAlZCAoJXMpXG4iCisjfiBtc2dzdHIgIiAgICAlLTRzXHTQstGL0LLQvtC0INGBINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10Lwg0L/RgNCw0LLQuNC70LAgJWQgKCVzKVxuIgorCisjfiBtc2dpZCAiICAgICRkZWZhdWx0XHRyZWR1Y2UgdXNpbmcgcnVsZSAlZCAoJXMpXG4iCisjfiBtc2dzdHIgIiAgICAkZGVmYXVsdFx00LLRi9Cy0L7QtCDRgSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdC8INC/0YDQsNCy0LjQu9CwICVkICglcylcbiIKKworI34gbXNnaWQgIiAgICAkZGVmYXVsdFx0YWNjZXB0XG4iCisjfiBtc2dzdHIgIiAgICAkZGVmYXVsdFx00L/RgNC40L3Rj9GC0LjQtVxuIgorCisjfiBtc2dpZCAiICAgIE5PIEFDVElPTlNcbiIKKyN+IG1zZ3N0ciAiICAgINCd0JXQoiDQlNCV0JnQodCi0JLQmNCZXG4iCisKKyN+IG1zZ2lkICJOdW1iZXIsIExpbmUsIFJ1bGUiCisjfiBtc2dzdHIgItCd0L7QvNC10YAsINCh0YLRgNC+0LrQsCwg0J/RgNCw0LLQuNC70L4iCisKKyN+IG1zZ2lkICIgICUzZCAlM2QgJXMgLT4iCisjfiBtc2dzdHIgIiAgJTNkICUzZCAlcyAtPiIKKworI34gbXNnaWQgIiAgIFNraXBwaW5nIHRvIG5leHQgXFxuIgorI34gbXNnc3RyICIgICDQn9GA0L7Qv9GD0YHQuiDQtNC+INGB0LvQtdC00YPRjtGJ0LXQs9C+IFxcbiIKKworI34gbXNnaWQgIiAgIFNraXBwaW5nIHRvIG5leHQgJWMiCisjfiBtc2dzdHIgIiAgINCf0YDQvtC/0YPRgdC6INC00L4g0YHQu9C10LTRg9GO0YnQtdCz0L4gJWMiCisKKyN+IG1zZ2lkICJ1bnRlcm1pbmF0ZWQgc3RyaW5nIgorI34gbXNnc3RyICLQvdC10LfQsNC60L7QvdGH0LXQvdC90LDRjyDRgdGC0YDQvtC60LAiCisKKyN+IG1zZ2lkICIlcyBpcyBpbnZhbGlkIgorI34gbXNnc3RyICLQvdC10LLQtdGA0L3Ri9C5INC30L3QsNC6ICVzIgorCisjfiBtc2dpZCAidW50ZXJtaW5hdGVkIGAleycgZGVmaW5pdGlvbiIKKyN+IG1zZ3N0ciAi0L3QtdC30LDQutC+0L3Rh9C10L3QvdC+0LUg0L7Qv9GA0LXQtNC10LvQtdC90LjQtSBgJXsnIgorCisjfiBtc2dpZCAiUHJlbWF0dXJlIEVPRiBhZnRlciAlcyIKKyN+IG1zZ3N0ciAi0J/RgNC10LbQtNC10LLRgNC10LzQtdC90L3Ri9C5INC60L7QvdC10YYg0YTQsNC50LvQsCDQv9C+0YHQu9C1ICVzIgorCisjfiBtc2dpZCAiYCVzJyBpcyBpbnZhbGlkIGluICVzIgorI34gbXNnc3RyICJgJXMnINC90LXQstC10YDQvdC+INCyICVzIgorCisjfiBtc2dpZCAiJXR5cGUgZGVjbGFyYXRpb24gaGFzIG5vIDx0eXBlbmFtZT4iCisjfiBtc2dzdHIgItC+0L/QuNGB0LDQvdC40LUgJXR5cGUg0L3QtSDQuNC80LXQtdGCIDzQuNC80Y9f0YLQuNC/0LA+IgorCisjfiBtc2dpZCAiaW52YWxpZCAlJXR5cGUgZGVjbGFyYXRpb24gZHVlIHRvIGl0ZW06ICVzIgorI34gbXNnc3RyICLQvdC10LLQtdGA0L3QvtC1INC+0L/QuNGB0LDQvdC40LUgJSV0eXBlINC40Lct0LfQsCDRjdC70LXQvNC10L3RgtCwOiAlcyIKKworI34gbXNnaWQgImludmFsaWQgdGV4dCAoJXMpIC0gbnVtYmVyIHNob3VsZCBiZSBhZnRlciBpZGVudGlmaWVyIgorI34gbXNnc3RyICLQvdC10LLQtdGA0L3Ri9C5INGC0LXQutGB0YIgKCVzKSAtINGH0LjRgdC70L4g0LTQvtC70LbQvdC+INGB0LvQtdC00L7QstCw0YLRjCDQt9CwINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0L7QvCIKKworI34gbXNnaWQgInVubWF0Y2hlZCAlcyIKKyN+IG1zZ3N0ciAi0L3QtdC/0LDRgNC90LDRjyAlcyIKKworI34gbXNnaWQgImFyZ3VtZW50IG9mICUlZXhwZWN0IGlzIG5vdCBhbiBpbnRlZ2VyIgorI34gbXNnc3RyICLQsNGA0LPRg9C80LXQvdGCICUlZXhwZWN0INC90LUg0Y/QstC70Y/QtdGC0YHRjyDRhtC10LvRi9C8INGH0LjRgdC70L7QvCIKKworI34gbXNnaWQgInVucmVjb2duaXplZCBpdGVtICVzLCBleHBlY3RlZCBhbiBpZGVudGlmaWVyIgorI34gbXNnc3RyICLQvdC10YDQsNGB0L/QvtC30L3QsNC90L3Ri9C5INGN0LvQtdC80LXQvdGCICVzLCDQvtC20LjQtNCw0LvRgdGPINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAIgorCisjfiBtc2dpZCAiZXhwZWN0ZWQgc3RyaW5nIGNvbnN0YW50IGluc3RlYWQgb2YgJXMiCisjfiBtc2dzdHIgItCy0LzQtdGB0YLQviAlcyDQvtC20LjQtNCw0LvQsNGB0Ywg0YHRgtGA0L7QutC+0LLQsNGPINC/0L7RgdGC0L7Rj9C90L3QsNGPIgorCisjfiBtc2dpZCAibm8gaW5wdXQgZ3JhbW1hciIKKyN+IG1zZ3N0ciAi0L3QtdGCINCy0YXQvtC00L3QvtC5INCz0YDQsNC80LzQsNGC0LjQutC4IgorCisjfiBtc2dpZCAiaWxsLWZvcm1lZCBydWxlOiBpbml0aWFsIHN5bWJvbCBub3QgZm9sbG93ZWQgYnkgY29sb24iCisjfiBtc2dzdHIgItC90LXQstC10YDQvdC+0LUg0L/RgNCw0LLQuNC70L46INC00LLQvtC10YLQvtGH0LjQtSDQvdC1INGB0LvQtdC00YPQtdGCINC30LAg0L3QsNGH0LDQu9GM0L3Ri9C8INGB0LjQvNCy0L7Qu9C+0LwiCisKKyN+IG1zZ2lkICJncmFtbWFyIHN0YXJ0cyB3aXRoIHZlcnRpY2FsIGJhciIKKyN+IG1zZ3N0ciAi0LPRgNCw0LzQvNCw0YLQuNC60LAg0L3QsNGH0LjQvdCw0LXRgtGB0Y8g0YEg0LLQtdGA0YLQuNC60LDQu9GM0L3QvtC5INGH0LXRgNGC0YsiCisKKyN+IG1zZ2lkICJwcmV2aW91cyBydWxlIGxhY2tzIGFuIGVuZGluZyBgOyciCisjfiBtc2dzdHIgItCyINC/0YDQtdC00YvQtNGD0YnQtdC8INC/0YDQsNCy0LjQu9C1INC+0YLRgdGD0YLRgdGC0LLRg9C10YIg0LfQsNCy0LXRgNGI0LDRjtGJ0LDRjyBgOyciCisKKyN+IG1zZ2lkICJ0d28gQHByZWMncyBpbiBhIHJvdyIKKyN+IG1zZ3N0ciAi0LTQstCwIEBwcmVjINC/0L7QtNGA0Y/QtCIKKworI34gbXNnaWQgIiUlZ3VhcmQgcHJlc2VudCBidXQgJSVzZW1hbnRpY19wYXJzZXIgbm90IHNwZWNpZmllZCIKKyN+IG1zZ3N0ciAiJSVndWFyZCDQv9GA0LjRgdGD0YLRgdGC0LLRg9C10YIsINCwICUlc2VtYW50aWNfcGFyc2VyINC90LUg0LfQsNC00LDQvSIKKworI34gbXNnaWQgInR3byBhY3Rpb25zIGF0IGVuZCBvZiBvbmUgcnVsZSIKKyN+IG1zZ3N0ciAi0LTQstCwINC00LXQudGB0YLQstC40Y8g0LIg0LrQvtC90YbQtSDQvtC00L3QvtCz0L4g0L/RgNCw0LLQuNC70LAiCisKKyN+IG1zZ2lkICJtYXhpbXVtIHRhYmxlIHNpemUgKCVkKSBleGNlZWRlZCIKKyN+IG1zZ3N0ciAi0L/RgNC10LLRi9GI0LXQvSDQvNCw0LrRgdC40LzQsNC70YzQvdGL0Lkg0YDQsNC30LzQtdGAINGC0LDQsdC70LjRhtGLICglZCkiCisKKyN+IG1zZ2lkICIgICAgJCAgIFx0Z28gdG8gc3RhdGUgJWRcbiIKKyN+IG1zZ3N0ciAiICAgICQgICBcdNC/0LXRgNC10YXQvtC0INCyINGB0L7RgdGC0L7Rj9C90LjQtSAlZFxuIgorCisjfiBtc2dpZCAidW50ZXJtaW5hdGVkICVndWFyZCBjbGF1c2UiCisjfiBtc2dzdHIgItC90LXQt9Cw0LrQvtC90YfQtdC90L3Ri9C5INC+0L/QtdGA0LDRgtC+0YAgJWd1YXJkIgorCisjfiBtc2dpZCAiIDEgc2hpZnQvcmVkdWNlIGNvbmZsaWN0IgorI34gbXNnc3RyICIgMSDQutC+0L3RhNC70LjQutGCINGB0LTQstC40LPQsC/QstGL0LLQvtC00LAiCisKKyN+IG1zZ2lkICIlcyBjb250YWlucyIKKyN+IG1zZ3N0ciAiJXMg0YHQvtC00LXRgNC20LjRgiIKKworI34gbXNnaWQgIkRFUklWRVMiCisjfiBtc2dzdHIgIkRFUklWRVMiCisKKyN+IG1zZ2lkICIlcyBkZXJpdmVzIgorI34gbXNnc3RyICIlcyDQstGL0LLQvtC00LjRgiIKKworI34gbXNnaWQgIiVzOiBpbnRlcm5hbCBlcnJvcjogJXNcbiIKKyN+IG1zZ3N0ciAiJXM6INCy0L3Rg9GC0YDQtdC90L3Rj9GPINC+0YjQuNCx0LrQsDogJXNcbiIKKworI34gbXNnaWQgIkVudGVyaW5nIHNldF9udWxsYWJsZSIKKyN+IG1zZ3N0ciAi0JLRhdC+0LQg0LIgc2V0X251bGxhYmxlIgorCisjfiBtc2dpZCAiXHRcdC8qIGVtcHR5ICovIgorI34gbXNnc3RyICJcdFx0Lyog0L/Rg9GB0YLQviAqLyIKKworI34gbXNnaWQgIm11bHRpcGxlICUlaGVhZGVyX2V4dGVuc2lvbiBkZWNsYXJhdGlvbnMiCisjfiBtc2dzdHIgItC80L3QvtC20LXRgdGC0LLQtdC90L3Ri9C1INC+0L/QuNGB0LDQvdC40Y8gJSVoZWFkZXJfZXh0ZW5zaW9uIgorCisjfiBtc2dpZCAibXVsdGlwbGUgJSVzb3VyY2VfZXh0ZW5zaW9uIGRlY2xhcmF0aW9ucyIKKyN+IG1zZ3N0ciAi0LzQvdC+0LbQtdGB0YLQstC10L3QvdGL0LUg0L7Qv9C40YHQsNC90LjRjyAlJXNvdXJjZV9leHRlbnNpb24iCisKKyN+IG1zZ2lkICIiCisjfiAiVmFyaWFibGVzXG4iCisjfiAiLS0tLS0tLS0tXG4iCisjfiAiXG4iCisjfiBtc2dzdHIgIiIKKyN+ICLQn9C10YDQtdC80LXQvdC90YvQtVxuIgorI34gIi0tLS0tLS0tLS1cbiIKKyN+ICJcbiIKKworI34gbXNnaWQgIlZhbHVlICBTcHJlYyAgICBTYXNzb2MgICAgVGFnXG4iCisjfiBtc2dzdHIgItCX0L3QsNGHICAg0J/RgNC40L7RgCAgICDQkNGB0YHQvtGGICAgICDQotC10LNcbiIKKworI34gbXNnaWQgIiIKKyN+ICJSdWxlc1xuIgorI34gIi0tLS0tXG4iCisjfiAiXG4iCisjfiBtc2dzdHIgIiIKKyN+ICLQn9GA0LDQstC40LvQsFxuIgorI34gIi0tLS0tLS1cbiIKKyN+ICJcbiIKKworI34gbXNnaWQgIiIKKyN+ICJSdWxlcyBpbnRlcnByZXRlZFxuIgorI34gIi0tLS0tLS0tLS0tLS0tLS0tXG4iCisjfiAiXG4iCisjfiBtc2dzdHIgIiIKKyN+ICLQmNC90YLQtdGA0L/RgNC10YLQuNGA0L7QstCw0L3QvdGL0LUg0L/RgNCw0LLQuNC70LBcbiIKKyN+ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorI34gIlxuIgorCisjfiBtc2dpZCAiIgorI34gInJlZHVjZWQgJXMgZGVmaW5lcyAlZCB0ZXJtaW5hbCVzLCAlZCBub250ZXJtaW5hbCVzLCBhbmQgJWQgcHJvZHVjdGlvbiVzLlxuIgorI34gbXNnc3RyICIiCisjfiAi0LLRi9Cy0LXQtNC10L3QvdGL0LkgJXMg0L7Qv9GA0LXQtNC10LvRj9C10YIgJWQg0YLQtdGA0LzQuNC90LDQu9C+0LIlcywgJWQg0L3QtdGC0LXRgNC80LjQvdCw0LvQvtCyJXMsINC4ICVkINC/0YDQsNCy0LjQuyAiCisjfiAi0LLRi9Cy0L7QtNCwJXMuXG4iCisKKyN+IG1zZ2lkICJAJXMgaXMgaW52YWxpZCIKKyN+IG1zZ3N0ciAi0L3QtdCy0LXRgNC90YvQuSDQt9C90LDQuiBAJXMiCmRpZmYgLS1naXQgYS9wby9zci5nbW8gYi9wby9zci5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ3MjA3MgotLS0gL2Rldi9udWxsCisrKyBiL3BvL3NyLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9zci5wbyBiL3BvL3NyLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZmU3MWQKLS0tIC9kZXYvbnVsbAorKysgYi9wby9zci5wbwpAQCAtMCwwICsxLDExOTAgQEAKKyMgU2VyYmlhbiB0cmFuc2xhdGlvbiBmb3IgYmlzb24uCisjIENvcHlyaWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGJpc29uIHBhY2thZ2UuCisjINCc0LjRgNC+0YHQu9Cw0LIg0J3QuNC60L7Qu9C40ZsgPG1pcm9zbGF2bmlrb2xpY0Byb2NrZXRtYWlsLmNvbT4sIDIwMTIuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBiaXNvbi0yLjYuMlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBidWctYmlzb25AZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEyLTEyLTEyIDE2OjA5KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEyLTA4LTA5IDIyOjM4KzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6INCc0LjRgNC+0YHQu9Cw0LIg0J3QuNC60L7Qu9C40ZsgPG1pcm9zbGF2bmlrb2xpY0Byb2NrZXRtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBTZXJiaWFuIDxnbnVAcHJldm9kLm9yZz5cbiIKKyJMYW5ndWFnZTogc3JcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTM7IHBsdXJhbD0obiUxMD09MSAmJiBuJTEwMCE9MTEgPyAwIDogbiUxMD49MiAmJiBuIgorIiUxMDw9NCAmJiAobiUxMDA8MTAgfHwgbiUxMDA+PTIwKSA/IDEgOiAyKTtcbiIKKworIzogc3JjL2NvbXBsYWluLmM6MTIwIHNyYy9jb21wbGFpbi5jOjEzMSBzcmMvY29tcGxhaW4uYzoxNDAgc3JjL2NvbXBsYWluLmM6MTg4CisjOiBzcmMvY29tcGxhaW4uYzoxOTgKK21zZ2lkICJ3YXJuaW5nIgorbXNnc3RyICLRg9C/0L7Qt9C+0YDQtdGa0LUiCisKKyM6IHNyYy9jb21wbGFpbi5jOjE1MSBzcmMvY29tcGxhaW4uYzoxNjAgc3JjL2NvbXBsYWluLmM6MTY3CisjLCBmdXp6eQorbXNnaWQgImVycm9yIgorbXNnc3RyICLQutC+0LHQvdCwINCz0YDQtdGI0LrQsCIKKworIzogc3JjL2NvbXBsYWluLmM6MjA4IHNyYy9jb21wbGFpbi5jOjIxNQorbXNnaWQgImZhdGFsIGVycm9yIgorbXNnc3RyICLQutC+0LHQvdCwINCz0YDQtdGI0LrQsCIKKworIzogc3JjL2NvbmZsaWN0cy5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIHNoaWZ0IgorbXNnc3RyICIgICAg0KHRg9C60L7QsSDQv9GA0LDQstC40LvQsCDigJ4lZOKAnCDQuCDRgdC40LzQsdC+0LvQsCDigJ4lc+KAnCDRmNC1INGA0LXRiNC10L0g0LrQsNC+INC/0L7QvNCw0LoiCisKKyM6IHNyYy9jb25mbGljdHMuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyByZWR1Y2UiCittc2dzdHIgIiAgICDQodGD0LrQvtCxINC/0YDQsNCy0LjQu9CwIOKAniVk4oCcINC4INGB0LjQvNCx0L7Qu9CwIOKAniVz4oCcINGY0LUg0YDQtdGI0LXQvSDQutCw0L4g0YHQvNCw0ZrQtdGa0LUiCisKKyM6IHNyYy9jb25mbGljdHMuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyBhbiBlcnJvciIKK21zZ3N0ciAiICAgINCh0YPQutC+0LEg0L/RgNCw0LLQuNC70LAg4oCeJWTigJwg0Lgg0YHQuNC80LHQvtC70LAg4oCeJXPigJwg0ZjQtSDRgNC10YjQtdC9INC60LDQviDQs9GA0LXRiNC60LAiCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCBzaGlmdC9yZWR1Y2UsICVkIHJlZHVjZS9yZWR1Y2VcbiIKK21zZ3N0ciAi0YHRg9C60L7QsdC4OiAlZCDQv9C+0LzQsNC6L9GB0LzQsNGa0LXRmtC1LCAlZCDRgdC80LDRmtC10ZrQtS/RgdC80LDRmtC10ZrQtVxuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgc2hpZnQvcmVkdWNlXG4iCittc2dzdHIgItGB0YPQutC+0LHQuDogJWQg0L/QvtC80LDQui/RgdC80LDRmtC10ZrQtVxuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgcmVkdWNlL3JlZHVjZVxuIgorbXNnc3RyICLRgdGD0LrQvtCx0Lg6ICVkINGB0LzQsNGa0LXRmtC1L9GB0LzQsNGa0LXRmtC1XG4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhdGUgJWQgIgorbXNnc3RyICLQodGC0LDRmtC1OiAlZCAiCisKKyM6IHNyYy9jb25mbGljdHMuYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSVleHBlY3QtcnIgYXBwbGllcyBvbmx5IHRvIEdMUiBwYXJzZXJzIgorbXNnc3RyICIlJdC+0YfQtdC60YPRmC3RgNGAINGB0LUg0L/RgNC40LzQtdGa0YPRmNC1INGB0LDQvNC+INC90LAg0JPQm9CgINC+0LHRgNCw0ZLQuNCy0LDRh9C1IgorCisjOiBzcmMvY29uZmxpY3RzLmM6NjE2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICVkIHNoaWZ0L3JlZHVjZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiZXhwZWN0ZWQgJWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAi0L7Rh9C10LrQuNCy0LDQvSDRmNC1ICVkINGB0YPQutC+0LEg0L/QvtC80LDQutCwL9GB0LzQsNGa0LXRmtCwIgorbXNnc3RyWzFdICLQvtGH0LXQutC40LLQsNC90LAg0YHRgyAlZCDRgdGD0LrQvtCx0LAg0L/QvtC80LDQutCwL9GB0LzQsNGa0LXRmtCwIgorbXNnc3RyWzJdICLQvtGH0LXQutC40LLQsNC90L4g0ZjQtSAlZCDRgdGD0LrQvtCx0LAg0L/QvtC80LDQutCwL9GB0LzQsNGa0LXRmtCwIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICVkIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3QiCittc2dpZF9wbHVyYWwgImV4cGVjdGVkICVkIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3RzIgorbXNnc3RyWzBdICLQvtGH0LXQutC40LLQsNC9INGY0LUgJWQg0YHRg9C60L7QsSDRgdC80LDRmtC10ZrQsC/RgdC80LDRmtC10ZrQsCIKK21zZ3N0clsxXSAi0L7Rh9C10LrQuNCy0LDQvdCwINGB0YMgJWQg0YHRg9C60L7QsdCwINGB0LzQsNGa0LXRmtCwL9GB0LzQsNGa0LXRmtCwIgorbXNnc3RyWzJdICLQvtGH0LXQutC40LLQsNC90L4g0ZjQtSAlZCDRgdGD0LrQvtCx0LAg0YHQvNCw0ZrQtdGa0LAv0YHQvNCw0ZrQtdGa0LAiCisKKyM6IHNyYy9maWxlcy5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IG9wZW4iCittc2dzdHIgIiVzOiDQvdC1INC80L7Qs9GDINC00LAg0L7RgtCy0L7RgNC40LwiCisKKyM6IHNyYy9maWxlcy5jOjEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnB1dC9vdXRwdXQgZXJyb3IiCittc2dzdHIgItGD0LvQsNC30L3QsC/QuNC30LvQsNC30L3QsCDQs9GA0LXRiNC60LAiCisKKyM6IHNyYy9maWxlcy5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2UgZmlsZSIKK21zZ3N0ciAi0L3QtSDQvNC+0LPRgyDQtNCwINC30LDRgtCy0L7RgNC40Lwg0LTQsNGC0L7RgtC10LrRgyIKKworIzogc3JjL2ZpbGVzLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIG92ZXJ3cml0ZSB0aGUgaW5wdXQgZmlsZSAlcyIKK21zZ3N0ciAi0L7QtNCx0LjRmNCw0Lwg0LTQsCDQv9GA0LXRgdC90LjQvNC40Lwg0LjQt9Cy0L7RgNC90YMg0LTQsNGC0L7RgtC10LrRgyDigJ4lc+KAnCIKKworIzogc3JjL2ZpbGVzLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0aW5nIG91dHB1dHMgdG8gZmlsZSAlcyIKK21zZ3N0ciAi0YHRg9C60L7QsdGZ0LDQstCw0Lwg0LjQt9C70LDQt9C1INGDINC00LDRgtC+0YLQtdC60YMg4oCeJXPigJwiCisKKyM6IHNyYy9nZXRhcmdzLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeSBgJXMgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKK21zZ3N0ciAi0J/RgNC+0LHQsNGY0YLQtSDigJ4lcyAtLWhlbHDigJwg0LfQsCDQstC40YjQtSDQv9C+0LTQsNGC0LDQutCwLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgW09QVElPTl0uLi4gRklMRVxuIgorbXNnc3RyICLQo9C/0L7RgtGA0LXQsdCwOiAlcyBb0J7Qn9Cm0JjQiNCQXS4uLiDQlNCQ0KLQntCi0JXQmtCQXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzAyCittc2dpZCAiIgorIkdlbmVyYXRlIGEgZGV0ZXJtaW5pc3RpYyBMUiBvciBnZW5lcmFsaXplZCBMUiAoR0xSKSBwYXJzZXIgZW1wbG95aW5nXG4iCisiTEFMUigxKSwgSUVMUigxKSwgb3IgY2Fub25pY2FsIExSKDEpIHBhcnNlciB0YWJsZXMuICBJRUxSKDEpIGFuZFxuIgorImNhbm9uaWNhbCBMUigxKSBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorItCh0YLQstC+0YDQuNGC0LUg0L7QtNGA0LXQtNC90LjRh9C60L4g0JvQoCDQuNC70Lgg0YPQvtC/0YjRgtC10L3QviDQm9CgICjQk9Cb0KApINGD0L/QvtGB0LvQtdGa0LUg0L7QsdGA0LDRktC40LLQsNGH0LBcbiIKKyLQm9CQ0JvQoCgxKSwg0JjQldCb0KAoMSkg0LjQu9C4INGC0LDQsdC10LvQtSDRg9GC0LLRgNGS0LXQvdC+0LMg0JvQoCgxKSDQvtCx0YDQsNGS0LjQstCw0YfQsC4g0J/QvtC00YDRiNC60LAg0LfQsFxuIgorItCY0JXQm9CgKDEpINC4INGD0YLQstGA0ZLQtdC90Lgg0JvQoCgxKSDRmNC1INC/0YDQvtCx0L3QsC5cbiIKKyJcbiIKKworIzogc3JjL2dldGFyZ3MuYzozMDkKK21zZ2lkICIiCisiTWFuZGF0b3J5IGFyZ3VtZW50cyB0byBsb25nIG9wdGlvbnMgYXJlIG1hbmRhdG9yeSBmb3Igc2hvcnQgb3B0aW9ucyB0b28uXG4iCittc2dzdHIgIiIKKyLQntCx0LDQstC10LfQvdC4INCw0YDQs9GD0LzQtdC90YLQuCDQt9CwINC00YPQs9C1INC+0L/RhtC40ZjQtSDRgdGDINC+0LHQsNCy0LXQt9C90Lgg0Lgg0LfQsCDQutGA0LDRgtC60LUg0L7Qv9GG0LjRmNC1INGC0LDQutC+0ZLQtS5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozMTIKK21zZ2lkICJUaGUgc2FtZSBpcyB0cnVlIGZvciBvcHRpb25hbCBhcmd1bWVudHMuXG4iCittc2dzdHIgItCY0YHRgtC+INGY0LUg0YLQsNGH0L3QviDQuCDQt9CwINC+0L/RhtC40L7QvdCw0LvQvdC1INCw0YDQs9GD0LzQtdC90YLQtS5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozMTYKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIk9wZXJhdGlvbiBtb2RlczpcbiIKKyIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCisiICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorIiAgICAgIC0tcHJpbnQtbG9jYWxlZGlyICAgICAgb3V0cHV0IGRpcmVjdG9yeSBjb250YWluaW5nIGxvY2FsZS1kZXBlbmRlbnQgIgorImRhdGFcbiIKKyIgICAgICAtLXByaW50LWRhdGFkaXIgICAgICAgIG91dHB1dCBkaXJlY3RvcnkgY29udGFpbmluZyBza2VsZXRvbnMgYW5kIFhTTFRcbiIKKyIgIC15LCAtLXlhY2MgICAgICAgICAgICAgICAgIGVtdWxhdGUgUE9TSVggWWFjY1xuIgorIiAgLVcsIC0td2FybmluZ3NbPUNBVEVHT1JZXSAgcmVwb3J0IHRoZSB3YXJuaW5ncyBmYWxsaW5nIGluIENBVEVHT1JZXG4iCisiICAtZiwgLS1mZWF0dXJlWz1GRUFUVVJFXSAgICBhY3RpdmF0ZSBtaXNjZWxsYW5lb3VzIGZlYXR1cmVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyLQoNC10LbQuNC80Lgg0LTQtdC70L7QstCw0ZrQsDpcbiIKKyIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgICAg0L/RgNC40LrQsNC30YPRmNC1INC+0LLRgyDQv9C+0LzQvtGbXG4iCisiICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICAgINC40YHQv9C40YHRg9GY0LUg0L/QvtC00LDRgtC60LUg0L4g0LjQt9C00LDRmtGDINC4INC40LfQu9Cw0LfQuFxuIgorIiAgICAgIC0tcHJpbnQtbG9jYWxlZGlyICAgICAgICDQuNC30LvQsNC30L3QuCDQtNC40YDQtdC60YLQvtGA0LjRmNGD0Lwg0LrQvtGY0Lgg0YHQsNC00YDQttC4INC80LXRgdC90L4tIgorItC30LDQstC40YHQvdC1INC/0L7QtNCw0YLQutC1XG4iCisiICAgICAgLS1wcmludC1kYXRhZGlyICAgICAgICAgINC40LfQu9Cw0LfQvdC4INC00LjRgNC10LrRgtC+0YDQuNGY0YPQvCDQutC+0ZjQuCDRgdCw0LTRgNC20Lgg0YHRgtGA0YPQutGC0YPRgNGDINC4ICIKKyLQmNC60YHQodCb0KJcbiIKKyIgIC15LCAtLXlhY2MgICAgICAgICAgICAgICAgICAg0L7Qv9C+0L3QsNGI0LAg0J/QntCh0JjQmtChLdC+0LIg0IjQsNGG0YZcbiIKKyIgIC1XLCAtLXdhcm5pbmdzWz3QmtCQ0KLQldCT0J7QoNCY0IjQkF0gINC40LfQstC10YjRgtCw0LLQsCDQviDRg9C/0L7Qt9C+0YDQtdGa0LjQvNCwINGDINCa0JDQotCV0JPQntCg0JjQiNCYXG4iCisiXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFyc2VyOlxuIgorIiAgLUwsIC0tbGFuZ3VhZ2U9TEFOR1VBR0UgICAgICAgICAgc3BlY2lmeSB0aGUgb3V0cHV0IHByb2dyYW1taW5nIGxhbmd1YWdlXG4iCisiICAtUywgLS1za2VsZXRvbj1GSUxFICAgICAgICAgICAgICBzcGVjaWZ5IHRoZSBza2VsZXRvbiB0byB1c2VcbiIKKyIgIC10LCAtLWRlYnVnICAgICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnQgdGhlIHBhcnNlciBmb3IgZGVidWdnaW5nXG4iCisiICAgICAgLS1sb2NhdGlvbnMgICAgICAgICAgICAgICAgICBlbmFibGUgbG9jYXRpb24gc3VwcG9ydFxuIgorIiAgLUQsIC0tZGVmaW5lPU5BTUVbPVZBTFVFXSAgICAgICAgc2ltaWxhciB0byAnJWRlZmluZSBOQU1FIFwiVkFMVUVcIidcbiIKKyIgIC1GLCAtLWZvcmNlLWRlZmluZT1OQU1FWz1WQUxVRV0gIG92ZXJyaWRlICclZGVmaW5lIE5BTUUgXCJWQUxVRVwiJ1xuIgorIiAgLXAsIC0tbmFtZS1wcmVmaXg9UFJFRklYICAgICAgICAgcHJlcGVuZCBQUkVGSVggdG8gdGhlIGV4dGVybmFsIHN5bWJvbHNcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQgYnkgJy1EYXBpLnByZWZpeD1QUkVGSVgnXG4iCisiICAtbCwgLS1uby1saW5lcyAgICAgICAgICAgICAgICAgICBkb24ndCBnZW5lcmF0ZSAnI2xpbmUnIGRpcmVjdGl2ZXNcbiIKKyIgIC1rLCAtLXRva2VuLXRhYmxlICAgICAgICAgICAgICAgIGluY2x1ZGUgYSB0YWJsZSBvZiB0b2tlbiBuYW1lc1xuIgorbXNnc3RyICIiCisiUGFyc2VyOlxuIgorIiAgLUwsIC0tbGFuZ3VhZ2U90IjQldCX0JjQmiAgICAgICAgICAgICAgICDQvdCw0LLQvtC00Lgg0LjQt9C70LDQt9C90Lgg0ZjQtdC30LjQuiDQv9GA0L7Qs9GA0LDQvNC40YDQsNGa0LBcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICjQvtCy0L4g0ZjQtSDQv9GA0L7QsdC90LAg0YTRg9C90LrRhtC40ZjQsClcbiIKKyIgIC1TLCAtLXNrZWxldG9uPdCU0JDQotCe0KLQldCa0JAgICAgICAgICAgICAg0L7QtNGA0LXRktGD0ZjQtSDRgdC60LXQu9C10YIg0LfQsCDQutC+0YDQuNGI0ZvQtdGa0LVcbiIKKyIgIC10LCAtLWRlYnVnICAgICAgICAgICAgICAgICAgICAgICAgINC80LXRgNC4INC+0LHRgNCw0ZLQuNCy0LDRhyDQt9CwINGD0LrQu9Cw0ZrQsNGa0LUg0LPRgNC10YjQsNC60LBcbiIKKyIgICAgICAtLWxvY2F0aW9ucyAgICAgICAgICAgICAgICAgICAgINGD0LrRmdGD0YfRg9GY0LUg0L/QvtC00YDRiNC60YMg0LzQtdGB0YLQsFxuIgorIiAgLUQsIC0tZGVmaW5lPdCd0JDQl9CY0JJbPdCS0KDQldCU0J3QntCh0KJdICAgICAgINGB0LvQuNGH0L3QviDQutCw0L4g4oCeJWRlZmluZSDQndCQ0JfQmNCSICfQktCg0JXQlNCd0J7QodCiJ+KAnFxuIgorIiAgLUYsIC0tZm9yY2UtZGVmaW5lPdCd0JDQl9CY0JJbPdCS0JXQlNCd0J7QodCiXSAg0L/RgNC10L/QuNGB0YPRmNC1IOKAniVkZWZpbmUg0J3QkNCX0JjQkiAn0JLQoNCV0JTQndCe0KHQoifigJxcbiIKKyIgIC1wLCAtLW5hbWUtcHJlZml4PdCf0KDQldCk0JjQmtChICAgICAgICAgICDQtNC+0LTQsNGY0LUg0J/QoNCV0KTQmNCa0KEg0YHQv9C+0ZnQvdC40Lwg0YHQuNC80LHQvtC70LjQvNCwXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDQv9GA0LXQstCw0LfQuNGS0LXQvdC+INGY0LUg0YPQtyDigJ4tRGFwaS4iCisicHJlZml4PdCf0KDQldCk0JjQmtCh4oCcXG4iCisiICAtbCwgLS1uby1saW5lcyAgICAgICAgICAgICAgICAgICAgICDQvdC1INGB0YLQstCw0YDQsCDRgdC80LXRgNC90LjRhtGDIOKAniNsaW5l4oCcXG4iCisiICAtaywgLS10b2tlbi10YWJsZSAgICAgICAgICAgICAgICAgICDRg9C60ZnRg9GH0YPRmNC1INGC0LDQsdC10LvRgyDQvdCw0LfQuNCy0LAg0YHQuNC80LHQvtC70LBcbiIKKyJcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNDYKKyMsIGZ1enp5Cittc2dpZCAiIgorIk91dHB1dDpcbiIKKyIgICAgICAtLWRlZmluZXNbPUZJTEVdICAgICAgIGFsc28gcHJvZHVjZSBhIGhlYWRlciBmaWxlXG4iCisiICAtZCAgICAgICAgICAgICAgICAgICAgICAgICBsaWtld2lzZSBidXQgY2Fubm90IHNwZWNpZnkgRklMRSAoZm9yIFBPU0lYICIKKyJZYWNjKVxuIgorIiAgLXIsIC0tcmVwb3J0PVRISU5HUyAgICAgICAgYWxzbyBwcm9kdWNlIGRldGFpbHMgb24gdGhlIGF1dG9tYXRvblxuIgorIiAgICAgIC0tcmVwb3J0LWZpbGU9RklMRSAgICAgd3JpdGUgcmVwb3J0IHRvIEZJTEVcbiIKKyIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIHNhbWUgYXMgYC0tcmVwb3J0PXN0YXRlJ1xuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg9UFJFRklYICAgc3BlY2lmeSBhIFBSRUZJWCBmb3Igb3V0cHV0IGZpbGVzXG4iCisiICAtbywgLS1vdXRwdXQ9RklMRSAgICAgICAgICBsZWF2ZSBvdXRwdXQgdG8gRklMRVxuIgorIiAgLWcsIC0tZ3JhcGhbPUZJTEVdICAgICAgICAgYWxzbyBvdXRwdXQgYSBncmFwaCBvZiB0aGUgYXV0b21hdG9uXG4iCisiICAteCwgLS14bWxbPUZJTEVdICAgICAgICAgICBhbHNvIG91dHB1dCBhbiBYTUwgcmVwb3J0IG9mIHRoZSBhdXRvbWF0b25cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGUgWE1MIHNjaGVtYSBpcyBleHBlcmltZW50YWwpXG4iCittc2dzdHIgIiIKKyLQmNC30LvQsNC3OlxuIgorIiAgICAgIC0tZGVmaW5lc1s90JTQkNCi0J7QotCV0JrQkF0gICAg0YHRgtCy0LDRgNCwINC00LDRgtC+0YLQtdC60YMg0LfQsNCz0LvQsNCy0ZnQsFxuIgorIiAgLWQgICAgICAgICAgICAgICAgICAgICAgICAgINC40YHRgtC+INGC0LDQutC+INCw0LvQuCDQvdC1INC80L7QttC1INC00LAg0L3QsNCy0LXQtNC1INCU0JDQotCe0KLQldCa0KMgKNC30LAgIgorItCf0J7QodCY0JrQoSDQiNCw0YbRhilcbiIKKyIgIC1yLCAtLXJlcG9ydD3QodCi0JLQkNCg0JggICAgICAgICDRgtCw0LrQvtGS0LUg0YDQtdC30YPQu9GC0LjRgNCwINC/0L7RmNC10LTQuNC90L7RgdGC0LjQvNCwINC+INCw0YPRgtC+0LzQsNGC0YNcbiIKKyIgICAgICAtLXJlcG9ydC1maWxlPdCU0JDQotCe0KLQldCa0JAgINC30LDQv9C40YHRg9GY0LUg0LjQt9Cy0LXRiNGC0LDRmCDRgyDQlNCQ0KLQntCi0JXQmtCjXG4iCisiICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgICAg0LjRgdGC0L4g0LrQsNC+IOKAni0tcmVwb3J0PXN0YXRl4oCcXG4iCisiICAtYiwgLS1maWxlLXByZWZpeD3Qn9Cg0JXQpNCY0JrQoSAgINC90LDQstC+0LTQuCDQn9Cg0JXQpNCY0JrQoSDQt9CwINC00LDRgtC+0YLQtdC60LUg0LjQt9C70LDQt9CwXG4iCisiICAtbywgLS1vdXRwdXQ90JTQkNCi0J7QotCV0JrQkCAgICAgICDQuNGB0L/QuNGB0YPRmNC1INC40LfQu9Cw0Lcg0YMg0JTQkNCi0J7QotCV0JrQo1xuIgorIiAgLWcsIC0tZ3JhcGhbPdCU0JDQotCe0KLQldCa0JBdICAgICAg0YLQsNC60L7RktC1INC00LDRmNC1INCz0YDQsNGE0LjQuiDQsNGD0YLQvtC80LDRgtCwXG4iCisiICAteCwgLS14bWxbPdCU0JDQotCe0KLQldCa0JBdICAgICAgICDRgtCw0LrQvtGS0LUg0LTQsNGY0LUg0JjQutGB0JzQmyDQuNC30LLQtdGI0YLQsNGYINC+INCw0YPRgtC+0LzQsNGC0YNcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo0JjQutGB0JzQmyDRiNC10LzQsCDRmNC1INC40YHQv9C40YLQuNCy0LDRh9C60LApXG4iCisiXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzYxCisjLCBmdXp6eQorbXNnaWQgIiIKKyJXYXJuaW5nIGNhdGVnb3JpZXMgaW5jbHVkZTpcbiIKKyIgIGBtaWRydWxlLXZhbHVlcycgIHVuc2V0IG9yIHVudXNlZCBtaWRydWxlIHZhbHVlc1xuIgorIiAgYHlhY2MnICAgICAgICAgICAgaW5jb21wYXRpYmlsaXRpZXMgd2l0aCBQT1NJWCBZYWNjXG4iCisiICBgY29uZmxpY3RzLXNyJyAgICBTL1IgY29uZmxpY3RzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgY29uZmxpY3RzLXJyJyAgICBSL1IgY29uZmxpY3RzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgZGVwcmVjYXRlZCcgICAgICBvYnNvbGV0ZSBjb25zdHJ1Y3RzXG4iCisiICBgb3RoZXInICAgICAgICAgICBhbGwgb3RoZXIgd2FybmluZ3MgKGVuYWJsZWQgYnkgZGVmYXVsdClcbiIKKyIgIGBhbGwnICAgICAgICAgICAgIGFsbCB0aGUgd2FybmluZ3NcbiIKKyIgIGBuby1DQVRFR09SWScgICAgIHR1cm4gb2ZmIHdhcm5pbmdzIGluIENBVEVHT1JZXG4iCisiICBgbm9uZScgICAgICAgICAgICB0dXJuIG9mZiBhbGwgdGhlIHdhcm5pbmdzXG4iCisiICBgZXJyb3InICAgICAgICAgICB0cmVhdCB3YXJuaW5ncyBhcyBlcnJvcnNcbiIKK21zZ3N0ciAiIgorItCa0LDRgtC10LPQvtGA0LjRmNC1INGD0L/QvtC30L7RgNC10ZrQsCDRg9C60ZnRg9GH0YPRmNGDOlxuIgorIiAg4oCebWlkcnVsZS12YWx1ZXPigJwgINC90LXQv9C+0LTQtdGI0LXQvdC1INC40LvQuCDQvdC10LrQvtGA0LjRiNGb0LXQvdC1INCy0YDQtdC00L3QvtGB0YLQuCDRgdGA0LXQtNGa0LXQsyDQv9GA0LDQstC40LvQsFxuIgorIiAg4oCeeWFjY+KAnCAgICAgICAgICAgINC90LXRgdCw0LPQu9Cw0YHQvdC+0YHRgtC4INGB0LAg0J/QntCh0JjQmtChINCI0LDRhtGGLdC+0LxcbiIKKyIgIOKAnmNvbmZsaWN0cy1zcuKAnCAgICDQoS/QoCDRgdGD0LrQvtCx0LggKNGD0L3QsNC/0YDQtdC0INGD0LrRmdGD0YfQtdC90L4pXG4iCisiICDigJ5jb25mbGljdHMtcnLigJwgICAg0KAv0KAg0YHRg9C60L7QsdC4ICjRg9C90LDQv9GA0LXQtCDRg9C60ZnRg9GH0LXQvdC+KVxuIgorIiAg4oCeb3RoZXLigJwgICAgICAgICAgINGB0LLQsCDQtNGA0YPQs9CwINGD0L/QvtC30L7RgNC10ZrQsCAo0YPQvdCw0L/RgNC10LQg0YPQutGZ0YPRh9C10L3QvilcbiIKKyIgIOKAnmFsbOKAnCAgICAgICAgICAgICDRgdCy0LAg0YPQv9C+0LfQvtGA0LXRmtCwXG4iCisiICDigJ5uby1DQVRFR09SWeKAnCAgICAg0LjRgdC60ZnRg9GH0YPRmNC1INGD0L/QvtC30L7RgNC10ZrQsCDRgyDQmtCQ0KLQldCT0J7QoNCY0IjQmFxuIgorIiAg4oCebm9uZeKAnCAgICAgICAgICAgINC40YHQutGZ0YPRh9GD0ZjQtSDRgdCy0LAg0YPQv9C+0LfQvtGA0LXRmtCwXG4iCisiICDigJ5lcnJvcuKAnCAgICAgICAgICAg0YPQv9C+0LfQvtGA0LXRmtCwINGB0LzQsNGC0YDQsCDQs9GA0LXRiNC60LDQvNCwXG4iCisiXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzc2Cittc2dpZCAiIgorIlRISU5HUyBpcyBhIGxpc3Qgb2YgY29tbWEgc2VwYXJhdGVkIHdvcmRzIHRoYXQgY2FuIGluY2x1ZGU6XG4iCisiICBgc3RhdGUnICAgICAgICBkZXNjcmliZSB0aGUgc3RhdGVzXG4iCisiICBgaXRlbXNldCcgICAgICBjb21wbGV0ZSB0aGUgY29yZSBpdGVtIHNldHMgd2l0aCB0aGVpciBjbG9zdXJlXG4iCisiICBgbG9va2FoZWFkJyAgICBleHBsaWNpdGx5IGFzc29jaWF0ZSBsb29rYWhlYWQgdG9rZW5zIHRvIGl0ZW1zXG4iCisiICBgc29sdmVkJyAgICAgICBkZXNjcmliZSBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIHNvbHZpbmdcbiIKKyIgIGBhbGwnICAgICAgICAgIGluY2x1ZGUgYWxsIHRoZSBhYm92ZSBpbmZvcm1hdGlvblxuIgorIiAgYG5vbmUnICAgICAgICAgZGlzYWJsZSB0aGUgcmVwb3J0XG4iCittc2dzdHIgIiIKKyLQodCi0JLQkNCg0Jgg0L/RgNC10LTRgdGC0LDQstGZ0LDRmNGDINC30LDRgNC10LfQvtC8INC+0LTQstC+0ZjQtdC90LUg0YDQtdGH0Lgg0YMg0LrQvtGY0LUg0LzQvtCz0YMg0LTQsCDRgdC/0LDQtNCw0ZjRgzpcbiIKKyIgIOKAnnN0YXRl4oCcICAgICAgICDQvtC/0LjRgdGD0ZjQtSDRgdGC0LDRmtCwXG4iCisiICDigJ5pdGVtc2V04oCcICAgICAg0LTQvtCy0YDRiNCw0LLQsCDQv9C+0LTQtdGI0LDQstCw0ZrQsCDQutGZ0YPRh9C90LUg0YHRgtCw0LLQutC1INGa0LjRhdC+0LLQuNC8INC30LDQstGA0YjQtdGC0LrQvtC8XG4iCisiICDigJ5sb29rYWhlYWTigJwgICAg0LjQt9GA0LjRh9C40YLQviDQv9GA0LjQtNGA0YPQttGD0ZjQtSDRgdC40LzQsdC+0LvQtSDQv9GA0LXQtNGD0LLQuNC00LAg0YHRgtCw0LLQutCw0LzQsFxuIgorIiAg4oCec29sdmVk4oCcICAgICAgINC+0L/QuNGB0YPRmNC1INGA0LXRiNCw0LLQsNGa0LUg0YHRg9C60L7QsdCwINC/0L7QvNCw0LrQsC/RgdC80LDRmtC10ZrQsFxuIgorIiAg4oCeYWxs4oCcICAgICAgICAgINGD0LrRmdGD0YfRg9GY0LUg0YHQstC1INCz0L7RgNGa0LUg0L/QvtC00LDRgtC60LVcbiIKKyIgIOKAnm5vbmXigJwgICAgICAgICDQuNGB0LrRmdGD0YfRg9GY0LUg0LjQt9Cy0LXRiNGC0LDRmFxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM4NworbXNnaWQgIiIKKyJGRUFUVVJFIGlzIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMgdGhhdCBjYW4gaW5jbHVkZTpcbiIKKyIgIGBjYXJldCcgICAgICAgIHNob3cgZXJyb3JzIHdpdGggY2FyZXRzXG4iCisiICBgYWxsJyAgICAgICAgICBhbGwgb2YgdGhlIGFib3ZlXG4iCisiICBgbm9uZScgICAgICAgICBkaXNhYmxlIGFsbCBvZiB0aGUgYWJvdmVcbiIKKyIgICIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKK21zZ3N0ciAiIgorIlxuIgorItCT0YDQtdGI0LrQtSDQv9GA0LjRmNCw0LLQuNGC0LUg0L3QsCA8JXM+LlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBob21lIHBhZ2U6IDwlcz4uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozOTcKK21zZ2lkICJHZW5lcmFsIGhlbHAgdXNpbmcgR05VIHNvZnR3YXJlOiA8aHR0cDovL3d3dy5nbnUub3JnL2dldGhlbHAvPi5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogUmVwbGFjZSBMQU5HX0NPREUgaW4gdGhpcyBVUkwgd2l0aCB5b3VyIGxhbmd1YWdlCisjLiBjb2RlIDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtL0xBTkdfQ09ERS5odG1sPiB0bworIy4gZm9ybSBvbmUgb2YgdGhlIFVSTHMgYXQgaHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS8uCisjLiBPdGhlcndpc2UsIHJlcGxhY2UgdGhlIGVudGlyZSBVUkwgd2l0aCB5b3VyIHRyYW5zbGF0aW9uIHRlYW0ncworIy4gZW1haWwgYWRkcmVzcy4KKyM6IHNyYy9nZXRhcmdzLmM6NDEwCittc2dpZCAiUmVwb3J0IHRyYW5zbGF0aW9uIGJ1Z3MgdG8gPGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vPi5cbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjQxMgorbXNnaWQgIkZvciBjb21wbGV0ZSBkb2N1bWVudGF0aW9uLCBydW46IGluZm8gYmlzb24uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmlzb24gKEdOVSBCaXNvbikgJXMiCittc2dzdHIgItCx0LjQt9C+0L0gKNCT0L3RgyDQkdC40LfQvtC9KSAlcyIKKworIzogc3JjL2dldGFyZ3MuYzo0MzAKK21zZ2lkICJXcml0dGVuIGJ5IFJvYmVydCBDb3JiZXR0IGFuZCBSaWNoYXJkIFN0YWxsbWFuLlxuIgorbXNnc3RyICLQndCw0L/QuNGB0LDQu9C4INGB0YMg0KDQvtCx0LXRgNGCINCa0L7RgNCx0LXRgiDQuCDQoNC40YfQsNGA0LQg0KHRgtC+0LvQvNCw0L0uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcHlyaWdodCAoQykgJWQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCittc2dzdHIgItCQ0YPRgtC+0YDRgdC60LAg0L/RgNCw0LLQsCAoQykgJWQg0JfQsNC00YPQttCx0LjQvdCwINGB0LvQvtCx0L7QtNC90L7QsyDRgdC+0YTRgtCy0LXRgNCwLCDQlNC+0L4uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDM3Cittc2dpZCAiIgorIlRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PXG4iCisid2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuXG4iCittc2dzdHIgIiIKKyLQntCy0L4g0ZjQtSDRgdC70L7QsdC+0LTQsNC9INGB0L7RhNGC0LLQtdGAOyDQv9C+0LPQu9C10LTQsNGY0YLQtSDQuNC30LLQvtGAINC30LAg0YPRgdC70L7QstC1INGD0LzQvdC+0LbQsNCy0LDRmtCwLiAg0J3QtSDQv9C+0YHRgtC+0ZjQuFxuIgorItCd0JjQmtCQ0JrQktCQINCz0LDRgNCw0L3RhtC40ZjQsDsg0YfQsNC6INC90Lgg0LfQsCDQotCg0JbQmNCo0J3QoyDQktCg0JXQlNCd0J7QodCiINC40LvQuCDQt9CwINCY0KHQn9Cj0IrQkNCS0JDQitCVINCe0JTQoNCV0ILQldCd0JUgIgorItCf0J7QotCg0JXQkdCVLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSBza2VsZXRvbiBkZWNsYXJhdGlvbnMgYXJlIGludmFsaWQiCittc2dzdHIgItCy0LjRiNC10YHRgtGA0YPQutC1INC+0LHRmNCw0LLQtSDRgdC60LjRhtC1INGB0YMg0L3QtdC40YHQv9GA0LDQstC90LUiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIGxhbmd1YWdlIgorbXNnc3RyICIlczog0L3QtdC40YHQv9GA0LDQstCw0L0g0ZjQtdC30LjQuiIKKworIzogc3JjL2dldGFyZ3MuYzo0NzkKK21zZ2lkICJtdWx0aXBsZSBsYW5ndWFnZSBkZWNsYXJhdGlvbnMgYXJlIGludmFsaWQiCittc2dzdHIgItCy0LjRiNC10YHRgtGA0YPQutC1INC+0LHRmNCw0LLQtSDRmNC10LfQuNC60LAg0YHRgyDQvdC10LjRgdC/0YDQsNCy0L3QtSIKKworIzogc3JjL2dldGFyZ3MuYzo3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG1pc3Npbmcgb3BlcmFuZCIKK21zZ3N0ciAiJXM6INC90LXQtNC+0YHRgtCw0ZjQtSDQvtC/0LXRgNCw0L3QtCIKKworIzogc3JjL2dldGFyZ3MuYzo3NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0cmEgb3BlcmFuZCAlcyIKK21zZ3N0ciAi0LTQvtC00LDRgtC90Lgg0L7Qv9C10YDQsNC90LQgJXMiCisKKyM6IHNyYy9ncmFtLmM6MTEyCittc2dpZCAiZW1wdHkiCittc2dzdHIgItC/0YDQsNC30L3QviIKKworIzogc3JjL2dyYW0uYzoyMDEKK21zZ2lkICJHcmFtbWFyIgorbXNnc3RyICLQntGB0L3QvtCy0LAiCisKKyM6IHNyYy9ncmFwaHZpei5jOjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIvLyBHZW5lcmF0ZWQgYnkgJXMuXG4iCisiLy8gUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKKyIvLyBIb21lIHBhZ2U6IDwlcz4uXG4iCisiXG4iCittc2dzdHIgIiIKKyIvLyDQndCw0L/RgNCw0LLRmdC10L3QviDQv9GA0L7Qs9GA0LDQvNC+0Lwg4oCeJXPigJwuXG4iCisiLy8g0JPRgNC10YjQutC1INC/0YDQuNGY0LDQstC40YLQtSDQvdCwIDwlcz4uXG4iCisiLy8g0KHRgtGA0LDQvdC40YbQsCDQv9GA0L7RmNC10LrRgtCwOiA8JXM+LlxuIgorIlxuIgorCisjOiBzcmMvbG9jYXRpb24uYzo5MyBzcmMvc2Nhbi1ncmFtLmw6ODU5CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgbnVtYmVyIG92ZXJmbG93IgorbXNnc3RyICLQv9GA0LXQutC+0YDQsNGH0LXRmtC1INCx0YDQvtGY0LAg0YDQtdC00L7QstCwIgorCisjOiBzcmMvbG9jYXRpb24uYzo5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb2x1bW4gbnVtYmVyIG92ZXJmbG93IgorbXNnc3RyICLQv9GA0LXQutC+0YDQsNGH0LXRmtC1INCx0YDQvtGY0LAg0LrQvtC70L7QvdCwIgorCisjOiBzcmMvbWFpbi5jOjE0NgorbXNnaWQgInJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cyIKK21zZ3N0ciAi0LHQtdGB0LrQvtGA0LjRgdC90LAg0L/RgNCw0LLQuNC70LAg0YMg0L7QsdGA0LDRktC40LLQsNGH0YMg0LfQsdC+0LMg0YHRg9C60L7QsdCwIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlJWRlZmluZSB2YXJpYWJsZSAlcyByZWRlZmluZWQiCittc2dzdHIgIiUlZGVmaW5lINC/0YDQvtC80LXQvdGZ0LjQstCwIOKAniVz4oCcINGY0LUg0L/QvtC90L7QstC+INC+0LTRgNC10ZLQtdC90LAiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NDUzCittc2dpZCAicHJldmlvdXMgZGVmaW5pdGlvbiIKK21zZ3N0ciAi0L/RgNC10YLRhdC+0LTQvdCwINC+0LTRgNC10LTQvdC40YbQsCIKKworIzogc3JjL211c2NsZS10YWIuYzo0OTAgc3JjL211c2NsZS10YWIuYzo1MDQgc3JjL211c2NsZS10YWIuYzo1NTYKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgJXMiCittc2dzdHIgIiVzOiDQvdC10L7QtNGA0LXRktC10L3QsCAlJWRlZmluZSDQv9GA0L7QvNC10L3RmdC40LLQsCDigJ4lc+KAnCIKKworIzogc3JjL211c2NsZS10YWIuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJSVkZWZpbmUgQm9vbGVhbiB2YXJpYWJsZSAlcyIKK21zZ3N0ciAi0L3QtdC40YHQv9GA0LDQstC90LAg0LLRgNC10LTQvdC+0YHRgiAlJWRlZmluZSDQu9C+0LPQuNGH0LrQtSDQv9GA0L7QvNC10L3RmdC40LLQtSDigJ4lc+KAnCIKKworIzogc3JjL211c2NsZS10YWIuYzo2MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJSVkZWZpbmUgdmFyaWFibGUgJXM6ICVzIgorbXNnc3RyICLQvdC10LjRgdC/0YDQsNCy0L3QsCDQstGA0LXQtNC90L7RgdGCICUlZGVmaW5lINC/0YDQvtC80LXQvdGZ0LjQstC1IOKAniVz4oCcOiAlcyIKKworIzogc3JjL211c2NsZS10YWIuYzo2MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWNjZXB0ZWQgdmFsdWU6ICVzIgorbXNnc3RyICLQv9GA0LjRhdCy0LDRm9C10L3QsCDQstGA0LXQtNC90L7RgdGCOiAlcyIKKworIzogc3JjL3BhcnNlLWdyYW0ueTo3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBpZGVudGlmaWVyIGluIHBhcmFtZXRlciBkZWNsYXJhdGlvbiIKK21zZ3N0ciAi0L3QtdC00L7RgdGC0LDRmNC1INGD0LrQsNC30LjQstCw0Ycg0YMg0L7QsdGY0LDQstC4INC/0LDRgNCw0LzQtdGC0YDQsCIKKworIzogc3JjL3ByaW50LmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIHR5cGUgJWQgaXMgJXNcbiIKK21zZ3N0ciAiINCy0YDRgdGC0LAgJWQg0ZjQtSAlc1xuIgorCisjOiBzcmMvcHJpbnQuYzoxNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAlZFxuIgorbXNnc3RyICLQv9C+0LzQtdGA0LAsINC4INC40LTQtSDQvdCwINGB0YLQsNGa0LUgJWRcbiIKKworIzogc3JjL3ByaW50LmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImdvIHRvIHN0YXRlICVkXG4iCittc2dzdHIgItC40LTQtSDQvdCwINGB0YLQsNGa0LUgJWRcbiIKKworIzogc3JjL3ByaW50LmM6MjAzCittc2dpZCAiZXJyb3IgKG5vbmFzc29jaWF0aXZlKVxuIgorbXNnc3RyICLQs9GA0LXRiNC60LAgKNC90LXQv9GA0LjQtNGA0YPQttC40LLQvilcbiIKKworIzogc3JjL3ByaW50LmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZHVjZSB1c2luZyBydWxlICVkICglcykiCittc2dzdHIgItGB0LzQsNGa0YPRmNC1INC60L7RgNC40YHRgtC10ZvQuCDQv9GA0LDQstC40LvQviAlZCAoJXMpIgorCisjOiBzcmMvcHJpbnQuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWNjZXB0IgorbXNnc3RyICLQv9GA0LjRhdCy0LDRgtCwIgorCisjOiBzcmMvcHJpbnQuYzoyNjQgc3JjL3ByaW50LmM6MzM4Cittc2dpZCAiJGRlZmF1bHQiCittc2dzdHIgIiTQvtGB0L3QvtCy0L3QviIKKworIzogc3JjL3ByaW50LmM6MzczIHNyYy9wcmludF9ncmFwaC5jOjc4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTdGF0ZSAlZCIKK21zZ3N0ciAi0KHRgtCw0ZrQtTogJWQgIgorCisjOiBzcmMvcHJpbnQuYzo0MDkKK21zZ2lkICJUZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIiCittc2dzdHIgItCi0LXRgNC80LjQvdCw0LvQuCwg0YHQsCDQv9GA0LDQstC40LvQuNC80LAg0LPQtNC1INGB0LUg0L/QvtGY0LDQstGZ0YPRmNGDIgorCisjOiBzcmMvcHJpbnQuYzo0MzYKK21zZ2lkICJOb250ZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIiCittc2dzdHIgItCd0LXRgtC10YDQvNC40L3QsNC70LgsINGB0LAg0L/RgNCw0LLQuNC70LjQvNCwINCz0LTQtSDRgdC1INC/0L7RmNCw0LLRmdGD0ZjRgyIKKworIzogc3JjL3ByaW50LmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiBsZWZ0OiIKK21zZ3N0ciAiINC90LAg0LvQtdCy0L46IgorCisjOiBzcmMvcHJpbnQuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uIHJpZ2h0OiIKK21zZ3N0ciAiINC90LAg0LTQtdGB0L3QvjoiCisKKyM6IHNyYy9wcmludC5jOjUxMAorbXNnaWQgIlJ1bGVzIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHMiCittc2dzdHIgItCR0LXRgdC60L7RgNC40YHQvdCwINC/0YDQsNCy0LjQu9CwINGDINC+0LHRgNCw0ZLQuNCy0LDRh9GDINC30LHQvtCzINGB0YPQutC+0LHQsCIKKworIyBidWc6ICJtdWx0aXBsZSBwcm9wZXJ0aWVzIiBvciAibXVsdGlwbGUgc29uZyI/CisjOiBzcmMvcmVhZGVyLmM6NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgJXMgZGVjbGFyYXRpb25zIgorbXNnc3RyICLQstC40YjQtdGB0YLRgNGD0LrQtSAlcyDQvtCx0ZjQsNCy0LUiCisKKyM6IHNyYy9yZWFkZXIuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVzdWx0IHR5cGUgY2xhc2ggb24gbWVyZ2UgZnVuY3Rpb24gJXM6IDwlcz4gIT0gPCVzPiIKK21zZ3N0ciAi0L3QtdGB0LvQsNCz0LDRmtC1INCy0YDRgdGC0LUg0YDQtdC30YPQu9GC0LDRgtCwINGE0YPQvdC60YbQuNGY0LUg0YHQv9Cw0ZjQsNGa0LAgJXM6IDwlcz4gIT0gPCVzPiIKKworIzogc3JjL3JlYWRlci5jOjEzOSBzcmMvc3ltdGFiLmM6MTU2IHNyYy9zeW10YWIuYzoxNjYgc3JjL3N5bXRhYi5jOjkzOAorIzogc3JjL3N5bXRhYi5jOjk1MyBzcmMvc3ltdGFiLmM6OTY4IHNyYy9zeW10YWIuYzo5ODMKK21zZ2lkICJwcmV2aW91cyBkZWNsYXJhdGlvbiIKK21zZ3N0ciAi0L/RgNC10YLRhdC+0LTQvdCwINC+0LHRmNCw0LLQsCIKKworIzogc3JjL3JlYWRlci5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGVkIHN5bWJvbCBuYW1lIGZvciAlcyBpZ25vcmVkIgorbXNnc3RyICLQt9Cw0L3QtdC80LDRgNC10L0g0ZjQtSDRg9C00LLQvtGY0LXQvdC4INC90LDQt9C40LIg0YHQuNC80LHQvtC70LAg0LfQsCDigJ4lc+KAnCIKKworIzogc3JjL3JlYWRlci5jOjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICJydWxlIGdpdmVuIGZvciAlcywgd2hpY2ggaXMgYSB0b2tlbiIKK21zZ3N0ciAi0LTQsNGC0L4g0ZjQtSDQv9GA0LDQstC40LvQviDQt9CwICVzLCDQutC+0ZjQtSDRmNC1INGB0LjQvNCx0L7QuyIKKworIzogc3JjL3JlYWRlci5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ0eXBlIGNsYXNoIG9uIGRlZmF1bHQgYWN0aW9uOiA8JXM+ICE9IDwlcz4iCittc2dzdHIgItC90LXRgdC70LDQs9Cw0ZrQtSDQstGA0YHRgtC1INC+0YHQvdC+0LLQvdC1INGA0LDQtNGa0LU6IDwlcz4gIT0gPCVzPiIKKworIzogc3JjL3JlYWRlci5jOjMxMAorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBydWxlIGZvciB0eXBlZCBub250ZXJtaW5hbCwgYW5kIG5vIGFjdGlvbiIKK21zZ3N0ciAi0L/RgNCw0LfQvdC+INC/0YDQsNCy0LjQu9C+INC30LAg0YPQutGD0YbQsNC90Lgg0L3QtdGC0LXRgNC80LjQvdCw0LssINC4INC90LXQvNCwINGA0LDQtNGa0LUiCisKKyM6IHNyYy9yZWFkZXIuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW51c2VkIHZhbHVlOiAkJWQiCittc2dzdHIgItC90LXRg9C/0L7RgtGA0LXQsdGZ0LXQvdCwINCy0YDQtdC00L3QvtGB0YI6ICQlZCIKKworIzogc3JjL3JlYWRlci5jOjMzMAorbXNnaWQgInVuc2V0IHZhbHVlOiAkJCIKK21zZ3N0ciAi0L3QtdC/0L7QtNC10YjQtdC90LAg0LLRgNC10LTQvdC+0YHRgjogJCQiCisKKyM6IHNyYy9yZWFkZXIuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9rZW4gZm9yICUlcHJlYyBpcyBub3QgZGVmaW5lZDogJXMiCittc2dzdHIgItGB0LjQvNCx0L7QuyDQt9CwICUlcHJlYyDQvdC40ZjQtSDQvtC00YDQtdGS0LXQvTogJXMiCisKKyM6IHNyYy9yZWFkZXIuYzo0MzEgc3JjL3JlYWRlci5jOjQ0NSBzcmMvcmVhZGVyLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgb25lICVzIGFsbG93ZWQgcGVyIHJ1bGUiCittc2dzdHIgItC00L7Qt9Cy0L7RmdC10L0g0ZjQtSDRgdCw0LzQviDRmNC10LTQsNC9IOKAniVz4oCcINC/0L4g0L/RgNCw0LLQuNC70YMiCisKKyM6IHNyYy9yZWFkZXIuYzo0NDEgc3JjL3JlYWRlci5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhZmZlY3RzIG9ubHkgR0xSIHBhcnNlcnMiCittc2dzdHIgIuKAniVz4oCcINC40LzQsCDQtNC10ZjRgdGC0LLQsCDRgdCw0LzQviDQvdCwINCT0JvQoCDQvtCx0YDQsNGS0LjQstCw0YfQtSIKKworIzogc3JjL3JlYWRlci5jOjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBtdXN0IGJlIGZvbGxvd2VkIGJ5IHBvc2l0aXZlIG51bWJlciIKK21zZ3N0ciAi0L3QsNC60L7QvSAlcyDQvNC+0YDQsCDQtNCwINGB0LvQtdC00Lgg0L/QvtC30LjRgtC40LLQsNC9INCx0YDQvtGYIgorCisjOiBzcmMvcmVhZGVyLmM6NTU0CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bGUgaXMgdG9vIGxvbmciCittc2dzdHIgItC/0YDQsNCy0LjQu9C+INGY0LUg0L/RgNC10LTRg9Cz0L4iCisKKyM6IHNyYy9yZWFkZXIuYzo2NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcnVsZXMgaW4gdGhlIGlucHV0IGdyYW1tYXIiCittc2dzdHIgItC90LXQvNCwINC/0YDQsNCy0LjQu9CwINGDINC+0YHQvdC+0LLQuCDRg9C70LDQt9CwIgorCisjOiBzcmMvcmVkdWNlLmM6MjQxCittc2dpZCAicnVsZSB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgItC/0YDQsNCy0LjQu9C+INGY0LUg0LHQtdGB0LrQvtGA0LjRgdC90L4g0YMg0L7RgdC90L7QstC4IgorCisjOiBzcmMvcmVkdWNlLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogJXMiCittc2dzdHIgItC90LUt0YLQtdGA0LzQuNC90LDQuyDRmNC1INCx0LXRgdC60L7RgNC40YHRgtCw0L0g0YMg0L7RgdC90L7QstC4OiAlcyIKKworIzogc3JjL3JlZHVjZS5jOjM1MAorbXNnaWQgIk5vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgItCd0LUt0YLQtdGA0LzQuNC90LDQu9C4INGB0YMg0LHQtdGB0LrQvtGA0LjRgdC90Lgg0YMg0L7RgdC90L7QstC4IgorCisjOiBzcmMvcmVkdWNlLmM6MzYzCittc2dpZCAiVGVybWluYWxzIHVudXNlZCBpbiBncmFtbWFyIgorbXNnc3RyICLQotC10YDQvNC40L3QsNC70Lgg0YHRgyDQvdC10YPQv9C+0YLRgNC10LHRmdC10L3QuCDRgyDQvtGB0L3QvtCy0LgiCisKKyM6IHNyYy9yZWR1Y2UuYzozNzIKK21zZ2lkICJSdWxlcyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgItCf0YDQsNCy0LjQu9CwINGB0YMg0LHQtdGB0LrQvtGA0LjRgdC90LAg0YMg0L7RgdC90L7QstC4IgorCisjOiBzcmMvcmVkdWNlLmM6Mzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ2lkX3BsdXJhbCAiJWQgbm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0clswXSAiJWQg0L3QtS3RgtC10YDQvNC40L3QsNC7INGY0LUg0LHQtdGB0LrQvtGA0LjRgdGC0LDQvSDRgyDQvtGB0L3QvtCy0LgiCittc2dzdHJbMV0gIiVkINC90LUt0YLQtdGA0LzQuNC90LDQu9CwINGB0YMg0LHQtdGB0LrQvtGA0LjRgdC90LAg0YMg0L7RgdC90L7QstC4IgorbXNnc3RyWzJdICIlZCDQvdC1LdGC0LXRgNC80LjQvdCw0LvQsCDRmNC1INCx0LXRgdC60L7RgNC40YHQvdC+INGDINC+0YHQvdC+0LLQuCIKKworIzogc3JjL3JlZHVjZS5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ2lkX3BsdXJhbCAiJWQgcnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyWzBdICIlZCDQv9GA0LDQstC40LvQviDRmNC1INCx0LXRgdC60L7RgNC40YHQvdC+INGDINC+0YHQvdC+0LLQuCIKK21zZ3N0clsxXSAiJWQg0L/RgNCw0LLQuNC70LAg0YHRgyDQsdC10YHQutC+0YDQuNGB0L3QsCDRgyDQvtGB0L3QvtCy0LgiCittc2dzdHJbMl0gIiVkINC/0YDQsNCy0LjQu9CwINGY0LUg0LHQtdGB0LrQvtGA0LjRgdC90L4g0YMg0L7RgdC90L7QstC4IgorCisjOiBzcmMvcmVkdWNlLmM6NDE5CisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0IHN5bWJvbCAlcyBkb2VzIG5vdCBkZXJpdmUgYW55IHNlbnRlbmNlIgorbXNnc3RyICLQv9C+0YfQtdGC0L3QuCDRgdC40LzQsdC+0LsgJXMg0L3QtSDQuNC30LLQvtC00Lgg0L3QuNC60LDQutCw0LIg0LjRgdC60LDQtyIKKworIzogc3JjL3NjYW4tY29kZS5sOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJheSAnJXMnIgorbXNnc3RyICLQt9Cw0LvRg9GC0LDQu9C+IOKAniVz4oCcIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjI5Cittc2dpZCAiYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUiCittc2dzdHIgItC90LAg0LrRgNCw0ZjRgyDQutC+0LTQsCDRgNCw0LTRmtC1INC80L7QttC1INCx0LjRgtC4INC/0L7RgtGA0LXQsdC90LAg0YLQsNGH0LrQsCDQuCDQt9Cw0YDQtdC3ICg7KSIKKworIzogc3JjL3NjYW4tY29kZS5sOjIzMgorbXNnaWQgImZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JyIKK21zZ3N0ciAi0LHRg9C00YPRm9CwINC40LfQtNCw0ZrQsCDQkdC40LfQvtC90LAg0L3QtdGb0LUg0LTQvtC00LDQstCw0YLQuCDigJ474oCcIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVzZSBvZiBZWUZBSUwsIHdoaWNoIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCIKK21zZ3N0ciAi4oCeWVlGQUlM4oCcINGY0LUg0LfQsNGB0YLQsNGA0LXQu9C+INGDINGD0L/QvtGC0YDQtdCx0Lgg0Lgg0LHQuNGb0LUg0YPQutC70L7RmtC10L3QviIKKworIzogc3JjL3NjYW4tY29kZS5sOjQzMSBzcmMvc2Nhbi1jb2RlLmw6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVycyB0bzogJWMlcyBhdCAlcyIKK21zZ3N0ciAi0L7QtNC90L7RgdC4INGB0LUg0L3QsDogJWMlcyDRgyAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NzaWJseSBtZWFudDogJWMiCittc2dzdHIgItC80L7Qs9GD0ZvQtSDQt9C90LDRh9C10ZrQtTogJWMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCBoaWRpbmcgJWMiCittc2dzdHIgIiwg0LrRgNC40ZjQtdC8ICVjIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiBhdCAlcyIKK21zZ3N0ciAiINGDICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiwgY2Fubm90IGJlIGFjY2Vzc2VkIGZyb20gbWlkLXJ1bGUgYWN0aW9uIGF0ICQlZCIKK21zZ3N0ciAiLCDQvdC1INC80L7QttC1INCx0LjRgtC4INC/0YDQuNGB0YLRg9C/0ZnQtdC9INC40Lcg0YDQsNC00ZrQtSDRgdGA0LXQtNGa0LXQsyDQv9GA0LDQstC40LvQsCDRgyAkJWQiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo1MjEgc3JjL3NjYW4tZ3JhbS5sOjc4MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlZ2VyIG91dCBvZiByYW5nZTogJXMiCittc2dzdHIgItGG0LXQviDQsdGA0L7RmCDRmNC1INCy0LDQvSDQvtC/0YHQtdCz0LA6ICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAi0L3QtdC40YHQv9GA0LDQstC90LAg0YDQtdGE0LXRgNC10L3RhtCwOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IgYWZ0ZXIgJyVjJywgZXhwZWN0aW5nIGludGVnZXIsIGxldHRlciwgJ18nLCAnWycsIG9yICckJyIKK21zZ3N0ciAi0YHQsNC00YDQttCw0ZjQvdCwINCz0YDQtdGI0LrQsCDQvdCw0LrQvtC9IOKAniVj4oCcLCDQvtGH0LXQutGD0ZjQtdC8INGG0LXQviDQsdGA0L7RmCwg0YHQu9C+0LLQviwgXywgWywg0LjQu9C4ICQiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uIGJlZm9yZSAkJWQ6ICUuKnMiCittc2dzdHIgItGB0LjQvNCx0L7QuyDQvdC40ZjQtSDQv9GA0L7QvdCw0ZLQtdC9INGDINC/0YDQvtC40LfQstC+0LTRmtC4INC/0YDQtSAkJWQ6ICUuKnMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiAlLipzIgorbXNnc3RyICLRgdC40LzQsdC+0Lsg0L3QuNGY0LUg0L/RgNC+0L3QsNGS0LXQvSDRgyDQv9GA0L7QuNC30LLQvtC00ZrQuDogJS4qcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNsZWFkaW5nIHJlZmVyZW5jZTogJXMiCittc2dzdHIgItC90LXQuNGB0L/RgNCw0LLQvdCwINGA0LXRhNC10YDQtdC90YbQsDogJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIHJlZmVyZW5jZTogJXMiCittc2dzdHIgItC90LXRmNCw0YHQvdCwINGA0LXRhNC10YDQtdC90YbQsDogJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwbGljaXQgdHlwZSBnaXZlbiBpbiB1bnR5cGVkIGdyYW1tYXIiCittc2dzdHIgItC00LDRgtCwINGY0LUg0LjQt9GA0LjRh9C40YLQsCDQstGA0YHRgtCwINGDINC90LXRg9C/0LjRgdCw0L3QvtGYINC+0YHQvdC+0LLQuCIKKworIzogc3JjL3NjYW4tY29kZS5sOjc1OQorIywgYy1mb3JtYXQKK21zZ2lkICIkJCBmb3IgdGhlIG1pZHJ1bGUgYXQgJCVkIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICIkJCDQt9CwINGB0YDQtdC00ZrQtSDQv9GA0LDQstC40LvQviDQv9GA0LggJCVkINC+0LQgJXMg0L3QtdC80LAg0L7QsdGY0LDQstGZ0LXQvdGDINCy0YDRgdGC0YMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJCQgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiQkINC+0LQgJXMg0L3QtdC80LAg0L7QsdGY0LDQstGZ0LXQvdGDINCy0YDRgdGC0YMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJCVzIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICIkJXMg0L7QtCAlcyDQvdC10LzQsCDQvtCx0ZjQsNCy0ZnQtdC90YMg0LLRgNGB0YLRgyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJheSAnLCcgdHJlYXRlZCBhcyB3aGl0ZSBzcGFjZSIKK21zZ3N0ciAi0LfQsNC70YPRgtCw0LvQuCDQt9Cw0YDQtdC3ICgsKSDRmNC1INGB0YXQstCw0ZvQtdC9INC60LDQviDRgNCw0LfQvNCw0LoiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBkaXJlY3RpdmU6ICVzIgorbXNnc3RyICLQvdC10LjRgdC/0YDQsNCy0L3QsCDQtNC40YDQtdC60YLQuNCy0LA6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaWRlbnRpZmllcjogJXMiCittc2dzdHIgItC90LXQuNGB0L/RgNCw0LLQvdCwINC+0LTRgNC10ZLQuNCy0LDRhzogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyOTUKKyMsIGZ1enp5Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIiCittc2dpZF9wbHVyYWwgImludmFsaWQgY2hhcmFjdGVycyIKK21zZ3N0clswXSAi0L3QtdC40YHQv9GA0LDQstCw0L0g0LfQvdCw0Lo6ICVzIgorbXNnc3RyWzFdICLQvdC10LjRgdC/0YDQsNCy0LDQvSDQt9C90LDQujogJXMiCittc2dzdHJbMl0gItC90LXQuNGB0L/RgNCw0LLQsNC9INC30L3QsNC6OiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGlkZW50aWZpZXIgaW4gYnJhY2tldGVkIG5hbWU6ICVzIgorbXNnc3RyICLQvdC10L7Rh9C10LrQuNCy0LDQvdC4INC+0LTRgNC10ZLQuNCy0LDRhyDRgyDQvdCw0LfQuNCy0YMg0YMg0LfQsNCz0YDQsNC00LDQvNCwOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJhbiBpZGVudGlmaWVyIGV4cGVjdGVkIgorbXNnc3RyICLQvtGH0LXQutC40LLQsNC9INGY0LUg0L7QtNGA0LXRktC40LLQsNGHIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MzgxCisjLCBmdXp6eQorbXNnaWQgImludmFsaWQgY2hhcmFjdGVyIGluIGJyYWNrZXRlZCBuYW1lIgorbXNnaWRfcGx1cmFsICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gYnJhY2tldGVkIG5hbWUiCittc2dzdHJbMF0gItC90LXQuNGB0L/RgNCw0LLQsNC9INC30L3QsNC6INGDINC90LDQt9C40LLRgyDRgyDQt9Cw0LPRgNCw0LTQsNC80LA6ICVzIgorbXNnc3RyWzFdICLQvdC10LjRgdC/0YDQsNCy0LDQvSDQt9C90LDQuiDRgyDQvdCw0LfQuNCy0YMg0YMg0LfQsNCz0YDQsNC00LDQvNCwOiAlcyIKK21zZ3N0clsyXSAi0L3QtdC40YHQv9GA0LDQstCw0L0g0LfQvdCw0Log0YMg0L3QsNC30LjQstGDINGDINC30LDQs9GA0LDQtNCw0LzQsDogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo0ODEgc3JjL3NjYW4tZ3JhbS5sOjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBjaGFyYWN0ZXIgbGl0ZXJhbCIKK21zZ3N0ciAi0LTQvtGB0LvQvtCy0L3QvtGB0YIg0L/RgNCw0LfQvdC+0LMg0LfQvdCw0LrQsCIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjQ4NiBzcmMvc2Nhbi1ncmFtLmw6NTA3CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dHJhIGNoYXJhY3RlcnMgaW4gY2hhcmFjdGVyIGxpdGVyYWwiCittc2dzdHIgItC00L7QtNCw0YLQvdC4INC30L3QsNGG0Lgg0YMg0LTQvtGB0LvQvtCy0L3QvtGB0YLQuCDQt9C90LDQutCwIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVsbCBjaGFyYWN0ZXIiCittc2dzdHIgItC90LXQuNGB0L/RgNCw0LLQsNC9INC90LjRiNGC0LDQstC90Lgg0LfQvdCw0LoiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1MzEgc3JjL3NjYW4tZ3JhbS5sOjU0MSBzcmMvc2Nhbi1ncmFtLmw6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIGFmdGVyIFxcLWVzY2FwZTogJXMiCittc2dzdHIgItC90LXQuNGB0L/RgNCw0LLQsNC9INCx0YDQvtGYINC90LDQutC+0L0g4oCeXFwtZXNjYXBl4oCcOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjU3MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciBhZnRlciBcXC1lc2NhcGU6ICVzIgorbXNnc3RyICLQvdC10LjRgdC/0YDQsNCy0LDQvSDQt9C90LDQuiDQvdCw0LrQvtC9IOKAnlxcLWVzY2FwZeKAnDogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo5MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyBhdCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAi0L3QtdC00L7RgdGC0LDRmNC1IOKAniVz4oCcINC90LAg0LrRgNCw0ZjRgyDQtNCw0YLQvtGC0LXQutC1IgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6OTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgJXMgYXQgZW5kIG9mIGxpbmUiCittc2dzdHIgItC90LXQtNC+0YHRgtCw0ZjQtSDigJ4lc+KAnCDQvdCwINC60YDQsNGY0YMg0YDQtdC00LAiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5jbG9zZWQgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICLQvdC10LfQsNGC0LLQvtGA0LXQvdCwICVzINGB0LzQtdGA0L3QuNGG0LAg0YMg0LrQvtGB0YLRg9GA0YMiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIGZldyBhcmd1bWVudHMgZm9yICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAi0L/RgNC10LzQsNC70L4g0LDRgNCz0YPQvNC10L3QsNGC0LAg0LfQsCAlcyDRgdC80LXRgNC90LjRhtGDINGDINC60L7RgdGC0YPRgNGDIgorCisjOiBzcmMvc2Nhbi1za2VsLmw6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBmb3IgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICLQv9GA0LXQstC40YjQtSDQsNGA0LPRg9C80LXQvdCw0YLQsCDQt9CwICVzINGB0LzQtdGA0L3QuNGG0YMg0YMg0LrQvtGB0YLRg9GA0YMiCisKKyM6IHNyYy9zeW1saXN0LmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJCB2YWx1ZTogJCVkIgorbXNnc3RyICLQvdC10LjRgdC/0YDQsNCy0L3QsCAkINCy0YDQtdC00L3QvtGB0YI6ICQlZCIKKworIzogc3JjL3N5bXRhYi5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlBPU0lYIFlhY2MgZm9yYmlkcyBkYXNoZXMgaW4gc3ltYm9sIG5hbWVzOiAlcyIKK21zZ3N0ciAi0J/QntCh0JjQmtChINCI0LDRhtGGINC30LDQsdGA0LDRmtGD0ZjQtSDRhtGA0YLQuNGG0LUg0YMg0L3QsNC30LjQstC40LzQsCDRgdC40LzQsdC+0LvQsDogJXMiCisKKyM6IHNyYy9zeW10YWIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBzeW1ib2xzIGluIGlucHV0IGdyYW1tYXIgKGxpbWl0IGlzICVkKSIKK21zZ3N0ciAi0L/RgNC10LLQuNGI0LUg0YHQuNC80LHQvtC70LAg0YMg0YPQu9Cw0LfQvdC+0Zgg0L7RgdC90L7QstC4ICjQvtCz0YDQsNC90LjRh9C10ZrQtSDRmNC1ICVkKSIKKworIzogc3JjL3N5bXRhYi5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAiJXMg0L/QvtC90L7QstC90Lgg0L/RgNC+0LPQu9Cw0YEg0LfQsCAlcyIKKworIzogc3JjL3N5bXRhYi5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciA8JXM+IgorbXNnc3RyICIlcyDQv9C+0L3QvtCy0L3QuCDQv9GA0L7Qs9C70LDRgSDQt9CwIDwlcz4iCisKKyM6IHNyYy9zeW10YWIuYzozMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHJlZGVmaW5lZCIKK21zZ3N0ciAi0YHQuNC80LHQvtC7IOKAniVz4oCcINGY0LUg0L/QvtC90L7QstC+INC+0LTRgNC10ZLQtdC9IgorCisjOiBzcmMvc3ltdGFiLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyByZWRlY2xhcmVkIgorbXNnc3RyICLRgdC40LzQsdC+0Lsg4oCeJXPigJwg0ZjQtSDQv9C+0L3QvtCy0L4g0L7QsdGY0LDQstGZ0LXQvSIKKworIzogc3JjL3N5bXRhYi5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlZmluaW5nIHVzZXIgdG9rZW4gbnVtYmVyIG9mICVzIgorbXNnc3RyICLQv9C+0L3QvtCy0L3QviDQvtC00YDQtdGS0YPRmNC10Lwg0LHRgNC+0Zgg0YHQuNC80LHQvtC70LAg0LrQvtGA0LjRgdC90LjQutCwINC+0LQgJXMiCisKKyM6IHNyYy9zeW10YWIuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIGlzIHVzZWQsIGJ1dCBpcyBub3QgZGVmaW5lZCBhcyBhIHRva2VuIGFuZCBoYXMgbm8gcnVsZXMiCittc2dzdHIgItC60L7RgNC40YjRm9C10L0g0ZjQtSDRgdC40LzQsdC+0Lsg4oCeJXPigJwsINCw0LvQuCDQvdC40ZjQtSDQvtC00YDQtdGS0LXQvSDQutCw0L4g0L7QsdC10LvQtdC20ZjQtSDQuCDQvdC10LzQsCDQv9GA0LDQstC40LvQsCIKKworIzogc3JjL3N5bXRhYi5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgdXNlZCBtb3JlIHRoYW4gb25jZSBhcyBhIGxpdGVyYWwgc3RyaW5nIgorbXNnc3RyICLRgdC40LzQsdC+0LsgJXMg0ZjQtSDQutC+0YDQuNGI0ZvQtdC9INCy0LjRiNC1INC/0YPRgtCwINC60LDQviDQtNC+0YHQu9C+0LLQvdCwINC90LjRgdC60LAiCisKKyM6IHNyYy9zeW10YWIuYzo0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIGdpdmVuIG1vcmUgdGhhbiBvbmUgbGl0ZXJhbCBzdHJpbmciCittc2dzdHIgItGB0LjQvNCx0L7Qu9GDICVzINGY0LUg0LTQsNGC0LAg0LLQuNGI0LUg0L7QtCDRmNC10LTQvdC1INC00L7RgdC70L7QstC90LUg0L3QuNGB0LrQtSIKKworIzogc3JjL3N5bXRhYi5jOjUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2VyIHRva2VuIG51bWJlciAlZCByZWRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAi0L/QvtC90L7QstC90LAg0L7QsdGY0LDQstCwINCx0YDQvtGY0LAgJWQg0LrQvtGA0LjRgdC90LjRh9C60L7QsyDRgdC40LzQsdC+0LvQsCDQt9CwICVzIgorCisjOiBzcmMvc3ltdGFiLmM6NTM5CisjLCBjLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIGRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAi0L/RgNC10YLRhdC+0LTQvdCwINC+0LHRmNCw0LLQsCDQt9CwICVzIgorCisjOiBzcmMvc3ltdGFiLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBzdGFydCBzeW1ib2wgJXMgaXMgdW5kZWZpbmVkIgorbXNnc3RyICLQv9C+0LvQsNC30L3QuCDRgdC40LzQsdC+0Lsg4oCeJXPigJwg0L3QuNGY0LUg0L7QtNGA0LXRktC10L0iCisKKyM6IHNyYy9zeW10YWIuYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHN0YXJ0IHN5bWJvbCAlcyBpcyBhIHRva2VuIgorbXNnc3RyICLQv9C+0LvQsNC30L3QuCDRgdC40LzQsdC+0Lsg4oCeJXPigJwg0ZjQtSDQvtCx0LXQu9C10LbRmNC1IgorCisjOiBzcmMvc3ltdGFiLmM6OTM1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICUlZGVzdHJ1Y3RvciIKK21zZ3N0ciAi0L/QvtC90L7QstC90LAg0L7QsdGY0LDQstCwINC30LAg0L7RgdC90L7QstC90L7QsyDQvtC30L3QsNGH0LXQvdC+0LMgJSXRg9C90LjRiNGC0LDQstCw0YfQsCIKKworIzogc3JjL3N5bXRhYi5jOjk1MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJSVkZXN0cnVjdG9yIgorbXNnc3RyICLQv9C+0L3QvtCy0L3QsCDQvtCx0ZjQsNCy0LAg0LfQsCDQvtGB0L3QvtCy0L3QvtCzINC90LXQvtC30L3QsNGH0LXQvdC+0LMgJSXRg9C90LjRiNGC0LDQstCw0YfQsCIKKworIzogc3JjL3N5bXRhYi5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlJXByaW50ZXIiCittc2dzdHIgItC/0L7QvdC+0LLQvdCwINC+0LHRmNCw0LLQsCDQt9CwINC+0YHQvdC+0LLQvdC+0LMg0L7Qt9C90LDRh9C10L3QvtCzICUl0YjRgtCw0LzQv9Cw0YfQsCIKKworIzogc3JjL3N5bXRhYi5jOjk4MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJSVwcmludGVyIgorbXNnc3RyICLQv9C+0L3QvtCy0L3QsCDQvtCx0ZjQsNCy0LAg0LfQsCDQvtGB0L3QvtCy0L3QvtCzINC90LXQvtC30L3QsNGH0LXQvdC+0LMgJSXRiNGC0LDQvNC/0LDRh9CwIgorCisjOiBkamdwcC9zdWJwaXBlLmM6NjMgZGpncHAvc3VicGlwZS5jOjI4NiBkamdwcC9zdWJwaXBlLmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92aW5nIG9mICclcycgZmFpbGVkIgorbXNnc3RyICLQvdC40ZjQtSDRg9GB0L/QtdC70L4g0YPQutC70LDRmtCw0ZrQtSDigJ4lc+KAnCIKKworIzogZGpncHAvc3VicGlwZS5jOjg1IGRqZ3BwL3N1YnBpcGUuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGlvbiBvZiBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAi0YHRgtCy0LDRgNCw0ZrQtSDQv9GA0LjQstGA0LXQvNC10L3QtSDQtNCw0YLQvtGC0LXQutC1INC90LjRmNC1INGD0YHQv9C10LvQviIKKworIzogZGpncHAvc3VicGlwZS5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJzYXZpbmcgc3RkaW4gZmFpbGVkIgorbXNnc3RyICLRh9GD0LLQsNGa0LUg0YHRgtCw0L3QtNCw0YDQtNC90L7QsyDRg9C70LDQt9CwINC90LjRmNC1INGD0YHQv9C10LvQviIKKworIzogZGpncHAvc3VicGlwZS5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJzYXZpbmcgc3Rkb3V0IGZhaWxlZCIKK21zZ3N0ciAi0YfRg9Cy0LDRmtC1INGB0YLQsNC90LTQsNGA0LTQvdC+0LMg0LjQt9C70LDQt9CwINC90LjRmNC1INGD0YHQv9C10LvQviIKKworIzogZGpncHAvc3VicGlwZS5jOjE1MyBkamdwcC9zdWJwaXBlLmM6MTk3IGRqZ3BwL3N1YnBpcGUuYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlbmluZyBvZiB0bXBmaWxlIGZhaWxlZCIKK21zZ3N0ciAi0L7RgtCy0LDRgNCw0ZrQtSDQv9GA0LjQstGA0LXQvNC10L3QtSDQtNCw0YLQvtGC0LXQutC1INC90LjRmNC1INGD0YHQv9C10LvQviIKKworIzogZGpncHAvc3VicGlwZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBiaXNvbidzIHN0ZG91dCB0byB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisi0L/RgNC10YPRgdC80LXRgNCw0LLQsNGa0LUg0LHQuNC30L7QvdC+0LLQvtCzINGB0YLQsNC90LTQsNGA0LTQvdC+0LMg0LjQt9C70LDQt9CwINC90LAg0L/RgNC40LLRgNC10LzQtdC90YMg0LTQsNGC0L7RgtC10LrRgyDQvdC40ZjQtSDRg9GB0L/QtdC70L4iCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgbTQncyBzdGRpbiBmcm9tIHRoZSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgItC/0YDQtdGD0YHQvNC10YDQsNCy0LDRmtC1INC8NCDRgdGC0LDQvdC00LDRgNC00L3QvtCzINGD0LvQsNC30LAg0LjQtyDQv9GA0LjQstGA0LXQvNC10L3QtSDQtNCw0YLQvtGC0LXQutC1INC90LjRmNC1INGD0YHQv9C10LvQviIKKworIzogZGpncHAvc3VicGlwZS5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nIG9mIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICLQvtGC0LLQsNGA0LDRmtC1INC/0YDQuNCy0YDQtdC80LXQvdC1INC00LDRgtC+0YLQtdC60LUg0L3QuNGY0LUg0YPRgdC/0LXQu9C+IgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIG00J3Mgc3Rkb3V0IHRvIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICLQv9GA0LXRg9GB0LzQtdGA0LDQstCw0ZrQtSDQvDQg0YHRgtCw0L3QtNCw0YDQtNC90L7QsyDQuNC30LvQsNC30LAg0L3QsCDQv9GA0LjQstGA0LXQvNC10L3RgyDQtNCw0YLQvtGC0LXQutGDINC90LjRmNC1INGD0YHQv9C10LvQviIKKworIzogZGpncHAvc3VicGlwZS5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gJyVzJyBpbnRlcnJ1cHRlZCIKK21zZ3N0ciAi0L/RgNC10LrQuNC90YPRgiDRmNC1INC/0YDQuNC/0L7QvNC+0ZvQvdC4INC/0YDQvtCz0YDQsNC8IOKAniVz4oCcIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAi0L3QuNGY0LUg0L/RgNC+0L3QsNGS0LXQvSDQv9GA0LjQv9C+0LzQvtGb0L3QuCDQv9GA0L7Qs9GA0LDQvCDigJ4lc+KAnCIKKworIzogZGpncHAvc3VicGlwZS5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBiaXNvbidzIHN0ZGluIGZyb20gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorItC/0YDQtdGD0YHQvNC10YDQsNCy0LDRmtC1INCx0LjQt9C+0L3QvtCy0L7QsyDRgdGC0LDQvdC00LDRgNC00L3QvtCzINGD0LvQsNC30LAg0LjQtyDQv9GA0LjQstGA0LXQvNC10L3QtSDQtNCw0YLQvtGC0LXQutC1INC90LjRmNC1INGD0YHQv9C10LvQviIKKworIzogbGliL2FyZ21hdGNoLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgJXMgZm9yICVzIgorbXNnc3RyICLQvdC10LjRgdC/0YDQsNCy0LDQvSDQsNGA0LPRg9C80LXQvdGCIOKAniVz4oCcINC30LAg4oCeJXPigJwiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgYXJndW1lbnQgJXMgZm9yICVzIgorbXNnc3RyICLQvdC10ZjQsNGB0LDQvSDQsNGA0LPRg9C80LXQvdGCIOKAniVz4oCcINC30LAg4oCeJXPigJwiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjE1MworbXNnaWQgIlZhbGlkIGFyZ3VtZW50cyBhcmU6IgorbXNnc3RyICLQmNGB0L/RgNCw0LLQvdC4INCw0YDQs9GD0LzQtdC90YLQuCDRgdGDOiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfYWxsb2NzLCAldSBmcmVlZCAoJS4yZiUlKS5cbiIKK21zZ3N0ciAiJXUgYml0c2V0X2FsbG9jcywgJXUg0L7RgdC70L7QsdC+0ZLQtdC90L4gKCUuMmYlJSkuXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3NldHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorbXNnc3RyICIldSBiaXRzZXRfc2V0cywgJXUg0YMg0L7RgdGC0LDQstC4ICglLjJmJSUpXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3Jlc2V0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF9yZXNldHMsICV1INGDINC+0YHRgtCw0LLQuCAoJS4yZiUlKVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF90ZXN0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF90ZXN0cywgJXUg0YMg0L7RgdGC0LDQstC4ICglLjJmJSUpXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X2xpc3RzXG4iCittc2dzdHIgIiV1IGJpdHNldF9saXN0c1xuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTkyCittc2dpZCAiY291bnQgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICLRhdC40YHRgtC+0LPRgNCw0Lwg0LTQvdC10LLQvdC40LrQsCDQsdGA0L7RmNCw0ZrQsFxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTk1Cittc2dpZCAic2l6ZSBsb2cgaGlzdG9ncmFtXG4iCittc2dzdHIgItGF0LjRgdGC0L7Qs9GA0LDQvCDQtNC90LXQstC90LjQutCwINCy0LXQu9C40YfQuNC90LVcbiIKKworIworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5OAorbXNnaWQgImRlbnNpdHkgaGlzdG9ncmFtXG4iCittc2dzdHIgItGF0LjRgdGC0L7Qs9GA0LDQvCDQs9GD0YHRgtC40L3QtVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCaXRzZXQgc3RhdGlzdGljczpcbiIKKyJcbiIKK21zZ3N0ciAiIgorItCh0YLQsNGC0LjRgdGC0LjQutCwINC/0L7QtNC10YjQsNCy0LDRmtCwINCx0LjRgtCwOlxuIgorIlxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkFjY3VtdWxhdGVkIHJ1bnMgPSAldVxuIgorbXNnc3RyICLQo9C60YPQv9C90L4g0L/QvtC60YDQtdGC0LDRmtCwID0gJXVcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI1OSBsaWIvYml0c2V0X3N0YXRzLmM6MjY0Cittc2dpZCAiY2Fubm90IHJlYWQgc3RhdHMgZmlsZSIKK21zZ3N0ciAi0L3QtSDQvNC+0LPRgyDQtNCwINC/0YDQvtGH0LjRgtCw0Lwg0LTQsNGC0L7RgtC10LrRgyDRgdGC0LDRgtC40YHRgtC40LrQtSIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgc3RhdHMgZmlsZSBzaXplXG4iCittc2dzdHIgItC70L7RiNCwINCy0LXQu9C40YfQuNC90LAg0LTQsNGC0L7RgtC10LrQtSDRgdGC0LDRgtC40YHRgtC40LrQtVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6Mjg3IGxpYi9iaXRzZXRfc3RhdHMuYzoyODkKK21zZ2lkICJjYW5ub3Qgd3JpdGUgc3RhdHMgZmlsZSIKK21zZ3N0ciAi0L3QtSDQvNC+0LPRgyDQtNCwINGD0L/QuNGI0LXQvCDQtNCw0YLQvtGC0LXQutGDINGB0YLQsNGC0LjRgdGC0LjQutC1IgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjkyCittc2dpZCAiY2Fubm90IG9wZW4gc3RhdHMgZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAi0L3QtSDQvNC+0LPRgyDQtNCwINC+0YLQstC+0YDQuNC8INC00LDRgtC+0YLQtdC60YMg0YHRgtCw0YLQuNGB0YLQuNC60LUg0LfQsCDRg9C/0LjRgSIKKworIzogbGliL2Nsb3Nlb3V0LmM6MTEyCittc2dpZCAid3JpdGUgZXJyb3IiCittc2dzdHIgItCz0YDQtdGI0LrQsCDRg9C/0LjRgdCwIgorCisjOiBsaWIvZXJyb3IuYzoxODgKK21zZ2lkICJVbmtub3duIHN5c3RlbSBlcnJvciIKK21zZ3N0ciAi0J3QtdC/0L7Qt9C90LDRgtCwINCz0YDQtdGI0LrQsCDRgdC40YHRgtC10LzQsCIKKworIzogbGliL2dldG9wdC5jOjU0NyBsaWIvZ2V0b3B0LmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJyVzJyBpcyBhbWJpZ3VvdXM7IHBvc3NpYmlsaXRpZXM6IgorbXNnc3RyICIlczog0L7Qv9GG0LjRmNCwIOKAniVz4oCcINGY0LUg0L3QtdGY0LDRgdC90LA7INC80L7Qs9GD0ZvQvdC+0YHRgtC4OiIKKworIzogbGliL2dldG9wdC5jOjYyNCBsaWIvZ2V0b3B0LmM6NjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy0tJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6INC+0L/RhtC40ZjQsCDigJ4tLSVz4oCcINC90LUg0LTQvtC30LLQvtGZ0LDQstCwINCw0YDQs9GD0LzQtdC90YJcbiIKKworIzogbGliL2dldG9wdC5jOjYzNyBsaWIvZ2V0b3B0LmM6NjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJyVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6INC+0L/RhtC40ZjQsCDigJ4lYyVz4oCcINC90LUg0LTQvtC30LLQvtGZ0LDQstCwINCw0YDQs9GD0LzQtdC90YJcbiIKKworIzogbGliL2dldG9wdC5jOjY4NSBsaWIvZ2V0b3B0LmM6NzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy0tJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiDQvtC/0YbQuNGY0LAg4oCeLS0lc+KAnCDQt9Cw0YXRgtC10LLQsCDQsNGA0LPRg9C80LXQvdGCXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo3NDIgbGliL2dldG9wdC5jOjc0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiAnLS0lcydcbiIKK21zZ3N0ciAiJXM6INC90LXQv9C+0LfQvdCw0YLQsCDQvtC/0YbQuNGY0LAg4oCeLS0lc+KAnFxuIgorCisjOiBsaWIvZ2V0b3B0LmM6NzUzIGxpYi9nZXRvcHQuYzo3NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gJyVjJXMnXG4iCittc2dzdHIgIiVzOiDQvdC10L/QvtC30L3QsNGC0LAg0L7Qv9GG0LjRmNCwIOKAniVjJXPigJxcbiIKKworIzogbGliL2dldG9wdC5jOjgwNSBsaWIvZ2V0b3B0LmM6ODA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIG9wdGlvbiAtLSAnJWMnXG4iCittc2dzdHIgIiVzOiDQvdC10LjRgdC/0YDQsNCy0L3QsCDQvtC/0YbQuNGY0LAgLS0g4oCeJWPigJxcbiIKKworIzogbGliL2dldG9wdC5jOjg2MSBsaWIvZ2V0b3B0LmM6ODc4IGxpYi9nZXRvcHQuYzoxMDg4IGxpYi9nZXRvcHQuYzoxMTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgLS0gJyVjJ1xuIgorbXNnc3RyICIlczog0L7Qv9GG0LjRmNCwINC30LDRhdGC0LXQstCwINCw0YDQs9GD0LzQtdC90YIgLS0g4oCeJWPigJxcbiIKKworIzogbGliL2dldG9wdC5jOjkzNCBsaWIvZ2V0b3B0LmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyBpcyBhbWJpZ3VvdXNcbiIKK21zZ3N0ciAiJXM6INC+0L/RhtC40ZjQsCDigJ4tVyAlc+KAnCDRmNC1INC90LXRmNCw0YHQvdCwXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo5NzQgbGliL2dldG9wdC5jOjk5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczog0L7Qv9GG0LjRmNCwIOKAni1XICVz4oCcINC90LUg0LTQvtC30LLQvtGZ0LDQstCwINCw0YDQs9GD0LzQtdC90YJcbiIKKworIzogbGliL2dldG9wdC5jOjEwMTMgbGliL2dldG9wdC5jOjEwMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLVcgJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiDQvtC/0YbQuNGY0LAg4oCeLVcgJXPigJwg0LfQsNGF0YLQtdCy0LAg0LDRgNCz0YPQvNC10L3RglxuIgorCisjOiBsaWIvb2JzdGFjay5jOjQxMyBsaWIvb2JzdGFjay5jOjQxNSBsaWIveGFsbG9jLWRpZS5jOjM0Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAi0LzQtdC80L7RgNC40ZjQsCDRmNC1INC/0L7RgtGA0L7RiNC10L3QsCIKKworIworIzogbGliL3NwYXduLXBpcGUuYzoxNDAgbGliL3NwYXduLXBpcGUuYzoxNDMgbGliL3NwYXduLXBpcGUuYzoyNjQKKyM6IGxpYi9zcGF3bi1waXBlLmM6MjY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZSIKK21zZ3N0ciAi0L3QtSDQvNC+0LPRgyDQtNCwINC90LDQv9GA0LDQstC40Lwg0YHQv9C+0ZjQutGDIgorCisjOiBsaWIvc3Bhd24tcGlwZS5jOjIzNCBsaWIvc3Bhd24tcGlwZS5jOjM0OCBsaWIvd2FpdC1wcm9jZXNzLmM6MjgyCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MgZmFpbGVkIgorbXNnc3RyICIlcyDQv9C+0YLQv9GA0L7RhtC10YEg0L3QuNGY0LUg0YPRgdC/0LXQviIKKworIy4gVFJBTlNMQVRPUlM6CisjLiBHZXQgdHJhbnNsYXRpb25zIGZvciBvcGVuIGFuZCBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrcy4KKyMuIFRoZSBtZXNzYWdlIGNhdGFsb2cgc2hvdWxkIHRyYW5zbGF0ZSAiYCIgdG8gYSBsZWZ0CisjLiBxdW90YXRpb24gbWFyayBzdWl0YWJsZSBmb3IgdGhlIGxvY2FsZSwgYW5kIHNpbWlsYXJseSBmb3IKKyMuICInIi4gIEZvciBleGFtcGxlLCBhIEZyZW5jaCBVbmljb2RlIGxvY2FsIHNob3VsZCB0cmFuc2xhdGUKKyMuIHRoZXNlIHRvIFUrMDBBQiAoTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUKKyMuIFFVT1RBVElPTiBNQVJLKSwgYW5kIFUrMDBCQiAoUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFCisjLiBRVU9UQVRJT04gTUFSSyksIHJlc3BlY3RpdmVseS4KKyMuCisjLiBJZiB0aGUgY2F0YWxvZyBoYXMgbm8gdHJhbnNsYXRpb24sIHdlIHdpbGwgdHJ5IHRvCisjLiB1c2UgVW5pY29kZSBVKzIwMTggKExFRlQgU0lOR0xFIFFVT1RBVElPTiBNQVJLKSBhbmQKKyMuIFVuaWNvZGUgVSsyMDE5IChSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspLiAgSWYgdGhlCisjLiBjdXJyZW50IGxvY2FsZSBpcyBub3QgVW5pY29kZSwgbG9jYWxlX3F1b3Rpbmdfc3R5bGUKKyMuIHdpbGwgcXVvdGUgJ2xpa2UgdGhpcycsIGFuZCBjbG9jYWxlX3F1b3Rpbmdfc3R5bGUgd2lsbAorIy4gcXVvdGUgImxpa2UgdGhpcyIuICBZb3Ugc2hvdWxkIGFsd2F5cyBpbmNsdWRlIHRyYW5zbGF0aW9ucworIy4gZm9yICJgIiBhbmQgIiciIGV2ZW4gaWYgVSsyMDE4IGFuZCBVKzIwMTkgYXJlIGFwcHJvcHJpYXRlCisjLiBmb3IgeW91ciBsb2NhbGUuCisjLgorIy4gSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBwdXQgaGVyZSwgcGxlYXNlIHNlZQorIy4gPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUXVvdGF0aW9uX21hcmtzX2luX290aGVyX2xhbmd1YWdlcz4KKyMuIGFuZCB1c2UgZ2x5cGhzIHN1aXRhYmxlIGZvciB5b3VyIGxhbmd1YWdlLgorIzogbGliL3F1b3RlYXJnLmM6MzEyCittc2dpZCAiYCIKK21zZ3N0ciAi4oCeIgorCisjOiBsaWIvcXVvdGVhcmcuYzozMTMKK21zZ2lkICInIgorbXNnc3RyICLigJwiCisKKyM6IGxpYi90aW1ldmFyLmM6NDc1Cittc2dpZCAiIgorIlxuIgorIkV4ZWN1dGlvbiB0aW1lcyAoc2Vjb25kcylcbiIKK21zZ3N0ciAiIgorIlxuIgorItCS0YDQtdC80LXQvdCwINC40LfQstGA0YjQsNCy0LDRmtCwICjRgyDRgdC10LrRg9C90LTQsNC80LApXG4iCisKKyM6IGxpYi90aW1ldmFyLmM6NTI1Cittc2dpZCAiIFRPVEFMICAgICAgICAgICAgICAgICA6IgorbXNnc3RyICIg0KPQmtCj0J/QndCeICAgICAgICAgICAgICAgIDoiCisKKyM6IGxpYi90aW1ldmFyLmM6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWUgaW4gJXM6ICVsZC4lMDZsZCAoJWxkJSUpXG4iCittc2dzdHIgItCy0YDQtdC80LUg0YMgJXM6ICVsZC4lMDZsZCAoJWxkJSUpXG4iCisKKyM6IGxpYi93MzJzcGF3bi5oOjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIl9vcGVuX29zZmhhbmRsZSBmYWlsZWQiCittc2dzdHIgIuKAnl9vcGVuX29zZmhhbmRsZeKAnCDQvdC40ZjQtSDRg9GB0L/QtdC70L4iCisKKyM6IGxpYi93MzJzcGF3bi5oOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXN0b3JlIGZkICVkOiBkdXAyIGZhaWxlZCIKK21zZ3N0ciAi0L3QtSDQvNC+0LPRgyDQtNCwINC/0L7QstGA0LDRgtC40Lwg0YTQtCAlZDog4oCeZHVwMuKAnCDQvdC40ZjQtSDRg9GB0L/QtdC70L4iCisKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzoyMjMgbGliL3dhaXQtcHJvY2Vzcy5jOjI1NSBsaWIvd2FpdC1wcm9jZXNzLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MiCittc2dzdHIgIiVzINC/0L7RgtC/0YDQvtGG0LXRgSIKKworIzogbGliL3dhaXQtcHJvY2Vzcy5jOjI3NCBsaWIvd2FpdC1wcm9jZXNzLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MgZ290IGZhdGFsIHNpZ25hbCAlZCIKK21zZ3N0ciAiJXMg0L/QvtGC0L/RgNC+0YbQtdGBINGY0LUg0LTQvtCx0LjQviDQutC+0LHQvdC4INGB0LjQs9C90LDQuyAlZCIKKworI34gbXNnaWQgInN0YXRlICVkIgorI34gbXNnc3RyICLRgdGC0LDRmtC1ICVkIgorCisjfiBtc2dpZCAic3RyYXkgJ0AnIgorI34gbXNnc3RyICLQt9Cw0LvRg9GC0LDQu9C+IOKAnkDigJwiCmRpZmYgLS1naXQgYS9wby9zdGFtcC1wbyBiL3BvL3N0YW1wLXBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ODhmNzAKLS0tIC9kZXYvbnVsbAorKysgYi9wby9zdGFtcC1wbwpAQCAtMCwwICsxIEBACit0aW1lc3RhbXAKZGlmZiAtLWdpdCBhL3BvL3N2LmdtbyBiL3BvL3N2LmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTRiNmMxCi0tLSAvZGV2L251bGwKKysrIGIvcG8vc3YuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL3N2LnBvIGIvcG8vc3YucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJkYmZmMQotLS0gL2Rldi9udWxsCisrKyBiL3BvL3N2LnBvCkBAIC0wLDAgKzEsMTE3OSBAQAorIyBTd2VkaXNoIG1lc3NhZ2VzIGZvciBiaXNvbi4KKyMgQ29weXJpZ2h0IMKpIDIwMDEtMjAwNiwgMjAwOCwgMjAxMCwgMjAxMSwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGJpc29uIHBhY2thZ2UuCisjIEfDtnJhbiBVZGRlYm9yZyA8Z29lcmFuQHVkZGVib3JnLnNlPiwgMjAwMS0yMDA2LCAyMDA4LCAyMDEwLCAyMDExLCAyMDEyLgorIworIyAkUmV2aXNpb246IDEuODggJAorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYmlzb24gMi42LjkwXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTItMTItMDkgMjE6MDYrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogR8O2cmFuIFVkZGVib3JnIDxnb2VyYW5AdWRkZWJvcmcuc2U+XG4iCisiTGFuZ3VhZ2UtVGVhbTogU3dlZGlzaCA8dHAtc3ZAbGlzdG9yLnRwLXN2LnNlPlxuIgorIkxhbmd1YWdlOiBzdlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorCisjOiBzcmMvY29tcGxhaW4uYzoxMjAgc3JjL2NvbXBsYWluLmM6MTMxIHNyYy9jb21wbGFpbi5jOjE0MCBzcmMvY29tcGxhaW4uYzoxODgKKyM6IHNyYy9jb21wbGFpbi5jOjE5OAorbXNnaWQgIndhcm5pbmciCittc2dzdHIgInZhcm5pbmciCisKKyM6IHNyYy9jb21wbGFpbi5jOjE1MSBzcmMvY29tcGxhaW4uYzoxNjAgc3JjL2NvbXBsYWluLmM6MTY3Cittc2dpZCAiZXJyb3IiCittc2dzdHIgImZlbCIKKworIzogc3JjL2NvbXBsYWluLmM6MjA4IHNyYy9jb21wbGFpbi5jOjIxNQorbXNnaWQgImZhdGFsIGVycm9yIgorbXNnc3RyICLDtmRlc2RpZ2VydCBmZWwiCisKKyM6IHNyYy9jb25mbGljdHMuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyBzaGlmdCIKK21zZ3N0ciAiICAgIEtvbmZsaWt0IG1lbGxhbiByZWdlbCAlZCBvY2ggZWxlbWVudCAlcyBsw7ZzdGVzIHNvbSBza2lmdCIKKworIzogc3JjL2NvbmZsaWN0cy5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIHJlZHVjZSIKK21zZ3N0ciAiICAgIEtvbmZsaWt0IG1lbGxhbiByZWdlbCAlZCBvY2ggZWxlbWVudCAlcyBsw7ZzdGVzIHNvbSByZWR1Y2VyYSIKKworIzogc3JjL2NvbmZsaWN0cy5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIGFuIGVycm9yIgorbXNnc3RyICIgICAgS29uZmxpa3QgbWVsbGFuIHJlZ2VsICVkIG9jaCBlbGVtZW50ICVzIGzDtnN0ZXMgc29tIGV0dCBmZWwiCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCBzaGlmdC9yZWR1Y2UsICVkIHJlZHVjZS9yZWR1Y2VcbiIKK21zZ3N0ciAia29uZmxpa3RlcjogJWQgc2tpZnRhL3JlZHVjZXJhLCAlZCByZWR1Y2VyYS9yZWR1Y2VyYVxuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgc2hpZnQvcmVkdWNlXG4iCittc2dzdHIgImtvbmZsaWt0ZXI6ICVkIHNraWZ0YS9yZWR1Y2VyYVxuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgcmVkdWNlL3JlZHVjZVxuIgorbXNnc3RyICJrb25mbGlrdGVyOiAlZCByZWR1Y2VyYS9yZWR1Y2VyYVxuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YXRlICVkICIKK21zZ3N0ciAiVGlsbHN0w6VuZCAlZCAiCisKKyM6IHNyYy9jb25mbGljdHMuYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSVleHBlY3QtcnIgYXBwbGllcyBvbmx5IHRvIEdMUiBwYXJzZXJzIgorbXNnc3RyICIlJWV4cGVjdC1yciBnw6RsbGVyIGVuZGFzdCBHTFItcGFyc3JhciIKKworIzogc3JjL2NvbmZsaWN0cy5jOjYxNgorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCAlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3QiCittc2dpZF9wbHVyYWwgImV4cGVjdGVkICVkIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMiCittc2dzdHJbMF0gImbDtnJ2w6RudGFkZSAlZCBza2lmdGEvcmVkdWNlcmFrb25mbGlrdCIKK21zZ3N0clsxXSAiZsO2cnbDpG50YWRlICVkIHNraWZ0YS9yZWR1Y2VyYWtvbmZsaWt0ZXIiCisKKyM6IHNyYy9jb25mbGljdHMuYzo2MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJWQgcmVkdWNlL3JlZHVjZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiZXhwZWN0ZWQgJWQgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMiCittc2dzdHJbMF0gImbDtnJ2w6RudGFkZSAlZCByZWR1Y2VyYS9yZWR1Y2VyYWtvbmZsaWt0IgorbXNnc3RyWzFdICJmw7ZydsOkbnRhZGUgJWQgcmVkdWNlcmEvcmVkdWNlcmFrb25mbGlrdGVyIgorCisjOiBzcmMvZmlsZXMuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBvcGVuIgorbXNnc3RyICIlczoga2FuIGludGUgw7ZwcG5hIgorCisjOiBzcmMvZmlsZXMuYzoxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5wdXQvb3V0cHV0IGVycm9yIgorbXNnc3RyICJpbi0vdXRmZWwiCisKKyM6IHNyYy9maWxlcy5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2UgZmlsZSIKK21zZ3N0ciAia2FuIGludGUgc3TDpG5nYSBmaWwiCisKKyM6IHNyYy9maWxlcy5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBvdmVyd3JpdGUgdGhlIGlucHV0IGZpbGUgJXMiCittc2dzdHIgInbDpGdyYXIgYXR0IHNrcml2YSDDtnZlciBpbmRhdGFmaWxlbiAlcyIKKworIzogc3JjL2ZpbGVzLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0aW5nIG91dHB1dHMgdG8gZmlsZSAlcyIKK21zZ3N0ciAibW90c3RyaWRpZ2EgdXRtYXRuaW5nYXIgdGlsbCBmaWxlbiAlcyIKKworIzogc3JjL2dldGFyZ3MuYzoyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5IGAlcyAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIgorbXNnc3RyICJGw7Zyc8O2ayBtZWQgXCIlcyAtLWhlbHBcIiBmw7ZyIG1lciBpbmZvcm1hdGlvbi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFtPUFRJT05dLi4uIEZJTEVcbiIKK21zZ3N0ciAiQW52w6RuZG5pbmc6ICVzIFtGTEFHR0FdLi4uIEZJTFxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwMgorbXNnaWQgIiIKKyJHZW5lcmF0ZSBhIGRldGVybWluaXN0aWMgTFIgb3IgZ2VuZXJhbGl6ZWQgTFIgKEdMUikgcGFyc2VyIGVtcGxveWluZ1xuIgorIkxBTFIoMSksIElFTFIoMSksIG9yIGNhbm9uaWNhbCBMUigxKSBwYXJzZXIgdGFibGVzLiAgSUVMUigxKSBhbmRcbiIKKyJjYW5vbmljYWwgTFIoMSkgc3VwcG9ydCBpcyBleHBlcmltZW50YWwuXG4iCisiXG4iCittc2dzdHIgIiIKKyJHZW5lcmVyYSBlbiBkZXRlcm1pbmlzdGlzayBMUi0gZWxsZXIgZ2VuZXJhbGlzZXJhZCBMUi0gKEdMUi0pcGFyc2VyIHNvbVxuIgorImFudsOkbmRlciBMQUxSKDEpLCBJRUxSKDEpIGVsbGVyIGthbm9uaXNrIExSKDEpIHBhcnNuaW5nc3RhYmVsbGVyLiAgU3TDtmRcbiIKKyJmw7ZyIElFTFIoMSkgb2NoIGthbm9uaXNrIExSKDEpIMOkciBleHBlcmltZW50ZWxsdC5cbiIKKyJcbiIKKworIzogc3JjL2dldGFyZ3MuYzozMDkKK21zZ2lkICIiCisiTWFuZGF0b3J5IGFyZ3VtZW50cyB0byBsb25nIG9wdGlvbnMgYXJlIG1hbmRhdG9yeSBmb3Igc2hvcnQgb3B0aW9ucyB0b28uXG4iCittc2dzdHIgIiIKKyJPYmxpZ2F0b3Jpc2thIGFyZ3VtZW50IHRpbGwgbMOlbmdhIGZsYWdnb3Igw6RyIG9ibGlnYXRvcmlza2Egw6R2ZW4gZsO2ciBkZSAiCisia29ydGEuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzEyCittc2dpZCAiVGhlIHNhbWUgaXMgdHJ1ZSBmb3Igb3B0aW9uYWwgYXJndW1lbnRzLlxuIgorbXNnc3RyICJEZXRzYW1tYSBnw6RsbGVyIHZhbGZyaWEgYXJndW1lbnQuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzE2Cittc2dpZCAiIgorIlxuIgorIk9wZXJhdGlvbiBtb2RlczpcbiIKKyIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCisiICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorIiAgICAgIC0tcHJpbnQtbG9jYWxlZGlyICAgICAgb3V0cHV0IGRpcmVjdG9yeSBjb250YWluaW5nIGxvY2FsZS1kZXBlbmRlbnQgIgorImRhdGFcbiIKKyIgICAgICAtLXByaW50LWRhdGFkaXIgICAgICAgIG91dHB1dCBkaXJlY3RvcnkgY29udGFpbmluZyBza2VsZXRvbnMgYW5kIFhTTFRcbiIKKyIgIC15LCAtLXlhY2MgICAgICAgICAgICAgICAgIGVtdWxhdGUgUE9TSVggWWFjY1xuIgorIiAgLVcsIC0td2FybmluZ3NbPUNBVEVHT1JZXSAgcmVwb3J0IHRoZSB3YXJuaW5ncyBmYWxsaW5nIGluIENBVEVHT1JZXG4iCisiICAtZiwgLS1mZWF0dXJlWz1GRUFUVVJFXSAgICBhY3RpdmF0ZSBtaXNjZWxsYW5lb3VzIGZlYXR1cmVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBcmJldHNsw6RnZW46XG4iCisiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICB2aXNhIGRlbm5hIGhqw6RscHRleHQgb2NoIGF2c2x1dGFcbiIKKyIgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgIHZpc2EgdmVyc2lvbnNpbmZvcm1hdGlvbiBvY2ggYXZzbHV0YVxuIgorIiAgICAgIC0tcHJpbnQtbG9jYWxlZGlyICAgICAgc2tyaXYga2F0YWxvZ2VuIHNvbSBpbm5laMOlbGxlciBsb2thbGJlcm9lbmRlICIKKyJkYXRhXG4iCisiICAgICAgLS1wcmludC1kYXRhZGlyICAgICAgICBza3JpdiBrYXRhbG9nZW4gc29tIGlubmVow6VsbGVyIHNrZWxldHQgb2NoICIKKyJYU0xUXG4iCisiICAteSwgLS15YWNjICAgICAgICAgICAgICAgICBlbXVsZXJhIFBPU0lYLVlhY2NcbiIKKyIgIC1XLCAtLXdhcm5pbmdzWz1LQVRFR09SSV0gIHJhcHBvcnRlcmEgdmFybmluZ2FybmEgc29tIGZhbGxlciBpbm9tICIKKyJLQVRFR09SSVxuIgorIiAgLWYsIC0tZmVhdHVyZVs9RlVOS1RJT05dICAgYWt0aXZlcmEgZGl2ZXJzZSBmdW5rdGlvbmVyXG4iCisiXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJzZXI6XG4iCisiICAtTCwgLS1sYW5ndWFnZT1MQU5HVUFHRSAgICAgICAgICBzcGVjaWZ5IHRoZSBvdXRwdXQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VcbiIKKyIgIC1TLCAtLXNrZWxldG9uPUZJTEUgICAgICAgICAgICAgIHNwZWNpZnkgdGhlIHNrZWxldG9uIHRvIHVzZVxuIgorIiAgLXQsIC0tZGVidWcgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudCB0aGUgcGFyc2VyIGZvciBkZWJ1Z2dpbmdcbiIKKyIgICAgICAtLWxvY2F0aW9ucyAgICAgICAgICAgICAgICAgIGVuYWJsZSBsb2NhdGlvbiBzdXBwb3J0XG4iCisiICAtRCwgLS1kZWZpbmU9TkFNRVs9VkFMVUVdICAgICAgICBzaW1pbGFyIHRvICclZGVmaW5lIE5BTUUgXCJWQUxVRVwiJ1xuIgorIiAgLUYsIC0tZm9yY2UtZGVmaW5lPU5BTUVbPVZBTFVFXSAgb3ZlcnJpZGUgJyVkZWZpbmUgTkFNRSBcIlZBTFVFXCInXG4iCisiICAtcCwgLS1uYW1lLXByZWZpeD1QUkVGSVggICAgICAgICBwcmVwZW5kIFBSRUZJWCB0byB0aGUgZXh0ZXJuYWwgc3ltYm9sc1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZCBieSAnLURhcGkucHJlZml4PVBSRUZJWCdcbiIKKyIgIC1sLCAtLW5vLWxpbmVzICAgICAgICAgICAgICAgICAgIGRvbid0IGdlbmVyYXRlICcjbGluZScgZGlyZWN0aXZlc1xuIgorIiAgLWssIC0tdG9rZW4tdGFibGUgICAgICAgICAgICAgICAgaW5jbHVkZSBhIHRhYmxlIG9mIHRva2VuIG5hbWVzXG4iCittc2dzdHIgIiIKKyJQYXJzZXI6XG4iCisiICAtTCwgLS1sYW5ndWFnZT1TUFLDhUsgICAgICAgICAgICAgYW5nZSBwcm9ncmFtc3Byw6VrIGbDtnIgdXRtYXRuaW5nXG4iCisiICAtUywgLS1za2VsZXRvbj1GSUwgICAgICAgICAgICAgICBhbmdlIHNrZWxldHRmaWxlbiBzb20gc2thbGwgYW52w6RuZGFzXG4iCisiICAtdCwgLS1kZWJ1ZyAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50ZXJhIHBhcnNlcm4gZsO2ciBmZWxzw7ZrbmluZ1xuIgorIiAgICAgIC0tbG9jYXRpb25zICAgICAgICAgICAgICAgICAgYWt0aXZlcmEgc3TDtmQgZsO2ciBsw6RnZW5cbiIKKyIgIC1ELCAtLWRlZmluZT1OQU1OWz1Ww4RSREVdICAgICAgICBtb3RzdmFyYXIgJyVkZWZpbmUgTkFNTiBcIlbDhFJERVwiJ1xuIgorIiAgLUYsIC0tZm9yY2UtZGVmaW5lPU5BTU5bPVbDhFJERV0gIMOlc2lkb3PDpHR0ICclZGVmaW5lIE5BTU4gXCJWw4RSREVcIidcbiIKKyIgIC1wLCAtLW5hbWUtcHJlZml4PVBSRUZJWCAgICAgICAgIGzDpGdnIHRpbGwgUFJFRklYIGbDtnJlIGV4dGVybmEgc3ltYm9sZXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGFuYmVkZXMgdGlsbCBmw7ZybcOlbiBmw7ZyXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLURhcGkucHJlZml4PVBSRUZJWCdcbiIKKyIgIC1sLCAtLW5vLWxpbmVzICAgICAgICAgICAgICAgICAgIGdlbmVyZXJhIGludGUgXCIjbGluZVwiLWRpcmVrdGl2XG4iCisiICAtaywgLS10b2tlbi10YWJsZSAgICAgICAgICAgICAgICBpbmtsdWRlcmEgZW4gdGFiZWxsIMO2dmVyIGVsZW1lbnRuYW1uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzQ2Cittc2dpZCAiIgorIk91dHB1dDpcbiIKKyIgICAgICAtLWRlZmluZXNbPUZJTEVdICAgICAgIGFsc28gcHJvZHVjZSBhIGhlYWRlciBmaWxlXG4iCisiICAtZCAgICAgICAgICAgICAgICAgICAgICAgICBsaWtld2lzZSBidXQgY2Fubm90IHNwZWNpZnkgRklMRSAoZm9yIFBPU0lYICIKKyJZYWNjKVxuIgorIiAgLXIsIC0tcmVwb3J0PVRISU5HUyAgICAgICAgYWxzbyBwcm9kdWNlIGRldGFpbHMgb24gdGhlIGF1dG9tYXRvblxuIgorIiAgICAgIC0tcmVwb3J0LWZpbGU9RklMRSAgICAgd3JpdGUgcmVwb3J0IHRvIEZJTEVcbiIKKyIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIHNhbWUgYXMgYC0tcmVwb3J0PXN0YXRlJ1xuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg9UFJFRklYICAgc3BlY2lmeSBhIFBSRUZJWCBmb3Igb3V0cHV0IGZpbGVzXG4iCisiICAtbywgLS1vdXRwdXQ9RklMRSAgICAgICAgICBsZWF2ZSBvdXRwdXQgdG8gRklMRVxuIgorIiAgLWcsIC0tZ3JhcGhbPUZJTEVdICAgICAgICAgYWxzbyBvdXRwdXQgYSBncmFwaCBvZiB0aGUgYXV0b21hdG9uXG4iCisiICAteCwgLS14bWxbPUZJTEVdICAgICAgICAgICBhbHNvIG91dHB1dCBhbiBYTUwgcmVwb3J0IG9mIHRoZSBhdXRvbWF0b25cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGUgWE1MIHNjaGVtYSBpcyBleHBlcmltZW50YWwpXG4iCittc2dzdHIgIiIKKyJVdGRhdGE6XG4iCisiICAgICAgLS1kZWZpbmVzWz1GSUxdICAgICAgICBza2FwYSBvY2tzw6UgZW4gaHV2dWRmaWxcbiIKKyIgIC1kICAgICAgICAgICAgICAgICAgICAgICAgIGRldHNhbW1hLCB1dGFuIGF0dCBrdW5uYSBhbmdlIEZJTCAoZsO2ciBQT1NJWC0iCisiWWFjYylcbiIKKyIgIC1yLCAtLXJlcG9ydD1TQUtFUiAgICAgICAgIHNrYXBhIG9ja3PDpSBkZXRhbGplciBvbSBhdXRvbWF0ZW5cbiIKKyIgICAgICAtLXJlcG9ydC1maWxlPUZJTCAgICAgIHNrcml2IGVuIHJhcHBvcnQgdGlsbCBGSUxcbiIKKyIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIHNhbW1hIHNvbSBcIi0tcmVwb3J0PXN0YXRlXCJcbiIKKyIgIC1iLCAtLWZpbGUtcHJlZml4PVBSRUZJWCAgIGFuZ2UgZXR0IFBSRUZJWCBmw7ZyIHV0ZGF0YWZpbGVyXG4iCisiICAtbywgLS1vdXRwdXQ9RklMICAgICAgICAgICBsw6RnZyB1dGRhdGEgaSBGSUxcbiIKKyIgIC1nLCAtLWdyYXBoWz1GSUxdICAgICAgICAgIHNrYXBhIG9ja3PDpSBlbiBncmFmIGF2IGF1dG9tYXRlblxuIgorIiAgLXgsIC0teG1sWz1GSUxdICAgICAgICAgICAgc2thcGEgb2Nrc8OlIGVuIFhNTC1yYXBwb3J0IG9tIGF1dG9tYXRlblxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFhNTC1zY2hlbWF0IMOkciBleHBlcmltZW50ZWxsdClcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNjEKK21zZ2lkICIiCisiV2FybmluZyBjYXRlZ29yaWVzIGluY2x1ZGU6XG4iCisiICBgbWlkcnVsZS12YWx1ZXMnICB1bnNldCBvciB1bnVzZWQgbWlkcnVsZSB2YWx1ZXNcbiIKKyIgIGB5YWNjJyAgICAgICAgICAgIGluY29tcGF0aWJpbGl0aWVzIHdpdGggUE9TSVggWWFjY1xuIgorIiAgYGNvbmZsaWN0cy1zcicgICAgUy9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGNvbmZsaWN0cy1ycicgICAgUi9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGRlcHJlY2F0ZWQnICAgICAgb2Jzb2xldGUgY29uc3RydWN0c1xuIgorIiAgYG90aGVyJyAgICAgICAgICAgYWxsIG90aGVyIHdhcm5pbmdzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgYWxsJyAgICAgICAgICAgICBhbGwgdGhlIHdhcm5pbmdzXG4iCisiICBgbm8tQ0FURUdPUlknICAgICB0dXJuIG9mZiB3YXJuaW5ncyBpbiBDQVRFR09SWVxuIgorIiAgYG5vbmUnICAgICAgICAgICAgdHVybiBvZmYgYWxsIHRoZSB3YXJuaW5nc1xuIgorIiAgYGVycm9yJyAgICAgICAgICAgdHJlYXQgd2FybmluZ3MgYXMgZXJyb3JzXG4iCittc2dzdHIgIiIKKyJWYXJuaW5nc2thdGVnb3JpZXIgaW5uZWZhdHRhcjpcbiIKKyIgIFwibWlkcnVsZS12YWx1ZXNcIiAgZWogc2F0dGEgZWxsZXIgb2FudsOkbmRhIHbDpHJkZW4gbWl0dCBpIHJlZ2xlclxuIgorIiAgXCJ5YWNjXCIgICAgICAgICAgICBpbmtvbXBhdGliaWxpdGV0ZXIgbWVkIFBPU0lYIFlhY2NcbiIKKyIgIFwiY29uZmxpY3RzLXNyXCIgICAgUy9SLWtvbmZsaWt0ZXIgKG5vcm1hbHQgYWt0aXZ0KVxuIgorIiAgXCJjb25mbGljdHMtcnJcIiAgICBSL1Ita29uZmxpa3RlciAobm9ybWFsdCBha3RpdnQpXG4iCisiICBcImRlcHJlY2F0ZWRcIiAgICAgIGbDtnLDpWxkcmFkZSBrb25zdHJ1a3Rpb25lclxuIgorIiAgXCJvdGhlclwiICAgICAgICAgICBhbGxhIGFuZHJhIHZhcm5pbmdhciAobm9ybWFsdCBha3RpdnQpXG4iCisiICBcImFsbFwiICAgICAgICAgICAgIGFsbGEgdmFybmluZ2FybmFcbiIKKyIgIFwibm8tS0FURUdPUklcIiAgICAgc2zDpSBhdiB2YXJuaW5nYXIgaSBLQVRFR09SSVxuIgorIiAgXCJub25lXCIgICAgICAgICAgICBzbMOlIGF2IGFsbGEgdmFybmluZ2FybmFcbiIKKyIgIFwiZXJyb3JcIiAgICAgICAgICAgYmVoYW5kbGEgdmFybmluZ2FyIHNvbSBmZWxcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNzYKK21zZ2lkICIiCisiVEhJTkdTIGlzIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMgdGhhdCBjYW4gaW5jbHVkZTpcbiIKKyIgIGBzdGF0ZScgICAgICAgIGRlc2NyaWJlIHRoZSBzdGF0ZXNcbiIKKyIgIGBpdGVtc2V0JyAgICAgIGNvbXBsZXRlIHRoZSBjb3JlIGl0ZW0gc2V0cyB3aXRoIHRoZWlyIGNsb3N1cmVcbiIKKyIgIGBsb29rYWhlYWQnICAgIGV4cGxpY2l0bHkgYXNzb2NpYXRlIGxvb2thaGVhZCB0b2tlbnMgdG8gaXRlbXNcbiIKKyIgIGBzb2x2ZWQnICAgICAgIGRlc2NyaWJlIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMgc29sdmluZ1xuIgorIiAgYGFsbCcgICAgICAgICAgaW5jbHVkZSBhbGwgdGhlIGFib3ZlIGluZm9ybWF0aW9uXG4iCisiICBgbm9uZScgICAgICAgICBkaXNhYmxlIHRoZSByZXBvcnRcbiIKK21zZ3N0ciAiIgorIlNBS0VSIMOkciBlbiBsaXN0YSBtZWQga29tbWFzZXBhcmVyYWRlIG9yZCBzb20ga2FuIGlubmVow6VsbGE6XG4iCisiICBcInN0YXRlXCIgICAgICAgIGJlc2tyaXYgdGlsbHN0w6VuZGVuXG4iCisiICBcIml0ZW1zZXRcIiAgICAgIGtvbXBsZXR0ZXJhIGvDpHJub2JqZWt0bcOkbmdkZXJuYSBtZWQgc2luYSBow7ZsamVuXG4iCisiICBcImxvb2thaGVhZFwiICAgIGtvcHBsYSB1dHRyeWNrbGlnZW4gZnJhbcOldGJsaWNrYW5kZSBlbGVtZW50IHRpbGwgb2JqZWt0XG4iCisiICBcInNvbHZlZFwiICAgICAgIGJlc2tyaXYgbMO2c25pbmdhciBhdiBza2lmdGEvcmVkdWNlcmFrb25mbGlrdGVyXG4iCisiICBcImFsbFwiICAgICAgICAgIGlua2x1ZGVyYSBhbGwgb3ZhbnN0w6VlbmRlIGluZm9ybWF0aW9uXG4iCisiICBcIm5vbmVcIiAgICAgICAgIGF2YWt0aXZlcmEgcmFwcG9ydGVuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzg3Cittc2dpZCAiIgorIkZFQVRVUkUgaXMgYSBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCB3b3JkcyB0aGF0IGNhbiBpbmNsdWRlOlxuIgorIiAgYGNhcmV0JyAgICAgICAgc2hvdyBlcnJvcnMgd2l0aCBjYXJldHNcbiIKKyIgIGBhbGwnICAgICAgICAgIGFsbCBvZiB0aGUgYWJvdmVcbiIKKyIgIGBub25lJyAgICAgICAgIGRpc2FibGUgYWxsIG9mIHRoZSBhYm92ZVxuIgorIiAgIgorbXNnc3RyICIiCisiRlVOS1RJT04gw6RyIGVuIGxpc3RhIGF2IGtvbW1hc2VwYXJlcmFkZSBvcmQgc29tIGthbiBpbmtsdWRlcmE6XG4iCisiICBgY2FyZXQnICAgICAgICB2aXNhIGFsbGEgZmVsIG1lZCBjaXJrdW1mbGV4XG4iCisiICBgYWxsJyAgICAgICAgICBhbGxhIG92YW5zdMOlZW5kZVxuIgorIiAgYG5vbmUnICAgICAgICAgYXZha3RpdmVyYSBhbGxhIG92YW5zdMOlZW5kZVxuIgorIiAgIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorbXNnc3RyICJSYXBwb3J0ZXJhIGZlbCB0aWxsIDwlcz4uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhvbWUgcGFnZTogPCVzPi5cbiIKK21zZ3N0ciAiJXMgaGVtc2lkYTogPCVzPi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozOTcKK21zZ2lkICJHZW5lcmFsIGhlbHAgdXNpbmcgR05VIHNvZnR3YXJlOiA8aHR0cDovL3d3dy5nbnUub3JnL2dldGhlbHAvPi5cbiIKK21zZ3N0ciAiIgorIkFsbG3DpG4gaGrDpGxwIG9tIGF0dCBhbnbDpG5kYSBHTlUtcHJvZ3JhbTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4uXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBSZXBsYWNlIExBTkdfQ09ERSBpbiB0aGlzIFVSTCB3aXRoIHlvdXIgbGFuZ3VhZ2UKKyMuIGNvZGUgPGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vTEFOR19DT0RFLmh0bWw+IHRvCisjLiBmb3JtIG9uZSBvZiB0aGUgVVJMcyBhdCBodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtLy4KKyMuIE90aGVyd2lzZSwgcmVwbGFjZSB0aGUgZW50aXJlIFVSTCB3aXRoIHlvdXIgdHJhbnNsYXRpb24gdGVhbSdzCisjLiBlbWFpbCBhZGRyZXNzLgorIzogc3JjL2dldGFyZ3MuYzo0MTAKK21zZ2lkICJSZXBvcnQgdHJhbnNsYXRpb24gYnVncyB0byA8aHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS8+LlxuIgorbXNnc3RyICIiCisiUmFwcG9ydGVyYSBzeW5wdW5rdGVyIHDDpSDDtnZlcnPDpHR0bmluZ2VuIHRpbGwgPHRwLXN2QGxpc3Rvci50cC1zdi5zZT4uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDEyCittc2dpZCAiRm9yIGNvbXBsZXRlIGRvY3VtZW50YXRpb24sIHJ1bjogaW5mbyBiaXNvbi5cbiIKK21zZ3N0ciAiRsO2ciBmdWxsc3TDpG5kaWcgZG9rdW1lbnRhdGlvbiwga8O2cjogaW5mbyBiaXNvbi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmlzb24gKEdOVSBCaXNvbikgJXMiCittc2dzdHIgImJpc29uIChHTlUgQmlzb24pICVzIgorCisjOiBzcmMvZ2V0YXJncy5jOjQzMAorbXNnaWQgIldyaXR0ZW4gYnkgUm9iZXJ0IENvcmJldHQgYW5kIFJpY2hhcmQgU3RhbGxtYW4uXG4iCittc2dzdHIgIlNrcml2ZW4gYXYgUm9iZXJ0IENvcmJldHQgb2NoIFJpY2hhcmQgU3RhbGxtYW4uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcHlyaWdodCAoQykgJWQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCittc2dzdHIgIkNvcHlyaWdodCDCqSAlZCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MzcKK21zZ2lkICIiCisiVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk9cbiIKKyJ3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cbiIKK21zZ3N0ciAiIgorIkRldHRhIMOkciBmcmkgcHJvZ3JhbXZhcmEsIHNlIGvDpGxsa29kZW4gZsO2ciBrb3BpZXJpbmdzdmlsbGtvci4gIERldFxuIgorImZpbm5zIElOR0VOIGdhcmFudGksIGludGUgZW5zIGbDtnIgU8OETEpCQVJIRVQgZWxsZXIgTMOETVBMSUdIRVQgRsOWUiBFVFRcbiIKKyJTUEVDSUVMTFQgw4ROREFNw4VMLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSBza2VsZXRvbiBkZWNsYXJhdGlvbnMgYXJlIGludmFsaWQiCittc2dzdHIgImZsZXJhIHNrZWxldHRkZWtsYXJhdGlvbmVyIMOkciBpbnRlIHRpbGzDpXRldCIKKworIzogc3JjL2dldGFyZ3MuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgbGFuZ3VhZ2UiCittc2dzdHIgIiVzOiBvZ2lsdGlndCBzcHLDpWsiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDc5Cittc2dpZCAibXVsdGlwbGUgbGFuZ3VhZ2UgZGVjbGFyYXRpb25zIGFyZSBpbnZhbGlkIgorbXNnc3RyICJmbGVyYSBzcHLDpWtkZWtsYXJhdGlvbmVyIMOkciBpbnRlIHRpbGzDpXRldCIKKworIzogc3JjL2dldGFyZ3MuYzo3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG1pc3Npbmcgb3BlcmFuZCIKK21zZ3N0ciAiJXM6IHNha25hZCBvcGVyYW5kIgorCisjOiBzcmMvZ2V0YXJncy5jOjc0OQorIywgYy1mb3JtYXQKK21zZ2lkICJleHRyYSBvcGVyYW5kICVzIgorbXNnc3RyICJleHRyYSBvcGVyYW5kICVzIgorCisjOiBzcmMvZ3JhbS5jOjExMgorbXNnaWQgImVtcHR5IgorbXNnc3RyICJ0b20iCisKKyM6IHNyYy9ncmFtLmM6MjAxCittc2dpZCAiR3JhbW1hciIKK21zZ3N0ciAiR3JhbW1hdGlrIgorCisjOiBzcmMvZ3JhcGh2aXouYzo0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiLy8gR2VuZXJhdGVkIGJ5ICVzLlxuIgorIi8vIFJlcG9ydCBidWdzIHRvIDwlcz4uXG4iCisiLy8gSG9tZSBwYWdlOiA8JXM+LlxuIgorIlxuIgorbXNnc3RyICIiCisiLy8gR2VuZXJlcmFkIGF2ICVzLlxuIgorIi8vIFJhcHBvcnRlcmEgZmVsIHRpbGwgPCVzPi5cbiIKKyIvLyBIZW1zaWRhOiA8JXM+LlxuIgorIlxuIgorCisjOiBzcmMvbG9jYXRpb24uYzo5MyBzcmMvc2Nhbi1ncmFtLmw6ODU5CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgbnVtYmVyIG92ZXJmbG93IgorbXNnc3RyICJyYWRudW1tZXJzcGlsbCIKKworIzogc3JjL2xvY2F0aW9uLmM6OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29sdW1uIG51bWJlciBvdmVyZmxvdyIKK21zZ3N0ciAia29sdW1ubnVtbWVyc3BpbGwiCisKKyM6IHNyYy9tYWluLmM6MTQ2Cittc2dpZCAicnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzIgorbXNnc3RyICJvYW52w6RuZGJhciByZWdlbCBpIHBhcnNlcm4gcMOlIGdydW5kIGF2IGtvbmZsaWt0ZXIiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlZGVmaW5lIHZhcmlhYmxlICVzIHJlZGVmaW5lZCIKK21zZ3N0ciAiJSVkZWZpbmUtdmFyaWFiZWxuICVzIG9tZGVmaW5pZXJhZCIKKworIzogc3JjL211c2NsZS10YWIuYzo0NTMKK21zZ2lkICJwcmV2aW91cyBkZWZpbml0aW9uIgorbXNnc3RyICJmw7ZyZWfDpWVuZGUgZGVmaW5pdGlvbiIKKworIzogc3JjL211c2NsZS10YWIuYzo0OTAgc3JjL211c2NsZS10YWIuYzo1MDQgc3JjL211c2NsZS10YWIuYzo1NTYKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgJXMiCittc2dzdHIgIiVzOiBvZGVmaW5pZXJhZCAgJSVkZWZpbmUtdmFyaWFiZWwgJXMiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICUlZGVmaW5lIEJvb2xlYW4gdmFyaWFibGUgJXMiCittc2dzdHIgIm9naWx0aWd0IHbDpHJkZSBmw7ZyIGJvb2xlc2sgJSVkZWZpbmUtdmFyaWFiZWwgJXMiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjA5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICUlZGVmaW5lIHZhcmlhYmxlICVzOiAlcyIKK21zZ3N0ciAib2dpbHRpZ3QgdsOkcmRlIGbDtnIgJSVkZWZpbmUtdmFyaWFiZWxuICVzOiAlcyIKKworIzogc3JjL211c2NsZS10YWIuYzo2MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWNjZXB0ZWQgdmFsdWU6ICVzIgorbXNnc3RyICJhY2NlcHRlcmF0IHbDpHJkZTogJXMiCisKKyM6IHNyYy9wYXJzZS1ncmFtLnk6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgaWRlbnRpZmllciBpbiBwYXJhbWV0ZXIgZGVjbGFyYXRpb24iCittc2dzdHIgImlkZW50aWZlcmFyZSBzYWtuYXMgaSBwYXJhbWV0ZXJkZWtsYXJhdGlvbiIKKworIzogc3JjL3ByaW50LmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIHR5cGUgJWQgaXMgJXNcbiIKK21zZ3N0ciAiIHR5cCAlZCDDpHIgJXNcbiIKKworIzogc3JjL3ByaW50LmM6MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgInNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgJWRcbiIKK21zZ3N0ciAic2tpZnRhLCBvY2ggZ8OlIHRpbGwgdGlsbHN0w6VuZCAlZFxuIgorCisjOiBzcmMvcHJpbnQuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ28gdG8gc3RhdGUgJWRcbiIKK21zZ3N0ciAiZ8OlIHRpbGwgdGlsbHN0w6VuZCAlZFxuIgorCisjOiBzcmMvcHJpbnQuYzoyMDMKK21zZ2lkICJlcnJvciAobm9uYXNzb2NpYXRpdmUpXG4iCittc2dzdHIgImZlbCAoaWNrZWFzc29jaWF0aXYpXG4iCisKKyM6IHNyYy9wcmludC5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWR1Y2UgdXNpbmcgcnVsZSAlZCAoJXMpIgorbXNnc3RyICJyZWR1Y2VyYSBtZWQgcmVnZWwgJWQgKCVzKSIKKworIzogc3JjL3ByaW50LmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgImFjY2VwdCIKK21zZ3N0ciAiYWNjZXB0ZXJhIgorCisjOiBzcmMvcHJpbnQuYzoyNjQgc3JjL3ByaW50LmM6MzM4Cittc2dpZCAiJGRlZmF1bHQiCittc2dzdHIgIiRzdGFuZGFyZCIKKworIzogc3JjL3ByaW50LmM6MzczIHNyYy9wcmludF9ncmFwaC5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YXRlICVkIgorbXNnc3RyICJUaWxsc3TDpW5kICVkIgorCisjOiBzcmMvcHJpbnQuYzo0MDkKK21zZ2lkICJUZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIiCittc2dzdHIgIlRlcm1pbmFsZXIsIG1lZCByZWdsZXIgZMOkciBkZSBmw7ZyZWtvbW1lciIKKworIzogc3JjL3ByaW50LmM6NDM2Cittc2dpZCAiTm9udGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyIgorbXNnc3RyICJJY2tldGVybWluYWxlciwgbWVkIHJlZ2xlciBkw6RyIGRlIGbDtnJla29tbWVyIgorCisjOiBzcmMvcHJpbnQuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uIGxlZnQ6IgorbXNnc3RyICIgdGlsbCB2w6Ruc3RlcjoiCisKKyM6IHNyYy9wcmludC5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgb24gcmlnaHQ6IgorbXNnc3RyICIgdGlsbCBow7ZnZXI6IgorCisjOiBzcmMvcHJpbnQuYzo1MTAKK21zZ2lkICJSdWxlcyB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzIgorbXNnc3RyICJPYW52w6RuZGJhcmEgcmVnbGVyIGkgcGFyc2VyIHDDpSBncnVuZCBhdiBrb25mbGlrdGVyIgorCisjOiBzcmMvcmVhZGVyLmM6NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgJXMgZGVjbGFyYXRpb25zIgorbXNnc3RyICJmbGVyYSAlcy1kZWtsYXJhdGlvbmVyIgorCisjOiBzcmMvcmVhZGVyLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlc3VsdCB0eXBlIGNsYXNoIG9uIG1lcmdlIGZ1bmN0aW9uICVzOiA8JXM+ICE9IDwlcz4iCittc2dzdHIgInJlc3VsdGF0dHlwc2tvbmZsaWt0IHZpZCBzYW1tYW5zbGFnbmluZ3NmdW5rdGlvbiAlczogPCVzPiAhPSA8JXM+IgorCisjOiBzcmMvcmVhZGVyLmM6MTM5IHNyYy9zeW10YWIuYzoxNTYgc3JjL3N5bXRhYi5jOjE2NiBzcmMvc3ltdGFiLmM6OTM4CisjOiBzcmMvc3ltdGFiLmM6OTUzIHNyYy9zeW10YWIuYzo5Njggc3JjL3N5bXRhYi5jOjk4MworbXNnaWQgInByZXZpb3VzIGRlY2xhcmF0aW9uIgorbXNnc3RyICJmw7ZyZWfDpWVuZGUgZGVrbGFyYXRpb24iCisKKyM6IHNyYy9yZWFkZXIuYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlZCBzeW1ib2wgbmFtZSBmb3IgJXMgaWdub3JlZCIKK21zZ3N0ciAiZHVwbGljZXJhdCBzeW1ib2xuYW1uIGbDtnIgJXMgaWdub3JlcmF0IgorCisjOiBzcmMvcmVhZGVyLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bGUgZ2l2ZW4gZm9yICVzLCB3aGljaCBpcyBhIHRva2VuIgorbXNnc3RyICJyZWdlbCBnaXZlbiBmw7ZyICVzLCBzb20gw6RyIGV0dCBlbGVtZW50IgorCisjOiBzcmMvcmVhZGVyLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgInR5cGUgY2xhc2ggb24gZGVmYXVsdCBhY3Rpb246IDwlcz4gIT0gPCVzPiIKK21zZ3N0ciAidHlwa29uZmxpa3QgZsO2ciBzdGFuZGFyZMOldGfDpHJkOiA8JXM+IDwlcz4iCisKKyM6IHNyYy9yZWFkZXIuYzozMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgcnVsZSBmb3IgdHlwZWQgbm9udGVybWluYWwsIGFuZCBubyBhY3Rpb24iCittc2dzdHIgInRvbSByZWdlbCBmw7ZyIHR5cGFkIGlja2V0ZXJtaW5hbCwgb2NoIGluZ2VuIMOldGfDpHJkIgorCisjOiBzcmMvcmVhZGVyLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNlZCB2YWx1ZTogJCVkIgorbXNnc3RyICJvYW52w6RudCB2w6RyZGU6ICQlZCIKKworIzogc3JjL3JlYWRlci5jOjMzMAorbXNnaWQgInVuc2V0IHZhbHVlOiAkJCIKK21zZ3N0ciAiZWogc2F0dCB2w6RyZGU6ICQkIgorCisjOiBzcmMvcmVhZGVyLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgInRva2VuIGZvciAlJXByZWMgaXMgbm90IGRlZmluZWQ6ICVzIgorbXNnc3RyICJlbGVtZW50ZXQgZsO2ciAlJXByZWMgw6RyIGludGUgZGVmaW5pZXJhdDogJXMiCisKKyM6IHNyYy9yZWFkZXIuYzo0MzEgc3JjL3JlYWRlci5jOjQ0NSBzcmMvcmVhZGVyLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgb25lICVzIGFsbG93ZWQgcGVyIHJ1bGUiCittc2dzdHIgImVuZGFzdCBlbiAlcyB0aWxsw6V0cyBwZXIgcmVnZWwiCisKKyM6IHNyYy9yZWFkZXIuYzo0NDEgc3JjL3JlYWRlci5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhZmZlY3RzIG9ubHkgR0xSIHBhcnNlcnMiCittc2dzdHIgIiVzIHDDpXZlcmthciBlbmRhc3QgR0xSLXBhcnNyYXIiCisKKyM6IHNyYy9yZWFkZXIuYzo0NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgbXVzdCBiZSBmb2xsb3dlZCBieSBwb3NpdGl2ZSBudW1iZXIiCittc2dzdHIgIiVzIG3DpXN0ZSBmw7ZsamFzIGF2IGV0dCBwb3NpdGl2dCB0YWwiCisKKyM6IHNyYy9yZWFkZXIuYzo1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVsZSBpcyB0b28gbG9uZyIKK21zZ3N0ciAicmVnZWxuIMOkciBmw7ZyIGzDpW5nIgorCisjOiBzcmMvcmVhZGVyLmM6NjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJ1bGVzIGluIHRoZSBpbnB1dCBncmFtbWFyIgorbXNnc3RyICJpbmdhIHJlZ2xlciBpIGluZ3JhbW1hdGlrZW4iCisKKyM6IHNyYy9yZWR1Y2UuYzoyNDEKK21zZ2lkICJydWxlIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAib2FudsOkbmRiYXIgcmVnZWwgaSBncmFtbWF0aWtlbiIKKworIzogc3JjL3JlZHVjZS5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6ICVzIgorbXNnc3RyICJvYW52w6RuZGJhciBpY2tldGVybWluYWwgaSBncmFtbWF0aWtlbjogJXMiCisKKyM6IHNyYy9yZWR1Y2UuYzozNTAKK21zZ2lkICJOb250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyICJPYW52w6RuZGJhcmEgaWNrZXRlcm1pbmFsZXIgaSBncmFtbWF0aWtlbiIKKworIzogc3JjL3JlZHVjZS5jOjM2MworbXNnaWQgIlRlcm1pbmFscyB1bnVzZWQgaW4gZ3JhbW1hciIKK21zZ3N0ciAiT2FudsOkbmRhIHRlcm1pbmFsZXIgaSBncmFtbWF0aWtlbiIKKworIzogc3JjL3JlZHVjZS5jOjM3MgorbXNnaWQgIlJ1bGVzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAiT2FudsOkbmRiYXJhIHJlZ2xlciBpIGdyYW1tYXRpa2VuIgorCisjOiBzcmMvcmVkdWNlLmM6Mzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ2lkX3BsdXJhbCAiJWQgbm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0clswXSAiJWQgb2FudsOkbmRiYXIgaWNrZXRlcm1pbmFsIGkgZ3JhbW1hdGlrZW4iCittc2dzdHJbMV0gIiVkIG9hbnbDpG5kYmFyYSBpY2tldGVybWluYWxlciBpIGdyYW1tYXRpa2VuIgorCisjOiBzcmMvcmVkdWNlLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnaWRfcGx1cmFsICIlZCBydWxlcyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHJbMF0gIiVkIG9hbnbDpG5kYmFyIHJlZ2VsIGkgZ3JhbW1hdGlrZW4iCittc2dzdHJbMV0gIiVkIG9hbnbDpG5kYmFyYSByZWdsZXIgaSBncmFtbWF0aWtlbiIKKworIzogc3JjL3JlZHVjZS5jOjQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydCBzeW1ib2wgJXMgZG9lcyBub3QgZGVyaXZlIGFueSBzZW50ZW5jZSIKK21zZ3N0ciAic3RhcnRzeW1ib2xlbiAlcyBnZW5lcmVyYXIgaW5nYSBtZW5pbmdhciIKKworIzogc3JjL3NjYW4tY29kZS5sOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJheSAnJXMnIgorbXNnc3RyICJ2aWxzZWtvbW1ldCBcIiVzXCIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyMjkKK21zZ2lkICJhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZSIKK21zZ3N0ciAiZXR0IFwiO1wiIGthbiBiZWjDtnZhcyBpIHNsdXRldCBhdiDDpXRnw6RyZHNrb2RlbiIKKworIzogc3JjL3NjYW4tY29kZS5sOjIzMgorbXNnaWQgImZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JyIKK21zZ3N0ciAiZnJhbXRpZGEgdmVyc2lvbmVyIGF2IEJpc29uIGtvbW1lciBpbnRlIGzDpGdnYSB0aWxsIFwiO1wiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVzZSBvZiBZWUZBSUwsIHdoaWNoIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCIKK21zZ3N0ciAiYW52w6RuZG5pbmcgYXYgWVlGQUlMLCBzb20gYXZyw6VkZXMgaWZyw6VuIG9jaCBrb21tZXIgdGFzIGJvcnQiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0MzEgc3JjL3NjYW4tY29kZS5sOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcnMgdG86ICVjJXMgYXQgJXMiCittc2dzdHIgInJlZmVyZXJhciB0aWxsOiAlYyVzIHZpZCAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NzaWJseSBtZWFudDogJWMiCittc2dzdHIgIm3DtmpsaWdlbiBhdnNldHQ6ICVjIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgaGlkaW5nICVjIgorbXNnc3RyICIsIGTDtmxqZXIgJWMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGF0ICVzIgorbXNnc3RyICIgdmlkICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiwgY2Fubm90IGJlIGFjY2Vzc2VkIGZyb20gbWlkLXJ1bGUgYWN0aW9uIGF0ICQlZCIKK21zZ3N0ciAiLCBrYW4gaW50ZSBuw6VzIGZyw6VuIMOldGfDpHJkIG1pdHQgaSByZWdlbG4gdmlkICQlZCIKKworIzogc3JjL3NjYW4tY29kZS5sOjUyMSBzcmMvc2Nhbi1ncmFtLmw6NzgzCisjLCBjLWZvcm1hdAorbXNnaWQgImludGVnZXIgb3V0IG9mIHJhbmdlOiAlcyIKK21zZ3N0ciAiaGVsdGFsIHV0YW5mw7ZyIGludGVydmFsbDogJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWZlcmVuY2U6ICVzIgorbXNnc3RyICJvZ2lsdGlnIHJlZmVyZW5zOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IgYWZ0ZXIgJyVjJywgZXhwZWN0aW5nIGludGVnZXIsIGxldHRlciwgJ18nLCAnWycsIG9yICckJyIKK21zZ3N0ciAiIgorInN5bnRheGZlbCBlZnRlciBcIiVjXCIsIHNpZmZyYSwgYm9rc3RhdiwgXCJfXCIsIFwiW1wiIGVsbGVyIFwiJFwiIGbDtnJ2w6RudGFkZXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uIGJlZm9yZSAkJWQ6ICUuKnMiCittc2dzdHIgInN5bWJvbCBpbnRlIGZ1bm5lbiBpIHByb2R1a3Rpb24gZsO2cmUgJCVkOiAlLipzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjMzCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogJS4qcyIKK21zZ3N0ciAic3ltYm9sIGludGUgZnVubmVuIGkgcHJvZHVrdGlvbjogJS4qcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNsZWFkaW5nIHJlZmVyZW5jZTogJXMiCittc2dzdHIgInZpbHNlbGVkYW5kZSByZWZlcmVuczogJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIHJlZmVyZW5jZTogJXMiCittc2dzdHIgInR2ZXR5ZGlndCBhcmd1bWVudDogJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwbGljaXQgdHlwZSBnaXZlbiBpbiB1bnR5cGVkIGdyYW1tYXIiCittc2dzdHIgImV4cGxpY2l0IHR5cCBnaXZlbiBpIG90eXBhZCBncmFtbWF0aWsiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJCQgZm9yIHRoZSBtaWRydWxlIGF0ICQlZCBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiJCQgZsO2ciBtaXR0LWktcmVnZWxuIHZpZCAkJWQgYXYgJXMgaGFyIGluZ2VuIGRla2xhcmVyYWQgdHlwIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiQkIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICIkJCBmw7ZyICVzIGhhciBpbmdlbiBkZWtsYXJlcmFkIHR5cCIKKworIzogc3JjL3NjYW4tY29kZS5sOjc4NgorIywgYy1mb3JtYXQKK21zZ2lkICIkJXMgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiQlcyBmw7ZyICVzIGhhciBpbmdlbiBkZWtsYXJlcmFkIHR5cCIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJheSAnLCcgdHJlYXRlZCBhcyB3aGl0ZSBzcGFjZSIKK21zZ3N0ciAidmlsc2Vrb21tZXQgXCIsXCIgaGFudGVyYXQgc29tIGJsYW5rIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZGlyZWN0aXZlOiAlcyIKK21zZ3N0ciAib2dpbHRpZ3QgZGlyZWt0aXY6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaWRlbnRpZmllcjogJXMiCittc2dzdHIgIm9naWx0aWcgaWRlbnRpZmllcmFyZTogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyOTUKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciIKK21zZ2lkX3BsdXJhbCAiaW52YWxpZCBjaGFyYWN0ZXJzIgorbXNnc3RyWzBdICJvZ2lsdGlndCB0ZWNrZW4iCittc2dzdHJbMV0gIm9naWx0aWdhIHRlY2tlbiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGlkZW50aWZpZXIgaW4gYnJhY2tldGVkIG5hbWU6ICVzIgorbXNnc3RyICJvdsOkbnRhZCBpZGVudGlmaWVyYXJlIGkgbmFtbiBpbm9tIGtsYW1yYXI6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgImFuIGlkZW50aWZpZXIgZXhwZWN0ZWQiCittc2dzdHIgImVuIGlkZW50aWZpZXJhcmUgZsO2cnbDpG50YWRlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjM4MQorbXNnaWQgImludmFsaWQgY2hhcmFjdGVyIGluIGJyYWNrZXRlZCBuYW1lIgorbXNnaWRfcGx1cmFsICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gYnJhY2tldGVkIG5hbWUiCittc2dzdHJbMF0gIm9naWx0aWd0IHRlY2tlbiBpIG5hbW4gaSBrbGFtcmFyIgorbXNnc3RyWzFdICJvZ2lsdGlnYSB0ZWNrZW4gaSBuYW1uIGkga2xhbXJhciIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjQ4MSBzcmMvc2Nhbi1ncmFtLmw6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGNoYXJhY3RlciBsaXRlcmFsIgorbXNnc3RyICJ0b20gdGVja2Vua29uc3RhbnQiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo0ODYgc3JjL3NjYW4tZ3JhbS5sOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJleHRyYSBjaGFyYWN0ZXJzIGluIGNoYXJhY3RlciBsaXRlcmFsIgorbXNnc3RyICJleHRyYSBib2tzdMOkdmVyIGkgdGVja2Vua29uc3RhbnQiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudWxsIGNoYXJhY3RlciIKK21zZ3N0ciAib2dpbHRpZ3Qgbm9sbHRlY2tlbiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjUzMSBzcmMvc2Nhbi1ncmFtLmw6NTQxIHNyYy9zY2FuLWdyYW0ubDo1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgYWZ0ZXIgXFwtZXNjYXBlOiAlcyIKK21zZ3N0ciAib2dpbHRpZ3QgdGFsIGVmdGVyIFxcLXNwZWNpYWxzZWt2ZW5zOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjU3MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciBhZnRlciBcXC1lc2NhcGU6ICVzIgorbXNnc3RyICJvZ2lsdGlndCB0ZWNrZW4gZWZ0ZXIgXFwtc3BlY2lhbHNla3ZlbnM6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6OTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgJXMgYXQgZW5kIG9mIGZpbGUiCittc2dzdHIgInNha25hdCAlcyB2aWQgZmlsc2x1dCIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjkxMgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzIGF0IGVuZCBvZiBsaW5lIgorbXNnc3RyICJzYWtuYXQgJXMgdmlkIHJhZHNsdXQiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5jbG9zZWQgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICJvYXZzbHV0YXQgJXMtZGlyZWt0aXYgaSBza2VsZXR0ZXQiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIGZldyBhcmd1bWVudHMgZm9yICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAiZsO2ciBmw6UgYXJndW1lbnQgdGlsbCAlcy1kaXJla3RpdiBpIHNrZWxldHRldCIKKworIzogc3JjL3NjYW4tc2tlbC5sOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgZm9yICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAiZsO2ciBtw6VuZ2EgYXJndW1lbnQgdGlsbCAlcy1kaXJla3RpdiBpIHNrZWxldHRldCIKKworIzogc3JjL3N5bWxpc3QuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAkIHZhbHVlOiAkJWQiCittc2dzdHIgImZlbGFrdGlndCAkLXbDpHJkZTogJCVkIgorCisjOiBzcmMvc3ltdGFiLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUE9TSVggWWFjYyBmb3JiaWRzIGRhc2hlcyBpbiBzeW1ib2wgbmFtZXM6ICVzIgorbXNnc3RyICJQT1NJWC1ZYWNjIGbDtnJianVkZXIgYmluZGVzdHJlY2sgaSBzeW1ib2xuYW1uOiAlcyIKKworIzogc3JjL3N5bXRhYi5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IHN5bWJvbHMgaW4gaW5wdXQgZ3JhbW1hciAobGltaXQgaXMgJWQpIgorbXNnc3RyICJmw7ZyIG3DpW5nYSBzeW1ib2xlciBpIGluZ3JhbW1hdGlrZW4gKGdyw6Ruc2VuIMOkciAlZCkiCisKKyM6IHNyYy9zeW10YWIuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVkZWNsYXJhdGlvbiBmb3IgJXMiCittc2dzdHIgIiVzLW9tZGVrbGFyYXRpb24gZsO2ciAlcyIKKworIzogc3JjL3N5bXRhYi5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciA8JXM+IgorbXNnc3RyICIlcy1vbWRla2xhcmF0aW9uIGbDtnIgPCVzPiIKKworIzogc3JjL3N5bXRhYi5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgcmVkZWZpbmVkIgorbXNnc3RyICJzeW1ib2xlbiAlcyBvbWRlZmluaWVyYWQiCisKKyM6IHNyYy9zeW10YWIuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHJlZGVjbGFyZWQiCittc2dzdHIgInN5bWJvbGVuICVzIG9tZGVrbGFyZXJhZCIKKworIzogc3JjL3N5bXRhYi5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlZmluaW5nIHVzZXIgdG9rZW4gbnVtYmVyIG9mICVzIgorbXNnc3RyICJvbWRlZmluaXRpb24gYXYgZWxlbWVudG51bW1lciBmw7ZyICVzIgorCisjOiBzcmMvc3ltdGFiLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyBpcyB1c2VkLCBidXQgaXMgbm90IGRlZmluZWQgYXMgYSB0b2tlbiBhbmQgaGFzIG5vIHJ1bGVzIgorbXNnc3RyICIiCisic3ltYm9sZW4gJXMgYW52w6RuZHMsIG1lbiDDpHIgaW50ZSBkZWZpbmllcmFkIHNvbSBldHQgZWxlbWVudCBvY2ggaGFyIGluZ2EgIgorInJlZ2xlciIKKworIzogc3JjL3N5bXRhYi5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgdXNlZCBtb3JlIHRoYW4gb25jZSBhcyBhIGxpdGVyYWwgc3RyaW5nIgorbXNnc3RyICJzeW1ib2xlbiAlcyBhbnbDpG5kcyBtZXIgw6RuIGVuIGfDpW5nIHNvbSBlbiBib2tzdGF2bGlnIHN0csOkbmciCisKKyM6IHNyYy9zeW10YWIuYzo0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIGdpdmVuIG1vcmUgdGhhbiBvbmUgbGl0ZXJhbCBzdHJpbmciCittc2dzdHIgInN5bWJvbGVuICVzIGhhciBmw6V0dCBtZXIgw6RuIGVuIGJva3N0YXZsaWcgc3Ryw6RuZyIKKworIzogc3JjL3N5bXRhYi5jOjUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2VyIHRva2VuIG51bWJlciAlZCByZWRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAiYW52w6RuZGFyc3ltYm9sIG51bW1lciAlZCBvbWRla2xhcmVyYWQgZsO2ciAlcyIKKworIzogc3JjL3N5bXRhYi5jOjUzOQorIywgYy1mb3JtYXQKK21zZ2lkICJwcmV2aW91cyBkZWNsYXJhdGlvbiBmb3IgJXMiCittc2dzdHIgImbDtnJlZ8OlZW5kZSBkZWtsYXJhdGlvbiBmw7ZyICVzIgorCisjOiBzcmMvc3ltdGFiLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBzdGFydCBzeW1ib2wgJXMgaXMgdW5kZWZpbmVkIgorbXNnc3RyICJzdGFydHN5bWJvbGVuICVzIMOkciBvZGVmaW5pZXJhZCIKKworIzogc3JjL3N5bXRhYi5jOjkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgc3RhcnQgc3ltYm9sICVzIGlzIGEgdG9rZW4iCittc2dzdHIgInN0YXJ0c3ltYm9sZW4gJXMgw6RyIGV0dCBlbGVtZW50IgorCisjOiBzcmMvc3ltdGFiLmM6OTM1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICUlZGVzdHJ1Y3RvciIKK21zZ3N0ciAib21kZWtsYXJhdGlvbiBhdiBzdGFuZGFyZC0lJWRlc3RydWN0b3IgbWVkIHRhZ2ciCisKKyM6IHNyYy9zeW10YWIuYzo5NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdsZXNzICUlZGVzdHJ1Y3RvciIKK21zZ3N0ciAib21kZWtsYXJhdGlvbiBhdiBzdGFuZGFyZC0lJWRlc3RydWN0b3IgdXRhbiB0YWdnIgorCisjOiBzcmMvc3ltdGFiLmM6OTY1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICUlcHJpbnRlciIKK21zZ3N0ciAib21kZWtsYXJhdGlvbiBhdiBzdGFuZGFyZC0lJXByaW50ZXIgbWVkIHRhZ2ciCisKKyM6IHNyYy9zeW10YWIuYzo5ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdsZXNzICUlcHJpbnRlciIKK21zZ3N0ciAib21kZWtsYXJhdGlvbiBhdiBzdGFuZGFyZC0lJXByaW50ZXIgdXRhbiB0YWdnIgorCisjOiBkamdwcC9zdWJwaXBlLmM6NjMgZGpncHAvc3VicGlwZS5jOjI4NiBkamdwcC9zdWJwaXBlLmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92aW5nIG9mICclcycgZmFpbGVkIgorbXNnc3RyICJhdHQgdGEgYm9ydCBcIiVzXCIgbWlzc2x5Y2thZGVzIgorCisjOiBkamdwcC9zdWJwaXBlLmM6ODUgZGpncHAvc3VicGlwZS5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNyZWF0aW9uIG9mIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICJhdHQgc2thcGEgZW4gdGVtcG9yw6RyZmlsIG1pc3NseWNrYWRlcyIKKworIzogZGpncHAvc3VicGlwZS5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJzYXZpbmcgc3RkaW4gZmFpbGVkIgorbXNnc3RyICJhdHQgc3BhcmEgc3RhbmRhcmQgaW4gbWlzc2x5Y2thZGVzIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgInNhdmluZyBzdGRvdXQgZmFpbGVkIgorbXNnc3RyICJhdHQgc3BhcmEgc3RhbmRhcmQgdXQgbWlzc2x5Y2thZGVzIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTUzIGRqZ3BwL3N1YnBpcGUuYzoxOTcgZGpncHAvc3VicGlwZS5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nIG9mIHRtcGZpbGUgZmFpbGVkIgorbXNnc3RyICJhdHQgw7ZwcG5hIGVuIHRlbXBvcsOkcmZpbCBtaXNzbHlja2FkZXMiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgYmlzb24ncyBzdGRvdXQgdG8gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAib21kaXJpZ2VyaW5nIGF2IGJpc29ucyBzdGFuZGFyZCB1dCB0aWxsIHRlbXBvcsOkcmZpbGVuIG1pc3NseWNrYWRlcyIKKworIzogZGpncHAvc3VicGlwZS5jOjIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBtNCdzIHN0ZGluIGZyb20gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAib21kaXJpZ2VyaW5nIGF2IG00OmFzIHN0YW5kYXJkIGluIGZyw6VuIHRlbXBvcsOkcmZpbGVuIG1pc3NseWNrYWRlcyIKKworIzogZGpncHAvc3VicGlwZS5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nIG9mIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICJhdHQgw7ZwcG5hIGVuIHRlbXBvcsOkcmZpbCBtaXNzbHlja2FkZXMiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgbTQncyBzdGRvdXQgdG8gYSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIm9tZGlyaWdlcmluZyBhdiBtNDphcyBzdGFuZGFyZCB1dCB0aWxsIGVuIHRlbXBvcsOkcmZpbCBtaXNzbHlja2FkZXMiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3Vic2lkaWFyeSBwcm9ncmFtICclcycgaW50ZXJydXB0ZWQiCittc2dzdHIgInVuZGVycHJvZ3JhbW1ldCBcIiVzXCIgYXZicsO2dHMiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAic3Vic2lkaWFyeSBwcm9ncmFtICclcycgbm90IGZvdW5kIgorbXNnc3RyICJ1bmRlcnByb2dyYW1tZXQgXCIlc1wiIGZpbm5zIGludGUiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgYmlzb24ncyBzdGRpbiBmcm9tIHRoZSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIm9tZGlyaWdlcmluZyBhdiBiaXNvbnMgc3RhbmRhcmQgaW4gZnLDpW4gdGVtcG9yw6RyZmlsZW4gbWlzc2x5Y2thZGVzIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCAlcyBmb3IgJXMiCittc2dzdHIgIm9naWx0aWd0IGFyZ3VtZW50ICVzIHRpbGwgJXMiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgYXJndW1lbnQgJXMgZm9yICVzIgorbXNnc3RyICJ0dmV0eWRpZ3QgYXJndW1lbnQgJXMgdGlsbCAlcyIKKworIzogbGliL2FyZ21hdGNoLmM6MTUzCittc2dpZCAiVmFsaWQgYXJndW1lbnRzIGFyZToiCittc2dzdHIgIkdpbHRpZ2EgYXJndW1lbnQgw6RyOiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfYWxsb2NzLCAldSBmcmVlZCAoJS4yZiUlKS5cbiIKK21zZ3N0ciAiJXUgYml0bcOkbmdkYWxsb2tlcmluZ2FyLCAldSBmcmlhbmRlbiAoJS4yZiUlKS5cbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfc2V0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdG3DpG5nZG3DpG5nZGVyLCAldSBjYWNoYWRlICglLjJmJSUpXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3Jlc2V0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdG3DpG5nZMOldGVyc3TDpGxsYW5kZW4sICV1IGNhY2hhZGUgKCUuMmYlJSlcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfdGVzdHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorbXNnc3RyICIldSBiaXRtw6RuZ2R0ZXN0ZXIsICV1IGNhY2hhZGUgKCUuMmYlJSlcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfbGlzdHNcbiIKK21zZ3N0ciAiJXUgYml0bcOkbmdkbGlzdG9yXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTIKK21zZ2lkICJjb3VudCBsb2cgaGlzdG9ncmFtXG4iCittc2dzdHIgImFucm9wc2xvZ2doaXN0b2dyYW1cbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5NQorbXNnaWQgInNpemUgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICJzdG9ybGVrc2xvZ2doaXN0b2dyYW1cbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5OAorbXNnaWQgImRlbnNpdHkgaGlzdG9ncmFtXG4iCittc2dzdHIgImRlbnNpdGV0c2hpc3RvZ3JhbVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCaXRzZXQgc3RhdGlzdGljczpcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkJpdG3DpG5nZHNzdGF0aXN0aWs6XG4iCisiXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWNjdW11bGF0ZWQgcnVucyA9ICV1XG4iCittc2dzdHIgIkFja3VtdWxlcmFkZSBrw7ZybmluZ2FyID0gJXVcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI1OSBsaWIvYml0c2V0X3N0YXRzLmM6MjY0Cittc2dpZCAiY2Fubm90IHJlYWQgc3RhdHMgZmlsZSIKK21zZ3N0ciAia2FuIGludGUgbMOkc2Egc3RhdGlzdGlrZmlsZW4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHN0YXRzIGZpbGUgc2l6ZVxuIgorbXNnc3RyICJkw6VsaWcgc3RhdGlzdGlrZmlsc3Rvcmxla1xuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6Mjg3IGxpYi9iaXRzZXRfc3RhdHMuYzoyODkKK21zZ2lkICJjYW5ub3Qgd3JpdGUgc3RhdHMgZmlsZSIKK21zZ3N0ciAia2FuIGludGUgc2tyaXZhIHN0YXRpc3Rpa2ZpbGVuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjkyCittc2dpZCAiY2Fubm90IG9wZW4gc3RhdHMgZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAia2FuIGludGUgw7ZwcG5hIHN0YXRpc3Rpa2ZpbCBmw7ZyIHNrcml2bmluZyIKKworIzogbGliL2Nsb3Nlb3V0LmM6MTEyCittc2dpZCAid3JpdGUgZXJyb3IiCittc2dzdHIgInNrcml2ZmVsIgorCisjOiBsaWIvZXJyb3IuYzoxODgKK21zZ2lkICJVbmtub3duIHN5c3RlbSBlcnJvciIKK21zZ3N0ciAiT2vDpG50IHN5c3RlbWZlbCIKKworIzogbGliL2dldG9wdC5jOjU0NyBsaWIvZ2V0b3B0LmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJyVzJyBpcyBhbWJpZ3VvdXM7IHBvc3NpYmlsaXRpZXM6IgorbXNnc3RyICIlczogZmxhZ2dhbiBcIiVzXCIgw6RyIG3DpW5ndHlkaWc7IG3DtmpsaWdoZXRlcjoiCisKKyM6IGxpYi9nZXRvcHQuYzo2MjQgbGliL2dldG9wdC5jOjYyOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBmbGFnZ2FuIFwiLS0lc1wiIHRhciBpbmdldCBhcmd1bWVudFxuIgorCisjOiBsaWIvZ2V0b3B0LmM6NjM3IGxpYi9nZXRvcHQuYzo2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnJWMlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogZmxhZ2dhbiBcIiVjJXNcIiB0YXIgaW5nZXQgYXJndW1lbnRcbiIKKworIzogbGliL2dldG9wdC5jOjY4NSBsaWIvZ2V0b3B0LmM6NzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy0tJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBmbGFnZ2FuIFwiLS0lc1wiIGJlaMO2dmVyIGV0dCBhcmd1bWVudFxuIgorCisjOiBsaWIvZ2V0b3B0LmM6NzQyIGxpYi9nZXRvcHQuYzo3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gJy0tJXMnXG4iCittc2dzdHIgIiVzOiBva8OkbmQgZmxhZ2dhIFwiLS0lc1wiXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo3NTMgbGliL2dldG9wdC5jOjc1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiAnJWMlcydcbiIKK21zZ3N0ciAiJXM6IG9rw6RuZCBmbGFnZ2EgXCIlYyVzXCJcbiIKKworIzogbGliL2dldG9wdC5jOjgwNSBsaWIvZ2V0b3B0LmM6ODA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIG9wdGlvbiAtLSAnJWMnXG4iCittc2dzdHIgIiVzOiBvZ2lsdGlnIGZsYWdnYSAtLVwiJWNcIlxuIgorCisjOiBsaWIvZ2V0b3B0LmM6ODYxIGxpYi9nZXRvcHQuYzo4NzggbGliL2dldG9wdC5jOjEwODggbGliL2dldG9wdC5jOjExMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAnJWMnXG4iCittc2dzdHIgIiVzOiBmbGFnZ2FuIGJlaMO2dmVyIGV0dCBhcmd1bWVudCAtLSBcIiVjXCJcbiIKKworIzogbGliL2dldG9wdC5jOjkzNCBsaWIvZ2V0b3B0LmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyBpcyBhbWJpZ3VvdXNcbiIKK21zZ3N0ciAiJXM6IGZsYWdnYW4gXCItVyAlc1wiIMOkciB0dmV0eWRpZ1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6OTc0IGxpYi9nZXRvcHQuYzo5OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLVcgJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IGZsYWdnYW4gXCItVyAlc1wiIHRhciBpbmdldCBhcmd1bWVudFxuIgorCisjOiBsaWIvZ2V0b3B0LmM6MTAxMyBsaWIvZ2V0b3B0LmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IGZsYWdnYW4gXCItVyAlc1wiIGJlaMO2dmVyIGV0dCBhcmd1bWVudFxuIgorCisjOiBsaWIvb2JzdGFjay5jOjQxMyBsaWIvb2JzdGFjay5jOjQxNSBsaWIveGFsbG9jLWRpZS5jOjM0Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAibWlubmV0IHNsdXQiCisKKyM6IGxpYi9zcGF3bi1waXBlLmM6MTQwIGxpYi9zcGF3bi1waXBlLmM6MTQzIGxpYi9zcGF3bi1waXBlLmM6MjY0CisjOiBsaWIvc3Bhd24tcGlwZS5jOjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIHBpcGUiCittc2dzdHIgImthbiBpbnRlIHNrYXBhIHLDtnIiCisKKyM6IGxpYi9zcGF3bi1waXBlLmM6MjM0IGxpYi9zcGF3bi1waXBlLmM6MzQ4IGxpYi93YWl0LXByb2Nlc3MuYzoyODIKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyBmYWlsZWQiCittc2dzdHIgIiVzLXVuZGVycHJvY2VzcyBtaXNzbHlja2FkZXMiCisKKyMgTsOkciB2aSBnw6VyIMO2dmVyIHRpbGwgVW5pY29kZSBtZXIgYWxsbcOkbnQga2Fuc2tlIHZpIGLDtnIgw7Z2ZXJzw6R0dGEgYsOlZGEgZGVzc2EKKyMgbWVkIFUrMjAxRCAoUklHSFQgRE9VQkxFIFFVT1RBVElPTiBNQVJLKSBww6Ugc3ZlbnNrYS4gIEVsbGVyPworIworIy4gVFJBTlNMQVRPUlM6CisjLiBHZXQgdHJhbnNsYXRpb25zIGZvciBvcGVuIGFuZCBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrcy4KKyMuIFRoZSBtZXNzYWdlIGNhdGFsb2cgc2hvdWxkIHRyYW5zbGF0ZSAiYCIgdG8gYSBsZWZ0CisjLiBxdW90YXRpb24gbWFyayBzdWl0YWJsZSBmb3IgdGhlIGxvY2FsZSwgYW5kIHNpbWlsYXJseSBmb3IKKyMuICInIi4gIEZvciBleGFtcGxlLCBhIEZyZW5jaCBVbmljb2RlIGxvY2FsIHNob3VsZCB0cmFuc2xhdGUKKyMuIHRoZXNlIHRvIFUrMDBBQiAoTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUKKyMuIFFVT1RBVElPTiBNQVJLKSwgYW5kIFUrMDBCQiAoUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFCisjLiBRVU9UQVRJT04gTUFSSyksIHJlc3BlY3RpdmVseS4KKyMuCisjLiBJZiB0aGUgY2F0YWxvZyBoYXMgbm8gdHJhbnNsYXRpb24sIHdlIHdpbGwgdHJ5IHRvCisjLiB1c2UgVW5pY29kZSBVKzIwMTggKExFRlQgU0lOR0xFIFFVT1RBVElPTiBNQVJLKSBhbmQKKyMuIFVuaWNvZGUgVSsyMDE5IChSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspLiAgSWYgdGhlCisjLiBjdXJyZW50IGxvY2FsZSBpcyBub3QgVW5pY29kZSwgbG9jYWxlX3F1b3Rpbmdfc3R5bGUKKyMuIHdpbGwgcXVvdGUgJ2xpa2UgdGhpcycsIGFuZCBjbG9jYWxlX3F1b3Rpbmdfc3R5bGUgd2lsbAorIy4gcXVvdGUgImxpa2UgdGhpcyIuICBZb3Ugc2hvdWxkIGFsd2F5cyBpbmNsdWRlIHRyYW5zbGF0aW9ucworIy4gZm9yICJgIiBhbmQgIiciIGV2ZW4gaWYgVSsyMDE4IGFuZCBVKzIwMTkgYXJlIGFwcHJvcHJpYXRlCisjLiBmb3IgeW91ciBsb2NhbGUuCisjLgorIy4gSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBwdXQgaGVyZSwgcGxlYXNlIHNlZQorIy4gPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUXVvdGF0aW9uX21hcmtzX2luX290aGVyX2xhbmd1YWdlcz4KKyMuIGFuZCB1c2UgZ2x5cGhzIHN1aXRhYmxlIGZvciB5b3VyIGxhbmd1YWdlLgorIzogbGliL3F1b3RlYXJnLmM6MzEyCittc2dpZCAiYCIKK21zZ3N0ciAiXCIiCisKKyM6IGxpYi9xdW90ZWFyZy5jOjMxMworbXNnaWQgIiciCittc2dzdHIgIlwiIgorCisjOiBsaWIvdGltZXZhci5jOjQ3NQorbXNnaWQgIiIKKyJcbiIKKyJFeGVjdXRpb24gdGltZXMgKHNlY29uZHMpXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFeGVrdmVyaW5nc3RpZGVyIChzZWt1bmRlcilcbiIKKworIzogbGliL3RpbWV2YXIuYzo1MjUKK21zZ2lkICIgVE9UQUwgICAgICAgICAgICAgICAgIDoiCittc2dzdHIgIiBUT1RBTFQgICAgICAgICAgICAgICAgOiIKKworIzogbGliL3RpbWV2YXIuYzo1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZSBpbiAlczogJWxkLiUwNmxkICglbGQlJSlcbiIKK21zZ3N0ciAidGlkIGkgJXM6ICVsZC4lMDZsZCAoJWxkJSUpXG4iCisKKyM6IGxpYi93MzJzcGF3bi5oOjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIl9vcGVuX29zZmhhbmRsZSBmYWlsZWQiCittc2dzdHIgIl9vcGVuX29zZmhhbmRsZSBtaXNzbHlja2FkZXMiCisKKyM6IGxpYi93MzJzcGF3bi5oOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXN0b3JlIGZkICVkOiBkdXAyIGZhaWxlZCIKK21zZ3N0ciAiZGV0IGfDpXIgaW50ZSBhdHQgw6V0ZXJzdMOkbGxhIGZiICVkOiBkdXAyIG1pc3NseWNrYWRlcyIKKworIzogbGliL3dhaXQtcHJvY2Vzcy5jOjIyMyBsaWIvd2FpdC1wcm9jZXNzLmM6MjU1IGxpYi93YWl0LXByb2Nlc3MuYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyIKK21zZ3N0ciAiJXMtdW5kZXJwcm9jZXNzIgorCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6Mjc0IGxpYi93YWl0LXByb2Nlc3MuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyBnb3QgZmF0YWwgc2lnbmFsICVkIgorbXNnc3RyICIlcy11bmRlcnByb2Nlc3MgZmljayBlbiDDtmRlc2RpZ2VyIHNpZ25hbCAlZCIKZGlmZiAtLWdpdCBhL3BvL3RyLmdtbyBiL3BvL3RyLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDMyOTkxCi0tLSAvZGV2L251bGwKKysrIGIvcG8vdHIuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL3RyLnBvIGIvcG8vdHIucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc1YjkzMQotLS0gL2Rldi9udWxsCisrKyBiL3BvL3RyLnBvCkBAIC0wLDAgKzEsMTQwOSBAQAorIyBUdXJraXNoIHRyYW5zbGF0aW9ucyBmb3IgR05VIEJpc29uIG1lc3NhZ2VzLgorIyBDb3B5cmlnaHQgKEMpIDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIEFsdHXwIEJheXJhbSA8YWx0dWdiYXlyYW1fMjAwMEB5YWhvby5jb20+LCAyMDAxLgorIyDHYfBy/SDH9mx0ZWtpbiA8Y2FncmlAeHM0YWxsLm5sPiwgMjAwMyAtIDIwMDUKKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IEdOVSBiaXNvbiAyLjBcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLWJpc29uQGdudS5vcmdcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMi0xMi0xMiAxNjowOSswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwNS0wMy0yMCAyMjowMyswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiDHYfBy/SDH9mx0ZWtpbiA8Y2FncmlAeHM0YWxsLm5sPlxuIgorIkxhbmd1YWdlLVRlYW06IFR1cmtpc2ggPGdudS10ci11MTJhQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZTogdHJcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS05XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MTsgcGx1cmFsPTA7XG4iCisKKyM6IHNyYy9jb21wbGFpbi5jOjEyMCBzcmMvY29tcGxhaW4uYzoxMzEgc3JjL2NvbXBsYWluLmM6MTQwIHNyYy9jb21wbGFpbi5jOjE4OAorIzogc3JjL2NvbXBsYWluLmM6MTk4Cittc2dpZCAid2FybmluZyIKK21zZ3N0ciAidXlhcv0iCisKKyM6IHNyYy9jb21wbGFpbi5jOjE1MSBzcmMvY29tcGxhaW4uYzoxNjAgc3JjL2NvbXBsYWluLmM6MTY3CisjLCBmdXp6eQorbXNnaWQgImVycm9yIgorbXNnc3RyICJHL8cgaGF0YXP9IgorCisjOiBzcmMvY29tcGxhaW4uYzoyMDggc3JjL2NvbXBsYWluLmM6MjE1CisjLCBmdXp6eQorbXNnaWQgImZhdGFsIGVycm9yIgorbXNnc3RyICL2bPxtY/xsIGhhdGE6ICIKKworIzogc3JjL2NvbmZsaWN0cy5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIHNoaWZ0IgorbXNnc3RyICIgICAgJWQgZHVydW11ICVzIGFuZGFj/SBhcmFz/W5kYWtpIOdlbGn+a2kga2F5ZP1y/WxhcmFrIOf2evxtbGVuZGkiCisKKyM6IHNyYy9jb25mbGljdHMuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyByZWR1Y2UiCittc2dzdHIgIiAgICAlZCBkdXJ1bXUgJXMgYW5kYWP9IGFyYXP9bmRha2kg52Vsaf5raSBpbmRpcmdlbmVyZWsg5/Z6/G1sZW5kaSIKKworIzogc3JjL2NvbmZsaWN0cy5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIGFuIGVycm9yIgorbXNnc3RyICIgICAgJWQgZHVydW11ICVzIGFuZGFj/SBhcmFz/W5kYWtpIOdlbGn+a2kgaGF0YSBvbGFyYWsg5/Z6/G1sZW5kaSIKKworIzogc3JjL2NvbmZsaWN0cy5jOjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdHM6ICVkIHNoaWZ0L3JlZHVjZSwgJWQgcmVkdWNlL3JlZHVjZVxuIgorbXNnc3RyICLnZWxp/mtpbGVyOiAlZCD2dGVsZW1lL2luZGlyZ2VtZSwgJWQgaW5kaXJnZW1lL2luZGlyZ2VtZVxuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgc2hpZnQvcmVkdWNlXG4iCittc2dzdHIgIudlbGn+a2lsZXI6ICVkIPZ0ZWxlbWUvaW5kaXJnZW1lXG4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCByZWR1Y2UvcmVkdWNlXG4iCittc2dzdHIgIudlbGn+a2lsZXI6ICVkIGluZGlyZ2VtZS9pbmRpcmdlbWVcbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdGF0ZSAlZCAiCittc2dzdHIgIkR1cnVtICVkICIKKworIzogc3JjL2NvbmZsaWN0cy5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICIlJWV4cGVjdC1yciBhcHBsaWVzIG9ubHkgdG8gR0xSIHBhcnNlcnMiCittc2dzdHIgIiUlZXhwZWN0LXJyIHNhZGVjZSBHTFIgYXly/f50/XL9Y/1sYXL9IGnnaW4gZ2XnZXJsaWRpciIKKworIzogc3JjL2NvbmZsaWN0cy5jOjYxNgorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCAlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3QiCittc2dpZF9wbHVyYWwgImV4cGVjdGVkICVkIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMiCittc2dzdHJbMF0gIiVkIPZ0ZWxlbWUvaW5kaXJnZW1lIOdlbGn+a2lzaSBiZWtsZW5peW9yIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICVkIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3QiCittc2dpZF9wbHVyYWwgImV4cGVjdGVkICVkIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3RzIgorbXNnc3RyWzBdICIlZCBpbmRpcmdlbWUvaW5kaXJnZW1lIOdlbGn+a2lzaSBiZWtsZW5peW9yIgorCisjOiBzcmMvZmlsZXMuYzoxMTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3Qgb3BlbiIKK21zZ3N0ciAiYCVzJyBkb3N5YXP9IGHn/Wxhbf15b3IiCisKKyM6IHNyYy9maWxlcy5jOjEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnB1dC9vdXRwdXQgZXJyb3IiCittc2dzdHIgIiIKKworIzogc3JjL2ZpbGVzLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjbG9zZSBmaWxlIgorbXNnc3RyICJkb3N5YSBrYXBhdP1sYW39eW9yIgorCisjOiBzcmMvZmlsZXMuYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gb3ZlcndyaXRlIHRoZSBpbnB1dCBmaWxlICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9maWxlcy5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdGluZyBvdXRwdXRzIHRvIGZpbGUgJXMiCittc2dzdHIgIiVzIGRvc3lhc/1uYSDnZWxp/mVuIOf9a3T9bGFyIgorCisjOiBzcmMvZ2V0YXJncy5jOjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCittc2dzdHIgIkRhaGEgZmF6bGEgYmlsZ2kgaedpbiBgJXMgLS1oZWxwJyB5YXr9bi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFtPUFRJT05dLi4uIEZJTEVcbiIKK21zZ3N0ciAiS3VsbGFu/W06ICVzIFtTRcdFTkVLXS4uLiBET1NZQVxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwMgorbXNnaWQgIiIKKyJHZW5lcmF0ZSBhIGRldGVybWluaXN0aWMgTFIgb3IgZ2VuZXJhbGl6ZWQgTFIgKEdMUikgcGFyc2VyIGVtcGxveWluZ1xuIgorIkxBTFIoMSksIElFTFIoMSksIG9yIGNhbm9uaWNhbCBMUigxKSBwYXJzZXIgdGFibGVzLiAgSUVMUigxKSBhbmRcbiIKKyJjYW5vbmljYWwgTFIoMSkgc3VwcG9ydCBpcyBleHBlcmltZW50YWwuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozMDkKK21zZ2lkICIiCisiTWFuZGF0b3J5IGFyZ3VtZW50cyB0byBsb25nIG9wdGlvbnMgYXJlIG1hbmRhdG9yeSBmb3Igc2hvcnQgb3B0aW9ucyB0b28uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozMTIKK21zZ2lkICJUaGUgc2FtZSBpcyB0cnVlIGZvciBvcHRpb25hbCBhcmd1bWVudHMuXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozMTYKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIk9wZXJhdGlvbiBtb2RlczpcbiIKKyIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCisiICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorIiAgICAgIC0tcHJpbnQtbG9jYWxlZGlyICAgICAgb3V0cHV0IGRpcmVjdG9yeSBjb250YWluaW5nIGxvY2FsZS1kZXBlbmRlbnQgIgorImRhdGFcbiIKKyIgICAgICAtLXByaW50LWRhdGFkaXIgICAgICAgIG91dHB1dCBkaXJlY3RvcnkgY29udGFpbmluZyBza2VsZXRvbnMgYW5kIFhTTFRcbiIKKyIgIC15LCAtLXlhY2MgICAgICAgICAgICAgICAgIGVtdWxhdGUgUE9TSVggWWFjY1xuIgorIiAgLVcsIC0td2FybmluZ3NbPUNBVEVHT1JZXSAgcmVwb3J0IHRoZSB3YXJuaW5ncyBmYWxsaW5nIGluIENBVEVHT1JZXG4iCisiICAtZiwgLS1mZWF0dXJlWz1GRUFUVVJFXSAgICBhY3RpdmF0ZSBtaXNjZWxsYW5lb3VzIGZlYXR1cmVzXG4iCisiXG4iCittc2dzdHIgIiIKKyLHYWz9/m1hIGtpcGxlcmk6XG4iCisiICAtaCwgLS1oZWxwICAgICAgYnUgeWFyZP1t/SBn9nN0ZXIgdmUg5/1rXG4iCisiICAtViwgLS12ZXJzaW9uICAgc/xy/G0gYmlsZ2lzaW5pIHZlciB2ZSDn/WtcbiIKKyIgIC15LCAtLXlhY2MgICAgICBQT1NJWCB5YWNjIPZ5a/xubWVzaVxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMyOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnNlcjpcbiIKKyIgIC1MLCAtLWxhbmd1YWdlPUxBTkdVQUdFICAgICAgICAgIHNwZWNpZnkgdGhlIG91dHB1dCBwcm9ncmFtbWluZyBsYW5ndWFnZVxuIgorIiAgLVMsIC0tc2tlbGV0b249RklMRSAgICAgICAgICAgICAgc3BlY2lmeSB0aGUgc2tlbGV0b24gdG8gdXNlXG4iCisiICAtdCwgLS1kZWJ1ZyAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50IHRoZSBwYXJzZXIgZm9yIGRlYnVnZ2luZ1xuIgorIiAgICAgIC0tbG9jYXRpb25zICAgICAgICAgICAgICAgICAgZW5hYmxlIGxvY2F0aW9uIHN1cHBvcnRcbiIKKyIgIC1ELCAtLWRlZmluZT1OQU1FWz1WQUxVRV0gICAgICAgIHNpbWlsYXIgdG8gJyVkZWZpbmUgTkFNRSBcIlZBTFVFXCInXG4iCisiICAtRiwgLS1mb3JjZS1kZWZpbmU9TkFNRVs9VkFMVUVdICBvdmVycmlkZSAnJWRlZmluZSBOQU1FIFwiVkFMVUVcIidcbiIKKyIgIC1wLCAtLW5hbWUtcHJlZml4PVBSRUZJWCAgICAgICAgIHByZXBlbmQgUFJFRklYIHRvIHRoZSBleHRlcm5hbCBzeW1ib2xzXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXByZWNhdGVkIGJ5ICctRGFwaS5wcmVmaXg9UFJFRklYJ1xuIgorIiAgLWwsIC0tbm8tbGluZXMgICAgICAgICAgICAgICAgICAgZG9uJ3QgZ2VuZXJhdGUgJyNsaW5lJyBkaXJlY3RpdmVzXG4iCisiICAtaywgLS10b2tlbi10YWJsZSAgICAgICAgICAgICAgICBpbmNsdWRlIGEgdGFibGUgb2YgdG9rZW4gbmFtZXNcbiIKK21zZ3N0ciAiIgorIkF5cv3+dP1y/WP9OlxuIgorIiAgLVMsIC0tc2tlbGV0b249RklMRSAgICAgICAga3VsbGFu/WxhY2FrIGlza2VsZXRpIGJlbGlydFxuIgorIiAgLXQsIC0tZGVidWcgICAgICAgICAgICAgICAgYXly/f50/XL9Y/15YSBoYXRhIGF5/WtsYXn9Y/0gZWtsZVxuIgorIiAgICAgIC0tbG9jYXRpb25zICAgICAgICAgICAga29udW0gaGVzYXBsYW1hbGFy/W79IGV0a2lubGX+dGlyXG4iCisiICAtcCwgLS1uYW1lLXByZWZpeD3WTkVLICAgICBk/f4gc2ltZ2VsZXJpbiBiYf79bmEg1k5FSyBla2xlXG4iCisiICAtbCwgLS1uby1saW5lcyAgICAgICAgICAgICBgI2xpbmUnIHn2bmVyZ2VsZXJpbmkg/HJldG1lXG4iCisiICAtbiwgLS1uby1wYXJzZXIgICAgICAgICAgICBzYWRlY2UgdGFibG9sYXL9IPxyZXRcbiIKKyIgIC1rLCAtLXRva2VuLXRhYmxlICAgICAgICAgIGFuZGHnIGlzaW1sZXJpbmluIGJpciB0YWJsb3N1bnUgaedlclxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM0NgorIywgZnV6enkKK21zZ2lkICIiCisiT3V0cHV0OlxuIgorIiAgICAgIC0tZGVmaW5lc1s9RklMRV0gICAgICAgYWxzbyBwcm9kdWNlIGEgaGVhZGVyIGZpbGVcbiIKKyIgIC1kICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2V3aXNlIGJ1dCBjYW5ub3Qgc3BlY2lmeSBGSUxFIChmb3IgUE9TSVggIgorIllhY2MpXG4iCisiICAtciwgLS1yZXBvcnQ9VEhJTkdTICAgICAgICBhbHNvIHByb2R1Y2UgZGV0YWlscyBvbiB0aGUgYXV0b21hdG9uXG4iCisiICAgICAgLS1yZXBvcnQtZmlsZT1GSUxFICAgICB3cml0ZSByZXBvcnQgdG8gRklMRVxuIgorIiAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgc2FtZSBhcyBgLS1yZXBvcnQ9c3RhdGUnXG4iCisiICAtYiwgLS1maWxlLXByZWZpeD1QUkVGSVggICBzcGVjaWZ5IGEgUFJFRklYIGZvciBvdXRwdXQgZmlsZXNcbiIKKyIgIC1vLCAtLW91dHB1dD1GSUxFICAgICAgICAgIGxlYXZlIG91dHB1dCB0byBGSUxFXG4iCisiICAtZywgLS1ncmFwaFs9RklMRV0gICAgICAgICBhbHNvIG91dHB1dCBhIGdyYXBoIG9mIHRoZSBhdXRvbWF0b25cbiIKKyIgIC14LCAtLXhtbFs9RklMRV0gICAgICAgICAgIGFsc28gb3V0cHV0IGFuIFhNTCByZXBvcnQgb2YgdGhlIGF1dG9tYXRvblxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoZSBYTUwgc2NoZW1hIGlzIGV4cGVyaW1lbnRhbClcbiIKK21zZ3N0ciAiIgorIsf9a3T9OlxuIgorIiAgLWQsIC0tZGVmaW5lcyAgICAgICAgICAgICAgYmlyIGJh/mz9ayBkb3N5YXP9IGRhIPxyZXRcbiIKKyIgIC1yLCAtLXJlcG9ydD1TRcdFTkVLTEVSICAgIG90b21hdHRhIGF5cv1udP1s/SBiaWxnaSBkZSBn9nN0ZXJcbiIKKyIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIG90b21hdP1uIGJpciBh5/1rbGFtYXP9bv0gZGEg/HJldFxuIgorIiAgLWIsIC0tZmlsZS1wcmVmaXg91k5FSyAgICAg5/1rdP0gZG9zeWFsYXL9IGnnaW4gYmlyINZORUsgYmVsaXJcbiIKKyIgIC1vLCAtLW91dHB1dD1ET1NZQSAgICAgICAgIOf9a3T9ef0gRE9TWUF5YSB5YXpcbiIKKyIgIC1nLCAtLWdyYXBoICAgICAgICAgICAgICAgIG90b21hdP1uIGJpciBWQ0cgZ3JhZmlrIGHn/WtsYW1hc/1u/SBkYSD8cmV0XG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzYxCittc2dpZCAiIgorIldhcm5pbmcgY2F0ZWdvcmllcyBpbmNsdWRlOlxuIgorIiAgYG1pZHJ1bGUtdmFsdWVzJyAgdW5zZXQgb3IgdW51c2VkIG1pZHJ1bGUgdmFsdWVzXG4iCisiICBgeWFjYycgICAgICAgICAgICBpbmNvbXBhdGliaWxpdGllcyB3aXRoIFBPU0lYIFlhY2NcbiIKKyIgIGBjb25mbGljdHMtc3InICAgIFMvUiBjb25mbGljdHMgKGVuYWJsZWQgYnkgZGVmYXVsdClcbiIKKyIgIGBjb25mbGljdHMtcnInICAgIFIvUiBjb25mbGljdHMgKGVuYWJsZWQgYnkgZGVmYXVsdClcbiIKKyIgIGBkZXByZWNhdGVkJyAgICAgIG9ic29sZXRlIGNvbnN0cnVjdHNcbiIKKyIgIGBvdGhlcicgICAgICAgICAgIGFsbCBvdGhlciB3YXJuaW5ncyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGFsbCcgICAgICAgICAgICAgYWxsIHRoZSB3YXJuaW5nc1xuIgorIiAgYG5vLUNBVEVHT1JZJyAgICAgdHVybiBvZmYgd2FybmluZ3MgaW4gQ0FURUdPUllcbiIKKyIgIGBub25lJyAgICAgICAgICAgIHR1cm4gb2ZmIGFsbCB0aGUgd2FybmluZ3NcbiIKKyIgIGBlcnJvcicgICAgICAgICAgIHRyZWF0IHdhcm5pbmdzIGFzIGVycm9yc1xuIgorbXNnc3RyICIiCisKKyMgRFVaRUxUOiBjZXZyaWxtZW1pcyBpa2kgbWVzYWogdmFyCisjOiBzcmMvZ2V0YXJncy5jOjM3NgorIywgZnV6enkKK21zZ2lkICIiCisiVEhJTkdTIGlzIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMgdGhhdCBjYW4gaW5jbHVkZTpcbiIKKyIgIGBzdGF0ZScgICAgICAgIGRlc2NyaWJlIHRoZSBzdGF0ZXNcbiIKKyIgIGBpdGVtc2V0JyAgICAgIGNvbXBsZXRlIHRoZSBjb3JlIGl0ZW0gc2V0cyB3aXRoIHRoZWlyIGNsb3N1cmVcbiIKKyIgIGBsb29rYWhlYWQnICAgIGV4cGxpY2l0bHkgYXNzb2NpYXRlIGxvb2thaGVhZCB0b2tlbnMgdG8gaXRlbXNcbiIKKyIgIGBzb2x2ZWQnICAgICAgIGRlc2NyaWJlIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMgc29sdmluZ1xuIgorIiAgYGFsbCcgICAgICAgICAgaW5jbHVkZSBhbGwgdGhlIGFib3ZlIGluZm9ybWF0aW9uXG4iCisiICBgbm9uZScgICAgICAgICBkaXNhYmxlIHRoZSByZXBvcnRcbiIKK21zZ3N0ciAiIgorIlNFx0VORUtMRVIgYf5h8P1kYWtpIGFuaHRhciBz9npj/GtsZXJkZW4gdmlyZ/xsbGUgYXn9cmFyYWsgb2x1/nR1cnVsYWJpbGlyOlxuIgorIiAgYHN0YXRlJyAgICAgICAgZHVydW1sYXL9IGHn/WtsYVxuIgorIiAgYGl0ZW1zZXQnICAgICAgY29tcGxldGUgdGhlIGNvcmUgaXRlbSBzZXRzIHdpdGggdGhlaXIgY2xvc3VyZVxuIgorIiAgYGxvb2thaGVhZCcgICAgZXhwbGljaXRseSBhc3NvY2lhdGUgbG9va2FoZWFkcyB0byBpdGVtc1xuIgorIiAgYHNvbHZlZCcgICAgICAg9nRlbGVtZS9pbmRpZ2VybWUg52Vsaf5raWxlcmluaW4g5/Z6/G38bvwgYef9a2xhXG4iCisiICBgYWxsJyAgICAgICAgICB5dWthcv1kYWtpIGJpbGdpbGVyaW5pIHT8bfxu/CBnb3N0ZXJpclxuIgorIiAgYG5vbmUnICAgICAgICAgcmFwb3J1IPxyZXRtZVxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM4NworbXNnaWQgIiIKKyJGRUFUVVJFIGlzIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMgdGhhdCBjYW4gaW5jbHVkZTpcbiIKKyIgIGBjYXJldCcgICAgICAgIHNob3cgZXJyb3JzIHdpdGggY2FyZXRzXG4iCisiICBgYWxsJyAgICAgICAgICBhbGwgb2YgdGhlIGFib3ZlXG4iCisiICBgbm9uZScgICAgICAgICBkaXNhYmxlIGFsbCBvZiB0aGUgYWJvdmVcbiIKKyIgICIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKK21zZ3N0ciAiIgorIkhhdGFsYXL9IDxidWctYmlzb25AZ251Lm9yZz4nYSxcbiIKKyLnZXZpcmkgaGF0YWxhcv1u/SA8Z251LXRyLXUxMmFAbGlzdHMuc291cmNlZm9yZ2UubmV0PidlIGJpbGRpcmluLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBob21lIHBhZ2U6IDwlcz4uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozOTcKK21zZ2lkICJHZW5lcmFsIGhlbHAgdXNpbmcgR05VIHNvZnR3YXJlOiA8aHR0cDovL3d3dy5nbnUub3JnL2dldGhlbHAvPi5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogUmVwbGFjZSBMQU5HX0NPREUgaW4gdGhpcyBVUkwgd2l0aCB5b3VyIGxhbmd1YWdlCisjLiBjb2RlIDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtL0xBTkdfQ09ERS5odG1sPiB0bworIy4gZm9ybSBvbmUgb2YgdGhlIFVSTHMgYXQgaHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS8uCisjLiBPdGhlcndpc2UsIHJlcGxhY2UgdGhlIGVudGlyZSBVUkwgd2l0aCB5b3VyIHRyYW5zbGF0aW9uIHRlYW0ncworIy4gZW1haWwgYWRkcmVzcy4KKyM6IHNyYy9nZXRhcmdzLmM6NDEwCittc2dpZCAiUmVwb3J0IHRyYW5zbGF0aW9uIGJ1Z3MgdG8gPGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vPi5cbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjQxMgorbXNnaWQgIkZvciBjb21wbGV0ZSBkb2N1bWVudGF0aW9uLCBydW46IGluZm8gYmlzb24uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmlzb24gKEdOVSBCaXNvbikgJXMiCittc2dzdHIgImJpc29uIChHTlUgQmlzb24pICVzIgorCisjOiBzcmMvZ2V0YXJncy5jOjQzMAorbXNnaWQgIldyaXR0ZW4gYnkgUm9iZXJ0IENvcmJldHQgYW5kIFJpY2hhcmQgU3RhbGxtYW4uXG4iCittc2dzdHIgIllhemFubGFyOiBSb2JlcnQgQ29yYmV0dCB2ZSBSaWNoYXJkIFN0YWxsbWFuLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3B5cmlnaHQgKEMpICVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorbXNnc3RyICJUZWxpZiBIYWtr/SAoQykgJWQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDM3Cittc2dpZCAiIgorIlRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PXG4iCisid2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuXG4iCittc2dzdHIgIiIKKyJCdSBiaXIgc2VyYmVzdCB5YXr9bP1tZP1yOyBrb3B5YWxhbWEga2/+dWxsYXL9IGnnaW4ga2F5bmFrIGtvZHVuYSBiYWv9bv16LlxuIgorIkhp52JpciBnYXJhbnRpc2kgeW9rdHVyOyBoYXR0YSBTQVRJTEFC3UzdUkzd0N0gdmV5YSDeQUhT3SBLVUxMQU5JTUlOSVpBXG4iCisiVVlHVU5MVdBVIGnnaW4gYmlsZSBnYXJhbnRpIHZlcmlsbWV6LlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ1OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgc2tlbGV0b24gZGVjbGFyYXRpb25zIGFyZSBpbnZhbGlkIgorbXNnc3RyICLnb2tsdSAlcyBiaWxkaXJpbWxlcmkiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBsYW5ndWFnZSIKK21zZ3N0ciAiZ2XnZXJzaXoga2FyYWt0ZXI6ICVzIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ3OQorIywgZnV6enkKK21zZ2lkICJtdWx0aXBsZSBsYW5ndWFnZSBkZWNsYXJhdGlvbnMgYXJlIGludmFsaWQiCittc2dzdHIgIudva2x1ICVzIGJpbGRpcmltbGVyaSIKKworIzogc3JjL2dldGFyZ3MuYzo3NDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBtaXNzaW5nIG9wZXJhbmQiCittc2dzdHIgImAlcyd0ZW4gc29ucmEgZWtzaWsgaf5sZeciCisKKyM6IHNyYy9nZXRhcmdzLmM6NzQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJleHRyYSBvcGVyYW5kICVzIgorbXNnc3RyICJmYXpsYSBp/mxl5zogYCVzJyIKKworIzogc3JjL2dyYW0uYzoxMTIKK21zZ2lkICJlbXB0eSIKK21zZ3N0ciAiYm/+IgorCisjOiBzcmMvZ3JhbS5jOjIwMQorbXNnaWQgIkdyYW1tYXIiCittc2dzdHIgIkdyYW1lciIKKworIzogc3JjL2dyYXBodml6LmM6NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIi8vIEdlbmVyYXRlZCBieSAlcy5cbiIKKyIvLyBSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorIi8vIEhvbWUgcGFnZTogPCVzPi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvbG9jYXRpb24uYzo5MyBzcmMvc2Nhbi1ncmFtLmw6ODU5CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgbnVtYmVyIG92ZXJmbG93IgorbXNnc3RyICIiCisKKyM6IHNyYy9sb2NhdGlvbi5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbHVtbiBudW1iZXIgb3ZlcmZsb3ciCittc2dzdHIgIiIKKworIzogc3JjL21haW4uYzoxNDYKKyMsIGZ1enp5Cittc2dpZCAicnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzIgorbXNnc3RyICLnZWxpc2tpbGVyIHn8evxuZGVuIGt1cmFsIGluZGlyZ2VuZW1lZGkiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NDUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlJWRlZmluZSB2YXJpYWJsZSAlcyByZWRlZmluZWQiCittc2dzdHIgIiVzIHNpbWdlc2kgdGVrcmFyIHRhbv1tbGFubf3+IgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ1MworIywgZnV6enkKK21zZ2lkICJwcmV2aW91cyBkZWZpbml0aW9uIgorbXNnc3RyICJpbGsgYmlsZGlyaW0iCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NDkwIHNyYy9tdXNjbGUtdGFiLmM6NTA0IHNyYy9tdXNjbGUtdGFiLmM6NTU2CisjOiBzcmMvbXVzY2xlLXRhYi5jOjYyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5kZWZpbmVkICUlZGVmaW5lIHZhcmlhYmxlICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICUlZGVmaW5lIEJvb2xlYW4gdmFyaWFibGUgJXMiCittc2dzdHIgIiIKKworIzogc3JjL211c2NsZS10YWIuYzo2MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJSVkZWZpbmUgdmFyaWFibGUgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjEzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJhY2NlcHRlZCB2YWx1ZTogJXMiCittc2dzdHIgImdl52Vyc2l6IGRl8GVyOiAlcyIKKworIzogc3JjL3BhcnNlLWdyYW0ueTo3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBpZGVudGlmaWVyIGluIHBhcmFtZXRlciBkZWNsYXJhdGlvbiIKK21zZ3N0ciAicGFyYW1ldHJlIGJpbGRpcmltaW5kZSBla3NpayB0YW79dP1j/SIKKworIzogc3JjL3ByaW50LmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIHR5cGUgJWQgaXMgJXNcbiIKK21zZ3N0ciAiIHRpcCAlZCAlcydkaXJcbiIKKworIzogc3JjL3ByaW50LmM6MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgInNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgJWRcbiIKK21zZ3N0ciAi9nRlbGUsIHZlIGR1cnVtICVkJ3llIGdpdFxuIgorCisjOiBzcmMvcHJpbnQuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ28gdG8gc3RhdGUgJWRcbiIKK21zZ3N0ciAiZHVydW0gJWQneWUgZ2l0XG4iCisKKyM6IHNyYy9wcmludC5jOjIwMworbXNnaWQgImVycm9yIChub25hc3NvY2lhdGl2ZSlcbiIKK21zZ3N0ciAiaGF0YSAoYmlybGX+bWVsaSBkZfBpbClcbiIKKworIzogc3JjL3ByaW50LmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZHVjZSB1c2luZyBydWxlICVkICglcykiCittc2dzdHIgImt1cmFsICVkICglcykgaWxlIGluZGlyZ2VtZSIKKworIzogc3JjL3ByaW50LmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgImFjY2VwdCIKK21zZ3N0ciAib25heWxhIgorCisjOiBzcmMvcHJpbnQuYzoyNjQgc3JjL3ByaW50LmM6MzM4Cittc2dpZCAiJGRlZmF1bHQiCittc2dzdHIgIiT2bnRhbv1tbP0iCisKKyM6IHNyYy9wcmludC5jOjM3MyBzcmMvcHJpbnRfZ3JhcGguYzo3OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU3RhdGUgJWQiCittc2dzdHIgIkR1cnVtICVkICIKKworIzogc3JjL3ByaW50LmM6NDA5Cittc2dpZCAiVGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyIgorbXNnc3RyICJTYWJpdCBzaW1nZWxlciwgaedpbmRlIGdl53Rpa2xlcmkga3VyYWxsYXJsYSBiaXJsaWt0ZSIKKworIzogc3JjL3ByaW50LmM6NDM2Cittc2dpZCAiTm9udGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyIgorbXNnc3RyICJEZfBp/mtlbiBzaW1nZWxlciwgaedpbmRlIGdl53Rpa2xlcmkga3VyYWxsYXJsYSBiaXJsaWt0ZSIKKworIzogc3JjL3ByaW50LmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiBsZWZ0OiIKK21zZ3N0ciAiIChzb2wgdGFyYWZ0YSk6IgorCisjOiBzcmMvcHJpbnQuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uIHJpZ2h0OiIKK21zZ3N0ciAiIChzYfAgdGFyYWZ0YSk6IgorCisjOiBzcmMvcHJpbnQuYzo1MTAKKyMsIGZ1enp5Cittc2dpZCAiUnVsZXMgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cyIKK21zZ3N0ciAi52VsaXNraWxlciB5/Hr8bmRlbiBrdXJhbCBpbmRpcmdlbmVtZWRpIgorCisjOiBzcmMvcmVhZGVyLmM6NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgJXMgZGVjbGFyYXRpb25zIgorbXNnc3RyICLnb2tsdSAlcyBiaWxkaXJpbWxlcmkiCisKKyM6IHNyYy9yZWFkZXIuYzoxMzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInJlc3VsdCB0eXBlIGNsYXNoIG9uIG1lcmdlIGZ1bmN0aW9uICVzOiA8JXM+ICE9IDwlcz4iCittc2dzdHIgImJpcmxl/nRpcm1lIGn+bGV2aSBgJXMnZGUgdGlwIOdhdP3+bWFz/TogPCVzPiAhPSA8JXM+IgorCisjOiBzcmMvcmVhZGVyLmM6MTM5IHNyYy9zeW10YWIuYzoxNTYgc3JjL3N5bXRhYi5jOjE2NiBzcmMvc3ltdGFiLmM6OTM4CisjOiBzcmMvc3ltdGFiLmM6OTUzIHNyYy9zeW10YWIuYzo5Njggc3JjL3N5bXRhYi5jOjk4MworIywgZnV6enkKK21zZ2lkICJwcmV2aW91cyBkZWNsYXJhdGlvbiIKK21zZ3N0ciAiaWxrIGJpbGRpcmltIgorCisjOiBzcmMvcmVhZGVyLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZWQgc3ltYm9sIG5hbWUgZm9yICVzIGlnbm9yZWQiCittc2dzdHIgIiIKKworIzogc3JjL3JlYWRlci5jOjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICJydWxlIGdpdmVuIGZvciAlcywgd2hpY2ggaXMgYSB0b2tlbiIKK21zZ3N0ciAiYmlyIGFuZGHnIG9sYW4gJXMgaedpbiBrdXJhbCB2ZXJpbG1p/iIKKworIzogc3JjL3JlYWRlci5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ0eXBlIGNsYXNoIG9uIGRlZmF1bHQgYWN0aW9uOiA8JXM+ICE9IDwlcz4iCittc2dzdHIgIvZudGFu/W1s/SBleWxlbSD8emVyaW5kZSB0aXAg52F0/f5tYXP9OiBgJXMnICE9IGAlcyciCisKKyM6IHNyYy9yZWFkZXIuYzozMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgcnVsZSBmb3IgdHlwZWQgbm9udGVybWluYWwsIGFuZCBubyBhY3Rpb24iCittc2dzdHIgIiIKKyJUaXBsaSBkZfBp/mtlbiBzaW1nZSBp52luIGJv/iBrdXJhbCB0YW79bWxhbm39/iwgdmUgZXlsZW0gYmVsaXJ0aWxtZW1p/iIKKworIzogc3JjL3JlYWRlci5jOjMyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW51c2VkIHZhbHVlOiAkJWQiCittc2dzdHIgImdl52Vyc2l6IGRl8GVyOiAlcyIKKworIzogc3JjL3JlYWRlci5jOjMzMAorbXNnaWQgInVuc2V0IHZhbHVlOiAkJCIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVhZGVyLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgInRva2VuIGZvciAlJXByZWMgaXMgbm90IGRlZmluZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzo0MzEgc3JjL3JlYWRlci5jOjQ0NSBzcmMvcmVhZGVyLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgb25lICVzIGFsbG93ZWQgcGVyIHJ1bGUiCittc2dzdHIgImhlciBrdXJhbCBpY2luIHNhZGVjZSBiaXIgJXMga3VsbGFu/WxhYmlsaXIiCisKKyM6IHNyYy9yZWFkZXIuYzo0NDEgc3JjL3JlYWRlci5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhZmZlY3RzIG9ubHkgR0xSIHBhcnNlcnMiCittc2dzdHIgIiVzIHNhZGVjZSBHTFIgYXly/f50/XL9Y/1sYXL9IGV0a2lsZXIiCisKKyM6IHNyYy9yZWFkZXIuYzo0NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgbXVzdCBiZSBmb2xsb3dlZCBieSBwb3NpdGl2ZSBudW1iZXIiCittc2dzdHIgIiVzJ2kgcG96aXRpZiBiaXIgc2F5/SBpemxlbWVsaSIKKworIzogc3JjL3JlYWRlci5jOjU1NAorIywgYy1mb3JtYXQKK21zZ2lkICJydWxlIGlzIHRvbyBsb25nIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzo2NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcnVsZXMgaW4gdGhlIGlucHV0IGdyYW1tYXIiCittc2dzdHIgImdpcmRpIGdyYW1lciBp52luZGUga3VyYWwgeW9rIgorCisjOiBzcmMvcmVkdWNlLmM6MjQxCisjLCBmdXp6eQorbXNnaWQgInJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyICJnaXJkaSBncmFtZXIgaedpbmRlIGt1cmFsIHlvayIKKworIzogc3JjL3JlZHVjZS5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWR1Y2UuYzozNTAKKyMsIGZ1enp5Cittc2dpZCAiTm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAiRGXwaf5rZW4gc2ltZ2VsZXIsIGnnaW5kZSBnZed0aWtsZXJpIGt1cmFsbGFybGEgYmlybGlrdGUiCisKKyM6IHNyYy9yZWR1Y2UuYzozNjMKKyMsIGZ1enp5Cittc2dpZCAiVGVybWluYWxzIHVudXNlZCBpbiBncmFtbWFyIgorbXNnc3RyICJnaXJkaSBncmFtZXIgaedpbmRlIGt1cmFsIHlvayIKKworIzogc3JjL3JlZHVjZS5jOjM3MgorIywgZnV6enkKK21zZ2lkICJSdWxlcyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgImdpcmRpIGdyYW1lciBp52luZGUga3VyYWwgeW9rIgorCisjOiBzcmMvcmVkdWNlLmM6Mzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ2lkX3BsdXJhbCAiJWQgbm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0clswXSAiIgorCisjOiBzcmMvcmVkdWNlLmM6MzkwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlZCBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ2lkX3BsdXJhbCAiJWQgcnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyWzBdICJnaXJkaSBncmFtZXIgaedpbmRlIGt1cmFsIHlvayIKKworIzogc3JjL3JlZHVjZS5jOjQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydCBzeW1ib2wgJXMgZG9lcyBub3QgZGVyaXZlIGFueSBzZW50ZW5jZSIKK21zZ3N0ciAiYmH+bGFuZ/3nIHNpbWdlc2kgJXMgaGVyaGFuZ2kgYmlyIGP8bWxlZGVuIHT8cmVtaXlvciIKKworIzogc3JjL3NjYW4tY29kZS5sOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJheSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyMjkKK21zZ2lkICJhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZSIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjMyCittc2dpZCAiZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNlIG9mIFlZRkFJTCwgd2hpY2ggaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0MzEgc3JjL3NjYW4tY29kZS5sOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcnMgdG86ICVjJXMgYXQgJXMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NzaWJseSBtZWFudDogJWMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICIsIGhpZGluZyAlYyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiBhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiwgY2Fubm90IGJlIGFjY2Vzc2VkIGZyb20gbWlkLXJ1bGUgYWN0aW9uIGF0ICQlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NTIxIHNyYy9zY2FuLWdyYW0ubDo3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZWdlciBvdXQgb2YgcmFuZ2U6ICVzIgorbXNnc3RyICJ0YW0gc2F5/SBrYXBzYW0gZP3+/TogJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAiZ2XnZXJzaXogefZuZXJnZTogJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yIGFmdGVyICclYycsIGV4cGVjdGluZyBpbnRlZ2VyLCBsZXR0ZXIsICdfJywgJ1snLCBvciAnJCciCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb24gYmVmb3JlICQlZDogJS4qcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjMzCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogJS4qcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjQ4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJtaXNsZWFkaW5nIHJlZmVyZW5jZTogJXMiCittc2dzdHIgIiVzJ2luIPZuY2VsafBpIHRla3JhciB0YW79bWxhbv15b3IiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2NjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImFtYmlndW91cyByZWZlcmVuY2U6ICVzIgorbXNnc3RyICIlcyBhcmf8bWFu/SwgJXMgaedpbiBiZWxpcnNpeiIKKworIzogc3JjL3NjYW4tY29kZS5sOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJleHBsaWNpdCB0eXBlIGdpdmVuIGluIHVudHlwZWQgZ3JhbW1hciIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NzU5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIkJCBmb3IgdGhlIG1pZHJ1bGUgYXQgJCVkIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICJgJTIkcycnaW4gJTEkZCdpIGnnaW4gYmlsZGlyaWxtaf4gdGlwIHlvayIKKworIzogc3JjL3NjYW4tY29kZS5sOjc2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJCQgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgImAlcycnaW4gJCQn/SBp52luIGJpbGRpcmlsbWn+IHRpcCB5b2siCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3ODYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiQlcyBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiYCUyJHMnJ2luICUxJGQnaSBp52luIGJpbGRpcmlsbWn+IHRpcCB5b2siCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoxNDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN0cmF5ICcsJyB0cmVhdGVkIGFzIHdoaXRlIHNwYWNlIgorbXNnc3RyICJmYXpsYWRhbiBgLCcgYm/+bHVrIG9sYXJhayBhbGf9bGFuZP0iCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBkaXJlY3RpdmU6ICVzIgorbXNnc3RyICJnZedlcnNpeiB59m5lcmdlOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjI1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudGlmaWVyOiAlcyIKK21zZ3N0ciAiZ2XnZXJzaXogefZuZXJnZTogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyOTUKKyMsIGZ1enp5Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIiCittc2dpZF9wbHVyYWwgImludmFsaWQgY2hhcmFjdGVycyIKK21zZ3N0clswXSAiZ2XnZXJzaXoga2FyYWt0ZXI6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MzU0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGlkZW50aWZpZXIgaW4gYnJhY2tldGVkIG5hbWU6ICVzIgorbXNnc3RyICJiZWtsZW5tZXllbiD28GU6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgImFuIGlkZW50aWZpZXIgZXhwZWN0ZWQiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjM4MQorIywgZnV6enkKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciBpbiBicmFja2V0ZWQgbmFtZSIKK21zZ2lkX3BsdXJhbCAiaW52YWxpZCBjaGFyYWN0ZXJzIGluIGJyYWNrZXRlZCBuYW1lIgorbXNnc3RyWzBdICJnZedlcnNpeiBrYXJha3RlcjogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo0ODEgc3JjL3NjYW4tZ3JhbS5sOjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBjaGFyYWN0ZXIgbGl0ZXJhbCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NDg2IHNyYy9zY2FuLWdyYW0ubDo1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0cmEgY2hhcmFjdGVycyBpbiBjaGFyYWN0ZXIgbGl0ZXJhbCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVsbCBjaGFyYWN0ZXIiCittc2dzdHIgImdl52Vyc2l6ICdudWxsJyBrYXJha3RlciIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjUzMSBzcmMvc2Nhbi1ncmFtLmw6NTQxIHNyYy9zY2FuLWdyYW0ubDo1NjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIGFmdGVyIFxcLWVzY2FwZTogJXMiCittc2dzdHIgImdl52Vyc2l6IGthcmFrdGVyOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjU3MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgXFwtZXNjYXBlOiAlcyIKK21zZ3N0ciAiZ2XnZXJzaXoga2FyYWt0ZXI6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6OTAxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzIGF0IGVuZCBvZiBmaWxlIgorbXNnc3RyICJkb3N5YW79biBzb251bmRhIGVrc2lrIGAlcyciCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo5MTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgJXMgYXQgZW5kIG9mIGxpbmUiCittc2dzdHIgInNhdP1yIHNvbnVuZGEgZWtzaWsgYCVzJyIKKworIzogc3JjL3NjYW4tc2tlbC5sOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmNsb3NlZCAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tc2tlbC5sOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gZmV3IGFyZ3VtZW50cyBmb3IgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGZvciAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iCittc2dzdHIgIiIKKworIzogc3JjL3N5bWxpc3QuYzoyMTEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJCB2YWx1ZTogJCVkIgorbXNnc3RyICJnZedlcnNpeiBkZfBlcjogJXMiCisKKyM6IHNyYy9zeW10YWIuYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJQT1NJWCBZYWNjIGZvcmJpZHMgZGFzaGVzIGluIHN5bWJvbCBuYW1lczogJXMiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IHN5bWJvbHMgaW4gaW5wdXQgZ3JhbW1hciAobGltaXQgaXMgJWQpIgorbXNnc3RyICJnaXJkaSBncmFtZXJkZSDnb2sgZmF6bGEgc2ltZ2UgdmFyIChz/W79cjogJWQpIgorCisjOiBzcmMvc3ltdGFiLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICIlMiRzIGnnaW4gdGVrcmFyICUxJHMgYmlsZGlyaW1pIgorCisjOiBzcmMvc3ltdGFiLmM6MTY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciA8JXM+IgorbXNnc3RyICIlMiRzIGnnaW4gdGVrcmFyICUxJHMgYmlsZGlyaW1pIgorCisjOiBzcmMvc3ltdGFiLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyByZWRlZmluZWQiCittc2dzdHIgIiVzIHNpbWdlc2kgdGVrcmFyIHRhbv1tbGFubf3+IgorCisjOiBzcmMvc3ltdGFiLmM6MzQ2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgcmVkZWNsYXJlZCIKK21zZ3N0ciAiJXMgc2ltZ2VzaSB0ZWtyYXIgdGFu/W1sYW5t/f4iCisKKyM6IHNyYy9zeW10YWIuYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWZpbmluZyB1c2VyIHRva2VuIG51bWJlciBvZiAlcyIKK21zZ3N0ciAia3VsbGFu/WP9IGFuZGFj/SAlcyB0ZWtyYXIgdGFu/W1sYW79eW9yIgorCisjOiBzcmMvc3ltdGFiLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyBpcyB1c2VkLCBidXQgaXMgbm90IGRlZmluZWQgYXMgYSB0b2tlbiBhbmQgaGFzIG5vIHJ1bGVzIgorbXNnc3RyICIiCisic2ltZ2UgJXMga3VsbGFu/Wxt/f4sIGZha2F0IGFuZGHnIG9sYXJhayB0YW79bWxhbm1hbf3+IHZlIGt1cmFsbGFy/SB5b2siCisKKyM6IHNyYy9zeW10YWIuYzo0MTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyB1c2VkIG1vcmUgdGhhbiBvbmNlIGFzIGEgbGl0ZXJhbCBzdHJpbmciCittc2dzdHIgInNpbWdlIGAlcycsIHlhbP1uIGRpemdlIG9sYXJhayBiaXJkZW4gZmF6bGEga3VsbGFu/Wxt/f4iCisKKyM6IHNyYy9zeW10YWIuYzo0MTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyBnaXZlbiBtb3JlIHRoYW4gb25lIGxpdGVyYWwgc3RyaW5nIgorbXNnc3RyICJzaW1nZSBgJXMnLCBiaXJkZW4gZmF6bGEgeWFs/W4gZGl6Z2V5ZSBhdGFubf3+IgorCisjOiBzcmMvc3ltdGFiLmM6NTM1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1c2VyIHRva2VuIG51bWJlciAlZCByZWRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAiJXMgaedpbiB0ZWtyYXIgdGlwIGJpbGRpcmltaSIKKworIzogc3JjL3N5bXRhYi5jOjUzOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicHJldmlvdXMgZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICJpbGsgYmlsZGlyaW0iCisKKyM6IHNyYy9zeW10YWIuYzo5MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHN0YXJ0IHN5bWJvbCAlcyBpcyB1bmRlZmluZWQiCittc2dzdHIgImJh/mxhbmf95yBzaW1nZXNpICVzIHRhbv1tbGFubWFt/f4iCisKKyM6IHNyYy9zeW10YWIuYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHN0YXJ0IHN5bWJvbCAlcyBpcyBhIHRva2VuIgorbXNnc3RyICJiYf5sYW5n/ecgc2ltZ2VzaSAlcyBiaXIgYW5kYeciCisKKyM6IHNyYy9zeW10YWIuYzo5MzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICUlZGVzdHJ1Y3RvciIKK21zZ3N0ciAiJTIkcyBp52luIHRla3JhciAlMSRzIGJpbGRpcmltaSIKKworIzogc3JjL3N5bXRhYi5jOjk1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdsZXNzICUlZGVzdHJ1Y3RvciIKK21zZ3N0ciAiJTIkcyBp52luIHRla3JhciAlMSRzIGJpbGRpcmltaSIKKworIzogc3JjL3N5bXRhYi5jOjk2NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdnZWQgJSVwcmludGVyIgorbXNnc3RyICIlMiRzIGnnaW4gdGVrcmFyICUxJHMgYmlsZGlyaW1pIgorCisjOiBzcmMvc3ltdGFiLmM6OTgwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJSVwcmludGVyIgorbXNnc3RyICIlMiRzIGnnaW4gdGVrcmFyICUxJHMgYmlsZGlyaW1pIgorCisjOiBkamdwcC9zdWJwaXBlLmM6NjMgZGpncHAvc3VicGlwZS5jOjI4NiBkamdwcC9zdWJwaXBlLmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92aW5nIG9mICclcycgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzo4NSBkamdwcC9zdWJwaXBlLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3JlYXRpb24gb2YgYSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJzYXZpbmcgc3RkaW4gZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAic2F2aW5nIHN0ZG91dCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjE1MyBkamdwcC9zdWJwaXBlLmM6MTk3IGRqZ3BwL3N1YnBpcGUuYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlbmluZyBvZiB0bXBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIGJpc29uJ3Mgc3Rkb3V0IHRvIHRoZSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBtNCdzIHN0ZGluIGZyb20gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZW5pbmcgb2YgYSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjIxOAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBtNCdzIHN0ZG91dCB0byBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjM0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gJyVzJyBpbnRlcnJ1cHRlZCIKK21zZ3N0ciAiYWx0IHByb2dyYW0gYCVzJyBiYf5hcv1z/XoiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyNDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAiYWx0IHByb2dyYW0gYCVzJyBidWx1bmFtYWT9IgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIGJpc29uJ3Mgc3RkaW4gZnJvbSB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGFyZ3VtZW50ICVzIGZvciAlcyIKK21zZ3N0ciAiZ2XnZXJzaXogYXJn/G1hbjogJTIkcyBp52luICUxJHMiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgYXJndW1lbnQgJXMgZm9yICVzIgorbXNnc3RyICIlcyBhcmf8bWFu/SwgJXMgaedpbiBiZWxpcnNpeiIKKworIzogbGliL2FyZ21hdGNoLmM6MTUzCittc2dpZCAiVmFsaWQgYXJndW1lbnRzIGFyZToiCittc2dzdHIgIkdl52VybGkgYXJn/G1hbmxhcjoiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X2FsbG9jcywgJXUgZnJlZWQgKCUuMmYlJSkuXG4iCittc2dzdHIgIiV1IGJpdHNldF9hbGxvY3MsICV1IHNlcmJlc3QgYv1yYWv9bGFuICglLjJmJSUpLlxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9zZXRzLCAldSBjYWNoZWQgKCUuMmYlJSlcbiIKK21zZ3N0ciAiJXUgYml0c2V0X3NldHMsICV1IPZuYmVsbGVrIGt1bGxhbv1t/SAoJS4yZiUlKVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9yZXNldHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorbXNnc3RyICIldSBiaXRzZXRfcmVzZXRzLCAldSD2bmJlbGxlayBrdWxsYW79bf0gKCUuMmYlJSlcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfdGVzdHMsICV1IGNhY2hlZCAoJS4yZiUlKVxuIgorbXNnc3RyICIldSBiaXRzZXRfdGVzdHMsICV1IPZuYmVsbGVrIGt1bGxhbv1t/SAoJS4yZiUlKVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9saXN0c1xuIgorbXNnc3RyICIldSBiaXRzZXRfbGlzdHNcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5MgorbXNnaWQgImNvdW50IGxvZyBoaXN0b2dyYW1cbiIKK21zZ3N0ciAic2F5/SBoaXN0b2dyYW39XG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTUKK21zZ2lkICJzaXplIGxvZyBoaXN0b2dyYW1cbiIKK21zZ3N0ciAiYvx5/Gv8ayBoaXN0b2dyYW39XG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTgKK21zZ2lkICJkZW5zaXR5IGhpc3RvZ3JhbVxuIgorbXNnc3RyICJ5b2d1bmx1ayBoaXN0b2dyYW39XG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJpdHNldCBzdGF0aXN0aWNzOlxuIgorIlxuIgorbXNnc3RyICIiCisiQml0c2V0IGlzdGF0aXN0aWtsZXJpOlxuIgorIlxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkFjY3VtdWxhdGVkIHJ1bnMgPSAldVxuIgorbXNnc3RyICJUb3BsYW0g52Fs/f50/XL9bGFuID0gJXVcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI1OSBsaWIvYml0c2V0X3N0YXRzLmM6MjY0CisjLCBmdXp6eQorbXNnaWQgImNhbm5vdCByZWFkIHN0YXRzIGZpbGUiCittc2dzdHIgIt1zdGF0aXN0aWsgZG9zeWFz/SBva3VuYW1hZP0uIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjYxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJiYWQgc3RhdHMgZmlsZSBzaXplXG4iCittc2dzdHIgIt1zdGF0aXN0aWsgZG9zeWFz/SBi/Hn8a2z88PwgeWFubP3+LlxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6Mjg3IGxpYi9iaXRzZXRfc3RhdHMuYzoyODkKKyMsIGZ1enp5Cittc2dpZCAiY2Fubm90IHdyaXRlIHN0YXRzIGZpbGUiCittc2dzdHIgIt1zdGF0aXN0aWsgZG9zeWFz/W5hIHlhev1sYW1hZP0uIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjkyCisjLCBmdXp6eQorbXNnaWQgImNhbm5vdCBvcGVuIHN0YXRzIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIt1zdGF0aXN0aWsgZG9zeWFz/SB5YXptYWsgaedpbiBh5/1sYW1hZP0uIgorCisjOiBsaWIvY2xvc2VvdXQuYzoxMTIKKyMsIGZ1enp5Cittc2dpZCAid3JpdGUgZXJyb3IiCittc2dzdHIgIvZs/G1j/GwgaGF0YTogIgorCisjOiBsaWIvZXJyb3IuYzoxODgKK21zZ2lkICJVbmtub3duIHN5c3RlbSBlcnJvciIKK21zZ3N0ciAiQmlsaW5tZXllbiBzaXN0ZW0gaGF0YXP9IgorCisjOiBsaWIvZ2V0b3B0LmM6NTQ3IGxpYi9nZXRvcHQuYzo1NzYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJyVzJyBpcyBhbWJpZ3VvdXM7IHBvc3NpYmlsaXRpZXM6IgorbXNnc3RyICIlczogYCVzJyBzZedlbmXwaSBiZWxpcnNpelxuIgorCisjOiBsaWIvZ2V0b3B0LmM6NjI0IGxpYi9nZXRvcHQuYzo2MjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy0tJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IGAtLSVzJyBzZedlbmXwaSBhcmf8bWFuc/16IGt1bGxhbv1s/XJcbiIKKworIzogbGliL2dldG9wdC5jOjYzNyBsaWIvZ2V0b3B0LmM6NjQyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICclYyVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiBzZedlbmVrIGAlYyVzJyBhcmf8bWFuc/16IGt1bGxhbv1s/XJcbiIKKworIzogbGliL2dldG9wdC5jOjY4NSBsaWIvZ2V0b3B0LmM6NzA0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctLSVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogYCVzJyBzZedlbmXwaSBiaXIgYXJn/G1hbmxhIGt1bGxhbv1s/XJcbiIKKworIzogbGliL2dldG9wdC5jOjc0MiBsaWIvZ2V0b3B0LmM6NzQ1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiAnLS0lcydcbiIKK21zZ3N0ciAiJXM6IGAtLSVzJyBzZedlbmXwaSBiaWxpbm1peW9yXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo3NTMgbGliL2dldG9wdC5jOjc1NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gJyVjJXMnXG4iCittc2dzdHIgIiVzOiBgJWMlcycgc2XnZW5l8GkgYmlsaW5taXlvclxuIgorCisjOiBsaWIvZ2V0b3B0LmM6ODA1IGxpYi9nZXRvcHQuYzo4MDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIG9wdGlvbiAtLSAnJWMnXG4iCittc2dzdHIgIiVzOiBnZedlcnNpeiBzZedlbmVrIC0tICVjXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo4NjEgbGliL2dldG9wdC5jOjg3OCBsaWIvZ2V0b3B0LmM6MTA4OCBsaWIvZ2V0b3B0LmM6MTEwNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAnJWMnXG4iCittc2dzdHIgIiVzOiBzZedlbmVrIGJpciBhcmf8bWFubGEga3VsbGFu/Wz9ciAtLSAlY1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6OTM0IGxpYi9nZXRvcHQuYzo5NTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyBpcyBhbWJpZ3VvdXNcbiIKK21zZ3N0ciAiJXM6IGAtVyAlcycgc2XnZW5l8GkgYmVsaXJzaXpcbiIKKworIzogbGliL2dldG9wdC5jOjk3NCBsaWIvZ2V0b3B0LmM6OTkyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogYC1XICVzJyBzZedlbmXwaSBhcmf8bWFuc/16IGt1bGxhbv1s/XJcbiIKKworIzogbGliL2dldG9wdC5jOjEwMTMgbGliL2dldG9wdC5jOjEwMzEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogYCVzJyBzZedlbmXwaSBiaXIgYXJn/G1hbmxhIGt1bGxhbv1s/XJcbiIKKworIzogbGliL29ic3RhY2suYzo0MTMgbGliL29ic3RhY2suYzo0MTUgbGliL3hhbGxvYy1kaWUuYzozNAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgImJlbGxlayB0/GtlbmRpIgorCisjOiBsaWIvc3Bhd24tcGlwZS5jOjE0MCBsaWIvc3Bhd24tcGlwZS5jOjE0MyBsaWIvc3Bhd24tcGlwZS5jOjI2NAorIzogbGliL3NwYXduLXBpcGUuYzoyNjcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZSIKK21zZ3N0ciAiZG9zeWEga2FwYXT9bGFt/XlvciIKKworIzogbGliL3NwYXduLXBpcGUuYzoyMzQgbGliL3NwYXduLXBpcGUuYzozNDggbGliL3dhaXQtcHJvY2Vzcy5jOjI4MgorIzogbGliL3dhaXQtcHJvY2Vzcy5jOjM1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdWJwcm9jZXNzIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzoKKyMuIEdldCB0cmFuc2xhdGlvbnMgZm9yIG9wZW4gYW5kIGNsb3NpbmcgcXVvdGF0aW9uIG1hcmtzLgorIy4gVGhlIG1lc3NhZ2UgY2F0YWxvZyBzaG91bGQgdHJhbnNsYXRlICJgIiB0byBhIGxlZnQKKyMuIHF1b3RhdGlvbiBtYXJrIHN1aXRhYmxlIGZvciB0aGUgbG9jYWxlLCBhbmQgc2ltaWxhcmx5IGZvcgorIy4gIiciLiAgRm9yIGV4YW1wbGUsIGEgRnJlbmNoIFVuaWNvZGUgbG9jYWwgc2hvdWxkIHRyYW5zbGF0ZQorIy4gdGhlc2UgdG8gVSswMEFCIChMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRQorIy4gUVVPVEFUSU9OIE1BUkspLCBhbmQgVSswMEJCIChSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUKKyMuIFFVT1RBVElPTiBNQVJLKSwgcmVzcGVjdGl2ZWx5LgorIy4KKyMuIElmIHRoZSBjYXRhbG9nIGhhcyBubyB0cmFuc2xhdGlvbiwgd2Ugd2lsbCB0cnkgdG8KKyMuIHVzZSBVbmljb2RlIFUrMjAxOCAoTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspIGFuZAorIy4gVW5pY29kZSBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykuICBJZiB0aGUKKyMuIGN1cnJlbnQgbG9jYWxlIGlzIG5vdCBVbmljb2RlLCBsb2NhbGVfcXVvdGluZ19zdHlsZQorIy4gd2lsbCBxdW90ZSAnbGlrZSB0aGlzJywgYW5kIGNsb2NhbGVfcXVvdGluZ19zdHlsZSB3aWxsCisjLiBxdW90ZSAibGlrZSB0aGlzIi4gIFlvdSBzaG91bGQgYWx3YXlzIGluY2x1ZGUgdHJhbnNsYXRpb25zCisjLiBmb3IgImAiIGFuZCAiJyIgZXZlbiBpZiBVKzIwMTggYW5kIFUrMjAxOSBhcmUgYXBwcm9wcmlhdGUKKyMuIGZvciB5b3VyIGxvY2FsZS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFya3NfaW5fb3RoZXJfbGFuZ3VhZ2VzPgorIy4gYW5kIHVzZSBnbHlwaHMgc3VpdGFibGUgZm9yIHlvdXIgbGFuZ3VhZ2UuCisjOiBsaWIvcXVvdGVhcmcuYzozMTIKK21zZ2lkICJgIgorbXNnc3RyICJgIgorCisjOiBsaWIvcXVvdGVhcmcuYzozMTMKK21zZ2lkICInIgorbXNnc3RyICInIgorCisjOiBsaWIvdGltZXZhci5jOjQ3NQorbXNnaWQgIiIKKyJcbiIKKyJFeGVjdXRpb24gdGltZXMgKHNlY29uZHMpXG4iCittc2dzdHIgIiIKKyJcbiIKKyLHYWz9/m1hIHP8cmVzaSAoc2FuaXllKVxuIgorCisjOiBsaWIvdGltZXZhci5jOjUyNQorbXNnaWQgIiBUT1RBTCAgICAgICAgICAgICAgICAgOiIKK21zZ3N0ciAiIFRPUExBTSAgICAgICAgICAgICAgICA6ICIKKworIzogbGliL3RpbWV2YXIuYzo1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZSBpbiAlczogJWxkLiUwNmxkICglbGQlJSlcbiIKK21zZ3N0ciAiJXMndGUgZ2XnZW4gemFtYW46ICVsZC4lMDZsZCAoJWxkJSUpXG4iCisKKyM6IGxpYi93MzJzcGF3bi5oOjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIl9vcGVuX29zZmhhbmRsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogbGliL3czMnNwYXduLmg6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlc3RvcmUgZmQgJWQ6IGR1cDIgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzoyMjMgbGliL3dhaXQtcHJvY2Vzcy5jOjI1NSBsaWIvd2FpdC1wcm9jZXNzLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MiCittc2dzdHIgIiIKKworIzogbGliL3dhaXQtcHJvY2Vzcy5jOjI3NCBsaWIvd2FpdC1wcm9jZXNzLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MgZ290IGZhdGFsIHNpZ25hbCAlZCIKK21zZ3N0ciAiIgorCisjfiBtc2dpZCAic3RhdGUgJWQiCisjfiBtc2dzdHIgImR1cnVtICVkIgorCisjLCBmdXp6eQorI34gbXNnaWQgIkdOVSBiaXNvbiBnZW5lcmF0ZXMgTEFMUigxKSBhbmQgR0xSIHBhcnNlcnMuXG4iCisjfiBtc2dzdHIgIkdOVSBiaXNvbiBMQUxSKDEpIGdyYW1lcmxlciBp52luIGF5cv3+dP1y/WP9bGFyIPxyZXRpci5cbiIKKworI34gbXNnaWQgIiIKKyN+ICJJZiBhIGxvbmcgb3B0aW9uIHNob3dzIGFuIGFyZ3VtZW50IGFzIG1hbmRhdG9yeSwgdGhlbiBpdCBpcyBtYW5kYXRvcnlcbiIKKyN+ICJmb3IgdGhlIGVxdWl2YWxlbnQgc2hvcnQgb3B0aW9uIGFsc28uICBTaW1pbGFybHkgZm9yIG9wdGlvbmFsIGFyZ3VtZW50cy5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIkXwZXIgYmlyIHV6dW4gc2XnZW5layBiaXIgYXJn/G1hbv0gZ2VyZWt0aXJpcnNlLCBidSBnZXJla2xpbGlrLCBkZW5rIG9sYW4gIgorI34gImv9c2FcbiIKKyN+ICJzZedlbmVrIGnnaW4gZGUgZ2XnZXJsaWRpci4gIEJ1IGR1cnVtLCBzZedpbWxpIGFyZ/xtYW5sYXIgaedpbiBkZSAiCisjfiAiZ2XnZXJsaWRpci5cbiIKKworI34gbXNnaWQgIlJ1bGVzIG5ldmVyIHJlZHVjZWQiCisjfiBtc2dzdHIgIkhp5yBpbmRpcmdlbm1leWVuIGt1cmFsbGFyIgorCisjfiBtc2dpZCAidXNlbGVzcyBydWxlIgorI34gbXNnc3RyICJnZXJla3NpeiBrdXJhbCIKKworI34gbXNnaWQgInVzZWxlc3Mgbm9udGVybWluYWw6ICVzIgorI34gbXNnc3RyICJnZXJla3NpeiBkZfBp/mtlbiBzaW1nZTogJXMiCisKKyN+IG1zZ2lkICJVc2VsZXNzIG5vbnRlcm1pbmFscyIKKyN+IG1zZ3N0ciAiR2VyZWtzaXogZGXwaf5rZW4gc2ltZ2VsZXIiCisKKyN+IG1zZ2lkICJUZXJtaW5hbHMgd2hpY2ggYXJlIG5vdCB1c2VkIgorI34gbXNnc3RyICJLdWxsYW79bG1heWFuIHNhYml0IHNpbWdlbGVyIgorCisjfiBtc2dpZCAiVXNlbGVzcyBydWxlcyIKKyN+IG1zZ3N0ciAiR2VyZWtzaXoga3VyYWxsYXIiCisKKyN+IG1zZ2lkICIlZCBydWxlIG5ldmVyIHJlZHVjZWRcbiIKKyN+IG1zZ2lkX3BsdXJhbCAiJWQgcnVsZXMgbmV2ZXIgcmVkdWNlZFxuIgorI34gbXNnc3RyWzBdICIlZCBrdXJhbCBoaecgaW5kaXJnZW5tZWRpXG4iCisKKyN+IG1zZ2lkICIlZCB1c2VsZXNzIG5vbnRlcm1pbmFsIgorI34gbXNnaWRfcGx1cmFsICIlZCB1c2VsZXNzIG5vbnRlcm1pbmFscyIKKyN+IG1zZ3N0clswXSAiJWQgZ2VyZWtzaXogZGXwaf5rZW4gc2ltZ2UiCisKKyN+IG1zZ2lkICIgYW5kICIKKyN+IG1zZ3N0ciAiIHZlICIKKworI34gbXNnaWQgIiVkIHVzZWxlc3MgcnVsZSIKKyN+IG1zZ2lkX3BsdXJhbCAiJWQgdXNlbGVzcyBydWxlcyIKKyN+IG1zZ3N0clswXSAiJWQgZ2VyZWtzaXoga3VyYWwiCisKKyN+IG1zZ2lkICJpbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZTogJXMiCisjfiBtc2dzdHIgImdl52Vyc2l6IPZuY2VsZW1lIGRpemdlc2k6ICVzIgorCisjfiBtc2dpZCAidW5yZWNvZ25pemVkIGVzY2FwZSBzZXF1ZW5jZTogJXMiCisjfiBtc2dzdHIgInRhbv1ubWF5YW4g9m5jZWxlbWUgZGl6Z2VzaTogJXMiCisKKyN+IG1zZ2lkICJ0b2tlbnMgJXMgYW5kICVzIGJvdGggYXNzaWduZWQgbnVtYmVyICVkIgorI34gbXNnc3RyICIlcyB2ZSAlcyBhbmRh52xhcv1u/W4gaGVyIGlraXNpICVkIHNhef1z/W5hIGF0YW5kbf3+IgorCisjfiBtc2dpZCAiJXM6IGlsbGVnYWwgb3B0aW9uIC0tICVjXG4iCisjfiBtc2dzdHIgIiVzOiBrdXJhbCBk/f79IHNl52VuZWsgLS0gJWNcbiIKKworI34gbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSBgJXMnIGNvdWxkIG5vdCBiZSBpbnZva2VkIgorI34gbXNnc3RyICJhbHQgcHJvZ3JhbSBgJXMnIOdhbP3+dP1y/WxhbWFk/SIKKworI34gbXNnaWQgIndhcm5pbmc6ICIKKyN+IG1zZ3N0ciAidXlhcv06ICIKKworI34gbXNnaWQgIlBPU0lYIGZvcmJpZHMgZGVjbGFyYXRpb25zIGluIHRoZSBncmFtbWFyIgorI34gbXNnc3RyICJHcmFtZXIgaedpbmRla2kgYmlsZGlyaW1sZXIgUE9TSVgnZSB1eWd1biBkZfBpbGRpciIKKworI34gbXNnaWQgIm1pc3NpbmcgYHsnIGluIGAlcyciCisjfiBtc2dzdHIgImAlcycgaedpbmRlIGVrc2lrIGB7JyIKKworI34gbXNnaWQgImludmFsaWQgJCB2YWx1ZSIKKyN+IG1zZ3N0ciAiZ2XnZXJzaXogJCBkZfBlcmkiCisKKyN+IG1zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gYCVzJyBmYWlsZWQgKGV4aXQgc3RhdHVzICVkKSIKKyN+IG1zZ3N0ciAiYWx0IHByb2dyYW0gYCVzJyBiYf5hcv1z/XogKGhhdGEga29kdTogJWQpIgorCisjfiBtc2dpZCAiY29uZmxpY3RpbmcgcHJlY2VkZW5jZXMgZm9yICVzIGFuZCAlcyIKKyN+IG1zZ3N0ciAiJXMgdmUgJXMgaedpbiDnZWxp/mVuIPZuY2VsaWtsZXIiCisKKyN+IG1zZ2lkICJjb25mbGljdGluZyBhc3NvY2lhdGl2aXRpZXMgZm9yICVzICglcykgYW5kICVzICglcykiCisjfiBtc2dzdHIgIiVzICglcykgdmUgJXMgKCVzKSBp52luIOdlbGn+ZW4gYmlybGX+bWVsaSBkZfBlcmxlciIKKworI34gbXNnaWQgInRvbyBtYW55IHN0YXRlcyAobWF4ICVkKSIKKyN+IG1zZ3N0ciAi529rIGZhemxhIGR1cnVtIChlbiBmYXpsYSAlZCkiCisKKyN+IG1zZ2lkICJyZWR1Y2UiCisjfiBtc2dzdHIgImluZGlyZ2VtZSIKKworI34gbXNnaWQgInNoaWZ0IgorI34gbXNnc3RyICJzaGlmdCIKKworI34gbXNnaWQgIiVkIHNoaWZ0L3JlZHVjZSBjb25mbGljdCIKKyN+IG1zZ2lkX3BsdXJhbCAiJWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cyIKKyN+IG1zZ3N0clswXSAiJWQg9nRlbGVtZS9pbmRpcmdlbWUg52Vsaf5raXNpIgorCisjfiBtc2dpZCAiYW5kIgorI34gbXNnc3RyICJ2ZSIKKworI34gbXNnaWQgIlN0YXRlICVkIGNvbnRhaW5zICIKKyN+IG1zZ3N0ciAiJWQgZHVydW11IGnnZXJpciIKKworI34gbXNnaWQgImNvbmZsaWN0czogIgorI34gbXNnc3RyICLnZWxp/mtpbGVyOiAiCisKKyN+IG1zZ2lkICIlcyBjb250YWlucyAiCisjfiBtc2dzdHIgIiVzIGnnZXJpciIKKworI34gbXNnaWQgImAlcycgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIKKyN+IG1zZ3N0ciAiYCVzJyBhcnT9ayBkZXN0ZWtsZW5tZXllY2VrIgorCisjfiBtc2dpZCAiJXM6IG5vIGdyYW1tYXIgZmlsZSBnaXZlblxuIgorI34gbXNnc3RyICIlczogZ3JhbWVyIGRvc3lhc/0gdmVyaWxtZW1p/lxuIgorCisjfiBtc2dpZCAiJXM6IGV4dHJhIGFyZ3VtZW50cyBpZ25vcmVkIGFmdGVyIGAlcydcbiIKKyN+IG1zZ3N0ciAiJXM6ICclcycgZGVuIHNvbnJha2kgYXJn/G1hbmxhciB5b2tzYXn9bGT9XG4iCisKKyN+IG1zZ2lkICJ0b28gbWFueSBnb3RvcyAobWF4ICVkKSIKKyN+IG1zZ3N0ciAiZ290b3Mg529rIGZhemxhIChlbiBmYXpsYSAlZCkiCisKKyN+IG1zZ2lkICJ1bmV4cGVjdGVkIGAvJyBmb3VuZCBhbmQgaWdub3JlZCIKKyN+IG1zZ3N0ciAiYmVrbGVubWV5ZW4gYC8nIGJ1bHVuZHUgdmUgeW9rc2F5/Wxk/SIKKworI34gbXNnaWQgInVudGVybWluYXRlZCBjb21tZW50IgorI34gbXNnc3RyICJzb25sYW5k/XL9bG1hbf3+IGHn/WtsYW1hIgorCisjfiBtc2dpZCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIKKyN+IG1zZ3N0ciAiYmVrbGVubWV5ZW4gZG9zeWEgc29udSIKKworI34gbXNnaWQgInVuZXNjYXBlZCBuZXdsaW5lIGluIGNvbnN0YW50IgorI34gbXNnc3RyICJzYWJpdCBp52luZGUga2HnYW1heWFuIHllbmkgc2F0/XIiCisKKyN+IG1zZ2lkICJvY3RhbCB2YWx1ZSBvdXRzaWRlIHJhbmdlIDAuLi4yNTU6IGBcXCVvJyIKKyN+IG1zZ3N0ciAic2VraXpsaSBkZfBlciAwLi4uMjU1J2luIGT9/v1uZGE6IGBcXCVvJyIKKworI34gbXNnaWQgImhleGFkZWNpbWFsIHZhbHVlIGFib3ZlIDI1NTogYFxceCV4JyIKKyN+IG1zZ3N0ciAib25hbHT9bP1rIGRl8GVyIDI1NSdpbiD8c3T8bmRlOiBgXFx4JXgnIgorCisjfiBtc2dpZCAidW5rbm93biBlc2NhcGUgc2VxdWVuY2U6IGBcXCcgZm9sbG93ZWQgYnkgYCVzJyIKKyN+IG1zZ3N0ciAiYmlsaW5tZXllbiBrYef9/iBz/XJhc/06IGBcXCcgYCVzJyB0YXJhZv1uZGFuIHRha2lwIGVkaWxkaSIKKworI34gbXNnaWQgInVudGVybWluYXRlZCB0eXBlIG5hbWUgYXQgZW5kIG9mIGZpbGUiCisjfiBtc2dzdHIgImRvc3lhIHNvbnVuZGEgc29ubGFuZP1y/WxtYW39/iB0aXAgYWT9IgorCisjfiBtc2dpZCAidW50ZXJtaW5hdGVkIHR5cGUgbmFtZSIKKyN+IG1zZ3N0ciAic29ubGFuZP1y/WxtYW39/iB0aXAgaXNtaSIKKworI34gbXNnaWQgInVzZSBcIi4uLlwiIGZvciBtdWx0aS1jaGFyYWN0ZXIgbGl0ZXJhbCB0b2tlbnMiCisjfiBtc2dzdHIgIudvay1rYXJha3RlcmxpIHlhev1uIGFuZGHnbGFy/SBp52luIFwiLi4uXCIga3VsbGFuIgorCisjfiBtc2dpZCAiYCVzJyBzdXBwb3J0cyBubyBhcmd1bWVudDogJXMiCisjfiBtc2dzdHIgImAlcycgYXJn/G1hbiAlcydpIGRlc3Rla2xlbWV6IgorCisjfiBtc2dpZCAiYCVzJyByZXF1aXJlcyBhbiBhcmd1bWVudCIKKyN+IG1zZ3N0ciAiYCVzJyBiaXIgYXJn/G1hbiBnZXJla3RpcmlyIgorCisjfiBtc2dpZCAiICAgKHJ1bGUgJWQpIgorI34gbXNnc3RyICIgICAoa3VyYWwgJWQpIgorCisjfiBtc2dpZCAiICAgICUtNHNcdGVycm9yIChub25hc3NvY2lhdGl2ZSlcbiIKKyN+IG1zZ3N0ciAiICAgICUtNHNcdGhhdGEgKGJpcmxl/m1lbGkgZGXwaWwpXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiICAgICRkZWZhdWx0XHRyZWR1Y2UgdXNpbmcgcnVsZSAlZCAoJXMpXG4iCisjfiAiXG4iCisjfiBtc2dzdHIgIiIKKyN+ICIgICAgJGRlZmF1bHRcdGluZGlyZ2VtZSBrdXJhbCAlZCAoJXMpJ2kga3VsbGFu/XlvclxuIgorI34gIlxuIgorCisjfiBtc2dpZCAiICAgICUtNHNcdFtyZWR1Y2UgdXNpbmcgcnVsZSAlZCAoJXMpXVxuIgorI34gbXNnc3RyICIgICAgJS00c1x0W2luZGlyZ2VtZSBrdXJhbCAlZCAoJXMpJ2kga3VsbGFu/Xlvcl1cbiIKKworI34gbXNnaWQgIiAgICAlLTRzXHRyZWR1Y2UgdXNpbmcgcnVsZSAlZCAoJXMpXG4iCisjfiBtc2dzdHIgIiAgICAlLTRzXHRpbmRpcmdlbWUga3VyYWwgJWQgKCVzKSdpIGt1bGxhbv15b3JcbiIKKworI34gbXNnaWQgIiAgICAkZGVmYXVsdFx0cmVkdWNlIHVzaW5nIHJ1bGUgJWQgKCVzKVxuIgorI34gbXNnc3RyICIgICAgJGRlZmF1bHRcdGluZGlyZ2VtZSBrdXJhbCAlZCAoJXMpJ2kga3VsbGFu/XlvclxuIgorCisjfiBtc2dpZCAiICAgICRkZWZhdWx0XHRhY2NlcHRcbiIKKyN+IG1zZ3N0ciAiICAgICRkZWZhdWx0XHRvbmF5bGFcbiIKKworI34gbXNnaWQgIiAgICBOTyBBQ1RJT05TXG4iCisjfiBtc2dzdHIgIiAgICBFWUxFTSBZT0tcbiIKKworI34gbXNnaWQgIk51bWJlciwgTGluZSwgUnVsZSIKKyN+IG1zZ3N0ciAiU2F5/SwgU2F0/XIsIEt1cmFsIgorCisjfiBtc2dpZCAiICAlM2QgJTNkICVzIC0+IgorI34gbXNnc3RyICIgICUzZCAlM2QgJXMgLT4iCisKKyN+IG1zZ2lkICIgICBTa2lwcGluZyB0byBuZXh0IFxcbiIKKyN+IG1zZ3N0ciAiICAgU29ucmFraW5lIGF0bGFu/XlvciBcXG4iCisKKyN+IG1zZ2lkICIgICBTa2lwcGluZyB0byBuZXh0ICVjIgorI34gbXNnc3RyICIgICBTb25yYWtpICAlYyd5ZSBhdGxhbv15b3IiCisKKyN+IG1zZ2lkICJ1bnRlcm1pbmF0ZWQgc3RyaW5nIgorI34gbXNnc3RyICJzb25sYW5k/XL9bG1hbf3+IGRpemdlIgorCisjfiBtc2dpZCAiJXMgaXMgaW52YWxpZCIKKyN+IG1zZ3N0ciAiJXMgZ2XnZXJzaXpkaXIiCisKKyN+IG1zZ2lkICJ1bnRlcm1pbmF0ZWQgYCV7JyBkZWZpbml0aW9uIgorI34gbXNnc3RyICJgJXsnIHRhbv1tbGFtYXP9IHNvbmxhbmT9cv1sbWFt/f4iCisKKyN+IG1zZ2lkICJQcmVtYXR1cmUgRU9GIGFmdGVyICVzIgorI34gbXNnc3RyICIlcydkZW4gc29ucmEgZXJrZW4gRU9GIgorCisjfiBtc2dpZCAiYCVzJyBpcyBpbnZhbGlkIGluICVzIgorI34gbXNnc3RyICJgJXMnICVzIGnnaW5kZSBnZedlcnNpemRpciIKKworI34gbXNnaWQgIiV0eXBlIGRlY2xhcmF0aW9uIGhhcyBubyA8dHlwZW5hbWU+IgorI34gbXNnc3RyICIldHlwZSBiaWxkaXJpbWkgPHRpcGFk/T4nbmEgc2FoaXAgZGXwaWwiCisKKyN+IG1zZ2lkICJpbnZhbGlkICUldHlwZSBkZWNsYXJhdGlvbiBkdWUgdG8gaXRlbTogJXMiCisjfiBtc2dzdHIgImdl52Vyc2l6ICUldHlwZSBiaWxkaXJpbWluZSBuZWRlbiBvbGFuIPbwZTogYCVzJyIKKworI34gbXNnaWQgImludmFsaWQgdGV4dCAoJXMpIC0gbnVtYmVyIHNob3VsZCBiZSBhZnRlciBpZGVudGlmaWVyIgorI34gbXNnc3RyICJnZedlcnNpeiBtZXRpbiAoJXMpIC0gc2F5/SB0YW79dP1j/WRhbiBzb25yYSBvbG1hbP1k/XIiCisKKyN+IG1zZ2lkICJ1bm1hdGNoZWQgJXMiCisjfiBtc2dzdHIgImX+bGVuZW1leWVuICVzIgorCisjfiBtc2dpZCAiYXJndW1lbnQgb2YgJSVleHBlY3QgaXMgbm90IGFuIGludGVnZXIiCisjfiBtc2dzdHIgIiUlZXhwZWN0J2luIGFyZ/xtYW79IGJpciB0YW1zYXn9IGRl8GlsZGlyIgorCisjfiBtc2dpZCAidW5yZWNvZ25pemVkIGl0ZW0gJXMsIGV4cGVjdGVkIGFuIGlkZW50aWZpZXIiCisjfiBtc2dzdHIgIiVzIPbwZXNpIHRhbv1ubWFk/SwgYmVrbGVuZW4gYmlyIHRhbv10/WP9ZP1yIgorCisjfiBtc2dpZCAiZXhwZWN0ZWQgc3RyaW5nIGNvbnN0YW50IGluc3RlYWQgb2YgJXMiCisjfiBtc2dzdHIgIiVzJ2luIHllcmluZSBzYWJpdCBkaXpnZSBiZWtsZW5kaSIKKworI34gbXNnaWQgIm5vIGlucHV0IGdyYW1tYXIiCisjfiBtc2dzdHIgImdpcmRpIGdyYW1lcmkgeW9rIgorCisjfiBtc2dpZCAiaWxsLWZvcm1lZCBydWxlOiBpbml0aWFsIHN5bWJvbCBub3QgZm9sbG93ZWQgYnkgY29sb24iCisjfiBtc2dzdHIgImv2dPwtYmnnZW1saSBrdXJhbDogYmH+bGFuZ/3nIHNpbWdlc2luaSB0YWtpcCBlZGVuIFwiOlwiIHlvayIKKworI34gbXNnaWQgImdyYW1tYXIgc3RhcnRzIHdpdGggdmVydGljYWwgYmFyIgorI34gbXNnc3RyICJncmFtZXIgZPz+ZXkg53VidWsgaWxlIGJh/mz9eW9yIgorCisjfiBtc2dpZCAicHJldmlvdXMgcnVsZSBsYWNrcyBhbiBlbmRpbmcgYDsnIgorI34gbXNnc3RyICL2bmNla2kga3VyYWxkYSBiaXIgYml0af4gYDsnIGVrc2lrIgorCisjfiBtc2dpZCAidHdvIEBwcmVjJ3MgaW4gYSByb3ciCisjfiBtc2dzdHIgImJpciBzYXT9cmRhIGlraSBAcHJlYyIKKworI34gbXNnaWQgIiUlZ3VhcmQgcHJlc2VudCBidXQgJSVzZW1hbnRpY19wYXJzZXIgbm90IHNwZWNpZmllZCIKKyN+IG1zZ3N0ciAiJSVndWFyZCBzdW51bG11/iBmYWthdCAlJXNlbWFudGljX3BhcnNlciBiZWxpcmxlbm1lbWn+IgorCisjfiBtc2dpZCAidHdvIGFjdGlvbnMgYXQgZW5kIG9mIG9uZSBydWxlIgorI34gbXNnc3RyICJiaXIga3VyYWz9biBzb251bmRhIGlraSBleWxlbSIKKworI34gbXNnaWQgIm1heGltdW0gdGFibGUgc2l6ZSAoJWQpIGV4Y2VlZGVkIgorI34gbXNnc3RyICJlbiBi/Hn8ayB0YWJsbyB1enVubHXwdSAoJWQpIGH+/Wxk/SIKKworI34gbXNnaWQgIiAgICAkICAgXHRnbyB0byBzdGF0ZSAlZFxuIgorI34gbXNnc3RyICIgICAgJCAgIFx0ZHVydW0gJWQneWUgZ2l0XG4iCisKKyN+IG1zZ2lkICJ1bnRlcm1pbmF0ZWQgJWd1YXJkIGNsYXVzZSIKKyN+IG1zZ3N0ciAic29ubGFuZP1y/WxtYW39/iAlZ3VhcmQgeWFudPxtY2VzaSIKZGlmZiAtLWdpdCBhL3BvL3VrLmdtbyBiL3BvL3VrLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTIwZTU1Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vdWsuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL3VrLnBvIGIvcG8vdWsucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVmMGQyNQotLS0gL2Rldi9udWxsCisrKyBiL3BvL3VrLnBvCkBAIC0wLDAgKzEsMTIxNiBAQAorIyBVa3JhaW5pYW4gdHJhbnNsYXRpb24gb2YgYmlzb24uCisjIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGJpc29uIHBhY2thZ2UuCisjCisjIE1heGltIFYuIER6aXVtYW5lbmtvIDxkeml1bWFuZW5rb0BnbWFpbC5jb20+LCAyMDA3LgorIyBZdXJpIENob3Jub2l2YW4gPHl1cmNob3JAdWtyLm5ldD4sIDIwMTIuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBiaXNvbiAyLjYuOTBcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLWJpc29uQGdudS5vcmdcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMi0xMi0xMiAxNjowOSswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMi0xMi0wOCAxODoyMSswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBZdXJpIENob3Jub2l2YW4gPHl1cmNob3JAdWtyLm5ldD5cbiIKKyJMYW5ndWFnZS1UZWFtOiBVa3JhaW5pYW4gPHRyYW5zbGF0aW9uLXRlYW0tdWtAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiB1a1xuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9NDsgcGx1cmFsPW49PTEgPyAzIDogbiUxMD09MSAmJiBuJTEwMCE9MTEgPyAwIDogbiIKKyIlMTA+PTIgJiYgbiUxMDw9NCAmJiAobiUxMDA8MTAgfHwgbiUxMDA+PTIwKSA/IDEgOiAyXG4iCisiWC1HZW5lcmF0b3I6IExva2FsaXplIDEuNVxuIgorCisjOiBzcmMvY29tcGxhaW4uYzoxMjAgc3JjL2NvbXBsYWluLmM6MTMxIHNyYy9jb21wbGFpbi5jOjE0MCBzcmMvY29tcGxhaW4uYzoxODgKKyM6IHNyYy9jb21wbGFpbi5jOjE5OAorbXNnaWQgIndhcm5pbmciCittc2dzdHIgItC/0L7Qv9C10YDQtdC00LbQtdC90L3RjyIKKworIzogc3JjL2NvbXBsYWluLmM6MTUxIHNyYy9jb21wbGFpbi5jOjE2MCBzcmMvY29tcGxhaW4uYzoxNjcKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAi0L/QvtC80LjQu9C60LAiCisKKyM6IHNyYy9jb21wbGFpbi5jOjIwOCBzcmMvY29tcGxhaW4uYzoyMTUKK21zZ2lkICJmYXRhbCBlcnJvciIKK21zZ3N0ciAi0LrRgNC40YLQuNGH0L3QsCDQv9C+0LzQuNC70LrQsDogIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgc2hpZnQiCittc2dzdHIgIiAgICDQmtC+0L3RhNC70ZbQutGCINC80ZbQtiDQv9GA0LDQstC40LvQvtC8ICVkINGC0LAg0LvQtdC60YHQtdC80L7RjiAlcyDRgNC+0LfQsifRj9C30LDQvdC40Lkg0LfRgdGD0LLQvtC8IgorCisjOiBzcmMvY29uZmxpY3RzLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgcmVkdWNlIgorbXNnc3RyICIgICAg0JrQvtC90YTQu9GW0LrRgiDQvNGW0LYg0L/RgNCw0LLQuNC70L7QvCAlZCDRgtCwINC70LXQutGB0LXQvNC+0Y4gJXMg0YDQvtC30LIn0Y/Qt9Cw0L3QuNC5INCy0LjQstC+0LTRgyIKKworIzogc3JjL2NvbmZsaWN0cy5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIGFuIGVycm9yIgorbXNnc3RyICIgICAg0JrQvtC90YTQu9GW0LrRgiDQvNGW0LYg0L/RgNCw0LLQuNC70L7QvCAlZCDRgtCwINC70LXQutGB0LXQvNC+0Y4gJXMg0YDQvtC30LIn0Y/Qt9Cw0L3QuNC5INGP0Log0L/QvtC80LjQu9C60LAiCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCBzaGlmdC9yZWR1Y2UsICVkIHJlZHVjZS9yZWR1Y2VcbiIKK21zZ3N0ciAi0LrQvtC90YTQu9GW0LrRgtC4OiAlZCDQt9GB0YPQstGDL9Cy0LjQstC+0LTRgywgJWQg0LLQuNCy0L7QtNGDL9Cy0LjQstC+0LTRg1xuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgc2hpZnQvcmVkdWNlXG4iCittc2dzdHIgItC60L7QvdGE0LvRltC60YLQuDogJWQg0LfRgdGD0LLRgy/QstC40LLQvtC00YNcbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdHM6ICVkIHJlZHVjZS9yZWR1Y2VcbiIKK21zZ3N0ciAi0LrQvtC90YTQu9GW0LrRgtC4OiAlZCDQstC40LLQvtC00YMv0LLQuNCy0L7QtNGDXG4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhdGUgJWQgIgorbXNnc3RyICLQodGC0LDQvSAlZCAiCisKKyM6IHNyYy9jb25mbGljdHMuYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSVleHBlY3QtcnIgYXBwbGllcyBvbmx5IHRvIEdMUiBwYXJzZXJzIgorbXNnc3RyICIlJWV4cGVjdC1yciDQt9Cw0YHRgtC+0YHQvtCy0YPRlNGC0YzRgdGPINC70LjRiNC1INC00L4g0LDQvdCw0LvRltC30LDRgtC+0YDRgyBHTFIiCisKKyM6IHNyYy9jb25mbGljdHMuYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJleHBlY3RlZCAlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIgorbXNnc3RyWzBdICLQvtGH0ZbQutGD0LLQsNCy0YHRjyAlZCDQutC+0L3RhNC70ZbQutGCINC30YHRg9Cy0YMv0LLQuNCy0L7QtNGDIgorbXNnc3RyWzFdICLQvtGH0ZbQutGD0LLQsNC70L7RgdGPICVkINC60L7QvdGE0LvRltC60YLQuCDQt9GB0YPQstGDL9Cy0LjQstC+0LTRgyIKK21zZ3N0clsyXSAi0L7Rh9GW0LrRg9Cy0LDQu9C+0YHRjyAlZCDQutC+0L3RhNC70ZbQutGC0ZbQsiDQt9GB0YPQstGDL9Cy0LjQstC+0LTRgyIKK21zZ3N0clszXSAi0L7Rh9GW0LrRg9Cy0LDQstGB0Y8gJWQg0LrQvtC90YTQu9GW0LrRgiDQt9GB0YPQstGDL9Cy0LjQstC+0LTRgyIKKworIzogc3JjL2NvbmZsaWN0cy5jOjYyMQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCAlZCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJleHBlY3RlZCAlZCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAi0L7Rh9GW0LrRg9Cy0LDQstGB0Y8gJWQg0LrQvtC90YTQu9GW0LrRgiDQstC40LLQvtC00YMv0LLQuNCy0L7QtNGDIgorbXNnc3RyWzFdICLQvtGH0ZbQutGD0LLQsNC70L7RgdGPICVkINC60L7QvdGE0LvRltC60YLQuCDQstC40LLQvtC00YMv0LLQuNCy0L7QtNGDIgorbXNnc3RyWzJdICLQvtGH0ZbQutGD0LLQsNC70L7RgdGPICVkINC60L7QvdGE0LvRltC60YLRltCyINCy0LjQstC+0LTRgy/QstC40LLQvtC00YMiCittc2dzdHJbM10gItC+0YfRltC60YPQstCw0LLRgdGPICVkINC60L7QvdGE0LvRltC60YIg0LLQuNCy0L7QtNGDL9Cy0LjQstC+0LTRgyIKKworIzogc3JjL2ZpbGVzLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3Qgb3BlbiIKK21zZ3N0ciAiJXM6INC90LUg0LLQtNCw0LvQvtGB0Y8g0LLRltC00LrRgNC40YLQuCIKKworIzogc3JjL2ZpbGVzLmM6MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImlucHV0L291dHB1dCBlcnJvciIKK21zZ3N0ciAi0L/QvtC80LjQu9C60LAg0LLQstC10LTQtdC90L3Rjy3QstC40LLQtdC00LXQvdC90Y8iCisKKyM6IHNyYy9maWxlcy5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2UgZmlsZSIKK21zZ3N0ciAi0L3QtSDQstC00LDRlNGC0YzRgdGPINC30LDQutGA0LjRgtC4INGE0LDQudC7IgorCisjOiBzcmMvZmlsZXMuYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gb3ZlcndyaXRlIHRoZSBpbnB1dCBmaWxlICVzIgorbXNnc3RyICLQstGW0LTQvNC+0LLQu9C10L3QviDRgyDQv9C10YDQtdC30LDQv9C40YHRliDRhNCw0LnQu9CwINCy0YXRltC00L3QuNGFINC00LDQvdC40YUgJXMiCisKKyM6IHNyYy9maWxlcy5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdGluZyBvdXRwdXRzIHRvIGZpbGUgJXMiCittc2dzdHIgItGB0YPQv9C10YDQtdGH0LvQuNCy0LjQuSDQstC40LLRltC0INGDINGE0LDQudC7ICVzIgorCisjOiBzcmMvZ2V0YXJncy5jOjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCittc2dzdHIgItCS0LjQutC+0YDQuNGB0YLQvtCy0YPQudGC0LUgYCVzIC0taGVscCcg0LTQu9GPINC00L7QtNCw0YLQutC+0LLQvtGXINGW0L3RhNC+0YDQvNCw0YbRltGXLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgW09QVElPTl0uLi4gRklMRVxuIgorbXNnc3RyICLQktC40LrQvtGA0LjRgdGC0LDQvdC90Y86ICVzIFvQmtCb0K7Qp9CGXS4uLiDQpNCQ0JnQm1xuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwMgorbXNnaWQgIiIKKyJHZW5lcmF0ZSBhIGRldGVybWluaXN0aWMgTFIgb3IgZ2VuZXJhbGl6ZWQgTFIgKEdMUikgcGFyc2VyIGVtcGxveWluZ1xuIgorIkxBTFIoMSksIElFTFIoMSksIG9yIGNhbm9uaWNhbCBMUigxKSBwYXJzZXIgdGFibGVzLiAgSUVMUigxKSBhbmRcbiIKKyJjYW5vbmljYWwgTFIoMSkgc3VwcG9ydCBpcyBleHBlcmltZW50YWwuXG4iCisiXG4iCittc2dzdHIgIiIKKyLQodGC0LLQvtGA0LjRgtC4INC00LXRgtC10YDQvNGW0L3RltGB0YLQuNGH0L3QuNC5INCw0L3QsNC70ZbQt9Cw0YLQvtGAIExSINCw0LHQviDRg9C30LDQs9Cw0LvRjNC90LXQvdC40LkgTFIgKEdMUikg0LdcbiIKKyLQstC40LrQvtGA0LjRgdGC0LDQvdC90Y/QvCBMQUxSKDEpLCBJRUxSKDEpINCw0LHQviDQutCw0L3QvtC90ZbRh9C90LjRhSDRgtCw0LHQu9C40YbRjCBMUigxKS4g0J/RltC00YLRgNC40LzQutGDXG4iCisiSUVMUigxKSDRgtCwINC60LDQvdC+0L3RltGH0L3QuNGFINGC0LDQsdC70LjRhtGMIExSKDEpINGJ0LUg0L3QtdC00L7RgdGC0LDRgtC90YzQviDQv9C10YDQtdCy0ZbRgNC10L3Qvi5cbiIKKyJcbiIKKworIzogc3JjL2dldGFyZ3MuYzozMDkKK21zZ2lkICIiCisiTWFuZGF0b3J5IGFyZ3VtZW50cyB0byBsb25nIG9wdGlvbnMgYXJlIG1hbmRhdG9yeSBmb3Igc2hvcnQgb3B0aW9ucyB0b28uXG4iCittc2dzdHIgIiIKKyLQntCx0L7QsuKAmdGP0LfQutC+0LLRliDQsNGA0LPRg9C80LXQvdGC0Lgg0LTQu9GPINC00L7QstCz0LjRhSDRhNC+0YDQvCDQt9Cw0L/QuNGB0YMg0L/QsNGA0LDQvNC10YLRgNGW0LIg0ZQg0L7QsdC+0LLigJnRj9C30LrQvtCy0LjQvNC4INGWICIKKyLQtNC70Y8g0YHQutC+0YDQvtGH0LXQvdC40YUg0YTQvtGA0LwuXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzEyCittc2dpZCAiVGhlIHNhbWUgaXMgdHJ1ZSBmb3Igb3B0aW9uYWwgYXJndW1lbnRzLlxuIgorbXNnc3RyICLQotC1INGB0LDQvNC1INGB0YLQvtGB0YPRlNGC0YzRgdGPINC90LXQvtCx0L7QsuKAmdGP0LfQutC+0LLQuNGFINCw0YDQs9GD0LzQtdC90YLRltCyLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMxNgorbXNnaWQgIiIKKyJcbiIKKyJPcGVyYXRpb24gbW9kZXM6XG4iCisiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIKKyIgICAgICAtLXByaW50LWxvY2FsZWRpciAgICAgIG91dHB1dCBkaXJlY3RvcnkgY29udGFpbmluZyBsb2NhbGUtZGVwZW5kZW50ICIKKyJkYXRhXG4iCisiICAgICAgLS1wcmludC1kYXRhZGlyICAgICAgICBvdXRwdXQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgc2tlbGV0b25zIGFuZCBYU0xUXG4iCisiICAteSwgLS15YWNjICAgICAgICAgICAgICAgICBlbXVsYXRlIFBPU0lYIFlhY2NcbiIKKyIgIC1XLCAtLXdhcm5pbmdzWz1DQVRFR09SWV0gIHJlcG9ydCB0aGUgd2FybmluZ3MgZmFsbGluZyBpbiBDQVRFR09SWVxuIgorIiAgLWYsIC0tZmVhdHVyZVs9RkVBVFVSRV0gICAgYWN0aXZhdGUgbWlzY2VsbGFuZW91cyBmZWF0dXJlc1xuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisi0KDQtdC20LjQvNC4INGA0L7QsdC+0YLQuDpcbiIKKyIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgINCy0LjQstC10YHRgtC4INGG0Y4g0LTQvtCy0ZbQtNC60YMg0ZYg0LfQsNCy0LXRgNGI0LjRgtC4INGA0L7QsdC+0YLRg1xuIgorIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAg0LLQuNCy0LXRgdGC0Lgg0ZbQvdGE0L7RgNC80LDRhtGW0Y4g0YnQvtC00L4g0LLQtdGA0YHRltGXINGWINC30LDQstC10YDRiNC40YLQuCAiCisi0YDQvtCx0L7RgtGDXG4iCisiICAgICAgLS1wcmludC1sb2NhbGVkaXIgICAgICDQstC40LLQtdGB0YLQuCDQvdCw0LfQstGDINC60LDRgtCw0LvQvtCz0YMsINC00LUg0LzRltGB0YLRj9GC0YzRgdGPINC30LDQu9C10LbQvdGWICIKKyLQstGW0LQg0LvQvtC60LDQu9GWINC00LDQvdGWXG4iCisiICAgICAgLS1wcmludC1kYXRhZGlyICAgICAgICDQstC40LLQtdGB0YLQuCDQvdCw0LfQstGDINC60LDRgtCw0LvQvtCz0YMsINC00LUg0LzRltGB0YLRj9GC0YzRgdGPINGI0LDQsdC70L7QvdC4INGC0LAgIgorIlhTTFRcbiIKKyIgIC15LCAtLXlhY2MgICAgICAgICAgICAgICAgINGW0LzRltGC0YPQstCw0YLQuCBZYWNjIFBPU0lYXG4iCisiICAtVywgLS13YXJuaW5nc1s90JrQkNCi0JXQk9Ce0KDQhtCvXSDQstC40LLQvtC00LjRgtC4INC/0L7Qv9C10YDQtdC00LbQtdC90L3RjyDQtyDQutCw0YLQtdCz0L7RgNGW0Zcg0JrQkNCi0JXQk9Ce0KDQhtCvXG4iCisiICAtZiwgLS1mZWF0dXJlWz3QnNCe0JbQm9CY0JLQhtCh0KLQrF0g0LfQsNC00ZbRj9GC0Lgg0YDRltC30L3QvtC80LDQvdGW0YLQvdGWINC80L7QttC70LjQstC+0YHRgtGWXG4iCisiXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJzZXI6XG4iCisiICAtTCwgLS1sYW5ndWFnZT1MQU5HVUFHRSAgICAgICAgICBzcGVjaWZ5IHRoZSBvdXRwdXQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VcbiIKKyIgIC1TLCAtLXNrZWxldG9uPUZJTEUgICAgICAgICAgICAgIHNwZWNpZnkgdGhlIHNrZWxldG9uIHRvIHVzZVxuIgorIiAgLXQsIC0tZGVidWcgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudCB0aGUgcGFyc2VyIGZvciBkZWJ1Z2dpbmdcbiIKKyIgICAgICAtLWxvY2F0aW9ucyAgICAgICAgICAgICAgICAgIGVuYWJsZSBsb2NhdGlvbiBzdXBwb3J0XG4iCisiICAtRCwgLS1kZWZpbmU9TkFNRVs9VkFMVUVdICAgICAgICBzaW1pbGFyIHRvICclZGVmaW5lIE5BTUUgXCJWQUxVRVwiJ1xuIgorIiAgLUYsIC0tZm9yY2UtZGVmaW5lPU5BTUVbPVZBTFVFXSAgb3ZlcnJpZGUgJyVkZWZpbmUgTkFNRSBcIlZBTFVFXCInXG4iCisiICAtcCwgLS1uYW1lLXByZWZpeD1QUkVGSVggICAgICAgICBwcmVwZW5kIFBSRUZJWCB0byB0aGUgZXh0ZXJuYWwgc3ltYm9sc1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZCBieSAnLURhcGkucHJlZml4PVBSRUZJWCdcbiIKKyIgIC1sLCAtLW5vLWxpbmVzICAgICAgICAgICAgICAgICAgIGRvbid0IGdlbmVyYXRlICcjbGluZScgZGlyZWN0aXZlc1xuIgorIiAgLWssIC0tdG9rZW4tdGFibGUgICAgICAgICAgICAgICAgaW5jbHVkZSBhIHRhYmxlIG9mIHRva2VuIG5hbWVzXG4iCittc2dzdHIgIiIKKyLQkNC90LDQu9GW0LfQsNGC0L7RgDpcbiIKKyIgIC1MLCAtLWxhbmd1YWdlPdCc0J7QktCQICAgICAgICAgICAgICDQstC60LDQt9Cw0YLQuCDQvNC+0LLRgyDQv9GA0L7Qs9GA0LDQvNGD0LLQsNC90L3RjyDQstC40LLQtdC00LXQvdC40YUgIgorItC00LDQvdC40YVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICjQvdC10LTQvtGB0YLQsNGC0L3RjNC+INC/0LXRgNC10LLRltGA0LXQvdCwINC80L7QttC70LjQstGW0YHRgtGMKVxuIgorIiAgLVMsIC0tc2tlbGV0b2490KTQkNCZ0JsgICAgICAgICAgICAgINCy0LrQsNC30LDRgtC4INGI0LDQsdC70L7QvSwg0Y/QutC40Lkg0YHQu9GW0LQg0LLQuNC60L7RgNC40YHRgtCw0YLQuFxuIgorIiAgLXQsIC0tZGVidWcgICAgICAgICAgICAgICAgICAgICAg0L3QsNC70LDRiNGC0YPQstCw0YLQuCDQsNC90LDQu9GW0LfQsNGC0L7RgCDQtNC70Y8g0LTRltCw0LPQvdC+0YHRgtC40LrQuFxuIgorIiAgICAgIC0tbG9jYXRpb25zICAgICAgICAgICAgICAgICAg0YPQstGW0LzQutC90YPRgtC4INC/0ZbQtNGC0YDQuNC80LrRgyDQvNGW0YHRhtGMXG4iCisiICAtRCwgLS1kZWZpbmU90J3QkNCX0JLQkFs90JfQndCQ0KfQldCd0J3Qr10gICAg0LLRltC00L/QvtCy0ZbQtNC90LjQuiBgJWRlZmluZSDQndCQ0JfQktCQIFwi0JfQndCQ0KfQldCd0J3Qr1wiJ1xuIgorIiAgLUYsIC0tZm9yY2UtZGVmaW5lPdCd0JDQl9CS0JBbPdCX0J3QkNCn0JXQndCd0K9dINC/0LXRgNC10LLQuNC30L3QsNGH0LjRgtC4IGAlZGVmaW5lINCd0JDQl9CS0JAgXCLQl9Cd0JDQp9CV0J3QndCvIgorIlwiJ1xuIgorIiAgLXAsIC0tbmFtZS1wcmVmaXg90J/QoNCV0KTQhtCa0KEgICAgICAgINC00L7QtNCw0LLQsNGC0Lgg0J/QoNCV0KTQhtCa0KEg0LTQviDQt9C+0LLQvdGW0YjQvdGW0YUg0YHQuNC80LLQvtC70ZbQsixcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgINGB0LvRltC0INC90LDQtNCw0LLQsNGC0Lgg0L/QtdGA0LXQstCw0LPRgyAnLURhcGkuIgorInByZWZpeD3Qn9Cg0JXQpNCG0JrQoSdcbiIKKyIgIC1sLCAtLW5vLWxpbmVzICAgICAgICAgICAgICAgICAgINC90LUg0YHRgtCy0L7RgNGO0LLQsNGC0Lgg0ZbQvdGB0YLRgNGD0LrRhtGW0LkgYCNsaW5lJ1xuIgorIiAgLWssIC0tdG9rZW4tdGFibGUgICAgICAgICAgICAgICAg0LLQutC70Y7Rh9C40YLQuCDRgtCw0LHQu9C40YbRjiDQvdCw0LfQsiDQtdC70LXQvNC10L3RgtGW0LJcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNDYKK21zZ2lkICIiCisiT3V0cHV0OlxuIgorIiAgICAgIC0tZGVmaW5lc1s9RklMRV0gICAgICAgYWxzbyBwcm9kdWNlIGEgaGVhZGVyIGZpbGVcbiIKKyIgIC1kICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2V3aXNlIGJ1dCBjYW5ub3Qgc3BlY2lmeSBGSUxFIChmb3IgUE9TSVggIgorIllhY2MpXG4iCisiICAtciwgLS1yZXBvcnQ9VEhJTkdTICAgICAgICBhbHNvIHByb2R1Y2UgZGV0YWlscyBvbiB0aGUgYXV0b21hdG9uXG4iCisiICAgICAgLS1yZXBvcnQtZmlsZT1GSUxFICAgICB3cml0ZSByZXBvcnQgdG8gRklMRVxuIgorIiAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgc2FtZSBhcyBgLS1yZXBvcnQ9c3RhdGUnXG4iCisiICAtYiwgLS1maWxlLXByZWZpeD1QUkVGSVggICBzcGVjaWZ5IGEgUFJFRklYIGZvciBvdXRwdXQgZmlsZXNcbiIKKyIgIC1vLCAtLW91dHB1dD1GSUxFICAgICAgICAgIGxlYXZlIG91dHB1dCB0byBGSUxFXG4iCisiICAtZywgLS1ncmFwaFs9RklMRV0gICAgICAgICBhbHNvIG91dHB1dCBhIGdyYXBoIG9mIHRoZSBhdXRvbWF0b25cbiIKKyIgIC14LCAtLXhtbFs9RklMRV0gICAgICAgICAgIGFsc28gb3V0cHV0IGFuIFhNTCByZXBvcnQgb2YgdGhlIGF1dG9tYXRvblxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoZSBYTUwgc2NoZW1hIGlzIGV4cGVyaW1lbnRhbClcbiIKK21zZ3N0ciAiIgorItCS0LjQstC10LTQtdC90L3RjzpcbiIKKyIgICAgICAtLWRlZmluZXNbPdCk0JDQmdCbXSAgICAgICDRgdGC0LLQvtGA0LjRgtC4INGC0LDQutC+0LYg0YTQsNC50Lsg0LfQsNCz0L7Qu9C+0LLQutGW0LJcbiIKKyIgIC1kICAgICAgICAgICAgICAgICAgICAgICAgINC/0L7QtNGW0LHQvdC1LCDQsNC70LUg0LHQtdC3INC80L7QttC70LjQstC+0YHRgtGWINCy0LrQsNC30LDRgtC4INCk0JDQmdCbICjQtNC70Y8gIgorIllhY2MgUE9TSVgpXG4iCisiICAtciwgLS1yZXBvcnQ90JXQm9CV0JzQldCd0KLQmCAgICAgINGC0LDQutC+0LYg0YHRgtCy0L7RgNC40YLQuCDQsNCy0YLQvtC80LDRgtC40YfQvdGWINC30LDQv9C40YHQuCDQv9C+0LTRgNC+0LHQuNGG0YxcbiIKKyIgICAgICAtLXJlcG9ydC1maWxlPdCk0JDQmdCbICAgICDQt9Cw0L/QuNGB0LDRgtC4INC30LLRltGCINC00L4g0KTQkNCZ0JvQsFxuIgorIiAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAg0YLQtSDRgdCw0LzQtSwg0YnQviDRliBgLS1yZXBvcnQ9c3RhdGUnXG4iCisiICAtYiwgLS1maWxlLXByZWZpeD3Qn9Cg0JXQpNCG0JrQoSAg0LLQutCw0LfQsNGC0Lgg0J/QoNCV0KTQhtCa0KEg0YTQsNC50LvQsCDRgNC10LfRg9C70YzRgtCw0YLRltCyXG4iCisiICAtbywgLS1vdXRwdXQ90KTQkNCZ0JsgICAgICAgICAg0LLQuNCy0LXRgdGC0Lgg0LTQsNC90ZYg0LTQviDQpNCQ0JnQm9CwXG4iCisiICAtZywgLS1ncmFwaFs90KTQkNCZ0JtdICAgICAgICAg0LLQuNCy0LXRgdGC0Lgg0LPRgNCw0YQg0LDQstGC0L7QvNCw0YLQsFxuIgorIiAgLXgsIC0teG1sWz3QpNCQ0JnQm10gICAgICAgICAgINCy0LjQstC10YHRgtC4INC30LLRltGCINCw0LLRgtC+0LzQsNGC0LAg0YMg0YTQvtGA0LzQsNGC0ZYgWE1MXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo0YHRhdC10LzRgyBYTUwg0L/QtdGA0LXQstGW0YDQtdC90L4g0L3QtdC00L7RgdGC0LDRgtC90YzQvilcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNjEKK21zZ2lkICIiCisiV2FybmluZyBjYXRlZ29yaWVzIGluY2x1ZGU6XG4iCisiICBgbWlkcnVsZS12YWx1ZXMnICB1bnNldCBvciB1bnVzZWQgbWlkcnVsZSB2YWx1ZXNcbiIKKyIgIGB5YWNjJyAgICAgICAgICAgIGluY29tcGF0aWJpbGl0aWVzIHdpdGggUE9TSVggWWFjY1xuIgorIiAgYGNvbmZsaWN0cy1zcicgICAgUy9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGNvbmZsaWN0cy1ycicgICAgUi9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGRlcHJlY2F0ZWQnICAgICAgb2Jzb2xldGUgY29uc3RydWN0c1xuIgorIiAgYG90aGVyJyAgICAgICAgICAgYWxsIG90aGVyIHdhcm5pbmdzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgYWxsJyAgICAgICAgICAgICBhbGwgdGhlIHdhcm5pbmdzXG4iCisiICBgbm8tQ0FURUdPUlknICAgICB0dXJuIG9mZiB3YXJuaW5ncyBpbiBDQVRFR09SWVxuIgorIiAgYG5vbmUnICAgICAgICAgICAgdHVybiBvZmYgYWxsIHRoZSB3YXJuaW5nc1xuIgorIiAgYGVycm9yJyAgICAgICAgICAgdHJlYXQgd2FybmluZ3MgYXMgZXJyb3JzXG4iCittc2dzdHIgIiIKKyLQmtCw0YLQtdCz0L7RgNGW0Zcg0L/QvtC/0LXRgNC10LTQttC10L3RjDpcbiIKKyIgIGBtaWRydWxlLXZhbHVlcycgINC90LXQstGB0YLQsNC90L7QstC70LXQvdGWINCw0LHQviDQvdC10LLQuNC60L7RgNC40YHRgtCw0L3RliDQv9GA0L7QvNGW0LbQvdGWINC30L3QsNGH0LXQvdC90Y9cbiIKKyIgIGB5YWNjJyAgICAgICAgICAgINC90LXRgdGD0LzRltGB0L3QvtGB0YLRliDQtyBZYWNjIFBPU0lYXG4iCisiICBgY29uZmxpY3RzLXNyJyAgICBTL1It0LrQvtC90YTQu9GW0LrRgtC4ICjRgtC40L/QvtCy0L4g0YPQstGW0LzQutC90LXQvdC+KVxuIgorIiAgYGNvbmZsaWN0cy1ycicgICAgUi9SIGNvbmZsaWN0cyAo0YLQuNC/0L7QstC+INGD0LLRltC80LrQvdC10L3QvilcbiIKKyIgIGBkZXByZWNhdGVkJyAgICAgINC30LDRgdGC0LDRgNGW0LvRliDQutC+0L3RgdGC0YDRg9C60YbRltGXXG4iCisiICBgb3RoZXInICAgICAgICAgICDQstGB0ZYg0ZbQvdGI0ZYg0L/QvtC/0LXRgNC10LTQttC10L3QvdGPICjRgtC40L/QvtCy0L4g0YPQstGW0LzQutC90LXQvdC+KVxuIgorIiAgYGFsbCcgICAgICAgICAgICAg0LLRgdGWINC/0L7Qv9C10YDQtdC00LbQtdC90L3Rj1xuIgorIiAgYG5vLdCa0JDQotCV0JPQntCg0IbQrycgICAg0LLQuNC80LrQvdGD0YLQuCDQv9C+0L/QtdGA0LXQtNC20LXQvdC90Y8g0Lcg0JrQkNCi0JXQk9Ce0KDQhtCHXG4iCisiICBgbm9uZScgICAgICAgICAgICDQstC40LzQutC90YPRgtC4INCy0YHRliDQv9C+0L/QtdGA0LXQtNC20LXQvdC90Y9cbiIKKyIgIGBlcnJvcicgICAgICAgICAgINCy0LLQsNC20LDRgtC4INC/0L7Qv9C10YDQtdC00LbQtdC90L3RjyDQv9C+0LzQuNC70LrQsNC80LhcbiIKKyJcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNzYKK21zZ2lkICIiCisiVEhJTkdTIGlzIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMgdGhhdCBjYW4gaW5jbHVkZTpcbiIKKyIgIGBzdGF0ZScgICAgICAgIGRlc2NyaWJlIHRoZSBzdGF0ZXNcbiIKKyIgIGBpdGVtc2V0JyAgICAgIGNvbXBsZXRlIHRoZSBjb3JlIGl0ZW0gc2V0cyB3aXRoIHRoZWlyIGNsb3N1cmVcbiIKKyIgIGBsb29rYWhlYWQnICAgIGV4cGxpY2l0bHkgYXNzb2NpYXRlIGxvb2thaGVhZCB0b2tlbnMgdG8gaXRlbXNcbiIKKyIgIGBzb2x2ZWQnICAgICAgIGRlc2NyaWJlIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMgc29sdmluZ1xuIgorIiAgYGFsbCcgICAgICAgICAgaW5jbHVkZSBhbGwgdGhlIGFib3ZlIGluZm9ybWF0aW9uXG4iCisiICBgbm9uZScgICAgICAgICBkaXNhYmxlIHRoZSByZXBvcnRcbiIKK21zZ3N0ciAiIgorIlRISU5HUyAtINGB0L/QuNGB0L7QuiDRgNC+0LfQtNGW0LvQtdC90LjRhSDQutC+0LzQvtGOINGB0LvRltCyLCDRj9C60ZYg0LzQvtC20YPRgtGMINCy0LrQu9GO0YfQsNGC0Lg6XG4iCisiICBgc3RhdGUnICAgICAgICDQvtC/0LjRgdGD0ZQg0YHRgtCw0L3QuFxuIgorIiAgYGl0ZW1zZXQnICAgICAg0LfQsNCy0LXRgNGI0LjRgtC4INC90LDQsdGW0YAg0LXQu9C10LzQtdC90YLRltCyINGP0LTRgNCwINGC0LAg0LfQsNC60YDQuNGC0Lgg0ZfRhVxuIgorIiAgYGxvb2thaGVhZCcgICAg0Y/QstC90LAg0L/RgNC40LIn0Y/Qt9Cw0YLQuCDQvtC30L3QsNC60LggbG9va2FoZWFkINC00L4g0LXQu9C10LzQtdC90YLRltCyXG4iCisiICBgc29sdmVkJyAgICAgICDQvtC/0LjRgdCw0YLQuCDQstC40YDRltGI0LXQvdC90Y8g0LrQvtC90YTQu9GW0LrRgtGW0LIg0LfRgdGD0LLRgy/QstC40LLQvtC00YNcbiIKKyIgIGBhbGwnICAgICAgICAgINCy0LrQu9GO0YfQsNGC0Lgg0LLRgdGOINC90LDQstC10LTQtdC90YMg0LLQuNGJ0LUg0ZbQvdGE0L7RgNC80LDRhtGW0Y5cbiIKKyIgIGBub25lJyAgICAgICAgINCy0LjQvNC60L3Rg9GC0Lgg0LfQstGW0YJcbiIKKworIzogc3JjL2dldGFyZ3MuYzozODcKK21zZ2lkICIiCisiRkVBVFVSRSBpcyBhIGxpc3Qgb2YgY29tbWEgc2VwYXJhdGVkIHdvcmRzIHRoYXQgY2FuIGluY2x1ZGU6XG4iCisiICBgY2FyZXQnICAgICAgICBzaG93IGVycm9ycyB3aXRoIGNhcmV0c1xuIgorIiAgYGFsbCcgICAgICAgICAgYWxsIG9mIHRoZSBhYm92ZVxuIgorIiAgYG5vbmUnICAgICAgICAgZGlzYWJsZSBhbGwgb2YgdGhlIGFib3ZlXG4iCisiICAiCittc2dzdHIgIiIKKyLQnNCe0JbQm9CY0JLQhtCh0KLQrCDigJQg0YHQv9C40YHQvtC6INGB0LvRltCyLCDQstGW0LTQvtC60YDQtdC80LvQtdC90LjRhSDQutC+0LzQsNC80LguINCc0L7QttC70LjQstGWINGB0LvQvtCy0LA6XG4iCisiICBgY2FyZXQnICAgICAgICDQv9C+0LrQsNC30LDRgtC4INC/0L7QvNC40LvQutC4LCDQv9C+0LLigJnRj9C30LDQvdGWINC3INGB0LjQvNCy0L7Qu9Cw0LzQuCBeXG4iCisiICBgYWxsJyAgICAgICAgICDQstGB0ZYsINCy0LrQsNC30LDQvdGWINCy0LjRidC1XG4iCisiICBgbm9uZScgICAgICAgICDQstC40LzQutC90YPRgtC4LCDQstGB0ZYg0LLQutCw0LfQsNC90ZYg0LLQuNGJ0LVcbiIKKyIgICIKKworIzogc3JjL2dldGFyZ3MuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKK21zZ3N0ciAi0KHQv9C+0LLRltGJ0LDQudGC0LUg0L/RgNC+INC/0L7QvNC40LvQutC4INC30LAg0LDQtNGA0LXRgdC+0Y4gPCVzPi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaG9tZSBwYWdlOiA8JXM+LlxuIgorbXNnc3RyICLQlNC+0LzQsNGI0L3RjyDRgdGC0L7RgNGW0L3QutCwICVzOiA8JXM+LlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NworbXNnaWQgIkdlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LlxuIgorbXNnc3RyICIiCisi0JfQsNCz0LDQu9GM0L3QsCDQtNC+0LLRltC00LrQsCDRidC+0LTQviDQstC40LrQvtGA0LjRgdGC0LDQvdC90Y8g0L/RgNC+0LPRgNCw0LzQvdC+0LPQviDQt9Cw0LHQtdC30L/QtdGH0LXQvdC90Y8gR05VOiA8aHR0cDovL3d3dy4iCisiZ251Lm9yZy9nZXRoZWxwLz4uXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBSZXBsYWNlIExBTkdfQ09ERSBpbiB0aGlzIFVSTCB3aXRoIHlvdXIgbGFuZ3VhZ2UKKyMuIGNvZGUgPGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vTEFOR19DT0RFLmh0bWw+IHRvCisjLiBmb3JtIG9uZSBvZiB0aGUgVVJMcyBhdCBodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtLy4KKyMuIE90aGVyd2lzZSwgcmVwbGFjZSB0aGUgZW50aXJlIFVSTCB3aXRoIHlvdXIgdHJhbnNsYXRpb24gdGVhbSdzCisjLiBlbWFpbCBhZGRyZXNzLgorIzogc3JjL2dldGFyZ3MuYzo0MTAKK21zZ2lkICJSZXBvcnQgdHJhbnNsYXRpb24gYnVncyB0byA8aHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS8+LlxuIgorbXNnc3RyICIiCisi0JfQstGW0YLQuCDRidC+0LTQviDQstCw0LQg0YMg0L/QtdGA0LXQutC70LDQtNCw0YUg0YHQu9GW0LQg0L3QsNC00YHQuNC70LDRgtC4INC30LAg0LDQtNGA0LXRgdCw0LzQuCwg0LLQutCw0LfQsNC90LjQvNC4INGC0YPRgjogIgorIjxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtLz4uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDEyCittc2dpZCAiRm9yIGNvbXBsZXRlIGRvY3VtZW50YXRpb24sIHJ1bjogaW5mbyBiaXNvbi5cbiIKK21zZ3N0ciAiIgorItCXINC/0L7QstC90L7RjiDQtNC+0LrRg9C80LXQvdGC0LDRhtGW0ZTRjiDQvNC+0LbQvdCwINC+0LfQvdCw0LnQvtC80LjRgtC40YHRjyDQt9CwINC00L7Qv9C+0LzQvtCz0L7RjiDQutC+0LzQsNC90LTQuCBpbmZvIGJpc29uLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJiaXNvbiAoR05VIEJpc29uKSAlcyIKK21zZ3N0ciAiYmlzb24gKEdOVSBCaXNvbikgJXMiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDMwCittc2dpZCAiV3JpdHRlbiBieSBSb2JlcnQgQ29yYmV0dCBhbmQgUmljaGFyZCBTdGFsbG1hbi5cbiIKK21zZ3N0ciAi0JDQstGC0L7RgNC4OiDQoNC+0LHQtdGA0YIg0JrQvtGA0LHQtdGCINGC0LAg0KDRltGH0LDRgNC0INCh0YLQvtC70LzQtdC9LlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3B5cmlnaHQgKEMpICVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorbXNnc3RyICJDb3B5cmlnaHQgKEMpICVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQzNworbXNnaWQgIiIKKyJUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOT1xuIgorIndhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLlxuIgorbXNnc3RyICIiCisi0KbQtSDQv9GA0L7Qs9GA0LDQvNC90LUg0LfQsNCx0LXQt9C/0LXRh9C10L3QvdGPINGUINCy0ZbQu9GM0L3QuNC8LCDRg9C80L7QstC4INC60L7Qv9GW0Y7QstCw0L3QvdGPINCy0LjQutC70LDQtNC10L3QviDRgyDQudC+0LPQviAiCisi0L/QvtGH0LDRgtC60L7QstC40YUg0LrQvtC00LDRhS5cbiIKKyLQo9C80L7QstCw0LzQuCDQu9GW0YbQtdC90LfRg9Cy0LDQvdC90Y8g0L/RgNC+0LPRgNCw0LzQuCDQndCVINC/0LXRgNC10LTQsdCw0YfQtdC90L4g0LbQvtC00L3QuNGFINCz0LDRgNCw0L3RgtGW0LksINC30L7QutGA0LXQvNCwICIKKyLQs9Cw0YDQsNC90YLRltC5INC/0YDQsNGG0LXQt9C00LDRgtC90L7RgdGC0ZZcbiIKKyLQsNCx0L4g0L/RgNC40LTQsNGC0L3QvtGB0YLRliDQtNC70Y8g0L/QtdCy0L3QvtGXINC80LXRgtC4LlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSBza2VsZXRvbiBkZWNsYXJhdGlvbnMgYXJlIGludmFsaWQiCittc2dzdHIgItC90LUg0LzQvtC20L3QsCDQstC40LrQvtGA0LjRgdGC0L7QstGD0LLQsNGC0Lgg0LTQtdC60ZbQu9GM0LrQsCDQvtCz0L7Qu9C+0YjQtdC90Ywg0YjQsNCx0LvQvtC90ZbQsiIKKworIzogc3JjL2dldGFyZ3MuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgbGFuZ3VhZ2UiCittc2dzdHIgIiVzOiDQvdC10LrQvtGA0LXQutGC0L3QsCDQvNC+0LLQsCIKKworIzogc3JjL2dldGFyZ3MuYzo0NzkKK21zZ2lkICJtdWx0aXBsZSBsYW5ndWFnZSBkZWNsYXJhdGlvbnMgYXJlIGludmFsaWQiCittc2dzdHIgItCy0LjQt9C90LDRh9C10L3QvdGPINC00LXQutGW0LvRjNC60L7RhSDQvtCz0L7Qu9C+0YjQtdC90Ywg0LzQvtCyINGUINC90LXQutC+0YDQtdC60YLQvdC40LwiCisKKyM6IHNyYy9nZXRhcmdzLmM6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBtaXNzaW5nIG9wZXJhbmQiCittc2dzdHIgIiVzOiDQv9GA0L7Qv9GD0YnQtdC90L4g0L7Qv9C10YDQsNC90LQiCisKKyM6IHNyYy9nZXRhcmdzLmM6NzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dHJhIG9wZXJhbmQgJXMiCittc2dzdHIgItC30LDQudCy0LjQuSDQvtC/0LXRgNCw0L3QtCAlcyIKKworIzogc3JjL2dyYW0uYzoxMTIKK21zZ2lkICJlbXB0eSIKK21zZ3N0ciAi0L/QvtGA0L7QttC90ZbQuSIKKworIzogc3JjL2dyYW0uYzoyMDEKK21zZ2lkICJHcmFtbWFyIgorbXNnc3RyICLQk9GA0LDQvNCw0YLQuNC60LAiCisKKyM6IHNyYy9ncmFwaHZpei5jOjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIvLyBHZW5lcmF0ZWQgYnkgJXMuXG4iCisiLy8gUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKKyIvLyBIb21lIHBhZ2U6IDwlcz4uXG4iCisiXG4iCittc2dzdHIgIiIKKyIvLyDQodGC0LLQvtGA0LXQvdC+INC30LAg0LTQvtC/0L7QvNC+0LPQvtGOICVzLlxuIgorIi8vINCf0YDQviDQstCw0LTQuCDQv9C+0LLRltC00L7QvNC70Y/QudGC0LUg0L3QsCDQsNC00YDQtdGB0YMgPCVzPi5cbiIKKyIvLyDQlNC+0LzQsNGI0L3RjyDRgdGC0L7RgNGW0L3QutCwOiA8JXM+LlxuIgorIlxuIgorCisjOiBzcmMvbG9jYXRpb24uYzo5MyBzcmMvc2Nhbi1ncmFtLmw6ODU5CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgbnVtYmVyIG92ZXJmbG93IgorbXNnc3RyICLQv9C10YDQtdC/0L7QstC90LXQvdC90Y8g0L3QvtC80LXRgNGDINGA0Y/QtNC60LAiCisKKyM6IHNyYy9sb2NhdGlvbi5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbHVtbiBudW1iZXIgb3ZlcmZsb3ciCittc2dzdHIgItC/0LXRgNC10L/QvtCy0L3QtdC90L3RjyDQvdC+0LzQtdGA0YMg0YHRgtC+0LLQv9GH0LjQutCwIgorCisjOiBzcmMvbWFpbi5jOjE0NgorbXNnaWQgInJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cyIKK21zZ3N0ciAi0L/RgNCw0LLQuNC70L4g0ZQg0LfQsNC50LLQuNC8INGDINCw0L3QsNC70ZbQt9Cw0YLQvtGA0ZYg0YfQtdGA0LXQtyDQutC+0L3RhNC70ZbQutGC0LgiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlZGVmaW5lIHZhcmlhYmxlICVzIHJlZGVmaW5lZCIKK21zZ3N0ciAi0LfQvNGW0L3QvdGDICUlZGVmaW5lICVzINC/0LXRgNC10LLQuNC30L3QsNGH0LXQvdC+IgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ1MworbXNnaWQgInByZXZpb3VzIGRlZmluaXRpb24iCittc2dzdHIgItC/0L7Qv9C10YDQtdC00L3RlCDQstC40LfQvdCw0YfQtdC90L3RjyIKKworIzogc3JjL211c2NsZS10YWIuYzo0OTAgc3JjL211c2NsZS10YWIuYzo1MDQgc3JjL211c2NsZS10YWIuYzo1NTYKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgJXMiCittc2dzdHIgIiVzOiDQvdC10LLQuNC30L3QsNGH0LXQvdCwINC30LzRltC90L3QsCAlJWRlZmluZSAlcyIKKworIzogc3JjL211c2NsZS10YWIuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJSVkZWZpbmUgQm9vbGVhbiB2YXJpYWJsZSAlcyIKK21zZ3N0ciAi0L3QtdC60L7RgNC10LrRgtC90LUg0LfQvdCw0YfQtdC90L3RjyDQsdGD0LvQtdCy0L7RlyDQt9C80ZbQvdC90L7RlyAlJWRlZmluZSAlcyIKKworIzogc3JjL211c2NsZS10YWIuYzo2MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJSVkZWZpbmUgdmFyaWFibGUgJXM6ICVzIgorbXNnc3RyICLQvdC10LrQvtGA0LXQutGC0L3QtSDQt9C90LDRh9C10L3QvdGPINC30LzRltC90L3QvtGXICUlZGVmaW5lICVzOiAlcyIKKworIzogc3JjL211c2NsZS10YWIuYzo2MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWNjZXB0ZWQgdmFsdWU6ICVzIgorbXNnc3RyICLQv9GA0LjQudC90Y/RgtC1INC30L3QsNGH0LXQvdC90Y86ICVzIgorCisjOiBzcmMvcGFyc2UtZ3JhbS55Ojc0NworIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGlkZW50aWZpZXIgaW4gcGFyYW1ldGVyIGRlY2xhcmF0aW9uIgorbXNnc3RyICLRgyDQvtC/0LjRgdGWINC/0LDRgNCw0LzQtdGC0YDQsCDQstGW0LTRgdGD0YLQvdGW0Lkg0ZbQtNC10L3RgtC40YTRltC60LDRgtC+0YAiCisKKyM6IHNyYy9wcmludC5jOjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiB0eXBlICVkIGlzICVzXG4iCittc2dzdHIgIiDRgtC40L8gJWQg0ZQgJXNcbiIKKworIzogc3JjL3ByaW50LmM6MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgInNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgJWRcbiIKK21zZ3N0ciAi0LfRgdGD0LIsINGC0LAg0L/QtdGA0LXRhdGW0LQg0YMg0YHRgtCw0L0gJWRcbiIKKworIzogc3JjL3ByaW50LmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImdvIHRvIHN0YXRlICVkXG4iCittc2dzdHIgItC/0LXRgNC10YXRltC0INGDINGB0YLQsNC9ICVkXG4iCisKKyM6IHNyYy9wcmludC5jOjIwMworbXNnaWQgImVycm9yIChub25hc3NvY2lhdGl2ZSlcbiIKK21zZ3N0ciAi0L/QvtC80LjQu9C60LAgKNC90LUg0LDRgdC+0YbRltCw0YLQuNCy0L3QsClcbiIKKworIzogc3JjL3ByaW50LmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZHVjZSB1c2luZyBydWxlICVkICglcykiCittc2dzdHIgItCy0LjQstGW0LQg0Lcg0LLQuNC60L7RgNC40YHRgtCw0L3QvdGP0Lwg0L/RgNCw0LLQuNC70LAgJWQgKCVzKSIKKworIzogc3JjL3ByaW50LmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgImFjY2VwdCIKK21zZ3N0ciAi0L/RgNC40LnQvdGP0YLQuCIKKworIzogc3JjL3ByaW50LmM6MjY0IHNyYy9wcmludC5jOjMzOAorbXNnaWQgIiRkZWZhdWx0IgorbXNnc3RyICIkZGVmYXVsdCIKKworIzogc3JjL3ByaW50LmM6MzczIHNyYy9wcmludF9ncmFwaC5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YXRlICVkIgorbXNnc3RyICLQodGC0LDQvSAlZCIKKworIzogc3JjL3ByaW50LmM6NDA5Cittc2dpZCAiVGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyIgorbXNnc3RyICLQotC10YDQvNGW0L3QsNC70YzQvdGWINGB0LjQvNCy0L7Qu9C4INC3INC/0YDQsNCy0LjQu9Cw0LzQuCwg0YMg0Y/QutC40YUg0LLQvtC90Lgg0Lcn0Y/QstC70Y/RjtGC0YzRgdGPIgorCisjOiBzcmMvcHJpbnQuYzo0MzYKK21zZ2lkICJOb250ZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIiCittc2dzdHIgItCd0LXRgtC10YDQvNGW0L3QsNC70YzQvdGWINGB0LjQvNCy0L7Qu9C4INC3INC/0YDQsNCy0LjQu9Cw0LzQuCwg0YMg0Y/QutC40YUg0LLQvtC90Lgg0Lcn0Y/QstC70Y/RjtGC0YzRgdGPIgorCisjOiBzcmMvcHJpbnQuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uIGxlZnQ6IgorbXNnc3RyICIg0LvRltCy0L7RgNGD0Yc6IgorCisjOiBzcmMvcHJpbnQuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uIHJpZ2h0OiIKK21zZ3N0ciAiINC/0YDQsNCy0L7RgNGD0Yc6IgorCisjOiBzcmMvcHJpbnQuYzo1MTAKK21zZ2lkICJSdWxlcyB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzIgorbXNnc3RyICLQn9GA0LDQstC40LvQsCDRlCDQt9Cw0LnQstC40LzQuCDRgyDQsNC90LDQu9GW0LfQsNGC0L7RgNGWINGH0LXRgNC10Lcg0LrQvtC90YTQu9GW0LrRgtC4IgorCisjOiBzcmMvcmVhZGVyLmM6NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgJXMgZGVjbGFyYXRpb25zIgorbXNnc3RyICLQsdCw0LPQsNGC0L7QutGA0LDRgtC90ZYg0L7Qv9C40YHQuCAlcyIKKworIzogc3JjL3JlYWRlci5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJyZXN1bHQgdHlwZSBjbGFzaCBvbiBtZXJnZSBmdW5jdGlvbiAlczogPCVzPiAhPSA8JXM+IgorbXNnc3RyICLQutC+0L3RhNC70ZbQutGCINGC0LjQv9GW0LIg0YDQtdC30YPQu9GM0YLQsNGC0ZbQsiDQv9GW0LQg0YfQsNGBINC+0LHigJnRlNC00L3QsNC90L3RjyDRhNGD0L3QutGG0ZbRlyAlczogPCVzPiAhPSA8JXM+IgorCisjOiBzcmMvcmVhZGVyLmM6MTM5IHNyYy9zeW10YWIuYzoxNTYgc3JjL3N5bXRhYi5jOjE2NiBzcmMvc3ltdGFiLmM6OTM4CisjOiBzcmMvc3ltdGFiLmM6OTUzIHNyYy9zeW10YWIuYzo5Njggc3JjL3N5bXRhYi5jOjk4MworbXNnaWQgInByZXZpb3VzIGRlY2xhcmF0aW9uIgorbXNnc3RyICLQv9C+0L/QtdGA0LXQtNC90ZQg0L7Qs9C+0LvQvtGI0LXQvdC90Y8iCisKKyM6IHNyYy9yZWFkZXIuYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlZCBzeW1ib2wgbmFtZSBmb3IgJXMgaWdub3JlZCIKK21zZ3N0ciAi0L/RgNC+0ZbQs9C90L7RgNC+0LLQsNC90L4g0LTRg9Cx0LvRltC60LDRgiDQvdCw0LfQstC4INGB0LjQvNCy0L7Qu9GDICVzIgorCisjOiBzcmMvcmVhZGVyLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bGUgZ2l2ZW4gZm9yICVzLCB3aGljaCBpcyBhIHRva2VuIgorbXNnc3RyICLQv9GA0LDQstC40LvQviDQt9Cw0LTQsNC90L4g0LTQu9GPICVzLCDRj9C60LjQuSDRlCDQu9C10LrRgdC10LzQvtGOIgorCisjOiBzcmMvcmVhZGVyLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgInR5cGUgY2xhc2ggb24gZGVmYXVsdCBhY3Rpb246IDwlcz4gIT0gPCVzPiIKK21zZ3N0ciAi0LrQvtC90YTQu9GW0LrRgiDRgtC40L/RltCyINC90LAg0YLQuNC/0L7QstGW0Lkg0LTRltGXOiA8JXM+ICE9IDwlcz4iCisKKyM6IHNyYy9yZWFkZXIuYzozMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgcnVsZSBmb3IgdHlwZWQgbm9udGVybWluYWwsIGFuZCBubyBhY3Rpb24iCittc2dzdHIgIiIKKyLQv9C+0YDQvtC20L3RlCDQv9GA0LDQstC40LvQviDQtNC70Y8g0YLQuNC/0ZbQt9C+0LLQsNC90L7Qs9C+INC90LXRgtC10YDQvNGW0L3QsNC70YzQvdC+0LPQviDRgdC40LzQstC+0LvRgywg0YLQsCDQstGW0LTRgdGD0YLQvdGPINC00ZbRjyIKKworIzogc3JjL3JlYWRlci5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnVzZWQgdmFsdWU6ICQlZCIKK21zZ3N0ciAi0L3QtSDQstC40LrQvtGA0LjRgdGC0LDQvdC1INC30L3QsNGH0LXQvdC90Y86ICQlZCIKKworIzogc3JjL3JlYWRlci5jOjMzMAorbXNnaWQgInVuc2V0IHZhbHVlOiAkJCIKK21zZ3N0ciAi0L3QtSDQstGB0YLQsNC90L7QstC70LXQvdC1INC30L3QsNGH0LXQvdC90Y86ICQkIgorCisjOiBzcmMvcmVhZGVyLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgInRva2VuIGZvciAlJXByZWMgaXMgbm90IGRlZmluZWQ6ICVzIgorbXNnc3RyICLQtdC70LXQvNC10L3RgiAlJXByZWMg0L3QtSDQstC40LfQvdCw0YfQtdC90L46ICVzIgorCisjOiBzcmMvcmVhZGVyLmM6NDMxIHNyYy9yZWFkZXIuYzo0NDUgc3JjL3JlYWRlci5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5IG9uZSAlcyBhbGxvd2VkIHBlciBydWxlIgorbXNnc3RyICLRgyDQv9GA0LDQstC40LvRliDQtNC+0L/Rg9GB0LrQsNGU0YLRjNGB0Y8g0LvQuNGI0LUg0L7QtNC40L0gJXMiCisKKyM6IHNyYy9yZWFkZXIuYzo0NDEgc3JjL3JlYWRlci5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhZmZlY3RzIG9ubHkgR0xSIHBhcnNlcnMiCittc2dzdHIgIiVzINCy0L/Qu9C40LLQsNGUINC70LjRiNC1INC90LAg0LDQvdCw0LvRltC30LDRgtC+0YDQuCBHTFIiCisKKyM6IHNyYy9yZWFkZXIuYzo0NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgbXVzdCBiZSBmb2xsb3dlZCBieSBwb3NpdGl2ZSBudW1iZXIiCittc2dzdHIgItC30LAgJXMg0L/QvtCy0LjQvdC90L4g0YHQu9GW0LTRg9Cy0LDRgtC4INC00L7QtNCw0YLQvdC1INGH0LjRgdC70L4iCisKKyM6IHNyYy9yZWFkZXIuYzo1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVsZSBpcyB0b28gbG9uZyIKK21zZ3N0ciAi0L/RgNCw0LLQuNC70L4g0L3QsNC00YLQviDQtNC+0LLQs9C1IgorCisjOiBzcmMvcmVhZGVyLmM6NjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJ1bGVzIGluIHRoZSBpbnB1dCBncmFtbWFyIgorbXNnc3RyICLQstGW0LTRgdGD0YLQvdGWINC/0YDQsNCy0LjQu9CwINGDINCy0YXRltC00L3RltC5INCz0YDQsNC80LDRgtC40YbRliIKKworIzogc3JjL3JlZHVjZS5jOjI0MQorbXNnaWQgInJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyICLQt9Cw0LnQstC1INC/0YDQsNCy0LjQu9C+INGDINCz0YDQsNC80LDRgtC40YbRliIKKworIzogc3JjL3JlZHVjZS5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6ICVzIgorbXNnc3RyICLQvdC10YLQtdGA0LzRltC90LDQuyDRlCDQt9Cw0LnQstC40Lwg0YMg0LPRgNCw0LzQsNGC0LjRhtGWOiAlcyIKKworIzogc3JjL3JlZHVjZS5jOjM1MAorbXNnaWQgIk5vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgItCd0LXRgtC10YDQvNGW0L3QsNC70Lgg0LfQsNC50LLRliDRgyDQs9GA0LDQvNCw0YLQuNGG0ZYiCisKKyM6IHNyYy9yZWR1Y2UuYzozNjMKK21zZ2lkICJUZXJtaW5hbHMgdW51c2VkIGluIGdyYW1tYXIiCittc2dzdHIgItCd0LXQstC40LrQvtGA0LjRgdGC0LDQvdGWINGC0LXRgNC80ZbQvdCw0LvQuCDRgyDQs9GA0LDQvNCw0YLQuNGG0ZYiCisKKyM6IHNyYy9yZWR1Y2UuYzozNzIKK21zZ2lkICJSdWxlcyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgItCX0LDQudCy0ZYg0L/RgNCw0LLQuNC70LAg0YMg0LPRgNCw0LzQsNGC0LjRhtGWIgorCisjOiBzcmMvcmVkdWNlLmM6Mzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ2lkX3BsdXJhbCAiJWQgbm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0clswXSAiJWQg0LfQsNC50LLQuNC5INC90LXRgtC10YDQvNGW0L3QsNC7INGDINCz0YDQsNC80LDRgtC40YbRliIKK21zZ3N0clsxXSAiJWQg0LfQsNC50LLRliDQvdC10YLQtdGA0LzRltC90LDQu9C4INGDINCz0YDQsNC80LDRgtC40YbRliIKK21zZ3N0clsyXSAiJWQg0LfQsNC50LLQuNGFINC90LXRgtC10YDQvNGW0L3QsNC70ZbQsiDRgyDQs9GA0LDQvNCw0YLQuNGG0ZYiCittc2dzdHJbM10gIiVkINC30LDQudCy0LjQuSDQvdC10YLQtdGA0LzRltC90LDQuyDRgyDQs9GA0LDQvNCw0YLQuNGG0ZYiCisKKyM6IHNyYy9yZWR1Y2UuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgcnVsZSB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dpZF9wbHVyYWwgIiVkIHJ1bGVzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0clswXSAiJWQg0LfQsNC50LLQtSDQv9GA0LDQstC40LvQviDRgyDQs9GA0LDQvNCw0YLQuNGG0ZYiCittc2dzdHJbMV0gIiVkINC30LDQudCy0ZYg0L/RgNCw0LLQuNC70LAg0YMg0LPRgNCw0LzQsNGC0LjRhtGWIgorbXNnc3RyWzJdICIlZCDQt9Cw0LnQstC40YUg0L/RgNCw0LLQuNC7INGDINCz0YDQsNC80LDRgtC40YbRliIKK21zZ3N0clszXSAiJWQg0LfQsNC50LLQtSDQv9GA0LDQstC40LvQviDRgyDQs9GA0LDQvNCw0YLQuNGG0ZYiCisKKyM6IHNyYy9yZWR1Y2UuYzo0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnQgc3ltYm9sICVzIGRvZXMgbm90IGRlcml2ZSBhbnkgc2VudGVuY2UiCittc2dzdHIgItC/0L7Rh9Cw0YLQutC+0LLQuNC5INGB0LjQvNCy0L7QuyAlcyDQvdC1INCy0LjQstC+0LTQuNGC0Ywg0LbQvtC00L3QvtCz0L4g0YDQtdGH0LXQvdC90Y8iCisKKyM6IHNyYy9zY2FuLWNvZGUubDoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYXkgJyVzJyIKK21zZ3N0ciAi0LfQsNC50LLQuNC5INGB0LjQvNCy0L7QuyAnJXMnIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjI5Cittc2dpZCAiYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUiCittc2dzdHIgItC90LDQv9GA0LjQutGW0L3RhtGWINC60L7QtNGDINC00ZbRlyDQvNC+0LbQu9C40LLQviDQv9C+0YLRgNGW0LHQtdC9INGB0LjQvNCy0L7QuyAnOyciCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyMzIKK21zZ2lkICJmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24gd2lsbCBub3QgYWRkIHRoZSAnOyciCittc2dzdHIgItGDINC80LDQudCx0YPRgtC90ZbRhSDQstC10YDRgdGW0Y/RhSBCaXNvbiDRgdC40LzQstC+0LsgJzsnINC90LUg0LTQvtC00LDQstCw0YLQuNC80LXRgtGM0YHRjyIKKworIzogc3JjL3NjYW4tY29kZS5sOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2Ugb2YgWVlGQUlMLCB3aGljaCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQiCittc2dzdHIgIiIKKyLQstC40LrQvtGA0LjRgdGC0LDQvdC90Y8gWVlGQUlMLiDQktCy0LDQttCw0ZTRgtGM0YHRjyDQt9Cw0YHRgtCw0YDRltC70LjQvCwg0LHRg9C00LUg0LLQuNC70YPRh9C10L3QviDRgyDQvdCw0YHRgtGD0L/QvdC40YUgIgorItCy0LXRgNGB0ZbRj9GFLiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQzMSBzcmMvc2Nhbi1jb2RlLmw6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVycyB0bzogJWMlcyBhdCAlcyIKK21zZ3N0ciAi0L/QvtGB0LjQu9Cw0ZTRgtGM0YHRjyDQvdCwOiAlYyVzINGDICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBvc3NpYmx5IG1lYW50OiAlYyIKK21zZ3N0ciAi0LnQvNC+0LLRltGA0L3QviDQvNCw0LvQviDQsdGD0YLQuDogJWMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCBoaWRpbmcgJWMiCittc2dzdHIgIiwg0L/RgNC40YXQvtCy0YPQstCw0L3QvdGPICVjIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiBhdCAlcyIKK21zZ3N0ciAiINGDICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiwgY2Fubm90IGJlIGFjY2Vzc2VkIGZyb20gbWlkLXJ1bGUgYWN0aW9uIGF0ICQlZCIKK21zZ3N0ciAiLCDQtNC+0YHRgtGD0L8g0Lcg0LTRltGXINC/0YDQvtC80ZbQttC90L7Qs9C+INC/0YDQsNCy0LjQu9CwINC90LXQvNC+0LbQu9C40LLQuNC5INGDICQlZCIKKworIzogc3JjL3NjYW4tY29kZS5sOjUyMSBzcmMvc2Nhbi1ncmFtLmw6NzgzCisjLCBjLWZvcm1hdAorbXNnaWQgImludGVnZXIgb3V0IG9mIHJhbmdlOiAlcyIKK21zZ3N0ciAi0LLQuNGF0ZbQtCDQt9CwINC80LXQttGWINC00ZbQsNC/0LDQt9C+0L3RgyDRhtGW0LvQvtCz0L4g0YfQuNGB0LvQsDogJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWZlcmVuY2U6ICVzIgorbXNnc3RyICLQvdC10LrQvtGA0LXQutGC0L3QtSDQv9C+0YHQuNC70LDQvdC90Y86ICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjE5CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciBhZnRlciAnJWMnLCBleHBlY3RpbmcgaW50ZWdlciwgbGV0dGVyLCAnXycsICdbJywgb3IgJyQnIgorbXNnc3RyICIiCisi0YHQuNC90YLQsNC60YHQuNGH0L3QsCDQv9C+0LzQuNC70LrQsCDQv9GW0YHQu9GPICclYycuINCc0LDQu9C+INCx0YPRgtC4INCy0LrQsNC30LDQvdC+INGG0ZbQu9C1INGH0LjRgdC70L4sINC70ZbRgtC10YDRgywgJ18nLCAiCisiJ1snINCw0LHQviAnJCciCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uIGJlZm9yZSAkJWQ6ICUuKnMiCittc2dzdHIgItGDINC/0YDQvtC00YPQutGG0ZbRlyDQvdC1INC30L3QsNC50LTQtdC90L4g0YHQuNC80LLQvtC70YMg0LTQviAkJWQ6ICUuKnMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiAlLipzIgorbXNnc3RyICLRgyDQv9GA0L7QtNGD0LrRhtGW0Zcg0L3QtSDQt9C90LDQudC00LXQvdC+INGB0LjQvNCy0L7Qu9GDOiAlLipzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc2xlYWRpbmcgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAi0L/QvtC80LjQu9C60L7QstC1INC/0L7RgdC40LvQsNC90L3RjzogJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIHJlZmVyZW5jZTogJXMiCittc2dzdHIgItC90LXQvtC00L3QvtC30L3QsNGH0L3QtSDQv9C+0YHQuNC70LDQvdC90Y86ICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGxpY2l0IHR5cGUgZ2l2ZW4gaW4gdW50eXBlZCBncmFtbWFyIgorbXNnc3RyICLRgyDQvdC10YLQuNC/0ZbQt9C+0LLQsNC90ZbQuSDQs9GA0LDQvNCw0YLQuNGG0ZYg0Y/QstC90LjQvCDRh9C40L3QvtC8INCy0LrQsNC30LDQvdC+INGC0LjQvyIKKworIzogc3JjL3NjYW4tY29kZS5sOjc1OQorIywgYy1mb3JtYXQKK21zZ2lkICIkJCBmb3IgdGhlIG1pZHJ1bGUgYXQgJCVkIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICIkJCDQtNC70Y8g0L/RgNC+0LzRltC20L3QvtCz0L4g0L/RgNCw0LLQuNC70LAg0YMgJCVkICVzINC90LXQvNCw0ZQg0L7Qs9C+0LvQvtGI0LXQvdC+0LPQviDRgtC40L/RgyIKKworIzogc3JjL3NjYW4tY29kZS5sOjc2NAorIywgYy1mb3JtYXQKK21zZ2lkICIkJCBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiJCQgJXMg0L3QtSDQvNCw0ZQg0L7Qs9C+0LvQvtGI0LXQvdC+0LPQviDRgtC40L/RgyIKKworIzogc3JjL3NjYW4tY29kZS5sOjc4NgorIywgYy1mb3JtYXQKK21zZ2lkICIkJXMgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiQlcyAlcyDQvdC1INC80LDRlCDQvtCz0L7Qu9C+0YjQtdC90L7Qs9C+INGC0LjQv9GDIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmF5ICcsJyB0cmVhdGVkIGFzIHdoaXRlIHNwYWNlIgorbXNnc3RyICLQt9Cw0LnQstCwINC60L7QvNCwLCDQstCy0LDQttCw0YLQuNC80LXRgtGM0YHRjyDQv9GA0L7QsdGW0LvQvtC8IgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZGlyZWN0aXZlOiAlcyIKK21zZ3N0ciAi0L3QtdC60L7RgNC10LrRgtC90LAg0LTQuNGA0LXQutGC0LjQstCwOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50aWZpZXI6ICVzIgorbXNnc3RyICLQvdC10LrQvtGA0LXQutGC0L3QuNC5INGW0LTQtdC90YLQuNGE0ZbQutCw0YLQvtGAOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjI5NQorbXNnaWQgImludmFsaWQgY2hhcmFjdGVyIgorbXNnaWRfcGx1cmFsICJpbnZhbGlkIGNoYXJhY3RlcnMiCittc2dzdHJbMF0gItC90LXQutC+0YDQtdC60YLQvdGWINGB0LjQvNCy0L7Qu9C4IgorbXNnc3RyWzFdICLQvdC10LrQvtGA0LXQutGC0L3RliDRgdC40LzQstC+0LvQuCIKK21zZ3N0clsyXSAi0L3QtdC60L7RgNC10LrRgtC90ZYg0YHQuNC80LLQvtC70LgiCittc2dzdHJbM10gItC90LXQutC+0YDQtdC60YLQvdC40Lkg0YHQuNC80LLQvtC7IgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgaWRlbnRpZmllciBpbiBicmFja2V0ZWQgbmFtZTogJXMiCittc2dzdHIgItC90LXQvtGH0ZbQutGD0LLQsNC90LjQuSDRltC00LXQvdGC0LjRhNGW0LrQsNGC0L7RgCDRgyDQvdCw0LfQstGDINGDINC00YPQttC60LDRhTogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW4gaWRlbnRpZmllciBleHBlY3RlZCIKK21zZ3N0ciAi0LzQsNC70L4g0LHRg9GC0Lgg0LLQutCw0LfQsNC90L4g0ZbQtNC10L3RgtC40YTRltC60LDRgtC+0YAiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozODEKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciBpbiBicmFja2V0ZWQgbmFtZSIKK21zZ2lkX3BsdXJhbCAiaW52YWxpZCBjaGFyYWN0ZXJzIGluIGJyYWNrZXRlZCBuYW1lIgorbXNnc3RyWzBdICLQvdC10LrQvtGA0LXQutGC0L3RliDRgdC40LzQstC+0LvQuCDRgyDQvdCw0LfQstGWINGDINC00YPQttC60LDRhSIKK21zZ3N0clsxXSAi0L3QtdC60L7RgNC10LrRgtC90ZYg0YHQuNC80LLQvtC70Lgg0YMg0L3QsNC30LLRliDRgyDQtNGD0LbQutCw0YUiCittc2dzdHJbMl0gItC90LXQutC+0YDQtdC60YLQvdGWINGB0LjQvNCy0L7Qu9C4INGDINC90LDQt9Cy0ZYg0YMg0LTRg9C20LrQsNGFIgorbXNnc3RyWzNdICLQvdC10LrQvtGA0LXQutGC0L3QuNC5INGB0LjQvNCy0L7QuyDRgyDQvdCw0LfQstGWINGDINC00YPQttC60LDRhSIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjQ4MSBzcmMvc2Nhbi1ncmFtLmw6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGNoYXJhY3RlciBsaXRlcmFsIgorbXNnc3RyICLQv9C+0YDQvtC20L3RjyDRgdC40LzQstC+0LvRjNC90LAg0YHRgtCw0LvQsCIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjQ4NiBzcmMvc2Nhbi1ncmFtLmw6NTA3CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dHJhIGNoYXJhY3RlcnMgaW4gY2hhcmFjdGVyIGxpdGVyYWwiCittc2dzdHIgItC30LDQudCy0ZYg0YHQuNC80LLQvtC70Lgg0YMg0YHQuNC80LLQvtC70YzQvdGW0Lkg0YHRgtCw0LvRltC5IgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVsbCBjaGFyYWN0ZXIiCittc2dzdHIgItC90LXQv9GA0LjQv9GD0YHRgtC40LzQuNC5IG51bGwt0YHQuNC80LLQvtC7IgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NTMxIHNyYy9zY2FuLWdyYW0ubDo1NDEgc3JjL3NjYW4tZ3JhbS5sOjU2MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBhZnRlciBcXC1lc2NhcGU6ICVzIgorbXNnc3RyICLQvdC10LrQvtGA0LXQutGC0L3QtSDRh9C40YHQu9C+INC/0ZbRgdC70Y8g0LXQutGA0LDQvdGD0LLQsNC90L3RjyBcXDogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgXFwtZXNjYXBlOiAlcyIKK21zZ3N0ciAi0L3QtdC60L7RgNC10LrRgtC90LjQuSDRgdC40LzQstC+0Lsg0L/RltGB0LvRjyDQtdC60YDQsNC90YPQstCw0L3QvdGPIFxcOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjkwMQorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzIGF0IGVuZCBvZiBmaWxlIgorbXNnc3RyICLQvdC1INCy0LjRgdGC0LDRh9Cw0ZQgJXMg0L3QsNC/0YDQuNC60ZbQvdGG0ZYg0YTQsNC50LvQsCIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjkxMgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzIGF0IGVuZCBvZiBsaW5lIgorbXNnc3RyICLQvdC1INCy0LjRgdGC0LDRh9Cw0ZQgJXMg0L3QsNC/0YDQuNC60ZbQvdGG0ZYg0YDRj9C00LrQsCIKKworIzogc3JjL3NjYW4tc2tlbC5sOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmNsb3NlZCAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iCittc2dzdHIgItC90LXQt9Cw0LLQtdGA0YjQtdC90LAg0ZbQvdGB0YLRgNGD0LrRhtGW0Y8gJXMg0YMg0YjQsNCx0LvQvtC90ZYiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIGZldyBhcmd1bWVudHMgZm9yICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAi0LfQsNC90LDQtNGC0L4g0LzQsNC70L4g0LDRgNCz0YPQvNC10L3RgtGW0LIg0YMg0ZbQvdGB0YLRgNGD0LrRhtGW0ZcgJXMg0YjQsNCx0LvQvtC90LAiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGZvciAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iCittc2dzdHIgItC30LDQvdCw0LTRgtC+INCx0LDQs9Cw0YLQviDQsNGA0LPRg9C80LXQvdGC0ZbQsiDRgyDRltC90YHRgtGA0YPQutGG0ZbRlyAlcyDRiNCw0LHQu9C+0L3QsCIKKworIzogc3JjL3N5bWxpc3QuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAkIHZhbHVlOiAkJWQiCittc2dzdHIgItC90LXQutC+0YDQtdC60YLQvdC1ICQg0LfQvdCw0YfQtdC90L3RjzogJCVkIgorCisjOiBzcmMvc3ltdGFiLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUE9TSVggWWFjYyBmb3JiaWRzIGRhc2hlcyBpbiBzeW1ib2wgbmFtZXM6ICVzIgorbXNnc3RyICJZYWNjIFBPU0lYINC30LDQsdC+0YDQvtC90Y/RlCDQstC40LrQvtGA0LjRgdGC0LDQvdC90Y8g0LTQtdGE0ZbRgdGW0LIg0YMg0L3QsNC30LLQsCDRgdC40LzQstC+0LvRltCyOiAlcyIKKworIzogc3JjL3N5bXRhYi5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IHN5bWJvbHMgaW4gaW5wdXQgZ3JhbW1hciAobGltaXQgaXMgJWQpIgorbXNnc3RyICLQvdCw0LTRgtC+INCx0LDQs9Cw0YLQviDRgdC40LzQstC+0LvRltCyICjQu9C10LrRgdC10LzQuCDQv9C70Y7RgSDQvdC10YLQtdGA0LzRltC90LDQu9C4KTsg0LzQsNC60YHQuNC80LDQu9GM0L3QviAlZCIKKworIzogc3JjL3N5bXRhYi5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAi0L/QvtCy0YLQvtGA0L3QuNC5INC+0L/QuNGBICVzINC00LvRjyAlcyIKKworIzogc3JjL3N5bXRhYi5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciA8JXM+IgorbXNnc3RyICLQv9C+0LLRgtC+0YDQvdC40Lkg0L7Qv9C40YEgJXMg0LTQu9GPIDwlcz4iCisKKyM6IHNyYy9zeW10YWIuYzozMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHJlZGVmaW5lZCIKK21zZ3N0ciAi0L/QvtCy0YLQvtGA0L3QtSDQstC40LfQvdCw0YfQtdC90L3RjyDRgdC40LzQstC+0LvRgyAlcyIKKworIzogc3JjL3N5bXRhYi5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgcmVkZWNsYXJlZCIKK21zZ3N0ciAi0YHQuNC80LLQvtC7ICVzINCy0LjQt9C90LDRh9C10L3QuNC5INC/0L7QstGC0L7RgNC90L4iCisKKyM6IHNyYy9zeW10YWIuYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWZpbmluZyB1c2VyIHRva2VuIG51bWJlciBvZiAlcyIKK21zZ3N0ciAi0L/QtdGA0LXQstC40LfQvdCw0YfQtdC90L3RjyDQvdC+0LzQtdGA0LAg0LvQtdC60YHQtdC80Lgg0LrQvtGA0LjRgdGC0YPQstCw0YfQsCDQtNC70Y8gJXMiCisKKyM6IHNyYy9zeW10YWIuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIGlzIHVzZWQsIGJ1dCBpcyBub3QgZGVmaW5lZCBhcyBhIHRva2VuIGFuZCBoYXMgbm8gcnVsZXMiCittc2dzdHIgIiIKKyLRgdC40LzQstC+0LsgJXMg0LLQuNC60L7RgNC40YHRgtC+0LLRg9GU0YLRjNGB0Y8sINCw0LvQtSDQvdC1INCy0LjQt9C90LDRh9C10L3QuNC5INGP0Log0LvQtdC60YHQtdC80LAg0YLQsCDQvdC1INC80LDRlCDQv9GA0LDQstC40LsiCisKKyM6IHNyYy9zeW10YWIuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHVzZWQgbW9yZSB0aGFuIG9uY2UgYXMgYSBsaXRlcmFsIHN0cmluZyIKK21zZ3N0ciAi0YHQuNC80LLQvtC7ICVzINCy0LjQutC+0YDQuNGB0YLQsNC90L4g0LTQtdC60ZbQu9GM0LrQsCDRgNCw0LfRltCyINGP0Log0YHRgtCw0LvQuNC5INGA0Y/QtNC+0Log0YHQuNC80LLQvtC70ZbQsiIKKworIzogc3JjL3N5bXRhYi5jOjQxOAorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgZ2l2ZW4gbW9yZSB0aGFuIG9uZSBsaXRlcmFsIHN0cmluZyIKK21zZ3N0ciAi0YHQuNC80LLQvtC7ICVzINCy0LrQsNC30LDQvdC+INC00LXQutGW0LvRjNC60LAg0YHRgtCw0LvQuNGFINGA0Y/QtNC60ZbQsiAo0LvRltGC0LXRgNCw0LvRltCyKSIKKworIzogc3JjL3N5bXRhYi5jOjUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2VyIHRva2VuIG51bWJlciAlZCByZWRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAi0L/QvtCy0YLQvtGA0L3QtSDQvtCz0L7Qu9C+0YjQtdC90L3RjyDQtdC70LXQvNC10L3RgtCwINC60L7RgNC40YHRgtGD0LLQsNGH0LAg0Lcg0L3QvtC80LXRgNC+0LwgJWQg0LTQu9GPICVzIgorCisjOiBzcmMvc3ltdGFiLmM6NTM5CisjLCBjLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIGRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAi0L/QvtC/0LXRgNC10LTQvdGUINC+0LPQvtC70L7RiNC10L3QvdGPICVzIgorCisjOiBzcmMvc3ltdGFiLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBzdGFydCBzeW1ib2wgJXMgaXMgdW5kZWZpbmVkIgorbXNnc3RyICLQv9C+0YfQsNGC0LrQvtCy0LjQuSDRgdC40LzQstC+0LsgJXMg0L3QtdCy0LjQt9C90LDRh9C10L3QuNC5IgorCisjOiBzcmMvc3ltdGFiLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBzdGFydCBzeW1ib2wgJXMgaXMgYSB0b2tlbiIKK21zZ3N0ciAi0L/QvtGH0LDRgtC60L7QstC40Lkg0YHQuNC80LLQvtC7ICVzINGUINC70LXQutGB0LXQvNC+0Y4iCisKKyM6IHNyYy9zeW10YWIuYzo5MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdnZWQgJSVkZXN0cnVjdG9yIgorbXNnc3RyICLQv9C+0LLRgtC+0YDQvdC1INC+0LPQvtC70L7RiNC10L3QvdGPINGC0LjQv9C+0LLQvtCz0L4gJSVkZXN0cnVjdG9yINC3INC80ZbRgtC60L7RjiIKKworIzogc3JjL3N5bXRhYi5jOjk1MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJSVkZXN0cnVjdG9yIgorbXNnc3RyICLQv9C+0LLRgtC+0YDQvdC1INC+0LPQvtC70L7RiNC10L3QvdGPINGC0LjQv9C+0LLQvtCz0L4gJSVkZXN0cnVjdG9yINCx0LXQtyDQvNGW0YLQutC4IgorCisjOiBzcmMvc3ltdGFiLmM6OTY1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICUlcHJpbnRlciIKK21zZ3N0ciAi0L/QvtCy0YLQvtGA0L3QtSDQvtCz0L7Qu9C+0YjQtdC90L3RjyDRgtC40L/QvtCy0L7Qs9C+ICUlcHJpbnRlciDQtyDQvNGW0YLQutC+0Y4iCisKKyM6IHNyYy9zeW10YWIuYzo5ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdsZXNzICUlcHJpbnRlciIKK21zZ3N0ciAi0L/QvtCy0YLQvtGA0L3QtSDQvtCz0L7Qu9C+0YjQtdC90L3RjyDRgtC40L/QvtCy0L7Qs9C+ICUlcHJpbnRlciDQsdC10Lcg0LzRltGC0LrQuCIKKworIzogZGpncHAvc3VicGlwZS5jOjYzIGRqZ3BwL3N1YnBpcGUuYzoyODYgZGpncHAvc3VicGlwZS5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdmluZyBvZiAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi0YHQv9GA0L7QsdCwINCy0LjQu9GD0YfQtdC90L3RjyDCqyVzwrsg0LfQsNC30L3QsNC70LAg0L3QtdCy0LTQsNGH0ZYiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzo4NSBkamdwcC9zdWJwaXBlLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3JlYXRpb24gb2YgYSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgItGB0L/RgNC+0LHQsCDRgdGC0LLQvtGA0LXQvdC90Y8g0YLQuNC80YfQsNGB0L7QstC+0LPQviDRhNCw0LnQu9CwINC30LDQt9C90LDQu9CwINC90LXQstC00LDRh9GWIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgInNhdmluZyBzdGRpbiBmYWlsZWQiCittc2dzdHIgItGB0L/RgNC+0LHQsCDQt9Cx0LXRgNC10LbQtdC90L3RjyBzdGRpbiDQt9Cw0LfQvdCw0LvQsCDQvdC10LLQtNCw0YfRliIKKworIzogZGpncHAvc3VicGlwZS5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJzYXZpbmcgc3Rkb3V0IGZhaWxlZCIKK21zZ3N0ciAi0YHQv9GA0L7QsdCwINC30LHQtdGA0LXQttC10L3QvdGPIHN0ZG91dCDQt9Cw0LfQvdCw0LvQsCDQvdC10LLQtNCw0YfRliIKKworIzogZGpncHAvc3VicGlwZS5jOjE1MyBkamdwcC9zdWJwaXBlLmM6MTk3IGRqZ3BwL3N1YnBpcGUuYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlbmluZyBvZiB0bXBmaWxlIGZhaWxlZCIKK21zZ3N0ciAi0YHQv9GA0L7QsdCwINCy0ZbQtNC60YDQuNGC0YLRjyDRhNCw0LnQu9CwINGC0LjQvNGH0LDRgdC+0LLQuNGFINC00LDQvdC40YUg0LfQsNC30L3QsNC70LAg0L3QtdCy0LTQsNGH0ZYiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgYmlzb24ncyBzdGRvdXQgdG8gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorItGB0L/RgNC+0LHQsCDQv9C10YDQtdGB0L/RgNGP0LzQvtCy0YPQstCw0L3QvdGPINGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDQstC40LLQtdC00LXQvdC90Y8gYmlzb24g0LTQviDRgtC40LzRh9Cw0YHQvtCy0L7Qs9C+INGE0LDQudC70LAgIgorItC30LDQt9C90LDQu9CwINC90LXQstC00LDRh9GWIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIG00J3Mgc3RkaW4gZnJvbSB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisi0YHQv9GA0L7QsdCwINC/0LXRgNC10YHQv9GA0Y/QvNC+0LLRg9Cy0LDQvdC90Y8g0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+INC00LbQtdGA0LXQu9CwINC00LDQvdC40YUgbTQg0Lcg0YLQuNC80YfQsNGB0L7QstC+0LPQviDRhNCw0LnQu9CwICIKKyLQt9Cw0LfQvdCw0LvQsCDQvdC10LLQtNCw0YfRliIKKworIzogZGpncHAvc3VicGlwZS5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nIG9mIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICLQvdC1INCy0LTQsNC70L7RgdGPINCy0ZbQtNC60YDQuNGC0Lgg0YTQsNC50Lsg0YLQuNC80YfQsNGB0L7QstC40YUg0LTQsNC90LjRhSIKKworIzogZGpncHAvc3VicGlwZS5jOjIxOAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBtNCdzIHN0ZG91dCB0byBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorItGB0L/RgNC+0LHQsCDQv9C10YDQtdGB0L/RgNGP0LzQvtCy0YPQstCw0L3QvdGPINGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDQstC40LLQtdC00LXQvdC90Y8gbTQg0LTQviDRgtC40LzRh9Cw0YHQvtCy0L7Qs9C+INGE0LDQudC70LAgIgorItC30LDQt9C90LDQu9CwINC90LXQstC00LDRh9GWIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSAnJXMnIGludGVycnVwdGVkIgorbXNnc3RyICLQstC40LrQvtC90LDQvdC90Y8g0LTQvtC/0L7QvNGW0LbQvdC+0Zcg0L/RgNC+0LPRgNCw0LzQuCAnJXMnINC/0LXRgNC10YDQstCw0L3QviIKKworIzogZGpncHAvc3VicGlwZS5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gJyVzJyBub3QgZm91bmQiCittc2dzdHIgItC90LUg0LLQtNCw0LvQvtGB0Y8g0LfQvdCw0LnRgtC4INC00L7Qv9C+0LzRltC20L3RgyDQv9GA0L7Qs9GA0LDQvNGDICclcyciCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgYmlzb24ncyBzdGRpbiBmcm9tIHRoZSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKyLRgdC/0YDQvtCx0LAg0L/QtdGA0LXRgdC/0YDRj9C80L7QstGD0LLQsNC90L3RjyDRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L4g0LTQttC10YDQtdC70LAg0LTQsNC90LjRhSBiaXNvbiDQtyDRgtC40LzRh9Cw0YHQvtCy0L7Qs9C+ICIKKyLRhNCw0LnQu9CwINC30LDQt9C90LDQu9CwINC90LXQstC00LDRh9GWIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCAlcyBmb3IgJXMiCittc2dzdHIgItC90LXQv9GA0LjQv9GD0YHRgtC40LzQuNC5INCw0YDQs9GD0LzQtdC90YIgJXMg0LTQu9GPICVzIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIGFyZ3VtZW50ICVzIGZvciAlcyIKK21zZ3N0ciAi0L3QtdC+0LTQvdC+0LfQvdCw0YfQvdC40Lkg0LDRgNCz0YPQvNC10L3RgiAlcyDQtNC70Y8gJXMiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjE1MworbXNnaWQgIlZhbGlkIGFyZ3VtZW50cyBhcmU6IgorbXNnc3RyICLQlNC+0L/Rg9GB0YLQuNC80ZYg0LDRgNCz0YPQvNC10L3RgtC4OiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfYWxsb2NzLCAldSBmcmVlZCAoJS4yZiUlKS5cbiIKK21zZ3N0ciAiJXUgYml0c2V0X2FsbG9jcywgJXUg0LfQstGW0LvRjNC90LXQvdC+ICglLjJmJSUpLlxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9zZXRzLCAldSBjYWNoZWQgKCUuMmYlJSlcbiIKK21zZ3N0ciAiJXUgYml0c2V0X3NldHMsICV1INC60LXRiNC+0LLQsNC90L4gKCUuMmYlJSlcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfcmVzZXRzLCAldSBjYWNoZWQgKCUuMmYlJSlcbiIKK21zZ3N0ciAiJXUgYml0c2V0X3Jlc2V0cywgJXUg0LrQtdGI0L7QstCw0L3QviAoJS4yZiUlKVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF90ZXN0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF90ZXN0cywgJXUg0LrQtdGI0L7QstCw0L3QviAoJS4yZiUlKVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9saXN0c1xuIgorbXNnc3RyICIldSBiaXRzZXRfbGlzdHNcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5MgorbXNnaWQgImNvdW50IGxvZyBoaXN0b2dyYW1cbiIKK21zZ3N0ciAi0LPRltGB0YLQvtCz0YDQsNC80LAg0LbRg9GA0L3QsNC70YMg0LvRltGH0LjQu9GM0L3QuNC60ZbQslxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTk1Cittc2dpZCAic2l6ZSBsb2cgaGlzdG9ncmFtXG4iCittc2dzdHIgItCz0ZbRgdGC0L7Qs9GA0LDQvNCwINC20YPRgNC90LDQu9GDINGA0L7Qt9C80ZbRgNGDXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTgKK21zZ2lkICJkZW5zaXR5IGhpc3RvZ3JhbVxuIgorbXNnc3RyICLQs9GW0YHRgtC+0LPRgNCw0LzQsCDRidGW0LvRjNC90L7RgdGC0ZZcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQml0c2V0IHN0YXRpc3RpY3M6XG4iCisiXG4iCittc2dzdHIgIiIKKyLQodGC0LDRgtC40YHRgtC40LrQsCDQsdGW0YLQvtCy0LjRhSDQv9C+0LvRltCyOlxuIgorIlxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkFjY3VtdWxhdGVkIHJ1bnMgPSAldVxuIgorbXNnc3RyICLQkNC60YPQvNGD0LvRjNC+0LLQsNC90ZYg0LfQsNC/0YPRgdC60LggPSAldVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjU5IGxpYi9iaXRzZXRfc3RhdHMuYzoyNjQKK21zZ2lkICJjYW5ub3QgcmVhZCBzdGF0cyBmaWxlIgorbXNnc3RyICLQvdC1INCy0LTQsNC70L7RgdGPINC/0YDQvtGH0LjRgtCw0YLQuCDRhNCw0LnQuyDRgdGC0LDRgtC40YHRgtC40YfQvdC40YUg0LTQsNC90LjRhSIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgc3RhdHMgZmlsZSBzaXplXG4iCittc2dzdHIgItC/0L7QvNC40LvQutC+0LLQuNC5INGA0L7Qt9C80ZbRgCDRhNCw0LnQu9CwINGB0YLQsNGC0LjRgdGC0LjRh9C90LjRhSDQtNCw0L3QuNGFXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyODcgbGliL2JpdHNldF9zdGF0cy5jOjI4OQorbXNnaWQgImNhbm5vdCB3cml0ZSBzdGF0cyBmaWxlIgorbXNnc3RyICLQvdC1INCy0LTQsNC70L7RgdGPINC30LDQv9C40YHQsNGC0Lgg0YTQsNC50Lsg0YHRgtCw0YLQuNGB0YLQuNGH0L3QuNGFINC00LDQvdC40YUuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjkyCittc2dpZCAiY2Fubm90IG9wZW4gc3RhdHMgZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAi0L3QtSDQstC00LDQu9C+0YHRjyDQstGW0LTQutGA0LjRgtC4INGE0LDQudC7INGB0YLQsNGC0LjRgdGC0LjRh9C90LjRhSDQtNCw0L3QuNGFINC00LvRjyDQt9Cw0L/QuNGB0YMiCisKKyM6IGxpYi9jbG9zZW91dC5jOjExMgorbXNnaWQgIndyaXRlIGVycm9yIgorbXNnc3RyICLQv9C+0LzQuNC70LrQsCDQt9Cw0L/QuNGB0YMiCisKKyM6IGxpYi9lcnJvci5jOjE4OAorbXNnaWQgIlVua25vd24gc3lzdGVtIGVycm9yIgorbXNnc3RyICLQndC10LLRltC00L7QvNCwINGB0LjRgdGC0LXQvNC90LAg0L/QvtC80LjQu9C60LAiCisKKyM6IGxpYi9nZXRvcHQuYzo1NDcgbGliL2dldG9wdC5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICclcycgaXMgYW1iaWd1b3VzOyBwb3NzaWJpbGl0aWVzOiIKK21zZ3N0ciAiJXM6INC90LXQvtC00L3QvtC30L3QsNGH0L3QuNC5INC/0LDRgNCw0LzQtdGC0YAgwqslc8K7OyDQvNC+0LbQu9C40LLRliDQstCw0YDRltCw0L3RgtC4OiIKKworIzogbGliL2dldG9wdC5jOjYyNCBsaWIvZ2V0b3B0LmM6NjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy0tJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6INC00L7QtNCw0LLQsNC90L3RjyDQsNGA0LPRg9C80LXQvdGC0ZbQsiDQtNC+INC/0LDRgNCw0LzQtdGC0YDQsCDCqy0tJXPCuyDQvdC1INC/0LXRgNC10LTQsdCw0YfQtdC90L5cbiIKKworIzogbGliL2dldG9wdC5jOjYzNyBsaWIvZ2V0b3B0LmM6NjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJyVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6INC00L7QtNCw0LLQsNC90L3RjyDQsNGA0LPRg9C80LXQvdGC0ZbQsiDQtNC+INC/0LDRgNCw0LzQtdGC0YDQsCDCqyVjJXPCuyDQvdC1INC/0LXRgNC10LTQsdCw0YfQtdC90L5cbiIKKworIzogbGliL2dldG9wdC5jOjY4NSBsaWIvZ2V0b3B0LmM6NzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy0tJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiDQtNC+INC/0LDRgNCw0LzQtdGC0YDQsCDCqy0tJXPCuyDRgdC70ZbQtCDQtNC+0LTQsNGC0Lgg0LDRgNCz0YPQvNC10L3RglxuIgorCisjOiBsaWIvZ2V0b3B0LmM6NzQyIGxpYi9nZXRvcHQuYzo3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gJy0tJXMnXG4iCittc2dzdHIgIiVzOiDQvdC10LLRltC00L7QvNC40Lkg0L/QsNGA0LDQvNC10YLRgCDCqy0tJXPCu1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6NzUzIGxpYi9nZXRvcHQuYzo3NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gJyVjJXMnXG4iCittc2dzdHIgIiVzOiDQvdC10LLRltC00L7QvNC40Lkg0L/QsNGA0LDQvNC10YLRgCDCqyVjJXPCu1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6ODA1IGxpYi9nZXRvcHQuYzo4MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgb3B0aW9uIC0tICclYydcbiIKK21zZ3N0ciAiJXM6INC90LXQutC+0YDQtdC60YLQvdC40Lkg0L/QsNGA0LDQvNC10YLRgCDigJQgwqslY8K7XG4iCisKKyM6IGxpYi9nZXRvcHQuYzo4NjEgbGliL2dldG9wdC5jOjg3OCBsaWIvZ2V0b3B0LmM6MTA4OCBsaWIvZ2V0b3B0LmM6MTEwNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICclYydcbiIKK21zZ3N0ciAiJXM6INC00L4g0L/QsNGA0LDQvNC10YLRgNCwINGB0LvRltC0INC00L7QtNCw0YLQuCDQsNGA0LPRg9C80LXQvdGCIOKAlCDCqyVjwrtcbiIKKworIzogbGliL2dldG9wdC5jOjkzNCBsaWIvZ2V0b3B0LmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyBpcyBhbWJpZ3VvdXNcbiIKK21zZ3N0ciAiJXM6INC/0LDRgNCw0LzQtdGC0YAgwqstVyAlc8K7INC90LUg0ZQg0L7QtNC90L7Qt9C90LDRh9C90LjQvFxuIgorCisjOiBsaWIvZ2V0b3B0LmM6OTc0IGxpYi9nZXRvcHQuYzo5OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLVcgJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6INC00L7QtNCw0LLQsNC90L3RjyDQsNGA0LPRg9C80LXQvdGC0ZbQsiDQtNC+INC/0LDRgNCw0LzQtdGC0YDQsCDCqy1XICVzwrsg0L3QtSDQv9C10YDQtdC00LHQsNGH0LXQvdC+XG4iCisKKyM6IGxpYi9nZXRvcHQuYzoxMDEzIGxpYi9nZXRvcHQuYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczog0LTQviDQv9Cw0YDQsNC80LXRgtGA0LAgwqstVyAlc8K7INGB0LvRltC0INC00L7QtNCw0YLQuCDQsNGA0LPRg9C80LXQvdGCXG4iCisKKyM6IGxpYi9vYnN0YWNrLmM6NDEzIGxpYi9vYnN0YWNrLmM6NDE1IGxpYi94YWxsb2MtZGllLmM6MzQKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICLQv9Cw0Lwn0Y/RgtGMINCy0LjRh9C10YDQv9Cw0L3QviIKKworIzogbGliL3NwYXduLXBpcGUuYzoxNDAgbGliL3NwYXduLXBpcGUuYzoxNDMgbGliL3NwYXduLXBpcGUuYzoyNjQKKyM6IGxpYi9zcGF3bi1waXBlLmM6MjY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZSIKK21zZ3N0ciAi0L3QtSDQstC00LDQu9C+0YHRjyDRgdGC0LLQvtGA0LjRgtC4INC60LDQvdCw0LsiCisKKyM6IGxpYi9zcGF3bi1waXBlLmM6MjM0IGxpYi9zcGF3bi1waXBlLmM6MzQ4IGxpYi93YWl0LXByb2Nlc3MuYzoyODIKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyBmYWlsZWQiCittc2dzdHIgItCf0L7QvNC40LvQutCwINC/0ZbQtNC/0YDQvtGG0LXRgdGDICVzIgorCisjLiBUUkFOU0xBVE9SUzoKKyMuIEdldCB0cmFuc2xhdGlvbnMgZm9yIG9wZW4gYW5kIGNsb3NpbmcgcXVvdGF0aW9uIG1hcmtzLgorIy4gVGhlIG1lc3NhZ2UgY2F0YWxvZyBzaG91bGQgdHJhbnNsYXRlICJgIiB0byBhIGxlZnQKKyMuIHF1b3RhdGlvbiBtYXJrIHN1aXRhYmxlIGZvciB0aGUgbG9jYWxlLCBhbmQgc2ltaWxhcmx5IGZvcgorIy4gIiciLiAgRm9yIGV4YW1wbGUsIGEgRnJlbmNoIFVuaWNvZGUgbG9jYWwgc2hvdWxkIHRyYW5zbGF0ZQorIy4gdGhlc2UgdG8gVSswMEFCIChMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRQorIy4gUVVPVEFUSU9OIE1BUkspLCBhbmQgVSswMEJCIChSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUKKyMuIFFVT1RBVElPTiBNQVJLKSwgcmVzcGVjdGl2ZWx5LgorIy4KKyMuIElmIHRoZSBjYXRhbG9nIGhhcyBubyB0cmFuc2xhdGlvbiwgd2Ugd2lsbCB0cnkgdG8KKyMuIHVzZSBVbmljb2RlIFUrMjAxOCAoTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspIGFuZAorIy4gVW5pY29kZSBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykuICBJZiB0aGUKKyMuIGN1cnJlbnQgbG9jYWxlIGlzIG5vdCBVbmljb2RlLCBsb2NhbGVfcXVvdGluZ19zdHlsZQorIy4gd2lsbCBxdW90ZSAnbGlrZSB0aGlzJywgYW5kIGNsb2NhbGVfcXVvdGluZ19zdHlsZSB3aWxsCisjLiBxdW90ZSAibGlrZSB0aGlzIi4gIFlvdSBzaG91bGQgYWx3YXlzIGluY2x1ZGUgdHJhbnNsYXRpb25zCisjLiBmb3IgImAiIGFuZCAiJyIgZXZlbiBpZiBVKzIwMTggYW5kIFUrMjAxOSBhcmUgYXBwcm9wcmlhdGUKKyMuIGZvciB5b3VyIGxvY2FsZS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFya3NfaW5fb3RoZXJfbGFuZ3VhZ2VzPgorIy4gYW5kIHVzZSBnbHlwaHMgc3VpdGFibGUgZm9yIHlvdXIgbGFuZ3VhZ2UuCisjOiBsaWIvcXVvdGVhcmcuYzozMTIKK21zZ2lkICJgIgorbXNnc3RyICJgIgorCisjOiBsaWIvcXVvdGVhcmcuYzozMTMKK21zZ2lkICInIgorbXNnc3RyICInIgorCisjOiBsaWIvdGltZXZhci5jOjQ3NQorbXNnaWQgIiIKKyJcbiIKKyJFeGVjdXRpb24gdGltZXMgKHNlY29uZHMpXG4iCittc2dzdHIgIiIKKyJcbiIKKyLQp9Cw0YEg0LLQuNC60L7QvdCw0L3QvdGPICjRgyDRgdC10LrRg9C90LTQsClcbiIKKworIzogbGliL3RpbWV2YXIuYzo1MjUKK21zZ2lkICIgVE9UQUwgICAgICAgICAgICAgICAgIDoiCittc2dzdHIgIiDQl9CQ0JPQkNCb0J7QnCAgICAgICAgICAgICAgIDoiCisKKyM6IGxpYi90aW1ldmFyLmM6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWUgaW4gJXM6ICVsZC4lMDZsZCAoJWxkJSUpXG4iCittc2dzdHIgItGH0LDRgSDRgyAlczogJWxkLiUwNmxkICglbGQlJSlcbiIKKworIzogbGliL3czMnNwYXduLmg6NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiX29wZW5fb3NmaGFuZGxlIGZhaWxlZCIKK21zZ3N0ciAi0J/QvtC80LjQu9C60LAgX29wZW5fb3NmaGFuZGxlIgorCisjOiBsaWIvdzMyc3Bhd24uaDo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdG9yZSBmZCAlZDogZHVwMiBmYWlsZWQiCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LLRltC00L3QvtCy0LjRgtC4IGZkICVkOiDQv9C+0LzQuNC70LrQsCBkdXAyIgorCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6MjIzIGxpYi93YWl0LXByb2Nlc3MuYzoyNTUgbGliL3dhaXQtcHJvY2Vzcy5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdWJwcm9jZXNzIgorbXNnc3RyICLQn9GW0LTQv9GA0L7RhtC10YEgJXMiCisKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzoyNzQgbGliL3dhaXQtcHJvY2Vzcy5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdWJwcm9jZXNzIGdvdCBmYXRhbCBzaWduYWwgJWQiCittc2dzdHIgItCf0ZbQtNC/0YDQvtGG0LXRgdC+0LwgJXMg0L7RgtGA0LjQvNCw0L3QviDRgdC40LPQvdCw0Lsg0YnQvtC00L4g0LDQstCw0YDRltC50L3QvtCz0L4g0LfQsNCy0LXRgNGI0LXQvdC90Y8gJWQiCisKKyN+IG1zZ2lkICJzdGF0ZSAlZCIKKyN+IG1zZ3N0ciAi0YHRgtCw0L0gJWQiCisKKyN+IG1zZ2lkICJzdHJheSAnQCciCisjfiBtc2dzdHIgItC30LDQudCy0LjQuSDRgdC40LzQstC+0LsgJ0AnIgpkaWZmIC0tZ2l0IGEvcG8vdmkuZ21vIGIvcG8vdmkuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MDUzYTMKLS0tIC9kZXYvbnVsbAorKysgYi9wby92aS5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vdmkucG8gYi9wby92aS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDMyMzJjCi0tLSAvZGV2L251bGwKKysrIGIvcG8vdmkucG8KQEAgLTAsMCArMSwxMjE1IEBACisjIFZpZXRuYW1lc2UgVHJhbnNsYXRpb24gZm9yIEJpc29uLgorIyBDb3B5cmlnaHQgwqkgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGJpc29uIHBhY2thZ2UuCisjIENseXRpZSBTaWRkYWxsIDxjbHl0aWVAcml2ZXJsYW5kLm5ldC5hdT4sIDIwMDUtMjAxMC4KKyMgVHLhuqduIE5n4buNYyBRdcOibiA8dm53aWxkbWFuQGdtYWlsLmNvbT4sIDIwMTIuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBiaXNvbi0yLjYuOTBcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLWJpc29uQGdudS5vcmdcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMi0xMi0xMiAxNjowOSswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMi0xMi0wOSAwODozMSswNzAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBUcuG6p24gTmfhu41jIFF1w6JuIDx2bndpbGRtYW5AZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IFZpZXRuYW1lc2UgPHRyYW5zbGF0aW9uLXRlYW0tdmlAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiB2aVxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlRlYW0tV2Vic2l0ZTogPGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vdmkuaHRtbD5cbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTE7IHBsdXJhbD0wO1xuIgorIlgtR2VuZXJhdG9yOiBMb2NGYWN0b3J5RWRpdG9yIDEuOFxuIgorIlgtUG9lZGl0LVNvdXJjZUNoYXJzZXQ6IFVURi04XG4iCisKKyM6IHNyYy9jb21wbGFpbi5jOjEyMCBzcmMvY29tcGxhaW4uYzoxMzEgc3JjL2NvbXBsYWluLmM6MTQwIHNyYy9jb21wbGFpbi5jOjE4OAorIzogc3JjL2NvbXBsYWluLmM6MTk4Cittc2dpZCAid2FybmluZyIKK21zZ3N0ciAiY+G6o25oIGLDoW8iCisKKyM6IHNyYy9jb21wbGFpbi5jOjE1MSBzcmMvY29tcGxhaW4uYzoxNjAgc3JjL2NvbXBsYWluLmM6MTY3Cittc2dpZCAiZXJyb3IiCittc2dzdHIgImzhu5dpIgorCisjOiBzcmMvY29tcGxhaW4uYzoyMDggc3JjL2NvbXBsYWluLmM6MjE1Cittc2dpZCAiZmF0YWwgZXJyb3IiCittc2dzdHIgImzhu5dpIG5naGnDqm0gdHLhu41uZyIKKworIzogc3JjL2NvbmZsaWN0cy5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIHNoaWZ0IgorbXNnc3RyICIiCisiICAgIFh1bmcgxJHhu5l0IGdp4buvYSBxdXkgdOG6r2MgJWQgdsOgIHRo4bq7IGLDoGkgJXMgxJHGsOG7o2MgcGjDom4gZ2nhuqNpIGzDoCBk4buLY2ggKHNoaWZ0KSIKKworIzogc3JjL2NvbmZsaWN0cy5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIHJlZHVjZSIKK21zZ3N0ciAiIgorIiAgICBYdW5nIMSR4buZdCBnaeG7r2EgcXV5IHThuq9jICVkIHbDoCB0aOG6uyBiw6BpICVzIMSRxrDhu6NjIHBow6JuIGdp4bqjaSBsw6AgcsO6dCBn4buNbiAiCisiKHJlZHVjZSkuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgYW4gZXJyb3IiCittc2dzdHIgIiIKKyIgICAgWHVuZyDEkeG7mXQgZ2nhu69hIHF1eSB04bqvYyAlZCB2w6AgdGjhursgYsOgaSAlcyDEkcaw4bujYyBwaMOibiBnaeG6o2kgbMOgIG3hu5l0IGzhu5dpIChlcnJvcikuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgc2hpZnQvcmVkdWNlLCAlZCByZWR1Y2UvcmVkdWNlXG4iCittc2dzdHIgInh1bmcgxJHhu5l0OiAlZCBk4buLY2gvZ2nhuqNtLCAlZCBnaeG6o20vZ2nhuqNtXG4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCBzaGlmdC9yZWR1Y2VcbiIKK21zZ3N0ciAieHVuZyDEkeG7mXQ6ICVkIGThu4tjaC9naeG6o21cbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdHM6ICVkIHJlZHVjZS9yZWR1Y2VcbiIKK21zZ3N0ciAieHVuZyDEkeG7mXQ6ICVkIGdp4bqjbS9naeG6o21cbiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdGF0ZSAlZCAiCittc2dzdHIgIlTDrG5oIHRy4bqhbmcgJWQgIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlZXhwZWN0LXJyIGFwcGxpZXMgb25seSB0byBHTFIgcGFyc2VycyIKK21zZ3N0ciAiJSVleHBlY3QtcnIgY2jhu4kgw6FwIGThu6VuZyBjaG8gYuG7mSBwaMOibiB0w61jaCBraeG7g3UgR0xSLiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjYxNgorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCAlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3QiCittc2dpZF9wbHVyYWwgImV4cGVjdGVkICVkIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMiCittc2dzdHJbMF0gIm1vbmcgxJHhu6NpICVkIGzhuqduIHh1bmcgxJHhu5l0IGThu4tjaC9naeG6o20iCisKKyM6IHNyYy9jb25mbGljdHMuYzo2MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJWQgcmVkdWNlL3JlZHVjZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiZXhwZWN0ZWQgJWQgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMiCittc2dzdHJbMF0gIm1vbmcgxJHhu6NpICVkIGzhuqduIHh1bmcgxJHhu5l0IGdp4bqjbS9naeG6o20iCisKKyM6IHNyYy9maWxlcy5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IG9wZW4iCittc2dzdHIgIiVzOiBraMO0bmcgdGjhu4MgbeG7nyIKKworIzogc3JjL2ZpbGVzLmM6MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImlucHV0L291dHB1dCBlcnJvciIKK21zZ3N0ciAibOG7l2kgdsOgby9yYSIKKworIzogc3JjL2ZpbGVzLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjbG9zZSBmaWxlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHDs25nIHThuq1wIHRpbiIKKworIzogc3JjL2ZpbGVzLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIG92ZXJ3cml0ZSB0aGUgaW5wdXQgZmlsZSAlcyIKK21zZ3N0ciAidOG7qyBjaOG7kWkgZ2hpIMSRw6ggbMOqbiB04bqtcCB0aW4gxJHhuqd1IHbDoG8gJXMiCisKKyM6IHNyYy9maWxlcy5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdGluZyBvdXRwdXRzIHRvIGZpbGUgJXMiCittc2dzdHIgInThuq1wIHRpbiDigJwlc+KAnSBjw7Mgbmhp4buBdSBr4bq/dCB4deG6pXQgeHVuZyDEkeG7mXQgduG7m2kgbmhhdSIKKworIzogc3JjL2dldGFyZ3MuYzoyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5IGAlcyAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIgorbXNnc3RyICJIw6N5IGNo4bqheSBjw6J1IGzhu4duaCDigJwlcyAtLWhlbHDigJ0gKHRy4bujIGdpw7pwKSDEkeG7gyB4ZW0gdGjDqm0gdGjDtG5nIHRpbi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFtPUFRJT05dLi4uIEZJTEVcbiIKK21zZ3N0ciAiU+G7rSBk4bulbmc6ICVzIFtUw5lZX0NI4buMTl0uLi4gVOG6rFBfVElOXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzAyCittc2dpZCAiIgorIkdlbmVyYXRlIGEgZGV0ZXJtaW5pc3RpYyBMUiBvciBnZW5lcmFsaXplZCBMUiAoR0xSKSBwYXJzZXIgZW1wbG95aW5nXG4iCisiTEFMUigxKSwgSUVMUigxKSwgb3IgY2Fub25pY2FsIExSKDEpIHBhcnNlciB0YWJsZXMuICBJRUxSKDEpIGFuZFxuIgorImNhbm9uaWNhbCBMUigxKSBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlThuqFvIHJhIG3hu5l0IGLhu5kgcGjDom4gdMOtY2ggdOG6pXQgxJHhu4tuaCBMUiBoYXkgUkwgxJHGsOG7o2Mga2jDoWkgcXXDoXQgaG/DoSBkw7luZ1xuIgorImLhuqNuZyBwaMOibiB0w61jaCBMQUxSKDEpLCBJRUxSKDEpLCBoYXkgY2Fub25pY2FsIExSKDEpLiBWaeG7h2MgaOG7lyB0cuG7oyAgSUVMUigxKSAiCisidsOgXG4iCisiY2Fub25pY2FsIExSKDEpIGNo4buJIGzDoCB0aOG7rSBuZ2hp4buHbS5cbiIKKyJcbiIKKworIzogc3JjL2dldGFyZ3MuYzozMDkKK21zZ2lkICIiCisiTWFuZGF0b3J5IGFyZ3VtZW50cyB0byBsb25nIG9wdGlvbnMgYXJlIG1hbmRhdG9yeSBmb3Igc2hvcnQgb3B0aW9ucyB0b28uXG4iCittc2dzdHIgIiIKKyJN4buNaSDEkeG7kWkgc+G7kSBi4bqvdCBideG7mWMgcGjhuqNpIHPhu60gZOG7pW5nIHbhu5tpIHTDuXkgY2jhu41uIGTDoGkgY8WpbmcgYuG6r3QgYnXhu5ljIHbhu5tpIHTDuXkgY2jhu41uICIKKyJuZ+G6r24uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzEyCittc2dpZCAiVGhlIHNhbWUgaXMgdHJ1ZSBmb3Igb3B0aW9uYWwgYXJndW1lbnRzLlxuIgorbXNnc3RyICJDxaluZyB24bqteSB24bubaSDEkeG7kWkgc+G7kSBjw7JuIHTDuXkgY2jhu41uLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMxNgorbXNnaWQgIiIKKyJcbiIKKyJPcGVyYXRpb24gbW9kZXM6XG4iCisiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIKKyIgICAgICAtLXByaW50LWxvY2FsZWRpciAgICAgIG91dHB1dCBkaXJlY3RvcnkgY29udGFpbmluZyBsb2NhbGUtZGVwZW5kZW50ICIKKyJkYXRhXG4iCisiICAgICAgLS1wcmludC1kYXRhZGlyICAgICAgICBvdXRwdXQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgc2tlbGV0b25zIGFuZCBYU0xUXG4iCisiICAteSwgLS15YWNjICAgICAgICAgICAgICAgICBlbXVsYXRlIFBPU0lYIFlhY2NcbiIKKyIgIC1XLCAtLXdhcm5pbmdzWz1DQVRFR09SWV0gIHJlcG9ydCB0aGUgd2FybmluZ3MgZmFsbGluZyBpbiBDQVRFR09SWVxuIgorIiAgLWYsIC0tZmVhdHVyZVs9RkVBVFVSRV0gICAgYWN0aXZhdGUgbWlzY2VsbGFuZW91cyBmZWF0dXJlc1xuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiQ2jhur8gxJHhu5kgdGhhbyB0w6FjOlxuIgorIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgaGnhu4NuIHRo4buLIHRy4bujIGdpw7pwIG7DoHksIHNhdSDEkcOzIHRob8OhdFxuIgorIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgeHXhuqV0IHRow7RuZyB0aW4gcGhpw6puIGLhuqNuLCBzYXUgxJHDsyB0aG/DoXRcbiIKKyIgICAgICAtLXByaW50LWxvY2FsZWRpciAgICAgIHh14bqldCB0aMawIG3hu6VjIGNo4bupYSBk4buvIGxp4buHdSBwaOG7pSB0aHXhu5ljIHbDoG8gbWnhu4FuICIKKyLEkeG7i2EgcGjGsMahbmdcbiIKKyIgICAgICAtLXByaW50LWRhdGFkaXIgICAgICAgIHh14bqldCB0aMawIG3hu6VjIGNo4bupYSBraHVuZyBzxrDhu51uIHbDoCBYU0xUXG4iCisiICAteSwgLS15YWNjICAgICAgICAgICAgICAgICBtw7QgcGjhu49uZyBQT1NJWCBZYWNjXG4iCisiICAtVywgLS13YXJuaW5nc1s9TE/huqBJXSAgICAgIHRow7RuZyBiw6FvIGPDoWMgY+G6o25oIGLDoW8gdGh14buZYyB24buBIHBow6JuIExP4bqgSSBuw6B5XG4iCisiICAtZiwgLS1mZWF0dXJlWz1Uw41OSC1OxIJOR10gIGvDrWNoIGhv4bqhdCBjw6FjIFTDjU5ILU7Egk5HXG4iCisiXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJzZXI6XG4iCisiICAtTCwgLS1sYW5ndWFnZT1MQU5HVUFHRSAgICAgICAgICBzcGVjaWZ5IHRoZSBvdXRwdXQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VcbiIKKyIgIC1TLCAtLXNrZWxldG9uPUZJTEUgICAgICAgICAgICAgIHNwZWNpZnkgdGhlIHNrZWxldG9uIHRvIHVzZVxuIgorIiAgLXQsIC0tZGVidWcgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudCB0aGUgcGFyc2VyIGZvciBkZWJ1Z2dpbmdcbiIKKyIgICAgICAtLWxvY2F0aW9ucyAgICAgICAgICAgICAgICAgIGVuYWJsZSBsb2NhdGlvbiBzdXBwb3J0XG4iCisiICAtRCwgLS1kZWZpbmU9TkFNRVs9VkFMVUVdICAgICAgICBzaW1pbGFyIHRvICclZGVmaW5lIE5BTUUgXCJWQUxVRVwiJ1xuIgorIiAgLUYsIC0tZm9yY2UtZGVmaW5lPU5BTUVbPVZBTFVFXSAgb3ZlcnJpZGUgJyVkZWZpbmUgTkFNRSBcIlZBTFVFXCInXG4iCisiICAtcCwgLS1uYW1lLXByZWZpeD1QUkVGSVggICAgICAgICBwcmVwZW5kIFBSRUZJWCB0byB0aGUgZXh0ZXJuYWwgc3ltYm9sc1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZCBieSAnLURhcGkucHJlZml4PVBSRUZJWCdcbiIKKyIgIC1sLCAtLW5vLWxpbmVzICAgICAgICAgICAgICAgICAgIGRvbid0IGdlbmVyYXRlICcjbGluZScgZGlyZWN0aXZlc1xuIgorIiAgLWssIC0tdG9rZW4tdGFibGUgICAgICAgICAgICAgICAgaW5jbHVkZSBhIHRhYmxlIG9mIHRva2VuIG5hbWVzXG4iCittc2dzdHIgIiIKKyJC4buZIHBow6JuIHTDrWNoIGPDuiBwaMOhcDpcbiIKKyIgIC1MLCAtLWxhbmd1YWdlPU5Hw5ROX05H4buuICAgICAgICAgIGNo4buJIMSR4buLbmggbmfDtG4gbmfhu68gbOG6rXAgdHLDrG5oIGvhur90IHh14bqldFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKMSRw6J5IGzDoCBt4buZdCB0w61uaCBuxINuZyB24bqrbiBjw7JuIHRo4buxYyAiCisibmdoaeG7h20pXG4iCisiICAtUywgLS1za2VsZXRvbj1U4bqsUF9USU4gICAgICAgICAgIGNo4buJIMSR4buLbmgga2h1bmcgc8aw4budbiBj4bqnbiBkw7luZ1xuIgorIiAgLXQsIC0tZGVidWcgICAgICAgICAgICAgICAgICAgICAgxJHhurd0IHBow6JuIHTDrWNoIMSR4buDIGfhu6EgbOG7l2lcbiIKKyIgICAgICAtLWxvY2F0aW9ucyAgICAgICAgICAgICAgICAgIGNobyBwaMOpcCBo4buXIHRy4bujIHbhu4EgduG7iyB0csOtXG4iCisiICAtRCwgLS1kZWZpbmU9TkFNRVs9VkFMVUVdICAgICAgICB0xrDGoW5nIHThu7EgbmjGsCBgJWRlZmluZSBOQU1FIOKAnFZBTFVF4oCdJ1xuIgorIiAgLUYsIC0tZm9yY2UtZGVmaW5lPU5BTUVbPVZBTFVFXSAgxJHDqCBsw6puIGAlZGVmaW5lIE5BTUUg4oCcVkFMVUXigJ0nXG4iCisiICAtcCwgLS1uYW1lLXByZWZpeD1USeG7gE5fVOG7kCAgICAgICAgxJHhurd0IHRp4buBbiB04buRIG7DoG8gdsOgbyB0csaw4bubYyBrw70gaGnhu4d1IG5nb8OgaVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGjhuqNuIMSR4buRaSBi4bufaSAnLURhcGkucHJlZml4PVBSRUZJWCdcbiIKKyIgIC1sLCAtLW5vLWxpbmVzICAgICAgICAgICAgICAgICAgIGtow7RuZyB04bqhbyBjaOG7iSB0aOG7iyBraeG7g3Ug4oCcI2xpbmXigJ1cbiIKKyIgIC1rLCAtLXRva2VuLXRhYmxlICAgICAgICAgICAgICAgIGJhbyBn4buTbSBi4bqjbmcgY8OhYyB0w6puIHRo4bq7IGLDoGlcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNDYKK21zZ2lkICIiCisiT3V0cHV0OlxuIgorIiAgICAgIC0tZGVmaW5lc1s9RklMRV0gICAgICAgYWxzbyBwcm9kdWNlIGEgaGVhZGVyIGZpbGVcbiIKKyIgIC1kICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2V3aXNlIGJ1dCBjYW5ub3Qgc3BlY2lmeSBGSUxFIChmb3IgUE9TSVggIgorIllhY2MpXG4iCisiICAtciwgLS1yZXBvcnQ9VEhJTkdTICAgICAgICBhbHNvIHByb2R1Y2UgZGV0YWlscyBvbiB0aGUgYXV0b21hdG9uXG4iCisiICAgICAgLS1yZXBvcnQtZmlsZT1GSUxFICAgICB3cml0ZSByZXBvcnQgdG8gRklMRVxuIgorIiAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgc2FtZSBhcyBgLS1yZXBvcnQ9c3RhdGUnXG4iCisiICAtYiwgLS1maWxlLXByZWZpeD1QUkVGSVggICBzcGVjaWZ5IGEgUFJFRklYIGZvciBvdXRwdXQgZmlsZXNcbiIKKyIgIC1vLCAtLW91dHB1dD1GSUxFICAgICAgICAgIGxlYXZlIG91dHB1dCB0byBGSUxFXG4iCisiICAtZywgLS1ncmFwaFs9RklMRV0gICAgICAgICBhbHNvIG91dHB1dCBhIGdyYXBoIG9mIHRoZSBhdXRvbWF0b25cbiIKKyIgIC14LCAtLXhtbFs9RklMRV0gICAgICAgICAgIGFsc28gb3V0cHV0IGFuIFhNTCByZXBvcnQgb2YgdGhlIGF1dG9tYXRvblxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoZSBYTUwgc2NoZW1hIGlzIGV4cGVyaW1lbnRhbClcbiIKK21zZ3N0ciAiIgorIkvhur90IHh14bqldDpcbiIKKyIgICAgICAtLWRlZmluZXNbPVThuqxQX1RJTl0gICAgY8WpbmcgdOG6oW8gbeG7mXQgdOG6rXAgdGluIHBo4bqnbiDEkeG6p3VcbiIKKyIgIC1kICAgICAgICAgICAgICAgICAgICBjxaluZyB24bqteSBuaMawbmcga2jDtG5nIHRo4buDIMSR4bq3dCBU4bqsUF9USU4gKGNobyBQT1NJWCAiCisiWWFjYylcbiIKKyIgIC1yLCAtLXJlcG9ydD1Dw4FJICAgICAgICAgICBjxaluZyBoaeG7h24gY2hpIHRp4bq/dCB24buBIGjDoG0gdOG7sSDEkeG7mW5nXG4iCisiICAgICAgLS1yZXBvcnQtZmlsZT1U4bqsUF9USU4gIGdoaSBiw6FvIGPDoW8gdsOgbyB04bqtcCB0aW4gbsOgeVxuIgorIiAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgdMawxqFuZyDEkcawxqFuZyB24bubaSBgLS1yZXBvcnQ9c3RhdGUnXG4iCisiICAtYiwgLS1maWxlLXByZWZpeD1USeG7gE5fVOG7kCAgeMOhYyDEkeG7i25oIG3hu5l0IHRp4buBbiB04buRIGNobyBjw6FjIHThuq1wIHRpbiBr4bq/dCB4deG6pXRcbiIKKyIgIC1vLCAtLW91dHB1dD1U4bqsUF9USU4gICAgICAgeHXhuqV0IHbDoG8gdOG6rXAgdGluIG7DoHlcbiIKKyIgIC1nLCAtLWdyYXBoWz1U4bqsUF9USU5dICAgICAgY8WpbmcgeHXhuqV0IG3hu5l0IMSR4buTIHRo4buLIHbhu4EgaMOgbSB04buxIMSR4buZbmdcbiIKKyIgIC14LCAtLXhtbFs9VOG6rFBfVElOXSAgICAgICAgY8WpbmcgeHXhuqV0IG3hu5l0IGLDoW8gY8OhbyBYTUwgduG7gSBow6BtIHThu7EgxJHhu5luZ1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnaeG6o24gxJHhu5MgWE1MIHbhuqtuIGPDsm4gbMOgIHRo4buxYyBuZ2hp4buHbSlcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNjEKK21zZ2lkICIiCisiV2FybmluZyBjYXRlZ29yaWVzIGluY2x1ZGU6XG4iCisiICBgbWlkcnVsZS12YWx1ZXMnICB1bnNldCBvciB1bnVzZWQgbWlkcnVsZSB2YWx1ZXNcbiIKKyIgIGB5YWNjJyAgICAgICAgICAgIGluY29tcGF0aWJpbGl0aWVzIHdpdGggUE9TSVggWWFjY1xuIgorIiAgYGNvbmZsaWN0cy1zcicgICAgUy9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGNvbmZsaWN0cy1ycicgICAgUi9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGRlcHJlY2F0ZWQnICAgICAgb2Jzb2xldGUgY29uc3RydWN0c1xuIgorIiAgYG90aGVyJyAgICAgICAgICAgYWxsIG90aGVyIHdhcm5pbmdzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgYWxsJyAgICAgICAgICAgICBhbGwgdGhlIHdhcm5pbmdzXG4iCisiICBgbm8tQ0FURUdPUlknICAgICB0dXJuIG9mZiB3YXJuaW5ncyBpbiBDQVRFR09SWVxuIgorIiAgYG5vbmUnICAgICAgICAgICAgdHVybiBvZmYgYWxsIHRoZSB3YXJuaW5nc1xuIgorIiAgYGVycm9yJyAgICAgICAgICAgdHJlYXQgd2FybmluZ3MgYXMgZXJyb3JzXG4iCittc2dzdHIgIiIKKyJDw6FjIGxv4bqhaSBj4bqjbmggYsOhbyBiYW8gZ+G7k206XG4iCisiIOKAoiBtaWRydWxlLXZhbHVlcyAgIGdpw6EgdHLhu4sg4bufIGdp4buvYSBxdXkgdOG6r2MgbcOgIGNoxrBhIGTDuW5nIGhheSDEkeG6t3RcbiIKKyIg4oCiIHlhY2MgICAgICAgICAgICAgc+G7sSBraMO0bmcgdMawxqFuZyB0aMOtY2ggduG7m2kgUE9TSVggWUFDQ1xuIgorIiDigKIgYGNvbmZsaWN0cy1zcicgICB4dW5nIMSR4buZdCBTL1IgKGLhuq10IHRoZW8gbeG6t2MgxJHhu4tuaClcbiIKKyIg4oCiIGBjb25mbGljdHMtcnInICAgeHVuZyDEkeG7mXQgUi9SIChi4bqtdCB0aGVvIG3hurdjIMSR4buLbmgpXG4iCisiIOKAoiBgZGVwcmVjYXRlZCcgICAgIGPDoWMgY2jhu4kgbOG7h25oIMSRw6MgY8WpXG4iCisiIOKAoiBgb3RoZXInICAgICAgICAgIG3hu41pIGPhuqNuaCBiw6FvIGtow6FjIChi4bqtdCB0aGVvIG3hurdjIMSR4buLbmgpXG4iCisiIOKAoiBhbGwgICAgICAgICAgICAgIHThuqV0IGPhuqMgY8OhYyBj4bqjbmggYsOhb1xuIgorIiDigKIgbm8tTE/huqBJICAgICAgICAgIHThuq90IGPhuqNuaCBiw6FvIHbhu5tpIExP4bqgSVxuIgorIiDigKIgbm9uZSAgICAgICAgICAgICB04bqvdCBt4buNaSBj4bqjbmggYsOhb1xuIgorIiDigKIgZXJyb3IgICAgICAgICAgICB44butIGzDvSBj4bqjbmggYsOhbyBkxrDhu5tpIGThuqFuZyBs4buXaVxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM3NgorbXNnaWQgIiIKKyJUSElOR1MgaXMgYSBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCB3b3JkcyB0aGF0IGNhbiBpbmNsdWRlOlxuIgorIiAgYHN0YXRlJyAgICAgICAgZGVzY3JpYmUgdGhlIHN0YXRlc1xuIgorIiAgYGl0ZW1zZXQnICAgICAgY29tcGxldGUgdGhlIGNvcmUgaXRlbSBzZXRzIHdpdGggdGhlaXIgY2xvc3VyZVxuIgorIiAgYGxvb2thaGVhZCcgICAgZXhwbGljaXRseSBhc3NvY2lhdGUgbG9va2FoZWFkIHRva2VucyB0byBpdGVtc1xuIgorIiAgYHNvbHZlZCcgICAgICAgZGVzY3JpYmUgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cyBzb2x2aW5nXG4iCisiICBgYWxsJyAgICAgICAgICBpbmNsdWRlIGFsbCB0aGUgYWJvdmUgaW5mb3JtYXRpb25cbiIKKyIgIGBub25lJyAgICAgICAgIGRpc2FibGUgdGhlIHJlcG9ydFxuIgorbXNnc3RyICIiCisiQ8OBSSBsw6AgZGFuaCBzw6FjaCBuaOG7r25nIHThu6sgxJHhu4tuaCBnaeG7m2kgYuG6sW5nIGThuqV1IHBo4bqpeSBjw7MgdGjhu4MgYmFvIGfhu5NtOlxuIgorIiDigKIgc3RhdGUgICAgICAgICBkaeG7hW4gdOG6oyBjw6FjIHTDrG5oIHRy4bqhbmdcbiIKKyIg4oCiIGl0ZW1zZXQgICAgICAgxJFp4buBbiBu4buRdCBt4buXaSB04bqtcCBo4bujcCBt4bulYyBsw7VpIHbhu5tpIGvhur90IHRow7pjIG7Ds1xuIgorIiDigKIgbG9vay1haGVhZCAgICBsacOqbiBxdWFuIGThu6l0IGtob8OhdCBt4buXaSB0aOG6uyBiw6BpIG5ow6xuIHRyxrDhu5tjIMSR4bq/biBt4bulY1xuIgorIiDigKIgc29sdmVkICAgICAgICBkaeG7hW4gdOG6oyB0aeG6v24gdHLDrG5oIGdp4bqjaSBz4buxIHh1bmcgxJHhu5l0IGtp4buDdSBk4budaS9naeG6o21cbiIKKyIg4oCiIGFsbCAgICAgICAgICAgYmFvIGfhu5NtIHThuqV0IGPhuqMgdGjDtG5nIHRpbiB0csOqblxuIgorIiDigKIgbm9uZSAgICAgICAgICB04bqvdCBiw6FvIGPDoW9cbiIKKworIzogc3JjL2dldGFyZ3MuYzozODcKK21zZ2lkICIiCisiRkVBVFVSRSBpcyBhIGxpc3Qgb2YgY29tbWEgc2VwYXJhdGVkIHdvcmRzIHRoYXQgY2FuIGluY2x1ZGU6XG4iCisiICBgY2FyZXQnICAgICAgICBzaG93IGVycm9ycyB3aXRoIGNhcmV0c1xuIgorIiAgYGFsbCcgICAgICAgICAgYWxsIG9mIHRoZSBhYm92ZVxuIgorIiAgYG5vbmUnICAgICAgICAgZGlzYWJsZSBhbGwgb2YgdGhlIGFib3ZlXG4iCisiICAiCittc2dzdHIgIiIKKyJUw41OSC1OxIJORyBsw6AgbeG7mXQgZGFuaCBzw6FjaCBjw6FjIHThu6sgY8OhY2ggbmhhdSBi4bqxbmcgZOG6pXUgcGjhuql5LCBiYW8gZ+G7k206XG4iCisiIOKAoiBgY2FyZXQnICAgICAgIGhp4buDbiB0aOG7iyBs4buXaSBi4bqxbmcgZOG6pXUgXlxuIgorIiDigKIgYGFsbCcgICAgICAgICB04bqldCBj4bqjIGPDoWMgdGjhu6kg4bufIHRyw6puXG4iCisiIOKAoiBgbm9uZScgICAgICAgIHThuq90IHThuqV0IGPhuqMgY8OhYyB0aOG7qSDhu58gdHLDqm5cbiIKKyIgICIKKworIzogc3JjL2dldGFyZ3MuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKK21zZ3N0ciAiSMOjeSB0aMO0bmcgYsOhbyBs4buXaSBjaG8gPCVzPi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaG9tZSBwYWdlOiA8JXM+LlxuIgorbXNnc3RyICJUcmFuZyBjaOG7pyAlczogPCVzPi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzozOTcKK21zZ2lkICJHZW5lcmFsIGhlbHAgdXNpbmcgR05VIHNvZnR3YXJlOiA8aHR0cDovL3d3dy5nbnUub3JnL2dldGhlbHAvPi5cbiIKK21zZ3N0ciAiSMaw4bubbmcgZOG6q24gY2h1bmcgduG7gSBwaOG6p24gbeG7gW0gR05VOiA8aHR0cDovL3d3dy5nbnUub3JnL2dldGhlbHAvPi5cbiIKKworIy4gVFJBTlNMQVRPUlM6IFJlcGxhY2UgTEFOR19DT0RFIGluIHRoaXMgVVJMIHdpdGggeW91ciBsYW5ndWFnZQorIy4gY29kZSA8aHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS9MQU5HX0NPREUuaHRtbD4gdG8KKyMuIGZvcm0gb25lIG9mIHRoZSBVUkxzIGF0IGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vLgorIy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRoZSBlbnRpcmUgVVJMIHdpdGggeW91ciB0cmFuc2xhdGlvbiB0ZWFtJ3MKKyMuIGVtYWlsIGFkZHJlc3MuCisjOiBzcmMvZ2V0YXJncy5jOjQxMAorbXNnaWQgIlJlcG9ydCB0cmFuc2xhdGlvbiBidWdzIHRvIDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtLz4uXG4iCittc2dzdHIgIiIKKyJIw6N5IHRow7RuZyBiw6FvIGzhu5dpIGThu4tjaCBjaG8gPGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vdmkuaHRtbD4uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDEyCittc2dpZCAiRm9yIGNvbXBsZXRlIGRvY3VtZW50YXRpb24sIHJ1bjogaW5mbyBiaXNvbi5cbiIKK21zZ3N0ciAixJDhu4MgxJHhu41jIHTDoGkgbGnhu4d1IGThuqFuZyDEkeG6p3kgxJHhu6csIGNo4bqheSBs4buHbmg6IGluZm8gYmlzb24uXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImJpc29uIChHTlUgQmlzb24pICVzIgorbXNnc3RyICJiaXNvbiAoR05VIEJpc29uKSAlcyIKKworIzogc3JjL2dldGFyZ3MuYzo0MzAKK21zZ2lkICJXcml0dGVuIGJ5IFJvYmVydCBDb3JiZXR0IGFuZCBSaWNoYXJkIFN0YWxsbWFuLlxuIgorbXNnc3RyICJUw6FjIGdp4bqjOiBSb2JlcnQgQ29yYmV0dCB2w6AgUmljaGFyZCBTdGFsbG1hbi5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29weXJpZ2h0IChDKSAlZCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKK21zZ3N0ciAiQuG6o24gcXV54buBbiDCqSAlZCBU4buVIGNo4bupYyBQaOG6p24gbeG7gW0gVOG7sSBkby5cbiIKKworIzogc3JjL2dldGFyZ3MuYzo0MzcKK21zZ2lkICIiCisiVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk9cbiIKKyJ3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cbiIKK21zZ3N0ciAiIgorIkNoxrDGoW5nIHRyw6xuaCBuw6B5IGzDoCBwaOG6p24gbeG7gW0gdOG7sSBkbzsgeGVtIG3DoyBuZ3Xhu5NuIMSR4buDIHTDrG0gxJFp4buBdSBraeG7h24gc2FvIGNow6lwLlxuIgorIktIw5RORyBDw5MgQuG6ok8gSMOATkggR8OMIEPhuqIsIFRI4bqsTSBDSMONIEtIw5RORyBDw5MgQuG6ok8gxJDhuqJNIMSQxq/hu6JDIE5H4bukIMOdXG4iCisiS0jhuqIgTsSCTkcgQsOBTiBIQVkgS0jhuqIgTsSCTkcgTMOATSDEkMav4buiQyBWSeG7hkMgROG7qFQgS0hPw4FULlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSBza2VsZXRvbiBkZWNsYXJhdGlvbnMgYXJlIGludmFsaWQiCittc2dzdHIgImNo4buJIGNobyBwaMOpcCBt4buZdCBraGFpIGLDoW8ga2h1bmcgc8aw4budbiIKKworIzogc3JjL2dldGFyZ3MuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgbGFuZ3VhZ2UiCittc2dzdHIgIiVzOiBuZ8O0biBuZ+G7ryBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogc3JjL2dldGFyZ3MuYzo0NzkKK21zZ2lkICJtdWx0aXBsZSBsYW5ndWFnZSBkZWNsYXJhdGlvbnMgYXJlIGludmFsaWQiCittc2dzdHIgImNo4buJIGNobyBwaMOpcCBt4buZdCBraGFpIGLDoW8gbmfDtG4gbmfhu68iCisKKyM6IHNyYy9nZXRhcmdzLmM6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBtaXNzaW5nIG9wZXJhbmQiCittc2dzdHIgIiVzOiB0aGnhur91IHRvw6FuIGjhuqFuZyIKKworIzogc3JjL2dldGFyZ3MuYzo3NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0cmEgb3BlcmFuZCAlcyIKK21zZ3N0ciAidG/DoW4gaOG6oW5nIGLhu5UgeHVuZyAlcyIKKworIzogc3JjL2dyYW0uYzoxMTIKK21zZ2lkICJlbXB0eSIKK21zZ3N0ciAicuG7l25nIgorCisjOiBzcmMvZ3JhbS5jOjIwMQorbXNnaWQgIkdyYW1tYXIiCittc2dzdHIgIk5n4buvIHBow6FwIgorCisjOiBzcmMvZ3JhcGh2aXouYzo0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiLy8gR2VuZXJhdGVkIGJ5ICVzLlxuIgorIi8vIFJlcG9ydCBidWdzIHRvIDwlcz4uXG4iCisiLy8gSG9tZSBwYWdlOiA8JXM+LlxuIgorIlxuIgorbXNnc3RyICIiCisiLy8gVOG6oW8gcmEgYuG7n2kgJXMuXG4iCisiLy8gQsOhbyBjw6FvIGzhu5dpIHThu5tpIDwlcz4uXG4iCisiLy8gVHJhbmcgY2jhu6c6IDwlcz4uXG4iCisiXG4iCisKKyM6IHNyYy9sb2NhdGlvbi5jOjkzIHNyYy9zY2FuLWdyYW0ubDo4NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSBudW1iZXIgb3ZlcmZsb3ciCittc2dzdHIgInRyw6BuIHPhu5EgdGjhu6kgdOG7sSBkw7JuZyIKKworIzogc3JjL2xvY2F0aW9uLmM6OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29sdW1uIG51bWJlciBvdmVyZmxvdyIKK21zZ3N0ciAidHLDoG4gc+G7kSB0aOG7qSB04buxIGPhu5l0IgorCisjOiBzcmMvbWFpbi5jOjE0NgorbXNnaWQgInJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cyIKK21zZ3N0ciAicXV5IHThuq9jIHbDtCDDrWNoIHRyb25nIGLhu5kgcGjDom4gdMOtY2ggYuG7n2kgdsOsIGPDoWMgeHVuZyDEkeG7mXQiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlZGVmaW5lIHZhcmlhYmxlICVzIHJlZGVmaW5lZCIKK21zZ3N0ciAiJSViaeG6v24gxJHhu4tuaCBuZ2jEqWEgJXMgYuG7iyDEkeG7i25oIG5naMSpYSBs4bqhaSIKKworIzogc3JjL211c2NsZS10YWIuYzo0NTMKK21zZ2lkICJwcmV2aW91cyBkZWZpbml0aW9uIgorbXNnc3RyICJs4budaSDEkeG7i25oIG5naMSpYSB0csaw4bubYyIKKworIzogc3JjL211c2NsZS10YWIuYzo0OTAgc3JjL211c2NsZS10YWIuYzo1MDQgc3JjL211c2NsZS10YWIuYzo1NTYKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgJXMiCittc2dzdHIgIiVzOiBjaMawYSDEkeG7i25oIG5naMSpYSAlJWRlZmluZSBiaeG6v24gJXMiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICUlZGVmaW5lIEJvb2xlYW4gdmFyaWFibGUgJXMiCittc2dzdHIgImfhurdwIGdpw6EgdHLhu4sgc2FpIMSR4buRaSB24bubaSBiaeG6v24gQnVuICUlZGVmaW5lICVzIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjYwOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlJWRlZmluZSB2YXJpYWJsZSAlczogJXMiCittc2dzdHIgImfhurdwIGdpw6EgdHLhu4sgc2FpIMSR4buRaSB24bubaSBiaeG6v24gJSVkZWZpbmUgJXM6ICVzIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjYxMworIywgYy1mb3JtYXQKK21zZ2lkICJhY2NlcHRlZCB2YWx1ZTogJXMiCittc2dzdHIgImdpw6EgdHLhu4sga2jDtG5nIMSRxrDhu6NjIGNo4bqlcCBuaOG6rW46ICVzIgorCisjOiBzcmMvcGFyc2UtZ3JhbS55Ojc0NworIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGlkZW50aWZpZXIgaW4gcGFyYW1ldGVyIGRlY2xhcmF0aW9uIgorbXNnc3RyICJ0aGnhur91IGThuqV1IG5o4bqtbiBkaeG7h24gdHJvbmcga2hhaSBiw6FvIHRoYW0gc+G7kSIKKworIzogc3JjL3ByaW50LmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIHR5cGUgJWQgaXMgJXNcbiIKK21zZ3N0ciAiIGtp4buDdSAlZCBsw6AgJXNcbiIKKworIzogc3JjL3ByaW50LmM6MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgInNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgJWRcbiIKK21zZ3N0ciAiZOG7nWksIHbDoCBjaHV54buDbiBzYW5nIHRy4bqhbmcgdGjDoWkgJWRcbiIKKworIzogc3JjL3ByaW50LmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImdvIHRvIHN0YXRlICVkXG4iCittc2dzdHIgImNodXnhu4NuIHNhbmcgdMOsbmggdHLhuqFuZyAlZFxuIgorCisjOiBzcmMvcHJpbnQuYzoyMDMKK21zZ2lkICJlcnJvciAobm9uYXNzb2NpYXRpdmUpXG4iCittc2dzdHIgImzhu5dpIChraMO0bmcga+G6v3QgaOG7o3ApXG4iCisKKyM6IHNyYy9wcmludC5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWR1Y2UgdXNpbmcgcnVsZSAlZCAoJXMpIgorbXNnc3RyICJyw7p0IGfhu41uIGTDuW5nIHF1eSB04bqvYyAlZCAoJXMpIgorCisjOiBzcmMvcHJpbnQuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWNjZXB0IgorbXNnc3RyICJjaOG6pXAgbmjhuq1uIgorCisjOiBzcmMvcHJpbnQuYzoyNjQgc3JjL3ByaW50LmM6MzM4Cittc2dpZCAiJGRlZmF1bHQiCittc2dzdHIgIiRkZWZhdWx0IgorCisjOiBzcmMvcHJpbnQuYzozNzMgc3JjL3ByaW50X2dyYXBoLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhdGUgJWQiCittc2dzdHIgIlRy4bqhbmcgdGjDoWkgJWQgIgorCisjOiBzcmMvcHJpbnQuYzo0MDkKK21zZ2lkICJUZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIiCittc2dzdHIgIsSQ4buTIGvhur90IHRow7pjLCB24bubaSBxdXkgdOG6r2MgbsahaSBtw6AgY8OzIgorCisjOiBzcmMvcHJpbnQuYzo0MzYKK21zZ2lkICJOb250ZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIiCittc2dzdHIgIsSQ4buTIGtow7RuZyBr4bq/dCB0aMO6YywgduG7m2kgcXV5IHThuq9jIG7GoWkgbcOgIGPDsyIKKworIzogc3JjL3ByaW50LmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiBsZWZ0OiIKK21zZ3N0ciAiIGLDqm4gdHLDoWk6IgorCisjOiBzcmMvcHJpbnQuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uIHJpZ2h0OiIKK21zZ3N0ciAiIGLDqm4gcGjhuqNpOiIKKworIzogc3JjL3ByaW50LmM6NTEwCittc2dpZCAiUnVsZXMgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cyIKK21zZ3N0ciAiUXV5IHThuq9jIHbDtCDDrWNoIHRyb25nIGPGoSBjaOG6vyBwaMOibiB0w61jaCBkbyB4dW5nIMSR4buZdCIKKworIzogc3JjL3JlYWRlci5jOjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlICVzIGRlY2xhcmF0aW9ucyIKK21zZ3N0ciAibmhp4buBdSBraGFpIGLDoW8gJXMiCisKKyM6IHNyYy9yZWFkZXIuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVzdWx0IHR5cGUgY2xhc2ggb24gbWVyZ2UgZnVuY3Rpb24gJXM6IDwlcz4gIT0gPCVzPiIKK21zZ3N0ciAia+G6v3QgcXXhuqMgbcOidSB0aHXhuqtuIGtp4buDdSBraGkgaOG7o3AgdsOgbyBow6BtICVzOiA8JXM+ICE9IDwlcz4iCisKKyM6IHNyYy9yZWFkZXIuYzoxMzkgc3JjL3N5bXRhYi5jOjE1NiBzcmMvc3ltdGFiLmM6MTY2IHNyYy9zeW10YWIuYzo5MzgKKyM6IHNyYy9zeW10YWIuYzo5NTMgc3JjL3N5bXRhYi5jOjk2OCBzcmMvc3ltdGFiLmM6OTgzCittc2dpZCAicHJldmlvdXMgZGVjbGFyYXRpb24iCittc2dzdHIgImtoYWkgYsOhbyB0csaw4bubYyIKKworIzogc3JjL3JlYWRlci5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGVkIHN5bWJvbCBuYW1lIGZvciAlcyBpZ25vcmVkIgorbXNnc3RyICJ0w6puIGvDvSBoaeG7h3UgYuG7iyB0csO5bmcgbOG6r3AgY2hvICVzIGLhu4sgYuG7jyBxdWEiCisKKyM6IHNyYy9yZWFkZXIuYzoyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVsZSBnaXZlbiBmb3IgJXMsIHdoaWNoIGlzIGEgdG9rZW4iCittc2dzdHIgIsSRxrBhIHJhIHF1eSB04bqvYyBjaG8gJXMsIG3DoCBsw6AgdGjhursgYsOgaSIKKworIzogc3JjL3JlYWRlci5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ0eXBlIGNsYXNoIG9uIGRlZmF1bHQgYWN0aW9uOiA8JXM+ICE9IDwlcz4iCittc2dzdHIgImtp4buDdSB4dW5nIMSR4buZdCDhu58gaMOgbmggxJHhu5luZyBt4bq3YyDEkeG7i25oOiA8JXM+ICE9IDwlcz4iCisKKyM6IHNyYy9yZWFkZXIuYzozMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgcnVsZSBmb3IgdHlwZWQgbm9udGVybWluYWwsIGFuZCBubyBhY3Rpb24iCittc2dzdHIgInF1eSB04bqvYyBy4buXbmcgY2hvIMSR4buTIGtow7RuZyBr4bq/dCB0aMO6YyBjw7Mga2nhu4N1LCBjxaluZyBraMO0bmcgY8OzIGjDoG5oIMSR4buZbmciCisKKyM6IHNyYy9yZWFkZXIuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW51c2VkIHZhbHVlOiAkJWQiCittc2dzdHIgImdpw6EgdHLhu4sgY2jGsGEgZMO5bmc6ICQlZCIKKworIzogc3JjL3JlYWRlci5jOjMzMAorbXNnaWQgInVuc2V0IHZhbHVlOiAkJCIKK21zZ3N0ciAiZ2nDoSB0cuG7iyBjaMawYSDEkeG6t3Q6ICQkIgorCisjOiBzcmMvcmVhZGVyLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgInRva2VuIGZvciAlJXByZWMgaXMgbm90IGRlZmluZWQ6ICVzIgorbXNnc3RyICJjaMawYSB4w6FjIMSR4buLbmggdGjhursgYsOgaSBjaG8gJSVwcmVjOiAlcyIKKworIzogc3JjL3JlYWRlci5jOjQzMSBzcmMvcmVhZGVyLmM6NDQ1IHNyYy9yZWFkZXIuYzo0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSBvbmUgJXMgYWxsb3dlZCBwZXIgcnVsZSIKK21zZ3N0ciAiY2jhu4kgY2hvIHBow6lwIG3hu5l0ICVzIGNobyBt4buXaSBxdXkgdOG6r2MiCisKKyM6IHNyYy9yZWFkZXIuYzo0NDEgc3JjL3JlYWRlci5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhZmZlY3RzIG9ubHkgR0xSIHBhcnNlcnMiCittc2dzdHIgIiVzIGNo4buJIOG6o25oIGjGsOG7n25nIMSR4bq/biBjxqEgY2jhur8gcGjDom4gdMOtY2gga2nhu4N1IEdMUiIKKworIzogc3JjL3JlYWRlci5jOjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBtdXN0IGJlIGZvbGxvd2VkIGJ5IHBvc2l0aXZlIG51bWJlciIKK21zZ3N0ciAiJXMgcGjhuqNpIGPDsyBjb24gc+G7kSBkxrDGoW5nIHRoZW8gc2F1IgorCisjOiBzcmMvcmVhZGVyLmM6NTU0CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bGUgaXMgdG9vIGxvbmciCittc2dzdHIgInF1eSB04bqvYyBxdcOhIGTDoGkiCisKKyM6IHNyYy9yZWFkZXIuYzo2NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcnVsZXMgaW4gdGhlIGlucHV0IGdyYW1tYXIiCittc2dzdHIgImtow7RuZyBjw7MgcXV5IHThuq9jIHRyb25nIG5n4buvIHBow6FwIG5o4bqtcCB2w6BvIgorCisjOiBzcmMvcmVkdWNlLmM6MjQxCittc2dpZCAicnVsZSB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgInF1eSB04bqvYyB2w7Qgw61jaCB0cm9uZyBuZ+G7ryBwaMOhcCIKKworIzogc3JjL3JlZHVjZS5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6ICVzIgorbXNnc3RyICLEkeG7kyBraMO0bmcga+G6v3QgdGjDumMgdsO0IMOtY2ggdHJvbmcgbmfhu68gcGjDoXA6ICVzIgorCisjOiBzcmMvcmVkdWNlLmM6MzUwCittc2dpZCAiTm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAixJDhu5Mga2jDtG5nIGvhur90IHRow7pjIHbDtCDDrWNoIHRyb25nIG5n4buvIHBow6FwIgorCisjOiBzcmMvcmVkdWNlLmM6MzYzCittc2dpZCAiVGVybWluYWxzIHVudXNlZCBpbiBncmFtbWFyIgorbXNnc3RyICLEkOG7kyBr4bq/dCB0aMO6YyBjaMawYSBkw7luZyB0cm9uZyBuZ+G7ryBwaMOhcCIKKworIzogc3JjL3JlZHVjZS5jOjM3MgorbXNnaWQgIlJ1bGVzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAiUXV5IHThuq9jIHbDtCDDrWNoIHRyb25nIG5n4buvIHBow6FwIgorCisjOiBzcmMvcmVkdWNlLmM6Mzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ2lkX3BsdXJhbCAiJWQgbm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0clswXSAiJWQgxJHhu5Mga2jDtG5nIGvhur90IHRow7pjIHbDtCDDrWNoIHRyb25nIG5n4buvIHBow6FwIgorCisjOiBzcmMvcmVkdWNlLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnaWRfcGx1cmFsICIlZCBydWxlcyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHJbMF0gIiVkIHF1eSB04bqvYyB2w7Qgw61jaCB0cm9uZyBuZ+G7ryBwaMOhcCIKKworIzogc3JjL3JlZHVjZS5jOjQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydCBzeW1ib2wgJXMgZG9lcyBub3QgZGVyaXZlIGFueSBzZW50ZW5jZSIKK21zZ3N0ciAia8O9IGhp4buHdSBi4bqvdCDEkeG6p3UgJXMga2jDtG5nIG5o4bqtbiDEkcaw4bujYyBjw6J1IgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmF5ICclcyciCittc2dzdHIgImvDvSBoaeG7h3UgJyVzJyBs4bqhYyIKKworIzogc3JjL3NjYW4tY29kZS5sOjIyOQorbXNnaWQgImEgJzsnIG1pZ2h0IGJlIG5lZWRlZCBhdCB0aGUgZW5kIG9mIGFjdGlvbiBjb2RlIgorbXNnc3RyICJt4buZdCBk4bqldSAnOycgY8OzIGzhur0gbMOgIGPhuqduIHRoaeG6v3QgdOG6oWkgY3Xhu5FpIGPhu6dhIGPDonUgbOG7h25oIGjDoG5oIMSR4buZbmciCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyMzIKK21zZ2lkICJmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24gd2lsbCBub3QgYWRkIHRoZSAnOyciCittc2dzdHIgInBoacOqbiBi4bqjbiB0aeG6v3AgdGhlbyBj4bunYSBCaXNvbiBz4bq9IGtow7RuZyB0aMOqbSAnOyciCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNlIG9mIFlZRkFJTCwgd2hpY2ggaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIgorbXNnc3RyICJz4butIGThu6VuZyBZWUZBSUwsIHZp4buHYyBuw6B5IGtow7RuZyDEkcaw4bujYyB0w6FuIHRow6BuaCB2w6Agc+G6vSBi4buLIGfhu6EgYuG7jyIKKworIzogc3JjL3NjYW4tY29kZS5sOjQzMSBzcmMvc2Nhbi1jb2RlLmw6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVycyB0bzogJWMlcyBhdCAlcyIKK21zZ3N0ciAidGhhbSBjaGnhur91IMSR4bq/bjogJWMlcyB04bqhaSAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NzaWJseSBtZWFudDogJWMiCittc2dzdHIgImPDsyBs4bq9IGPDsyDDvSBsw6A6ICVjIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgaGlkaW5nICVjIgorbXNnc3RyICIsIOG6qW4gJWMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGF0ICVzIgorbXNnc3RyICIg4bufICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiwgY2Fubm90IGJlIGFjY2Vzc2VkIGZyb20gbWlkLXJ1bGUgYWN0aW9uIGF0ICQlZCIKK21zZ3N0ciAiLCBraMO0bmcgdGjhu4MgdHJ1eSBj4bqtcCDEkcaw4bujYyB04burIGjDoG5oIMSR4buZbmcgcXV5LXThuq9jLXRydW5nIHThuqFpICQlZCIKKworIzogc3JjL3NjYW4tY29kZS5sOjUyMSBzcmMvc2Nhbi1ncmFtLmw6NzgzCisjLCBjLWZvcm1hdAorbXNnaWQgImludGVnZXIgb3V0IG9mIHJhbmdlOiAlcyIKK21zZ3N0ciAic+G7kSBuZ3V5w6puIG7hurFtIG5nb8OgaSBwaOG6oW0gdmk6ICVzIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAic2FpIHRoYW0gY2hp4bq/dTogJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yIGFmdGVyICclYycsIGV4cGVjdGluZyBpbnRlZ2VyLCBsZXR0ZXIsICdfJywgJ1snLCBvciAnJCciCittc2dzdHIgImzhu5dpIHNhaSBjw7ogcGjDoXAgc2F1ICclYycsIGPhuqduIHPhu5Egbmd1ecOqbiwgY2jhu68sICdfJywgJ1snLCBob+G6t2MgJyQnIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbiBiZWZvcmUgJCVkOiAlLipzIgorbXNnc3RyICJrw70gaGnhu4d1IGtow7RuZyB0w6xtIHRo4bqleSB0cm9uZyB0aOG7pyB04bulYyB0csaw4bubYyAkJWQ6ICUuKnMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiAlLipzIgorbXNnc3RyICJrw70gaGnhu4d1IGtow7RuZyB0w6xtIHRo4bqleSB0cm9uZyB0aOG7pyB04bulYzogJS4qcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNsZWFkaW5nIHJlZmVyZW5jZTogJXMiCittc2dzdHIgInRoYW0gY2hp4bq/dSBraMO0bmcgxJHDum5nIGNo4buXOiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAidGhhbSBjaGnhur91IGNoxrBhIHLDtSByw6BuZzogJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwbGljaXQgdHlwZSBnaXZlbiBpbiB1bnR5cGVkIGdyYW1tYXIiCittc2dzdHIgIsSRxrBhIHJhIGtp4buDdSBk4bupdCBraG/DoXQgdGhlbyBuZ+G7ryBj4bqjbmgga2jDtG5nIMSR4bq3dCBraeG7g3UiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJCQgZm9yIHRoZSBtaWRydWxlIGF0ICQlZCBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiJCQgY2hvIHF1eSB04bqvYyBnaeG7r2Eg4bufICQlZCBj4bunYSAlcyBraMO0bmcgY8OzIGtp4buDdSDEkcaw4bujYyBraGFpIGLDoW8iCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJCQgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiQkIGPhu6dhICVzIGtow7RuZyBraGFpIGLDoW8ga2nhu4N1IgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiQlcyBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiJCVzIGPhu6dhICVzIGtow7RuZyBraGFpIGLDoW8ga2nhu4N1IgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmF5ICcsJyB0cmVhdGVkIGFzIHdoaXRlIHNwYWNlIgorbXNnc3RyICJk4bqldSBwaOG6qXkgJywnIHRo4bqldCBs4bqhYyDEkcaw4bujYyDEkeG7kWkgxJHDo2kgbmjGsCBsw6Aga2hv4bqjbmcgdHLhuq9uZyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRpcmVjdGl2ZTogJXMiCittc2dzdHIgImNo4buJIHRo4buLIGtow7RuZyBo4bujcCBs4buHOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50aWZpZXI6ICVzIgorbXNnc3RyICLEkeG7i25oIGRhbmgga2jDtG5nIGjhu6NwIGzhu4c6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6Mjk1Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIiCittc2dpZF9wbHVyYWwgImludmFsaWQgY2hhcmFjdGVycyIKK21zZ3N0clswXSAia8O9IHThu7Ega2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBpZGVudGlmaWVyIGluIGJyYWNrZXRlZCBuYW1lOiAlcyIKK21zZ3N0ciAia2jDtG5nIGPhuqduIG3hu5l0IMSR4buLbmggZGFuaCB0cm9uZyB0w6puIMSR4bq3dCB0cm9uZyBk4bqldSBuZ2/hurdjOiAlcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJhbiBpZGVudGlmaWVyIGV4cGVjdGVkIgorbXNnc3RyICJj4bqnbiBt4buZdCDEkeG7i25oIGRhbmgiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozODEKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciBpbiBicmFja2V0ZWQgbmFtZSIKK21zZ2lkX3BsdXJhbCAiaW52YWxpZCBjaGFyYWN0ZXJzIGluIGJyYWNrZXRlZCBuYW1lIgorbXNnc3RyWzBdICJrw70gdOG7sSBraMO0bmcgaOG7o3AgbOG7hyB0cm9uZyB0w6puIMSR4bq3dCB0cm9uZyBk4bqldSBuZ2/hurdjIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NDgxIHNyYy9zY2FuLWdyYW0ubDo1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgY2hhcmFjdGVyIGxpdGVyYWwiCittc2dzdHIgImvDvSB04buxIHRy4buRbmcgdGhlbyBraeG7g3UgdsSDbiBjaMawxqFuZyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjQ4NiBzcmMvc2Nhbi1ncmFtLmw6NTA3CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dHJhIGNoYXJhY3RlcnMgaW4gY2hhcmFjdGVyIGxpdGVyYWwiCittc2dzdHIgImPDoWMga8O9IHThu7EgbeG7nyBy4buZbmcgdHJvbmcgY8OidSBjaOG7ryIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bGwgY2hhcmFjdGVyIgorbXNnc3RyICJrw70gdOG7sSB2w7QgZ2nDoSB0cuG7iyBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjUzMSBzcmMvc2Nhbi1ncmFtLmw6NTQxIHNyYy9zY2FuLWdyYW0ubDo1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgYWZ0ZXIgXFwtZXNjYXBlOiAlcyIKK21zZ3N0ciAiZ+G6t3Agc+G7kSBzYWkgbuG6sW0gc2F1IFxcLWVzY2FwZTogJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgXFwtZXNjYXBlOiAlcyIKK21zZ3N0ciAiZ+G6t3Aga8O9IHThu7Egc2FpIG7hurFtIHNhdSBcXC1lc2NhcGU6ICVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6OTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgJXMgYXQgZW5kIG9mIGZpbGUiCittc2dzdHIgInRoaeG6v3UgJXMgdOG6oWkga+G6v3QgdGjDumMgdOG6rXAgdGluIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6OTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgJXMgYXQgZW5kIG9mIGxpbmUiCittc2dzdHIgInRoaeG6v3UgJXMgdOG6oWkgY3Xhu5FpIGTDsm5nIgorCisjOiBzcmMvc2Nhbi1za2VsLmw6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuY2xvc2VkICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAiZ+G6t3AgY2jhu4kgdGjhu4sgJXMgY2jGsGEgxJHDs25nIHRyb25nIGtodW5nIHPGsOG7nW4iCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIGZldyBhcmd1bWVudHMgZm9yICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAicXXDoSDDrXQgxJHhu5FpIHPhu5EgY2hvIGNo4buJIHRo4buLICVzIHRyb25nIGtodW5nIHPGsOG7nW4iCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGZvciAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iCittc2dzdHIgInF1w6Egbmhp4buBdSDEkeG7kWkgc+G7kSBjaG8gY2jhu4kgdGjhu4sgJXMgdHJvbmcga2h1bmcgc8aw4budbiIKKworIzogc3JjL3N5bWxpc3QuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAkIHZhbHVlOiAkJWQiCittc2dzdHIgImdpw6EgdHLhu4sgJCBraMO0bmcgaOG7o3AgbOG7hzogJCVkIgorCisjOiBzcmMvc3ltdGFiLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUE9TSVggWWFjYyBmb3JiaWRzIGRhc2hlcyBpbiBzeW1ib2wgbmFtZXM6ICVzIgorbXNnc3RyICJQT1NJWCBZYWNjIGPhuqVtIGNo4buJIHPhu7EgdmEgY2jhuqFtIHRyb25nIGPDoWMgdMOqbiBrw70gaGnhu4d1OiAlcyIKKworIzogc3JjL3N5bXRhYi5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IHN5bWJvbHMgaW4gaW5wdXQgZ3JhbW1hciAobGltaXQgaXMgJWQpIgorbXNnc3RyICJxdcOhIG5oaeG7gXUga8O9IGhp4buHdSB0cm9uZyBuZ+G7ryBwaMOhcCBuaOG6rXAgdsOgbyAoZ2nhu5tpIGjhuqFuICVkKSIKKworIzogc3JjL3N5bXRhYi5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAiJXMga2hhaSBiw6FvIGzhuqFpIGNobyAlcyIKKworIzogc3JjL3N5bXRhYi5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciA8JXM+IgorbXNnc3RyICIlcyBraGFpIGLDoW8gbOG6oWkgY2hvIDwlcz4iCisKKyM6IHNyYy9zeW10YWIuYzozMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHJlZGVmaW5lZCIKK21zZ3N0ciAia8O9IGhp4buHdSAlcyDEkcOjIMSRxrDhu6NjIMSR4buLbmggbmdoxKlhIGzhuqFpIgorCisjOiBzcmMvc3ltdGFiLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyByZWRlY2xhcmVkIgorbXNnc3RyICJrw70gaGnhu4d1ICVzIMSRw6MgxJHGsOG7o2Mga2hhaSBiw6FvIGzhuqFpIgorCisjOiBzcmMvc3ltdGFiLmM6MzY3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVmaW5pbmcgdXNlciB0b2tlbiBudW1iZXIgb2YgJXMiCittc2dzdHIgIsSRYW5nIMSR4buLbmggbmdoxKlhIGzhuqFpIHPhu5EgdGjhu6kgdOG7sSB0aOG6uyBiw6BpIG5nxrDhu51pIGTDuW5nIGPhu6dhICVzIgorCisjOiBzcmMvc3ltdGFiLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyBpcyB1c2VkLCBidXQgaXMgbm90IGRlZmluZWQgYXMgYSB0b2tlbiBhbmQgaGFzIG5vIHJ1bGVzIgorbXNnc3RyICIiCisia8O9IGhp4buHdSAlcyDEkcaw4bujYyBkw7luZywgbmjGsG5nIGNoxrBhIMSRxrDhu6NjIMSR4buLbmggbmdoxKlhIG5oxrAgbMOgIHRo4bq7IGLDoGksIGPFqW5nIGtow7RuZyAiCisiY8OzIHF1eSB04bqvYyIKKworIzogc3JjL3N5bXRhYi5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgdXNlZCBtb3JlIHRoYW4gb25jZSBhcyBhIGxpdGVyYWwgc3RyaW5nIgorbXNnc3RyICJrw70gaGnhu4d1ICVzIHPhu60gZOG7pW5nIGNobyBuaGnhu4F1IGjGoW4gbeG7mXQgY2h14buXaSBuZ2jEqWEgY2jhu68iCisKKyM6IHNyYy9zeW10YWIuYzo0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIGdpdmVuIG1vcmUgdGhhbiBvbmUgbGl0ZXJhbCBzdHJpbmciCittc2dzdHIgImvDvSBoaeG7h3UgJXMgbmjhuq1uIG5oaeG7gXUgaMahbiBt4buZdCBjaHXhu5dpIG5naMSpYSBjaOG7ryIKKworIzogc3JjL3N5bXRhYi5jOjUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2VyIHRva2VuIG51bWJlciAlZCByZWRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAic+G7kSB0aOG6uyBuZ8aw4budaSBkw7luZyAlZCBraGFpIGLDoW8gbOG6oWkgY2hvICVzIgorCisjOiBzcmMvc3ltdGFiLmM6NTM5CisjLCBjLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIGRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAia2hhaSBiw6FvIHRyxrDhu5tjIMSRw6J5IGNobyAlcyIKKworIzogc3JjL3N5bXRhYi5jOjkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgc3RhcnQgc3ltYm9sICVzIGlzIHVuZGVmaW5lZCIKK21zZ3N0ciAiY2jGsGEgxJHhu4tuaCBuZ2jEqWEga8O9IGhp4buHdSBi4bqvdCDEkeG6p3UgJXMiCisKKyM6IHNyYy9zeW10YWIuYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHN0YXJ0IHN5bWJvbCAlcyBpcyBhIHRva2VuIgorbXNnc3RyICJrw70gaGnhu4d1IGLhuq90IMSR4bqndSAlcyBsw6AgbeG7mXQgdGjhursgYsOgaSIKKworIzogc3JjL3N5bXRhYi5jOjkzNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlJWRlc3RydWN0b3IiCittc2dzdHIgImtoYWkgYsOhbyBs4bqhaSBjaG8gJSVkZXN0cnVjdG9yIGPDsyB0aOG6uyBt4bq3YyDEkeG7i25oIgorCisjOiBzcmMvc3ltdGFiLmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnbGVzcyAlJWRlc3RydWN0b3IiCittc2dzdHIgImtoYWkgYsOhbyBs4bqhaSBjaG8gJSVkZXN0cnVjdG9yIGtow7RuZyBjw7MgdGjhursgbeG6t2MgxJHhu4tuaCIKKworIzogc3JjL3N5bXRhYi5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlJXByaW50ZXIiCittc2dzdHIgImtoYWkgYsOhbyBs4bqhaSBjaG8gJSVwcmludGVyIGPDsyB0aOG6uyBt4bq3YyDEkeG7i25oIgorCisjOiBzcmMvc3ltdGFiLmM6OTgwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnbGVzcyAlJXByaW50ZXIiCittc2dzdHIgImtoYWkgYsOhbyBs4bqhaSBjaG8gJSVwcmludGVyIGtow7RuZyBjw7MgdGjhursgbeG6t2MgxJHhu4tuaCIKKworIzogZGpncHAvc3VicGlwZS5jOjYzIGRqZ3BwL3N1YnBpcGUuYzoyODYgZGpncHAvc3VicGlwZS5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdmluZyBvZiAnJXMnIGZhaWxlZCIKK21zZ3N0ciAidmnhu4djIGfhu6EgYuG7jyBj4bunYSAnJXMnIGfhurdwIGzhu5dpIgorCisjOiBkamdwcC9zdWJwaXBlLmM6ODUgZGpncHAvc3VicGlwZS5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNyZWF0aW9uIG9mIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICJ2aeG7h2MgdOG6oW8gdGluIHThuqFtIHRo4budaSBn4bq3cCBs4buXaS4iCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAic2F2aW5nIHN0ZGluIGZhaWxlZCIKK21zZ3N0ciAiZ2hpIGzhuqFpIHN0ZGluIGfhurdwIGzhu5dpIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgInNhdmluZyBzdGRvdXQgZmFpbGVkIgorbXNnc3RyICJnaGkgbOG6oWkgc3Rkb3V0IGfhurdwIGzhu5dpIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTUzIGRqZ3BwL3N1YnBpcGUuYzoxOTcgZGpncHAvc3VicGlwZS5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nIG9mIHRtcGZpbGUgZmFpbGVkIgorbXNnc3RyICJ2aeG7h2MgbeG7nyB04bqtcCB0aW4gdG1wZmlsZSBn4bq3cCBs4buXaSIKKworIzogZGpncHAvc3VicGlwZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBiaXNvbidzIHN0ZG91dCB0byB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICJjaHV54buDbiBoxrDhu5tuZyBzdGRvdXQgY+G7p2EgYmlzb24gdOG7m2kgdOG6rXAgdGluIHThuqFtIGfhurdwIGzhu5dpIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIG00J3Mgc3RkaW4gZnJvbSB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICJjaHV54buDbiBoxrDhu5tuZyBzdGRpbiBj4bunYSBtNCB04burIHThuq1wIHRpbiB04bqhbSBn4bq3cCBs4buXaSIKKworIzogZGpncHAvc3VicGlwZS5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nIG9mIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICJ2aeG7h2MgbeG7nyB04bqtcCB0aW4gdOG6oW0gdGjhu51pIGfhurdwIGzhu5dpIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIG00J3Mgc3Rkb3V0IHRvIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICJjaHV54buDbiBoxrDhu5tuZyBzdGRvdXQgY+G7p2EgbTQgdOG7m2kgdOG6rXAgdGluIHThuqFtIGfhurdwIGzhu5dpIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSAnJXMnIGludGVycnVwdGVkIgorbXNnc3RyICJjaMawxqFuZyB0csOsbmggY2jhuqF5IGLhu5UgdHLhu6MgJyVzJyBi4buLIG5n4bqvdCBnaeG7r2EgY2jhu6tuZyIKKworIzogZGpncHAvc3VicGlwZS5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gJyVzJyBub3QgZm91bmQiCittc2dzdHIgImtow7RuZyB0w6xtIHRo4bqleSBjaMawxqFuZyB0csOsbmggY2jhuqF5IGLhu5UgdHLhu6MgJyVzJyIKKworIzogZGpncHAvc3VicGlwZS5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBiaXNvbidzIHN0ZGluIGZyb20gdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiY2h1eeG7g24gaMaw4bubbmcgc3RkaW4gY+G7p2EgYmlzb24gdOG7qyB04bqtcCB0aW4gdOG6oW0gZ+G6t3AgbOG7l2kiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGFyZ3VtZW50ICVzIGZvciAlcyIKK21zZ3N0ciAixJHhu5FpIHPhu5Ega2jDtG5nIGjhu6NwIGzhu4cgJXMgY2hvICVzIgorCisjOiBsaWIvYXJnbWF0Y2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIGFyZ3VtZW50ICVzIGZvciAlcyIKK21zZ3N0ciAixJHhu5FpIHPhu5EgY2jGsGEgcsO1IHLDoG5nICVzIGNobyAlcyIKKworIzogbGliL2FyZ21hdGNoLmM6MTUzCittc2dpZCAiVmFsaWQgYXJndW1lbnRzIGFyZToiCittc2dzdHIgIsSQ4buRaSBz4buRIGjhu6NwIGzhu4c6IgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9hbGxvY3MsICV1IGZyZWVkICglLjJmJSUpLlxuIgorbXNnc3RyICIldSBiaXRzZXRfYWxsb2NzIChj4bqlcCBi4buZIGJpdCksICV1IMSRw6MgZ2nhuqNpIHBow7NuZyAoJS4yZiUlKS5cbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfc2V0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF9zZXRzIChi4buZIGLhu5kgYml0KSwgJXUgxJHDoyBsxrB1IHThuqFtICglLjJmJSUpXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X3Jlc2V0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF9yZXNldHMgKMSR4bq3dCBs4bqhaSBi4buZIGJpdCksICV1IMSRw6MgbMawdSB04bqhbSAoJS4yZiUlKVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF90ZXN0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF90ZXN0cyAodGjhu60gYuG7mSBiaXQpLCAldSDEkcOjIGzGsHUgdOG6oW0gKCUuMmYlJSlcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfbGlzdHNcbiIKK21zZ3N0ciAiJXUgYml0c2V0X2xpc3RzIChkYW5oIHPDoWNoIGLhu5kgYml0KVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTkyCittc2dpZCAiY291bnQgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICJiaeG7g3UgxJHhu5MgdOG6p24geHXhuqV0IGdoaSBsxrB1IHPhu5EgxJHhur9tXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTUKK21zZ2lkICJzaXplIGxvZyBoaXN0b2dyYW1cbiIKK21zZ3N0ciAiYmnhu4N1IMSR4buTIHThuqduIHh14bqldCBnaGkgbMawdSBrw61jaCBj4buhXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTgKK21zZ2lkICJkZW5zaXR5IGhpc3RvZ3JhbVxuIgorbXNnc3RyICJiaeG7g3UgxJHhu5MgdOG6p24geHXhuqV0IG3huq10IMSR4buZXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJpdHNldCBzdGF0aXN0aWNzOlxuIgorIlxuIgorbXNnc3RyICIiCisiVGjhu5FuZyBrw6ogYsOtdDpcbiIKKyJcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJBY2N1bXVsYXRlZCBydW5zID0gJXVcbiIKK21zZ3N0ciAiTOG6p24gY2jhuqF5IHTDrWNoIGzFqXkgPSAldVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjU5IGxpYi9iaXRzZXRfc3RhdHMuYzoyNjQKK21zZ2lkICJjYW5ub3QgcmVhZCBzdGF0cyBmaWxlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIHThuq1wIHRpbiB0aOG7kW5nIGvDqiAoc3RhdHMpIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBzdGF0cyBmaWxlIHNpemVcbiIKK21zZ3N0ciAia8OtY2ggY+G7oSB04bqtcCB0aW4gdGjhu5FuZyBrw6ogKHN0YXRzKSBzYWkuXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyODcgbGliL2JpdHNldF9zdGF0cy5jOjI4OQorbXNnaWQgImNhbm5vdCB3cml0ZSBzdGF0cyBmaWxlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2hpIHThuq1wIHRpbiB0aOG7kW5nIGvDqiAoc3RhdHMpIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjkyCittc2dpZCAiY2Fubm90IG9wZW4gc3RhdHMgZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIG3hu58gdOG6rXAgdGluIHRo4buRbmcga8OqIChzdGF0cykgxJHhu4MgZ2hpIgorCisjOiBsaWIvY2xvc2VvdXQuYzoxMTIKK21zZ2lkICJ3cml0ZSBlcnJvciIKK21zZ3N0ciAibOG7l2kgZ2hpIgorCisjOiBsaWIvZXJyb3IuYzoxODgKK21zZ2lkICJVbmtub3duIHN5c3RlbSBlcnJvciIKK21zZ3N0ciAiTOG7l2kgaOG7hyB0aOG7kW5nIGtow7RuZyByw7UiCisKKyM6IGxpYi9nZXRvcHQuYzo1NDcgbGliL2dldG9wdC5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICclcycgaXMgYW1iaWd1b3VzOyBwb3NzaWJpbGl0aWVzOiIKK21zZ3N0ciAiJXM6IHTDuXkgY2jhu41uIOKAnCVz4oCdIGNoxrBhIHLDtSByw6BuZzsga2jhuqMgbsSDbmcgbMOgOiIKKworIzogbGliL2dldG9wdC5jOjYyNCBsaWIvZ2V0b3B0LmM6NjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy0tJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXM6IHTDuXkgY2jhu41uIOKAnC0tJXPigJ0ga2jDtG5nIGNobyBwaMOpcCDEkeG7kWkgc+G7kVxuIgorCisjOiBsaWIvZ2V0b3B0LmM6NjM3IGxpYi9nZXRvcHQuYzo2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnJWMlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogdMO5eSBjaOG7jW4g4oCcJWMlc+KAnSBraMO0bmcgY2hvIHBow6lwIMSR4buRaSBz4buRXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo2ODUgbGliL2dldG9wdC5jOjcwNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctLSVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogdMO5eSBjaOG7jW4g4oCcLS0lc+KAnSB5w6p1IGPhuqd1IG3hu5l0IMSR4buRaSBz4buRXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo3NDIgbGliL2dldG9wdC5jOjc0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiAnLS0lcydcbiIKK21zZ3N0ciAiJXM6IGtow7RuZyBuaOG6rW4gcmEgdMO5eSBjaOG7jW4g4oCcLS0lc+KAnVxuIgorCisjOiBsaWIvZ2V0b3B0LmM6NzUzIGxpYi9nZXRvcHQuYzo3NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gJyVjJXMnXG4iCittc2dzdHIgIiVzOiBraMO0bmcgbmjhuq1uIHJhIHTDuXkgY2jhu41uIOKAnCVjJXPigJ1cbiIKKworIzogbGliL2dldG9wdC5jOjgwNSBsaWIvZ2V0b3B0LmM6ODA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIG9wdGlvbiAtLSAnJWMnXG4iCittc2dzdHIgIiVzOiB0w7l5IGNo4buNbiBraMO0bmcgaOG7o3AgbOG7hyAtLSDigJwlY+KAnVxuIgorCisjOiBsaWIvZ2V0b3B0LmM6ODYxIGxpYi9nZXRvcHQuYzo4NzggbGliL2dldG9wdC5jOjEwODggbGliL2dldG9wdC5jOjExMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAnJWMnXG4iCittc2dzdHIgIiVzOiB0w7l5IGNo4buNbiB5w6p1IGPhuqd1IG3hu5l0IMSR4buRaSBz4buRIC0tIOKAnCVj4oCdXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo5MzQgbGliL2dldG9wdC5jOjk1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiVzOiB0w7l5IGNo4buNbiDigJwtVyAlc+KAnSBjaMawYSByw7UgcsOgbmdcbiIKKworIzogbGliL2dldG9wdC5jOjk3NCBsaWIvZ2V0b3B0LmM6OTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVzOiB0w7l5IGNo4buNbiDigJwtVyAlc+KAnSBraMO0bmcgY2hvIHBow6lwIMSR4buRaSBz4buRXG4iCisKKyM6IGxpYi9nZXRvcHQuYzoxMDEzIGxpYi9nZXRvcHQuYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlczogdMO5eSBjaOG7jW4g4oCcLVcgJXPigJ0gecOqdSBj4bqndSBt4buZdCDEkeG7kWkgc+G7kVxuIgorCisjOiBsaWIvb2JzdGFjay5jOjQxMyBsaWIvb2JzdGFjay5jOjQxNSBsaWIveGFsbG9jLWRpZS5jOjM0Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiaOG6v3QgYuG7mSBuaOG7myIKKworIzogbGliL3NwYXduLXBpcGUuYzoxNDAgbGliL3NwYXduLXBpcGUuYzoxNDMgbGliL3NwYXduLXBpcGUuYzoyNjQKKyM6IGxpYi9zcGF3bi1waXBlLmM6MjY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvIOG7kW5nIGThuqtuIgorCisjOiBsaWIvc3Bhd24tcGlwZS5jOjIzNCBsaWIvc3Bhd24tcGlwZS5jOjM0OCBsaWIvd2FpdC1wcm9jZXNzLmM6MjgyCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MgZmFpbGVkIgorbXNnc3RyICJ0aeG6v24gdHLDrG5oIGNvbiAlcyBi4buLIGzhu5dpIgorCisjLiBUUkFOU0xBVE9SUzoKKyMuIEdldCB0cmFuc2xhdGlvbnMgZm9yIG9wZW4gYW5kIGNsb3NpbmcgcXVvdGF0aW9uIG1hcmtzLgorIy4gVGhlIG1lc3NhZ2UgY2F0YWxvZyBzaG91bGQgdHJhbnNsYXRlICJgIiB0byBhIGxlZnQKKyMuIHF1b3RhdGlvbiBtYXJrIHN1aXRhYmxlIGZvciB0aGUgbG9jYWxlLCBhbmQgc2ltaWxhcmx5IGZvcgorIy4gIiciLiAgRm9yIGV4YW1wbGUsIGEgRnJlbmNoIFVuaWNvZGUgbG9jYWwgc2hvdWxkIHRyYW5zbGF0ZQorIy4gdGhlc2UgdG8gVSswMEFCIChMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRQorIy4gUVVPVEFUSU9OIE1BUkspLCBhbmQgVSswMEJCIChSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUKKyMuIFFVT1RBVElPTiBNQVJLKSwgcmVzcGVjdGl2ZWx5LgorIy4KKyMuIElmIHRoZSBjYXRhbG9nIGhhcyBubyB0cmFuc2xhdGlvbiwgd2Ugd2lsbCB0cnkgdG8KKyMuIHVzZSBVbmljb2RlIFUrMjAxOCAoTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspIGFuZAorIy4gVW5pY29kZSBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykuICBJZiB0aGUKKyMuIGN1cnJlbnQgbG9jYWxlIGlzIG5vdCBVbmljb2RlLCBsb2NhbGVfcXVvdGluZ19zdHlsZQorIy4gd2lsbCBxdW90ZSAnbGlrZSB0aGlzJywgYW5kIGNsb2NhbGVfcXVvdGluZ19zdHlsZSB3aWxsCisjLiBxdW90ZSAibGlrZSB0aGlzIi4gIFlvdSBzaG91bGQgYWx3YXlzIGluY2x1ZGUgdHJhbnNsYXRpb25zCisjLiBmb3IgImAiIGFuZCAiJyIgZXZlbiBpZiBVKzIwMTggYW5kIFUrMjAxOSBhcmUgYXBwcm9wcmlhdGUKKyMuIGZvciB5b3VyIGxvY2FsZS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFya3NfaW5fb3RoZXJfbGFuZ3VhZ2VzPgorIy4gYW5kIHVzZSBnbHlwaHMgc3VpdGFibGUgZm9yIHlvdXIgbGFuZ3VhZ2UuCisjOiBsaWIvcXVvdGVhcmcuYzozMTIKK21zZ2lkICJgIgorbXNnc3RyICLigJwiCisKKyM6IGxpYi9xdW90ZWFyZy5jOjMxMworbXNnaWQgIiciCittc2dzdHIgIuKAnSIKKworIzogbGliL3RpbWV2YXIuYzo0NzUKK21zZ2lkICIiCisiXG4iCisiRXhlY3V0aW9uIHRpbWVzIChzZWNvbmRzKVxuIgorbXNnc3RyICIiCisiXG4iCisiVGjhu51pIGdpYW4gdGjhu7FjIGhp4buHbiAoZ2nDonkpXG4iCisKKyM6IGxpYi90aW1ldmFyLmM6NTI1Cittc2dpZCAiIFRPVEFMICAgICAgICAgICAgICAgICA6IgorbXNnc3RyICIgVOG7lE5HICAgICAgICAgICAgICAgICAgOiIKKworIzogbGliL3RpbWV2YXIuYzo1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZSBpbiAlczogJWxkLiUwNmxkICglbGQlJSlcbiIKK21zZ3N0ciAidGjhu51pIGdpYW4gdGhlbyAlczogJWxkLiUwNmxkICglbGQlJSlcbiIKKworIzogbGliL3czMnNwYXduLmg6NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiX29wZW5fb3NmaGFuZGxlIGZhaWxlZCIKK21zZ3N0ciAiX29wZW5fb3NmaGFuZGxlIGfhurdwIGzhu5dpIgorCisjOiBsaWIvdzMyc3Bhd24uaDo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdG9yZSBmZCAlZDogZHVwMiBmYWlsZWQiCittc2dzdHIgImtow7RuZyB0aOG7gyBwaOG7pWMgaOG7k2kgYuG7mSBtw7QgdOG6oyB04bqtcCB0aW4gJWQ6IGR1cDIgZ+G6t3AgbOG7l2kiCisKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzoyMjMgbGliL3dhaXQtcHJvY2Vzcy5jOjI1NSBsaWIvd2FpdC1wcm9jZXNzLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN1YnByb2Nlc3MiCittc2dzdHIgInRp4bq/biB0csOsbmggY29uICVzIgorCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6Mjc0IGxpYi93YWl0LXByb2Nlc3MuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyBnb3QgZmF0YWwgc2lnbmFsICVkIgorbXNnc3RyICJ0aeG6v24gdHLDrG5oIGNvbiAlcyDEkcOjIG5o4bqtbiB0w61uIGhp4buHdSBuZ2hp4buHbSB0cuG7jW5nICVkIgorCisjfiBtc2dpZCAic3RhdGUgJWQiCisjfiBtc2dzdHIgInTDrG5oIHRy4bqhbmcgJWQiCisKKyN+IG1zZ2lkICJzdHJheSAnQCciCisjfiBtc2dzdHIgImzhuqFjICdAJyIKKworI34gbXNnaWQgIiIKKyN+ICJ1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgYCVzJyBwYXNzZWQgdG8gbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2dldF9sb2MiCisjfiBtc2dzdHIgIiIKKyN+ICJiaeG6v24gJSVkZWZpbmUgY2jGsGEgeMOhYyDEkeG7i25oIFwiJXNcIiDEkcaw4bujYyBn4butaSBxdWEgY2hvIGjDoG0gIgorI34gIlwibXVzY2xlX3BlcmNlbnRfZGVmaW5lX2dldF9sb2NcIiIKKworI34gbXNnaWQgIiIKKyN+ICJ1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgYCVzJyBwYXNzZWQgdG8gIgorI34gIm11c2NsZV9wZXJjZW50X2RlZmluZV9nZXRfc3luY2xpbmUiCisjfiBtc2dzdHIgIiIKKyN+ICJiaeG6v24gJSVkZWZpbmUgY2jGsGEgeMOhYyDEkeG7i25oIFwiJXNcIiDEkcaw4bujYyBn4butaSBxdWEgY2hvIGjDoG0gIgorI34gIlwibXVzY2xlX3BlcmNlbnRfZGVmaW5lX2dldF9zeW5jbGluZVwiIgorCisjfiBtc2dpZCAiIgorI34gInVuZGVmaW5lZCAlJWRlZmluZSB2YXJpYWJsZSBgJXMnIHBhc3NlZCB0byBtdXNjbGVfcGVyY2VudF9kZWZpbmVfZmxhZ19pZiIKKyN+IG1zZ3N0ciAiIgorI34gImJp4bq/biAlJWRlZmluZSBjaMawYSB4w6FjIMSR4buLbmggXCIlc1wiIMSRxrDhu6NjIGfhu61pIHF1YSBjaG8gaMOgbSAiCisjfiAiXCJtdXNjbGVfcGVyY2VudF9kZWZpbmVfZmxhZ19pZlwiIgorCisjfiBtc2dpZCAiIgorI34gInVuZGVmaW5lZCAlJWRlZmluZSB2YXJpYWJsZSBgJXMnIHBhc3NlZCB0byAiCisjfiAibXVzY2xlX3BlcmNlbnRfZGVmaW5lX2NoZWNrX3ZhbHVlcyIKKyN+IG1zZ3N0ciAiIgorI34gImJp4bq/biAlJWRlZmluZSBjaMawYSB4w6FjIMSR4buLbmggXCIlc1wiIMSRxrDhu6NjIGfhu61pIHF1YSBjaG8gaMOgbSAiCisjfiAiXCJtdXNjbGVfcGVyY2VudF9kZWZpbmVfZmxhZ19jaGVja192YWx1ZXNcIiIKKworI34gbXNnaWQgIiIKKyN+ICJHZW5lcmF0ZSBMQUxSKDEpIGFuZCBHTFIgcGFyc2Vycy5cbiIKKyN+ICJcbiIKKyN+IG1zZ3N0ciAiVOG6oW8gY8ahIGNo4bq/IHBow6JuIHTDrWNoIGtp4buDdSBMQUxSKDEpIHbDoCBHTFIuXG4iCisKKyN+IG1zZ2lkICJ0b2tlbnMgJXMgYW5kICVzIGJvdGggYXNzaWduZWQgbnVtYmVyICVkIgorI34gbXNnc3RyICJj4bqjIHRo4bq7IGLDoGkgJXMgbOG6q24gJXMgxJHhu4F1IMSRxrDhu6NjIGfDoW4gc+G7kSAlZCIKZGlmZiAtLWdpdCBhL3BvL3poX0NOLmdtbyBiL3BvL3poX0NOLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWIzMDllCi0tLSAvZGV2L251bGwKKysrIGIvcG8vemhfQ04uZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL3poX0NOLnBvIGIvcG8vemhfQ04ucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFmYjA1MgotLS0gL2Rldi9udWxsCisrKyBiL3BvL3poX0NOLnBvCkBAIC0wLDAgKzEsMTEyNiBAQAorIyBDaGluZXNlIHNpbXBsaWZpZWQgdHJhbnNsYXRpb24gZm9yIGJpc29uLgorIyBDb3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBiaXNvbiBwYWNrYWdlLgorIyBXeWxtZXIgV2FuZyA8d2FudGluZ2hhcmRAZ21haWwuY29tPiwgMjAxMS4KKyMgSmkgWmhlbmdZdSA8emhlbmd5dWppQGdtYWlsLmNvbT4sIDIwMTEuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBiaXNvbiAyLjVcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLWJpc29uQGdudS5vcmdcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMi0xMi0xMiAxNjowOSswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMS0wNy0yNSAxMTowMOS4reWbveagh+WHhuaXtumXtFxuIgorIkxhc3QtVHJhbnNsYXRvcjogSmkgWmhlbmdZdSA8emhlbmd5dWppQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBDaGluZXNlIChzaW1wbGlmaWVkKSA8aTE4bi16aEBnb29nbGVncm91cHMuY29tPlxuIgorIkxhbmd1YWdlOiB6aF9DTlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MTsgcGx1cmFsPTA7XG4iCisKKyM6IHNyYy9jb21wbGFpbi5jOjEyMCBzcmMvY29tcGxhaW4uYzoxMzEgc3JjL2NvbXBsYWluLmM6MTQwIHNyYy9jb21wbGFpbi5jOjE4OAorIzogc3JjL2NvbXBsYWluLmM6MTk4Cittc2dpZCAid2FybmluZyIKK21zZ3N0ciAi6K2m5ZGKIgorCisjOiBzcmMvY29tcGxhaW4uYzoxNTEgc3JjL2NvbXBsYWluLmM6MTYwIHNyYy9jb21wbGFpbi5jOjE2NworIywgZnV6enkKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiSS9PIOmUmeivryIKKworIzogc3JjL2NvbXBsYWluLmM6MjA4IHNyYy9jb21wbGFpbi5jOjIxNQorbXNnaWQgImZhdGFsIGVycm9yIgorbXNnc3RyICLoh7Tlkb3plJnor68iCisKKyM6IHNyYy9jb25mbGljdHMuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyBzaGlmdCIKK21zZ3N0ciAiIgorCisjOiBzcmMvY29uZmxpY3RzLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgcmVkdWNlIgorbXNnc3RyICIiCisKKyM6IHNyYy9jb25mbGljdHMuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyBhbiBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgc2hpZnQvcmVkdWNlLCAlZCByZWR1Y2UvcmVkdWNlXG4iCittc2dzdHIgIiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb25mbGljdHM6ICVkIHNoaWZ0L3JlZHVjZVxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCByZWR1Y2UvcmVkdWNlXG4iCittc2dzdHIgIiIKKworIzogc3JjL2NvbmZsaWN0cy5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdGF0ZSAlZCAiCittc2dzdHIgIueKtuaAgSAlZCIKKworIzogc3JjL2NvbmZsaWN0cy5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICIlJWV4cGVjdC1yciBhcHBsaWVzIG9ubHkgdG8gR0xSIHBhcnNlcnMiCittc2dzdHIgIiUlZXhwZWN0LXJyIOWPquW6lOeUqOS6jiBHTFIg6Kej5p6Q5ZmoIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NjE2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICVkIHNoaWZ0L3JlZHVjZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiZXhwZWN0ZWQgJWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAiIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICVkIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3QiCittc2dpZF9wbHVyYWwgImV4cGVjdGVkICVkIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3RzIgorbXNnc3RyWzBdICIiCisKKyM6IHNyYy9maWxlcy5jOjExNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBvcGVuIgorbXNnc3RyICLml6Dms5XmiZPlvIDmlofku7bigJwlc+KAnSIKKworIzogc3JjL2ZpbGVzLmM6MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImlucHV0L291dHB1dCBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBzcmMvZmlsZXMuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNsb3NlIGZpbGUiCittc2dzdHIgIuaXoOazleWFs+mXreaWh+S7tiIKKworIzogc3JjL2ZpbGVzLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIG92ZXJ3cml0ZSB0aGUgaW5wdXQgZmlsZSAlcyIKK21zZ3N0ciAi5ouS57ud6KaG55uW6L6T5YWl5paH5Lu2ICVzIgorCisjOiBzcmMvZmlsZXMuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3Rpbmcgb3V0cHV0cyB0byBmaWxlICVzIgorbXNnc3RyICLliLDmlofku7YgJXMg55qE6L6T5Ye65Yay56qBIgorCisjOiBzcmMvZ2V0YXJncy5jOjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCittc2dzdHIgIuWwneivleKAnCVzIC0taGVscOKAneS6huino+abtOWkmuS/oeaBr+OAglxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgW09QVElPTl0uLi4gRklMRVxuIgorbXNnc3RyICLnlKjms5XvvJolcyBb6YCJ6aG5XS4uLiDmlofku7ZcbiIKKworIzogc3JjL2dldGFyZ3MuYzozMDIKK21zZ2lkICIiCisiR2VuZXJhdGUgYSBkZXRlcm1pbmlzdGljIExSIG9yIGdlbmVyYWxpemVkIExSIChHTFIpIHBhcnNlciBlbXBsb3lpbmdcbiIKKyJMQUxSKDEpLCBJRUxSKDEpLCBvciBjYW5vbmljYWwgTFIoMSkgcGFyc2VyIHRhYmxlcy4gIElFTFIoMSkgYW5kXG4iCisiY2Fub25pY2FsIExSKDEpIHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6MzA5Cittc2dpZCAiIgorIk1hbmRhdG9yeSBhcmd1bWVudHMgdG8gbG9uZyBvcHRpb25zIGFyZSBtYW5kYXRvcnkgZm9yIHNob3J0IG9wdGlvbnMgdG9vLlxuIgorbXNnc3RyICLplb/pgInpobnnmoTlvLrliLblj4LmlbDlr7nnn63pgInpobnkuZ/mmK/lvLrliLbnmoTjgIJcbiIKKworIzogc3JjL2dldGFyZ3MuYzozMTIKK21zZ2lkICJUaGUgc2FtZSBpcyB0cnVlIGZvciBvcHRpb25hbCBhcmd1bWVudHMuXG4iCittc2dzdHIgIuWPr+mAiemhueS5n+aYr+WmguatpOOAglxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMxNgorbXNnaWQgIiIKKyJcbiIKKyJPcGVyYXRpb24gbW9kZXM6XG4iCisiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIKKyIgICAgICAtLXByaW50LWxvY2FsZWRpciAgICAgIG91dHB1dCBkaXJlY3RvcnkgY29udGFpbmluZyBsb2NhbGUtZGVwZW5kZW50ICIKKyJkYXRhXG4iCisiICAgICAgLS1wcmludC1kYXRhZGlyICAgICAgICBvdXRwdXQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgc2tlbGV0b25zIGFuZCBYU0xUXG4iCisiICAteSwgLS15YWNjICAgICAgICAgICAgICAgICBlbXVsYXRlIFBPU0lYIFlhY2NcbiIKKyIgIC1XLCAtLXdhcm5pbmdzWz1DQVRFR09SWV0gIHJlcG9ydCB0aGUgd2FybmluZ3MgZmFsbGluZyBpbiBDQVRFR09SWVxuIgorIiAgLWYsIC0tZmVhdHVyZVs9RkVBVFVSRV0gICAgYWN0aXZhdGUgbWlzY2VsbGFuZW91cyBmZWF0dXJlc1xuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJzZXI6XG4iCisiICAtTCwgLS1sYW5ndWFnZT1MQU5HVUFHRSAgICAgICAgICBzcGVjaWZ5IHRoZSBvdXRwdXQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VcbiIKKyIgIC1TLCAtLXNrZWxldG9uPUZJTEUgICAgICAgICAgICAgIHNwZWNpZnkgdGhlIHNrZWxldG9uIHRvIHVzZVxuIgorIiAgLXQsIC0tZGVidWcgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudCB0aGUgcGFyc2VyIGZvciBkZWJ1Z2dpbmdcbiIKKyIgICAgICAtLWxvY2F0aW9ucyAgICAgICAgICAgICAgICAgIGVuYWJsZSBsb2NhdGlvbiBzdXBwb3J0XG4iCisiICAtRCwgLS1kZWZpbmU9TkFNRVs9VkFMVUVdICAgICAgICBzaW1pbGFyIHRvICclZGVmaW5lIE5BTUUgXCJWQUxVRVwiJ1xuIgorIiAgLUYsIC0tZm9yY2UtZGVmaW5lPU5BTUVbPVZBTFVFXSAgb3ZlcnJpZGUgJyVkZWZpbmUgTkFNRSBcIlZBTFVFXCInXG4iCisiICAtcCwgLS1uYW1lLXByZWZpeD1QUkVGSVggICAgICAgICBwcmVwZW5kIFBSRUZJWCB0byB0aGUgZXh0ZXJuYWwgc3ltYm9sc1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZCBieSAnLURhcGkucHJlZml4PVBSRUZJWCdcbiIKKyIgIC1sLCAtLW5vLWxpbmVzICAgICAgICAgICAgICAgICAgIGRvbid0IGdlbmVyYXRlICcjbGluZScgZGlyZWN0aXZlc1xuIgorIiAgLWssIC0tdG9rZW4tdGFibGUgICAgICAgICAgICAgICAgaW5jbHVkZSBhIHRhYmxlIG9mIHRva2VuIG5hbWVzXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozNDYKK21zZ2lkICIiCisiT3V0cHV0OlxuIgorIiAgICAgIC0tZGVmaW5lc1s9RklMRV0gICAgICAgYWxzbyBwcm9kdWNlIGEgaGVhZGVyIGZpbGVcbiIKKyIgIC1kICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2V3aXNlIGJ1dCBjYW5ub3Qgc3BlY2lmeSBGSUxFIChmb3IgUE9TSVggIgorIllhY2MpXG4iCisiICAtciwgLS1yZXBvcnQ9VEhJTkdTICAgICAgICBhbHNvIHByb2R1Y2UgZGV0YWlscyBvbiB0aGUgYXV0b21hdG9uXG4iCisiICAgICAgLS1yZXBvcnQtZmlsZT1GSUxFICAgICB3cml0ZSByZXBvcnQgdG8gRklMRVxuIgorIiAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgc2FtZSBhcyBgLS1yZXBvcnQ9c3RhdGUnXG4iCisiICAtYiwgLS1maWxlLXByZWZpeD1QUkVGSVggICBzcGVjaWZ5IGEgUFJFRklYIGZvciBvdXRwdXQgZmlsZXNcbiIKKyIgIC1vLCAtLW91dHB1dD1GSUxFICAgICAgICAgIGxlYXZlIG91dHB1dCB0byBGSUxFXG4iCisiICAtZywgLS1ncmFwaFs9RklMRV0gICAgICAgICBhbHNvIG91dHB1dCBhIGdyYXBoIG9mIHRoZSBhdXRvbWF0b25cbiIKKyIgIC14LCAtLXhtbFs9RklMRV0gICAgICAgICAgIGFsc28gb3V0cHV0IGFuIFhNTCByZXBvcnQgb2YgdGhlIGF1dG9tYXRvblxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoZSBYTUwgc2NoZW1hIGlzIGV4cGVyaW1lbnRhbClcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjM2MQorbXNnaWQgIiIKKyJXYXJuaW5nIGNhdGVnb3JpZXMgaW5jbHVkZTpcbiIKKyIgIGBtaWRydWxlLXZhbHVlcycgIHVuc2V0IG9yIHVudXNlZCBtaWRydWxlIHZhbHVlc1xuIgorIiAgYHlhY2MnICAgICAgICAgICAgaW5jb21wYXRpYmlsaXRpZXMgd2l0aCBQT1NJWCBZYWNjXG4iCisiICBgY29uZmxpY3RzLXNyJyAgICBTL1IgY29uZmxpY3RzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgY29uZmxpY3RzLXJyJyAgICBSL1IgY29uZmxpY3RzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgZGVwcmVjYXRlZCcgICAgICBvYnNvbGV0ZSBjb25zdHJ1Y3RzXG4iCisiICBgb3RoZXInICAgICAgICAgICBhbGwgb3RoZXIgd2FybmluZ3MgKGVuYWJsZWQgYnkgZGVmYXVsdClcbiIKKyIgIGBhbGwnICAgICAgICAgICAgIGFsbCB0aGUgd2FybmluZ3NcbiIKKyIgIGBuby1DQVRFR09SWScgICAgIHR1cm4gb2ZmIHdhcm5pbmdzIGluIENBVEVHT1JZXG4iCisiICBgbm9uZScgICAgICAgICAgICB0dXJuIG9mZiBhbGwgdGhlIHdhcm5pbmdzXG4iCisiICBgZXJyb3InICAgICAgICAgICB0cmVhdCB3YXJuaW5ncyBhcyBlcnJvcnNcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjM3NgorbXNnaWQgIiIKKyJUSElOR1MgaXMgYSBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCB3b3JkcyB0aGF0IGNhbiBpbmNsdWRlOlxuIgorIiAgYHN0YXRlJyAgICAgICAgZGVzY3JpYmUgdGhlIHN0YXRlc1xuIgorIiAgYGl0ZW1zZXQnICAgICAgY29tcGxldGUgdGhlIGNvcmUgaXRlbSBzZXRzIHdpdGggdGhlaXIgY2xvc3VyZVxuIgorIiAgYGxvb2thaGVhZCcgICAgZXhwbGljaXRseSBhc3NvY2lhdGUgbG9va2FoZWFkIHRva2VucyB0byBpdGVtc1xuIgorIiAgYHNvbHZlZCcgICAgICAgZGVzY3JpYmUgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cyBzb2x2aW5nXG4iCisiICBgYWxsJyAgICAgICAgICBpbmNsdWRlIGFsbCB0aGUgYWJvdmUgaW5mb3JtYXRpb25cbiIKKyIgIGBub25lJyAgICAgICAgIGRpc2FibGUgdGhlIHJlcG9ydFxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzg3Cittc2dpZCAiIgorIkZFQVRVUkUgaXMgYSBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCB3b3JkcyB0aGF0IGNhbiBpbmNsdWRlOlxuIgorIiAgYGNhcmV0JyAgICAgICAgc2hvdyBlcnJvcnMgd2l0aCBjYXJldHNcbiIKKyIgIGBhbGwnICAgICAgICAgIGFsbCBvZiB0aGUgYWJvdmVcbiIKKyIgIGBub25lJyAgICAgICAgIGRpc2FibGUgYWxsIG9mIHRoZSBhYm92ZVxuIgorIiAgIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorbXNnc3RyICIiCisiXG4iCisi5ZCRIDwlcz4g5oql5ZGK6Zeu6aKY44CCXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhvbWUgcGFnZTogPCVzPi5cbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjM5NworbXNnaWQgIkdlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBSZXBsYWNlIExBTkdfQ09ERSBpbiB0aGlzIFVSTCB3aXRoIHlvdXIgbGFuZ3VhZ2UKKyMuIGNvZGUgPGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vTEFOR19DT0RFLmh0bWw+IHRvCisjLiBmb3JtIG9uZSBvZiB0aGUgVVJMcyBhdCBodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtLy4KKyMuIE90aGVyd2lzZSwgcmVwbGFjZSB0aGUgZW50aXJlIFVSTCB3aXRoIHlvdXIgdHJhbnNsYXRpb24gdGVhbSdzCisjLiBlbWFpbCBhZGRyZXNzLgorIzogc3JjL2dldGFyZ3MuYzo0MTAKK21zZ2lkICJSZXBvcnQgdHJhbnNsYXRpb24gYnVncyB0byA8aHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS8+LlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDEyCittc2dpZCAiRm9yIGNvbXBsZXRlIGRvY3VtZW50YXRpb24sIHJ1bjogaW5mbyBiaXNvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJiaXNvbiAoR05VIEJpc29uKSAlcyIKK21zZ3N0ciAiYmlzb24gKEdOVSBCaXNvbikgJXMiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDMwCittc2dpZCAiV3JpdHRlbiBieSBSb2JlcnQgQ29yYmV0dCBhbmQgUmljaGFyZCBTdGFsbG1hbi5cbiIKK21zZ3N0ciAi55SxIFJvYmVydCBDb3JiZXR0IOWSjCBSaWNoYXJkIFN0YWxsbWFuIOe8luWGmeOAglxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3B5cmlnaHQgKEMpICVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorbXNnc3RyICLniYjmnYPmiYDmnIkgKEMpICVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjQzNworbXNnaWQgIiIKKyJUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOT1xuIgorIndhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHNrZWxldG9uIGRlY2xhcmF0aW9ucyBhcmUgaW52YWxpZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ3NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgbGFuZ3VhZ2UiCittc2dzdHIgIuaXoOaViOeahOivreiogOKAnCVz4oCdIgorCisjOiBzcmMvZ2V0YXJncy5jOjQ3OQorbXNnaWQgIm11bHRpcGxlIGxhbmd1YWdlIGRlY2xhcmF0aW9ucyBhcmUgaW52YWxpZCIKK21zZ3N0ciAi5aSa6K+t6KiA5aOw5piO5piv5peg5pWI55qEIgorCisjOiBzcmMvZ2V0YXJncy5jOjc0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG1pc3Npbmcgb3BlcmFuZCIKK21zZ3N0ciAi4oCcJXPigJ3lkI7nvLrlsJHmk43kvZznrKYiCisKKyM6IHNyYy9nZXRhcmdzLmM6NzQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJleHRyYSBvcGVyYW5kICVzIgorbXNnc3RyICLpop3lpJbnmoTmk43kvZznrKbigJwlc+KAnSIKKworIzogc3JjL2dyYW0uYzoxMTIKK21zZ2lkICJlbXB0eSIKK21zZ3N0ciAi56m6IgorCisjOiBzcmMvZ3JhbS5jOjIwMQorbXNnaWQgIkdyYW1tYXIiCittc2dzdHIgIuivreazlSIKKworIzogc3JjL2dyYXBodml6LmM6NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIi8vIEdlbmVyYXRlZCBieSAlcy5cbiIKKyIvLyBSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorIi8vIEhvbWUgcGFnZTogPCVzPi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIi8vIOeUsSAlcyDnlJ/miJDjgIJcbiIKKyIvLyDlkJEgPCVzPiDmiqXlkYrpl67popjjgIJcbiIKKyIvLyDkuLvpobXvvJo8JXM+44CCXG4iCisiXG4iCisKKyM6IHNyYy9sb2NhdGlvbi5jOjkzIHNyYy9zY2FuLWdyYW0ubDo4NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSBudW1iZXIgb3ZlcmZsb3ciCittc2dzdHIgIuihjOWPt+a6ouWHuiIKKworIzogc3JjL2xvY2F0aW9uLmM6OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29sdW1uIG51bWJlciBvdmVyZmxvdyIKK21zZ3N0ciAi5YiX5Y+35rqi5Ye6IgorCisjOiBzcmMvbWFpbi5jOjE0NgorbXNnaWQgInJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cyIKK21zZ3N0ciAi55Sx5LqO5Yay56qB77yM6Kej5p6Q5Zmo5Lit55qE6KeE5YiZ5LiN6LW35L2c55SoIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJSVkZWZpbmUgdmFyaWFibGUgJXMgcmVkZWZpbmVkIgorbXNnc3RyICLph43mlrDlrprkuYnkuoYgJSVkZWZpbmUg5Y+Y6YeP4oCcJXPigJ0iCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NDUzCittc2dpZCAicHJldmlvdXMgZGVmaW5pdGlvbiIKK21zZ3N0ciAi5LiK5qyh5a6a5LmJIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ5MCBzcmMvbXVzY2xlLXRhYi5jOjUwNCBzcmMvbXVzY2xlLXRhYi5jOjU1NgorIzogc3JjL211c2NsZS10YWIuYzo2MjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgJXMiCittc2dzdHIgIiUlZGVmaW5lIOWPmOmHjyAlcyDnmoTlgLzml6DmlYjvvJrigJwlc+KAnSIKKworIzogc3JjL211c2NsZS10YWIuYzo1NTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICUlZGVmaW5lIEJvb2xlYW4gdmFyaWFibGUgJXMiCittc2dzdHIgIiUlZGVmaW5lIOW4g+WwlOWei+WPmOmHjyAlcyDnmoTlgLzml6DmlYgiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjA5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlJWRlZmluZSB2YXJpYWJsZSAlczogJXMiCittc2dzdHIgIiUlZGVmaW5lIOWPmOmHjyAlcyDnmoTlgLzml6DmlYjvvJrigJwlc+KAnSIKKworIzogc3JjL211c2NsZS10YWIuYzo2MTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImFjY2VwdGVkIHZhbHVlOiAlcyIKK21zZ3N0ciAi5o6l5Y+X55qE5YC877ya4oCcJXPigJ0iCisKKyM6IHNyYy9wYXJzZS1ncmFtLnk6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgaWRlbnRpZmllciBpbiBwYXJhbWV0ZXIgZGVjbGFyYXRpb24iCittc2dzdHIgIuWPguaVsOWjsOaYjuS4ree8uuWwkeivhuWIq+espiIKKworIzogc3JjL3ByaW50LmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIHR5cGUgJWQgaXMgJXNcbiIKK21zZ3N0ciAiIOexu+WeiyAlZCDkuLogJXNcbiIKKworIzogc3JjL3ByaW50LmM6MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgInNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgJWRcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvcHJpbnQuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ28gdG8gc3RhdGUgJWRcbiIKK21zZ3N0ciAi6L2s5Yiw54q25oCBICVkXG4iCisKKyM6IHNyYy9wcmludC5jOjIwMworbXNnaWQgImVycm9yIChub25hc3NvY2lhdGl2ZSlcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvcHJpbnQuYzoyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkdWNlIHVzaW5nIHJ1bGUgJWQgKCVzKSIKK21zZ3N0ciAiIgorCisjOiBzcmMvcHJpbnQuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWNjZXB0IgorbXNnc3RyICLmjqXlj5ciCisKKyM6IHNyYy9wcmludC5jOjI2NCBzcmMvcHJpbnQuYzozMzgKK21zZ2lkICIkZGVmYXVsdCIKK21zZ3N0ciAiJGRlZmF1bHQiCisKKyM6IHNyYy9wcmludC5jOjM3MyBzcmMvcHJpbnRfZ3JhcGguYzo3OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU3RhdGUgJWQiCittc2dzdHIgIueKtuaAgSAlZCIKKworIzogc3JjL3ByaW50LmM6NDA5Cittc2dpZCAiVGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyIgorbXNnc3RyICIiCisKKyM6IHNyYy9wcmludC5jOjQzNgorbXNnaWQgIk5vbnRlcm1pbmFscywgd2l0aCBydWxlcyB3aGVyZSB0aGV5IGFwcGVhciIKK21zZ3N0ciAiIgorCisjOiBzcmMvcHJpbnQuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uIGxlZnQ6IgorbXNnc3RyICIiCisKKyM6IHNyYy9wcmludC5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgb24gcmlnaHQ6IgorbXNnc3RyICIiCisKKyM6IHNyYy9wcmludC5jOjUxMAorbXNnaWQgIlJ1bGVzIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHMiCittc2dzdHIgIueUseS6juWGsueqge+8jOino+aekOWZqOS4reeahOinhOWImeS4jei1t+S9nOeUqCIKKworIzogc3JjL3JlYWRlci5jOjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlICVzIGRlY2xhcmF0aW9ucyIKK21zZ3N0ciAi5aSa5qyhICVzIOWumuS5iSIKKworIzogc3JjL3JlYWRlci5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJyZXN1bHQgdHlwZSBjbGFzaCBvbiBtZXJnZSBmdW5jdGlvbiAlczogPCVzPiAhPSA8JXM+IgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzoxMzkgc3JjL3N5bXRhYi5jOjE1NiBzcmMvc3ltdGFiLmM6MTY2IHNyYy9zeW10YWIuYzo5MzgKKyM6IHNyYy9zeW10YWIuYzo5NTMgc3JjL3N5bXRhYi5jOjk2OCBzcmMvc3ltdGFiLmM6OTgzCittc2dpZCAicHJldmlvdXMgZGVjbGFyYXRpb24iCittc2dzdHIgIuS4iuasoeWjsOaYjiIKKworIzogc3JjL3JlYWRlci5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGVkIHN5bWJvbCBuYW1lIGZvciAlcyBpZ25vcmVkIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzoyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVsZSBnaXZlbiBmb3IgJXMsIHdoaWNoIGlzIGEgdG9rZW4iCittc2dzdHIgIiIKKworIzogc3JjL3JlYWRlci5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ0eXBlIGNsYXNoIG9uIGRlZmF1bHQgYWN0aW9uOiA8JXM+ICE9IDwlcz4iCittc2dzdHIgIiIKKworIzogc3JjL3JlYWRlci5jOjMxMAorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBydWxlIGZvciB0eXBlZCBub250ZXJtaW5hbCwgYW5kIG5vIGFjdGlvbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVhZGVyLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNlZCB2YWx1ZTogJCVkIgorbXNnc3RyICLmnKrkvb/nlKjnmoTlgLzvvJokJWQiCisKKyM6IHNyYy9yZWFkZXIuYzozMzAKK21zZ2lkICJ1bnNldCB2YWx1ZTogJCQiCittc2dzdHIgIuacquiuvue9rueahOWAvO+8miQkIgorCisjOiBzcmMvcmVhZGVyLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgInRva2VuIGZvciAlJXByZWMgaXMgbm90IGRlZmluZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzo0MzEgc3JjL3JlYWRlci5jOjQ0NSBzcmMvcmVhZGVyLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgb25lICVzIGFsbG93ZWQgcGVyIHJ1bGUiCittc2dzdHIgIiIKKworIzogc3JjL3JlYWRlci5jOjQ0MSBzcmMvcmVhZGVyLmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFmZmVjdHMgb25seSBHTFIgcGFyc2VycyIKK21zZ3N0ciAiJXMg5Y+q5b2x5ZONIEdMUiDop6PmnpDlmagiCisKKyM6IHNyYy9yZWFkZXIuYzo0NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgbXVzdCBiZSBmb2xsb3dlZCBieSBwb3NpdGl2ZSBudW1iZXIiCittc2dzdHIgIiVzIOWQjumdouWPquiDvei3n+ato+aVsCIKKworIzogc3JjL3JlYWRlci5jOjU1NAorIywgYy1mb3JtYXQKK21zZ2lkICJydWxlIGlzIHRvbyBsb25nIgorbXNnc3RyICLop4TliJnov4fplb8iCisKKyM6IHNyYy9yZWFkZXIuYzo2NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcnVsZXMgaW4gdGhlIGlucHV0IGdyYW1tYXIiCittc2dzdHIgIui+k+WFpeivreazleS4reayoeacieinhOWImSIKKworIzogc3JjL3JlZHVjZS5jOjI0MQorbXNnaWQgInJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyICLor63ms5XkuK3nmoTop4TliJnml6DmlYgiCisKKyM6IHNyYy9yZWR1Y2UuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVkdWNlLmM6MzUwCittc2dpZCAiTm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVkdWNlLmM6MzYzCittc2dpZCAiVGVybWluYWxzIHVudXNlZCBpbiBncmFtbWFyIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWR1Y2UuYzozNzIKK21zZ2lkICJSdWxlcyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgIuivreazleS4reeahOinhOWImeaXoOaViCIKKworIzogc3JjL3JlZHVjZS5jOjM4NQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dpZF9wbHVyYWwgIiVkIG5vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHJbMF0gIiIKKworIzogc3JjL3JlZHVjZS5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ2lkX3BsdXJhbCAiJWQgcnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyWzBdICIiCisKKyM6IHNyYy9yZWR1Y2UuYzo0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnQgc3ltYm9sICVzIGRvZXMgbm90IGRlcml2ZSBhbnkgc2VudGVuY2UiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJheSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyMjkKK21zZ2lkICJhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZSIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjMyCittc2dpZCAiZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNlIG9mIFlZRkFJTCwgd2hpY2ggaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIgorbXNnc3RyICLkvb/nlKjkuoYgWVlGQUlM77yM5a6D5bey57uP5bqf5byD5bm25bCG6KKr56e76ZmkIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDMxIHNyYy9zY2FuLWNvZGUubDo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJzIHRvOiAlYyVzIGF0ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zc2libHkgbWVhbnQ6ICVjIgorbXNnc3RyICLlj6/og73mjIfvvJolYyIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICIsIGhpZGluZyAlYyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiBhdCAlcyIKK21zZ3N0ciAiIOS9jeS6jiAlcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ3MgorIywgYy1mb3JtYXQKK21zZ2lkICIsIGNhbm5vdCBiZSBhY2Nlc3NlZCBmcm9tIG1pZC1ydWxlIGFjdGlvbiBhdCAkJWQiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjUyMSBzcmMvc2Nhbi1ncmFtLmw6NzgzCisjLCBjLWZvcm1hdAorbXNnaWQgImludGVnZXIgb3V0IG9mIHJhbmdlOiAlcyIKK21zZ3N0ciAi5pW05pWw6LaF5Ye66IyD5Zu077yaJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWZlcmVuY2U6ICVzIgorbXNnc3RyICLml6DmlYjlvJXnlKjvvJolcyIKKworIzogc3JjL3NjYW4tY29kZS5sOjYxOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yIGFmdGVyICclYycsIGV4cGVjdGluZyBpbnRlZ2VyLCBsZXR0ZXIsICdfJywgJ1snLCBvciAnJCciCittc2dzdHIgIuKAnCVj4oCd5ZCO6K+t5rOV6ZSZ6K+v77yM5bqU5Li65pW05pWw44CB5a2X5q+N44CB4oCcX+KAneOAgeKAnFvigJ3miJbigJwk4oCdIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbiBiZWZvcmUgJCVkOiAlLipzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiAlLipzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzbGVhZGluZyByZWZlcmVuY2U6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIHJlZmVyZW5jZTogJXMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJleHBsaWNpdCB0eXBlIGdpdmVuIGluIHVudHlwZWQgZ3JhbW1hciIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NzU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiQkIGZvciB0aGUgbWlkcnVsZSBhdCAkJWQgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjc2NAorIywgYy1mb3JtYXQKK21zZ2lkICIkJCBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiQlcyBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmF5ICcsJyB0cmVhdGVkIGFzIHdoaXRlIHNwYWNlIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBkaXJlY3RpdmU6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudGlmaWVyOiAlcyIKK21zZ3N0ciAi5peg5pWI5qCH6K+G56ym77yaJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyOTUKKyMsIGZ1enp5Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIiCittc2dpZF9wbHVyYWwgImludmFsaWQgY2hhcmFjdGVycyIKK21zZ3N0clswXSAi5peg5pWI5a2X56ym77yaJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBpZGVudGlmaWVyIGluIGJyYWNrZXRlZCBuYW1lOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgImFuIGlkZW50aWZpZXIgZXhwZWN0ZWQiCittc2dzdHIgIuW6lOacieS4gOS4quagh+ivhuespiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjM4MQorIywgZnV6enkKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciBpbiBicmFja2V0ZWQgbmFtZSIKK21zZ2lkX3BsdXJhbCAiaW52YWxpZCBjaGFyYWN0ZXJzIGluIGJyYWNrZXRlZCBuYW1lIgorbXNnc3RyWzBdICLml6DmlYjlrZfnrKbvvJolcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjQ4MSBzcmMvc2Nhbi1ncmFtLmw6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGNoYXJhY3RlciBsaXRlcmFsIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo0ODYgc3JjL3NjYW4tZ3JhbS5sOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJleHRyYSBjaGFyYWN0ZXJzIGluIGNoYXJhY3RlciBsaXRlcmFsIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudWxsIGNoYXJhY3RlciIKK21zZ3N0ciAi5peg5pWI55qE56m65a2X56ymIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NTMxIHNyYy9zY2FuLWdyYW0ubDo1NDEgc3JjL3NjYW4tZ3JhbS5sOjU2MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBhZnRlciBcXC1lc2NhcGU6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgXFwtZXNjYXBlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6OTAxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzIGF0IGVuZCBvZiBmaWxlIgorbXNnc3RyICLmlofku7bmnKvlsL7nvLrlsJHigJwlc+KAnSIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjkxMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyBhdCBlbmQgb2YgbGluZSIKK21zZ3N0ciAi6KGM5bC+57y65bCR4oCcJXPigJ0iCisKKyM6IHNyYy9zY2FuLXNrZWwubDoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5jbG9zZWQgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIGZldyBhcmd1bWVudHMgZm9yICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1za2VsLmw6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBmb3IgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW1saXN0LmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJCB2YWx1ZTogJCVkIgorbXNnc3RyICLml6DmlYjnmoQgJCDlgLzvvJokJWQiCisKKyM6IHNyYy9zeW10YWIuYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJQT1NJWCBZYWNjIGZvcmJpZHMgZGFzaGVzIGluIHN5bWJvbCBuYW1lczogJXMiCittc2dzdHIgIlBPU0lYIFlhY2Mg56aB5q2i56ym5Y+35ZCN5Lit5pyJ56C05oqY5Y+377yaJXMiCisKKyM6IHNyYy9zeW10YWIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBzeW1ib2xzIGluIGlucHV0IGdyYW1tYXIgKGxpbWl0IGlzICVkKSIKK21zZ3N0ciAi6L6T5YWl6K+t5rOV5Lit55qE56ym5Y+36L+H5aSaKOmZkOWItuS4uiAlZCkiCisKKyM6IHNyYy9zeW10YWIuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVkZWNsYXJhdGlvbiBmb3IgJXMiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciA8JXM+IgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW10YWIuYzozMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIHJlZGVmaW5lZCIKK21zZ3N0ciAi56ym5Y+3ICVzIOmHjeWkjeWumuS5iSIKKworIzogc3JjL3N5bXRhYi5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgcmVkZWNsYXJlZCIKK21zZ3N0ciAi56ym5Y+3ICVzIOmHjeWkjeWjsOaYjiIKKworIzogc3JjL3N5bXRhYi5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlZmluaW5nIHVzZXIgdG9rZW4gbnVtYmVyIG9mICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW10YWIuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIGlzIHVzZWQsIGJ1dCBpcyBub3QgZGVmaW5lZCBhcyBhIHRva2VuIGFuZCBoYXMgbm8gcnVsZXMiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgdXNlZCBtb3JlIHRoYW4gb25jZSBhcyBhIGxpdGVyYWwgc3RyaW5nIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW10YWIuYzo0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIGdpdmVuIG1vcmUgdGhhbiBvbmUgbGl0ZXJhbCBzdHJpbmciCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2VyIHRva2VuIG51bWJlciAlZCByZWRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6NTM5CisjLCBjLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIGRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBzdGFydCBzeW1ib2wgJXMgaXMgdW5kZWZpbmVkIgorbXNnc3RyICLotbflp4vnrKblj7cgJXMg5pyq5a6a5LmJIgorCisjOiBzcmMvc3ltdGFiLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBzdGFydCBzeW1ib2wgJXMgaXMgYSB0b2tlbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6OTM1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICUlZGVzdHJ1Y3RvciIKK21zZ3N0ciAiIgorCisjOiBzcmMvc3ltdGFiLmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnbGVzcyAlJWRlc3RydWN0b3IiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlJXByaW50ZXIiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjk4MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJSVwcmludGVyIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzo2MyBkamdwcC9zdWJwaXBlLmM6Mjg2IGRqZ3BwL3N1YnBpcGUuYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3Zpbmcgb2YgJyVzJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjg1IGRqZ3BwL3N1YnBpcGUuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGlvbiBvZiBhIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgInNhdmluZyBzdGRpbiBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJzYXZpbmcgc3Rkb3V0IGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTUzIGRqZ3BwL3N1YnBpcGUuYzoxOTcgZGpncHAvc3VicGlwZS5jOjI1OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAib3BlbmluZyBvZiB0bXBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiX29wZW5fb3NmaGFuZGxlIOWksei0pSIKKworIzogZGpncHAvc3VicGlwZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBiaXNvbidzIHN0ZG91dCB0byB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgbTQncyBzdGRpbiBmcm9tIHRoZSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nIG9mIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgbTQncyBzdGRvdXQgdG8gYSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gJyVzJyBpbnRlcnJ1cHRlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgInN1YnNpZGlhcnkgcHJvZ3JhbSAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIGJpc29uJ3Mgc3RkaW4gZnJvbSB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGFyZ3VtZW50ICVzIGZvciAlcyIKK21zZ3N0ciAiJTIkcyDnmoTlj4LmlbAgJTEkcyDml6DmlYgiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgYXJndW1lbnQgJXMgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjE1MworbXNnaWQgIlZhbGlkIGFyZ3VtZW50cyBhcmU6IgorbXNnc3RyICLmnInmlYjlj4LmlbDkuLrvvJoiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYml0c2V0X2FsbG9jcywgJXUgZnJlZWQgKCUuMmYlJSkuXG4iCittc2dzdHIgIiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfc2V0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfcmVzZXRzLCAldSBjYWNoZWQgKCUuMmYlJSlcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF90ZXN0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfbGlzdHNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTkyCittc2dpZCAiY291bnQgbG9nIGhpc3RvZ3JhbVxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTUKK21zZ2lkICJzaXplIGxvZyBoaXN0b2dyYW1cbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTk4Cittc2dpZCAiZGVuc2l0eSBoaXN0b2dyYW1cbiIKK21zZ3N0ciAi5a+G5bqm55u05pa55Zu+XG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJpdHNldCBzdGF0aXN0aWNzOlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWNjdW11bGF0ZWQgcnVucyA9ICV1XG4iCittc2dzdHIgIue0r+iuoei/kOihjCA9ICV1XG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyNTkgbGliL2JpdHNldF9zdGF0cy5jOjI2NAorIywgZnV6enkKK21zZ2lkICJjYW5ub3QgcmVhZCBzdGF0cyBmaWxlIgorbXNnc3RyICLml6Dms5XliJvlu7rnrqHpgZMiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHN0YXRzIGZpbGUgc2l6ZVxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyODcgbGliL2JpdHNldF9zdGF0cy5jOjI4OQorIywgZnV6enkKK21zZ2lkICJjYW5ub3Qgd3JpdGUgc3RhdHMgZmlsZSIKK21zZ3N0ciAi5peg5rOV5Yib5bu6566h6YGTIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjkyCisjLCBmdXp6eQorbXNnaWQgImNhbm5vdCBvcGVuIHN0YXRzIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIuaXoOazleaJk+W8gOaWh+S7tuKAnCVz4oCdIgorCisjOiBsaWIvY2xvc2VvdXQuYzoxMTIKKyMsIGZ1enp5Cittc2dpZCAid3JpdGUgZXJyb3IiCittc2dzdHIgIuiHtOWRvemUmeivryIKKworIzogbGliL2Vycm9yLmM6MTg4Cittc2dpZCAiVW5rbm93biBzeXN0ZW0gZXJyb3IiCittc2dzdHIgIuacquefpeezu+e7n+mUmeivryIKKworIzogbGliL2dldG9wdC5jOjU0NyBsaWIvZ2V0b3B0LmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJyVzJyBpcyBhbWJpZ3VvdXM7IHBvc3NpYmlsaXRpZXM6IgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo2MjQgbGliL2dldG9wdC5jOjYyOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVz77ya4oCcLS0lc+KAnemAiemhueS4jeWFgeiuuOacieWPguaVsFxuIgorCisjOiBsaWIvZ2V0b3B0LmM6NjM3IGxpYi9nZXRvcHQuYzo2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnJWMlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlc++8muKAnCVjJXPigJ3pgInpobnkuI3lhYHorrjmnInlj4LmlbBcbiIKKworIzogbGliL2dldG9wdC5jOjY4NSBsaWIvZ2V0b3B0LmM6NzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy0tJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVz77ya4oCcLS0lc+KAnemAiemhuemcgOimgeS4gOS4quWPguaVsFxuIgorCisjOiBsaWIvZ2V0b3B0LmM6NzQyIGxpYi9nZXRvcHQuYzo3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gJy0tJXMnXG4iCittc2dzdHIgIiVz77ya5peg5rOV6K+G5Yir55qE6YCJ6aG54oCcLS0lc+KAnVxuIgorCisjOiBsaWIvZ2V0b3B0LmM6NzUzIGxpYi9nZXRvcHQuYzo3NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gJyVjJXMnXG4iCittc2dzdHIgIiVz77ya5peg5rOV6K+G5Yir55qE6YCJ6aG54oCcJWMlc+KAnVxuIgorCisjOiBsaWIvZ2V0b3B0LmM6ODA1IGxpYi9nZXRvcHQuYzo4MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgb3B0aW9uIC0tICclYydcbiIKK21zZ3N0ciAiJXPvvJrml6DmlYjpgInpobkgLS0g4oCcJWPigJ1cbiIKKworIzogbGliL2dldG9wdC5jOjg2MSBsaWIvZ2V0b3B0LmM6ODc4IGxpYi9nZXRvcHQuYzoxMDg4IGxpYi9nZXRvcHQuYzoxMTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgLS0gJyVjJ1xuIgorbXNnc3RyICIlc++8mumAiemhuemcgOimgeS4gOS4quWPguaVsCAtLSDigJwlY+KAnVxuIgorCisjOiBsaWIvZ2V0b3B0LmM6OTM0IGxpYi9nZXRvcHQuYzo5NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLVcgJXMnIGlzIGFtYmlndW91c1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo5NzQgbGliL2dldG9wdC5jOjk5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctVyAlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlc++8muKAnC1XICVz4oCd6YCJ6aG55LiN5YWB6K645pyJ5Y+C5pWwXG4iCisKKyM6IGxpYi9nZXRvcHQuYzoxMDEzIGxpYi9nZXRvcHQuYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlc++8muKAnC1XICVz4oCd6YCJ6aG56ZyA6KaB5LiA5Liq5Y+C5pWwXG4iCisKKyM6IGxpYi9vYnN0YWNrLmM6NDEzIGxpYi9vYnN0YWNrLmM6NDE1IGxpYi94YWxsb2MtZGllLmM6MzQKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICLlhoXlrZjogJflsL0iCisKKyM6IGxpYi9zcGF3bi1waXBlLmM6MTQwIGxpYi9zcGF3bi1waXBlLmM6MTQzIGxpYi9zcGF3bi1waXBlLmM6MjY0CisjOiBsaWIvc3Bhd24tcGlwZS5jOjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIHBpcGUiCittc2dzdHIgIuaXoOazleWIm+W7uueuoemBkyIKKworIzogbGliL3NwYXduLXBpcGUuYzoyMzQgbGliL3NwYXduLXBpcGUuYzozNDggbGliL3dhaXQtcHJvY2Vzcy5jOjI4MgorIzogbGliL3dhaXQtcHJvY2Vzcy5jOjM1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdWJwcm9jZXNzIGZhaWxlZCIKK21zZ3N0ciAiJXMg5a2Q6L+b56iL5aSx6LSlIgorCisjLiBUUkFOU0xBVE9SUzoKKyMuIEdldCB0cmFuc2xhdGlvbnMgZm9yIG9wZW4gYW5kIGNsb3NpbmcgcXVvdGF0aW9uIG1hcmtzLgorIy4gVGhlIG1lc3NhZ2UgY2F0YWxvZyBzaG91bGQgdHJhbnNsYXRlICJgIiB0byBhIGxlZnQKKyMuIHF1b3RhdGlvbiBtYXJrIHN1aXRhYmxlIGZvciB0aGUgbG9jYWxlLCBhbmQgc2ltaWxhcmx5IGZvcgorIy4gIiciLiAgRm9yIGV4YW1wbGUsIGEgRnJlbmNoIFVuaWNvZGUgbG9jYWwgc2hvdWxkIHRyYW5zbGF0ZQorIy4gdGhlc2UgdG8gVSswMEFCIChMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRQorIy4gUVVPVEFUSU9OIE1BUkspLCBhbmQgVSswMEJCIChSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUKKyMuIFFVT1RBVElPTiBNQVJLKSwgcmVzcGVjdGl2ZWx5LgorIy4KKyMuIElmIHRoZSBjYXRhbG9nIGhhcyBubyB0cmFuc2xhdGlvbiwgd2Ugd2lsbCB0cnkgdG8KKyMuIHVzZSBVbmljb2RlIFUrMjAxOCAoTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspIGFuZAorIy4gVW5pY29kZSBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykuICBJZiB0aGUKKyMuIGN1cnJlbnQgbG9jYWxlIGlzIG5vdCBVbmljb2RlLCBsb2NhbGVfcXVvdGluZ19zdHlsZQorIy4gd2lsbCBxdW90ZSAnbGlrZSB0aGlzJywgYW5kIGNsb2NhbGVfcXVvdGluZ19zdHlsZSB3aWxsCisjLiBxdW90ZSAibGlrZSB0aGlzIi4gIFlvdSBzaG91bGQgYWx3YXlzIGluY2x1ZGUgdHJhbnNsYXRpb25zCisjLiBmb3IgImAiIGFuZCAiJyIgZXZlbiBpZiBVKzIwMTggYW5kIFUrMjAxOSBhcmUgYXBwcm9wcmlhdGUKKyMuIGZvciB5b3VyIGxvY2FsZS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFya3NfaW5fb3RoZXJfbGFuZ3VhZ2VzPgorIy4gYW5kIHVzZSBnbHlwaHMgc3VpdGFibGUgZm9yIHlvdXIgbGFuZ3VhZ2UuCisjOiBsaWIvcXVvdGVhcmcuYzozMTIKK21zZ2lkICJgIgorbXNnc3RyICLigJwiCisKKyM6IGxpYi9xdW90ZWFyZy5jOjMxMworbXNnaWQgIiciCittc2dzdHIgIuKAnSIKKworIzogbGliL3RpbWV2YXIuYzo0NzUKK21zZ2lkICIiCisiXG4iCisiRXhlY3V0aW9uIHRpbWVzIChzZWNvbmRzKVxuIgorbXNnc3RyICIiCisiXG4iCisi5omn6KGM5pe26Ze0KOenkilcbiIKKworIzogbGliL3RpbWV2YXIuYzo1MjUKK21zZ2lkICIgVE9UQUwgICAgICAgICAgICAgICAgIDoiCittc2dzdHIgIiDmgLvorqEgICAgICAgICAgICAgICAgIO+8miIKKworIzogbGliL3RpbWV2YXIuYzo1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZSBpbiAlczogJWxkLiUwNmxkICglbGQlJSlcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvdzMyc3Bhd24uaDo0MworIywgYy1mb3JtYXQKK21zZ2lkICJfb3Blbl9vc2ZoYW5kbGUgZmFpbGVkIgorbXNnc3RyICJfb3Blbl9vc2ZoYW5kbGUg5aSx6LSlIgorCisjOiBsaWIvdzMyc3Bhd24uaDo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdG9yZSBmZCAlZDogZHVwMiBmYWlsZWQiCittc2dzdHIgIuaXoOazleaBouWkjeaWh+S7tuaPj+i/sOespiAlZO+8mmR1cDIg5aSx6LSlIgorCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6MjIzIGxpYi93YWl0LXByb2Nlc3MuYzoyNTUgbGliL3dhaXQtcHJvY2Vzcy5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdWJwcm9jZXNzIgorbXNnc3RyICIlcyDlrZDov5vnqIsiCisKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzoyNzQgbGliL3dhaXQtcHJvY2Vzcy5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdWJwcm9jZXNzIGdvdCBmYXRhbCBzaWduYWwgJWQiCittc2dzdHIgIiVzIOWtkOi/m+eoi+aUtuWIsOiHtOWRveS/oeWPtyAlZCIKKworI34gbXNnaWQgInN0YXRlICVkIgorI34gbXNnc3RyICLnirbmgIEgJWQiCisKKyN+IG1zZ2lkICIiCisjfiAidW5kZWZpbmVkICUlZGVmaW5lIHZhcmlhYmxlIGAlcycgcGFzc2VkIHRvIG11c2NsZV9wZXJjZW50X2RlZmluZV9nZXRfbG9jIgorI34gbXNnc3RyICLlsIbmnKrlrprkuYnnmoQgJSVkZWZpbmUg5Y+Y6YeP4oCcJXPigJ0g5Lyg6YCS57uZ5LqGIG11c2NsZV9wZXJjZW50X2RlZmluZV9nZXRfbG9jIgorCisjfiBtc2dpZCAiIgorI34gInVuZGVmaW5lZCAlJWRlZmluZSB2YXJpYWJsZSBgJXMnIHBhc3NlZCB0byAiCisjfiAibXVzY2xlX3BlcmNlbnRfZGVmaW5lX2dldF9zeW5jbGluZSIKKyN+IG1zZ3N0ciAiIgorI34gIuWwhuacquWumuS5ieeahCAlJWRlZmluZSDlj5jph4/igJwlc+KAneS8oOmAkue7meS6hiBtdXNjbGVfcGVyY2VudF9kZWZpbmVfZ2V0X3N5bmNsaW5lIgorCisjfiBtc2dpZCAiIgorI34gInVuZGVmaW5lZCAlJWRlZmluZSB2YXJpYWJsZSBgJXMnIHBhc3NlZCB0byBtdXNjbGVfcGVyY2VudF9kZWZpbmVfZmxhZ19pZiIKKyN+IG1zZ3N0ciAiIgorI34gIuWwhuacquWumuS5ieeahCAlJWRlZmluZSDlj5jph48g4oCcJXPigJ0g5Lyg6YCS57uZ5LqGIG11c2NsZV9wZXJjZW50X2RlZmluZV9mbGFnX2lmIgorCisjfiBtc2dpZCAiIgorI34gInVuZGVmaW5lZCAlJWRlZmluZSB2YXJpYWJsZSBgJXMnIHBhc3NlZCB0byAiCisjfiAibXVzY2xlX3BlcmNlbnRfZGVmaW5lX2NoZWNrX3ZhbHVlcyIKKyN+IG1zZ3N0ciAiIgorI34gIuWwhuacquWumuS5ieeahCAlJWRlZmluZSDlj5jph48g4oCcJXPigJ0g5Lyg6YCS57uZ5LqGIG11c2NsZV9wZXJjZW50X2RlZmluZV9jaGVja192YWx1ZXMiCmRpZmYgLS1naXQgYS9wby96aF9UVy5nbW8gYi9wby96aF9UVy5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGViNmIwMgotLS0gL2Rldi9udWxsCisrKyBiL3BvL3poX1RXLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby96aF9UVy5wbyBiL3BvL3poX1RXLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZmQyMTQKLS0tIC9kZXYvbnVsbAorKysgYi9wby96aF9UVy5wbwpAQCAtMCwwICsxLDExOTUgQEAKKyMgVHJhZGl0aW9uYWwgQ2hpbmVzZSBNZXNzYWdlcyBmb3IgYmlzb24uCisjIENvcHlyaWdodCAoQykgMjAwNiwgMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBiaXNvbiBwYWNrYWdlLgorIyBXZWktTHVuIENoYW8gPGNoYW93ZWlsdW5AZ21haWwuY29tPiwgMjAwNiwgMDcuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBiaXNvbiAyLjNhXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDctMDctMjMgMjI6MzYrMDgwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogV2VpLUx1biBDaGFvIDxjaGFvd2VpbHVuQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBDaGluZXNlICh0cmFkaXRpb25hbCkgPHpoLWwxMG5AbGludXgub3JnLnR3PlxuIgorIkxhbmd1YWdlOiB6aF9UV1xuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MTsgcGx1cmFsPTA7XG4iCisKKyM6IHNyYy9jb21wbGFpbi5jOjEyMCBzcmMvY29tcGxhaW4uYzoxMzEgc3JjL2NvbXBsYWluLmM6MTQwIHNyYy9jb21wbGFpbi5jOjE4OAorIzogc3JjL2NvbXBsYWluLmM6MTk4Cittc2dpZCAid2FybmluZyIKK21zZ3N0ciAi6K2m5ZGKIgorCisjOiBzcmMvY29tcGxhaW4uYzoxNTEgc3JjL2NvbXBsYWluLmM6MTYwIHNyYy9jb21wbGFpbi5jOjE2NworIywgZnV6enkKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAi6Ly45YWlL+i8uOWHuumMr+iqpCIKKworIzogc3JjL2NvbXBsYWluLmM6MjA4IHNyYy9jb21wbGFpbi5jOjIxNQorbXNnaWQgImZhdGFsIGVycm9yIgorbXNnc3RyICLlmrTph43pjK/oqqQiCisKKyM6IHNyYy9jb25mbGljdHMuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyBzaGlmdCIKK21zZ3N0ciAiICAgIOWcqOimj+WJhyAlZCDoiIfoqJjomZ8gJXMg5LmL6ZaT55qE6KGd56qB5Lul5YGP56e75L6G6Kej5rG6IgorCisjOiBzcmMvY29uZmxpY3RzLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgcmVkdWNlIgorbXNnc3RyICIgICAg5Zyo6KaP5YmHICVkIOiIh+iomOiZnyAlcyDkuYvplpPnmoTooZ3nqoHku6XnuK7muJvkvobop6PmsboiCisKKyM6IHNyYy9jb25mbGljdHMuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyByZXNvbHZlZCBhcyBhbiBlcnJvciIKK21zZ3N0ciAiICAgIOWcqOimj+WJhyAlZCDoiIfoqJjomZ8gJXMg5LmL6ZaT55qE6KGd56qB5Lul6KaW54K66Yyv6Kqk5L6G6Kej5rG6IgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgc2hpZnQvcmVkdWNlLCAlZCByZWR1Y2UvcmVkdWNlXG4iCittc2dzdHIgIuihneeqge+8miVkIOmgheWBj+enuy/nuK7muJvvvIwlZCDpoIXnuK7muJsv57iu5ribXG4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3RzOiAlZCBzaGlmdC9yZWR1Y2VcbiIKK21zZ3N0ciAi6KGd56qB77yaJWQg6aCF5YGP56e7L+e4rua4m1xuIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZsaWN0czogJWQgcmVkdWNlL3JlZHVjZVxuIgorbXNnc3RyICLooZ3nqoHvvJolZCDpoIXnuK7muJsv57iu5ribXG4iCisKKyM6IHNyYy9jb25mbGljdHMuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhdGUgJWQgIgorbXNnc3RyICLni4DmhYsgJWQgIgorCisjOiBzcmMvY29uZmxpY3RzLmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlZXhwZWN0LXJyIGFwcGxpZXMgb25seSB0byBHTFIgcGFyc2VycyIKK21zZ3N0ciAiJSVleHBlY3QtcnIg5Y+q5aWX55So5YiwIEdMUiDliZbmnpDlmagiCisKKyM6IHNyYy9jb25mbGljdHMuYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJleHBlY3RlZCAlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIgorbXNnc3RyWzBdICLpoJDmnJ/mnIkgJWQg6aCF5YGP56e7L+e4rua4m+ihneeqgSIKKworIzogc3JjL2NvbmZsaWN0cy5jOjYyMQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCAlZCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJleHBlY3RlZCAlZCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAi6aCQ5pyf5pyJICVkIOmghee4rua4my/nuK7muJvooZ3nqoEiCisKKyM6IHNyYy9maWxlcy5jOjExNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBvcGVuIgorbXNnc3RyICLnhKHms5XplovllZ/mqpTmoYjjgIwlc+OAjSIKKworIzogc3JjL2ZpbGVzLmM6MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImlucHV0L291dHB1dCBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBzcmMvZmlsZXMuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNsb3NlIGZpbGUiCittc2dzdHIgIueEoeazlemXnOmWieaqlOahiCIKKworIzogc3JjL2ZpbGVzLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIG92ZXJ3cml0ZSB0aGUgaW5wdXQgZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvZmlsZXMuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmxpY3Rpbmcgb3V0cHV0cyB0byBmaWxlICVzIgorbXNnc3RyICLovLjlh7roh7PmqpTmoYggJXMg5pmC55m855Sf6KGd56qBIgorCisjOiBzcmMvZ2V0YXJncy5jOjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCittc2dzdHIgIuiri+WYl+ippuWft+ihjOOAjCVzIC0taGVscOOAjeS+hueNsuWPluabtOWkmuizh+ioiuOAglxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgW09QVElPTl0uLi4gRklMRVxuIgorbXNnc3RyICLnlKjms5XvvJolcyBb6YG46aCFXS4uLiDmqpTmoYhcbiIKKworIzogc3JjL2dldGFyZ3MuYzozMDIKK21zZ2lkICIiCisiR2VuZXJhdGUgYSBkZXRlcm1pbmlzdGljIExSIG9yIGdlbmVyYWxpemVkIExSIChHTFIpIHBhcnNlciBlbXBsb3lpbmdcbiIKKyJMQUxSKDEpLCBJRUxSKDEpLCBvciBjYW5vbmljYWwgTFIoMSkgcGFyc2VyIHRhYmxlcy4gIElFTFIoMSkgYW5kXG4iCisiY2Fub25pY2FsIExSKDEpIHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6MzA5Cittc2dpZCAiIgorIk1hbmRhdG9yeSBhcmd1bWVudHMgdG8gbG9uZyBvcHRpb25zIGFyZSBtYW5kYXRvcnkgZm9yIHNob3J0IG9wdGlvbnMgdG9vLlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6MzEyCittc2dpZCAiVGhlIHNhbWUgaXMgdHJ1ZSBmb3Igb3B0aW9uYWwgYXJndW1lbnRzLlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6MzE2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJPcGVyYXRpb24gbW9kZXM6XG4iCisiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIKKyIgICAgICAtLXByaW50LWxvY2FsZWRpciAgICAgIG91dHB1dCBkaXJlY3RvcnkgY29udGFpbmluZyBsb2NhbGUtZGVwZW5kZW50ICIKKyJkYXRhXG4iCisiICAgICAgLS1wcmludC1kYXRhZGlyICAgICAgICBvdXRwdXQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgc2tlbGV0b25zIGFuZCBYU0xUXG4iCisiICAteSwgLS15YWNjICAgICAgICAgICAgICAgICBlbXVsYXRlIFBPU0lYIFlhY2NcbiIKKyIgIC1XLCAtLXdhcm5pbmdzWz1DQVRFR09SWV0gIHJlcG9ydCB0aGUgd2FybmluZ3MgZmFsbGluZyBpbiBDQVRFR09SWVxuIgorIiAgLWYsIC0tZmVhdHVyZVs9RkVBVFVSRV0gICAgYWN0aXZhdGUgbWlzY2VsbGFuZW91cyBmZWF0dXJlc1xuIgorIlxuIgorbXNnc3RyICIiCisi5pON5L2c5qih5byP77yaXG4iCisiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICDpoa/npLrmraToqqrmmI7kuKbpm6LplotcbiIKKyIgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgIOi8uOWHuueJiOacrOizh+ioiuS4pumboumWi1xuIgorIiAgICAgIC0tcHJpbnQtbG9jYWxlZGlyICAgICAg6Ly45Ye65YyF5ZCr6Kqe5Y2A55u45L6d6LOH5paZ55qE55uu6YyEXG4iCisiICAteSwgLS15YWNjICAgICAgICAgICAgICAgICDmqKHmk6wgUE9TSVggeWFjY1xuIgorCisjOiBzcmMvZ2V0YXJncy5jOjMyOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnNlcjpcbiIKKyIgIC1MLCAtLWxhbmd1YWdlPUxBTkdVQUdFICAgICAgICAgIHNwZWNpZnkgdGhlIG91dHB1dCBwcm9ncmFtbWluZyBsYW5ndWFnZVxuIgorIiAgLVMsIC0tc2tlbGV0b249RklMRSAgICAgICAgICAgICAgc3BlY2lmeSB0aGUgc2tlbGV0b24gdG8gdXNlXG4iCisiICAtdCwgLS1kZWJ1ZyAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50IHRoZSBwYXJzZXIgZm9yIGRlYnVnZ2luZ1xuIgorIiAgICAgIC0tbG9jYXRpb25zICAgICAgICAgICAgICAgICAgZW5hYmxlIGxvY2F0aW9uIHN1cHBvcnRcbiIKKyIgIC1ELCAtLWRlZmluZT1OQU1FWz1WQUxVRV0gICAgICAgIHNpbWlsYXIgdG8gJyVkZWZpbmUgTkFNRSBcIlZBTFVFXCInXG4iCisiICAtRiwgLS1mb3JjZS1kZWZpbmU9TkFNRVs9VkFMVUVdICBvdmVycmlkZSAnJWRlZmluZSBOQU1FIFwiVkFMVUVcIidcbiIKKyIgIC1wLCAtLW5hbWUtcHJlZml4PVBSRUZJWCAgICAgICAgIHByZXBlbmQgUFJFRklYIHRvIHRoZSBleHRlcm5hbCBzeW1ib2xzXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXByZWNhdGVkIGJ5ICctRGFwaS5wcmVmaXg9UFJFRklYJ1xuIgorIiAgLWwsIC0tbm8tbGluZXMgICAgICAgICAgICAgICAgICAgZG9uJ3QgZ2VuZXJhdGUgJyNsaW5lJyBkaXJlY3RpdmVzXG4iCisiICAtaywgLS10b2tlbi10YWJsZSAgICAgICAgICAgICAgICBpbmNsdWRlIGEgdGFibGUgb2YgdG9rZW4gbmFtZXNcbiIKK21zZ3N0ciAiIgorIuWJluaekOWZqO+8mlxuIgorIiAgLVMsIC0tc2tlbGV0b249RklMRSAgICAgICAg5oyH5a6a5omA5L2/55So55qE5p625qeLXG4iCisiICAtdCwgLS1kZWJ1ZyAgICAgICAgICAgICAgICDmj5DkvpvnlKjmlrzlgbXpjK/nmoTliZbmnpDlmahcbiIKKyIgICAgICAtLWxvY2F0aW9ucyAgICAgICAgICAgIOWVn+eUqOS9jee9ruioiOeul1xuIgorIiAgLXAsIC0tbmFtZS1wcmVmaXg9UFJFRklYICAg5YmN572uIFBSRUZJWCDmlrzlpJbpg6jnrKbomZ9cbiIKKyIgIC1sLCAtLW5vLWxpbmVzICAgICAgICAgICAgIOS4jeeUoueUn+OAjCNsaW5l44CN5oyH5LukXG4iCisiICAtbiwgLS1uby1wYXJzZXIgICAgICAgICAgICDlj6rnlKLnlJ/ooajmoLxcbiIKKyIgIC1rLCAtLXRva2VuLXRhYmxlICAgICAgICAgIOWMheWQq+iomOiZn+WQjeeoseihqOagvFxuIgorCisjOiBzcmMvZ2V0YXJncy5jOjM0NgorIywgZnV6enkKK21zZ2lkICIiCisiT3V0cHV0OlxuIgorIiAgICAgIC0tZGVmaW5lc1s9RklMRV0gICAgICAgYWxzbyBwcm9kdWNlIGEgaGVhZGVyIGZpbGVcbiIKKyIgIC1kICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2V3aXNlIGJ1dCBjYW5ub3Qgc3BlY2lmeSBGSUxFIChmb3IgUE9TSVggIgorIllhY2MpXG4iCisiICAtciwgLS1yZXBvcnQ9VEhJTkdTICAgICAgICBhbHNvIHByb2R1Y2UgZGV0YWlscyBvbiB0aGUgYXV0b21hdG9uXG4iCisiICAgICAgLS1yZXBvcnQtZmlsZT1GSUxFICAgICB3cml0ZSByZXBvcnQgdG8gRklMRVxuIgorIiAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgc2FtZSBhcyBgLS1yZXBvcnQ9c3RhdGUnXG4iCisiICAtYiwgLS1maWxlLXByZWZpeD1QUkVGSVggICBzcGVjaWZ5IGEgUFJFRklYIGZvciBvdXRwdXQgZmlsZXNcbiIKKyIgIC1vLCAtLW91dHB1dD1GSUxFICAgICAgICAgIGxlYXZlIG91dHB1dCB0byBGSUxFXG4iCisiICAtZywgLS1ncmFwaFs9RklMRV0gICAgICAgICBhbHNvIG91dHB1dCBhIGdyYXBoIG9mIHRoZSBhdXRvbWF0b25cbiIKKyIgIC14LCAtLXhtbFs9RklMRV0gICAgICAgICAgIGFsc28gb3V0cHV0IGFuIFhNTCByZXBvcnQgb2YgdGhlIGF1dG9tYXRvblxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoZSBYTUwgc2NoZW1hIGlzIGV4cGVyaW1lbnRhbClcbiIKK21zZ3N0ciAiIgorIui8uOWHuu+8mlxuIgorIiAgLWQsIC0tZGVmaW5lcyAgICAgICAgICAgICAg5ZCM5pmC55Si55Sf5qiZ6aCt5qqU5qGIXG4iCisiICAtciwgLS1yZXBvcnQ9VEhJTkdTICAgICAgICDlkIzmmYLlnKjoh6rli5Xoo53nva7kuIrnlKLnlJ/ntLDnr4BcbiIKKyIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIOWmguWQjOOAjC0tcmVwb3J0PXN0YXRl44CNXG4iCisiICAtYiwgLS1maWxlLXByZWZpeD1QUkVGSVggICDmjIflrprnlKjmlrzovLjlh7rmqpTmoYjnmoQgUFJFRklYXG4iCisiICAtbywgLS1vdXRwdXQ9RklMRSAgICAgICAgICDkv53nlZnovLjlh7rliLAgRklMRVxuIgorIiAgLWcsIC0tZ3JhcGggICAgICAgICAgICAgICAg5ZCM5pmC55Si55Sf6Ieq5YuV6KOd572uIFZDRyDnmoTmj4/ov7BcbiIKKworIzogc3JjL2dldGFyZ3MuYzozNjEKK21zZ2lkICIiCisiV2FybmluZyBjYXRlZ29yaWVzIGluY2x1ZGU6XG4iCisiICBgbWlkcnVsZS12YWx1ZXMnICB1bnNldCBvciB1bnVzZWQgbWlkcnVsZSB2YWx1ZXNcbiIKKyIgIGB5YWNjJyAgICAgICAgICAgIGluY29tcGF0aWJpbGl0aWVzIHdpdGggUE9TSVggWWFjY1xuIgorIiAgYGNvbmZsaWN0cy1zcicgICAgUy9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGNvbmZsaWN0cy1ycicgICAgUi9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuIgorIiAgYGRlcHJlY2F0ZWQnICAgICAgb2Jzb2xldGUgY29uc3RydWN0c1xuIgorIiAgYG90aGVyJyAgICAgICAgICAgYWxsIG90aGVyIHdhcm5pbmdzIChlbmFibGVkIGJ5IGRlZmF1bHQpXG4iCisiICBgYWxsJyAgICAgICAgICAgICBhbGwgdGhlIHdhcm5pbmdzXG4iCisiICBgbm8tQ0FURUdPUlknICAgICB0dXJuIG9mZiB3YXJuaW5ncyBpbiBDQVRFR09SWVxuIgorIiAgYG5vbmUnICAgICAgICAgICAgdHVybiBvZmYgYWxsIHRoZSB3YXJuaW5nc1xuIgorIiAgYGVycm9yJyAgICAgICAgICAgdHJlYXQgd2FybmluZ3MgYXMgZXJyb3JzXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzozNzYKK21zZ2lkICIiCisiVEhJTkdTIGlzIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMgdGhhdCBjYW4gaW5jbHVkZTpcbiIKKyIgIGBzdGF0ZScgICAgICAgIGRlc2NyaWJlIHRoZSBzdGF0ZXNcbiIKKyIgIGBpdGVtc2V0JyAgICAgIGNvbXBsZXRlIHRoZSBjb3JlIGl0ZW0gc2V0cyB3aXRoIHRoZWlyIGNsb3N1cmVcbiIKKyIgIGBsb29rYWhlYWQnICAgIGV4cGxpY2l0bHkgYXNzb2NpYXRlIGxvb2thaGVhZCB0b2tlbnMgdG8gaXRlbXNcbiIKKyIgIGBzb2x2ZWQnICAgICAgIGRlc2NyaWJlIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMgc29sdmluZ1xuIgorIiAgYGFsbCcgICAgICAgICAgaW5jbHVkZSBhbGwgdGhlIGFib3ZlIGluZm9ybWF0aW9uXG4iCisiICBgbm9uZScgICAgICAgICBkaXNhYmxlIHRoZSByZXBvcnRcbiIKK21zZ3N0ciAiIgorIlRISU5HUyDmmK/ku6XpgJfomZ/miYDliIbpmpTnmoTlrZfoqZ7muIXllq7vvIzlhbbkuK3lj6/ku6XljIXlkKvvvJpcbiIKKyIgIGBzdGF0ZScgICAgICAgIOaPj+i/sOeLgOaFi1xuIgorIiAgYGl0ZW1zZXQnICAgICAg5a6M5oiQ5qC45b+D6aCF55uu6ZuG5ZCI5Lim6ZmE5pyJ5a6D5YCR55qE57WQ5p2fXG4iCisiICBgbG9va2FoZWFkJyAgICDmmI7norrlnLDlsIfpoJDkvLDoqJjomZ/pl5zoga/liLDpoIXnm65cbiIKKyIgIGBzb2x2ZWQnICAgICAgIOaPj+i/sOato+WcqOino+axuueahOWBj+enuy/nuK7muJvooZ3nqoFcbiIKKyIgIGBhbGwnICAgICAgICAgIOWMheWQq+aJgOacieS7peS4iueahOizh+ioilxuIgorIiAgYG5vbmUnICAgICAgICAg5YGc55So5aCx5ZGKXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzg3Cittc2dpZCAiIgorIkZFQVRVUkUgaXMgYSBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCB3b3JkcyB0aGF0IGNhbiBpbmNsdWRlOlxuIgorIiAgYGNhcmV0JyAgICAgICAgc2hvdyBlcnJvcnMgd2l0aCBjYXJldHNcbiIKKyIgIGBhbGwnICAgICAgICAgIGFsbCBvZiB0aGUgYWJvdmVcbiIKKyIgIGBub25lJyAgICAgICAgIGRpc2FibGUgYWxsIG9mIHRoZSBhYm92ZVxuIgorIiAgIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorbXNnc3RyICLlm57loLHpjK/oqqToq4vlr4QgPCIKKworIzogc3JjL2dldGFyZ3MuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaG9tZSBwYWdlOiA8JXM+LlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6Mzk3Cittc2dpZCAiR2VuZXJhbCBoZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4uXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IFJlcGxhY2UgTEFOR19DT0RFIGluIHRoaXMgVVJMIHdpdGggeW91ciBsYW5ndWFnZQorIy4gY29kZSA8aHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS9MQU5HX0NPREUuaHRtbD4gdG8KKyMuIGZvcm0gb25lIG9mIHRoZSBVUkxzIGF0IGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vLgorIy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRoZSBlbnRpcmUgVVJMIHdpdGggeW91ciB0cmFuc2xhdGlvbiB0ZWFtJ3MKKyMuIGVtYWlsIGFkZHJlc3MuCisjOiBzcmMvZ2V0YXJncy5jOjQxMAorbXNnaWQgIlJlcG9ydCB0cmFuc2xhdGlvbiBidWdzIHRvIDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtLz4uXG4iCittc2dzdHIgIiIKKworIzogc3JjL2dldGFyZ3MuYzo0MTIKK21zZ2lkICJGb3IgY29tcGxldGUgZG9jdW1lbnRhdGlvbiwgcnVuOiBpbmZvIGJpc29uLlxuIgorbXNnc3RyICIiCisKKyM6IHNyYy9nZXRhcmdzLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImJpc29uIChHTlUgQmlzb24pICVzIgorbXNnc3RyICJiaXNvbiAoR05VIEJpc29uKSAlcyIKKworIzogc3JjL2dldGFyZ3MuYzo0MzAKK21zZ2lkICJXcml0dGVuIGJ5IFJvYmVydCBDb3JiZXR0IGFuZCBSaWNoYXJkIFN0YWxsbWFuLlxuIgorbXNnc3RyICLnlLEgUm9iZXJ0IENvcmJldHQg6IiHIFJpY2hhcmQgU3RhbGxtYW4g57eo5a+r44CCXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcHlyaWdodCAoQykgJWQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCittc2dzdHIgIueJiOasiuaJgOaciSAoQykgJWQg6Ieq55Sx6Luf6auU5Z+66YeR5pyD44CCXG4iCisKKyM6IHNyYy9nZXRhcmdzLmM6NDM3Cittc2dpZCAiIgorIlRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PXG4iCisid2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuXG4iCittc2dzdHIgIiIKKyLpgJnmmK/oh6rnlLHou5/pq5TvvJvoq4vlj4PogIPljp/lp4vnorznmoTniYjmrIrogbLmmI7jgILmnKzou5/pq5TkuI3mj5Dkvpvku7vkvZXkv53orYnvvIznlJroh7PkuI3mnIPljIXmi6xcbiIKKyLlj6/llK7mgKfmiJbpgannlKjmlrzku7vkvZXnibnlrprnm67nmoTnmoTkv53orYnjgIJcbiIKKworIzogc3JjL2dldGFyZ3MuYzo0NTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHNrZWxldG9uIGRlY2xhcmF0aW9ucyBhcmUgaW52YWxpZCIKK21zZ3N0ciAi5aSa6YeNICVzIOWuo+WRiiIKKworIzogc3JjL2dldGFyZ3MuYzo0NzYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIGxhbmd1YWdlIgorbXNnc3RyICLnhKHmlYjnmoTlrZflhYPvvJolcyIKKworIzogc3JjL2dldGFyZ3MuYzo0NzkKKyMsIGZ1enp5Cittc2dpZCAibXVsdGlwbGUgbGFuZ3VhZ2UgZGVjbGFyYXRpb25zIGFyZSBpbnZhbGlkIgorbXNnc3RyICLlpJrph40gJXMg5a6j5ZGKIgorCisjOiBzcmMvZ2V0YXJncy5jOjc0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG1pc3Npbmcgb3BlcmFuZCIKK21zZ3N0ciAi44CMJXPjgI3kuYvlvoznvLrlsJHkuobpgYvnrpflhYMiCisKKyM6IHNyYy9nZXRhcmdzLmM6NzQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJleHRyYSBvcGVyYW5kICVzIgorbXNnc3RyICLlpJrppJjnmoTpgYvnrpflhYPjgIwlc+OAjSIKKworIzogc3JjL2dyYW0uYzoxMTIKK21zZ2lkICJlbXB0eSIKK21zZ3N0ciAi56m655m9IgorCisjOiBzcmMvZ3JhbS5jOjIwMQorbXNnaWQgIkdyYW1tYXIiCittc2dzdHIgIuaWh+azlSIKKworIzogc3JjL2dyYXBodml6LmM6NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIi8vIEdlbmVyYXRlZCBieSAlcy5cbiIKKyIvLyBSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorIi8vIEhvbWUgcGFnZTogPCVzPi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvbG9jYXRpb24uYzo5MyBzcmMvc2Nhbi1ncmFtLmw6ODU5CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgbnVtYmVyIG92ZXJmbG93IgorbXNnc3RyICLliJfomZ/muqLkvY0iCisKKyM6IHNyYy9sb2NhdGlvbi5jOjk1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjb2x1bW4gbnVtYmVyIG92ZXJmbG93IgorbXNnc3RyICLliJfomZ/muqLkvY0iCisKKyM6IHNyYy9tYWluLmM6MTQ2CisjLCBmdXp6eQorbXNnaWQgInJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cyIKK21zZ3N0ciAi55Sx5pa855m855Sf6KGd56qB5bCO6Ie06KaP5YmH5LiA55u054Sh5rOV57iu5ribIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJSVkZWZpbmUgdmFyaWFibGUgJXMgcmVkZWZpbmVkIgorbXNnc3RyICLnrKbomZ8gJXMg6KKr6YeN5paw5a6a576pIgorCisjOiBzcmMvbXVzY2xlLXRhYi5jOjQ1MworIywgZnV6enkKK21zZ2lkICJwcmV2aW91cyBkZWZpbml0aW9uIgorbXNnc3RyICLliY3mrKHlrqPlkYoiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NDkwIHNyYy9tdXNjbGUtdGFiLmM6NTA0IHNyYy9tdXNjbGUtdGFiLmM6NTU2CisjOiBzcmMvbXVzY2xlLXRhYi5jOjYyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5kZWZpbmVkICUlZGVmaW5lIHZhcmlhYmxlICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICUlZGVmaW5lIEJvb2xlYW4gdmFyaWFibGUgJXMiCittc2dzdHIgIiIKKworIzogc3JjL211c2NsZS10YWIuYzo2MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJSVkZWZpbmUgdmFyaWFibGUgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9tdXNjbGUtdGFiLmM6NjEzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJhY2NlcHRlZCB2YWx1ZTogJXMiCittc2dzdHIgIuacquS9v+eUqOeahOWAvO+8miQlZCIKKworIzogc3JjL3BhcnNlLWdyYW0ueTo3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBpZGVudGlmaWVyIGluIHBhcmFtZXRlciBkZWNsYXJhdGlvbiIKK21zZ3N0ciAi5Zyo5Y+D5pW45a6j5ZGK5Lit57y65bCR6K2Y5Yil6aCFIgorCisjOiBzcmMvcHJpbnQuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICIgdHlwZSAlZCBpcyAlc1xuIgorbXNnc3RyICLpoZ7lnosgJWQg54K6ICVzXG4iCisKKyM6IHNyYy9wcmludC5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICJzaGlmdCwgYW5kIGdvIHRvIHN0YXRlICVkXG4iCittc2dzdHIgIuWBj+enu++8jOS4pumAsuWFpeeLgOaFiyAlZFxuIgorCisjOiBzcmMvcHJpbnQuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ28gdG8gc3RhdGUgJWRcbiIKK21zZ3N0ciAi6YCy5YWl54uA5oWLICVkXG4iCisKKyM6IHNyYy9wcmludC5jOjIwMworbXNnaWQgImVycm9yIChub25hc3NvY2lhdGl2ZSlcbiIKK21zZ3N0ciAi6Yyv6KqkICjpnZ7nm7joga/nmoQpXG4iCisKKyM6IHNyYy9wcmludC5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWR1Y2UgdXNpbmcgcnVsZSAlZCAoJXMpIgorbXNnc3RyICLkvb/nlKjopo/liYcgJWQg5Lul57iu5ribICglcykiCisKKyM6IHNyYy9wcmludC5jOjIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJhY2NlcHQiCittc2dzdHIgIuaOpeWPlyIKKworIzogc3JjL3ByaW50LmM6MjY0IHNyYy9wcmludC5jOjMzOAorbXNnaWQgIiRkZWZhdWx0IgorbXNnc3RyICIk6aCQ6KitIgorCisjOiBzcmMvcHJpbnQuYzozNzMgc3JjL3ByaW50X2dyYXBoLmM6NzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlN0YXRlICVkIgorbXNnc3RyICLni4DmhYsgJWQgIgorCisjOiBzcmMvcHJpbnQuYzo0MDkKK21zZ2lkICJUZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIiCittc2dzdHIgIue1gue1kOiqnuipnu+8jOmZhOacieWug+WAkeWHuuePvuiZleeahOimj+WJhyIKKworIzogc3JjL3ByaW50LmM6NDM2Cittc2dpZCAiTm9udGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyIgorbXNnc3RyICLpnZ7ntYLntZDoqp7oqZ7vvIzpmYTmnInlroPlgJHlh7rnj77omZXnmoTopo/liYciCisKKyM6IHNyYy9wcmludC5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICIgb24gbGVmdDoiCittc2dzdHIgIuaWvOW3puWBtO+8miIKKworIzogc3JjL3ByaW50LmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiByaWdodDoiCittc2dzdHIgIuaWvOWPs+WBtO+8miIKKworIzogc3JjL3ByaW50LmM6NTEwCisjLCBmdXp6eQorbXNnaWQgIlJ1bGVzIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHMiCittc2dzdHIgIueUseaWvOeZvOeUn+ihneeqgeWwjuiHtOimj+WJh+S4gOebtOeEoeazlee4rua4myIKKworIzogc3JjL3JlYWRlci5jOjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlICVzIGRlY2xhcmF0aW9ucyIKK21zZ3N0ciAi5aSa6YeNICVzIOWuo+WRiiIKKworIzogc3JjL3JlYWRlci5jOjEzMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicmVzdWx0IHR5cGUgY2xhc2ggb24gbWVyZ2UgZnVuY3Rpb24gJXM6IDwlcz4gIT0gPCVzPiIKK21zZ3N0ciAi57WQ5p6c6aGe5Z6L6IiH5ZCI5L215Yqf6IO955u45oq16Ke444CMJXPjgI3vvJo8JXM+ICE9IDwlcz4iCisKKyM6IHNyYy9yZWFkZXIuYzoxMzkgc3JjL3N5bXRhYi5jOjE1NiBzcmMvc3ltdGFiLmM6MTY2IHNyYy9zeW10YWIuYzo5MzgKKyM6IHNyYy9zeW10YWIuYzo5NTMgc3JjL3N5bXRhYi5jOjk2OCBzcmMvc3ltdGFiLmM6OTgzCittc2dpZCAicHJldmlvdXMgZGVjbGFyYXRpb24iCittc2dzdHIgIuWJjeasoeWuo+WRiiIKKworIzogc3JjL3JlYWRlci5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGVkIHN5bWJvbCBuYW1lIGZvciAlcyBpZ25vcmVkIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWFkZXIuYzoyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVsZSBnaXZlbiBmb3IgJXMsIHdoaWNoIGlzIGEgdG9rZW4iCittc2dzdHIgIueUqOaWvCAlcyDpgJnpoIXoqJjomZ/nmoTopo/liYciCisKKyM6IHNyYy9yZWFkZXIuYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidHlwZSBjbGFzaCBvbiBkZWZhdWx0IGFjdGlvbjogPCVzPiAhPSA8JXM+IgorbXNnc3RyICLpoZ7lnovoiIfpoJDoqK3li5XkvZznm7jmirXop7jvvJo8JXM+ICE9IDwlcz4iCisKKyM6IHNyYy9yZWFkZXIuYzozMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgcnVsZSBmb3IgdHlwZWQgbm9udGVybWluYWwsIGFuZCBubyBhY3Rpb24iCittc2dzdHIgIuepuueZveimj+WJh+eUqOaWvOizpuS6iOmhnuWei+eahOmdnue1gue1kOiqnuipnu+8jOS7peWPiuaykuacieWLleS9nCIKKworIzogc3JjL3JlYWRlci5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnVzZWQgdmFsdWU6ICQlZCIKK21zZ3N0ciAi5pyq5L2/55So55qE5YC877yaJCVkIgorCisjOiBzcmMvcmVhZGVyLmM6MzMwCittc2dpZCAidW5zZXQgdmFsdWU6ICQkIgorbXNnc3RyICLop6PpmaToqK3lrprlgLzvvJokJCIKKworIzogc3JjL3JlYWRlci5jOjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b2tlbiBmb3IgJSVwcmVjIGlzIG5vdCBkZWZpbmVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvcmVhZGVyLmM6NDMxIHNyYy9yZWFkZXIuYzo0NDUgc3JjL3JlYWRlci5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5IG9uZSAlcyBhbGxvd2VkIHBlciBydWxlIgorbXNnc3RyICLmr4/lgIvopo/liYflj6rlhYHoqLHkuIDlgIsgJXMiCisKKyM6IHNyYy9yZWFkZXIuYzo0NDEgc3JjL3JlYWRlci5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhZmZlY3RzIG9ubHkgR0xSIHBhcnNlcnMiCittc2dzdHIgIiVzIOWPquW9semfvyBHTFIg5YmW5p6Q5ZmoIgorCisjOiBzcmMvcmVhZGVyLmM6NDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIG11c3QgYmUgZm9sbG93ZWQgYnkgcG9zaXRpdmUgbnVtYmVyIgorbXNnc3RyICIlcyDlv4XpoIjlnKjmraPmlbjkuYvlvowiCisKKyM6IHNyYy9yZWFkZXIuYzo1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVsZSBpcyB0b28gbG9uZyIKK21zZ3N0ciAi6KaP5YmH5aSq6ZW3IgorCisjOiBzcmMvcmVhZGVyLmM6NjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJ1bGVzIGluIHRoZSBpbnB1dCBncmFtbWFyIgorbXNnc3RyICLlnKjovLjlhaXmlofms5XkuK3mspLmnInopo/liYciCisKKyM6IHNyYy9yZWR1Y2UuYzoyNDEKKyMsIGZ1enp5Cittc2dpZCAicnVsZSB1c2VsZXNzIGluIGdyYW1tYXIiCittc2dzdHIgIuWcqOi8uOWFpeaWh+azleS4reaykuacieimj+WJhyIKKworIzogc3JjL3JlZHVjZS5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9yZWR1Y2UuYzozNTAKKyMsIGZ1enp5Cittc2dpZCAiTm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAi6Z2e57WC57WQ6Kqe6Kme77yM6ZmE5pyJ5a6D5YCR5Ye654++6JmV55qE6KaP5YmHIgorCisjOiBzcmMvcmVkdWNlLmM6MzYzCisjLCBmdXp6eQorbXNnaWQgIlRlcm1pbmFscyB1bnVzZWQgaW4gZ3JhbW1hciIKK21zZ3N0ciAi5Zyo6Ly45YWl5paH5rOV5Lit5rKS5pyJ6KaP5YmHIgorCisjOiBzcmMvcmVkdWNlLmM6MzcyCisjLCBmdXp6eQorbXNnaWQgIlJ1bGVzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0ciAi5Zyo6Ly45YWl5paH5rOV5Lit5rKS5pyJ6KaP5YmHIgorCisjOiBzcmMvcmVkdWNlLmM6Mzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ2lkX3BsdXJhbCAiJWQgbm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ3N0clswXSAiIgorCisjOiBzcmMvcmVkdWNlLmM6MzkwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlZCBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hciIKK21zZ2lkX3BsdXJhbCAiJWQgcnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyIgorbXNnc3RyWzBdICLlnKjovLjlhaXmlofms5XkuK3mspLmnInopo/liYciCisKKyM6IHNyYy9yZWR1Y2UuYzo0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnQgc3ltYm9sICVzIGRvZXMgbm90IGRlcml2ZSBhbnkgc2VudGVuY2UiCittc2dzdHIgIuWVn+Wni+espuiZnyAlcyDkuI3ooY3nlJ/ku7vkvZXlj6XlrZAiCisKKyM6IHNyYy9zY2FuLWNvZGUubDoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYXkgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjI5Cittc2dpZCAiYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjIzMgorbXNnaWQgImZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVzZSBvZiBZWUZBSUwsIHdoaWNoIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NDMxIHNyYy9zY2FuLWNvZGUubDo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJzIHRvOiAlYyVzIGF0ICVzIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zc2libHkgbWVhbnQ6ICVjIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCBoaWRpbmcgJWMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICIgYXQgJXMiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjQ3MgorIywgYy1mb3JtYXQKK21zZ2lkICIsIGNhbm5vdCBiZSBhY2Nlc3NlZCBmcm9tIG1pZC1ydWxlIGFjdGlvbiBhdCAkJWQiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjUyMSBzcmMvc2Nhbi1ncmFtLmw6NzgzCisjLCBjLWZvcm1hdAorbXNnaWQgImludGVnZXIgb3V0IG9mIHJhbmdlOiAlcyIKK21zZ3N0ciAi5pW05pW46LaF6YGO56+E5ZyN77yaJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAi54Sh5pWI55qE5oyH5Luk77yaJXMiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo2MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yIGFmdGVyICclYycsIGV4cGVjdGluZyBpbnRlZ2VyLCBsZXR0ZXIsICdfJywgJ1snLCBvciAnJCciCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb24gYmVmb3JlICQlZDogJS4qcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjMzCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogJS4qcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc2xlYWRpbmcgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1jb2RlLmw6NjYzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAiJTIkcyDnmoTlvJXmlbggJTEkcyDkuI3mmI7noroiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwbGljaXQgdHlwZSBnaXZlbiBpbiB1bnR5cGVkIGdyYW1tYXIiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjc1OQorIywgYy1mb3JtYXQKK21zZ2lkICIkJCBmb3IgdGhlIG1pZHJ1bGUgYXQgJCVkIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWNvZGUubDo3NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJCQgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tY29kZS5sOjc4NgorIywgYy1mb3JtYXQKK21zZ2lkICIkJXMgb2YgJXMgaGFzIG5vIGRlY2xhcmVkIHR5cGUiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjE0OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic3RyYXkgJywnIHRyZWF0ZWQgYXMgd2hpdGUgc3BhY2UiCittc2dzdHIgIumbtuaYn+eahOOAjCzjgI3mnIPooqvoppbngrrnqbrnmb0iCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBkaXJlY3RpdmU6ICVzIgorbXNnc3RyICLnhKHmlYjnmoTmjIfku6TvvJolcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjI1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudGlmaWVyOiAlcyIKK21zZ3N0ciAi54Sh5pWI55qE5oyH5Luk77yaJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDoyOTUKKyMsIGZ1enp5Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIiCittc2dpZF9wbHVyYWwgImludmFsaWQgY2hhcmFjdGVycyIKK21zZ3N0clswXSAi54Sh5pWI55qE5a2X5YWD77yaJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBpZGVudGlmaWVyIGluIGJyYWNrZXRlZCBuYW1lOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgImFuIGlkZW50aWZpZXIgZXhwZWN0ZWQiCittc2dzdHIgIiIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjM4MQorIywgZnV6enkKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlciBpbiBicmFja2V0ZWQgbmFtZSIKK21zZ2lkX3BsdXJhbCAiaW52YWxpZCBjaGFyYWN0ZXJzIGluIGJyYWNrZXRlZCBuYW1lIgorbXNnc3RyWzBdICLnhKHmlYjnmoTlrZflhYPvvJolcyIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjQ4MSBzcmMvc2Nhbi1ncmFtLmw6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGNoYXJhY3RlciBsaXRlcmFsIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo0ODYgc3JjL3NjYW4tZ3JhbS5sOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJleHRyYSBjaGFyYWN0ZXJzIGluIGNoYXJhY3RlciBsaXRlcmFsIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudWxsIGNoYXJhY3RlciIKK21zZ3N0ciAi54Sh5pWI55qE56m65a2X5YWDIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6NTMxIHNyYy9zY2FuLWdyYW0ubDo1NDEgc3JjL3NjYW4tZ3JhbS5sOjU2MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgYWZ0ZXIgXFwtZXNjYXBlOiAlcyIKK21zZ3N0ciAi54Sh5pWI55qE56m65a2X5YWD77yaJXMiCisKKyM6IHNyYy9zY2FuLWdyYW0ubDo1NzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY2hhcmFjdGVyIGFmdGVyIFxcLWVzY2FwZTogJXMiCittc2dzdHIgIueEoeaViOeahOWtl+WFg++8miVzIgorCisjOiBzcmMvc2Nhbi1ncmFtLmw6OTAxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzIGF0IGVuZCBvZiBmaWxlIgorbXNnc3RyICLmqpTmoYjmnKvnq6/nvLrlsJHjgIwlc+OAjSIKKworIzogc3JjL3NjYW4tZ3JhbS5sOjkxMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyBhdCBlbmQgb2YgbGluZSIKK21zZ3N0ciAi5YiX5bC+57y65bCR44CMJXPjgI0iCisKKyM6IHNyYy9zY2FuLXNrZWwubDoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5jbG9zZWQgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICIiCisKKyM6IHNyYy9zY2FuLXNrZWwubDoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIGZldyBhcmd1bWVudHMgZm9yICVzIGRpcmVjdGl2ZSBpbiBza2VsZXRvbiIKK21zZ3N0ciAiIgorCisjOiBzcmMvc2Nhbi1za2VsLmw6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBmb3IgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIgorbXNnc3RyICIiCisKKyM6IHNyYy9zeW1saXN0LmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJCB2YWx1ZTogJCVkIgorbXNnc3RyICLnhKHmlYjnmoQgJCDlgLzvvJokJWQiCisKKyM6IHNyYy9zeW10YWIuYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJQT1NJWCBZYWNjIGZvcmJpZHMgZGFzaGVzIGluIHN5bWJvbCBuYW1lczogJXMiCittc2dzdHIgIiIKKworIzogc3JjL3N5bXRhYi5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IHN5bWJvbHMgaW4gaW5wdXQgZ3JhbW1hciAobGltaXQgaXMgJWQpIgorbXNnc3RyICLlnKjovLjlhaXmlofms5XkuK3lpKrlpJrnrKbomZ8gKOmZkOWItueCuiAlZCkiCisKKyM6IHNyYy9zeW10YWIuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVkZWNsYXJhdGlvbiBmb3IgJXMiCittc2dzdHIgIiVzIOmHjeikh+Wuo+WRiuS6hiAlcyIKKworIzogc3JjL3N5bXRhYi5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZWRlY2xhcmF0aW9uIGZvciA8JXM+IgorbXNnc3RyICIlcyDph43opIflrqPlkYrkuoYgPCVzPiIKKworIzogc3JjL3N5bXRhYi5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgcmVkZWZpbmVkIgorbXNnc3RyICLnrKbomZ8gJXMg6KKr6YeN5paw5a6a576pIgorCisjOiBzcmMvc3ltdGFiLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyByZWRlY2xhcmVkIgorbXNnc3RyICLnrKbomZ8gJXMg6KKr6YeN5paw5a6j5ZGKIgorCisjOiBzcmMvc3ltdGFiLmM6MzY3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGVmaW5pbmcgdXNlciB0b2tlbiBudW1iZXIgb2YgJXMiCittc2dzdHIgIumHjeaWsOWumue+qSAlcyDnmoTkvb/nlKjogIXoqJjomZ/mlbjnm64iCisKKyM6IHNyYy9zeW10YWIuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ltYm9sICVzIGlzIHVzZWQsIGJ1dCBpcyBub3QgZGVmaW5lZCBhcyBhIHRva2VuIGFuZCBoYXMgbm8gcnVsZXMiCittc2dzdHIgIuespuiZnyAlcyDlt7Lkvb/nlKjpgY7vvIzkvYbmmK/kuKbmnKrlrprnvqnngrroqJjomZ/kuZ/mspLmnInopo/liYciCisKKyM6IHNyYy9zeW10YWIuYzo0MTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN5bWJvbCAlcyB1c2VkIG1vcmUgdGhhbiBvbmNlIGFzIGEgbGl0ZXJhbCBzdHJpbmciCittc2dzdHIgIuespuiZn+OAjCVz44CN6KKr6LaF6YGO5LiA5qyh5YGa54K65bi45YC85a2X5Liy5L2/55SoIgorCisjOiBzcmMvc3ltdGFiLmM6NDE4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzeW1ib2wgJXMgZ2l2ZW4gbW9yZSB0aGFuIG9uZSBsaXRlcmFsIHN0cmluZyIKK21zZ3N0ciAi56ym6Jmf44CMJXPjgI3ntabkuojkuIDlgIvku6XkuIrnmoTljp/mloflrZfkuLIiCisKKyM6IHNyYy9zeW10YWIuYzo1MzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVzZXIgdG9rZW4gbnVtYmVyICVkIHJlZGVjbGFyYXRpb24gZm9yICVzIgorbXNnc3RyICIlcyDph43opIflrqPlkYrkuoYgJXMiCisKKyM6IHNyYy9zeW10YWIuYzo1MzkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIGRlY2xhcmF0aW9uIGZvciAlcyIKK21zZ3N0ciAi5YmN5qyh5a6j5ZGKIgorCisjOiBzcmMvc3ltdGFiLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBzdGFydCBzeW1ib2wgJXMgaXMgdW5kZWZpbmVkIgorbXNnc3RyICLmnKrlrprnvqnotbflp4vnrKbomZ8gJXMiCisKKyM6IHNyYy9zeW10YWIuYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHN0YXJ0IHN5bWJvbCAlcyBpcyBhIHRva2VuIgorbXNnc3RyICLotbflp4vnrKbomZ8gJXMg5piv5LiA6aCF6KiY6JmfIgorCisjOiBzcmMvc3ltdGFiLmM6OTM1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlJWRlc3RydWN0b3IiCittc2dzdHIgIumHjeikh+Wuo+WRiuS6humgkOioreeahCAlJWRlc3RydWN0b3IiCisKKyM6IHNyYy9zeW10YWIuYzo5NTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnbGVzcyAlJWRlc3RydWN0b3IiCittc2dzdHIgIumHjeikh+Wuo+WRiuS6humgkOioreeahCAlJWRlc3RydWN0b3IiCisKKyM6IHNyYy9zeW10YWIuYzo5NjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICUlcHJpbnRlciIKK21zZ3N0ciAi6YeN6KSH5a6j5ZGK5LqG6aCQ6Kit55qEICUlcHJpbnRlciIKKworIzogc3JjL3N5bXRhYi5jOjk4MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdsZXNzICUlcHJpbnRlciIKK21zZ3N0ciAi6YeN6KSH5a6j5ZGK5LqG6aCQ6Kit55qEICUlcHJpbnRlciIKKworIzogZGpncHAvc3VicGlwZS5jOjYzIGRqZ3BwL3N1YnBpcGUuYzoyODYgZGpncHAvc3VicGlwZS5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdmluZyBvZiAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6ODUgZGpncHAvc3VicGlwZS5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNyZWF0aW9uIG9mIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAic2F2aW5nIHN0ZGluIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgInNhdmluZyBzdGRvdXQgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoxNTMgZGpncHAvc3VicGlwZS5jOjE5NyBkamdwcC9zdWJwaXBlLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZW5pbmcgb2YgdG1wZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyBiaXNvbidzIHN0ZG91dCB0byB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgbTQncyBzdGRpbiBmcm9tIHRoZSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nIG9mIGEgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRqZ3BwL3N1YnBpcGUuYzoyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgbTQncyBzdGRvdXQgdG8gYSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGpncHAvc3VicGlwZS5jOjIzNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic3Vic2lkaWFyeSBwcm9ncmFtICclcycgaW50ZXJydXB0ZWQiCittc2dzdHIgIueEoeazleWft+ihjOi8lOWKqeeoi+W8j+OAjCVz44CNIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjQxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzdWJzaWRpYXJ5IHByb2dyYW0gJyVzJyBub3QgZm91bmQiCittc2dzdHIgIueEoeazleWft+ihjOi8lOWKqeeoi+W8j+OAjCVz44CNIgorCisjOiBkamdwcC9zdWJwaXBlLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIGJpc29uJ3Mgc3RkaW4gZnJvbSB0aGUgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGFyZ3VtZW50ICVzIGZvciAlcyIKK21zZ3N0ciAiJTIkcyDnmoTlvJXmlbggJTEkcyDnhKHmlYgiCisKKyM6IGxpYi9hcmdtYXRjaC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgYXJndW1lbnQgJXMgZm9yICVzIgorbXNnc3RyICIlMiRzIOeahOW8leaVuCAlMSRzIOS4jeaYjueiuiIKKworIzogbGliL2FyZ21hdGNoLmM6MTUzCittc2dpZCAiVmFsaWQgYXJndW1lbnRzIGFyZToiCittc2dzdHIgIuacieaViOeahOW8leaVuOeCuu+8miIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfYWxsb2NzLCAldSBmcmVlZCAoJS4yZiUlKS5cbiIKK21zZ3N0ciAiJXUgYml0c2V0X2FsbG9jc++8jCV1IOW3sumHi+aUviAoJS4yZiUlKeOAglxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9zZXRzLCAldSBjYWNoZWQgKCUuMmYlJSlcbiIKK21zZ3N0ciAiJXUgYml0c2V0X3NldHPvvIwldSDlt7Llv6vlj5YgKCUuMmYlJSlcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICIldSBiaXRzZXRfcmVzZXRzLCAldSBjYWNoZWQgKCUuMmYlJSlcbiIKK21zZ3N0ciAiJXUgYml0c2V0X3Jlc2V0c++8jCV1IOW3suW/q+WPliAoJS4yZiUlKVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF90ZXN0cywgJXUgY2FjaGVkICglLjJmJSUpXG4iCittc2dzdHIgIiV1IGJpdHNldF90ZXN0c++8jCV1IOW3suW/q+WPliAoJS4yZiUlKVxuIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJpdHNldF9saXN0c1xuIgorbXNnc3RyICIldSBiaXRzZXRfbGlzdHNcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjE5MgorbXNnaWQgImNvdW50IGxvZyBoaXN0b2dyYW1cbiIKK21zZ3N0ciAi6KiI566X5pel6KqM6ZW35qKd5ZyWXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTUKK21zZ2lkICJzaXplIGxvZyBoaXN0b2dyYW1cbiIKK21zZ3N0ciAi6Kq/5pW05pel6KqM6ZW35qKd5ZyW5aSn5bCPXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoxOTgKK21zZ2lkICJkZW5zaXR5IGhpc3RvZ3JhbVxuIgorbXNnc3RyICLlr4bluqbplbfmop3lnJZcbiIKKworIzogbGliL2JpdHNldF9zdGF0cy5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQml0c2V0IHN0YXRpc3RpY3M6XG4iCisiXG4iCittc2dzdHIgIiIKKyJCaXRzZXQg57Wx6KiI77yaXG4iCisiXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWNjdW11bGF0ZWQgcnVucyA9ICV1XG4iCittc2dzdHIgIue0r+epjeeahOWft+ihjCA9ICV1XG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyNTkgbGliL2JpdHNldF9zdGF0cy5jOjI2NAorIywgZnV6enkKK21zZ2lkICJjYW5ub3QgcmVhZCBzdGF0cyBmaWxlIgorbXNnc3RyICLnhKHms5XoroDlj5bntbHoqIjmqpTjgIIiCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyNjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImJhZCBzdGF0cyBmaWxlIHNpemVcbiIKK21zZ3N0ciAi5LiN55W255qE57Wx6KiI5qqU5aSn5bCP44CCXG4iCisKKyM6IGxpYi9iaXRzZXRfc3RhdHMuYzoyODcgbGliL2JpdHNldF9zdGF0cy5jOjI4OQorIywgZnV6enkKK21zZ2lkICJjYW5ub3Qgd3JpdGUgc3RhdHMgZmlsZSIKK21zZ3N0ciAi54Sh5rOV5a+r5YWl57Wx6KiI5qqU44CCIgorCisjOiBsaWIvYml0c2V0X3N0YXRzLmM6MjkyCisjLCBmdXp6eQorbXNnaWQgImNhbm5vdCBvcGVuIHN0YXRzIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIuWvq+WFpeaZgueEoeazlemWi+WVn+e1seioiOaqlOOAgiIKKworIzogbGliL2Nsb3Nlb3V0LmM6MTEyCisjLCBmdXp6eQorbXNnaWQgIndyaXRlIGVycm9yIgorbXNnc3RyICLlmrTph43pjK/oqqQiCisKKyM6IGxpYi9lcnJvci5jOjE4OAorbXNnaWQgIlVua25vd24gc3lzdGVtIGVycm9yIgorbXNnc3RyICLkuI3mmI7nmoTns7vntbHpjK/oqqQiCisKKyM6IGxpYi9nZXRvcHQuYzo1NDcgbGliL2dldG9wdC5jOjU3NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnJXMnIGlzIGFtYmlndW91czsgcG9zc2liaWxpdGllczoiCittc2dzdHIgIiVz77ya6YG46aCF44CMJXPjgI3kuI3mmI7norpcbiIKKworIzogbGliL2dldG9wdC5jOjYyNCBsaWIvZ2V0b3B0LmM6NjI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uICctLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVz77ya6YG46aCF44CMLS0lc+OAjeS4jeWPr+mFjeWQiOW8leaVuOS9v+eUqFxuIgorCisjOiBsaWIvZ2V0b3B0LmM6NjM3IGxpYi9nZXRvcHQuYzo2NDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJyVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXPvvJrpgbjpoIXjgIwlYyVz44CN5LiN5Y+v6YWN5ZCI5byV5pW45L2/55SoXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo2ODUgbGliL2dldG9wdC5jOjcwNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiAnLS0lcycgcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiJXPvvJrpgbjpoIXjgIwlc+OAjemcgOimgeW8leaVuFxuIgorCisjOiBsaWIvZ2V0b3B0LmM6NzQyIGxpYi9nZXRvcHQuYzo3NDUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uICctLSVzJ1xuIgorbXNnc3RyICIlc++8mueEoeazleitmOWIpeeahOmBuOmgheOAjC0tJXPjgI1cbiIKKworIzogbGliL2dldG9wdC5jOjc1MyBsaWIvZ2V0b3B0LmM6NzU2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiAnJWMlcydcbiIKK21zZ3N0ciAiJXPvvJrnhKHms5XorZjliKXnmoTpgbjpoIXjgIwlYyVz44CNXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo4MDUgbGliL2dldG9wdC5jOjgwOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgb3B0aW9uIC0tICclYydcbiIKK21zZ3N0ciAiJXPvvJrnhKHmlYjnmoTpgbjpoIUg4pSAICVjXG4iCisKKyM6IGxpYi9nZXRvcHQuYzo4NjEgbGliL2dldG9wdC5jOjg3OCBsaWIvZ2V0b3B0LmM6MTA4OCBsaWIvZ2V0b3B0LmM6MTEwNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAnJWMnXG4iCittc2dzdHIgIiVz77ya6YG46aCF6ZyA6KaB5byV5pW4IOKUgCAlY1xuIgorCisjOiBsaWIvZ2V0b3B0LmM6OTM0IGxpYi9nZXRvcHQuYzo5NTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyBpcyBhbWJpZ3VvdXNcbiIKK21zZ3N0ciAiJXPvvJrpgbjpoIXjgIwtVyAlc+OAjeS4jeaYjueiulxuIgorCisjOiBsaWIvZ2V0b3B0LmM6OTc0IGxpYi9nZXRvcHQuYzo5OTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiVz77ya6YG46aCF44CMLVcgJXPjgI3kuI3lj6/phY3lkIjlvJXmlbjkvb/nlKhcbiIKKworIzogbGliL2dldG9wdC5jOjEwMTMgbGliL2dldG9wdC5jOjEwMzEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gJy1XICVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIlc++8mumBuOmgheOAjCVz44CN6ZyA6KaB5byV5pW4XG4iCisKKyM6IGxpYi9vYnN0YWNrLmM6NDEzIGxpYi9vYnN0YWNrLmM6NDE1IGxpYi94YWxsb2MtZGllLmM6MzQKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICLoqJjmhrbpq5TogJfnm6EiCisKKyM6IGxpYi9zcGF3bi1waXBlLmM6MTQwIGxpYi9zcGF3bi1waXBlLmM6MTQzIGxpYi9zcGF3bi1waXBlLmM6MjY0CisjOiBsaWIvc3Bhd24tcGlwZS5jOjI2NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBwaXBlIgorbXNnc3RyICLnhKHms5Xpl5zplonmqpTmoYgiCisKKyM6IGxpYi9zcGF3bi1waXBlLmM6MjM0IGxpYi9zcGF3bi1waXBlLmM6MzQ4IGxpYi93YWl0LXByb2Nlc3MuYzoyODIKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3VicHJvY2VzcyBmYWlsZWQiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6CisjLiBHZXQgdHJhbnNsYXRpb25zIGZvciBvcGVuIGFuZCBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrcy4KKyMuIFRoZSBtZXNzYWdlIGNhdGFsb2cgc2hvdWxkIHRyYW5zbGF0ZSAiYCIgdG8gYSBsZWZ0CisjLiBxdW90YXRpb24gbWFyayBzdWl0YWJsZSBmb3IgdGhlIGxvY2FsZSwgYW5kIHNpbWlsYXJseSBmb3IKKyMuICInIi4gIEZvciBleGFtcGxlLCBhIEZyZW5jaCBVbmljb2RlIGxvY2FsIHNob3VsZCB0cmFuc2xhdGUKKyMuIHRoZXNlIHRvIFUrMDBBQiAoTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUKKyMuIFFVT1RBVElPTiBNQVJLKSwgYW5kIFUrMDBCQiAoUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFCisjLiBRVU9UQVRJT04gTUFSSyksIHJlc3BlY3RpdmVseS4KKyMuCisjLiBJZiB0aGUgY2F0YWxvZyBoYXMgbm8gdHJhbnNsYXRpb24sIHdlIHdpbGwgdHJ5IHRvCisjLiB1c2UgVW5pY29kZSBVKzIwMTggKExFRlQgU0lOR0xFIFFVT1RBVElPTiBNQVJLKSBhbmQKKyMuIFVuaWNvZGUgVSsyMDE5IChSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspLiAgSWYgdGhlCisjLiBjdXJyZW50IGxvY2FsZSBpcyBub3QgVW5pY29kZSwgbG9jYWxlX3F1b3Rpbmdfc3R5bGUKKyMuIHdpbGwgcXVvdGUgJ2xpa2UgdGhpcycsIGFuZCBjbG9jYWxlX3F1b3Rpbmdfc3R5bGUgd2lsbAorIy4gcXVvdGUgImxpa2UgdGhpcyIuICBZb3Ugc2hvdWxkIGFsd2F5cyBpbmNsdWRlIHRyYW5zbGF0aW9ucworIy4gZm9yICJgIiBhbmQgIiciIGV2ZW4gaWYgVSsyMDE4IGFuZCBVKzIwMTkgYXJlIGFwcHJvcHJpYXRlCisjLiBmb3IgeW91ciBsb2NhbGUuCisjLgorIy4gSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBwdXQgaGVyZSwgcGxlYXNlIHNlZQorIy4gPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUXVvdGF0aW9uX21hcmtzX2luX290aGVyX2xhbmd1YWdlcz4KKyMuIGFuZCB1c2UgZ2x5cGhzIHN1aXRhYmxlIGZvciB5b3VyIGxhbmd1YWdlLgorIzogbGliL3F1b3RlYXJnLmM6MzEyCittc2dpZCAiYCIKK21zZ3N0ciAi44CMIgorCisjOiBsaWIvcXVvdGVhcmcuYzozMTMKK21zZ2lkICInIgorbXNnc3RyICLjgI0iCisKKyM6IGxpYi90aW1ldmFyLmM6NDc1Cittc2dpZCAiIgorIlxuIgorIkV4ZWN1dGlvbiB0aW1lcyAoc2Vjb25kcylcbiIKK21zZ3N0ciAiIgorIlxuIgorIuWft+ihjOaZgumWkyAo56eSKVxuIgorCisjOiBsaWIvdGltZXZhci5jOjUyNQorbXNnaWQgIiBUT1RBTCAgICAgICAgICAgICAgICAgOiIKK21zZ3N0ciAiIOe4veioiCAgICAgICAgICAgICAgICAg77yaIgorCisjOiBsaWIvdGltZXZhci5jOjU2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lIGluICVzOiAlbGQuJTA2bGQgKCVsZCUlKVxuIgorbXNnc3RyICIlcyDkuK3nmoTmmYLplpPvvJolbGQuJTA2bGQgKCVsZCUlKVxuIgorCisjOiBsaWIvdzMyc3Bhd24uaDo0MworIywgYy1mb3JtYXQKK21zZ2lkICJfb3Blbl9vc2ZoYW5kbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi93MzJzcGF3bi5oOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXN0b3JlIGZkICVkOiBkdXAyIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvd2FpdC1wcm9jZXNzLmM6MjIzIGxpYi93YWl0LXByb2Nlc3MuYzoyNTUgbGliL3dhaXQtcHJvY2Vzcy5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdWJwcm9jZXNzIgorbXNnc3RyICIiCisKKyM6IGxpYi93YWl0LXByb2Nlc3MuYzoyNzQgbGliL3dhaXQtcHJvY2Vzcy5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdWJwcm9jZXNzIGdvdCBmYXRhbCBzaWduYWwgJWQiCittc2dzdHIgIiIKKworI34gbXNnaWQgInN0YXRlICVkIgorI34gbXNnc3RyICLni4DmhYsgJWQiCisKKyN+IG1zZ2lkICJHTlUgYmlzb24gZ2VuZXJhdGVzIExBTFIoMSkgYW5kIEdMUiBwYXJzZXJzLlxuIgorI34gbXNnc3RyICJHTlUgYmlzb24g55Si55SfIExBTFIoMSkg6IiHIEdMUiDliZbmnpDlmajjgIJcbiIKKworI34gbXNnaWQgIiIKKyN+ICJJZiBhIGxvbmcgb3B0aW9uIHNob3dzIGFuIGFyZ3VtZW50IGFzIG1hbmRhdG9yeSwgdGhlbiBpdCBpcyBtYW5kYXRvcnlcbiIKKyN+ICJmb3IgdGhlIGVxdWl2YWxlbnQgc2hvcnQgb3B0aW9uIGFsc28uICBTaW1pbGFybHkgZm9yIG9wdGlvbmFsIGFyZ3VtZW50cy5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIuWmguaenOafkOWAi+mVt+mBuOmgheW/hemgiOS9v+eUqOW8leaVuO+8jOWcqOWwjeetieeahOefremBuOmgheS4remAmeS6m+W8leaVuOS5n+aYr+W/hemgiOeahOOAglxuIgorI34gIumBuOaTh+aAp+eahOW8leaVuOS5n+aciemhnuS8vOeahOimj+WumuOAglxuIgorCisjfiBtc2dpZCAiUnVsZXMgbmV2ZXIgcmVkdWNlZCIKKyN+IG1zZ3N0ciAi5rC45LiN57iu5rib55qE6KaP5YmHIgorCisjfiBtc2dpZCAidXNlbGVzcyBydWxlIgorI34gbXNnc3RyICLmspLnlKjliLDnmoTopo/liYciCisKKyN+IG1zZ2lkICJ1c2VsZXNzIG5vbnRlcm1pbmFsOiAlcyIKKyN+IG1zZ3N0ciAi5rKS55So5Yiw55qE6Z2e57WC57WQ56ym6Jmf77yaJXMiCisKKyN+IG1zZ2lkICJVc2VsZXNzIG5vbnRlcm1pbmFscyIKKyN+IG1zZ3N0ciAi5rKS55So5Yiw55qE6Z2e57WC57WQ56ym6JmfIgorCisjfiBtc2dpZCAiVGVybWluYWxzIHdoaWNoIGFyZSBub3QgdXNlZCIKKyN+IG1zZ3N0ciAi5rKS55So5Yiw55qE57WC57WQ56ym6JmfIgorCisjfiBtc2dpZCAiVXNlbGVzcyBydWxlcyIKKyN+IG1zZ3N0ciAi5rKS55So5Yiw55qE6KaP5YmHIgorCisjfiBtc2dpZCAiJWQgcnVsZSBuZXZlciByZWR1Y2VkXG4iCisjfiBtc2dpZF9wbHVyYWwgIiVkIHJ1bGVzIG5ldmVyIHJlZHVjZWRcbiIKKyN+IG1zZ3N0clswXSAiJWQg5qKd6KaP5YmH5rC45LiN57iu5ribXG4iCisKKyN+IG1zZ2lkICIlZCB1c2VsZXNzIG5vbnRlcm1pbmFsIgorI34gbXNnaWRfcGx1cmFsICIlZCB1c2VsZXNzIG5vbnRlcm1pbmFscyIKKyN+IG1zZ3N0clswXSAiJWQg6aCF5rKS55So5Yiw55qE6Z2e57WC57WQ56ym6JmfIgorCisjfiBtc2dpZCAiIGFuZCAiCisjfiBtc2dzdHIgIiDlkowgIgorCisjfiBtc2dpZCAiJWQgdXNlbGVzcyBydWxlIgorI34gbXNnaWRfcGx1cmFsICIlZCB1c2VsZXNzIHJ1bGVzIgorI34gbXNnc3RyWzBdICIlZCDmop3mspLnlKjliLDnmoTopo/liYciCisKKyN+IG1zZ2lkICJpbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZTogJXMiCisjfiBtc2dzdHIgIueEoeaViOeahOi3s+iEq+W6j+WIl++8miVzIgorCisjfiBtc2dpZCAidW5yZWNvZ25pemVkIGVzY2FwZSBzZXF1ZW5jZTogJXMiCisjfiBtc2dzdHIgIueEoeazlei+qOitmOeahOi3s+iEq+W6j+WIl++8miVzIgorCisjfiBtc2dpZCAidG9rZW5zICVzIGFuZCAlcyBib3RoIGFzc2lnbmVkIG51bWJlciAlZCIKKyN+IG1zZ3N0ciAi6KiY6JmfICVzIOiIhyAlcyDlhanogIXpg73mjIfmtL7kuobmlbjlrZcgJWQiCisKKyN+IG1zZ2lkICIlczogaWxsZWdhbCBvcHRpb24gLS0gJWNcbiIKKyN+IG1zZ3N0ciAiJXPvvJrkuI3lkIjms5XnmoTpgbjpoIUg4pSAICVjXG4iCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL0xJTkdVQVMgYi9ydW50aW1lLXBvL0xJTkdVQVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBkNjJkOAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vTElOR1VBUwpAQCAtMCwwICsxLDM3IEBACithc3QKK2RhCitkZQorZWwKK2VvCitlcworZXQKK2ZpCitmcgorZ2EKK2dsCitocgoraHUKK2lkCitpdAoramEKK2t5CitsdAorbHYKK21zCituYgorbmwKK3BsCitwdAorcHRfQlIKK3JvCitydQorc2wKK3NxCitzcgorc3YKK3RoCit0cgordWsKK3ZpCit6aF9DTgoremhfVFcKZGlmZiAtLWdpdCBhL3J1bnRpbWUtcG8vTWFrZWZpbGUuaW4uaW4gYi9ydW50aW1lLXBvL01ha2VmaWxlLmluLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNzE5ODMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lLXBvL01ha2VmaWxlLmluLmluCkBAIC0wLDAgKzEsNDQ2IEBACisjIE1ha2VmaWxlIGZvciBQTyBkaXJlY3RvcnkgaW4gYW55IHBhY2thZ2UgdXNpbmcgR05VIGdldHRleHQuCisjIENvcHlyaWdodCAoQykgMTk5NS0xOTk3LCAyMDAwLTIwMDcsIDIwMDktMjAxMCBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4KKyMKKyMgVGhpcyBmaWxlIGNhbiBiZSBjb3BpZWQgYW5kIHVzZWQgZnJlZWx5IHdpdGhvdXQgcmVzdHJpY3Rpb25zLiAgSXQgY2FuCisjIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CisjIGZ1bmN0aW9uYWxpdHkuCisjIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIEdOVSBnZXR0ZXh0IGlzIGNvdmVyZWQgYnkgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCBpcyAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyMKKyMgT3JpZ2luOiBnZXR0ZXh0LTAuMTgKK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IDAuMTgKKworUEFDS0FHRSA9IEBQQUNLQUdFQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACisKK1NIRUxMID0gL2Jpbi9zaAorQFNFVF9NQUtFQAorCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAorCitwcmVmaXggPSBAcHJlZml4QAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitnZXR0ZXh0c3JjZGlyID0gJChkYXRhZGlyKS9nZXR0ZXh0L3BvCisKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACisKKyMgV2UgdXNlICQobWtkaXJfcCkuCisjIEluIGF1dG9tYWtlIDw9IDEuOS54LCAkKG1rZGlyX3ApIGlzIGRlZmluZWQgZWl0aGVyIGFzICJta2RpciAtcCAtLSIgb3IgYXMKKyMgIiQobWtpbnN0YWxsZGlycykiIG9yIGFzICIkKGluc3RhbGxfc2gpIC1kIi4gRm9yIHRoZXNlIGF1dG9tYWtlIHZlcnNpb25zLAorIyBAaW5zdGFsbF9zaEAgZG9lcyBub3Qgc3RhcnQgd2l0aCAkKFNIRUxMKSwgc28gd2UgYWRkIGl0LgorIyBJbiBhdXRvbWFrZSA+PSAxLjEwLCBAbWtkaXJfcEAgaXMgZGVyaXZlZCBmcm9tICR7TUtESVJfUH0sIHdoaWNoIGlzIGRlZmluZWQKKyMgZWl0aGVyIGFzICIvcGF0aC90by9ta2RpciAtcCIgb3IgIi4uLi9pbnN0YWxsLXNoIC1jIC1kIi4gRm9yIHRoZXNlIGF1dG9tYWtlCisjIHZlcnNpb25zLCAkKG1raW5zdGFsbGRpcnMpIGFuZCAkKGluc3RhbGxfc2gpIGFyZSB1bnVzZWQuCitta2luc3RhbGxkaXJzID0gJChTSEVMTCkgQGluc3RhbGxfc2hAIC1kCitpbnN0YWxsX3NoID0gJChTSEVMTCkgQGluc3RhbGxfc2hACitNS0RJUl9QID0gQE1LRElSX1BACitta2Rpcl9wID0gQG1rZGlyX3BACisKK0dNU0dGTVRfID0gQEdNU0dGTVRACitHTVNHRk1UX25vID0gQEdNU0dGTVRACitHTVNHRk1UX3llcyA9IEBHTVNHRk1UXzAxNUAKK0dNU0dGTVQgPSAkKEdNU0dGTVRfJChVU0VfTVNHQ1RYVCkpCitNU0dGTVRfID0gQE1TR0ZNVEAKK01TR0ZNVF9ubyA9IEBNU0dGTVRACitNU0dGTVRfeWVzID0gQE1TR0ZNVF8wMTVACitNU0dGTVQgPSAkKE1TR0ZNVF8kKFVTRV9NU0dDVFhUKSkKK1hHRVRURVhUXyA9IEBYR0VUVEVYVEAKK1hHRVRURVhUX25vID0gQFhHRVRURVhUQAorWEdFVFRFWFRfeWVzID0gQFhHRVRURVhUXzAxNUAKK1hHRVRURVhUID0gJChYR0VUVEVYVF8kKFVTRV9NU0dDVFhUKSkKK01TR01FUkdFID0gbXNnbWVyZ2UKK01TR01FUkdFX1VQREFURSA9IEBNU0dNRVJHRUAgLS11cGRhdGUKK01TR0lOSVQgPSBtc2dpbml0CitNU0dDT05WID0gbXNnY29udgorTVNHRklMVEVSID0gbXNnZmlsdGVyCisKK1BPRklMRVMgPSBAUE9GSUxFU0AKK0dNT0ZJTEVTID0gQEdNT0ZJTEVTQAorVVBEQVRFUE9GSUxFUyA9IEBVUERBVEVQT0ZJTEVTQAorRFVNTVlQT0ZJTEVTID0gQERVTU1ZUE9GSUxFU0AKK0RJU1RGSUxFUy5jb21tb24gPSBNYWtlZmlsZS5pbi5pbiByZW1vdmUtcG90Y2RhdGUuc2luIFwKKyQoRElTVEZJTEVTLmNvbW1vbi5leHRyYTEpICQoRElTVEZJTEVTLmNvbW1vbi5leHRyYTIpICQoRElTVEZJTEVTLmNvbW1vbi5leHRyYTMpCitESVNURklMRVMgPSAkKERJU1RGSUxFUy5jb21tb24pIE1ha2V2YXJzIFBPVEZJTEVTLmluIFwKKyQoUE9GSUxFUykgJChHTU9GSUxFUykgXAorJChESVNURklMRVMuZXh0cmExKSAkKERJU1RGSUxFUy5leHRyYTIpICQoRElTVEZJTEVTLmV4dHJhMykKKworUE9URklMRVMgPSBcCisKK0NBVEFMT0dTID0gQENBVEFMT0dTQAorCisjIE1ha2V2YXJzIGdldHMgaW5zZXJ0ZWQgaGVyZS4gKERvbid0IHJlbW92ZSB0aGlzIGxpbmUhKQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5wbyAuZ21vIC5tbyAuc2VkIC5zaW4gLm5vcCAucG8tY3JlYXRlIC5wby11cGRhdGUKKworLnBvLm1vOgorCUBlY2hvICIkKE1TR0ZNVCkgLWMgLW8gJEAgJDwiOyBcCisJJChNU0dGTVQpIC1jIC1vIHQtJEAgJDwgJiYgbXYgdC0kQCAkQAorCisucG8uZ21vOgorCUBsYW5nPWBlY2hvICQqIHwgc2VkIC1lICdzLC4qLywsJ2A7IFwKKwl0ZXN0ICIkKHNyY2RpcikiID0gLiAmJiBjZGNtZD0iIiB8fCBjZGNtZD0iY2QgJChzcmNkaXIpICYmICI7IFwKKwllY2hvICIkJHtjZGNtZH1ybSAtZiAkJHtsYW5nfS5nbW8gJiYgJChHTVNHRk1UKSAtYyAtLXN0YXRpc3RpY3MgLS12ZXJib3NlIC1vICQke2xhbmd9LmdtbyAkJHtsYW5nfS5wbyI7IFwKKwljZCAkKHNyY2RpcikgJiYgcm0gLWYgJCR7bGFuZ30uZ21vICYmICQoR01TR0ZNVCkgLWMgLS1zdGF0aXN0aWNzIC0tdmVyYm9zZSAtbyB0LSQke2xhbmd9LmdtbyAkJHtsYW5nfS5wbyAmJiBtdiB0LSQke2xhbmd9LmdtbyAkJHtsYW5nfS5nbW8KKworLnNpbi5zZWQ6CisJc2VkIC1lICcvXiMvZCcgJDwgPiB0LSRACisJbXYgdC0kQCAkQAorCisKK2FsbDogYWxsLUBVU0VfTkxTQAorCithbGwteWVzOiBzdGFtcC1wbworYWxsLW5vOgorCisjIEVuc3VyZSB0aGF0IHRoZSBnZXR0ZXh0IG1hY3JvcyBhbmQgdGhpcyBNYWtlZmlsZS5pbi5pbiBhcmUgaW4gc3luYy4KK0NIRUNLX01BQ1JPX1ZFUlNJT04gPSBcCisJdGVzdCAiJChHRVRURVhUX01BQ1JPX1ZFUlNJT04pIiA9ICJAR0VUVEVYVF9NQUNST19WRVJTSU9OQCIgXAorCSAgfHwgeyBlY2hvICIqKiogZXJyb3I6IGdldHRleHQgaW5mcmFzdHJ1Y3R1cmUgbWlzbWF0Y2g6IHVzaW5nIGEgTWFrZWZpbGUuaW4uaW4gZnJvbSBnZXR0ZXh0IHZlcnNpb24gJChHRVRURVhUX01BQ1JPX1ZFUlNJT04pIGJ1dCB0aGUgYXV0b2NvbmYgbWFjcm9zIGFyZSBmcm9tIGdldHRleHQgdmVyc2lvbiBAR0VUVEVYVF9NQUNST19WRVJTSU9OQCIgMT4mMjsgXAorCSAgICAgICBleGl0IDE7IFwKKwkgICAgIH0KKworIyAkKHNyY2RpcikvJChET01BSU4pLnBvdCBpcyBvbmx5IGNyZWF0ZWQgd2hlbiBuZWVkZWQuIFdoZW4geGdldHRleHQgZmluZHMgbm8KKyMgaW50ZXJuYXRpb25hbGl6ZWQgbWVzc2FnZXMsIG5vICQoc3JjZGlyKS8kKERPTUFJTikucG90IGlzIGNyZWF0ZWQgKGJlY2F1c2UKKyMgd2UgZG9uJ3Qgd2FudCB0byBib3RoZXIgdHJhbnNsYXRvcnMgd2l0aCBlbXB0eSBQT1QgZmlsZXMpLiBXZSBhc3N1bWUgdGhhdAorIyBMSU5HVUFTIGlzIGVtcHR5IGluIHRoaXMgY2FzZSwgaS5lLiAkKFBPRklMRVMpIGFuZCAkKEdNT0ZJTEVTKSBhcmUgZW1wdHkuCisjIEluIHRoaXMgY2FzZSwgc3RhbXAtcG8gaXMgYSBub3AgKGkuZS4gYSBwaG9ueSB0YXJnZXQpLgorCisjIHN0YW1wLXBvIGlzIGEgdGltZXN0YW1wIGRlbm90aW5nIHRoZSBsYXN0IHRpbWUgYXQgd2hpY2ggdGhlIENBVEFMT0dTIGhhdmUKKyMgYmVlbiBsb29zZWx5IHVwZGF0ZWQuIEl0cyBwdXJwb3NlIGlzIHRoYXQgd2hlbiBhIGRldmVsb3BlciBvciB0cmFuc2xhdG9yCisjIGNoZWNrcyBvdXQgdGhlIHBhY2thZ2UgdmlhIENWUywgYW5kIHRoZSAkKERPTUFJTikucG90IGZpbGUgaXMgbm90IGluIENWUywKKyMgIm1ha2UiIHdpbGwgdXBkYXRlIHRoZSAkKERPTUFJTikucG90IGFuZCB0aGUgJChDQVRBTE9HUyksIGJ1dCBzdWJzZXF1ZW50CisjIGludm9jYXRpb25zIG9mICJtYWtlIiB3aWxsIGRvIG5vdGhpbmcuIFRoaXMgdGltZXN0YW1wIHdvdWxkIG5vdCBiZSBuZWNlc3NhcnkKKyMgaWYgdXBkYXRpbmcgdGhlICQoQ0FUQUxPR1MpIHdvdWxkIGFsd2F5cyB0b3VjaCB0aGVtOyBob3dldmVyLCB0aGUgcnVsZSBmb3IKKyMgJChQT0ZJTEVTKSBoYXMgYmVlbiBkZXNpZ25lZCB0byBub3QgdG91Y2ggZmlsZXMgdGhhdCBkb24ndCBuZWVkIHRvIGJlCisjIGNoYW5nZWQuCitzdGFtcC1wbzogJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QKKwlAJChDSEVDS19NQUNST19WRVJTSU9OKQorCXRlc3QgISAtZiAkKHNyY2RpcikvJChET01BSU4pLnBvdCB8fCBcCisJICB0ZXN0IC16ICIkKEdNT0ZJTEVTKSIgfHwgJChNQUtFKSAkKEdNT0ZJTEVTKQorCUB0ZXN0ICEgLWYgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgfHwgeyBcCisJICBlY2hvICJ0b3VjaCBzdGFtcC1wbyIgJiYgXAorCSAgZWNobyB0aW1lc3RhbXAgPiBzdGFtcC1wb1QgJiYgXAorCSAgbXYgc3RhbXAtcG9UIHN0YW1wLXBvOyBcCisJfQorCisjIE5vdGU6IFRhcmdldCAnYWxsJyBtdXN0IG5vdCBkZXBlbmQgb24gdGFyZ2V0ICckKERPTUFJTikucG90LXVwZGF0ZScsCisjIG90aGVyd2lzZSBwYWNrYWdlcyBsaWtlIEdDQyBjYW4gbm90IGJlIGJ1aWx0IGlmIG9ubHkgcGFydHMgb2YgdGhlIHNvdXJjZQorIyBoYXZlIGJlZW4gZG93bmxvYWRlZC4KKworIyBUaGlzIHRhcmdldCByZWJ1aWxkcyAkKERPTUFJTikucG90OyBpdCBpcyBhbiBleHBlbnNpdmUgb3BlcmF0aW9uLgorIyBOb3RlIHRoYXQgJChET01BSU4pLnBvdCBpcyBub3QgdG91Y2hlZCBpZiBpdCBkb2Vzbid0IG5lZWQgdG8gYmUgY2hhbmdlZC4KKyQoRE9NQUlOKS5wb3QtdXBkYXRlOiAkKFBPVEZJTEVTKSAkKHNyY2RpcikvUE9URklMRVMuaW4gcmVtb3ZlLXBvdGNkYXRlLnNlZAorCWlmIExDX0FMTD1DIGdyZXAgJ0dOVSBAUEFDS0FHRUAnICQodG9wX3NyY2RpcikvKiAyPi9kZXYvbnVsbCB8IGdyZXAgLXYgJ2xpYnRvb2w6JyA+L2Rldi9udWxsOyB0aGVuIFwKKwkgIHBhY2thZ2VfZ251PSdHTlUgJzsgXAorCWVsc2UgXAorCSAgcGFja2FnZV9nbnU9Jyc7IFwKKwlmaTsgXAorCWlmIHRlc3QgLW4gJyQoTVNHSURfQlVHU19BRERSRVNTKScgfHwgdGVzdCAnJChQQUNLQUdFX0JVR1JFUE9SVCknID0gJ0AnUEFDS0FHRV9CVUdSRVBPUlQnQCc7IHRoZW4gXAorCSAgbXNnaWRfYnVnc19hZGRyZXNzPSckKE1TR0lEX0JVR1NfQUREUkVTUyknOyBcCisJZWxzZSBcCisJICBtc2dpZF9idWdzX2FkZHJlc3M9JyQoUEFDS0FHRV9CVUdSRVBPUlQpJzsgXAorCWZpOyBcCisJY2FzZSBgJChYR0VUVEVYVCkgLS12ZXJzaW9uIHwgc2VkIDFxIHwgc2VkIC1lICdzLF5bXjAtOV0qLCwnYCBpbiBcCisJICAnJyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC01XSB8IDAuMVswLTVdLiogfCAwLjE2IHwgMC4xNi5bMC0xXSopIFwKKwkgICAgJChYR0VUVEVYVCkgLS1kZWZhdWx0LWRvbWFpbj0kKERPTUFJTikgLS1kaXJlY3Rvcnk9JCh0b3Bfc3JjZGlyKSBcCisJICAgICAgLS1hZGQtY29tbWVudHM9VFJBTlNMQVRPUlM6ICQoWEdFVFRFWFRfT1BUSU9OUykgQFhHRVRURVhUX0VYVFJBX09QVElPTlNAIFwKKwkgICAgICAtLWZpbGVzLWZyb209JChzcmNkaXIpL1BPVEZJTEVTLmluIFwKKwkgICAgICAtLWNvcHlyaWdodC1ob2xkZXI9JyQoQ09QWVJJR0hUX0hPTERFUiknIFwKKwkgICAgICAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0iJCRtc2dpZF9idWdzX2FkZHJlc3MiIFwKKwkgICAgOzsgXAorCSAgKikgXAorCSAgICAkKFhHRVRURVhUKSAtLWRlZmF1bHQtZG9tYWluPSQoRE9NQUlOKSAtLWRpcmVjdG9yeT0kKHRvcF9zcmNkaXIpIFwKKwkgICAgICAtLWFkZC1jb21tZW50cz1UUkFOU0xBVE9SUzogJChYR0VUVEVYVF9PUFRJT05TKSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AgXAorCSAgICAgIC0tZmlsZXMtZnJvbT0kKHNyY2RpcikvUE9URklMRVMuaW4gXAorCSAgICAgIC0tY29weXJpZ2h0LWhvbGRlcj0nJChDT1BZUklHSFRfSE9MREVSKScgXAorCSAgICAgIC0tcGFja2FnZS1uYW1lPSIkJHtwYWNrYWdlX2dudX1AUEFDS0FHRUAiIFwKKwkgICAgICAtLXBhY2thZ2UtdmVyc2lvbj0nQFZFUlNJT05AJyBcCisJICAgICAgLS1tc2dpZC1idWdzLWFkZHJlc3M9IiQkbXNnaWRfYnVnc19hZGRyZXNzIiBcCisJICAgIDs7IFwKKwllc2FjCisJdGVzdCAhIC1mICQoRE9NQUlOKS5wbyB8fCB7IFwKKwkgIGlmIHRlc3QgLWYgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IHRoZW4gXAorCSAgICBzZWQgLWYgcmVtb3ZlLXBvdGNkYXRlLnNlZCA8ICQoc3JjZGlyKS8kKERPTUFJTikucG90ID4gJChET01BSU4pLjFwbyAmJiBcCisJICAgIHNlZCAtZiByZW1vdmUtcG90Y2RhdGUuc2VkIDwgJChET01BSU4pLnBvID4gJChET01BSU4pLjJwbyAmJiBcCisJICAgIGlmIGNtcCAkKERPTUFJTikuMXBvICQoRE9NQUlOKS4ycG8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgICAgICBybSAtZiAkKERPTUFJTikuMXBvICQoRE9NQUlOKS4ycG8gJChET01BSU4pLnBvOyBcCisJICAgIGVsc2UgXAorCSAgICAgIHJtIC1mICQoRE9NQUlOKS4xcG8gJChET01BSU4pLjJwbyAkKHNyY2RpcikvJChET01BSU4pLnBvdCAmJiBcCisJICAgICAgbXYgJChET01BSU4pLnBvICQoc3JjZGlyKS8kKERPTUFJTikucG90OyBcCisJICAgIGZpOyBcCisJICBlbHNlIFwKKwkgICAgbXYgJChET01BSU4pLnBvICQoc3JjZGlyKS8kKERPTUFJTikucG90OyBcCisJICBmaTsgXAorCX0KKworIyBUaGlzIHJ1bGUgaGFzIG5vIGRlcGVuZGVuY2llczogd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgJChET01BSU4pLnBvdCBhdAorIyBldmVyeSAibWFrZSIgaW52b2NhdGlvbiwgb25seSBjcmVhdGUgaXQgd2hlbiBpdCBpcyBtaXNzaW5nLgorIyBPbmx5ICJtYWtlICQoRE9NQUlOKS5wb3QtdXBkYXRlIiBvciAibWFrZSBkaXN0IiB3aWxsIGZvcmNlIGFuIHVwZGF0ZS4KKyQoc3JjZGlyKS8kKERPTUFJTikucG90OgorCSQoTUFLRSkgJChET01BSU4pLnBvdC11cGRhdGUKKworIyBUaGlzIHRhcmdldCByZWJ1aWxkcyBhIFBPIGZpbGUgaWYgJChET01BSU4pLnBvdCBoYXMgY2hhbmdlZC4KKyMgTm90ZSB0aGF0IGEgUE8gZmlsZSBpcyBub3QgdG91Y2hlZCBpZiBpdCBkb2Vzbid0IG5lZWQgdG8gYmUgY2hhbmdlZC4KKyQoUE9GSUxFUyk6ICQoc3JjZGlyKS8kKERPTUFJTikucG90CisJQGxhbmc9YGVjaG8gJEAgfCBzZWQgLWUgJ3MsLiovLCwnIC1lICdzL1wucG8kJC8vJ2A7IFwKKwlpZiB0ZXN0IC1mICIkKHNyY2RpcikvJCR7bGFuZ30ucG8iOyB0aGVuIFwKKwkgIHRlc3QgIiQoc3JjZGlyKSIgPSAuICYmIGNkY21kPSIiIHx8IGNkY21kPSJjZCAkKHNyY2RpcikgJiYgIjsgXAorCSAgZWNobyAiJCR7Y2RjbWR9JChNU0dNRVJHRV9VUERBVEUpICQoTVNHTUVSR0VfT1BUSU9OUykgLS1sYW5nPSQke2xhbmd9ICQke2xhbmd9LnBvICQoRE9NQUlOKS5wb3QiOyBcCisJICBjZCAkKHNyY2RpcikgXAorCSAgICAmJiB7IGNhc2UgYCQoTVNHTUVSR0VfVVBEQVRFKSAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluIFwKKwkgICAgICAgICAgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTddIHwgMC4xWzAtN10uKikgXAorCSAgICAgICAgICAgICAkKE1TR01FUkdFX1VQREFURSkgJChNU0dNRVJHRV9PUFRJT05TKSAkJHtsYW5nfS5wbyAkKERPTUFJTikucG90OzsgXAorCSAgICAgICAgICAgKikgXAorCSAgICAgICAgICAgICAkKE1TR01FUkdFX1VQREFURSkgJChNU0dNRVJHRV9PUFRJT05TKSAtLWxhbmc9JCR7bGFuZ30gJCR7bGFuZ30ucG8gJChET01BSU4pLnBvdDs7IFwKKwkgICAgICAgICBlc2FjOyBcCisJICAgICAgIH07IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJCR7bGFuZ30ucG8tY3JlYXRlOyBcCisJZmkKKworCitpbnN0YWxsOiBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1kYXRhCitpbnN0YWxsLWV4ZWM6CitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1AVVNFX05MU0AKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICAkKG1rZGlyX3ApICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpOyBcCisJICBmb3IgZmlsZSBpbiAkKERJU1RGSUxFUy5jb21tb24pIE1ha2V2YXJzLnRlbXBsYXRlOyBkbyBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRmaWxlIFwKKwkJCSAgICAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKwkgIGRvbmU7IFwKKwkgIGZvciBmaWxlIGluIE1ha2V2YXJzOyBkbyBcCisJICAgIHJtIC1mICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAorCSAgZG9uZTsgXAorCWVsc2UgXAorCSAgOiA7IFwKKwlmaQoraW5zdGFsbC1kYXRhLW5vOiBhbGwKK2luc3RhbGwtZGF0YS15ZXM6IGFsbAorCUBjYXRhbG9ncz0nJChDQVRBTE9HUyknOyBcCisJZm9yIGNhdCBpbiAkJGNhdGFsb2dzOyBkbyBcCisJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorCSAgbGFuZz1gZWNobyAkJGNhdCB8IHNlZCAtZSAncy9cLmdtbyQkLy8nYDsgXAorCSAgZGlyPSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVM7IFwKKwkgICQobWtkaXJfcCkgJChERVNURElSKSQkZGlyOyBcCisJICBpZiB0ZXN0IC1yICQkY2F0OyB0aGVuIHJlYWxjYXQ9JCRjYXQ7IGVsc2UgcmVhbGNhdD0kKHNyY2RpcikvJCRjYXQ7IGZpOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRyZWFsY2F0ICQoREVTVERJUikkJGRpci8kKERPTUFJTikubW87IFwKKwkgIGVjaG8gImluc3RhbGxpbmcgJCRyZWFsY2F0IGFzICQoREVTVERJUikkJGRpci8kKERPTUFJTikubW8iOyBcCisJICBmb3IgbGMgaW4gJycgJChFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyk7IGRvIFwKKwkgICAgaWYgdGVzdCAtbiAiJCRsYyI7IHRoZW4gXAorCSAgICAgIGlmIChjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIDI+L2Rldi9udWxsKSB8IGdyZXAgJyAtPiAnID4vZGV2L251bGw7IHRoZW4gXAorCSAgICAgICAgbGluaz1gY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcgJiYgTENfQUxMPUMgbHMgLWwgLWQgJCRsYyB8IHNlZCAtZSAncy9eLiogLT4gLy8nYDsgXAorCSAgICAgICAgbXYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZDsgXAorCSAgICAgICAgbWtkaXIgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkICYmIFwKKwkgICAgICAgICBmb3IgZmlsZSBpbiAqOyBkbyBcCisJICAgICAgICAgICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBcCisJICAgICAgICAgICAgIGxuIC1zIC4uLyQkbGluay8kJGZpbGUgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kJGZpbGU7IFwKKwkgICAgICAgICAgIGZpOyBcCisJICAgICAgICAgZG9uZSk7IFwKKwkgICAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCisJICAgICAgZWxzZSBcCisJICAgICAgICBpZiB0ZXN0IC1kICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IHRoZW4gXAorCSAgICAgICAgICA6OyBcCisJICAgICAgICBlbHNlIFwKKwkgICAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICBmaTsgXAorCSAgICAgIGZpOyBcCisJICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW87IFwKKwkgICAgICBsbiAtcyAuLi9MQ19NRVNTQUdFUy8kKERPTUFJTikubW8gJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW8gMj4vZGV2L251bGwgfHwgXAorCSAgICAgIGxuICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nL0xDX01FU1NBR0VTLyQoRE9NQUlOKS5tbyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbyAyPi9kZXYvbnVsbCB8fCBcCisJICAgICAgY3AgLXAgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVMvJChET01BSU4pLm1vICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vOyBcCisJICAgICAgZWNobyAiaW5zdGFsbGluZyAkJHJlYWxjYXQgbGluayBhcyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbyI7IFwKKwkgICAgZmk7IFwKKwkgIGRvbmU7IFwKKwlkb25lCisKK2luc3RhbGwtc3RyaXA6IGluc3RhbGwKKworaW5zdGFsbC1kdmkgaW5zdGFsbC1odG1sIGluc3RhbGwtaW5mbyBpbnN0YWxsLXBkZiBpbnN0YWxsLXBzOgoraW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLWV4ZWMgaW5zdGFsbGRpcnMtZGF0YQoraW5zdGFsbGRpcnMtZXhlYzoKK2luc3RhbGxkaXJzLWRhdGE6IGluc3RhbGxkaXJzLWRhdGEtQFVTRV9OTFNACisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorCSAgJChta2Rpcl9wKSAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKTsgXAorCWVsc2UgXAorCSAgOiA7IFwKKwlmaQoraW5zdGFsbGRpcnMtZGF0YS1ubzoKK2luc3RhbGxkaXJzLWRhdGEteWVzOgorCUBjYXRhbG9ncz0nJChDQVRBTE9HUyknOyBcCisJZm9yIGNhdCBpbiAkJGNhdGFsb2dzOyBkbyBcCisJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorCSAgbGFuZz1gZWNobyAkJGNhdCB8IHNlZCAtZSAncy9cLmdtbyQkLy8nYDsgXAorCSAgZGlyPSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVM7IFwKKwkgICQobWtkaXJfcCkgJChERVNURElSKSQkZGlyOyBcCisJICBmb3IgbGMgaW4gJycgJChFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyk7IGRvIFwKKwkgICAgaWYgdGVzdCAtbiAiJCRsYyI7IHRoZW4gXAorCSAgICAgIGlmIChjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIDI+L2Rldi9udWxsKSB8IGdyZXAgJyAtPiAnID4vZGV2L251bGw7IHRoZW4gXAorCSAgICAgICAgbGluaz1gY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcgJiYgTENfQUxMPUMgbHMgLWwgLWQgJCRsYyB8IHNlZCAtZSAncy9eLiogLT4gLy8nYDsgXAorCSAgICAgICAgbXYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZDsgXAorCSAgICAgICAgbWtkaXIgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkICYmIFwKKwkgICAgICAgICBmb3IgZmlsZSBpbiAqOyBkbyBcCisJICAgICAgICAgICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBcCisJICAgICAgICAgICAgIGxuIC1zIC4uLyQkbGluay8kJGZpbGUgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kJGZpbGU7IFwKKwkgICAgICAgICAgIGZpOyBcCisJICAgICAgICAgZG9uZSk7IFwKKwkgICAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCisJICAgICAgZWxzZSBcCisJICAgICAgICBpZiB0ZXN0IC1kICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IHRoZW4gXAorCSAgICAgICAgICA6OyBcCisJICAgICAgICBlbHNlIFwKKwkgICAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICBmaTsgXAorCSAgICAgIGZpOyBcCisJICAgIGZpOyBcCisJICBkb25lOyBcCisJZG9uZQorCisjIERlZmluZSB0aGlzIGFzIGVtcHR5IHVudGlsIEkgZm91bmQgYSB1c2VmdWwgYXBwbGljYXRpb24uCitpbnN0YWxsY2hlY2s6CisKK3VuaW5zdGFsbDogdW5pbnN0YWxsLWV4ZWMgdW5pbnN0YWxsLWRhdGEKK3VuaW5zdGFsbC1leGVjOgordW5pbnN0YWxsLWRhdGE6IHVuaW5zdGFsbC1kYXRhLUBVU0VfTkxTQAorCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKwkgIGZvciBmaWxlIGluICQoRElTVEZJTEVTLmNvbW1vbikgTWFrZXZhcnMudGVtcGxhdGU7IGRvIFwKKwkgICAgcm0gLWYgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisJICBkb25lOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCit1bmluc3RhbGwtZGF0YS1ubzoKK3VuaW5zdGFsbC1kYXRhLXllczoKKwljYXRhbG9ncz0nJChDQVRBTE9HUyknOyBcCisJZm9yIGNhdCBpbiAkJGNhdGFsb2dzOyBkbyBcCisJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorCSAgbGFuZz1gZWNobyAkJGNhdCB8IHNlZCAtZSAncy9cLmdtbyQkLy8nYDsgXAorCSAgZm9yIGxjIGluIExDX01FU1NBR0VTICQoRVhUUkFfTE9DQUxFX0NBVEVHT1JJRVMpOyBkbyBcCisJICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vOyBcCisJICBkb25lOyBcCisJZG9uZQorCitjaGVjazogYWxsCisKK2luZm8gZHZpIHBzIHBkZiBodG1sIHRhZ3MgVEFHUyBjdGFncyBDVEFHUyBJRDoKKworbW9zdGx5Y2xlYW46CisJcm0gLWYgcmVtb3ZlLXBvdGNkYXRlLnNlZAorCXJtIC1mIHN0YW1wLXBvVAorCXJtIC1mIGNvcmUgY29yZS4qICQoRE9NQUlOKS5wbyAkKERPTUFJTikuMXBvICQoRE9NQUlOKS4ycG8gKi5uZXcucG8KKwlybSAtZnIgKi5vCisKK2NsZWFuOiBtb3N0bHljbGVhbgorCitkaXN0Y2xlYW46IGNsZWFuCisJcm0gLWYgTWFrZWZpbGUgTWFrZWZpbGUuaW4gUE9URklMRVMgKi5tbworCittYWludGFpbmVyLWNsZWFuOiBkaXN0Y2xlYW4KKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2U7IgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKKwlybSAtZiBzdGFtcC1wbyAkKEdNT0ZJTEVTKQorCitkaXN0ZGlyID0gJCh0b3BfYnVpbGRkaXIpLyQoUEFDS0FHRSktJChWRVJTSU9OKS8kKHN1YmRpcikKK2Rpc3QgZGlzdGRpcjoKKwkkKE1BS0UpIHVwZGF0ZS1wbworCUAkKE1BS0UpIGRpc3QyCisjIFRoaXMgaXMgYSBzZXBhcmF0ZSB0YXJnZXQgYmVjYXVzZSAndXBkYXRlLXBvJyBtdXN0IGJlIGV4ZWN1dGVkIGJlZm9yZS4KK2Rpc3QyOiBzdGFtcC1wbyAkKERJU1RGSUxFUykKKwlkaXN0cz0iJChESVNURklMRVMpIjsgXAorCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKwkgIGRpc3RzPSIkJGRpc3RzIE1ha2V2YXJzLnRlbXBsYXRlIjsgXAorCWZpOyBcCisJaWYgdGVzdCAtZiAkKHNyY2RpcikvJChET01BSU4pLnBvdDsgdGhlbiBcCisJICBkaXN0cz0iJCRkaXN0cyAkKERPTUFJTikucG90IHN0YW1wLXBvIjsgXAorCWZpOyBcCisJaWYgdGVzdCAtZiAkKHNyY2RpcikvQ2hhbmdlTG9nOyB0aGVuIFwKKwkgIGRpc3RzPSIkJGRpc3RzIENoYW5nZUxvZyI7IFwKKwlmaTsgXAorCWZvciBpIGluIDAgMSAyIDMgNCA1IDYgNyA4IDk7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJChzcmNkaXIpL0NoYW5nZUxvZy4kJGk7IHRoZW4gXAorCSAgICBkaXN0cz0iJCRkaXN0cyBDaGFuZ2VMb2cuJCRpIjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJaWYgdGVzdCAtZiAkKHNyY2RpcikvTElOR1VBUzsgdGhlbiBkaXN0cz0iJCRkaXN0cyBMSU5HVUFTIjsgZmk7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBcCisJICAgIGNwIC1wICQkZmlsZSAkKGRpc3RkaXIpIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIGNwIC1wICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCit1cGRhdGUtcG86IE1ha2VmaWxlCisJJChNQUtFKSAkKERPTUFJTikucG90LXVwZGF0ZQorCXRlc3QgLXogIiQoVVBEQVRFUE9GSUxFUykiIHx8ICQoTUFLRSkgJChVUERBVEVQT0ZJTEVTKQorCSQoTUFLRSkgdXBkYXRlLWdtbworCisjIEdlbmVyYWwgcnVsZSBmb3IgY3JlYXRpbmcgUE8gZmlsZXMuCisKKy5ub3AucG8tY3JlYXRlOgorCUBsYW5nPWBlY2hvICRAIHwgc2VkIC1lICdzL1wucG8tY3JlYXRlJCQvLydgOyBcCisJZWNobyAiRmlsZSAkJGxhbmcucG8gZG9lcyBub3QgZXhpc3QuIElmIHlvdSBhcmUgYSB0cmFuc2xhdG9yLCB5b3UgY2FuIGNyZWF0ZSBpdCB0aHJvdWdoICdtc2dpbml0Jy4iIDE+JjI7IFwKKwlleGl0IDEKKworIyBHZW5lcmFsIHJ1bGUgZm9yIHVwZGF0aW5nIFBPIGZpbGVzLgorCisubm9wLnBvLXVwZGF0ZToKKwlAbGFuZz1gZWNobyAkQCB8IHNlZCAtZSAncy9cLnBvLXVwZGF0ZSQkLy8nYDsgXAorCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFBBVEg9YHB3ZGAvLi4vc3JjOiQkUEFUSDsgZmk7IFwKKwl0bXBkaXI9YHB3ZGA7IFwKKwllY2hvICIkJGxhbmc6IjsgXAorCXRlc3QgIiQoc3JjZGlyKSIgPSAuICYmIGNkY21kPSIiIHx8IGNkY21kPSJjZCAkKHNyY2RpcikgJiYgIjsgXAorCWVjaG8gIiQke2NkY21kfSQoTVNHTUVSR0UpICQoTVNHTUVSR0VfT1BUSU9OUykgLS1sYW5nPSQkbGFuZyAkJGxhbmcucG8gJChET01BSU4pLnBvdCAtbyAkJGxhbmcubmV3LnBvIjsgXAorCWNkICQoc3JjZGlyKTsgXAorCWlmIHsgY2FzZSBgJChNU0dNRVJHRSkgLS12ZXJzaW9uIHwgc2VkIDFxIHwgc2VkIC1lICdzLF5bXjAtOV0qLCwnYCBpbiBcCisJICAgICAgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTddIHwgMC4xWzAtN10uKikgXAorCSAgICAgICAgICQoTVNHTUVSR0UpICQoTVNHTUVSR0VfT1BUSU9OUykgLW8gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyAkJGxhbmcucG8gJChET01BSU4pLnBvdDs7IFwKKwkgICAgICAgKikgXAorCSAgICAgICAgICQoTVNHTUVSR0UpICQoTVNHTUVSR0VfT1BUSU9OUykgLS1sYW5nPSQkbGFuZyAtbyAkJHRtcGRpci8kJGxhbmcubmV3LnBvICQkbGFuZy5wbyAkKERPTUFJTikucG90OzsgXAorCSAgICAgZXNhYzsgXAorCSAgIH07IHRoZW4gXAorCSAgaWYgY21wICQkbGFuZy5wbyAkJHRtcGRpci8kJGxhbmcubmV3LnBvID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICAgIHJtIC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IFwKKwkgIGVsc2UgXAorCSAgICBpZiBtdiAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvICQkbGFuZy5wbzsgdGhlbiBcCisJICAgICAgOjsgXAorCSAgICBlbHNlIFwKKwkgICAgICBlY2hvICJtc2dtZXJnZSBmb3IgJCRsYW5nLnBvIGZhaWxlZDogY2Fubm90IG1vdmUgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyB0byAkJGxhbmcucG8iIDE+JjI7IFwKKwkgICAgICBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgIGZpOyBcCisJZWxzZSBcCisJICBlY2hvICJtc2dtZXJnZSBmb3IgJCRsYW5nLnBvIGZhaWxlZCEiIDE+JjI7IFwKKwkgIHJtIC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IFwKKwlmaQorCiskKERVTU1ZUE9GSUxFUyk6CisKK3VwZGF0ZS1nbW86IE1ha2VmaWxlICQoR01PRklMRVMpCisJQDoKKworIyBSZWNyZWF0ZSBNYWtlZmlsZSBieSBpbnZva2luZyBjb25maWcuc3RhdHVzLiBFeHBsaWNpdGx5IGludm9rZSB0aGUgc2hlbGwsCisjIGJlY2F1c2UgZXhlY3V0aW9uIHBlcm1pc3Npb24gYml0cyBtYXkgbm90IHdvcmsgb24gdGhlIGN1cnJlbnQgZmlsZSBzeXN0ZW0uCisjIFVzZSBAU0hFTExALCB3aGljaCBpcyB0aGUgc2hlbGwgZGV0ZXJtaW5lZCBieSBhdXRvY29uZiBmb3IgdGhlIHVzZSBieSBpdHMKKyMgc2NyaXB0cywgbm90ICQoU0hFTEwpIHdoaWNoIGlzIGhhcmR3aXJlZCB0byAvYmluL3NoIGFuZCBtYXkgYmUgZGVmaWNpZW50LgorTWFrZWZpbGU6IE1ha2VmaWxlLmluLmluIE1ha2V2YXJzICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzIEBQT01BS0VGSUxFREVQU0AKKwljZCAkKHRvcF9idWlsZGRpcikgXAorCSAgJiYgQFNIRUxMQCAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRALmluIHBvLWRpcmVjdG9yaWVzCisKK2ZvcmNlOgorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2Ugbm90IHRvIGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL01ha2V2YXJzIGIvcnVudGltZS1wby9NYWtldmFycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTNkMzU3Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9NYWtldmFycwpAQCAtMCwwICsxLDU1IEBACisjIE1ha2VmaWxlIHZhcmlhYmxlcyBmb3IgUE8gZGlyZWN0b3J5IGluIGFueSBwYWNrYWdlIHVzaW5nIEdOVSBnZXR0ZXh0LgorCisjIFVzdWFsbHkgdGhlIG1lc3NhZ2UgZG9tYWluIGlzIHRoZSBzYW1lIGFzIHRoZSBwYWNrYWdlIG5hbWUuCitET01BSU4gPSBiaXNvbi1ydW50aW1lCisKKyMgVGhlc2UgdHdvIHZhcmlhYmxlcyBkZXBlbmQgb24gdGhlIGxvY2F0aW9uIG9mIHRoaXMgZGlyZWN0b3J5Lgorc3ViZGlyID0gcnVudGltZS1wbwordG9wX2J1aWxkZGlyID0gLi4KKworIyBUaGVzZSBvcHRpb25zIGdldCBwYXNzZWQgdG8geGdldHRleHQuCitYR0VUVEVYVF9PUFRJT05TID0gLS1rZXl3b3JkPV8gLS1rZXl3b3JkPU5fIFwKK1wKKy0tZmxhZz1fOjE6cGFzcy1jLWZvcm1hdFwKKy0tZmxhZz1OXzoxOnBhc3MtYy1mb3JtYXRcCistLWZsYWc9ZXJyb3I6MzpjLWZvcm1hdCAtLWZsYWc9ZXJyb3JfYXRfbGluZTo1OmMtZm9ybWF0XAorXAorLS1mcm9tLWNvZGU9VVRGLThcCistLWZsYWc9YXNwcmludGY6MjpjLWZvcm1hdFwKKy0tZmxhZz1jb21wbGFpbjoxOmMtZm9ybWF0IC0tZmxhZz1jb21wbGFpbl9hdDoyOmMtZm9ybWF0XAorLS1mbGFnPWZhdGFsOjE6Yy1mb3JtYXQgLS1mbGFnPWZhdGFsX2F0OjI6Yy1mb3JtYXRcCistLWZsYWc9d2FybjoxOmMtZm9ybWF0ICAtLWZsYWc9d2Fybl9hdDoyOmMtZm9ybWF0XAorLS1mbGFnPXVuZXhwZWN0ZWRfZW5kOjI6Yy1mb3JtYXRcCitcCistLWtleXdvcmQ9WVlfIFwKKyQke2VuZF9vZl94Z2V0dGV4dF9vcHRpb25zK30KKworIyBUaGlzIGlzIHRoZSBjb3B5cmlnaHQgaG9sZGVyIHRoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIHRoZSBoZWFkZXIgb2YgdGhlCisjICQoRE9NQUlOKS5wb3QgZmlsZS4gIFNldCB0aGlzIHRvIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBzdXJyb3VuZGluZworIyBwYWNrYWdlLiAgKE5vdGUgdGhhdCB0aGUgbXNnc3RyIHN0cmluZ3MsIGV4dHJhY3RlZCBmcm9tIHRoZSBwYWNrYWdlJ3MKKyMgc291cmNlcywgYmVsb25nIHRvIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBwYWNrYWdlLikgIFRyYW5zbGF0b3JzIGFyZQorIyBleHBlY3RlZCB0byB0cmFuc2ZlciB0aGUgY29weXJpZ2h0IGZvciB0aGVpciB0cmFuc2xhdGlvbnMgdG8gdGhpcyBwZXJzb24KKyMgb3IgZW50aXR5LCBvciB0byBkaXNjbGFpbSB0aGVpciBjb3B5cmlnaHQuICBUaGUgZW1wdHkgc3RyaW5nIHN0YW5kcyBmb3IKKyMgdGhlIHB1YmxpYyBkb21haW47IGluIHRoaXMgY2FzZSB0aGUgdHJhbnNsYXRvcnMgYXJlIGV4cGVjdGVkIHRvIGRpc2NsYWltCisjIHRoZWlyIGNvcHlyaWdodC4KK0NPUFlSSUdIVF9IT0xERVIgPSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIGlzIHRoZSBlbWFpbCBhZGRyZXNzIG9yIFVSTCB0byB3aGljaCB0aGUgdHJhbnNsYXRvcnMgc2hhbGwgcmVwb3J0CisjIGJ1Z3MgaW4gdGhlIHVudHJhbnNsYXRlZCBzdHJpbmdzOgorIyAtIFN0cmluZ3Mgd2hpY2ggYXJlIG5vdCBlbnRpcmUgc2VudGVuY2VzLCBzZWUgdGhlIG1haW50YWluZXIgZ3VpZGVsaW5lcworIyAgIGluIHRoZSBHTlUgZ2V0dGV4dCBkb2N1bWVudGF0aW9uLCBzZWN0aW9uICdQcmVwYXJpbmcgU3RyaW5ncycuCisjIC0gU3RyaW5ncyB3aGljaCB1c2UgdW5jbGVhciB0ZXJtcyBvciByZXF1aXJlIGFkZGl0aW9uYWwgY29udGV4dCB0byBiZQorIyAgIHVuZGVyc3Rvb2QuCisjIC0gU3RyaW5ncyB3aGljaCBtYWtlIGludmFsaWQgYXNzdW1wdGlvbnMgYWJvdXQgbm90YXRpb24gb2YgZGF0ZSwgdGltZSBvcgorIyAgIG1vbmV5LgorIyAtIFBsdXJhbGlzYXRpb24gcHJvYmxlbXMuCisjIC0gSW5jb3JyZWN0IEVuZ2xpc2ggc3BlbGxpbmcuCisjIC0gSW5jb3JyZWN0IGZvcm1hdHRpbmcuCisjIEl0IGNhbiBiZSB5b3VyIGVtYWlsIGFkZHJlc3MsIG9yIGEgbWFpbGluZyBsaXN0IGFkZHJlc3Mgd2hlcmUgdHJhbnNsYXRvcnMKKyMgY2FuIHdyaXRlIHRvIHdpdGhvdXQgYmVpbmcgc3Vic2NyaWJlZCwgb3IgdGhlIFVSTCBvZiBhIHdlYiBwYWdlIHRocm91Z2gKKyMgd2hpY2ggdGhlIHRyYW5zbGF0b3JzIGNhbiBjb250YWN0IHlvdS4KK01TR0lEX0JVR1NfQUREUkVTUyA9IGJ1Zy1iaXNvbkBnbnUub3JnCisKKyMgVGhpcyBpcyB0aGUgbGlzdCBvZiBsb2NhbGUgY2F0ZWdvcmllcywgYmV5b25kIExDX01FU1NBR0VTLCBmb3Igd2hpY2ggdGhlCisjIG1lc3NhZ2UgY2F0YWxvZ3Mgc2hhbGwgYmUgdXNlZC4gIEl0IGlzIHVzdWFsbHkgZW1wdHkuCitFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyA9CmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL1BPVEZJTEVTLmluIGIvcnVudGltZS1wby9QT1RGSUxFUy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTczMDYzCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9QT1RGSUxFUy5pbgpAQCAtMCwwICsxLDMgQEAKK2RhdGEvZ2xyLmMKK2RhdGEvbGFscjEuY2MKK2RhdGEveWFjYy5jCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL1J1bGVzLXF1b3QgYi9ydW50aW1lLXBvL1J1bGVzLXF1b3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY1MjQ4NwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vUnVsZXMtcXVvdApAQCAtMCwwICsxLDQ3IEBACisjIFNwZWNpYWwgTWFrZWZpbGUgcnVsZXMgZm9yIEVuZ2xpc2ggbWVzc2FnZSBjYXRhbG9ncyB3aXRoIHF1b3RhdGlvbiBtYXJrcy4KKworRElTVEZJTEVTLmNvbW1vbi5leHRyYTEgPSBxdW90LnNlZCBib2xkcXVvdC5zZWQgZW5AcXVvdC5oZWFkZXIgZW5AYm9sZHF1b3QuaGVhZGVyIGluc2VydC1oZWFkZXIuc2luIFJ1bGVzLXF1b3QKKworLlNVRkZJWEVTOiAuaW5zZXJ0LWhlYWRlciAucG8tdXBkYXRlLWVuCisKK2VuQHF1b3QucG8tY3JlYXRlOgorCSQoTUFLRSkgZW5AcXVvdC5wby11cGRhdGUKK2VuQGJvbGRxdW90LnBvLWNyZWF0ZToKKwkkKE1BS0UpIGVuQGJvbGRxdW90LnBvLXVwZGF0ZQorCitlbkBxdW90LnBvLXVwZGF0ZTogZW5AcXVvdC5wby11cGRhdGUtZW4KK2VuQGJvbGRxdW90LnBvLXVwZGF0ZTogZW5AYm9sZHF1b3QucG8tdXBkYXRlLWVuCisKKy5pbnNlcnQtaGVhZGVyLnBvLXVwZGF0ZS1lbjoKKwlAbGFuZz1gZWNobyAkQCB8IHNlZCAtZSAncy9cLnBvLXVwZGF0ZS1lbiQkLy8nYDsgXAorCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQiOyB0aGVuIFBBVEg9YHB3ZGAvLi4vc3JjOiQkUEFUSDsgR0VUVEVYVExJQkRJUj1gY2QgJCh0b3Bfc3JjZGlyKS9zcmMgJiYgcHdkYDsgZXhwb3J0IEdFVFRFWFRMSUJESVI7IGZpOyBcCisJdG1wZGlyPWBwd2RgOyBcCisJZWNobyAiJCRsYW5nOiI7IFwKKwlsbD1gZWNobyAkJGxhbmcgfCBzZWQgLWUgJ3MvQC4qLy8nYDsgXAorCUxDX0FMTD1DOyBleHBvcnQgTENfQUxMOyBcCisJY2QgJChzcmNkaXIpOyBcCisJaWYgJChNU0dJTklUKSAtaSAkKERPTUFJTikucG90IC0tbm8tdHJhbnNsYXRvciAtbCAkJGxhbmcgLW8gLSAyPi9kZXYvbnVsbCB8IHNlZCAtZiAkJHRtcGRpci8kJGxhbmcuaW5zZXJ0LWhlYWRlciB8ICQoTVNHQ09OVikgLXQgVVRGLTggfCAkKE1TR0ZJTFRFUikgc2VkIC1mIGBlY2hvICQkbGFuZyB8IHNlZCAtZSAncy8uKkAvLydgLnNlZCAyPi9kZXYvbnVsbCA+ICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IHRoZW4gXAorCSAgaWYgY21wICQkbGFuZy5wbyAkJHRtcGRpci8kJGxhbmcubmV3LnBvID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICAgIHJtIC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IFwKKwkgIGVsc2UgXAorCSAgICBpZiBtdiAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvICQkbGFuZy5wbzsgdGhlbiBcCisJICAgICAgOjsgXAorCSAgICBlbHNlIFwKKwkgICAgICBlY2hvICJjcmVhdGlvbiBvZiAkJGxhbmcucG8gZmFpbGVkOiBjYW5ub3QgbW92ZSAkJHRtcGRpci8kJGxhbmcubmV3LnBvIHRvICQkbGFuZy5wbyIgMT4mMjsgXAorCSAgICAgIGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgZmk7IFwKKwllbHNlIFwKKwkgIGVjaG8gImNyZWF0aW9uIG9mICQkbGFuZy5wbyBmYWlsZWQhIiAxPiYyOyBcCisJICBybSAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyBcCisJZmkKKworZW5AcXVvdC5pbnNlcnQtaGVhZGVyOiBpbnNlcnQtaGVhZGVyLnNpbgorCXNlZCAtZSAnL14jL2QnIC1lICdzL0hFQURFUi9lbkBxdW90LmhlYWRlci9nJyAkKHNyY2RpcikvaW5zZXJ0LWhlYWRlci5zaW4gPiBlbkBxdW90Lmluc2VydC1oZWFkZXIKKworZW5AYm9sZHF1b3QuaW5zZXJ0LWhlYWRlcjogaW5zZXJ0LWhlYWRlci5zaW4KKwlzZWQgLWUgJy9eIy9kJyAtZSAncy9IRUFERVIvZW5AYm9sZHF1b3QuaGVhZGVyL2cnICQoc3JjZGlyKS9pbnNlcnQtaGVhZGVyLnNpbiA+IGVuQGJvbGRxdW90Lmluc2VydC1oZWFkZXIKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXF1b3QKK21vc3RseWNsZWFuLXF1b3Q6CisJcm0gLWYgKi5pbnNlcnQtaGVhZGVyCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL2FzdC5nbW8gYi9ydW50aW1lLXBvL2FzdC5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRhODc4MQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vYXN0LmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL2FzdC5wbyBiL3J1bnRpbWUtcG8vYXN0LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZWRlODEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lLXBvL2FzdC5wbwpAQCAtMCwwICsxLDYyIEBACisjIE1lbnNhamVzIGVuIGVzcGHxb2wgcGFyYSBHTlUgQmlzb24uCisjIENvcHlyaWdodCAoQykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGJpc29uIHBhY2thZ2UuCisjIE1hcnF1aW5vcyA8bWFhY3ViQGdtYWlsLmNvbT4sIDIwMDkuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBiaXNvbi1ydW50aW1lIDIuNC4xYVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBidWctYmlzb25AZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEyLTEyLTEyIDE2OjA5KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTAyLTAzIDE3OjE3KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IE1hcnF1aW5vcyA8bWFhY3ViQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBBc3R1cmlhbiA8dWJ1bnR1LWwxMG4tYXN0QGxpc3RzLnVidW50dS5jb20+XG4iCisiTGFuZ3VhZ2U6IGFzdFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTFcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IGRhdGEvZ2xyLmM6ODU1IGRhdGEveWFjYy5jOjc3NgorbXNnaWQgInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiCittc2dzdHIgImZhbGx1IGRlIHNpc3Rhc2lzOiBudW4gcHVlZGUgZmFjZXNlIGNvcGlhIGRlIHNlZ3VyaWThIgorCisjOiBkYXRhL2dsci5jOjE3MjkKK21zZ2lkICJzeW50YXggaXMgYW1iaWd1b3VzIgorbXNnc3RyICJzaXN0YXNpcyB5ZSBhbWJpZ/xhIgorCisjOiBkYXRhL2dsci5jOjIwMTQgZGF0YS9nbHIuYzoyMDk0IGRhdGEvZ2xyLmM6MjEzNCBkYXRhL2dsci5jOjIzOTkKKyM6IGRhdGEvbGFscjEuY2M6OTQ3IGRhdGEvbGFscjEuY2M6OTY3IGRhdGEveWFjYy5jOjEzNTEgZGF0YS95YWNjLmM6MTg1NgorIzogZGF0YS95YWNjLmM6MTg2MgorbXNnaWQgInN5bnRheCBlcnJvciIKK21zZ3N0ciAiZmFsbHUgZGUgc2lzdGFzaXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NSBkYXRhL2xhbHIxLmNjOjk0OCBkYXRhL3lhY2MuYzoxMzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIKK21zZ3N0ciAiZmFsbHUgZGUgc2lzdGFzaXMsICVzIG51biBlc3BlcuF1IgorCisjOiBkYXRhL2dsci5jOjIwOTYgZGF0YS9sYWxyMS5jYzo5NDkgZGF0YS95YWNjLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIKK21zZ3N0ciAiZmFsbHUgZGUgc2lzdGFzaXMsICVzIG51biBlc3BlcuF1LCBlc3BlcuF1ICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTcgZGF0YS9sYWxyMS5jYzo5NTAgZGF0YS95YWNjLmM6MTM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIKK21zZ3N0ciAiZmFsbHUgZGUgc2lzdGFzaXMsICVzIG51biBlc3BlcuF1LCBlc3BlcuF1ICVzIG8gJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5OCBkYXRhL2xhbHIxLmNjOjk1MSBkYXRhL3lhY2MuYzoxMzU1CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIgorbXNnc3RyICJmYWxsdSBkZSBzaXN0YXNpcywgJXMgbnVuIGVzcGVy4XUsIGVzcGVy4XUgJXMgbyAlcyBvICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTkgZGF0YS9sYWxyMS5jYzo5NTIgZGF0YS95YWNjLmM6MTM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIKK21zZ3N0ciAiZmFsbHUgZGUgc2lzdGFzaXMsICVzIG51biBlc3BlcuF1LCBlc3BlcuF1ICVzIG8gJXMgbyAlcyBvICVzIgorCisjOiBkYXRhL2dsci5jOjI0NTkgZGF0YS95YWNjLmM6MTQzNiBkYXRhL3lhY2MuYzoxNDM4IGRhdGEveWFjYy5jOjE2MTYKKyM6IGRhdGEveWFjYy5jOjIwMTMKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJtZW1vcmlhIGVzY29zYWRhIgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9iaXNvbi1ydW50aW1lLnBvdCBiL3J1bnRpbWUtcG8vYmlzb24tcnVudGltZS5wb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk1MzZhYwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vYmlzb24tcnVudGltZS5wb3QKQEAgLTAsMCArMSw2MiBAQAorIyBTT01FIERFU0NSSVBUSVZFIFRJVExFLgorIyBDb3B5cmlnaHQgKEMpIFlFQVIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBQQUNLQUdFIHBhY2thZ2UuCisjIEZJUlNUIEFVVEhPUiA8RU1BSUxAQUREUkVTUz4sIFlFQVIuCisjCisjLCBmdXp6eQorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYmlzb24gMi43XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IFlFQVItTU8tREEgSE86TUkrWk9ORVxuIgorIkxhc3QtVHJhbnNsYXRvcjogRlVMTCBOQU1FIDxFTUFJTEBBRERSRVNTPlxuIgorIkxhbmd1YWdlLVRlYW06IExBTkdVQUdFIDxMTEBsaS5vcmc+XG4iCisiTGFuZ3VhZ2U6IFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUNIQVJTRVRcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IGRhdGEvZ2xyLmM6ODU1IGRhdGEveWFjYy5jOjc3NgorbXNnaWQgInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiCittc2dzdHIgIiIKKworIzogZGF0YS9nbHIuYzoxNzI5Cittc2dpZCAic3ludGF4IGlzIGFtYmlndW91cyIKK21zZ3N0ciAiIgorCisjOiBkYXRhL2dsci5jOjIwMTQgZGF0YS9nbHIuYzoyMDk0IGRhdGEvZ2xyLmM6MjEzNCBkYXRhL2dsci5jOjIzOTkKKyM6IGRhdGEvbGFscjEuY2M6OTQ3IGRhdGEvbGFscjEuY2M6OTY3IGRhdGEveWFjYy5jOjEzNTEgZGF0YS95YWNjLmM6MTg1NgorIzogZGF0YS95YWNjLmM6MTg2MgorbXNnaWQgInN5bnRheCBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBkYXRhL2dsci5jOjIwOTUgZGF0YS9sYWxyMS5jYzo5NDggZGF0YS95YWNjLmM6MTM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiCittc2dzdHIgIiIKKworIzogZGF0YS9nbHIuYzoyMDk2IGRhdGEvbGFscjEuY2M6OTQ5IGRhdGEveWFjYy5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMiCittc2dzdHIgIiIKKworIzogZGF0YS9nbHIuYzoyMDk3IGRhdGEvbGFscjEuY2M6OTUwIGRhdGEveWFjYy5jOjEzNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiCittc2dzdHIgIiIKKworIzogZGF0YS9nbHIuYzoyMDk4IGRhdGEvbGFscjEuY2M6OTUxIGRhdGEveWFjYy5jOjEzNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiCittc2dzdHIgIiIKKworIzogZGF0YS9nbHIuYzoyMDk5IGRhdGEvbGFscjEuY2M6OTUyIGRhdGEveWFjYy5jOjEzNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiCittc2dzdHIgIiIKKworIzogZGF0YS9nbHIuYzoyNDU5IGRhdGEveWFjYy5jOjE0MzYgZGF0YS95YWNjLmM6MTQzOCBkYXRhL3lhY2MuYzoxNjE2CisjOiBkYXRhL3lhY2MuYzoyMDEzCittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiIgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9ib2xkcXVvdC5zZWQgYi9ydW50aW1lLXBvL2JvbGRxdW90LnNlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjkzN2FhCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9ib2xkcXVvdC5zZWQKQEAgLTAsMCArMSwxMCBAQAorcy8iXChbXiJdKlwpIi/igJxcMeKAnS9nCitzL2BcKFteYCddKlwpJy/igJhcMeKAmS9nCitzLyAnXChbXmAnXSpcKScgLyDigJhcMeKAmSAvZworcy8gJ1woW15gJ10qXCknJC8g4oCYXDHigJkvZworcy9eJ1woW15gJ10qXCknIC/igJhcMeKAmSAvZworcy/igJzigJ0vIiIvZworcy/igJwv4oCcG1sxbS9nCitzL+KAnS8bWzBt4oCdL2cKK3Mv4oCYL+KAmBtbMW0vZworcy/igJkvG1swbeKAmS9nCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL2RhLmdtbyBiL3J1bnRpbWUtcG8vZGEuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZWJjOGEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lLXBvL2RhLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL2RhLnBvIGIvcnVudGltZS1wby9kYS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWNlZWJjCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9kYS5wbwpAQCAtMCwwICsxLDY1IEBACisjIERhbmlzaCBtZXNzYWdlcyBmb3IgYmlzb24uCisjIENvcHlyaWdodCAoQykgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGJpc29uIHBhY2thZ2UuCisjIEtlbGQgU2ltb25zZW4gPGtlbGRAZGt1dWcuZGs+LCAyMDAyLgorIyBCeXJpYWwgT2xlIEplbnNlbiA8YnlyaWFsQGltYWdlLmRrPiwgMjAwMi0yMDA0LgorIyBKb2UgSGFuc2VuIDxqb2VkYWx0b24yQHlhaG9vLmRrPiwgMjAwOC4KKyMgS2VsZCBTaW1vbnNlbiA8a2VsZEBka3V1Zy5kaz4sIDIwMDguCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBiaXNvbi1ydW50aW1lLTIuM2JcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLWJpc29uQGdudS5vcmdcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMi0xMi0xMiAxNjowOSswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOC0wOC0yNSAwMDowMCswMDAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBLZWxkIFNpbW9uc2VuIDxrZWxkQGRrdXVnLmRrPlxuIgorIkxhbmd1YWdlLVRlYW06IERhbmlzaCA8ZGFuc2tAZGFuc2stZ3J1cHBlbi5kaz5cbiIKKyJMYW5ndWFnZTogZGFcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKworIzogZGF0YS9nbHIuYzo4NTUgZGF0YS95YWNjLmM6Nzc2Cittc2dpZCAic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIKK21zZ3N0ciAic3ludGFrc2Zlamw6IGthbiBpa2tlIGxhdmUgc2lra2VyaGVkc2tvcGkiCisKKyM6IGRhdGEvZ2xyLmM6MTcyOQorbXNnaWQgInN5bnRheCBpcyBhbWJpZ3VvdXMiCittc2dzdHIgInN5bnRha3MgZXIgdHZldHlkaWciCisKKyM6IGRhdGEvZ2xyLmM6MjAxNCBkYXRhL2dsci5jOjIwOTQgZGF0YS9nbHIuYzoyMTM0IGRhdGEvZ2xyLmM6MjM5OQorIzogZGF0YS9sYWxyMS5jYzo5NDcgZGF0YS9sYWxyMS5jYzo5NjcgZGF0YS95YWNjLmM6MTM1MSBkYXRhL3lhY2MuYzoxODU2CisjOiBkYXRhL3lhY2MuYzoxODYyCittc2dpZCAic3ludGF4IGVycm9yIgorbXNnc3RyICJzeW50YWtzZmVqbCIKKworIzogZGF0YS9nbHIuYzoyMDk1IGRhdGEvbGFscjEuY2M6OTQ4IGRhdGEveWFjYy5jOjEzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIgorbXNnc3RyICJzeW50YWtzZmVqbCwgdXZlbnRldCAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk2IGRhdGEvbGFscjEuY2M6OTQ5IGRhdGEveWFjYy5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMiCittc2dzdHIgInN5bnRha3NmZWpsLCB1dmVudGV0ICVzLCBmb3J2ZW50ZWRlICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTcgZGF0YS9sYWxyMS5jYzo5NTAgZGF0YS95YWNjLmM6MTM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIKK21zZ3N0ciAic3ludGFrc2ZlamwsIHV2ZW50ZXQgJXMsIGZvcnZlbnRlZGUgJXMgZWxsZXIgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5OCBkYXRhL2xhbHIxLmNjOjk1MSBkYXRhL3lhY2MuYzoxMzU1CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIgorbXNnc3RyICJzeW50YWtzZmVqbCwgdXZlbnRldCAlcywgZm9ydmVudGVkZSAlcyBlbGxlciAlcyBlbGxlciAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk5IGRhdGEvbGFscjEuY2M6OTUyIGRhdGEveWFjYy5jOjEzNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiCittc2dzdHIgInN5bnRha3NmZWpsLCB1dmVudGV0ICVzLCBmb3J2ZW50ZWRlICVzIGVsbGVyICVzIGVsbGVyICVzIGVsbGVyICVzIgorCisjOiBkYXRhL2dsci5jOjI0NTkgZGF0YS95YWNjLmM6MTQzNiBkYXRhL3lhY2MuYzoxNDM4IGRhdGEveWFjYy5jOjE2MTYKKyM6IGRhdGEveWFjYy5jOjIwMTMKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJodWtvbW1lbHNlbiBvcGJydWd0IgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9kZS5nbW8gYi9ydW50aW1lLXBvL2RlLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODBjODhiCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9kZS5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9kZS5wbyBiL3J1bnRpbWUtcG8vZGUucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdhODk2YQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vZGUucG8KQEAgLTAsMCArMSw2MyBAQAorIyBHZXJtYW4gdHJhbnNsYXRpb24gZm9yIG1lc3NhZ2VzIG9mIEdOVSBiaXNvbiAocnVudGltZSBtb2R1bGUpLgorIyBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PiwgMTk5Ni4KKyMgTWljaGFlbCBQaWVmZWwgPHBpZWZlbEBpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4sIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBiaXNvbi1ydW50aW1lIDIuM2FcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLWJpc29uQGdudS5vcmdcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMi0xMi0xMiAxNjowOSswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwNi0xMi0xMiAwOTozOCswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBNaWNoYWVsIFBpZWZlbCA8cGllZmVsQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPlxuIgorIkxhbmd1YWdlLVRlYW06IEdlcm1hbiA8dHJhbnNsYXRpb24tdGVhbS1kZUBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCisiTGFuZ3VhZ2U6IGRlXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4LWJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPW4gIT0gMTtcbiIKKworIzogZGF0YS9nbHIuYzo4NTUgZGF0YS95YWNjLmM6Nzc2Cittc2dpZCAic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIKK21zZ3N0ciAiU3ludGF4ZmVobGVyOiBLYW5uIG5pY2h0IHp1csO8Y2sgZ2VoZW4iCisKKyM6IGRhdGEvZ2xyLmM6MTcyOQorbXNnaWQgInN5bnRheCBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIlN5bnRheCBpc3QgbWVocmRldXRpZyIKKworIzogZGF0YS9nbHIuYzoyMDE0IGRhdGEvZ2xyLmM6MjA5NCBkYXRhL2dsci5jOjIxMzQgZGF0YS9nbHIuYzoyMzk5CisjOiBkYXRhL2xhbHIxLmNjOjk0NyBkYXRhL2xhbHIxLmNjOjk2NyBkYXRhL3lhY2MuYzoxMzUxIGRhdGEveWFjYy5jOjE4NTYKKyM6IGRhdGEveWFjYy5jOjE4NjIKK21zZ2lkICJzeW50YXggZXJyb3IiCittc2dzdHIgIlN5bnRheGZlaGxlciIKKworIzogZGF0YS9nbHIuYzoyMDk1IGRhdGEvbGFscjEuY2M6OTQ4IGRhdGEveWFjYy5jOjEzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIgorbXNnc3RyICJTeW50YXhmZWhsZXIsIHVuZXJ3YXJ0ZXRlcyAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk2IGRhdGEvbGFscjEuY2M6OTQ5IGRhdGEveWFjYy5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMiCittc2dzdHIgIlN5bnRheGZlaGxlciwgdW5lcndhcnRldGVzICVzLCBoYXR0ZSAlcyBlcndhcnRldCIKKworIzogZGF0YS9nbHIuYzoyMDk3IGRhdGEvbGFscjEuY2M6OTUwIGRhdGEveWFjYy5jOjEzNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiCittc2dzdHIgIlN5bnRheGZlaGxlciwgdW5lcndhcnRldGVzICVzLCBoYXR0ZSAlcyBvZGVyICVzIGVyd2FydGV0IgorCisjOiBkYXRhL2dsci5jOjIwOTggZGF0YS9sYWxyMS5jYzo5NTEgZGF0YS95YWNjLmM6MTM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIKK21zZ3N0ciAiU3ludGF4ZmVobGVyLCB1bmVyd2FydGV0ZXMgJXMsIGhhdHRlICVzIG9kZXIgJXMgb2RlciAlcyBlcndhcnRldCIKKworIzogZGF0YS9nbHIuYzoyMDk5IGRhdGEvbGFscjEuY2M6OTUyIGRhdGEveWFjYy5jOjEzNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiCittc2dzdHIgIiIKKyJTeW50YXhmZWhsZXIsIHVuZXJ3YXJ0ZXRlcyAlcywgaGF0dGUgJXMgb2RlciAlcyBvZGVyICVzIG9kZXIgJXMgZXJ3YXJ0ZXQiCisKKyM6IGRhdGEvZ2xyLmM6MjQ1OSBkYXRhL3lhY2MuYzoxNDM2IGRhdGEveWFjYy5jOjE0MzggZGF0YS95YWNjLmM6MTYxNgorIzogZGF0YS95YWNjLmM6MjAxMworbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIlNwZWljaGVyIGF1c2dlc2Now7ZwZnQiCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL2VsLmdtbyBiL3J1bnRpbWUtcG8vZWwuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YzNlOTUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lLXBvL2VsLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL2VsLnBvIGIvcnVudGltZS1wby9lbC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWU3MTFiCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9lbC5wbwpAQCAtMCwwICsxLDYyIEBACisjIHRyYW5zbGF0aW9uIG9mIGJpc29uLXJ1bnRpbWUuMi4zYi5wbyB0byBHcmVlaworIyBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBiaXNvbiBwYWNrYWdlLgorIworIyBMZWZ0ZXJpcyBEaW1pdHJvdWxha2lzIDxlZGltaXRyb0B0ZWUuZ3I+LCAyMDA4LgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYmlzb24tcnVudGltZS0yLjNiXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDgtMDYtMjEgMTk6MTcrMDMwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogTGVmdGVyaXMgRGltaXRyb3VsYWtpcyA8ZWRpbWl0cm9AdGVlLmdyPlxuIgorIkxhbmd1YWdlLVRlYW06IEdyZWVrIDx0ZWFtQGxpc3RzLmdub21lLmdyPlxuIgorIkxhbmd1YWdlOiBlbFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlgtR2VuZXJhdG9yOiBLQmFiZWwgMS4xMS40XG4iCisKKyM6IGRhdGEvZ2xyLmM6ODU1IGRhdGEveWFjYy5jOjc3NgorbXNnaWQgInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiCittc2dzdHIgIs+Dz4XOvc+EzrHOus+EzrnOus+MIM+Dz4bOrM67zrzOsTogzrTOtc69IM68z4DOv8+Bz44gzr3OsSDOus6szr3PiSDPgM6vz4PPiSIKKworIzogZGF0YS9nbHIuYzoxNzI5Cittc2dpZCAic3ludGF4IGlzIGFtYmlndW91cyIKK21zZ3N0ciAizrHPg86xz4bOrs+CIM+Dz43Ovc+EzrHOvs63IgorCisjOiBkYXRhL2dsci5jOjIwMTQgZGF0YS9nbHIuYzoyMDk0IGRhdGEvZ2xyLmM6MjEzNCBkYXRhL2dsci5jOjIzOTkKKyM6IGRhdGEvbGFscjEuY2M6OTQ3IGRhdGEvbGFscjEuY2M6OTY3IGRhdGEveWFjYy5jOjEzNTEgZGF0YS95YWNjLmM6MTg1NgorIzogZGF0YS95YWNjLmM6MTg2MgorbXNnaWQgInN5bnRheCBlcnJvciIKK21zZ3N0ciAiz4PPhc69z4TOsc66z4TOuc66z4wgz4PPhs6szrvOvM6xIgorCisjOiBkYXRhL2dsci5jOjIwOTUgZGF0YS9sYWxyMS5jYzo5NDggZGF0YS95YWNjLmM6MTM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiCittc2dzdHIgIs+Dz4XOvc+EzrHOus+EzrnOus+MIM+Dz4bOrM67zrzOsSwgzrHOvc6xz4DOrM69z4TOtc+Hzr8gJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NiBkYXRhL2xhbHIxLmNjOjk0OSBkYXRhL3lhY2MuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIgorbXNnc3RyICLPg8+Fzr3PhM6xzrrPhM65zrrPjCDPg8+GzqzOu868zrEsIM6xzr3Osc+AzqzOvc+EzrXPh86/ICVzLCDOsc69zrHOvM61zr3PjM68zrXOvc6/ICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTcgZGF0YS9sYWxyMS5jYzo5NTAgZGF0YS95YWNjLmM6MTM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIKK21zZ3N0ciAiz4PPhc69z4TOsc66z4TOuc66z4wgz4PPhs6szrvOvM6xLCDOsc69zrHPgM6szr3PhM61z4fOvyAlcywgzrHOvc6xzrzOtc69z4zOvM61zr3OvyAlcyDOriAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk4IGRhdGEvbGFscjEuY2M6OTUxIGRhdGEveWFjYy5jOjEzNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiCittc2dzdHIgIs+Dz4XOvc+EzrHOus+EzrnOus+MIM+Dz4bOrM67zrzOsSwgzrHOvc6xz4DOrM69z4TOtc+Hzr8gJXMsIM6xzr3Osc68zrXOvc+MzrzOtc69zr8gJXMgzq4gJXMgzq4gJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5OSBkYXRhL2xhbHIxLmNjOjk1MiBkYXRhL3lhY2MuYzoxMzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIgorbXNnc3RyICLPg8+Fzr3PhM6xzrrPhM65zrrPjCDPg8+GzqzOu868zrEsIM6xzr3Osc+AzqzOvc+EzrXPh86/ICVzLCDOsc69zrHOvM61zr3PjM68zrXOvc6/ICVzIM6uICVzIM6uICVzIM6uICVzIgorCisjOiBkYXRhL2dsci5jOjI0NTkgZGF0YS95YWNjLmM6MTQzNiBkYXRhL3lhY2MuYzoxNDM4IGRhdGEveWFjYy5jOjE2MTYKKyM6IGRhdGEveWFjYy5jOjIwMTMKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICLOtyDOvM69zq7OvM63IM61zr7Osc69z4TOu86uzrjOt866zrUiCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL2VuQGJvbGRxdW90LmhlYWRlciBiL3J1bnRpbWUtcG8vZW5AYm9sZHF1b3QuaGVhZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZGI2YTAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lLXBvL2VuQGJvbGRxdW90LmhlYWRlcgpAQCAtMCwwICsxLDI1IEBACisjIEFsbCB0aGlzIGNhdGFsb2cgInRyYW5zbGF0ZXMiIGFyZSBxdW90YXRpb24gY2hhcmFjdGVycy4KKyMgVGhlIG1zZ2lkcyBtdXN0IGJlIEFTQ0lJIGFuZCB0aGVyZWZvcmUgY2Fubm90IGNvbnRhaW4gcmVhbCBxdW90YXRpb24KKyMgY2hhcmFjdGVycywgb25seSBzdWJzdGl0dXRlcyBsaWtlIGdyYXZlIGFjY2VudCAoMHg2MCksIGFwb3N0cm9waGUgKDB4MjcpCisjIGFuZCBkb3VibGUgcXVvdGUgKDB4MjIpLiBUaGVzZSBzdWJzdGl0dXRlcyBsb29rIHN0cmFuZ2U7IHNlZQorIyBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdWNzL3F1b3Rlcy5odG1sCisjCisjIFRoaXMgY2F0YWxvZyB0cmFuc2xhdGVzIGdyYXZlIGFjY2VudCAoMHg2MCkgYW5kIGFwb3N0cm9waGUgKDB4MjcpIHRvCisjIGxlZnQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTgpIGFuZCByaWdodCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOSkuCisjIEl0IGFsc28gdHJhbnNsYXRlcyBwYWlycyBvZiBhcG9zdHJvcGhlICgweDI3KSB0bworIyBsZWZ0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE4KSBhbmQgcmlnaHQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTkpCisjIGFuZCBwYWlycyBvZiBxdW90YXRpb24gbWFyayAoMHgyMikgdG8KKyMgbGVmdCBkb3VibGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxQykgYW5kIHJpZ2h0IGRvdWJsZSBxdW90YXRpb24gbWFyayAoVSsyMDFEKS4KKyMKKyMgV2hlbiBvdXRwdXQgdG8gYW4gVVRGLTggdGVybWluYWwsIHRoZSBxdW90YXRpb24gY2hhcmFjdGVycyBhcHBlYXIgcGVyZmVjdGx5LgorIyBXaGVuIG91dHB1dCB0byBhbiBJU08tODg1OS0xIHRlcm1pbmFsLCB0aGUgc2luZ2xlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKyMgdHJhbnNsaXRlcmF0ZWQgdG8gYXBvc3Ryb3BoZXMgKGJ5IGljb252IGluIGdsaWJjIDIuMiBvciBuZXdlcikgb3IgdG8KKyMgZ3JhdmUvYWN1dGUgYWNjZW50IChieSBsaWJpY29udiksIGFuZCB0aGUgZG91YmxlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKyMgdHJhbnNsaXRlcmF0ZWQgdG8gMHgyMi4KKyMgV2hlbiBvdXRwdXQgdG8gYW4gQVNDSUkgdGVybWluYWwsIHRoZSBzaW5nbGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorIyB0cmFuc2xpdGVyYXRlZCB0byBhcG9zdHJvcGhlcywgYW5kIHRoZSBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorIyB0cmFuc2xpdGVyYXRlZCB0byAweDIyLgorIworIyBUaGlzIGNhdGFsb2cgZnVydGhlcm1vcmUgZGlzcGxheXMgdGhlIHRleHQgYmV0d2VlbiB0aGUgcXVvdGF0aW9uIG1hcmtzIGluCisjIGJvbGQgZmFjZSwgYXNzdW1pbmcgdGhlIFZUMTAwL1hUZXJtIGVzY2FwZSBzZXF1ZW5jZXMuCisjCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL2VuQHF1b3QuaGVhZGVyIGIvcnVudGltZS1wby9lbkBxdW90LmhlYWRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTY0N2ZjCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9lbkBxdW90LmhlYWRlcgpAQCAtMCwwICsxLDIyIEBACisjIEFsbCB0aGlzIGNhdGFsb2cgInRyYW5zbGF0ZXMiIGFyZSBxdW90YXRpb24gY2hhcmFjdGVycy4KKyMgVGhlIG1zZ2lkcyBtdXN0IGJlIEFTQ0lJIGFuZCB0aGVyZWZvcmUgY2Fubm90IGNvbnRhaW4gcmVhbCBxdW90YXRpb24KKyMgY2hhcmFjdGVycywgb25seSBzdWJzdGl0dXRlcyBsaWtlIGdyYXZlIGFjY2VudCAoMHg2MCksIGFwb3N0cm9waGUgKDB4MjcpCisjIGFuZCBkb3VibGUgcXVvdGUgKDB4MjIpLiBUaGVzZSBzdWJzdGl0dXRlcyBsb29rIHN0cmFuZ2U7IHNlZQorIyBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdWNzL3F1b3Rlcy5odG1sCisjCisjIFRoaXMgY2F0YWxvZyB0cmFuc2xhdGVzIGdyYXZlIGFjY2VudCAoMHg2MCkgYW5kIGFwb3N0cm9waGUgKDB4MjcpIHRvCisjIGxlZnQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTgpIGFuZCByaWdodCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOSkuCisjIEl0IGFsc28gdHJhbnNsYXRlcyBwYWlycyBvZiBhcG9zdHJvcGhlICgweDI3KSB0bworIyBsZWZ0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE4KSBhbmQgcmlnaHQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTkpCisjIGFuZCBwYWlycyBvZiBxdW90YXRpb24gbWFyayAoMHgyMikgdG8KKyMgbGVmdCBkb3VibGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxQykgYW5kIHJpZ2h0IGRvdWJsZSBxdW90YXRpb24gbWFyayAoVSsyMDFEKS4KKyMKKyMgV2hlbiBvdXRwdXQgdG8gYW4gVVRGLTggdGVybWluYWwsIHRoZSBxdW90YXRpb24gY2hhcmFjdGVycyBhcHBlYXIgcGVyZmVjdGx5LgorIyBXaGVuIG91dHB1dCB0byBhbiBJU08tODg1OS0xIHRlcm1pbmFsLCB0aGUgc2luZ2xlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKyMgdHJhbnNsaXRlcmF0ZWQgdG8gYXBvc3Ryb3BoZXMgKGJ5IGljb252IGluIGdsaWJjIDIuMiBvciBuZXdlcikgb3IgdG8KKyMgZ3JhdmUvYWN1dGUgYWNjZW50IChieSBsaWJpY29udiksIGFuZCB0aGUgZG91YmxlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKyMgdHJhbnNsaXRlcmF0ZWQgdG8gMHgyMi4KKyMgV2hlbiBvdXRwdXQgdG8gYW4gQVNDSUkgdGVybWluYWwsIHRoZSBzaW5nbGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorIyB0cmFuc2xpdGVyYXRlZCB0byBhcG9zdHJvcGhlcywgYW5kIHRoZSBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorIyB0cmFuc2xpdGVyYXRlZCB0byAweDIyLgorIwpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9lby5nbW8gYi9ydW50aW1lLXBvL2VvLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzM1NzNkCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9lby5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9lby5wbyBiL3J1bnRpbWUtcG8vZW8ucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2NmE5MwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vZW8ucG8KQEAgLTAsMCArMSw2MSBAQAorIyBFc3BlcmFudG8gdHJhbnNsYXRpb24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgYmlzb24gcGFja2FnZS4KKyMgRmVsaXBlIENhc3RybyA8ZmVmY2FzQGdtYWlsLmNvbT4sIDIwMTAuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBiaXNvbi1ydW50aW1lIDIuNC4zXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMTEtMjEgMTQ6NDMtMDMwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogRmVsaXBlIENhc3RybyA8ZmVmY2FzQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBFc3BlcmFudG8gPHRyYW5zbGF0aW9uLXRlYW0tZW9AbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiBlb1xuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiBkYXRhL2dsci5jOjg1NSBkYXRhL3lhY2MuYzo3NzYKK21zZ2lkICJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIgorbXNnc3RyICJzaW50YWtzLWVyYXJvOiBuaSBuZSBwb3ZhcyBzZWt1cmtvcGlpIgorCisjOiBkYXRhL2dsci5jOjE3MjkKK21zZ2lkICJzeW50YXggaXMgYW1iaWd1b3VzIgorbXNnc3RyICJzaW50YWtzbyBlc3RhcyBwbHVyc2VuY2EiCisKKyM6IGRhdGEvZ2xyLmM6MjAxNCBkYXRhL2dsci5jOjIwOTQgZGF0YS9nbHIuYzoyMTM0IGRhdGEvZ2xyLmM6MjM5OQorIzogZGF0YS9sYWxyMS5jYzo5NDcgZGF0YS9sYWxyMS5jYzo5NjcgZGF0YS95YWNjLmM6MTM1MSBkYXRhL3lhY2MuYzoxODU2CisjOiBkYXRhL3lhY2MuYzoxODYyCittc2dpZCAic3ludGF4IGVycm9yIgorbXNnc3RyICJzaW50YWtzLWVyYXJvIgorCisjOiBkYXRhL2dsci5jOjIwOTUgZGF0YS9sYWxyMS5jYzo5NDggZGF0YS95YWNjLmM6MTM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiCittc2dzdHIgInNpbnRha3MtZXJhcm8sIG5lYXRlbmRpdGEgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NiBkYXRhL2xhbHIxLmNjOjk0OSBkYXRhL3lhY2MuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIgorbXNnc3RyICJzaW50YWtzLWVyYXJvLCBuZWF0ZW5kaXRhICVzLCBuaSBhdGVuZGlzICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTcgZGF0YS9sYWxyMS5jYzo5NTAgZGF0YS95YWNjLmM6MTM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIKK21zZ3N0ciAic2ludGFrcy1lcmFybywgbmVhdGVuZGl0YSAlcywgbmkgYXRlbmRpcyAlcyBhxa0gJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5OCBkYXRhL2xhbHIxLmNjOjk1MSBkYXRhL3lhY2MuYzoxMzU1CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIgorbXNnc3RyICJzaW50YWtzLWVyYXJvLCBuZWF0ZW5kaXRhICVzLCBuaSBhdGVuZGlzICVzIGHFrSAlcyBhxa0gJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5OSBkYXRhL2xhbHIxLmNjOjk1MiBkYXRhL3lhY2MuYzoxMzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIgorbXNnc3RyICJzaW50YWtzLWVyYXJvLCBuZWF0ZW5kaXRhICVzLCBuaSBhdGVuZGlzICVzIGHFrSAlcyBhxa0gJXMgYcWtICVzIgorCisjOiBkYXRhL2dsci5jOjI0NTkgZGF0YS95YWNjLmM6MTQzNiBkYXRhL3lhY2MuYzoxNDM4IGRhdGEveWFjYy5jOjE2MTYKKyM6IGRhdGEveWFjYy5jOjIwMTMKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJtZW1vcm8gZWx1eml0YSIKZGlmZiAtLWdpdCBhL3J1bnRpbWUtcG8vZXMuZ21vIGIvcnVudGltZS1wby9lcy5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU5MTQ1MgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vZXMuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J1bnRpbWUtcG8vZXMucG8gYi9ydW50aW1lLXBvL2VzLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MmJlNWUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lLXBvL2VzLnBvCkBAIC0wLDAgKzEsODUgQEAKKyMgTWVuc2FqZXMgZW4gZXNwYfFvbCBwYXJhIEdOVSBCaXNvbi4KKyMgQ29weXJpZ2h0IChDKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBOaWNvbOFzIEdhcmPtYS1QZWRyYWphcyA8bmdhcmNpYS1wZWRyYWphc0BhY20ub3JnPiwgMTk5OC4KKyMKKyMgQ29ycmVnaWRvIHBvcjoKKyMKKyMgY2xsIC0gQ2FybG9zIExpbmFyZXMgTPNwZXogICAgICAgIGNsaW5hcmVzQGFjbS5vcmcKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaW5hcmVzQGRlbGljaWFzLmRpYS5maS51cG0uZXMKKyMKKyMgTm90YXM6CisjCisjIDEuIE5pY29s4XMsIGVuIGFsZ3VuYXMgb2Nhc2lvbmVzIG5vdGFy4XMgcXVlIGFsZ3Vub3MgYG1zZ3N0cicgbm8gZXN04W4KKyMgaW5kZW50YWRvcyBjb21vIGxvcyBgbXNnaWQnLiBObyB0ZSBwcmVvY3VwZXMsIGVzbyBlcyBwb3JxdWUgeW8gdXRpbGl6bworIyBlbCBgcG8tbW9kZScgZGUgRW1hY3MsIC4uLiDJbCBlcyBlbCByZXNwb25zYWJsZSBkZSBlc2FzIGluZGVudGFjaW9uZXMKKyMgZGVsIGBtc2dzdHInIDopCisjCisjIDIuIFRvZG9zIGxvcyBjb21lbnRhcmlvcyBxdWUgY29udGVuZ2FuICJEdWRhOiIgZGViaWVyYW4gcmV2aXNhcnNlLgorIworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbiBtaSBvcGluafNuIGhhcyBoZWNobyB1biBleGNlbGVudGUgdHJhYmFqbyB5IHRlIGFuaW1vIGEgcXVlIHNpZ2FzCisjIG1hbnRlbmllbmRvIGVzdGEgdHJhZHVjY2nzbiB5IGEgcXVlIGxvIGludGVudGVzIGNvbiBvdHJhcy4KKyMKKyMgKKF0ZSBsbyBkaWNlIGVsIHTtbyBxdWUgaGEgdHJhZHVjaWRvIGVsIHBhcXVldGUgbeFzIGdyYW5kZTogMTQwNgorIyBtZW5zYWplcyBlbiBlbCBjbGlzcCEpCisjCisjIAkJCQkJCSAgICAgIENhcmxvcyBMaW5hcmVzCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBHTlUgYmlzb24gMS44NzVcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLWJpc29uQGdudS5vcmdcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMi0xMi0xMiAxNjowOSswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwMy0wMS0wMiAxMjo0NyswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBOaWNvbOFzIEdhcmPtYS1QZWRyYWphcyA8bmdhcmNpYS1wZWRyYWphc0BhY20ub3JnPlxuIgorIkxhbmd1YWdlLVRlYW06IFNwYW5pc2ggPGVzQGxpLm9yZz5cbiIKKyJMYW5ndWFnZTogZXNcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOC1iaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKworIzogZGF0YS9nbHIuYzo4NTUgZGF0YS95YWNjLmM6Nzc2Cittc2dpZCAic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIKK21zZ3N0ciAiIgorCisjOiBkYXRhL2dsci5jOjE3MjkKK21zZ2lkICJzeW50YXggaXMgYW1iaWd1b3VzIgorbXNnc3RyICIiCisKKyM6IGRhdGEvZ2xyLmM6MjAxNCBkYXRhL2dsci5jOjIwOTQgZGF0YS9nbHIuYzoyMTM0IGRhdGEvZ2xyLmM6MjM5OQorIzogZGF0YS9sYWxyMS5jYzo5NDcgZGF0YS9sYWxyMS5jYzo5NjcgZGF0YS95YWNjLmM6MTM1MSBkYXRhL3lhY2MuYzoxODU2CisjOiBkYXRhL3lhY2MuYzoxODYyCittc2dpZCAic3ludGF4IGVycm9yIgorbXNnc3RyICIiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NSBkYXRhL2xhbHIxLmNjOjk0OCBkYXRhL3lhY2MuYzoxMzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIKK21zZ3N0ciAiIgorCisjOiBkYXRhL2dsci5jOjIwOTYgZGF0YS9sYWxyMS5jYzo5NDkgZGF0YS95YWNjLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIKK21zZ3N0ciAiIgorCisjOiBkYXRhL2dsci5jOjIwOTcgZGF0YS9sYWxyMS5jYzo5NTAgZGF0YS95YWNjLmM6MTM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIKK21zZ3N0ciAiIgorCisjOiBkYXRhL2dsci5jOjIwOTggZGF0YS9sYWxyMS5jYzo5NTEgZGF0YS95YWNjLmM6MTM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIKK21zZ3N0ciAiIgorCisjOiBkYXRhL2dsci5jOjIwOTkgZGF0YS9sYWxyMS5jYzo5NTIgZGF0YS95YWNjLmM6MTM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIKK21zZ3N0ciAiIgorCisjOiBkYXRhL2dsci5jOjI0NTkgZGF0YS95YWNjLmM6MTQzNiBkYXRhL3lhY2MuYzoxNDM4IGRhdGEveWFjYy5jOjE2MTYKKyM6IGRhdGEveWFjYy5jOjIwMTMKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJtZW1vcmlhIGFnb3RhZGEiCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL2V0LmdtbyBiL3J1bnRpbWUtcG8vZXQuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZjJiY2QKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lLXBvL2V0LmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL2V0LnBvIGIvcnVudGltZS1wby9ldC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2YwMWM4Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9ldC5wbwpAQCAtMCwwICsxLDYxIEBACisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBiaXNvbiBwYWNrYWdlLgorIyBFc3RvbmlhbiB0cmFuc2xhdGlvbnMgZm9yIGJpc29uLgorIyBDb3B5cmlnaHQgKEMpIDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRvb21hcyBTb29tZSA8VG9vbWFzLlNvb21lQG1pY3JvbGluay5lZT4sIDIwMTEuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBiaXNvbi1ydW50aW1lIDIuNS1yYzFcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLWJpc29uQGdudS5vcmdcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMi0xMi0xMiAxNjowOSswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMS0wNS0wMyAyMjoxOSswMzAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBUb29tYXMgU29vbWUgPFRvb21hcy5Tb29tZUBtaWNyb2xpbmsuZWU+XG4iCisiTGFuZ3VhZ2UtVGVhbTogRXN0b25pYW4gPGxpbnV4LWVlQGxpc3RzLmVlbmV0LmVlPlxuIgorIkxhbmd1YWdlOiBldFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTE1XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOC1iaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKworIzogZGF0YS9nbHIuYzo4NTUgZGF0YS95YWNjLmM6Nzc2Cittc2dpZCAic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIKK21zZ3N0ciAic/xudGFrc2kgdmlnYTogZWkgc2FhIHRvZXRhZGEiCisKKyM6IGRhdGEvZ2xyLmM6MTcyOQorbXNnaWQgInN5bnRheCBpcyBhbWJpZ3VvdXMiCittc2dzdHIgInP8bnRha3Mgb24gc2VnYW5lIgorCisjOiBkYXRhL2dsci5jOjIwMTQgZGF0YS9nbHIuYzoyMDk0IGRhdGEvZ2xyLmM6MjEzNCBkYXRhL2dsci5jOjIzOTkKKyM6IGRhdGEvbGFscjEuY2M6OTQ3IGRhdGEvbGFscjEuY2M6OTY3IGRhdGEveWFjYy5jOjEzNTEgZGF0YS95YWNjLmM6MTg1NgorIzogZGF0YS95YWNjLmM6MTg2MgorbXNnaWQgInN5bnRheCBlcnJvciIKK21zZ3N0ciAic/xudGFrc2kgdmlnYSIKKworIzogZGF0YS9nbHIuYzoyMDk1IGRhdGEvbGFscjEuY2M6OTQ4IGRhdGEveWFjYy5jOjEzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIgorbXNnc3RyICJz/G50YWtzaSB2aWdhLCBvb3RhbWF0dSAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk2IGRhdGEvbGFscjEuY2M6OTQ5IGRhdGEveWFjYy5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMiCittc2dzdHIgInP8bnRha3NpIHZpZ2EsIG9vdGFtYXR1ICVzLCBvb3Rhc2luICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTcgZGF0YS9sYWxyMS5jYzo5NTAgZGF0YS95YWNjLmM6MTM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIKK21zZ3N0ciAic/xudGFrc2kgdmlnYSwgb290YW1hdHUgJXMsIG9vdGFzaW4gJXMgdvVpICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTggZGF0YS9sYWxyMS5jYzo5NTEgZGF0YS95YWNjLmM6MTM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIKK21zZ3N0ciAic/xudGFrc2kgdmlnYSwgb290YW1hdHUgJXMsIG9vdGFzaW4gJXMgdvVpICVzIHb1aSAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk5IGRhdGEvbGFscjEuY2M6OTUyIGRhdGEveWFjYy5jOjEzNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiCittc2dzdHIgInP8bnRha3NpIHZpZ2EsIG9vdGFtYXR1ICVzLCBvb3Rhc2luICVzIHb1aSAlcyB29WkgJXMgdvVpICVzIgorCisjOiBkYXRhL2dsci5jOjI0NTkgZGF0YS95YWNjLmM6MTQzNiBkYXRhL3lhY2MuYzoxNDM4IGRhdGEveWFjYy5jOjE2MTYKKyM6IGRhdGEveWFjYy5jOjIwMTMKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJt5Gx1IG9uIG90c2FzIgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9maS5nbW8gYi9ydW50aW1lLXBvL2ZpLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzVlOTJhCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9maS5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9maS5wbyBiL3J1bnRpbWUtcG8vZmkucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTViZjFhMQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vZmkucG8KQEAgLTAsMCArMSw2NCBAQAorIyBGaW5uaXNoIG1lc3NhZ2VzIGZvciBiaXNvbi1ydW50aW1lLgorIyBDb3B5cmlnaHQgwqkgMjAwNywgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGJpc29uIHBhY2thZ2UuCisjIEpvcm1hIEthcnZvbmVuIDxrYXJ2am9ybUB1c2Vycy5zZi5uZXQ+LCAyMDA3LgorIyBKb3JtYSBLYXJ2b25lbiA8a2Fydm9uZW4uam9ybWFAZ21haWwuY29tPiwgMjAxMi4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGJpc29uLXJ1bnRpbWUgMi42LjkwXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTItMTItMDkgMTc6MjUrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogSm9ybWEgS2Fydm9uZW4gPGthcnZvbmVuLmpvcm1hQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBGaW5uaXNoIDx0cmFuc2xhdGlvbi10ZWFtLWZpQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZTogZmlcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJYLUdlbmVyYXRvcjogS0JhYmVsIDEuMTEuMlxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorCisjOiBkYXRhL2dsci5jOjg1NSBkYXRhL3lhY2MuYzo3NzYKK21zZ2lkICJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIgorbXNnc3RyICJzeW50YWtzaXZpcmhlOiBlaSB2b2lkYSB0ZWhkw6QgdmFybXV1c2tvcGlvdGEiCisKKyM6IGRhdGEvZ2xyLmM6MTcyOQorbXNnaWQgInN5bnRheCBpcyBhbWJpZ3VvdXMiCittc2dzdHIgInN5bnRha3NpIG9uIG1vbmlzZWxpdHRlaW5lbiIKKworIzogZGF0YS9nbHIuYzoyMDE0IGRhdGEvZ2xyLmM6MjA5NCBkYXRhL2dsci5jOjIxMzQgZGF0YS9nbHIuYzoyMzk5CisjOiBkYXRhL2xhbHIxLmNjOjk0NyBkYXRhL2xhbHIxLmNjOjk2NyBkYXRhL3lhY2MuYzoxMzUxIGRhdGEveWFjYy5jOjE4NTYKKyM6IGRhdGEveWFjYy5jOjE4NjIKK21zZ2lkICJzeW50YXggZXJyb3IiCittc2dzdHIgInN5bnRha3NpdmlyaGUiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NSBkYXRhL2xhbHIxLmNjOjk0OCBkYXRhL3lhY2MuYzoxMzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIKK21zZ3N0ciAic3ludGFrc2l2aXJoZSwgb2RvdHRhbWF0b24gJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NiBkYXRhL2xhbHIxLmNjOjk0OSBkYXRhL3lhY2MuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIgorbXNnc3RyICJzeW50YWtzaXZpcmhlLCBvZG90dGFtYXRvbiAlcywgb2RvdGV0YWFuICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTcgZGF0YS9sYWxyMS5jYzo5NTAgZGF0YS95YWNjLmM6MTM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIKK21zZ3N0ciAic3ludGFrc2l2aXJoZSwgb2RvdHRhbWF0b24gJXMsIG9kb3RldGFhbiAlcyB0YWkgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5OCBkYXRhL2xhbHIxLmNjOjk1MSBkYXRhL3lhY2MuYzoxMzU1CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIgorbXNnc3RyICJzeW50YWtzaXZpcmhlLCBvZG90dGFtYXRvbiAlcywgb2RvdGV0YWFuICVzIHRhaSAlcyB0YWkgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5OSBkYXRhL2xhbHIxLmNjOjk1MiBkYXRhL3lhY2MuYzoxMzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIgorbXNnc3RyICJzeW50YWtzaXZpcmhlLCBvZG90dGFtYXRvbiAlcywgb2RvdGV0YWFuICVzIHRhaSAlcyB0YWkgJXMgdGFpICVzIgorCisjOiBkYXRhL2dsci5jOjI0NTkgZGF0YS95YWNjLmM6MTQzNiBkYXRhL3lhY2MuYzoxNDM4IGRhdGEveWFjYy5jOjE2MTYKKyM6IGRhdGEveWFjYy5jOjIwMTMKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJtdWlzdGkgbG9wcHVpIgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9mci5nbW8gYi9ydW50aW1lLXBvL2ZyLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGQ5MDU3Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9mci5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9mci5wbyBiL3J1bnRpbWUtcG8vZnIucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY3ZjA4OQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vZnIucG8KQEAgLTAsMCArMSw2MiBAQAorIyBNZXNzYWdlcyBmcmFu52FpcyBwb3VyIEJpc29uLgorIyBDb3B5cmlnaHQgqSAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBNaWNoZWwgUm9iaXRhaWxsZSA8cm9iaXRhaWxASVJPLlVNb250cmVhbC5DQT4sIHRyYWR1Y3RldXIgZGVwdWlzL3NpbmNlIDE5OTYKKyMgRG9taW5pcXVlIEJvdWNoZXIgYSDpdOkgbGUgdHJhZHVjdGV1ciBkZSAxOTk2IOAgMjAwMAorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogR05VIGJpc29uLXJ1bnRpbWUgMi4xXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDUtMDktMjEgMDg6MDAtMDUwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogTWljaGVsIFJvYml0YWlsbGUgPHJvYml0YWlsQElSTy5VTW9udHJlYWwuQ0E+XG4iCisiTGFuZ3VhZ2UtVGVhbTogRnJlbmNoIDx0cmFkdWNAdHJhZHVjLm9yZz5cbiIKKyJMYW5ndWFnZTogZnJcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOC1iaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiA+IDEpO1xuIgorCisjOiBkYXRhL2dsci5jOjg1NSBkYXRhL3lhY2MuYzo3NzYKK21zZ2lkICJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIgorbXNnc3RyICJlcnJldXIgZGUgc3ludGF4ZTogbmUgcGV1dCByZWN1bGVyIgorCisjOiBkYXRhL2dsci5jOjE3MjkKK21zZ2lkICJzeW50YXggaXMgYW1iaWd1b3VzIgorbXNnc3RyICJzeW50YXhlIGFtYmlndesiCisKKyM6IGRhdGEvZ2xyLmM6MjAxNCBkYXRhL2dsci5jOjIwOTQgZGF0YS9nbHIuYzoyMTM0IGRhdGEvZ2xyLmM6MjM5OQorIzogZGF0YS9sYWxyMS5jYzo5NDcgZGF0YS9sYWxyMS5jYzo5NjcgZGF0YS95YWNjLmM6MTM1MSBkYXRhL3lhY2MuYzoxODU2CisjOiBkYXRhL3lhY2MuYzoxODYyCittc2dpZCAic3ludGF4IGVycm9yIgorbXNnc3RyICJlcnJldXIgZGUgc3ludGF4ZSIKKworIzogZGF0YS9nbHIuYzoyMDk1IGRhdGEvbGFscjEuY2M6OTQ4IGRhdGEveWFjYy5jOjEzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIgorbXNnc3RyICJlcnJldXIgZGUgc3ludGF4ZSwgJXMgaW5hdHRlbmR1IgorCisjOiBkYXRhL2dsci5jOjIwOTYgZGF0YS9sYWxyMS5jYzo5NDkgZGF0YS95YWNjLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIKK21zZ3N0ciAiZXJyZXVyIGRlIHN5bnRheGUsICVzIGluYXR0ZW5kdSwgYXR0ZW5kYWl0ICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTcgZGF0YS9sYWxyMS5jYzo5NTAgZGF0YS95YWNjLmM6MTM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIKK21zZ3N0ciAiZXJyZXVyIGRlIHN5bnRheGUsICVzIGluYXR0ZW5kdSwgYXR0ZW5kYWl0ICVzIG91ICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTggZGF0YS9sYWxyMS5jYzo5NTEgZGF0YS95YWNjLmM6MTM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIKK21zZ3N0ciAiZXJyZXVyIGRlIHN5bnRheGUsICVzIGluYXR0ZW5kdSwgYXR0ZW5kYWl0ICVzIG91ICVzIG91ICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTkgZGF0YS9sYWxyMS5jYzo5NTIgZGF0YS95YWNjLmM6MTM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIKK21zZ3N0ciAiZXJyZXVyIGRlIHN5bnRheGUsICVzIGluYXR0ZW5kdSwgYXR0ZW5kYWl0ICVzIG91ICVzIG91ICVzIG91ICVzIgorCisjOiBkYXRhL2dsci5jOjI0NTkgZGF0YS95YWNjLmM6MTQzNiBkYXRhL3lhY2MuYzoxNDM4IGRhdGEveWFjYy5jOjE2MTYKKyM6IGRhdGEveWFjYy5jOjIwMTMKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJt6W1vaXJlIOlwdWlz6WUiCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL2dhLmdtbyBiL3J1bnRpbWUtcG8vZ2EuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYjYzZTAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lLXBvL2dhLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL2dhLnBvIGIvcnVudGltZS1wby9nYS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTFkMGZjCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9nYS5wbwpAQCAtMCwwICsxLDYyIEBACisjIElyaXNoIHRyYW5zbGF0aW9ucyBmb3IgYmlzb24uCisjIENvcHlyaWdodCAoQykgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGJpc29uIHBhY2thZ2UuCisjIEtldmluIFBhdHJpY2sgU2Nhbm5lbGwgPHNjYW5uZWxsQFNMVS5FRFU+LCAyMDA0LCAyMDA1LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYmlzb24tcnVudGltZSAyLjFcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLWJpc29uQGdudS5vcmdcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMi0xMi0xMiAxNjowOSswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwNS0wOS0xOCAyMzoxNC0wNTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBLZXZpbiBQYXRyaWNrIFNjYW5uZWxsIDxzY2FubmVsbEBTTFUuRURVPlxuIgorIkxhbmd1YWdlLVRlYW06IElyaXNoIDxnYWVpbGdlLWdudWxpbnV4QGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZTogZ2FcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiBkYXRhL2dsci5jOjg1NSBkYXRhL3lhY2MuYzo3NzYKK21zZ2lkICJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIgorbXNnc3RyICJlYXJy4WlkIGNob21oculpcmU6IG7tIGbpaWRpciBj+mz6IgorCisjOiBkYXRhL2dsci5jOjE3MjkKK21zZ2lkICJzeW50YXggaXMgYW1iaWd1b3VzIgorbXNnc3RyICJjb21oculpciBkaOliaHLtb2NoIgorCisjOiBkYXRhL2dsci5jOjIwMTQgZGF0YS9nbHIuYzoyMDk0IGRhdGEvZ2xyLmM6MjEzNCBkYXRhL2dsci5jOjIzOTkKKyM6IGRhdGEvbGFscjEuY2M6OTQ3IGRhdGEvbGFscjEuY2M6OTY3IGRhdGEveWFjYy5jOjEzNTEgZGF0YS95YWNjLmM6MTg1NgorIzogZGF0YS95YWNjLmM6MTg2MgorbXNnaWQgInN5bnRheCBlcnJvciIKK21zZ3N0ciAiZWFycuFpZCBjaG9taHLpaXJlIgorCisjOiBkYXRhL2dsci5jOjIwOTUgZGF0YS9sYWxyMS5jYzo5NDggZGF0YS95YWNjLmM6MTM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiCittc2dzdHIgImVhcnLhaWQgY2hvbWhy6WlyZSwgJXMgZ2FuIGNob2lubmUiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NiBkYXRhL2xhbHIxLmNjOjk0OSBkYXRhL3lhY2MuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIgorbXNnc3RyICJlYXJy4WlkIGNob21oculpcmUsICVzIGdhbiBjaG9pbm5lLCBiaO1vdGhhcyBhZyBz+mlsIGxlICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTcgZGF0YS9sYWxyMS5jYzo5NTAgZGF0YS95YWNjLmM6MTM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIKK21zZ3N0ciAiZWFycuFpZCBjaG9taHLpaXJlLCAlcyBnYW4gY2hvaW5uZSwgYmjtb3RoYXMgYWcgc/ppbCBsZSAlcyBu8yAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk4IGRhdGEvbGFscjEuY2M6OTUxIGRhdGEveWFjYy5jOjEzNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiCittc2dzdHIgImVhcnLhaWQgY2hvbWhy6WlyZSwgJXMgZ2FuIGNob2lubmUsIGJo7W90aGFzIGFnIHP6aWwgbGUgJXMgbvMgJXMgbvMgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5OSBkYXRhL2xhbHIxLmNjOjk1MiBkYXRhL3lhY2MuYzoxMzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIgorbXNnc3RyICIiCisiZWFycuFpZCBjaG9taHLpaXJlLCAlcyBnYW4gY2hvaW5uZSwgYmjtb3RoYXMgYWcgc/ppbCBsZSAlcyBu8yAlcyBu8yAlcyBu8yAlcyIKKworIzogZGF0YS9nbHIuYzoyNDU5IGRhdGEveWFjYy5jOjE0MzYgZGF0YS95YWNjLmM6MTQzOCBkYXRhL3lhY2MuYzoxNjE2CisjOiBkYXRhL3lhY2MuYzoyMDEzCittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiY3VpbWhuZSDtZGl0aGUiCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL2dsLmdtbyBiL3J1bnRpbWUtcG8vZ2wuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZTA1YTUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lLXBvL2dsLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL2dsLnBvIGIvcnVudGltZS1wby9nbC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGJiY2NhCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9nbC5wbwpAQCAtMCwwICsxLDY2IEBACisjIEdhbGljaWFuIHRyYW5zbGF0aW9uIGZvciBiaXNvbi1ydW50aW1lIHBhY2thZ2UuCisjIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGJpc29uIHBhY2thZ2UuCisjCisjIExlYW5kcm8gUmVndWVpcm8gPGxlYW5kcm8ucmVndWVpcm9AZ21haWwuY29tPiwgMjAxMC4KKyMKKyMgUHJveGVjdG8gVHJhc25vIC0gQWRhcHRhY2nDs24gZG8gc29mdHdhcmUgbGlicmUgw6EgbGluZ3VhIGdhbGVnYTogIFNlIGRlc2V4YXMKKyMgY29sYWJvcmFyIGNvbm5vc2NvLCBwb2RlcyBhdG9wYXIgbcOhaXMgaW5mb3JtYWNpw7NuIGVuIDxodHRwOi8vdHJhc25vLm5ldD4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGJpc29uLXJ1bnRpbWUgMi40LjNcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLWJpc29uQGdudS5vcmdcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMi0xMi0xMiAxNjowOSswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0xMS0zMCAxNjo0MyswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBMZWFuZHJvIFJlZ3VlaXJvIDxsZWFuZHJvLnJlZ3VlaXJvQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBHYWxpY2lhbiA8cHJveGVjdG9AdHJhc25vLm5ldD5cbiIKKyJMYW5ndWFnZTogZ2xcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiE9MSk7XG4iCisKKyM6IGRhdGEvZ2xyLmM6ODU1IGRhdGEveWFjYy5jOjc3NgorbXNnaWQgInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiCittc2dzdHIgImVycm8gZGUgc2ludGF4ZTogbm9uIGZvaSBwb3NpYmxlIHJlYWxpemFyIHVuaGEgY29waWEgZGUgc2VndXJpZGFkZSIKKworIzogZGF0YS9nbHIuYzoxNzI5Cittc2dpZCAic3ludGF4IGlzIGFtYmlndW91cyIKK21zZ3N0ciAiYSBzaW50YXhlIMOpIGFtYmlndWEiCisKKyM6IGRhdGEvZ2xyLmM6MjAxNCBkYXRhL2dsci5jOjIwOTQgZGF0YS9nbHIuYzoyMTM0IGRhdGEvZ2xyLmM6MjM5OQorIzogZGF0YS9sYWxyMS5jYzo5NDcgZGF0YS9sYWxyMS5jYzo5NjcgZGF0YS95YWNjLmM6MTM1MSBkYXRhL3lhY2MuYzoxODU2CisjOiBkYXRhL3lhY2MuYzoxODYyCittc2dpZCAic3ludGF4IGVycm9yIgorbXNnc3RyICJlcnJvIGRlIHNpbnRheGUiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NSBkYXRhL2xhbHIxLmNjOjk0OCBkYXRhL3lhY2MuYzoxMzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIKK21zZ3N0ciAiZXJybyBkZSBzaW50YXhlLCBub24gc2UgYWdhcmRhYmEgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NiBkYXRhL2xhbHIxLmNjOjk0OSBkYXRhL3lhY2MuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIgorbXNnc3RyICJlcnJvIGRlIHNpbnRheGUsIG5vbiBzZSBhZ2FyZGFiYSAlcywgYWdhcmTDoWJhc2UgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NyBkYXRhL2xhbHIxLmNjOjk1MCBkYXRhL3lhY2MuYzoxMzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIgorbXNnc3RyICJlcnJvIGRlIHNpbnRheGUsIG5vbiBzZSBhZ2FyZGFiYSAlcywgYWdhcmTDoWJhc2UgJXMgb3UgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5OCBkYXRhL2xhbHIxLmNjOjk1MSBkYXRhL3lhY2MuYzoxMzU1CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIgorbXNnc3RyICJlcnJvIGRlIHNpbnRheGUsIG5vbiBzZSBhZ2FyZGFiYSAlcywgYWdhcmTDoWJhc2UgJXMgb3UgJXMgb3UgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5OSBkYXRhL2xhbHIxLmNjOjk1MiBkYXRhL3lhY2MuYzoxMzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIgorbXNnc3RyICJlcnJvIGRlIHNpbnRheGUsIG5vbiBzZSBhZ2FyZGFiYSAlcywgYWdhcmTDoWJhc2UgJXMgb3UgJXMgb3UgJXMgb3UgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjQ1OSBkYXRhL3lhY2MuYzoxNDM2IGRhdGEveWFjYy5jOjE0MzggZGF0YS95YWNjLmM6MTYxNgorIzogZGF0YS95YWNjLmM6MjAxMworbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIm1lbW9yaWEgZXNnb3RhZGEiCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL2hyLmdtbyBiL3J1bnRpbWUtcG8vaHIuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYjc3MTAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lLXBvL2hyLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL2hyLnBvIGIvcnVudGltZS1wby9oci5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGU3NDMwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9oci5wbwpAQCAtMCwwICsxLDY0IEBACisjIFRyYW5zbGF0aW9uIG9mIGJpc29uLXJ1bnRpbWUgdG8gQ3JvYXRpYW4uCisjIENvcHlyaWdodCDCqSAyMDAyLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgYmlzb24gcGFja2FnZS4KKyMgRGVuaXMgTGFja292aWMgPGRlbGFja29AZmx5LnNyay5mZXIuaHI+LCAyMDAyLgorIyBUb21pc2xhdiBLcnpuYXIgPHRvbWlzbGF2Lmtyem5hckBnbWFpbC5jb20+LCAyMDEyLgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYmlzb24tcnVudGltZSAyLjYuNVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBidWctYmlzb25AZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEyLTEyLTEyIDE2OjA5KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEyLTExLTA5IDE3OjAyKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFRvbWlzbGF2IEtyem5hciA8dG9taXNsYXYua3J6bmFyQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBDcm9hdGlhbiA8bG9rYWxpemFjaWphQGxpbnV4LmhyPlxuIgorIkxhbmd1YWdlOiBoclxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MzsgcGx1cmFsPShuJTEwPT0xICYmIG4lMTAwIT0xMSA/IDAgOiBuJTEwPj0yICYmIG4iCisiJTEwPD00ICYmIChuJTEwMDwxMCB8fCBuJTEwMD49MjApID8gMSA6IDIpO1xuIgorCisjOiBkYXRhL2dsci5jOjg1NSBkYXRhL3lhY2MuYzo3NzYKK21zZ2lkICJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIgorbXNnc3RyICJzaW50YWtzbmEgZ3JlxaFrYTogbmUgbW9ndSBuYXByYXZpdGkgc2lndXJub3NudSBrb3BpanUiCisKKyM6IGRhdGEvZ2xyLmM6MTcyOQorbXNnaWQgInN5bnRheCBpcyBhbWJpZ3VvdXMiCittc2dzdHIgInNpbnRha3NhIGplIHZpxaFlem5hxI1uYSIKKworIzogZGF0YS9nbHIuYzoyMDE0IGRhdGEvZ2xyLmM6MjA5NCBkYXRhL2dsci5jOjIxMzQgZGF0YS9nbHIuYzoyMzk5CisjOiBkYXRhL2xhbHIxLmNjOjk0NyBkYXRhL2xhbHIxLmNjOjk2NyBkYXRhL3lhY2MuYzoxMzUxIGRhdGEveWFjYy5jOjE4NTYKKyM6IGRhdGEveWFjYy5jOjE4NjIKK21zZ2lkICJzeW50YXggZXJyb3IiCittc2dzdHIgInNpbnRha3NuYSBncmXFoWthIgorCisjOiBkYXRhL2dsci5jOjIwOTUgZGF0YS9sYWxyMS5jYzo5NDggZGF0YS95YWNjLmM6MTM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiCittc2dzdHIgInNpbnRha3NuYSBncmXFoWthLCBuZW/EjWVraXZhbmkgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NiBkYXRhL2xhbHIxLmNjOjk0OSBkYXRhL3lhY2MuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIgorbXNnc3RyICJzaW50YWtzbmEgZ3JlxaFrYSwgbmVvxI1la2l2YW5pICVzLCBvxI1la3VqZW0gJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NyBkYXRhL2xhbHIxLmNjOjk1MCBkYXRhL3lhY2MuYzoxMzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIgorbXNnc3RyICJzaW50YWtzbmEgZ3JlxaFrYSwgbmVvxI1la2l2YW5pICVzLCBvxI1la3VqZW0gJXMgaWxpICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTggZGF0YS9sYWxyMS5jYzo5NTEgZGF0YS95YWNjLmM6MTM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIKK21zZ3N0ciAic2ludGFrc25hIGdyZcWha2EsIG5lb8SNZWtpdmFuaSAlcywgb8SNZWt1amVtICVzLCAlcyBpbGkgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5OSBkYXRhL2xhbHIxLmNjOjk1MiBkYXRhL3lhY2MuYzoxMzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIgorbXNnc3RyICJzaW50YWtzbmEgZ3JlxaFrYSwgbmVvxI1la2l2YW5pICVzLCBvxI1la3VqZW0gJXMsICVzLCAlcyBpbGkgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjQ1OSBkYXRhL3lhY2MuYzoxNDM2IGRhdGEveWFjYy5jOjE0MzggZGF0YS95YWNjLmM6MTYxNgorIzogZGF0YS95YWNjLmM6MjAxMworbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIm1lbW9yaWphIGlzY3JwbGplbmEiCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL2h1LmdtbyBiL3J1bnRpbWUtcG8vaHUuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YjY0MzgKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lLXBvL2h1LmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL2h1LnBvIGIvcnVudGltZS1wby9odS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjM4M2ViCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9odS5wbwpAQCAtMCwwICsxLDYyIEBACisjIFRyYW5zbGF0aW9uIG9mIGJpc29uLXJ1bnRpbWUKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgYmlzb24gcGFja2FnZS4KKyMgS8OpbcOpbmN6eSBLw6FsbcOhbiA8a2tlbWVuY3p5QGdtYWlsLmNvbT4sIDIwMTAuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBiaXNvbi1ydW50aW1lIDIuNC4zXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMDgtMzAgMDU6MjMrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogS8OpbcOpbmN6eSBLw6FsbcOhbiA8a2tlbWVuY3p5QGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBIdW5nYXJpYW4gPHRyYW5zbGF0aW9uLXRlYW0taHVAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiBodVxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorCisjOiBkYXRhL2dsci5jOjg1NSBkYXRhL3lhY2MuYzo3NzYKK21zZ2lkICJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIgorbXNnc3RyICJzemludGFrdGlrYWkgaGliYTogbmVtIG1lbnRoZXTFkSIKKworIzogZGF0YS9nbHIuYzoxNzI5Cittc2dpZCAic3ludGF4IGlzIGFtYmlndW91cyIKK21zZ3N0ciAia8OpdMOpcnRlbG3FsSBzemludGF4aXMiCisKKyM6IGRhdGEvZ2xyLmM6MjAxNCBkYXRhL2dsci5jOjIwOTQgZGF0YS9nbHIuYzoyMTM0IGRhdGEvZ2xyLmM6MjM5OQorIzogZGF0YS9sYWxyMS5jYzo5NDcgZGF0YS9sYWxyMS5jYzo5NjcgZGF0YS95YWNjLmM6MTM1MSBkYXRhL3lhY2MuYzoxODU2CisjOiBkYXRhL3lhY2MuYzoxODYyCittc2dpZCAic3ludGF4IGVycm9yIgorbXNnc3RyICJzemludGFrdGlrYWkgaGliYSIKKworIzogZGF0YS9nbHIuYzoyMDk1IGRhdGEvbGFscjEuY2M6OTQ4IGRhdGEveWFjYy5jOjEzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIgorbXNnc3RyICJzemludGFrdGlrYWkgaGliYSwgbmVtIHbDoXJ0ICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTYgZGF0YS9sYWxyMS5jYzo5NDkgZGF0YS95YWNjLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIKK21zZ3N0ciAic3ppbnRha3Rpa2FpIGhpYmEsIG5lbSB2w6FydCAlcywgdsOhcnQ6ICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTcgZGF0YS9sYWxyMS5jYzo5NTAgZGF0YS95YWNjLmM6MTM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIKK21zZ3N0ciAic3ppbnRha3Rpa2FpIGhpYmEsIG5lbSB2w6FydCAlcywgdsOhcnQ6ICVzLCB2YWd5ICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTggZGF0YS9sYWxyMS5jYzo5NTEgZGF0YS95YWNjLmM6MTM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIKK21zZ3N0ciAic3ppbnRha3Rpa2FpIGhpYmEsIG5lbSB2w6FydCAlcywgdsOhcnQ6ICVzLCB2YWd5ICVzLCB2YWd5ICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTkgZGF0YS9sYWxyMS5jYzo5NTIgZGF0YS95YWNjLmM6MTM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIKK21zZ3N0ciAic3ppbnRha3Rpa2FpIGhpYmEsIG5lbSB2w6FydCAlcywgdsOhcnQ6ICVzLCB2YWd5ICVzLCB2YWd5ICVzLCB2YWd5ICVzIgorCisjOiBkYXRhL2dsci5jOjI0NTkgZGF0YS95YWNjLmM6MTQzNiBkYXRhL3lhY2MuYzoxNDM4IGRhdGEveWFjYy5jOjE2MTYKKyM6IGRhdGEveWFjYy5jOjIwMTMKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJhIG1lbcOzcmlhIGtpw7xyw7xsdCIKZGlmZiAtLWdpdCBhL3J1bnRpbWUtcG8vaWQuZ21vIGIvcnVudGltZS1wby9pZC5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMwNzM4NgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vaWQuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J1bnRpbWUtcG8vaWQucG8gYi9ydW50aW1lLXBvL2lkLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxOGZkNzkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lLXBvL2lkLnBvCkBAIC0wLDAgKzEsNjcgQEAKKyMgdHJhbnNsYXRpb24gb2YgYmlzb24tcnVudGltZS0yLjBiLmlkLnBvIHRvIEluZG9uZXNpYQorIyBiaXNvbi1ydW50aW1lLTIuMGIgKEluZG9uZXNpYW4pCisjIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGJpc29uIDEuNTAgcGFja2FnZS4KKyMgVGVkaSBIZXJpeWFudG8gPHRlZGlfaGVyaXlhbnRvQHlhaG9vLmNvbT4sIDIwMDIsIDIwMDMsIDIwMDUuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBiaXNvbi1ydW50aW1lIDIuMGIuaWRcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLWJpc29uQGdudS5vcmdcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMi0xMi0xMiAxNjowOSswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwNS0wOS0xNCAyMDozOSswNzAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBUZWRpIEhlcml5YW50byA8dGVkaV9oZXJpeWFudG9AeWFob28uY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IEluZG9uZXNpYW4gPHRyYW5zbGF0aW9uLXRlYW0taWRAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiBpZFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MTsgcGx1cmFsPTA7XG4iCisiWC1HZW5lcmF0b3I6IEtCYWJlbCAxLjEwXG4iCisKKyM6IGRhdGEvZ2xyLmM6ODU1IGRhdGEveWFjYy5jOjc3NgorbXNnaWQgInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiCittc2dzdHIgImtlc2FsYWhhbiBzaW50YWtzOiB0aWRhayBkYXBhdCBtZW1iYWNrdXAiCisKKyM6IGRhdGEvZ2xyLmM6MTcyOQorbXNnaWQgInN5bnRheCBpcyBhbWJpZ3VvdXMiCittc2dzdHIgInNpbnRha3MgcmFuY3UiCisKKyM6IGRhdGEvZ2xyLmM6MjAxNCBkYXRhL2dsci5jOjIwOTQgZGF0YS9nbHIuYzoyMTM0IGRhdGEvZ2xyLmM6MjM5OQorIzogZGF0YS9sYWxyMS5jYzo5NDcgZGF0YS9sYWxyMS5jYzo5NjcgZGF0YS95YWNjLmM6MTM1MSBkYXRhL3lhY2MuYzoxODU2CisjOiBkYXRhL3lhY2MuYzoxODYyCittc2dpZCAic3ludGF4IGVycm9yIgorbXNnc3RyICJrZXNhbGFoYW4gc2ludGFrcyIKKworIzogZGF0YS9nbHIuYzoyMDk1IGRhdGEvbGFscjEuY2M6OTQ4IGRhdGEveWFjYy5jOjEzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIgorbXNnc3RyICJrZXNhbGFoYW4gc2ludGFrcywgJXMgdGlkYWsgZGloYXJhcGthbiIKKworIzogZGF0YS9nbHIuYzoyMDk2IGRhdGEvbGFscjEuY2M6OTQ5IGRhdGEveWFjYy5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMiCittc2dzdHIgImtlc2FsYWhhbiBzaW50YWtzLCAlcyB0aWRhayBkaWhhcmFwa2FuLCBtZW5naGFyYXBrYW4gJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NyBkYXRhL2xhbHIxLmNjOjk1MCBkYXRhL3lhY2MuYzoxMzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIgorbXNnc3RyICJrZXNhbGFoYW4gc2ludGFrcywgJXMgdGlkYWsgZGloYXJhcGthbiwgbWVuZ2hhcmFwa2FuICVzIGF0YXUgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5OCBkYXRhL2xhbHIxLmNjOjk1MSBkYXRhL3lhY2MuYzoxMzU1CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIgorbXNnc3RyICIiCisia2VzYWxhaGFuIHNpbnRha3MsICVzIHRpZGFrIGRpaGFyYXBrYW4sIG1lbmdoYXJhcGthbiAlcyBhdGF1ICVzIGF0YXUgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5OSBkYXRhL2xhbHIxLmNjOjk1MiBkYXRhL3lhY2MuYzoxMzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIgorbXNnc3RyICIiCisia2VzYWxhaGFuIHNpbnRha3MsICVzIHRpZGFrIGRpaGFyYXBrYW4sIG1lbmdoYXJhcGthbiAlcyBhdGF1ICVzIGF0YXUgJXMgYXRhdSAiCisiJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjQ1OSBkYXRhL3lhY2MuYzoxNDM2IGRhdGEveWFjYy5jOjE0MzggZGF0YS95YWNjLmM6MTYxNgorIzogZGF0YS95YWNjLmM6MjAxMworbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIm1lbW9yaSBoYWJpcyIKZGlmZiAtLWdpdCBhL3J1bnRpbWUtcG8vaW5zZXJ0LWhlYWRlci5zaW4gYi9ydW50aW1lLXBvL2luc2VydC1oZWFkZXIuc2luCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNmRlMDEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lLXBvL2luc2VydC1oZWFkZXIuc2luCkBAIC0wLDAgKzEsMjMgQEAKKyMgU2VkIHNjcmlwdCB0aGF0IGluc2VydHMgdGhlIGZpbGUgY2FsbGVkIEhFQURFUiBiZWZvcmUgdGhlIGhlYWRlciBlbnRyeS4KKyMKKyMgQXQgZWFjaCBvY2N1cnJlbmNlIG9mIGEgbGluZSBzdGFydGluZyB3aXRoICJtc2dpZCAiLCB3ZSBleGVjdXRlIHRoZSBmb2xsb3dpbmcKKyMgY29tbWFuZHMuIEF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlLCBpbnNlcnQgdGhlIGZpbGUuIEF0IHRoZSBmb2xsb3dpbmcKKyMgb2NjdXJyZW5jZXMsIGRvIG5vdGhpbmcuIFRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIGZvbGxvd2luZworIyBvY2N1cnJlbmNlcyBpcyBhY2hpZXZlZCBieSBsb29raW5nIGF0IHRoZSBob2xkIHNwYWNlLgorL15tc2dpZCAveworeAorIyBUZXN0IGlmIHRoZSBob2xkIHNwYWNlIGlzIGVtcHR5Lgorcy9tL20vCit0YQorIyBZZXMgaXQgd2FzIGVtcHR5LiBGaXJzdCBvY2N1cnJlbmNlLiBSZWFkIHRoZSBmaWxlLgorciBIRUFERVIKKyMgT3V0cHV0IHRoZSBmaWxlJ3MgY29udGVudHMgYnkgcmVhZGluZyB0aGUgbmV4dCBsaW5lLiBCdXQgZG9uJ3QgbG9zZSB0aGUKKyMgY3VycmVudCBsaW5lIHdoaWxlIGRvaW5nIHRoaXMuCitnCitOCitiYgorOmEKKyMgVGhlIGhvbGQgc3BhY2Ugd2FzIG5vbmVtcHR5LiBGb2xsb3dpbmcgb2NjdXJyZW5jZXMuIERvIG5vdGhpbmcuCit4Cis6YgorfQpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9pdC5nbW8gYi9ydW50aW1lLXBvL2l0LmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDU4NzlhCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9pdC5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9pdC5wbyBiL3J1bnRpbWUtcG8vaXQucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MyMjk2OAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vaXQucG8KQEAgLTAsMCArMSw2NSBAQAorIyBJVEFMSUFOIFRSQU5TTEFUSU9OIE9GIEJJU09OLVJVTlRJTUUKKyMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgYmlzb24gcGFja2FnZS4KKyMKKyMgUGFvbG8gQm9uemluaSA8Ym9uemluaUBnbnUub3JnPiwgMjAwMi4KKyMgVmluY2Vuem8gQ2FtcGFuZWxsYSA8dmluejY1QGdtYWlsLmNvbT4sIDIwMTAuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBiaXNvbi1ydW50aW1lIDIuNC4zXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMTAtMjUgMDc6MzUrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogVmluY2Vuem8gQ2FtcGFuZWxsYSA8dmluejY1QGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBJdGFsaWFuIDx0cEBsaXN0cy5saW51eC5pdD5cbiIKKyJMYW5ndWFnZTogaXRcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOC1iaXRcbiIKKyJGaXJzdC1UcmFuc2xhdG9yOiBQYW9sbyBCb256aW5pIDxib256aW5pQGdudS5vcmc+XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IGRhdGEvZ2xyLmM6ODU1IGRhdGEveWFjYy5jOjc3NgorbXNnaWQgInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiCittc2dzdHIgImVycm9yZSBkaSBzaW50YXNzaTogaW1wb3NzaWJpbGUgdG9ybmFyZSBpbmRpZXRybyIKKworIzogZGF0YS9nbHIuYzoxNzI5Cittc2dpZCAic3ludGF4IGlzIGFtYmlndW91cyIKK21zZ3N0ciAibGEgc2ludGFzc2kgw6ggYW1iaWd1YSIKKworIzogZGF0YS9nbHIuYzoyMDE0IGRhdGEvZ2xyLmM6MjA5NCBkYXRhL2dsci5jOjIxMzQgZGF0YS9nbHIuYzoyMzk5CisjOiBkYXRhL2xhbHIxLmNjOjk0NyBkYXRhL2xhbHIxLmNjOjk2NyBkYXRhL3lhY2MuYzoxMzUxIGRhdGEveWFjYy5jOjE4NTYKKyM6IGRhdGEveWFjYy5jOjE4NjIKK21zZ2lkICJzeW50YXggZXJyb3IiCittc2dzdHIgImVycm9yZSBkaSBzaW50YXNzaSIKKworIzogZGF0YS9nbHIuYzoyMDk1IGRhdGEvbGFscjEuY2M6OTQ4IGRhdGEveWFjYy5jOjEzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIgorbXNnc3RyICJlcnJvcmUgZGkgc2ludGFzc2ksICVzIG5vbiBhdHRlc28iCisKKyM6IGRhdGEvZ2xyLmM6MjA5NiBkYXRhL2xhbHIxLmNjOjk0OSBkYXRhL3lhY2MuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIgorbXNnc3RyICJlcnJvcmUgZGkgc2ludGFzc2ksIHJpY2V2dXRvICVzIGFuemljaMOpICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTcgZGF0YS9sYWxyMS5jYzo5NTAgZGF0YS95YWNjLmM6MTM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIKK21zZ3N0ciAiZXJyb3JlIGRpIHNpbnRhc3NpLCByaWNldnV0byAlcyBhbnppY2jDqSAlcyBvICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTggZGF0YS9sYWxyMS5jYzo5NTEgZGF0YS95YWNjLmM6MTM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIKK21zZ3N0ciAiZXJyb3JlIGRpIHNpbnRhc3NpLCByaWNldnV0byAlcyBhbnppY2jDqSAlcywgJXMgbyAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk5IGRhdGEvbGFscjEuY2M6OTUyIGRhdGEveWFjYy5jOjEzNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiCittc2dzdHIgImVycm9yZSBkaSBzaW50YXNzaSwgcmljZXZ1dG8gJXMgYW56aWNow6kgJXMsICVzLCAlcyBvICVzIgorCisjOiBkYXRhL2dsci5jOjI0NTkgZGF0YS95YWNjLmM6MTQzNiBkYXRhL3lhY2MuYzoxNDM4IGRhdGEveWFjYy5jOjE2MTYKKyM6IGRhdGEveWFjYy5jOjIwMTMKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJtZW1vcmlhIGVzYXVyaXRhIgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9qYS5nbW8gYi9ydW50aW1lLXBvL2phLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzVjMTA2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9qYS5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9qYS5wbyBiL3J1bnRpbWUtcG8vamEucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUyYTE5OQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vamEucG8KQEAgLTAsMCArMSw2MyBAQAorIyBKYXBhbmVzZSBtZXNzYWdlIGZvciBHTlUgYmlzb24gMi40IChydW50aW1lKQorIyBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBiaXNvbiBwYWNrYWdlLgorIyBEYWlzdWtlIFlhbWFzaGl0YSA8eWFtYWRAbWIuaW5mb3dlYi5uZS5qcD4sIDIwMDEuCisjIFlhc3Vha2kgVGFuaWd1Y2hpIDx5YXN1YWtpdEBnbWFpbC5jb20+LCAyMDEwCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBiaXNvbi1ydW50aW1lIDIuNFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBidWctYmlzb25AZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEyLTEyLTEyIDE2OjA5KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTAxLTEwIDE0OjI2KzA5MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFlhc3Vha2kgVGFuaWd1Y2hpIDx5YXN1YWtpdEBnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogSmFwYW5lc2UgPHRyYW5zbGF0aW9uLXRlYW0tamFAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiBqYVxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MTsgcGx1cmFsPTA7XG4iCisKKyM6IGRhdGEvZ2xyLmM6ODU1IGRhdGEveWFjYy5jOjc3NgorbXNnaWQgInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiCittc2dzdHIgIuani+aWh+OCqOODqeODvDog44OQ44OD44Kv44Ki44OD44OX44GZ44KL44GT44Go44GM44Gn44GN44G+44Gb44KTIgorCisjOiBkYXRhL2dsci5jOjE3MjkKK21zZ2lkICJzeW50YXggaXMgYW1iaWd1b3VzIgorbXNnc3RyICLmp4vmlofjgYzmm5bmmKfjgafjgZkiCisKKyM6IGRhdGEvZ2xyLmM6MjAxNCBkYXRhL2dsci5jOjIwOTQgZGF0YS9nbHIuYzoyMTM0IGRhdGEvZ2xyLmM6MjM5OQorIzogZGF0YS9sYWxyMS5jYzo5NDcgZGF0YS9sYWxyMS5jYzo5NjcgZGF0YS95YWNjLmM6MTM1MSBkYXRhL3lhY2MuYzoxODU2CisjOiBkYXRhL3lhY2MuYzoxODYyCittc2dpZCAic3ludGF4IGVycm9yIgorbXNnc3RyICLmp4vmlofjgqjjg6njg7wiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NSBkYXRhL2xhbHIxLmNjOjk0OCBkYXRhL3lhY2MuYzoxMzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIKK21zZ3N0ciAi5qeL5paH44Ko44Op44O844CB5LqI5pyf44GX44Gq44GEICVzIOOBp+OBmSIKKworIzogZGF0YS9nbHIuYzoyMDk2IGRhdGEvbGFscjEuY2M6OTQ5IGRhdGEveWFjYy5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMiCittc2dzdHIgIuani+aWh+OCqOODqeODvOOAgeS6iOacn+OBl+OBquOBhCAlcyDjgafjgZnjgILkuojmnJ/jgZXjgozjgovjga7jga8gJXMg44Gn44GZIgorCisjOiBkYXRhL2dsci5jOjIwOTcgZGF0YS9sYWxyMS5jYzo5NTAgZGF0YS95YWNjLmM6MTM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIKK21zZ3N0ciAi5qeL5paH44Ko44Op44O844CB5LqI5pyf44GX44Gq44GEICVzIOOBp+OBmeOAguS6iOacn+OBleOCjOOCi+OBruOBryAlcyDjgb7jgZ/jga8gJXMg44Gn44GZIgorCisjOiBkYXRhL2dsci5jOjIwOTggZGF0YS9sYWxyMS5jYzo5NTEgZGF0YS95YWNjLmM6MTM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIKK21zZ3N0ciAi5qeL5paH44Ko44Op44O844CBIOS6iOacn+OBl+OBquOBhCAlcyDjgafjgZnjgILkuojmnJ/jgZXjgozjgovjga7jga8gJXPjgIElcyDjgb7jgZ/jga8gJXMg44Gn44GZIgorCisjOiBkYXRhL2dsci5jOjIwOTkgZGF0YS9sYWxyMS5jYzo5NTIgZGF0YS95YWNjLmM6MTM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIKK21zZ3N0ciAiIgorIuani+aWh+OCqOODqeODvOOAgeS6iOacn+OBl+OBquOBhCAlcyDjgafjgZnjgILkuojmnJ/jgZXjgozjgovjga7jga8gJXPjgIElc+OAgSVz44CB44G+44Gf44GvICVzIOOBp+OBmeOAgiIKKworIzogZGF0YS9nbHIuYzoyNDU5IGRhdGEveWFjYy5jOjE0MzYgZGF0YS95YWNjLmM6MTQzOCBkYXRhL3lhY2MuYzoxNjE2CisjOiBkYXRhL3lhY2MuYzoyMDEzCittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAi44Oh44Oi44Oq44KS5L2/44GE5p6c44Gf44GX44G+44GX44GfIgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9reS5nbW8gYi9ydW50aW1lLXBvL2t5LmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDYwNTI5Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9reS5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9reS5wbyBiL3J1bnRpbWUtcG8va3kucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ2YTY1YQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8va3kucG8KQEAgLTAsMCArMSw2MyBAQAorIyBUcmFuc2xhdGlvbiBvZiAnYmlzb24tcnVudGltZScgbWVzc2FnZXMgdG8gS2lyZ2hpei4KKyMgQ29weXJpZ2h0IChDKSAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgUEFDS0FHRSBwYWNrYWdlLgorIyBJbHlhcyBCYWtpcm92IDxqdXN0X2lseWFzQHlhaG9vLmNvbT4sIDIwMDguCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBiaXNvbi1ydW50aW1lIDIuM2FcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLWJpc29uQGdudS5vcmdcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMi0xMi0xMiAxNjowOSswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOC0wMS0yOSAxMTo0NyswNjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBJbHlhcyBCYWtpcm92IDxqdXN0X2lseWFzQHlhaG9vLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBLaXJnaGl6IDxpMThuLXRlYW0ta3kta3lyZ3l6QGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZToga3lcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJYLVBvZWRpdC1MYW5ndWFnZTogS3lyZ3l6XG4iCisiWC1Qb2VkaXQtQ291bnRyeTogS1lSR1laU1RBTlxuIgorCisjOiBkYXRhL2dsci5jOjg1NSBkYXRhL3lhY2MuYzo3NzYKK21zZ2lkICJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIgorbXNnc3RyICLRgdC40L3RgtCw0LrRgdC40YEg0LrQsNGC0LDRgdGLOiDQutOp0YfRg9GA0LzTqSDQsNC70YvQvdCz0LDQvSDQttC+0LoiCisKKyM6IGRhdGEvZ2xyLmM6MTcyOQorbXNnaWQgInN5bnRheCBpcyBhbWJpZ3VvdXMiCittc2dzdHIgItGB0LjQvdGC0LDQutGB0LjRgSDQsNC90YvQuiDRjdC80LXRgSIKKworIzogZGF0YS9nbHIuYzoyMDE0IGRhdGEvZ2xyLmM6MjA5NCBkYXRhL2dsci5jOjIxMzQgZGF0YS9nbHIuYzoyMzk5CisjOiBkYXRhL2xhbHIxLmNjOjk0NyBkYXRhL2xhbHIxLmNjOjk2NyBkYXRhL3lhY2MuYzoxMzUxIGRhdGEveWFjYy5jOjE4NTYKKyM6IGRhdGEveWFjYy5jOjE4NjIKK21zZ2lkICJzeW50YXggZXJyb3IiCittc2dzdHIgItGB0LjQvdGC0LDQutGB0LjRgSDQutCw0YLQsNGB0YsiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NSBkYXRhL2xhbHIxLmNjOjk0OCBkYXRhL3lhY2MuYzoxMzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIKK21zZ3N0ciAi0YHQuNC90YLQsNC60YHQuNGBINC60LDRgtCw0YHRiywg0LrSr9GC0q/Qu9Cx06nQs9Op0L0gJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NiBkYXRhL2xhbHIxLmNjOjk0OSBkYXRhL3lhY2MuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIgorbXNnc3RyICLRgdC40L3RgtCw0LrRgdC40YEg0LrQsNGC0LDRgdGLLCDQutKv0YLSr9C70LHTqdCz06nQvSAlcywgJXMg0LrSr9GC0q/Qu9Kv0q/QtNOpIgorCisjOiBkYXRhL2dsci5jOjIwOTcgZGF0YS9sYWxyMS5jYzo5NTAgZGF0YS95YWNjLmM6MTM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIKK21zZ3N0ciAi0YHQuNC90YLQsNC60YHQuNGBINC60LDRgtCw0YHRiywg0LrSr9GC0q/Qu9Cx06nQs9Op0L0gJXMsICVzINC20LUgJXMg0LrSr9GC0q/Qu9Kv0q/QtNOpIgorCisjOiBkYXRhL2dsci5jOjIwOTggZGF0YS9sYWxyMS5jYzo5NTEgZGF0YS95YWNjLmM6MTM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIKK21zZ3N0ciAi0YHQuNC90YLQsNC60YHQuNGBINC60LDRgtCw0YHRiywg0LrSr9GC0q/Qu9Cx06nQs9Op0L0gJXMsICVzINC20LUgJXMg0LbQtSAlcyDQutKv0YLSr9C70q/Sr9C006kiCisKKyM6IGRhdGEvZ2xyLmM6MjA5OSBkYXRhL2xhbHIxLmNjOjk1MiBkYXRhL3lhY2MuYzoxMzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIgorbXNnc3RyICLRgdC40L3RgtCw0LrRgdC40YEg0LrQsNGC0LDRgdGLLCDQutKv0YLSr9C70LHTqdCz06nQvSAlcywgJXMg0LbQtSAlcyDQttC1ICVzINC20LUgJXMg0LrSr9GC0q/Qu9Kv0q/QtNOpIgorCisjOiBkYXRhL2dsci5jOjI0NTkgZGF0YS95YWNjLmM6MTQzNiBkYXRhL3lhY2MuYzoxNDM4IGRhdGEveWFjYy5jOjE2MTYKKyM6IGRhdGEveWFjYy5jOjIwMTMKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICLRjdGBINC60L7Qu9C00L7QvdGD0LvRg9C/INCx0q/RgtGC0q/SryIKZGlmZiAtLWdpdCBhL3J1bnRpbWUtcG8vbHQuZ21vIGIvcnVudGltZS1wby9sdC5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQxZWRkYwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vbHQuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J1bnRpbWUtcG8vbHQucG8gYi9ydW50aW1lLXBvL2x0LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NTUzMmMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lLXBvL2x0LnBvCkBAIC0wLDAgKzEsNjQgQEAKKyMgdHJhbnNsYXRpb24gb2YgYmlzb24tcnVudGltZS0yLjNhIHRvIExpdGh1YW5pYW4KKyMgQ29weXJpZ2h0IChDKSAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgYmlzb24gcGFja2FnZS4KKyMKKyMgR2ludGF1dGFzIE1pbGlhdXNrYXMgPGdpbnRhc0Bha2wubHQ+LCAyMDA4LgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYmlzb24tcnVudGltZS0yLjNhXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDgtMDUtMTQgMDI6MTArMDMwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogR2ludGF1dGFzIE1pbGlhdXNrYXMgPGdpbnRhc0Bha2wubHQ+XG4iCisiTGFuZ3VhZ2UtVGVhbTogTGl0aHVhbmlhbiA8a29tcF9sdEBrb25mZXJlbmNpam9zLmx0PlxuIgorIkxhbmd1YWdlOiBsdFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlgtR2VuZXJhdG9yOiBLQmFiZWwgMS4xMS40XG4iCisiUGx1cmFsLUZvcm1zOiAgbnBsdXJhbHM9MzsgcGx1cmFsPShuJTEwPT0xICYmIG4lMTAwIT0xMSA/IDAgOiBuJTEwPj0yICYmIChuIgorIiUxMDA8MTAgfHwgbiUxMDA+PTIwKSA/IDEgOiAyKTtcbiIKKworIzogZGF0YS9nbHIuYzo4NTUgZGF0YS95YWNjLmM6Nzc2Cittc2dpZCAic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIKK21zZ3N0ciAic2ludGFrc8SXcyBrbGFpZGE6IG5lZ2FsaW1hIGdyxK/FvnRpIgorCisjOiBkYXRhL2dsci5jOjE3MjkKK21zZ2lkICJzeW50YXggaXMgYW1iaWd1b3VzIgorbXNnc3RyICJzaW50YWtzxJcgZHZpcHJhc23ElyIKKworIzogZGF0YS9nbHIuYzoyMDE0IGRhdGEvZ2xyLmM6MjA5NCBkYXRhL2dsci5jOjIxMzQgZGF0YS9nbHIuYzoyMzk5CisjOiBkYXRhL2xhbHIxLmNjOjk0NyBkYXRhL2xhbHIxLmNjOjk2NyBkYXRhL3lhY2MuYzoxMzUxIGRhdGEveWFjYy5jOjE4NTYKKyM6IGRhdGEveWFjYy5jOjE4NjIKK21zZ2lkICJzeW50YXggZXJyb3IiCittc2dzdHIgInNpbnRha3PEl3Mga2xhaWRhIgorCisjOiBkYXRhL2dsci5jOjIwOTUgZGF0YS9sYWxyMS5jYzo5NDggZGF0YS95YWNjLmM6MTM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiCittc2dzdHIgInNpbnRha3PEl3Mga2xhaWRhLCBuZXRpa8SXdGFzICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTYgZGF0YS9sYWxyMS5jYzo5NDkgZGF0YS95YWNjLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIKK21zZ3N0ciAic2ludGFrc8SXcyBrbGFpZGEsIG5ldGlrxJd0YXMgJXMsIHRpa8SXdGFzaSAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk3IGRhdGEvbGFscjEuY2M6OTUwIGRhdGEveWFjYy5jOjEzNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiCittc2dzdHIgInNpbnRha3PEl3Mga2xhaWRhLCBuZXRpa8SXdGFzICVzLCB0aWvEl3Rhc2kgJXMgYXJiYSAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk4IGRhdGEvbGFscjEuY2M6OTUxIGRhdGEveWFjYy5jOjEzNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiCittc2dzdHIgInNpbnRha3PEl3Mga2xhaWRhLCBuZXRpa8SXdGFzICVzLCB0aWvEl3Rhc2kgJXMgYXJiYSAlcyBhcmJhICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTkgZGF0YS9sYWxyMS5jYzo5NTIgZGF0YS95YWNjLmM6MTM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIKK21zZ3N0ciAic2ludGFrc8SXcyBrbGFpZGEsIG5ldGlrxJd0YXMgJXMsIHRpa8SXdGFzaSAlcyBhcmJhICVzIGFyYmEgJXMgYXJiYSAlcyIKKworIzogZGF0YS9nbHIuYzoyNDU5IGRhdGEveWFjYy5jOjE0MzYgZGF0YS95YWNjLmM6MTQzOCBkYXRhL3lhY2MuYzoxNjE2CisjOiBkYXRhL3lhY2MuYzoyMDEzCittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiYmFpZ8SXc2kgYXRtaW50aXMiCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL2x2LmdtbyBiL3J1bnRpbWUtcG8vbHYuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNjRiOTgKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lLXBvL2x2LmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL2x2LnBvIGIvcnVudGltZS1wby9sdi5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzE1NjU4Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9sdi5wbwpAQCAtMCwwICsxLDY1IEBACisjIExhdHZpYW4gdHJhbnNsYXRpb24gb2YgYmlzb24tcnVudGltZQorIyBDb3B5cmlnaHQgKEMpIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBiaXNvbiBwYWNrYWdlLgorIyBBcnZpcyBMxIFjaXMgPGFydmlzLmxhY2lzQGluYm94Lmx2PiwgMjAwOS4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGJpc29uLXJ1bnRpbWUtMi40XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDktMDctMjggMjE6MjgrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogUmloYXJkcyBQcmllZMSrdGlzIDxycHJpZWRpdGlzQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBMYXR2aWFuIDx0cmFuc2xhdGlvbi10ZWFtLWx2QGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZTogbHZcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJYLVBvZWRpdC1MYW5ndWFnZTogTGF0dmlhblxuIgorIlgtUG9lZGl0LUNvdW50cnk6IExBVFZJQVxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MzsgcGx1cmFsPShuJTEwPT0xICYmIG4lMTAwIT0xMSA/IDAgOiBuICE9IDAgPyAxIDogIgorIjIpO1xuIgorCisjOiBkYXRhL2dsci5jOjg1NSBkYXRhL3lhY2MuYzo3NzYKK21zZ2lkICJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIgorbXNnc3RyICJzaW50YWtzZXMga8S8xatkYTogbmV2YXIgZHVibMSTdCBkYXR1cyIKKworIzogZGF0YS9nbHIuYzoxNzI5Cittc2dpZCAic3ludGF4IGlzIGFtYmlndW91cyIKK21zZ3N0ciAic2ludGFrc2UgaXIgZGl2ZG9txKtnYSIKKworIzogZGF0YS9nbHIuYzoyMDE0IGRhdGEvZ2xyLmM6MjA5NCBkYXRhL2dsci5jOjIxMzQgZGF0YS9nbHIuYzoyMzk5CisjOiBkYXRhL2xhbHIxLmNjOjk0NyBkYXRhL2xhbHIxLmNjOjk2NyBkYXRhL3lhY2MuYzoxMzUxIGRhdGEveWFjYy5jOjE4NTYKKyM6IGRhdGEveWFjYy5jOjE4NjIKK21zZ2lkICJzeW50YXggZXJyb3IiCittc2dzdHIgInNpbnRha3NlcyBrxLzFq2RhIgorCisjOiBkYXRhL2dsci5jOjIwOTUgZGF0YS9sYWxyMS5jYzo5NDggZGF0YS95YWNjLmM6MTM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiCittc2dzdHIgInNpbnRha3NlcyBrxLzFq2RhLCBuZWdhaWTEq3RzICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTYgZGF0YS9sYWxyMS5jYzo5NDkgZGF0YS95YWNjLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIKK21zZ3N0ciAic2ludGFrc2VzIGvEvMWrZGEsIG5lZ2FpZMSrdHMgJXMsIHRpa2EgZ2FpZMSrdHMgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NyBkYXRhL2xhbHIxLmNjOjk1MCBkYXRhL3lhY2MuYzoxMzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIgorbXNnc3RyICJzaW50YWtzZXMga8S8xatkYSwgbmVnYWlkxKt0cyAlcywgdGlrYSBnYWlkxKt0cyAlcyB2YWkgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5OCBkYXRhL2xhbHIxLmNjOjk1MSBkYXRhL3lhY2MuYzoxMzU1CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIgorbXNnc3RyICJzaW50YWtzZXMga8S8xatkYSwgbmVnYWlkxKt0cyAlcywgdGlrYSBnYWlkxKt0cyAlcyB2YWkgJXMsIHZhaSAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk5IGRhdGEvbGFscjEuY2M6OTUyIGRhdGEveWFjYy5jOjEzNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiCittc2dzdHIgInNpbnRha3NlcyBrxLzFq2RhLCBuZWdhaWTEq3RzICVzLCB0aWthIGdhaWTEq3RzICVzIHZhaSAlcywgdmFpICVzLCB2YWkgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjQ1OSBkYXRhL3lhY2MuYzoxNDM2IGRhdGEveWFjYy5jOjE0MzggZGF0YS95YWNjLmM6MTYxNgorIzogZGF0YS95YWNjLmM6MjAxMworbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIml6c21lbHRhIGF0bWnFhmEiCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL21zLmdtbyBiL3J1bnRpbWUtcG8vbXMuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwOGQyNDUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lLXBvL21zLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL21zLnBvIGIvcnVudGltZS1wby9tcy5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWRkMzIzCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9tcy5wbwpAQCAtMCwwICsxLDY0IEBACisjIEJpc29uLXJ1bnRpbWUgQmFoYXNhIE1lbGF5dSAoTWFsYXkpIChtcykuCisjIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIEJpc29uLXJ1bnRpbWUgcGFja2FnZS4KKyMgU2hhcnV6emFtYW4gQWhtYXQgUmFzbGFuIDxzaGFydXp6YW1hbkBteXJlYWxib3guY29tPiwgMjAwNS4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGJpc29uLXJ1bnRpbWUgMi4xXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDUtMTAtMTAgMTA6NTArMDgwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogU2hhcnV6emFtYW4gQWhtYXQgUmFzbGFuIDxzaGFydXp6YW1hbkBteXJlYWxib3guY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IE1hbGF5IDx0cmFuc2xhdGlvbi10ZWFtLW1zQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZTogbXNcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTE7IHBsdXJhbD0wO1xuIgorIlgtR2VuZXJhdG9yOiBLQmFiZWwgMC45LjVcbiIKKworIzogZGF0YS9nbHIuYzo4NTUgZGF0YS95YWNjLmM6Nzc2Cittc2dpZCAic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIKK21zZ3N0ciAicmFsYXQgc2ludGFrczogdGlkYWsgZGFwYXQgbWVuZ3VuZHVyIgorCisjOiBkYXRhL2dsci5jOjE3MjkKK21zZ2lkICJzeW50YXggaXMgYW1iaWd1b3VzIgorbXNnc3RyICJzaW50YWtzIGFkYWxhaCBrYWJ1ciIKKworIzogZGF0YS9nbHIuYzoyMDE0IGRhdGEvZ2xyLmM6MjA5NCBkYXRhL2dsci5jOjIxMzQgZGF0YS9nbHIuYzoyMzk5CisjOiBkYXRhL2xhbHIxLmNjOjk0NyBkYXRhL2xhbHIxLmNjOjk2NyBkYXRhL3lhY2MuYzoxMzUxIGRhdGEveWFjYy5jOjE4NTYKKyM6IGRhdGEveWFjYy5jOjE4NjIKK21zZ2lkICJzeW50YXggZXJyb3IiCittc2dzdHIgInJhbGF0IHNpbnRha3MiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NSBkYXRhL2xhbHIxLmNjOjk0OCBkYXRhL3lhY2MuYzoxMzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIKK21zZ3N0ciAicmFsYXQgc2ludGFrcywgdGlkYWsgbWVuamFuZ2thICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTYgZGF0YS9sYWxyMS5jYzo5NDkgZGF0YS95YWNjLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIKK21zZ3N0ciAicmFsYXQgc2ludGFrcywgdGlkYWsgbWVuamFuZ2thICVzLCBtZW5qYW5na2EgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NyBkYXRhL2xhbHIxLmNjOjk1MCBkYXRhL3lhY2MuYzoxMzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIgorbXNnc3RyICJyYWxhdCBzaW50YWtzLCB0aWRhayBtZW5qYW5na2EgJXMsIG1lbmphbmdrYSAlcyBhdGF1ICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTggZGF0YS9sYWxyMS5jYzo5NTEgZGF0YS95YWNjLmM6MTM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIKK21zZ3N0ciAicmFsYXQgc2ludGFrcywgdGlkYWsgbWVuamFuZ2thICVzLCBtZW5qYW5na2EgJXMgYXRhdSAlcyBhdGF1ICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTkgZGF0YS9sYWxyMS5jYzo5NTIgZGF0YS95YWNjLmM6MTM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIKK21zZ3N0ciAiIgorInJhbGF0IHNpbnRha3MsIHRpZGFrIG1lbmphbmdrYSAlcywgbWVuamFuZ2thICVzIGF0YXUgJXMgYXRhdSAlcyBhdGF1ICVzIgorCisjOiBkYXRhL2dsci5jOjI0NTkgZGF0YS95YWNjLmM6MTQzNiBkYXRhL3lhY2MuYzoxNDM4IGRhdGEveWFjYy5jOjE2MTYKKyM6IGRhdGEveWFjYy5jOjIwMTMKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJrZWhhYmlzYW4gbWVtb3JpIgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9uYi5nbW8gYi9ydW50aW1lLXBvL25iLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmY4M2JkCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9uYi5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9uYi5wbyBiL3J1bnRpbWUtcG8vbmIucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5YzVjYQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vbmIucG8KQEAgLTAsMCArMSw3NyBAQAorIyBOb3J3ZWdpYW4gYm9rbeVsIHRyYW5zbGF0aW9uIG9mIEdOVSBiaXNvbi4KKyMgQ29weXJpZ2h0IChDKSAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgUEFDS0FHRSBwYWNrYWdlLgorIyBUcm9uZCBFbmRyZXN0+GwgPFRyb25kLkVuZHJlc3RvbEBndGYub2wubm8+LCAyMDA0LgorIworIyBTZW5kIHRoaXMgZmlsZSBhcyBhbiBnemlwcGVkIGF0dGFjaG1lbnQgdG86CisjIHRyYW5zbGF0aW9uQGlyby51bW9udHJlYWwuY2EKKyMgd2l0aCB0aGUgc3ViamVjdDoKKyMgVFAtUm9ib3QgUEFDS0FHRS1WRVJTSU9OLlRFQU0ucG8KKyMKKyMgVGhlIHN1YmplY3QgZm9yIHRoZSBOb3J3ZWdpYW4gYm9rbeVsIHRyYW5zbGF0aW9uIG9mIEdOVSBiaXNvbi1ydW50aW1lIDIuMQorIyB3b3VsZCB0aGVuIGJlOgorIyBUUC1Sb2JvdCBiaXNvbi1ydW50aW1lLTIuMS5uYi5wbworIworIyBIZXJlJ3MgdGhlIFVSTCBmb3IgdGhlIE5vcndlZ2lhbiBib2tt5WwgdHJhbnNsYXRpb24gdGVhbToKKyMgaHR0cDovL3d3dy5pcm8udW1vbnRyZWFsLmNhL3RyYW5zbGF0aW9uL3JlZ2lzdHJ5LmNnaT90ZWFtPW5iCisjCisjIEhlcmUncyB0aGUgVVJMIGZvciB0aGUgY3VycmVudCB0cmFuc2xhdGlvbnMgb2YgR05VIGJpc29uLXJ1bnRpbWU6CisjIGh0dHA6Ly93d3cuaXJvLnVtb250cmVhbC5jYS90cmFuc2xhdGlvbi9yZWdpc3RyeS5jZ2k/ZG9tYWluPWJpc29uLXJ1bnRpbWUKKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGJpc29uLXJ1bnRpbWUgMi4xXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDUtMDktMjEgMDk6MzUrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogVHJvbmQgRW5kcmVzdPhsIDxUcm9uZC5FbmRyZXN0b2xAZ3RmLm9sLm5vPlxuIgorIkxhbmd1YWdlLVRlYW06IE5vcndlZ2lhbiBCb2ttYWFsIDxpMThuLW5iQGxpc3Rlci5waW5nLnVpby5ubz5cbiIKKyJMYW5ndWFnZTogbmJcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorCisjOiBkYXRhL2dsci5jOjg1NSBkYXRhL3lhY2MuYzo3NzYKK21zZ2lkICJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIgorbXNnc3RyICJzeW50YWtzZmVpbDoga2FuIGlra2UgZ+UgdGlsYmFrZSIKKworIzogZGF0YS9nbHIuYzoxNzI5Cittc2dpZCAic3ludGF4IGlzIGFtYmlndW91cyIKK21zZ3N0ciAic3ludGFrc2VuIGVyIGZsZXJ0eWRpZyIKKworIzogZGF0YS9nbHIuYzoyMDE0IGRhdGEvZ2xyLmM6MjA5NCBkYXRhL2dsci5jOjIxMzQgZGF0YS9nbHIuYzoyMzk5CisjOiBkYXRhL2xhbHIxLmNjOjk0NyBkYXRhL2xhbHIxLmNjOjk2NyBkYXRhL3lhY2MuYzoxMzUxIGRhdGEveWFjYy5jOjE4NTYKKyM6IGRhdGEveWFjYy5jOjE4NjIKK21zZ2lkICJzeW50YXggZXJyb3IiCittc2dzdHIgInN5bnRha3NmZWlsIgorCisjOiBkYXRhL2dsci5jOjIwOTUgZGF0YS9sYWxyMS5jYzo5NDggZGF0YS95YWNjLmM6MTM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiCittc2dzdHIgInN5bnRha3NmZWlsLCB1Zm9ydmVudGV0ICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTYgZGF0YS9sYWxyMS5jYzo5NDkgZGF0YS95YWNjLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIKK21zZ3N0ciAic3ludGFrc2ZlaWwsIHVmb3J2ZW50ZXQgJXMsIGZvcnZlbnRldCAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk3IGRhdGEvbGFscjEuY2M6OTUwIGRhdGEveWFjYy5jOjEzNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiCittc2dzdHIgInN5bnRha3NmZWlsLCB1Zm9ydmVudGV0ICVzLCBmb3J2ZW50ZXQgJXMgZWxsZXIgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5OCBkYXRhL2xhbHIxLmNjOjk1MSBkYXRhL3lhY2MuYzoxMzU1CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIgorbXNnc3RyICJzeW50YWtzZmVpbCwgdWZvcnZlbnRldCAlcywgZm9ydmVudGV0ICVzIGVsbGVyICVzIGVsbGVyICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTkgZGF0YS9sYWxyMS5jYzo5NTIgZGF0YS95YWNjLmM6MTM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIKK21zZ3N0ciAic3ludGFrc2ZlaWwsIHVmb3J2ZW50ZXQgJXMsIGZvcnZlbnRldCAlcyBlbGxlciAlcyBlbGxlciAlcyBlbGxlciAlcyIKKworIzogZGF0YS9nbHIuYzoyNDU5IGRhdGEveWFjYy5jOjE0MzYgZGF0YS95YWNjLmM6MTQzOCBkYXRhL3lhY2MuYzoxNjE2CisjOiBkYXRhL3lhY2MuYzoyMDEzCittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAibWlubmUgZXIgdXR0+G10IgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9ubC5nbW8gYi9ydW50aW1lLXBvL25sLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTdjNjViCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9ubC5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9ubC5wbyBiL3J1bnRpbWUtcG8vbmwucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkxODYxYgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vbmwucG8KQEAgLTAsMCArMSw2MiBAQAorIyBEdXRjaCBtZXNzYWdlcyBmb3IgR05VIGJpc29uLgorIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRpbSBWYW4gSG9sZGVyIDx0aW0udmFuLmhvbGRlckB0ZWxlbmV0LmJlPiwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNS4KKyMgRXJpY2sgQnJhbmRlcmhvcnN0IDxicmFuZGVyaEBkZWJpYW4ub3JnPiwgMTk5Ni4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGJpc29uLXJ1bnRpbWUgMi4xXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDUtMDktMjEgMTE6MjIrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogVGltIFZhbiBIb2xkZXIgPHRpbS52YW4uaG9sZGVyQHRlbGVuZXQuYmU+XG4iCisiTGFuZ3VhZ2UtVGVhbTogRHV0Y2ggPHZlcnRhbGluZ0B2cmlqc2NocmlmdC5vcmc+XG4iCisiTGFuZ3VhZ2U6IG5sXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IGRhdGEvZ2xyLmM6ODU1IGRhdGEveWFjYy5jOjc3NgorbXNnaWQgInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiCittc2dzdHIgInN5bnRheGZvdXQ6IGthbiBuaWV0IHRlcnVna2VyZW4iCisKKyM6IGRhdGEvZ2xyLmM6MTcyOQorbXNnaWQgInN5bnRheCBpcyBhbWJpZ3VvdXMiCittc2dzdHIgInN5bnRheCBpcyBuaWV0IGVlbmR1aWRpZyIKKworIzogZGF0YS9nbHIuYzoyMDE0IGRhdGEvZ2xyLmM6MjA5NCBkYXRhL2dsci5jOjIxMzQgZGF0YS9nbHIuYzoyMzk5CisjOiBkYXRhL2xhbHIxLmNjOjk0NyBkYXRhL2xhbHIxLmNjOjk2NyBkYXRhL3lhY2MuYzoxMzUxIGRhdGEveWFjYy5jOjE4NTYKKyM6IGRhdGEveWFjYy5jOjE4NjIKK21zZ2lkICJzeW50YXggZXJyb3IiCittc2dzdHIgInN5bnRheGZvdXQiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NSBkYXRhL2xhbHIxLmNjOjk0OCBkYXRhL3lhY2MuYzoxMzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIKK21zZ3N0ciAic3ludGF4Zm91dCwgJXMgb252ZXJ3YWNodCIKKworIzogZGF0YS9nbHIuYzoyMDk2IGRhdGEvbGFscjEuY2M6OTQ5IGRhdGEveWFjYy5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMiCittc2dzdHIgInN5bnRheGZvdXQsICVzIG9udmVyd2FjaHQgKCVzIHZlcndhY2h0KSIKKworIzogZGF0YS9nbHIuYzoyMDk3IGRhdGEvbGFscjEuY2M6OTUwIGRhdGEveWFjYy5jOjEzNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiCittc2dzdHIgInN5bnRheGZvdXQsICVzIG9udmVyd2FjaHQgKCVzIG9mICVzIHZlcndhY2h0KSIKKworIzogZGF0YS9nbHIuYzoyMDk4IGRhdGEvbGFscjEuY2M6OTUxIGRhdGEveWFjYy5jOjEzNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiCittc2dzdHIgInN5bnRheGZvdXQsICVzIG9udmVyd2FjaHQgKCVzIG9mICVzIG9mICVzIHZlcndhY2h0KSIKKworIzogZGF0YS9nbHIuYzoyMDk5IGRhdGEvbGFscjEuY2M6OTUyIGRhdGEveWFjYy5jOjEzNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiCittc2dzdHIgInN5bnRheGZvdXQsICVzIG9udmVyd2FjaHQgKCVzIG9mICVzIG9mICVzIG9mICVzIHZlcndhY2h0KSIKKworIzogZGF0YS9nbHIuYzoyNDU5IGRhdGEveWFjYy5jOjE0MzYgZGF0YS95YWNjLmM6MTQzOCBkYXRhL3lhY2MuYzoxNjE2CisjOiBkYXRhL3lhY2MuYzoyMDEzCittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiZ2VlbiBnZWhldWdlbiBtZWVyIGJlc2NoaWtiYWFyIgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9wbC5nbW8gYi9ydW50aW1lLXBvL3BsLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTQ1YTBhCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9wbC5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9wbC5wbyBiL3J1bnRpbWUtcG8vcGwucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzczMDIzZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vcGwucG8KQEAgLTAsMCArMSw2NCBAQAorIyBQb2xpc2ggdHJhbnNsYXRpb25zIGZvciBHTlUgQmlzb24gcGFja2FnZS4KKyMgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgYmlzb24gcGFja2FnZS4KKyMgV29qY2llY2ggUG9sYWsgPHBvbGFrQGdudS5vcmc+LCAyMDA0LCAyMDA1LCAyMDEwLgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYmlzb24tcnVudGltZSAyLjQuMWFcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLWJpc29uQGdudS5vcmdcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMi0xMi0xMiAxNjowOSswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wMS0zMCAxOToxMSswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBXb2pjaWVjaCBQb2xhayA8cG9sYWtAZ251Lm9yZz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBQb2xpc2ggPHRyYW5zbGF0aW9uLXRlYW0tcGxAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiBwbFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MzsgcGx1cmFsPShuPT0xID8gMCA6IG4lMTA+PTIgJiYgbiUxMDw9NCAmJiAobiUxMDA8MTAgIgorInx8IG4lMTAwPj0yMCkgPyAxIDogMik7XG4iCisKKyM6IGRhdGEvZ2xyLmM6ODU1IGRhdGEveWFjYy5jOjc3NgorbXNnaWQgInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiCittc2dzdHIgImLFgsSFZCBza8WCYWRuaTogbmllIG1vxbxuYSBjb2ZuxIXEhyBwcnplc3VuacSZY2lhIHN5bWJvbHUgbGVrc3lrYWxuZWdvIgorCisjOiBkYXRhL2dsci5jOjE3MjkKK21zZ2lkICJzeW50YXggaXMgYW1iaWd1b3VzIgorbXNnc3RyICJza8WCYWRuaWEgamVzdCBuaWVqZWRub3puYWN6bmEiCisKKyM6IGRhdGEvZ2xyLmM6MjAxNCBkYXRhL2dsci5jOjIwOTQgZGF0YS9nbHIuYzoyMTM0IGRhdGEvZ2xyLmM6MjM5OQorIzogZGF0YS9sYWxyMS5jYzo5NDcgZGF0YS9sYWxyMS5jYzo5NjcgZGF0YS95YWNjLmM6MTM1MSBkYXRhL3lhY2MuYzoxODU2CisjOiBkYXRhL3lhY2MuYzoxODYyCittc2dpZCAic3ludGF4IGVycm9yIgorbXNnc3RyICJixYLEhWQgc2vFgmFkbmkiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NSBkYXRhL2xhbHIxLmNjOjk0OCBkYXRhL3lhY2MuYzoxMzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIKK21zZ3N0ciAiYsWCxIVkIHNrxYJhZG5pLCBuaWVzcG9kemlld2FueSBzeW1ib2wgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NiBkYXRhL2xhbHIxLmNjOjk0OSBkYXRhL3lhY2MuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIgorbXNnc3RyICJixYLEhWQgc2vFgmFkbmksIG5pZXNwb2R6aWV3YW55IHN5bWJvbCAlcywgb2N6ZWtpd2FubyAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk3IGRhdGEvbGFscjEuY2M6OTUwIGRhdGEveWFjYy5jOjEzNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiCittc2dzdHIgImLFgsSFZCBza8WCYWRuaSwgbmllc3BvZHppZXdhbnkgc3ltYm9sICVzLCBvY3pla2l3YW5vICVzIGx1YiAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk4IGRhdGEvbGFscjEuY2M6OTUxIGRhdGEveWFjYy5jOjEzNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiCittc2dzdHIgImLFgsSFZCBza8WCYWRuaSwgbmllc3BvZHppZXdhbnkgJXMsIG9jemVraXdhbm8gJXMgbHViICVzIGx1YiAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk5IGRhdGEvbGFscjEuY2M6OTUyIGRhdGEveWFjYy5jOjEzNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiCittc2dzdHIgIiIKKyJixYLEhWQgc2vFgmFkbmksIG5pZXNwb2R6aWV3YW55IHN5bWJvbCAlcywgb2N6ZWtpd2FubyAlcyBsdWIgJXMgbHViICVzIGx1YiAlcyIKKworIzogZGF0YS9nbHIuYzoyNDU5IGRhdGEveWFjYy5jOjE0MzYgZGF0YS95YWNjLmM6MTQzOCBkYXRhL3lhY2MuYzoxNjE2CisjOiBkYXRhL3lhY2MuYzoyMDEzCittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAicGFtacSZxIcgd3ljemVycGFuYSIKZGlmZiAtLWdpdCBhL3J1bnRpbWUtcG8vcHQuZ21vIGIvcnVudGltZS1wby9wdC5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJjZjQ0ZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vcHQuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J1bnRpbWUtcG8vcHQucG8gYi9ydW50aW1lLXBvL3B0LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZmM3MWYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lLXBvL3B0LnBvCkBAIC0wLDAgKzEsNjQgQEAKKyMgYmlzb24tcnVudGltZS0yLjQ6IFRyYW5zbGF0aW9uIHRvIFBvcnR1Z3Vlc2UuCisjIENvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGJpc29uIHBhY2thZ2UuCisjIEh1Z28gUGF0csOtY2lvIDxodWdvLmEucGF0cmljaW9AZ21haWwuY29tPiwgMjAwOS4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGJpc29uLXJ1bnRpbWUtMi40XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDktMDEtMjcgMDM6MTYrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogSHVnbyBQYXRyw61jaW8gPGh1Z28uYS5wYXRyaWNpb0BnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogUG9ydHVndWVzZSA8dHJhbnNsYXRpb24tdGVhbS1wdEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCisiTGFuZ3VhZ2U6IHB0XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiWC1Qb2VkaXQtTGFuZ3VhZ2U6IFBvcnR1Z3Vlc2VcbiIKKyJYLVBvZWRpdC1Db3VudHJ5OiBQT1JUVUdBTFxuIgorIlgtUG9lZGl0LVNvdXJjZUNoYXJzZXQ6IHV0Zi04XG4iCisKKyM6IGRhdGEvZ2xyLmM6ODU1IGRhdGEveWFjYy5jOjc3NgorbXNnaWQgInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiCittc2dzdHIgImVycm8gZGUgc2ludGF4ZTogbsOjbyDDqSBwb3Nzw612ZWwgdm9sdGFyIgorCisjOiBkYXRhL2dsci5jOjE3MjkKK21zZ2lkICJzeW50YXggaXMgYW1iaWd1b3VzIgorbXNnc3RyICJhIHNpbnRheGUgw6kgYW1iw61ndWEiCisKKyM6IGRhdGEvZ2xyLmM6MjAxNCBkYXRhL2dsci5jOjIwOTQgZGF0YS9nbHIuYzoyMTM0IGRhdGEvZ2xyLmM6MjM5OQorIzogZGF0YS9sYWxyMS5jYzo5NDcgZGF0YS9sYWxyMS5jYzo5NjcgZGF0YS95YWNjLmM6MTM1MSBkYXRhL3lhY2MuYzoxODU2CisjOiBkYXRhL3lhY2MuYzoxODYyCittc2dpZCAic3ludGF4IGVycm9yIgorbXNnc3RyICJlcnJvIGRlIHNpbnRheGUiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NSBkYXRhL2xhbHIxLmNjOjk0OCBkYXRhL3lhY2MuYzoxMzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIKK21zZ3N0ciAiZXJybyBkZSBzaW50YXhlLCAlcyBpbmVzcGVyYWRvIgorCisjOiBkYXRhL2dsci5jOjIwOTYgZGF0YS9sYWxyMS5jYzo5NDkgZGF0YS95YWNjLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIKK21zZ3N0ciAiZXJybyBkZSBzaW50YXhlLCAlcyBpbmVzcGVyYWRvLCBlc3BlcmFuZG8gJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NyBkYXRhL2xhbHIxLmNjOjk1MCBkYXRhL3lhY2MuYzoxMzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIgorbXNnc3RyICJlcnJvIGRlIHNpbnRheGUsICVzIGluZXNwZXJhZG8sIGVzcGVyYW5kbyAlcyBvdSAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk4IGRhdGEvbGFscjEuY2M6OTUxIGRhdGEveWFjYy5jOjEzNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiCittc2dzdHIgImVycm8gZGUgc2ludGF4ZSwgJXMgaW5lc3BlcmFkbywgZXNwZXJhbmRvICVzIG91ICVzIG91ICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTkgZGF0YS9sYWxyMS5jYzo5NTIgZGF0YS95YWNjLmM6MTM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIKK21zZ3N0ciAiZXJybyBkZSBzaW50YXhlLCAlcyBpbmVzcGVyYWRvLCBlc3BlcmFuZG8gJXMgb3UgJXMgb3UgJXMgb3UgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjQ1OSBkYXRhL3lhY2MuYzoxNDM2IGRhdGEveWFjYy5jOjE0MzggZGF0YS95YWNjLmM6MTYxNgorIzogZGF0YS95YWNjLmM6MjAxMworbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIm1lbcOzcmlhIGV4YXVzdGEiCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL3B0X0JSLmdtbyBiL3J1bnRpbWUtcG8vcHRfQlIuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YzllYzQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lLXBvL3B0X0JSLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL3B0X0JSLnBvIGIvcnVudGltZS1wby9wdF9CUi5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTU3YTUyCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9wdF9CUi5wbwpAQCAtMCwwICsxLDYxIEBACisjIEJyYXppbGlhbiBQb3J0dWd1ZXNlIFRyYW5zbGF0aW9uIChwdF9CUikuCisjIENvcHlyaWdodCCpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBiaXNvbi1ydW50aW1lIHBhY2thZ2UuCisjIExlc2xpZSBIYXJsbGV5IFdhdHRlciA8bGVzbGllQHdhdHRlci5vcmc+LCAyMDA3LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYmlzb24tcnVudGltZSAyLjNhXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDctMDUtMDMgMjI6MzktMDMwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogTGVzbGllIEhhcmxsZXkgV2F0dGVyIDxsZXNsaWVAd2F0dGVyLm9yZz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBCcmF6aWxpYW4gUG9ydHVndWVzZSA8bGRwLWJyQGJhemFyLmNvbmVjdGl2YS5jb20uYnI+XG4iCisiTGFuZ3VhZ2U6IHB0X0JSXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMVxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogZGF0YS9nbHIuYzo4NTUgZGF0YS95YWNjLmM6Nzc2Cittc2dpZCAic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIKK21zZ3N0ciAiZXJybyBkZSBzaW50YXhlOiBu428g6SBwb3Nz7XZlbCB2b2x0YXIiCisKKyM6IGRhdGEvZ2xyLmM6MTcyOQorbXNnaWQgInN5bnRheCBpcyBhbWJpZ3VvdXMiCittc2dzdHIgImEgc2ludGF4ZSDpIGFtYu1ndWEiCisKKyM6IGRhdGEvZ2xyLmM6MjAxNCBkYXRhL2dsci5jOjIwOTQgZGF0YS9nbHIuYzoyMTM0IGRhdGEvZ2xyLmM6MjM5OQorIzogZGF0YS9sYWxyMS5jYzo5NDcgZGF0YS9sYWxyMS5jYzo5NjcgZGF0YS95YWNjLmM6MTM1MSBkYXRhL3lhY2MuYzoxODU2CisjOiBkYXRhL3lhY2MuYzoxODYyCittc2dpZCAic3ludGF4IGVycm9yIgorbXNnc3RyICJlcnJvIGRlIHNpbnRheGUiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NSBkYXRhL2xhbHIxLmNjOjk0OCBkYXRhL3lhY2MuYzoxMzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIKK21zZ3N0ciAiZXJybyBkZSBzaW50YXhlLCAlcyBu428gZXNwZXJhZG8iCisKKyM6IGRhdGEvZ2xyLmM6MjA5NiBkYXRhL2xhbHIxLmNjOjk0OSBkYXRhL3lhY2MuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIgorbXNnc3RyICJlcnJvIGRlIHNpbnRheGUsICVzIG7jbyBlc3BlcmFkbywgZXNwZXJhbmRvICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTcgZGF0YS9sYWxyMS5jYzo5NTAgZGF0YS95YWNjLmM6MTM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIKK21zZ3N0ciAiZXJybyBkZSBzaW50YXhlLCAlcyBu428gZXNwZXJhZG8sIGVzcGVyYW5kbyAlcyBvdSAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk4IGRhdGEvbGFscjEuY2M6OTUxIGRhdGEveWFjYy5jOjEzNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiCittc2dzdHIgImVycm8gZGUgc2ludGF4ZSwgJXMgbuNvIGVzcGVyYWRvLCBlc3BlcmFuZG8gJXMgb3UgJXMgb3UgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5OSBkYXRhL2xhbHIxLmNjOjk1MiBkYXRhL3lhY2MuYzoxMzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIgorbXNnc3RyICJlcnJvIGRlIHNpbnRheGUsICVzIG7jbyBlc3BlcmFkbywgZXNwZXJhbmRvICVzIG91ICVzIG91ICVzIG91ICVzIgorCisjOiBkYXRhL2dsci5jOjI0NTkgZGF0YS95YWNjLmM6MTQzNiBkYXRhL3lhY2MuYzoxNDM4IGRhdGEveWFjYy5jOjE2MTYKKyM6IGRhdGEveWFjYy5jOjIwMTMKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJmYWx0YSBkZSBtZW3zcmlhIgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9xdW90LnNlZCBiL3J1bnRpbWUtcG8vcXVvdC5zZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEyMmM0NgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vcXVvdC5zZWQKQEAgLTAsMCArMSw2IEBACitzLyJcKFteIl0qXCkiL+KAnFwx4oCdL2cKK3MvYFwoW15gJ10qXCknL+KAmFwx4oCZL2cKK3MvICdcKFteYCddKlwpJyAvIOKAmFwx4oCZIC9nCitzLyAnXChbXmAnXSpcKSckLyDigJhcMeKAmS9nCitzL14nXChbXmAnXSpcKScgL+KAmFwx4oCZIC9nCitzL+KAnOKAnS8iIi9nCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL3JlbW92ZS1wb3RjZGF0ZS5zaW4gYi9ydW50aW1lLXBvL3JlbW92ZS1wb3RjZGF0ZS5zaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQzNmM0OQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vcmVtb3ZlLXBvdGNkYXRlLnNpbgpAQCAtMCwwICsxLDE5IEBACisjIFNlZCBzY3JpcHQgdGhhdCByZW1vdmUgdGhlIFBPVC1DcmVhdGlvbi1EYXRlIGxpbmUgaW4gdGhlIGhlYWRlciBlbnRyeQorIyBmcm9tIGEgUE9UIGZpbGUuCisjCisjIFRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIGZvbGxvd2luZyBvY2N1cnJlbmNlcyBvZiB0aGUKKyMgcGF0dGVybiBpcyBhY2hpZXZlZCBieSBsb29raW5nIGF0IHRoZSBob2xkIHNwYWNlLgorL14iUE9ULUNyZWF0aW9uLURhdGU6IC4qIiQveworeAorIyBUZXN0IGlmIHRoZSBob2xkIHNwYWNlIGlzIGVtcHR5Lgorcy9QL1AvCit0YQorIyBZZXMgaXQgd2FzIGVtcHR5LiBGaXJzdCBvY2N1cnJlbmNlLiBSZW1vdmUgdGhlIGxpbmUuCitnCitkCitiYgorOmEKKyMgVGhlIGhvbGQgc3BhY2Ugd2FzIG5vbmVtcHR5LiBGb2xsb3dpbmcgb2NjdXJyZW5jZXMuIERvIG5vdGhpbmcuCit4Cis6YgorfQpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9yby5nbW8gYi9ydW50aW1lLXBvL3JvLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjM0NjUzCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9yby5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9yby5wbyBiL3J1bnRpbWUtcG8vcm8ucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUyOGNjZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vcm8ucG8KQEAgLTAsMCArMSw2NSBAQAorIyBNZXNhamVsZSDubiBsaW1iYSByb23ibuMgcGVudHJ1IEdOVSBCaXNvbi4KKyMgQ29weXJpZ2h0IChDKSAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBBY2VzdCBmabppZXIgZXN0ZSBkaXN0cmlidWl0IHN1YiBhY2VlYbppIGxpY2Vu/uMgY2EgumkgcGFjaGV0dWwgYmlzb24uCisjIExhdXJlbnRpdSBCdXpkdWdhbiA8bGJ1ekByb2xpeC5vcmc+LCAyMDAzLDIwMDQsMjAwNS4KKyMKKyMKKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGJpc29uLXJ1bnRpbWUgMi4xXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDUtMDktMjAgMTI6MDAtMDUwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogTGF1cmVudGl1IEJ1emR1Z2FuIDxsYnV6QHJvbGl4Lm9yZz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBSb21hbmlhbiA8dHJhbnNsYXRpb24tdGVhbS1yb0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCisiTGFuZ3VhZ2U6IHJvXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMlxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTM7IHBsdXJhbD0obj09MSA/IDAgOiAobj09MCB8fCAoKG4lMTAwKSA+IDAgJiYgKG4iCisiJTEwMCkgPCAyMCkpID8gMSA6IDIpO1xuIgorCisjOiBkYXRhL2dsci5jOjg1NSBkYXRhL3lhY2MuYzo3NzYKK21zZ2lkICJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIgorbXNnc3RyICJlcm9hcmUgZGUgc2ludGF44zogbnUgcG90IGRhIO5uYXBvaSIKKworIzogZGF0YS9nbHIuYzoxNzI5Cittc2dpZCAic3ludGF4IGlzIGFtYmlndW91cyIKK21zZ3N0ciAic2ludGF4YSBlc3RlIGFtYmlndeMiCisKKyM6IGRhdGEvZ2xyLmM6MjAxNCBkYXRhL2dsci5jOjIwOTQgZGF0YS9nbHIuYzoyMTM0IGRhdGEvZ2xyLmM6MjM5OQorIzogZGF0YS9sYWxyMS5jYzo5NDcgZGF0YS9sYWxyMS5jYzo5NjcgZGF0YS95YWNjLmM6MTM1MSBkYXRhL3lhY2MuYzoxODU2CisjOiBkYXRhL3lhY2MuYzoxODYyCittc2dpZCAic3ludGF4IGVycm9yIgorbXNnc3RyICJlcm9hcmUgZGUgc2ludGF44yIKKworIzogZGF0YS9nbHIuYzoyMDk1IGRhdGEvbGFscjEuY2M6OTQ4IGRhdGEveWFjYy5jOjEzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIgorbXNnc3RyICJlcm9hcmUgZGUgc2ludGF44ywgJXMgbmVhunRlcHRhdCIKKworIzogZGF0YS9nbHIuYzoyMDk2IGRhdGEvbGFscjEuY2M6OTQ5IGRhdGEveWFjYy5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMiCittc2dzdHIgImVyb2FyZSBkZSBzaW50YXjjLCAlcyBuZWG6dGVwdGF0LCBhunRlcHQgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NyBkYXRhL2xhbHIxLmNjOjk1MCBkYXRhL3lhY2MuYzoxMzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIgorbXNnc3RyICJlcm9hcmUgZGUgc2ludGF44ywgJXMgbmVhunRlcHRhdCwgYbp0ZXB0ICVzIHNhdSAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk4IGRhdGEvbGFscjEuY2M6OTUxIGRhdGEveWFjYy5jOjEzNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiCittc2dzdHIgImVyb2FyZSBkZSBzaW50YXjjLCAlcyBuZWG6dGVwdGF0LCBhunRlcHQgJXMgc2F1ICVzIHNhdSAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk5IGRhdGEvbGFscjEuY2M6OTUyIGRhdGEveWFjYy5jOjEzNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiCittc2dzdHIgImVyb2FyZSBkZSBzaW50YXjjLCAlcyBuZWG6dGVwdGF0LCBhunRlcHQgJXMgc2F1ICVzIHNhdSAlcyBzYXUgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjQ1OSBkYXRhL3lhY2MuYzoxNDM2IGRhdGEveWFjYy5jOjE0MzggZGF0YS95YWNjLmM6MTYxNgorIzogZGF0YS95YWNjLmM6MjAxMworbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIm1lbW9yaWUgZXB1aXphdOMiCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL3J1LmdtbyBiL3J1bnRpbWUtcG8vcnUuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MzY2NDUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lLXBvL3J1LmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL3J1LnBvIGIvcnVudGltZS1wby9ydS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjg1NjljCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9ydS5wbwpAQCAtMCwwICsxLDY2IEBACisjIFRyYW5zbGF0aW9uIG9mIGJpc29uLXJ1bnRpbWUgbWVzc2FnZXMgdG8gUnVzc2lhbgorIyBDb3B5cmlnaHQgKEMpIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBiaXNvbiBwYWNrYWdlLgorIworIyBEbWl0cnkgUy4gU2l2YWNoZW5rbyA8ZGltYUBDaGcuUlU+LCAxOTk5LDIwMDAsMjAwMSwyMDAyLgorIyBEaW1pdHJpeSBSeWF6YW50Y2V2IDxESm0wMG5AbWFpbC5ydT4sIDIwMDkuCisjIFBhdmVsIE1hcnlhbm92IDxhY2lkX2phY2tAdWtyLm5ldD4sIDIwMDkuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBiaXNvbi1ydW50aW1lIDIuNFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBidWctYmlzb25AZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEyLTEyLTEyIDE2OjA5KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA5LTAyLTA0IDE5OjQ4KzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFBhdmVsIE1hcnlhbm92IDxhY2lkX2phY2tAdWtyLm5ldD5cbiIKKyJMYW5ndWFnZS1UZWFtOiBSdXNzaWFuIDxnbnVAbXgucnU+XG4iCisiTGFuZ3VhZ2U6IHJ1XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IGRhdGEvZ2xyLmM6ODU1IGRhdGEveWFjYy5jOjc3NgorbXNnaWQgInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiCittc2dzdHIgItGB0LjQvdGC0LDQutGB0LjRh9C10YHQutCw0Y8g0L7RiNC40LHQutCwOiDQvdC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINGA0LXQt9C10YDQstC90YPRjiDQutC+0L/QuNGOIgorCisjOiBkYXRhL2dsci5jOjE3MjkKK21zZ2lkICJzeW50YXggaXMgYW1iaWd1b3VzIgorbXNnc3RyICLQvdC10L7QtNC90L7Qt9C90LDRh9C90YvQuSDRgdC40L3RgtCw0LrRgdC40YEiCisKKyM6IGRhdGEvZ2xyLmM6MjAxNCBkYXRhL2dsci5jOjIwOTQgZGF0YS9nbHIuYzoyMTM0IGRhdGEvZ2xyLmM6MjM5OQorIzogZGF0YS9sYWxyMS5jYzo5NDcgZGF0YS9sYWxyMS5jYzo5NjcgZGF0YS95YWNjLmM6MTM1MSBkYXRhL3lhY2MuYzoxODU2CisjOiBkYXRhL3lhY2MuYzoxODYyCittc2dpZCAic3ludGF4IGVycm9yIgorbXNnc3RyICLRgdC40L3RgtCw0LrRgdC40YfQtdGB0LrQsNGPINC+0YjQuNCx0LrQsCIKKworIzogZGF0YS9nbHIuYzoyMDk1IGRhdGEvbGFscjEuY2M6OTQ4IGRhdGEveWFjYy5jOjEzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIgorbXNnc3RyICLRgdC40L3RgtCw0LrRgdC40YfQtdGB0LrQsNGPINC+0YjQuNCx0LrQsCwg0L3QtdC/0YDQtdC00LLQuNC00LXQvdC90LDRjyAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk2IGRhdGEvbGFscjEuY2M6OTQ5IGRhdGEveWFjYy5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMiCittc2dzdHIgItGB0LjQvdGC0LDQutGB0LjRh9C10YHQutCw0Y8g0L7RiNC40LHQutCwLCDQvdC10L/RgNC10LTQstC40LTQtdC90L3QsNGPICVzLCDQvtC20LjQtNCw0LXRgtGB0Y8gJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NyBkYXRhL2xhbHIxLmNjOjk1MCBkYXRhL3lhY2MuYzoxMzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIgorbXNnc3RyICLRgdC40L3RgtCw0LrRgdC40YfQtdGB0LrQsNGPINC+0YjQuNCx0LrQsCwg0L3QtdC/0YDQtdC00LLQuNC00LXQvdC90LDRjyAlcywg0L7QttC40LTQsNC10YLRgdGPICVzINC40LvQuCAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk4IGRhdGEvbGFscjEuY2M6OTUxIGRhdGEveWFjYy5jOjEzNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiCittc2dzdHIgItGB0LjQvdGC0LDQutGB0LjRh9C10YHQutCw0Y8g0L7RiNC40LHQutCwLCDQvdC10L/RgNC10LTQstC40LTQtdC90L3QsNGPICVzLCDQvtC20LjQtNCw0LXRgtGB0Y8gJXMg0LjQu9C4ICVzLCDQuNC70LggJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5OSBkYXRhL2xhbHIxLmNjOjk1MiBkYXRhL3lhY2MuYzoxMzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIgorbXNnc3RyICIiCisi0YHQuNC90YLQsNC60YHQuNGH0LXRgdC60LDRjyDQvtGI0LjQsdC60LAsINC90LXQv9GA0LXQtNCy0LjQtNC10L3QvdCw0Y8gJXMsINC+0LbQuNC00LDQtdGC0YHRjyAlcyDQuNC70LggJXMsINC40LvQuCAlcywg0LjQu9C4ICVzIgorCisjOiBkYXRhL2dsci5jOjI0NTkgZGF0YS95YWNjLmM6MTQzNiBkYXRhL3lhY2MuYzoxNDM4IGRhdGEveWFjYy5jOjE2MTYKKyM6IGRhdGEveWFjYy5jOjIwMTMKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICLQvdC10LTQvtGB0YLQsNGC0L7Rh9C90L4g0L/QsNC80Y/RgtC4IgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9zbC5nbW8gYi9ydW50aW1lLXBvL3NsLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWU1NTAxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9zbC5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9zbC5wbyBiL3J1bnRpbWUtcG8vc2wucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJlNTIxMwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vc2wucG8KQEAgLTAsMCArMSw2NCBAQAorIyBTbG92ZW5pYW4gdHJhbnNsYXRpb24gb2YgYmlzb24tcnVudGltZS4KKyMgQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGJpc29uIHBhY2thZ2UuCisjIE1hdGVqIFVyYmFuxI1pxI0gPG1hdGVqLnVyYmFuQGdtYWlsLmNvbT4sIDIwMDUuCisjIEtsZW1lbiBLb8WhaXIgPGtsZW1lbi5rb3NpckBnbXguY29tPiwgMjAxMi4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGJpc29uLXJ1bnRpbWUgMi41XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTItMDMtMDUgMTA6MTUrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogS2xlbWVuIEtvxaFpciA8a2xlbWVuLmtvc2lyQGdteC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogU2xvdmVuaWFuIDx0cmFuc2xhdGlvbi10ZWFtLXNsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZTogc2xcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTQ7IHBsdXJhbD0obiUxMDA9PTEgPyAxIDogbiUxMDA9PTIgPyAyIDogbiUxMDA9PTMgfHwgbiIKKyIlMTAwPT00ID8gMyA6IDApO1xuIgorCisjOiBkYXRhL2dsci5jOjg1NSBkYXRhL3lhY2MuYzo3NzYKK21zZ2lkICJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIgorbXNnc3RyICJza2xhZGVuanNrYSBuYXBha2E6IHZybml0ZXYgbmkgbW9nb8SNYSIKKworIzogZGF0YS9nbHIuYzoxNzI5Cittc2dpZCAic3ludGF4IGlzIGFtYmlndW91cyIKK21zZ3N0ciAiZHZvdW1uYSBza2xhZG5qYSIKKworIzogZGF0YS9nbHIuYzoyMDE0IGRhdGEvZ2xyLmM6MjA5NCBkYXRhL2dsci5jOjIxMzQgZGF0YS9nbHIuYzoyMzk5CisjOiBkYXRhL2xhbHIxLmNjOjk0NyBkYXRhL2xhbHIxLmNjOjk2NyBkYXRhL3lhY2MuYzoxMzUxIGRhdGEveWFjYy5jOjE4NTYKKyM6IGRhdGEveWFjYy5jOjE4NjIKK21zZ2lkICJzeW50YXggZXJyb3IiCittc2dzdHIgInNrbGFkZW5qc2thIG5hcGFrYSIKKworIzogZGF0YS9nbHIuYzoyMDk1IGRhdGEvbGFscjEuY2M6OTQ4IGRhdGEveWFjYy5jOjEzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIgorbXNnc3RyICJza2xhZGVuanNrYSBuYXBha2EsIG5lcHJpxI1ha292YW4gJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NiBkYXRhL2xhbHIxLmNjOjk0OSBkYXRhL3lhY2MuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIgorbXNnc3RyICJza2xhZGVuanNrYSBuYXBha2EsIG5lcHJpxI1ha292YW4gJXMsIHByacSNYWt1amUgc2UgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NyBkYXRhL2xhbHIxLmNjOjk1MCBkYXRhL3lhY2MuYzoxMzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIgorbXNnc3RyICJza2xhZGVuanNrYSBuYXBha2EsIG5lcHJpxI1ha292YW4gJXMsIHByacSNYWt1amUgc2UgJXMgYWxpICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTggZGF0YS9sYWxyMS5jYzo5NTEgZGF0YS95YWNjLmM6MTM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIKK21zZ3N0ciAic2tsYWRlbmpza2EgbmFwYWthLCBuZXByacSNYWtvdmFuICVzLCBwcmnEjWFrdWplIHNlICVzICwgJXMgYWxpICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTkgZGF0YS9sYWxyMS5jYzo5NTIgZGF0YS95YWNjLmM6MTM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIKK21zZ3N0ciAic2tsYWRlbmpza2EgbmFwYWthLCBuZXByacSNYWtvdmFuICVzLCBwcmnEjWFrdWplIHNlICVzICwgJXMgLCAlcyBhbGkgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjQ1OSBkYXRhL3lhY2MuYzoxNDM2IGRhdGEveWFjYy5jOjE0MzggZGF0YS95YWNjLmM6MTYxNgorIzogZGF0YS95YWNjLmM6MjAxMworbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgInptYW5qa2FsbyBqZSBwb21uaWxuaWthIgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9zcS5nbW8gYi9ydW50aW1lLXBvL3NxLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmQ3MTI4Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9zcS5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9zcS5wbyBiL3J1bnRpbWUtcG8vc3EucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEyMzY0MwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vc3EucG8KQEAgLTAsMCArMSw2MiBAQAorIyBBbGJhbmlhbiB0cmFuc2xhdGlvbiBvZiBiaXNvbi1ydW50aW1lCisjIENvcHlyaWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGJpc29uIHBhY2thZ2UuCisjIEFncm9uIFNlbGltYWogPGxpbnV4bWFzdGVyQHZlcml6b24ubmV0PiwgMjAxMi4KKyMKKyMsIGZ1enp5Cittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBiaXNvbi1ydW50aW1lIDIuNi4yXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTItMTAtMDggMjE6MzUrMDUwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogQWdyb24gU2VsaW1haiA8bGludXhtYXN0ZXJAdmVyaXpvbi5uZXQ+XG4iCisiTGFuZ3VhZ2UtVGVhbTogQWxiYW5pYW4gPHRyYW5zbGF0aW9uLXRlYW0tc3FAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiBzcVxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTFcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IGRhdGEvZ2xyLmM6ODU1IGRhdGEveWFjYy5jOjc3NgorbXNnaWQgInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiCittc2dzdHIgImdhYmltIHNpbnRha3NvcjogbnVrIG11bmQgdMOrIHJ1YWogbmrDqyBrb3BqZSIKKworIzogZGF0YS9nbHIuYzoxNzI5Cittc2dpZCAic3ludGF4IGlzIGFtYmlndW91cyIKK21zZ3N0ciAic2ludGFrc2Egw6tzaHTDqyBlIG5namFzaG1lIG1lIHTDqyB0amVyYSIKKworIzogZGF0YS9nbHIuYzoyMDE0IGRhdGEvZ2xyLmM6MjA5NCBkYXRhL2dsci5jOjIxMzQgZGF0YS9nbHIuYzoyMzk5CisjOiBkYXRhL2xhbHIxLmNjOjk0NyBkYXRhL2xhbHIxLmNjOjk2NyBkYXRhL3lhY2MuYzoxMzUxIGRhdGEveWFjYy5jOjE4NTYKKyM6IGRhdGEveWFjYy5jOjE4NjIKK21zZ2lkICJzeW50YXggZXJyb3IiCittc2dzdHIgImdhYmltIHNpbnRha3NvciIKKworIzogZGF0YS9nbHIuYzoyMDk1IGRhdGEvbGFscjEuY2M6OTQ4IGRhdGEveWFjYy5jOjEzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIgorbXNnc3RyICJnYWJpbSBzaW50YWtzb3IsICVzIGkgcGFwcml0dXIiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NiBkYXRhL2xhbHIxLmNjOjk0OSBkYXRhL3lhY2MuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIgorbXNnc3RyICJnYWJpbSBzaW50YWtzb3IsICVzIGkgcGFwcml0dXIsIHByaXRldCAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk3IGRhdGEvbGFscjEuY2M6OTUwIGRhdGEveWFjYy5jOjEzNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiCittc2dzdHIgImdhYmltIHNpbnRha3NvciwgJXMgaSBwYXByaXR1ciwgcHJpdGV0ICVzIG9zZSAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk4IGRhdGEvbGFscjEuY2M6OTUxIGRhdGEveWFjYy5jOjEzNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiCittc2dzdHIgImdhYmltIHNpbnRha3NvciwgJXMgaSBwYXByaXR1ciwgcHJpdGV0ICVzIG9zZSAlcyBvc2UgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5OSBkYXRhL2xhbHIxLmNjOjk1MiBkYXRhL3lhY2MuYzoxMzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIgorbXNnc3RyICJnYWJpbSBzaW50YWtzb3IsICVzIGkgcGFwcml0dXIsIHByaXRldCAlcyBvc2UgJXMgb3NlICVzIG9zZSAlcyIKKworIzogZGF0YS9nbHIuYzoyNDU5IGRhdGEveWFjYy5jOjE0MzYgZGF0YS95YWNjLmM6MTQzOCBkYXRhL3lhY2MuYzoxNjE2CisjOiBkYXRhL3lhY2MuYzoyMDEzCittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAibnVrIG1iZXRpIGt1anRlc8OrIG3DqyIKZGlmZiAtLWdpdCBhL3J1bnRpbWUtcG8vc3IuZ21vIGIvcnVudGltZS1wby9zci5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZmZTBiMAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vc3IuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J1bnRpbWUtcG8vc3IucG8gYi9ydW50aW1lLXBvL3NyLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MTcxZjYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lLXBvL3NyLnBvCkBAIC0wLDAgKzEsNjQgQEAKKyMgU09NRSBERVNDUklQVElWRSBUSVRMRS4KKyMgQ29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgYmlzb24gcGFja2FnZS4KKyMg0JzQuNGA0L7RgdC70LDQsiDQndC40LrQvtC70LjRmyA8bWlyb3NsYXZuaWtvbGljQHJvY2tldG1haWwuY29tPiwgMjAxMS4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGJpc29uLXJ1bnRpbWUtMi41XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTEtMTItMjAgMTE6MDcrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjog0JzQuNGA0L7RgdC70LDQsiDQndC40LrQvtC70LjRmyA8bWlyb3NsYXZuaWtvbGljQHJvY2tldG1haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IFNlcmJpYW4gPGdudUBwcmV2b2Qub3JnPlxuIgorIkxhbmd1YWdlOiBzclxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MzsgcGx1cmFsPShuJTEwPT0xICYmIG4lMTAwIT0xMSA/IDAgOiBuJTEwPj0yICYmIG4iCisiJTEwPD00ICYmIChuJTEwMDwxMCB8fCBuJTEwMD49MjApID8gMSA6IDIpO1xuIgorIlgtR2VuZXJhdG9yOiBWaXJ0YWFsIDAuNy4wXG4iCisKKyM6IGRhdGEvZ2xyLmM6ODU1IGRhdGEveWFjYy5jOjc3NgorbXNnaWQgInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiCittc2dzdHIgItCz0YDQtdGI0LrQsCDRgdC40L3RgtCw0LrRgdC1OiDQvdC1INC80L7Qs9GDINC00LAg0YHQtSDQstGA0LDRgtC40Lwg0LPQvtGA0LUgIgorCisjOiBkYXRhL2dsci5jOjE3MjkKK21zZ2lkICJzeW50YXggaXMgYW1iaWd1b3VzIgorbXNnc3RyICLRgdC40L3RgtCw0LrRgdCwINGY0LUg0L3QtdGY0LDRgdC90LAiCisKKyM6IGRhdGEvZ2xyLmM6MjAxNCBkYXRhL2dsci5jOjIwOTQgZGF0YS9nbHIuYzoyMTM0IGRhdGEvZ2xyLmM6MjM5OQorIzogZGF0YS9sYWxyMS5jYzo5NDcgZGF0YS9sYWxyMS5jYzo5NjcgZGF0YS95YWNjLmM6MTM1MSBkYXRhL3lhY2MuYzoxODU2CisjOiBkYXRhL3lhY2MuYzoxODYyCittc2dpZCAic3ludGF4IGVycm9yIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0YHQuNC90YLQsNC60YHQtSIKKworIzogZGF0YS9nbHIuYzoyMDk1IGRhdGEvbGFscjEuY2M6OTQ4IGRhdGEveWFjYy5jOjEzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0YHQuNC90YLQsNC60YHQtSwg0L3QuNGY0LUg0L7Rh9C10LrQuNCy0LDQvdC+ICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTYgZGF0YS9sYWxyMS5jYzo5NDkgZGF0YS95YWNjLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIKK21zZ3N0ciAi0LPRgNC10YjQutCwINGB0LjQvdGC0LDQutGB0LUsINC90LjRmNC1INC+0YfQtdC60LjQstCw0L3QviAlcywg0L7Rh9C10LrQuNCy0LDQvdC+INGY0LUgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NyBkYXRhL2xhbHIxLmNjOjk1MCBkYXRhL3lhY2MuYzoxMzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0YHQuNC90YLQsNC60YHQtSwg0L3QuNGY0LUg0L7Rh9C10LrQuNCy0LDQvdC+ICVzLCDQvtGH0LXQutC40LLQsNC90L4g0ZjQtSAlcyDQuNC70LggJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5OCBkYXRhL2xhbHIxLmNjOjk1MSBkYXRhL3lhY2MuYzoxMzU1CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0YHQuNC90YLQsNC60YHQtSwg0L3QuNGY0LUg0L7Rh9C10LrQuNCy0LDQvdC+ICVzLCDQvtGH0LXQutC40LLQsNC90L4g0ZjQtSAlcyDQuNC70LggJXMg0LjQu9C4ICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTkgZGF0YS9sYWxyMS5jYzo5NTIgZGF0YS95YWNjLmM6MTM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIKK21zZ3N0ciAiIgorItCz0YDQtdGI0LrQsCDRgdC40L3RgtCw0LrRgdC1LCDQvdC40ZjQtSDQvtGH0LXQutC40LLQsNC90L4gJXMsINC+0YfQtdC60LjQstCw0L3QviDRmNC1ICVzINC40LvQuCAlcyDQuNC70LggJXMg0LjQu9C4ICVzIgorCisjOiBkYXRhL2dsci5jOjI0NTkgZGF0YS95YWNjLmM6MTQzNiBkYXRhL3lhY2MuYzoxNDM4IGRhdGEveWFjYy5jOjE2MTYKKyM6IGRhdGEveWFjYy5jOjIwMTMKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICLQvNC10LzQvtGA0LjRmNCwINGY0LUg0L/QvtGC0YDQvtGI0LXQvdCwIgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby9zdGFtcC1wbyBiL3J1bnRpbWUtcG8vc3RhbXAtcG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc4OGY3MAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vc3RhbXAtcG8KQEAgLTAsMCArMSBAQAordGltZXN0YW1wCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL3N2LmdtbyBiL3J1bnRpbWUtcG8vc3YuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYTRhYmUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lLXBvL3N2LmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL3N2LnBvIGIvcnVudGltZS1wby9zdi5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWRmZTIxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby9zdi5wbwpAQCAtMCwwICsxLDY0IEBACisjIFN3ZWRpc2ggbWVzc2FnZXMgZm9yIGJpc29uLgorIyBDb3B5cmlnaHQgwqkgMjAwMS0yMDA2LCAyMDA4LCAyMDEwLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgYmlzb24gcGFja2FnZS4KKyMgR8O2cmFuIFVkZGVib3JnIDxnb2VyYW5AdWRkZWJvcmcuc2U+LCAyMDAxLTIwMDYsIDIwMDgsIDIwMTAsIDIwMTIuCisjCisjICRSZXZpc2lvbjogMS4zMSAkCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBiaXNvbi1ydW50aW1lIDIuNi45MFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBidWctYmlzb25AZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEyLTEyLTEyIDE2OjA5KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEyLTEyLTA5IDIxOjEwKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEfDtnJhbiBVZGRlYm9yZyA8Z29lcmFuQHVkZGVib3JnLnNlPlxuIgorIkxhbmd1YWdlLVRlYW06IFN3ZWRpc2ggPHRwLXN2QGxpc3Rvci50cC1zdi5zZT5cbiIKKyJMYW5ndWFnZTogc3ZcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKworIzogZGF0YS9nbHIuYzo4NTUgZGF0YS95YWNjLmM6Nzc2Cittc2dpZCAic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIKK21zZ3N0ciAic3ludGF4ZmVsOiBrYW4gaW50ZSBiYWNrYSIKKworIzogZGF0YS9nbHIuYzoxNzI5Cittc2dpZCAic3ludGF4IGlzIGFtYmlndW91cyIKK21zZ3N0ciAidHZldHlkaWcgc3ludGF4IgorCisjOiBkYXRhL2dsci5jOjIwMTQgZGF0YS9nbHIuYzoyMDk0IGRhdGEvZ2xyLmM6MjEzNCBkYXRhL2dsci5jOjIzOTkKKyM6IGRhdGEvbGFscjEuY2M6OTQ3IGRhdGEvbGFscjEuY2M6OTY3IGRhdGEveWFjYy5jOjEzNTEgZGF0YS95YWNjLmM6MTg1NgorIzogZGF0YS95YWNjLmM6MTg2MgorbXNnaWQgInN5bnRheCBlcnJvciIKK21zZ3N0ciAic3ludGF4ZmVsIgorCisjOiBkYXRhL2dsci5jOjIwOTUgZGF0YS9sYWxyMS5jYzo5NDggZGF0YS95YWNjLmM6MTM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiCittc2dzdHIgInN5bnRheGZlbCwgb3bDpG50YWQgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NiBkYXRhL2xhbHIxLmNjOjk0OSBkYXRhL3lhY2MuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIgorbXNnc3RyICJzeW50YXhmZWwsIG92w6RudGFkICVzLCBmw7ZydsOkbnRhZGUgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NyBkYXRhL2xhbHIxLmNjOjk1MCBkYXRhL3lhY2MuYzoxMzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIgorbXNnc3RyICJzeW50YXhmZWwsIG92w6RudGFkICVzLCBmw7ZydsOkbnRhZGUgJXMgZWxsZXIgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5OCBkYXRhL2xhbHIxLmNjOjk1MSBkYXRhL3lhY2MuYzoxMzU1CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIgorbXNnc3RyICJzeW50YXhmZWwsIG92w6RudGFkICVzLCBmw7ZydsOkbnRhZGUgJXMgZWxsZXIgJXMgZWxsZXIgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5OSBkYXRhL2xhbHIxLmNjOjk1MiBkYXRhL3lhY2MuYzoxMzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIgorbXNnc3RyICJzeW50YXhmZWwsIG92w6RudGFkICVzLCBmw7ZydsOkbnRhZGUgJXMgZWxsZXIgJXMgZWxsZXIgJXMgZWxsZXIgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjQ1OSBkYXRhL3lhY2MuYzoxNDM2IGRhdGEveWFjYy5jOjE0MzggZGF0YS95YWNjLmM6MTYxNgorIzogZGF0YS95YWNjLmM6MjAxMworbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIm1pbm5ldCBzbHV0IgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby90aC5nbW8gYi9ydW50aW1lLXBvL3RoLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWM0NjMzCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby90aC5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby90aC5wbyBiL3J1bnRpbWUtcG8vdGgucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc2OGRlZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vdGgucG8KQEAgLTAsMCArMSw2NSBAQAorIyBUcmFuc2xhdGlvbiBiaXNvbi1ydW50aW1lIHRvIFRoYWkuCisjIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGJpc29uIHBhY2thZ2UuCisjCisjIFNla3NhbiBQb2x0cmVlIDxzZWtzYW4ucG9sdHJlZUBnbWFpbC5jb20+LCAyMDA3LTIwMTAuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBiaXNvbi1ydW50aW1lIDIuNC4yXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMDMtMjMgMDE6MzArMDcwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogU2Vrc2FuIFBvbHRyZWUgPHNla3Nhbi5wb2x0cmVlQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBUaGFpIDx0cmFuc2xhdGlvbi10ZWFtLXRoQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZTogdGhcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJYLVBvZWRpdC1MYW5ndWFnZTogVGhhaVxuIgorIlgtUG9lZGl0LUNvdW50cnk6IFRIQUlMQU5EXG4iCisiWC1HZW5lcmF0b3I6IExva2FsaXplIDEuMFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPW4gIT0gMTtcbiIKKworIzogZGF0YS9nbHIuYzo4NTUgZGF0YS95YWNjLmM6Nzc2Cittc2dpZCAic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIKK21zZ3N0ciAi4LiC4LmJ4Lit4Lic4Li04LiU4Lie4Lil4Liy4LiU4Lin4Liy4LiB4Lii4Liq4Lix4Lih4Lie4Lix4LiZ4LiY4LmMOiDguYTguKHguYjguKrguLLguKHguLLguKPguJbguKrguLPguKPguK3guIfguILguYnguK3guKHguLnguKUiCisKKyM6IGRhdGEvZ2xyLmM6MTcyOQorbXNnaWQgInN5bnRheCBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIuC4p+C4suC4geC4ouC4quC4seC4oeC4nuC4seC4meC4mOC5jOC4hOC4peC4uOC4oeC5gOC4hOC4o+C4t+C4reC5hOC4oeC5iOC4iuC4seC4lOC5gOC4iOC4mSIKKworIzogZGF0YS9nbHIuYzoyMDE0IGRhdGEvZ2xyLmM6MjA5NCBkYXRhL2dsci5jOjIxMzQgZGF0YS9nbHIuYzoyMzk5CisjOiBkYXRhL2xhbHIxLmNjOjk0NyBkYXRhL2xhbHIxLmNjOjk2NyBkYXRhL3lhY2MuYzoxMzUxIGRhdGEveWFjYy5jOjE4NTYKKyM6IGRhdGEveWFjYy5jOjE4NjIKK21zZ2lkICJzeW50YXggZXJyb3IiCittc2dzdHIgIuC4guC5ieC4reC4nOC4tOC4lOC4nuC4peC4suC4lOC4p+C4suC4geC4ouC4quC4seC4oeC4nuC4seC4meC4mOC5jCIKKworIzogZGF0YS9nbHIuYzoyMDk1IGRhdGEvbGFscjEuY2M6OTQ4IGRhdGEveWFjYy5jOjEzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIgorbXNnc3RyICLguILguYnguK3guJzguLTguJTguJ7guKXguLLguJTguKfguLLguIHguKLguKrguLHguKHguJ7guLHguJnguJjguYwsIOC5hOC4oeC5iOC4hOC4suC4lOC4p+C5iOC4suC4iOC4sOC5gOC4m+C5h+C4mSAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk2IGRhdGEvbGFscjEuY2M6OTQ5IGRhdGEveWFjYy5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMiCittc2dzdHIgIuC4guC5ieC4reC4nOC4tOC4lOC4nuC4peC4suC4lOC4p+C4suC4geC4ouC4quC4seC4oeC4nuC4seC4meC4mOC5jCwg4LmE4Lih4LmI4LiE4Liy4LiU4Lin4LmI4Liy4LiI4Liw4LmA4Lib4LmH4LiZICVzLCDguITguLLguJTguKfguYjguLLguIjguLDguYDguJvguYfguJkgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NyBkYXRhL2xhbHIxLmNjOjk1MCBkYXRhL3lhY2MuYzoxMzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIgorbXNnc3RyICLguILguYnguK3guJzguLTguJTguJ7guKXguLLguJTguKfguLLguIHguKLguKrguLHguKHguJ7guLHguJnguJjguYwsIOC5hOC4oeC5iOC4hOC4suC4lOC4p+C5iOC4suC4iOC4sOC5gOC4m+C5h+C4mSAlcywg4LiE4Liy4LiU4Lin4LmI4Liy4LiI4Liw4LmA4Lib4LmH4LiZICVzIOC4q+C4o+C4t+C4rSAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk4IGRhdGEvbGFscjEuY2M6OTUxIGRhdGEveWFjYy5jOjEzNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiCittc2dzdHIgIuC4guC5ieC4reC4nOC4tOC4lOC4nuC4peC4suC4lOC4p+C4suC4geC4ouC4quC4seC4oeC4nuC4seC4meC4mOC5jCwg4LmE4Lih4LmI4LiE4Liy4LiU4Lin4LmI4Liy4LiI4Liw4LmA4Lib4LmH4LiZICVzLCDguITguLLguJTguKfguYjguLLguIjguLDguYDguJvguYfguJkgJXMg4Lir4Lij4Li34LitICVzIOC4q+C4o+C4t+C4rSAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk5IGRhdGEvbGFscjEuY2M6OTUyIGRhdGEveWFjYy5jOjEzNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiCittc2dzdHIgIuC4guC5ieC4reC4nOC4tOC4lOC4nuC4peC4suC4lOC4p+C4suC4geC4ouC4quC4seC4oeC4nuC4seC4meC4mOC5jCwg4LmE4Lih4LmI4LiE4Liy4LiU4Lin4LmI4Liy4LiI4Liw4LmA4Lib4LmH4LiZICVzLCDguITguLLguJTguKfguYjguLLguIjguLDguYDguJvguYfguJkgJXMg4Lir4Lij4Li34LitICVzIOC4q+C4o+C4t+C4rSAlcyDguKvguKPguLfguK0gJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjQ1OSBkYXRhL3lhY2MuYzoxNDM2IGRhdGEveWFjYy5jOjE0MzggZGF0YS95YWNjLmM6MTYxNgorIzogZGF0YS95YWNjLmM6MjAxMworbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIuC4q+C4meC5iOC4p+C4ouC4hOC4p+C4suC4oeC4iOC4s+C4luC4ueC4geC5g+C4iuC5ieC4iOC4meC4q+C4oeC4lOC4quC4tOC5ieC4mSIKZGlmZiAtLWdpdCBhL3J1bnRpbWUtcG8vdHIuZ21vIGIvcnVudGltZS1wby90ci5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VlMGUzNAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vdHIuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J1bnRpbWUtcG8vdHIucG8gYi9ydW50aW1lLXBvL3RyLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMjBjZjYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lLXBvL3RyLnBvCkBAIC0wLDAgKzEsNjIgQEAKKyMgVHVya2lzaCB0cmFuc2xhdGlvbnMgZm9yIEdOVSBCaXNvbiBtZXNzYWdlcy4KKyMgQ29weXJpZ2h0IChDKSAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBBbHR18CBCYXlyYW0gPGFsdHVnYmF5cmFtXzIwMDBAeWFob28uY29tPiwgMjAwMS4KKyMgx2Hwcv0gx/ZsdGVraW4gPGNhZ3JpQHhzNGFsbC5ubD4sIDIwMDMgLSAyMDA1CisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBHTlUgYmlzb24gMi4wXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDUtMDMtMjAgMjI6MDMrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogx2Hwcv0gx/ZsdGVraW4gPGNhZ3JpQHhzNGFsbC5ubD5cbiIKKyJMYW5ndWFnZS1UZWFtOiBUdXJraXNoIDxnbnUtdHItdTEyYUBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCisiTGFuZ3VhZ2U6IHRyXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktOVxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTE7IHBsdXJhbD0wO1xuIgorCisjOiBkYXRhL2dsci5jOjg1NSBkYXRhL3lhY2MuYzo3NzYKK21zZ2lkICJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIgorbXNnc3RyICIiCisKKyM6IGRhdGEvZ2xyLmM6MTcyOQorbXNnaWQgInN5bnRheCBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIiIKKworIzogZGF0YS9nbHIuYzoyMDE0IGRhdGEvZ2xyLmM6MjA5NCBkYXRhL2dsci5jOjIxMzQgZGF0YS9nbHIuYzoyMzk5CisjOiBkYXRhL2xhbHIxLmNjOjk0NyBkYXRhL2xhbHIxLmNjOjk2NyBkYXRhL3lhY2MuYzoxMzUxIGRhdGEveWFjYy5jOjE4NTYKKyM6IGRhdGEveWFjYy5jOjE4NjIKK21zZ2lkICJzeW50YXggZXJyb3IiCittc2dzdHIgIiIKKworIzogZGF0YS9nbHIuYzoyMDk1IGRhdGEvbGFscjEuY2M6OTQ4IGRhdGEveWFjYy5jOjEzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIgorbXNnc3RyICIiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NiBkYXRhL2xhbHIxLmNjOjk0OSBkYXRhL3lhY2MuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIgorbXNnc3RyICIiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NyBkYXRhL2xhbHIxLmNjOjk1MCBkYXRhL3lhY2MuYzoxMzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIgorbXNnc3RyICIiCisKKyM6IGRhdGEvZ2xyLmM6MjA5OCBkYXRhL2xhbHIxLmNjOjk1MSBkYXRhL3lhY2MuYzoxMzU1CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIgorbXNnc3RyICIiCisKKyM6IGRhdGEvZ2xyLmM6MjA5OSBkYXRhL2xhbHIxLmNjOjk1MiBkYXRhL3lhY2MuYzoxMzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIgorbXNnc3RyICIiCisKKyM6IGRhdGEvZ2xyLmM6MjQ1OSBkYXRhL3lhY2MuYzoxNDM2IGRhdGEveWFjYy5jOjE0MzggZGF0YS95YWNjLmM6MTYxNgorIzogZGF0YS95YWNjLmM6MjAxMworbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgImJlbGxlayB0/GtlbmRpIgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby91ay5nbW8gYi9ydW50aW1lLXBvL3VrLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWIyMjVlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby91ay5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS1wby91ay5wbyBiL3J1bnRpbWUtcG8vdWsucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU4NWM1OQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vdWsucG8KQEAgLTAsMCArMSw2MyBAQAorIyBVa3JhaW5pYW4gdHJhbnNsYXRpb24gb2YgYmlzb24tcnVudGltZS4KKyMgQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBNYXhpbSBWLiBEeml1bWFuZW5rbyA8ZHppdW1hbmVua29AZ21haWwuY29tPiwgMjAwNy4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGJpc29uLXJ1bnRpbWUgMi4zYVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBidWctYmlzb25AZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEyLTEyLTEyIDE2OjA5KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA3LTA3LTEzIDIwOjM1KzAzMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IE1heGltIFYuIER6aXVtYW5lbmtvIDxkeml1bWFuZW5rb0BnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogVWtyYWluaWFuIDx0cmFuc2xhdGlvbi10ZWFtLXVrQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZTogdWtcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTM7IHBsdXJhbD0obiUxMD09MSAmJiBuJTEwMCE9MTEgPyAwIDogbiUxMD49MiAmJiBuIgorIiUxMDw9NCAmJiAobiUxMDA8MTAgfHwgbiUxMDA+PTIwKSA/IDEgOiAyKTtcbiIKKworIzogZGF0YS9nbHIuYzo4NTUgZGF0YS95YWNjLmM6Nzc2Cittc2dpZCAic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIKK21zZ3N0ciAi0YHQuNC90YLQsNC60YHQuNGH0L3QsCDQv9C+0LzQuNC70LrQsDog0L3QtSDQstC00LDRlNGC0YzRgdGPINC30YDQvtCx0LjRgtC4INGA0LXQt9C10YDQstC90YMg0LrQvtC/0ZbRjiIKKworIzogZGF0YS9nbHIuYzoxNzI5Cittc2dpZCAic3ludGF4IGlzIGFtYmlndW91cyIKK21zZ3N0ciAi0YHQuNC90YLQsNC60YHQuNGBINC90LXQvtC00L3QvtC30L3QsNGH0L3QuNC5IgorCisjOiBkYXRhL2dsci5jOjIwMTQgZGF0YS9nbHIuYzoyMDk0IGRhdGEvZ2xyLmM6MjEzNCBkYXRhL2dsci5jOjIzOTkKKyM6IGRhdGEvbGFscjEuY2M6OTQ3IGRhdGEvbGFscjEuY2M6OTY3IGRhdGEveWFjYy5jOjEzNTEgZGF0YS95YWNjLmM6MTg1NgorIzogZGF0YS95YWNjLmM6MTg2MgorbXNnaWQgInN5bnRheCBlcnJvciIKK21zZ3N0ciAi0YHQuNC90YLQsNC60YHQuNGH0L3QsCDQv9C+0LzQuNC70LrQsCIKKworIzogZGF0YS9nbHIuYzoyMDk1IGRhdGEvbGFscjEuY2M6OTQ4IGRhdGEveWFjYy5jOjEzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIgorbXNnc3RyICLRgdC40L3RgtCw0LrRgdC40YfQvdCwINC/0L7QvNC40LvQutCwLCDQvdC10L7Rh9GW0LrRg9Cy0LDQvdC40LkgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NiBkYXRhL2xhbHIxLmNjOjk0OSBkYXRhL3lhY2MuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIgorbXNnc3RyICLRgdC40L3RgtCw0LrRgdC40YfQvdCwINC/0L7QvNC40LvQutCwLCDQvdC10L7Rh9GW0LrRg9Cy0LDQvdC40LkgJXMsINC+0YfRltC60YPQstCw0LvQvtGB0YwgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NyBkYXRhL2xhbHIxLmNjOjk1MCBkYXRhL3lhY2MuYzoxMzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIgorbXNnc3RyICLRgdC40L3RgtCw0LrRgdC40YfQvdCwINC/0L7QvNC40LvQutCwLCDQvdC10L7Rh9GW0LrRg9Cy0LDQvdC40LkgJXMsINC+0YfRltC60YPQstCw0LvQvtGB0YwgJXMg0LDQsdC+ICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTggZGF0YS9sYWxyMS5jYzo5NTEgZGF0YS95YWNjLmM6MTM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIKK21zZ3N0ciAi0YHQuNC90YLQsNC60YHQuNGH0L3QsCDQv9C+0LzQuNC70LrQsCwg0L3QtdC+0YfRltC60YPQstCw0L3QuNC5ICVzLCDQvtGH0ZbQutGD0LLQsNC70L7RgdGMICVzLCDQsNCx0L4gJXMsINCw0LHQviAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk5IGRhdGEvbGFscjEuY2M6OTUyIGRhdGEveWFjYy5jOjEzNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiCittc2dzdHIgIiIKKyLRgdC40L3RgtCw0LrRgdC40YfQvdCwINC/0L7QvNC40LvQutCwLCDQvdC10L7Rh9GW0LrRg9Cy0LDQvdC40LkgJXMsINC+0YfRltC60YPQstCw0LvQvtGB0YwgJXMsINCw0LHQviAlcywg0LDQsdC+ICVzLCDQsNCx0L4gJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjQ1OSBkYXRhL3lhY2MuYzoxNDM2IGRhdGEveWFjYy5jOjE0MzggZGF0YS95YWNjLmM6MTYxNgorIzogZGF0YS95YWNjLmM6MjAxMworbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgItC/0LDQvCfRj9GC0Ywg0LLQuNGH0LXRgNC/0LDQvdC+JyIKZGlmZiAtLWdpdCBhL3J1bnRpbWUtcG8vdmkuZ21vIGIvcnVudGltZS1wby92aS5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIwNDFjNAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vdmkuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J1bnRpbWUtcG8vdmkucG8gYi9ydW50aW1lLXBvL3ZpLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZjk1YmUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lLXBvL3ZpLnBvCkBAIC0wLDAgKzEsNjYgQEAKKyMgVmlldG5hbWVzZSBUcmFuc2xhdGlvbiBmb3IgQmlzb24tcnVudGltZS4KKyMgQ29weXJpZ2h0IMKpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBiaXNvbiBwYWNrYWdlLgorIyBDbHl0aWUgU2lkZGFsbCA8Y2x5dGllQHJpdmVybGFuZC5uZXQuYXU+LCAyMDA1LTIwMTAuCisjIFRy4bqnbiBOZ+G7jWMgUXXDom4gPHZud2lsZG1hbkBnbWFpbC5jb20+LCAyMDEyLgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYmlzb24tcnVudGltZS0yLjYuOTBcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLWJpc29uQGdudS5vcmdcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMi0xMi0xMiAxNjowOSswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMi0xMi0wOSAwODozMSswNzAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBUcuG6p24gTmfhu41jIFF1w6JuIDx2bndpbGRtYW5AZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IFZpZXRuYW1lc2UgPHRyYW5zbGF0aW9uLXRlYW0tdmlAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiB2aVxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlRlYW0tV2Vic2l0ZTogPGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vdmkuaHRtbD5cbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTE7IHBsdXJhbD0wO1xuIgorIlgtR2VuZXJhdG9yOiBMb2NGYWN0b3J5RWRpdG9yIDEuOFxuIgorIlgtUG9lZGl0LVNvdXJjZUNoYXJzZXQ6IFVURi04XG4iCisKKyM6IGRhdGEvZ2xyLmM6ODU1IGRhdGEveWFjYy5jOjc3NgorbXNnaWQgInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiCittc2dzdHIgImzhu5dpIGPDuiBwaMOhcDoga2jDtG5nIHRo4buDIHNhbyBsxrB1IGThu7EgcGjDsm5nIgorCisjOiBkYXRhL2dsci5jOjE3MjkKK21zZ2lkICJzeW50YXggaXMgYW1iaWd1b3VzIgorbXNnc3RyICJjw7ogcGjDoXAgY2jGsGEgcsO1IHLDoG5nIgorCisjOiBkYXRhL2dsci5jOjIwMTQgZGF0YS9nbHIuYzoyMDk0IGRhdGEvZ2xyLmM6MjEzNCBkYXRhL2dsci5jOjIzOTkKKyM6IGRhdGEvbGFscjEuY2M6OTQ3IGRhdGEvbGFscjEuY2M6OTY3IGRhdGEveWFjYy5jOjEzNTEgZGF0YS95YWNjLmM6MTg1NgorIzogZGF0YS95YWNjLmM6MTg2MgorbXNnaWQgInN5bnRheCBlcnJvciIKK21zZ3N0ciAibOG7l2kgY8O6IHBow6FwIgorCisjOiBkYXRhL2dsci5jOjIwOTUgZGF0YS9sYWxyMS5jYzo5NDggZGF0YS95YWNjLmM6MTM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiCittc2dzdHIgImzhu5dpIGPDuiBwaMOhcCwgZ+G6t3AgJXMgYuG6pXQgdGjGsOG7nW5nIgorCisjOiBkYXRhL2dsci5jOjIwOTYgZGF0YS9sYWxyMS5jYzo5NDkgZGF0YS95YWNjLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIKK21zZ3N0ciAibOG7l2kgY8O6IHBow6FwLCBn4bq3cCAlcyBi4bqldCB0aMaw4budbmcsIGPhuqduICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTcgZGF0YS9sYWxyMS5jYzo5NTAgZGF0YS95YWNjLmM6MTM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIKK21zZ3N0ciAibOG7l2kgY8O6IHBow6FwLCBn4bq3cCAlcyBi4bqldCB0aMaw4budbmcsIGPhuqduICVzIGhv4bq3YyAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk4IGRhdGEvbGFscjEuY2M6OTUxIGRhdGEveWFjYy5jOjEzNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiCittc2dzdHIgImzhu5dpIGPDuiBwaMOhcCwgZ+G6t3AgJXMgYuG6pXQgdGjGsOG7nW5nLCBj4bqnbiAlcyBob+G6t2MgJXMgaGF5ICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTkgZGF0YS9sYWxyMS5jYzo5NTIgZGF0YS95YWNjLmM6MTM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIKK21zZ3N0ciAibOG7l2kgY8O6IHBow6FwLCBn4bq3cCAlcyBi4bqldCB0aMaw4budbmcsIGPhuqduICVzIGhv4bq3YyAlcyBob+G6t2MgJXMgaGF5ICVzICIKKworIzogZGF0YS9nbHIuYzoyNDU5IGRhdGEveWFjYy5jOjE0MzYgZGF0YS95YWNjLmM6MTQzOCBkYXRhL3lhY2MuYzoxNjE2CisjOiBkYXRhL3lhY2MuYzoyMDEzCittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiaOG6v3QgYuG7mSBuaOG7myIKZGlmZiAtLWdpdCBhL3J1bnRpbWUtcG8vemhfQ04uZ21vIGIvcnVudGltZS1wby96aF9DTi5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM3OTYyNwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUtcG8vemhfQ04uZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J1bnRpbWUtcG8vemhfQ04ucG8gYi9ydW50aW1lLXBvL3poX0NOLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZWJiNzUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lLXBvL3poX0NOLnBvCkBAIC0wLDAgKzEsNjEgQEAKKyMgU2ltcGxpZmllZCBDaGluZXNlIHRyYW5zbGF0aW9uIGZvciBiaXNvbi1ydW50aW1lLgorIyBDb3B5cmlnaHQgKEMpIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBiaXNvbiBwYWNrYWdlLgorIworIyBNZW5nIEppZSA8enV4eWhlcmVAZWFzdGRheS5jb20+LCAyMDA1LCAyMDA3LgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYmlzb24tcnVudGltZSAyLjNhXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDctMDgtMTMgMjM6MTkrMDgwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogTWVuZyBKaWUgPHp1eHkubWVuZ0BnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogQ2hpbmVzZSAoc2ltcGxpZmllZCkgPGkxOG4temhAZ29vZ2xlZ3JvdXBzLmNvbT5cbiIKKyJMYW5ndWFnZTogemhfQ05cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogZGF0YS9nbHIuYzo4NTUgZGF0YS95YWNjLmM6Nzc2Cittc2dpZCAic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIKK21zZ3N0ciAi6K+t5rOV6ZSZ6K+v77ya5LiN6IO95aSH5Lu9IgorCisjOiBkYXRhL2dsci5jOjE3MjkKK21zZ2lkICJzeW50YXggaXMgYW1iaWd1b3VzIgorbXNnc3RyICLor63ms5XmnInmrafkuYkiCisKKyM6IGRhdGEvZ2xyLmM6MjAxNCBkYXRhL2dsci5jOjIwOTQgZGF0YS9nbHIuYzoyMTM0IGRhdGEvZ2xyLmM6MjM5OQorIzogZGF0YS9sYWxyMS5jYzo5NDcgZGF0YS9sYWxyMS5jYzo5NjcgZGF0YS95YWNjLmM6MTM1MSBkYXRhL3lhY2MuYzoxODU2CisjOiBkYXRhL3lhY2MuYzoxODYyCittc2dpZCAic3ludGF4IGVycm9yIgorbXNnc3RyICLor63ms5XplJnor68iCisKKyM6IGRhdGEvZ2xyLmM6MjA5NSBkYXRhL2xhbHIxLmNjOjk0OCBkYXRhL3lhY2MuYzoxMzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIKK21zZ3N0ciAi6K+t5rOV6ZSZ6K+v77yM6Z2e6aKE5pyf55qEICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTYgZGF0YS9sYWxyMS5jYzo5NDkgZGF0YS95YWNjLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIKK21zZ3N0ciAi6K+t5rOV6ZSZ6K+v77yM6Z2e6aKE5pyf55qEICVz77yM6ZyA6KaBICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTcgZGF0YS9sYWxyMS5jYzo5NTAgZGF0YS95YWNjLmM6MTM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIKK21zZ3N0ciAi6K+t5rOV6ZSZ6K+v77yM6Z2e6aKE5pyf55qEICVz77yM6ZyA6KaBICVzIOaIliAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk4IGRhdGEvbGFscjEuY2M6OTUxIGRhdGEveWFjYy5jOjEzNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiCittc2dzdHIgIuivreazlemUmeivr++8jOmdnumihOacn+eahCAlc++8jOmcgOimgSAlc++8jCVzIOaIliAlcyIKKworIzogZGF0YS9nbHIuYzoyMDk5IGRhdGEvbGFscjEuY2M6OTUyIGRhdGEveWFjYy5jOjEzNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiCittc2dzdHIgIuivreazlemUmeivr++8jOmdnumihOacn+eahCAlc++8jOmcgOimgSAlc++8jCVz77yMJXMg5oiWICVzIgorCisjOiBkYXRhL2dsci5jOjI0NTkgZGF0YS95YWNjLmM6MTQzNiBkYXRhL3lhY2MuYzoxNDM4IGRhdGEveWFjYy5jOjE2MTYKKyM6IGRhdGEveWFjYy5jOjIwMTMKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICLlhoXlrZjogJflsL0iCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL3poX1RXLmdtbyBiL3J1bnRpbWUtcG8vemhfVFcuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYzdkYmMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lLXBvL3poX1RXLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lLXBvL3poX1RXLnBvIGIvcnVudGltZS1wby96aF9UVy5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDQxNDY0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS1wby96aF9UVy5wbwpAQCAtMCwwICsxLDYxIEBACisjIFRyYWRpdGlvbmFsIENoaW5lc2UgTWVzc2FnZXMgZm9yIGJpc29uLXJ1bnRpbWUKKyMgQ29weXJpZ2h0IChDKSAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBXZWktTHVuIENoYW8gPGNoYW93ZWlsdW5AcGNtYWlsLmNvbS50dz4sIDIwMDUKKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGJpc29uLXJ1bnRpbWUgMi4xXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1iaXNvbkBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMTItMTIgMTY6MDkrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDUtMDktMjcgMTA6MzErMDgwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogV2VpLUx1biBDaGFvIDxjaGFvd2VpbHVuQHBjbWFpbC5jb20udHc+XG4iCisiTGFuZ3VhZ2UtVGVhbTogQ2hpbmVzZSAodHJhZGl0aW9uYWwpIDx6aC1sMTBuQGxpbnV4Lm9yZy50dz5cbiIKKyJMYW5ndWFnZTogemhfVFdcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTE7IHBsdXJhbD0wO1xuIgorCisjOiBkYXRhL2dsci5jOjg1NSBkYXRhL3lhY2MuYzo3NzYKK21zZ2lkICJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIgorbXNnc3RyICLoqp7ms5XpjK/oqqTvvJrnhKHms5Xlgpnku70iCisKKyM6IGRhdGEvZ2xyLmM6MTcyOQorbXNnaWQgInN5bnRheCBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIuiqnuazleS4jeaYjueiuiIKKworIzogZGF0YS9nbHIuYzoyMDE0IGRhdGEvZ2xyLmM6MjA5NCBkYXRhL2dsci5jOjIxMzQgZGF0YS9nbHIuYzoyMzk5CisjOiBkYXRhL2xhbHIxLmNjOjk0NyBkYXRhL2xhbHIxLmNjOjk2NyBkYXRhL3lhY2MuYzoxMzUxIGRhdGEveWFjYy5jOjE4NTYKKyM6IGRhdGEveWFjYy5jOjE4NjIKK21zZ2lkICJzeW50YXggZXJyb3IiCittc2dzdHIgIuiqnuazlemMr+iqpCIKKworIzogZGF0YS9nbHIuYzoyMDk1IGRhdGEvbGFscjEuY2M6OTQ4IGRhdGEveWFjYy5jOjEzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIgorbXNnc3RyICLoqp7ms5XpjK/oqqTvvIzpoJDmnJ/kuYvlpJbnmoQgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NiBkYXRhL2xhbHIxLmNjOjk0OSBkYXRhL3lhY2MuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIgorbXNnc3RyICLoqp7ms5XpjK/oqqTvvIzpoJDmnJ/kuYvlpJbnmoQgJXPvvIzpoJDmnJ/ngrogJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjA5NyBkYXRhL2xhbHIxLmNjOjk1MCBkYXRhL3lhY2MuYzoxMzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIgorbXNnc3RyICLoqp7ms5XpjK/oqqTvvIzpoJDmnJ/kuYvlpJbnmoQgJXPvvIzpoJDmnJ/ngrogJXMg5oiWICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTggZGF0YS9sYWxyMS5jYzo5NTEgZGF0YS95YWNjLmM6MTM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIKK21zZ3N0ciAi6Kqe5rOV6Yyv6Kqk77yM6aCQ5pyf5LmL5aSW55qEICVz77yM6aCQ5pyf54K6ICVz44CBJXMg5oiWICVzIgorCisjOiBkYXRhL2dsci5jOjIwOTkgZGF0YS9sYWxyMS5jYzo5NTIgZGF0YS95YWNjLmM6MTM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIKK21zZ3N0ciAi6Kqe5rOV6Yyv6Kqk77yM6aCQ5pyf5LmL5aSW55qEICVz77yM6aCQ5pyf54K6ICVz44CBJXPjgIElcyDmiJYgJXMiCisKKyM6IGRhdGEvZ2xyLmM6MjQ1OSBkYXRhL3lhY2MuYzoxNDM2IGRhdGEveWFjYy5jOjE0MzggZGF0YS95YWNjLmM6MTYxNgorIzogZGF0YS95YWNjLmM6MjAxMworbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIuiomOaGtumrlOiAl+eboSIKZGlmZiAtLWdpdCBhL3NyYy9Bbm5vdGF0aW9uTGlzdC5jIGIvc3JjL0Fubm90YXRpb25MaXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMxZTBhZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9Bbm5vdGF0aW9uTGlzdC5jCkBAIC0wLDAgKzEsODA3IEBACisvKiBJRUxSJ3MgaW5hZGVxdWFjeSBhbm5vdGF0aW9uIGxpc3QuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgInN5c3RlbS5oIgorCisjaW5jbHVkZSAiQW5ub3RhdGlvbkxpc3QuaCIKKyNpbmNsdWRlICJsYWxyLmgiCisjaW5jbHVkZSAiaWVsci5oIgorCisvKioKKyAqIFxwcmUKKyAqICAgLSA8dHQ+YW5ub3RhdGlvbnNfb2JzdGFja3AgIT0gTlVMTDwvdHQ+LgorICogXHBvc3QKKyAqICAgLSBcYyByZXN1bHQgaXMgYSBuZXcgXGMgQW5ub3RhdGlvbkxpc3Qgd2l0aCBvbmUgbm9kZSB3aG9zZToKKyAqICAgICAtIFxjIGluYWRlcXVhY3lOb2RlIG1lbWJlciBpcyBcYyBOVUxMLgorICogICAgIC0gXGMgY29udHJpYnV0aW9ucyBtZW1iZXIgaXMgYWxsb2NhdGVkIHdpdGggXGMgY29udHJpYnV0aW9uX2NvdW50CisgKiAgICAgICB1bmluaXRpYWxpemVkIGVsZW1lbnRzLgorICogICAtIEFsbCBtZW1vcnkgd2FzIGFsbG9jYXRlZCBvbiBcYyBhbm5vdGF0aW9uc19vYnN0YWNrcC4KKyAqLworc3RhdGljIEFubm90YXRpb25MaXN0KgorQW5ub3RhdGlvbkxpc3RfX2FsbG9jX29uX29ic3RhY2sgKENvbnRyaWJ1dGlvbkluZGV4IGNvbnRyaWJ1dGlvbl9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgb2JzdGFjayAqYW5ub3RhdGlvbnNfb2JzdGFja3ApCit7CisgIEFubm90YXRpb25MaXN0ICpyZXN1bHQ7CisgIHNpemVfdCBjb250cmlidXRpb25zX3NpemUgPQorICAgIGNvbnRyaWJ1dGlvbl9jb3VudCAqIHNpemVvZiByZXN1bHQtPmNvbnRyaWJ1dGlvbnNbMF07CisgIHJlc3VsdCA9IG9ic3RhY2tfYWxsb2MgKGFubm90YXRpb25zX29ic3RhY2twLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRvZiAoQW5ub3RhdGlvbkxpc3QsIGNvbnRyaWJ1dGlvbnMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udHJpYnV0aW9uc19zaXplKTsKKyAgcmVzdWx0LT5uZXh0ID0gTlVMTDsKKyAgcmVzdWx0LT5pbmFkZXF1YWN5Tm9kZSA9IE5VTEw7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogXHByZQorICogICAtIDx0dD5zZWxmICE9IE5VTEw8L3R0Pi4KKyAqICAgLSA8dHQ+MCA8PSBjaSA8IHNlbGYtPmluYWRlcXVhY3lOb2RlLT5jb250cmlidXRpb25Db3VudDwvdHQ+LgorICogXHBvc3QKKyAqICAgLSBcYyByZXN1bHQgPSB0cnVlIGlmZiBjb250cmlidXRpb24gXGMgY2kgaW4gXGMgc2VsZiByZXByZXNlbnRzIGFuCisgKiAgICAgImFsd2F5cyIgY29udHJpYnV0aW9uLgorICovCitzdGF0aWMgYm9vbAorQW5ub3RhdGlvbkxpc3RfX2lzQ29udHJpYnV0aW9uQWx3YXlzIChBbm5vdGF0aW9uTGlzdCBjb25zdCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJpYnV0aW9uSW5kZXggY2kpCit7CisgIGF2ZXIgKDAgPD0gY2kgJiYgY2kgPCBzZWxmLT5pbmFkZXF1YWN5Tm9kZS0+Y29udHJpYnV0aW9uQ291bnQpOworICByZXR1cm4gc2VsZi0+Y29udHJpYnV0aW9uc1tjaV0gPT0gTlVMTDsKK30KKworLyoqCisgKiBccHJlCisgKiAgIC0gXGMgc2VsZiBpcyBhIHNpbmdsZSBub2RlLgorICogICAtIFxjIHNlbGYgYW5ub3RhdGVzIHRoZSBzYW1lIHN0YXRlIGFzIGV2ZXJ5IG90aGVyIG5vZGUgaW4gXGMgbGlzdCwgYW5kCisgKiAgICAgdGhhdCBzdGF0ZSBoYXMgXGMgbml0ZW1zIGtlcm5lbCBpdGVtcy4KKyAqIFxwb3N0CisgKiAgIC0gSWYgdGhlIGxpc3QgXGMgbGlzdCBhbHJlYWR5IGNvbnRhaW5zIGFuIGlkZW50aWNhbCBhbm5vdGF0aW9uIHRvIFxjIHNlbGYsCisgKiAgICAgXGMgc2VsZiB3YXMgZGlzY2FyZGVkLCBcYyByZXN1bHQgaXMgZmFsc2UsIGFuZCB0aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlCisgKiAgICAgZm9yIHRoZSBtZW1vcnkgb2YgXGMgc2VsZi4KKyAqICAgLSBPdGhlcndpc2UsIFxjIGxpc3Qgbm93IGNvbnRhaW5zIHRoZSBub2RlIFxjIHNlbGYsIFxjIHJlc3VsdCBpcyB0cnVlLCBhbmQKKyAqICAgICBcYyBsaXN0IGFzc3VtZXMgcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBtZW1vcnkgb2YgXGMgc2VsZi4KKyAqICAgLSBUaGUgc29ydCBpbiBcYyBsaXN0IGlzOgorICogICAgIC0gU29ydCBpbiByZXZlcnNlIG9yZGVyIG9uIHRoZSB1bmlxdWUgSUQgb2YgdGhlIGFzc29jaWF0ZWQKKyAqICAgICAgIGluYWRlcXVhY3kgbm9kZS4gIEJlY2F1c2UgdGhlc2UgSURzIGFyZSBhc3NpZ25lZCBpbiBhc2NlbmRpbmcKKyAqICAgICAgIG9yZGVyLCB0aGlzIHNob3VsZCBtZWFuIHRoYXQgdGhlIGluc2VydGlvbiBwb3NpdGlvbiB3aXRoaW4gYW4KKyAqICAgICAgIGFubm90YXRpb24gbGlzdCBpcyB1c3VhbGx5IG5lYXIgdGhlIGJlZ2lubmluZyB3aXRoIG90aGVyCisgKiAgICAgICBhbm5vdGF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHNhbWUgaW5hZGVxdWFjeS4KKyAqICAgICAtIE5leHQsIHNvcnQgb24gdGhlIGZpcnN0IGNvbnRyaWJ1dGlvbiB0aGF0IGlzIGRpZmZlcmVudCBhcyBmb2xsb3dzOgorICogICAgICAgLSBTb3J0IGFuIGFsd2F5cy1jb250cmlidXRpb24gYmVmb3JlIGEgbmV2ZXItY29udHJpYnV0aW9uIGJlZm9yZSBhCisgKiAgICAgICAgIHBvdGVudGlhbC1jb250cmlidXRpb24uCisgKiAgICAgICAtIFR3byBhbHdheXMtY29udHJpYnV0aW9ucyBhcmUgaWRlbnRpY2FsLgorICogICAgICAgLSBUd28gbmV2ZXItY29udHJpYnV0aW9ucyBhcmUgaWRlbnRpY2FsLgorICogICAgICAgLSBGb3IgdHdvIHBvdGVudGlhbC1jb250cmlidXRpb25zLCBzb3J0IG9uIHRoZSBjb250cmlidXRpb25zJyBrZXJuZWwKKyAqICAgICAgICAgaXRlbSBiaXRzZXRzIGludGVycHJldGVkIGFzIGJpbmFyeSBudW1iZXJzLgorICogIC0gVGhlIHNvcnRpbmcgaGFzIGEgZmV3IGVmZmVjdHM6CisgKiAgICAtIEl0IGFjY2VsZXJhdGVzIGVsaW1pbmF0aW9uIG9mIGlkZW50aWNhbCBhbm5vdGF0aW9ucyBkdXJpbmcgaW5zZXJ0aW9uLgorICogICAgLSBJdCBkZXRlcm1pbmVzIGhvdyB0aGUgb3V0cHV0IG9mIFxjIEFubm90YXRpb25MaXN0X19kZWJ1ZyBpcyBzb3J0ZWQuCisgKiAgICAtIE90aGVyIHRoYW4gdGhhdCwgaXQncyBwcm9iYWJseSBub3QgaW1wb3J0YW50LgorICovCitzdGF0aWMgYm9vbAorQW5ub3RhdGlvbkxpc3RfX2luc2VydEludG8gKEFubm90YXRpb25MaXN0ICpzZWxmLCBBbm5vdGF0aW9uTGlzdCAqKmxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5pdGVtcykKK3sKKyAgQW5ub3RhdGlvbkxpc3QgKipub2RlOworICBmb3IgKG5vZGUgPSBsaXN0OyAqbm9kZTsgbm9kZSA9ICYoKm5vZGUpLT5uZXh0KQorICAgIHsKKyAgICAgIGludCBjbXAgPSAwOworICAgICAgQ29udHJpYnV0aW9uSW5kZXggY2k7CisgICAgICBpZiAoc2VsZi0+aW5hZGVxdWFjeU5vZGUtPmlkIDwgKCpub2RlKS0+aW5hZGVxdWFjeU5vZGUtPmlkKQorICAgICAgICBjbXAgPSAxOworICAgICAgZWxzZSBpZiAoKCpub2RlKS0+aW5hZGVxdWFjeU5vZGUtPmlkIDwgc2VsZi0+aW5hZGVxdWFjeU5vZGUtPmlkKQorICAgICAgICBjbXAgPSAtMTsKKyAgICAgIGVsc2UKKyAgICAgICAgZm9yIChjaSA9IDA7CisgICAgICAgICAgICAgY21wID09IDAgJiYgY2kgPCBzZWxmLT5pbmFkZXF1YWN5Tm9kZS0+Y29udHJpYnV0aW9uQ291bnQ7CisgICAgICAgICAgICAgKytjaSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoQW5ub3RhdGlvbkxpc3RfX2lzQ29udHJpYnV0aW9uQWx3YXlzIChzZWxmLCBjaSkpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIUFubm90YXRpb25MaXN0X19pc0NvbnRyaWJ1dGlvbkFsd2F5cyAoKm5vZGUsIGNpKSkKKyAgICAgICAgICAgICAgICAgIGNtcCA9IC0xOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChBbm5vdGF0aW9uTGlzdF9faXNDb250cmlidXRpb25BbHdheXMgKCpub2RlLCBjaSkpCisgICAgICAgICAgICAgIGNtcCA9IDE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzaXplX3QgaXRlbTsKKyAgICAgICAgICAgICAgICBmb3IgKGl0ZW0gPSAwOyBjbXAgPT0gMCAmJiBpdGVtIDwgbml0ZW1zOyArK2l0ZW0pCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICghU2JpdHNldF9fdGVzdCAoc2VsZi0+Y29udHJpYnV0aW9uc1tjaV0sIGl0ZW0pKQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTYml0c2V0X190ZXN0ICgoKm5vZGUpLT5jb250cmlidXRpb25zW2NpXSwgaXRlbSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNtcCA9IC0xOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIVNiaXRzZXRfX3Rlc3QgKCgqbm9kZSktPmNvbnRyaWJ1dGlvbnNbY2ldLCBpdGVtKSkKKyAgICAgICAgICAgICAgICAgICAgICBjbXAgPSAxOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgaWYgKGNtcCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICBzZWxmLT5uZXh0ID0gKm5vZGU7CisgICAgICAgICAgKm5vZGUgPSBzZWxmOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBlbHNlIGlmIChjbXAgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIHNlbGYgPSBOVUxMOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICBpZiAoISpub2RlKQorICAgICpub2RlID0gc2VsZjsKKyAgcmV0dXJuIHNlbGYgIT0gTlVMTDsKK30KKworc3RhdGljIGJpdHNldAorQW5ub3RhdGlvbkxpc3RfX2NvbXB1dGVfc2hpZnRfdG9rZW5zICh0cmFuc2l0aW9ucyAqdHJhbnMpCit7CisgIGJpdHNldCBzaGlmdF90b2tlbnMgPSBiaXRzZXRfY3JlYXRlIChudG9rZW5zLCBCSVRTRVRfRklYRUQpOworICBpbnQgaTsKKyAgRk9SX0VBQ0hfU0hJRlQgKHRyYW5zLCBpKQorICAgIGJpdHNldF9zZXQgKHNoaWZ0X3Rva2VucywgVFJBTlNJVElPTl9TWU1CT0wgKHRyYW5zLCBpKSk7CisgIHJldHVybiBzaGlmdF90b2tlbnM7Cit9CisKK3N0YXRpYyBiaXRzZXQKK0Fubm90YXRpb25MaXN0X19jb21wdXRlX2NvbmZsaWN0ZWRfdG9rZW5zIChiaXRzZXQgc2hpZnRfdG9rZW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZHVjdGlvbnMgKnJlZHMpCit7CisgIGJpdHNldCBjb25mbGljdGVkX3Rva2VucyA9IGJpdHNldF9jcmVhdGUgKG50b2tlbnMsIEJJVFNFVF9GSVhFRCk7CisgIGJpdHNldCBjb25mbGljdGVkX3Rva2Vuc19ydWxlID0gYml0c2V0X2NyZWF0ZSAobnRva2VucywgQklUU0VUX0ZJWEVEKTsKKyAgYml0c2V0IHRva2VucyA9IGJpdHNldF9jcmVhdGUgKG50b2tlbnMsIEJJVFNFVF9GSVhFRCk7CisgIGludCBpOworCisgIGJpdHNldF9jb3B5ICh0b2tlbnMsIHNoaWZ0X3Rva2Vucyk7CisgIGZvciAoaSA9IDA7IGkgPCByZWRzLT5udW07ICsraSkKKyAgICB7CisgICAgICBiaXRzZXRfYW5kIChjb25mbGljdGVkX3Rva2Vuc19ydWxlLCB0b2tlbnMsIHJlZHMtPmxvb2thaGVhZF90b2tlbnNbaV0pOworICAgICAgYml0c2V0X29yIChjb25mbGljdGVkX3Rva2VucywKKyAgICAgICAgICAgICAgICAgY29uZmxpY3RlZF90b2tlbnMsIGNvbmZsaWN0ZWRfdG9rZW5zX3J1bGUpOworICAgICAgYml0c2V0X29yICh0b2tlbnMsIHRva2VucywgcmVkcy0+bG9va2FoZWFkX3Rva2Vuc1tpXSk7CisgICAgICAvKiBDaGVjayB0aGF0IHJ1bGVzIGFyZSBzb3J0ZWQgb24gcnVsZSBudW1iZXIgb3IgdGhlIG5leHQgc3RlcCBpbgorICAgICAgICAgQW5ub3RhdGlvbkxpc3RfX2NvbXB1dGVfZnJvbV9pbmFkZXF1YWNpZXMgd2lsbCBtaXNiZWhhdmUuICAqLworICAgICAgYXZlciAoaSA9PSAwIHx8IHJlZHMtPnJ1bGVzW2ktMV0gPCByZWRzLT5ydWxlc1tpXSk7CisgICAgfQorCisgIGJpdHNldF9mcmVlICh0b2tlbnMpOworICBiaXRzZXRfZnJlZSAoY29uZmxpY3RlZF90b2tlbnNfcnVsZSk7CisKKyAgcmV0dXJuIGNvbmZsaWN0ZWRfdG9rZW5zOworfQorCitzdGF0aWMgYm9vbAorQW5ub3RhdGlvbkxpc3RfX2NvbXB1dGVfbGhzX2NvbnRyaWJ1dGlvbnMgKHN0YXRlICpzLCBydWxlICp0aGVfcnVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xfbnVtYmVyIGNvbmZsaWN0ZWRfdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c2V0diBmb2xsb3dfa2VybmVsX2l0ZW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNldHYgYWx3YXlzX2ZvbGxvd3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgKioqcHJlZGVjZXNzb3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNldCAqKml0ZW1fbG9va2FoZWFkX3NldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JpdHNldCAqaXRlbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG9ic3RhY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphbm5vdGF0aW9uc19vYnN0YWNrcCkKK3sKKyAgZ290b19udW1iZXIgbGhzX2dvdG8gPSBtYXBfZ290byAocy0+bnVtYmVyLCB0aGVfcnVsZS0+bGhzLT5udW1iZXIpOworICBpZiAoYml0c2V0X3Rlc3QgKGFsd2F5c19mb2xsb3dzW2xoc19nb3RvXSwgY29uZmxpY3RlZF90b2tlbikpCisgICAgcmV0dXJuIHRydWU7CisgICppdGVtcyA9IFNiaXRzZXRfX25ld19vbl9vYnN0YWNrIChzLT5uaXRlbXMsIGFubm90YXRpb25zX29ic3RhY2twKTsKKyAgeworICAgIGJpdHNldF9pdGVyYXRvciBiaXRlcl9pdGVtOworICAgIGJpdHNldF9iaW5kZXggaXRlbTsKKyAgICBCSVRTRVRfRk9SX0VBQ0ggKGJpdGVyX2l0ZW0sIGZvbGxvd19rZXJuZWxfaXRlbXNbbGhzX2dvdG9dLCBpdGVtLCAwKQorICAgICAgaWYgKGllbHJfaXRlbV9oYXNfbG9va2FoZWFkIChzLCAwLCBpdGVtLCBjb25mbGljdGVkX3Rva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvcnMsIGl0ZW1fbG9va2FoZWFkX3NldHMpKQorICAgICAgICBTYml0c2V0X19zZXQgKCppdGVtcywgaXRlbSk7CisgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZAorQW5ub3RhdGlvbkxpc3RfX2NvbXB1dGVQcmVkZWNlc3NvckFubm90YXRpb25zIChBbm5vdGF0aW9uTGlzdCAqc2VsZiwgc3RhdGUgKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNldHYgZm9sbG93X2tlcm5lbF9pdGVtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c2V0diBhbHdheXNfZm9sbG93cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgKioqcHJlZGVjZXNzb3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzZXQgKippdGVtX2xvb2thaGVhZF9zZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbm5vdGF0aW9uTGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqYW5ub3RhdGlvbl9saXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5ub3RhdGlvbkluZGV4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFubm90YXRpb25fY291bnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgb2JzdGFjaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphbm5vdGF0aW9uc19vYnN0YWNrcCkKK3sKKyAgc3RhdGUgKipwcmVkZWNlc3NvcjsKKyAgZm9yIChwcmVkZWNlc3NvciA9IHByZWRlY2Vzc29yc1tzLT5udW1iZXJdOyAqcHJlZGVjZXNzb3I7ICsrcHJlZGVjZXNzb3IpCisgICAgeworICAgICAgQW5ub3RhdGlvbkxpc3QgKmFubm90YXRpb25fbm9kZSA9CisgICAgICAgIEFubm90YXRpb25MaXN0X19hbGxvY19vbl9vYnN0YWNrICgKKyAgICAgICAgICBzZWxmLT5pbmFkZXF1YWN5Tm9kZS0+Y29udHJpYnV0aW9uQ291bnQsIGFubm90YXRpb25zX29ic3RhY2twKTsKKyAgICAgIGFubm90YXRpb25fbm9kZS0+aW5hZGVxdWFjeU5vZGUgPSBzZWxmLT5pbmFkZXF1YWN5Tm9kZTsKKyAgICAgIGJvb2wgcG90ZW50aWFsX2NvbnRyaWJ1dGlvbiA9IGZhbHNlOworICAgICAgYml0c2V0ICpsb29rYWhlYWRzID0gTlVMTDsKKyAgICAgIHsKKyAgICAgICAgQ29udHJpYnV0aW9uSW5kZXggY2k7CisgICAgICAgIGZvciAoY2kgPSAwOyBjaSA8IHNlbGYtPmluYWRlcXVhY3lOb2RlLT5jb250cmlidXRpb25Db3VudDsgKytjaSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBzeW1ib2xfbnVtYmVyIGNvbnRyaWJ1dGlvbl90b2tlbiA9CisgICAgICAgICAgICAgIEluYWRlcXVhY3lMaXN0X19nZXRDb250cmlidXRpb25Ub2tlbiAoc2VsZi0+aW5hZGVxdWFjeU5vZGUsIGNpKQorICAgICAgICAgICAgICAgIC0+bnVtYmVyOworICAgICAgICAgICAgaWYgKEFubm90YXRpb25MaXN0X19pc0NvbnRyaWJ1dGlvbkFsd2F5cyAoc2VsZiwgY2kpKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYW5ub3RhdGlvbl9ub2RlLT5jb250cmlidXRpb25zW2NpXSA9IE5VTEw7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFubm90YXRpb25fbm9kZS0+Y29udHJpYnV0aW9uc1tjaV0gPQorICAgICAgICAgICAgICBTYml0c2V0X19uZXdfb25fb2JzdGFjayAoKCpwcmVkZWNlc3NvciktPm5pdGVtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zX29ic3RhY2twKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc2l6ZV90IHByZWRlY2Vzc29yX2l0ZW0gPSAwOworICAgICAgICAgICAgICBTYml0c2V0IHNiaXRlcl9pdGVtOworICAgICAgICAgICAgICBTYml0c2V0X19JbmRleCBzZWxmX2l0ZW07CisgICAgICAgICAgICAgIFNCSVRTRVRfX0ZPUl9FQUNIIChzZWxmLT5jb250cmlidXRpb25zW2NpXSwgcy0+bml0ZW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2JpdGVyX2l0ZW0sIHNlbGZfaXRlbSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAvKiBJZiB0aGlzIGtlcm5lbCBpdGVtIGlzIHRoZSBiZWdpbm5pbmcgb2YgYSBSSFMsIGl0IG11c3QgYmUKKyAgICAgICAgICAgICAgICAgICAgIHRoZSBrZXJuZWwgaXRlbSBpbiB0aGUgc3RhcnQgc3RhdGUsIGFuZCBzbyBpdCBoYXMgYW4gZW1wdHkKKyAgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCBzZXQuICBUaHVzLCBpdCBjYW4ndCBjb250cmlidXRlIHRvIGluYWRlcXVhY2llcywKKyAgICAgICAgICAgICAgICAgICAgIGFuZCBzbyBpdCBzaG91bGQgbmV2ZXIgaGF2ZSBiZWVuIGlkZW50aWZpZWQgYXMgYQorICAgICAgICAgICAgICAgICAgICAgY29udHJpYnV0aW9uLiAgSWYsIGluc3RlYWQsIHRoaXMga2VybmVsIGl0ZW0gaXMgdGhlCisgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3Igb2YgdGhlIHN0YXJ0IHN0YXRlJ3Mga2VybmVsIGl0ZW0sIHRoZSBsb29rYWhlYWQKKyAgICAgICAgICAgICAgICAgICAgIHNldCBpcyBzdGlsbCBlbXB0eSwgYW5kIHNvIGl0IGFsc28gc2hvdWxkIG5ldmVyIGhhdmUgYmVlbgorICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllZCBhcyBhIGNvbnRyaWJ1dGlvbi4gIFRoaXMgc2l0dWF0aW9uIGlzIGZvcnR1bmF0ZQorICAgICAgICAgICAgICAgICAgICAgYmVjYXVzZSB3ZSB3YW50IHRvIGF2b2lkIHRoZSAtIDIgYmVsb3cgaW4gYm90aCBjYXNlcy4gICovCisgICAgICAgICAgICAgICAgICBhdmVyIChzLT5pdGVtc1tzZWxmX2l0ZW1dID4gMSk7CisgICAgICAgICAgICAgICAgICAvKiBJZiB0aGlzIGtlcm5lbCBpdGVtIGlzIG5leHQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgUkhTLAorICAgICAgICAgICAgICAgICAgICAgdGhlbiBjaGVjayBhbGwgb2YgdGhlIHByZWRlY2Vzc29yJ3MgZ290byBmb2xsb3dzIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgIExIUy4gICovCisgICAgICAgICAgICAgICAgICBpZiAoaXRlbV9udW1iZXJfaXNfcnVsZV9udW1iZXIgKHJpdGVtW3MtPml0ZW1zW3NlbGZfaXRlbV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAyXSkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBTYml0c2V0IGl0ZW1zOworICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBydWxlaTsKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgKHJ1bGVpID0gcy0+aXRlbXNbc2VsZl9pdGVtXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICFpdGVtX251bWJlcl9pc19ydWxlX251bWJlciAocml0ZW1bcnVsZWldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcnVsZWkpCisgICAgICAgICAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKEFubm90YXRpb25MaXN0X19jb21wdXRlX2xoc19jb250cmlidXRpb25zICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcHJlZGVjZXNzb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJ1bGVzW2l0ZW1fbnVtYmVyX2FzX3J1bGVfbnVtYmVyIChyaXRlbVtydWxlaV0pXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cmlidXRpb25fdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93X2tlcm5lbF9pdGVtcywgYWx3YXlzX2ZvbGxvd3MsIHByZWRlY2Vzc29ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX2xvb2thaGVhZF9zZXRzLCAmaXRlbXMsIGFubm90YXRpb25zX29ic3RhY2twKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzdGFja19mcmVlIChhbm5vdGF0aW9uc19vYnN0YWNrcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uX25vZGUtPmNvbnRyaWJ1dGlvbnNbY2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbl9ub2RlLT5jb250cmlidXRpb25zW2NpXSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU2JpdHNldF9fb3IgKGFubm90YXRpb25fbm9kZS0+Y29udHJpYnV0aW9uc1tjaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uX25vZGUtPmNvbnRyaWJ1dGlvbnNbY2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMsICgqcHJlZGVjZXNzb3IpLT5uaXRlbXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICBvYnN0YWNrX2ZyZWUgKGFubm90YXRpb25zX29ic3RhY2twLCBpdGVtcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIC8qIElmIHRoaXMga2VybmVsIGl0ZW0gaXMgbGF0ZXIgaW4gdGhlIFJIUywgdGhlbiBjaGVjayB0aGUKKyAgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yIGl0ZW0ncyBsb29rYWhlYWQgc2V0LiAgKi8KKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIC8qIFdlIGRvbid0IGhhdmUgdG8gc3RhcnQgdGhlIHByZWRlY2Vzc29yIGl0ZW0gc2VhcmNoIGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJlZ2lubmluZyBldmVyeSB0aW1lIGJlY2F1c2UgaXRlbXMgZnJvbSBib3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVzIGFyZSBzb3J0ZWQgYnkgdGhlaXIgaW5kaWNlcyBpbiByaXRlbS4gICovCisgICAgICAgICAgICAgICAgICAgICAgZm9yICg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3Nvcl9pdGVtIDwgKCpwcmVkZWNlc3NvciktPm5pdGVtczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcHJlZGVjZXNzb3JfaXRlbSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKnByZWRlY2Vzc29yKS0+aXRlbXNbcHJlZGVjZXNzb3JfaXRlbV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBzLT5pdGVtc1tzZWxmX2l0ZW1dIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgYXZlciAocHJlZGVjZXNzb3JfaXRlbSAhPSAoKnByZWRlY2Vzc29yKS0+bml0ZW1zKTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoaWVscl9pdGVtX2hhc19sb29rYWhlYWQgKCpwcmVkZWNlc3NvciwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yX2l0ZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cmlidXRpb25fdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX2xvb2thaGVhZF9zZXRzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIFNiaXRzZXRfX3NldCAoYW5ub3RhdGlvbl9ub2RlLT5jb250cmlidXRpb25zW2NpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JfaXRlbSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYW5ub3RhdGlvbl9ub2RlLT5jb250cmlidXRpb25zW2NpXSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFNiaXRzZXQgYml0ZXI7CisgICAgICAgICAgICAgICAgU2JpdHNldF9fSW5kZXggaTsKKyAgICAgICAgICAgICAgICBTQklUU0VUX19GT1JfRUFDSCAoYW5ub3RhdGlvbl9ub2RlLT5jb250cmlidXRpb25zW2NpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpwcmVkZWNlc3NvciktPm5pdGVtcywgYml0ZXIsIGkpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBvdGVudGlhbF9jb250cmlidXRpb24gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoIWxvb2thaGVhZHMpCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGo7CisgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWRzID0geG5tYWxsb2MgKCgqcHJlZGVjZXNzb3IpLT5uaXRlbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAqbG9va2FoZWFkcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgKCpwcmVkZWNlc3NvciktPm5pdGVtczsgKytqKQorICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWRzW2pdID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghbG9va2FoZWFkc1tpXSkKKyAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWRzW2ldID0gYml0c2V0X2NyZWF0ZSAobnRva2VucywgQklUU0VUX0ZJWEVEKTsKKyAgICAgICAgICAgICAgICAgICAgYml0c2V0X3NldCAobG9va2FoZWFkc1tpXSwgY29udHJpYnV0aW9uX3Rva2VuKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyogSWYgdGhlIHByZWRlY2Vzc29yIGhhcyBhbnkgY29udHJpYnV0aW9ucyBiZXNpZGVzIGp1c3QgImFsd2F5cyIgYW5kCisgICAgICAgICAibmV2ZXIiIGNvbnRyaWJ1dGlvbnM6CisgICAgICAgICAtIElmIHRoZSBkb21pbmFudCBjb250cmlidXRpb24gaXMgc3BsaXQtc3RhYmxlLCB0aGUgYW5ub3RhdGlvbiBjb3VsZAorICAgICAgICAgICBub3QgYWZmZWN0IG1lcmdpbmcgb24gdGhpcyBwcmVkZWNlc3NvciBzdGF0ZSBvciBpdHMgZXZlbnR1YWwKKyAgICAgICAgICAgcHJlZGVjZXNzb3Igc3RhdGVzLiAgTW9yZW92ZXIsIGFsbCBjb250cmlidXRpb25zIHRoYXQgYWZmZWN0CisgICAgICAgICAgIHdoZXRoZXIgdGhlIGRvbWluYW50IGNvbnRyaWJ1dGlvbiByZW1haW5zIGRvbWluYW50IG11c3QgYmUgImFsd2F5cyIKKyAgICAgICAgICAgb3IgIm5ldmVyIiBjb250cmlidXRpb25zIGluIG9yZGVyIGZvciB0aGUgZG9taW5hbnQgY29udHJpYnV0aW9uIHRvCisgICAgICAgICAgIGJlIHNwbGl0LXN0YWJsZS4gIFRodXMsIHRoZSBkb21pbmFudCBjb250cmlidXRpb24gY29tcHV0YXRpb24gcmVzdWx0CisgICAgICAgICAgIGluIGV2ZW50dWFsIHN1Y2Nlc3NvciBzdGF0ZXMgd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnkgbG9va2FoZWFkcworICAgICAgICAgICB0cmFja2VkIGZvciB0aGlzIHByZWRlY2Vzc29yIHN0YXRlLiAgKEFsc28sIGFzIGluIHRoZSBpc29jb3JlCisgICAgICAgICAgIGNvbXBhdGliaWxpdHkgdGVzdCwgd2UgZGVwZW5kIG9uIHRoZSBmYWN0IHRoYXQgaXNvY29yZXMgd2l0aCBlcXVhbAorICAgICAgICAgICBkb21pbmFudCBjb250cmlidXRpb25zIHdpbGwgaGF2ZSB0aGUgc2FtZSBkb21pbmFudCBjb250cmlidXRpb24gd2hlbgorICAgICAgICAgICBtZXJnZWQuICBPdGhlcndpc2UsIHdlIG1pZ2h0IGhhdmUgdG8gd29ycnkgdGhhdCB0aGUgcHJlc2VuY2Ugb2YgYQorICAgICAgICAgICBwb3RlbnRpYWwgY29udHJpYnV0aW9uIG1pZ2h0IHNvbWVob3cgYmUgdGhlIGN1bHByaXQgb2YgdGhhdCBiZWhhdmlvcgorICAgICAgICAgICBhbmQgdGh1cyBuZWVkIHRvIGJlIHRyYWNrZWQgcmVnYXJkbGVzcyBvZiB0aGUgc3BsaXQgc3RhYmlsaXR5IG9mIHRoZQorICAgICAgICAgICBkb21pbmFudCBjb250cmlidXRpb24uKSAgVGh1cywgZ28gYWhlYWQgYW5kIGRpc2NhcmQgdGhlIGFubm90YXRpb24KKyAgICAgICAgICAgdG8gc2F2ZSBzcGFjZSBub3cgcGx1cyB0aW1lIGR1cmluZyBzdGF0ZSBzcGxpdHRpbmcuCisgICAgICAgICAtIE90aGVyd2lzZSwgcmVjb3JkIHRoZSBhbm5vdGF0aW9uLCBhbmQgY29tcHV0ZSBhbnkgcmVzdWx0aW5nCisgICAgICAgICAgIGFubm90YXRpb25zIG5lZWRlZCBvbiBwcmVkZWNlc3NvciBzdGF0ZXMuICAqLworICAgICAgaWYgKHBvdGVudGlhbF9jb250cmlidXRpb24pCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoQ29udHJpYnV0aW9uSW5kZXhfX25vbmUKKyAgICAgICAgICAgICAgIT0gQW5ub3RhdGlvbkxpc3RfX2NvbXB1dGVEb21pbmFudENvbnRyaWJ1dGlvbiAoCisgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbl9ub2RlLCAoKnByZWRlY2Vzc29yKS0+bml0ZW1zLCBsb29rYWhlYWRzLCB0cnVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgb2JzdGFja19mcmVlIChhbm5vdGF0aW9uc19vYnN0YWNrcCwgYW5ub3RhdGlvbl9ub2RlKTsKKyAgICAgICAgICAgICAgYW5ub3RhdGlvbl9ub2RlID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB7CisgICAgICAgICAgICBzaXplX3QgaTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAoKnByZWRlY2Vzc29yKS0+bml0ZW1zOyArK2kpCisgICAgICAgICAgICAgIGlmIChsb29rYWhlYWRzW2ldKQorICAgICAgICAgICAgICAgIGJpdHNldF9mcmVlIChsb29rYWhlYWRzW2ldKTsKKyAgICAgICAgICAgIGZyZWUgKGxvb2thaGVhZHMpOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoYW5ub3RhdGlvbl9ub2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoQW5ub3RhdGlvbkxpc3RfX2luc2VydEludG8gKGFubm90YXRpb25fbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYW5ub3RhdGlvbl9saXN0c1soKnByZWRlY2Vzc29yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+bnVtYmVyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKnByZWRlY2Vzc29yKS0+bml0ZW1zKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICArK2Fubm90YXRpb25fY291bnRzWygqcHJlZGVjZXNzb3IpLT5udW1iZXJdOworICAgICAgICAgICAgICAgICAgQW5ub3RhdGlvbkxpc3RfX2NvbXB1dGVQcmVkZWNlc3NvckFubm90YXRpb25zICgKKyAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbl9ub2RlLCAqcHJlZGVjZXNzb3IsCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd19rZXJuZWxfaXRlbXMsIGFsd2F5c19mb2xsb3dzLCBwcmVkZWNlc3NvcnMsCisgICAgICAgICAgICAgICAgICAgIGl0ZW1fbG9va2FoZWFkX3NldHMsIGFubm90YXRpb25fbGlzdHMsIGFubm90YXRpb25fY291bnRzLAorICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uc19vYnN0YWNrcCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb2JzdGFja19mcmVlIChhbm5vdGF0aW9uc19vYnN0YWNrcCwgYW5ub3RhdGlvbl9ub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBvYnN0YWNrX2ZyZWUgKGFubm90YXRpb25zX29ic3RhY2twLCBhbm5vdGF0aW9uX25vZGUpOworICAgIH0KK30KKwordm9pZAorQW5ub3RhdGlvbkxpc3RfX2NvbXB1dGVfZnJvbV9pbmFkZXF1YWNpZXMgKAorICBzdGF0ZSAqcywgYml0c2V0diBmb2xsb3dfa2VybmVsX2l0ZW1zLCBiaXRzZXR2IGFsd2F5c19mb2xsb3dzLAorICBzdGF0ZSAqKipwcmVkZWNlc3NvcnMsIGJpdHNldCAqKml0ZW1fbG9va2FoZWFkX3NldHMsCisgIEluYWRlcXVhY3lMaXN0ICoqaW5hZGVxdWFjeV9saXN0cywgQW5ub3RhdGlvbkxpc3QgKiphbm5vdGF0aW9uX2xpc3RzLAorICBBbm5vdGF0aW9uSW5kZXggKmFubm90YXRpb25fY291bnRzLAorICBDb250cmlidXRpb25JbmRleCAqbWF4X2NvbnRyaWJ1dGlvbnNwLAorICBzdHJ1Y3Qgb2JzdGFjayAqYW5ub3RhdGlvbnNfb2JzdGFja3AsCisgIEluYWRlcXVhY3lMaXN0Tm9kZUNvdW50ICppbmFkZXF1YWN5X2xpc3Rfbm9kZV9jb3VudCkKK3sKKyAgYml0c2V0diBhbGxfbG9va2FoZWFkczsKKyAgYml0c2V0IHNoaWZ0X3Rva2VuczsKKyAgYml0c2V0IGNvbmZsaWN0ZWRfdG9rZW5zOworICBiaXRzZXRfaXRlcmF0b3IgYml0ZXJfY29uZmxpY3Q7CisgIGJpdHNldF9iaW5kZXggY29uZmxpY3RlZF90b2tlbjsKKworICAvKiBSZXR1cm4gYW4gZW1wdHkgbGlzdCBpZiBzLT5sb29rYWhlYWRfdG9rZW5zID0gTlVMTC4gICovCisgIGlmIChzLT5jb25zaXN0ZW50KQorICAgIHJldHVybjsKKworICBhbGxfbG9va2FoZWFkcyA9IGJpdHNldHZfY3JlYXRlIChzLT5uaXRlbXMsIG50b2tlbnMsIEJJVFNFVF9GSVhFRCk7CisgIGJpdHNldHZfb25lcyAoYWxsX2xvb2thaGVhZHMpOworICBzaGlmdF90b2tlbnMgPSBBbm5vdGF0aW9uTGlzdF9fY29tcHV0ZV9zaGlmdF90b2tlbnMgKHMtPnRyYW5zaXRpb25zKTsKKyAgY29uZmxpY3RlZF90b2tlbnMgPQorICAgIEFubm90YXRpb25MaXN0X19jb21wdXRlX2NvbmZsaWN0ZWRfdG9rZW5zIChzaGlmdF90b2tlbnMsIHMtPnJlZHVjdGlvbnMpOworCisgIC8qIEFkZCBhbiBpbmFkZXF1YWN5IGFubm90YXRpb24gZm9yIGVhY2ggY29uZmxpY3RlZF90b2tlbi4gICovCisgIEJJVFNFVF9GT1JfRUFDSCAoYml0ZXJfY29uZmxpY3QsIGNvbmZsaWN0ZWRfdG9rZW5zLCBjb25mbGljdGVkX3Rva2VuLCAwKQorICAgIHsKKyAgICAgIEFubm90YXRpb25MaXN0ICphbm5vdGF0aW9uX25vZGU7CisgICAgICAvKiBGSVhNRTogV291bGQgYSBCSVRTRVRfRlJVR0FMIG9yIEJJVEVTVF9TUEFSU0UgYmUgbW9yZSBlZmZpY2llbnQ/ICBOb3cKKyAgICAgICAgIG9yIGNvbnZlcnQgaXQgaW5zaWRlIEluYWRlcXVhY3lMaXN0X19uZXdfY29uZmxpY3Q/ICAqLworICAgICAgYml0c2V0IGFjdGlvbnMgPSBiaXRzZXRfY3JlYXRlIChzLT5yZWR1Y3Rpb25zLT5udW0gKyAxLCBCSVRTRVRfRklYRUQpOworICAgICAgQ29udHJpYnV0aW9uSW5kZXggY29udHJpYnV0aW9uX2NvdW50ID0gMDsKKyAgICAgIGJvb2wgcG90ZW50aWFsX2NvbnRyaWJ1dGlvbiA9IGZhbHNlOworCisgICAgICAvKiBBbGxvY2F0ZSB0aGUgYW5ub3RhdGlvbiBub2RlLiAgKi8KKyAgICAgIHsKKyAgICAgICAgaW50IHJ1bGVfaTsKKyAgICAgICAgZm9yIChydWxlX2kgPSAwOyBydWxlX2kgPCBzLT5yZWR1Y3Rpb25zLT5udW07ICsrcnVsZV9pKQorICAgICAgICAgIGlmIChiaXRzZXRfdGVzdCAocy0+cmVkdWN0aW9ucy0+bG9va2FoZWFkX3Rva2Vuc1tydWxlX2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmxpY3RlZF90b2tlbikpCisgICAgICAgICAgICArK2NvbnRyaWJ1dGlvbl9jb3VudDsKKyAgICAgICAgaWYgKGJpdHNldF90ZXN0IChzaGlmdF90b2tlbnMsIGNvbmZsaWN0ZWRfdG9rZW4pKQorICAgICAgICAgICsrY29udHJpYnV0aW9uX2NvdW50OworICAgICAgICBhbm5vdGF0aW9uX25vZGUgPQorICAgICAgICAgIEFubm90YXRpb25MaXN0X19hbGxvY19vbl9vYnN0YWNrIChjb250cmlidXRpb25fY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zX29ic3RhY2twKTsKKyAgICAgIH0KKworICAgICAgLyogQWRkIGEgY29udHJpYnV0aW9uIGZvciBlYWNoIHJlZHVjdGlvbiB0aGF0IGhhcyBjb25mbGljdGVkX3Rva2VuIGFzIGEKKyAgICAgICAgIGxvb2thaGVhZC4gICovCisgICAgICB7CisgICAgICAgIENvbnRyaWJ1dGlvbkluZGV4IGNpID0gMDsKKyAgICAgICAgaW50IGl0ZW1faSA9IDA7CisgICAgICAgIGludCBydWxlX2k7CisgICAgICAgIGZvciAocnVsZV9pID0gMDsgcnVsZV9pIDwgcy0+cmVkdWN0aW9ucy0+bnVtOyArK3J1bGVfaSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBydWxlICp0aGVfcnVsZSA9IHMtPnJlZHVjdGlvbnMtPnJ1bGVzW3J1bGVfaV07CisgICAgICAgICAgICBpZiAoYml0c2V0X3Rlc3QgKHMtPnJlZHVjdGlvbnMtPmxvb2thaGVhZF90b2tlbnNbcnVsZV9pXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmxpY3RlZF90b2tlbikpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBiaXRzZXRfc2V0IChhY3Rpb25zLCBydWxlX2kpOworICAgICAgICAgICAgICAgIC8qIElmIHRoaXMgcmVkdWN0aW9uIGlzIG9uIGEga2VybmVsIGl0ZW0sIGp1c3QgYWRkIGl0LiAgKi8KKyAgICAgICAgICAgICAgICBpZiAoIWl0ZW1fbnVtYmVyX2lzX3J1bGVfbnVtYmVyICh0aGVfcnVsZS0+cmhzWzBdKSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbl9ub2RlLT5jb250cmlidXRpb25zW2NpXSA9CisgICAgICAgICAgICAgICAgICAgICAgU2JpdHNldF9fbmV3X29uX29ic3RhY2sgKHMtPm5pdGVtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnNfb2JzdGFja3ApOworICAgICAgICAgICAgICAgICAgICAvKiBDYXRjaCBpdGVtX2kgdXAgdG8gcnVsZV9pLiAgVGhpcyB3b3JrcyBiZWNhdXNlIGJvdGggYXJlCisgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlZCBvbiBydWxlIG51bWJlci4gICovCisgICAgICAgICAgICAgICAgICAgIHdoaWxlICghaXRlbV9udW1iZXJfaXNfcnVsZV9udW1iZXIgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaXRlbVtzLT5pdGVtc1tpdGVtX2ldXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGl0ZW1fbnVtYmVyX2FzX3J1bGVfbnVtYmVyICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcml0ZW1bcy0+aXRlbXNbaXRlbV9pXV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSB0aGVfcnVsZS0+bnVtYmVyKQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICsraXRlbV9pOworICAgICAgICAgICAgICAgICAgICAgICAgYXZlciAoaXRlbV9pIDwgcy0+bml0ZW1zKTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIFNiaXRzZXRfX3NldCAoYW5ub3RhdGlvbl9ub2RlLT5jb250cmlidXRpb25zW2NpXSwgaXRlbV9pKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UsIGFkZCB0aGUga2VybmVsIGl0ZW1zIHdob3NlIGxvb2thaGVhZCBzZXRzCisgICAgICAgICAgICAgICAgICAgY29udHJpYnV0ZSB0aGUgY29uZmxpY3RlZCB0b2tlbiB0byB0aGlzIHJlZHVjdGlvbidzCisgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkIHNldC4gICovCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoQW5ub3RhdGlvbkxpc3RfX2NvbXB1dGVfbGhzX2NvbnRyaWJ1dGlvbnMgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcywgdGhlX3J1bGUsIGNvbmZsaWN0ZWRfdG9rZW4sIGZvbGxvd19rZXJuZWxfaXRlbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHdheXNfZm9sbG93cywgcHJlZGVjZXNzb3JzLCBpdGVtX2xvb2thaGVhZF9zZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFubm90YXRpb25fbm9kZS0+Y29udHJpYnV0aW9uc1tjaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uc19vYnN0YWNrcCkpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25fbm9kZS0+Y29udHJpYnV0aW9uc1tjaSsrXSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qIFRoZSBsb29rYWhlYWQgdG9rZW4gaGFzIHRvIGNvbWUgZnJvbSBzb21ld2hlcmUuICAqLworICAgICAgICAgICAgICAgIGF2ZXIgKCFTYml0c2V0X19pc0VtcHR5IChhbm5vdGF0aW9uX25vZGUtPmNvbnRyaWJ1dGlvbnNbY2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5uaXRlbXMpKTsKKyAgICAgICAgICAgICAgICArK2NpOworICAgICAgICAgICAgICAgIHBvdGVudGlhbF9jb250cmlidXRpb24gPSB0cnVlOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgfQorCisgICAgICAvKiBJZiB0aGVyZSBhcmUgYW55IGNvbnRyaWJ1dGlvbnMgYmVzaWRlcyBqdXN0ICJhbHdheXMiIGNvbnRyaWJ1dGlvbnM6CisgICAgICAgICAtIElmIHRoZXJlJ3MgYWxzbyBhIHNoaWZ0IGNvbnRyaWJ1dGlvbiwgcmVjb3JkIGl0LgorICAgICAgICAgLSBJZiB0aGUgZG9taW5hbnQgY29udHJpYnV0aW9uIGlzIHNwbGl0LXN0YWJsZSwgdGhlbiB0aGUgYW5ub3RhdGlvbgorICAgICAgICAgICBjb3VsZCBub3QgYWZmZWN0IG1lcmdpbmcsIHNvIGdvIGFoZWFkIGFuZCBkaXNjYXJkIHRoZSBhbm5vdGF0aW9uIGFuZAorICAgICAgICAgICB0aGUgaW5hZGVxdWFjeSB0byBzYXZlIHNwYWNlIG5vdyBwbHVzIHRpbWUgZHVyaW5nIHN0YXRlIHNwbGl0dGluZy4KKyAgICAgICAgIC0gT3RoZXJ3aXNlLCByZWNvcmQgdGhlIGFubm90YXRpb24gYW5kIHRoZSBpbmFkZXF1YWN5LCBhbmQgY29tcHV0ZSBhbnkKKyAgICAgICAgICAgcmVzdWx0aW5nIGFubm90YXRpb25zIG5lZWRlZCBvbiBwcmVkZWNlc3NvciBzdGF0ZXMuICAqLworICAgICAgaWYgKHBvdGVudGlhbF9jb250cmlidXRpb24pCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoYml0c2V0X3Rlc3QgKHNoaWZ0X3Rva2VucywgY29uZmxpY3RlZF90b2tlbikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGJpdHNldF9zZXQgKGFjdGlvbnMsIHMtPnJlZHVjdGlvbnMtPm51bSk7CisgICAgICAgICAgICAgIGFubm90YXRpb25fbm9kZS0+Y29udHJpYnV0aW9uc1tjb250cmlidXRpb25fY291bnQgLSAxXSA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgeworICAgICAgICAgICAgSW5hZGVxdWFjeUxpc3QgKmNvbmZsaWN0X25vZGUgPQorICAgICAgICAgICAgICBJbmFkZXF1YWN5TGlzdF9fbmV3X2NvbmZsaWN0ICgKKyAgICAgICAgICAgICAgICBzLCBzeW1ib2xzW2NvbmZsaWN0ZWRfdG9rZW5dLCBhY3Rpb25zLAorICAgICAgICAgICAgICAgIGluYWRlcXVhY3lfbGlzdF9ub2RlX2NvdW50KTsKKyAgICAgICAgICAgIGFjdGlvbnMgPSBOVUxMOworICAgICAgICAgICAgYW5ub3RhdGlvbl9ub2RlLT5pbmFkZXF1YWN5Tm9kZSA9IGNvbmZsaWN0X25vZGU7CisgICAgICAgICAgICBpZiAoQ29udHJpYnV0aW9uSW5kZXhfX25vbmUKKyAgICAgICAgICAgICAgICAhPSBBbm5vdGF0aW9uTGlzdF9fY29tcHV0ZURvbWluYW50Q29udHJpYnV0aW9uICgKKyAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25fbm9kZSwgcy0+bml0ZW1zLCBhbGxfbG9va2FoZWFkcywgdHJ1ZSkpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvYnN0YWNrX2ZyZWUgKGFubm90YXRpb25zX29ic3RhY2twLCBhbm5vdGF0aW9uX25vZGUpOworICAgICAgICAgICAgICAgIEluYWRlcXVhY3lMaXN0X19kZWxldGUgKGNvbmZsaWN0X25vZGUpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBJbmFkZXF1YWN5TGlzdF9fcHJlcGVuZFRvIChjb25mbGljdF9ub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbmFkZXF1YWN5X2xpc3RzW3MtPm51bWJlcl0pOworICAgICAgICAgICAgICAgIGF2ZXIgKEFubm90YXRpb25MaXN0X19pbnNlcnRJbnRvICgKKyAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25fbm9kZSwgJmFubm90YXRpb25fbGlzdHNbcy0+bnVtYmVyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHMtPm5pdGVtcykpOworICAgICAgICAgICAgICAgIC8qIFRoaXMgYXZlciBtYWtlcyBzdXJlIHRoZQorICAgICAgICAgICAgICAgICAgIEFubm90YXRpb25MaXN0X19jb21wdXRlRG9taW5hbnRDb250cmlidXRpb24gY2hlY2sgYWJvdmUKKyAgICAgICAgICAgICAgICAgICBkb2VzIGRpc2NhcmQgYW5ub3RhdGlvbnMgaW4gdGhlIHNpbXBsZXN0IGNhc2Ugb2YgYSBTL1IKKyAgICAgICAgICAgICAgICAgICBjb25mbGljdCB3aXRoIG5vIHRva2VuIHByZWNlZGVuY2UuICAqLworICAgICAgICAgICAgICAgIGF2ZXIgKCFiaXRzZXRfdGVzdCAoc2hpZnRfdG9rZW5zLCBjb25mbGljdGVkX3Rva2VuKQorICAgICAgICAgICAgICAgICAgICAgIHx8IHN5bWJvbHNbY29uZmxpY3RlZF90b2tlbl0tPnByZWMpOworICAgICAgICAgICAgICAgICsrYW5ub3RhdGlvbl9jb3VudHNbcy0+bnVtYmVyXTsKKyAgICAgICAgICAgICAgICBpZiAoY29udHJpYnV0aW9uX2NvdW50ID4gKm1heF9jb250cmlidXRpb25zcCkKKyAgICAgICAgICAgICAgICAgICptYXhfY29udHJpYnV0aW9uc3AgPSBjb250cmlidXRpb25fY291bnQ7CisgICAgICAgICAgICAgICAgQW5ub3RhdGlvbkxpc3RfX2NvbXB1dGVQcmVkZWNlc3NvckFubm90YXRpb25zICgKKyAgICAgICAgICAgICAgICAgIGFubm90YXRpb25fbm9kZSwgcywKKyAgICAgICAgICAgICAgICAgIGZvbGxvd19rZXJuZWxfaXRlbXMsIGFsd2F5c19mb2xsb3dzLCBwcmVkZWNlc3NvcnMsCisgICAgICAgICAgICAgICAgICBpdGVtX2xvb2thaGVhZF9zZXRzLCBhbm5vdGF0aW9uX2xpc3RzLCBhbm5vdGF0aW9uX2NvdW50cywKKyAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zX29ic3RhY2twKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgYml0c2V0X2ZyZWUgKGFjdGlvbnMpOworICAgICAgICAgIG9ic3RhY2tfZnJlZSAoYW5ub3RhdGlvbnNfb2JzdGFja3AsIGFubm90YXRpb25fbm9kZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgYml0c2V0dl9mcmVlIChhbGxfbG9va2FoZWFkcyk7CisgIGJpdHNldF9mcmVlIChzaGlmdF90b2tlbnMpOworICBiaXRzZXRfZnJlZSAoY29uZmxpY3RlZF90b2tlbnMpOworfQorCit2b2lkCitBbm5vdGF0aW9uTGlzdF9fZGVidWcgKEFubm90YXRpb25MaXN0IGNvbnN0ICpzZWxmLCBzaXplX3Qgbml0ZW1zLCBpbnQgc3BhY2VzKQoreworICBBbm5vdGF0aW9uTGlzdCBjb25zdCAqYTsKKyAgQW5ub3RhdGlvbkluZGV4IGFpOworICBmb3IgKGEgPSBzZWxmLCBhaSA9IDA7IGE7IGEgPSBhLT5uZXh0LCArK2FpKQorICAgIHsKKyAgICAgIHsKKyAgICAgICAgaW50IGo7CisgICAgICAgIGZvciAoaiA9IDA7IGogPCBzcGFjZXM7ICsraikKKyAgICAgICAgICBwdXRjICgnICcsIHN0ZGVycik7CisgICAgICB9CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJBbm5vdGF0aW9uICVkIChtYW5pZmVzdGluZyBzdGF0ZSAlZCk6XG4iLAorICAgICAgICAgICAgICAgYWksIGEtPmluYWRlcXVhY3lOb2RlLT5tYW5pZmVzdGluZ1N0YXRlLT5udW1iZXIpOworICAgICAgeworICAgICAgICBDb250cmlidXRpb25JbmRleCBjaTsKKyAgICAgICAgYml0c2V0X2JpbmRleCBydWxlaSA9IDA7IC8qIGluaXQgc3VwcHJlc3NlcyBjb21waWxlciB3YXJuaW5nICovCisgICAgICAgIHJ1bGVpID0gYml0c2V0X2ZpcnN0IChhLT5pbmFkZXF1YWN5Tm9kZS0+aW5hZGVxdWFjeS5jb25mbGljdC5hY3Rpb25zKTsKKyAgICAgICAgZm9yIChjaSA9IDA7IGNpIDwgYS0+aW5hZGVxdWFjeU5vZGUtPmNvbnRyaWJ1dGlvbkNvdW50OyArK2NpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHN5bWJvbF9udW1iZXIgdG9rZW4gPQorICAgICAgICAgICAgICBJbmFkZXF1YWN5TGlzdF9fZ2V0Q29udHJpYnV0aW9uVG9rZW4gKGEtPmluYWRlcXVhY3lOb2RlLCBjaSkKKyAgICAgICAgICAgICAgICAtPm51bWJlcjsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaW50IGo7CisgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBzcGFjZXMrMjsgKytqKQorICAgICAgICAgICAgICAgIHB1dGMgKCcgJywgc3RkZXJyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjaSA9PSBJbmFkZXF1YWN5TGlzdF9fZ2V0U2hpZnRDb250cmlidXRpb25JbmRleCAoCisgICAgICAgICAgICAgICAgICAgICAgICBhLT5pbmFkZXF1YWN5Tm9kZSkpCisgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIkNvbnRyaWJ1dGVzIHNoaWZ0IG9mIHRva2VuICVkLlxuIiwgdG9rZW4pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiQ29udHJpYnV0ZXMgdG9rZW4gJWQiLCB0b2tlbik7CisgICAgICAgICAgICAgICAgYXZlciAocnVsZWkgIT0gQklUU0VUX0JJTkRFWF9NQVgpOworICAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiBhcyBsb29rYWhlYWQsIHJ1bGUgbnVtYmVyICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhLT5pbmFkZXF1YWN5Tm9kZS0+bWFuaWZlc3RpbmdTdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT5yZWR1Y3Rpb25zLT5ydWxlc1tydWxlaV0tPm51bWJlcik7CisgICAgICAgICAgICAgICAgcnVsZWkgPQorICAgICAgICAgICAgICAgICAgYml0c2V0X25leHQgKGEtPmluYWRlcXVhY3lOb2RlLT5pbmFkZXF1YWN5LmNvbmZsaWN0LmFjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZWkrMSk7CisgICAgICAgICAgICAgICAgaWYgKEFubm90YXRpb25MaXN0X19pc0NvbnRyaWJ1dGlvbkFsd2F5cyAoYSwgY2kpKQorICAgICAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiIGFsd2F5cy4iKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiwgaXRlbXM6ICIpOworICAgICAgICAgICAgICAgICAgICBTYml0c2V0X19mcHJpbnQgKGEtPmNvbnRyaWJ1dGlvbnNbY2ldLCBuaXRlbXMsIHN0ZGVycik7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQKK0Fubm90YXRpb25MaXN0X19jb21wdXRlTG9va2FoZWFkRmlsdGVyIChBbm5vdGF0aW9uTGlzdCBjb25zdCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbml0ZW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNldHYgbG9va2FoZWFkX2ZpbHRlcikKK3sKKyAgYml0c2V0dl96ZXJvIChsb29rYWhlYWRfZmlsdGVyKTsKKyAgZm9yICg7IHNlbGY7IHNlbGYgPSBzZWxmLT5uZXh0KQorICAgIHsKKyAgICAgIENvbnRyaWJ1dGlvbkluZGV4IGNpOworICAgICAgZm9yIChjaSA9IDA7IGNpIDwgc2VsZi0+aW5hZGVxdWFjeU5vZGUtPmNvbnRyaWJ1dGlvbkNvdW50OyArK2NpKQorICAgICAgICBpZiAoIUFubm90YXRpb25MaXN0X19pc0NvbnRyaWJ1dGlvbkFsd2F5cyAoc2VsZiwgY2kpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIFNiaXRzZXRfX0luZGV4IGl0ZW07CisgICAgICAgICAgICBTYml0c2V0IGJpdGVyOworICAgICAgICAgICAgc3ltYm9sX251bWJlciB0b2tlbiA9CisgICAgICAgICAgICAgIEluYWRlcXVhY3lMaXN0X19nZXRDb250cmlidXRpb25Ub2tlbiAoc2VsZi0+aW5hZGVxdWFjeU5vZGUsIGNpKQorICAgICAgICAgICAgICAgIC0+bnVtYmVyOworICAgICAgICAgICAgU0JJVFNFVF9fRk9SX0VBQ0ggKHNlbGYtPmNvbnRyaWJ1dGlvbnNbY2ldLCBuaXRlbXMsIGJpdGVyLCBpdGVtKQorICAgICAgICAgICAgICBiaXRzZXRfc2V0IChsb29rYWhlYWRfZmlsdGVyW2l0ZW1dLCB0b2tlbik7CisgICAgICAgICAgfQorICAgIH0KK30KKworLyoqCisgKiBccHJlCisgKiAgIC0gPHR0PnNlbGYgIT0gTlVMTDwvdHQ+LgorICogICAtIFxjIG5pdGVtcyBpcyB0aGUgbnVtYmVyIG9mIGtlcm5lbCBpdGVtcyBpbiB0aGUgTFIoMCkgc3RhdGUgdGhhdCBcYyBzZWxmCisgKiAgICAgYW5ub3RhdGVzLgorICogICAtIFxjIGxvb2thaGVhZHMgZGVzY3JpYmVzIHRoZSBsb29rYWhlYWQgc2V0cyBvbiB0aGUga2VybmVsIGl0ZW1zIG9mIHNvbWUKKyAqICAgICBpc29jb3JlIG9mIHRoZSBMUigwKSBzdGF0ZSB0aGF0IFxjIHNlbGYgYW5ub3RhdGVzLiAgRWl0aGVyOgorICogICAgIC0gPHR0Pmxvb2thaGVhZHMgPSBOVUxMPC90dD4gb25seSBpZiB0aGUgbG9va2FoZWFkIHNldCBvbiBldmVyeSBrZXJuZWwKKyAqICAgICAgIGl0ZW0gaXMgZW1wdHkuCisgKiAgICAgLSBGb3IgYW55IDx0dD4wIDw9IGkgPCBuaXRlbXM8L3R0PiwgPHR0Pmxvb2thaGVhZHNbaV08L3R0PiBpcyBlaXRoZXI6CisgKiAgICAgICAtIFxjIE5VTEwgb25seSBpZiB0aGUgbG9va2FoZWFkIHNldCBvbiBrZXJuZWwgaXRlbSBcYyBpIGlzIGVtcHR5LgorICogICAgICAgLSBUaGUgKHBvc3NpYmx5IGVtcHR5KSBsb29rYWhlYWQgc2V0IG9uIGtlcm5lbCBpdGVtIFxjIGkuCisgKiAgIC0gPHR0PjAgPD0gY2kgPCBzZWxmLT5pbmFkZXF1YWN5Tm9kZS0+Y29udHJpYnV0aW9uQ291bnQ8L3R0Pi4KKyAqIFxwb3N0CisgKiAgIC0gXGMgcmVzdWx0ID0gdHJ1ZSBpZmYgY29udHJpYnV0aW9uIFxjIGNpIGluIFxjIHNlbGYgaXMgbWFkZSBieSB0aGUgc3RhdGUKKyAqICAgICBkZXNjcmliZWQgYnkgXGMgbG9va2FoZWFkcy4KKyAqLworc3RhdGljIGJvb2wKK0Fubm90YXRpb25MaXN0X19zdGF0ZU1ha2VzQ29udHJpYnV0aW9uIChBbm5vdGF0aW9uTGlzdCBjb25zdCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbml0ZW1zLCBDb250cmlidXRpb25JbmRleCBjaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzZXQgKmxvb2thaGVhZHMpCit7CisgIGlmIChBbm5vdGF0aW9uTGlzdF9faXNDb250cmlidXRpb25BbHdheXMgKHNlbGYsIGNpKSkKKyAgICByZXR1cm4gdHJ1ZTsKKyAgaWYgKCFsb29rYWhlYWRzKQorICAgIHJldHVybiBmYWxzZTsKKyAgeworICAgIHN5bWJvbF9udW1iZXIgdG9rZW4gPQorICAgICAgSW5hZGVxdWFjeUxpc3RfX2dldENvbnRyaWJ1dGlvblRva2VuIChzZWxmLT5pbmFkZXF1YWN5Tm9kZSwgY2kpLT5udW1iZXI7CisgICAgU2JpdHNldF9fSW5kZXggaXRlbTsKKyAgICBTYml0c2V0IGJpdGVyOworICAgIFNCSVRTRVRfX0ZPUl9FQUNIIChzZWxmLT5jb250cmlidXRpb25zW2NpXSwgbml0ZW1zLCBiaXRlciwgaXRlbSkKKyAgICAgIGlmIChsb29rYWhlYWRzW2l0ZW1dICYmIGJpdHNldF90ZXN0IChsb29rYWhlYWRzW2l0ZW1dLCB0b2tlbikpCisgICAgICAgIHJldHVybiB0cnVlOworICB9CisgIHJldHVybiBmYWxzZTsKK30KKworQ29udHJpYnV0aW9uSW5kZXgKK0Fubm90YXRpb25MaXN0X19jb21wdXRlRG9taW5hbnRDb250cmlidXRpb24gKEFubm90YXRpb25MaXN0IGNvbnN0ICpzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5pdGVtcywgYml0c2V0ICpsb29rYWhlYWRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXF1aXJlX3NwbGl0X3N0YWJsZSkKK3sKKyAgc3ltYm9sICp0b2tlbjsKKyAgQ29udHJpYnV0aW9uSW5kZXggY29uc3QgY2lfc2hpZnQgPQorICAgIEluYWRlcXVhY3lMaXN0X19nZXRTaGlmdENvbnRyaWJ1dGlvbkluZGV4IChzZWxmLT5pbmFkZXF1YWN5Tm9kZSk7CisKKyAgdG9rZW4gPSBzZWxmLT5pbmFkZXF1YWN5Tm9kZS0+aW5hZGVxdWFjeS5jb25mbGljdC50b2tlbjsKKworICAvKiBTL1IgY29uZmxpY3QuICAqLworICBpZiAoY2lfc2hpZnQgIT0gQ29udHJpYnV0aW9uSW5kZXhfX25vbmUpCisgICAgeworICAgICAgYm9vbCBmaW5kX3N0YWJsZV9kb21pbmF0aW9uX292ZXJfc2hpZnQgPSBmYWxzZTsKKyAgICAgIGJvb2wgZmluZF9zdGFibGVfZXJyb3JfYWN0aW9uX2RvbWluYXRpb24gPSBmYWxzZTsKKyAgICAgIHsKKyAgICAgICAgQ29udHJpYnV0aW9uSW5kZXggY2k7CisgICAgICAgIGludCBhY3Rpb25pOworICAgICAgICBDb250cmlidXRpb25JbmRleCBjaV9ycl9kb21pbmF0b3IgPSBDb250cmlidXRpb25JbmRleF9fbm9uZTsKKyAgICAgICAgaW50IHNoaWZ0X3ByZWNlZGVuY2UgPSB0b2tlbi0+cHJlYzsKKworICAgICAgICAvKiBJZiB0aGUgdG9rZW4gaGFzIG5vIHByZWNlZGVuY2Ugc2V0LCBzaGlmdCBpcyBhbHdheXMgY2hvc2VuLiAgKi8KKyAgICAgICAgaWYgKCFzaGlmdF9wcmVjZWRlbmNlKQorICAgICAgICAgIHJldHVybiBjaV9zaGlmdDsKKworICAgICAgICAvKiBGaWd1cmUgb3V0IHdoaWNoIHJlZHVjdGlvbnMgY29udHJpYnV0ZSwgd2hpY2ggb2YgdGhvc2Ugd291bGQKKyAgICAgICAgICAgZG9taW5hdGUgaW4gYSBSL1IgY29tcGFyaXNvbiwgYW5kIHdoZXRoZXIgYW55IHJlZHVjdGlvbiBkb21pbmF0ZXMKKyAgICAgICAgICAgdGhlIHNoaWZ0IHNvIHRoYXQgdGhlIFIvUiBjb21wYXJpc29uIGlzIGFjdHVhbGx5IG5lZWRlZC4gICovCisgICAgICAgIGZvciAoY2kgPSAwLCBhY3Rpb25pID0gYml0c2V0X2ZpcnN0IChzZWxmLT5pbmFkZXF1YWN5Tm9kZS0+aW5hZGVxdWFjeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmZsaWN0LmFjdGlvbnMpOworICAgICAgICAgICAgIGNpIDwgc2VsZi0+aW5hZGVxdWFjeU5vZGUtPmNvbnRyaWJ1dGlvbkNvdW50OworICAgICAgICAgICAgICsrY2ksIGFjdGlvbmkgPSBiaXRzZXRfbmV4dCAoc2VsZi0+aW5hZGVxdWFjeU5vZGUtPmluYWRlcXVhY3kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jb25mbGljdC5hY3Rpb25zLCBhY3Rpb25pKzEpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGludCByZWR1Y2VfcHJlY2VkZW5jZSA9IDA7CisgICAgICAgICAgICBpZiAoY2kgPT0gY2lfc2hpZnQpCisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgeworICAgICAgICAgICAgICBydWxlICpyID0gc2VsZi0+aW5hZGVxdWFjeU5vZGUtPm1hbmlmZXN0aW5nU3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLT5yZWR1Y3Rpb25zLT5ydWxlc1thY3Rpb25pXTsKKyAgICAgICAgICAgICAgaWYgKHItPnByZWMpCisgICAgICAgICAgICAgICAgcmVkdWNlX3ByZWNlZGVuY2UgPSByLT5wcmVjLT5wcmVjOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogSWYgdGhlcmUncyBubyBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhpcyByZWR1Y3Rpb24gYWN0dWFsbHkKKyAgICAgICAgICAgICAgIGNvbnRyaWJ1dGVzIGJlY2F1c2UgdGhlIHNoaWZ0IGVsaW1pbmF0ZXMgaXQgZnJvbSB0aGUgUi9SCisgICAgICAgICAgICAgICBjb21wYXJpc29uIGFueXdheSwgY29udGludWUgdG8gdGhlIG5leHQgcmVkdWN0aW9uLiAgKi8KKyAgICAgICAgICAgIGlmIChyZWR1Y2VfcHJlY2VkZW5jZQorICAgICAgICAgICAgICAgICYmIChyZWR1Y2VfcHJlY2VkZW5jZSA8IHNoaWZ0X3ByZWNlZGVuY2UKKyAgICAgICAgICAgICAgICAgICAgfHwgKHJlZHVjZV9wcmVjZWRlbmNlID09IHNoaWZ0X3ByZWNlZGVuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIHRva2VuLT5hc3NvYyA9PSByaWdodF9hc3NvYykpKQorICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghQW5ub3RhdGlvbkxpc3RfX3N0YXRlTWFrZXNDb250cmlidXRpb24gKHNlbGYsIG5pdGVtcywgY2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWRzKSkKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAvKiBUaGlzIHVuZWxpbWluYXRlZCByZWR1Y3Rpb24gY29udHJpYnV0ZXMsIHNvIHNlZSBpZiBpdCBjYW4gY2F1c2UKKyAgICAgICAgICAgICAgIGFuIGVycm9yIGFjdGlvbi4gICovCisgICAgICAgICAgICBpZiAocmVkdWNlX3ByZWNlZGVuY2UgPT0gc2hpZnRfcHJlY2VkZW5jZQorICAgICAgICAgICAgICAgICAmJiB0b2tlbi0+YXNzb2MgPT0gbm9uX2Fzc29jKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogSXQncyBub3QgcG9zc2libGUgdG8gZmluZCBzcGxpdC1zdGFibGUgZG9taW5hdGlvbiBvdmVyCisgICAgICAgICAgICAgICAgICAgc2hpZnQgYWZ0ZXIgYSBwb3RlbnRpYWwgJW5vbmFzc29jLiAgKi8KKyAgICAgICAgICAgICAgICBpZiAoZmluZF9zdGFibGVfZG9taW5hdGlvbl9vdmVyX3NoaWZ0KQorICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbnRyaWJ1dGlvbkluZGV4X19ub25lOworICAgICAgICAgICAgICAgIGlmICghcmVxdWlyZV9zcGxpdF9zdGFibGUKKyAgICAgICAgICAgICAgICAgICAgfHwgQW5ub3RhdGlvbkxpc3RfX2lzQ29udHJpYnV0aW9uQWx3YXlzIChzZWxmLCBjaSkpCisgICAgICAgICAgICAgICAgICByZXR1cm4gQ29udHJpYnV0aW9uSW5kZXhfX2Vycm9yX2FjdGlvbjsKKyAgICAgICAgICAgICAgICBmaW5kX3N0YWJsZV9lcnJvcl9hY3Rpb25fZG9taW5hdGlvbiA9IHRydWU7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIENvbnNpZGVyIHRoaXMgdW5lbGltaW5hdGVkIGNvbnRyaWJ1dGluZyByZWR1Y3Rpb24gaW4gdGhlIFIvUgorICAgICAgICAgICAgICAgY29tcGFyaXNvbi4gICovCisgICAgICAgICAgICBpZiAoY2lfcnJfZG9taW5hdG9yID09IENvbnRyaWJ1dGlvbkluZGV4X19ub25lKQorICAgICAgICAgICAgICBjaV9ycl9kb21pbmF0b3IgPSBjaTsKKyAgICAgICAgICAgIC8qIElmIHByZWNlZGVuY2UgaXMgc2V0IGZvciB0aGlzIHVuZWxpbWluYXRlZCBjb250cmlidXRpbmcKKyAgICAgICAgICAgICAgIHJlZHVjdGlvbiwgaXQgZG9taW5hdGVzIHRoZSBzaGlmdCwgc28gdHJ5IHRvIGZpZ3VyZSBvdXQgd2hpY2gKKyAgICAgICAgICAgICAgIHJlZHVjdGlvbiBkb21pbmF0ZXMgdGhlIFIvUiBjb21wYXJpc29uLiAgKi8KKyAgICAgICAgICAgIGlmIChyZWR1Y2VfcHJlY2VkZW5jZSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIEl0J3Mgbm90IHBvc3NpYmxlIHRvIGZpbmQgc3BsaXQtc3RhYmxlIGVycm9yIGFjdGlvbgorICAgICAgICAgICAgICAgICAgIGRvbWluYXRpb24gYWZ0ZXIgYSBwb3RlbnRpYWwgcmVkdWN0aW9uLiAgKi8KKyAgICAgICAgICAgICAgICBpZiAoZmluZF9zdGFibGVfZXJyb3JfYWN0aW9uX2RvbWluYXRpb24pCisgICAgICAgICAgICAgICAgICByZXR1cm4gQ29udHJpYnV0aW9uSW5kZXhfX25vbmU7CisgICAgICAgICAgICAgICAgaWYgKCFyZXF1aXJlX3NwbGl0X3N0YWJsZSkKKyAgICAgICAgICAgICAgICAgIHJldHVybiBjaV9ycl9kb21pbmF0b3I7CisgICAgICAgICAgICAgICAgaWYgKCFBbm5vdGF0aW9uTGlzdF9faXNDb250cmlidXRpb25BbHdheXMgKHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpX3JyX2RvbWluYXRvcikpCisgICAgICAgICAgICAgICAgICByZXR1cm4gQ29udHJpYnV0aW9uSW5kZXhfX25vbmU7CisgICAgICAgICAgICAgICAgaWYgKEFubm90YXRpb25MaXN0X19pc0NvbnRyaWJ1dGlvbkFsd2F5cyAoc2VsZiwgY2kpKQorICAgICAgICAgICAgICAgICAgcmV0dXJuIGNpX3JyX2RvbWluYXRvcjsKKyAgICAgICAgICAgICAgICBmaW5kX3N0YWJsZV9kb21pbmF0aW9uX292ZXJfc2hpZnQgPSB0cnVlOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgfQorICAgICAgaWYgKGZpbmRfc3RhYmxlX2RvbWluYXRpb25fb3Zlcl9zaGlmdAorICAgICAgICAgIHx8IGZpbmRfc3RhYmxlX2Vycm9yX2FjdGlvbl9kb21pbmF0aW9uKQorICAgICAgICByZXR1cm4gQ29udHJpYnV0aW9uSW5kZXhfX25vbmU7CisgICAgICAvKiBObyByZWR1Y2Ugb3IgZXJyb3IgYWN0aW9uIGRvbWluYXRpb24gZm91bmQsIHNvIHNoaWZ0IGRvbWluYXRlcy4gICovCisgICAgICByZXR1cm4gY2lfc2hpZnQ7CisgICAgfQorCisgIC8qIFIvUiBjb25mbGljdCwgc28gdGhlIHJlZHVjdGlvbiB3aXRoIHRoZSBsb3dlc3QgcnVsZSBudW1iZXIgZG9taW5hdGVzLgorICAgICBGb3J0dW5hdGVseSwgY29udHJpYnV0aW9ucyBhcmUgc29ydGVkIGJ5IHJ1bGUgbnVtYmVyLiAgKi8KKyAgeworICAgIENvbnRyaWJ1dGlvbkluZGV4IGNpOworICAgIGZvciAoY2kgPSAwOyBjaSA8IHNlbGYtPmluYWRlcXVhY3lOb2RlLT5jb250cmlidXRpb25Db3VudDsgKytjaSkKKyAgICAgIGlmIChBbm5vdGF0aW9uTGlzdF9fc3RhdGVNYWtlc0NvbnRyaWJ1dGlvbiAoc2VsZiwgbml0ZW1zLCBjaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkcykpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAocmVxdWlyZV9zcGxpdF9zdGFibGUKKyAgICAgICAgICAgICAgJiYgIUFubm90YXRpb25MaXN0X19pc0NvbnRyaWJ1dGlvbkFsd2F5cyAoc2VsZiwgY2kpKQorICAgICAgICAgICAgcmV0dXJuIENvbnRyaWJ1dGlvbkluZGV4X19ub25lOworICAgICAgICAgIHJldHVybiBjaTsKKyAgICAgICAgfQorICB9CisgIHJldHVybiBDb250cmlidXRpb25JbmRleF9fbm9uZTsKK30KZGlmZiAtLWdpdCBhL3NyYy9Bbm5vdGF0aW9uTGlzdC5oIGIvc3JjL0Fubm90YXRpb25MaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA4OGE4MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9Bbm5vdGF0aW9uTGlzdC5oCkBAIC0wLDAgKzEsMTgyIEBACisvKiBJRUxSJ3MgaW5hZGVxdWFjeSBhbm5vdGF0aW9uIGxpc3QuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBBTk5PVEFUSU9OX0xJU1RfSF8KKyMgZGVmaW5lIEFOTk9UQVRJT05fTElTVF9IXworCisjaW5jbHVkZSA8Yml0c2V0di5oPgorI2luY2x1ZGUgIlNiaXRzZXQuaCIKKyNpbmNsdWRlICJJbmFkZXF1YWN5TGlzdC5oIgorI2luY2x1ZGUgInN0YXRlLmgiCisKK3R5cGVkZWYgdW5zaWduZWQgaW50IEFubm90YXRpb25JbmRleDsKKworLyoqCisgKiBBIG5vZGUgaW4gYSBsaXN0IG9mIGFubm90YXRpb25zIG9uIGEgcGFydGljdWxhciBMUigwKSBzdGF0ZS4gIEVhY2gKKyAqIGFubm90YXRpb24gcmVjb3JkcyBob3cgaXNvY29yZXMgb2YgdGhhdCBMUigwKSBzdGF0ZSBtaWdodCBjb250cmlidXRlIHRvIGFuCisgKiBpbmRpdmlkdWFsIGluYWRlcXVhY3ksIHdoaWNoIG1pZ2h0IG1hbmlmZXN0IGluIGEgZGlmZmVyZW50IHN0YXRlLiAgRG9uJ3QKKyAqIGJyZWFrIGVuY2Fwc3VsYXRpb24gYnkgbW9kaWZ5aW5nIHRoZSBmaWVsZHMgZGlyZWN0bHkuICBVc2UgdGhlIHByb3ZpZGVkCisgKiBpbnRlcmZhY2UgZnVuY3Rpb25zLgorICovCit0eXBlZGVmIHN0cnVjdCBBbm5vdGF0aW9uTGlzdAoreworICAvKiogVGhlIG5leHQgbm9kZSBpbiB0aGUgbGlzdCBvciBcYyBOVUxMIGlmIG5vbmUuICAqLworICBzdHJ1Y3QgQW5ub3RhdGlvbkxpc3QgKm5leHQ7CisgIC8qKiBUaGUgXGMgSW5hZGVxdWFjeUxpc3Qgbm9kZSBkZXNjcmliaW5nIGhvdyB0aGlzIGluYWRlcXVhY3kgbWFuaWZlc3RzLiAgKi8KKyAgSW5hZGVxdWFjeUxpc3QgKmluYWRlcXVhY3lOb2RlOworICAvKioKKyAgICogTGlzdCBvZiBob3cgdGhlICJhbHdheXMiLCAibmV2ZXIiLCBhbmQgcG90ZW50aWFsIGNvbnRyaWJ1dGlvbnMgb2YgdGhlCisgICAqIGluYWRlcXVhY3kgbWlnaHQgYmUgbWFkZSBieSBpc29jb3JlcyBvZiB0aGUgYW5ub3RhdGVkIExSKDApIHN0YXRlOgorICAgKiAgIC0gVGhlIG51bWJlciBvZiByb3dzIGlzIHRoZSBudW1iZXIgb2YgY29udHJpYnV0aW9ucy4gIFRoYXQgaXMsCisgICAqICAgICA8dHQ+QW5ub3RhdGlvbkxpc3Q6OmluYWRlcXVhY3lOb2RlLT5jb250cmlidXRpb25Db3VudDwvdHQ+LgorICAgKiAgIC0gVGhlIHRva2VuIGFzc29jaWF0ZWQgd2l0aCBjb250cmlidXRpb24gXGMgaSBpcworICAgKiAgICAgPHR0PkluYWRlcXVhY3lMaXN0X19nZXRDb250cmlidXRpb25Ub2tlbiAoQW5ub3RhdGlvbkxpc3Q6OmluYWRlcXVhY3lOb2RlLCBpKTwvdHQ+LgorICAgKiAgIC0gSWZmIDx0dD5Bbm5vdGF0aW9uTGlzdDo6Y29udHJpYnV0aW9uc1tpXSA9IE5VTEw8L3R0PiwgY29udHJpYnV0aW9uCisgICAqICAgICBcYyBpIGlzIGFuICJhbHdheXMiIGNvbnRyaWJ1dGlvbi4gIFRoYXQgaXMsIGZvciBldmVyeSBpc29jb3JlIG9mIHRoZQorICAgKiAgICAgYW5ub3RhdGVkIExSKDApIHN0YXRlLCBpdHMgY29yZSBvciB0aGUgY29yZSBvZiBvbmUgaXRzIGV2ZW50dWFsCisgICAqICAgICBzdWNjZXNzb3JzIHdpbGwgZGVmaW5pdGVseSBtYWtlIHRoaXMgY29udHJpYnV0aW9uIHRvIHRoZSBpbmFkZXF1YWN5LgorICAgKiAgICAgSXQgbWF5IGNvbnRyaWJ1dGUgYnkgZWl0aGVyOgorICAgKiAgICAgLSBDcmVhdGluZyBhIHNoaWZ0IG9mIGNvbnRyaWJ1dGlvbiA8dHQ+aTwvdHQ+J3MgdG9rZW4gaW4gdGhlIHN0YXRlCisgICAqICAgICAgIHRoYXQgY2FuIG1hbmlmZXN0IHRoZSBpbmFkZXF1YWN5LgorICAgKiAgICAgLSBQcm9wYWdhdGluZyB0aGF0IHRva2VuIHRvIHRoZSBsb29rYWhlYWQgc2V0IG9mIGNvbnRyaWJ1dGlvbgorICAgKiAgICAgICA8dHQ+aTwvdHQ+J3MgcmVkdWN0aW9uIGluIHRoZSBzdGF0ZSB0aGF0IGNhbiBtYW5pZmVzdCB0aGUKKyAgICogICAgICAgaW5hZGVxdWFjeS4KKyAgICogICAtIE90aGVyd2lzZToKKyAgICogICAgIC0gVGhlIG51bWJlciBvZiBjb2x1bW5zIGluIDx0dD5Bbm5vdGF0aW9uTGlzdDo6Y29udHJpYnV0aW9uc1tpXTwvdHQ+CisgICAqICAgICAgIGlzIHRoZSBudW1iZXIgb2Yga2VybmVsIGl0ZW1zIGluIGFueSBpc29jb3JlIG9mIHRoZSBhbm5vdGF0ZWQgTFIoMCkKKyAgICogICAgICAgc3RhdGUuCisgICAqICAgICAtIElmZiA8dHQ+QW5ub3RhdGlvbkxpc3Q6OmNvbnRyaWJ1dGlvbnNbaV08L3R0PiBpcyBlbXB0eSwgY29udHJpYnV0aW9uCisgICAqICAgICAgIFxjIGkgaXMgYSAibmV2ZXIiIGNvbnRyaWJ1dGlvbi4gIFRoYXQgaXMsIG5vIGlzb2NvcmUgb2YgdGhlCisgICAqICAgICAgIGFubm90YXRlZCBMUigwKSBzdGF0ZSBjYW4gbWFrZSB0aGlzIGNvbnRyaWJ1dGlvbiB0byB0aGUgaW5hZGVxdWFjeS4KKyAgICogICAgIC0gT3RoZXJ3aXNlLCBmb3IgZWFjaCBiaXQgXGMgaiB0aGF0IGlzIHNldCBpbgorICAgKiAgICAgICA8dHQ+QW5ub3RhdGlvbkxpc3Q6OmNvbnRyaWJ1dGlvbnNbaV08L3R0PiwgaWYgdGhlIHRva2VuIGFzc29jaWF0ZWQKKyAgICogICAgICAgd2l0aCBjb250cmlidXRpb24gXGMgaSBpcyBwcmVzZW50IGluIHRoZSBsb29rYWhlYWQgc2V0IG9mIGtlcm5lbAorICAgKiAgICAgICBpdGVtIFxjIGogb2YgYW4gaXNvY29yZSBvZiB0aGUgYW5ub3RhdGVkIExSKDApIHN0YXRlLCB0aGF0IGlzb2NvcmUKKyAgICogICAgICAgd2lsbCBtYWtlIGNvbnRyaWJ1dGlvbiBcYyBpIHRvIHRoZSBpbmFkZXF1YWN5IGJ5IHByb3BhZ2F0aW5nIHRoZQorICAgKiAgICAgICBjb250cmlidXRpb24ncyB0b2tlbiB0byB0aGUgbG9va2FoZWFkIHNldCBvZiB0aGUgY29udHJpYnV0aW9uJ3MKKyAgICogICAgICAgcmVkdWN0aW9uIGluIHRoZSBzdGF0ZSB0aGF0IGNhbiBtYW5pZmVzdCB0aGUgaW5hZGVxdWFjeS4KKyAgICovCisgIFNiaXRzZXQgY29udHJpYnV0aW9uc1sxXTsKK30gQW5ub3RhdGlvbkxpc3Q7CisKKy8qKgorICogXHByZQorICogICAtIDx0dD5zICE9IE5VTEw8L3R0Pi4KKyAqICAgLSBcYyBmb2xsb3dfa2VybmVsX2l0ZW1zLCBcYyBhbHdheXNfZm9sbG93cywgYW5kIFxjIHByZWRlY2Vzc29ycyB3ZXJlCisgKiAgICAgY29tcHV0ZWQgYnkgXGMgaWVscl9jb21wdXRlX2F1eGlsaWFyeV90YWJsZXMuCisgKiAgIC0gVGhlIHNpemUgb2YgZWFjaCBvZiBcYyBhbm5vdGF0aW9uX2xpc3RzIGFuZCBcYyBhbm5vdGF0aW9uX2NvdW50cyBpcworICogICAgIFxjIDo6bnN0YXRlcy4KKyAqICAgLSBJZiBubyBcYyBJbmFkZXF1YWN5TGlzdCBub2RlcyBhcmUgY3VycmVudGx5IGFsbG9jYXRlZCBmb3IgdGhlCisgKiAgICAgcGFyc2VyIHRhYmxlcyB0byB3aGljaCBcYyBzIGJlbG9uZ3MsIHRoZW4gaXQgaXMgYmVzdCBpZgorICogICAgIDx0dD4qaW5hZGVxdWFjeV9saXN0X25vZGVfY291bnQ8L3R0PiBpcyB6ZXJvIHRvIGF2b2lkIG92ZXJmbG93LgorICogICAgIE90aGVyd2lzZSwgPHR0PippbmFkZXF1YWN5X2xpc3Rfbm9kZV9jb3VudDwvdHQ+IGhhcyBub3QgYmVlbgorICogICAgIG1vZGlmaWVkIGJ5IGFueSBmdW5jdGlvbiBleGNlcHQKKyAqICAgICBcYyBBbm5vdGF0aW9uTGlzdF9fY29tcHV0ZV9mcm9tX2luYWRlcXVhY2llcyBzaW5jZSB0aGUgaW52b2NhdGlvbgorICogICAgIG9mIFxjIEFubm90YXRpb25MaXN0X19jb21wdXRlX2Zyb21faW5hZGVxdWFjaWVzIHRoYXQgY29uc3RydWN0ZWQKKyAqICAgICB0aGUgZmlyc3Qgb2YgdGhlIFxjIEluYWRlcXVhY3lMaXN0IG5vZGVzIGN1cnJlbnRseSBhbGxvY2F0ZWQgZm9yCisgKiAgICAgdGhvc2UgcGFyc2VyIHRhYmxlcy4KKyAqIFxwb3N0CisgKiAgIC0gPHR0PmluYWRlcXVhY3lfbGlzdHNbcy0+bnVtYmVyXTwvdHQ+IG5vdyBkZXNjcmliZXMgYWxsIGluYWRlcXVhY2llcyB0aGF0CisgKiAgICAgbWFuaWZlc3QgaW4gXGMgcy4KKyAqICAgLSBGb3IgZXZlcnkgc3RhdGUgPHR0PnN0YXRlc1tpXTwvdHQ+LCA8dHQ+YW5ub3RhdGlvbl9saXN0c1tpXTwvdHQ+IG5vdworICogICAgIGNvbnRhaW5zIGFsbCBhbm5vdGF0aW9ucyBhc3NvY2lhdGVkIHdpdGggYWxsIGluYWRlcXVhY2llcyB0aGF0IG1hbmlmZXN0CisgKiAgICAgaW4gXGMgcy4KKyAqICAgLSA8dHQ+YW5ub3RhdGlvbl9jb3VudHNbaV08L3R0PiB3YXMgaW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBuZXcKKyAqICAgICBhbm5vdGF0aW9ucyBhZGRlZCB0byA8dHQ+c3RhdGVzW2ldPC90dD4uCisgKiAgIC0gPHR0PiptYXhfY29udHJpYnV0aW9uc3A8L3R0PiBpcyB0aGUgaGlnaGVyIG9mOgorICogICAgIC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbnRyaWJ1dGlvbnMgY29tcHV0ZWQgcGVyIGFubm90YXRpb24uCisgKiAgICAgLSA8dHQ+Km1heF9jb250cmlidXRpb25zcCBcQHByZTwvdHQ+LgorICogICAtIEFsbCBtZW1vcnkgZm9yIGFsbCBuZXcgYW5ub3RhdGlvbnMgd2FzIGFsbG9jYXRlZCBvbgorICogICAgIFxjIGFubm90YXRpb25zX29ic3RhY2twLgorICovCit2b2lkCitBbm5vdGF0aW9uTGlzdF9fY29tcHV0ZV9mcm9tX2luYWRlcXVhY2llcyAoCisgIHN0YXRlICpzLCBiaXRzZXR2IGZvbGxvd19rZXJuZWxfaXRlbXMsIGJpdHNldHYgYWx3YXlzX2ZvbGxvd3MsCisgIHN0YXRlICoqKnByZWRlY2Vzc29ycywgYml0c2V0ICoqaXRlbV9sb29rYWhlYWRfc2V0cywKKyAgSW5hZGVxdWFjeUxpc3QgKippbmFkZXF1YWN5X2xpc3RzLCBBbm5vdGF0aW9uTGlzdCAqKmFubm90YXRpb25fbGlzdHMsCisgIEFubm90YXRpb25JbmRleCAqYW5ub3RhdGlvbl9jb3VudHMsCisgIENvbnRyaWJ1dGlvbkluZGV4ICptYXhfY29udHJpYnV0aW9uc3AsCisgIHN0cnVjdCBvYnN0YWNrICphbm5vdGF0aW9uc19vYnN0YWNrcCwKKyAgSW5hZGVxdWFjeUxpc3ROb2RlQ291bnQgKmluYWRlcXVhY3lfbGlzdF9ub2RlX2NvdW50KTsKKworLyoqCisgKiBccHJlCisgKiAgIC0gPHR0PnNlbGYgIT0gTlVMTDwvdHQ+LgorICogICAtIFxjIG5pdGVtcyBpcyB0aGUgbnVtYmVyIG9mIGtlcm5lbCBpdGVtcyBpbiB0aGUgTFIoMCkgc3RhdGUgdGhhdCBldmVyeQorICogICAgIG5vZGUgaW4gdGhlIGxpc3QgXGMgc2VsZiBhbm5vdGF0ZXMuCisgKiBccG9zdAorICogICAtIEEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiBhbGwgbm9kZXMgaW4gdGhlIGxpc3QgXGMgc2VsZiB3YXMgcHJpbnRlZCB0bworICogICAgIHN0ZGVyci4gIFxjIHNwYWNlcyBzcGFjZXMgd2VyZSBwcmludGVkIGJlZm9yZSBlYWNoIGxpbmUgb2YgdGhlIHRleHQuCisgKi8KK3ZvaWQgQW5ub3RhdGlvbkxpc3RfX2RlYnVnIChBbm5vdGF0aW9uTGlzdCBjb25zdCAqc2VsZiwgc2l6ZV90IG5pdGVtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3BhY2VzKTsKKworLyoqCisgKiBccHJlCisgKiAgIC0gPHR0PnNlbGYgIT0gTlVMTDwvdHQ+LgorICogICAtIFxjIG5pdGVtcyBpcyB0aGUgbnVtYmVyIG9mIGtlcm5lbCBpdGVtcyBpbiB0aGUgTFIoMCkgc3RhdGUgdGhhdCBcYyBzZWxmCisgKiAgICAgYW5ub3RhdGVzLgorICogICAtIFRoZSBudW1iZXIgb2Ygcm93cyBpbiBcYyBsb29rYWhlYWRfZmlsdGVyIGlzIGF0IGxlYXN0IFxjIG5pdGVtcywgYW5kIHRoZQorICogICAgIG51bWJlciBvZiBjb2x1bW5zIGlzIFxjIDo6bnRva2Vucy4KKyAqIFxwb3N0CisgKiAgIC0gPHR0Pmxvb2thaGVhZF9maWx0ZXJbaV1bal08L3R0PiBpcyBzZXQgaWZmIHNvbWUgYW5ub3RhdGlvbiBpbiB0aGUgbGlzdAorICogICAgIFxjIHNlbGYgbGlzdHMgdG9rZW4gXGMgaiBpbiBrZXJuZWwgaXRlbSBcYyBpIGFzIGEgY29udHJpYnV0b3IuCisgKi8KK3ZvaWQgQW5ub3RhdGlvbkxpc3RfX2NvbXB1dGVMb29rYWhlYWRGaWx0ZXIgKEFubm90YXRpb25MaXN0IGNvbnN0ICpzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5pdGVtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNldHYgbG9va2FoZWFkX2ZpbHRlcik7CisKKy8qKgorICogXHByZQorICogICAtIDx0dD5zZWxmICE9IE5VTEw8L3R0Pi4KKyAqICAgLSBcYyBuaXRlbXMgaXMgdGhlIG51bWJlciBvZiBrZXJuZWwgaXRlbXMgaW4gdGhlIExSKDApIHN0YXRlIHRoYXQgXGMgc2VsZgorICogICAgIGFubm90YXRlcy4KKyAqICAgLSBcYyBsb29rYWhlYWRzIGRlc2NyaWJlcyB0aGUgbG9va2FoZWFkIHNldHMgb24gdGhlIGtlcm5lbCBpdGVtcyBvZiBzb21lCisgKiAgICAgaXNvY29yZSBvZiB0aGUgTFIoMCkgc3RhdGUgdGhhdCBcYyBzZWxmIGFubm90YXRlcy4gIEVpdGhlcjoKKyAqICAgICAtIDx0dD5sb29rYWhlYWRzID0gTlVMTDwvdHQ+IG9ubHkgaWYgdGhlIGxvb2thaGVhZCBzZXQgb24gZXZlcnkga2VybmVsCisgKiAgICAgICBpdGVtIGlzIGVtcHR5LgorICogICAgIC0gRm9yIGFueSA8dHQ+MCA8PSBpIDwgbml0ZW1zPC90dD4sIDx0dD5sb29rYWhlYWRzW2ldPC90dD4gaXMgZWl0aGVyOgorICogICAgICAgLSBcYyBOVUxMIG9ubHkgaWYgdGhlIGxvb2thaGVhZCBzZXQgb24ga2VybmVsIGl0ZW0gXGMgaSBpcyBlbXB0eS4KKyAqICAgICAgIC0gVGhlIChwb3NzaWJseSBlbXB0eSkgbG9va2FoZWFkIHNldCBvbiBrZXJuZWwgaXRlbSBcYyBpLgorICogXHBvc3QKKyAqICAgLSBJZiA8dHQ+cmVxdWlyZV9zcGxpdF9zdGFibGUgPSBmYWxzZTwvdHQ+LCBcYyByZXN1bHQgPSBlaXRoZXI6CisgKiAgICAgLSBcYyBDb250cmlidXRpb25JbmRleF9fbm9uZSBpZmYgdGhlIHN0YXRlIGRlc2NyaWJlZCBieSBcYyBsb29rYWhlYWRzCisgKiAgICAgICBtYWtlcyBub25lIG9mIHRoZSBjb250cmlidXRpb25zIGluIFxjIHNlbGYuCisgKiAgICAgLSBUaGUgaW5kZXggb2YgdGhlIGRvbWluYXRpbmcgY29udHJpYnV0aW9uIGluIFxjIHNlbGYgdGhhdCBpcyBtYWRlIGJ5CisgKiAgICAgICB0aGF0IHN0YXRlLgorICogICAgIC0gXGMgQ29udHJpYnV0aW9uSW5kZXhfX2Vycm9yX2FjdGlvbiB0byBpbmRpY2F0ZSB0aGF0IHRoZSBpbmFkZXF1YWN5CisgKiAgICAgICBtYW5pZmVzdHMgYXMgYSBjb25mbGljdCBhbmQgdGhhdCBhIHN5bnRheCBlcnJvciBhY3Rpb24gKGJlY2F1c2Ugb2YgYQorICogICAgICAgJW5vbmFzc29jKSBkb21pbmF0ZXMgaW5zdGVhZC4KKyAqICAgLSBPdGhlcndpc2UsIFxjIHJlc3VsdCBpcyB0aGUgc2FtZSBhcyBpZiA8dHQ+cmVxdWlyZV9zcGxpdF9zdGFibGUgPQorICogICAgIGZhbHNlPC90dD4gZXhjZXB0IHRoYXQgaXQgaXMgYWxzbyBcYyBDb250cmlidXRpb25JbmRleF9fbm9uZSBpZiB0aGVyZQorICogICAgIGFyZSBjb250cmlidXRpb25zIG1hZGUgYnkgdGhlIHN0YXRlIGJ1dCB0aGUgZG9taW5hdGluZyBjb250cmlidXRpb24gaXMKKyAqICAgICBub3Qgc3BsaXQtc3RhYmxlLiAgQnkgc3BsaXQtc3RhYmxlLCB3ZSBtZWFuIHRoYXQgdGhlIGRvbWluYXRpbmcKKyAqICAgICBjb250cmlidXRpb24gY2Fubm90IGNoYW5nZSBkdWUgdG8gbG9zcyBvZiBvbmUgb3IgbW9yZSBwb3RlbnRpYWwKKyAqICAgICBjb250cmlidXRpb25zIGR1ZSB0byBsb3NzIG9mIGxvb2thaGVhZHMgZHVlIHRvIHNwbGl0dGluZyBvZiB0aGUgc3RhdGUuCisgKiAgIC0gQWZ0ZXIgZGV0ZXJtaW5pbmcgd2hpY2ggY29udHJpYnV0aW9ucyBhcmUgYWN0dWFsbHkgbWFkZSBieSB0aGUgc3RhdGUsCisgKiAgICAgdGhlIGFsZ29yaXRobSBmb3IgZGV0ZXJtaW5pbmcgd2hpY2ggY29udHJpYnV0aW9uIGRvbWluYXRlcyBpbiB0aGUKKyAqICAgICBjb25mbGljdCBpcyBpbnRlbmRlZCB0byBjaG9vc2UgZXhhY3RseSB0aGUgc2FtZSBhY3Rpb24gYXMgY29uZmxpY3RzLmMKKyAqICAgICB3b3VsZCBjaG9vc2UuLi4gbm8gbWF0dGVyIGhvdyBjcmF6eSBjb25mbGljdHMuYydzIGNob2ljZSBpcy4KKyAqLworQ29udHJpYnV0aW9uSW5kZXgKK0Fubm90YXRpb25MaXN0X19jb21wdXRlRG9taW5hbnRDb250cmlidXRpb24gKEFubm90YXRpb25MaXN0IGNvbnN0ICpzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5pdGVtcywgYml0c2V0ICpsb29rYWhlYWRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXF1aXJlX3NwbGl0X3N0YWJsZSk7CisKKyNlbmRpZiAvKiAhQU5OT1RBVElPTl9MSVNUX0hfICovCmRpZmYgLS1naXQgYS9zcmMvSW5hZGVxdWFjeUxpc3QuYyBiL3NyYy9JbmFkZXF1YWN5TGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzODY4NWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvSW5hZGVxdWFjeUxpc3QuYwpAQCAtMCwwICsxLDc5IEBACisvKiBJRUxSJ3MgaW5hZGVxdWFjeSBsaXN0LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlICJzeXN0ZW0uaCIKKworI2luY2x1ZGUgIkluYWRlcXVhY3lMaXN0LmgiCisKK0NvbnRyaWJ1dGlvbkluZGV4IGNvbnN0IENvbnRyaWJ1dGlvbkluZGV4X19ub25lID0gLTE7CitDb250cmlidXRpb25JbmRleCBjb25zdCBDb250cmlidXRpb25JbmRleF9fZXJyb3JfYWN0aW9uID0gLTI7CisKK0luYWRlcXVhY3lMaXN0ICoKK0luYWRlcXVhY3lMaXN0X19uZXdfY29uZmxpY3QgKHN0YXRlICptYW5pZmVzdGluZ19zdGF0ZSwgc3ltYm9sICp0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNldCBhY3Rpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5hZGVxdWFjeUxpc3ROb2RlQ291bnQgKm5vZGVfY291bnQpCit7CisgIEluYWRlcXVhY3lMaXN0ICpyZXN1bHQgPSB4bWFsbG9jIChzaXplb2YgKnJlc3VsdCk7CisgIHJlc3VsdC0+aWQgPSAoKm5vZGVfY291bnQpKys7CisgIGF2ZXIgKCpub2RlX2NvdW50ICE9IDApOworICByZXN1bHQtPm5leHQgPSBOVUxMOworICByZXN1bHQtPm1hbmlmZXN0aW5nU3RhdGUgPSBtYW5pZmVzdGluZ19zdGF0ZTsKKyAgcmVzdWx0LT5jb250cmlidXRpb25Db3VudCA9IGJpdHNldF9jb3VudCAoYWN0aW9ucyk7CisgIHJlc3VsdC0+aW5hZGVxdWFjeS5jb25mbGljdC50b2tlbiA9IHRva2VuOworICByZXN1bHQtPmluYWRlcXVhY3kuY29uZmxpY3QuYWN0aW9ucyA9IGFjdGlvbnM7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQKK0luYWRlcXVhY3lMaXN0X19kZWxldGUgKEluYWRlcXVhY3lMaXN0ICpzZWxmKQoreworICB3aGlsZSAoc2VsZikKKyAgICB7CisgICAgICBJbmFkZXF1YWN5TGlzdCAqbm9kZSA9IHNlbGY7CisgICAgICBzZWxmID0gc2VsZi0+bmV4dDsKKyAgICAgIGJpdHNldF9mcmVlIChub2RlLT5pbmFkZXF1YWN5LmNvbmZsaWN0LmFjdGlvbnMpOworICAgICAgZnJlZSAobm9kZSk7CisgICAgfQorfQorCitDb250cmlidXRpb25JbmRleAorSW5hZGVxdWFjeUxpc3RfX2dldFNoaWZ0Q29udHJpYnV0aW9uSW5kZXggKEluYWRlcXVhY3lMaXN0IGNvbnN0ICpzZWxmKQoreworICBpZiAoIWJpdHNldF90ZXN0IChzZWxmLT5pbmFkZXF1YWN5LmNvbmZsaWN0LmFjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgIHNlbGYtPm1hbmlmZXN0aW5nU3RhdGUtPnJlZHVjdGlvbnMtPm51bSkpCisgICAgcmV0dXJuIENvbnRyaWJ1dGlvbkluZGV4X19ub25lOworICByZXR1cm4gc2VsZi0+Y29udHJpYnV0aW9uQ291bnQgLSAxOworfQorCitzeW1ib2wgKgorSW5hZGVxdWFjeUxpc3RfX2dldENvbnRyaWJ1dGlvblRva2VuIChJbmFkZXF1YWN5TGlzdCBjb25zdCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJpYnV0aW9uSW5kZXggaSkKK3sKKyAgYXZlciAoMCA8PSBpICYmIGkgPCBzZWxmLT5jb250cmlidXRpb25Db3VudCk7CisgIHJldHVybiBzZWxmLT5pbmFkZXF1YWN5LmNvbmZsaWN0LnRva2VuOworfQorCit2b2lkCitJbmFkZXF1YWN5TGlzdF9fcHJlcGVuZFRvIChJbmFkZXF1YWN5TGlzdCAqc2VsZiwgSW5hZGVxdWFjeUxpc3QgKipsaXN0KQoreworICBJbmFkZXF1YWN5TGlzdCAqaGVhZF9vbGQgPSAqbGlzdDsKKyAgKmxpc3QgPSBzZWxmOworICBzZWxmLT5uZXh0ID0gaGVhZF9vbGQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvSW5hZGVxdWFjeUxpc3QuaCBiL3NyYy9JbmFkZXF1YWN5TGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MTIwZGQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvSW5hZGVxdWFjeUxpc3QuaApAQCAtMCwwICsxLDE1NiBAQAorLyogSUVMUidzIGluYWRlcXVhY3kgbGlzdC4KKworICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIElOQURFUVVBQ1lfTElTVF9IXworIyBkZWZpbmUgSU5BREVRVUFDWV9MSVNUX0hfCisKKyNpbmNsdWRlIDxiaXRzZXQuaD4KKyNpbmNsdWRlICJncmFtLmgiCisjaW5jbHVkZSAic3RhdGUuaCIKKyNpbmNsdWRlICJzeW10YWIuaCIKKworLyoqCisgKiBBIHVuaXF1ZSBJRCBhc3NpZ25lZCB0byBldmVyeSBcYyBJbmFkZXF1YWN5TGlzdCBub2RlLgorICoKKyAqIFRoaXMgbXVzdCByZW1haW4gdW5zaWduZWQgc28gdGhhdCB0aGUgb3ZlcmZsb3cgY2hlY2sgaW4KKyAqIFxjIEluYWRlcXVhY3lMaXN0X19uZXdfY29uZmxpY3Qgd29ya3MgcHJvcGVybHkuCisgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBJbmFkZXF1YWN5TGlzdE5vZGVDb3VudDsKKworLyoqCisgKiBGb3IgYSBjb25mbGljdCwgZWFjaCBydWxlIGluIHRoZSBncmFtbWFyIGNhbiBoYXZlIGF0IG1vc3Qgb25lIGNvbnRyaWJ1dGluZworICogcmVkdWN0aW9uIGV4Y2VwdCB0aGF0IHJ1bGUgMCBjYW5ub3QgaGF2ZSBhbnkgYmVjYXVzZSB0aGUgcmVkdWN0aW9uIG9uIHJ1bGUgMAorICogY2Fubm90IGhhdmUgbG9va2FoZWFkcy4gIEZvciBhIGNvbmZsaWN0LCBleGFjdGx5IG9uZSBzaGlmdCBjYW4gY29udHJpYnV0ZS4KKyAqIFRodXMgdGhlIG51bWJlciBvZiBydWxlcyBpbiB0aGUgZ3JhbW1hciBpcyBhbiB1cHBlciBib3VuZCBvbiB0aGUgbnVtYmVyIG9mCisgKiBwb3NzaWJsZSBjb250cmlidXRpb25zIHRvIGFueSBjb25mbGljdC4gIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwb3NzaWJsZQorICogaXRlbXMgaW4gYSBzdGF0ZSBpcyBhbHNvIGFuIHVwcGVyIGJvdW5kLCBidXQgdGhlIFxjIG5pdGVtcyBtZW1iZXIgb2YgXGMKKyAqIHN0YXRlIGlzIGN1cnJlbnRseSBhIFxjIHNpemVfdCBhbmQgdGh1cywgaWYgY2hhbmdlZCwgcmlza3MgYmVjb21pbmcgb3V0IG9mCisgKiBzeW5jIHdpdGggdGhpcyB0eXBlLiAgV2hhdGV2ZXIgdGhlIHR5cGUsIGl0IG11c3Qgc3VwcG9ydCBuZWdhdGl2ZXMgZm9yIHNha2UKKyAqIG9mIHRoZSBzcGVjaWFsIHZhbHVlcyBiZWxvdy4KKyAqLwordHlwZWRlZiBydWxlX251bWJlciBDb250cmlidXRpb25JbmRleDsKKworLyogU3BlY2lhbCBcYyBDb250cmlidXRpb25JbmRleCB1c2VkIHRvIGluZGljYXRlIG51bGwgcmVzdWx0IHdoZW4gbG9va2luZyBmb3IgYQorICAgY29udHJpYnV0aW9uLiAgKi8KK2V4dGVybiBDb250cmlidXRpb25JbmRleCBjb25zdCBDb250cmlidXRpb25JbmRleF9fbm9uZTsKKworLyogU3BlY2lhbCBcYyBDb250cmlidXRpb25JbmRleCB1c2VkIGJ5CisgICBcYyBBbm5vdGF0aW9uTGlzdF9fY29tcHV0ZURvbWluYW50Q29udHJpYnV0aW9uIHRvIHNpZ25hbCB3aGVuIHRoZSBhY3Rpb24KKyAgIGNob3NlbiBpbiBhIGNvbmZsaWN0IGlzIGEgc3ludGF4IGVycm9yIGJlY2F1c2Ugb2YgYSAlbm9uYXNzb2MuICAqLworZXh0ZXJuIENvbnRyaWJ1dGlvbkluZGV4IGNvbnN0IENvbnRyaWJ1dGlvbkluZGV4X19lcnJvcl9hY3Rpb247CisKKy8qKgorICogVGhlIGRlc2NyaXB0aW9uIG9mIGEgY29uZmxpY3QuICBEb24ndCBicmVhayBlbmNhcHN1bGF0aW9uIGJ5IG1vZGlmeWluZyB0aGUKKyAqIGZpZWxkcyBkaXJlY3RseS4gIFVzZSB0aGUgcHJvdmlkZWQgaW50ZXJmYWNlIGZ1bmN0aW9ucyBmb3IKKyAqIFxjIEluYWRlcXVhY3lMaXN0LgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgIC8qKiBUaGUgXGMgdG9rZW4gcGFzc2VkIHRvIFxjIEluYWRlcXVhY3lMaXN0X19uZXdfY29uZmxpY3QuICAqLworICBzeW1ib2wgKnRva2VuOworICAvKiogVGhlIFxjIGFjdGlvbnMgcGFzc2VkIHRvIFxjIEluYWRlcXVhY3lMaXN0X19uZXdfY29uZmxpY3QuICAqLworICBiaXRzZXQgYWN0aW9uczsKK30gQ29uZmxpY3Q7CisKKy8qKgorICogQSBub2RlIGluIGEgbGlzdCB0aGF0IGRlc2NyaWJlcyBhbGwgdGhlIGluYWRlcXVhY2llcyB0aGF0IG1hbmlmZXN0IGluIGEKKyAqIHBhcnRpY3VsYXIgc3RhdGUuICBEb24ndCBicmVhayBlbmNhcHN1bGF0aW9uIGJ5IG1vZGlmeWluZyB0aGUgZmllbGRzCisgKiBkaXJlY3RseS4gIFVzZSB0aGUgcHJvdmlkZWQgaW50ZXJmYWNlIGZ1bmN0aW9ucy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSW5hZGVxdWFjeUxpc3QgeworICBzdHJ1Y3QgSW5hZGVxdWFjeUxpc3QgKm5leHQ7CisgIEluYWRlcXVhY3lMaXN0Tm9kZUNvdW50IGlkOworICBzdGF0ZSAqbWFuaWZlc3RpbmdTdGF0ZTsKKyAgQ29udHJpYnV0aW9uSW5kZXggY29udHJpYnV0aW9uQ291bnQ7CisgIHVuaW9uIHsKKyAgICBDb25mbGljdCBjb25mbGljdDsKKyAgfSBpbmFkZXF1YWN5OworfSBJbmFkZXF1YWN5TGlzdDsKKworLyoqCisgKiBccHJlCisgKiAgIC0gPHR0Pm1hbmlmZXN0aW5nX3N0YXRlICE9IE5VTEw8L3R0Pi4KKyAqICAgLSBcYyB0b2tlbiBpcyBhIHRva2VuLgorICogICAtIFRoZSBzaXplIG9mIFxjIGFjdGlvbnMgaXMKKyAqICAgICA8dHQ+bWFuaWZlc3Rpbmdfc3RhdGUtPnJlZHVjdGlvbnMtPm51bSArIDE8L3R0Pi4KKyAqICAgLSBJZiB0aGUgc2V0IG9mIGFsbCBcYyBJbmFkZXF1YWN5TGlzdCBub2RlcyB3aXRoIHdoaWNoIHRoZSBuZXcKKyAqICAgICBcYyBJbmFkZXF1YWN5TGlzdCBub2RlIG1pZ2h0IGJlIGNvbXBhcmVkIGlzIGN1cnJlbnRseSBlbXB0eSwgdGhlbgorICogICAgIGl0IGlzIGJlc3QgaWYgPHR0Pipub2RlX2NvdW50PC90PiBpcyB6ZXJvIHNvIHRoYXQgdGhlIG5vZGUgY291bnQKKyAqICAgICBkb2VzIG5vdCBldmVudHVhbGx5IG92ZXJmbG93LiAgSG93ZXZlciwgaWYgdGhhdCBzZXQgaXMgbm90CisgKiAgICAgY3VycmVudGx5IGVtcHR5LCB0aGVuIDx0dD4qbm9kZV9jb3VudDwvdHQ+IGhhcyBub3QgYmVlbiBtb2RpZmllZAorICogICAgIGJ5IGFueSBmdW5jdGlvbiBleGNlcHQgXGMgSW5hZGVxdWFjeUxpc3RfX25ld19jb25mbGljdCBzaW5jZSB0aGUKKyAqICAgICBpbnZvY2F0aW9uIG9mIFxjIEluYWRlcXVhY3lMaXN0X19uZXdfY29uZmxpY3QgdGhhdCBjb25zdHJ1Y3RlZAorICogICAgIHRoZSBmaXJzdCBleGlzdGluZyBtZW1iZXIgb2YgdGhhdCBzZXQuCisgKiBccG9zdAorICogICAtIFxjIHJlc3VsdCBpcyBhIG5ldyBcYyBJbmFkZXF1YWN5TGlzdCB3aXRoIG9uZSBub2RlIGluZGljYXRpbmcgdGhhdCwgaW4KKyAqICAgICBcYyBtYW5pZmVzdGluZ19zdGF0ZSwgdGhlIGZvbGxvd2luZyBhY3Rpb25zIGFyZSBpbiBjb25mbGljdCBvbiBcYyB0b2tlbjoKKyAqICAgICAtIFNoaWZ0IGlmZgorICogICAgICAgPHR0PmJpdHNldF90ZXN0IChhY3Rpb25zLCBtYW5pZmVzdGluZ19zdGF0ZS0+cmVkdWN0aW9ucy0+bnVtKTwvdHQ+LgorICogICAgIC0gRm9yIGFueSBcYyBpIHN1Y2ggdGhhdAorICogICAgICAgPHR0PjAgPD0gaSA8IG1hbmlmZXN0aW5nX3N0YXRlLT5yZWR1Y3Rpb25zLT5udW08L3R0PiwgdGhlIHJlZHVjdGlvbgorICogICAgICAgZm9yIHRoZSBydWxlIDx0dD5tYW5pZmVzdGluZ19zdGF0ZS0+cmVkdWN0aW9ucy0+cnVsZXNbaV08L3R0PiBpZmYKKyAqICAgICAgIDx0dD5hY3Rpb25zW2ldPC90dD4gaXMgc2V0LgorICogICAtIEdpdmVuIGFueSBub2RlIFxjIG4gZnJvbSB0aGUgc2V0IG9mIGFsbCBleGlzdGluZworICogICAgIFxjIEluYWRlcXVhY3lMaXN0IG5vZGVzIHdpdGggd2hpY2ggXGMgcmVzdWx0IG1pZ2h0IGJlIGNvbXBhcmVkCisgKiAgICAgc3VjaCB0aGF0IDx0dD5uICE9IHJlc3VsdDwvdHQ+LCB0aGVuIDx0dD5uLT5pZCA8IHJlc3VsdC0+aWQ8L3R0Pi4KKyAqICAgLSBcYyByZXN1bHQgYXNzdW1lcyByZXNwb25zaWJpbGl0eSBmb3IgdGhlIG1lbW9yeSBvZiBcYyBhY3Rpb25zLgorICovCitJbmFkZXF1YWN5TGlzdCAqSW5hZGVxdWFjeUxpc3RfX25ld19jb25mbGljdCAoCisgIHN0YXRlICptYW5pZmVzdGluZ19zdGF0ZSwgc3ltYm9sICp0b2tlbiwgYml0c2V0IGFjdGlvbnMsCisgIEluYWRlcXVhY3lMaXN0Tm9kZUNvdW50ICpub2RlX2NvdW50KTsKKworLyoqCisgKiBccG9zdAorICogICAtIEFsbCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGFsbCBub2RlcyBpbiB0aGUgbGlzdCBcYyBzZWxmIHdhcyBmcmVlZC4KKyAqLwordm9pZCBJbmFkZXF1YWN5TGlzdF9fZGVsZXRlIChJbmFkZXF1YWN5TGlzdCAqc2VsZik7CisKKy8qKgorICogXHByZQorICogICAtIDx0dD5zZWxmICE9IE5VTEw8L3R0Pi4KKyAqIFxwb3N0CisgKiAgIC0gXGMgcmVzdWx0ID0gZWl0aGVyOgorICogICAgIC0gXGMgQ29udHJpYnV0aW9uSW5kZXhfX25vbmUgaWZmIHRoZXJlIGlzIG5vIHNoaWZ0IGNvbnRyaWJ1dGlvbiBpbgorICogICAgICAgXGMgc2VsZiAocGVyaGFwcyBiZWNhdXNlIFxjIHNlbGYgaXNuJ3QgYSBjb25mbGljdCkuCisgKiAgICAgLSBUaGUgaW5kZXggb2YgdGhlIHNoaWZ0IGNvbnRyaWJ1dGlvbiwgb3RoZXJ3aXNlLgorICovCitDb250cmlidXRpb25JbmRleAorSW5hZGVxdWFjeUxpc3RfX2dldFNoaWZ0Q29udHJpYnV0aW9uSW5kZXggKEluYWRlcXVhY3lMaXN0IGNvbnN0ICpzZWxmKTsKKworLyoqCisgKiBccHJlCisgKiAgIC0gPHR0PnNlbGYgIT0gTlVMTDwvdHQ+LgorICogICAtIDx0dD4wIDw9IGkgPCBzZWxmLT5jb250cmlidXRpb25Db3VudDwvdHQ+LgorICogXHBvc3QKKyAqICAgLSBcYyByZXN1bHQgPSB0aGUgdG9rZW4gYXNzb2NpYXRlZCB3aXRoIGNvbnRyaWJ1dGlvbiBcYyBpIGluIHRoZQorICogICAgIGluYWRlcXVhY3kgZGVzY3JpYmVkIGJ5IHRoZSBub2RlIFxjIHNlbGYuCisgKi8KK3N5bWJvbCAqSW5hZGVxdWFjeUxpc3RfX2dldENvbnRyaWJ1dGlvblRva2VuIChJbmFkZXF1YWN5TGlzdCBjb25zdCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250cmlidXRpb25JbmRleCBpKTsKKworLyoqCisgKiBccHJlCisgKiAgIC0gXGMgc2VsZiBpcyBhIHNpbmdsZSBub2RlLgorICogICAtIDx0dD5saXN0ICE9IE5VTEw8L3R0Pi4KKyAqIFxwb3N0CisgKiAgIC0gXGMgbGlzdCBub3cgY29udGFpbnMgXGMgc2VsZiBhcyBpdHMgZmlyc3Qgbm9kZS4KKyAqICAgLSBcYyBsaXN0IGFzc3VtZXMgcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBtZW1vcnkgb2YgXGMgc2VsZi4KKyAqLwordm9pZCBJbmFkZXF1YWN5TGlzdF9fcHJlcGVuZFRvIChJbmFkZXF1YWN5TGlzdCAqc2VsZiwgSW5hZGVxdWFjeUxpc3QgKipsaXN0KTsKKworI2VuZGlmIC8qICFJTkFERVFVQUNZX0xJU1RfSF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9MUjAuYyBiL3NyYy9MUjAuYwppbmRleCAyNTliODkxLi4zN2JmZTgxIDEwMDY0NAotLS0gYS9zcmMvTFIwLmMKKysrIGIvc3JjL0xSMC5jCkBAIC0xLDI0ICsxLDIyIEBACi0vKiBHZW5lcmF0ZSB0aGUgbm9uZGV0ZXJtaW5pc3RpYyBmaW5pdGUgc3RhdGUgbWFjaGluZSBmb3IgQmlzb24uCisvKiBHZW5lcmF0ZSB0aGUgTFIoMCkgcGFyc2VyIHN0YXRlcyBmb3IgQmlzb24uCiAKLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4NiwgMTk4OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwNCwgMjAwNSBGcmVlCisgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODYsIDE5ODksIDIwMDAtMjAwMiwgMjAwNC0yMDA3LCAyMDA5LTIwMTIgRnJlZQogICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KIAotICAgQmlzb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCi0gICBCaXNvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggQmlzb247IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogCiAvKiBTZWUgY29tbWVudHMgaW4gc3RhdGUuaCBmb3IgdGhlIGRhdGEgc3RydWN0dXJlcyB0aGF0IHJlcHJlc2VudCBpdC4KQEAgLTI4LDcgKzI2LDYgQEAKICNpbmNsdWRlICJzeXN0ZW0uaCIKIAogI2luY2x1ZGUgPGJpdHNldC5oPgotI2luY2x1ZGUgPHF1b3RlYXJnLmg+CiAKICNpbmNsdWRlICJMUjAuaCIKICNpbmNsdWRlICJjbG9zdXJlLmgiCkBAIC0xNjksNiArMTY2LDEwIEBACiB8IHNoaWZ0ZWQuICBGb3IgZWFjaCBzeW1ib2wgaW4gdGhlIGdyYW1tYXIsIGtlcm5lbF9iYXNlW3N5bWJvbF0gIHwKIHwgcG9pbnRzIHRvIGEgdmVjdG9yIG9mIGl0ZW0gbnVtYmVycyBhY3RpdmF0ZWQgaWYgdGhhdCBzeW1ib2wgaXMgfAogfCBzaGlmdGVkLCBhbmQga2VybmVsX3NpemVbc3ltYm9sXSBpcyB0aGVpciBudW1iZXJzLiAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgaXRlbXNldCBpcyBzb3J0ZWQgb24gaXRlbSBpbmRleCBpbiByaXRlbSwgd2hpY2ggaXMgc29ydGVkIG9uICAgfAorfCBydWxlIG51bWJlci4gIENvbXB1dGUgZWFjaCBrZXJuZWxfYmFzZVtzeW1ib2xdIHdpdGggdGhlIHNhbWUgICB8Cit8IHNvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgdm9pZApAQCAtMTgzLDggKzE4NCw4IEBACiAKICAgbnNoaWZ0cyA9IDA7CiAKLSAgZm9yIChpID0gMDsgaSA8IG5yaXRlbXNldDsgKytpKQotICAgIGlmIChyaXRlbVtpdGVtc2V0W2ldXSA+PSAwKQorICBmb3IgKGkgPSAwOyBpIDwgbml0ZW1zZXQ7ICsraSkKKyAgICBpZiAoaXRlbV9udW1iZXJfaXNfc3ltYm9sX251bWJlciAocml0ZW1baXRlbXNldFtpXV0pKQogICAgICAgewogCXN5bWJvbF9udW1iZXIgc3ltID0gaXRlbV9udW1iZXJfYXNfc3ltYm9sX251bWJlciAocml0ZW1baXRlbXNldFtpXV0pOwogCWlmICgha2VybmVsX3NpemVbc3ltXSkKQEAgLTI3Miw3ICsyNzMsNyBAQAogICBzaXplX3QgaTsKIAogICAvKiBGaW5kIGFuZCBjb3VudCB0aGUgYWN0aXZlIGl0ZW1zIHRoYXQgcmVwcmVzZW50IGVuZHMgb2YgcnVsZXMuICovCi0gIGZvciAoaSA9IDA7IGkgPCBucml0ZW1zZXQ7ICsraSkKKyAgZm9yIChpID0gMDsgaSA8IG5pdGVtc2V0OyArK2kpCiAgICAgewogICAgICAgaXRlbV9udW1iZXIgaXRlbSA9IHJpdGVtW2l0ZW1zZXRbaV1dOwogICAgICAgaWYgKGl0ZW1fbnVtYmVyX2lzX3J1bGVfbnVtYmVyIChpdGVtKSkKQEAgLTI4Miw3ICsyODMsNyBAQAogCSAgaWYgKHIgPT0gMCkKIAkgICAgewogCSAgICAgIC8qIFRoaXMgaXMgInJlZHVjZSAwIiwgaS5lLiwgYWNjZXB0LiAqLwotCSAgICAgIGFzc2VydCAoIWZpbmFsX3N0YXRlKTsKKwkgICAgICBhdmVyICghZmluYWxfc3RhdGUpOwogCSAgICAgIGZpbmFsX3N0YXRlID0gczsKIAkgICAgfQogCX0KQEAgLTMyNyw4ICszMjgsOCBAQAogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgQ29tcHV0ZSB0aGUgbm9uZGV0ZXJtaW5pc3RpYyBmaW5pdGUgc3RhdGUgbWFjaGluZSAoc2VlIHN0YXRlLmggZm9yIHwKLXwgZGV0YWlscykgZnJvbSB0aGUgZ3JhbW1hci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgQ29tcHV0ZSB0aGUgTFIoMCkgcGFyc2VyIHN0YXRlcyAoc2VlIHN0YXRlLmggZm9yIGRldGFpbHMpIGZyb20gdGhlIHwKK3wgZ3JhbW1hci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogdm9pZApAQCAtMzUxLDEwICszNTIsOCBAQAogCWZwcmludGYgKHN0ZGVyciwgIlByb2Nlc3Npbmcgc3RhdGUgJWQgKHJlYWNoZWQgYnkgJXMpXG4iLAogCQkgcy0+bnVtYmVyLAogCQkgc3ltYm9sc1tzLT5hY2Nlc3Npbmdfc3ltYm9sXS0+dGFnKTsKLSAgICAgIC8qIFNldCB1cCBydWxlc2V0IGFuZCBpdGVtc2V0IGZvciB0aGUgdHJhbnNpdGlvbnMgb3V0IG9mIHRoaXMKLSAgICAgICAgIHN0YXRlLiAgcnVsZXNldCBnZXRzIGEgMSBiaXQgZm9yIGVhY2ggcnVsZSB0aGF0IGNvdWxkIHJlZHVjZQotICAgICAgICAgbm93LiAgaXRlbXNldCBnZXRzIGEgdmVjdG9yIG9mIGFsbCB0aGUgaXRlbXMgdGhhdCBjb3VsZCBiZQotICAgICAgICAgYWNjZXB0ZWQgbmV4dC4gICovCisgICAgICAvKiBTZXQgdXAgaXRlbXNldCBmb3IgdGhlIHRyYW5zaXRpb25zIG91dCBvZiB0aGlzIHN0YXRlLiAgaXRlbXNldCBnZXRzIGEKKyAgICAgICAgIHZlY3RvciBvZiBhbGwgdGhlIGl0ZW1zIHRoYXQgY291bGQgYmUgYWNjZXB0ZWQgbmV4dC4gICovCiAgICAgICBjbG9zdXJlIChzLT5pdGVtcywgcy0+bml0ZW1zKTsKICAgICAgIC8qIFJlY29yZCB0aGUgcmVkdWN0aW9ucyBhbGxvd2VkIG91dCBvZiB0aGlzIHN0YXRlLiAgKi8KICAgICAgIHNhdmVfcmVkdWN0aW9ucyAocyk7CmRpZmYgLS1naXQgYS9zcmMvTFIwLmggYi9zcmMvTFIwLmgKaW5kZXggNjAwNDUzOC4uNDVmOTIyYSAxMDA2NDQKLS0tIGEvc3JjL0xSMC5oCisrKyBiL3NyYy9MUjAuaApAQCAtMSwyMiArMSwyMiBAQAotLyogR2VuZXJhdGUgdGhlIG5vbmRldGVybWluaXN0aWMgZmluaXRlIHN0YXRlIG1hY2hpbmUgZm9yIGJpc29uLAotICAgQ29weXJpZ2h0IDE5ODQsIDE5ODYsIDE5ODksIDIwMDAsIDIwMDEsIDIwMDIgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLyogR2VuZXJhdGUgdGhlIExSKDApIHBhcnNlciBzdGF0ZXMgZm9yIEJpc29uLgorCisgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODYsIDE5ODksIDIwMDAtMjAwMiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4KIAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCiAKLSAgIEJpc29uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAotICAgQmlzb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIEJpc29uOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpZm5kZWYgTFIwX0hfCiAjIGRlZmluZSBMUjBfSF8KZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZSBiL3NyYy9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWViMWQ1Yi4uMDAwMDAwMAotLS0gYS9zcmMvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw2NTUgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjYgZnJvbSBNYWtlZmlsZS5hbS4KLSMgc3JjL01ha2VmaWxlLiAgR2VuZXJhdGVkIGZyb20gTWFrZWZpbGUuaW4gYnkgY29uZmlndXJlLgotCi0jIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKLSMgMjAwMywgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi0KLQotCi1zcmNkaXIgPSAuCi10b3Bfc3JjZGlyID0gLi4KLQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvYmlzb24KLXBrZ2xpYmRpciA9ICQobGliZGlyKS9iaXNvbgotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvYmlzb24KLXRvcF9idWlsZGRpciA9IC4uCi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1JTlNUQUxMID0gL3Vzci9iaW4vaW5zdGFsbCAtYwotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IHg4Nl82NC11bmtub3duLWxpbnV4LWdudQotaG9zdF90cmlwbGV0ID0geDg2XzY0LXVua25vd24tbGludXgtZ251Ci1iaW5fUFJPR1JBTVMgPSBiaXNvbiQoRVhFRVhUKQotc3ViZGlyID0gc3JjCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gcGFyc2UtZ3JhbS5jIFwKLQlzY2FuLWdyYW0uYyBzY2FuLXNrZWwuYwotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYmlzb24taTE4bi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jLXdvcmtpbmcubTQgJCh0b3Bfc3JjZGlyKS9tNC9jeHgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZGlybmFtZS5tNCAkKHRvcF9zcmNkaXIpL200L2RtYWxsb2MubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZG9zLm00ICQodG9wX3NyY2RpcikvbTQvZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZXhpdGZhaWwubTQgJCh0b3Bfc3JjZGlyKS9tNC9leHRlbnNpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dldG9wdC5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHRfZ2wubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ251bGliLm00ICQodG9wX3NyY2RpcikvbTQvaGFyZC1sb2NhbGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaGFzaC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzX2hfZ2wubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxkX2dsLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeF9nbC5tNCAkKHRvcF9zcmNkaXIpL200L200Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L21icnRvd2MubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYnN0YXRlX3QubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbWJzd2lkdGgubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvb2JzdGFjay5tNCAkKHRvcF9zcmNkaXIpL200L29uY2Vvbmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvX2dsLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcXVvdGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9xdW90ZWFyZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdGRib29sLm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50X2hfZ2wubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RkaW8tc2FmZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHBjcHkubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RyZHVwLm00ICQodG9wX3NyY2RpcikvbTQvc3RyZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RybmR1cC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cm5sZW4ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RydG9sLm00ICQodG9wX3NyY2RpcikvbTQvc3RydG91bC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdHJ2ZXJzY21wLm00ICQodG9wX3NyY2RpcikvbTQvc3VicGlwZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC90aW1ldmFyLm00ICQodG9wX3NyY2RpcikvbTQvdWludG1heF90X2dsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Vsb25nbG9uZ19nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGQtc2FmZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC91bmxvY2tlZC1pby5tNCAkKHRvcF9zcmNkaXIpL200L3dhcm5pbmcubTQgXAotCSQodG9wX3NyY2RpcikvbTQveGFsbG9jLm00ICQodG9wX3NyY2RpcikvbTQveHN0cm5kdXAubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLW1raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9ta2luc3RhbGxkaXJzCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGJpbmRpcikiICIkKERFU1RESVIpJChiaW5kaXIpIgotYmluUFJPR1JBTVNfSU5TVEFMTCA9ICQoSU5TVEFMTF9QUk9HUkFNKQotUFJPR1JBTVMgPSAkKGJpbl9QUk9HUkFNUykKLWFtX2Jpc29uX09CSkVDVFMgPSBMUjAuJChPQkpFWFQpIGFzc29jLiQoT0JKRVhUKSBjbG9zdXJlLiQoT0JKRVhUKSBcCi0JY29tcGxhaW4uJChPQkpFWFQpIGNvbmZsaWN0cy4kKE9CSkVYVCkgZGVyaXZlcy4kKE9CSkVYVCkgXAotCWZpbGVzLiQoT0JKRVhUKSBnZXRhcmdzLiQoT0JKRVhUKSBncmFtLiQoT0JKRVhUKSBcCi0JbGFsci4kKE9CSkVYVCkgbG9jYXRpb24uJChPQkpFWFQpIG1haW4uJChPQkpFWFQpIFwKLQltdXNjbGVfdGFiLiQoT0JKRVhUKSBudWxsYWJsZS4kKE9CSkVYVCkgb3V0cHV0LiQoT0JKRVhUKSBcCi0JcGFyc2UtZ3JhbS4kKE9CSkVYVCkgcHJpbnQuJChPQkpFWFQpIHByaW50X2dyYXBoLiQoT0JKRVhUKSBcCi0JcmVhZGVyLiQoT0JKRVhUKSByZWR1Y2UuJChPQkpFWFQpIHJlbGF0aW9uLiQoT0JKRVhUKSBcCi0Jc2Nhbi1ncmFtLWMuJChPQkpFWFQpIHNjYW4tc2tlbC1jLiQoT0JKRVhUKSBzdGF0ZS4kKE9CSkVYVCkgXAotCXN5bWxpc3QuJChPQkpFWFQpIHN5bXRhYi4kKE9CSkVYVCkgdGFibGVzLiQoT0JKRVhUKSBcCi0JdW5pcXN0ci4kKE9CSkVYVCkgdmNnLiQoT0JKRVhUKQotYmlzb25fT0JKRUNUUyA9ICQoYW1fYmlzb25fT0JKRUNUUykKLWJpc29uX0xEQUREID0gJChMREFERCkKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1iaXNvbl9ERVBFTkRFTkNJRVMgPSAuLi9saWIvbGliYmlzb24uYSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWJpblNDUklQVF9JTlNUQUxMID0gJChJTlNUQUxMX1NDUklQVCkKLVNDUklQVFMgPSAkKGJpbl9TQ1JJUFRTKQotREVGQVVMVF9JTkNMVURFUyA9IC1JLiAtSSQoc3JjZGlyKSAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1MRVhDT01QSUxFID0gJChMRVgpICQoTEZMQUdTKSAkKEFNX0xGTEFHUykKLVlMV1JBUCA9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3lsd3JhcAotWUFDQ0NPTVBJTEUgPSAkKFlBQ0MpICQoWUZMQUdTKSAkKEFNX1lGTEFHUykKLVNPVVJDRVMgPSAkKGJpc29uX1NPVVJDRVMpICQoRVhUUkFfYmlzb25fU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQoYmlzb25fU09VUkNFUykgJChFWFRSQV9iaXNvbl9TT1VSQ0VTKQotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFDTE9DQUwgPSAke1NIRUxMfSAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL2Jpc29uLTIuMy9idWlsZC1hdXgvbWlzc2luZyAtLXJ1biBhY2xvY2FsLTEuOQotQU1ERVBfRkFMU0UgPSAjCi1BTURFUF9UUlVFID0gCi1BTVRBUiA9ICR7U0hFTEx9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9taXNzaW5nIC0tcnVuIHRhcgotQVVUT0NPTkYgPSAke1NIRUxMfSAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL2Jpc29uLTIuMy9idWlsZC1hdXgvbWlzc2luZyAtLXJ1biBhdXRvY29uZgotQVVUT0hFQURFUiA9ICR7U0hFTEx9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9taXNzaW5nIC0tcnVuIGF1dG9oZWFkZXIKLUFVVE9NNFRFID0gJHtTSEVMTH0gL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC90b29scy9iaXNvbi0yLjMvYnVpbGQtYXV4L21pc3NpbmcgLS1ydW4gYXV0b200dGUKLUFVVE9NQUtFID0gJHtTSEVMTH0gL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC90b29scy9iaXNvbi0yLjMvYnVpbGQtYXV4L21pc3NpbmcgLS1ydW4gYXV0b21ha2UtMS45Ci1BV0sgPSBnYXdrCi1CSVNPTl9DWFhfV09SS1MgPSA6Ci1CSVNPTl9DWFhfV09SS1NfRkFMU0UgPSAjCi1CSVNPTl9DWFhfV09SS1NfVFJVRSA9IAotQklTT05fTE9DQUxFRElSID0gL3Vzci9zaGFyZS9sb2NhbGUKLUNDID0gZ2NjCi1DQ0RFUE1PREUgPSBkZXBtb2RlPWdjYzMKLUNGTEFHUyA9IC1nIC1PMgotQ1BQID0gZ2NjIC1FCi1DUFBGTEFHUyA9IAotQ1hYID0gZysrCi1DWFhERVBNT0RFID0gZGVwbW9kZT1nY2MzCi1DWFhGTEFHUyA9IC1nIC1PMgotQ1lHUEFUSF9XID0gZWNobwotREVGUyA9IC1ESEFWRV9DT05GSUdfSCAtRFBLR0RBVEFESVI9XCIkKHBrZ2RhdGFkaXIpXCIgXAotCS1ETE9DQUxFRElSPVwiJChkYXRhZGlyKS9sb2NhbGVcIgotREVQRElSID0gLmRlcHMKLUVDSE9fQyA9IAotRUNIT19OID0gLW4KLUVDSE9fVCA9IAotRUdSRVAgPSBncmVwIC1FCi1FWEVFWFQgPSAKLUdDQyA9IHllcwotR0VUT1BUX0ggPSAKLUdNU0dGTVQgPSAvdXNyL2Jpbi9tc2dmbXQKLUhBVkVfX0JPT0wgPSAxCi1JTlNUQUxMX0RBVEEgPSAke0lOU1RBTEx9IC1tIDY0NAotSU5TVEFMTF9QUk9HUkFNID0gJHtJTlNUQUxMfQotSU5TVEFMTF9TQ1JJUFQgPSAke0lOU1RBTEx9Ci1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSAke1NIRUxMfSAkKGluc3RhbGxfc2gpIC1jIC1zCi1JTlRMTElCUyA9IAotSU5UTF9NQUNPU1hfTElCUyA9IAotTERGTEFHUyA9IAotTEVYID0gZmxleAotTEVYTElCID0gLWxmbAotTEVYX09VVFBVVF9ST09UID0gbGV4Lnl5Ci1MSUJJQ09OViA9IC1saWNvbnYKLUxJQklOVEwgPSAKLUxJQk9CSlMgPSAgZGlybmFtZSRVLm8gZXhpdGZhaWwkVS5vIGhhcmQtbG9jYWxlJFUubyBoYXNoJFUubyBxdW90ZSRVLm8gcXVvdGVhcmckVS5vIGZvcGVuLXNhZmVyJFUubyBkdXAtc2FmZXIkVS5vIGZkLXNhZmVyJFUubyBwaXBlLXNhZmVyJFUubyB4bWFsbG9jJFUubwotTElCUyA9IAotTFRMSUJJQ09OViA9IC1saWNvbnYKLUxUTElCSU5UTCA9IAotTFRMSUJPQkpTID0gIGRpcm5hbWUkVS5sbyBleGl0ZmFpbCRVLmxvIGhhcmQtbG9jYWxlJFUubG8gaGFzaCRVLmxvIHF1b3RlJFUubG8gcXVvdGVhcmckVS5sbyBmb3Blbi1zYWZlciRVLmxvIGR1cC1zYWZlciRVLmxvIGZkLXNhZmVyJFUubG8gcGlwZS1zYWZlciRVLmxvIHhtYWxsb2MkVS5sbwotTTQgPSAvdXNyL2Jpbi9tNAotTUFLRUlORk8gPSAke1NIRUxMfSAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL2Jpc29uLTIuMy9idWlsZC1hdXgvbWlzc2luZyAtLXJ1biBtYWtlaW5mbwotTUtJTlNUQUxMRElSUyA9ICQodG9wX2J1aWxkZGlyKS9idWlsZC1hdXgvbWtpbnN0YWxsZGlycwotTVNHRk1UID0gL3Vzci9iaW4vbXNnZm10Ci1NU0dNRVJHRSA9IC91c3IvYmluL21zZ21lcmdlCi1PMENGTEFHUyA9IC1nIAotTzBDWFhGTEFHUyA9IC1nIAotT0JKRVhUID0gbwotUEFDS0FHRSA9IGJpc29uCi1QQUNLQUdFX0JVR1JFUE9SVCA9IGJ1Zy1iaXNvbkBnbnUub3JnCi1QQUNLQUdFX05BTUUgPSBHTlUgQmlzb24KLVBBQ0tBR0VfU1RSSU5HID0gR05VIEJpc29uIDIuMwotUEFDS0FHRV9UQVJOQU1FID0gYmlzb24KLVBBQ0tBR0VfVkVSU0lPTiA9IDIuMwotUEFUSF9TRVBBUkFUT1IgPSA6Ci1QT1NVQiA9IHBvCi1SQU5MSUIgPSByYW5saWIKLVNFVF9NQUtFID0gCi1TSEVMTCA9IC9iaW4vc2gKLVNUREJPT0xfSCA9IAotU1RSSVAgPSAKLVVOSVNURF9IID0gCi1VU0VfTkxTID0geWVzCi1WQUxHUklORCA9IAotVkVSU0lPTiA9IDIuMwotV0FSTklOR19DRkxBR1MgPSAKLVdBUk5JTkdfQ1hYRkxBR1MgPSAKLVdFUlJPUl9DRkxBR1MgPSAKLVhHRVRURVhUID0gL3Vzci9iaW4veGdldHRleHQKLQotIyBVc2Ugb3VyIG93biBCaXNvbiB0byBidWlsZCB0aGUgcGFyc2VyLiAgT2YgY291cnNlLCB5b3Ugb3VnaHQgdG8KLSMga2VlcCBhIHNhbmUgdmVyc2lvbiBvZiBCaXNvbiBuZWFyYnkuLi4KLVlBQ0MgPSAuLi90ZXN0cy9iaXNvbiAteQotWUFDQ19MSUJSQVJZID0gbGlieS5hCi1ZQUNDX1NDUklQVCA9IHlhY2MKLWFjX2N0X0NDID0gZ2NjCi1hY19jdF9DWFggPSBnKysKLWFjX2N0X1JBTkxJQiA9IHJhbmxpYgotYWNfY3RfU1RSSVAgPSAKLWFjbG9jYWxkaXIgPSAke2RhdGFkaXJ9L2FjbG9jYWwKLWFtX19mYXN0ZGVwQ0NfRkFMU0UgPSAjCi1hbV9fZmFzdGRlcENDX1RSVUUgPSAKLWFtX19mYXN0ZGVwQ1hYX0ZBTFNFID0gIwotYW1fX2Zhc3RkZXBDWFhfVFJVRSA9IAotYW1fX2luY2x1ZGUgPSBpbmNsdWRlCi1hbV9fbGVhZGluZ19kb3QgPSAuCi1hbV9fcXVvdGUgPSAKLWFtX190YXIgPSAke0FNVEFSfSBjaG9mIC0gIiQkdGFyZGlyIgotYW1fX3VudGFyID0gJHtBTVRBUn0geGYgLQotYmluZGlyID0gJHtleGVjX3ByZWZpeH0vYmluCi1idWlsZCA9IHg4Nl82NC11bmtub3duLWxpbnV4LWdudQotYnVpbGRfYWxpYXMgPSAKLWJ1aWxkX2NwdSA9IHg4Nl82NAotYnVpbGRfb3MgPSBsaW51eC1nbnUKLWJ1aWxkX3ZlbmRvciA9IHVua25vd24KLWRhdGFkaXIgPSAke3ByZWZpeH0vc2hhcmUKLWV4ZWNfcHJlZml4ID0gJHtwcmVmaXh9Ci1ob3N0ID0geDg2XzY0LXVua25vd24tbGludXgtZ251Ci1ob3N0X2FsaWFzID0gCi1ob3N0X2NwdSA9IHg4Nl82NAotaG9zdF9vcyA9IGxpbnV4LWdudQotaG9zdF92ZW5kb3IgPSB1bmtub3duCi1pbmNsdWRlZGlyID0gJHtwcmVmaXh9L2luY2x1ZGUKLWluZm9kaXIgPSAke3ByZWZpeH0vaW5mbwotaW5zdGFsbF9zaCA9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9pbnN0YWxsLXNoCi1saWJkaXIgPSAke2V4ZWNfcHJlZml4fS9saWIKLWxpYmV4ZWNkaXIgPSAke2V4ZWNfcHJlZml4fS9saWJleGVjCi1sb2NhbHN0YXRlZGlyID0gJHtwcmVmaXh9L3ZhcgotbWFuZGlyID0gJHtwcmVmaXh9L21hbgotbWtkaXJfcCA9IG1rZGlyIC1wIC0tCi1vbGRpbmNsdWRlZGlyID0gL3Vzci9pbmNsdWRlCi1wcmVmaXggPSAvaG9tZS9waGFubmEvc3JjL2Jpc29uCi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gcyx4LHgsCi1zYmluZGlyID0gJHtleGVjX3ByZWZpeH0vc2Jpbgotc2hhcmVkc3RhdGVkaXIgPSAke3ByZWZpeH0vY29tCi1zeXNjb25mZGlyID0gJHtwcmVmaXh9L2V0YwotdGFyZ2V0X2FsaWFzID0gCi1BTV9DRkxBR1MgPSAkKFdBUk5JTkdfQ0ZMQUdTKSAkKFdFUlJPUl9DRkxBR1MpCi1BTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9saWIgLUkuLi9saWIKLUFNX1lGTEFHUyA9ICItZHYiCi1MREFERCA9IC4uL2xpYi9saWJiaXNvbi5hICQoTElCSU5UTCkKLWJpbl9TQ1JJUFRTID0gJChZQUNDX1NDUklQVCkKLUVYVFJBX1NDUklQVFMgPSB5YWNjCi1iaXNvbl9TT1VSQ0VTID0gXAotCUxSMC5jIExSMC5oCQkJCSAgXAotCWFzc29jLmMgYXNzb2MuaAkJCQkgIFwKLQljbG9zdXJlLmMgY2xvc3VyZS5oCQkJICBcCi0JY29tcGxhaW4uYyBjb21wbGFpbi5oCQkJICBcCi0JY29uZmxpY3RzLmMgY29uZmxpY3RzLmgJCQkgIFwKLQlkZXJpdmVzLmMgZGVyaXZlcy5oCQkJICBcCi0JZmlsZXMuYyBmaWxlcy5oCQkJCSAgXAotCWdldGFyZ3MuYyBnZXRhcmdzLmgJCQkgIFwKLQlncmFtLmMgZ3JhbS5oCQkJCSAgXAotCWxhbHIuaCBsYWxyLmMJCQkJICBcCi0JbG9jYXRpb24uYyBsb2NhdGlvbi5oCQkJICBcCi0JbWFpbi5jCQkJCQkgIFwKLQltdXNjbGVfdGFiLmMgbXVzY2xlX3RhYi5oCQkgIFwKLQludWxsYWJsZS5jIG51bGxhYmxlLmgJCQkgIFwKLQlvdXRwdXQuYyBvdXRwdXQuaAkJCSAgXAotCXBhcnNlLWdyYW0uaCBwYXJzZS1ncmFtLnkJCSAgXAotCXByaW50LmMgcHJpbnQuaAkJCQkgIFwKLQlwcmludF9ncmFwaC5jIHByaW50X2dyYXBoLmgJCSAgXAotCXJlYWRlci5jIHJlYWRlci5oCQkJICBcCi0JcmVkdWNlLmMgcmVkdWNlLmgJCQkgIFwKLQlyZWxhdGlvbi5jIHJlbGF0aW9uLmgJCQkgIFwKLQlzY2FuLWdyYW0tYy5jCQkJCSAgXAotCXNjYW4tc2tlbC1jLmMgc2Nhbi1za2VsLmgJCSAgXAotCXN0YXRlLmMgc3RhdGUuaAkJCQkgIFwKLQlzeW1saXN0LmMgc3ltbGlzdC5oCQkJICBcCi0Jc3ltdGFiLmMgc3ltdGFiLmgJCQkgIFwKLQlzeXN0ZW0uaAkJCQkgIFwKLQl0YWJsZXMuaCB0YWJsZXMuYwkJCSAgXAotCXVuaXFzdHIuYyB1bmlxc3RyLmgJCQkgIFwKLQl2Y2cuYyB2Y2cuaAkJCQkgIFwKLQl2Y2dfZGVmYXVsdHMuaAotCi1FWFRSQV9iaXNvbl9TT1VSQ0VTID0gc2Nhbi1za2VsLmwgc2Nhbi1ncmFtLmwKLUJVSUxUX1NPVVJDRVMgPSBzY2FuLXNrZWwuYyBzY2FuLWdyYW0uYyBwYXJzZS1ncmFtLmMgcGFyc2UtZ3JhbS5oCi1NT1NUTFlDTEVBTkZJTEVTID0geWFjYwotYWxsOiAkKEJVSUxUX1NPVVJDRVMpCi0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmwgLm8gLm9iaiAueQotJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAotCQkmJiBleGl0IDA7IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251ICBzcmMvTWFrZWZpbGUnOyBcCi0JY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSAgc3JjL01ha2VmaWxlCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotaW5zdGFsbC1iaW5QUk9HUkFNUzogJChiaW5fUFJPR1JBTVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JdGVzdCAteiAiJChiaW5kaXIpIiB8fCAkKG1rZGlyX3ApICIkKERFU1RESVIpJChiaW5kaXIpIgotCUBsaXN0PSckKGJpbl9QUk9HUkFNUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIHAxPWBlY2hvICQkcHxzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCi0JICBpZiB0ZXN0IC1mICQkcCBcCi0JICA7IHRoZW4gXAotCSAgICBmPWBlY2hvICIkJHAxIiB8IHNlZCAncyxeLiovLCw7JCh0cmFuc2Zvcm0pO3MvJCQvJChFWEVFWFQpLydgOyBcCi0JICAgZWNobyAiICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChiaW5QUk9HUkFNU19JTlNUQUxMKSAnJCRwJyAnJChERVNURElSKSQoYmluZGlyKS8kJGYnIjsgXAotCSAgICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChiaW5QUk9HUkFNU19JTlNUQUxMKSAiJCRwIiAiJChERVNURElSKSQoYmluZGlyKS8kJGYiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmUKLQotdW5pbnN0YWxsLWJpblBST0dSQU1TOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQoYmluX1BST0dSQU1TKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgZj1gZWNobyAiJCRwIiB8IHNlZCAncyxeLiovLCw7cy8kKEVYRUVYVCkkJC8vOyQodHJhbnNmb3JtKTtzLyQkLyQoRVhFRVhUKS8nYDsgXAotCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChiaW5kaXIpLyQkZiciOyBcCi0JICBybSAtZiAiJChERVNURElSKSQoYmluZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1iaW5QUk9HUkFNUzoKLQktdGVzdCAteiAiJChiaW5fUFJPR1JBTVMpIiB8fCBybSAtZiAkKGJpbl9QUk9HUkFNUykKLWJpc29uJChFWEVFWFQpOiAkKGJpc29uX09CSkVDVFMpICQoYmlzb25fREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgYmlzb24kKEVYRUVYVCkKLQkkKExJTkspICQoYmlzb25fTERGTEFHUykgJChiaXNvbl9PQkpFQ1RTKSAkKGJpc29uX0xEQUREKSAkKExJQlMpCi1pbnN0YWxsLWJpblNDUklQVFM6ICQoYmluX1NDUklQVFMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JdGVzdCAteiAiJChiaW5kaXIpIiB8fCAkKG1rZGlyX3ApICIkKERFU1RESVIpJChiaW5kaXIpIgotCUBsaXN0PSckKGJpbl9TQ1JJUFRTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKLQkgIGlmIHRlc3QgLWYgJCRkJCRwOyB0aGVuIFwKLQkgICAgZj1gZWNobyAiJCRwIiB8IHNlZCAnc3xeLiovfHw7JCh0cmFuc2Zvcm0pJ2A7IFwKLQkgICAgZWNobyAiICQoYmluU0NSSVBUX0lOU1RBTEwpICckJGQkJHAnICckKERFU1RESVIpJChiaW5kaXIpLyQkZiciOyBcCi0JICAgICQoYmluU0NSSVBUX0lOU1RBTEwpICIkJGQkJHAiICIkKERFU1RESVIpJChiaW5kaXIpLyQkZiI7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQlkb25lCi0KLXVuaW5zdGFsbC1iaW5TQ1JJUFRTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQoYmluX1NDUklQVFMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBmPWBlY2hvICIkJHAiIHwgc2VkICdzfF4uKi98fDskKHRyYW5zZm9ybSknYDsgXAotCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChiaW5kaXIpLyQkZiciOyBcCi0JICBybSAtZiAiJChERVNURElSKSQoYmluZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1pbmNsdWRlIC4vJChERVBESVIpL0xSMC5QbwotaW5jbHVkZSAuLyQoREVQRElSKS9hc3NvYy5QbwotaW5jbHVkZSAuLyQoREVQRElSKS9jbG9zdXJlLlBvCi1pbmNsdWRlIC4vJChERVBESVIpL2NvbXBsYWluLlBvCi1pbmNsdWRlIC4vJChERVBESVIpL2NvbmZsaWN0cy5QbwotaW5jbHVkZSAuLyQoREVQRElSKS9kZXJpdmVzLlBvCi1pbmNsdWRlIC4vJChERVBESVIpL2ZpbGVzLlBvCi1pbmNsdWRlIC4vJChERVBESVIpL2dldGFyZ3MuUG8KLWluY2x1ZGUgLi8kKERFUERJUikvZ3JhbS5QbwotaW5jbHVkZSAuLyQoREVQRElSKS9sYWxyLlBvCi1pbmNsdWRlIC4vJChERVBESVIpL2xvY2F0aW9uLlBvCi1pbmNsdWRlIC4vJChERVBESVIpL21haW4uUG8KLWluY2x1ZGUgLi8kKERFUERJUikvbXVzY2xlX3RhYi5QbwotaW5jbHVkZSAuLyQoREVQRElSKS9udWxsYWJsZS5QbwotaW5jbHVkZSAuLyQoREVQRElSKS9vdXRwdXQuUG8KLWluY2x1ZGUgLi8kKERFUERJUikvcGFyc2UtZ3JhbS5QbwotaW5jbHVkZSAuLyQoREVQRElSKS9wcmludC5QbwotaW5jbHVkZSAuLyQoREVQRElSKS9wcmludF9ncmFwaC5QbwotaW5jbHVkZSAuLyQoREVQRElSKS9yZWFkZXIuUG8KLWluY2x1ZGUgLi8kKERFUERJUikvcmVkdWNlLlBvCi1pbmNsdWRlIC4vJChERVBESVIpL3JlbGF0aW9uLlBvCi1pbmNsdWRlIC4vJChERVBESVIpL3NjYW4tZ3JhbS1jLlBvCi1pbmNsdWRlIC4vJChERVBESVIpL3NjYW4tZ3JhbS5QbwotaW5jbHVkZSAuLyQoREVQRElSKS9zY2FuLXNrZWwtYy5QbwotaW5jbHVkZSAuLyQoREVQRElSKS9zY2FuLXNrZWwuUG8KLWluY2x1ZGUgLi8kKERFUERJUikvc3RhdGUuUG8KLWluY2x1ZGUgLi8kKERFUERJUikvc3ltbGlzdC5QbwotaW5jbHVkZSAuLyQoREVQRElSKS9zeW10YWIuUG8KLWluY2x1ZGUgLi8kKERFUERJUikvdGFibGVzLlBvCi1pbmNsdWRlIC4vJChERVBESVIpL3VuaXFzdHIuUG8KLWluY2x1ZGUgLi8kKERFUERJUikvdmNnLlBvCi0KLS5jLm86Ci0JaWYgJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAICQ8OyBcCi0JdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS8kKi5UcG8iOyBleGl0IDE7IGZpCi0jCXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gXAotIwlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIFwKLSMJJChDT01QSUxFKSAtYyAkPAotCi0uYy5vYmo6Ci0JaWYgJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2A7IFwKLQl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKLSMJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBcCi0jCURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgXAotIwkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmwuYzoKLQkkKFNIRUxMKSAkKFlMV1JBUCkgJDwgJChMRVhfT1VUUFVUX1JPT1QpLmMgJEAgLS0gJChMRVhDT01QSUxFKQotCi0ueS5jOgotCSQoWUFDQ0NPTVBJTEUpICQ8Ci0JaWYgdGVzdCAtZiB5LnRhYi5oOyB0aGVuIFwKLQkgIHRvPWBlY2hvICIkKl9IIiB8IHNlZCBcCi0gICAgICAgICAgICAgICAgLWUgJ3kvYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovJyBcCi0gICAgICAgICAgICAgICAgLWUgJ3MvW15BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl0vXy9nJ2A7IFwKLQkgIHNlZCAtZSAiL14jLyFiIiAtZSAicy9ZX1RBQl9ILyQkdG8vZyIgLWUgInN8eVwudGFiXC5ofCQqLmh8IiBcCi0gICAgICAgICAgICB5LnRhYi5oID4kKi5odDsgXAotCSAgcm0gLWYgeS50YWIuaDsgXAotCSAgaWYgY21wIC1zICQqLmh0ICQqLmg7IHRoZW4gXAotCSAgICBybSAtZiAkKi5odCA7XAotCSAgZWxzZSBcCi0JICAgIG12ICQqLmh0ICQqLmg7IFwKLQkgIGZpOyBcCi0JZmkKLQlpZiB0ZXN0IC1mIHkub3V0cHV0OyB0aGVuIFwKLQkgIG12IHkub3V0cHV0ICQqLm91dHB1dDsgXAotCWZpCi0Jc2VkICcvXiMvIHN8eVwudGFiXC5jfCRAfCcgeS50YWIuYyA+JEB0ICYmIG12ICRAdCAkQAotCXJtIC1mIHkudGFiLmMKLXVuaW5zdGFsbC1pbmZvLWFtOgotCi1JRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiBUQUdTCi0KLVRBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JdGFncz07IFwKLQloZXJlPWBwd2RgOyBcCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgJCR0YWdzICQkdW5pcXVlOyBcCi0JZmkKLWN0YWdzOiBDVEFHUwotQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JdGFncz07IFwKLQloZXJlPWBwd2RgOyBcCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHRhZ3MgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmIGNkICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAotCSAgY2FzZSAkJGZpbGUgaW4gXAotCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCi0JICBlc2FjOyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCi0JICAgIGRpcj0iLyQkZGlyIjsgXAotCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCi0JICBlbHNlIFwKLQkgICAgZGlyPScnOyBcCi0JICBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6ICQoQlVJTFRfU09VUkNFUykKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKSAkKFNDUklQVFMpCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChiaW5kaXIpIiAiJChERVNURElSKSQoYmluZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKG1rZGlyX3ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiAkKEJVSUxUX1NPVVJDRVMpCi0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKLQkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoTU9TVExZQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoTU9TVExZQ0xFQU5GSUxFUykKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotCS1ybSAtZiBwYXJzZS1ncmFtLmMKLQktcm0gLWYgc2Nhbi1ncmFtLmMKLQktcm0gLWYgc2Nhbi1za2VsLmMKLQktdGVzdCAteiAiJChCVUlMVF9TT1VSQ0VTKSIgfHwgcm0gLWYgJChCVUlMVF9TT1VSQ0VTKQotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1iaW5QUk9HUkFNUyBjbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtYmluUFJPR1JBTVMgaW5zdGFsbC1iaW5TQ1JJUFRTCi0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1iaW5QUk9HUkFNUyB1bmluc3RhbGwtYmluU0NSSVBUUyBcCi0JdW5pbnN0YWxsLWluZm8tYW0KLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWJpblBST0dSQU1TIFwKLQljbGVhbi1nZW5lcmljIGN0YWdzIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBcCi0JZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWJpblBST0dSQU1TIFwKLQlpbnN0YWxsLWJpblNDUklQVFMgaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCi0JdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1iaW5QUk9HUkFNUyBcCi0JdW5pbnN0YWxsLWJpblNDUklQVFMgdW5pbnN0YWxsLWluZm8tYW0KLQotCi15YWNjOgotCWVjaG8gJyMhIC9iaW4vc2gnID4kQAotCWVjaG8gJ2V4ZWMgJChiaW5kaXIpL2Jpc29uIC15ICIkJEAiJyA+PiRACi0JY2htb2QgYSt4ICRACi0KLWVjaG86Ci0JZWNobyAkKGJpc29uX1NPVVJDRVMpICQobm9pbnN0X0hFQURFUlMpCi0KLSMgVGhlIGZvbGxvd2luZyBydWxlIGlzIG5vdCBkZXNpZ25lZCB0byBiZSBwb3J0YWJsZSwKLSMgYW5kIHJlbGllcyBvbiB0b29scyB0aGF0IG5vdCBldmVyeW9uZSBoYXMuCi0KLSMgTW9zdCBmdW5jdGlvbnMgaW4gc3JjLyouYyBzaG91bGQgaGF2ZSBzdGF0aWMgc2NvcGUuCi0jIEFueSB0aGF0IGRvbid0IG11c3QgYmUgbWFya2VkIHdpdGggYGV4dGVybicsIGJ1dCBgbWFpbicKLSMgYW5kIGB1c2FnZScgYXJlIGV4Y2VwdGlvbnMuICBUaGV5J3JlIGFsd2F5cyBleHRlcm4sIGJ1dAotIyBkb24ndCBuZWVkIHRvIGJlIG1hcmtlZC4KLSMKLSMgVGhlIHNlY29uZCBubXxncmVwIGNoZWNrcyBmb3IgZmlsZS1zY29wZSB2YXJpYWJsZXMgd2l0aCBgZXh0ZXJuJyBzY29wZS4KLXNjX3RpZ2h0X3Njb3BlOiAkKGFsbF9wcm9ncmFtcykKLQlAdD1leGNlcHRpb25zLSQkJCQ7CQkJCQkJXAotCXRyYXAgJ3M9JCQ/OyBybSAtZiAkJHQ7IGV4aXQgJCRzJyAwIDEgMiAxMyAxNTsJCQlcCi0JKCBwcmludGYgJ15tYWluJCRcbl51c2FnZSQkXG4nOwkJCQkJXAotCSAgZ3JlcCAtaCAtQTEgJ15leHRlcm4gLipbXjtdJCQnICQoU09VUkNFUykJCQlcCi0JICAgIHwgZ3JlcCAtdkUgJ14oZXh0ZXJuIHwtLSknIHxzZWQgJ3MvXi9eLztzLyAuKi8kJC8nICkgPiAkJHQ7CVwKLQlpZiBubSAtZSAqLiQoT0JKRVhUKQkJCQkJCVwKLQkgICAgfCBzZWQgLW4gJ3MvLiogVCAvL3AnCQkJCQlcCi0JICAgIHwgZ3JlcCAtRXYgLWYgJCR0OyB0aGVuCQkJCQlcCi0JICBlY2hvICd0aGUgYWJvdmUgZnVuY3Rpb25zIHNob3VsZCBoYXZlIHN0YXRpYyBzY29wZScgMT4mMjsJXAotCSAgZXhpdCAxOwkJCQkJCQlcCi0JZmk7CQkJCQkJCQlcCi0JKCBwcmludGYgJ15wcm9ncmFtX25hbWUkJFxuJzsJCQkJCVwKLQkgIHNlZCAtbiAncy9eZXh0ZXJuIC4qWyogXVwoW2EtekEtWl9dW2EtekEtWl8wLTldKlwpOyQkL15cMSQkL3AnIFwKLQkgICAgJCQobHMgJChTT1VSQ0VTKSB8IGdyZXAgJ1wuaCQkJykgL2Rldi9udWxsKSA+ICQkdDsJCVwKLQlpZiBubSAtZSAqLiQoT0JKRVhUKQkJCQkJCVwKLQkgICAgfCBzZWQgLW4gJ3MvLiogW0JEXSAvL3AnCQkJCQlcCi0JICAgIHwgZ3JlcCAtRXYgLWYgJCR0OyB0aGVuCQkJCQlcCi0JICBlY2hvICd0aGUgYWJvdmUgdmFyaWFibGVzIHNob3VsZCBoYXZlIHN0YXRpYyBzY29wZScgMT4mMjsJXAotCSAgZXhpdCAxOwkJCQkJCQlcCi0JZmkKLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5hbSBiL3NyYy9NYWtlZmlsZS5hbQppbmRleCBjOTczZTllLi41MTFiOTA1IDEwMDY0NAotLS0gYS9zcmMvTWFrZWZpbGUuYW0KKysrIGIvc3JjL01ha2VmaWxlLmFtCkBAIC0xLDgyICsxLDg5IEBACi0jIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIE1ha2UgYmlzb24vc3JjLgogCi0jIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0jIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAKLSMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotIyMgMDIxMTAtMTMwMSAgVVNBCi0KLURFRlMgKz0gLURQS0dEQVRBRElSPVwiJChwa2dkYXRhZGlyKVwiIC1ETE9DQUxFRElSPVwiJChkYXRhZGlyKS9sb2NhbGVcIgotCi1BTV9DRkxBR1MgPSAkKFdBUk5JTkdfQ0ZMQUdTKSAkKFdFUlJPUl9DRkxBR1MpCi1BTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9saWIgLUkuLi9saWIKLUFNX1lGTEFHUyA9ICItZHYiCi0KLUxEQUREID0gLi4vbGliL2xpYmJpc29uLmEgJChMSUJJTlRMKQotCitBTV9DRkxBR1MgPSAkKFdBUk5fQ0ZMQUdTKSAkKFdFUlJPUl9DRkxBR1MpCitBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9saWIKK0JJU09OID0gLi4vdGVzdHMvYmlzb24KICMgVXNlIG91ciBvd24gQmlzb24gdG8gYnVpbGQgdGhlIHBhcnNlci4gIE9mIGNvdXJzZSwgeW91IG91Z2h0IHRvCiAjIGtlZXAgYSBzYW5lIHZlcnNpb24gb2YgQmlzb24gbmVhcmJ5Li4uCi1ZQUNDID0gLi4vdGVzdHMvYmlzb24gLXkKK1lBQ0MgPSAkKEJJU09OKSAteQorQU1fWUZMQUdTID0gLWQgLXYgLS13YXJuaW5ncz1hbGwsZXJyb3IgLS1yZXBvcnQ9YWxsCisKK0xEQUREID0gLi4vbGliL2xpYmJpc29uLmEgJChMSUJJTlRMKQogCiBiaW5fUFJPR1JBTVMgPSBiaXNvbgogYmluX1NDUklQVFMgPSAkKFlBQ0NfU0NSSVBUKQogRVhUUkFfU0NSSVBUUyA9IHlhY2MKIAotYmlzb25fU09VUkNFUyA9CQkJCQkgIFwKLQlMUjAuYyBMUjAuaAkJCQkgIFwKLQlhc3NvYy5jIGFzc29jLmgJCQkJICBcCi0JY2xvc3VyZS5jIGNsb3N1cmUuaAkJCSAgXAotCWNvbXBsYWluLmMgY29tcGxhaW4uaAkJCSAgXAotCWNvbmZsaWN0cy5jIGNvbmZsaWN0cy5oCQkJICBcCi0JZGVyaXZlcy5jIGRlcml2ZXMuaAkJCSAgXAotCWZpbGVzLmMgZmlsZXMuaAkJCQkgIFwKLQlnZXRhcmdzLmMgZ2V0YXJncy5oCQkJICBcCi0JZ3JhbS5jIGdyYW0uaAkJCQkgIFwKLQlsYWxyLmggbGFsci5jCQkJCSAgXAotCWxvY2F0aW9uLmMgbG9jYXRpb24uaAkJCSAgXAotCW1haW4uYwkJCQkJICBcCi0JbXVzY2xlX3RhYi5jIG11c2NsZV90YWIuaAkJICBcCi0JbnVsbGFibGUuYyBudWxsYWJsZS5oCQkJICBcCi0Jb3V0cHV0LmMgb3V0cHV0LmgJCQkgIFwKLQlwYXJzZS1ncmFtLmggcGFyc2UtZ3JhbS55CQkgIFwKLQlwcmludC5jIHByaW50LmgJCQkJICBcCi0JcHJpbnRfZ3JhcGguYyBwcmludF9ncmFwaC5oCQkgIFwKLQlyZWFkZXIuYyByZWFkZXIuaAkJCSAgXAotCXJlZHVjZS5jIHJlZHVjZS5oCQkJICBcCi0JcmVsYXRpb24uYyByZWxhdGlvbi5oCQkJICBcCi0Jc2Nhbi1ncmFtLWMuYwkJCQkgIFwKLQlzY2FuLXNrZWwtYy5jIHNjYW4tc2tlbC5oCQkgIFwKLQlzdGF0ZS5jIHN0YXRlLmgJCQkJICBcCi0Jc3ltbGlzdC5jIHN5bWxpc3QuaAkJCSAgXAotCXN5bXRhYi5jIHN5bXRhYi5oCQkJICBcCi0Jc3lzdGVtLmgJCQkJICBcCi0JdGFibGVzLmggdGFibGVzLmMJCQkgIFwKLQl1bmlxc3RyLmMgdW5pcXN0ci5oCQkJICBcCi0JdmNnLmMgdmNnLmgJCQkJICBcCi0JdmNnX2RlZmF1bHRzLmgKK2Jpc29uX1NPVVJDRVMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgQW5ub3RhdGlvbkxpc3QuYyBBbm5vdGF0aW9uTGlzdC5oICAgICAgICAgICAgIFwKKyAgSW5hZGVxdWFjeUxpc3QuYyBJbmFkZXF1YWN5TGlzdC5oICAgICAgICAgICAgIFwKKyAgTFIwLmMgTFIwLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgU2JpdHNldC5jIFNiaXRzZXQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgYXNzb2MuYyBhc3NvYy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY2xvc3VyZS5jIGNsb3N1cmUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY29tcGxhaW4uYyBjb21wbGFpbi5oICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY29uZmxpY3RzLmMgY29uZmxpY3RzLmggICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZGVyaXZlcy5jIGRlcml2ZXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZmlsZXMuYyBmaWxlcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZmxleC1zY2FubmVyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZ2V0YXJncy5jIGdldGFyZ3MuaCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZ3JhbS5jIGdyYW0uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgbGFsci5oIGxhbHIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWVsci5oIGllbHIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgbG9jYXRpb24uYyBsb2NhdGlvbi5oICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgbWFpbi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgbXVzY2xlLXRhYi5jIG11c2NsZS10YWIuaCAgICAgICAgICAgICAgICAgICAgIFwKKyAgbmFtZWQtcmVmLmMgbmFtZWQtcmVmLmggICAgICAgICAgICAgICAgICAgICAgIFwKKyAgbnVsbGFibGUuYyBudWxsYWJsZS5oICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgb3V0cHV0LmMgb3V0cHV0LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcGFyc2UtZ3JhbS55ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcHJpbnQuYyBwcmludC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcHJpbnRfZ3JhcGguYyBwcmludF9ncmFwaC5oICAgICAgICAgICAgICAgICAgIFwKKyAgcHJpbnQteG1sLmMgcHJpbnQteG1sLmggICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcmVhZGVyLmMgcmVhZGVyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcmVkdWNlLmMgcmVkdWNlLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcmVsYXRpb24uYyByZWxhdGlvbi5oICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgc2Nhbi1jb2RlLmggc2Nhbi1jb2RlLWMuYyAgICAgICAgICAgICAgICAgICAgIFwKKyAgc2Nhbi1ncmFtLmggc2Nhbi1ncmFtLWMuYyAgICAgICAgICAgICAgICAgICAgIFwKKyAgc2Nhbi1za2VsLmggc2Nhbi1za2VsLWMuYyAgICAgICAgICAgICAgICAgICAgIFwKKyAgc3RhdGUuYyBzdGF0ZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgc3ltbGlzdC5jIHN5bWxpc3QuaCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgc3ltdGFiLmMgc3ltdGFiLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgc3lzdGVtLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdGFibGVzLmggdGFibGVzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdW5pcXN0ci5jIHVuaXFzdHIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZ3JhcGh2aXouYyBncmFwaHZpei5oCiAKLUVYVFJBX2Jpc29uX1NPVVJDRVMgPSBzY2FuLXNrZWwubCBzY2FuLWdyYW0ubAorRVhUUkFfYmlzb25fU09VUkNFUyA9IHNjYW4tY29kZS5sIHNjYW4tc2tlbC5sIHNjYW4tZ3JhbS5sCiAKLUJVSUxUX1NPVVJDRVMgPSBzY2FuLXNrZWwuYyBzY2FuLWdyYW0uYyBwYXJzZS1ncmFtLmMgcGFyc2UtZ3JhbS5oCitCVUlMVF9TT1VSQ0VTID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHBhcnNlLWdyYW0uYyBwYXJzZS1ncmFtLmggICAgICAgICAgICAgICAgICAgICBcCisgIHNjYW4tY29kZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHNjYW4tc2tlbC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHNjYW4tZ3JhbS5jCiAKIE1PU1RMWUNMRUFORklMRVMgPSB5YWNjCiAKIHlhY2M6Ci0JZWNobyAnIyEgL2Jpbi9zaCcgPiRACi0JZWNobyAnZXhlYyAkKGJpbmRpcikvYmlzb24gLXkgIiQkQCInID4+JEAKLQljaG1vZCBhK3ggJEAKKwkkKEFNX1ZfR0VOKWVjaG8gJyMhIC9iaW4vc2gnID4kQAorCSQoQU1fVl9hdCllY2hvICJleGVjICckKGJpbmRpcikvYmlzb24nIC15ICInIiQkQCInID4+JEAKKwkkKEFNX1ZfYXQpY2htb2QgYSt4ICRACiAKLWVjaG86Ci0JZWNobyAkKGJpc29uX1NPVVJDRVMpICQobm9pbnN0X0hFQURFUlMpCiAKICMgVGhlIGZvbGxvd2luZyBydWxlIGlzIG5vdCBkZXNpZ25lZCB0byBiZSBwb3J0YWJsZSwKICMgYW5kIHJlbGllcyBvbiB0b29scyB0aGF0IG5vdCBldmVyeW9uZSBoYXMuCmRpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuaW4gYi9zcmMvTWFrZWZpbGUuaW4KaW5kZXggN2RlOTA4MS4uMzA0ZjJjZSAxMDA2NDQKLS0tIGEvc3JjL01ha2VmaWxlLmluCisrKyBiL3NyYy9NYWtlZmlsZS5pbgpAQCAtMSw4ICsxLDggQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuOS42IGZyb20gTWFrZWZpbGUuYW0uCisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEyLjUgZnJvbSBNYWtlZmlsZS5hbS4KICMgQGNvbmZpZ3VyZV9pbnB1dEAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCi0jIDIwMDMsIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwogIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgpAQCAtMTQsMTYgKzE0LDQ2IEBACiAKIEBTRVRfTUFLRUAKIAorIyBNYWtlIGJpc29uL3NyYy4KIAotc3JjZGlyID0gQHNyY2RpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKwogVlBBVEggPSBAc3JjZGlyQAorYW1fX21ha2VfZHJ5cnVuID0gXAorICB7IFwKKyAgICBhbV9fZHJ5PW5vOyBcCisgICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCisgICAgICAqXFxbXCBcCV0qKSBcCisgICAgICAgIGVjaG8gJ2FtLS1lY2hvOiA7IEBlY2hvICJBTSIgIE9LJyB8ICQoTUFLRSkgLWYgLSAyPi9kZXYvbnVsbCBcCisgICAgICAgICAgfCBncmVwICdeQU0gT0skJCcgPi9kZXYvbnVsbCB8fCBhbV9fZHJ5PXllczs7IFwKKyAgICAgICopIFwKKyAgICAgICAgZm9yIGFtX19mbGcgaW4gJCRNQUtFRkxBR1M7IGRvIFwKKyAgICAgICAgICBjYXNlICQkYW1fX2ZsZyBpbiBcCisgICAgICAgICAgICAqPSp8LS0qKSA7OyBcCisgICAgICAgICAgICAqbiopIGFtX19kcnk9eWVzOyBicmVhazs7IFwKKyAgICAgICAgICBlc2FjOyBcCisgICAgICAgIGRvbmU7OyBcCisgICAgZXNhYzsgXAorICAgIHRlc3QgJCRhbV9fZHJ5ID0geWVzOyBcCisgIH0KIHBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAogcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi10b3BfYnVpbGRkaXIgPSAuLgorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAogYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotSU5TVEFMTCA9IEBJTlNUQUxMQAogaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKIGluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKIGluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwpAQCAtMzksMTcxICs2OSwxMzA1IEBACiBob3N0X3RyaXBsZXQgPSBAaG9zdEAKIGJpbl9QUk9HUkFNUyA9IGJpc29uJChFWEVFWFQpCiBzdWJkaXIgPSBzcmMKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbiBwYXJzZS1ncmFtLmMgXAotCXNjYW4tZ3JhbS5jIHNjYW4tc2tlbC5jCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gXAorCSQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2RlcGNvbXAgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgveWx3cmFwIFwKKwlwYXJzZS1ncmFtLmMgcGFyc2UtZ3JhbS5oIHNjYW4tY29kZS5jIHNjYW4tZ3JhbS5jIHNjYW4tc2tlbC5jCiBBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaXNvbi1pMThuLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2Mtd29ya2luZy5tNCAkKHRvcF9zcmNkaXIpL200L2N4eC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9kaXJuYW1lLm00ICQodG9wX3NyY2RpcikvbTQvZG1hbGxvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9kb3MubTQgJCh0b3Bfc3JjZGlyKS9tNC9lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9leGl0ZmFpbC5tNCAkKHRvcF9zcmNkaXIpL200L2V4dGVuc2lvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ2V0b3B0Lm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dF9nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9oYXJkLWxvY2FsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9oYXNoLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaF9nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGRfZ2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4X2dsLm00ICQodG9wX3NyY2RpcikvbTQvbTQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbWJydG93Yy5tNCAkKHRvcF9zcmNkaXIpL200L21ic3RhdGVfdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9tYnN3aWR0aC5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9vYnN0YWNrLm00ICQodG9wX3NyY2RpcikvbTQvb25jZW9ubHkubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG9fZ2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC8wMGdudWxpYi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9hbGxvY2EubTQgJCh0b3Bfc3JjZGlyKS9tNC9hc20tdW5kZXJzY29yZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9hc3NlcnQubTQgJCh0b3Bfc3JjZGlyKS9tNC9iaXNvbi1pMThuLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Mtd29ya2luZy5tNCAkKHRvcF9zcmNkaXIpL200L2NhbGxvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZS1zdHJlYW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZW91dC5tNCAkKHRvcF9zcmNkaXIpL200L2NvZGVzZXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29uZmlnLWgubTQgJCh0b3Bfc3JjZGlyKS9tNC9jb25maWdtYWtlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N4eC5tNCAkKHRvcF9zcmNkaXIpL200L2Rpcm5hbWUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZG1hbGxvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9kb3VibGUtc2xhc2gtcm9vdC5tNCAkKHRvcF9zcmNkaXIpL200L2R1cDIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZW52aXJvbi5tNCAkKHRvcF9zcmNkaXIpL200L2Vycm5vX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXJyb3IubTQgJCh0b3Bfc3JjZGlyKS9tNC9leHBvbmVudGQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXhwb25lbnRmLm00ICQodG9wX3NyY2RpcikvbTQvZXhwb25lbnRsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2V4dGVuc2lvbnMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXh0ZXJuLWlubGluZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mYXRhbC1zaWduYWwubTQgJCh0b3Bfc3JjZGlyKS9tNC9mY250bC1vLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZjbnRsLm00ICQodG9wX3NyY2RpcikvbTQvZmNudGxfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mbGV4Lm00ICQodG9wX3NyY2RpcikvbTQvZmxvYXRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mb3Blbi5tNCAkKHRvcF9zcmNkaXIpL200L2ZwZW5kaW5nLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZwaWVlZS5tNCAkKHRvcF9zcmNkaXIpL200L2ZwcmludGYtcG9zaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZnJleHAubTQgJCh0b3Bfc3JjZGlyKS9tNC9mcmV4cGwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZnNldGVyci5tNCAkKHRvcF9zcmNkaXIpL200L2ZzdGF0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dldGRlbGltLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0ZHRhYmxlc2l6ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nZXRsaW5lLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0b3B0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgJCh0b3Bfc3JjZGlyKS9tNC9nbGliYzIxLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dudWxpYi1jb21tb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ251bGliLWNvbXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbmNsdWRlX25leHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2ludG1heF90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzLXByaS5tNCAkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9pc25hbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pc25hbmQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pc25hbmYubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaXNuYW5sLm00ICQodG9wX3NyY2RpcikvbTQvaXN3YmxhbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvamF2YWNvbXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9qYXZhZXhlYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sYXJnZWZpbGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9sZGV4cC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sZGV4cGwubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYnVuaXN0cmluZy1iYXNlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvY2FsY2hhcnNldC5tNCAkKHRvcF9zcmNkaXIpL200L2xvY2FsZS1mci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sb2NhbGUtamEubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb2NhbGUtemgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9jay5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L200Lm00ICQodG9wX3NyY2RpcikvbTQvbWFsbG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21hdGhfaC5tNCAkKHRvcF9zcmNkaXIpL200L21iY2hhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYml0ZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYnJ0b3djLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21ic2luaXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYnN0YXRlX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWJzd2lkdGgubTQgJCh0b3Bfc3JjZGlyKS9tNC9tZW1jaHIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbW1hcC1hbm9uLm00ICQodG9wX3NyY2RpcikvbTQvbW9kZV90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21zdmMtaW52YWwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbXN2Yy1ub3Rocm93Lm00ICQodG9wX3NyY2RpcikvbTQvbXVsdGlhcmNoLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L25scy5tNCAkKHRvcF9zcmNkaXIpL200L25vY3Jhc2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvb2JzdGFjay1wcmludGYubTQgJCh0b3Bfc3JjZGlyKS9tNC9vZmZfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9vcGVuLm00ICQodG9wX3NyY2RpcikvbTQvcGF0aG1heC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wZXJyb3IubTQgJCh0b3Bfc3JjZGlyKS9tNC9waXBlMi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Bvc2l4X3NwYXduLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ByaW50Zi1mcmV4cC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcmludGYtZnJleHBsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ByaW50Zi1wb3NpeC1ycGwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJpbnRmLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAogCSQodG9wX3NyY2RpcikvbTQvcXVvdGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9xdW90ZWFyZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdGRib29sLm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50X2hfZ2wubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RkaW8tc2FmZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHBjcHkubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmFpc2UubTQgJCh0b3Bfc3JjZGlyKS9tNC9yYXdtZW1jaHIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmVhbGxvYy5tNCAkKHRvcF9zcmNkaXIpL200L3NjaGVkX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc2V0ZW52Lm00ICQodG9wX3NyY2RpcikvbTQvc2lnX2F0b21pY190Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NpZ2FjdGlvbi5tNCAkKHRvcF9zcmNkaXIpL200L3NpZ25hbF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NpZ25hbGJsb2NraW5nLm00ICQodG9wX3NyY2RpcikvbTQvc2lnbmJpdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zaXplX21heC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zbnByaW50Zi1wb3NpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zbnByaW50Zi5tNCAkKHRvcF9zcmNkaXIpL200L3NwYXduLXBpcGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3Bhd25faC5tNCAkKHRvcF9zcmNkaXIpL200L3NwcmludGYtcG9zaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3NpemVfdC5tNCAkKHRvcF9zcmNkaXIpL200L3N0YXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RkYm9vbC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGRlZl9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGludC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGlvX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRsaWJfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHBjcHkubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJjaHJudWwubTQgXAogCSQodG9wX3NyY2RpcikvbTQvc3RyZHVwLm00ICQodG9wX3NyY2RpcikvbTQvc3RyZXJyb3IubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RyZXJyb3Jfci5tNCAkKHRvcF9zcmNkaXIpL200L3N0cmluZ19oLm00IFwKIAkkKHRvcF9zcmNkaXIpL200L3N0cm5kdXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJubGVuLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3N0cnRvbC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cnRvdWwubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RydmVyc2NtcC5tNCAkKHRvcF9zcmNkaXIpL200L3N1YnBpcGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvdGltZXZhci5tNCAkKHRvcF9zcmNkaXIpL200L3VpbnRtYXhfdF9nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC91bG9uZ2xvbmdfZ2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RydG91bC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cnZlcnNjbXAubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3lzX3NvY2tldF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N5c19zdGF0X2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zeXNfdHlwZXNfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zeXNfd2FpdF9oLm00ICQodG9wX3NyY2RpcikvbTQvdGhyZWFkbGliLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3RpbWVfaC5tNCAkKHRvcF9zcmNkaXIpL200L3RpbWV2YXIubTQgXAogCSQodG9wX3NyY2RpcikvbTQvdW5pc3RkLXNhZmVyLm00ICQodG9wX3NyY2RpcikvbTQvdW5pc3RkX2gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvdW5sb2NrZWQtaW8ubTQgJCh0b3Bfc3JjZGlyKS9tNC93YXJuaW5nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3hhbGxvYy5tNCAkKHRvcF9zcmNkaXIpL200L3hzdHJuZHVwLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3VubG9ja2VkLWlvLm00ICQodG9wX3NyY2RpcikvbTQvdmFzbnByaW50Zi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC92ZnByaW50Zi1wb3NpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC92c25wcmludGYtcG9zaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdnNucHJpbnRmLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ZzcHJpbnRmLXBvc2l4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3dhaXQtcHJvY2Vzcy5tNCAkKHRvcF9zcmNkaXIpL200L3dhaXRwaWQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2Fybi1vbi11c2UubTQgJCh0b3Bfc3JjZGlyKS9tNC93YXJuaW5ncy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93Y2hhcl9oLm00ICQodG9wX3NyY2RpcikvbTQvd2NoYXJfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93Y3R5cGVfaC5tNCAkKHRvcF9zcmNkaXIpL200L3djd2lkdGgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2ludF90Lm00ICQodG9wX3NyY2RpcikvbTQveGFsbG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3hzaXplLm00ICQodG9wX3NyY2RpcikvbTQveHN0cm5kdXAubTQgXAogCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCiBhbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAogCSQoQUNMT0NBTF9NNCkKLW1raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9ta2luc3RhbGxkaXJzCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmgKIENPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQogYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGJpbmRpcikiICIkKERFU1RESVIpJChiaW5kaXIpIgotYmluUFJPR1JBTVNfSU5TVEFMTCA9ICQoSU5TVEFMTF9QUk9HUkFNKQogUFJPR1JBTVMgPSAkKGJpbl9QUk9HUkFNUykKLWFtX2Jpc29uX09CSkVDVFMgPSBMUjAuJChPQkpFWFQpIGFzc29jLiQoT0JKRVhUKSBjbG9zdXJlLiQoT0JKRVhUKSBcCi0JY29tcGxhaW4uJChPQkpFWFQpIGNvbmZsaWN0cy4kKE9CSkVYVCkgZGVyaXZlcy4kKE9CSkVYVCkgXAotCWZpbGVzLiQoT0JKRVhUKSBnZXRhcmdzLiQoT0JKRVhUKSBncmFtLiQoT0JKRVhUKSBcCi0JbGFsci4kKE9CSkVYVCkgbG9jYXRpb24uJChPQkpFWFQpIG1haW4uJChPQkpFWFQpIFwKLQltdXNjbGVfdGFiLiQoT0JKRVhUKSBudWxsYWJsZS4kKE9CSkVYVCkgb3V0cHV0LiQoT0JKRVhUKSBcCithbV9iaXNvbl9PQkpFQ1RTID0gQW5ub3RhdGlvbkxpc3QuJChPQkpFWFQpIEluYWRlcXVhY3lMaXN0LiQoT0JKRVhUKSBcCisJTFIwLiQoT0JKRVhUKSBTYml0c2V0LiQoT0JKRVhUKSBhc3NvYy4kKE9CSkVYVCkgXAorCWNsb3N1cmUuJChPQkpFWFQpIGNvbXBsYWluLiQoT0JKRVhUKSBjb25mbGljdHMuJChPQkpFWFQpIFwKKwlkZXJpdmVzLiQoT0JKRVhUKSBmaWxlcy4kKE9CSkVYVCkgZ2V0YXJncy4kKE9CSkVYVCkgXAorCWdyYW0uJChPQkpFWFQpIGxhbHIuJChPQkpFWFQpIGllbHIuJChPQkpFWFQpIFwKKwlsb2NhdGlvbi4kKE9CSkVYVCkgbWFpbi4kKE9CSkVYVCkgbXVzY2xlLXRhYi4kKE9CSkVYVCkgXAorCW5hbWVkLXJlZi4kKE9CSkVYVCkgbnVsbGFibGUuJChPQkpFWFQpIG91dHB1dC4kKE9CSkVYVCkgXAogCXBhcnNlLWdyYW0uJChPQkpFWFQpIHByaW50LiQoT0JKRVhUKSBwcmludF9ncmFwaC4kKE9CSkVYVCkgXAotCXJlYWRlci4kKE9CSkVYVCkgcmVkdWNlLiQoT0JKRVhUKSByZWxhdGlvbi4kKE9CSkVYVCkgXAotCXNjYW4tZ3JhbS1jLiQoT0JKRVhUKSBzY2FuLXNrZWwtYy4kKE9CSkVYVCkgc3RhdGUuJChPQkpFWFQpIFwKLQlzeW1saXN0LiQoT0JKRVhUKSBzeW10YWIuJChPQkpFWFQpIHRhYmxlcy4kKE9CSkVYVCkgXAotCXVuaXFzdHIuJChPQkpFWFQpIHZjZy4kKE9CSkVYVCkKKwlwcmludC14bWwuJChPQkpFWFQpIHJlYWRlci4kKE9CSkVYVCkgcmVkdWNlLiQoT0JKRVhUKSBcCisJcmVsYXRpb24uJChPQkpFWFQpIHNjYW4tY29kZS1jLiQoT0JKRVhUKSBzY2FuLWdyYW0tYy4kKE9CSkVYVCkgXAorCXNjYW4tc2tlbC1jLiQoT0JKRVhUKSBzdGF0ZS4kKE9CSkVYVCkgc3ltbGlzdC4kKE9CSkVYVCkgXAorCXN5bXRhYi4kKE9CSkVYVCkgdGFibGVzLiQoT0JKRVhUKSB1bmlxc3RyLiQoT0JKRVhUKSBcCisJZ3JhcGh2aXouJChPQkpFWFQpCiBiaXNvbl9PQkpFQ1RTID0gJChhbV9iaXNvbl9PQkpFQ1RTKQogYmlzb25fTERBREQgPSAkKExEQUREKQogYW1fX0RFUEVOREVOQ0lFU18xID0KIGJpc29uX0RFUEVOREVOQ0lFUyA9IC4uL2xpYi9saWJiaXNvbi5hICQoYW1fX0RFUEVOREVOQ0lFU18xKQotYmluU0NSSVBUX0lOU1RBTEwgPSAkKElOU1RBTExfU0NSSVBUKQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAorICB0ZXN0IC16ICIkJGZpbGVzIiBcCisgICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCisgICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAorICB9CiBTQ1JJUFRTID0gJChiaW5fU0NSSVBUUykKLURFRkFVTFRfSU5DTFVERVMgPSAtSS4gLUkkKHNyY2RpcikgLUkkKHRvcF9idWlsZGRpcikKK0FNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCithbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKK2FtX192X1BfMCA9IGZhbHNlCithbV9fdl9QXzEgPSA6CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOworYW1fX3ZfR0VOXzEgPSAKK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9hdF8wID0gQAorYW1fX3ZfYXRfMSA9IAorREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikvbGliCiBkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvZGVwY29tcAogYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCiBDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKIAkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitBTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCithbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKK2FtX192X0NDXzEgPSAKIENDTEQgPSAkKENDKQogTElOSyA9ICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUxFWENPTVBJTEUgPSAkKExFWCkgJChMRkxBR1MpICQoQU1fTEZMQUdTKQorQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKK2FtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOworYW1fX3ZfQ0NMRF8xID0gCitMRVhDT01QSUxFID0gJChMRVgpICQoQU1fTEZMQUdTKSAkKExGTEFHUykKK0FNX1ZfTEVYID0gJChhbV9fdl9MRVhfQEFNX1ZAKQorYW1fX3ZfTEVYXyA9ICQoYW1fX3ZfTEVYX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfTEVYXzAgPSBAZWNobyAiICBMRVggICAgICIgJEA7CithbV9fdl9MRVhfMSA9IAogWUxXUkFQID0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgveWx3cmFwCi1ZQUNDQ09NUElMRSA9ICQoWUFDQykgJChZRkxBR1MpICQoQU1fWUZMQUdTKQorYW1fX3lhY2NfYzJoID0gc2VkIC1lIHMvY2MkJC9oaC8gLWUgcy9jcHAkJC9ocHAvIC1lIHMvY3h4JCQvaHh4LyBcCisJCSAgIC1lIHMvYysrJCQvaCsrLyAtZSBzL2MkJC9oLworWUFDQ0NPTVBJTEUgPSAkKFlBQ0MpICQoQU1fWUZMQUdTKSAkKFlGTEFHUykKK0FNX1ZfWUFDQyA9ICQoYW1fX3ZfWUFDQ19AQU1fVkApCithbV9fdl9ZQUNDXyA9ICQoYW1fX3ZfWUFDQ19AQU1fREVGQVVMVF9WQCkKK2FtX192X1lBQ0NfMCA9IEBlY2hvICIgIFlBQ0MgICAgIiAkQDsKK2FtX192X1lBQ0NfMSA9IAogU09VUkNFUyA9ICQoYmlzb25fU09VUkNFUykgJChFWFRSQV9iaXNvbl9TT1VSQ0VTKQogRElTVF9TT1VSQ0VTID0gJChiaXNvbl9TT1VSQ0VTKSAkKEVYVFJBX2Jpc29uX1NPVVJDRVMpCithbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKKyAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCisgICAgbnxub3xOTykgZmFsc2U7OyBcCisgICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKKyAgZXNhYwogRVRBR1MgPSBldGFncwogQ1RBR1MgPSBjdGFncwogRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK3BrZ2xpYmV4ZWNkaXIgPSBAcGtnbGliZXhlY2RpckAKIEFDTE9DQUwgPSBAQUNMT0NBTEAKLUFNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAotQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAorQUxMT0NBID0gQEFMTE9DQUAKK0FMTE9DQV9IID0gQEFMTE9DQV9IQAogQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FQUExFX1VOSVZFUlNBTF9CVUlMRCA9IEBBUFBMRV9VTklWRVJTQUxfQlVJTERACitBUiA9IEBBUkAKK0FSRkxBR1MgPSBAQVJGTEFHU0AKK0FTTV9TWU1CT0xfUFJFRklYID0gQEFTTV9TWU1CT0xfUFJFRklYQAogQVVUT0NPTkYgPSBAQVVUT0NPTkZACiBBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACiBBVVRPTTRURSA9IEBBVVRPTTRURUAKIEFVVE9NQUtFID0gQEFVVE9NQUtFQAogQVdLID0gQEFXS0AKIEJJU09OX0NYWF9XT1JLUyA9IEBCSVNPTl9DWFhfV09SS1NACi1CSVNPTl9DWFhfV09SS1NfRkFMU0UgPSBAQklTT05fQ1hYX1dPUktTX0ZBTFNFQAotQklTT05fQ1hYX1dPUktTX1RSVUUgPSBAQklTT05fQ1hYX1dPUktTX1RSVUVACitCSVNPTl9DX1dPUktTID0gQEJJU09OX0NfV09SS1NACiBCSVNPTl9MT0NBTEVESVIgPSBAQklTT05fTE9DQUxFRElSQAorQklUU0laRU9GX1BUUkRJRkZfVCA9IEBCSVRTSVpFT0ZfUFRSRElGRl9UQAorQklUU0laRU9GX1NJR19BVE9NSUNfVCA9IEBCSVRTSVpFT0ZfU0lHX0FUT01JQ19UQAorQklUU0laRU9GX1NJWkVfVCA9IEBCSVRTSVpFT0ZfU0laRV9UQAorQklUU0laRU9GX1dDSEFSX1QgPSBAQklUU0laRU9GX1dDSEFSX1RACitCSVRTSVpFT0ZfV0lOVF9UID0gQEJJVFNJWkVPRl9XSU5UX1RACiBDQyA9IEBDQ0AKIENDREVQTU9ERSA9IEBDQ0RFUE1PREVACiBDRkxBR1MgPSBAQ0ZMQUdTQAorQ0xBU1NQQVRIID0gQENMQVNTUEFUSEAKK0NMQVNTUEFUSF9TRVBBUkFUT1IgPSBAQ0xBU1NQQVRIX1NFUEFSQVRPUkAKK0NPTkZJR19JTkNMVURFID0gQENPTkZJR19JTkNMVURFQAorQ09ORl9KQVZBID0gQENPTkZfSkFWQUAKK0NPTkZfSkFWQUMgPSBAQ09ORl9KQVZBQ0AKIENQUCA9IEBDUFBACiBDUFBGTEFHUyA9IEBDUFBGTEFHU0AKIENYWCA9IEBDWFhACiBDWFhERVBNT0RFID0gQENYWERFUE1PREVACiBDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NYWF9DT01QSUxFUl9QT1NJWExZX0NPUlJFQ1QgPSBAQ1hYX0NPTVBJTEVSX1BPU0lYTFlfQ09SUkVDVEAKIENZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZTID0gQERFRlNAIC1EUEtHREFUQURJUj1cIiQocGtnZGF0YWRpcilcIiBcCi0JLURMT0NBTEVESVI9XCIkKGRhdGFkaXIpL2xvY2FsZVwiCitDX0NPTVBJTEVSX1BPU0lYTFlfQ09SUkVDVCA9IEBDX0NPTVBJTEVSX1BPU0lYTFlfQ09SUkVDVEAKK0RFRlMgPSBAREVGU0AKIERFUERJUiA9IEBERVBESVJACitET1QgPSBARE9UQAogRUNIT19DID0gQEVDSE9fQ0AKIEVDSE9fTiA9IEBFQ0hPX05ACiBFQ0hPX1QgPSBARUNIT19UQAogRUdSRVAgPSBARUdSRVBACitFTVVMVElIT1BfSElEREVOID0gQEVNVUxUSUhPUF9ISURERU5ACitFTVVMVElIT1BfVkFMVUUgPSBARU1VTFRJSE9QX1ZBTFVFQAorRU5PTElOS19ISURERU4gPSBARU5PTElOS19ISURERU5ACitFTk9MSU5LX1ZBTFVFID0gQEVOT0xJTktfVkFMVUVACitFT1ZFUkZMT1dfSElEREVOID0gQEVPVkVSRkxPV19ISURERU5ACitFT1ZFUkZMT1dfVkFMVUUgPSBARU9WRVJGTE9XX1ZBTFVFQAorRVJSTk9fSCA9IEBFUlJOT19IQAogRVhFRVhUID0gQEVYRUVYVEAKK0ZMT0FUX0ggPSBARkxPQVRfSEAKIEdDQyA9IEBHQ0NACiBHRVRPUFRfSCA9IEBHRVRPUFRfSEAKK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACitHTElCQzIxID0gQEdMSUJDMjFACiBHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dOVUxJQl9BQ09TRiA9IEBHTlVMSUJfQUNPU0ZACitHTlVMSUJfQUNPU0wgPSBAR05VTElCX0FDT1NMQAorR05VTElCX0FTSU5GID0gQEdOVUxJQl9BU0lORkAKK0dOVUxJQl9BU0lOTCA9IEBHTlVMSUJfQVNJTkxACitHTlVMSUJfQVRBTjJGID0gQEdOVUxJQl9BVEFOMkZACitHTlVMSUJfQVRBTkYgPSBAR05VTElCX0FUQU5GQAorR05VTElCX0FUQU5MID0gQEdOVUxJQl9BVEFOTEAKK0dOVUxJQl9BVE9MTCA9IEBHTlVMSUJfQVRPTExACitHTlVMSUJfQlRPV0MgPSBAR05VTElCX0JUT1dDQAorR05VTElCX0NBTExPQ19QT1NJWCA9IEBHTlVMSUJfQ0FMTE9DX1BPU0lYQAorR05VTElCX0NBTk9OSUNBTElaRV9GSUxFX05BTUUgPSBAR05VTElCX0NBTk9OSUNBTElaRV9GSUxFX05BTUVACitHTlVMSUJfQ0JSVCA9IEBHTlVMSUJfQ0JSVEAKK0dOVUxJQl9DQlJURiA9IEBHTlVMSUJfQ0JSVEZACitHTlVMSUJfQ0JSVEwgPSBAR05VTElCX0NCUlRMQAorR05VTElCX0NFSUwgPSBAR05VTElCX0NFSUxACitHTlVMSUJfQ0VJTEYgPSBAR05VTElCX0NFSUxGQAorR05VTElCX0NFSUxMID0gQEdOVUxJQl9DRUlMTEAKK0dOVUxJQl9DSERJUiA9IEBHTlVMSUJfQ0hESVJACitHTlVMSUJfQ0hPV04gPSBAR05VTElCX0NIT1dOQAorR05VTElCX0NMT1NFID0gQEdOVUxJQl9DTE9TRUAKK0dOVUxJQl9DT1BZU0lHTiA9IEBHTlVMSUJfQ09QWVNJR05ACitHTlVMSUJfQ09QWVNJR05GID0gQEdOVUxJQl9DT1BZU0lHTkZACitHTlVMSUJfQ09QWVNJR05MID0gQEdOVUxJQl9DT1BZU0lHTkxACitHTlVMSUJfQ09TRiA9IEBHTlVMSUJfQ09TRkAKK0dOVUxJQl9DT1NIRiA9IEBHTlVMSUJfQ09TSEZACitHTlVMSUJfQ09TTCA9IEBHTlVMSUJfQ09TTEAKK0dOVUxJQl9EUFJJTlRGID0gQEdOVUxJQl9EUFJJTlRGQAorR05VTElCX0RVUCA9IEBHTlVMSUJfRFVQQAorR05VTElCX0RVUDIgPSBAR05VTElCX0RVUDJACitHTlVMSUJfRFVQMyA9IEBHTlVMSUJfRFVQM0AKK0dOVUxJQl9FTlZJUk9OID0gQEdOVUxJQl9FTlZJUk9OQAorR05VTElCX0VVSURBQ0NFU1MgPSBAR05VTElCX0VVSURBQ0NFU1NACitHTlVMSUJfRVhQMiA9IEBHTlVMSUJfRVhQMkAKK0dOVUxJQl9FWFAyRiA9IEBHTlVMSUJfRVhQMkZACitHTlVMSUJfRVhQMkwgPSBAR05VTElCX0VYUDJMQAorR05VTElCX0VYUEYgPSBAR05VTElCX0VYUEZACitHTlVMSUJfRVhQTCA9IEBHTlVMSUJfRVhQTEAKK0dOVUxJQl9FWFBNMSA9IEBHTlVMSUJfRVhQTTFACitHTlVMSUJfRVhQTTFGID0gQEdOVUxJQl9FWFBNMUZACitHTlVMSUJfRVhQTTFMID0gQEdOVUxJQl9FWFBNMUxACitHTlVMSUJfRkFCU0YgPSBAR05VTElCX0ZBQlNGQAorR05VTElCX0ZBQlNMID0gQEdOVUxJQl9GQUJTTEAKK0dOVUxJQl9GQUNDRVNTQVQgPSBAR05VTElCX0ZBQ0NFU1NBVEAKK0dOVUxJQl9GQ0hESVIgPSBAR05VTElCX0ZDSERJUkAKK0dOVUxJQl9GQ0hNT0RBVCA9IEBHTlVMSUJfRkNITU9EQVRACitHTlVMSUJfRkNIT1dOQVQgPSBAR05VTElCX0ZDSE9XTkFUQAorR05VTElCX0ZDTE9TRSA9IEBHTlVMSUJfRkNMT1NFQAorR05VTElCX0ZDTlRMID0gQEdOVUxJQl9GQ05UTEAKK0dOVUxJQl9GREFUQVNZTkMgPSBAR05VTElCX0ZEQVRBU1lOQ0AKK0dOVUxJQl9GRE9QRU4gPSBAR05VTElCX0ZET1BFTkAKK0dOVUxJQl9GRkxVU0ggPSBAR05VTElCX0ZGTFVTSEAKK0dOVUxJQl9GRlNMID0gQEdOVUxJQl9GRlNMQAorR05VTElCX0ZGU0xMID0gQEdOVUxJQl9GRlNMTEAKK0dOVUxJQl9GR0VUQyA9IEBHTlVMSUJfRkdFVENACitHTlVMSUJfRkdFVFMgPSBAR05VTElCX0ZHRVRTQAorR05VTElCX0ZMT09SID0gQEdOVUxJQl9GTE9PUkAKK0dOVUxJQl9GTE9PUkYgPSBAR05VTElCX0ZMT09SRkAKK0dOVUxJQl9GTE9PUkwgPSBAR05VTElCX0ZMT09STEAKK0dOVUxJQl9GTUEgPSBAR05VTElCX0ZNQUAKK0dOVUxJQl9GTUFGID0gQEdOVUxJQl9GTUFGQAorR05VTElCX0ZNQUwgPSBAR05VTElCX0ZNQUxACitHTlVMSUJfRk1PRCA9IEBHTlVMSUJfRk1PREAKK0dOVUxJQl9GTU9ERiA9IEBHTlVMSUJfRk1PREZACitHTlVMSUJfRk1PREwgPSBAR05VTElCX0ZNT0RMQAorR05VTElCX0ZPUEVOID0gQEdOVUxJQl9GT1BFTkAKK0dOVUxJQl9GUFJJTlRGID0gQEdOVUxJQl9GUFJJTlRGQAorR05VTElCX0ZQUklOVEZfUE9TSVggPSBAR05VTElCX0ZQUklOVEZfUE9TSVhACitHTlVMSUJfRlBVUkdFID0gQEdOVUxJQl9GUFVSR0VACitHTlVMSUJfRlBVVEMgPSBAR05VTElCX0ZQVVRDQAorR05VTElCX0ZQVVRTID0gQEdOVUxJQl9GUFVUU0AKK0dOVUxJQl9GUkVBRCA9IEBHTlVMSUJfRlJFQURACitHTlVMSUJfRlJFT1BFTiA9IEBHTlVMSUJfRlJFT1BFTkAKK0dOVUxJQl9GUkVYUCA9IEBHTlVMSUJfRlJFWFBACitHTlVMSUJfRlJFWFBGID0gQEdOVUxJQl9GUkVYUEZACitHTlVMSUJfRlJFWFBMID0gQEdOVUxJQl9GUkVYUExACitHTlVMSUJfRlNDQU5GID0gQEdOVUxJQl9GU0NBTkZACitHTlVMSUJfRlNFRUsgPSBAR05VTElCX0ZTRUVLQAorR05VTElCX0ZTRUVLTyA9IEBHTlVMSUJfRlNFRUtPQAorR05VTElCX0ZTVEFUID0gQEdOVUxJQl9GU1RBVEAKK0dOVUxJQl9GU1RBVEFUID0gQEdOVUxJQl9GU1RBVEFUQAorR05VTElCX0ZTWU5DID0gQEdOVUxJQl9GU1lOQ0AKK0dOVUxJQl9GVEVMTCA9IEBHTlVMSUJfRlRFTExACitHTlVMSUJfRlRFTExPID0gQEdOVUxJQl9GVEVMTE9ACitHTlVMSUJfRlRSVU5DQVRFID0gQEdOVUxJQl9GVFJVTkNBVEVACitHTlVMSUJfRlVUSU1FTlMgPSBAR05VTElCX0ZVVElNRU5TQAorR05VTElCX0ZXUklURSA9IEBHTlVMSUJfRldSSVRFQAorR05VTElCX0dFVEMgPSBAR05VTElCX0dFVENACitHTlVMSUJfR0VUQ0hBUiA9IEBHTlVMSUJfR0VUQ0hBUkAKK0dOVUxJQl9HRVRDV0QgPSBAR05VTElCX0dFVENXREAKK0dOVUxJQl9HRVRERUxJTSA9IEBHTlVMSUJfR0VUREVMSU1ACitHTlVMSUJfR0VURE9NQUlOTkFNRSA9IEBHTlVMSUJfR0VURE9NQUlOTkFNRUAKK0dOVUxJQl9HRVREVEFCTEVTSVpFID0gQEdOVUxJQl9HRVREVEFCTEVTSVpFQAorR05VTElCX0dFVEdST1VQUyA9IEBHTlVMSUJfR0VUR1JPVVBTQAorR05VTElCX0dFVEhPU1ROQU1FID0gQEdOVUxJQl9HRVRIT1NUTkFNRUAKK0dOVUxJQl9HRVRMSU5FID0gQEdOVUxJQl9HRVRMSU5FQAorR05VTElCX0dFVExPQURBVkcgPSBAR05VTElCX0dFVExPQURBVkdACitHTlVMSUJfR0VUTE9HSU4gPSBAR05VTElCX0dFVExPR0lOQAorR05VTElCX0dFVExPR0lOX1IgPSBAR05VTElCX0dFVExPR0lOX1JACitHTlVMSUJfR0VUUEFHRVNJWkUgPSBAR05VTElCX0dFVFBBR0VTSVpFQAorR05VTElCX0dFVFNVQk9QVCA9IEBHTlVMSUJfR0VUU1VCT1BUQAorR05VTElCX0dFVFVTRVJTSEVMTCA9IEBHTlVMSUJfR0VUVVNFUlNIRUxMQAorR05VTElCX0dMX1VOSVNURF9IX0dFVE9QVCA9IEBHTlVMSUJfR0xfVU5JU1REX0hfR0VUT1BUQAorR05VTElCX0dSQU5UUFQgPSBAR05VTElCX0dSQU5UUFRACitHTlVMSUJfR1JPVVBfTUVNQkVSID0gQEdOVUxJQl9HUk9VUF9NRU1CRVJACitHTlVMSUJfSFlQT1QgPSBAR05VTElCX0hZUE9UQAorR05VTElCX0hZUE9URiA9IEBHTlVMSUJfSFlQT1RGQAorR05VTElCX0hZUE9UTCA9IEBHTlVMSUJfSFlQT1RMQAorR05VTElCX0lMT0dCID0gQEdOVUxJQl9JTE9HQkAKK0dOVUxJQl9JTE9HQkYgPSBAR05VTElCX0lMT0dCRkAKK0dOVUxJQl9JTE9HQkwgPSBAR05VTElCX0lMT0dCTEAKK0dOVUxJQl9JTUFYQUJTID0gQEdOVUxJQl9JTUFYQUJTQAorR05VTElCX0lNQVhESVYgPSBAR05VTElCX0lNQVhESVZACitHTlVMSUJfSVNBVFRZID0gQEdOVUxJQl9JU0FUVFlACitHTlVMSUJfSVNGSU5JVEUgPSBAR05VTElCX0lTRklOSVRFQAorR05VTElCX0lTSU5GID0gQEdOVUxJQl9JU0lORkAKK0dOVUxJQl9JU05BTiA9IEBHTlVMSUJfSVNOQU5ACitHTlVMSUJfSVNOQU5EID0gQEdOVUxJQl9JU05BTkRACitHTlVMSUJfSVNOQU5GID0gQEdOVUxJQl9JU05BTkZACitHTlVMSUJfSVNOQU5MID0gQEdOVUxJQl9JU05BTkxACitHTlVMSUJfSVNXQkxBTksgPSBAR05VTElCX0lTV0JMQU5LQAorR05VTElCX0lTV0NUWVBFID0gQEdOVUxJQl9JU1dDVFlQRUAKK0dOVUxJQl9MQ0hNT0QgPSBAR05VTElCX0xDSE1PREAKK0dOVUxJQl9MQ0hPV04gPSBAR05VTElCX0xDSE9XTkAKK0dOVUxJQl9MREVYUEYgPSBAR05VTElCX0xERVhQRkAKK0dOVUxJQl9MREVYUEwgPSBAR05VTElCX0xERVhQTEAKK0dOVUxJQl9MSU5LID0gQEdOVUxJQl9MSU5LQAorR05VTElCX0xJTktBVCA9IEBHTlVMSUJfTElOS0FUQAorR05VTElCX0xPRyA9IEBHTlVMSUJfTE9HQAorR05VTElCX0xPRzEwID0gQEdOVUxJQl9MT0cxMEAKK0dOVUxJQl9MT0cxMEYgPSBAR05VTElCX0xPRzEwRkAKK0dOVUxJQl9MT0cxMEwgPSBAR05VTElCX0xPRzEwTEAKK0dOVUxJQl9MT0cxUCA9IEBHTlVMSUJfTE9HMVBACitHTlVMSUJfTE9HMVBGID0gQEdOVUxJQl9MT0cxUEZACitHTlVMSUJfTE9HMVBMID0gQEdOVUxJQl9MT0cxUExACitHTlVMSUJfTE9HMiA9IEBHTlVMSUJfTE9HMkAKK0dOVUxJQl9MT0cyRiA9IEBHTlVMSUJfTE9HMkZACitHTlVMSUJfTE9HMkwgPSBAR05VTElCX0xPRzJMQAorR05VTElCX0xPR0IgPSBAR05VTElCX0xPR0JACitHTlVMSUJfTE9HQkYgPSBAR05VTElCX0xPR0JGQAorR05VTElCX0xPR0JMID0gQEdOVUxJQl9MT0dCTEAKK0dOVUxJQl9MT0dGID0gQEdOVUxJQl9MT0dGQAorR05VTElCX0xPR0wgPSBAR05VTElCX0xPR0xACitHTlVMSUJfTFNFRUsgPSBAR05VTElCX0xTRUVLQAorR05VTElCX0xTVEFUID0gQEdOVUxJQl9MU1RBVEAKK0dOVUxJQl9NQUxMT0NfUE9TSVggPSBAR05VTElCX01BTExPQ19QT1NJWEAKK0dOVUxJQl9NQlJMRU4gPSBAR05VTElCX01CUkxFTkAKK0dOVUxJQl9NQlJUT1dDID0gQEdOVUxJQl9NQlJUT1dDQAorR05VTElCX01CU0NBU0VDTVAgPSBAR05VTElCX01CU0NBU0VDTVBACitHTlVMSUJfTUJTQ0FTRVNUUiA9IEBHTlVMSUJfTUJTQ0FTRVNUUkAKK0dOVUxJQl9NQlNDSFIgPSBAR05VTElCX01CU0NIUkAKK0dOVUxJQl9NQlNDU1BOID0gQEdOVUxJQl9NQlNDU1BOQAorR05VTElCX01CU0lOSVQgPSBAR05VTElCX01CU0lOSVRACitHTlVMSUJfTUJTTEVOID0gQEdOVUxJQl9NQlNMRU5ACitHTlVMSUJfTUJTTkNBU0VDTVAgPSBAR05VTElCX01CU05DQVNFQ01QQAorR05VTElCX01CU05MRU4gPSBAR05VTElCX01CU05MRU5ACitHTlVMSUJfTUJTTlJUT1dDUyA9IEBHTlVMSUJfTUJTTlJUT1dDU0AKK0dOVUxJQl9NQlNQQlJLID0gQEdOVUxJQl9NQlNQQlJLQAorR05VTElCX01CU1BDQVNFQ01QID0gQEdOVUxJQl9NQlNQQ0FTRUNNUEAKK0dOVUxJQl9NQlNSQ0hSID0gQEdOVUxJQl9NQlNSQ0hSQAorR05VTElCX01CU1JUT1dDUyA9IEBHTlVMSUJfTUJTUlRPV0NTQAorR05VTElCX01CU1NFUCA9IEBHTlVMSUJfTUJTU0VQQAorR05VTElCX01CU1NQTiA9IEBHTlVMSUJfTUJTU1BOQAorR05VTElCX01CU1NUUiA9IEBHTlVMSUJfTUJTU1RSQAorR05VTElCX01CU1RPS19SID0gQEdOVUxJQl9NQlNUT0tfUkAKK0dOVUxJQl9NQlRPV0MgPSBAR05VTElCX01CVE9XQ0AKK0dOVUxJQl9NRU1DSFIgPSBAR05VTElCX01FTUNIUkAKK0dOVUxJQl9NRU1NRU0gPSBAR05VTElCX01FTU1FTUAKK0dOVUxJQl9NRU1QQ1BZID0gQEdOVUxJQl9NRU1QQ1BZQAorR05VTElCX01FTVJDSFIgPSBAR05VTElCX01FTVJDSFJACitHTlVMSUJfTUtESVJBVCA9IEBHTlVMSUJfTUtESVJBVEAKK0dOVUxJQl9NS0RURU1QID0gQEdOVUxJQl9NS0RURU1QQAorR05VTElCX01LRklGTyA9IEBHTlVMSUJfTUtGSUZPQAorR05VTElCX01LRklGT0FUID0gQEdOVUxJQl9NS0ZJRk9BVEAKK0dOVUxJQl9NS05PRCA9IEBHTlVMSUJfTUtOT0RACitHTlVMSUJfTUtOT0RBVCA9IEBHTlVMSUJfTUtOT0RBVEAKK0dOVUxJQl9NS09TVEVNUCA9IEBHTlVMSUJfTUtPU1RFTVBACitHTlVMSUJfTUtPU1RFTVBTID0gQEdOVUxJQl9NS09TVEVNUFNACitHTlVMSUJfTUtTVEVNUCA9IEBHTlVMSUJfTUtTVEVNUEAKK0dOVUxJQl9NS1NURU1QUyA9IEBHTlVMSUJfTUtTVEVNUFNACitHTlVMSUJfTUtUSU1FID0gQEdOVUxJQl9NS1RJTUVACitHTlVMSUJfTU9ERiA9IEBHTlVMSUJfTU9ERkAKK0dOVUxJQl9NT0RGRiA9IEBHTlVMSUJfTU9ERkZACitHTlVMSUJfTU9ERkwgPSBAR05VTElCX01PREZMQAorR05VTElCX05BTk9TTEVFUCA9IEBHTlVMSUJfTkFOT1NMRUVQQAorR05VTElCX05PTkJMT0NLSU5HID0gQEdOVUxJQl9OT05CTE9DS0lOR0AKK0dOVUxJQl9PQlNUQUNLX1BSSU5URiA9IEBHTlVMSUJfT0JTVEFDS19QUklOVEZACitHTlVMSUJfT0JTVEFDS19QUklOVEZfUE9TSVggPSBAR05VTElCX09CU1RBQ0tfUFJJTlRGX1BPU0lYQAorR05VTElCX09QRU4gPSBAR05VTElCX09QRU5ACitHTlVMSUJfT1BFTkFUID0gQEdOVUxJQl9PUEVOQVRACitHTlVMSUJfUENMT1NFID0gQEdOVUxJQl9QQ0xPU0VACitHTlVMSUJfUEVSUk9SID0gQEdOVUxJQl9QRVJST1JACitHTlVMSUJfUElQRSA9IEBHTlVMSUJfUElQRUAKK0dOVUxJQl9QSVBFMiA9IEBHTlVMSUJfUElQRTJACitHTlVMSUJfUE9QRU4gPSBAR05VTElCX1BPUEVOQAorR05VTElCX1BPU0lYX09QRU5QVCA9IEBHTlVMSUJfUE9TSVhfT1BFTlBUQAorR05VTElCX1BPU0lYX1NQQVdOID0gQEdOVUxJQl9QT1NJWF9TUEFXTkAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfREVTVFJPWSA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0RFU1RST1lACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVEZMQUdTID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VURkxBR1NACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFBHUk9VUCA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFBHUk9VUEAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0NIRURQQVJBTSA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNDSEVEUEFSQU1ACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNDSEVEUE9MSUNZID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0NIRURQT0xJQ1lACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNJR0RFRkFVTFQgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdERUZBVUxUQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdNQVNLID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0lHTUFTS0AKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfSU5JVCA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0lOSVRACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVEZMQUdTID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VURkxBR1NACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFBHUk9VUCA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFBHUk9VUEAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQQVJBTSA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNDSEVEUEFSQU1ACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNDSEVEUE9MSUNZID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQT0xJQ1lACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNJR0RFRkFVTFQgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTSUdERUZBVUxUQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTSUdNQVNLID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0lHTUFTS0AKK0dOVUxJQl9QT1NJWF9TUEFXTlAgPSBAR05VTElCX1BPU0lYX1NQQVdOUEAKK0dOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQUREQ0xPU0UgPSBAR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRUAKK0dOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMiA9IEBHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDJACitHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU4gPSBAR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERPUEVOQAorR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19ERVNUUk9ZID0gQEdOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfREVTVFJPWUAKK0dOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfSU5JVCA9IEBHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0lOSVRACitHTlVMSUJfUE9XRiA9IEBHTlVMSUJfUE9XRkAKK0dOVUxJQl9QUkVBRCA9IEBHTlVMSUJfUFJFQURACitHTlVMSUJfUFJJTlRGID0gQEdOVUxJQl9QUklOVEZACitHTlVMSUJfUFJJTlRGX1BPU0lYID0gQEdOVUxJQl9QUklOVEZfUE9TSVhACitHTlVMSUJfUFRIUkVBRF9TSUdNQVNLID0gQEdOVUxJQl9QVEhSRUFEX1NJR01BU0tACitHTlVMSUJfUFRTTkFNRSA9IEBHTlVMSUJfUFRTTkFNRUAKK0dOVUxJQl9QVFNOQU1FX1IgPSBAR05VTElCX1BUU05BTUVfUkAKK0dOVUxJQl9QVVRDID0gQEdOVUxJQl9QVVRDQAorR05VTElCX1BVVENIQVIgPSBAR05VTElCX1BVVENIQVJACitHTlVMSUJfUFVURU5WID0gQEdOVUxJQl9QVVRFTlZACitHTlVMSUJfUFVUUyA9IEBHTlVMSUJfUFVUU0AKK0dOVUxJQl9QV1JJVEUgPSBAR05VTElCX1BXUklURUAKK0dOVUxJQl9SQUlTRSA9IEBHTlVMSUJfUkFJU0VACitHTlVMSUJfUkFORE9NID0gQEdOVUxJQl9SQU5ET01ACitHTlVMSUJfUkFORE9NX1IgPSBAR05VTElCX1JBTkRPTV9SQAorR05VTElCX1JBV01FTUNIUiA9IEBHTlVMSUJfUkFXTUVNQ0hSQAorR05VTElCX1JFQUQgPSBAR05VTElCX1JFQURACitHTlVMSUJfUkVBRExJTksgPSBAR05VTElCX1JFQURMSU5LQAorR05VTElCX1JFQURMSU5LQVQgPSBAR05VTElCX1JFQURMSU5LQVRACitHTlVMSUJfUkVBTExPQ19QT1NJWCA9IEBHTlVMSUJfUkVBTExPQ19QT1NJWEAKK0dOVUxJQl9SRUFMUEFUSCA9IEBHTlVMSUJfUkVBTFBBVEhACitHTlVMSUJfUkVNQUlOREVSID0gQEdOVUxJQl9SRU1BSU5ERVJACitHTlVMSUJfUkVNQUlOREVSRiA9IEBHTlVMSUJfUkVNQUlOREVSRkAKK0dOVUxJQl9SRU1BSU5ERVJMID0gQEdOVUxJQl9SRU1BSU5ERVJMQAorR05VTElCX1JFTU9WRSA9IEBHTlVMSUJfUkVNT1ZFQAorR05VTElCX1JFTkFNRSA9IEBHTlVMSUJfUkVOQU1FQAorR05VTElCX1JFTkFNRUFUID0gQEdOVUxJQl9SRU5BTUVBVEAKK0dOVUxJQl9SSU5UID0gQEdOVUxJQl9SSU5UQAorR05VTElCX1JJTlRGID0gQEdOVUxJQl9SSU5URkAKK0dOVUxJQl9SSU5UTCA9IEBHTlVMSUJfUklOVExACitHTlVMSUJfUk1ESVIgPSBAR05VTElCX1JNRElSQAorR05VTElCX1JPVU5EID0gQEdOVUxJQl9ST1VOREAKK0dOVUxJQl9ST1VOREYgPSBAR05VTElCX1JPVU5ERkAKK0dOVUxJQl9ST1VOREwgPSBAR05VTElCX1JPVU5ETEAKK0dOVUxJQl9SUE1BVENIID0gQEdOVUxJQl9SUE1BVENIQAorR05VTElCX1NDQU5GID0gQEdOVUxJQl9TQ0FORkAKK0dOVUxJQl9TRVRFTlYgPSBAR05VTElCX1NFVEVOVkAKK0dOVUxJQl9TRVRIT1NUTkFNRSA9IEBHTlVMSUJfU0VUSE9TVE5BTUVACitHTlVMSUJfU0lHQUNUSU9OID0gQEdOVUxJQl9TSUdBQ1RJT05ACitHTlVMSUJfU0lHTkFMX0hfU0lHUElQRSA9IEBHTlVMSUJfU0lHTkFMX0hfU0lHUElQRUAKK0dOVUxJQl9TSUdOQklUID0gQEdOVUxJQl9TSUdOQklUQAorR05VTElCX1NJR1BST0NNQVNLID0gQEdOVUxJQl9TSUdQUk9DTUFTS0AKK0dOVUxJQl9TSU5GID0gQEdOVUxJQl9TSU5GQAorR05VTElCX1NJTkhGID0gQEdOVUxJQl9TSU5IRkAKK0dOVUxJQl9TSU5MID0gQEdOVUxJQl9TSU5MQAorR05VTElCX1NMRUVQID0gQEdOVUxJQl9TTEVFUEAKK0dOVUxJQl9TTlBSSU5URiA9IEBHTlVMSUJfU05QUklOVEZACitHTlVMSUJfU1BSSU5URl9QT1NJWCA9IEBHTlVMSUJfU1BSSU5URl9QT1NJWEAKK0dOVUxJQl9TUVJURiA9IEBHTlVMSUJfU1FSVEZACitHTlVMSUJfU1FSVEwgPSBAR05VTElCX1NRUlRMQAorR05VTElCX1NUQVQgPSBAR05VTElCX1NUQVRACitHTlVMSUJfU1RESU9fSF9OT05CTE9DS0lORyA9IEBHTlVMSUJfU1RESU9fSF9OT05CTE9DS0lOR0AKK0dOVUxJQl9TVERJT19IX1NJR1BJUEUgPSBAR05VTElCX1NURElPX0hfU0lHUElQRUAKK0dOVUxJQl9TVFBDUFkgPSBAR05VTElCX1NUUENQWUAKK0dOVUxJQl9TVFBOQ1BZID0gQEdOVUxJQl9TVFBOQ1BZQAorR05VTElCX1NUUkNBU0VTVFIgPSBAR05VTElCX1NUUkNBU0VTVFJACitHTlVMSUJfU1RSQ0hSTlVMID0gQEdOVUxJQl9TVFJDSFJOVUxACitHTlVMSUJfU1RSRFVQID0gQEdOVUxJQl9TVFJEVVBACitHTlVMSUJfU1RSRVJST1IgPSBAR05VTElCX1NUUkVSUk9SQAorR05VTElCX1NUUkVSUk9SX1IgPSBAR05VTElCX1NUUkVSUk9SX1JACitHTlVMSUJfU1RSTkNBVCA9IEBHTlVMSUJfU1RSTkNBVEAKK0dOVUxJQl9TVFJORFVQID0gQEdOVUxJQl9TVFJORFVQQAorR05VTElCX1NUUk5MRU4gPSBAR05VTElCX1NUUk5MRU5ACitHTlVMSUJfU1RSUEJSSyA9IEBHTlVMSUJfU1RSUEJSS0AKK0dOVUxJQl9TVFJQVElNRSA9IEBHTlVMSUJfU1RSUFRJTUVACitHTlVMSUJfU1RSU0VQID0gQEdOVUxJQl9TVFJTRVBACitHTlVMSUJfU1RSU0lHTkFMID0gQEdOVUxJQl9TVFJTSUdOQUxACitHTlVMSUJfU1RSU1RSID0gQEdOVUxJQl9TVFJTVFJACitHTlVMSUJfU1RSVE9EID0gQEdOVUxJQl9TVFJUT0RACitHTlVMSUJfU1RSVE9JTUFYID0gQEdOVUxJQl9TVFJUT0lNQVhACitHTlVMSUJfU1RSVE9LX1IgPSBAR05VTElCX1NUUlRPS19SQAorR05VTElCX1NUUlRPTEwgPSBAR05VTElCX1NUUlRPTExACitHTlVMSUJfU1RSVE9VTEwgPSBAR05VTElCX1NUUlRPVUxMQAorR05VTElCX1NUUlRPVU1BWCA9IEBHTlVMSUJfU1RSVE9VTUFYQAorR05VTElCX1NUUlZFUlNDTVAgPSBAR05VTElCX1NUUlZFUlNDTVBACitHTlVMSUJfU1lNTElOSyA9IEBHTlVMSUJfU1lNTElOS0AKK0dOVUxJQl9TWU1MSU5LQVQgPSBAR05VTElCX1NZTUxJTktBVEAKK0dOVUxJQl9TWVNURU1fUE9TSVggPSBAR05VTElCX1NZU1RFTV9QT1NJWEAKK0dOVUxJQl9UQU5GID0gQEdOVUxJQl9UQU5GQAorR05VTElCX1RBTkhGID0gQEdOVUxJQl9UQU5IRkAKK0dOVUxJQl9UQU5MID0gQEdOVUxJQl9UQU5MQAorR05VTElCX1RJTUVHTSA9IEBHTlVMSUJfVElNRUdNQAorR05VTElCX1RJTUVfUiA9IEBHTlVMSUJfVElNRV9SQAorR05VTElCX1RNUEZJTEUgPSBAR05VTElCX1RNUEZJTEVACitHTlVMSUJfVE9XQ1RSQU5TID0gQEdOVUxJQl9UT1dDVFJBTlNACitHTlVMSUJfVFJVTkMgPSBAR05VTElCX1RSVU5DQAorR05VTElCX1RSVU5DRiA9IEBHTlVMSUJfVFJVTkNGQAorR05VTElCX1RSVU5DTCA9IEBHTlVMSUJfVFJVTkNMQAorR05VTElCX1RUWU5BTUVfUiA9IEBHTlVMSUJfVFRZTkFNRV9SQAorR05VTElCX1VOSVNURF9IX05PTkJMT0NLSU5HID0gQEdOVUxJQl9VTklTVERfSF9OT05CTE9DS0lOR0AKK0dOVUxJQl9VTklTVERfSF9TSUdQSVBFID0gQEdOVUxJQl9VTklTVERfSF9TSUdQSVBFQAorR05VTElCX1VOTElOSyA9IEBHTlVMSUJfVU5MSU5LQAorR05VTElCX1VOTElOS0FUID0gQEdOVUxJQl9VTkxJTktBVEAKK0dOVUxJQl9VTkxPQ0tQVCA9IEBHTlVMSUJfVU5MT0NLUFRACitHTlVMSUJfVU5TRVRFTlYgPSBAR05VTElCX1VOU0VURU5WQAorR05VTElCX1VTTEVFUCA9IEBHTlVMSUJfVVNMRUVQQAorR05VTElCX1VUSU1FTlNBVCA9IEBHTlVMSUJfVVRJTUVOU0FUQAorR05VTElCX1ZBU1BSSU5URiA9IEBHTlVMSUJfVkFTUFJJTlRGQAorR05VTElCX1ZEUFJJTlRGID0gQEdOVUxJQl9WRFBSSU5URkAKK0dOVUxJQl9WRlBSSU5URiA9IEBHTlVMSUJfVkZQUklOVEZACitHTlVMSUJfVkZQUklOVEZfUE9TSVggPSBAR05VTElCX1ZGUFJJTlRGX1BPU0lYQAorR05VTElCX1ZGU0NBTkYgPSBAR05VTElCX1ZGU0NBTkZACitHTlVMSUJfVlBSSU5URiA9IEBHTlVMSUJfVlBSSU5URkAKK0dOVUxJQl9WUFJJTlRGX1BPU0lYID0gQEdOVUxJQl9WUFJJTlRGX1BPU0lYQAorR05VTElCX1ZTQ0FORiA9IEBHTlVMSUJfVlNDQU5GQAorR05VTElCX1ZTTlBSSU5URiA9IEBHTlVMSUJfVlNOUFJJTlRGQAorR05VTElCX1ZTUFJJTlRGX1BPU0lYID0gQEdOVUxJQl9WU1BSSU5URl9QT1NJWEAKK0dOVUxJQl9XQUlUUElEID0gQEdOVUxJQl9XQUlUUElEQAorR05VTElCX1dDUENQWSA9IEBHTlVMSUJfV0NQQ1BZQAorR05VTElCX1dDUE5DUFkgPSBAR05VTElCX1dDUE5DUFlACitHTlVMSUJfV0NSVE9NQiA9IEBHTlVMSUJfV0NSVE9NQkAKK0dOVUxJQl9XQ1NDQVNFQ01QID0gQEdOVUxJQl9XQ1NDQVNFQ01QQAorR05VTElCX1dDU0NBVCA9IEBHTlVMSUJfV0NTQ0FUQAorR05VTElCX1dDU0NIUiA9IEBHTlVMSUJfV0NTQ0hSQAorR05VTElCX1dDU0NNUCA9IEBHTlVMSUJfV0NTQ01QQAorR05VTElCX1dDU0NPTEwgPSBAR05VTElCX1dDU0NPTExACitHTlVMSUJfV0NTQ1BZID0gQEdOVUxJQl9XQ1NDUFlACitHTlVMSUJfV0NTQ1NQTiA9IEBHTlVMSUJfV0NTQ1NQTkAKK0dOVUxJQl9XQ1NEVVAgPSBAR05VTElCX1dDU0RVUEAKK0dOVUxJQl9XQ1NMRU4gPSBAR05VTElCX1dDU0xFTkAKK0dOVUxJQl9XQ1NOQ0FTRUNNUCA9IEBHTlVMSUJfV0NTTkNBU0VDTVBACitHTlVMSUJfV0NTTkNBVCA9IEBHTlVMSUJfV0NTTkNBVEAKK0dOVUxJQl9XQ1NOQ01QID0gQEdOVUxJQl9XQ1NOQ01QQAorR05VTElCX1dDU05DUFkgPSBAR05VTElCX1dDU05DUFlACitHTlVMSUJfV0NTTkxFTiA9IEBHTlVMSUJfV0NTTkxFTkAKK0dOVUxJQl9XQ1NOUlRPTUJTID0gQEdOVUxJQl9XQ1NOUlRPTUJTQAorR05VTElCX1dDU1BCUksgPSBAR05VTElCX1dDU1BCUktACitHTlVMSUJfV0NTUkNIUiA9IEBHTlVMSUJfV0NTUkNIUkAKK0dOVUxJQl9XQ1NSVE9NQlMgPSBAR05VTElCX1dDU1JUT01CU0AKK0dOVUxJQl9XQ1NTUE4gPSBAR05VTElCX1dDU1NQTkAKK0dOVUxJQl9XQ1NTVFIgPSBAR05VTElCX1dDU1NUUkAKK0dOVUxJQl9XQ1NUT0sgPSBAR05VTElCX1dDU1RPS0AKK0dOVUxJQl9XQ1NXSURUSCA9IEBHTlVMSUJfV0NTV0lEVEhACitHTlVMSUJfV0NTWEZSTSA9IEBHTlVMSUJfV0NTWEZSTUAKK0dOVUxJQl9XQ1RPQiA9IEBHTlVMSUJfV0NUT0JACitHTlVMSUJfV0NUT01CID0gQEdOVUxJQl9XQ1RPTUJACitHTlVMSUJfV0NUUkFOUyA9IEBHTlVMSUJfV0NUUkFOU0AKK0dOVUxJQl9XQ1RZUEUgPSBAR05VTElCX1dDVFlQRUAKK0dOVUxJQl9XQ1dJRFRIID0gQEdOVUxJQl9XQ1dJRFRIQAorR05VTElCX1dNRU1DSFIgPSBAR05VTElCX1dNRU1DSFJACitHTlVMSUJfV01FTUNNUCA9IEBHTlVMSUJfV01FTUNNUEAKK0dOVUxJQl9XTUVNQ1BZID0gQEdOVUxJQl9XTUVNQ1BZQAorR05VTElCX1dNRU1NT1ZFID0gQEdOVUxJQl9XTUVNTU9WRUAKK0dOVUxJQl9XTUVNU0VUID0gQEdOVUxJQl9XTUVNU0VUQAorR05VTElCX1dSSVRFID0gQEdOVUxJQl9XUklURUAKK0dOVUxJQl9fRVhJVCA9IEBHTlVMSUJfX0VYSVRACitHUkVQID0gQEdSRVBACitIQVZFX0FDT1NGID0gQEhBVkVfQUNPU0ZACitIQVZFX0FDT1NMID0gQEhBVkVfQUNPU0xACitIQVZFX0FTSU5GID0gQEhBVkVfQVNJTkZACitIQVZFX0FTSU5MID0gQEhBVkVfQVNJTkxACitIQVZFX0FUQU4yRiA9IEBIQVZFX0FUQU4yRkAKK0hBVkVfQVRBTkYgPSBASEFWRV9BVEFORkAKK0hBVkVfQVRBTkwgPSBASEFWRV9BVEFOTEAKK0hBVkVfQVRPTEwgPSBASEFWRV9BVE9MTEAKK0hBVkVfQlRPV0MgPSBASEFWRV9CVE9XQ0AKK0hBVkVfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRSA9IEBIQVZFX0NBTk9OSUNBTElaRV9GSUxFX05BTUVACitIQVZFX0NCUlQgPSBASEFWRV9DQlJUQAorSEFWRV9DQlJURiA9IEBIQVZFX0NCUlRGQAorSEFWRV9DQlJUTCA9IEBIQVZFX0NCUlRMQAorSEFWRV9DSE9XTiA9IEBIQVZFX0NIT1dOQAorSEFWRV9DT1BZU0lHTiA9IEBIQVZFX0NPUFlTSUdOQAorSEFWRV9DT1BZU0lHTkwgPSBASEFWRV9DT1BZU0lHTkxACitIQVZFX0NPU0YgPSBASEFWRV9DT1NGQAorSEFWRV9DT1NIRiA9IEBIQVZFX0NPU0hGQAorSEFWRV9DT1NMID0gQEhBVkVfQ09TTEAKK0hBVkVfREVDTF9BQ09TTCA9IEBIQVZFX0RFQ0xfQUNPU0xACitIQVZFX0RFQ0xfQVNJTkwgPSBASEFWRV9ERUNMX0FTSU5MQAorSEFWRV9ERUNMX0FUQU5MID0gQEhBVkVfREVDTF9BVEFOTEAKK0hBVkVfREVDTF9DQlJURiA9IEBIQVZFX0RFQ0xfQ0JSVEZACitIQVZFX0RFQ0xfQ0JSVEwgPSBASEFWRV9ERUNMX0NCUlRMQAorSEFWRV9ERUNMX0NFSUxGID0gQEhBVkVfREVDTF9DRUlMRkAKK0hBVkVfREVDTF9DRUlMTCA9IEBIQVZFX0RFQ0xfQ0VJTExACitIQVZFX0RFQ0xfQ09QWVNJR05GID0gQEhBVkVfREVDTF9DT1BZU0lHTkZACitIQVZFX0RFQ0xfQ09TTCA9IEBIQVZFX0RFQ0xfQ09TTEAKK0hBVkVfREVDTF9FTlZJUk9OID0gQEhBVkVfREVDTF9FTlZJUk9OQAorSEFWRV9ERUNMX0VYUDIgPSBASEFWRV9ERUNMX0VYUDJACitIQVZFX0RFQ0xfRVhQMkYgPSBASEFWRV9ERUNMX0VYUDJGQAorSEFWRV9ERUNMX0VYUDJMID0gQEhBVkVfREVDTF9FWFAyTEAKK0hBVkVfREVDTF9FWFBMID0gQEhBVkVfREVDTF9FWFBMQAorSEFWRV9ERUNMX0VYUE0xTCA9IEBIQVZFX0RFQ0xfRVhQTTFMQAorSEFWRV9ERUNMX0ZDSERJUiA9IEBIQVZFX0RFQ0xfRkNIRElSQAorSEFWRV9ERUNMX0ZEQVRBU1lOQyA9IEBIQVZFX0RFQ0xfRkRBVEFTWU5DQAorSEFWRV9ERUNMX0ZMT09SRiA9IEBIQVZFX0RFQ0xfRkxPT1JGQAorSEFWRV9ERUNMX0ZMT09STCA9IEBIQVZFX0RFQ0xfRkxPT1JMQAorSEFWRV9ERUNMX0ZQVVJHRSA9IEBIQVZFX0RFQ0xfRlBVUkdFQAorSEFWRV9ERUNMX0ZSRVhQTCA9IEBIQVZFX0RFQ0xfRlJFWFBMQAorSEFWRV9ERUNMX0ZTRUVLTyA9IEBIQVZFX0RFQ0xfRlNFRUtPQAorSEFWRV9ERUNMX0ZURUxMTyA9IEBIQVZFX0RFQ0xfRlRFTExPQAorSEFWRV9ERUNMX0dFVERFTElNID0gQEhBVkVfREVDTF9HRVRERUxJTUAKK0hBVkVfREVDTF9HRVRET01BSU5OQU1FID0gQEhBVkVfREVDTF9HRVRET01BSU5OQU1FQAorSEFWRV9ERUNMX0dFVExJTkUgPSBASEFWRV9ERUNMX0dFVExJTkVACitIQVZFX0RFQ0xfR0VUTE9BREFWRyA9IEBIQVZFX0RFQ0xfR0VUTE9BREFWR0AKK0hBVkVfREVDTF9HRVRMT0dJTl9SID0gQEhBVkVfREVDTF9HRVRMT0dJTl9SQAorSEFWRV9ERUNMX0dFVFBBR0VTSVpFID0gQEhBVkVfREVDTF9HRVRQQUdFU0laRUAKK0hBVkVfREVDTF9HRVRVU0VSU0hFTEwgPSBASEFWRV9ERUNMX0dFVFVTRVJTSEVMTEAKK0hBVkVfREVDTF9JTUFYQUJTID0gQEhBVkVfREVDTF9JTUFYQUJTQAorSEFWRV9ERUNMX0lNQVhESVYgPSBASEFWRV9ERUNMX0lNQVhESVZACitIQVZFX0RFQ0xfTERFWFBMID0gQEhBVkVfREVDTF9MREVYUExACitIQVZFX0RFQ0xfTE9DQUxUSU1FX1IgPSBASEFWRV9ERUNMX0xPQ0FMVElNRV9SQAorSEFWRV9ERUNMX0xPRzEwTCA9IEBIQVZFX0RFQ0xfTE9HMTBMQAorSEFWRV9ERUNMX0xPRzIgPSBASEFWRV9ERUNMX0xPRzJACitIQVZFX0RFQ0xfTE9HMkYgPSBASEFWRV9ERUNMX0xPRzJGQAorSEFWRV9ERUNMX0xPRzJMID0gQEhBVkVfREVDTF9MT0cyTEAKK0hBVkVfREVDTF9MT0dCID0gQEhBVkVfREVDTF9MT0dCQAorSEFWRV9ERUNMX0xPR0wgPSBASEFWRV9ERUNMX0xPR0xACitIQVZFX0RFQ0xfTUVNTUVNID0gQEhBVkVfREVDTF9NRU1NRU1ACitIQVZFX0RFQ0xfTUVNUkNIUiA9IEBIQVZFX0RFQ0xfTUVNUkNIUkAKK0hBVkVfREVDTF9PQlNUQUNLX1BSSU5URiA9IEBIQVZFX0RFQ0xfT0JTVEFDS19QUklOVEZACitIQVZFX0RFQ0xfUkVNQUlOREVSID0gQEhBVkVfREVDTF9SRU1BSU5ERVJACitIQVZFX0RFQ0xfUkVNQUlOREVSTCA9IEBIQVZFX0RFQ0xfUkVNQUlOREVSTEAKK0hBVkVfREVDTF9SSU5URiA9IEBIQVZFX0RFQ0xfUklOVEZACitIQVZFX0RFQ0xfUk9VTkQgPSBASEFWRV9ERUNMX1JPVU5EQAorSEFWRV9ERUNMX1JPVU5ERiA9IEBIQVZFX0RFQ0xfUk9VTkRGQAorSEFWRV9ERUNMX1JPVU5ETCA9IEBIQVZFX0RFQ0xfUk9VTkRMQAorSEFWRV9ERUNMX1NFVEVOViA9IEBIQVZFX0RFQ0xfU0VURU5WQAorSEFWRV9ERUNMX1NFVEhPU1ROQU1FID0gQEhBVkVfREVDTF9TRVRIT1NUTkFNRUAKK0hBVkVfREVDTF9TSU5MID0gQEhBVkVfREVDTF9TSU5MQAorSEFWRV9ERUNMX1NOUFJJTlRGID0gQEhBVkVfREVDTF9TTlBSSU5URkAKK0hBVkVfREVDTF9TUVJUTCA9IEBIQVZFX0RFQ0xfU1FSVExACitIQVZFX0RFQ0xfU1RSRFVQID0gQEhBVkVfREVDTF9TVFJEVVBACitIQVZFX0RFQ0xfU1RSRVJST1JfUiA9IEBIQVZFX0RFQ0xfU1RSRVJST1JfUkAKK0hBVkVfREVDTF9TVFJORFVQID0gQEhBVkVfREVDTF9TVFJORFVQQAorSEFWRV9ERUNMX1NUUk5MRU4gPSBASEFWRV9ERUNMX1NUUk5MRU5ACitIQVZFX0RFQ0xfU1RSU0lHTkFMID0gQEhBVkVfREVDTF9TVFJTSUdOQUxACitIQVZFX0RFQ0xfU1RSVE9JTUFYID0gQEhBVkVfREVDTF9TVFJUT0lNQVhACitIQVZFX0RFQ0xfU1RSVE9LX1IgPSBASEFWRV9ERUNMX1NUUlRPS19SQAorSEFWRV9ERUNMX1NUUlRPVU1BWCA9IEBIQVZFX0RFQ0xfU1RSVE9VTUFYQAorSEFWRV9ERUNMX1RBTkwgPSBASEFWRV9ERUNMX1RBTkxACitIQVZFX0RFQ0xfVFJVTkMgPSBASEFWRV9ERUNMX1RSVU5DQAorSEFWRV9ERUNMX1RSVU5DRiA9IEBIQVZFX0RFQ0xfVFJVTkNGQAorSEFWRV9ERUNMX1RSVU5DTCA9IEBIQVZFX0RFQ0xfVFJVTkNMQAorSEFWRV9ERUNMX1RUWU5BTUVfUiA9IEBIQVZFX0RFQ0xfVFRZTkFNRV9SQAorSEFWRV9ERUNMX1VOU0VURU5WID0gQEhBVkVfREVDTF9VTlNFVEVOVkAKK0hBVkVfREVDTF9WU05QUklOVEYgPSBASEFWRV9ERUNMX1ZTTlBSSU5URkAKK0hBVkVfREVDTF9XQ1RPQiA9IEBIQVZFX0RFQ0xfV0NUT0JACitIQVZFX0RFQ0xfV0NXSURUSCA9IEBIQVZFX0RFQ0xfV0NXSURUSEAKK0hBVkVfRFBSSU5URiA9IEBIQVZFX0RQUklOVEZACitIQVZFX0RVUDIgPSBASEFWRV9EVVAyQAorSEFWRV9EVVAzID0gQEhBVkVfRFVQM0AKK0hBVkVfRVVJREFDQ0VTUyA9IEBIQVZFX0VVSURBQ0NFU1NACitIQVZFX0VYUEYgPSBASEFWRV9FWFBGQAorSEFWRV9FWFBMID0gQEhBVkVfRVhQTEAKK0hBVkVfRVhQTTEgPSBASEFWRV9FWFBNMUAKK0hBVkVfRVhQTTFGID0gQEhBVkVfRVhQTTFGQAorSEFWRV9GQUJTRiA9IEBIQVZFX0ZBQlNGQAorSEFWRV9GQUJTTCA9IEBIQVZFX0ZBQlNMQAorSEFWRV9GQUNDRVNTQVQgPSBASEFWRV9GQUNDRVNTQVRACitIQVZFX0ZDSERJUiA9IEBIQVZFX0ZDSERJUkAKK0hBVkVfRkNITU9EQVQgPSBASEFWRV9GQ0hNT0RBVEAKK0hBVkVfRkNIT1dOQVQgPSBASEFWRV9GQ0hPV05BVEAKK0hBVkVfRkNOVEwgPSBASEFWRV9GQ05UTEAKK0hBVkVfRkRBVEFTWU5DID0gQEhBVkVfRkRBVEFTWU5DQAorSEFWRV9GRUFUVVJFU19IID0gQEhBVkVfRkVBVFVSRVNfSEAKK0hBVkVfRkZTTCA9IEBIQVZFX0ZGU0xACitIQVZFX0ZGU0xMID0gQEhBVkVfRkZTTExACitIQVZFX0ZNQSA9IEBIQVZFX0ZNQUAKK0hBVkVfRk1BRiA9IEBIQVZFX0ZNQUZACitIQVZFX0ZNQUwgPSBASEFWRV9GTUFMQAorSEFWRV9GTU9ERiA9IEBIQVZFX0ZNT0RGQAorSEFWRV9GTU9ETCA9IEBIQVZFX0ZNT0RMQAorSEFWRV9GUkVYUEYgPSBASEFWRV9GUkVYUEZACitIQVZFX0ZTRUVLTyA9IEBIQVZFX0ZTRUVLT0AKK0hBVkVfRlNUQVRBVCA9IEBIQVZFX0ZTVEFUQVRACitIQVZFX0ZTWU5DID0gQEhBVkVfRlNZTkNACitIQVZFX0ZURUxMTyA9IEBIQVZFX0ZURUxMT0AKK0hBVkVfRlRSVU5DQVRFID0gQEhBVkVfRlRSVU5DQVRFQAorSEFWRV9GVVRJTUVOUyA9IEBIQVZFX0ZVVElNRU5TQAorSEFWRV9HQ0pfQyA9IEBIQVZFX0dDSl9DQAorSEFWRV9HQ0pfSU5fUEFUSCA9IEBIQVZFX0dDSl9JTl9QQVRIQAorSEFWRV9HRVREVEFCTEVTSVpFID0gQEhBVkVfR0VURFRBQkxFU0laRUAKK0hBVkVfR0VUR1JPVVBTID0gQEhBVkVfR0VUR1JPVVBTQAorSEFWRV9HRVRIT1NUTkFNRSA9IEBIQVZFX0dFVEhPU1ROQU1FQAorSEFWRV9HRVRMT0dJTiA9IEBIQVZFX0dFVExPR0lOQAorSEFWRV9HRVRPUFRfSCA9IEBIQVZFX0dFVE9QVF9IQAorSEFWRV9HRVRQQUdFU0laRSA9IEBIQVZFX0dFVFBBR0VTSVpFQAorSEFWRV9HRVRTVUJPUFQgPSBASEFWRV9HRVRTVUJPUFRACitIQVZFX0dJSiA9IEBIQVZFX0dJSkAKK0hBVkVfR0lKX0lOX1BBVEggPSBASEFWRV9HSUpfSU5fUEFUSEAKK0hBVkVfR1JBTlRQVCA9IEBIQVZFX0dSQU5UUFRACitIQVZFX0dST1VQX01FTUJFUiA9IEBIQVZFX0dST1VQX01FTUJFUkAKK0hBVkVfSFlQT1RGID0gQEhBVkVfSFlQT1RGQAorSEFWRV9IWVBPVEwgPSBASEFWRV9IWVBPVExACitIQVZFX0lMT0dCID0gQEhBVkVfSUxPR0JACitIQVZFX0lMT0dCRiA9IEBIQVZFX0lMT0dCRkAKK0hBVkVfSUxPR0JMID0gQEhBVkVfSUxPR0JMQAorSEFWRV9JTlRUWVBFU19IID0gQEhBVkVfSU5UVFlQRVNfSEAKK0hBVkVfSVNOQU5EID0gQEhBVkVfSVNOQU5EQAorSEFWRV9JU05BTkYgPSBASEFWRV9JU05BTkZACitIQVZFX0lTTkFOTCA9IEBIQVZFX0lTTkFOTEAKK0hBVkVfSVNXQkxBTksgPSBASEFWRV9JU1dCTEFOS0AKK0hBVkVfSVNXQ05UUkwgPSBASEFWRV9JU1dDTlRSTEAKK0hBVkVfSkFWQSA9IEBIQVZFX0pBVkFACitIQVZFX0pBVkFDID0gQEhBVkVfSkFWQUNACitIQVZFX0pBVkFDX0VOVlZBUiA9IEBIQVZFX0pBVkFDX0VOVlZBUkAKK0hBVkVfSkFWQUNfSU5fUEFUSCA9IEBIQVZFX0pBVkFDX0lOX1BBVEhACitIQVZFX0pBVkFfRU5WVkFSID0gQEhBVkVfSkFWQV9FTlZWQVJACitIQVZFX0pBVkFfSU5fUEFUSCA9IEBIQVZFX0pBVkFfSU5fUEFUSEAKK0hBVkVfSklLRVMgPSBASEFWRV9KSUtFU0AKK0hBVkVfSklLRVNfSU5fUEFUSCA9IEBIQVZFX0pJS0VTX0lOX1BBVEhACitIQVZFX0pSRSA9IEBIQVZFX0pSRUAKK0hBVkVfSlJFX0lOX1BBVEggPSBASEFWRV9KUkVfSU5fUEFUSEAKK0hBVkVfSlZJRVcgPSBASEFWRV9KVklFV0AKK0hBVkVfSlZJRVdfSU5fUEFUSCA9IEBIQVZFX0pWSUVXX0lOX1BBVEhACitIQVZFX0xDSE1PRCA9IEBIQVZFX0xDSE1PREAKK0hBVkVfTENIT1dOID0gQEhBVkVfTENIT1dOQAorSEFWRV9MREVYUEYgPSBASEFWRV9MREVYUEZACitIQVZFX0xJTksgPSBASEFWRV9MSU5LQAorSEFWRV9MSU5LQVQgPSBASEFWRV9MSU5LQVRACitIQVZFX0xPRzEwRiA9IEBIQVZFX0xPRzEwRkAKK0hBVkVfTE9HMTBMID0gQEhBVkVfTE9HMTBMQAorSEFWRV9MT0cxUCA9IEBIQVZFX0xPRzFQQAorSEFWRV9MT0cxUEYgPSBASEFWRV9MT0cxUEZACitIQVZFX0xPRzFQTCA9IEBIQVZFX0xPRzFQTEAKK0hBVkVfTE9HQkYgPSBASEFWRV9MT0dCRkAKK0hBVkVfTE9HQkwgPSBASEFWRV9MT0dCTEAKK0hBVkVfTE9HRiA9IEBIQVZFX0xPR0ZACitIQVZFX0xPR0wgPSBASEFWRV9MT0dMQAorSEFWRV9MT05HX0xPTkdfSU5UID0gQEhBVkVfTE9OR19MT05HX0lOVEAKK0hBVkVfTFNUQVQgPSBASEFWRV9MU1RBVEAKK0hBVkVfTUJSTEVOID0gQEhBVkVfTUJSTEVOQAorSEFWRV9NQlJUT1dDID0gQEhBVkVfTUJSVE9XQ0AKK0hBVkVfTUJTSU5JVCA9IEBIQVZFX01CU0lOSVRACitIQVZFX01CU0xFTiA9IEBIQVZFX01CU0xFTkAKK0hBVkVfTUJTTlJUT1dDUyA9IEBIQVZFX01CU05SVE9XQ1NACitIQVZFX01CU1JUT1dDUyA9IEBIQVZFX01CU1JUT1dDU0AKK0hBVkVfTUVNQ0hSID0gQEhBVkVfTUVNQ0hSQAorSEFWRV9NRU1QQ1BZID0gQEhBVkVfTUVNUENQWUAKK0hBVkVfTUtESVJBVCA9IEBIQVZFX01LRElSQVRACitIQVZFX01LRFRFTVAgPSBASEFWRV9NS0RURU1QQAorSEFWRV9NS0ZJRk8gPSBASEFWRV9NS0ZJRk9ACitIQVZFX01LRklGT0FUID0gQEhBVkVfTUtGSUZPQVRACitIQVZFX01LTk9EID0gQEhBVkVfTUtOT0RACitIQVZFX01LTk9EQVQgPSBASEFWRV9NS05PREFUQAorSEFWRV9NS09TVEVNUCA9IEBIQVZFX01LT1NURU1QQAorSEFWRV9NS09TVEVNUFMgPSBASEFWRV9NS09TVEVNUFNACitIQVZFX01LU1RFTVAgPSBASEFWRV9NS1NURU1QQAorSEFWRV9NS1NURU1QUyA9IEBIQVZFX01LU1RFTVBTQAorSEFWRV9NT0RGRiA9IEBIQVZFX01PREZGQAorSEFWRV9NT0RGTCA9IEBIQVZFX01PREZMQAorSEFWRV9NU1ZDX0lOVkFMSURfUEFSQU1FVEVSX0hBTkRMRVIgPSBASEFWRV9NU1ZDX0lOVkFMSURfUEFSQU1FVEVSX0hBTkRMRVJACitIQVZFX05BTk9TTEVFUCA9IEBIQVZFX05BTk9TTEVFUEAKK0hBVkVfT1BFTkFUID0gQEhBVkVfT1BFTkFUQAorSEFWRV9PU19IID0gQEhBVkVfT1NfSEAKK0hBVkVfUENMT1NFID0gQEhBVkVfUENMT1NFQAorSEFWRV9QSVBFID0gQEhBVkVfUElQRUAKK0hBVkVfUElQRTIgPSBASEFWRV9QSVBFMkAKK0hBVkVfUE9QRU4gPSBASEFWRV9QT1BFTkAKK0hBVkVfUE9TSVhfT1BFTlBUID0gQEhBVkVfUE9TSVhfT1BFTlBUQAorSEFWRV9QT1NJWF9TSUdOQUxCTE9DS0lORyA9IEBIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HQAorSEFWRV9QT1NJWF9TUEFXTiA9IEBIQVZFX1BPU0lYX1NQQVdOQAorSEFWRV9QT1NJWF9TUEFXTkFUVFJfVCA9IEBIQVZFX1BPU0lYX1NQQVdOQVRUUl9UQAorSEFWRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfVCA9IEBIQVZFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19UQAorSEFWRV9QT1dGID0gQEhBVkVfUE9XRkAKK0hBVkVfUFJFQUQgPSBASEFWRV9QUkVBREAKK0hBVkVfUFRIUkVBRF9TSUdNQVNLID0gQEhBVkVfUFRIUkVBRF9TSUdNQVNLQAorSEFWRV9QVFNOQU1FID0gQEhBVkVfUFRTTkFNRUAKK0hBVkVfUFRTTkFNRV9SID0gQEhBVkVfUFRTTkFNRV9SQAorSEFWRV9QV1JJVEUgPSBASEFWRV9QV1JJVEVACitIQVZFX1JBSVNFID0gQEhBVkVfUkFJU0VACitIQVZFX1JBTkRPTSA9IEBIQVZFX1JBTkRPTUAKK0hBVkVfUkFORE9NX0ggPSBASEFWRV9SQU5ET01fSEAKK0hBVkVfUkFORE9NX1IgPSBASEFWRV9SQU5ET01fUkAKK0hBVkVfUkFXTUVNQ0hSID0gQEhBVkVfUkFXTUVNQ0hSQAorSEFWRV9SRUFETElOSyA9IEBIQVZFX1JFQURMSU5LQAorSEFWRV9SRUFETElOS0FUID0gQEhBVkVfUkVBRExJTktBVEAKK0hBVkVfUkVBTFBBVEggPSBASEFWRV9SRUFMUEFUSEAKK0hBVkVfUkVNQUlOREVSID0gQEhBVkVfUkVNQUlOREVSQAorSEFWRV9SRU1BSU5ERVJGID0gQEhBVkVfUkVNQUlOREVSRkAKK0hBVkVfUkVOQU1FQVQgPSBASEFWRV9SRU5BTUVBVEAKK0hBVkVfUklOVCA9IEBIQVZFX1JJTlRACitIQVZFX1JJTlRMID0gQEhBVkVfUklOVExACitIQVZFX1JQTUFUQ0ggPSBASEFWRV9SUE1BVENIQAorSEFWRV9TQU1FX0xPTkdfRE9VQkxFX0FTX0RPVUJMRSA9IEBIQVZFX1NBTUVfTE9OR19ET1VCTEVfQVNfRE9VQkxFQAorSEFWRV9TQ0hFRF9IID0gQEhBVkVfU0NIRURfSEAKK0hBVkVfU0VURU5WID0gQEhBVkVfU0VURU5WQAorSEFWRV9TRVRIT1NUTkFNRSA9IEBIQVZFX1NFVEhPU1ROQU1FQAorSEFWRV9TSUdBQ1RJT04gPSBASEFWRV9TSUdBQ1RJT05ACitIQVZFX1NJR0hBTkRMRVJfVCA9IEBIQVZFX1NJR0hBTkRMRVJfVEAKK0hBVkVfU0lHSU5GT19UID0gQEhBVkVfU0lHSU5GT19UQAorSEFWRV9TSUdORURfU0lHX0FUT01JQ19UID0gQEhBVkVfU0lHTkVEX1NJR19BVE9NSUNfVEAKK0hBVkVfU0lHTkVEX1dDSEFSX1QgPSBASEFWRV9TSUdORURfV0NIQVJfVEAKK0hBVkVfU0lHTkVEX1dJTlRfVCA9IEBIQVZFX1NJR05FRF9XSU5UX1RACitIQVZFX1NJR1NFVF9UID0gQEhBVkVfU0lHU0VUX1RACitIQVZFX1NJTkYgPSBASEFWRV9TSU5GQAorSEFWRV9TSU5IRiA9IEBIQVZFX1NJTkhGQAorSEFWRV9TSU5MID0gQEhBVkVfU0lOTEAKK0hBVkVfU0xFRVAgPSBASEFWRV9TTEVFUEAKK0hBVkVfU1BBV05fSCA9IEBIQVZFX1NQQVdOX0hACitIQVZFX1NRUlRGID0gQEhBVkVfU1FSVEZACitIQVZFX1NRUlRMID0gQEhBVkVfU1FSVExACitIQVZFX1NURElOVF9IID0gQEhBVkVfU1RESU5UX0hACitIQVZFX1NUUENQWSA9IEBIQVZFX1NUUENQWUAKK0hBVkVfU1RQTkNQWSA9IEBIQVZFX1NUUE5DUFlACitIQVZFX1NUUkNBU0VTVFIgPSBASEFWRV9TVFJDQVNFU1RSQAorSEFWRV9TVFJDSFJOVUwgPSBASEFWRV9TVFJDSFJOVUxACitIQVZFX1NUUlBCUksgPSBASEFWRV9TVFJQQlJLQAorSEFWRV9TVFJQVElNRSA9IEBIQVZFX1NUUlBUSU1FQAorSEFWRV9TVFJTRVAgPSBASEFWRV9TVFJTRVBACitIQVZFX1NUUlRPRCA9IEBIQVZFX1NUUlRPREAKK0hBVkVfU1RSVE9MTCA9IEBIQVZFX1NUUlRPTExACitIQVZFX1NUUlRPVUxMID0gQEhBVkVfU1RSVE9VTExACitIQVZFX1NUUlVDVF9SQU5ET01fREFUQSA9IEBIQVZFX1NUUlVDVF9SQU5ET01fREFUQUAKK0hBVkVfU1RSVUNUX1NDSEVEX1BBUkFNID0gQEhBVkVfU1RSVUNUX1NDSEVEX1BBUkFNQAorSEFWRV9TVFJVQ1RfU0lHQUNUSU9OX1NBX1NJR0FDVElPTiA9IEBIQVZFX1NUUlVDVF9TSUdBQ1RJT05fU0FfU0lHQUNUSU9OQAorSEFWRV9TVFJWRVJTQ01QID0gQEhBVkVfU1RSVkVSU0NNUEAKK0hBVkVfU1lNTElOSyA9IEBIQVZFX1NZTUxJTktACitIQVZFX1NZTUxJTktBVCA9IEBIQVZFX1NZTUxJTktBVEAKK0hBVkVfU1lTX0JJVFlQRVNfSCA9IEBIQVZFX1NZU19CSVRZUEVTX0hACitIQVZFX1NZU19JTlRUWVBFU19IID0gQEhBVkVfU1lTX0lOVFRZUEVTX0hACitIQVZFX1NZU19MT0FEQVZHX0ggPSBASEFWRV9TWVNfTE9BREFWR19IQAorSEFWRV9TWVNfUEFSQU1fSCA9IEBIQVZFX1NZU19QQVJBTV9IQAorSEFWRV9TWVNfVFlQRVNfSCA9IEBIQVZFX1NZU19UWVBFU19IQAorSEFWRV9UQU5GID0gQEhBVkVfVEFORkAKK0hBVkVfVEFOSEYgPSBASEFWRV9UQU5IRkAKK0hBVkVfVEFOTCA9IEBIQVZFX1RBTkxACitIQVZFX1RJTUVHTSA9IEBIQVZFX1RJTUVHTUAKK0hBVkVfVFlQRV9WT0xBVElMRV9TSUdfQVRPTUlDX1QgPSBASEFWRV9UWVBFX1ZPTEFUSUxFX1NJR19BVE9NSUNfVEAKK0hBVkVfVU5JU1REX0ggPSBASEFWRV9VTklTVERfSEAKK0hBVkVfVU5MSU5LQVQgPSBASEFWRV9VTkxJTktBVEAKK0hBVkVfVU5MT0NLUFQgPSBASEFWRV9VTkxPQ0tQVEAKK0hBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCA9IEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRACitIQVZFX1VTTEVFUCA9IEBIQVZFX1VTTEVFUEAKK0hBVkVfVVRJTUVOU0FUID0gQEhBVkVfVVRJTUVOU0FUQAorSEFWRV9WQVNQUklOVEYgPSBASEFWRV9WQVNQUklOVEZACitIQVZFX1ZEUFJJTlRGID0gQEhBVkVfVkRQUklOVEZACitIQVZFX1dDSEFSX0ggPSBASEFWRV9XQ0hBUl9IQAorSEFWRV9XQ0hBUl9UID0gQEhBVkVfV0NIQVJfVEAKK0hBVkVfV0NQQ1BZID0gQEhBVkVfV0NQQ1BZQAorSEFWRV9XQ1BOQ1BZID0gQEhBVkVfV0NQTkNQWUAKK0hBVkVfV0NSVE9NQiA9IEBIQVZFX1dDUlRPTUJACitIQVZFX1dDU0NBU0VDTVAgPSBASEFWRV9XQ1NDQVNFQ01QQAorSEFWRV9XQ1NDQVQgPSBASEFWRV9XQ1NDQVRACitIQVZFX1dDU0NIUiA9IEBIQVZFX1dDU0NIUkAKK0hBVkVfV0NTQ01QID0gQEhBVkVfV0NTQ01QQAorSEFWRV9XQ1NDT0xMID0gQEhBVkVfV0NTQ09MTEAKK0hBVkVfV0NTQ1BZID0gQEhBVkVfV0NTQ1BZQAorSEFWRV9XQ1NDU1BOID0gQEhBVkVfV0NTQ1NQTkAKK0hBVkVfV0NTRFVQID0gQEhBVkVfV0NTRFVQQAorSEFWRV9XQ1NMRU4gPSBASEFWRV9XQ1NMRU5ACitIQVZFX1dDU05DQVNFQ01QID0gQEhBVkVfV0NTTkNBU0VDTVBACitIQVZFX1dDU05DQVQgPSBASEFWRV9XQ1NOQ0FUQAorSEFWRV9XQ1NOQ01QID0gQEhBVkVfV0NTTkNNUEAKK0hBVkVfV0NTTkNQWSA9IEBIQVZFX1dDU05DUFlACitIQVZFX1dDU05MRU4gPSBASEFWRV9XQ1NOTEVOQAorSEFWRV9XQ1NOUlRPTUJTID0gQEhBVkVfV0NTTlJUT01CU0AKK0hBVkVfV0NTUEJSSyA9IEBIQVZFX1dDU1BCUktACitIQVZFX1dDU1JDSFIgPSBASEFWRV9XQ1NSQ0hSQAorSEFWRV9XQ1NSVE9NQlMgPSBASEFWRV9XQ1NSVE9NQlNACitIQVZFX1dDU1NQTiA9IEBIQVZFX1dDU1NQTkAKK0hBVkVfV0NTU1RSID0gQEhBVkVfV0NTU1RSQAorSEFWRV9XQ1NUT0sgPSBASEFWRV9XQ1NUT0tACitIQVZFX1dDU1dJRFRIID0gQEhBVkVfV0NTV0lEVEhACitIQVZFX1dDU1hGUk0gPSBASEFWRV9XQ1NYRlJNQAorSEFWRV9XQ1RSQU5TX1QgPSBASEFWRV9XQ1RSQU5TX1RACitIQVZFX1dDVFlQRV9IID0gQEhBVkVfV0NUWVBFX0hACitIQVZFX1dDVFlQRV9UID0gQEhBVkVfV0NUWVBFX1RACitIQVZFX1dJTlNPQ0syX0ggPSBASEFWRV9XSU5TT0NLMl9IQAorSEFWRV9XSU5UX1QgPSBASEFWRV9XSU5UX1RACitIQVZFX1dNRU1DSFIgPSBASEFWRV9XTUVNQ0hSQAorSEFWRV9XTUVNQ01QID0gQEhBVkVfV01FTUNNUEAKK0hBVkVfV01FTUNQWSA9IEBIQVZFX1dNRU1DUFlACitIQVZFX1dNRU1NT1ZFID0gQEhBVkVfV01FTU1PVkVACitIQVZFX1dNRU1TRVQgPSBASEFWRV9XTUVNU0VUQAogSEFWRV9fQk9PTCA9IEBIQVZFX19CT09MQAorSEFWRV9fRVhJVCA9IEBIQVZFX19FWElUQAorSEVMUDJNQU4gPSBASEVMUDJNQU5ACitJTkNMVURFX05FWFQgPSBASU5DTFVERV9ORVhUQAorSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRSA9IEBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFQAorSU5TVEFMTCA9IEBJTlNUQUxMQAogSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKIElOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACiBJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKIElOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlQzMl9NQVhfTFRfSU5UTUFYX01BWCA9IEBJTlQzMl9NQVhfTFRfSU5UTUFYX01BWEAKK0lOVDY0X01BWF9FUV9MT05HX01BWCA9IEBJTlQ2NF9NQVhfRVFfTE9OR19NQVhACiBJTlRMTElCUyA9IEBJTlRMTElCU0AKIElOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lTTkFORF9MSUJNID0gQElTTkFORF9MSUJNQAorSVNOQU5GX0xJQk0gPSBASVNOQU5GX0xJQk1ACitJU05BTkxfTElCTSA9IEBJU05BTkxfTElCTUAKK0lTTkFOX0xJQk0gPSBASVNOQU5fTElCTUAKK0xERVhQTF9MSUJNID0gQExERVhQTF9MSUJNQAorTERFWFBfTElCTSA9IEBMREVYUF9MSUJNQAogTERGTEFHUyA9IEBMREZMQUdTQAogTEVYID0gQExFWEAKIExFWExJQiA9IEBMRVhMSUJACitMRVhfSVNfRkxFWCA9IEBMRVhfSVNfRkxFWEAKIExFWF9PVVRQVVRfUk9PVCA9IEBMRVhfT1VUUFVUX1JPT1RACitMSUJCSVNPTl9MSUJERVBTID0gQExJQkJJU09OX0xJQkRFUFNACitMSUJCSVNPTl9MVExJQkRFUFMgPSBATElCQklTT05fTFRMSUJERVBTQAogTElCSUNPTlYgPSBATElCSUNPTlZACiBMSUJJTlRMID0gQExJQklOVExACitMSUJNVUxUSVRIUkVBRCA9IEBMSUJNVUxUSVRIUkVBREAKIExJQk9CSlMgPSBATElCT0JKU0AKK0xJQlBUSCA9IEBMSUJQVEhACitMSUJQVEhfUFJFRklYID0gQExJQlBUSF9QUkVGSVhACiBMSUJTID0gQExJQlNACitMSUJUSFJFQUQgPSBATElCVEhSRUFEQAorTElCVU5JU1RSSU5HX1VOSVRZUEVTX0ggPSBATElCVU5JU1RSSU5HX1VOSVRZUEVTX0hACitMSUJVTklTVFJJTkdfVU5JV0lEVEhfSCA9IEBMSUJVTklTVFJJTkdfVU5JV0lEVEhfSEAKK0xPQ0FMQ0hBUlNFVF9URVNUU19FTlZJUk9OTUVOVCA9IEBMT0NBTENIQVJTRVRfVEVTVFNfRU5WSVJPTk1FTlRACitMT0NBTEVfRlJfVVRGOCA9IEBMT0NBTEVfRlJfVVRGOEAKK0xPQ0FMRV9KQSA9IEBMT0NBTEVfSkFACitMT0NBTEVfWkhfQ04gPSBATE9DQUxFX1pIX0NOQAogTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAogTFRMSUJJTlRMID0gQExUTElCSU5UTEAKK0xUTElCTVVMVElUSFJFQUQgPSBATFRMSUJNVUxUSVRIUkVBREAKIExUTElCT0JKUyA9IEBMVExJQk9CSlNACitMVExJQlBUSCA9IEBMVExJQlBUSEAKK0xUTElCVEhSRUFEID0gQExUTElCVEhSRUFEQAogTTQgPSBATTRACitNNF9ERUJVR0ZJTEUgPSBATTRfREVCVUdGSUxFQAorTTRfR05VID0gQE00X0dOVUAKIE1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUtJTlNUQUxMRElSUyA9IEBNS0lOU1RBTExESVJTQAorTUtESVJfUCA9IEBNS0RJUl9QQAogTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKIE1TR01FUkdFID0gQE1TR01FUkdFQAotTzBDRkxBR1MgPSBATzBDRkxBR1NACi1PMENYWEZMQUdTID0gQE8wQ1hYRkxBR1NACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9FUlJOT19IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX0VSUk5PX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9GQ05UTF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX0ZDTlRMX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9GTE9BVF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX0ZMT0FUX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9HRVRPUFRfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9HRVRPUFRfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0lOVFRZUEVTX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfSU5UVFlQRVNfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX01BVEhfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9NQVRIX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TQ0hFRF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NDSEVEX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TSUdOQUxfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TSUdOQUxfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NQQVdOX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1BBV05fSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURERFRl9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURERFRl9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RESU5UX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RESU5UX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERJT19IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURElPX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERMSUJfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERMSUJfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NUUklOR19IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NUUklOR19IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1lTX1NUQVRfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfU1RBVF9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1lTX1RZUEVTX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1lTX1RZUEVTX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfV0FJVF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19XQUlUX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9USU1FX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfVElNRV9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfVU5JU1REX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfVU5JU1REX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9XQ0hBUl9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDSEFSX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9XQ1RZUEVfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9XQ1RZUEVfSEAKK05FWFRfRVJSTk9fSCA9IEBORVhUX0VSUk5PX0hACitORVhUX0ZDTlRMX0ggPSBATkVYVF9GQ05UTF9IQAorTkVYVF9GTE9BVF9IID0gQE5FWFRfRkxPQVRfSEAKK05FWFRfR0VUT1BUX0ggPSBATkVYVF9HRVRPUFRfSEAKK05FWFRfSU5UVFlQRVNfSCA9IEBORVhUX0lOVFRZUEVTX0hACitORVhUX01BVEhfSCA9IEBORVhUX01BVEhfSEAKK05FWFRfU0NIRURfSCA9IEBORVhUX1NDSEVEX0hACitORVhUX1NJR05BTF9IID0gQE5FWFRfU0lHTkFMX0hACitORVhUX1NQQVdOX0ggPSBATkVYVF9TUEFXTl9IQAorTkVYVF9TVERERUZfSCA9IEBORVhUX1NURERFRl9IQAorTkVYVF9TVERJTlRfSCA9IEBORVhUX1NURElOVF9IQAorTkVYVF9TVERJT19IID0gQE5FWFRfU1RESU9fSEAKK05FWFRfU1RETElCX0ggPSBATkVYVF9TVERMSUJfSEAKK05FWFRfU1RSSU5HX0ggPSBATkVYVF9TVFJJTkdfSEAKK05FWFRfU1lTX1NUQVRfSCA9IEBORVhUX1NZU19TVEFUX0hACitORVhUX1NZU19UWVBFU19IID0gQE5FWFRfU1lTX1RZUEVTX0hACitORVhUX1NZU19XQUlUX0ggPSBATkVYVF9TWVNfV0FJVF9IQAorTkVYVF9USU1FX0ggPSBATkVYVF9USU1FX0hACitORVhUX1VOSVNURF9IID0gQE5FWFRfVU5JU1REX0hACitORVhUX1dDSEFSX0ggPSBATkVYVF9XQ0hBUl9IQAorTkVYVF9XQ1RZUEVfSCA9IEBORVhUX1dDVFlQRV9IQAogT0JKRVhUID0gQE9CSkVYVEAKIFBBQ0tBR0UgPSBAUEFDS0FHRUAKIFBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9DT1BZUklHSFRfWUVBUiA9IEBQQUNLQUdFX0NPUFlSSUdIVF9ZRUFSQAogUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKIFBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAogUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAogUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKIFBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEVSTCA9IEBQRVJMQAogUE9TVUIgPSBAUE9TVUJACitQUkFHTUFfQ09MVU1OUyA9IEBQUkFHTUFfQ09MVU1OU0AKK1BSQUdNQV9TWVNURU1fSEVBREVSID0gQFBSQUdNQV9TWVNURU1fSEVBREVSQAorUFJJUFRSX1BSRUZJWCA9IEBQUklQVFJfUFJFRklYQAorUFJJX01BQ1JPU19CUk9LRU4gPSBAUFJJX01BQ1JPU19CUk9LRU5ACitQVEhSRUFEX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUMgPSBAUFRIUkVBRF9IX0RFRklORVNfU1RSVUNUX1RJTUVTUEVDQAorUFRSRElGRl9UX1NVRkZJWCA9IEBQVFJESUZGX1RfU1VGRklYQAogUkFOTElCID0gQFJBTkxJQkAKK1JFUExBQ0VfQlRPV0MgPSBAUkVQTEFDRV9CVE9XQ0AKK1JFUExBQ0VfQ0FMTE9DID0gQFJFUExBQ0VfQ0FMTE9DQAorUkVQTEFDRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FID0gQFJFUExBQ0VfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRUAKK1JFUExBQ0VfQ0JSVEYgPSBAUkVQTEFDRV9DQlJURkAKK1JFUExBQ0VfQ0JSVEwgPSBAUkVQTEFDRV9DQlJUTEAKK1JFUExBQ0VfQ0VJTCA9IEBSRVBMQUNFX0NFSUxACitSRVBMQUNFX0NFSUxGID0gQFJFUExBQ0VfQ0VJTEZACitSRVBMQUNFX0NFSUxMID0gQFJFUExBQ0VfQ0VJTExACitSRVBMQUNFX0NIT1dOID0gQFJFUExBQ0VfQ0hPV05ACitSRVBMQUNFX0NMT1NFID0gQFJFUExBQ0VfQ0xPU0VACitSRVBMQUNFX0RQUklOVEYgPSBAUkVQTEFDRV9EUFJJTlRGQAorUkVQTEFDRV9EVVAgPSBAUkVQTEFDRV9EVVBACitSRVBMQUNFX0RVUDIgPSBAUkVQTEFDRV9EVVAyQAorUkVQTEFDRV9FWFAyID0gQFJFUExBQ0VfRVhQMkAKK1JFUExBQ0VfRVhQMkwgPSBAUkVQTEFDRV9FWFAyTEAKK1JFUExBQ0VfRVhQTTEgPSBAUkVQTEFDRV9FWFBNMUAKK1JFUExBQ0VfRVhQTTFGID0gQFJFUExBQ0VfRVhQTTFGQAorUkVQTEFDRV9GQUJTTCA9IEBSRVBMQUNFX0ZBQlNMQAorUkVQTEFDRV9GQ0hPV05BVCA9IEBSRVBMQUNFX0ZDSE9XTkFUQAorUkVQTEFDRV9GQ0xPU0UgPSBAUkVQTEFDRV9GQ0xPU0VACitSRVBMQUNFX0ZDTlRMID0gQFJFUExBQ0VfRkNOVExACitSRVBMQUNFX0ZET1BFTiA9IEBSRVBMQUNFX0ZET1BFTkAKK1JFUExBQ0VfRkZMVVNIID0gQFJFUExBQ0VfRkZMVVNIQAorUkVQTEFDRV9GTE9PUiA9IEBSRVBMQUNFX0ZMT09SQAorUkVQTEFDRV9GTE9PUkYgPSBAUkVQTEFDRV9GTE9PUkZACitSRVBMQUNFX0ZMT09STCA9IEBSRVBMQUNFX0ZMT09STEAKK1JFUExBQ0VfRk1BID0gQFJFUExBQ0VfRk1BQAorUkVQTEFDRV9GTUFGID0gQFJFUExBQ0VfRk1BRkAKK1JFUExBQ0VfRk1BTCA9IEBSRVBMQUNFX0ZNQUxACitSRVBMQUNFX0ZNT0QgPSBAUkVQTEFDRV9GTU9EQAorUkVQTEFDRV9GTU9ERiA9IEBSRVBMQUNFX0ZNT0RGQAorUkVQTEFDRV9GTU9ETCA9IEBSRVBMQUNFX0ZNT0RMQAorUkVQTEFDRV9GT1BFTiA9IEBSRVBMQUNFX0ZPUEVOQAorUkVQTEFDRV9GUFJJTlRGID0gQFJFUExBQ0VfRlBSSU5URkAKK1JFUExBQ0VfRlBVUkdFID0gQFJFUExBQ0VfRlBVUkdFQAorUkVQTEFDRV9GUkVPUEVOID0gQFJFUExBQ0VfRlJFT1BFTkAKK1JFUExBQ0VfRlJFWFAgPSBAUkVQTEFDRV9GUkVYUEAKK1JFUExBQ0VfRlJFWFBGID0gQFJFUExBQ0VfRlJFWFBGQAorUkVQTEFDRV9GUkVYUEwgPSBAUkVQTEFDRV9GUkVYUExACitSRVBMQUNFX0ZTRUVLID0gQFJFUExBQ0VfRlNFRUtACitSRVBMQUNFX0ZTRUVLTyA9IEBSRVBMQUNFX0ZTRUVLT0AKK1JFUExBQ0VfRlNUQVQgPSBAUkVQTEFDRV9GU1RBVEAKK1JFUExBQ0VfRlNUQVRBVCA9IEBSRVBMQUNFX0ZTVEFUQVRACitSRVBMQUNFX0ZURUxMID0gQFJFUExBQ0VfRlRFTExACitSRVBMQUNFX0ZURUxMTyA9IEBSRVBMQUNFX0ZURUxMT0AKK1JFUExBQ0VfRlRSVU5DQVRFID0gQFJFUExBQ0VfRlRSVU5DQVRFQAorUkVQTEFDRV9GVVRJTUVOUyA9IEBSRVBMQUNFX0ZVVElNRU5TQAorUkVQTEFDRV9HRVRDV0QgPSBAUkVQTEFDRV9HRVRDV0RACitSRVBMQUNFX0dFVERFTElNID0gQFJFUExBQ0VfR0VUREVMSU1ACitSRVBMQUNFX0dFVERPTUFJTk5BTUUgPSBAUkVQTEFDRV9HRVRET01BSU5OQU1FQAorUkVQTEFDRV9HRVRHUk9VUFMgPSBAUkVQTEFDRV9HRVRHUk9VUFNACitSRVBMQUNFX0dFVExJTkUgPSBAUkVQTEFDRV9HRVRMSU5FQAorUkVQTEFDRV9HRVRMT0dJTl9SID0gQFJFUExBQ0VfR0VUTE9HSU5fUkAKK1JFUExBQ0VfR0VUUEFHRVNJWkUgPSBAUkVQTEFDRV9HRVRQQUdFU0laRUAKK1JFUExBQ0VfSFVHRV9WQUwgPSBAUkVQTEFDRV9IVUdFX1ZBTEAKK1JFUExBQ0VfSFlQT1QgPSBAUkVQTEFDRV9IWVBPVEAKK1JFUExBQ0VfSFlQT1RGID0gQFJFUExBQ0VfSFlQT1RGQAorUkVQTEFDRV9IWVBPVEwgPSBAUkVQTEFDRV9IWVBPVExACitSRVBMQUNFX0lMT0dCID0gQFJFUExBQ0VfSUxPR0JACitSRVBMQUNFX0lMT0dCRiA9IEBSRVBMQUNFX0lMT0dCRkAKK1JFUExBQ0VfSVNBVFRZID0gQFJFUExBQ0VfSVNBVFRZQAorUkVQTEFDRV9JU0ZJTklURSA9IEBSRVBMQUNFX0lTRklOSVRFQAorUkVQTEFDRV9JU0lORiA9IEBSRVBMQUNFX0lTSU5GQAorUkVQTEFDRV9JU05BTiA9IEBSRVBMQUNFX0lTTkFOQAorUkVQTEFDRV9JU1dCTEFOSyA9IEBSRVBMQUNFX0lTV0JMQU5LQAorUkVQTEFDRV9JU1dDTlRSTCA9IEBSRVBMQUNFX0lTV0NOVFJMQAorUkVQTEFDRV9JVE9MRCA9IEBSRVBMQUNFX0lUT0xEQAorUkVQTEFDRV9MQ0hPV04gPSBAUkVQTEFDRV9MQ0hPV05ACitSRVBMQUNFX0xERVhQTCA9IEBSRVBMQUNFX0xERVhQTEAKK1JFUExBQ0VfTElOSyA9IEBSRVBMQUNFX0xJTktACitSRVBMQUNFX0xJTktBVCA9IEBSRVBMQUNFX0xJTktBVEAKK1JFUExBQ0VfTE9DQUxUSU1FX1IgPSBAUkVQTEFDRV9MT0NBTFRJTUVfUkAKK1JFUExBQ0VfTE9HID0gQFJFUExBQ0VfTE9HQAorUkVQTEFDRV9MT0cxMCA9IEBSRVBMQUNFX0xPRzEwQAorUkVQTEFDRV9MT0cxMEYgPSBAUkVQTEFDRV9MT0cxMEZACitSRVBMQUNFX0xPRzEwTCA9IEBSRVBMQUNFX0xPRzEwTEAKK1JFUExBQ0VfTE9HMVAgPSBAUkVQTEFDRV9MT0cxUEAKK1JFUExBQ0VfTE9HMVBGID0gQFJFUExBQ0VfTE9HMVBGQAorUkVQTEFDRV9MT0cxUEwgPSBAUkVQTEFDRV9MT0cxUExACitSRVBMQUNFX0xPRzIgPSBAUkVQTEFDRV9MT0cyQAorUkVQTEFDRV9MT0cyRiA9IEBSRVBMQUNFX0xPRzJGQAorUkVQTEFDRV9MT0cyTCA9IEBSRVBMQUNFX0xPRzJMQAorUkVQTEFDRV9MT0dCID0gQFJFUExBQ0VfTE9HQkAKK1JFUExBQ0VfTE9HQkYgPSBAUkVQTEFDRV9MT0dCRkAKK1JFUExBQ0VfTE9HQkwgPSBAUkVQTEFDRV9MT0dCTEAKK1JFUExBQ0VfTE9HRiA9IEBSRVBMQUNFX0xPR0ZACitSRVBMQUNFX0xPR0wgPSBAUkVQTEFDRV9MT0dMQAorUkVQTEFDRV9MU0VFSyA9IEBSRVBMQUNFX0xTRUVLQAorUkVQTEFDRV9MU1RBVCA9IEBSRVBMQUNFX0xTVEFUQAorUkVQTEFDRV9NQUxMT0MgPSBAUkVQTEFDRV9NQUxMT0NACitSRVBMQUNFX01CUkxFTiA9IEBSRVBMQUNFX01CUkxFTkAKK1JFUExBQ0VfTUJSVE9XQyA9IEBSRVBMQUNFX01CUlRPV0NACitSRVBMQUNFX01CU0lOSVQgPSBAUkVQTEFDRV9NQlNJTklUQAorUkVQTEFDRV9NQlNOUlRPV0NTID0gQFJFUExBQ0VfTUJTTlJUT1dDU0AKK1JFUExBQ0VfTUJTUlRPV0NTID0gQFJFUExBQ0VfTUJTUlRPV0NTQAorUkVQTEFDRV9NQlNUQVRFX1QgPSBAUkVQTEFDRV9NQlNUQVRFX1RACitSRVBMQUNFX01CVE9XQyA9IEBSRVBMQUNFX01CVE9XQ0AKK1JFUExBQ0VfTUVNQ0hSID0gQFJFUExBQ0VfTUVNQ0hSQAorUkVQTEFDRV9NRU1NRU0gPSBAUkVQTEFDRV9NRU1NRU1ACitSRVBMQUNFX01LRElSID0gQFJFUExBQ0VfTUtESVJACitSRVBMQUNFX01LRklGTyA9IEBSRVBMQUNFX01LRklGT0AKK1JFUExBQ0VfTUtOT0QgPSBAUkVQTEFDRV9NS05PREAKK1JFUExBQ0VfTUtTVEVNUCA9IEBSRVBMQUNFX01LU1RFTVBACitSRVBMQUNFX01LVElNRSA9IEBSRVBMQUNFX01LVElNRUAKK1JFUExBQ0VfTU9ERiA9IEBSRVBMQUNFX01PREZACitSRVBMQUNFX01PREZGID0gQFJFUExBQ0VfTU9ERkZACitSRVBMQUNFX01PREZMID0gQFJFUExBQ0VfTU9ERkxACitSRVBMQUNFX05BTiA9IEBSRVBMQUNFX05BTkAKK1JFUExBQ0VfTkFOT1NMRUVQID0gQFJFUExBQ0VfTkFOT1NMRUVQQAorUkVQTEFDRV9OVUxMID0gQFJFUExBQ0VfTlVMTEAKK1JFUExBQ0VfT0JTVEFDS19QUklOVEYgPSBAUkVQTEFDRV9PQlNUQUNLX1BSSU5URkAKK1JFUExBQ0VfT1BFTiA9IEBSRVBMQUNFX09QRU5ACitSRVBMQUNFX09QRU5BVCA9IEBSRVBMQUNFX09QRU5BVEAKK1JFUExBQ0VfUEVSUk9SID0gQFJFUExBQ0VfUEVSUk9SQAorUkVQTEFDRV9QT1BFTiA9IEBSRVBMQUNFX1BPUEVOQAorUkVQTEFDRV9QT1NJWF9TUEFXTiA9IEBSRVBMQUNFX1BPU0lYX1NQQVdOQAorUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQUREQ0xPU0UgPSBAUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQUREQ0xPU0VACitSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BREREVVAyID0gQFJFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDJACitSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERPUEVOID0gQFJFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU5ACitSRVBMQUNFX1BSRUFEID0gQFJFUExBQ0VfUFJFQURACitSRVBMQUNFX1BSSU5URiA9IEBSRVBMQUNFX1BSSU5URkAKK1JFUExBQ0VfUFRIUkVBRF9TSUdNQVNLID0gQFJFUExBQ0VfUFRIUkVBRF9TSUdNQVNLQAorUkVQTEFDRV9QVFNOQU1FID0gQFJFUExBQ0VfUFRTTkFNRUAKK1JFUExBQ0VfUFRTTkFNRV9SID0gQFJFUExBQ0VfUFRTTkFNRV9SQAorUkVQTEFDRV9QVVRFTlYgPSBAUkVQTEFDRV9QVVRFTlZACitSRVBMQUNFX1BXUklURSA9IEBSRVBMQUNFX1BXUklURUAKK1JFUExBQ0VfUkFJU0UgPSBAUkVQTEFDRV9SQUlTRUAKK1JFUExBQ0VfUkFORE9NX1IgPSBAUkVQTEFDRV9SQU5ET01fUkAKK1JFUExBQ0VfUkVBRCA9IEBSRVBMQUNFX1JFQURACitSRVBMQUNFX1JFQURMSU5LID0gQFJFUExBQ0VfUkVBRExJTktACitSRVBMQUNFX1JFQUxMT0MgPSBAUkVQTEFDRV9SRUFMTE9DQAorUkVQTEFDRV9SRUFMUEFUSCA9IEBSRVBMQUNFX1JFQUxQQVRIQAorUkVQTEFDRV9SRU1BSU5ERVIgPSBAUkVQTEFDRV9SRU1BSU5ERVJACitSRVBMQUNFX1JFTUFJTkRFUkYgPSBAUkVQTEFDRV9SRU1BSU5ERVJGQAorUkVQTEFDRV9SRU1BSU5ERVJMID0gQFJFUExBQ0VfUkVNQUlOREVSTEAKK1JFUExBQ0VfUkVNT1ZFID0gQFJFUExBQ0VfUkVNT1ZFQAorUkVQTEFDRV9SRU5BTUUgPSBAUkVQTEFDRV9SRU5BTUVACitSRVBMQUNFX1JFTkFNRUFUID0gQFJFUExBQ0VfUkVOQU1FQVRACitSRVBMQUNFX1JNRElSID0gQFJFUExBQ0VfUk1ESVJACitSRVBMQUNFX1JPVU5EID0gQFJFUExBQ0VfUk9VTkRACitSRVBMQUNFX1JPVU5ERiA9IEBSRVBMQUNFX1JPVU5ERkAKK1JFUExBQ0VfUk9VTkRMID0gQFJFUExBQ0VfUk9VTkRMQAorUkVQTEFDRV9TRVRFTlYgPSBAUkVQTEFDRV9TRVRFTlZACitSRVBMQUNFX1NJR05CSVQgPSBAUkVQTEFDRV9TSUdOQklUQAorUkVQTEFDRV9TSUdOQklUX1VTSU5HX0dDQyA9IEBSRVBMQUNFX1NJR05CSVRfVVNJTkdfR0NDQAorUkVQTEFDRV9TTEVFUCA9IEBSRVBMQUNFX1NMRUVQQAorUkVQTEFDRV9TTlBSSU5URiA9IEBSRVBMQUNFX1NOUFJJTlRGQAorUkVQTEFDRV9TUFJJTlRGID0gQFJFUExBQ0VfU1BSSU5URkAKK1JFUExBQ0VfU1FSVEwgPSBAUkVQTEFDRV9TUVJUTEAKK1JFUExBQ0VfU1RBVCA9IEBSRVBMQUNFX1NUQVRACitSRVBMQUNFX1NURElPX1JFQURfRlVOQ1MgPSBAUkVQTEFDRV9TVERJT19SRUFEX0ZVTkNTQAorUkVQTEFDRV9TVERJT19XUklURV9GVU5DUyA9IEBSRVBMQUNFX1NURElPX1dSSVRFX0ZVTkNTQAorUkVQTEFDRV9TVFBOQ1BZID0gQFJFUExBQ0VfU1RQTkNQWUAKK1JFUExBQ0VfU1RSQ0FTRVNUUiA9IEBSRVBMQUNFX1NUUkNBU0VTVFJACitSRVBMQUNFX1NUUkNIUk5VTCA9IEBSRVBMQUNFX1NUUkNIUk5VTEAKK1JFUExBQ0VfU1RSRFVQID0gQFJFUExBQ0VfU1RSRFVQQAorUkVQTEFDRV9TVFJFUlJPUiA9IEBSRVBMQUNFX1NUUkVSUk9SQAorUkVQTEFDRV9TVFJFUlJPUl9SID0gQFJFUExBQ0VfU1RSRVJST1JfUkAKK1JFUExBQ0VfU1RSTkNBVCA9IEBSRVBMQUNFX1NUUk5DQVRACitSRVBMQUNFX1NUUk5EVVAgPSBAUkVQTEFDRV9TVFJORFVQQAorUkVQTEFDRV9TVFJOTEVOID0gQFJFUExBQ0VfU1RSTkxFTkAKK1JFUExBQ0VfU1RSU0lHTkFMID0gQFJFUExBQ0VfU1RSU0lHTkFMQAorUkVQTEFDRV9TVFJTVFIgPSBAUkVQTEFDRV9TVFJTVFJACitSRVBMQUNFX1NUUlRPRCA9IEBSRVBMQUNFX1NUUlRPREAKK1JFUExBQ0VfU1RSVE9JTUFYID0gQFJFUExBQ0VfU1RSVE9JTUFYQAorUkVQTEFDRV9TVFJUT0tfUiA9IEBSRVBMQUNFX1NUUlRPS19SQAorUkVQTEFDRV9TWU1MSU5LID0gQFJFUExBQ0VfU1lNTElOS0AKK1JFUExBQ0VfVElNRUdNID0gQFJFUExBQ0VfVElNRUdNQAorUkVQTEFDRV9UTVBGSUxFID0gQFJFUExBQ0VfVE1QRklMRUAKK1JFUExBQ0VfVE9XTE9XRVIgPSBAUkVQTEFDRV9UT1dMT1dFUkAKK1JFUExBQ0VfVFJVTkMgPSBAUkVQTEFDRV9UUlVOQ0AKK1JFUExBQ0VfVFJVTkNGID0gQFJFUExBQ0VfVFJVTkNGQAorUkVQTEFDRV9UUlVOQ0wgPSBAUkVQTEFDRV9UUlVOQ0xACitSRVBMQUNFX1RUWU5BTUVfUiA9IEBSRVBMQUNFX1RUWU5BTUVfUkAKK1JFUExBQ0VfVU5MSU5LID0gQFJFUExBQ0VfVU5MSU5LQAorUkVQTEFDRV9VTkxJTktBVCA9IEBSRVBMQUNFX1VOTElOS0FUQAorUkVQTEFDRV9VTlNFVEVOViA9IEBSRVBMQUNFX1VOU0VURU5WQAorUkVQTEFDRV9VU0xFRVAgPSBAUkVQTEFDRV9VU0xFRVBACitSRVBMQUNFX1VUSU1FTlNBVCA9IEBSRVBMQUNFX1VUSU1FTlNBVEAKK1JFUExBQ0VfVkFTUFJJTlRGID0gQFJFUExBQ0VfVkFTUFJJTlRGQAorUkVQTEFDRV9WRFBSSU5URiA9IEBSRVBMQUNFX1ZEUFJJTlRGQAorUkVQTEFDRV9WRlBSSU5URiA9IEBSRVBMQUNFX1ZGUFJJTlRGQAorUkVQTEFDRV9WUFJJTlRGID0gQFJFUExBQ0VfVlBSSU5URkAKK1JFUExBQ0VfVlNOUFJJTlRGID0gQFJFUExBQ0VfVlNOUFJJTlRGQAorUkVQTEFDRV9WU1BSSU5URiA9IEBSRVBMQUNFX1ZTUFJJTlRGQAorUkVQTEFDRV9XQ1JUT01CID0gQFJFUExBQ0VfV0NSVE9NQkAKK1JFUExBQ0VfV0NTTlJUT01CUyA9IEBSRVBMQUNFX1dDU05SVE9NQlNACitSRVBMQUNFX1dDU1JUT01CUyA9IEBSRVBMQUNFX1dDU1JUT01CU0AKK1JFUExBQ0VfV0NTV0lEVEggPSBAUkVQTEFDRV9XQ1NXSURUSEAKK1JFUExBQ0VfV0NUT0IgPSBAUkVQTEFDRV9XQ1RPQkAKK1JFUExBQ0VfV0NUT01CID0gQFJFUExBQ0VfV0NUT01CQAorUkVQTEFDRV9XQ1dJRFRIID0gQFJFUExBQ0VfV0NXSURUSEAKK1JFUExBQ0VfV1JJVEUgPSBAUkVQTEFDRV9XUklURUAKK1NDSEVEX0ggPSBAU0NIRURfSEAKIFNFVF9NQUtFID0gQFNFVF9NQUtFQAogU0hFTEwgPSBAU0hFTExACitTSUdfQVRPTUlDX1RfU1VGRklYID0gQFNJR19BVE9NSUNfVF9TVUZGSVhACitTSVpFX1RfU1VGRklYID0gQFNJWkVfVF9TVUZGSVhACiBTVERCT09MX0ggPSBAU1REQk9PTF9IQAorU1REREVGX0ggPSBAU1REREVGX0hACitTVERJTlRfSCA9IEBTVERJTlRfSEAKIFNUUklQID0gQFNUUklQQAotVU5JU1REX0ggPSBAVU5JU1REX0hACitTWVNfVElNRV9IX0RFRklORVNfU1RSVUNUX1RJTUVTUEVDID0gQFNZU19USU1FX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUNACitUSU1FX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUMgPSBAVElNRV9IX0RFRklORVNfU1RSVUNUX1RJTUVTUEVDQAorVUlOVDMyX01BWF9MVF9VSU5UTUFYX01BWCA9IEBVSU5UMzJfTUFYX0xUX1VJTlRNQVhfTUFYQAorVUlOVDY0X01BWF9FUV9VTE9OR19NQVggPSBAVUlOVDY0X01BWF9FUV9VTE9OR19NQVhACitVTkRFRklORV9TVFJUT0tfUiA9IEBVTkRFRklORV9TVFJUT0tfUkAKK1VOSVNURF9IX0hBVkVfV0lOU09DSzJfSCA9IEBVTklTVERfSF9IQVZFX1dJTlNPQ0syX0hACitVTklTVERfSF9IQVZFX1dJTlNPQ0syX0hfQU5EX1VTRV9TT0NLRVRTID0gQFVOSVNURF9IX0hBVkVfV0lOU09DSzJfSF9BTkRfVVNFX1NPQ0tFVFNACiBVU0VfTkxTID0gQFVTRV9OTFNACiBWQUxHUklORCA9IEBWQUxHUklOREAKK1ZBTEdSSU5EX1BSRUJJU09OID0gQFZBTEdSSU5EX1BSRUJJU09OQAogVkVSU0lPTiA9IEBWRVJTSU9OQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACitXQVJOX0NGTEFHUyA9IEBXQVJOX0NGTEFHU0AKK1dBUk5fQ0ZMQUdTX1RFU1QgPSBAV0FSTl9DRkxBR1NfVEVTVEAKK1dBUk5fQ1hYRkxBR1MgPSBAV0FSTl9DWFhGTEFHU0AKK1dBUk5fQ1hYRkxBR1NfVEVTVCA9IEBXQVJOX0NYWEZMQUdTX1RFU1RACitXQ0hBUl9UX1NVRkZJWCA9IEBXQ0hBUl9UX1NVRkZJWEAKIFdFUlJPUl9DRkxBR1MgPSBAV0VSUk9SX0NGTEFHU0AKK1dFUlJPUl9DWFhGTEFHUyA9IEBXRVJST1JfQ1hYRkxBR1NACitXSU5ET1dTXzY0X0JJVF9PRkZfVCA9IEBXSU5ET1dTXzY0X0JJVF9PRkZfVEAKK1dJTkRPV1NfNjRfQklUX1NUX1NJWkUgPSBAV0lORE9XU182NF9CSVRfU1RfU0laRUAKK1dJTlRfVF9TVUZGSVggPSBAV0lOVF9UX1NVRkZJWEAKIFhHRVRURVhUID0gQFhHRVRURVhUQAotCitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAorWFNMVFBST0MgPSBAWFNMVFBST0NACiAjIFVzZSBvdXIgb3duIEJpc29uIHRvIGJ1aWxkIHRoZSBwYXJzZXIuICBPZiBjb3Vyc2UsIHlvdSBvdWdodCB0bwogIyBrZWVwIGEgc2FuZSB2ZXJzaW9uIG9mIEJpc29uIG5lYXJieS4uLgotWUFDQyA9IC4uL3Rlc3RzL2Jpc29uIC15CitZQUNDID0gJChCSVNPTikgLXkKIFlBQ0NfTElCUkFSWSA9IEBZQUNDX0xJQlJBUllACiBZQUNDX1NDUklQVCA9IEBZQUNDX1NDUklQVEAKK1lGTEFHUyA9IEBZRkxBR1NACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACiBhY19jdF9DQyA9IEBhY19jdF9DQ0AKIGFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9SQU5MSUIgPSBAYWNfY3RfUkFOTElCQAotYWNfY3RfU1RSSVAgPSBAYWNfY3RfU1RSSVBACiBhY2xvY2FsZGlyID0gQGFjbG9jYWxkaXJACi1hbV9fZmFzdGRlcENDX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ0NfRkFMU0VACi1hbV9fZmFzdGRlcENDX1RSVUUgPSBAYW1fX2Zhc3RkZXBDQ19UUlVFQAotYW1fX2Zhc3RkZXBDWFhfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACi1hbV9fZmFzdGRlcENYWF9UUlVFID0gQGFtX19mYXN0ZGVwQ1hYX1RSVUVACiBhbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKIGFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACiBhbV9fcXVvdGUgPSBAYW1fX3F1b3RlQApAQCAtMjE1LDY5ICsxMzc5LDEwMCBAQAogYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKIGJ1aWxkX29zID0gQGJ1aWxkX29zQAogYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAogZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKIGV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorZ2xfTElCT0JKUyA9IEBnbF9MSUJPQkpTQAorZ2xfTFRMSUJPQkpTID0gQGdsX0xUTElCT0JKU0AKK2dsdGVzdHNfTElCT0JKUyA9IEBnbHRlc3RzX0xJQk9CSlNACitnbHRlc3RzX0xUTElCT0JKUyA9IEBnbHRlc3RzX0xUTElCT0JKU0AKK2dsdGVzdHNfV0lUTkVTUyA9IEBnbHRlc3RzX1dJVE5FU1NACiBob3N0ID0gQGhvc3RACiBob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACiBob3N0X2NwdSA9IEBob3N0X2NwdUAKIGhvc3Rfb3MgPSBAaG9zdF9vc0AKIGhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAogaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAogaW5mb2RpciA9IEBpbmZvZGlyQAogaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAogbGliZGlyID0gQGxpYmRpckAKIGxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xpc3BkaXIgPSBAbGlzcGRpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACiBsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACiBtYW5kaXIgPSBAbWFuZGlyQAogbWtkaXJfcCA9IEBta2Rpcl9wQAogb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKIHByZWZpeCA9IEBwcmVmaXhACiBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKIHNiaW5kaXIgPSBAc2JpbmRpckAKIHNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKIHN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKIHRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi1BTV9DRkxBR1MgPSAkKFdBUk5JTkdfQ0ZMQUdTKSAkKFdFUlJPUl9DRkxBR1MpCi1BTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9saWIgLUkuLi9saWIKLUFNX1lGTEFHUyA9ICItZHYiCit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorQU1fQ0ZMQUdTID0gJChXQVJOX0NGTEFHUykgJChXRVJST1JfQ0ZMQUdTKQorQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvbGliCitCSVNPTiA9IC4uL3Rlc3RzL2Jpc29uCitBTV9ZRkxBR1MgPSAtZCAtdiAtLXdhcm5pbmdzPWFsbCxlcnJvciAtLXJlcG9ydD1hbGwKIExEQUREID0gLi4vbGliL2xpYmJpc29uLmEgJChMSUJJTlRMKQogYmluX1NDUklQVFMgPSAkKFlBQ0NfU0NSSVBUKQogRVhUUkFfU0NSSVBUUyA9IHlhY2MKIGJpc29uX1NPVVJDRVMgPSBcCi0JTFIwLmMgTFIwLmgJCQkJICBcCi0JYXNzb2MuYyBhc3NvYy5oCQkJCSAgXAotCWNsb3N1cmUuYyBjbG9zdXJlLmgJCQkgIFwKLQljb21wbGFpbi5jIGNvbXBsYWluLmgJCQkgIFwKLQljb25mbGljdHMuYyBjb25mbGljdHMuaAkJCSAgXAotCWRlcml2ZXMuYyBkZXJpdmVzLmgJCQkgIFwKLQlmaWxlcy5jIGZpbGVzLmgJCQkJICBcCi0JZ2V0YXJncy5jIGdldGFyZ3MuaAkJCSAgXAotCWdyYW0uYyBncmFtLmgJCQkJICBcCi0JbGFsci5oIGxhbHIuYwkJCQkgIFwKLQlsb2NhdGlvbi5jIGxvY2F0aW9uLmgJCQkgIFwKLQltYWluLmMJCQkJCSAgXAotCW11c2NsZV90YWIuYyBtdXNjbGVfdGFiLmgJCSAgXAotCW51bGxhYmxlLmMgbnVsbGFibGUuaAkJCSAgXAotCW91dHB1dC5jIG91dHB1dC5oCQkJICBcCi0JcGFyc2UtZ3JhbS5oIHBhcnNlLWdyYW0ueQkJICBcCi0JcHJpbnQuYyBwcmludC5oCQkJCSAgXAotCXByaW50X2dyYXBoLmMgcHJpbnRfZ3JhcGguaAkJICBcCi0JcmVhZGVyLmMgcmVhZGVyLmgJCQkgIFwKLQlyZWR1Y2UuYyByZWR1Y2UuaAkJCSAgXAotCXJlbGF0aW9uLmMgcmVsYXRpb24uaAkJCSAgXAotCXNjYW4tZ3JhbS1jLmMJCQkJICBcCi0Jc2Nhbi1za2VsLWMuYyBzY2FuLXNrZWwuaAkJICBcCi0Jc3RhdGUuYyBzdGF0ZS5oCQkJCSAgXAotCXN5bWxpc3QuYyBzeW1saXN0LmgJCQkgIFwKLQlzeW10YWIuYyBzeW10YWIuaAkJCSAgXAotCXN5c3RlbS5oCQkJCSAgXAotCXRhYmxlcy5oIHRhYmxlcy5jCQkJICBcCi0JdW5pcXN0ci5jIHVuaXFzdHIuaAkJCSAgXAotCXZjZy5jIHZjZy5oCQkJCSAgXAotCXZjZ19kZWZhdWx0cy5oCisgIEFubm90YXRpb25MaXN0LmMgQW5ub3RhdGlvbkxpc3QuaCAgICAgICAgICAgICBcCisgIEluYWRlcXVhY3lMaXN0LmMgSW5hZGVxdWFjeUxpc3QuaCAgICAgICAgICAgICBcCisgIExSMC5jIExSMC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIFNiaXRzZXQuYyBTYml0c2V0LmggICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGFzc29jLmMgYXNzb2MuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGNsb3N1cmUuYyBjbG9zdXJlLmggICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGNvbXBsYWluLmMgY29tcGxhaW4uaCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGNvbmZsaWN0cy5jIGNvbmZsaWN0cy5oICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRlcml2ZXMuYyBkZXJpdmVzLmggICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGZpbGVzLmMgZmlsZXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGZsZXgtc2Nhbm5lci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGdldGFyZ3MuYyBnZXRhcmdzLmggICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGdyYW0uYyBncmFtLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGxhbHIuaCBsYWxyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGllbHIuaCBpZWxyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGxvY2F0aW9uLmMgbG9jYXRpb24uaCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIG1haW4uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIG11c2NsZS10YWIuYyBtdXNjbGUtdGFiLmggICAgICAgICAgICAgICAgICAgICBcCisgIG5hbWVkLXJlZi5jIG5hbWVkLXJlZi5oICAgICAgICAgICAgICAgICAgICAgICBcCisgIG51bGxhYmxlLmMgbnVsbGFibGUuaCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIG91dHB1dC5jIG91dHB1dC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHBhcnNlLWdyYW0ueSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHByaW50LmMgcHJpbnQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHByaW50X2dyYXBoLmMgcHJpbnRfZ3JhcGguaCAgICAgICAgICAgICAgICAgICBcCisgIHByaW50LXhtbC5jIHByaW50LXhtbC5oICAgICAgICAgICAgICAgICAgICAgICBcCisgIHJlYWRlci5jIHJlYWRlci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHJlZHVjZS5jIHJlZHVjZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHJlbGF0aW9uLmMgcmVsYXRpb24uaCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHNjYW4tY29kZS5oIHNjYW4tY29kZS1jLmMgICAgICAgICAgICAgICAgICAgICBcCisgIHNjYW4tZ3JhbS5oIHNjYW4tZ3JhbS1jLmMgICAgICAgICAgICAgICAgICAgICBcCisgIHNjYW4tc2tlbC5oIHNjYW4tc2tlbC1jLmMgICAgICAgICAgICAgICAgICAgICBcCisgIHN0YXRlLmMgc3RhdGUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHN5bWxpc3QuYyBzeW1saXN0LmggICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHN5bXRhYi5jIHN5bXRhYi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHN5c3RlbS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHRhYmxlcy5oIHRhYmxlcy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHVuaXFzdHIuYyB1bmlxc3RyLmggICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGdyYXBodml6LmMgZ3JhcGh2aXouaAogCi1FWFRSQV9iaXNvbl9TT1VSQ0VTID0gc2Nhbi1za2VsLmwgc2Nhbi1ncmFtLmwKLUJVSUxUX1NPVVJDRVMgPSBzY2FuLXNrZWwuYyBzY2FuLWdyYW0uYyBwYXJzZS1ncmFtLmMgcGFyc2UtZ3JhbS5oCitFWFRSQV9iaXNvbl9TT1VSQ0VTID0gc2Nhbi1jb2RlLmwgc2Nhbi1za2VsLmwgc2Nhbi1ncmFtLmwKK0JVSUxUX1NPVVJDRVMgPSBcCisgIHBhcnNlLWdyYW0uYyBwYXJzZS1ncmFtLmggICAgICAgICAgICAgICAgICAgICBcCisgIHNjYW4tY29kZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHNjYW4tc2tlbC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHNjYW4tZ3JhbS5jCisKIE1PU1RMWUNMRUFORklMRVMgPSB5YWNjCiBhbGw6ICQoQlVJTFRfU09VUkNFUykKIAkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbGwtYW0KQEAgLTI4OCwxNCArMTQ4MywxNCBAQAogCUBmb3IgZGVwIGluICQ/OyBkbyBcCiAJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKIAkgICAgKiQkZGVwKikgXAotCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCi0JCSYmIGV4aXQgMDsgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKIAkgICAgICBleGl0IDE7OyBcCiAJICBlc2FjOyBcCiAJZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251ICBzcmMvTWFrZWZpbGUnOyBcCi0JY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSAgc3JjL01ha2VmaWxlCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbml0cyBzcmMvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbml0cyBzcmMvTWFrZWZpbGUKIC5QUkVDSU9VUzogTWFrZWZpbGUKIE1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKIAlAY2FzZSAnJD8nIGluIFwKQEAgLTMxMyw1MSArMTUwOCwxMTkgQEAKIAljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKICQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCiAJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgogaW5zdGFsbC1iaW5QUk9HUkFNUzogJChiaW5fUFJPR1JBTVMpCiAJQCQoTk9STUFMX0lOU1RBTEwpCi0JdGVzdCAteiAiJChiaW5kaXIpIiB8fCAkKG1rZGlyX3ApICIkKERFU1RESVIpJChiaW5kaXIpIgotCUBsaXN0PSckKGJpbl9QUk9HUkFNUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIHAxPWBlY2hvICQkcHxzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCi0JICBpZiB0ZXN0IC1mICQkcCBcCi0JICA7IHRoZW4gXAotCSAgICBmPWBlY2hvICIkJHAxIiB8IHNlZCAncyxeLiovLCw7JCh0cmFuc2Zvcm0pO3MvJCQvJChFWEVFWFQpLydgOyBcCi0JICAgZWNobyAiICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChiaW5QUk9HUkFNU19JTlNUQUxMKSAnJCRwJyAnJChERVNURElSKSQoYmluZGlyKS8kJGYnIjsgXAotCSAgICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChiaW5QUk9HUkFNU19JTlNUQUxMKSAiJCRwIiAiJChERVNURElSKSQoYmluZGlyKS8kJGYiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmUKKwlAbGlzdD0nJChiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJChiaW5kaXIpIiB8fCBsaXN0PTsgXAorCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAorCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKGJpbmRpciknIjsgXAorCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQoYmluZGlyKSIgfHwgZXhpdCAxOyBcCisJZmk7IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorCXNlZCAncy8kKEVYRUVYVCkkJC8vJyB8IFwKKwl3aGlsZSByZWFkIHAgcDE7IGRvIGlmIHRlc3QgLWYgJCRwOyBcCisJICB0aGVuIGVjaG8gIiQkcCI7IGVjaG8gIiQkcCI7IGVsc2UgOjsgZmk7IFwKKwlkb25lIHwgXAorCXNlZCAtZSAncDtzLC4qLywsO247aCcgLWUgJ3N8Lip8LnwnIFwKKwkgICAgLWUgJ3A7eDtzLC4qLywsO3MvJChFWEVFWFQpJCQvLzskKHRyYW5zZm9ybSk7cy8kJC8kKEVYRUVYVCkvJyB8IFwKKwlzZWQgJ047TjtOO3MsXG4sICxnJyB8IFwKKwkkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiOyBkaXJzWyIuIl0gPSAxIH0gXAorCSAgeyBkPSQkMzsgaWYgKGRpcnNbZF0gIT0gMSkgeyBwcmludCAiZCIsIGQ7IGRpcnNbZF0gPSAxIH0gXAorCSAgICBpZiAoJCQyID09ICQkNCkgZmlsZXNbZF0gPSBmaWxlc1tkXSAiICIgJCQxOyBcCisJICAgIGVsc2UgeyBwcmludCAiZiIsICQkMyAiLyIgJCQ0LCAkJDE7IH0gfSBcCisJICBFTkQgeyBmb3IgKGQgaW4gZmlsZXMpIHByaW50ICJmIiwgZCwgZmlsZXNbZF0gfScgfCBcCisJd2hpbGUgcmVhZCB0eXBlIGRpciBmaWxlczsgZG8gXAorCSAgICBpZiB0ZXN0ICIkJGRpciIgPSAuOyB0aGVuIGRpcj07IGVsc2UgZGlyPS8kJGRpcjsgZmk7IFwKKwkgICAgdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCisJICAgICAgZWNobyAiICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZXMgJyQoREVTVERJUikkKGJpbmRpcikkJGRpciciOyBcCisJICAgICAgJChJTlNUQUxMX1BST0dSQU1fRU5WKSAkKElOU1RBTExfUFJPR1JBTSkgJCRmaWxlcyAiJChERVNURElSKSQoYmluZGlyKSQkZGlyIiB8fCBleGl0ICQkPzsgXAorCSAgICB9IFwKKwk7IGRvbmUKIAogdW5pbnN0YWxsLWJpblBST0dSQU1TOgogCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQoYmluX1BST0dSQU1TKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgZj1gZWNobyAiJCRwIiB8IHNlZCAncyxeLiovLCw7cy8kKEVYRUVYVCkkJC8vOyQodHJhbnNmb3JtKTtzLyQkLyQoRVhFRVhUKS8nYDsgXAotCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChiaW5kaXIpLyQkZiciOyBcCi0JICBybSAtZiAiJChERVNURElSKSQoYmluZGlyKS8kJGYiOyBcCi0JZG9uZQorCUBsaXN0PSckKGJpbl9QUk9HUkFNUyknOyB0ZXN0IC1uICIkKGJpbmRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IFwKKwkgIHNlZCAtZSAnaDtzLF4uKi8sLDtzLyQoRVhFRVhUKSQkLy87JCh0cmFuc2Zvcm0pJyBcCisJICAgICAgLWUgJ3MvJCQvJChFWEVFWFQpLycgYDsgXAorCXRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCisJZWNobyAiICggY2QgJyQoREVTVERJUikkKGJpbmRpciknICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorCWNkICIkKERFU1RESVIpJChiaW5kaXIpIiAmJiBybSAtZiAkJGZpbGVzCiAKIGNsZWFuLWJpblBST0dSQU1TOgogCS10ZXN0IC16ICIkKGJpbl9QUk9HUkFNUykiIHx8IHJtIC1mICQoYmluX1BST0dSQU1TKQotYmlzb24kKEVYRUVYVCk6ICQoYmlzb25fT0JKRUNUUykgJChiaXNvbl9ERVBFTkRFTkNJRVMpIAorCitpbnN0YWxsY2hlY2stYmluUFJPR1JBTVM6ICQoYmluX1BST0dSQU1TKQorCWJhZD0wOyBwaWQ9JCQkJDsgbGlzdD0iJChiaW5fUFJPR1JBTVMpIjsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBjYXNlICcgJChBTV9JTlNUQUxMQ0hFQ0tfU1REX09QVElPTlNfRVhFTVBUKSAnIGluIFwKKwkgICAqIiAkJHAgIiogfCAqIiAkKHNyY2RpcikvJCRwICIqKSBjb250aW51ZTs7IFwKKwkgIGVzYWM7IFwKKwkgIGY9YGVjaG8gIiQkcCIgfCBcCisJICAgICBzZWQgJ3MsXi4qLywsO3MvJChFWEVFWFQpJCQvLzskKHRyYW5zZm9ybSk7cy8kJC8kKEVYRUVYVCkvJ2A7IFwKKwkgIGZvciBvcHQgaW4gLS1oZWxwIC0tdmVyc2lvbjsgZG8gXAorCSAgICBpZiAiJChERVNURElSKSQoYmluZGlyKS8kJGYiICQkb3B0ID5jJCR7cGlkfV8ub3V0IFwKKwkgICAgICAgICAyPmMkJHtwaWR9Xy5lcnIgPC9kZXYvbnVsbCBcCisJCSAmJiB0ZXN0IC1uICJgY2F0IGMkJHtwaWR9Xy5vdXRgIiBcCisJCSAmJiB0ZXN0IC16ICJgY2F0IGMkJHtwaWR9Xy5lcnJgIjsgdGhlbiA6OyBcCisJICAgIGVsc2UgZWNobyAiJCRmIGRvZXMgbm90IHN1cHBvcnQgJCRvcHQiIDE+JjI7IGJhZD0xOyBmaTsgXAorCSAgZG9uZTsgXAorCWRvbmU7IHJtIC1mIGMkJHtwaWR9Xy4/Pz87IGV4aXQgJCRiYWQKK3BhcnNlLWdyYW0uaDogcGFyc2UtZ3JhbS5jCisJQGlmIHRlc3QgISAtZiAkQDsgdGhlbiBybSAtZiBwYXJzZS1ncmFtLmM7IGVsc2UgOjsgZmkKKwlAaWYgdGVzdCAhIC1mICRAOyB0aGVuICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHBhcnNlLWdyYW0uYzsgZWxzZSA6OyBmaQorYmlzb24kKEVYRUVYVCk6ICQoYmlzb25fT0JKRUNUUykgJChiaXNvbl9ERVBFTkRFTkNJRVMpICQoRVhUUkFfYmlzb25fREVQRU5ERU5DSUVTKSAKIAlAcm0gLWYgYmlzb24kKEVYRUVYVCkKLQkkKExJTkspICQoYmlzb25fTERGTEFHUykgJChiaXNvbl9PQkpFQ1RTKSAkKGJpc29uX0xEQUREKSAkKExJQlMpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGJpc29uX09CSkVDVFMpICQoYmlzb25fTERBREQpICQoTElCUykKIGluc3RhbGwtYmluU0NSSVBUUzogJChiaW5fU0NSSVBUUykKIAlAJChOT1JNQUxfSU5TVEFMTCkKLQl0ZXN0IC16ICIkKGJpbmRpcikiIHx8ICQobWtkaXJfcCkgIiQoREVTVERJUikkKGJpbmRpcikiCi0JQGxpc3Q9JyQoYmluX1NDUklQVFMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJQGxpc3Q9JyQoYmluX1NDUklQVFMpJzsgdGVzdCAtbiAiJChiaW5kaXIpIiB8fCBsaXN0PTsgXAorCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAorCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKGJpbmRpciknIjsgXAorCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQoYmluZGlyKSIgfHwgZXhpdCAxOyBcCisJZmk7IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKIAkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCi0JICBpZiB0ZXN0IC1mICQkZCQkcDsgdGhlbiBcCi0JICAgIGY9YGVjaG8gIiQkcCIgfCBzZWQgJ3N8Xi4qL3x8OyQodHJhbnNmb3JtKSdgOyBcCi0JICAgIGVjaG8gIiAkKGJpblNDUklQVF9JTlNUQUxMKSAnJCRkJCRwJyAnJChERVNURElSKSQoYmluZGlyKS8kJGYnIjsgXAotCSAgICAkKGJpblNDUklQVF9JTlNUQUxMKSAiJCRkJCRwIiAiJChERVNURElSKSQoYmluZGlyKS8kJGYiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZQorCSAgaWYgdGVzdCAtZiAiJCRkJCRwIjsgdGhlbiBlY2hvICIkJGQkJHAiOyBlY2hvICIkJHAiOyBlbHNlIDo7IGZpOyBcCisJZG9uZSB8IFwKKwlzZWQgLWUgJ3A7cywuKi8sLDtuJyBcCisJICAgIC1lICdoO3N8Lip8LnwnIFwKKwkgICAgLWUgJ3A7eDtzLC4qLywsOyQodHJhbnNmb3JtKScgfCBzZWQgJ047TjtOO3MsXG4sICxnJyB8IFwKKwkkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiOyBkaXJzWyIuIl0gPSAxOyB9IFwKKwkgIHsgZD0kJDM7IGlmIChkaXJzW2RdICE9IDEpIHsgcHJpbnQgImQiLCBkOyBkaXJzW2RdID0gMSB9IFwKKwkgICAgaWYgKCQkMiA9PSAkJDQpIHsgZmlsZXNbZF0gPSBmaWxlc1tkXSAiICIgJCQxOyBcCisJICAgICAgaWYgKCsrbltkXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIHsgXAorCQlwcmludCAiZiIsIGQsIGZpbGVzW2RdOyBuW2RdID0gMDsgZmlsZXNbZF0gPSAiIiB9IH0gXAorCSAgICBlbHNlIHsgcHJpbnQgImYiLCBkICIvIiAkJDQsICQkMSB9IH0gXAorCSAgRU5EIHsgZm9yIChkIGluIGZpbGVzKSBwcmludCAiZiIsIGQsIGZpbGVzW2RdIH0nIHwgXAorCXdoaWxlIHJlYWQgdHlwZSBkaXIgZmlsZXM7IGRvIFwKKwkgICAgIGlmIHRlc3QgIiQkZGlyIiA9IC47IHRoZW4gZGlyPTsgZWxzZSBkaXI9LyQkZGlyOyBmaTsgXAorCSAgICAgdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCisJICAgICAgIGVjaG8gIiAkKElOU1RBTExfU0NSSVBUKSAkJGZpbGVzICckKERFU1RESVIpJChiaW5kaXIpJCRkaXInIjsgXAorCSAgICAgICAkKElOU1RBTExfU0NSSVBUKSAkJGZpbGVzICIkKERFU1RESVIpJChiaW5kaXIpJCRkaXIiIHx8IGV4aXQgJCQ/OyBcCisJICAgICB9IFwKKwk7IGRvbmUKIAogdW5pbnN0YWxsLWJpblNDUklQVFM6CiAJQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChiaW5fU0NSSVBUUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGY9YGVjaG8gIiQkcCIgfCBzZWQgJ3N8Xi4qL3x8OyQodHJhbnNmb3JtKSdgOyBcCi0JICBlY2hvICIgcm0gLWYgJyQoREVTVERJUikkKGJpbmRpcikvJCRmJyI7IFwKLQkgIHJtIC1mICIkKERFU1RESVIpJChiaW5kaXIpLyQkZiI7IFwKLQlkb25lCisJQGxpc3Q9JyQoYmluX1NDUklQVFMpJzsgdGVzdCAtbiAiJChiaW5kaXIpIiB8fCBleGl0IDA7IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgXAorCSAgICAgICBzZWQgLWUgJ3MsLiovLCw7JCh0cmFuc2Zvcm0pJ2A7IFwKKwlkaXI9JyQoREVTVERJUikkKGJpbmRpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCisKK2luc3RhbGxjaGVjay1iaW5TQ1JJUFRTOiAkKGJpbl9TQ1JJUFRTKQorCWJhZD0wOyBwaWQ9JCQkJDsgbGlzdD0iJChiaW5fU0NSSVBUUykiOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGNhc2UgJyAkKEFNX0lOU1RBTExDSEVDS19TVERfT1BUSU9OU19FWEVNUFQpICcgaW4gXAorCSAgICoiICQkcCAiKiB8ICoiICQoc3JjZGlyKS8kJHAgIiopIGNvbnRpbnVlOzsgXAorCSAgZXNhYzsgXAorCSAgZj1gZWNobyAiJCRwIiB8IHNlZCAncyxeLiovLCw7JCh0cmFuc2Zvcm0pJ2A7IFwKKwkgIGZvciBvcHQgaW4gLS1oZWxwIC0tdmVyc2lvbjsgZG8gXAorCSAgICBpZiAiJChERVNURElSKSQoYmluZGlyKS8kJGYiICQkb3B0ID5jJCR7cGlkfV8ub3V0IFwKKwkgICAgICAgICAyPmMkJHtwaWR9Xy5lcnIgPC9kZXYvbnVsbCBcCisJCSAmJiB0ZXN0IC1uICJgY2F0IGMkJHtwaWR9Xy5vdXRgIiBcCisJCSAmJiB0ZXN0IC16ICJgY2F0IGMkJHtwaWR9Xy5lcnJgIjsgdGhlbiA6OyBcCisJICAgIGVsc2UgZWNobyAiJCRmIGRvZXMgbm90IHN1cHBvcnQgJCRvcHQiIDE+JjI7IGJhZD0xOyBmaTsgXAorCSAgZG9uZTsgXAorCWRvbmU7IHJtIC1mIGMkJHtwaWR9Xy4/Pz87IGV4aXQgJCRiYWQKIAogbW9zdGx5Y2xlYW4tY29tcGlsZToKIAktcm0gLWYgKi4kKE9CSkVYVCkKQEAgLTM2NSw3ICsxNjI4LDEwIEBACiBkaXN0Y2xlYW4tY29tcGlsZToKIAktcm0gLWYgKi50YWIuYwogCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvQW5ub3RhdGlvbkxpc3QuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL0luYWRlcXVhY3lMaXN0LlBvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9MUjAuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL1NiaXRzZXQuUG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Fzc29jLlBvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jbG9zdXJlLlBvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jb21wbGFpbi5Qb0BhbV9fcXVvdGVACkBAIC0zNzQsMTggKzE2NDAsMjQgQEAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9maWxlcy5Qb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ2V0YXJncy5Qb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ3JhbS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ3JhcGh2aXouUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2llbHIuUG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xhbHIuUG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xvY2F0aW9uLlBvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tYWluLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tdXNjbGVfdGFiLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tdXNjbGUtdGFiLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9uYW1lZC1yZWYuUG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL251bGxhYmxlLlBvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vdXRwdXQuUG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3BhcnNlLWdyYW0uUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3ByaW50LXhtbC5Qb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcHJpbnQuUG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3ByaW50X2dyYXBoLlBvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9yZWFkZXIuUG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3JlZHVjZS5Qb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcmVsYXRpb24uUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NjYW4tY29kZS1jLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zY2FuLWNvZGUuUG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NjYW4tZ3JhbS1jLlBvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zY2FuLWdyYW0uUG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NjYW4tc2tlbC1jLlBvQGFtX19xdW90ZUAKQEAgLTM5NSwxMTkgKzE2NjcsMTIwIEBACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3ltdGFiLlBvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90YWJsZXMuUG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3VuaXFzdHIuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3ZjZy5Qb0BhbV9fcXVvdGVACiAKIC5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgJDw7IFwKLUBhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACiBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgJDwKIAogLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2A7IFwKLUBhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKIAogLmwuYzoKLQkkKFNIRUxMKSAkKFlMV1JBUCkgJDwgJChMRVhfT1VUUFVUX1JPT1QpLmMgJEAgLS0gJChMRVhDT01QSUxFKQorCSQoQU1fVl9MRVgpJChhbV9fc2tpcGxleCkgJChTSEVMTCkgJChZTFdSQVApICQ8ICQoTEVYX09VVFBVVF9ST09UKS5jICRAIC0tICQoTEVYQ09NUElMRSkKIAogLnkuYzoKLQkkKFlBQ0NDT01QSUxFKSAkPAotCWlmIHRlc3QgLWYgeS50YWIuaDsgdGhlbiBcCi0JICB0bz1gZWNobyAiJCpfSCIgfCBzZWQgXAotICAgICAgICAgICAgICAgIC1lICd5L2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLycgXAotICAgICAgICAgICAgICAgIC1lICdzL1teQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpdL18vZydgOyBcCi0JICBzZWQgLWUgIi9eIy8hYiIgLWUgInMvWV9UQUJfSC8kJHRvL2ciIC1lICJzfHlcLnRhYlwuaHwkKi5ofCIgXAotICAgICAgICAgICAgeS50YWIuaCA+JCouaHQ7IFwKLQkgIHJtIC1mIHkudGFiLmg7IFwKLQkgIGlmIGNtcCAtcyAkKi5odCAkKi5oOyB0aGVuIFwKLQkgICAgcm0gLWYgJCouaHQgO1wKLQkgIGVsc2UgXAotCSAgICBtdiAkKi5odCAkKi5oOyBcCi0JICBmaTsgXAotCWZpCi0JaWYgdGVzdCAtZiB5Lm91dHB1dDsgdGhlbiBcCi0JICBtdiB5Lm91dHB1dCAkKi5vdXRwdXQ7IFwKLQlmaQotCXNlZCAnL14jLyBzfHlcLnRhYlwuY3wkQHwnIHkudGFiLmMgPiRAdCAmJiBtdiAkQHQgJEAKLQlybSAtZiB5LnRhYi5jCi11bmluc3RhbGwtaW5mby1hbToKKwkkKEFNX1ZfWUFDQykkKGFtX19za2lweWFjYykgJChTSEVMTCkgJChZTFdSQVApICQ8IHkudGFiLmMgJEAgeS50YWIuaCBgZWNobyAkQCB8ICQoYW1fX3lhY2NfYzJoKWAgeS5vdXRwdXQgJCoub3V0cHV0IC0tICQoWUFDQ0NPTVBJTEUpCiAKIElEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCiAJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKIAl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAogCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKIAkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKIAlta2lkIC1mSUQgJCR1bmlxdWUKIHRhZ3M6IFRBR1MKIAogVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAogCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQl0YWdzPTsgXAorCXNldCB4OyBcCiAJaGVyZT1gcHdkYDsgXAogCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAogCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCiAJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAogCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAogCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAogCWZpCiBjdGFnczogQ1RBR1MKIENUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCiAJCSQoVEFHU19GSUxFUykgJChMSVNQKQotCXRhZ3M9OyBcCi0JaGVyZT1gcHdkYDsgXAogCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAogCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCiAJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAogCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAogCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR0YWdzICQkdW5pcXVlCisJICAgICAkJHVuaXF1ZQogCiBHVEFHUzoKIAloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitjc2NvcGVsaXN0OiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSc7IFwKKwljYXNlICIkKHNyY2RpcikiIGluIFwKKwkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKKwkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCisJZXNhYzsgXAorCWZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCisJICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCisJICBlbHNlIFwKKwkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKKwkgIGZpOyBcCisJZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCiAKIGRpc3RjbGVhbi10YWdzOgogCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCiAKIGRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGNhc2UgJCRmaWxlIGluIFwKLQkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLQkgICAgJCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAotCSAgZXNhYzsgXAorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCiAJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCi0JICAgIGRpcj0iLyQkZGlyIjsgXAotCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCi0JICBlbHNlIFwKLQkgICAgZGlyPScnOyBcCi0JICBmaTsgXAogCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAogCSAgICBmaTsgXAotCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAogCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKIAkgICAgfHwgZXhpdCAxOyBcCiAJICBmaTsgXAogCWRvbmUKQEAgLTUxNyw3ICsxNzkwLDcgQEAKIGFsbC1hbTogTWFrZWZpbGUgJChQUk9HUkFNUykgJChTQ1JJUFRTKQogaW5zdGFsbGRpcnM6CiAJZm9yIGRpciBpbiAiJChERVNURElSKSQoYmluZGlyKSIgIiQoREVTVERJUikkKGJpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChta2Rpcl9wKSAiJCRkaXIiOyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCiAJZG9uZQogaW5zdGFsbDogJChCVUlMVF9TT1VSQ0VTKQogCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtYW0KQEAgLTUzMCwxMCArMTgwMywxNSBAQAogCiBpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQogaW5zdGFsbC1zdHJpcDoKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKLQkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKKwlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICAgaW5zdGFsbDsgXAorCWVsc2UgXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCisJZmkKIG1vc3RseWNsZWFuLWdlbmVyaWM6CiAJLXRlc3QgLXogIiQoTU9TVExZQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoTU9TVExZQ0xFQU5GSUxFUykKIApAQCAtNTQxLDExICsxODE5LDE0IEBACiAKIGRpc3RjbGVhbi1nZW5lcmljOgogCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQogCiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CiAJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgogCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKIAktcm0gLWYgcGFyc2UtZ3JhbS5jCisJLXJtIC1mIHBhcnNlLWdyYW0uaAorCS1ybSAtZiBzY2FuLWNvZGUuYwogCS1ybSAtZiBzY2FuLWdyYW0uYwogCS1ybSAtZiBzY2FuLXNrZWwuYwogCS10ZXN0IC16ICIkKEJVSUxUX1NPVVJDRVMpIiB8fCBybSAtZiAkKEJVSUxUX1NPVVJDRVMpCkBAIC01NjUsMTkgKzE4NDYsMzkgQEAKIAogaHRtbDogaHRtbC1hbQogCitodG1sLWFtOgorCiBpbmZvOiBpbmZvLWFtCiAKIGluZm8tYW06CiAKIGluc3RhbGwtZGF0YS1hbToKIAoraW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCiBpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtYmluUFJPR1JBTVMgaW5zdGFsbC1iaW5TQ1JJUFRTCiAKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKwogaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KIAoraW5zdGFsbC1pbmZvLWFtOgorCiBpbnN0YWxsLW1hbjoKIAotaW5zdGFsbGNoZWNrLWFtOgoraW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbTogaW5zdGFsbGNoZWNrLWJpblBST0dSQU1TIGluc3RhbGxjaGVjay1iaW5TQ1JJUFRTCiAKIG1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KIAktcm0gLXJmIC4vJChERVBESVIpCkBAIC01OTYsMjkgKzE4OTcsMzAgQEAKIAogcHMtYW06CiAKLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWJpblBST0dSQU1TIHVuaW5zdGFsbC1iaW5TQ1JJUFRTIFwKLQl1bmluc3RhbGwtaW5mby1hbQordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtYmluUFJPR1JBTVMgdW5pbnN0YWxsLWJpblNDUklQVFMKKworLk1BS0U6IGFsbCBjaGVjayBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAogCiAuUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tYmluUFJPR1JBTVMgXAotCWNsZWFuLWdlbmVyaWMgY3RhZ3MgZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIFwKKwljbGVhbi1nZW5lcmljIGNzY29wZWxpc3QgY3RhZ3MgZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIFwKIAlkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCiAJaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtYmluUFJPR1JBTVMgXAotCWluc3RhbGwtYmluU0NSSVBUUyBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJaW5zdGFsbC1iaW5TQ1JJUFRTIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gXAorCWluc3RhbGxjaGVjay1iaW5QUk9HUkFNUyBpbnN0YWxsY2hlY2stYmluU0NSSVBUUyBpbnN0YWxsZGlycyBcCiAJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAogCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKIAl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWJpblBST0dSQU1TIFwKLQl1bmluc3RhbGwtYmluU0NSSVBUUyB1bmluc3RhbGwtaW5mby1hbQorCXVuaW5zdGFsbC1iaW5TQ1JJUFRTCiAKIAogeWFjYzoKLQllY2hvICcjISAvYmluL3NoJyA+JEAKLQllY2hvICdleGVjICQoYmluZGlyKS9iaXNvbiAteSAiJCRAIicgPj4kQAotCWNobW9kIGEreCAkQAotCi1lY2hvOgotCWVjaG8gJChiaXNvbl9TT1VSQ0VTKSAkKG5vaW5zdF9IRUFERVJTKQorCSQoQU1fVl9HRU4pZWNobyAnIyEgL2Jpbi9zaCcgPiRACisJJChBTV9WX2F0KWVjaG8gImV4ZWMgJyQoYmluZGlyKS9iaXNvbicgLXkgIiciJCRAIicgPj4kQAorCSQoQU1fVl9hdCljaG1vZCBhK3ggJEAKIAogIyBUaGUgZm9sbG93aW5nIHJ1bGUgaXMgbm90IGRlc2lnbmVkIHRvIGJlIHBvcnRhYmxlLAogIyBhbmQgcmVsaWVzIG9uIHRvb2xzIHRoYXQgbm90IGV2ZXJ5b25lIGhhcy4KQEAgLTY1MCw2ICsxOTUyLDcgQEAKIAkgIGVjaG8gJ3RoZSBhYm92ZSB2YXJpYWJsZXMgc2hvdWxkIGhhdmUgc3RhdGljIHNjb3BlJyAxPiYyOwlcCiAJICBleGl0IDE7CQkJCQkJCVwKIAlmaQorCiAjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgogIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCiAuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9zcmMvU2JpdHNldC5jIGIvc3JjL1NiaXRzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTY1ZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL1NiaXRzZXQuYwpAQCAtMCwwICsxLDgwIEBACisvKiBBIHNpbXBsZSwgbWVtb3J5LWVmZmljaWVudCBiaXRzZXQgaW1wbGVtZW50YXRpb24uCisKKyAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgInN5c3RlbS5oIgorCisjaW5jbHVkZSAiU2JpdHNldC5oIgorCitTYml0c2V0CitTYml0c2V0X19uZXcgKFNiaXRzZXRfX0luZGV4IG5iaXRzKQoreworICAvKiBTb21lIGZ1bmN0aW9ucywgbGlrZSBTYml0c2V0X19sYXN0X2J5dGVfbWFzaywgd2lsbCBmYWlsIGlmIG5iaXRzID0gMC4gICovCisgIGF2ZXIgKG5iaXRzKTsKKyAgcmV0dXJuIHhjYWxsb2MgKDEsIFNiaXRzZXRfX25ieXRlcyAobmJpdHMpKTsKK30KKworU2JpdHNldAorU2JpdHNldF9fbmV3X29uX29ic3RhY2sgKFNiaXRzZXRfX0luZGV4IG5iaXRzLCBzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFja3ApCit7CisgIFNiaXRzZXQgcmVzdWx0OworICBTYml0c2V0IHB0cjsKKyAgU2JpdHNldCBlbmQ7CisgIGF2ZXIgKG5iaXRzKTsKKyAgcmVzdWx0ID0gb2JzdGFja19hbGxvYyAob2JzdGFja3AsIFNiaXRzZXRfX25ieXRlcyAobmJpdHMpKTsKKyAgZm9yIChwdHIgPSByZXN1bHQsIGVuZCA9IHJlc3VsdCArIFNiaXRzZXRfX25ieXRlcyAobmJpdHMpOyBwdHIgPCBlbmQ7ICsrcHRyKQorICAgICpwdHIgPSAwOworICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkCitTYml0c2V0X19kZWxldGUgKFNiaXRzZXQgc2VsZikKK3sKKyAgZnJlZSAoc2VsZik7Cit9CisKK2Jvb2wKK1NiaXRzZXRfX2lzRW1wdHkgKFNiaXRzZXQgc2VsZiwgU2JpdHNldF9fSW5kZXggbmJpdHMpCit7CisgIFNiaXRzZXQgbGFzdCA9IHNlbGYgKyBTYml0c2V0X19uYnl0ZXMgKG5iaXRzKSAtIDE7CisgIGZvciAoOyBzZWxmIDwgbGFzdDsgKytzZWxmKQorICAgIGlmICgqc2VsZiAhPSAwKQorICAgICAgcmV0dXJuIGZhbHNlOworICByZXR1cm4gKCgqbGFzdCkgJiBTYml0c2V0X19sYXN0X2J5dGVfbWFzayAobmJpdHMpKSA9PSAwOworfQorCit2b2lkCitTYml0c2V0X19mcHJpbnQoU2JpdHNldCBzZWxmLCBTYml0c2V0X19JbmRleCBuYml0cywgRklMRSAqZmlsZSkKK3sKKyAgU2JpdHNldF9fSW5kZXggaTsKKyAgU2JpdHNldCBpdHI7CisgIGJvb2wgZmlyc3QgPSB0cnVlOworICBmcHJpbnRmIChmaWxlLAorICAgICAgICAgICAibmJpdHMgPSAlIiBTQklUU0VUX19JTkRFWF9fQ09OVkVSU0lPTl9TUEVDICIsIHNldCA9IHsiLAorICAgICAgICAgICBuYml0cyk7CisgIFNCSVRTRVRfX0ZPUl9FQUNIIChzZWxmLCBuYml0cywgaXRyLCBpKQorICAgIHsKKyAgICAgIGlmIChmaXJzdCkKKyAgICAgICAgZmlyc3QgPSBmYWxzZTsKKyAgICAgIGVsc2UKKyAgICAgICAgZnByaW50ZiAoZmlsZSwgIiwiKTsKKyAgICAgIGZwcmludGYgKGZpbGUsICIgJSIgU0JJVFNFVF9fSU5ERVhfX0NPTlZFUlNJT05fU1BFQywgaSk7CisgICAgfQorICBmcHJpbnRmIChmaWxlLCAiIH0iKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9TYml0c2V0LmggYi9zcmMvU2JpdHNldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMzI0MDIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvU2JpdHNldC5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qIEEgc2ltcGxlLCBtZW1vcnktZWZmaWNpZW50IGJpdHNldCBpbXBsZW1lbnRhdGlvbi4KKworICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIFNCSVRTRVRfSF8KKyMgZGVmaW5lIFNCSVRTRVRfSF8KKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICpTYml0c2V0OwordHlwZWRlZiBzaXplX3QgU2JpdHNldF9fSW5kZXg7CisjZGVmaW5lIFNCSVRTRVRfX0lOREVYX19DT05WRVJTSU9OX1NQRUMgInp1IgorCisjZGVmaW5lIFNiaXRzZXRfX25ieXRlcyhOQklUUykgXAorICAoKChOQklUUykgKyBDSEFSX0JJVCAtIDEpIC8gQ0hBUl9CSVQpCisjZGVmaW5lIFNiaXRzZXRfX2J5dGVBZGRyZXNzKFNFTEYsIElOREVYKSBcCisgICgoKFNFTEYpICsgKElOREVYKSAvIENIQVJfQklUKSkKKyNkZWZpbmUgU2JpdHNldF9fYml0X21hc2soSU5ERVgpIFwKKyAgKDEgPDwgKENIQVJfQklUIC0gMSAtIChJTkRFWCkgJSBDSEFSX0JJVCkpCisjZGVmaW5lIFNiaXRzZXRfX2xhc3RfYnl0ZV9tYXNrKE5CSVRTKSBcCisgIChVQ0hBUl9NQVggPDwgKENIQVJfQklUIC0gMSAtICgoTkJJVFMpIC0gMSkgJSBDSEFSX0JJVCkpCisKKy8qIG5iaXRzIG11c3Qgbm90IGJlIDAuICAqLworU2JpdHNldCBTYml0c2V0X19uZXcgKFNiaXRzZXRfX0luZGV4IG5iaXRzKTsKK1NiaXRzZXQgU2JpdHNldF9fbmV3X29uX29ic3RhY2sgKFNiaXRzZXRfX0luZGV4IG5iaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG9ic3RhY2sgKm9ic3RhY2twKTsKK3ZvaWQgU2JpdHNldF9fZGVsZXRlIChTYml0c2V0IHNlbGYpOworCisjZGVmaW5lIFNiaXRzZXRfX3Rlc3QoU0VMRiwgSU5ERVgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgoKlNiaXRzZXRfX2J5dGVBZGRyZXNzICgoU0VMRiksIChJTkRFWCkpICYgU2JpdHNldF9fYml0X21hc2sgKElOREVYKSkgIT0gMCkKKworYm9vbCBTYml0c2V0X19pc0VtcHR5IChTYml0c2V0IHNlbGYsIFNiaXRzZXRfX0luZGV4IG5iaXRzKTsKKwordm9pZCBTYml0c2V0X19mcHJpbnQoU2JpdHNldCBzZWxmLCBTYml0c2V0X19JbmRleCBuYml0cywgRklMRSAqZmlsZSk7CisKKyNkZWZpbmUgU2JpdHNldF9fc2V0KFNFTEYsIElOREVYKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKlNiaXRzZXRfX2J5dGVBZGRyZXNzICgoU0VMRiksIChJTkRFWCkpID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAqU2JpdHNldF9fYnl0ZUFkZHJlc3MgKChTRUxGKSwgKElOREVYKSkgfCBTYml0c2V0X19iaXRfbWFzayAoSU5ERVgpOyAgICAgIFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBTYml0c2V0X19yZXNldChTRUxGLCBJTkRFWCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAqU2JpdHNldF9fYnl0ZUFkZHJlc3MgKChTRUxGKSwgKElOREVYKSkgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICpTYml0c2V0X19ieXRlQWRkcmVzcyAoKFNFTEYpLCAoSU5ERVgpKSAmIH5TYml0c2V0X19iaXRfbWFzayAoSU5ERVgpOyAgICAgXAorfSB3aGlsZSgwKQorCisvKiBOQklUUyBpcyB0aGUgc2l6ZSBvZiB0aGUgYml0c2V0LiAgTW9yZSB0aGFuIE5CSVRTIGJpdHMgbWlnaHQgYmUgcmVzZXQuICAqLworI2RlZmluZSBTYml0c2V0X196ZXJvKFNFTEYsIE5CSVRTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBtZW1zZXQgKFNFTEYsIDAsIFNiaXRzZXRfX25ieXRlcyAoTkJJVFMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSgwKQorCisvKiBOQklUUyBpcyB0aGUgc2l6ZSBvZiB0aGUgYml0c2V0LiAgTW9yZSB0aGFuIE5CSVRTIGJpdHMgbWlnaHQgYmUgc2V0LiAgKi8KKyNkZWZpbmUgU2JpdHNldF9fb25lcyhTRUxGLCBOQklUUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgbWVtc2V0IChTRUxGLCBVQ0hBUl9NQVgsIFNiaXRzZXRfX25ieXRlcyAoTkJJVFMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUoMCkKKworLyogTkJJVFMgaXMgdGhlIHNpemUgb2YgZXZlcnkgYml0c2V0LiAgTW9yZSB0aGFuIE5CSVRTIGJpdHMgbWlnaHQgYmUgc2V0LiAgKi8KKyNkZWZpbmUgU2JpdHNldF9fb3IoU0VMRiwgT1RIRVIxLCBPVEhFUjIsIE5CSVRTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgU2JpdHNldCBwdHJfc2VsZiA9IChTRUxGKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgU2JpdHNldCBwdHJfb3RoZXIxID0gKE9USEVSMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgU2JpdHNldCBwdHJfb3RoZXIyID0gKE9USEVSMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgU2JpdHNldCBlbmRfc2VsZiA9IHB0cl9zZWxmICsgU2JpdHNldF9fbmJ5dGVzIChOQklUUyk7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZm9yICg7IHB0cl9zZWxmIDwgZW5kX3NlbGY7ICsrcHRyX3NlbGYsICsrcHRyX290aGVyMSwgKytwdHJfb3RoZXIyKSAgICAgICAgIFwKKyAgICAqcHRyX3NlbGYgPSAqcHRyX290aGVyMSB8ICpwdHJfb3RoZXIyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBTQklUU0VUX19GT1JfRUFDSChTRUxGLCBOQklUUywgSVRFUiwgSU5ERVgpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBmb3IgKChJVEVSKSA9IChTRUxGKTsgKElURVIpIDwgKFNFTEYpICsgU2JpdHNldF9fbmJ5dGVzIChOQklUUyk7ICsrKElURVIpKSAgXAorICAgIGlmICgqKElURVIpICE9IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgZm9yICgoSU5ERVgpID0gKChJVEVSKS0oU0VMRikpKkNIQVJfQklUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAoSU5ERVgpIDwgKE5CSVRTKSAmJiAoU0VMRikrKElOREVYKS9DSEFSX0JJVCA8IChJVEVSKSsxOyAgICAgICAgICAgXAorICAgICAgICAgICArKyhJTkRFWCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoKCgqSVRFUikgJiBTYml0c2V0X19iaXRfbWFzayAoSU5ERVgpKSAhPSAwKQorCisjZW5kaWYgLyogIVNCSVRTRVRfSF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9hc3NvYy5jIGIvc3JjL2Fzc29jLmMKaW5kZXggNmY5YTNiNS4uOTg5Y2IyNiAxMDA2NDQKLS0tIGEvc3JjL2Fzc29jLmMKKysrIGIvc3JjL2Fzc29jLmMKQEAgLTEsMjIgKzEsMjIgQEAKIC8qIEFzc29jaWF0aXZpdHkgaW5mb3JtYXRpb24uCi0gICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNS0yMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLgogCiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KIAotICAgQmlzb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCi0gICBCaXNvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggQmlzb247IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogI2luY2x1ZGUgPGNvbmZpZy5oPgogI2luY2x1ZGUgInN5c3RlbS5oIgpkaWZmIC0tZ2l0IGEvc3JjL2Fzc29jLmggYi9zcmMvYXNzb2MuaAppbmRleCA3NzhhNDUxLi41NGY5YjY1IDEwMDY0NAotLS0gYS9zcmMvYXNzb2MuaAorKysgYi9zcmMvYXNzb2MuaApAQCAtMSwyMiArMSwyMSBAQAogLyogQXNzb2NpYXRpdml0eSBpbmZvcm1hdGlvbi4KLSAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgogCi0gICBCaXNvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLSAgIEJpc29uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCBCaXNvbjsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAjaWZuZGVmIEFTU09DX0hfCiAjIGRlZmluZSBBU1NPQ19IXwpkaWZmIC0tZ2l0IGEvc3JjL2Nsb3N1cmUuYyBiL3NyYy9jbG9zdXJlLmMKaW5kZXggMDAxYjgzMS4uZDliYzVmZiAxMDA2NDQKLS0tIGEvc3JjL2Nsb3N1cmUuYworKysgYi9zcmMvY2xvc3VyZS5jCkBAIC0xLDI0ICsxLDIyIEBACiAvKiBDbG9zdXJlcyBmb3IgQmlzb24KIAotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDA0LCAyMDA1IEZyZWUKKyAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMjAwMC0yMDAyLCAyMDA0LTIwMDUsIDIwMDcsIDIwMDktMjAxMiBGcmVlCiAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgogCi0gICBCaXNvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCi0gICBCaXNvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCBCaXNvbjsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0gICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gICAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjaW5jbHVkZSAic3lzdGVtLmgiCkBAIC0yNiw3ICsyNCw2IEBACiAjaW5jbHVkZSA8Yml0c2V0Lmg+CiAjaW5jbHVkZSA8Yml0c2V0di1wcmludC5oPgogI2luY2x1ZGUgPGJpdHNldHYuaD4KLSNpbmNsdWRlIDxxdW90ZWFyZy5oPgogCiAjaW5jbHVkZSAiY2xvc3VyZS5oIgogI2luY2x1ZGUgImRlcml2ZXMuaCIKQEAgLTM3LDcgKzM0LDcgQEAKIAogLyogTklURU1TRVQgaXMgdGhlIHNpemUgb2YgdGhlIGFycmF5IElURU1TRVQuICAqLwogaXRlbV9udW1iZXIgKml0ZW1zZXQ7Ci1zaXplX3QgbnJpdGVtc2V0Oworc2l6ZV90IG5pdGVtc2V0OwogCiBzdGF0aWMgYml0c2V0IHJ1bGVzZXQ7CiAKQEAgLTIxMywzMCArMjEwLDMyIEBACiAgICAgaWYgKElTVkFSIChyaXRlbVtjb3JlW2NdXSkpCiAgICAgICBiaXRzZXRfb3IgKHJ1bGVzZXQsIHJ1bGVzZXQsIEZERVJJVkVTIChyaXRlbVtjb3JlW2NdXSkpOwogCi0gIG5yaXRlbXNldCA9IDA7CisgIC8qIGNvcmUgaXMgc29ydGVkIG9uIGl0ZW0gaW5kZXggaW4gcml0ZW0sIHdoaWNoIGlzIHNvcnRlZCBvbiBydWxlIG51bWJlci4KKyAgICAgQ29tcHV0ZSBpdGVtc2V0IHdpdGggdGhlIHNhbWUgc29ydC4gICovCisgIG5pdGVtc2V0ID0gMDsKICAgYyA9IDA7CiAgIEJJVFNFVF9GT1JfRUFDSCAoaXRlciwgcnVsZXNldCwgcnVsZW5vLCAwKQogICAgIHsKICAgICAgIGl0ZW1fbnVtYmVyIGl0ZW1ubyA9IHJ1bGVzW3J1bGVub10ucmhzIC0gcml0ZW07CiAgICAgICB3aGlsZSAoYyA8IG4gJiYgY29yZVtjXSA8IGl0ZW1ubykKIAl7Ci0JICBpdGVtc2V0W25yaXRlbXNldF0gPSBjb3JlW2NdOwotCSAgbnJpdGVtc2V0Kys7CisJICBpdGVtc2V0W25pdGVtc2V0XSA9IGNvcmVbY107CisJICBuaXRlbXNldCsrOwogCSAgYysrOwogCX0KLSAgICAgIGl0ZW1zZXRbbnJpdGVtc2V0XSA9IGl0ZW1ubzsKLSAgICAgIG5yaXRlbXNldCsrOworICAgICAgaXRlbXNldFtuaXRlbXNldF0gPSBpdGVtbm87CisgICAgICBuaXRlbXNldCsrOwogICAgIH07CiAKICAgd2hpbGUgKGMgPCBuKQogICAgIHsKLSAgICAgIGl0ZW1zZXRbbnJpdGVtc2V0XSA9IGNvcmVbY107Ci0gICAgICBucml0ZW1zZXQrKzsKKyAgICAgIGl0ZW1zZXRbbml0ZW1zZXRdID0gY29yZVtjXTsKKyAgICAgIG5pdGVtc2V0Kys7CiAgICAgICBjKys7CiAgICAgfQogCiAgIGlmICh0cmFjZV9mbGFnICYgdHJhY2Vfc2V0cykKLSAgICBwcmludF9jbG9zdXJlICgib3V0cHV0IiwgaXRlbXNldCwgbnJpdGVtc2V0KTsKKyAgICBwcmludF9jbG9zdXJlICgib3V0cHV0IiwgaXRlbXNldCwgbml0ZW1zZXQpOwogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9jbG9zdXJlLmggYi9zcmMvY2xvc3VyZS5oCmluZGV4IGEyNTgyZTguLjBmOTZhOGIgMTAwNjQ0Ci0tLSBhL3NyYy9jbG9zdXJlLmgKKysrIGIvc3JjL2Nsb3N1cmUuaApAQCAtMSwyNCArMSwyMiBAQAogLyogU3Vicm91dGluZXMgZm9yIGJpc29uCiAKLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMjAwMCwgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlCisgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDIwMDAtMjAwMiwgMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUKICAgIEZvdW5kYXRpb24sIEluYy4KIAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCiAKLSAgIEJpc29uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLSAgIEJpc29uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIEJpc29uOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAgIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpZm5kZWYgQ0xPU1VSRV9IXwogIyBkZWZpbmUgQ0xPU1VSRV9IXwpAQCAtMzIsNyArMzAsNyBAQAogdm9pZCBuZXdfY2xvc3VyZSAodW5zaWduZWQgaW50IG4pOwogCiAKLS8qIEdpdmVuIHRoZSBrZXJuZWwgKGFrYSBjb3JlKSBvZiBhIHN0YXRlIChhIHZlY3RvciBvZiBpdGVtIG51bWJlcnMKKy8qIEdpdmVuIHRoZSBrZXJuZWwgKGFrYSBjb3JlKSBvZiBhIHN0YXRlIChhIHNvcnRlZCB2ZWN0b3Igb2YgaXRlbSBudW1iZXJzCiAgICBJVEVNUywgb2YgbGVuZ3RoIE4pLCBzZXQgdXAgUlVMRVNFVCBhbmQgSVRFTVNFVCB0byBpbmRpY2F0ZSB3aGF0CiAgICBydWxlcyBjb3VsZCBiZSBydW4gYW5kIHdoaWNoIGl0ZW1zIGNvdWxkIGJlIGFjY2VwdGVkIHdoZW4gdGhvc2UKICAgIGl0ZW1zIGFyZSB0aGUgYWN0aXZlIG9uZXMuCkBAIC00MSw3ICszOSw3IEBACiAgICBhbGwgcnVsZXMgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgZGVzY3JpYmUgdGhlIG5leHQgaW5wdXQgdG8gYmUKICAgIHJlYWQuCiAKLSAgIElURU1TRVQgaXMgYSB2ZWN0b3Igb2YgaXRlbSBudW1iZXJzOyBOSVRFTVNFVCBpcyBpdHMgc2l6ZQorICAgSVRFTVNFVCBpcyBhIHNvcnRlZCB2ZWN0b3Igb2YgaXRlbSBudW1iZXJzOyBOSVRFTVNFVCBpcyBpdHMgc2l6ZQogICAgKGFjdHVhbGx5LCBwb2ludHMgdG8ganVzdCBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgcGFydCBvZiBpdCB0aGF0IGlzCiAgICBzaWduaWZpY2FudCkuICBDTE9TVVJFIHBsYWNlcyB0aGVyZSB0aGUgaW5kaWNlcyBvZiBhbGwgaXRlbXMgd2hpY2gKICAgIHJlcHJlc2VudCB1bml0cyBvZiBpbnB1dCB0aGF0IGNvdWxkIGFycml2ZSBuZXh0LiAgKi8KQEAgLTU0LDYgKzUyLDYgQEAKIHZvaWQgZnJlZV9jbG9zdXJlICh2b2lkKTsKIAogZXh0ZXJuIGl0ZW1fbnVtYmVyICppdGVtc2V0OwotZXh0ZXJuIHNpemVfdCBucml0ZW1zZXQ7CitleHRlcm4gc2l6ZV90IG5pdGVtc2V0OwogCiAjZW5kaWYgLyogIUNMT1NVUkVfSF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9jb21wbGFpbi5jIGIvc3JjL2NvbXBsYWluLmMKaW5kZXggOTI3ZGJiNi4uZWRlMGNjZiAxMDA2NDQKLS0tIGEvc3JjL2NvbXBsYWluLmMKKysrIGIvc3JjL2NvbXBsYWluLmMKQEAgLTEsMTEgKzEsMTIgQEAKIC8qIERlY2xhcmF0aW9uIGZvciBlcnJvci1yZXBvcnRpbmcgZnVuY3Rpb24gZm9yIEJpc29uLgogCi0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiwgMjAwNC0yMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLgogCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gICBsYXRlciB2ZXJzaW9uLgorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpAQCAtMTMsOSArMTQsNyBAQAogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCi0gICBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAvKiBCYXNlZCBvbiBlcnJvci5jIGFuZCBlcnJvci5oLAogICAgd3JpdHRlbiBieSBEYXZpZCBNYWNLZW56aWUgPGRqbUBnbnUuYWkubWl0LmVkdT4uICAqLwpAQCAtMjQsNTcgKzIzLDEyNCBAQAogI2luY2x1ZGUgInN5c3RlbS5oIgogCiAjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8cHJvZ25hbWUuaD4KIAogI2luY2x1ZGUgImNvbXBsYWluLmgiCiAjaW5jbHVkZSAiZmlsZXMuaCIKKyNpbmNsdWRlICJnZXRhcmdzLmgiCiAKLS8qIFRoZSBjYWxsaW5nIHByb2dyYW0gc2hvdWxkIGRlZmluZSBwcm9ncmFtX25hbWUgYW5kIHNldCBpdCB0byB0aGUKLSAgIG5hbWUgb2YgdGhlIGV4ZWN1dGluZyBwcm9ncmFtLiAgKi8KLWV4dGVybiBjaGFyICpwcm9ncmFtX25hbWU7Ci0KLS8qIFRoaXMgdmFyaWFibGUgaXMgc2V0IGVhY2ggdGltZSBgd2FybicgaXMgY2FsbGVkLiAgKi8KLWJvb2wgd2FybmluZ19pc3N1ZWQ7Ci0KLS8qIFRoaXMgdmFyaWFibGUgaXMgc2V0IGVhY2ggdGltZSBgY29tcGxhaW4nIGlzIGNhbGxlZC4gICovCiBib29sIGNvbXBsYWludF9pc3N1ZWQ7CitzdGF0aWMgdW5zaWduZWQgKmluZGVudF9wdHIgPSAwOwogCiAMCisKKy8qKiBSZXBvcnQgYW4gZXJyb3IgbWVzc2FnZS4KKyAqCisgKiBccGFyYW0gbG9jICAgICB0aGUgbG9jYXRpb24sIGRlZmF1bHRpbmcgdG8gdGhlIGN1cnJlbnQgZmlsZSwKKyAqICAgICAgICAgICAgICAgIG9yIHRoZSBwcm9ncmFtIG5hbWUuCisgKiBccGFyYW0gcHJlZml4ICBwdXQgYmVmb3JlIHRoZSBtZXNzYWdlIChlLmcuLCAid2FybmluZyIpLgorICogXHBhcmFtIG1lc3NhZ2UgdGhlIGVycm9yIG1lc3NhZ2UsIGEgcHJpbnRmIGZvcm1hdCBzdHJpbmcuICBJZmYgaXQKKyAqICAgICAgICAgICAgICAgIGVuZHMgd2l0aCAiOiAiLCB0aGVuIG5vIHRyYWlsaW5nIG5ld2xpbmUgaXMgcHJpbnRlZCwKKyAqICAgICAgICAgICAgICAgIGFuZCB0aGUgY2FsbGVyIHNob3VsZCBwcmludCB0aGUgcmVtYWluaW5nCisgKiAgICAgICAgICAgICAgICBuZXdsaW5lLXRlcm1pbmF0ZWQgbWVzc2FnZSB0byBzdGRlcnIuCisgKiBccGFyYW0gYXJncyAgICB0aGUgYXJndW1lbnRzIG9mIHRoZSBmb3JtYXQgc3RyaW5nLgorICovCitzdGF0aWMKK3ZvaWQKK2Vycm9yX21lc3NhZ2UgKGxvY2F0aW9uICpsb2MsCisJICAgICAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSwgdmFfbGlzdCBhcmdzKQoreworICB1bnNpZ25lZCBwb3MgPSAwOworCisgIGlmIChsb2MpCisgICAgcG9zICs9IGxvY2F0aW9uX3ByaW50IChzdGRlcnIsICpsb2MpOworICBlbHNlCisgICAgcG9zICs9IGZwcmludGYoc3RkZXJyLCAiJXMiLCBjdXJyZW50X2ZpbGUgPyBjdXJyZW50X2ZpbGUgOiBwcm9ncmFtX25hbWUpOworICBwb3MgKz0gZnByaW50ZihzdGRlcnIsICI6ICIpOworCisgIGlmIChpbmRlbnRfcHRyKQorICAgIHsKKyAgICAgIGlmICghKmluZGVudF9wdHIpCisgICAgICAgICppbmRlbnRfcHRyID0gcG9zOworICAgICAgZWxzZSBpZiAoKmluZGVudF9wdHIgPiBwb3MpCisgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiUqcyIsICppbmRlbnRfcHRyIC0gcG9zLCAiIik7CisgICAgICBpbmRlbnRfcHRyID0gMDsKKyAgICB9CisKKyAgaWYgKHByZWZpeCkKKyAgICBmcHJpbnRmIChzdGRlcnIsICIlczogIiwgcHJlZml4KTsKKworICB2ZnByaW50ZiAoc3RkZXJyLCBtZXNzYWdlLCBhcmdzKTsKKyAgeworICAgIHNpemVfdCBsID0gc3RybGVuIChtZXNzYWdlKTsKKyAgICBpZiAobCA8IDIgfHwgbWVzc2FnZVtsIC0gMl0gIT0gJzonIHx8IG1lc3NhZ2VbbCAtIDFdICE9ICcgJykKKyAgICAgIHsKKyAgICAgICAgcHV0YyAoJ1xuJywgc3RkZXJyKTsKKyAgICAgICAgZmZsdXNoIChzdGRlcnIpOworICAgICAgICBpZiAobG9jICYmIGZlYXR1cmVfZmxhZyAmIGZlYXR1cmVfY2FyZXQpCisgICAgICAgICAgbG9jYXRpb25fY2FyZXQgKHN0ZGVyciwgKmxvYyk7CisgICAgICB9CisgIH0KKyAgZmZsdXNoIChzdGRlcnIpOworfQorCisvKiogV3JhcCBlcnJvcl9tZXNzYWdlKCkgd2l0aCB2YXJhcmdzIGhhbmRsaW5nLiAqLworI2RlZmluZSBFUlJPUl9NRVNTQUdFKExvYywgUHJlZml4LCBNZXNzYWdlKQlcCit7CQkJCQkJXAorICB2YV9saXN0IGFyZ3M7CQkJCQlcCisgIHZhX3N0YXJ0IChhcmdzLCBNZXNzYWdlKTsJCQlcCisgIGVycm9yX21lc3NhZ2UgKExvYywgUHJlZml4LCBNZXNzYWdlLCBhcmdzKTsJXAorICB2YV9lbmQgKGFyZ3MpOwkJCQlcCit9CisKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgUmVwb3J0IGEgd2FybmluZywgYW5kIHByb2NlZWQuICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiB2b2lkCitzZXRfd2FybmluZ19pc3N1ZWQgKHZvaWQpCit7CisgIHN0YXRpYyBib29sIHdhcm5pbmdfaXNzdWVkID0gZmFsc2U7CisgIGlmICghd2FybmluZ19pc3N1ZWQgJiYgKHdhcm5pbmdzX2ZsYWcgJiB3YXJuaW5nc19lcnJvcikpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzXG4iLCBwcm9ncmFtX25hbWUpOworICAgICAgY29tcGxhaW50X2lzc3VlZCA9IHRydWU7CisgICAgfQorICB3YXJuaW5nX2lzc3VlZCA9IHRydWU7Cit9CisKK3ZvaWQKIHdhcm5fYXQgKGxvY2F0aW9uIGxvYywgY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKQogewotICB2YV9saXN0IGFyZ3M7CisgIGlmICghKHdhcm5pbmdzX2ZsYWcgJiB3YXJuaW5nc19vdGhlcikpCisgICAgcmV0dXJuOworICBzZXRfd2FybmluZ19pc3N1ZWQgKCk7CisgIEVSUk9SX01FU1NBR0UgKCZsb2MsIF8oIndhcm5pbmciKSwgbWVzc2FnZSk7Cit9CiAKLSAgbG9jYXRpb25fcHJpbnQgKHN0ZGVyciwgbG9jKTsKLSAgZnB1dHMgKCI6ICIsIHN0ZGVycik7Ci0gIGZwdXRzIChfKCJ3YXJuaW5nOiAiKSwgc3RkZXJyKTsKLQotICB2YV9zdGFydCAoYXJncywgbWVzc2FnZSk7Ci0gIHZmcHJpbnRmIChzdGRlcnIsIG1lc3NhZ2UsIGFyZ3MpOwotICB2YV9lbmQgKGFyZ3MpOwotCi0gIHdhcm5pbmdfaXNzdWVkID0gdHJ1ZTsKLSAgcHV0YyAoJ1xuJywgc3RkZXJyKTsKK3ZvaWQKK3dhcm5fYXRfaW5kZW50IChsb2NhdGlvbiBsb2MsIHVuc2lnbmVkICppbmRlbnQsCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKQoreworICBpZiAoISh3YXJuaW5nc19mbGFnICYgd2FybmluZ3Nfb3RoZXIpKQorICAgIHJldHVybjsKKyAgc2V0X3dhcm5pbmdfaXNzdWVkICgpOworICBpbmRlbnRfcHRyID0gaW5kZW50OworICBFUlJPUl9NRVNTQUdFICgmbG9jLCAqaW5kZW50ID8gTlVMTCA6IF8oIndhcm5pbmciKSwgbWVzc2FnZSk7CiB9CiAKIHZvaWQKIHdhcm4gKGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLikKIHsKLSAgdmFfbGlzdCBhcmdzOwotCi0gIGZwcmludGYgKHN0ZGVyciwgIiVzOiAlcyIsIGN1cnJlbnRfZmlsZSA/IGN1cnJlbnRfZmlsZSA6IHByb2dyYW1fbmFtZSwgXygid2FybmluZzogIikpOwotCi0gIHZhX3N0YXJ0IChhcmdzLCBtZXNzYWdlKTsKLSAgdmZwcmludGYgKHN0ZGVyciwgbWVzc2FnZSwgYXJncyk7Ci0gIHZhX2VuZCAoYXJncyk7Ci0KLSAgd2FybmluZ19pc3N1ZWQgPSB0cnVlOwotICBwdXRjICgnXG4nLCBzdGRlcnIpOworICBpZiAoISh3YXJuaW5nc19mbGFnICYgd2FybmluZ3Nfb3RoZXIpKQorICAgIHJldHVybjsKKyAgc2V0X3dhcm5pbmdfaXNzdWVkICgpOworICBFUlJPUl9NRVNTQUdFIChOVUxMLCBfKCJ3YXJuaW5nIiksIG1lc3NhZ2UpOwogfQotDAorCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IEFuIGVycm9yIGhhcyBvY2N1cnJlZCwgYnV0IHdlIGNhbiBwcm9jZWVkLCBhbmQgZGllIGxhdGVyLiAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTgyLDM0ICsxNDgsNTYgQEAKIHZvaWQKIGNvbXBsYWluX2F0IChsb2NhdGlvbiBsb2MsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLikKIHsKLSAgdmFfbGlzdCBhcmdzOwotCi0gIGxvY2F0aW9uX3ByaW50IChzdGRlcnIsIGxvYyk7Ci0gIGZwdXRzICgiOiAiLCBzdGRlcnIpOwotCi0gIHZhX3N0YXJ0IChhcmdzLCBtZXNzYWdlKTsKLSAgdmZwcmludGYgKHN0ZGVyciwgbWVzc2FnZSwgYXJncyk7Ci0gIHZhX2VuZCAoYXJncyk7Ci0KKyAgRVJST1JfTUVTU0FHRSAoJmxvYywgXygiZXJyb3IiKSwgbWVzc2FnZSk7CiAgIGNvbXBsYWludF9pc3N1ZWQgPSB0cnVlOwotICBwdXRjICgnXG4nLCBzdGRlcnIpOworfQorCit2b2lkCitjb21wbGFpbl9hdF9pbmRlbnQgKGxvY2F0aW9uIGxvYywgdW5zaWduZWQgKmluZGVudCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKQoreworICBpbmRlbnRfcHRyID0gaW5kZW50OworICBFUlJPUl9NRVNTQUdFICgmbG9jLCAqaW5kZW50ID8gTlVMTCA6IF8oImVycm9yIiksIG1lc3NhZ2UpOworICBjb21wbGFpbnRfaXNzdWVkID0gdHJ1ZTsKIH0KIAogdm9pZAogY29tcGxhaW4gKGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLikKIHsKLSAgdmFfbGlzdCBhcmdzOwotCi0gIGZwcmludGYgKHN0ZGVyciwgIiVzOiAiLCBjdXJyZW50X2ZpbGUgPyBjdXJyZW50X2ZpbGUgOiBwcm9ncmFtX25hbWUpOwotCi0gIHZhX3N0YXJ0IChhcmdzLCBtZXNzYWdlKTsKLSAgdmZwcmludGYgKHN0ZGVyciwgbWVzc2FnZSwgYXJncyk7Ci0gIHZhX2VuZCAoYXJncyk7Ci0KKyAgRVJST1JfTUVTU0FHRSAoTlVMTCwgXygiZXJyb3IiKSwgbWVzc2FnZSk7CiAgIGNvbXBsYWludF9pc3N1ZWQgPSB0cnVlOwotICBwdXRjICgnXG4nLCBzdGRlcnIpOwogfQotDAorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IEFuIGluY29tcGF0aWJpbGl0eSB3aXRoIFBPU0lYIFlhY2M6IG1hcHBlZCBlaXRoZXIgdG8gd2Fybiogb3IgfAorfCBjb21wbGFpbiogZGVwZW5kaW5nIG9uIHlhY2NfZmxhZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3ZvaWQKK3lhY2NfYXQgKGxvY2F0aW9uIGxvYywgY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKQoreworICBpZiAoeWFjY19mbGFnKQorICAgIHsKKyAgICAgIEVSUk9SX01FU1NBR0UgKCZsb2MsIE5VTEwsIG1lc3NhZ2UpOworICAgICAgY29tcGxhaW50X2lzc3VlZCA9IHRydWU7CisgICAgfQorICBlbHNlIGlmICh3YXJuaW5nc19mbGFnICYgd2FybmluZ3NfeWFjYykKKyAgICB7CisgICAgICBzZXRfd2FybmluZ19pc3N1ZWQgKCk7CisgICAgICBFUlJPUl9NRVNTQUdFICgmbG9jLCBfKCJ3YXJuaW5nIiksIG1lc3NhZ2UpOworICAgIH0KK30KKwordm9pZAorbWlkcnVsZV92YWx1ZV9hdCAobG9jYXRpb24gbG9jLCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pCit7CisgIGlmICghKHdhcm5pbmdzX2ZsYWcgJiB3YXJuaW5nc19taWRydWxlX3ZhbHVlcykpCisgICAgcmV0dXJuOworICBzZXRfd2FybmluZ19pc3N1ZWQgKCk7CisgIEVSUk9SX01FU1NBR0UgKCZsb2MsIF8oIndhcm5pbmciKSwgbWVzc2FnZSk7Cit9CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgQSBzZXZlcmUgZXJyb3IgaGFzIG9jY3VycmVkLCB3ZSBjYW5ub3QgcHJvY2VlZC4gIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTExNywzMSArMjA1LDEzIEBACiB2b2lkCiBmYXRhbF9hdCAobG9jYXRpb24gbG9jLCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pCiB7Ci0gIHZhX2xpc3QgYXJnczsKLQotICBsb2NhdGlvbl9wcmludCAoc3RkZXJyLCBsb2MpOwotICBmcHV0cyAoIjogIiwgc3RkZXJyKTsKLSAgZnB1dHMgKF8oImZhdGFsIGVycm9yOiAiKSwgc3RkZXJyKTsKLQotICB2YV9zdGFydCAoYXJncywgbWVzc2FnZSk7Ci0gIHZmcHJpbnRmIChzdGRlcnIsIG1lc3NhZ2UsIGFyZ3MpOwotICB2YV9lbmQgKGFyZ3MpOwotICBwdXRjICgnXG4nLCBzdGRlcnIpOworICBFUlJPUl9NRVNTQUdFICgmbG9jLCBfKCJmYXRhbCBlcnJvciIpLCBtZXNzYWdlKTsKICAgZXhpdCAoRVhJVF9GQUlMVVJFKTsKIH0KIAogdm9pZAogZmF0YWwgKGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLikKIHsKLSAgdmFfbGlzdCBhcmdzOwotCi0gIGZwcmludGYgKHN0ZGVyciwgIiVzOiAiLCBjdXJyZW50X2ZpbGUgPyBjdXJyZW50X2ZpbGUgOiBwcm9ncmFtX25hbWUpOwotCi0gIGZwdXRzIChfKCJmYXRhbCBlcnJvcjogIiksIHN0ZGVycik7Ci0KLSAgdmFfc3RhcnQgKGFyZ3MsIG1lc3NhZ2UpOwotICB2ZnByaW50ZiAoc3RkZXJyLCBtZXNzYWdlLCBhcmdzKTsKLSAgdmFfZW5kIChhcmdzKTsKLSAgcHV0YyAoJ1xuJywgc3RkZXJyKTsKKyAgRVJST1JfTUVTU0FHRSAoTlVMTCwgXygiZmF0YWwgZXJyb3IiKSwgbWVzc2FnZSk7CiAgIGV4aXQgKEVYSVRfRkFJTFVSRSk7CiB9CmRpZmYgLS1naXQgYS9zcmMvY29tcGxhaW4uaCBiL3NyYy9jb21wbGFpbi5oCmluZGV4IDlhZTMzNGEuLjk5N2Q1NzcgMTAwNjQ0Ci0tLSBhL3NyYy9jb21wbGFpbi5oCisrKyBiL3NyYy9jb21wbGFpbi5oCkBAIC0xLDEwICsxLDEyIEBACiAvKiBEZWNsYXJhdGlvbiBmb3IgZXJyb3ItcmVwb3J0aW5nIGZ1bmN0aW9uIGZvciBCaXNvbi4KLSAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICAgbGF0ZXIgdmVyc2lvbi4KKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAyLCAyMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCkBAIC0xMiw5ICsxNCw3IEBACiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKLSAgIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpZm5kZWYgQ09NUExBSU5fSF8KICMgZGVmaW5lIENPTVBMQUlOX0hfIDEKQEAgLTI1LDcgKzI1LDE4IEBACiBleHRlcm4gIkMiIHsKICMgZW5kaWYKIAotLyogSW5mb3JtYXRpdmUgbWVzc2FnZXMsIGJ1dCB3ZSBwcm9jZWVkLiAgKi8KKy8qIFN1Yi1tZXNzYWdlcyBpbmRlbnQuICovCisjZGVmaW5lIFNVQl9JTkRFTlQgKDQpCisKKy8qKiBSZWNvcmQgdGhhdCBhIHdhcm5pbmcgaXMgYWJvdXQgdG8gYmUgaXNzdWVkLCBhbmQgdHJlYXQgaXQgYXMgYW4KKyAgICBlcnJvciBpZiA8dHQ+d2FybmluZ3NfZmxhZyAmIHdhcm5pbmdzX2Vycm9yPC90dD4uICBUaGlzIGlzIGV4cG9ydGVkCisgICAgb25seSBmb3IgdGhlIHNha2Ugb2YgWWFjYy1jb21wYXRpYmxlIGNvbmZsaWN0IHJlcG9ydHMgaW4gY29uZmxpY3RzLmMuCisgICAgQWxsIG90aGVyIHdhcm5pbmdzIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiBjb21wbGFpbi5jIGFuZCBzaG91bGQgdXNlCisgICAgdGhlIG5vcm1hbCB3YXJuaW5nIGZvcm1hdC4gICovCit2b2lkIHNldF93YXJuaW5nX2lzc3VlZCAodm9pZCk7CisKKy8qKiBJbmZvcm1hdGl2ZSBtZXNzYWdlcywgYnV0IHdlIHByb2NlZWQuICBSZXBvcnQgaWZmCisgICAgPHR0Pndhcm5pbmdzX2ZsYWcgJiB3YXJuaW5nc19vdGhlcjwvdHQ+LiAgKi8KIAogdm9pZCB3YXJuIChjaGFyIGNvbnN0ICpmb3JtYXQsIC4uLikKICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDEsIDIpKSk7CkBAIC0zMyw3ICs0NCwxNCBAQAogdm9pZCB3YXJuX2F0IChsb2NhdGlvbiBsb2MsIGNoYXIgY29uc3QgKmZvcm1hdCwgLi4uKQogICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKIAotLyogU29tZXRoaW5nIGJhZCBoYXBwZW5lZCwgYnV0IGxldCdzIGNvbnRpbnVlIGFuZCBkaWUgbGF0ZXIuICAqLworLyogR2VuZXJhdGUgYSBtZXNzYWdlIGFsaWduZWQgYnkgYW4gaW5kZW50LgorICAgV2hlbiAqaW5kZW50ID09IDAsIGFzc2lnbiBtZXNzYWdlJ3MgaW5kZW50IHRvICppbmRlbnQsCisgICBXaGVuICppbmRlbnQgPiAwLCBhbGlnbiB0aGUgbWVzc2FnZSBieSAqaW5kZW50IHZhbHVlLiAqLwordm9pZCB3YXJuX2F0X2luZGVudCAobG9jYXRpb24gbG9jLCB1bnNpZ25lZCAqaW5kZW50LAorICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqZm9ybWF0LCAuLi4pCisgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOworCisvKiogQW4gZXJyb3IsIGJ1dCB3ZSBjb250aW51ZSBhbmQgZGllIGxhdGVyLiAgKi8KIAogdm9pZCBjb21wbGFpbiAoY2hhciBjb25zdCAqZm9ybWF0LCAuLi4pCiAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAxLCAyKSkpOwpAQCAtNDEsNyArNTksMjYgQEAKIHZvaWQgY29tcGxhaW5fYXQgKGxvY2F0aW9uIGxvYywgY2hhciBjb25zdCAqZm9ybWF0LCAuLi4pCiAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwogCi0vKiBTb21ldGhpbmcgYmFkIGhhcHBlbmVkLCBhbmQgbGV0J3MgZGllIG5vdy4gICovCisvKiBHZW5lcmF0ZSBhIG1lc3NhZ2UgYWxpZ25lZCBieSBhbiBpbmRlbnQuCisgICBXaGVuICppbmRlbnQgPT0gMCwgYXNzaWduIG1lc3NhZ2UncyBpbmRlbnQgdG8gKmluZGVudCwKKyAgIFdoZW4gKmluZGVudCA+IDAsIGFsaWduIHRoZSBtZXNzYWdlIGJ5ICppbmRlbnQgdmFsdWUuICovCit2b2lkIGNvbXBsYWluX2F0X2luZGVudCAobG9jYXRpb24gbG9jLCB1bnNpZ25lZCAqaW5kZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKmZvcm1hdCwgLi4uKQorICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKKworLyoqIEFuIGluY29tcGF0aWJpbGl0eSB3aXRoIFBPU0lYIFlhY2M6IG1hcHBlZCBlaXRoZXIgdG8gd2Fybiogb3IKKyAgICBjb21wbGFpbiogZGVwZW5kaW5nIG9uIHlhY2NfZmxhZy4gKi8KKwordm9pZCB5YWNjX2F0IChsb2NhdGlvbiBsb2MsIGNoYXIgY29uc3QgKmZvcm1hdCwgLi4uKQorICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKKworLyoqIEEgbWlkcnVsZS12YWx1ZSB3YXJuaW5nLiAgUmVwb3J0IGlmZgorICAgIDx0dD53YXJuaW5nc19mbGFnICYgd2FybmluZ3NfbWlkcnVsZV92YWx1ZXM8L3R0Pi4gICovCisKK3ZvaWQgbWlkcnVsZV92YWx1ZV9hdCAobG9jYXRpb24gbG9jLCBjaGFyIGNvbnN0ICpmb3JtYXQsIC4uLikKKyAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CisKKy8qKiBBIGZhdGFsIGVycm9yLCBjYXVzaW5nIGltbWVkaWF0ZSBleGl0LiAgKi8KIAogdm9pZCBmYXRhbCAoY2hhciBjb25zdCAqZm9ybWF0LCAuLi4pCiAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18sIF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDEsIDIpKSk7CkBAIC00OSwxMCArODYsNyBAQAogdm9pZCBmYXRhbF9hdCAobG9jYXRpb24gbG9jLCBjaGFyIGNvbnN0ICpmb3JtYXQsIC4uLikKICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXywgX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKIAotLyogVGhpcyB2YXJpYWJsZSBpcyBzZXQgZWFjaCB0aW1lIGB3YXJuJyBpcyBjYWxsZWQuICAqLwotZXh0ZXJuIGJvb2wgd2FybmluZ19pc3N1ZWQ7Ci0KLS8qIFRoaXMgdmFyaWFibGUgaXMgc2V0IGVhY2ggdGltZSBgY29tcGxhaW4nIGlzIGNhbGxlZC4gICovCisvKiogV2hldGhlciBhbiBlcnJvciB3YXMgcmVwb3J0ZWQuICAqLwogZXh0ZXJuIGJvb2wgY29tcGxhaW50X2lzc3VlZDsKIAogIyBpZmRlZglfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvc3JjL2NvbmZsaWN0cy5jIGIvc3JjL2NvbmZsaWN0cy5jCmluZGV4IDEzMTIxZjYuLmJhMGI2ZWQgMTAwNjQ0Ci0tLSBhL3NyYy9jb25mbGljdHMuYworKysgYi9zcmMvY29uZmxpY3RzLmMKQEAgLTEsMjQgKzEsMjIgQEAKLS8qIEZpbmQgYW5kIHJlc29sdmUgb3IgcmVwb3J0IGxvb2stYWhlYWQgY29uZmxpY3RzIGZvciBiaXNvbiwKKy8qIEZpbmQgYW5kIHJlc29sdmUgb3IgcmVwb3J0IGxvb2thaGVhZCBjb25mbGljdHMgZm9yIGJpc29uLAogCi0gICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTIsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYKLSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkyLCAyMDAwLTIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuCiAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgogCi0gICBCaXNvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCi0gICBCaXNvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCBCaXNvbjsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0gICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gICAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjaW5jbHVkZSAic3lzdGVtLmgiCkBAIC0zMiw2ICszMCw3IEBACiAjaW5jbHVkZSAiZ2V0YXJncy5oIgogI2luY2x1ZGUgImdyYW0uaCIKICNpbmNsdWRlICJsYWxyLmgiCisjaW5jbHVkZSAicHJpbnQteG1sLmgiCiAjaW5jbHVkZSAicmVhZGVyLmgiCiAjaW5jbHVkZSAic3RhdGUuaCIKICNpbmNsdWRlICJzeW10YWIuaCIKQEAgLTQxLDkgKzQwLDEwIEBACiBpbnQgZXhwZWN0ZWRfcnJfY29uZmxpY3RzID0gLTE7CiBzdGF0aWMgY2hhciAqY29uZmxpY3RzOwogc3RhdGljIHN0cnVjdCBvYnN0YWNrIHNvbHZlZF9jb25mbGljdHNfb2JzdGFjazsKK3N0YXRpYyBzdHJ1Y3Qgb2JzdGFjayBzb2x2ZWRfY29uZmxpY3RzX3htbF9vYnN0YWNrOwogCiBzdGF0aWMgYml0c2V0IHNoaWZ0X3NldDsKLXN0YXRpYyBiaXRzZXQgbG9va19haGVhZF9zZXQ7CitzdGF0aWMgYml0c2V0IGxvb2thaGVhZF9zZXQ7CiAKIAwKIApAQCAtNzMsMjQgKzczLDI2IEBACiAJewogCWNhc2Ugc2hpZnRfcmVzb2x1dGlvbjoKIAljYXNlIHJpZ2h0X3Jlc29sdXRpb246Ci0JICBvYnN0YWNrX2Zncm93MiAoJnNvbHZlZF9jb25mbGljdHNfb2JzdGFjaywKLQkJCSAgXygiXAotICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgc2hpZnQiKSwKKwkgIG9ic3RhY2tfcHJpbnRmICgmc29sdmVkX2NvbmZsaWN0c19vYnN0YWNrLAorCQkJICBfKCIgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlICVkIGFuZCB0b2tlbiAlcyIKKwkJCSAgICAiIHJlc29sdmVkIGFzIHNoaWZ0IiksCiAJCQkgIHItPm51bWJlciwKIAkJCSAgc3ltYm9sc1t0b2tlbl0tPnRhZyk7CiAJICBicmVhazsKKwogCWNhc2UgcmVkdWNlX3Jlc29sdXRpb246CiAJY2FzZSBsZWZ0X3Jlc29sdXRpb246Ci0JICBvYnN0YWNrX2Zncm93MiAoJnNvbHZlZF9jb25mbGljdHNfb2JzdGFjaywKLQkJCSAgXygiXAotICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMgcmVzb2x2ZWQgYXMgcmVkdWNlIiksCisJICBvYnN0YWNrX3ByaW50ZiAoJnNvbHZlZF9jb25mbGljdHNfb2JzdGFjaywKKwkJCSAgXygiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMiCisJCQkgICAgIiByZXNvbHZlZCBhcyByZWR1Y2UiKSwKIAkJCSAgci0+bnVtYmVyLAogCQkJICBzeW1ib2xzW3Rva2VuXS0+dGFnKTsKIAkgIGJyZWFrOworCiAJY2FzZSBub25hc3NvY19yZXNvbHV0aW9uOgotCSAgb2JzdGFja19mZ3JvdzIgKCZzb2x2ZWRfY29uZmxpY3RzX29ic3RhY2ssCi0JCQkgIF8oIlwKLSAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgJWQgYW5kIHRva2VuICVzIHJlc29sdmVkIGFzIGFuIGVycm9yIiksCisJICBvYnN0YWNrX3ByaW50ZiAoJnNvbHZlZF9jb25mbGljdHNfb2JzdGFjaywKKwkJCSAgXygiICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAlZCBhbmQgdG9rZW4gJXMiCisJCQkgICAgIiByZXNvbHZlZCBhcyBhbiBlcnJvciIpLAogCQkJICByLT5udW1iZXIsCiAJCQkgIHN5bWJvbHNbdG9rZW5dLT50YWcpOwogCSAgYnJlYWs7CkBAIC0xMDAsNDUgKzEwMiwxMTkgQEAKICAgICAgIHN3aXRjaCAocmVzb2x1dGlvbikKIAl7CiAJY2FzZSBzaGlmdF9yZXNvbHV0aW9uOgotCSAgb2JzdGFja19mZ3JvdzIgKCZzb2x2ZWRfY29uZmxpY3RzX29ic3RhY2ssCisJICBvYnN0YWNrX3ByaW50ZiAoJnNvbHZlZF9jb25mbGljdHNfb2JzdGFjaywKIAkJCSAgIiAoJXMgPCAlcykiLAogCQkJICByLT5wcmVjLT50YWcsCiAJCQkgIHN5bWJvbHNbdG9rZW5dLT50YWcpOwogCSAgYnJlYWs7CiAKIAljYXNlIHJlZHVjZV9yZXNvbHV0aW9uOgotCSAgb2JzdGFja19mZ3JvdzIgKCZzb2x2ZWRfY29uZmxpY3RzX29ic3RhY2ssCisJICBvYnN0YWNrX3ByaW50ZiAoJnNvbHZlZF9jb25mbGljdHNfb2JzdGFjaywKIAkJCSAgIiAoJXMgPCAlcykiLAogCQkJICBzeW1ib2xzW3Rva2VuXS0+dGFnLAogCQkJICByLT5wcmVjLT50YWcpOwogCSAgYnJlYWs7CiAKIAljYXNlIGxlZnRfcmVzb2x1dGlvbjoKLQkgIG9ic3RhY2tfZmdyb3cxICgmc29sdmVkX2NvbmZsaWN0c19vYnN0YWNrLAorCSAgb2JzdGFja19wcmludGYgKCZzb2x2ZWRfY29uZmxpY3RzX29ic3RhY2ssCiAJCQkgICIgKCUlbGVmdCAlcykiLAogCQkJICBzeW1ib2xzW3Rva2VuXS0+dGFnKTsKIAkgIGJyZWFrOwogCiAJY2FzZSByaWdodF9yZXNvbHV0aW9uOgotCSAgb2JzdGFja19mZ3JvdzEgKCZzb2x2ZWRfY29uZmxpY3RzX29ic3RhY2ssCisJICBvYnN0YWNrX3ByaW50ZiAoJnNvbHZlZF9jb25mbGljdHNfb2JzdGFjaywKIAkJCSAgIiAoJSVyaWdodCAlcykiLAogCQkJICBzeW1ib2xzW3Rva2VuXS0+dGFnKTsKIAkgIGJyZWFrOworCiAJY2FzZSBub25hc3NvY19yZXNvbHV0aW9uOgotCSAgb2JzdGFja19mZ3JvdzEgKCZzb2x2ZWRfY29uZmxpY3RzX29ic3RhY2ssCisJICBvYnN0YWNrX3ByaW50ZiAoJnNvbHZlZF9jb25mbGljdHNfb2JzdGFjaywKIAkJCSAgIiAoJSVub25hc3NvYyAlcykiLAogCQkJICBzeW1ib2xzW3Rva2VuXS0+dGFnKTsKIAkgIGJyZWFrOwogCX0KKwogICAgICAgb2JzdGFja19zZ3JvdyAoJnNvbHZlZF9jb25mbGljdHNfb2JzdGFjaywgIi5cbiIpOwogICAgIH0KKworICAvKiBYTUwgcmVwb3J0ICovCisgIGlmICh4bWxfZmxhZykKKyAgICB7CisgICAgICAvKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIHJlc29sdXRpb24uICovCisgICAgICBzd2l0Y2ggKHJlc29sdXRpb24pCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBzaGlmdF9yZXNvbHV0aW9uOgorICAgICAgICBjYXNlIHJpZ2h0X3Jlc29sdXRpb246CisgICAgICAgICAgb2JzdGFja19wcmludGYgKCZzb2x2ZWRfY29uZmxpY3RzX3htbF9vYnN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICA8cmVzb2x1dGlvbiBydWxlPVwiJWRcIiBzeW1ib2w9XCIlc1wiIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiIHR5cGU9XCJzaGlmdFwiPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHItPm51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sX2VzY2FwZSAoc3ltYm9sc1t0b2tlbl0tPnRhZykpOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgcmVkdWNlX3Jlc29sdXRpb246CisgICAgICAgIGNhc2UgbGVmdF9yZXNvbHV0aW9uOgorICAgICAgICAgIG9ic3RhY2tfcHJpbnRmICgmc29sdmVkX2NvbmZsaWN0c194bWxfb2JzdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgPHJlc29sdXRpb24gcnVsZT1cIiVkXCIgc3ltYm9sPVwiJXNcIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0eXBlPVwicmVkdWNlXCI+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgci0+bnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxfZXNjYXBlIChzeW1ib2xzW3Rva2VuXS0+dGFnKSk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBub25hc3NvY19yZXNvbHV0aW9uOgorICAgICAgICAgIG9ic3RhY2tfcHJpbnRmICgmc29sdmVkX2NvbmZsaWN0c194bWxfb2JzdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgPHJlc29sdXRpb24gcnVsZT1cIiVkXCIgc3ltYm9sPVwiJXNcIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0eXBlPVwiZXJyb3JcIj4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICByLT5udW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbF9lc2NhcGUgKHN5bWJvbHNbdG9rZW5dLT50YWcpKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAvKiBUaGUgcmVhc29uLiAqLworICAgICAgc3dpdGNoIChyZXNvbHV0aW9uKQorICAgICAgICB7CisgICAgICAgIGNhc2Ugc2hpZnRfcmVzb2x1dGlvbjoKKyAgICAgICAgICBvYnN0YWNrX3ByaW50ZiAoJnNvbHZlZF9jb25mbGljdHNfeG1sX29ic3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyAmbHQ7ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sX2VzY2FwZV9uICgwLCByLT5wcmVjLT50YWcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxfZXNjYXBlX24gKDEsIHN5bWJvbHNbdG9rZW5dLT50YWcpKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIHJlZHVjZV9yZXNvbHV0aW9uOgorICAgICAgICAgIG9ic3RhY2tfcHJpbnRmICgmc29sdmVkX2NvbmZsaWN0c194bWxfb2JzdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzICZsdDsgJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxfZXNjYXBlX24gKDAsIHN5bWJvbHNbdG9rZW5dLT50YWcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxfZXNjYXBlX24gKDEsIHItPnByZWMtPnRhZykpOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgbGVmdF9yZXNvbHV0aW9uOgorICAgICAgICAgIG9ic3RhY2tfcHJpbnRmICgmc29sdmVkX2NvbmZsaWN0c194bWxfb2JzdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiUlbGVmdCAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbF9lc2NhcGUgKHN5bWJvbHNbdG9rZW5dLT50YWcpKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIHJpZ2h0X3Jlc29sdXRpb246CisgICAgICAgICAgb2JzdGFja19wcmludGYgKCZzb2x2ZWRfY29uZmxpY3RzX3htbF9vYnN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiJSVyaWdodCAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbF9lc2NhcGUgKHN5bWJvbHNbdG9rZW5dLT50YWcpKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIG5vbmFzc29jX3Jlc29sdXRpb246CisgICAgICAgICAgb2JzdGFja19wcmludGYgKCZzb2x2ZWRfY29uZmxpY3RzX3htbF9vYnN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiJSVub25hc3NvYyAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbF9lc2NhcGUgKHN5bWJvbHNbdG9rZW5dLT50YWcpKTsKKyAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgIG9ic3RhY2tfc2dyb3cgKCZzb2x2ZWRfY29uZmxpY3RzX3htbF9vYnN0YWNrLCAiPC9yZXNvbHV0aW9uPlxuIik7CisgICAgfQogfQogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCBUdXJuIG9mZiB0aGUgc2hpZnQgcmVjb3JkZWQgZm9yIHRoZSBzcGVjaWZpZWQgdG9rZW4gaW4gdGhlICAgICAgICB8CiB8IHNwZWNpZmllZCBzdGF0ZS4gIFVzZWQgd2hlbiB3ZSByZXNvbHZlIGEgc2hpZnQtcmVkdWNlIGNvbmZsaWN0IGluIHwKLXwgZmF2b3Igb2YgdGhlIHJlZHVjdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBmYXZvciBvZiB0aGUgcmVkdWN0aW9uIG9yIGFzIGFuIGVycm9yICglbm9uYXNzb2MpLiAgICAgICAgICAgICAgICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIHZvaWQKQEAgLTE0Nyw3ICsyMjMsNyBAQAogICB0cmFuc2l0aW9ucyAqdHJhbnMgPSBzLT50cmFuc2l0aW9uczsKICAgaW50IGk7CiAKLSAgYml0c2V0X3Jlc2V0IChsb29rX2FoZWFkX3NldCwgdG9rZW4pOworICBiaXRzZXRfcmVzZXQgKGxvb2thaGVhZF9zZXQsIHRva2VuKTsKICAgZm9yIChpID0gMDsgaSA8IHRyYW5zLT5udW07IGkrKykKICAgICBpZiAoIVRSQU5TSVRJT05fSVNfRElTQUJMRUQgKHRyYW5zLCBpKQogCSYmIFRSQU5TSVRJT05fU1lNQk9MICh0cmFucywgaSkgPT0gdG9rZW4pCkBAIC0xNTYsMTUgKzIzMiwxNSBAQAogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFR1cm4gb2ZmIHRoZSByZWR1Y2UgcmVjb3JkZWQgZm9yIHRoZSBzcGVjaWZpZWQgdG9rZW4gZm9yIHRoZSAgICAgICAgfAotfCBzcGVjaWZpZWQgbG9vay1haGVhZC4gIFVzZWQgd2hlbiB3ZSByZXNvbHZlIGEgc2hpZnQtcmVkdWNlIGNvbmZsaWN0IHwKLXwgaW4gZmF2b3Igb2YgdGhlIHNoaWZ0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IFR1cm4gb2ZmIHRoZSByZWR1Y2UgcmVjb3JkZWQgZm9yIHRoZSBzcGVjaWZpZWQgdG9rZW4gaW4gdGhlICAgICAgICAgfAorfCBzcGVjaWZpZWQgbG9va2FoZWFkIHNldC4gIFVzZWQgd2hlbiB3ZSByZXNvbHZlIGEgc2hpZnQtcmVkdWNlICAgICAgIHwKK3wgY29uZmxpY3QgaW4gZmF2b3Igb2YgdGhlIHNoaWZ0IG9yIGFzIGFuIGVycm9yICglbm9uYXNzb2MpLiAgICAgICAgICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgdm9pZAotZmx1c2hfcmVkdWNlIChiaXRzZXQgbG9va19haGVhZF90b2tlbnMsIGludCB0b2tlbikKK2ZsdXNoX3JlZHVjZSAoYml0c2V0IGxvb2thaGVhZF90b2tlbnMsIGludCB0b2tlbikKIHsKLSAgYml0c2V0X3Jlc2V0IChsb29rX2FoZWFkX3Rva2VucywgdG9rZW4pOworICBiaXRzZXRfcmVzZXQgKGxvb2thaGVhZF90b2tlbnMsIHRva2VuKTsKIH0KIAogCkBAIC0xNzQsMjUgKzI1MCwyNSBAQAogfCBydWxlIGhhcyBhIHByZWNlZGVuY2UuICBBIGNvbmZsaWN0IGlzIHJlc29sdmVkIGJ5IG1vZGlmeWluZyB0aGUgICB8CiB8IHNoaWZ0IG9yIHJlZHVjZSB0YWJsZXMgc28gdGhhdCB0aGVyZSBpcyBubyBsb25nZXIgYSBjb25mbGljdC4gICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCBSVUxFTk8gaXMgdGhlIG51bWJlciBvZiB0aGUgbG9vay1haGVhZCBiaXRzZXQgdG8gY29uc2lkZXIuICAgICAgfAorfCBSVUxFTk8gaXMgdGhlIG51bWJlciBvZiB0aGUgbG9va2FoZWFkIGJpdHNldCB0byBjb25zaWRlci4gICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgRVJST1JTIGNhbiBiZSB1c2VkIHRvIHN0b3JlIGRpc2NvdmVyZWQgZXhwbGljaXQgZXJyb3JzLiAgICAgICAgICAgfAorfCBFUlJPUlMgYW5kIE5FUlJTIGNhbiBiZSB1c2VkIHRvIHN0b3JlIGRpc2NvdmVyZWQgZXhwbGljaXQgICAgICAgICB8Cit8IGVycm9ycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgdm9pZAotcmVzb2x2ZV9zcl9jb25mbGljdCAoc3RhdGUgKnMsIGludCBydWxlbm8sIHN5bWJvbCAqKmVycm9ycykKK3Jlc29sdmVfc3JfY29uZmxpY3QgKHN0YXRlICpzLCBpbnQgcnVsZW5vLCBzeW1ib2wgKiplcnJvcnMsIGludCAqbmVycnMpCiB7CiAgIHN5bWJvbF9udW1iZXIgaTsKICAgcmVkdWN0aW9ucyAqcmVkcyA9IHMtPnJlZHVjdGlvbnM7CiAgIC8qIEZpbmQgdGhlIHJ1bGUgdG8gcmVkdWNlIGJ5IHRvIGdldCBwcmVjZWRlbmNlIG9mIHJlZHVjdGlvbi4gICovCiAgIHJ1bGUgKnJlZHJ1bGUgPSByZWRzLT5ydWxlc1tydWxlbm9dOwogICBpbnQgcmVkcHJlYyA9IHJlZHJ1bGUtPnByZWMtPnByZWM7Ci0gIGJpdHNldCBsb29rX2FoZWFkX3Rva2VucyA9IHJlZHMtPmxvb2tfYWhlYWRfdG9rZW5zW3J1bGVub107Ci0gIGludCBuZXJycyA9IDA7CisgIGJpdHNldCBsb29rYWhlYWRfdG9rZW5zID0gcmVkcy0+bG9va2FoZWFkX3Rva2Vuc1tydWxlbm9dOwogCiAgIGZvciAoaSA9IDA7IGkgPCBudG9rZW5zOyBpKyspCi0gICAgaWYgKGJpdHNldF90ZXN0IChsb29rX2FoZWFkX3Rva2VucywgaSkKLQkmJiBiaXRzZXRfdGVzdCAobG9va19haGVhZF9zZXQsIGkpCisgICAgaWYgKGJpdHNldF90ZXN0IChsb29rYWhlYWRfdG9rZW5zLCBpKQorCSYmIGJpdHNldF90ZXN0IChsb29rYWhlYWRfc2V0LCBpKQogCSYmIHN5bWJvbHNbaV0tPnByZWMpCiAgICAgICB7CiAJLyogU2hpZnQtcmVkdWNlIGNvbmZsaWN0IG9jY3VycyBmb3IgdG9rZW4gbnVtYmVyIGkKQEAgLTIwNiw3ICsyODIsNyBAQAogCWVsc2UgaWYgKHN5bWJvbHNbaV0tPnByZWMgPiByZWRwcmVjKQogCSAgewogCSAgICBsb2dfcmVzb2x1dGlvbiAocmVkcnVsZSwgaSwgc2hpZnRfcmVzb2x1dGlvbik7Ci0JICAgIGZsdXNoX3JlZHVjZSAobG9va19haGVhZF90b2tlbnMsIGkpOworCSAgICBmbHVzaF9yZWR1Y2UgKGxvb2thaGVhZF90b2tlbnMsIGkpOwogCSAgfQogCWVsc2UKIAkgIC8qIE1hdGNoaW5nIHByZWNlZGVuY2UgbGV2ZWxzLgpAQCAtMjIxLDcgKzI5Nyw3IEBACiAKIAkgICAgY2FzZSByaWdodF9hc3NvYzoKIAkgICAgICBsb2dfcmVzb2x1dGlvbiAocmVkcnVsZSwgaSwgcmlnaHRfcmVzb2x1dGlvbik7Ci0JICAgICAgZmx1c2hfcmVkdWNlIChsb29rX2FoZWFkX3Rva2VucywgaSk7CisJICAgICAgZmx1c2hfcmVkdWNlIChsb29rYWhlYWRfdG9rZW5zLCBpKTsKIAkgICAgICBicmVhazsKIAogCSAgICBjYXNlIGxlZnRfYXNzb2M6CkBAIC0yMzIsMjUgKzMwOCwxMiBAQAogCSAgICBjYXNlIG5vbl9hc3NvYzoKIAkgICAgICBsb2dfcmVzb2x1dGlvbiAocmVkcnVsZSwgaSwgbm9uYXNzb2NfcmVzb2x1dGlvbik7CiAJICAgICAgZmx1c2hfc2hpZnQgKHMsIGkpOwotCSAgICAgIGZsdXNoX3JlZHVjZSAobG9va19haGVhZF90b2tlbnMsIGkpOworCSAgICAgIGZsdXNoX3JlZHVjZSAobG9va2FoZWFkX3Rva2VucywgaSk7CiAJICAgICAgLyogUmVjb3JkIGFuIGV4cGxpY2l0IGVycm9yIGZvciB0aGlzIHRva2VuLiAgKi8KLQkgICAgICBlcnJvcnNbbmVycnMrK10gPSBzeW1ib2xzW2ldOworCSAgICAgIGVycm9yc1soKm5lcnJzKSsrXSA9IHN5bWJvbHNbaV07CiAJICAgICAgYnJlYWs7CiAJICAgIH0KICAgICAgIH0KLQotICBpZiAobmVycnMpCi0gICAgewotICAgICAgLyogU29tZSB0b2tlbnMgaGF2ZSBiZWVuIGV4cGxpY2l0bHkgbWFkZSBlcnJvcnMuICBBbGxvY2F0ZSBhCi0JIHBlcm1hbmVudCBlcnJzIHN0cnVjdHVyZSBmb3IgdGhpcyBzdGF0ZSwgdG8gcmVjb3JkIHRoZW0uICAqLwotICAgICAgc3RhdGVfZXJyc19zZXQgKHMsIG5lcnJzLCBlcnJvcnMpOwotICAgIH0KLQotICBpZiAob2JzdGFja19vYmplY3Rfc2l6ZSAoJnNvbHZlZF9jb25mbGljdHNfb2JzdGFjaykpCi0gICAgewotICAgICAgb2JzdGFja18xZ3JvdyAoJnNvbHZlZF9jb25mbGljdHNfb2JzdGFjaywgJ1wwJyk7Ci0gICAgICBzLT5zb2x2ZWRfY29uZmxpY3RzID0gb2JzdGFja19maW5pc2ggKCZzb2x2ZWRfY29uZmxpY3RzX29ic3RhY2spOwotICAgIH0KIH0KIAogCkBAIC0yNTgsNyArMzIxLDcgQEAKIHwgU29sdmUgdGhlIFMvUiBjb25mbGljdHMgb2Ygc3RhdGUgUyB1c2luZyB0aGUgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgcHJlY2VkZW5jZS9hc3NvY2lhdGl2aXR5LCBhbmQgZmxhZyBpdCBpbmNvbnNpc3RlbnQgaWYgaXQgc3RpbGwgaGFzIHwKIHwgY29uZmxpY3RzLiAgRVJST1JTIGNhbiBiZSB1c2VkIGFzIHN0b3JhZ2UgdG8gY29tcHV0ZSB0aGUgbGlzdCBvZiAgIHwKLXwgbG9vay1haGVhZCB0b2tlbnMgb24gd2hpY2ggUyByYWlzZXMgYSBzeW50YXggZXJyb3IgKCVub25hc3NvYykuICAgIHwKK3wgbG9va2FoZWFkIHRva2VucyBvbiB3aGljaCBTIHJhaXNlcyBhIHN5bnRheCBlcnJvciAoJW5vbmFzc29jKS4gICAgIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIHZvaWQKQEAgLTI2NywzMSArMzMwLDQ4IEBACiAgIGludCBpOwogICB0cmFuc2l0aW9ucyAqdHJhbnMgPSBzLT50cmFuc2l0aW9uczsKICAgcmVkdWN0aW9ucyAqcmVkcyA9IHMtPnJlZHVjdGlvbnM7CisgIGludCBuZXJycyA9IDA7CiAKICAgaWYgKHMtPmNvbnNpc3RlbnQpCiAgICAgcmV0dXJuOwogCi0gIGJpdHNldF96ZXJvIChsb29rX2FoZWFkX3NldCk7CisgIGJpdHNldF96ZXJvIChsb29rYWhlYWRfc2V0KTsKIAogICBGT1JfRUFDSF9TSElGVCAodHJhbnMsIGkpCi0gICAgYml0c2V0X3NldCAobG9va19haGVhZF9zZXQsIFRSQU5TSVRJT05fU1lNQk9MICh0cmFucywgaSkpOworICAgIGJpdHNldF9zZXQgKGxvb2thaGVhZF9zZXQsIFRSQU5TSVRJT05fU1lNQk9MICh0cmFucywgaSkpOwogCi0gIC8qIExvb3Agb3ZlciBhbGwgcnVsZXMgd2hpY2ggcmVxdWlyZSBsb29rLWFoZWFkIGluIHRoaXMgc3RhdGUuICBGaXJzdAorICAvKiBMb29wIG92ZXIgYWxsIHJ1bGVzIHdoaWNoIHJlcXVpcmUgbG9va2FoZWFkIGluIHRoaXMgc3RhdGUuICBGaXJzdAogICAgICBjaGVjayBmb3Igc2hpZnQtcmVkdWNlIGNvbmZsaWN0LCBhbmQgdHJ5IHRvIHJlc29sdmUgdXNpbmcKICAgICAgcHJlY2VkZW5jZS4gICovCiAgIGZvciAoaSA9IDA7IGkgPCByZWRzLT5udW07ICsraSkKICAgICBpZiAocmVkcy0+cnVsZXNbaV0tPnByZWMgJiYgcmVkcy0+cnVsZXNbaV0tPnByZWMtPnByZWMKLQkmJiAhYml0c2V0X2Rpc2pvaW50X3AgKHJlZHMtPmxvb2tfYWhlYWRfdG9rZW5zW2ldLCBsb29rX2FoZWFkX3NldCkpCi0gICAgICByZXNvbHZlX3NyX2NvbmZsaWN0IChzLCBpLCBlcnJvcnMpOworCSYmICFiaXRzZXRfZGlzam9pbnRfcCAocmVkcy0+bG9va2FoZWFkX3Rva2Vuc1tpXSwgbG9va2FoZWFkX3NldCkpCisgICAgICByZXNvbHZlX3NyX2NvbmZsaWN0IChzLCBpLCBlcnJvcnMsICZuZXJycyk7CiAKLSAgLyogTG9vcCBvdmVyIGFsbCBydWxlcyB3aGljaCByZXF1aXJlIGxvb2stYWhlYWQgaW4gdGhpcyBzdGF0ZS4gIENoZWNrCisgIGlmIChuZXJycykKKyAgICB7CisgICAgICAvKiBTb21lIHRva2VucyBoYXZlIGJlZW4gZXhwbGljaXRseSBtYWRlIGVycm9ycy4gIEFsbG9jYXRlIGEKKyAgICAgICAgIHBlcm1hbmVudCBlcnJzIHN0cnVjdHVyZSBmb3IgdGhpcyBzdGF0ZSwgdG8gcmVjb3JkIHRoZW0uICAqLworICAgICAgc3RhdGVfZXJyc19zZXQgKHMsIG5lcnJzLCBlcnJvcnMpOworICAgIH0KKyAgaWYgKG9ic3RhY2tfb2JqZWN0X3NpemUgKCZzb2x2ZWRfY29uZmxpY3RzX29ic3RhY2spKQorICAgIHsKKyAgICAgIG9ic3RhY2tfMWdyb3cgKCZzb2x2ZWRfY29uZmxpY3RzX29ic3RhY2ssICdcMCcpOworICAgICAgcy0+c29sdmVkX2NvbmZsaWN0cyA9IG9ic3RhY2tfZmluaXNoICgmc29sdmVkX2NvbmZsaWN0c19vYnN0YWNrKTsKKyAgICB9CisgIGlmIChvYnN0YWNrX29iamVjdF9zaXplICgmc29sdmVkX2NvbmZsaWN0c194bWxfb2JzdGFjaykpCisgICAgeworICAgICAgb2JzdGFja18xZ3JvdyAoJnNvbHZlZF9jb25mbGljdHNfeG1sX29ic3RhY2ssICdcMCcpOworICAgICAgcy0+c29sdmVkX2NvbmZsaWN0c194bWwgPSBvYnN0YWNrX2ZpbmlzaCAoJnNvbHZlZF9jb25mbGljdHNfeG1sX29ic3RhY2spOworICAgIH0KKworICAvKiBMb29wIG92ZXIgYWxsIHJ1bGVzIHdoaWNoIHJlcXVpcmUgbG9va2FoZWFkIGluIHRoaXMgc3RhdGUuICBDaGVjawogICAgICBmb3IgY29uZmxpY3RzIG5vdCByZXNvbHZlZCBhYm92ZS4gICovCiAgIGZvciAoaSA9IDA7IGkgPCByZWRzLT5udW07ICsraSkKICAgICB7Ci0gICAgICBpZiAoIWJpdHNldF9kaXNqb2ludF9wIChyZWRzLT5sb29rX2FoZWFkX3Rva2Vuc1tpXSwgbG9va19haGVhZF9zZXQpKQorICAgICAgaWYgKCFiaXRzZXRfZGlzam9pbnRfcCAocmVkcy0+bG9va2FoZWFkX3Rva2Vuc1tpXSwgbG9va2FoZWFkX3NldCkpCiAJY29uZmxpY3RzW3MtPm51bWJlcl0gPSAxOwotCi0gICAgICBiaXRzZXRfb3IgKGxvb2tfYWhlYWRfc2V0LCBsb29rX2FoZWFkX3NldCwgcmVkcy0+bG9va19haGVhZF90b2tlbnNbaV0pOworICAgICAgYml0c2V0X29yIChsb29rYWhlYWRfc2V0LCBsb29rYWhlYWRfc2V0LCByZWRzLT5sb29rYWhlYWRfdG9rZW5zW2ldKTsKICAgICB9CiB9CiAKQEAgLTMwNSwxMyArMzg1LDE0IEBACiBjb25mbGljdHNfc29sdmUgKHZvaWQpCiB7CiAgIHN0YXRlX251bWJlciBpOwotICAvKiBMaXN0IG9mIGxvb2stYWhlYWQgdG9rZW5zIG9uIHdoaWNoIHdlIGV4cGxpY2l0bHkgcmFpc2UgYSBzeW50YXggZXJyb3IuICAqLworICAvKiBMaXN0IG9mIGxvb2thaGVhZCB0b2tlbnMgb24gd2hpY2ggd2UgZXhwbGljaXRseSByYWlzZSBhIHN5bnRheCBlcnJvci4gICovCiAgIHN5bWJvbCAqKmVycm9ycyA9IHhubWFsbG9jIChudG9rZW5zICsgMSwgc2l6ZW9mICplcnJvcnMpOwogCiAgIGNvbmZsaWN0cyA9IHhjYWxsb2MgKG5zdGF0ZXMsIHNpemVvZiAqY29uZmxpY3RzKTsKICAgc2hpZnRfc2V0ID0gYml0c2V0X2NyZWF0ZSAobnRva2VucywgQklUU0VUX0ZJWEVEKTsKLSAgbG9va19haGVhZF9zZXQgPSBiaXRzZXRfY3JlYXRlIChudG9rZW5zLCBCSVRTRVRfRklYRUQpOworICBsb29rYWhlYWRfc2V0ID0gYml0c2V0X2NyZWF0ZSAobnRva2VucywgQklUU0VUX0ZJWEVEKTsKICAgb2JzdGFja19pbml0ICgmc29sdmVkX2NvbmZsaWN0c19vYnN0YWNrKTsKKyAgb2JzdGFja19pbml0ICgmc29sdmVkX2NvbmZsaWN0c194bWxfb2JzdGFjayk7CiAKICAgZm9yIChpID0gMDsgaSA8IG5zdGF0ZXM7IGkrKykKICAgICB7CkBAIC0zMjcsNiArNDA4LDE3IEBACiB9CiAKIAordm9pZAorY29uZmxpY3RzX3VwZGF0ZV9zdGF0ZV9udW1iZXJzIChzdGF0ZV9udW1iZXIgb2xkX3RvX25ld1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV9udW1iZXIgbnN0YXRlc19vbGQpCit7CisgIHN0YXRlX251bWJlciBpOworICBmb3IgKGkgPSAwOyBpIDwgbnN0YXRlc19vbGQ7ICsraSkKKyAgICBpZiAob2xkX3RvX25ld1tpXSAhPSBuc3RhdGVzX29sZCkKKyAgICAgIGNvbmZsaWN0c1tvbGRfdG9fbmV3W2ldXSA9IGNvbmZsaWN0c1tpXTsKK30KKworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgQ291bnQgdGhlIG51bWJlciBvZiBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzLiAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0zNDIsMTggKzQzNCwxOCBAQAogICBpZiAoIXRyYW5zKQogICAgIHJldHVybiAwOwogCi0gIGJpdHNldF96ZXJvIChsb29rX2FoZWFkX3NldCk7CisgIGJpdHNldF96ZXJvIChsb29rYWhlYWRfc2V0KTsKICAgYml0c2V0X3plcm8gKHNoaWZ0X3NldCk7CiAKICAgRk9SX0VBQ0hfU0hJRlQgKHRyYW5zLCBpKQogICAgIGJpdHNldF9zZXQgKHNoaWZ0X3NldCwgVFJBTlNJVElPTl9TWU1CT0wgKHRyYW5zLCBpKSk7CiAKICAgZm9yIChpID0gMDsgaSA8IHJlZHMtPm51bTsgKytpKQotICAgIGJpdHNldF9vciAobG9va19haGVhZF9zZXQsIGxvb2tfYWhlYWRfc2V0LCByZWRzLT5sb29rX2FoZWFkX3Rva2Vuc1tpXSk7CisgICAgYml0c2V0X29yIChsb29rYWhlYWRfc2V0LCBsb29rYWhlYWRfc2V0LCByZWRzLT5sb29rYWhlYWRfdG9rZW5zW2ldKTsKIAotICBiaXRzZXRfYW5kIChsb29rX2FoZWFkX3NldCwgbG9va19haGVhZF9zZXQsIHNoaWZ0X3NldCk7CisgIGJpdHNldF9hbmQgKGxvb2thaGVhZF9zZXQsIGxvb2thaGVhZF9zZXQsIHNoaWZ0X3NldCk7CiAKLSAgc3JjX2NvdW50ID0gYml0c2V0X2NvdW50IChsb29rX2FoZWFkX3NldCk7CisgIHNyY19jb3VudCA9IGJpdHNldF9jb3VudCAobG9va2FoZWFkX3NldCk7CiAKICAgcmV0dXJuIHNyY19jb3VudDsKIH0KQEAgLTM3OCw3ICs0NzAsNyBAQAogICAgICAgaW50IGNvdW50ID0gMDsKICAgICAgIGludCBqOwogICAgICAgZm9yIChqID0gMDsgaiA8IHJlZHMtPm51bTsgKytqKQotCWlmIChiaXRzZXRfdGVzdCAocmVkcy0+bG9va19haGVhZF90b2tlbnNbal0sIGkpKQorCWlmIChiaXRzZXRfdGVzdCAocmVkcy0+bG9va2FoZWFkX3Rva2Vuc1tqXSwgaSkpCiAJICBjb3VudCsrOwogCiAgICAgICBpZiAoY291bnQgPj0gMikKQEAgLTQzMyw3ICs1MjUsNyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgVG90YWwgdGhlIG51bWJlciBvZiBTL1IgYW5kIFIvUiBjb25mbGljdHMuICBVbmxpa2UgdGhlICB8CiB8IGNvZGUgaW4gY29uZmxpY3RzX291dHB1dCwgaG93ZXZlciwgY291bnQgRUFDSCBwYWlyIG9mICAgfAotfCByZWR1Y3Rpb25zIGZvciB0aGUgc2FtZSBzdGF0ZSBhbmQgbG9vay1haGVhZCBhcyBvbmUgICAgIHwKK3wgcmVkdWN0aW9ucyBmb3IgdGhlIHNhbWUgc3RhdGUgYW5kIGxvb2thaGVhZCBhcyBvbmUgICAgICB8CiB8IGNvbmZsaWN0LgkJCQkJCSAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtNTAyLDggKzU5NCwxNyBAQAogICAgIHJldHVybjsKIAogICAvKiBSZXBvcnQgdGhlIHRvdGFsIG51bWJlciBvZiBjb25mbGljdHMgb24gU1RERVJSLiAgKi8KKyAgaWYgKGV4cGVjdGVkX3NyX2NvbmZsaWN0cyA9PSAtMSAmJiBleHBlY3RlZF9ycl9jb25mbGljdHMgPT0gLTEpCisgICAgeworICAgICAgaWYgKCEod2FybmluZ3NfZmxhZyAmIHdhcm5pbmdzX2NvbmZsaWN0c19zcikpCisgICAgICAgIHNyY190b3RhbCA9IDA7CisgICAgICBpZiAoISh3YXJuaW5nc19mbGFnICYgd2FybmluZ3NfY29uZmxpY3RzX3JyKSkKKyAgICAgICAgcnJjX3RvdGFsID0gMDsKKyAgICB9CiAgIGlmIChzcmNfdG90YWwgfCBycmNfdG90YWwpCiAgICAgeworICAgICAgaWYgKGV4cGVjdGVkX3NyX2NvbmZsaWN0cyA9PSAtMSAmJiBleHBlY3RlZF9ycl9jb25mbGljdHMgPT0gLTEpCisgICAgICAgIHNldF93YXJuaW5nX2lzc3VlZCAoKTsKICAgICAgIGlmICghIHlhY2NfZmxhZykKIAlmcHJpbnRmIChzdGRlcnIsICIlczogIiwgY3VycmVudF9maWxlKTsKICAgICAgIGNvbmZsaWN0X3JlcG9ydCAoc3RkZXJyLCBzcmNfdG90YWwsIHJyY190b3RhbCk7CkBAIC01MzAsNiArNjMxLDcgQEAKIHsKICAgZnJlZSAoY29uZmxpY3RzKTsKICAgYml0c2V0X2ZyZWUgKHNoaWZ0X3NldCk7Ci0gIGJpdHNldF9mcmVlIChsb29rX2FoZWFkX3NldCk7CisgIGJpdHNldF9mcmVlIChsb29rYWhlYWRfc2V0KTsKICAgb2JzdGFja19mcmVlICgmc29sdmVkX2NvbmZsaWN0c19vYnN0YWNrLCBOVUxMKTsKKyAgb2JzdGFja19mcmVlICgmc29sdmVkX2NvbmZsaWN0c194bWxfb2JzdGFjaywgTlVMTCk7CiB9CmRpZmYgLS1naXQgYS9zcmMvY29uZmxpY3RzLmggYi9zcmMvY29uZmxpY3RzLmgKaW5kZXggNDM4OWU1ZS4uNWEwMzQ1NCAxMDA2NDQKLS0tIGEvc3JjL2NvbmZsaWN0cy5oCisrKyBiL3NyYy9jb25mbGljdHMuaApAQCAtMSwyOCArMSw0MSBAQAotLyogRmluZCBhbmQgcmVzb2x2ZSBvciByZXBvcnQgbG9vay1haGVhZCBjb25mbGljdHMgZm9yIGJpc29uLAotICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLyogRmluZCBhbmQgcmVzb2x2ZSBvciByZXBvcnQgbG9va2FoZWFkIGNvbmZsaWN0cyBmb3IgYmlzb24sCisKKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAyLCAyMDA0LCAyMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLgogCiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KIAotICAgQmlzb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAotICAgQmlzb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggQmlzb247IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICAgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogI2lmbmRlZiBDT05GTElDVFNfSF8KICMgZGVmaW5lIENPTkZMSUNUU19IXwogIyBpbmNsdWRlICJzdGF0ZS5oIgogCiB2b2lkIGNvbmZsaWN0c19zb2x2ZSAodm9pZCk7CisKKy8qKgorICogVXBkYXRlIHN0YXRlIG51bWJlcnMgcmVjb3JkZWQgaW4gaW50ZXJuYWwgYXJyYXlzIHN1Y2ggdGhhdDoKKyAqICAgLSBcYyBuc3RhdGVzX29sZCBpcyB0aGUgb2xkIG51bWJlciBvZiBzdGF0ZXMuCisgKiAgIC0gV2hlcmUgXGMgaSBpcyB0aGUgb2xkIHN0YXRlIG51bWJlciwgPHR0Pm9sZF90b19uZXdbaV08L3R0PiBpcyBlaXRoZXI6CisgKiAgICAgLSBcYyBuc3RhdGVzX29sZCBpZiBzdGF0ZSBcYyBpIGlzIHJlbW92ZWQgYmVjYXVzZSBpdCBpcyB1bnJlYWNoYWJsZS4KKyAqICAgICAtIFRoZSBuZXcgc3RhdGUgbnVtYmVyLgorICogICAtIFRoZSBoaWdoZXN0IG5ldyBzdGF0ZSBudW1iZXIgaXMgdGhlIG51bWJlciBvZiByZW1haW5pbmcgc3RhdGVzIC0gMS4KKyAqICAgLSBUaGUgbnVtZXJpY2FsIG9yZGVyIG9mIHRoZSByZW1haW5pbmcgc3RhdGVzIGhhcyBub3QgY2hhbmdlZC4KKyAqLwordm9pZCBjb25mbGljdHNfdXBkYXRlX3N0YXRlX251bWJlcnMgKHN0YXRlX251bWJlciBvbGRfdG9fbmV3W10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfbnVtYmVyIG5zdGF0ZXNfb2xkKTsKKwogdm9pZCBjb25mbGljdHNfcHJpbnQgKHZvaWQpOwogaW50IGNvbmZsaWN0c190b3RhbF9jb3VudCAodm9pZCk7CiB2b2lkIGNvbmZsaWN0c19vdXRwdXQgKEZJTEUgKm91dCk7CmRpZmYgLS1naXQgYS9zcmMvZGVyaXZlcy5jIGIvc3JjL2Rlcml2ZXMuYwppbmRleCAyZTRmZjMxLi5jZTVhNmE1IDEwMDY0NAotLS0gYS9zcmMvZGVyaXZlcy5jCisrKyBiL3NyYy9kZXJpdmVzLmMKQEAgLTEsMjQgKzEsMjIgQEAKIC8qIE1hdGNoIHJ1bGVzIHdpdGggbm9udGVybWluYWxzIGZvciBiaXNvbiwKIAotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1IEZyZWUKLSAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMjAwMC0yMDAzLCAyMDA1LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLgogCiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KIAotICAgQmlzb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCi0gICBCaXNvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggQmlzb247IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogI2luY2x1ZGUgPGNvbmZpZy5oPgogI2luY2x1ZGUgInN5c3RlbS5oIgpkaWZmIC0tZ2l0IGEvc3JjL2Rlcml2ZXMuaCBiL3NyYy9kZXJpdmVzLmgKaW5kZXggOWE0NWRjOS4uZjI1ZTUwMiAxMDA2NDQKLS0tIGEvc3JjL2Rlcml2ZXMuaAorKysgYi9zcmMvZGVyaXZlcy5oCkBAIC0xLDI0ICsxLDIyIEBACiAvKiBNYXRjaCBydWxlcyB3aXRoIG5vbnRlcm1pbmFscyBmb3IgYmlzb24sCiAKLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMjAwMCwgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlCisgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDIwMDAtMjAwMiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUKICAgIEZvdW5kYXRpb24sIEluYy4KIAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCiAKLSAgIEJpc29uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAotICAgQmlzb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIEJpc29uOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpZm5kZWYgREVSSVZFU19IXwogIyBkZWZpbmUgREVSSVZFU19IXwpkaWZmIC0tZ2l0IGEvc3JjL2ZpbGVzLmMgYi9zcmMvZmlsZXMuYwppbmRleCBmM2JiMGY5Li5mNjk4YzdlIDEwMDY0NAotLS0gYS9zcmMvZmlsZXMuYworKysgYi9zcmMvZmlsZXMuYwpAQCAtMSw0MiArMSwzOCBAQAogLyogT3BlbiBhbmQgY2xvc2UgZmlsZXMgZm9yIEJpc29uLgogCi0gICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODYsIDE5ODksIDE5OTIsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUKLSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg2LCAxOTg5LCAxOTkyLCAyMDAwLTIwMTIgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLgogCiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KIAotICAgQmlzb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAotICAgQmlzb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggQmlzb247IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICAgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogI2luY2x1ZGUgPGNvbmZpZy5oPgogI2luY2x1ZGUgInN5c3RlbS5oIgogCiAjaW5jbHVkZSA8ZXJyb3IuaD4KKyNpbmNsdWRlIDxkaXJuYW1lLmg+CiAjaW5jbHVkZSA8Z2V0LWVycm5vLmg+CiAjaW5jbHVkZSA8cXVvdGUuaD4KKyNpbmNsdWRlIDxxdW90ZWFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLXNhZmVyLmg+CiAjaW5jbHVkZSA8eHN0cm5kdXAuaD4KIAogI2luY2x1ZGUgImNvbXBsYWluLmgiCi0jaW5jbHVkZSAiZGlybmFtZS5oIgogI2luY2x1ZGUgImZpbGVzLmgiCiAjaW5jbHVkZSAiZ2V0YXJncy5oIgogI2luY2x1ZGUgImdyYW0uaCIKLSNpbmNsdWRlICJzdGRpby1zYWZlci5oIgotCi1zdHJ1Y3Qgb2JzdGFjayBwcmVfcHJvbG9ndWVfb2JzdGFjazsKLXN0cnVjdCBvYnN0YWNrIHBvc3RfcHJvbG9ndWVfb2JzdGFjazsKIAogLyogSW5pdGlhbGl6aW5nIHNvbWUgdmFsdWVzIGJlbG93IChzdWNoIFNQRUNfTkFNRV9QUkVGSVggdG8gYHl5JykgaXMKICAgIHRlbXB0aW5nLCBidXQgZG9uJ3QgZG8gdGhhdDogZm9yIHRoZSB0aW1lIGJlaW5nIG91ciBoYW5kbGluZyBvZiB0aGUKQEAgLTQ4LDEwICs0NCwxNSBAQAogY2hhciBjb25zdCAqc3BlY19vdXRmaWxlID0gTlVMTDsgICAgICAgLyogZm9yIC1vLiAqLwogY2hhciBjb25zdCAqc3BlY19maWxlX3ByZWZpeCA9IE5VTEw7ICAgLyogZm9yIC1iLiAqLwogY2hhciBjb25zdCAqc3BlY19uYW1lX3ByZWZpeCA9IE5VTEw7ICAgLyogZm9yIC1wLiAqLwotY2hhciBjb25zdCAqc3BlY192ZXJib3NlX2ZpbGUgPSBOVUxMOyAgLyogZm9yIC0tdmVyYm9zZS4gKi8KLWNoYXIgY29uc3QgKnNwZWNfZ3JhcGhfZmlsZSA9IE5VTEw7ICAgIC8qIGZvciAtZy4gKi8KLWNoYXIgY29uc3QgKnNwZWNfZGVmaW5lc19maWxlID0gTlVMTDsgIC8qIGZvciAtLWRlZmluZXMuICovCi1jaGFyIGNvbnN0ICpwYXJzZXJfZmlsZV9uYW1lOworY2hhciAqc3BlY192ZXJib3NlX2ZpbGUgPSBOVUxMOyAgLyogZm9yIC0tdmVyYm9zZS4gKi8KK2NoYXIgKnNwZWNfZ3JhcGhfZmlsZSA9IE5VTEw7ICAgIC8qIGZvciAtZy4gKi8KK2NoYXIgKnNwZWNfeG1sX2ZpbGUgPSBOVUxMOyAgICAgIC8qIGZvciAteC4gKi8KK2NoYXIgKnNwZWNfZGVmaW5lc19maWxlID0gTlVMTDsgIC8qIGZvciAtLWRlZmluZXMuICovCitjaGFyICpwYXJzZXJfZmlsZV9uYW1lOworCisvKiBBbGwgY29tcHV0ZWQgb3V0cHV0IGZpbGUgbmFtZXMuICAqLworc3RhdGljIGNoYXIgKipmaWxlX25hbWVzID0gTlVMTDsKK3N0YXRpYyBpbnQgZmlsZV9uYW1lc19jb3VudCA9IDA7CiAKIHVuaXFzdHIgZ3JhbW1hcl9maWxlID0gTlVMTDsKIHVuaXFzdHIgY3VycmVudF9maWxlID0gTlVMTDsKQEAgLTcyLDE0ICs3MywxNCBAQAogICAgZW1wdHkgc3RyaW5nIChtZWFuaW5nIHRoZSBjdXJyZW50IGRpcmVjdG9yeSk7IG90aGVyd2lzZSBpdCBpcwogICAgYGRpci8nLiAgKi8KIAotc3RhdGljIGNoYXIgY29uc3QgKmFsbF9idXRfZXh0Owotc3RhdGljIGNoYXIgY29uc3QgKmFsbF9idXRfdGFiX2V4dDsKLWNoYXIgY29uc3QgKmRpcl9wcmVmaXg7CitjaGFyICphbGxfYnV0X2V4dDsKK3N0YXRpYyBjaGFyICphbGxfYnV0X3RhYl9leHQ7CitjaGFyICpkaXJfcHJlZml4OwogCiAvKiBDIHNvdXJjZSBmaWxlIGV4dGVuc2lvbiAodGhlIHBhcnNlciBzb3VyY2UpLiAgKi8KLXN0YXRpYyBjaGFyIGNvbnN0ICpzcmNfZXh0ZW5zaW9uID0gTlVMTDsKK3N0YXRpYyBjaGFyICpzcmNfZXh0ZW5zaW9uID0gTlVMTDsKIC8qIEhlYWRlciBmaWxlIGV4dGVuc2lvbiAoaWYgb3B0aW9uIGBgLWQnJyBpcyBzcGVjaWZpZWQpLiAgKi8KLXN0YXRpYyBjaGFyIGNvbnN0ICpoZWFkZXJfZXh0ZW5zaW9uID0gTlVMTDsKK3N0YXRpYyBjaGFyICpoZWFkZXJfZXh0ZW5zaW9uID0gTlVMTDsKIAwKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IFJldHVybiBhIG5ld2x5IGFsbG9jYXRlZCBzdHJpbmcgY29tcG9zZWQgb2YgdGhlIGNvbmNhdGVuYXRpb24gb2YgfApAQCAtMTA5LDcgKzExMCw4IEBACiAKICAgcHRyID0gZm9wZW5fc2FmZXIgKG5hbWUsIG1vZGUpOwogICBpZiAoIXB0cikKLSAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCBnZXRfZXJybm8gKCksIF8oImNhbm5vdCBvcGVuIGZpbGUgYCVzJyIpLCBuYW1lKTsKKyAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCBnZXRfZXJybm8gKCksCisgICAgICAgICAgIF8oIiVzOiBjYW5ub3Qgb3BlbiIpLCBxdW90ZWFyZ19jb2xvbiAobmFtZSkpOwogCiAgIHJldHVybiBwdHI7CiB9CkBAIC0xMjUsNyArMTI3LDcgQEAKICAgICByZXR1cm47CiAKICAgaWYgKGZlcnJvciAocHRyKSkKLSAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCBfKCJJL08gZXJyb3IiKSk7CisgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgXygiaW5wdXQvb3V0cHV0IGVycm9yIikpOwogCiAgIGlmIChmY2xvc2UgKHB0cikgIT0gMCkKICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCBnZXRfZXJybm8gKCksIF8oImNhbm5vdCBjbG9zZSBmaWxlIikpOwpAQCAtMTM2LDMxICsxMzgsMjQgQEAKIHwgQ29tcHV0ZSBBTExfQlVUX0VYVCwgQUxMX0JVVF9UQUJfRVhUIGFuZCBvdXRwdXQgZmlsZXMgZXh0ZW5zaW9ucy4gfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qIFJlcGxhY2UgYWxsIGNoYXJhY3RlcnMgRlJPTSBieSBUTyBpbiB0aGUgc3RyaW5nIElOLgotICAgYW5kIHJldHVybnMgYSBuZXcgYWxsb2NhdGVkIHN0cmluZy4gICovCi1zdGF0aWMgY2hhciAqCi10ciAoY29uc3QgY2hhciAqaW4sIGNoYXIgZnJvbSwgY2hhciB0bykKLXsKLSAgY2hhciAqdGVtcDsKLSAgY2hhciAqb3V0ID0geG1hbGxvYyAoc3RybGVuIChpbikgKyAxKTsKLQotICBmb3IgKHRlbXAgPSBvdXQ7ICppbjsgaW4rKywgb3V0KyspCi0gICAgaWYgKCppbiA9PSBmcm9tKQotICAgICAgKm91dCA9IHRvOwotICAgIGVsc2UKLSAgICAgICpvdXQgPSAqaW47Ci0gICpvdXQgPSAwOwotICByZXR1cm4gKHRlbXApOwotfQotCiAvKiBDb21wdXRlIGV4dGVuc2lvbnMgZnJvbSB0aGUgZ3JhbW1hciBmaWxlIGV4dGVuc2lvbi4gICovCiBzdGF0aWMgdm9pZAogY29tcHV0ZV9leHRzX2Zyb21fZ2YgKGNvbnN0IGNoYXIgKmV4dCkKIHsKLSAgc3JjX2V4dGVuc2lvbiA9IHRyIChleHQsICd5JywgJ2MnKTsKLSAgc3JjX2V4dGVuc2lvbiA9IHRyIChzcmNfZXh0ZW5zaW9uLCAnWScsICdDJyk7Ci0gIGhlYWRlcl9leHRlbnNpb24gPSB0ciAoZXh0LCAneScsICdoJyk7Ci0gIGhlYWRlcl9leHRlbnNpb24gPSB0ciAoaGVhZGVyX2V4dGVuc2lvbiwgJ1knLCAnSCcpOworICBpZiAoc3RyY21wIChleHQsICIueSIpID09IDApCisgICAgeworICAgICAgc3JjX2V4dGVuc2lvbiA9IHhzdHJkdXAgKGxhbmd1YWdlLT5zcmNfZXh0ZW5zaW9uKTsKKyAgICAgIGhlYWRlcl9leHRlbnNpb24gPSB4c3RyZHVwIChsYW5ndWFnZS0+aGVhZGVyX2V4dGVuc2lvbik7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgc3JjX2V4dGVuc2lvbiA9IHhzdHJkdXAgKGV4dCk7CisgICAgICBoZWFkZXJfZXh0ZW5zaW9uID0geHN0cmR1cCAoZXh0KTsKKyAgICAgIHRyIChzcmNfZXh0ZW5zaW9uLCAneScsICdjJyk7CisgICAgICB0ciAoc3JjX2V4dGVuc2lvbiwgJ1knLCAnQycpOworICAgICAgdHIgKGhlYWRlcl9leHRlbnNpb24sICd5JywgJ2gnKTsKKyAgICAgIHRyIChoZWFkZXJfZXh0ZW5zaW9uLCAnWScsICdIJyk7CisgICAgfQogfQogCiAvKiBDb21wdXRlIGV4dGVuc2lvbnMgZnJvbSB0aGUgZ2l2ZW4gYyBzb3VyY2UgZmlsZSBleHRlbnNpb24uICAqLwpAQCAtMTcxLDggKzE2Niw5IEBACiAgICAgIHNvIHRoZSBleHRlbmlvbnMgbXVzdCBiZSBjb21wdXRlZCB1bmNvbmRpdGlvbmFsbHkgZnJvbSB0aGUgZmlsZSBuYW1lCiAgICAgIGdpdmVuIGJ5IHRoaXMgb3B0aW9uLiAgKi8KICAgc3JjX2V4dGVuc2lvbiA9IHhzdHJkdXAgKGV4dCk7Ci0gIGhlYWRlcl9leHRlbnNpb24gPSB0ciAoZXh0LCAnYycsICdoJyk7Ci0gIGhlYWRlcl9leHRlbnNpb24gPSB0ciAoaGVhZGVyX2V4dGVuc2lvbiwgJ0MnLCAnSCcpOworICBoZWFkZXJfZXh0ZW5zaW9uID0geHN0cmR1cCAoZXh0KTsKKyAgdHIgKGhlYWRlcl9leHRlbnNpb24sICdjJywgJ2gnKTsKKyAgdHIgKGhlYWRlcl9leHRlbnNpb24sICdDJywgJ0gnKTsKIH0KIAogCkBAIC0yMDgsMTAgKzIwNCwxMCBAQAogZmlsZV9uYW1lX3NwbGl0IChjb25zdCBjaGFyICpmaWxlX25hbWUsCiAJCSBjb25zdCBjaGFyICoqYmFzZSwgY29uc3QgY2hhciAqKnRhYiwgY29uc3QgY2hhciAqKmV4dCkKIHsKLSAgKmJhc2UgPSBiYXNlX25hbWUgKGZpbGVfbmFtZSk7CisgICpiYXNlID0gbGFzdF9jb21wb25lbnQgKGZpbGVfbmFtZSk7CiAKICAgLyogTG9vayBmb3IgdGhlIGV4dGVuc2lvbiwgaS5lLiwgbG9vayBmb3IgdGhlIGxhc3QgZG90LiAqLwotICAqZXh0ID0gc3RycmNociAoKmJhc2UsICcuJyk7CisgICpleHQgPSBtYnNyY2hyICgqYmFzZSwgJy4nKTsKICAgKnRhYiA9IE5VTEw7CiAKICAgLyogSWYgdGhlcmUgaXMgYW4gZXh0ZW5zaW9uLCBjaGVjayBpZiB0aGVyZSBpcyBhIGAudGFiJyBwYXJ0IHJpZ2h0CkBAIC0yNjQsMjUgKzI2MCwzMCBAQAogICAgICAgaWYgKHNwZWNfZmlsZV9wcmVmaXgpCiAJewogCSAgLyogSWYgLS1maWxlLXByZWZpeD1mb28gd2FzIHNwZWNpZmllZCwgQUxMX0JVVF9UQUJfRVhUID0gYGZvbycuICAqLwotCSAgZGlyX3ByZWZpeCA9IHhzdHJuZHVwIChncmFtbWFyX2ZpbGUsIGJhc2UgLSBncmFtbWFyX2ZpbGUpOworCSAgZGlyX3ByZWZpeCA9CisgICAgICAgICAgICB4c3RybmR1cCAoc3BlY19maWxlX3ByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICBsYXN0X2NvbXBvbmVudCAoc3BlY19maWxlX3ByZWZpeCkgLSBzcGVjX2ZpbGVfcHJlZml4KTsKIAkgIGFsbF9idXRfdGFiX2V4dCA9IHhzdHJkdXAgKHNwZWNfZmlsZV9wcmVmaXgpOwogCX0KICAgICAgIGVsc2UgaWYgKHlhY2NfZmxhZykKIAl7CiAJICAvKiBJZiAtLXlhY2MsIHRoZW4gdGhlIG91dHB1dCBpcyBgeS50YWIuYycuICAqLwotCSAgZGlyX3ByZWZpeCA9ICIiOwotCSAgYWxsX2J1dF90YWJfZXh0ID0gInkiOworCSAgZGlyX3ByZWZpeCA9IHhzdHJkdXAgKCIiKTsKKwkgIGFsbF9idXRfdGFiX2V4dCA9IHhzdHJkdXAgKCJ5Iik7CiAJfQogICAgICAgZWxzZQogCXsKIAkgIC8qIE90aGVyd2lzZSwgQUxMX0JVVF9UQUJfRVhUIGlzIGNvbXB1dGVkIGZyb20gdGhlIGlucHV0CiAJICAgICBncmFtbWFyOiBgZm9vL2Jhci55eScgPT4gYGJhcicuICAqLwotCSAgZGlyX3ByZWZpeCA9ICIiOworCSAgZGlyX3ByZWZpeCA9IHhzdHJkdXAgKCIiKTsKIAkgIGFsbF9idXRfdGFiX2V4dCA9CiAJICAgIHhzdHJuZHVwIChiYXNlLCAoc3RybGVuIChiYXNlKSAtIChleHQgPyBzdHJsZW4gKGV4dCkgOiAwKSkpOwogCX0KIAotICAgICAgYWxsX2J1dF9leHQgPSBjb25jYXQyIChhbGxfYnV0X3RhYl9leHQsIFRBQl9FWFQpOworICAgICAgaWYgKGxhbmd1YWdlLT5hZGRfdGFiKQorICAgICAgICBhbGxfYnV0X2V4dCA9IGNvbmNhdDIgKGFsbF9idXRfdGFiX2V4dCwgVEFCX0VYVCk7CisgICAgICBlbHNlCisgICAgICAgIGFsbF9idXRfZXh0ID0geHN0cmR1cCAoYWxsX2J1dF90YWJfZXh0KTsKIAogICAgICAgLyogQ29tcHV0ZSB0aGUgZXh0ZW5zaW9ucyBmcm9tIHRoZSBncmFtbWFyIGZpbGUgbmFtZS4gICovCiAgICAgICBpZiAoZXh0ICYmICF5YWNjX2ZsYWcpCkBAIC0yOTcsNDQgKzI5OCw5OSBAQAogdm9pZAogY29tcHV0ZV9vdXRwdXRfZmlsZV9uYW1lcyAodm9pZCkKIHsKLSAgY2hhciBjb25zdCAqbmFtZVs0XTsKLSAgaW50IGk7Ci0gIGludCBqOwotICBpbnQgbmFtZXMgPSAwOwotCiAgIGNvbXB1dGVfZmlsZV9uYW1lX3BhcnRzICgpOwogCiAgIC8qIElmIG5vdCB5ZXQgZG9uZS4gKi8KICAgaWYgKCFzcmNfZXh0ZW5zaW9uKQotICAgIHNyY19leHRlbnNpb24gPSAiLmMiOworICAgIHNyY19leHRlbnNpb24gPSB4c3RyZHVwICgiLmMiKTsKICAgaWYgKCFoZWFkZXJfZXh0ZW5zaW9uKQotICAgIGhlYWRlcl9leHRlbnNpb24gPSAiLmgiOworICAgIGhlYWRlcl9leHRlbnNpb24gPSB4c3RyZHVwICgiLmgiKTsKIAotICBuYW1lW25hbWVzKytdID0gcGFyc2VyX2ZpbGVfbmFtZSA9Ci0gICAgc3BlY19vdXRmaWxlID8gc3BlY19vdXRmaWxlIDogY29uY2F0MiAoYWxsX2J1dF9leHQsIHNyY19leHRlbnNpb24pOworICBwYXJzZXJfZmlsZV9uYW1lID0KKyAgICAoc3BlY19vdXRmaWxlCisgICAgID8geHN0cmR1cCAoc3BlY19vdXRmaWxlKQorICAgICA6IGNvbmNhdDIgKGFsbF9idXRfZXh0LCBzcmNfZXh0ZW5zaW9uKSk7CiAKICAgaWYgKGRlZmluZXNfZmxhZykKICAgICB7CiAgICAgICBpZiAoISBzcGVjX2RlZmluZXNfZmlsZSkKIAlzcGVjX2RlZmluZXNfZmlsZSA9IGNvbmNhdDIgKGFsbF9idXRfZXh0LCBoZWFkZXJfZXh0ZW5zaW9uKTsKLSAgICAgIG5hbWVbbmFtZXMrK10gPSBzcGVjX2RlZmluZXNfZmlsZTsKICAgICB9CiAKICAgaWYgKGdyYXBoX2ZsYWcpCiAgICAgewogICAgICAgaWYgKCEgc3BlY19ncmFwaF9maWxlKQotCXNwZWNfZ3JhcGhfZmlsZSA9IGNvbmNhdDIgKGFsbF9idXRfdGFiX2V4dCwgIi52Y2ciKTsKLSAgICAgIG5hbWVbbmFtZXMrK10gPSBzcGVjX2dyYXBoX2ZpbGU7CisJc3BlY19ncmFwaF9maWxlID0gY29uY2F0MiAoYWxsX2J1dF90YWJfZXh0LCAiLmRvdCIpOworICAgICAgb3V0cHV0X2ZpbGVfbmFtZV9jaGVjayAoJnNwZWNfZ3JhcGhfZmlsZSk7CisgICAgfQorCisgIGlmICh4bWxfZmxhZykKKyAgICB7CisgICAgICBpZiAoISBzcGVjX3htbF9maWxlKQorCXNwZWNfeG1sX2ZpbGUgPSBjb25jYXQyIChhbGxfYnV0X3RhYl9leHQsICIueG1sIik7CisgICAgICBvdXRwdXRfZmlsZV9uYW1lX2NoZWNrICgmc3BlY194bWxfZmlsZSk7CiAgICAgfQogCiAgIGlmIChyZXBvcnRfZmxhZykKICAgICB7Ci0gICAgICBzcGVjX3ZlcmJvc2VfZmlsZSA9IGNvbmNhdDIgKGFsbF9idXRfdGFiX2V4dCwgT1VUUFVUX0VYVCk7Ci0gICAgICBuYW1lW25hbWVzKytdID0gc3BlY192ZXJib3NlX2ZpbGU7CisgICAgICBpZiAoIXNwZWNfdmVyYm9zZV9maWxlKQorICAgICAgICBzcGVjX3ZlcmJvc2VfZmlsZSA9IGNvbmNhdDIgKGFsbF9idXRfdGFiX2V4dCwgT1VUUFVUX0VYVCk7CisgICAgICBvdXRwdXRfZmlsZV9uYW1lX2NoZWNrICgmc3BlY192ZXJib3NlX2ZpbGUpOwogICAgIH0KIAotICBmb3IgKGogPSAwOyBqIDwgbmFtZXM7IGorKykKLSAgICBmb3IgKGkgPSAwOyBpIDwgajsgaSsrKQotICAgICAgaWYgKHN0cmNtcCAobmFtZVtpXSwgbmFtZVtqXSkgPT0gMCkKLQl3YXJuIChfKCJjb25mbGljdGluZyBvdXRwdXRzIHRvIGZpbGUgJXMiKSwgcXVvdGUgKG5hbWVbaV0pKTsKKyAgZnJlZSAoYWxsX2J1dF90YWJfZXh0KTsKKyAgZnJlZSAoc3JjX2V4dGVuc2lvbik7CisgIGZyZWUgKGhlYWRlcl9leHRlbnNpb24pOworfQorCit2b2lkCitvdXRwdXRfZmlsZV9uYW1lX2NoZWNrIChjaGFyICoqZmlsZV9uYW1lKQoreworICBib29sIGNvbmZsaWN0ID0gZmFsc2U7CisgIGlmICgwID09IHN0cmNtcCAoKmZpbGVfbmFtZSwgZ3JhbW1hcl9maWxlKSkKKyAgICB7CisgICAgICBjb21wbGFpbiAoXygicmVmdXNpbmcgdG8gb3ZlcndyaXRlIHRoZSBpbnB1dCBmaWxlICVzIiksCisgICAgICAgICAgICAgICAgcXVvdGUgKCpmaWxlX25hbWUpKTsKKyAgICAgIGNvbmZsaWN0ID0gdHJ1ZTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpbnQgaTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWxlX25hbWVzX2NvdW50OyBpKyspCisgICAgICAgIGlmICgwID09IHN0cmNtcCAoZmlsZV9uYW1lc1tpXSwgKmZpbGVfbmFtZSkpCisgICAgICAgICAgeworICAgICAgICAgICAgd2FybiAoXygiY29uZmxpY3Rpbmcgb3V0cHV0cyB0byBmaWxlICVzIiksCisgICAgICAgICAgICAgICAgICBxdW90ZSAoKmZpbGVfbmFtZSkpOworICAgICAgICAgICAgY29uZmxpY3QgPSB0cnVlOworICAgICAgICAgIH0KKyAgICB9CisgIGlmIChjb25mbGljdCkKKyAgICB7CisgICAgICBmcmVlICgqZmlsZV9uYW1lKTsKKyAgICAgICpmaWxlX25hbWUgPSBzdHJkdXAgKCIvZGV2L251bGwiKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBmaWxlX25hbWVzID0geG5yZWFsbG9jIChmaWxlX25hbWVzLCArK2ZpbGVfbmFtZXNfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKmZpbGVfbmFtZXMpOworICAgICAgZmlsZV9uYW1lc1tmaWxlX25hbWVzX2NvdW50LTFdID0geHN0cmR1cCAoKmZpbGVfbmFtZSk7CisgICAgfQorfQorCit2b2lkCitvdXRwdXRfZmlsZV9uYW1lc19mcmVlICh2b2lkKQoreworICBmcmVlIChhbGxfYnV0X2V4dCk7CisgIGZyZWUgKHNwZWNfdmVyYm9zZV9maWxlKTsKKyAgZnJlZSAoc3BlY19ncmFwaF9maWxlKTsKKyAgZnJlZSAoc3BlY194bWxfZmlsZSk7CisgIGZyZWUgKHNwZWNfZGVmaW5lc19maWxlKTsKKyAgZnJlZSAocGFyc2VyX2ZpbGVfbmFtZSk7CisgIGZyZWUgKGRpcl9wcmVmaXgpOworICB7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IGZpbGVfbmFtZXNfY291bnQ7IGkrKykKKyAgICAgIGZyZWUgKGZpbGVfbmFtZXNbaV0pOworICB9CisgIGZyZWUgKGZpbGVfbmFtZXMpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2ZpbGVzLmggYi9zcmMvZmlsZXMuaAppbmRleCBiYTlmZWMyLi44ZjBiZWMwIDEwMDY0NAotLS0gYS9zcmMvZmlsZXMuaAorKysgYi9zcmMvZmlsZXMuaApAQCAtMSwyMiArMSwyMiBAQAogLyogRmlsZSBuYW1lcyBhbmQgdmFyaWFibGVzIGZvciBiaXNvbiwKLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMjAwMCwgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAyMDAwLTIwMDIsIDIwMDYtMjAwNywgMjAwOS0yMDEyIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCiAKLSAgIEJpc29uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAotICAgQmlzb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIEJpc29uOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpZm5kZWYgRklMRVNfSF8KICMgZGVmaW5lIEZJTEVTX0hfCkBAIC0yNyw3ICsyNyw3IEBACiBleHRlcm4gY2hhciBjb25zdCAqc3BlY19vdXRmaWxlOwogCiAvKiBGaWxlIG5hbWUgZm9yIHRoZSBwYXJzZXIgKGkuZS4sIHRoZSBvbmUgYWJvdmUsIG9yIGl0cyBkZWZhdWx0LikgKi8KLWV4dGVybiBjaGFyIGNvbnN0ICpwYXJzZXJfZmlsZV9uYW1lOworZXh0ZXJuIGNoYXIgKnBhcnNlcl9maWxlX25hbWU7CiAKIC8qIFN5bWJvbCBwcmVmaXggc3BlY2lmaWVkIHdpdGggLXAsIG9yIDAgaWYgbm8gLXAuICAqLwogZXh0ZXJuIGNvbnN0IGNoYXIgKnNwZWNfbmFtZV9wcmVmaXg7CkBAIC0zNiwyMSArMzYsMTkgQEAKIGV4dGVybiBjaGFyIGNvbnN0ICpzcGVjX2ZpbGVfcHJlZml4OwogCiAvKiAtLXZlcmJvc2UuICovCi1leHRlcm4gY2hhciBjb25zdCAqc3BlY192ZXJib3NlX2ZpbGU7CitleHRlcm4gY2hhciAqc3BlY192ZXJib3NlX2ZpbGU7CiAKLS8qIEZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHRoZSBvdXRwdXQgVkNHIGdyYXBoLiAgKi8KLWV4dGVybiBjaGFyIGNvbnN0ICpzcGVjX2dyYXBoX2ZpbGU7CisvKiBGaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB0aGUgb3V0cHV0IGdyYXBoLiAgKi8KK2V4dGVybiBjaGFyICpzcGVjX2dyYXBoX2ZpbGU7CisKKy8qIEZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHRoZSB4bWwgb3V0cHV0LiAgKi8KK2V4dGVybiBjaGFyICpzcGVjX3htbF9maWxlOwogCiAvKiBGaWxlIG5hbWUgc3BlY2lmaWVkIHdpdGggLS1kZWZpbmVzLiAgKi8KLWV4dGVybiBjaGFyIGNvbnN0ICpzcGVjX2RlZmluZXNfZmlsZTsKK2V4dGVybiBjaGFyICpzcGVjX2RlZmluZXNfZmlsZTsKIAogLyogRGlyZWN0b3J5IHByZWZpeCBvZiBvdXRwdXQgZmlsZSBuYW1lcy4gICovCi1leHRlcm4gY2hhciBjb25zdCAqZGlyX3ByZWZpeDsKLQotCi0vKiBJZiBzZW1hbnRpYyBwYXJzZXIsIG91dHB1dCBhIC5oIGZpbGUgdGhhdCBkZWZpbmVzIFlZU1RZUEUuLi4gKi8KLWV4dGVybiBzdHJ1Y3Qgb2JzdGFjayBwcmVfcHJvbG9ndWVfb2JzdGFjazsKLWV4dGVybiBzdHJ1Y3Qgb2JzdGFjayBwb3N0X3Byb2xvZ3VlX29ic3RhY2s7CitleHRlcm4gY2hhciAqZGlyX3ByZWZpeDsKIAogLyogVGhlIGZpbGUgbmFtZSBhcyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLgogICAgTm90IG5hbWVkICJpbnB1dF9maWxlIiBiZWNhdXNlIEZsZXggdXNlcyB0aGlzIG5hbWUgZm9yIGFuIGFyZ3VtZW50LApAQCAtNjAsNyArNTgsMTIgQEAKIC8qIFRoZSBjdXJyZW50IGZpbGUgbmFtZS4gIE1pZ2h0IGNoYW5nZSB3aXRoICVpbmNsdWRlLCBvciB3aXRoICNsaW5lLiAgKi8KIGV4dGVybiB1bmlxc3RyIGN1cnJlbnRfZmlsZTsKIAorLyogVGhlIGNvbXB1dGVkIGJhc2UgZm9yIG91dHB1dCBmaWxlIG5hbWVzLiAgKi8KK2V4dGVybiBjaGFyICphbGxfYnV0X2V4dDsKKwogdm9pZCBjb21wdXRlX291dHB1dF9maWxlX25hbWVzICh2b2lkKTsKK3ZvaWQgb3V0cHV0X2ZpbGVfbmFtZXNfZnJlZSAodm9pZCk7Cit2b2lkIG91dHB1dF9maWxlX25hbWVfY2hlY2sgKGNoYXIgKipmaWxlX25hbWUpOwogCiBGSUxFICp4Zm9wZW4gKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpOwogdm9pZCB4ZmNsb3NlIChGSUxFICpwdHIpOwpkaWZmIC0tZ2l0IGEvc3JjL2ZsZXgtc2Nhbm5lci5oIGIvc3JjL2ZsZXgtc2Nhbm5lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NTRjMjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZmxleC1zY2FubmVyLmgKQEAgLTAsMCArMSw5MSBAQAorLyogQ29tbW9uIHBhcnRzIGJldHdlZW4gc2Nhbi1jb2RlLmwsIHNjYW4tZ3JhbS5sLCBhbmQgc2Nhbi1za2VsLmwuCisKKyAgIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBGTEVYX1BSRUZJWAorIyBlcnJvciAiRkxFWF9QUkVGSVggbm90IGRlZmluZWQiCisjZW5kaWYKKworLyogRmxleCBmdWxsIHZlcnNpb24gYXMgYSBudW1iZXIuICAqLworI2RlZmluZSBGTEVYX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgIFwKKyAgKChZWV9GTEVYX01BSk9SX1ZFUlNJT04pICogMTAwMDAwMCAgICBcCisgICArIChZWV9GTEVYX01JTk9SX1ZFUlNJT04pICogMTAwMCAgICAgXAorICAgKyAoWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OKSkKKworLyogUGFjaWZ5ICJnY2MgLVdtaXNzaW5nLXByb3RvdHlwZXMiIHdoZW4gZmxleCAyLjUuMzEgaXMgdXNlZC4gICovCisjIGlmIEZMRVhfVkVSU0lPTiA8PSAyMDA1MDMxCitpbnQgICBGTEVYX1BSRUZJWCAoZ2V0X2xpbmVubykgKHZvaWQpOworRklMRSAqRkxFWF9QUkVGSVggKGdldF9pbikgKHZvaWQpOworRklMRSAqRkxFWF9QUkVGSVggKGdldF9vdXQpICh2b2lkKTsKK2ludCAgIEZMRVhfUFJFRklYIChnZXRfbGVuZykgKHZvaWQpOworY2hhciAqRkxFWF9QUkVGSVggKGdldF90ZXh0KSAodm9pZCk7Cit2b2lkICBGTEVYX1BSRUZJWCAoc2V0X2xpbmVubykgKGludCk7Cit2b2lkICBGTEVYX1BSRUZJWCAoc2V0X2luKSAoRklMRSAqKTsKK3ZvaWQgIEZMRVhfUFJFRklYIChzZXRfb3V0KSAoRklMRSAqKTsKK2ludCAgIEZMRVhfUFJFRklYIChnZXRfZGVidWcpICh2b2lkKTsKK3ZvaWQgIEZMRVhfUFJFRklYIChzZXRfZGVidWcpIChpbnQpOworaW50ICAgRkxFWF9QUkVGSVggKGxleF9kZXN0cm95KSAodm9pZCk7CisjZW5kaWYKKworI2RlZmluZSBsYXN0X3N0cmluZyAgICBGTEVYX1BSRUZJWCAobGFzdF9zdHJpbmcpCisKKy8qIEl0IHNlZW1zIHRvIGJlIGEgbmljZSAiZmVhdHVyZSIgb2YgRmxleCB0aGF0IG9uZSBjYW5ub3QgdXNlIHl5dGV4dCwKKyAgIHl5bGVuZyBldGMuIHdoZW4gYSBwcmVmaXggaXMgZ2l2ZW4sIHNpbmNlIHRoZXJlIGlzIG5vIGxvbmdlciBhCisgICAjZGVmaW5lLCBidXQgcmF0aGVyIHRoZSB0b2tlbiBpcyBhY3R1YWxseSBjaGFuZ2VkIGluIHRoZSBvdXRwdXQuCisgICBIb3dldmVyLCB0aGlzIGlzIG5vdCB0cnVlIGZvciBGbGV4IDIuNS40LiAgKi8KKyNpZm5kZWYgeXlsZW5nCisjIGRlZmluZSB5eWxlbmcgIEZMRVhfUFJFRklYIChsZW5nKQorI2VuZGlmCisjaWZuZGVmIHl5dGV4dAorIyBkZWZpbmUgeXl0ZXh0ICBGTEVYX1BSRUZJWCAodGV4dCkKKyNlbmRpZgorCisvKiBOb24tcmVlbnRyYW50IHNjYW5uZXJzIGdlbmVyYXRlZCBieSBGbGV4IDIuNS45IGFuZCBsYXRlciAoYW5kIHNvbWUgZWFybGllcgorICAgdmVyc2lvbnMgYWNjb3JkaW5nIHRvIHRoZSBGbGV4IG1hbnVhbCkgbGVhayBtZW1vcnkgaWYgeXlsZXhfZGVzdHJveSBpcyBub3QKKyAgIGludm9rZWQuICBIb3dldmVyLCB5eWxleF9kZXN0cm95IGlzIG5vdCBkZWZpbmVkIGJlZm9yZSBGbGV4IDIuNS45LCBzbyBnaXZlCisgICBhbiBpbXBsZW1lbnRhdGlvbiBoZXJlIHRoYXQgYXQgbGVhc3QgYXBwZWFycyB0byB3b3JrIHdpdGggRmxleCAyLjUuNC4gICovCisjaWYgRkxFWF9WRVJTSU9OIDw9IDIwMDUwMDkKKyMgZGVmaW5lIHl5bGV4X2Rlc3Ryb3koKSB5eV9kZWxldGVfYnVmZmVyIChZWV9DVVJSRU5UX0JVRkZFUikKKyNlbmRpZgorCisvKiBPQlNUQUNLX0ZPUl9TVFJJTkcgLS0gVXNlZCB0byBzdG9yZSBhbGwgdGhlIGNoYXJhY3RlcnMgdGhhdCB3ZSBuZWVkIHRvCisgICBrZWVwICh0byBjb25zdHJ1Y3QgSUQsIFNUUklOR1MgZXRjLikuICBVc2UgdGhlIGZvbGxvd2luZyBtYWNyb3MgdG8KKyAgIHVzZSBpdC4KKworICAgVXNlIFNUUklOR19HUk9XIHRvIGFwcGVuZCB3aGF0IGhhcyBqdXN0IGJlZW4gbWF0Y2hlZCwgYW5kCisgICBTVFJJTkdfRklOSVNIIHRvIGVuZCB0aGUgc3RyaW5nIChpdCBwdXRzIHRoZSBlbmRpbmcgMCkuCisgICBTVFJJTkdfRklOSVNIIGFsc28gc3RvcmVzIHRoaXMgc3RyaW5nIGluIExBU1RfU1RSSU5HLCB3aGljaCBjYW4gYmUKKyAgIHVzZWQsIGFuZCB3aGljaCBpcyB1c2VkIGJ5IFNUUklOR19GUkVFIHRvIGZyZWUgdGhlIGxhc3Qgc3RyaW5nLiAgKi8KKworI2lmbmRlZiBGTEVYX05PX09CU1RBQ0sKKworc3RhdGljIHN0cnVjdCBvYnN0YWNrIG9ic3RhY2tfZm9yX3N0cmluZzsKKworIyBkZWZpbmUgU1RSSU5HX0dST1cgICBcCisgIG9ic3RhY2tfZ3JvdyAoJm9ic3RhY2tfZm9yX3N0cmluZywgeXl0ZXh0LCB5eWxlbmcpCisKKyMgZGVmaW5lIFNUUklOR19GSU5JU0gJCQkJCVwKKyAgZG8gewkJCQkJCQlcCisgICAgb2JzdGFja18xZ3JvdyAoJm9ic3RhY2tfZm9yX3N0cmluZywgJ1wwJyk7CQlcCisgICAgbGFzdF9zdHJpbmcgPSBvYnN0YWNrX2ZpbmlzaCAoJm9ic3RhY2tfZm9yX3N0cmluZyk7CVwKKyAgfSB3aGlsZSAoMCkKKworIyBkZWZpbmUgU1RSSU5HX0ZSRUUgXAorICBvYnN0YWNrX2ZyZWUgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsIGxhc3Rfc3RyaW5nKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9nZXRhcmdzLmMgYi9zcmMvZ2V0YXJncy5jCmluZGV4IDEzYjBkMzIuLmFiMmEyOGUgMTAwNjQ0Ci0tLSBhL3NyYy9nZXRhcmdzLmMKKysrIGIvc3JjL2dldGFyZ3MuYwpAQCAtMSwyOSArMSwzMCBAQAogLyogUGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmb3IgQmlzb24uCiAKLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4NiwgMTk4OSwgMTk5MiwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwKLSAgIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODYsIDE5ODksIDE5OTIsIDIwMDAtMjAxMiBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuCiAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgogCi0gICBCaXNvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCi0gICBCaXNvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCBCaXNvbjsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0gICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gICAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjaW5jbHVkZSAic3lzdGVtLmgiCisjaW5jbHVkZSAib3V0cHV0LmgiCiAKICNpbmNsdWRlIDxhcmdtYXRjaC5oPgorI2luY2x1ZGUgPGMtc3RyY2FzZS5oPgorI2luY2x1ZGUgPGNvbmZpZ21ha2UuaD4KICNpbmNsdWRlIDxlcnJvci5oPgogCiAvKiBIYWNrIHRvIGdldCA8Z2V0b3B0Lmg+IHRvIGRlY2xhcmUgZ2V0b3B0IHdpdGggYSBwcm90b3R5cGUuICAqLwpAQCAtMzksMTcgKzQwLDIxIEBACiAjIHVuZGVmIEhBQ0tfRk9SX19fR05VX0xJQlJBUllfX19QUk9UT1RZUEUKICNlbmRpZgogCisjaW5jbHVkZSA8cHJvZ25hbWUuaD4KKwogI2luY2x1ZGUgImNvbXBsYWluLmgiCiAjaW5jbHVkZSAiZmlsZXMuaCIKICNpbmNsdWRlICJnZXRhcmdzLmgiCisjaW5jbHVkZSAibXVzY2xlLXRhYi5oIgorI2luY2x1ZGUgInF1b3RlLmgiCiAjaW5jbHVkZSAidW5pcXN0ci5oIgogCi1ib29sIGRlYnVnX2ZsYWc7Citib29sIGRlYnVnOwogYm9vbCBkZWZpbmVzX2ZsYWc7CiBib29sIGdyYXBoX2ZsYWc7Citib29sIHhtbF9mbGFnOwogYm9vbCBsb2NhdGlvbnNfZmxhZzsKIGJvb2wgbm9fbGluZXNfZmxhZzsKLWJvb2wgbm9fcGFyc2VyX2ZsYWc7CiBib29sIHRva2VuX3RhYmxlX2ZsYWc7CiBib29sIHlhY2NfZmxhZzsJLyogZm9yIC15ICovCiAKQEAgLTU3LDE1ICs2MiwxMTkgQEAKIAogYm9vbCBub25kZXRlcm1pbmlzdGljX3BhcnNlciA9IGZhbHNlOwogYm9vbCBnbHJfcGFyc2VyID0gZmFsc2U7Ci1ib29sIHB1cmVfcGFyc2VyID0gZmFsc2U7CiAKK2ludCBmZWF0dXJlX2ZsYWcgPSBmZWF0dXJlX25vbmU7CiBpbnQgcmVwb3J0X2ZsYWcgPSByZXBvcnRfbm9uZTsKIGludCB0cmFjZV9mbGFnID0gdHJhY2Vfbm9uZTsKK2ludCB3YXJuaW5nc19mbGFnID0gd2FybmluZ3NfY29uZmxpY3RzX3NyIHwgd2FybmluZ3NfY29uZmxpY3RzX3JyCisgICAgICAgICAgICAgICAgICAgIHwgd2FybmluZ3Nfb3RoZXI7CiAKK3N0YXRpYyBzdHJ1Y3QgYmlzb25fbGFuZ3VhZ2UgY29uc3QgdmFsaWRfbGFuZ3VhZ2VzW10gPSB7CisgIHsgImMiLCAiYy1za2VsLm00IiwgIi5jIiwgIi5oIiwgdHJ1ZSB9LAorICB7ICJjKysiLCAiYysrLXNrZWwubTQiLCAiLmNjIiwgIi5oaCIsIHRydWUgfSwKKyAgeyAiamF2YSIsICJqYXZhLXNrZWwubTQiLCAiLmphdmEiLCAiLmphdmEiLCBmYWxzZSB9LAorICB7ICIiLCAiIiwgIiIsICIiLCBmYWxzZSB9Cit9OworCitpbnQgc2tlbGV0b25fcHJpbyA9IGRlZmF1bHRfcHJpbzsKIGNvbnN0IGNoYXIgKnNrZWxldG9uID0gTlVMTDsKK2ludCBsYW5ndWFnZV9wcmlvID0gZGVmYXVsdF9wcmlvOworc3RydWN0IGJpc29uX2xhbmd1YWdlIGNvbnN0ICpsYW5ndWFnZSA9ICZ2YWxpZF9sYW5ndWFnZXNbMF07CiBjb25zdCBjaGFyICppbmNsdWRlID0gTlVMTDsKIAotZXh0ZXJuIGNoYXIgKnByb2dyYW1fbmFtZTsKKworLyoqIERlY29kZSBhbiBvcHRpb24ncyBzZXQgb2Yga2V5cy4KKyAqCisgKiAgXHBhcmFtIG9wdGlvbiAgIG9wdGlvbiBiZWluZyBkZWNvZGVkLgorICogIFxwYXJhbSBrZXlzICAgICBhcnJheSBvZiB2YWxpZCBzdWJhcmd1bWVudHMuCisgKiAgXHBhcmFtIHZhbHVlcyAgIGFycmF5IG9mIGNvcnJlc3BvbmRpbmcgKGludCkgdmFsdWVzLgorICogIFxwYXJhbSBhbGwgICAgICB0aGUgYWxsIHZhbHVlLgorICogIFxwYXJhbSBmbGFncyAgICB0aGUgZmxhZ3MgdG8gdXBkYXRlCisgKiAgXHBhcmFtIGFyZ3MgICAgIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGVmZmVjdGl2ZSBzdWJhcmd1bWVudHMgdG8gZGVjb2RlLgorICogICAgICAgICAgICAgICAgICBJZiAwLCB0aGVuIGFjdGl2YXRlIGFsbCB0aGUgZmxhZ3MuCisgKgorICogIElmIFZBTFVFICE9IDAgdGhlbiBLRVkgc2V0cyBmbGFncyBhbmQgbm8tS0VZIGNsZWFycyB0aGVtLgorICogIElmIFZBTFVFID09IDAgdGhlbiBLRVkgY2xlYXJzIGFsbCBmbGFncyBmcm9tIFxjIGFsbCBhbmQgbm8tS0VZIHNldHMgYWxsCisgKiAgZmxhZ3MgZnJvbSBcYyBhbGwuICBUaHVzIG5vLW5vbmUgPSBhbGwgYW5kIG5vLWFsbCA9IG5vbmUuCisgKi8KK3N0YXRpYyB2b2lkCitmbGFnc19hcmdtYXRjaCAoY29uc3QgY2hhciAqb3B0aW9uLAorCQljb25zdCBjaGFyICogY29uc3Qga2V5c1tdLCBjb25zdCBpbnQgdmFsdWVzW10sCisJCWludCBhbGwsIGludCAqZmxhZ3MsIGNoYXIgKmFyZ3MpCit7CisgIGlmIChhcmdzKQorICAgIHsKKyAgICAgIGFyZ3MgPSBzdHJ0b2sgKGFyZ3MsICIsIik7CisgICAgICB3aGlsZSAoYXJncykKKwl7CisJICBpbnQgbm8gPSBzdHJuY21wIChhcmdzLCAibm8tIiwgMykgPT0gMCA/IDMgOiAwOworCSAgaW50IHZhbHVlID0gWEFSR01BVENIIChvcHRpb24sIGFyZ3MgKyBubywga2V5cywgdmFsdWVzKTsKKwkgIGlmICh2YWx1ZSA9PSAwKQorCSAgICB7CisJICAgICAgaWYgKG5vKQorCQkqZmxhZ3MgfD0gYWxsOworCSAgICAgIGVsc2UKKwkJKmZsYWdzICY9IH5hbGw7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGlmIChubykKKwkJKmZsYWdzICY9IH52YWx1ZTsKKwkgICAgICBlbHNlCisJCSpmbGFncyB8PSB2YWx1ZTsKKwkgICAgfQorCSAgYXJncyA9IHN0cnRvayAoTlVMTCwgIiwiKTsKKwl9CisgICAgfQorICBlbHNlCisgICAgKmZsYWdzIHw9IGFsbDsKK30KKworLyoqIERlY29kZSBhIHNldCBvZiBzdWIgYXJndW1lbnRzLgorICoKKyAqICBccGFyYW0gRmxhZ05hbWUgIHRoZSBmbGFnIGZhbWlsbHkgdG8gdXBkYXRlLgorICogIFxwYXJhbSBBcmdzICAgICAgdGhlIGVmZmVjdGl2ZSBzdWIgYXJndW1lbnRzIHRvIGRlY29kZS4KKyAqCisgKiAgXGFyZyBGbGFnTmFtZV9hcmdzICAgdGhlIGxpc3Qgb2Yga2V5cy4KKyAqICBcYXJnIEZsYWdOYW1lX3R5cGVzICB0aGUgbGlzdCBvZiB2YWx1ZXMuCisgKiAgXGFyZyBGbGFnTmFtZV9hbGwgICAgdGhlIGFsbCB2YWx1ZS4KKyAqICBcYXJnIEZsYWdOYW1lX2ZsYWcgICB0aGUgZmxhZyB0byB1cGRhdGUuCisgKi8KKyNkZWZpbmUgRkxBR1NfQVJHTUFUQ0goRmxhZ05hbWUsIEFyZ3MpCQkJCQlcCisgIGZsYWdzX2FyZ21hdGNoICgiLS0iICNGbGFnTmFtZSwgRmxhZ05hbWUgIyMgX2FyZ3MsIEZsYWdOYW1lICMjIF90eXBlcywgXAorCQkgIEZsYWdOYW1lICMjIF9hbGwsICZGbGFnTmFtZSAjIyBfZmxhZywgQXJncykKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IC0tcmVwb3J0J3MgaGFuZGxpbmcuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVwb3J0X2FyZ3NbXSA9Cit7CisgIC8qIEluIGEgc2VyaWVzIG9mIHN5bm9ueW1zLCBwcmVzZW50IHRoZSBtb3N0IG1lYW5pbmdmdWwgZmlyc3QsIHNvCisgICAgIHRoYXQgYXJnbWF0Y2hfdmFsaWQgYmUgbW9yZSByZWFkYWJsZS4gICovCisgICJub25lIiwKKyAgInN0YXRlIiwgInN0YXRlcyIsCisgICJpdGVtc2V0IiwgIml0ZW1zZXRzIiwKKyAgImxvb2thaGVhZCIsICJsb29rYWhlYWRzIiwgImxvb2stYWhlYWQiLAorICAic29sdmVkIiwKKyAgImFsbCIsCisgIDAKK307CisKK3N0YXRpYyBjb25zdCBpbnQgcmVwb3J0X3R5cGVzW10gPQoreworICByZXBvcnRfbm9uZSwKKyAgcmVwb3J0X3N0YXRlcywgcmVwb3J0X3N0YXRlcywKKyAgcmVwb3J0X3N0YXRlcyB8IHJlcG9ydF9pdGVtc2V0cywgcmVwb3J0X3N0YXRlcyB8IHJlcG9ydF9pdGVtc2V0cywKKyAgcmVwb3J0X3N0YXRlcyB8IHJlcG9ydF9sb29rYWhlYWRfdG9rZW5zLAorICByZXBvcnRfc3RhdGVzIHwgcmVwb3J0X2xvb2thaGVhZF90b2tlbnMsCisgIHJlcG9ydF9zdGF0ZXMgfCByZXBvcnRfbG9va2FoZWFkX3Rva2VucywKKyAgcmVwb3J0X3N0YXRlcyB8IHJlcG9ydF9zb2x2ZWRfY29uZmxpY3RzLAorICByZXBvcnRfYWxsCit9OworCitBUkdNQVRDSF9WRVJJRlkgKHJlcG9ydF9hcmdzLCByZXBvcnRfdHlwZXMpOwogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgpAQCAtNzYsMTggKzE4NSwyMCBAQAogewogICAvKiBJbiBhIHNlcmllcyBvZiBzeW5vbnltcywgcHJlc2VudCB0aGUgbW9zdCBtZWFuaW5nZnVsIGZpcnN0LCBzbwogICAgICB0aGF0IGFyZ21hdGNoX3ZhbGlkIGJlIG1vcmUgcmVhZGFibGUuICAqLwotICAibm9uZSAgICAgICAtIG5vIHJlcG9ydCIsCisgICJub25lICAgICAgIC0gbm8gdHJhY2VzIiwKICAgInNjYW4gICAgICAgLSBncmFtbWFyIHNjYW5uZXIgdHJhY2VzIiwKICAgInBhcnNlICAgICAgLSBncmFtbWFyIHBhcnNlciB0cmFjZXMiLAotICAiYXV0b21hdG9uICAtIGNvbnRydWN0aW9uIG9mIHRoZSBhdXRvbWF0b24iLAorICAiYXV0b21hdG9uICAtIGNvbnN0cnVjdGlvbiBvZiB0aGUgYXV0b21hdG9uIiwKICAgImJpdHNldHMgICAgLSB1c2Ugb2YgYml0c2V0cyIsCi0gICJncmFtbWFyICAgIC0gcmVhZGluZywgcmVkdWNpbmcgb2YgdGhlIGdyYW1tYXIiLAorICAiZ3JhbW1hciAgICAtIHJlYWRpbmcsIHJlZHVjaW5nIHRoZSBncmFtbWFyIiwKICAgInJlc291cmNlICAgLSBtZW1vcnkgY29uc3VtcHRpb24gKHdoZXJlIGF2YWlsYWJsZSkiLAogICAic2V0cyAgICAgICAtIGdyYW1tYXIgc2V0czogZmlyc3RzLCBudWxsYWJsZSBldGMuIiwKKyAgIm11c2NsZXMgICAgLSBtNCBkZWZpbml0aW9ucyBwYXNzZWQgdG8gdGhlIHNrZWxldG9uIiwKICAgInRvb2xzICAgICAgLSBtNCBpbnZvY2F0aW9uIiwKICAgIm00ICAgICAgICAgLSBtNCB0cmFjZXMiLAogICAic2tlbGV0b24gICAtIHNrZWxldG9uIHBvc3Rwcm9jZXNzaW5nIiwKICAgInRpbWUgICAgICAgLSB0aW1lIGNvbnN1bXB0aW9uIiwKKyAgImllbHIgICAgICAgLSBJRUxSIGNvbnZlcnNpb24iLAogICAiYWxsICAgICAgICAtIGFsbCBvZiB0aGUgYWJvdmUiLAogICAwCiB9OwpAQCAtMTAyLDg0ICsyMTMsNzEgQEAKICAgdHJhY2VfZ3JhbW1hciwKICAgdHJhY2VfcmVzb3VyY2UsCiAgIHRyYWNlX3NldHMsCisgIHRyYWNlX211c2NsZXMsCiAgIHRyYWNlX3Rvb2xzLAogICB0cmFjZV9tNCwKICAgdHJhY2Vfc2tlbGV0b24sCiAgIHRyYWNlX3RpbWUsCisgIHRyYWNlX2llbHIsCiAgIHRyYWNlX2FsbAogfTsKIAogQVJHTUFUQ0hfVkVSSUZZICh0cmFjZV9hcmdzLCB0cmFjZV90eXBlcyk7CiAKLXN0YXRpYyB2b2lkCi10cmFjZV9hcmdtYXRjaCAoY2hhciAqYXJncykKLXsKLSAgaWYgKGFyZ3MpCi0gICAgewotICAgICAgYXJncyA9IHN0cnRvayAoYXJncywgIiwiKTsKLSAgICAgIGRvCi0JewotCSAgaW50IHRyYWNlID0gWEFSR01BVENIICgiLS10cmFjZSIsIGFyZ3MsCi0JCQkJIHRyYWNlX2FyZ3MsIHRyYWNlX3R5cGVzKTsKLQkgIGlmICh0cmFjZSA9PSB0cmFjZV9ub25lKQotCSAgICB0cmFjZV9mbGFnID0gdHJhY2Vfbm9uZTsKLQkgIGVsc2UKLQkgICAgdHJhY2VfZmxhZyB8PSB0cmFjZTsKLQl9Ci0gICAgICB3aGlsZSAoKGFyZ3MgPSBzdHJ0b2sgKE5VTEwsICIsIikpKTsKLSAgICB9Ci0gIGVsc2UKLSAgICB0cmFjZV9mbGFnID0gdHJhY2VfYWxsOwotfQogCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgLS13YXJuaW5ncydzIGhhbmRsaW5nLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgLS1yZXBvcnQncyBoYW5kbGluZy4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCByZXBvcnRfYXJnc1tdID0KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgd2FybmluZ3NfYXJnc1tdID0KIHsKICAgLyogSW4gYSBzZXJpZXMgb2Ygc3lub255bXMsIHByZXNlbnQgdGhlIG1vc3QgbWVhbmluZ2Z1bCBmaXJzdCwgc28KICAgICAgdGhhdCBhcmdtYXRjaF92YWxpZCBiZSBtb3JlIHJlYWRhYmxlLiAgKi8KKyAgIm5vbmUgICAgICAgICAgICAtIG5vIHdhcm5pbmdzIiwKKyAgIm1pZHJ1bGUtdmFsdWVzICAtIHVuc2V0IG9yIHVudXNlZCBtaWRydWxlIHZhbHVlcyIsCisgICJ5YWNjICAgICAgICAgICAgLSBpbmNvbXBhdGliaWxpdGllcyB3aXRoIFBPU0lYIFlhY2MiLAorICAiY29uZmxpY3RzLXNyICAgIC0gUy9SIGNvbmZsaWN0cyIsCisgICJjb25mbGljdHMtcnIgICAgLSBSL1IgY29uZmxpY3RzIiwKKyAgIm90aGVyICAgICAgICAgICAtIGFsbCBvdGhlciB3YXJuaW5ncyIsCisgICJhbGwgICAgICAgICAgICAgLSBhbGwgb2YgdGhlIGFib3ZlIiwKKyAgImVycm9yICAgICAgICAgICAtIHdhcm5pbmdzIGFyZSBlcnJvcnMiLAorICAwCit9OworCitzdGF0aWMgY29uc3QgaW50IHdhcm5pbmdzX3R5cGVzW10gPQoreworICB3YXJuaW5nc19ub25lLAorICB3YXJuaW5nc19taWRydWxlX3ZhbHVlcywKKyAgd2FybmluZ3NfeWFjYywKKyAgd2FybmluZ3NfY29uZmxpY3RzX3NyLAorICB3YXJuaW5nc19jb25mbGljdHNfcnIsCisgIHdhcm5pbmdzX290aGVyLAorICB3YXJuaW5nc19hbGwsCisgIHdhcm5pbmdzX2Vycm9yCit9OworCitBUkdNQVRDSF9WRVJJRlkgKHdhcm5pbmdzX2FyZ3MsIHdhcm5pbmdzX3R5cGVzKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgLS1mZWF0dXJlJ3MgaGFuZGxpbmcuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZlYXR1cmVfYXJnc1tdID0KK3sKICAgIm5vbmUiLAotICAic3RhdGUiLCAic3RhdGVzIiwKLSAgIml0ZW1zZXQiLCAiaXRlbXNldHMiLAotICAibG9vay1haGVhZCIsICJsb29rYWhlYWQiLCAibG9va2FoZWFkcyIsCi0gICJzb2x2ZWQiLAorICAiY2FyZXQiLCAiZGlhZ25vc3RpY3Mtc2hvdy1jYXJldCIsCiAgICJhbGwiLAogICAwCiB9OwogCi1zdGF0aWMgY29uc3QgaW50IHJlcG9ydF90eXBlc1tdID0KK3N0YXRpYyBjb25zdCBpbnQgZmVhdHVyZV90eXBlc1tdID0KIHsKLSAgcmVwb3J0X25vbmUsCi0gIHJlcG9ydF9zdGF0ZXMsIHJlcG9ydF9zdGF0ZXMsCi0gIHJlcG9ydF9zdGF0ZXMgfCByZXBvcnRfaXRlbXNldHMsIHJlcG9ydF9zdGF0ZXMgfCByZXBvcnRfaXRlbXNldHMsCi0gIHJlcG9ydF9zdGF0ZXMgfCByZXBvcnRfbG9va19haGVhZF90b2tlbnMsCi0gIHJlcG9ydF9zdGF0ZXMgfCByZXBvcnRfbG9va19haGVhZF90b2tlbnMsCi0gIHJlcG9ydF9zdGF0ZXMgfCByZXBvcnRfbG9va19haGVhZF90b2tlbnMsCi0gIHJlcG9ydF9zdGF0ZXMgfCByZXBvcnRfc29sdmVkX2NvbmZsaWN0cywKLSAgcmVwb3J0X2FsbAorICBmZWF0dXJlX25vbmUsCisgIGZlYXR1cmVfY2FyZXQsIGZlYXR1cmVfY2FyZXQsCisgIGZlYXR1cmVfYWxsCiB9OwogCi1BUkdNQVRDSF9WRVJJRlkgKHJlcG9ydF9hcmdzLCByZXBvcnRfdHlwZXMpOwotCi1zdGF0aWMgdm9pZAotcmVwb3J0X2FyZ21hdGNoIChjaGFyICphcmdzKQotewotICBhcmdzID0gc3RydG9rIChhcmdzLCAiLCIpOwotICBkbwotICAgIHsKLSAgICAgIGludCByZXBvcnQgPSBYQVJHTUFUQ0ggKCItLXJlcG9ydCIsIGFyZ3MsCi0JCQkgICAgICByZXBvcnRfYXJncywgcmVwb3J0X3R5cGVzKTsKLSAgICAgIGlmIChyZXBvcnQgPT0gcmVwb3J0X25vbmUpCi0JcmVwb3J0X2ZsYWcgPSByZXBvcnRfbm9uZTsKLSAgICAgIGVsc2UKLQlyZXBvcnRfZmxhZyB8PSByZXBvcnQ7Ci0gICAgfQotICB3aGlsZSAoKGFyZ3MgPSBzdHJ0b2sgKE5VTEwsICIsIikpKTsKLX0KLQorQVJHTUFUQ0hfVkVSSUZZIChmZWF0dXJlX2FyZ3MsIGZlYXR1cmVfdHlwZXMpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IERpc3BsYXkgdGhlIGhlbHAgbWVzc2FnZSBhbmQgZXhpdCBTVEFUVVMuICB8CkBAIC0xOTUsNTAgKzI5Myw4MyBAQAogCSAgICAgcHJvZ3JhbV9uYW1lKTsKICAgZWxzZQogICAgIHsKLSAgICAgIC8qIFNvbWUgZWZmb3J0cyB3ZXJlIG1hZGUgdG8gZWFzZSB0aGUgdHJhbnNsYXRvcnMnIHRhc2ssIHBsZWFzZQotCSBjb250aW51ZS4gICovCi0gICAgICBmcHV0cyAoXygiXAotR05VIGJpc29uIGdlbmVyYXRlcyBwYXJzZXJzIGZvciBMQUxSKDEpIGdyYW1tYXJzLlxuIiksIHN0ZG91dCk7Ci0gICAgICBwdXRjICgnXG4nLCBzdGRvdXQpOworICAgICAgLyogRm9yIC4uL2J1aWxkLWF1eC9jcm9zcy1vcHRpb25zLnBsIHRvIHdvcmssIHVzZSB0aGUgZm9ybWF0OgorCQleICAtUywgLS1sb25nWz1BUkdTXSAod2hpdGVzcGFjZSkKKwkgQSAtLWxvbmcgb3B0aW9uIGlzIHJlcXVpcmVkLgorCSBPdGhlcndpc2UsIGFkZCBleGNlcHRpb25zIHRvIC4uL2J1aWxkLWF1eC9jcm9zcy1vcHRpb25zLnBsLiAgKi8KIAotICAgICAgZnByaW50ZiAoc3Rkb3V0LCBfKCJcCi1Vc2FnZTogJXMgW09QVElPTl0uLi4gRklMRVxuIiksIHByb2dyYW1fbmFtZSk7Ci0gICAgICBwdXRjICgnXG4nLCBzdGRvdXQpOworICAgICAgcHJpbnRmIChfKCJVc2FnZTogJXMgW09QVElPTl0uLi4gRklMRVxuIiksIHByb2dyYW1fbmFtZSk7CisgICAgICBmcHV0cyAoXygiXAorR2VuZXJhdGUgYSBkZXRlcm1pbmlzdGljIExSIG9yIGdlbmVyYWxpemVkIExSIChHTFIpIHBhcnNlciBlbXBsb3lpbmdcblwKK0xBTFIoMSksIElFTFIoMSksIG9yIGNhbm9uaWNhbCBMUigxKSBwYXJzZXIgdGFibGVzLiAgSUVMUigxKSBhbmRcblwKK2Nhbm9uaWNhbCBMUigxKSBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbC5cblwKK1xuXAorIiksIHN0ZG91dCk7CiAKICAgICAgIGZwdXRzIChfKCJcCi1JZiBhIGxvbmcgb3B0aW9uIHNob3dzIGFuIGFyZ3VtZW50IGFzIG1hbmRhdG9yeSwgdGhlbiBpdCBpcyBtYW5kYXRvcnlcblwKLWZvciB0aGUgZXF1aXZhbGVudCBzaG9ydCBvcHRpb24gYWxzby4gIFNpbWlsYXJseSBmb3Igb3B0aW9uYWwgYXJndW1lbnRzLlxuIiksCi0JICAgICBzdGRvdXQpOwotICAgICAgcHV0YyAoJ1xuJywgc3Rkb3V0KTsKK01hbmRhdG9yeSBhcmd1bWVudHMgdG8gbG9uZyBvcHRpb25zIGFyZSBtYW5kYXRvcnkgZm9yIHNob3J0IG9wdGlvbnMgdG9vLlxuXAorIiksIHN0ZG91dCk7CisgICAgICBmcHV0cyAoXygiXAorVGhlIHNhbWUgaXMgdHJ1ZSBmb3Igb3B0aW9uYWwgYXJndW1lbnRzLlxuXAorIiksIHN0ZG91dCk7CiAKICAgICAgIGZwdXRzIChfKCJcCitcblwKIE9wZXJhdGlvbiBtb2RlczpcblwKICAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcblwKICAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcblwKICAgICAgIC0tcHJpbnQtbG9jYWxlZGlyICAgICAgb3V0cHV0IGRpcmVjdG9yeSBjb250YWluaW5nIGxvY2FsZS1kZXBlbmRlbnQgZGF0YVxuXAotICAteSwgLS15YWNjICAgICAgICAgICAgICAgICBlbXVsYXRlIFBPU0lYIHlhY2NcbiIpLCBzdGRvdXQpOwotICAgICAgcHV0YyAoJ1xuJywgc3Rkb3V0KTsKKyAgICAgIC0tcHJpbnQtZGF0YWRpciAgICAgICAgb3V0cHV0IGRpcmVjdG9yeSBjb250YWluaW5nIHNrZWxldG9ucyBhbmQgWFNMVFxuXAorICAteSwgLS15YWNjICAgICAgICAgICAgICAgICBlbXVsYXRlIFBPU0lYIFlhY2NcblwKKyAgLVcsIC0td2FybmluZ3NbPUNBVEVHT1JZXSAgcmVwb3J0IHRoZSB3YXJuaW5ncyBmYWxsaW5nIGluIENBVEVHT1JZXG5cCisgIC1mLCAtLWZlYXR1cmVbPUZFQVRVUkVdICAgIGFjdGl2YXRlIG1pc2NlbGxhbmVvdXMgZmVhdHVyZXNcblwKK1xuXAorIiksIHN0ZG91dCk7CiAKICAgICAgIGZwdXRzIChfKCJcCiBQYXJzZXI6XG5cCi0gIC1TLCAtLXNrZWxldG9uPUZJTEUgICAgICAgIHNwZWNpZnkgdGhlIHNrZWxldG9uIHRvIHVzZVxuXAotICAtdCwgLS1kZWJ1ZyAgICAgICAgICAgICAgICBpbnN0cnVtZW50IHRoZSBwYXJzZXIgZm9yIGRlYnVnZ2luZ1xuXAotICAgICAgLS1sb2NhdGlvbnMgICAgICAgICAgICBlbmFibGUgbG9jYXRpb25zIGNvbXB1dGF0aW9uXG5cCi0gIC1wLCAtLW5hbWUtcHJlZml4PVBSRUZJWCAgIHByZXBlbmQgUFJFRklYIHRvIHRoZSBleHRlcm5hbCBzeW1ib2xzXG5cCi0gIC1sLCAtLW5vLWxpbmVzICAgICAgICAgICAgIGRvbid0IGdlbmVyYXRlIGAjbGluZScgZGlyZWN0aXZlc1xuXAotICAtbiwgLS1uby1wYXJzZXIgICAgICAgICAgICBnZW5lcmF0ZSB0aGUgdGFibGVzIG9ubHlcblwKLSAgLWssIC0tdG9rZW4tdGFibGUgICAgICAgICAgaW5jbHVkZSBhIHRhYmxlIG9mIHRva2VuIG5hbWVzXG5cCisgIC1MLCAtLWxhbmd1YWdlPUxBTkdVQUdFICAgICAgICAgIHNwZWNpZnkgdGhlIG91dHB1dCBwcm9ncmFtbWluZyBsYW5ndWFnZVxuXAorICAtUywgLS1za2VsZXRvbj1GSUxFICAgICAgICAgICAgICBzcGVjaWZ5IHRoZSBza2VsZXRvbiB0byB1c2VcblwKKyAgLXQsIC0tZGVidWcgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudCB0aGUgcGFyc2VyIGZvciBkZWJ1Z2dpbmdcblwKKyAgICAgIC0tbG9jYXRpb25zICAgICAgICAgICAgICAgICAgZW5hYmxlIGxvY2F0aW9uIHN1cHBvcnRcblwKKyAgLUQsIC0tZGVmaW5lPU5BTUVbPVZBTFVFXSAgICAgICAgc2ltaWxhciB0byAnJWRlZmluZSBOQU1FIFwiVkFMVUVcIidcblwKKyAgLUYsIC0tZm9yY2UtZGVmaW5lPU5BTUVbPVZBTFVFXSAgb3ZlcnJpZGUgJyVkZWZpbmUgTkFNRSBcIlZBTFVFXCInXG5cCisgIC1wLCAtLW5hbWUtcHJlZml4PVBSRUZJWCAgICAgICAgIHByZXBlbmQgUFJFRklYIHRvIHRoZSBleHRlcm5hbCBzeW1ib2xzXG5cCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQgYnkgJy1EYXBpLnByZWZpeD1QUkVGSVgnXG5cCisgIC1sLCAtLW5vLWxpbmVzICAgICAgICAgICAgICAgICAgIGRvbid0IGdlbmVyYXRlICcjbGluZScgZGlyZWN0aXZlc1xuXAorICAtaywgLS10b2tlbi10YWJsZSAgICAgICAgICAgICAgICBpbmNsdWRlIGEgdGFibGUgb2YgdG9rZW4gbmFtZXNcblwKKyIpLCBzdGRvdXQpOworICAgICAgcHV0YyAoJ1xuJywgc3Rkb3V0KTsKKworICAgICAgLyogS2VlcCAtZCBhbmQgLS1kZWZpbmVzIHNlcGFyYXRlIHNvIHRoYXQgLi4vYnVpbGQtYXV4L2Nyb3NzLW9wdGlvbnMucGwKKyAgICAgICAqIHdvbid0IGFzc3VtZSB0aGF0IC1kIGFsc28gdGFrZXMgYW4gYXJndW1lbnQuICAqLworICAgICAgZnB1dHMgKF8oIlwKK091dHB1dDpcblwKKyAgICAgIC0tZGVmaW5lc1s9RklMRV0gICAgICAgYWxzbyBwcm9kdWNlIGEgaGVhZGVyIGZpbGVcblwKKyAgLWQgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZXdpc2UgYnV0IGNhbm5vdCBzcGVjaWZ5IEZJTEUgKGZvciBQT1NJWCBZYWNjKVxuXAorICAtciwgLS1yZXBvcnQ9VEhJTkdTICAgICAgICBhbHNvIHByb2R1Y2UgZGV0YWlscyBvbiB0aGUgYXV0b21hdG9uXG5cCisgICAgICAtLXJlcG9ydC1maWxlPUZJTEUgICAgIHdyaXRlIHJlcG9ydCB0byBGSUxFXG5cCisgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIHNhbWUgYXMgYC0tcmVwb3J0PXN0YXRlJ1xuXAorICAtYiwgLS1maWxlLXByZWZpeD1QUkVGSVggICBzcGVjaWZ5IGEgUFJFRklYIGZvciBvdXRwdXQgZmlsZXNcblwKKyAgLW8sIC0tb3V0cHV0PUZJTEUgICAgICAgICAgbGVhdmUgb3V0cHV0IHRvIEZJTEVcblwKKyAgLWcsIC0tZ3JhcGhbPUZJTEVdICAgICAgICAgYWxzbyBvdXRwdXQgYSBncmFwaCBvZiB0aGUgYXV0b21hdG9uXG5cCisgIC14LCAtLXhtbFs9RklMRV0gICAgICAgICAgIGFsc28gb3V0cHV0IGFuIFhNTCByZXBvcnQgb2YgdGhlIGF1dG9tYXRvblxuXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhlIFhNTCBzY2hlbWEgaXMgZXhwZXJpbWVudGFsKVxuXAogIiksIHN0ZG91dCk7CiAgICAgICBwdXRjICgnXG4nLCBzdGRvdXQpOwogCiAgICAgICBmcHV0cyAoXygiXAotT3V0cHV0OlxuXAotICAtZCwgLS1kZWZpbmVzICAgICAgICAgICAgICBhbHNvIHByb2R1Y2UgYSBoZWFkZXIgZmlsZVxuXAotICAtciwgLS1yZXBvcnQ9VEhJTkdTICAgICAgICBhbHNvIHByb2R1Y2UgZGV0YWlscyBvbiB0aGUgYXV0b21hdG9uXG5cCi0gIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgIHNhbWUgYXMgYC0tcmVwb3J0PXN0YXRlJ1xuXAotICAtYiwgLS1maWxlLXByZWZpeD1QUkVGSVggICBzcGVjaWZ5IGEgUFJFRklYIGZvciBvdXRwdXQgZmlsZXNcblwKLSAgLW8sIC0tb3V0cHV0PUZJTEUgICAgICAgICAgbGVhdmUgb3V0cHV0IHRvIEZJTEVcblwKLSAgLWcsIC0tZ3JhcGggICAgICAgICAgICAgICAgYWxzbyBwcm9kdWNlIGEgVkNHIGRlc2NyaXB0aW9uIG9mIHRoZSBhdXRvbWF0b25cblwKK1dhcm5pbmcgY2F0ZWdvcmllcyBpbmNsdWRlOlxuXAorICBgbWlkcnVsZS12YWx1ZXMnICB1bnNldCBvciB1bnVzZWQgbWlkcnVsZSB2YWx1ZXNcblwKKyAgYHlhY2MnICAgICAgICAgICAgaW5jb21wYXRpYmlsaXRpZXMgd2l0aCBQT1NJWCBZYWNjXG5cCisgIGBjb25mbGljdHMtc3InICAgIFMvUiBjb25mbGljdHMgKGVuYWJsZWQgYnkgZGVmYXVsdClcblwKKyAgYGNvbmZsaWN0cy1ycicgICAgUi9SIGNvbmZsaWN0cyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuXAorICBgZGVwcmVjYXRlZCcgICAgICBvYnNvbGV0ZSBjb25zdHJ1Y3RzXG5cCisgIGBvdGhlcicgICAgICAgICAgIGFsbCBvdGhlciB3YXJuaW5ncyAoZW5hYmxlZCBieSBkZWZhdWx0KVxuXAorICBgYWxsJyAgICAgICAgICAgICBhbGwgdGhlIHdhcm5pbmdzXG5cCisgIGBuby1DQVRFR09SWScgICAgIHR1cm4gb2ZmIHdhcm5pbmdzIGluIENBVEVHT1JZXG5cCisgIGBub25lJyAgICAgICAgICAgIHR1cm4gb2ZmIGFsbCB0aGUgd2FybmluZ3NcblwKKyAgYGVycm9yJyAgICAgICAgICAgdHJlYXQgd2FybmluZ3MgYXMgZXJyb3JzXG5cCiAiKSwgc3Rkb3V0KTsKICAgICAgIHB1dGMgKCdcbicsIHN0ZG91dCk7CiAKQEAgLTI0Niw3ICszNzcsNyBAQAogVEhJTkdTIGlzIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMgdGhhdCBjYW4gaW5jbHVkZTpcblwKICAgYHN0YXRlJyAgICAgICAgZGVzY3JpYmUgdGhlIHN0YXRlc1xuXAogICBgaXRlbXNldCcgICAgICBjb21wbGV0ZSB0aGUgY29yZSBpdGVtIHNldHMgd2l0aCB0aGVpciBjbG9zdXJlXG5cCi0gIGBsb29rLWFoZWFkJyAgIGV4cGxpY2l0bHkgYXNzb2NpYXRlIGxvb2stYWhlYWQgdG9rZW5zIHRvIGl0ZW1zXG5cCisgIGBsb29rYWhlYWQnICAgIGV4cGxpY2l0bHkgYXNzb2NpYXRlIGxvb2thaGVhZCB0b2tlbnMgdG8gaXRlbXNcblwKICAgYHNvbHZlZCcgICAgICAgZGVzY3JpYmUgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cyBzb2x2aW5nXG5cCiAgIGBhbGwnICAgICAgICAgIGluY2x1ZGUgYWxsIHRoZSBhYm92ZSBpbmZvcm1hdGlvblxuXAogICBgbm9uZScgICAgICAgICBkaXNhYmxlIHRoZSByZXBvcnRcblwKQEAgLTI1NCw3ICszODUsMzEgQEAKICAgICAgIHB1dGMgKCdcbicsIHN0ZG91dCk7CiAKICAgICAgIGZwdXRzIChfKCJcCi1SZXBvcnQgYnVncyB0byA8YnVnLWJpc29uQGdudS5vcmc+LlxuIiksIHN0ZG91dCk7CitGRUFUVVJFIGlzIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMgdGhhdCBjYW4gaW5jbHVkZTpcblwKKyAgYGNhcmV0JyAgICAgICAgc2hvdyBlcnJvcnMgd2l0aCBjYXJldHNcblwKKyAgYGFsbCcgICAgICAgICAgYWxsIG9mIHRoZSBhYm92ZVxuXAorICBgbm9uZScgICAgICAgICBkaXNhYmxlIGFsbCBvZiB0aGUgYWJvdmVcblwKKyAgIiksIHN0ZG91dCk7CisKKyAgICAgIHB1dGMgKCdcbicsIHN0ZG91dCk7CisgICAgICBwcmludGYgKF8oIlJlcG9ydCBidWdzIHRvIDwlcz4uXG4iKSwgUEFDS0FHRV9CVUdSRVBPUlQpOworICAgICAgcHJpbnRmIChfKCIlcyBob21lIHBhZ2U6IDwlcz4uXG4iKSwgUEFDS0FHRV9OQU1FLCBQQUNLQUdFX1VSTCk7CisgICAgICBmcHV0cyAoXygiR2VuZXJhbCBoZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogIgorICAgICAgICAgICAgICAgIjxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LlxuIiksCisgICAgICAgICAgICAgc3Rkb3V0KTsKKyAgICAgIC8qIERvbid0IG91dHB1dCB0aGlzIHJlZHVuZGFudCBtZXNzYWdlIGZvciBFbmdsaXNoIGxvY2FsZXMuCisgICAgICAgICBOb3RlIHdlIHN0aWxsIG91dHB1dCBmb3IgJ0MnIHNvIHRoYXQgaXQgZ2V0cyBpbmNsdWRlZCBpbiB0aGUKKyAgICAgICAgIG1hbiBwYWdlLiAgKi8KKyAgICAgIGNvbnN0IGNoYXIgKmxjX21lc3NhZ2VzID0gc2V0bG9jYWxlIChMQ19NRVNTQUdFUywgTlVMTCk7CisgICAgICBpZiAobGNfbWVzc2FnZXMgJiYgc3RyY21wIChsY19tZXNzYWdlcywgImVuXyIpKQorICAgICAgICAvKiBUUkFOU0xBVE9SUzogUmVwbGFjZSBMQU5HX0NPREUgaW4gdGhpcyBVUkwgd2l0aCB5b3VyIGxhbmd1YWdlCisgICAgICAgICAgIGNvZGUgPGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vTEFOR19DT0RFLmh0bWw+IHRvCisgICAgICAgICAgIGZvcm0gb25lIG9mIHRoZSBVUkxzIGF0IGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vLgorICAgICAgICAgICBPdGhlcndpc2UsIHJlcGxhY2UgdGhlIGVudGlyZSBVUkwgd2l0aCB5b3VyIHRyYW5zbGF0aW9uIHRlYW0ncworICAgICAgICAgICBlbWFpbCBhZGRyZXNzLiAgKi8KKyAgICAgICAgZnB1dHMgKF8oIlJlcG9ydCB0cmFuc2xhdGlvbiBidWdzIHRvICIKKyAgICAgICAgICAgICAgICAgIjxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtLz4uXG4iKSwgc3Rkb3V0KTsKKyAgICAgIGZwdXRzIChfKCJGb3IgY29tcGxldGUgZG9jdW1lbnRhdGlvbiwgcnVuOiBpbmZvIGJpc29uLlxuIiksIHN0ZG91dCk7CiAgICAgfQogCiAgIGV4aXQgKHN0YXR1cyk7CkBAIC0yNzYsNyArNDMxLDggQEAKICAgcHV0YyAoJ1xuJywgc3Rkb3V0KTsKIAogICBmcHJpbnRmIChzdGRvdXQsCi0JICAgXygiQ29weXJpZ2h0IChDKSAlZCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIpLCAyMDA2KTsKKwkgICBfKCJDb3B5cmlnaHQgKEMpICVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIiksCisJICAgUEFDS0FHRV9DT1BZUklHSFRfWUVBUik7CiAKICAgZnB1dHMgKF8oIlwKIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PXG5cCkBAIC0yODYsMjYgKzQ0Miw5NiBAQAogfQogCiAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgLS1za2VsZXRvbiBhbmQgLS1sYW5ndWFnZSBoYW5kbGluZy4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3ZvaWQKK3NrZWxldG9uX2FyZyAoY2hhciBjb25zdCAqYXJnLCBpbnQgcHJpbywgbG9jYXRpb24gbG9jKQoreworICBpZiAocHJpbyA8IHNrZWxldG9uX3ByaW8pCisgICAgeworICAgICAgc2tlbGV0b25fcHJpbyA9IHByaW87CisgICAgICBza2VsZXRvbiA9IGFyZzsKKyAgICB9CisgIGVsc2UgaWYgKHByaW8gPT0gc2tlbGV0b25fcHJpbykKKyAgICBjb21wbGFpbl9hdCAobG9jLCBfKCJtdWx0aXBsZSBza2VsZXRvbiBkZWNsYXJhdGlvbnMgYXJlIGludmFsaWQiKSk7Cit9CisKK3ZvaWQKK2xhbmd1YWdlX2FyZ21hdGNoIChjaGFyIGNvbnN0ICphcmcsIGludCBwcmlvLCBsb2NhdGlvbiBsb2MpCit7CisgIGNoYXIgY29uc3QgKm1zZzsKKworICBpZiAocHJpbyA8IGxhbmd1YWdlX3ByaW8pCisgICAgeworICAgICAgaW50IGk7CisgICAgICBmb3IgKGkgPSAwOyB2YWxpZF9sYW5ndWFnZXNbaV0ubGFuZ3VhZ2VbMF07IGkrKykKKyAgICAgICAgaWYgKGNfc3RyY2FzZWNtcCAoYXJnLCB2YWxpZF9sYW5ndWFnZXNbaV0ubGFuZ3VhZ2UpID09IDApCisgICAgICAgICAgeworICAgICAgICAgICAgbGFuZ3VhZ2VfcHJpbyA9IHByaW87CisgICAgICAgICAgICBsYW5ndWFnZSA9ICZ2YWxpZF9sYW5ndWFnZXNbaV07CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgfQorICAgICAgbXNnID0gXygiJXM6IGludmFsaWQgbGFuZ3VhZ2UiKTsKKyAgICB9CisgIGVsc2UgaWYgKGxhbmd1YWdlX3ByaW8gPT0gcHJpbykKKyAgICBtc2cgPSBfKCJtdWx0aXBsZSBsYW5ndWFnZSBkZWNsYXJhdGlvbnMgYXJlIGludmFsaWQiKTsKKyAgZWxzZQorICAgIHJldHVybjsKKworICBjb21wbGFpbl9hdCAobG9jLCBtc2csIHF1b3RlYXJnX2NvbG9uIChhcmcpKTsKK30KKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCBQcm9jZXNzIHRoZSBvcHRpb25zLiAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKiBTaG9ydHMgb3B0aW9ucy4gICovCi1zdGF0aWMgY2hhciBjb25zdCBzaG9ydF9vcHRpb25zW10gPSAieXZlZ2RocjpsdGtuVm86YjpwOlM6VDo6IjsKKy8qIFNob3J0cyBvcHRpb25zLgorICAgU2hvdWxkIGJlIGNvbXB1dGVkIGZyb20gbG9uZ19vcHRpb25zLiAgKi8KK3N0YXRpYyBjaGFyIGNvbnN0IHNob3J0X29wdGlvbnNbXSA9CisgICJEOiIKKyAgIkY6IgorICAiTDoiCisgICJTOiIKKyAgIlQ6OiIKKyAgIlYiCisgICJXOjoiCisgICJiOiIKKyAgImQiCisgICJmOjoiCisgICJlIgorICAiZzo6IgorICAiaCIKKyAgImsiCisgICJsIgorICAibiIKKyAgIm86IgorICAicDoiCisgICJyOiIKKyAgInQiCisgICJ2IgorICAieDo6IgorICAieSIKKyAgOwogCiAvKiBWYWx1ZXMgZm9yIGxvbmcgb3B0aW9ucyB0aGF0IGRvIG5vdCBoYXZlIHNpbmdsZS1sZXR0ZXIgZXF1aXZhbGVudHMuICAqLwogZW51bQogewogICBMT0NBVElPTlNfT1BUSU9OID0gQ0hBUl9NQVggKyAxLAotICBQUklOVF9MT0NBTEVESVJfT1BUSU9OCisgIFBSSU5UX0xPQ0FMRURJUl9PUFRJT04sCisgIFBSSU5UX0RBVEFESVJfT1BUSU9OLAorICBSRVBPUlRfRklMRV9PUFRJT04KIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvbnN0IGxvbmdfb3B0aW9uc1tdID0KIHsKICAgLyogT3BlcmF0aW9uIG1vZGVzLiAqLwotICB7ICJoZWxwIiwgICAgICAgICAgICBub19hcmd1bWVudCwJMCwgICAnaCcgfSwKLSAgeyAidmVyc2lvbiIsICAgICAgICAgbm9fYXJndW1lbnQsCTAsICAgJ1YnIH0sCi0gIHsgInByaW50LWxvY2FsZWRpciIsIG5vX2FyZ3VtZW50LAkwLCAgIFBSSU5UX0xPQ0FMRURJUl9PUFRJT04gfSwKKyAgeyAiaGVscCIsICAgICAgICAgICAgbm9fYXJndW1lbnQsCSAgMCwgICAnaCcgfSwKKyAgeyAidmVyc2lvbiIsICAgICAgICAgbm9fYXJndW1lbnQsCSAgMCwgICAnVicgfSwKKyAgeyAicHJpbnQtbG9jYWxlZGlyIiwgbm9fYXJndW1lbnQsCSAgMCwgICBQUklOVF9MT0NBTEVESVJfT1BUSU9OIH0sCisgIHsgInByaW50LWRhdGFkaXIiLCAgIG5vX2FyZ3VtZW50LAkgIDAsICAgUFJJTlRfREFUQURJUl9PUFRJT04gICB9LAorICB7ICJ3YXJuaW5ncyIsICAgICAgICBvcHRpb25hbF9hcmd1bWVudCwgMCwgICAnVycgfSwKIAogICAvKiBQYXJzZXIuICovCiAgIHsgIm5hbWUtcHJlZml4IiwgICByZXF1aXJlZF9hcmd1bWVudCwJICAwLCAgICdwJyB9LApAQCAtMzE2LDcgKzU0Miw5IEBACiAgIHsgIm91dHB1dCIsCSAgIHJlcXVpcmVkX2FyZ3VtZW50LAkwLCAgICdvJyB9LAogICB7ICJvdXRwdXQtZmlsZSIsIHJlcXVpcmVkX2FyZ3VtZW50LAkwLCAgICdvJyB9LAogICB7ICJncmFwaCIsCSAgIG9wdGlvbmFsX2FyZ3VtZW50LAkwLCAgICdnJyB9LAorICB7ICJ4bWwiLCAgICAgICAgIG9wdGlvbmFsX2FyZ3VtZW50LCAgIDAsICAgJ3gnIH0sCiAgIHsgInJlcG9ydCIsCSAgIHJlcXVpcmVkX2FyZ3VtZW50LCAgIDAsICAgJ3InIH0sCisgIHsgInJlcG9ydC1maWxlIiwgcmVxdWlyZWRfYXJndW1lbnQsICAgMCwgICBSRVBPUlRfRklMRV9PUFRJT04gfSwKICAgeyAidmVyYm9zZSIsCSAgIG5vX2FyZ3VtZW50LAkgICAgICAgIDAsICAgJ3YnIH0sCiAKICAgLyogSGlkZGVuLiAqLwpAQCAtMzI0LDYgKzU1Miw3IEBACiAKICAgLyogT3V0cHV0LiAgKi8KICAgeyAiZGVmaW5lcyIsICAgICBvcHRpb25hbF9hcmd1bWVudCwgICAwLCAgICdkJyB9LAorICB7ICJmZWF0dXJlIiwgICAgIG9wdGlvbmFsX2FyZ3VtZW50LCAgIDAsICAgJ2YnIH0sCiAKICAgLyogT3BlcmF0aW9uIG1vZGVzLiAgKi8KICAgeyAiZml4ZWQtb3V0cHV0LWZpbGVzIiwgbm9fYXJndW1lbnQsICAwLCAgICd5JyB9LApAQCAtMzMxLDExICs1NjAsMTMgQEAKIAogICAvKiBQYXJzZXIuICAqLwogICB7ICJkZWJ1ZyIsCSAgICAgIG5vX2FyZ3VtZW50LCAgICAgICAgICAgICAgIDAsICAgJ3QnIH0sCisgIHsgImRlZmluZSIsCSAgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCAgICAgICAgIDAsICAgJ0QnIH0sCisgIHsgImZvcmNlLWRlZmluZSIsICAgcmVxdWlyZWRfYXJndW1lbnQsICAgICAgICAgMCwgICAnRicgfSwKICAgeyAibG9jYXRpb25zIiwgICAgICBub19hcmd1bWVudCwJCSAwLCBMT0NBVElPTlNfT1BUSU9OIH0sCiAgIHsgIm5vLWxpbmVzIiwgICAgICAgbm9fYXJndW1lbnQsICAgICAgICAgICAgICAgMCwgICAnbCcgfSwKLSAgeyAibm8tcGFyc2VyIiwgICAgICBub19hcmd1bWVudCwgICAgICAgICAgICAgICAwLCAgICduJyB9LAogICB7ICJyYXciLCAgICAgICAgICAgIG5vX2FyZ3VtZW50LCAgICAgICAgICAgICAgIDAsICAgICAwIH0sCiAgIHsgInNrZWxldG9uIiwgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsICAgICAgICAgMCwgICAnUycgfSwKKyAgeyAibGFuZ3VhZ2UiLCAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgICAgICAgICAwLCAgICdMJyB9LAogICB7ICJ0b2tlbi10YWJsZSIsICAgIG5vX2FyZ3VtZW50LCAgICAgICAgICAgICAgIDAsICAgJ2snIH0sCiAKICAgezAsIDAsIDAsIDB9CkBAIC0zNDksNiArNTgwLDE5IEBACiAjIGRlZmluZSBBU19GSUxFX05BTUUoRmlsZSkgKEZpbGUpCiAjZW5kaWYKIAorLyogQnVpbGQgYSBsb2NhdGlvbiBmb3IgdGhlIGN1cnJlbnQgY29tbWFuZCBsaW5lIGFyZ3VtZW50LiAqLworc3RhdGljCitsb2NhdGlvbgorY29tbWFuZF9saW5lX2xvY2F0aW9uICh2b2lkKQoreworICBsb2NhdGlvbiByZXM7CisgIC8qICI8Y29tbWFuZCBsaW5lPiIgaXMgdXNlZCBpbiBHQ0MncyBtZXNzYWdlcyBhYm91dCAtRC4gKi8KKyAgYm91bmRhcnlfc2V0ICgmcmVzLnN0YXJ0LCB1bmlxc3RyX25ldyAoIjxjb21tYW5kIGxpbmU+IiksIG9wdGluZCAtIDEsIC0xKTsKKyAgcmVzLmVuZCA9IHJlcy5zdGFydDsKKyAgcmV0dXJuIHJlczsKK30KKworCiB2b2lkCiBnZXRhcmdzIChpbnQgYXJnYywgY2hhciAqYXJndltdKQogewpAQCAtMzU4LDg5ICs2MDIsMTM5IEBACiAJICE9IC0xKQogICAgIHN3aXRjaCAoYykKICAgICAgIHsKKyAgICAgICAgLyogQVNDSUkgU29ydGluZyBmb3Igc2hvcnQgb3B0aW9ucyAoaS5lLiwgdXBwZXIgY2FzZSB0aGVuCisgICAgICAgICAgIGxvd2VyIGNhc2UpLCBhbmQgdGhlbiBsb25nLW9ubHkgb3B0aW9ucy4gICovCisKICAgICAgIGNhc2UgMDoKIAkvKiBDZXJ0YWluIGxvbmcgb3B0aW9ucyBjYXVzZSBnZXRvcHRfbG9uZyB0byByZXR1cm4gMC4gICovCiAJYnJlYWs7CiAKLSAgICAgIGNhc2UgJ3knOgotCXlhY2NfZmxhZyA9IHRydWU7Ci0JYnJlYWs7Ci0KLSAgICAgIGNhc2UgJ2gnOgotCXVzYWdlIChFWElUX1NVQ0NFU1MpOwotCi0gICAgICBjYXNlICdWJzoKLQl2ZXJzaW9uICgpOwotCWV4aXQgKEVYSVRfU1VDQ0VTUyk7Ci0KLSAgICAgIGNhc2UgUFJJTlRfTE9DQUxFRElSX09QVElPTjoKLQlwcmludGYgKCIlc1xuIiwgTE9DQUxFRElSKTsKLQlleGl0IChFWElUX1NVQ0NFU1MpOwotCi0gICAgICBjYXNlICdnJzoKLQkvKiBIZXJlLCB0aGUgLWcgYW5kIC0tZ3JhcGg9RklMRSBvcHRpb25zIGFyZSBkaWZmZXJlbnRpYXRlZC4gICovCi0JZ3JhcGhfZmxhZyA9IHRydWU7Ci0JaWYgKG9wdGFyZykKLQkgIHNwZWNfZ3JhcGhfZmlsZSA9IEFTX0ZJTEVfTkFNRSAob3B0YXJnKTsKLQlicmVhazsKLQotICAgICAgY2FzZSAndic6Ci0JcmVwb3J0X2ZsYWcgfD0gcmVwb3J0X3N0YXRlczsKLQlicmVhazsKLQotICAgICAgY2FzZSAnUyc6Ci0Jc2tlbGV0b24gPSBBU19GSUxFX05BTUUgKG9wdGFyZyk7CisgICAgICBjYXNlICdEJzogLyogLUROQU1FWz1WQUxVRV0uICovCisgICAgICBjYXNlICdGJzogLyogLUZOQU1FWz1WQUxVRV0uICovCisgICAgICAgIHsKKyAgICAgICAgICBjaGFyKiBuYW1lID0gb3B0YXJnOworICAgICAgICAgIGNoYXIqIHZhbHVlID0gbWJzY2hyIChvcHRhcmcsICc9Jyk7CisgICAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgKnZhbHVlKysgPSAwOworICAgICAgICAgIG11c2NsZV9wZXJjZW50X2RlZmluZV9pbnNlcnQgKG5hbWUsIGNvbW1hbmRfbGluZV9sb2NhdGlvbiAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA/IHZhbHVlIDogIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9PSAnRCcgPyBNVVNDTEVfUEVSQ0VOVF9ERUZJTkVfRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTVVTQ0xFX1BFUkNFTlRfREVGSU5FX0YpOworICAgICAgICB9CiAJYnJlYWs7CiAKICAgICAgIGNhc2UgJ0knOgogCWluY2x1ZGUgPSBBU19GSUxFX05BTUUgKG9wdGFyZyk7CiAJYnJlYWs7CiAKKyAgICAgIGNhc2UgJ0wnOgorCWxhbmd1YWdlX2FyZ21hdGNoIChvcHRhcmcsIGNvbW1hbmRfbGluZV9wcmlvLAorCQkJICAgY29tbWFuZF9saW5lX2xvY2F0aW9uICgpKTsKKwlicmVhazsKKworICAgICAgY2FzZSAnUyc6CisJc2tlbGV0b25fYXJnIChBU19GSUxFX05BTUUgKG9wdGFyZyksIGNvbW1hbmRfbGluZV9wcmlvLAorCQkgICAgICBjb21tYW5kX2xpbmVfbG9jYXRpb24gKCkpOworCWJyZWFrOworCisgICAgICBjYXNlICdUJzoKKwlGTEFHU19BUkdNQVRDSCAodHJhY2UsIG9wdGFyZyk7CisJYnJlYWs7CisKKyAgICAgIGNhc2UgJ1YnOgorCXZlcnNpb24gKCk7CisJZXhpdCAoRVhJVF9TVUNDRVNTKTsKKworICAgICAgY2FzZSAnZic6CisgICAgICAgIEZMQUdTX0FSR01BVENIIChmZWF0dXJlLCBvcHRhcmcpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAnVyc6CisJRkxBR1NfQVJHTUFUQ0ggKHdhcm5pbmdzLCBvcHRhcmcpOworCWJyZWFrOworCisgICAgICBjYXNlICdiJzoKKwlzcGVjX2ZpbGVfcHJlZml4ID0gQVNfRklMRV9OQU1FIChvcHRhcmcpOworCWJyZWFrOworCiAgICAgICBjYXNlICdkJzoKLQkvKiBIZXJlLCB0aGUgLWQgYW5kIC0tZGVmaW5lcyBvcHRpb25zIGFyZSBkaWZmZXJlbnRpYXRlZC4gICovCi0JZGVmaW5lc19mbGFnID0gdHJ1ZTsKKyAgICAgICAgLyogSGVyZSwgdGhlIC1kIGFuZCAtLWRlZmluZXMgb3B0aW9ucyBhcmUgZGlmZmVyZW50aWF0ZWQuICAqLworICAgICAgICBkZWZpbmVzX2ZsYWcgPSB0cnVlOworICAgICAgICBpZiAob3B0YXJnKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGZyZWUgKHNwZWNfZGVmaW5lc19maWxlKTsKKyAgICAgICAgICAgIHNwZWNfZGVmaW5lc19maWxlID0geHN0cmR1cCAoQVNfRklMRV9OQU1FIChvcHRhcmcpKTsKKyAgICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlICdnJzoKKwlncmFwaF9mbGFnID0gdHJ1ZTsKIAlpZiAob3B0YXJnKQotCSAgc3BlY19kZWZpbmVzX2ZpbGUgPSBBU19GSUxFX05BTUUgKG9wdGFyZyk7CisgICAgICAgICAgeworICAgICAgICAgICAgZnJlZSAoc3BlY19ncmFwaF9maWxlKTsKKyAgICAgICAgICAgIHNwZWNfZ3JhcGhfZmlsZSA9IHhzdHJkdXAgKEFTX0ZJTEVfTkFNRSAob3B0YXJnKSk7CisgICAgICAgICAgfQorCWJyZWFrOworCisgICAgICBjYXNlICdoJzoKKwl1c2FnZSAoRVhJVF9TVUNDRVNTKTsKKworICAgICAgY2FzZSAnayc6CisJdG9rZW5fdGFibGVfZmxhZyA9IHRydWU7CiAJYnJlYWs7CiAKICAgICAgIGNhc2UgJ2wnOgogCW5vX2xpbmVzX2ZsYWcgPSB0cnVlOwogCWJyZWFrOwogCi0gICAgICBjYXNlIExPQ0FUSU9OU19PUFRJT046Ci0JbG9jYXRpb25zX2ZsYWcgPSB0cnVlOwotCWJyZWFrOwotCi0gICAgICBjYXNlICdrJzoKLQl0b2tlbl90YWJsZV9mbGFnID0gdHJ1ZTsKLQlicmVhazsKLQotICAgICAgY2FzZSAnbic6Ci0Jbm9fcGFyc2VyX2ZsYWcgPSB0cnVlOwotCWJyZWFrOwotCi0gICAgICBjYXNlICd0JzoKLQlkZWJ1Z19mbGFnID0gdHJ1ZTsKLQlicmVhazsKLQogICAgICAgY2FzZSAnbyc6CiAJc3BlY19vdXRmaWxlID0gQVNfRklMRV9OQU1FIChvcHRhcmcpOwogCWJyZWFrOwogCi0gICAgICBjYXNlICdiJzoKLQlzcGVjX2ZpbGVfcHJlZml4ID0gQVNfRklMRV9OQU1FIChvcHRhcmcpOwotCWJyZWFrOwotCiAgICAgICBjYXNlICdwJzoKIAlzcGVjX25hbWVfcHJlZml4ID0gb3B0YXJnOwogCWJyZWFrOwogCiAgICAgICBjYXNlICdyJzoKLQlyZXBvcnRfYXJnbWF0Y2ggKG9wdGFyZyk7CisJRkxBR1NfQVJHTUFUQ0ggKHJlcG9ydCwgb3B0YXJnKTsKIAlicmVhazsKIAotICAgICAgY2FzZSAnVCc6Ci0JdHJhY2VfYXJnbWF0Y2ggKG9wdGFyZyk7CisgICAgICBjYXNlICd0JzoKKwlkZWJ1ZyA9IHRydWU7CisJYnJlYWs7CisKKyAgICAgIGNhc2UgJ3YnOgorCXJlcG9ydF9mbGFnIHw9IHJlcG9ydF9zdGF0ZXM7CisJYnJlYWs7CisKKyAgICAgIGNhc2UgJ3gnOgorCXhtbF9mbGFnID0gdHJ1ZTsKKwlpZiAob3B0YXJnKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGZyZWUgKHNwZWNfeG1sX2ZpbGUpOworICAgICAgICAgICAgc3BlY194bWxfZmlsZSA9IHhzdHJkdXAgKEFTX0ZJTEVfTkFNRSAob3B0YXJnKSk7CisgICAgICAgICAgfQorCWJyZWFrOworCisgICAgICBjYXNlICd5JzoKKwl5YWNjX2ZsYWcgPSB0cnVlOworCWJyZWFrOworCisgICAgICBjYXNlIExPQ0FUSU9OU19PUFRJT046CisJbG9jYXRpb25zX2ZsYWcgPSB0cnVlOworCWJyZWFrOworCisgICAgICBjYXNlIFBSSU5UX0xPQ0FMRURJUl9PUFRJT046CisJcHJpbnRmICgiJXNcbiIsIExPQ0FMRURJUik7CisJZXhpdCAoRVhJVF9TVUNDRVNTKTsKKworICAgICAgY2FzZSBQUklOVF9EQVRBRElSX09QVElPTjoKKwlwcmludGYgKCIlc1xuIiwgY29tcHV0ZV9wa2dkYXRhZGlyICgpKTsKKwlleGl0IChFWElUX1NVQ0NFU1MpOworCisgICAgICBjYXNlIFJFUE9SVF9GSUxFX09QVElPTjoKKyAgICAgICAgZnJlZSAoc3BlY192ZXJib3NlX2ZpbGUpOworCXNwZWNfdmVyYm9zZV9maWxlID0geHN0cmR1cCAoQVNfRklMRV9OQU1FIChvcHRhcmcpKTsKIAlicmVhazsKIAogICAgICAgZGVmYXVsdDoKQEAgLTQ1MCwxMSArNzQ0LDIwIEBACiAgIGlmIChhcmdjIC0gb3B0aW5kICE9IDEpCiAgICAgewogICAgICAgaWYgKGFyZ2MgLSBvcHRpbmQgPCAxKQotCWVycm9yICgwLCAwLCBfKCJtaXNzaW5nIG9wZXJhbmQgYWZ0ZXIgYCVzJyIpLCBhcmd2W2FyZ2MgLSAxXSk7CisgICAgICAgIGVycm9yICgwLCAwLCBfKCIlczogbWlzc2luZyBvcGVyYW5kIiksIHF1b3RlYXJnX2NvbG9uIChhcmd2W2FyZ2MgLSAxXSkpOwogICAgICAgZWxzZQotCWVycm9yICgwLCAwLCBfKCJleHRyYSBvcGVyYW5kIGAlcyciKSwgYXJndltvcHRpbmQgKyAxXSk7CisgICAgICAgIGVycm9yICgwLCAwLCBfKCJleHRyYSBvcGVyYW5kICVzIiksIHF1b3RlIChhcmd2W29wdGluZCArIDFdKSk7CiAgICAgICB1c2FnZSAoRVhJVF9GQUlMVVJFKTsKICAgICB9CiAKICAgY3VycmVudF9maWxlID0gZ3JhbW1hcl9maWxlID0gdW5pcXN0cl9uZXcgKGFyZ3Zbb3B0aW5kXSk7CisgIE1VU0NMRV9JTlNFUlRfQ19TVFJJTkcgKCJmaWxlX25hbWUiLCBncmFtbWFyX2ZpbGUpOworfQorCit2b2lkCit0ciAoY2hhciAqcywgY2hhciBmcm9tLCBjaGFyIHRvKQoreworICBmb3IgKDsgKnM7IHMrKykKKyAgICBpZiAoKnMgPT0gZnJvbSkKKyAgICAgICpzID0gdG87CiB9CmRpZmYgLS1naXQgYS9zcmMvZ2V0YXJncy5oIGIvc3JjL2dldGFyZ3MuaAppbmRleCA4MTZlYjk1Li5iMjEyNmZjIDEwMDY0NAotLS0gYS9zcmMvZ2V0YXJncy5oCisrKyBiL3NyYy9nZXRhcmdzLmgKQEAgLTEsNDEgKzEsNDUgQEAKIC8qIFBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgZm9yIGJpc29uLgotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg2LCAxOTg5LCAxOTkyLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg2LCAxOTg5LCAxOTkyLCAyMDAwLTIwMTIgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLgogCiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KIAotICAgQmlzb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAotICAgQmlzb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggQmlzb247IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICAgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogI2lmbmRlZiBHRVRBUkdTX0hfCiAjIGRlZmluZSBHRVRBUkdTX0hfCiAKKyNpbmNsdWRlICJsb2NhdGlvbi5oIgorCitlbnVtIHsgY29tbWFuZF9saW5lX3ByaW8sIGdyYW1tYXJfcHJpbywgZGVmYXVsdF9wcmlvIH07CisKIC8qIGZsYWdzIHNldCBieSAlIGRpcmVjdGl2ZXMgKi8KIAogLyogZm9yIC1TICovCiBleHRlcm4gY2hhciBjb25zdCAqc2tlbGV0b247CitleHRlcm4gaW50IHNrZWxldG9uX3ByaW87CiAKIC8qIGZvciAtSSAqLwogZXh0ZXJuIGNoYXIgY29uc3QgKmluY2x1ZGU7CiAKLWV4dGVybiBib29sIGRlYnVnX2ZsYWc7CQkJLyogZm9yIC10ICovCitleHRlcm4gYm9vbCBkZWJ1ZzsJCQkvKiBmb3IgLXQgKi8KIGV4dGVybiBib29sIGRlZmluZXNfZmxhZzsJCS8qIGZvciAtZCAqLwogZXh0ZXJuIGJvb2wgZ3JhcGhfZmxhZzsJCQkvKiBmb3IgLWcgKi8KK2V4dGVybiBib29sIHhtbF9mbGFnOwkJCS8qIGZvciAteCAqLwogZXh0ZXJuIGJvb2wgbG9jYXRpb25zX2ZsYWc7CiBleHRlcm4gYm9vbCBub19saW5lc19mbGFnOwkJLyogZm9yIC1sICovCi1leHRlcm4gYm9vbCBub19wYXJzZXJfZmxhZzsJCS8qIGZvciAtbiAqLwogZXh0ZXJuIGJvb2wgdG9rZW5fdGFibGVfZmxhZzsJCS8qIGZvciAtayAqLwogZXh0ZXJuIGJvb2wgeWFjY19mbGFnOwkJCS8qIGZvciAteSAqLwogCkBAIC00OCw0OCArNTIsMTA5IEBACiAKIGV4dGVybiBib29sIGdscl9wYXJzZXI7CiAKLS8qIFBVUkVfUEFSU0VSIGlzIHRydWUgaWYgc2hvdWxkIGdlbmVyYXRlIGEgcGFyc2VyIHRoYXQgaXMgYWxsIHB1cmUKLSAgIGFuZCByZWVudHJhbnQuICAqLwotCi1leHRlcm4gYm9vbCBwdXJlX3BhcnNlcjsKLQogLyogTk9OREVURVJNSU5JU1RJQ19QQVJTRVIgaXMgdHJ1ZSBpZmYgY29uZmxpY3RzIGFyZSBhY2NlcHRlZC4gIFRoaXMKICAgIGlzIHVzZWQgYnkgdGhlIEdMUiBwYXJzZXIsIGFuZCBtaWdodCBiZSB1c2VkIGluIEJhY2tUcmFja2luZwogICAgcGFyc2VycyB0b28uICAqLwogCiBleHRlcm4gYm9vbCBub25kZXRlcm1pbmlzdGljX3BhcnNlcjsKIAotLyogLS10cmFjZS4gICovCi1lbnVtIHRyYWNlCi0gIHsKLSAgICB0cmFjZV9ub25lICAgICAgPSAwLAotICAgIHRyYWNlX3NjYW4gICAgICA9IDEgPDwgMCwKLSAgICB0cmFjZV9wYXJzZSAgICAgPSAxIDw8IDEsCi0gICAgdHJhY2VfcmVzb3VyY2UgID0gMSA8PCAyLAotICAgIHRyYWNlX3NldHMgICAgICA9IDEgPDwgMywKLSAgICB0cmFjZV9iaXRzZXRzICAgPSAxIDw8IDQsCi0gICAgdHJhY2VfdG9vbHMgICAgID0gMSA8PCA1LAotICAgIHRyYWNlX2F1dG9tYXRvbiA9IDEgPDwgNiwKLSAgICB0cmFjZV9ncmFtbWFyICAgPSAxIDw8IDcsCi0gICAgdHJhY2VfdGltZSAgICAgID0gMSA8PCA4LAotICAgIHRyYWNlX3NrZWxldG9uICA9IDEgPDwgOSwKLSAgICB0cmFjZV9tNCAgICAgICAgPSAxIDw8IDEwLAotICAgIHRyYWNlX2FsbCAgICAgICA9IH4wCi0gIH07Ci1leHRlcm4gaW50IHRyYWNlX2ZsYWc7CiAKLS8qIC0tcmVwb3J0LiAgKi8KKy8qIC0tbGFuZ3VhZ2UuICAqLworc3RydWN0IGJpc29uX2xhbmd1YWdlCit7CisgIGNoYXIgbGFuZ3VhZ2Vbc2l6ZW9mICJKYXZhIl07CisgIGNoYXIgc2tlbGV0b25bc2l6ZW9mICJqYXZhLXNrZWwubTQiXTsKKyAgY2hhciBzcmNfZXh0ZW5zaW9uW3NpemVvZiAiLmphdmEiXTsKKyAgY2hhciBoZWFkZXJfZXh0ZW5zaW9uW3NpemVvZiAiLmphdmEiXTsKKyAgYm9vbCBhZGRfdGFiOworfTsKKworZXh0ZXJuIGludCBsYW5ndWFnZV9wcmlvOworZXh0ZXJuIHN0cnVjdCBiaXNvbl9sYW5ndWFnZSBjb25zdCAqbGFuZ3VhZ2U7CisKKy8qLS0tLS0tLS0tLS0uCit8IC0tcmVwb3J0LiAgfAorYC0tLS0tLS0tLS0tKi8KKwogZW51bSByZXBvcnQKICAgewogICAgIHJlcG9ydF9ub25lICAgICAgICAgICAgID0gMCwKICAgICByZXBvcnRfc3RhdGVzICAgICAgICAgICA9IDEgPDwgMCwKICAgICByZXBvcnRfaXRlbXNldHMgICAgICAgICA9IDEgPDwgMSwKLSAgICByZXBvcnRfbG9va19haGVhZF90b2tlbnM9IDEgPDwgMiwKKyAgICByZXBvcnRfbG9va2FoZWFkX3Rva2VucyA9IDEgPDwgMiwKICAgICByZXBvcnRfc29sdmVkX2NvbmZsaWN0cyA9IDEgPDwgMywKICAgICByZXBvcnRfYWxsICAgICAgICAgICAgICA9IH4wCiAgIH07CisvKiogV2hhdCBhcHBlYXJzIGluIHRoZSAqLm91dHB1dCBmaWxlLiAgKi8KIGV4dGVybiBpbnQgcmVwb3J0X2ZsYWc7CiAKKy8qLS0tLS0tLS0tLS4KK3wgLS10cmFjZS4gIHwKK2AtLS0tLS0tLS0tKi8KK2VudW0gdHJhY2UKKyAgeworICAgIHRyYWNlX25vbmUgICAgICA9IDAsICAgICAgIC8qKjwgTm8gdHJhY2VzLiAqLworICAgIHRyYWNlX3NjYW4gICAgICA9IDEgPDwgMCwgIC8qKjwgR3JhbW1hciBzY2FubmVyIHRyYWNlcy4gKi8KKyAgICB0cmFjZV9wYXJzZSAgICAgPSAxIDw8IDEsICAvKio8IEdyYW1tYXIgcGFyc2VyIHRyYWNlcy4gKi8KKyAgICB0cmFjZV9yZXNvdXJjZSAgPSAxIDw8IDIsICAvKio8IE1lbW9yeSBhbGxvY2F0aW9uLiAqLworICAgIHRyYWNlX3NldHMgICAgICA9IDEgPDwgMywgIC8qKjwgR3JhbW1hciBzZXRzOiBmaXJzdHMsIG51bGxhYmxlIGV0Yy4gKi8KKyAgICB0cmFjZV9iaXRzZXRzICAgPSAxIDw8IDQsICAvKio8IFVzZSBvZiBiaXRzZXRzLiAqLworICAgIHRyYWNlX3Rvb2xzICAgICA9IDEgPDwgNSwgIC8qKjwgbTQgaW52b2NhdGlvbi4gKi8KKyAgICB0cmFjZV9hdXRvbWF0b24gPSAxIDw8IDYsICAvKio8IENvbnN0cnVjdGlvbiBvZiB0aGUgYXV0b21hdG9uLiAqLworICAgIHRyYWNlX2dyYW1tYXIgICA9IDEgPDwgNywgIC8qKjwgUmVhZGluZywgcmVkdWNpbmcgdGhlIGdyYW1tYXIuICovCisgICAgdHJhY2VfdGltZSAgICAgID0gMSA8PCA4LCAgLyoqPCBUaW1lIGNvbnN1bXB0aW9uLiAqLworICAgIHRyYWNlX3NrZWxldG9uICA9IDEgPDwgOSwgIC8qKjwgU2tlbGV0b24gcG9zdHByb2Nlc3NpbmcuICovCisgICAgdHJhY2VfbTQgICAgICAgID0gMSA8PCAxMCwgLyoqPCBNNCB0cmFjZXMuICovCisgICAgdHJhY2VfbXVzY2xlcyAgID0gMSA8PCAxMSwgLyoqPCBNNCBkZWZpbml0aW9ucyBvZiB0aGUgbXVzY2xlcy4gKi8KKyAgICB0cmFjZV9pZWxyICAgICAgPSAxIDw8IDEyLCAvKio8IElFTFIgY29udmVyc2lvbi4gKi8KKyAgICB0cmFjZV9hbGwgICAgICAgPSB+MCAgICAgICAvKio8IEFsbCBvZiB0aGUgYWJvdmUuICAqLworICB9OworLyoqIFdoYXQgZGVidWcgaXRlbXMgYmlzb24gZGlzcGxheXMgZHVyaW5nIGl0cyBydW4uICAqLworZXh0ZXJuIGludCB0cmFjZV9mbGFnOworCisvKi0tLS0tLS0tLS0tLS0uCit8IC0td2FybmluZ3MuICB8CitgLS0tLS0tLS0tLS0tLSovCisKK2VudW0gd2FybmluZ3MKKyAgeworICAgIHdhcm5pbmdzX25vbmUgICAgICAgICAgICAgPSAwLCAgICAgIC8qKjwgSXNzdWUgbm8gd2FybmluZ3MuICAqLworICAgIHdhcm5pbmdzX2Vycm9yICAgICAgICAgICAgPSAxIDw8IDAsIC8qKjwgV2FybmluZ3MgYXJlIHRyZWF0ZWQgYXMgZXJyb3JzLiAgKi8KKyAgICB3YXJuaW5nc19taWRydWxlX3ZhbHVlcyAgID0gMSA8PCAxLCAvKio8IFVuc2V0IG9yIHVudXNlZCBtaWRydWxlIHZhbHVlcy4gICovCisgICAgd2FybmluZ3NfeWFjYyAgICAgICAgICAgICA9IDEgPDwgMiwgLyoqPCBQT1NJWE1FLiAgKi8KKyAgICB3YXJuaW5nc19jb25mbGljdHNfc3IgICAgID0gMSA8PCAzLCAvKio8IFMvUiBjb25mbGljdHMuICAqLworICAgIHdhcm5pbmdzX2NvbmZsaWN0c19yciAgICAgPSAxIDw8IDQsIC8qKjwgUi9SIGNvbmZsaWN0cy4gICovCisgICAgd2FybmluZ3Nfb3RoZXIgICAgICAgICAgICA9IDEgPDwgNSwgLyoqPCBBbGwgb3RoZXIgd2FybmluZ3MuICAqLworICAgIHdhcm5pbmdzX2FsbCAgICAgICAgICAgICAgPSB+d2FybmluZ3NfZXJyb3IgLyoqPCBBbGwgYWJvdmUgd2FybmluZ3MuICAqLworICB9OworLyoqIFdoYXQgd2FybmluZ3MgYXJlIGlzc3VlZC4gICovCitleHRlcm4gaW50IHdhcm5pbmdzX2ZsYWc7CisKKy8qLS0tLS0tLS0tLS0tLS4KK3wgLS1mZWF0dXJlcy4gIHwKK2AtLS0tLS0tLS0tLS0tKi8KKworZW51bSBmZWF0dXJlCisgIHsKKyAgICBmZWF0dXJlX25vbmUgID0gMCwgICAgICAgICAvKio8IE5vIGFkZGl0aW9uYWwgZmVhdHVyZS4gICovCisgICAgZmVhdHVyZV9jYXJldCA9IDEgPDwgMCwgICAgLyoqPCBFbmhhbmNlIHRoZSBvdXRwdXQgb2YgZXJyb3JzIHdpdGggY2FyZXRzLiAgKi8KKyAgICBmZWF0dXJlX2FsbCAgID0gfjAgICAgICAgICAvKio8IEFsbCBhYm92ZSBmZWF0dXJlcy4gICovCisgIH07CisvKiogV2hhdCBhZGRpdGlvbmFsIGZlYXR1cmVzIHRvIHVzZS4gICovCitleHRlcm4gaW50IGZlYXR1cmVfZmxhZzsKKworLyoqIFByb2Nlc3MgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCisgKgorICogIFxwYXJhbSBhcmdjICAgc2l6ZSBvZiBcYSBhcmd2CisgKiAgXHBhcmFtIGFyZ3YgICBsaXN0IG9mIGFyZ3VtZW50cy4KKyAqLwogdm9pZCBnZXRhcmdzIChpbnQgYXJnYywgY2hhciAqYXJndltdKTsKIAorLyogVXNlZCBieSBwYXJzZS1ncmFtLnkuICAqLwordm9pZCBsYW5ndWFnZV9hcmdtYXRjaCAoY2hhciBjb25zdCAqYXJnLCBpbnQgcHJpbywgbG9jYXRpb24gbG9jKTsKK3ZvaWQgc2tlbGV0b25fYXJnIChjb25zdCBjaGFyICphcmcsIGludCBwcmlvLCBsb2NhdGlvbiBsb2MpOworCisvKiogSW4gdGhlIHN0cmluZyBcYyBzLCByZXBsYWNlIGFsbCBjaGFyYWN0ZXJzIFxjIGZyb20gYnkgXGMgdG8uICAqLwordm9pZCB0ciAoY2hhciAqcywgY2hhciBmcm9tLCBjaGFyIHRvKTsKKwogI2VuZGlmIC8qICFHRVRBUkdTX0hfICovCmRpZmYgLS1naXQgYS9zcmMvZ3JhbS5jIGIvc3JjL2dyYW0uYwppbmRleCAyODY2NmIwLi41NzMwZTU5IDEwMDY0NAotLS0gYS9zcmMvZ3JhbS5jCisrKyBiL3NyYy9ncmFtLmMKQEAgLTEsMzEgKzEsMzAgQEAKIC8qIEFsbG9jYXRlIGlucHV0IGdyYW1tYXIgdmFyaWFibGVzIGZvciBCaXNvbi4KIAotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg2LCAxOTg5LCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1LCAyMDA2IEZyZWUKLSAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4NiwgMTk4OSwgMjAwMS0yMDAzLCAyMDA1LTIwMTIgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLgogCiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KIAotICAgQmlzb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCi0gICBCaXNvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggQmlzb247IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogI2luY2x1ZGUgPGNvbmZpZy5oPgogI2luY2x1ZGUgInN5c3RlbS5oIgogCi0jaW5jbHVkZSA8cXVvdGVhcmcuaD4KLQorI2luY2x1ZGUgImNvbXBsYWluLmgiCisjaW5jbHVkZSAiZ2V0YXJncy5oIgogI2luY2x1ZGUgImdyYW0uaCIKKyNpbmNsdWRlICJwcmludC14bWwuaCIKICNpbmNsdWRlICJyZWFkZXIuaCIKICNpbmNsdWRlICJyZWR1Y2UuaCIKICNpbmNsdWRlICJzeW10YWIuaCIKQEAgLTQ3LDQ2ICs0NiwyNCBAQAogCiBpbnQgbWF4X3VzZXJfdG9rZW5fbnVtYmVyID0gMjU2OwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBSZXR1cm4gdHJ1ZSBJRkYgdGhlIHJ1bGUgaGFzIGEgYG51bWJlcicgc21hbGxlciB0aGFuIE5SVUxFUy4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KIGJvb2wKLXJ1bGVfdXNlZnVsX3AgKHJ1bGUgKnIpCitydWxlX3VzZWZ1bF9pbl9ncmFtbWFyX3AgKHJ1bGUgKnIpCiB7CiAgIHJldHVybiByLT5udW1iZXIgPCBucnVsZXM7CiB9CiAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBSZXR1cm4gdHJ1ZSBJRkYgdGhlIHJ1bGUgaGFzIGEgYG51bWJlcicgaGlnaGVyIHRoYW4gTlJVTEVTLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiBib29sCi1ydWxlX3VzZWxlc3NfcCAocnVsZSAqcikKK3J1bGVfdXNlbGVzc19pbl9ncmFtbWFyX3AgKHJ1bGUgKnIpCiB7Ci0gIHJldHVybiAhcnVsZV91c2VmdWxfcCAocik7CisgIHJldHVybiAhcnVsZV91c2VmdWxfaW5fZ3JhbW1hcl9wIChyKTsKIH0KIAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBSZXR1cm4gdHJ1ZSBJRkYgdGhlIHJ1bGUgaXMgbm90IGZsYWdnZWQgYXMgdXNlZnVsICphbmQqIGlzIHVzZWZ1bC4gIHwKLXwgSW4gb3RoZXIgd29yZHMsIGl0IHdhcyBkaXNjYXJkZWQgYmVjYXVzZSBvZiBjb25mbGljdHMuICAgICAgICAgICAgICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiBib29sCi1ydWxlX25ldmVyX3JlZHVjZWRfcCAocnVsZSAqcikKK3J1bGVfdXNlbGVzc19pbl9wYXJzZXJfcCAocnVsZSAqcikKIHsKLSAgcmV0dXJuICFyLT51c2VmdWwgJiYgcnVsZV91c2VmdWxfcCAocik7CisgIHJldHVybiAhci0+dXNlZnVsICYmIHJ1bGVfdXNlZnVsX2luX2dyYW1tYXJfcCAocik7CiB9CiAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBQcmludCB0aGlzIFJVTEUncyBudW1iZXIgYW5kIGxocyBvbiBPVVQuICBJZiBhIFBSRVZJT1VTX0xIUyB3YXMgfAotfCBhbHJlYWR5IGRpc3BsYXllZCAoYnkgYSBwcmV2aW91cyBjYWxsIGZvciBhbm90aGVyIHJ1bGUpLCBhdm9pZCAgfAotfCB1c2VsZXNzIHJlcGV0aXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiB2b2lkCiBydWxlX2xoc19wcmludCAocnVsZSAqciwgc3ltYm9sICpwcmV2aW91c19saHMsIEZJTEUgKm91dCkKIHsKQEAgLTEwNCwxMCArODEsMTEgQEAKICAgICB9CiB9CiAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUmV0dXJuIHRoZSBudW1iZXIgb2Ygc3ltYm9scyBpbiBSSFMuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZAorcnVsZV9saHNfcHJpbnRfeG1sIChydWxlICpyLCBGSUxFICpvdXQsIGludCBsZXZlbCkKK3sKKyAgeG1sX3ByaW50ZiAob3V0LCBsZXZlbCwgIjxsaHM+JXM8L2xocz4iLCByLT5saHMtPnRhZyk7Cit9CiAKIGludAogcnVsZV9yaHNfbGVuZ3RoIChydWxlICpyKQpAQCAtMTE5LDExICs5Nyw2IEBACiAgIHJldHVybiByZXM7CiB9CiAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBQcmludCB0aGlzIHJ1bGUncyBSSFMgb24gT1VULiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiB2b2lkCiBydWxlX3Joc19wcmludCAocnVsZSAqciwgRklMRSAqb3V0KQogewpAQCAtMTQwLDEwICsxMTMsMjUgQEAKICAgICB9CiB9CiAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBQcmludCB0aGlzIHJ1bGUgb24gT1VULiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQKK3J1bGVfcmhzX3ByaW50X3htbCAocnVsZSAqciwgRklMRSAqb3V0LCBpbnQgbGV2ZWwpCit7CisgIGlmICgqci0+cmhzID49IDApCisgICAgeworICAgICAgaXRlbV9udW1iZXIgKnJwOworICAgICAgeG1sX3B1dHMgKG91dCwgbGV2ZWwsICI8cmhzPiIpOworICAgICAgZm9yIChycCA9IHItPnJoczsgKnJwID49IDA7IHJwKyspCisJeG1sX3ByaW50ZiAob3V0LCBsZXZlbCArIDEsICI8c3ltYm9sPiVzPC9zeW1ib2w+IiwKKwkJICAgIHhtbF9lc2NhcGUgKHN5bWJvbHNbKnJwXS0+dGFnKSk7CisgICAgICB4bWxfcHV0cyAob3V0LCBsZXZlbCwgIjwvcmhzPiIpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHhtbF9wdXRzIChvdXQsIGxldmVsLCAiPHJocz4iKTsKKyAgICAgIHhtbF9wdXRzIChvdXQsIGxldmVsICsgMSwgIjxlbXB0eS8+Iik7CisgICAgICB4bWxfcHV0cyAob3V0LCBsZXZlbCwgIjwvcmhzPiIpOworICAgIH0KK30KIAogdm9pZAogcnVsZV9wcmludCAocnVsZSAqciwgRklMRSAqb3V0KQpAQCAtMTUyLDExICsxNDAsNiBAQAogICBydWxlX3Joc19wcmludCAociwgb3V0KTsKIH0KIAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgRHVtcCBSSVRFTSBmb3IgdHJhY2VzLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KIHZvaWQKIHJpdGVtX3ByaW50IChGSUxFICpvdXQpCiB7CkBAIC0xNzAsMTEgKzE1Myw2IEBACiAgIGZwdXRzICgiXG5cbiIsIG91dCk7CiB9CiAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgbG9uZ2VzdCBydWxlIFJIUy4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiBzaXplX3QKIHJpdGVtX2xvbmdlc3RfcmhzICh2b2lkKQogewpAQCAtMTkxLDExICsxNjksNiBAQAogICByZXR1cm4gbWF4OwogfQogCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFByaW50IHRoZSBncmFtbWFyJ3MgcnVsZXMgdGhhdCBtYXRjaCBGSUxURVIgb24gT1VUIHVuZGVyIFRJVExFLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQogdm9pZAogZ3JhbW1hcl9ydWxlc19wYXJ0aWFsX3ByaW50IChGSUxFICpvdXQsIGNvbnN0IGNoYXIgKnRpdGxlLAogCQkJICAgICBydWxlX2ZpbHRlciBmaWx0ZXIpCkBAIC0yMjIsMjEgKzE5NSw0OCBAQAogICAgIGZwdXRzICgiXG5cbiIsIG91dCk7CiB9CiAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFByaW50IHRoZSBncmFtbWFyJ3MgdXNlZnVsIHJ1bGVzIG9uIE9VVC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiB2b2lkCiBncmFtbWFyX3J1bGVzX3ByaW50IChGSUxFICpvdXQpCiB7Ci0gIGdyYW1tYXJfcnVsZXNfcGFydGlhbF9wcmludCAob3V0LCBfKCJHcmFtbWFyIiksIHJ1bGVfdXNlZnVsX3ApOworICBncmFtbWFyX3J1bGVzX3BhcnRpYWxfcHJpbnQgKG91dCwgXygiR3JhbW1hciIpLCBydWxlX3VzZWZ1bF9pbl9ncmFtbWFyX3ApOwogfQogCit2b2lkCitncmFtbWFyX3J1bGVzX3ByaW50X3htbCAoRklMRSAqb3V0LCBpbnQgbGV2ZWwpCit7CisgIHJ1bGVfbnVtYmVyIHI7CisgIGJvb2wgZmlyc3QgPSB0cnVlOwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IER1bXAgdGhlIGdyYW1tYXIuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgIGZvciAociA9IDA7IHIgPCBucnVsZXMgKyBudXNlbGVzc19wcm9kdWN0aW9uczsgcisrKQorICAgIHsKKyAgICAgIGlmIChmaXJzdCkKKwl4bWxfcHV0cyAob3V0LCBsZXZlbCArIDEsICI8cnVsZXM+Iik7CisgICAgICBmaXJzdCA9IGZhbHNlOworICAgICAgeworICAgICAgICBjaGFyIGNvbnN0ICp1c2VmdWxuZXNzOworICAgICAgICBpZiAocnVsZV91c2VsZXNzX2luX2dyYW1tYXJfcCAoJnJ1bGVzW3JdKSkKKyAgICAgICAgICB1c2VmdWxuZXNzID0gInVzZWxlc3MtaW4tZ3JhbW1hciI7CisgICAgICAgIGVsc2UgaWYgKHJ1bGVfdXNlbGVzc19pbl9wYXJzZXJfcCAoJnJ1bGVzW3JdKSkKKyAgICAgICAgICB1c2VmdWxuZXNzID0gInVzZWxlc3MtaW4tcGFyc2VyIjsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHVzZWZ1bG5lc3MgPSAidXNlZnVsIjsKKyAgICAgICAgeG1sX2luZGVudCAob3V0LCBsZXZlbCArIDIpOworICAgICAgICBmcHJpbnRmIChvdXQsICI8cnVsZSBudW1iZXI9XCIlZFwiIHVzZWZ1bG5lc3M9XCIlc1wiIiwKKyAgICAgICAgICAgICAgICAgcnVsZXNbcl0ubnVtYmVyLCB1c2VmdWxuZXNzKTsKKyAgICAgICAgaWYgKHJ1bGVzW3JdLnByZWNzeW0pCisgICAgICAgICAgZnByaW50ZiAob3V0LCAiIHBlcmNlbnRfcHJlYz1cIiVzXCIiLAorICAgICAgICAgICAgICAgICAgIHhtbF9lc2NhcGUgKHJ1bGVzW3JdLnByZWNzeW0tPnRhZykpOworICAgICAgICBmcHV0cyAoIj5cbiIsIG91dCk7CisgICAgICB9CisgICAgICBydWxlX2xoc19wcmludF94bWwgKCZydWxlc1tyXSwgb3V0LCBsZXZlbCArIDMpOworICAgICAgcnVsZV9yaHNfcHJpbnRfeG1sICgmcnVsZXNbcl0sIG91dCwgbGV2ZWwgKyAzKTsKKyAgICAgIHhtbF9wdXRzIChvdXQsIGxldmVsICsgMiwgIjwvcnVsZT4iKTsKKyAgICB9CisgIGlmICghZmlyc3QpCisgICAgeG1sX3B1dHMgKG91dCwgbGV2ZWwgKyAxLCAiPC9ydWxlcz4iKTsKKyAgZWxzZQorICAgeG1sX3B1dHMgKG91dCwgbGV2ZWwgKyAxLCAiPHJ1bGVzLz4iKTsKK30KIAogdm9pZAogZ3JhbW1hcl9kdW1wIChGSUxFICpvdXQsIGNvbnN0IGNoYXIgKnRpdGxlKQpAQCAtMzAxLDI0ICszMDEsMjQgQEAKICAgZnByaW50ZiAob3V0LCAiXG5cbiIpOwogfQogCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBSZXBvcnQgb24gU1RERVJSIHRoZSBydWxlcyB0aGF0IGFyZSBub3QgZmxhZ2dlZCBVU0VGVUwsIHVzaW5nIHRoZSB8Ci18IE1FU1NBR0UgKHdoaWNoIGNhbiBiZSBgdXNlbGVzcyBydWxlJyB3aGVuIGludm9rZWQgYWZ0ZXIgZ3JhbW1hciAgIHwKLXwgcmVkdWN0aW9uLCBvciBgbmV2ZXIgcmVkdWNlZCcgYWZ0ZXIgY29uZmxpY3RzIHdlcmUgdGFrZW4gaW50byAgICAgfAotfCBhY2NvdW50KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQogdm9pZAotZ3JhbW1hcl9ydWxlc19uZXZlcl9yZWR1Y2VkX3JlcG9ydCAoY29uc3QgY2hhciAqbWVzc2FnZSkKK2dyYW1tYXJfcnVsZXNfdXNlbGVzc19yZXBvcnQgKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CiAgIHJ1bGVfbnVtYmVyIHI7CiAgIGZvciAociA9IDA7IHIgPCBucnVsZXMgOyArK3IpCiAgICAgaWYgKCFydWxlc1tyXS51c2VmdWwpCiAgICAgICB7Ci0JbG9jYXRpb25fcHJpbnQgKHN0ZGVyciwgcnVsZXNbcl0ubG9jYXRpb24pOwotCWZwcmludGYgKHN0ZGVyciwgIjogJXM6ICVzOiAiLCBfKCJ3YXJuaW5nIiksIG1lc3NhZ2UpOwotCXJ1bGVfcHJpbnQgKCZydWxlc1tyXSwgc3RkZXJyKTsKKyAgICAgICAgaWYgKGZlYXR1cmVfZmxhZyAmIGZlYXR1cmVfY2FyZXQpCisgICAgICAgICAgd2Fybl9hdCAocnVsZXNbcl0ubG9jYXRpb24sICIlcyIsIG1lc3NhZ2UpOworICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgd2Fybl9hdCAocnVsZXNbcl0ubG9jYXRpb24sICIlczogIiwgbWVzc2FnZSk7CisgICAgICAgICAgICBpZiAod2FybmluZ3NfZmxhZyAmIHdhcm5pbmdzX290aGVyKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcnVsZV9wcmludCAoJnJ1bGVzW3JdLCBzdGRlcnIpOworICAgICAgICAgICAgICAgIGZmbHVzaCAoc3RkZXJyKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KICAgICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2dyYW0uaCBiL3NyYy9ncmFtLmgKaW5kZXggYjhmMzE2YS4uM2Y3NWRkOCAxMDA2NDQKLS0tIGEvc3JjL2dyYW0uaAorKysgYi9zcmMvZ3JhbS5oCkBAIC0xLDI0ICsxLDIyIEBACiAvKiBEYXRhIGRlZmluaXRpb25zIGZvciBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBCaXNvbidzIGlucHV0LgogCi0gICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODYsIDE5ODksIDE5OTIsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUKLSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg2LCAxOTg5LCAxOTkyLCAyMDAxLTIwMDcsIDIwMDktMjAxMiBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgogCi0gICBCaXNvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLSAgIEJpc29uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCBCaXNvbjsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAjaWZuZGVmIEdSQU1fSF8KICMgZGVmaW5lIEdSQU1fSF8KQEAgLTExNSw2ICsxMTMsNyBAQAogZXh0ZXJuIGludCBudmFyczsKIAogdHlwZWRlZiBpbnQgaXRlbV9udW1iZXI7CisjZGVmaW5lIElURU1fTlVNQkVSX01BWCBJTlRfTUFYCiBleHRlcm4gaXRlbV9udW1iZXIgKnJpdGVtOwogZXh0ZXJuIHVuc2lnbmVkIGludCBucml0ZW1zOwogCkBAIC0xNDYsNiArMTQ1LDcgQEAKIAogLyogUnVsZSBudW1iZXJzLiAgKi8KIHR5cGVkZWYgaW50IHJ1bGVfbnVtYmVyOworI2RlZmluZSBSVUxFX05VTUJFUl9NQVggSU5UX01BWAogZXh0ZXJuIHJ1bGVfbnVtYmVyIG5ydWxlczsKIAogc3RhdGljIGlubGluZSBpdGVtX251bWJlcgpAQCAtMjA0LDIwICsyMDQsMjMgQEAKIC8qIEEgZnVuY3Rpb24gdGhhdCBzZWxlY3RzIGEgcnVsZS4gICovCiB0eXBlZGVmIGJvb2wgKCpydWxlX2ZpbHRlcikgKHJ1bGUgKik7CiAKLS8qIFJldHVybiB0cnVlIElGRiB0aGUgcnVsZSBoYXMgYSBgbnVtYmVyJyBzbWFsbGVyIHRoYW4gTlJVTEVTLiAgKi8KLWJvb2wgcnVsZV91c2VmdWxfcCAocnVsZSAqcik7CisvKiBSZXR1cm4gdHJ1ZSBJRkYgdGhlIHJ1bGUgaGFzIGEgYG51bWJlcicgc21hbGxlciB0aGFuIE5SVUxFUy4gIFRoYXQgaXMsIGl0IGlzCisgICB1c2VmdWwgaW4gdGhlIGdyYW1tYXIuICAqLworYm9vbCBydWxlX3VzZWZ1bF9pbl9ncmFtbWFyX3AgKHJ1bGUgKnIpOwogCi0vKiBSZXR1cm4gdHJ1ZSBJRkYgdGhlIHJ1bGUgaGFzIGEgYG51bWJlcicgaGlnaGVyIHRoYW4gTlJVTEVTLiAgKi8KLWJvb2wgcnVsZV91c2VsZXNzX3AgKHJ1bGUgKnIpOworLyogUmV0dXJuIHRydWUgSUZGIHRoZSBydWxlIGhhcyBhIGBudW1iZXInIGhpZ2hlciB0aGFuIE5SVUxFUy4gIFRoYXQgaXMsIGl0IGlzCisgICB1c2VsZXNzIGluIHRoZSBncmFtbWFyLiAgKi8KK2Jvb2wgcnVsZV91c2VsZXNzX2luX2dyYW1tYXJfcCAocnVsZSAqcik7CiAKLS8qIFJldHVybiB0cnVlIElGRiB0aGUgcnVsZSBpcyBub3QgZmxhZ2dlZCBhcyB1c2VmdWwgKmFuZCogaXMgdXNlZnVsLgotICAgSW4gb3RoZXIgd29yZHMsIGl0IHdhcyBkaXNjYXJkZWQgYmVjYXVzZSBvZiBjb25mbGljdHMuICAqLwotYm9vbCBydWxlX25ldmVyX3JlZHVjZWRfcCAocnVsZSAqcik7CisvKiBSZXR1cm4gdHJ1ZSBJRkYgdGhlIHJ1bGUgaXMgbm90IGZsYWdnZWQgYXMgdXNlZnVsIGJ1dCBpcyB1c2VmdWwgaW4gdGhlCisgICBncmFtbWFyLiAgSW4gb3RoZXIgd29yZHMsIGl0IHdhcyBkaXNjYXJkZWQgYmVjYXVzZSBvZiBjb25mbGljdHMuICAqLworYm9vbCBydWxlX3VzZWxlc3NfaW5fcGFyc2VyX3AgKHJ1bGUgKnIpOwogCiAvKiBQcmludCB0aGlzIHJ1bGUncyBudW1iZXIgYW5kIGxocyBvbiBPVVQuICBJZiBhIFBSRVZJT1VTX0xIUyB3YXMKICAgIGFscmVhZHkgZGlzcGxheWVkIChieSBhIHByZXZpb3VzIGNhbGwgZm9yIGFub3RoZXIgcnVsZSksIGF2b2lkCiAgICB1c2VsZXNzIHJlcGV0aXRpb25zLiAgKi8KIHZvaWQgcnVsZV9saHNfcHJpbnQgKHJ1bGUgKnIsIHN5bWJvbCAqcHJldmlvdXNfbGhzLCBGSUxFICpvdXQpOwordm9pZCBydWxlX2xoc19wcmludF94bWwgKHJ1bGUgKnIsIEZJTEUgKm91dCwgaW50IGxldmVsKTsKIAogLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIFJIUy4gICovCiBpbnQgcnVsZV9yaHNfbGVuZ3RoIChydWxlICpyKTsKQEAgLTI0OCwyMiArMjUxLDIzIEBACiAvKiBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIGxvbmdlc3QgcnVsZSBSSFMuICAqLwogc2l6ZV90IHJpdGVtX2xvbmdlc3RfcmhzICh2b2lkKTsKIAotLyogUHJpbnQgdGhlIGdyYW1tYXIncyBydWxlcyBudW1iZXJzIGZyb20gQkVHSU4gKGluY2x1c2l2ZSkgdG8gRU5ECi0gICAoZXhjbHVzaXZlKSBvbiBPVVQgdW5kZXIgVElUTEUuICAqLworLyogUHJpbnQgdGhlIGdyYW1tYXIncyBydWxlcyB0aGF0IG1hdGNoIEZJTFRFUiBvbiBPVVQgdW5kZXIgVElUTEUuICAqLwogdm9pZCBncmFtbWFyX3J1bGVzX3BhcnRpYWxfcHJpbnQgKEZJTEUgKm91dCwgY29uc3QgY2hhciAqdGl0bGUsCiAJCQkJICBydWxlX2ZpbHRlciBmaWx0ZXIpOwogCi0vKiBQcmludCB0aGUgZ3JhbW1hcidzIHJ1bGVzIG9uIE9VVC4gICovCisvKiBQcmludCB0aGUgZ3JhbW1hcidzIHVzZWZ1bCBydWxlcyBvbiBPVVQuICAqLwogdm9pZCBncmFtbWFyX3J1bGVzX3ByaW50IChGSUxFICpvdXQpOworLyogUHJpbnQgYWxsIG9mIHRoZSBncmFtbWFyJ3MgcnVsZXMgd2l0aCBhICJ1c2VmdWxuZXNzIiBhdHRyaWJ1dGUuICAqLwordm9pZCBncmFtbWFyX3J1bGVzX3ByaW50X3htbCAoRklMRSAqb3V0LCBpbnQgbGV2ZWwpOwogCiAvKiBEdW1wIHRoZSBncmFtbWFyLiAqLwogdm9pZCBncmFtbWFyX2R1bXAgKEZJTEUgKm91dCwgY29uc3QgY2hhciAqdGl0bGUpOwogCiAvKiBSZXBvcnQgb24gU1RERVJSIHRoZSBydWxlcyB0aGF0IGFyZSBub3QgZmxhZ2dlZCBVU0VGVUwsIHVzaW5nIHRoZQotICAgTUVTU0FHRSAod2hpY2ggY2FuIGJlIGB1c2VsZXNzIHJ1bGUnIHdoZW4gaW52b2tlZCBhZnRlciBncmFtbWFyCi0gICByZWR1Y3Rpb24sIG9yIGBuZXZlciByZWR1Y2VkJyBhZnRlciBjb25mbGljdHMgd2VyZSB0YWtlbiBpbnRvCi0gICBhY2NvdW50KS4gICovCi12b2lkIGdyYW1tYXJfcnVsZXNfbmV2ZXJfcmVkdWNlZF9yZXBvcnQgKGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworICAgTUVTU0FHRSAod2hpY2ggY2FuIGJlIGBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcicgd2hlbiBpbnZva2VkIGFmdGVyIGdyYW1tYXIKKyAgIHJlZHVjdGlvbiwgb3IgYHJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cycgYWZ0ZXIgY29uZmxpY3RzCisgICB3ZXJlIHRha2VuIGludG8gYWNjb3VudCkuICAqLwordm9pZCBncmFtbWFyX3J1bGVzX3VzZWxlc3NfcmVwb3J0IChjb25zdCBjaGFyICptZXNzYWdlKTsKIAogLyogRnJlZSB0aGUgcGFja2VkIGdyYW1tYXIuICovCiB2b2lkIGdyYW1tYXJfZnJlZSAodm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvZ3JhcGh2aXouYyBiL3NyYy9ncmFwaHZpei5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYTVmNmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZ3JhcGh2aXouYwpAQCAtMCwwICsxLDIxOCBAQAorLyogT3V0cHV0IEdyYXBodml6IHNwZWNpZmljYXRpb24gb2YgYSBzdGF0ZSBtYWNoaW5lIGdlbmVyYXRlZCBieSBCaXNvbi4KKworICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQgYW5kIFNhdHlhIEtpcmFuIFBvcHVyaS4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlICJzeXN0ZW0uaCIKKworI2luY2x1ZGUgPHF1b3RlYXJnLmg+CisKKyNpbmNsdWRlICJmaWxlcy5oIgorI2luY2x1ZGUgImdyYW0uaCIKKyNpbmNsdWRlICJncmFwaHZpei5oIgorI2luY2x1ZGUgInRhYmxlcy5oIgorCisvKiBSZXR1cm4gYW4gdW5hbWJpZ3VvdXMgcHJpbnRhYmxlIHJlcHJlc2VudGF0aW9uIGZvciBOQU1FLCBzdWl0YWJsZQorICAgZm9yIEMgc3RyaW5ncy4gIFVzZSBzbG90IDIgc2luY2UgdGhlIHVzZXIgbWF5IHVzZSBzbG90cyAwIGFuZCAxLiAgKi8KKworc3RhdGljIGNoYXIgKgorcXVvdGUgKGNoYXIgY29uc3QgKm5hbWUpCit7CisgIHJldHVybiBxdW90ZWFyZ19uX3N0eWxlICgyLCBjX3F1b3Rpbmdfc3R5bGUsIG5hbWUpOworfQorCit2b2lkCitzdGFydF9ncmFwaCAoRklMRSAqZm91dCkKK3sKKyAgZnByaW50ZiAoZm91dCwKKyAgICAgICAgICAgXygiLy8gR2VuZXJhdGVkIGJ5ICVzLlxuIgorICAgICAgICAgICAgICIvLyBSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorICAgICAgICAgICAgICIvLyBIb21lIHBhZ2U6IDwlcz4uXG4iCisgICAgICAgICAgICAgIlxuIiksCisgICAgICAgICAgIFBBQ0tBR0VfU1RSSU5HLAorICAgICAgICAgICBQQUNLQUdFX0JVR1JFUE9SVCwKKyAgICAgICAgICAgUEFDS0FHRV9VUkwpOworICBmcHJpbnRmIChmb3V0LAorICAgICAgICAgICAiZGlncmFwaCAlc1xuIgorICAgICAgICAgICAie1xuIiwKKyAgICAgICAgICAgcXVvdGUgKGdyYW1tYXJfZmlsZSkpOworICBmcHJpbnRmIChmb3V0LAorICAgICAgICAgICAiICBub2RlIFtmb250bmFtZSA9IGNvdXJpZXIsIHNoYXBlID0gYm94LCBjb2xvcnNjaGVtZSA9IHBhaXJlZDZdXG4iCisgICAgICAgICAgICIgIGVkZ2UgW2ZvbnRuYW1lID0gY291cmllcl1cbiIKKyAgICAgICAgICAgIlxuIik7Cit9CisKK3ZvaWQKK291dHB1dF9ub2RlIChpbnQgaWQsIGNoYXIgY29uc3QgKmxhYmVsLCBGSUxFICpmb3V0KQoreworICBmcHJpbnRmIChmb3V0LCAiICAlZCBbbGFiZWw9XCIlc1wiXVxuIiwgaWQsIGxhYmVsKTsKK30KKwordm9pZAorb3V0cHV0X2VkZ2UgKGludCBzb3VyY2UsIGludCBkZXN0aW5hdGlvbiwgY2hhciBjb25zdCAqbGFiZWwsCisgICAgICAgICAgICAgY2hhciBjb25zdCAqc3R5bGUsIEZJTEUgKmZvdXQpCit7CisgIGZwcmludGYgKGZvdXQsICIgICVkIC0+ICVkIFtzdHlsZT0lcyIsIHNvdXJjZSwgZGVzdGluYXRpb24sIHN0eWxlKTsKKyAgaWYgKGxhYmVsKQorICAgIGZwcmludGYgKGZvdXQsICIgbGFiZWw9JXMiLCBxdW90ZSAobGFiZWwpKTsKKyAgZnB1dHMgKCJdXG4iLCBmb3V0KTsKK30KKworY2hhciBjb25zdCAqCitlc2NhcGUgKGNoYXIgY29uc3QgKm5hbWUpCit7CisgIGNoYXIgKnEgPSBxdW90ZSAobmFtZSk7CisgIHFbc3RybGVuIChxKSAtIDFdID0gJ1wwJzsKKyAgcmV0dXJuIHEgKyAxOworfQorCitzdGF0aWMgdm9pZAorbm9fcmVkdWNlX2JpdHNldF9pbml0IChzdGF0ZSBjb25zdCAqcywgYml0c2V0ICpub19yZWR1Y2Vfc2V0KQoreworICBpbnQgbjsKKyAgKm5vX3JlZHVjZV9zZXQgPSBiaXRzZXRfY3JlYXRlIChudG9rZW5zLCBCSVRTRVRfRklYRUQpOworICBiaXRzZXRfemVybyAoKm5vX3JlZHVjZV9zZXQpOworICBGT1JfRUFDSF9TSElGVCAocy0+dHJhbnNpdGlvbnMsIG4pCisgICAgYml0c2V0X3NldCAoKm5vX3JlZHVjZV9zZXQsIFRSQU5TSVRJT05fU1lNQk9MIChzLT50cmFuc2l0aW9ucywgbikpOworICBmb3IgKG4gPSAwOyBuIDwgcy0+ZXJycy0+bnVtOyArK24pCisgICAgaWYgKHMtPmVycnMtPnN5bWJvbHNbbl0pCisgICAgICBiaXRzZXRfc2V0ICgqbm9fcmVkdWNlX3NldCwgcy0+ZXJycy0+c3ltYm9sc1tuXS0+bnVtYmVyKTsKK30KKworc3RhdGljIHZvaWQKK2NvbmNsdWRlX3JlZCAoc3RydWN0IG9ic3RhY2sgKm91dCwgaW50IHNvdXJjZSwgcnVsZV9udW1iZXIgcnVsZW5vLAorICAgICAgICAgICAgICBib29sIGVuYWJsZWQsIGJvb2wgZmlyc3QsIEZJTEUgKmZvdXQpCit7CisgIC8qIElmIG5vIGxvb2thaGVhZCB0b2tlbnMgd2VyZSB2YWxpZCB0cmFuc2l0aW9ucywgdGhpcyByZWR1Y3Rpb24gaXMKKyAgICAgYWN0dWFsbHkgaGlkZGVuLCBzbyBjYW5jZWwgZXZlcnl0aGluZy4gKi8KKyAgaWYgKGZpcnN0KQorICAgICh2b2lkKSBvYnN0YWNrX2ZpbmlzaDAgKG91dCk7CisgIGVsc2UKKyAgICB7CisgICAgICBjaGFyIGNvbnN0ICplZCA9IGVuYWJsZWQgPyAiIiA6ICJkIjsKKyAgICAgIGNoYXIgY29uc3QgKmNvbG9yID0gZW5hYmxlZCA/IHJ1bGVubyA/ICIzIiA6ICIxIiA6ICI1IjsKKworICAgICAgLyogRmlyc3QsIGJ1aWxkIHRoZSBlZGdlJ3MgaGVhZC4gVGhlIG5hbWUgb2YgcmVkdWN0aW9uIG5vZGVzIGlzICJuUm0iLAorICAgICAgICAgd2l0aCBuIHRoZSBzb3VyY2Ugc3RhdGUgYW5kIG0gdGhlIHJ1bGUgbnVtYmVyLiBUaGlzIGlzIGJlY2F1c2Ugd2UKKyAgICAgICAgIGRvbid0IHdhbnQgYWxsIHRoZSByZWR1Y3Rpb25zIGJlYXJpbmcgYSBzYW1lIHJ1bGUgbnVtYmVyIHRvIHBvaW50IHRvCisgICAgICAgICB0aGUgc2FtZSBzdGF0ZSwgc2luY2UgdGhhdCBpcyBub3QgdGhlIGRlc2lyZWQgZm9ybWF0LiAqLworICAgICAgZnByaW50ZiAoZm91dCwgIiAgJTEkZCAtPiBcIiUxJGRSJTIkZCUzJHNcIiBbIiwKKyAgICAgICAgICAgICAgIHNvdXJjZSwgcnVsZW5vLCBlZCk7CisKKyAgICAgIC8qIChUaGUgbG9va2FoZWFkIHRva2VucyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUKKyAgICAgICAgIG9ic3RhY2ssIGluIHRoZSBjYWxsZXIgZnVuY3Rpb24uKSAqLworICAgICAgaWYgKCEgb2JzdGFja19lbXB0eV9wIChvdXQpKQorICAgICAgICB7CisgICAgICAgICAgY2hhciAqbGFiZWwgPSBvYnN0YWNrX2ZpbmlzaDAgKG91dCk7CisgICAgICAgICAgZnByaW50ZiAoZm91dCwgImxhYmVsPVwiWyVzXVwiLCAiLCBsYWJlbCk7CisgICAgICAgICAgb2JzdGFja19mcmVlIChvdXQsIGxhYmVsKTsKKyAgICAgICAgfQorCisgICAgICAvKiBUaGVuLCB0aGUgZWRnZSdzIHRhaWwuICovCisgICAgICBmcHJpbnRmIChmb3V0LCAic3R5bGU9c29saWRdXG4iKTsKKworICAgICAgLyogQnVpbGQgdGhlIGFzc29jaWF0ZWQgZGlhbW9uZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGFyZ2V0IHJ1bGUuICovCisgICAgICBmcHJpbnRmIChmb3V0LCAiIFwiJWRSJWQlc1wiIFtsYWJlbD1cIiIsCisgICAgICAgICAgICAgICBzb3VyY2UsIHJ1bGVubywgZWQpOworICAgICAgaWYgKHJ1bGVubykKKyAgICAgICAgZnByaW50ZiAoZm91dCwgIlIlZCIsIHJ1bGVubyk7CisgICAgICBlbHNlCisgICAgICAgIGZwcmludGYgKGZvdXQsICJBY2MiKTsKKworICAgICAgZnByaW50ZiAoZm91dCwgIlwiLCBmaWxsY29sb3I9JXMsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF1cbiIsCisgICAgICAgICAgICAgICBjb2xvcik7CisgICAgfQorfQorCitzdGF0aWMgYm9vbAorcHJpbnRfdG9rZW4gKHN0cnVjdCBvYnN0YWNrICpvdXQsIGJvb2wgZmlyc3QsIGNoYXIgY29uc3QgKnRvaykKK3sKKyAgY2hhciBjb25zdCAqcSA9IGVzY2FwZSAodG9rKTsKKworICBpZiAoISBmaXJzdCkKKyAgICBvYnN0YWNrX3Nncm93IChvdXQsICIsICIpOworICBvYnN0YWNrX3Nncm93IChvdXQsIHEpOworICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQKK291dHB1dF9yZWQgKHN0YXRlIGNvbnN0ICpzLCByZWR1Y3Rpb25zIGNvbnN0ICpyZWRzLCBGSUxFICpmb3V0KQoreworICBiaXRzZXQgbm9fcmVkdWNlX3NldDsKKyAgaW50IGo7CisgIGludCBzb3VyY2UgPSBzLT5udW1iZXI7CisKKyAgLyogVHdvIG9ic3RhY2tzIGFyZSBuZWVkZWQ6IG9uZSBmb3IgdGhlIGVuYWJsZWQgcmVkdWN0aW9ucywgYW5kIG9uZQorICAgICBmb3IgdGhlIGRpc2FibGVkIHJlZHVjdGlvbnMsIGJlY2F1c2UgaW4gdGhlIGVuZCB3ZSB3YW50IHR3bworICAgICBzZXBhcmF0ZSBlZGdlcywgZXZlbiB0aG91Z2ggaW4gbW9zdCBjYXNlcyBvbmx5IG9uZSB3aWxsIGFjdHVhbGx5CisgICAgIGJlIHByaW50ZWQuICovCisgIHN0cnVjdCBvYnN0YWNrIGRvdXQ7CisgIHN0cnVjdCBvYnN0YWNrIGVvdXQ7CisKKyAgbm9fcmVkdWNlX2JpdHNldF9pbml0IChzLCAmbm9fcmVkdWNlX3NldCk7CisgIG9ic3RhY2tfaW5pdCAoJmRvdXQpOworICBvYnN0YWNrX2luaXQgKCZlb3V0KTsKKworICBmb3IgKGogPSAwOyBqIDwgcmVkcy0+bnVtOyArK2opCisgICAgeworICAgICAgYm9vbCBkZWZhdWx0ZWQgPSBmYWxzZTsKKyAgICAgIGJvb2wgZmlyc3RkID0gdHJ1ZTsKKyAgICAgIGJvb2wgZmlyc3RlID0gdHJ1ZTsKKyAgICAgIHJ1bGVfbnVtYmVyIHJ1bGVubyA9IHJlZHMtPnJ1bGVzW2pdLT5udW1iZXI7CisgICAgICBydWxlICpkZWZhdWx0X3JlZHVjdGlvbiA9IE5VTEw7CisKKyAgICAgIGlmICh5eWRlZmFjdFtzLT5udW1iZXJdICE9IDApCisgICAgICAgIGRlZmF1bHRfcmVkdWN0aW9uID0gJnJ1bGVzW3l5ZGVmYWN0W3MtPm51bWJlcl0gLSAxXTsKKworICAgICAgLyogQnVpbGQgdGhlIGxvb2thaGVhZCB0b2tlbnMgbGlzdHMsIG9uZSBmb3IgZW5hYmxlZCB0cmFuc2l0aW9ucyBhbmQgb25lCisgICAgICAgICBmb3IgZGlzYWJsZWQgdHJhbnNpc3Rpb25zLiAqLworICAgICAgaWYgKGRlZmF1bHRfcmVkdWN0aW9uICYmIGRlZmF1bHRfcmVkdWN0aW9uID09IHJlZHMtPnJ1bGVzW2pdKQorICAgICAgICBkZWZhdWx0ZWQgPSB0cnVlOworICAgICAgaWYgKHJlZHMtPmxvb2thaGVhZF90b2tlbnMpCisgICAgICAgIHsKKyAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnRva2VuczsgaSsrKQorICAgICAgICAgICAgaWYgKGJpdHNldF90ZXN0IChyZWRzLT5sb29rYWhlYWRfdG9rZW5zW2pdLCBpKSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChiaXRzZXRfdGVzdCAobm9fcmVkdWNlX3NldCwgaSkpCisgICAgICAgICAgICAgICAgICBmaXJzdGQgPSBwcmludF90b2tlbiAoJmRvdXQsIGZpcnN0ZCwgc3ltYm9sc1tpXS0+dGFnKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICghIGRlZmF1bHRlZCkKKyAgICAgICAgICAgICAgICAgICAgICBmaXJzdGUgPSBwcmludF90b2tlbiAoJmVvdXQsIGZpcnN0ZSwgc3ltYm9sc1tpXS0+dGFnKTsKKyAgICAgICAgICAgICAgICAgICAgYml0c2V0X3NldCAobm9fcmVkdWNlX3NldCwgaSk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAvKiBEbyB0aGUgYWN0dWFsIG91dHB1dC4gKi8KKyAgICAgIGNvbmNsdWRlX3JlZCAoJmRvdXQsIHNvdXJjZSwgcnVsZW5vLCBmYWxzZSwgZmlyc3RkLCBmb3V0KTsKKyAgICAgIGNvbmNsdWRlX3JlZCAoJmVvdXQsIHNvdXJjZSwgcnVsZW5vLCB0cnVlLCBmaXJzdGUgJiYgIWRlZmF1bHRlZCwgZm91dCk7CisgICAgfQorICBvYnN0YWNrX2ZyZWUgKCZkb3V0LCAwKTsKKyAgb2JzdGFja19mcmVlICgmZW91dCwgMCk7CisgIGJpdHNldF9mcmVlIChub19yZWR1Y2Vfc2V0KTsKK30KKwordm9pZAorZmluaXNoX2dyYXBoIChGSUxFICpmb3V0KQoreworICBmcHV0cyAoIn1cbiIsIGZvdXQpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2dyYXBodml6LmggYi9zcmMvZ3JhcGh2aXouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzljZGQyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2dyYXBodml6LmgKQEAgLTAsMCArMSw3MSBAQAorLyogT3V0cHV0IEdyYXBodml6IHNwZWNpZmljYXRpb24gb2YgYSBzdGF0ZSBtYWNoaW5lIGdlbmVyYXRlZCBieSBCaXNvbi4KKworICAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDEwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0IGFuZCBTYXR5YSBLaXJhbiBQb3B1cmkuICAqLworCisjaWZuZGVmIEdSQVBIVklaX0hfCisjIGRlZmluZSBHUkFQSFZJWl9IXworCisjaW5jbHVkZSAic3RhdGUuaCIKKworLyoqIEJlZ2luIGEgRG90IGdyYXBoLgorICoKKyAqIFxwYXJhbSBmb3V0ICAgb3V0cHV0IHN0cmVhbS4KKyAqLwordm9pZCBzdGFydF9ncmFwaCAoRklMRSAqZm91dCk7CisKKy8qKiBPdXRwdXQgYSBEb3Qgbm9kZS4KKyAqCisgKiBccGFyYW0gaWQgICAgIGlkZW50aWZpZXIgb2YgdGhlIG5vZGUKKyAqIFxwYXJhbSBsYWJlbCAgaHVtYW4gcmVhZGFibGUgbGFiZWwgb2YgdGhlIG5vZGUgKG5vIERvdCBlc2NhcGluZyBuZWVkZWQpLgorICogXHBhcmFtIGZvdXQgICBvdXRwdXQgc3RyZWFtLgorICovCit2b2lkIG91dHB1dF9ub2RlIChpbnQgaWQsIGNoYXIgY29uc3QgKmxhYmVsLCBGSUxFICpmb3V0KTsKKworLyoqIE91dHB1dCBhIERvdCBlZGdlLgorICogXHBhcmFtIHNvdXJjZSAgICAgICBpZCBvZiB0aGUgc291cmNlIG5vZGUKKyAqIFxwYXJhbSBkZXN0aW5hdGlvbiAgaWQgb2YgdGhlIHRhcmdldCBub2RlCisgKiBccGFyYW0gbGFiZWwgICAgICAgIGh1bWFuIHJlYWRhYmxlIGxhYmVsIG9mIHRoZSBlZGdlCisgKiAgICAgICAgICAgICAgICAgICAgIChubyBEb3QgZXNjYXBpbmcgbmVlZGVkKS4gIENhbiBiZSAwLgorICogXHBhcmFtIHN0eWxlICAgICAgICBEb3Qgc3R5bGUgb2YgdGhlIGVkZ2UgKGUuZy4sICJkb3R0ZWQiIG9yICJzb2xpZCIpLgorICogXHBhcmFtIGZvdXQgICAgICAgICBvdXRwdXQgc3RyZWFtLgorICovCit2b2lkIG91dHB1dF9lZGdlIChpbnQgc291cmNlLCBpbnQgZGVzdGluYXRpb24sIGNoYXIgY29uc3QgKmxhYmVsLAorICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqc3R5bGUsIEZJTEUgKmZvdXQpOworCisvKiogT3V0cHV0IGEgcmVkdWN0aW9uLgorICogXHBhcmFtIHMgICAgICAgICAgICBjdXJyZW50IHN0YXRlCisgKiBccGFyYW0gcmVkcyAgICAgICAgIHRoZSBzZXQgb2YgcmVkdWN0aW9ucworICogXHBhcmFtIGZvdXQgICAgICAgICBvdXRwdXQgc3RyZWFtLgorICovCit2b2lkIG91dHB1dF9yZWQgKHN0YXRlIGNvbnN0ICpzLCByZWR1Y3Rpb25zIGNvbnN0ICpyZWRzLCBGSUxFICpmb3V0KTsKKworLyoqIEVuZCBhIERvdCBncmFwaC4KKyAqCisgKiBccGFyYW0gZm91dCAgb3V0cHV0IHN0cmVhbS4KKyAqLwordm9pZCBmaW5pc2hfZ3JhcGggKEZJTEUgKmZvdXQpOworCisvKiogRXNjYXBlIGEgbG9va2FoZWFkIHRva2VuLgorICoKKyAqIFxwYXJhbSBuYW1lICAgICAgICAgdGhlIHRva2VuLgorICovCitjaGFyIGNvbnN0ICplc2NhcGUgKGNoYXIgY29uc3QgKm5hbWUpOworCisjZW5kaWYgLyogISBHUkFQSFZJWl9IXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2llbHIuYyBiL3NyYy9pZWxyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZhYTZmNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pZWxyLmMKQEAgLTAsMCArMSwxMjAwIEBACisvKiBJRUxSIG1haW4gaW1wbGVtZW50YXRpb24uCisKKyAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgInN5c3RlbS5oIgorCisjaW5jbHVkZSAiaWVsci5oIgorCisjaW5jbHVkZSA8Yml0c2V0Lmg+CisjaW5jbHVkZSA8dGltZXZhci5oPgorCisjaW5jbHVkZSAiQW5ub3RhdGlvbkxpc3QuaCIKKyNpbmNsdWRlICJkZXJpdmVzLmgiCisjaW5jbHVkZSAiZ2V0YXJncy5oIgorI2luY2x1ZGUgImxhbHIuaCIKKyNpbmNsdWRlICJtdXNjbGUtdGFiLmgiCisjaW5jbHVkZSAibnVsbGFibGUuaCIKKyNpbmNsdWRlICJyZWxhdGlvbi5oIgorI2luY2x1ZGUgInN0YXRlLmgiCisjaW5jbHVkZSAic3ltdGFiLmgiCisKKy8qKiBSZWNvcmRzIHRoZSB2YWx1ZSBvZiB0aGUgXCVkZWZpbmUgdmFyaWFibGUgbHIudHlwZS4gICovCit0eXBlZGVmIGVudW0geyBMUl9UWVBFX19MQUxSLCBMUl9UWVBFX19JRUxSLCBMUl9UWVBFX19DQU5PTklDQUxfTFIgfSBMclR5cGU7CisKKy8qKgorICogXHBvc3Q6CisgKiAgIC0gXGMgcmVzdWx0ID0gYSBuZXcgXGMgYml0c2V0IG9mIHNpemUgXGMgOjpucml0ZW1zIHN1Y2ggdGhhdCBhbnkgYml0IFxjIGkKKyAqICAgICBpcyBzZXQgaWZmIDx0dD5yaXRlbVtpXTwvdHQ+IGlzIGEgbm9udGVybWluYWwgYWZ0ZXIgd2hpY2ggYWxsIHJpdGVtcyBpbgorICogICAgIHRoZSBzYW1lIFJIUyBhcmUgbnVsbGFibGUgbm9udGVybWluYWxzLiAgSW4gb3RoZXIgd29yZHMsIHRoZSBmb2xsb3dzIG9mCisgKiAgICAgYSBnb3RvIG9uIDx0dD5yaXRlbVtpXTwvdHQ+IGluY2x1ZGUgdGhlIGxvb2thaGVhZCBzZXQgb2YgdGhlIGl0ZW0uCisgKi8KK3N0YXRpYyBiaXRzZXQKK2llbHJfY29tcHV0ZV9yaXRlbV9zZWVzX2xvb2thaGVhZF9zZXQgKHZvaWQpCit7CisgIGJpdHNldCByZXN1bHQgPSBiaXRzZXRfY3JlYXRlIChucml0ZW1zLCBCSVRTRVRfRklYRUQpOworICB1bnNpZ25lZCBpbnQgaSA9IG5yaXRlbXMtMTsKKyAgd2hpbGUgKGk+MCkKKyAgICB7CisgICAgICAtLWk7CisgICAgICB3aGlsZSAoIWl0ZW1fbnVtYmVyX2lzX3J1bGVfbnVtYmVyIChyaXRlbVtpXSkKKyAgICAgICAgICAgICAmJiBJU1ZBUiAocml0ZW1baV0pCisgICAgICAgICAgICAgJiYgbnVsbGFibGUgW2l0ZW1fbnVtYmVyX2FzX3N5bWJvbF9udW1iZXIgKHJpdGVtW2ldKSAtIG50b2tlbnNdKQorICAgICAgICBiaXRzZXRfc2V0IChyZXN1bHQsIGktLSk7CisgICAgICBpZiAoIWl0ZW1fbnVtYmVyX2lzX3J1bGVfbnVtYmVyIChyaXRlbVtpXSkgJiYgSVNWQVIgKHJpdGVtW2ldKSkKKyAgICAgICAgYml0c2V0X3NldCAocmVzdWx0LCBpLS0pOworICAgICAgd2hpbGUgKCFpdGVtX251bWJlcl9pc19ydWxlX251bWJlciAocml0ZW1baV0pICYmIGk+MCkKKyAgICAgICAgLS1pOworICAgIH0KKyAgaWYgKHRyYWNlX2ZsYWcgJiB0cmFjZV9pZWxyKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgInJpdGVtX3NlZXNfbG9va2FoZWFkX3NldDpcbiIpOworICAgICAgZGVidWdfYml0c2V0IChyZXN1bHQpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKKyAgICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogXHByZToKKyAqICAgLSBcYyByaXRlbV9zZWVzX2xvb2thaGVhZF9zZXQgd2FzIGNvbXB1dGVkIGJ5CisgKiAgICAgXGMgaWVscl9jb21wdXRlX3JpdGVtX3NlZXNfbG9va2FoZWFkX3NldC4KKyAqIFxwb3N0OgorICogICAtIEVhY2ggb2YgXGMgKmVkZ2VzcCBhbmQgXGMgKmVkZ2VfY291bnRzcCBpcyBhIG5ldyBhcnJheSBvZiBzaXplCisgKiAgICAgXGMgOjpuZ290b3MuCisgKiAgIC0gPHR0PigqZWRnZXNwKVtpXTwvdHQ+IHBvaW50cyB0byBhIFxjIGdvdG9fbnVtYmVyIGFycmF5IG9mIHNpemUKKyAqICAgICA8dHQ+KCplZGdlX2NvdW50c3ApW2ldKzE8L3R0Pi4KKyAqICAgLSBJbiBzdWNoIGEgXGMgZ290b19udW1iZXIgYXJyYXksIHRoZSBsYXN0IGVsZW1lbnQgaXMgXGMgOjpFTkRfTk9ERS4KKyAqICAgLSBBbGwgcmVtYWluaW5nIGVsZW1lbnRzIGFyZSB0aGUgaW5kaWNlcyBvZiB0aGUgZ290b3MgdG8gd2hpY2ggdGhlcmUgaXMgYW4KKyAqICAgICBpbnRlcm5hbCBmb2xsb3cgZWRnZSBmcm9tIGdvdG8gXGMgaS4KKyAqICAgLSBUaGVyZSBpcyBhbiBpbnRlcm5hbCBmb2xsb3cgZWRnZSBmcm9tIGdvdG8gXGMgaSB0byBnb3RvIFxjIGogaWZmIGJvdGg6CisgKiAgICAgLSBUaGUgZnJvbSBzdGF0ZXMgb2YgZ290b3MgXGMgaSBhbmQgXGMgaiBhcmUgdGhlIHNhbWUuCisgKiAgICAgLSBUaGUgdHJhbnNpdGlvbiBub250ZXJtaW5hbCBmb3IgZ290byBcYyBpIGFwcGVhcnMgYXMgdGhlIGZpcnN0IFJIUworICogICAgICAgc3ltYm9sIG9mIGF0IGxlYXN0IG9uZSBwcm9kdWN0aW9uIGZvciB3aGljaCBib3RoOgorICogICAgICAgLSBUaGUgTEhTIGlzIHRoZSB0cmFuc2l0aW9uIHN5bWJvbCBvZiBnb3RvIFxjIGouCisgKiAgICAgICAtIEFsbCBvdGhlciBSSFMgc3ltYm9scyBhcmUgbnVsbGFibGUgbm9udGVybWluYWxzLgorICogICAgIC0gSW4gb3RoZXIgd29yZHMsIHRoZSBmb2xsb3dzIG9mIGdvdG8gXGMgaSBpbmNsdWRlIHRoZSBmb2xsb3dzIG9mCisgKiAgICAgICBnb3RvIFxjIGogYW5kIGl0J3MgYW4gaW50ZXJuYWwgZWRnZSBiZWNhdXNlIHRoZSBmcm9tIHN0YXRlcyBhcmUgdGhlCisgKiAgICAgICBzYW1lLgorICovCitzdGF0aWMgdm9pZAoraWVscl9jb21wdXRlX2ludGVybmFsX2ZvbGxvd19lZGdlcyAoYml0c2V0IHJpdGVtX3NlZXNfbG9va2FoZWFkX3NldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG9fbnVtYmVyICoqKmVkZ2VzcCwgaW50ICoqZWRnZV9jb3VudHNwKQoreworICAqZWRnZXNwID0geG5tYWxsb2MgKG5nb3Rvcywgc2l6ZW9mICoqZWRnZXNwKTsKKyAgKmVkZ2VfY291bnRzcCA9IHhubWFsbG9jIChuZ290b3MsIHNpemVvZiAqKmVkZ2VfY291bnRzcCk7CisgIHsKKyAgICBiaXRzZXQgc291cmNlcyA9IGJpdHNldF9jcmVhdGUgKG5nb3RvcywgQklUU0VUX0ZJWEVEKTsKKyAgICBnb3RvX251bWJlciBpOworICAgIGZvciAoaSA9IDA7IGkgPCBuZ290b3M7ICsraSkKKyAgICAgICgqZWRnZV9jb3VudHNwKVtpXSA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8IG5nb3RvczsgKytpKQorICAgICAgeworICAgICAgICBpbnQgbnNvdXJjZXMgPSAwOworICAgICAgICB7CisgICAgICAgICAgcnVsZSAqKnJ1bGVwOworICAgICAgICAgIGZvciAocnVsZXAgPSBkZXJpdmVzW3N0YXRlc1t0b19zdGF0ZVtpXV0tPmFjY2Vzc2luZ19zeW1ib2wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIG50b2tlbnNdOworICAgICAgICAgICAgICAgKnJ1bGVwOworICAgICAgICAgICAgICAgKytydWxlcCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIFJIUyBzeW1ib2wsIGlmIHRoZSBmaXJzdCBSSFMgc3ltYm9sCisgICAgICAgICAgICAgICAgIGlzIGEgbm9udGVybWluYWwsIGFuZCBpZiBhbGwgcmVtYWluaW5nIFJIUyBzeW1ib2xzIChpZiBhbnkpCisgICAgICAgICAgICAgICAgIGFyZSBudWxsYWJsZSBub250ZXJtaW5hbHMsIGNyZWF0ZSBhbiBlZGdlIGZyb20gdGhlIExIUworICAgICAgICAgICAgICAgICBzeW1ib2wncyBnb3RvIHRvIHRoZSBmaXJzdCBSSFMgc3ltYm9sJ3MgZ290byBzdWNoIHRoYXQgdGhlIFJIUworICAgICAgICAgICAgICAgICBzeW1ib2wncyBnb3RvIHdpbGwgYmUgdGhlIHNvdXJjZSBvZiB0aGUgZWRnZSBhZnRlciB0aGUKKyAgICAgICAgICAgICAgICAgZXZlbnR1YWwgcmVsYXRpb25fdHJhbnNwb3NlIGJlbG93LgorCisgICAgICAgICAgICAgICAgIFVubGlrZSBpbiBpZWxyX2NvbXB1dGVfYWx3YXlzX2ZvbGxvd3MsIEkgdXNlIGEgYml0c2V0IGZvcgorICAgICAgICAgICAgICAgICBlZGdlcyByYXRoZXIgdGhhbiBhbiBhcnJheSBiZWNhdXNlIGl0IGlzIHBvc3NpYmxlIHRoYXQKKyAgICAgICAgICAgICAgICAgbXVsdGlwbGUgUkhTJ3Mgd2l0aCB0aGUgc2FtZSBmaXJzdCBzeW1ib2wgY291bGQgZml0IGFuZCB0aHVzCisgICAgICAgICAgICAgICAgIHRoYXQgd2UgY291bGQgZW5kIHVwIHdpdGggcmVkdW5kYW50IGVkZ2VzLiAgV2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgcG9zc2liaWxpdHkgb2YgcmVkdW5kYW50IGVkZ2VzLCBpdCdzIGhhcmQgdG8ga25vdyBhaGVhZCBvZgorICAgICAgICAgICAgICAgICB0aW1lIGhvdyBsYXJnZSB0byBtYWtlIHN1Y2ggYW4gYXJyYXkuICBBbm90aGVyIHBvc3NpYmxlCisgICAgICAgICAgICAgICAgIHJlZHVuZGFuY3kgaXMgdGhhdCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG1pZ2h0IGJlIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgIGdvdG8uICBFbGltaW5hdGluZyBhbGwgdGhlc2UgcG9zc2libGUgcmVkdW5kYW5jaWVzIG5vdyBtaWdodAorICAgICAgICAgICAgICAgICBwb3NzaWJseSBoZWxwIHBlcmZvcm1hbmNlIGEgbGl0dGxlLiAgSSBoYXZlIG5vdCBwcm92ZW4gYW55IG9mCisgICAgICAgICAgICAgICAgIHRoaXMsIGJ1dCBJJ20gZ3Vlc3NpbmcgdGhlIGJpdHNldCBzaG91bGRuJ3QgZW50YWlsIG11Y2ggb2YgYQorICAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZSBwZW5hbHR5LCBpZiBhbnkuICAqLworICAgICAgICAgICAgICBpZiAoYml0c2V0X3Rlc3QgKHJpdGVtX3NlZXNfbG9va2FoZWFkX3NldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKnJ1bGVwKS0+cmhzIC0gcml0ZW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGdvdG9fbnVtYmVyIHNvdXJjZSA9CisgICAgICAgICAgICAgICAgICAgIG1hcF9nb3RvIChmcm9tX3N0YXRlW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9udW1iZXJfYXNfc3ltYm9sX251bWJlciAoKigqcnVsZXApLT5yaHMpKTsKKyAgICAgICAgICAgICAgICAgIGlmIChpICE9IHNvdXJjZSAmJiAhYml0c2V0X3Rlc3QgKHNvdXJjZXMsIHNvdXJjZSkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBiaXRzZXRfc2V0IChzb3VyY2VzLCBzb3VyY2UpOworICAgICAgICAgICAgICAgICAgICAgICsrbnNvdXJjZXM7CisgICAgICAgICAgICAgICAgICAgICAgKysoKmVkZ2VfY291bnRzcClbc291cmNlXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobnNvdXJjZXMgPT0gMCkKKyAgICAgICAgICAoKmVkZ2VzcClbaV0gPSBOVUxMOworICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgKCplZGdlc3ApW2ldID0geG5tYWxsb2MgKG5zb3VyY2VzICsgMSwgc2l6ZW9mICooKmVkZ2VzcClbaV0pOworICAgICAgICAgICAgeworICAgICAgICAgICAgICBiaXRzZXRfaXRlcmF0b3IgYml0ZXJfc291cmNlOworICAgICAgICAgICAgICBiaXRzZXRfYmluZGV4IHNvdXJjZTsKKyAgICAgICAgICAgICAgaW50IGogPSAwOworICAgICAgICAgICAgICBCSVRTRVRfRk9SX0VBQ0ggKGJpdGVyX3NvdXJjZSwgc291cmNlcywgc291cmNlLCAwKQorICAgICAgICAgICAgICAgICgqZWRnZXNwKVtpXVtqKytdID0gc291cmNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKCplZGdlc3ApW2ldW25zb3VyY2VzXSA9IEVORF9OT0RFOworICAgICAgICAgIH0KKyAgICAgICAgYml0c2V0X3plcm8gKHNvdXJjZXMpOworICAgICAgfQorICAgIGJpdHNldF9mcmVlIChzb3VyY2VzKTsKKyAgfQorCisgIHJlbGF0aW9uX3RyYW5zcG9zZSAoZWRnZXNwLCBuZ290b3MpOworCisgIGlmICh0cmFjZV9mbGFnICYgdHJhY2VfaWVscikKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJpbnRlcm5hbF9mb2xsb3dfZWRnZXM6XG4iKTsKKyAgICAgIHJlbGF0aW9uX3ByaW50ICgqZWRnZXNwLCBuZ290b3MsIHN0ZGVycik7CisgICAgfQorfQorCisvKioKKyAqIFxwcmU6CisgKiAgIC0gXGMgcml0ZW1fc2Vlc19sb29rYWhlYWRfc2V0IHdhcyBjb21wdXRlZCBieQorICogICAgIFxjIGllbHJfY29tcHV0ZV9yaXRlbV9zZWVzX2xvb2thaGVhZF9zZXQuCisgKiAgIC0gXGMgaW50ZXJuYWxfZm9sbG93X2VkZ2VzIHdhcyBjb21wdXRlZCBieQorICogICAgIFxjIGllbHJfY29tcHV0ZV9pbnRlcm5hbF9mb2xsb3dfZWRnZXMuCisgKiBccG9zdDoKKyAqICAgLSBcYyAqZm9sbG93X2tlcm5lbF9pdGVtc3AgaXMgYSBuZXcgXGMgYml0c2V0diBpbiB3aGljaCB0aGUgbnVtYmVyIG9mIHJvd3MKKyAqICAgICBpcyBcYyBuZ290b3MgYW5kIHRoZSBudW1iZXIgb2YgY29sdW1ucyBpcyBtYXhpbXVtIG51bWJlciBvZiBrZXJuZWwgaXRlbXMKKyAqICAgICBpbiBhbnkgc3RhdGUuCisgKiAgIC0gPHR0PigqZm9sbG93X2tlcm5lbF9pdGVtc3ApW2ldW2pdPC90dD4gaXMgc2V0IGlmZiB0aGUgZm9sbG93cyBvZiBnb3RvCisgKiAgICAgXGMgaSBpbmNsdWRlIHRoZSBsb29rYWhlYWQgc2V0IG9mIGl0ZW0gXGMgaiBpbiB0aGUgZnJvbSBzdGF0ZSBvZiBnb3RvCisgKiAgICAgXGMgaS4KKyAqICAgLSBUaHVzLCA8dHQ+KCpmb2xsb3dfa2VybmVsX2l0ZW1zcClbaV1bal08L3R0PiBpcyBhbHdheXMgdW5zZXQgaWYgdGhlcmUgaXMKKyAqICAgICBubyBpdGVtIFxjIGogaW4gdGhlIGZyb20gc3RhdGUgb2YgZ290byBcYyBpLgorICovCitzdGF0aWMgdm9pZAoraWVscl9jb21wdXRlX2ZvbGxvd19rZXJuZWxfaXRlbXMgKGJpdHNldCByaXRlbV9zZWVzX2xvb2thaGVhZF9zZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290b19udW1iZXIgKippbnRlcm5hbF9mb2xsb3dfZWRnZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c2V0diAqZm9sbG93X2tlcm5lbF9pdGVtc3ApCit7CisgIHsKKyAgICBzaXplX3QgbWF4X25pdGVtcyA9IDA7CisgICAgc3RhdGVfbnVtYmVyIGk7CisgICAgZm9yIChpID0gMDsgaSA8IG5zdGF0ZXM7ICsraSkKKyAgICAgIGlmIChzdGF0ZXNbaV0tPm5pdGVtcyA+IG1heF9uaXRlbXMpCisgICAgICAgIG1heF9uaXRlbXMgPSBzdGF0ZXNbaV0tPm5pdGVtczsKKyAgICAqZm9sbG93X2tlcm5lbF9pdGVtc3AgPSBiaXRzZXR2X2NyZWF0ZSAobmdvdG9zLCBtYXhfbml0ZW1zLCBCSVRTRVRfRklYRUQpOworICB9CisgIHsKKyAgICBnb3RvX251bWJlciBpOworICAgIGZvciAoaSA9IDA7IGkgPCBuZ290b3M7ICsraSkKKyAgICAgIHsKKyAgICAgICAgc2l6ZV90IG5pdGVtcyA9IHN0YXRlc1tmcm9tX3N0YXRlW2ldXS0+bml0ZW1zOworICAgICAgICBpdGVtX251bWJlciAqaXRlbXMgPSBzdGF0ZXNbZnJvbV9zdGF0ZVtpXV0tPml0ZW1zOworICAgICAgICBzaXplX3QgajsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IG5pdGVtczsgKytqKQorICAgICAgICAgIC8qIElmIHRoaXMgaXRlbSBoYXMgdGhpcyBnb3RvIGFuZCBpZiBhbGwgc3Vic2VxdWVudCBzeW1ib2xzIGluIHRoaXMKKyAgICAgICAgICAgICBSSFMgKGlmIGFueSkgYXJlIG51bGxhYmxlIG5vbnRlcm1pbmFscywgdGhlbiByZWNvcmQgdGhpcyBpdGVtIGFzCisgICAgICAgICAgICAgb25lIHdob3NlIGxvb2thaGVhZCBzZXQgaXMgaW5jbHVkZWQgaW4gdGhpcyBnb3RvJ3MgZm9sbG93cy4gICovCisgICAgICAgICAgaWYgKGl0ZW1fbnVtYmVyX2lzX3N5bWJvbF9udW1iZXIgKHJpdGVtW2l0ZW1zW2pdXSkKKyAgICAgICAgICAgICAgJiYgaXRlbV9udW1iZXJfYXNfc3ltYm9sX251bWJlciAocml0ZW1baXRlbXNbal1dKQorICAgICAgICAgICAgICAgID09IHN0YXRlc1t0b19zdGF0ZVtpXV0tPmFjY2Vzc2luZ19zeW1ib2wKKyAgICAgICAgICAgICAgJiYgYml0c2V0X3Rlc3QgKHJpdGVtX3NlZXNfbG9va2FoZWFkX3NldCwgaXRlbXNbal0pKQorICAgICAgICAgICAgYml0c2V0X3NldCAoKCpmb2xsb3dfa2VybmVsX2l0ZW1zcClbaV0sIGopOworICAgICAgfQorICB9CisgIHJlbGF0aW9uX2RpZ3JhcGggKGludGVybmFsX2ZvbGxvd19lZGdlcywgbmdvdG9zLCBmb2xsb3dfa2VybmVsX2l0ZW1zcCk7CisKKyAgaWYgKHRyYWNlX2ZsYWcgJiB0cmFjZV9pZWxyKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImZvbGxvd19rZXJuZWxfaXRlbXM6XG4iKTsKKyAgICAgIGRlYnVnX2JpdHNldHYgKCpmb2xsb3dfa2VybmVsX2l0ZW1zcCk7CisgICAgfQorfQorCisvKioKKyAqIFxwcmUKKyAqICAgLSBcYyAqZWRnZXNwIGFuZCBcYyBlZGdlX2NvdW50cyB3ZXJlIGNvbXB1dGVkIGJ5CisgKiAgICAgXGMgaWVscl9jb21wdXRlX2ludGVybmFsX2ZvbGxvd19lZGdlcy4KKyAqIFxwb3N0CisgKiAgIC0gXGMgKmFsd2F5c19mb2xsb3dzcCBpcyBhIG5ldyBcYyBiaXRzZXR2IHdpdGggXGMgbmdvdG9zIHJvd3MgYW5kCisgKiAgICAgXGMgbnRva2VucyBjb2x1bW5zLgorICogICAtIDx0dD4oKmFsd2F5c19mb2xsb3dzcClbaV1bal08L3R0PiBpcyBzZXQgaWZmIHRva2VuIFxjIGogaXMgYW4gYWx3YXlzCisgKiAgICAgZm9sbG93ICh0aGF0IGlzLCBpdCdzIGNvbXB1dGVkIGJ5IGludGVybmFsIGFuZCBzdWNjZXNzb3IgZWRnZXMpIG9mIGdvdG8KKyAqICAgICBcYyBpLgorICogICAtIFJvd3Mgb2YgXGMgKmVkZ2VzcCBoYXZlIGJlZW4gcmVhbGxvYydlZCBhbmQgZXh0ZW5kZWQgdG8gaW5jbHVkZQorICogICAgIHN1Y2Nlc3NvciBmb2xsb3cgZWRnZXMuICBcYyBlZGdlX2NvdW50cyBoYXMgbm90IGJlZW4gdXBkYXRlZC4KKyAqLworc3RhdGljIHZvaWQKK2llbHJfY29tcHV0ZV9hbHdheXNfZm9sbG93cyAoZ290b19udW1iZXIgKioqZWRnZXNwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29uc3QgZWRnZV9jb3VudHNbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c2V0diAqYWx3YXlzX2ZvbGxvd3NwKQoreworICAqYWx3YXlzX2ZvbGxvd3NwID0gYml0c2V0dl9jcmVhdGUgKG5nb3RvcywgbnRva2VucywgQklUU0VUX0ZJWEVEKTsKKyAgeworICAgIGdvdG9fbnVtYmVyICplZGdlX2FycmF5ID0geG5tYWxsb2MgKG5nb3Rvcywgc2l6ZW9mICplZGdlX2FycmF5KTsKKyAgICBnb3RvX251bWJlciBpOworICAgIGZvciAoaSA9IDA7IGkgPCBuZ290b3M7ICsraSkKKyAgICAgIHsKKyAgICAgICAgZ290b19udW1iZXIgbmVkZ2VzID0gZWRnZV9jb3VudHNbaV07CisgICAgICAgIHsKKyAgICAgICAgICBpbnQgajsKKyAgICAgICAgICB0cmFuc2l0aW9ucyAqdHJhbnMgPSBzdGF0ZXNbdG9fc3RhdGVbaV1dLT50cmFuc2l0aW9uczsKKyAgICAgICAgICBGT1JfRUFDSF9TSElGVCAodHJhbnMsIGopCisgICAgICAgICAgICBiaXRzZXRfc2V0ICgoKmFsd2F5c19mb2xsb3dzcClbaV0sIFRSQU5TSVRJT05fU1lNQk9MICh0cmFucywgaikpOworICAgICAgICAgIGZvciAoOyBqIDwgdHJhbnMtPm51bTsgKytqKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzeW1ib2xfbnVtYmVyIHN5bSA9IFRSQU5TSVRJT05fU1lNQk9MICh0cmFucywgaik7CisgICAgICAgICAgICAgIGlmIChudWxsYWJsZVtzeW0gLSBudG9rZW5zXSkKKyAgICAgICAgICAgICAgICBlZGdlX2FycmF5W25lZGdlcysrXSA9IG1hcF9nb3RvICh0b19zdGF0ZVtpXSwgc3ltKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobmVkZ2VzIC0gZWRnZV9jb3VudHNbaV0pCisgICAgICAgICAgeworICAgICAgICAgICAgKCplZGdlc3ApW2ldID0KKyAgICAgICAgICAgICAgeG5yZWFsbG9jICgoKmVkZ2VzcClbaV0sIG5lZGdlcyArIDEsIHNpemVvZiAqKCplZGdlc3ApW2ldKTsKKyAgICAgICAgICAgIG1lbWNweSAoKCplZGdlc3ApW2ldICsgZWRnZV9jb3VudHNbaV0sIGVkZ2VfYXJyYXkgKyBlZGdlX2NvdW50c1tpXSwKKyAgICAgICAgICAgICAgICAgICAgKG5lZGdlcyAtIGVkZ2VfY291bnRzW2ldKSAqIHNpemVvZiAqKCplZGdlc3ApW2ldKTsKKyAgICAgICAgICAgICgqZWRnZXNwKVtpXVtuZWRnZXNdID0gRU5EX05PREU7CisgICAgICAgICAgfQorICAgICAgfQorICAgIGZyZWUgKGVkZ2VfYXJyYXkpOworICB9CisgIHJlbGF0aW9uX2RpZ3JhcGggKCplZGdlc3AsIG5nb3RvcywgYWx3YXlzX2ZvbGxvd3NwKTsKKworICBpZiAodHJhY2VfZmxhZyAmIHRyYWNlX2llbHIpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiYWx3YXlzIGZvbGxvdyBlZGdlczpcbiIpOworICAgICAgcmVsYXRpb25fcHJpbnQgKCplZGdlc3AsIG5nb3Rvcywgc3RkZXJyKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImFsd2F5c19mb2xsb3dzOlxuIik7CisgICAgICBkZWJ1Z19iaXRzZXR2ICgqYWx3YXlzX2ZvbGxvd3NwKTsKKyAgICB9Cit9CisKKy8qKgorICogXHBvc3QKKyAqICAgLSBcYyByZXN1bHQgaXMgYSBuZXcgYXJyYXkgb2Ygc2l6ZSBcYyA6Om5zdGF0ZXMuCisgKiAgIC0gPHR0PnJlc3VsdFtpXTwvdHQ+IGlzIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHRoZSBwcmVkZWNlc3NvcgorICogICAgIDx0dD5zdGF0ZTwvdHQ+J3Mgb2Ygc3RhdGUgXGMgaS4KKyAqICAgLSBUaGUgbGFzdCBlbGVtZW50IG9mIHN1Y2ggYW4gYXJyYXkgaXMgXGMgTlVMTC4KKyAqLworc3RhdGljIHN0YXRlICoqKgoraWVscl9jb21wdXRlX3ByZWRlY2Vzc29ycyAodm9pZCkKK3sKKyAgc3RhdGVfbnVtYmVyIGk7CisgIGludCAqcHJlZGVjZXNzb3JfY291bnRzID0geG5tYWxsb2MgKG5zdGF0ZXMsIHNpemVvZiAqcHJlZGVjZXNzb3JfY291bnRzKTsKKyAgc3RhdGUgKioqcmVzdWx0ID0geG5tYWxsb2MgKG5zdGF0ZXMsIHNpemVvZiAqcmVzdWx0KTsKKyAgZm9yIChpID0gMDsgaSA8IG5zdGF0ZXM7ICsraSkKKyAgICBwcmVkZWNlc3Nvcl9jb3VudHNbaV0gPSAwOworICBmb3IgKGkgPSAwOyBpIDwgbnN0YXRlczsgKytpKQorICAgIHsKKyAgICAgIGludCBqOworICAgICAgZm9yIChqID0gMDsgaiA8IHN0YXRlc1tpXS0+dHJhbnNpdGlvbnMtPm51bTsgKytqKQorICAgICAgICArK3ByZWRlY2Vzc29yX2NvdW50c1tzdGF0ZXNbaV0tPnRyYW5zaXRpb25zLT5zdGF0ZXNbal0tPm51bWJlcl07CisgICAgfQorICBmb3IgKGkgPSAwOyBpIDwgbnN0YXRlczsgKytpKQorICAgIHsKKyAgICAgIHJlc3VsdFtpXSA9IHhubWFsbG9jIChwcmVkZWNlc3Nvcl9jb3VudHNbaV0rMSwgc2l6ZW9mICpyZXN1bHRbaV0pOworICAgICAgcmVzdWx0W2ldW3ByZWRlY2Vzc29yX2NvdW50c1tpXV0gPSBOVUxMOworICAgICAgcHJlZGVjZXNzb3JfY291bnRzW2ldID0gMDsKKyAgICB9CisgIGZvciAoaSA9IDA7IGkgPCBuc3RhdGVzOyArK2kpCisgICAgeworICAgICAgaW50IGo7CisgICAgICBmb3IgKGogPSAwOyBqIDwgc3RhdGVzW2ldLT50cmFuc2l0aW9ucy0+bnVtOyArK2opCisgICAgICAgIHsKKyAgICAgICAgICBzdGF0ZV9udW1iZXIgayA9IHN0YXRlc1tpXS0+dHJhbnNpdGlvbnMtPnN0YXRlc1tqXS0+bnVtYmVyOworICAgICAgICAgIHJlc3VsdFtrXVtwcmVkZWNlc3Nvcl9jb3VudHNba10rK10gPSBzdGF0ZXNbaV07CisgICAgICAgIH0KKyAgICB9CisgIGZyZWUgKHByZWRlY2Vzc29yX2NvdW50cyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogXHBvc3QKKyAqICAgLSBcYyAqZm9sbG93X2tlcm5lbF9pdGVtc3AgYW5kIFxjICphbHdheXNfZm9sbG93c3Agd2VyZSBjb21wdXRlZCBieQorICogICAgIFxjIGllbHJfY29tcHV0ZV9mb2xsb3dfa2VybmVsX2l0ZW1zIGFuZAorICogICAgIFxjIGllbHJfY29tcHV0ZV9hbHdheXNfZm9sbG93cy4KKyAqICAgLSBJZmYgPHR0PnByZWRlY2Vzc29yc3AgIT0gTlVMTDwvdHQ+LCB0aGVuIFxjICpwcmVkZWNlc3NvcnNwIHdhcyBjb21wdXRlZAorICogICAgIGJ5IFxjIGllbHJfY29tcHV0ZV9wcmVkZWNlc3NvcnMuCisgKi8KK3N0YXRpYyB2b2lkCitpZWxyX2NvbXB1dGVfYXV4aWxpYXJ5X3RhYmxlcyAoYml0c2V0diAqZm9sbG93X2tlcm5lbF9pdGVtc3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c2V0diAqYWx3YXlzX2ZvbGxvd3NwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlICoqKipwcmVkZWNlc3NvcnNwKQoreworICBnb3RvX251bWJlciAqKmVkZ2VzOworICBpbnQgKmVkZ2VfY291bnRzOworICB7CisgICAgYml0c2V0IHJpdGVtX3NlZXNfbG9va2FoZWFkX3NldCA9IGllbHJfY29tcHV0ZV9yaXRlbV9zZWVzX2xvb2thaGVhZF9zZXQgKCk7CisgICAgaWVscl9jb21wdXRlX2ludGVybmFsX2ZvbGxvd19lZGdlcyAocml0ZW1fc2Vlc19sb29rYWhlYWRfc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlZGdlcywgJmVkZ2VfY291bnRzKTsKKyAgICBpZWxyX2NvbXB1dGVfZm9sbG93X2tlcm5lbF9pdGVtcyAocml0ZW1fc2Vlc19sb29rYWhlYWRfc2V0LCBlZGdlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93X2tlcm5lbF9pdGVtc3ApOworICAgIGJpdHNldF9mcmVlIChyaXRlbV9zZWVzX2xvb2thaGVhZF9zZXQpOworICB9CisgIGllbHJfY29tcHV0ZV9hbHdheXNfZm9sbG93cyAoJmVkZ2VzLCBlZGdlX2NvdW50cywgYWx3YXlzX2ZvbGxvd3NwKTsKKyAgeworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBuZ290b3M7ICsraSkKKyAgICAgIGZyZWUgKGVkZ2VzW2ldKTsKKyAgfQorICBmcmVlIChlZGdlcyk7CisgIGZyZWUgKGVkZ2VfY291bnRzKTsKKyAgaWYgKHByZWRlY2Vzc29yc3ApCisgICAgKnByZWRlY2Vzc29yc3AgPSBpZWxyX2NvbXB1dGVfcHJlZGVjZXNzb3JzICgpOworfQorCisvKioKKyAqIFxub3RlCisgKiAgIC0gRklYTUU6IEl0IG1pZ2h0IGJlIGFuIGludGVyZXN0aW5nIGV4cGVyaW1lbnQgdG8gY29tcGFyZSB0aGUgc3BhY2UgYW5kCisgKiAgICAgdGltZSBlZmZpY2llbmN5IG9mIGNvbXB1dGluZyBcYyBpdGVtX2xvb2thaGVhZF9zZXRzIGVpdGhlcjoKKyAqICAgICAtIEZ1bGx5IHVwIGZyb250LgorICogICAgIC0gSnVzdC1pbi10aW1lLCBhcyBpbXBsZW1lbnRlZCBiZWxvdy4KKyAqICAgICAtIE5vdCBhdCBhbGwuICBUaGF0IGlzLCBqdXN0IGxldCBhbm5vdGF0aW9ucyBjb250aW51ZSBldmVuIHdoZW4KKyAqICAgICAgIHVubmVjZXNzYXJ5LgorICovCitib29sCitpZWxyX2l0ZW1faGFzX2xvb2thaGVhZCAoc3RhdGUgKnMsIHN5bWJvbF9udW1iZXIgbGhzLCBzaXplX3QgaXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xfbnVtYmVyIGxvb2thaGVhZCwgc3RhdGUgKioqcHJlZGVjZXNzb3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNldCAqKml0ZW1fbG9va2FoZWFkX3NldHMpCit7CisgIGlmICghaXRlbV9sb29rYWhlYWRfc2V0c1tzLT5udW1iZXJdKQorICAgIHsKKyAgICAgIHNpemVfdCBpOworICAgICAgaXRlbV9sb29rYWhlYWRfc2V0c1tzLT5udW1iZXJdID0KKyAgICAgICAgeG5tYWxsb2MgKHMtPm5pdGVtcywgc2l6ZW9mIGl0ZW1fbG9va2FoZWFkX3NldHNbcy0+bnVtYmVyXVswXSk7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgcy0+bml0ZW1zOyArK2kpCisgICAgICAgIGl0ZW1fbG9va2FoZWFkX3NldHNbcy0+bnVtYmVyXVtpXSA9IE5VTEw7CisgICAgfQorICBpZiAoIWl0ZW1fbG9va2FoZWFkX3NldHNbcy0+bnVtYmVyXVtpdGVtXSkKKyAgICB7CisgICAgICBpdGVtX2xvb2thaGVhZF9zZXRzW3MtPm51bWJlcl1baXRlbV0gPQorICAgICAgICBiaXRzZXRfY3JlYXRlIChudG9rZW5zLCBCSVRTRVRfRklYRUQpOworICAgICAgLyogSWYgdGhpcyBrZXJuZWwgaXRlbSBpcyB0aGUgYmVnaW5uaW5nIG9mIGEgUkhTLCBpdCBtdXN0IGJlIHRoZSBrZXJuZWwKKyAgICAgICAgIGl0ZW0gaW4gdGhlIHN0YXJ0IHN0YXRlLCBhbmQgc28gaXRzIExIUyBoYXMgbm8gZm9sbG93cyBhbmQgbm8gZ290byB0bworICAgICAgICAgY2hlY2suICBJZiwgaW5zdGVhZCwgdGhpcyBrZXJuZWwgaXRlbSBpcyB0aGUgc3VjY2Vzc29yIG9mIHRoZSBzdGFydAorICAgICAgICAgc3RhdGUncyBrZXJuZWwgaXRlbSwgdGhlcmUgYXJlIHN0aWxsIG5vIGZvbGxvd3MgYW5kIG5vIGdvdG8uICBUaGlzCisgICAgICAgICBzaXR1YXRpb24gaXMgZm9ydHVuYXRlIGJlY2F1c2Ugd2Ugd2FudCB0byBhdm9pZCB0aGUgLSAyIGJlbG93IGluIGJvdGgKKyAgICAgICAgIGNhc2VzLgorCisgICAgICAgICBBY3R1YWxseSwgSUVMUigxKSBzaG91bGQgbmV2ZXIgaW52b2tlIHRoaXMgZnVuY3Rpb24gZm9yIGVpdGhlciBvZgorICAgICAgICAgdGhvc2UgY2FzZXMgYmVjYXVzZSAoMSkgZm9sbG93X2tlcm5lbF9pdGVtcyB3aWxsIG5ldmVyIHJlZmVyZW5jZSBhCisgICAgICAgICBrZXJuZWwgaXRlbSBmb3IgdGhpcyBSSFMgYmVjYXVzZSB0aGUgZW5kIHRva2VuIGJsb2NrcyBzaWdodCBvZiB0aGUKKyAgICAgICAgIGxvb2thaGVhZCBzZXQgZnJvbSB0aGUgUkhTJ3Mgb25seSBub250ZXJtaW5hbCwgYW5kICgyKSBubyByZWR1Y3Rpb24KKyAgICAgICAgIGhhcyBhIGxvb2tiYWNrIGRlcGVuZGVuY3kgb24gdGhpcyBsb29rYWhlYWQgc2V0LiAgTmV2ZXJ0aGVsZXNzLCBJCisgICAgICAgICBkaWRuJ3QgY2hhbmdlIHRoaXMgdGVzdCB0byBhbiBhdmVyIGp1c3QgaW4gY2FzZSB0aGUgdXNhZ2Ugb2YgdGhpcworICAgICAgICAgZnVuY3Rpb24gZXZvbHZlcyB0byBuZWVkIHRob3NlIHR3byBjYXNlcy4gIEluIGJvdGggY2FzZXMsIHRoZSBjdXJyZW50CisgICAgICAgICBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIHRoZSByaWdodCByZXN1bHQuICAqLworICAgICAgaWYgKHMtPml0ZW1zW2l0ZW1dID4gMSkKKyAgICAgICAgeworICAgICAgICAgIC8qIElmIHRoZSBMSFMgc3ltYm9sIG9mIHRoaXMgaXRlbSBpc24ndCBrbm93biAoYmVjYXVzZSB0aGlzIGlzIGEKKyAgICAgICAgICAgICB0b3AtbGV2ZWwgaW52b2NhdGlvbiksIGdvIGdldCBpdC4gICovCisgICAgICAgICAgaWYgKCFsaHMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpOworICAgICAgICAgICAgICBmb3IgKGkgPSBzLT5pdGVtc1tpdGVtXTsKKyAgICAgICAgICAgICAgICAgICAhaXRlbV9udW1iZXJfaXNfcnVsZV9udW1iZXIgKHJpdGVtW2ldKTsKKyAgICAgICAgICAgICAgICAgICArK2kpCisgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgICBsaHMgPSBydWxlc1tpdGVtX251bWJlcl9hc19ydWxlX251bWJlciAocml0ZW1baV0pXS5saHMtPm51bWJlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAvKiBJZiB0aGlzIGtlcm5lbCBpdGVtIGlzIG5leHQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgUkhTLCB0aGVuCisgICAgICAgICAgICAgY2hlY2sgYWxsIHByZWRlY2Vzc29ycycgZ290byBmb2xsb3dzIGZvciB0aGUgTEhTLiAgKi8KKyAgICAgICAgICBpZiAoaXRlbV9udW1iZXJfaXNfcnVsZV9udW1iZXIgKHJpdGVtW3MtPml0ZW1zW2l0ZW1dIC0gMl0pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzdGF0ZSAqKnByZWRlY2Vzc29yOworICAgICAgICAgICAgICBhdmVyIChsaHMgIT0gYWNjZXB0LT5udW1iZXIpOworICAgICAgICAgICAgICBmb3IgKHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3JzW3MtPm51bWJlcl07CisgICAgICAgICAgICAgICAgICAgKnByZWRlY2Vzc29yOworICAgICAgICAgICAgICAgICAgICsrcHJlZGVjZXNzb3IpCisgICAgICAgICAgICAgICAgYml0c2V0X29yIChpdGVtX2xvb2thaGVhZF9zZXRzW3MtPm51bWJlcl1baXRlbV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX2xvb2thaGVhZF9zZXRzW3MtPm51bWJlcl1baXRlbV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvX2ZvbGxvd3NbbWFwX2dvdG8gKCgqcHJlZGVjZXNzb3IpLT5udW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxocyldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAvKiBJZiB0aGlzIGtlcm5lbCBpdGVtIGlzIGxhdGVyIGluIHRoZSBSSFMsIHRoZW4gY2hlY2sgYWxsCisgICAgICAgICAgICAgcHJlZGVjZXNzb3IgaXRlbXMnIGxvb2thaGVhZCBzZXRzLiAgKi8KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0YXRlICoqcHJlZGVjZXNzb3I7CisgICAgICAgICAgICAgIGZvciAocHJlZGVjZXNzb3IgPSBwcmVkZWNlc3NvcnNbcy0+bnVtYmVyXTsKKyAgICAgICAgICAgICAgICAgICAqcHJlZGVjZXNzb3I7CisgICAgICAgICAgICAgICAgICAgKytwcmVkZWNlc3NvcikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBzaXplX3QgcHJlZGVjZXNzb3JfaXRlbTsKKyAgICAgICAgICAgICAgICAgIGZvciAocHJlZGVjZXNzb3JfaXRlbSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yX2l0ZW0gPCAoKnByZWRlY2Vzc29yKS0+bml0ZW1zOworICAgICAgICAgICAgICAgICAgICAgICArK3ByZWRlY2Vzc29yX2l0ZW0pCisgICAgICAgICAgICAgICAgICAgIGlmICgoKnByZWRlY2Vzc29yKS0+aXRlbXNbcHJlZGVjZXNzb3JfaXRlbV0KKyAgICAgICAgICAgICAgICAgICAgICAgID09IHMtPml0ZW1zW2l0ZW1dIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGF2ZXIgKHByZWRlY2Vzc29yX2l0ZW0gIT0gKCpwcmVkZWNlc3NvciktPm5pdGVtcyk7CisgICAgICAgICAgICAgICAgICBpZWxyX2l0ZW1faGFzX2xvb2thaGVhZCAoKnByZWRlY2Vzc29yLCBsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JfaXRlbSwgMCAvKmlycmVsZXZhbnQqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvcnMsIGl0ZW1fbG9va2FoZWFkX3NldHMpOworICAgICAgICAgICAgICAgICAgYml0c2V0X29yIChpdGVtX2xvb2thaGVhZF9zZXRzW3MtPm51bWJlcl1baXRlbV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fbG9va2FoZWFkX3NldHNbcy0+bnVtYmVyXVtpdGVtXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9sb29rYWhlYWRfc2V0c1soKnByZWRlY2Vzc29yKS0+bnVtYmVyXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ByZWRlY2Vzc29yX2l0ZW1dKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgIHJldHVybiBiaXRzZXRfdGVzdCAoaXRlbV9sb29rYWhlYWRfc2V0c1tzLT5udW1iZXJdW2l0ZW1dLCBsb29rYWhlYWQpOworfQorCisvKioKKyAqIFxwcmUKKyAqICAgLSBcYyBmb2xsb3dfa2VybmVsX2l0ZW1zLCBcYyBhbHdheXNfZm9sbG93cywgYW5kIFxjIHByZWRlY2Vzc29ycworICogICAgIHdlcmUgY29tcHV0ZWQgYnkgXGMgaWVscl9jb21wdXRlX2F1eGlsaWFyeV90YWJsZXMuCisgKiBccG9zdAorICogICAtIEVhY2ggb2YgPHR0PippbmFkZXF1YWN5X2xpc3RzcDwvdHQ+IGFuZCA8dHQ+KmFubm90YXRpb25fbGlzdHNwPC90dD4KKyAqICAgICBwb2ludHMgdG8gYSBuZXcgYXJyYXkgb2Ygc2l6ZSBcYyA6Om5zdGF0ZXMuCisgKiAgIC0gRm9yIDx0dD4wIDw9IGkgPCA6Om5zdGF0ZXM8L3R0PjoKKyAqICAgICAtIDx0dD4oKmluYWRlcXVhY3lfbGlzdHNwKVtpXTwvdHQ+IGNvbnRhaW5zIHRoZSBcYyBJbmFkZXF1YWN5TGlzdCBoZWFkCisgKiAgICAgICBub2RlIGZvciA8dHQ+c3RhdGVzW2ldPC90dD4uCisgKiAgICAgLSA8dHQ+KCphbm5vdGF0aW9uX2xpc3RzcClbaV08L3R0PiBjb250YWlucyB0aGUgXGMgQW5ub3RhdGlvbkxpc3QgaGVhZAorICogICAgICAgbm9kZSBmb3IgPHR0PnN0YXRlc1tpXTwvdHQ+LgorICogICAtIDx0dD4qbWF4X2Fubm90YXRpb25zcDwvdHQ+IGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBhbm5vdGF0aW9ucyBwZXIKKyAqICAgICBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2llbHJfY29tcHV0ZV9hbm5vdGF0aW9uX2xpc3RzIChiaXRzZXR2IGZvbGxvd19rZXJuZWxfaXRlbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c2V0diBhbHdheXNfZm9sbG93cywgc3RhdGUgKioqcHJlZGVjZXNzb3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFubm90YXRpb25JbmRleCAqbWF4X2Fubm90YXRpb25zcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmFkZXF1YWN5TGlzdCAqKippbmFkZXF1YWN5X2xpc3RzcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbm5vdGF0aW9uTGlzdCAqKiphbm5vdGF0aW9uX2xpc3RzcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgb2JzdGFjayAqYW5ub3RhdGlvbnNfb2JzdGFja3ApCit7CisgIGJpdHNldCAqKml0ZW1fbG9va2FoZWFkX3NldHMgPQorICAgIHhubWFsbG9jIChuc3RhdGVzLCBzaXplb2YgKml0ZW1fbG9va2FoZWFkX3NldHMpOworICBBbm5vdGF0aW9uSW5kZXggKmFubm90YXRpb25fY291bnRzID0KKyAgICB4bm1hbGxvYyAobnN0YXRlcywgc2l6ZW9mICphbm5vdGF0aW9uX2NvdW50cyk7CisgIENvbnRyaWJ1dGlvbkluZGV4IG1heF9jb250cmlidXRpb25zID0gMDsKKyAgdW5zaWduZWQgaW50IHRvdGFsX2Fubm90YXRpb25zID0gMDsKKyAgc3RhdGVfbnVtYmVyIGk7CisKKyAgKmluYWRlcXVhY3lfbGlzdHNwID0geG5tYWxsb2MgKG5zdGF0ZXMsIHNpemVvZiAqKmluYWRlcXVhY3lfbGlzdHNwKTsKKyAgKmFubm90YXRpb25fbGlzdHNwID0geG5tYWxsb2MgKG5zdGF0ZXMsIHNpemVvZiAqKmFubm90YXRpb25fbGlzdHNwKTsKKyAgZm9yIChpID0gMDsgaSA8IG5zdGF0ZXM7ICsraSkKKyAgICB7CisgICAgICBpdGVtX2xvb2thaGVhZF9zZXRzW2ldID0gTlVMTDsKKyAgICAgICgqaW5hZGVxdWFjeV9saXN0c3ApW2ldID0gTlVMTDsKKyAgICAgICgqYW5ub3RhdGlvbl9saXN0c3ApW2ldID0gTlVMTDsKKyAgICAgIGFubm90YXRpb25fY291bnRzW2ldID0gMDsKKyAgICB9CisgIHsKKyAgICBJbmFkZXF1YWN5TGlzdE5vZGVDb3VudCBpbmFkZXF1YWN5X2xpc3Rfbm9kZV9jb3VudCA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8IG5zdGF0ZXM7ICsraSkKKyAgICAgIEFubm90YXRpb25MaXN0X19jb21wdXRlX2Zyb21faW5hZGVxdWFjaWVzICgKKyAgICAgICAgc3RhdGVzW2ldLCBmb2xsb3dfa2VybmVsX2l0ZW1zLCBhbHdheXNfZm9sbG93cywgcHJlZGVjZXNzb3JzLAorICAgICAgICBpdGVtX2xvb2thaGVhZF9zZXRzLCAqaW5hZGVxdWFjeV9saXN0c3AsICphbm5vdGF0aW9uX2xpc3RzcCwKKyAgICAgICAgYW5ub3RhdGlvbl9jb3VudHMsICZtYXhfY29udHJpYnV0aW9ucywgYW5ub3RhdGlvbnNfb2JzdGFja3AsCisgICAgICAgICZpbmFkZXF1YWN5X2xpc3Rfbm9kZV9jb3VudCk7CisgIH0KKyAgKm1heF9hbm5vdGF0aW9uc3AgPSAwOworICBmb3IgKGkgPSAwOyBpIDwgbnN0YXRlczsgKytpKQorICAgIHsKKyAgICAgIGlmIChhbm5vdGF0aW9uX2NvdW50c1tpXSA+ICptYXhfYW5ub3RhdGlvbnNwKQorICAgICAgICAqbWF4X2Fubm90YXRpb25zcCA9IGFubm90YXRpb25fY291bnRzW2ldOworICAgICAgdG90YWxfYW5ub3RhdGlvbnMgKz0gYW5ub3RhdGlvbl9jb3VudHNbaV07CisgICAgfQorICBpZiAodHJhY2VfZmxhZyAmIHRyYWNlX2llbHIpCisgICAgeworICAgICAgZm9yIChpID0gMDsgaSA8IG5zdGF0ZXM7ICsraSkKKyAgICAgICAgeworICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIkluYWRlcXVhY3kgYW5ub3RhdGlvbnMgZm9yIHN0YXRlICVkOlxuIiwgaSk7CisgICAgICAgICAgQW5ub3RhdGlvbkxpc3RfX2RlYnVnICgoKmFubm90YXRpb25fbGlzdHNwKVtpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlc1tpXS0+bml0ZW1zLCAyKTsKKyAgICAgICAgfQorICAgICAgZnByaW50ZiAoc3RkZXJyLCAiTnVtYmVyIG9mIExSKDApL0xBTFIoMSkgc3RhdGVzOiAlZFxuIiwgbnN0YXRlcyk7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJBdmVyYWdlIG51bWJlciBvZiBhbm5vdGF0aW9ucyBwZXIgc3RhdGU6ICVmXG4iLAorICAgICAgICAgICAgICAgKGZsb2F0KXRvdGFsX2Fubm90YXRpb25zL25zdGF0ZXMpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiTWF4IG51bWJlciBvZiBhbm5vdGF0aW9ucyBwZXIgc3RhdGU6ICVkXG4iLAorICAgICAgICAgICAgICAgKm1heF9hbm5vdGF0aW9uc3ApOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiTWF4IG51bWJlciBvZiBjb250cmlidXRpb25zIHBlciBhbm5vdGF0aW9uOiAlZFxuIiwKKyAgICAgICAgICAgICAgIG1heF9jb250cmlidXRpb25zKTsKKyAgICB9CisgIGZvciAoaSA9IDA7IGkgPCBuc3RhdGVzOyArK2kpCisgICAgaWYgKGl0ZW1fbG9va2FoZWFkX3NldHNbaV0pCisgICAgICB7CisgICAgICAgIHNpemVfdCBqOworICAgICAgICBmb3IgKGogPSAwOyBqIDwgc3RhdGVzW2ldLT5uaXRlbXM7ICsraikKKyAgICAgICAgICBpZiAoaXRlbV9sb29rYWhlYWRfc2V0c1tpXVtqXSkKKyAgICAgICAgICAgIGJpdHNldF9mcmVlIChpdGVtX2xvb2thaGVhZF9zZXRzW2ldW2pdKTsKKyAgICAgICAgZnJlZSAoaXRlbV9sb29rYWhlYWRfc2V0c1tpXSk7CisgICAgICB9CisgIGZyZWUgKGl0ZW1fbG9va2FoZWFkX3NldHMpOworICBmcmVlIChhbm5vdGF0aW9uX2NvdW50cyk7Cit9CisKK3R5cGVkZWYgc3RydWN0IHN0YXRlX2xpc3QgeworICBzdHJ1Y3Qgc3RhdGVfbGlzdCAqbmV4dDsKKyAgc3RhdGUgKnN0YXRlOworICAvKiogSGFzIHRoaXMgc3RhdGUgYmVlbiByZWNvbXB1dGVkIGFzIGEgc3VjY2Vzc29yIG9mIGFub3RoZXIgc3RhdGU/ICAqLworICBib29sIHJlY29tcHV0ZWRBc1N1Y2Nlc3NvcjsKKyAgLyoqCisgICAqIFxjIE5VTEwgaWZmIGFsbCBsb29rYWhlYWQgc2V0cyBhcmUgZW1wdHkuICA8dHQ+bG9va2FoZWFkc1tpXSA9IE5VTEw8L3R0PgorICAgKiBpZmYgdGhlIGxvb2thaGVhZCBzZXQgb24gaXRlbSBcYyBpIGlzIGVtcHR5LgorICAgKi8KKyAgYml0c2V0ICpsb29rYWhlYWRzOworICAvKioKKyAgICogbmV4dElzb2NvcmUgaXMgdGhlIG5leHQgc3RhdGUgaW4gYSBjaXJjdWxhcmx5IGxpbmtlZC1saXN0IG9mIGFsbCBzdGF0ZXMKKyAgICogd2l0aCB0aGUgc2FtZSBjb3JlLiAgVGhlIG9uZSBvcmlnaW5hbGx5IGNvbXB1dGVkIGJ5IGdlbmVyYXRlX3N0YXRlcyBpbgorICAgKiBMUjAuYyBpcyBscjBJc29jb3JlLgorICAgKi8KKyAgc3RydWN0IHN0YXRlX2xpc3QgKmxyMElzb2NvcmU7CisgIHN0cnVjdCBzdGF0ZV9saXN0ICpuZXh0SXNvY29yZTsKK30gc3RhdGVfbGlzdDsKKworLyoqCisgKiBccHJlCisgKiAgIC0gXGMgZm9sbG93X2tlcm5lbF9pdGVtcyBhbmQgXGMgYWx3YXlzX2ZvbGxvd3Mgd2VyZSBjb21wdXRlZCBieQorICogICAgIFxjIGllbHJfY29tcHV0ZV9hdXhpbGlhcnlfdGFibGVzLgorICogICAtIDx0dD5uLT5jbGFzcyA9IG50ZXJtX3N5bTwvdHQ+LgorICogXHBvc3QKKyAqICAgLSBcYyBmb2xsb3dfc2V0IGNvbnRhaW5zIHRoZSBmb2xsb3cgc2V0IGZvciB0aGUgZ290byBvbiBub250ZXJtaW5hbCBcYyBuCisgKiAgICAgaW4gc3RhdGUgXGMgcyBiYXNlZCBvbiB0aGUgbG9va2FoZWFkcyBzdG9yZWQgaW4gPHR0PnMtPmxvb2thaGVhZHM8L3R0Pi4KKyAqLworc3RhdGljIHZvaWQKK2llbHJfY29tcHV0ZV9nb3RvX2ZvbGxvd19zZXQgKGJpdHNldHYgZm9sbG93X2tlcm5lbF9pdGVtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNldHYgYWx3YXlzX2ZvbGxvd3MsIHN0YXRlX2xpc3QgKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2wgKm4sIGJpdHNldCBmb2xsb3dfc2V0KQoreworICBnb3RvX251bWJlciBuX2dvdG8gPSBtYXBfZ290byAocy0+bHIwSXNvY29yZS0+c3RhdGUtPm51bWJlciwgbi0+bnVtYmVyKTsKKyAgYml0c2V0X2NvcHkgKGZvbGxvd19zZXQsIGFsd2F5c19mb2xsb3dzW25fZ290b10pOworICBpZiAocy0+bG9va2FoZWFkcykKKyAgICB7CisgICAgICBiaXRzZXRfaXRlcmF0b3IgYml0ZXJfaXRlbTsKKyAgICAgIGJpdHNldF9iaW5kZXggaXRlbTsKKyAgICAgIEJJVFNFVF9GT1JfRUFDSCAoYml0ZXJfaXRlbSwgZm9sbG93X2tlcm5lbF9pdGVtc1tuX2dvdG9dLCBpdGVtLCAwKQorICAgICAgICBpZiAocy0+bG9va2FoZWFkc1tpdGVtXSkKKyAgICAgICAgICBiaXRzZXRfb3IgKGZvbGxvd19zZXQsIGZvbGxvd19zZXQsIHMtPmxvb2thaGVhZHNbaXRlbV0pOworICAgIH0KK30KKworLyoqCisgKiBccHJlCisgKiAgIC0gXGMgZm9sbG93X2tlcm5lbF9pdGVtcyBhbmQgXGMgYWx3YXlzX2ZvbGxvd3Mgd2VyZSBjb21wdXRlZCBieQorICogICAgIFxjIGllbHJfY29tcHV0ZV9hdXhpbGlhcnlfdGFibGVzLgorICogICAtIFxjIGxvb2thaGVhZF9maWx0ZXIgd2FzIGNvbXB1dGVkIGJ5CisgKiAgICAgXGMgQW5ub3RhdGlvbkxpc3RfX2NvbXB1dGVMb29rYWhlYWRGaWx0ZXIgZm9yIHRoZSBvcmlnaW5hbCBMUigwKSBpc29jb3JlCisgKiAgICAgb2YgXGMgdC4KKyAqICAgLSBUaGUgbnVtYmVyIG9mIHJvd3MgaW4gXGMgbG9va2FoZWFkcyBpcyBhdCBsZWFzdCB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluCisgKiAgICAgXGMgdCwgYW5kIHRoZSBudW1iZXIgb2YgY29sdW1ucyBpcyBcYyA6Om50b2tlbnMuCisgKiBccG9zdAorICogICAtIDx0dD5sb29rYWhlYWRzW2ldW2pdPC90dD4gaXMgc2V0IGlmZiBib3RoOgorICogICAgIC0gPHR0Pmxvb2thaGVhZF9maWx0ZXJbaV1bal08L3R0PiBpcyBzZXQuCisgKiAgICAgLSBUaGUgaXNvY29yZSBvZiBcYyB0IHRoYXQgd2lsbCBiZSB0aGUgdHJhbnNpdGlvbiBzdWNjZXNzb3Igb2YgXGMgcyB3aWxsCisgKiAgICAgICBpbmhlcml0IGZyb20gXGMgcyB0b2tlbiBcYyBqIGludG8gdGhlIGxvb2thaGVhZCBzZXQgb2YgaXRlbSBcYyBpLgorICovCitzdGF0aWMgdm9pZAoraWVscl9jb21wdXRlX2xvb2thaGVhZHMgKGJpdHNldHYgZm9sbG93X2tlcm5lbF9pdGVtcywgYml0c2V0diBhbHdheXNfZm9sbG93cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV9saXN0ICpzLCBzdGF0ZSAqdCwgYml0c2V0diBsb29rYWhlYWRfZmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNldHYgbG9va2FoZWFkcykKK3sKKyAgc2l6ZV90IHNfaXRlbSA9IDA7CisgIHNpemVfdCB0X2l0ZW07CisgIGJpdHNldHZfemVybyAobG9va2FoZWFkcyk7CisgIGZvciAodF9pdGVtID0gMDsgdF9pdGVtIDwgdC0+bml0ZW1zOyArK3RfaXRlbSkKKyAgICB7CisgICAgICAvKiBJZiB0aGlzIGtlcm5lbCBpdGVtIGlzIHRoZSBiZWdpbm5pbmcgb2YgYSBSSFMsIGl0IG11c3QgYmUgdGhlCisgICAgICAgICBrZXJuZWwgaXRlbSBpbiB0aGUgc3RhcnQgc3RhdGUsIGJ1dCB0IGlzIHN1cHBvc2VkIHRvIGJlIGEgc3VjY2Vzc29yCisgICAgICAgICBzdGF0ZS4gIElmLCBpbnN0ZWFkLCB0aGlzIGtlcm5lbCBpdGVtIGlzIHRoZSBzdWNjZXNzb3Igb2YgdGhlIHN0YXJ0CisgICAgICAgICBzdGF0ZSdzIGtlcm5lbCBpdGVtLCB0aGUgbG9va2FoZWFkIHNldCBpcyBlbXB0eS4gIFRoaXMgc2Vjb25kIGNhc2UgaXMKKyAgICAgICAgIGEgc3BlY2lhbCBjYXNlIHRvIGF2b2lkIHRoZSAtIDIgYmVsb3csIGJ1dCB0aGUgbmV4dCBzdWNjZXNzb3IgY2FuIGJlCisgICAgICAgICBoYW5kbGVkIGZpbmUgd2l0aG91dCBzcGVjaWFsIGNhc2luZyBpdC4gICovCisgICAgICBhdmVyICh0LT5pdGVtc1t0X2l0ZW1dICE9IDApOworICAgICAgaWYgKHQtPml0ZW1zW3RfaXRlbV0gPiAxCisgICAgICAgICAgJiYgIWJpdHNldF9lbXB0eV9wIChsb29rYWhlYWRfZmlsdGVyW3RfaXRlbV0pKQorICAgICAgICB7CisgICAgICAgICAgaWYgKGl0ZW1fbnVtYmVyX2lzX3J1bGVfbnVtYmVyIChyaXRlbVt0LT5pdGVtc1t0X2l0ZW1dIC0gMl0pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcnVsZV9pdGVtOworICAgICAgICAgICAgICBmb3IgKHJ1bGVfaXRlbSA9IHQtPml0ZW1zW3RfaXRlbV07CisgICAgICAgICAgICAgICAgICAgIWl0ZW1fbnVtYmVyX2lzX3J1bGVfbnVtYmVyIChyaXRlbVtydWxlX2l0ZW1dKTsKKyAgICAgICAgICAgICAgICAgICArK3J1bGVfaXRlbSkKKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICAgIGllbHJfY29tcHV0ZV9nb3RvX2ZvbGxvd19zZXQgKAorICAgICAgICAgICAgICAgIGZvbGxvd19rZXJuZWxfaXRlbXMsIGFsd2F5c19mb2xsb3dzLCBzLAorICAgICAgICAgICAgICAgIHJ1bGVzW2l0ZW1fbnVtYmVyX2FzX3J1bGVfbnVtYmVyIChyaXRlbVtydWxlX2l0ZW1dKV0ubGhzLAorICAgICAgICAgICAgICAgIGxvb2thaGVhZHNbdF9pdGVtXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAocy0+bG9va2FoZWFkcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogV2UgZG9uJ3QgaGF2ZSB0byBzdGFydCB0aGUgcyBpdGVtIHNlYXJjaCBhdCB0aGUgYmVnaW5uaW5nCisgICAgICAgICAgICAgICAgIGV2ZXJ5IHRpbWUgYmVjYXVzZSBpdGVtcyBmcm9tIGJvdGggc3RhdGVzIGFyZSBzb3J0ZWQgYnkgdGhlaXIKKyAgICAgICAgICAgICAgICAgaW5kaWNlcyBpbiByaXRlbS4gICovCisgICAgICAgICAgICAgIGZvciAoOyBzX2l0ZW0gPCBzLT5zdGF0ZS0+bml0ZW1zOyArK3NfaXRlbSkKKyAgICAgICAgICAgICAgICBpZiAocy0+c3RhdGUtPml0ZW1zW3NfaXRlbV0gPT0gdC0+aXRlbXNbdF9pdGVtXSAtIDEpCisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgYXZlciAoc19pdGVtICE9IHMtPnN0YXRlLT5uaXRlbXMpOworICAgICAgICAgICAgICBpZiAocy0+bG9va2FoZWFkc1tzX2l0ZW1dKQorICAgICAgICAgICAgICAgIGJpdHNldF9jb3B5IChsb29rYWhlYWRzW3RfaXRlbV0sIHMtPmxvb2thaGVhZHNbc19pdGVtXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgYml0c2V0X2FuZCAobG9va2FoZWFkc1t0X2l0ZW1dLAorICAgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZHNbdF9pdGVtXSwgbG9va2FoZWFkX2ZpbHRlclt0X2l0ZW1dKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLyoqCisgKiBccHJlCisgKiAgIC0gXGMgZm9sbG93X2tlcm5lbF9pdGVtcyBhbmQgXGMgYWx3YXlzX2ZvbGxvd3Mgd2VyZSBjb21wdXRlZCBieQorICogICAgIFxjIGllbHJfY29tcHV0ZV9hdXhpbGlhcnlfdGFibGVzLgorICogICAtIEVpdGhlcjoKKyAqICAgICAtIDx0dD5hbm5vdGF0aW9uX2xpc3RzID0gTlVMTDwvdHQ+IGFuZCBhbGwgYml0cyBpbiB3b3JrMiBhcmUgc2V0LgorICogICAgIC0gXGMgYW5ub3RhdGlvbl9saXN0cyB3YXMgY29tcHV0ZWQgYnkgXGMgaWVscl9jb21wdXRlX2Fubm90YXRpb25fbGlzdHMuCisgKiAgIC0gVGhlIG51bWJlciBvZiByb3dzIGluIGVhY2ggb2YgXGMgbG9va2FoZWFkcyBhbmQgXGMgd29yazIgaXMgdGhlIG1heGltdW0KKyAqICAgICBudW1iZXIgb2YgaXRlbXMgaW4gYW55IHN0YXRlLiAgVGhlIG51bWJlciBvZiBjb2x1bW5zIGluIGVhY2ggaXMKKyAqICAgICBcYyA6Om50b2tlbnMuCisgKiAgIC0gXGMgbG9va2FoZWFkcyB3YXMgY29tcHV0ZWQgYnkgXGMgaWVscl9jb21wdXRlX2xvb2thaGVhZHMgZm9yIFxjIHQuCisgKiAgIC0gXGMgOjpuc3RhdGVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2Ygc3RhdGVzLCBzb21lIG5vdCB5ZXQgZnVsbHkgY29tcHV0ZWQsCisgKiAgICAgaW4gdGhlIGxpc3QgZW5kaW5nIGF0IFxjICpsYXN0X3N0YXRlcC4gIEl0IGlzIGF0IGxlYXN0IHRoZSBudW1iZXIgb2YKKyAqICAgICBvcmlnaW5hbCBMUigwKSBzdGF0ZXMuCisgKiAgIC0gVGhlIHNpemUgb2YgXGMgd29yazEgaXMgYXQgbGVhc3QgdGhlIG51bWJlciBvZiBhbm5vdGF0aW9ucyBmb3IgdGhlIExSKDApCisgKiAgICAgaXNvY29yZSBvZiBcYyB0LgorICogXHBvc3QKKyAqICAgLSBFaXRoZXI6CisgKiAgICAgLSBJbiB0aGUgY2FzZSB0aGF0IDx0dD5hbm5vdGF0aW9uX2xpc3RzICE9IE5VTEw8L3R0PiwKKyAqICAgICAgIDx0dD5sb29rYWhlYWRzIFxAcHJlPC90dD4gd2FzIG1lcmdlZCB3aXRoIHNvbWUgaXNvY29yZSBvZiBcYyB0IGlmCisgKiAgICAgICBwZXJtaXR0ZWQgYnkgdGhlIGFubm90YXRpb25zIGZvciB0aGUgb3JpZ2luYWwgTFIoMCkgaXNvY29yZSBvZiBcYyB0LgorICogICAgICAgSWYgdGhpcyBjaGFuZ2VkIHRoZSBsb29rYWhlYWRzIGluIHRoYXQgaXNvY29yZSwgdGhvc2UgY2hhbmdlcyB3ZXJlCisgKiAgICAgICBwcm9wYWdhdGVkIHRvIGFsbCBhbHJlYWR5IGNvbXB1dGVkIHRyYW5zaXRpb24gc3VjY2Vzc29ycyByZWN1cnNpdmVseQorICogICAgICAgcG9zc2libHkgcmVzdWx0aW5nIGluIHRoZSBzcGxpdHRpbmcgb2Ygc29tZSBvZiB0aG9zZSBzdWNjZXNzb3JzLgorICogICAgIC0gSW4gdGhlIGNhc2UgdGhhdCA8dHQ+YW5ub3RhdGlvbl9saXN0cyA9IE5VTEw8L3R0PiwKKyAqICAgICAgIDx0dD5sb29rYWhlYWRzIFxAcHJlPC90dD4gd2FzIG1lcmdlZCB3aXRoIHNvbWUgaXNvY29yZSBvZiBcYyB0IGlmIHRoZQorICogICAgICAgaXNvY29yZSdzIGxvb2thaGVhZCBzZXRzIHdlcmUgaWRlbnRpY2FsIHRvIHRob3NlIHNwZWNpZmllZCBieQorICogICAgICAgPHR0Pmxvb2thaGVhZHMgXEBwcmU8L3R0Pi4KKyAqICAgICAtIElmIG5vIHN1Y2ggbWVyZ2Ugd2FzIHBlcm1pdHRlZCwgYSBuZXcgaXNvY29yZSBvZiBcYyB0IGNvbnRhaW5pbmcKKyAqICAgICAgIDx0dD5sb29rYWhlYWRzIFxAcHJlPC90dD4gd2FzIGFwcGVuZGVkIHRvIHRoZSBzdGF0ZSBsaXN0IHdob3NlCisgKiAgICAgICBwcmV2aW91cyB0YWlsIHdhcyA8dHQ+Kmxhc3Rfc3RhdGVwIFxAcHJlPC90dD4gYW5kIFxjIDo6bnN0YXRlcyB3YXMKKyAqICAgICAgIGluY3JlbWVudGVkLiAgSXQgd2FzIGFsc28gYXBwZW5kZWQgdG8gXGMgdCdzIGlzb2NvcmUgbGlzdC4KKyAqICAgLSA8dHQ+KnRwPC90dD4gPSB0aGUgaXNvY29yZSBvZiBcYyB0IGludG8gd2hpY2gKKyAqICAgICA8dHQ+bG9va2FoZWFkcyBcQHByZTwvdHQ+IHdhcyBwbGFjZWQvbWVyZ2VkLgorICogICAtIFxjIGxvb2thaGVhZHMsIFxjIHdvcmsxLCBhbmQgXGMgd29yazIgbWF5IGhhdmUgYmVlbiBhbHRlcmVkLgorICovCitzdGF0aWMgdm9pZAoraWVscl9jb21wdXRlX3N0YXRlIChiaXRzZXR2IGZvbGxvd19rZXJuZWxfaXRlbXMsIGJpdHNldHYgYWx3YXlzX2ZvbGxvd3MsCisgICAgICAgICAgICAgICAgICAgIEFubm90YXRpb25MaXN0ICoqYW5ub3RhdGlvbl9saXN0cywgc3RhdGUgKnQsCisgICAgICAgICAgICAgICAgICAgIGJpdHNldHYgbG9va2FoZWFkcywgc3RhdGVfbGlzdCAqKmxhc3Rfc3RhdGVwLAorICAgICAgICAgICAgICAgICAgICBDb250cmlidXRpb25JbmRleCB3b3JrMVtdLCBiaXRzZXR2IHdvcmsyLCBzdGF0ZSAqKnRwKQoreworICBzdGF0ZV9saXN0ICpscjBfaXNvY29yZSA9IHQtPnN0YXRlX2xpc3QtPmxyMElzb2NvcmU7CisgIHN0YXRlX2xpc3QgKip0aGlzX2lzb2NvcmVwOworICBib29sIGhhc19sb29rYWhlYWRzOworCisgIC8qIERldGVybWluZSB3aGV0aGVyIHRoZXJlJ3MgYW4gaXNvY29yZSBvZiB0IHdpdGggd2hpY2ggdGhlc2UgbG9va2FoZWFkcyBjYW4KKyAgICAgYmUgbWVyZ2VkLiAgKi8KKyAgeworICAgIEFubm90YXRpb25JbmRleCBhaTsKKyAgICBBbm5vdGF0aW9uTGlzdCAqYTsKKyAgICBpZiAoYW5ub3RhdGlvbl9saXN0cykKKyAgICAgIGZvciAoYWkgPSAwLCBhID0gYW5ub3RhdGlvbl9saXN0c1tscjBfaXNvY29yZS0+c3RhdGUtPm51bWJlcl07CisgICAgICAgICAgIGE7CisgICAgICAgICAgICsrYWksIGEgPSBhLT5uZXh0KQorICAgICAgICB3b3JrMVthaV0gPQorICAgICAgICAgIEFubm90YXRpb25MaXN0X19jb21wdXRlRG9taW5hbnRDb250cmlidXRpb24gKAorICAgICAgICAgICAgYSwgbHIwX2lzb2NvcmUtPnN0YXRlLT5uaXRlbXMsIGxvb2thaGVhZHMsIGZhbHNlKTsKKyAgICBmb3IgKHRoaXNfaXNvY29yZXAgPSAmdC0+c3RhdGVfbGlzdDsKKyAgICAgICAgIHRoaXNfaXNvY29yZXAgPT0gJnQtPnN0YXRlX2xpc3QgfHwgKnRoaXNfaXNvY29yZXAgIT0gdC0+c3RhdGVfbGlzdDsKKyAgICAgICAgIHRoaXNfaXNvY29yZXAgPSAmKCp0aGlzX2lzb2NvcmVwKS0+bmV4dElzb2NvcmUpCisgICAgICB7CisgICAgICAgIGlmICghKCp0aGlzX2lzb2NvcmVwKS0+cmVjb21wdXRlZEFzU3VjY2Vzc29yKQorICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoYW5ub3RhdGlvbl9saXN0cykKKyAgICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGFpID0gMCwgYSA9IGFubm90YXRpb25fbGlzdHNbbHIwX2lzb2NvcmUtPnN0YXRlLT5udW1iZXJdOworICAgICAgICAgICAgICAgICBhOworICAgICAgICAgICAgICAgICArK2FpLCBhID0gYS0+bmV4dCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICh3b3JrMVthaV0gIT0gQ29udHJpYnV0aW9uSW5kZXhfX25vbmUpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgaXNvY29yZSBjb21wYXRpYmlsaXR5IHRlc3QgZGVwZW5kcyBvbiB0aGUgZmFjdAorICAgICAgICAgICAgICAgICAgICAgICB0aGF0LCBpZiB0aGUgZG9taW5hbnQgY29udHJpYnV0aW9ucyBhcmUgdGhlIHNhbWUgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICB0d28gaXNvY29yZXMsIHRoZW4gbWVyZ2luZyB0aGVpciBsb29rYWhlYWQgc2V0cyB3aWxsIG5vdAorICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWNlIGEgc3RhdGUgd2l0aCBhIGRpZmZlcmVudCBkb21pbmFudCBjb250cmlidXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIENvbnRyaWJ1dGlvbkluZGV4IGNpID0KKyAgICAgICAgICAgICAgICAgICAgICBBbm5vdGF0aW9uTGlzdF9fY29tcHV0ZURvbWluYW50Q29udHJpYnV0aW9uICgKKyAgICAgICAgICAgICAgICAgICAgICAgIGEsIGxyMF9pc29jb3JlLT5zdGF0ZS0+bml0ZW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgKCp0aGlzX2lzb2NvcmVwKS0+bG9va2FoZWFkcywgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBpZiAoY2kgIT0gQ29udHJpYnV0aW9uSW5kZXhfX25vbmUgJiYgd29yazFbYWldICE9IGNpKQorICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWEpCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHNpemVfdCBpOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHQtPm5pdGVtczsgKytpKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCEoKnRoaXNfaXNvY29yZXApLT5sb29rYWhlYWRzCisgICAgICAgICAgICAgICAgICAgIHx8ICEoKnRoaXNfaXNvY29yZXApLT5sb29rYWhlYWRzW2ldKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWJpdHNldF9lbXB0eV9wIChsb29rYWhlYWRzW2ldKSkKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBiaXRzZXRfZXF1YWxfcCB1c2VzIHRoZSBzaXplIG9mIHRoZSBmaXJzdCBhcmd1bWVudCwKKyAgICAgICAgICAgICAgICAgICBzbyBsb29rYWhlYWRzW2ldIG11c3QgYmUgdGhlIHNlY29uZCBhcmd1bWVudC4gICovCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWJpdHNldF9lcXVhbF9wICgoKnRoaXNfaXNvY29yZXApLT5sb29rYWhlYWRzW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkc1tpXSkpCisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGkgPT0gdC0+bml0ZW1zKQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICB9CisgIH0KKworICBoYXNfbG9va2FoZWFkcyA9IGZhbHNlOworICB7CisgICAgc2l6ZV90IGk7CisgICAgZm9yIChpID0gMDsgaSA8IGxyMF9pc29jb3JlLT5zdGF0ZS0+bml0ZW1zOyArK2kpCisgICAgICBpZiAoIWJpdHNldF9lbXB0eV9wIChsb29rYWhlYWRzW2ldKSkKKyAgICAgICAgeworICAgICAgICAgIGhhc19sb29rYWhlYWRzID0gdHJ1ZTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICB9CisKKyAgLyogTWVyZ2Ugd2l0aCBhbiBleGlzdGluZyBpc29jb3JlLiAgKi8KKyAgaWYgKHRoaXNfaXNvY29yZXAgPT0gJnQtPnN0YXRlX2xpc3QgfHwgKnRoaXNfaXNvY29yZXAgIT0gdC0+c3RhdGVfbGlzdCkKKyAgICB7CisgICAgICBib29sIG5ld19sb29rYWhlYWRzID0gZmFsc2U7CisgICAgICAqdHAgPSAoKnRoaXNfaXNvY29yZXApLT5zdGF0ZTsKKworICAgICAgLyogTWVyZ2UgbG9va2FoZWFkcyBpbnRvIHRoZSBzdGF0ZSBhbmQgcmVjb3JkIHdoZXRoZXIgYW55IG9mIHRoZW0gYXJlCisgICAgICAgICBhY3R1YWxseSBuZXcuICAqLworICAgICAgaWYgKGhhc19sb29rYWhlYWRzKQorICAgICAgICB7CisgICAgICAgICAgc2l6ZV90IGk7CisgICAgICAgICAgaWYgKCEoKnRoaXNfaXNvY29yZXApLT5sb29rYWhlYWRzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAoKnRoaXNfaXNvY29yZXApLT5sb29rYWhlYWRzID0KKyAgICAgICAgICAgICAgICB4bm1hbGxvYyAodC0+bml0ZW1zLCBzaXplb2YgKCp0aGlzX2lzb2NvcmVwKS0+bG9va2FoZWFkcyk7CisgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0LT5uaXRlbXM7ICsraSkKKyAgICAgICAgICAgICAgICAoKnRoaXNfaXNvY29yZXApLT5sb29rYWhlYWRzW2ldID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdC0+bml0ZW1zOyArK2kpCisgICAgICAgICAgICBpZiAoIWJpdHNldF9lbXB0eV9wIChsb29rYWhlYWRzW2ldKSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghKCp0aGlzX2lzb2NvcmVwKS0+bG9va2FoZWFkc1tpXSkKKyAgICAgICAgICAgICAgICAgICgqdGhpc19pc29jb3JlcCktPmxvb2thaGVhZHNbaV0gPQorICAgICAgICAgICAgICAgICAgICBiaXRzZXRfY3JlYXRlIChudG9rZW5zLCBCSVRTRVRfRklYRUQpOworICAgICAgICAgICAgICAgIGJpdHNldF9hbmRuIChsb29rYWhlYWRzW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWRzW2ldLCAoKnRoaXNfaXNvY29yZXApLT5sb29rYWhlYWRzW2ldKTsKKyAgICAgICAgICAgICAgICBiaXRzZXRfb3IgKCgqdGhpc19pc29jb3JlcCktPmxvb2thaGVhZHNbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWRzW2ldLCAoKnRoaXNfaXNvY29yZXApLT5sb29rYWhlYWRzW2ldKTsKKyAgICAgICAgICAgICAgICBpZiAoIWJpdHNldF9lbXB0eV9wIChsb29rYWhlYWRzW2ldKSkKKyAgICAgICAgICAgICAgICAgIG5ld19sb29rYWhlYWRzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIC8qIElmIG5ldyBsb29rYWhlYWRzIHdlcmUgbWVyZ2VkLCBwcm9wYWdhdGUgdGhvc2UgbG9va2FoZWFkcyB0byB0aGUKKyAgICAgICAgIHN1Y2Nlc3NvcnMsIHBvc3NpYmx5IHNwbGl0dGluZyB0aGVtLiAgSWYgKnRwIGlzIGJlaW5nIHJlY29tcHV0ZWQgZm9yCisgICAgICAgICB0aGUgZmlyc3QgdGltZSwgdGhpcyBpc24ndCBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgbWFpbgorICAgICAgICAgaWVscl9zcGxpdF9zdGF0ZXMgbG9vcCB3aWxsIGhhbmRsZSB0aGUgc3VjY2Vzc29ycyBsYXRlci4gICovCisgICAgICBpZiAoISgqdGhpc19pc29jb3JlcCktPnJlY29tcHV0ZWRBc1N1Y2Nlc3NvcikKKyAgICAgICAgKCp0aGlzX2lzb2NvcmVwKS0+cmVjb21wdXRlZEFzU3VjY2Vzc29yID0gdHJ1ZTsKKyAgICAgIGVsc2UgaWYgKG5ld19sb29rYWhlYWRzKQorICAgICAgICB7CisgICAgICAgICAgaW50IGk7CisgICAgICAgICAgLyogV2hlbiBtZXJnaW5nIGRlbWFuZHMgaWRlbnRpY2FsIGxvb2thaGVhZCBzZXRzLCBpdCBpcyBpbXBvc3NpYmxlIHRvCisgICAgICAgICAgICAgbWVyZ2UgbmV3IGxvb2thaGVhZHMuICAqLworICAgICAgICAgIGF2ZXIgKGFubm90YXRpb25fbGlzdHMpOworICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAoKnRwKS0+dHJhbnNpdGlvbnMtPm51bTsgKytpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzdGF0ZSAqdDIgPSAoKnRwKS0+dHJhbnNpdGlvbnMtPnN0YXRlc1tpXTsKKyAgICAgICAgICAgICAgLyogQXQgYW55IHRpbWUsIHRoZXJlJ3MgYXQgbW9zdCBvbmUgc3RhdGUgZm9yIHdoaWNoIHdlIGhhdmUgc28KKyAgICAgICAgICAgICAgICAgZmFyIGluaXRpYWxseSByZWNvbXB1dGVkIG9ubHkgc29tZSBvZiBpdHMgc3VjY2Vzc29ycyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgbWFpbiBpZWxyX3NwbGl0X3N0YXRlcyBsb29wLiAgQmVjYXVzZSB3ZSByZWNvbXB1dGUgc3VjY2Vzc29ycworICAgICAgICAgICAgICAgICBpbiBvcmRlciwgd2UgY2FuIGp1c3Qgc3RvcCBhdCB0aGUgZmlyc3Qgc3VjaCBzdWNjZXNzb3IuICBPZgorICAgICAgICAgICAgICAgICBjb3Vyc2UsICp0cCBtaWdodCBiZSBhIHN0YXRlIHNvbWUgb2Ygd2hvc2Ugc3VjY2Vzc29ycyBoYXZlCisgICAgICAgICAgICAgICAgIGJlZW4gcmVjb21wdXRlZCBhcyBzdWNjZXNzb3JzIG9mIG90aGVyIHN0YXRlcyByYXRoZXIgdGhhbiBhcworICAgICAgICAgICAgICAgICBzdWNjZXNzb3JzIG9mICp0cC4gIEl0J3MgZmluZSBpZiB3ZSBnbyBhaGVhZCBhbmQgcHJvcGFnYXRlIHRvCisgICAgICAgICAgICAgICAgIHNvbWUgb2YgdGhvc2UuICBXZSdsbCBwcm9wYWdhdGUgdG8gdGhlbSBhZ2FpbiAoYnV0IHN0b3Agd2hlbgorICAgICAgICAgICAgICAgICB3ZSBzZWUgbm90aGluZyBjaGFuZ2VzKSBhbmQgdG8gdGhlIG90aGVycyB3aGVuIHdlIHJlYWNoICp0cCBpbgorICAgICAgICAgICAgICAgICB0aGUgbWFpbiBpZWxyX3NwbGl0X3N0YXRlcyBsb29wIGxhdGVyLiAgKi8KKyAgICAgICAgICAgICAgaWYgKCF0Mi0+c3RhdGVfbGlzdC0+cmVjb21wdXRlZEFzU3VjY2Vzc29yKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBBbm5vdGF0aW9uTGlzdF9fY29tcHV0ZUxvb2thaGVhZEZpbHRlciAoCisgICAgICAgICAgICAgICAgYW5ub3RhdGlvbl9saXN0c1t0Mi0+c3RhdGVfbGlzdC0+bHIwSXNvY29yZS0+c3RhdGUtPm51bWJlcl0sCisgICAgICAgICAgICAgICAgdDItPm5pdGVtcywgd29yazIpOworICAgICAgICAgICAgICBpZWxyX2NvbXB1dGVfbG9va2FoZWFkcyAoZm9sbG93X2tlcm5lbF9pdGVtcywgYWx3YXlzX2ZvbGxvd3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKnRoaXNfaXNvY29yZXApLCB0Miwgd29yazIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWRzKTsKKyAgICAgICAgICAgICAgLyogRklYTUU6IElmIHNwbGl0dGluZyB0MiBoZXJlLCBpdCdzIHBvc3NpYmxlIHRoYXQgbG9va2FoZWFkcworICAgICAgICAgICAgICAgICB0aGF0IGhhZCBhbHJlYWR5IHByb3BhZ2F0ZWQgZnJvbSAqdHAgdG8gdDIgd2lsbCBiZSBsZWZ0IGluIHQyCisgICAgICAgICAgICAgICAgIGFmdGVyICp0cCBoYXMgYmVlbiByZW1vdmVkIGFzIHQyJ3MgcHJlZGVjZXNzb3I6CisgICAgICAgICAgICAgICAgIC0gV2UncmUgZ29pbmcgdG8gcmVjb21wdXRlIGFsbCBsb29rYWhlYWRzIGluIHBoYXNlIDQsIHNvIHRoZXNlCisgICAgICAgICAgICAgICAgICAgZXh0cmEgbG9va2FoZWFkcyB3b24ndCBhcHBlYXIgaW4gdGhlIGZpbmFsIHBhcnNlciB0YWJsZS4KKyAgICAgICAgICAgICAgICAgLSBJZiB0MiBoYXMganVzdCBvbmUgYW5ub3RhdGlvbiwgdGhlbiB0aGVzZSBleHRyYSBsb29rYWhlYWRzCisgICAgICAgICAgICAgICAgICAgY2Fubm90IGFsdGVyIHRoZSBkb21pbmF0aW5nIGNvbnRyaWJ1dGlvbiB0byB0aGUgYXNzb2NpYXRlZAorICAgICAgICAgICAgICAgICAgIGluYWRlcXVhY3kgYW5kIHRodXMgY2Fubm90IG5lZWRsZXNzbHkgcHJldmVudCBhIGZ1dHVyZSBtZXJnZQorICAgICAgICAgICAgICAgICAgIG9mIHNvbWUgbmV3IHN0YXRlIHdpdGggdDIuICBXZSBjYW4gYmUgc3VyZSBvZiB0aGlzIGJlY2F1c2U6CisgICAgICAgICAgICAgICAgICAgLSBUaGUgZmFjdCB0aGF0IHdlJ3JlIHNwbGl0dGluZyB0MiBub3cgbWVhbnMgdGhhdCBzb21lCisgICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvcnMgKGF0IGxlYXN0IG9uZSkgb3RoZXIgdGhhbiAqdHAgbXVzdCBiZQorICAgICAgICAgICAgICAgICAgICAgcHJvcGFnYXRpbmcgY29udHJpYnV0aW9ucyB0byB0Mi4KKyAgICAgICAgICAgICAgICAgICAtIFRoZSBmYWN0IHRoYXQgdDIgd2FzIG1lcmdlZCBpbiB0aGUgZmlyc3QgcGxhY2UgbWVhbnMgdGhhdCwKKyAgICAgICAgICAgICAgICAgICAgIGlmICp0cCBwcm9wYWdhdGVkIGFueSBjb250cmlidXRpb25zLCB0aGUgZG9taW5hdGluZworICAgICAgICAgICAgICAgICAgICAgY29udHJpYnV0aW9uIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhhdCBmcm9tIHRob3NlIG90aGVyCisgICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvcnMuCisgICAgICAgICAgICAgICAgICAgLSBUaHVzLCBpZiBzb21lIG5ldyBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCB0MiBpbiB0aGUgZnV0dXJlCisgICAgICAgICAgICAgICAgICAgICBwcm92ZXMgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250cmlidXRpb25zIHByb3BhZ2F0ZWQKKyAgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBvdGhlciBwcmVkZWNlc3NvcnMsIGl0IHdpbGwgYWxzbyBiZSBjb21wYXRpYmxlIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgIHRoZSBjb250cmlidXRpb25zIG1hZGUgYnkgdGhlIGV4dHJhIGxvb2thaGVhZHMgbGVmdCBiZWhpbmQKKyAgICAgICAgICAgICAgICAgICAgIGJ5ICp0cC4KKyAgICAgICAgICAgICAgICAgLSBIb3dldmVyLCBpZiB0MiBoYXMgbW9yZSB0aGFuIG9uZSBhbm5vdGF0aW9uIGFuZCB0aGVzZSBleHRyYQorICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZHMgY29udHJpYnV0ZSB0byBvbmUgb2YgdGhlaXIgaW5hZGVxdWFjaWVzLCBpdCdzCisgICAgICAgICAgICAgICAgICAgcG9zc2libGUgdGhlc2UgZXh0cmEgbG9va2FoZWFkcyBtYXkgbmVlZGxlc3NseSBwcmV2ZW50IGEKKyAgICAgICAgICAgICAgICAgICBmdXR1cmUgbWVyZ2Ugd2l0aCB0Mi4gIEZvciBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgIC0gTGV0J3Mgc2F5IHRoZXJlJ3MgYW4gaW5hZGVxdWFjeSBBIHRoYXQgbWFrZXMgdGhlIHNwbGl0CisgICAgICAgICAgICAgICAgICAgICBuZWNlc3NhcnkgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgIC0gVGhlcmUncyBjdXJyZW50bHkganVzdCBvbmUgb3RoZXIgcHJlZGVjZXNzb3IgYW5kIGl0CisgICAgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZXMgdG8gdDIgc29tZSBjb250cmlidXRpb25zIHRvIGluYWRlcXVhY3kgQS4KKyAgICAgICAgICAgICAgICAgICAgIC0gVGhlIG5ldyBsb29rYWhlYWRzIHRoYXQgd2Ugd2VyZSBhdHRlbXB0aW5nIHRvIHByb3BhZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICBmcm9tICp0cCB0byB0MiBtYWRlIGNvbnRyaWJ1dGlvbnMgdG8gaW5hZGVxdWFjeSBBIHdpdGggYQorICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbnQgZG9taW5hdGluZyBjb250cmlidXRpb24gdGhhbiB0aG9zZSBmcm9tIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIgcHJlZGVjZXNzb3IuCisgICAgICAgICAgICAgICAgICAgICAtIFRoZSBleHRyYSBsb29rYWhlYWRzIGVpdGhlciBtYWtlIG5vIGNvbnRyaWJ1dGlvbiB0bworICAgICAgICAgICAgICAgICAgICAgICBpbmFkZXF1YWN5IEEgb3IgaGF2ZSB0aGUgc2FtZSBkb21pbmF0aW5nIGNvbnRyaWJ1dGlvbiBhcworICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29udHJpYnV0aW9ucyBmcm9tIHRoZSBvdGhlciBwcmVkZWNlc3Nvci4gIEVpdGhlcgorICAgICAgICAgICAgICAgICAgICAgICB3YXksIGFzIGV4cGxhaW5lZCBhYm92ZSwgdGhleSBjYW4ndCBwcmV2ZW50IGEgZnV0dXJlCisgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlLgorICAgICAgICAgICAgICAgICAgIC0gTGV0J3Mgc2F5IHRoZXJlJ3MgYW4gaW5hZGVxdWFjeSBCIHRoYXQgY2F1c2VzIHRoZSB0cm91YmxlCisgICAgICAgICAgICAgICAgICAgICB3aXRoIGZ1dHVyZSBtZXJnZXMgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgIC0gVGhlIGV4dHJhIGxvb2thaGVhZHMgbWFrZSBjb250cmlidXRpb25zIHRvIGluYWRlcXVhY3kgQi4KKyAgICAgICAgICAgICAgICAgICAgIC0gVGhvc2UgZXh0cmEgY29udHJpYnV0aW9ucyBkaWQgbm90IHByZXZlbnQgdGhlIG9yaWdpbmFsCisgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlIHRvIGNyZWF0ZSB0MiBiZWNhdXNlIHRoZSBvdGhlciBwcmVkZWNlc3NvcgorICAgICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGVzIHRvIHQyIG5vIGNvbnRyaWJ1dGlvbnMgdG8gaW5hZGVxdWFjeSBCLgorICAgICAgICAgICAgICAgICAgICAgLSBUaHVzLCB0aG9zZSBleHRyYSBjb250cmlidXRpb25zIG1heSBwcmV2ZW50IGEgZnV0dXJlCisgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlIHdpdGggdDIgZXZlbiB0aG91Z2ggdGhlIG1lcmdlIHdvdWxkIGJlIGZpbmUgaWYgKnRwCisgICAgICAgICAgICAgICAgICAgICAgIGhhZCBub3QgbGVmdCB0aGVtIGJlaGluZC4KKyAgICAgICAgICAgICAgICAgLSBJcyB0aGUgbGF0dGVyIGNhc2UgY29tbW9uIGVub3VnaCB0byB3b3JyeSBhYm91dD8KKyAgICAgICAgICAgICAgICAgLSBQZXJoYXBzIHdlIHNob3VsZCB0cmFjayBhbGwgcHJlZGVjZXNzb3JzIGFuZCBpdGVyYXRlIHRoZW0KKyAgICAgICAgICAgICAgICAgICBub3cgdG8gcmVjcmVhdGUgdDIgd2l0aG91dCB0aG9zZSBleHRyYSBsb29rYWhlYWRzLiAgKi8KKyAgICAgICAgICAgICAgaWVscl9jb21wdXRlX3N0YXRlIChmb2xsb3dfa2VybmVsX2l0ZW1zLCBhbHdheXNfZm9sbG93cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uX2xpc3RzLCB0MiwgbG9va2FoZWFkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3N0YXRlcCwgd29yazEsIHdvcmsyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoKnRwKS0+dHJhbnNpdGlvbnMtPnN0YXRlc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgLyogQ3JlYXRlIGEgbmV3IGlzb2NvcmUuICAqLworICBlbHNlCisgICAgeworICAgICAgc3RhdGVfbGlzdCAqb2xkX2lzb2NvcmUgPSAqdGhpc19pc29jb3JlcDsKKyAgICAgICgqbGFzdF9zdGF0ZXApLT5uZXh0ID0gKnRoaXNfaXNvY29yZXAgPSB4bWFsbG9jIChzaXplb2YgKipsYXN0X3N0YXRlcCk7CisgICAgICAqbGFzdF9zdGF0ZXAgPSAqdGhpc19pc29jb3JlcDsKKyAgICAgICgqbGFzdF9zdGF0ZXApLT5zdGF0ZSA9ICp0cCA9IHN0YXRlX25ld19pc29jb3JlICh0KTsKKyAgICAgICgqdHApLT5zdGF0ZV9saXN0ID0gKmxhc3Rfc3RhdGVwOworICAgICAgKCpsYXN0X3N0YXRlcCktPnJlY29tcHV0ZWRBc1N1Y2Nlc3NvciA9IHRydWU7CisgICAgICAoKmxhc3Rfc3RhdGVwKS0+bmV4dCA9IE5VTEw7CisgICAgICAoKmxhc3Rfc3RhdGVwKS0+bG9va2FoZWFkcyA9IE5VTEw7CisgICAgICBpZiAoaGFzX2xvb2thaGVhZHMpCisgICAgICAgIHsKKyAgICAgICAgICBzaXplX3QgaTsKKyAgICAgICAgICAoKmxhc3Rfc3RhdGVwKS0+bG9va2FoZWFkcyA9CisgICAgICAgICAgICB4bm1hbGxvYyAodC0+bml0ZW1zLCBzaXplb2YgKCpsYXN0X3N0YXRlcCktPmxvb2thaGVhZHMpOworICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0LT5uaXRlbXM7ICsraSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKGJpdHNldF9lbXB0eV9wIChsb29rYWhlYWRzW2ldKSkKKyAgICAgICAgICAgICAgICAoKmxhc3Rfc3RhdGVwKS0+bG9va2FoZWFkc1tpXSA9IE5VTEw7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAoKmxhc3Rfc3RhdGVwKS0+bG9va2FoZWFkc1tpXSA9CisgICAgICAgICAgICAgICAgICAgIGJpdHNldF9jcmVhdGUgKG50b2tlbnMsIEJJVFNFVF9GSVhFRCk7CisgICAgICAgICAgICAgICAgICBiaXRzZXRfY29weSAoKCpsYXN0X3N0YXRlcCktPmxvb2thaGVhZHNbaV0sIGxvb2thaGVhZHNbaV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgKCpsYXN0X3N0YXRlcCktPmxyMElzb2NvcmUgPSBscjBfaXNvY29yZTsKKyAgICAgICgqbGFzdF9zdGF0ZXApLT5uZXh0SXNvY29yZSA9IG9sZF9pc29jb3JlOworICAgIH0KK30KKworLyoqCisgKiBccHJlCisgKiAgIC0gXGMgZm9sbG93X2tlcm5lbF9pdGVtcyBhbmQgXGMgYWx3YXlzX2ZvbGxvd3Mgd2VyZSBjb21wdXRlZCBieQorICogICAgIFxjIGllbHJfY29tcHV0ZV9hdXhpbGlhcnlfdGFibGVzLgorICogICAtIEVpdGhlcjoKKyAqICAgICAtIDx0dD5hbm5vdGF0aW9uX2xpc3RzID0gTlVMTDwvdHQ+IGFuZCA8dHQ+bWF4X2Fubm90YXRpb25zPTA8L3R0Pi4KKyAqICAgICAtIFxjIGFubm90YXRpb25fbGlzdHMgYW5kIFxjIG1heF9hbm5vdGF0aW9ucyB3ZXJlIGNvbXB1dGVkIGJ5CisgKiAgICAgICBcYyBpZWxyX2NvbXB1dGVfYW5ub3RhdGlvbl9saXN0cy4KKyAqIFxwb3N0CisgKiAgIC0gXGMgOjpzdGF0ZXMgaXMgb2Ygc2l6ZSBcYyA6Om5zdGF0ZXMgKHdoaWNoIG1pZ2h0IGJlIGdyZWF0ZXIgdGhhbgorICogICAgIDx0dD46Om5zdGF0ZXMgXEBwcmU8L3R0PikgYW5kIG5vIGxvbmdlciBjb250YWlucyBhbnkgTFIoMSktcmVsYXRpdmUKKyAqICAgICBpbmFkZXF1YWN5LiAgXGMgYW5ub3RhdGlvbl9saXN0cyB3YXMgdXNlZCB0byBkZXRlcm1pbmUgc3RhdGUKKyAqICAgICBjb21wYXRpYmlsaXR5IG9yLCBpZiA8dHQ+YW5ub3RhdGlvbl9saXN0cyA9IE5VTEw8L3R0PiwgdGhlIGNhbm9uaWNhbAorICogICAgIExSKDEpIHN0YXRlIGNvbXBhdGliaWxpdHkgdGVzdCB3YXMgdXNlZC4KKyAqICAgLSBJZiA8dHQ+YW5ub3RhdGlvbl9saXN0cyA9IE5VTEw8L3R0PiwgcmVkdWN0aW9uIGxvb2thaGVhZCBzZXRzIHdlcmUKKyAqICAgICBjb21wdXRlZCBpbiBhbGwgc3RhdGVzLiAgVFZfSUVMUl9QSEFTRTQgd2FzIHB1c2hlZCB3aGlsZSB0aGV5IHdlcmUKKyAqICAgICBjb21wdXRlZCBmcm9tIGl0ZW0gbG9va2FoZWFkIHNldHMuCisgKi8KK3N0YXRpYyB2b2lkCitpZWxyX3NwbGl0X3N0YXRlcyAoYml0c2V0diBmb2xsb3dfa2VybmVsX2l0ZW1zLCBiaXRzZXR2IGFsd2F5c19mb2xsb3dzLAorICAgICAgICAgICAgICAgICAgIEFubm90YXRpb25MaXN0ICoqYW5ub3RhdGlvbl9saXN0cywKKyAgICAgICAgICAgICAgICAgICBBbm5vdGF0aW9uSW5kZXggbWF4X2Fubm90YXRpb25zKQoreworICBzdGF0ZV9saXN0ICpmaXJzdF9zdGF0ZTsKKyAgc3RhdGVfbGlzdCAqbGFzdF9zdGF0ZTsKKyAgYml0c2V0diBsb29rYWhlYWRfZmlsdGVyID0gTlVMTDsKKyAgYml0c2V0diBsb29rYWhlYWRzOworCisgIC8qIFNldCB1cCBzdGF0ZSBsaXN0IGFuZCBzb21lIHJldXNhYmxlIGJpdHNldHMuICAqLworICB7CisgICAgc2l6ZV90IG1heF9uaXRlbXMgPSAwOworICAgIHN0YXRlX251bWJlciBpOworICAgIHN0YXRlX2xpc3QgKipub2RlcCA9ICZmaXJzdF9zdGF0ZTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnN0YXRlczsgKytpKQorICAgICAgeworICAgICAgICAqbm9kZXAgPSBzdGF0ZXNbaV0tPnN0YXRlX2xpc3QgPSBsYXN0X3N0YXRlID0geG1hbGxvYyAoc2l6ZW9mICoqbm9kZXApOworICAgICAgICAoKm5vZGVwKS0+c3RhdGUgPSBzdGF0ZXNbaV07CisgICAgICAgICgqbm9kZXApLT5yZWNvbXB1dGVkQXNTdWNjZXNzb3IgPSBmYWxzZTsKKyAgICAgICAgKCpub2RlcCktPmxvb2thaGVhZHMgPSBOVUxMOworICAgICAgICAoKm5vZGVwKS0+bHIwSXNvY29yZSA9ICpub2RlcDsKKyAgICAgICAgKCpub2RlcCktPm5leHRJc29jb3JlID0gKm5vZGVwOworICAgICAgICBub2RlcCA9ICYoKm5vZGVwKS0+bmV4dDsKKyAgICAgICAgaWYgKHN0YXRlc1tpXS0+bml0ZW1zID4gbWF4X25pdGVtcykKKyAgICAgICAgICBtYXhfbml0ZW1zID0gc3RhdGVzW2ldLT5uaXRlbXM7CisgICAgICB9CisgICAgKm5vZGVwID0gTlVMTDsKKyAgICBsb29rYWhlYWRfZmlsdGVyID0gYml0c2V0dl9jcmVhdGUgKG1heF9uaXRlbXMsIG50b2tlbnMsIEJJVFNFVF9GSVhFRCk7CisgICAgaWYgKCFhbm5vdGF0aW9uX2xpc3RzKQorICAgICAgYml0c2V0dl9vbmVzIChsb29rYWhlYWRfZmlsdGVyKTsKKyAgICBsb29rYWhlYWRzID0gYml0c2V0dl9jcmVhdGUgKG1heF9uaXRlbXMsIG50b2tlbnMsIEJJVFNFVF9GSVhFRCk7CisgIH0KKworICAvKiBSZWNvbXB1dGUgc3RhdGVzLiAgKi8KKyAgeworICAgIENvbnRyaWJ1dGlvbkluZGV4ICp3b3JrID0geG5tYWxsb2MgKG1heF9hbm5vdGF0aW9ucywgc2l6ZW9mICp3b3JrKTsKKyAgICBzdGF0ZV9saXN0ICp0aGlzX3N0YXRlOworICAgIGZvciAodGhpc19zdGF0ZSA9IGZpcnN0X3N0YXRlOyB0aGlzX3N0YXRlOyB0aGlzX3N0YXRlID0gdGhpc19zdGF0ZS0+bmV4dCkKKyAgICAgIHsKKyAgICAgICAgc3RhdGUgKnMgPSB0aGlzX3N0YXRlLT5zdGF0ZTsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzLT50cmFuc2l0aW9ucy0+bnVtOyArK2kpCisgICAgICAgICAgeworICAgICAgICAgICAgc3RhdGUgKnQgPSBzLT50cmFuc2l0aW9ucy0+c3RhdGVzW2ldOworICAgICAgICAgICAgaWYgKGFubm90YXRpb25fbGlzdHMpCisgICAgICAgICAgICAgIEFubm90YXRpb25MaXN0X19jb21wdXRlTG9va2FoZWFkRmlsdGVyICgKKyAgICAgICAgICAgICAgICBhbm5vdGF0aW9uX2xpc3RzW3QtPnN0YXRlX2xpc3QtPmxyMElzb2NvcmUtPnN0YXRlLT5udW1iZXJdLAorICAgICAgICAgICAgICAgIHQtPm5pdGVtcywgbG9va2FoZWFkX2ZpbHRlcik7CisgICAgICAgICAgICBpZWxyX2NvbXB1dGVfbG9va2FoZWFkcyAoZm9sbG93X2tlcm5lbF9pdGVtcywgYWx3YXlzX2ZvbGxvd3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc19zdGF0ZSwgdCwgbG9va2FoZWFkX2ZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWRzKTsKKyAgICAgICAgICAgIGllbHJfY29tcHV0ZV9zdGF0ZSAoZm9sbG93X2tlcm5lbF9pdGVtcywgYWx3YXlzX2ZvbGxvd3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25fbGlzdHMsIHQsIGxvb2thaGVhZHMsICZsYXN0X3N0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrLCBsb29rYWhlYWRfZmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcy0+dHJhbnNpdGlvbnMtPnN0YXRlc1tpXSk7CisgICAgICAgICAgfQorICAgICAgfQorICAgIGZyZWUgKHdvcmspOworICB9CisKKyAgYml0c2V0dl9mcmVlIChsb29rYWhlYWRfZmlsdGVyKTsKKyAgYml0c2V0dl9mcmVlIChsb29rYWhlYWRzKTsKKworICAvKiBTdG9yZSBzdGF0ZXMgYmFjayBpbiB0aGUgc3RhdGVzIGFycmF5LiAgKi8KKyAgc3RhdGVzID0geG5yZWFsbG9jIChzdGF0ZXMsIG5zdGF0ZXMsIHNpemVvZiAqc3RhdGVzKTsKKyAgeworICAgIHN0YXRlX2xpc3QgKm5vZGU7CisgICAgZm9yIChub2RlID0gZmlyc3Rfc3RhdGU7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0KQorICAgICAgc3RhdGVzW25vZGUtPnN0YXRlLT5udW1iZXJdID0gbm9kZS0+c3RhdGU7CisgIH0KKworICAvKiBJbiB0aGUgY2FzZSBvZiBjYW5vbmljYWwgTFIoMSksIGNvcHkgaXRlbSBsb29rYWhlYWQgc2V0cyB0byByZWR1Y3Rpb24KKyAgICAgbG9va2FoZWFkIHNldHMuICAqLworICBpZiAoIWFubm90YXRpb25fbGlzdHMpCisgICAgeworICAgICAgdGltZXZhcl9wdXNoIChUVl9JRUxSX1BIQVNFNCk7CisgICAgICBpbml0aWFsaXplX0xBICgpOworICAgICAgc3RhdGVfbGlzdCAqbm9kZTsKKyAgICAgIGZvciAobm9kZSA9IGZpcnN0X3N0YXRlOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dCkKKyAgICAgICAgaWYgKCFub2RlLT5zdGF0ZS0+Y29uc2lzdGVudCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBzaXplX3QgaSA9IDA7CisgICAgICAgICAgICBpdGVtX251bWJlciAqaXRlbXNldCA9IG5vZGUtPnN0YXRlLT5pdGVtczsKKyAgICAgICAgICAgIHNpemVfdCByOworICAgICAgICAgICAgZm9yIChyID0gMDsgciA8IG5vZGUtPnN0YXRlLT5yZWR1Y3Rpb25zLT5udW07ICsrcikKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJ1bGUgKnRoaXNfcnVsZSA9IG5vZGUtPnN0YXRlLT5yZWR1Y3Rpb25zLT5ydWxlc1tyXTsKKyAgICAgICAgICAgICAgICBiaXRzZXQgbG9va2FoZWFkX3NldCA9CisgICAgICAgICAgICAgICAgICBub2RlLT5zdGF0ZS0+cmVkdWN0aW9ucy0+bG9va2FoZWFkX3Rva2Vuc1tyXTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlbV9udW1iZXJfaXNfcnVsZV9udW1iZXIgKCp0aGlzX3J1bGUtPnJocykpCisgICAgICAgICAgICAgICAgICBpZWxyX2NvbXB1dGVfZ290b19mb2xsb3dfc2V0IChmb2xsb3dfa2VybmVsX2l0ZW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx3YXlzX2ZvbGxvd3MsIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzX3J1bGUtPmxocywgbG9va2FoZWFkX3NldCk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+bG9va2FoZWFkcykKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogV2UgZG9uJ3QgbmVlZCB0byBzdGFydCB0aGUga2VybmVsIGl0ZW0gc2VhcmNoIGJhY2sgYXQKKyAgICAgICAgICAgICAgICAgICAgICAgaT0wIGJlY2F1c2UgYm90aCBpdGVtcyBhbmQgcmVkdWN0aW9ucyBhcmUgc29ydGVkIG9uIHJ1bGUKKyAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCFpdGVtX251bWJlcl9pc19ydWxlX251bWJlciAocml0ZW1baXRlbXNldFtpXV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBpdGVtX251bWJlcl9hc19ydWxlX251bWJlciAocml0ZW1baXRlbXNldFtpXV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSB0aGlzX3J1bGUtPm51bWJlcikKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICArK2k7CisgICAgICAgICAgICAgICAgICAgICAgICBhdmVyIChpIDwgbm9kZS0+c3RhdGUtPm5pdGVtcyk7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+bG9va2FoZWFkc1tpXSkKKyAgICAgICAgICAgICAgICAgICAgICBiaXRzZXRfY29weSAobG9va2FoZWFkX3NldCwgbm9kZS0+bG9va2FoZWFkc1tpXSk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICB0aW1ldmFyX3BvcCAoVFZfSUVMUl9QSEFTRTQpOworICAgIH0KKworICAvKiBGcmVlIHN0YXRlIGxpc3QuICAqLworICB3aGlsZSAoZmlyc3Rfc3RhdGUpCisgICAgeworICAgICAgc3RhdGVfbGlzdCAqbm9kZSA9IGZpcnN0X3N0YXRlOworICAgICAgaWYgKG5vZGUtPmxvb2thaGVhZHMpCisgICAgICAgIHsKKyAgICAgICAgICBzaXplX3QgaTsKKyAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbm9kZS0+c3RhdGUtPm5pdGVtczsgKytpKQorICAgICAgICAgICAgaWYgKG5vZGUtPmxvb2thaGVhZHNbaV0pCisgICAgICAgICAgICAgIGJpdHNldF9mcmVlIChub2RlLT5sb29rYWhlYWRzW2ldKTsKKyAgICAgICAgICBmcmVlIChub2RlLT5sb29rYWhlYWRzKTsKKyAgICAgICAgfQorICAgICAgZmlyc3Rfc3RhdGUgPSBub2RlLT5uZXh0OworICAgICAgZnJlZSAobm9kZSk7CisgICAgfQorfQorCit2b2lkCitpZWxyICh2b2lkKQoreworICBMclR5cGUgbHJfdHlwZTsKKworICAvKiBFeGFtaW5lIHVzZXIgb3B0aW9ucy4gICovCisgIHsKKyAgICBjaGFyICp0eXBlID0gbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2dldCAoImxyLnR5cGUiKTsKKyAgICBpZiAoMCA9PSBzdHJjbXAgKHR5cGUsICJsYWxyIikpCisgICAgICBscl90eXBlID0gTFJfVFlQRV9fTEFMUjsKKyAgICBlbHNlIGlmICgwID09IHN0cmNtcCAodHlwZSwgImllbHIiKSkKKyAgICAgIGxyX3R5cGUgPSBMUl9UWVBFX19JRUxSOworICAgIGVsc2UgaWYgKDAgPT0gc3RyY21wICh0eXBlLCAiY2Fub25pY2FsLWxyIikpCisgICAgICBscl90eXBlID0gTFJfVFlQRV9fQ0FOT05JQ0FMX0xSOworICAgIGVsc2UKKyAgICAgIGF2ZXIgKGZhbHNlKTsKKyAgICBmcmVlICh0eXBlKTsKKyAgfQorCisgIC8qIFBoYXNlIDA6IExBTFIoMSkuICAqLworICB0aW1ldmFyX3B1c2ggKFRWX0xBTFIpOworICBpZiAobHJfdHlwZSA9PSBMUl9UWVBFX19DQU5PTklDQUxfTFIpCisgICAgc2V0X2dvdG9fbWFwICgpOworICBlbHNlCisgICAgbGFsciAoKTsKKyAgaWYgKGxyX3R5cGUgPT0gTFJfVFlQRV9fTEFMUikKKyAgICB7CisgICAgICBiaXRzZXR2X2ZyZWUgKGdvdG9fZm9sbG93cyk7CisgICAgICB0aW1ldmFyX3BvcCAoVFZfTEFMUik7CisgICAgICByZXR1cm47CisgICAgfQorICB0aW1ldmFyX3BvcCAoVFZfTEFMUik7CisKKyAgeworICAgIGJpdHNldHYgZm9sbG93X2tlcm5lbF9pdGVtczsKKyAgICBiaXRzZXR2IGFsd2F5c19mb2xsb3dzOworICAgIEluYWRlcXVhY3lMaXN0ICoqaW5hZGVxdWFjeV9saXN0cyA9IE5VTEw7CisgICAgQW5ub3RhdGlvbkxpc3QgKiphbm5vdGF0aW9uX2xpc3RzID0gTlVMTDsKKyAgICBzdHJ1Y3Qgb2JzdGFjayBhbm5vdGF0aW9uc19vYnN0YWNrOworICAgIEFubm90YXRpb25JbmRleCBtYXhfYW5ub3RhdGlvbnMgPSAwOworCisgICAgeworICAgICAgLyogUGhhc2UgMTogQ29tcHV0ZSBBdXhpbGlhcnkgVGFibGVzLiAgKi8KKyAgICAgIHN0YXRlICoqKnByZWRlY2Vzc29yczsKKyAgICAgIHRpbWV2YXJfcHVzaCAoVFZfSUVMUl9QSEFTRTEpOworICAgICAgaWVscl9jb21wdXRlX2F1eGlsaWFyeV90YWJsZXMgKAorICAgICAgICAmZm9sbG93X2tlcm5lbF9pdGVtcywgJmFsd2F5c19mb2xsb3dzLAorICAgICAgICBscl90eXBlID09IExSX1RZUEVfX0NBTk9OSUNBTF9MUiA/IE5VTEwgOiAmcHJlZGVjZXNzb3JzKTsKKyAgICAgIHRpbWV2YXJfcG9wIChUVl9JRUxSX1BIQVNFMSk7CisKKyAgICAgIC8qIFBoYXNlIDI6IENvbXB1dGUgQW5ub3RhdGlvbnMuICAqLworICAgICAgdGltZXZhcl9wdXNoIChUVl9JRUxSX1BIQVNFMik7CisgICAgICBpZiAobHJfdHlwZSAhPSBMUl9UWVBFX19DQU5PTklDQUxfTFIpCisgICAgICAgIHsKKyAgICAgICAgICBvYnN0YWNrX2luaXQgKCZhbm5vdGF0aW9uc19vYnN0YWNrKTsKKyAgICAgICAgICBpZWxyX2NvbXB1dGVfYW5ub3RhdGlvbl9saXN0cyAoZm9sbG93X2tlcm5lbF9pdGVtcywgYWx3YXlzX2ZvbGxvd3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29ycywgJm1heF9hbm5vdGF0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmluYWRlcXVhY3lfbGlzdHMsICZhbm5vdGF0aW9uX2xpc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYW5ub3RhdGlvbnNfb2JzdGFjayk7CisgICAgICAgICAgeworICAgICAgICAgICAgc3RhdGVfbnVtYmVyIGk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnN0YXRlczsgKytpKQorICAgICAgICAgICAgICBmcmVlIChwcmVkZWNlc3NvcnNbaV0pOworICAgICAgICAgIH0KKyAgICAgICAgICBmcmVlIChwcmVkZWNlc3NvcnMpOworICAgICAgICAgIGJpdHNldHZfZnJlZSAoZ290b19mb2xsb3dzKTsKKyAgICAgICAgICBsYWxyX2ZyZWUgKCk7CisgICAgICAgIH0KKyAgICAgIHRpbWV2YXJfcG9wIChUVl9JRUxSX1BIQVNFMik7CisgICAgfQorCisgICAgLyogUGhhc2UgMzogU3BsaXQgU3RhdGVzLiAgKi8KKyAgICB0aW1ldmFyX3B1c2ggKFRWX0lFTFJfUEhBU0UzKTsKKyAgICB7CisgICAgICBzdGF0ZV9udW1iZXIgbnN0YXRlc19scjAgPSBuc3RhdGVzOworICAgICAgaWVscl9zcGxpdF9zdGF0ZXMgKGZvbGxvd19rZXJuZWxfaXRlbXMsIGFsd2F5c19mb2xsb3dzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25fbGlzdHMsIG1heF9hbm5vdGF0aW9ucyk7CisgICAgICBpZiAoaW5hZGVxdWFjeV9saXN0cykKKyAgICAgICAgeworICAgICAgICAgIHN0YXRlX251bWJlciBpOworICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuc3RhdGVzX2xyMDsgKytpKQorICAgICAgICAgICAgSW5hZGVxdWFjeUxpc3RfX2RlbGV0ZSAoaW5hZGVxdWFjeV9saXN0c1tpXSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZnJlZSAoaW5hZGVxdWFjeV9saXN0cyk7CisgICAgaWYgKGFubm90YXRpb25fbGlzdHMpCisgICAgICBvYnN0YWNrX2ZyZWUgKCZhbm5vdGF0aW9uc19vYnN0YWNrLCBOVUxMKTsKKyAgICBmcmVlIChhbm5vdGF0aW9uX2xpc3RzKTsKKyAgICBiaXRzZXR2X2ZyZWUgKGZvbGxvd19rZXJuZWxfaXRlbXMpOworICAgIGJpdHNldHZfZnJlZSAoYWx3YXlzX2ZvbGxvd3MpOworICAgIHRpbWV2YXJfcG9wIChUVl9JRUxSX1BIQVNFMyk7CisgIH0KKworICAvKiBQaGFzZSA0OiBDb21wdXRlIFJlZHVjdGlvbiBMb29rYWhlYWRzLiAgKi8KKyAgdGltZXZhcl9wdXNoIChUVl9JRUxSX1BIQVNFNCk7CisgIGZyZWUgKGdvdG9fbWFwKTsKKyAgZnJlZSAoZnJvbV9zdGF0ZSk7CisgIGZyZWUgKHRvX3N0YXRlKTsKKyAgaWYgKGxyX3R5cGUgPT0gTFJfVFlQRV9fQ0FOT05JQ0FMX0xSKQorICAgIHsKKyAgICAgIC8qIFJlZHVjdGlvbiBsb29rYWhlYWRzIGFyZSBjb21wdXRlZCBpbiBpZWxyX3NwbGl0X3N0YXRlcyBhYm92ZQorICAgICAgICAgYnV0IGFyZSB0aW1lZCBhcyBwYXJ0IG9mIHBoYXNlIDQuICovCisgICAgICBzZXRfZ290b19tYXAgKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbGFsciAoKTsKKyAgICAgIGJpdHNldHZfZnJlZSAoZ290b19mb2xsb3dzKTsKKyAgICB9CisgIHRpbWV2YXJfcG9wIChUVl9JRUxSX1BIQVNFNCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvaWVsci5oIGIvc3JjL2llbHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjIyMzgwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2llbHIuaApAQCAtMCwwICsxLDQ2IEBACisvKiBJRUxSIG1haW4gaW1wbGVtZW50YXRpb24uCisKKyAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBJRUxSX0hfCisjIGRlZmluZSBJRUxSX0hfCisKKyNpbmNsdWRlIDxiaXRzZXQuaD4KKworI2luY2x1ZGUgInN0YXRlLmgiCisKKy8qKgorICogXHByZQorICogICAtIFxjIDo6c3RhdGVzIGlzIG9mIHNpemUgXGMgOjpuc3RhdGVzIGFuZCBkZWZpbmVzIGFuIExSKDApIHBhcnNlcgorICogICAgIGZvciB0aGUgdXNlcnMncyBncmFtbWFyLgorICogICAtIFxjIDo6bnRva2VucyBpcyB0aGUgbnVtYmVyIG9mIHRva2VucyBpbiB0aGUgZ3JhbW1hci4KKyAqIFxwb3N0CisgKiAgIC0gXGMgOjpzdGF0ZXMgaXMgb2Ygc2l6ZSBcYyA6Om5zdGF0ZXMgKHdoaWNoIG1pZ2h0IGJlIGdyZWF0ZXIgdGhhbgorICogICAgIDx0dD46Om5zdGF0ZXMgXEBwcmU8L3R0PikgYW5kIGRlZmluZXMgdGhlIHR5cGUgb2YgcGFyc2VyIHNwZWNpZmllZCBieQorICogICAgIHRoZSB2YWx1ZSBvZiB0aGUgXGMgXCVkZWZpbmUgdmFyaWFibGUgXGMgbHIudHlwZS4gIEl0cyB2YWx1ZSBjYW4gYmU6CisgKiAgICAgLSBcYyAibGFsciIuCisgKiAgICAgLSBcYyAiaWVsciIuCisgKiAgICAgLSBcYyAiY2Fub25pY2FsLWxyIi4KKyAqLwordm9pZCBpZWxyICh2b2lkKTsKKworYm9vbCBpZWxyX2l0ZW1faGFzX2xvb2thaGVhZCAoc3RhdGUgKnMsIHN5bWJvbF9udW1iZXIgbGhzLCBzaXplX3QgaXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbF9udW1iZXIgbG9va2FoZWFkLCBzdGF0ZSAqKipwcmVkZWNlc3NvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzZXQgKippdGVtX2xvb2thaGVhZF9zZXRzKTsKKworI2VuZGlmIC8qICFJRUxSX0hfICovCmRpZmYgLS1naXQgYS9zcmMvbGFsci5jIGIvc3JjL2xhbHIuYwppbmRleCA2NWM1NWFiLi45ODY2MTU0IDEwMDY0NAotLS0gYS9zcmMvbGFsci5jCisrKyBiL3NyYy9sYWxyLmMKQEAgLTEsMjggKzEsMjUgQEAKLS8qIENvbXB1dGUgbG9vay1haGVhZCBjcml0ZXJpYSBmb3IgQmlzb24uCisvKiBDb21wdXRlIGxvb2thaGVhZCBjcml0ZXJpYSBmb3IgQmlzb24uCiAKLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4NiwgMTk4OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwKLSAgIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODYsIDE5ODksIDIwMDAtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuCiAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgogCi0gICBCaXNvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLSAgIEJpc29uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCBCaXNvbjsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAKLS8qIENvbXB1dGUgaG93IHRvIG1ha2UgdGhlIGZpbml0ZSBzdGF0ZSBtYWNoaW5lIGRldGVybWluaXN0aWM7IGZpbmQKLSAgIHdoaWNoIHJ1bGVzIG5lZWQgbG9vay1haGVhZCBpbiBlYWNoIHN0YXRlLCBhbmQgd2hpY2ggbG9vay1haGVhZAorLyogRmluZCB3aGljaCBydWxlcyBuZWVkIGxvb2thaGVhZCBpbiBlYWNoIHN0YXRlLCBhbmQgd2hpY2ggbG9va2FoZWFkCiAgICB0b2tlbnMgdGhleSBhY2NlcHQuICAqLwogCiAjaW5jbHVkZSA8Y29uZmlnLmg+CkBAIC0zMCw3ICsyNyw2IEBACiAKICNpbmNsdWRlIDxiaXRzZXQuaD4KICNpbmNsdWRlIDxiaXRzZXR2Lmg+Ci0jaW5jbHVkZSA8cXVvdGVhcmcuaD4KIAogI2luY2x1ZGUgIkxSMC5oIgogI2luY2x1ZGUgImNvbXBsYWluLmgiCkBAIC0zOCwxNSArMzQsMTcgQEAKICNpbmNsdWRlICJnZXRhcmdzLmgiCiAjaW5jbHVkZSAiZ3JhbS5oIgogI2luY2x1ZGUgImxhbHIuaCIKKyNpbmNsdWRlICJtdXNjbGUtdGFiLmgiCiAjaW5jbHVkZSAibnVsbGFibGUuaCIKICNpbmNsdWRlICJyZWFkZXIuaCIKICNpbmNsdWRlICJyZWxhdGlvbi5oIgogI2luY2x1ZGUgInN5bXRhYi5oIgogCiBnb3RvX251bWJlciAqZ290b19tYXA7Ci1zdGF0aWMgZ290b19udW1iZXIgbmdvdG9zOworZ290b19udW1iZXIgbmdvdG9zOwogc3RhdGVfbnVtYmVyICpmcm9tX3N0YXRlOwogc3RhdGVfbnVtYmVyICp0b19zdGF0ZTsKK2JpdHNldHYgZ290b19mb2xsb3dzID0gTlVMTDsKIAogLyogTGlua2VkIGxpc3Qgb2YgZ290byBudW1iZXJzLiAgKi8KIHR5cGVkZWYgc3RydWN0IGdvdG9fbGlzdApAQCAtNTYsNyArNTQsNyBAQAogfSBnb3RvX2xpc3Q7CiAKIAotLyogTEEgaXMgYSBMUiBieSBOVE9LRU5TIG1hdHJpeCBvZiBiaXRzLiAgTEFbbCwgaV0gaXMgMSBpZiB0aGUgcnVsZQorLyogTEEgaXMgYW4gTkxBIGJ5IE5UT0tFTlMgbWF0cml4IG9mIGJpdHMuICBMQVtsLCBpXSBpcyAxIGlmIHRoZSBydWxlCiAgICBMQXJ1bGVbbF0gaXMgYXBwbGljYWJsZSBpbiB0aGUgYXBwcm9wcmlhdGUgc3RhdGUgd2hlbiB0aGUgbmV4dAogICAgdG9rZW4gaXMgc3ltYm9sIGkuICBJZiBMQVtsLCBpXSBhbmQgTEFbbCwgal0gYXJlIGJvdGggMSBmb3IgaSAhPSBqLAogICAgaXQgaXMgYSBjb25mbGljdC4gICovCkBAIC02NSwxNyArNjMsMTMgQEAKIHNpemVfdCBuTEE7CiAKIAotLyogQW5kIGZvciB0aGUgZmFtb3VzIEYgdmFyaWFibGUsIHdoaWNoIG5hbWUgaXMgc28gZGVzY3JpcHRpdmUgdGhhdCBhCi0gICBjb21tZW50IGlzIGhhcmRseSBuZWVkZWQuICA8Z3Jpbj4uICAqLwotc3RhdGljIGJpdHNldHYgRiA9IE5VTEw7Ci0KIHN0YXRpYyBnb3RvX251bWJlciAqKmluY2x1ZGVzOwogc3RhdGljIGdvdG9fbGlzdCAqKmxvb2tiYWNrOwogCiAKIAogCi1zdGF0aWMgdm9pZAordm9pZAogc2V0X2dvdG9fbWFwICh2b2lkKQogewogICBzdGF0ZV9udW1iZXIgczsKQEAgLTk0LDcgKzg4LDcgQEAKIAkgIG5nb3RvcysrOwogCiAJICAvKiBBYm9ydCBpZiAobmdvdG9zICsgMSkgd291bGQgb3ZlcmZsb3cuICAqLwotCSAgYXNzZXJ0IChuZ290b3MgIT0gR09UT19OVU1CRVJfTUFYSU1VTSk7CisJICBhdmVyIChuZ290b3MgIT0gR09UT19OVU1CRVJfTUFYSU1VTSk7CiAKIAkgIGdvdG9fbWFwW1RSQU5TSVRJT05fU1lNQk9MIChzcCwgaSkgLSBudG9rZW5zXSsrOwogCX0KQEAgLTEzNSwxMiArMTI5LDcgQEAKIH0KIAogCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgTWFwIGEgc3RhdGUvc3ltYm9sIHBhaXIgaW50byBpdHMgbnVtZXJpYyByZXByZXNlbnRhdGlvbi4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGdvdG9fbnVtYmVyCitnb3RvX251bWJlcgogbWFwX2dvdG8gKHN0YXRlX251bWJlciBzMCwgc3ltYm9sX251bWJlciBzeW0pCiB7CiAgIGdvdG9fbnVtYmVyIGhpZ2g7CkBAIC0xNTMsNyArMTQyLDcgQEAKIAogICBmb3IgKDs7KQogICAgIHsKLSAgICAgIGFzc2VydCAobG93IDw9IGhpZ2gpOworICAgICAgYXZlciAobG93IDw9IGhpZ2gpOwogICAgICAgbWlkZGxlID0gKGxvdyArIGhpZ2gpIC8gMjsKICAgICAgIHMgPSBmcm9tX3N0YXRlW21pZGRsZV07CiAgICAgICBpZiAocyA9PSBzMCkKQEAgLTE3NSw3ICsxNjQsNyBAQAogCiAgIGdvdG9fbnVtYmVyIGk7CiAKLSAgRiA9IGJpdHNldHZfY3JlYXRlIChuZ290b3MsIG50b2tlbnMsIEJJVFNFVF9GSVhFRCk7CisgIGdvdG9fZm9sbG93cyA9IGJpdHNldHZfY3JlYXRlIChuZ290b3MsIG50b2tlbnMsIEJJVFNFVF9GSVhFRCk7CiAKICAgZm9yIChpID0gMDsgaSA8IG5nb3RvczsgaSsrKQogICAgIHsKQEAgLTE4NCw3ICsxNzMsNyBAQAogCiAgICAgICBpbnQgajsKICAgICAgIEZPUl9FQUNIX1NISUZUIChzcCwgaikKLQliaXRzZXRfc2V0IChGW2ldLCBUUkFOU0lUSU9OX1NZTUJPTCAoc3AsIGopKTsKKwliaXRzZXRfc2V0IChnb3RvX2ZvbGxvd3NbaV0sIFRSQU5TSVRJT05fU1lNQk9MIChzcCwgaikpOwogCiAgICAgICBmb3IgKDsgaiA8IHNwLT5udW07IGorKykKIAl7CkBAIC0yMDQsNyArMTkzLDcgQEAKIAl9CiAgICAgfQogCi0gIHJlbGF0aW9uX2RpZ3JhcGggKHJlYWRzLCBuZ290b3MsICZGKTsKKyAgcmVsYXRpb25fZGlncmFwaCAocmVhZHMsIG5nb3RvcywgJmdvdG9fZm9sbG93cyk7CiAKICAgZm9yIChpID0gMDsgaSA8IG5nb3RvczsgaSsrKQogICAgIGZyZWUgKHJlYWRzW2ldKTsKQEAgLTIxOSw5ICsyMDgsOSBAQAogewogICBpbnQgcmkgPSBzdGF0ZV9yZWR1Y3Rpb25fZmluZCAocywgcik7CiAgIGdvdG9fbGlzdCAqc3AgPSB4bWFsbG9jIChzaXplb2YgKnNwKTsKLSAgc3AtPm5leHQgPSBsb29rYmFja1socy0+cmVkdWN0aW9ucy0+bG9va19haGVhZF90b2tlbnMgLSBMQSkgKyByaV07CisgIHNwLT5uZXh0ID0gbG9va2JhY2tbKHMtPnJlZHVjdGlvbnMtPmxvb2thaGVhZF90b2tlbnMgLSBMQSkgKyByaV07CiAgIHNwLT52YWx1ZSA9IGdvdG9ubzsKLSAgbG9va2JhY2tbKHMtPnJlZHVjdGlvbnMtPmxvb2tfYWhlYWRfdG9rZW5zIC0gTEEpICsgcmldID0gc3A7CisgIGxvb2tiYWNrWyhzLT5yZWR1Y3Rpb25zLT5sb29rYWhlYWRfdG9rZW5zIC0gTEEpICsgcmldID0gc3A7CiB9CiAKIApAQCAtMjY0LDggKzI1Myw4IEBACiAJICB3aGlsZSAoIWRvbmUpCiAJICAgIHsKIAkgICAgICBkb25lID0gdHJ1ZTsKLQkgICAgICAvKiBFYWNoIHJocyBlbmRzIGluIGFuIGl0ZW0gbnVtYmVyLCBhbmQgdGhlcmUgaXMgYQotCQkgc2VudGluZWwgYmVmb3JlIHRoZSBmaXJzdCByaHMsIHNvIGl0IGlzIHNhZmUgdG8KKwkgICAgICAvKiBFYWNoIHJocyBlbmRzIGluIGEgcnVsZSBudW1iZXIsIGFuZCB0aGVyZSBpcyBhCisJCSBzZW50aW5lbCAocml0ZW1bLTFdPTApIGJlZm9yZSB0aGUgZmlyc3QgcmhzLCBzbyBpdCBpcyBzYWZlIHRvCiAJCSBkZWNyZW1lbnQgUlAgaGVyZS4gICovCiAJICAgICAgcnAtLTsKIAkgICAgICBpZiAoSVNWQVIgKCpycCkpCkBAIC0zMDQsNyArMjkzLDcgQEAKIHsKICAgZ290b19udW1iZXIgaTsKIAotICByZWxhdGlvbl9kaWdyYXBoIChpbmNsdWRlcywgbmdvdG9zLCAmRik7CisgIHJlbGF0aW9uX2RpZ3JhcGggKGluY2x1ZGVzLCBuZ290b3MsICZnb3RvX2ZvbGxvd3MpOwogCiAgIGZvciAoaSA9IDA7IGkgPCBuZ290b3M7IGkrKykKICAgICBmcmVlIChpbmNsdWRlc1tpXSk7CkBAIC0zMTQsMTI4ICszMDMsMTQyIEBACiAKIAogc3RhdGljIHZvaWQKLWNvbXB1dGVfbG9va19haGVhZF90b2tlbnMgKHZvaWQpCitjb21wdXRlX2xvb2thaGVhZF90b2tlbnMgKHZvaWQpCiB7CiAgIHNpemVfdCBpOwogICBnb3RvX2xpc3QgKnNwOwogCiAgIGZvciAoaSA9IDA7IGkgPCBuTEE7IGkrKykKICAgICBmb3IgKHNwID0gbG9va2JhY2tbaV07IHNwOyBzcCA9IHNwLT5uZXh0KQotICAgICAgYml0c2V0X29yIChMQVtpXSwgTEFbaV0sIEZbc3AtPnZhbHVlXSk7CisgICAgICBiaXRzZXRfb3IgKExBW2ldLCBMQVtpXSwgZ290b19mb2xsb3dzW3NwLT52YWx1ZV0pOwogCiAgIC8qIEZyZWUgTE9PS0JBQ0suICovCiAgIGZvciAoaSA9IDA7IGkgPCBuTEE7IGkrKykKICAgICBMSVNUX0ZSRUUgKGdvdG9fbGlzdCwgbG9va2JhY2tbaV0pOwogCiAgIGZyZWUgKGxvb2tiYWNrKTsKLSAgYml0c2V0dl9mcmVlIChGKTsKIH0KIAogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBDb3VudCB0aGUgbnVtYmVyIG9mIGxvb2stYWhlYWQgdG9rZW5zIHJlcXVpcmVkIGZvciBTIHwKLXwgKE5fTE9PS19BSEVBRF9UT0tFTlMgbWVtYmVyKS4gICAgICAgICAgICAgICAgICAgICAgICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBDb3VudCB0aGUgbnVtYmVyIG9mIGxvb2thaGVhZCB0b2tlbnMgcmVxdWlyZWQgZm9yIFMgfAorfCAoTl9MT09LQUhFQURfVE9LRU5TIG1lbWJlcikuICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgaW50Ci1zdGF0ZV9sb29rX2FoZWFkX3Rva2Vuc19jb3VudCAoc3RhdGUgKnMpCitzdGF0ZV9sb29rYWhlYWRfdG9rZW5zX2NvdW50IChzdGF0ZSAqcywgYm9vbCBkZWZhdWx0X3JlZHVjdGlvbl9vbmx5X2Zvcl9hY2NlcHQpCiB7Ci0gIGludCBrOwotICBpbnQgbl9sb29rX2FoZWFkX3Rva2VucyA9IDA7CisgIGludCBuX2xvb2thaGVhZF90b2tlbnMgPSAwOwogICByZWR1Y3Rpb25zICpycCA9IHMtPnJlZHVjdGlvbnM7CiAgIHRyYW5zaXRpb25zICpzcCA9IHMtPnRyYW5zaXRpb25zOwogCi0gIC8qIFdlIG5lZWQgYSBsb29rLWFoZWFkIGVpdGhlciB0byBkaXN0aW5ndWlzaCBkaWZmZXJlbnQKLSAgICAgcmVkdWN0aW9ucyAoaS5lLiwgdGhlcmUgYXJlIHR3byBvciBtb3JlKSwgb3IgdG8gZGlzdGluZ3Vpc2ggYQotICAgICByZWR1Y3Rpb24gZnJvbSBhIHNoaWZ0LiAgT3RoZXJ3aXNlLCBpdCBpcyBzdHJhaWdodGZvcndhcmQsCi0gICAgIGFuZCB0aGUgc3RhdGUgaXMgYGNvbnNpc3RlbnQnLiAgKi8KKyAgLyogVHJhbnNpdGlvbnMgYXJlIG9ubHkgZGlzYWJsZWQgZHVyaW5nIGNvbmZsaWN0IHJlc29sdXRpb24sIGFuZCB0aGF0CisgICAgIGhhc24ndCBoYXBwZW5lZCB5ZXQsIHNvIHRoZXJlIHNob3VsZCBiZSBubyBuZWVkIHRvIGNoZWNrIHRoYXQKKyAgICAgdHJhbnNpdGlvbiAwIGhhc24ndCBiZWVuIGRpc2FibGVkIGJlZm9yZSBjaGVja2luZyBpZiBpdCBpcyBhIHNoaWZ0LgorICAgICBIb3dldmVyLCB0aGlzIGNoZWNrIHdhcyBwZXJmb3JtZWQgYXQgb25lIHRpbWUsIHNvIHdlIGxlYXZlIGl0IGFzIGFuCisgICAgIGF2ZXIuICAqLworICBhdmVyIChzcC0+bnVtID09IDAgfHwgIVRSQU5TSVRJT05fSVNfRElTQUJMRUQgKHNwLCAwKSk7CisKKyAgLyogV2UgbmVlZCBhIGxvb2thaGVhZCBlaXRoZXIgdG8gZGlzdGluZ3Vpc2ggZGlmZmVyZW50IHJlZHVjdGlvbnMKKyAgICAgKGkuZS4sIHRoZXJlIGFyZSB0d28gb3IgbW9yZSksIG9yIHRvIGRpc3Rpbmd1aXNoIGEgcmVkdWN0aW9uIGZyb20gYQorICAgICBzaGlmdC4gIE90aGVyd2lzZSwgaXQgaXMgc3RyYWlnaHRmb3J3YXJkLCBhbmQgdGhlIHN0YXRlIGlzCisgICAgIGBjb25zaXN0ZW50Jy4gIEhvd2V2ZXIsIGRvIG5vdCB0cmVhdCBhIHN0YXRlIHdpdGggYW55IHJlZHVjdGlvbnMgYXMKKyAgICAgY29uc2lzdGVudCB1bmxlc3MgaXQgaXMgdGhlIGFjY2VwdGluZyBzdGF0ZSAoYmVjYXVzZSB0aGVyZSBpcyBuZXZlcgorICAgICBhIGxvb2thaGVhZCB0b2tlbiB0aGF0IG1ha2VzIHNlbnNlIHRoZXJlLCBhbmQgc28gbm8gbG9va2FoZWFkIHRva2VuCisgICAgIHNob3VsZCBiZSByZWFkKSBpZiB0aGUgdXNlciBoYXMgb3RoZXJ3aXNlIGRpc2FibGVkIGRlZmF1bHQKKyAgICAgcmVkdWN0aW9ucy4gICovCiAgIGlmIChycC0+bnVtID4gMQotICAgICAgfHwgKHJwLT5udW0gPT0gMSAmJiBzcC0+bnVtICYmCi0JICAhVFJBTlNJVElPTl9JU19ESVNBQkxFRCAoc3AsIDApICYmIFRSQU5TSVRJT05fSVNfU0hJRlQgKHNwLCAwKSkpCi0gICAgbl9sb29rX2FoZWFkX3Rva2VucyArPSBycC0+bnVtOworICAgICAgfHwgKHJwLT5udW0gPT0gMSAmJiBzcC0+bnVtICYmIFRSQU5TSVRJT05fSVNfU0hJRlQgKHNwLCAwKSkKKyAgICAgIHx8IChycC0+bnVtID09IDEgJiYgcnAtPnJ1bGVzWzBdLT5udW1iZXIgIT0gMAorICAgICAgICAgICYmIGRlZmF1bHRfcmVkdWN0aW9uX29ubHlfZm9yX2FjY2VwdCkpCisgICAgbl9sb29rYWhlYWRfdG9rZW5zICs9IHJwLT5udW07CiAgIGVsc2UKICAgICBzLT5jb25zaXN0ZW50ID0gMTsKIAotICBmb3IgKGsgPSAwOyBrIDwgc3AtPm51bTsgaysrKQotICAgIGlmICghVFJBTlNJVElPTl9JU19ESVNBQkxFRCAoc3AsIGspICYmIFRSQU5TSVRJT05fSVNfRVJST1IgKHNwLCBrKSkKLSAgICAgIHsKLQlzLT5jb25zaXN0ZW50ID0gMDsKLQlicmVhazsKLSAgICAgIH0KLQotICByZXR1cm4gbl9sb29rX2FoZWFkX3Rva2VuczsKKyAgcmV0dXJuIG5fbG9va2FoZWFkX3Rva2VuczsKIH0KIAogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBDb21wdXRlIExBLCBOTEEsIGFuZCB0aGUgbG9va19haGVhZF90b2tlbnMgbWVtYmVycy4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IENvbXB1dGUgTEEsIE5MQSwgYW5kIHRoZSBsb29rYWhlYWRfdG9rZW5zIG1lbWJlcnMuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkCit2b2lkCiBpbml0aWFsaXplX0xBICh2b2lkKQogewogICBzdGF0ZV9udW1iZXIgaTsKICAgYml0c2V0diBwTEE7CisgIGJvb2wgZGVmYXVsdF9yZWR1Y3Rpb25fb25seV9mb3JfYWNjZXB0OworICB7CisgICAgY2hhciAqZGVmYXVsdF9yZWR1Y3Rpb25zID0KKyAgICAgIG11c2NsZV9wZXJjZW50X2RlZmluZV9nZXQgKCJsci5kZWZhdWx0LXJlZHVjdGlvbnMiKTsKKyAgICBkZWZhdWx0X3JlZHVjdGlvbl9vbmx5X2Zvcl9hY2NlcHQgPQorICAgICAgMCA9PSBzdHJjbXAgKGRlZmF1bHRfcmVkdWN0aW9ucywgImFjY2VwdGluZyIpOworICAgIGZyZWUgKGRlZmF1bHRfcmVkdWN0aW9ucyk7CisgIH0KIAotICAvKiBDb21wdXRlIHRoZSB0b3RhbCBudW1iZXIgb2YgcmVkdWN0aW9ucyByZXF1aXJpbmcgYSBsb29rLWFoZWFkLiAgKi8KKyAgLyogQ29tcHV0ZSB0aGUgdG90YWwgbnVtYmVyIG9mIHJlZHVjdGlvbnMgcmVxdWlyaW5nIGEgbG9va2FoZWFkLiAgKi8KICAgbkxBID0gMDsKICAgZm9yIChpID0gMDsgaSA8IG5zdGF0ZXM7IGkrKykKLSAgICBuTEEgKz0gc3RhdGVfbG9va19haGVhZF90b2tlbnNfY291bnQgKHN0YXRlc1tpXSk7CisgICAgbkxBICs9CisgICAgICBzdGF0ZV9sb29rYWhlYWRfdG9rZW5zX2NvdW50IChzdGF0ZXNbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3JlZHVjdGlvbl9vbmx5X2Zvcl9hY2NlcHQpOwogICAvKiBBdm9pZCBoYXZpbmcgdG8gc3BlY2lhbCBjYXNlIDAuICAqLwogICBpZiAoIW5MQSkKICAgICBuTEEgPSAxOwogCiAgIHBMQSA9IExBID0gYml0c2V0dl9jcmVhdGUgKG5MQSwgbnRva2VucywgQklUU0VUX0ZJWEVEKTsKLSAgbG9va2JhY2sgPSB4Y2FsbG9jIChuTEEsIHNpemVvZiAqbG9va2JhY2spOwogCi0gIC8qIEluaXRpYWxpemUgdGhlIG1lbWJlcnMgTE9PS19BSEVBRF9UT0tFTlMgZm9yIGVhY2ggc3RhdGUgd2hvc2UgcmVkdWN0aW9ucwotICAgICByZXF1aXJlIGxvb2stYWhlYWQgdG9rZW5zLiAgKi8KKyAgLyogSW5pdGlhbGl6ZSB0aGUgbWVtYmVycyBMT09LQUhFQURfVE9LRU5TIGZvciBlYWNoIHN0YXRlIHdob3NlIHJlZHVjdGlvbnMKKyAgICAgcmVxdWlyZSBsb29rYWhlYWQgdG9rZW5zLiAgKi8KICAgZm9yIChpID0gMDsgaSA8IG5zdGF0ZXM7IGkrKykKICAgICB7Ci0gICAgICBpbnQgY291bnQgPSBzdGF0ZV9sb29rX2FoZWFkX3Rva2Vuc19jb3VudCAoc3RhdGVzW2ldKTsKKyAgICAgIGludCBjb3VudCA9CisgICAgICAgIHN0YXRlX2xvb2thaGVhZF90b2tlbnNfY291bnQgKHN0YXRlc1tpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9yZWR1Y3Rpb25fb25seV9mb3JfYWNjZXB0KTsKICAgICAgIGlmIChjb3VudCkKIAl7Ci0JICBzdGF0ZXNbaV0tPnJlZHVjdGlvbnMtPmxvb2tfYWhlYWRfdG9rZW5zID0gcExBOworCSAgc3RhdGVzW2ldLT5yZWR1Y3Rpb25zLT5sb29rYWhlYWRfdG9rZW5zID0gcExBOwogCSAgcExBICs9IGNvdW50OwogCX0KICAgICB9CiB9CiAKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBPdXRwdXQgdGhlIGxvb2stYWhlYWQgdG9rZW5zIGZvciBlYWNoIHN0YXRlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IE91dHB1dCB0aGUgbG9va2FoZWFkIHRva2VucyBmb3IgZWFjaCBzdGF0ZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgdm9pZAotbG9va19haGVhZF90b2tlbnNfcHJpbnQgKEZJTEUgKm91dCkKK2xvb2thaGVhZF90b2tlbnNfcHJpbnQgKEZJTEUgKm91dCkKIHsKICAgc3RhdGVfbnVtYmVyIGk7CiAgIGludCBqLCBrOwotICBmcHJpbnRmIChvdXQsICJMb29rLWFoZWFkIHRva2VuczogQkVHSU5cbiIpOworICBmcHJpbnRmIChvdXQsICJMb29rYWhlYWQgdG9rZW5zOiBCRUdJTlxuIik7CiAgIGZvciAoaSA9IDA7IGkgPCBuc3RhdGVzOyArK2kpCiAgICAgewogICAgICAgcmVkdWN0aW9ucyAqcmVkcyA9IHN0YXRlc1tpXS0+cmVkdWN0aW9uczsKICAgICAgIGJpdHNldF9pdGVyYXRvciBpdGVyOwotICAgICAgaW50IG5fbG9va19haGVhZF90b2tlbnMgPSAwOworICAgICAgaW50IG5fbG9va2FoZWFkX3Rva2VucyA9IDA7CiAKLSAgICAgIGlmIChyZWRzLT5sb29rX2FoZWFkX3Rva2VucykKKyAgICAgIGlmIChyZWRzLT5sb29rYWhlYWRfdG9rZW5zKQogCWZvciAoayA9IDA7IGsgPCByZWRzLT5udW07ICsraykKLQkgIGlmIChyZWRzLT5sb29rX2FoZWFkX3Rva2Vuc1trXSkKLQkgICAgKytuX2xvb2tfYWhlYWRfdG9rZW5zOworCSAgaWYgKHJlZHMtPmxvb2thaGVhZF90b2tlbnNba10pCisJICAgICsrbl9sb29rYWhlYWRfdG9rZW5zOwogCi0gICAgICBmcHJpbnRmIChvdXQsICJTdGF0ZSAlZDogJWQgbG9vay1haGVhZCB0b2tlbnNcbiIsCi0JICAgICAgIGksIG5fbG9va19haGVhZF90b2tlbnMpOworICAgICAgZnByaW50ZiAob3V0LCAiU3RhdGUgJWQ6ICVkIGxvb2thaGVhZCB0b2tlbnNcbiIsCisJICAgICAgIGksIG5fbG9va2FoZWFkX3Rva2Vucyk7CiAKLSAgICAgIGlmIChyZWRzLT5sb29rX2FoZWFkX3Rva2VucykKKyAgICAgIGlmIChyZWRzLT5sb29rYWhlYWRfdG9rZW5zKQogCWZvciAoaiA9IDA7IGogPCByZWRzLT5udW07ICsraikKLQkgIEJJVFNFVF9GT1JfRUFDSCAoaXRlciwgcmVkcy0+bG9va19haGVhZF90b2tlbnNbal0sIGssIDApCisJICBCSVRTRVRfRk9SX0VBQ0ggKGl0ZXIsIHJlZHMtPmxvb2thaGVhZF90b2tlbnNbal0sIGssIDApCiAJICB7CiAJICAgIGZwcmludGYgKG91dCwgIiAgIG9uICVkICglcykgLT4gcnVsZSAlZFxuIiwKIAkJICAgICBrLCBzeW1ib2xzW2tdLT50YWcsCiAJCSAgICAgcmVkcy0+cnVsZXNbal0tPm51bWJlcik7CiAJICB9OwogICAgIH0KLSAgZnByaW50ZiAob3V0LCAiTG9vay1haGVhZCB0b2tlbnM6IEVORFxuIik7CisgIGZwcmludGYgKG91dCwgIkxvb2thaGVhZCB0b2tlbnM6IEVORFxuIik7CiB9CiAKIHZvaWQKQEAgLTQ0NCwxMiArNDQ3LDQ3IEBACiAgIGluaXRpYWxpemVfTEEgKCk7CiAgIHNldF9nb3RvX21hcCAoKTsKICAgaW5pdGlhbGl6ZV9GICgpOworICBsb29rYmFjayA9IHhjYWxsb2MgKG5MQSwgc2l6ZW9mICpsb29rYmFjayk7CiAgIGJ1aWxkX3JlbGF0aW9ucyAoKTsKICAgY29tcHV0ZV9GT0xMT1dTICgpOwotICBjb21wdXRlX2xvb2tfYWhlYWRfdG9rZW5zICgpOworICBjb21wdXRlX2xvb2thaGVhZF90b2tlbnMgKCk7CiAKICAgaWYgKHRyYWNlX2ZsYWcgJiB0cmFjZV9zZXRzKQotICAgIGxvb2tfYWhlYWRfdG9rZW5zX3ByaW50IChzdGRlcnIpOworICAgIGxvb2thaGVhZF90b2tlbnNfcHJpbnQgKHN0ZGVycik7Cit9CisKKwordm9pZAorbGFscl91cGRhdGVfc3RhdGVfbnVtYmVycyAoc3RhdGVfbnVtYmVyIG9sZF90b19uZXdbXSwgc3RhdGVfbnVtYmVyIG5zdGF0ZXNfb2xkKQoreworICBnb3RvX251bWJlciBuZ290b3NfcmVhY2hhYmxlID0gMDsKKyAgc3ltYm9sX251bWJlciBub250ZXJtaW5hbCA9IDA7CisgIGF2ZXIgKG5zeW1zID09IG52YXJzICsgbnRva2Vucyk7CisgIHsKKyAgICBnb3RvX251bWJlciBpOworICAgIGZvciAoaSA9IDA7IGkgPCBuZ290b3M7ICsraSkKKyAgICAgIHsKKyAgICAgICAgd2hpbGUgKGkgPT0gZ290b19tYXBbbm9udGVybWluYWxdKQorICAgICAgICAgIGdvdG9fbWFwW25vbnRlcm1pbmFsKytdID0gbmdvdG9zX3JlYWNoYWJsZTsKKyAgICAgICAgLyogSWYgb2xkX3RvX25ld1tmcm9tX3N0YXRlW2ldXSA9IG5zdGF0ZXNfb2xkLCByZW1vdmUgdGhpcyBnb3RvCisgICAgICAgICAgIGVudHJ5LiAgKi8KKyAgICAgICAgaWYgKG9sZF90b19uZXdbZnJvbV9zdGF0ZVtpXV0gIT0gbnN0YXRlc19vbGQpCisgICAgICAgICAgeworICAgICAgICAgICAgLyogZnJvbV9zdGF0ZVtpXSBpcyBub3QgcmVtb3ZlZCwgc28gaXQgYW5kIHRodXMgdG9fc3RhdGVbaV0gYXJlCisgICAgICAgICAgICAgICByZWFjaGFibGUsIHNvIHRvX3N0YXRlW2ldICE9IG5zdGF0ZXNfb2xkLiAgKi8KKyAgICAgICAgICAgIGF2ZXIgKG9sZF90b19uZXdbdG9fc3RhdGVbaV1dICE9IG5zdGF0ZXNfb2xkKTsKKyAgICAgICAgICAgIGZyb21fc3RhdGVbbmdvdG9zX3JlYWNoYWJsZV0gPSBvbGRfdG9fbmV3W2Zyb21fc3RhdGVbaV1dOworICAgICAgICAgICAgdG9fc3RhdGVbbmdvdG9zX3JlYWNoYWJsZV0gPSBvbGRfdG9fbmV3W3RvX3N0YXRlW2ldXTsKKyAgICAgICAgICAgICsrbmdvdG9zX3JlYWNoYWJsZTsKKyAgICAgICAgICB9CisgICAgICB9CisgIH0KKyAgd2hpbGUgKG5vbnRlcm1pbmFsIDw9IG52YXJzKQorICAgIHsKKyAgICAgIGF2ZXIgKG5nb3RvcyA9PSBnb3RvX21hcFtub250ZXJtaW5hbF0pOworICAgICAgZ290b19tYXBbbm9udGVybWluYWwrK10gPSBuZ290b3NfcmVhY2hhYmxlOworICAgIH0KKyAgbmdvdG9zID0gbmdvdG9zX3JlYWNoYWJsZTsKIH0KIAogCkBAIC00NTgsNiArNDk2LDYgQEAKIHsKICAgc3RhdGVfbnVtYmVyIHM7CiAgIGZvciAocyA9IDA7IHMgPCBuc3RhdGVzOyArK3MpCi0gICAgc3RhdGVzW3NdLT5yZWR1Y3Rpb25zLT5sb29rX2FoZWFkX3Rva2VucyA9IE5VTEw7CisgICAgc3RhdGVzW3NdLT5yZWR1Y3Rpb25zLT5sb29rYWhlYWRfdG9rZW5zID0gTlVMTDsKICAgYml0c2V0dl9mcmVlIChMQSk7CiB9CmRpZmYgLS1naXQgYS9zcmMvbGFsci5oIGIvc3JjL2xhbHIuaAppbmRleCBhMmMxNzUzLi43NWU5NTdlIDEwMDY0NAotLS0gYS9zcmMvbGFsci5oCisrKyBiL3NyYy9sYWxyLmgKQEAgLTEsMjQgKzEsMjIgQEAKLS8qIENvbXB1dGUgbG9vay1haGVhZCBjcml0ZXJpYSBmb3IgYmlzb24sCisvKiBDb21wdXRlIGxvb2thaGVhZCBjcml0ZXJpYSBmb3IgYmlzb24sCiAKLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4NiwgMTk4OSwgMjAwMCwgMjAwMiwgMjAwNCBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODYsIDE5ODksIDIwMDAsIDIwMDIsIDIwMDQsIDIwMDYtMjAwNywKKyAgIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCiAKLSAgIEJpc29uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAotICAgQmlzb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIEJpc29uOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpZm5kZWYgTEFMUl9IXwogIyBkZWZpbmUgTEFMUl9IXwpAQCAtMzIsMzYgKzMwLDc3IEBACiAvKiBJbXBvcnQgdGhlIGRlZmluaXRpb24gb2YgQ09SRSwgVFJBTlNJVElPTlMgYW5kIFJFRFVDVElPTlMuICovCiAjIGluY2x1ZGUgInN0YXRlLmgiCiAKLS8qIENvbXB1dGUgaG93IHRvIG1ha2UgdGhlIGZpbml0ZSBzdGF0ZSBtYWNoaW5lIGRldGVybWluaXN0aWM7IGZpbmQKLSAgIHdoaWNoIHJ1bGVzIG5lZWQgbG9vay1haGVhZCBpbiBlYWNoIHN0YXRlLCBhbmQgd2hpY2ggbG9vay1haGVhZAotICAgdG9rZW5zIHRoZXkgYWNjZXB0LiAgKi8KIAorLyoqIEJ1aWxkIHRoZSBMQUxSKDEpIGF1dG9tYXRvbi4KKworICAgRmluZCB3aGljaCBydWxlcyBuZWVkIGxvb2thaGVhZCBpbiBlYWNoIHN0YXRlLCBhbmQgd2hpY2ggbG9va2FoZWFkCisgICB0b2tlbnMgdGhleSBhY2NlcHQuCisKKyAgIEFsc28gYnVpbGRzOgorICAgICAtICNnb3RvX21hcAorICAgICAtICNmcm9tX3N0YXRlCisgICAgIC0gI3RvX3N0YXRlCisgICAgIC0gI2dvdG9fZm9sbG93cworKi8KIHZvaWQgbGFsciAodm9pZCk7CiAKLS8qIFJlbGVhc2UgdGhlIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gbG9vay1haGVhZCB0b2tlbnMuICBDYW4gYmUgcGVyZm9ybWVkCi0gICBvbmNlIHRoZSBhY3Rpb24gdGFibGVzIGFyZSBjb21wdXRlZC4gICovCisvKioKKyAqIFNldCAjbkxBIGFuZCBhbGxvY2F0ZSBhbGwgcmVkdWN0aW9uIGxvb2thaGVhZCBzZXRzLiAgTm9ybWFsbHkgaW52b2tlZCBieQorICogI2xhbHIuCisgKi8KK3ZvaWQgaW5pdGlhbGl6ZV9MQSAodm9pZCk7CiAKKy8qKgorICogQnVpbGQgb25seToKKyAqICAgLSAjZ290b19tYXAKKyAqICAgLSAjZnJvbV9zdGF0ZQorICogICAtICN0b19zdGF0ZQorICogTm9ybWFsbHkgaW52b2tlZCBieSAjbGFsci4KKyAqLwordm9pZCBzZXRfZ290b19tYXAgKHZvaWQpOworCisvKioKKyAqIFVwZGF0ZSBzdGF0ZSBudW1iZXJzIHJlY29yZGVkIGluICNnb3RvX21hcCwgI2Zyb21fc3RhdGUsIGFuZCAjdG9fc3RhdGUgc3VjaAorICogdGhhdDoKKyAqICAgLSBcYyBuc3RhdGVzX29sZCBpcyB0aGUgb2xkIG51bWJlciBvZiBzdGF0ZXMuCisgKiAgIC0gV2hlcmUgXGMgaSBpcyB0aGUgb2xkIHN0YXRlIG51bWJlciwgPHR0Pm9sZF90b19uZXdbaV08L3R0PiBpcyBlaXRoZXI6CisgKiAgICAgLSBcYyBuc3RhdGVzX29sZCBpZiBzdGF0ZSBcYyBpIGlzIHJlbW92ZWQgYmVjYXVzZSBpdCBpcyB1bnJlYWNoYWJsZS4KKyAqICAgICAgIFRodXMsIHJlbW92ZSBhbGwgZ290byBlbnRyaWVzIGludm9sdmluZyB0aGlzIHN0YXRlLgorICogICAgIC0gVGhlIG5ldyBzdGF0ZSBudW1iZXIuCisgKi8KK3ZvaWQgbGFscl91cGRhdGVfc3RhdGVfbnVtYmVycyAoc3RhdGVfbnVtYmVyIG9sZF90b19uZXdbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfbnVtYmVyIG5zdGF0ZXNfb2xkKTsKKworCisvKiogUmVsZWFzZSB0aGUgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBsb29rYWhlYWQgdG9rZW5zLgorCisgICBDYW4gYmUgcGVyZm9ybWVkIG9uY2UgdGhlIGFjdGlvbiB0YWJsZXMgYXJlIGNvbXB1dGVkLiAgKi8KIHZvaWQgbGFscl9mcmVlICh2b2lkKTsKIAotCi0vKiBsYWxyKCkgYnVpbGRzIHRoZXNlIGRhdGEgc3RydWN0dXJlcy4gKi8KLQotLyogR09UT19NQVAsIEZST01fU1RBVEUgYW5kIFRPX1NUQVRFIC0tIHJlY29yZCBlYWNoIHNoaWZ0IHRyYW5zaXRpb24KLSAgIHdoaWNoIGFjY2VwdHMgYSB2YXJpYWJsZSAoYSBub250ZXJtaW5hbCkuCi0KLSAgIEZST01fU1RBVEVbVF0gLS0gc3RhdGUgbnVtYmVyIHdoaWNoIGEgdHJhbnNpdGlvbiBsZWFkcyBmcm9tLgotICAgVE9fU1RBVEVbVF0gLS0gc3RhdGUgbnVtYmVyIGl0IGxlYWRzIHRvLgotCi0gICBBbGwgdGhlIHRyYW5zaXRpb25zIHRoYXQgYWNjZXB0IGEgcGFydGljdWxhciB2YXJpYWJsZSBhcmUgZ3JvdXBlZAotICAgdG9nZXRoZXIgYW5kIEdPVE9fTUFQW0kgLSBOVE9LRU5TXSBpcyB0aGUgaW5kZXggaW4gRlJPTV9TVEFURSBhbmQKLSAgIFRPX1NUQVRFIG9mIHRoZSBmaXJzdCBvZiB0aGVtLiAgKi8KLQogdHlwZWRlZiBzaXplX3QgZ290b19udW1iZXI7CiAjIGRlZmluZSBHT1RPX05VTUJFUl9NQVhJTVVNICgoZ290b19udW1iZXIpIC0xKQogCisvKiogSW5kZXggaW50byAjZnJvbV9zdGF0ZSBhbmQgI3RvX3N0YXRlLgorCisgICBBbGwgdGhlIHRyYW5zaXRpb25zIHRoYXQgYWNjZXB0IGEgcGFydGljdWxhciB2YXJpYWJsZSBhcmUgZ3JvdXBlZAorICAgdG9nZXRoZXIgYW5kIEdPVE9fTUFQW0kgLSBOVE9LRU5TXSBpcyB0aGUgaW5kZXggaW4gRlJPTV9TVEFURSBhbmQKKyAgIFRPX1NUQVRFIG9mIHRoZSBmaXJzdCBvZiB0aGVtLiAgKi8KIGV4dGVybiBnb3RvX251bWJlciAqZ290b19tYXA7CisKKy8qKiBUaGUgc2l6ZSBvZiAjZnJvbV9zdGF0ZSBhbmQgI3RvX3N0YXRlLiAgKi8KK2V4dGVybiBnb3RvX251bWJlciBuZ290b3M7CisKKy8qKiBTdGF0ZSBudW1iZXIgd2hpY2ggYSB0cmFuc2l0aW9uIGxlYWRzIGZyb20uICAqLwogZXh0ZXJuIHN0YXRlX251bWJlciAqZnJvbV9zdGF0ZTsKKworLyoqIFN0YXRlIG51bWJlciBpdCBsZWFkcyB0by4gICovCiBleHRlcm4gc3RhdGVfbnVtYmVyICp0b19zdGF0ZTsKIAorLyoqIE1hcCBhIHN0YXRlL3N5bWJvbCBwYWlyIGludG8gaXRzIG51bWVyaWMgcmVwcmVzZW50YXRpb24uICAqLworZ290b19udW1iZXIgbWFwX2dvdG8gKHN0YXRlX251bWJlciBzMCwgc3ltYm9sX251bWJlciBzeW0pOworCisvKiBnb3RvX2ZvbGxvd3NbaV0gaXMgdGhlIHNldCBvZiB0b2tlbnMgZm9sbG93aW5nIGdvdG8gaS4gICovCitleHRlcm4gYml0c2V0diBnb3RvX2ZvbGxvd3M7CisKIAogI2VuZGlmIC8qICFMQUxSX0hfICovCmRpZmYgLS1naXQgYS9zcmMvbG9jYXRpb24uYyBiL3NyYy9sb2NhdGlvbi5jCmluZGV4IGVjZDM2NTguLjI0MzAxZWMgMTAwNjQ0Ci0tLSBhL3NyYy9sb2NhdGlvbi5jCisrKyBiL3NyYy9sb2NhdGlvbi5jCkBAIC0xLDQ4ICsxLDIzMCBAQAogLyogTG9jYXRpb25zIGZvciBCaXNvbgogCi0gICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCiAKLSAgIEJpc29uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAotICAgQmlzb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIEJpc29uOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpbmNsdWRlIDxjb25maWcuaD4KICNpbmNsdWRlICJzeXN0ZW0uaCIKIAorI2luY2x1ZGUgPG1ic3dpZHRoLmg+CiAjaW5jbHVkZSA8cXVvdGVhcmcuaD4KIAorI2luY2x1ZGUgImNvbXBsYWluLmgiCiAjaW5jbHVkZSAibG9jYXRpb24uaCIKIAotbG9jYXRpb24gY29uc3QgZW1wdHlfbG9jYXRpb247Citsb2NhdGlvbiBjb25zdCBlbXB0eV9sb2NhdGlvbiA9IEVNUFRZX0xPQ0FUSU9OX0lOSVQ7CisKKy8qIElmIEJVRiBpcyBudWxsLCBhZGQgQlVGU0laRSAod2hpY2ggaW4gdGhpcyBjYXNlIG11c3QgYmUgbGVzcyB0aGFuCisgICBJTlRfTUFYKSB0byBDT0xVTU47IG90aGVyd2lzZSwgYWRkIG1ic253aWR0aCAoQlVGLCBCVUZTSVpFLCAwKSB0bworICAgQ09MVU1OLiAgSWYgYW4gb3ZlcmZsb3cgb2NjdXJzLCBvciBtaWdodCBvY2N1ciBidXQgaXMgdW5kZXRlY3RhYmxlLAorICAgcmV0dXJuIElOVF9NQVguICBBc3N1bWUgQ09MVU1OIGlzIG5vbm5lZ2F0aXZlLiAgKi8KKworc3RhdGljIGlubGluZSBpbnQKK2FkZF9jb2x1bW5fd2lkdGggKGludCBjb2x1bW4sIGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUpCit7CisgIHNpemVfdCB3aWR0aDsKKyAgdW5zaWduZWQgaW50IHJlbWFpbmluZ19jb2x1bW5zID0gSU5UX01BWCAtIGNvbHVtbjsKKworICBpZiAoYnVmKQorICAgIHsKKyAgICAgIGlmIChJTlRfTUFYIC8gMiA8PSBidWZzaXplKQorCXJldHVybiBJTlRfTUFYOworICAgICAgd2lkdGggPSBtYnNud2lkdGggKGJ1ZiwgYnVmc2l6ZSwgMCk7CisgICAgfQorICBlbHNlCisgICAgd2lkdGggPSBidWZzaXplOworCisgIHJldHVybiB3aWR0aCA8PSByZW1haW5pbmdfY29sdW1ucyA/IGNvbHVtbiArIHdpZHRoIDogSU5UX01BWDsKK30KKworLyogU2V0ICpMT0MgYW5kIGFkanVzdCBzY2FubmVyIGN1cnNvciB0byBhY2NvdW50IGZvciB0b2tlbiBUT0tFTiBvZgorICAgc2l6ZSBTSVpFLiAgKi8KKwordm9pZAorbG9jYXRpb25fY29tcHV0ZSAobG9jYXRpb24gKmxvYywgYm91bmRhcnkgKmN1ciwgY2hhciBjb25zdCAqdG9rZW4sIHNpemVfdCBzaXplKQoreworICBpbnQgbGluZSA9IGN1ci0+bGluZTsKKyAgaW50IGNvbHVtbiA9IGN1ci0+Y29sdW1uOworICBjaGFyIGNvbnN0ICpwMCA9IHRva2VuOworICBjaGFyIGNvbnN0ICpwID0gdG9rZW47CisgIGNoYXIgY29uc3QgKmxpbSA9IHRva2VuICsgc2l6ZTsKKworICBsb2MtPnN0YXJ0ID0gKmN1cjsKKworICBmb3IgKHAgPSB0b2tlbjsgcCA8IGxpbTsgcCsrKQorICAgIHN3aXRjaCAoKnApCisgICAgICB7CisgICAgICBjYXNlICdcbic6CisJbGluZSArPSBsaW5lIDwgSU5UX01BWDsKKwljb2x1bW4gPSAxOworCXAwID0gcCArIDE7CisJYnJlYWs7CisKKyAgICAgIGNhc2UgJ1x0JzoKKwljb2x1bW4gPSBhZGRfY29sdW1uX3dpZHRoIChjb2x1bW4sIHAwLCBwIC0gcDApOworCWNvbHVtbiA9IGFkZF9jb2x1bW5fd2lkdGggKGNvbHVtbiwgTlVMTCwgOCAtICgoY29sdW1uIC0gMSkgJiA3KSk7CisJcDAgPSBwICsgMTsKKwlicmVhazsKKworICAgICAgZGVmYXVsdDoKKwlicmVhazsKKyAgICAgIH0KKworICBjdXItPmxpbmUgPSBsaW5lOworICBjdXItPmNvbHVtbiA9IGNvbHVtbiA9IGFkZF9jb2x1bW5fd2lkdGggKGNvbHVtbiwgcDAsIHAgLSBwMCk7CisKKyAgbG9jLT5lbmQgPSAqY3VyOworCisgIGlmIChsaW5lID09IElOVF9NQVggJiYgbG9jLT5zdGFydC5saW5lICE9IElOVF9NQVgpCisgICAgd2Fybl9hdCAoKmxvYywgXygibGluZSBudW1iZXIgb3ZlcmZsb3ciKSk7CisgIGlmIChjb2x1bW4gPT0gSU5UX01BWCAmJiBsb2MtPnN0YXJ0LmNvbHVtbiAhPSBJTlRfTUFYKQorICAgIHdhcm5fYXQgKCpsb2MsIF8oImNvbHVtbiBudW1iZXIgb3ZlcmZsb3ciKSk7Cit9CisKIAogLyogT3V0cHV0IHRvIE9VVCB0aGUgbG9jYXRpb24gTE9DLgogICAgV2FybmluZzogaXQgdXNlcyBxdW90ZWFyZydzIHNsb3QgMy4gICovCi12b2lkCit1bnNpZ25lZAogbG9jYXRpb25fcHJpbnQgKEZJTEUgKm91dCwgbG9jYXRpb24gbG9jKQogewotICBmcHJpbnRmIChvdXQsICIlczolZC4lZCIsCi0JICAgcXVvdGVhcmdfbl9zdHlsZSAoMywgZXNjYXBlX3F1b3Rpbmdfc3R5bGUsIGxvYy5zdGFydC5maWxlKSwKLQkgICBsb2Muc3RhcnQubGluZSwgbG9jLnN0YXJ0LmNvbHVtbik7Ci0KKyAgdW5zaWduZWQgcmVzID0gMDsKKyAgaW50IGVuZF9jb2wgPSAwICE9IGxvYy5lbmQuY29sdW1uID8gbG9jLmVuZC5jb2x1bW4gLSAxIDogMDsKKyAgcmVzICs9IGZwcmludGYgKG91dCwgIiVzIiwKKyAgICAgICAgICAgICAgICAgIHF1b3RlYXJnX25fc3R5bGUgKDMsIGVzY2FwZV9xdW90aW5nX3N0eWxlLCBsb2Muc3RhcnQuZmlsZSkpOworICBpZiAoMCA8PSBsb2Muc3RhcnQubGluZSkKKyAgICB7CisgICAgICByZXMgKz0gZnByaW50ZiAob3V0LCAiOiVkIiwgbG9jLnN0YXJ0LmxpbmUpOworICAgICAgaWYgKDAgPD0gbG9jLnN0YXJ0LmNvbHVtbikKKyAgICAgICAgcmVzICs9IGZwcmludGYgKG91dCwgIi4lZCIsIGxvYy5zdGFydC5jb2x1bW4pOworICAgIH0KICAgaWYgKGxvYy5zdGFydC5maWxlICE9IGxvYy5lbmQuZmlsZSkKLSAgICBmcHJpbnRmIChvdXQsICItJXM6JWQuJWQiLAotCSAgICAgcXVvdGVhcmdfbl9zdHlsZSAoMywgZXNjYXBlX3F1b3Rpbmdfc3R5bGUsIGxvYy5lbmQuZmlsZSksCi0JICAgICBsb2MuZW5kLmxpbmUsIGxvYy5lbmQuY29sdW1uIC0gMSk7Ci0gIGVsc2UgaWYgKGxvYy5zdGFydC5saW5lIDwgbG9jLmVuZC5saW5lKQotICAgIGZwcmludGYgKG91dCwgIi0lZC4lZCIsIGxvYy5lbmQubGluZSwgbG9jLmVuZC5jb2x1bW4gLSAxKTsKLSAgZWxzZSBpZiAobG9jLnN0YXJ0LmNvbHVtbiA8IGxvYy5lbmQuY29sdW1uIC0gMSkKLSAgICBmcHJpbnRmIChvdXQsICItJWQiLCBsb2MuZW5kLmNvbHVtbiAtIDEpOworICAgIHsKKyAgICAgIHJlcyArPSBmcHJpbnRmIChvdXQsICItJXMiLAorICAgICAgICAgICAgICAgICAgICAgIHF1b3RlYXJnX25fc3R5bGUgKDMsIGVzY2FwZV9xdW90aW5nX3N0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYy5lbmQuZmlsZSkpOworICAgICAgaWYgKDAgPD0gbG9jLmVuZC5saW5lKQorICAgICAgICB7CisgICAgICAgICAgcmVzICs9IGZwcmludGYgKG91dCwgIjolZCIsIGxvYy5lbmQubGluZSk7CisgICAgICAgICAgaWYgKDAgPD0gZW5kX2NvbCkKKyAgICAgICAgICAgIHJlcyArPSBmcHJpbnRmIChvdXQsICIuJWQiLCBlbmRfY29sKTsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZSBpZiAoMCA8PSBsb2MuZW5kLmxpbmUpCisgICAgeworICAgICAgaWYgKGxvYy5zdGFydC5saW5lIDwgbG9jLmVuZC5saW5lKQorICAgICAgICB7CisgICAgICAgICAgcmVzICs9IGZwcmludGYgKG91dCwgIi0lZCIsIGxvYy5lbmQubGluZSk7CisgICAgICAgICAgaWYgKDAgPD0gZW5kX2NvbCkKKyAgICAgICAgICAgIHJlcyArPSBmcHJpbnRmIChvdXQsICIuJWQiLCBlbmRfY29sKTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoMCA8PSBlbmRfY29sICYmIGxvYy5zdGFydC5jb2x1bW4gPCBlbmRfY29sKQorICAgICAgICByZXMgKz0gZnByaW50ZiAob3V0LCAiLSVkIiwgZW5kX2NvbCk7CisgICAgfQorCisgIHJldHVybiByZXM7Cit9CisKKworLyogUGVyc2lzdGFudCBkYXRhIHVzZWQgYnkgbG9jYXRpb25fY2FyZXQgdG8gYXZvaWQgcmVvcGVuaW5nIGFuZCByZXJlYWRpbmcgdGhlCisgICBzYW1lIGZpbGUgYWxsIG92ZXIgZm9yIGVhY2ggZXJyb3IuICAqLworc3RydWN0IGNhcmV0X2luZm8KK3sKKyAgRklMRSAqc291cmNlOworICBzaXplX3QgbGluZTsKKyAgc2l6ZV90IG9mZnNldDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2FyZXRfaW5mbyBjYXJldF9pbmZvID0geyBOVUxMLCAxLCAwIH07CisKK3ZvaWQKK2NsZWFudXBfY2FyZXQgKCkKK3sKKyAgaWYgKGNhcmV0X2luZm8uc291cmNlKQorICAgIGZjbG9zZSAoY2FyZXRfaW5mby5zb3VyY2UpOworfQorCit2b2lkCitsb2NhdGlvbl9jYXJldCAoRklMRSAqb3V0LCBsb2NhdGlvbiBsb2MpCit7CisgIC8qIEZJWE1FOiBmaW5kIGEgd2F5IHRvIHN1cHBvcnQgbXVsdGlmaWxlIGxvY2F0aW9ucywgYW5kIG9ubHkgb3BlbiBvbmNlIGVhY2gKKyAgICAgZmlsZS4gVGhhdCB3b3VsZCBtYWtlIHRoZSBwcm9jZWR1cmUgZnV0dXJlLXByb29mLiAgKi8KKyAgaWYgKCEgKGNhcmV0X2luZm8uc291cmNlCisgICAgICAgICB8fCAoY2FyZXRfaW5mby5zb3VyY2UgPSBmb3BlbiAobG9jLnN0YXJ0LmZpbGUsICJyIikpKQorICAgICAgfHwgbG9jLnN0YXJ0LmNvbHVtbiA9PSAtMSB8fCBsb2Muc3RhcnQubGluZSA9PSAtMSkKKyAgICByZXR1cm47CisKKyAgLyogSWYgdGhlIGxpbmUgd2Ugd2FudCB0byBxdW90ZSBpcyBzZWVrYWJsZSAodGhlIHNhbWUgbGluZSBhcyB0aGUgcHJldmlvdXMKKyAgICAgbG9jYXRpb24pLCBqdXN0IHNlZWsgaXQuIElmIGl0IHdhcyBiZWZvcmUsIHdlIGxvc3QgdHJhY2sgb2YgaXQsIHNvCisgICAgIHJldHVybiB0byB0aGUgc3RhcnQgb2YgZmlsZS4gICovCisgIGlmIChjYXJldF9pbmZvLmxpbmUgPD0gbG9jLnN0YXJ0LmxpbmUpCisgICAgZnNlZWsgKGNhcmV0X2luZm8uc291cmNlLCBjYXJldF9pbmZvLm9mZnNldCwgU0VFS19TRVQpOworICBlbHNlCisgICAgeworICAgICAgY2FyZXRfaW5mby5saW5lID0gMTsKKyAgICAgIGNhcmV0X2luZm8ub2Zmc2V0ID0gMDsKKyAgICAgIGZzZWVrIChjYXJldF9pbmZvLnNvdXJjZSwgY2FyZXRfaW5mby5vZmZzZXQsIFNFRUtfU0VUKTsKKyAgICB9CisKKyAgLyogQWR2YW5jZSB0byB0aGUgbGluZSdzIHBvc2l0aW9uLCBrZWVwaW5nIHRyYWNrIG9mIHRoZSBvZmZzZXQuICAqLworICB3aGlsZSAoY2FyZXRfaW5mby5saW5lIDwgbG9jLnN0YXJ0LmxpbmUpCisgICAgY2FyZXRfaW5mby5saW5lICs9IGZnZXRjIChjYXJldF9pbmZvLnNvdXJjZSkgPT0gJ1xuJzsKKyAgY2FyZXRfaW5mby5vZmZzZXQgPSBmdGVsbCAoY2FyZXRfaW5mby5zb3VyY2UpOworCisgIC8qIFJlYWQgdGhlIGFjdHVhbCBsaW5lLiAgRG9uJ3QgdXBkYXRlIHRoZSBvZmZzZXQsIHNvIHRoYXQgd2Uga2VlcCBhIHBvaW50ZXIKKyAgICAgdG8gdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLiAgKi8KKyAgeworICAgIGNoYXIgKmJ1ZiA9IE5VTEw7CisgICAgc2l6ZV90IHNpemUgPSAwOworICAgIHNzaXplX3QgbGVuID0gZ2V0bGluZSAoJmJ1ZiwgJnNpemUsIGNhcmV0X2luZm8uc291cmNlKTsKKyAgICBpZiAoMCA8IGxlbikKKyAgICAgIHsKKyAgICAgICAgLyogVGhlIGNhcmV0IG9mIGEgbXVsdGlsaW5lIGxvY2F0aW9uIGVuZHMgd2l0aCB0aGUgZmlyc3QgbGluZS4gICovCisgICAgICAgIGludCBlbmQgPSBsb2Muc3RhcnQubGluZSAhPSBsb2MuZW5kLmxpbmUgPyBsZW4gOiBsb2MuZW5kLmNvbHVtbjsKKworICAgICAgICAvKiBRdW90ZSB0aGUgZmlsZSwgaW5kZW50IGJ5IGEgc2luZ2xlIGNvbHVtbi4gICovCisgICAgICAgIGZwdXRjICgnICcsIG91dCk7CisgICAgICAgIGZ3cml0ZSAoYnVmLCAxLCBsZW4sIG91dCk7CisKKyAgICAgICAgLyogUHJpbnQgdGhlIGNhcmV0LCB3aXRoIHRoZSBzYW1lIGluZGVudCBhcyBhYm92ZS4gICovCisgICAgICAgIGZwcmludGYgKG91dCwgIiAlKnMiLCBsb2Muc3RhcnQuY29sdW1uIC0gMSwgIiIpOworICAgICAgICB7CisgICAgICAgICAgaW50IGkgPSBsb2Muc3RhcnQuY29sdW1uOworICAgICAgICAgIGRvCisgICAgICAgICAgICBmcHV0YyAoJ14nLCBvdXQpOworICAgICAgICAgIHdoaWxlICgrK2kgPCBlbmQpOworICAgICAgICB9CisgICAgICAgIGZwdXRjICgnXG4nLCBvdXQpOworICAgICAgfQorICAgIGZyZWUgKGJ1Zik7CisgIH0KK30KKwordm9pZAorYm91bmRhcnlfc2V0X2Zyb21fc3RyaW5nIChib3VuZGFyeSAqYm91bmQsIGNoYXIgKmxvY19zdHIpCit7CisgIC8qIE11c3Qgc2VhcmNoIGluIHJldmVyc2Ugc2luY2UgdGhlIGZpbGUgbmFtZSBmaWVsZCBtYXkKKyAgICogY29udGFpbiBgLicgb3IgYDonLiAgKi8KKyAgY2hhciAqZGVsaW0gPSBtYnNyY2hyIChsb2Nfc3RyLCAnLicpOworICBhdmVyIChkZWxpbSk7CisgICpkZWxpbSA9ICdcMCc7CisgIGJvdW5kLT5jb2x1bW4gPSBhdG9pIChkZWxpbSsxKTsKKyAgZGVsaW0gPSBtYnNyY2hyIChsb2Nfc3RyLCAnOicpOworICBhdmVyIChkZWxpbSk7CisgICpkZWxpbSA9ICdcMCc7CisgIGJvdW5kLT5saW5lID0gYXRvaSAoZGVsaW0rMSk7CisgIGJvdW5kLT5maWxlID0gdW5pcXN0cl9uZXcgKGxvY19zdHIpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2xvY2F0aW9uLmggYi9zcmMvbG9jYXRpb24uaAppbmRleCA0OWQyYTJlLi5jMTg1OWFlIDEwMDY0NAotLS0gYS9zcmMvbG9jYXRpb24uaAorKysgYi9zcmMvbG9jYXRpb24uaApAQCAtMSwyMiArMSwyMSBAQAogLyogTG9jYXRpb25zIGZvciBCaXNvbgotICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCiAKLSAgIEJpc29uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAotICAgQmlzb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIEJpc29uOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpZm5kZWYgTE9DQVRJT05fSF8KICMgZGVmaW5lIExPQ0FUSU9OX0hfCkBAIC0yOSwxNyArMjgsNDYgQEAKICAgLyogVGhlIG5hbWUgb2YgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgYm91bmRhcnkuICAqLwogICB1bmlxc3RyIGZpbGU7CiAKLSAgLyogVGhlIChvcmlnaW4tMSkgbGluZSB0aGF0IGNvbnRhaW5zIHRoZSBib3VuZGFyeS4KLSAgICAgSWYgdGhpcyBpcyBJTlRfTUFYLCB0aGUgbGluZSBudW1iZXIgaGFzIG92ZXJmbG93ZWQuICAqLworICAvKiBJZiBub25uZWdhdGl2ZSwgdGhlIChvcmlnaW4tMSkgbGluZSB0aGF0IGNvbnRhaW5zIHRoZSBib3VuZGFyeS4KKyAgICAgSWYgdGhpcyBpcyBJTlRfTUFYLCB0aGUgbGluZSBudW1iZXIgaGFzIG92ZXJmbG93ZWQuCisKKyAgICAgTWVhbmluZ2xlc3MgYW5kIG5vdCBkaXNwbGF5ZWQgaWYgbmVnYXRpdmUuCisgICovCiAgIGludCBsaW5lOwogCi0gIC8qIFRoZSAob3JpZ2luLTEpIGNvbHVtbiBqdXN0IGFmdGVyIHRoZSBib3VuZGFyeS4gIFRoaXMgaXMgbmVpdGhlciBhCi0gICAgIGJ5dGUgY291bnQsIG5vciBhIGNoYXJhY3RlciBjb3VudDsgaXQgaXMgYSBjb2x1bW4gY291bnQuCi0gICAgIElmIHRoaXMgaXMgSU5UX01BWCwgdGhlIGNvbHVtbiBudW1iZXIgaGFzIG92ZXJmbG93ZWQuICAqLworICAvKiBJZiBub25uZWdhdGl2ZSwgdGhlIChvcmlnaW4tMSkgY29sdW1uIGp1c3QgYWZ0ZXIgdGhlIGJvdW5kYXJ5LgorICAgICBUaGlzIGlzIG5laXRoZXIgYSBieXRlIGNvdW50LCBub3IgYSBjaGFyYWN0ZXIgY291bnQ7IGl0IGlzIGEKKyAgICAgY29sdW1uIGNvdW50LiAgSWYgdGhpcyBpcyBJTlRfTUFYLCB0aGUgY29sdW1uIG51bWJlciBoYXMKKyAgICAgb3ZlcmZsb3dlZC4KKworICAgICBNZWFuaW5nbGVzcyBhbmQgbm90IGRpc3BsYXllZCBpZiBuZWdhdGl2ZS4KKyAgKi8KICAgaW50IGNvbHVtbjsKIAogfSBib3VuZGFyeTsKIAorLyogU2V0IHRoZSBwb3NpdGlvbiBvZiBcYSBhLiAqLworc3RhdGljIGlubGluZSB2b2lkCitib3VuZGFyeV9zZXQgKGJvdW5kYXJ5ICpiLCBjb25zdCBjaGFyICpmLCBpbnQgbCwgaW50IGMpCit7CisgIGItPmZpbGUgPSBmOworICBiLT5saW5lID0gbDsKKyAgYi0+Y29sdW1uID0gYzsKK30KKworLyogUmV0dXJuIC0xLCAwLCAxLCBkZXBlbmRpbmcgd2hldGhlciBhIGlzIGJlZm9yZSwgZXF1YWwsIG9yCisgICBhZnRlciBiLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50Citib3VuZGFyeV9jbXAgKGJvdW5kYXJ5IGEsIGJvdW5kYXJ5IGIpCit7CisgIGludCByZXMgPSBzdHJjbXAgKGEuZmlsZSwgYi5maWxlKTsKKyAgaWYgKCFyZXMpCisgICAgcmVzID0gYS5saW5lIC0gYi5saW5lOworICBpZiAoIXJlcykKKyAgICByZXMgPSBhLmNvbHVtbiAtIGIuY29sdW1uOworICByZXR1cm4gcmVzOworfQorCiAvKiBSZXR1cm4gbm9uemVybyBpZiBBIGFuZCBCIGFyZSBlcXVhbCBib3VuZGFyaWVzLiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbAogZXF1YWxfYm91bmRhcmllcyAoYm91bmRhcnkgYSwgYm91bmRhcnkgYikKQEAgLTYwLDEwICs4OCwzOSBAQAogCiB9IGxvY2F0aW9uOwogCi0jZGVmaW5lIFlZTFRZUEUgbG9jYXRpb24KKyNkZWZpbmUgR1JBTV9MVFlQRSBsb2NhdGlvbgogCisjZGVmaW5lIEVNUFRZX0xPQ0FUSU9OX0lOSVQge3tOVUxMLCAwLCAwfSwge05VTEwsIDAsIDB9fQogZXh0ZXJuIGxvY2F0aW9uIGNvbnN0IGVtcHR5X2xvY2F0aW9uOwogCi12b2lkIGxvY2F0aW9uX3ByaW50IChGSUxFICpvdXQsIGxvY2F0aW9uIGxvYyk7CisvKiBTZXQgKkxPQyBhbmQgYWRqdXN0IHNjYW5uZXIgY3Vyc29yIHRvIGFjY291bnQgZm9yIHRva2VuIFRPS0VOIG9mCisgICBzaXplIFNJWkUuICAqLwordm9pZCBsb2NhdGlvbl9jb21wdXRlIChsb2NhdGlvbiAqbG9jLAorCQkgICAgICAgYm91bmRhcnkgKmN1ciwgY2hhciBjb25zdCAqdG9rZW4sIHNpemVfdCBzaXplKTsKKworLyogUHJpbnQgbG9jYXRpb24gdG8gZmlsZS4gUmV0dXJuIG51bWJlciBvZiBhY3R1YWxseSBwcmludGVkCisgICBjaGFyYWN0ZXJzLiAgKi8KK3Vuc2lnbmVkIGxvY2F0aW9uX3ByaW50IChGSUxFICpvdXQsIGxvY2F0aW9uIGxvYyk7CisKKy8qIEZyZWUgYW55IGFsbG9jYXRlZCByZXNzb3VyY2VzIGFuZCBjbG9zZSBhbnkgb3BlbiBmaWxlIGhhbmRsZXMgdGhhdCBhcmUKKyAgIGxlZnQtb3ZlciBieSB0aGUgdXNhZ2Ugb2YgbG9jYXRpb25fY2FyZXQuICAqLwordm9pZCBjbGVhbnVwX2NhcmV0ICh2b2lkKTsKKworLyogT3V0cHV0IHRvIE9VVCB0aGUgbGluZSBhbmQgY2FyZXQgY29ycmVzcG9uZGluZyB0byBsb2NhdGlvbiBMT0MuICAqLwordm9pZCBsb2NhdGlvbl9jYXJldCAoRklMRSAqb3V0LCBsb2NhdGlvbiBsb2MpOworCisvKiBSZXR1cm4gLTEsIDAsIDEsIGRlcGVuZGluZyB3aGV0aGVyIGEgaXMgYmVmb3JlLCBlcXVhbCwgb3IKKyAgIGFmdGVyIGIuICAqLworc3RhdGljIGlubGluZSBpbnQKK2xvY2F0aW9uX2NtcCAobG9jYXRpb24gYSwgbG9jYXRpb24gYikKK3sKKyAgaW50IHJlcyA9IGJvdW5kYXJ5X2NtcCAoYS5zdGFydCwgYi5zdGFydCk7CisgIGlmICghcmVzKQorICAgIHJlcyA9IGJvdW5kYXJ5X2NtcCAoYS5lbmQsIGIuZW5kKTsKKyAgcmV0dXJuIHJlczsKK30KKworLyogTE9DX1NUUiBtdXN0IGJlIGZvcm1hdHRlZCBhcyBgZmlsZTpsaW5lLmNvbHVtbicsIGl0IHdpbGwgYmUgbW9kaWZpZWQuICAqLwordm9pZCBib3VuZGFyeV9zZXRfZnJvbV9zdHJpbmcgKGJvdW5kYXJ5ICpib3VuZCwgY2hhciAqbG9jX3N0cik7CiAKICNlbmRpZiAvKiAhIGRlZmluZWQgTE9DQVRJT05fSF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9tYWluLmMgYi9zcmMvbWFpbi5jCmluZGV4IDg3NjlmZWYuLjE4NGQ3ODkgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluLmMKKysrIGIvc3JjL21haW4uYwpAQCAtMSwzMyArMSwzNSBAQAogLyogVG9wIGxldmVsIGVudHJ5IHBvaW50IG9mIEJpc29uLgogCi0gICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODYsIDE5ODksIDE5OTIsIDE5OTUsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDQsIDIwMDUKLSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg2LCAxOTg5LCAxOTkyLCAxOTk1LCAyMDAwLTIwMDIsIDIwMDQtMjAxMiBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgogCi0gICBCaXNvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLSAgIEJpc29uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCBCaXNvbjsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjaW5jbHVkZSAic3lzdGVtLmgiCiAKICNpbmNsdWRlIDxiaXRzZXRfc3RhdHMuaD4KICNpbmNsdWRlIDxiaXRzZXQuaD4KKyNpbmNsdWRlIDxjb25maWdtYWtlLmg+CisjaW5jbHVkZSA8cHJvZ25hbWUuaD4KKyNpbmNsdWRlIDxxdW90ZWFyZy5oPgogI2luY2x1ZGUgPHRpbWV2YXIuaD4KIAogI2luY2x1ZGUgIkxSMC5oIgorI2luY2x1ZGUgImNsb3Nlb3V0LmgiCiAjaW5jbHVkZSAiY29tcGxhaW4uaCIKICNpbmNsdWRlICJjb25mbGljdHMuaCIKICNpbmNsdWRlICJkZXJpdmVzLmgiCkBAIC0zNSwzMiArMzcsNDUgQEAKICNpbmNsdWRlICJnZXRhcmdzLmgiCiAjaW5jbHVkZSAiZ3JhbS5oIgogI2luY2x1ZGUgImxhbHIuaCIKLSNpbmNsdWRlICJtdXNjbGVfdGFiLmgiCisjaW5jbHVkZSAiaWVsci5oIgorI2luY2x1ZGUgIm11c2NsZS10YWIuaCIKICNpbmNsdWRlICJudWxsYWJsZS5oIgogI2luY2x1ZGUgIm91dHB1dC5oIgogI2luY2x1ZGUgInByaW50LmgiCiAjaW5jbHVkZSAicHJpbnRfZ3JhcGguaCIKKyNpbmNsdWRlICJwcmludC14bWwuaCIKKyNpbmNsdWRlIDxxdW90ZS5oPgogI2luY2x1ZGUgInJlYWRlci5oIgogI2luY2x1ZGUgInJlZHVjZS5oIgorI2luY2x1ZGUgInNjYW4tY29kZS5oIgorI2luY2x1ZGUgInNjYW4tZ3JhbS5oIgorI2luY2x1ZGUgInNjYW4tc2tlbC5oIgogI2luY2x1ZGUgInN5bXRhYi5oIgogI2luY2x1ZGUgInRhYmxlcy5oIgogI2luY2x1ZGUgInVuaXFzdHIuaCIKIAotLyogVGhlIG5hbWUgdGhpcyBwcm9ncmFtIHdhcyBydW4gd2l0aCwgZm9yIG1lc3NhZ2VzLiAgKi8KLWNoYXIgKnByb2dyYW1fbmFtZTsKLQotCiAKIGludAogbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKLSAgcHJvZ3JhbV9uYW1lID0gYXJndlswXTsKKyAgc2V0X3Byb2dyYW1fbmFtZSAoYXJndlswXSk7CiAgIHNldGxvY2FsZSAoTENfQUxMLCAiIik7CiAgICh2b2lkKSBiaW5kdGV4dGRvbWFpbiAoUEFDS0FHRSwgTE9DQUxFRElSKTsKICAgKHZvaWQpIGJpbmR0ZXh0ZG9tYWluICgiYmlzb24tcnVudGltZSIsIExPQ0FMRURJUik7CiAgICh2b2lkKSB0ZXh0ZG9tYWluIChQQUNLQUdFKTsKIAorICB7CisgICAgY2hhciBjb25zdCAqY3AgPSBnZXRlbnYgKCJMQ19DVFlQRSIpOworICAgIGlmIChjcCAmJiAhc3RyY21wIChjcCwgIkMiKSkKKyAgICAgIHNldF9jdXN0b21fcXVvdGluZyAoJnF1b3RlX3F1b3Rpbmdfb3B0aW9ucywgIiciLCAiJyIpOworICAgIGVsc2UKKyAgICAgIHNldF9xdW90aW5nX3N0eWxlICgmcXVvdGVfcXVvdGluZ19vcHRpb25zLCBsb2NhbGVfcXVvdGluZ19zdHlsZSk7CisgIH0KKworICBhdGV4aXQgKGNsb3NlX3N0ZG91dCk7CisKICAgdW5pcXN0cnNfbmV3ICgpOworICBtdXNjbGVfaW5pdCAoKTsKIAogICBnZXRhcmdzIChhcmdjLCBhcmd2KTsKIApAQCAtNzEsOCArODYsNiBAQAogICBpZiAodHJhY2VfZmxhZyAmIHRyYWNlX2JpdHNldHMpCiAgICAgYml0c2V0X3N0YXRzX2VuYWJsZSAoKTsKIAotICBtdXNjbGVfaW5pdCAoKTsKLQogICAvKiBSZWFkIHRoZSBpbnB1dC4gIENvcHkgc29tZSBwYXJ0cyBvZiBpdCB0byBGR1VBUkQsIEZBQ1RJT04sIEZUQUJMRQogICAgICBhbmQgRkFUVFJTLiAgSW4gZmlsZSByZWFkZXIuYy4gIFRoZSBvdGhlciBwYXJ0cyBhcmUgcmVjb3JkZWQgaW4KICAgICAgdGhlIGdyYW1tYXI7IHNlZSBncmFtLmguICAqLwpAQCAtOTYsMjMgKzEwOSwzMSBAQAogICBudWxsYWJsZV9jb21wdXRlICgpOwogICB0aW1ldmFyX3BvcCAoVFZfU0VUUyk7CiAKLSAgLyogQ29udmVydCB0byBub25kZXRlcm1pbmlzdGljIGZpbml0ZSBzdGF0ZSBtYWNoaW5lLiAgSW4gZmlsZSBMUjAuCi0gICAgIFNlZSBzdGF0ZS5oIGZvciBtb3JlIGluZm8uICAqLworICAvKiBDb21wdXRlIExSKDApIHBhcnNlciBzdGF0ZXMuICBTZWUgc3RhdGUuaCBmb3IgbW9yZSBpbmZvLiAgKi8KICAgdGltZXZhcl9wdXNoIChUVl9MUjApOwogICBnZW5lcmF0ZV9zdGF0ZXMgKCk7CiAgIHRpbWV2YXJfcG9wIChUVl9MUjApOwogCi0gIC8qIG1ha2UgaXQgZGV0ZXJtaW5pc3RpYy4gIEluIGZpbGUgbGFsci4gICovCi0gIHRpbWV2YXJfcHVzaCAoVFZfTEFMUik7Ci0gIGxhbHIgKCk7Ci0gIHRpbWV2YXJfcG9wIChUVl9MQUxSKTsKKyAgLyogQWRkIGxvb2thaGVhZCBzZXRzIHRvIHBhcnNlciBzdGF0ZXMuICBFeGNlcHQgd2hlbiBMQUxSKDEpIGlzCisgICAgIHJlcXVlc3RlZCwgc3BsaXQgc3RhdGVzIHRvIGVsaW1pbmF0ZSBMUigxKS1yZWxhdGl2ZQorICAgICBpbmFkZXF1YWNpZXMuICAqLworICBpZWxyICgpOwogCiAgIC8qIEZpbmQgYW5kIHJlY29yZCBhbnkgY29uZmxpY3RzOiBwbGFjZXMgd2hlcmUgb25lIHRva2VuIG9mCi0gICAgIGxvb2stYWhlYWQgaXMgbm90IGVub3VnaCB0byBkaXNhbWJpZ3VhdGUgdGhlIHBhcnNpbmcuICBJbiBmaWxlCisgICAgIGxvb2thaGVhZCBpcyBub3QgZW5vdWdoIHRvIGRpc2FtYmlndWF0ZSB0aGUgcGFyc2luZy4gIEluIGZpbGUKICAgICAgY29uZmxpY3RzLiAgQWxzbyByZXNvbHZlIHMvciBjb25mbGljdHMgYmFzZWQgb24gcHJlY2VkZW5jZQogICAgICBkZWNsYXJhdGlvbnMuICAqLwogICB0aW1ldmFyX3B1c2ggKFRWX0NPTkZMSUNUUyk7CiAgIGNvbmZsaWN0c19zb2x2ZSAoKTsKKyAgaWYgKCFtdXNjbGVfcGVyY2VudF9kZWZpbmVfZmxhZ19pZiAoImxyLmtlZXAtdW5yZWFjaGFibGUtc3RhdGVzIikpCisgICAgeworICAgICAgc3RhdGVfbnVtYmVyICpvbGRfdG9fbmV3ID0geG5tYWxsb2MgKG5zdGF0ZXMsIHNpemVvZiAqb2xkX3RvX25ldyk7CisgICAgICBzdGF0ZV9udW1iZXIgbnN0YXRlc19vbGQgPSBuc3RhdGVzOworICAgICAgc3RhdGVfcmVtb3ZlX3VucmVhY2hhYmxlX3N0YXRlcyAob2xkX3RvX25ldyk7CisgICAgICBsYWxyX3VwZGF0ZV9zdGF0ZV9udW1iZXJzIChvbGRfdG9fbmV3LCBuc3RhdGVzX29sZCk7CisgICAgICBjb25mbGljdHNfdXBkYXRlX3N0YXRlX251bWJlcnMgKG9sZF90b19uZXcsIG5zdGF0ZXNfb2xkKTsKKyAgICAgIGZyZWUgKG9sZF90b19uZXcpOworICAgIH0KICAgY29uZmxpY3RzX3ByaW50ICgpOwogICB0aW1ldmFyX3BvcCAoVFZfQ09ORkxJQ1RTKTsKIApAQCAtMTIxLDggKzE0Miw4IEBACiAgIHRhYmxlc19nZW5lcmF0ZSAoKTsKICAgdGltZXZhcl9wb3AgKFRWX0FDVElPTlMpOwogCi0gIGdyYW1tYXJfcnVsZXNfbmV2ZXJfcmVkdWNlZF9yZXBvcnQKLSAgICAoXygicnVsZSBuZXZlciByZWR1Y2VkIGJlY2F1c2Ugb2YgY29uZmxpY3RzIikpOworICBncmFtbWFyX3J1bGVzX3VzZWxlc3NfcmVwb3J0CisgICAgKF8oInJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cyIpKTsKIAogICAvKiBPdXRwdXQgZmlsZSBuYW1lcy4gKi8KICAgY29tcHV0ZV9vdXRwdXRfZmlsZV9uYW1lcyAoKTsKQEAgLTEzNSw3ICsxNTYsNyBAQAogICAgICAgdGltZXZhcl9wb3AgKFRWX1JFUE9SVCk7CiAgICAgfQogCi0gIC8qIE91dHB1dCB0aGUgVkNHIGdyYXBoLiAgKi8KKyAgLyogT3V0cHV0IHRoZSBncmFwaC4gICovCiAgIGlmIChncmFwaF9mbGFnKQogICAgIHsKICAgICAgIHRpbWV2YXJfcHVzaCAoVFZfR1JBUEgpOwpAQCAtMTQzLDEyICsxNjQsMjAgQEAKICAgICAgIHRpbWV2YXJfcG9wIChUVl9HUkFQSCk7CiAgICAgfQogCisgIC8qIE91dHB1dCB4bWwuICAqLworICBpZiAoeG1sX2ZsYWcpCisgICAgeworICAgICAgdGltZXZhcl9wdXNoIChUVl9YTUwpOworICAgICAgcHJpbnRfeG1sICgpOworICAgICAgdGltZXZhcl9wb3AgKFRWX1hNTCk7CisgICAgfQorCiAgIC8qIFN0b3AgaWYgdGhlcmUgd2VyZSBlcnJvcnMsIHRvIGF2b2lkIHRyYXNoaW5nIHByZXZpb3VzIG91dHB1dAogICAgICBmaWxlcy4gICovCiAgIGlmIChjb21wbGFpbnRfaXNzdWVkKQogICAgIGdvdG8gZmluaXNoOwogCi0gIC8qIExvb2stYWhlYWQgdG9rZW5zIGFyZSBubyBsb25nZXIgbmVlZGVkLiAqLworICAvKiBMb29rYWhlYWQgdG9rZW5zIGFyZSBubyBsb25nZXIgbmVlZGVkLiAqLwogICB0aW1ldmFyX3B1c2ggKFRWX0ZSRUUpOwogICBsYWxyX2ZyZWUgKCk7CiAgIHRpbWV2YXJfcG9wIChUVl9GUkVFKTsKQEAgLTE2NiwxMiArMTk1LDE2IEBACiAgIHJlZHVjZV9mcmVlICgpOwogICBjb25mbGljdHNfZnJlZSAoKTsKICAgZ3JhbW1hcl9mcmVlICgpOworICBvdXRwdXRfZmlsZV9uYW1lc19mcmVlICgpOwogCiAgIC8qIFRoZSBzY2FubmVyIG1lbW9yeSBjYW5ub3QgYmUgcmVsZWFzZWQgcmlnaHQgYWZ0ZXIgcGFyc2luZywgYXMgaXQKICAgICAgY29udGFpbnMgdGhpbmdzIHN1Y2ggYXMgdXNlciBhY3Rpb25zLCBwcm9sb2d1ZSwgZXBpbG9ndWUgZXRjLiAgKi8KLSAgc2Nhbm5lcl9mcmVlICgpOworICBncmFtX3NjYW5uZXJfZnJlZSAoKTsKICAgbXVzY2xlX2ZyZWUgKCk7CiAgIHVuaXFzdHJzX2ZyZWUgKCk7CisgIGNvZGVfc2Nhbm5lcl9mcmVlICgpOworICBza2VsX3NjYW5uZXJfZnJlZSAoKTsKKyAgcXVvdGVhcmdfZnJlZSAoKTsKICAgdGltZXZhcl9wb3AgKFRWX0ZSRUUpOwogCiAgIGlmICh0cmFjZV9mbGFnICYgdHJhY2VfYml0c2V0cykKQEAgLTE4Myw1ICsyMTYsNyBAQAogICB0aW1ldmFyX3N0b3AgKFRWX1RPVEFMKTsKICAgdGltZXZhcl9wcmludCAoc3RkZXJyKTsKIAorICBjbGVhbnVwX2NhcmV0ICgpOworCiAgIHJldHVybiBjb21wbGFpbnRfaXNzdWVkID8gRVhJVF9GQUlMVVJFIDogRVhJVF9TVUNDRVNTOwogfQpkaWZmIC0tZ2l0IGEvc3JjL211c2NsZS10YWIuYyBiL3NyYy9tdXNjbGUtdGFiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM2YWY3MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tdXNjbGUtdGFiLmMKQEAgLTAsMCArMSw2NjkgQEAKKy8qIE11c2NsZSB0YWJsZSBtYW5hZ2VyIGZvciBCaXNvbi4KKworICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSAic3lzdGVtLmgiCisKKyNpbmNsdWRlIDxoYXNoLmg+CisKKyNpbmNsdWRlICJjb21wbGFpbi5oIgorI2luY2x1ZGUgImZpbGVzLmgiCisjaW5jbHVkZSAiZ2V0YXJncy5oIgorI2luY2x1ZGUgIm11c2NsZS10YWIuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorCisvKiBBIGtleS12YWx1ZSBwYWlyLCBhbG9uZyB3aXRoIHN0b3JhZ2UgdGhhdCBjYW4gYmUgcmVjbGFpbWVkIHdoZW4KKyAgIHRoaXMgcGFpciBpcyBubyBsb25nZXIgbmVlZGVkLiAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIGNoYXIgY29uc3QgKmtleTsKKyAgY2hhciBjb25zdCAqdmFsdWU7CisgIGNoYXIgKnN0b3JhZ2U7Cit9IG11c2NsZV9lbnRyeTsKKworLyogQW4gb2JzdGFjayB1c2VkIHRvIGNyZWF0ZSBzb21lIGVudHJpZXMuICAqLworc3RydWN0IG9ic3RhY2sgbXVzY2xlX29ic3RhY2s7CisKKy8qIEluaXRpYWwgY2FwYWNpdHkgb2YgbXVzY2xlcyBoYXNoIHRhYmxlLiAgKi8KKyNkZWZpbmUgSFRfSU5JVElBTF9DQVBBQ0lUWSAyNTcKKworc3RhdGljIHN0cnVjdCBoYXNoX3RhYmxlICptdXNjbGVfdGFibGUgPSBOVUxMOworCitzdGF0aWMgYm9vbAoraGFzaF9jb21wYXJlX211c2NsZXMgKHZvaWQgY29uc3QgKngsIHZvaWQgY29uc3QgKnkpCit7CisgIG11c2NsZV9lbnRyeSBjb25zdCAqbTEgPSB4OworICBtdXNjbGVfZW50cnkgY29uc3QgKm0yID0geTsKKyAgcmV0dXJuIHN0cmNtcCAobTEtPmtleSwgbTItPmtleSkgPT0gMDsKK30KKworc3RhdGljIHNpemVfdAoraGFzaF9tdXNjbGUgKGNvbnN0IHZvaWQgKngsIHNpemVfdCB0YWJsZXNpemUpCit7CisgIG11c2NsZV9lbnRyeSBjb25zdCAqbSA9IHg7CisgIHJldHVybiBoYXNoX3N0cmluZyAobS0+a2V5LCB0YWJsZXNpemUpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBDcmVhdGUgdGhlIE1VU0NMRV9UQUJMRSwgYW5kIGluaXRpYWxpemUgaXQgd2l0aCBkZWZhdWx0IHZhbHVlcy4gIHwKK3wgQWxzbyBzZXQgdXAgdGhlIE1VU0NMRV9PQlNUQUNLLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZAorbXVzY2xlX2VudHJ5X2ZyZWUgKHZvaWQgKmVudHJ5KQoreworICBtdXNjbGVfZW50cnkgKm1lbnRyeSA9IGVudHJ5OworICBmcmVlIChtZW50cnktPnN0b3JhZ2UpOworICBmcmVlIChtZW50cnkpOworfQorCit2b2lkCittdXNjbGVfaW5pdCAodm9pZCkKK3sKKyAgLyogSW5pdGlhbGl6ZSB0aGUgbXVzY2xlIG9ic3RhY2suICAqLworICBvYnN0YWNrX2luaXQgKCZtdXNjbGVfb2JzdGFjayk7CisKKyAgbXVzY2xlX3RhYmxlID0gaGFzaF9pbml0aWFsaXplIChIVF9JTklUSUFMX0NBUEFDSVRZLCBOVUxMLCBoYXNoX211c2NsZSwKKwkJCQkgIGhhc2hfY29tcGFyZV9tdXNjbGVzLCBtdXNjbGVfZW50cnlfZnJlZSk7CisKKyAgLyogVmVyc2lvbiBhbmQgaW5wdXQgZmlsZS4gICovCisgIE1VU0NMRV9JTlNFUlRfU1RSSU5HICgidmVyc2lvbiIsIFZFUlNJT04pOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBGcmVlIGFsbCB0aGUgbWVtb3J5IGNvbnN1bWVkIGJ5IHRoZSBtdXNjbGUgbWFjaGluZXJ5IG9ubHkuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordm9pZAorbXVzY2xlX2ZyZWUgKHZvaWQpCit7CisgIGhhc2hfZnJlZSAobXVzY2xlX3RhYmxlKTsKKyAgb2JzdGFja19mcmVlICgmbXVzY2xlX29ic3RhY2ssIE5VTEwpOworfQorCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IEluc2VydCAoS0VZLCBWQUxVRSkuICBJZiBLRVkgYWxyZWFkeSBleGlzdGVkLCBvdmVyd3JpdGUgdGhlIHwKK3wgcHJldmlvdXMgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3ZvaWQKK211c2NsZV9pbnNlcnQgKGNoYXIgY29uc3QgKmtleSwgY2hhciBjb25zdCAqdmFsdWUpCit7CisgIG11c2NsZV9lbnRyeSBwcm9iZTsKKyAgbXVzY2xlX2VudHJ5ICplbnRyeTsKKworICBwcm9iZS5rZXkgPSBrZXk7CisgIGVudHJ5ID0gaGFzaF9sb29rdXAgKG11c2NsZV90YWJsZSwgJnByb2JlKTsKKworICBpZiAoIWVudHJ5KQorICAgIHsKKyAgICAgIC8qIEZpcnN0IGluc2VydGlvbiBpbiB0aGUgaGFzaC4gKi8KKyAgICAgIGVudHJ5ID0geG1hbGxvYyAoc2l6ZW9mICplbnRyeSk7CisgICAgICBlbnRyeS0+a2V5ID0ga2V5OworICAgICAgaWYgKCFoYXNoX2luc2VydCAobXVzY2xlX3RhYmxlLCBlbnRyeSkpCisgICAgICAgIHhhbGxvY19kaWUgKCk7CisgICAgfQorICBlbHNlCisgICAgZnJlZSAoZW50cnktPnN0b3JhZ2UpOworICBlbnRyeS0+dmFsdWUgPSB2YWx1ZTsKKyAgZW50cnktPnN0b3JhZ2UgPSBOVUxMOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgQXBwZW5kIFZBTFVFIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9mIEtFWS4gIElmIEtFWSBkaWQgbm90IGFscmVhZHkgIHwKK3wgZXhpc3QsIGNyZWF0ZSBpdC4gIFVzZSBNVVNDTEVfT0JTVEFDSy4gIERlLWFsbG9jYXRlIHRoZSBwcmV2aW91c2x5IHwKK3wgYXNzb2NpYXRlZCB2YWx1ZS4gIENvcHkgVkFMVUUgYW5kIFNFUEFSQVRPUi4gICAgICAgICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordm9pZAorbXVzY2xlX2dyb3cgKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsLCBjb25zdCBjaGFyICpzZXBhcmF0b3IpCit7CisgIG11c2NsZV9lbnRyeSBwcm9iZTsKKyAgbXVzY2xlX2VudHJ5ICplbnRyeSA9IE5VTEw7CisKKyAgcHJvYmUua2V5ID0ga2V5OworICBlbnRyeSA9IGhhc2hfbG9va3VwIChtdXNjbGVfdGFibGUsICZwcm9iZSk7CisKKyAgaWYgKCFlbnRyeSkKKyAgICB7CisgICAgICAvKiBGaXJzdCBpbnNlcnRpb24gaW4gdGhlIGhhc2guICovCisgICAgICBlbnRyeSA9IHhtYWxsb2MgKHNpemVvZiAqZW50cnkpOworICAgICAgZW50cnktPmtleSA9IGtleTsKKyAgICAgIGlmICghaGFzaF9pbnNlcnQgKG11c2NsZV90YWJsZSwgZW50cnkpKQorICAgICAgICB4YWxsb2NfZGllICgpOworICAgICAgZW50cnktPnZhbHVlID0gZW50cnktPnN0b3JhZ2UgPSB4c3RyZHVwICh2YWwpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIEdyb3cgdGhlIGN1cnJlbnQgdmFsdWUuICovCisgICAgICBjaGFyICpuZXdfdmFsOworICAgICAgb2JzdGFja19zZ3JvdyAoJm11c2NsZV9vYnN0YWNrLCBlbnRyeS0+dmFsdWUpOworICAgICAgZnJlZSAoZW50cnktPnN0b3JhZ2UpOworICAgICAgb2JzdGFja19zZ3JvdyAoJm11c2NsZV9vYnN0YWNrLCBzZXBhcmF0b3IpOworICAgICAgb2JzdGFja19zZ3JvdyAoJm11c2NsZV9vYnN0YWNrLCB2YWwpOworICAgICAgb2JzdGFja18xZ3JvdyAoJm11c2NsZV9vYnN0YWNrLCAwKTsKKyAgICAgIG5ld192YWwgPSBvYnN0YWNrX2ZpbmlzaCAoJm11c2NsZV9vYnN0YWNrKTsKKyAgICAgIGVudHJ5LT52YWx1ZSA9IGVudHJ5LT5zdG9yYWdlID0geHN0cmR1cCAobmV3X3ZhbCk7CisgICAgICBvYnN0YWNrX2ZyZWUgKCZtdXNjbGVfb2JzdGFjaywgbmV3X3ZhbCk7CisgICAgfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgVXNpbmcgbXVzY2xlX2dyb3csIGFwcGVuZCBhIHN5bmNocm9uaXphdGlvbiBsaW5lIGZvciB0aGUgbG9jYXRpb24gfAorfCBMT0MgdG8gdGhlIGN1cnJlbnQgdmFsdWUgb2YgS0VZLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQKK211c2NsZV9zeW5jbGluZV9ncm93IChjaGFyIGNvbnN0ICprZXksIGxvY2F0aW9uIGxvYykKK3sKKyAgY2hhciAqZXh0ZW5zaW9uID0gTlVMTDsKKyAgb2JzdGFja19wcmludGYgKCZtdXNjbGVfb2JzdGFjaywgIl1iNF9zeW5jbGluZSglZCwgIiwgbG9jLnN0YXJ0LmxpbmUpOworICBvYnN0YWNrX3F1b3RlICgmbXVzY2xlX29ic3RhY2ssCisgICAgICAgICAgICAgICAgIHF1b3RlYXJnX3N0eWxlIChjX3F1b3Rpbmdfc3R5bGUsIGxvYy5zdGFydC5maWxlKSk7CisgIG9ic3RhY2tfc2dyb3cgKCZtdXNjbGVfb2JzdGFjaywgIilbIik7CisgIG9ic3RhY2tfMWdyb3cgKCZtdXNjbGVfb2JzdGFjaywgMCk7CisgIGV4dGVuc2lvbiA9IG9ic3RhY2tfZmluaXNoICgmbXVzY2xlX29ic3RhY2spOworICBtdXNjbGVfZ3JvdyAoa2V5LCBleHRlbnNpb24sICIiKTsKKyAgb2JzdGFja19mcmVlICgmbXVzY2xlX29ic3RhY2ssIGV4dGVuc2lvbik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBBcHBlbmQgVkFMVUUgdG8gdGhlIGN1cnJlbnQgdmFsdWUgb2YgS0VZLCB1c2luZyBtdXNjbGVfZ3Jvdy4gIEJ1dCB8Cit8IGluIGFkZGl0aW9uLCBpc3N1ZSBhIHN5bmNocm9uaXphdGlvbiBsaW5lIGZvciB0aGUgbG9jYXRpb24gTE9DICAgIHwKK3wgdXNpbmcgbXVzY2xlX3N5bmNsaW5lX2dyb3cuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3ZvaWQKK211c2NsZV9jb2RlX2dyb3cgKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsLCBsb2NhdGlvbiBsb2MpCit7CisgIG11c2NsZV9zeW5jbGluZV9ncm93IChrZXksIGxvYyk7CisgIG11c2NsZV9ncm93IChrZXksIHZhbCwgIlxuIik7Cit9CisKKwordm9pZCBtdXNjbGVfcGFpcl9saXN0X2dyb3cgKGNvbnN0IGNoYXIgKm11c2NsZSwKKwkJCSAgICBjb25zdCBjaGFyICphMSwgY29uc3QgY2hhciAqYTIpCit7CisgIGNoYXIgKnBhaXI7CisgIG9ic3RhY2tfc2dyb3cgKCZtdXNjbGVfb2JzdGFjaywgIlsiKTsKKyAgb2JzdGFja19xdW90ZSAoJm11c2NsZV9vYnN0YWNrLCBhMSk7CisgIG9ic3RhY2tfc2dyb3cgKCZtdXNjbGVfb2JzdGFjaywgIiwgIik7CisgIG9ic3RhY2tfcXVvdGUgKCZtdXNjbGVfb2JzdGFjaywgYTIpOworICBvYnN0YWNrX3Nncm93ICgmbXVzY2xlX29ic3RhY2ssICJdIik7CisgIG9ic3RhY2tfMWdyb3cgKCZtdXNjbGVfb2JzdGFjaywgMCk7CisgIHBhaXIgPSBvYnN0YWNrX2ZpbmlzaCAoJm11c2NsZV9vYnN0YWNrKTsKKyAgbXVzY2xlX2dyb3cgKG11c2NsZSwgcGFpciwgIixcbiIpOworICBvYnN0YWNrX2ZyZWUgKCZtdXNjbGVfb2JzdGFjaywgcGFpcik7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBGaW5kIHRoZSB2YWx1ZSBvZiBtdXNjbGUgS0VZLiAgVW5saWtlIE1VU0NMRV9GSU5ELCB0aGlzIGlzIGFsd2F5cyByZWxpYWJsZSAgfAorfCB0byBkZXRlcm1pbmUgd2hldGhlciBLRVkgaGFzIGEgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitjaGFyIGNvbnN0ICoKK211c2NsZV9maW5kX2NvbnN0IChjaGFyIGNvbnN0ICprZXkpCit7CisgIG11c2NsZV9lbnRyeSBwcm9iZTsKKyAgbXVzY2xlX2VudHJ5ICpyZXN1bHQgPSBOVUxMOworCisgIHByb2JlLmtleSA9IGtleTsKKyAgcmVzdWx0ID0gaGFzaF9sb29rdXAgKG11c2NsZV90YWJsZSwgJnByb2JlKTsKKyAgaWYgKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBGaW5kIHRoZSB2YWx1ZSBvZiBtdXNjbGUgS0VZLiAgQWJvcnQgaWYgbXVzY2xlX2luc2VydCB3YXMgaW52b2tlZCBtb3JlICAgICAgfAorfCByZWNlbnRseSB0aGFuIG11c2NsZV9ncm93IGZvciBLRVkgc2luY2UgbXVzY2xlX2ZpbmQgY2FuJ3QgcmV0dXJuIGEgICAgICAgICAgfAorfCBjaGFyIGNvbnN0ICouICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitjaGFyICoKK211c2NsZV9maW5kIChjaGFyIGNvbnN0ICprZXkpCit7CisgIG11c2NsZV9lbnRyeSBwcm9iZTsKKyAgbXVzY2xlX2VudHJ5ICpyZXN1bHQgPSBOVUxMOworCisgIHByb2JlLmtleSA9IGtleTsKKyAgcmVzdWx0ID0gaGFzaF9sb29rdXAgKG11c2NsZV90YWJsZSwgJnByb2JlKTsKKyAgaWYgKHJlc3VsdCkKKyAgICB7CisgICAgICBhdmVyIChyZXN1bHQtPnZhbHVlID09IHJlc3VsdC0+c3RvcmFnZSk7CisgICAgICByZXR1cm4gcmVzdWx0LT5zdG9yYWdlOworICAgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CisKKworLyogSW4gdGhlIGZvcm1hdCBgZmlsZV9uYW1lOmxpbmUuY29sdW1uJywgYXBwZW5kIEJPVU5EIHRvIE1VU0NMRS4gIFVzZQorICAgZGlncmFwaHMgZm9yIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgZmlsZSBuYW1lLiAgKi8KKworc3RhdGljIHZvaWQKK211c2NsZV9ib3VuZGFyeV9ncm93IChjaGFyIGNvbnN0ICprZXksIGJvdW5kYXJ5IGJvdW5kKQoreworICBjaGFyICpleHRlbnNpb247CisgIG9ic3RhY2tfc2dyb3cgICgmbXVzY2xlX29ic3RhY2ssICJbWyIpOworICBvYnN0YWNrX2VzY2FwZSAoJm11c2NsZV9vYnN0YWNrLCBib3VuZC5maWxlKTsKKyAgb2JzdGFja18xZ3JvdyAgKCZtdXNjbGVfb2JzdGFjaywgJzonKTsKKyAgb2JzdGFja19wcmludGYgKCZtdXNjbGVfb2JzdGFjaywgIiVkIiwgYm91bmQubGluZSk7CisgIG9ic3RhY2tfMWdyb3cgICgmbXVzY2xlX29ic3RhY2ssICcuJyk7CisgIG9ic3RhY2tfcHJpbnRmICgmbXVzY2xlX29ic3RhY2ssICIlZCIsIGJvdW5kLmNvbHVtbik7CisgIG9ic3RhY2tfc2dyb3cgICgmbXVzY2xlX29ic3RhY2ssICJdXSIpOworICBvYnN0YWNrXzFncm93ICAoJm11c2NsZV9vYnN0YWNrLCAnXDAnKTsKKyAgZXh0ZW5zaW9uID0gb2JzdGFja19maW5pc2ggKCZtdXNjbGVfb2JzdGFjayk7CisgIG11c2NsZV9ncm93IChrZXksIGV4dGVuc2lvbiwgIiIpOworICBvYnN0YWNrX2ZyZWUgKCZtdXNjbGVfb2JzdGFjaywgZXh0ZW5zaW9uKTsKK30KKworCisvKiBJbiB0aGUgZm9ybWF0IGBbW2ZpbGVfbmFtZTpsaW5lLmNvbHVtbl1dLCBbW2ZpbGVfbmFtZTpsaW5lLmNvbHVtbl1dJywKKyAgIGFwcGVuZCBMT0MgdG8gTVVTQ0xFLiAgVXNlIGRpZ3JhcGhzIGZvciBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gZWFjaAorICAgZmlsZSBuYW1lLiAgKi8KKworc3RhdGljIHZvaWQKK211c2NsZV9sb2NhdGlvbl9ncm93IChjaGFyIGNvbnN0ICprZXksIGxvY2F0aW9uIGxvYykKK3sKKyAgbXVzY2xlX2JvdW5kYXJ5X2dyb3cgKGtleSwgbG9jLnN0YXJ0KTsKKyAgbXVzY2xlX2dyb3cgKGtleSwgIiIsICIsICIpOworICBtdXNjbGVfYm91bmRhcnlfZ3JvdyAoa2V5LCBsb2MuZW5kKTsKK30KKworI2RlZmluZSBDT01NT05fREVDT0RFKFZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY2FzZSAnJCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYXZlciAoKisrKFZhbHVlKSA9PSAnXScpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGF2ZXIgKCorKyhWYWx1ZSkgPT0gJ1snKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBvYnN0YWNrX3Nncm93ICgmbXVzY2xlX29ic3RhY2ssICIkIik7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBjYXNlICdAJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzd2l0Y2ggKCorKyhWYWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBjYXNlICdAJzogb2JzdGFja19zZ3JvdyAoJm11c2NsZV9vYnN0YWNrLCAiQCIgKTsgYnJlYWs7IFwKKyAgICAgICAgY2FzZSAneyc6IG9ic3RhY2tfc2dyb3cgKCZtdXNjbGVfb2JzdGFjaywgIlsiICk7IGJyZWFrOyBcCisgICAgICAgIGNhc2UgJ30nOiBvYnN0YWNrX3Nncm93ICgmbXVzY2xlX29ic3RhY2ssICJdIiApOyBicmVhazsgXAorICAgICAgICBkZWZhdWx0OiBhdmVyIChmYWxzZSk7IGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBvYnN0YWNrXzFncm93ICgmbXVzY2xlX29ic3RhY2ssICooVmFsdWUpKTsgICAgICAgICAgICAgICAgICBcCisgICAgYnJlYWs7CisKKy8qIFJldmVyc2Ugb2Ygb2JzdGFja19lc2NhcGUuICAqLworc3RhdGljIGNoYXIgKgorc3RyaW5nX2RlY29kZSAoY2hhciBjb25zdCAqa2V5KQoreworICBjaGFyIGNvbnN0ICp2YWx1ZTsKKyAgY2hhciAqdmFsdWVfZGVjb2RlZDsKKyAgY2hhciAqcmVzdWx0OworCisgIHZhbHVlID0gbXVzY2xlX2ZpbmRfY29uc3QgKGtleSk7CisgIGlmICghdmFsdWUpCisgICAgcmV0dXJuIE5VTEw7CisgIGRvIHsKKyAgICBzd2l0Y2ggKCp2YWx1ZSkKKyAgICAgIHsKKyAgICAgICAgQ09NTU9OX0RFQ09ERSAodmFsdWUpCisgICAgICAgIGNhc2UgJ1snOgorICAgICAgICBjYXNlICddJzoKKyAgICAgICAgICBhdmVyIChmYWxzZSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgIH0gd2hpbGUgKCp2YWx1ZSsrKTsKKyAgdmFsdWVfZGVjb2RlZCA9IG9ic3RhY2tfZmluaXNoICgmbXVzY2xlX29ic3RhY2spOworICByZXN1bHQgPSB4c3RyZHVwICh2YWx1ZV9kZWNvZGVkKTsKKyAgb2JzdGFja19mcmVlICgmbXVzY2xlX29ic3RhY2ssIHZhbHVlX2RlY29kZWQpOworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBSZXZlcnNlIG9mIG11c2NsZV9sb2NhdGlvbl9ncm93LiAgKi8KK3N0YXRpYyBsb2NhdGlvbgorbG9jYXRpb25fZGVjb2RlIChjaGFyIGNvbnN0ICprZXkpCit7CisgIGxvY2F0aW9uIGxvYzsKKyAgY2hhciBjb25zdCAqdmFsdWUgPSBtdXNjbGVfZmluZF9jb25zdCAoa2V5KTsKKyAgYXZlciAodmFsdWUpOworICBhdmVyICgqdmFsdWUgPT0gJ1snKTsKKyAgYXZlciAoKisrdmFsdWUgPT0gJ1snKTsKKyAgd2hpbGUgKCorK3ZhbHVlKQorICAgIHN3aXRjaCAoKnZhbHVlKQorICAgICAgeworICAgICAgICBDT01NT05fREVDT0RFICh2YWx1ZSkKKyAgICAgICAgY2FzZSAnWyc6CisgICAgICAgICAgYXZlciAoZmFsc2UpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICddJzoKKyAgICAgICAgICB7CisgICAgICAgICAgICBjaGFyICpib3VuZGFyeV9zdHI7CisgICAgICAgICAgICBhdmVyICgqKyt2YWx1ZSA9PSAnXScpOworICAgICAgICAgICAgb2JzdGFja18xZ3JvdyAoJm11c2NsZV9vYnN0YWNrLCAnXDAnKTsKKyAgICAgICAgICAgIGJvdW5kYXJ5X3N0ciA9IG9ic3RhY2tfZmluaXNoICgmbXVzY2xlX29ic3RhY2spOworICAgICAgICAgICAgc3dpdGNoICgqKyt2YWx1ZSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgJywnOgorICAgICAgICAgICAgICAgICAgYm91bmRhcnlfc2V0X2Zyb21fc3RyaW5nICgmbG9jLnN0YXJ0LCBib3VuZGFyeV9zdHIpOworICAgICAgICAgICAgICAgICAgb2JzdGFja19mcmVlICgmbXVzY2xlX29ic3RhY2ssIGJvdW5kYXJ5X3N0cik7CisgICAgICAgICAgICAgICAgICBhdmVyICgqKyt2YWx1ZSA9PSAnICcpOworICAgICAgICAgICAgICAgICAgYXZlciAoKisrdmFsdWUgPT0gJ1snKTsKKyAgICAgICAgICAgICAgICAgIGF2ZXIgKCorK3ZhbHVlID09ICdbJyk7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICdcMCc6CisgICAgICAgICAgICAgICAgICBib3VuZGFyeV9zZXRfZnJvbV9zdHJpbmcgKCZsb2MuZW5kLCBib3VuZGFyeV9zdHIpOworICAgICAgICAgICAgICAgICAgb2JzdGFja19mcmVlICgmbXVzY2xlX29ic3RhY2ssIGJvdW5kYXJ5X3N0cik7CisgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgIGF2ZXIgKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgfQorICBhdmVyIChmYWxzZSk7CisgIHJldHVybiBsb2M7Cit9CisKK3ZvaWQKK211c2NsZV91c2VyX25hbWVfbGlzdF9ncm93IChjaGFyIGNvbnN0ICprZXksIGNoYXIgY29uc3QgKnVzZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiBsb2MpCit7CisgIG11c2NsZV9ncm93IChrZXksICJbW1tbIiwgIiwiKTsKKyAgbXVzY2xlX2dyb3cgKGtleSwgdXNlcl9uYW1lLCAiIik7CisgIG11c2NsZV9ncm93IChrZXksICJdXSwgIiwgIiIpOworICBtdXNjbGVfbG9jYXRpb25fZ3JvdyAoa2V5LCBsb2MpOworICBtdXNjbGVfZ3JvdyAoa2V5LCAiXV0iLCAiIik7Cit9CisKKy8qKiBJZiB0aGUgXGEgdmFyaWFibGUgbmFtZSBpcyBvYnNvbGV0ZSwgcmV0dXJuIHRoZSBuYW1lIHRvIHVzZSwKKyAqIG90aGVyd2lzZSBcYSB2YXJpYWJsZS4gKi8KK3N0YXRpYworY2hhciBjb25zdCAqCittdXNjbGVfcGVyY2VudF92YXJpYWJsZV91cGRhdGUgKGNoYXIgY29uc3QgKnZhcmlhYmxlKQoreworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgY29uc3QgY2hhciAqb2Jzb2xldGU7CisgICAgY29uc3QgY2hhciAqdXBkYXRlZDsKKyAgfSBjb252ZXJzaW9uX3R5cGU7CisgIGNvbnN0IGNvbnZlcnNpb25fdHlwZSBjb252ZXJzaW9uW10gPQorICAgIHsKKyAgICAgIHsgImFwaS5wdXNoX3B1bGwiLCAiYXBpLnB1c2gtcHVsbCIsIH0sCisgICAgICB7ICJsb2NhdGlvbl90eXBlIiwgImFwaS5sb2NhdGlvbi50eXBlIiwgfSwKKyAgICAgIHsgImxyLmtlZXBfdW5yZWFjaGFibGVfc3RhdGVzIiwgImxyLmtlZXAtdW5yZWFjaGFibGUtc3RhdGVzIiwgfSwKKyAgICB9OworICBjaGFyIGNvbnN0ICpyZXMgPSB2YXJpYWJsZTsKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9DQVJESU5BTElUWSAoY29udmVyc2lvbik7ICsraSkKKyAgICBpZiAoU1RSRVEgKGNvbnZlcnNpb25baV0ub2Jzb2xldGUsIHZhcmlhYmxlKSkKKyAgICAgIHsKKyAgICAgICAgcmVzID0gY29udmVyc2lvbltpXS51cGRhdGVkOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgcmV0dXJuIHJlczsKK30KKwordm9pZAorbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2luc2VydCAoY2hhciBjb25zdCAqdmFyLCBsb2NhdGlvbiB2YXJpYWJsZV9sb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c2NsZV9wZXJjZW50X2RlZmluZV9ob3cgaG93KQoreworICAvKiBCYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgKi8KKyAgY2hhciBjb25zdCAqdmFyaWFibGUgPSBtdXNjbGVfcGVyY2VudF92YXJpYWJsZV91cGRhdGUgKHZhcik7CisgIGNoYXIgY29uc3QgKm5hbWUgPSBVTklRU1RSX0NPTkNBVCAoInBlcmNlbnRfZGVmaW5lKCIsIHZhcmlhYmxlLCAiKSIpOworICBjaGFyIGNvbnN0ICpsb2NfbmFtZSA9IFVOSVFTVFJfQ09OQ0FUICgicGVyY2VudF9kZWZpbmVfbG9jKCIsIHZhcmlhYmxlLCAiKSIpOworICBjaGFyIGNvbnN0ICpzeW5jbGluZV9uYW1lID0KKyAgICBVTklRU1RSX0NPTkNBVCAoInBlcmNlbnRfZGVmaW5lX3N5bmNsaW5lKCIsIHZhcmlhYmxlLCAiKSIpOworICBjaGFyIGNvbnN0ICpob3dfbmFtZSA9IFVOSVFTVFJfQ09OQ0FUICgicGVyY2VudF9kZWZpbmVfaG93KCIsIHZhcmlhYmxlLCAiKSIpOworCisgIC8qIENvbW1hbmQtbGluZSBvcHRpb25zIGFyZSBwcm9jZXNzZWQgYmVmb3JlIHRoZSBncmFtbWFyIGZpbGUuICAqLworICBpZiAoaG93ID09IE1VU0NMRV9QRVJDRU5UX0RFRklORV9HUkFNTUFSX0ZJTEUKKyAgICAgICYmIG11c2NsZV9maW5kX2NvbnN0IChuYW1lKSkKKyAgICB7CisgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgIG11c2NsZV9wZXJjZW50X2RlZmluZV9ob3cgaG93X29sZCA9CisgICAgICAgIGF0b2kgKG11c2NsZV9maW5kX2NvbnN0IChob3dfbmFtZSkpOworICAgICAgaWYgKGhvd19vbGQgPT0gTVVTQ0xFX1BFUkNFTlRfREVGSU5FX0YpCisgICAgICAgIHJldHVybjsKKyAgICAgIGNvbXBsYWluX2F0X2luZGVudCAodmFyaWFibGVfbG9jLCAmaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgXygiJSVkZWZpbmUgdmFyaWFibGUgJXMgcmVkZWZpbmVkIiksIHF1b3RlICh2YXJpYWJsZSkpOworICAgICAgaSArPSBTVUJfSU5ERU5UOworICAgICAgY29tcGxhaW5fYXRfaW5kZW50IChtdXNjbGVfcGVyY2VudF9kZWZpbmVfZ2V0X2xvYyAodmFyaWFibGUpLCAmaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgXygicHJldmlvdXMgZGVmaW5pdGlvbiIpKTsKKyAgICB9CisKKyAgTVVTQ0xFX0lOU0VSVF9TVFJJTkcgKG5hbWUsIHZhbHVlKTsKKyAgbXVzY2xlX2luc2VydCAobG9jX25hbWUsICIiKTsKKyAgbXVzY2xlX2xvY2F0aW9uX2dyb3cgKGxvY19uYW1lLCB2YXJpYWJsZV9sb2MpOworICBtdXNjbGVfaW5zZXJ0IChzeW5jbGluZV9uYW1lLCAiIik7CisgIG11c2NsZV9zeW5jbGluZV9ncm93IChzeW5jbGluZV9uYW1lLCB2YXJpYWJsZV9sb2MpOworICBtdXNjbGVfdXNlcl9uYW1lX2xpc3RfZ3JvdyAoInBlcmNlbnRfZGVmaW5lX3VzZXJfdmFyaWFibGVzIiwgdmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZV9sb2MpOworICBNVVNDTEVfSU5TRVJUX0lOVCAoaG93X25hbWUsIGhvdyk7Cit9CisKK2NoYXIgKgorbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2dldCAoY2hhciBjb25zdCAqdmFyaWFibGUpCit7CisgIGNoYXIgY29uc3QgKm5hbWU7CisgIGNoYXIgY29uc3QgKnVzYWdlX25hbWU7CisgIGNoYXIgKnZhbHVlOworCisgIG5hbWUgPSBVTklRU1RSX0NPTkNBVCAoInBlcmNlbnRfZGVmaW5lKCIsIHZhcmlhYmxlLCAiKSIpOworICB1c2FnZV9uYW1lID0gVU5JUVNUUl9DT05DQVQgKCJwZXJjZW50X2RlZmluZV9iaXNvbl92YXJpYWJsZXMoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgIikiKTsKKworICBtdXNjbGVfaW5zZXJ0ICh1c2FnZV9uYW1lLCAiIik7CisgIHZhbHVlID0gc3RyaW5nX2RlY29kZSAobmFtZSk7CisgIGlmICghdmFsdWUpCisgICAgdmFsdWUgPSB4c3RyZHVwICgiIik7CisgIHJldHVybiB2YWx1ZTsKK30KKworbG9jYXRpb24KK211c2NsZV9wZXJjZW50X2RlZmluZV9nZXRfbG9jIChjaGFyIGNvbnN0ICp2YXJpYWJsZSkKK3sKKyAgY2hhciBjb25zdCAqbG9jX25hbWU7CisgIGxvY19uYW1lID0gVU5JUVNUUl9DT05DQVQgKCJwZXJjZW50X2RlZmluZV9sb2MoIiwgdmFyaWFibGUsICIpIik7CisgIGlmICghbXVzY2xlX2ZpbmRfY29uc3QgKGxvY19uYW1lKSkKKyAgICBmYXRhbChfKCIlczogdW5kZWZpbmVkICUlZGVmaW5lIHZhcmlhYmxlICVzIiksCisgICAgICAgICAgIm11c2NsZV9wZXJjZW50X2RlZmluZV9nZXRfbG9jIiwgcXVvdGUgKHZhcmlhYmxlKSk7CisgIHJldHVybiBsb2NhdGlvbl9kZWNvZGUgKGxvY19uYW1lKTsKK30KKworY2hhciBjb25zdCAqCittdXNjbGVfcGVyY2VudF9kZWZpbmVfZ2V0X3N5bmNsaW5lIChjaGFyIGNvbnN0ICp2YXJpYWJsZSkKK3sKKyAgY2hhciBjb25zdCAqc3luY2xpbmVfbmFtZTsKKyAgY2hhciBjb25zdCAqc3luY2xpbmU7CisgIHN5bmNsaW5lX25hbWUgPQorICAgIFVOSVFTVFJfQ09OQ0FUICgicGVyY2VudF9kZWZpbmVfc3luY2xpbmUoIiwgdmFyaWFibGUsICIpIik7CisgIHN5bmNsaW5lID0gbXVzY2xlX2ZpbmRfY29uc3QgKHN5bmNsaW5lX25hbWUpOworICBpZiAoIXN5bmNsaW5lKQorICAgIGZhdGFsKF8oIiVzOiB1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgJXMiKSwKKyAgICAgICAgICAibXVzY2xlX3BlcmNlbnRfZGVmaW5lX2dldF9zeW5jbGluZSIsIHF1b3RlICh2YXJpYWJsZSkpOworICByZXR1cm4gc3luY2xpbmU7Cit9CisKK2Jvb2wKK211c2NsZV9wZXJjZW50X2RlZmluZV9pZmRlZiAoY2hhciBjb25zdCAqdmFyaWFibGUpCit7CisgIGNoYXIgY29uc3QgKm5hbWU7CisgIGNoYXIgY29uc3QgKnVzYWdlX25hbWU7CisgIGNoYXIgY29uc3QgKnZhbHVlOworCisgIG5hbWUgPSBVTklRU1RSX0NPTkNBVCAoInBlcmNlbnRfZGVmaW5lKCIsIHZhcmlhYmxlLCAiKSIpOworICB1c2FnZV9uYW1lID0KKyAgICBVTklRU1RSX0NPTkNBVCAoInBlcmNlbnRfZGVmaW5lX2Jpc29uX3ZhcmlhYmxlcygiLCB2YXJpYWJsZSwgIikiKTsKKworICB2YWx1ZSA9IG11c2NsZV9maW5kX2NvbnN0IChuYW1lKTsKKyAgaWYgKHZhbHVlKQorICAgIHsKKyAgICAgIG11c2NsZV9pbnNlcnQgKHVzYWdlX25hbWUsICIiKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wKK211c2NsZV9wZXJjZW50X2RlZmluZV9mbGFnX2lmIChjaGFyIGNvbnN0ICp2YXJpYWJsZSkKK3sKKyAgY2hhciBjb25zdCAqaW52YWxpZF9ib29sZWFuX25hbWU7CisgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisKKyAgaW52YWxpZF9ib29sZWFuX25hbWUgPQorICAgIFVOSVFTVFJfQ09OQ0FUICgicGVyY2VudF9kZWZpbmVfaW52YWxpZF9ib29sZWFuKCIsIHZhcmlhYmxlLCAiKSIpOworCisgIGlmIChtdXNjbGVfcGVyY2VudF9kZWZpbmVfaWZkZWYgKHZhcmlhYmxlKSkKKyAgICB7CisgICAgICBjaGFyICp2YWx1ZSA9IG11c2NsZV9wZXJjZW50X2RlZmluZV9nZXQgKHZhcmlhYmxlKTsKKyAgICAgIGlmICh2YWx1ZVswXSA9PSAnXDAnIHx8IDAgPT0gc3RyY21wICh2YWx1ZSwgInRydWUiKSkKKyAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgIGVsc2UgaWYgKDAgPT0gc3RyY21wICh2YWx1ZSwgImZhbHNlIikpCisgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgZWxzZSBpZiAoIW11c2NsZV9maW5kX2NvbnN0IChpbnZhbGlkX2Jvb2xlYW5fbmFtZSkpCisgICAgICAgIHsKKyAgICAgICAgICBtdXNjbGVfaW5zZXJ0IChpbnZhbGlkX2Jvb2xlYW5fbmFtZSwgIiIpOworICAgICAgICAgIGNvbXBsYWluX2F0KG11c2NsZV9wZXJjZW50X2RlZmluZV9nZXRfbG9jICh2YXJpYWJsZSksCisgICAgICAgICAgICAgICAgICAgICAgXygiaW52YWxpZCB2YWx1ZSBmb3IgJSVkZWZpbmUgQm9vbGVhbiB2YXJpYWJsZSAlcyIpLAorICAgICAgICAgICAgICAgICAgICAgIHF1b3RlICh2YXJpYWJsZSkpOworICAgICAgICB9CisgICAgICBmcmVlICh2YWx1ZSk7CisgICAgfQorICBlbHNlCisgICAgZmF0YWwoXygiJXM6IHVuZGVmaW5lZCAlJWRlZmluZSB2YXJpYWJsZSAlcyIpLAorICAgICAgICAgICJtdXNjbGVfcGVyY2VudF9kZWZpbmVfZmxhZyIsIHF1b3RlICh2YXJpYWJsZSkpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQKK211c2NsZV9wZXJjZW50X2RlZmluZV9kZWZhdWx0IChjaGFyIGNvbnN0ICp2YXJpYWJsZSwgY2hhciBjb25zdCAqdmFsdWUpCit7CisgIGNoYXIgY29uc3QgKm5hbWU7CisgIGNoYXIgY29uc3QgKmxvY19uYW1lOworICBjaGFyIGNvbnN0ICpzeW5jbGluZV9uYW1lOworICBuYW1lID0gVU5JUVNUUl9DT05DQVQgKCJwZXJjZW50X2RlZmluZSgiLCB2YXJpYWJsZSwgIikiKTsKKyAgbG9jX25hbWUgPSBVTklRU1RSX0NPTkNBVCAoInBlcmNlbnRfZGVmaW5lX2xvYygiLCB2YXJpYWJsZSwgIikiKTsKKyAgc3luY2xpbmVfbmFtZSA9CisgICAgVU5JUVNUUl9DT05DQVQgKCJwZXJjZW50X2RlZmluZV9zeW5jbGluZSgiLCB2YXJpYWJsZSwgIikiKTsKKyAgaWYgKCFtdXNjbGVfZmluZF9jb25zdCAobmFtZSkpCisgICAgeworICAgICAgbG9jYXRpb24gbG9jOworICAgICAgTVVTQ0xFX0lOU0VSVF9TVFJJTkcgKG5hbWUsIHZhbHVlKTsKKyAgICAgIGxvYy5zdGFydC5maWxlID0gbG9jLmVuZC5maWxlID0gIjxkZWZhdWx0IHZhbHVlPiI7CisgICAgICBsb2Muc3RhcnQubGluZSA9IGxvYy5lbmQubGluZSA9IC0xOworICAgICAgbG9jLnN0YXJ0LmNvbHVtbiA9IGxvYy5lbmQuY29sdW1uID0gLTE7CisgICAgICBtdXNjbGVfaW5zZXJ0IChsb2NfbmFtZSwgIiIpOworICAgICAgbXVzY2xlX2xvY2F0aW9uX2dyb3cgKGxvY19uYW1lLCBsb2MpOworICAgICAgbXVzY2xlX2luc2VydCAoc3luY2xpbmVfbmFtZSwgIiIpOworICAgIH0KK30KKwordm9pZAorbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2NoZWNrX3ZhbHVlcyAoY2hhciBjb25zdCAqIGNvbnN0ICp2YWx1ZXMpCit7CisgIGZvciAoOyAqdmFsdWVzOyArK3ZhbHVlcykKKyAgICB7CisgICAgICBjaGFyIGNvbnN0ICogY29uc3QgKnZhcmlhYmxlcCA9IHZhbHVlczsKKyAgICAgIGNoYXIgY29uc3QgKm5hbWU7CisgICAgICBjaGFyICp2YWx1ZTsKKworICAgICAgbmFtZSA9IFVOSVFTVFJfQ09OQ0FUICgicGVyY2VudF9kZWZpbmUoIiwgKnZhcmlhYmxlcCwgIikiKTsKKworICAgICAgdmFsdWUgPSBzdHJpbmdfZGVjb2RlIChuYW1lKTsKKyAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgIGZvciAoKyt2YWx1ZXM7ICp2YWx1ZXM7ICsrdmFsdWVzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoMCA9PSBzdHJjbXAgKHZhbHVlLCAqdmFsdWVzKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoISp2YWx1ZXMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICAgICAgICBsb2NhdGlvbiBsb2MgPSBtdXNjbGVfcGVyY2VudF9kZWZpbmVfZ2V0X2xvYyAoKnZhcmlhYmxlcCk7CisgICAgICAgICAgICAgIGNvbXBsYWluX2F0X2luZGVudCAobG9jLCAmaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiaW52YWxpZCB2YWx1ZSBmb3IgJSVkZWZpbmUgdmFyaWFibGUgJXM6ICVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGUgKCp2YXJpYWJsZXApLCBxdW90ZV9uICgxLCB2YWx1ZSkpOworICAgICAgICAgICAgICBpICs9IFNVQl9JTkRFTlQ7CisgICAgICAgICAgICAgIGZvciAodmFsdWVzID0gdmFyaWFibGVwICsgMTsgKnZhbHVlczsgKyt2YWx1ZXMpCisgICAgICAgICAgICAgICAgY29tcGxhaW5fYXRfaW5kZW50IChsb2MsICZpLCBfKCJhY2NlcHRlZCB2YWx1ZTogJXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3RlICgqdmFsdWVzKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB3aGlsZSAoKnZhbHVlcykKKyAgICAgICAgICAgICAgICArK3ZhbHVlczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBmcmVlICh2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgZmF0YWwgKF8oIiVzOiB1bmRlZmluZWQgJSVkZWZpbmUgdmFyaWFibGUgJXMiKSwKKyAgICAgICAgICAgICAgICJtdXNjbGVfcGVyY2VudF9kZWZpbmVfY2hlY2tfdmFsdWVzIiwgcXVvdGUgKCp2YXJpYWJsZXApKTsKKyAgICB9Cit9CisKK3ZvaWQKK211c2NsZV9wZXJjZW50X2NvZGVfZ3JvdyAoY2hhciBjb25zdCAqcXVhbGlmaWVyLCBsb2NhdGlvbiBxdWFsaWZpZXJfbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICpjb2RlLCBsb2NhdGlvbiBjb2RlX2xvYykKK3sKKyAgY2hhciBjb25zdCAqbmFtZTsKKyAgbmFtZSA9IFVOSVFTVFJfQ09OQ0FUICgicGVyY2VudF9jb2RlKCIsIHF1YWxpZmllciwgIikiKTsKKyAgbXVzY2xlX2NvZGVfZ3JvdyAobmFtZSwgY29kZSwgY29kZV9sb2MpOworICBtdXNjbGVfdXNlcl9uYW1lX2xpc3RfZ3JvdyAoInBlcmNlbnRfY29kZV91c2VyX3F1YWxpZmllcnMiLCBxdWFsaWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbGlmaWVyX2xvYyk7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IE91dHB1dCB0aGUgZGVmaW5pdGlvbiBvZiBFTlRSWSBhcyBhIG00X2RlZmluZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIGJvb2wKK211c2NsZV9tNF9vdXRwdXQgKG11c2NsZV9lbnRyeSAqZW50cnksIEZJTEUgKm91dCkKK3sKKyAgZnByaW50ZiAob3V0LCAibTRfZGVmaW5lKFtiNF8lc10sXG4iLCBlbnRyeS0+a2V5KTsKKyAgZnByaW50ZiAob3V0LCAiW1slc11dKVxuXG5cbiIsIGVudHJ5LT52YWx1ZSk7CisgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbAorbXVzY2xlX200X291dHB1dF9wcm9jZXNzb3IgKHZvaWQgKmVudHJ5LCB2b2lkICpvdXQpCit7CisgIHJldHVybiBtdXNjbGVfbTRfb3V0cHV0IChlbnRyeSwgb3V0KTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IE91dHB1dCB0aGUgZGVmaW5pdGlvbiBvZiBhbGwgdGhlIGN1cnJlbnQgbXVzY2xlcyBpbnRvIGEgbGlzdCBvZiB8Cit8IG00X2RlZmluZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3ZvaWQKK211c2NsZXNfbTRfb3V0cHV0IChGSUxFICpvdXQpCit7CisgIGhhc2hfZG9fZm9yX2VhY2ggKG11c2NsZV90YWJsZSwgbXVzY2xlX200X291dHB1dF9wcm9jZXNzb3IsIG91dCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvbXVzY2xlLXRhYi5oIGIvc3JjL211c2NsZS10YWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTYxMDNmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL211c2NsZS10YWIuaApAQCAtMCwwICsxLDE5MSBAQAorLyogTXVzY2xlIHRhYmxlIG1hbmFnZXIgZm9yIEJpc29uLAorCisgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMywgMjAwNi0yMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBNVVNDTEVfVEFCX0hfCisjIGRlZmluZSBNVVNDTEVfVEFCX0hfCisKKyMgaW5jbHVkZSA8cXVvdGVhcmcuaD4KKworIyBpbmNsdWRlICJsb2NhdGlvbi5oIgorCit2b2lkIG11c2NsZV9pbml0ICh2b2lkKTsKK3ZvaWQgbXVzY2xlX2luc2VydCAoY2hhciBjb25zdCAqa2V5LCBjaGFyIGNvbnN0ICp2YWx1ZSk7CitjaGFyIGNvbnN0ICptdXNjbGVfZmluZF9jb25zdCAoY2hhciBjb25zdCAqa2V5KTsKK2NoYXIgKm11c2NsZV9maW5kIChjaGFyIGNvbnN0ICprZXkpOwordm9pZCBtdXNjbGVfZnJlZSAodm9pZCk7CisKKworLyogQW4gb2JzdGFjayBkZWRpY2F0ZWQgdG8gcmVjZWl2ZSBtdXNjbGUga2V5cyBhbmQgdmFsdWVzLiAgKi8KK2V4dGVybiBzdHJ1Y3Qgb2JzdGFjayBtdXNjbGVfb2JzdGFjazsKKworI2RlZmluZSBNVVNDTEVfSU5TRVJUX0JPT0woS2V5LCBWYWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaW50IHYgPSBWYWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE1VU0NMRV9JTlNFUlRfSU5UIChLZXksIHYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBNVVNDTEVfSU5TRVJUX0lOVChLZXksIFZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgb2JzdGFja19wcmludGYgKCZtdXNjbGVfb2JzdGFjaywgIiVkIiwgVmFsdWUpOyAgICAgICAgICAgICAgXAorICAgIG9ic3RhY2tfMWdyb3cgKCZtdXNjbGVfb2JzdGFjaywgMCk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtdXNjbGVfaW5zZXJ0IChLZXksIG9ic3RhY2tfZmluaXNoICgmbXVzY2xlX29ic3RhY2spKTsgICAgICBcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgTVVTQ0xFX0lOU0VSVF9MT05HX0lOVChLZXksIFZhbHVlKSAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG9ic3RhY2tfcHJpbnRmICgmbXVzY2xlX29ic3RhY2ssICIlbGQiLCBWYWx1ZSk7ICAgICAgICAgICAgIFwKKyAgICBvYnN0YWNrXzFncm93ICgmbXVzY2xlX29ic3RhY2ssIDApOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbXVzY2xlX2luc2VydCAoS2V5LCBvYnN0YWNrX2ZpbmlzaCAoJm11c2NsZV9vYnN0YWNrKSk7ICAgICAgXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIE1VU0NMRV9JTlNFUlRfU1RSSU5HX1JBVyhLZXksIFZhbHVlKSAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBvYnN0YWNrX3Nncm93ICgmbXVzY2xlX29ic3RhY2ssIFZhbHVlKTsgICAgICAgICAgICAgICAgICAgICBcCisgICAgb2JzdGFja18xZ3JvdyAoJm11c2NsZV9vYnN0YWNrLCAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG11c2NsZV9pbnNlcnQgKEtleSwgb2JzdGFja19maW5pc2ggKCZtdXNjbGVfb2JzdGFjaykpOyAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBNVVNDTEVfSU5TRVJUX1NUUklORyhLZXksIFZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgb2JzdGFja19lc2NhcGUgKCZtdXNjbGVfb2JzdGFjaywgVmFsdWUpOyAgICAgICAgICAgICAgICAgICAgXAorICAgIG9ic3RhY2tfMWdyb3cgKCZtdXNjbGVfb2JzdGFjaywgMCk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtdXNjbGVfaW5zZXJ0IChLZXksIG9ic3RhY2tfZmluaXNoICgmbXVzY2xlX29ic3RhY2spKTsgICAgICBcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgTVVTQ0xFX0lOU0VSVF9DX1NUUklORyhLZXksIFZhbHVlKSAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG9ic3RhY2tfZXNjYXBlICgmbXVzY2xlX29ic3RhY2ssICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgcXVvdGVhcmdfc3R5bGUgKGNfcXVvdGluZ19zdHlsZSwgVmFsdWUpKTsgICBcCisgICAgb2JzdGFja18xZ3JvdyAoJm11c2NsZV9vYnN0YWNrLCAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG11c2NsZV9pbnNlcnQgKEtleSwgb2JzdGFja19maW5pc2ggKCZtdXNjbGVfb2JzdGFjaykpOyAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworLyogQXBwZW5kIFZBTFVFIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9mIEtFWS4gIElmIEtFWSBkaWQgbm90IGFscmVhZHkKKyAgIGV4aXN0LCBjcmVhdGUgaXQuICBVc2UgTVVTQ0xFX09CU1RBQ0suICBEZS1hbGxvY2F0ZSB0aGUgcHJldmlvdXNseQorICAgYXNzb2NpYXRlZCB2YWx1ZS4gIENvcHkgVkFMVUUgYW5kIFNFUEFSQVRPUi4gICovCisKK3ZvaWQgbXVzY2xlX2dyb3cgKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsIGNvbnN0IGNoYXIgKnNlcGFyYXRvcik7CisKKworLyogQXBwZW5kIFZBTFVFIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9mIEtFWSwgdXNpbmcgbXVzY2xlX2dyb3cuICBCdXQKKyAgIGluIGFkZGl0aW9uLCBpc3N1ZSBhIHN5bmNocm9uaXphdGlvbiBsaW5lIGZvciB0aGUgbG9jYXRpb24gTE9DLiAgKi8KKwordm9pZCBtdXNjbGVfY29kZV9ncm93IChjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLCBsb2NhdGlvbiBsb2MpOworCisKKy8qIE1VU0NMRSBpcyBhbiBNNCBsaXN0IG9mIHBhaXJzLiAgQ3JlYXRlIG9yIGV4dGVuZCBpdCB3aXRoIHRoZSBwYWlyCisgICAoQTEsIEEyKSBhZnRlciBlc2NhcGluZyBib3RoIHZhbHVlcyB3aXRoIGRpZ3JhcGhzLiAgTm90ZSB0aGF0IGJlY2F1c2UgdGhlCisgICBtdXNjbGUgdmFsdWVzIGFyZSBvdXRwdXQgKmRvdWJsZSogcXVvdGVkLCBvbmUgbmVlZHMgdG8gc3RyaXAgdGhlIGZpcnN0IGxldmVsCisgICBvZiBxdW90ZXMgdG8gcmVhY2ggdGhlIGxpc3QgaXRzZWxmLiAgKi8KK3ZvaWQgbXVzY2xlX3BhaXJfbGlzdF9ncm93IChjb25zdCBjaGFyICptdXNjbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYTEsIGNvbnN0IGNoYXIgKmEyKTsKKworLyogR3JvdyBLRVkgZm9yIHRoZSBvY2N1cnJlbmNlIG9mIHRoZSBuYW1lIFVTRVJfTkFNRSBhdCBMT0MgYXBwcm9wcmlhdGVseSBmb3IKKyAgIHVzZSB3aXRoIGI0X2NoZWNrX3VzZXJfbmFtZXMgaW4gLi4vZGF0YS9iaXNvbi5tNC4gIFVTRVJfTkFNRSBpcyBub3QgZXNjYXBlZAorICAgd2l0aCBkaWdyYXBocywgc28gaXQgbXVzdCBub3QgY29udGFpbiBgWycgb3IgYF0nLiAgKi8KK3ZvaWQgbXVzY2xlX3VzZXJfbmFtZV9saXN0X2dyb3cgKGNoYXIgY29uc3QgKmtleSwgY2hhciBjb25zdCAqdXNlcl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gbG9jKTsKKworLyogSW5kaWNhdGVzIHdoZXRoZXIgYSB2YXJpYWJsZSdzIHZhbHVlIHdhcyBzcGVjaWZpZWQgd2l0aCAtRC8tLWRlZmluZSwgd2l0aAorICAgLUYvLS1mb3JjZS1kZWZpbmUsIG9yIGluIHRoZSBncmFtbWFyIGZpbGUuICAqLwordHlwZWRlZiBlbnVtIHsKKyAgTVVTQ0xFX1BFUkNFTlRfREVGSU5FX0QgPSAwLCBNVVNDTEVfUEVSQ0VOVF9ERUZJTkVfRiwKKyAgTVVTQ0xFX1BFUkNFTlRfREVGSU5FX0dSQU1NQVJfRklMRQorfSBtdXNjbGVfcGVyY2VudF9kZWZpbmVfaG93OworCisvKiBEZWZpbmUgdGhlIG11c2NsZXMgZm9yICVkZWZpbmUgdmFyaWFibGUgVkFSSUFCTEUgd2l0aCBWQUxVRSBzcGVjaWZpZWQKKyAgIGF0IFZBUklBQkxFX0xPQyBpbiB0aGUgbWFubmVyIEhPVyB1bmxlc3MgaXQgd2FzIHNwZWNpZmllZCBpbiB0aGUKKyAgIGdyYW1tYXIgZmlsZSB3aGlsZSB0aGUgcHJldmlvdXMgZGVmaW5pdGlvbiBmb3IgVkFSSUFCTEUgd2FzIHNwZWNpZmllZAorICAgd2l0aCAtRi8tLWZvcmNlLWRlZmluZS4gIENvbXBsYWluIGlmIGEgcHJldmlvdXMgZGVmaW5pdGlvbiBpcyBiZWluZworICAgb3ZlcnJpZGRlbiBhbmQgdGhlIG5ldyBkZWZpbml0aW9uIGlzIHNwZWNpZmllZCBpbiB0aGUgZ3JhbW1hciBmaWxlLgorICAgKFRoZXNlIHJ1bGVzIHN1cHBvcnQgdGhlIGRvY3VtZW50ZWQgYmVoYXZpb3IgYXMgbG9uZyBhcyBjb21tYW5kLWxpbmUKKyAgIGRlZmluaXRpb25zIGFyZSBwcm9jZXNzZWQgYmVmb3JlIGdyYW1tYXIgZmlsZSBkZWZpbml0aW9ucy4pICBSZWNvcmQKKyAgIHRoaXMgYXMgYSB1c2VyIG9jY3VycmVuY2Ugb2YgVkFSSUFCTEUgYnkgaW52b2tpbmcKKyAgIG11c2NsZV91c2VyX25hbWVfbGlzdF9ncm93LiAgKi8KK3ZvaWQgbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2luc2VydCAoY2hhciBjb25zdCAqdmFyaWFibGUsIGxvY2F0aW9uIHZhcmlhYmxlX2xvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c2NsZV9wZXJjZW50X2RlZmluZV9ob3cgaG93KTsKKworLyogTWltaWMgYjRfcGVyY2VudF9kZWZpbmVfZ2V0IGluIC4uL2RhdGEvYmlzb24ubTQgZXhhY3RseS4gIFRoYXQgaXMsIGlmIHRoZQorICAgJWRlZmluZSB2YXJpYWJsZSBWQVJJQUJMRSBpcyBkZWZpbmVkLCByZXR1cm4gaXRzIHZhbHVlLiAgT3RoZXJ3aXNlLCByZXR1cm4KKyAgIHRoZSBlbXB0eSBzdHJpbmcuICBBbHNvLCByZWNvcmQgQmlzb24ncyB1c2FnZSBvZiBWQVJJQUJMRSBieSBkZWZpbmluZworICAgYjRfcGVyY2VudF9kZWZpbmVfYmlzb25fdmFyaWFibGVzKFZBUklBQkxFKS4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yCisgICBmcmVlaW5nIHRoZSBtZW1vcnkgb2YgdGhlIHJldHVybmVkIHN0cmluZy4gICovCitjaGFyICptdXNjbGVfcGVyY2VudF9kZWZpbmVfZ2V0IChjaGFyIGNvbnN0ICp2YXJpYWJsZSk7CisKKy8qIE1pbWljIG11c2NsZV9wZXJjZW50X2RlZmluZV9nZXRfbG9jIGluIC4uL2RhdGEvYmlzb24ubTQgZXhhY3RseS4gIFRoYXQgaXMsCisgICBpZiB0aGUgJWRlZmluZSB2YXJpYWJsZSBWQVJJQUJMRSBpcyB1bmRlZmluZWQsIGNvbXBsYWluIGZhdGFsbHkgc2luY2UgdGhhdCdzCisgICBhIEJpc29uIGVycm9yLiAgT3RoZXJ3aXNlLCByZXR1cm4gaXRzIGRlZmluaXRpb24gbG9jYXRpb24gaW4gYSBmb3JtCisgICBhcHByb3JpYXRlIGZvciB0aGUgZmlyc3QgYXJndW1lbnQgb2Ygd2Fybl9hdCwgY29tcGxhaW5fYXQsIG9yIGZhdGFsX2F0LgorICAgRG9uJ3QgcmVjb3JkIHRoaXMgYXMgYSBCaXNvbiB1c2FnZSBvZiBWQVJJQUJMRSBhcyB0aGVyZSdzIG5vIHJlYXNvbiB0bworICAgc3VzcGVjdCB0aGF0IHRoZSB1c2VyLXN1cHBsaWVkIHZhbHVlIGhhcyB5ZXQgaW5mbHVlbmNlZCB0aGUgb3V0cHV0LiAgKi8KK2xvY2F0aW9uIG11c2NsZV9wZXJjZW50X2RlZmluZV9nZXRfbG9jIChjaGFyIGNvbnN0ICp2YXJpYWJsZSk7CisKKy8qIE1pbWljIG11c2NsZV9wZXJjZW50X2RlZmluZV9nZXRfc3luY2xpbmUgaW4gLi4vZGF0YS9iaXNvbi5tNCBleGFjdGx5LiAgVGhhdAorICAgaXMsIGlmIHRoZSAlZGVmaW5lIHZhcmlhYmxlIFZBUklBQkxFIGlzIHVuZGVmaW5lZCwgY29tcGxhaW4gZmF0YWxseSBzaW5jZQorICAgdGhhdCdzIGEgQmlzb24gZXJyb3IuICBPdGhlcndpc2UsIHJldHVybiBpdHMgZGVmaW5pdGlvbiBsb2NhdGlvbiBhcyBhCisgICBiNF9zeW5jbGluZSBpbnZvY2F0aW9uLiAgRG9uJ3QgcmVjb3JkIHRoaXMgYXMgYSBCaXNvbiB1c2FnZSBvZiBWQVJJQUJMRSBhcworICAgdGhlcmUncyBubyByZWFzb24gdG8gc3VzcGVjdCB0aGF0IHRoZSB1c2VyLXN1cHBsaWVkIHZhbHVlIGhhcyB5ZXQgaW5mbHVlbmNlZAorICAgdGhlIG91dHB1dC4gICovCitjaGFyIGNvbnN0ICptdXNjbGVfcGVyY2VudF9kZWZpbmVfZ2V0X3N5bmNsaW5lIChjaGFyIGNvbnN0ICp2YXJpYWJsZSk7CisKKy8qIE1pbWljIGI0X3BlcmNlbnRfZGVmaW5lX2lmZGVmIGluIC4uL2RhdGEvYmlzb24ubTQgZXhhY3RseS4gIFRoYXQgaXMsIGlmIHRoZQorICAgJWRlZmluZSB2YXJpYWJsZSBWQVJJQUJMRSBpcyBkZWZpbmVkLCByZXR1cm4gdHJ1ZS4gIE90aGVyd2lzZSwgcmV0dXJuIGZhbHNlLgorICAgQWxzbywgcmVjb3JkIEJpc29uJ3MgdXNhZ2Ugb2YgVkFSSUFCTEUgYnkgZGVmaW5pbmcKKyAgIGI0X3BlcmNlbnRfZGVmaW5lX2Jpc29uX3ZhcmlhYmxlcyhWQVJJQUJMRSkuICAqLworYm9vbCBtdXNjbGVfcGVyY2VudF9kZWZpbmVfaWZkZWYgKGNoYXIgY29uc3QgKnZhcmlhYmxlKTsKKworLyogTWltaWMgYjRfcGVyY2VudF9kZWZpbmVfZmxhZ19pZiBpbiAuLi9kYXRhL2Jpc29uLm00IGV4YWN0bHkuICBUaGF0IGlzLCBpZgorICAgdGhlICVkZWZpbmUgdmFyaWFibGUgVkFSSUFCTEUgaXMgZGVmaW5lZCB0byAiIiBvciAidHJ1ZSIsIHJldHVybiB0cnVlLiAgSWYKKyAgIGl0IGlzIGRlZmluZWQgdG8gImZhbHNlIiwgcmV0dXJuIGZhbHNlLiAgQ29tcGxhaW4gaWYgaXQgaXMgdW5kZWZpbmVkIChhCisgICBCaXNvbiBlcnJvciBzaW5jZSB0aGUgZGVmYXVsdCB2YWx1ZSBzaG91bGQgaGF2ZSBiZWVuIHNldCBhbHJlYWR5KSBvciBkZWZpbmVkCisgICB0byBhbnkgb3RoZXIgdmFsdWUgKHBvc3NpYmx5IGEgdXNlciBlcnJvcikuICBBbHNvLCByZWNvcmQgQmlzb24ncyB1c2FnZSBvZgorICAgVkFSSUFCTEUgYnkgZGVmaW5pbmcgYjRfcGVyY2VudF9kZWZpbmVfYmlzb25fdmFyaWFibGVzKFZBUklBQkxFKS4gICovCitib29sIG11c2NsZV9wZXJjZW50X2RlZmluZV9mbGFnX2lmIChjaGFyIGNvbnN0ICp2YXJpYWJsZSk7CisKKy8qIE1pbWljIGI0X3BlcmNlbnRfZGVmaW5lX2RlZmF1bHQgaW4gLi4vZGF0YS9iaXNvbi5tNCBleGFjdGx5LiAgVGhhdCBpcywgaWYKKyAgIHRoZSAlZGVmaW5lIHZhcmlhYmxlIFZBUklBQkxFIGlzIHVuZGVmaW5lZCwgc2V0IGl0cyB2YWx1ZSB0byBWQUxVRS4KKyAgIERvbid0IHJlY29yZCB0aGlzIGFzIGEgQmlzb24gdXNhZ2Ugb2YgVkFSSUFCTEUgYXMgdGhlcmUncyBubyByZWFzb24gdG8KKyAgIHN1c3BlY3QgdGhhdCB0aGUgdmFsdWUgaGFzIHlldCBpbmZsdWVuY2VkIHRoZSBvdXRwdXQuICAqLwordm9pZCBtdXNjbGVfcGVyY2VudF9kZWZpbmVfZGVmYXVsdCAoY2hhciBjb25zdCAqdmFyaWFibGUsIGNoYXIgY29uc3QgKnZhbHVlKTsKKworLyogTWltaWMgYjRfcGVyY2VudF9kZWZpbmVfY2hlY2tfdmFsdWVzIGluIC4uL2RhdGEvYmlzb24ubTQgZXhhY3RseSBleGNlcHQgdGhhdAorICAgdGhlIFZBTFVFUyBzdHJ1Y3R1cmUgaXMgbW9yZSBhcHByb3ByaWF0ZSBmb3IgQy4gIFRoYXQgaXMsIFZBTFVFUyBwb2ludHMgdG8gYQorICAgbGlzdCBvZiBzdHJpbmdzIHRoYXQgaXMgcGFydGl0aW9uZWQgaW50byBzdWJsaXN0cyBieSBOVUxMJ3MsIG9uZSB0ZXJtaW5hdGluZworICAgZWFjaCBzdWJsaXN0LiAgVGhlIGxhc3Qgc3VibGlzdCBpcyBmb2xsb3dlZCBieSBhIHNlY29uZCBOVUxMLiAgRm9yIGVhY2gKKyAgIHN1Ymxpc3QsIHRoZSBmaXJzdCBzdHJpbmcgaXMgdGhlIG5hbWUgb2YgYSAlZGVmaW5lIHZhcmlhYmxlLCBhbmQgYWxsCisgICByZW1haW5pbmcgc3RyaW5ncyBpbiB0aGF0IHN1Ymxpc3QgYXJlIHRoZSB2YWxpZCB2YWx1ZXMgZm9yIHRoYXQgdmFyaWFibGUuCisgICBDb21wbGFpbiBpZiBzdWNoIGEgdmFyaWFibGUgaXMgdW5kZWZpbmVkIChhIEJpc29uIGVycm9yIHNpbmNlIHRoZSBkZWZhdWx0CisgICB2YWx1ZSBzaG91bGQgaGF2ZSBiZWVuIHNldCBhbHJlYWR5KSBvciBkZWZpbmVkIHRvIGFueSBvdGhlciB2YWx1ZSAocG9zc2libHkKKyAgIGEgdXNlciBlcnJvcikuICBEb24ndCByZWNvcmQgdGhpcyBhcyBhIEJpc29uIHVzYWdlIG9mIHRoZSB2YXJpYWJsZSBhcworICAgdGhlcmUncyBubyByZWFzb24gdG8gc3VzcGVjdCB0aGF0IHRoZSB2YWx1ZSBoYXMgeWV0IGluZmx1ZW5jZWQgdGhlCisgICBvdXRwdXQuICAqLwordm9pZCBtdXNjbGVfcGVyY2VudF9kZWZpbmVfY2hlY2tfdmFsdWVzIChjaGFyIGNvbnN0ICogY29uc3QgKnZhbHVlcyk7CisKKy8qIEdyb3cgdGhlIG11c2NsZSBmb3IgdGhlICVjb2RlIHF1YWxpZmllciBRVUFMSUZJRVIgYXBwZWFyaW5nIGF0CisgICBRVUFMSUZJRVJfTE9DIHdpdGggY29kZSBDT0RFIGFwcGVhcmluZyBhdCBDT0RFX0xPQy4gIFJlY29yZCB0aGlzIGFzIGEKKyAgIHVzZXIgb2NjdXJyZW5jZSBvZiBRVUFMSUZJRVIgYnkgaW52b2tpbmcKKyAgIG11c2NsZV91c2VyX25hbWVfbGlzdF9ncm93LiAgKi8KK3ZvaWQgbXVzY2xlX3BlcmNlbnRfY29kZV9ncm93IChjaGFyIGNvbnN0ICpxdWFsaWZpZXIsIGxvY2F0aW9uIHF1YWxpZmllcl9sb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqY29kZSwgbG9jYXRpb24gY29kZV9sb2MpOworCit2b2lkIG11c2NsZXNfbTRfb3V0cHV0IChGSUxFICpvdXQpOworCisjZW5kaWYgLyogbm90IE1VU0NMRV9UQUJfSF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9tdXNjbGVfdGFiLmMgYi9zcmMvbXVzY2xlX3RhYi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDcxMDg1Li4wMDAwMDAwCi0tLSBhL3NyYy9tdXNjbGVfdGFiLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDEgKzAsMCBAQAotLyogTXVzY2xlIHRhYmxlIG1hbmFnZXIgZm9yIEJpc29uLgotCi0gICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLgotCi0gICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KLQotICAgQmlzb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICBCaXNvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIEJpc29uOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCi0KLSNpbmNsdWRlIDxjb25maWcuaD4KLSNpbmNsdWRlICJzeXN0ZW0uaCIKLQotI2luY2x1ZGUgPGhhc2guaD4KLSNpbmNsdWRlIDxxdW90ZWFyZy5oPgotCi0jaW5jbHVkZSAiZmlsZXMuaCIKLSNpbmNsdWRlICJtdXNjbGVfdGFiLmgiCi0jaW5jbHVkZSAiZ2V0YXJncy5oIgotCi10eXBlZGVmIHN0cnVjdAotewotICBjb25zdCBjaGFyICprZXk7Ci0gIGNoYXIgKnZhbHVlOwotfSBtdXNjbGVfZW50cnk7Ci0KLS8qIEFuIG9ic3RhY2sgdXNlZCB0byBjcmVhdGUgc29tZSBlbnRyaWVzLiAgKi8KLXN0cnVjdCBvYnN0YWNrIG11c2NsZV9vYnN0YWNrOwotCi0vKiBJbml0aWFsIGNhcGFjaXR5IG9mIG11c2NsZXMgaGFzaCB0YWJsZS4gICovCi0jZGVmaW5lIEhUX0lOSVRJQUxfQ0FQQUNJVFkgMjU3Ci0KLXN0YXRpYyBzdHJ1Y3QgaGFzaF90YWJsZSAqbXVzY2xlX3RhYmxlID0gTlVMTDsKLQotc3RhdGljIGJvb2wKLWhhc2hfY29tcGFyZV9tdXNjbGVzICh2b2lkIGNvbnN0ICp4LCB2b2lkIGNvbnN0ICp5KQotewotICBtdXNjbGVfZW50cnkgY29uc3QgKm0xID0geDsKLSAgbXVzY2xlX2VudHJ5IGNvbnN0ICptMiA9IHk7Ci0gIHJldHVybiBzdHJjbXAgKG0xLT5rZXksIG0yLT5rZXkpID09IDA7Ci19Ci0KLXN0YXRpYyBzaXplX3QKLWhhc2hfbXVzY2xlIChjb25zdCB2b2lkICp4LCBzaXplX3QgdGFibGVzaXplKQotewotICBtdXNjbGVfZW50cnkgY29uc3QgKm0gPSB4OwotICByZXR1cm4gaGFzaF9zdHJpbmcgKG0tPmtleSwgdGFibGVzaXplKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgQ3JlYXRlIHRoZSBNVVNDTEVfVEFCTEUsIGFuZCBpbml0aWFsaXplIGl0IHdpdGggZGVmYXVsdCB2YWx1ZXMuICB8Ci18IEFsc28gc2V0IHVwIHRoZSBNVVNDTEVfT0JTVEFDSy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotdm9pZAotbXVzY2xlX2luaXQgKHZvaWQpCi17Ci0gIC8qIEluaXRpYWxpemUgdGhlIG11c2NsZSBvYnN0YWNrLiAgKi8KLSAgb2JzdGFja19pbml0ICgmbXVzY2xlX29ic3RhY2spOwotCi0gIG11c2NsZV90YWJsZSA9IGhhc2hfaW5pdGlhbGl6ZSAoSFRfSU5JVElBTF9DQVBBQ0lUWSwgTlVMTCwgaGFzaF9tdXNjbGUsCi0JCQkJICBoYXNoX2NvbXBhcmVfbXVzY2xlcywgZnJlZSk7Ci0KLSAgLyogVmVyc2lvbiBhbmQgaW5wdXQgZmlsZS4gICovCi0gIE1VU0NMRV9JTlNFUlRfU1RSSU5HICgidmVyc2lvbiIsIFZFUlNJT04pOwotICBNVVNDTEVfSU5TRVJUX0NfU1RSSU5HICgiZmlsZV9uYW1lIiwgZ3JhbW1hcl9maWxlKTsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgRnJlZSBhbGwgdGhlIG1lbW9yeSBjb25zdW1lZCBieSB0aGUgbXVzY2xlIG1hY2hpbmVyeSBvbmx5LiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXZvaWQKLW11c2NsZV9mcmVlICh2b2lkKQotewotICBoYXNoX2ZyZWUgKG11c2NsZV90YWJsZSk7Ci0gIG9ic3RhY2tfZnJlZSAoJm11c2NsZV9vYnN0YWNrLCBOVUxMKTsKLX0KLQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBJbnNlcnQgKEtFWSwgVkFMVUUpLiAgSWYgS0VZIGFscmVhZHkgZXhpc3RlZCwgb3ZlcndyaXRlIHRoZSB8Ci18IHByZXZpb3VzIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi12b2lkCi1tdXNjbGVfaW5zZXJ0IChjb25zdCBjaGFyICprZXksIGNoYXIgKnZhbHVlKQotewotICBtdXNjbGVfZW50cnkgcHJvYmU7Ci0gIG11c2NsZV9lbnRyeSAqZW50cnk7Ci0KLSAgcHJvYmUua2V5ID0ga2V5OwotICBlbnRyeSA9IGhhc2hfbG9va3VwIChtdXNjbGVfdGFibGUsICZwcm9iZSk7Ci0KLSAgaWYgKCFlbnRyeSkKLSAgICB7Ci0gICAgICAvKiBGaXJzdCBpbnNlcnRpb24gaW4gdGhlIGhhc2guICovCi0gICAgICBlbnRyeSA9IHhtYWxsb2MgKHNpemVvZiAqZW50cnkpOwotICAgICAgZW50cnktPmtleSA9IGtleTsKLSAgICAgIGhhc2hfaW5zZXJ0IChtdXNjbGVfdGFibGUsIGVudHJ5KTsKLSAgICB9Ci0gIGVudHJ5LT52YWx1ZSA9IHZhbHVlOwotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgQXBwZW5kIFZBTFVFIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9mIEtFWS4gIElmIEtFWSBkaWQgbm90IGFscmVhZHkgIHwKLXwgZXhpc3QsIGNyZWF0ZSBpdC4gIFVzZSBNVVNDTEVfT0JTVEFDSy4gIERlLWFsbG9jYXRlIHRoZSBwcmV2aW91c2x5IHwKLXwgYXNzb2NpYXRlZCB2YWx1ZS4gIENvcHkgVkFMVUUgYW5kIFNFUEFSQVRPUi4gICAgICAgICAgICAgICAgICAgICAgIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotdm9pZAotbXVzY2xlX2dyb3cgKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsLCBjb25zdCBjaGFyICpzZXBhcmF0b3IpCi17Ci0gIG11c2NsZV9lbnRyeSBwcm9iZTsKLSAgbXVzY2xlX2VudHJ5ICplbnRyeSA9IE5VTEw7Ci0KLSAgcHJvYmUua2V5ID0ga2V5OwotICBlbnRyeSA9IGhhc2hfbG9va3VwIChtdXNjbGVfdGFibGUsICZwcm9iZSk7Ci0KLSAgaWYgKCFlbnRyeSkKLSAgICB7Ci0gICAgICAvKiBGaXJzdCBpbnNlcnRpb24gaW4gdGhlIGhhc2guICovCi0gICAgICBlbnRyeSA9IHhtYWxsb2MgKHNpemVvZiAqZW50cnkpOwotICAgICAgZW50cnktPmtleSA9IGtleTsKLSAgICAgIGhhc2hfaW5zZXJ0IChtdXNjbGVfdGFibGUsIGVudHJ5KTsKLSAgICAgIGVudHJ5LT52YWx1ZSA9IHhzdHJkdXAgKHZhbCk7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgLyogR3JvdyB0aGUgY3VycmVudCB2YWx1ZS4gKi8KLSAgICAgIGNoYXIgKm5ld192YWw7Ci0gICAgICBvYnN0YWNrX3Nncm93ICgmbXVzY2xlX29ic3RhY2ssIGVudHJ5LT52YWx1ZSk7Ci0gICAgICBmcmVlIChlbnRyeS0+dmFsdWUpOwotICAgICAgb2JzdGFja19zZ3JvdyAoJm11c2NsZV9vYnN0YWNrLCBzZXBhcmF0b3IpOwotICAgICAgb2JzdGFja19zZ3JvdyAoJm11c2NsZV9vYnN0YWNrLCB2YWwpOwotICAgICAgb2JzdGFja18xZ3JvdyAoJm11c2NsZV9vYnN0YWNrLCAwKTsKLSAgICAgIG5ld192YWwgPSBvYnN0YWNrX2ZpbmlzaCAoJm11c2NsZV9vYnN0YWNrKTsKLSAgICAgIGVudHJ5LT52YWx1ZSA9IHhzdHJkdXAgKG5ld192YWwpOwotICAgICAgb2JzdGFja19mcmVlICgmbXVzY2xlX29ic3RhY2ssIG5ld192YWwpOwotICAgIH0KLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgQXBwZW5kIFZBTFVFIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9mIEtFWSwgdXNpbmcgbXVzY2xlX2dyb3cuICBCdXQgfAotfCBpbiBhZGRpdGlvbiwgaXNzdWUgYSBzeW5jaHJvbml6YXRpb24gbGluZSBmb3IgdGhlIGxvY2F0aW9uIExPQy4gICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotdm9pZAotbXVzY2xlX2NvZGVfZ3JvdyAoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWwsIGxvY2F0aW9uIGxvYykKLXsKLSAgY2hhciAqZXh0ZW5zaW9uID0gTlVMTDsKLSAgb2JzdGFja19mZ3JvdzEgKCZtdXNjbGVfb2JzdGFjaywgIl1iNF9zeW5jbGluZSglZCwgW1siLCBsb2Muc3RhcnQubGluZSk7Ci0gIE1VU0NMRV9PQlNUQUNLX1NHUk9XICgmbXVzY2xlX29ic3RhY2ssCi0JCQlxdW90ZWFyZ19zdHlsZSAoY19xdW90aW5nX3N0eWxlLCBsb2Muc3RhcnQuZmlsZSkpOwotICBvYnN0YWNrX3Nncm93ICgmbXVzY2xlX29ic3RhY2ssICJdXSlbXG4iKTsKLSAgb2JzdGFja19zZ3JvdyAoJm11c2NsZV9vYnN0YWNrLCB2YWwpOwotICBvYnN0YWNrXzFncm93ICgmbXVzY2xlX29ic3RhY2ssIDApOwotICBleHRlbnNpb24gPSBvYnN0YWNrX2ZpbmlzaCAoJm11c2NsZV9vYnN0YWNrKTsKLSAgbXVzY2xlX2dyb3cgKGtleSwgZXh0ZW5zaW9uLCAiIik7Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBNVVNDTEUgaXMgYW4gTTQgbGlzdCBvZiBwYWlycy4gIENyZWF0ZSBvciBleHRlbmQgaXQgd2l0aCB0aGUgcGFpciAgfAotfCAoQTEsIEEyKS4gIE5vdGUgdGhhdCBiZWNhdXNlIHRoZSBtdXNjbGUgdmFsdWVzIGFyZSBvdXRwdXQgKmRvdWJsZSogfAotfCBxdW90ZWQsIG9uZSBuZWVkcyB0byBzdHJpcCB0aGUgZmlyc3QgbGV2ZWwgb2YgcXVvdGVzIHRvIHJlYWNoIHRoZSAgfAotfCBsaXN0IGl0c2VsZi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi12b2lkIG11c2NsZV9wYWlyX2xpc3RfZ3JvdyAoY29uc3QgY2hhciAqbXVzY2xlLAotCQkJICAgIGNvbnN0IGNoYXIgKmExLCBjb25zdCBjaGFyICphMikKLXsKLSAgY2hhciAqcGFpcjsKLSAgb2JzdGFja19mZ3JvdzIgKCZtdXNjbGVfb2JzdGFjaywgIltbWyVzXV0sIFtbJXNdXV0iLCBhMSwgYTIpOwotICBvYnN0YWNrXzFncm93ICgmbXVzY2xlX29ic3RhY2ssIDApOwotICBwYWlyID0gb2JzdGFja19maW5pc2ggKCZtdXNjbGVfb2JzdGFjayk7Ci0gIG11c2NsZV9ncm93IChtdXNjbGUsIHBhaXIsICIsXG4iKTsKLSAgb2JzdGFja19mcmVlICgmbXVzY2xlX29ic3RhY2ssIHBhaXIpOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IEZpbmQgdGhlIHZhbHVlIG9mIG11c2NsZSBLRVkuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLWNoYXIgKgotbXVzY2xlX2ZpbmQgKGNvbnN0IGNoYXIgKmtleSkKLXsKLSAgbXVzY2xlX2VudHJ5IHByb2JlOwotICBtdXNjbGVfZW50cnkgKnJlc3VsdCA9IE5VTEw7Ci0KLSAgcHJvYmUua2V5ID0ga2V5OwotICByZXN1bHQgPSBoYXNoX2xvb2t1cCAobXVzY2xlX3RhYmxlLCAmcHJvYmUpOwotICByZXR1cm4gcmVzdWx0ID8gcmVzdWx0LT52YWx1ZSA6IE5VTEw7Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IE91dHB1dCB0aGUgZGVmaW5pdGlvbiBvZiBFTlRSWSBhcyBhIG00X2RlZmluZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIGJvb2wKLW11c2NsZV9tNF9vdXRwdXQgKG11c2NsZV9lbnRyeSAqZW50cnksIEZJTEUgKm91dCkKLXsKLSAgZnByaW50ZiAob3V0LCAibTRfZGVmaW5lKFtiNF8lc10sXG4iLCBlbnRyeS0+a2V5KTsKLSAgZnByaW50ZiAob3V0LCAiW1slc11dKVxuXG5cbiIsIGVudHJ5LT52YWx1ZSk7Ci0gIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbAotbXVzY2xlX200X291dHB1dF9wcm9jZXNzb3IgKHZvaWQgKmVudHJ5LCB2b2lkICpvdXQpCi17Ci0gIHJldHVybiBtdXNjbGVfbTRfb3V0cHV0IChlbnRyeSwgb3V0KTsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IE91dHB1dCB0aGUgZGVmaW5pdGlvbiBvZiBhbGwgdGhlIGN1cnJlbnQgbXVzY2xlcyBpbnRvIGEgbGlzdCBvZiB8Ci18IG00X2RlZmluZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXZvaWQKLW11c2NsZXNfbTRfb3V0cHV0IChGSUxFICpvdXQpCi17Ci0gIGhhc2hfZG9fZm9yX2VhY2ggKG11c2NsZV90YWJsZSwgbXVzY2xlX200X291dHB1dF9wcm9jZXNzb3IsIG91dCk7Ci19CmRpZmYgLS1naXQgYS9zcmMvbXVzY2xlX3RhYi5oIGIvc3JjL211c2NsZV90YWIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU4YWMyNC4uMDAwMDAwMAotLS0gYS9zcmMvbXVzY2xlX3RhYi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qIE11c2NsZSB0YWJsZSBtYW5hZ2VyIGZvciBCaXNvbiwKLSAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCi0KLSAgIEJpc29uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgQmlzb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCBCaXNvbjsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwotCi0jaWZuZGVmIE1VU0NMRV9UQUJfSF8KLSMgZGVmaW5lIE1VU0NMRV9UQUJfSF8KLQotIyBpbmNsdWRlICJsb2NhdGlvbi5oIgotCi12b2lkIG11c2NsZV9pbml0ICh2b2lkKTsKLXZvaWQgbXVzY2xlX2luc2VydCAoY29uc3QgY2hhciAqa2V5LCBjaGFyICp2YWx1ZSk7Ci1jaGFyICptdXNjbGVfZmluZCAoY29uc3QgY2hhciAqa2V5KTsKLXZvaWQgbXVzY2xlX2ZyZWUgKHZvaWQpOwotCi0KLS8qIEFuIG9ic3RhY2sgZGVkaWNhdGVkIHRvIHJlY2VpdmUgbXVzY2xlIGtleXMgYW5kIHZhbHVlcy4gICovCi1leHRlcm4gc3RydWN0IG9ic3RhY2sgbXVzY2xlX29ic3RhY2s7Ci0KLSNkZWZpbmUgTVVTQ0xFX0lOU0VSVF9CT09MKEtleSwgVmFsdWUpCQkJCVwKLXsJCQkJCQkJCVwKLSAgaW50IHYgPSBWYWx1ZTsJCQkJCQlcCi0gIE1VU0NMRV9JTlNFUlRfSU5UIChLZXksIHYpOwkJCQkJXAotfQotCi0jZGVmaW5lIE1VU0NMRV9JTlNFUlRfSU5UKEtleSwgVmFsdWUpCQkJCVwKLXsJCQkJCQkJCVwKLSAgb2JzdGFja19mZ3JvdzEgKCZtdXNjbGVfb2JzdGFjaywgIiVkIiwgVmFsdWUpOwkJXAotICBvYnN0YWNrXzFncm93ICgmbXVzY2xlX29ic3RhY2ssIDApOwkJCQlcCi0gIG11c2NsZV9pbnNlcnQgKEtleSwgb2JzdGFja19maW5pc2ggKCZtdXNjbGVfb2JzdGFjaykpOwlcCi19Ci0KLSNkZWZpbmUgTVVTQ0xFX0lOU0VSVF9MT05HX0lOVChLZXksIFZhbHVlKQkJCVwKLXsJCQkJCQkJCVwKLSAgb2JzdGFja19mZ3JvdzEgKCZtdXNjbGVfb2JzdGFjaywgIiVsZCIsIFZhbHVlKTsJCVwKLSAgb2JzdGFja18xZ3JvdyAoJm11c2NsZV9vYnN0YWNrLCAwKTsJCQkJXAotICBtdXNjbGVfaW5zZXJ0IChLZXksIG9ic3RhY2tfZmluaXNoICgmbXVzY2xlX29ic3RhY2spKTsJXAotfQotCi0jZGVmaW5lIE1VU0NMRV9JTlNFUlRfU1RSSU5HKEtleSwgVmFsdWUpCQkJXAotewkJCQkJCQkJXAotICBvYnN0YWNrX3Nncm93ICgmbXVzY2xlX29ic3RhY2ssIFZhbHVlKTsJCQlcCi0gIG9ic3RhY2tfMWdyb3cgKCZtdXNjbGVfb2JzdGFjaywgMCk7CQkJCVwKLSAgbXVzY2xlX2luc2VydCAoS2V5LCBvYnN0YWNrX2ZpbmlzaCAoJm11c2NsZV9vYnN0YWNrKSk7CVwKLX0KLQotI2RlZmluZSBNVVNDTEVfT0JTVEFDS19TR1JPVyhPYnN0YWNrLCBWYWx1ZSkJCQlcCi17CQkJCQkJCQlcCi0gIGNoYXIgY29uc3QgKnA7CQkJCQkJXAotICBmb3IgKHAgPSBWYWx1ZTsgKnA7IHArKykJCQkJCVwKLSAgICBzd2l0Y2ggKCpwKQkJCQkJCQlcCi0gICAgICB7CQkJCQkJCQlcCi0gICAgICBjYXNlICckJzoJb2JzdGFja19zZ3JvdyAoT2JzdGFjaywgIiRdWyIpOyBicmVhazsJCVwKLSAgICAgIGNhc2UgJ0AnOglvYnN0YWNrX3Nncm93IChPYnN0YWNrLCAiQEAiICk7IGJyZWFrOwkJXAotICAgICAgY2FzZSAnWyc6CW9ic3RhY2tfc2dyb3cgKE9ic3RhY2ssICJAeyIgKTsgYnJlYWs7CQlcCi0gICAgICBjYXNlICddJzoJb2JzdGFja19zZ3JvdyAoT2JzdGFjaywgIkB9IiApOyBicmVhazsJCVwKLSAgICAgIGRlZmF1bHQ6IG9ic3RhY2tfMWdyb3cgKE9ic3RhY2ssICpwKTsgYnJlYWs7CQlcCi0gICAgICB9CQkJCQkJCQlcCi19Ci0KLSNkZWZpbmUgTVVTQ0xFX0lOU0VSVF9DX1NUUklORyhLZXksIFZhbHVlKQkJCVwKLXsJCQkJCQkJCVwKLSAgTVVTQ0xFX09CU1RBQ0tfU0dST1cgKCZtdXNjbGVfb2JzdGFjaywJCQlcCi0JCQlxdW90ZWFyZ19zdHlsZSAoY19xdW90aW5nX3N0eWxlLAlcCi0JCQkJCVZhbHVlKSk7CQlcCi0gIG9ic3RhY2tfMWdyb3cgKCZtdXNjbGVfb2JzdGFjaywgMCk7CQkJCVwKLSAgbXVzY2xlX2luc2VydCAoS2V5LCBvYnN0YWNrX2ZpbmlzaCAoJm11c2NsZV9vYnN0YWNrKSk7CVwKLX0KLQotLyogSW5zZXJ0IChLRVksIFZBTFVFKS4gIElmIEtFWSBhbHJlYWR5IGV4aXN0ZWQsIG92ZXJ3cml0ZSB0aGUKLSAgIHByZXZpb3VzIHZhbHVlLiAgVXNlcyBNVVNDTEVfT0JTVEFDSy4gIERlLWFsbG9jYXRlcyB0aGUgcHJldmlvdXNseQotICAgYXNzb2NpYXRlZCB2YWx1ZS4gIFZBTFVFIGFuZCBTRVBBUkFUT1IgYXJlIGNvcGllZC4gICovCi0KLXZvaWQgbXVzY2xlX2dyb3cgKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsIGNvbnN0IGNoYXIgKnNlcGFyYXRvcik7Ci0KLQotLyogQXBwZW5kIFZBTFVFIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9mIEtFWSwgdXNpbmcgbXVzY2xlX2dyb3cuICBCdXQKLSAgIGluIGFkZGl0aW9uLCBpc3N1ZSBhIHN5bmNocm9uaXphdGlvbiBsaW5lIGZvciB0aGUgbG9jYXRpb24gTE9DLiAgKi8KLQotdm9pZCBtdXNjbGVfY29kZV9ncm93IChjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLCBsb2NhdGlvbiBsb2MpOwotCi0KLS8qIE1VU0NMRSBpcyBhbiBNNCBsaXN0IG9mIHBhaXJzLiAgQ3JlYXRlIG9yIGV4dGVuZCBpdCB3aXRoIHRoZSBwYWlyCi0gICAoQTEsIEEyKS4gIE5vdGUgdGhhdCBiZWNhdXNlIHRoZSBtdXNjbGUgdmFsdWVzIGFyZSBvdXRwdXQgKmRvdWJsZSoKLSAgIHF1b3RlZCwgb25lIG5lZWRzIHRvIHN0cmlwIHRoZSBmaXJzdCBsZXZlbCBvZiBxdW90ZXMgdG8gcmVhY2ggdGhlCi0gICBsaXN0IGl0c2VsZi4gICovCi0KLXZvaWQgbXVzY2xlX3BhaXJfbGlzdF9ncm93IChjb25zdCBjaGFyICptdXNjbGUsCi0JCQkgICAgY29uc3QgY2hhciAqYTEsIGNvbnN0IGNoYXIgKmEyKTsKLQotdm9pZCBtdXNjbGVzX200X291dHB1dCAoRklMRSAqb3V0KTsKLQotI2VuZGlmIC8qIG5vdCBNVVNDTEVfVEFCX0hfICovCmRpZmYgLS1naXQgYS9zcmMvbmFtZWQtcmVmLmMgYi9zcmMvbmFtZWQtcmVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY3YTNmNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9uYW1lZC1yZWYuYwpAQCAtMCwwICsxLDQ2IEBACisvKiBOYW1lZCBzeW1ib2wgcmVmZXJlbmNlcyBmb3IgQmlzb24KKworICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSAic3lzdGVtLmgiCisKKyNpbmNsdWRlICJuYW1lZC1yZWYuaCIKKworbmFtZWRfcmVmICoKK25hbWVkX3JlZl9uZXcgKHVuaXFzdHIgaWQsIGxvY2F0aW9uIGxvYykKK3sKKyAgbmFtZWRfcmVmICpyZXMgPSB4bWFsbG9jIChzaXplb2YgKnJlcyk7CisKKyAgcmVzLT5pZCA9IGlkOworICByZXMtPmxvYyA9IGxvYzsKKworICByZXR1cm4gcmVzOworfQorCituYW1lZF9yZWYgKgorbmFtZWRfcmVmX2NvcHkgKGNvbnN0IG5hbWVkX3JlZiAqcikKK3sKKyAgcmV0dXJuIG5hbWVkX3JlZl9uZXcgKHItPmlkLCByLT5sb2MpOworfQorCit2b2lkCituYW1lZF9yZWZfZnJlZSAobmFtZWRfcmVmICpyKQoreworICBmcmVlIChyKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9uYW1lZC1yZWYuaCBiL3NyYy9uYW1lZC1yZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGM5NzJjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL25hbWVkLXJlZi5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qIE5hbWVkIHN5bWJvbCByZWZlcmVuY2VzIGZvciBCaXNvbgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgTkFNRURfUkVGX0hfCisjIGRlZmluZSBOQU1FRF9SRUZfSF8KKworI2luY2x1ZGUgImxvY2F0aW9uLmgiCisjaW5jbHVkZSAidW5pcXN0ci5oIgorCisvKiBOYW1lZCByZWZlcmVuY2Ugb2JqZWN0LiBLZWVwcyBpbmZvcm1hdGlvbiBhYm91dAorICAgYSBzeW1ib2xpYyBuYW1lIG9mIGEgc3ltYm9sIGluIGEgcnVsZS4gKi8KK3R5cGVkZWYgc3RydWN0IG5hbWVkX3JlZgoreworICAvKiBTeW1ib2xpYyBuYW1lZCBnaXZlbiBieSB1c2VyLiAqLworICB1bmlxc3RyIGlkOworCisgIC8qIExvY2F0aW9uIG9mIHRoZSBzeW1ib2xpYyBuYW1lLiBOb3QgaW5jbHVkaW5nIGJyYWNrZXRzLiAqLworICBsb2NhdGlvbiBsb2M7Cit9IG5hbWVkX3JlZjsKKworLyogQWxsb2NhdGUgYSBuYW1lZCByZWZlcmVuY2Ugb2JqZWN0LiAqLworbmFtZWRfcmVmICpuYW1lZF9yZWZfbmV3ICh1bmlxc3RyIGlkLCBsb2NhdGlvbiBsb2MpOworCisvKiBBbGxvY2F0ZSBhbmQgcmV0dXJuIGEgY29weS4gICovCituYW1lZF9yZWYgKm5hbWVkX3JlZl9jb3B5IChjb25zdCBuYW1lZF9yZWYgKnIpOworCisvKiBGcmVlIGEgbmFtZWQgcmVmZXJlbmNlIG9iamVjdC4gKi8KK3ZvaWQgbmFtZWRfcmVmX2ZyZWUgKG5hbWVkX3JlZiAqcik7CisKKyNlbmRpZiAvKiAhTkFNRURfUkVGX0hfICovCmRpZmYgLS1naXQgYS9zcmMvbnVsbGFibGUuYyBiL3NyYy9udWxsYWJsZS5jCmluZGV4IDgzYTkwZTkuLjFlN2Y1ZDEgMTAwNjQ0Ci0tLSBhL3NyYy9udWxsYWJsZS5jCisrKyBiL3NyYy9udWxsYWJsZS5jCkBAIC0xLDI0ICsxLDIyIEBACiAvKiBDYWxjdWxhdGUgd2hpY2ggbm9udGVybWluYWxzIGNhbiBleHBhbmQgaW50byB0aGUgbnVsbCBzdHJpbmcgZm9yIEJpc29uLgogCi0gICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYKLSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAyMDAwLTIwMDYsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuCiAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgogCi0gICBCaXNvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLSAgIEJpc29uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCBCaXNvbjsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAKIC8qIFNldCB1cCBOVUxMQUJMRSwgYSB2ZWN0b3Igc2F5aW5nIHdoaWNoIG5vbnRlcm1pbmFscyBjYW4gZXhwYW5kIGludG8KQEAgLTEwNCw4ICsxMDIsOCBAQAogCWVsc2UKIAkgIHsKIAkgICAgLyogVGhpcyBydWxlIGhhcyBhbiBlbXB0eSBSSFMuICovCi0JICAgIGFzc2VydCAoaXRlbV9udW1iZXJfYXNfcnVsZV9udW1iZXIgKHJ1bGVzX3J1bGVuby0+cmhzWzBdKQotCQkgICAgPT0gcnVsZW5vKTsKKwkgICAgYXZlciAoaXRlbV9udW1iZXJfYXNfcnVsZV9udW1iZXIgKHJ1bGVzX3J1bGVuby0+cmhzWzBdKQorCQkgID09IHJ1bGVubyk7CiAJICAgIGlmIChydWxlc19ydWxlbm8tPnVzZWZ1bAogCQkmJiAhIG51bGxhYmxlW3J1bGVzX3J1bGVuby0+bGhzLT5udW1iZXIgLSBudG9rZW5zXSkKIAkgICAgICB7CmRpZmYgLS1naXQgYS9zcmMvbnVsbGFibGUuaCBiL3NyYy9udWxsYWJsZS5oCmluZGV4IGQ1MTA2YzcuLmY3YjI5MTIgMTAwNjQ0Ci0tLSBhL3NyYy9udWxsYWJsZS5oCisrKyBiL3NyYy9udWxsYWJsZS5oCkBAIC0xLDIyICsxLDIxIEBACiAvKiBQYXJ0IG9mIHRoZSBiaXNvbiBwYXJzZXIgZ2VuZXJhdG9yLAotICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDIsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCiAKLSAgIEJpc29uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAotICAgQmlzb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIEJpc29uOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpZm5kZWYgTlVMTEFCTEVfSF8KICMgZGVmaW5lIE5VTExBQkxFX0hfCmRpZmYgLS1naXQgYS9zcmMvb3V0cHV0LmMgYi9zcmMvb3V0cHV0LmMKaW5kZXggNmEwMmJiMy4uMzg1MjcyOSAxMDA2NDQKLS0tIGEvc3JjL291dHB1dC5jCisrKyBiL3NyYy9vdXRwdXQuYwpAQCAtMSw0NiArMSw0NiBAQAogLyogT3V0cHV0IHRoZSBnZW5lcmF0ZWQgcGFyc2luZyBwcm9ncmFtIGZvciBCaXNvbi4KIAotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg2LCAxOTg5LCAxOTkyLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LAotICAgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4NiwgMTk4OSwgMTk5MiwgMjAwMC0yMDEyIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4KIAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCiAKLSAgIEJpc29uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLSAgIEJpc29uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIEJpc29uOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAgIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpbmNsdWRlIDxjb25maWcuaD4KICNpbmNsdWRlICJzeXN0ZW0uaCIKIAorI2luY2x1ZGUgPGNvbmZpZ21ha2UuaD4KICNpbmNsdWRlIDxlcnJvci5oPgogI2luY2x1ZGUgPGdldC1lcnJuby5oPgogI2luY2x1ZGUgPHF1b3RlYXJnLmg+Ci0jaW5jbHVkZSA8c3VicGlwZS5oPgorI2luY2x1ZGUgPHNwYXduLXBpcGUuaD4KICNpbmNsdWRlIDx0aW1ldmFyLmg+CisjaW5jbHVkZSA8d2FpdC1wcm9jZXNzLmg+CiAKICNpbmNsdWRlICJjb21wbGFpbi5oIgogI2luY2x1ZGUgImZpbGVzLmgiCiAjaW5jbHVkZSAiZ2V0YXJncy5oIgogI2luY2x1ZGUgImdyYW0uaCIKLSNpbmNsdWRlICJtdXNjbGVfdGFiLmgiCisjaW5jbHVkZSAibXVzY2xlLXRhYi5oIgogI2luY2x1ZGUgIm91dHB1dC5oIgogI2luY2x1ZGUgInJlYWRlci5oIgorI2luY2x1ZGUgInNjYW4tY29kZS5oIiAgICAvKiBtYXhfbGVmdF9zZW1hbnRpY19jb250ZXh0ICovCiAjaW5jbHVkZSAic2Nhbi1za2VsLmgiCiAjaW5jbHVkZSAic3ltdGFiLmgiCiAjaW5jbHVkZSAidGFibGVzLmgiCiAKLQogc3RhdGljIHN0cnVjdCBvYnN0YWNrIGZvcm1hdF9vYnN0YWNrOwogCiAKQEAgLTY4LDcgKzY4LDcgQEAKICAgaW50IGk7CQkJCQkJCQlcCiAgIGludCBqID0gMTsJCQkJCQkJCVwKIAkJCQkJCQkJCVwKLSAgb2JzdGFja19mZ3JvdzEgKCZmb3JtYXRfb2JzdGFjaywgIiU2ZCIsIGZpcnN0KTsJCQlcCisgIG9ic3RhY2tfcHJpbnRmICgmZm9ybWF0X29ic3RhY2ssICIlNmQiLCBmaXJzdCk7CQkJXAogICBmb3IgKGkgPSBiZWdpbjsgaSA8IGVuZDsgKytpKQkJCQkJCVwKICAgICB7CQkJCQkJCQkJXAogICAgICAgb2JzdGFja18xZ3JvdyAoJmZvcm1hdF9vYnN0YWNrLCAnLCcpOwkJCQlcCkBAIC03OSw3ICs3OSw3IEBACiAJfQkJCQkJCQkJXAogICAgICAgZWxzZQkJCQkJCQkJXAogCSsrajsJCQkJCQkJCVwKLSAgICAgIG9ic3RhY2tfZmdyb3cxICgmZm9ybWF0X29ic3RhY2ssICIlNmQiLCB0YWJsZV9kYXRhW2ldKTsJCVwKKyAgICAgIG9ic3RhY2tfcHJpbnRmICgmZm9ybWF0X29ic3RhY2ssICIlNmQiLCB0YWJsZV9kYXRhW2ldKTsJCVwKICAgICAgIGlmICh0YWJsZV9kYXRhW2ldIDwgbWluKQkJCQkJCVwKIAltaW4gPSB0YWJsZV9kYXRhW2ldOwkJCQkJCVwKICAgICAgIGlmIChtYXggPCB0YWJsZV9kYXRhW2ldKQkJCQkJCVwKQEAgLTkxLDEwICs5MSwxMCBAQAogICBsbWluID0gbWluOwkJCQkJCQkJXAogICBsbWF4ID0gbWF4OwkJCQkJCQkJXAogICAvKiBCdWlsZCBgTkFNRV9taW4nIGFuZCBgTkFNRV9tYXgnIGluIHRoZSBvYnN0YWNrLiAqLwkJCVwKLSAgb2JzdGFja19mZ3JvdzEgKCZmb3JtYXRfb2JzdGFjaywgIiVzX21pbiIsIG5hbWUpOwkJCVwKKyAgb2JzdGFja19wcmludGYgKCZmb3JtYXRfb2JzdGFjaywgIiVzX21pbiIsIG5hbWUpOwkJCVwKICAgb2JzdGFja18xZ3JvdyAoJmZvcm1hdF9vYnN0YWNrLCAwKTsJCQkJCVwKICAgTVVTQ0xFX0lOU0VSVF9MT05HX0lOVCAob2JzdGFja19maW5pc2ggKCZmb3JtYXRfb2JzdGFjayksIGxtaW4pOwlcCi0gIG9ic3RhY2tfZmdyb3cxICgmZm9ybWF0X29ic3RhY2ssICIlc19tYXgiLCBuYW1lKTsJCQlcCisgIG9ic3RhY2tfcHJpbnRmICgmZm9ybWF0X29ic3RhY2ssICIlc19tYXgiLCBuYW1lKTsJCQlcCiAgIG9ic3RhY2tfMWdyb3cgKCZmb3JtYXRfb2JzdGFjaywgMCk7CQkJCQlcCiAgIE1VU0NMRV9JTlNFUlRfTE9OR19JTlQgKG9ic3RhY2tfZmluaXNoICgmZm9ybWF0X29ic3RhY2spLCBsbWF4KTsJXAogfQpAQCAtMTA4LDI5ICsxMDgsMzkgQEAKIEdFTkVSQVRFX01VU0NMRV9JTlNFUlRfVEFCTEUobXVzY2xlX2luc2VydF9zdGF0ZV9udW1iZXJfdGFibGUsIHN0YXRlX251bWJlcikKIAogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBQcmludCB0byBPVVQgYSByZXByZXNlbnRhdGlvbiBvZiBTVFJJTkcgZXNjYXBlZCBib3RoIGZvciBDIGFuZCBNNC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFByaW50IHRvIE9VVCBhIHJlcHJlc2VudGF0aW9uIG9mIENQIHF1b3RlZCBhbmQgZXNjYXBlZCBmb3IgTTQuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyB2b2lkCi1lc2NhcGVkX291dHB1dCAoRklMRSAqb3V0LCBjaGFyIGNvbnN0ICpzdHJpbmcpCitxdW90ZWRfb3V0cHV0IChGSUxFICpvdXQsIGNoYXIgY29uc3QgKmNwKQogewotICBjaGFyIGNvbnN0ICpwOwogICBmcHJpbnRmIChvdXQsICJbWyIpOwogCi0gIGZvciAocCA9IHF1b3RlYXJnX3N0eWxlIChjX3F1b3Rpbmdfc3R5bGUsIHN0cmluZyk7ICpwOyBwKyspCi0gICAgc3dpdGNoICgqcCkKKyAgZm9yICg7ICpjcDsgY3ArKykKKyAgICBzd2l0Y2ggKCpjcCkKICAgICAgIHsKICAgICAgIGNhc2UgJyQnOiBmcHV0cyAoIiRdWyIsIG91dCk7IGJyZWFrOwogICAgICAgY2FzZSAnQCc6IGZwdXRzICgiQEAiLCAgb3V0KTsgYnJlYWs7CiAgICAgICBjYXNlICdbJzogZnB1dHMgKCJAeyIsICBvdXQpOyBicmVhazsKICAgICAgIGNhc2UgJ10nOiBmcHV0cyAoIkB9IiwgIG91dCk7IGJyZWFrOwotICAgICAgZGVmYXVsdDogZnB1dGMgKCpwLCBvdXQpOyBicmVhazsKKyAgICAgIGRlZmF1bHQ6ICBmcHV0YyAoKmNwLCAgIG91dCk7IGJyZWFrOwogICAgICAgfQogCiAgIGZwcmludGYgKG91dCwgIl1dIik7CiB9CiAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUHJpbnQgdG8gT1VUIGEgcmVwcmVzZW50YXRpb24gb2YgU1RSSU5HIHF1b3RlZCBhbmQgZXNjYXBlZCBib3RoIHwKK3wgZm9yIEMgYW5kIE00LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQKK3N0cmluZ19vdXRwdXQgKEZJTEUgKm91dCwgY2hhciBjb25zdCAqc3RyaW5nKQoreworICBxdW90ZWRfb3V0cHV0IChvdXQsIHF1b3RlYXJnX3N0eWxlIChjX3F1b3Rpbmdfc3R5bGUsIHN0cmluZykpOworfQorCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCBQcmVwYXJlIHRoZSBtdXNjbGVzIHJlbGF0ZWQgdG8gdGhlIHN5bWJvbHM6IHRyYW5zbGF0ZSwgdG5hbWUsIGFuZCB8CkBAIC0xNDAsNyArMTUwLDYgQEAKIHN0YXRpYyB2b2lkCiBwcmVwYXJlX3N5bWJvbHMgKHZvaWQpCiB7Ci0gIE1VU0NMRV9JTlNFUlRfQk9PTCAoInRva2VuX3RhYmxlIiwgdG9rZW5fdGFibGVfZmxhZyk7CiAgIE1VU0NMRV9JTlNFUlRfSU5UICgidG9rZW5zX251bWJlciIsIG50b2tlbnMpOwogICBNVVNDTEVfSU5TRVJUX0lOVCAoIm50ZXJtc19udW1iZXIiLCBudmFycyk7CiAgIE1VU0NMRV9JTlNFUlRfSU5UICgidW5kZWZfdG9rZW5fbnVtYmVyIiwgdW5kZWZ0b2tlbi0+bnVtYmVyKTsKQEAgLTE1Niw5ICsxNjUsMTIgQEAKICAgICBpbnQgaTsKICAgICAvKiBXZSBhc3N1bWUgdGhhdCB0aGUgdGFibGUgd2lsbCBiZSBvdXRwdXQgc3RhcnRpbmcgYXQgY29sdW1uIDIuICovCiAgICAgaW50IGogPSAyOworICAgIHN0cnVjdCBxdW90aW5nX29wdGlvbnMgKnFvID0gY2xvbmVfcXVvdGluZ19vcHRpb25zICgwKTsKKyAgICBzZXRfcXVvdGluZ19zdHlsZSAocW8sIGNfcXVvdGluZ19zdHlsZSk7CisgICAgc2V0X3F1b3RpbmdfZmxhZ3MgKHFvLCBRQV9TUExJVF9UUklHUkFQSFMpOwogICAgIGZvciAoaSA9IDA7IGkgPCBuc3ltczsgaSsrKQogICAgICAgewotCWNoYXIgY29uc3QgKmNwID0gcXVvdGVhcmdfc3R5bGUgKGNfcXVvdGluZ19zdHlsZSwgc3ltYm9sc1tpXS0+dGFnKTsKKwljaGFyICpjcCA9IHF1b3RlYXJnX2FsbG9jIChzeW1ib2xzW2ldLT50YWcsIC0xLCBxbyk7CiAJLyogV2lkdGggb2YgdGhlIG5leHQgdG9rZW4sIGluY2x1ZGluZyB0aGUgdHdvIHF1b3RlcywgdGhlCiAJICAgY29tbWEgYW5kIHRoZSBzcGFjZS4gICovCiAJaW50IHdpZHRoID0gc3RybGVuIChjcCkgKyAyOwpAQCAtMTcxLDEzICsxODMsMTMgQEAKIAogCWlmIChpKQogCSAgb2JzdGFja18xZ3JvdyAoJmZvcm1hdF9vYnN0YWNrLCAnICcpOwotCU1VU0NMRV9PQlNUQUNLX1NHUk9XICgmZm9ybWF0X29ic3RhY2ssIGNwKTsKKwlvYnN0YWNrX2VzY2FwZSAoJmZvcm1hdF9vYnN0YWNrLCBjcCk7CisgICAgICAgIGZyZWUgKGNwKTsKIAlvYnN0YWNrXzFncm93ICgmZm9ybWF0X29ic3RhY2ssICcsJyk7CiAJaiArPSB3aWR0aDsKICAgICAgIH0KLSAgICAvKiBBZGQgYSBOVUxMIGVudHJ5IHRvIGxpc3Qgb2YgdG9rZW5zICh3ZWxsLCAwLCBhcyBOVUxMIG1pZ2h0IG5vdCBiZQotICAgICAgIGRlZmluZWQpLiAgKi8KLSAgICBvYnN0YWNrX3Nncm93ICgmZm9ybWF0X29ic3RhY2ssICIgMCIpOworICAgIGZyZWUgKHFvKTsKKyAgICBvYnN0YWNrX3Nncm93ICgmZm9ybWF0X29ic3RhY2ssICIgXWI0X251bGxbIik7CiAKICAgICAvKiBGaW5pc2ggdGFibGUgYW5kIHN0b3JlLiAqLwogICAgIG9ic3RhY2tfMWdyb3cgKCZmb3JtYXRfb2JzdGFjaywgMCk7CkBAIC0yMzYsNyArMjQ4LDcgQEAKICAgICAgIC8qIE1lcmdlci1mdW5jdGlvbiBpbmRleCAoR0xSKS4gICovCiAgICAgICBtZXJnZXJbcl0gPSBydWxlc1tyXS5tZXJnZXI7CiAgICAgfQotICBhc3NlcnQgKGkgPT0gbnJpdGVtcyk7CisgIGF2ZXIgKGkgPT0gbnJpdGVtcyk7CiAKICAgbXVzY2xlX2luc2VydF9pdGVtX251bWJlcl90YWJsZSAoInJocyIsIHJocywgcml0ZW1bMF0sIDEsIG5yaXRlbXMpOwogICBtdXNjbGVfaW5zZXJ0X3Vuc2lnbmVkX2ludF90YWJsZSAoInByaHMiLCBwcmhzLCAwLCAwLCBucnVsZXMpOwpAQCAtMjg5LDIwICszMDEsMTYgQEAKIHsKICAgcnVsZV9udW1iZXIgcjsKIAotICBmcHV0cyAoIm00X2RlZmluZShbYjRfYWN0aW9uc10sIFxuW1siLCBvdXQpOworICBmcHV0cyAoIm00X2RlZmluZShbYjRfYWN0aW9uc10sIFxuWyIsIG91dCk7CiAgIGZvciAociA9IDA7IHIgPCBucnVsZXM7ICsrcikKICAgICBpZiAocnVsZXNbcl0uYWN0aW9uKQogICAgICAgewotCWZwcmludGYgKG91dCwgIiAgY2FzZSAlZDpcbiIsIHIgKyAxKTsKLQotCWZwcmludGYgKG91dCwgIl1iNF9zeW5jbGluZSglZCwgIiwKKwlmcHJpbnRmIChvdXQsICJiNF9jYXNlKCVkLCBbYjRfc3luY2xpbmUoJWQsICIsIHIgKyAxLAogCQkgcnVsZXNbcl0uYWN0aW9uX2xvY2F0aW9uLnN0YXJ0LmxpbmUpOwotCWVzY2FwZWRfb3V0cHV0IChvdXQsIHJ1bGVzW3JdLmFjdGlvbl9sb2NhdGlvbi5zdGFydC5maWxlKTsKLQlmcHJpbnRmIChvdXQsICIpW1xuIik7Ci0JZnByaW50ZiAob3V0LCAiICAgICVzXG4gICAgYnJlYWs7XG5cbiIsCi0JCSBydWxlc1tyXS5hY3Rpb24pOworCXN0cmluZ19vdXRwdXQgKG91dCwgcnVsZXNbcl0uYWN0aW9uX2xvY2F0aW9uLnN0YXJ0LmZpbGUpOworCWZwcmludGYgKG91dCwgIilcblsgICAgJXNdXSlcblxuIiwgcnVsZXNbcl0uYWN0aW9uKTsKICAgICAgIH0KLSAgZnB1dHMgKCJdXSlcblxuIiwgb3V0KTsKKyAgZnB1dHMgKCJdKVxuXG4iLCBvdXQpOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgpAQCAtMzQ0LDEwICszNTIsMTAgQEAKICAgICAgIHN5bWJvbCAqc3ltID0gc3ltYm9sc1tpXTsKICAgICAgIGludCBudW1iZXIgPSBzeW0tPnVzZXJfdG9rZW5fbnVtYmVyOwogCi0gICAgICAvKiBBdCB0aGlzIHN0YWdlLCBpZiB0aGVyZSBhcmUgbGl0ZXJhbCBhbGlhc2VzLCB0aGV5IGFyZSBwYXJ0IG9mCi0JIFNZTUJPTFMsIHNvIHdlIHNob3VsZCBub3QgZmluZCBzeW1ib2xzIHdoaWNoIGFyZSB0aGUgYWxpYXNlcwotCSBoZXJlLiAgKi8KLSAgICAgIGFzc2VydCAobnVtYmVyICE9IFVTRVJfTlVNQkVSX0FMSUFTKTsKKyAgICAgIC8qIEF0IHRoaXMgc3RhZ2UsIGlmIHRoZXJlIGFyZSBsaXRlcmFsIHN0cmluZyBhbGlhc2VzLCB0aGV5IGFyZQorICAgICAgICAgcGFydCBvZiBTWU1CT0xTLCBzbyB3ZSBzaG91bGQgbm90IGZpbmQgdGhlaXIgYWxpYXNlZCBzeW1ib2xzCisgICAgICAgICBoZXJlLiAgKi8KKyAgICAgIGF2ZXIgKG51bWJlciAhPSBVU0VSX05VTUJFUl9IQVNfU1RSSU5HX0FMSUFTKTsKIAogICAgICAgLyogU2tpcCBlcnJvciB0b2tlbi4gICovCiAgICAgICBpZiAoc3ltID09IGVycnRva2VuKQpAQCAtMzY0LDkgKzM3MiwxMSBAQAogICAgICAgaWYgKHN5bS0+dGFnWzBdID09ICdcJycgfHwgc3ltLT50YWdbMF0gPT0gJ1wiJykKIAljb250aW51ZTsKIAotICAgICAgLyogRG9uJ3QgI2RlZmluZSBub25saXRlcmFsIHRva2VucyB3aG9zZSBuYW1lcyBjb250YWluIHBlcmlvZHMKLQkgb3IgJyQnIChhcyBkb2VzIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBFT0YgdG9rZW4pLiAgKi8KLSAgICAgIGlmIChzdHJjaHIgKHN5bS0+dGFnLCAnLicpIHx8IHN0cmNociAoc3ltLT50YWcsICckJykpCisgICAgICAvKiBEb24ndCAjZGVmaW5lIG5vbmxpdGVyYWwgdG9rZW5zIHdob3NlIG5hbWVzIGNvbnRhaW4gcGVyaW9kcywKKyAgICAgICAgIGRhc2hlcyBvciAnJCcgKGFzIGRvZXMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIEVPRiB0b2tlbikuICAqLworICAgICAgaWYgKG1ic2NociAoc3ltLT50YWcsICcuJykKKyAgICAgICAgICB8fCBtYnNjaHIgKHN5bS0+dGFnLCAnLScpCisgICAgICAgICAgfHwgbWJzY2hyIChzeW0tPnRhZywgJyQnKSkKIAljb250aW51ZTsKIAogICAgICAgZnByaW50ZiAob3V0LCAiJXNbW1slc11dLCAlZF0iLApAQCAtMzc3LDY4ICszODcsNDQgQEAKIH0KIAogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgT3V0cHV0IHRoZSBzeW1ib2wgZGVzdHJ1Y3RvcnMgdG8gT1VULiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgT3V0cHV0IHRoZSBzeW1ib2wgZGVzdHJ1Y3RvcnMgb3IgcHJpbnRlcnMgdG8gT1VULiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyB2b2lkCi1zeW1ib2xfZGVzdHJ1Y3RvcnNfb3V0cHV0IChGSUxFICpvdXQpCitzeW1ib2xfY29kZV9wcm9wc19vdXRwdXQgKEZJTEUgKm91dCwgY2hhciBjb25zdCAqd2hhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9wcm9wcyBjb25zdCAqKCpnZXQpKHN5bWJvbCBjb25zdCAqKSkKIHsKICAgaW50IGk7CiAgIGNoYXIgY29uc3QgKnNlcCA9ICIiOwogCi0gIGZwdXRzICgibTRfZGVmaW5lKFtiNF9zeW1ib2xfZGVzdHJ1Y3RvcnNdLCBcblsiLCBvdXQpOworICBmcHV0cyAoIm00X2RlZmluZShbYjRfc3ltYm9sXyIsIG91dCk7CisgIGZwdXRzICh3aGF0LCBvdXQpOworICBmcHV0cyAoIl0sIFxuWyIsIG91dCk7CiAgIGZvciAoaSA9IDA7IGkgPCBuc3ltczsgKytpKQotICAgIGlmIChzeW1ib2xzW2ldLT5kZXN0cnVjdG9yKQotICAgICAgewotCXN5bWJvbCAqc3ltID0gc3ltYm9sc1tpXTsKLQotCS8qIEZpbGVuYW1lLCBsaW5lbm8sCi0JICAgU3ltYm9sLW5hbWUsIFN5bWJvbC1udW1iZXIsCi0JICAgZGVzdHJ1Y3Rvciwgb3B0aW9uYWwgdHlwZW5hbWUuICAqLwotCWZwcmludGYgKG91dCwgIiVzWyIsIHNlcCk7Ci0Jc2VwID0gIixcbiI7Ci0JZXNjYXBlZF9vdXRwdXQgKG91dCwgc3ltLT5kZXN0cnVjdG9yX2xvY2F0aW9uLnN0YXJ0LmZpbGUpOwotCWZwcmludGYgKG91dCwgIiwgJWQsICIsIHN5bS0+ZGVzdHJ1Y3Rvcl9sb2NhdGlvbi5zdGFydC5saW5lKTsKLQllc2NhcGVkX291dHB1dCAob3V0LCBzeW0tPnRhZyk7Ci0JZnByaW50ZiAob3V0LCAiLCAlZCwgW1slc11dIiwgc3ltLT5udW1iZXIsIHN5bS0+ZGVzdHJ1Y3Rvcik7Ci0JaWYgKHN5bS0+dHlwZV9uYW1lKQotCSAgZnByaW50ZiAob3V0LCAiLCBbWyVzXV0iLCBzeW0tPnR5cGVfbmFtZSk7Ci0JZnB1dGMgKCddJywgb3V0KTsKLSAgICAgIH0KLSAgZnB1dHMgKCJdKVxuXG4iLCBvdXQpOwotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBPdXRwdXQgdGhlIHN5bWJvbCBwcmludGVycyB0byBPVVQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIHZvaWQKLXN5bWJvbF9wcmludGVyc19vdXRwdXQgKEZJTEUgKm91dCkKLXsKLSAgaW50IGk7Ci0gIGNoYXIgY29uc3QgKnNlcCA9ICIiOwotCi0gIGZwdXRzICgibTRfZGVmaW5lKFtiNF9zeW1ib2xfcHJpbnRlcnNdLCBcblsiLCBvdXQpOwotICBmb3IgKGkgPSAwOyBpIDwgbnN5bXM7ICsraSkKLSAgICBpZiAoc3ltYm9sc1tpXS0+cHJpbnRlcikKLSAgICAgIHsKLQlzeW1ib2wgKnN5bSA9IHN5bWJvbHNbaV07Ci0KLQkvKiBGaWxlbmFtZSwgbGluZW5vLAotCSAgIFN5bWJvbC1uYW1lLCBTeW1ib2wtbnVtYmVyLAotCSAgIHByaW50ZXIsIG9wdGlvbmFsIHR5cGVuYW1lLiAgKi8KLQlmcHJpbnRmIChvdXQsICIlc1siLCBzZXApOwotCXNlcCA9ICIsXG4iOwotCWVzY2FwZWRfb3V0cHV0IChvdXQsIHN5bS0+cHJpbnRlcl9sb2NhdGlvbi5zdGFydC5maWxlKTsKLQlmcHJpbnRmIChvdXQsICIsICVkLCAiLCBzeW0tPnByaW50ZXJfbG9jYXRpb24uc3RhcnQubGluZSk7Ci0JZXNjYXBlZF9vdXRwdXQgKG91dCwgc3ltLT50YWcpOwotCWZwcmludGYgKG91dCwgIiwgJWQsIFtbJXNdXSIsIHN5bS0+bnVtYmVyLCBzeW0tPnByaW50ZXIpOwotCWlmIChzeW0tPnR5cGVfbmFtZSkKLQkgIGZwcmludGYgKG91dCwgIiwgW1slc11dIiwgc3ltLT50eXBlX25hbWUpOwotCWZwdXRjICgnXScsIG91dCk7Ci0gICAgICB9CisgICAgeworICAgICAgc3ltYm9sICpzeW0gPSBzeW1ib2xzW2ldOworICAgICAgY2hhciBjb25zdCAqY29kZSA9ICgqZ2V0KSAoc3ltKS0+Y29kZTsKKyAgICAgIGlmIChjb2RlKQorICAgICAgICB7CisgICAgICAgICAgbG9jYXRpb24gbG9jID0gKCpnZXQpIChzeW0pLT5sb2NhdGlvbjsKKyAgICAgICAgICAvKiBGaWxlbmFtZSwgbGluZW5vLAorICAgICAgICAgICAgIFN5bWJvbC1uYW1lLCBTeW1ib2wtbnVtYmVyLAorICAgICAgICAgICAgIGNvZGUsIG9wdGlvbmFsIHR5cGVuYW1lLiAgKi8KKyAgICAgICAgICBmcHJpbnRmIChvdXQsICIlc1siLCBzZXApOworICAgICAgICAgIHNlcCA9ICIsXG4iOworICAgICAgICAgIHN0cmluZ19vdXRwdXQgKG91dCwgbG9jLnN0YXJ0LmZpbGUpOworICAgICAgICAgIGZwcmludGYgKG91dCwgIiwgJWQsICIsIGxvYy5zdGFydC5saW5lKTsKKyAgICAgICAgICBxdW90ZWRfb3V0cHV0IChvdXQsIHN5bS0+dGFnKTsKKyAgICAgICAgICBmcHJpbnRmIChvdXQsICIsICVkLCBbWyVzXV0iLCBzeW0tPm51bWJlciwgY29kZSk7CisgICAgICAgICAgaWYgKHN5bS0+dHlwZV9uYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmcHV0cyAoIiwgIiwgb3V0KTsKKyAgICAgICAgICAgICAgcXVvdGVkX291dHB1dCAob3V0LCBzeW0tPnR5cGVfbmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZnB1dGMgKCddJywgb3V0KTsKKyAgICAgICAgfQorICAgIH0KICAgZnB1dHMgKCJdKVxuXG4iLCBvdXQpOwogfQogCkBAIC00NDcsNyArNDMzLDcgQEAKIHByZXBhcmVfYWN0aW9ucyAodm9pZCkKIHsKICAgLyogRmlndXJlIG91dCB0aGUgYWN0aW9ucyBmb3IgdGhlIHNwZWNpZmllZCBzdGF0ZSwgaW5kZXhlZCBieQotICAgICBsb29rLWFoZWFkIHRva2VuIHR5cGUuICAqLworICAgICBsb29rYWhlYWQgdG9rZW4gdHlwZS4gICovCiAKICAgbXVzY2xlX2luc2VydF9ydWxlX251bWJlcl90YWJsZSAoImRlZmFjdCIsIHl5ZGVmYWN0LAogCQkJCSAgIHl5ZGVmYWN0WzBdLCAxLCBuc3RhdGVzKTsKQEAgLTQ5MCw2ICs0NzYsMjMgQEAKIAkJCQkgICAgMCwgMSwgY29uZmxpY3RfbGlzdF9jbnQpOwogfQogCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBPdXRwdXQgdGhlIGRlZmluaXRpb25zIG9mIGFsbCB0aGUgbXVzY2xlcy4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCittdXNjbGVzX291dHB1dCAoRklMRSAqb3V0KQoreworICBmcHV0cyAoIm00X2luaXQoKVxuIiwgb3V0KTsKKworICB1c2VyX2FjdGlvbnNfb3V0cHV0IChvdXQpOworICBtZXJnZXJfb3V0cHV0IChvdXQpOworICB0b2tlbl9kZWZpbml0aW9uc19vdXRwdXQgKG91dCk7CisgIHN5bWJvbF9jb2RlX3Byb3BzX291dHB1dCAob3V0LCAiZGVzdHJ1Y3RvcnMiLCAmc3ltYm9sX2Rlc3RydWN0b3JfZ2V0KTsKKyAgc3ltYm9sX2NvZGVfcHJvcHNfb3V0cHV0IChvdXQsICJwcmludGVycyIsICZzeW1ib2xfcHJpbnRlcl9nZXQpOworCisgIG11c2NsZXNfbTRfb3V0cHV0IChvdXQpOworfQogDAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IENhbGwgdGhlIHNrZWxldG9uIHBhcnNlci4gIHwKQEAgLTQ5OSwyMSArNTAyLDE5IEBACiBvdXRwdXRfc2tlbGV0b24gKHZvaWQpCiB7CiAgIEZJTEUgKmluOwotICBGSUxFICpvdXQ7CiAgIGludCBmaWx0ZXJfZmRbMl07Ci0gIGNoYXIgY29uc3QgKmFyZ3ZbNl07CisgIGNoYXIgY29uc3QgKmFyZ3ZbMTBdOwogICBwaWRfdCBwaWQ7CiAKLSAgLyogQ29tcHV0ZSB0aGUgbmFtZXMgb2YgdGhlIHBhY2thZ2UgZGF0YSBkaXIgYW5kIHNrZWxldG9uIGZpbGUuCi0gICAgIFRlc3Qgd2hldGhlciBtNHN1Z2FyLm00IGlzIHJlYWRhYmxlLCB0byBjaGVjayBmb3IgcHJvcGVyCi0gICAgIGluc3RhbGxhdGlvbi4gIEEgZmF1bHR5IGluc3RhbGxhdGlvbiBjYW4gY2F1c2UgZGVhZGxvY2ssIHNvIGEKLSAgICAgY2hlYXAgc2FuaXR5IGNoZWNrIGlzIHdvcnRod2hpbGUuICAqLworICAvKiBDb21wdXRlIHRoZSBuYW1lcyBvZiB0aGUgcGFja2FnZSBkYXRhIGRpciBhbmQgc2tlbGV0b24gZmlsZXMuICAqLwogICBjaGFyIGNvbnN0IG00c3VnYXJbXSA9ICJtNHN1Z2FyL200c3VnYXIubTQiOworICBjaGFyIGNvbnN0IG00Ymlzb25bXSA9ICJiaXNvbi5tNCI7CiAgIGNoYXIgKmZ1bGxfbTRzdWdhcjsKKyAgY2hhciAqZnVsbF9tNGJpc29uOwogICBjaGFyICpmdWxsX3NrZWxldG9uOwogICBjaGFyIGNvbnN0ICpwOwogICBjaGFyIGNvbnN0ICptNCA9IChwID0gZ2V0ZW52ICgiTTQiKSkgPyBwIDogTTQ7Ci0gIGNoYXIgY29uc3QgKnBrZ2RhdGFkaXIgPSAocCA9IGdldGVudiAoIkJJU09OX1BLR0RBVEFESVIiKSkgPyBwIDogUEtHREFUQURJUjsKKyAgY2hhciBjb25zdCAqcGtnZGF0YWRpciA9IGNvbXB1dGVfcGtnZGF0YWRpciAoKTsKICAgc2l6ZV90IHNrZWxldG9uX3NpemUgPSBzdHJsZW4gKHNrZWxldG9uKSArIDE7CiAgIHNpemVfdCBwa2dkYXRhZGlybGVuID0gc3RybGVuIChwa2dkYXRhZGlyKTsKICAgd2hpbGUgKHBrZ2RhdGFkaXJsZW4gJiYgcGtnZGF0YWRpcltwa2dkYXRhZGlybGVuIC0gMV0gPT0gJy8nKQpAQCAtNTIxLDc3ICs1MjIsMTI4IEBACiAgIGZ1bGxfc2tlbGV0b24gPSB4bWFsbG9jIChwa2dkYXRhZGlybGVuICsgMQogCQkJICAgKyAoc2tlbGV0b25fc2l6ZSA8IHNpemVvZiBtNHN1Z2FyCiAJCQkgICAgICA/IHNpemVvZiBtNHN1Z2FyIDogc2tlbGV0b25fc2l6ZSkpOwotICBzdHJjcHkgKGZ1bGxfc2tlbGV0b24sIHBrZ2RhdGFkaXIpOworICBtZW1jcHkgKGZ1bGxfc2tlbGV0b24sIHBrZ2RhdGFkaXIsIHBrZ2RhdGFkaXJsZW4pOwogICBmdWxsX3NrZWxldG9uW3BrZ2RhdGFkaXJsZW5dID0gJy8nOwogICBzdHJjcHkgKGZ1bGxfc2tlbGV0b24gKyBwa2dkYXRhZGlybGVuICsgMSwgbTRzdWdhcik7CiAgIGZ1bGxfbTRzdWdhciA9IHhzdHJkdXAgKGZ1bGxfc2tlbGV0b24pOwotICBzdHJjcHkgKGZ1bGxfc2tlbGV0b24gKyBwa2dkYXRhZGlybGVuICsgMSwgc2tlbGV0b24pOworICBzdHJjcHkgKGZ1bGxfc2tlbGV0b24gKyBwa2dkYXRhZGlybGVuICsgMSwgbTRiaXNvbik7CisgIGZ1bGxfbTRiaXNvbiA9IHhzdHJkdXAgKGZ1bGxfc2tlbGV0b24pOworICBpZiAobWJzY2hyIChza2VsZXRvbiwgJy8nKSkKKyAgICBzdHJjcHkgKGZ1bGxfc2tlbGV0b24sIHNrZWxldG9uKTsKKyAgZWxzZQorICAgIHN0cmNweSAoZnVsbF9za2VsZXRvbiArIHBrZ2RhdGFkaXJsZW4gKyAxLCBza2VsZXRvbik7CisKKyAgLyogVGVzdCB3aGV0aGVyIG00c3VnYXIubTQgaXMgcmVhZGFibGUsIHRvIGNoZWNrIGZvciBwcm9wZXIKKyAgICAgaW5zdGFsbGF0aW9uLiAgQSBmYXVsdHkgaW5zdGFsbGF0aW9uIGNhbiBjYXVzZSBkZWFkbG9jaywgc28gYQorICAgICBjaGVhcCBzYW5pdHkgY2hlY2sgaXMgd29ydGh3aGlsZS4gICovCiAgIHhmY2xvc2UgKHhmb3BlbiAoZnVsbF9tNHN1Z2FyLCAiciIpKTsKIAogICAvKiBDcmVhdGUgYW4gbTQgc3VicHJvY2VzcyBjb25uZWN0ZWQgdG8gdXMgdmlhIHR3byBwaXBlcy4gICovCiAKICAgaWYgKHRyYWNlX2ZsYWcgJiB0cmFjZV90b29scykKLSAgICBmcHJpbnRmIChzdGRlcnIsICJydW5uaW5nOiAlcyAlcyAtICVzXG4iLAotCSAgICAgbTQsIGZ1bGxfbTRzdWdhciwgZnVsbF9za2VsZXRvbik7CisgICAgZnByaW50ZiAoc3RkZXJyLCAicnVubmluZzogJXMgJXMgLSAlcyAlc1xuIiwKKyAgICAgICAgICAgICBtNCwgZnVsbF9tNHN1Z2FyLCBmdWxsX200Ymlzb24sIGZ1bGxfc2tlbGV0b24pOwogCi0gIGFyZ3ZbMF0gPSBtNDsKLSAgYXJndlsxXSA9IGZ1bGxfbTRzdWdhcjsKLSAgYXJndlsyXSA9ICItIjsKLSAgYXJndlszXSA9IGZ1bGxfc2tlbGV0b247Ci0gIGFyZ3ZbNF0gPSB0cmFjZV9mbGFnICYgdHJhY2VfbTQgPyAiLWRWIiA6IE5VTEw7Ci0gIGFyZ3ZbNV0gPSBOVUxMOworICAvKiBTb21lIGZ1dHVyZSB2ZXJzaW9uIG9mIEdOVSBNNCAobW9zdCBsaWtlbHkgMS42KSBtYXkgdHJlYXQgdGhlIC1kViBpbiBhCisgICAgIHBvc2l0aW9uLWRlcGVuZGVudCBtYW5uZXIuICBLZWVwIGl0IGFzIHRoZSBmaXJzdCBhcmd1bWVudCBzbyB0aGF0IGFsbAorICAgICBmaWxlcyBhcmUgdHJhY2VkLgogCi0gIGluaXRfc3VicGlwZSAoKTsKLSAgcGlkID0gY3JlYXRlX3N1YnBpcGUgKGFyZ3YsIGZpbHRlcl9mZCk7CisgICAgIFNlZSB0aGUgdGhyZWFkIHN0YXJ0aW5nIGF0CisgICAgIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDgtMDcvbXNnMDAwMDAuaHRtbD4KKyAgICAgZm9yIGRldGFpbHMuICAqLworICB7CisgICAgaW50IGkgPSAwOworICAgIGFyZ3ZbaSsrXSA9IG00OworCisgICAgLyogV2hlbiBQT1NJWExZX0NPUlJFQ1QgaXMgc2V0LCBHTlUgTTQgMS42IGFuZCBsYXRlciBkaXNhYmxlIEdOVQorICAgICAgIGV4dGVuc2lvbnMsIHdoaWNoIEJpc29uJ3Mgc2tlbGV0b25zIGRlcGVuZCBvbi4gIFdpdGggb2xkZXIgTTQsCisgICAgICAgaXQgaGFzIG5vIGVmZmVjdC4gIE00IDEuNC4xMiBhZGRlZCBhIC1nLy0tZ251IGNvbW1hbmQtbGluZQorICAgICAgIG9wdGlvbiB0byBtYWtlIGl0IGV4cGxpY2l0IHRoYXQgYSBwcm9ncmFtIHdhbnRzIEdOVSBNNAorICAgICAgIGV4dGVuc2lvbnMgZXZlbiB3aGVuIFBPU0lYTFlfQ09SUkVDVCBpcyBzZXQuCisKKyAgICAgICBTZWUgdGhlIHRocmVhZCBzdGFydGluZyBhdAorICAgICAgIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDgtMDcvbXNnMDAwMDAuaHRtbD4KKyAgICAgICBmb3IgZGV0YWlscy4gICovCisgICAgaWYgKCpNNF9HTlVfT1BUSU9OKQorICAgICAgYXJndltpKytdID0gTTRfR05VX09QVElPTjsKKworICAgIGFyZ3ZbaSsrXSA9ICItSSI7CisgICAgYXJndltpKytdID0gcGtnZGF0YWRpcjsKKyAgICBpZiAodHJhY2VfZmxhZyAmIHRyYWNlX200KQorICAgICAgYXJndltpKytdID0gIi1kViI7CisgICAgYXJndltpKytdID0gZnVsbF9tNHN1Z2FyOworICAgIGFyZ3ZbaSsrXSA9ICItIjsKKyAgICBhcmd2W2krK10gPSBmdWxsX200Ymlzb247CisgICAgYXJndltpKytdID0gZnVsbF9za2VsZXRvbjsKKyAgICBhcmd2W2krK10gPSBOVUxMOworICAgIGF2ZXIgKGkgPD0gQVJSQVlfQ0FSRElOQUxJVFkgKGFyZ3YpKTsKKyAgfQorCisgIC8qIFRoZSB1Z2x5IGNhc3QgaXMgYmVjYXVzZSBnbnVsaWIgZ2V0cyB0aGUgY29uc3QtbmVzcyB3cm9uZy4gICovCisgIHBpZCA9IGNyZWF0ZV9waXBlX2JpZGkgKCJtNCIsIG00LCAoY2hhciAqKikodm9pZCopYXJndiwgZmFsc2UsIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIGZpbHRlcl9mZCk7CiAgIGZyZWUgKGZ1bGxfbTRzdWdhcik7CisgIGZyZWUgKGZ1bGxfbTRiaXNvbik7CiAgIGZyZWUgKGZ1bGxfc2tlbGV0b24pOwogCi0gIG91dCA9IGZkb3BlbiAoZmlsdGVyX2ZkWzBdLCAidyIpOwotICBpZiAoISBvdXQpCi0gICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgZ2V0X2Vycm5vICgpLAotCSAgICJmZG9wZW4iKTsKLQotICAvKiBPdXRwdXQgdGhlIGRlZmluaXRpb25zIG9mIGFsbCB0aGUgbXVzY2xlcy4gICovCi0gIGZwdXRzICgibTRfaW5pdCgpXG4iLCBvdXQpOwotCi0gIHVzZXJfYWN0aW9uc19vdXRwdXQgKG91dCk7Ci0gIG1lcmdlcl9vdXRwdXQgKG91dCk7Ci0gIHRva2VuX2RlZmluaXRpb25zX291dHB1dCAob3V0KTsKLSAgc3ltYm9sX2Rlc3RydWN0b3JzX291dHB1dCAob3V0KTsKLSAgc3ltYm9sX3ByaW50ZXJzX291dHB1dCAob3V0KTsKLQotICBtdXNjbGVzX200X291dHB1dCAob3V0KTsKLQotICBmcHV0cyAoIm00X3dyYXAoW200X2RpdmVydF9wb3AoMCldKVxuIiwgb3V0KTsKLSAgZnB1dHMgKCJtNF9kaXZlcnRfcHVzaCgwKWRubFxuIiwgb3V0KTsKLSAgeGZjbG9zZSAob3V0KTsKKyAgaWYgKHRyYWNlX2ZsYWcgJiB0cmFjZV9tdXNjbGVzKQorICAgIG11c2NsZXNfb3V0cHV0IChzdGRlcnIpOworICB7CisgICAgRklMRSAqb3V0ID0gZmRvcGVuIChmaWx0ZXJfZmRbMV0sICJ3Iik7CisgICAgaWYgKCEgb3V0KQorICAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgZ2V0X2Vycm5vICgpLAorICAgICAgICAgICAgICJmZG9wZW4iKTsKKyAgICBtdXNjbGVzX291dHB1dCAob3V0KTsKKyAgICB4ZmNsb3NlIChvdXQpOworICB9CiAKICAgLyogUmVhZCBhbmQgcHJvY2VzcyBtNCdzIG91dHB1dC4gICovCiAgIHRpbWV2YXJfcHVzaCAoVFZfTTQpOwotICBlbmRfb2Zfb3V0cHV0X3N1YnBpcGUgKHBpZCwgZmlsdGVyX2ZkKTsKLSAgaW4gPSBmZG9wZW4gKGZpbHRlcl9mZFsxXSwgInIiKTsKKyAgaW4gPSBmZG9wZW4gKGZpbHRlcl9mZFswXSwgInIiKTsKICAgaWYgKCEgaW4pCiAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgZ2V0X2Vycm5vICgpLAogCSAgICJmZG9wZW4iKTsKICAgc2Nhbl9za2VsIChpbik7CisgIC8qIHNjYW5fc2tlbCBzaG91bGQgaGF2ZSByZWFkIGFsbCBvZiBNNCdzIG91dHB1dC4gIE90aGVyd2lzZSwgd2hlbiB3ZQorICAgICBjbG9zZSB0aGUgcGlwZSwgd2UgcmlzayBsZXR0aW5nIE00IHJlcG9ydCBhIGJyb2tlbi1waXBlIHRvIHRoZQorICAgICBCaXNvbiB1c2VyLiAgKi8KKyAgYXZlciAoZmVvZiAoaW4pKTsKICAgeGZjbG9zZSAoaW4pOwotICByZWFwX3N1YnBpcGUgKHBpZCwgbTQpOworICB3YWl0X3N1YnByb2Nlc3MgKHBpZCwgIm00IiwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlLCBOVUxMKTsKICAgdGltZXZhcl9wb3AgKFRWX000KTsKIH0KIAogc3RhdGljIHZvaWQKIHByZXBhcmUgKHZvaWQpCiB7CisgIC8qIEJJU09OX1VTRV9QVVNIX0ZPUl9QVUxMIGlzIGZvciB0aGUgdGVzdCBzdWl0ZSBhbmQgc2hvdWxkIG5vdCBiZSBkb2N1bWVudGVkCisgICAgIGZvciB0aGUgdXNlci4gICovCisgIGNoYXIgY29uc3QgKnVzZV9wdXNoX2Zvcl9wdWxsX2VudiA9IGdldGVudiAoIkJJU09OX1VTRV9QVVNIX0ZPUl9QVUxMIik7CisgIGJvb2wgdXNlX3B1c2hfZm9yX3B1bGxfZmxhZyA9IGZhbHNlOworICBpZiAodXNlX3B1c2hfZm9yX3B1bGxfZW52ICE9IE5VTEwKKyAgICAgICYmIHVzZV9wdXNoX2Zvcl9wdWxsX2VudlswXSAhPSAnXDAnCisgICAgICAmJiAwICE9IHN0cmNtcCAodXNlX3B1c2hfZm9yX3B1bGxfZW52LCAiMCIpKQorICAgIHVzZV9wdXNoX2Zvcl9wdWxsX2ZsYWcgPSB0cnVlOworCiAgIC8qIEZsYWdzLiAqLwotICBNVVNDTEVfSU5TRVJUX0JPT0wgKCJkZWJ1Z19mbGFnIiwgZGVidWdfZmxhZyk7CisgIE1VU0NMRV9JTlNFUlRfQk9PTCAoImRlYnVnX2ZsYWciLCBkZWJ1Zyk7CiAgIE1VU0NMRV9JTlNFUlRfQk9PTCAoImRlZmluZXNfZmxhZyIsIGRlZmluZXNfZmxhZyk7CiAgIE1VU0NMRV9JTlNFUlRfQk9PTCAoImVycm9yX3ZlcmJvc2VfZmxhZyIsIGVycm9yX3ZlcmJvc2UpOworICBNVVNDTEVfSU5TRVJUX0JPT0wgKCJnbHJfZmxhZyIsIGdscl9wYXJzZXIpOwogICBNVVNDTEVfSU5TRVJUX0JPT0wgKCJsb2NhdGlvbnNfZmxhZyIsIGxvY2F0aW9uc19mbGFnKTsKLSAgTVVTQ0xFX0lOU0VSVF9CT09MICgicHVyZV9mbGFnIiwgcHVyZV9wYXJzZXIpOworICBNVVNDTEVfSU5TRVJUX0JPT0wgKCJub25kZXRlcm1pbmlzdGljX2ZsYWciLCBub25kZXRlcm1pbmlzdGljX3BhcnNlcik7CiAgIE1VU0NMRV9JTlNFUlRfQk9PTCAoInN5bmNsaW5lc19mbGFnIiwgIW5vX2xpbmVzX2ZsYWcpOworICBNVVNDTEVfSU5TRVJUX0JPT0wgKCJ0YWdfc2Vlbl9mbGFnIiwgdGFnX3NlZW4pOworICBNVVNDTEVfSU5TRVJUX0JPT0wgKCJ0b2tlbl90YWJsZV9mbGFnIiwgdG9rZW5fdGFibGVfZmxhZyk7CisgIE1VU0NMRV9JTlNFUlRfQk9PTCAoInVzZV9wdXNoX2Zvcl9wdWxsX2ZsYWciLCB1c2VfcHVzaF9mb3JfcHVsbF9mbGFnKTsKKyAgTVVTQ0xFX0lOU0VSVF9CT09MICgieWFjY19mbGFnIiwgeWFjY19mbGFnKTsKIAogICAvKiBGaWxlIG5hbWVzLiAgKi8KLSAgTVVTQ0xFX0lOU0VSVF9TVFJJTkcgKCJwcmVmaXgiLCBzcGVjX25hbWVfcHJlZml4ID8gc3BlY19uYW1lX3ByZWZpeCA6ICJ5eSIpOworICBpZiAoc3BlY19uYW1lX3ByZWZpeCkKKyAgICBNVVNDTEVfSU5TRVJUX1NUUklORyAoInByZWZpeCIsIHNwZWNfbmFtZV9wcmVmaXgpOworCisgIE1VU0NMRV9JTlNFUlRfU1RSSU5HICgiZmlsZV9uYW1lX2FsbF9idXRfZXh0IiwgYWxsX2J1dF9leHQpOworCiAjZGVmaW5lIERFRklORShOYW1lKSBNVVNDTEVfSU5TRVJUX1NUUklORyAoI05hbWUsIE5hbWUgPyBOYW1lIDogIiIpCiAgIERFRklORSAoZGlyX3ByZWZpeCk7CiAgIERFRklORSAocGFyc2VyX2ZpbGVfbmFtZSk7CkBAIC02MDMsMjYgKzY1NSwxOCBAQAogICBERUZJTkUgKHNwZWNfdmVyYm9zZV9maWxlKTsKICN1bmRlZiBERUZJTkUKIAotICAvKiBVc2VyIENvZGUuICAqLwotICBvYnN0YWNrXzFncm93ICgmcHJlX3Byb2xvZ3VlX29ic3RhY2ssIDApOwotICBvYnN0YWNrXzFncm93ICgmcG9zdF9wcm9sb2d1ZV9vYnN0YWNrLCAwKTsKLSAgbXVzY2xlX2luc2VydCAoInByZV9wcm9sb2d1ZSIsIG9ic3RhY2tfZmluaXNoICgmcHJlX3Byb2xvZ3VlX29ic3RhY2spKTsKLSAgbXVzY2xlX2luc2VydCAoInBvc3RfcHJvbG9ndWUiLCBvYnN0YWNrX2ZpbmlzaCAoJnBvc3RfcHJvbG9ndWVfb2JzdGFjaykpOwotCi0gIC8qIEZpbmQgdGhlIHJpZ2h0IHNrZWxldG9uIGZpbGUuICAqLwotICBpZiAoIXNrZWxldG9uKQotICAgIHsKLSAgICAgIGlmIChnbHJfcGFyc2VyIHx8IG5vbmRldGVybWluaXN0aWNfcGFyc2VyKQotCXNrZWxldG9uID0gImdsci5jIjsKLSAgICAgIGVsc2UKLQlza2VsZXRvbiA9ICJ5YWNjLmMiOwotICAgIH0KLQotICAvKiBBYm91dCB0aGUgc2tlbGV0b25zLiAqLwotICB7Ci0gICAgY2hhciBjb25zdCAqcGtnZGF0YWRpciA9IGdldGVudiAoIkJJU09OX1BLR0RBVEFESVIiKTsKLSAgICBNVVNDTEVfSU5TRVJUX1NUUklORyAoInBrZ2RhdGFkaXIiLCBwa2dkYXRhZGlyID8gcGtnZGF0YWRpciA6IFBLR0RBVEFESVIpOworICAvKiBGaW5kIHRoZSByaWdodCBza2VsZXRvbiBmaWxlLCBhbmQgYWRkIG11c2NsZXMgYWJvdXQgdGhlIHNrZWxldG9ucy4gICovCisgIGlmIChza2VsZXRvbikKICAgICBNVVNDTEVfSU5TRVJUX0NfU1RSSU5HICgic2tlbGV0b24iLCBza2VsZXRvbik7CisgIGVsc2UKKyAgICBza2VsZXRvbiA9IGxhbmd1YWdlLT5za2VsZXRvbjsKKworICAvKiBBYm91dCB0aGUgc2tlbGV0b25zLiAgKi8KKyAgeworICAgIC8qIGI0X3BrZ2RhdGFkaXIgaXMgdXNlZCBpbnNpZGUgbTRfaW5jbHVkZSBpbiB0aGUgc2tlbGV0b25zLCBzbyBkaWdyYXBocworICAgICAgIHdvdWxkIG5ldmVyIGJlIGV4cGFuZGVkLiAgSG9wZWZ1bGx5IG5vIG9uZSBoYXMgTTQtc3BlY2lhbCBjaGFyYWN0ZXJzIGluCisgICAgICAgaGlzIEJpc29uIGluc3RhbGxhdGlvbiBwYXRoLiAgKi8KKyAgICBNVVNDTEVfSU5TRVJUX1NUUklOR19SQVcgKCJwa2dkYXRhZGlyIiwgY29tcHV0ZV9wa2dkYXRhZGlyICgpKTsKICAgfQogfQogCkBAIC02NDcsNiArNjkxLDExIEBACiAgIG91dHB1dF9za2VsZXRvbiAoKTsKIAogICBvYnN0YWNrX2ZyZWUgKCZmb3JtYXRfb2JzdGFjaywgTlVMTCk7Ci0gIG9ic3RhY2tfZnJlZSAoJnByZV9wcm9sb2d1ZV9vYnN0YWNrLCBOVUxMKTsKLSAgb2JzdGFja19mcmVlICgmcG9zdF9wcm9sb2d1ZV9vYnN0YWNrLCBOVUxMKTsKK30KKworY2hhciBjb25zdCAqCitjb21wdXRlX3BrZ2RhdGFkaXIgKHZvaWQpCit7CisgIGNoYXIgY29uc3QgKnBrZ2RhdGFkaXIgPSBnZXRlbnYgKCJCSVNPTl9QS0dEQVRBRElSIik7CisgIHJldHVybiBwa2dkYXRhZGlyID8gcGtnZGF0YWRpciA6IFBLR0RBVEFESVI7CiB9CmRpZmYgLS1naXQgYS9zcmMvb3V0cHV0LmggYi9zcmMvb3V0cHV0LmgKaW5kZXggNzg0ZjIyNy4uNmM0MjhkNSAxMDA2NDQKLS0tIGEvc3JjL291dHB1dC5oCisrKyBiL3NyYy9vdXRwdXQuaApAQCAtMSwyNyArMSwyOCBAQAogLyogT3V0cHV0IHRoZSBnZW5lcmF0ZWQgcGFyc2luZyBwcm9ncmFtIGZvciBiaXNvbiwKLSAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMsIDIwMDYtMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4KIAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCiAKLSAgIEJpc29uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLSAgIEJpc29uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIEJpc29uOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAgIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpZm5kZWYgT1VUUFVUX0hfCiAjIGRlZmluZSBPVVRQVVRfSF8KIAogLyogT3V0cHV0IHRoZSBwYXJzaW5nIHRhYmxlcyBhbmQgdGhlIHBhcnNlciBjb2RlIHRvIEZUQUJMRS4gICovCiB2b2lkIG91dHB1dCAodm9pZCk7CitjaGFyIGNvbnN0ICpjb21wdXRlX3BrZ2RhdGFkaXIgKHZvaWQpOwogCiAjZW5kaWYgLyogIU9VVFBVVF9IXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BhcnNlLWdyYW0uYyBiL3NyYy9wYXJzZS1ncmFtLmMKaW5kZXggMmI3N2YzZS4uNTYzM2I0ZSAxMDA2NDQKLS0tIGEvc3JjL3BhcnNlLWdyYW0uYworKysgYi9zcmMvcGFyc2UtZ3JhbS5jCkBAIC0xLDI0ICsxLDIxIEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi4yYS4gICovCisvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi42LjUuNjMtM2FkYS4gICovCiAKLS8qIFNrZWxldG9uIGltcGxlbWVudGF0aW9uIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKLQotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy8qIEJpc29uIGltcGxlbWVudGF0aW9uIGZvciBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCisgICAKKyAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCisgICAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCiAgICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawpAQCAtMjksNyArMjYsNyBAQAogICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCiAgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCi0KKyAgIAogICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgogICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLwogCkBAIC00Nyw3ICs0NCw3IEBACiAjZGVmaW5lIFlZQklTT04gMQogCiAvKiBCaXNvbiB2ZXJzaW9uLiAgKi8KLSNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjJhIgorI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuNi41LjYzLTNhZGEiCiAKIC8qIFNrZWxldG9uIG5hbWUuICAqLwogI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIKQEAgLTU1LDE0MyArNTIsMzcgQEAKIC8qIFB1cmUgcGFyc2Vycy4gICovCiAjZGVmaW5lIFlZUFVSRSAxCiAKLS8qIFVzaW5nIGxvY2F0aW9ucy4gICovCi0jZGVmaW5lIFlZTFNQX05FRURFRCAxCisvKiBQdXNoIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVU0ggMAogCisvKiBQdWxsIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVTEwgMQorCisvKiBTdWJzdGl0dXRlIHRoZSB0eXBlIG5hbWVzLiAgKi8KKyNkZWZpbmUgWVlTVFlQRSAgICAgICAgIEdSQU1fU1RZUEUKKyNkZWZpbmUgWVlMVFlQRSAgICAgICAgIEdSQU1fTFRZUEUKIC8qIFN1YnN0aXR1dGUgdGhlIHZhcmlhYmxlIGFuZCBmdW5jdGlvbiBuYW1lcy4gICovCi0jZGVmaW5lIHl5cGFyc2UgZ3JhbV9wYXJzZQotI2RlZmluZSB5eWxleCAgIGdyYW1fbGV4Ci0jZGVmaW5lIHl5ZXJyb3IgZ3JhbV9lcnJvcgotI2RlZmluZSB5eWx2YWwgIGdyYW1fbHZhbAotI2RlZmluZSB5eWNoYXIgIGdyYW1fY2hhcgotI2RlZmluZSB5eWRlYnVnIGdyYW1fZGVidWcKLSNkZWZpbmUgeXluZXJycyBncmFtX25lcnJzCi0jZGVmaW5lIHl5bGxvYyBncmFtX2xsb2MKLQotLyogVG9rZW5zLiAgKi8KLSNpZm5kZWYgWVlUT0tFTlRZUEUKLSMgZGVmaW5lIFlZVE9LRU5UWVBFCi0gICAvKiBQdXQgdGhlIHRva2VucyBpbnRvIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFuZCBvdGhlciBkZWJ1Z2dlcnMKLSAgICAgIGtub3cgYWJvdXQgdGhlbS4gICovCi0gICBlbnVtIHl5dG9rZW50eXBlIHsKLSAgICAgR1JBTV9FT0YgPSAwLAotICAgICBTVFJJTkcgPSAyNTgsCi0gICAgIElOVCA9IDI1OSwKLSAgICAgUEVSQ0VOVF9UT0tFTiA9IDI2MCwKLSAgICAgUEVSQ0VOVF9OVEVSTSA9IDI2MSwKLSAgICAgUEVSQ0VOVF9UWVBFID0gMjYyLAotICAgICBQRVJDRU5UX0RFU1RSVUNUT1IgPSAyNjMsCi0gICAgIFBFUkNFTlRfUFJJTlRFUiA9IDI2NCwKLSAgICAgUEVSQ0VOVF9VTklPTiA9IDI2NSwKLSAgICAgUEVSQ0VOVF9MRUZUID0gMjY2LAotICAgICBQRVJDRU5UX1JJR0hUID0gMjY3LAotICAgICBQRVJDRU5UX05PTkFTU09DID0gMjY4LAotICAgICBQRVJDRU5UX1BSRUMgPSAyNjksCi0gICAgIFBFUkNFTlRfRFBSRUMgPSAyNzAsCi0gICAgIFBFUkNFTlRfTUVSR0UgPSAyNzEsCi0gICAgIFBFUkNFTlRfREVCVUcgPSAyNzIsCi0gICAgIFBFUkNFTlRfREVGQVVMVF9QUkVDID0gMjczLAotICAgICBQRVJDRU5UX0RFRklORSA9IDI3NCwKLSAgICAgUEVSQ0VOVF9ERUZJTkVTID0gMjc1LAotICAgICBQRVJDRU5UX0VSUk9SX1ZFUkJPU0UgPSAyNzYsCi0gICAgIFBFUkNFTlRfRVhQRUNUID0gMjc3LAotICAgICBQRVJDRU5UX0VYUEVDVF9SUiA9IDI3OCwKLSAgICAgUEVSQ0VOVF9GSUxFX1BSRUZJWCA9IDI3OSwKLSAgICAgUEVSQ0VOVF9HTFJfUEFSU0VSID0gMjgwLAotICAgICBQRVJDRU5UX0lOSVRJQUxfQUNUSU9OID0gMjgxLAotICAgICBQRVJDRU5UX0xFWF9QQVJBTSA9IDI4MiwKLSAgICAgUEVSQ0VOVF9MT0NBVElPTlMgPSAyODMsCi0gICAgIFBFUkNFTlRfTkFNRV9QUkVGSVggPSAyODQsCi0gICAgIFBFUkNFTlRfTk9fREVGQVVMVF9QUkVDID0gMjg1LAotICAgICBQRVJDRU5UX05PX0xJTkVTID0gMjg2LAotICAgICBQRVJDRU5UX05PTkRFVEVSTUlOSVNUSUNfUEFSU0VSID0gMjg3LAotICAgICBQRVJDRU5UX09VVFBVVCA9IDI4OCwKLSAgICAgUEVSQ0VOVF9QQVJTRV9QQVJBTSA9IDI4OSwKLSAgICAgUEVSQ0VOVF9QVVJFX1BBUlNFUiA9IDI5MCwKLSAgICAgUEVSQ0VOVF9SRVFVSVJFID0gMjkxLAotICAgICBQRVJDRU5UX1NLRUxFVE9OID0gMjkyLAotICAgICBQRVJDRU5UX1NUQVJUID0gMjkzLAotICAgICBQRVJDRU5UX1RPS0VOX1RBQkxFID0gMjk0LAotICAgICBQRVJDRU5UX1ZFUkJPU0UgPSAyOTUsCi0gICAgIFBFUkNFTlRfWUFDQyA9IDI5NiwKLSAgICAgVFlQRSA9IDI5NywKLSAgICAgRVFVQUwgPSAyOTgsCi0gICAgIFNFTUlDT0xPTiA9IDI5OSwKLSAgICAgUElQRSA9IDMwMCwKLSAgICAgSUQgPSAzMDEsCi0gICAgIElEX0NPTE9OID0gMzAyLAotICAgICBQRVJDRU5UX1BFUkNFTlQgPSAzMDMsCi0gICAgIFBST0xPR1VFID0gMzA0LAotICAgICBFUElMT0dVRSA9IDMwNSwKLSAgICAgQlJBQ0VEX0NPREUgPSAzMDYKLSAgIH07Ci0jZW5kaWYKLS8qIFRva2Vucy4gICovCi0jZGVmaW5lIEdSQU1fRU9GIDAKLSNkZWZpbmUgU1RSSU5HIDI1OAotI2RlZmluZSBJTlQgMjU5Ci0jZGVmaW5lIFBFUkNFTlRfVE9LRU4gMjYwCi0jZGVmaW5lIFBFUkNFTlRfTlRFUk0gMjYxCi0jZGVmaW5lIFBFUkNFTlRfVFlQRSAyNjIKLSNkZWZpbmUgUEVSQ0VOVF9ERVNUUlVDVE9SIDI2MwotI2RlZmluZSBQRVJDRU5UX1BSSU5URVIgMjY0Ci0jZGVmaW5lIFBFUkNFTlRfVU5JT04gMjY1Ci0jZGVmaW5lIFBFUkNFTlRfTEVGVCAyNjYKLSNkZWZpbmUgUEVSQ0VOVF9SSUdIVCAyNjcKLSNkZWZpbmUgUEVSQ0VOVF9OT05BU1NPQyAyNjgKLSNkZWZpbmUgUEVSQ0VOVF9QUkVDIDI2OQotI2RlZmluZSBQRVJDRU5UX0RQUkVDIDI3MAotI2RlZmluZSBQRVJDRU5UX01FUkdFIDI3MQotI2RlZmluZSBQRVJDRU5UX0RFQlVHIDI3MgotI2RlZmluZSBQRVJDRU5UX0RFRkFVTFRfUFJFQyAyNzMKLSNkZWZpbmUgUEVSQ0VOVF9ERUZJTkUgMjc0Ci0jZGVmaW5lIFBFUkNFTlRfREVGSU5FUyAyNzUKLSNkZWZpbmUgUEVSQ0VOVF9FUlJPUl9WRVJCT1NFIDI3NgotI2RlZmluZSBQRVJDRU5UX0VYUEVDVCAyNzcKLSNkZWZpbmUgUEVSQ0VOVF9FWFBFQ1RfUlIgMjc4Ci0jZGVmaW5lIFBFUkNFTlRfRklMRV9QUkVGSVggMjc5Ci0jZGVmaW5lIFBFUkNFTlRfR0xSX1BBUlNFUiAyODAKLSNkZWZpbmUgUEVSQ0VOVF9JTklUSUFMX0FDVElPTiAyODEKLSNkZWZpbmUgUEVSQ0VOVF9MRVhfUEFSQU0gMjgyCi0jZGVmaW5lIFBFUkNFTlRfTE9DQVRJT05TIDI4MwotI2RlZmluZSBQRVJDRU5UX05BTUVfUFJFRklYIDI4NAotI2RlZmluZSBQRVJDRU5UX05PX0RFRkFVTFRfUFJFQyAyODUKLSNkZWZpbmUgUEVSQ0VOVF9OT19MSU5FUyAyODYKLSNkZWZpbmUgUEVSQ0VOVF9OT05ERVRFUk1JTklTVElDX1BBUlNFUiAyODcKLSNkZWZpbmUgUEVSQ0VOVF9PVVRQVVQgMjg4Ci0jZGVmaW5lIFBFUkNFTlRfUEFSU0VfUEFSQU0gMjg5Ci0jZGVmaW5lIFBFUkNFTlRfUFVSRV9QQVJTRVIgMjkwCi0jZGVmaW5lIFBFUkNFTlRfUkVRVUlSRSAyOTEKLSNkZWZpbmUgUEVSQ0VOVF9TS0VMRVRPTiAyOTIKLSNkZWZpbmUgUEVSQ0VOVF9TVEFSVCAyOTMKLSNkZWZpbmUgUEVSQ0VOVF9UT0tFTl9UQUJMRSAyOTQKLSNkZWZpbmUgUEVSQ0VOVF9WRVJCT1NFIDI5NQotI2RlZmluZSBQRVJDRU5UX1lBQ0MgMjk2Ci0jZGVmaW5lIFRZUEUgMjk3Ci0jZGVmaW5lIEVRVUFMIDI5OAotI2RlZmluZSBTRU1JQ09MT04gMjk5Ci0jZGVmaW5lIFBJUEUgMzAwCi0jZGVmaW5lIElEIDMwMQotI2RlZmluZSBJRF9DT0xPTiAzMDIKLSNkZWZpbmUgUEVSQ0VOVF9QRVJDRU5UIDMwMwotI2RlZmluZSBQUk9MT0dVRSAzMDQKLSNkZWZpbmUgRVBJTE9HVUUgMzA1Ci0jZGVmaW5lIEJSQUNFRF9DT0RFIDMwNgotCi0KLQorI2RlZmluZSB5eXBhcnNlICAgICAgICAgZ3JhbV9wYXJzZQorI2RlZmluZSB5eWxleCAgICAgICAgICAgZ3JhbV9sZXgKKyNkZWZpbmUgeXllcnJvciAgICAgICAgIGdyYW1fZXJyb3IKKyNkZWZpbmUgeXlsdmFsICAgICAgICAgIGdyYW1fbHZhbAorI2RlZmluZSB5eWNoYXIgICAgICAgICAgZ3JhbV9jaGFyCisjZGVmaW5lIHl5ZGVidWcgICAgICAgICBncmFtX2RlYnVnCisjZGVmaW5lIHl5bmVycnMgICAgICAgICBncmFtX25lcnJzCisjZGVmaW5lIHl5bGxvYyAgICAgICAgICBncmFtX2xsb2MKIAogLyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCisvKiBMaW5lIDM2MCBvZiB5YWNjLmMgICovCiAjbGluZSAxICJwYXJzZS1ncmFtLnkiCiAvKiBCaXNvbiBHcmFtbWFyIFBhcnNlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEMgLSotCiAKLSAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KIAotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKQEAgLTIwMCwyNCArOTEsMjUgQEAKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICAgMDIxMTAtMTMwMSAgVVNBCi0qLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjaW5jbHVkZSAic3lzdGVtLmgiCiAKKyNpbmNsdWRlICJjLWN0eXBlLmgiCiAjaW5jbHVkZSAiY29tcGxhaW4uaCIKICNpbmNsdWRlICJjb25mbGljdHMuaCIKICNpbmNsdWRlICJmaWxlcy5oIgogI2luY2x1ZGUgImdldGFyZ3MuaCIKICNpbmNsdWRlICJncmFtLmgiCi0jaW5jbHVkZSAibXVzY2xlX3RhYi5oIgorI2luY2x1ZGUgIm11c2NsZS10YWIuaCIKKyNpbmNsdWRlICJuYW1lZC1yZWYuaCIKICNpbmNsdWRlICJxdW90ZWFyZy5oIgogI2luY2x1ZGUgInJlYWRlci5oIgogI2luY2x1ZGUgInN5bWxpc3QuaCIKLSNpbmNsdWRlICJzdHJ2ZXJzY21wLmgiCisjaW5jbHVkZSAic2Nhbi1ncmFtLmgiCisjaW5jbHVkZSAic2Nhbi1jb2RlLmgiCisjaW5jbHVkZSAieG1lbWR1cDAuaCIKIAogI2RlZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pICAoQ3VycmVudCkgPSBsbG9jX2RlZmF1bHQgKFJocywgTikKIHN0YXRpYyBZWUxUWVBFIGxsb2NfZGVmYXVsdCAoWVlMVFlQRSBjb25zdCAqLCBpbnQpOwpAQCAtMjM0LDMyICsxMjYsNTggQEAKIAlncmFtX2Vycm9yICgmeXlsbG9jLCBNc2cpCiBzdGF0aWMgdm9pZCBncmFtX2Vycm9yIChsb2NhdGlvbiBjb25zdCAqLCBjaGFyIGNvbnN0ICopOwogCi1zdGF0aWMgdm9pZCBhZGRfcGFyYW0gKGNoYXIgY29uc3QgKiwgY2hhciAqLCBsb2NhdGlvbik7CitzdGF0aWMgY2hhciBjb25zdCAqY2hhcl9uYW1lIChjaGFyKTsKKworLyoqIEFkZCBhIGxleC1wYXJhbSBvciBhIHBhcnNlLXBhcmFtLgorICoKKyAqIFxwYXJhbSB0eXBlICBcYSBsZXhfcGFyYW0gb3IgXGEgcGFyc2VfcGFyYW0KKyAqIFxwYXJhbSBkZWNsICB0aGUgZm9ybWFsIGFyZ3VtZW50CisgKiBccGFyYW0gbG9jICAgdGhlIGxvY2F0aW9uIGluIHRoZSBzb3VyY2UuCisgKi8KK3N0YXRpYyB2b2lkIGFkZF9wYXJhbSAoY2hhciBjb25zdCAqdHlwZSwgY2hhciAqZGVjbCwgbG9jYXRpb24gbG9jKTsKKwogCiBzdGF0aWMgc3ltYm9sX2NsYXNzIGN1cnJlbnRfY2xhc3MgPSB1bmtub3duX3N5bTsKLXN0YXRpYyB1bmlxc3RyIGN1cnJlbnRfdHlwZSA9IDA7Ci1zdGF0aWMgc3ltYm9sICpjdXJyZW50X2xoczsKK3N0YXRpYyB1bmlxc3RyIGN1cnJlbnRfdHlwZSA9IE5VTEw7CitzdGF0aWMgc3ltYm9sICpjdXJyZW50X2xoc19zeW1ib2w7CiBzdGF0aWMgbG9jYXRpb24gY3VycmVudF9saHNfbG9jYXRpb247CitzdGF0aWMgbmFtZWRfcmVmICpjdXJyZW50X2xoc19uYW1lZF9yZWY7CiBzdGF0aWMgaW50IGN1cnJlbnRfcHJlYyA9IDA7CiAKLSNpZmRlZiBVSU5UX0ZBU1Q4X01BWAotIyBkZWZpbmUgWVlUWVBFX1VJTlQ4IHVpbnRfZmFzdDhfdAotI2VuZGlmCi0jaWZkZWYgSU5UX0ZBU1Q4X01BWAotIyBkZWZpbmUgWVlUWVBFX0lOVDggaW50X2Zhc3Q4X3QKLSNlbmRpZgotI2lmZGVmIFVJTlRfRkFTVDE2X01BWAotIyBkZWZpbmUgWVlUWVBFX1VJTlQxNiB1aW50X2Zhc3QxNl90Ci0jZW5kaWYKLSNpZmRlZiBJTlRfRkFTVDE2X01BWAotIyBkZWZpbmUgWVlUWVBFX0lOVDE2IGludF9mYXN0MTZfdAotI2VuZGlmCisvKiogU2V0IHRoZSBuZXcgY3VycmVudCBsZWZ0LWhhbmQgc2lkZSBzeW1ib2wsIHBvc3NpYmx5IGNvbW1vbgorICogdG8gc2V2ZXJhbCByaWdodC1oYW5kIHNpZGUgcGFydHMgb2YgcnVsZS4KKyAqLworc3RhdGljCit2b2lkCitjdXJyZW50X2xocyhzeW1ib2wgKnN5bSwgbG9jYXRpb24gbG9jLCBuYW1lZF9yZWYgKnJlZikKK3sKKyAgY3VycmVudF9saHNfc3ltYm9sID0gc3ltOworICBjdXJyZW50X2xoc19sb2NhdGlvbiA9IGxvYzsKKyAgLyogSW4gb3JkZXIgdG8gc2ltcGxpZnkgbWVtb3J5IG1hbmFnZW1lbnQsIG5hbWVkIHJlZmVyZW5jZXMgZm9yIGxocworICAgICBhcmUgYWx3YXlzIGFzc2lnbmVkIGJ5IGRlZXAgY29weSBpbnRvIHRoZSBjdXJyZW50IHN5bWJvbF9saXN0CisgICAgIG5vZGUuICBUaGlzIGlzIGJlY2F1c2UgYSBzaW5nbGUgbmFtZWQtcmVmIGluIHRoZSBncmFtbWFyIG1heQorICAgICByZXN1bHQgaW4gc2V2ZXJhbCB1c2VzIHdoZW4gdGhlIHVzZXIgZmFjdG9ycyBsaHMgYmV0d2VlbiBzZXZlcmFsCisgICAgIHJ1bGVzIHVzaW5nICJ8Ii4gIFRoZXJlZm9yZSBmcmVlIHRoZSBwYXJzZXIncyBvcmlnaW5hbCBjb3B5LiAgKi8KKyAgZnJlZSAoY3VycmVudF9saHNfbmFtZWRfcmVmKTsKKyAgY3VycmVudF9saHNfbmFtZWRfcmVmID0gcmVmOworfQogCiAKLS8qIEVuYWJsaW5nIHRyYWNlcy4gICovCi0jaWZuZGVmIFlZREVCVUcKLSMgZGVmaW5lIFlZREVCVUcgMQotI2VuZGlmCisjZGVmaW5lIFlZVFlQRV9JTlQxNiBpbnRfZmFzdDE2X3QKKyNkZWZpbmUgWVlUWVBFX0lOVDggaW50X2Zhc3Q4X3QKKyNkZWZpbmUgWVlUWVBFX1VJTlQxNiB1aW50X2Zhc3QxNl90CisjZGVmaW5lIFlZVFlQRV9VSU5UOCB1aW50X2Zhc3Q4X3QKKworLyogTGluZSAzNjAgb2YgeWFjYy5jICAqLworI2xpbmUgMTczICJwYXJzZS1ncmFtLmMiCisKKyMgaWZuZGVmIFlZX05VTEwKKyMgIGlmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgMjAxMTAzTCA8PSBfX2NwbHVzcGx1cworIyAgIGRlZmluZSBZWV9OVUxMIG51bGxwdHIKKyMgIGVsc2UKKyMgICBkZWZpbmUgWVlfTlVMTCAwCisjICBlbmRpZgorIyBlbmRpZgogCiAvKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KICNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKQEAgLTI2OSw0OSArMTg3LDIwOSBAQAogIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKICNlbmRpZgogCi0vKiBFbmFibGluZyB0aGUgdG9rZW4gdGFibGUuICAqLwotI2lmbmRlZiBZWVRPS0VOX1RBQkxFCi0jIGRlZmluZSBZWVRPS0VOX1RBQkxFIDAKKy8qIEluIGEgZnV0dXJlIHJlbGVhc2Ugb2YgQmlzb24sIHRoaXMgc2VjdGlvbiB3aWxsIGJlIHJlcGxhY2VkCisgICBieSAjaW5jbHVkZSAicGFyc2UtZ3JhbS5oIi4gICovCisjaWZuZGVmIFlZX0dSQU1fWV9UQUJfSF9JTkNMVURFRAorIyBkZWZpbmUgWVlfR1JBTV9ZX1RBQl9IX0lOQ0xVREVECisvKiBFbmFibGluZyB0cmFjZXMuICAqLworI2lmbmRlZiBHUkFNX0RFQlVHCisjIGlmIGRlZmluZWQgWVlERUJVRworIyAgaWYgWVlERUJVRworIyAgIGRlZmluZSBHUkFNX0RFQlVHIDEKKyMgIGVsc2UKKyMgICBkZWZpbmUgR1JBTV9ERUJVRyAwCisjICBlbmRpZgorIyBlbHNlIC8qICEgZGVmaW5lZCBZWURFQlVHICovCisjICBkZWZpbmUgR1JBTV9ERUJVRyAxCisjIGVuZGlmIC8qICEgZGVmaW5lZCBZWURFQlVHICovCisjZW5kaWYgIC8qICEgZGVmaW5lZCBHUkFNX0RFQlVHICovCisjaWYgR1JBTV9ERUJVRworZXh0ZXJuIGludCBncmFtX2RlYnVnOwogI2VuZGlmCiAKLSNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAotdHlwZWRlZiB1bmlvbiBZWVNUWVBFCi0jbGluZSA5NCAicGFyc2UtZ3JhbS55IgorLyogVG9rZW5zLiAgKi8KKyNpZm5kZWYgR1JBTV9UT0tFTlRZUEUKKyMgZGVmaW5lIEdSQU1fVE9LRU5UWVBFCisgICAvKiBQdXQgdGhlIHRva2VucyBpbnRvIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFuZCBvdGhlciBkZWJ1Z2dlcnMKKyAgICAgIGtub3cgYWJvdXQgdGhlbS4gICovCisgICBlbnVtIGdyYW1fdG9rZW50eXBlIHsKKyAgICAgR1JBTV9FT0YgPSAwLAorICAgICBTVFJJTkcgPSAyNTgsCisgICAgIElOVCA9IDI1OSwKKyAgICAgUEVSQ0VOVF9UT0tFTiA9IDI2MCwKKyAgICAgUEVSQ0VOVF9OVEVSTSA9IDI2MSwKKyAgICAgUEVSQ0VOVF9UWVBFID0gMjYyLAorICAgICBQRVJDRU5UX0RFU1RSVUNUT1IgPSAyNjMsCisgICAgIFBFUkNFTlRfUFJJTlRFUiA9IDI2NCwKKyAgICAgUEVSQ0VOVF9MRUZUID0gMjY1LAorICAgICBQRVJDRU5UX1JJR0hUID0gMjY2LAorICAgICBQRVJDRU5UX05PTkFTU09DID0gMjY3LAorICAgICBQRVJDRU5UX1BSRUMgPSAyNjgsCisgICAgIFBFUkNFTlRfRFBSRUMgPSAyNjksCisgICAgIFBFUkNFTlRfTUVSR0UgPSAyNzAsCisgICAgIFBFUkNFTlRfQ09ERSA9IDI3MSwKKyAgICAgUEVSQ0VOVF9ERUJVRyA9IDI3MiwKKyAgICAgUEVSQ0VOVF9ERUZBVUxUX1BSRUMgPSAyNzMsCisgICAgIFBFUkNFTlRfREVGSU5FID0gMjc0LAorICAgICBQRVJDRU5UX0RFRklORVMgPSAyNzUsCisgICAgIFBFUkNFTlRfRVJST1JfVkVSQk9TRSA9IDI3NiwKKyAgICAgUEVSQ0VOVF9FWFBFQ1QgPSAyNzcsCisgICAgIFBFUkNFTlRfRVhQRUNUX1JSID0gMjc4LAorICAgICBQRVJDRU5UX0ZJTEVfUFJFRklYID0gMjc5LAorICAgICBQRVJDRU5UX0dMUl9QQVJTRVIgPSAyODAsCisgICAgIFBFUkNFTlRfSU5JVElBTF9BQ1RJT04gPSAyODEsCisgICAgIFBFUkNFTlRfTEFOR1VBR0UgPSAyODIsCisgICAgIFBFUkNFTlRfTEVYX1BBUkFNID0gMjgzLAorICAgICBQRVJDRU5UX0xPQ0FUSU9OUyA9IDI4NCwKKyAgICAgUEVSQ0VOVF9OQU1FX1BSRUZJWCA9IDI4NSwKKyAgICAgUEVSQ0VOVF9OT19ERUZBVUxUX1BSRUMgPSAyODYsCisgICAgIFBFUkNFTlRfTk9fTElORVMgPSAyODcsCisgICAgIFBFUkNFTlRfTk9OREVURVJNSU5JU1RJQ19QQVJTRVIgPSAyODgsCisgICAgIFBFUkNFTlRfT1VUUFVUID0gMjg5LAorICAgICBQRVJDRU5UX1BBUlNFX1BBUkFNID0gMjkwLAorICAgICBQRVJDRU5UX1BVUkVfUEFSU0VSID0gMjkxLAorICAgICBQRVJDRU5UX1JFUVVJUkUgPSAyOTIsCisgICAgIFBFUkNFTlRfU0tFTEVUT04gPSAyOTMsCisgICAgIFBFUkNFTlRfU1RBUlQgPSAyOTQsCisgICAgIFBFUkNFTlRfVE9LRU5fVEFCTEUgPSAyOTUsCisgICAgIFBFUkNFTlRfVkVSQk9TRSA9IDI5NiwKKyAgICAgUEVSQ0VOVF9ZQUNDID0gMjk3LAorICAgICBCUkFDRURfQ09ERSA9IDI5OCwKKyAgICAgQlJBQ0tFVEVEX0lEID0gMjk5LAorICAgICBDSEFSID0gMzAwLAorICAgICBFUElMT0dVRSA9IDMwMSwKKyAgICAgRVFVQUwgPSAzMDIsCisgICAgIElEID0gMzAzLAorICAgICBJRF9DT0xPTiA9IDMwNCwKKyAgICAgUEVSQ0VOVF9QRVJDRU5UID0gMzA1LAorICAgICBQSVBFID0gMzA2LAorICAgICBQUk9MT0dVRSA9IDMwNywKKyAgICAgU0VNSUNPTE9OID0gMzA4LAorICAgICBUWVBFID0gMzA5LAorICAgICBUWVBFX1RBR19BTlkgPSAzMTAsCisgICAgIFRZUEVfVEFHX05PTkUgPSAzMTEsCisgICAgIFBFUkNFTlRfVU5JT04gPSAzMTIKKyAgIH07CisjZW5kaWYKKy8qIFRva2Vucy4gICovCisjZGVmaW5lIEdSQU1fRU9GIDAKKyNkZWZpbmUgU1RSSU5HIDI1OAorI2RlZmluZSBJTlQgMjU5CisjZGVmaW5lIFBFUkNFTlRfVE9LRU4gMjYwCisjZGVmaW5lIFBFUkNFTlRfTlRFUk0gMjYxCisjZGVmaW5lIFBFUkNFTlRfVFlQRSAyNjIKKyNkZWZpbmUgUEVSQ0VOVF9ERVNUUlVDVE9SIDI2MworI2RlZmluZSBQRVJDRU5UX1BSSU5URVIgMjY0CisjZGVmaW5lIFBFUkNFTlRfTEVGVCAyNjUKKyNkZWZpbmUgUEVSQ0VOVF9SSUdIVCAyNjYKKyNkZWZpbmUgUEVSQ0VOVF9OT05BU1NPQyAyNjcKKyNkZWZpbmUgUEVSQ0VOVF9QUkVDIDI2OAorI2RlZmluZSBQRVJDRU5UX0RQUkVDIDI2OQorI2RlZmluZSBQRVJDRU5UX01FUkdFIDI3MAorI2RlZmluZSBQRVJDRU5UX0NPREUgMjcxCisjZGVmaW5lIFBFUkNFTlRfREVCVUcgMjcyCisjZGVmaW5lIFBFUkNFTlRfREVGQVVMVF9QUkVDIDI3MworI2RlZmluZSBQRVJDRU5UX0RFRklORSAyNzQKKyNkZWZpbmUgUEVSQ0VOVF9ERUZJTkVTIDI3NQorI2RlZmluZSBQRVJDRU5UX0VSUk9SX1ZFUkJPU0UgMjc2CisjZGVmaW5lIFBFUkNFTlRfRVhQRUNUIDI3NworI2RlZmluZSBQRVJDRU5UX0VYUEVDVF9SUiAyNzgKKyNkZWZpbmUgUEVSQ0VOVF9GSUxFX1BSRUZJWCAyNzkKKyNkZWZpbmUgUEVSQ0VOVF9HTFJfUEFSU0VSIDI4MAorI2RlZmluZSBQRVJDRU5UX0lOSVRJQUxfQUNUSU9OIDI4MQorI2RlZmluZSBQRVJDRU5UX0xBTkdVQUdFIDI4MgorI2RlZmluZSBQRVJDRU5UX0xFWF9QQVJBTSAyODMKKyNkZWZpbmUgUEVSQ0VOVF9MT0NBVElPTlMgMjg0CisjZGVmaW5lIFBFUkNFTlRfTkFNRV9QUkVGSVggMjg1CisjZGVmaW5lIFBFUkNFTlRfTk9fREVGQVVMVF9QUkVDIDI4NgorI2RlZmluZSBQRVJDRU5UX05PX0xJTkVTIDI4NworI2RlZmluZSBQRVJDRU5UX05PTkRFVEVSTUlOSVNUSUNfUEFSU0VSIDI4OAorI2RlZmluZSBQRVJDRU5UX09VVFBVVCAyODkKKyNkZWZpbmUgUEVSQ0VOVF9QQVJTRV9QQVJBTSAyOTAKKyNkZWZpbmUgUEVSQ0VOVF9QVVJFX1BBUlNFUiAyOTEKKyNkZWZpbmUgUEVSQ0VOVF9SRVFVSVJFIDI5MgorI2RlZmluZSBQRVJDRU5UX1NLRUxFVE9OIDI5MworI2RlZmluZSBQRVJDRU5UX1NUQVJUIDI5NAorI2RlZmluZSBQRVJDRU5UX1RPS0VOX1RBQkxFIDI5NQorI2RlZmluZSBQRVJDRU5UX1ZFUkJPU0UgMjk2CisjZGVmaW5lIFBFUkNFTlRfWUFDQyAyOTcKKyNkZWZpbmUgQlJBQ0VEX0NPREUgMjk4CisjZGVmaW5lIEJSQUNLRVRFRF9JRCAyOTkKKyNkZWZpbmUgQ0hBUiAzMDAKKyNkZWZpbmUgRVBJTE9HVUUgMzAxCisjZGVmaW5lIEVRVUFMIDMwMgorI2RlZmluZSBJRCAzMDMKKyNkZWZpbmUgSURfQ09MT04gMzA0CisjZGVmaW5lIFBFUkNFTlRfUEVSQ0VOVCAzMDUKKyNkZWZpbmUgUElQRSAzMDYKKyNkZWZpbmUgUFJPTE9HVUUgMzA3CisjZGVmaW5lIFNFTUlDT0xPTiAzMDgKKyNkZWZpbmUgVFlQRSAzMDkKKyNkZWZpbmUgVFlQRV9UQUdfQU5ZIDMxMAorI2RlZmluZSBUWVBFX1RBR19OT05FIDMxMQorI2RlZmluZSBQRVJDRU5UX1VOSU9OIDMxMgorCisKKworI2lmICEgZGVmaW5lZCBHUkFNX1NUWVBFICYmICEgZGVmaW5lZCBHUkFNX1NUWVBFX0lTX0RFQ0xBUkVECit0eXBlZGVmIHVuaW9uIEdSQU1fU1RZUEUKIHsKKy8qIExpbmUgMzc2IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDExNSAicGFyc2UtZ3JhbS55IgorCiAgIHN5bWJvbCAqc3ltYm9sOwogICBzeW1ib2xfbGlzdCAqbGlzdDsKICAgaW50IGludGVnZXI7Ci0gIGNoYXIgKmNoYXJzOworICBjaGFyIGNvbnN0ICpjaGFyczsKKyAgY2hhciAqY29kZTsKICAgYXNzb2MgYXNzb2M7CiAgIHVuaXFzdHIgdW5pcXN0cjsKLX0KLS8qIExpbmUgMTkzIG9mIHlhY2MuYy4gICovCi0jbGluZSAyOTAgInBhcnNlLWdyYW0uYyIKLQlZWVNUWVBFOwotIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwotIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCi0jIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorICB1bnNpZ25lZCBjaGFyIGNoYXJhY3RlcjsKKyAgbmFtZWRfcmVmICpuYW1lZF9yZWY7CisKKworLyogTGluZSAzNzYgb2YgeWFjYy5jICAqLworI2xpbmUgMzUzICJwYXJzZS1ncmFtLmMiCit9IEdSQU1fU1RZUEU7CisjIGRlZmluZSBHUkFNX1NUWVBFX0lTX1RSSVZJQUwgMQorIyBkZWZpbmUgZ3JhbV9zdHlwZSBHUkFNX1NUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLworIyBkZWZpbmUgR1JBTV9TVFlQRV9JU19ERUNMQVJFRCAxCiAjZW5kaWYKIAotI2lmICEgZGVmaW5lZCBZWUxUWVBFICYmICEgZGVmaW5lZCBZWUxUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHN0cnVjdCBZWUxUWVBFCisjaWYgISBkZWZpbmVkIEdSQU1fTFRZUEUgJiYgISBkZWZpbmVkIEdSQU1fTFRZUEVfSVNfREVDTEFSRUQKK3R5cGVkZWYgc3RydWN0IEdSQU1fTFRZUEUKIHsKICAgaW50IGZpcnN0X2xpbmU7CiAgIGludCBmaXJzdF9jb2x1bW47CiAgIGludCBsYXN0X2xpbmU7CiAgIGludCBsYXN0X2NvbHVtbjsKLX0gWVlMVFlQRTsKLSMgZGVmaW5lIHl5bHR5cGUgWVlMVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KLSMgZGVmaW5lIFlZTFRZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlMVFlQRV9JU19UUklWSUFMIDEKK30gR1JBTV9MVFlQRTsKKyMgZGVmaW5lIGdyYW1fbHR5cGUgR1JBTV9MVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KKyMgZGVmaW5lIEdSQU1fTFRZUEVfSVNfREVDTEFSRUQgMQorIyBkZWZpbmUgR1JBTV9MVFlQRV9JU19UUklWSUFMIDEKICNlbmRpZgogCiAKKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCitpbnQgZ3JhbV9wYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7CisjZWxzZQoraW50IGdyYW1fcGFyc2UgKCk7CisjZW5kaWYKKyNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLworI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworaW50IGdyYW1fcGFyc2UgKHZvaWQpOworI2Vsc2UKK2ludCBncmFtX3BhcnNlICgpOworI2VuZGlmCisjZW5kaWYgLyogISBZWVBBUlNFX1BBUkFNICovCisKKyNlbmRpZiAvKiAhWVlfR1JBTV9ZX1RBQl9IX0lOQ0xVREVEICAqLworCiAvKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCiAKLQotLyogTGluZSAyMTYgb2YgeWFjYy5jLiAgKi8KLSNsaW5lIDMxNSAicGFyc2UtZ3JhbS5jIgorLyogTGluZSAzNzkgb2YgeWFjYy5jICAqLworI2xpbmUgMzkzICJwYXJzZS1ncmFtLmMiCiAKICNpZmRlZiBzaG9ydAogIyB1bmRlZiBzaG9ydApAQCAtMzYxLDcwICs0MzksNDYgQEAKICNkZWZpbmUgWVlTSVpFX01BWElNVU0gKChZWVNJWkVfVCkgLTEpCiAKICNpZm5kZWYgWVlfCi0jIGlmIFlZRU5BQkxFX05MUworIyBpZiBkZWZpbmVkIFlZRU5BQkxFX05MUyAmJiBZWUVOQUJMRV9OTFMKICMgIGlmIEVOQUJMRV9OTFMKICMgICBpbmNsdWRlIDxsaWJpbnRsLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBkZWZpbmUgWVlfKG1zZ2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRpbWUiLCBtc2dpZCkKKyMgICBkZWZpbmUgWVlfKE1zZ2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRpbWUiLCBNc2dpZCkKICMgIGVuZGlmCiAjIGVuZGlmCiAjIGlmbmRlZiBZWV8KLSMgIGRlZmluZSBZWV8obXNnaWQpIG1zZ2lkCisjICBkZWZpbmUgWVlfKE1zZ2lkKSBNc2dpZAogIyBlbmRpZgogI2VuZGlmCiAKIC8qIFN1cHByZXNzIHVudXNlZC12YXJpYWJsZSB3YXJuaW5ncyBieSAidXNpbmciIEUuICAqLwogI2lmICEgZGVmaW5lZCBsaW50IHx8IGRlZmluZWQgX19HTlVDX18KLSMgZGVmaW5lIFlZVVNFKGUpICgodm9pZCkgKGUpKQorIyBkZWZpbmUgWVlVU0UoRSkgKCh2b2lkKSAoRSkpCiAjZWxzZQotIyBkZWZpbmUgWVlVU0UoZSkgLyogZW1wdHkgKi8KKyMgZGVmaW5lIFlZVVNFKEUpIC8qIGVtcHR5ICovCiAjZW5kaWYKIAogLyogSWRlbnRpdHkgZnVuY3Rpb24sIHVzZWQgdG8gc3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgY29uc3RhbnQgY29uZGl0aW9ucy4gICovCiAjaWZuZGVmIGxpbnQKLSMgZGVmaW5lIFlZSUQobikgKG4pCisjIGRlZmluZSBZWUlEKE4pIChOKQogI2Vsc2UKICNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAogICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCiBzdGF0aWMgaW50Ci1ZWUlEIChpbnQgaSkKK1lZSUQgKGludCB5eWkpCiAjZWxzZQogc3RhdGljIGludAotWVlJRCAoaSkKLSAgICBpbnQgaTsKK1lZSUQgKHl5aSkKKyAgICBpbnQgeXlpOwogI2VuZGlmCiB7Ci0gIHJldHVybiBpOworICByZXR1cm4geXlpOwogfQogI2VuZGlmCiAKLSNpZiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UKKyNpZiAxCiAKIC8qIFRoZSBwYXJzZXIgaW52b2tlcyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5lY2Vzc2FyeSBzeW1ib2xzLiAgKi8KIAotIyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKLSMgIGlmIFlZU1RBQ0tfVVNFX0FMTE9DQQotIyAgIGlmZGVmIF9fR05VQ19fCi0jICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYnVpbHRpbl9hbGxvY2EKLSMgICBlbGlmIGRlZmluZWQgX19CVUlMVElOX1ZBX0FSR19JTkNSCi0jICAgIGluY2x1ZGUgPGFsbG9jYS5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgZWxpZiBkZWZpbmVkIF9BSVgKLSMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19hbGxvY2EKLSMgICBlbGlmIGRlZmluZWQgX01TQ19WRVIKLSMgICAgaW5jbHVkZSA8bWFsbG9jLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCi0jICAgZWxzZQotIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKLSMgICAgaWYgISBkZWZpbmVkIF9BTExPQ0FfSCAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLSMgICAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgICBpZm5kZWYgX1NURExJQl9ICi0jICAgICAgZGVmaW5lIF9TVERMSUJfSCAxCi0jICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgIGVuZGlmCi0jICBlbmRpZgotIyBlbmRpZgotCiAjIGlmZGVmIFlZU1RBQ0tfQUxMT0MKICAgIC8qIFBhY2lmeSBHQ0MncyBgZW1wdHkgaWYtYm9keScgd2FybmluZy4gICovCiAjICBkZWZpbmUgWVlTVEFDS19GUkVFKFB0cikgZG8geyAvKiBlbXB0eSAqLzsgfSB3aGlsZSAoWVlJRCAoMCkpCkBAIC00NDEsNDMgKzQ5NSw0NCBAQAogIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQogIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gWVlTSVpFX01BWElNVU0KICMgIGVuZGlmCi0jICBpZiAoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiAhIGRlZmluZWQgX1NURExJQl9IIFwKKyMgIGlmIChkZWZpbmVkIF9fY3BsdXNwbHVzICYmICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MgXAogICAgICAgICYmICEgKChkZWZpbmVkIFlZTUFMTE9DIHx8IGRlZmluZWQgbWFsbG9jKSBcCiAJICAgICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwgZGVmaW5lZCBmcmVlKSkpCiAjICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBpZm5kZWYgX1NURExJQl9ICi0jICAgIGRlZmluZSBfU1RETElCX0ggMQorIyAgIGlmbmRlZiBFWElUX1NVQ0NFU1MKKyMgICAgZGVmaW5lIEVYSVRfU1VDQ0VTUyAwCiAjICAgZW5kaWYKICMgIGVuZGlmCiAjICBpZm5kZWYgWVlNQUxMT0MKICMgICBkZWZpbmUgWVlNQUxMT0MgbWFsbG9jCi0jICAgaWYgISBkZWZpbmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisjICAgaWYgISBkZWZpbmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCiAgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHZvaWQgKm1hbGxvYyAoWVlTSVpFX1QpOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCiAjICAgZW5kaWYKICMgIGVuZGlmCiAjICBpZm5kZWYgWVlGUkVFCiAjICAgZGVmaW5lIFlZRlJFRSBmcmVlCi0jICAgaWYgISBkZWZpbmVkIGZyZWUgJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorIyAgIGlmICEgZGVmaW5lZCBmcmVlICYmICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKICAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQogdm9pZCBmcmVlICh2b2lkICopOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCiAjICAgZW5kaWYKICMgIGVuZGlmCiAjIGVuZGlmCi0jZW5kaWYgLyogISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFICovCisjIGRlZmluZSBZWUNPUFlfTkVFREVEIDEKKyNlbmRpZgogCiAKICNpZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAogICAgICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKLQkgfHwgKGRlZmluZWQgWVlMVFlQRV9JU19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTCBcCi0JICAgICAmJiBkZWZpbmVkIFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKKwkgfHwgKGRlZmluZWQgR1JBTV9MVFlQRV9JU19UUklWSUFMICYmIEdSQU1fTFRZUEVfSVNfVFJJVklBTCBcCisJICAgICAmJiBkZWZpbmVkIEdSQU1fU1RZUEVfSVNfVFJJVklBTCAmJiBHUkFNX1NUWVBFX0lTX1RSSVZJQUwpKSkKIAogLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCiB1bmlvbiB5eWFsbG9jCiB7Ci0gIHl5dHlwZV9pbnQxNiB5eXNzOwotICBZWVNUWVBFIHl5dnM7Ci0gICAgWVlMVFlQRSB5eWxzOworICB5eXR5cGVfaW50MTYgeXlzc19hbGxvYzsKKyAgWVlTVFlQRSB5eXZzX2FsbG9jOworICBZWUxUWVBFIHl5bHNfYWxsb2M7CiB9OwogCiAvKiBUaGUgc2l6ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBhbmQgdGhlIG5leHQuICAqLwpAQCAtNDg5LDM1ICs1NDQsMTkgQEAKICAgICAgKChOKSAqIChzaXplb2YgKHl5dHlwZV9pbnQxNikgKyBzaXplb2YgKFlZU1RZUEUpICsgc2l6ZW9mIChZWUxUWVBFKSkgXAogICAgICAgKyAyICogWVlTVEFDS19HQVBfTUFYSU1VTSkKIAotLyogQ29weSBDT1VOVCBvYmplY3RzIGZyb20gRlJPTSB0byBUTy4gIFRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRvCi0gICBub3Qgb3ZlcmxhcC4gICovCi0jIGlmbmRlZiBZWUNPUFkKLSMgIGlmIGRlZmluZWQgX19HTlVDX18gJiYgMSA8IF9fR05VQ19fCi0jICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpIFwKLSAgICAgIF9fYnVpbHRpbl9tZW1jcHkgKFRvLCBGcm9tLCAoQ291bnQpICogc2l6ZW9mICgqKEZyb20pKSkKLSMgIGVsc2UKLSMgICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkJCVwKLSAgICAgIGRvCQkJCQlcCi0JewkJCQkJXAotCSAgWVlTSVpFX1QgeXlpOwkJCQlcCi0JICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5aSsrKQlcCi0JICAgIChUbylbeXlpXSA9IChGcm9tKVt5eWldOwkJXAotCX0JCQkJCVwKLSAgICAgIHdoaWxlIChZWUlEICgwKSkKLSMgIGVuZGlmCi0jIGVuZGlmCisjIGRlZmluZSBZWUNPUFlfTkVFREVEIDEKIAogLyogUmVsb2NhdGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxvY2F0aW9uIHRvIHRoZSBuZXcgb25lLiAgVGhlCiAgICBsb2NhbCB2YXJpYWJsZXMgWVlTSVpFIGFuZCBZWVNUQUNLU0laRSBnaXZlIHRoZSBvbGQgYW5kIG5ldyBudW1iZXIgb2YKICAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCiAgICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAogICAgc3RhY2suICAqLwotIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFjaykJCQkJCVwKKyMgZGVmaW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2tfYWxsb2MsIFN0YWNrKQkJCQlcCiAgICAgZG8JCQkJCQkJCQlcCiAgICAgICB7CQkJCQkJCQkJXAogCVlZU0laRV9UIHl5bmV3Ynl0ZXM7CQkJCQkJXAotCVlZQ09QWSAoJnl5cHRyLT5TdGFjaywgU3RhY2ssIHl5c2l6ZSk7CQkJCVwKLQlTdGFjayA9ICZ5eXB0ci0+U3RhY2s7CQkJCQkJXAorCVlZQ09QWSAoJnl5cHRyLT5TdGFja19hbGxvYywgU3RhY2ssIHl5c2l6ZSk7CQkJXAorCVN0YWNrID0gJnl5cHRyLT5TdGFja19hbGxvYzsJCQkJCVwKIAl5eW5ld2J5dGVzID0geXlzdGFja3NpemUgKiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCiAJeXlwdHIgKz0geXluZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsJCQkJXAogICAgICAgfQkJCQkJCQkJCVwKQEAgLTUyNSwyMyArNTY0LDQzIEBACiAKICNlbmRpZgogCisjaWYgZGVmaW5lZCBZWUNPUFlfTkVFREVEICYmIFlZQ09QWV9ORUVERUQKKy8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIFNSQyB0byBEU1QuICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbworICAgbm90IG92ZXJsYXAuICAqLworIyBpZm5kZWYgWVlDT1BZCisjICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEgPCBfX0dOVUNfXworIyAgIGRlZmluZSBZWUNPUFkoRHN0LCBTcmMsIENvdW50KSBcCisgICAgICBfX2J1aWx0aW5fbWVtY3B5IChEc3QsIFNyYywgKENvdW50KSAqIHNpemVvZiAoKihTcmMpKSkKKyMgIGVsc2UKKyMgICBkZWZpbmUgWVlDT1BZKERzdCwgU3JjLCBDb3VudCkgICAgICAgICAgICAgIFwKKyAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBZWVNJWkVfVCB5eWk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5aSsrKSAgIFwKKyAgICAgICAgICAgIChEc3QpW3l5aV0gPSAoU3JjKVt5eWldOyAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHdoaWxlIChZWUlEICgwKSkKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYgLyogIVlZQ09QWV9ORUVERUQgKi8KKwogLyogWVlGSU5BTCAtLSBTdGF0ZSBudW1iZXIgb2YgdGhlIHRlcm1pbmF0aW9uIHN0YXRlLiAgKi8KICNkZWZpbmUgWVlGSU5BTCAgMwogLyogWVlMQVNUIC0tIExhc3QgaW5kZXggaW4gWVlUQUJMRS4gICovCi0jZGVmaW5lIFlZTEFTVCAgIDE2MQorI2RlZmluZSBZWUxBU1QgICAxNjAKIAogLyogWVlOVE9LRU5TIC0tIE51bWJlciBvZiB0ZXJtaW5hbHMuICAqLwotI2RlZmluZSBZWU5UT0tFTlMgIDUyCisjZGVmaW5lIFlZTlRPS0VOUyAgNTgKIC8qIFlZTk5UUyAtLSBOdW1iZXIgb2Ygbm9udGVybWluYWxzLiAgKi8KLSNkZWZpbmUgWVlOTlRTICAyNgorI2RlZmluZSBZWU5OVFMgIDM0CiAvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVsZXMuICAqLwotI2RlZmluZSBZWU5SVUxFUyAgODIKKyNkZWZpbmUgWVlOUlVMRVMgIDEwOAogLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCi0jZGVmaW5lIFlZTlNUQVRFUyAgMTExCisjZGVmaW5lIFlZTlNUQVRFUyAgMTQ4CiAKIC8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLwogI2RlZmluZSBZWVVOREVGVE9LICAyCi0jZGVmaW5lIFlZTUFYVVRPSyAgIDMwNgorI2RlZmluZSBZWU1BWFVUT0sgICAzMTIKIAogI2RlZmluZSBZWVRSQU5TTEFURShZWVgpCQkJCQkJXAogICAoKHVuc2lnbmVkIGludCkgKFlZWCkgPD0gWVlNQVhVVE9LID8geXl0cmFuc2xhdGVbWVlYXSA6IFlZVU5ERUZUT0spCkBAIC01NzksOTAgKzYzOCwxMDUgQEAKICAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LAogICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsCiAgICAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwKLSAgICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxCisgICAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwKKyAgICAgIDU1LCAgICA1NiwgICAgNTcKIH07CiAKLSNpZiBZWURFQlVHCisjaWYgR1JBTV9ERUJVRwogLyogWVlQUkhTW1lZTl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0IFJIUyBzeW1ib2wgb2YgcnVsZSBudW1iZXIgWVlOIGluCiAgICBZWVJIUy4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cHJoc1tdID0KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cHJoc1tdID0KIHsKLSAgICAgICAwLCAgICAgMCwgICAgIDMsICAgICA4LCAgICAgOSwgICAgMTIsICAgIDE0LCAgICAxNiwgICAgMTgsICAgIDIxLAotICAgICAgMjUsICAgIDI3LCAgICAyOSwgICAgMzIsICAgIDM1LCAgICAzOSwgICAgNDEsICAgIDQzLCAgICA0NSwgICAgNDcsCi0gICAgICA1MSwgICAgNTMsICAgIDU1LCAgICA1OSwgICAgNjEsICAgIDYzLCAgICA2NiwgICAgNjksICAgIDcxLCAgICA3MywKLSAgICAgIDc1LCAgICA3NywgICAgNzksICAgIDgxLCAgICA4NCwgICAgODYsICAgIDg5LCAgICA5MiwgICAgOTQsICAgIDk2LAotICAgICAgOTcsICAgMTAxLCAgIDEwMiwgICAxMDYsICAgMTEwLCAgIDExNCwgICAxMTYsICAgMTE4LCAgIDEyMCwgICAxMjEsCi0gICAgIDEyMywgICAxMjUsICAgMTI4LCAgIDEzMCwgICAxMzIsICAgMTM1LCAgIDEzOCwgICAxNDIsICAgMTQ0LCAgIDE0NywKLSAgICAgMTQ5LCAgIDE1MiwgICAxNTQsICAgMTU3LCAgIDE2MCwgICAxNjEsICAgMTY1LCAgIDE2NywgICAxNzEsICAgMTc0LAotICAgICAxNzUsICAgMTc4LCAgIDE4MSwgICAxODUsICAgMTg5LCAgIDE5MywgICAxOTUsICAgMTk3LCAgIDE5OCwgICAyMDEsCi0gICAgIDIwMywgICAyMDUsICAgMjA2CisgICAgICAgMCwgICAgIDAsICAgICAzLCAgICAgOCwgICAgIDksICAgIDEyLCAgICAxNCwgICAgMTYsICAgIDE4LCAgICAyMiwKKyAgICAgIDI0LCAgICAyNywgICAgMjksICAgIDMyLCAgICAzNSwgICAgMzgsICAgIDQyLCAgICA0NCwgICAgNDcsICAgIDUwLAorICAgICAgNTMsICAgIDU1LCAgICA1OCwgICAgNjIsICAgIDY0LCAgICA2NiwgICAgNjksICAgIDczLCAgICA3NiwgICAgNzgsCisgICAgICA4MSwgICAgODQsICAgIDg2LCAgICA4OCwgICAgOTAsICAgIDkyLCAgICA5NCwgICAgOTYsICAgIDk5LCAgIDEwMywKKyAgICAgMTA3LCAgIDEwOSwgICAxMTEsICAgMTE0LCAgIDExOCwgICAxMTksICAgMTIxLCAgIDEyNSwgICAxMjYsICAgMTMwLAorICAgICAxMzEsICAgMTM1LCAgIDEzOSwgICAxNDMsICAgMTQ1LCAgIDE0NywgICAxNDksICAgMTUwLCAgIDE1MiwgICAxNTQsCisgICAgIDE1NywgICAxNTksICAgMTYyLCAgIDE2NCwgICAxNjcsICAgMTY5LCAgIDE3MiwgICAxNzQsICAgMTc2LCAgIDE3OCwKKyAgICAgMTgwLCAgIDE4MiwgICAxODQsICAgMTg3LCAgIDE5MCwgICAxOTQsICAgMTk2LCAgIDE5OSwgICAyMDEsICAgMjA0LAorICAgICAyMDYsICAgMjA5LCAgIDIxMiwgICAyMTMsICAgMjE4LCAgIDIyMCwgICAyMjQsICAgMjI3LCAgIDIyOCwgICAyMzIsCisgICAgIDIzNiwgICAyNDAsICAgMjQ0LCAgIDI0OCwgICAyNDksICAgMjUxLCAgIDI1MywgICAyNTUsICAgMjU2LCAgIDI1OCwKKyAgICAgMjYwLCAgIDI2MiwgICAyNjQsICAgMjY2LCAgIDI2OCwgICAyNzAsICAgMjcyLCAgIDI3NCwgICAyNzUKIH07CiAKIC8qIFlZUkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlyaHNbXSA9CiB7Ci0gICAgICA1MywgICAgIDAsICAgIC0xLCAgICA1NCwgICAgNDgsICAgIDY2LCAgICA3NywgICAgLTEsICAgIC0xLCAgICA1NCwKLSAgICAgIDU1LCAgICAtMSwgICAgNTYsICAgIC0xLCAgICA0OSwgICAgLTEsICAgIDE3LCAgICAtMSwgICAgMTksICAgIDc2LAotICAgICAgLTEsICAgIDE5LCAgICA3NiwgICAgNzYsICAgIC0xLCAgICAyMCwgICAgLTEsICAgIDIxLCAgICAtMSwgICAgMjIsCi0gICAgICAgNCwgICAgLTEsICAgIDIzLCAgICAgNCwgICAgLTEsICAgIDI0LCAgICA0MywgICAgNzYsICAgIC0xLCAgICAyNSwKLSAgICAgIC0xLCAgICAyNiwgICAgLTEsICAgIDI3LCAgICAtMSwgICAgMjgsICAgIC0xLCAgICAyOSwgICAgNDMsICAgIDc2LAotICAgICAgLTEsICAgIDMxLCAgICAtMSwgICAgMzIsICAgIC0xLCAgICAzMywgICAgNDMsICAgIDc2LCAgICAtMSwgICAgMzQsCi0gICAgICAtMSwgICAgMzUsICAgIC0xLCAgICAzNiwgICAgNzYsICAgIC0xLCAgICAzNywgICAgNzYsICAgIC0xLCAgICAzOSwKLSAgICAgIC0xLCAgICA0MCwgICAgLTEsICAgIDQxLCAgICAtMSwgICAgNDQsICAgIC0xLCAgICA2MCwgICAgLTEsICAgIDU3LAotICAgICAgLTEsICAgIDM4LCAgICA3MiwgICAgLTEsICAgIDEwLCAgICAtMSwgICAgIDgsICAgIDYzLCAgICAtMSwgICAgIDksCi0gICAgICA2MywgICAgLTEsICAgIDE4LCAgICAtMSwgICAgMzAsICAgIC0xLCAgICAtMSwgICAgIDYsICAgIDU4LCAgICA2NSwKLSAgICAgIC0xLCAgICAtMSwgICAgIDUsICAgIDU5LCAgICA2NSwgICAgLTEsICAgICA3LCAgICA0MiwgICAgNjMsICAgIC0xLAotICAgICAgNjEsICAgIDYyLCAgICA2MywgICAgLTEsICAgIDExLCAgICAtMSwgICAgMTIsICAgIC0xLCAgICAxMywgICAgLTEsCi0gICAgICAtMSwgICAgNDIsICAgIC0xLCAgICA3MiwgICAgLTEsICAgIDYzLCAgICA3MiwgICAgLTEsICAgIDQyLCAgICAtMSwKLSAgICAgIDQ2LCAgICAtMSwgICAgNDYsICAgICA0LCAgICAtMSwgICAgNDYsICAgIDc1LCAgICAtMSwgICAgNDYsICAgICA0LAotICAgICAgNzUsICAgIC0xLCAgICA2NCwgICAgLTEsICAgIDY1LCAgICA2NCwgICAgLTEsICAgIDY3LCAgICAtMSwgICAgNjYsCi0gICAgICA2NywgICAgLTEsICAgIDY4LCAgICAtMSwgICAgNTYsICAgIDQ0LCAgICAtMSwgICAgIDEsICAgIDQ0LCAgICAtMSwKLSAgICAgIC0xLCAgICA0NywgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICA3MCwgICAgNDUsICAgIDcxLAotICAgICAgLTEsICAgIDcwLCAgICA0NCwgICAgLTEsICAgIC0xLCAgICA3MSwgICAgNzIsICAgIC0xLCAgICA3MSwgICAgNzMsCi0gICAgICAtMSwgICAgNzEsICAgIDE0LCAgICA3MiwgICAgLTEsICAgIDcxLCAgICAxNSwgICAgIDQsICAgIC0xLCAgICA3MSwKLSAgICAgIDE2LCAgICA0MiwgICAgLTEsICAgIDQ2LCAgICAtMSwgICAgNzUsICAgIC0xLCAgICAtMSwgICAgNzQsICAgIDUxLAotICAgICAgLTEsICAgICAzLCAgICAtMSwgICAgIDMsICAgIC0xLCAgICAtMSwgICAgNDgsICAgIDUwLCAgICAtMQorICAgICAgNTksICAgICAwLCAgICAtMSwgICAgNjAsICAgIDUwLCAgICA3NywgICAgOTEsICAgIC0xLCAgICAtMSwgICAgNjAsCisgICAgICA2MSwgICAgLTEsICAgIDYyLCAgICAtMSwgICAgNTIsICAgIC0xLCAgICAxNywgICAgLTEsICAgIDE5LCAgICA4NCwKKyAgICAgIDg1LCAgICAtMSwgICAgMjAsICAgIC0xLCAgICAyMCwgICAgIDMsICAgIC0xLCAgICAyMSwgICAgLTEsICAgIDIyLAorICAgICAgIDQsICAgIC0xLCAgICAyMywgICAgIDQsICAgIC0xLCAgICAyNCwgICAgIDMsICAgIC0xLCAgICAyNCwgICAgNDcsCisgICAgICAgMywgICAgLTEsICAgIDI1LCAgICAtMSwgICAgMjYsICAgIDQzLCAgICAtMSwgICAgMjcsICAgICAzLCAgICAtMSwKKyAgICAgIDI4LCAgICA0MywgICAgLTEsICAgIDI5LCAgICAtMSwgICAgMzAsICAgICAzLCAgICAtMSwgICAgMzAsICAgIDQ3LAorICAgICAgIDMsICAgIC0xLCAgICAzMiwgICAgLTEsICAgIDMzLCAgICAtMSwgICAgMzQsICAgICAzLCAgICAtMSwgICAgMzQsCisgICAgICA0NywgICAgIDMsICAgIC0xLCAgICAzNSwgICAgNDMsICAgIC0xLCAgICAzNiwgICAgLTEsICAgIDM3LCAgICAgMywKKyAgICAgIC0xLCAgICAzOCwgICAgIDMsICAgIC0xLCAgICA0MCwgICAgLTEsICAgIDQxLCAgICAtMSwgICAgNDIsICAgIC0xLAorICAgICAgNTMsICAgIC0xLCAgICA2NywgICAgLTEsICAgIDY0LCAgICAtMSwgICAgMzksICAgIDg5LCAgICAtMSwgICAgIDgsCisgICAgICA0MywgICAgNzMsICAgIC0xLCAgICAgOSwgICAgNDMsICAgIDczLCAgICAtMSwgICAgMTgsICAgIC0xLCAgICAzMSwKKyAgICAgIC0xLCAgICAxNiwgICAgODYsICAgIC0xLCAgICAxNiwgICAgNDgsICAgIDg2LCAgICAtMSwgICAgLTEsICAgIDQ4LAorICAgICAgLTEsICAgIDU3LCAgICA2MywgICAgODYsICAgIC0xLCAgICAtMSwgICAgIDYsICAgIDY1LCAgICA3NiwgICAgLTEsCisgICAgICAtMSwgICAgIDUsICAgIDY2LCAgICA3NiwgICAgLTEsICAgICA3LCAgICA1NCwgICAgNzIsICAgIC0xLCAgICA2OCwKKyAgICAgIDY5LCAgICA3MCwgICAgLTEsICAgIDEwLCAgICAtMSwgICAgMTEsICAgIC0xLCAgICAxMiwgICAgLTEsICAgIC0xLAorICAgICAgNTQsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIDcwLCAgICA3MSwgICAgLTEsICAgIDg5LCAgICAtMSwgICAgODksCisgICAgICAgNCwgICAgLTEsICAgIDg5LCAgICAtMSwgICAgNzIsICAgIDg5LCAgICAtMSwgICAgNzQsICAgIC0xLCAgICA3MywKKyAgICAgIDc0LCAgICAtMSwgICAgODksICAgIC0xLCAgICA1NCwgICAgLTEsICAgIDU1LCAgICAtMSwgICAgNTYsICAgIC0xLAorICAgICAgNTQsICAgIC0xLCAgICA4NywgICAgLTEsICAgIDg3LCAgICAgNCwgICAgLTEsICAgIDg3LCAgICA5MCwgICAgLTEsCisgICAgICA4NywgICAgIDQsICAgIDkwLCAgICAtMSwgICAgNzUsICAgIC0xLCAgICA3NiwgICAgNzUsICAgIC0xLCAgICA3OCwKKyAgICAgIC0xLCAgICA3NywgICAgNzgsICAgIC0xLCAgICA3OSwgICAgLTEsICAgIDYyLCAgICA1MywgICAgLTEsICAgICAxLAorICAgICAgNTMsICAgIC0xLCAgICAtMSwgICAgODgsICAgIDgzLCAgICA4MCwgICAgODEsICAgIC0xLCAgICA4MiwgICAgLTEsCisgICAgICA4MSwgICAgNTEsICAgIDgyLCAgICAtMSwgICAgODEsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIDgyLCAgICA4OSwKKyAgICAgIDgzLCAgICAtMSwgICAgODIsICAgIDQzLCAgICA4MywgICAgLTEsICAgIDgyLCAgICAxMywgICAgODksICAgIC0xLAorICAgICAgODIsICAgIDE0LCAgICAgNCwgICAgLTEsICAgIDgyLCAgICAxNSwgICAgNTQsICAgIC0xLCAgICAtMSwgICAgNDQsCisgICAgICAtMSwgICAgNDgsICAgIC0xLCAgICAgMywgICAgLTEsICAgIC0xLCAgICA0OCwgICAgLTEsICAgICAzLCAgICAtMSwKKyAgICAgIDQzLCAgICAtMSwgICAgNDgsICAgIC0xLCAgICA0NSwgICAgLTEsICAgIDQ5LCAgICAtMSwgICAgODcsICAgIC0xLAorICAgICAgOTAsICAgIC0xLCAgICAgMywgICAgLTEsICAgIC0xLCAgICA1MCwgICAgNDYsICAgIC0xCiB9OwogCiAvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cmxpbmVbXSA9CiB7Ci0gICAgICAgMCwgICAyMDIsICAgMjAyLCAgIDIxMCwgICAyMTIsICAgMjE2LCAgIDIxNywgICAyMTgsICAgMjE5LCAgIDIyNCwKLSAgICAgMjI1LCAgIDIyNiwgICAyMjcsICAgMjI4LCAgIDIyOSwgICAyMzAsICAgMjM1LCAgIDIzOSwgICAyNDAsICAgMjQxLAotICAgICAyNDIsICAgMjQzLCAgIDI0NCwgICAyNDUsICAgMjQ2LCAgIDI0NywgICAyNDgsICAgMjQ5LCAgIDI1MCwgICAyNTEsCi0gICAgIDI1MiwgICAyNTYsICAgMjU3LCAgIDI1OCwgICAyNjIsICAgMjc4LCAgIDI4NSwgICAyOTIsICAgMjk2LCAgIDMwMywKLSAgICAgMzAzLCAgIDMwOCwgICAzMDgsICAgMzEzLCAgIDMyMywgICAzMzgsICAgMzM5LCAgIDM0MCwgICAzNDQsICAgMzQ1LAotICAgICAzNTEsICAgMzUyLCAgIDM1NywgICAzNjEsICAgMzY2LCAgIDM3MiwgICAzNzgsICAgMzg5LCAgIDM5MCwgICAzOTksCi0gICAgIDQwMCwgICA0MDYsICAgNDA3LCAgIDQwOCwgICA0MTUsICAgNDE1LCAgIDQxOSwgICA0MjAsICAgNDIxLCAgIDQyNiwKLSAgICAgNDI3LCAgIDQyOSwgICA0MzAsICAgNDMyLCAgIDQzNCwgICA0MzksICAgNDQwLCAgIDQ1NiwgICA0NTYsICAgNDYyLAotICAgICA0NzEsICAgNDc2LCAgIDQ3OAorICAgICAgIDAsICAgMjMwLCAgIDIzMCwgICAyMzgsICAgMjQwLCAgIDI0NCwgICAyNDUsICAgMjU1LCAgIDI1NiwgICAyNjEsCisgICAgIDI2MiwgICAyNjcsICAgMjY4LCAgIDI2OSwgICAyNzAsICAgMjcxLCAgIDI3MiwgICAyNzcsICAgMjg2LCAgIDI4NywKKyAgICAgMjg4LCAgIDI4OSwgICAyOTAsICAgMjkxLCAgIDI5MiwgICAyOTMsICAgMjk0LCAgIDI5NSwgICAyOTYsICAgMzExLAorICAgICAzMTIsICAgMzM2LCAgIDMzNywgICAzMzgsICAgMzM5LCAgIDM0MywgICAzNDQsICAgMzQ1LCAgIDM0OSwgICAzNjEsCisgICAgIDM3MywgICAzNzcsICAgMzgxLCAgIDM4OCwgICA0MDMsICAgNDA0LCAgIDQwOCwgICA0MjAsICAgNDIwLCAgIDQyNSwKKyAgICAgNDI1LCAgIDQzMCwgICA0NDEsICAgNDU2LCAgIDQ1NywgICA0NTgsICAgNDYyLCAgIDQ2MywgICA0NjgsICAgNDcwLAorICAgICA0NzUsICAgNDc2LCAgIDQ4MSwgICA0ODMsICAgNDg4LCAgIDQ4OSwgICA0OTMsICAgNDk0LCAgIDQ5NSwgICA0OTYsCisgICAgIDUwMSwgICA1MDYsICAgNTExLCAgIDUxNywgICA1MjMsICAgNTM0LCAgIDUzNSwgICA1NDQsICAgNTQ1LCAgIDU1MSwKKyAgICAgNTUyLCAgIDU1MywgICA1NjAsICAgNTYwLCAgIDU2OCwgICA1NjksICAgNTcwLCAgIDU3NSwgICA1NzcsICAgNTc5LAorICAgICA1ODEsICAgNTgzLCAgIDU4NSwgICA1OTAsICAgNTkyLCAgIDYwMywgICA2MDQsICAgNjA5LCAgIDYxMCwgICA2MTEsCisgICAgIDYyMCwgICA2NDAsICAgNjQyLCAgIDY1MSwgICA2NTYsICAgNjU3LCAgIDY2MiwgICA2NjksICAgNjcxCiB9OwogI2VuZGlmCiAKLSNpZiBZWURFQlVHIHx8IFlZRVJST1JfVkVSQk9TRSB8fCBZWVRPS0VOX1RBQkxFCisjaWYgR1JBTV9ERUJVRyB8fCBZWUVSUk9SX1ZFUkJPU0UgfHwgMQogLyogWVlUTkFNRVtTWU1CT0wtTlVNXSAtLSBTdHJpbmcgbmFtZSBvZiB0aGUgc3ltYm9sIFNZTUJPTC1OVU0uCiAgICBGaXJzdCwgdGhlIHRlcm1pbmFscywgdGhlbiwgc3RhcnRpbmcgYXQgWVlOVE9LRU5TLCBub250ZXJtaW5hbHMuICAqLwogc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5dG5hbWVbXSA9CiB7CiAgICJcImVuZCBvZiBmaWxlXCIiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJcInN0cmluZ1wiIiwgIlwiaW50ZWdlclwiIiwKLSAgIlwiJXRva2VuXCIiLCAiXCIlbnRlcm1cIiIsICJcIiV0eXBlXCIiLCAiXCIlZGVzdHJ1Y3RvciB7Li4ufVwiIiwKLSAgIlwiJXByaW50ZXIgey4uLn1cIiIsICJcIiV1bmlvbiB7Li4ufVwiIiwgIlwiJWxlZnRcIiIsICJcIiVyaWdodFwiIiwKLSAgIlwiJW5vbmFzc29jXCIiLCAiXCIlcHJlY1wiIiwgIlwiJWRwcmVjXCIiLCAiXCIlbWVyZ2VcIiIsICJcIiVkZWJ1Z1wiIiwKKyAgIlwiJXRva2VuXCIiLCAiXCIlbnRlcm1cIiIsICJcIiV0eXBlXCIiLCAiXCIlZGVzdHJ1Y3RvclwiIiwKKyAgIlwiJXByaW50ZXJcIiIsICJcIiVsZWZ0XCIiLCAiXCIlcmlnaHRcIiIsICJcIiVub25hc3NvY1wiIiwgIlwiJXByZWNcIiIsCisgICJcIiVkcHJlY1wiIiwgIlwiJW1lcmdlXCIiLCAiXCIlY29kZVwiIiwgIlwiJWRlYnVnXCIiLAogICAiXCIlZGVmYXVsdC1wcmVjXCIiLCAiXCIlZGVmaW5lXCIiLCAiXCIlZGVmaW5lc1wiIiwgIlwiJWVycm9yLXZlcmJvc2VcIiIsCiAgICJcIiVleHBlY3RcIiIsICJcIiVleHBlY3QtcnJcIiIsICJcIiVmaWxlLXByZWZpeFwiIiwgIlwiJWdsci1wYXJzZXJcIiIsCi0gICJcIiVpbml0aWFsLWFjdGlvbiB7Li4ufVwiIiwgIlwiJWxleC1wYXJhbSB7Li4ufVwiIiwgIlwiJWxvY2F0aW9uc1wiIiwKLSAgIlwiJW5hbWUtcHJlZml4XCIiLCAiXCIlbm8tZGVmYXVsdC1wcmVjXCIiLCAiXCIlbm8tbGluZXNcIiIsCi0gICJcIiVub25kZXRlcm1pbmlzdGljLXBhcnNlclwiIiwgIlwiJW91dHB1dFwiIiwgIlwiJXBhcnNlLXBhcmFtIHsuLi59XCIiLAotICAiXCIlcHVyZS1wYXJzZXJcIiIsICJcIiVyZXF1aXJlXCIiLCAiXCIlc2tlbGV0b25cIiIsICJcIiVzdGFydFwiIiwKLSAgIlwiJXRva2VuLXRhYmxlXCIiLCAiXCIldmVyYm9zZVwiIiwgIlwiJXlhY2NcIiIsICJcInR5cGVcIiIsICJcIj1cIiIsCi0gICJcIjtcIiIsICJcInxcIiIsICJcImlkZW50aWZpZXJcIiIsICJcImlkZW50aWZpZXI6XCIiLCAiXCIlJVwiIiwKLSAgIlwiJXsuLi4lfVwiIiwgIlwiZXBpbG9ndWVcIiIsICJcInsuLi59XCIiLCAiJGFjY2VwdCIsICJpbnB1dCIsCi0gICJkZWNsYXJhdGlvbnMiLCAiZGVjbGFyYXRpb24iLCAiZ3JhbW1hcl9kZWNsYXJhdGlvbiIsCi0gICJzeW1ib2xfZGVjbGFyYXRpb24iLCAiQDEiLCAiQDIiLCAicHJlY2VkZW5jZV9kZWNsYXJhdGlvbiIsCi0gICJwcmVjZWRlbmNlX2RlY2xhcmF0b3IiLCAidHlwZS5vcHQiLCAic3ltYm9scy4xIiwgInN5bWJvbF9kZWYiLAotICAic3ltYm9sX2RlZnMuMSIsICJncmFtbWFyIiwgInJ1bGVzX29yX2dyYW1tYXJfZGVjbGFyYXRpb24iLCAicnVsZXMiLAotICAiQDMiLCAicmhzZXMuMSIsICJyaHMiLCAic3ltYm9sIiwgImFjdGlvbiIsICJANCIsICJzdHJpbmdfYXNfaWQiLAotICAic3RyaW5nX2NvbnRlbnQiLCAiZXBpbG9ndWUub3B0IiwgMAorICAiXCIlaW5pdGlhbC1hY3Rpb25cIiIsICJcIiVsYW5ndWFnZVwiIiwgIlwiJWxleC1wYXJhbVwiIiwKKyAgIlwiJWxvY2F0aW9uc1wiIiwgIlwiJW5hbWUtcHJlZml4XCIiLCAiXCIlbm8tZGVmYXVsdC1wcmVjXCIiLAorICAiXCIlbm8tbGluZXNcIiIsICJcIiVub25kZXRlcm1pbmlzdGljLXBhcnNlclwiIiwgIlwiJW91dHB1dFwiIiwKKyAgIlwiJXBhcnNlLXBhcmFtXCIiLCAiXCIlcHVyZS1wYXJzZXJcIiIsICJcIiVyZXF1aXJlXCIiLCAiXCIlc2tlbGV0b25cIiIsCisgICJcIiVzdGFydFwiIiwgIlwiJXRva2VuLXRhYmxlXCIiLCAiXCIldmVyYm9zZVwiIiwgIlwiJXlhY2NcIiIsCisgICJcInsuLi59XCIiLCAiXCJbaWRlbnRpZmllcl1cIiIsICJcImNoYXJcIiIsICJcImVwaWxvZ3VlXCIiLCAiXCI9XCIiLAorICAiXCJpZGVudGlmaWVyXCIiLCAiXCJpZGVudGlmaWVyOlwiIiwgIlwiJSVcIiIsICJcInxcIiIsICJcIiV7Li4uJX1cIiIsCisgICJcIjtcIiIsICJcInR5cGVcIiIsICJcIjwqPlwiIiwgIlwiPD5cIiIsICJcIiV1bmlvblwiIiwgIiRhY2NlcHQiLAorICAiaW5wdXQiLCAicHJvbG9ndWVfZGVjbGFyYXRpb25zIiwgInByb2xvZ3VlX2RlY2xhcmF0aW9uIiwKKyAgImdyYW1tYXJfZGVjbGFyYXRpb24iLCAidW5pb25fbmFtZSIsICJzeW1ib2xfZGVjbGFyYXRpb24iLCAiJEAxIiwgIiRAMiIsCisgICJwcmVjZWRlbmNlX2RlY2xhcmF0aW9uIiwgInByZWNlZGVuY2VfZGVjbGFyYXRvciIsICJ0eXBlLm9wdCIsCisgICJzeW1ib2xzLnByZWMiLCAic3ltYm9sLnByZWMiLCAic3ltYm9scy4xIiwgImdlbmVyaWNfc3ltbGlzdCIsCisgICJnZW5lcmljX3N5bWxpc3RfaXRlbSIsICJzeW1ib2xfZGVmIiwgInN5bWJvbF9kZWZzLjEiLCAiZ3JhbW1hciIsCisgICJydWxlc19vcl9ncmFtbWFyX2RlY2xhcmF0aW9uIiwgInJ1bGVzIiwgIiRAMyIsICJyaHNlcy4xIiwgInJocyIsCisgICJuYW1lZF9yZWYub3B0IiwgInZhcmlhYmxlIiwgImNvbnRlbnQub3B0IiwgImJyYWNlbGVzcyIsICJpZCIsCisgICJpZF9jb2xvbiIsICJzeW1ib2wiLCAic3RyaW5nX2FzX2lkIiwgImVwaWxvZ3VlLm9wdCIsIFlZX05VTEwKIH07CiAjZW5kaWYKIApAQCAtNjc2LDE1NSArNzUwLDE3NSBAQAogICAgICAyNzUsICAgMjc2LCAgIDI3NywgICAyNzgsICAgMjc5LCAgIDI4MCwgICAyODEsICAgMjgyLCAgIDI4MywgICAyODQsCiAgICAgIDI4NSwgICAyODYsICAgMjg3LCAgIDI4OCwgICAyODksICAgMjkwLCAgIDI5MSwgICAyOTIsICAgMjkzLCAgIDI5NCwKICAgICAgMjk1LCAgIDI5NiwgICAyOTcsICAgMjk4LCAgIDI5OSwgICAzMDAsICAgMzAxLCAgIDMwMiwgICAzMDMsICAgMzA0LAotICAgICAzMDUsICAgMzA2CisgICAgIDMwNSwgICAzMDYsICAgMzA3LCAgIDMwOCwgICAzMDksICAgMzEwLCAgIDMxMSwgICAzMTIKIH07CiAjIGVuZGlmCiAKIC8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2ZXMuICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIxW10gPQogewotICAgICAgIDAsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU0LCAgICA1NSwgICAgNTUsICAgIDU1LCAgICA1NSwgICAgNTUsCi0gICAgICA1NSwgICAgNTUsICAgIDU1LCAgICA1NSwgICAgNTUsICAgIDU1LCAgICA1NSwgICAgNTUsICAgIDU1LCAgICA1NSwKLSAgICAgIDU1LCAgICA1NSwgICAgNTUsICAgIDU1LCAgICA1NSwgICAgNTUsICAgIDU1LCAgICA1NSwgICAgNTUsICAgIDU1LAotICAgICAgNTUsICAgIDU2LCAgICA1NiwgICAgNTYsICAgIDU2LCAgICA1NiwgICAgNTYsICAgIDU2LCAgICA1NiwgICAgNTgsCi0gICAgICA1NywgICAgNTksICAgIDU3LCAgICA1NywgICAgNjAsICAgIDYxLCAgICA2MSwgICAgNjEsICAgIDYyLCAgICA2MiwKLSAgICAgIDYzLCAgICA2MywgICAgNjQsICAgIDY0LCAgICA2NCwgICAgNjQsICAgIDY0LCAgICA2NSwgICAgNjUsICAgIDY2LAotICAgICAgNjYsICAgIDY3LCAgICA2NywgICAgNjcsICAgIDY5LCAgICA2OCwgICAgNzAsICAgIDcwLCAgICA3MCwgICAgNzEsCi0gICAgICA3MSwgICAgNzEsICAgIDcxLCAgICA3MSwgICAgNzEsICAgIDcyLCAgICA3MiwgICAgNzQsICAgIDczLCAgICA3NSwKLSAgICAgIDc2LCAgICA3NywgICAgNzcKKyAgICAgICAwLCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MCwgICAgNjEsICAgIDYxLCAgICA2MSwgICAgNjEsICAgIDYxLAorICAgICAgNjEsICAgIDYxLCAgICA2MSwgICAgNjEsICAgIDYxLCAgICA2MSwgICAgNjEsICAgIDYxLCAgICA2MSwgICAgNjEsCisgICAgICA2MSwgICAgNjEsICAgIDYxLCAgICA2MSwgICAgNjEsICAgIDYxLCAgICA2MSwgICAgNjEsICAgIDYxLCAgICA2MSwKKyAgICAgIDYxLCAgICA2MSwgICAgNjEsICAgIDYxLCAgICA2MSwgICAgNjIsICAgIDYyLCAgICA2MiwgICAgNjIsICAgIDYyLAorICAgICAgNjIsICAgIDYyLCAgICA2MiwgICAgNjIsICAgIDYzLCAgICA2MywgICAgNjIsICAgIDY1LCAgICA2NCwgICAgNjYsCisgICAgICA2NCwgICAgNjQsICAgIDY3LCAgICA2OCwgICAgNjgsICAgIDY4LCAgICA2OSwgICAgNjksICAgIDcwLCAgICA3MCwKKyAgICAgIDcxLCAgICA3MSwgICAgNzIsICAgIDcyLCAgICA3MywgICAgNzMsICAgIDc0LCAgICA3NCwgICAgNzQsICAgIDc0LAorICAgICAgNzUsICAgIDc1LCAgICA3NSwgICAgNzUsICAgIDc1LCAgICA3NiwgICAgNzYsICAgIDc3LCAgICA3NywgICAgNzgsCisgICAgICA3OCwgICAgNzgsICAgIDgwLCAgICA3OSwgICAgODEsICAgIDgxLCAgICA4MSwgICAgODIsICAgIDgyLCAgICA4MiwKKyAgICAgIDgyLCAgICA4MiwgICAgODIsICAgIDgzLCAgICA4MywgICAgODQsICAgIDg0LCAgICA4NSwgICAgODUsICAgIDg1LAorICAgICAgODYsICAgIDg3LCAgICA4NywgICAgODgsICAgIDg5LCAgICA4OSwgICAgOTAsICAgIDkxLCAgICA5MQogfTsKIAogLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xzIGNvbXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIyW10gPQogewotICAgICAgIDAsICAgICAyLCAgICAgNCwgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDMsCi0gICAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDMsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMywKLSAgICAgICAxLCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLAotICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDAsCi0gICAgICAgMywgICAgIDAsICAgICAzLCAgICAgMywgICAgIDMsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAwLCAgICAgMSwKLSAgICAgICAxLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAzLCAgICAgMSwgICAgIDIsICAgICAxLAotICAgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAwLCAgICAgMywgICAgIDEsICAgICAzLCAgICAgMiwgICAgIDAsCi0gICAgICAgMiwgICAgIDIsICAgICAzLCAgICAgMywgICAgIDMsICAgICAxLCAgICAgMSwgICAgIDAsICAgICAyLCAgICAgMSwKLSAgICAgICAxLCAgICAgMCwgICAgIDIKKyAgICAgICAwLCAgICAgMiwgICAgIDQsICAgICAwLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAxLAorICAgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMSwgICAgIDIsICAgICAzLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDIsICAgICAxLCAgICAgMiwKKyAgICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDMsICAgICAzLAorICAgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDMsICAgICAwLCAgICAgMSwgICAgIDMsICAgICAwLCAgICAgMywgICAgIDAsCisgICAgICAgMywgICAgIDMsICAgICAzLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMCwgICAgIDEsICAgICAxLCAgICAgMiwKKyAgICAgICAxLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAorICAgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAzLCAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDEsCisgICAgICAgMiwgICAgIDIsICAgICAwLCAgICAgNCwgICAgIDEsICAgICAzLCAgICAgMiwgICAgIDAsICAgICAzLCAgICAgMywKKyAgICAgICAzLCAgICAgMywgICAgIDMsICAgICAwLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMCwgICAgIDEsICAgICAxLAorICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAwLCAgICAgMgogfTsKIAotLyogWVlERUZBQ1RbU1RBVEUtTkFNRV0gLS0gRGVmYXVsdCBydWxlIHRvIHJlZHVjZSB3aXRoIGluIHN0YXRlCi0gICBTVEFURS1OVU0gd2hlbiBZWVRBQkxFIGRvZXNuJ3Qgc3BlY2lmeSBzb21ldGhpbmcgZWxzZSB0byBkby4gIFplcm8KKy8qIFlZREVGQUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcmVkdWN0aW9uIG51bWJlciBpbiBzdGF0ZSBTVEFURS1OVU0uCisgICBQZXJmb3JtZWQgd2hlbiBZWVRBQkxFIGRvZXNuJ3Qgc3BlY2lmeSBzb21ldGhpbmcgZWxzZSB0byBkby4gIFplcm8KICAgIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVycm9yLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlkZWZhY3RbXSA9CiB7Ci0gICAgICAgMywgICAgIDAsICAgICAwLCAgICAgMSwgICAgNDEsICAgIDM5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzNCwKLSAgICAgIDQ1LCAgICA0NiwgICAgNDcsICAgICA3LCAgICAzNywgICAgIDAsICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAgMCwgICAgMzgsICAgIDIwLCAgICAyMSwgICAgIDAsCi0gICAgICAyMywgICAgMjQsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAgMCwKLSAgICAgICA2LCAgICAgNCwgICAgIDUsICAgIDMyLCAgICAzMSwgICAgNDgsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDc5LAotICAgICAgNzUsICAgIDM1LCAgICA1MCwgICAgNzYsICAgIDM2LCAgICA4MCwgICAgIDgsICAgIDEyLCAgICAxMywgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAgMzMsICAgICAwLCAgICA2NCwgICAgIDAsICAgICAwLCAgICA1OSwKLSAgICAgIDYxLCAgICA0OSwgICAgIDAsICAgIDUyLCAgICA1MywgICAgNTcsICAgIDQyLCAgICA0MCwgICAgNDMsICAgIDUxLAotICAgICAgIDksICAgIDE0LCAgICAxOSwgICAgMjIsICAgIDYzLCAgICA2OSwgICAgNjIsICAgICAwLCAgICA2MCwgICAgIDIsCi0gICAgICA0NCwgICAgNTQsICAgIDU1LCAgICA1OCwgICAgNjUsICAgIDY2LCAgICA4MiwgICAgNTYsICAgIDY4LCAgICA2OSwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDcwLCAgICA3MSwgICAgIDAsICAgIDY3LCAgICA3MiwgICAgNzMsICAgIDc0LAotICAgICAgNzgKKyAgICAgICAzLCAgICAgMCwgICAgIDAsICAgICAxLCAgICA0OSwgICAgNDcsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDUzLAorICAgICAgNTQsICAgIDU1LCAgICAgMCwgICAgIDcsICAgIDQwLCAgICAgMCwgICAgIDksICAgIDExLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgMTYsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIwLCAgICAgMCwgICAgNDEsICAgIDIzLCAgICAyNCwKKyAgICAgICAwLCAgICAgMCwgICAgMjgsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgICAwLAorICAgICAgIDYsICAgIDM0LCAgICA0NCwgICAgIDQsICAgICA1LCAgICAzNiwgICAgMzUsICAgIDU2LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgIDEwMCwgICAgIDAsICAgIDQyLCAgICA5NiwgICAgOTUsICAgIDk3LCAgICAxMCwKKyAgICAgIDEyLCAgICAxMywgICAgMTQsICAgICAwLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMSwgICAgIDAsICAgIDI1LAorICAgICAgIDAsICAgIDI3LCAgICAyOSwgICAgMzAsICAgMTA2LCAgIDEwMiwgICAxMDEsICAgMTA0LCAgICAzNywgICAxMDUsCisgICAgICAgMCwgICAxMDMsICAgICAwLCAgICAgMCwgICAgNzcsICAgIDc5LCAgICA5MywgICAgNDUsICAgICAwLCAgICA1NywKKyAgICAgICAwLCAgICA3MCwgICAgNzUsICAgIDUwLCAgICA3MSwgICAgNDgsICAgIDUxLCAgICA2MiwgICAgNjcsICAgIDY4LAorICAgICAgNjksICAgIDM4LCAgICA2NCwgICAgNjYsICAgIDM5LCAgICA0MywgICAgOTksICAgIDk4LCAgICAgOCwgICAgMTUsCisgICAgICAyMiwgICAgMjYsICAgIDgxLCAgICA4MCwgICAgIDAsICAgIDc4LCAgICAgMiwgICAgOTQsICAgIDgyLCAgICA0NiwKKyAgICAgIDUyLCAgICA1OCwgICAgNjAsICAgIDc2LCAgICA3MiwgICAgNzMsICAgIDYzLCAgICA2NSwgICAxMDgsICAgIDg3LAorICAgICAgNTksICAgIDYxLCAgICA3NCwgICAgODMsICAgIDg0LCAgICA4NywgICAgODYsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICA5MywgICAgOTMsICAgIDg1LCAgICA5MCwgICAgOTEsICAgIDkyLCAgICA4OSwgICAgODgKIH07CiAKIC8qIFlZREVGR09UT1tOVEVSTS1OVU1dLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWRlZmdvdG9bXSA9CitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5ZGVmZ290b1tdID0KIHsKLSAgICAgIC0xLCAgICAgMSwgICAgIDIsICAgIDQxLCAgICA2NywgICAgNDMsICAgIDQ3LCAgICA0NiwgICAgNDQsICAgIDQ1LAotICAgICAgNzIsICAgIDUxLCAgICA3NSwgICAgNzYsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDg1LCAgICA5NCwgICAgOTUsCi0gICAgICA1MiwgICAxMDQsICAgMTA1LCAgICA1MywgICAgNTYsICAgIDg5CisgICAgICAtMSwgICAgIDEsICAgICAyLCAgICA0MywgICAgODIsICAgIDg4LCAgICA0NSwgICAgNDksICAgIDQ4LCAgICA0NiwKKyAgICAgIDQ3LCAgICA5MCwgICAxMjAsICAgMTIxLCAgICA5NiwgICAxMDEsICAgMTAyLCAgICA5MiwgICAgOTMsICAgIDgzLAorICAgICAgODQsICAgIDg1LCAgIDEyOSwgICAxMzMsICAgMTM0LCAgIDExOCwgICAgNTgsICAgMTA4LCAgICA1NSwgICAgNzcsCisgICAgICA4NiwgICAxMDMsICAgIDc5LCAgIDExNgogfTsKIAogLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0gSW5kZXggaW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCiAgICBTVEFURS1OVU0uICAqLwotI2RlZmluZSBZWVBBQ1RfTklORiAtNjkKLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXBhY3RbXSA9CisjZGVmaW5lIFlZUEFDVF9OSU5GIC05MQorc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBhY3RbXSA9CiB7Ci0gICAgIC02OSwgICAgIDUsICAgMTEyLCAgIC02OSwgICAtNjksICAgLTY5LCAgIC0zNSwgICAgIDAsICAgICAwLCAgIC02OSwKLSAgICAgLTY5LCAgIC02OSwgICAtNjksICAgLTY5LCAgIC02OSwgICAgMTMsICAgLTY5LCAgIC02OSwgICAgMjAsICAgIDMxLAotICAgICAtMTgsICAgLTY5LCAgIC02OSwgICAtNjksICAgLTY5LCAgICAtNiwgICAtNjksICAgLTY5LCAgIC02OSwgICAgLTUsCi0gICAgIC02OSwgICAtNjksICAgIDEzLCAgICAxMywgICAgIDAsICAgLTY5LCAgIC02OSwgICAtNjksICAgLTY5LCAgICA2OSwKLSAgICAgLTY5LCAgIC02OSwgICAtNjksICAgLTY5LCAgIC02OSwgICAgLTIsICAgLTM4LCAgIC0zOCwgICAgIDAsICAgLTY5LAotICAgICAtNjksICAgICAwLCAgIC02OSwgICAtNjksICAgICAwLCAgIC02OSwgICAgMTMsICAgLTY5LCAgIC02OSwgICAgMTMsCi0gICAgICAxMywgICAgMTMsICAgLTY5LCAgIC02OSwgICAtNjksICAgIC04LCAgIC02OSwgICAgIDMsICAgIDIxLCAgIC02OSwKLSAgICAgLTY5LCAgIC02OSwgICAgIDAsICAgLTY5LCAgICAgNiwgICAtNjksICAgLTM4LCAgIC0zOCwgICAgIDAsICAgLTY5LAotICAgICAtNjksICAgLTY5LCAgIC02OSwgICAtNjksICAgLTY5LCAgIC02OSwgICAtNjksICAgICAyLCAgIC02OSwgICAtNjksCi0gICAgICAgMCwgICAgMzksICAgLTY5LCAgIC02OSwgICAtMzMsICAgIC0xLCAgIC02OSwgICAtNjksICAgLTY5LCAgIC02OSwKLSAgICAgICAwLCAgICA0NCwgICAgIDEsICAgLTY5LCAgIC02OSwgICAgIDQsICAgIC0xLCAgIC02OSwgICAtNjksICAgLTY5LAotICAgICAtNjkKKyAgICAgLTkxLCAgICAgMywgICAxMDMsICAgLTkxLCAgIC05MSwgICAtOTEsICAgLTM2LCAgICAgMiwgICAgMTAsICAgLTkxLAorICAgICAtOTEsICAgLTkxLCAgICAgOSwgICAtOTEsICAgLTkxLCAgICAzMiwgICAgNjAsICAgLTkxLCAgICA2NSwgICAgNjcsCisgICAgICAyNywgICAtOTEsICAgIDQxLCAgICA3MywgICAgNTEsICAgLTkxLCAgICAzOSwgICAtOTEsICAgLTkxLCAgIC05MSwKKyAgICAgIDQwLCAgICA1MiwgICAtOTEsICAgIDkzLCAgICA5NSwgICAgMzMsICAgLTkxLCAgIC05MSwgICAtOTEsICAgIDE1LAorICAgICAtOTEsICAgLTkxLCAgICA1MywgICAtOTEsICAgLTkxLCAgIC05MSwgICAtOTEsICAgIDQ2LCAgICA0MywgICAgNDMsCisgICAgICAzMywgICAgMTEsICAgIDExLCAgIC05MSwgICAgNjEsICAgLTkxLCAgIC05MSwgICAtOTEsICAgIDM1LCAgIC05MSwKKyAgICAgLTkxLCAgIC05MSwgICAtOTEsICAgMTAwLCAgIC05MSwgICAtOTEsICAgLTkxLCAgIC05MSwgICAxMDIsICAgLTkxLAorICAgICAxMTMsICAgLTkxLCAgIC05MSwgICAtOTEsICAgLTkxLCAgIC05MSwgICAtOTEsICAgLTkxLCAgIC05MSwgICAtOTEsCisgICAgICA2NCwgICAtOTEsICAgIDk0LCAgICAgMSwgICAtOTEsICAgLTkxLCAgICA2MiwgICAtOTEsICAgIDYxLCAgIC05MSwKKyAgICAgIDMzLCAgIC05MSwgICAtOTEsICAgIDQzLCAgICA4NiwgICAgNDMsICAgIDMzLCAgIC05MSwgICAtOTEsICAgLTkxLAorICAgICAtOTEsICAgIDExLCAgIC05MSwgICAtOTEsICAgIDExLCAgIC05MSwgICAtOTEsICAgLTkxLCAgIC05MSwgICAtOTEsCisgICAgIC05MSwgICAtOTEsICAgLTkxLCAgIC05MSwgICAgNzIsICAgLTkxLCAgIC05MSwgICAtOTEsICAgLTkxLCAgIC05MSwKKyAgICAgIDMzLCAgIC05MSwgICAxNDIsICAgLTkxLCAgIDE0NSwgICAtOTEsICAgLTkxLCAgIC05MSwgICAtOTEsICAgLTkxLAorICAgICAtOTEsICAgLTkxLCAgIC05MSwgICAgMTcsICAgIDM0LCAgIC05MSwgICAtOTEsICAgIDMzLCAgIDE0NiwgICAgOTcsCisgICAgICA2MiwgICAgNjIsICAgIDM0LCAgIC05MSwgICAtOTEsICAgLTkxLCAgIC05MSwgICAtOTEKIH07CiAKIC8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlwZ290b1tdID0KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlwZ290b1tdID0KIHsKLSAgICAgLTY5LCAgIC02OSwgICAtNjksICAgLTY5LCAgICA0NywgICAtNjksICAgLTY5LCAgIC02OSwgICAtNjksICAgLTY5LAotICAgICAtNjksICAgIC03LCAgIC01OCwgICAgIDcsICAgLTY5LCAgIC0xNSwgICAtNjksICAgLTY5LCAgIC02OSwgICAtNDIsCi0gICAgIC0zNCwgICAtNjksICAgLTY5LCAgIC02OCwgICAgMzAsICAgLTY5CisgICAgIC05MSwgICAtOTEsICAgLTkxLCAgIC05MSwgICAxNDcsICAgLTkxLCAgIC05MSwgICAtOTEsICAgLTkxLCAgIC05MSwKKyAgICAgLTkxLCAgIC05MSwgICAtOTEsICAgIDM3LCAgIC05MSwgICAxMDYsICAgLTYwLCAgIC0zMywgICAxMDUsICAgLTkxLAorICAgICAgNjksICAgLTkxLCAgIC05MSwgICAtOTEsICAgIDI0LCAgIC00OCwgICAtOTEsICAgLTkxLCAgIC00OSwgICAtMjAsCisgICAgIC05MSwgICAtMzUsICAgLTkwLCAgIC05MQogfTsKIAogLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4gIElmCiAgICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gKLSAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiB6ZXJvLCBkbyB3aGF0IFlZREVGQUNUIHNheXMuCi0gICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCi0jZGVmaW5lIFlZVEFCTEVfTklORiAtODIKLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXRhYmxlW10gPQorICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9yLiAgKi8KKyNkZWZpbmUgWVlUQUJMRV9OSU5GIC0xMDgKK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXl0YWJsZVtdID0KIHsKLSAgICAgIDY0LCAgICA1NCwgICAgNDksICAgIDQ5LCAgICA3MywgICAgIDMsICAgIDkyLCAgICA0OCwgICAgNzQsICAgIDQ5LAotICAgICAgOTEsICAgIDk4LCAgICA5OSwgICAxMDAsICAgMTAxLCAgIDEwMiwgICAgNTUsICAgIDc5LCAgICA5MywgICAgOTMsCi0gICAgICA3OSwgICAtODEsICAgIDY1LCAgICA5NywgICAgNTcsICAgIDU5LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywKLSAgICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgNTgsICAgIDg0LCAgICA2MCwgICAgNjEsICAgIDE0LAotICAgICAgNzEsICAgIDc4LCAgICA0OSwgICAxMDksICAgIDc5LCAgICA1MCwgICAgNTAsICAgIDg2LCAgIDEwOCwgICAgNDIsCi0gICAgIC03NywgICAgMjYsICAgIDk2LCAgICA4OCwgICAgNzcsICAgMTEwLCAgICA3OSwgICAxMDYsICAgICAwLCAgICAzNCwKLSAgICAgICAwLCAgIDEwMywgICAgNjIsICAgIDYzLCAgICAgMCwgICAgOTAsICAgMTA3LCAgICAgMCwgICAgNjYsICAgIDg3LAotICAgICAgNjUsICAgICAwLCAgIDEwMywgICAgIDAsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCi0gICAgICAxMCwgICAgMTEsICAgIDEyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA4MCwgICAgMTQsICAgICAwLCAgICA4MSwKLSAgICAgIDgyLCAgICA4MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI2LAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDM0LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA2NiwgICAgIDQsICAgICA1LCAgICAgNiwKLSAgICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEzLAotICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsCi0gICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywKLSAgICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAgMCwgICAgIDAsICAgIDM4LCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgMzksICAgIDQwCisgICAgICA3OCwgIC0xMDcsICAgIDgwLCAgICAgMywgICAxMjUsICAgMTA1LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywKKyAgICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICA3NCwgICAgOTcsICAgIDgwLCAgICAxMiwgICAgNTAsICAgIDE0LAorICAgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICA5NCwgICAgOTQsCisgICAgICA2MiwgICAgMTIsICAgIDI3LCAgICAxNCwgICAxMzIsICAgIDU2LCAgICA3NCwgICAgNzQsICAgMTA2LCAgIDExOSwKKyAgICAgIDM1LCAgIDEyNywgICAgNjcsICAgIDY5LCAgIDEyNywgICAgNTEsICAgIDI3LCAgIDEzNywgICAxMzgsICAgMTM5LAorICAgICAgODEsICAgMTE0LCAgICA1MywgICAgNTIsICAgIDM1LCAgIDEyMiwgICAgNzUsICAgIDU0LCAgICA0MiwgICAgNzYsCisgICAgIDEyMywgICAxMjYsICAgMTIzLCAgICA1OSwgICAgODEsICAgIDk4LCAgICA5OSwgICAxMDAsICAgMTM1LCAgICA2MCwKKyAgICAgMTM2LCAgICA2MSwgICAgNDIsICAgIDk0LCAgICA2MywgICAgOTQsICAgIDY1LCAgIDE0MCwgICAgNzUsICAgIDc1LAorICAgICAgNTcsICAgIDc2LCAgICA3NiwgICAxMDcsICAgIDY0LCAgIDEyMiwgICAgNjgsICAgIDcwLCAgICA3NSwgICAgNzQsCisgICAgIDEyNCwgICAgNzYsICAgMTQ2LCAgIDE0NywgICAgNjYsICAgIDcxLCAgICA3MiwgICAgOTEsICAgIDczLCAgIDE0MSwKKyAgICAgIDg5LCAgICA4NywgICAxNDMsICAgMTA5LCAgICA1MywgICAxMTAsICAgMTE3LCAgIDE0MSwgICAgIDQsICAgICA1LAorICAgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAxMTEsICAgMTEyLCAgIDEyOCwgICAgMTIsCisgICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKKyAgICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAorICAgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAxMzEsICAgMTEzLCAgICA3NCwgICAgNDQsCisgICAgIDE0NCwgICAxNDUsICAgMTE1LCAgICAzOSwgICAgOTUsICAgIDQwLCAgICA0MSwgICAxMzAsICAgMTA0LCAgIDE0MiwKKyAgICAgIDQyCiB9OwogCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXljaGVja1tdID0KKyNkZWZpbmUgeXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQoWXlzdGF0ZSkgXAorICAoISEoKFl5c3RhdGUpID09ICgtOTEpKSkKKworI2RlZmluZSB5eXRhYmxlX3ZhbHVlX2lzX2Vycm9yKFl5dGFibGVfdmFsdWUpIFwKKyAgWVlJRCAoMCkKKworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eWNoZWNrW10gPQogewotICAgICAgMzQsICAgICA4LCAgICAgMywgICAgIDMsICAgIDQyLCAgICAgMCwgICAgNzQsICAgIDQyLCAgICA0NiwgICAgIDMsCi0gICAgICAgNCwgICAgNDQsICAgIDQ1LCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAgMywgICAgNTEsICAgIDc2LCAgICA3NywKLSAgICAgIDU0LCAgICAgMCwgICAgIDEsICAgIDkxLCAgICAgNCwgICAgNDMsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAotICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAgNCwgICAgNDQsICAgIDQzLCAgICA0MywgICAgMTgsCi0gICAgICA0MiwgICAgNDgsICAgICAzLCAgICA0MiwgICAgNzgsICAgIDQ2LCAgICA0NiwgICAgNDQsICAgICA0LCAgICAgMiwKLSAgICAgIDUxLCAgICAzMCwgICAgNTAsICAgIDY4LCAgICA0NywgICAgNTEsICAgIDkwLCAgICA5OSwgICAgLTEsICAgIDM4LAotICAgICAgLTEsICAgIDk1LCAgICAzMiwgICAgMzMsICAgIC0xLCAgICA3MiwgICAxMDAsICAgIC0xLCAgICA0NywgICAgNDgsCi0gICAgICAgMSwgICAgLTEsICAgMTA2LCAgICAtMSwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwKLSAgICAgIDExLCAgICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU2LCAgICAxOCwgICAgLTEsICAgIDU5LAotICAgICAgNjAsICAgIDYxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzAsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ3LCAgICAgNSwgICAgIDYsICAgICA3LAotICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTcsCi0gICAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywKLSAgICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAotICAgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIC0xLCAgICAtMSwgICAgNDQsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICA0OCwgICAgNDkKKyAgICAgIDM1LCAgICAgMCwgICAgIDEsICAgICAwLCAgICA5NCwgICAgNTQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAorICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgICAzLCAgICA1MCwgICAgIDEsICAgIDE2LCAgICA1NCwgICAgMTgsCisgICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDQ4LCAgICA0OSwKKyAgICAgICAzLCAgICAxNiwgICAgMzEsICAgIDE4LCAgIDEyNCwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgIDg4LAorICAgICAgMzksICAgMTAxLCAgICAgMywgICAgIDMsICAgMTA0LCAgICA0MywgICAgMzEsICAgIDEzLCAgICAxNCwgICAgMTUsCisgICAgICA0OSwgICAgNTAsICAgIDQzLCAgICA0MywgICAgMzksICAgIDkwLCAgICA0NSwgICAgNDgsICAgIDU3LCAgICA0OCwKKyAgICAgIDkzLCAgICA5NiwgICAgOTUsICAgICAzLCAgICA0OSwgICAgNTQsICAgIDU1LCAgICA1NiwgICAgNTEsICAgICA0LAorICAgICAgNTMsICAgICA0LCAgICA1NywgICAgOTMsICAgIDQ3LCAgICA5NSwgICAgIDMsICAgIDQzLCAgICA0NSwgICAgNDUsCisgICAgICA0OCwgICAgNDgsICAgIDQ4LCAgICA0OCwgICAgNDMsICAgMTIwLCAgICA0NywgICAgNDcsICAgIDQ1LCAgICAgMywKKyAgICAgICA0LCAgICA0OCwgICAxNDAsICAgMTQxLCAgICA0MywgICAgNDMsICAgICAzLCAgICA1NCwgICAgIDMsICAgMTM0LAorICAgICAgNTQsICAgIDQ4LCAgIDEzNywgICAgIDMsICAgIDQzLCAgICAgMywgICAgNDQsICAgMTQyLCAgICAgNSwgICAgIDYsCisgICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAgMywgICAgNTMsICAgIDQ2LCAgICAxNiwKKyAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsCisgICAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICAgNCwgICAgNTMsICAgICAzLCAgICAgMiwKKyAgICAgICA0LCAgICA1NCwgICAgODMsICAgIDUwLCAgICA0OSwgICAgNTIsICAgIDUzLCAgIDEyMCwgICAgNTIsICAgMTM1LAorICAgICAgNTcKIH07CiAKIC8qIFlZU1RPU1tTVEFURS1OVU1dIC0tIFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCiAgICBzeW1ib2wgb2Ygc3RhdGUgU1RBVEUtTlVNLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlzdG9zW10gPQogewotICAgICAgIDAsICAgIDUzLCAgICA1NCwgICAgIDAsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsCi0gICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywKKyAgICAgICAwLCAgICA1OSwgICAgNjAsICAgICAwLCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLAorICAgICAgMTEsICAgIDEyLCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsCiAgICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywKLSAgICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDQsICAgIDQ4LAotICAgICAgNDksICAgIDU1LCAgICA1NiwgICAgNTcsICAgIDYwLCAgICA2MSwgICAgNTksICAgIDU4LCAgICA0MiwgICAgIDMsCi0gICAgICA0NiwgICAgNjMsICAgIDcyLCAgICA3NSwgICAgNjMsICAgICAzLCAgICA3NiwgICAgIDQsICAgICA0LCAgICA0MywKLSAgICAgIDQzLCAgICA0MywgICAgNzYsICAgIDc2LCAgICA3MiwgICAgIDEsICAgIDQ3LCAgICA1NiwgICAgNjYsICAgIDY3LAotICAgICAgNjgsICAgIDQyLCAgICA2MiwgICAgNDIsICAgIDQ2LCAgICA2NCwgICAgNjUsICAgIDY1LCAgICA2MywgICAgNzIsCi0gICAgICA3NiwgICAgNzYsICAgIDc2LCAgICA3NiwgICAgNDQsICAgIDY5LCAgICA0NCwgICAgNDgsICAgIDY3LCAgICA3NywKLSAgICAgIDYzLCAgICAgNCwgICAgNzUsICAgIDY0LCAgICA3MCwgICAgNzEsICAgIDUwLCAgICA3NSwgICAgNDQsICAgIDQ1LAotICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzEsICAgIDcyLCAgICAgNCwgICAgNDIsCi0gICAgICA1MQorICAgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNTAsCisgICAgICA1MiwgICAgNTMsICAgIDU3LCAgICA2MSwgICAgNjIsICAgIDY0LCAgICA2NywgICAgNjgsICAgIDY2LCAgICA2NSwKKyAgICAgIDU0LCAgICA0MywgICAgNDMsICAgIDQzLCAgICA0OCwgICAgODYsICAgICAzLCAgICA0OCwgICAgODQsICAgICAzLAorICAgICAgIDQsICAgICA0LCAgICAgMywgICAgNDcsICAgIDQzLCAgICAgMywgICAgNDMsICAgICAzLCAgICA0NywgICAgIDMsCisgICAgICA0NywgICAgNDMsICAgICAzLCAgICAgMywgICAgIDMsICAgIDQ1LCAgICA0OCwgICAgODcsICAgIDg5LCAgICA5MCwKKyAgICAgICAxLCAgICA0OSwgICAgNjIsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDg4LCAgICA0OCwgICAgNjMsICAgIDU0LAorICAgICAgNjksICAgIDU0LCAgICA3NSwgICAgNzYsICAgIDg3LCAgICA3NiwgICAgNzIsICAgIDg5LCAgICA1NCwgICAgNTUsCisgICAgICA1NiwgICAgNzMsICAgIDc0LCAgICA4OSwgICAgNzMsICAgIDg2LCAgICAgMywgICAgNDgsICAgIDg1LCAgICAgMywKKyAgICAgICAzLCAgICAgMywgICAgNTMsICAgIDUzLCAgICA1MCwgICAgNzgsICAgIDkxLCAgICA0NCwgICAgODMsICAgIDg2LAorICAgICAgNzAsICAgIDcxLCAgICA4OSwgICAgNzUsICAgICA0LCAgICA5MCwgICAgODksICAgIDc0LCAgICA0NiwgICAgODAsCisgICAgICA3MSwgICAgIDQsICAgIDkwLCAgICA4MSwgICAgODIsICAgIDUxLCAgICA1MywgICAgMTMsICAgIDE0LCAgICAxNSwKKyAgICAgIDQzLCAgICA4OSwgICAgODIsICAgIDg5LCAgICAgNCwgICAgNTQsICAgIDgzLCAgICA4MwogfTsKIAogI2RlZmluZSB5eWVycm9rCQkoeXllcnJzdGF0dXMgPSAwKQpAQCAtODM5LDMwICs5MzMsNDAgQEAKIAogLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQogICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KLSAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgKi8KKyAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgSG93ZXZlciwKKyAgIFlZRkFJTCBhcHBlYXJzIHRvIGJlIGluIHVzZS4gIE5ldmVydGhlbGVzcywgaXQgaXMgZm9ybWFsbHkgZGVwcmVjYXRlZAorICAgaW4gQmlzb24gMi40LjIncyBORVdTIGVudHJ5LCB3aGVyZSBhIHBsYW4gdG8gcGhhc2UgaXQgb3V0IGlzCisgICBkaXNjdXNzZWQuICAqLwogCiAjZGVmaW5lIFlZRkFJTAkJZ290byB5eWVycmxhYgorI2lmIGRlZmluZWQgWVlGQUlMCisgIC8qIFRoaXMgaXMgaGVyZSB0byBzdXBwcmVzcyB3YXJuaW5ncyBmcm9tIHRoZSBHQ0MgY3BwJ3MKKyAgICAgLVd1bnVzZWQtbWFjcm9zLiAgTm9ybWFsbHkgd2UgZG9uJ3Qgd29ycnkgYWJvdXQgdGhhdCB3YXJuaW5nLCBidXQKKyAgICAgc29tZSB1c2VycyBkbywgYW5kIHdlIHdhbnQgdG8gbWFrZSBpdCBlYXN5IGZvciB1c2VycyB0byByZW1vdmUKKyAgICAgWVlGQUlMIHVzZXMsIHdoaWNoIHdpbGwgcHJvZHVjZSB3YXJuaW5ncyBmcm9tIEJpc29uIDIuNS4gICovCisjZW5kaWYKIAogI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCiAKLSNkZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZhbHVlKQkJCQkJXAotZG8JCQkJCQkJCVwKLSAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVuID09IDEpCQkJCVwKLSAgICB7CQkJCQkJCQlcCi0gICAgICB5eWNoYXIgPSAoVG9rZW4pOwkJCQkJCVwKLSAgICAgIHl5bHZhbCA9IChWYWx1ZSk7CQkJCQkJXAotICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwkJCQlcCi0gICAgICBZWVBPUFNUQUNLICgxKTsJCQkJCQlcCi0gICAgICBnb3RvIHl5YmFja3VwOwkJCQkJCVwKLSAgICB9CQkJCQkJCQlcCi0gIGVsc2UJCQkJCQkJCVwKLSAgICB7CQkJCQkJCQlcCisjZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgeXljaGFyID0gKFRva2VuKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHl5bHZhbCA9IChWYWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBZWVBPUFNUQUNLICh5eWxlbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgeXlzdGF0ZSA9ICp5eXNzcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIFlZX0xBQ19ESVNDQVJEICgiWVlCQUNLVVAiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBnb3RvIHl5YmFja3VwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgeXllcnJvciAoWVlfKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIikpOyBcCiAgICAgICBZWUVSUk9SOwkJCQkJCQlcCiAgICAgfQkJCQkJCQkJXAogd2hpbGUgKFlZSUQgKDApKQogCi0KKy8qIEVycm9yIHRva2VuIG51bWJlciAqLwogI2RlZmluZSBZWVRFUlJPUgkxCiAjZGVmaW5lIFlZRVJSQ09ERQkyNTYKIApAQCAtODcxLDM4ICs5NzUsNDMgQEAKICAgIElmIE4gaXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0aGUgZW1wdHkgbG9jYXRpb24gd2hpY2ggZW5kcwogICAgdGhlIHByZXZpb3VzIHN5bWJvbDogUkhTWzBdIChhbHdheXMgZGVmaW5lZCkuICAqLwogCi0jZGVmaW5lIFlZUkhTTE9DKFJocywgSykgKChSaHMpW0tdKQogI2lmbmRlZiBZWUxMT0NfREVGQVVMVAotIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKQkJCQlcCi0gICAgZG8JCQkJCQkJCQlcCi0gICAgICBpZiAoWVlJRCAoTikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl7CQkJCQkJCQlcCi0JICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfbGluZTsJXAotCSAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2NvbHVtbjsJXAotCSAgKEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfbGluZTsJCVwKLQkgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsJXAotCX0JCQkJCQkJCVwKLSAgICAgIGVsc2UJCQkJCQkJCVwKLQl7CQkJCQkJCQlcCi0JICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gKEN1cnJlbnQpLmxhc3RfbGluZSAgID0JCVwKLQkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9saW5lOwkJCQlcCi0JICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gKEN1cnJlbnQpLmxhc3RfY29sdW1uID0JCVwKLQkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9jb2x1bW47CQkJCVwKLQl9CQkJCQkJCQlcCisjIGRlZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBpZiAoWVlJRCAoTikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2xpbmU7ICAgICAgICBcCisgICAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2NvbHVtbjsgICAgICBcCisgICAgICAgICAgKEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfbGluZTsgICAgICAgICBcCisgICAgICAgICAgKEN1cnJlbnQpLmxhc3RfY29sdW1uICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfY29sdW1uOyAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IChDdXJyZW50KS5sYXN0X2xpbmUgICA9ICAgICAgICAgICAgICBcCisgICAgICAgICAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2xpbmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IChDdXJyZW50KS5sYXN0X2NvbHVtbiA9ICAgICAgICAgICAgICBcCisgICAgICAgICAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2NvbHVtbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgd2hpbGUgKFlZSUQgKDApKQogI2VuZGlmCiAKKyNkZWZpbmUgWVlSSFNMT0MoUmhzLCBLKSAoKFJocylbS10pCisKIAogLyogWVlfTE9DQVRJT05fUFJJTlQgLS0gUHJpbnQgdGhlIGxvY2F0aW9uIG9uIHRoZSBzdHJlYW0uCiAgICBUaGlzIG1hY3JvIHdhcyBub3QgbWFuZGF0ZWQgb3JpZ2luYWxseTogZGVmaW5lIG9ubHkgaWYgd2Uga25vdwogICAgd2Ugd29uJ3QgYnJlYWsgdXNlciBjb2RlOiB3aGVuIHRoZXNlIGFyZSB0aGUgbG9jYXRpb25zIHdlIGtub3cuICAqLwogCiAjaWZuZGVmIFlZX0xPQ0FUSU9OX1BSSU5UCi0jIGlmIFlZTFRZUEVfSVNfVFJJVklBTAotIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykJCQlcCi0gICAgIGZwcmludGYgKEZpbGUsICIlZC4lZC0lZC4lZCIsCQkJXAotCSAgICAgIChMb2MpLmZpcnN0X2xpbmUsIChMb2MpLmZpcnN0X2NvbHVtbiwJXAotCSAgICAgIChMb2MpLmxhc3RfbGluZSwgIChMb2MpLmxhc3RfY29sdW1uKQorIyBpZiBkZWZpbmVkIEdSQU1fTFRZUEVfSVNfVFJJVklBTCAmJiBHUkFNX0xUWVBFX0lTX1RSSVZJQUwKKyMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZwcmludGYgKEZpbGUsICIlZC4lZCIsIChMb2MpLmZpcnN0X2xpbmUsIChMb2MpLmZpcnN0X2NvbHVtbik7ICAgICAgIFwKKyAgICBpZiAoKExvYykuZmlyc3RfbGluZSA8IChMb2MpLmxhc3RfbGluZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBmcHJpbnRmIChGaWxlLCAiLSVkLiVkIiwgKExvYykubGFzdF9saW5lLCAgKExvYykubGFzdF9jb2x1bW4gLSAxKTsgXAorICAgIGVsc2UgaWYgKChMb2MpLmZpcnN0X2NvbHVtbiA8IChMb2MpLmxhc3RfY29sdW1uIC0gMSkgICAgICAgICAgICAgICAgIFwKKyAgICAgIGZwcmludGYgKEZpbGUsICItJWQiLCAoTG9jKS5sYXN0X2NvbHVtbiAtIDEpOyAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCiAjIGVsc2UKICMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICgodm9pZCkgMCkKICMgZW5kaWYKQEAgLTkxMCw3ICsxMDE5LDYgQEAKIAogCiAvKiBZWUxFWCAtLSBjYWxsaW5nIGB5eWxleCcgd2l0aCB0aGUgcmlnaHQgYXJndW1lbnRzLiAgKi8KLQogI2lmZGVmIFlZTEVYX1BBUkFNCiAjIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgJnl5bGxvYywgWVlMRVhfUEFSQU0pCiAjZWxzZQpAQCAtOTE4LDcgKzEwMjYsNyBAQAogI2VuZGlmCiAKIC8qIEVuYWJsZSBkZWJ1Z2dpbmcgaWYgcmVxdWVzdGVkLiAgKi8KLSNpZiBZWURFQlVHCisjaWYgR1JBTV9ERUJVRwogCiAjIGlmbmRlZiBZWUZQUklOVEYKICMgIGluY2x1ZGUgPHN0ZGlvLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KQEAgLTk2MSw2ICsxMDY5LDggQEAKICAgICBZWUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2NhdGlvbnA7CiAjZW5kaWYKIHsKKyAgRklMRSAqeXlvID0geXlvdXRwdXQ7CisgIFlZVVNFICh5eW8pOwogICBpZiAoIXl5dmFsdWVwKQogICAgIHJldHVybjsKICAgWVlVU0UgKHl5bG9jYXRpb25wKTsKQEAgLTk3Miw4NSArMTA4MiwxMzEgQEAKICMgZW5kaWYKICAgc3dpdGNoICh5eXR5cGUpCiAgICAgewotICAgICAgY2FzZSAzOiAvKiAiXCJzdHJpbmdcIiIgKi8KLSNsaW5lIDE3OSAicGFyc2UtZ3JhbS55IgotCXsgZnByaW50ZiAoc3RkZXJyLCAiXCIlc1wiIiwgKHl5dmFsdWVwLT5jaGFycykpOyB9OwotI2xpbmUgOTc5ICJwYXJzZS1ncmFtLmMiCisgICAgICBjYXNlIDM6IC8qICJzdHJpbmciICovCisvKiBMaW5lIDgxMiBvZiB5YWNjLmMgICovCisjbGluZSAyMDUgInBhcnNlLWdyYW0ueSIKKwl7IGZwdXRzIChxdW90ZWFyZ19zdHlsZSAoY19xdW90aW5nX3N0eWxlLCAoKCp5eXZhbHVlcCkuY2hhcnMpKSwgc3RkZXJyKTsgfTsKKy8qIExpbmUgODEyIG9mIHlhY2MuYyAgKi8KKyNsaW5lIDEwOTEgInBhcnNlLWdyYW0uYyIKIAlicmVhazsKLSAgICAgIGNhc2UgNDogLyogIlwiaW50ZWdlclwiIiAqLwotI2xpbmUgMTkyICJwYXJzZS1ncmFtLnkiCi0JeyBmcHJpbnRmIChzdGRlcnIsICIlZCIsICh5eXZhbHVlcC0+aW50ZWdlcikpOyB9OwotI2xpbmUgOTg0ICJwYXJzZS1ncmFtLmMiCisgICAgICBjYXNlIDQ6IC8qICJpbnRlZ2VyIiAqLworLyogTGluZSA4MTIgb2YgeWFjYy5jICAqLworI2xpbmUgMjE3ICJwYXJzZS1ncmFtLnkiCisJeyBmcHJpbnRmIChzdGRlcnIsICIlZCIsICgoKnl5dmFsdWVwKS5pbnRlZ2VyKSk7IH07CisvKiBMaW5lIDgxMiBvZiB5YWNjLmMgICovCisjbGluZSAxMDk4ICJwYXJzZS1ncmFtLmMiCiAJYnJlYWs7Ci0gICAgICBjYXNlIDg6IC8qICJcIiVkZXN0cnVjdG9yIHsuLi59XCIiICovCi0jbGluZSAxODEgInBhcnNlLWdyYW0ueSIKLQl7IGZwcmludGYgKHN0ZGVyciwgIntcbiVzXG59IiwgKHl5dmFsdWVwLT5jaGFycykpOyB9OwotI2xpbmUgOTg5ICJwYXJzZS1ncmFtLmMiCisgICAgICBjYXNlIDQzOiAvKiAiey4uLn0iICovCisvKiBMaW5lIDgxMiBvZiB5YWNjLmMgICovCisjbGluZSAyMDcgInBhcnNlLWdyYW0ueSIKKwl7IGZwcmludGYgKHN0ZGVyciwgIntcbiVzXG59IiwgKCgqeXl2YWx1ZXApLmNvZGUpKTsgfTsKKy8qIExpbmUgODEyIG9mIHlhY2MuYyAgKi8KKyNsaW5lIDExMDUgInBhcnNlLWdyYW0uYyIKIAlicmVhazsKLSAgICAgIGNhc2UgOTogLyogIlwiJXByaW50ZXIgey4uLn1cIiIgKi8KLSNsaW5lIDE4MSAicGFyc2UtZ3JhbS55IgotCXsgZnByaW50ZiAoc3RkZXJyLCAie1xuJXNcbn0iLCAoeXl2YWx1ZXAtPmNoYXJzKSk7IH07Ci0jbGluZSA5OTQgInBhcnNlLWdyYW0uYyIKKyAgICAgIGNhc2UgNDQ6IC8qICJbaWRlbnRpZmllcl0iICovCisvKiBMaW5lIDgxMiBvZiB5YWNjLmMgICovCisjbGluZSAyMTIgInBhcnNlLWdyYW0ueSIKKwl7IGZwcmludGYgKHN0ZGVyciwgIlslc10iLCAoKCp5eXZhbHVlcCkudW5pcXN0cikpOyB9OworLyogTGluZSA4MTIgb2YgeWFjYy5jICAqLworI2xpbmUgMTExMiAicGFyc2UtZ3JhbS5jIgogCWJyZWFrOwotICAgICAgY2FzZSAxMDogLyogIlwiJXVuaW9uIHsuLi59XCIiICovCi0jbGluZSAxODEgInBhcnNlLWdyYW0ueSIKLQl7IGZwcmludGYgKHN0ZGVyciwgIntcbiVzXG59IiwgKHl5dmFsdWVwLT5jaGFycykpOyB9OwotI2xpbmUgOTk5ICJwYXJzZS1ncmFtLmMiCisgICAgICBjYXNlIDQ1OiAvKiAiY2hhciIgKi8KKy8qIExpbmUgODEyIG9mIHlhY2MuYyAgKi8KKyNsaW5lIDE5OSAicGFyc2UtZ3JhbS55IgorCXsgZnB1dHMgKGNoYXJfbmFtZSAoKCgqeXl2YWx1ZXApLmNoYXJhY3RlcikpLCBzdGRlcnIpOyB9OworLyogTGluZSA4MTIgb2YgeWFjYy5jICAqLworI2xpbmUgMTExOSAicGFyc2UtZ3JhbS5jIgogCWJyZWFrOwotICAgICAgY2FzZSAyNjogLyogIlwiJWluaXRpYWwtYWN0aW9uIHsuLi59XCIiICovCi0jbGluZSAxODEgInBhcnNlLWdyYW0ueSIKLQl7IGZwcmludGYgKHN0ZGVyciwgIntcbiVzXG59IiwgKHl5dmFsdWVwLT5jaGFycykpOyB9OwotI2xpbmUgMTAwNCAicGFyc2UtZ3JhbS5jIgorICAgICAgY2FzZSA0NjogLyogImVwaWxvZ3VlIiAqLworLyogTGluZSA4MTIgb2YgeWFjYy5jICAqLworI2xpbmUgMjA3ICJwYXJzZS1ncmFtLnkiCisJeyBmcHJpbnRmIChzdGRlcnIsICJ7XG4lc1xufSIsICgoKnl5dmFsdWVwKS5jaGFycykpOyB9OworLyogTGluZSA4MTIgb2YgeWFjYy5jICAqLworI2xpbmUgMTEyNiAicGFyc2UtZ3JhbS5jIgogCWJyZWFrOwotICAgICAgY2FzZSAyNzogLyogIlwiJWxleC1wYXJhbSB7Li4ufVwiIiAqLwotI2xpbmUgMTgxICJwYXJzZS1ncmFtLnkiCi0JeyBmcHJpbnRmIChzdGRlcnIsICJ7XG4lc1xufSIsICh5eXZhbHVlcC0+Y2hhcnMpKTsgfTsKLSNsaW5lIDEwMDkgInBhcnNlLWdyYW0uYyIKKyAgICAgIGNhc2UgNDg6IC8qICJpZGVudGlmaWVyIiAqLworLyogTGluZSA4MTIgb2YgeWFjYy5jICAqLworI2xpbmUgMjExICJwYXJzZS1ncmFtLnkiCisJeyBmcHV0cyAoKCgqeXl2YWx1ZXApLnVuaXFzdHIpLCBzdGRlcnIpOyB9OworLyogTGluZSA4MTIgb2YgeWFjYy5jICAqLworI2xpbmUgMTEzMyAicGFyc2UtZ3JhbS5jIgogCWJyZWFrOwotICAgICAgY2FzZSAzNDogLyogIlwiJXBhcnNlLXBhcmFtIHsuLi59XCIiICovCi0jbGluZSAxODEgInBhcnNlLWdyYW0ueSIKLQl7IGZwcmludGYgKHN0ZGVyciwgIntcbiVzXG59IiwgKHl5dmFsdWVwLT5jaGFycykpOyB9OwotI2xpbmUgMTAxNCAicGFyc2UtZ3JhbS5jIgorICAgICAgY2FzZSA0OTogLyogImlkZW50aWZpZXI6IiAqLworLyogTGluZSA4MTIgb2YgeWFjYy5jICAqLworI2xpbmUgMjEzICJwYXJzZS1ncmFtLnkiCisJeyBmcHJpbnRmIChzdGRlcnIsICIlczoiLCAoKCp5eXZhbHVlcCkudW5pcXN0cikpOyB9OworLyogTGluZSA4MTIgb2YgeWFjYy5jICAqLworI2xpbmUgMTE0MCAicGFyc2UtZ3JhbS5jIgogCWJyZWFrOwotICAgICAgY2FzZSA0MjogLyogIlwidHlwZVwiIiAqLwotI2xpbmUgMTkwICJwYXJzZS1ncmFtLnkiCi0JeyBmcHJpbnRmIChzdGRlcnIsICI8JXM+IiwgKHl5dmFsdWVwLT51bmlxc3RyKSk7IH07Ci0jbGluZSAxMDE5ICJwYXJzZS1ncmFtLmMiCisgICAgICBjYXNlIDUyOiAvKiAiJXsuLi4lfSIgKi8KKy8qIExpbmUgODEyIG9mIHlhY2MuYyAgKi8KKyNsaW5lIDIwNyAicGFyc2UtZ3JhbS55IgorCXsgZnByaW50ZiAoc3RkZXJyLCAie1xuJXNcbn0iLCAoKCp5eXZhbHVlcCkuY2hhcnMpKTsgfTsKKy8qIExpbmUgODEyIG9mIHlhY2MuYyAgKi8KKyNsaW5lIDExNDcgInBhcnNlLWdyYW0uYyIKIAlicmVhazsKLSAgICAgIGNhc2UgNDY6IC8qICJcImlkZW50aWZpZXJcIiIgKi8KLSNsaW5lIDE5NCAicGFyc2UtZ3JhbS55IgotCXsgZnByaW50ZiAoc3RkZXJyLCAiJXMiLCAoeXl2YWx1ZXAtPnN5bWJvbCktPnRhZyk7IH07Ci0jbGluZSAxMDI0ICJwYXJzZS1ncmFtLmMiCisgICAgICBjYXNlIDU0OiAvKiAidHlwZSIgKi8KKy8qIExpbmUgODEyIG9mIHlhY2MuYyAgKi8KKyNsaW5lIDIxNCAicGFyc2UtZ3JhbS55IgorCXsgZnByaW50ZiAoc3RkZXJyLCAiPCVzPiIsICgoKnl5dmFsdWVwKS51bmlxc3RyKSk7IH07CisvKiBMaW5lIDgxMiBvZiB5YWNjLmMgICovCisjbGluZSAxMTU0ICJwYXJzZS1ncmFtLmMiCiAJYnJlYWs7Ci0gICAgICBjYXNlIDQ3OiAvKiAiXCJpZGVudGlmaWVyOlwiIiAqLwotI2xpbmUgMTk2ICJwYXJzZS1ncmFtLnkiCi0JeyBmcHJpbnRmIChzdGRlcnIsICIlczoiLCAoeXl2YWx1ZXAtPnN5bWJvbCktPnRhZyk7IH07Ci0jbGluZSAxMDI5ICJwYXJzZS1ncmFtLmMiCisgICAgICBjYXNlIDcxOiAvKiBzeW1ib2wucHJlYyAqLworLyogTGluZSA4MTIgb2YgeWFjYy5jICAqLworI2xpbmUgMjIwICJwYXJzZS1ncmFtLnkiCisJeyBmcHJpbnRmIChzdGRlcnIsICIlcyIsICgoKnl5dmFsdWVwKS5zeW1ib2wpLT50YWcpOyB9OworLyogTGluZSA4MTIgb2YgeWFjYy5jICAqLworI2xpbmUgMTE2MSAicGFyc2UtZ3JhbS5jIgogCWJyZWFrOwotICAgICAgY2FzZSA0OTogLyogIlwiJXsuLi4lfVwiIiAqLwotI2xpbmUgMTgxICJwYXJzZS1ncmFtLnkiCi0JeyBmcHJpbnRmIChzdGRlcnIsICJ7XG4lc1xufSIsICh5eXZhbHVlcC0+Y2hhcnMpKTsgfTsKLSNsaW5lIDEwMzQgInBhcnNlLWdyYW0uYyIKKyAgICAgIGNhc2UgODQ6IC8qIHZhcmlhYmxlICovCisvKiBMaW5lIDgxMiBvZiB5YWNjLmMgICovCisjbGluZSAyMTEgInBhcnNlLWdyYW0ueSIKKwl7IGZwdXRzICgoKCp5eXZhbHVlcCkudW5pcXN0ciksIHN0ZGVycik7IH07CisvKiBMaW5lIDgxMiBvZiB5YWNjLmMgICovCisjbGluZSAxMTY4ICJwYXJzZS1ncmFtLmMiCiAJYnJlYWs7Ci0gICAgICBjYXNlIDUwOiAvKiAiXCJlcGlsb2d1ZVwiIiAqLwotI2xpbmUgMTgxICJwYXJzZS1ncmFtLnkiCi0JeyBmcHJpbnRmIChzdGRlcnIsICJ7XG4lc1xufSIsICh5eXZhbHVlcC0+Y2hhcnMpKTsgfTsKLSNsaW5lIDEwMzkgInBhcnNlLWdyYW0uYyIKKyAgICAgIGNhc2UgODU6IC8qIGNvbnRlbnQub3B0ICovCisvKiBMaW5lIDgxMiBvZiB5YWNjLmMgICovCisjbGluZSAyMDcgInBhcnNlLWdyYW0ueSIKKwl7IGZwcmludGYgKHN0ZGVyciwgIntcbiVzXG59IiwgKCgqeXl2YWx1ZXApLmNoYXJzKSk7IH07CisvKiBMaW5lIDgxMiBvZiB5YWNjLmMgICovCisjbGluZSAxMTc1ICJwYXJzZS1ncmFtLmMiCiAJYnJlYWs7Ci0gICAgICBjYXNlIDcyOiAvKiAic3ltYm9sIiAqLwotI2xpbmUgMTk0ICJwYXJzZS1ncmFtLnkiCi0JeyBmcHJpbnRmIChzdGRlcnIsICIlcyIsICh5eXZhbHVlcC0+c3ltYm9sKS0+dGFnKTsgfTsKLSNsaW5lIDEwNDQgInBhcnNlLWdyYW0uYyIKKyAgICAgIGNhc2UgODY6IC8qIGJyYWNlbGVzcyAqLworLyogTGluZSA4MTIgb2YgeWFjYy5jICAqLworI2xpbmUgMjA3ICJwYXJzZS1ncmFtLnkiCisJeyBmcHJpbnRmIChzdGRlcnIsICJ7XG4lc1xufSIsICgoKnl5dmFsdWVwKS5jaGFycykpOyB9OworLyogTGluZSA4MTIgb2YgeWFjYy5jICAqLworI2xpbmUgMTE4MiAicGFyc2UtZ3JhbS5jIgogCWJyZWFrOwotICAgICAgY2FzZSA3NTogLyogInN0cmluZ19hc19pZCIgKi8KLSNsaW5lIDE5NCAicGFyc2UtZ3JhbS55IgotCXsgZnByaW50ZiAoc3RkZXJyLCAiJXMiLCAoeXl2YWx1ZXAtPnN5bWJvbCktPnRhZyk7IH07Ci0jbGluZSAxMDQ5ICJwYXJzZS1ncmFtLmMiCisgICAgICBjYXNlIDg3OiAvKiBpZCAqLworLyogTGluZSA4MTIgb2YgeWFjYy5jICAqLworI2xpbmUgMjIwICJwYXJzZS1ncmFtLnkiCisJeyBmcHJpbnRmIChzdGRlcnIsICIlcyIsICgoKnl5dmFsdWVwKS5zeW1ib2wpLT50YWcpOyB9OworLyogTGluZSA4MTIgb2YgeWFjYy5jICAqLworI2xpbmUgMTE4OSAicGFyc2UtZ3JhbS5jIgogCWJyZWFrOwotICAgICAgY2FzZSA3NjogLyogInN0cmluZ19jb250ZW50IiAqLwotI2xpbmUgMTc5ICJwYXJzZS1ncmFtLnkiCi0JeyBmcHJpbnRmIChzdGRlcnIsICJcIiVzXCIiLCAoeXl2YWx1ZXAtPmNoYXJzKSk7IH07Ci0jbGluZSAxMDU0ICJwYXJzZS1ncmFtLmMiCisgICAgICBjYXNlIDg4OiAvKiBpZF9jb2xvbiAqLworLyogTGluZSA4MTIgb2YgeWFjYy5jICAqLworI2xpbmUgMjIxICJwYXJzZS1ncmFtLnkiCisJeyBmcHJpbnRmIChzdGRlcnIsICIlczoiLCAoKCp5eXZhbHVlcCkuc3ltYm9sKS0+dGFnKTsgfTsKKy8qIExpbmUgODEyIG9mIHlhY2MuYyAgKi8KKyNsaW5lIDExOTYgInBhcnNlLWdyYW0uYyIKKwlicmVhazsKKyAgICAgIGNhc2UgODk6IC8qIHN5bWJvbCAqLworLyogTGluZSA4MTIgb2YgeWFjYy5jICAqLworI2xpbmUgMjIwICJwYXJzZS1ncmFtLnkiCisJeyBmcHJpbnRmIChzdGRlcnIsICIlcyIsICgoKnl5dmFsdWVwKS5zeW1ib2wpLT50YWcpOyB9OworLyogTGluZSA4MTIgb2YgeWFjYy5jICAqLworI2xpbmUgMTIwMyAicGFyc2UtZ3JhbS5jIgorCWJyZWFrOworICAgICAgY2FzZSA5MDogLyogc3RyaW5nX2FzX2lkICovCisvKiBMaW5lIDgxMiBvZiB5YWNjLmMgICovCisjbGluZSAyMjAgInBhcnNlLWdyYW0ueSIKKwl7IGZwcmludGYgKHN0ZGVyciwgIiVzIiwgKCgqeXl2YWx1ZXApLnN5bWJvbCktPnRhZyk7IH07CisvKiBMaW5lIDgxMiBvZiB5YWNjLmMgICovCisjbGluZSAxMjEwICJwYXJzZS1ncmFtLmMiCiAJYnJlYWs7CiAgICAgICBkZWZhdWx0OgogCWJyZWFrOwpAQCAtMTA5NCwxNyArMTI1MCwyMCBAQAogI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCiAgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHN0YXRpYyB2b2lkCi15eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICpib3R0b20sIHl5dHlwZV9pbnQxNiAqdG9wKQoreXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqeXlib3R0b20sIHl5dHlwZV9pbnQxNiAqeXl0b3ApCiAjZWxzZQogc3RhdGljIHZvaWQKLXl5X3N0YWNrX3ByaW50IChib3R0b20sIHRvcCkKLSAgICB5eXR5cGVfaW50MTYgKmJvdHRvbTsKLSAgICB5eXR5cGVfaW50MTYgKnRvcDsKK3l5X3N0YWNrX3ByaW50ICh5eWJvdHRvbSwgeXl0b3ApCisgICAgeXl0eXBlX2ludDE2ICp5eWJvdHRvbTsKKyAgICB5eXR5cGVfaW50MTYgKnl5dG9wOwogI2VuZGlmCiB7CiAgIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7Ci0gIGZvciAoOyBib3R0b20gPD0gdG9wOyArK2JvdHRvbSkKLSAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsICpib3R0b20pOworICBmb3IgKDsgeXlib3R0b20gPD0geXl0b3A7IHl5Ym90dG9tKyspCisgICAgeworICAgICAgaW50IHl5Ym90ID0gKnl5Ym90dG9tOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCB5eWJvdCk7CisgICAgfQogICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CiB9CiAKQEAgLTExMzksMTEgKzEyOTgsMTEgQEAKICAgLyogVGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICovCiAgIGZvciAoeXlpID0gMDsgeXlpIDwgeXlucmhzOyB5eWkrKykKICAgICB7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7CiAgICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVsZV0gKyB5eWldLAogCQkgICAgICAgJih5eXZzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCiAJCSAgICAgICAsICYoeXlsc3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQkJICAgICAgICk7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwogICAgIH0KIH0KIApAQCAtMTE1NiwxMiArMTMxNSwxMiBAQAogLyogTm9uemVybyBtZWFucyBwcmludCBwYXJzZSB0cmFjZS4gIEl0IGlzIGxlZnQgdW5pbml0aWFsaXplZCBzbyB0aGF0CiAgICBtdWx0aXBsZSBwYXJzZXJzIGNhbiBjb2V4aXN0LiAgKi8KIGludCB5eWRlYnVnOwotI2Vsc2UgLyogIVlZREVCVUcgKi8KKyNlbHNlIC8qICFHUkFNX0RFQlVHICovCiAjIGRlZmluZSBZWURQUklOVEYoQXJncykKICMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQogIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCiAjIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkKLSNlbmRpZiAvKiAhWVlERUJVRyAqLworI2VuZGlmIC8qICFHUkFNX0RFQlVHICovCiAKIAogLyogWVlJTklUREVQVEggLS0gaW5pdGlhbCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFja3MuICAqLwpAQCAtMTE4MCw3ICsxMzM5LDIzOSBAQAogIyBkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAogI2VuZGlmCiAKLQwKKy8qIEdpdmVuIGEgc3RhdGUgc3RhY2sgc3VjaCB0aGF0ICpZWUJPVFRPTSBpcyBpdHMgYm90dG9tLCBzdWNoIHRoYXQKKyAgICpZWVRPUCBpcyBlaXRoZXIgaXRzIHRvcCBvciBpcyBZWVRPUF9FTVBUWSB0byBpbmRpY2F0ZSBhbiBlbXB0eQorICAgc3RhY2ssIGFuZCBzdWNoIHRoYXQgKllZQ0FQQUNJVFkgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIGl0CisgICBjYW4gaG9sZCB3aXRob3V0IGEgcmVhbGxvY2F0aW9uLCBtYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHJvb20gdG8KKyAgIHN0b3JlIFlZQUREIG1vcmUgZWxlbWVudHMuICBJZiBub3QsIGFsbG9jYXRlIGEgbmV3IHN0YWNrIHVzaW5nCisgICBZWVNUQUNLX0FMTE9DLCBjb3B5IHRoZSBleGlzdGluZyBlbGVtZW50cywgYW5kIGFkanVzdCAqWVlCT1RUT00sCisgICAqWVlUT1AsIGFuZCAqWVlDQVBBQ0lUWSB0byByZWZsZWN0IHRoZSBuZXcgY2FwYWNpdHkgYW5kIG1lbW9yeQorICAgbG9jYXRpb24uICBJZiAqWVlCT1RUT00gIT0gWVlCT1RUT01fTk9fRlJFRSwgdGhlbiBmcmVlIHRoZSBvbGQgc3RhY2sKKyAgIHVzaW5nIFlZU1RBQ0tfRlJFRS4gIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWwgb3IgaWYgbm8gcmVhbGxvY2F0aW9uIGlzCisgICByZXF1aXJlZC4gIFJldHVybiAxIGlmIG1lbW9yeSBpcyBleGhhdXN0ZWQuICAqLworc3RhdGljIGludAoreXlfbGFjX3N0YWNrX3JlYWxsb2MgKFlZU0laRV9UICp5eWNhcGFjaXR5LCBZWVNJWkVfVCB5eWFkZCwKKyNpZiBHUkFNX0RFQlVHCisgICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqeXlkZWJ1Z19wcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqeXlkZWJ1Z19zdWZmaXgsCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICB5eXR5cGVfaW50MTYgKip5eWJvdHRvbSwKKyAgICAgICAgICAgICAgICAgICAgICB5eXR5cGVfaW50MTYgKnl5Ym90dG9tX25vX2ZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgeXl0eXBlX2ludDE2ICoqeXl0b3AsIHl5dHlwZV9pbnQxNiAqeXl0b3BfZW1wdHkpCit7CisgIFlZU0laRV9UIHl5c2l6ZV9vbGQgPQorICAgICp5eXRvcCA9PSB5eXRvcF9lbXB0eSA/IDAgOiAqeXl0b3AgLSAqeXlib3R0b20gKyAxOworICBZWVNJWkVfVCB5eXNpemVfbmV3ID0geXlzaXplX29sZCArIHl5YWRkOworICBpZiAoKnl5Y2FwYWNpdHkgPCB5eXNpemVfbmV3KQorICAgIHsKKyAgICAgIFlZU0laRV9UIHl5YWxsb2MgPSAyICogeXlzaXplX25ldzsKKyAgICAgIHl5dHlwZV9pbnQxNiAqeXlib3R0b21fbmV3OworICAgICAgLyogVXNlIFlZTUFYREVQVEggZm9yIG1heGltdW0gc3RhY2sgc2l6ZSBnaXZlbiB0aGF0IHRoZSBzdGFjaworICAgICAgICAgc2hvdWxkIG5ldmVyIG5lZWQgdG8gZ3JvdyBsYXJnZXIgdGhhbiB0aGUgbWFpbiBzdGF0ZSBzdGFjaworICAgICAgICAgbmVlZHMgdG8gZ3JvdyB3aXRob3V0IExBQy4gICovCisgICAgICBpZiAoWVlNQVhERVBUSCA8IHl5c2l6ZV9uZXcpCisgICAgICAgIHsKKyAgICAgICAgICBZWURQUklOVEYgKChzdGRlcnIsICIlc21heCBzaXplIGV4Y2VlZGVkJXMiLCB5eWRlYnVnX3ByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICB5eWRlYnVnX3N1ZmZpeCkpOworICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICBpZiAoWVlNQVhERVBUSCA8IHl5YWxsb2MpCisgICAgICAgIHl5YWxsb2MgPSBZWU1BWERFUFRIOworICAgICAgeXlib3R0b21fbmV3ID0KKyAgICAgICAgKHl5dHlwZV9pbnQxNiopIFlZU1RBQ0tfQUxMT0MgKHl5YWxsb2MgKiBzaXplb2YgKnl5Ym90dG9tX25ldyk7CisgICAgICBpZiAoIXl5Ym90dG9tX25ldykKKyAgICAgICAgeworICAgICAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIiVzcmVhbGxvYyBmYWlsZWQlcyIsIHl5ZGVidWdfcHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgIHl5ZGVidWdfc3VmZml4KSk7CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgIGlmICgqeXl0b3AgIT0geXl0b3BfZW1wdHkpCisgICAgICAgIHsKKyAgICAgICAgICBZWUNPUFkgKHl5Ym90dG9tX25ldywgKnl5Ym90dG9tLCB5eXNpemVfb2xkKTsKKyAgICAgICAgICAqeXl0b3AgPSB5eWJvdHRvbV9uZXcgKyAoeXlzaXplX29sZCAtIDEpOworICAgICAgICB9CisgICAgICBpZiAoKnl5Ym90dG9tICE9IHl5Ym90dG9tX25vX2ZyZWUpCisgICAgICAgIFlZU1RBQ0tfRlJFRSAoKnl5Ym90dG9tKTsKKyAgICAgICp5eWJvdHRvbSA9IHl5Ym90dG9tX25ldzsKKyAgICAgICp5eWNhcGFjaXR5ID0geXlhbGxvYzsKKyAgICB9CisgIHJldHVybiAwOworfQorCisvKiBFc3RhYmxpc2ggdGhlIGluaXRpYWwgY29udGV4dCBmb3IgdGhlIGN1cnJlbnQgbG9va2FoZWFkIGlmIG5vIGluaXRpYWwKKyAgIGNvbnRleHQgaXMgY3VycmVudGx5IGVzdGFibGlzaGVkLgorCisgICBXZSBkZWZpbmUgYSBjb250ZXh0IGFzIGEgc25hcHNob3Qgb2YgdGhlIHBhcnNlciBzdGFja3MuICBXZSBkZWZpbmUKKyAgIHRoZSBpbml0aWFsIGNvbnRleHQgZm9yIGEgbG9va2FoZWFkIGFzIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZQorICAgcGFyc2VyIGluaXRpYWxseSBleGFtaW5lcyB0aGF0IGxvb2thaGVhZCBpbiBvcmRlciB0byBzZWxlY3QgYQorICAgc3ludGFjdGljIGFjdGlvbi4gIFRodXMsIGlmIHRoZSBsb29rYWhlYWQgZXZlbnR1YWxseSBwcm92ZXMKKyAgIHN5bnRhY3RpY2FsbHkgdW5hY2NlcHRhYmxlIChwb3NzaWJseSBpbiBhIGxhdGVyIGNvbnRleHQgcmVhY2hlZCB2aWEgYQorICAgc2VyaWVzIG9mIHJlZHVjdGlvbnMpLCB0aGUgaW5pdGlhbCBjb250ZXh0IGNhbiBiZSB1c2VkIHRvIGRldGVybWluZQorICAgdGhlIGV4YWN0IHNldCBvZiB0b2tlbnMgdGhhdCB3b3VsZCBiZSBzeW50YWN0aWNhbGx5IGFjY2VwdGFibGUgaW4gdGhlCisgICBsb29rYWhlYWQncyBwbGFjZS4gIE1vcmVvdmVyLCBpdCBpcyB0aGUgY29udGV4dCBhZnRlciB3aGljaCBhbnkKKyAgIGZ1cnRoZXIgc2VtYW50aWMgYWN0aW9ucyB3b3VsZCBiZSBlcnJvbmVvdXMgYmVjYXVzZSB0aGV5IHdvdWxkIGJlCisgICBkZXRlcm1pbmVkIGJ5IGEgc3ludGFjdGljYWxseSB1bmFjY2VwdGFibGUgdG9rZW4uCisKKyAgIFlZX0xBQ19FU1RBQkxJU0ggc2hvdWxkIGJlIGludm9rZWQgd2hlbiBhIHJlZHVjdGlvbiBpcyBhYm91dCB0byBiZQorICAgcGVyZm9ybWVkIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSAod2hpY2gsIGZvciB0aGUgcHVycG9zZXMgb2YgTEFDLAorICAgaW5jbHVkZXMgY29uc2lzdGVudCBzdGF0ZXMgdGhhdCBkb24ndCBrbm93IHRoZXkncmUgY29uc2lzdGVudCBiZWNhdXNlCisgICB0aGVpciBkZWZhdWx0IHJlZHVjdGlvbnMgaGF2ZSBiZWVuIGRpc2FibGVkKS4gIElmZiB0aGVyZSBpcyBhCisgICBsb29rYWhlYWQgdG9rZW4sIGl0IHNob3VsZCBhbHNvIGJlIGludm9rZWQgYmVmb3JlIHJlcG9ydGluZyBhIHN5bnRheAorICAgZXJyb3IuICBUaGlzIGxhdHRlciBjYXNlIGlzIGZvciB0aGUgc2FrZSBvZiB0aGUgZGVidWdnaW5nIG91dHB1dC4KKworICAgRm9yIHBhcnNlLmxhYz1mdWxsLCB0aGUgaW1wbGVtZW50YXRpb24gb2YgWVlfTEFDX0VTVEFCTElTSCBpcyBhcworICAgZm9sbG93cy4gIElmIG5vIGluaXRpYWwgY29udGV4dCBpcyBjdXJyZW50bHkgZXN0YWJsaXNoZWQgZm9yIHRoZQorICAgY3VycmVudCBsb29rYWhlYWQsIHRoZW4gY2hlY2sgaWYgdGhhdCBsb29rYWhlYWQgY2FuIGV2ZW50dWFsbHkgYmUKKyAgIHNoaWZ0ZWQgaWYgc3ludGFjdGljIGFjdGlvbnMgY29udGludWUgZnJvbSB0aGUgY3VycmVudCBjb250ZXh0LgorICAgUmVwb3J0IGEgc3ludGF4IGVycm9yIGlmIGl0IGNhbm5vdC4gICovCisjZGVmaW5lIFlZX0xBQ19FU1RBQkxJU0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAoIXl5X2xhY19lc3RhYmxpc2hlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgIkxBQzogaW5pdGlhbCBjb250ZXh0IGVzdGFibGlzaGVkIGZvciAlc1xuIiwgICBcCisgICAgICAgICAgICAgICAgICB5eXRuYW1lW3l5dG9rZW5dKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHl5X2xhY19lc3RhYmxpc2hlZCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGludCB5eV9sYWNfc3RhdHVzID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB5eV9sYWMgKHl5ZXNhLCAmeXllcywgJnl5ZXNfY2FwYWNpdHksIHl5c3NwLCB5eXRva2VuKTsgXAorICAgICAgICBpZiAoeXlfbGFjX3N0YXR1cyA9PSAyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHl5X2xhY19zdGF0dXMgPT0gMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdvdG8geXllcnJsYWI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKy8qIERpc2NhcmQgYW55IHByZXZpb3VzIGluaXRpYWwgbG9va2FoZWFkIGNvbnRleHQgYmVjYXVzZSBvZiBFdmVudCwKKyAgIHdoaWNoIG1heSBiZSBhIGxvb2thaGVhZCBjaGFuZ2Ugb3IgYW4gaW52YWxpZGF0aW9uIG9mIHRoZSBjdXJyZW50bHkKKyAgIGVzdGFibGlzaGVkIGluaXRpYWwgY29udGV4dCBmb3IgdGhlIGN1cnJlbnQgbG9va2FoZWFkLgorCisgICBUaGUgbW9zdCBjb21tb24gZXhhbXBsZSBvZiBhIGxvb2thaGVhZCBjaGFuZ2UgaXMgYSBzaGlmdC4gIEFuIGV4YW1wbGUKKyAgIG9mIGJvdGggY2FzZXMgaXMgc3ludGF4IGVycm9yIHJlY292ZXJ5LiAgVGhhdCBpcywgYSBzeW50YXggZXJyb3IKKyAgIG9jY3VycyB3aGVuIHRoZSBsb29rYWhlYWQgaXMgc3ludGFjdGljYWxseSBlcnJvbmVvdXMgZm9yIHRoZQorICAgY3VycmVudGx5IGVzdGFibGlzaGVkIGluaXRpYWwgY29udGV4dCwgc28gZXJyb3IgcmVjb3ZlcnkgbWFuaXB1bGF0ZXMKKyAgIHRoZSBwYXJzZXIgc3RhY2tzIHRvIHRyeSB0byBmaW5kIGEgbmV3IGluaXRpYWwgY29udGV4dCBpbiB3aGljaCB0aGUKKyAgIGN1cnJlbnQgbG9va2FoZWFkIGlzIHN5bnRhY3RpY2FsbHkgYWNjZXB0YWJsZS4gIElmIGl0IGZhaWxzIHRvIGZpbmQKKyAgIHN1Y2ggYSBjb250ZXh0LCBpdCBkaXNjYXJkcyB0aGUgbG9va2FoZWFkLiAgKi8KKyNpZiBHUkFNX0RFQlVHCisjIGRlZmluZSBZWV9MQUNfRElTQ0FSRChFdmVudCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYgKHl5X2xhY19lc3RhYmxpc2hlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJMQUM6IGluaXRpYWwgY29udGV4dCBkaXNjYXJkZWQgZHVlIHRvICIgICAgICBcCisgICAgICAgICAgICAgICAgICAgRXZlbnQgIlxuIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgeXlfbGFjX2VzdGFibGlzaGVkID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlIChZWUlEICgwKSkKKyNlbHNlCisjIGRlZmluZSBZWV9MQUNfRElTQ0FSRChFdmVudCkgeXlfbGFjX2VzdGFibGlzaGVkID0gMAorI2VuZGlmCisKKy8qIEdpdmVuIHRoZSBzdGFjayB3aG9zZSB0b3AgaXMgKllZU1NQLCByZXR1cm4gMCBpZmYgWVlUT0tFTiBjYW4KKyAgIGV2ZW50dWFsbHkgKGFmdGVyIHBlcmhhcHMgc29tZSByZWR1Y3Rpb25zKSBiZSBzaGlmdGVkLCByZXR1cm4gMSBpZgorICAgbm90LCBvciByZXR1cm4gMiBpZiBtZW1vcnkgaXMgZXhoYXVzdGVkLiAgQXMgcHJlY29uZGl0aW9ucyBhbmQKKyAgIHBvc3Rjb25kaXRpb25zOiAqWVlFU19DQVBBQ0lUWSBpcyB0aGUgYWxsb2NhdGVkIHNpemUgb2YgdGhlIGFycmF5IHRvCisgICB3aGljaCAqWVlFUyBwb2ludHMsIGFuZCBlaXRoZXIgKllZRVMgPSBZWUVTQSBvciAqWVlFUyBwb2ludHMgdG8gYW4KKyAgIGFycmF5IGFsbG9jYXRlZCB3aXRoIFlZU1RBQ0tfQUxMT0MuICB5eV9sYWMgbWF5IG92ZXJ3cml0ZSB0aGUKKyAgIGNvbnRlbnRzIG9mIGVpdGhlciBhcnJheSwgYWx0ZXIgKllZRVMgYW5kICpZWUVTX0NBUEFDSVRZLCBhbmQgZnJlZQorICAgYW55IG9sZCAqWVlFUyBvdGhlciB0aGFuIFlZRVNBLiAgKi8KK3N0YXRpYyBpbnQKK3l5X2xhYyAoeXl0eXBlX2ludDE2ICp5eWVzYSwgeXl0eXBlX2ludDE2ICoqeXllcywKKyAgICAgICAgWVlTSVpFX1QgKnl5ZXNfY2FwYWNpdHksIHl5dHlwZV9pbnQxNiAqeXlzc3AsIGludCB5eXRva2VuKQoreworICB5eXR5cGVfaW50MTYgKnl5ZXNfcHJldiA9IHl5c3NwOworICB5eXR5cGVfaW50MTYgKnl5ZXNwID0geXllc19wcmV2OworICBZWURQUklOVEYgKChzdGRlcnIsICJMQUM6IGNoZWNraW5nIGxvb2thaGVhZCAlczoiLCB5eXRuYW1lW3l5dG9rZW5dKSk7CisgIGlmICh5eXRva2VuID09IFlZVU5ERUZUT0spCisgICAgeworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiIEFsd2F5cyBFcnJcbiIpKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgaW50IHl5cnVsZSA9IHl5cGFjdFsqeXllc3BdOworICAgICAgaWYgKHl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eXJ1bGUpCisgICAgICAgICAgfHwgKHl5cnVsZSArPSB5eXRva2VuKSA8IDAgfHwgWVlMQVNUIDwgeXlydWxlCisgICAgICAgICAgfHwgeXljaGVja1t5eXJ1bGVdICE9IHl5dG9rZW4pCisgICAgICAgIHsKKyAgICAgICAgICB5eXJ1bGUgPSB5eWRlZmFjdFsqeXllc3BdOworICAgICAgICAgIGlmICh5eXJ1bGUgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiIEVyclxuIikpOworICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgeXlydWxlID0geXl0YWJsZVt5eXJ1bGVdOworICAgICAgICAgIGlmICh5eXRhYmxlX3ZhbHVlX2lzX2Vycm9yICh5eXJ1bGUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBZWURQUklOVEYgKChzdGRlcnIsICIgRXJyXG4iKSk7CisgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmICgwIDwgeXlydWxlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBZWURQUklOVEYgKChzdGRlcnIsICIgUyVkXG4iLCB5eXJ1bGUpKTsKKyAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgeXlydWxlID0gLXl5cnVsZTsKKyAgICAgICAgfQorICAgICAgeworICAgICAgICBZWVNJWkVfVCB5eWxlbiA9IHl5cjJbeXlydWxlXTsKKyAgICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiIFIlZCIsIHl5cnVsZSAtIDEpKTsKKyAgICAgICAgaWYgKHl5ZXNwICE9IHl5ZXNfcHJldikKKyAgICAgICAgICB7CisgICAgICAgICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eWVzcCAtICp5eWVzICsgMTsKKyAgICAgICAgICAgIGlmICh5eWxlbiA8IHl5c2l6ZSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHl5ZXNwIC09IHl5bGVuOworICAgICAgICAgICAgICAgIHl5bGVuID0gMDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgeXlsZW4gLT0geXlzaXplOworICAgICAgICAgICAgICAgIHl5ZXNwID0geXllc19wcmV2OworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICBpZiAoeXlsZW4pCisgICAgICAgICAgeXllc3AgPSB5eWVzX3ByZXYgLT0geXlsZW47CisgICAgICB9CisgICAgICB7CisgICAgICAgIGludCB5eXN0YXRlOworICAgICAgICB7CisgICAgICAgICAgaW50IHl5bGhzID0geXlyMVt5eXJ1bGVdIC0gWVlOVE9LRU5TOworICAgICAgICAgIHl5c3RhdGUgPSB5eXBnb3RvW3l5bGhzXSArICp5eWVzcDsKKyAgICAgICAgICBpZiAoeXlzdGF0ZSA8IDAgfHwgWVlMQVNUIDwgeXlzdGF0ZQorICAgICAgICAgICAgICB8fCB5eWNoZWNrW3l5c3RhdGVdICE9ICp5eWVzcCkKKyAgICAgICAgICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9beXlsaHNdOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHl5c3RhdGUgPSB5eXRhYmxlW3l5c3RhdGVdOworICAgICAgICB9CisgICAgICAgIGlmICh5eWVzcCA9PSB5eWVzX3ByZXYpCisgICAgICAgICAgeworICAgICAgICAgICAgeXllc3AgPSAqeXllczsKKyAgICAgICAgICAgICp5eWVzcCA9IHl5c3RhdGU7CisgICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKHl5X2xhY19zdGFja19yZWFsbG9jICh5eWVzX2NhcGFjaXR5LCAxLAorI2lmIEdSQU1fREVCVUcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAoIiwgIikiLAorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5ZXMsIHl5ZXNhLCAmeXllc3AsIHl5ZXNfcHJldikpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJcbiIpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgKisreXllc3AgPSB5eXN0YXRlOworICAgICAgICAgIH0KKyAgICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiIEclZCIsIHl5c3RhdGUpKTsKKyAgICAgIH0KKyAgICB9Cit9CisKIAogI2lmIFlZRVJST1JfVkVSQk9TRQogCkBAIC0xMjgzLDExNSArMTY3NCwxNDcgQEAKIH0KICMgZW5kaWYKIAotLyogQ29weSBpbnRvIFlZUkVTVUxUIGFuIGVycm9yIG1lc3NhZ2UgYWJvdXQgdGhlIHVuZXhwZWN0ZWQgdG9rZW4KLSAgIFlZQ0hBUiB3aGlsZSBpbiBzdGF0ZSBZWVNUQVRFLiAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkLAotICAgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUuICBJZiBZWVJFU1VMVCBpcyBudWxsLCBkbyBub3QKLSAgIGNvcHkgYW55dGhpbmc7IGp1c3QgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZQotICAgY29waWVkLiAgQXMgYSBzcGVjaWFsIGNhc2UsIHJldHVybiAwIGlmIGFuIG9yZGluYXJ5ICJzeW50YXggZXJyb3IiCi0gICBtZXNzYWdlIHdpbGwgZG8uICBSZXR1cm4gWVlTSVpFX01BWElNVU0gaWYgb3ZlcmZsb3cgb2NjdXJzIGR1cmluZwotICAgc2l6ZSBjYWxjdWxhdGlvbi4gICovCi1zdGF0aWMgWVlTSVpFX1QKLXl5c3ludGF4X2Vycm9yIChjaGFyICp5eXJlc3VsdCwgaW50IHl5c3RhdGUsIGludCB5eWNoYXIpCisvKiBDb3B5IGludG8gKllZTVNHLCB3aGljaCBpcyBvZiBzaXplICpZWU1TR19BTExPQywgYW4gZXJyb3IgbWVzc2FnZQorICAgYWJvdXQgdGhlIHVuZXhwZWN0ZWQgdG9rZW4gWVlUT0tFTiBmb3IgdGhlIHN0YXRlIHN0YWNrIHdob3NlIHRvcCBpcworICAgWVlTU1AuICBJbiBvcmRlciB0byBzZWUgaWYgYSBwYXJ0aWN1bGFyIHRva2VuIFQgaXMgYQorICAgdmFsaWQgbG9vYWtoZWFkLCBpbnZva2UgeXlfbGFjIChZWUVTQSwgWVlFUywgWVlFU19DQVBBQ0lUWSwgWVlTU1AsIFQpLgorCisgICBSZXR1cm4gMCBpZiAqWVlNU0cgd2FzIHN1Y2Nlc3NmdWxseSB3cml0dGVuLiAgUmV0dXJuIDEgaWYgKllZTVNHIGlzCisgICBub3QgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIG1lc3NhZ2UuICBJbiB0aGF0IGNhc2UsIGFsc28gc2V0CisgICAqWVlNU0dfQUxMT0MgdG8gdGhlIHJlcXVpcmVkIG51bWJlciBvZiBieXRlcy4gIFJldHVybiAyIGlmIHRoZQorICAgcmVxdWlyZWQgbnVtYmVyIG9mIGJ5dGVzIGlzIHRvbyBsYXJnZSB0byBzdG9yZSBvciBpZgorICAgeXlfbGFjIHJldHVybmVkIDIuICAqLworc3RhdGljIGludAoreXlzeW50YXhfZXJyb3IgKFlZU0laRV9UICp5eW1zZ19hbGxvYywgY2hhciAqKnl5bXNnLAorICAgICAgICAgICAgICAgIHl5dHlwZV9pbnQxNiAqeXllc2EsIHl5dHlwZV9pbnQxNiAqKnl5ZXMsCisgICAgICAgICAgICAgICAgWVlTSVpFX1QgKnl5ZXNfY2FwYWNpdHksIHl5dHlwZV9pbnQxNiAqeXlzc3AsIGludCB5eXRva2VuKQogewotICBpbnQgeXluID0geXlwYWN0W3l5c3RhdGVdOworICBZWVNJWkVfVCB5eXNpemUwID0geXl0bmFtZXJyIChZWV9OVUxMLCB5eXRuYW1lW3l5dG9rZW5dKTsKKyAgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsKKyAgWVlTSVpFX1QgeXlzaXplMTsKKyAgZW51bSB7IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0gPSA1IH07CisgIC8qIEludGVybmF0aW9uYWxpemVkIGZvcm1hdCBzdHJpbmcuICovCisgIGNvbnN0IGNoYXIgKnl5Zm9ybWF0ID0gWVlfTlVMTDsKKyAgLyogQXJndW1lbnRzIG9mIHl5Zm9ybWF0LiAqLworICBjaGFyIGNvbnN0ICp5eWFyZ1tZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNXTsKKyAgLyogTnVtYmVyIG9mIHJlcG9ydGVkIHRva2VucyAob25lIGZvciB0aGUgInVuZXhwZWN0ZWQiLCBvbmUgcGVyCisgICAgICJleHBlY3RlZCIpLiAqLworICBpbnQgeXljb3VudCA9IDA7CiAKLSAgaWYgKCEgKFlZUEFDVF9OSU5GIDwgeXluICYmIHl5biA8PSBZWUxBU1QpKQotICAgIHJldHVybiAwOwotICBlbHNlCisgIC8qIFRoZXJlIGFyZSBtYW55IHBvc3NpYmlsaXRpZXMgaGVyZSB0byBjb25zaWRlcjoKKyAgICAgLSBBc3N1bWUgWVlGQUlMIGlzIG5vdCB1c2VkLiAgSXQncyB0b28gZmxhd2VkIHRvIGNvbnNpZGVyLiAgU2VlCisgICAgICAgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDktMTIvbXNnMDAwMjQuaHRtbD4KKyAgICAgICBmb3IgZGV0YWlscy4gIFlZRVJST1IgaXMgZmluZSBhcyBpdCBkb2VzIG5vdCBpbnZva2UgdGhpcworICAgICAgIGZ1bmN0aW9uLgorICAgICAtIElmIHRoaXMgc3RhdGUgaXMgYSBjb25zaXN0ZW50IHN0YXRlIHdpdGggYSBkZWZhdWx0IGFjdGlvbiwgdGhlbgorICAgICAgIHRoZSBvbmx5IHdheSB0aGlzIGZ1bmN0aW9uIHdhcyBpbnZva2VkIGlzIGlmIHRoZSBkZWZhdWx0IGFjdGlvbgorICAgICAgIGlzIGFuIGVycm9yIGFjdGlvbi4gIEluIHRoYXQgY2FzZSwgZG9uJ3QgY2hlY2sgZm9yIGV4cGVjdGVkCisgICAgICAgdG9rZW5zIGJlY2F1c2UgdGhlcmUgYXJlIG5vbmUuCisgICAgIC0gVGhlIG9ubHkgd2F5IHRoZXJlIGNhbiBiZSBubyBsb29rYWhlYWQgcHJlc2VudCAoaW4geXljaGFyKSBpcyBpZgorICAgICAgIHRoaXMgc3RhdGUgaXMgYSBjb25zaXN0ZW50IHN0YXRlIHdpdGggYSBkZWZhdWx0IGFjdGlvbi4gIFRodXMsCisgICAgICAgZGV0ZWN0aW5nIHRoZSBhYnNlbmNlIG9mIGEgbG9va2FoZWFkIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZXJtaW5lCisgICAgICAgdGhhdCB0aGVyZSBpcyBubyB1bmV4cGVjdGVkIG9yIGV4cGVjdGVkIHRva2VuIHRvIHJlcG9ydC4gIEluIHRoYXQKKyAgICAgICBjYXNlLCBqdXN0IHJlcG9ydCBhIHNpbXBsZSAic3ludGF4IGVycm9yIi4KKyAgICAgLSBEb24ndCBhc3N1bWUgdGhlcmUgaXNuJ3QgYSBsb29rYWhlYWQganVzdCBiZWNhdXNlIHRoaXMgc3RhdGUgaXMgYQorICAgICAgIGNvbnNpc3RlbnQgc3RhdGUgd2l0aCBhIGRlZmF1bHQgYWN0aW9uLiAgVGhlcmUgbWlnaHQgaGF2ZSBiZWVuIGEKKyAgICAgICBwcmV2aW91cyBpbmNvbnNpc3RlbnQgc3RhdGUsIGNvbnNpc3RlbnQgc3RhdGUgd2l0aCBhIG5vbi1kZWZhdWx0CisgICAgICAgYWN0aW9uLCBvciB1c2VyIHNlbWFudGljIGFjdGlvbiB0aGF0IG1hbmlwdWxhdGVkIHl5Y2hhci4KKyAgICAgICBJbiB0aGUgZmlyc3QgdHdvIGNhc2VzLCBpdCBtaWdodCBhcHBlYXIgdGhhdCB0aGUgY3VycmVudCBzeW50YXgKKyAgICAgICBlcnJvciBzaG91bGQgaGF2ZSBiZWVuIGRldGVjdGVkIGluIHRoZSBwcmV2aW91cyBzdGF0ZSB3aGVuIHl5X2xhYworICAgICAgIHdhcyBpbnZva2VkLiAgSG93ZXZlciwgYXQgdGhhdCB0aW1lLCB0aGVyZSBtaWdodCBoYXZlIGJlZW4gYQorICAgICAgIGRpZmZlcmVudCBzeW50YXggZXJyb3IgdGhhdCBkaXNjYXJkZWQgYSBkaWZmZXJlbnQgaW5pdGlhbCBjb250ZXh0CisgICAgICAgZHVyaW5nIGVycm9yIHJlY292ZXJ5LCBsZWF2aW5nIGJlaGluZCB0aGUgY3VycmVudCBsb29rYWhlYWQuCisgICovCisgIGlmICh5eXRva2VuICE9IFlZRU1QVFkpCiAgICAgewotICAgICAgaW50IHl5dHlwZSA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwotICAgICAgWVlTSVpFX1QgeXlzaXplMCA9IHl5dG5hbWVyciAoMCwgeXl0bmFtZVt5eXR5cGVdKTsKLSAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c2l6ZTA7Ci0gICAgICBZWVNJWkVfVCB5eXNpemUxOwotICAgICAgaW50IHl5c2l6ZV9vdmVyZmxvdyA9IDA7Ci0gICAgICBlbnVtIHsgWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSA9IDUgfTsKLSAgICAgIGNoYXIgY29uc3QgKnl5YXJnW1lZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU1dOwotICAgICAgaW50IHl5eDsKKyAgICAgIGludCB5eW4gPSB5eXBhY3RbKnl5c3NwXTsKKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIkNvbnN0cnVjdGluZyBzeW50YXggZXJyb3IgbWVzc2FnZVxuIikpOworICAgICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVbeXl0b2tlbl07CisgICAgICBpZiAoIXl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQorICAgICAgICB7CisgICAgICAgICAgaW50IHl5eDsKIAotIyBpZiAwCi0gICAgICAvKiBUaGlzIGlzIHNvIHhnZXR0ZXh0IHNlZXMgdGhlIHRyYW5zbGF0YWJsZSBmb3JtYXRzIHRoYXQgYXJlCi0JIGNvbnN0cnVjdGVkIG9uIHRoZSBmbHkuICAqLwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiKTsKLSAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMiKTsKLSAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiKTsKLSAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiKTsKLSAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiKTsKKyAgICAgICAgICBmb3IgKHl5eCA9IDA7IHl5eCA8IFlZTlRPS0VOUzsgKyt5eXgpCisgICAgICAgICAgICBpZiAoeXl4ICE9IFlZVEVSUk9SICYmIHl5eCAhPSBZWVVOREVGVE9LKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgaW50IHl5X2xhY19zdGF0dXMgPSB5eV9sYWMgKHl5ZXNhLCB5eWVzLCB5eWVzX2NhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5c3NwLCB5eXgpOworICAgICAgICAgICAgICAgICAgaWYgKHl5X2xhY19zdGF0dXMgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgICAgICAgICAgICBpZiAoeXlfbGFjX3N0YXR1cyA9PSAxKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHl5Y291bnQgPT0gWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgeXljb3VudCA9IDE7CisgICAgICAgICAgICAgICAgICAgIHl5c2l6ZSA9IHl5c2l6ZTA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHl5YXJnW3l5Y291bnQrK10gPSB5eXRuYW1lW3l5eF07CisgICAgICAgICAgICAgICAgeXlzaXplMSA9IHl5c2l6ZSArIHl5dG5hbWVyciAoWVlfTlVMTCwgeXl0bmFtZVt5eXhdKTsKKyAgICAgICAgICAgICAgICBpZiAoISAoeXlzaXplIDw9IHl5c2l6ZTEKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgeXlzaXplMSA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQorICAgICAgICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgICAgICAgICAgeXlzaXplID0geXlzaXplMTsKKyAgICAgICAgICAgICAgfQorICAgICAgICB9CisjIGlmIEdSQU1fREVCVUcKKyAgICAgIGVsc2UgaWYgKHl5ZGVidWcpCisgICAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiTm8gZXhwZWN0ZWQgdG9rZW5zLlxuIik7CiAjIGVuZGlmCi0gICAgICBjaGFyICp5eWZtdDsKLSAgICAgIGNoYXIgY29uc3QgKnl5ZjsKLSAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5dW5leHBlY3RlZFtdID0gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyI7Ci0gICAgICBzdGF0aWMgY2hhciBjb25zdCB5eWV4cGVjdGluZ1tdID0gIiwgZXhwZWN0aW5nICVzIjsKLSAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5b3JbXSA9ICIgb3IgJXMiOwotICAgICAgY2hhciB5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkCi0JCSAgICArIHNpemVvZiB5eWV4cGVjdGluZyAtIDEKLQkJICAgICsgKChZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNIC0gMikKLQkJICAgICAgICogKHNpemVvZiB5eW9yIC0gMSkpXTsKLSAgICAgIGNoYXIgY29uc3QgKnl5cHJlZml4ID0geXlleHBlY3Rpbmc7Ci0KLSAgICAgIC8qIFN0YXJ0IFlZWCBhdCAtWVlOIGlmIG5lZ2F0aXZlIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4KLQkgWVlDSEVDSy4gICovCi0gICAgICBpbnQgeXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5biA6IDA7Ci0KLSAgICAgIC8qIFN0YXkgd2l0aGluIGJvdW5kcyBvZiBib3RoIHl5Y2hlY2sgYW5kIHl5dG5hbWUuICAqLwotICAgICAgaW50IHl5Y2hlY2tsaW0gPSBZWUxBU1QgLSB5eW4gKyAxOwotICAgICAgaW50IHl5eGVuZCA9IHl5Y2hlY2tsaW0gPCBZWU5UT0tFTlMgPyB5eWNoZWNrbGltIDogWVlOVE9LRU5TOwotICAgICAgaW50IHl5Y291bnQgPSAxOwotCi0gICAgICB5eWFyZ1swXSA9IHl5dG5hbWVbeXl0eXBlXTsKLSAgICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm9ybWF0LCB5eXVuZXhwZWN0ZWQpOwotCi0gICAgICBmb3IgKHl5eCA9IHl5eGJlZ2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQotCWlmICh5eWNoZWNrW3l5eCArIHl5bl0gPT0geXl4ICYmIHl5eCAhPSBZWVRFUlJPUikKLQkgIHsKLQkgICAgaWYgKHl5Y291bnQgPT0gWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSkKLQkgICAgICB7Ci0JCXl5Y291bnQgPSAxOwotCQl5eXNpemUgPSB5eXNpemUwOwotCQl5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkIC0gMV0gPSAnXDAnOwotCQlicmVhazsKLQkgICAgICB9Ci0JICAgIHl5YXJnW3l5Y291bnQrK10gPSB5eXRuYW1lW3l5eF07Ci0JICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl4XSk7Ci0JICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7Ci0JICAgIHl5c2l6ZSA9IHl5c2l6ZTE7Ci0JICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm10LCB5eXByZWZpeCk7Ci0JICAgIHl5cHJlZml4ID0geXlvcjsKLQkgIH0KLQotICAgICAgeXlmID0gWVlfKHl5Zm9ybWF0KTsKLSAgICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXN0cmxlbiAoeXlmKTsKLSAgICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7Ci0gICAgICB5eXNpemUgPSB5eXNpemUxOwotCi0gICAgICBpZiAoeXlzaXplX292ZXJmbG93KQotCXJldHVybiBZWVNJWkVfTUFYSU1VTTsKLQotICAgICAgaWYgKHl5cmVzdWx0KQotCXsKLQkgIC8qIEF2b2lkIHNwcmludGYsIGFzIHRoYXQgaW5mcmluZ2VzIG9uIHRoZSB1c2VyJ3MgbmFtZSBzcGFjZS4KLQkgICAgIERvbid0IGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGV2ZW4gaWYgdGhlIHRyYW5zbGF0aW9uCi0JICAgICBwcm9kdWNlZCBhIHN0cmluZyB3aXRoIHRoZSB3cm9uZyBudW1iZXIgb2YgIiVzInMuICAqLwotCSAgY2hhciAqeXlwID0geXlyZXN1bHQ7Ci0JICBpbnQgeXlpID0gMDsKLQkgIHdoaWxlICgoKnl5cCA9ICp5eWYpICE9ICdcMCcpCi0JICAgIHsKLQkgICAgICBpZiAoKnl5cCA9PSAnJScgJiYgeXlmWzFdID09ICdzJyAmJiB5eWkgPCB5eWNvdW50KQotCQl7Ci0JCSAgeXlwICs9IHl5dG5hbWVyciAoeXlwLCB5eWFyZ1t5eWkrK10pOwotCQkgIHl5ZiArPSAyOwotCQl9Ci0JICAgICAgZWxzZQotCQl7Ci0JCSAgeXlwKys7Ci0JCSAgeXlmKys7Ci0JCX0KLQkgICAgfQotCX0KLSAgICAgIHJldHVybiB5eXNpemU7CiAgICAgfQorCisgIHN3aXRjaCAoeXljb3VudCkKKyAgICB7CisjIGRlZmluZSBZWUNBU0VfKE4sIFMpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGNhc2UgTjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWZvcm1hdCA9IFM7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBicmVhaworICAgICAgWVlDQVNFXygwLCBZWV8oInN5bnRheCBlcnJvciIpKTsKKyAgICAgIFlZQ0FTRV8oMSwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiKSk7CisgICAgICBZWUNBU0VfKDIsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMiKSk7CisgICAgICBZWUNBU0VfKDMsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiKSk7CisgICAgICBZWUNBU0VfKDQsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiKSk7CisgICAgICBZWUNBU0VfKDUsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiKSk7CisjIHVuZGVmIFlZQ0FTRV8KKyAgICB9CisKKyAgeXlzaXplMSA9IHl5c2l6ZSArIHl5c3RybGVuICh5eWZvcm1hdCk7CisgIGlmICghICh5eXNpemUgPD0geXlzaXplMSAmJiB5eXNpemUxIDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpCisgICAgcmV0dXJuIDI7CisgIHl5c2l6ZSA9IHl5c2l6ZTE7CisKKyAgaWYgKCp5eW1zZ19hbGxvYyA8IHl5c2l6ZSkKKyAgICB7CisgICAgICAqeXltc2dfYWxsb2MgPSAyICogeXlzaXplOworICAgICAgaWYgKCEgKHl5c2l6ZSA8PSAqeXltc2dfYWxsb2MKKyAgICAgICAgICAgICAmJiAqeXltc2dfYWxsb2MgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkKKyAgICAgICAgKnl5bXNnX2FsbG9jID0gWVlTVEFDS19BTExPQ19NQVhJTVVNOworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgIC8qIEF2b2lkIHNwcmludGYsIGFzIHRoYXQgaW5mcmluZ2VzIG9uIHRoZSB1c2VyJ3MgbmFtZSBzcGFjZS4KKyAgICAgRG9uJ3QgaGF2ZSB1bmRlZmluZWQgYmVoYXZpb3IgZXZlbiBpZiB0aGUgdHJhbnNsYXRpb24KKyAgICAgcHJvZHVjZWQgYSBzdHJpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mICIlcyJzLiAgKi8KKyAgeworICAgIGNoYXIgKnl5cCA9ICp5eW1zZzsKKyAgICBpbnQgeXlpID0gMDsKKyAgICB3aGlsZSAoKCp5eXAgPSAqeXlmb3JtYXQpICE9ICdcMCcpCisgICAgICBpZiAoKnl5cCA9PSAnJScgJiYgeXlmb3JtYXRbMV0gPT0gJ3MnICYmIHl5aSA8IHl5Y291bnQpCisgICAgICAgIHsKKyAgICAgICAgICB5eXAgKz0geXl0bmFtZXJyICh5eXAsIHl5YXJnW3l5aSsrXSk7CisgICAgICAgICAgeXlmb3JtYXQgKz0gMjsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgeXlwKys7CisgICAgICAgICAgeXlmb3JtYXQrKzsKKyAgICAgICAgfQorICB9CisgIHJldHVybiAwOwogfQogI2VuZGlmIC8qIFlZRVJST1JfVkVSQk9TRSAqLwotDAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCBSZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB0byB0aGlzIHN5bWJvbC4gIHwKQEAgLTE0MjUsMjUgKzE4NDgsNiBAQAogCWJyZWFrOwogICAgIH0KIH0KLQwKLQotLyogUHJldmVudCB3YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KLQotI2lmZGVmIFlZUEFSU0VfUEFSQU0KLSNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKLWludCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKTsKLSNlbHNlCi1pbnQgeXlwYXJzZSAoKTsKLSNlbmRpZgotI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCi0jaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCi1pbnQgeXlwYXJzZSAodm9pZCk7Ci0jZWxzZQotaW50IHl5cGFyc2UgKCk7Ci0jZW5kaWYKLSNlbmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KLQotCiAKIAogCkBAIC0xNDc0LDI0ICsxODc4LDkyIEBACiAjZW5kaWYKICNlbmRpZgogewotICAvKiBUaGUgbG9vay1haGVhZCBzeW1ib2wuICAqLworLyogVGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLwogaW50IHl5Y2hhcjsKIAotLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCi1ZWVNUWVBFIHl5bHZhbDsKIAotLyogTnVtYmVyIG9mIHN5bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KLWludCB5eW5lcnJzOwotLyogTG9jYXRpb24gZGF0YSBmb3IgdGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KLVlZTFRZUEUgeXlsbG9jOworI2lmIGRlZmluZWQgX19HTlVDX18gJiYgNDA3IDw9IF9fR05VQ19fICogMTAwICsgX19HTlVDX01JTk9SX18KKy8qIFN1cHByZXNzIGFuIGluY29ycmVjdCBkaWFnbm9zdGljIGFib3V0IHl5bHZhbCBiZWluZyB1bmluaXRpYWxpemVkLiAgKi8KKyMgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOIFwKKyAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgcHVzaCIpIFwKKyAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XdW5pbml0aWFsaXplZFwiIilcCisgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV21heWJlLXVuaW5pdGlhbGl6ZWRcIiIpCisjIGRlZmluZSBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQgXAorICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBwb3AiKQorI2Vsc2UKKy8qIERlZmF1bHQgdmFsdWUgdXNlZCBmb3IgaW5pdGlhbGl6YXRpb24sIGZvciBwYWNpZnlpbmcgb2xkZXIgR0NDcworICAgb3Igbm9uLUdDQyBjb21waWxlcnMuICAqLworc3RhdGljIFlZU1RZUEUgeXl2YWxfZGVmYXVsdDsKKyMgZGVmaW5lIFlZX0lOSVRJQUxfVkFMVUUoVmFsdWUpID0gVmFsdWUKKyNlbmRpZgorI2lmbmRlZiBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgorIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4KKyMgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORAorI2VuZGlmCisjaWZuZGVmIFlZX0lOSVRJQUxfVkFMVUUKKyMgZGVmaW5lIFlZX0lOSVRJQUxfVkFMVUUoVmFsdWUpIC8qIE5vdGhpbmcuICovCisjZW5kaWYKIAotICBpbnQgeXlzdGF0ZTsKKy8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9va2FoZWFkIHN5bWJvbC4gICovCitZWVNUWVBFIHl5bHZhbCBZWV9JTklUSUFMX1ZBTFVFKHl5dmFsX2RlZmF1bHQpOworCisvKiBMb2NhdGlvbiBkYXRhIGZvciB0aGUgbG9va2FoZWFkIHN5bWJvbC4gICovCitZWUxUWVBFIHl5bGxvYworIyBpZiBkZWZpbmVkIEdSQU1fTFRZUEVfSVNfVFJJVklBTCAmJiBHUkFNX0xUWVBFX0lTX1RSSVZJQUwKKyAgPSB7IDEsIDEsIDEsIDEgfQorIyBlbmRpZgorOworCisKKyAgICAvKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAqLworICAgIGludCB5eW5lcnJzOworCisgICAgaW50IHl5c3RhdGU7CisgICAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCisgICAgaW50IHl5ZXJyc3RhdHVzOworCisgICAgLyogVGhlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6CisgICAgICAgYHl5c3MnOiByZWxhdGVkIHRvIHN0YXRlcy4KKyAgICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLgorICAgICAgIGB5eWxzJzogcmVsYXRlZCB0byBsb2NhdGlvbnMuCisKKyAgICAgICBSZWZlciB0byB0aGUgc3RhY2tzIHRocm91Z2ggc2VwYXJhdGUgcG9pbnRlcnMsIHRvIGFsbG93IHl5b3ZlcmZsb3cKKyAgICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KKworICAgIC8qIFRoZSBzdGF0ZSBzdGFjay4gICovCisgICAgeXl0eXBlX2ludDE2IHl5c3NhW1lZSU5JVERFUFRIXTsKKyAgICB5eXR5cGVfaW50MTYgKnl5c3M7CisgICAgeXl0eXBlX2ludDE2ICp5eXNzcDsKKworICAgIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCisgICAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07CisgICAgWVlTVFlQRSAqeXl2czsKKyAgICBZWVNUWVBFICp5eXZzcDsKKworICAgIC8qIFRoZSBsb2NhdGlvbiBzdGFjay4gICovCisgICAgWVlMVFlQRSB5eWxzYVtZWUlOSVRERVBUSF07CisgICAgWVlMVFlQRSAqeXlsczsKKyAgICBZWUxUWVBFICp5eWxzcDsKKworICAgIC8qIFRoZSBsb2NhdGlvbnMgd2hlcmUgdGhlIGVycm9yIHN0YXJ0ZWQgYW5kIGVuZGVkLiAgKi8KKyAgICBZWUxUWVBFIHl5ZXJyb3JfcmFuZ2VbM107CisKKyAgICBZWVNJWkVfVCB5eXN0YWNrc2l6ZTsKKworICAgIHl5dHlwZV9pbnQxNiB5eWVzYVsyMF07CisgICAgeXl0eXBlX2ludDE2ICp5eWVzOworICAgIFlZU0laRV9UIHl5ZXNfY2FwYWNpdHk7CisKKyAgaW50IHl5X2xhY19lc3RhYmxpc2hlZCA9IDA7CiAgIGludCB5eW47CiAgIGludCB5eXJlc3VsdDsKLSAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCi0gIGludCB5eWVycnN0YXR1czsKLSAgLyogTG9vay1haGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KKyAgLyogTG9va2FoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLwogICBpbnQgeXl0b2tlbiA9IDA7CisgIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9uIGZyb20gdGhlCisgICAgIGFjdGlvbiByb3V0aW5lcy4gICovCisgIFlZU1RZUEUgeXl2YWw7CisgIFlZTFRZUEUgeXlsb2M7CisKICNpZiBZWUVSUk9SX1ZFUkJPU0UKICAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywgYW5kIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovCiAgIGNoYXIgeXltc2didWZbMTI4XTsKQEAgLTE0OTksNzcgKzE5NzEsNDAgQEAKICAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7CiAjZW5kaWYKIAotICAvKiBUaHJlZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgotICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLAotICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLAotICAgICBgeXlscyc6IHJlbGF0ZWQgdG8gbG9jYXRpb25zLgotCi0gICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdwotICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KLQotICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLwotICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOwotICB5eXR5cGVfaW50MTYgKnl5c3MgPSB5eXNzYTsKLSAgeXl0eXBlX2ludDE2ICp5eXNzcDsKLQotICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suICAqLwotICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKLSAgWVlTVFlQRSAqeXl2cyA9IHl5dnNhOwotICBZWVNUWVBFICp5eXZzcDsKLQotICAvKiBUaGUgbG9jYXRpb24gc3RhY2suICAqLwotICBZWUxUWVBFIHl5bHNhW1lZSU5JVERFUFRIXTsKLSAgWVlMVFlQRSAqeXlscyA9IHl5bHNhOwotICBZWUxUWVBFICp5eWxzcDsKLSAgLyogVGhlIGxvY2F0aW9ucyB3aGVyZSB0aGUgZXJyb3Igc3RhcnRlZCBhbmQgZW5kZWQuICAqLwotICBZWUxUWVBFIHl5ZXJyb3JfcmFuZ2VbMl07Ci0KICNkZWZpbmUgWVlQT1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSwgeXlsc3AgLT0gKE4pKQogCi0gIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7Ci0KLSAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUKLSAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KLSAgWVlTVFlQRSB5eXZhbDsKLSAgWVlMVFlQRSB5eWxvYzsKLQogICAvKiBUaGUgbnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBydWxlLgogICAgICBLZWVwIHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICovCiAgIGludCB5eWxlbiA9IDA7CiAKKyAgeXlzc3AgPSB5eXNzID0geXlzc2E7CisgIHl5dnNwID0geXl2cyA9IHl5dnNhOworICB5eWxzcCA9IHl5bHMgPSB5eWxzYTsKKyAgeXlzdGFja3NpemUgPSBZWUlOSVRERVBUSDsKKworICB5eWVzID0geXllc2E7CisgIHl5ZXNfY2FwYWNpdHkgPSBzaXplb2YgeXllc2EgLyBzaXplb2YgKnl5ZXM7CisgIGlmIChZWU1BWERFUFRIIDwgeXllc19jYXBhY2l0eSkKKyAgICB5eWVzX2NhcGFjaXR5ID0gWVlNQVhERVBUSDsKKwogICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFydGluZyBwYXJzZVxuIikpOwogCiAgIHl5c3RhdGUgPSAwOwogICB5eWVycnN0YXR1cyA9IDA7CiAgIHl5bmVycnMgPSAwOwotICB5eWNoYXIgPSBZWUVNUFRZOwkJLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KKyAgeXljaGFyID0gWVlFTVBUWTsgLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KIAotICAvKiBJbml0aWFsaXplIHN0YWNrIHBvaW50ZXJzLgotICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2sKLSAgICAgc28gdGhhdCB0aGV5IHN0YXkgb24gdGhlIHNhbWUgbGV2ZWwgYXMgdGhlIHN0YXRlIHN0YWNrLgotICAgICBUaGUgd2FzdGVkIGVsZW1lbnRzIGFyZSBuZXZlciBpbml0aWFsaXplZC4gICovCi0KLSAgeXlzc3AgPSB5eXNzOwotICB5eXZzcCA9IHl5dnM7Ci0gIHl5bHNwID0geXlsczsKLSNpZiBZWUxUWVBFX0lTX1RSSVZJQUwKLSAgLyogSW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiBiZWZvcmUgcGFyc2luZyBzdGFydHMuICAqLwotICB5eWxsb2MuZmlyc3RfbGluZSAgID0geXlsbG9jLmxhc3RfbGluZSAgID0gMTsKLSAgeXlsbG9jLmZpcnN0X2NvbHVtbiA9IHl5bGxvYy5sYXN0X2NvbHVtbiA9IDA7Ci0jZW5kaWYKLQotCi0gIC8qIFVzZXIgaW5pdGlhbGl6YXRpb24gY29kZS4gICovCi0jbGluZSA4NCAicGFyc2UtZ3JhbS55IgorLyogVXNlciBpbml0aWFsaXphdGlvbiBjb2RlLiAgKi8KKy8qIExpbmUgMTU2MCBvZiB5YWNjLmMgICovCisjbGluZSAxMDcgInBhcnNlLWdyYW0ueSIKIHsKICAgLyogQmlzb24ncyBncmFtbWFyIGNhbiBpbml0aWFsIGVtcHR5IGxvY2F0aW9ucywgaGVuY2UgYSBkZWZhdWx0CiAgICAgIGxvY2F0aW9uIGlzIG5lZWRlZC4gKi8KLSAgeXlsbG9jLnN0YXJ0LmZpbGUgICA9IHl5bGxvYy5lbmQuZmlsZSAgID0gY3VycmVudF9maWxlOwotICB5eWxsb2Muc3RhcnQubGluZSAgID0geXlsbG9jLmVuZC5saW5lICAgPSAxOwotICB5eWxsb2Muc3RhcnQuY29sdW1uID0geXlsbG9jLmVuZC5jb2x1bW4gPSAwOworICBib3VuZGFyeV9zZXQgKCZ5eWxsb2Muc3RhcnQsIGN1cnJlbnRfZmlsZSwgMSwgMSk7CisgIGJvdW5kYXJ5X3NldCAoJnl5bGxvYy5lbmQsIGN1cnJlbnRfZmlsZSwgMSwgMSk7CiB9Ci0vKiBMaW5lIDEwNzggb2YgeWFjYy5jLiAgKi8KLSNsaW5lIDE1NzMgInBhcnNlLWdyYW0uYyIKKy8qIExpbmUgMTU2MCBvZiB5YWNjLmMgICovCisjbGluZSAyMDA4ICJwYXJzZS1ncmFtLmMiCiAgIHl5bHNwWzBdID0geXlsbG9jOwogICBnb3RvIHl5c2V0c3RhdGU7CiAKQEAgLTE2MDcsNiArMjA0Miw3IEBACiAJCSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKIAkJICAgICZ5eWxzMSwgeXlzaXplICogc2l6ZW9mICgqeXlsc3ApLAogCQkgICAgJnl5c3RhY2tzaXplKTsKKwogCXl5bHMgPSB5eWxzMTsKIAl5eXNzID0geXlzczE7CiAJeXl2cyA9IHl5dnMxOwpAQCAtMTYyOCw5ICsyMDY0LDkgQEAKIAkgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7CiAJaWYgKCEgeXlwdHIpCiAJICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3MpOwotCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnMpOwotCVlZU1RBQ0tfUkVMT0NBVEUgKHl5bHMpOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxsb2MsIHl5c3MpOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5bHNfYWxsb2MsIHl5bHMpOwogIyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FURQogCWlmICh5eXNzMSAhPSB5eXNzYSkKIAkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOwpAQCAtMTY1MSw2ICsyMDg3LDkgQEAKIAogICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOwogCisgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisKICAgZ290byB5eWJhY2t1cDsKIAogLyotLS0tLS0tLS0tLS4KQEAgLTE2NTksMTYgKzIwOTgsMTYgQEAKIHl5YmFja3VwOgogCiAgIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICBSZWFkIGEKLSAgICAgbG9vay1haGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisgICAgIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCiAKLSAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2stYWhlYWQgdG9rZW4uICAqLworICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRva2VuLiAgKi8KICAgeXluID0geXlwYWN0W3l5c3RhdGVdOwotICBpZiAoeXluID09IFlZUEFDVF9OSU5GKQorICBpZiAoeXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQgKHl5bikpCiAgICAgZ290byB5eWRlZmF1bHQ7CiAKLSAgLyogTm90IGtub3duID0+IGdldCBhIGxvb2stYWhlYWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisgIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rYWhlYWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCiAKLSAgLyogWVlDSEFSIGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9vay1haGVhZCBzeW1ib2wuICAqLworICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29rYWhlYWQgc3ltYm9sLiAgKi8KICAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQogICAgIHsKICAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOwpAQCAtMTY5MCwzMyArMjEyOSwzNiBAQAogICAgICBkZXRlY3QgYW4gZXJyb3IsIHRha2UgdGhhdCBhY3Rpb24uICAqLwogICB5eW4gKz0geXl0b2tlbjsKICAgaWYgKHl5biA8IDAgfHwgWVlMQVNUIDwgeXluIHx8IHl5Y2hlY2tbeXluXSAhPSB5eXRva2VuKQotICAgIGdvdG8geXlkZWZhdWx0OworICAgIHsKKyAgICAgIFlZX0xBQ19FU1RBQkxJU0g7CisgICAgICBnb3RvIHl5ZGVmYXVsdDsKKyAgICB9CiAgIHl5biA9IHl5dGFibGVbeXluXTsKICAgaWYgKHl5biA8PSAwKQogICAgIHsKLSAgICAgIGlmICh5eW4gPT0gMCB8fCB5eW4gPT0gWVlUQUJMRV9OSU5GKQotCWdvdG8geXllcnJsYWI7CisgICAgICBpZiAoeXl0YWJsZV92YWx1ZV9pc19lcnJvciAoeXluKSkKKyAgICAgICAgZ290byB5eWVycmxhYjsKKyAgICAgIFlZX0xBQ19FU1RBQkxJU0g7CiAgICAgICB5eW4gPSAteXluOwogICAgICAgZ290byB5eXJlZHVjZTsKICAgICB9CiAKLSAgaWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCiAgIC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3IKICAgICAgc3RhdHVzLiAgKi8KICAgaWYgKHl5ZXJyc3RhdHVzKQogICAgIHl5ZXJyc3RhdHVzLS07CiAKLSAgLyogU2hpZnQgdGhlIGxvb2stYWhlYWQgdG9rZW4uICAqLworICAvKiBTaGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8KICAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKIAotICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuIHVubGVzcyBpdCBpcyBlb2YuICAqLwotICBpZiAoeXljaGFyICE9IFlZRU9GKQotICAgIHl5Y2hhciA9IFlZRU1QVFk7CisgIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4uICAqLworICB5eWNoYXIgPSBZWUVNUFRZOworICBZWV9MQUNfRElTQ0FSRCAoInNoaWZ0Iik7CiAKICAgeXlzdGF0ZSA9IHl5bjsKKyAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4KICAgKisreXl2c3AgPSB5eWx2YWw7CisgIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORAogICAqKyt5eWxzcCA9IHl5bGxvYzsKICAgZ290byB5eW5ld3N0YXRlOwogCkBAIC0xNzUxLDI5OSArMjE5Myw1MTYgQEAKICAgLyogRGVmYXVsdCBsb2NhdGlvbi4gICovCiAgIFlZTExPQ19ERUZBVUxUICh5eWxvYywgKHl5bHNwIC0geXlsZW4pLCB5eWxlbik7CiAgIFlZX1JFRFVDRV9QUklOVCAoeXluKTsKLSAgc3dpdGNoICh5eW4pCisgIHsKKyAgICBpbnQgeXljaGFyX2JhY2t1cCA9IHl5Y2hhcjsKKyAgICBzd2l0Y2ggKHl5bikKKyAgICAgIHsKKyAgICAgICAgICBjYXNlIDY6CisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgMjQ2ICJwYXJzZS1ncmFtLnkiCiAgICAgewotICAgICAgICBjYXNlIDY6Ci0jbGluZSAyMTcgInBhcnNlLWdyYW0ueSIKLSAgICB7IHByb2xvZ3VlX2F1Z21lbnQgKCh5eXZzcFsoMSkgLSAoMSldLmNoYXJzKSwgKHl5bHNwWygxKSAtICgxKV0pKTsgfQorICAgICAgY29kZV9wcm9wcyBwbGFpbl9jb2RlOworICAgICAgY29kZV9wcm9wc19wbGFpbl9pbml0ICgmcGxhaW5fY29kZSwgKHl5dnNwWygxKSAtICgxKV0uY2hhcnMpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgY29kZV9wcm9wc190cmFuc2xhdGVfY29kZSAoJnBsYWluX2NvZGUpOworICAgICAgZ3JhbV9zY2FubmVyX2xhc3Rfc3RyaW5nX2ZyZWUgKCk7CisgICAgICBtdXNjbGVfY29kZV9ncm93ICh1bmlvbl9zZWVuID8gInBvc3RfcHJvbG9ndWUiIDogInByZV9wcm9sb2d1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBwbGFpbl9jb2RlLmNvZGUsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICBjb2RlX3NjYW5uZXJfbGFzdF9zdHJpbmdfZnJlZSAoKTsKKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA3OgotI2xpbmUgMjE4ICJwYXJzZS1ncmFtLnkiCi0gICAgeyBkZWJ1Z19mbGFnID0gdHJ1ZTsgfQorLyogTGluZSAxNzc4IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDI1NSAicGFyc2UtZ3JhbS55IgorICAgIHsgZGVidWcgPSB0cnVlOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA4OgotI2xpbmUgMjIwICJwYXJzZS1ncmFtLnkiCisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgMjU3ICJwYXJzZS1ncmFtLnkiCiAgICAgewotICAgICAgc3RhdGljIGNoYXIgb25lW10gPSAiMSI7Ci0gICAgICBtdXNjbGVfaW5zZXJ0ICgoeXl2c3BbKDIpIC0gKDIpXS5jaGFycyksIG9uZSk7CisgICAgICBtdXNjbGVfcGVyY2VudF9kZWZpbmVfaW5zZXJ0ICgoeXl2c3BbKDIpIC0gKDMpXS51bmlxc3RyKSwgKHl5bHNwWygyKSAtICgzKV0pLCAoeXl2c3BbKDMpIC0gKDMpXS5jaGFycyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVVNDTEVfUEVSQ0VOVF9ERUZJTkVfR1JBTU1BUl9GSUxFKTsKICAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5OgotI2xpbmUgMjI0ICJwYXJzZS1ncmFtLnkiCi0gICAgeyBtdXNjbGVfaW5zZXJ0ICgoeXl2c3BbKDIpIC0gKDMpXS5jaGFycyksICh5eXZzcFsoMykgLSAoMyldLmNoYXJzKSk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDEwOgotI2xpbmUgMjI1ICJwYXJzZS1ncmFtLnkiCisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgMjYxICJwYXJzZS1ncmFtLnkiCiAgICAgeyBkZWZpbmVzX2ZsYWcgPSB0cnVlOyB9CiAgICAgYnJlYWs7CiAKKyAgY2FzZSAxMDoKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSAyNjMgInBhcnNlLWdyYW0ueSIKKyAgICB7CisgICAgICBkZWZpbmVzX2ZsYWcgPSB0cnVlOworICAgICAgc3BlY19kZWZpbmVzX2ZpbGUgPSB4c3RyZHVwICgoeXl2c3BbKDIpIC0gKDIpXS5jaGFycykpOworICAgIH0KKyAgICBicmVhazsKKwogICBjYXNlIDExOgotI2xpbmUgMjI2ICJwYXJzZS1ncmFtLnkiCisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgMjY3ICJwYXJzZS1ncmFtLnkiCiAgICAgeyBlcnJvcl92ZXJib3NlID0gdHJ1ZTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTI6Ci0jbGluZSAyMjcgInBhcnNlLWdyYW0ueSIKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSAyNjggInBhcnNlLWdyYW0ueSIKICAgICB7IGV4cGVjdGVkX3NyX2NvbmZsaWN0cyA9ICh5eXZzcFsoMikgLSAoMildLmludGVnZXIpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzoKLSNsaW5lIDIyOCAicGFyc2UtZ3JhbS55IgorLyogTGluZSAxNzc4IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDI2OSAicGFyc2UtZ3JhbS55IgogICAgIHsgZXhwZWN0ZWRfcnJfY29uZmxpY3RzID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZWdlcik7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE0OgotI2xpbmUgMjI5ICJwYXJzZS1ncmFtLnkiCi0gICAgeyBzcGVjX2ZpbGVfcHJlZml4ID0gKHl5dnNwWygzKSAtICgzKV0uY2hhcnMpOyB9CisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgMjcwICJwYXJzZS1ncmFtLnkiCisgICAgeyBzcGVjX2ZpbGVfcHJlZml4ID0gKHl5dnNwWygyKSAtICgyKV0uY2hhcnMpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNToKLSNsaW5lIDIzMSAicGFyc2UtZ3JhbS55IgorLyogTGluZSAxNzc4IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDI3MSAicGFyc2UtZ3JhbS55IgorICAgIHsgc3BlY19maWxlX3ByZWZpeCA9ICh5eXZzcFsoMykgLSAoMyldLmNoYXJzKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTY6CisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgMjczICJwYXJzZS1ncmFtLnkiCiAgICAgewogICAgICAgbm9uZGV0ZXJtaW5pc3RpY19wYXJzZXIgPSB0cnVlOwogICAgICAgZ2xyX3BhcnNlciA9IHRydWU7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTY6Ci0jbGluZSAyMzYgInBhcnNlLWdyYW0ueSIKKyAgY2FzZSAxNzoKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSAyNzggInBhcnNlLWdyYW0ueSIKICAgICB7Ci0gICAgICBtdXNjbGVfY29kZV9ncm93ICgiaW5pdGlhbF9hY3Rpb24iLCAoeXl2c3BbKDEpIC0gKDEpXS5jaGFycyksICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICBjb2RlX3Byb3BzIGFjdGlvbjsKKyAgICAgIGNvZGVfcHJvcHNfc3ltYm9sX2FjdGlvbl9pbml0ICgmYWN0aW9uLCAoeXl2c3BbKDIpIC0gKDIpXS5jb2RlKSwgKHl5bHNwWygyKSAtICgyKV0pKTsKKyAgICAgIGNvZGVfcHJvcHNfdHJhbnNsYXRlX2NvZGUgKCZhY3Rpb24pOworICAgICAgZ3JhbV9zY2FubmVyX2xhc3Rfc3RyaW5nX2ZyZWUgKCk7CisgICAgICBtdXNjbGVfY29kZV9ncm93ICgiaW5pdGlhbF9hY3Rpb24iLCBhY3Rpb24uY29kZSwgKHl5bHNwWygyKSAtICgyKV0pKTsKKyAgICAgIGNvZGVfc2Nhbm5lcl9sYXN0X3N0cmluZ19mcmVlICgpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE3OgotI2xpbmUgMjM5ICJwYXJzZS1ncmFtLnkiCi0gICAgeyBhZGRfcGFyYW0gKCJsZXhfcGFyYW0iLCAoeXl2c3BbKDEpIC0gKDEpXS5jaGFycyksICh5eWxzcFsoMSkgLSAoMSldKSk7IH0KLSAgICBicmVhazsKLQogICBjYXNlIDE4OgotI2xpbmUgMjQwICJwYXJzZS1ncmFtLnkiCi0gICAgeyBsb2NhdGlvbnNfZmxhZyA9IHRydWU7IH0KKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSAyODYgInBhcnNlLWdyYW0ueSIKKyAgICB7IGxhbmd1YWdlX2FyZ21hdGNoICgoeXl2c3BbKDIpIC0gKDIpXS5jaGFycyksIGdyYW1tYXJfcHJpbywgKHl5bHNwWygxKSAtICgyKV0pKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk6Ci0jbGluZSAyNDEgInBhcnNlLWdyYW0ueSIKLSAgICB7IHNwZWNfbmFtZV9wcmVmaXggPSAoeXl2c3BbKDMpIC0gKDMpXS5jaGFycyk7IH0KKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSAyODcgInBhcnNlLWdyYW0ueSIKKyAgICB7IGFkZF9wYXJhbSAoImxleF9wYXJhbSIsICh5eXZzcFsoMikgLSAoMildLmNvZGUpLCAoeXlsc3BbKDIpIC0gKDIpXSkpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMDoKLSNsaW5lIDI0MiAicGFyc2UtZ3JhbS55IgotICAgIHsgbm9fbGluZXNfZmxhZyA9IHRydWU7IH0KKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSAyODggInBhcnNlLWdyYW0ueSIKKyAgICB7IGxvY2F0aW9uc19mbGFnID0gdHJ1ZTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjE6Ci0jbGluZSAyNDMgInBhcnNlLWdyYW0ueSIKLSAgICB7IG5vbmRldGVybWluaXN0aWNfcGFyc2VyID0gdHJ1ZTsgfQorLyogTGluZSAxNzc4IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDI4OSAicGFyc2UtZ3JhbS55IgorICAgIHsgc3BlY19uYW1lX3ByZWZpeCA9ICh5eXZzcFsoMikgLSAoMildLmNoYXJzKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjI6Ci0jbGluZSAyNDQgInBhcnNlLWdyYW0ueSIKLSAgICB7IHNwZWNfb3V0ZmlsZSA9ICh5eXZzcFsoMykgLSAoMyldLmNoYXJzKTsgfQorLyogTGluZSAxNzc4IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDI5MCAicGFyc2UtZ3JhbS55IgorICAgIHsgc3BlY19uYW1lX3ByZWZpeCA9ICh5eXZzcFsoMykgLSAoMyldLmNoYXJzKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjM6Ci0jbGluZSAyNDUgInBhcnNlLWdyYW0ueSIKLSAgICB7IGFkZF9wYXJhbSAoInBhcnNlX3BhcmFtIiwgKHl5dnNwWygxKSAtICgxKV0uY2hhcnMpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOyB9CisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgMjkxICJwYXJzZS1ncmFtLnkiCisgICAgeyBub19saW5lc19mbGFnID0gdHJ1ZTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjQ6Ci0jbGluZSAyNDYgInBhcnNlLWdyYW0ueSIKLSAgICB7IHB1cmVfcGFyc2VyID0gdHJ1ZTsgfQorLyogTGluZSAxNzc4IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDI5MiAicGFyc2UtZ3JhbS55IgorICAgIHsgbm9uZGV0ZXJtaW5pc3RpY19wYXJzZXIgPSB0cnVlOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNToKLSNsaW5lIDI0NyAicGFyc2UtZ3JhbS55IgotICAgIHsgdmVyc2lvbl9jaGVjayAoJih5eWxzcFsoMikgLSAoMildKSwgKHl5dnNwWygyKSAtICgyKV0uY2hhcnMpKTsgfQorLyogTGluZSAxNzc4IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDI5MyAicGFyc2UtZ3JhbS55IgorICAgIHsgc3BlY19vdXRmaWxlID0gKHl5dnNwWygyKSAtICgyKV0uY2hhcnMpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNjoKLSNsaW5lIDI0OCAicGFyc2UtZ3JhbS55IgotICAgIHsgc2tlbGV0b24gPSAoeXl2c3BbKDIpIC0gKDIpXS5jaGFycyk7IH0KKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSAyOTQgInBhcnNlLWdyYW0ueSIKKyAgICB7IHNwZWNfb3V0ZmlsZSA9ICh5eXZzcFsoMykgLSAoMyldLmNoYXJzKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjc6Ci0jbGluZSAyNDkgInBhcnNlLWdyYW0ueSIKLSAgICB7IHRva2VuX3RhYmxlX2ZsYWcgPSB0cnVlOyB9CisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgMjk1ICJwYXJzZS1ncmFtLnkiCisgICAgeyBhZGRfcGFyYW0gKCJwYXJzZV9wYXJhbSIsICh5eXZzcFsoMikgLSAoMildLmNvZGUpLCAoeXlsc3BbKDIpIC0gKDIpXSkpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAyODoKLSNsaW5lIDI1MCAicGFyc2UtZ3JhbS55IgotICAgIHsgcmVwb3J0X2ZsYWcgPSByZXBvcnRfc3RhdGVzOyB9CisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgMjk3ICJwYXJzZS1ncmFtLnkiCisgICAgeworICAgICAgLyogJXB1cmUtcGFyc2VyIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgYCVkZWZpbmUgYXBpLnB1cmUnLCBzbyB1c2UKKyAgICAgICAgIGAlZGVmaW5lIGFwaS5wdXJlJyBpbiBhIGJhY2t3YXJkLWNvbXBhdGlibGUgbWFubmVyIGhlcmUuICBGaXJzdCwgZG9uJ3QKKyAgICAgICAgIGNvbXBsYWluIGlmICVwdXJlLXBhcnNlciBpcyBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMuICAqLworICAgICAgaWYgKCFtdXNjbGVfZmluZF9jb25zdCAoInBlcmNlbnRfZGVmaW5lKGFwaS5wdXJlKSIpKQorICAgICAgICBtdXNjbGVfcGVyY2VudF9kZWZpbmVfaW5zZXJ0ICgiYXBpLnB1cmUiLCAoeXlsc3BbKDEpIC0gKDEpXSksICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVVNDTEVfUEVSQ0VOVF9ERUZJTkVfR1JBTU1BUl9GSUxFKTsKKyAgICAgIC8qIEluIGFsbCBjYXNlcywgdXNlIGFwaS5wdXJlIG5vdyBzbyB0aGF0IHRoZSBiYWNrZW5kIGRvZXNuJ3QgY29tcGxhaW4gaWYKKyAgICAgICAgIHRoZSBza2VsZXRvbiBpZ25vcmVzIGFwaS5wdXJlLCBidXQgZG8gd2FybiBub3cgaWYgdGhlcmUncyBhIHByZXZpb3VzCisgICAgICAgICBjb25mbGljdGluZyBkZWZpbml0aW9uIGZyb20gYW4gYWN0dWFsICVkZWZpbmUuICAqLworICAgICAgaWYgKCFtdXNjbGVfcGVyY2VudF9kZWZpbmVfZmxhZ19pZiAoImFwaS5wdXJlIikpCisgICAgICAgIG11c2NsZV9wZXJjZW50X2RlZmluZV9pbnNlcnQgKCJhcGkucHVyZSIsICh5eWxzcFsoMSkgLSAoMSldKSwgIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1VU0NMRV9QRVJDRU5UX0RFRklORV9HUkFNTUFSX0ZJTEUpOworICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDI5OgotI2xpbmUgMjUxICJwYXJzZS1ncmFtLnkiCi0gICAgeyB5YWNjX2ZsYWcgPSB0cnVlOyB9CisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgMzExICJwYXJzZS1ncmFtLnkiCisgICAgeyB2ZXJzaW9uX2NoZWNrICgmKHl5bHNwWygyKSAtICgyKV0pLCAoeXl2c3BbKDIpIC0gKDIpXS5jaGFycykpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzMDoKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSAzMTMgInBhcnNlLWdyYW0ueSIKKyAgICB7CisgICAgICBjaGFyIGNvbnN0ICpza2VsZXRvbl91c2VyID0gKHl5dnNwWygyKSAtICgyKV0uY2hhcnMpOworICAgICAgaWYgKG1ic2NociAoc2tlbGV0b25fdXNlciwgJy8nKSkKKyAgICAgICAgeworICAgICAgICAgIHNpemVfdCBkaXJfbGVuZ3RoID0gc3RybGVuIChjdXJyZW50X2ZpbGUpOworICAgICAgICAgIGNoYXIgKnNrZWxldG9uX2J1aWxkOworICAgICAgICAgIHdoaWxlIChkaXJfbGVuZ3RoICYmIGN1cnJlbnRfZmlsZVtkaXJfbGVuZ3RoIC0gMV0gIT0gJy8nKQorICAgICAgICAgICAgLS1kaXJfbGVuZ3RoOworICAgICAgICAgIHdoaWxlIChkaXJfbGVuZ3RoICYmIGN1cnJlbnRfZmlsZVtkaXJfbGVuZ3RoIC0gMV0gPT0gJy8nKQorICAgICAgICAgICAgLS1kaXJfbGVuZ3RoOworICAgICAgICAgIHNrZWxldG9uX2J1aWxkID0KKyAgICAgICAgICAgIHhtYWxsb2MgKGRpcl9sZW5ndGggKyAxICsgc3RybGVuIChza2VsZXRvbl91c2VyKSArIDEpOworICAgICAgICAgIGlmIChkaXJfbGVuZ3RoID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbWVtY3B5IChza2VsZXRvbl9idWlsZCwgY3VycmVudF9maWxlLCBkaXJfbGVuZ3RoKTsKKyAgICAgICAgICAgICAgc2tlbGV0b25fYnVpbGRbZGlyX2xlbmd0aCsrXSA9ICcvJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBzdHJjcHkgKHNrZWxldG9uX2J1aWxkICsgZGlyX2xlbmd0aCwgc2tlbGV0b25fdXNlcik7CisgICAgICAgICAgc2tlbGV0b25fdXNlciA9IHVuaXFzdHJfbmV3IChza2VsZXRvbl9idWlsZCk7CisgICAgICAgICAgZnJlZSAoc2tlbGV0b25fYnVpbGQpOworICAgICAgICB9CisgICAgICBza2VsZXRvbl9hcmcgKHNrZWxldG9uX3VzZXIsIGdyYW1tYXJfcHJpbywgKHl5bHNwWygxKSAtICgyKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzMToKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSAzMzYgInBhcnNlLWdyYW0ueSIKKyAgICB7IHRva2VuX3RhYmxlX2ZsYWcgPSB0cnVlOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzMjoKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSAzMzcgInBhcnNlLWdyYW0ueSIKKyAgICB7IHJlcG9ydF9mbGFnIHw9IHJlcG9ydF9zdGF0ZXM7IH0KICAgICBicmVhazsKIAogICBjYXNlIDMzOgotI2xpbmUgMjU5ICJwYXJzZS1ncmFtLnkiCisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgMzM4ICJwYXJzZS1ncmFtLnkiCisgICAgeyB5YWNjX2ZsYWcgPSB0cnVlOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzNzoKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSAzNDYgInBhcnNlLWdyYW0ueSIKICAgICB7CiAgICAgICBncmFtbWFyX3N0YXJ0X3N5bWJvbF9zZXQgKCh5eXZzcFsoMikgLSAoMildLnN5bWJvbCksICh5eWxzcFsoMikgLSAoMildKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzQ6Ci0jbGluZSAyNjMgInBhcnNlLWdyYW0ueSIKKyAgY2FzZSAzODoKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSAzNTAgInBhcnNlLWdyYW0ueSIKICAgICB7Ci0gICAgICBjaGFyIGNvbnN0ICpib2R5ID0gKHl5dnNwWygxKSAtICgxKV0uY2hhcnMpOwotCi0gICAgICBpZiAodHlwZWQpCi0JewotCSAgLyogQ29uY2F0ZW5hdGUgdGhlIHVuaW9uIGJvZGllcywgdHVybmluZyB0aGUgZmlyc3Qgb25lJ3MKLQkgICAgIHRyYWlsaW5nICd9JyBpbnRvICdcbicsIGFuZCBvbWl0dGluZyB0aGUgc2Vjb25kIG9uZSdzICd7Jy4gICovCi0JICBjaGFyICpjb2RlID0gbXVzY2xlX2ZpbmQgKCJzdHlwZSIpOwotCSAgY29kZVtzdHJsZW4gKGNvZGUpIC0gMV0gPSAnXG4nOwotCSAgYm9keSsrOwotCX0KLQotICAgICAgdHlwZWQgPSB0cnVlOwotICAgICAgbXVzY2xlX2NvZGVfZ3JvdyAoInN0eXBlIiwgYm9keSwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgIGNvZGVfcHJvcHMgY29kZTsKKyAgICAgIGNvZGVfcHJvcHNfc3ltYm9sX2FjdGlvbl9pbml0ICgmY29kZSwgKHl5dnNwWygyKSAtICgzKV0uY29kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CisgICAgICBjb2RlX3Byb3BzX3RyYW5zbGF0ZV9jb2RlICgmY29kZSk7CisgICAgICB7CisgICAgICAgIHN5bWJvbF9saXN0ICpsaXN0OworICAgICAgICBmb3IgKGxpc3QgPSAoeXl2c3BbKDMpIC0gKDMpXS5saXN0KTsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpCisgICAgICAgICAgc3ltYm9sX2xpc3RfZGVzdHJ1Y3Rvcl9zZXQgKGxpc3QsICZjb2RlKTsKKyAgICAgICAgc3ltYm9sX2xpc3RfZnJlZSAoKHl5dnNwWygzKSAtICgzKV0ubGlzdCkpOworICAgICAgfQogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDM1OgotI2xpbmUgMjc5ICJwYXJzZS1ncmFtLnkiCisgIGNhc2UgMzk6CisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgMzYyICJwYXJzZS1ncmFtLnkiCiAgICAgewotICAgICAgc3ltYm9sX2xpc3QgKmxpc3Q7Ci0gICAgICBmb3IgKGxpc3QgPSAoeXl2c3BbKDIpIC0gKDIpXS5saXN0KTsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpCi0Jc3ltYm9sX2Rlc3RydWN0b3Jfc2V0IChsaXN0LT5zeW0sICh5eXZzcFsoMSkgLSAoMildLmNoYXJzKSwgKHl5bHNwWygxKSAtICgyKV0pKTsKLSAgICAgIHN5bWJvbF9saXN0X2ZyZWUgKCh5eXZzcFsoMikgLSAoMildLmxpc3QpKTsKKyAgICAgIGNvZGVfcHJvcHMgY29kZTsKKyAgICAgIGNvZGVfcHJvcHNfc3ltYm9sX2FjdGlvbl9pbml0ICgmY29kZSwgKHl5dnNwWygyKSAtICgzKV0uY29kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CisgICAgICBjb2RlX3Byb3BzX3RyYW5zbGF0ZV9jb2RlICgmY29kZSk7CisgICAgICB7CisgICAgICAgIHN5bWJvbF9saXN0ICpsaXN0OworICAgICAgICBmb3IgKGxpc3QgPSAoeXl2c3BbKDMpIC0gKDMpXS5saXN0KTsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpCisgICAgICAgICAgc3ltYm9sX2xpc3RfcHJpbnRlcl9zZXQgKGxpc3QsICZjb2RlKTsKKyAgICAgICAgc3ltYm9sX2xpc3RfZnJlZSAoKHl5dnNwWygzKSAtICgzKV0ubGlzdCkpOworICAgICAgfQogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDM2OgotI2xpbmUgMjg2ICJwYXJzZS1ncmFtLnkiCi0gICAgewotICAgICAgc3ltYm9sX2xpc3QgKmxpc3Q7Ci0gICAgICBmb3IgKGxpc3QgPSAoeXl2c3BbKDIpIC0gKDIpXS5saXN0KTsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpCi0Jc3ltYm9sX3ByaW50ZXJfc2V0IChsaXN0LT5zeW0sICh5eXZzcFsoMSkgLSAoMildLmNoYXJzKSwgKHl5bHNwWygxKSAtICgyKV0pKTsKLSAgICAgIHN5bWJvbF9saXN0X2ZyZWUgKCh5eXZzcFsoMikgLSAoMildLmxpc3QpKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzNzoKLSNsaW5lIDI5MyAicGFyc2UtZ3JhbS55IgorICBjYXNlIDQwOgorLyogTGluZSAxNzc4IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDM3NCAicGFyc2UtZ3JhbS55IgogICAgIHsKICAgICAgIGRlZmF1bHRfcHJlYyA9IHRydWU7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzg6Ci0jbGluZSAyOTcgInBhcnNlLWdyYW0ueSIKKyAgY2FzZSA0MToKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSAzNzggInBhcnNlLWdyYW0ueSIKICAgICB7CiAgICAgICBkZWZhdWx0X3ByZWMgPSBmYWxzZTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzOToKLSNsaW5lIDMwMyAicGFyc2UtZ3JhbS55IgotICAgIHsgY3VycmVudF9jbGFzcyA9IG50ZXJtX3N5bTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDA6Ci0jbGluZSAzMDQgInBhcnNlLWdyYW0ueSIKLSAgICB7Ci0gICAgICBjdXJyZW50X2NsYXNzID0gdW5rbm93bl9zeW07Ci0gICAgICBjdXJyZW50X3R5cGUgPSBOVUxMOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDQxOgotI2xpbmUgMzA4ICJwYXJzZS1ncmFtLnkiCi0gICAgeyBjdXJyZW50X2NsYXNzID0gdG9rZW5fc3ltOyB9Ci0gICAgYnJlYWs7Ci0KICAgY2FzZSA0MjoKLSNsaW5lIDMwOSAicGFyc2UtZ3JhbS55IgorLyogTGluZSAxNzc4IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDM4MiAicGFyc2UtZ3JhbS55IgogICAgIHsKLSAgICAgIGN1cnJlbnRfY2xhc3MgPSB1bmtub3duX3N5bTsKLSAgICAgIGN1cnJlbnRfdHlwZSA9IE5VTEw7CisgICAgICAvKiBEbyBub3QgaW52b2tlIG11c2NsZV9wZXJjZW50X2NvZGVfZ3JvdyBoZXJlIHNpbmNlIGl0IGludm9rZXMKKyAgICAgICAgIG11c2NsZV91c2VyX25hbWVfbGlzdF9ncm93LiAgKi8KKyAgICAgIG11c2NsZV9jb2RlX2dyb3cgKCJwZXJjZW50X2NvZGUoKSIsICh5eXZzcFsoMikgLSAoMildLmNoYXJzKSwgKHl5bHNwWygyKSAtICgyKV0pKTsKKyAgICAgIGNvZGVfc2Nhbm5lcl9sYXN0X3N0cmluZ19mcmVlICgpOwogICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDQzOgotI2xpbmUgMzE0ICJwYXJzZS1ncmFtLnkiCisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgMzg5ICJwYXJzZS1ncmFtLnkiCiAgICAgewotICAgICAgc3ltYm9sX2xpc3QgKmxpc3Q7Ci0gICAgICBmb3IgKGxpc3QgPSAoeXl2c3BbKDMpIC0gKDMpXS5saXN0KTsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpCi0Jc3ltYm9sX3R5cGVfc2V0IChsaXN0LT5zeW0sICh5eXZzcFsoMikgLSAoMyldLnVuaXFzdHIpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAgICAgc3ltYm9sX2xpc3RfZnJlZSAoKHl5dnNwWygzKSAtICgzKV0ubGlzdCkpOworICAgICAgbXVzY2xlX3BlcmNlbnRfY29kZV9ncm93ICgoeXl2c3BbKDIpIC0gKDMpXS51bmlxc3RyKSwgKHl5bHNwWygyKSAtICgzKV0pLCAoeXl2c3BbKDMpIC0gKDMpXS5jaGFycyksICh5eWxzcFsoMykgLSAoMyldKSk7CisgICAgICBjb2RlX3NjYW5uZXJfbGFzdF9zdHJpbmdfZnJlZSAoKTsKICAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0NDoKLSNsaW5lIDMyNCAicGFyc2UtZ3JhbS55IgorLyogTGluZSAxNzc4IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDQwMyAicGFyc2UtZ3JhbS55IgorICAgIHt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0NToKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSA0MDQgInBhcnNlLWdyYW0ueSIKKyAgICB7IG11c2NsZV9jb2RlX2dyb3cgKCJ1bmlvbl9uYW1lIiwgKHl5dnNwWygxKSAtICgxKV0udW5pcXN0ciksICh5eWxzcFsoMSkgLSAoMSldKSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDQ2OgorLyogTGluZSAxNzc4IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDQwOSAicGFyc2UtZ3JhbS55IgorICAgIHsKKyAgICAgIHVuaW9uX3NlZW4gPSB0cnVlOworICAgICAgbXVzY2xlX2NvZGVfZ3JvdyAoInN0eXBlIiwgKHl5dnNwWygzKSAtICgzKV0uY2hhcnMpLCAoeXlsc3BbKDMpIC0gKDMpXSkpOworICAgICAgY29kZV9zY2FubmVyX2xhc3Rfc3RyaW5nX2ZyZWUgKCk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNDc6CisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgNDIwICJwYXJzZS1ncmFtLnkiCisgICAgeyBjdXJyZW50X2NsYXNzID0gbnRlcm1fc3ltOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0ODoKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSA0MjEgInBhcnNlLWdyYW0ueSIKKyAgICB7CisgICAgICBjdXJyZW50X2NsYXNzID0gdW5rbm93bl9zeW07CisgICAgICBjdXJyZW50X3R5cGUgPSBOVUxMOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDQ5OgorLyogTGluZSAxNzc4IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDQyNSAicGFyc2UtZ3JhbS55IgorICAgIHsgY3VycmVudF9jbGFzcyA9IHRva2VuX3N5bTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgNTA6CisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgNDI2ICJwYXJzZS1ncmFtLnkiCisgICAgeworICAgICAgY3VycmVudF9jbGFzcyA9IHVua25vd25fc3ltOworICAgICAgY3VycmVudF90eXBlID0gTlVMTDsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1MToKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSA0MzEgInBhcnNlLWdyYW0ueSIKKyAgICB7CisgICAgICBzeW1ib2xfbGlzdCAqbGlzdDsKKyAgICAgIHRhZ19zZWVuID0gdHJ1ZTsKKyAgICAgIGZvciAobGlzdCA9ICh5eXZzcFsoMykgLSAoMyldLmxpc3QpOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkKKwlzeW1ib2xfdHlwZV9zZXQgKGxpc3QtPmNvbnRlbnQuc3ltLCAoeXl2c3BbKDIpIC0gKDMpXS51bmlxc3RyKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKKyAgICAgIHN5bWJvbF9saXN0X2ZyZWUgKCh5eXZzcFsoMykgLSAoMyldLmxpc3QpKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1MjoKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSA0NDIgInBhcnNlLWdyYW0ueSIKICAgICB7CiAgICAgICBzeW1ib2xfbGlzdCAqbGlzdDsKICAgICAgICsrY3VycmVudF9wcmVjOwogICAgICAgZm9yIChsaXN0ID0gKHl5dnNwWygzKSAtICgzKV0ubGlzdCk7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KQogCXsKLQkgIHN5bWJvbF90eXBlX3NldCAobGlzdC0+c3ltLCBjdXJyZW50X3R5cGUsICh5eWxzcFsoMikgLSAoMyldKSk7Ci0JICBzeW1ib2xfcHJlY2VkZW5jZV9zZXQgKGxpc3QtPnN5bSwgY3VycmVudF9wcmVjLCAoeXl2c3BbKDEpIC0gKDMpXS5hc3NvYyksICh5eWxzcFsoMSkgLSAoMyldKSk7CisJICBzeW1ib2xfdHlwZV9zZXQgKGxpc3QtPmNvbnRlbnQuc3ltLCBjdXJyZW50X3R5cGUsICh5eWxzcFsoMikgLSAoMyldKSk7CisJICBzeW1ib2xfcHJlY2VkZW5jZV9zZXQgKGxpc3QtPmNvbnRlbnQuc3ltLCBjdXJyZW50X3ByZWMsICh5eXZzcFsoMSkgLSAoMyldLmFzc29jKSwgKHl5bHNwWygxKSAtICgzKV0pKTsKIAl9CiAgICAgICBzeW1ib2xfbGlzdF9mcmVlICgoeXl2c3BbKDMpIC0gKDMpXS5saXN0KSk7CiAgICAgICBjdXJyZW50X3R5cGUgPSBOVUxMOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDQ1OgotI2xpbmUgMzM4ICJwYXJzZS1ncmFtLnkiCisgIGNhc2UgNTM6CisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgNDU2ICJwYXJzZS1ncmFtLnkiCiAgICAgeyAoeXl2YWwuYXNzb2MpID0gbGVmdF9hc3NvYzsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNDY6Ci0jbGluZSAzMzkgInBhcnNlLWdyYW0ueSIKKyAgY2FzZSA1NDoKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSA0NTcgInBhcnNlLWdyYW0ueSIKICAgICB7ICh5eXZhbC5hc3NvYykgPSByaWdodF9hc3NvYzsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNDc6Ci0jbGluZSAzNDAgInBhcnNlLWdyYW0ueSIKKyAgY2FzZSA1NToKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSA0NTggInBhcnNlLWdyYW0ueSIKICAgICB7ICh5eXZhbC5hc3NvYykgPSBub25fYXNzb2M7IH0KICAgICBicmVhazsKIAotICBjYXNlIDQ4OgotI2xpbmUgMzQ0ICJwYXJzZS1ncmFtLnkiCisgIGNhc2UgNTY6CisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgNDYyICJwYXJzZS1ncmFtLnkiCiAgICAgeyBjdXJyZW50X3R5cGUgPSBOVUxMOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA0OToKLSNsaW5lIDM0NSAicGFyc2UtZ3JhbS55IgotICAgIHsgY3VycmVudF90eXBlID0gKHl5dnNwWygxKSAtICgxKV0udW5pcXN0cik7IH0KKyAgY2FzZSA1NzoKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSA0NjMgInBhcnNlLWdyYW0ueSIKKyAgICB7IGN1cnJlbnRfdHlwZSA9ICh5eXZzcFsoMSkgLSAoMSldLnVuaXFzdHIpOyB0YWdfc2VlbiA9IHRydWU7IH0KICAgICBicmVhazsKIAotICBjYXNlIDUwOgotI2xpbmUgMzUxICJwYXJzZS1ncmFtLnkiCi0gICAgeyAoeXl2YWwubGlzdCkgPSBzeW1ib2xfbGlzdF9uZXcgKCh5eXZzcFsoMSkgLSAoMSldLnN5bWJvbCksICh5eWxzcFsoMSkgLSAoMSldKSk7IH0KKyAgY2FzZSA1ODoKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSA0NjkgInBhcnNlLWdyYW0ueSIKKyAgICB7ICh5eXZhbC5saXN0KSA9IHN5bWJvbF9saXN0X3N5bV9uZXcgKCh5eXZzcFsoMSkgLSAoMSldLnN5bWJvbCksICh5eWxzcFsoMSkgLSAoMSldKSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDUxOgotI2xpbmUgMzUyICJwYXJzZS1ncmFtLnkiCi0gICAgeyAoeXl2YWwubGlzdCkgPSBzeW1ib2xfbGlzdF9wcmVwZW5kICgoeXl2c3BbKDEpIC0gKDIpXS5saXN0KSwgKHl5dnNwWygyKSAtICgyKV0uc3ltYm9sKSwgKHl5bHNwWygyKSAtICgyKV0pKTsgfQorICBjYXNlIDU5OgorLyogTGluZSAxNzc4IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDQ3MSAicGFyc2UtZ3JhbS55IgorICAgIHsgKHl5dmFsLmxpc3QpID0gc3ltYm9sX2xpc3RfcHJlcGVuZCAoKHl5dnNwWygxKSAtICgyKV0ubGlzdCksIHN5bWJvbF9saXN0X3N5bV9uZXcgKCh5eXZzcFsoMikgLSAoMildLnN5bWJvbCksICh5eWxzcFsoMikgLSAoMildKSkpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA1MjoKLSNsaW5lIDM1OCAicGFyc2UtZ3JhbS55IgorICBjYXNlIDYwOgorLyogTGluZSAxNzc4IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDQ3NSAicGFyc2UtZ3JhbS55IgorICAgIHsgKHl5dmFsLnN5bWJvbCkgPSAoeXl2c3BbKDEpIC0gKDEpXS5zeW1ib2wpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2MToKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSA0NzYgInBhcnNlLWdyYW0ueSIKKyAgICB7ICh5eXZhbC5zeW1ib2wpID0gKHl5dnNwWygxKSAtICgyKV0uc3ltYm9sKTsgc3ltYm9sX3VzZXJfdG9rZW5fbnVtYmVyX3NldCAoKHl5dnNwWygxKSAtICgyKV0uc3ltYm9sKSwgKHl5dnNwWygyKSAtICgyKV0uaW50ZWdlciksICh5eWxzcFsoMikgLSAoMildKSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDYyOgorLyogTGluZSAxNzc4IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDQ4MiAicGFyc2UtZ3JhbS55IgorICAgIHsgKHl5dmFsLmxpc3QpID0gc3ltYm9sX2xpc3Rfc3ltX25ldyAoKHl5dnNwWygxKSAtICgxKV0uc3ltYm9sKSwgKHl5bHNwWygxKSAtICgxKV0pKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgNjM6CisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgNDg0ICJwYXJzZS1ncmFtLnkiCisgICAgeyAoeXl2YWwubGlzdCkgPSBzeW1ib2xfbGlzdF9wcmVwZW5kICgoeXl2c3BbKDEpIC0gKDIpXS5saXN0KSwgc3ltYm9sX2xpc3Rfc3ltX25ldyAoKHl5dnNwWygyKSAtICgyKV0uc3ltYm9sKSwgKHl5bHNwWygyKSAtICgyKV0pKSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDY0OgorLyogTGluZSAxNzc4IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDQ4OCAicGFyc2UtZ3JhbS55IgorICAgIHsgKHl5dmFsLmxpc3QpID0gKHl5dnNwWygxKSAtICgxKV0ubGlzdCk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDY1OgorLyogTGluZSAxNzc4IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDQ4OSAicGFyc2UtZ3JhbS55IgorICAgIHsgKHl5dmFsLmxpc3QpID0gc3ltYm9sX2xpc3RfcHJlcGVuZCAoKHl5dnNwWygxKSAtICgyKV0ubGlzdCksICh5eXZzcFsoMikgLSAoMildLmxpc3QpKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgNjY6CisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgNDkzICJwYXJzZS1ncmFtLnkiCisgICAgeyAoeXl2YWwubGlzdCkgPSBzeW1ib2xfbGlzdF9zeW1fbmV3ICgoeXl2c3BbKDEpIC0gKDEpXS5zeW1ib2wpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2NzoKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSA0OTQgInBhcnNlLWdyYW0ueSIKKyAgICB7ICh5eXZhbC5saXN0KSA9IHN5bWJvbF9saXN0X3R5cGVfbmV3ICgoeXl2c3BbKDEpIC0gKDEpXS51bmlxc3RyKSwgKHl5bHNwWygxKSAtICgxKV0pKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgNjg6CisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgNDk1ICJwYXJzZS1ncmFtLnkiCisgICAgeyAoeXl2YWwubGlzdCkgPSBzeW1ib2xfbGlzdF9kZWZhdWx0X3RhZ2dlZF9uZXcgKCh5eWxzcFsoMSkgLSAoMSldKSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDY5OgorLyogTGluZSAxNzc4IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDQ5NiAicGFyc2UtZ3JhbS55IgorICAgIHsgKHl5dmFsLmxpc3QpID0gc3ltYm9sX2xpc3RfZGVmYXVsdF90YWdsZXNzX25ldyAoKHl5bHNwWygxKSAtICgxKV0pKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgNzA6CisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgNTAyICJwYXJzZS1ncmFtLnkiCiAgICAgewogICAgICAgIGN1cnJlbnRfdHlwZSA9ICh5eXZzcFsoMSkgLSAoMSldLnVuaXFzdHIpOworICAgICAgIHRhZ19zZWVuID0gdHJ1ZTsKICAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNTM6Ci0jbGluZSAzNjIgInBhcnNlLWdyYW0ueSIKKyAgY2FzZSA3MToKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSA1MDcgInBhcnNlLWdyYW0ueSIKICAgICB7CiAgICAgICAgc3ltYm9sX2NsYXNzX3NldCAoKHl5dnNwWygxKSAtICgxKV0uc3ltYm9sKSwgY3VycmVudF9jbGFzcywgKHl5bHNwWygxKSAtICgxKV0pLCB0cnVlKTsKICAgICAgICBzeW1ib2xfdHlwZV9zZXQgKCh5eXZzcFsoMSkgLSAoMSldLnN5bWJvbCksIGN1cnJlbnRfdHlwZSwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNTQ6Ci0jbGluZSAzNjcgInBhcnNlLWdyYW0ueSIKKyAgY2FzZSA3MjoKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSA1MTIgInBhcnNlLWdyYW0ueSIKICAgICB7CiAgICAgICBzeW1ib2xfY2xhc3Nfc2V0ICgoeXl2c3BbKDEpIC0gKDIpXS5zeW1ib2wpLCBjdXJyZW50X2NsYXNzLCAoeXlsc3BbKDEpIC0gKDIpXSksIHRydWUpOwogICAgICAgc3ltYm9sX3R5cGVfc2V0ICgoeXl2c3BbKDEpIC0gKDIpXS5zeW1ib2wpLCBjdXJyZW50X3R5cGUsICh5eWxzcFsoMSkgLSAoMildKSk7CkBAIC0yMDUxLDggKzI3MTAsOSBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDU1OgotI2xpbmUgMzczICJwYXJzZS1ncmFtLnkiCisgIGNhc2UgNzM6CisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgNTE4ICJwYXJzZS1ncmFtLnkiCiAgICAgewogICAgICAgc3ltYm9sX2NsYXNzX3NldCAoKHl5dnNwWygxKSAtICgyKV0uc3ltYm9sKSwgY3VycmVudF9jbGFzcywgKHl5bHNwWygxKSAtICgyKV0pLCB0cnVlKTsKICAgICAgIHN5bWJvbF90eXBlX3NldCAoKHl5dnNwWygxKSAtICgyKV0uc3ltYm9sKSwgY3VycmVudF90eXBlLCAoeXlsc3BbKDEpIC0gKDIpXSkpOwpAQCAtMjA2MCw4ICsyNzIwLDkgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA1NjoKLSNsaW5lIDM3OSAicGFyc2UtZ3JhbS55IgorICBjYXNlIDc0OgorLyogTGluZSAxNzc4IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDUyNCAicGFyc2UtZ3JhbS55IgogICAgIHsKICAgICAgIHN5bWJvbF9jbGFzc19zZXQgKCh5eXZzcFsoMSkgLSAoMyldLnN5bWJvbCksIGN1cnJlbnRfY2xhc3MsICh5eWxzcFsoMSkgLSAoMyldKSwgdHJ1ZSk7CiAgICAgICBzeW1ib2xfdHlwZV9zZXQgKCh5eXZzcFsoMSkgLSAoMyldLnN5bWJvbCksIGN1cnJlbnRfdHlwZSwgKHl5bHNwWygxKSAtICgzKV0pKTsKQEAgLTIwNzAsOTQgKzI3MzEsMTg0IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNjM6Ci0jbGluZSA0MDkgInBhcnNlLWdyYW0ueSIKKyAgY2FzZSA4MToKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSA1NTQgInBhcnNlLWdyYW0ueSIKICAgICB7CiAgICAgICB5eWVycm9rOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDY0OgotI2xpbmUgNDE1ICJwYXJzZS1ncmFtLnkiCi0gICAgeyBjdXJyZW50X2xocyA9ICh5eXZzcFsoMSkgLSAoMSldLnN5bWJvbCk7IGN1cnJlbnRfbGhzX2xvY2F0aW9uID0gKHl5bHNwWygxKSAtICgxKV0pOyB9CisgIGNhc2UgODI6CisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgNTYwICJwYXJzZS1ncmFtLnkiCisgICAgeyBjdXJyZW50X2xocyAoKHl5dnNwWygxKSAtICgyKV0uc3ltYm9sKSwgKHl5bHNwWygxKSAtICgyKV0pLCAoeXl2c3BbKDIpIC0gKDIpXS5uYW1lZF9yZWYpKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNjY6Ci0jbGluZSA0MTkgInBhcnNlLWdyYW0ueSIKKyAgY2FzZSA4MzoKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSA1NjEgInBhcnNlLWdyYW0ueSIKKyAgICB7CisgICAgLyogRnJlZSB0aGUgY3VycmVudCBsaHMuICovCisgICAgY3VycmVudF9saHMgKDAsICh5eWxzcFsoMSkgLSAoNCldKSwgMCk7CisgIH0KKyAgICBicmVhazsKKworICBjYXNlIDg0OgorLyogTGluZSAxNzc4IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDU2OCAicGFyc2UtZ3JhbS55IgogICAgIHsgZ3JhbW1hcl9jdXJyZW50X3J1bGVfZW5kICgoeXlsc3BbKDEpIC0gKDEpXSkpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2NzoKLSNsaW5lIDQyMCAicGFyc2UtZ3JhbS55IgorICBjYXNlIDg1OgorLyogTGluZSAxNzc4IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDU2OSAicGFyc2UtZ3JhbS55IgogICAgIHsgZ3JhbW1hcl9jdXJyZW50X3J1bGVfZW5kICgoeXlsc3BbKDMpIC0gKDMpXSkpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2OToKLSNsaW5lIDQyNiAicGFyc2UtZ3JhbS55IgotICAgIHsgZ3JhbW1hcl9jdXJyZW50X3J1bGVfYmVnaW4gKGN1cnJlbnRfbGhzLCBjdXJyZW50X2xoc19sb2NhdGlvbik7IH0KKyAgY2FzZSA4NzoKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSA1NzUgInBhcnNlLWdyYW0ueSIKKyAgICB7IGdyYW1tYXJfY3VycmVudF9ydWxlX2JlZ2luIChjdXJyZW50X2xoc19zeW1ib2wsIGN1cnJlbnRfbGhzX2xvY2F0aW9uLAorCQkJCSAgY3VycmVudF9saHNfbmFtZWRfcmVmKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNzA6Ci0jbGluZSA0MjggInBhcnNlLWdyYW0ueSIKLSAgICB7IGdyYW1tYXJfY3VycmVudF9ydWxlX3N5bWJvbF9hcHBlbmQgKCh5eXZzcFsoMikgLSAoMildLnN5bWJvbCksICh5eWxzcFsoMikgLSAoMildKSk7IH0KKyAgY2FzZSA4ODoKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSA1NzggInBhcnNlLWdyYW0ueSIKKyAgICB7IGdyYW1tYXJfY3VycmVudF9ydWxlX3N5bWJvbF9hcHBlbmQgKCh5eXZzcFsoMikgLSAoMyldLnN5bWJvbCksICh5eWxzcFsoMikgLSAoMyldKSwgKHl5dnNwWygzKSAtICgzKV0ubmFtZWRfcmVmKSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDcyOgotI2xpbmUgNDMxICJwYXJzZS1ncmFtLnkiCisgIGNhc2UgODk6CisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgNTgwICJwYXJzZS1ncmFtLnkiCisgICAgeyBncmFtbWFyX2N1cnJlbnRfcnVsZV9hY3Rpb25fYXBwZW5kICgoeXl2c3BbKDIpIC0gKDMpXS5jb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCAoeXl2c3BbKDMpIC0gKDMpXS5uYW1lZF9yZWYpKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgOTA6CisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgNTgyICJwYXJzZS1ncmFtLnkiCiAgICAgeyBncmFtbWFyX2N1cnJlbnRfcnVsZV9wcmVjX3NldCAoKHl5dnNwWygzKSAtICgzKV0uc3ltYm9sKSwgKHl5bHNwWygzKSAtICgzKV0pKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNzM6Ci0jbGluZSA0MzMgInBhcnNlLWdyYW0ueSIKKyAgY2FzZSA5MToKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSA1ODQgInBhcnNlLWdyYW0ueSIKICAgICB7IGdyYW1tYXJfY3VycmVudF9ydWxlX2RwcmVjX3NldCAoKHl5dnNwWygzKSAtICgzKV0uaW50ZWdlciksICh5eWxzcFsoMykgLSAoMyldKSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDc0OgotI2xpbmUgNDM1ICJwYXJzZS1ncmFtLnkiCisgIGNhc2UgOTI6CisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgNTg2ICJwYXJzZS1ncmFtLnkiCiAgICAgeyBncmFtbWFyX2N1cnJlbnRfcnVsZV9tZXJnZV9zZXQgKCh5eXZzcFsoMykgLSAoMyldLnVuaXFzdHIpLCAoeXlsc3BbKDMpIC0gKDMpXSkpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA3NToKLSNsaW5lIDQzOSAicGFyc2UtZ3JhbS55IgotICAgIHsgKHl5dmFsLnN5bWJvbCkgPSAoeXl2c3BbKDEpIC0gKDEpXS5zeW1ib2wpOyB9CisgIGNhc2UgOTM6CisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgNTkwICJwYXJzZS1ncmFtLnkiCisgICAgeyAoeXl2YWwubmFtZWRfcmVmKSA9IDA7IH0KICAgICBicmVhazsKIAotICBjYXNlIDc2OgotI2xpbmUgNDQwICJwYXJzZS1ncmFtLnkiCi0gICAgeyAoeXl2YWwuc3ltYm9sKSA9ICh5eXZzcFsoMSkgLSAoMSldLnN5bWJvbCk7IH0KKyAgY2FzZSA5NDoKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSA1OTIgInBhcnNlLWdyYW0ueSIKKyAgICB7ICh5eXZhbC5uYW1lZF9yZWYpID0gbmFtZWRfcmVmX25ldygoeXl2c3BbKDEpIC0gKDEpXS51bmlxc3RyKSwgKHl5bHNwWygxKSAtICgxKV0pKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNzc6Ci0jbGluZSA0NTYgInBhcnNlLWdyYW0ueSIKLSAgICB7IGdyYW1tYXJfY3VycmVudF9ydWxlX2FjdGlvbl9hcHBlbmQgKGxhc3Rfc3RyaW5nLCBsYXN0X2JyYWNlZF9jb2RlX2xvYyk7IH0KKyAgY2FzZSA5NjoKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSA2MDQgInBhcnNlLWdyYW0ueSIKKyAgICB7ICh5eXZhbC51bmlxc3RyKSA9IHVuaXFzdHJfbmV3ICgoeXl2c3BbKDEpIC0gKDEpXS5jaGFycykpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA3OToKLSNsaW5lIDQ2MyAicGFyc2UtZ3JhbS55IgorICBjYXNlIDk3OgorLyogTGluZSAxNzc4IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDYwOSAicGFyc2UtZ3JhbS55IgorICAgIHsgKHl5dmFsLmNoYXJzKSA9ICIiOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5ODoKKy8qIExpbmUgMTc3OCBvZiB5YWNjLmMgICovCisjbGluZSA2MTAgInBhcnNlLWdyYW0ueSIKKyAgICB7ICh5eXZhbC5jaGFycykgPSAoeXl2c3BbKDEpIC0gKDEpXS51bmlxc3RyKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTAwOgorLyogTGluZSAxNzc4IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDYyMSAicGFyc2UtZ3JhbS55IgorICAgIHsKKyAgICAgIGNvZGVfcHJvcHMgcGxhaW5fY29kZTsKKyAgICAgICh5eXZzcFsoMSkgLSAoMSldLmNvZGUpW3N0cmxlbiAoKHl5dnNwWygxKSAtICgxKV0uY29kZSkpIC0gMV0gPSAnXG4nOworICAgICAgY29kZV9wcm9wc19wbGFpbl9pbml0ICgmcGxhaW5fY29kZSwgKHl5dnNwWygxKSAtICgxKV0uY29kZSkrMSwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgIGNvZGVfcHJvcHNfdHJhbnNsYXRlX2NvZGUgKCZwbGFpbl9jb2RlKTsKKyAgICAgIGdyYW1fc2Nhbm5lcl9sYXN0X3N0cmluZ19mcmVlICgpOworICAgICAgKHl5dmFsLmNoYXJzKSA9IHBsYWluX2NvZGUuY29kZTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDE6CisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgNjQxICJwYXJzZS1ncmFtLnkiCisgICAgeyAoeXl2YWwuc3ltYm9sKSA9IHN5bWJvbF9mcm9tX3VuaXFzdHIgKCh5eXZzcFsoMSkgLSAoMSldLnVuaXFzdHIpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDI6CisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgNjQzICJwYXJzZS1ncmFtLnkiCisgICAgeworICAgICAgKHl5dmFsLnN5bWJvbCkgPSBzeW1ib2xfZ2V0IChjaGFyX25hbWUgKCh5eXZzcFsoMSkgLSAoMSldLmNoYXJhY3RlcikpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgc3ltYm9sX2NsYXNzX3NldCAoKHl5dmFsLnN5bWJvbCksIHRva2VuX3N5bSwgKHl5bHNwWygxKSAtICgxKV0pLCBmYWxzZSk7CisgICAgICBzeW1ib2xfdXNlcl90b2tlbl9udW1iZXJfc2V0ICgoeXl2YWwuc3ltYm9sKSwgKHl5dnNwWygxKSAtICgxKV0uY2hhcmFjdGVyKSwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDM6CisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgNjUxICJwYXJzZS1ncmFtLnkiCisgICAgeyAoeXl2YWwuc3ltYm9sKSA9IHN5bWJvbF9mcm9tX3VuaXFzdHIgKCh5eXZzcFsoMSkgLSAoMSldLnVuaXFzdHIpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDY6CisvKiBMaW5lIDE3Nzggb2YgeWFjYy5jICAqLworI2xpbmUgNjYzICJwYXJzZS1ncmFtLnkiCiAgICAgewogICAgICAgKHl5dmFsLnN5bWJvbCkgPSBzeW1ib2xfZ2V0IChxdW90ZWFyZ19zdHlsZSAoY19xdW90aW5nX3N0eWxlLCAoeXl2c3BbKDEpIC0gKDEpXS5jaGFycykpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgICAgc3ltYm9sX2NsYXNzX3NldCAoKHl5dmFsLnN5bWJvbCksIHRva2VuX3N5bSwgKHl5bHNwWygxKSAtICgxKV0pLCBmYWxzZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgODA6Ci0jbGluZSA0NzIgInBhcnNlLWdyYW0ueSIKLSAgICB7ICh5eXZhbC5jaGFycykgPSAoeXl2c3BbKDEpIC0gKDEpXS5jaGFycyk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDgyOgotI2xpbmUgNDc5ICJwYXJzZS1ncmFtLnkiCisgIGNhc2UgMTA4OgorLyogTGluZSAxNzc4IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDY3MiAicGFyc2UtZ3JhbS55IgogICAgIHsKLSAgICAgIG11c2NsZV9jb2RlX2dyb3cgKCJlcGlsb2d1ZSIsICh5eXZzcFsoMikgLSAoMildLmNoYXJzKSwgKHl5bHNwWygyKSAtICgyKV0pKTsKLSAgICAgIHNjYW5uZXJfbGFzdF9zdHJpbmdfZnJlZSAoKTsKKyAgICAgIGNvZGVfcHJvcHMgcGxhaW5fY29kZTsKKyAgICAgIGNvZGVfcHJvcHNfcGxhaW5faW5pdCAoJnBsYWluX2NvZGUsICh5eXZzcFsoMikgLSAoMildLmNoYXJzKSwgKHl5bHNwWygyKSAtICgyKV0pKTsKKyAgICAgIGNvZGVfcHJvcHNfdHJhbnNsYXRlX2NvZGUgKCZwbGFpbl9jb2RlKTsKKyAgICAgIGdyYW1fc2Nhbm5lcl9sYXN0X3N0cmluZ19mcmVlICgpOworICAgICAgbXVzY2xlX2NvZGVfZ3JvdyAoImVwaWxvZ3VlIiwgcGxhaW5fY29kZS5jb2RlLCAoeXlsc3BbKDIpIC0gKDIpXSkpOworICAgICAgY29kZV9zY2FubmVyX2xhc3Rfc3RyaW5nX2ZyZWUgKCk7CiAgICAgfQogICAgIGJyZWFrOwogCiAKLS8qIExpbmUgMTI2NyBvZiB5YWNjLmMuICAqLwotI2xpbmUgMjE1OSAicGFyc2UtZ3JhbS5jIgotICAgICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgfQorLyogTGluZSAxNzc4IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDI4OTYgInBhcnNlLWdyYW0uYyIKKyAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgICB9CisgICAgaWYgKHl5Y2hhcl9iYWNrdXAgIT0geXljaGFyKQorICAgICAgWVlfTEFDX0RJU0NBUkQgKCJ5eWNoYXIgY2hhbmdlIik7CisgIH0KKyAgLyogVXNlciBzZW1hbnRpYyBhY3Rpb25zIHNvbWV0aW1lcyBhbHRlciB5eWNoYXIsIGFuZCB0aGF0IHJlcXVpcmVzCisgICAgIHRoYXQgeXl0b2tlbiBiZSB1cGRhdGVkIHdpdGggdGhlIG5ldyB0cmFuc2xhdGlvbi4gIFdlIHRha2UgdGhlCisgICAgIGFwcHJvYWNoIG9mIHRyYW5zbGF0aW5nIGltbWVkaWF0ZWx5IGJlZm9yZSBldmVyeSB1c2Ugb2YgeXl0b2tlbi4KKyAgICAgT25lIGFsdGVybmF0aXZlIGlzIHRyYW5zbGF0aW5nIGhlcmUgYWZ0ZXIgZXZlcnkgc2VtYW50aWMgYWN0aW9uLAorICAgICBidXQgdGhhdCB0cmFuc2xhdGlvbiB3b3VsZCBiZSBtaXNzZWQgaWYgdGhlIHNlbWFudGljIGFjdGlvbiBpbnZva2VzCisgICAgIFlZQUJPUlQsIFlZQUNDRVBULCBvciBZWUVSUk9SIGltbWVkaWF0ZWx5IGFmdGVyIGFsdGVyaW5nIHl5Y2hhciBvcgorICAgICBpZiBpdCBpbnZva2VzIFlZQkFDS1VQLiAgSW4gdGhlIGNhc2Ugb2YgWVlBQk9SVCBvciBZWUFDQ0VQVCwgYW4KKyAgICAgaW5jb3JyZWN0IGRlc3RydWN0b3IgbWlnaHQgdGhlbiBiZSBpbnZva2VkIGltbWVkaWF0ZWx5LiAgSW4gdGhlCisgICAgIGNhc2Ugb2YgWVlFUlJPUiBvciBZWUJBQ0tVUCwgc3Vic2VxdWVudCBwYXJzZXIgYWN0aW9ucyBtaWdodCBsZWFkCisgICAgIHRvIGFuIGluY29ycmVjdCBkZXN0cnVjdG9yIGNhbGwgb3IgdmVyYm9zZSBzeW50YXggZXJyb3IgbWVzc2FnZQorICAgICBiZWZvcmUgdGhlIGxvb2thaGVhZCBpcyB0cmFuc2xhdGVkLiAgKi8KICAgWVlfU1lNQk9MX1BSSU5UICgiLT4gJCQgPSIsIHl5cjFbeXluXSwgJnl5dmFsLCAmeXlsb2MpOwogCiAgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKQEAgLTIxODYsNiArMjkzNywxMCBAQAogfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvciB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHl5ZXJybGFiOgorICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBsYXRlc3QgbG9va2FoZWFkIHRyYW5zbGF0aW9uLiAgU2VlIGNvbW1lbnRzIGF0CisgICAgIHVzZXIgc2VtYW50aWMgYWN0aW9ucyBmb3Igd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LiAgKi8KKyAgeXl0b2tlbiA9IHl5Y2hhciA9PSBZWUVNUFRZID8gWVlFTVBUWSA6IFlZVFJBTlNMQVRFICh5eWNoYXIpOworCiAgIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3IuICAqLwogICBpZiAoIXl5ZXJyc3RhdHVzKQogICAgIHsKQEAgLTIxOTMsNDUgKzI5NDgsNDcgQEAKICNpZiAhIFlZRVJST1JfVkVSQk9TRQogICAgICAgeXllcnJvciAoWVlfKCJzeW50YXggZXJyb3IiKSk7CiAjZWxzZQorIyBkZWZpbmUgWVlTWU5UQVhfRVJST1IgeXlzeW50YXhfZXJyb3IgKCZ5eW1zZ19hbGxvYywgJnl5bXNnLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXllc2EsICZ5eWVzLCAmeXllc19jYXBhY2l0eSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5c3NwLCB5eXRva2VuKQogICAgICAgewotCVlZU0laRV9UIHl5c2l6ZSA9IHl5c3ludGF4X2Vycm9yICgwLCB5eXN0YXRlLCB5eWNoYXIpOwotCWlmICh5eW1zZ19hbGxvYyA8IHl5c2l6ZSAmJiB5eW1zZ19hbGxvYyA8IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkKLQkgIHsKLQkgICAgWVlTSVpFX1QgeXlhbGxvYyA9IDIgKiB5eXNpemU7Ci0JICAgIGlmICghICh5eXNpemUgPD0geXlhbGxvYyAmJiB5eWFsbG9jIDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpCi0JICAgICAgeXlhbGxvYyA9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTTsKLQkgICAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQotCSAgICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOwotCSAgICB5eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxMT0MgKHl5YWxsb2MpOwotCSAgICBpZiAoeXltc2cpCi0JICAgICAgeXltc2dfYWxsb2MgPSB5eWFsbG9jOwotCSAgICBlbHNlCi0JICAgICAgewotCQl5eW1zZyA9IHl5bXNnYnVmOwotCQl5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKLQkgICAgICB9Ci0JICB9Ci0KLQlpZiAoMCA8IHl5c2l6ZSAmJiB5eXNpemUgPD0geXltc2dfYWxsb2MpCi0JICB7Ci0JICAgICh2b2lkKSB5eXN5bnRheF9lcnJvciAoeXltc2csIHl5c3RhdGUsIHl5Y2hhcik7Ci0JICAgIHl5ZXJyb3IgKHl5bXNnKTsKLQkgIH0KLQllbHNlCi0JICB7Ci0JICAgIHl5ZXJyb3IgKFlZXygic3ludGF4IGVycm9yIikpOwotCSAgICBpZiAoeXlzaXplICE9IDApCi0JICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKLQkgIH0KKyAgICAgICAgY2hhciBjb25zdCAqeXltc2dwID0gWVlfKCJzeW50YXggZXJyb3IiKTsKKyAgICAgICAgaW50IHl5c3ludGF4X2Vycm9yX3N0YXR1czsKKyAgICAgICAgaWYgKHl5Y2hhciAhPSBZWUVNUFRZKQorICAgICAgICAgIFlZX0xBQ19FU1RBQkxJU0g7CisgICAgICAgIHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9IFlZU1lOVEFYX0VSUk9SOworICAgICAgICBpZiAoeXlzeW50YXhfZXJyb3Jfc3RhdHVzID09IDApCisgICAgICAgICAgeXltc2dwID0geXltc2c7CisgICAgICAgIGVsc2UgaWYgKHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9PSAxKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKKyAgICAgICAgICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7CisgICAgICAgICAgICB5eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxMT0MgKHl5bXNnX2FsbG9jKTsKKyAgICAgICAgICAgIGlmICgheXltc2cpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB5eW1zZyA9IHl5bXNnYnVmOworICAgICAgICAgICAgICAgIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworICAgICAgICAgICAgICAgIHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9IDI7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9IFlZU1lOVEFYX0VSUk9SOworICAgICAgICAgICAgICAgIHl5bXNncCA9IHl5bXNnOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB5eWVycm9yICh5eW1zZ3ApOworICAgICAgICBpZiAoeXlzeW50YXhfZXJyb3Jfc3RhdHVzID09IDIpCisgICAgICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKICAgICAgIH0KKyMgdW5kZWYgWVlTWU5UQVhfRVJST1IKICNlbmRpZgogICAgIH0KIAotICB5eWVycm9yX3JhbmdlWzBdID0geXlsbG9jOworICB5eWVycm9yX3JhbmdlWzFdID0geXlsbG9jOwogCiAgIGlmICh5eWVycnN0YXR1cyA9PSAzKQogICAgIHsKLSAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rLWFoZWFkIHRva2VuIGFmdGVyIGFuCisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIGFuCiAJIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KIAogICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKQEAgLTIyNDgsNyArMzAwNSw3IEBACiAJfQogICAgIH0KIAotICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCisgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgogICAgICB0b2tlbi4gICovCiAgIGdvdG8geXllcnJsYWIxOwogCkBAIC0yMjY0LDcgKzMwMjEsNyBAQAogICBpZiAoLypDT05TVENPTkQqLyAwKQogICAgICBnb3RvIHl5ZXJyb3JsYWI7CiAKLSAgeXllcnJvcl9yYW5nZVswXSA9IHl5bHNwWzEteXlsZW5dOworICB5eWVycm9yX3JhbmdlWzFdID0geXlsc3BbMS15eWxlbl07CiAgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKICAgICAgdGhpcyBZWUVSUk9SLiAgKi8KICAgWVlQT1BTVEFDSyAoeXlsZW4pOwpAQCAtMjI4Myw3ICszMDQwLDcgQEAKICAgZm9yICg7OykKICAgICB7CiAgICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07Ci0gICAgICBpZiAoeXluICE9IFlZUEFDVF9OSU5GKQorICAgICAgaWYgKCF5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdCAoeXluKSkKIAl7CiAJICB5eW4gKz0gWVlURVJST1I7CiAJICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5bl0gPT0gWVlURVJST1IpCkBAIC0yMjk4LDcgKzMwNTUsNyBAQAogICAgICAgaWYgKHl5c3NwID09IHl5c3MpCiAJWVlBQk9SVDsKIAotICAgICAgeXllcnJvcl9yYW5nZVswXSA9ICp5eWxzcDsKKyAgICAgIHl5ZXJyb3JfcmFuZ2VbMV0gPSAqeXlsc3A7CiAgICAgICB5eWRlc3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAogCQkgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3AsIHl5bHNwKTsKICAgICAgIFlZUE9QU1RBQ0sgKDEpOwpAQCAtMjMwNiwxNSArMzA2MywxOCBAQAogICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKICAgICB9CiAKLSAgaWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOworICAvKiBJZiB0aGUgc3RhY2sgcG9wcGluZyBhYm92ZSBkaWRuJ3QgbG9zZSB0aGUgaW5pdGlhbCBjb250ZXh0IGZvciB0aGUKKyAgICAgY3VycmVudCBsb29rYWhlYWQgdG9rZW4sIHRoZSBzaGlmdCBiZWxvdyB3aWxsIGZvciBzdXJlLiAgKi8KKyAgWVlfTEFDX0RJU0NBUkQgKCJlcnJvciByZWNvdmVyeSIpOwogCisgIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCiAgICorK3l5dnNwID0geXlsdmFsOworICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKIAotICB5eWVycm9yX3JhbmdlWzFdID0geXlsbG9jOworICB5eWVycm9yX3JhbmdlWzJdID0geXlsbG9jOwogICAvKiBVc2luZyBZWUxMT0MgaXMgdGVtcHRpbmcsIGJ1dCB3b3VsZCBjaGFuZ2UgdGhlIGxvY2F0aW9uIG9mCi0gICAgIHRoZSBsb29rLWFoZWFkLiAgWVlMT0MgaXMgYXZhaWxhYmxlIHRob3VnaC4gICovCi0gIFlZTExPQ19ERUZBVUxUICh5eWxvYywgKHl5ZXJyb3JfcmFuZ2UgLSAxKSwgMik7CisgICAgIHRoZSBsb29rYWhlYWQuICBZWUxPQyBpcyBhdmFpbGFibGUgdGhvdWdoLiAgKi8KKyAgWVlMTE9DX0RFRkFVTFQgKHl5bG9jLCB5eWVycm9yX3JhbmdlLCAyKTsKICAgKisreXlsc3AgPSB5eWxvYzsKIAogICAvKiBTaGlmdCB0aGUgZXJyb3IgdG9rZW4uICAqLwpAQCAtMjMzOCw3ICszMDk4LDcgQEAKICAgeXlyZXN1bHQgPSAxOwogICBnb3RvIHl5cmV0dXJuOwogCi0jaWZuZGVmIHl5b3ZlcmZsb3cKKyNpZiAxCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhhdXN0aW9uIGNvbWVzIGhlcmUuICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0yMzQ5LDkgKzMxMDksMTQgQEAKICNlbmRpZgogCiB5eXJldHVybjoKLSAgaWYgKHl5Y2hhciAhPSBZWUVPRiAmJiB5eWNoYXIgIT0gWVlFTVBUWSkKLSAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwKLQkJIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOworICBpZiAoeXljaGFyICE9IFlZRU1QVFkpCisgICAgeworICAgICAgLyogTWFrZSBzdXJlIHdlIGhhdmUgbGF0ZXN0IGxvb2thaGVhZCB0cmFuc2xhdGlvbi4gIFNlZSBjb21tZW50cyBhdAorICAgICAgICAgdXNlciBzZW1hbnRpYyBhY3Rpb25zIGZvciB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuICAqLworICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOworICAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwKKyAgICAgICAgICAgICAgICAgIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOworICAgIH0KICAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAogICAgICB0aGlzIFlZQUJPUlQgb3IgWVlBQ0NFUFQuICAqLwogICBZWVBPUFNUQUNLICh5eWxlbik7CkBAIC0yMzY2LDYgKzMxMzEsOCBAQAogICBpZiAoeXlzcyAhPSB5eXNzYSkKICAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOwogI2VuZGlmCisgIGlmICh5eWVzICE9IHl5ZXNhKQorICAgIFlZU1RBQ0tfRlJFRSAoeXllcyk7CiAjaWYgWVlFUlJPUl9WRVJCT1NFCiAgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKICAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKQEAgLTIzNzUsNyArMzE0Miw4IEBACiB9CiAKIAotI2xpbmUgNDg1ICJwYXJzZS1ncmFtLnkiCisvKiBMaW5lIDIwNDEgb2YgeWFjYy5jICAqLworI2xpbmUgNjgyICJwYXJzZS1ncmFtLnkiCiAKIAogCkBAIC0yMzk1LDcgKzMxNjMsNyBAQAogICBsb2Muc3RhcnQgPSByaHNbbl0uZW5kOwogICBsb2MuZW5kID0gcmhzW25dLmVuZDsKIAotICAvKiBJZ25vcmUgZW1wdHkgbm9udGVybWluYWxzIHRoZSBzdGFydCBvZiB0aGUgdGhlIHJpZ2h0LWhhbmQgc2lkZS4KKyAgLyogSWdub3JlIGVtcHR5IG5vbnRlcm1pbmFscyB0aGUgc3RhcnQgb2YgdGhlIHJpZ2h0LWhhbmQgc2lkZS4KICAgICAgRG8gbm90IGJvdGhlciB0byBpZ25vcmUgdGhlbSBhdCB0aGUgZW5kIG9mIHRoZSByaWdodC1oYW5kIHNpZGUsCiAgICAgIHNpbmNlIGVtcHR5IG5vbnRlcm1pbmFscyBoYXZlIHRoZSBzYW1lIGVuZCBhcyB0aGVpciBwcmVkZWNlc3NvcnMuICAqLwogICBmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykKQEAgLTI0MzIsNDIgKzMyMDAsMzUgQEAKIAogICAvKiBTdHJpcCB0aGUgc3Vycm91bmRpbmcgJ3snIGFuZCAnfScsIGFuZCBhbnkgYmxhbmtzIGp1c3QgaW5zaWRlCiAgICAgIHRoZSBicmFjZXMuICAqLwotICB3aGlsZSAoKi0tcCA9PSAnICcgfHwgKnAgPT0gJ1x0JykKLSAgICBjb250aW51ZTsKKyAgLS1wOworICB3aGlsZSAoY19pc3NwYWNlICgodW5zaWduZWQgY2hhcikgKnApKQorICAgIC0tcDsKICAgcFsxXSA9ICdcMCc7Ci0gIHdoaWxlICgqKytkZWNsID09ICcgJyB8fCAqZGVjbCA9PSAnXHQnKQotICAgIGNvbnRpbnVlOworICArK2RlY2w7CisgIHdoaWxlIChjX2lzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSAqZGVjbCkpCisgICAgKytkZWNsOwogCiAgIGlmICghIG5hbWVfc3RhcnQpCiAgICAgY29tcGxhaW5fYXQgKGxvYywgXygibWlzc2luZyBpZGVudGlmaWVyIGluIHBhcmFtZXRlciBkZWNsYXJhdGlvbiIpKTsKICAgZWxzZQogICAgIHsKLSAgICAgIGNoYXIgKm5hbWU7Ci0gICAgICBzaXplX3QgbmFtZV9sZW47Ci0KLSAgICAgIGZvciAobmFtZV9sZW4gPSAxOwotCSAgIG1lbWNociAoYWxwaGFudW0sIG5hbWVfc3RhcnRbbmFtZV9sZW5dLCBzaXplb2YgYWxwaGFudW0pOwotCSAgIG5hbWVfbGVuKyspCi0JY29udGludWU7Ci0KLSAgICAgIG5hbWUgPSB4bWFsbG9jIChuYW1lX2xlbiArIDEpOwotICAgICAgbWVtY3B5IChuYW1lLCBuYW1lX3N0YXJ0LCBuYW1lX2xlbik7Ci0gICAgICBuYW1lW25hbWVfbGVuXSA9ICdcMCc7CisgICAgICBjaGFyICpuYW1lID0geG1lbWR1cDAgKG5hbWVfc3RhcnQsIHN0cnNwbiAobmFtZV9zdGFydCwgYWxwaGFudW0pKTsKICAgICAgIG11c2NsZV9wYWlyX2xpc3RfZ3JvdyAodHlwZSwgZGVjbCwgbmFtZSk7CiAgICAgICBmcmVlIChuYW1lKTsKICAgICB9CiAKLSAgc2Nhbm5lcl9sYXN0X3N0cmluZ19mcmVlICgpOworICBncmFtX3NjYW5uZXJfbGFzdF9zdHJpbmdfZnJlZSAoKTsKIH0KIAorCiBzdGF0aWMgdm9pZAogdmVyc2lvbl9jaGVjayAobG9jYXRpb24gY29uc3QgKmxvYywgY2hhciBjb25zdCAqdmVyc2lvbikKIHsKICAgaWYgKHN0cnZlcnNjbXAgKHZlcnNpb24sIFBBQ0tBR0VfVkVSU0lPTikgPiAwKQogICAgIHsKICAgICAgIGNvbXBsYWluX2F0ICgqbG9jLCAicmVxdWlyZSBiaXNvbiAlcywgYnV0IGhhdmUgJXMiLAotCQkgICB2ZXJzaW9uLCBQQUNLQUdFX1ZFUlNJT04pOwotICAgICAgZXhpdCAoNjMpOworICAgICAgICAgICAgICAgICAgIHZlcnNpb24sIFBBQ0tBR0VfVkVSU0lPTik7CisgICAgICBleGl0IChFWF9NSVNNQVRDSCk7CiAgICAgfQogfQogCkBAIC0yNDgzLDMgKzMyNDQsMTUgQEAKICAgcmV0dXJuIHl5dG5hbWVbWVlUUkFOU0xBVEUgKHR5cGUpXTsKIH0KIAorc3RhdGljIGNoYXIgY29uc3QgKgorY2hhcl9uYW1lIChjaGFyIGMpCit7CisgIGlmIChjID09ICdcJycpCisgICAgcmV0dXJuICInXFwnJyI7CisgIGVsc2UKKyAgICB7CisgICAgICBjaGFyIGJ1Zls0XTsKKyAgICAgIGJ1ZlswXSA9ICdcJyc7IGJ1ZlsxXSA9IGM7IGJ1ZlsyXSA9ICdcJyc7IGJ1ZlszXSA9ICdcMCc7CisgICAgICByZXR1cm4gcXVvdGVhcmdfc3R5bGUgKGVzY2FwZV9xdW90aW5nX3N0eWxlLCBidWYpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9wYXJzZS1ncmFtLmggYi9zcmMvcGFyc2UtZ3JhbS5oCmluZGV4IDJkMzdmYzEuLmM3MDkwOTggMTAwNjQ0Ci0tLSBhL3NyYy9wYXJzZS1ncmFtLmgKKysrIGIvc3JjL3BhcnNlLWdyYW0uaApAQCAtMSwyNCArMSwyMSBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMmEuICAqLworLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNi41LjYzLTNhZGEuICAqLwogCi0vKiBTa2VsZXRvbiBpbnRlcmZhY2UgZm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwotCi0gICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYKLSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLyogQmlzb24gaW50ZXJmYWNlIGZvciBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCisgICAKKyAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCisgICAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCiAgICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawpAQCAtMjksMTYgKzI2LDM0IEBACiAgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKICAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KLQorICAgCiAgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCiAgICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCiAKKyNpZm5kZWYgWVlfR1JBTV9fX19fX19fX19TUkNfUEFSU0VfR1JBTV9IX0lOQ0xVREVECisjIGRlZmluZSBZWV9HUkFNX19fX19fX19fX1NSQ19QQVJTRV9HUkFNX0hfSU5DTFVERUQKKy8qIEVuYWJsaW5nIHRyYWNlcy4gICovCisjaWZuZGVmIEdSQU1fREVCVUcKKyMgaWYgZGVmaW5lZCBZWURFQlVHCisjICBpZiBZWURFQlVHCisjICAgZGVmaW5lIEdSQU1fREVCVUcgMQorIyAgZWxzZQorIyAgIGRlZmluZSBHUkFNX0RFQlVHIDAKKyMgIGVuZGlmCisjIGVsc2UgLyogISBkZWZpbmVkIFlZREVCVUcgKi8KKyMgIGRlZmluZSBHUkFNX0RFQlVHIDEKKyMgZW5kaWYgLyogISBkZWZpbmVkIFlZREVCVUcgKi8KKyNlbmRpZiAgLyogISBkZWZpbmVkIEdSQU1fREVCVUcgKi8KKyNpZiBHUkFNX0RFQlVHCitleHRlcm4gaW50IGdyYW1fZGVidWc7CisjZW5kaWYKKwogLyogVG9rZW5zLiAgKi8KLSNpZm5kZWYgWVlUT0tFTlRZUEUKLSMgZGVmaW5lIFlZVE9LRU5UWVBFCisjaWZuZGVmIEdSQU1fVE9LRU5UWVBFCisjIGRlZmluZSBHUkFNX1RPS0VOVFlQRQogICAgLyogUHV0IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJzCiAgICAgICBrbm93IGFib3V0IHRoZW0uICAqLwotICAgZW51bSB5eXRva2VudHlwZSB7CisgICBlbnVtIGdyYW1fdG9rZW50eXBlIHsKICAgICAgR1JBTV9FT0YgPSAwLAogICAgICBTVFJJTkcgPSAyNTgsCiAgICAgIElOVCA9IDI1OSwKQEAgLTQ3LDEzICs2MiwxMyBAQAogICAgICBQRVJDRU5UX1RZUEUgPSAyNjIsCiAgICAgIFBFUkNFTlRfREVTVFJVQ1RPUiA9IDI2MywKICAgICAgUEVSQ0VOVF9QUklOVEVSID0gMjY0LAotICAgICBQRVJDRU5UX1VOSU9OID0gMjY1LAotICAgICBQRVJDRU5UX0xFRlQgPSAyNjYsCi0gICAgIFBFUkNFTlRfUklHSFQgPSAyNjcsCi0gICAgIFBFUkNFTlRfTk9OQVNTT0MgPSAyNjgsCi0gICAgIFBFUkNFTlRfUFJFQyA9IDI2OSwKLSAgICAgUEVSQ0VOVF9EUFJFQyA9IDI3MCwKLSAgICAgUEVSQ0VOVF9NRVJHRSA9IDI3MSwKKyAgICAgUEVSQ0VOVF9MRUZUID0gMjY1LAorICAgICBQRVJDRU5UX1JJR0hUID0gMjY2LAorICAgICBQRVJDRU5UX05PTkFTU09DID0gMjY3LAorICAgICBQRVJDRU5UX1BSRUMgPSAyNjgsCisgICAgIFBFUkNFTlRfRFBSRUMgPSAyNjksCisgICAgIFBFUkNFTlRfTUVSR0UgPSAyNzAsCisgICAgIFBFUkNFTlRfQ09ERSA9IDI3MSwKICAgICAgUEVSQ0VOVF9ERUJVRyA9IDI3MiwKICAgICAgUEVSQ0VOVF9ERUZBVUxUX1BSRUMgPSAyNzMsCiAgICAgIFBFUkNFTlRfREVGSU5FID0gMjc0LApAQCAtNjQsMzEgKzc5LDM3IEBACiAgICAgIFBFUkNFTlRfRklMRV9QUkVGSVggPSAyNzksCiAgICAgIFBFUkNFTlRfR0xSX1BBUlNFUiA9IDI4MCwKICAgICAgUEVSQ0VOVF9JTklUSUFMX0FDVElPTiA9IDI4MSwKLSAgICAgUEVSQ0VOVF9MRVhfUEFSQU0gPSAyODIsCi0gICAgIFBFUkNFTlRfTE9DQVRJT05TID0gMjgzLAotICAgICBQRVJDRU5UX05BTUVfUFJFRklYID0gMjg0LAotICAgICBQRVJDRU5UX05PX0RFRkFVTFRfUFJFQyA9IDI4NSwKLSAgICAgUEVSQ0VOVF9OT19MSU5FUyA9IDI4NiwKLSAgICAgUEVSQ0VOVF9OT05ERVRFUk1JTklTVElDX1BBUlNFUiA9IDI4NywKLSAgICAgUEVSQ0VOVF9PVVRQVVQgPSAyODgsCi0gICAgIFBFUkNFTlRfUEFSU0VfUEFSQU0gPSAyODksCi0gICAgIFBFUkNFTlRfUFVSRV9QQVJTRVIgPSAyOTAsCi0gICAgIFBFUkNFTlRfUkVRVUlSRSA9IDI5MSwKLSAgICAgUEVSQ0VOVF9TS0VMRVRPTiA9IDI5MiwKLSAgICAgUEVSQ0VOVF9TVEFSVCA9IDI5MywKLSAgICAgUEVSQ0VOVF9UT0tFTl9UQUJMRSA9IDI5NCwKLSAgICAgUEVSQ0VOVF9WRVJCT1NFID0gMjk1LAotICAgICBQRVJDRU5UX1lBQ0MgPSAyOTYsCi0gICAgIFRZUEUgPSAyOTcsCi0gICAgIEVRVUFMID0gMjk4LAotICAgICBTRU1JQ09MT04gPSAyOTksCi0gICAgIFBJUEUgPSAzMDAsCi0gICAgIElEID0gMzAxLAotICAgICBJRF9DT0xPTiA9IDMwMiwKLSAgICAgUEVSQ0VOVF9QRVJDRU5UID0gMzAzLAotICAgICBQUk9MT0dVRSA9IDMwNCwKLSAgICAgRVBJTE9HVUUgPSAzMDUsCi0gICAgIEJSQUNFRF9DT0RFID0gMzA2CisgICAgIFBFUkNFTlRfTEFOR1VBR0UgPSAyODIsCisgICAgIFBFUkNFTlRfTEVYX1BBUkFNID0gMjgzLAorICAgICBQRVJDRU5UX0xPQ0FUSU9OUyA9IDI4NCwKKyAgICAgUEVSQ0VOVF9OQU1FX1BSRUZJWCA9IDI4NSwKKyAgICAgUEVSQ0VOVF9OT19ERUZBVUxUX1BSRUMgPSAyODYsCisgICAgIFBFUkNFTlRfTk9fTElORVMgPSAyODcsCisgICAgIFBFUkNFTlRfTk9OREVURVJNSU5JU1RJQ19QQVJTRVIgPSAyODgsCisgICAgIFBFUkNFTlRfT1VUUFVUID0gMjg5LAorICAgICBQRVJDRU5UX1BBUlNFX1BBUkFNID0gMjkwLAorICAgICBQRVJDRU5UX1BVUkVfUEFSU0VSID0gMjkxLAorICAgICBQRVJDRU5UX1JFUVVJUkUgPSAyOTIsCisgICAgIFBFUkNFTlRfU0tFTEVUT04gPSAyOTMsCisgICAgIFBFUkNFTlRfU1RBUlQgPSAyOTQsCisgICAgIFBFUkNFTlRfVE9LRU5fVEFCTEUgPSAyOTUsCisgICAgIFBFUkNFTlRfVkVSQk9TRSA9IDI5NiwKKyAgICAgUEVSQ0VOVF9ZQUNDID0gMjk3LAorICAgICBCUkFDRURfQ09ERSA9IDI5OCwKKyAgICAgQlJBQ0tFVEVEX0lEID0gMjk5LAorICAgICBDSEFSID0gMzAwLAorICAgICBFUElMT0dVRSA9IDMwMSwKKyAgICAgRVFVQUwgPSAzMDIsCisgICAgIElEID0gMzAzLAorICAgICBJRF9DT0xPTiA9IDMwNCwKKyAgICAgUEVSQ0VOVF9QRVJDRU5UID0gMzA1LAorICAgICBQSVBFID0gMzA2LAorICAgICBQUk9MT0dVRSA9IDMwNywKKyAgICAgU0VNSUNPTE9OID0gMzA4LAorICAgICBUWVBFID0gMzA5LAorICAgICBUWVBFX1RBR19BTlkgPSAzMTAsCisgICAgIFRZUEVfVEFHX05PTkUgPSAzMTEsCisgICAgIFBFUkNFTlRfVU5JT04gPSAzMTIKICAgIH07CiAjZW5kaWYKIC8qIFRva2Vucy4gICovCkBAIC0xMDAsMTMgKzEyMSwxMyBAQAogI2RlZmluZSBQRVJDRU5UX1RZUEUgMjYyCiAjZGVmaW5lIFBFUkNFTlRfREVTVFJVQ1RPUiAyNjMKICNkZWZpbmUgUEVSQ0VOVF9QUklOVEVSIDI2NAotI2RlZmluZSBQRVJDRU5UX1VOSU9OIDI2NQotI2RlZmluZSBQRVJDRU5UX0xFRlQgMjY2Ci0jZGVmaW5lIFBFUkNFTlRfUklHSFQgMjY3Ci0jZGVmaW5lIFBFUkNFTlRfTk9OQVNTT0MgMjY4Ci0jZGVmaW5lIFBFUkNFTlRfUFJFQyAyNjkKLSNkZWZpbmUgUEVSQ0VOVF9EUFJFQyAyNzAKLSNkZWZpbmUgUEVSQ0VOVF9NRVJHRSAyNzEKKyNkZWZpbmUgUEVSQ0VOVF9MRUZUIDI2NQorI2RlZmluZSBQRVJDRU5UX1JJR0hUIDI2NgorI2RlZmluZSBQRVJDRU5UX05PTkFTU09DIDI2NworI2RlZmluZSBQRVJDRU5UX1BSRUMgMjY4CisjZGVmaW5lIFBFUkNFTlRfRFBSRUMgMjY5CisjZGVmaW5lIFBFUkNFTlRfTUVSR0UgMjcwCisjZGVmaW5lIFBFUkNFTlRfQ09ERSAyNzEKICNkZWZpbmUgUEVSQ0VOVF9ERUJVRyAyNzIKICNkZWZpbmUgUEVSQ0VOVF9ERUZBVUxUX1BSRUMgMjczCiAjZGVmaW5lIFBFUkNFTlRfREVGSU5FIDI3NApAQCAtMTE3LDY3ICsxMzgsOTEgQEAKICNkZWZpbmUgUEVSQ0VOVF9GSUxFX1BSRUZJWCAyNzkKICNkZWZpbmUgUEVSQ0VOVF9HTFJfUEFSU0VSIDI4MAogI2RlZmluZSBQRVJDRU5UX0lOSVRJQUxfQUNUSU9OIDI4MQotI2RlZmluZSBQRVJDRU5UX0xFWF9QQVJBTSAyODIKLSNkZWZpbmUgUEVSQ0VOVF9MT0NBVElPTlMgMjgzCi0jZGVmaW5lIFBFUkNFTlRfTkFNRV9QUkVGSVggMjg0Ci0jZGVmaW5lIFBFUkNFTlRfTk9fREVGQVVMVF9QUkVDIDI4NQotI2RlZmluZSBQRVJDRU5UX05PX0xJTkVTIDI4NgotI2RlZmluZSBQRVJDRU5UX05PTkRFVEVSTUlOSVNUSUNfUEFSU0VSIDI4NwotI2RlZmluZSBQRVJDRU5UX09VVFBVVCAyODgKLSNkZWZpbmUgUEVSQ0VOVF9QQVJTRV9QQVJBTSAyODkKLSNkZWZpbmUgUEVSQ0VOVF9QVVJFX1BBUlNFUiAyOTAKLSNkZWZpbmUgUEVSQ0VOVF9SRVFVSVJFIDI5MQotI2RlZmluZSBQRVJDRU5UX1NLRUxFVE9OIDI5MgotI2RlZmluZSBQRVJDRU5UX1NUQVJUIDI5MwotI2RlZmluZSBQRVJDRU5UX1RPS0VOX1RBQkxFIDI5NAotI2RlZmluZSBQRVJDRU5UX1ZFUkJPU0UgMjk1Ci0jZGVmaW5lIFBFUkNFTlRfWUFDQyAyOTYKLSNkZWZpbmUgVFlQRSAyOTcKLSNkZWZpbmUgRVFVQUwgMjk4Ci0jZGVmaW5lIFNFTUlDT0xPTiAyOTkKLSNkZWZpbmUgUElQRSAzMDAKLSNkZWZpbmUgSUQgMzAxCi0jZGVmaW5lIElEX0NPTE9OIDMwMgotI2RlZmluZSBQRVJDRU5UX1BFUkNFTlQgMzAzCi0jZGVmaW5lIFBST0xPR1VFIDMwNAotI2RlZmluZSBFUElMT0dVRSAzMDUKLSNkZWZpbmUgQlJBQ0VEX0NPREUgMzA2CisjZGVmaW5lIFBFUkNFTlRfTEFOR1VBR0UgMjgyCisjZGVmaW5lIFBFUkNFTlRfTEVYX1BBUkFNIDI4MworI2RlZmluZSBQRVJDRU5UX0xPQ0FUSU9OUyAyODQKKyNkZWZpbmUgUEVSQ0VOVF9OQU1FX1BSRUZJWCAyODUKKyNkZWZpbmUgUEVSQ0VOVF9OT19ERUZBVUxUX1BSRUMgMjg2CisjZGVmaW5lIFBFUkNFTlRfTk9fTElORVMgMjg3CisjZGVmaW5lIFBFUkNFTlRfTk9OREVURVJNSU5JU1RJQ19QQVJTRVIgMjg4CisjZGVmaW5lIFBFUkNFTlRfT1VUUFVUIDI4OQorI2RlZmluZSBQRVJDRU5UX1BBUlNFX1BBUkFNIDI5MAorI2RlZmluZSBQRVJDRU5UX1BVUkVfUEFSU0VSIDI5MQorI2RlZmluZSBQRVJDRU5UX1JFUVVJUkUgMjkyCisjZGVmaW5lIFBFUkNFTlRfU0tFTEVUT04gMjkzCisjZGVmaW5lIFBFUkNFTlRfU1RBUlQgMjk0CisjZGVmaW5lIFBFUkNFTlRfVE9LRU5fVEFCTEUgMjk1CisjZGVmaW5lIFBFUkNFTlRfVkVSQk9TRSAyOTYKKyNkZWZpbmUgUEVSQ0VOVF9ZQUNDIDI5NworI2RlZmluZSBCUkFDRURfQ09ERSAyOTgKKyNkZWZpbmUgQlJBQ0tFVEVEX0lEIDI5OQorI2RlZmluZSBDSEFSIDMwMAorI2RlZmluZSBFUElMT0dVRSAzMDEKKyNkZWZpbmUgRVFVQUwgMzAyCisjZGVmaW5lIElEIDMwMworI2RlZmluZSBJRF9DT0xPTiAzMDQKKyNkZWZpbmUgUEVSQ0VOVF9QRVJDRU5UIDMwNQorI2RlZmluZSBQSVBFIDMwNgorI2RlZmluZSBQUk9MT0dVRSAzMDcKKyNkZWZpbmUgU0VNSUNPTE9OIDMwOAorI2RlZmluZSBUWVBFIDMwOQorI2RlZmluZSBUWVBFX1RBR19BTlkgMzEwCisjZGVmaW5lIFRZUEVfVEFHX05PTkUgMzExCisjZGVmaW5lIFBFUkNFTlRfVU5JT04gMzEyCiAKIAogCi0KLSNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAotdHlwZWRlZiB1bmlvbiBZWVNUWVBFCi0jbGluZSA5NCAicGFyc2UtZ3JhbS55IgorI2lmICEgZGVmaW5lZCBHUkFNX1NUWVBFICYmICEgZGVmaW5lZCBHUkFNX1NUWVBFX0lTX0RFQ0xBUkVECit0eXBlZGVmIHVuaW9uIEdSQU1fU1RZUEUKIHsKKy8qIExpbmUgMjA0MiBvZiB5YWNjLmMgICovCisjbGluZSAxMTUgInBhcnNlLWdyYW0ueSIKKwogICBzeW1ib2wgKnN5bWJvbDsKICAgc3ltYm9sX2xpc3QgKmxpc3Q7CiAgIGludCBpbnRlZ2VyOwotICBjaGFyICpjaGFyczsKKyAgY2hhciBjb25zdCAqY2hhcnM7CisgIGNoYXIgKmNvZGU7CiAgIGFzc29jIGFzc29jOwogICB1bmlxc3RyIHVuaXFzdHI7Ci19Ci0vKiBMaW5lIDE1Mjkgb2YgeWFjYy5jLiAgKi8KLSNsaW5lIDE2MiAicGFyc2UtZ3JhbS5oIgotCVlZU1RZUEU7Ci0jIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCisgIHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyOworICBuYW1lZF9yZWYgKm5hbWVkX3JlZjsKKworCisvKiBMaW5lIDIwNDIgb2YgeWFjYy5jICAqLworI2xpbmUgMTk0ICJwYXJzZS1ncmFtLmgiCit9IEdSQU1fU1RZUEU7CisjIGRlZmluZSBHUkFNX1NUWVBFX0lTX1RSSVZJQUwgMQorIyBkZWZpbmUgZ3JhbV9zdHlwZSBHUkFNX1NUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLworIyBkZWZpbmUgR1JBTV9TVFlQRV9JU19ERUNMQVJFRCAxCiAjZW5kaWYKIAotCi0KLSNpZiAhIGRlZmluZWQgWVlMVFlQRSAmJiAhIGRlZmluZWQgWVlMVFlQRV9JU19ERUNMQVJFRAotdHlwZWRlZiBzdHJ1Y3QgWVlMVFlQRQorI2lmICEgZGVmaW5lZCBHUkFNX0xUWVBFICYmICEgZGVmaW5lZCBHUkFNX0xUWVBFX0lTX0RFQ0xBUkVECit0eXBlZGVmIHN0cnVjdCBHUkFNX0xUWVBFCiB7CiAgIGludCBmaXJzdF9saW5lOwogICBpbnQgZmlyc3RfY29sdW1uOwogICBpbnQgbGFzdF9saW5lOwogICBpbnQgbGFzdF9jb2x1bW47Ci19IFlZTFRZUEU7Ci0jIGRlZmluZSB5eWx0eXBlIFlZTFRZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklBTCAxCit9IEdSQU1fTFRZUEU7CisjIGRlZmluZSBncmFtX2x0eXBlIEdSQU1fTFRZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCisjIGRlZmluZSBHUkFNX0xUWVBFX0lTX0RFQ0xBUkVEIDEKKyMgZGVmaW5lIEdSQU1fTFRZUEVfSVNfVFJJVklBTCAxCiAjZW5kaWYKIAogCisjaWZkZWYgWVlQQVJTRV9QQVJBTQorI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworaW50IGdyYW1fcGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pOworI2Vsc2UKK2ludCBncmFtX3BhcnNlICgpOworI2VuZGlmCisjZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKyNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKK2ludCBncmFtX3BhcnNlICh2b2lkKTsKKyNlbHNlCitpbnQgZ3JhbV9wYXJzZSAoKTsKKyNlbmRpZgorI2VuZGlmIC8qICEgWVlQQVJTRV9QQVJBTSAqLworCisjZW5kaWYgLyogIVlZX0dSQU1fX19fX19fX19fU1JDX1BBUlNFX0dSQU1fSF9JTkNMVURFRCAgKi8KZGlmZiAtLWdpdCBhL3NyYy9wYXJzZS1ncmFtLnkgYi9zcmMvcGFyc2UtZ3JhbS55CmluZGV4IGUxODllMTQuLjVmNzdhNWIgMTAwNjQ0Ci0tLSBhL3NyYy9wYXJzZS1ncmFtLnkKKysrIGIvc3JjL3BhcnNlLWdyYW0ueQpAQCAtMSwxMiArMSwxMiBAQAogJXsvKiBCaXNvbiBHcmFtbWFyIFBhcnNlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEMgLSotCiAKLSAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KIAotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKQEAgLTE1LDI0ICsxNSwyNSBAQAogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gICAwMjExMC0xMzAxICBVU0EKLSovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpbmNsdWRlIDxjb25maWcuaD4KICNpbmNsdWRlICJzeXN0ZW0uaCIKIAorI2luY2x1ZGUgImMtY3R5cGUuaCIKICNpbmNsdWRlICJjb21wbGFpbi5oIgogI2luY2x1ZGUgImNvbmZsaWN0cy5oIgogI2luY2x1ZGUgImZpbGVzLmgiCiAjaW5jbHVkZSAiZ2V0YXJncy5oIgogI2luY2x1ZGUgImdyYW0uaCIKLSNpbmNsdWRlICJtdXNjbGVfdGFiLmgiCisjaW5jbHVkZSAibXVzY2xlLXRhYi5oIgorI2luY2x1ZGUgIm5hbWVkLXJlZi5oIgogI2luY2x1ZGUgInF1b3RlYXJnLmgiCiAjaW5jbHVkZSAicmVhZGVyLmgiCiAjaW5jbHVkZSAic3ltbGlzdC5oIgotI2luY2x1ZGUgInN0cnZlcnNjbXAuaCIKKyNpbmNsdWRlICJzY2FuLWdyYW0uaCIKKyNpbmNsdWRlICJzY2FuLWNvZGUuaCIKKyNpbmNsdWRlICJ4bWVtZHVwMC5oIgogCiAjZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikgIChDdXJyZW50KSA9IGxsb2NfZGVmYXVsdCAoUmhzLCBOKQogc3RhdGljIFlZTFRZUEUgbGxvY19kZWZhdWx0IChZWUxUWVBFIGNvbnN0ICosIGludCk7CkBAIC00OSw1NSArNTAsNzggQEAKIAlncmFtX2Vycm9yICgmeXlsbG9jLCBNc2cpCiBzdGF0aWMgdm9pZCBncmFtX2Vycm9yIChsb2NhdGlvbiBjb25zdCAqLCBjaGFyIGNvbnN0ICopOwogCi1zdGF0aWMgdm9pZCBhZGRfcGFyYW0gKGNoYXIgY29uc3QgKiwgY2hhciAqLCBsb2NhdGlvbik7CitzdGF0aWMgY2hhciBjb25zdCAqY2hhcl9uYW1lIChjaGFyKTsKKworLyoqIEFkZCBhIGxleC1wYXJhbSBvciBhIHBhcnNlLXBhcmFtLgorICoKKyAqIFxwYXJhbSB0eXBlICBcYSBsZXhfcGFyYW0gb3IgXGEgcGFyc2VfcGFyYW0KKyAqIFxwYXJhbSBkZWNsICB0aGUgZm9ybWFsIGFyZ3VtZW50CisgKiBccGFyYW0gbG9jICAgdGhlIGxvY2F0aW9uIGluIHRoZSBzb3VyY2UuCisgKi8KK3N0YXRpYyB2b2lkIGFkZF9wYXJhbSAoY2hhciBjb25zdCAqdHlwZSwgY2hhciAqZGVjbCwgbG9jYXRpb24gbG9jKTsKKwogCiBzdGF0aWMgc3ltYm9sX2NsYXNzIGN1cnJlbnRfY2xhc3MgPSB1bmtub3duX3N5bTsKLXN0YXRpYyB1bmlxc3RyIGN1cnJlbnRfdHlwZSA9IDA7Ci1zdGF0aWMgc3ltYm9sICpjdXJyZW50X2xoczsKK3N0YXRpYyB1bmlxc3RyIGN1cnJlbnRfdHlwZSA9IE5VTEw7CitzdGF0aWMgc3ltYm9sICpjdXJyZW50X2xoc19zeW1ib2w7CiBzdGF0aWMgbG9jYXRpb24gY3VycmVudF9saHNfbG9jYXRpb247CitzdGF0aWMgbmFtZWRfcmVmICpjdXJyZW50X2xoc19uYW1lZF9yZWY7CiBzdGF0aWMgaW50IGN1cnJlbnRfcHJlYyA9IDA7CiAKLSNpZmRlZiBVSU5UX0ZBU1Q4X01BWAotIyBkZWZpbmUgWVlUWVBFX1VJTlQ4IHVpbnRfZmFzdDhfdAotI2VuZGlmCi0jaWZkZWYgSU5UX0ZBU1Q4X01BWAotIyBkZWZpbmUgWVlUWVBFX0lOVDggaW50X2Zhc3Q4X3QKLSNlbmRpZgotI2lmZGVmIFVJTlRfRkFTVDE2X01BWAotIyBkZWZpbmUgWVlUWVBFX1VJTlQxNiB1aW50X2Zhc3QxNl90Ci0jZW5kaWYKLSNpZmRlZiBJTlRfRkFTVDE2X01BWAotIyBkZWZpbmUgWVlUWVBFX0lOVDE2IGludF9mYXN0MTZfdAotI2VuZGlmCisvKiogU2V0IHRoZSBuZXcgY3VycmVudCBsZWZ0LWhhbmQgc2lkZSBzeW1ib2wsIHBvc3NpYmx5IGNvbW1vbgorICogdG8gc2V2ZXJhbCByaWdodC1oYW5kIHNpZGUgcGFydHMgb2YgcnVsZS4KKyAqLworc3RhdGljCit2b2lkCitjdXJyZW50X2xocyhzeW1ib2wgKnN5bSwgbG9jYXRpb24gbG9jLCBuYW1lZF9yZWYgKnJlZikKK3sKKyAgY3VycmVudF9saHNfc3ltYm9sID0gc3ltOworICBjdXJyZW50X2xoc19sb2NhdGlvbiA9IGxvYzsKKyAgLyogSW4gb3JkZXIgdG8gc2ltcGxpZnkgbWVtb3J5IG1hbmFnZW1lbnQsIG5hbWVkIHJlZmVyZW5jZXMgZm9yIGxocworICAgICBhcmUgYWx3YXlzIGFzc2lnbmVkIGJ5IGRlZXAgY29weSBpbnRvIHRoZSBjdXJyZW50IHN5bWJvbF9saXN0CisgICAgIG5vZGUuICBUaGlzIGlzIGJlY2F1c2UgYSBzaW5nbGUgbmFtZWQtcmVmIGluIHRoZSBncmFtbWFyIG1heQorICAgICByZXN1bHQgaW4gc2V2ZXJhbCB1c2VzIHdoZW4gdGhlIHVzZXIgZmFjdG9ycyBsaHMgYmV0d2VlbiBzZXZlcmFsCisgICAgIHJ1bGVzIHVzaW5nICJ8Ii4gIFRoZXJlZm9yZSBmcmVlIHRoZSBwYXJzZXIncyBvcmlnaW5hbCBjb3B5LiAgKi8KKyAgZnJlZSAoY3VycmVudF9saHNfbmFtZWRfcmVmKTsKKyAgY3VycmVudF9saHNfbmFtZWRfcmVmID0gcmVmOworfQorCisKKyNkZWZpbmUgWVlUWVBFX0lOVDE2IGludF9mYXN0MTZfdAorI2RlZmluZSBZWVRZUEVfSU5UOCBpbnRfZmFzdDhfdAorI2RlZmluZSBZWVRZUEVfVUlOVDE2IHVpbnRfZmFzdDE2X3QKKyNkZWZpbmUgWVlUWVBFX1VJTlQ4IHVpbnRfZmFzdDhfdAogJX0KIAogJWRlYnVnCi0ldmVyYm9zZQorJWRlZmluZSBhcGkucHJlZml4ICJncmFtXyIKKyVkZWZpbmUgYXBpLnB1cmUKKyVkZWZpbmUgcGFyc2UubGFjIGZ1bGwKICVkZWZpbmVzCi0lbG9jYXRpb25zCi0lcHVyZS1wYXJzZXIKICVlcnJvci12ZXJib3NlCi0lZGVmaW5lcwotJW5hbWUtcHJlZml4PSJncmFtXyIKKyVleHBlY3QgMAorJWxvY2F0aW9ucworJXZlcmJvc2UKIAogJWluaXRpYWwtYWN0aW9uCiB7CiAgIC8qIEJpc29uJ3MgZ3JhbW1hciBjYW4gaW5pdGlhbCBlbXB0eSBsb2NhdGlvbnMsIGhlbmNlIGEgZGVmYXVsdAogICAgICBsb2NhdGlvbiBpcyBuZWVkZWQuICovCi0gIEAkLnN0YXJ0LmZpbGUgICA9IEAkLmVuZC5maWxlICAgPSBjdXJyZW50X2ZpbGU7Ci0gIEAkLnN0YXJ0LmxpbmUgICA9IEAkLmVuZC5saW5lICAgPSAxOwotICBAJC5zdGFydC5jb2x1bW4gPSBAJC5lbmQuY29sdW1uID0gMDsKKyAgYm91bmRhcnlfc2V0ICgmQCQuc3RhcnQsIGN1cnJlbnRfZmlsZSwgMSwgMSk7CisgIGJvdW5kYXJ5X3NldCAoJkAkLmVuZCwgY3VycmVudF9maWxlLCAxLCAxKTsKIH0KIAotLyogT25seSBOVU1CRVJTIGhhdmUgYSB2YWx1ZS4gICovCiAldW5pb24KIHsKICAgc3ltYm9sICpzeW1ib2w7CiAgIHN5bWJvbF9saXN0ICpsaXN0OwogICBpbnQgaW50ZWdlcjsKLSAgY2hhciAqY2hhcnM7CisgIGNoYXIgY29uc3QgKmNoYXJzOworICBjaGFyICpjb2RlOwogICBhc3NvYyBhc3NvYzsKICAgdW5pcXN0ciB1bmlxc3RyOworICB1bnNpZ25lZCBjaGFyIGNoYXJhY3RlcjsKKyAgbmFtZWRfcmVmICpuYW1lZF9yZWY7CiB9OwogCiAvKiBEZWZpbmUgdGhlIHRva2VucyB0b2dldGhlciB3aXRoIHRoZWlyIGh1bWFuIHJlcHJlc2VudGF0aW9uLiAgKi8KQEAgLTEwOSwxMCArMTMzLDggQEAKICV0b2tlbiBQRVJDRU5UX05URVJNICAgICAgICIlbnRlcm0iCiAKICV0b2tlbiBQRVJDRU5UX1RZUEUgICAgICAgICIldHlwZSIKLSV0b2tlbiBQRVJDRU5UX0RFU1RSVUNUT1IgICIlZGVzdHJ1Y3RvciB7Li4ufSIKLSV0b2tlbiBQRVJDRU5UX1BSSU5URVIgICAgICIlcHJpbnRlciB7Li4ufSIKLQotJXRva2VuIFBFUkNFTlRfVU5JT04gICAgICAgIiV1bmlvbiB7Li4ufSIKKyV0b2tlbiBQRVJDRU5UX0RFU1RSVUNUT1IgICIlZGVzdHJ1Y3RvciIKKyV0b2tlbiBQRVJDRU5UX1BSSU5URVIgICAgICIlcHJpbnRlciIKIAogJXRva2VuIFBFUkNFTlRfTEVGVCAgICAgICAgIiVsZWZ0IgogJXRva2VuIFBFUkNFTlRfUklHSFQgICAgICAgIiVyaWdodCIKQEAgLTEyOCw2ICsxNTAsNyBAQAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAldG9rZW4KKyAgUEVSQ0VOVF9DT0RFICAgICAgICAgICAgIiVjb2RlIgogICBQRVJDRU5UX0RFQlVHICAgICAgICAgICAiJWRlYnVnIgogICBQRVJDRU5UX0RFRkFVTFRfUFJFQyAgICAiJWRlZmF1bHQtcHJlYyIKICAgUEVSQ0VOVF9ERUZJTkUgICAgICAgICAgIiVkZWZpbmUiCkBAIC0xMzcsOCArMTYwLDkgQEAKICAgUEVSQ0VOVF9FWFBFQ1RfUlIJICAiJWV4cGVjdC1yciIKICAgUEVSQ0VOVF9GSUxFX1BSRUZJWCAgICAgIiVmaWxlLXByZWZpeCIKICAgUEVSQ0VOVF9HTFJfUEFSU0VSICAgICAgIiVnbHItcGFyc2VyIgotICBQRVJDRU5UX0lOSVRJQUxfQUNUSU9OICAiJWluaXRpYWwtYWN0aW9uIHsuLi59IgotICBQRVJDRU5UX0xFWF9QQVJBTSAgICAgICAiJWxleC1wYXJhbSB7Li4ufSIKKyAgUEVSQ0VOVF9JTklUSUFMX0FDVElPTiAgIiVpbml0aWFsLWFjdGlvbiIKKyAgUEVSQ0VOVF9MQU5HVUFHRSAgICAgICAgIiVsYW5ndWFnZSIKKyAgUEVSQ0VOVF9MRVhfUEFSQU0gICAgICAgIiVsZXgtcGFyYW0iCiAgIFBFUkNFTlRfTE9DQVRJT05TICAgICAgICIlbG9jYXRpb25zIgogICBQRVJDRU5UX05BTUVfUFJFRklYICAgICAiJW5hbWUtcHJlZml4IgogICBQRVJDRU5UX05PX0RFRkFVTFRfUFJFQyAiJW5vLWRlZmF1bHQtcHJlYyIKQEAgLTE0Niw3ICsxNzAsNyBAQAogICBQRVJDRU5UX05PTkRFVEVSTUlOSVNUSUNfUEFSU0VSCiAJCQkgICIlbm9uZGV0ZXJtaW5pc3RpYy1wYXJzZXIiCiAgIFBFUkNFTlRfT1VUUFVUICAgICAgICAgICIlb3V0cHV0IgotICBQRVJDRU5UX1BBUlNFX1BBUkFNICAgICAiJXBhcnNlLXBhcmFtIHsuLi59IgorICBQRVJDRU5UX1BBUlNFX1BBUkFNICAgICAiJXBhcnNlLXBhcmFtIgogICBQRVJDRU5UX1BVUkVfUEFSU0VSICAgICAiJXB1cmUtcGFyc2VyIgogICBQRVJDRU5UX1JFUVVJUkUJICAiJXJlcXVpcmUiCiAgIFBFUkNFTlRfU0tFTEVUT04gICAgICAgICIlc2tlbGV0b24iCkBAIC0xNTYsNTAgKzE4MCw1NCBAQAogICBQRVJDRU5UX1lBQ0MgICAgICAgICAgICAiJXlhY2MiCiA7CiAKLSV0b2tlbiBUWVBFICAgICAgICAgICAgInR5cGUiCisldG9rZW4gQlJBQ0VEX0NPREUgICAgICJ7Li4ufSIKKyV0b2tlbiBCUkFDS0VURURfSUQgICAgIltpZGVudGlmaWVyXSIKKyV0b2tlbiBDSEFSICAgICAgICAgICAgImNoYXIiCisldG9rZW4gRVBJTE9HVUUgICAgICAgICJlcGlsb2d1ZSIKICV0b2tlbiBFUVVBTCAgICAgICAgICAgIj0iCi0ldG9rZW4gU0VNSUNPTE9OICAgICAgICI7IgotJXRva2VuIFBJUEUgICAgICAgICAgICAifCIKICV0b2tlbiBJRCAgICAgICAgICAgICAgImlkZW50aWZpZXIiCiAldG9rZW4gSURfQ09MT04gICAgICAgICJpZGVudGlmaWVyOiIKICV0b2tlbiBQRVJDRU5UX1BFUkNFTlQgIiUlIgorJXRva2VuIFBJUEUgICAgICAgICAgICAifCIKICV0b2tlbiBQUk9MT0dVRSAgICAgICAgIiV7Li4uJX0iCi0ldG9rZW4gRVBJTE9HVUUgICAgICAgICJlcGlsb2d1ZSIKLSV0b2tlbiBCUkFDRURfQ09ERSAgICAgInsuLi59IgorJXRva2VuIFNFTUlDT0xPTiAgICAgICAiOyIKKyV0b2tlbiBUWVBFICAgICAgICAgICAgInR5cGUiCisldG9rZW4gVFlQRV9UQUdfQU5ZICAgICI8Kj4iCisldG9rZW4gVFlQRV9UQUdfTk9ORSAgICI8PiIKIAorJXR5cGUgPGNoYXJhY3Rlcj4gQ0hBUgorJXByaW50ZXIgeyBmcHV0cyAoY2hhcl9uYW1lICgkJCksIHN0ZGVycik7IH0gQ0hBUgogCi0ldHlwZSA8Y2hhcnM+IFNUUklORyBzdHJpbmdfY29udGVudAotCSAgICAgICIlZGVzdHJ1Y3RvciB7Li4ufSIKLQkgICAgICAiJWluaXRpYWwtYWN0aW9uIHsuLi59IgotCSAgICAgICIlbGV4LXBhcmFtIHsuLi59IgotCSAgICAgICIlcGFyc2UtcGFyYW0gey4uLn0iCi0JICAgICAgIiVwcmludGVyIHsuLi59IgotCSAgICAgICIldW5pb24gey4uLn0iCi0JICAgICAgUFJPTE9HVUUgRVBJTE9HVUUKLSVwcmludGVyIHsgZnByaW50ZiAoc3RkZXJyLCAiXCIlc1wiIiwgJCQpOyB9Ci0JICAgICAgU1RSSU5HIHN0cmluZ19jb250ZW50CisvKiBicmFjZWxlc3MgaXMgbm90IHRvIGJlIHVzZWQgZm9yIHJ1bGUgb3Igc3ltYm9sIGFjdGlvbnMsIGFzIGl0CisgICBjYWxscyBjb2RlX3Byb3BzX3BsYWluX2luaXQuICAqLworJXR5cGUgPGNoYXJzPiBTVFJJTkcgIiV7Li4uJX0iIEVQSUxPR1VFIGJyYWNlbGVzcyBjb250ZW50Lm9wdAorJXR5cGUgPGNvZGU+ICJ7Li4ufSIKKyVwcmludGVyIHsgZnB1dHMgKHF1b3RlYXJnX3N0eWxlIChjX3F1b3Rpbmdfc3R5bGUsICQkKSwgc3RkZXJyKTsgfQorCSBTVFJJTkcKICVwcmludGVyIHsgZnByaW50ZiAoc3RkZXJyLCAie1xuJXNcbn0iLCAkJCk7IH0KLQkgICAgICAiJWRlc3RydWN0b3Igey4uLn0iCi0JICAgICAgIiVpbml0aWFsLWFjdGlvbiB7Li4ufSIKLQkgICAgICAiJWxleC1wYXJhbSB7Li4ufSIKLQkgICAgICAiJXBhcnNlLXBhcmFtIHsuLi59IgotCSAgICAgICIlcHJpbnRlciB7Li4ufSIKLQkgICAgICAiJXVuaW9uIHsuLi59IgotCSAgICAgIFBST0xPR1VFIEVQSUxPR1VFCi0ldHlwZSA8dW5pcXN0cj4gVFlQRQorCSBicmFjZWxlc3MgY29udGVudC5vcHQgInsuLi59IiAiJXsuLi4lfSIgRVBJTE9HVUUKKworJXR5cGUgPHVuaXFzdHI+IEJSQUNLRVRFRF9JRCBJRCBJRF9DT0xPTiBUWVBFIHZhcmlhYmxlCislcHJpbnRlciB7IGZwdXRzICgkJCwgc3RkZXJyKTsgfSA8dW5pcXN0cj4KKyVwcmludGVyIHsgZnByaW50ZiAoc3RkZXJyLCAiWyVzXSIsICQkKTsgfSBCUkFDS0VURURfSUQKKyVwcmludGVyIHsgZnByaW50ZiAoc3RkZXJyLCAiJXM6IiwgJCQpOyB9IElEX0NPTE9OCiAlcHJpbnRlciB7IGZwcmludGYgKHN0ZGVyciwgIjwlcz4iLCAkJCk7IH0gVFlQRQorCiAldHlwZSA8aW50ZWdlcj4gSU5UCi0lcHJpbnRlciB7IGZwcmludGYgKHN0ZGVyciwgIiVkIiwgJCQpOyB9IElOVAotJXR5cGUgPHN5bWJvbD4gSUQgc3ltYm9sIHN0cmluZ19hc19pZAotJXByaW50ZXIgeyBmcHJpbnRmIChzdGRlcnIsICIlcyIsICQkLT50YWcpOyB9IElEIHN5bWJvbCBzdHJpbmdfYXNfaWQKLSV0eXBlIDxzeW1ib2w+IElEX0NPTE9OCi0lcHJpbnRlciB7IGZwcmludGYgKHN0ZGVyciwgIiVzOiIsICQkLT50YWcpOyB9IElEX0NPTE9OCislcHJpbnRlciB7IGZwcmludGYgKHN0ZGVyciwgIiVkIiwgJCQpOyB9IDxpbnRlZ2VyPgorCisldHlwZSA8c3ltYm9sPiBpZCBpZF9jb2xvbiBzdHJpbmdfYXNfaWQgc3ltYm9sIHN5bWJvbC5wcmVjCislcHJpbnRlciB7IGZwcmludGYgKHN0ZGVyciwgIiVzIiwgJCQtPnRhZyk7IH0gPHN5bWJvbD4KKyVwcmludGVyIHsgZnByaW50ZiAoc3RkZXJyLCAiJXM6IiwgJCQtPnRhZyk7IH0gaWRfY29sb24KKwogJXR5cGUgPGFzc29jPiBwcmVjZWRlbmNlX2RlY2xhcmF0b3IKLSV0eXBlIDxsaXN0PiAgc3ltYm9scy4xCisldHlwZSA8bGlzdD4gIHN5bWJvbHMuMSBzeW1ib2xzLnByZWMgZ2VuZXJpY19zeW1saXN0IGdlbmVyaWNfc3ltbGlzdF9pdGVtCisldHlwZSA8bmFtZWRfcmVmPiBuYW1lZF9yZWYub3B0CisKICUlCiAKIGlucHV0OgotICBkZWNsYXJhdGlvbnMgIiUlIiBncmFtbWFyIGVwaWxvZ3VlLm9wdAorICBwcm9sb2d1ZV9kZWNsYXJhdGlvbnMgIiUlIiBncmFtbWFyIGVwaWxvZ3VlLm9wdAogOwogCiAKQEAgLTIwNyw0OCArMjM1LDEwNyBAQAogCXwgRGVjbGFyYXRpb25zOiBiZWZvcmUgdGhlIGZpcnN0ICUlLiAgfAogCWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1kZWNsYXJhdGlvbnM6Citwcm9sb2d1ZV9kZWNsYXJhdGlvbnM6CiAgIC8qIE5vdGhpbmcgKi8KLXwgZGVjbGFyYXRpb25zIGRlY2xhcmF0aW9uCit8IHByb2xvZ3VlX2RlY2xhcmF0aW9ucyBwcm9sb2d1ZV9kZWNsYXJhdGlvbgogOwogCi1kZWNsYXJhdGlvbjoKK3Byb2xvZ3VlX2RlY2xhcmF0aW9uOgogICBncmFtbWFyX2RlY2xhcmF0aW9uCi18IFBST0xPR1VFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcm9sb2d1ZV9hdWdtZW50ICgkMSwgQDEpOyB9Ci18ICIlZGVidWciICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBkZWJ1Z19mbGFnID0gdHJ1ZTsgfQotfCAiJWRlZmluZSIgc3RyaW5nX2NvbnRlbnQKK3wgIiV7Li4uJX0iCiAgICAgewotICAgICAgc3RhdGljIGNoYXIgb25lW10gPSAiMSI7Ci0gICAgICBtdXNjbGVfaW5zZXJ0ICgkMiwgb25lKTsKKyAgICAgIGNvZGVfcHJvcHMgcGxhaW5fY29kZTsKKyAgICAgIGNvZGVfcHJvcHNfcGxhaW5faW5pdCAoJnBsYWluX2NvZGUsICQxLCBAMSk7CisgICAgICBjb2RlX3Byb3BzX3RyYW5zbGF0ZV9jb2RlICgmcGxhaW5fY29kZSk7CisgICAgICBncmFtX3NjYW5uZXJfbGFzdF9zdHJpbmdfZnJlZSAoKTsKKyAgICAgIG11c2NsZV9jb2RlX2dyb3cgKHVuaW9uX3NlZW4gPyAicG9zdF9wcm9sb2d1ZSIgOiAicHJlX3Byb2xvZ3VlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluX2NvZGUuY29kZSwgQDEpOworICAgICAgY29kZV9zY2FubmVyX2xhc3Rfc3RyaW5nX2ZyZWUgKCk7CiAgICAgfQotfCAiJWRlZmluZSIgc3RyaW5nX2NvbnRlbnQgc3RyaW5nX2NvbnRlbnQgIHsgbXVzY2xlX2luc2VydCAoJDIsICQzKTsgfQotfCAiJWRlZmluZXMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZGVmaW5lc19mbGFnID0gdHJ1ZTsgfQotfCAiJWVycm9yLXZlcmJvc2UiICAgICAgICAgICAgICAgICAgICAgICAgIHsgZXJyb3JfdmVyYm9zZSA9IHRydWU7IH0KLXwgIiVleHBlY3QiIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGV4cGVjdGVkX3NyX2NvbmZsaWN0cyA9ICQyOyB9Ci18ICIlZXhwZWN0LXJyIiBJTlQJCQkgICB7IGV4cGVjdGVkX3JyX2NvbmZsaWN0cyA9ICQyOyB9Ci18ICIlZmlsZS1wcmVmaXgiICI9IiBzdHJpbmdfY29udGVudCAgICAgICAgeyBzcGVjX2ZpbGVfcHJlZml4ID0gJDM7IH0KK3wgIiVkZWJ1ZyIgICAgICAgICAgICAgICAgICAgICAgICAgeyBkZWJ1ZyA9IHRydWU7IH0KK3wgIiVkZWZpbmUiIHZhcmlhYmxlIGNvbnRlbnQub3B0CisgICAgeworICAgICAgbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2luc2VydCAoJDIsIEAyLCAkMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1VU0NMRV9QRVJDRU5UX0RFRklORV9HUkFNTUFSX0ZJTEUpOworICAgIH0KK3wgIiVkZWZpbmVzIiAgICAgICAgICAgICAgICAgICAgICAgeyBkZWZpbmVzX2ZsYWcgPSB0cnVlOyB9Cit8ICIlZGVmaW5lcyIgU1RSSU5HCisgICAgeworICAgICAgZGVmaW5lc19mbGFnID0gdHJ1ZTsKKyAgICAgIHNwZWNfZGVmaW5lc19maWxlID0geHN0cmR1cCAoJDIpOworICAgIH0KK3wgIiVlcnJvci12ZXJib3NlIiAgICAgICAgICAgICAgICAgeyBlcnJvcl92ZXJib3NlID0gdHJ1ZTsgfQorfCAiJWV4cGVjdCIgSU5UICAgICAgICAgICAgICAgICAgICB7IGV4cGVjdGVkX3NyX2NvbmZsaWN0cyA9ICQyOyB9Cit8ICIlZXhwZWN0LXJyIiBJTlQJCSAgIHsgZXhwZWN0ZWRfcnJfY29uZmxpY3RzID0gJDI7IH0KK3wgIiVmaWxlLXByZWZpeCIgU1RSSU5HICAgICAgICAgICAgeyBzcGVjX2ZpbGVfcHJlZml4ID0gJDI7IH0KK3wgIiVmaWxlLXByZWZpeCIgIj0iIFNUUklORyAgICAgICAgeyBzcGVjX2ZpbGVfcHJlZml4ID0gJDM7IH0gLyogZGVwcmVjYXRlZCAqLwogfCAiJWdsci1wYXJzZXIiCiAgICAgewogICAgICAgbm9uZGV0ZXJtaW5pc3RpY19wYXJzZXIgPSB0cnVlOwogICAgICAgZ2xyX3BhcnNlciA9IHRydWU7CiAgICAgfQotfCAiJWluaXRpYWwtYWN0aW9uIHsuLi59IgorfCAiJWluaXRpYWwtYWN0aW9uIiAiey4uLn0iCiAgICAgewotICAgICAgbXVzY2xlX2NvZGVfZ3JvdyAoImluaXRpYWxfYWN0aW9uIiwgJDEsIEAxKTsKKyAgICAgIGNvZGVfcHJvcHMgYWN0aW9uOworICAgICAgY29kZV9wcm9wc19zeW1ib2xfYWN0aW9uX2luaXQgKCZhY3Rpb24sICQyLCBAMik7CisgICAgICBjb2RlX3Byb3BzX3RyYW5zbGF0ZV9jb2RlICgmYWN0aW9uKTsKKyAgICAgIGdyYW1fc2Nhbm5lcl9sYXN0X3N0cmluZ19mcmVlICgpOworICAgICAgbXVzY2xlX2NvZGVfZ3JvdyAoImluaXRpYWxfYWN0aW9uIiwgYWN0aW9uLmNvZGUsIEAyKTsKKyAgICAgIGNvZGVfc2Nhbm5lcl9sYXN0X3N0cmluZ19mcmVlICgpOwogICAgIH0KLXwgIiVsZXgtcGFyYW0gey4uLn0iCQkJICAgeyBhZGRfcGFyYW0gKCJsZXhfcGFyYW0iLCAkMSwgQDEpOyB9Ci18ICIlbG9jYXRpb25zIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsb2NhdGlvbnNfZmxhZyA9IHRydWU7IH0KLXwgIiVuYW1lLXByZWZpeCIgIj0iIHN0cmluZ19jb250ZW50ICAgICAgICB7IHNwZWNfbmFtZV9wcmVmaXggPSAkMzsgfQotfCAiJW5vLWxpbmVzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbm9fbGluZXNfZmxhZyA9IHRydWU7IH0KLXwgIiVub25kZXRlcm1pbmlzdGljLXBhcnNlciIJCSAgIHsgbm9uZGV0ZXJtaW5pc3RpY19wYXJzZXIgPSB0cnVlOyB9Ci18ICIlb3V0cHV0IiAiPSIgc3RyaW5nX2NvbnRlbnQgICAgICAgICAgICAgeyBzcGVjX291dGZpbGUgPSAkMzsgfQotfCAiJXBhcnNlLXBhcmFtIHsuLi59IgkJCSAgIHsgYWRkX3BhcmFtICgicGFyc2VfcGFyYW0iLCAkMSwgQDEpOyB9Ci18ICIlcHVyZS1wYXJzZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwdXJlX3BhcnNlciA9IHRydWU7IH0KLXwgIiVyZXF1aXJlIiBzdHJpbmdfY29udGVudCAgICAgICAgICAgICAgICB7IHZlcnNpb25fY2hlY2sgKCZAMiwgJDIpOyB9Ci18ICIlc2tlbGV0b24iIHN0cmluZ19jb250ZW50ICAgICAgICAgICAgICAgeyBza2VsZXRvbiA9ICQyOyB9Ci18ICIldG9rZW4tdGFibGUiICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB0b2tlbl90YWJsZV9mbGFnID0gdHJ1ZTsgfQotfCAiJXZlcmJvc2UiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmVwb3J0X2ZsYWcgPSByZXBvcnRfc3RhdGVzOyB9Ci18ICIleWFjYyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB5YWNjX2ZsYWcgPSB0cnVlOyB9Cit8ICIlbGFuZ3VhZ2UiIFNUUklORwkJeyBsYW5ndWFnZV9hcmdtYXRjaCAoJDIsIGdyYW1tYXJfcHJpbywgQDEpOyB9Cit8ICIlbGV4LXBhcmFtIiAiey4uLn0iCQl7IGFkZF9wYXJhbSAoImxleF9wYXJhbSIsICQyLCBAMik7IH0KK3wgIiVsb2NhdGlvbnMiICAgICAgICAgICAgICAgICAgeyBsb2NhdGlvbnNfZmxhZyA9IHRydWU7IH0KK3wgIiVuYW1lLXByZWZpeCIgU1RSSU5HICAgICAgICAgeyBzcGVjX25hbWVfcHJlZml4ID0gJDI7IH0KK3wgIiVuYW1lLXByZWZpeCIgIj0iIFNUUklORyAgICAgeyBzcGVjX25hbWVfcHJlZml4ID0gJDM7IH0gLyogZGVwcmVjYXRlZCAqLworfCAiJW5vLWxpbmVzIiAgICAgICAgICAgICAgICAgICB7IG5vX2xpbmVzX2ZsYWcgPSB0cnVlOyB9Cit8ICIlbm9uZGV0ZXJtaW5pc3RpYy1wYXJzZXIiCXsgbm9uZGV0ZXJtaW5pc3RpY19wYXJzZXIgPSB0cnVlOyB9Cit8ICIlb3V0cHV0IiBTVFJJTkcgICAgICAgICAgICAgIHsgc3BlY19vdXRmaWxlID0gJDI7IH0KK3wgIiVvdXRwdXQiICI9IiBTVFJJTkcgICAgICAgICAgeyBzcGVjX291dGZpbGUgPSAkMzsgfSAgLyogZGVwcmVjYXRlZCAqLworfCAiJXBhcnNlLXBhcmFtIiAiey4uLn0iCXsgYWRkX3BhcmFtICgicGFyc2VfcGFyYW0iLCAkMiwgQDIpOyB9Cit8ICIlcHVyZS1wYXJzZXIiCisgICAgeworICAgICAgLyogJXB1cmUtcGFyc2VyIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgYCVkZWZpbmUgYXBpLnB1cmUnLCBzbyB1c2UKKyAgICAgICAgIGAlZGVmaW5lIGFwaS5wdXJlJyBpbiBhIGJhY2t3YXJkLWNvbXBhdGlibGUgbWFubmVyIGhlcmUuICBGaXJzdCwgZG9uJ3QKKyAgICAgICAgIGNvbXBsYWluIGlmICVwdXJlLXBhcnNlciBpcyBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMuICAqLworICAgICAgaWYgKCFtdXNjbGVfZmluZF9jb25zdCAoInBlcmNlbnRfZGVmaW5lKGFwaS5wdXJlKSIpKQorICAgICAgICBtdXNjbGVfcGVyY2VudF9kZWZpbmVfaW5zZXJ0ICgiYXBpLnB1cmUiLCBAMSwgIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1VU0NMRV9QRVJDRU5UX0RFRklORV9HUkFNTUFSX0ZJTEUpOworICAgICAgLyogSW4gYWxsIGNhc2VzLCB1c2UgYXBpLnB1cmUgbm93IHNvIHRoYXQgdGhlIGJhY2tlbmQgZG9lc24ndCBjb21wbGFpbiBpZgorICAgICAgICAgdGhlIHNrZWxldG9uIGlnbm9yZXMgYXBpLnB1cmUsIGJ1dCBkbyB3YXJuIG5vdyBpZiB0aGVyZSdzIGEgcHJldmlvdXMKKyAgICAgICAgIGNvbmZsaWN0aW5nIGRlZmluaXRpb24gZnJvbSBhbiBhY3R1YWwgJWRlZmluZS4gICovCisgICAgICBpZiAoIW11c2NsZV9wZXJjZW50X2RlZmluZV9mbGFnX2lmICgiYXBpLnB1cmUiKSkKKyAgICAgICAgbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2luc2VydCAoImFwaS5wdXJlIiwgQDEsICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVVNDTEVfUEVSQ0VOVF9ERUZJTkVfR1JBTU1BUl9GSUxFKTsKKyAgICB9Cit8ICIlcmVxdWlyZSIgU1RSSU5HICAgICAgICAgICAgIHsgdmVyc2lvbl9jaGVjayAoJkAyLCAkMik7IH0KK3wgIiVza2VsZXRvbiIgU1RSSU5HCisgICAgeworICAgICAgY2hhciBjb25zdCAqc2tlbGV0b25fdXNlciA9ICQyOworICAgICAgaWYgKG1ic2NociAoc2tlbGV0b25fdXNlciwgJy8nKSkKKyAgICAgICAgeworICAgICAgICAgIHNpemVfdCBkaXJfbGVuZ3RoID0gc3RybGVuIChjdXJyZW50X2ZpbGUpOworICAgICAgICAgIGNoYXIgKnNrZWxldG9uX2J1aWxkOworICAgICAgICAgIHdoaWxlIChkaXJfbGVuZ3RoICYmIGN1cnJlbnRfZmlsZVtkaXJfbGVuZ3RoIC0gMV0gIT0gJy8nKQorICAgICAgICAgICAgLS1kaXJfbGVuZ3RoOworICAgICAgICAgIHdoaWxlIChkaXJfbGVuZ3RoICYmIGN1cnJlbnRfZmlsZVtkaXJfbGVuZ3RoIC0gMV0gPT0gJy8nKQorICAgICAgICAgICAgLS1kaXJfbGVuZ3RoOworICAgICAgICAgIHNrZWxldG9uX2J1aWxkID0KKyAgICAgICAgICAgIHhtYWxsb2MgKGRpcl9sZW5ndGggKyAxICsgc3RybGVuIChza2VsZXRvbl91c2VyKSArIDEpOworICAgICAgICAgIGlmIChkaXJfbGVuZ3RoID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbWVtY3B5IChza2VsZXRvbl9idWlsZCwgY3VycmVudF9maWxlLCBkaXJfbGVuZ3RoKTsKKyAgICAgICAgICAgICAgc2tlbGV0b25fYnVpbGRbZGlyX2xlbmd0aCsrXSA9ICcvJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBzdHJjcHkgKHNrZWxldG9uX2J1aWxkICsgZGlyX2xlbmd0aCwgc2tlbGV0b25fdXNlcik7CisgICAgICAgICAgc2tlbGV0b25fdXNlciA9IHVuaXFzdHJfbmV3IChza2VsZXRvbl9idWlsZCk7CisgICAgICAgICAgZnJlZSAoc2tlbGV0b25fYnVpbGQpOworICAgICAgICB9CisgICAgICBza2VsZXRvbl9hcmcgKHNrZWxldG9uX3VzZXIsIGdyYW1tYXJfcHJpbywgQDEpOworICAgIH0KK3wgIiV0b2tlbi10YWJsZSIgICAgICAgICAgICAgICAgeyB0b2tlbl90YWJsZV9mbGFnID0gdHJ1ZTsgfQorfCAiJXZlcmJvc2UiICAgICAgICAgICAgICAgICAgICB7IHJlcG9ydF9mbGFnIHw9IHJlcG9ydF9zdGF0ZXM7IH0KK3wgIiV5YWNjIiAgICAgICAgICAgICAgICAgICAgICAgeyB5YWNjX2ZsYWcgPSB0cnVlOyB9CiB8IC8qRklYTUU6IEVycj8gIFdoYXQgaXMgdGhpcyBob3Jyb3IgZG9pbmcgaGVyZT8gKi8gIjsiCiA7CiAKQEAgLTI1OSwzNSArMzQ2LDI5IEBACiAgICAgewogICAgICAgZ3JhbW1hcl9zdGFydF9zeW1ib2xfc2V0ICgkMiwgQDIpOwogICAgIH0KLXwgIiV1bmlvbiB7Li4ufSIKK3wgIiVkZXN0cnVjdG9yIiAiey4uLn0iIGdlbmVyaWNfc3ltbGlzdAogICAgIHsKLSAgICAgIGNoYXIgY29uc3QgKmJvZHkgPSAkMTsKLQotICAgICAgaWYgKHR5cGVkKQotCXsKLQkgIC8qIENvbmNhdGVuYXRlIHRoZSB1bmlvbiBib2RpZXMsIHR1cm5pbmcgdGhlIGZpcnN0IG9uZSdzCi0JICAgICB0cmFpbGluZyAnfScgaW50byAnXG4nLCBhbmQgb21pdHRpbmcgdGhlIHNlY29uZCBvbmUncyAneycuICAqLwotCSAgY2hhciAqY29kZSA9IG11c2NsZV9maW5kICgic3R5cGUiKTsKLQkgIGNvZGVbc3RybGVuIChjb2RlKSAtIDFdID0gJ1xuJzsKLQkgIGJvZHkrKzsKLQl9Ci0KLSAgICAgIHR5cGVkID0gdHJ1ZTsKLSAgICAgIG11c2NsZV9jb2RlX2dyb3cgKCJzdHlwZSIsIGJvZHksIEAxKTsKKyAgICAgIGNvZGVfcHJvcHMgY29kZTsKKyAgICAgIGNvZGVfcHJvcHNfc3ltYm9sX2FjdGlvbl9pbml0ICgmY29kZSwgJDIsIEAyKTsKKyAgICAgIGNvZGVfcHJvcHNfdHJhbnNsYXRlX2NvZGUgKCZjb2RlKTsKKyAgICAgIHsKKyAgICAgICAgc3ltYm9sX2xpc3QgKmxpc3Q7CisgICAgICAgIGZvciAobGlzdCA9ICQzOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkKKyAgICAgICAgICBzeW1ib2xfbGlzdF9kZXN0cnVjdG9yX3NldCAobGlzdCwgJmNvZGUpOworICAgICAgICBzeW1ib2xfbGlzdF9mcmVlICgkMyk7CisgICAgICB9CiAgICAgfQotfCAiJWRlc3RydWN0b3Igey4uLn0iIHN5bWJvbHMuMQorfCAiJXByaW50ZXIiICJ7Li4ufSIgZ2VuZXJpY19zeW1saXN0CiAgICAgewotICAgICAgc3ltYm9sX2xpc3QgKmxpc3Q7Ci0gICAgICBmb3IgKGxpc3QgPSAkMjsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpCi0Jc3ltYm9sX2Rlc3RydWN0b3Jfc2V0IChsaXN0LT5zeW0sICQxLCBAMSk7Ci0gICAgICBzeW1ib2xfbGlzdF9mcmVlICgkMik7Ci0gICAgfQotfCAiJXByaW50ZXIgey4uLn0iIHN5bWJvbHMuMQotICAgIHsKLSAgICAgIHN5bWJvbF9saXN0ICpsaXN0OwotICAgICAgZm9yIChsaXN0ID0gJDI7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KQotCXN5bWJvbF9wcmludGVyX3NldCAobGlzdC0+c3ltLCAkMSwgQDEpOwotICAgICAgc3ltYm9sX2xpc3RfZnJlZSAoJDIpOworICAgICAgY29kZV9wcm9wcyBjb2RlOworICAgICAgY29kZV9wcm9wc19zeW1ib2xfYWN0aW9uX2luaXQgKCZjb2RlLCAkMiwgQDIpOworICAgICAgY29kZV9wcm9wc190cmFuc2xhdGVfY29kZSAoJmNvZGUpOworICAgICAgeworICAgICAgICBzeW1ib2xfbGlzdCAqbGlzdDsKKyAgICAgICAgZm9yIChsaXN0ID0gJDM7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KQorICAgICAgICAgIHN5bWJvbF9saXN0X3ByaW50ZXJfc2V0IChsaXN0LCAmY29kZSk7CisgICAgICAgIHN5bWJvbF9saXN0X2ZyZWUgKCQzKTsKKyAgICAgIH0KICAgICB9CiB8ICIlZGVmYXVsdC1wcmVjIgogICAgIHsKQEAgLTI5Nyw4ICszNzgsNDQgQEAKICAgICB7CiAgICAgICBkZWZhdWx0X3ByZWMgPSBmYWxzZTsKICAgICB9Cit8ICIlY29kZSIgYnJhY2VsZXNzCisgICAgeworICAgICAgLyogRG8gbm90IGludm9rZSBtdXNjbGVfcGVyY2VudF9jb2RlX2dyb3cgaGVyZSBzaW5jZSBpdCBpbnZva2VzCisgICAgICAgICBtdXNjbGVfdXNlcl9uYW1lX2xpc3RfZ3Jvdy4gICovCisgICAgICBtdXNjbGVfY29kZV9ncm93ICgicGVyY2VudF9jb2RlKCkiLCAkMiwgQDIpOworICAgICAgY29kZV9zY2FubmVyX2xhc3Rfc3RyaW5nX2ZyZWUgKCk7CisgICAgfQorfCAiJWNvZGUiIElEIGJyYWNlbGVzcworICAgIHsKKyAgICAgIG11c2NsZV9wZXJjZW50X2NvZGVfZ3JvdyAoJDIsIEAyLCAkMywgQDMpOworICAgICAgY29kZV9zY2FubmVyX2xhc3Rfc3RyaW5nX2ZyZWUgKCk7CisgICAgfQogOwogCisKKy8qLS0tLS0tLS0tLSoKKyB8ICV1bmlvbi4gIHwKKyAqLS0tLS0tLS0tLSovCisKKyV0b2tlbiBQRVJDRU5UX1VOSU9OICIldW5pb24iOworCit1bmlvbl9uYW1lOgorICAvKiBOb3RoaW5nLiAqLyB7fQorfCBJRCAgICAgICAgICAgICB7IG11c2NsZV9jb2RlX2dyb3cgKCJ1bmlvbl9uYW1lIiwgJDEsIEAxKTsgfQorOworCitncmFtbWFyX2RlY2xhcmF0aW9uOgorICAiJXVuaW9uIiB1bmlvbl9uYW1lIGJyYWNlbGVzcworICAgIHsKKyAgICAgIHVuaW9uX3NlZW4gPSB0cnVlOworICAgICAgbXVzY2xlX2NvZGVfZ3JvdyAoInN0eXBlIiwgJDMsIEAzKTsKKyAgICAgIGNvZGVfc2Nhbm5lcl9sYXN0X3N0cmluZ19mcmVlICgpOworICAgIH0KKzsKKworCisKKwogc3ltYm9sX2RlY2xhcmF0aW9uOgogICAiJW50ZXJtIiB7IGN1cnJlbnRfY2xhc3MgPSBudGVybV9zeW07IH0gc3ltYm9sX2RlZnMuMQogICAgIHsKQEAgLTMxMywyMSArNDMwLDIyIEBACiB8ICIldHlwZSIgVFlQRSBzeW1ib2xzLjEKICAgICB7CiAgICAgICBzeW1ib2xfbGlzdCAqbGlzdDsKKyAgICAgIHRhZ19zZWVuID0gdHJ1ZTsKICAgICAgIGZvciAobGlzdCA9ICQzOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkKLQlzeW1ib2xfdHlwZV9zZXQgKGxpc3QtPnN5bSwgJDIsIEAyKTsKKwlzeW1ib2xfdHlwZV9zZXQgKGxpc3QtPmNvbnRlbnQuc3ltLCAkMiwgQDIpOwogICAgICAgc3ltYm9sX2xpc3RfZnJlZSAoJDMpOwogICAgIH0KIDsKIAogcHJlY2VkZW5jZV9kZWNsYXJhdGlvbjoKLSAgcHJlY2VkZW5jZV9kZWNsYXJhdG9yIHR5cGUub3B0IHN5bWJvbHMuMQorICBwcmVjZWRlbmNlX2RlY2xhcmF0b3IgdHlwZS5vcHQgc3ltYm9scy5wcmVjCiAgICAgewogICAgICAgc3ltYm9sX2xpc3QgKmxpc3Q7CiAgICAgICArK2N1cnJlbnRfcHJlYzsKICAgICAgIGZvciAobGlzdCA9ICQzOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkKIAl7Ci0JICBzeW1ib2xfdHlwZV9zZXQgKGxpc3QtPnN5bSwgY3VycmVudF90eXBlLCBAMik7Ci0JICBzeW1ib2xfcHJlY2VkZW5jZV9zZXQgKGxpc3QtPnN5bSwgY3VycmVudF9wcmVjLCAkMSwgQDEpOworCSAgc3ltYm9sX3R5cGVfc2V0IChsaXN0LT5jb250ZW50LnN5bSwgY3VycmVudF90eXBlLCBAMik7CisJICBzeW1ib2xfcHJlY2VkZW5jZV9zZXQgKGxpc3QtPmNvbnRlbnQuc3ltLCBjdXJyZW50X3ByZWMsICQxLCBAMSk7CiAJfQogICAgICAgc3ltYm9sX2xpc3RfZnJlZSAoJDMpOwogICAgICAgY3VycmVudF90eXBlID0gTlVMTDsKQEAgLTM0MiwxNCArNDYwLDQwIEBACiAKIHR5cGUub3B0OgogICAvKiBOb3RoaW5nLiAqLyB7IGN1cnJlbnRfdHlwZSA9IE5VTEw7IH0KLXwgVFlQRSAgICAgICAgICAgeyBjdXJyZW50X3R5cGUgPSAkMTsgfQorfCBUWVBFICAgICAgICAgICB7IGN1cnJlbnRfdHlwZSA9ICQxOyB0YWdfc2VlbiA9IHRydWU7IH0KIDsKIAotLyogT25lIG9yIG1vcmUgbm9udGVybWluYWxzIHRvIGJlICV0eXBlZC4gKi8KKy8qIEp1c3QgbGlrZSBzeW1ib2xzLjEgYnV0IGFjY2VwdCBJTlQgZm9yIHRoZSBzYWtlIG9mIFBPU0lYLiAgKi8KK3N5bWJvbHMucHJlYzoKKyAgc3ltYm9sLnByZWMKKyAgICB7ICQkID0gc3ltYm9sX2xpc3Rfc3ltX25ldyAoJDEsIEAxKTsgfQorfCBzeW1ib2xzLnByZWMgc3ltYm9sLnByZWMKKyAgICB7ICQkID0gc3ltYm9sX2xpc3RfcHJlcGVuZCAoJDEsIHN5bWJvbF9saXN0X3N5bV9uZXcgKCQyLCBAMikpOyB9Cis7CiAKK3N5bWJvbC5wcmVjOgorICAgIHN5bWJvbCB7ICQkID0gJDE7IH0KKyAgfCBzeW1ib2wgSU5UIHsgJCQgPSAkMTsgc3ltYm9sX3VzZXJfdG9rZW5fbnVtYmVyX3NldCAoJDEsICQyLCBAMik7IH0KKyAgOworCisvKiBPbmUgb3IgbW9yZSBzeW1ib2xzIHRvIGJlICV0eXBlZC4gKi8KIHN5bWJvbHMuMToKLSAgc3ltYm9sICAgICAgICAgICAgeyAkJCA9IHN5bWJvbF9saXN0X25ldyAoJDEsIEAxKTsgfQotfCBzeW1ib2xzLjEgc3ltYm9sICB7ICQkID0gc3ltYm9sX2xpc3RfcHJlcGVuZCAoJDEsICQyLCBAMik7IH0KKyAgc3ltYm9sCisgICAgeyAkJCA9IHN5bWJvbF9saXN0X3N5bV9uZXcgKCQxLCBAMSk7IH0KK3wgc3ltYm9scy4xIHN5bWJvbAorICAgIHsgJCQgPSBzeW1ib2xfbGlzdF9wcmVwZW5kICgkMSwgc3ltYm9sX2xpc3Rfc3ltX25ldyAoJDIsIEAyKSk7IH0KKzsKKworZ2VuZXJpY19zeW1saXN0OgorICBnZW5lcmljX3N5bWxpc3RfaXRlbSB7ICQkID0gJDE7IH0KK3wgZ2VuZXJpY19zeW1saXN0IGdlbmVyaWNfc3ltbGlzdF9pdGVtIHsgJCQgPSBzeW1ib2xfbGlzdF9wcmVwZW5kICgkMSwgJDIpOyB9Cis7CisKK2dlbmVyaWNfc3ltbGlzdF9pdGVtOgorICBzeW1ib2wgICAgICAgICAgICB7ICQkID0gc3ltYm9sX2xpc3Rfc3ltX25ldyAoJDEsIEAxKTsgfQorfCBUWVBFICAgICAgICAgICAgICB7ICQkID0gc3ltYm9sX2xpc3RfdHlwZV9uZXcgKCQxLCBAMSk7IH0KK3wgIjwqPiIgICAgICAgICAgICAgeyAkJCA9IHN5bWJvbF9saXN0X2RlZmF1bHRfdGFnZ2VkX25ldyAoQDEpOyB9Cit8ICI8PiIgICAgICAgICAgICAgeyAkJCA9IHN5bWJvbF9saXN0X2RlZmF1bHRfdGFnbGVzc19uZXcgKEAxKTsgfQogOwogCiAvKiBPbmUgdG9rZW4gZGVmaW5pdGlvbi4gICovCkBAIC0zNTcsMjUgKzUwMSwyNiBAQAogICBUWVBFCiAgICAgIHsKICAgICAgICBjdXJyZW50X3R5cGUgPSAkMTsKKyAgICAgICB0YWdfc2VlbiA9IHRydWU7CiAgICAgIH0KLXwgSUQKK3wgaWQKICAgICAgewogICAgICAgIHN5bWJvbF9jbGFzc19zZXQgKCQxLCBjdXJyZW50X2NsYXNzLCBAMSwgdHJ1ZSk7CiAgICAgICAgc3ltYm9sX3R5cGVfc2V0ICgkMSwgY3VycmVudF90eXBlLCBAMSk7CiAgICAgIH0KLXwgSUQgSU5UCit8IGlkIElOVAogICAgIHsKICAgICAgIHN5bWJvbF9jbGFzc19zZXQgKCQxLCBjdXJyZW50X2NsYXNzLCBAMSwgdHJ1ZSk7CiAgICAgICBzeW1ib2xfdHlwZV9zZXQgKCQxLCBjdXJyZW50X3R5cGUsIEAxKTsKICAgICAgIHN5bWJvbF91c2VyX3Rva2VuX251bWJlcl9zZXQgKCQxLCAkMiwgQDIpOwogICAgIH0KLXwgSUQgc3RyaW5nX2FzX2lkCit8IGlkIHN0cmluZ19hc19pZAogICAgIHsKICAgICAgIHN5bWJvbF9jbGFzc19zZXQgKCQxLCBjdXJyZW50X2NsYXNzLCBAMSwgdHJ1ZSk7CiAgICAgICBzeW1ib2xfdHlwZV9zZXQgKCQxLCBjdXJyZW50X3R5cGUsIEAxKTsKICAgICAgIHN5bWJvbF9tYWtlX2FsaWFzICgkMSwgJDIsIEAkKTsKICAgICB9Ci18IElEIElOVCBzdHJpbmdfYXNfaWQKK3wgaWQgSU5UIHN0cmluZ19hc19pZAogICAgIHsKICAgICAgIHN5bWJvbF9jbGFzc19zZXQgKCQxLCBjdXJyZW50X2NsYXNzLCBAMSwgdHJ1ZSk7CiAgICAgICBzeW1ib2xfdHlwZV9zZXQgKCQxLCBjdXJyZW50X3R5cGUsIEAxKTsKQEAgLTQxMiw3ICs1NTcsMTEgQEAKIDsKIAogcnVsZXM6Ci0gIElEX0NPTE9OIHsgY3VycmVudF9saHMgPSAkMTsgY3VycmVudF9saHNfbG9jYXRpb24gPSBAMTsgfSByaHNlcy4xCisgIGlkX2NvbG9uIG5hbWVkX3JlZi5vcHQgeyBjdXJyZW50X2xocyAoJDEsIEAxLCAkMik7IH0gcmhzZXMuMQorICB7CisgICAgLyogRnJlZSB0aGUgY3VycmVudCBsaHMuICovCisgICAgY3VycmVudF9saHMgKDAsIEAxLCAwKTsKKyAgfQogOwogCiByaHNlcy4xOgpAQCAtNDIzLDEwICs1NzIsMTIgQEAKIAogcmhzOgogICAvKiBOb3RoaW5nLiAgKi8KLSAgICB7IGdyYW1tYXJfY3VycmVudF9ydWxlX2JlZ2luIChjdXJyZW50X2xocywgY3VycmVudF9saHNfbG9jYXRpb24pOyB9Ci18IHJocyBzeW1ib2wKLSAgICB7IGdyYW1tYXJfY3VycmVudF9ydWxlX3N5bWJvbF9hcHBlbmQgKCQyLCBAMik7IH0KLXwgcmhzIGFjdGlvbgorICAgIHsgZ3JhbW1hcl9jdXJyZW50X3J1bGVfYmVnaW4gKGN1cnJlbnRfbGhzX3N5bWJvbCwgY3VycmVudF9saHNfbG9jYXRpb24sCisJCQkJICBjdXJyZW50X2xoc19uYW1lZF9yZWYpOyB9Cit8IHJocyBzeW1ib2wgbmFtZWRfcmVmLm9wdAorICAgIHsgZ3JhbW1hcl9jdXJyZW50X3J1bGVfc3ltYm9sX2FwcGVuZCAoJDIsIEAyLCAkMyk7IH0KK3wgcmhzICJ7Li4ufSIgbmFtZWRfcmVmLm9wdAorICAgIHsgZ3JhbW1hcl9jdXJyZW50X3J1bGVfYWN0aW9uX2FwcGVuZCAoJDIsIEAyLCAkMyk7IH0KIHwgcmhzICIlcHJlYyIgc3ltYm9sCiAgICAgeyBncmFtbWFyX2N1cnJlbnRfcnVsZV9wcmVjX3NldCAoJDMsIEAzKTsgfQogfCByaHMgIiVkcHJlYyIgSU5UCkBAIC00MzUsMjYgKzU4Niw3NSBAQAogICAgIHsgZ3JhbW1hcl9jdXJyZW50X3J1bGVfbWVyZ2Vfc2V0ICgkMywgQDMpOyB9CiA7CiAKLXN5bWJvbDoKLSAgSUQgICAgICAgICAgICAgIHsgJCQgPSAkMTsgfQotfCBzdHJpbmdfYXNfaWQgICAgeyAkJCA9ICQxOyB9CituYW1lZF9yZWYub3B0OgorICAvKiBOb3RoaW5nLiAqLyB7ICQkID0gMDsgfQorfAorICBCUkFDS0VURURfSUQgICB7ICQkID0gbmFtZWRfcmVmX25ldygkMSwgQDEpOyB9CiA7CiAKLS8qIEhhbmRsZSB0aGUgc2VtYW50aWNzIG9mIGFuIGFjdGlvbiBzcGVjaWFsbHksIHdpdGggYSBtaWQtcnVsZQotICAgYWN0aW9uLCBzbyB0aGF0IGdyYW1tYXJfY3VycmVudF9ydWxlX2FjdGlvbl9hcHBlbmQgaXMgaW52b2tlZAotICAgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGJyYWNlZCBjb2RlIGlzIHJlYWQgYnkgdGhlIHNjYW5uZXIuCiAKLSAgIFRoaXMgaW1wbGVtZW50YXRpb24gcmVsaWVzIG9uIHRoZSBMQUxSKDEpIHBhcnNpbmcgYWxnb3JpdGhtLgotICAgSWYgZ3JhbW1hcl9jdXJyZW50X3J1bGVfYWN0aW9uX2FwcGVuZCB3ZXJlIGV4ZWN1dGVkIGluIGEgbm9ybWFsCi0gICBhY3Rpb24gZm9yIHRoaXMgcnVsZSwgdGhlbiB3aGVuIHRoZSBpbnB1dCBncmFtbWFyIGNvbnRhaW5zIHR3bwotICAgc3VjY2Vzc2l2ZSBhY3Rpb25zLCB0aGUgc2Nhbm5lciB3b3VsZCBoYXZlIHRvIHJlYWQgYm90aCBhY3Rpb25zCi0gICBiZWZvcmUgcmVkdWNpbmcgdGhpcyBydWxlLiAgVGhhdCB3b3VsZG4ndCB3b3JrLCBzaW5jZSB0aGUgc2Nhbm5lcgotICAgcmVsaWVzIG9uIGFsbCBwcmVjZWRpbmcgaW5wdXQgYWN0aW9ucyBiZWluZyBwcm9jZXNzZWQgYnkKLSAgIGdyYW1tYXJfY3VycmVudF9ydWxlX2FjdGlvbl9hcHBlbmQgYmVmb3JlIGl0IHNjYW5zIHRoZSBuZXh0Ci0gICBhY3Rpb24uICAqLwotYWN0aW9uOgotICAgIHsgZ3JhbW1hcl9jdXJyZW50X3J1bGVfYWN0aW9uX2FwcGVuZCAobGFzdF9zdHJpbmcsIGxhc3RfYnJhY2VkX2NvZGVfbG9jKTsgfQotICBCUkFDRURfQ09ERQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorIHwgdmFyaWFibGUgYW5kIGNvbnRlbnQub3B0LiAgfAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBUaGUgU1RSSU5HIGZvcm0gb2YgdmFyaWFibGUgaXMgZGVwcmVjYXRlZCBhbmQgaXMgbm90IE00LWZyaWVuZGx5LgorICAgRm9yIGV4YW1wbGUsIE00IGZhaWxzIGZvciBgJWRlZmluZSAiWyIgInZhbHVlIicuICAqLwordmFyaWFibGU6CisgIElECit8IFNUUklORyB7ICQkID0gdW5pcXN0cl9uZXcgKCQxKTsgfQorOworCisvKiBTb21lIGNvbnRlbnQgb3IgZW1wdHkgYnkgZGVmYXVsdC4gKi8KK2NvbnRlbnQub3B0OgorICAvKiBOb3RoaW5nLiAqLyAgIHsgJCQgPSAiIjsgfQorfCBJRCB7ICQkID0gJDE7IH0KK3wgU1RSSU5HCis7CisKKworLyotLS0tLS0tLS0tLS0tKgorIHwgYnJhY2VsZXNzLiAgfAorICotLS0tLS0tLS0tLS0tKi8KKworYnJhY2VsZXNzOgorICAiey4uLn0iCisgICAgeworICAgICAgY29kZV9wcm9wcyBwbGFpbl9jb2RlOworICAgICAgJDFbc3RybGVuICgkMSkgLSAxXSA9ICdcbic7CisgICAgICBjb2RlX3Byb3BzX3BsYWluX2luaXQgKCZwbGFpbl9jb2RlLCAkMSsxLCBAMSk7CisgICAgICBjb2RlX3Byb3BzX3RyYW5zbGF0ZV9jb2RlICgmcGxhaW5fY29kZSk7CisgICAgICBncmFtX3NjYW5uZXJfbGFzdF9zdHJpbmdfZnJlZSAoKTsKKyAgICAgICQkID0gcGxhaW5fY29kZS5jb2RlOworICAgIH0KKzsKKworCisvKi0tLS0tLS0tLS0tLS0tLSoKKyB8IElkZW50aWZpZXJzLiAgfAorICotLS0tLS0tLS0tLS0tLS0qLworCisvKiBJZGVudGlmaWVycyBhcmUgcmV0dXJuZWQgYXMgdW5pcXN0ciB2YWx1ZXMgYnkgdGhlIHNjYW5uZXIuCisgICBEZXBlbmRpbmcgb24gdGhlaXIgdXNlLCB3ZSBtYXkgbmVlZCB0byBtYWtlIHRoZW0gZ2VudWluZSBzeW1ib2xzLiAgKi8KKworaWQ6CisgIElECisgICAgeyAkJCA9IHN5bWJvbF9mcm9tX3VuaXFzdHIgKCQxLCBAMSk7IH0KK3wgQ0hBUgorICAgIHsKKyAgICAgICQkID0gc3ltYm9sX2dldCAoY2hhcl9uYW1lICgkMSksIEAxKTsKKyAgICAgIHN5bWJvbF9jbGFzc19zZXQgKCQkLCB0b2tlbl9zeW0sIEAxLCBmYWxzZSk7CisgICAgICBzeW1ib2xfdXNlcl90b2tlbl9udW1iZXJfc2V0ICgkJCwgJDEsIEAxKTsKKyAgICB9Cis7CisKK2lkX2NvbG9uOgorICBJRF9DT0xPTiB7ICQkID0gc3ltYm9sX2Zyb21fdW5pcXN0ciAoJDEsIEAxKTsgfQorOworCisKK3N5bWJvbDoKKyAgaWQKK3wgc3RyaW5nX2FzX2lkCiA7CiAKIC8qIEEgc3RyaW5nIHVzZWQgYXMgYW4gSUQ6IHF1b3RlIGl0LiAgKi8KQEAgLTQ2NiwxOSArNjY2LDE2IEBACiAgICAgfQogOwogCi0vKiBBIHN0cmluZyB1c2VkIGZvciBpdHMgY29udGVudHMuICBEb24ndCBxdW90ZSBpdC4gICovCi1zdHJpbmdfY29udGVudDoKLSAgU1RSSU5HCi0gICAgeyAkJCA9ICQxOyB9Ci07Ci0KLQogZXBpbG9ndWUub3B0OgogICAvKiBOb3RoaW5nLiAgKi8KIHwgIiUlIiBFUElMT0dVRQogICAgIHsKLSAgICAgIG11c2NsZV9jb2RlX2dyb3cgKCJlcGlsb2d1ZSIsICQyLCBAMik7Ci0gICAgICBzY2FubmVyX2xhc3Rfc3RyaW5nX2ZyZWUgKCk7CisgICAgICBjb2RlX3Byb3BzIHBsYWluX2NvZGU7CisgICAgICBjb2RlX3Byb3BzX3BsYWluX2luaXQgKCZwbGFpbl9jb2RlLCAkMiwgQDIpOworICAgICAgY29kZV9wcm9wc190cmFuc2xhdGVfY29kZSAoJnBsYWluX2NvZGUpOworICAgICAgZ3JhbV9zY2FubmVyX2xhc3Rfc3RyaW5nX2ZyZWUgKCk7CisgICAgICBtdXNjbGVfY29kZV9ncm93ICgiZXBpbG9ndWUiLCBwbGFpbl9jb2RlLmNvZGUsIEAyKTsKKyAgICAgIGNvZGVfc2Nhbm5lcl9sYXN0X3N0cmluZ19mcmVlICgpOwogICAgIH0KIDsKIApAQCAtNTAxLDcgKzY5OCw3IEBACiAgIGxvYy5zdGFydCA9IHJoc1tuXS5lbmQ7CiAgIGxvYy5lbmQgPSByaHNbbl0uZW5kOwogCi0gIC8qIElnbm9yZSBlbXB0eSBub250ZXJtaW5hbHMgdGhlIHN0YXJ0IG9mIHRoZSB0aGUgcmlnaHQtaGFuZCBzaWRlLgorICAvKiBJZ25vcmUgZW1wdHkgbm9udGVybWluYWxzIHRoZSBzdGFydCBvZiB0aGUgcmlnaHQtaGFuZCBzaWRlLgogICAgICBEbyBub3QgYm90aGVyIHRvIGlnbm9yZSB0aGVtIGF0IHRoZSBlbmQgb2YgdGhlIHJpZ2h0LWhhbmQgc2lkZSwKICAgICAgc2luY2UgZW1wdHkgbm9udGVybWluYWxzIGhhdmUgdGhlIHNhbWUgZW5kIGFzIHRoZWlyIHByZWRlY2Vzc29ycy4gICovCiAgIGZvciAoaSA9IDE7IGkgPD0gbjsgaSsrKQpAQCAtNTM4LDQyICs3MzUsMzUgQEAKIAogICAvKiBTdHJpcCB0aGUgc3Vycm91bmRpbmcgJ3snIGFuZCAnfScsIGFuZCBhbnkgYmxhbmtzIGp1c3QgaW5zaWRlCiAgICAgIHRoZSBicmFjZXMuICAqLwotICB3aGlsZSAoKi0tcCA9PSAnICcgfHwgKnAgPT0gJ1x0JykKLSAgICBjb250aW51ZTsKKyAgLS1wOworICB3aGlsZSAoY19pc3NwYWNlICgodW5zaWduZWQgY2hhcikgKnApKQorICAgIC0tcDsKICAgcFsxXSA9ICdcMCc7Ci0gIHdoaWxlICgqKytkZWNsID09ICcgJyB8fCAqZGVjbCA9PSAnXHQnKQotICAgIGNvbnRpbnVlOworICArK2RlY2w7CisgIHdoaWxlIChjX2lzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSAqZGVjbCkpCisgICAgKytkZWNsOwogCiAgIGlmICghIG5hbWVfc3RhcnQpCiAgICAgY29tcGxhaW5fYXQgKGxvYywgXygibWlzc2luZyBpZGVudGlmaWVyIGluIHBhcmFtZXRlciBkZWNsYXJhdGlvbiIpKTsKICAgZWxzZQogICAgIHsKLSAgICAgIGNoYXIgKm5hbWU7Ci0gICAgICBzaXplX3QgbmFtZV9sZW47Ci0KLSAgICAgIGZvciAobmFtZV9sZW4gPSAxOwotCSAgIG1lbWNociAoYWxwaGFudW0sIG5hbWVfc3RhcnRbbmFtZV9sZW5dLCBzaXplb2YgYWxwaGFudW0pOwotCSAgIG5hbWVfbGVuKyspCi0JY29udGludWU7Ci0KLSAgICAgIG5hbWUgPSB4bWFsbG9jIChuYW1lX2xlbiArIDEpOwotICAgICAgbWVtY3B5IChuYW1lLCBuYW1lX3N0YXJ0LCBuYW1lX2xlbik7Ci0gICAgICBuYW1lW25hbWVfbGVuXSA9ICdcMCc7CisgICAgICBjaGFyICpuYW1lID0geG1lbWR1cDAgKG5hbWVfc3RhcnQsIHN0cnNwbiAobmFtZV9zdGFydCwgYWxwaGFudW0pKTsKICAgICAgIG11c2NsZV9wYWlyX2xpc3RfZ3JvdyAodHlwZSwgZGVjbCwgbmFtZSk7CiAgICAgICBmcmVlIChuYW1lKTsKICAgICB9CiAKLSAgc2Nhbm5lcl9sYXN0X3N0cmluZ19mcmVlICgpOworICBncmFtX3NjYW5uZXJfbGFzdF9zdHJpbmdfZnJlZSAoKTsKIH0KIAorCiBzdGF0aWMgdm9pZAogdmVyc2lvbl9jaGVjayAobG9jYXRpb24gY29uc3QgKmxvYywgY2hhciBjb25zdCAqdmVyc2lvbikKIHsKICAgaWYgKHN0cnZlcnNjbXAgKHZlcnNpb24sIFBBQ0tBR0VfVkVSU0lPTikgPiAwKQogICAgIHsKICAgICAgIGNvbXBsYWluX2F0ICgqbG9jLCAicmVxdWlyZSBiaXNvbiAlcywgYnV0IGhhdmUgJXMiLAotCQkgICB2ZXJzaW9uLCBQQUNLQUdFX1ZFUlNJT04pOwotICAgICAgZXhpdCAoNjMpOworICAgICAgICAgICAgICAgICAgIHZlcnNpb24sIFBBQ0tBR0VfVkVSU0lPTik7CisgICAgICBleGl0IChFWF9NSVNNQVRDSCk7CiAgICAgfQogfQogCkBAIC01ODgsMyArNzc4LDE2IEBACiB7CiAgIHJldHVybiB5eXRuYW1lW1lZVFJBTlNMQVRFICh0eXBlKV07CiB9CisKK3N0YXRpYyBjaGFyIGNvbnN0ICoKK2NoYXJfbmFtZSAoY2hhciBjKQoreworICBpZiAoYyA9PSAnXCcnKQorICAgIHJldHVybiAiJ1xcJyciOworICBlbHNlCisgICAgeworICAgICAgY2hhciBidWZbNF07CisgICAgICBidWZbMF0gPSAnXCcnOyBidWZbMV0gPSBjOyBidWZbMl0gPSAnXCcnOyBidWZbM10gPSAnXDAnOworICAgICAgcmV0dXJuIHF1b3RlYXJnX3N0eWxlIChlc2NhcGVfcXVvdGluZ19zdHlsZSwgYnVmKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvcHJpbnQteG1sLmMgYi9zcmMvcHJpbnQteG1sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM3YTc0MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wcmludC14bWwuYwpAQCAtMCwwICsxLDUzOCBAQAorLyogUHJpbnQgYW4geG1sIG9uIGdlbmVyYXRlZCBwYXJzZXIsIGZvciBCaXNvbiwKKworICAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSAic3lzdGVtLmgiCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2luY2x1ZGUgPGJpdHNldC5oPgorCisjaW5jbHVkZSAiTFIwLmgiCisjaW5jbHVkZSAiY2xvc3VyZS5oIgorI2luY2x1ZGUgImNvbmZsaWN0cy5oIgorI2luY2x1ZGUgImZpbGVzLmgiCisjaW5jbHVkZSAiZ2V0YXJncy5oIgorI2luY2x1ZGUgImdyYW0uaCIKKyNpbmNsdWRlICJsYWxyLmgiCisjaW5jbHVkZSAicHJpbnQuaCIKKyNpbmNsdWRlICJwcmludC14bWwuaCIKKyNpbmNsdWRlICJyZWFkZXIuaCIKKyNpbmNsdWRlICJyZWR1Y2UuaCIKKyNpbmNsdWRlICJzdGF0ZS5oIgorI2luY2x1ZGUgInN5bXRhYi5oIgorI2luY2x1ZGUgInRhYmxlcy5oIgorCitzdGF0aWMgYml0c2V0IG5vX3JlZHVjZV9zZXQ7CitzdHJ1Y3QgZXNjYXBlX2J1ZgoreworICBjaGFyICpwdHI7CisgIHNpemVfdCBzaXplOworfTsKK3N0YXRpYyBzdHJ1Y3QgZXNjYXBlX2J1ZiBlc2NhcGVfYnVmc1szXTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBSZXBvcnQgaW5mb3JtYXRpb24gb24gYSBzdGF0ZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCitwcmludF9jb3JlIChGSUxFICpvdXQsIGludCBsZXZlbCwgc3RhdGUgKnMpCit7CisgIHNpemVfdCBpOworICBpdGVtX251bWJlciAqc2l0ZW1zID0gcy0+aXRlbXM7CisgIHNpemVfdCBzbnJpdGVtcyA9IHMtPm5pdGVtczsKKworICAvKiBPdXRwdXQgYWxsIHRoZSBpdGVtcyBvZiBhIHN0YXRlLCBub3Qgb25seSBpdHMga2VybmVsLiAgKi8KKyAgY2xvc3VyZSAoc2l0ZW1zLCBzbnJpdGVtcyk7CisgIHNpdGVtcyA9IGl0ZW1zZXQ7CisgIHNucml0ZW1zID0gbml0ZW1zZXQ7CisKKyAgaWYgKCFzbnJpdGVtcykgeworICAgIHhtbF9wdXRzIChvdXQsIGxldmVsLCAiPGl0ZW1zZXQvPiIpOworICAgIHJldHVybjsKKyAgfQorCisgIHhtbF9wdXRzIChvdXQsIGxldmVsLCAiPGl0ZW1zZXQ+Iik7CisKKyAgZm9yIChpID0gMDsgaSA8IHNucml0ZW1zOyBpKyspCisgICAgeworICAgICAgYm9vbCBwcmludGVkID0gZmFsc2U7CisgICAgICBpdGVtX251bWJlciAqc3A7CisgICAgICBpdGVtX251bWJlciAqc3AxOworICAgICAgcnVsZV9udW1iZXIgcjsKKworICAgICAgc3AxID0gc3AgPSByaXRlbSArIHNpdGVtc1tpXTsKKworICAgICAgd2hpbGUgKCpzcCA+PSAwKQorCXNwKys7CisKKyAgICAgIHIgPSBpdGVtX251bWJlcl9hc19ydWxlX251bWJlciAoKnNwKTsKKyAgICAgIHNwID0gcnVsZXNbcl0ucmhzOworCisgICAgICAvKiBEaXNwbGF5IHRoZSBsb29rYWhlYWQgdG9rZW5zPyAgKi8KKyAgICAgIGlmIChpdGVtX251bWJlcl9pc19ydWxlX251bWJlciAoKnNwMSkpCisJeworCSAgcmVkdWN0aW9ucyAqcmVkcyA9IHMtPnJlZHVjdGlvbnM7CisJICBpbnQgcmVkID0gc3RhdGVfcmVkdWN0aW9uX2ZpbmQgKHMsICZydWxlc1tyXSk7CisJICAvKiBQcmludCBpdGVtIHdpdGggbG9va2FoZWFkcyBpZiB0aGVyZSBhcmUuICovCisJICBpZiAocmVkcy0+bG9va2FoZWFkX3Rva2VucyAmJiByZWQgIT0gLTEpCisJICAgIHsKKwkgICAgICB4bWxfcHJpbnRmIChvdXQsIGxldmVsICsgMSwKKwkJCSAgIjxpdGVtIHJ1bGUtbnVtYmVyPVwiJWRcIiBwb2ludD1cIiVkXCI+IiwKKwkJCSAgcnVsZXNbcl0ubnVtYmVyLCBzcDEgLSBzcCk7CisJICAgICAgc3RhdGVfcnVsZV9sb29rYWhlYWRfdG9rZW5zX3ByaW50X3htbCAocywgJnJ1bGVzW3JdLAorCQkJCQkJICAgICBvdXQsIGxldmVsICsgMik7CisJICAgICAgeG1sX3B1dHMgKG91dCwgbGV2ZWwgKyAxLCAiPC9pdGVtPiIpOworCSAgICAgIHByaW50ZWQgPSB0cnVlOworCSAgICB9CisJfQorCisgICAgICBpZiAoIXByaW50ZWQpCisJeworCSAgeG1sX3ByaW50ZiAob3V0LCBsZXZlbCArIDEsCisJCSAgICAgICI8aXRlbSBydWxlLW51bWJlcj1cIiVkXCIgcG9pbnQ9XCIlZFwiLz4iLAorCQkgICAgICBydWxlc1tyXS5udW1iZXIsCisJCSAgICAgIHNwMSAtIHNwKTsKKwl9CisgICAgfQorICB4bWxfcHV0cyAob3V0LCBsZXZlbCwgIjwvaXRlbXNldD4iKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBSZXBvcnQgdGhlIHNoaWZ0cyBpZiBESVNQTEFZX1NISUZUU19QIG9yIHRoZSBnb3RvcyBvZiBTIG9uIHwKK3wgT1VULiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZAorcHJpbnRfdHJhbnNpdGlvbnMgKHN0YXRlICpzLCBGSUxFICpvdXQsIGludCBsZXZlbCkKK3sKKyAgdHJhbnNpdGlvbnMgKnRyYW5zID0gcy0+dHJhbnNpdGlvbnM7CisgIGludCBuID0gMDsKKyAgaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IHRyYW5zLT5udW07IGkrKykKKyAgICBpZiAoIVRSQU5TSVRJT05fSVNfRElTQUJMRUQgKHRyYW5zLCBpKSkKKyAgICAgIHsKKwluKys7CisgICAgICB9CisKKyAgLyogTm90aGluZyB0byByZXBvcnQuICovCisgIGlmICghbikgeworICAgIHhtbF9wdXRzIChvdXQsIGxldmVsLCAiPHRyYW5zaXRpb25zLz4iKTsKKyAgICByZXR1cm47CisgIH0KKworICAvKiBSZXBvcnQgbG9va2FoZWFkIHRva2VucyBhbmQgc2hpZnRzLiAgKi8KKyAgeG1sX3B1dHMgKG91dCwgbGV2ZWwsICI8dHJhbnNpdGlvbnM+Iik7CisKKyAgZm9yIChpID0gMDsgaSA8IHRyYW5zLT5udW07IGkrKykKKyAgICBpZiAoIVRSQU5TSVRJT05fSVNfRElTQUJMRUQgKHRyYW5zLCBpKQorCSYmIFRSQU5TSVRJT05fSVNfU0hJRlQgKHRyYW5zLCBpKSkKKyAgICAgIHsKKwlzeW1ib2wgKnN5bSA9IHN5bWJvbHNbVFJBTlNJVElPTl9TWU1CT0wgKHRyYW5zLCBpKV07CisJY2hhciBjb25zdCAqdGFnID0gc3ltLT50YWc7CisJc3RhdGUgKnMxID0gdHJhbnMtPnN0YXRlc1tpXTsKKworCXhtbF9wcmludGYgKG91dCwgbGV2ZWwgKyAxLAorCQkgICAgIjx0cmFuc2l0aW9uIHR5cGU9XCJzaGlmdFwiIHN5bWJvbD1cIiVzXCIgc3RhdGU9XCIlZFwiLz4iLAorCQkgICAgeG1sX2VzY2FwZSAodGFnKSwgczEtPm51bWJlcik7CisgICAgICB9CisKKyAgZm9yIChpID0gMDsgaSA8IHRyYW5zLT5udW07IGkrKykKKyAgICBpZiAoIVRSQU5TSVRJT05fSVNfRElTQUJMRUQgKHRyYW5zLCBpKQorCSYmICFUUkFOU0lUSU9OX0lTX1NISUZUICh0cmFucywgaSkpCisgICAgICB7CisJc3ltYm9sICpzeW0gPSBzeW1ib2xzW1RSQU5TSVRJT05fU1lNQk9MICh0cmFucywgaSldOworCWNoYXIgY29uc3QgKnRhZyA9IHN5bS0+dGFnOworCXN0YXRlICpzMSA9IHRyYW5zLT5zdGF0ZXNbaV07CisKKwl4bWxfcHJpbnRmIChvdXQsIGxldmVsICsgMSwKKwkJICAgICI8dHJhbnNpdGlvbiB0eXBlPVwiZ290b1wiIHN5bWJvbD1cIiVzXCIgc3RhdGU9XCIlZFwiLz4iLAorCQkgICAgeG1sX2VzY2FwZSAodGFnKSwgczEtPm51bWJlcik7CisgICAgICB9CisKKyAgeG1sX3B1dHMgKG91dCwgbGV2ZWwsICI8L3RyYW5zaXRpb25zPiIpOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFJlcG9ydCB0aGUgZXhwbGljaXQgZXJyb3JzIG9mIFMgcmFpc2VkIGZyb20gJW5vbmFzc29jLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQKK3ByaW50X2VycnMgKEZJTEUgKm91dCwgaW50IGxldmVsLCBzdGF0ZSAqcykKK3sKKyAgZXJycyAqZXJycCA9IHMtPmVycnM7CisgIGJvb2wgY291bnQgPSBmYWxzZTsKKyAgaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IGVycnAtPm51bTsgKytpKQorICAgIGlmIChlcnJwLT5zeW1ib2xzW2ldKQorICAgICAgY291bnQgPSB0cnVlOworCisgIC8qIE5vdGhpbmcgdG8gcmVwb3J0LiAqLworICBpZiAoIWNvdW50KSB7CisgICAgeG1sX3B1dHMgKG91dCwgbGV2ZWwsICI8ZXJyb3JzLz4iKTsKKyAgICByZXR1cm47CisgIH0KKworICAvKiBSZXBvcnQgbG9va2FoZWFkIHRva2VucyBhbmQgZXJyb3JzLiAgKi8KKyAgeG1sX3B1dHMgKG91dCwgbGV2ZWwsICI8ZXJyb3JzPiIpOworICBmb3IgKGkgPSAwOyBpIDwgZXJycC0+bnVtOyArK2kpCisgICAgaWYgKGVycnAtPnN5bWJvbHNbaV0pCisgICAgICB7CisJY2hhciBjb25zdCAqdGFnID0gZXJycC0+c3ltYm9sc1tpXS0+dGFnOworCXhtbF9wcmludGYgKG91dCwgbGV2ZWwgKyAxLAorCQkgICAgIjxlcnJvciBzeW1ib2w9XCIlc1wiPm5vbmFzc29jaWF0aXZlPC9lcnJvcj4iLAorCQkgICAgeG1sX2VzY2FwZSAodGFnKSk7CisgICAgICB9CisgIHhtbF9wdXRzIChvdXQsIGxldmVsLCAiPC9lcnJvcnM+Iik7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBSZXBvcnQgYSByZWR1Y3Rpb24gb2YgUlVMRSBvbiBMT09LQUhFQURfVE9LRU4gKHdoaWNoIGNhbiBiZSBgZGVmYXVsdCcpLiAgfAorfCBJZiBub3QgRU5BQkxFRCwgdGhlIHJ1bGUgaXMgbWFza2VkIGJ5IGEgc2hpZnQgb3IgYSByZWR1Y2UgKFMvUiBhbmQgICAgICAgfAorfCBSL1IgY29uZmxpY3RzKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZAorcHJpbnRfcmVkdWN0aW9uIChGSUxFICpvdXQsIGludCBsZXZlbCwgY2hhciBjb25zdCAqbG9va2FoZWFkX3Rva2VuLAorCQkgcnVsZSAqciwgYm9vbCBlbmFibGVkKQoreworICBpZiAoci0+bnVtYmVyKQorICAgIHhtbF9wcmludGYgKG91dCwgbGV2ZWwsCisJCSI8cmVkdWN0aW9uIHN5bWJvbD1cIiVzXCIgcnVsZT1cIiVkXCIgZW5hYmxlZD1cIiVzXCIvPiIsCisJCXhtbF9lc2NhcGUgKGxvb2thaGVhZF90b2tlbiksCisJCXItPm51bWJlciwKKwkJZW5hYmxlZCA/ICJ0cnVlIiA6ICJmYWxzZSIpOworICBlbHNlCisgICAgeG1sX3ByaW50ZiAob3V0LCBsZXZlbCwKKwkJIjxyZWR1Y3Rpb24gc3ltYm9sPVwiJXNcIiBydWxlPVwiYWNjZXB0XCIgZW5hYmxlZD1cIiVzXCIvPiIsCisJCXhtbF9lc2NhcGUgKGxvb2thaGVhZF90b2tlbiksCisJCWVuYWJsZWQgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFJlcG9ydCBvbiBPVVQgdGhlIHJlZHVjdGlvbiBhY3Rpb25zIG9mIFMuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCitwcmludF9yZWR1Y3Rpb25zIChGSUxFICpvdXQsIGludCBsZXZlbCwgc3RhdGUgKnMpCit7CisgIHRyYW5zaXRpb25zICp0cmFucyA9IHMtPnRyYW5zaXRpb25zOworICByZWR1Y3Rpb25zICpyZWRzID0gcy0+cmVkdWN0aW9uczsKKyAgcnVsZSAqZGVmYXVsdF9yZWR1Y3Rpb24gPSBOVUxMOworICBpbnQgcmVwb3J0ID0gZmFsc2U7CisgIGludCBpLCBqOworCisgIGlmIChyZWRzLT5udW0gPT0gMCkKKyAgICB7CisgICAgICB4bWxfcHV0cyAob3V0LCBsZXZlbCwgIjxyZWR1Y3Rpb25zLz4iKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKHl5ZGVmYWN0W3MtPm51bWJlcl0gIT0gMCkKKyAgICBkZWZhdWx0X3JlZHVjdGlvbiA9ICZydWxlc1t5eWRlZmFjdFtzLT5udW1iZXJdIC0gMV07CisKKyAgYml0c2V0X3plcm8gKG5vX3JlZHVjZV9zZXQpOworICBGT1JfRUFDSF9TSElGVCAodHJhbnMsIGkpCisgICAgYml0c2V0X3NldCAobm9fcmVkdWNlX3NldCwgVFJBTlNJVElPTl9TWU1CT0wgKHRyYW5zLCBpKSk7CisgIGZvciAoaSA9IDA7IGkgPCBzLT5lcnJzLT5udW07ICsraSkKKyAgICBpZiAocy0+ZXJycy0+c3ltYm9sc1tpXSkKKyAgICAgIGJpdHNldF9zZXQgKG5vX3JlZHVjZV9zZXQsIHMtPmVycnMtPnN5bWJvbHNbaV0tPm51bWJlcik7CisKKyAgaWYgKGRlZmF1bHRfcmVkdWN0aW9uKQorICAgIHJlcG9ydCA9IHRydWU7CisKKyAgaWYgKHJlZHMtPmxvb2thaGVhZF90b2tlbnMpCisgICAgZm9yIChpID0gMDsgaSA8IG50b2tlbnM7IGkrKykKKyAgICAgIHsKKwlib29sIGNvdW50ID0gYml0c2V0X3Rlc3QgKG5vX3JlZHVjZV9zZXQsIGkpOworCisJZm9yIChqID0gMDsgaiA8IHJlZHMtPm51bTsgKytqKQorCSAgaWYgKGJpdHNldF90ZXN0IChyZWRzLT5sb29rYWhlYWRfdG9rZW5zW2pdLCBpKSkKKwkgICAgeworCSAgICAgIGlmICghIGNvdW50KQorCQl7CisJCSAgaWYgKHJlZHMtPnJ1bGVzW2pdICE9IGRlZmF1bHRfcmVkdWN0aW9uKQorCQkgICAgcmVwb3J0ID0gdHJ1ZTsKKwkJICBjb3VudCA9IHRydWU7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICByZXBvcnQgPSB0cnVlOworCQl9CisJICAgIH0KKyAgICAgIH0KKworICAvKiBOb3RoaW5nIHRvIHJlcG9ydC4gKi8KKyAgaWYgKCFyZXBvcnQpIHsKKyAgICB4bWxfcHV0cyAob3V0LCBsZXZlbCwgIjxyZWR1Y3Rpb25zLz4iKTsKKyAgICByZXR1cm47CisgIH0KKworICB4bWxfcHV0cyAob3V0LCBsZXZlbCwgIjxyZWR1Y3Rpb25zPiIpOworCisgIC8qIFJlcG9ydCBsb29rYWhlYWQgdG9rZW5zIChvciAkZGVmYXVsdCkgYW5kIHJlZHVjdGlvbnMuICAqLworICBpZiAocmVkcy0+bG9va2FoZWFkX3Rva2VucykKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnRva2VuczsgaSsrKQorICAgICAgeworCWJvb2wgZGVmYXVsdGVkID0gZmFsc2U7CisJYm9vbCBjb3VudCA9IGJpdHNldF90ZXN0IChub19yZWR1Y2Vfc2V0LCBpKTsKKworCWZvciAoaiA9IDA7IGogPCByZWRzLT5udW07ICsraikKKwkgIGlmIChiaXRzZXRfdGVzdCAocmVkcy0+bG9va2FoZWFkX3Rva2Vuc1tqXSwgaSkpCisJICAgIHsKKwkgICAgICBpZiAoISBjb3VudCkKKwkJeworCQkgIGlmIChyZWRzLT5ydWxlc1tqXSAhPSBkZWZhdWx0X3JlZHVjdGlvbikKKwkJICAgIHByaW50X3JlZHVjdGlvbiAob3V0LCBsZXZlbCArIDEsIHN5bWJvbHNbaV0tPnRhZywKKwkJCQkgICAgIHJlZHMtPnJ1bGVzW2pdLCB0cnVlKTsKKwkJICBlbHNlCisJCSAgICBkZWZhdWx0ZWQgPSB0cnVlOworCQkgIGNvdW50ID0gdHJ1ZTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIGlmIChkZWZhdWx0ZWQpCisJCSAgICBwcmludF9yZWR1Y3Rpb24gKG91dCwgbGV2ZWwgKyAxLCBzeW1ib2xzW2ldLT50YWcsCisJCQkJICAgICBkZWZhdWx0X3JlZHVjdGlvbiwgdHJ1ZSk7CisJCSAgZGVmYXVsdGVkID0gZmFsc2U7CisJCSAgcHJpbnRfcmVkdWN0aW9uIChvdXQsIGxldmVsICsgMSwgc3ltYm9sc1tpXS0+dGFnLAorCQkJCSAgIHJlZHMtPnJ1bGVzW2pdLCBmYWxzZSk7CisJCX0KKwkgICAgfQorICAgICAgfQorCisgIGlmIChkZWZhdWx0X3JlZHVjdGlvbikKKyAgICBwcmludF9yZWR1Y3Rpb24gKG91dCwgbGV2ZWwgKyAxLAorCQkgICAgICIkZGVmYXVsdCIsIGRlZmF1bHRfcmVkdWN0aW9uLCB0cnVlKTsKKworICB4bWxfcHV0cyAob3V0LCBsZXZlbCwgIjwvcmVkdWN0aW9ucz4iKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBSZXBvcnQgb24gT1VUIGFsbCB0aGUgYWN0aW9ucyAoc2hpZnRzLCBnb3RvcywgcmVkdWN0aW9ucywgYW5kIHwKK3wgZXhwbGljaXQgZXJyb3MgZnJvbSAlbm9uYXNzb2MpIG9mIFMuICAgICAgICAgICAgICAgICAgICAgICAgICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZAorcHJpbnRfYWN0aW9ucyAoRklMRSAqb3V0LCBpbnQgbGV2ZWwsIHN0YXRlICpzKQoreworICB4bWxfcHV0cyAob3V0LCBsZXZlbCwgIjxhY3Rpb25zPiIpOworICBwcmludF90cmFuc2l0aW9ucyAocywgb3V0LCBsZXZlbCArIDEpOworICBwcmludF9lcnJzIChvdXQsIGxldmVsICsgMSwgcyk7CisgIHByaW50X3JlZHVjdGlvbnMgKG91dCwgbGV2ZWwgKyAxLCBzKTsKKyAgeG1sX3B1dHMgKG91dCwgbGV2ZWwsICI8L2FjdGlvbnM+Iik7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBSZXBvcnQgYWxsIHRoZSBkYXRhIG9uIFMgb24gT1VULiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZAorcHJpbnRfc3RhdGUgKEZJTEUgKm91dCwgaW50IGxldmVsLCBzdGF0ZSAqcykKK3sKKyAgZnB1dGMgKCdcbicsIG91dCk7CisgIHhtbF9wcmludGYgKG91dCwgbGV2ZWwsICI8c3RhdGUgbnVtYmVyPVwiJWRcIj4iLCBzLT5udW1iZXIpOworICBwcmludF9jb3JlIChvdXQsIGxldmVsICsgMSwgcyk7CisgIHByaW50X2FjdGlvbnMgKG91dCwgbGV2ZWwgKyAxLCBzKTsKKyAgaWYgKHMtPnNvbHZlZF9jb25mbGljdHNfeG1sKQorICAgIHsKKyAgICAgIHhtbF9wdXRzIChvdXQsIGxldmVsICsgMSwgIjxzb2x2ZWQtY29uZmxpY3RzPiIpOworICAgICAgZnB1dHMgKHMtPnNvbHZlZF9jb25mbGljdHNfeG1sLCBvdXQpOworICAgICAgeG1sX3B1dHMgKG91dCwgbGV2ZWwgKyAxLCAiPC9zb2x2ZWQtY29uZmxpY3RzPiIpOworICAgIH0KKyAgZWxzZQorICAgIHhtbF9wdXRzIChvdXQsIGxldmVsICsgMSwgIjxzb2x2ZWQtY29uZmxpY3RzLz4iKTsKKyAgeG1sX3B1dHMgKG91dCwgbGV2ZWwsICI8L3N0YXRlPiIpOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFByaW50IGluZm9ybWF0aW9uIG9uIHRoZSB3aG9sZSBncmFtbWFyLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQKK3ByaW50X2dyYW1tYXIgKEZJTEUgKm91dCwgaW50IGxldmVsKQoreworICBzeW1ib2xfbnVtYmVyIGk7CisKKyAgZnB1dGMgKCdcbicsIG91dCk7CisgIHhtbF9wdXRzIChvdXQsIGxldmVsLCAiPGdyYW1tYXI+Iik7CisgIGdyYW1tYXJfcnVsZXNfcHJpbnRfeG1sIChvdXQsIGxldmVsKTsKKworICAvKiBUZXJtaW5hbHMgKi8KKyAgeG1sX3B1dHMgKG91dCwgbGV2ZWwgKyAxLCAiPHRlcm1pbmFscz4iKTsKKyAgZm9yIChpID0gMDsgaSA8IG1heF91c2VyX3Rva2VuX251bWJlciArIDE7IGkrKykKKyAgICBpZiAodG9rZW5fdHJhbnNsYXRpb25zW2ldICE9IHVuZGVmdG9rZW4tPm51bWJlcikKKyAgICAgIHsKKwljaGFyIGNvbnN0ICp0YWcgPSBzeW1ib2xzW3Rva2VuX3RyYW5zbGF0aW9uc1tpXV0tPnRhZzsKKyAgICAgICAgaW50IHByZWNlZGVuY2UgPSBzeW1ib2xzW3Rva2VuX3RyYW5zbGF0aW9uc1tpXV0tPnByZWM7CisgICAgICAgIGFzc29jIGFzc29jaWF0aXZpdHkgPSBzeW1ib2xzW3Rva2VuX3RyYW5zbGF0aW9uc1tpXV0tPmFzc29jOworICAgICAgICB4bWxfaW5kZW50IChvdXQsIGxldmVsICsgMik7CisgICAgICAgIGZwcmludGYgKG91dCwKKyAgICAgICAgICAgICAgICAgIjx0ZXJtaW5hbCBzeW1ib2wtbnVtYmVyPVwiJWRcIiB0b2tlbi1udW1iZXI9XCIlZFwiIgorICAgICAgICAgICAgICAgICAiIG5hbWU9XCIlc1wiIHVzZWZ1bG5lc3M9XCIlc1wiIiwKKyAgICAgICAgICAgICAgICAgdG9rZW5fdHJhbnNsYXRpb25zW2ldLCBpLCB4bWxfZXNjYXBlICh0YWcpLAorICAgICAgICAgICAgICAgICByZWR1Y2VfdG9rZW5fdW51c2VkX2luX2dyYW1tYXIgKHRva2VuX3RyYW5zbGF0aW9uc1tpXSkKKyAgICAgICAgICAgICAgICAgICA/ICJ1bnVzZWQtaW4tZ3JhbW1hciIgOiAidXNlZnVsIik7CisgICAgICAgIGlmIChwcmVjZWRlbmNlKQorICAgICAgICAgIGZwcmludGYgKG91dCwgIiBwcmVjPVwiJWRcIiIsIHByZWNlZGVuY2UpOworICAgICAgICBpZiAoYXNzb2NpYXRpdml0eSAhPSB1bmRlZl9hc3NvYykKKyAgICAgICAgICBmcHJpbnRmIChvdXQsICIgYXNzb2M9XCIlc1wiIiwgYXNzb2NfdG9fc3RyaW5nIChhc3NvY2lhdGl2aXR5KSArIDEpOworICAgICAgICBmcHV0cyAoIi8+XG4iLCBvdXQpOworICAgICAgfQorICB4bWxfcHV0cyAob3V0LCBsZXZlbCArIDEsICI8L3Rlcm1pbmFscz4iKTsKKworICAvKiBOb250ZXJtaW5hbHMgKi8KKyAgeG1sX3B1dHMgKG91dCwgbGV2ZWwgKyAxLCAiPG5vbnRlcm1pbmFscz4iKTsKKyAgZm9yIChpID0gbnRva2VuczsgaSA8IG5zeW1zICsgbnVzZWxlc3Nfbm9udGVybWluYWxzOyBpKyspCisgICAgeworICAgICAgY2hhciBjb25zdCAqdGFnID0gc3ltYm9sc1tpXS0+dGFnOworICAgICAgeG1sX3ByaW50ZiAob3V0LCBsZXZlbCArIDIsCisJCSAgIjxub250ZXJtaW5hbCBzeW1ib2wtbnVtYmVyPVwiJWRcIiBuYW1lPVwiJXNcIiIKKyAgICAgICAgICAgICAgICAgICIgdXNlZnVsbmVzcz1cIiVzXCIvPiIsCisJCSAgaSwgeG1sX2VzY2FwZSAodGFnKSwKKyAgICAgICAgICAgICAgICAgIHJlZHVjZV9ub250ZXJtaW5hbF91c2VsZXNzX2luX2dyYW1tYXIgKGkpCisgICAgICAgICAgICAgICAgICAgID8gInVzZWxlc3MtaW4tZ3JhbW1hciIgOiAidXNlZnVsIik7CisgICAgfQorICB4bWxfcHV0cyAob3V0LCBsZXZlbCArIDEsICI8L25vbnRlcm1pbmFscz4iKTsKKyAgeG1sX3B1dHMgKG91dCwgbGV2ZWwsICI8L2dyYW1tYXI+Iik7Cit9CisKK3ZvaWQKK3htbF9pbmRlbnQgKEZJTEUgKm91dCwgaW50IGxldmVsKQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IGxldmVsOyBpKyspCisgICAgZnB1dHMgKCIgICIsIG91dCk7Cit9CisKK3ZvaWQKK3htbF9wdXRzIChGSUxFICpvdXQsIGludCBsZXZlbCwgY2hhciBjb25zdCAqcykKK3sKKyAgeG1sX2luZGVudCAob3V0LCBsZXZlbCk7CisgIGZwdXRzIChzLCBvdXQpOworICBmcHV0YyAoJ1xuJywgb3V0KTsKK30KKwordm9pZAoreG1sX3ByaW50ZiAoRklMRSAqb3V0LCBpbnQgbGV2ZWwsIGNoYXIgY29uc3QgKmZtdCwgLi4uKQoreworICB2YV9saXN0IGFyZ2xpc3Q7CisKKyAgeG1sX2luZGVudCAob3V0LCBsZXZlbCk7CisKKyAgdmFfc3RhcnQgKGFyZ2xpc3QsIGZtdCk7CisgIHZmcHJpbnRmIChvdXQsIGZtdCwgYXJnbGlzdCk7CisgIHZhX2VuZCAoYXJnbGlzdCk7CisKKyAgZnB1dGMgKCdcbicsIG91dCk7Cit9CisKK3N0YXRpYyBjaGFyIGNvbnN0ICoKK3htbF9lc2NhcGVfc3RyaW5nIChzdHJ1Y3QgZXNjYXBlX2J1ZiAqYnVmLCBjaGFyIGNvbnN0ICpzdHIpCit7CisgIHNpemVfdCBsZW4gPSBzdHJsZW4gKHN0cik7CisgIHNpemVfdCBtYXhfZXhwYW5zaW9uID0gc2l6ZW9mICImcXVvdDsiIC0gMTsKKyAgY2hhciAqcDsKKworICBpZiAoYnVmLT5zaXplIDw9IG1heF9leHBhbnNpb24gKiBsZW4pCisgICAgeworICAgICAgYnVmLT5zaXplID0gbWF4X2V4cGFuc2lvbiAqIGxlbiArIDE7CisgICAgICBidWYtPnB0ciA9IHgycmVhbGxvYyAoYnVmLT5wdHIsICZidWYtPnNpemUpOworICAgIH0KKyAgcCA9IGJ1Zi0+cHRyOworCisgIGZvciAoOyAqc3RyOyBzdHIrKykKKyAgICBzd2l0Y2ggKCpzdHIpCisgICAgICB7CisgICAgICBkZWZhdWx0OiAqcCsrID0gKnN0cjsgYnJlYWs7CisgICAgICBjYXNlICcmJzogcCA9IHN0cGNweSAocCwgIiZhbXA7IiApOyBicmVhazsKKyAgICAgIGNhc2UgJzwnOiBwID0gc3RwY3B5IChwLCAiJmx0OyIgICk7IGJyZWFrOworICAgICAgY2FzZSAnPic6IHAgPSBzdHBjcHkgKHAsICImZ3Q7IiAgKTsgYnJlYWs7CisgICAgICBjYXNlICciJzogcCA9IHN0cGNweSAocCwgIiZxdW90OyIpOyBicmVhazsKKyAgICAgIH0KKworICAqcCA9ICdcMCc7CisgIHJldHVybiBidWYtPnB0cjsKK30KKworY2hhciBjb25zdCAqCit4bWxfZXNjYXBlX24gKGludCBuLCBjaGFyIGNvbnN0ICpzdHIpCit7CisgIHJldHVybiB4bWxfZXNjYXBlX3N0cmluZyAoZXNjYXBlX2J1ZnMgKyBuLCBzdHIpOworfQorCitjaGFyIGNvbnN0ICoKK3htbF9lc2NhcGUgKGNoYXIgY29uc3QgKnN0cikKK3sKKyAgcmV0dXJuIHhtbF9lc2NhcGVfbiAoMCwgc3RyKTsKK30KKwordm9pZAorcHJpbnRfeG1sICh2b2lkKQoreworICBzdGF0ZV9udW1iZXIgaTsKKyAgaW50IGxldmVsID0gMDsKKworICBGSUxFICpvdXQgPSB4Zm9wZW4gKHNwZWNfeG1sX2ZpbGUsICJ3Iik7CisKKyAgZnB1dHMgKCI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/PlxuXG4iLCBvdXQpOworICB4bWxfcHJpbnRmIChvdXQsIGxldmVsLAorICAgICAgICAgICAgICAiPGJpc29uLXhtbC1yZXBvcnQgdmVyc2lvbj1cIiVzXCIgYnVnLXJlcG9ydD1cIiVzXCIiCisgICAgICAgICAgICAgICIgdXJsPVwiJXNcIj4iLAorICAgICAgICAgICAgICB4bWxfZXNjYXBlX24gKDAsIFZFUlNJT04pLAorICAgICAgICAgICAgICB4bWxfZXNjYXBlX24gKDEsIFBBQ0tBR0VfQlVHUkVQT1JUKSwKKyAgICAgICAgICAgICAgeG1sX2VzY2FwZV9uICgyLCBQQUNLQUdFX1VSTCkpOworCisgIGZwdXRjICgnXG4nLCBvdXQpOworICB4bWxfcHJpbnRmIChvdXQsIGxldmVsICsgMSwgIjxmaWxlbmFtZT4lczwvZmlsZW5hbWU+IiwKKwkgICAgICB4bWxfZXNjYXBlIChncmFtbWFyX2ZpbGUpKTsKKworICAvKiBwcmludCBncmFtbWFyICovCisgIHByaW50X2dyYW1tYXIgKG91dCwgbGV2ZWwgKyAxKTsKKworICBuZXdfY2xvc3VyZSAobnJpdGVtcyk7CisgIG5vX3JlZHVjZV9zZXQgPSAgYml0c2V0X2NyZWF0ZSAobnRva2VucywgQklUU0VUX0ZJWEVEKTsKKworICAvKiBwcmludCBhdXRvbWF0b24gKi8KKyAgZnB1dGMgKCdcbicsIG91dCk7CisgIHhtbF9wdXRzIChvdXQsIGxldmVsICsgMSwgIjxhdXRvbWF0b24+Iik7CisgIGZvciAoaSA9IDA7IGkgPCBuc3RhdGVzOyBpKyspCisgICAgcHJpbnRfc3RhdGUgKG91dCwgbGV2ZWwgKyAyLCBzdGF0ZXNbaV0pOworICB4bWxfcHV0cyAob3V0LCBsZXZlbCArIDEsICI8L2F1dG9tYXRvbj4iKTsKKworICBiaXRzZXRfZnJlZSAobm9fcmVkdWNlX3NldCk7CisgIGZyZWVfY2xvc3VyZSAoKTsKKworICB4bWxfcHV0cyAob3V0LCAwLCAiPC9iaXNvbi14bWwtcmVwb3J0PiIpOworCisgIGZyZWUgKGVzY2FwZV9idWZzWzBdLnB0cik7CisgIGZyZWUgKGVzY2FwZV9idWZzWzFdLnB0cik7CisKKyAgeGZjbG9zZSAob3V0KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9wcmludC14bWwuaCBiL3NyYy9wcmludC14bWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGVhMmU3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3ByaW50LXhtbC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qIE91dHB1dCBhbiB4bWwgb2YgdGhlIGdlbmVyYXRlZCBwYXJzZXIsIGZvciBCaXNvbi4KKworICAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIFBSSU5UX1hNTF9IXworIyBkZWZpbmUgUFJJTlRfWE1MX0hfCisKK3ZvaWQgeG1sX2luZGVudCAoRklMRSAqb3V0LCBpbnQgbGV2ZWwpOwordm9pZCB4bWxfcHV0cyAoRklMRSAqLCBpbnQsIGNoYXIgY29uc3QgKik7Cit2b2lkIHhtbF9wcmludGYgKEZJTEUgKiwgaW50LCBjaGFyIGNvbnN0ICosIC4uLik7CitjaGFyIGNvbnN0ICp4bWxfZXNjYXBlX24gKGludCBuLCBjaGFyIGNvbnN0ICpzdHIpOworY2hhciBjb25zdCAqeG1sX2VzY2FwZSAoY2hhciBjb25zdCAqc3RyKTsKK3ZvaWQgcHJpbnRfeG1sICh2b2lkKTsKKworI2VuZGlmIC8qICFQUklOVF9YTUxfSF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9wcmludC5jIGIvc3JjL3ByaW50LmMKaW5kZXggY2IxNjAwYy4uNWZkYjI4YiAxMDA2NDQKLS0tIGEvc3JjL3ByaW50LmMKKysrIGIvc3JjL3ByaW50LmMKQEAgLTEsMzAgKzEsMjcgQEAKIC8qIFByaW50IGluZm9ybWF0aW9uIG9uIGdlbmVyYXRlZCBwYXJzZXIsIGZvciBiaXNvbiwKIAotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg2LCAxOTg5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4NiwgMTk4OSwgMjAwMC0yMDA1LCAyMDA3LCAyMDA5LTIwMTIgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KIAotICAgQmlzb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCi0gICBCaXNvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggQmlzb247IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogI2luY2x1ZGUgPGNvbmZpZy5oPgogI2luY2x1ZGUgInN5c3RlbS5oIgogCiAjaW5jbHVkZSA8Yml0c2V0Lmg+Ci0jaW5jbHVkZSA8cXVvdGVhcmcuaD4KIAogI2luY2x1ZGUgIkxSMC5oIgogI2luY2x1ZGUgImNsb3N1cmUuaCIKQEAgLTMzLDE0ICszMCwxNSBAQAogI2luY2x1ZGUgImdldGFyZ3MuaCIKICNpbmNsdWRlICJncmFtLmgiCiAjaW5jbHVkZSAibGFsci5oIgorI2luY2x1ZGUgIm11c2NsZS10YWIuaCIKICNpbmNsdWRlICJwcmludC5oIgogI2luY2x1ZGUgInJlYWRlci5oIgogI2luY2x1ZGUgInJlZHVjZS5oIgogI2luY2x1ZGUgInN0YXRlLmgiCiAjaW5jbHVkZSAic3ltdGFiLmgiCisjaW5jbHVkZSAidGFibGVzLmgiCiAKLXN0YXRpYyBiaXRzZXQgc2hpZnRfc2V0Owotc3RhdGljIGJpdHNldCBsb29rX2FoZWFkX3NldDsKK3N0YXRpYyBiaXRzZXQgbm9fcmVkdWNlX3NldDsKIAogI2lmIDAKIHN0YXRpYyB2b2lkCkBAIC04MSw3ICs3OSw3IEBACiAgICAgewogICAgICAgY2xvc3VyZSAoc2l0ZW1zLCBzbnJpdGVtcyk7CiAgICAgICBzaXRlbXMgPSBpdGVtc2V0OwotICAgICAgc25yaXRlbXMgPSBucml0ZW1zZXQ7CisgICAgICBzbnJpdGVtcyA9IG5pdGVtc2V0OwogICAgIH0KIAogICBpZiAoIXNucml0ZW1zKQpAQCAtMTExLDkgKzEwOSwxMCBAQAogICAgICAgZm9yICgvKiBOb3RoaW5nICovOyAqc3AgPj0gMDsgKytzcCkKIAlmcHJpbnRmIChvdXQsICIgJXMiLCBzeW1ib2xzWypzcF0tPnRhZyk7CiAKLSAgICAgIC8qIERpc3BsYXkgdGhlIGxvb2stYWhlYWQgdG9rZW5zPyAgKi8KLSAgICAgIGlmIChyZXBvcnRfZmxhZyAmIHJlcG9ydF9sb29rX2FoZWFkX3Rva2VucykKLQlzdGF0ZV9ydWxlX2xvb2tfYWhlYWRfdG9rZW5zX3ByaW50IChzLCAmcnVsZXNbcl0sIG91dCk7CisgICAgICAvKiBEaXNwbGF5IHRoZSBsb29rYWhlYWQgdG9rZW5zPyAgKi8KKyAgICAgIGlmIChyZXBvcnRfZmxhZyAmIHJlcG9ydF9sb29rYWhlYWRfdG9rZW5zCisgICAgICAgICAgJiYgaXRlbV9udW1iZXJfaXNfcnVsZV9udW1iZXIgKCpzcDEpKQorCXN0YXRlX3J1bGVfbG9va2FoZWFkX3Rva2Vuc19wcmludCAocywgJnJ1bGVzW3JdLCBvdXQpOwogCiAgICAgICBmcHV0YyAoJ1xuJywgb3V0KTsKICAgICB9CkBAIC0xMzIsNyArMTMxLDcgQEAKICAgc2l6ZV90IHdpZHRoID0gMDsKICAgaW50IGk7CiAKLSAgLyogQ29tcHV0ZSB0aGUgd2lkdGggb2YgdGhlIGxvb2stYWhlYWQgdG9rZW4gY29sdW1uLiAgKi8KKyAgLyogQ29tcHV0ZSB0aGUgd2lkdGggb2YgdGhlIGxvb2thaGVhZCB0b2tlbiBjb2x1bW4uICAqLwogICBmb3IgKGkgPSAwOyBpIDwgdHJhbnMtPm51bTsgaSsrKQogICAgIGlmICghVFJBTlNJVElPTl9JU19ESVNBQkxFRCAodHJhbnMsIGkpCiAJJiYgVFJBTlNJVElPTl9JU19TSElGVCAodHJhbnMsIGkpID09IGRpc3BsYXlfdHJhbnNpdGlvbnNfcCkKQEAgLTE0OCw3ICsxNDcsNyBAQAogICBmcHV0YyAoJ1xuJywgb3V0KTsKICAgd2lkdGggKz0gMjsKIAotICAvKiBSZXBvcnQgbG9vay1haGVhZCB0b2tlbnMgYW5kIHNoaWZ0cy4gICovCisgIC8qIFJlcG9ydCBsb29rYWhlYWQgdG9rZW5zIGFuZCBzaGlmdHMuICAqLwogICBmb3IgKGkgPSAwOyBpIDwgdHJhbnMtPm51bTsgaSsrKQogICAgIGlmICghVFJBTlNJVElPTl9JU19ESVNBQkxFRCAodHJhbnMsIGkpCiAJJiYgVFJBTlNJVElPTl9JU19TSElGVCAodHJhbnMsIGkpID09IGRpc3BsYXlfdHJhbnNpdGlvbnNfcCkKQEAgLTE4MCw3ICsxNzksNyBAQAogICBzaXplX3Qgd2lkdGggPSAwOwogICBpbnQgaTsKIAotICAvKiBDb21wdXRlIHRoZSB3aWR0aCBvZiB0aGUgbG9vay1haGVhZCB0b2tlbiBjb2x1bW4uICAqLworICAvKiBDb21wdXRlIHRoZSB3aWR0aCBvZiB0aGUgbG9va2FoZWFkIHRva2VuIGNvbHVtbi4gICovCiAgIGZvciAoaSA9IDA7IGkgPCBlcnJwLT5udW07ICsraSkKICAgICBpZiAoZXJycC0+c3ltYm9sc1tpXSkKICAgICAgIG1heF9sZW5ndGggKCZ3aWR0aCwgZXJycC0+c3ltYm9sc1tpXS0+dGFnKTsKQEAgLTE5Miw3ICsxOTEsNyBAQAogICBmcHV0YyAoJ1xuJywgb3V0KTsKICAgd2lkdGggKz0gMjsKIAotICAvKiBSZXBvcnQgbG9vay1haGVhZCB0b2tlbnMgYW5kIGVycm9ycy4gICovCisgIC8qIFJlcG9ydCBsb29rYWhlYWQgdG9rZW5zIGFuZCBlcnJvcnMuICAqLwogICBmb3IgKGkgPSAwOyBpIDwgZXJycC0+bnVtOyArK2kpCiAgICAgaWYgKGVycnAtPnN5bWJvbHNbaV0pCiAgICAgICB7CkBAIC0yMDYsODUgKzIwNSwyMCBAQAogfQogCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUmV0dXJuIHRoZSBkZWZhdWx0IHJ1bGUgb2YgUyBpZiBpdCBoYXMgb25lLCBOVUxMIG90aGVyd2lzZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIHJ1bGUgKgotc3RhdGVfZGVmYXVsdF9ydWxlIChzdGF0ZSAqcykKLXsKLSAgcmVkdWN0aW9ucyAqcmVkcyA9IHMtPnJlZHVjdGlvbnM7Ci0gIHJ1bGUgKmRlZmF1bHRfcnVsZSA9IE5VTEw7Ci0gIGludCBjbWF4ID0gMDsKLSAgaW50IGk7Ci0KLSAgLyogTm8gbmVlZCBmb3IgYSBsb29rLWFoZWFkLiAgKi8KLSAgaWYgKHMtPmNvbnNpc3RlbnQpCi0gICAgcmV0dXJuIHJlZHMtPnJ1bGVzWzBdOwotCi0gIC8qIDEuIEVhY2ggcmVkdWN0aW9uIGlzIHBvc3NpYmx5IG1hc2tlZCBieSB0aGUgbG9vay1haGVhZCB0b2tlbnMgb24gd2hpY2gKLSAgICAgd2Ugc2hpZnQgKFMvUiBjb25mbGljdHMpLi4uICAqLwotICBiaXRzZXRfemVybyAoc2hpZnRfc2V0KTsKLSAgewotICAgIHRyYW5zaXRpb25zICp0cmFucyA9IHMtPnRyYW5zaXRpb25zOwotICAgIEZPUl9FQUNIX1NISUZUICh0cmFucywgaSkKLSAgICAgIHsKLQkvKiBJZiB0aGlzIHN0YXRlIGhhcyBhIHNoaWZ0IGZvciB0aGUgZXJyb3IgdG9rZW4sIGRvbid0IHVzZSBhCi0JICAgICBkZWZhdWx0IHJ1bGUuICAqLwotCWlmIChUUkFOU0lUSU9OX0lTX0VSUk9SICh0cmFucywgaSkpCi0JICByZXR1cm4gTlVMTDsKLQliaXRzZXRfc2V0IChzaGlmdF9zZXQsIFRSQU5TSVRJT05fU1lNQk9MICh0cmFucywgaSkpOwotICAgICAgfQotICB9Ci0KLSAgLyogMi4gRWFjaCByZWR1Y3Rpb24gaXMgcG9zc2libHkgbWFza2VkIGJ5IHRoZSBsb29rLWFoZWFkIHRva2VucyBvbiB3aGljaAotICAgICB3ZSByYWlzZSBhbiBlcnJvciAoZHVlIHRvICVub25hc3NvYykuICAqLwotICB7Ci0gICAgZXJycyAqZXJycCA9IHMtPmVycnM7Ci0gICAgZm9yIChpID0gMDsgaSA8IGVycnAtPm51bTsgaSsrKQotICAgICAgaWYgKGVycnAtPnN5bWJvbHNbaV0pCi0JYml0c2V0X3NldCAoc2hpZnRfc2V0LCBlcnJwLT5zeW1ib2xzW2ldLT5udW1iZXIpOwotICB9Ci0KLSAgZm9yIChpID0gMDsgaSA8IHJlZHMtPm51bTsgKytpKQotICAgIHsKLSAgICAgIGludCBjb3VudCA9IDA7Ci0KLSAgICAgIC8qIEhvdyBtYW55IG5vbi1tYXNrZWQgbG9vay1haGVhZCB0b2tlbnMgYXJlIHRoZXJlIGZvciB0aGlzCi0JIHJlZHVjdGlvbj8gICovCi0gICAgICBiaXRzZXRfYW5kbiAobG9va19haGVhZF9zZXQsIHJlZHMtPmxvb2tfYWhlYWRfdG9rZW5zW2ldLCBzaGlmdF9zZXQpOwotICAgICAgY291bnQgPSBiaXRzZXRfY291bnQgKGxvb2tfYWhlYWRfc2V0KTsKLQotICAgICAgaWYgKGNvdW50ID4gY21heCkKLQl7Ci0JICBjbWF4ID0gY291bnQ7Ci0JICBkZWZhdWx0X3J1bGUgPSByZWRzLT5ydWxlc1tpXTsKLQl9Ci0KLSAgICAgIC8qIDMuIEFuZCBmaW5hbGx5LCBlYWNoIHJlZHVjdGlvbiBpcyBwb3NzaWJseSBtYXNrZWQgYnkgcHJldmlvdXMKLQkgcmVkdWN0aW9ucyAoaW4gUi9SIGNvbmZsaWN0cywgd2Uga2VlcCB0aGUgZmlyc3QgcmVkdWN0aW9ucykuCi0JICovCi0gICAgICBiaXRzZXRfb3IgKHNoaWZ0X3NldCwgc2hpZnRfc2V0LCByZWRzLT5sb29rX2FoZWFkX3Rva2Vuc1tpXSk7Ci0gICAgfQotCi0gIHJldHVybiBkZWZhdWx0X3J1bGU7Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUmVwb3J0IGEgcmVkdWN0aW9uIG9mIFJVTEUgb24gTE9PS19BSEVBRF9UT0tFTiAod2hpY2ggY2FuIGJlIGBkZWZhdWx0JykuICB8Ci18IElmIG5vdCBFTkFCTEVELCB0aGUgcnVsZSBpcyBtYXNrZWQgYnkgYSBzaGlmdCBvciBhIHJlZHVjZSAoUy9SIGFuZCAgICAgICAgfAotfCBSL1IgY29uZmxpY3RzKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFJlcG9ydCBhIHJlZHVjdGlvbiBvZiBSVUxFIG9uIExPT0tBSEVBRF9UT0tFTiAod2hpY2ggY2FuIGJlIGBkZWZhdWx0JykuICB8Cit8IElmIG5vdCBFTkFCTEVELCB0aGUgcnVsZSBpcyBtYXNrZWQgYnkgYSBzaGlmdCBvciBhIHJlZHVjZSAoUy9SIGFuZCAgICAgICB8Cit8IFIvUiBjb25mbGljdHMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyB2b2lkCiBwcmludF9yZWR1Y3Rpb24gKEZJTEUgKm91dCwgc2l6ZV90IHdpZHRoLAotCQkgY29uc3QgY2hhciAqbG9va19haGVhZF90b2tlbiwKKwkJIGNvbnN0IGNoYXIgKmxvb2thaGVhZF90b2tlbiwKIAkJIHJ1bGUgKnIsIGJvb2wgZW5hYmxlZCkKIHsKICAgaW50IGo7Ci0gIGZwcmludGYgKG91dCwgIiAgICAlcyIsIGxvb2tfYWhlYWRfdG9rZW4pOwotICBmb3IgKGogPSB3aWR0aCAtIHN0cmxlbiAobG9va19haGVhZF90b2tlbik7IGogPiAwOyAtLWopCisgIGZwcmludGYgKG91dCwgIiAgICAlcyIsIGxvb2thaGVhZF90b2tlbik7CisgIGZvciAoaiA9IHdpZHRoIC0gc3RybGVuIChsb29rYWhlYWRfdG9rZW4pOyBqID4gMDsgLS1qKQogICAgIGZwdXRjICgnICcsIG91dCk7CiAgIGlmICghZW5hYmxlZCkKICAgICBmcHV0YyAoJ1snLCBvdXQpOwpAQCAtMzA3LDM0ICsyNDEsMzkgQEAKIHsKICAgdHJhbnNpdGlvbnMgKnRyYW5zID0gcy0+dHJhbnNpdGlvbnM7CiAgIHJlZHVjdGlvbnMgKnJlZHMgPSBzLT5yZWR1Y3Rpb25zOwotICBydWxlICpkZWZhdWx0X3J1bGUgPSBOVUxMOworICBydWxlICpkZWZhdWx0X3JlZHVjdGlvbiA9IE5VTEw7CiAgIHNpemVfdCB3aWR0aCA9IDA7CiAgIGludCBpLCBqOworICBib29sIGRlZmF1bHRfcmVkdWN0aW9uX29ubHkgPSB0cnVlOwogCiAgIGlmIChyZWRzLT5udW0gPT0gMCkKICAgICByZXR1cm47CiAKLSAgZGVmYXVsdF9ydWxlID0gc3RhdGVfZGVmYXVsdF9ydWxlIChzKTsKKyAgaWYgKHl5ZGVmYWN0W3MtPm51bWJlcl0gIT0gMCkKKyAgICBkZWZhdWx0X3JlZHVjdGlvbiA9ICZydWxlc1t5eWRlZmFjdFtzLT5udW1iZXJdIC0gMV07CiAKLSAgYml0c2V0X3plcm8gKHNoaWZ0X3NldCk7CisgIGJpdHNldF96ZXJvIChub19yZWR1Y2Vfc2V0KTsKICAgRk9SX0VBQ0hfU0hJRlQgKHRyYW5zLCBpKQotICAgIGJpdHNldF9zZXQgKHNoaWZ0X3NldCwgVFJBTlNJVElPTl9TWU1CT0wgKHRyYW5zLCBpKSk7CisgICAgYml0c2V0X3NldCAobm9fcmVkdWNlX3NldCwgVFJBTlNJVElPTl9TWU1CT0wgKHRyYW5zLCBpKSk7CisgIGZvciAoaSA9IDA7IGkgPCBzLT5lcnJzLT5udW07ICsraSkKKyAgICBpZiAocy0+ZXJycy0+c3ltYm9sc1tpXSkKKyAgICAgIGJpdHNldF9zZXQgKG5vX3JlZHVjZV9zZXQsIHMtPmVycnMtPnN5bWJvbHNbaV0tPm51bWJlcik7CiAKLSAgLyogQ29tcHV0ZSB0aGUgd2lkdGggb2YgdGhlIGxvb2stYWhlYWQgdG9rZW4gY29sdW1uLiAgKi8KLSAgaWYgKGRlZmF1bHRfcnVsZSkKKyAgLyogQ29tcHV0ZSB0aGUgd2lkdGggb2YgdGhlIGxvb2thaGVhZCB0b2tlbiBjb2x1bW4uICAqLworICBpZiAoZGVmYXVsdF9yZWR1Y3Rpb24pCiAgICAgd2lkdGggPSBzdHJsZW4gKF8oIiRkZWZhdWx0IikpOwogCi0gIGlmIChyZWRzLT5sb29rX2FoZWFkX3Rva2VucykKKyAgaWYgKHJlZHMtPmxvb2thaGVhZF90b2tlbnMpCiAgICAgZm9yIChpID0gMDsgaSA8IG50b2tlbnM7IGkrKykKICAgICAgIHsKLQlib29sIGNvdW50ID0gYml0c2V0X3Rlc3QgKHNoaWZ0X3NldCwgaSk7CisJYm9vbCBjb3VudCA9IGJpdHNldF90ZXN0IChub19yZWR1Y2Vfc2V0LCBpKTsKIAogCWZvciAoaiA9IDA7IGogPCByZWRzLT5udW07ICsraikKLQkgIGlmIChiaXRzZXRfdGVzdCAocmVkcy0+bG9va19haGVhZF90b2tlbnNbal0sIGkpKQorCSAgaWYgKGJpdHNldF90ZXN0IChyZWRzLT5sb29rYWhlYWRfdG9rZW5zW2pdLCBpKSkKIAkgICAgewogCSAgICAgIGlmICghIGNvdW50KQogCQl7Ci0JCSAgaWYgKHJlZHMtPnJ1bGVzW2pdICE9IGRlZmF1bHRfcnVsZSkKKwkJICBpZiAocmVkcy0+cnVsZXNbal0gIT0gZGVmYXVsdF9yZWR1Y3Rpb24pCiAJCSAgICBtYXhfbGVuZ3RoICgmd2lkdGgsIHN5bWJvbHNbaV0tPnRhZyk7CiAJCSAgY291bnQgPSB0cnVlOwogCQl9CkBAIC0zNTIsMzIgKzI5MSwzOCBAQAogICBmcHV0YyAoJ1xuJywgb3V0KTsKICAgd2lkdGggKz0gMjsKIAotICAvKiBSZXBvcnQgbG9vay1haGVhZCB0b2tlbnMgKG9yICRkZWZhdWx0KSBhbmQgcmVkdWN0aW9ucy4gICovCi0gIGlmIChyZWRzLT5sb29rX2FoZWFkX3Rva2VucykKKyAgLyogUmVwb3J0IGxvb2thaGVhZCB0b2tlbnMgKG9yICRkZWZhdWx0KSBhbmQgcmVkdWN0aW9ucy4gICovCisgIGlmIChyZWRzLT5sb29rYWhlYWRfdG9rZW5zKQogICAgIGZvciAoaSA9IDA7IGkgPCBudG9rZW5zOyBpKyspCiAgICAgICB7CiAJYm9vbCBkZWZhdWx0ZWQgPSBmYWxzZTsKLQlib29sIGNvdW50ID0gYml0c2V0X3Rlc3QgKHNoaWZ0X3NldCwgaSk7CisJYm9vbCBjb3VudCA9IGJpdHNldF90ZXN0IChub19yZWR1Y2Vfc2V0LCBpKTsKKyAgICAgICAgaWYgKGNvdW50KQorICAgICAgICAgIGRlZmF1bHRfcmVkdWN0aW9uX29ubHkgPSBmYWxzZTsKIAogCWZvciAoaiA9IDA7IGogPCByZWRzLT5udW07ICsraikKLQkgIGlmIChiaXRzZXRfdGVzdCAocmVkcy0+bG9va19haGVhZF90b2tlbnNbal0sIGkpKQorCSAgaWYgKGJpdHNldF90ZXN0IChyZWRzLT5sb29rYWhlYWRfdG9rZW5zW2pdLCBpKSkKIAkgICAgewogCSAgICAgIGlmICghIGNvdW50KQogCQl7Ci0JCSAgaWYgKHJlZHMtPnJ1bGVzW2pdICE9IGRlZmF1bHRfcnVsZSkKLQkJICAgIHByaW50X3JlZHVjdGlvbiAob3V0LCB3aWR0aCwKLQkJCQkgICAgIHN5bWJvbHNbaV0tPnRhZywKLQkJCQkgICAgIHJlZHMtPnJ1bGVzW2pdLCB0cnVlKTsKKwkJICBpZiAocmVkcy0+cnVsZXNbal0gIT0gZGVmYXVsdF9yZWR1Y3Rpb24pCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3JlZHVjdGlvbl9vbmx5ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgcHJpbnRfcmVkdWN0aW9uIChvdXQsIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sc1tpXS0+dGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkcy0+cnVsZXNbal0sIHRydWUpOworICAgICAgICAgICAgICAgICAgICB9CiAJCSAgZWxzZQogCQkgICAgZGVmYXVsdGVkID0gdHJ1ZTsKIAkJICBjb3VudCA9IHRydWU7CiAJCX0KIAkgICAgICBlbHNlCiAJCXsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHRfcmVkdWN0aW9uX29ubHkgPSBmYWxzZTsKIAkJICBpZiAoZGVmYXVsdGVkKQogCQkgICAgcHJpbnRfcmVkdWN0aW9uIChvdXQsIHdpZHRoLAogCQkJCSAgICAgc3ltYm9sc1tpXS0+dGFnLAotCQkJCSAgICAgZGVmYXVsdF9ydWxlLCB0cnVlKTsKKwkJCQkgICAgIGRlZmF1bHRfcmVkdWN0aW9uLCB0cnVlKTsKIAkJICBkZWZhdWx0ZWQgPSBmYWxzZTsKIAkJICBwcmludF9yZWR1Y3Rpb24gKG91dCwgd2lkdGgsCiAJCQkJICAgc3ltYm9sc1tpXS0+dGFnLApAQCAtMzg2LDkgKzMzMSwxNyBAQAogCSAgICB9CiAgICAgICB9CiAKLSAgaWYgKGRlZmF1bHRfcnVsZSkKLSAgICBwcmludF9yZWR1Y3Rpb24gKG91dCwgd2lkdGgsCi0JCSAgICAgXygiJGRlZmF1bHQiKSwgZGVmYXVsdF9ydWxlLCB0cnVlKTsKKyAgaWYgKGRlZmF1bHRfcmVkdWN0aW9uKQorICAgIHsKKyAgICAgIGNoYXIgKmRlZmF1bHRfcmVkdWN0aW9ucyA9CisgICAgICAgIG11c2NsZV9wZXJjZW50X2RlZmluZV9nZXQgKCJsci5kZWZhdWx0LXJlZHVjdGlvbnMiKTsKKyAgICAgIHByaW50X3JlZHVjdGlvbiAob3V0LCB3aWR0aCwgXygiJGRlZmF1bHQiKSwgZGVmYXVsdF9yZWR1Y3Rpb24sIHRydWUpOworICAgICAgYXZlciAoMCA9PSBzdHJjbXAgKGRlZmF1bHRfcmVkdWN0aW9ucywgIm1vc3QiKQorICAgICAgICAgICAgfHwgKDAgPT0gc3RyY21wIChkZWZhdWx0X3JlZHVjdGlvbnMsICJjb25zaXN0ZW50IikKKyAgICAgICAgICAgICAgICAmJiBkZWZhdWx0X3JlZHVjdGlvbl9vbmx5KQorICAgICAgICAgICAgfHwgKHJlZHMtPm51bSA9PSAxICYmIHJlZHMtPnJ1bGVzWzBdLT5udW1iZXIgPT0gMCkpOworICAgICAgZnJlZSAoZGVmYXVsdF9yZWR1Y3Rpb25zKTsKKyAgICB9CiB9CiAKIApAQCAtNDE3LDcgKzM3MCw3IEBACiBwcmludF9zdGF0ZSAoRklMRSAqb3V0LCBzdGF0ZSAqcykKIHsKICAgZnB1dHMgKCJcblxuIiwgb3V0KTsKLSAgZnByaW50ZiAob3V0LCBfKCJzdGF0ZSAlZCIpLCBzLT5udW1iZXIpOworICBmcHJpbnRmIChvdXQsIF8oIlN0YXRlICVkIiksIHMtPm51bWJlcik7CiAgIGZwdXRjICgnXG4nLCBvdXQpOwogICBwcmludF9jb3JlIChvdXQsIHMpOwogICBwcmludF9hY3Rpb25zIChvdXQsIHMpOwpAQCAtNDY0LDcgKzQxNyw3IEBACiAJYnVmZmVyWzBdID0gMDsKIAljb2x1bW4gPSBzdHJsZW4gKHRhZyk7CiAJZnB1dHMgKHRhZywgb3V0KTsKLQlFTkRfVEVTVCAoNTApOworCUVORF9URVNUICg2NSk7CiAJc3ByaW50ZiAoYnVmZmVyLCAiICglZCkiLCBpKTsKIAogCWZvciAociA9IDA7IHIgPCBucnVsZXM7IHIrKykKQEAgLTUwOCwxNCArNDYxLDE2IEBACiAKICAgICAgIGlmIChsZWZ0X2NvdW50ID4gMCkKIAl7Ci0JICBFTkRfVEVTVCAoNTApOworCSAgRU5EX1RFU1QgKDY1KTsKIAkgIHNwcmludGYgKGJ1ZmZlciArIHN0cmxlbiAoYnVmZmVyKSwgXygiIG9uIGxlZnQ6IikpOwogCiAJICBmb3IgKHIgPSAwOyByIDwgbnJ1bGVzOyByKyspCiAJICAgIHsKLQkgICAgICBFTkRfVEVTVCAoNjUpOwogCSAgICAgIGlmIChydWxlc1tyXS5saHMtPm51bWJlciA9PSBpKQotCQlzcHJpbnRmIChidWZmZXIgKyBzdHJsZW4gKGJ1ZmZlciksICIgJWQiLCByKTsKKwkJeworCQkgIEVORF9URVNUICg2NSk7CisJCSAgc3ByaW50ZiAoYnVmZmVyICsgc3RybGVuIChidWZmZXIpLCAiICVkIiwgcik7CisJCX0KIAkgICAgfQogCX0KIApAQCAtNTIzLDcgKzQ3OCw3IEBACiAJewogCSAgaWYgKGxlZnRfY291bnQgPiAwKQogCSAgICBzcHJpbnRmIChidWZmZXIgKyBzdHJsZW4gKGJ1ZmZlciksICIsIik7Ci0JICBFTkRfVEVTVCAoNTApOworCSAgRU5EX1RFU1QgKDY1KTsKIAkgIHNwcmludGYgKGJ1ZmZlciArIHN0cmxlbiAoYnVmZmVyKSwgXygiIG9uIHJpZ2h0OiIpKTsKIAkgIGZvciAociA9IDA7IHIgPCBucnVsZXM7IHIrKykKIAkgICAgewpAQCAtNTUyLDcgKzUwNyw4IEBACiAKICAgcmVkdWNlX291dHB1dCAob3V0KTsKICAgZ3JhbW1hcl9ydWxlc19wYXJ0aWFsX3ByaW50IChvdXQsCi0JCQkgICAgICAgXygiUnVsZXMgbmV2ZXIgcmVkdWNlZCIpLCBydWxlX25ldmVyX3JlZHVjZWRfcCk7CisJCQkgICAgICAgXygiUnVsZXMgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZV91c2VsZXNzX2luX3BhcnNlcl9wKTsKICAgY29uZmxpY3RzX291dHB1dCAob3V0KTsKIAogICBwcmludF9ncmFtbWFyIChvdXQpOwpAQCAtNTYyLDEyICs1MTgsMTAgQEAKICAgaWYgKHJlcG9ydF9mbGFnICYgcmVwb3J0X2l0ZW1zZXRzKQogICAgIG5ld19jbG9zdXJlIChucml0ZW1zKTsKICAgLyogU3RvcmFnZSBmb3IgcHJpbnRfcmVkdWN0aW9ucy4gICovCi0gIHNoaWZ0X3NldCA9ICBiaXRzZXRfY3JlYXRlIChudG9rZW5zLCBCSVRTRVRfRklYRUQpOwotICBsb29rX2FoZWFkX3NldCA9IGJpdHNldF9jcmVhdGUgKG50b2tlbnMsIEJJVFNFVF9GSVhFRCk7CisgIG5vX3JlZHVjZV9zZXQgPSAgYml0c2V0X2NyZWF0ZSAobnRva2VucywgQklUU0VUX0ZJWEVEKTsKICAgZm9yIChpID0gMDsgaSA8IG5zdGF0ZXM7IGkrKykKICAgICBwcmludF9zdGF0ZSAob3V0LCBzdGF0ZXNbaV0pOwotICBiaXRzZXRfZnJlZSAoc2hpZnRfc2V0KTsKLSAgYml0c2V0X2ZyZWUgKGxvb2tfYWhlYWRfc2V0KTsKKyAgYml0c2V0X2ZyZWUgKG5vX3JlZHVjZV9zZXQpOwogICBpZiAocmVwb3J0X2ZsYWcgJiByZXBvcnRfaXRlbXNldHMpCiAgICAgZnJlZV9jbG9zdXJlICgpOwogCmRpZmYgLS1naXQgYS9zcmMvcHJpbnQuaCBiL3NyYy9wcmludC5oCmluZGV4IDFkYWE1NzcuLmY1MjhhYWYgMTAwNjQ0Ci0tLSBhL3NyYy9wcmludC5oCisrKyBiL3NyYy9wcmludC5oCkBAIC0xLDIyICsxLDIxIEBACiAvKiBQcmludCBpbmZvcm1hdGlvbiBvbiBnZW5lcmF0ZWQgcGFyc2VyLCBmb3IgYmlzb24sCi0gICBDb3B5cmlnaHQgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgogCi0gICBCaXNvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLSAgIEJpc29uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCBCaXNvbjsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAjaWZuZGVmIFBSSU5UX0hfCiAjIGRlZmluZSBQUklOVF9IXwpkaWZmIC0tZ2l0IGEvc3JjL3ByaW50X2dyYXBoLmMgYi9zcmMvcHJpbnRfZ3JhcGguYwppbmRleCA5NTgwZjNmLi5mNDc0MmIxIDEwMDY0NAotLS0gYS9zcmMvcHJpbnRfZ3JhcGguYworKysgYi9zcmMvcHJpbnRfZ3JhcGguYwpAQCAtMSwyOSArMSwyNSBAQAotLyogT3V0cHV0IGEgVkNHIGRlc2NyaXB0aW9uIG9uIGdlbmVyYXRlZCBwYXJzZXIsIGZvciBCaXNvbiwKKy8qIE91dHB1dCBhIGdyYXBoIG9mIHRoZSBnZW5lcmF0ZWQgcGFyc2VyLCBmb3IgQmlzb24uCiAKLSAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgogCi0gICBCaXNvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLSAgIEJpc29uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCBCaXNvbjsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjaW5jbHVkZSAic3lzdGVtLmgiCiAKLSNpbmNsdWRlIDxxdW90ZWFyZy5oPgotCiAjaW5jbHVkZSAiTFIwLmgiCiAjaW5jbHVkZSAiY2xvc3VyZS5oIgogI2luY2x1ZGUgImNvbXBsYWluLmgiCkBAIC0zMSwyNiArMjcsNDQgQEAKICNpbmNsdWRlICJmaWxlcy5oIgogI2luY2x1ZGUgImdldGFyZ3MuaCIKICNpbmNsdWRlICJncmFtLmgiCisjaW5jbHVkZSAiZ3JhcGh2aXouaCIKICNpbmNsdWRlICJsYWxyLmgiCiAjaW5jbHVkZSAicHJpbnRfZ3JhcGguaCIKICNpbmNsdWRlICJyZWFkZXIuaCIKICNpbmNsdWRlICJzdGF0ZS5oIgogI2luY2x1ZGUgInN5bXRhYi5oIgotI2luY2x1ZGUgInZjZy5oIgotCi1zdGF0aWMgZ3JhcGggc3RhdGljX2dyYXBoOwotc3RhdGljIEZJTEUgKmZncmFwaCA9IE5VTEw7CiAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCBDb25zdHJ1Y3QgdGhlIG5vZGUgbGFiZWxzLiAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisvKiBQcmludCB0aGUgbGhzIG9mIGEgcnVsZSBpbiBzdWNoIGEgbWFubmVyIHRoYXQgdGhlcmUgaXMgbm8gdmVydGljYWwKKyAgIHJlcGV0aXRpb24sIGxpa2UgaW4gKi5vdXRwdXQgZmlsZXMuICovCisKK3N0YXRpYyB2b2lkCitwcmludF9saHMgKHN0cnVjdCBvYnN0YWNrICpvb3V0LCBydWxlICpwcmV2aW91c19ydWxlLCBydWxlICpyKQoreworICBpZiAocHJldmlvdXNfcnVsZSAmJiBTVFJFUSAocHJldmlvdXNfcnVsZS0+bGhzLT50YWcsIHItPmxocy0+dGFnKSkKKyAgICB7CisgICAgICBpbnQgaTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBzdHJsZW4gKHItPmxocy0+dGFnKTsgKytpKQorICAgICAgICBvYnN0YWNrXzFncm93IChvb3V0LCAnICcpOworICAgICAgb2JzdGFja18xZ3JvdyAob291dCwgJ3wnKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBvYnN0YWNrX3Nncm93IChvb3V0LCBlc2NhcGUgKHItPmxocy0+dGFnKSk7CisgICAgICBvYnN0YWNrXzFncm93IChvb3V0LCAnOicpOworICAgIH0KK30KKwogc3RhdGljIHZvaWQKIHByaW50X2NvcmUgKHN0cnVjdCBvYnN0YWNrICpvb3V0LCBzdGF0ZSAqcykKIHsKLSAgc2l6ZV90IGk7CiAgIGl0ZW1fbnVtYmVyICpzaXRlbXMgPSBzLT5pdGVtczsKKyAgcnVsZSAqcHJldmlvdXNfcnVsZSA9IE5VTEw7CisgIHNpemVfdCBpOwogICBzaXplX3Qgc25yaXRlbXMgPSBzLT5uaXRlbXM7CiAKICAgLyogT3V0cHV0IGFsbCB0aGUgaXRlbXMgb2YgYSBzdGF0ZSwgbm90IG9ubHkgaXRzIGtlcm5lbC4gICovCkBAIC01OCwxMCArNzIsMTEgQEAKICAgICB7CiAgICAgICBjbG9zdXJlIChzaXRlbXMsIHNucml0ZW1zKTsKICAgICAgIHNpdGVtcyA9IGl0ZW1zZXQ7Ci0gICAgICBzbnJpdGVtcyA9IG5yaXRlbXNldDsKKyAgICAgIHNucml0ZW1zID0gbml0ZW1zZXQ7CiAgICAgfQogCi0gIG9ic3RhY2tfZmdyb3cxIChvb3V0LCAic3RhdGUgJTJkXG4iLCBzLT5udW1iZXIpOworICBvYnN0YWNrX3ByaW50ZiAob291dCwgXygiU3RhdGUgJWQiKSwgcy0+bnVtYmVyKTsKKyAgb2JzdGFja19zZ3JvdyAob291dCwgIlxcblxcbCIpOwogICBmb3IgKGkgPSAwOyBpIDwgc25yaXRlbXM7IGkrKykKICAgICB7CiAgICAgICBpdGVtX251bWJlciAqc3A7CkBAIC03MSw0NSArODYsNDcgQEAKICAgICAgIHNwMSA9IHNwID0gcml0ZW0gKyBzaXRlbXNbaV07CiAKICAgICAgIHdoaWxlICgqc3AgPj0gMCkKLQlzcCsrOworICAgICAgICBzcCsrOwogCiAgICAgICByID0gaXRlbV9udW1iZXJfYXNfcnVsZV9udW1iZXIgKCpzcCk7CiAKLSAgICAgIGlmIChpKQotCW9ic3RhY2tfMWdyb3cgKG9vdXQsICdcbicpOwotICAgICAgb2JzdGFja19mZ3JvdzEgKG9vdXQsICIgJXMgLT4gIiwKLQkJICAgICAgcnVsZXNbcl0ubGhzLT50YWcpOworICAgICAgb2JzdGFja19wcmludGYgKG9vdXQsICIlM2QgIiwgcik7CisgICAgICBwcmludF9saHMgKG9vdXQsIHByZXZpb3VzX3J1bGUsICZydWxlc1tyXSk7CisgICAgICBwcmV2aW91c19ydWxlID0gJnJ1bGVzW3JdOwogCiAgICAgICBmb3IgKHNwID0gcnVsZXNbcl0ucmhzOyBzcCA8IHNwMTsgc3ArKykKLQlvYnN0YWNrX2Zncm93MSAob291dCwgIiVzICIsIHN5bWJvbHNbKnNwXS0+dGFnKTsKKyAgICAgICAgb2JzdGFja19wcmludGYgKG9vdXQsICIgJXMiLCBlc2NhcGUgKHN5bWJvbHNbKnNwXS0+dGFnKSk7CiAKLSAgICAgIG9ic3RhY2tfMWdyb3cgKG9vdXQsICcuJyk7CisgICAgICBvYnN0YWNrX3Nncm93IChvb3V0LCAiIC4iKTsKIAogICAgICAgZm9yICgvKiBOb3RoaW5nICovOyAqc3AgPj0gMDsgKytzcCkKLQlvYnN0YWNrX2Zncm93MSAob291dCwgIiAlcyIsIHN5bWJvbHNbKnNwXS0+dGFnKTsKKyAgICAgICAgb2JzdGFja19wcmludGYgKG9vdXQsICIgJXMiLCBlc2NhcGUgKHN5bWJvbHNbKnNwXS0+dGFnKSk7CiAKLSAgICAgIC8qIEV4cGVyaW1lbnRhbCBmZWF0dXJlOiBkaXNwbGF5IHRoZSBsb29rLWFoZWFkIHRva2Vucy4gKi8KLSAgICAgIGlmIChyZXBvcnRfZmxhZyAmIHJlcG9ydF9sb29rX2FoZWFkX3Rva2VucykKLQl7Ci0JICAvKiBGaW5kIHRoZSByZWR1Y3Rpb24gd2UgYXJlIGhhbmRsaW5nLiAgKi8KLQkgIHJlZHVjdGlvbnMgKnJlZHMgPSBzLT5yZWR1Y3Rpb25zOwotCSAgaW50IHJlZG5vID0gc3RhdGVfcmVkdWN0aW9uX2ZpbmQgKHMsICZydWxlc1tyXSk7CisgICAgICAvKiBFeHBlcmltZW50YWwgZmVhdHVyZTogZGlzcGxheSB0aGUgbG9va2FoZWFkIHRva2Vucy4gKi8KKyAgICAgIGlmIChyZXBvcnRfZmxhZyAmIHJlcG9ydF9sb29rYWhlYWRfdG9rZW5zCisgICAgICAgICAgJiYgaXRlbV9udW1iZXJfaXNfcnVsZV9udW1iZXIgKCpzcDEpKQorICAgICAgICB7CisgICAgICAgICAgLyogRmluZCB0aGUgcmVkdWN0aW9uIHdlIGFyZSBoYW5kbGluZy4gICovCisgICAgICAgICAgcmVkdWN0aW9ucyAqcmVkcyA9IHMtPnJlZHVjdGlvbnM7CisgICAgICAgICAgaW50IHJlZG5vID0gc3RhdGVfcmVkdWN0aW9uX2ZpbmQgKHMsICZydWxlc1tyXSk7CiAKLQkgIC8qIFByaW50IHRoZW0gaWYgdGhlcmUgYXJlLiAgKi8KLQkgIGlmIChyZWRzLT5sb29rX2FoZWFkX3Rva2VucyAmJiByZWRubyAhPSAtMSkKLQkgICAgewotCSAgICAgIGJpdHNldF9pdGVyYXRvciBiaXRlcjsKLQkgICAgICBpbnQgazsKLQkgICAgICBjaGFyIGNvbnN0ICpzZXAgPSAiIjsKLQkgICAgICBvYnN0YWNrX3Nncm93IChvb3V0LCAiWyIpOwotCSAgICAgIEJJVFNFVF9GT1JfRUFDSCAoYml0ZXIsIHJlZHMtPmxvb2tfYWhlYWRfdG9rZW5zW3JlZG5vXSwgaywgMCkKLQkJewotCQkgIG9ic3RhY2tfZmdyb3cyIChvb3V0LCAiJXMlcyIsIHNlcCwgc3ltYm9sc1trXS0+dGFnKTsKLQkJICBzZXAgPSAiLCAiOwotCQl9Ci0JICAgICAgb2JzdGFja19zZ3JvdyAob291dCwgIl0iKTsKLQkgICAgfQotCX0KKyAgICAgICAgICAvKiBQcmludCB0aGVtIGlmIHRoZXJlIGFyZS4gICovCisgICAgICAgICAgaWYgKHJlZHMtPmxvb2thaGVhZF90b2tlbnMgJiYgcmVkbm8gIT0gLTEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGJpdHNldF9pdGVyYXRvciBiaXRlcjsKKyAgICAgICAgICAgICAgaW50IGs7CisgICAgICAgICAgICAgIGNoYXIgY29uc3QgKnNlcCA9ICIiOworICAgICAgICAgICAgICBvYnN0YWNrX3Nncm93IChvb3V0LCAiICBbIik7CisgICAgICAgICAgICAgIEJJVFNFVF9GT1JfRUFDSCAoYml0ZXIsIHJlZHMtPmxvb2thaGVhZF90b2tlbnNbcmVkbm9dLCBrLCAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIG9ic3RhY2tfc2dyb3cgKG9vdXQsIHNlcCk7CisgICAgICAgICAgICAgICAgICBvYnN0YWNrX3Nncm93IChvb3V0LCBlc2NhcGUgKHN5bWJvbHNba10tPnRhZykpOworICAgICAgICAgICAgICAgICAgc2VwID0gIiwgIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIG9ic3RhY2tfMWdyb3cgKG9vdXQsICddJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIG9ic3RhY2tfc2dyb3cgKG9vdXQsICJcXGwiKTsKICAgICB9CiB9CiAKQEAgLTEyMCwxNyArMTM3LDEyIEBACiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIHZvaWQKLXByaW50X2FjdGlvbnMgKHN0YXRlICpzLCBjb25zdCBjaGFyICpub2RlX25hbWUpCitwcmludF9hY3Rpb25zIChzdGF0ZSBjb25zdCAqcywgRklMRSAqZmdyYXBoKQogeworICB0cmFuc2l0aW9ucyBjb25zdCAqdHJhbnMgPSBzLT50cmFuc2l0aW9uczsKICAgaW50IGk7CiAKLSAgdHJhbnNpdGlvbnMgKnRyYW5zID0gcy0+dHJhbnNpdGlvbnM7Ci0gIHJlZHVjdGlvbnMgKnJlZHMgPSBzLT5yZWR1Y3Rpb25zOwotCi0gIHN0YXRpYyBjaGFyIGJ1ZmZbMTBdOwotICBlZGdlIGU7Ci0KLSAgaWYgKCF0cmFucy0+bnVtICYmICFyZWRzKQorICBpZiAoIXRyYW5zLT5udW0gJiYgIXMtPnJlZHVjdGlvbnMpCiAgICAgcmV0dXJuOwogCiAgIGZvciAoaSA9IDA7IGkgPCB0cmFucy0+bnVtOyBpKyspCkBAIC0xMzksMjQgKzE1MSwyMSBAQAogCXN0YXRlICpzMSA9IHRyYW5zLT5zdGF0ZXNbaV07CiAJc3ltYm9sX251bWJlciBzeW0gPSBzMS0+YWNjZXNzaW5nX3N5bWJvbDsKIAotCW5ld19lZGdlICgmZSk7CisJLyogU2hpZnRzIGFyZSBzb2xpZCwgZ290b3MgYXJlIGRhc2hlZCwgYW5kIGVycm9yIGlzIGRvdHRlZC4gICovCisJY2hhciBjb25zdCAqc3R5bGUgPQorCSAgKFRSQU5TSVRJT05fSVNfRVJST1IgKHRyYW5zLCBpKSA/ICJkb3R0ZWQiCisJICAgOiBUUkFOU0lUSU9OX0lTX1NISUZUICh0cmFucywgaSkgPyAic29saWQiCisJICAgOiAiZGFzaGVkIik7CiAKLQlpZiAocy0+bnVtYmVyID4gczEtPm51bWJlcikKLQkgIGUudHlwZSA9IGJhY2tfZWRnZTsKLQlvcGVuX2VkZ2UgKCZlLCBmZ3JhcGgpOwotCS8qIFRoZSBlZGdlIHNvdXJjZSBpcyB0aGUgY3VycmVudCBub2RlLiAgKi8KLQllLnNvdXJjZW5hbWUgPSBub2RlX25hbWU7Ci0Jc3ByaW50ZiAoYnVmZiwgIiVkIiwgczEtPm51bWJlcik7Ci0JZS50YXJnZXRuYW1lID0gYnVmZjsKLQkvKiBTaGlmdHMgYXJlIGJsdWUsIGdvdG9zIGFyZSBncmVlbiwgYW5kIGVycm9yIGlzIHJlZC4gKi8KLQlpZiAoVFJBTlNJVElPTl9JU19FUlJPUiAodHJhbnMsIGkpKQotCSAgZS5jb2xvciA9IHJlZDsKLQllbHNlCi0JICBlLmNvbG9yID0gVFJBTlNJVElPTl9JU19TSElGVCAodHJhbnMsIGkpID8gYmx1ZSA6IGdyZWVuOwotCWUubGFiZWwgPSBzeW1ib2xzW3N5bV0tPnRhZzsKLQlvdXRwdXRfZWRnZSAoJmUsIGZncmFwaCk7Ci0JY2xvc2VfZWRnZSAoZmdyYXBoKTsKKwlpZiAoVFJBTlNJVElPTl9JU19FUlJPUiAodHJhbnMsIGkpCisJICAgICYmIHN0cmNtcCAoc3ltYm9sc1tzeW1dLT50YWcsICJlcnJvciIpICE9IDApCisJICBhYm9ydCAoKTsKKwlvdXRwdXRfZWRnZSAocy0+bnVtYmVyLCBzMS0+bnVtYmVyLAorCQkgICAgIFRSQU5TSVRJT05fSVNfRVJST1IgKHRyYW5zLCBpKSA/IE5VTEwgOiBzeW1ib2xzW3N5bV0tPnRhZywKKwkJICAgICBzdHlsZSwgZmdyYXBoKTsKICAgICAgIH0KKyAgLyogRGlzcGxheSByZWR1Y3Rpb25zLiAqLworICBvdXRwdXRfcmVkIChzLCBzLT5yZWR1Y3Rpb25zLCBmZ3JhcGgpOwogfQogCiAKQEAgLTE2NiwyOSArMTc1LDE5IEBACiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyB2b2lkCi1wcmludF9zdGF0ZSAoc3RhdGUgKnMpCitwcmludF9zdGF0ZSAoc3RhdGUgKnMsIEZJTEUgKmZncmFwaCkKIHsKLSAgc3RhdGljIGNoYXIgbmFtZVsxMF07CiAgIHN0cnVjdCBvYnN0YWNrIG5vZGVfb2JzdGFjazsKLSAgbm9kZSBuOwogCi0gIC8qIFRoZSBsYWJlbHMgb2YgdGhlIG5vZGVzIGFyZSB0aGVpciB0aGUgaXRlbXMuICAqLworICAvKiBBIG5vZGUncyBsYWJlbCBjb250YWlucyBpdHMgaXRlbXMuICAqLwogICBvYnN0YWNrX2luaXQgKCZub2RlX29ic3RhY2spOwotICBuZXdfbm9kZSAoJm4pOwotICBzcHJpbnRmIChuYW1lLCAiJWQiLCBzLT5udW1iZXIpOwotICBuLnRpdGxlID0gbmFtZTsKICAgcHJpbnRfY29yZSAoJm5vZGVfb2JzdGFjaywgcyk7CiAgIG9ic3RhY2tfMWdyb3cgKCZub2RlX29ic3RhY2ssICdcMCcpOwotICBuLmxhYmVsID0gb2JzdGFja19maW5pc2ggKCZub2RlX29ic3RhY2spOwotCi0gIG9wZW5fbm9kZSAoZmdyYXBoKTsKLSAgb3V0cHV0X25vZGUgKCZuLCBmZ3JhcGgpOwotICBjbG9zZV9ub2RlIChmZ3JhcGgpOworICBvdXRwdXRfbm9kZSAocy0+bnVtYmVyLCBvYnN0YWNrX2ZpbmlzaCAoJm5vZGVfb2JzdGFjayksIGZncmFwaCk7CisgIG9ic3RhY2tfZnJlZSAoJm5vZGVfb2JzdGFjaywgMCk7CiAKICAgLyogT3V0cHV0IHRoZSBlZGdlcy4gICovCi0gIHByaW50X2FjdGlvbnMgKHMsIG5hbWUpOwotCi0gIG9ic3RhY2tfZnJlZSAoJm5vZGVfb2JzdGFjaywgMCk7CisgIHByaW50X2FjdGlvbnMgKHMsIGZncmFwaCk7CiB9CiAMCiAKQEAgLTE5NiwzMiArMTk1LDE1IEBACiBwcmludF9ncmFwaCAodm9pZCkKIHsKICAgc3RhdGVfbnVtYmVyIGk7Ci0KLSAgLyogT3V0cHV0IGZpbGUuICAqLwotICBmZ3JhcGggPSB4Zm9wZW4gKHNwZWNfZ3JhcGhfZmlsZSwgInciKTsKLQotICBuZXdfZ3JhcGggKCZzdGF0aWNfZ3JhcGgpOwotCi0gIHN0YXRpY19ncmFwaC5kaXNwbGF5X2VkZ2VfbGFiZWxzID0geWVzOwotCi0gIHN0YXRpY19ncmFwaC5wb3J0X3NoYXJpbmcgPSBubzsKLSAgc3RhdGljX2dyYXBoLmZpbmV0dW5pbmcgPSB5ZXM7Ci0gIHN0YXRpY19ncmFwaC5wcmlvcml0eV9waGFzZSA9IHllczsKLSAgc3RhdGljX2dyYXBoLnNwbGluZXMgPSB5ZXM7Ci0KLSAgc3RhdGljX2dyYXBoLmNyb3NzaW5nX3dlaWdodCA9IG1lZGlhbjsKLQotICAvKiBPdXRwdXQgZ3JhcGggb3B0aW9ucy4gKi8KLSAgb3Blbl9ncmFwaCAoZmdyYXBoKTsKLSAgb3V0cHV0X2dyYXBoICgmc3RhdGljX2dyYXBoLCBmZ3JhcGgpOworICBGSUxFICpmZ3JhcGggPSB4Zm9wZW4gKHNwZWNfZ3JhcGhfZmlsZSwgInciKTsKKyAgc3RhcnRfZ3JhcGggKGZncmFwaCk7CiAKICAgLyogT3V0cHV0IG5vZGVzIGFuZCBlZGdlcy4gKi8KICAgbmV3X2Nsb3N1cmUgKG5yaXRlbXMpOwogICBmb3IgKGkgPSAwOyBpIDwgbnN0YXRlczsgaSsrKQotICAgIHByaW50X3N0YXRlIChzdGF0ZXNbaV0pOworICAgIHByaW50X3N0YXRlIChzdGF0ZXNbaV0sIGZncmFwaCk7CiAgIGZyZWVfY2xvc3VyZSAoKTsKIAotICAvKiBDbG9zZSBncmFwaC4gKi8KLSAgY2xvc2VfZ3JhcGggKCZzdGF0aWNfZ3JhcGgsIGZncmFwaCk7CisgIGZpbmlzaF9ncmFwaCAoZmdyYXBoKTsKICAgeGZjbG9zZSAoZmdyYXBoKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9wcmludF9ncmFwaC5oIGIvc3JjL3ByaW50X2dyYXBoLmgKaW5kZXggYmVmYzUzMS4uMDJhYThiMyAxMDA2NDQKLS0tIGEvc3JjL3ByaW50X2dyYXBoLmgKKysrIGIvc3JjL3ByaW50X2dyYXBoLmgKQEAgLTEsMjIgKzEsMjEgQEAKLS8qIE91dHB1dCBhIFZDRyBkZXNjcmlwdGlvbiBvbiBnZW5lcmF0ZWQgcGFyc2VyLCBmb3IgYmlzb24sCi0gICBDb3B5cmlnaHQgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8qIE91dHB1dCBhIGdyYXBoIG9mIHRoZSBnZW5lcmF0ZWQgcGFyc2VyLCBmb3IgQmlzb24uCisKKyAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwNiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KIAotICAgQmlzb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCi0gICBCaXNvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggQmlzb247IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogI2lmbmRlZiBQUklOVF9HUkFQSF9IXwogIyBkZWZpbmUgUFJJTlRfR1JBUEhfSF8KZGlmZiAtLWdpdCBhL3NyYy9yZWFkZXIuYyBiL3NyYy9yZWFkZXIuYwppbmRleCBkMDdjZTVjLi43MzVlNzAwIDEwMDY0NAotLS0gYS9zcmMvcmVhZGVyLmMKKysrIGIvc3JjL3JlYWRlci5jCkBAIC0xLDQwICsxLDQxIEBACiAvKiBJbnB1dCBwYXJzZXIgZm9yIEJpc29uCiAKLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4NiwgMTk4OSwgMTk5MiwgMTk5OCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywKLSAgIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODYsIDE5ODksIDE5OTIsIDE5OTgsIDIwMDAtMjAwMywgMjAwNS0yMDA3LAorICAgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KIAotICAgQmlzb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCi0gICBCaXNvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggQmlzb247IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogI2luY2x1ZGUgPGNvbmZpZy5oPgogI2luY2x1ZGUgInN5c3RlbS5oIgogCi0jaW5jbHVkZSA8cXVvdGVhcmcuaD4KKyNpbmNsdWRlIDxxdW90ZS5oPgogCiAjaW5jbHVkZSAiY29tcGxhaW4uaCIKICNpbmNsdWRlICJjb25mbGljdHMuaCIKICNpbmNsdWRlICJmaWxlcy5oIgogI2luY2x1ZGUgImdldGFyZ3MuaCIKICNpbmNsdWRlICJncmFtLmgiCi0jaW5jbHVkZSAibXVzY2xlX3RhYi5oIgorI2luY2x1ZGUgIm11c2NsZS10YWIuaCIKICNpbmNsdWRlICJyZWFkZXIuaCIKICNpbmNsdWRlICJzeW1saXN0LmgiCiAjaW5jbHVkZSAic3ltdGFiLmgiCisjaW5jbHVkZSAic2Nhbi1ncmFtLmgiCisjaW5jbHVkZSAic2Nhbi1jb2RlLmgiCiAKK3N0YXRpYyB2b2lkIHByZXBhcmVfcGVyY2VudF9kZWZpbmVfZnJvbnRfZW5kX3ZhcmlhYmxlcyAodm9pZCk7CiBzdGF0aWMgdm9pZCBjaGVja19hbmRfY29udmVydF9ncmFtbWFyICh2b2lkKTsKIAogc3RhdGljIHN5bWJvbF9saXN0ICpncmFtbWFyID0gTlVMTDsKQEAgLTQyLDcgKzQzLDEwIEBACiBtZXJnZXJfbGlzdCAqbWVyZ2VfZnVuY3Rpb25zOwogCiAvKiBXYXMgJXVuaW9uIHNlZW4/ICAqLwotYm9vbCB0eXBlZCA9IGZhbHNlOworYm9vbCB1bmlvbl9zZWVuID0gZmFsc2U7CisKKy8qIFdhcyBhIHRhZyBzZWVuPyAgKi8KK2Jvb2wgdGFnX3NlZW4gPSBmYWxzZTsKIAogLyogU2hvdWxkIHJ1bGVzIGhhdmUgYSBkZWZhdWx0IHByZWNlZGVuY2U/ICAqLwogYm9vbCBkZWZhdWx0X3ByZWMgPSB0cnVlOwpAQCAtNjQsMzUgKzY4LDE1IEBACiAgICAgfQogfQogCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgVGhlcmUgYXJlIHR3byBwcm9sb2d1ZXM6IG9uZSBiZWZvcmUgJXVuaW9uLCBvbmUgYWZ0ZXIuICBBdWdtZW50IHwKLXwgdGhlIGN1cnJlbnQgb25lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotdm9pZAotcHJvbG9ndWVfYXVnbWVudCAoY29uc3QgY2hhciAqcHJvbG9ndWUsIGxvY2F0aW9uIGxvYykKLXsKLSAgc3RydWN0IG9ic3RhY2sgKm9vdXQgPQotICAgICF0eXBlZCA/ICZwcmVfcHJvbG9ndWVfb2JzdGFjayA6ICZwb3N0X3Byb2xvZ3VlX29ic3RhY2s7Ci0KLSAgb2JzdGFja19mZ3JvdzEgKG9vdXQsICJdYjRfc3luY2xpbmUoJWQsIFtbIiwgbG9jLnN0YXJ0LmxpbmUpOwotICBNVVNDTEVfT0JTVEFDS19TR1JPVyAob291dCwKLQkJCXF1b3RlYXJnX3N0eWxlIChjX3F1b3Rpbmdfc3R5bGUsIGxvYy5zdGFydC5maWxlKSk7Ci0gIG9ic3RhY2tfc2dyb3cgKG9vdXQsICJdXSlbXG4iKTsKLSAgb2JzdGFja19zZ3JvdyAob291dCwgcHJvbG9ndWUpOwotfQotCiAMCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUmV0dXJuIHRoZSBtZXJnZXIgaW5kZXggZm9yIGEgbWVyZ2luZyBmdW5jdGlvbiBuYW1lZCBOQU1FLCB3aG9zZSAgIHwKLXwgYXJndW1lbnRzIGhhdmUgdHlwZSBUWVBFLiAgUmVjb3JkcyB0aGUgZnVuY3Rpb24sIGlmIG5ldywgaW4gICAgICAgIHwKLXwgTUVSR0VSX0xJU1QuCQkJCQkJCSAgICAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFJldHVybiB0aGUgbWVyZ2VyIGluZGV4IGZvciBhIG1lcmdpbmcgZnVuY3Rpb24gbmFtZWQgTkFNRS4gIFJlY29yZHMgdGhlIHwKK3wgZnVuY3Rpb24sIGlmIG5ldywgaW4gTUVSR0VSX0xJU1QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBpbnQKLWdldF9tZXJnZV9mdW5jdGlvbiAodW5pcXN0ciBuYW1lLCB1bmlxc3RyIHR5cGUsIGxvY2F0aW9uIGxvYykKK2dldF9tZXJnZV9mdW5jdGlvbiAodW5pcXN0ciBuYW1lKQogewogICBtZXJnZXJfbGlzdCAqc3ltczsKICAgbWVyZ2VyX2xpc3QgaGVhZDsKQEAgLTEwMSw5ICs4NSw2IEBACiAgIGlmICghIGdscl9wYXJzZXIpCiAgICAgcmV0dXJuIDA7CiAKLSAgaWYgKHR5cGUgPT0gTlVMTCkKLSAgICB0eXBlID0gdW5pcXN0cl9uZXcgKCIiKTsKLQogICBoZWFkLm5leHQgPSBtZXJnZV9mdW5jdGlvbnM7CiAgIGZvciAoc3ltcyA9ICZoZWFkLCBuID0gMTsgc3ltcy0+bmV4dDsgc3ltcyA9IHN5bXMtPm5leHQsIG4gKz0gMSkKICAgICBpZiAoVU5JUVNUUl9FUSAobmFtZSwgc3ltcy0+bmV4dC0+bmFtZSkpCkBAIC0xMTIsMTYgKzkzLDU1IEBACiAgICAgewogICAgICAgc3ltcy0+bmV4dCA9IHhtYWxsb2MgKHNpemVvZiBzeW1zLT5uZXh0WzBdKTsKICAgICAgIHN5bXMtPm5leHQtPm5hbWUgPSB1bmlxc3RyX25ldyAobmFtZSk7Ci0gICAgICBzeW1zLT5uZXh0LT50eXBlID0gdW5pcXN0cl9uZXcgKHR5cGUpOworICAgICAgLyogQWZ0ZXIgYWxsIHN5bWJvbCB0eXBlIGRlY2xhcmF0aW9ucyBoYXZlIGJlZW4gcGFyc2VkLCBwYWNrZ3JhbSBpbnZva2VzCisJIHJlY29yZF9tZXJnZV9mdW5jdGlvbl90eXBlIHRvIHNldCB0aGUgdHlwZS4gICovCisgICAgICBzeW1zLT5uZXh0LT50eXBlID0gTlVMTDsKICAgICAgIHN5bXMtPm5leHQtPm5leHQgPSBOVUxMOwogICAgICAgbWVyZ2VfZnVuY3Rpb25zID0gaGVhZC5uZXh0OwogICAgIH0KLSAgZWxzZSBpZiAoIVVOSVFTVFJfRVEgKHR5cGUsIHN5bXMtPm5leHQtPnR5cGUpKQotICAgIHdhcm5fYXQgKGxvYywgXygicmVzdWx0IHR5cGUgY2xhc2ggb24gbWVyZ2UgZnVuY3Rpb24gJXM6IDwlcz4gIT0gPCVzPiIpLAotCSAgICAgbmFtZSwgdHlwZSwgc3ltcy0+bmV4dC0+dHlwZSk7CiAgIHJldHVybiBuOwogfQogCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IEZvciB0aGUgZXhpc3RpbmcgbWVyZ2luZyBmdW5jdGlvbiB3aXRoIGluZGV4IE1FUkdFUiwgcmVjb3JkIHRoZSByZXN1bHQgICB8Cit8IHR5cGUgYXMgVFlQRSBhcyByZXF1aXJlZCBieSB0aGUgbGhzIG9mIHRoZSBydWxlIHdob3NlICVtZXJnZSBkZWNsYXJhdGlvbiB8Cit8IGlzIGF0IERFQ0xBUkFUSU9OX0xPQy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCityZWNvcmRfbWVyZ2VfZnVuY3Rpb25fdHlwZSAoaW50IG1lcmdlciwgdW5pcXN0ciB0eXBlLCBsb2NhdGlvbiBkZWNsYXJhdGlvbl9sb2MpCit7CisgIGludCBtZXJnZXJfZmluZDsKKyAgbWVyZ2VyX2xpc3QgKm1lcmdlX2Z1bmN0aW9uOworCisgIGlmIChtZXJnZXIgPD0gMCkKKyAgICByZXR1cm47CisKKyAgaWYgKHR5cGUgPT0gTlVMTCkKKyAgICB0eXBlID0gdW5pcXN0cl9uZXcgKCIiKTsKKworICBtZXJnZXJfZmluZCA9IDE7CisgIGZvciAobWVyZ2VfZnVuY3Rpb24gPSBtZXJnZV9mdW5jdGlvbnM7CisgICAgICAgbWVyZ2VfZnVuY3Rpb24gIT0gTlVMTCAmJiBtZXJnZXJfZmluZCAhPSBtZXJnZXI7CisgICAgICAgbWVyZ2VfZnVuY3Rpb24gPSBtZXJnZV9mdW5jdGlvbi0+bmV4dCkKKyAgICBtZXJnZXJfZmluZCArPSAxOworICBhdmVyIChtZXJnZV9mdW5jdGlvbiAhPSBOVUxMICYmIG1lcmdlcl9maW5kID09IG1lcmdlcik7CisgIGlmIChtZXJnZV9mdW5jdGlvbi0+dHlwZSAhPSBOVUxMICYmICFVTklRU1RSX0VRIChtZXJnZV9mdW5jdGlvbi0+dHlwZSwgdHlwZSkpCisgICAgeworICAgICAgdW5zaWduZWQgaW5kZW50ID0gMDsKKyAgICAgIGNvbXBsYWluX2F0X2luZGVudCAoZGVjbGFyYXRpb25fbG9jLCAmaW5kZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJyZXN1bHQgdHlwZSBjbGFzaCBvbiBtZXJnZSBmdW5jdGlvbiAlczogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8JXM+ICE9IDwlcz4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGUgKG1lcmdlX2Z1bmN0aW9uLT5uYW1lKSwgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VfZnVuY3Rpb24tPnR5cGUpOworICAgICAgaW5kZW50ICs9IFNVQl9JTkRFTlQ7CisgICAgICBjb21wbGFpbl9hdF9pbmRlbnQgKG1lcmdlX2Z1bmN0aW9uLT50eXBlX2RlY2xhcmF0aW9uX2xvY2F0aW9uLCAmaW5kZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJwcmV2aW91cyBkZWNsYXJhdGlvbiIpKTsKKyAgIH0KKyAgbWVyZ2VfZnVuY3Rpb24tPnR5cGUgPSB1bmlxc3RyX25ldyAodHlwZSk7CisgIG1lcmdlX2Z1bmN0aW9uLT50eXBlX2RlY2xhcmF0aW9uX2xvY2F0aW9uID0gZGVjbGFyYXRpb25fbG9jOworfQorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCBGcmVlIGFsbCBtZXJnZS1mdW5jdGlvbiBkZWZpbml0aW9ucy4JfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTE1NCwxMCArMTc0LDEwIEBACiBzdGF0aWMgc3ltYm9sX2xpc3QgKmdyYW1tYXJfZW5kID0gTlVMTDsKIAogLyogQXBwZW5kIFNZTSB0byB0aGUgZ3JhbW1hci4gICovCi1zdGF0aWMgdm9pZAorc3RhdGljIHN5bWJvbF9saXN0ICoKIGdyYW1tYXJfc3ltYm9sX2FwcGVuZCAoc3ltYm9sICpzeW0sIGxvY2F0aW9uIGxvYykKIHsKLSAgc3ltYm9sX2xpc3QgKnAgPSBzeW1ib2xfbGlzdF9uZXcgKHN5bSwgbG9jKTsKKyAgc3ltYm9sX2xpc3QgKnAgPSBzeW1ib2xfbGlzdF9zeW1fbmV3IChzeW0sIGxvYyk7CiAKICAgaWYgKGdyYW1tYXJfZW5kKQogICAgIGdyYW1tYXJfZW5kLT5uZXh0ID0gcDsKQEAgLTE3MCwxMiArMTkwLDMxIEBACiAgICAgIHBhcnQgb2YgaXQuICAqLwogICBpZiAoc3ltKQogICAgICsrbnJpdGVtczsKKworICByZXR1cm4gcDsKIH0KIAorc3RhdGljIHZvaWQKK2Fzc2lnbl9uYW1lZF9yZWYgKHN5bWJvbF9saXN0ICpwLCBuYW1lZF9yZWYgKm5hbWUpCit7CisgIHN5bWJvbCAqc3ltID0gcC0+Y29udGVudC5zeW07CisKKyAgaWYgKG5hbWUtPmlkID09IHN5bS0+dGFnKQorICAgIHsKKyAgICAgIHdhcm5fYXQgKG5hbWUtPmxvYywKKwkgICAgICAgXygiZHVwbGljYXRlZCBzeW1ib2wgbmFtZSBmb3IgJXMgaWdub3JlZCIpLAorCSAgICAgICBxdW90ZSAoc3ltLT50YWcpKTsKKyAgICAgIG5hbWVkX3JlZl9mcmVlIChuYW1lKTsKKyAgICB9CisgIGVsc2UKKyAgICBwLT5uYW1lZF9yZWYgPSBuYW1lOworfQorCisKIC8qIFRoZSBydWxlIGN1cnJlbnRseSBiZWluZyBkZWZpbmVkLCBhbmQgdGhlIHByZXZpb3VzIHJ1bGUuCiAgICBDVVJSRU5UX1JVTEUgcG9pbnRzIHRvIHRoZSBmaXJzdCBMSFMgb2YgdGhlIGN1cnJlbnQgcnVsZSwgd2hpbGUKICAgIFBSRVZJT1VTX1JVTEVfRU5EIHBvaW50cyB0byB0aGUgKmVuZCogb2YgdGhlIHByZXZpb3VzIHJ1bGUgKE5VTEwpLiAgKi8KLXN5bWJvbF9saXN0ICpjdXJyZW50X3J1bGUgPSBOVUxMOworc3RhdGljIHN5bWJvbF9saXN0ICpjdXJyZW50X3J1bGUgPSBOVUxMOwogc3RhdGljIHN5bWJvbF9saXN0ICpwcmV2aW91c19ydWxlX2VuZCA9IE5VTEw7CiAKIApAQCAtMTg0LDE5ICsyMjMsMTkgQEAKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogdm9pZAotZ3JhbW1hcl9jdXJyZW50X3J1bGVfYmVnaW4gKHN5bWJvbCAqbGhzLCBsb2NhdGlvbiBsb2MpCitncmFtbWFyX2N1cnJlbnRfcnVsZV9iZWdpbiAoc3ltYm9sICpsaHMsIGxvY2F0aW9uIGxvYywKKwkJCSAgICBuYW1lZF9yZWYgKmxoc19uYW1lKQogewotICBpZiAoIXN0YXJ0X2ZsYWcpCi0gICAgewotICAgICAgc3RhcnRzeW1ib2wgPSBsaHM7Ci0gICAgICBzdGFydHN5bWJvbF9sb2NhdGlvbiA9IGxvYzsKLSAgICAgIHN0YXJ0X2ZsYWcgPSB0cnVlOwotICAgIH0KKyAgc3ltYm9sX2xpc3QqIHA7CiAKICAgLyogU3RhcnQgYSBuZXcgcnVsZSBhbmQgcmVjb3JkIGl0cyBsaHMuICAqLwogICArK25ydWxlczsKICAgcHJldmlvdXNfcnVsZV9lbmQgPSBncmFtbWFyX2VuZDsKLSAgZ3JhbW1hcl9zeW1ib2xfYXBwZW5kIChsaHMsIGxvYyk7CisKKyAgcCA9IGdyYW1tYXJfc3ltYm9sX2FwcGVuZCAobGhzLCBsb2MpOworICBpZiAobGhzX25hbWUpCisgICAgYXNzaWduX25hbWVkX3JlZiAocCwgbmFtZWRfcmVmX2NvcHkgKGxoc19uYW1lKSk7CisKICAgY3VycmVudF9ydWxlID0gZ3JhbW1hcl9lbmQ7CiAKICAgLyogTWFyayB0aGUgcnVsZSdzIGxocyBhcyBhIG5vbnRlcm1pbmFsIGlmIG5vdCBhbHJlYWR5IHNvLiAgKi8KQEAgLTIxMiwxNiArMjUxLDI4IEBACiAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBBIHN5bWJvbCBzaG91bGQgYmUgdXNlZCBpZiBpdCBoYXMgYSBkZXN0cnVjdG9yLCBvciBpZiBpdCBpcyBhICAgICAgICAgfAotfCBtaWQtcnVsZSBzeW1ib2wgKGkuZS4sIHRoZSBnZW5lcmF0ZWQgTEhTIHJlcGxhY2luZyBhIG1pZC1ydWxlICAgICAgICAgfAotfCBhY3Rpb24pIHRoYXQgd2FzIGFzc2lnbmVkIHRvLCBhcyBpbiAiZXhwOiB7ICQkID0gMTsgfSB7ICQkID0gJDE7IH0iLiAgfAorfCBBIHN5bWJvbCBzaG91bGQgYmUgdXNlZCBpZiBlaXRoZXI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgIDEuIEl0IGhhcyBhIGRlc3RydWN0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgIDIuIFRoZSBzeW1ib2wgaXMgYSBtaWQtcnVsZSBzeW1ib2wgKGkuZS4sIHRoZSBnZW5lcmF0ZWQgTEhTICAgICAgICAgfAorfCAgICAgIHJlcGxhY2luZyBhIG1pZC1ydWxlIGFjdGlvbikgdGhhdCB3YXMgYXNzaWduZWQgdG8gb3IgdXNlZCwgYXMgaW4gfAorfCAgICAgICJleHA6IHsgJCQgPSAxOyB9IHsgJCQgPSAkMTsgfSIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgYm9vbAotc3ltYm9sX3Nob3VsZF9iZV91c2VkIChzeW1ib2xfbGlzdCBjb25zdCAqcykKK3N5bWJvbF9zaG91bGRfYmVfdXNlZCAoc3ltYm9sX2xpc3QgY29uc3QgKnMsIGJvb2wgKm1pZHJ1bGVfd2FybmluZykKIHsKLSAgcmV0dXJuIChzLT5zeW0tPmRlc3RydWN0b3IKLQkgIHx8IChzLT5taWRydWxlICYmIHMtPm1pZHJ1bGUtPnVzZWQpKTsKKyAgaWYgKHN5bWJvbF9kZXN0cnVjdG9yX2dldCAocy0+Y29udGVudC5zeW0pLT5jb2RlKQorICAgIHJldHVybiB0cnVlOworICBpZiAoKHMtPm1pZHJ1bGUgJiYgcy0+bWlkcnVsZS0+YWN0aW9uX3Byb3BzLmlzX3ZhbHVlX3VzZWQpCisgICAgICB8fCAocy0+bWlkcnVsZV9wYXJlbnRfcnVsZQorICAgICAgICAgICYmIHN5bWJvbF9saXN0X25fZ2V0IChzLT5taWRydWxlX3BhcmVudF9ydWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5taWRydWxlX3BhcmVudF9yaHNfaW5kZXgpCisgICAgICAgICAgICAgICAtPmFjdGlvbl9wcm9wcy5pc192YWx1ZV91c2VkKSkKKyAgICB7CisgICAgICAqbWlkcnVsZV93YXJuaW5nID0gdHJ1ZTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgcmV0dXJuIGZhbHNlOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCkBAIC0yMzksMTMgKzI5MCwxMyBAQAogCiAgICAgIERvbid0IHdvcnJ5IGFib3V0IHRoZSBkZWZhdWx0IGFjdGlvbiBpZiAkJCBpcyB1bnR5cGVkLCBzaW5jZSAkJCdzCiAgICAgIHZhbHVlIGNhbid0IGJlIHVzZWQuICAqLwotICBpZiAoIXItPmFjdGlvbiAmJiByLT5zeW0tPnR5cGVfbmFtZSkKKyAgaWYgKCFyLT5hY3Rpb25fcHJvcHMuY29kZSAmJiByLT5jb250ZW50LnN5bS0+dHlwZV9uYW1lKQogICAgIHsKLSAgICAgIHN5bWJvbCAqZmlyc3RfcmhzID0gci0+bmV4dC0+c3ltOworICAgICAgc3ltYm9sICpmaXJzdF9yaHMgPSByLT5uZXh0LT5jb250ZW50LnN5bTsKICAgICAgIC8qIElmICQkIGlzIGJlaW5nIHNldCBpbiBkZWZhdWx0IHdheSwgcmVwb3J0IGlmIGFueSB0eXBlIG1pc21hdGNoLiAgKi8KICAgICAgIGlmIChmaXJzdF9yaHMpCiAJewotCSAgY2hhciBjb25zdCAqbGhzX3R5cGUgPSByLT5zeW0tPnR5cGVfbmFtZTsKKwkgIGNoYXIgY29uc3QgKmxoc190eXBlID0gci0+Y29udGVudC5zeW0tPnR5cGVfbmFtZTsKIAkgIGNvbnN0IGNoYXIgKnJoc190eXBlID0KIAkgICAgZmlyc3RfcmhzLT50eXBlX25hbWUgPyBmaXJzdF9yaHMtPnR5cGVfbmFtZSA6ICIiOwogCSAgaWYgKCFVTklRU1RSX0VRIChsaHNfdHlwZSwgcmhzX3R5cGUpKQpAQCAtMjYzLDE4ICszMTQsMzIgQEAKICAgewogICAgIHN5bWJvbF9saXN0IGNvbnN0ICpsID0gcjsKICAgICBpbnQgbiA9IDA7Ci0gICAgZm9yICg7IGwgJiYgbC0+c3ltOyBsID0gbC0+bmV4dCwgKytuKQotICAgICAgaWYgKCEgKGwtPnVzZWQKLQkgICAgIHx8ICFzeW1ib2xfc2hvdWxkX2JlX3VzZWQgKGwpCi0JICAgICAvKiBUaGUgZGVmYXVsdCBhY3Rpb24sICQkID0gJDEsIGB1c2VzJyBib3RoLiAgKi8KLQkgICAgIHx8ICghci0+YWN0aW9uICYmIChuID09IDAgfHwgbiA9PSAxKSkpKQotCXsKLQkgIGlmIChuKQotCSAgICB3YXJuX2F0IChyLT5sb2NhdGlvbiwgXygidW51c2VkIHZhbHVlOiAkJWQiKSwgbik7Ci0JICBlbHNlCi0JICAgIHdhcm5fYXQgKHItPmxvY2F0aW9uLCBfKCJ1bnNldCB2YWx1ZTogJCQiKSk7Ci0JfQorICAgIGZvciAoOyBsICYmIGwtPmNvbnRlbnQuc3ltOyBsID0gbC0+bmV4dCwgKytuKQorICAgICAgeworICAgICAgICBib29sIG1pZHJ1bGVfd2FybmluZyA9IGZhbHNlOworICAgICAgICBpZiAoIWwtPmFjdGlvbl9wcm9wcy5pc192YWx1ZV91c2VkCisgICAgICAgICAgICAmJiBzeW1ib2xfc2hvdWxkX2JlX3VzZWQgKGwsICZtaWRydWxlX3dhcm5pbmcpCisgICAgICAgICAgICAvKiBUaGUgZGVmYXVsdCBhY3Rpb24sICQkID0gJDEsIGB1c2VzJyBib3RoLiAgKi8KKyAgICAgICAgICAgICYmIChyLT5hY3Rpb25fcHJvcHMuY29kZSB8fCAobiAhPSAwICYmIG4gIT0gMSkpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHZvaWQgKCp3YXJuX2F0X3B0cikobG9jYXRpb24sIGNoYXIgY29uc3QqLCAuLi4pID0KKyAgICAgICAgICAgICAgbWlkcnVsZV93YXJuaW5nID8gbWlkcnVsZV92YWx1ZV9hdCA6IHdhcm5fYXQ7CisgICAgICAgICAgICBpZiAobikKKyAgICAgICAgICAgICAgd2Fybl9hdF9wdHIgKGwtPmxvY2F0aW9uLCBfKCJ1bnVzZWQgdmFsdWU6ICQlZCIpLCBuKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgd2Fybl9hdF9wdHIgKGwtPmxvY2F0aW9uLCBfKCJ1bnNldCB2YWx1ZTogJCQiKSk7CisgICAgICAgICAgfQorICAgICAgfQogICB9CisKKyAgLyogU2VlIGNvbW1lbnRzIGluIGdyYW1tYXJfY3VycmVudF9ydWxlX3ByZWNfc2V0IGZvciBob3cgUE9TSVgKKyAgICAgbWFuZGF0ZXMgdGhpcyBjb21wbGFpbnQuICBJdCdzIG9ubHkgZm9yIGlkZW50aWZpZXJzLCBzbyBza2lwCisgICAgIGl0IGZvciBjaGFyIGxpdGVyYWxzIGFuZCBzdHJpbmdzLCB3aGljaCBhcmUgYWx3YXlzIHRva2Vucy4gICovCisgIGlmIChyLT5ydWxlcHJlYworICAgICAgJiYgci0+cnVsZXByZWMtPnRhZ1swXSAhPSAnXCcnICYmIHItPnJ1bGVwcmVjLT50YWdbMF0gIT0gJyInCisgICAgICAmJiAhci0+cnVsZXByZWMtPmRlY2xhcmVkICYmICFyLT5ydWxlcHJlYy0+cHJlYykKKyAgICB3YXJuX2F0IChyLT5sb2NhdGlvbiwgXygidG9rZW4gZm9yICUlcHJlYyBpcyBub3QgZGVmaW5lZDogJXMiKSwKKyAgICAgICAgICAgICByLT5ydWxlcHJlYy0+dGFnKTsKIH0KIAogCkBAIC0yODgsNyArMzUzLDYgQEAKICAgLyogUHV0IGFuIGVtcHR5IGxpbmsgaW4gdGhlIGxpc3QgdG8gbWFyayB0aGUgZW5kIG9mIHRoaXMgcnVsZSAgKi8KICAgZ3JhbW1hcl9zeW1ib2xfYXBwZW5kIChOVUxMLCBncmFtbWFyX2VuZC0+bG9jYXRpb24pOwogICBjdXJyZW50X3J1bGUtPmxvY2F0aW9uID0gbG9jOwotICBncmFtbWFyX3J1bGVfY2hlY2sgKGN1cnJlbnRfcnVsZSk7CiB9CiAKIApAQCAtMzA4LDkgKzM3MiwxMiBAQAogCiAgIC8qIE1ha2UgYSBEVU1NWSBub250ZXJtaW5hbCwgd2hvc2UgbG9jYXRpb24gaXMgdGhhdCBvZiB0aGUgbWlkcnVsZQogICAgICBhY3Rpb24uICBDcmVhdGUgdGhlIE1JRFJVTEUuICAqLwotICBsb2NhdGlvbiBkdW1teV9sb2NhdGlvbiA9IGN1cnJlbnRfcnVsZS0+YWN0aW9uX2xvY2F0aW9uOworICBsb2NhdGlvbiBkdW1teV9sb2NhdGlvbiA9IGN1cnJlbnRfcnVsZS0+YWN0aW9uX3Byb3BzLmxvY2F0aW9uOwogICBzeW1ib2wgKmR1bW15ID0gZHVtbXlfc3ltYm9sX2dldCAoZHVtbXlfbG9jYXRpb24pOwotICBzeW1ib2xfbGlzdCAqbWlkcnVsZSA9IHN5bWJvbF9saXN0X25ldyAoZHVtbXksIGR1bW15X2xvY2F0aW9uKTsKKyAgc3ltYm9sX2xpc3QgKm1pZHJ1bGUgPSBzeW1ib2xfbGlzdF9zeW1fbmV3IChkdW1teSwgZHVtbXlfbG9jYXRpb24pOworCisgIC8qIFJlbWVtYmVyIG5hbWVkX3JlZiBvZiBwcmV2aW91cyBhY3Rpb24uICovCisgIG5hbWVkX3JlZiAqYWN0aW9uX25hbWUgPSBjdXJyZW50X3J1bGUtPmFjdGlvbl9wcm9wcy5uYW1lZF9yZWY7CiAKICAgLyogTWFrZSBhIG5ldyBydWxlLCB3aG9zZSBib2R5IGlzIGVtcHR5LCBiZWZvcmUgdGhlIGN1cnJlbnQgb25lLCBzbwogICAgICB0aGF0IHRoZSBhY3Rpb24ganVzdCByZWFkIGNhbiBiZWxvbmcgdG8gaXQuICAqLwpAQCAtMzE4LDEzICszODUsMTEgQEAKICAgKytucml0ZW1zOwogICAvKiBBdHRhY2ggaXRzIGxvY2F0aW9uIGFuZCBhY3Rpb25zIHRvIHRoYXQgb2YgdGhlIERVTU1ZLiAgKi8KICAgbWlkcnVsZS0+bG9jYXRpb24gPSBkdW1teV9sb2NhdGlvbjsKLSAgbWlkcnVsZS0+YWN0aW9uID0gY3VycmVudF9ydWxlLT5hY3Rpb247Ci0gIG1pZHJ1bGUtPmFjdGlvbl9sb2NhdGlvbiA9IGR1bW15X2xvY2F0aW9uOwotICBjdXJyZW50X3J1bGUtPmFjdGlvbiA9IE5VTEw7Ci0gIC8qIElmICQkIHdhcyB1c2VkIGluIHRoZSBhY3Rpb24sIHRoZSBMSFMgb2YgdGhlIGVuY2xvc2luZyBydWxlIHdhcwotICAgICBpbmNvcnJlY3RseSBmbGFnZ2VkIGFzIHVzZWQuICAqLwotICBtaWRydWxlLT51c2VkID0gY3VycmVudF9ydWxlLT51c2VkOwotICBjdXJyZW50X3J1bGUtPnVzZWQgPSBmYWxzZTsKKyAgY29kZV9wcm9wc19ydWxlX2FjdGlvbl9pbml0ICgmbWlkcnVsZS0+YWN0aW9uX3Byb3BzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfcnVsZS0+YWN0aW9uX3Byb3BzLmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9ydWxlLT5hY3Rpb25fcHJvcHMubG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlkcnVsZSwgMCk7CisgIGNvZGVfcHJvcHNfbm9uZV9pbml0ICgmY3VycmVudF9ydWxlLT5hY3Rpb25fcHJvcHMpOwogCiAgIGlmIChwcmV2aW91c19ydWxlX2VuZCkKICAgICBwcmV2aW91c19ydWxlX2VuZC0+bmV4dCA9IG1pZHJ1bGU7CkBAIC0zMzIsMTYgKzM5NywxOCBAQAogICAgIGdyYW1tYXIgPSBtaWRydWxlOwogCiAgIC8qIEVuZCB0aGUgZHVtbXkncyBydWxlLiAgKi8KLSAgbWlkcnVsZS0+bmV4dCA9IHN5bWJvbF9saXN0X25ldyAoTlVMTCwgZHVtbXlfbG9jYXRpb24pOwotICBncmFtbWFyX3J1bGVfY2hlY2sgKG1pZHJ1bGUpOworICBtaWRydWxlLT5uZXh0ID0gc3ltYm9sX2xpc3Rfc3ltX25ldyAoTlVMTCwgZHVtbXlfbG9jYXRpb24pOwogICBtaWRydWxlLT5uZXh0LT5uZXh0ID0gY3VycmVudF9ydWxlOwogCiAgIHByZXZpb3VzX3J1bGVfZW5kID0gbWlkcnVsZS0+bmV4dDsKIAogICAvKiBJbnNlcnQgdGhlIGR1bW15IG5vbnRlcm1pbmFsIHJlcGxhY2luZyB0aGUgbWlkcnVsZSBhY3Rpb24gaW50bwogICAgICB0aGUgY3VycmVudCBydWxlLiAgQmluZCBpdCB0byBpdHMgZGVkaWNhdGVkIHJ1bGUuICAqLwotICBncmFtbWFyX2N1cnJlbnRfcnVsZV9zeW1ib2xfYXBwZW5kIChkdW1teSwgZHVtbXlfbG9jYXRpb24pOworICBncmFtbWFyX2N1cnJlbnRfcnVsZV9zeW1ib2xfYXBwZW5kIChkdW1teSwgZHVtbXlfbG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbl9uYW1lKTsKICAgZ3JhbW1hcl9lbmQtPm1pZHJ1bGUgPSBtaWRydWxlOworICBtaWRydWxlLT5taWRydWxlX3BhcmVudF9ydWxlID0gY3VycmVudF9ydWxlOworICBtaWRydWxlLT5taWRydWxlX3BhcmVudF9yaHNfaW5kZXggPSBzeW1ib2xfbGlzdF9sZW5ndGggKGN1cnJlbnRfcnVsZS0+bmV4dCk7CiB9CiAKIC8qIFNldCB0aGUgcHJlY2VkZW5jZSBzeW1ib2wgb2YgdGhlIGN1cnJlbnQgcnVsZSB0byBQUkVDU1lNLiAqLwpAQCAtMzQ5LDYgKzQxNiwxNyBAQAogdm9pZAogZ3JhbW1hcl9jdXJyZW50X3J1bGVfcHJlY19zZXQgKHN5bWJvbCAqcHJlY3N5bSwgbG9jYXRpb24gbG9jKQogeworICAvKiBQT1NJWCBzYXlzIHRoYXQgYW55IGlkZW50aWZpZXIgaXMgYSBub250ZXJtaW5hbCBpZiBpdCBkb2VzIG5vdAorICAgICBhcHBlYXIgb24gdGhlIExIUyBvZiBhIGdyYW1tYXIgcnVsZSBhbmQgaXMgbm90IGRlZmluZWQgYnkgJXRva2VuCisgICAgIG9yIGJ5IG9uZSBvZiB0aGUgZGlyZWN0aXZlcyB0aGF0IGFzc2lnbnMgcHJlY2VkZW5jZSB0byBhIHRva2VuLiAgV2UKKyAgICAgaWdub3JlIHRoaXMgaGVyZSBiZWNhdXNlIHRoZSBvbmx5IGtpbmQgb2YgaWRlbnRpZmllciB0aGF0IFBPU0lYCisgICAgIGFsbG93cyB0byBmb2xsb3cgYSAlcHJlYyBpcyBhIHRva2VuIGFuZCBiZWNhdXNlIGFzc3VtaW5nIGl0J3MgYQorICAgICB0b2tlbiBub3cgY2FuIHByb2R1Y2UgbW9yZSBsb2dpY2FsIGVycm9yIG1lc3NhZ2VzLiAgTmV2ZXJ0aGVsZXNzLAorICAgICBncmFtbWFyX3J1bGVfY2hlY2sgZG9lcyBvYmV5IHdoYXQgd2UgYmVsaWV2ZSBpcyB0aGUgcmVhbCBpbnRlbnQgb2YKKyAgICAgUE9TSVggaGVyZTogdGhhdCBhbiBlcnJvciBiZSByZXBvcnRlZCBmb3IgYW55IGlkZW50aWZpZXIgdGhhdAorICAgICBhcHBlYXJzIGFmdGVyICVwcmVjIGJ1dCB0aGF0IGlzIG5vdCBkZWZpbmVkIHNlcGFyYXRlbHkgYXMgYQorICAgICB0b2tlbi4gICovCisgIHN5bWJvbF9jbGFzc19zZXQgKHByZWNzeW0sIHRva2VuX3N5bSwgbG9jLCBmYWxzZSk7CiAgIGlmIChjdXJyZW50X3J1bGUtPnJ1bGVwcmVjKQogICAgIGNvbXBsYWluX2F0IChsb2MsIF8oIm9ubHkgb25lICVzIGFsbG93ZWQgcGVyIHJ1bGUiKSwgIiVwcmVjIik7CiAgIGN1cnJlbnRfcnVsZS0+cnVsZXByZWMgPSBwcmVjc3ltOwpAQCAtMzc4LDMwICs0NTYsMzcgQEAKICAgICB3YXJuX2F0IChsb2MsIF8oIiVzIGFmZmVjdHMgb25seSBHTFIgcGFyc2VycyIpLCAiJW1lcmdlIik7CiAgIGlmIChjdXJyZW50X3J1bGUtPm1lcmdlciAhPSAwKQogICAgIGNvbXBsYWluX2F0IChsb2MsIF8oIm9ubHkgb25lICVzIGFsbG93ZWQgcGVyIHJ1bGUiKSwgIiVtZXJnZSIpOwotICBjdXJyZW50X3J1bGUtPm1lcmdlciA9Ci0gICAgZ2V0X21lcmdlX2Z1bmN0aW9uIChuYW1lLCBjdXJyZW50X3J1bGUtPnN5bS0+dHlwZV9uYW1lLCBsb2MpOworICBjdXJyZW50X3J1bGUtPm1lcmdlciA9IGdldF9tZXJnZV9mdW5jdGlvbiAobmFtZSk7CisgIGN1cnJlbnRfcnVsZS0+bWVyZ2VyX2RlY2xhcmF0aW9uX2xvY2F0aW9uID0gbG9jOwogfQogCiAvKiBBdHRhY2ggU1lNIHRvIHRoZSBjdXJyZW50IHJ1bGUuICBJZiBuZWVkZWQsIG1vdmUgdGhlIHByZXZpb3VzCiAgICBhY3Rpb24gYXMgYSBtaWQtcnVsZSBhY3Rpb24uICAqLwogCiB2b2lkCi1ncmFtbWFyX2N1cnJlbnRfcnVsZV9zeW1ib2xfYXBwZW5kIChzeW1ib2wgKnN5bSwgbG9jYXRpb24gbG9jKQorZ3JhbW1hcl9jdXJyZW50X3J1bGVfc3ltYm9sX2FwcGVuZCAoc3ltYm9sICpzeW0sIGxvY2F0aW9uIGxvYywKKwkJCQkgICAgbmFtZWRfcmVmICpuYW1lKQogewotICBpZiAoY3VycmVudF9ydWxlLT5hY3Rpb24pCisgIHN5bWJvbF9saXN0ICpwOworICBpZiAoY3VycmVudF9ydWxlLT5hY3Rpb25fcHJvcHMuY29kZSkKICAgICBncmFtbWFyX21pZHJ1bGVfYWN0aW9uICgpOwotICBncmFtbWFyX3N5bWJvbF9hcHBlbmQgKHN5bSwgbG9jKTsKKyAgcCA9IGdyYW1tYXJfc3ltYm9sX2FwcGVuZCAoc3ltLCBsb2MpOworICBpZiAobmFtZSkKKyAgICBhc3NpZ25fbmFtZWRfcmVmKHAsIG5hbWUpOwogfQogCiAvKiBBdHRhY2ggYW4gQUNUSU9OIHRvIHRoZSBjdXJyZW50IHJ1bGUuICAqLwogCiB2b2lkCi1ncmFtbWFyX2N1cnJlbnRfcnVsZV9hY3Rpb25fYXBwZW5kIChjb25zdCBjaGFyICphY3Rpb24sIGxvY2F0aW9uIGxvYykKK2dyYW1tYXJfY3VycmVudF9ydWxlX2FjdGlvbl9hcHBlbmQgKGNvbnN0IGNoYXIgKmFjdGlvbiwgbG9jYXRpb24gbG9jLAorCQkJCSAgICBuYW1lZF9yZWYgKm5hbWUpCiB7Ci0gIC8qIFRoZXJlJ3Mgbm8gbmVlZCB0byBpbnZva2UgZ3JhbW1hcl9taWRydWxlX2FjdGlvbiBoZXJlLCBzaW5jZSB0aGUKLSAgICAgc2Nhbm5lciBhbHJlYWR5IGRpZCBpdCBpZiBuZWNlc3NhcnkuICAqLwotICBjdXJyZW50X3J1bGUtPmFjdGlvbiA9IGFjdGlvbjsKLSAgY3VycmVudF9ydWxlLT5hY3Rpb25fbG9jYXRpb24gPSBsb2M7CisgIGlmIChjdXJyZW50X3J1bGUtPmFjdGlvbl9wcm9wcy5jb2RlKQorICAgIGdyYW1tYXJfbWlkcnVsZV9hY3Rpb24gKCk7CisgIC8qIEFmdGVyIGFsbCBzeW1ib2wgZGVjbGFyYXRpb25zIGhhdmUgYmVlbiBwYXJzZWQsIHBhY2tncmFtIGludm9rZXMKKyAgICAgY29kZV9wcm9wc190cmFuc2xhdGVfY29kZS4gICovCisgIGNvZGVfcHJvcHNfcnVsZV9hY3Rpb25faW5pdCAoJmN1cnJlbnRfcnVsZS0+YWN0aW9uX3Byb3BzLCBhY3Rpb24sIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3J1bGUsIG5hbWUpOwogfQogCiAMCkBAIC00MjYsMTAgKzUxMSwxMyBAQAogCiAgIHdoaWxlIChwKQogICAgIHsKKyAgICAgIGludCBydWxlX2xlbmd0aCA9IDA7CiAgICAgICBzeW1ib2wgKnJ1bGVwcmVjID0gcC0+cnVsZXByZWM7CisgICAgICByZWNvcmRfbWVyZ2VfZnVuY3Rpb25fdHlwZSAocC0+bWVyZ2VyLCBwLT5jb250ZW50LnN5bS0+dHlwZV9uYW1lLAorCQkJCSAgcC0+bWVyZ2VyX2RlY2xhcmF0aW9uX2xvY2F0aW9uKTsKICAgICAgIHJ1bGVzW3J1bGVub10udXNlcl9udW1iZXIgPSBydWxlbm87CiAgICAgICBydWxlc1tydWxlbm9dLm51bWJlciA9IHJ1bGVubzsKLSAgICAgIHJ1bGVzW3J1bGVub10ubGhzID0gcC0+c3ltOworICAgICAgcnVsZXNbcnVsZW5vXS5saHMgPSBwLT5jb250ZW50LnN5bTsKICAgICAgIHJ1bGVzW3J1bGVub10ucmhzID0gcml0ZW0gKyBpdGVtbm87CiAgICAgICBydWxlc1tydWxlbm9dLnByZWMgPSBOVUxMOwogICAgICAgcnVsZXNbcnVsZW5vXS5kcHJlYyA9IHAtPmRwcmVjOwpAQCAtNDM3LDIxICs1MjUsNDIgQEAKICAgICAgIHJ1bGVzW3J1bGVub10ucHJlY3N5bSA9IE5VTEw7CiAgICAgICBydWxlc1tydWxlbm9dLmxvY2F0aW9uID0gcC0+bG9jYXRpb247CiAgICAgICBydWxlc1tydWxlbm9dLnVzZWZ1bCA9IHRydWU7Ci0gICAgICBydWxlc1tydWxlbm9dLmFjdGlvbiA9IHAtPmFjdGlvbjsKLSAgICAgIHJ1bGVzW3J1bGVub10uYWN0aW9uX2xvY2F0aW9uID0gcC0+YWN0aW9uX2xvY2F0aW9uOworICAgICAgcnVsZXNbcnVsZW5vXS5hY3Rpb24gPSBwLT5hY3Rpb25fcHJvcHMuY29kZTsKKyAgICAgIHJ1bGVzW3J1bGVub10uYWN0aW9uX2xvY2F0aW9uID0gcC0+YWN0aW9uX3Byb3BzLmxvY2F0aW9uOwogCi0gICAgICBwID0gcC0+bmV4dDsKLSAgICAgIHdoaWxlIChwICYmIHAtPnN5bSkKKyAgICAgIC8qIElmIHRoZSBtaWRydWxlJ3MgJCQgaXMgc2V0IG9yIGl0cyAkbiBpcyB1c2VkLCByZW1vdmUgdGhlIGAkJyBmcm9tIHRoZQorCSBzeW1ib2wgbmFtZSBzbyB0aGF0IGl0J3MgYSB1c2VyLWRlZmluZWQgc3ltYm9sIHNvIHRoYXQgdGhlIGRlZmF1bHQKKwkgJWRlc3RydWN0b3IgYW5kICVwcmludGVyIGFwcGx5LiAgKi8KKyAgICAgIGlmIChwLT5taWRydWxlX3BhcmVudF9ydWxlCisgICAgICAgICAgJiYgKHAtPmFjdGlvbl9wcm9wcy5pc192YWx1ZV91c2VkCisJICAgICAgfHwgc3ltYm9sX2xpc3Rfbl9nZXQgKHAtPm1pZHJ1bGVfcGFyZW50X3J1bGUsCisJCQkJICAgIHAtPm1pZHJ1bGVfcGFyZW50X3Joc19pbmRleCkKKyAgICAgICAgICAgICAgICAgICAtPmFjdGlvbl9wcm9wcy5pc192YWx1ZV91c2VkKSkKKwlwLT5jb250ZW50LnN5bS0+dGFnICs9IDE7CisKKyAgICAgIC8qIERvbid0IGNoZWNrIHRoZSBnZW5lcmF0ZWQgcnVsZSAwLiAgSXQgaGFzIG5vIGFjdGlvbiwgc28gc29tZSByaHMKKwkgc3ltYm9scyBtYXkgYXBwZWFyIHVudXNlZCwgYnV0IHRoZSBwYXJzaW5nIGFsZ29yaXRobSBlbnN1cmVzIHRoYXQKKwkgJWRlc3RydWN0b3IncyBhcmUgaW52b2tlZCBhcHByb3ByaWF0ZWx5LiAgKi8KKyAgICAgIGlmIChwICE9IGdyYW1tYXIpCisJZ3JhbW1hcl9ydWxlX2NoZWNrIChwKTsKKworICAgICAgZm9yIChwID0gcC0+bmV4dDsgcCAmJiBwLT5jb250ZW50LnN5bTsgcCA9IHAtPm5leHQpCiAJeworCSAgKytydWxlX2xlbmd0aDsKKworCSAgLyogRG9uJ3QgYWxsb3cgcnVsZV9sZW5ndGggPT0gSU5UX01BWCwgc2luY2UgdGhhdCBtaWdodAorCSAgICAgY2F1c2UgY29uZnVzaW9uIHdpdGggc3RydG9sIGlmIElOVF9NQVggPT0gTE9OR19NQVguICAqLworCSAgaWYgKHJ1bGVfbGVuZ3RoID09IElOVF9NQVgpCisJICAgICAgZmF0YWxfYXQgKHJ1bGVzW3J1bGVub10ubG9jYXRpb24sIF8oInJ1bGUgaXMgdG9vIGxvbmciKSk7CisKIAkgIC8qIGl0ZW1fbnVtYmVyID0gc3ltYm9sX251bWJlci4KIAkgICAgIEJ1dCB0aGUgZm9ybWVyIG5lZWRzIHRvIGNvbnRhaW4gbW9yZTogbmVnYXRpdmUgcnVsZSBudW1iZXJzLiAqLwotCSAgcml0ZW1baXRlbW5vKytdID0gc3ltYm9sX251bWJlcl9hc19pdGVtX251bWJlciAocC0+c3ltLT5udW1iZXIpOworCSAgcml0ZW1baXRlbW5vKytdID0KKyAgICAgICAgICAgIHN5bWJvbF9udW1iZXJfYXNfaXRlbV9udW1iZXIgKHAtPmNvbnRlbnQuc3ltLT5udW1iZXIpOwogCSAgLyogQSBydWxlIGdldHMgYnkgZGVmYXVsdCB0aGUgcHJlY2VkZW5jZSBhbmQgYXNzb2NpYXRpdml0eQotCSAgICAgb2YgdGhlIGxhc3QgdG9rZW4gaW4gaXQuICAqLwotCSAgaWYgKHAtPnN5bS0+Y2xhc3MgPT0gdG9rZW5fc3ltICYmIGRlZmF1bHRfcHJlYykKLQkgICAgcnVsZXNbcnVsZW5vXS5wcmVjID0gcC0+c3ltOwotCSAgaWYgKHApCi0JICAgIHAgPSBwLT5uZXh0OworCSAgICAgb2YgaXRzIGxhc3QgdG9rZW4uICAqLworCSAgaWYgKHAtPmNvbnRlbnQuc3ltLT5jbGFzcyA9PSB0b2tlbl9zeW0gJiYgZGVmYXVsdF9wcmVjKQorCSAgICBydWxlc1tydWxlbm9dLnByZWMgPSBwLT5jb250ZW50LnN5bTsKIAl9CiAKICAgICAgIC8qIElmIHRoaXMgcnVsZSBoYXMgYSAlcHJlYywKQEAgLTQ2MSwxNCArNTcwLDE3IEBACiAJICBydWxlc1tydWxlbm9dLnByZWNzeW0gPSBydWxlcHJlYzsKIAkgIHJ1bGVzW3J1bGVub10ucHJlYyA9IHJ1bGVwcmVjOwogCX0KKyAgICAgIC8qIEFuIGl0ZW0gZW5kcyBieSB0aGUgcnVsZSBudW1iZXIgKG5lZ2F0ZWQpLiAgKi8KICAgICAgIHJpdGVtW2l0ZW1ubysrXSA9IHJ1bGVfbnVtYmVyX2FzX2l0ZW1fbnVtYmVyIChydWxlbm8pOworICAgICAgYXZlciAoaXRlbW5vIDwgSVRFTV9OVU1CRVJfTUFYKTsKICAgICAgICsrcnVsZW5vOworICAgICAgYXZlciAocnVsZW5vIDwgUlVMRV9OVU1CRVJfTUFYKTsKIAogICAgICAgaWYgKHApCiAJcCA9IHAtPm5leHQ7CiAgICAgfQogCi0gIGFzc2VydCAoaXRlbW5vID09IG5yaXRlbXMpOworICBhdmVyIChpdGVtbm8gPT0gbnJpdGVtcyk7CiAKICAgaWYgKHRyYWNlX2ZsYWcgJiB0cmFjZV9zZXRzKQogICAgIHJpdGVtX3ByaW50IChzdGRlcnIpOwpAQCAtNTAzLDE2ICs2MTUsMTMgQEAKICAgdW5kZWZ0b2tlbi0+Y2xhc3MgPSB0b2tlbl9zeW07CiAgIHVuZGVmdG9rZW4tPm51bWJlciA9IG50b2tlbnMrKzsKIAotICAvKiBJbml0aWFsaXplIHRoZSBvYnN0YWNrcy4gKi8KLSAgb2JzdGFja19pbml0ICgmcHJlX3Byb2xvZ3VlX29ic3RhY2spOwotICBvYnN0YWNrX2luaXQgKCZwb3N0X3Byb2xvZ3VlX29ic3RhY2spOwotCiAgIGdyYW1faW4gPSB4Zm9wZW4gKGdyYW1tYXJfZmlsZSwgInIiKTsKIAogICBncmFtX19mbGV4X2RlYnVnID0gdHJhY2VfZmxhZyAmIHRyYWNlX3NjYW47CiAgIGdyYW1fZGVidWcgPSB0cmFjZV9mbGFnICYgdHJhY2VfcGFyc2U7Ci0gIHNjYW5uZXJfaW5pdGlhbGl6ZSAoKTsKKyAgZ3JhbV9zY2FubmVyX2luaXRpYWxpemUgKCk7CiAgIGdyYW1fcGFyc2UgKCk7CisgIHByZXBhcmVfcGVyY2VudF9kZWZpbmVfZnJvbnRfZW5kX3ZhcmlhYmxlcyAoKTsKIAogICBpZiAoISBjb21wbGFpbnRfaXNzdWVkKQogICAgIGNoZWNrX2FuZF9jb252ZXJ0X2dyYW1tYXIgKCk7CkBAIC01MjAsNiArNjI5LDM1IEBACiAgIHhmY2xvc2UgKGdyYW1faW4pOwogfQogCitzdGF0aWMgdm9pZAorcHJlcGFyZV9wZXJjZW50X2RlZmluZV9mcm9udF9lbmRfdmFyaWFibGVzICh2b2lkKQoreworICAvKiBTZXQgJWRlZmluZSBmcm9udC1lbmQgdmFyaWFibGUgZGVmYXVsdHMuICAqLworICBtdXNjbGVfcGVyY2VudF9kZWZpbmVfZGVmYXVsdCAoImxyLmtlZXAtdW5yZWFjaGFibGUtc3RhdGVzIiwgImZhbHNlIik7CisgIHsKKyAgICBjaGFyICpscl90eXBlOworICAgIC8qIElFTFIgd291bGQgYmUgYSBiZXR0ZXIgZGVmYXVsdCwgYnV0IExBTFIgaXMgaGlzdG9yaWNhbGx5IHRoZQorICAgICAgIGRlZmF1bHQuICAqLworICAgIG11c2NsZV9wZXJjZW50X2RlZmluZV9kZWZhdWx0ICgibHIudHlwZSIsICJsYWxyIik7CisgICAgbHJfdHlwZSA9IG11c2NsZV9wZXJjZW50X2RlZmluZV9nZXQgKCJsci50eXBlIik7CisgICAgaWYgKDAgIT0gc3RyY21wIChscl90eXBlLCAiY2Fub25pY2FsLWxyIikpCisgICAgICBtdXNjbGVfcGVyY2VudF9kZWZpbmVfZGVmYXVsdCAoImxyLmRlZmF1bHQtcmVkdWN0aW9ucyIsICJtb3N0Iik7CisgICAgZWxzZQorICAgICAgbXVzY2xlX3BlcmNlbnRfZGVmaW5lX2RlZmF1bHQgKCJsci5kZWZhdWx0LXJlZHVjdGlvbnMiLCAiYWNjZXB0aW5nIik7CisgICAgZnJlZSAobHJfdHlwZSk7CisgIH0KKworICAvKiBDaGVjayAlZGVmaW5lIGZyb250LWVuZCB2YXJpYWJsZXMuICAqLworICB7CisgICAgc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCB2YWx1ZXNbXSA9IHsKKyAgICAgICJsci50eXBlIiwgImxhbHIiLCAiaWVsciIsICJjYW5vbmljYWwtbHIiLCBOVUxMLAorICAgICAgImxyLmRlZmF1bHQtcmVkdWN0aW9ucyIsICJtb3N0IiwgImNvbnNpc3RlbnQiLCAiYWNjZXB0aW5nIiwgTlVMTCwKKyAgICAgIE5VTEwKKyAgICB9OworICAgIG11c2NsZV9wZXJjZW50X2RlZmluZV9jaGVja192YWx1ZXMgKHZhbHVlcyk7CisgIH0KK30KKwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IENoZWNrIHRoZSBncmFtbWFyIHRoYXQgaGFzIGp1c3QgYmVlbiByZWFkLCBhbmQgY29udmVydCBpdCB0byB8CkBAIC01MzMsOSArNjcxLDYgQEAKICAgaWYgKG5ydWxlcyA9PSAwKQogICAgIGZhdGFsIChfKCJubyBydWxlcyBpbiB0aGUgaW5wdXQgZ3JhbW1hciIpKTsKIAotICAvKiBSZXBvcnQgYW55IHVuZGVmaW5lZCBzeW1ib2xzIGFuZCBjb25zaWRlciB0aGVtIG5vbnRlcm1pbmFscy4gICovCi0gIHN5bWJvbHNfY2hlY2tfZGVmaW5lZCAoKTsKLQogICAvKiBJZiB0aGUgdXNlciBkaWQgbm90IGRlZmluZSBoZXIgRU5EVE9LRU4sIGRvIGl0IG5vdy4gKi8KICAgaWYgKCFlbmR0b2tlbikKICAgICB7CkBAIC01NDYsMzEgKzY4MSw2OSBAQAogICAgICAgZW5kdG9rZW4tPnVzZXJfdG9rZW5fbnVtYmVyID0gMDsKICAgICB9CiAKKyAgLyogUmVwb3J0IGFueSB1bmRlZmluZWQgc3ltYm9scyBhbmQgY29uc2lkZXIgdGhlbSBub250ZXJtaW5hbHMuICAqLworICBzeW1ib2xzX2NoZWNrX2RlZmluZWQgKCk7CisKKyAgLyogRmluZCB0aGUgc3RhcnQgc3ltYm9sIGlmIG5vICVzdGFydC4gICovCisgIGlmICghc3RhcnRfZmxhZykKKyAgICB7CisgICAgICBzeW1ib2xfbGlzdCAqbm9kZTsKKyAgICAgIGZvciAobm9kZSA9IGdyYW1tYXI7CisgICAgICAgICAgIG5vZGUgIT0gTlVMTCAmJiBzeW1ib2xfaXNfZHVtbXkgKG5vZGUtPmNvbnRlbnQuc3ltKTsKKyAgICAgICAgICAgbm9kZSA9IG5vZGUtPm5leHQpCisgICAgICAgIHsKKyAgICAgICAgICBmb3IgKG5vZGUgPSBub2RlLT5uZXh0OworICAgICAgICAgICAgICAgbm9kZSAhPSBOVUxMICYmIG5vZGUtPmNvbnRlbnQuc3ltICE9IE5VTEw7CisgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+bmV4dCkKKyAgICAgICAgICAgIDsKKyAgICAgICAgfQorICAgICAgYXZlciAobm9kZSAhPSBOVUxMKTsKKyAgICAgIGdyYW1tYXJfc3RhcnRfc3ltYm9sX3NldCAobm9kZS0+Y29udGVudC5zeW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnRlbnQuc3ltLT5sb2NhdGlvbik7CisgICAgfQorCiAgIC8qIEluc2VydCB0aGUgaW5pdGlhbCBydWxlLCB3aG9zZSBsaW5lIGlzIHRoYXQgb2YgdGhlIGZpcnN0IHJ1bGUKICAgICAgKG5vdCB0aGF0IG9mIHRoZSBzdGFydCBzeW1ib2wpOgogCiAgICAgIGFjY2VwdDogJXN0YXJ0IEVPRi4gICovCiAgIHsKLSAgICBzeW1ib2xfbGlzdCAqcCA9IHN5bWJvbF9saXN0X25ldyAoYWNjZXB0LCBlbXB0eV9sb2NhdGlvbik7CisgICAgc3ltYm9sX2xpc3QgKnAgPSBzeW1ib2xfbGlzdF9zeW1fbmV3IChhY2NlcHQsIGVtcHR5X2xvY2F0aW9uKTsKICAgICBwLT5sb2NhdGlvbiA9IGdyYW1tYXItPmxvY2F0aW9uOwotICAgIHAtPm5leHQgPSBzeW1ib2xfbGlzdF9uZXcgKHN0YXJ0c3ltYm9sLCBlbXB0eV9sb2NhdGlvbik7Ci0gICAgcC0+bmV4dC0+bmV4dCA9IHN5bWJvbF9saXN0X25ldyAoZW5kdG9rZW4sIGVtcHR5X2xvY2F0aW9uKTsKLSAgICBwLT5uZXh0LT5uZXh0LT5uZXh0ID0gc3ltYm9sX2xpc3RfbmV3IChOVUxMLCBlbXB0eV9sb2NhdGlvbik7CisgICAgcC0+bmV4dCA9IHN5bWJvbF9saXN0X3N5bV9uZXcgKHN0YXJ0c3ltYm9sLCBlbXB0eV9sb2NhdGlvbik7CisgICAgcC0+bmV4dC0+bmV4dCA9IHN5bWJvbF9saXN0X3N5bV9uZXcgKGVuZHRva2VuLCBlbXB0eV9sb2NhdGlvbik7CisgICAgcC0+bmV4dC0+bmV4dC0+bmV4dCA9IHN5bWJvbF9saXN0X3N5bV9uZXcgKE5VTEwsIGVtcHR5X2xvY2F0aW9uKTsKICAgICBwLT5uZXh0LT5uZXh0LT5uZXh0LT5uZXh0ID0gZ3JhbW1hcjsKICAgICBucnVsZXMgKz0gMTsKICAgICBucml0ZW1zICs9IDM7CiAgICAgZ3JhbW1hciA9IHA7CiAgIH0KIAotICBhc3NlcnQgKG5zeW1zIDw9IFNZTUJPTF9OVU1CRVJfTUFYSU1VTSAmJiBuc3ltcyA9PSBudG9rZW5zICsgbnZhcnMpOworICBhdmVyIChuc3ltcyA8PSBTWU1CT0xfTlVNQkVSX01BWElNVU0gJiYgbnN5bXMgPT0gbnRva2VucyArIG52YXJzKTsKIAogICAvKiBBc3NpZ24gdGhlIHN5bWJvbHMgdGhlaXIgc3ltYm9sIG51bWJlcnMuICBXcml0ZSAjZGVmaW5lcyBmb3IgdGhlCiAgICAgIHRva2VuIHN5bWJvbHMgaW50byBGREVGSU5FUyBpZiByZXF1ZXN0ZWQuICAqLwogICBzeW1ib2xzX3BhY2sgKCk7CiAKKyAgLyogU2NhbiBydWxlIGFjdGlvbnMgYWZ0ZXIgaW52b2tpbmcgc3ltYm9sX2NoZWNrX2FsaWFzX2NvbnNpc3RlbmN5IChpbgorICAgICBzeW1ib2xzX3BhY2sgYWJvdmUpIHNvIHRoYXQgdG9rZW4gdHlwZXMgYXJlIHNldCBjb3JyZWN0bHkgYmVmb3JlIHRoZSBydWxlCisgICAgIGFjdGlvbiB0eXBlIGNoZWNraW5nLgorCisgICAgIEJlZm9yZSBpbnZva2luZyBncmFtbWFyX3J1bGVfY2hlY2sgKGluIHBhY2tncmFtIGJlbG93KSBvbiBhbnkgcnVsZSwgbWFrZQorICAgICBzdXJlIGFsbCBhY3Rpb25zIGhhdmUgYWxyZWFkeSBiZWVuIHNjYW5uZWQgaW4gb3JkZXIgdG8gc2V0IGB1c2VkJyBmbGFncy4KKyAgICAgT3RoZXJ3aXNlLCBjaGVja2luZyB0aGF0IGEgbWlkcnVsZSdzICQkIHNob3VsZCBiZSBzZXQgd2lsbCBub3QgYWx3YXlzIHdvcmsKKyAgICAgcHJvcGVybHkgYmVjYXVzZSB0aGUgY2hlY2sgbXVzdCBmb3J3YXJkLXJlZmVyZW5jZSB0aGUgbWlkcnVsZSdzIHBhcmVudAorICAgICBydWxlLiAgRm9yIHRoZSBzYW1lIHJlYXNvbiwgYWxsIHRoZSBgdXNlZCcgZmxhZ3MgbXVzdCBiZSBzZXQgYmVmb3JlCisgICAgIGNoZWNraW5nIHdoZXRoZXIgdG8gcmVtb3ZlIGAkJyBmcm9tIGFueSBtaWRydWxlIHN5bWJvbCBuYW1lIChhbHNvIGluCisgICAgIHBhY2tncmFtKS4gICovCisgIHsKKyAgICBzeW1ib2xfbGlzdCAqc3ltOworICAgIGZvciAoc3ltID0gZ3JhbW1hcjsgc3ltOyBzeW0gPSBzeW0tPm5leHQpCisgICAgICBjb2RlX3Byb3BzX3RyYW5zbGF0ZV9jb2RlICgmc3ltLT5hY3Rpb25fcHJvcHMpOworICB9CisKICAgLyogQ29udmVydCB0aGUgZ3JhbW1hciBpbnRvIHRoZSBmb3JtYXQgZGVzY3JpYmVkIGluIGdyYW0uaC4gICovCiAgIHBhY2tncmFtICgpOwogCiAgIC8qIFRoZSBncmFtbWFyIGFzIGEgc3ltYm9sX2xpc3QgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gKi8KLSAgTElTVF9GUkVFIChzeW1ib2xfbGlzdCwgZ3JhbW1hcik7CisgIHN5bWJvbF9saXN0X2ZyZWUgKGdyYW1tYXIpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL3JlYWRlci5oIGIvc3JjL3JlYWRlci5oCmluZGV4IGYxMTBmNzAuLmUxNTRkZWIgMTAwNjQ0Ci0tLSBhL3NyYy9yZWFkZXIuaAorKysgYi9zcmMvcmVhZGVyLmgKQEAgLTEsMzAgKzEsMjkgQEAKIC8qIElucHV0IHBhcnNlciBmb3IgQmlzb24KIAotICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUKKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAzLCAyMDA1LTIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlCiAgICBGb3VuZGF0aW9uLCBJbmMuCiAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgogCi0gICBCaXNvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLSAgIEJpc29uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCBCaXNvbjsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAjaWZuZGVmIFJFQURFUl9IXwogIyBkZWZpbmUgUkVBREVSX0hfCiAKICMgaW5jbHVkZSAibG9jYXRpb24uaCIKICMgaW5jbHVkZSAic3ltbGlzdC5oIgorIyBpbmNsdWRlICJuYW1lZC1yZWYuaCIKIAogIyBpbmNsdWRlICJwYXJzZS1ncmFtLmgiCiAKQEAgLTMzLDI4ICszMiw5IEBACiAgIHN0cnVjdCBtZXJnZXJfbGlzdCogbmV4dDsKICAgdW5pcXN0ciBuYW1lOwogICB1bmlxc3RyIHR5cGU7CisgIGxvY2F0aW9uIHR5cGVfZGVjbGFyYXRpb25fbG9jYXRpb247CiB9IG1lcmdlcl9saXN0OwogCi0vKiBGcm9tIHRoZSBzY2FubmVyLiAgKi8KLWV4dGVybiBGSUxFICpncmFtX2luOwotZXh0ZXJuIGludCBncmFtX19mbGV4X2RlYnVnOwotZXh0ZXJuIGJvdW5kYXJ5IHNjYW5uZXJfY3Vyc29yOwotZXh0ZXJuIGNoYXIgKmxhc3Rfc3RyaW5nOwotZXh0ZXJuIGxvY2F0aW9uIGxhc3RfYnJhY2VkX2NvZGVfbG9jOwotZXh0ZXJuIGludCBtYXhfbGVmdF9zZW1hbnRpY19jb250ZXh0Owotdm9pZCBzY2FubmVyX2luaXRpYWxpemUgKHZvaWQpOwotdm9pZCBzY2FubmVyX2ZyZWUgKHZvaWQpOwotdm9pZCBzY2FubmVyX2xhc3Rfc3RyaW5nX2ZyZWUgKHZvaWQpOwotCi0vKiBUaGVzZSBhcmUgZGVjbGFyZWQgYnkgdGhlIHNjYW5uZXIsIGJ1dCBub3QgdXNlZC4gIFdlIHB1dCB0aGVtIGhlcmUKLSAgIHRvIHBhY2lmeSAibWFrZSBzeW50YXgtY2hlY2siLiAgKi8KLWV4dGVybiBGSUxFICpncmFtX291dDsKLWV4dGVybiBpbnQgZ3JhbV9saW5lbm87Ci0KLSMgZGVmaW5lIFlZX0RFQ0wgaW50IGdyYW1fbGV4IChZWVNUWVBFICp2YWwsIGxvY2F0aW9uICpsb2MpCi1ZWV9ERUNMOwotCi0KIC8qIEZyb20gdGhlIHBhcnNlci4gICovCiBleHRlcm4gaW50IGdyYW1fZGVidWc7CiBpbnQgZ3JhbV9wYXJzZSAodm9pZCk7CkBAIC02MywyMyArNDMsMjcgQEAKIAogLyogRnJvbSByZWFkZXIuYy4gKi8KIHZvaWQgZ3JhbW1hcl9zdGFydF9zeW1ib2xfc2V0IChzeW1ib2wgKnN5bSwgbG9jYXRpb24gbG9jKTsKLXZvaWQgcHJvbG9ndWVfYXVnbWVudCAoY29uc3QgY2hhciAqcHJvbG9ndWUsIGxvY2F0aW9uIGxvYyk7Ci12b2lkIGdyYW1tYXJfY3VycmVudF9ydWxlX2JlZ2luIChzeW1ib2wgKmxocywgbG9jYXRpb24gbG9jKTsKK3ZvaWQgZ3JhbW1hcl9jdXJyZW50X3J1bGVfYmVnaW4gKHN5bWJvbCAqbGhzLCBsb2NhdGlvbiBsb2MsCisJCQkJIG5hbWVkX3JlZiAqbGhzX25hbWVkX3JlZik7CiB2b2lkIGdyYW1tYXJfY3VycmVudF9ydWxlX2VuZCAobG9jYXRpb24gbG9jKTsKIHZvaWQgZ3JhbW1hcl9taWRydWxlX2FjdGlvbiAodm9pZCk7CiB2b2lkIGdyYW1tYXJfY3VycmVudF9ydWxlX3ByZWNfc2V0IChzeW1ib2wgKnByZWNzeW0sIGxvY2F0aW9uIGxvYyk7CiB2b2lkIGdyYW1tYXJfY3VycmVudF9ydWxlX2RwcmVjX3NldCAoaW50IGRwcmVjLCBsb2NhdGlvbiBsb2MpOwogdm9pZCBncmFtbWFyX2N1cnJlbnRfcnVsZV9tZXJnZV9zZXQgKHVuaXFzdHIgbmFtZSwgbG9jYXRpb24gbG9jKTsKLXZvaWQgZ3JhbW1hcl9jdXJyZW50X3J1bGVfc3ltYm9sX2FwcGVuZCAoc3ltYm9sICpzeW0sIGxvY2F0aW9uIGxvYyk7Ci12b2lkIGdyYW1tYXJfY3VycmVudF9ydWxlX2FjdGlvbl9hcHBlbmQgKGNvbnN0IGNoYXIgKmFjdGlvbiwgbG9jYXRpb24gbG9jKTsKLWV4dGVybiBzeW1ib2xfbGlzdCAqY3VycmVudF9ydWxlOwordm9pZCBncmFtbWFyX2N1cnJlbnRfcnVsZV9zeW1ib2xfYXBwZW5kIChzeW1ib2wgKnN5bSwgbG9jYXRpb24gbG9jLAorCQkJCQkgbmFtZWRfcmVmICpucmVmKTsKK3ZvaWQgZ3JhbW1hcl9jdXJyZW50X3J1bGVfYWN0aW9uX2FwcGVuZCAoY29uc3QgY2hhciAqYWN0aW9uLCBsb2NhdGlvbiBsb2MsCisJCQkJCSBuYW1lZF9yZWYgKm5yZWYpOwogdm9pZCByZWFkZXIgKHZvaWQpOwogdm9pZCBmcmVlX21lcmdlcl9mdW5jdGlvbnMgKHZvaWQpOwogCiBleHRlcm4gbWVyZ2VyX2xpc3QgKm1lcmdlX2Z1bmN0aW9uczsKIAogLyogV2FzICV1bmlvbiBzZWVuPyAgKi8KLWV4dGVybiBib29sIHR5cGVkOworZXh0ZXJuIGJvb2wgdW5pb25fc2VlbjsKKworLyogV2FzIGEgdGFnIHNlZW4/ICAqLworZXh0ZXJuIGJvb2wgdGFnX3NlZW47CiAKIC8qIFNob3VsZCBydWxlcyBoYXZlIGEgZGVmYXVsdCBwcmVjZWRlbmNlPyAgKi8KIGV4dGVybiBib29sIGRlZmF1bHRfcHJlYzsKZGlmZiAtLWdpdCBhL3NyYy9yZWR1Y2UuYyBiL3NyYy9yZWR1Y2UuYwppbmRleCAxYmI0MGYwLi41MzM4MzkzIDEwMDY0NAotLS0gYS9zcmMvcmVkdWNlLmMKKysrIGIvc3JjL3JlZHVjZS5jCkBAIC0xLDI0ICsxLDIyIEBACiAvKiBHcmFtbWFyIHJlZHVjdGlvbiBmb3IgQmlzb24uCiAKLSAgIENvcHlyaWdodCAoQykgMTk4OCwgMTk4OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNSwgMjAwNiBGcmVlCi0gICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDE5ODgtMTk4OSwgMjAwMC0yMDAzLCAyMDA1LTIwMTIgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLgogCiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KIAotICAgQmlzb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCi0gICBCaXNvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggQmlzb247IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogCiAvKiBSZWR1Y2UgdGhlIGdyYW1tYXI6IEZpbmQgYW5kIGVsaW1pbmF0ZSB1bnJlYWNoYWJsZSB0ZXJtaW5hbHMsCkBAIC0zMSwxMiArMjksMTIgQEAKICNpbmNsdWRlICJzeXN0ZW0uaCIKIAogI2luY2x1ZGUgPGJpdHNldC5oPgotI2luY2x1ZGUgPHF1b3RlYXJnLmg+CiAKICNpbmNsdWRlICJjb21wbGFpbi5oIgogI2luY2x1ZGUgImZpbGVzLmgiCiAjaW5jbHVkZSAiZ2V0YXJncy5oIgogI2luY2x1ZGUgImdyYW0uaCIKKyNpbmNsdWRlICJwcmludC14bWwuaCIKICNpbmNsdWRlICJyZWFkZXIuaCIKICNpbmNsdWRlICJyZWR1Y2UuaCIKICNpbmNsdWRlICJzeW10YWIuaCIKQEAgLTI0MCw3ICsyMzgsNyBAQAogICAgIHJ1bGVfbnVtYmVyIHI7CiAgICAgZm9yIChyID0gMDsgciA8IG5ydWxlczsgcisrKQogICAgICAgcnVsZXNbcl0udXNlZnVsID0gYml0c2V0X3Rlc3QgKFAsIHIpOwotICAgIGdyYW1tYXJfcnVsZXNfbmV2ZXJfcmVkdWNlZF9yZXBvcnQgKF8oInVzZWxlc3MgcnVsZSIpKTsKKyAgICBncmFtbWFyX3J1bGVzX3VzZWxlc3NfcmVwb3J0IChfKCJydWxlIHVzZWxlc3MgaW4gZ3JhbW1hciIpKTsKICAgfQogCiAgIC8qIE1hcCB0aGUgbm9udGVybWluYWxzIHRvIHRoZWlyIG5ldyBpbmRleDogdXNlZnVsIGZpcnN0LCB1c2VsZXNzCkBAIC0zMDEsNyArMjk5LDcgQEAKICAgICBpZiAoIWJpdHNldF90ZXN0IChWLCBpKSkKICAgICAgIHsKIAlub250ZXJtbWFwW2kgLSBudG9rZW5zXSA9IG4rKzsKLQl3YXJuX2F0IChzeW1ib2xzW2ldLT5sb2NhdGlvbiwgXygidXNlbGVzcyBub250ZXJtaW5hbDogJXMiKSwKKwl3YXJuX2F0IChzeW1ib2xzW2ldLT5sb2NhdGlvbiwgXygibm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiAlcyIpLAogCQkgc3ltYm9sc1tpXS0+dGFnKTsKICAgICAgIH0KIApAQCAtMzQ5LDcgKzM0Nyw3IEBACiAgIGlmIChudXNlbGVzc19ub250ZXJtaW5hbHMgPiAwKQogICAgIHsKICAgICAgIGludCBpOwotICAgICAgZnByaW50ZiAob3V0LCAiJXNcblxuIiwgXygiVXNlbGVzcyBub250ZXJtaW5hbHMiKSk7CisgICAgICBmcHJpbnRmIChvdXQsICIlc1xuXG4iLCBfKCJOb250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyIikpOwogICAgICAgZm9yIChpID0gMDsgaSA8IG51c2VsZXNzX25vbnRlcm1pbmFsczsgKytpKQogCWZwcmludGYgKG91dCwgIiAgICVzXG4iLCBzeW1ib2xzW25zeW1zICsgaV0tPnRhZyk7CiAgICAgICBmcHV0cyAoIlxuXG4iLCBvdXQpOwpAQCAtMzU5LDEwICszNTcsMTAgQEAKICAgICBib29sIGIgPSBmYWxzZTsKICAgICBpbnQgaTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbnRva2VuczsgaSsrKQotICAgICAgaWYgKCFiaXRzZXRfdGVzdCAoViwgaSkgJiYgIWJpdHNldF90ZXN0IChWMSwgaSkpCisgICAgICBpZiAocmVkdWNlX3Rva2VuX3VudXNlZF9pbl9ncmFtbWFyIChpKSkKIAl7CiAJICBpZiAoIWIpCi0JICAgIGZwcmludGYgKG91dCwgIiVzXG5cbiIsIF8oIlRlcm1pbmFscyB3aGljaCBhcmUgbm90IHVzZWQiKSk7CisJICAgIGZwcmludGYgKG91dCwgIiVzXG5cbiIsIF8oIlRlcm1pbmFscyB1bnVzZWQgaW4gZ3JhbW1hciIpKTsKIAkgIGIgPSB0cnVlOwogCSAgZnByaW50ZiAob3V0LCAiICAgJXNcbiIsIHN5bWJvbHNbaV0tPnRhZyk7CiAJfQpAQCAtMzcxLDE0ICszNjksMTEgQEAKICAgfQogCiAgIGlmIChudXNlbGVzc19wcm9kdWN0aW9ucyA+IDApCi0gICAgZ3JhbW1hcl9ydWxlc19wYXJ0aWFsX3ByaW50IChvdXQsIF8oIlVzZWxlc3MgcnVsZXMiKSwKLQkJCQkgcnVsZV91c2VsZXNzX3ApOworICAgIGdyYW1tYXJfcnVsZXNfcGFydGlhbF9wcmludCAob3V0LCBfKCJSdWxlcyB1c2VsZXNzIGluIGdyYW1tYXIiKSwKKwkJCQkgcnVsZV91c2VsZXNzX2luX2dyYW1tYXJfcCk7CiB9CiAMCiAKLQotCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgUmVwb3J0IHRoZSByZXN1bHRzIHRvIFNUREVSUi4gIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTM4NiwyOSArMzgxLDE2IEBACiBzdGF0aWMgdm9pZAogcmVkdWNlX3ByaW50ICh2b2lkKQogewotICBpZiAoeWFjY19mbGFnICYmIG51c2VsZXNzX3Byb2R1Y3Rpb25zKQotICAgIGZwcmludGYgKHN0ZGVyciwgbmdldHRleHQgKCIlZCBydWxlIG5ldmVyIHJlZHVjZWRcbiIsCi0JCQkgICAgICAgIiVkIHJ1bGVzIG5ldmVyIHJlZHVjZWRcbiIsCi0JCQkgICAgICAgbnVzZWxlc3NfcHJvZHVjdGlvbnMpLAotCSAgICAgbnVzZWxlc3NfcHJvZHVjdGlvbnMpOwotCi0gIGZwcmludGYgKHN0ZGVyciwgIiVzOiAlczogIiwgZ3JhbW1hcl9maWxlLCBfKCJ3YXJuaW5nIikpOwotCiAgIGlmIChudXNlbGVzc19ub250ZXJtaW5hbHMgPiAwKQotICAgIGZwcmludGYgKHN0ZGVyciwgbmdldHRleHQgKCIlZCB1c2VsZXNzIG5vbnRlcm1pbmFsIiwKLQkJCSAgICAgICAiJWQgdXNlbGVzcyBub250ZXJtaW5hbHMiLAotCQkJICAgICAgIG51c2VsZXNzX25vbnRlcm1pbmFscyksCi0JICAgICBudXNlbGVzc19ub250ZXJtaW5hbHMpOwotCi0gIGlmIChudXNlbGVzc19ub250ZXJtaW5hbHMgPiAwICYmIG51c2VsZXNzX3Byb2R1Y3Rpb25zID4gMCkKLSAgICBmcHJpbnRmIChzdGRlcnIsIF8oIiBhbmQgIikpOwotCisgICAgd2FybiAobmdldHRleHQgKCIlZCBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXIiLAorICAgICAgICAgICAgICAgICAgICAiJWQgbm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hciIsCisgICAgICAgICAgICAgICAgICAgIG51c2VsZXNzX25vbnRlcm1pbmFscyksCisgICAgICAgICAgbnVzZWxlc3Nfbm9udGVybWluYWxzKTsKICAgaWYgKG51c2VsZXNzX3Byb2R1Y3Rpb25zID4gMCkKLSAgICBmcHJpbnRmIChzdGRlcnIsIG5nZXR0ZXh0ICgiJWQgdXNlbGVzcyBydWxlIiwKLQkJCSAgICAgICAiJWQgdXNlbGVzcyBydWxlcyIsCi0JCQkgICAgICAgbnVzZWxlc3NfcHJvZHVjdGlvbnMpLAotCSAgICAgbnVzZWxlc3NfcHJvZHVjdGlvbnMpOwotICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworICAgIHdhcm4gKG5nZXR0ZXh0ICgiJWQgcnVsZSB1c2VsZXNzIGluIGdyYW1tYXIiLAorICAgICAgICAgICAgICAgICAgICAiJWQgcnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyIiwKKyAgICAgICAgICAgICAgICAgICAgbnVzZWxlc3NfcHJvZHVjdGlvbnMpLAorICAgICAgICAgIG51c2VsZXNzX3Byb2R1Y3Rpb25zKTsKIH0KIAwKIHZvaWQKQEAgLTQ1NSw2ICs0MzcsMTkgQEAKICAgICB9CiB9CiAKK2Jvb2wKK3JlZHVjZV90b2tlbl91bnVzZWRfaW5fZ3JhbW1hciAoc3ltYm9sX251bWJlciBpKQoreworICBhdmVyIChpIDwgbnRva2Vucyk7CisgIHJldHVybiAhYml0c2V0X3Rlc3QgKFYsIGkpICYmICFiaXRzZXRfdGVzdCAoVjEsIGkpOworfQorCitib29sCityZWR1Y2Vfbm9udGVybWluYWxfdXNlbGVzc19pbl9ncmFtbWFyIChzeW1ib2xfbnVtYmVyIGkpCit7CisgIGF2ZXIgKG50b2tlbnMgPD0gaSAmJiBpIDwgbnN5bXMgKyBudXNlbGVzc19ub250ZXJtaW5hbHMpOworICByZXR1cm4gbnN5bXMgPD0gaTsKK30KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgRnJlZSB0aGUgZ2xvYmFsIHNldHMgdXNlZCB0byBjb21wdXRlIHRoZSByZWR1Y2VkIGdyYW1tYXIuICB8CmRpZmYgLS1naXQgYS9zcmMvcmVkdWNlLmggYi9zcmMvcmVkdWNlLmgKaW5kZXggZGZkYWI2NS4uYzI4ODI0ZiAxMDA2NDQKLS0tIGEvc3JjL3JlZHVjZS5oCisrKyBiL3NyYy9yZWR1Y2UuaApAQCAtMSwyOSArMSwzMCBAQAogLyogR3JhbW1hciByZWR1Y3Rpb24gZm9yIEJpc29uLgogCi0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiwgMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4KIAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCiAKLSAgIEJpc29uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAotICAgQmlzb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIEJpc29uOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpZm5kZWYgUkVEVUNFX0hfCiAjIGRlZmluZSBSRURVQ0VfSF8KIAogdm9pZCByZWR1Y2VfZ3JhbW1hciAodm9pZCk7CiB2b2lkIHJlZHVjZV9vdXRwdXQgKEZJTEUgKm91dCk7Citib29sIHJlZHVjZV90b2tlbl91bnVzZWRfaW5fZ3JhbW1hciAoc3ltYm9sX251bWJlciBpKTsKK2Jvb2wgcmVkdWNlX25vbnRlcm1pbmFsX3VzZWxlc3NfaW5fZ3JhbW1hciAoc3ltYm9sX251bWJlciBpKTsKIHZvaWQgcmVkdWNlX2ZyZWUgKHZvaWQpOwogCiBleHRlcm4gc3ltYm9sX251bWJlciBudXNlbGVzc19ub250ZXJtaW5hbHM7CmRpZmYgLS1naXQgYS9zcmMvcmVsYXRpb24uYyBiL3NyYy9yZWxhdGlvbi5jCmluZGV4IDFkMmI0MmQuLjQ5NDI0YzAgMTAwNjQ0Ci0tLSBhL3NyYy9yZWxhdGlvbi5jCisrKyBiL3NyYy9yZWxhdGlvbi5jCkBAIC0xLDIyICsxLDIyIEBACiAvKiBCaW5hcnkgcmVsYXRpb25zLgotICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQtMjAwNSwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4KIAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCiAKLSAgIEJpc29uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAotICAgQmlzb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIEJpc29uOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpbmNsdWRlIDxjb25maWcuaD4KICNpbmNsdWRlICJzeXN0ZW0uaCIKZGlmZiAtLWdpdCBhL3NyYy9yZWxhdGlvbi5oIGIvc3JjL3JlbGF0aW9uLmgKaW5kZXggNDc5ZTQyZS4uODhjNjliNyAxMDA2NDQKLS0tIGEvc3JjL3JlbGF0aW9uLmgKKysrIGIvc3JjL3JlbGF0aW9uLmgKQEAgLTEsMjIgKzEsMjEgQEAKIC8qIEJpbmFyeSByZWxhdGlvbnMuCi0gICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KIAotICAgQmlzb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCi0gICBCaXNvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggQmlzb247IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogCiAjaWZuZGVmIFJFTEFUSU9OX0hfCmRpZmYgLS1naXQgYS9zcmMvc2Nhbi1jb2RlLWMuYyBiL3NyYy9zY2FuLWNvZGUtYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMDE4ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc2Nhbi1jb2RlLWMuYwpAQCAtMCwwICsxLDMgQEAKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlICJzeXN0ZW0uaCIKKyNpbmNsdWRlICJzY2FuLWNvZGUuYyIKZGlmZiAtLWdpdCBhL3NyYy9zY2FuLWNvZGUuYyBiL3NyYy9zY2FuLWNvZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjAxZGM5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3NjYW4tY29kZS5jCkBAIC0wLDAgKzEsMzE0OCBAQAorI2xpbmUgMiAic2Nhbi1jb2RlLmMiCisKKyNsaW5lIDQgInNjYW4tY29kZS5jIgorCisjZGVmaW5lICBZWV9JTlRfQUxJR05FRCBzaG9ydCBpbnQKKworLyogQSBsZXhpY2FsIHNjYW5uZXIgZ2VuZXJhdGVkIGJ5IGZsZXggKi8KKworLyogJW5vdC1mb3ItaGVhZGVyICovCisKKy8qICVpZi1jLW9ubHkgKi8KKy8qICVpZi1ub3QtcmVlbnRyYW50ICovCisjZGVmaW5lIHl5X2NyZWF0ZV9idWZmZXIgY29kZV9fY3JlYXRlX2J1ZmZlcgorI2RlZmluZSB5eV9kZWxldGVfYnVmZmVyIGNvZGVfX2RlbGV0ZV9idWZmZXIKKyNkZWZpbmUgeXlfZmxleF9kZWJ1ZyBjb2RlX19mbGV4X2RlYnVnCisjZGVmaW5lIHl5X2luaXRfYnVmZmVyIGNvZGVfX2luaXRfYnVmZmVyCisjZGVmaW5lIHl5X2ZsdXNoX2J1ZmZlciBjb2RlX19mbHVzaF9idWZmZXIKKyNkZWZpbmUgeXlfbG9hZF9idWZmZXJfc3RhdGUgY29kZV9fbG9hZF9idWZmZXJfc3RhdGUKKyNkZWZpbmUgeXlfc3dpdGNoX3RvX2J1ZmZlciBjb2RlX19zd2l0Y2hfdG9fYnVmZmVyCisjZGVmaW5lIHl5aW4gY29kZV9pbgorI2RlZmluZSB5eWxlbmcgY29kZV9sZW5nCisjZGVmaW5lIHl5bGV4IGNvZGVfbGV4CisjZGVmaW5lIHl5bGluZW5vIGNvZGVfbGluZW5vCisjZGVmaW5lIHl5b3V0IGNvZGVfb3V0CisjZGVmaW5lIHl5cmVzdGFydCBjb2RlX3Jlc3RhcnQKKyNkZWZpbmUgeXl0ZXh0IGNvZGVfdGV4dAorI2RlZmluZSB5eXdyYXAgY29kZV93cmFwCisjZGVmaW5lIHl5YWxsb2MgY29kZV9hbGxvYworI2RlZmluZSB5eXJlYWxsb2MgY29kZV9yZWFsbG9jCisjZGVmaW5lIHl5ZnJlZSBjb2RlX2ZyZWUKKworLyogJWVuZGlmICovCisvKiAlZW5kaWYgKi8KKy8qICVvay1mb3ItaGVhZGVyICovCisKKyNkZWZpbmUgRkxFWF9TQ0FOTkVSCisjZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCisjZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVSU0lPTiA1CisjZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNworI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAKKyNkZWZpbmUgRkxFWF9CRVRBCisjZW5kaWYKKworLyogJWlmLWMrKy1vbmx5ICovCisvKiAlZW5kaWYgKi8KKworLyogJWlmLWMtb25seSAqLworICAgIAorLyogJWVuZGlmICovCisKKy8qICVpZi1jLW9ubHkgKi8KKworLyogJWVuZGlmICovCisKKy8qIEZpcnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmljIGlzc3Vlcy4gKi8KKworLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJzLiAqLworLyogJWlmLWMtb25seSAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKy8qICVlbmRpZiAqLworCisvKiAlaWYtdGFibGVzLXNlcmlhbGl6YXRpb24gKi8KKy8qICVlbmRpZiAqLworLyogZW5kIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KKworLyogJWlmLWMtb3ItYysrICovCisvKiBmbGV4IGludGVnZXIgdHlwZSBkZWZpbml0aW9ucyAqLworCisjaWZuZGVmIEZMRVhJTlRfSAorI2RlZmluZSBGTEVYSU5UX0gKKworLyogQzk5IHN5c3RlbXMgaGF2ZSA8aW50dHlwZXMuaD4uIE5vbi1DOTkgc3lzdGVtcyBtYXkgb3IgbWF5IG5vdC4gKi8KKworI2lmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAorCisvKiBDOTkgc2F5cyB0byBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyBiZWZvcmUgaW5jbHVkaW5nIHN0ZGludC5oLAorICogaWYgeW91IHdhbnQgdGhlIGxpbWl0IChtYXgvbWluKSBtYWNyb3MgZm9yIGludCB0eXBlcy4gCisgKi8KKyNpZm5kZWYgX19TVERDX0xJTUlUX01BQ1JPUworI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDEKKyNlbmRpZgorCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KK3R5cGVkZWYgaW50OF90IGZsZXhfaW50OF90OwordHlwZWRlZiB1aW50OF90IGZsZXhfdWludDhfdDsKK3R5cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90OwordHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OworI2Vsc2UKK3R5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7Cit0eXBlZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OworCisvKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMuICovCisjaWZuZGVmIElOVDhfTUlOCisjZGVmaW5lIElOVDhfTUlOICAgICAgICAgICAgICAgKC0xMjgpCisjZW5kaWYKKyNpZm5kZWYgSU5UMTZfTUlOCisjZGVmaW5lIElOVDE2X01JTiAgICAgICAgICAgICAgKC0zMjc2Ny0xKQorI2VuZGlmCisjaWZuZGVmIElOVDMyX01JTgorI2RlZmluZSBJTlQzMl9NSU4gICAgICAgICAgICAgICgtMjE0NzQ4MzY0Ny0xKQorI2VuZGlmCisjaWZuZGVmIElOVDhfTUFYCisjZGVmaW5lIElOVDhfTUFYICAgICAgICAgICAgICAgKDEyNykKKyNlbmRpZgorI2lmbmRlZiBJTlQxNl9NQVgKKyNkZWZpbmUgSU5UMTZfTUFYICAgICAgICAgICAgICAoMzI3NjcpCisjZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUFYCisjZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgICAgKDIxNDc0ODM2NDcpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDhfTUFYCisjZGVmaW5lIFVJTlQ4X01BWCAgICAgICAgICAgICAgKDI1NVUpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDE2X01BWAorI2RlZmluZSBVSU5UMTZfTUFYICAgICAgICAgICAgICg2NTUzNVUpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDMyX01BWAorI2RlZmluZSBVSU5UMzJfTUFYICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKKyNlbmRpZgorCisjZW5kaWYgLyogISBDOTkgKi8KKworI2VuZGlmIC8qICEgRkxFWElOVF9IICovCisKKy8qICVlbmRpZiAqLworCisvKiAlaWYtYysrLW9ubHkgKi8KKy8qICVlbmRpZiAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKKworLyogVGhlICJjb25zdCIgc3RvcmFnZS1jbGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KKyNkZWZpbmUgWVlfVVNFX0NPTlNUCisKKyNlbHNlCS8qICEgX19jcGx1c3BsdXMgKi8KKworLyogQzk5IHJlcXVpcmVzIF9fU1REQ19fIHRvIGJlIGRlZmluZWQgYXMgMS4gKi8KKyNpZiBkZWZpbmVkIChfX1NURENfXykKKworI2RlZmluZSBZWV9VU0VfQ09OU1QKKworI2VuZGlmCS8qIGRlZmluZWQgKF9fU1REQ19fKSAqLworI2VuZGlmCS8qICEgX19jcGx1c3BsdXMgKi8KKworI2lmZGVmIFlZX1VTRV9DT05TVAorI2RlZmluZSB5eWNvbnN0IGNvbnN0CisjZWxzZQorI2RlZmluZSB5eWNvbnN0CisjZW5kaWYKKworLyogJW5vdC1mb3ItaGVhZGVyICovCisKKy8qIFJldHVybmVkIHVwb24gZW5kLW9mLWZpbGUuICovCisjZGVmaW5lIFlZX05VTEwgMAorLyogJW9rLWZvci1oZWFkZXIgKi8KKworLyogJW5vdC1mb3ItaGVhZGVyICovCisKKy8qIFByb21vdGVzIGEgcG9zc2libHkgbmVnYXRpdmUsIHBvc3NpYmx5IHNpZ25lZCBjaGFyIHRvIGFuIHVuc2lnbmVkCisgKiBpbnRlZ2VyIGZvciB1c2UgYXMgYW4gYXJyYXkgaW5kZXguICBJZiB0aGUgc2lnbmVkIGNoYXIgaXMgbmVnYXRpdmUsCisgKiB3ZSB3YW50IHRvIGluc3RlYWQgdHJlYXQgaXQgYXMgYW4gOC1iaXQgdW5zaWduZWQgY2hhciwgaGVuY2UgdGhlCisgKiBkb3VibGUgY2FzdC4KKyAqLworI2RlZmluZSBZWV9TQ19UT19VSShjKSAoKHVuc2lnbmVkIGludCkgKHVuc2lnbmVkIGNoYXIpIGMpCisvKiAlb2stZm9yLWhlYWRlciAqLworCisvKiAlaWYtcmVlbnRyYW50ICovCisvKiAlZW5kaWYgKi8KKworLyogJWlmLW5vdC1yZWVudHJhbnQgKi8KKworLyogJWVuZGlmICovCisKKy8qIEVudGVyIGEgc3RhcnQgY29uZGl0aW9uLiAgVGhpcyBtYWNybyByZWFsbHkgb3VnaHQgdG8gdGFrZSBhIHBhcmFtZXRlciwKKyAqIGJ1dCB3ZSBkbyBpdCB0aGUgZGlzZ3VzdGluZyBjcnVmdHkgd2F5IGZvcmNlZCBvbiB1cyBieSB0aGUgKCktbGVzcworICogZGVmaW5pdGlvbiBvZiBCRUdJTi4KKyAqLworI2RlZmluZSBCRUdJTiAoeXlfc3RhcnQpID0gMSArIDIgKgorCisvKiBUcmFuc2xhdGUgdGhlIGN1cnJlbnQgc3RhcnQgc3RhdGUgaW50byBhIHZhbHVlIHRoYXQgY2FuIGJlIGxhdGVyIGhhbmRlZAorICogdG8gQkVHSU4gdG8gcmV0dXJuIHRvIHRoZSBzdGF0ZS4gIFRoZSBZWVNUQVRFIGFsaWFzIGlzIGZvciBsZXgKKyAqIGNvbXBhdGliaWxpdHkuCisgKi8KKyNkZWZpbmUgWVlfU1RBUlQgKCgoeXlfc3RhcnQpIC0gMSkgLyAyKQorI2RlZmluZSBZWVNUQVRFIFlZX1NUQVJUCisKKy8qIEFjdGlvbiBudW1iZXIgZm9yIEVPRiBydWxlIG9mIGEgZ2l2ZW4gc3RhcnQgc3RhdGUuICovCisjZGVmaW5lIFlZX1NUQVRFX0VPRihzdGF0ZSkgKFlZX0VORF9PRl9CVUZGRVIgKyBzdGF0ZSArIDEpCisKKy8qIFNwZWNpYWwgYWN0aW9uIG1lYW5pbmcgInN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgZmlsZSIuICovCisjZGVmaW5lIFlZX05FV19GSUxFIGNvZGVfcmVzdGFydChjb2RlX2luICApCisKKyNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUl9DSEFSIDAKKworLyogU2l6ZSBvZiBkZWZhdWx0IGlucHV0IGJ1ZmZlci4gKi8KKyNpZm5kZWYgWVlfQlVGX1NJWkUKKyNkZWZpbmUgWVlfQlVGX1NJWkUgMTYzODQKKyNlbmRpZgorCisvKiBUaGUgc3RhdGUgYnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRlIHBlciBjaGFyYWN0ZXIgaW4gdGhlIG1haW4gYnVmZmVyLgorICovCisjZGVmaW5lIFlZX1NUQVRFX0JVRl9TSVpFICAgKChZWV9CVUZfU0laRSArIDIpICogc2l6ZW9mKHl5X3N0YXRlX3R5cGUpKQorCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCit0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKKyNlbmRpZgorCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CisjZW5kaWYKKworLyogJWlmLW5vdC1yZWVudHJhbnQgKi8KK2V4dGVybiB5eV9zaXplX3QgY29kZV9sZW5nOworLyogJWVuZGlmICovCisKKy8qICVpZi1jLW9ubHkgKi8KKy8qICVpZi1ub3QtcmVlbnRyYW50ICovCitleHRlcm4gRklMRSAqY29kZV9pbiwgKmNvZGVfb3V0OworLyogJWVuZGlmICovCisvKiAlZW5kaWYgKi8KKworI2RlZmluZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAorI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEKKyNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKKworICAgICNkZWZpbmUgWVlfTEVTU19MSU5FTk8obikKKyAgICAKKy8qIFJldHVybiBhbGwgYnV0IHRoZSBmaXJzdCAibiIgbWF0Y2hlZCBjaGFyYWN0ZXJzIGJhY2sgdG8gdGhlIGlucHV0IHN0cmVhbS4gKi8KKyNkZWZpbmUgeXlsZXNzKG4pIFwKKwlkbyBcCisJCXsgXAorCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCBjb2RlX3RleHQuICovIFwKKyAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKKyAgICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAorCQkqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsgXAorCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUIFwKKwkJKHl5X2NfYnVmX3ApID0geXlfY3AgPSB5eV9icCArIHl5bGVzc19tYWNyb19hcmcgLSBZWV9NT1JFX0FESjsgXAorCQlZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgY29kZV90ZXh0IGFnYWluICovIFwKKwkJfSBcCisJd2hpbGUgKCAwICkKKworI2RlZmluZSB1bnB1dChjKSB5eXVucHV0KCBjLCAoeXl0ZXh0X3B0cikgICkKKworI2lmbmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKK3N0cnVjdCB5eV9idWZmZXJfc3RhdGUKKwl7CisvKiAlaWYtYy1vbmx5ICovCisJRklMRSAqeXlfaW5wdXRfZmlsZTsKKy8qICVlbmRpZiAqLworCisvKiAlaWYtYysrLW9ubHkgKi8KKy8qICVlbmRpZiAqLworCisJY2hhciAqeXlfY2hfYnVmOwkJLyogaW5wdXQgYnVmZmVyICovCisJY2hhciAqeXlfYnVmX3BvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gaW4gaW5wdXQgYnVmZmVyICovCisKKwkvKiBTaXplIG9mIGlucHV0IGJ1ZmZlciBpbiBieXRlcywgbm90IGluY2x1ZGluZyByb29tIGZvciBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCXl5X3NpemVfdCB5eV9idWZfc2l6ZTsKKworCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwl5eV9zaXplX3QgeXlfbl9jaGFyczsKKworCS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKKwkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bworCSAqIGRlbGV0ZSBpdC4KKwkgKi8KKwlpbnQgeXlfaXNfb3VyX2J1ZmZlcjsKKworCS8qIFdoZXRoZXIgdGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0IHNvdXJjZTsgaWYgc28sIGFuZAorCSAqIGlmIHdlJ3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1dCwgdGhlbiB3ZSB3YW50IHRvIHVzZSBnZXRjKCkKKwkgKiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRvIG1ha2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlucHV0IGFmdGVyCisJICogZWFjaCBuZXdsaW5lLgorCSAqLworCWludCB5eV9pc19pbnRlcmFjdGl2ZTsKKworCS8qIFdoZXRoZXIgd2UncmUgY29uc2lkZXJlZCB0byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KKwkgKiBJZiBzbywgJ14nIHJ1bGVzIHdpbGwgYmUgYWN0aXZlIG9uIHRoZSBuZXh0IG1hdGNoLCBvdGhlcndpc2UKKwkgKiBub3QuCisJICovCisJaW50IHl5X2F0X2JvbDsKKworICAgIGludCB5eV9ic19saW5lbm87IC8qKjwgVGhlIGxpbmUgY291bnQuICovCisgICAgaW50IHl5X2JzX2NvbHVtbjsgLyoqPCBUaGUgY29sdW1uIGNvdW50LiAqLworICAgIAorCS8qIFdoZXRoZXIgdG8gdHJ5IHRvIGZpbGwgdGhlIGlucHV0IGJ1ZmZlciB3aGVuIHdlIHJlYWNoIHRoZQorCSAqIGVuZCBvZiBpdC4KKwkgKi8KKwlpbnQgeXlfZmlsbF9idWZmZXI7CisKKwlpbnQgeXlfYnVmZmVyX3N0YXR1czsKKworI2RlZmluZSBZWV9CVUZGRVJfTkVXIDAKKyNkZWZpbmUgWVlfQlVGRkVSX05PUk1BTCAxCisJLyogV2hlbiBhbiBFT0YncyBiZWVuIHNlZW4gYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSB0ZXh0IHRvIHByb2Nlc3MKKwkgKiB0aGVuIHdlIG1hcmsgdGhlIGJ1ZmZlciBhcyBZWV9FT0ZfUEVORElORywgdG8gaW5kaWNhdGUgdGhhdCB3ZQorCSAqIHNob3VsZG4ndCB0cnkgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBzb3VyY2UgYW55IG1vcmUuICBXZSBtaWdodAorCSAqIHN0aWxsIGhhdmUgYSBidW5jaCBvZiB0b2tlbnMgdG8gbWF0Y2gsIHRob3VnaCwgYmVjYXVzZSBvZgorCSAqIHBvc3NpYmxlIGJhY2tpbmctdXAuCisJICoKKwkgKiBXaGVuIHdlIGFjdHVhbGx5IHNlZSB0aGUgRU9GLCB3ZSBjaGFuZ2UgdGhlIHN0YXR1cyB0byAibmV3IgorCSAqICh2aWEgY29kZV9yZXN0YXJ0KCkpLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBjb250aW51ZSBzY2FubmluZyBieQorCSAqIGp1c3QgcG9pbnRpbmcgY29kZV9pbiBhdCBhIG5ldyBpbnB1dCBmaWxlLgorCSAqLworI2RlZmluZSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgMgorCisJfTsKKyNlbmRpZiAvKiAhWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURSAqLworCisvKiAlaWYtYy1vbmx5IFN0YW5kYXJkIChub24tQysrKSBkZWZpbml0aW9uICovCisvKiAlbm90LWZvci1oZWFkZXIgKi8KKworLyogJWlmLW5vdC1yZWVudHJhbnQgKi8KKworLyogU3RhY2sgb2YgaW5wdXQgYnVmZmVycy4gKi8KK3N0YXRpYyBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7IC8qKjwgaW5kZXggb2YgdG9wIG9mIHN0YWNrLiAqLworc3RhdGljIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfbWF4ID0gMDsgLyoqPCBjYXBhY2l0eSBvZiBzdGFjay4gKi8KK3N0YXRpYyBZWV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2sgPSAwOyAvKio8IFN0YWNrIGFzIGFuIGFycmF5LiAqLworLyogJWVuZGlmICovCisvKiAlb2stZm9yLWhlYWRlciAqLworCisvKiAlZW5kaWYgKi8KKworLyogV2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZmZXIgc3RhdGVzIGluIGNhc2UgaW4gdGhlCisgKiBmdXR1cmUgd2Ugd2FudCB0byBwdXQgdGhlIGJ1ZmZlciBzdGF0ZXMgaW4gYSBtb3JlIGdlbmVyYWwKKyAqICJzY2FubmVyIHN0YXRlIi4KKyAqCisgKiBSZXR1cm5zIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBvciBOVUxMLgorICovCisjZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSICggKHl5X2J1ZmZlcl9zdGFjaykgXAorICAgICAgICAgICAgICAgICAgICAgICAgICA/ICh5eV9idWZmZXJfc3RhY2spWyh5eV9idWZmZXJfc3RhY2tfdG9wKV0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwpCisKKy8qIFNhbWUgYXMgcHJldmlvdXMgbWFjcm8sIGJ1dCB1c2VmdWwgd2hlbiB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFjayBpcyBub3QKKyAqIE5VTEwgb3Igd2hlbiB3ZSBuZWVkIGFuIGx2YWx1ZS4gRm9yIGludGVybmFsIHVzZSBvbmx5LgorICovCisjZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSAoeXlfYnVmZmVyX3N0YWNrKVsoeXlfYnVmZmVyX3N0YWNrX3RvcCldCisKKy8qICVpZi1jLW9ubHkgU3RhbmRhcmQgKG5vbi1DKyspIGRlZmluaXRpb24gKi8KKworLyogJWlmLW5vdC1yZWVudHJhbnQgKi8KKy8qICVub3QtZm9yLWhlYWRlciAqLworCisvKiB5eV9ob2xkX2NoYXIgaG9sZHMgdGhlIGNoYXJhY3RlciBsb3N0IHdoZW4gY29kZV90ZXh0IGlzIGZvcm1lZC4gKi8KK3N0YXRpYyBjaGFyIHl5X2hvbGRfY2hhcjsKK3N0YXRpYyB5eV9zaXplX3QgeXlfbl9jaGFyczsJCS8qIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYgKi8KK3l5X3NpemVfdCBjb2RlX2xlbmc7CisKKy8qIFBvaW50cyB0byBjdXJyZW50IGNoYXJhY3RlciBpbiBidWZmZXIuICovCitzdGF0aWMgY2hhciAqeXlfY19idWZfcCA9IChjaGFyICopIDA7CitzdGF0aWMgaW50IHl5X2luaXQgPSAwOwkJLyogd2hldGhlciB3ZSBuZWVkIHRvIGluaXRpYWxpemUgKi8KK3N0YXRpYyBpbnQgeXlfc3RhcnQgPSAwOwkvKiBzdGFydCBzdGF0ZSBudW1iZXIgKi8KKworLyogRmxhZyB3aGljaCBpcyB1c2VkIHRvIGFsbG93IGNvZGVfd3JhcCgpJ3MgdG8gZG8gYnVmZmVyIHN3aXRjaGVzCisgKiBpbnN0ZWFkIG9mIHNldHRpbmcgdXAgYSBmcmVzaCBjb2RlX2luLiAgQSBiaXQgb2YgYSBoYWNrIC4uLgorICovCitzdGF0aWMgaW50IHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZjsKKy8qICVvay1mb3ItaGVhZGVyICovCisKKy8qICVlbmRpZiAqLworCit2b2lkIGNvZGVfcmVzdGFydCAoRklMRSAqaW5wdXRfZmlsZSAgKTsKK3ZvaWQgY29kZV9fc3dpdGNoX3RvX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgICk7CitZWV9CVUZGRVJfU1RBVEUgY29kZV9fY3JlYXRlX2J1ZmZlciAoRklMRSAqZmlsZSxpbnQgc2l6ZSAgKTsKK3ZvaWQgY29kZV9fZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgICk7Cit2b2lkIGNvZGVfX2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgICk7Cit2b2lkIGNvZGVfcHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICApOwordm9pZCBjb2RlX3BvcF9idWZmZXJfc3RhdGUgKHZvaWQgKTsKKworc3RhdGljIHZvaWQgY29kZV9lbnN1cmVfYnVmZmVyX3N0YWNrICh2b2lkICk7CitzdGF0aWMgdm9pZCBjb2RlX19sb2FkX2J1ZmZlcl9zdGF0ZSAodm9pZCApOworc3RhdGljIHZvaWQgY29kZV9faW5pdF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiLEZJTEUgKmZpbGUgICk7CisKKyNkZWZpbmUgWVlfRkxVU0hfQlVGRkVSIGNvZGVfX2ZsdXNoX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiApCisKK1lZX0JVRkZFUl9TVEFURSBjb2RlX19zY2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5eV9zaXplX3Qgc2l6ZSAgKTsKK1lZX0JVRkZFUl9TVEFURSBjb2RlX19zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgICk7CitZWV9CVUZGRVJfU1RBVEUgY29kZV9fc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRlcyx5eV9zaXplX3QgbGVuICApOworCisvKiAlZW5kaWYgKi8KKwordm9pZCAqY29kZV9hbGxvYyAoeXlfc2l6ZV90ICApOwordm9pZCAqY29kZV9yZWFsbG9jICh2b2lkICoseXlfc2l6ZV90ICApOwordm9pZCBjb2RlX2ZyZWUgKHZvaWQgKiAgKTsKKworI2RlZmluZSB5eV9uZXdfYnVmZmVyIGNvZGVfX2NyZWF0ZV9idWZmZXIKKworI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJhY3RpdmUpIFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAorICAgICAgICBjb2RlX2Vuc3VyZV9idWZmZXJfc3RhY2sgKCk7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAorICAgICAgICAgICAgY29kZV9fY3JlYXRlX2J1ZmZlcihjb2RlX2luLFlZX0JVRl9TSVpFICk7IFwKKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlID0gaXNfaW50ZXJhY3RpdmU7IFwKKwl9CisKKyNkZWZpbmUgeXlfc2V0X2JvbChhdF9ib2wpIFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXtcCisgICAgICAgIGNvZGVfZW5zdXJlX2J1ZmZlcl9zdGFjayAoKTsgXAorCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCisgICAgICAgICAgICBjb2RlX19jcmVhdGVfYnVmZmVyKGNvZGVfaW4sWVlfQlVGX1NJWkUgKTsgXAorCX0gXAorCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gYXRfYm9sOyBcCisJfQorCisjZGVmaW5lIFlZX0FUX0JPTCgpIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCkKKworLyogJSUgWzEuMF0gY29kZV90ZXh0L2NvZGVfaW4vY29kZV9vdXQveXlfc3RhdGVfdHlwZS9jb2RlX2xpbmVubyBldGMuIGRlZidzICYgaW5pdCBnbyBoZXJlICovCisvKiBCZWdpbiB1c2VyIHNlY3QzICovCisKKyNkZWZpbmUgY29kZV93cmFwKCkgMQorI2RlZmluZSBZWV9TS0lQX1lZV1JBUAorCisjZGVmaW5lIEZMRVhfREVCVUcKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZX0NIQVI7CisKK0ZJTEUgKmNvZGVfaW4gPSAoRklMRSAqKSAwLCAqY29kZV9vdXQgPSAoRklMRSAqKSAwOworCit0eXBlZGVmIGludCB5eV9zdGF0ZV90eXBlOworCitleHRlcm4gaW50IGNvZGVfbGluZW5vOworCitpbnQgY29kZV9saW5lbm8gPSAxOworCitleHRlcm4gY2hhciAqY29kZV90ZXh0OworI2RlZmluZSB5eXRleHRfcHRyIGNvZGVfdGV4dAorCisvKiAlaWYtYy1vbmx5IFN0YW5kYXJkIChub24tQysrKSBkZWZpbml0aW9uICovCisKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAodm9pZCApOworc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAoeXlfc3RhdGVfdHlwZSBjdXJyZW50X3N0YXRlICApOworc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHZvaWQgKTsKK3N0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNnW10gICk7CisKKy8qICVlbmRpZiAqLworCisvKiBEb25lIGFmdGVyIHRoZSBjdXJyZW50IHBhdHRlcm4gaGFzIGJlZW4gbWF0Y2hlZCBhbmQgYmVmb3JlIHRoZQorICogY29ycmVzcG9uZGluZyBhY3Rpb24gLSBzZXRzIHVwIGNvZGVfdGV4dC4KKyAqLworI2RlZmluZSBZWV9ET19CRUZPUkVfQUNUSU9OIFwKKwkoeXl0ZXh0X3B0cikgPSB5eV9icDsgXAorLyogJSUgWzIuMF0gY29kZSB0byBmaWRkbGUgY29kZV90ZXh0IGFuZCBjb2RlX2xlbmcgZm9yIHl5bW9yZSgpIGdvZXMgaGVyZSBcICovXAorCWNvZGVfbGVuZyA9IChzaXplX3QpICh5eV9jcCAtIHl5X2JwKTsgXAorCSh5eV9ob2xkX2NoYXIpID0gKnl5X2NwOyBcCisJKnl5X2NwID0gJ1wwJzsgXAorLyogJSUgWzMuMF0gY29kZSB0byBjb3B5IHl5dGV4dF9wdHIgdG8gY29kZV90ZXh0W10gZ29lcyBoZXJlLCBpZiAlYXJyYXkgXCAqL1wKKwkoeXlfY19idWZfcCkgPSB5eV9jcDsKKworLyogJSUgWzQuMF0gZGF0YSB0YWJsZXMgZm9yIHRoZSBERkEgYW5kIHRoZSB1c2VyJ3Mgc2VjdGlvbiAxIGRlZmluaXRpb25zIGdvIGhlcmUgKi8KKyNkZWZpbmUgWVlfTlVNX1JVTEVTIDI5CisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMzAKKy8qIFRoaXMgc3RydWN0IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKKyAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNzYXJ5LiAqLworc3RydWN0IHl5X3RyYW5zX2luZm8KKwl7CisJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKKwlmbGV4X2ludDMyX3QgeXlfbnh0OworCX07CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0WzEwMV0gPQorICAgIHsgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAzLCAgICAzLCAgICA0LCAgICA0LCAgICA0LCAgICA0LAorICAgICAgIDE5LCAgIDE5LCAgICAwLCAgICAwLCAgIDMwLCAgIDI4LCAgIDI3LCAgIDI4LCAgICAyLCAgIDI4LAorICAgICAgICA2LCAgIDI4LCAgICA1LCAgIDI0LCAgIDIxLCAgIDIwLCAgIDIwLCAgICA4LCAgIDE4LCAgIDExLAorICAgICAgICA3LCAgIDI0LCAgIDE1LCAgIDExLCAgIDIzLCAgIDIzLCAgIDEyLCAgIDI0LCAgIDE2LCAgIDE3LAorICAgICAgICA4LCAgIDExLCAgICA3LCAgIDI4LCAgIDExLCAgIDEyLCAgICAxLCAgICAwLCAgICAwLCAgICAzLAorICAgICAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgIDEzLCAgICAwLCAgIDEzLCAgIDEzLCAgICAwLCAgICAwLAorICAgICAgICA5LCAgIDEwLCAgICAwLCAgIDE0LCAgICAwLCAgIDE0LCAgIDE0LCAgICAwLCAgIDIzLCAgIDIzLAorICAgICAgICAwLCAgIDE5LCAgIDI1LCAgICAwLCAgIDI2LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAorICAgICAgICAwLCAgICAwLCAgIDEzLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgIDE0LCAgICAwLCAgIDIzLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgIDIzLCAgICAwLCAgIDIzLCAgIDIyLCAgICAwCisKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAzLAorICAgICAgICA0LCAgICAyLCAgICA1LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAyLCAgICAxLCAgICA2LCAgICA3LCAgICA4LCAgICAxLCAgICAxLCAgICA5LCAgICAxLAorICAgICAgICAxLCAgIDEwLCAgICAxLCAgICAxLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE0LCAgIDE0LAorICAgICAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAgICAxLCAgIDE1LCAgIDE2LAorICAgICAgICAxLCAgIDE3LCAgICAxLCAgIDE4LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIxLAorICAgICAgIDIwLCAgIDIwLCAgIDIyLCAgIDIwLCAgIDIwLCAgIDIzLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLAorICAgICAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDI0LCAgIDIwLAorICAgICAgIDI1LCAgIDI2LCAgIDI3LCAgICAxLCAgIDIwLCAgICAxLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLAorCisgICAgICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsCisgICAgICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsCisgICAgICAgMjAsICAgMjAsICAgMjgsICAgIDEsICAgMjksICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMQorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVszMV0gPQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICAxLCAgICAxLAorICAgICAgICA0LCAgICA1LCAgICAxLCAgICA2LCAgICAxLCAgICAxLCAgICAyLCAgICAxLCAgICA3LCAgICA3LAorICAgICAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICAzLCAgICAxLCAgICA4LCAgICAxLCAgICAxLCAgICAyCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzExM10gPQorICAgIHsgICAwLAorICAgICAgICAwLCAgICAxLCAgIDIxLCAgIDQxLCAgIDY2LCAgICAwLCAgICA0LCAgICA4LCAgIDEyLCAgIDE0LAorICAgICAgIDkzLCAgICAwLCAgMTE4LCAgICAwLCAgMjQyLCAgMjQzLCAgMjQzLCAgICA3LCAgMjQzLCAgICAwLAorICAgICAgMjQzLCAgIDM5LCAgMjQzLCAgMjQzLCAgMjQzLCAgMjQzLCAgMjQzLCAgMjQzLCAgMjQzLCAgMTM4LAorICAgICAgMjQzLCAgIDM0LCAgMjQzLCAgIDQyLCAgICAwLCAgMjE3LCAgMjQzLCAgIDMzLCAgMjQzLCAgMjQzLAorICAgICAgMjQzLCAgICA4LCAgMjQzLCAgIDQ0LCAgMjMyLCAgMjQzLCAgMjQzLCAgIDU5LCAgIDY5LCAgMjEzLAorICAgICAgMjQzLCAgIDczLCAgMjEyLCAgIDc2LCAgMjQzLCAgMjIzLCAgICAwLCAgMjIyLCAgICAwLCAgICAwLAorICAgICAgMjQzLCAgMjQzLCAgIDc5LCAgMjQzLCAgMjA1LCAgICAwLCAgMjAyLCAgICAwLCAgICAwLCAgMTg4LAorICAgICAgIDgzLCAgMTc1LCAgMjQzLCAgICAwLCAgMjQzLCAgIDg2LCAgIDE5LCAgMTI2LCAgMTMwLCAgMTM1LAorICAgICAgMTM4LCAgMTIyLCAgICAwLCAgMTUxLCAgMTQwLCAgMTYyLCAgMTQzLCAgICAwLCAgMTI4LCAgMTMyLAorICAgICAgMTY4LCAgMTMwLCAgMTI4LCAgMTA4LCAgIDM3LCAgIDM2LCAgIDQ3LCAgIDI5LCAgICAwLCAgMjQzLAorCisgICAgICAxNzIsICAxODAsICAxODYsICAxODgsICAxOTIsICAxOTksICAyMDMsICAyMDcsICAyMTAsICAyMTcsCisgICAgICAyMjIsICAyMjcKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZlsxMTNdID0KKyAgICB7ICAgMCwKKyAgICAgIDEwMSwgIDEwMSwgIDEwMSwgIDEwMSwgIDEwMSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKKyAgICAgIDEwMCwgICAxMSwgIDEwMSwgICAxMywgIDEwMCwgIDEwMCwgIDEwMCwgIDEwMCwgIDEwMCwgIDEwMCwKKyAgICAgIDEwMCwgIDEwMiwgIDEwMCwgIDEwMCwgIDEwMCwgIDEwMCwgIDEwMCwgIDEwMCwgIDEwMCwgIDEwMCwKKyAgICAgIDEwMCwgIDEwMCwgIDEwMCwgIDEwMywgIDEwNCwgIDEwNCwgIDEwMCwgIDEwMCwgIDEwMCwgIDEwMCwKKyAgICAgIDEwMCwgIDEwMCwgIDEwMCwgIDEwMCwgIDEwMCwgIDEwMCwgIDEwMCwgIDEwMCwgIDEwMCwgIDEwMCwKKyAgICAgIDEwMCwgIDEwMCwgIDEwMCwgIDEwMCwgIDEwMCwgIDEwMCwgIDEwNSwgIDEwMCwgIDEwNiwgIDEwNywKKyAgICAgIDEwMCwgIDEwMCwgIDEwMCwgIDEwMCwgIDEwMCwgIDEwOCwgIDEwMCwgIDEwOSwgIDEwNCwgIDEwNCwKKyAgICAgIDEwMCwgIDEwMCwgIDEwMCwgIDExMCwgIDEwMCwgIDEwMCwgIDEwMCwgIDEwMCwgIDEwMCwgIDEwMCwKKyAgICAgIDEwMCwgIDEwMiwgIDEwNSwgIDEwNiwgIDExMSwgIDEwMCwgIDEwMCwgIDEwOCwgIDExMiwgIDEwNCwKKyAgICAgIDEwMCwgIDExMCwgICAzMCwgIDExMSwgIDExMiwgIDEwNCwgIDEwMCwgIDEwNCwgIDEwNCwgICAgMCwKKworICAgICAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLAorICAgICAgMTAwLCAgMTAwCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbMjc0XSA9CisgICAgeyAgIDAsCisgICAgICAxMDAsICAgNDksICAgNTAsICAgNDksICAxMDAsICAxMDAsICAgMTYsICAgMTcsICAgMTcsICAgMjEsCisgICAgICAgMTYsICAxMDAsICAxMDAsICAgMjEsICAgMTYsICAgNzMsICAgMTYsICAgMTcsICAgMTcsICAgNDcsCisgICAgICAgMjMsICAxMDAsICAgMjMsICAgNzQsICAgMTcsICAgMTcsICAgMTcsICAgMTcsICAgMTcsICAgMjIsCisgICAgICAgMTgsICAgNDcsICAgNDgsICAgMjIsICAgNzEsICAgNzIsICAgNzEsICAgMjIsICAgMTcsICAgMjIsCisgICAgICAgNTIsICAgNTMsICAgNTIsICAgNjEsICAgNDgsICAgMTcsICAgNjIsICAgMTcsICAgMTcsICAgNjQsCisgICAgICAgMTgsICAgOTksICAgNjUsICAgNjEsICAgNzMsICAgNjcsICAgNjIsICAgOTgsICAgMTcsICAgNjMsCisgICAgICAgNzYsICAgNzcsICAgNzYsICAgNjQsICAgNTQsICAgMTcsICAgNjgsICAgMTcsICAgMTksICAgNjMsCisgICAgICAgNDksICAgNTAsICAgNDksICAgMTcsICAgNzksICAgNTMsICAgNzksICAgODEsICAgODIsICAgODEsCisgICAgICAgODYsICAgODcsICAgODYsICAgMTcsICAgNzEsICAgNzIsICAgNzEsICAgNzYsICAgNzcsICAgNzYsCisgICAgICAgMTcsICAgMjAsICAgMTcsICAgMjQsICAgMjUsICAgMjYsICAgMjQsICAgMjcsICAgMjgsICAgMjksCisKKyAgICAgICAzMCwgICAzMSwgICAyNCwgICAyNCwgICAyNCwgICAzMiwgICAyNCwgICAzMywgICAyNCwgICAyNCwKKyAgICAgICAzNCwgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAzNiwgICAzNywgICAzOCwgICAzNywKKyAgICAgICAzOSwgICA0MCwgICAyNCwgICA0MSwgIDEwMCwgICA0MiwgICA0MywgICA0OSwgICA1MCwgICA0OSwKKyAgICAgICA0NCwgICA3OSwgICA1MywgICA3OSwgICA1NSwgICA0NSwgICA3OSwgICA1MywgICA3OSwgICA4MSwKKyAgICAgICA4MiwgICA4MSwgICA0NiwgIDEwMCwgICA0NiwgICA1NSwgICA5NywgICA1NCwgICA1NiwgICA1NywKKyAgICAgICA5NiwgICA1OCwgICA2MSwgICA1OSwgICA2NCwgICA2MiwgICA1NywgICA1NywgICA1NywgICA1NywKKyAgICAgICA1NywgICA1NywgICA2MCwgICA4NiwgICA4NywgICA4NiwgICA1NSwgICA5MywgICA2MywgICA3MSwKKyAgICAgICA3MiwgICA3MSwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwKKyAgICAgICA1MSwgICA1MSwgICA1MSwgICA1MSwgICA1MSwgICA1MSwgICA1MSwgICA1MSwgICA2NiwgICA2NiwKKyAgICAgICA2NiwgICA2NiwgICA2NiwgICA2OSwgICA2OSwgICA4MywgICA4MywgICA4MywgICA4MywgICA4NCwKKworICAgICAgIDkxLCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg1LCAgIDkwLCAgIDg1LAorICAgICAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg5LCAgIDY3LCAgIDg5LCAgIDkyLCAgIDY3LCAgIDkyLAorICAgICAgIDkyLCAgIDkyLCAgIDkyLCAgIDkyLCAgIDkyLCAgIDk0LCAgIDk0LCAgIDk0LCAgIDk0LCAgIDk0LAorICAgICAgIDk1LCAgIDk1LCAgIDk1LCAgIDk1LCAgIDk1LCAgIDU4LCAgIDU4LCAgIDgwLCAgIDc4LCAgIDc1LAorICAgICAgIDcwLCAgMTAwLCAgIDE1LCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLAorICAgICAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLAorICAgICAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLAorICAgICAgMTAwLCAgMTAwLCAgMTAwCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbMjc0XSA9CisgICAgeyAgIDAsCisgICAgICAgIDAsICAgMjAsICAgMjAsICAgMjAsICAgIDAsICAgIDAsICAgIDcsICAgIDEsICAgIDIsICAgIDcsCisgICAgICAgIDgsICAgIDAsICAgIDAsICAgIDgsICAgIDksICAgNDIsICAgMTAsICAgIDEsICAgIDIsICAgMTgsCisgICAgICAgIDksICAgIDAsICAgMTAsICAgNDIsICAgIDEsICAgIDIsICAgIDEsICAgIDIsICAgIDMsICAgIDcsCisgICAgICAgIDMsICAgNzcsICAgMTgsICAgIDgsICAgMzgsICAgMzgsICAgMzgsICAgIDksICAgIDMsICAgMTAsCisgICAgICAgMjIsICAgMjIsICAgMjIsICAgMzIsICAgNzcsICAgIDMsICAgMzIsICAgIDMsICAgIDQsICAgMzQsCisgICAgICAgIDQsICAgOTgsICAgMzQsICAgNDQsICAgOTcsICAgMzQsICAgNDQsICAgOTYsICAgIDQsICAgMzIsCisgICAgICAgNDgsICAgNDgsICAgNDgsICAgOTUsICAgMjIsICAgIDQsICAgMzQsICAgIDQsICAgIDUsICAgNDQsCisgICAgICAgNDksICAgNDksICAgNDksICAgIDUsICAgNTIsICAgNTIsICAgNTIsICAgNTQsICAgNTQsICAgNTQsCisgICAgICAgNjMsICAgNjMsICAgNjMsICAgIDUsICAgNzEsICAgNzEsICAgNzEsICAgNzYsICAgNzYsICAgNzYsCisgICAgICAgIDUsICAgIDUsICAgIDUsICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTEsCisKKyAgICAgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwKKyAgICAgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwKKyAgICAgICAxMSwgICAxMSwgICAxMSwgICAxMywgICA4MiwgICAxMywgICAxMywgICA3OCwgICA3OCwgICA3OCwKKyAgICAgICAxMywgICA3OSwgICA3OSwgICA3OSwgICA5NCwgICAxMywgICA4MCwgICA4MCwgICA4MCwgICA4MSwKKyAgICAgICA4MSwgICA4MSwgICAxMywgICA5MywgICAxMywgICAzMCwgICA5MiwgICA4MiwgICAzMCwgICAzMCwKKyAgICAgICA5MCwgICAzMCwgICA4NywgICAzMCwgICA4OSwgICA4NywgICAzMCwgICAzMCwgICAzMCwgICAzMCwKKyAgICAgICAzMCwgICAzMCwgICAzMCwgICA4NiwgICA4NiwgICA4NiwgICA4NSwgICA4NCwgICA4NywgICA5MSwKKyAgICAgICA5MSwgICA5MSwgIDEwMSwgIDEwMSwgIDEwMSwgIDEwMSwgIDEwMSwgIDEwMSwgIDEwMSwgIDEwMSwKKyAgICAgIDEwMiwgIDEwMiwgIDEwMiwgIDEwMiwgIDEwMiwgIDEwMiwgIDEwMiwgIDEwMiwgIDEwMywgIDEwMywKKyAgICAgIDEwMywgIDEwMywgIDEwMywgIDEwNCwgIDEwNCwgIDEwNSwgIDEwNSwgIDEwNSwgIDEwNSwgIDEwNiwKKworICAgICAgIDcyLCAgMTA2LCAgMTA2LCAgMTA2LCAgMTA2LCAgMTA2LCAgMTA2LCAgMTA3LCAgIDcwLCAgMTA3LAorICAgICAgMTA4LCAgMTA4LCAgMTA4LCAgMTA4LCAgMTA5LCAgIDY3LCAgMTA5LCAgMTEwLCAgIDY1LCAgMTEwLAorICAgICAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgMTExLCAgMTExLCAgMTExLCAgMTExLCAgMTExLAorICAgICAgMTEyLCAgMTEyLCAgMTEyLCAgMTEyLCAgMTEyLCAgIDU4LCAgIDU2LCAgIDUzLCAgIDUwLCAgIDQ1LAorICAgICAgIDM2LCAgIDE1LCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLAorICAgICAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLAorICAgICAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLCAgMTAwLAorICAgICAgMTAwLCAgMTAwLCAgMTAwCisgICAgfSA7CisKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworc3RhdGljIGNoYXIgKnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisKK2V4dGVybiBpbnQgY29kZV9fZmxleF9kZWJ1ZzsKK2ludCBjb2RlX19mbGV4X2RlYnVnID0gMTsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X3J1bGVfbGluZW51bVsyOV0gPQorICAgIHsgICAwLAorICAgICAgMTMyLCAgMTQyLCAgMTQzLCAgMTUzLCAgMTU4LCAgMTYzLCAgMTY5LCAgMTc0LCAgMTc5LCAgMTgzLAorICAgICAgMTg3LCAgMTkyLCAgMjAwLCAgMjA3LCAgMjE1LCAgMjE2LCAgMjE3LCAgMjQ0LCAgMjQ2LCAgMjQ3LAorICAgICAgMjQ4LCAgMjUyLCAgMjYwLCAgMjYyLCAgMjY3LCAgMjc1LCAgMjg1LCAgMjg4CisgICAgfSA7CisKKy8qIFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xsIGNhdGNoCisgKiBhbnkgdXNlcyBvZiBSRUpFQ1Qgd2hpY2ggZmxleCBtaXNzZWQuCisgKi8KKyNkZWZpbmUgUkVKRUNUIHJlamVjdF91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKKyNkZWZpbmUgeXltb3JlKCkgeXltb3JlX3VzZWRfYnV0X25vdF9kZXRlY3RlZAorI2RlZmluZSBZWV9NT1JFX0FESiAwCisjZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKK2NoYXIgKmNvZGVfdGV4dDsKKyNsaW5lIDEgInNjYW4tY29kZS5sIgorLyogQmlzb24gQWN0aW9uIFNjYW5uZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBDIC0qLQorCisgICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisjZGVmaW5lIFlZX05PX0lOUFVUIDEKKyNsaW5lIDI0ICJzY2FuLWNvZGUubCIKKy8qIFdvcmsgYXJvdW5kIGEgYnVnIGluIGZsZXggMi41LjMxLiAgU2VlIERlYmlhbiBidWcgMzMzMjMxCisgICA8aHR0cDovL2J1Z3MuZGViaWFuLm9yZy9jZ2ktYmluL2J1Z3JlcG9ydC5jZ2k/YnVnPTMzMzIzMT4uICAqLworI3VuZGVmIGNvZGVfd3JhcAorI2RlZmluZSBjb2RlX3dyYXAoKSAxCisKKyNkZWZpbmUgRkxFWF9QUkVGSVgoSWQpIGNvZGVfICMjIElkCisjaW5jbHVkZSAiZmxleC1zY2FubmVyLmgiCisKKyNpbmNsdWRlICJjb21wbGFpbi5oIgorI2luY2x1ZGUgInJlYWRlci5oIgorI2luY2x1ZGUgImdldGFyZ3MuaCIKKyNpbmNsdWRlICJzY2FuLWNvZGUuaCIKKyNpbmNsdWRlICJzeW1saXN0LmgiCisKKyNpbmNsdWRlIDxjLWN0eXBlLmg+CisjaW5jbHVkZSA8Z2V0LWVycm5vLmg+CisjaW5jbHVkZSA8cXVvdGUuaD4KKworLyogVGhlIGN1cnJlbnQgY2FsbGluZyBzdGFydCBjb25kaXRpb246IFNDX1JVTEVfQUNUSU9OIG9yCisgICBTQ19TWU1CT0xfQUNUSU9OLiAqLworIyBkZWZpbmUgWVlfREVDTCBzdGF0aWMgY2hhciAqY29kZV9sZXggKGNvZGVfcHJvcHMgKnNlbGYsIGludCBzY19jb250ZXh0KQorWVlfREVDTDsKKworI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgbG9jYXRpb25fY29tcHV0ZSAobG9jLCAmbG9jLT5lbmQsIGNvZGVfdGV4dCwgY29kZV9sZW5nKTsKKworc3RhdGljIGNoYXIgKmZldGNoX3R5cGVfbmFtZSAoY2hhciAqY3AsIGNoYXIgY29uc3QgKip0eXBlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiBkb2xsYXJfbG9jKTsKKworc3RhdGljIHZvaWQgaGFuZGxlX2FjdGlvbl9kb2xsYXIgKHN5bWJvbF9saXN0ICpydWxlLCBjaGFyICpjcCwKKwkJCQkgIGxvY2F0aW9uIGRvbGxhcl9sb2MpOworc3RhdGljIHZvaWQgaGFuZGxlX2FjdGlvbl9hdCAoc3ltYm9sX2xpc3QgKnJ1bGUsIGNoYXIgKmNwLCBsb2NhdGlvbiBhdF9sb2MpOworCisvKiBBIHN0cmluZyB0byBiZSBwdXNoZWQgdG8gb2JzdGFjayBhZnRlciBkb2xsYXIvYXQgaGFzIGJlZW4gaGFuZGxlZC4gKi8KK3N0YXRpYyBjaGFyICpyZWZfdGFpbF9maWVsZHM7CisKK3N0YXRpYyBsb2NhdGlvbiB0aGVfbG9jYXRpb247CitzdGF0aWMgbG9jYXRpb24gKmxvYyA9ICZ0aGVfbG9jYXRpb247CisKKy8qIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgbW9zdCByZWNlbnQgdHJhbnNsYXRpb24uICAqLworc3RhdGljIGNoYXIgKmxhc3Rfc3RyaW5nOworCisvKiBUcnVlIGlmIGFuIHVudHlwZWQgJCQgb3IgJG4gd2FzIHNlZW4uICAqLworc3RhdGljIGJvb2wgdW50eXBlZF92YXJfc2VlbjsKKworLyogQyBhbmQgQysrIGNvbW1lbnRzIGluIGNvZGUuICovCisKKy8qIFN0cmluZ3MgYW5kIGNoYXJhY3RlcnMgaW4gY29kZS4gKi8KKworLyogV2hldGhlciBpbiBhIHJ1bGUgb3Igc3ltYm9sIGFjdGlvbi4gIFNwZWNpZmllcyB0aGUgdHJhbnNsYXRpb24KK29mICQgYW5kIEAuICAqLworCisvKiBQT1NJWCBzYXlzIHRoYXQgYSB0YWcgbXVzdCBiZSBib3RoIGFuIGlkIGFuZCBhIEMgdW5pb24gbWVtYmVyLCBidXQKKyAgIGhpc3RvcmljYWxseSBhbG1vc3QgYW55IGNoYXJhY3RlciBpcyBhbGxvd2VkIGluIGEgdGFnLiAgV2UgZGlzYWxsb3cKKyAgIE5VTCBhbmQgbmV3bGluZSwgYXMgdGhpcyBzaW1wbGlmaWVzIG91ciBpbXBsZW1lbnRhdGlvbi4gICovCisvKiBaZXJvIG9yIG1vcmUgaW5zdGFuY2VzIG9mIGJhY2tzbGFzaC1uZXdsaW5lLiAgRm9sbG93aW5nIEdDQywgYWxsb3cKKyAgIHdoaXRlIHNwYWNlIGJldHdlZW4gdGhlIGJhY2tzbGFzaCBhbmQgdGhlIG5ld2xpbmUuICAqLworLyogQyBzdHlsZSBpZGVudGlmaWVyLiBNdXN0IHN0YXJ0IHdpdGggbGV0dGVyLiBXaWxsIGJlIHVzZWQgZm9yCisgICBuYW1lZCBzeW1ib2wgcmVmZXJlbmNlcy4gU2hhbGwgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aAorICAgc2Nhbi1ncmFtLmwgImxldHRlciIgYW5kICJpZCIuICovCisjbGluZSA3MzUgInNjYW4tY29kZS5jIgorCisjZGVmaW5lIElOSVRJQUwgMAorI2RlZmluZSBTQ19DT01NRU5UIDEKKyNkZWZpbmUgU0NfTElORV9DT01NRU5UIDIKKyNkZWZpbmUgU0NfU1RSSU5HIDMKKyNkZWZpbmUgU0NfQ0hBUkFDVEVSIDQKKyNkZWZpbmUgU0NfUlVMRV9BQ1RJT04gNQorI2RlZmluZSBTQ19TWU1CT0xfQUNUSU9OIDYKKworI2lmbmRlZiBZWV9OT19VTklTVERfSAorLyogU3BlY2lhbCBjYXNlIGZvciAidW5pc3RkLmgiLCBzaW5jZSBpdCBpcyBub24tQU5TSS4gV2UgaW5jbHVkZSBpdCB3YXkKKyAqIGRvd24gaGVyZSBiZWNhdXNlIHdlIHdhbnQgdGhlIHVzZXIncyBzZWN0aW9uIDEgdG8gaGF2ZSBiZWVuIHNjYW5uZWQgZmlyc3QuCisgKiBUaGUgdXNlciBoYXMgYSBjaGFuY2UgdG8gb3ZlcnJpZGUgaXQgd2l0aCBhbiBvcHRpb24uCisgKi8KKy8qICVpZi1jLW9ubHkgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKy8qICVlbmRpZiAqLworLyogJWlmLWMrKy1vbmx5ICovCisvKiAlZW5kaWYgKi8KKyNlbmRpZgorCisjaWZuZGVmIFlZX0VYVFJBX1RZUEUKKyNkZWZpbmUgWVlfRVhUUkFfVFlQRSB2b2lkICoKKyNlbmRpZgorCisvKiAlaWYtYy1vbmx5IFJlZW50cmFudCBzdHJ1Y3R1cmUgYW5kIG1hY3JvcyAobm9uLUMrKykuICovCisvKiAlaWYtcmVlbnRyYW50ICovCisvKiAlaWYtYy1vbmx5ICovCisKK3N0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh2b2lkICk7CisKKy8qICVlbmRpZiAqLworLyogJWlmLXJlZW50cmFudCAqLworLyogJWVuZGlmICovCisvKiAlZW5kaWYgRW5kIHJlZW50cmFudCBzdHJ1Y3R1cmVzIGFuZCBtYWNyb3MuICovCisKKy8qIEFjY2Vzc29yIG1ldGhvZHMgdG8gZ2xvYmFscy4KKyAgIFRoZXNlIGFyZSBtYWRlIHZpc2libGUgdG8gbm9uLXJlZW50cmFudCBzY2FubmVycyBmb3IgY29udmVuaWVuY2UuICovCisKK2ludCBjb2RlX2xleF9kZXN0cm95ICh2b2lkICk7CisKK2ludCBjb2RlX2dldF9kZWJ1ZyAodm9pZCApOworCit2b2lkIGNvZGVfc2V0X2RlYnVnIChpbnQgZGVidWdfZmxhZyAgKTsKKworWVlfRVhUUkFfVFlQRSBjb2RlX2dldF9leHRyYSAodm9pZCApOworCit2b2lkIGNvZGVfc2V0X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCAgKTsKKworRklMRSAqY29kZV9nZXRfaW4gKHZvaWQgKTsKKwordm9pZCBjb2RlX3NldF9pbiAgKEZJTEUgKiBpbl9zdHIgICk7CisKK0ZJTEUgKmNvZGVfZ2V0X291dCAodm9pZCApOworCit2b2lkIGNvZGVfc2V0X291dCAgKEZJTEUgKiBvdXRfc3RyICApOworCit5eV9zaXplX3QgY29kZV9nZXRfbGVuZyAodm9pZCApOworCitjaGFyICpjb2RlX2dldF90ZXh0ICh2b2lkICk7CisKK2ludCBjb2RlX2dldF9saW5lbm8gKHZvaWQgKTsKKwordm9pZCBjb2RlX3NldF9saW5lbm8gKGludCBsaW5lX251bWJlciAgKTsKKworLyogJWlmLWJpc29uLWJyaWRnZSAqLworLyogJWVuZGlmICovCisKKy8qIE1hY3JvcyBhZnRlciB0aGlzIHBvaW50IGNhbiBhbGwgYmUgb3ZlcnJpZGRlbiBieSB1c2VyIGRlZmluaXRpb25zIGluCisgKiBzZWN0aW9uIDEuCisgKi8KKworI2lmbmRlZiBZWV9TS0lQX1lZV1JBUAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIGludCBjb2RlX3dyYXAgKHZvaWQgKTsKKyNlbHNlCitleHRlcm4gaW50IGNvZGVfd3JhcCAodm9pZCApOworI2VuZGlmCisjZW5kaWYKKworLyogJW5vdC1mb3ItaGVhZGVyICovCisKKy8qICVvay1mb3ItaGVhZGVyICovCisKKy8qICVlbmRpZiAqLworCisjaWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciAqLHl5Y29uc3QgY2hhciAqLGludCApOworI2VuZGlmCisKKyNpZmRlZiBZWV9ORUVEX1NUUkxFTgorc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogKTsKKyNlbmRpZgorCisjaWZuZGVmIFlZX05PX0lOUFVUCisvKiAlaWYtYy1vbmx5IFN0YW5kYXJkIChub24tQysrKSBkZWZpbml0aW9uICovCisvKiAlbm90LWZvci1oZWFkZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitzdGF0aWMgaW50IHl5aW5wdXQgKHZvaWQgKTsKKyNlbHNlCitzdGF0aWMgaW50IGlucHV0ICh2b2lkICk7CisjZW5kaWYKKy8qICVvay1mb3ItaGVhZGVyICovCisKKy8qICVlbmRpZiAqLworI2VuZGlmCisKKy8qICVpZi1jLW9ubHkgKi8KKworLyogJWVuZGlmICovCisKKy8qIEFtb3VudCBvZiBzdHVmZiB0byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8KKyNpZm5kZWYgWVlfUkVBRF9CVUZfU0laRQorI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKKyNlbmRpZgorCisvKiBDb3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAqLworI2lmbmRlZiBFQ0hPCisvKiAlaWYtYy1vbmx5IFN0YW5kYXJkIChub24tQysrKSBkZWZpbml0aW9uICovCisvKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKKyAqIHdlIG5vdyB1c2UgZndyaXRlKCkuCisgKi8KKyNkZWZpbmUgRUNITyBkbyB7IGlmIChmd3JpdGUoIGNvZGVfdGV4dCwgY29kZV9sZW5nLCAxLCBjb2RlX291dCApKSB7fSB9IHdoaWxlICgwKQorLyogJWVuZGlmICovCisvKiAlaWYtYysrLW9ubHkgQysrIGRlZmluaXRpb24gKi8KKy8qICVlbmRpZiAqLworI2VuZGlmCisKKy8qIEdldHMgaW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwKKyAqIGlzIHJldHVybmVkIGluICJyZXN1bHQiLgorICovCisjaWZuZGVmIFlZX0lOUFVUCisjZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIFwKKy8qICUlIFs1LjBdIGZyZWFkKCkvcmVhZCgpIGRlZmluaXRpb24gb2YgWVlfSU5QVVQgZ29lcyBoZXJlIHVubGVzcyB3ZSdyZSBkb2luZyBDKysgXCAqL1wKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCisJCXsgXAorCQlpbnQgYyA9ICcqJzsgXAorCQlzaXplX3QgbjsgXAorCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKKwkJCSAgICAgKGMgPSBnZXRjKCBjb2RlX2luICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKKwkJCWJ1ZltuXSA9IChjaGFyKSBjOyBcCisJCWlmICggYyA9PSAnXG4nICkgXAorCQkJYnVmW24rK10gPSAoY2hhcikgYzsgXAorCQlpZiAoIGMgPT0gRU9GICYmIGZlcnJvciggY29kZV9pbiApICkgXAorCQkJWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCisJCXJlc3VsdCA9IG47IFwKKwkJfSBcCisJZWxzZSBcCisJCXsgXAorCQllcnJubz0wOyBcCisJCXdoaWxlICggKHJlc3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3NpemUsIGNvZGVfaW4pKT09MCAmJiBmZXJyb3IoY29kZV9pbikpIFwKKwkJCXsgXAorCQkJaWYoIGVycm5vICE9IEVJTlRSKSBcCisJCQkJeyBcCisJCQkJWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCisJCQkJYnJlYWs7IFwKKwkJCQl9IFwKKwkJCWVycm5vPTA7IFwKKwkJCWNsZWFyZXJyKGNvZGVfaW4pOyBcCisJCQl9IFwKKwkJfVwKK1wKKy8qICVpZi1jKystb25seSBDKysgZGVmaW5pdGlvbiBcICovXAorLyogJWVuZGlmICovCisKKyNlbmRpZgorCisvKiBObyBzZW1pLWNvbG9uIGFmdGVyIHJldHVybjsgY29ycmVjdCB1c2FnZSBpcyB0byB3cml0ZSAieXl0ZXJtaW5hdGUoKTsiIC0KKyAqIHdlIGRvbid0IHdhbnQgYW4gZXh0cmEgJzsnIGFmdGVyIHRoZSAicmV0dXJuIiBiZWNhdXNlIHRoYXQgd2lsbCBjYXVzZQorICogc29tZSBjb21waWxlcnMgdG8gY29tcGxhaW4gYWJvdXQgdW5yZWFjaGFibGUgc3RhdGVtZW50cy4KKyAqLworI2lmbmRlZiB5eXRlcm1pbmF0ZQorI2RlZmluZSB5eXRlcm1pbmF0ZSgpIHJldHVybiBZWV9OVUxMCisjZW5kaWYKKworLyogTnVtYmVyIG9mIGVudHJpZXMgYnkgd2hpY2ggc3RhcnQtY29uZGl0aW9uIHN0YWNrIGdyb3dzLiAqLworI2lmbmRlZiBZWV9TVEFSVF9TVEFDS19JTkNSCisjZGVmaW5lIFlZX1NUQVJUX1NUQUNLX0lOQ1IgMjUKKyNlbmRpZgorCisvKiBSZXBvcnQgYSBmYXRhbCBlcnJvci4gKi8KKyNpZm5kZWYgWVlfRkFUQUxfRVJST1IKKy8qICVpZi1jLW9ubHkgKi8KKyNkZWZpbmUgWVlfRkFUQUxfRVJST1IobXNnKSB5eV9mYXRhbF9lcnJvciggbXNnICkKKy8qICVlbmRpZiAqLworLyogJWlmLWMrKy1vbmx5ICovCisvKiAlZW5kaWYgKi8KKyNlbmRpZgorCisvKiAlaWYtdGFibGVzLXNlcmlhbGl6YXRpb24gc3RydWN0dXJlcyBhbmQgcHJvdG90eXBlcyAqLworLyogJW5vdC1mb3ItaGVhZGVyICovCisKKy8qICVvay1mb3ItaGVhZGVyICovCisKKy8qICVub3QtZm9yLWhlYWRlciAqLworCisvKiAldGFibGVzLXl5ZG1hcCBnZW5lcmF0ZWQgZWxlbWVudHMgKi8KKy8qICVlbmRpZiAqLworLyogZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMgYW5kIHByb3RvdHlwZXMgKi8KKworLyogJW9rLWZvci1oZWFkZXIgKi8KKworLyogRGVmYXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0ZWQgc2Nhbm5lciAtIGEgZGVmaW5lIHNvIHRoZSB1c2VyIGNhbgorICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLgorICovCisjaWZuZGVmIFlZX0RFQ0wKKyNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKKy8qICVpZi1jLW9ubHkgU3RhbmRhcmQgKG5vbi1DKyspIGRlZmluaXRpb24gKi8KKworZXh0ZXJuIGludCBjb2RlX2xleCAodm9pZCk7CisKKyNkZWZpbmUgWVlfREVDTCBpbnQgY29kZV9sZXggKHZvaWQpCisvKiAlZW5kaWYgKi8KKy8qICVpZi1jKystb25seSBDKysgZGVmaW5pdGlvbiAqLworLyogJWVuZGlmICovCisjZW5kaWYgLyogIVlZX0RFQ0wgKi8KKworLyogQ29kZSBleGVjdXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggcnVsZSwgYWZ0ZXIgY29kZV90ZXh0IGFuZCBjb2RlX2xlbmcKKyAqIGhhdmUgYmVlbiBzZXQgdXAuCisgKi8KKyNpZm5kZWYgWVlfVVNFUl9BQ1RJT04KKyNkZWZpbmUgWVlfVVNFUl9BQ1RJT04KKyNlbmRpZgorCisvKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBydWxlLiAqLworI2lmbmRlZiBZWV9CUkVBSworI2RlZmluZSBZWV9CUkVBSyBicmVhazsKKyNlbmRpZgorCisvKiAlJSBbNi4wXSBZWV9SVUxFX1NFVFVQIGRlZmluaXRpb24gZ29lcyBoZXJlICovCisjZGVmaW5lIFlZX1JVTEVfU0VUVVAgXAorCVlZX1VTRVJfQUNUSU9OCisKKy8qICVub3QtZm9yLWhlYWRlciAqLworCisvKiogVGhlIG1haW4gc2Nhbm5lciBmdW5jdGlvbiB3aGljaCBkb2VzIGFsbCB0aGUgd29yay4KKyAqLworWVlfREVDTAoreworCXJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcCwgKnl5X2JwOworCXJlZ2lzdGVyIGludCB5eV9hY3Q7CisgICAgCisvKiAlJSBbNy4wXSB1c2VyJ3MgZGVjbGFyYXRpb25zIGdvIGhlcmUgKi8KKyNsaW5lIDk0ICJzY2FuLWNvZGUubCIKKworCisKKyAgLyogTmVzdGluZyBsZXZlbCBvZiB0aGUgY3VycmVudCBjb2RlIGluIGJyYWNlcy4gICovCisgIGludCBicmFjZXNfbGV2ZWwgPSAwOworCisgIC8qIFdoZXRoZXIgYSBzZW1pY29sb24gaXMgcHJvYmFibHkgbmVlZGVkLgorCisgICAgIFRoZSBoZXVyaXN0aWMgaXMgdGhhdCBhIHNlbWljb2xvbiBpcyBub3QgbmVlZGVkIGFmdGVyICd7JywgJ30nLAorICAgICAnOycsIG9yIGEgQyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBhbmQgdGhhdCB3aGl0ZXNwYWNlcyBhbmQKKyAgICAgY29tbWVudHMgZG8gbm90IGFmZmVjdCB0aGlzIGZsYWcuICBOb3RlIHRoYXQgJ3snIGRvZXMgbm90IG5lZWQgYQorICAgICBzZW1pY29sb24gYmVjYXVzZSBvZiAne30nLiAgQSBzZW1pY29sb24gbWF5IGJlIG5lZWRlZCBiZWZvcmUgYQorICAgICBjcHAgZGlyZWN0aXZlLCBidXQgZG9uJ3QgYm90aGVyLgorCisgICAgIFdoaWxlIGl0IGlzIG1haW50YWluZWQgaW4gc2V2ZXJhbCBzdGFydC1jb25kaXRpb25zIChmYWN0b3JpbmcKKyAgICAgb3Bwb3J0dW5pdGllcyksIGl0IGlzIG1lYW5pbmdmdWwgb25seSBmb3IgU0NfUlVMRV9BQ1RJT04uICovCisgIGJvb2wgbmVlZF9zZW1pY29sb24gPSBmYWxzZTsKKworICAvKiBXaGV0aGVyIGluIGEgQyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiAgRG9uJ3QgdXNlIGEgc3RhcnQgY29uZGl0aW9uCisgICAgIGZvciB0aGlzIGJlY2F1c2UsIGF0IHRoZSBlbmQgb2Ygc3RyaW5ncyBhbmQgY29tbWVudHMsIHdlIHN0aWxsIG5lZWQKKyAgICAgdG8ga25vdyB3aGV0aGVyIHdlJ3JlIGluIGEgZGlyZWN0aXZlLiAgKi8KKyAgYm9vbCBpbl9jcHAgPSBmYWxzZTsKKworICAvKiBUaGlzIHNjYW5uZXIgaXMgc3BlY2lhbDogaXQgaXMgaW52b2tlZCBvbmx5IG9uY2UsIGhlbmNlZm9ydGgKKyAgICAgaXMgZXhwZWN0ZWQgdG8gcmV0dXJuIG9ubHkgb25jZS4gIFRoaXMgaW5pdGlhbGl6YXRpb24gaXMKKyAgICAgdGhlcmVmb3JlIGRvbmUgb25jZSBwZXIgYWN0aW9uIHRvIHRyYW5zbGF0ZS4gKi8KKyAgYXZlciAoc2NfY29udGV4dCA9PSBTQ19TWU1CT0xfQUNUSU9OCisJfHwgc2NfY29udGV4dCA9PSBTQ19SVUxFX0FDVElPTgorCXx8IHNjX2NvbnRleHQgPT0gSU5JVElBTCk7CisgIEJFR0lOIHNjX2NvbnRleHQ7CisKKworICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyAgfCBTY2FubmluZyBhIEMgY29tbWVudC4gIFRoZSBpbml0aWFsICcvIConIGlzIGFscmVhZHkgZWF0ZW4uICB8CisgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjbGluZSAxMDE4ICJzY2FuLWNvZGUuYyIKKworCWlmICggISh5eV9pbml0KSApCisJCXsKKwkJKHl5X2luaXQpID0gMTsKKworI2lmZGVmIFlZX1VTRVJfSU5JVAorCQlZWV9VU0VSX0lOSVQ7CisjZW5kaWYKKworCQlpZiAoICEgKHl5X3N0YXJ0KSApCisJCQkoeXlfc3RhcnQpID0gMTsJLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KKworCQlpZiAoICEgY29kZV9pbiApCisvKiAlaWYtYy1vbmx5ICovCisJCQljb2RlX2luID0gc3RkaW47CisvKiAlZW5kaWYgKi8KKy8qICVpZi1jKystb25seSAqLworLyogJWVuZGlmICovCisKKwkJaWYgKCAhIGNvZGVfb3V0ICkKKy8qICVpZi1jLW9ubHkgKi8KKwkJCWNvZGVfb3V0ID0gc3Rkb3V0OworLyogJWVuZGlmICovCisvKiAlaWYtYysrLW9ubHkgKi8KKy8qICVlbmRpZiAqLworCisJCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApIHsKKwkJCWNvZGVfZW5zdXJlX2J1ZmZlcl9zdGFjayAoKTsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9CisJCQkJY29kZV9fY3JlYXRlX2J1ZmZlcihjb2RlX2luLFlZX0JVRl9TSVpFICk7CisJCX0KKworCQljb2RlX19sb2FkX2J1ZmZlcl9zdGF0ZSggKTsKKwkJfQorCisJd2hpbGUgKCAxICkJCS8qIGxvb3BzIHVudGlsIGVuZC1vZi1maWxlIGlzIHJlYWNoZWQgKi8KKwkJeworLyogJSUgWzguMF0geXltb3JlKCktcmVsYXRlZCBjb2RlIGdvZXMgaGVyZSAqLworCQl5eV9jcCA9ICh5eV9jX2J1Zl9wKTsKKworCQkvKiBTdXBwb3J0IG9mIGNvZGVfdGV4dC4gKi8KKwkJKnl5X2NwID0gKHl5X2hvbGRfY2hhcik7CisKKwkJLyogeXlfYnAgcG9pbnRzIHRvIHRoZSBwb3NpdGlvbiBpbiB5eV9jaF9idWYgb2YgdGhlIHN0YXJ0IG9mCisJCSAqIHRoZSBjdXJyZW50IHJ1bi4KKwkJICovCisJCXl5X2JwID0geXlfY3A7CisKKy8qICUlIFs5LjBdIGNvZGUgdG8gc2V0IHVwIGFuZCBmaW5kIG5leHQgbWF0Y2ggZ29lcyBoZXJlICovCisJCXl5X2N1cnJlbnRfc3RhdGUgPSAoeXlfc3RhcnQpOworeXlfbWF0Y2g6CisJCWRvCisJCQl7CisJCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXTsKKwkJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKKwkJCQl7CisJCQkJKHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlKSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCQkJKHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MpID0geXlfY3A7CisJCQkJfQorCQkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQkJCXsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSAxMDEgKQorCQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCQl9CisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCSsreXlfY3A7CisJCQl9CisJCXdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSAxMDAgKTsKKwkJeXlfY3AgPSAoeXlfbGFzdF9hY2NlcHRpbmdfY3Bvcyk7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSAoeXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUpOworCit5eV9maW5kX2FjdGlvbjoKKy8qICUlIFsxMC4wXSBjb2RlIHRvIGZpbmQgdGhlIGFjdGlvbiBudW1iZXIgZ29lcyBoZXJlICovCisJCXl5X2FjdCA9IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXTsKKworCQlZWV9ET19CRUZPUkVfQUNUSU9OOworCisvKiAlJSBbMTEuMF0gY29kZSBmb3IgY29kZV9saW5lbm8gdXBkYXRlIGdvZXMgaGVyZSAqLworCitkb19hY3Rpb246CS8qIFRoaXMgbGFiZWwgaXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KKworLyogJSUgWzEyLjBdIGRlYnVnIGNvZGUgZ29lcyBoZXJlICovCisJCWlmICggY29kZV9fZmxleF9kZWJ1ZyApCisJCQl7CisJCQlpZiAoIHl5X2FjdCA9PSAwICkKKwkJCQlmcHJpbnRmKCBzdGRlcnIsICItLXNjYW5uZXIgYmFja2luZyB1cFxuIiApOworCQkJZWxzZSBpZiAoIHl5X2FjdCA8IDI5ICkKKwkJCQlmcHJpbnRmKCBzdGRlcnIsICItLWFjY2VwdGluZyBydWxlIGF0IGxpbmUgJWxkIChcIiVzXCIpXG4iLAorCQkJCSAgICAgICAgIChsb25nKXl5X3J1bGVfbGluZW51bVt5eV9hY3RdLCBjb2RlX3RleHQgKTsKKwkJCWVsc2UgaWYgKCB5eV9hY3QgPT0gMjkgKQorCQkJCWZwcmludGYoIHN0ZGVyciwgIi0tYWNjZXB0aW5nIGRlZmF1bHQgcnVsZSAoXCIlc1wiKVxuIiwKKwkJCQkgICAgICAgICBjb2RlX3RleHQgKTsKKwkJCWVsc2UgaWYgKCB5eV9hY3QgPT0gMzAgKQorCQkJCWZwcmludGYoIHN0ZGVyciwgIi0tKGVuZCBvZiBidWZmZXIgb3IgYSBOVUwpXG4iICk7CisJCQllbHNlCisJCQkJZnByaW50Ziggc3RkZXJyLCAiLS1FT0YgKHN0YXJ0IGNvbmRpdGlvbiAlZClcbiIsIFlZX1NUQVJUICk7CisJCQl9CisKKwkJc3dpdGNoICggeXlfYWN0ICkKKwl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICovCisvKiAlJSBbMTMuMF0gYWN0aW9ucyBnbyBoZXJlICovCisJCQljYXNlIDA6IC8qIG11c3QgYmFjayB1cCAqLworCQkJLyogdW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OICovCisJCQkqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsKKwkJCXl5X2NwID0gKHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MpOworCQkJeXlfY3VycmVudF9zdGF0ZSA9ICh5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSk7CisJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCitjYXNlIDE6CisvKiBydWxlIDEgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAorI2xpbmUgMTMyICJzY2FuLWNvZGUubCIKK1NUUklOR19HUk9XOyBCRUdJTiBzY19jb250ZXh0OworCVlZX0JSRUFLCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisgIHwgU2Nhbm5pbmcgYSBsaW5lIGNvbW1lbnQuICBUaGUgaW5pdGlhbCAnLy8nIGlzIGFscmVhZHkgZWF0ZW4uICB8CisgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworY2FzZSAyOgorLyogcnVsZSAyIGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDE0MiAic2Nhbi1jb2RlLmwiCitTVFJJTkdfR1JPVzsgQkVHSU4gc2NfY29udGV4dDsKKwlZWV9CUkVBSworY2FzZSAzOgorLyogcnVsZSAzIGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDE0MyAic2Nhbi1jb2RlLmwiCitTVFJJTkdfR1JPVzsKKwlZWV9CUkVBSworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorICB8IFNjYW5uaW5nIHVzZXItY29kZSBjaGFyYWN0ZXJzIGFuZCBzdHJpbmdzLiAgfAorICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisKK2Nhc2UgNDoKKy8qIHJ1bGUgNCBjYW4gbWF0Y2ggZW9sICovCitZWV9SVUxFX1NFVFVQCisjbGluZSAxNTMgInNjYW4tY29kZS5sIgorU1RSSU5HX0dST1c7CisJWVlfQlJFQUsKKworCisKK2Nhc2UgNToKK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDE1OCAic2Nhbi1jb2RlLmwiCitTVFJJTkdfR1JPVzsgQkVHSU4gc2NfY29udGV4dDsKKwlZWV9CUkVBSworCisKKworY2FzZSA2OgorWVlfUlVMRV9TRVRVUAorI2xpbmUgMTYzICJzY2FuLWNvZGUubCIKK1NUUklOR19HUk9XOyBCRUdJTiBzY19jb250ZXh0OworCVlZX0JSRUFLCisKKworCitjYXNlIDc6CitZWV9SVUxFX1NFVFVQCisjbGluZSAxNjkgInNjYW4tY29kZS5sIgoreworICAgIFNUUklOR19HUk9XOworICAgIEJFR0lOIFNDX0NIQVJBQ1RFUjsKKyAgICBuZWVkX3NlbWljb2xvbiA9IHRydWU7CisgIH0KKwlZWV9CUkVBSworY2FzZSA4OgorWVlfUlVMRV9TRVRVUAorI2xpbmUgMTc0ICJzY2FuLWNvZGUubCIKK3sKKyAgICBTVFJJTkdfR1JPVzsKKyAgICBCRUdJTiBTQ19TVFJJTkc7CisgICAgbmVlZF9zZW1pY29sb24gPSB0cnVlOworICB9CisJWVlfQlJFQUsKK2Nhc2UgOToKKy8qIHJ1bGUgOSBjYW4gbWF0Y2ggZW9sICovCitZWV9SVUxFX1NFVFVQCisjbGluZSAxNzkgInNjYW4tY29kZS5sIgoreworICAgIFNUUklOR19HUk9XOworICAgIEJFR0lOIFNDX0NPTU1FTlQ7CisgIH0KKwlZWV9CUkVBSworY2FzZSAxMDoKKy8qIHJ1bGUgMTAgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAorI2xpbmUgMTgzICJzY2FuLWNvZGUubCIKK3sKKyAgICBTVFJJTkdfR1JPVzsKKyAgICBCRUdJTiBTQ19MSU5FX0NPTU1FTlQ7CisgIH0KKwlZWV9CUkVBSworY2FzZSAxMToKK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDE4NyAic2Nhbi1jb2RlLmwiCit7CisgICAgd2Fybl9hdCAoKmxvYywgXygic3RyYXkgJyVzJyIpLCBjb2RlX3RleHQpOworICAgIG9ic3RhY2tfZXNjYXBlICgmb2JzdGFja19mb3Jfc3RyaW5nLCBjb2RlX3RleHQpOworICAgIG5lZWRfc2VtaWNvbG9uID0gdHJ1ZTsKKyAgfQorCVlZX0JSRUFLCitjYXNlIDEyOgorWVlfUlVMRV9TRVRVUAorI2xpbmUgMTkyICJzY2FuLWNvZGUubCIKK3sKKyAgICBvYnN0YWNrX2VzY2FwZSAoJm9ic3RhY2tfZm9yX3N0cmluZywgY29kZV90ZXh0KTsKKyAgICBuZWVkX3NlbWljb2xvbiA9IHRydWU7CisgIH0KKwlZWV9CUkVBSworCisKKworY2FzZSAxMzoKK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDIwMCAic2Nhbi1jb2RlLmwiCit7CisgICAgcmVmX3RhaWxfZmllbGRzID0gTlVMTDsKKyAgICBoYW5kbGVfYWN0aW9uX2RvbGxhciAoc2VsZi0+cnVsZSwgY29kZV90ZXh0LCAqbG9jKTsKKyAgICBpZiAocmVmX3RhaWxfZmllbGRzKQorICAgICAgb2JzdGFja19zZ3JvdyAoJm9ic3RhY2tfZm9yX3N0cmluZywgcmVmX3RhaWxfZmllbGRzKTsKKyAgICBuZWVkX3NlbWljb2xvbiA9IHRydWU7CisgIH0KKwlZWV9CUkVBSworY2FzZSAxNDoKK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDIwNyAic2Nhbi1jb2RlLmwiCit7CisgICAgcmVmX3RhaWxfZmllbGRzID0gTlVMTDsKKyAgICBoYW5kbGVfYWN0aW9uX2F0IChzZWxmLT5ydWxlLCBjb2RlX3RleHQsICpsb2MpOworICAgIGlmIChyZWZfdGFpbF9maWVsZHMpCisgICAgICBvYnN0YWNrX3Nncm93ICgmb2JzdGFja19mb3Jfc3RyaW5nLCByZWZfdGFpbF9maWVsZHMpOworICAgIG5lZWRfc2VtaWNvbG9uID0gdHJ1ZTsKKyAgfQorCVlZX0JSRUFLCitjYXNlIDE1OgorWVlfUlVMRV9TRVRVUAorI2xpbmUgMjE1ICJzY2FuLWNvZGUubCIKK1NUUklOR19HUk9XOyAgICAgICAgICAgICAgICAgbmVlZF9zZW1pY29sb24gPSBmYWxzZTsKKwlZWV9CUkVBSworY2FzZSAxNjoKK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDIxNiAic2Nhbi1jb2RlLmwiCitTVFJJTkdfR1JPVzsgKyticmFjZXNfbGV2ZWw7IG5lZWRfc2VtaWNvbG9uID0gZmFsc2U7CisJWVlfQlJFQUsKK2Nhc2UgMTc6CitZWV9SVUxFX1NFVFVQCisjbGluZSAyMTcgInNjYW4tY29kZS5sIgoreworICAgIGJvb2wgb3V0ZXJfYnJhY2UgPSAtLWJyYWNlc19sZXZlbCA9PSAwOworCisgICAgLyogQXMgYW4gdW5kb2N1bWVudGVkIEJpc29uIGV4dGVuc2lvbiwgYXBwZW5kICc7JyBiZWZvcmUgdGhlIGxhc3QKKyAgICAgICBicmFjZSBpbiBicmFjZWQgY29kZSwgc28gdGhhdCB0aGUgdXNlciBjb2RlIGNhbiBvbWl0IHRyYWlsaW5nCisgICAgICAgJzsnLiAgQnV0IGRvIG5vdCBhcHBlbmQgJzsnIGlmIGVtdWxhdGluZyBZYWNjLCBzaW5jZSBZYWNjIGRvZXMKKyAgICAgICBub3QgYXBwZW5kIG9uZS4gIFRoaXMgaXMgZGVwcmVjYXRlZCBzaW5jZSByZWxlYXNlIDIuNC4xLiAgKi8KKyAgICBpZiAob3V0ZXJfYnJhY2UgJiYgIXlhY2NfZmxhZyAmJiBsYW5ndWFnZV9wcmlvID09IGRlZmF1bHRfcHJpbworICAgICAgICAmJiBza2VsZXRvbl9wcmlvID09IGRlZmF1bHRfcHJpbyAmJiBuZWVkX3NlbWljb2xvbiAmJiAhIGluX2NwcCkKKyAgICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGluZGVudCA9IDA7CisgICAgICAgIHdhcm5fYXRfaW5kZW50ICgqbG9jLCAmaW5kZW50LAorICAgICAgICAgICAgICAgICAgICAgICBfKCJhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZSIpKTsKKyAgICAgICAgaW5kZW50ICs9IFNVQl9JTkRFTlQ7CisgICAgICAgIHdhcm5fYXRfaW5kZW50ICgqbG9jLCAmaW5kZW50LAorICAgICAgICAgICAgICAgICAgICAgICBfKCJmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24gd2lsbCBub3QgYWRkIHRoZSAnOyciKSk7CisgICAgICAgIG9ic3RhY2tfMWdyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICc7Jyk7CisgICAgICB9CisKKyAgICBTVFJJTkdfR1JPVzsKKyAgICBuZWVkX3NlbWljb2xvbiA9IGZhbHNlOworICB9CisJWVlfQlJFQUsKKy8qIFByZXByb2Nlc3NpbmcgZGlyZWN0aXZlcyBzaG91bGQgb25seSBiZSByZWNvZ25pemVkIGF0IHRoZSBiZWdpbm5pbmcKKyAgICAgb2YgbGluZXMsIGFsbG93aW5nIHdoaXRlc3BhY2UgaW5jbHVkaW5nIGNvbW1lbnRzLCBidXQgaW4gQy9DKyssCisgICAgICcjJyBjYW4gb25seSBiZSB0aGUgc3RhcnQgb2YgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgb3Igd2l0aGluCisgICAgICcjZGVmaW5lJyBkaXJlY3RpdmVzIGFueXdheSwgc28gZG9uJ3QgYm90aGVyIHdpdGggYmVnaW4gb2YgbGluZS4gICovCitjYXNlIDE4OgorWVlfUlVMRV9TRVRVUAorI2xpbmUgMjQ0ICJzY2FuLWNvZGUubCIKK1NUUklOR19HUk9XOyBpbl9jcHAgPSB0cnVlOworCVlZX0JSRUFLCitjYXNlIDE5OgorLyogcnVsZSAxOSBjYW4gbWF0Y2ggZW9sICovCitZWV9SVUxFX1NFVFVQCisjbGluZSAyNDYgInNjYW4tY29kZS5sIgorU1RSSU5HX0dST1c7CisJWVlfQlJFQUsKK2Nhc2UgMjA6CisvKiBydWxlIDIwIGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDI0NyAic2Nhbi1jb2RlLmwiCitTVFJJTkdfR1JPVzsgaWYgKGluX2NwcCkgaW5fY3BwID0gbmVlZF9zZW1pY29sb24gPSBmYWxzZTsKKwlZWV9CUkVBSworY2FzZSAyMToKK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDI0OCAic2Nhbi1jb2RlLmwiCitTVFJJTkdfR1JPVzsKKwlZWV9CUkVBSworLyogWVlGQUlMIGlzIHVuZG9jdW1lbnRlZCBhbmQgd2FzIGZvcm1hbGx5IGRlcHJlY2F0ZWQgaW4gQmlzb24KKyAgICAgMi40LjIuICAqLworY2FzZSAyMjoKK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDI1MiAic2Nhbi1jb2RlLmwiCit7CisgICAgU1RSSU5HX0dST1c7IG5lZWRfc2VtaWNvbG9uID0gdHJ1ZTsKKyAgICB3YXJuX2F0ICgqbG9jLCBfKCJ1c2Ugb2YgWVlGQUlMLCB3aGljaCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIgorICAgICAgICAgICAgICAgICAgICAgIiByZW1vdmVkIikpOworICB9CisJWVlfQlJFQUsKKy8qIFRoZSBzb2xlIHB1cnBvc2Ugb2YgdGhpcyBpcyB0byBtYWtlIHN1cmUgaWRlbnRpZmllcnMgdGhhdCBtZXJlbHkKKyAgICAgY29udGFpbiBZWUZBSUwgZG9uJ3QgcHJvZHVjZSB0aGUgYWJvdmUgd2FybmluZy4gICovCitjYXNlIDIzOgorWVlfUlVMRV9TRVRVUAorI2xpbmUgMjYwICJzY2FuLWNvZGUubCIKK1NUUklOR19HUk9XOyBuZWVkX3NlbWljb2xvbiA9IHRydWU7CisJWVlfQlJFQUsKK2Nhc2UgMjQ6CitZWV9SVUxFX1NFVFVQCisjbGluZSAyNjIgInNjYW4tY29kZS5sIgorU1RSSU5HX0dST1c7IG5lZWRfc2VtaWNvbG9uID0gdHJ1ZTsKKwlZWV9CUkVBSworCisKKworY2FzZSAyNToKK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDI2NyAic2Nhbi1jb2RlLmwiCit7CisgICAgY29uc3QgY2hhciAqdHlwZV9uYW1lID0gTlVMTDsKKyAgICBmZXRjaF90eXBlX25hbWUgKGNvZGVfdGV4dCArIDEsICZ0eXBlX25hbWUsICpsb2MpWy0xXSA9IDA7CisgICAgb2JzdGFja19zZ3JvdyAoJm9ic3RhY2tfZm9yX3N0cmluZywgIl1iNF9kb2xsYXJfZG9sbGFyKCIpOworICAgIG9ic3RhY2tfcXVvdGUgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsIHR5cGVfbmFtZSk7CisgICAgb2JzdGFja19zZ3JvdyAoJm9ic3RhY2tfZm9yX3N0cmluZywgIilbIik7CisgICAgc2VsZi0+aXNfdmFsdWVfdXNlZCA9IHRydWU7CisgIH0KKwlZWV9CUkVBSworY2FzZSAyNjoKK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDI3NSAic2Nhbi1jb2RlLmwiCit7CisgICAgb2JzdGFja19zZ3JvdyAoJm9ic3RhY2tfZm9yX3N0cmluZywgIl1iNF9hdF9kb2xsYXJbIik7CisgICAgbG9jYXRpb25zX2ZsYWcgPSB0cnVlOworICB9CisJWVlfQlJFQUsKKworCisKKy8qIEVzY2FwZSBNNCBxdW90aW5nIGNoYXJhY3RlcnMgaW4gQyBjb2RlLiAgKi8KK2Nhc2UgMjc6CitZWV9SVUxFX1NFVFVQCisjbGluZSAyODUgInNjYW4tY29kZS5sIgorb2JzdGFja19lc2NhcGUgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsIGNvZGVfdGV4dCk7CisJWVlfQlJFQUsKKy8qIEJ5IGRlZmF1bHQsIGdyb3cgdGhlIHN0cmluZyBvYnN0YWNrIHdpdGggdGhlIGlucHV0LiAgKi8KK2Nhc2UgMjg6CisvKiBydWxlIDI4IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDI4OCAic2Nhbi1jb2RlLmwiCitTVFJJTkdfR1JPVzsKKwlZWV9CUkVBSworLyogRW5kIG9mIHByb2Nlc3NpbmcuICovCitjYXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToKK2Nhc2UgWVlfU1RBVEVfRU9GKFNDX0NPTU1FTlQpOgorY2FzZSBZWV9TVEFURV9FT0YoU0NfTElORV9DT01NRU5UKToKK2Nhc2UgWVlfU1RBVEVfRU9GKFNDX1NUUklORyk6CitjYXNlIFlZX1NUQVRFX0VPRihTQ19DSEFSQUNURVIpOgorY2FzZSBZWV9TVEFURV9FT0YoU0NfUlVMRV9BQ1RJT04pOgorY2FzZSBZWV9TVEFURV9FT0YoU0NfU1lNQk9MX0FDVElPTik6CisjbGluZSAyOTEgInNjYW4tY29kZS5sIgorU1RSSU5HX0ZJTklTSDsgcmV0dXJuIGxhc3Rfc3RyaW5nOworCVlZX0JSRUFLCisKK2Nhc2UgMjk6CitZWV9SVUxFX1NFVFVQCisjbGluZSAyOTQgInNjYW4tY29kZS5sIgorWVlfRkFUQUxfRVJST1IoICJmbGV4IHNjYW5uZXIgamFtbWVkIiApOworCVlZX0JSRUFLCisjbGluZSAxNDAyICJzY2FuLWNvZGUuYyIKKworCWNhc2UgWVlfRU5EX09GX0JVRkZFUjoKKwkJeworCQkvKiBBbW91bnQgb2YgdGV4dCBtYXRjaGVkIG5vdCBpbmNsdWRpbmcgdGhlIEVPQiBjaGFyLiAqLworCQlpbnQgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dCA9IChpbnQpICh5eV9jcCAtICh5eXRleHRfcHRyKSkgLSAxOworCisJCS8qIFVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTi4gKi8KKwkJKnl5X2NwID0gKHl5X2hvbGRfY2hhcik7CisJCVlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKKworCQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfTkVXICkKKwkJCXsKKwkJCS8qIFdlJ3JlIHNjYW5uaW5nIGEgbmV3IGZpbGUgb3IgaW5wdXQgc291cmNlLiAgSXQncworCQkJICogcG9zc2libGUgdGhhdCB0aGlzIGhhcHBlbmVkIGJlY2F1c2UgdGhlIHVzZXIKKwkJCSAqIGp1c3QgcG9pbnRlZCBjb2RlX2luIGF0IGEgbmV3IHNvdXJjZSBhbmQgY2FsbGVkCisJCQkgKiBjb2RlX2xleCgpLiAgSWYgc28sIHRoZW4gd2UgaGF2ZSB0byBhc3N1cmUKKwkJCSAqIGNvbnNpc3RlbmN5IGJldHdlZW4gWVlfQ1VSUkVOVF9CVUZGRVIgYW5kIG91cgorCQkJICogZ2xvYmFscy4gIEhlcmUgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIHNvLCBiZWNhdXNlCisJCQkgKiB0aGlzIGlzIHRoZSBmaXJzdCBhY3Rpb24gKG90aGVyIHRoYW4gcG9zc2libHkgYQorCQkJICogYmFjay11cCkgdGhhdCB3aWxsIG1hdGNoIGZvciB0aGUgbmV3IGlucHV0IHNvdXJjZS4KKwkJCSAqLworCQkJKHl5X25fY2hhcnMpID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlID0gY29kZV9pbjsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9OT1JNQUw7CisJCQl9CisKKwkJLyogTm90ZSB0aGF0IGhlcmUgd2UgdGVzdCBmb3IgeXlfY19idWZfcCAiPD0iIHRvIHRoZSBwb3NpdGlvbgorCQkgKiBvZiB0aGUgZmlyc3QgRU9CIGluIHRoZSBidWZmZXIsIHNpbmNlIHl5X2NfYnVmX3Agd2lsbAorCQkgKiBhbHJlYWR5IGhhdmUgYmVlbiBpbmNyZW1lbnRlZCBwYXN0IHRoZSBOVUwgY2hhcmFjdGVyCisJCSAqIChzaW5jZSBhbGwgc3RhdGVzIG1ha2UgdHJhbnNpdGlvbnMgb24gRU9CIHRvIHRoZQorCQkgKiBlbmQtb2YtYnVmZmVyIHN0YXRlKS4gIENvbnRyYXN0IHRoaXMgd2l0aCB0aGUgdGVzdAorCQkgKiBpbiBpbnB1dCgpLgorCQkgKi8KKwkJaWYgKCAoeXlfY19idWZfcCkgPD0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKV0gKQorCQkJeyAvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCisJCQl5eV9zdGF0ZV90eXBlIHl5X25leHRfc3RhdGU7CisKKwkJCSh5eV9jX2J1Zl9wKSA9ICh5eXRleHRfcHRyKSArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7CisKKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoICApOworCisJCQkvKiBPa2F5LCB3ZSdyZSBub3cgcG9zaXRpb25lZCB0byBtYWtlIHRoZSBOVUwKKwkJCSAqIHRyYW5zaXRpb24uICBXZSBjb3VsZG4ndCBoYXZlCisJCQkgKiB5eV9nZXRfcHJldmlvdXNfc3RhdGUoKSBnbyBhaGVhZCBhbmQgZG8gaXQKKwkJCSAqIGZvciB1cyBiZWNhdXNlIGl0IGRvZXNuJ3Qga25vdyBob3cgdG8gZGVhbAorCQkJICogd2l0aCB0aGUgcG9zc2liaWxpdHkgb2YgamFtbWluZyAoYW5kIHdlIGRvbid0CisJCQkgKiB3YW50IHRvIGJ1aWxkIGphbW1pbmcgaW50byBpdCBiZWNhdXNlIHRoZW4gaXQKKwkJCSAqIHdpbGwgcnVuIG1vcmUgc2xvd2x5KS4KKwkJCSAqLworCisJCQl5eV9uZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggeXlfY3VycmVudF9zdGF0ZSApOworCisJCQl5eV9icCA9ICh5eXRleHRfcHRyKSArIFlZX01PUkVfQURKOworCisJCQlpZiAoIHl5X25leHRfc3RhdGUgKQorCQkJCXsKKwkJCQkvKiBDb25zdW1lIHRoZSBOVUwuICovCisJCQkJeXlfY3AgPSArKyh5eV9jX2J1Zl9wKTsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbmV4dF9zdGF0ZTsKKwkJCQlnb3RvIHl5X21hdGNoOworCQkJCX0KKworCQkJZWxzZQorCQkJCXsKKy8qICUlIFsxNC4wXSBjb2RlIHRvIGRvIGJhY2stdXAgZm9yIGNvbXByZXNzZWQgdGFibGVzIGFuZCBzZXQgdXAgeXlfY3AgZ29lcyBoZXJlICovCisJCQkJeXlfY3AgPSAoeXlfbGFzdF9hY2NlcHRpbmdfY3Bvcyk7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9ICh5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSk7CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJCQl9CisJCQl9CisKKwkJZWxzZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoICApICkKKwkJCXsKKwkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQl7CisJCQkJKHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZikgPSAwOworCisJCQkJaWYgKCBjb2RlX3dyYXAoICkgKQorCQkJCQl7CisJCQkJCS8qIE5vdGU6IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgorCQkJCQkgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0byBoYXZlIHNldCB1cAorCQkJCQkgKiBjb2RlX3RleHQsIHdlIGNhbiBub3cgc2V0IHVwCisJCQkJCSAqIHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCisJCQkJCSAqIGhvc2VyIChsaWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bworCQkJCQkgKiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdlIHJldHVybiB0aGUKKwkJCQkJICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKKwkJCQkJICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4KKwkJCQkJICovCisJCQkJCSh5eV9jX2J1Zl9wKSA9ICh5eXRleHRfcHRyKSArIFlZX01PUkVfQURKOworCisJCQkJCXl5X2FjdCA9IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7CisJCQkJCWdvdG8gZG9fYWN0aW9uOworCQkJCQl9CisKKwkJCQllbHNlCisJCQkJCXsKKwkJCQkJaWYgKCAhICh5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpICkKKwkJCQkJCVlZX05FV19GSUxFOworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJfQorCisJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQkoeXlfY19idWZfcCkgPQorCQkJCQkoeXl0ZXh0X3B0cikgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OworCisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggICk7CisKKwkJCQl5eV9jcCA9ICh5eV9jX2J1Zl9wKTsKKwkJCQl5eV9icCA9ICh5eXRleHRfcHRyKSArIFlZX01PUkVfQURKOworCQkJCWdvdG8geXlfbWF0Y2g7CisKKwkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJCSh5eV9jX2J1Zl9wKSA9CisJCQkJJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKV07CisKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCAgKTsKKworCQkJCXl5X2NwID0gKHl5X2NfYnVmX3ApOworCQkJCXl5X2JwID0gKHl5dGV4dF9wdHIpICsgWVlfTU9SRV9BREo7CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJCX0KKwkJYnJlYWs7CisJCX0KKworCWRlZmF1bHQ6CisJCVlZX0ZBVEFMX0VSUk9SKAorCQkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOworCX0gLyogZW5kIG9mIGFjdGlvbiBzd2l0Y2ggKi8KKwkJfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCit9IC8qIGVuZCBvZiBjb2RlX2xleCAqLworLyogJW9rLWZvci1oZWFkZXIgKi8KKworLyogJWlmLWMrKy1vbmx5ICovCisvKiAlbm90LWZvci1oZWFkZXIgKi8KKworLyogJW9rLWZvci1oZWFkZXIgKi8KKworLyogJWVuZGlmICovCisKKy8qIHl5X2dldF9uZXh0X2J1ZmZlciAtIHRyeSB0byByZWFkIGluIGEgbmV3IGJ1ZmZlcgorICoKKyAqIFJldHVybnMgYSBjb2RlIHJlcHJlc2VudGluZyBhbiBhY3Rpb246CisgKglFT0JfQUNUX0xBU1RfTUFUQ0ggLQorICoJRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCisgKglFT0JfQUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKKyAqLworLyogJWlmLWMtb25seSAqLworc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHZvaWQpCisvKiAlZW5kaWYgKi8KKy8qICVpZi1jKystb25seSAqLworLyogJWVuZGlmICovCit7CisgICAgCXJlZ2lzdGVyIGNoYXIgKmRlc3QgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsKKwlyZWdpc3RlciBjaGFyICpzb3VyY2UgPSAoeXl0ZXh0X3B0cik7CisJcmVnaXN0ZXIgaW50IG51bWJlcl90b19tb3ZlLCBpOworCWludCByZXRfdmFsOworCisJaWYgKCAoeXlfY19idWZfcCkgPiAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hhcnMpICsgMV0gKQorCQlZWV9GQVRBTF9FUlJPUigKKwkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQiICk7CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfZmlsbF9idWZmZXIgPT0gMCApCisJCXsgLyogRG9uJ3QgdHJ5IHRvIGZpbGwgdGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBhbiBFT0YuICovCisJCWlmICggKHl5X2NfYnVmX3ApIC0gKHl5dGV4dF9wdHIpIC0gWVlfTU9SRV9BREogPT0gMSApCisJCQl7CisJCQkvKiBXZSBtYXRjaGVkIGEgc2luZ2xlIGNoYXJhY3RlciwgdGhlIEVPQiwgc28KKwkJCSAqIHRyZWF0IHRoaXMgYXMgYSBmaW5hbCBFT0YuCisJCQkgKi8KKwkJCXJldHVybiBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJfQorCisJCWVsc2UKKwkJCXsKKwkJCS8qIFdlIG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0CisJCQkgKiBwcm9jZXNzIGl0LgorCQkJICovCisJCQlyZXR1cm4gRU9CX0FDVF9MQVNUX01BVENIOworCQkJfQorCQl9CisKKwkvKiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEuICovCisKKwkvKiBGaXJzdCBtb3ZlIGxhc3QgY2hhcnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLworCW51bWJlcl90b19tb3ZlID0gKGludCkgKCh5eV9jX2J1Zl9wKSAtICh5eXRleHRfcHRyKSkgLSAxOworCisJZm9yICggaSA9IDA7IGkgPCBudW1iZXJfdG9fbW92ZTsgKytpICkKKwkJKihkZXN0KyspID0gKihzb3VyY2UrKyk7CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgKQorCQkvKiBkb24ndCBkbyB0aGUgcmVhZCwgaXQncyBub3QgZ3VhcmFudGVlZCB0byByZXR1cm4gYW4gRU9GLAorCQkgKiBqdXN0IGZvcmNlIGFuIEVPRgorCQkgKi8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0gKHl5X25fY2hhcnMpID0gMDsKKworCWVsc2UKKwkJeworCQkJeXlfc2l6ZV90IG51bV90b19yZWFkID0KKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkKKwkJCXsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLworCisJCQkvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KKwkJCVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFOworCisJCQlpbnQgeXlfY19idWZfcF9vZmZzZXQgPQorCQkJCShpbnQpICgoeXlfY19idWZfcCkgLSBiLT55eV9jaF9idWYpOworCisJCQlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQorCQkJCXsKKwkJCQl5eV9zaXplX3QgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7CisKKwkJCQlpZiAoIG5ld19zaXplIDw9IDAgKQorCQkJCQliLT55eV9idWZfc2l6ZSArPSBiLT55eV9idWZfc2l6ZSAvIDg7CisJCQkJZWxzZQorCQkJCQliLT55eV9idWZfc2l6ZSAqPSAyOworCisJCQkJYi0+eXlfY2hfYnVmID0gKGNoYXIgKikKKwkJCQkJLyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBjaGFycy4gKi8KKwkJCQkJY29kZV9yZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1ZixiLT55eV9idWZfc2l6ZSArIDIgICk7CisJCQkJfQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4gKi8KKwkJCQliLT55eV9jaF9idWYgPSAwOworCisJCQlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJCQlZWV9GQVRBTF9FUlJPUigKKwkJCQkiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKKworCQkJKHl5X2NfYnVmX3ApID0gJmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07CisKKwkJCW51bV90b19yZWFkID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtCisJCQkJCQludW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJCX0KKworCQlpZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCisJCQludW1fdG9fcmVhZCA9IFlZX1JFQURfQlVGX1NJWkU7CisKKwkJLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCisJCVlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSksCisJCQkoeXlfbl9jaGFycyksIG51bV90b19yZWFkICk7CisKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0gKHl5X25fY2hhcnMpOworCQl9CisKKwlpZiAoICh5eV9uX2NoYXJzKSA9PSAwICkKKwkJeworCQlpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJY29kZV9yZXN0YXJ0KGNvZGVfaW4gICk7CisJCQl9CisKKwkJZWxzZQorCQkJeworCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9CisJCQkJWVlfQlVGRkVSX0VPRl9QRU5ESU5HOworCQkJfQorCQl9CisKKwllbHNlCisJCXJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1NDQU47CisKKwlpZiAoKHl5X3NpemVfdCkgKCh5eV9uX2NoYXJzKSArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUpIHsKKwkJLyogRXh0ZW5kIHRoZSBhcnJheSBieSA1MCUsIHBsdXMgdGhlIG51bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KKwkJeXlfc2l6ZV90IG5ld19zaXplID0gKHl5X25fY2hhcnMpICsgbnVtYmVyX3RvX21vdmUgKyAoKHl5X25fY2hhcnMpID4+IDEpOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICopIGNvZGVfcmVhbGxvYygodm9pZCAqKSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAgKTsKKwkJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOworCX0KKworCSh5eV9uX2NoYXJzKSArPSBudW1iZXJfdG9fbW92ZTsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycyldID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKSArIDFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJKHl5dGV4dF9wdHIpID0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWzBdOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qIHl5X2dldF9wcmV2aW91c19zdGF0ZSAtIGdldCB0aGUgc3RhdGUganVzdCBiZWZvcmUgdGhlIEVPQiBjaGFyIHdhcyByZWFjaGVkICovCisKKy8qICVpZi1jLW9ubHkgKi8KKy8qICVub3QtZm9yLWhlYWRlciAqLworCisgICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh2b2lkKQorLyogJWVuZGlmICovCisvKiAlaWYtYysrLW9ubHkgKi8KKy8qICVlbmRpZiAqLworeworCXJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcDsKKyAgICAKKy8qICUlIFsxNS4wXSBjb2RlIHRvIGdldCB0aGUgc3RhcnQgc3RhdGUgaW50byB5eV9jdXJyZW50X3N0YXRlIGdvZXMgaGVyZSAqLworCXl5X2N1cnJlbnRfc3RhdGUgPSAoeXlfc3RhcnQpOworCisJZm9yICggeXlfY3AgPSAoeXl0ZXh0X3B0cikgKyBZWV9NT1JFX0FESjsgeXlfY3AgPCAoeXlfY19idWZfcCk7ICsreXlfY3AgKQorCQl7CisvKiAlJSBbMTYuMF0gY29kZSB0byBmaW5kIHRoZSBuZXh0IHN0YXRlIGdvZXMgaGVyZSAqLworCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAoKnl5X2NwID8geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV0gOiAzMCk7CisJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKKwkJCXsKKwkJCSh5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSkgPSB5eV9jdXJyZW50X3N0YXRlOworCQkJKHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MpID0geXlfY3A7CisJCQl9CisJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJCXsKKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gMTAxICkKKwkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCX0KKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CisJCX0KKworCXJldHVybiB5eV9jdXJyZW50X3N0YXRlOworfQorCisvKiB5eV90cnlfTlVMX3RyYW5zIC0gdHJ5IHRvIG1ha2UgYSB0cmFuc2l0aW9uIG9uIHRoZSBOVUwgY2hhcmFjdGVyCisgKgorICogc3lub3BzaXMKKyAqCW5leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCBjdXJyZW50X3N0YXRlICk7CisgKi8KKy8qICVpZi1jLW9ubHkgKi8KKyAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICAoeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlICkKKy8qICVlbmRpZiAqLworLyogJWlmLWMrKy1vbmx5ICovCisvKiAlZW5kaWYgKi8KK3sKKwlyZWdpc3RlciBpbnQgeXlfaXNfamFtOworICAgIC8qICUlIFsxNy4wXSBjb2RlIHRvIGZpbmQgdGhlIG5leHQgc3RhdGUsIGFuZCBwZXJoYXBzIGRvIGJhY2tpbmcgdXAsIGdvZXMgaGVyZSAqLworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwID0gKHl5X2NfYnVmX3ApOworCisJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gMzA7CisJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQl7CisJCSh5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSkgPSB5eV9jdXJyZW50X3N0YXRlOworCQkoeXlfbGFzdF9hY2NlcHRpbmdfY3BvcykgPSB5eV9jcDsKKwkJfQorCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJeworCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gMTAxICkKKwkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQl9CisJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CisJeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gMTAwKTsKKworCQlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7Cit9CisKKy8qICVpZi1jLW9ubHkgKi8KKworLyogJWVuZGlmICovCisKKy8qICVpZi1jLW9ubHkgKi8KKyNpZm5kZWYgWVlfTk9fSU5QVVQKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIHN0YXRpYyBpbnQgeXlpbnB1dCAodm9pZCkKKyNlbHNlCisgICAgc3RhdGljIGludCBpbnB1dCAgKHZvaWQpCisjZW5kaWYKKworLyogJWVuZGlmICovCisvKiAlaWYtYysrLW9ubHkgKi8KKy8qICVlbmRpZiAqLworeworCWludCBjOworICAgIAorCSooeXlfY19idWZfcCkgPSAoeXlfaG9sZF9jaGFyKTsKKworCWlmICggKih5eV9jX2J1Zl9wKSA9PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQl7CisJCS8qIHl5X2NfYnVmX3Agbm93IHBvaW50cyB0byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJuLgorCQkgKiBJZiB0aGlzIG9jY3VycyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4gaXQncyBhCisJCSAqIHZhbGlkIE5VTDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCisJCSAqLworCQlpZiAoICh5eV9jX2J1Zl9wKSA8ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycyldICkKKwkJCS8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJCSooeXlfY19idWZfcCkgPSAnXDAnOworCisJCWVsc2UKKwkJCXsgLyogbmVlZCBtb3JlIGlucHV0ICovCisJCQl5eV9zaXplX3Qgb2Zmc2V0ID0gKHl5X2NfYnVmX3ApIC0gKHl5dGV4dF9wdHIpOworCQkJKysoeXlfY19idWZfcCk7CisKKwkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggICkgKQorCQkJCXsKKwkJCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKKwkJCQkJLyogVGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlfZ19uX2IoKQorCQkJCQkgKiBzZWVzIHRoYXQgd2UndmUgYWNjdW11bGF0ZWQgYQorCQkJCQkgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVkIHRvCisJCQkJCSAqIHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlCisJCQkJCSAqIHByb2NlZWRpbmcuICBCdXQgZm9yIGlucHV0KCksCisJCQkJCSAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29uc2lkZXIuCisJCQkJCSAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAorCQkJCQkgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgorCQkJCQkgKi8KKworCQkJCQkvKiBSZXNldCBidWZmZXIgc3RhdHVzLiAqLworCQkJCQljb2RlX3Jlc3RhcnQoY29kZV9pbiApOworCisJCQkJCS8qRkFMTFRIUk9VR0gqLworCisJCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgorCQkJCQl7CisJCQkJCWlmICggY29kZV93cmFwKCApICkKKwkJCQkJCXJldHVybiBFT0Y7CisKKwkJCQkJaWYgKCAhICh5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpICkKKwkJCQkJCVlZX05FV19GSUxFOworI2lmZGVmIF9fY3BsdXNwbHVzCisJCQkJCXJldHVybiB5eWlucHV0KCk7CisjZWxzZQorCQkJCQlyZXR1cm4gaW5wdXQoKTsKKyNlbmRpZgorCQkJCQl9CisKKwkJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQkJKHl5X2NfYnVmX3ApID0gKHl5dGV4dF9wdHIpICsgb2Zmc2V0OworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCWMgPSAqKHVuc2lnbmVkIGNoYXIgKikgKHl5X2NfYnVmX3ApOwkvKiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KKwkqKHl5X2NfYnVmX3ApID0gJ1wwJzsJLyogcHJlc2VydmUgY29kZV90ZXh0ICovCisJKHl5X2hvbGRfY2hhcikgPSAqKysoeXlfY19idWZfcCk7CisKKy8qICUlIFsxOS4wXSB1cGRhdGUgQk9MIGFuZCBjb2RlX2xpbmVubyAqLworCisJcmV0dXJuIGM7Cit9CisvKiAlaWYtYy1vbmx5ICovCisjZW5kaWYJLyogaWZuZGVmIFlZX05PX0lOUFVUICovCisvKiAlZW5kaWYgKi8KKworLyoqIEltbWVkaWF0ZWx5IHN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBzdHJlYW0uCisgKiBAcGFyYW0gaW5wdXRfZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4KKyAqIAorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXNldCB0aGUgc3RhcnQgY29uZGl0aW9uIHRvIEBjIElOSVRJQUwgLgorICovCisvKiAlaWYtYy1vbmx5ICovCisgICAgdm9pZCBjb2RlX3Jlc3RhcnQgIChGSUxFICogaW5wdXRfZmlsZSApCisvKiAlZW5kaWYgKi8KKy8qICVpZi1jKystb25seSAqLworLyogJWVuZGlmICovCit7CisgICAgCisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7CisgICAgICAgIGNvZGVfZW5zdXJlX2J1ZmZlcl9zdGFjayAoKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKyAgICAgICAgICAgIGNvZGVfX2NyZWF0ZV9idWZmZXIoY29kZV9pbixZWV9CVUZfU0laRSApOworCX0KKworCWNvZGVfX2luaXRfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSLGlucHV0X2ZpbGUgKTsKKwljb2RlX19sb2FkX2J1ZmZlcl9zdGF0ZSggKTsKK30KKworLyoqIFN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IGlucHV0IGJ1ZmZlci4KKyAqIAorICovCisvKiAlaWYtYy1vbmx5ICovCisgICAgdm9pZCBjb2RlX19zd2l0Y2hfdG9fYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBuZXdfYnVmZmVyICkKKy8qICVlbmRpZiAqLworLyogJWlmLWMrKy1vbmx5ICovCisvKiAlZW5kaWYgKi8KK3sKKyAgICAKKwkvKiBUT0RPLiBXZSBzaG91bGQgYmUgYWJsZSB0byByZXBsYWNlIHRoaXMgZW50aXJlIGZ1bmN0aW9uIGJvZHkKKwkgKiB3aXRoCisJICoJCWNvZGVfcG9wX2J1ZmZlcl9zdGF0ZSgpOworCSAqCQljb2RlX3B1c2hfYnVmZmVyX3N0YXRlKG5ld19idWZmZXIpOworICAgICAqLworCWNvZGVfZW5zdXJlX2J1ZmZlcl9zdGFjayAoKTsKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSID09IG5ld19idWZmZXIgKQorCQlyZXR1cm47CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJCSooeXlfY19idWZfcCkgPSAoeXlfaG9sZF9jaGFyKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0gKHl5X2NfYnVmX3ApOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSAoeXlfbl9jaGFycyk7CisJCX0KKworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisJY29kZV9fbG9hZF9idWZmZXJfc3RhdGUoICk7CisKKwkvKiBXZSBkb24ndCBhY3R1YWxseSBrbm93IHdoZXRoZXIgd2UgZGlkIHRoaXMgc3dpdGNoIGR1cmluZworCSAqIEVPRiAoY29kZV93cmFwKCkpIHByb2Nlc3NpbmcsIGJ1dCB0aGUgb25seSB0aW1lIHRoaXMgZmxhZworCSAqIGlzIGxvb2tlZCBhdCBpcyBhZnRlciBjb2RlX3dyYXAoKSBpcyBjYWxsZWQsIHNvIGl0J3Mgc2FmZQorCSAqIHRvIGdvIGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0LgorCSAqLworCSh5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpID0gMTsKK30KKworLyogJWlmLWMtb25seSAqLworc3RhdGljIHZvaWQgY29kZV9fbG9hZF9idWZmZXJfc3RhdGUgICh2b2lkKQorLyogJWVuZGlmICovCisvKiAlaWYtYysrLW9ubHkgKi8KKy8qICVlbmRpZiAqLworeworICAgIAkoeXlfbl9jaGFycykgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJKHl5dGV4dF9wdHIpID0gKHl5X2NfYnVmX3ApID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOworCWNvZGVfaW4gPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7CisJKHl5X2hvbGRfY2hhcikgPSAqKHl5X2NfYnVmX3ApOworfQorCisvKiogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gaW5wdXQgYnVmZmVyIHN0YXRlLgorICogQHBhcmFtIGZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0gc2l6ZSBUaGUgY2hhcmFjdGVyIGJ1ZmZlciBzaXplIGluIGJ5dGVzLiBXaGVuIGluIGRvdWJ0LCB1c2UgQGMgWVlfQlVGX1NJWkUuCisgKiAKKyAqIEByZXR1cm4gdGhlIGFsbG9jYXRlZCBidWZmZXIgc3RhdGUuCisgKi8KKy8qICVpZi1jLW9ubHkgKi8KKyAgICBZWV9CVUZGRVJfU1RBVEUgY29kZV9fY3JlYXRlX2J1ZmZlciAgKEZJTEUgKiBmaWxlLCBpbnQgIHNpemUgKQorLyogJWVuZGlmICovCisvKiAlaWYtYysrLW9ubHkgKi8KKy8qICVlbmRpZiAqLworeworCVlZX0JVRkZFUl9TVEFURSBiOworICAgIAorCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSBjb2RlX2FsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gY29kZV9fY3JlYXRlX2J1ZmZlcigpIiApOworCisJYi0+eXlfYnVmX3NpemUgPSBzaXplOworCisJLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQorCSAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLgorCSAqLworCWItPnl5X2NoX2J1ZiA9IChjaGFyICopIGNvZGVfYWxsb2MoYi0+eXlfYnVmX3NpemUgKyAyICApOworCWlmICggISBiLT55eV9jaF9idWYgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBjb2RlX19jcmVhdGVfYnVmZmVyKCkiICk7CisKKwliLT55eV9pc19vdXJfYnVmZmVyID0gMTsKKworCWNvZGVfX2luaXRfYnVmZmVyKGIsZmlsZSApOworCisJcmV0dXJuIGI7Cit9CisKKy8qKiBEZXN0cm95IHRoZSBidWZmZXIuCisgKiBAcGFyYW0gYiBhIGJ1ZmZlciBjcmVhdGVkIHdpdGggY29kZV9fY3JlYXRlX2J1ZmZlcigpCisgKiAKKyAqLworLyogJWlmLWMtb25seSAqLworICAgIHZvaWQgY29kZV9fZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICkKKy8qICVlbmRpZiAqLworLyogJWlmLWMrKy1vbmx5ICovCisvKiAlZW5kaWYgKi8KK3sKKyAgICAKKwlpZiAoICEgYiApCisJCXJldHVybjsKKworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5vdCBzdXJlIGlmIHdlIHNob3VsZCBwb3AgaGVyZS4gKi8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gKFlZX0JVRkZFUl9TVEFURSkgMDsKKworCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCisJCWNvZGVfZnJlZSgodm9pZCAqKSBiLT55eV9jaF9idWYgICk7CisKKwljb2RlX2ZyZWUoKHZvaWQgKikgYiAgKTsKK30KKworLyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZlci4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgc29tZXRpbWVzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBidWZmZXIsCisgKiBzdWNoIGFzIGR1cmluZyBhIGNvZGVfcmVzdGFydCgpIG9yIGF0IEVPRi4KKyAqLworLyogJWlmLWMtb25seSAqLworICAgIHN0YXRpYyB2b2lkIGNvZGVfX2luaXRfYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBiLCBGSUxFICogZmlsZSApCisvKiAlZW5kaWYgKi8KKy8qICVpZi1jKystb25seSAqLworLyogJWVuZGlmICovCisKK3sKKwlpbnQgb2Vycm5vID0gZXJybm87CisgICAgCisJY29kZV9fZmx1c2hfYnVmZmVyKGIgKTsKKworCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOworCWItPnl5X2ZpbGxfYnVmZmVyID0gMTsKKworICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIGNvZGVfX2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCisgICAgICogY2FsbGVkIGZyb20gY29kZV9yZXN0YXJ0KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCisgICAgICogSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgorICAgICAqLworICAgIGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsKKyAgICAgICAgYi0+eXlfYnNfbGluZW5vID0gMTsKKyAgICAgICAgYi0+eXlfYnNfY29sdW1uID0gMDsKKyAgICB9CisKKy8qICVpZi1jLW9ubHkgKi8KKworICAgICAgICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7CisgICAgCisvKiAlZW5kaWYgKi8KKy8qICVpZi1jKystb25seSAqLworLyogJWVuZGlmICovCisJZXJybm8gPSBvZXJybm87Cit9CisKKy8qKiBEaXNjYXJkIGFsbCBidWZmZXJlZCBjaGFyYWN0ZXJzLiBPbiB0aGUgbmV4dCBzY2FuLCBZWV9JTlBVVCB3aWxsIGJlIGNhbGxlZC4KKyAqIEBwYXJhbSBiIHRoZSBidWZmZXIgc3RhdGUgdG8gYmUgZmx1c2hlZCwgdXN1YWxseSBAYyBZWV9DVVJSRU5UX0JVRkZFUi4KKyAqIAorICovCisvKiAlaWYtYy1vbmx5ICovCisgICAgdm9pZCBjb2RlX19mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiApCisvKiAlZW5kaWYgKi8KKy8qICVpZi1jKystb25seSAqLworLyogJWVuZGlmICovCit7CisgICAgCWlmICggISBiICkKKwkJcmV0dXJuOworCisJYi0+eXlfbl9jaGFycyA9IDA7CisKKwkvKiBXZSBhbHdheXMgbmVlZCB0d28gZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcworCSAqIGEgdHJhbnNpdGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzCisJICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4KKwkgKi8KKwliLT55eV9jaF9idWZbMF0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJYi0+eXlfY2hfYnVmWzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJYi0+eXlfYnVmX3BvcyA9ICZiLT55eV9jaF9idWZbMF07CisKKwliLT55eV9hdF9ib2wgPSAxOworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOworCisJaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJY29kZV9fbG9hZF9idWZmZXJfc3RhdGUoICk7Cit9CisKKy8qICVpZi1jLW9yLWMrKyAqLworLyoqIFB1c2hlcyB0aGUgbmV3IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBUaGUgbmV3IHN0YXRlIGJlY29tZXMKKyAqICB0aGUgY3VycmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIHRoZSBzdGFjaworICogIGlmIG5lY2Vzc2FyeS4KKyAqICBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IHN0YXRlLgorICogIAorICovCisvKiAlaWYtYy1vbmx5ICovCit2b2lkIGNvZGVfcHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICkKKy8qICVlbmRpZiAqLworLyogJWlmLWMrKy1vbmx5ICovCisvKiAlZW5kaWYgKi8KK3sKKyAgICAJaWYgKG5ld19idWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJY29kZV9lbnN1cmVfYnVmZmVyX3N0YWNrKCk7CisKKwkvKiBUaGlzIGJsb2NrIGlzIGNvcGllZCBmcm9tIGNvZGVfX3N3aXRjaF90b19idWZmZXIuICovCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLworCQkqKHl5X2NfYnVmX3ApID0gKHl5X2hvbGRfY2hhcik7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9ICh5eV9jX2J1Zl9wKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0gKHl5X25fY2hhcnMpOworCQl9CisKKwkvKiBPbmx5IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4gKi8KKwlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpCisJCSh5eV9idWZmZXJfc3RhY2tfdG9wKSsrOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisKKwkvKiBjb3BpZWQgZnJvbSBjb2RlX19zd2l0Y2hfdG9fYnVmZmVyLiAqLworCWNvZGVfX2xvYWRfYnVmZmVyX3N0YXRlKCApOworCSh5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpID0gMTsKK30KKy8qICVlbmRpZiAqLworCisvKiAlaWYtYy1vci1jKysgKi8KKy8qKiBSZW1vdmVzIGFuZCBkZWxldGVzIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBpZiBwcmVzZW50LgorICogIFRoZSBuZXh0IGVsZW1lbnQgYmVjb21lcyB0aGUgbmV3IHRvcC4KKyAqICAKKyAqLworLyogJWlmLWMtb25seSAqLwordm9pZCBjb2RlX3BvcF9idWZmZXJfc3RhdGUgKHZvaWQpCisvKiAlZW5kaWYgKi8KKy8qICVpZi1jKystb25seSAqLworLyogJWVuZGlmICovCit7CisgICAgCWlmICghWVlfQ1VSUkVOVF9CVUZGRVIpCisJCXJldHVybjsKKworCWNvZGVfX2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgKTsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOworCWlmICgoeXlfYnVmZmVyX3N0YWNrX3RvcCkgPiAwKQorCQktLSh5eV9idWZmZXJfc3RhY2tfdG9wKTsKKworCWlmIChZWV9DVVJSRU5UX0JVRkZFUikgeworCQljb2RlX19sb2FkX2J1ZmZlcl9zdGF0ZSggKTsKKwkJKHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZikgPSAxOworCX0KK30KKy8qICVlbmRpZiAqLworCisvKiAlaWYtYy1vci1jKysgKi8KKy8qIEFsbG9jYXRlcyB0aGUgc3RhY2sgaWYgaXQgZG9lcyBub3QgZXhpc3QuCisgKiAgR3VhcmFudGVlcyBzcGFjZSBmb3IgYXQgbGVhc3Qgb25lIHB1c2guCisgKi8KKy8qICVpZi1jLW9ubHkgKi8KK3N0YXRpYyB2b2lkIGNvZGVfZW5zdXJlX2J1ZmZlcl9zdGFjayAodm9pZCkKKy8qICVlbmRpZiAqLworLyogJWlmLWMrKy1vbmx5ICovCisvKiAlZW5kaWYgKi8KK3sKKwl5eV9zaXplX3QgbnVtX3RvX2FsbG9jOworICAgIAorCWlmICghKHl5X2J1ZmZlcl9zdGFjaykpIHsKKworCQkvKiBGaXJzdCBhbGxvY2F0aW9uIGlzIGp1c3QgZm9yIDIgZWxlbWVudHMsIHNpbmNlIHdlIGRvbid0IGtub3cgaWYgdGhpcworCQkgKiBzY2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbgorCQkgKiBpbW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLgorICAgICAgICAgKi8KKwkJbnVtX3RvX2FsbG9jID0gMTsKKwkJKHl5X2J1ZmZlcl9zdGFjaykgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKWNvZGVfYWxsb2MKKwkJCQkJCQkJKG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKKwkJCQkJCQkJKTsKKwkJaWYgKCAhICh5eV9idWZmZXJfc3RhY2spICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIGNvZGVfZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOworCQkJCQkJCQkgIAorCQltZW1zZXQoKHl5X2J1ZmZlcl9zdGFjayksIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOworCQkJCQorCQkoeXlfYnVmZmVyX3N0YWNrX21heCkgPSBudW1fdG9fYWxsb2M7CisJCSh5eV9idWZmZXJfc3RhY2tfdG9wKSA9IDA7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKHl5X2J1ZmZlcl9zdGFja190b3ApID49ICgoeXlfYnVmZmVyX3N0YWNrX21heCkpIC0gMSl7CisKKwkJLyogSW5jcmVhc2UgdGhlIGJ1ZmZlciB0byBwcmVwYXJlIGZvciBhIHBvc3NpYmxlIHB1c2guICovCisJCWludCBncm93X3NpemUgPSA4IC8qIGFyYml0cmFyeSBncm93IHNpemUgKi87CisKKwkJbnVtX3RvX2FsbG9jID0gKHl5X2J1ZmZlcl9zdGFja19tYXgpICsgZ3Jvd19zaXplOworCQkoeXlfYnVmZmVyX3N0YWNrKSA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopY29kZV9yZWFsbG9jCisJCQkJCQkJCSgoeXlfYnVmZmVyX3N0YWNrKSwKKwkJCQkJCQkJbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQorCQkJCQkJCQkpOworCQlpZiAoICEgKHl5X2J1ZmZlcl9zdGFjaykgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gY29kZV9lbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7CisKKwkJLyogemVybyBvbmx5IHRoZSBuZXcgc2xvdHMuKi8KKwkJbWVtc2V0KCh5eV9idWZmZXJfc3RhY2spICsgKHl5X2J1ZmZlcl9zdGFja19tYXgpLCAwLCBncm93X3NpemUgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKKwkJKHl5X2J1ZmZlcl9zdGFja19tYXgpID0gbnVtX3RvX2FsbG9jOworCX0KK30KKy8qICVlbmRpZiAqLworCisvKiAlaWYtYy1vbmx5ICovCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGRpcmVjdGx5IGZyb20gYSB1c2VyLXNwZWNpZmllZCBjaGFyYWN0ZXIgYnVmZmVyLgorICogQHBhcmFtIGJhc2UgdGhlIGNoYXJhY3RlciBidWZmZXIKKyAqIEBwYXJhbSBzaXplIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBjaGFyYWN0ZXIgYnVmZmVyCisgKiAKKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LiAKKyAqLworWVlfQlVGRkVSX1NUQVRFIGNvZGVfX3NjYW5fYnVmZmVyICAoY2hhciAqIGJhc2UsIHl5X3NpemVfdCAgc2l6ZSApCit7CisJWVlfQlVGRkVSX1NUQVRFIGI7CisgICAgCisJaWYgKCBzaXplIDwgMiB8fAorCSAgICAgYmFzZVtzaXplLTJdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiB8fAorCSAgICAgYmFzZVtzaXplLTFdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCisJCS8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0Incy4gKi8KKwkJcmV0dXJuIDA7CisKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgY29kZV9hbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAgKTsKKwlpZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIGNvZGVfX3NjYW5fYnVmZmVyKCkiICk7CisKKwliLT55eV9idWZfc2l6ZSA9IHNpemUgLSAyOwkvKiAiLSAyIiB0byB0YWtlIGNhcmUgb2YgRU9CJ3MgKi8KKwliLT55eV9idWZfcG9zID0gYi0+eXlfY2hfYnVmID0gYmFzZTsKKwliLT55eV9pc19vdXJfYnVmZmVyID0gMDsKKwliLT55eV9pbnB1dF9maWxlID0gMDsKKwliLT55eV9uX2NoYXJzID0gYi0+eXlfYnVmX3NpemU7CisJYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOworCWItPnl5X2F0X2JvbCA9IDE7CisJYi0+eXlfZmlsbF9idWZmZXIgPSAwOworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOworCisJY29kZV9fc3dpdGNoX3RvX2J1ZmZlcihiICApOworCisJcmV0dXJuIGI7Cit9CisvKiAlZW5kaWYgKi8KKworLyogJWlmLWMtb25seSAqLworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBhIHN0cmluZy4gVGhlIG5leHQgY2FsbCB0byBjb2RlX2xleCgpIHdpbGwKKyAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgc3RyLgorICogQHBhcmFtIHl5c3RyIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHNjYW4KKyAqIAorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisgKiBAbm90ZSBJZiB5b3Ugd2FudCB0byBzY2FuIGJ5dGVzIHRoYXQgbWF5IGNvbnRhaW4gTlVMIHZhbHVlcywgdGhlbiB1c2UKKyAqICAgICAgIGNvZGVfX3NjYW5fYnl0ZXMoKSBpbnN0ZWFkLgorICovCitZWV9CVUZGRVJfU1RBVEUgY29kZV9fc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5c3RyICkKK3sKKyAgICAKKwlyZXR1cm4gY29kZV9fc2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4oeXlzdHIpICk7Cit9CisvKiAlZW5kaWYgKi8KKworLyogJWlmLWMtb25seSAqLworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiB0aGUgZ2l2ZW4gYnl0ZXMuIFRoZSBuZXh0IGNhbGwgdG8gY29kZV9sZXgoKSB3aWxsCisgKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIGJ5dGVzLgorICogQHBhcmFtIHl5Ynl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KKyAqIEBwYXJhbSBfeXlieXRlc19sZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCisgKiAKKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgorICovCitZWV9CVUZGRVJfU1RBVEUgY29kZV9fc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIHl5X3NpemVfdCAgX3l5Ynl0ZXNfbGVuICkKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKwljaGFyICpidWY7CisJeXlfc2l6ZV90IG47CisJaW50IGk7CisgICAgCisJLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICovCisJbiA9IF95eWJ5dGVzX2xlbiArIDI7CisJYnVmID0gKGNoYXIgKikgY29kZV9hbGxvYyhuICApOworCWlmICggISBidWYgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBjb2RlX19zY2FuX2J5dGVzKCkiICk7CisKKwlmb3IgKCBpID0gMDsgaSA8IF95eWJ5dGVzX2xlbjsgKytpICkKKwkJYnVmW2ldID0geXlieXRlc1tpXTsKKworCWJ1ZltfeXlieXRlc19sZW5dID0gYnVmW195eWJ5dGVzX2xlbisxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKworCWIgPSBjb2RlX19zY2FuX2J1ZmZlcihidWYsbiApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJiYWQgYnVmZmVyIGluIGNvZGVfX3NjYW5fYnl0ZXMoKSIgKTsKKworCS8qIEl0J3Mgb2theSB0byBncm93IGV0Yy4gdGhpcyBidWZmZXIsIGFuZCB3ZSBzaG91bGQgdGhyb3cgaXQKKwkgKiBhd2F5IHdoZW4gd2UncmUgZG9uZS4KKwkgKi8KKwliLT55eV9pc19vdXJfYnVmZmVyID0gMTsKKworCXJldHVybiBiOworfQorLyogJWVuZGlmICovCisKKyNpZm5kZWYgWVlfRVhJVF9GQUlMVVJFCisjZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyCisjZW5kaWYKKworLyogJWlmLWMtb25seSAqLworc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICkKK3sKKyAgICAJKHZvaWQpIGZwcmludGYoIHN0ZGVyciwgIiVzXG4iLCBtc2cgKTsKKwlleGl0KCBZWV9FWElUX0ZBSUxVUkUgKTsKK30KKy8qICVlbmRpZiAqLworLyogJWlmLWMrKy1vbmx5ICovCisvKiAlZW5kaWYgKi8KKworLyogUmVkZWZpbmUgeXlsZXNzKCkgc28gaXQgd29ya3MgaW4gc2VjdGlvbiAzIGNvZGUuICovCisKKyN1bmRlZiB5eWxlc3MKKyNkZWZpbmUgeXlsZXNzKG4pIFwKKwlkbyBcCisJCXsgXAorCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCBjb2RlX3RleHQuICovIFwKKyAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKKyAgICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAorCQljb2RlX3RleHRbY29kZV9sZW5nXSA9ICh5eV9ob2xkX2NoYXIpOyBcCisJCSh5eV9jX2J1Zl9wKSA9IGNvZGVfdGV4dCArIHl5bGVzc19tYWNyb19hcmc7IFwKKwkJKHl5X2hvbGRfY2hhcikgPSAqKHl5X2NfYnVmX3ApOyBcCisJCSooeXlfY19idWZfcCkgPSAnXDAnOyBcCisJCWNvZGVfbGVuZyA9IHl5bGVzc19tYWNyb19hcmc7IFwKKwkJfSBcCisJd2hpbGUgKCAwICkKKworLyogQWNjZXNzb3IgIG1ldGhvZHMgKGdldC9zZXQgZnVuY3Rpb25zKSB0byBzdHJ1Y3QgbWVtYmVycy4gKi8KKworLyogJWlmLWMtb25seSAqLworLyogJWlmLXJlZW50cmFudCAqLworLyogJWVuZGlmICovCisKKy8qKiBHZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCisgKiAKKyAqLworaW50IGNvZGVfZ2V0X2xpbmVubyAgKHZvaWQpCit7CisgICAgICAgIAorICAgIHJldHVybiBjb2RlX2xpbmVubzsKK30KKworLyoqIEdldCB0aGUgaW5wdXQgc3RyZWFtLgorICogCisgKi8KK0ZJTEUgKmNvZGVfZ2V0X2luICAodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIGNvZGVfaW47Cit9CisKKy8qKiBHZXQgdGhlIG91dHB1dCBzdHJlYW0uCisgKiAKKyAqLworRklMRSAqY29kZV9nZXRfb3V0ICAodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIGNvZGVfb3V0OworfQorCisvKiogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uCisgKiAKKyAqLworeXlfc2l6ZV90IGNvZGVfZ2V0X2xlbmcgICh2b2lkKQoreworICAgICAgICByZXR1cm4gY29kZV9sZW5nOworfQorCisvKiogR2V0IHRoZSBjdXJyZW50IHRva2VuLgorICogCisgKi8KKworY2hhciAqY29kZV9nZXRfdGV4dCAgKHZvaWQpCit7CisgICAgICAgIHJldHVybiBjb2RlX3RleHQ7Cit9CisKKy8qICVpZi1yZWVudHJhbnQgKi8KKy8qICVlbmRpZiAqLworCisvKiogU2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgorICogQHBhcmFtIGxpbmVfbnVtYmVyCisgKiAKKyAqLwordm9pZCBjb2RlX3NldF9saW5lbm8gKGludCAgbGluZV9udW1iZXIgKQoreworICAgIAorICAgIGNvZGVfbGluZW5vID0gbGluZV9udW1iZXI7Cit9CisKKy8qKiBTZXQgdGhlIGlucHV0IHN0cmVhbS4gVGhpcyBkb2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJyZW50CisgKiBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gaW5fc3RyIEEgcmVhZGFibGUgc3RyZWFtLgorICogCisgKiBAc2VlIGNvZGVfX3N3aXRjaF90b19idWZmZXIKKyAqLwordm9pZCBjb2RlX3NldF9pbiAoRklMRSAqICBpbl9zdHIgKQoreworICAgICAgICBjb2RlX2luID0gaW5fc3RyIDsKK30KKwordm9pZCBjb2RlX3NldF9vdXQgKEZJTEUgKiAgb3V0X3N0ciApCit7CisgICAgICAgIGNvZGVfb3V0ID0gb3V0X3N0ciA7Cit9CisKK2ludCBjb2RlX2dldF9kZWJ1ZyAgKHZvaWQpCit7CisgICAgICAgIHJldHVybiBjb2RlX19mbGV4X2RlYnVnOworfQorCit2b2lkIGNvZGVfc2V0X2RlYnVnIChpbnQgIGJkZWJ1ZyApCit7CisgICAgICAgIGNvZGVfX2ZsZXhfZGVidWcgPSBiZGVidWcgOworfQorCisvKiAlZW5kaWYgKi8KKworLyogJWlmLXJlZW50cmFudCAqLworLyogJWlmLWJpc29uLWJyaWRnZSAqLworLyogJWVuZGlmICovCisvKiAlZW5kaWYgaWYtYy1vbmx5ICovCisKKy8qICVpZi1jLW9ubHkgKi8KK3N0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh2b2lkKQoreworICAgICAgICAvKiBJbml0aWFsaXphdGlvbiBpcyB0aGUgc2FtZSBhcyBmb3IgdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4KKyAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGNvZGVfbGV4X2Rlc3Ryb3koKSwgc28gZG9uJ3QgYWxsb2NhdGUgaGVyZS4KKyAgICAgKi8KKworICAgICh5eV9idWZmZXJfc3RhY2spID0gMDsKKyAgICAoeXlfYnVmZmVyX3N0YWNrX3RvcCkgPSAwOworICAgICh5eV9idWZmZXJfc3RhY2tfbWF4KSA9IDA7CisgICAgKHl5X2NfYnVmX3ApID0gKGNoYXIgKikgMDsKKyAgICAoeXlfaW5pdCkgPSAwOworICAgICh5eV9zdGFydCkgPSAwOworCisvKiBEZWZpbmVkIGluIG1haW4uYyAqLworI2lmZGVmIFlZX1NURElOSVQKKyAgICBjb2RlX2luID0gc3RkaW47CisgICAgY29kZV9vdXQgPSBzdGRvdXQ7CisjZWxzZQorICAgIGNvZGVfaW4gPSAoRklMRSAqKSAwOworICAgIGNvZGVfb3V0ID0gKEZJTEUgKikgMDsKKyNlbmRpZgorCisgICAgLyogRm9yIGZ1dHVyZSByZWZlcmVuY2U6IFNldCBlcnJubyBvbiBlcnJvciwgc2luY2Ugd2UgYXJlIGNhbGxlZCBieQorICAgICAqIGNvZGVfbGV4X2luaXQoKQorICAgICAqLworICAgIHJldHVybiAwOworfQorLyogJWVuZGlmICovCisKKy8qICVpZi1jLW9ubHkgU05JUCEgdGhpcyBjdXJyZW50bHkgY2F1c2VzIGNvbmZsaWN0cyB3aXRoIHRoZSBjKysgc2Nhbm5lciAqLworLyogY29kZV9sZXhfZGVzdHJveSBpcyBmb3IgYm90aCByZWVudHJhbnQgYW5kIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMuICovCitpbnQgY29kZV9sZXhfZGVzdHJveSAgKHZvaWQpCit7CisgICAgCisgICAgLyogUG9wIHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAqLworCXdoaWxlKFlZX0NVUlJFTlRfQlVGRkVSKXsKKwkJY29kZV9fZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAgKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKKwkJY29kZV9wb3BfYnVmZmVyX3N0YXRlKCk7CisJfQorCisJLyogRGVzdHJveSB0aGUgc3RhY2sgaXRzZWxmLiAqLworCWNvZGVfZnJlZSgoeXlfYnVmZmVyX3N0YWNrKSApOworCSh5eV9idWZmZXJfc3RhY2spID0gTlVMTDsKKworICAgIC8qIFJlc2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBhIG5vbi1yZWVudHJhbnQgc2Nhbm5lciBzbyB0aGUgbmV4dCB0aW1lCisgICAgICogY29kZV9sZXgoKSBpcyBjYWxsZWQsIGluaXRpYWxpemF0aW9uIHdpbGwgb2NjdXIuICovCisgICAgeXlfaW5pdF9nbG9iYWxzKCApOworCisvKiAlaWYtcmVlbnRyYW50ICovCisvKiAlZW5kaWYgKi8KKyAgICByZXR1cm4gMDsKK30KKy8qICVlbmRpZiAqLworCisvKgorICogSW50ZXJuYWwgdXRpbGl0eSByb3V0aW5lcy4KKyAqLworCisjaWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciogczEsIHl5Y29uc3QgY2hhciAqIHMyLCBpbnQgbiApCit7CisJcmVnaXN0ZXIgaW50IGk7CisJZm9yICggaSA9IDA7IGkgPCBuOyArK2kgKQorCQlzMVtpXSA9IHMyW2ldOworfQorI2VuZGlmCisKKyNpZmRlZiBZWV9ORUVEX1NUUkxFTgorc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogcyApCit7CisJcmVnaXN0ZXIgaW50IG47CisJZm9yICggbiA9IDA7IHNbbl07ICsrbiApCisJCTsKKworCXJldHVybiBuOworfQorI2VuZGlmCisKK3ZvaWQgKmNvZGVfYWxsb2MgKHl5X3NpemVfdCAgc2l6ZSApCit7CisJcmV0dXJuICh2b2lkICopIG1hbGxvYyggc2l6ZSApOworfQorCit2b2lkICpjb2RlX3JlYWxsb2MgICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgKQoreworCS8qIFRoZSBjYXN0IHRvIChjaGFyICopIGluIHRoZSBmb2xsb3dpbmcgYWNjb21tb2RhdGVzIGJvdGgKKwkgKiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB1c2UgY2hhciogZ2VuZXJpYyBwb2ludGVycywgYW5kIHRob3NlCisJICogdGhhdCB1c2Ugdm9pZCogZ2VuZXJpYyBwb2ludGVycy4gIEl0IHdvcmtzIHdpdGggdGhlIGxhdHRlcgorCSAqIGJlY2F1c2UgYm90aCBBTlNJIEMgYW5kIEMrKyBhbGxvdyBjYXN0bGVzcyBhc3NpZ25tZW50IGZyb20KKwkgKiBhbnkgcG9pbnRlciB0eXBlIHRvIHZvaWQqLCBhbmQgZGVhbCB3aXRoIGFyZ3VtZW50IGNvbnZlcnNpb25zCisJICogYXMgdGhvdWdoIGRvaW5nIGFuIGFzc2lnbm1lbnQuCisJICovCisJcmV0dXJuICh2b2lkICopIHJlYWxsb2MoIChjaGFyICopIHB0ciwgc2l6ZSApOworfQorCit2b2lkIGNvZGVfZnJlZSAodm9pZCAqIHB0ciApCit7CisJZnJlZSggKGNoYXIgKikgcHRyICk7CS8qIHNlZSBjb2RlX3JlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLworfQorCisvKiAlaWYtdGFibGVzLXNlcmlhbGl6YXRpb24gZGVmaW5pdGlvbnMgKi8KKy8qICVkZWZpbmUteXl0YWJsZXMgICBUaGUgbmFtZSBmb3IgdGhpcyBzcGVjaWZpYyBzY2FubmVyJ3MgdGFibGVzLiAqLworI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKKy8qICVlbmRpZiAqLworCisvKiAlb2stZm9yLWhlYWRlciAqLworCisjbGluZSAyOTQgInNjYW4tY29kZS5sIgorCisKKworc3RhdGljIGlubGluZSBib29sCitpc19kb3Rfb3JfZGFzaCAoY2hhciBjaCkKK3sKKyAgcmV0dXJuIGNoID09ICcuJyB8fCBjaCA9PSAnLSc7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorY29udGFpbnNfZG90X29yX2Rhc2ggKGNvbnN0IGNoYXIqIHApCit7CisgIGZvciAoOyAqcDsgKytwKQorICAgIGlmIChpc19kb3Rfb3JfZGFzaCAoKnApKQorICAgICAgcmV0dXJuIHRydWU7CisgIHJldHVybiBmYWxzZTsKK30KKworLyogRGVmaW5lcyBhIHZhcmlhbnQgb2YgYSBzeW1ib2xpYyBuYW1lIHJlc29sdXRpb24uICovCit0eXBlZGVmIHN0cnVjdAoreworICAvKiBJbmRleCBpbiBzeW1ib2wgbGlzdC4gKi8KKyAgdW5zaWduZWQgc3ltYm9sX2luZGV4OworCisgIC8qIE1hdGNoZWQgc3ltYm9sIGlkIGFuZCBsb2MuICovCisgIHVuaXFzdHIgaWQ7CisgIGxvY2F0aW9uIGxvYzsKKworICAvKiBIaWRpbmcgbmFtZWQgcmVmZXJlbmNlLiAqLworICBuYW1lZF9yZWYqIGhpZGRlbl9ieTsKKworICAvKiBFcnJvciBmbGFncy4gTWF5IGNvbnRhaW4gemVybyAobm8gZXJyb3JzKSBvcgorICAgICBhIGNvbWJpbmF0aW9uIG9mIFZBUklBTlRfKiB2YWx1ZXMuICovCisgIHVuc2lnbmVkIGVycjsKK30gdmFyaWFudDsKKworLyogU2V0IHdoZW4gdGhlIHZhcmlhbnQgcmVmZXJzIHRvIGEgc3ltYm9sIGhpZGRlbgorICAgYnkgYW4gZXhwbGljaXQgc3ltYm9sIHJlZmVyZW5jZS4gKi8KKyNkZWZpbmUgVkFSSUFOVF9ISURERU4gKDEgPDwgMCkKKworLyogU2V0IHdoZW4gdGhlIHZhcmlhbnQgcmVmZXJzIHRvIGEgc3ltYm9sIGNvbnRhaW5pbmcKKyAgIGRvdHMgb3IgZGFzaGVzLiBXaWxsIHJlcXVpcmUgZXhwbGljaXQgYnJhY2tldGluZy4gKi8KKyNkZWZpbmUgVkFSSUFOVF9CQURfQlJBQ0tFVElORyAoMSA8PCAxKQorCisvKiBTZXQgd2hlbiB0aGUgdmFyaWFudCByZWZlcnMgdG8gYSBzeW1ib2wgd2hpY2ggaXMKKyAgIG5vdCB2aXNpYmxlIGZyb20gY3VycmVudCBtaWRydWxlLiAqLworI2RlZmluZSBWQVJJQU5UX05PVF9WSVNJQkxFX0ZST01fTUlEUlVMRSAoMSA8PCAyKQorCitzdGF0aWMgdmFyaWFudCAqdmFyaWFudF90YWJsZSA9IE5VTEw7CitzdGF0aWMgdW5zaWduZWQgdmFyaWFudF90YWJsZV9zaXplID0gMDsKK3N0YXRpYyB1bnNpZ25lZCB2YXJpYW50X2NvdW50ID0gMDsKKworc3RhdGljIHZhcmlhbnQgKgordmFyaWFudF90YWJsZV9ncm93ICh2b2lkKQoreworICArK3ZhcmlhbnRfY291bnQ7CisgIGlmICh2YXJpYW50X2NvdW50ID4gdmFyaWFudF90YWJsZV9zaXplKQorICAgIHsKKyAgICAgIHdoaWxlICh2YXJpYW50X2NvdW50ID4gdmFyaWFudF90YWJsZV9zaXplKQorCXZhcmlhbnRfdGFibGVfc2l6ZSA9IDIgKiB2YXJpYW50X3RhYmxlX3NpemUgKyAzOworICAgICAgdmFyaWFudF90YWJsZSA9IHhucmVhbGxvYyAodmFyaWFudF90YWJsZSwgdmFyaWFudF90YWJsZV9zaXplLAorCQkJCSBzaXplb2YgKnZhcmlhbnRfdGFibGUpOworICAgIH0KKyAgcmV0dXJuICZ2YXJpYW50X3RhYmxlW3ZhcmlhbnRfY291bnQgLSAxXTsKK30KKworc3RhdGljIHZvaWQKK3ZhcmlhbnRfdGFibGVfZnJlZSAodm9pZCkKK3sKKyAgZnJlZSAodmFyaWFudF90YWJsZSk7CisgIHZhcmlhbnRfdGFibGUgPSBOVUxMOworICB2YXJpYW50X3RhYmxlX3NpemUgPSB2YXJpYW50X2NvdW50ID0gMDsKK30KKworc3RhdGljIGNoYXIgKgorZmluZF9wcmVmaXhfZW5kIChjb25zdCBjaGFyICpwcmVmaXgsIGNoYXIgKmJlZ2luLCBjaGFyICplbmQpCit7CisgIGNoYXIgKnB0ciA9IGJlZ2luOworCisgIGZvciAoOyAqcHJlZml4ICYmIHB0ciAhPSBlbmQ7ICsrcHJlZml4LCArK3B0cikKKyAgICBpZiAoKnByZWZpeCAhPSAqcHRyKQorICAgICAgcmV0dXJuIDA7CisKKyAgaWYgKCpwcmVmaXgpCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIHB0cjsKK30KKworc3RhdGljIHZhcmlhbnQgKgordmFyaWFudF9hZGQgKHVuaXFzdHIgaWQsIGxvY2F0aW9uIGlkX2xvYywgdW5zaWduZWQgc3ltYm9sX2luZGV4LAorCSAgICAgY2hhciAqY3AsIGNoYXIgKmNwX2VuZCwgYm9vbCBleHBsaWNpdF9icmFja2V0aW5nKQoreworICBjaGFyICpwcmVmaXhfZW5kOworCisgIHByZWZpeF9lbmQgPSBmaW5kX3ByZWZpeF9lbmQgKGlkLCBjcCwgY3BfZW5kKTsKKyAgaWYgKHByZWZpeF9lbmQgJiYKKyAgICAgIChwcmVmaXhfZW5kID09IGNwX2VuZCB8fAorICAgICAgICghZXhwbGljaXRfYnJhY2tldGluZyAmJiBpc19kb3Rfb3JfZGFzaCAoKnByZWZpeF9lbmQpKSkpCisgICAgeworICAgICAgdmFyaWFudCAqciA9IHZhcmlhbnRfdGFibGVfZ3JvdyAoKTsKKyAgICAgIHItPnN5bWJvbF9pbmRleCA9IHN5bWJvbF9pbmRleDsKKyAgICAgIHItPmlkID0gaWQ7CisgICAgICByLT5sb2MgPSBpZF9sb2M7CisgICAgICByLT5oaWRkZW5fYnkgPSBOVUxMOworICAgICAgci0+ZXJyID0gMDsKKyAgICAgIHJldHVybiByOworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitnZXRfYXRfc3BlYyAodW5zaWduZWQgc3ltYm9sX2luZGV4KQoreworICBzdGF0aWMgY2hhciBhdF9idWZbMjBdOworICBpZiAoc3ltYm9sX2luZGV4ID09IDApCisgICAgc3RyY3B5IChhdF9idWYsICIkJCIpOworICBlbHNlCisgICAgc25wcmludGYgKGF0X2J1Ziwgc2l6ZW9mIGF0X2J1ZiwgIiQldSIsIHN5bWJvbF9pbmRleCk7CisgIHJldHVybiBhdF9idWY7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93X3N1Yl9tZXNzYWdlcyAoY29uc3QgY2hhciogY3AsIGJvb2wgZXhwbGljaXRfYnJhY2tldGluZywKKyAgICAgICAgICAgICAgICAgICBpbnQgbWlkcnVsZV9yaHNfaW5kZXgsIGNoYXIgZG9sbGFyX29yX2F0LAorICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfd2FybmluZywgdW5zaWduZWQgaW5kZW50KQoreworICB1bnNpZ25lZCBpOworCisgIGZvciAoaSA9IDA7IGkgPCB2YXJpYW50X2NvdW50OyArK2kpCisgICAgeworICAgICAgY29uc3QgdmFyaWFudCAqdmFyID0gJnZhcmlhbnRfdGFibGVbaV07CisgICAgICBjb25zdCBjaGFyICphdF9zcGVjID0gZ2V0X2F0X3NwZWMgKHZhci0+c3ltYm9sX2luZGV4KTsKKworICAgICAgaWYgKHZhci0+ZXJyID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoaXNfd2FybmluZykKKyAgICAgICAgICAgIHdhcm5fYXRfaW5kZW50ICh2YXItPmxvYywgJmluZGVudCwgXygicmVmZXJzIHRvOiAlYyVzIGF0ICVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9sbGFyX29yX2F0LCB2YXItPmlkLCBhdF9zcGVjKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21wbGFpbl9hdF9pbmRlbnQgKHZhci0+bG9jLCAmaW5kZW50LCBfKCJyZWZlcnMgdG86ICVjJXMgYXQgJXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9sbGFyX29yX2F0LCB2YXItPmlkLCBhdF9zcGVjKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorCXsKKwkgIHN0YXRpYyBzdHJ1Y3Qgb2JzdGFjayBtc2dfYnVmOworCSAgY29uc3QgY2hhciAqdGFpbCA9IGV4cGxpY2l0X2JyYWNrZXRpbmcgPyAiIiA6CisJICAgIGNwICsgc3RybGVuICh2YXItPmlkKTsKKwkgIGNvbnN0IGNoYXIgKmlkID0gdmFyLT5oaWRkZW5fYnkgPyB2YXItPmhpZGRlbl9ieS0+aWQgOgorCSAgICB2YXItPmlkOworCSAgbG9jYXRpb24gaWRfbG9jID0gdmFyLT5oaWRkZW5fYnkgPyB2YXItPmhpZGRlbl9ieS0+bG9jIDoKKwkgICAgdmFyLT5sb2M7CisKKwkgIC8qIENyZWF0ZSB0aGUgZXhwbGFuYXRpb24gbWVzc2FnZS4gKi8KKwkgIG9ic3RhY2tfaW5pdCAoJm1zZ19idWYpOworCisJICBvYnN0YWNrX3ByaW50ZiAoJm1zZ19idWYsIF8oInBvc3NpYmx5IG1lYW50OiAlYyIpLCBkb2xsYXJfb3JfYXQpOworCSAgaWYgKGNvbnRhaW5zX2RvdF9vcl9kYXNoIChpZCkpCisJICAgIG9ic3RhY2tfcHJpbnRmICgmbXNnX2J1ZiwgIlslc10iLCBpZCk7CisJICBlbHNlCisJICAgIG9ic3RhY2tfc2dyb3cgKCZtc2dfYnVmLCBpZCk7CisJICBvYnN0YWNrX3Nncm93ICgmbXNnX2J1ZiwgdGFpbCk7CisKKwkgIGlmICh2YXItPmVyciAmIFZBUklBTlRfSElEREVOKQorCSAgICB7CisJICAgICAgb2JzdGFja19wcmludGYgKCZtc2dfYnVmLCBfKCIsIGhpZGluZyAlYyIpLCBkb2xsYXJfb3JfYXQpOworCSAgICAgIGlmIChjb250YWluc19kb3Rfb3JfZGFzaCAodmFyLT5pZCkpCisJCW9ic3RhY2tfcHJpbnRmICgmbXNnX2J1ZiwgIlslc10iLCB2YXItPmlkKTsKKwkgICAgICBlbHNlCisJCW9ic3RhY2tfc2dyb3cgKCZtc2dfYnVmLCB2YXItPmlkKTsKKwkgICAgICBvYnN0YWNrX3Nncm93ICgmbXNnX2J1ZiwgdGFpbCk7CisJICAgIH0KKworCSAgb2JzdGFja19wcmludGYgKCZtc2dfYnVmLCBfKCIgYXQgJXMiKSwgYXRfc3BlYyk7CisKKwkgIGlmICh2YXItPmVyciAmIFZBUklBTlRfTk9UX1ZJU0lCTEVfRlJPTV9NSURSVUxFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQgPQorICAgICAgICAgICAgICAgIF8oIiwgY2Fubm90IGJlIGFjY2Vzc2VkIGZyb20gbWlkLXJ1bGUgYWN0aW9uIGF0ICQlZCIpOworICAgICAgICAgICAgICBvYnN0YWNrX3ByaW50ZiAoJm1zZ19idWYsIGZvcm1hdCwgbWlkcnVsZV9yaHNfaW5kZXgpOworICAgICAgICAgICAgfQorCisJICBvYnN0YWNrXzFncm93ICgmbXNnX2J1ZiwgJ1wwJyk7CisgICAgICAgICAgaWYgKGlzX3dhcm5pbmcpCisgICAgICAgICAgICB3YXJuX2F0X2luZGVudCAoaWRfbG9jLCAmaW5kZW50LCAiJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIG9ic3RhY2tfZmluaXNoICgmbXNnX2J1ZikpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBsYWluX2F0X2luZGVudCAoaWRfbG9jLCAmaW5kZW50LCAiJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSBvYnN0YWNrX2ZpbmlzaCAoJm1zZ19idWYpKTsKKwkgIG9ic3RhY2tfZnJlZSAoJm1zZ19idWYsIDApOworCX0KKyAgICB9Cit9CisKKy8qIFJldHVybmVkIGZyb20gInBhcnNlX3JlZiIgd2hlbiB0aGUgcmVmZXJlbmNlCisgICBpcyBpbmFwcHJvcHJpYXRlLiAqLworI2RlZmluZSBJTlZBTElEX1JFRiAoSU5UX01JTikKKworLyogUmV0dXJuZWQgZnJvbSAicGFyc2VfcmVmIiB3aGVuIHRoZSByZWZlcmVuY2UKKyAgIHBvaW50cyB0byBMSFMgKCQkKSBvZiB0aGUgY3VycmVudCBydWxlIG9yIG1pZHJ1bGUuICovCisjZGVmaW5lIExIU19SRUYgKElOVF9NSU4gKyAxKQorCisvKiBQYXJzZSBuYW1lZCBvciBwb3NpdGlvbmFsIHJlZmVyZW5jZS4gSW4gY2FzZSBvZiBwb3NpdGlvbmFsCisgICByZWZlcmVuY2VzLCBjYW4gcmV0dXJuIG5lZ2F0aXZlIHZhbHVlcyBmb3IgJC1uICJkZWVwIiBzdGFjaworICAgYWNjZXNzZXMuICovCitzdGF0aWMgbG9uZyBpbnQKK3BhcnNlX3JlZiAoY2hhciAqY3AsIHN5bWJvbF9saXN0ICpydWxlLCBpbnQgcnVsZV9sZW5ndGgsCisJICAgaW50IG1pZHJ1bGVfcmhzX2luZGV4LCBjaGFyICp0ZXh0LCBsb2NhdGlvbiB0ZXh0X2xvYywKKwkgICBjaGFyIGRvbGxhcl9vcl9hdCkKK3sKKyAgc3ltYm9sX2xpc3QgKmw7CisgIGNoYXIgKmNwX2VuZDsKKyAgYm9vbCBleHBsaWNpdF9icmFja2V0aW5nOworICB1bnNpZ25lZCBpOworICB1bnNpZ25lZCB2YWxpZF92YXJpYW50cyA9IDA7CisgIHVuc2lnbmVkIHZhbGlkX3ZhcmlhbnRfaW5kZXggPSAwOworCisgIGlmICgnJCcgPT0gKmNwKQorICAgIHJldHVybiBMSFNfUkVGOworCisgIGlmIChjX2lzZGlnaXQgKCpjcCkgfHwgKCpjcCA9PSAnLScgJiYgY19pc2RpZ2l0ICgqIChjcCArIDEpKSkpCisgICAgeworICAgICAgbG9uZyBpbnQgbnVtID0gc3RydG9sIChjcCwgJmNwLCAxMCk7CisgICAgICBpZiAoMSAtIElOVF9NQVggKyBydWxlX2xlbmd0aCA8PSBudW0gJiYgbnVtIDw9IHJ1bGVfbGVuZ3RoKQorCXJldHVybiBudW07CisgICAgICBlbHNlCisJeworCSAgY29tcGxhaW5fYXQgKHRleHRfbG9jLCBfKCJpbnRlZ2VyIG91dCBvZiByYW5nZTogJXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgcXVvdGUgKHRleHQpKTsKKwkgIHJldHVybiBJTlZBTElEX1JFRjsKKwl9CisgICAgfQorCisgIGlmICgnWycgPT0gKmNwKQorICAgIHsKKyAgICAgIC8qIElnbm9yZSB0aGUgYnJhY2tldHMuICovCisgICAgICBjaGFyICpwOworICAgICAgZm9yIChwID0gKytjcDsgKnAgIT0gJ10nOyArK3ApCisJY29udGludWU7CisgICAgICBjcF9lbmQgPSBwOworCisgICAgICBleHBsaWNpdF9icmFja2V0aW5nID0gdHJ1ZTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBUYWtlIGFsbCBjaGFyYWN0ZXJzIG9mIHRoZSBuYW1lLiAqLworICAgICAgY2hhciogcDsKKyAgICAgIGZvciAocCA9IGNwOyAqcDsgKytwKQorCWlmIChpc19kb3Rfb3JfZGFzaCAoKnApKQorCSAgeworCSAgICByZWZfdGFpbF9maWVsZHMgPSBwOworCSAgICBicmVhazsKKwkgIH0KKyAgICAgIGZvciAocCA9IGNwOyAqcDsgKytwKQorCWNvbnRpbnVlOworICAgICAgY3BfZW5kID0gcDsKKworICAgICAgZXhwbGljaXRfYnJhY2tldGluZyA9IGZhbHNlOworICAgIH0KKworICAvKiBBZGQgYWxsIHJlbGV2YW50IHZhcmlhbnRzLiAqLworICB7CisgICAgdW5zaWduZWQgc3ltYm9sX2luZGV4OworICAgIHZhcmlhbnRfY291bnQgPSAwOworICAgIGZvciAoc3ltYm9sX2luZGV4ID0gMCwgbCA9IHJ1bGU7ICFzeW1ib2xfbGlzdF9udWxsIChsKTsKKyAgICAgICAgICsrc3ltYm9sX2luZGV4LCBsID0gbC0+bmV4dCkKKyAgICAgIHsKKwl2YXJpYW50ICp2YXI7CisJaWYgKGwtPmNvbnRlbnRfdHlwZSAhPSBTWU1MSVNUX1NZTUJPTCkKKwkgIGNvbnRpbnVlOworCisJdmFyID0gdmFyaWFudF9hZGQgKGwtPmNvbnRlbnQuc3ltLT50YWcsIGwtPnN5bV9sb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xfaW5kZXgsIGNwLCBjcF9lbmQsIGV4cGxpY2l0X2JyYWNrZXRpbmcpOworCWlmICh2YXIgJiYgbC0+bmFtZWRfcmVmKQorCSAgdmFyLT5oaWRkZW5fYnkgPSBsLT5uYW1lZF9yZWY7CisKKwlpZiAobC0+bmFtZWRfcmVmKQorCSAgdmFyaWFudF9hZGQgKGwtPm5hbWVkX3JlZi0+aWQsIGwtPm5hbWVkX3JlZi0+bG9jLAorICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xfaW5kZXgsIGNwLCBjcF9lbmQsIGV4cGxpY2l0X2JyYWNrZXRpbmcpOworICAgICAgfQorICB9CisKKyAgLyogQ2hlY2sgZXJyb3JzLiAqLworICBmb3IgKGkgPSAwOyBpIDwgdmFyaWFudF9jb3VudDsgKytpKQorICAgIHsKKyAgICAgIHZhcmlhbnQgKnZhciA9ICZ2YXJpYW50X3RhYmxlW2ldOworICAgICAgdW5zaWduZWQgc3ltYm9sX2luZGV4ID0gdmFyLT5zeW1ib2xfaW5kZXg7CisKKyAgICAgIC8qIENoZWNrIHZpc2liaWxpdHkgZnJvbSBtaWQtcnVsZSBhY3Rpb25zLiAqLworICAgICAgaWYgKG1pZHJ1bGVfcmhzX2luZGV4ICE9IDAKKwkgICYmIChzeW1ib2xfaW5kZXggPT0gMCB8fCBtaWRydWxlX3Joc19pbmRleCA8IHN5bWJvbF9pbmRleCkpCisgICAgICAgIHZhci0+ZXJyIHw9IFZBUklBTlRfTk9UX1ZJU0lCTEVfRlJPTV9NSURSVUxFOworCisgICAgICAvKiBDaGVjayBjb3JyZWN0IGJyYWNrZXRpbmcuICovCisgICAgICBpZiAoIWV4cGxpY2l0X2JyYWNrZXRpbmcgJiYgY29udGFpbnNfZG90X29yX2Rhc2ggKHZhci0+aWQpKQorICAgICAgICB2YXItPmVyciB8PSBWQVJJQU5UX0JBRF9CUkFDS0VUSU5HOworCisgICAgICAvKiBDaGVjayB1c2luZyBvZiBoaWRkZW4gc3ltYm9scy4gKi8KKyAgICAgIGlmICh2YXItPmhpZGRlbl9ieSkKKyAgICAgICAgdmFyLT5lcnIgfD0gVkFSSUFOVF9ISURERU47CisKKyAgICAgIGlmICghdmFyLT5lcnIpCisgICAgICAgIHsKKyAgICAgICAgICB2YWxpZF92YXJpYW50X2luZGV4ID0gaTsKKyAgICAgICAgICArK3ZhbGlkX3ZhcmlhbnRzOworICAgICAgICB9CisgICAgfQorCisgIHN3aXRjaCAodmFsaWRfdmFyaWFudHMpCisgICAgeworICAgIGNhc2UgMDoKKyAgICAgIHsKKyAgICAgICAgdW5zaWduZWQgbGVuID0gKGV4cGxpY2l0X2JyYWNrZXRpbmcgfHwgIXJlZl90YWlsX2ZpZWxkcykgPworICAgICAgICAgIGNwX2VuZCAtIGNwIDogcmVmX3RhaWxfZmllbGRzIC0gY3A7CisgICAgICAgIHVuc2lnbmVkIGluZGVudCA9IDA7CisKKyAgICAgICAgY29tcGxhaW5fYXRfaW5kZW50ICh0ZXh0X2xvYywgJmluZGVudCwgXygiaW52YWxpZCByZWZlcmVuY2U6ICVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGUgKHRleHQpKTsKKyAgICAgICAgaW5kZW50ICs9IFNVQl9JTkRFTlQ7CisgICAgICAgIGlmIChsZW4gPT0gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBsb2NhdGlvbiBzeW1fbG9jID0gdGV4dF9sb2M7CisgICAgICAgICAgICBzeW1fbG9jLnN0YXJ0LmNvbHVtbiArPSAxOworICAgICAgICAgICAgc3ltX2xvYy5lbmQgPSBzeW1fbG9jLnN0YXJ0OworICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0ID0KKyAgICAgICAgICAgICAgXygic3ludGF4IGVycm9yIGFmdGVyICclYycsIGV4cGVjdGluZyBpbnRlZ2VyLCBsZXR0ZXIsIgorICAgICAgICAgICAgICAgICIgJ18nLCAnWycsIG9yICckJyIpOworICAgICAgICAgICAgY29tcGxhaW5fYXRfaW5kZW50IChzeW1fbG9jLCAmaW5kZW50LCBmb3JtYXQsIGRvbGxhcl9vcl9hdCk7CisgICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtaWRydWxlX3Joc19pbmRleCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQgPQorICAgICAgICAgICAgICBfKCJzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb24gYmVmb3JlICQlZDogJS4qcyIpOworICAgICAgICAgICAgY29tcGxhaW5fYXRfaW5kZW50IChydWxlLT5sb2NhdGlvbiwgJmluZGVudCwgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWRydWxlX3Joc19pbmRleCwgbGVuLCBjcCk7CisgICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0ID0KKyAgICAgICAgICAgICAgXygic3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiAlLipzIik7CisgICAgICAgICAgICBjb21wbGFpbl9hdF9pbmRlbnQgKHJ1bGUtPmxvY2F0aW9uLCAmaW5kZW50LCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiwgY3ApOworICAgICAgICAgIH0KKworICAgICAgICBpZiAodmFyaWFudF9jb3VudCA+IDApCisgICAgICAgICAgc2hvd19zdWJfbWVzc2FnZXMgKGNwLCBleHBsaWNpdF9icmFja2V0aW5nLCBtaWRydWxlX3Joc19pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9sbGFyX29yX2F0LCBmYWxzZSwgaW5kZW50KTsKKyAgICAgICAgcmV0dXJuIElOVkFMSURfUkVGOworICAgICAgfQorICAgIGNhc2UgMToKKyAgICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZW50ID0gMDsKKyAgICAgICAgaWYgKHZhcmlhbnRfY291bnQgPiAxKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHdhcm5fYXRfaW5kZW50ICh0ZXh0X2xvYywgJmluZGVudCwgXygibWlzbGVhZGluZyByZWZlcmVuY2U6ICVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGUgKHRleHQpKTsKKyAgICAgICAgICAgIHNob3dfc3ViX21lc3NhZ2VzIChjcCwgZXhwbGljaXRfYnJhY2tldGluZywgbWlkcnVsZV9yaHNfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9sbGFyX29yX2F0LCB0cnVlLCBpbmRlbnQgKyBTVUJfSU5ERU5UKTsKKyAgICAgICAgICB9CisgICAgICAgIHsKKyAgICAgICAgICB1bnNpZ25lZCBzeW1ib2xfaW5kZXggPQorICAgICAgICAgICAgdmFyaWFudF90YWJsZVt2YWxpZF92YXJpYW50X2luZGV4XS5zeW1ib2xfaW5kZXg7CisgICAgICAgICAgcmV0dXJuIChzeW1ib2xfaW5kZXggPT0gbWlkcnVsZV9yaHNfaW5kZXgpID8gTEhTX1JFRiA6IHN5bWJvbF9pbmRleDsKKyAgICAgICAgfQorICAgICAgfQorICAgIGNhc2UgMjoKKyAgICBkZWZhdWx0OgorICAgICAgeworICAgICAgICB1bnNpZ25lZCBpbmRlbnQgPSAwOworICAgICAgICBjb21wbGFpbl9hdF9pbmRlbnQgKHRleHRfbG9jLCAmaW5kZW50LCBfKCJhbWJpZ3VvdXMgcmVmZXJlbmNlOiAlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3RlICh0ZXh0KSk7CisgICAgICAgIHNob3dfc3ViX21lc3NhZ2VzIChjcCwgZXhwbGljaXRfYnJhY2tldGluZywgbWlkcnVsZV9yaHNfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2xsYXJfb3JfYXQsIGZhbHNlLCBpbmRlbnQgKyBTVUJfSU5ERU5UKTsKKyAgICAgICAgcmV0dXJuIElOVkFMSURfUkVGOworICAgICAgfQorICAgIH0KKworICAvKiBOb3QgcmVhY2hhYmxlLiAqLworICByZXR1cm4gSU5WQUxJRF9SRUY7Cit9CisKKy8qIEtlZXBzIHRyYWNrIG9mIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzZW1hbnRpYyB2YWx1ZXMgdG8gdGhlIGxlZnQgb2YKKyAgIGEgaGFuZGxlICh0aG9zZSByZWZlcmVuY2VkIGJ5ICQwLCAkLTEsIGV0Yy4pIGFyZSByZXF1aXJlZCBieSB0aGUKKyAgIHNlbWFudGljIGFjdGlvbnMgb2YgdGhpcyBncmFtbWFyLiAqLworaW50IG1heF9sZWZ0X3NlbWFudGljX2NvbnRleHQgPSAwOworCisKKy8qIElmIENQIHBvaW50cyB0byBhIHR5cGVuYW1lIChpLmUuLCA8Lio/PiksIHNldCBUWVBFX05BTUUgdG8gaXRzCisgICBiZWdpbm5pbmcgKGkuZS4sIGFmdGVyIHRoZSBvcGVuaW5nICI8IiwgYW5kIHJldHVybiB0aGUgcG9pbnRlcgorICAgaW1tZWRpYXRlbHkgYWZ0ZXIgaXQuICAqLworCitzdGF0aWMKK2NoYXIgKgorZmV0Y2hfdHlwZV9uYW1lIChjaGFyICpjcCwgY2hhciBjb25zdCAqKnR5cGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgbG9jYXRpb24gZG9sbGFyX2xvYykKK3sKKyAgaWYgKCpjcCA9PSAnPCcpCisgICAgeworICAgICAgKnR5cGVfbmFtZSA9ICsrY3A7CisgICAgICB3aGlsZSAoKmNwICE9ICc+JykKKwkrK2NwOworCisgICAgICAvKiBUaGUgJz4nIHN5bWJvbCB3aWxsIGJlIGxhdGVyIHJlcGxhY2VkIGJ5ICdcMCcuIE9yaWdpbmFsCisJICd0ZXh0JyBpcyBuZWVkZWQgZm9yIGVycm9yIG1lc3NhZ2VzLiAqLworICAgICAgKytjcDsKKyAgICAgIGlmICh1bnR5cGVkX3Zhcl9zZWVuKQorCWNvbXBsYWluX2F0IChkb2xsYXJfbG9jLCBfKCJleHBsaWNpdCB0eXBlIGdpdmVuIGluIHVudHlwZWQgZ3JhbW1hciIpKTsKKyAgICAgIHRhZ19zZWVuID0gdHJ1ZTsKKyAgICB9CisgIHJldHVybiBjcDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFRFWFQgaXMgcG9pbnRpbmcgdG8gYSB3YW5uYWJlZSBzZW1hbnRpYyB2YWx1ZSAoaS5lLiwgYSAnJCcpLiAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBQb3NzaWJsZSBpbnB1dHM6ICRbPFRZUEVOQU1FPl0oJHxpbnRlZ2VyKSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgT3V0cHV0IHRvIE9CU1RBQ0tfRk9SX1NUUklORyBhIHJlZmVyZW5jZSB0byB0aGlzIHNlbWFudGljIHZhbHVlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCitoYW5kbGVfYWN0aW9uX2RvbGxhciAoc3ltYm9sX2xpc3QgKnJ1bGUsIGNoYXIgKnRleHQsIGxvY2F0aW9uIGRvbGxhcl9sb2MpCit7CisgIGNoYXIgY29uc3QgKnR5cGVfbmFtZSA9IE5VTEw7CisgIGNoYXIgKmNwID0gdGV4dCArIDE7CisgIHN5bWJvbF9saXN0ICplZmZlY3RpdmVfcnVsZTsKKyAgaW50IGVmZmVjdGl2ZV9ydWxlX2xlbmd0aDsKKyAgaW50IG47CisKKyAgaWYgKHJ1bGUtPm1pZHJ1bGVfcGFyZW50X3J1bGUpCisgICAgeworICAgICAgZWZmZWN0aXZlX3J1bGUgPSBydWxlLT5taWRydWxlX3BhcmVudF9ydWxlOworICAgICAgZWZmZWN0aXZlX3J1bGVfbGVuZ3RoID0gcnVsZS0+bWlkcnVsZV9wYXJlbnRfcmhzX2luZGV4IC0gMTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBlZmZlY3RpdmVfcnVsZSA9IHJ1bGU7CisgICAgICBlZmZlY3RpdmVfcnVsZV9sZW5ndGggPSBzeW1ib2xfbGlzdF9sZW5ndGggKHJ1bGUtPm5leHQpOworICAgIH0KKworICAvKiBHZXQgdGhlIHR5cGUgbmFtZSBpZiBleHBsaWNpdC4gKi8KKyAgY3AgPSBmZXRjaF90eXBlX25hbWUgKGNwLCAmdHlwZV9uYW1lLCBkb2xsYXJfbG9jKTsKKworICBuID0gcGFyc2VfcmVmIChjcCwgZWZmZWN0aXZlX3J1bGUsIGVmZmVjdGl2ZV9ydWxlX2xlbmd0aCwKKwkJIHJ1bGUtPm1pZHJ1bGVfcGFyZW50X3Joc19pbmRleCwgdGV4dCwgZG9sbGFyX2xvYywgJyQnKTsKKworICAvKiBFbmQgdHlwZV9uYW1lLiAqLworICBpZiAodHlwZV9uYW1lKQorICAgIGNwWy0xXSA9ICdcMCc7CisKKyAgc3dpdGNoIChuKQorICAgIHsKKyAgICBjYXNlIElOVkFMSURfUkVGOgorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIExIU19SRUY6CisgICAgICBpZiAoIXR5cGVfbmFtZSkKKwl0eXBlX25hbWUgPSBzeW1ib2xfbGlzdF9uX3R5cGVfbmFtZV9nZXQgKHJ1bGUsIGRvbGxhcl9sb2MsIDApOworCisgICAgICBpZiAoIXR5cGVfbmFtZSkKKyAgICAgICAgeworICAgICAgICAgIGlmICh1bmlvbl9zZWVuIHwgdGFnX3NlZW4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChydWxlLT5taWRydWxlX3BhcmVudF9ydWxlKQorICAgICAgICAgICAgICAgIGNvbXBsYWluX2F0IChkb2xsYXJfbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCIkJCBmb3IgdGhlIG1pZHJ1bGUgYXQgJCVkIG9mICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaGFzIG5vIGRlY2xhcmVkIHR5cGUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZS0+bWlkcnVsZV9wYXJlbnRfcmhzX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZSAoZWZmZWN0aXZlX3J1bGUtPmNvbnRlbnQuc3ltLT50YWcpKTsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXBsYWluX2F0IChkb2xsYXJfbG9jLCBfKCIkJCBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZSAocnVsZS0+Y29udGVudC5zeW0tPnRhZykpOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHVudHlwZWRfdmFyX3NlZW4gPSB0cnVlOworICAgICAgICB9CisKKyAgICAgIG9ic3RhY2tfc2dyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICJdYjRfbGhzX3ZhbHVlKCIpOworICAgICAgb2JzdGFja19xdW90ZSAoJm9ic3RhY2tfZm9yX3N0cmluZywgdHlwZV9uYW1lKTsKKyAgICAgIG9ic3RhY2tfc2dyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICIpWyIpOworICAgICAgcnVsZS0+YWN0aW9uX3Byb3BzLmlzX3ZhbHVlX3VzZWQgPSB0cnVlOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgaWYgKG1heF9sZWZ0X3NlbWFudGljX2NvbnRleHQgPCAxIC0gbikKKwltYXhfbGVmdF9zZW1hbnRpY19jb250ZXh0ID0gMSAtIG47CisgICAgICBpZiAoIXR5cGVfbmFtZSAmJiAwIDwgbikKKwl0eXBlX25hbWUgPQorCSAgc3ltYm9sX2xpc3Rfbl90eXBlX25hbWVfZ2V0IChlZmZlY3RpdmVfcnVsZSwgZG9sbGFyX2xvYywgbik7CisgICAgICBpZiAoIXR5cGVfbmFtZSkKKyAgICAgICAgeworICAgICAgICAgIGlmICh1bmlvbl9zZWVuIHwgdGFnX3NlZW4pCisgICAgICAgICAgICBjb21wbGFpbl9hdCAoZG9sbGFyX2xvYywgXygiJCVzIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgY3AsIHF1b3RlIChlZmZlY3RpdmVfcnVsZS0+Y29udGVudC5zeW0tPnRhZykpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHVudHlwZWRfdmFyX3NlZW4gPSB0cnVlOworICAgICAgICB9CisKKyAgICAgIG9ic3RhY2tfcHJpbnRmICgmb2JzdGFja19mb3Jfc3RyaW5nLAorCQkgICAgICAiXWI0X3Joc192YWx1ZSglZCwgJWQsICIsIGVmZmVjdGl2ZV9ydWxlX2xlbmd0aCwgbik7CisgICAgICBvYnN0YWNrX3F1b3RlICgmb2JzdGFja19mb3Jfc3RyaW5nLCB0eXBlX25hbWUpOworICAgICAgb2JzdGFja19zZ3JvdyAoJm9ic3RhY2tfZm9yX3N0cmluZywgIilbIik7CisgICAgICBpZiAobiA+IDApCisJc3ltYm9sX2xpc3Rfbl9nZXQgKGVmZmVjdGl2ZV9ydWxlLCBuKS0+YWN0aW9uX3Byb3BzLmlzX3ZhbHVlX3VzZWQgPQorCSAgdHJ1ZTsKKyAgICAgIGJyZWFrOworICAgIH0KK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgVEVYVCBpcyBhIGxvY2F0aW9uIHRva2VuIChpLmUuLCBhICdALi4uJykuICBPdXRwdXQgdG8gfAorfCBPQlNUQUNLX0ZPUl9TVFJJTkcgYSByZWZlcmVuY2UgdG8gdGhpcyBsb2NhdGlvbi4gICAgICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQKK2hhbmRsZV9hY3Rpb25fYXQgKHN5bWJvbF9saXN0ICpydWxlLCBjaGFyICp0ZXh0LCBsb2NhdGlvbiBhdF9sb2MpCit7CisgIGNoYXIgKmNwID0gdGV4dCArIDE7CisgIHN5bWJvbF9saXN0ICplZmZlY3RpdmVfcnVsZTsKKyAgaW50IGVmZmVjdGl2ZV9ydWxlX2xlbmd0aDsKKyAgaW50IG47CisKKyAgaWYgKHJ1bGUtPm1pZHJ1bGVfcGFyZW50X3J1bGUpCisgICAgeworICAgICAgZWZmZWN0aXZlX3J1bGUgPSBydWxlLT5taWRydWxlX3BhcmVudF9ydWxlOworICAgICAgZWZmZWN0aXZlX3J1bGVfbGVuZ3RoID0gcnVsZS0+bWlkcnVsZV9wYXJlbnRfcmhzX2luZGV4IC0gMTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBlZmZlY3RpdmVfcnVsZSA9IHJ1bGU7CisgICAgICBlZmZlY3RpdmVfcnVsZV9sZW5ndGggPSBzeW1ib2xfbGlzdF9sZW5ndGggKHJ1bGUtPm5leHQpOworICAgIH0KKworICBsb2NhdGlvbnNfZmxhZyA9IHRydWU7CisKKyAgbiA9IHBhcnNlX3JlZiAoY3AsIGVmZmVjdGl2ZV9ydWxlLCBlZmZlY3RpdmVfcnVsZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgIHJ1bGUtPm1pZHJ1bGVfcGFyZW50X3Joc19pbmRleCwgdGV4dCwgYXRfbG9jLCAnQCcpOworICBzd2l0Y2ggKG4pCisgICAgeworICAgIGNhc2UgSU5WQUxJRF9SRUY6CisgICAgICBicmVhazsKKworICAgIGNhc2UgTEhTX1JFRjoKKyAgICAgIG9ic3RhY2tfc2dyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICJdYjRfbGhzX2xvY2F0aW9uWyIpOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgb2JzdGFja19wcmludGYgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICJdYjRfcmhzX2xvY2F0aW9uKCVkLCAlZClbIiwKKwkJICAgICAgZWZmZWN0aXZlX3J1bGVfbGVuZ3RoLCBuKTsKKyAgICAgIGJyZWFrOworICAgIH0KK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IEluaXRpYWxpemUgdGhlIHNjYW5uZXIuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFRyYW5zbGF0ZSB0aGUgZG9sbGFycyBhbmQgYXRzIGluIFxhIHNlbGYsIGluIHRoZSBjb250ZXh0IFxhIHNjX2NvbnRleHQKKyAgIChTQ19SVUxFX0FDVElPTiwgU0NfU1lNQk9MX0FDVElPTiwgSU5JVElBTCkuICAqLworCitzdGF0aWMgY2hhciBjb25zdCAqCit0cmFuc2xhdGVfYWN0aW9uIChjb2RlX3Byb3BzICpzZWxmLCBpbnQgc2NfY29udGV4dCkKK3sKKyAgY2hhciAqcmVzOworICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICBpZiAoIWluaXRpYWxpemVkKQorICAgIHsKKyAgICAgIG9ic3RhY2tfaW5pdCAoJm9ic3RhY2tfZm9yX3N0cmluZyk7CisgICAgICBjb2RlX19mbGV4X2RlYnVnID0gMDsKKyAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisKKyAgbG9jLT5zdGFydCA9IGxvYy0+ZW5kID0gc2VsZi0+bG9jYXRpb24uc3RhcnQ7CisgIGNvZGVfX3N3aXRjaF90b19idWZmZXIgKGNvZGVfX3NjYW5fc3RyaW5nIChzZWxmLT5jb2RlKSk7CisgIHJlcyA9IGNvZGVfbGV4IChzZWxmLCBzY19jb250ZXh0KTsKKyAgY29kZV9fZGVsZXRlX2J1ZmZlciAoWVlfQ1VSUkVOVF9CVUZGRVIpOworCisgIHJldHVybiByZXM7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgcHVibGljIGludGVyZmFjZSBhcyBkb2N1bWVudGVkIGluICJzY2FuLWNvZGUuaCIuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordm9pZAorY29kZV9wcm9wc19ub25lX2luaXQgKGNvZGVfcHJvcHMgKnNlbGYpCit7CisgICpzZWxmID0gY29kZV9wcm9wc19ub25lOworfQorCitjb2RlX3Byb3BzIGNvbnN0IGNvZGVfcHJvcHNfbm9uZSA9IENPREVfUFJPUFNfTk9ORV9JTklUOworCit2b2lkCitjb2RlX3Byb3BzX3BsYWluX2luaXQgKGNvZGVfcHJvcHMgKnNlbGYsIGNoYXIgY29uc3QgKmNvZGUsCisJCSAgICAgICBsb2NhdGlvbiBjb2RlX2xvYykKK3sKKyAgc2VsZi0+a2luZCA9IENPREVfUFJPUFNfUExBSU47CisgIHNlbGYtPmNvZGUgPSBjb2RlOworICBzZWxmLT5sb2NhdGlvbiA9IGNvZGVfbG9jOworICBzZWxmLT5pc192YWx1ZV91c2VkID0gZmFsc2U7CisgIHNlbGYtPnJ1bGUgPSBOVUxMOworICBzZWxmLT5uYW1lZF9yZWYgPSBOVUxMOworfQorCit2b2lkCitjb2RlX3Byb3BzX3N5bWJvbF9hY3Rpb25faW5pdCAoY29kZV9wcm9wcyAqc2VsZiwgY2hhciBjb25zdCAqY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiBjb2RlX2xvYykKK3sKKyAgc2VsZi0+a2luZCA9IENPREVfUFJPUFNfU1lNQk9MX0FDVElPTjsKKyAgc2VsZi0+Y29kZSA9IGNvZGU7CisgIHNlbGYtPmxvY2F0aW9uID0gY29kZV9sb2M7CisgIHNlbGYtPmlzX3ZhbHVlX3VzZWQgPSBmYWxzZTsKKyAgc2VsZi0+cnVsZSA9IE5VTEw7CisgIHNlbGYtPm5hbWVkX3JlZiA9IE5VTEw7Cit9CisKK3ZvaWQKK2NvZGVfcHJvcHNfcnVsZV9hY3Rpb25faW5pdCAoY29kZV9wcm9wcyAqc2VsZiwgY2hhciBjb25zdCAqY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gY29kZV9sb2MsIHN5bWJvbF9saXN0ICpydWxlLAorCQkJICAgICBuYW1lZF9yZWYgKm5hbWUpCit7CisgIHNlbGYtPmtpbmQgPSBDT0RFX1BST1BTX1JVTEVfQUNUSU9OOworICBzZWxmLT5jb2RlID0gY29kZTsKKyAgc2VsZi0+bG9jYXRpb24gPSBjb2RlX2xvYzsKKyAgc2VsZi0+aXNfdmFsdWVfdXNlZCA9IGZhbHNlOworICBzZWxmLT5ydWxlID0gcnVsZTsKKyAgc2VsZi0+bmFtZWRfcmVmID0gbmFtZTsKK30KKwordm9pZAorY29kZV9wcm9wc190cmFuc2xhdGVfY29kZSAoY29kZV9wcm9wcyAqc2VsZikKK3sKKyAgc3dpdGNoIChzZWxmLT5raW5kKQorICAgIHsKKyAgICAgIGNhc2UgQ09ERV9QUk9QU19OT05FOgorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgQ09ERV9QUk9QU19QTEFJTjoKKyAgICAgICAgc2VsZi0+Y29kZSA9IHRyYW5zbGF0ZV9hY3Rpb24gKHNlbGYsIElOSVRJQUwpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgQ09ERV9QUk9QU19TWU1CT0xfQUNUSU9OOgorICAgICAgICBzZWxmLT5jb2RlID0gdHJhbnNsYXRlX2FjdGlvbiAoc2VsZiwgU0NfU1lNQk9MX0FDVElPTik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBDT0RFX1BST1BTX1JVTEVfQUNUSU9OOgorICAgICAgICBzZWxmLT5jb2RlID0gdHJhbnNsYXRlX2FjdGlvbiAoc2VsZiwgU0NfUlVMRV9BQ1RJT04pOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQKK2NvZGVfc2Nhbm5lcl9sYXN0X3N0cmluZ19mcmVlICh2b2lkKQoreworICBTVFJJTkdfRlJFRTsKK30KKwordm9pZAorY29kZV9zY2FubmVyX2ZyZWUgKHZvaWQpCit7CisgIG9ic3RhY2tfZnJlZSAoJm9ic3RhY2tfZm9yX3N0cmluZywgMCk7CisgIHZhcmlhbnRfdGFibGVfZnJlZSAoKTsKKworICAvKiBSZWNsYWltIEZsZXgncyBidWZmZXJzLiAgKi8KKyAgY29kZV9sZXhfZGVzdHJveSAoKTsKK30KKwpkaWZmIC0tZ2l0IGEvc3JjL3NjYW4tY29kZS5oIGIvc3JjL3NjYW4tY29kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZDU1NGQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc2Nhbi1jb2RlLmgKQEAgLTAsMCArMSwxNzYgQEAKKy8qIEJpc29uIGNvZGUgcHJvcGVydGllcyBzdHJ1Y3R1cmUgYW5kIHNjYW5uZXIuCisKKyAgIENvcHlyaWdodCAoQykgMjAwNi0yMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIFNDQU5fQ09ERV9IXworIyBkZWZpbmUgU0NBTl9DT0RFX0hfCisKKyMgaW5jbHVkZSAibG9jYXRpb24uaCIKKyMgaW5jbHVkZSAibmFtZWQtcmVmLmgiCisKK3N0cnVjdCBzeW1ib2xfbGlzdDsKKworLyoqCisgKiBLZWVwcyB0cmFjayBvZiB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2VtYW50aWMgdmFsdWVzIHRvIHRoZSBsZWZ0IG9mIGEgaGFuZGxlCisgKiAodGhvc2UgcmVmZXJlbmNlZCBieSAkMCwgJC0xLCBldGMuKSB0aGF0IGFyZSByZXF1aXJlZCBieSB0aGUgc2VtYW50aWMKKyAqIGFjdGlvbnMgb2YgdGhpcyBncmFtbWFyLgorICovCitleHRlcm4gaW50IG1heF9sZWZ0X3NlbWFudGljX2NvbnRleHQ7CisKKy8qKgorICogQSBjb2RlIHBhc3NhZ2UgY2FwdHVyZWQgZnJvbSB0aGUgZ3JhbW1hciBmaWxlIGFuZCBwb3NzaWJseSB0cmFuc2xhdGVkLAorICogYW5kL29yIHByb3BlcnRpZXMgYXNzb2NpYXRlZCB3aXRoIHN1Y2ggYSBjb2RlIHBhc3NhZ2UuICBEb24ndCBicmVhaworICogZW5jYXBzdWxhdGlvbiBieSBtb2RpZnlpbmcgdGhlIGZpZWxkcyBkaXJlY3RseS4gIFVzZSB0aGUgcHJvdmlkZWQgaW50ZXJmYWNlCisgKiBmdW5jdGlvbnMuCisgKi8KK3R5cGVkZWYgc3RydWN0IGNvZGVfcHJvcHMgeworICAvKiogU2V0IGJ5IHRoZSBpbml0IGZ1bmN0aW9ucy4gICovCisgIGVudW0geworICAgIENPREVfUFJPUFNfTk9ORSwgQ09ERV9QUk9QU19QTEFJTiwKKyAgICBDT0RFX1BST1BTX1NZTUJPTF9BQ1RJT04sIENPREVfUFJPUFNfUlVMRV9BQ1RJT04KKyAgfSBraW5kOworCisgIC8qKgorICAgKiBcYyBOVUxMIGlmZiBcYyBjb2RlX3Byb3BzOjpraW5kIGlzIFxjIENPREVfUFJPUFNfTk9ORS4KKyAgICogTWVtb3J5IGlzIGFsbG9jYXRlZCBpbiBhbiBvYnN0YWNrIGZyZWVkIGVsc2V3aGVyZS4KKyAgICovCisgIGNoYXIgY29uc3QgKmNvZGU7CisgIC8qKiBVbmRlZmluZWQgaWZmIFxjIGNvZGVfcHJvcHM6OmNvZGUgaXMgXGMgTlVMTC4gICovCisgIGxvY2F0aW9uIGxvY2F0aW9uOworCisgIC8qKgorICAgKiBcYyBmYWxzZSBpZmYgZWl0aGVyOgorICAgKiAgIC0gXGMgY29kZV9wcm9wc190cmFuc2xhdGVfY29kZSBoYXMgbmV2ZXIgcHJldmlvdXNseSBiZWVuIGludm9rZWQgZm9yCisgICAqICAgICB0aGUgXGMgY29kZV9wcm9wcyB0aGF0IHdvdWxkIGNvbnRhaW4gdGhlIGNvZGUgcGFzc2FnZSBhc3NvY2lhdGVkCisgICAqICAgICB3aXRoIFxjIHNlbGYuICAoVGhhdCBcYyBjb2RlX3Byb3BzIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGlzIG9uZSBpZiB0aGlzCisgICAqICAgICBvbmUgaXMgZm9yIGEgUkhTIFxjIHN5bWJvbF9saXN0IG5vZGUuICBJbnN0ZWFkLCBpdCdzIHRoZSBcYyBjb2RlX3Byb3BzCisgICAqICAgICBmb3IgdGhlIExIUyBzeW1ib2wgb2YgdGhlIHNhbWUgcnVsZS4pCisgICAqICAgLSBcYyBjb2RlX3Byb3BzX3RyYW5zbGF0ZV9jb2RlIGhhcyBiZWVuIGludm9rZWQgZm9yIHRoYXQgXGMgY29kZV9wcm9wcywKKyAgICogICAgIGJ1dCB0aGUgc3ltYm9sIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFxjIGNvZGVfcHJvcHMgd2FzIG5vdAorICAgKiAgICAgcmVmZXJlbmNlZCBpbiB0aGUgY29kZSBwYXNzYWdlLgorICAgKi8KKyAgYm9vbCBpc192YWx1ZV91c2VkOworCisgIC8qKiBcYyBOVUxMIGlmZiBcYyBjb2RlX3Byb3BzOjpraW5kIGlzIG5vdCBcYyBDT0RFX1BST1BTX1JVTEVfQUNUSU9OLiAgKi8KKyAgc3RydWN0IHN5bWJvbF9saXN0ICpydWxlOworCisgIC8qIE5hbWVkIHJlZmVyZW5jZS4gKi8KKyAgbmFtZWRfcmVmICpuYW1lZF9yZWY7Cit9IGNvZGVfcHJvcHM7CisKKy8qKgorICogXHByZQorICogICAtIDx0dD5zZWxmICE9IE5VTEw8L3R0Pi4KKyAqIFxwb3N0CisgKiAgIC0gXGMgc2VsZiBoYXMgYmVlbiBvdmVyd3JpdHRlbiB0byBjb250YWluIG5vIGNvZGUuCisgKi8KK3ZvaWQgY29kZV9wcm9wc19ub25lX2luaXQgKGNvZGVfcHJvcHMgKnNlbGYpOworCisvKiogRXF1aXZhbGVudCB0byBcYyBjb2RlX3Byb3BzX25vbmVfaW5pdC4gICovCisjZGVmaW5lIENPREVfUFJPUFNfTk9ORV9JTklUIFwKKyAge0NPREVfUFJPUFNfTk9ORSwgTlVMTCwgRU1QVFlfTE9DQVRJT05fSU5JVCwgZmFsc2UsIE5VTEwsIE5VTEx9CisKKy8qKiBJbml0aWFsaXplZCBieSBcYyBDT0RFX1BST1BTX05PTkVfSU5JVCB3aXRoIG5vIGZ1cnRoZXIgbW9kaWZpY2F0aW9uLiAgKi8KK2V4dGVybiBjb2RlX3Byb3BzIGNvbnN0IGNvZGVfcHJvcHNfbm9uZTsKKworLyoqCisgKiBccHJlCisgKiAgIC0gPHR0PnNlbGYgIT0gTlVMTDwvdHQ+LgorICogICAtIDx0dD5jb2RlICE9IE5VTEw8L3R0Pi4KKyAqICAgLSBcYyBjb2RlIGlzIGFuIHVudHJhbnNsYXRlZCBjb2RlIHBhc3NhZ2UgY29udGFpbmluZyBubyBCaXNvbiBlc2NhcGVzLgorICogICAtIFxjIGNvZGUgd2FzIGV4dHJhY3RlZCBmcm9tIHRoZSBncmFtbWFyIGZpbGUgYXQgXGMgY29kZV9sb2MuCisgKiBccG9zdAorICogICAtIFxjIHNlbGYgaGFzIGJlZW4gb3ZlcndyaXR0ZW4gdG8gcmVwcmVzZW50IHRoZSBzcGVjaWZpZWQgcGxhaW4gY29kZQorICogICAgIHBhc3NhZ2UuCisgKiAgIC0gXGMgc2VsZiB3aWxsIGJlY29tZSBpbnZhbGlkIGlmIHRoZSBjYWxsZXIgZnJlZXMgXGMgY29kZSBiZWZvcmUgaW52b2tpbmcKKyAqICAgICBcYyBjb2RlX3Byb3BzX3RyYW5zbGF0ZV9jb2RlIG9uIFxjIHNlbGYuCisgKi8KK3ZvaWQgY29kZV9wcm9wc19wbGFpbl9pbml0IChjb2RlX3Byb3BzICpzZWxmLCBjaGFyIGNvbnN0ICpjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uIGNvZGVfbG9jKTsKKworLyoqCisgKiBccHJlCisgKiAgIC0gPHR0PnNlbGYgIT0gTlVMTDwvdHQ+LgorICogICAtIDx0dD5jb2RlICE9IE5VTEw8L3R0Pi4KKyAqICAgLSBcYyBjb2RlIGlzIGFuIHVudHJhbnNsYXRlZCBjb2RlIHBhc3NhZ2UuICBUaGUgb25seSBCaXNvbiBlc2NhcGVzIGl0CisgKiAgICAgbWlnaHQgY29udGFpbiBhcmUgJCQgYW5kIFxAJCwgcmVmZXJyaW5nIHRvIGEgc2luZ2xlIHN5bWJvbC4KKyAqICAgLSBcYyBjb2RlIHdhcyBleHRyYWN0ZWQgZnJvbSB0aGUgZ3JhbW1hciBmaWxlIGF0IFxjIGNvZGVfbG9jLgorICogXHBvc3QKKyAqICAgLSBcYyBzZWxmIGhhcyBiZWVuIG92ZXJ3cml0dGVuIHRvIHJlcHJlc2VudCB0aGUgc3BlY2lmaWVkIHN5bWJvbCBhY3Rpb24uCisgKiAgIC0gXGMgc2VsZiB3aWxsIGJlY29tZSBpbnZhbGlkIGlmIHRoZSBjYWxsZXIgZnJlZXMgXGMgY29kZSBiZWZvcmUgaW52b2tpbmcKKyAqICAgICBcYyBjb2RlX3Byb3BzX3RyYW5zbGF0ZV9jb2RlIG9uIFxjIHNlbGYuCisgKi8KK3ZvaWQgY29kZV9wcm9wc19zeW1ib2xfYWN0aW9uX2luaXQgKGNvZGVfcHJvcHMgKnNlbGYsIGNoYXIgY29uc3QgKmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiBjb2RlX2xvYyk7CisKKy8qKgorICogXHByZQorICogICAtIDx0dD5zZWxmICE9IE5VTEw8L3R0Pi4KKyAqICAgLSA8dHQ+Y29kZSAhPSBOVUxMPC90dD4uCisgKiAgIC0gPHR0PnJ1bGUgIT0gTlVMTDwvdHQ+LgorICogICAtIFxjIGNvZGUgaXMgdGhlIHVudHJhbnNsYXRlZCBhY3Rpb24gb2YgdGhlIHJ1bGUgZm9yIHdoaWNoIFxjIHJ1bGUgaXMgdGhlCisgKiAgICAgTEhTIG5vZGUuICBUaHVzLCBcYyBjb2RlIHBvc3NpYmx5IGNvbnRhaW5zIEJpc29uIGVzY2FwZXMgc3VjaCBhcyAkJCwgJDEsCisgKiAgICAgJDIsIGV0YyByZWZlcnJpbmcgdG8gdGhlIHZhbHVlcyBvZiB0aGUgcnVsZS4KKyAqICAgLSBcYyBjb2RlIHdhcyBleHRyYWN0ZWQgZnJvbSB0aGUgZ3JhbW1hciBmaWxlIGF0IFxjIGNvZGVfbG9jLgorICogXHBvc3QKKyAqICAgLSBcYyBzZWxmIGhhcyBiZWVuIG92ZXJ3cml0dGVuIHRvIHJlcHJlc2VudCB0aGUgc3BlY2lmaWVkIHJ1bGUgYWN0aW9uLgorICogICAtIFxjIHNlbGYgZG9lcyBub3QgY2xhaW0gcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBtZW1vcnkgb2YgXGMgcnVsZS4KKyAqICAgLSBcYyBzZWxmIHdpbGwgYmVjb21lIGludmFsaWQgaWY6CisgKiAgICAgLSBUaGUgY2FsbGVyIGZyZWVzIFxjIGNvZGUgYmVmb3JlIGludm9raW5nIFxjIGNvZGVfcHJvcHNfdHJhbnNsYXRlX2NvZGUKKyAqICAgICAgIG9uIFxjIHNlbGYuCisgKiAgICAgLSBUaGUgY2FsbGVyIGZyZWVzIFxjIHJ1bGUuCisgKi8KK3ZvaWQgY29kZV9wcm9wc19ydWxlX2FjdGlvbl9pbml0IChjb2RlX3Byb3BzICpzZWxmLCBjaGFyIGNvbnN0ICpjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uIGNvZGVfbG9jLCBzdHJ1Y3Qgc3ltYm9sX2xpc3QgKnJ1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZWRfcmVmICpuYW1lKTsKKworLyoqCisgKiBccHJlCisgKiAgIC0gSWYgdGhlcmUncyBhIGNvZGUgcGFzc2FnZSBjb250YWluZWQgaW4gXGMgc2VsZiBhbmQgaXQgY29udGFpbnMgQmlzb24KKyAqICAgICBlc2NhcGVzLCBhbGwgZ3JhbW1hciBkZWNsYXJhdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gcGFyc2VkIGFzIHRoZXkgbWF5CisgKiAgICAgYWZmZWN0IHdhcm5pbmdzIGFuZCBjb21wbGFpbnRzIGlzc3VlZCBoZXJlLgorICogXHBvc3QKKyAqICAgLSBBbGwgTTQtc3BlY2lhbCBzeW1ib2xzIGFuZCBCaXNvbiBlc2NhcGVzIGhhdmUgYmVlbiB0cmFuc2xhdGVkIGluCisgKiAgICAgXGMgc2VsZi0+Y29kZS4KKyAqICAgLSA8dHQ+c2VsZi0+Y29kZSAhPSBzZWxmLT5jb2RlXEBwcmU8L3R0PiB1bmxlc3MKKyAqICAgICA8dHQ+c2VsZi0+Y29kZVxAcHJlID0gTlVMTDwvdHQ+LgorICovCit2b2lkIGNvZGVfcHJvcHNfdHJhbnNsYXRlX2NvZGUgKGNvZGVfcHJvcHMgKnNlbGYpOworCisvKioKKyAqIFxwcmUKKyAqICAgLSBOb25lLgorICogXHBvc3QKKyAqICAgLSBUaGUgZHluYW1pYyBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRoZSBwcmV2aW91cyBpbnZvY2F0aW9uIG9mCisgKiAgICAgXGMgY29kZV9wcm9wc190cmFuc2xhdGVfY29kZSAoaWYgYW55KSB3YXMgZnJlZWQuICBUaGUgXGMgY29kZV9wcm9wcworICogICAgIGluc3RhbmNlIGZvciB3aGljaCBcYyBjb2RlX3Byb3BzX3RyYW5zbGF0ZV9jb2RlIHdhcyBpbnZva2VkIGlzIG5vdworICogICAgIGludmFsaWQuCisgKi8KK3ZvaWQgY29kZV9zY2FubmVyX2xhc3Rfc3RyaW5nX2ZyZWUgKHZvaWQpOworCisvKioKKyAqIFxwcmUKKyAqICAgLSBOb25lLgorICogXHBvc3QKKyAqICAgLSBBbGwgZHluYW1pYyBtZW1vcnkgYWxsb2NhdGVkIGR1cmluZyBpbnZvY2F0aW9ucyBvZgorICogICAgIFxjIGNvZGVfcHJvcHNfdHJhbnNsYXRlX2NvZGUgKGlmIGFueSkgaGFzIGJlZW4gZnJlZWQuICBBbGwgXGMgY29kZV9wcm9wcworICogICAgIGluc3RhbmNlcyBtYXkgbm93IGJlIGludmFsaWQuCisgKi8KK3ZvaWQgY29kZV9zY2FubmVyX2ZyZWUgKHZvaWQpOworCisjZW5kaWYgLyogIVNDQU5fQ09ERV9IXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NjYW4tY29kZS5sIGIvc3JjL3NjYW4tY29kZS5sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MGQzNDMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc2Nhbi1jb2RlLmwKQEAgLTAsMCArMSw5NTggQEAKKy8qIEJpc29uIEFjdGlvbiBTY2FubmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQyAtKi0KKworICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCislb3B0aW9uIGRlYnVnIG5vZGVmYXVsdCBub2lucHV0IG5vdW5wdXQgbm95eXdyYXAgbmV2ZXItaW50ZXJhY3RpdmUKKyVvcHRpb24gcHJlZml4PSJjb2RlXyIgb3V0ZmlsZT0ibGV4Lnl5LmMiCisKKyV7CisvKiBXb3JrIGFyb3VuZCBhIGJ1ZyBpbiBmbGV4IDIuNS4zMS4gIFNlZSBEZWJpYW4gYnVnIDMzMzIzMQorICAgPGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvY2dpLWJpbi9idWdyZXBvcnQuY2dpP2J1Zz0zMzMyMzE+LiAgKi8KKyN1bmRlZiBjb2RlX3dyYXAKKyNkZWZpbmUgY29kZV93cmFwKCkgMQorCisjZGVmaW5lIEZMRVhfUFJFRklYKElkKSBjb2RlXyAjIyBJZAorI2luY2x1ZGUgImZsZXgtc2Nhbm5lci5oIgorCisjaW5jbHVkZSAiY29tcGxhaW4uaCIKKyNpbmNsdWRlICJyZWFkZXIuaCIKKyNpbmNsdWRlICJnZXRhcmdzLmgiCisjaW5jbHVkZSAic2Nhbi1jb2RlLmgiCisjaW5jbHVkZSAic3ltbGlzdC5oIgorCisjaW5jbHVkZSA8Yy1jdHlwZS5oPgorI2luY2x1ZGUgPGdldC1lcnJuby5oPgorI2luY2x1ZGUgPHF1b3RlLmg+CisKKy8qIFRoZSBjdXJyZW50IGNhbGxpbmcgc3RhcnQgY29uZGl0aW9uOiBTQ19SVUxFX0FDVElPTiBvcgorICAgU0NfU1lNQk9MX0FDVElPTi4gKi8KKyMgZGVmaW5lIFlZX0RFQ0wgc3RhdGljIGNoYXIgKmNvZGVfbGV4IChjb2RlX3Byb3BzICpzZWxmLCBpbnQgc2NfY29udGV4dCkKK1lZX0RFQ0w7CisKKyNkZWZpbmUgWVlfVVNFUl9BQ1RJT04gIGxvY2F0aW9uX2NvbXB1dGUgKGxvYywgJmxvYy0+ZW5kLCB5eXRleHQsIHl5bGVuZyk7CisKK3N0YXRpYyBjaGFyICpmZXRjaF90eXBlX25hbWUgKGNoYXIgKmNwLCBjaGFyIGNvbnN0ICoqdHlwZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gZG9sbGFyX2xvYyk7CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9hY3Rpb25fZG9sbGFyIChzeW1ib2xfbGlzdCAqcnVsZSwgY2hhciAqY3AsCisJCQkJICBsb2NhdGlvbiBkb2xsYXJfbG9jKTsKK3N0YXRpYyB2b2lkIGhhbmRsZV9hY3Rpb25fYXQgKHN5bWJvbF9saXN0ICpydWxlLCBjaGFyICpjcCwgbG9jYXRpb24gYXRfbG9jKTsKKworLyogQSBzdHJpbmcgdG8gYmUgcHVzaGVkIHRvIG9ic3RhY2sgYWZ0ZXIgZG9sbGFyL2F0IGhhcyBiZWVuIGhhbmRsZWQuICovCitzdGF0aWMgY2hhciAqcmVmX3RhaWxfZmllbGRzOworCitzdGF0aWMgbG9jYXRpb24gdGhlX2xvY2F0aW9uOworc3RhdGljIGxvY2F0aW9uICpsb2MgPSAmdGhlX2xvY2F0aW9uOworCisvKiBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIG1vc3QgcmVjZW50IHRyYW5zbGF0aW9uLiAgKi8KK3N0YXRpYyBjaGFyICpsYXN0X3N0cmluZzsKKworLyogVHJ1ZSBpZiBhbiB1bnR5cGVkICQkIG9yICRuIHdhcyBzZWVuLiAgKi8KK3N0YXRpYyBib29sIHVudHlwZWRfdmFyX3NlZW47CisKKyV9CisgLyogQyBhbmQgQysrIGNvbW1lbnRzIGluIGNvZGUuICovCisleCBTQ19DT01NRU5UIFNDX0xJTkVfQ09NTUVOVAorIC8qIFN0cmluZ3MgYW5kIGNoYXJhY3RlcnMgaW4gY29kZS4gKi8KKyV4IFNDX1NUUklORyBTQ19DSEFSQUNURVIKKyAvKiBXaGV0aGVyIGluIGEgcnVsZSBvciBzeW1ib2wgYWN0aW9uLiAgU3BlY2lmaWVzIHRoZSB0cmFuc2xhdGlvbgorICAgIG9mICQgYW5kIEAuICAqLworJXggU0NfUlVMRV9BQ1RJT04gU0NfU1lNQk9MX0FDVElPTgorCisKKy8qIFBPU0lYIHNheXMgdGhhdCBhIHRhZyBtdXN0IGJlIGJvdGggYW4gaWQgYW5kIGEgQyB1bmlvbiBtZW1iZXIsIGJ1dAorICAgaGlzdG9yaWNhbGx5IGFsbW9zdCBhbnkgY2hhcmFjdGVyIGlzIGFsbG93ZWQgaW4gYSB0YWcuICBXZSBkaXNhbGxvdworICAgTlVMIGFuZCBuZXdsaW5lLCBhcyB0aGlzIHNpbXBsaWZpZXMgb3VyIGltcGxlbWVudGF0aW9uLiAgKi8KK3RhZwkgW15cMFxuPl0rCisKKy8qIFplcm8gb3IgbW9yZSBpbnN0YW5jZXMgb2YgYmFja3NsYXNoLW5ld2xpbmUuICBGb2xsb3dpbmcgR0NDLCBhbGxvdworICAgd2hpdGUgc3BhY2UgYmV0d2VlbiB0aGUgYmFja3NsYXNoIGFuZCB0aGUgbmV3bGluZS4gICovCitzcGxpY2UJIChcXFsgXGZcdFx2XSpcbikqCisKKy8qIEMgc3R5bGUgaWRlbnRpZmllci4gTXVzdCBzdGFydCB3aXRoIGxldHRlci4gV2lsbCBiZSB1c2VkIGZvcgorICAgbmFtZWQgc3ltYm9sIHJlZmVyZW5jZXMuIFNoYWxsIGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGgKKyAgIHNjYW4tZ3JhbS5sICJsZXR0ZXIiIGFuZCAiaWQiLiAqLworbGV0dGVyCSAgWy5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX10KK2lkCSAge2xldHRlcn0oe2xldHRlcn18Wy0wLTldKSoKK3JlZiAgICAgIC0/WzAtOV0rfHtpZH18Ilsie2lkfSJdInwiJCIKKworJSUKKworJXsKKyAgLyogTmVzdGluZyBsZXZlbCBvZiB0aGUgY3VycmVudCBjb2RlIGluIGJyYWNlcy4gICovCisgIGludCBicmFjZXNfbGV2ZWwgPSAwOworCisgIC8qIFdoZXRoZXIgYSBzZW1pY29sb24gaXMgcHJvYmFibHkgbmVlZGVkLgorCisgICAgIFRoZSBoZXVyaXN0aWMgaXMgdGhhdCBhIHNlbWljb2xvbiBpcyBub3QgbmVlZGVkIGFmdGVyICd7JywgJ30nLAorICAgICAnOycsIG9yIGEgQyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBhbmQgdGhhdCB3aGl0ZXNwYWNlcyBhbmQKKyAgICAgY29tbWVudHMgZG8gbm90IGFmZmVjdCB0aGlzIGZsYWcuICBOb3RlIHRoYXQgJ3snIGRvZXMgbm90IG5lZWQgYQorICAgICBzZW1pY29sb24gYmVjYXVzZSBvZiAne30nLiAgQSBzZW1pY29sb24gbWF5IGJlIG5lZWRlZCBiZWZvcmUgYQorICAgICBjcHAgZGlyZWN0aXZlLCBidXQgZG9uJ3QgYm90aGVyLgorCisgICAgIFdoaWxlIGl0IGlzIG1haW50YWluZWQgaW4gc2V2ZXJhbCBzdGFydC1jb25kaXRpb25zIChmYWN0b3JpbmcKKyAgICAgb3Bwb3J0dW5pdGllcyksIGl0IGlzIG1lYW5pbmdmdWwgb25seSBmb3IgU0NfUlVMRV9BQ1RJT04uICovCisgIGJvb2wgbmVlZF9zZW1pY29sb24gPSBmYWxzZTsKKworICAvKiBXaGV0aGVyIGluIGEgQyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiAgRG9uJ3QgdXNlIGEgc3RhcnQgY29uZGl0aW9uCisgICAgIGZvciB0aGlzIGJlY2F1c2UsIGF0IHRoZSBlbmQgb2Ygc3RyaW5ncyBhbmQgY29tbWVudHMsIHdlIHN0aWxsIG5lZWQKKyAgICAgdG8ga25vdyB3aGV0aGVyIHdlJ3JlIGluIGEgZGlyZWN0aXZlLiAgKi8KKyAgYm9vbCBpbl9jcHAgPSBmYWxzZTsKKworICAvKiBUaGlzIHNjYW5uZXIgaXMgc3BlY2lhbDogaXQgaXMgaW52b2tlZCBvbmx5IG9uY2UsIGhlbmNlZm9ydGgKKyAgICAgaXMgZXhwZWN0ZWQgdG8gcmV0dXJuIG9ubHkgb25jZS4gIFRoaXMgaW5pdGlhbGl6YXRpb24gaXMKKyAgICAgdGhlcmVmb3JlIGRvbmUgb25jZSBwZXIgYWN0aW9uIHRvIHRyYW5zbGF0ZS4gKi8KKyAgYXZlciAoc2NfY29udGV4dCA9PSBTQ19TWU1CT0xfQUNUSU9OCisJfHwgc2NfY29udGV4dCA9PSBTQ19SVUxFX0FDVElPTgorCXx8IHNjX2NvbnRleHQgPT0gSU5JVElBTCk7CisgIEJFR0lOIHNjX2NvbnRleHQ7CislfQorCisgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorICB8IFNjYW5uaW5nIGEgQyBjb21tZW50LiAgVGhlIGluaXRpYWwgJy8gKicgaXMgYWxyZWFkeSBlYXRlbi4gIHwKKyAgYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKzxTQ19DT01NRU5UPgoreworICAiKiJ7c3BsaWNlfSIvIiAgU1RSSU5HX0dST1c7IEJFR0lOIHNjX2NvbnRleHQ7Cit9CisKKworICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorICB8IFNjYW5uaW5nIGEgbGluZSBjb21tZW50LiAgVGhlIGluaXRpYWwgJy8vJyBpcyBhbHJlYWR5IGVhdGVuLiAgfAorICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCis8U0NfTElORV9DT01NRU5UPgoreworICAiXG4iCQkgU1RSSU5HX0dST1c7IEJFR0lOIHNjX2NvbnRleHQ7CisgIHtzcGxpY2V9CSBTVFJJTkdfR1JPVzsKK30KKworCisgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisgIHwgU2Nhbm5pbmcgdXNlci1jb2RlIGNoYXJhY3RlcnMgYW5kIHN0cmluZ3MuICB8CisgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKzxTQ19DSEFSQUNURVIsU0NfU1RSSU5HPgoreworICB7c3BsaWNlfXxcXHtzcGxpY2V9LglTVFJJTkdfR1JPVzsKK30KKworPFNDX0NIQVJBQ1RFUj4KK3sKKyAgIiciCQlTVFJJTkdfR1JPVzsgQkVHSU4gc2NfY29udGV4dDsKK30KKworPFNDX1NUUklORz4KK3sKKyAgIlwiIgkJU1RSSU5HX0dST1c7IEJFR0lOIHNjX2NvbnRleHQ7Cit9CisKKworPFNDX1JVTEVfQUNUSU9OLFNDX1NZTUJPTF9BQ1RJT04+Cit7CisgICInIiB7CisgICAgU1RSSU5HX0dST1c7CisgICAgQkVHSU4gU0NfQ0hBUkFDVEVSOworICAgIG5lZWRfc2VtaWNvbG9uID0gdHJ1ZTsKKyAgfQorICAiXCIiIHsKKyAgICBTVFJJTkdfR1JPVzsKKyAgICBCRUdJTiBTQ19TVFJJTkc7CisgICAgbmVlZF9zZW1pY29sb24gPSB0cnVlOworICB9CisgICIvIntzcGxpY2V9IioiIHsKKyAgICBTVFJJTkdfR1JPVzsKKyAgICBCRUdJTiBTQ19DT01NRU5UOworICB9CisgICIvIntzcGxpY2V9Ii8iIHsKKyAgICBTVFJJTkdfR1JPVzsKKyAgICBCRUdJTiBTQ19MSU5FX0NPTU1FTlQ7CisgIH0KKyAgWyRAXSAgeworICAgIHdhcm5fYXQgKCpsb2MsIF8oInN0cmF5ICclcyciKSwgeXl0ZXh0KTsKKyAgICBvYnN0YWNrX2VzY2FwZSAoJm9ic3RhY2tfZm9yX3N0cmluZywgeXl0ZXh0KTsKKyAgICBuZWVkX3NlbWljb2xvbiA9IHRydWU7CisgIH0KKyAgW1xbXF1dICB7CisgICAgb2JzdGFja19lc2NhcGUgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsIHl5dGV4dCk7CisgICAgbmVlZF9zZW1pY29sb24gPSB0cnVlOworICB9Cit9CisKKzxTQ19SVUxFX0FDVElPTj4KK3sKKyAgIiQiKCI8Int0YWd9Ij4iKT97cmVmfSAgeworICAgIHJlZl90YWlsX2ZpZWxkcyA9IE5VTEw7CisgICAgaGFuZGxlX2FjdGlvbl9kb2xsYXIgKHNlbGYtPnJ1bGUsIHl5dGV4dCwgKmxvYyk7CisgICAgaWYgKHJlZl90YWlsX2ZpZWxkcykKKyAgICAgIG9ic3RhY2tfc2dyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsIHJlZl90YWlsX2ZpZWxkcyk7CisgICAgbmVlZF9zZW1pY29sb24gPSB0cnVlOworICB9CisgICJAIntyZWZ9IHsKKyAgICByZWZfdGFpbF9maWVsZHMgPSBOVUxMOworICAgIGhhbmRsZV9hY3Rpb25fYXQgKHNlbGYtPnJ1bGUsIHl5dGV4dCwgKmxvYyk7CisgICAgaWYgKHJlZl90YWlsX2ZpZWxkcykKKyAgICAgIG9ic3RhY2tfc2dyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsIHJlZl90YWlsX2ZpZWxkcyk7CisgICAgbmVlZF9zZW1pY29sb24gPSB0cnVlOworICB9CisKKyAgIjsiICBTVFJJTkdfR1JPVzsgICAgICAgICAgICAgICAgIG5lZWRfc2VtaWNvbG9uID0gZmFsc2U7CisgICJ7IiAgU1RSSU5HX0dST1c7ICsrYnJhY2VzX2xldmVsOyBuZWVkX3NlbWljb2xvbiA9IGZhbHNlOworICAifSIgIHsKKyAgICBib29sIG91dGVyX2JyYWNlID0gLS1icmFjZXNfbGV2ZWwgPT0gMDsKKworICAgIC8qIEFzIGFuIHVuZG9jdW1lbnRlZCBCaXNvbiBleHRlbnNpb24sIGFwcGVuZCAnOycgYmVmb3JlIHRoZSBsYXN0CisgICAgICAgYnJhY2UgaW4gYnJhY2VkIGNvZGUsIHNvIHRoYXQgdGhlIHVzZXIgY29kZSBjYW4gb21pdCB0cmFpbGluZworICAgICAgICc7Jy4gIEJ1dCBkbyBub3QgYXBwZW5kICc7JyBpZiBlbXVsYXRpbmcgWWFjYywgc2luY2UgWWFjYyBkb2VzCisgICAgICAgbm90IGFwcGVuZCBvbmUuICBUaGlzIGlzIGRlcHJlY2F0ZWQgc2luY2UgcmVsZWFzZSAyLjQuMS4gICovCisgICAgaWYgKG91dGVyX2JyYWNlICYmICF5YWNjX2ZsYWcgJiYgbGFuZ3VhZ2VfcHJpbyA9PSBkZWZhdWx0X3ByaW8KKyAgICAgICAgJiYgc2tlbGV0b25fcHJpbyA9PSBkZWZhdWx0X3ByaW8gJiYgbmVlZF9zZW1pY29sb24gJiYgISBpbl9jcHApCisgICAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBpbmRlbnQgPSAwOworICAgICAgICB3YXJuX2F0X2luZGVudCAoKmxvYywgJmluZGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgXygiYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUiKSk7CisgICAgICAgIGluZGVudCArPSBTVUJfSU5ERU5UOworICAgICAgICB3YXJuX2F0X2luZGVudCAoKmxvYywgJmluZGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgXygiZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnIikpOworICAgICAgICBvYnN0YWNrXzFncm93ICgmb2JzdGFja19mb3Jfc3RyaW5nLCAnOycpOworICAgICAgfQorCisgICAgU1RSSU5HX0dST1c7CisgICAgbmVlZF9zZW1pY29sb24gPSBmYWxzZTsKKyAgfQorCisgIC8qIFByZXByb2Nlc3NpbmcgZGlyZWN0aXZlcyBzaG91bGQgb25seSBiZSByZWNvZ25pemVkIGF0IHRoZSBiZWdpbm5pbmcKKyAgICAgb2YgbGluZXMsIGFsbG93aW5nIHdoaXRlc3BhY2UgaW5jbHVkaW5nIGNvbW1lbnRzLCBidXQgaW4gQy9DKyssCisgICAgICcjJyBjYW4gb25seSBiZSB0aGUgc3RhcnQgb2YgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgb3Igd2l0aGluCisgICAgICcjZGVmaW5lJyBkaXJlY3RpdmVzIGFueXdheSwgc28gZG9uJ3QgYm90aGVyIHdpdGggYmVnaW4gb2YgbGluZS4gICovCisgICIjIiAgICAgICBTVFJJTkdfR1JPVzsgaW5fY3BwID0gdHJ1ZTsKKworICB7c3BsaWNlfSAgU1RSSU5HX0dST1c7CisgIFtcblxyXSAgICBTVFJJTkdfR1JPVzsgaWYgKGluX2NwcCkgaW5fY3BwID0gbmVlZF9zZW1pY29sb24gPSBmYWxzZTsKKyAgWyBcdFxmXSAgIFNUUklOR19HUk9XOworCisgIC8qIFlZRkFJTCBpcyB1bmRvY3VtZW50ZWQgYW5kIHdhcyBmb3JtYWxseSBkZXByZWNhdGVkIGluIEJpc29uCisgICAgIDIuNC4yLiAgKi8KKyAgWVlGQUlMIHsKKyAgICBTVFJJTkdfR1JPVzsgbmVlZF9zZW1pY29sb24gPSB0cnVlOworICAgIHdhcm5fYXQgKCpsb2MsIF8oInVzZSBvZiBZWUZBSUwsIHdoaWNoIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUiCisgICAgICAgICAgICAgICAgICAgICAiIHJlbW92ZWQiKSk7CisgIH0KKworICAvKiBUaGUgc29sZSBwdXJwb3NlIG9mIHRoaXMgaXMgdG8gbWFrZSBzdXJlIGlkZW50aWZpZXJzIHRoYXQgbWVyZWx5CisgICAgIGNvbnRhaW4gWVlGQUlMIGRvbid0IHByb2R1Y2UgdGhlIGFib3ZlIHdhcm5pbmcuICAqLworICBbQS1aYS16X11bMC05QS1aYS16X10qIFNUUklOR19HUk9XOyBuZWVkX3NlbWljb2xvbiA9IHRydWU7CisKKyAgLiBTVFJJTkdfR1JPVzsgbmVlZF9zZW1pY29sb24gPSB0cnVlOworfQorCis8U0NfU1lNQk9MX0FDVElPTj4KK3sKKyAgIiQiKCI8Int0YWd9Ij4iKT8iJCIgeworICAgIGNvbnN0IGNoYXIgKnR5cGVfbmFtZSA9IE5VTEw7CisgICAgZmV0Y2hfdHlwZV9uYW1lICh5eXRleHQgKyAxLCAmdHlwZV9uYW1lLCAqbG9jKVstMV0gPSAwOworICAgIG9ic3RhY2tfc2dyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICJdYjRfZG9sbGFyX2RvbGxhcigiKTsKKyAgICBvYnN0YWNrX3F1b3RlICgmb2JzdGFja19mb3Jfc3RyaW5nLCB0eXBlX25hbWUpOworICAgIG9ic3RhY2tfc2dyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICIpWyIpOworICAgIHNlbGYtPmlzX3ZhbHVlX3VzZWQgPSB0cnVlOworICB9CisgICJAJCIgeworICAgIG9ic3RhY2tfc2dyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICJdYjRfYXRfZG9sbGFyWyIpOworICAgIGxvY2F0aW9uc19mbGFnID0gdHJ1ZTsKKyAgfQorfQorCisKKzwqPgoreworICAvKiBFc2NhcGUgTTQgcXVvdGluZyBjaGFyYWN0ZXJzIGluIEMgY29kZS4gICovCisgIFskQFxbXF1dICAgIG9ic3RhY2tfZXNjYXBlICgmb2JzdGFja19mb3Jfc3RyaW5nLCB5eXRleHQpOworCisgIC8qIEJ5IGRlZmF1bHQsIGdyb3cgdGhlIHN0cmluZyBvYnN0YWNrIHdpdGggdGhlIGlucHV0LiAgKi8KKyAgLnxcbiAgICAgICAgU1RSSU5HX0dST1c7CisKKyAgLyogRW5kIG9mIHByb2Nlc3NpbmcuICovCisgIDw8RU9GPj4gICAgIFNUUklOR19GSU5JU0g7IHJldHVybiBsYXN0X3N0cmluZzsKK30KKworJSUKKworc3RhdGljIGlubGluZSBib29sCitpc19kb3Rfb3JfZGFzaCAoY2hhciBjaCkKK3sKKyAgcmV0dXJuIGNoID09ICcuJyB8fCBjaCA9PSAnLSc7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorY29udGFpbnNfZG90X29yX2Rhc2ggKGNvbnN0IGNoYXIqIHApCit7CisgIGZvciAoOyAqcDsgKytwKQorICAgIGlmIChpc19kb3Rfb3JfZGFzaCAoKnApKQorICAgICAgcmV0dXJuIHRydWU7CisgIHJldHVybiBmYWxzZTsKK30KKworLyogRGVmaW5lcyBhIHZhcmlhbnQgb2YgYSBzeW1ib2xpYyBuYW1lIHJlc29sdXRpb24uICovCit0eXBlZGVmIHN0cnVjdAoreworICAvKiBJbmRleCBpbiBzeW1ib2wgbGlzdC4gKi8KKyAgdW5zaWduZWQgc3ltYm9sX2luZGV4OworCisgIC8qIE1hdGNoZWQgc3ltYm9sIGlkIGFuZCBsb2MuICovCisgIHVuaXFzdHIgaWQ7CisgIGxvY2F0aW9uIGxvYzsKKworICAvKiBIaWRpbmcgbmFtZWQgcmVmZXJlbmNlLiAqLworICBuYW1lZF9yZWYqIGhpZGRlbl9ieTsKKworICAvKiBFcnJvciBmbGFncy4gTWF5IGNvbnRhaW4gemVybyAobm8gZXJyb3JzKSBvcgorICAgICBhIGNvbWJpbmF0aW9uIG9mIFZBUklBTlRfKiB2YWx1ZXMuICovCisgIHVuc2lnbmVkIGVycjsKK30gdmFyaWFudDsKKworLyogU2V0IHdoZW4gdGhlIHZhcmlhbnQgcmVmZXJzIHRvIGEgc3ltYm9sIGhpZGRlbgorICAgYnkgYW4gZXhwbGljaXQgc3ltYm9sIHJlZmVyZW5jZS4gKi8KKyNkZWZpbmUgVkFSSUFOVF9ISURERU4gKDEgPDwgMCkKKworLyogU2V0IHdoZW4gdGhlIHZhcmlhbnQgcmVmZXJzIHRvIGEgc3ltYm9sIGNvbnRhaW5pbmcKKyAgIGRvdHMgb3IgZGFzaGVzLiBXaWxsIHJlcXVpcmUgZXhwbGljaXQgYnJhY2tldGluZy4gKi8KKyNkZWZpbmUgVkFSSUFOVF9CQURfQlJBQ0tFVElORyAoMSA8PCAxKQorCisvKiBTZXQgd2hlbiB0aGUgdmFyaWFudCByZWZlcnMgdG8gYSBzeW1ib2wgd2hpY2ggaXMKKyAgIG5vdCB2aXNpYmxlIGZyb20gY3VycmVudCBtaWRydWxlLiAqLworI2RlZmluZSBWQVJJQU5UX05PVF9WSVNJQkxFX0ZST01fTUlEUlVMRSAoMSA8PCAyKQorCitzdGF0aWMgdmFyaWFudCAqdmFyaWFudF90YWJsZSA9IE5VTEw7CitzdGF0aWMgdW5zaWduZWQgdmFyaWFudF90YWJsZV9zaXplID0gMDsKK3N0YXRpYyB1bnNpZ25lZCB2YXJpYW50X2NvdW50ID0gMDsKKworc3RhdGljIHZhcmlhbnQgKgordmFyaWFudF90YWJsZV9ncm93ICh2b2lkKQoreworICArK3ZhcmlhbnRfY291bnQ7CisgIGlmICh2YXJpYW50X2NvdW50ID4gdmFyaWFudF90YWJsZV9zaXplKQorICAgIHsKKyAgICAgIHdoaWxlICh2YXJpYW50X2NvdW50ID4gdmFyaWFudF90YWJsZV9zaXplKQorCXZhcmlhbnRfdGFibGVfc2l6ZSA9IDIgKiB2YXJpYW50X3RhYmxlX3NpemUgKyAzOworICAgICAgdmFyaWFudF90YWJsZSA9IHhucmVhbGxvYyAodmFyaWFudF90YWJsZSwgdmFyaWFudF90YWJsZV9zaXplLAorCQkJCSBzaXplb2YgKnZhcmlhbnRfdGFibGUpOworICAgIH0KKyAgcmV0dXJuICZ2YXJpYW50X3RhYmxlW3ZhcmlhbnRfY291bnQgLSAxXTsKK30KKworc3RhdGljIHZvaWQKK3ZhcmlhbnRfdGFibGVfZnJlZSAodm9pZCkKK3sKKyAgZnJlZSAodmFyaWFudF90YWJsZSk7CisgIHZhcmlhbnRfdGFibGUgPSBOVUxMOworICB2YXJpYW50X3RhYmxlX3NpemUgPSB2YXJpYW50X2NvdW50ID0gMDsKK30KKworc3RhdGljIGNoYXIgKgorZmluZF9wcmVmaXhfZW5kIChjb25zdCBjaGFyICpwcmVmaXgsIGNoYXIgKmJlZ2luLCBjaGFyICplbmQpCit7CisgIGNoYXIgKnB0ciA9IGJlZ2luOworCisgIGZvciAoOyAqcHJlZml4ICYmIHB0ciAhPSBlbmQ7ICsrcHJlZml4LCArK3B0cikKKyAgICBpZiAoKnByZWZpeCAhPSAqcHRyKQorICAgICAgcmV0dXJuIDA7CisKKyAgaWYgKCpwcmVmaXgpCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIHB0cjsKK30KKworc3RhdGljIHZhcmlhbnQgKgordmFyaWFudF9hZGQgKHVuaXFzdHIgaWQsIGxvY2F0aW9uIGlkX2xvYywgdW5zaWduZWQgc3ltYm9sX2luZGV4LAorCSAgICAgY2hhciAqY3AsIGNoYXIgKmNwX2VuZCwgYm9vbCBleHBsaWNpdF9icmFja2V0aW5nKQoreworICBjaGFyICpwcmVmaXhfZW5kOworCisgIHByZWZpeF9lbmQgPSBmaW5kX3ByZWZpeF9lbmQgKGlkLCBjcCwgY3BfZW5kKTsKKyAgaWYgKHByZWZpeF9lbmQgJiYKKyAgICAgIChwcmVmaXhfZW5kID09IGNwX2VuZCB8fAorICAgICAgICghZXhwbGljaXRfYnJhY2tldGluZyAmJiBpc19kb3Rfb3JfZGFzaCAoKnByZWZpeF9lbmQpKSkpCisgICAgeworICAgICAgdmFyaWFudCAqciA9IHZhcmlhbnRfdGFibGVfZ3JvdyAoKTsKKyAgICAgIHItPnN5bWJvbF9pbmRleCA9IHN5bWJvbF9pbmRleDsKKyAgICAgIHItPmlkID0gaWQ7CisgICAgICByLT5sb2MgPSBpZF9sb2M7CisgICAgICByLT5oaWRkZW5fYnkgPSBOVUxMOworICAgICAgci0+ZXJyID0gMDsKKyAgICAgIHJldHVybiByOworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitnZXRfYXRfc3BlYyAodW5zaWduZWQgc3ltYm9sX2luZGV4KQoreworICBzdGF0aWMgY2hhciBhdF9idWZbMjBdOworICBpZiAoc3ltYm9sX2luZGV4ID09IDApCisgICAgc3RyY3B5IChhdF9idWYsICIkJCIpOworICBlbHNlCisgICAgc25wcmludGYgKGF0X2J1Ziwgc2l6ZW9mIGF0X2J1ZiwgIiQldSIsIHN5bWJvbF9pbmRleCk7CisgIHJldHVybiBhdF9idWY7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93X3N1Yl9tZXNzYWdlcyAoY29uc3QgY2hhciogY3AsIGJvb2wgZXhwbGljaXRfYnJhY2tldGluZywKKyAgICAgICAgICAgICAgICAgICBpbnQgbWlkcnVsZV9yaHNfaW5kZXgsIGNoYXIgZG9sbGFyX29yX2F0LAorICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfd2FybmluZywgdW5zaWduZWQgaW5kZW50KQoreworICB1bnNpZ25lZCBpOworCisgIGZvciAoaSA9IDA7IGkgPCB2YXJpYW50X2NvdW50OyArK2kpCisgICAgeworICAgICAgY29uc3QgdmFyaWFudCAqdmFyID0gJnZhcmlhbnRfdGFibGVbaV07CisgICAgICBjb25zdCBjaGFyICphdF9zcGVjID0gZ2V0X2F0X3NwZWMgKHZhci0+c3ltYm9sX2luZGV4KTsKKworICAgICAgaWYgKHZhci0+ZXJyID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoaXNfd2FybmluZykKKyAgICAgICAgICAgIHdhcm5fYXRfaW5kZW50ICh2YXItPmxvYywgJmluZGVudCwgXygicmVmZXJzIHRvOiAlYyVzIGF0ICVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9sbGFyX29yX2F0LCB2YXItPmlkLCBhdF9zcGVjKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21wbGFpbl9hdF9pbmRlbnQgKHZhci0+bG9jLCAmaW5kZW50LCBfKCJyZWZlcnMgdG86ICVjJXMgYXQgJXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9sbGFyX29yX2F0LCB2YXItPmlkLCBhdF9zcGVjKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorCXsKKwkgIHN0YXRpYyBzdHJ1Y3Qgb2JzdGFjayBtc2dfYnVmOworCSAgY29uc3QgY2hhciAqdGFpbCA9IGV4cGxpY2l0X2JyYWNrZXRpbmcgPyAiIiA6CisJICAgIGNwICsgc3RybGVuICh2YXItPmlkKTsKKwkgIGNvbnN0IGNoYXIgKmlkID0gdmFyLT5oaWRkZW5fYnkgPyB2YXItPmhpZGRlbl9ieS0+aWQgOgorCSAgICB2YXItPmlkOworCSAgbG9jYXRpb24gaWRfbG9jID0gdmFyLT5oaWRkZW5fYnkgPyB2YXItPmhpZGRlbl9ieS0+bG9jIDoKKwkgICAgdmFyLT5sb2M7CisKKwkgIC8qIENyZWF0ZSB0aGUgZXhwbGFuYXRpb24gbWVzc2FnZS4gKi8KKwkgIG9ic3RhY2tfaW5pdCAoJm1zZ19idWYpOworCisJICBvYnN0YWNrX3ByaW50ZiAoJm1zZ19idWYsIF8oInBvc3NpYmx5IG1lYW50OiAlYyIpLCBkb2xsYXJfb3JfYXQpOworCSAgaWYgKGNvbnRhaW5zX2RvdF9vcl9kYXNoIChpZCkpCisJICAgIG9ic3RhY2tfcHJpbnRmICgmbXNnX2J1ZiwgIlslc10iLCBpZCk7CisJICBlbHNlCisJICAgIG9ic3RhY2tfc2dyb3cgKCZtc2dfYnVmLCBpZCk7CisJICBvYnN0YWNrX3Nncm93ICgmbXNnX2J1ZiwgdGFpbCk7CisKKwkgIGlmICh2YXItPmVyciAmIFZBUklBTlRfSElEREVOKQorCSAgICB7CisJICAgICAgb2JzdGFja19wcmludGYgKCZtc2dfYnVmLCBfKCIsIGhpZGluZyAlYyIpLCBkb2xsYXJfb3JfYXQpOworCSAgICAgIGlmIChjb250YWluc19kb3Rfb3JfZGFzaCAodmFyLT5pZCkpCisJCW9ic3RhY2tfcHJpbnRmICgmbXNnX2J1ZiwgIlslc10iLCB2YXItPmlkKTsKKwkgICAgICBlbHNlCisJCW9ic3RhY2tfc2dyb3cgKCZtc2dfYnVmLCB2YXItPmlkKTsKKwkgICAgICBvYnN0YWNrX3Nncm93ICgmbXNnX2J1ZiwgdGFpbCk7CisJICAgIH0KKworCSAgb2JzdGFja19wcmludGYgKCZtc2dfYnVmLCBfKCIgYXQgJXMiKSwgYXRfc3BlYyk7CisKKwkgIGlmICh2YXItPmVyciAmIFZBUklBTlRfTk9UX1ZJU0lCTEVfRlJPTV9NSURSVUxFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQgPQorICAgICAgICAgICAgICAgIF8oIiwgY2Fubm90IGJlIGFjY2Vzc2VkIGZyb20gbWlkLXJ1bGUgYWN0aW9uIGF0ICQlZCIpOworICAgICAgICAgICAgICBvYnN0YWNrX3ByaW50ZiAoJm1zZ19idWYsIGZvcm1hdCwgbWlkcnVsZV9yaHNfaW5kZXgpOworICAgICAgICAgICAgfQorCisJICBvYnN0YWNrXzFncm93ICgmbXNnX2J1ZiwgJ1wwJyk7CisgICAgICAgICAgaWYgKGlzX3dhcm5pbmcpCisgICAgICAgICAgICB3YXJuX2F0X2luZGVudCAoaWRfbG9jLCAmaW5kZW50LCAiJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIG9ic3RhY2tfZmluaXNoICgmbXNnX2J1ZikpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBsYWluX2F0X2luZGVudCAoaWRfbG9jLCAmaW5kZW50LCAiJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSBvYnN0YWNrX2ZpbmlzaCAoJm1zZ19idWYpKTsKKwkgIG9ic3RhY2tfZnJlZSAoJm1zZ19idWYsIDApOworCX0KKyAgICB9Cit9CisKKy8qIFJldHVybmVkIGZyb20gInBhcnNlX3JlZiIgd2hlbiB0aGUgcmVmZXJlbmNlCisgICBpcyBpbmFwcHJvcHJpYXRlLiAqLworI2RlZmluZSBJTlZBTElEX1JFRiAoSU5UX01JTikKKworLyogUmV0dXJuZWQgZnJvbSAicGFyc2VfcmVmIiB3aGVuIHRoZSByZWZlcmVuY2UKKyAgIHBvaW50cyB0byBMSFMgKCQkKSBvZiB0aGUgY3VycmVudCBydWxlIG9yIG1pZHJ1bGUuICovCisjZGVmaW5lIExIU19SRUYgKElOVF9NSU4gKyAxKQorCisvKiBQYXJzZSBuYW1lZCBvciBwb3NpdGlvbmFsIHJlZmVyZW5jZS4gSW4gY2FzZSBvZiBwb3NpdGlvbmFsCisgICByZWZlcmVuY2VzLCBjYW4gcmV0dXJuIG5lZ2F0aXZlIHZhbHVlcyBmb3IgJC1uICJkZWVwIiBzdGFjaworICAgYWNjZXNzZXMuICovCitzdGF0aWMgbG9uZyBpbnQKK3BhcnNlX3JlZiAoY2hhciAqY3AsIHN5bWJvbF9saXN0ICpydWxlLCBpbnQgcnVsZV9sZW5ndGgsCisJICAgaW50IG1pZHJ1bGVfcmhzX2luZGV4LCBjaGFyICp0ZXh0LCBsb2NhdGlvbiB0ZXh0X2xvYywKKwkgICBjaGFyIGRvbGxhcl9vcl9hdCkKK3sKKyAgc3ltYm9sX2xpc3QgKmw7CisgIGNoYXIgKmNwX2VuZDsKKyAgYm9vbCBleHBsaWNpdF9icmFja2V0aW5nOworICB1bnNpZ25lZCBpOworICB1bnNpZ25lZCB2YWxpZF92YXJpYW50cyA9IDA7CisgIHVuc2lnbmVkIHZhbGlkX3ZhcmlhbnRfaW5kZXggPSAwOworCisgIGlmICgnJCcgPT0gKmNwKQorICAgIHJldHVybiBMSFNfUkVGOworCisgIGlmIChjX2lzZGlnaXQgKCpjcCkgfHwgKCpjcCA9PSAnLScgJiYgY19pc2RpZ2l0ICgqIChjcCArIDEpKSkpCisgICAgeworICAgICAgbG9uZyBpbnQgbnVtID0gc3RydG9sIChjcCwgJmNwLCAxMCk7CisgICAgICBpZiAoMSAtIElOVF9NQVggKyBydWxlX2xlbmd0aCA8PSBudW0gJiYgbnVtIDw9IHJ1bGVfbGVuZ3RoKQorCXJldHVybiBudW07CisgICAgICBlbHNlCisJeworCSAgY29tcGxhaW5fYXQgKHRleHRfbG9jLCBfKCJpbnRlZ2VyIG91dCBvZiByYW5nZTogJXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgcXVvdGUgKHRleHQpKTsKKwkgIHJldHVybiBJTlZBTElEX1JFRjsKKwl9CisgICAgfQorCisgIGlmICgnWycgPT0gKmNwKQorICAgIHsKKyAgICAgIC8qIElnbm9yZSB0aGUgYnJhY2tldHMuICovCisgICAgICBjaGFyICpwOworICAgICAgZm9yIChwID0gKytjcDsgKnAgIT0gJ10nOyArK3ApCisJY29udGludWU7CisgICAgICBjcF9lbmQgPSBwOworCisgICAgICBleHBsaWNpdF9icmFja2V0aW5nID0gdHJ1ZTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBUYWtlIGFsbCBjaGFyYWN0ZXJzIG9mIHRoZSBuYW1lLiAqLworICAgICAgY2hhciogcDsKKyAgICAgIGZvciAocCA9IGNwOyAqcDsgKytwKQorCWlmIChpc19kb3Rfb3JfZGFzaCAoKnApKQorCSAgeworCSAgICByZWZfdGFpbF9maWVsZHMgPSBwOworCSAgICBicmVhazsKKwkgIH0KKyAgICAgIGZvciAocCA9IGNwOyAqcDsgKytwKQorCWNvbnRpbnVlOworICAgICAgY3BfZW5kID0gcDsKKworICAgICAgZXhwbGljaXRfYnJhY2tldGluZyA9IGZhbHNlOworICAgIH0KKworICAvKiBBZGQgYWxsIHJlbGV2YW50IHZhcmlhbnRzLiAqLworICB7CisgICAgdW5zaWduZWQgc3ltYm9sX2luZGV4OworICAgIHZhcmlhbnRfY291bnQgPSAwOworICAgIGZvciAoc3ltYm9sX2luZGV4ID0gMCwgbCA9IHJ1bGU7ICFzeW1ib2xfbGlzdF9udWxsIChsKTsKKyAgICAgICAgICsrc3ltYm9sX2luZGV4LCBsID0gbC0+bmV4dCkKKyAgICAgIHsKKwl2YXJpYW50ICp2YXI7CisJaWYgKGwtPmNvbnRlbnRfdHlwZSAhPSBTWU1MSVNUX1NZTUJPTCkKKwkgIGNvbnRpbnVlOworCisJdmFyID0gdmFyaWFudF9hZGQgKGwtPmNvbnRlbnQuc3ltLT50YWcsIGwtPnN5bV9sb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xfaW5kZXgsIGNwLCBjcF9lbmQsIGV4cGxpY2l0X2JyYWNrZXRpbmcpOworCWlmICh2YXIgJiYgbC0+bmFtZWRfcmVmKQorCSAgdmFyLT5oaWRkZW5fYnkgPSBsLT5uYW1lZF9yZWY7CisKKwlpZiAobC0+bmFtZWRfcmVmKQorCSAgdmFyaWFudF9hZGQgKGwtPm5hbWVkX3JlZi0+aWQsIGwtPm5hbWVkX3JlZi0+bG9jLAorICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xfaW5kZXgsIGNwLCBjcF9lbmQsIGV4cGxpY2l0X2JyYWNrZXRpbmcpOworICAgICAgfQorICB9CisKKyAgLyogQ2hlY2sgZXJyb3JzLiAqLworICBmb3IgKGkgPSAwOyBpIDwgdmFyaWFudF9jb3VudDsgKytpKQorICAgIHsKKyAgICAgIHZhcmlhbnQgKnZhciA9ICZ2YXJpYW50X3RhYmxlW2ldOworICAgICAgdW5zaWduZWQgc3ltYm9sX2luZGV4ID0gdmFyLT5zeW1ib2xfaW5kZXg7CisKKyAgICAgIC8qIENoZWNrIHZpc2liaWxpdHkgZnJvbSBtaWQtcnVsZSBhY3Rpb25zLiAqLworICAgICAgaWYgKG1pZHJ1bGVfcmhzX2luZGV4ICE9IDAKKwkgICYmIChzeW1ib2xfaW5kZXggPT0gMCB8fCBtaWRydWxlX3Joc19pbmRleCA8IHN5bWJvbF9pbmRleCkpCisgICAgICAgIHZhci0+ZXJyIHw9IFZBUklBTlRfTk9UX1ZJU0lCTEVfRlJPTV9NSURSVUxFOworCisgICAgICAvKiBDaGVjayBjb3JyZWN0IGJyYWNrZXRpbmcuICovCisgICAgICBpZiAoIWV4cGxpY2l0X2JyYWNrZXRpbmcgJiYgY29udGFpbnNfZG90X29yX2Rhc2ggKHZhci0+aWQpKQorICAgICAgICB2YXItPmVyciB8PSBWQVJJQU5UX0JBRF9CUkFDS0VUSU5HOworCisgICAgICAvKiBDaGVjayB1c2luZyBvZiBoaWRkZW4gc3ltYm9scy4gKi8KKyAgICAgIGlmICh2YXItPmhpZGRlbl9ieSkKKyAgICAgICAgdmFyLT5lcnIgfD0gVkFSSUFOVF9ISURERU47CisKKyAgICAgIGlmICghdmFyLT5lcnIpCisgICAgICAgIHsKKyAgICAgICAgICB2YWxpZF92YXJpYW50X2luZGV4ID0gaTsKKyAgICAgICAgICArK3ZhbGlkX3ZhcmlhbnRzOworICAgICAgICB9CisgICAgfQorCisgIHN3aXRjaCAodmFsaWRfdmFyaWFudHMpCisgICAgeworICAgIGNhc2UgMDoKKyAgICAgIHsKKyAgICAgICAgdW5zaWduZWQgbGVuID0gKGV4cGxpY2l0X2JyYWNrZXRpbmcgfHwgIXJlZl90YWlsX2ZpZWxkcykgPworICAgICAgICAgIGNwX2VuZCAtIGNwIDogcmVmX3RhaWxfZmllbGRzIC0gY3A7CisgICAgICAgIHVuc2lnbmVkIGluZGVudCA9IDA7CisKKyAgICAgICAgY29tcGxhaW5fYXRfaW5kZW50ICh0ZXh0X2xvYywgJmluZGVudCwgXygiaW52YWxpZCByZWZlcmVuY2U6ICVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGUgKHRleHQpKTsKKyAgICAgICAgaW5kZW50ICs9IFNVQl9JTkRFTlQ7CisgICAgICAgIGlmIChsZW4gPT0gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBsb2NhdGlvbiBzeW1fbG9jID0gdGV4dF9sb2M7CisgICAgICAgICAgICBzeW1fbG9jLnN0YXJ0LmNvbHVtbiArPSAxOworICAgICAgICAgICAgc3ltX2xvYy5lbmQgPSBzeW1fbG9jLnN0YXJ0OworICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0ID0KKyAgICAgICAgICAgICAgXygic3ludGF4IGVycm9yIGFmdGVyICclYycsIGV4cGVjdGluZyBpbnRlZ2VyLCBsZXR0ZXIsIgorICAgICAgICAgICAgICAgICIgJ18nLCAnWycsIG9yICckJyIpOworICAgICAgICAgICAgY29tcGxhaW5fYXRfaW5kZW50IChzeW1fbG9jLCAmaW5kZW50LCBmb3JtYXQsIGRvbGxhcl9vcl9hdCk7CisgICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtaWRydWxlX3Joc19pbmRleCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQgPQorICAgICAgICAgICAgICBfKCJzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb24gYmVmb3JlICQlZDogJS4qcyIpOworICAgICAgICAgICAgY29tcGxhaW5fYXRfaW5kZW50IChydWxlLT5sb2NhdGlvbiwgJmluZGVudCwgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWRydWxlX3Joc19pbmRleCwgbGVuLCBjcCk7CisgICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0ID0KKyAgICAgICAgICAgICAgXygic3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiAlLipzIik7CisgICAgICAgICAgICBjb21wbGFpbl9hdF9pbmRlbnQgKHJ1bGUtPmxvY2F0aW9uLCAmaW5kZW50LCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiwgY3ApOworICAgICAgICAgIH0KKworICAgICAgICBpZiAodmFyaWFudF9jb3VudCA+IDApCisgICAgICAgICAgc2hvd19zdWJfbWVzc2FnZXMgKGNwLCBleHBsaWNpdF9icmFja2V0aW5nLCBtaWRydWxlX3Joc19pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9sbGFyX29yX2F0LCBmYWxzZSwgaW5kZW50KTsKKyAgICAgICAgcmV0dXJuIElOVkFMSURfUkVGOworICAgICAgfQorICAgIGNhc2UgMToKKyAgICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZW50ID0gMDsKKyAgICAgICAgaWYgKHZhcmlhbnRfY291bnQgPiAxKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHdhcm5fYXRfaW5kZW50ICh0ZXh0X2xvYywgJmluZGVudCwgXygibWlzbGVhZGluZyByZWZlcmVuY2U6ICVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGUgKHRleHQpKTsKKyAgICAgICAgICAgIHNob3dfc3ViX21lc3NhZ2VzIChjcCwgZXhwbGljaXRfYnJhY2tldGluZywgbWlkcnVsZV9yaHNfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9sbGFyX29yX2F0LCB0cnVlLCBpbmRlbnQgKyBTVUJfSU5ERU5UKTsKKyAgICAgICAgICB9CisgICAgICAgIHsKKyAgICAgICAgICB1bnNpZ25lZCBzeW1ib2xfaW5kZXggPQorICAgICAgICAgICAgdmFyaWFudF90YWJsZVt2YWxpZF92YXJpYW50X2luZGV4XS5zeW1ib2xfaW5kZXg7CisgICAgICAgICAgcmV0dXJuIChzeW1ib2xfaW5kZXggPT0gbWlkcnVsZV9yaHNfaW5kZXgpID8gTEhTX1JFRiA6IHN5bWJvbF9pbmRleDsKKyAgICAgICAgfQorICAgICAgfQorICAgIGNhc2UgMjoKKyAgICBkZWZhdWx0OgorICAgICAgeworICAgICAgICB1bnNpZ25lZCBpbmRlbnQgPSAwOworICAgICAgICBjb21wbGFpbl9hdF9pbmRlbnQgKHRleHRfbG9jLCAmaW5kZW50LCBfKCJhbWJpZ3VvdXMgcmVmZXJlbmNlOiAlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3RlICh0ZXh0KSk7CisgICAgICAgIHNob3dfc3ViX21lc3NhZ2VzIChjcCwgZXhwbGljaXRfYnJhY2tldGluZywgbWlkcnVsZV9yaHNfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2xsYXJfb3JfYXQsIGZhbHNlLCBpbmRlbnQgKyBTVUJfSU5ERU5UKTsKKyAgICAgICAgcmV0dXJuIElOVkFMSURfUkVGOworICAgICAgfQorICAgIH0KKworICAvKiBOb3QgcmVhY2hhYmxlLiAqLworICByZXR1cm4gSU5WQUxJRF9SRUY7Cit9CisKKy8qIEtlZXBzIHRyYWNrIG9mIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzZW1hbnRpYyB2YWx1ZXMgdG8gdGhlIGxlZnQgb2YKKyAgIGEgaGFuZGxlICh0aG9zZSByZWZlcmVuY2VkIGJ5ICQwLCAkLTEsIGV0Yy4pIGFyZSByZXF1aXJlZCBieSB0aGUKKyAgIHNlbWFudGljIGFjdGlvbnMgb2YgdGhpcyBncmFtbWFyLiAqLworaW50IG1heF9sZWZ0X3NlbWFudGljX2NvbnRleHQgPSAwOworCisKKy8qIElmIENQIHBvaW50cyB0byBhIHR5cGVuYW1lIChpLmUuLCA8Lio/PiksIHNldCBUWVBFX05BTUUgdG8gaXRzCisgICBiZWdpbm5pbmcgKGkuZS4sIGFmdGVyIHRoZSBvcGVuaW5nICI8IiwgYW5kIHJldHVybiB0aGUgcG9pbnRlcgorICAgaW1tZWRpYXRlbHkgYWZ0ZXIgaXQuICAqLworCitzdGF0aWMKK2NoYXIgKgorZmV0Y2hfdHlwZV9uYW1lIChjaGFyICpjcCwgY2hhciBjb25zdCAqKnR5cGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgbG9jYXRpb24gZG9sbGFyX2xvYykKK3sKKyAgaWYgKCpjcCA9PSAnPCcpCisgICAgeworICAgICAgKnR5cGVfbmFtZSA9ICsrY3A7CisgICAgICB3aGlsZSAoKmNwICE9ICc+JykKKwkrK2NwOworCisgICAgICAvKiBUaGUgJz4nIHN5bWJvbCB3aWxsIGJlIGxhdGVyIHJlcGxhY2VkIGJ5ICdcMCcuIE9yaWdpbmFsCisJICd0ZXh0JyBpcyBuZWVkZWQgZm9yIGVycm9yIG1lc3NhZ2VzLiAqLworICAgICAgKytjcDsKKyAgICAgIGlmICh1bnR5cGVkX3Zhcl9zZWVuKQorCWNvbXBsYWluX2F0IChkb2xsYXJfbG9jLCBfKCJleHBsaWNpdCB0eXBlIGdpdmVuIGluIHVudHlwZWQgZ3JhbW1hciIpKTsKKyAgICAgIHRhZ19zZWVuID0gdHJ1ZTsKKyAgICB9CisgIHJldHVybiBjcDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFRFWFQgaXMgcG9pbnRpbmcgdG8gYSB3YW5uYWJlZSBzZW1hbnRpYyB2YWx1ZSAoaS5lLiwgYSAnJCcpLiAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBQb3NzaWJsZSBpbnB1dHM6ICRbPFRZUEVOQU1FPl0oJHxpbnRlZ2VyKSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgT3V0cHV0IHRvIE9CU1RBQ0tfRk9SX1NUUklORyBhIHJlZmVyZW5jZSB0byB0aGlzIHNlbWFudGljIHZhbHVlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCitoYW5kbGVfYWN0aW9uX2RvbGxhciAoc3ltYm9sX2xpc3QgKnJ1bGUsIGNoYXIgKnRleHQsIGxvY2F0aW9uIGRvbGxhcl9sb2MpCit7CisgIGNoYXIgY29uc3QgKnR5cGVfbmFtZSA9IE5VTEw7CisgIGNoYXIgKmNwID0gdGV4dCArIDE7CisgIHN5bWJvbF9saXN0ICplZmZlY3RpdmVfcnVsZTsKKyAgaW50IGVmZmVjdGl2ZV9ydWxlX2xlbmd0aDsKKyAgaW50IG47CisKKyAgaWYgKHJ1bGUtPm1pZHJ1bGVfcGFyZW50X3J1bGUpCisgICAgeworICAgICAgZWZmZWN0aXZlX3J1bGUgPSBydWxlLT5taWRydWxlX3BhcmVudF9ydWxlOworICAgICAgZWZmZWN0aXZlX3J1bGVfbGVuZ3RoID0gcnVsZS0+bWlkcnVsZV9wYXJlbnRfcmhzX2luZGV4IC0gMTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBlZmZlY3RpdmVfcnVsZSA9IHJ1bGU7CisgICAgICBlZmZlY3RpdmVfcnVsZV9sZW5ndGggPSBzeW1ib2xfbGlzdF9sZW5ndGggKHJ1bGUtPm5leHQpOworICAgIH0KKworICAvKiBHZXQgdGhlIHR5cGUgbmFtZSBpZiBleHBsaWNpdC4gKi8KKyAgY3AgPSBmZXRjaF90eXBlX25hbWUgKGNwLCAmdHlwZV9uYW1lLCBkb2xsYXJfbG9jKTsKKworICBuID0gcGFyc2VfcmVmIChjcCwgZWZmZWN0aXZlX3J1bGUsIGVmZmVjdGl2ZV9ydWxlX2xlbmd0aCwKKwkJIHJ1bGUtPm1pZHJ1bGVfcGFyZW50X3Joc19pbmRleCwgdGV4dCwgZG9sbGFyX2xvYywgJyQnKTsKKworICAvKiBFbmQgdHlwZV9uYW1lLiAqLworICBpZiAodHlwZV9uYW1lKQorICAgIGNwWy0xXSA9ICdcMCc7CisKKyAgc3dpdGNoIChuKQorICAgIHsKKyAgICBjYXNlIElOVkFMSURfUkVGOgorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIExIU19SRUY6CisgICAgICBpZiAoIXR5cGVfbmFtZSkKKwl0eXBlX25hbWUgPSBzeW1ib2xfbGlzdF9uX3R5cGVfbmFtZV9nZXQgKHJ1bGUsIGRvbGxhcl9sb2MsIDApOworCisgICAgICBpZiAoIXR5cGVfbmFtZSkKKyAgICAgICAgeworICAgICAgICAgIGlmICh1bmlvbl9zZWVuIHwgdGFnX3NlZW4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChydWxlLT5taWRydWxlX3BhcmVudF9ydWxlKQorICAgICAgICAgICAgICAgIGNvbXBsYWluX2F0IChkb2xsYXJfbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCIkJCBmb3IgdGhlIG1pZHJ1bGUgYXQgJCVkIG9mICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaGFzIG5vIGRlY2xhcmVkIHR5cGUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZS0+bWlkcnVsZV9wYXJlbnRfcmhzX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZSAoZWZmZWN0aXZlX3J1bGUtPmNvbnRlbnQuc3ltLT50YWcpKTsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXBsYWluX2F0IChkb2xsYXJfbG9jLCBfKCIkJCBvZiAlcyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZSAocnVsZS0+Y29udGVudC5zeW0tPnRhZykpOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHVudHlwZWRfdmFyX3NlZW4gPSB0cnVlOworICAgICAgICB9CisKKyAgICAgIG9ic3RhY2tfc2dyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICJdYjRfbGhzX3ZhbHVlKCIpOworICAgICAgb2JzdGFja19xdW90ZSAoJm9ic3RhY2tfZm9yX3N0cmluZywgdHlwZV9uYW1lKTsKKyAgICAgIG9ic3RhY2tfc2dyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICIpWyIpOworICAgICAgcnVsZS0+YWN0aW9uX3Byb3BzLmlzX3ZhbHVlX3VzZWQgPSB0cnVlOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgaWYgKG1heF9sZWZ0X3NlbWFudGljX2NvbnRleHQgPCAxIC0gbikKKwltYXhfbGVmdF9zZW1hbnRpY19jb250ZXh0ID0gMSAtIG47CisgICAgICBpZiAoIXR5cGVfbmFtZSAmJiAwIDwgbikKKwl0eXBlX25hbWUgPQorCSAgc3ltYm9sX2xpc3Rfbl90eXBlX25hbWVfZ2V0IChlZmZlY3RpdmVfcnVsZSwgZG9sbGFyX2xvYywgbik7CisgICAgICBpZiAoIXR5cGVfbmFtZSkKKyAgICAgICAgeworICAgICAgICAgIGlmICh1bmlvbl9zZWVuIHwgdGFnX3NlZW4pCisgICAgICAgICAgICBjb21wbGFpbl9hdCAoZG9sbGFyX2xvYywgXygiJCVzIG9mICVzIGhhcyBubyBkZWNsYXJlZCB0eXBlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgY3AsIHF1b3RlIChlZmZlY3RpdmVfcnVsZS0+Y29udGVudC5zeW0tPnRhZykpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHVudHlwZWRfdmFyX3NlZW4gPSB0cnVlOworICAgICAgICB9CisKKyAgICAgIG9ic3RhY2tfcHJpbnRmICgmb2JzdGFja19mb3Jfc3RyaW5nLAorCQkgICAgICAiXWI0X3Joc192YWx1ZSglZCwgJWQsICIsIGVmZmVjdGl2ZV9ydWxlX2xlbmd0aCwgbik7CisgICAgICBvYnN0YWNrX3F1b3RlICgmb2JzdGFja19mb3Jfc3RyaW5nLCB0eXBlX25hbWUpOworICAgICAgb2JzdGFja19zZ3JvdyAoJm9ic3RhY2tfZm9yX3N0cmluZywgIilbIik7CisgICAgICBpZiAobiA+IDApCisJc3ltYm9sX2xpc3Rfbl9nZXQgKGVmZmVjdGl2ZV9ydWxlLCBuKS0+YWN0aW9uX3Byb3BzLmlzX3ZhbHVlX3VzZWQgPQorCSAgdHJ1ZTsKKyAgICAgIGJyZWFrOworICAgIH0KK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgVEVYVCBpcyBhIGxvY2F0aW9uIHRva2VuIChpLmUuLCBhICdALi4uJykuICBPdXRwdXQgdG8gfAorfCBPQlNUQUNLX0ZPUl9TVFJJTkcgYSByZWZlcmVuY2UgdG8gdGhpcyBsb2NhdGlvbi4gICAgICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQKK2hhbmRsZV9hY3Rpb25fYXQgKHN5bWJvbF9saXN0ICpydWxlLCBjaGFyICp0ZXh0LCBsb2NhdGlvbiBhdF9sb2MpCit7CisgIGNoYXIgKmNwID0gdGV4dCArIDE7CisgIHN5bWJvbF9saXN0ICplZmZlY3RpdmVfcnVsZTsKKyAgaW50IGVmZmVjdGl2ZV9ydWxlX2xlbmd0aDsKKyAgaW50IG47CisKKyAgaWYgKHJ1bGUtPm1pZHJ1bGVfcGFyZW50X3J1bGUpCisgICAgeworICAgICAgZWZmZWN0aXZlX3J1bGUgPSBydWxlLT5taWRydWxlX3BhcmVudF9ydWxlOworICAgICAgZWZmZWN0aXZlX3J1bGVfbGVuZ3RoID0gcnVsZS0+bWlkcnVsZV9wYXJlbnRfcmhzX2luZGV4IC0gMTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBlZmZlY3RpdmVfcnVsZSA9IHJ1bGU7CisgICAgICBlZmZlY3RpdmVfcnVsZV9sZW5ndGggPSBzeW1ib2xfbGlzdF9sZW5ndGggKHJ1bGUtPm5leHQpOworICAgIH0KKworICBsb2NhdGlvbnNfZmxhZyA9IHRydWU7CisKKyAgbiA9IHBhcnNlX3JlZiAoY3AsIGVmZmVjdGl2ZV9ydWxlLCBlZmZlY3RpdmVfcnVsZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgIHJ1bGUtPm1pZHJ1bGVfcGFyZW50X3Joc19pbmRleCwgdGV4dCwgYXRfbG9jLCAnQCcpOworICBzd2l0Y2ggKG4pCisgICAgeworICAgIGNhc2UgSU5WQUxJRF9SRUY6CisgICAgICBicmVhazsKKworICAgIGNhc2UgTEhTX1JFRjoKKyAgICAgIG9ic3RhY2tfc2dyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICJdYjRfbGhzX2xvY2F0aW9uWyIpOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgb2JzdGFja19wcmludGYgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICJdYjRfcmhzX2xvY2F0aW9uKCVkLCAlZClbIiwKKwkJICAgICAgZWZmZWN0aXZlX3J1bGVfbGVuZ3RoLCBuKTsKKyAgICAgIGJyZWFrOworICAgIH0KK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IEluaXRpYWxpemUgdGhlIHNjYW5uZXIuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFRyYW5zbGF0ZSB0aGUgZG9sbGFycyBhbmQgYXRzIGluIFxhIHNlbGYsIGluIHRoZSBjb250ZXh0IFxhIHNjX2NvbnRleHQKKyAgIChTQ19SVUxFX0FDVElPTiwgU0NfU1lNQk9MX0FDVElPTiwgSU5JVElBTCkuICAqLworCitzdGF0aWMgY2hhciBjb25zdCAqCit0cmFuc2xhdGVfYWN0aW9uIChjb2RlX3Byb3BzICpzZWxmLCBpbnQgc2NfY29udGV4dCkKK3sKKyAgY2hhciAqcmVzOworICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICBpZiAoIWluaXRpYWxpemVkKQorICAgIHsKKyAgICAgIG9ic3RhY2tfaW5pdCAoJm9ic3RhY2tfZm9yX3N0cmluZyk7CisgICAgICB5eV9mbGV4X2RlYnVnID0gMDsKKyAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisKKyAgbG9jLT5zdGFydCA9IGxvYy0+ZW5kID0gc2VsZi0+bG9jYXRpb24uc3RhcnQ7CisgIHl5X3N3aXRjaF90b19idWZmZXIgKHl5X3NjYW5fc3RyaW5nIChzZWxmLT5jb2RlKSk7CisgIHJlcyA9IGNvZGVfbGV4IChzZWxmLCBzY19jb250ZXh0KTsKKyAgeXlfZGVsZXRlX2J1ZmZlciAoWVlfQ1VSUkVOVF9CVUZGRVIpOworCisgIHJldHVybiByZXM7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgcHVibGljIGludGVyZmFjZSBhcyBkb2N1bWVudGVkIGluICJzY2FuLWNvZGUuaCIuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordm9pZAorY29kZV9wcm9wc19ub25lX2luaXQgKGNvZGVfcHJvcHMgKnNlbGYpCit7CisgICpzZWxmID0gY29kZV9wcm9wc19ub25lOworfQorCitjb2RlX3Byb3BzIGNvbnN0IGNvZGVfcHJvcHNfbm9uZSA9IENPREVfUFJPUFNfTk9ORV9JTklUOworCit2b2lkCitjb2RlX3Byb3BzX3BsYWluX2luaXQgKGNvZGVfcHJvcHMgKnNlbGYsIGNoYXIgY29uc3QgKmNvZGUsCisJCSAgICAgICBsb2NhdGlvbiBjb2RlX2xvYykKK3sKKyAgc2VsZi0+a2luZCA9IENPREVfUFJPUFNfUExBSU47CisgIHNlbGYtPmNvZGUgPSBjb2RlOworICBzZWxmLT5sb2NhdGlvbiA9IGNvZGVfbG9jOworICBzZWxmLT5pc192YWx1ZV91c2VkID0gZmFsc2U7CisgIHNlbGYtPnJ1bGUgPSBOVUxMOworICBzZWxmLT5uYW1lZF9yZWYgPSBOVUxMOworfQorCit2b2lkCitjb2RlX3Byb3BzX3N5bWJvbF9hY3Rpb25faW5pdCAoY29kZV9wcm9wcyAqc2VsZiwgY2hhciBjb25zdCAqY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiBjb2RlX2xvYykKK3sKKyAgc2VsZi0+a2luZCA9IENPREVfUFJPUFNfU1lNQk9MX0FDVElPTjsKKyAgc2VsZi0+Y29kZSA9IGNvZGU7CisgIHNlbGYtPmxvY2F0aW9uID0gY29kZV9sb2M7CisgIHNlbGYtPmlzX3ZhbHVlX3VzZWQgPSBmYWxzZTsKKyAgc2VsZi0+cnVsZSA9IE5VTEw7CisgIHNlbGYtPm5hbWVkX3JlZiA9IE5VTEw7Cit9CisKK3ZvaWQKK2NvZGVfcHJvcHNfcnVsZV9hY3Rpb25faW5pdCAoY29kZV9wcm9wcyAqc2VsZiwgY2hhciBjb25zdCAqY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gY29kZV9sb2MsIHN5bWJvbF9saXN0ICpydWxlLAorCQkJICAgICBuYW1lZF9yZWYgKm5hbWUpCit7CisgIHNlbGYtPmtpbmQgPSBDT0RFX1BST1BTX1JVTEVfQUNUSU9OOworICBzZWxmLT5jb2RlID0gY29kZTsKKyAgc2VsZi0+bG9jYXRpb24gPSBjb2RlX2xvYzsKKyAgc2VsZi0+aXNfdmFsdWVfdXNlZCA9IGZhbHNlOworICBzZWxmLT5ydWxlID0gcnVsZTsKKyAgc2VsZi0+bmFtZWRfcmVmID0gbmFtZTsKK30KKwordm9pZAorY29kZV9wcm9wc190cmFuc2xhdGVfY29kZSAoY29kZV9wcm9wcyAqc2VsZikKK3sKKyAgc3dpdGNoIChzZWxmLT5raW5kKQorICAgIHsKKyAgICAgIGNhc2UgQ09ERV9QUk9QU19OT05FOgorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgQ09ERV9QUk9QU19QTEFJTjoKKyAgICAgICAgc2VsZi0+Y29kZSA9IHRyYW5zbGF0ZV9hY3Rpb24gKHNlbGYsIElOSVRJQUwpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgQ09ERV9QUk9QU19TWU1CT0xfQUNUSU9OOgorICAgICAgICBzZWxmLT5jb2RlID0gdHJhbnNsYXRlX2FjdGlvbiAoc2VsZiwgU0NfU1lNQk9MX0FDVElPTik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBDT0RFX1BST1BTX1JVTEVfQUNUSU9OOgorICAgICAgICBzZWxmLT5jb2RlID0gdHJhbnNsYXRlX2FjdGlvbiAoc2VsZiwgU0NfUlVMRV9BQ1RJT04pOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQKK2NvZGVfc2Nhbm5lcl9sYXN0X3N0cmluZ19mcmVlICh2b2lkKQoreworICBTVFJJTkdfRlJFRTsKK30KKwordm9pZAorY29kZV9zY2FubmVyX2ZyZWUgKHZvaWQpCit7CisgIG9ic3RhY2tfZnJlZSAoJm9ic3RhY2tfZm9yX3N0cmluZywgMCk7CisgIHZhcmlhbnRfdGFibGVfZnJlZSAoKTsKKworICAvKiBSZWNsYWltIEZsZXgncyBidWZmZXJzLiAgKi8KKyAgeXlsZXhfZGVzdHJveSAoKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9zY2FuLWdyYW0tYy5jIGIvc3JjL3NjYW4tZ3JhbS1jLmMKaW5kZXggOGYxMmUyYy4uNmJhY2FjNiAxMDA2NDQKLS0tIGEvc3JjL3NjYW4tZ3JhbS1jLmMKKysrIGIvc3JjL3NjYW4tZ3JhbS1jLmMKQEAgLTEsMiArMSwzIEBACiAjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSAic3lzdGVtLmgiCiAjaW5jbHVkZSAic2Nhbi1ncmFtLmMiCmRpZmYgLS1naXQgYS9zcmMvc2Nhbi1ncmFtLmMgYi9zcmMvc2Nhbi1ncmFtLmMKaW5kZXggMDRjZjUzOS4uNDFkOTlhNSAxMDA2NDQKLS0tIGEvc3JjL3NjYW4tZ3JhbS5jCisrKyBiL3NyYy9zY2FuLWdyYW0uYwpAQCAtNiwxMCArNiwzNyBAQAogCiAvKiBBIGxleGljYWwgc2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAqLwogCisvKiAlbm90LWZvci1oZWFkZXIgKi8KKworLyogJWlmLWMtb25seSAqLworLyogJWlmLW5vdC1yZWVudHJhbnQgKi8KKyNkZWZpbmUgeXlfY3JlYXRlX2J1ZmZlciBncmFtX19jcmVhdGVfYnVmZmVyCisjZGVmaW5lIHl5X2RlbGV0ZV9idWZmZXIgZ3JhbV9fZGVsZXRlX2J1ZmZlcgorI2RlZmluZSB5eV9mbGV4X2RlYnVnIGdyYW1fX2ZsZXhfZGVidWcKKyNkZWZpbmUgeXlfaW5pdF9idWZmZXIgZ3JhbV9faW5pdF9idWZmZXIKKyNkZWZpbmUgeXlfZmx1c2hfYnVmZmVyIGdyYW1fX2ZsdXNoX2J1ZmZlcgorI2RlZmluZSB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSBncmFtX19sb2FkX2J1ZmZlcl9zdGF0ZQorI2RlZmluZSB5eV9zd2l0Y2hfdG9fYnVmZmVyIGdyYW1fX3N3aXRjaF90b19idWZmZXIKKyNkZWZpbmUgeXlpbiBncmFtX2luCisjZGVmaW5lIHl5bGVuZyBncmFtX2xlbmcKKyNkZWZpbmUgeXlsZXggZ3JhbV9sZXgKKyNkZWZpbmUgeXlsaW5lbm8gZ3JhbV9saW5lbm8KKyNkZWZpbmUgeXlvdXQgZ3JhbV9vdXQKKyNkZWZpbmUgeXlyZXN0YXJ0IGdyYW1fcmVzdGFydAorI2RlZmluZSB5eXRleHQgZ3JhbV90ZXh0CisjZGVmaW5lIHl5d3JhcCBncmFtX3dyYXAKKyNkZWZpbmUgeXlhbGxvYyBncmFtX2FsbG9jCisjZGVmaW5lIHl5cmVhbGxvYyBncmFtX3JlYWxsb2MKKyNkZWZpbmUgeXlmcmVlIGdyYW1fZnJlZQorCisvKiAlZW5kaWYgKi8KKy8qICVlbmRpZiAqLworLyogJW9rLWZvci1oZWFkZXIgKi8KKwogI2RlZmluZSBGTEVYX1NDQU5ORVIKICNkZWZpbmUgWVlfRkxFWF9NQUpPUl9WRVJTSU9OIDIKICNkZWZpbmUgWVlfRkxFWF9NSU5PUl9WRVJTSU9OIDUKLSNkZWZpbmUgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OIDMxCisjZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNwogI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAKICNkZWZpbmUgRkxFWF9CRVRBCiAjZW5kaWYKQEAgLTQ3LDcgKzc0LDE1IEBACiAKIC8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5IHN5c3RlbXMgbWF5IG9yIG1heSBub3QuICovCiAKLSNpZiBkZWZpbmVkIF9fU1REQ19WRVJTSU9OX18gJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCisjaWYgZGVmaW5lZCAoX19TVERDX1ZFUlNJT05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCisKKy8qIEM5OSBzYXlzIHRvIGRlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIGJlZm9yZSBpbmNsdWRpbmcgc3RkaW50LmgsCisgKiBpZiB5b3Ugd2FudCB0aGUgbGltaXQgKG1heC9taW4pIG1hY3JvcyBmb3IgaW50IHR5cGVzLiAKKyAqLworI2lmbmRlZiBfX1NURENfTElNSVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgMQorI2VuZGlmCisKICNpbmNsdWRlIDxpbnR0eXBlcy5oPgogdHlwZWRlZiBpbnQ4X3QgZmxleF9pbnQ4X3Q7CiB0eXBlZGVmIHVpbnQ4X3QgZmxleF91aW50OF90OwpAQCAtNjIsNyArOTcsNiBAQAogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGZsZXhfdWludDhfdDsgCiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBmbGV4X3VpbnQxNl90OwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsKLSNlbmRpZiAvKiAhIEM5OSAqLwogCiAvKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMuICovCiAjaWZuZGVmIElOVDhfTUlOCkBAIC05Myw2ICsxMjcsOCBAQAogI2RlZmluZSBVSU5UMzJfTUFYICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKICNlbmRpZgogCisjZW5kaWYgLyogISBDOTkgKi8KKwogI2VuZGlmIC8qICEgRkxFWElOVF9IICovCiAKIC8qICVlbmRpZiAqLwpAQCAtMTA3LDExICsxNDMsMTIgQEAKIAogI2Vsc2UJLyogISBfX2NwbHVzcGx1cyAqLwogCi0jaWYgX19TVERDX18KKy8qIEM5OSByZXF1aXJlcyBfX1NURENfXyB0byBiZSBkZWZpbmVkIGFzIDEuICovCisjaWYgZGVmaW5lZCAoX19TVERDX18pCiAKICNkZWZpbmUgWVlfVVNFX0NPTlNUCiAKLSNlbmRpZgkvKiBfX1NURENfXyAqLworI2VuZGlmCS8qIGRlZmluZWQgKF9fU1REQ19fKSAqLwogI2VuZGlmCS8qICEgX19jcGx1c3BsdXMgKi8KIAogI2lmZGVmIFlZX1VTRV9DT05TVApAQCAtMTY5LDEzICsyMDYsMjIgQEAKICNkZWZpbmUgWVlfQlVGX1NJWkUgMTYzODQKICNlbmRpZgogCisvKiBUaGUgc3RhdGUgYnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRlIHBlciBjaGFyYWN0ZXIgaW4gdGhlIG1haW4gYnVmZmVyLgorICovCisjZGVmaW5lIFlZX1NUQVRFX0JVRl9TSVpFICAgKChZWV9CVUZfU0laRSArIDIpICogc2l6ZW9mKHl5X3N0YXRlX3R5cGUpKQorCiAjaWZuZGVmIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCiAjZGVmaW5lIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCiB0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKICNlbmRpZgogCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CisjZW5kaWYKKwogLyogJWlmLW5vdC1yZWVudHJhbnQgKi8KLWV4dGVybiBpbnQgZ3JhbV9sZW5nOworZXh0ZXJuIHl5X3NpemVfdCBncmFtX2xlbmc7CiAvKiAlZW5kaWYgKi8KIAogLyogJWlmLWMtb25seSAqLwpAQCAtMjA2LDE2ICsyNTIsNiBAQAogCiAjZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsICh5eXRleHRfcHRyKSAgKQogCi0vKiBUaGUgZm9sbG93aW5nIGlzIGJlY2F1c2Ugd2UgY2Fubm90IHBvcnRhYmx5IGdldCBvdXIgaGFuZHMgb24gc2l6ZV90Ci0gKiAod2l0aG91dCBhdXRvY29uZidzIGhlbHAsIHdoaWNoIGlzbid0IGF2YWlsYWJsZSBiZWNhdXNlIHdlIHdhbnQKLSAqIGZsZXgtZ2VuZXJhdGVkIHNjYW5uZXJzIHRvIGNvbXBpbGUgb24gdGhlaXIgb3duKS4KLSAqLwotCi0jaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCi0jZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCi10eXBlZGVmIHVuc2lnbmVkIGludCB5eV9zaXplX3Q7Ci0jZW5kaWYKLQogI2lmbmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCiAjZGVmaW5lIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUKQEAgLTIzOCw3ICsyNzQsNyBAQAogCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCiAJICogY2hhcmFjdGVycy4KIAkgKi8KLQlpbnQgeXlfbl9jaGFyczsKKwl5eV9zaXplX3QgeXlfbl9jaGFyczsKIAogCS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKIAkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bwpAQCAtMzIyLDEyICszNTgsMTIgQEAKIAogLyogeXlfaG9sZF9jaGFyIGhvbGRzIHRoZSBjaGFyYWN0ZXIgbG9zdCB3aGVuIGdyYW1fdGV4dCBpcyBmb3JtZWQuICovCiBzdGF0aWMgY2hhciB5eV9ob2xkX2NoYXI7Ci1zdGF0aWMgaW50IHl5X25fY2hhcnM7CQkvKiBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmICovCi1pbnQgZ3JhbV9sZW5nOworc3RhdGljIHl5X3NpemVfdCB5eV9uX2NoYXJzOwkJLyogbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1ZiAqLworeXlfc2l6ZV90IGdyYW1fbGVuZzsKIAogLyogUG9pbnRzIHRvIGN1cnJlbnQgY2hhcmFjdGVyIGluIGJ1ZmZlci4gKi8KIHN0YXRpYyBjaGFyICp5eV9jX2J1Zl9wID0gKGNoYXIgKikgMDsKLXN0YXRpYyBpbnQgeXlfaW5pdCA9IDE7CQkvKiB3aGV0aGVyIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSAqLworc3RhdGljIGludCB5eV9pbml0ID0gMDsJCS8qIHdoZXRoZXIgd2UgbmVlZCB0byBpbml0aWFsaXplICovCiBzdGF0aWMgaW50IHl5X3N0YXJ0ID0gMDsJLyogc3RhcnQgc3RhdGUgbnVtYmVyICovCiAKIC8qIEZsYWcgd2hpY2ggaXMgdXNlZCB0byBhbGxvdyBncmFtX3dyYXAoKSdzIHRvIGRvIGJ1ZmZlciBzd2l0Y2hlcwpAQCAtMzU0LDcgKzM5MCw3IEBACiAKIFlZX0JVRkZFUl9TVEFURSBncmFtX19zY2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5eV9zaXplX3Qgc2l6ZSAgKTsKIFlZX0JVRkZFUl9TVEFURSBncmFtX19zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgICk7Ci1ZWV9CVUZGRVJfU1RBVEUgZ3JhbV9fc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRlcyxpbnQgbGVuICApOworWVlfQlVGRkVSX1NUQVRFIGdyYW1fX3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMseXlfc2l6ZV90IGxlbiAgKTsKIAogLyogJWVuZGlmICovCiAKQEAgLTM4OSw3ICs0MjUsNyBAQAogLyogJSUgWzEuMF0gZ3JhbV90ZXh0L2dyYW1faW4vZ3JhbV9vdXQveXlfc3RhdGVfdHlwZS9ncmFtX2xpbmVubyBldGMuIGRlZidzICYgaW5pdCBnbyBoZXJlICovCiAvKiBCZWdpbiB1c2VyIHNlY3QzICovCiAKLSNkZWZpbmUgZ3JhbV93cmFwKG4pIDEKKyNkZWZpbmUgZ3JhbV93cmFwKCkgMQogI2RlZmluZSBZWV9TS0lQX1lZV1JBUAogCiAjZGVmaW5lIEZMRVhfREVCVUcKQEAgLTQzOCw1OCArNDc0LDYxIEBACiAJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKIAlmbGV4X2ludDMyX3QgeXlfbnh0OwogCX07Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0WzQ2MV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs0ODJdID0KICAgICB7ICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICA2NiwgICA2NiwgICAgMCwgICAgMCwgICA4NCwgICA4NCwKLSAgICAgICA4NCwgICA4NCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDExMCwgICA1OSwgICAgMiwgICAgMiwKLSAgICAgICA1NCwgICA1OSwgICA1MywgICAgMSwgICA1MCwgICA1OSwgICA1MSwgICA1MSwgICA0OSwgICA1OSwKLSAgICAgICA0NywgICA1NiwgICA0OCwgICA1OSwgIDEwNywgIDEwOCwgIDEwMywgIDEwNywgIDEwNCwgIDEwNSwKLSAgICAgIDEwNiwgICA2NSwgIDEwNywgICA2MywgICA2MywgICA4OCwgICA4NywgIDEwNywgICA4NiwgICA4NSwKLSAgICAgICA2MSwgICAgMiwgICAgMSwgICA2MSwgICA2MCwgICA2MSwgICA2OCwgICA2NywgIDEwNywgICA3MSwKLSAgICAgICA3MCwgICA2OSwgICA5MywgICAgMiwgICAgMSwgICA5MywgICA5MywgICA5MCwgIDEwMCwgIDEwNywKLSAgICAgICA4OSwgIDEwNywgIDEwNywgIDEwMSwgICA5NCwgICA5NiwgIDEwNywgICA1OCwgICA0NiwgICA0NiwKLSAgICAgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICA3NywgICA3NywKKyAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDExMCwgICA2NSwKKyAgICAgICAgMiwgICAgMiwgICA1OSwgICA2NSwgICA1OCwgICA2NSwgICAgMSwgICA1NCwgICA2NSwgICA1NSwKKyAgICAgICA1NSwgICA1MSwgICA2NSwgICA0OSwgICA1NCwgICA2NCwgICA2MSwgICA1MCwgICA2NSwgICA3NCwKKyAgICAgICA3NCwgIDEwNywgICA3OCwgICA3OCwgIDEwNywgICA4MCwgICA3OSwgICA3OSwgICA2OCwgICAgMiwKKyAgICAgICAgMSwgICA2OCwgICA2NywgICA2NiwgICA2OCwgIDEwOCwgICA5OSwgIDEwNywgICA5OCwgIDEwNywKKyAgICAgIDEwNywgIDEwNywgIDEwMiwgIDEwNCwgIDEwNywgICA3NiwgIDEwNywgICA5NywgICA5NiwgIDEwNywKKyAgICAgICA5NSwgICA5NCwgICA3MSwgICAgMiwgICAgMSwgICA2OSwgICA3MSwgICA3MSwgICA3MCwgICA3MSwKKyAgICAgICA3MiwgICAgMiwgICAgMSwgICA3MiwgICA3MiwgICA2NSwgICAgMCwgICA2MywgICA0OCwgICA0OCwKIAotICAgICAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDU1LCAgIDUwLCAgICA0LCAgICAzLAotICAgICAgIDUxLCAgICAwLCAgICAwLCAgICAwLCAgIDY0LCAgICAwLCAgICAwLCAgIDY2LCAgIDYyLCAgIDg0LAotICAgICAgIDg0LCAgIDg0LCAgIDg0LCAgIDgzLCAgIDgxLCAgIDcyLCAgIDgzLCAgIDc0LCAgIDc1LCAgIDc2LAotICAgICAgIDc3LCAgIDc4LCAgIDc5LCAgIDgzLCAgIDgwLCAgIDgzLCAgIDk4LCAgICAwLCAgIDk4LCAgICAwLAotICAgICAgIDk1LCAgICAwLCAgIDkxLCAgIDkyLCAgICAwLCAgIDk0LCAgIDk3LCAgICAwLCAgIDk5LCAgICAwLAotICAgICAgIDk5LCAgMTAyLCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LAotICAgICAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LAotICAgICAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LAotICAgICAgIDQ2LCAgICAzLCAgIDUyLCAgIDU3LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgICAwLCAgICAwLCAgIDcyLCAgICAwLCAgICAwLCAgIDczLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAorICAgICAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LAorICAgICAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDYwLCAgIDU0LCAgIDU0LAorICAgICAgICA0LCAgICAzLCAgIDU3LCAgIDU1LCAgIDU3LCAgICAwLCAgICAwLCAgIDUzLCAgICAwLCAgIDczLAorICAgICAgIDkyLCAgIDkwLCAgIDgxLCAgIDkyLCAgIDgzLCAgIDg0LCAgIDg1LCAgIDg2LCAgIDg3LCAgIDg4LAorICAgICAgIDkyLCAgIDg5LCAgIDkyLCAgMTA2LCAgMTAwLCAgMTAxLCAgICAwLCAgMTAzLCAgICAwLCAgMTAyLAorICAgICAgMTA1LCAgICAwLCAgIDc1LCAgICAwLCAgICAwLCAgIDc3LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAorICAgICAgIDcxLCAgIDY5LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LAorICAgICAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LAorICAgICAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LAorICAgICAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgICAzLCAgIDU3LCAgIDU2LCAgIDYyLCAgIDUyLCAgICAwLAogCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsCi0gICAgICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsCi0gICAgICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsCi0gICAgICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgIDAsICAgNzIsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsCi0gICAgICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgMjAsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsCi0gICAgICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgMzIsICAgNDYsICAgNDYsICAgNDYsCi0gICAgICAgNDYsICAgNDYsICAgNDYsICAgMzksICAgNDYsICAgNDIsICAgNDYsICAgNDYsICAgNDUsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgNDYsICAgIDcsICAgNDYsICAgNDYsICAgNDYsICAgMTIsICAgNDYsICAgNDYsCi0gICAgICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgMjMsICAgNDYsICAgNDYsICAgNDYsCisgICAgICAgODEsICAgIDAsICAgIDAsICAgODIsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgNDgsICAgNDgsICAgNDgsCisgICAgICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsCisgICAgICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsCisgICAgICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsCisgICAgICAgNDgsICAgNDgsICAgNDgsICAgIDAsICAgODEsICAgIDAsICAgIDAsICAgNDgsICAgIDcsICAgNDgsCisgICAgICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsCisgICAgICAgNDgsICAgMjIsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsCisgICAgICAgNDgsICAgNDgsICAgNDgsICAgMzQsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsCisgICAgICAgNDEsICAgNDgsICAgNDQsICAgNDgsICAgNDgsICAgNDcsICAgIDAsICAgIDAsICAgIDAsICAgNDgsCiAKLSAgICAgICA0NiwgICA0NiwgICAyOSwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICAzNiwgICA0NiwKLSAgICAgICAzOCwgICA0MCwgICA0MywgICA0NiwgICAgMCwgICAgMCwgICA4MiwgICAgNiwgICA0NiwgICAgOSwKLSAgICAgICA0NiwgICA0NiwgICAxNCwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwKLSAgICAgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICAzMCwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwKLSAgICAgICA0NiwgICA0NiwgICAgMCwgICA0NiwgICAxMCwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwKLSAgICAgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwKLSAgICAgICAzMywgICA0NiwgICAzNSwgICA0NiwgICA0NiwgICA0NCwgICAgMCwgICA0NiwgICA0NiwgICA0NiwKLSAgICAgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICAyNiwKLSAgICAgICAyNywgICA0NiwgICA0NiwgICA0NiwgICAzNywgICA0NiwgICAgMCwgICA0NiwgICA0NiwgICA0NiwKLSAgICAgICAxNSwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICAyMSwgICAyMiwgICA0NiwgICA0NiwgICA0NiwKKyAgICAgICAgOCwgICA0OCwgICA0OCwgICA0OCwgICAxMywgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwKKyAgICAgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICAyNSwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwKKyAgICAgICAzMSwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICAzOCwgICA0OCwgICA0MCwgICA0MiwKKyAgICAgICA0NSwgICA0OCwgICAgMCwgICAgMCwgICA5MSwgICAgNiwgICA0OCwgICAxMCwgICA0OCwgICA0OCwKKyAgICAgICAxNSwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwKKyAgICAgICA0OCwgICA0OCwgICA0OCwgICAzMiwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwKKyAgICAgICA0OCwgICAgMCwgICA0OCwgICAxMSwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwKKyAgICAgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwKKyAgICAgICAzNSwgICA0OCwgICAzNywgICA0OCwgICA0OCwgICA0NiwgICAgNSwgICAgMCwgICA0OCwgICA0OCwKKyAgICAgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICAyMSwgICA0OCwgICA0OCwgICA0OCwKIAotICAgICAgIDQ2LCAgIDQ2LCAgIDQ2LCAgICAwLCAgICAwLCAgIDQ2LCAgIDExLCAgIDQ2LCAgIDQ2LCAgIDQ2LAotICAgICAgIDE5LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgICA1LCAgIDQ2LAotICAgICAgIDQ2LCAgIDE2LCAgIDQ2LCAgIDQ2LCAgIDI0LCAgIDQ2LCAgIDQ2LCAgIDMxLCAgIDM0LCAgIDQxLAotICAgICAgICA4LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDEzLCAgIDQ2LCAgIDQ2LCAgIDQ2LAotICAgICAgIDQ2LCAgIDQ2LCAgIDE4LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDI1LCAgIDQ2LCAgIDQ2LCAgIDQ2LAotICAgICAgIDQ2LCAgIDQ2LCAgIDE3LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDI4LCAgICAwCisgICAgICAgNDgsICAgMjgsICAgMjksICAgNDgsICAgNDgsICAgNDgsICAgMzksICAgNDgsICAgIDAsICAgNDgsCisgICAgICAgNDgsICAgNDgsICAgMTYsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgMjMsICAgMjQsICAgNDgsCisgICAgICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgIDAsICAgIDAsICAgNDgsICAgMTIsICAgNDgsCisgICAgICAgNDgsICAgNDgsICAgMjAsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsCisgICAgICAgNDgsICAgNDgsICAgMTcsICAgNDgsICAgNDgsICAgMjYsICAgNDgsICAgNDgsICAgMzMsICAgMzYsCisgICAgICAgNDMsICAgIDksICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgMTQsICAgNDgsICAgNDgsCisgICAgICAgNDgsICAgNDgsICAgNDgsICAgMTksICAgNDgsICAgNDgsICAgNDgsICAgMjcsICAgNDgsICAgNDgsCisgICAgICAgNDgsICAgNDgsICAgNDgsICAgMTgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgMzAsCisgICAgICAgIDAKICAgICB9IDsKIAogc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQpAQCAtNDk3LDE3ICs1MzYsMTcgQEAKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwgICAgMywKICAgICAgICAgMiwgICAgMiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgNCwgICAgMSwgICAgNSwgICAgNiwgICAgNywgICAgOCwgICAgMSwgICAgOSwgICAgMSwKLSAgICAgICAgMSwgICAxMCwgICAgMSwgICAxMSwgICAxMiwgICAxMywgICAxNCwgICAxNSwgICAxNiwgICAxNiwKKyAgICAgICAgMSwgICAgNCwgICAgNSwgICAgNiwgICAgNywgICAgNSwgICAgOCwgICAgNSwgICAgOSwgICAgNSwKKyAgICAgICAgNSwgICAxMCwgICAgNSwgICAxMSwgICAxMiwgICAxMywgICAxNCwgICAxNSwgICAxNiwgICAxNiwKICAgICAgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNywgICAxNywgICAxOCwgICAxOSwgICAyMCwKLSAgICAgICAyMSwgICAyMiwgICAyMywgICAyNCwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwKLSAgICAgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywKLSAgICAgICAxMywgICAxMywgICAxMywgICAxMywgICAyNiwgICAxMywgICAxMywgICAyNywgICAxMywgICAxMywKLSAgICAgICAyOCwgICAyOSwgICAzMCwgICAgMSwgICAzMSwgICAgMSwgICAzMiwgICAzMywgICAzNCwgICAzNSwKKyAgICAgICAyMSwgICAyMiwgICAyMywgICAgNSwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwKKyAgICAgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwKKyAgICAgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNiwgICAyNSwgICAyNSwgICAyNywgICAyNSwgICAyNSwKKyAgICAgICAyOCwgICAyOSwgICAzMCwgICAgNSwgICAzMSwgICAgNSwgICAzMiwgICAzMywgICAzNCwgICAzNSwKIAotICAgICAgIDM2LCAgIDM3LCAgIDM4LCAgIDM5LCAgIDQwLCAgIDEzLCAgIDQxLCAgIDQyLCAgIDQzLCAgIDQ0LAotICAgICAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDEzLCAgIDUzLAotICAgICAgIDU0LCAgIDEzLCAgIDU1LCAgIDU2LCAgIDU3LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgIDM2LCAgIDM3LCAgIDM4LCAgIDM5LCAgIDQwLCAgIDI1LCAgIDQxLCAgIDQyLCAgIDQzLCAgIDQ0LAorICAgICAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDI1LCAgIDUzLAorICAgICAgIDU0LCAgIDI1LCAgIDU1LCAgIDU2LCAgIDU3LCAgICA1LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLApAQCAtNTI2LDMxMCArNTY1LDM1MiBAQAogCiBzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVs1OV0gPQogICAgIHsgICAwLAotICAgICAgICAxLCAgICAxLCAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICA0LCAgICA1LCAgICAxLCAgICA2LCAgICA2LCAgICA2LCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICA3LCAgICAxLCAgICAzLCAgICA2LCAgICA1LCAgICA1LCAgICAzLCAgICAxLCAgICAzLAotICAgICAgICA1LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA1LCAgICA1LCAgICA1LAotICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAotICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAxLCAgICAxLCAgICA3CisgICAgICAgIDEsICAgIDIsICAgIDMsICAgIDIsICAgIDQsICAgIDUsICAgIDQsICAgIDUsICAgIDUsICAgIDUsCisgICAgICAgIDUsICAgIDYsICAgIDcsICAgIDgsICAgIDksICAgIDksICAgIDksICAgIDQsICAgIDUsICAgIDUsCisgICAgICAgIDUsICAgIDUsICAgIDQsICAgIDksICAgMTAsICAgMTAsICAgMTAsICAgMTEsICAgIDQsICAgMTIsCisgICAgICAgMTAsICAgIDksICAgIDksICAgIDksICAgIDksICAgIDksICAgIDksICAgMTAsICAgMTAsICAgMTAsCisgICAgICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsCisgICAgICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgIDUsICAgIDUsICAgIDUsICAgMTMKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbNDgzXSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs1MDhdID0KICAgICB7ICAgMCwKLSAgICAgICAgMCwgIDczMywgICA1NiwgICA1NywgICA2NSwgICA2OCwgIDcyOCwgIDcyNywgICA5NiwgICA5OSwKLSAgICAgIDEwNiwgIDEwOSwgIDEzOCwgIDE0NCwgICA4NSwgIDEwMiwgIDE0MiwgIDE1MCwgIDE2MSwgIDE3NCwKLSAgICAgIDIwNiwgICAgMCwgIDE2MiwgIDE4MiwgIDIyMCwgIDIyNSwgIDczNiwgIDc0MCwgIDc0MCwgIDc0MCwKLSAgICAgIDc0MCwgIDI3NSwgIDc0MCwgIDc0MCwgICAgMCwgICA1MSwgIDE3NiwgICA2MSwgIDc0MCwgICAgMCwKLSAgICAgIDc0MCwgIDc0MCwgIDc0MCwgIDY5MywgIDc0MCwgIDc0MCwgIDc0MCwgIDEwMywgIDc0MCwgIDc0MCwKLSAgICAgIDc0MCwgIDc0MCwgIDE2NCwgIDc0MCwgIDcyMCwgIDc0MCwgIDc0MCwgIDE5MiwgIDc0MCwgIDc0MCwKLSAgICAgIDc0MCwgIDc0MCwgIDc0MCwgICA1OSwgIDc0MCwgIDY5MSwgIDc0MCwgIDc0MCwgIDMyNiwgIDc0MCwKLSAgICAgIDc0MCwgIDc0MCwgIDc0MCwgIDc0MCwgIDc0MCwgICA2MCwgIDY5MCwgIDc0MCwgIDIzMSwgIDEzMiwKLSAgICAgIDc0MCwgIDE4NywgICA3MSwgIDI0MywgIDc0MCwgIDc0MCwgIDY3NCwgIDc0MCwgICAgMCwgIDY5MCwKLSAgICAgICA3NSwgIDE1MSwgIDY4OSwgIDY4NiwgIDY4MywgICA3NCwgIDY5MCwgIDE3MywgIDY3NCwgIDIyMCwKKyAgICAgICAgMCwgIDg5OSwgIDg5NSwgIDg5NCwgICA1NiwgICA1NywgICA1OCwgICA2MSwgICA3MCwgICA4OSwKKyAgICAgICA5NiwgIDExNSwgIDExOSwgIDEyOCwgICA2MiwgIDEyOSwgICA3MiwgICA5MSwgICA2NiwgICA3NywKKyAgICAgIDEzOCwgIDE0MywgICA4MCwgIDE0MiwgIDE4NSwgIDg5NiwgIDE1MCwgIDE1NSwgIDkwMiwgICAgMCwKKyAgICAgIDkwNywgIDkwNywgIDkwNywgIDI0MywgIDkwNywgIDkwNywgIDkwNywgIDMwMSwgICA5OCwgIDI4OCwKKyAgICAgICA2MiwgIDkwNywgIDE0NiwgIDkwNywgIDMxNSwgIDkwNywgIDkwNywgIDkwNywgIDg1OSwgIDkwNywKKyAgICAgIDg4NiwgIDkwNywgIDkwNywgIDkwNywgIDM2OCwgIDkwNywgIDkwNywgIDkwNywgIDkwNywgIDkwNywKKyAgICAgIDkwNywgIDExNiwgIDkwNywgIDkwNywgIDg1NywgIDkwNywgIDkwNywgIDg0MSwgIDkwNywgIDI5NywKKyAgICAgICA5MSwgIDE1NSwgIDkwNywgIDkwNywgIDEyNiwgIDkwNywgIDE3NSwgIDkwNywgIDkwNywgIDMyNSwKKyAgICAgIDkwNywgIDkwNywgICAgMCwgIDkwNywgICAgMCwgICAgMCwgIDMwNywgIDkwNywgIDkwNywgIDg1NSwKKyAgICAgIDkwNywgIDkwNywgIDkwNywgIDMyMiwgIDg1NCwgICAgMCwgICAgMCwgIDkwNywgICAgMCwgIDg1NSwKIAotICAgICAgMTQ3LCAgMTU3LCAgMjIwLCAgNjgwLCAgNjg3LCAgNjkwLCAgNzQwLCAgICAwLCAgNzQwLCAgICAwLAotICAgICAgMjY5LCAgICAwLCAgNjk5LCAgNjgwLCAgNzQwLCAgMjg3LCAgMjkwLCAgNjkwLCAgNzQwLCAgNzQwLAotICAgICAgMjkzLCAgNjg5LCAgMzAxLCAgNzQwLCAgNzQwLCAgIDY3LCAgICAwLCAgNzQwLCAgNzQwLCAgNzQwLAotICAgICAgNzQwLCAgNzQwLCAgNzQwLCAgICAwLCAgNzQwLCAgICAwLCAgNzQwLCAgMzE3LCAgMzIxLCAgICAwLAotICAgICAgNzQwLCAgMzQxLCAgNzQwLCAgNzQwLCAgMzQ0LCAgNzQwLCAgNzQwLCAgMzU4LCAgNzQwLCAgMzQ5LAotICAgICAgMzUyLCAgNzQwLCAgICAwLCAgNjczLCAgMjIwLCAgNjY4LCAgNjY3LCAgNjY4LCAgMTMxLCAgNjY1LAotICAgICAgNjcyLCAgMTg4LCAgNjc3LCAgNjYyLCAgNjY2LCAgMjIzLCAgNjcyLCAgNjU3LCAgNjU4LCAgMjI2LAotICAgICAgNjU3LCAgNjU3LCAgNjY1LCAgNjY2LCAgNjY5LCAgNjUyLCAgNjU4LCAgNjUyLCAgNjU3LCAgNjQ4LAotICAgICAgNjYxLCAgICAwLCAgICAwLCAgNzQwLCAgNjUwLCAgMzY5LCAgMjUwLCAgMzc4LCAgMzgxLCAgMzg0LAotICAgICAgMzg3LCAgMjY5LCAgMzI0LCAgICAwLCAgICAwLCAgICAwLCAgNjcxLCAgMzkwLCAgMTUyLCAgMzkzLAorICAgICAgODQ5LCAgMTE0LCAgMTE3LCAgODUzLCAgODUwLCAgODQ3LCAgMzAzLCAgODU0LCAgMzAyLCAgODM4LAorICAgICAgMzA1LCAgMzA2LCAgMTMyLCAgMzA0LCAgODQ0LCAgODUxLCAgODU0LCAgOTA3LCAgNDIxLCAgICAwLAorICAgICAgOTA3LCAgICAwLCAgICAwLCAgMzQ1LCAgNDY1LCAgODYzLCAgODYyLCAgOTA3LCAgODQzLCAgOTA3LAorICAgICAgOTA3LCAgOTA3LCAgMTY1LCAgICAwLCAgOTA3LCAgOTA3LCAgOTA3LCAgOTA3LCAgOTA3LCAgOTA3LAorICAgICAgICAwLCAgOTA3LCAgICAwLCAgOTA3LCAgOTA3LCAgOTA3LCAgMzYxLCAgOTA3LCAgMzY0LCAgOTA3LAorICAgICAgOTA3LCAgMzY3LCAgOTA3LCAgMzc2LCAgMzgzLCAgODUzLCAgOTA3LCAgMzg2LCAgODUyLCAgNDAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgODM2LCAgODQ0LCAgMzU5LCAgODMwLCAgODI5LCAgODMwLAorICAgICAgMjcwLCAgODI3LCAgODM0LCAgODI5LCAgMjcyLCAgODM4LCAgODIzLCAgODI3LCAgMzgzLCAgODMzLAorICAgICAgODE4LCAgODE5LCAgMzE1LCAgODE4LCAgODE4LCAgODI2LCAgODI3LCAgODMwLCAgODEzLCAgODE5LAorICAgICAgODEzLCAgODE4LCAgODA5LCAgODIyLCAgICAwLCAgICAwLCAgICAwLCAgOTA3LCAgOTA3LCAgODExLAogCi0gICAgICAzODgsICAzOTcsICAyMDIsICA2NjAsICA2NDAsICAyMzgsICA2NDAsICA2NTMsICA2NDMsICA2NTEsCi0gICAgICA2NTAsICA2NDksICA2NzIsICA2MzMsICA2MzIsICA2NjksICA2NDgsICA2NDEsICA2NDIsICAzMTUsCi0gICAgICAyNDEsICA2MjksICA2MzAsICA2MjYsICA2NDAsICA2MjksICA2MzYsICA2MjAsICA2MzEsICA2MjcsCi0gICAgICA2MjAsICA2MjQsICA2MzAsICA2MjksICA2MTksICA2MzAsICA2MjgsICA2MjUsICA3NDAsICAgIDAsCi0gICAgICAgIDAsICAzOTYsICA2MTIsICA2MjEsICA2MDcsICA2MTMsICA2MDgsICA2MjEsICA2MDYsICA2MTksCi0gICAgICA2NDAsICA2MTYsICA2MDQsICA2MDksICAgIDAsICA2MDIsICA1OTcsICA2MTAsICAzNDQsICA2MDksCi0gICAgICA2MDQsICA1OTQsICA2MDYsICA1OTgsICA1ODksICA2MDMsICAgIDAsICA1ODgsICAzOTIsICA1OTcsCi0gICAgICA1ODYsICA1OTksICA1ODQsICAgIDAsICA1ODksICAgIDAsICA1ODgsICA1ODYsICAgIDAsICA2MjYsCi0gICAgICAgIDAsICAgIDAsICA1NzUsICAgIDAsICA1ODYsICA1OTEsICA1NzUsICAgIDAsICAzOTMsICA1NzUsCi0gICAgICA1NzgsICAzOTQsICA1OTEsICA1OTAsICA1ODksICA1ODAsICAgIDAsICA1NzMsICA1ODEsICA1NzMsCisgICAgICAzNjAsICAgIDAsICAgIDAsICAgIDAsICA0MDcsICA0MDMsICA0MjEsICAzMjEsICA0MjcsICA0MjcsCisgICAgICA0MzQsICAzNDMsICA0MzgsICA0NTAsICA0NTUsICA0NTgsICAzNzgsICA4MjIsICA4MTcsICA4MDEsCisgICAgICAyNzgsICA4MDEsICA4MTQsICA4MDQsICA4MTIsICA4MTEsICA4MTAsICA4MzMsICA3OTQsICA4MDUsCisgICAgICA3OTIsICA4MjksICA4MDgsICA4MDEsICA4MDIsICAzNjQsICA0MTEsICA3ODksICA3OTAsICA3ODYsCisgICAgICA4MDAsICA3ODksICA3OTYsICA3ODAsICA3OTEsICA3ODcsICA3ODAsICA3ODQsICA3OTAsICA3ODksCisgICAgICA3NzksICA3OTAsICA3ODgsICA3ODUsICA5MDcsICAgIDAsICAgIDAsICA3NzIsICAgIDAsICA3ODEsCisgICAgICA3NjcsICA3NzMsICA3NjgsICA3ODEsICA3NjYsICA3NzksICA4MDAsICA3NzYsICA3NjQsICA3NjksCisgICAgICA3NTcsICAgIDAsICA3NjEsICA3NTYsICA3NjksICA0MzMsICA3NjgsICA3NjMsICA3NTMsICA3NjUsCisgICAgICA3NTcsICA3NDgsICA3NjIsICAgIDAsICA3NDcsICA0MzYsICA3NTYsICA3NDUsICA3NTgsICA3NDMsCisgICAgICAgIDAsICA3NDgsICAgIDAsICA3NDcsICA3NDUsICAgIDAsICA3ODUsICAgIDAsICAgIDAsICA3MzQsCiAKLSAgICAgIDU2NywgIDU2NSwgICAgMCwgIDU2NCwgIDYwMSwgIDU3NiwgIDU2NSwgIDU2MiwgICAgMCwgIDU1OSwKLSAgICAgICAgMCwgIDM5NSwgICAgMCwgIDU1OSwgIDM5OSwgICAgMCwgIDc0MCwgICAgMCwgIDU1NywgIDU1NywKLSAgICAgIDU3MSwgIDU1MiwgIDM5NywgIDU1NSwgIDU1NywgIDU1MywgIDU1OCwgIDU1MSwgIDU1MywgIDU0OSwKLSAgICAgIDU2NCwgIDU1OSwgIDU0OSwgIDU1NywgICAgMCwgIDU0NiwgIDU0MywgIDU1OCwgIDU1MywgIDU0MywKLSAgICAgIDUzNywgIDU1MCwgIDQxNCwgIDQwNywgICAgMCwgIDUzNSwgIDU0OCwgIDUzNSwgIDU0NiwgIDUzMCwKLSAgICAgIDUzMSwgIDU2NywgIDU0NiwgIDUzMywgIDU0MCwgIDUyNCwgIDUyNSwgIDUzOSwgIDUyNCwgIDUzOSwKLSAgICAgICAgMCwgIDUyMiwgICAgMCwgIDUyNSwgIDUzNiwgICAgMCwgIDU2MiwgIDUyMCwgIDUyMCwgIDUxNiwKLSAgICAgIDUxNSwgIDUyNSwgIDUxMSwgIDUyNCwgIDUyNywgIDUxNSwgIDUwOCwgIDUxOSwgIDUxMywgICAgMCwKLSAgICAgICAgMCwgIDUxMSwgIDUwNSwgIDUwMywgICAgMCwgIDUxOCwgIDU0NSwgIDUwMSwgIDUwMCwgIDUxNCwKLSAgICAgICAgMCwgIDUwNiwgIDQ5OSwgIDQ5NiwgIDUwOSwgICAgMCwgICAgMCwgIDUwMiwgIDQ5MSwgIDUwMCwKKyAgICAgICAgMCwgIDc0NSwgIDc1MCwgIDczNCwgICAgMCwgIDQzNywgIDczNCwgIDczNywgIDQ0MywgIDc1MCwKKyAgICAgIDc0OSwgIDc0OCwgIDc0NywgIDczOCwgICAgMCwgIDczMSwgIDczOSwgIDczMSwgIDcyNSwgIDcyMywKKyAgICAgICAgMCwgIDcyMiwgIDc1OSwgIDczNCwgIDcyMywgIDcyMCwgICAgMCwgIDcxNywgICAgMCwgIDQ1MywKKyAgICAgICAgMCwgIDcxNywgIDQ1NCwgICAgMCwgIDkwNywgICAgMCwgIDcxNSwgIDcxNSwgIDcyOSwgIDcxMCwKKyAgICAgIDQ1NCwgIDcxMywgIDcxNSwgIDcxMSwgIDcxNiwgIDcxOSwgIDcwOCwgIDcxMCwgIDcwNiwgIDcyMSwKKyAgICAgIDcxNiwgIDcwNiwgIDcxNCwgICAgMCwgIDcwMywgIDcwMCwgIDcxNSwgIDcxMCwgIDcwMCwgIDY5NCwKKyAgICAgIDcwNywgIDQ4OCwgIDQ2MywgICAgMCwgIDY5MiwgIDcwNSwgIDY5MiwgIDcwMywgIDY4NywgIDY4OCwKKyAgICAgIDcyNCwgIDY5OSwgIDcwMiwgIDY4OSwgIDY5NiwgIDY4MCwgIDY4MSwgIDY5NSwgIDY4MCwgIDY5NSwKKyAgICAgICAgMCwgIDY3OCwgICAgMCwgIDY4MSwgIDY5MiwgICAgMCwgIDkwNywgIDcxNywgIDY3NiwgIDY3NiwKKyAgICAgIDY3MiwgIDY3MSwgIDY4MSwgIDY2NywgIDY4MCwgIDY4MywgICAgMCwgIDY3MSwgIDY2NCwgIDY3NSwKIAotICAgICAgNTA3LCAgNTAyLCAgNDk1LCAgNTMxLCAgMzQ4LCAgNDk5LCAgICAwLCAgNDg5LCAgNDgwLCAgNDgxLAotICAgICAgICAwLCAgNDgxLCAgNDc3LCAgNDA4LCAgNDg1LCAgNDg1LCAgNDc5LCAgNDkwLCAgNzQwLCAgNDkxLAotICAgICAgNDc1LCAgICAwLCAgNDczLCAgNDgyLCAgICAwLCAgNDc1LCAgNDgwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgICAwLCAgNDgzLCAgNDA5LCAgNDczLCAgNDY5LCAgNDY3LCAgICAwLCAgNDc4LCAgNDcwLCAgNDcyLAotICAgICAgNDUyLCAgNDU1LCAgICAwLCAgNDQ1LCAgNDMyLCAgMzk1LCAgICAwLCAgNDAyLCAgMzk5LCAgNDIyLAotICAgICAgMzg0LCAgMzg2LCAgICAwLCAgMzk1LCAgMzc0LCAgMzYxLCAgMzE4LCAgMjUxLCAgICAwLCAgNzQwLAotICAgICAgNDQwLCAgNDQ3LCAgNDU0LCAgNDYxLCAgNDY0LCAgNDcwLCAgNDc2LCAgNDgzLCAgNDg3LCAgNDkzLAotICAgICAgMjgxLCAgMjc1LCAgMjM2LCAgMjE4LCAgNTAwLCAgMjA2LCAgMTUxLCAgMTM4LCAgMTE2LCAgMTAyLAotICAgICAgIDU2LCAgNTA2CisgICAgICA2NjksICAgIDAsICAgIDAsICA2NjcsICA2NjEsICA2NTksICAgIDAsICA2NzQsICA3MDAsICA2NTcsCisgICAgICA2NTYsICA2NzAsICAgIDAsICA2NjIsICA2NTUsICA2NTIsICA2NjUsICAgIDAsICAgIDAsICA2NTgsCisgICAgICA2NDcsICA2NTYsICA2NjMsICA2NTgsICA2NTEsICA2ODYsICA0NzAsICA2NTUsICAgIDAsICA2NDUsCisgICAgICA2MjYsICA2MjMsICAgIDAsICA2MTEsICA2MDMsICA0NjUsICA1OTgsICA1OTUsICA1ODgsICA1OTksCisgICAgICA2MDAsICA1ODQsICAgIDAsICA1NzksICA1ODgsICAgIDAsICA1NzksICA1ODQsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAgIDAsICA1NTUsICA0NzUsICA1NDEsICA1MzQsICA1MzAsICAgIDAsICA1MzksICA1MzAsCisgICAgICA1MzcsICA1MTksICA1MjgsICAgIDAsICA1MzMsICA1MjYsICA1MjEsICAgIDAsICA1MjcsICA1MjQsCisgICAgICA0ODMsICA0NDQsICA0NDQsICAgIDAsICA0NTYsICA0MzgsICA0MzQsICA0NDIsICA0MjQsICAgIDAsCisgICAgICA5MDcsICA1MDYsICA1MTksICA1MzIsICA1NDUsICA1NTgsICA1NzEsICA1NzgsICA1ODgsICA2MDAsCisgICAgICA2MTMsICA2MjYsICA2MzQsICA2NDEsICA2NDgsICA2NTgsICA2NjYsICA0NTQsICA0MDYsICAzODksCisKKyAgICAgIDM4NCwgIDM3MywgIDEzOCwgIDEwMiwgICA4OCwgICA1NywgIDY3NgogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVmWzQ4M10gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZls1MDhdID0KICAgICB7ICAgMCwKLSAgICAgIDQ2MCwgICAgMSwgIDQ2MSwgIDQ2MSwgIDQ2MSwgIDQ2MSwgIDQ2MiwgIDQ2MiwgIDQ2MSwgIDQ2MSwKLSAgICAgIDQ2MSwgIDQ2MSwgIDQ2MywgIDQ2MywgIDQ2MSwgIDQ2MSwgIDQ2MSwgIDQ2MSwgIDQ2NCwgIDQ2NCwKLSAgICAgIDQ2MSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKLSAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2NSwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2NiwKLSAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKLSAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2NywgIDQ2MCwgIDQ2MCwKLSAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2OCwgIDQ2MCwKLSAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKLSAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2OSwgIDQ2OSwKLSAgICAgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwKKyAgICAgIDQ4MSwgICAgMSwgIDQ4MiwgIDQ4MiwgIDQ4MywgIDQ4MywgIDQ4MywgIDQ4MywgIDQ4NCwgIDQ4NCwKKyAgICAgIDQ4MywgIDQ4MywgIDQ4MywgIDQ4MywgIDQ4MywgIDQ4MywgIDQ4MywgIDQ4MywgIDQ4MywgIDQ4MywKKyAgICAgIDQ4MywgIDQ4MywgIDQ4MywgIDQ4MywgIDQ4MSwgICAyNSwgIDQ4NSwgIDQ4NSwgIDQ4MSwgIDQ4NiwKKyAgICAgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4NywgIDQ4MSwgIDQ4OCwKKyAgICAgIDQ4OCwgIDQ4MSwgIDQ4OSwgIDQ4MSwgIDQ4NywgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4NiwgIDQ4MSwKKyAgICAgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ5MCwgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4MSwKKyAgICAgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4MSwKKyAgICAgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ5MSwKKyAgICAgIDQ4MSwgIDQ4MSwgIDQ5MiwgIDQ4MSwgIDQ5MiwgIDQ5MywgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ5MiwKKyAgICAgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4NiwgIDQ5NCwgIDQ4MSwgIDQ5NSwgIDQ5NSwKIAotICAgICAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDYwLCAgNDY1LCAgNDYwLCAgNDcwLAotICAgICAgNDYwLCAgNDcxLCAgNDY2LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAotICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDcyLCAgNDYwLCAgNDYwLCAgNDYwLAotICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDczLCAgNDYwLCAgNDc0LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDc1LAotICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAotICAgICAgNDYwLCAgNDYwLCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LAotICAgICAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LAotICAgICAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LAotICAgICAgNDY5LCAgNDcwLCAgNDcxLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAotICAgICAgNDYwLCAgNDY3LCAgNDYwLCAgNDc2LCAgNDc3LCAgNDc0LCAgNDc1LCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LAorICAgICAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDgxLCAgNDg3LCAgIDQ1LAorICAgICAgNDgxLCAgNDk2LCAgNDk3LCAgNDg4LCAgNDk3LCAgNDg5LCAgNDg5LCAgNDgxLCAgNDgxLCAgNDgxLAorICAgICAgNDgxLCAgNDgxLCAgNDgxLCAgNDk4LCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLAorICAgICAgNDk5LCAgNDgxLCAgNTAwLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLAorICAgICAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLAorICAgICAgNDkyLCAgNDkzLCAgNDk0LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LAorICAgICAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LAorICAgICAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LAorICAgICAgNDk1LCAgNDk1LCAgNDk1LCAgNDk1LCAgNDk2LCAgNDk3LCAgMTI1LCAgNDgxLCAgNDgxLCAgNDgxLAogCi0gICAgICA0NjAsICA0NjAsICA0NjAsICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksCi0gICAgICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksCi0gICAgICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksCi0gICAgICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjAsICA0NjAsICA0NzgsCi0gICAgICA0NzksICA0NjAsICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksCi0gICAgICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksCi0gICAgICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksCi0gICAgICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjAsCi0gICAgICA0ODAsICA0ODEsICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksCi0gICAgICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksICA0NjksCisgICAgICA0ODEsICA1MDEsICA1MDIsICA1MDAsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsCisgICAgICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0OTEsICA0OTUsICA0OTUsICA0OTUsCisgICAgICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsCisgICAgICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsCisgICAgICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsCisgICAgICA0OTUsICA0OTUsICA0OTUsICA0ODEsICA0ODEsICA1MDMsICA1MDQsICA0OTUsICA0OTUsICA0OTUsCisgICAgICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsCisgICAgICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsCisgICAgICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsCisgICAgICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0ODEsICA1MDUsICA1MDYsICA0OTUsCiAKLSAgICAgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwKLSAgICAgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2MCwgIDQ3MywgIDQ2MCwgIDQ2OSwgIDQ2OSwgIDQ2OSwKLSAgICAgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwKLSAgICAgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwKLSAgICAgIDQ2OSwgIDQ2OSwgIDQ2MCwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwKLSAgICAgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwKLSAgICAgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2MCwgIDQ2OSwgIDQ2OSwgIDQ2OSwKLSAgICAgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwKLSAgICAgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ4MiwgIDQ2OSwgIDQ2OSwgIDQ2OSwKLSAgICAgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwgIDQ2OSwKKyAgICAgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwKKyAgICAgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwKKyAgICAgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwKKyAgICAgIDQ5NSwgIDQ5NSwgIDQ4MSwgIDQ5OSwgIDQ4MSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwKKyAgICAgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwKKyAgICAgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwKKyAgICAgIDQ5NSwgIDQ4MSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwKKyAgICAgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwKKyAgICAgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ4MSwgIDQ4MSwgIDQ5NSwgIDQ5NSwKKyAgICAgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwgIDQ5NSwKIAotICAgICAgNDY5LCAgNDY5LCAgNDY5LCAgNDgyLCAgNDgyLCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LAotICAgICAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDYwLCAgNDY5LAotICAgICAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LAotICAgICAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LAotICAgICAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LAotICAgICAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgICAwLAotICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAotICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAotICAgICAgNDYwLCAgNDYwCisgICAgICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA1MDcsICA0OTUsCisgICAgICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsCisgICAgICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA1MDcsICA1MDcsICA0OTUsICA0OTUsICA0OTUsCisgICAgICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsCisgICAgICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsCisgICAgICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsCisgICAgICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsCisgICAgICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsICA0OTUsCisgICAgICAgIDAsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsCisgICAgICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsCisKKyAgICAgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4MSwgIDQ4MQogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0Wzc5OV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFs5NjZdID0KICAgICB7ICAgMCwKLSAgICAgICAyOCwgICAyOSwgICAzMCwgICAyOSwgICAzMSwgICAyOCwgICAyOCwgICAzMiwgICAzMywgICAyOCwKLSAgICAgICAzNCwgICAyOCwgICAzNSwgICAzNiwgICAzNywgICAzOCwgICAzOCwgICAyOCwgICAzOSwgICA0MCwKLSAgICAgICA0MSwgICAyOCwgICAyOCwgICAyOCwgICAzNSwgICAzNSwgICAzNSwgICAyOCwgICAyOCwgICAyOCwKLSAgICAgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAzNSwKLSAgICAgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAzNSwKLSAgICAgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICA0MiwgICA0MywgICAyOCwgICAyOCwgICA0NiwgICA0NiwKLSAgICAgIDEwOSwgIDMxNywgICA0NywgICA0NywgIDExMCwgICA0OCwgICA0OCwgICA1MiwgIDEwOSwgIDEwOSwKLSAgICAgICA1MiwgICA0NywgIDExMCwgIDExMCwgICA0NywgIDExMSwgIDExMSwgIDExMSwgIDE0NiwgICA0OSwKLSAgICAgICA0OSwgIDE5MywgIDE5MywgICA1MCwgICA1MCwgICA1MSwgICA1MSwgICA2NywgICA0OSwgICA2OCwKLSAgICAgIDE0NywgICA0OSwgICA1MCwgICA1MywgICA1MSwgICA1MCwgICA1MywgICA1MSwgICA1NiwgIDE0OCwKKyAgICAgICAzMCwgICAzMSwgICAzMiwgICAzMSwgICAzMCwgICAzMywgICAzMCwgICAzNCwgICAzNSwgICAzNiwKKyAgICAgICAzNywgICAzMCwgICAzOCwgICAzOSwgICA0MCwgICA0MSwgICA0MSwgICAzMCwgICA0MiwgICA0MywKKyAgICAgICA0NCwgICAzNiwgICAzMCwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NiwgICAzMCwgICAzMCwKKyAgICAgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwKKyAgICAgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwKKyAgICAgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NywgICA0OCwgICAzNiwgICAzMCwgICA1MywgICA1MywKKyAgICAgICA1NywgICA1NCwgICA1NCwgICA1NywgICA2NiwgIDMzNSwgICA1OCwgICA2NywgICA3NiwgICA1OCwKKyAgICAgICA2OSwgICA2MCwgICAzMiwgICA2MCwgICA2NiwgICA3MCwgIDEyNCwgIDEyNCwgIDEyNCwgICA3NiwKKyAgICAgICA2MSwgICA3NSwgICA4MSwgICA2MiwgICA1NSwgICA1NSwgICA1NSwgICA2MywgICA4MiwgICA1NSwKKyAgICAgICA2MCwgICAzMiwgICA2MCwgICA2NiwgICA3NywgICA2NSwgIDMzNCwgICA2NCwgICA2NiwgICA2MSwKIAotICAgICAgIDU3LCAgIDU2LCAgIDQ3LCAgIDU3LCAgIDY3LCAgIDQ3LCAgIDY4LCAgMzE2LCAgIDU5LCAgMTYyLAotICAgICAgMTU1LCAgIDU5LCAgIDQ3LCAgIDY5LCAgIDYwLCAgIDQ3LCAgMTE1LCAgIDYwLCAgMTYzLCAgIDQ5LAotICAgICAgMTU2LCAgMjgyLCAgIDQ5LCAgIDUwLCAgIDU4LCAgIDUxLCAgIDUwLCAgIDU4LCAgIDUxLCAgIDQ5LAotICAgICAgIDY5LCAgMTE2LCAgIDQ5LCAgIDUwLCAgIDU4LCAgIDUxLCAgIDUwLCAgIDU4LCAgIDUxLCAgIDYyLAotICAgICAgIDMwLCAgIDYyLCAgIDcwLCAgMjgxLCAgIDcxLCAgIDYyLCAgIDMwLCAgIDYyLCAgIDYzLCAgIDY2LAotICAgICAgIDcyLCAgIDY0LCAgIDcxLCAgMTQxLCAgIDYzLCAgIDY1LCAgMjQxLCAgIDY0LCAgIDcyLCAgIDcwLAotICAgICAgMTQyLCAgIDY1LCAgIDc0LCAgIDMwLCAgIDc0LCAgMTE3LCAgMTE4LCAgMTE3LCAgIDQ3LCAgIDg3LAotICAgICAgIDY5LCAgIDc1LCAgMjExLCAgMTQxLCAgIDc2LCAgIDc0LCAgIDMwLCAgIDc0LCAgIDY5LCAgIDc3LAotICAgICAgMTQyLCAgIDQ1LCAgMTcyLCAgMjEyLCAgIDc1LCAgIDQ5LCAgMTczLCAgIDc2LCAgIDQ3LCAgIDg3LAotICAgICAgMTExLCAgMTExLCAgMTExLCAgMTIxLCAgMTIyLCAgMTIxLCAgMTQzLCAgMTc0LCAgMTU3LCAgIDcwLAorICAgICAgIDc1LCAgIDY3LCAgIDYyLCAgIDY4LCAgIDY5LCAgIDc3LCAgIDYzLCAgMTIxLCAgIDgwLCAgIDcwLAorICAgICAgMjk5LCAgMTIyLCAgMTQ4LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDY0LCAgIDY2LCAgIDU2LCAgMTQ5LAorICAgICAgIDY3LCAgIDY2LCAgIDY4LCAgIDY5LCAgIDY3LCAgMTIxLCAgIDcxLCAgIDY5LCAgIDcwLCAgMTIyLAorICAgICAgIDY2LCAgIDY2LCAgIDcwLCAgIDY3LCAgIDY3LCAgIDcxLCAgIDY5LCAgIDY5LCAgIDcyLCAgMTUzLAorICAgICAgIDc4LCAgIDcwLCAgIDcwLCAgIDc5LCAgIDgxLCAgIDc4LCAgMjk4LCAgIDcyLCAgIDc5LCAgMTY3LAorICAgICAgIDgyLCAgIDkyLCAgIDMyLCAgIDkyLCAgMTU0LCAgMTI3LCAgIDkyLCAgIDMyLCAgIDkyLCAgMTY4LAorICAgICAgIDkzLCAgIDk1LCAgMTUwLCAgIDk0LCAgMTY5LCAgIDkzLCAgIDgwLCAgMTI4LCAgIDk0LCAgMTcwLAorICAgICAgIDgwLCAgIDgwLCAgMTg3LCAgIDczLCAgMTUxLCAgIDc0LCAgMTU1LCAgMTU2LCAgMTU1LCAgMjAxLAorICAgICAgMjAxLCAgMTg4LCAgIDczLCAgMTUyLCAgIDc0LCAgIDgzLCAgIDg0LCAgIDMyLCAgIDg0LCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDg1LCAgIDgzLCAgIDg2LCAgIDg3LCAgIDg4LAogCi0gICAgICAxNDQsICAgNDUsICAxMTIsICAxNTgsICAxNjUsICAgNDksICAxNzUsICAgNzAsICAgNDYsICAxNDYsCi0gICAgICAgNzgsICAyNDAsICAgNzksICAgODAsICAgODEsICAxNDUsICAgNDUsICAxNjYsICAgNDUsICAgODIsCi0gICAgICAxMjMsICAxNDcsICAxNjcsICAxOTYsICAyMTUsICAgODMsICAgNDcsICAgNDUsICAxMTIsICAgODQsCi0gICAgICAxNDgsICAgNDcsICAgNDUsICAgNTAsICAyMjAsICAgNTEsICAgNDUsICAxMzcsICAgNDUsICAgNDUsCi0gICAgICAyMTYsICAxOTUsICAxMzgsICAgNDksICAgNDUsICAxMzksICAxMzksICAxMzksICAgNDksICAxNDksCi0gICAgICAxNDAsICAxNjksICAyMDUsICAyMjAsICAxNTAsICAxNzYsICAyMDYsICAxNTEsICAxNTEsICAxNTEsCi0gICAgICAgODUsICAyMjUsICAgODYsICAxMTUsICAxNzcsICAyMjYsICAyMjEsICAxNzAsICAyMDcsICAyNDUsCi0gICAgICAxNzEsICA0NjAsICAyNjIsICAxNzgsICAgNDUsICAyNjMsICAgNDUsICAyNDYsICAxMTYsICAgNDUsCi0gICAgICAxOTQsICAgNDUsICAgODgsICAxMTEsICAxMTEsICAxMTEsICAxODMsICAgODksICAxODYsICAxODcsCi0gICAgICAxODYsICAxMTcsICAxMTgsICAxMTcsICAxODksICAxMjIsICAxODksICAxMjMsICA0NTksICAgODksCisgICAgICAgODgsICAgODgsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODYsICAgODYsCisgICAgICAgODYsICAgODYsICAgODMsICAgODMsICAgODksICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsCisgICAgICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsCisgICAgICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsCisgICAgICAgOTgsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTksICAgOTcsICAgOTcsICAgOTcsICAgOTcsCisgICAgICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTksICAgOTksICAgOTksICAgOTksCisgICAgICAgOTcsICAgOTcsICAgOTcsICAgOTksICAgOTksICAxMDAsICAxMDEsICAxMDIsICAxMDMsICAxMDQsCisgICAgICAxMDUsICAgOTksICAxMDYsICAgOTksICAxMDcsICAxMDgsICAxMDksICAxMTAsICAxMTEsICAgOTksCisgICAgICAxMTIsICAxMTMsICAxMTQsICAxMTUsICAxMTYsICAgOTksICAxMTcsICAxMTgsICAgOTcsICAgOTcsCiAKLSAgICAgICA4OSwgICA4OSwgIDE5MSwgIDE5MiwgIDE5MSwgICA4OSwgICA4OSwgICA5MCwgICA4OSwgICA5MSwKLSAgICAgICA5MiwgICA5MywgICA5NCwgICA4OSwgICA5NSwgICA4OSwgICA5NiwgICA5NywgICA5OCwgICA5OSwKLSAgICAgIDEwMCwgICA4OSwgIDEwMSwgIDEwMiwgIDEwMywgIDEwNCwgIDEwNSwgICA4OSwgIDEwNiwgIDEwNywKLSAgICAgIDEyNSwgIDEzOSwgIDEzOSwgIDEzOSwgIDEyNSwgIDEzOSwgIDEzOSwgIDEzOSwgIDIzOSwgIDIzOSwKLSAgICAgIDEyNiwgIDEyNiwgIDE5OCwgIDE5OSwgIDE5OCwgIDIwMCwgIDIwMSwgIDIwMCwgIDEyNSwgIDI2MCwKLSAgICAgIDQxOSwgIDEyNywgIDQwNSwgIDQ1OCwgIDEyNSwgIDI5OCwgIDI2MSwgIDEyOCwgIDEyOSwgIDIwMiwKLSAgICAgIDIwMywgIDIwMiwgIDEzMCwgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MSwgIDEzMSwKLSAgICAgIDE4NiwgIDE4NywgIDE4NiwgIDEzMiwgIDI5OCwgIDEzMywgIDEzNCwgIDEzNSwgIDEzNiwgIDExNywKLSAgICAgIDExOCwgIDExNywgIDE4OSwgIDEyMiwgIDE4OSwgIDE4OSwgIDEyMiwgIDE4OSwgIDE5MSwgIDE5MiwKLSAgICAgIDE5MSwgIDE5OCwgIDE5OSwgIDE5OCwgIDIwMCwgIDIwMSwgIDIwMCwgIDE0MywgIDIwMiwgIDIwMywKKyAgICAgICA5NywgICA5NiwgIDEyNCwgIDEyNCwgIDEyNCwgICA5NiwgIDE0NSwgICA5NiwgIDIzMSwgIDI2MSwKKyAgICAgIDE0NiwgIDIyNiwgIDExOSwgIDExOSwgIDEyNSwgIDQ4MSwgIDEyMSwgIDI2MiwgICA5NiwgIDQ4MSwKKyAgICAgIDEyMiwgIDQ4MSwgIDIyNywgICA5NiwgIDIzMiwgIDE0NywgIDE1OCwgIDE1OSwgIDE1OCwgICA5NiwKKyAgICAgICA5NiwgIDEyMSwgIDQ4MSwgIDE3OCwgIDE3NCwgIDEyMiwgIDE4MiwgIDQ4MSwgIDE3NSwgIDE4OSwKKyAgICAgIDEyNSwgIDE4NSwgIDE0OCwgIDQ4MSwgIDQ4MSwgIDE4NiwgIDE3OSwgIDE3NiwgIDE5MCwgIDE0OSwKKyAgICAgIDI0MSwgIDE4MCwgIDE4MywgIDE2MCwgIDI0MiwgIDE4NCwgIDE1MywgIDE5MSwgICA5NiwgIDEyNCwKKyAgICAgIDEyNCwgIDEyNCwgIDIwNSwgIDIwNiwgIDIwNSwgIDIwNywgIDIwOCwgIDIwNywgIDIwOSwgIDIxMCwKKyAgICAgIDIwOSwgIDE1NCwgIDQ4MSwgIDEzMiwgIDI1NSwgIDI1NSwgIDEzMiwgIDIxMSwgIDIxMiwgIDIxMSwKKyAgICAgIDQ4MSwgIDI1NywgIDEzMywgIDEzMywgIDE1NSwgIDE1NiwgIDE1NSwgIDIxNCwgIDE1OSwgIDIxNCwKKyAgICAgIDEzMiwgIDIyMCwgIDI1NiwgIDEzNCwgIDIzNiwgIDIyMSwgIDEzMiwgIDIwNCwgIDI3NywgIDEzNSwKIAotICAgICAgMjAyLCAgMTQ0LCAgMTM3LCAgMzA3LCAgMzIyLCAgMzI1LCAgMzQxLCAgMTM4LCAgMzQ4LCAgNDU3LAotICAgICAgMTM5LCAgMTM5LCAgMTM5LCAgMzQzLCAgMzQzLCAgMzQzLCAgMTQ1LCAgMzY3LCAgMzY4LCAgNDI2LAotICAgICAgNDM4LCAgNDU2LCAgMzA3LCAgMzIyLCAgMzI1LCAgMzQxLCAgNDU1LCAgMzQ4LCAgMzQzLCAgMzQzLAotICAgICAgMzQzLCAgNDU0LCAgNDUzLCAgNDUyLCAgNDUxLCAgNDUwLCAgNDQ5LCAgMzY4LCAgNDI2LCAgNDM4LAotICAgICAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDU0LCAgIDU0LCAgIDU0LAotICAgICAgIDU0LCAgIDU0LCAgIDU0LCAgIDU0LCAgIDYxLCAgIDYxLCAgIDYxLCAgIDYxLCAgIDYxLCAgIDYxLAotICAgICAgIDYxLCAgIDczLCAgIDczLCAgIDczLCAgIDczLCAgIDczLCAgIDczLCAgIDczLCAgMTA4LCAgMTA4LAotICAgICAgMTEzLCAgNDQ4LCAgMTEzLCAgMTEzLCAgMTEzLCAgMTEzLCAgMTIwLCAgMTIwLCAgNDQ3LCAgMTIwLAotICAgICAgMTIwLCAgMTIwLCAgMTIwLCAgMTI0LCAgMTI0LCAgMTI0LCAgMTI0LCAgMTI0LCAgMTI0LCAgMTI0LAotICAgICAgMTUzLCAgMTUzLCAgMTUzLCAgMTgyLCAgNDQ2LCAgMTgyLCAgMTgyLCAgMTgyLCAgMTgyLCAgMTgyLAorICAgICAgMTM2LCAgMjE2LCAgMjE3LCAgMjE2LCAgMTM3LCAgMjc4LCAgMTYwLCAgMjIyLCAgMjA1LCAgMjA2LAorICAgICAgMjA1LCAgMTM4LCAgMTQ1LCAgMjM2LCAgMjAzLCAgMTM5LCAgMTQ2LCAgMTQwLCAgMTQxLCAgMTQyLAorICAgICAgMTQzLCAgIDk2LCAgMjA3LCAgMjA4LCAgMjA3LCAgIDk2LCAgMjM3LCAgIDk2LCAgMjA5LCAgMjEwLAorICAgICAgMjA5LCAgMTQ3LCAgMTE5LCAgMTE5LCAgMTUwLCAgMjExLCAgMjEyLCAgMjExLCAgIDk2LCAgMTU1LAorICAgICAgMTU2LCAgMTU1LCAgMjc5LCAgIDk2LCAgMzE2LCAgMjgwLCAgMTUxLCAgMzI1LCAgMzQwLCAgIDk2LAorICAgICAgIDk2LCAgMjE0LCAgMTU5LCAgMjE0LCAgMzQzLCAgMTUyLCAgMjE0LCAgMTU5LCAgMjE0LCAgMjE2LAorICAgICAgMjE3LCAgMjE2LCAgMjAyLCAgMzE2LCAgMzYwLCAgMzY3LCAgMzI1LCAgMzQwLCAgMzYyLCAgMzYyLAorICAgICAgMzYyLCAgNDgwLCAgMzg3LCAgMzQzLCAgMzg5LCAgNDI3LCAgNDQ3LCAgNDc5LCAgIDk2LCAgMTk3LAorICAgICAgMTk3LCAgMTk3LCAgNDc4LCAgMzYwLCAgMzY3LCAgNDc3LCAgNDU5LCAgNDc2LCAgMTk3LCAgNDc1LAorICAgICAgMzg3LCAgMzg4LCAgNDc0LCAgMzg5LCAgNDczLCAgNDQ3LCAgMTk3LCAgMTk3LCAgMTk3LCAgMTk3LAogCi0gICAgICAxOTcsICA0NDUsICAxOTcsICAxOTcsICAxOTcsICAxOTcsICA0MDQsICA0NDQsICA0MDQsICA0MDQsCi0gICAgICA0MDQsICA0MDQsICA0MDQsICA0NDMsICA0NDIsICA0NDEsICA0NDAsICA0MzksICA0MzcsICA0MzYsCi0gICAgICA0MzUsICA0MzQsICA0MzMsICA0MzIsICA0MzEsICA0MzAsICA0MjksICA0MjgsICA0MjcsICA0MjUsCi0gICAgICA0MjQsICA0MjMsICA0MjIsICA0MjEsICA0MjAsICA0MDUsICA0MTgsICA0MTcsICA0MTYsICA0MTUsCi0gICAgICA0MTQsICA0MTMsICA0MTIsICA0MTEsICA0MTAsICA0MDksICA0MDgsICA0MDcsICA0MDYsICA0MDUsCi0gICAgICA0MDMsICA0MDIsICA0MDEsICA0MDAsICAzOTksICAzOTgsICAzOTcsICAzOTYsICAzOTUsICAzOTQsCi0gICAgICAzOTMsICAzOTIsICAzOTEsICAzOTAsICAzODksICAzODgsICAzODcsICAzODYsICAzODUsICAzODQsCi0gICAgICAzODMsICAzODIsICAzODEsICAzODAsICAzNzksICAzNzgsICAzNzcsICAzNzYsICAzNzUsICAzNzQsCi0gICAgICAzNzMsICAzNzIsICAzNzEsICAzNzAsICAzNjksICAzNjYsICAzNjUsICAzNjQsICAzNjMsICAzNjIsCi0gICAgICAzNjEsICAzNjAsICAzNTksICAzNTgsICAzNTcsICAzNTYsICAzNTUsICAzNTQsICAzNTMsICAzNTIsCisgICAgICAxOTcsICAxOTcsICAzNjIsICAzNjIsICAzNjIsICA0NTksICAgNTAsICAgNTAsICAgNTAsICAgNTAsCisgICAgICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTIsCisgICAgICAgNTIsICAgNTIsICAgNTIsICAgNTIsICAgNTIsICAgNTIsICAgNTIsICAgNTIsICAgNTIsICAgNTIsCisgICAgICAgNTIsICAgNTIsICAgNTksICAgNTksICAgNTksICAgNTksICAgNTksICAgNTksICAgNTksICAgNTksCisgICAgICAgNTksICAgNTksICAgNTksICAgNTksICAgNTksICAgOTEsICAgOTEsICAgOTEsICAgOTEsICAgOTEsCisgICAgICAgOTEsICAgOTEsICAgOTEsICAgOTEsICAgOTEsICAgOTEsICAgOTEsICAgOTEsICAgOTYsICA0NzIsCisgICAgICA0NzEsICAgOTYsICA0NzAsICAgOTYsICAgOTYsICA0NjksICA0NjgsICA0NjcsICA0NjYsICAgOTYsCisgICAgICAgOTYsICAxMjAsICA0NjUsICA0NjQsICAxMjAsICA0NjMsICAxMjAsICAxMjAsICA0NjIsICAxMjAsCisgICAgICAxMjAsICA0NjEsICAxMjAsICAxMjAsICAxMjMsICA0NjAsICAxMjMsICAxMjMsICAxMjYsICAxMjYsCisgICAgICA0NTgsICAxMjYsICAxMjYsICAxMjYsICAxMjYsICAxMjYsICAxMjYsICAxMjYsICAxMjYsICAxMjYsCiAKLSAgICAgIDM1MSwgIDM1MCwgIDM0OSwgIDM0NywgIDM0NiwgIDM0NSwgIDM0NCwgIDM0MiwgIDM0MCwgIDMzOSwKLSAgICAgIDMzOCwgIDMzNywgIDMzNiwgIDMzNSwgIDMzNCwgIDMzMywgIDMzMiwgIDMzMSwgIDMzMCwgIDMyOSwKLSAgICAgIDMyOCwgIDMyNywgIDMyNiwgIDMyNCwgIDMyMywgIDMyMSwgIDMyMCwgIDMxOSwgIDMxOCwgIDMxNSwKLSAgICAgIDMxNCwgIDMxMywgIDMxMiwgIDMxMSwgIDMxMCwgIDMwOSwgIDMwOCwgIDMwNiwgIDMwNSwgIDMwNCwKLSAgICAgIDMwMywgIDMwMiwgIDMwMSwgIDMwMCwgIDI5OSwgIDI5NywgIDI5NiwgIDI5NSwgIDI5NCwgIDI5MywKLSAgICAgIDI5MiwgIDI5MSwgIDI5MCwgIDI4OSwgIDI4OCwgIDI4NywgIDI4NiwgIDI4NSwgIDI4NCwgIDI4MywKLSAgICAgIDI4MCwgIDI3OSwgIDI3OCwgIDI3NywgIDI3NiwgIDI3NSwgIDI3NCwgIDI3MywgIDI3MiwgIDI3MSwKLSAgICAgIDI3MCwgIDI2OSwgIDI2OCwgIDI2NywgIDI2NiwgIDI2NSwgIDI2NCwgIDI1OSwgIDI1OCwgIDI1NywKLSAgICAgIDI1NiwgIDI1NSwgIDI1NCwgIDI1MywgIDI1MiwgIDI1MSwgIDI1MCwgIDI0OSwgIDI0OCwgIDI0NywKLSAgICAgIDI0NCwgIDI0MywgIDI0MiwgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMywgIDIzMiwKKyAgICAgIDEzMSwgIDEzMSwgIDEzMSwgIDEzMSwgIDEzMSwgIDEzMSwgIDEzMSwgIDEzMSwgIDEzMSwgIDEzMSwKKyAgICAgIDEzMSwgIDEzMSwgIDEzMSwgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDE1NywgIDE1NywgIDQ1NywgIDQ1NiwgIDE1NywgIDE2MSwgIDQ1NSwgIDQ1NCwgIDE2MSwKKyAgICAgIDE2MSwgIDE2MSwgIDQ1MywgIDQ1MiwgIDQ1MSwgIDQ1MCwgIDE2MSwgIDQ0OSwgIDE2MSwgIDE2MiwKKyAgICAgIDE2MiwgIDQ0OCwgIDE2MiwgIDE2MiwgIDE2MywgIDE2MywgIDE2MywgIDE2MywgIDE2MywgIDE2MywKKyAgICAgIDE2MywgIDE2MywgIDE2MywgIDE2NCwgIDE2NCwgIDQ0NiwgIDE2NCwgIDE2NCwgIDE5NSwgIDE5NSwKKyAgICAgIDQ0NSwgIDE5NSwgIDE5NSwgIDE5NSwgIDE5NSwgIDE5NSwgIDE5NSwgIDE5NSwgIDE5NSwgIDE5NSwKKyAgICAgIDE5NSwgIDE5NiwgIDE5NiwgIDQ0NCwgIDE5NiwgIDE5NiwgIDQyNiwgIDQyNiwgIDQ0MywgIDQyNiwKKyAgICAgIDQyNiwgIDQyNiwgIDQyNiwgIDQyNiwgIDQyNiwgIDQyNiwgIDQyNiwgIDQyNiwgIDQyNiwgIDQ0MiwKKyAgICAgIDQ0MSwgIDQyNywgIDQ0MCwgIDQzOSwgIDQzOCwgIDQzNywgIDQzNiwgIDQzNSwgIDQzNCwgIDQzMywKIAotICAgICAgMjMxLCAgMjMwLCAgMjI5LCAgMjI4LCAgMjI3LCAgMjI0LCAgMjIzLCAgMjIyLCAgMjE5LCAgMjE4LAotICAgICAgMjE3LCAgMjE0LCAgMjEzLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA0LCAgMTkwLCAgMTg4LCAgMTg1LAotICAgICAgMTg0LCAgMTgxLCAgMTgwLCAgMTc5LCAgMTY4LCAgMTY0LCAgMTYxLCAgMTYwLCAgMTU5LCAgMTU0LAotICAgICAgMTUyLCAgMTE0LCAgMTE0LCAgMTE5LCAgMTE0LCAgNDYwLCAgIDU1LCAgIDU1LCAgIDQ0LCAgIDI3LAotICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAotICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAotICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAotICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAotICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAotICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwCisgICAgICA0MzIsICA0MzEsICA0MzAsICA0MjksICA0MjgsICA0MjcsICA0MjUsICA0MjQsICA0MjMsICA0MjIsCisgICAgICA0MjEsICA0MjAsICA0MTksICA0MTgsICA0MTcsICA0MTYsICA0MTUsICA0MTQsICA0MTMsICA0MTIsCisgICAgICA0MTEsICA0MTAsICA0MDksICA0MDgsICA0MDcsICA0MDYsICA0MDUsICA0MDQsICA0MDMsICA0MDIsCisgICAgICA0MDEsICA0MDAsICAzOTksICAzOTgsICAzOTcsICAzOTYsICAzOTUsICAzOTQsICAzOTMsICAzOTIsCisgICAgICAzOTEsICAzOTAsICAzODYsICAzODUsICAzODQsICAzODMsICAzODIsICAzODEsICAzODAsICAzNzksCisgICAgICAzNzgsICAzNzcsICAzNzYsICAzNzUsICAzNzQsICAzNzMsICAzNzIsICAzNzEsICAzNzAsICAzNjksCisgICAgICAzNjgsICAzNjYsICAzNjUsICAzNjQsICAzNjMsICAzNjEsICAzNTksICAzNTgsICAzNTcsICAzNTYsCisgICAgICAzNTUsICAzNTQsICAzNTMsICAzNTIsICAzNTEsICAzNTAsICAzNDksICAzNDgsICAzNDcsICAzNDYsCisgICAgICAzNDUsICAzNDQsICAzNDIsICAzNDEsICAzMzksICAzMzgsICAzMzcsICAzMzYsICAzMzMsICAzMzIsCisgICAgICAzMzEsICAzMzAsICAzMjksICAzMjgsICAzMjcsICAzMjYsICAzMjQsICAzMjMsICAzMjIsICAzMjEsCiAKKyAgICAgIDMyMCwgIDMxOSwgIDMxOCwgIDMxNywgIDMxNSwgIDMxNCwgIDMxMywgIDMxMiwgIDMxMSwgIDMxMCwKKyAgICAgIDMwOSwgIDMwOCwgIDMwNywgIDMwNiwgIDMwNSwgIDMwNCwgIDMwMywgIDMwMiwgIDMwMSwgIDMwMCwKKyAgICAgIDI5NywgIDI5NiwgIDI5NSwgIDI5NCwgIDI5MywgIDI5MiwgIDI5MSwgIDI5MCwgIDI4OSwgIDI4OCwKKyAgICAgIDI4NywgIDI4NiwgIDI4NSwgIDI4NCwgIDI4MywgIDI4MiwgIDI4MSwgIDI3NiwgIDI3NSwgIDI3NCwKKyAgICAgIDI3MywgIDI3MiwgIDI3MSwgIDI3MCwgIDI2OSwgIDI2OCwgIDI2NywgIDI2NiwgIDI2NSwgIDI2NCwKKyAgICAgIDI2MywgIDI2MCwgIDI1OSwgIDI1OCwgIDI1NCwgIDI1MywgIDI1MiwgIDI1MSwgIDI1MCwgIDI0OSwKKyAgICAgIDI0OCwgIDI0NywgIDI0NiwgIDI0NSwgIDI0NCwgIDI0MywgIDI0MCwgIDIzOSwgIDIzOCwgIDIzNSwKKyAgICAgIDIzNCwgIDIzMywgIDIzMCwgIDIyOSwgIDIyOCwgIDIyNSwgIDIyNCwgIDIyMywgIDIxOSwgIDIxOCwKKyAgICAgIDIxNSwgIDIxMywgIDIwMCwgIDE5OSwgIDE5OCwgIDE5NCwgIDE5MywgIDE5MiwgIDE4MSwgIDE3NywKKyAgICAgIDE3MywgIDE3MiwgIDE3MSwgIDE2NiwgIDE2NSwgIDEyOSwgIDEyOSwgIDE0NCwgIDEyOSwgIDEzMCwKKworICAgICAgMTI5LCAgNDgxLCAgIDkwLCAgIDUxLCAgIDUxLCAgIDQ5LCAgIDI5LCAgNDgxLCAgNDgxLCAgNDgxLAorICAgICAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLAorICAgICAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLAorICAgICAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLAorICAgICAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLAorICAgICAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLAorICAgICAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxLCAgNDgxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbNzk5XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzk2Nl0gPQogICAgIHsgICAwLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICA0LAotICAgICAgIDM2LCAgNDgxLCAgICAzLCAgICA0LCAgIDM2LCAgICAzLCAgICA0LCAgICA1LCAgIDY0LCAgIDc2LAotICAgICAgICA2LCAgICA1LCAgIDY0LCAgIDc2LCAgICA2LCAgIDM4LCAgIDM4LCAgIDM4LCAgIDgzLCAgICAzLAotICAgICAgICA0LCAgMTI2LCAgMTI2LCAgICAzLCAgICA0LCAgICAzLCAgICA0LCAgIDE1LCAgICA1LCAgIDE1LAotICAgICAgIDgzLCAgICA2LCAgICA1LCAgICA1LCAgICA1LCAgICA2LCAgICA2LCAgICA2LCAgICA5LCAgIDgzLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICA1LCAgICA2LAorICAgICAgICA3LCAgICA1LCAgICA2LCAgICA4LCAgIDE1LCAgNTA2LCAgICA3LCAgIDE1LCAgIDE5LCAgICA4LAorICAgICAgIDE1LCAgICA5LCAgICA5LCAgICA5LCAgIDE3LCAgIDE1LCAgIDQxLCAgIDQxLCAgIDQxLCAgIDIwLAorICAgICAgICA5LCAgIDE3LCAgIDIzLCAgICA5LCAgICA1LCAgICA2LCAgICA3LCAgICA5LCAgIDIzLCAgICA4LAorICAgICAgIDEwLCAgIDEwLCAgIDEwLCAgIDE4LCAgIDE5LCAgIDEwLCAgNTA1LCAgICA5LCAgIDExLCAgIDEwLAogCi0gICAgICAgIDksICAgMTAsICAgIDksICAgMTAsICAgMTYsICAgMTAsICAgMTYsICA0ODAsICAgMTEsICAgOTYsCi0gICAgICAgOTEsICAgMTIsICAgMTEsICAgMTUsICAgMTEsICAgMTIsICAgNDgsICAgMTIsICAgOTYsICAgIDksCi0gICAgICAgOTEsICA0NzksICAgMTAsICAgIDksICAgIDksICAgIDksICAgMTAsICAgMTAsICAgMTAsICAgMTEsCi0gICAgICAgMTYsICAgNDgsICAgMTIsICAgMTEsICAgMTEsICAgMTEsICAgMTIsICAgMTIsICAgMTIsICAgMTMsCi0gICAgICAgMTMsICAgMTMsICAgMTUsICA0NzgsICAgMTcsICAgMTQsICAgMTQsICAgMTQsICAgMTMsICAgMTQsCi0gICAgICAgMTcsICAgMTMsICAgMTgsICAgODAsICAgMTQsICAgMTMsICA0NzcsICAgMTQsICAgMTgsICAgMTYsCi0gICAgICAgODAsICAgMTQsICAgMTksICAgMTksICAgMTksICAgNTMsICAgNTMsICAgNTMsICAgMjMsICAgMjMsCi0gICAgICAgMTcsICAgMTksICAxNTksICAxOTksICAgMTksICAgMjAsICAgMjAsICAgMjAsICAgMTgsICAgMjAsCi0gICAgICAxOTksICAgMjMsICAxMDEsICAxNTksICAgMjAsICAgMjMsICAxMDEsICAgMjAsICAgMjQsICAgMjQsCi0gICAgICAgMzcsICAgMzcsICAgMzcsICAgNTgsICAgNTgsICAgNTgsICAgODIsICAxMDIsICAgOTIsICAgMTcsCisgICAgICAgMTgsICAgMTEsICAgMTAsICAgMTEsICAgMTEsICAgMjAsICAgMTAsICAgMzksICAgMjMsICAgMTEsCisgICAgICA1MDQsICAgMzksICAgNzEsICAgIDUsICAgIDYsICAgIDcsICAgMTAsICAgMTIsICAgIDgsICAgNzEsCisgICAgICAgMTIsICAgMTMsICAgMTIsICAgMTIsICAgMTMsICAgNjIsICAgMTMsICAgMTMsICAgMTIsICAgNjIsCisgICAgICAgMTQsICAgMTYsICAgMTMsICAgMTQsICAgMTYsICAgMTQsICAgMTQsICAgMTYsICAgMTMsICAgNzUsCisgICAgICAgMjEsICAgMTQsICAgMTYsICAgMjEsICAgMjQsICAgMjIsICA1MDMsICAgMTQsICAgMjIsICAxMDIsCisgICAgICAgMjQsICAgMjcsICAgMjcsICAgMjcsICAgNzUsICAgNDMsICAgMjgsICAgMjgsICAgMjgsICAxMDIsCisgICAgICAgMjcsICAgMjgsICAgNzIsICAgMjcsICAxMDMsICAgMjgsICAgMjEsICAgNDMsICAgMjgsICAxMDMsCisgICAgICAgMjQsICAgMjIsICAxMTMsICAgMTMsICAgNzIsICAgMTMsICAgNzcsICAgNzcsICAgNzcsICAxMzMsCisgICAgICAxMzMsICAxMTMsICAgMTQsICAgNzIsICAgMTQsICAgMjUsICAgMjUsICAgMjUsICAgMjUsICAgMjUsCisgICAgICAgMjUsICAgMjUsICAgMjUsICAgMjUsICAgMjUsICAgMjUsICAgMjUsICAgMjUsICAgMjUsICAgMjUsCiAKLSAgICAgICA4MiwgICAyNCwgICAzNywgICA5MiwgICA5OCwgICAyNCwgIDEwMiwgICAxOCwgICAyMSwgIDIwMywKLSAgICAgICAyMSwgIDQ3NiwgICAyMSwgICAyMSwgICAyMSwgICA4MiwgICAyMywgICA5OCwgICAyMywgICAyMSwKLSAgICAgICA1OCwgIDIwMywgICA5OCwgIDQ3NCwgIDE2MiwgICAyMSwgICAyNSwgICAyNSwgICAzNywgICAyMSwKLSAgICAgIDIwMywgICAyNiwgICAyNiwgICAyMSwgIDE2NiwgICAyMSwgICAyNCwgICA3OSwgICAyNCwgICAyNSwKLSAgICAgIDE2MiwgIDQ3MywgICA3OSwgICAyNSwgICAyNiwgICA3OSwgICA3OSwgICA3OSwgICAyNiwgICA4NCwKLSAgICAgICA3OSwgIDEwMCwgIDE1NSwgIDE2NiwgICA4NCwgIDEwMywgIDE1NSwgICA4NCwgICA4NCwgICA4NCwKLSAgICAgICAyMSwgIDE3MCwgICAyMSwgIDE4NywgIDEwMywgIDE3MCwgIDE2NiwgIDEwMCwgIDE1NSwgIDIwNiwKLSAgICAgIDEwMCwgIDE5MiwgIDIyMSwgIDEwMywgICAyNSwgIDIyMSwgICAyNSwgIDIwNiwgIDE4NywgICAyNiwKLSAgICAgIDQ3MiwgICAyNiwgICAzMiwgIDExMSwgIDExMSwgIDExMSwgIDQ3MSwgICAzMiwgIDExNiwgIDExNiwKLSAgICAgIDExNiwgIDExNywgIDExNywgIDExNywgIDEyMSwgIDEyMSwgIDEyMSwgIDE5MiwgIDQ1OCwgICAzMiwKKyAgICAgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwKKyAgICAgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwKKyAgICAgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwKKyAgICAgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwKKyAgICAgICAyNSwgICAyNSwgICAyNSwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwKKyAgICAgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwKKyAgICAgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwKKyAgICAgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwKKyAgICAgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwKKyAgICAgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwKIAotICAgICAgIDMyLCAgIDMyLCAgMTIzLCAgMTIzLCAgMTIzLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLAotICAgICAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLAotICAgICAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLAotICAgICAgIDY5LCAgMTM4LCAgMTM4LCAgMTM4LCAgIDY5LCAgMTM5LCAgMTM5LCAgMTM5LCAgMTkzLCAgMTkzLAotICAgICAgIDY5LCAgIDY5LCAgMTQyLCAgMTQyLCAgMTQyLCAgMTQ1LCAgMTQ1LCAgMTQ1LCAgIDY5LCAgMjIwLAotICAgICAgNDA1LCAgIDY5LCAgNDA1LCAgNDU3LCAgIDY5LCAgMjU5LCAgMjIwLCAgIDY5LCAgIDY5LCAgMTQ4LAotICAgICAgMTQ4LCAgMTQ4LCAgIDY5LCAgMTUwLCAgMTUwLCAgMTUwLCAgMTUxLCAgMTUxLCAgMTUxLCAgIDY5LAotICAgICAgMTg2LCAgMTg2LCAgMTg2LCAgIDY5LCAgMjU5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgMTg4LAotICAgICAgMTg4LCAgMTg4LCAgMTg5LCAgMTg5LCAgMTg5LCAgMTkwLCAgMTkwLCAgMTkwLCAgMTkxLCAgMTkxLAotICAgICAgMTkxLCAgMTk4LCAgMTk4LCAgMTk4LCAgMjAwLCAgMjAwLCAgMjAwLCAgMjAxLCAgMjAyLCAgMjAyLAorICAgICAgIDM0LCAgIDM4LCAgIDQwLCAgIDQwLCAgIDQwLCAgIDM4LCAgIDcwLCAgIDM4LCAgMTc1LCAgMjIxLAorICAgICAgIDcwLCAgMTcxLCAgIDM4LCAgIDM4LCAgIDQwLCAgIDQ1LCAgIDg3LCAgMjIxLCAgIDM4LCAgIDQ1LAorICAgICAgIDg3LCAgIDQ1LCAgMTcxLCAgIDM4LCAgMTc1LCAgIDcwLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDM4LAorICAgICAgIDM4LCAgIDk0LCAgIDQ1LCAgMTA5LCAgMTA3LCAgIDk0LCAgMTExLCAgIDQ1LCAgMTA3LCAgMTE0LAorICAgICAgIDQwLCAgMTEyLCAgMjA4LCAgIDQ1LCAgIDQ1LCAgMTEyLCAgMTA5LCAgMTA3LCAgMTE0LCAgMjA4LAorICAgICAgMTgzLCAgMTA5LCAgMTExLCAgIDgwLCAgMTgzLCAgMTExLCAgMjEyLCAgMTE0LCAgIDM4LCAgMTI0LAorICAgICAgMTI0LCAgMTI0LCAgMTQ3LCAgMTQ3LCAgMTQ3LCAgMTQ5LCAgMTQ5LCAgMTQ5LCAgMTUyLCAgMTUyLAorICAgICAgMTUyLCAgMjEyLCAgIDQ1LCAgIDU1LCAgMjAxLCAgMjAxLCAgIDU1LCAgMTU0LCAgMTU0LCAgMTU0LAorICAgICAgMjE3LCAgNTAyLCAgIDU1LCAgIDU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU4LCAgMTU4LCAgMTU4LAorICAgICAgIDU1LCAgMTY3LCAgNTAxLCAgIDU1LCAgMTc5LCAgMTY3LCAgIDU1LCAgNTAwLCAgMjM2LCAgIDU1LAogCi0gICAgICAyMDIsICAyMDEsICAyNDIsICAyNjksICAyODksICAyOTIsICAzMTIsICAyNDIsICAzMjMsICA0NTYsCi0gICAgICAyNDIsICAyNDIsICAyNDIsICAzMTUsICAzMTUsICAzMTUsICAyMDEsICAzNDMsICAzNDQsICA0MTQsCi0gICAgICA0MzMsICA0NTUsICAyNjksICAyODksICAyOTIsICAzMTIsICA0NTQsICAzMjMsICAzNDMsICAzNDMsCi0gICAgICAzNDMsICA0NTIsICA0NTEsICA0NTAsICA0NDksICA0NDgsICA0NDYsICAzNDQsICA0MTQsICA0MzMsCi0gICAgICA0NjEsICA0NjEsICA0NjEsICA0NjEsICA0NjEsICA0NjEsICA0NjEsICA0NjIsICA0NjIsICA0NjIsCi0gICAgICA0NjIsICA0NjIsICA0NjIsICA0NjIsICA0NjMsICA0NjMsICA0NjMsICA0NjMsICA0NjMsICA0NjMsCi0gICAgICA0NjMsICA0NjQsICA0NjQsICA0NjQsICA0NjQsICA0NjQsICA0NjQsICA0NjQsICA0NjUsICA0NjUsCi0gICAgICA0NjYsICA0NDUsICA0NjYsICA0NjYsICA0NjYsICA0NjYsICA0NjcsICA0NjcsICA0NDQsICA0NjcsCi0gICAgICA0NjcsICA0NjcsICA0NjcsICA0NjgsICA0NjgsICA0NjgsICA0NjgsICA0NjgsICA0NjgsICA0NjgsCi0gICAgICA0NjksICA0NjksICA0NjksICA0NzAsICA0NDIsICA0NzAsICA0NzAsICA0NzAsICA0NzAsICA0NzAsCisgICAgICAgNTUsICAxNjAsICAxNjAsICAxNjAsICAgNTUsICAyMzYsICAyMTcsICAxNjcsICAyMDUsICAyMDUsCisgICAgICAyMDUsICAgNTUsICAyMDYsICAxNzksICA0OTksICAgNTUsICAyMDYsICAgNTUsICAgNTUsICAgNTUsCisgICAgICAgNTUsICAxMTksICAyMDcsICAyMDcsICAyMDcsICAxMTksICAxNzksICAxMTksICAyMDksICAyMDksCisgICAgICAyMDksICAyMDYsICAxMTksICAxMTksICAyMTAsICAyMTEsICAyMTEsICAyMTEsICAxMTksICAyMTMsCisgICAgICAyMTMsICAyMTMsICAyMzcsICAxMTksICAyNzYsICAyMzcsICAyMTAsICAyODYsICAzMDYsICAxMTksCisgICAgICAxMTksICAyMTQsICAyMTQsICAyMTQsICAzMDksICAyMTAsICAyMTUsICAyMTUsICAyMTUsICAyMTYsCisgICAgICAyMTYsICAyMTYsICA0OTgsICAyNzYsICAzMzAsICAzNDEsICAyODYsICAzMDYsICAzMzMsICAzMzMsCisgICAgICAzMzMsICA0NzksICA0MjcsICAzMDksICAzNjMsICA0MjcsICA0MzYsICA0NzgsICAxMTksICAxMjUsCisgICAgICAxMjUsICAxMjUsICA0NzcsICAzMzAsICAzNDEsICA0NzYsICA0NTQsICA0NzUsICAxMjUsICA0NzMsCisgICAgICAzNjIsICAzNjIsICA0NzIsICAzNjMsICA0NzEsICA0MzYsICAxMjUsICAxMjUsICAxMjUsICAxMjUsCiAKLSAgICAgIDQ3NSwgIDQ0MSwgIDQ3NSwgIDQ3NSwgIDQ3NSwgIDQ3NSwgIDQ4MiwgIDQ0MCwgIDQ4MiwgIDQ4MiwKLSAgICAgIDQ4MiwgIDQ4MiwgIDQ4MiwgIDQzOSwgIDQzOCwgIDQzNiwgIDQzNSwgIDQzNCwgIDQzMiwgIDQyNywKLSAgICAgIDQyNiwgIDQyNCwgIDQyMywgIDQyMSwgIDQyMCwgIDQxOCwgIDQxNywgIDQxNiwgIDQxNSwgIDQxMywKLSAgICAgIDQxMiwgIDQxMCwgIDQwOSwgIDQwOCwgIDQwNiwgIDQwNCwgIDQwMywgIDQwMiwgIDQwMSwgIDQwMCwKLSAgICAgIDM5OSwgIDM5OCwgIDM5NSwgIDM5NCwgIDM5MywgIDM5MiwgIDM5MCwgIDM4OSwgIDM4OCwgIDM4NywKLSAgICAgIDM4NiwgIDM4NCwgIDM4MywgIDM4MiwgIDM3OSwgIDM3OCwgIDM3NywgIDM3NiwgIDM3NSwgIDM3NCwKLSAgICAgIDM3MywgIDM3MiwgIDM3MSwgIDM3MCwgIDM2OSwgIDM2OCwgIDM2NywgIDM2NSwgIDM2NCwgIDM2MiwKLSAgICAgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1NSwgIDM1NCwgIDM1MywgIDM1MiwgIDM1MSwKLSAgICAgIDM1MCwgIDM0OSwgIDM0OCwgIDM0NywgIDM0NiwgIDM0MiwgIDM0MSwgIDM0MCwgIDMzOSwgIDMzOCwKLSAgICAgIDMzNywgIDMzNiwgIDMzNCwgIDMzMywgIDMzMiwgIDMzMSwgIDMzMCwgIDMyOSwgIDMyOCwgIDMyNywKKyAgICAgIDEyNSwgIDEyNSwgIDM2MiwgIDM2MiwgIDM2MiwgIDQ1NCwgIDQ4MiwgIDQ4MiwgIDQ4MiwgIDQ4MiwKKyAgICAgIDQ4MiwgIDQ4MiwgIDQ4MiwgIDQ4MiwgIDQ4MiwgIDQ4MiwgIDQ4MiwgIDQ4MiwgIDQ4MiwgIDQ4MywKKyAgICAgIDQ4MywgIDQ4MywgIDQ4MywgIDQ4MywgIDQ4MywgIDQ4MywgIDQ4MywgIDQ4MywgIDQ4MywgIDQ4MywKKyAgICAgIDQ4MywgIDQ4MywgIDQ4NCwgIDQ4NCwgIDQ4NCwgIDQ4NCwgIDQ4NCwgIDQ4NCwgIDQ4NCwgIDQ4NCwKKyAgICAgIDQ4NCwgIDQ4NCwgIDQ4NCwgIDQ4NCwgIDQ4NCwgIDQ4NSwgIDQ4NSwgIDQ4NSwgIDQ4NSwgIDQ4NSwKKyAgICAgIDQ4NSwgIDQ4NSwgIDQ4NSwgIDQ4NSwgIDQ4NSwgIDQ4NSwgIDQ4NSwgIDQ4NSwgIDQ4NiwgIDQ3MCwKKyAgICAgIDQ2OSwgIDQ4NiwgIDQ2NywgIDQ4NiwgIDQ4NiwgIDQ2NiwgIDQ2NSwgIDQ2MywgIDQ2MiwgIDQ4NiwKKyAgICAgIDQ4NiwgIDQ4NywgIDQ2MSwgIDQ2MCwgIDQ4NywgIDQ1OSwgIDQ4NywgIDQ4NywgIDQ1NywgIDQ4NywKKyAgICAgIDQ4NywgIDQ1NiwgIDQ4NywgIDQ4NywgIDQ4OCwgIDQ1NSwgIDQ4OCwgIDQ4OCwgIDQ4OSwgIDQ4OSwKKyAgICAgIDQ1MywgIDQ4OSwgIDQ4OSwgIDQ4OSwgIDQ4OSwgIDQ4OSwgIDQ4OSwgIDQ4OSwgIDQ4OSwgIDQ4OSwKIAotICAgICAgMzI2LCAgMzI1LCAgMzI0LCAgMzIyLCAgMzIxLCAgMzIwLCAgMzE5LCAgMzE0LCAgMzEwLCAgMzA4LAotICAgICAgMzA3LCAgMzA2LCAgMzA1LCAgMzA0LCAgMzAyLCAgMzAxLCAgMzAwLCAgMjk5LCAgMjk4LCAgMjk2LAotICAgICAgMjk1LCAgMjk0LCAgMjkzLCAgMjkxLCAgMjkwLCAgMjg3LCAgMjg2LCAgMjg1LCAgMjgzLCAgMjgwLAotICAgICAgMjc4LCAgMjc3LCAgMjc1LCAgMjczLCAgMjcyLCAgMjcxLCAgMjcwLCAgMjY4LCAgMjY2LCAgMjY1LAotICAgICAgMjY0LCAgMjYzLCAgMjYyLCAgMjYxLCAgMjYwLCAgMjU4LCAgMjU3LCAgMjU2LCAgMjU0LCAgMjUzLAotICAgICAgMjUyLCAgMjUxLCAgMjUwLCAgMjQ5LCAgMjQ4LCAgMjQ3LCAgMjQ2LCAgMjQ1LCAgMjQ0LCAgMjQzLAotICAgICAgMjM4LCAgMjM3LCAgMjM2LCAgMjM1LCAgMjM0LCAgMjMzLCAgMjMyLCAgMjMxLCAgMjMwLCAgMjI5LAotICAgICAgMjI4LCAgMjI3LCAgMjI2LCAgMjI1LCAgMjI0LCAgMjIzLCAgMjIyLCAgMjE5LCAgMjE4LCAgMjE3LAotICAgICAgMjE2LCAgMjE1LCAgMjE0LCAgMjEzLCAgMjEyLCAgMjExLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LAotICAgICAgMjA1LCAgMjA0LCAgMTk3LCAgMTg1LCAgMTgxLCAgMTgwLCAgMTc5LCAgMTc4LCAgMTc3LCAgMTc2LAorICAgICAgNDkwLCAgNDkwLCAgNDkwLCAgNDkwLCAgNDkwLCAgNDkwLCAgNDkwLCAgNDkwLCAgNDkwLCAgNDkwLAorICAgICAgNDkwLCAgNDkwLCAgNDkwLCAgNDkxLCAgNDkxLCAgNDkxLCAgNDkxLCAgNDkxLCAgNDkxLCAgNDkxLAorICAgICAgNDkxLCAgNDkxLCAgNDkxLCAgNDQ4LCAgNDQ3LCAgNDkxLCAgNDkyLCAgNDQ1LCAgNDQ0LCAgNDkyLAorICAgICAgNDkyLCAgNDkyLCAgNDQyLCAgNDQxLCAgNDQwLCAgNDM5LCAgNDkyLCAgNDM4LCAgNDkyLCAgNDkzLAorICAgICAgNDkzLCAgNDM3LCAgNDkzLCAgNDkzLCAgNDk0LCAgNDk0LCAgNDk0LCAgNDk0LCAgNDk0LCAgNDk0LAorICAgICAgNDk0LCAgNDk0LCAgNDk0LCAgNDk1LCAgNDk1LCAgNDM1LCAgNDk1LCAgNDk1LCAgNDk2LCAgNDk2LAorICAgICAgNDM0LCAgNDk2LCAgNDk2LCAgNDk2LCAgNDk2LCAgNDk2LCAgNDk2LCAgNDk2LCAgNDk2LCAgNDk2LAorICAgICAgNDk2LCAgNDk3LCAgNDk3LCAgNDMyLCAgNDk3LCAgNDk3LCAgNTA3LCAgNTA3LCAgNDMxLCAgNTA3LAorICAgICAgNTA3LCAgNTA3LCAgNTA3LCAgNTA3LCAgNTA3LCAgNTA3LCAgNTA3LCAgNTA3LCAgNTA3LCAgNDMwLAorICAgICAgNDI4LCAgNDI2LCAgNDI1LCAgNDI0LCAgNDIzLCAgNDIyLCAgNDIxLCAgNDIwLCAgNDE3LCAgNDE2LAogCi0gICAgICAxNzUsICAxNzQsICAxNzMsICAxNzIsICAxNzEsICAxNjksICAxNjgsICAxNjcsICAxNjUsICAxNjQsCi0gICAgICAxNjMsICAxNjEsICAxNjAsICAxNTgsICAxNTcsICAxNTYsICAxNTQsICAxMjIsICAxMTgsICAxMTQsCi0gICAgICAxMTMsICAxMDYsICAxMDUsICAxMDQsICAgOTksICAgOTcsICAgOTUsICAgOTQsICAgOTMsICAgOTAsCi0gICAgICAgODcsICAgNzcsICAgNjYsICAgNTUsICAgNDQsICAgMjcsICAgIDgsICAgIDcsICAgIDIsICA0NjAsCi0gICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCi0gICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCi0gICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCi0gICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCi0gICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCi0gICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAKKyAgICAgIDQxNSwgIDQxNCwgIDQxMiwgIDQxMSwgIDQxMCwgIDQwOSwgIDQwOCwgIDQwNiwgIDQwNSwgIDQwNCwKKyAgICAgIDQwMSwgIDQwMCwgIDM5OSwgIDM5OCwgIDM5NiwgIDM5NSwgIDM5NCwgIDM5MywgIDM5MiwgIDM5MSwKKyAgICAgIDM5MCwgIDM4OSwgIDM4OCwgIDM4NSwgIDM4NCwgIDM4MiwgIDM4MCwgIDM3OSwgIDM3OCwgIDM3NywKKyAgICAgIDM3NiwgIDM3NSwgIDM3NCwgIDM3MywgIDM3MiwgIDM3MSwgIDM3MCwgIDM2OSwgIDM2OCwgIDM2NywKKyAgICAgIDM2NiwgIDM2NSwgIDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1NSwgIDM1MywKKyAgICAgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwgIDM0OCwgIDM0NywgIDM0NiwgIDM0NSwgIDM0NCwgIDM0MywKKyAgICAgIDM0MiwgIDM0MCwgIDMzOSwgIDMzOCwgIDMzNywgIDMzMiwgIDMyOCwgIDMyNiwgIDMyNSwgIDMyNCwKKyAgICAgIDMyMywgIDMyMiwgIDMyMCwgIDMxOSwgIDMxOCwgIDMxNywgIDMxNiwgIDMxNCwgIDMxMywgIDMxMiwKKyAgICAgIDMxMSwgIDMxMCwgIDMwOCwgIDMwNywgIDMwNCwgIDMwMywgIDMwMiwgIDMwMCwgIDI5NywgIDI5NSwKKyAgICAgIDI5NCwgIDI5MiwgIDI5MCwgIDI4OSwgIDI4OCwgIDI4NywgIDI4NSwgIDI4MywgIDI4MiwgIDI4MSwKIAorICAgICAgMjgwLCAgMjc5LCAgMjc4LCAgMjc3LCAgMjc1LCAgMjc0LCAgMjczLCAgMjcxLCAgMjcwLCAgMjY5LAorICAgICAgMjY4LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0LCAgMjYzLCAgMjYyLCAgMjYxLCAgMjYwLCAgMjU4LAorICAgICAgMjU0LCAgMjUzLCAgMjUyLCAgMjUxLCAgMjUwLCAgMjQ5LCAgMjQ4LCAgMjQ3LCAgMjQ2LCAgMjQ1LAorICAgICAgMjQ0LCAgMjQzLCAgMjQyLCAgMjQxLCAgMjQwLCAgMjM5LCAgMjM4LCAgMjM1LCAgMjM0LCAgMjMzLAorICAgICAgMjMyLCAgMjMxLCAgMjMwLCAgMjI5LCAgMjI4LCAgMjI3LCAgMjI2LCAgMjI1LCAgMjI0LCAgMjIzLAorICAgICAgMjIyLCAgMjIwLCAgMjE5LCAgMjE4LCAgMjAwLCAgMTk0LCAgMTkzLCAgMTkyLCAgMTkxLCAgMTkwLAorICAgICAgMTg5LCAgMTg4LCAgMTg3LCAgMTg2LCAgMTg1LCAgMTg0LCAgMTgyLCAgMTgxLCAgMTgwLCAgMTc4LAorICAgICAgMTc3LCAgMTc2LCAgMTc0LCAgMTczLCAgMTcyLCAgMTcwLCAgMTY5LCAgMTY4LCAgMTY2LCAgMTY1LAorICAgICAgMTU5LCAgMTU2LCAgMTI5LCAgMTI3LCAgMTI2LCAgMTE3LCAgMTE2LCAgMTE1LCAgMTEwLCAgMTA4LAorICAgICAgMTA2LCAgMTA1LCAgMTA0LCAgMTAxLCAgMTAwLCAgIDk1LCAgIDkwLCAgIDY4LCAgIDY1LCAgIDUxLAorCisgICAgICAgNDksICAgMjksICAgMjYsICAgIDQsICAgIDMsICAgIDIsICA0ODEsICA0ODEsICA0ODEsICA0ODEsCisgICAgICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsCisgICAgICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsCisgICAgICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsCisgICAgICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsCisgICAgICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEsCisgICAgICA0ODEsICA0ODEsICA0ODEsICA0ODEsICA0ODEKICAgICB9IDsKIAogc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CkBAIC04NDAsMTggKzkyMSwxOCBAQAogCiBzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfcnVsZV9saW5lbnVtWzEwOV0gPQogICAgIHsgICAwLAotICAgICAgMTk3LCAgMTk4LCAgMTk5LCAgMjAwLCAgMjA4LCAgMjE5LCAgMjIwLCAgMjIxLCAgMjIyLCAgMjIzLAotICAgICAgMjI0LCAgMjI1LCAgMjI2LCAgMjI3LCAgMjI4LCAgMjI5LCAgMjMwLCAgMjMxLCAgMjMyLCAgMjMzLAotICAgICAgMjM0LCAgMjM1LCAgMjM2LCAgMjM3LCAgMjM4LCAgMjM5LCAgMjQwLCAgMjQxLCAgMjQyLCAgMjQzLAotICAgICAgMjQ0LCAgMjQ1LCAgMjQ2LCAgMjQ3LCAgMjQ4LCAgMjQ5LCAgMjUwLCAgMjUxLCAgMjUyLCAgMjUzLAotICAgICAgMjU0LCAgMjU1LCAgMjU2LCAgMjU3LCAgMjU4LCAgMjYwLCAgMjY0LCAgMjY1LCAgMjY2LCAgMjY4LAotICAgICAgMjc1LCAgMjc5LCAgMjg1LCAgMjg4LCAgMjkxLCAgMjk0LCAgMzA1LCAgMzEzLCAgMzIwLCAgMzM3LAotICAgICAgMzQzLCAgMzY0LCAgMzY1LCAgMzc2LCAgMzg3LCAgMzg4LCAgNDAwLCAgNDA4LCAgNDE5LCAgNDM1LAotICAgICAgNDQxLCAgNDUxLCAgNDYxLCAgNDcyLCAgNDczLCAgNDc0LCAgNDc1LCAgNDc2LCAgNDc3LCAgNDc4LAotICAgICAgNDgxLCAgNDgzLCAgNDkyLCAgNTA0LCAgNTA5LCAgNTEwLCAgNTE2LCAgNTE3LCAgNTI4LCAgNTM0LAotICAgICAgNTQwLCAgNTQ2LCAgNTYyLCAgNTk2LCAgNTk3LCAgNTk4LCAgNjM0LCAgNjM2LCAgNjM3LCAgNjM5LAorICAgICAgMTQ5LCAgMTUwLCAgMTUxLCAgMTUyLCAgMTYwLCAgMTc4LCAgMTc5LCAgMTgwLCAgMTgxLCAgMTgyLAorICAgICAgMTgzLCAgMTg0LCAgMTg1LCAgMTg2LCAgMTg3LCAgMTg4LCAgMTg5LCAgMTkwLCAgMTkxLCAgMTkyLAorICAgICAgMTkzLCAgMTk0LCAgMTk1LCAgMTk2LCAgMTk3LCAgMTk4LCAgMTk5LCAgMjAwLCAgMjAxLCAgMjAyLAorICAgICAgMjAzLCAgMjA0LCAgMjA1LCAgMjA2LCAgMjA3LCAgMjA4LCAgMjA5LCAgMjEwLCAgMjExLCAgMjEyLAorICAgICAgMjEzLCAgMjE0LCAgMjE1LCAgMjE2LCAgMjE3LCAgMjE4LCAgMjE5LCAgMjIxLCAgMjI1LCAgMjI2LAorICAgICAgMjI3LCAgMjI4LCAgMjI5LCAgMjMxLCAgMjM4LCAgMjQyLCAgMjQ5LCAgMjU0LCAgMjU3LCAgMjYwLAorICAgICAgMjYzLCAgMjcxLCAgMjc5LCAgMjg2LCAgMjkzLCAgMzEyLCAgMzI3LCAgMzMyLCAgMzUxLCAgMzYzLAorICAgICAgMzc5LCAgMzk0LCAgNDExLCAgNDEyLCAgNDIzLCAgNDM0LCAgNDM1LCAgNDQ3LCAgNDczLCAgNTE4LAorICAgICAgNTI4LCAgNTM3LCAgNTQ3LCAgNTQ4LCAgNTQ5LCAgNTUwLCAgNTUxLCAgNTUyLCAgNTUzLCAgNTU2LAorICAgICAgNTU4LCAgNTY2LCAgNTgzLCAgNTg4LCAgNTg5LCAgNTk1LCAgNTk2LCAgNjA3LCAgNjEzLCAgNjE5LAogCi0gICAgICA2NDMsICA2NTgsICA2OTMsICA2OTQsICA2OTUsICA2OTYsICA3MDQsICA3MDUKKyAgICAgIDYyNSwgIDY0MSwgIDY0MiwgIDY0MywgIDY1OSwgIDY3OCwgIDcxOCwgIDcxOQogICAgIH0gOwogCiAvKiBUaGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCdsbCBjYXRjaApAQCAtODY1LDEzICs5NDYsMTMgQEAKICNsaW5lIDEgInNjYW4tZ3JhbS5sIgogLyogQmlzb24gR3JhbW1hciBTY2FubmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQyAtKi0KIAotICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgogCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLApAQCAtODgwLDE1MyArOTYxLDEwOSBAQAogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gICAwMjExMC0xMzAxICBVU0EKLSovCi0jbGluZSAyNyAic2Nhbi1ncmFtLmwiCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisjZGVmaW5lIFlZX05PX0lOUFVUIDEKKyNsaW5lIDI0ICJzY2FuLWdyYW0ubCIKIC8qIFdvcmsgYXJvdW5kIGEgYnVnIGluIGZsZXggMi41LjMxLiAgU2VlIERlYmlhbiBidWcgMzMzMjMxCiAgICA8aHR0cDovL2J1Z3MuZGViaWFuLm9yZy9jZ2ktYmluL2J1Z3JlcG9ydC5jZ2k/YnVnPTMzMzIzMT4uICAqLwogI3VuZGVmIGdyYW1fd3JhcAogI2RlZmluZSBncmFtX3dyYXAoKSAxCiAKLSNpbmNsdWRlICJzeXN0ZW0uaCIKLQotI2luY2x1ZGUgPG1ic3dpZHRoLmg+Ci0jaW5jbHVkZSA8cXVvdGUuaD4KKyNkZWZpbmUgRkxFWF9QUkVGSVgoSWQpIGdyYW1fICMjIElkCisjaW5jbHVkZSAiZmxleC1zY2FubmVyLmgiCiAKICNpbmNsdWRlICJjb21wbGFpbi5oIgogI2luY2x1ZGUgImZpbGVzLmgiCi0jaW5jbHVkZSAiZ2V0YXJncy5oIgogI2luY2x1ZGUgImdyYW0uaCIKICNpbmNsdWRlICJxdW90ZWFyZy5oIgogI2luY2x1ZGUgInJlYWRlci5oIgogI2luY2x1ZGUgInVuaXFzdHIuaCIKIAotI2RlZmluZSBZWV9VU0VSX0lOSVQJCQkJCVwKLSAgZG8JCQkJCQkJXAotICAgIHsJCQkJCQkJXAotICAgICAgc2Nhbm5lcl9jdXJzb3IuZmlsZSA9IGN1cnJlbnRfZmlsZTsJCVwKLSAgICAgIHNjYW5uZXJfY3Vyc29yLmxpbmUgPSAxOwkJCQlcCi0gICAgICBzY2FubmVyX2N1cnNvci5jb2x1bW4gPSAxOwkJCVwKLSAgICAgIGNvZGVfc3RhcnQgPSBzY2FubmVyX2N1cnNvcjsJCQlcCi0gICAgfQkJCQkJCQlcCi0gIHdoaWxlICgwKQorI2luY2x1ZGUgPGMtY3R5cGUuaD4KKyNpbmNsdWRlIDxtYnN3aWR0aC5oPgorI2luY2x1ZGUgPHF1b3RlLmg+CiAKLS8qIFBhY2lmeSAiZ2NjIC1XbWlzc2luZy1wcm90b3R5cGVzIiB3aGVuIGZsZXggMi41LjMxIGlzIHVzZWQuICAqLwotaW50IGdyYW1fZ2V0X2xpbmVubyAodm9pZCk7Ci1GSUxFICpncmFtX2dldF9pbiAodm9pZCk7Ci1GSUxFICpncmFtX2dldF9vdXQgKHZvaWQpOwotaW50IGdyYW1fZ2V0X2xlbmcgKHZvaWQpOwotY2hhciAqZ3JhbV9nZXRfdGV4dCAodm9pZCk7Ci12b2lkIGdyYW1fc2V0X2xpbmVubyAoaW50KTsKLXZvaWQgZ3JhbV9zZXRfaW4gKEZJTEUgKik7Ci12b2lkIGdyYW1fc2V0X291dCAoRklMRSAqKTsKLWludCBncmFtX2dldF9kZWJ1ZyAodm9pZCk7Ci12b2lkIGdyYW1fc2V0X2RlYnVnIChpbnQpOwotaW50IGdyYW1fbGV4X2Rlc3Ryb3kgKHZvaWQpOworI2luY2x1ZGUgInNjYW4tZ3JhbS5oIgorCisjZGVmaW5lIFlZX0RFQ0wgR1JBTV9MRVhfREVDTAorCisjZGVmaW5lIFlZX1VTRVJfSU5JVAkJCQkJXAorICAgY29kZV9zdGFydCA9IHNjYW5uZXJfY3Vyc29yID0gbG9jLT5zdGFydDsJCVwKIAogLyogTG9jYXRpb24gb2Ygc2Nhbm5lciBjdXJzb3IuICAqLwotYm91bmRhcnkgc2Nhbm5lcl9jdXJzb3I7CitzdGF0aWMgYm91bmRhcnkgc2Nhbm5lcl9jdXJzb3I7CiAKLXN0YXRpYyB2b2lkIGFkanVzdF9sb2NhdGlvbiAobG9jYXRpb24gKiwgY2hhciBjb25zdCAqLCBzaXplX3QpOwotI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgYWRqdXN0X2xvY2F0aW9uIChsb2MsIGdyYW1fdGV4dCwgZ3JhbV9sZW5nKTsKKyNkZWZpbmUgWVlfVVNFUl9BQ1RJT04gIGxvY2F0aW9uX2NvbXB1dGUgKGxvYywgJnNjYW5uZXJfY3Vyc29yLCBncmFtX3RleHQsIGdyYW1fbGVuZyk7CiAKIHN0YXRpYyBzaXplX3Qgbm9fY3JfcmVhZCAoRklMRSAqLCBjaGFyICosIHNpemVfdCk7CiAjZGVmaW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBzaXplKSAoKHJlc3VsdCkgPSBub19jcl9yZWFkIChncmFtX2luLCBidWYsIHNpemUpKQogCi0KLS8qIE9CU1RBQ0tfRk9SX1NUUklORyAtLSBVc2VkIHRvIHN0b3JlIGFsbCB0aGUgY2hhcmFjdGVycyB0aGF0IHdlIG5lZWQgdG8KLSAgIGtlZXAgKHRvIGNvbnN0cnVjdCBJRCwgU1RSSU5HUyBldGMuKS4gIFVzZSB0aGUgZm9sbG93aW5nIG1hY3JvcyB0bwotICAgdXNlIGl0LgotCi0gICBVc2UgU1RSSU5HX0dST1cgdG8gYXBwZW5kIHdoYXQgaGFzIGp1c3QgYmVlbiBtYXRjaGVkLCBhbmQKLSAgIFNUUklOR19GSU5JU0ggdG8gZW5kIHRoZSBzdHJpbmcgKGl0IHB1dHMgdGhlIGVuZGluZyAwKS4KLSAgIFNUUklOR19GSU5JU0ggYWxzbyBzdG9yZXMgdGhpcyBzdHJpbmcgaW4gTEFTVF9TVFJJTkcsIHdoaWNoIGNhbiBiZQotICAgdXNlZCwgYW5kIHdoaWNoIGlzIHVzZWQgYnkgU1RSSU5HX0ZSRUUgdG8gZnJlZSB0aGUgbGFzdCBzdHJpbmcuICAqLwotCi1zdGF0aWMgc3RydWN0IG9ic3RhY2sgb2JzdGFja19mb3Jfc3RyaW5nOwotCi0vKiBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIG1vc3QgcmVjZW50bHkgc2F2ZWQgdG9rZW4uICAqLwotY2hhciAqbGFzdF9zdHJpbmc7Ci0KLS8qIFRoZSBsb2NhdGlvbiBvZiB0aGUgbW9zdCByZWNlbnRseSBzYXZlZCB0b2tlbiwgaWYgaXQgd2FzIGEKLSAgIEJSQUNFRF9DT0RFIHRva2VuOyBvdGhlcndpc2UsIHRoaXMgaGFzIGFuIHVuc3BlY2lmaWVkIHZhbHVlLiAgKi8KLWxvY2F0aW9uIGxhc3RfYnJhY2VkX2NvZGVfbG9jOwotCi0jZGVmaW5lIFNUUklOR19HUk9XICAgXAotICBvYnN0YWNrX2dyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsIGdyYW1fdGV4dCwgZ3JhbV9sZW5nKQotCi0jZGVmaW5lIFNUUklOR19GSU5JU0gJCQkJCVwKLSAgZG8gewkJCQkJCQlcCi0gICAgb2JzdGFja18xZ3JvdyAoJm9ic3RhY2tfZm9yX3N0cmluZywgJ1wwJyk7CQlcCi0gICAgbGFzdF9zdHJpbmcgPSBvYnN0YWNrX2ZpbmlzaCAoJm9ic3RhY2tfZm9yX3N0cmluZyk7CVwKKyNkZWZpbmUgUk9MTEJBQ0tfQ1VSUkVOVF9UT0tFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNjYW5uZXJfY3Vyc29yLmNvbHVtbiAtPSBtYnNud2lkdGggKGdyYW1fdGV4dCwgZ3JhbV9sZW5nLCAwKTsJXAorICAgIHl5bGVzcyAoMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfSB3aGlsZSAoMCkKIAotI2RlZmluZSBTVFJJTkdfRlJFRSBcCi0gIG9ic3RhY2tfZnJlZSAoJm9ic3RhY2tfZm9yX3N0cmluZywgbGFzdF9zdHJpbmcpCisvKiBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIG1vc3QgcmVjZW50bHkgc2F2ZWQgdG9rZW4uICAqLworc3RhdGljIGNoYXIgKmxhc3Rfc3RyaW5nOworCisvKiBCcmFja2V0ZWQgaWRlbnRpZmllci4gKi8KK3N0YXRpYyB1bmlxc3RyIGJyYWNrZXRlZF9pZF9zdHIgPSAwOworc3RhdGljIGxvY2F0aW9uIGJyYWNrZXRlZF9pZF9sb2M7CitzdGF0aWMgYm91bmRhcnkgYnJhY2tldGVkX2lkX3N0YXJ0Oworc3RhdGljIGludCBicmFja2V0ZWRfaWRfY29udGV4dF9zdGF0ZSA9IDA7CiAKIHZvaWQKLXNjYW5uZXJfbGFzdF9zdHJpbmdfZnJlZSAodm9pZCkKK2dyYW1fc2Nhbm5lcl9sYXN0X3N0cmluZ19mcmVlICh2b2lkKQogewogICBTVFJJTkdfRlJFRTsKIH0KIAotLyogV2l0aGluIHdlbGwtZm9ybWVkIHJ1bGVzLCBSVUxFX0xFTkdUSCBpcyB0aGUgbnVtYmVyIG9mIHZhbHVlcyBpbgotICAgdGhlIGN1cnJlbnQgcnVsZSBzbyBmYXIsIHdoaWNoIHNheXMgd2hlcmUgdG8gZmluZCBgJDAnIHdpdGggcmVzcGVjdAotICAgdG8gdGhlIHRvcCBvZiB0aGUgc3RhY2suICBJdCBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIHJ1bGUtPmxlbmd0aCBpbgotICAgdGhlIGNhc2Ugb2YgbWlkIHJ1bGUgYWN0aW9ucy4KLQotICAgT3V0c2lkZSBvZiB3ZWxsLWZvcm1lZCBydWxlcywgUlVMRV9MRU5HVEggaGFzIGFuIHVuZGVmaW5lZCB2YWx1ZS4gICovCi1zdGF0aWMgaW50IHJ1bGVfbGVuZ3RoOwotCi1zdGF0aWMgdm9pZCBydWxlX2xlbmd0aF9vdmVyZmxvdyAobG9jYXRpb24pIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKLQotLyogSW5jcmVtZW50IHRoZSBydWxlIGxlbmd0aCBieSBvbmUsIGNoZWNraW5nIGZvciBvdmVyZmxvdy4gICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWluY3JlbWVudF9ydWxlX2xlbmd0aCAobG9jYXRpb24gbG9jKQotewotICBydWxlX2xlbmd0aCsrOwotCi0gIC8qIERvbid0IGFsbG93IHJ1bGVfbGVuZ3RoID09IElOVF9NQVgsIHNpbmNlIHRoYXQgbWlnaHQgY2F1c2UKLSAgICAgY29uZnVzaW9uIHdpdGggc3RydG9sIGlmIElOVF9NQVggPT0gTE9OR19NQVguICAqLwotICBpZiAocnVsZV9sZW5ndGggPT0gSU5UX01BWCkKLSAgICBydWxlX2xlbmd0aF9vdmVyZmxvdyAobG9jKTsKLX0KLQotc3RhdGljIHZvaWQgaGFuZGxlX2RvbGxhciAoaW50IHRva2VuX3R5cGUsIGNoYXIgKmNwLCBsb2NhdGlvbiBsb2MpOwotc3RhdGljIHZvaWQgaGFuZGxlX2F0IChpbnQgdG9rZW5fdHlwZSwgY2hhciAqY3AsIGxvY2F0aW9uIGxvYyk7CiBzdGF0aWMgdm9pZCBoYW5kbGVfc3luY2xpbmUgKGNoYXIgKiwgbG9jYXRpb24pOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50IHNjYW5faW50ZWdlciAoY2hhciBjb25zdCAqcCwgaW50IGJhc2UsIGxvY2F0aW9uIGxvYyk7CiBzdGF0aWMgaW50IGNvbnZlcnRfdWNuX3RvX2J5dGUgKGNoYXIgY29uc3QgKmhleF90ZXh0KTsKIHN0YXRpYyB2b2lkIHVuZXhwZWN0ZWRfZW9mIChib3VuZGFyeSwgY2hhciBjb25zdCAqKTsKIHN0YXRpYyB2b2lkIHVuZXhwZWN0ZWRfbmV3bGluZSAoYm91bmRhcnksIGNoYXIgY29uc3QgKik7CiAKKy8qIEEgQy1saWtlIGNvbW1lbnQgaW4gZGlyZWN0aXZlcy9ydWxlcy4gKi8KIAorLyogU3RyaW5ncyBhbmQgY2hhcmFjdGVycyBpbiBkaXJlY3RpdmVzL3J1bGVzLiAqLwogCisvKiBBIGlkZW50aWZpZXIgd2FzIGp1c3QgcmVhZCBpbiBkaXJlY3RpdmVzL3J1bGVzLiAgU3BlY2lhbCBzdGF0ZQordG8gY2FwdHVyZSB0aGUgc2VxdWVuY2UgJ2lkZW50aWZpZXIgOicuICovCiAKKy8qIFRocmVlIHR5cGVzIG9mIHVzZXIgY29kZToKKy0gcHJvbG9ndWUgKGNvZGUgYmV0d2VlbiAnJXsnICclfScgaW4gdGhlIGZpcnN0IHNlY3Rpb24sIGJlZm9yZSAlJSk7CistIGFjdGlvbnMsIHByaW50ZXJzLCB1bmlvbiwgZXRjLCAoYmV0d2VlbiBicmFjZWQgaW4gdGhlIG1pZGRsZSBzZWN0aW9uKTsKKy0gZXBpbG9ndWUgKGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIHNlY29uZCAlJSkuICovCiAKKy8qIEMgYW5kIEMrKyBjb21tZW50cyBpbiBjb2RlLiAqLworCisvKiBTdHJpbmdzIGFuZCBjaGFyYWN0ZXJzIGluIGNvZGUuICovCisKKy8qIEJyYWNrZXRlZCBpZGVudGlmaWVycyBzdXBwb3J0LiAqLwogCiAvKiBQT1NJWCBzYXlzIHRoYXQgYSB0YWcgbXVzdCBiZSBib3RoIGFuIGlkIGFuZCBhIEMgdW5pb24gbWVtYmVyLCBidXQKICAgIGhpc3RvcmljYWxseSBhbG1vc3QgYW55IGNoYXJhY3RlciBpcyBhbGxvd2VkIGluIGEgdGFnLiAgV2UgZGlzYWxsb3cKICAgIE5VTCBhbmQgbmV3bGluZSwgYXMgdGhpcyBzaW1wbGlmaWVzIG91ciBpbXBsZW1lbnRhdGlvbi4gICovCiAvKiBaZXJvIG9yIG1vcmUgaW5zdGFuY2VzIG9mIGJhY2tzbGFzaC1uZXdsaW5lLiAgRm9sbG93aW5nIEdDQywgYWxsb3cKICAgIHdoaXRlIHNwYWNlIGJldHdlZW4gdGhlIGJhY2tzbGFzaCBhbmQgdGhlIG5ld2xpbmUuICAqLwotI2xpbmUgMTAxNiAic2Nhbi1ncmFtLmMiCisjbGluZSAxMDUyICJzY2FuLWdyYW0uYyIKIAogI2RlZmluZSBJTklUSUFMIDAKLSNkZWZpbmUgU0NfQ09NTUVOVCAxCi0jZGVmaW5lIFNDX0xJTkVfQ09NTUVOVCAyCi0jZGVmaW5lIFNDX1lBQ0NfQ09NTUVOVCAzCi0jZGVmaW5lIFNDX1NUUklORyA0Ci0jZGVmaW5lIFNDX0NIQVJBQ1RFUiA1Ci0jZGVmaW5lIFNDX0FGVEVSX0lERU5USUZJRVIgNgotI2RlZmluZSBTQ19FU0NBUEVEX1NUUklORyA3Ci0jZGVmaW5lIFNDX0VTQ0FQRURfQ0hBUkFDVEVSIDgKLSNkZWZpbmUgU0NfUFJFX0NPREUgOQotI2RlZmluZSBTQ19CUkFDRURfQ09ERSAxMAotI2RlZmluZSBTQ19QUk9MT0dVRSAxMQotI2RlZmluZSBTQ19FUElMT0dVRSAxMgorI2RlZmluZSBTQ19ZQUNDX0NPTU1FTlQgMQorI2RlZmluZSBTQ19FU0NBUEVEX1NUUklORyAyCisjZGVmaW5lIFNDX0VTQ0FQRURfQ0hBUkFDVEVSIDMKKyNkZWZpbmUgU0NfQUZURVJfSURFTlRJRklFUiA0CisjZGVmaW5lIFNDX1BST0xPR1VFIDUKKyNkZWZpbmUgU0NfQlJBQ0VEX0NPREUgNgorI2RlZmluZSBTQ19FUElMT0dVRSA3CisjZGVmaW5lIFNDX0NPTU1FTlQgOAorI2RlZmluZSBTQ19MSU5FX0NPTU1FTlQgOQorI2RlZmluZSBTQ19TVFJJTkcgMTAKKyNkZWZpbmUgU0NfQ0hBUkFDVEVSIDExCisjZGVmaW5lIFNDX0JSQUNLRVRFRF9JRCAxMgorI2RlZmluZSBTQ19SRVRVUk5fQlJBQ0tFVEVEX0lEIDEzCiAKICNpZm5kZWYgWVlfTk9fVU5JU1REX0gKIC8qIFNwZWNpYWwgY2FzZSBmb3IgInVuaXN0ZC5oIiwgc2luY2UgaXQgaXMgbm9uLUFOU0kuIFdlIGluY2x1ZGUgaXQgd2F5CkBAIC0xMDQ2LDExICsxMDgzLDQ2IEBACiAKIC8qICVpZi1jLW9ubHkgUmVlbnRyYW50IHN0cnVjdHVyZSBhbmQgbWFjcm9zIChub24tQysrKS4gKi8KIC8qICVpZi1yZWVudHJhbnQgKi8KKy8qICVpZi1jLW9ubHkgKi8KKworc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHZvaWQgKTsKKworLyogJWVuZGlmICovCiAvKiAlaWYtcmVlbnRyYW50ICovCiAvKiAlZW5kaWYgKi8KKy8qICVlbmRpZiBFbmQgcmVlbnRyYW50IHN0cnVjdHVyZXMgYW5kIG1hY3Jvcy4gKi8KKworLyogQWNjZXNzb3IgbWV0aG9kcyB0byBnbG9iYWxzLgorICAgVGhlc2UgYXJlIG1hZGUgdmlzaWJsZSB0byBub24tcmVlbnRyYW50IHNjYW5uZXJzIGZvciBjb252ZW5pZW5jZS4gKi8KKworaW50IGdyYW1fbGV4X2Rlc3Ryb3kgKHZvaWQgKTsKKworaW50IGdyYW1fZ2V0X2RlYnVnICh2b2lkICk7CisKK3ZvaWQgZ3JhbV9zZXRfZGVidWcgKGludCBkZWJ1Z19mbGFnICApOworCitZWV9FWFRSQV9UWVBFIGdyYW1fZ2V0X2V4dHJhICh2b2lkICk7CisKK3ZvaWQgZ3JhbV9zZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkICApOworCitGSUxFICpncmFtX2dldF9pbiAodm9pZCApOworCit2b2lkIGdyYW1fc2V0X2luICAoRklMRSAqIGluX3N0ciAgKTsKKworRklMRSAqZ3JhbV9nZXRfb3V0ICh2b2lkICk7CisKK3ZvaWQgZ3JhbV9zZXRfb3V0ICAoRklMRSAqIG91dF9zdHIgICk7CisKK3l5X3NpemVfdCBncmFtX2dldF9sZW5nICh2b2lkICk7CisKK2NoYXIgKmdyYW1fZ2V0X3RleHQgKHZvaWQgKTsKKworaW50IGdyYW1fZ2V0X2xpbmVubyAodm9pZCApOworCit2b2lkIGdyYW1fc2V0X2xpbmVubyAoaW50IGxpbmVfbnVtYmVyICApOworCiAvKiAlaWYtYmlzb24tYnJpZGdlICovCiAvKiAlZW5kaWYgKi8KLS8qICVlbmRpZiBFbmQgcmVlbnRyYW50IHN0cnVjdHVyZXMgYW5kIG1hY3Jvcy4gKi8KIAogLyogTWFjcm9zIGFmdGVyIHRoaXMgcG9pbnQgY2FuIGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlvbnMgaW4KICAqIHNlY3Rpb24gMS4KQEAgLTExMDcsNyArMTE3OSw3IEBACiAvKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKICAqIHdlIG5vdyB1c2UgZndyaXRlKCkuCiAgKi8KLSNkZWZpbmUgRUNITyAodm9pZCkgZndyaXRlKCBncmFtX3RleHQsIGdyYW1fbGVuZywgMSwgZ3JhbV9vdXQgKQorI2RlZmluZSBFQ0hPIGRvIHsgaWYgKGZ3cml0ZSggZ3JhbV90ZXh0LCBncmFtX2xlbmcsIDEsIGdyYW1fb3V0ICkpIHt9IH0gd2hpbGUgKDApCiAvKiAlZW5kaWYgKi8KIC8qICVpZi1jKystb25seSBDKysgZGVmaW5pdGlvbiAqLwogLyogJWVuZGlmICovCkBAIC0xMjMyLDIwICsxMzA0LDE3IEBACiAJcmVnaXN0ZXIgaW50IHl5X2FjdDsKICAgICAKIC8qICUlIFs3LjBdIHVzZXIncyBkZWNsYXJhdGlvbnMgZ28gaGVyZSAqLwotI2xpbmUgMTY1ICJzY2FuLWdyYW0ubCIKKyNsaW5lIDEyMCAic2Nhbi1ncmFtLmwiCiAKIAogICAvKiBOZXN0aW5nIGxldmVsIG9mIHRoZSBjdXJyZW50IGNvZGUgaW4gYnJhY2VzLiAgKi8KLSAgaW50IGJyYWNlc19sZXZlbCBJRl9MSU5UICg9IDApOworICBpbnQgYnJhY2VzX2xldmVsIFBBQ0lGWV9DQyAoPSAwKTsKIAogICAvKiBQYXJlbnQgY29udGV4dCBzdGF0ZSwgd2hlbiBhcHBsaWNhYmxlLiAgKi8KLSAgaW50IGNvbnRleHRfc3RhdGUgSUZfTElOVCAoPSAwKTsKLQotICAvKiBUb2tlbiB0eXBlIHRvIHJldHVybiwgd2hlbiBhcHBsaWNhYmxlLiAgKi8KLSAgaW50IHRva2VuX3R5cGUgSUZfTElOVCAoPSAwKTsKKyAgaW50IGNvbnRleHRfc3RhdGUgUEFDSUZZX0NDICg9IDApOwogCiAgIC8qIExvY2F0aW9uIG9mIG1vc3QgcmVjZW50IGlkZW50aWZpZXIsIHdoZW4gYXBwbGljYWJsZS4gICovCi0gIGxvY2F0aW9uIGlkX2xvYyBJRl9MSU5UICg9IGVtcHR5X2xvY2F0aW9uKTsKKyAgbG9jYXRpb24gaWRfbG9jIFBBQ0lGWV9DQyAoPSBlbXB0eV9sb2NhdGlvbik7CiAKICAgLyogV2hlcmUgY29udGFpbmluZyBjb2RlIHN0YXJ0ZWQsIHdoZW4gYXBwbGljYWJsZS4gIEl0cyBpbml0aWFsCiAgICAgIHZhbHVlIGlzIHJlbGV2YW50IG9ubHkgd2hlbiBncmFtX2xleCBpcyBpbnZva2VkIGluIHRoZSBTQ19FUElMT0dVRQpAQCAtMTI1NCw3ICsxMzIzLDcgQEAKIAogICAvKiBXaGVyZSBjb250YWluaW5nIGNvbW1lbnQgb3Igc3RyaW5nIG9yIGNoYXJhY3RlciBsaXRlcmFsIHN0YXJ0ZWQsCiAgICAgIHdoZW4gYXBwbGljYWJsZS4gICovCi0gIGJvdW5kYXJ5IHRva2VuX3N0YXJ0IElGX0xJTlQgKD0gc2Nhbm5lcl9jdXJzb3IpOworICBib3VuZGFyeSB0b2tlbl9zdGFydCBQQUNJRllfQ0MgKD0gc2Nhbm5lcl9jdXJzb3IpOwogCiAKIApAQCAtMTI2MiwxMSArMTMzMSwxMSBAQAogICB8IFNjYW5uaW5nIHdoaXRlIHNwYWNlLiAgfAogICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0jbGluZSAxMjY2ICJzY2FuLWdyYW0uYyIKKyNsaW5lIDEzMzUgInNjYW4tZ3JhbS5jIgogCi0JaWYgKCAoeXlfaW5pdCkgKQorCWlmICggISh5eV9pbml0KSApCiAJCXsKLQkJKHl5X2luaXQpID0gMDsKKwkJKHl5X2luaXQpID0gMTsKIAogI2lmZGVmIFlZX1VTRVJfSU5JVAogCQlZWV9VU0VSX0lOSVQ7CkBAIC0xMzI2LDEzICsxMzk1LDEzIEBACiAJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCiAJCQkJewogCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ2MSApCisJCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ4MiApCiAJCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJCX0KIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJKyt5eV9jcDsKIAkJCX0KLQkJd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDQ2MCApOworCQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gNDgxICk7CiAJCXl5X2NwID0gKHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MpOwogCQl5eV9jdXJyZW50X3N0YXRlID0gKHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlKTsKIApAQCAtMTM3NiwyMSArMTQ0NSwyMSBAQAogLyogQ29tbWVudHMgYW5kIHdoaXRlIHNwYWNlLiAgKi8KIGNhc2UgMToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDE5NyAic2Nhbi1ncmFtLmwiCi13YXJuX2F0ICgqbG9jLCBfKCJzdHJheSBgLCcgdHJlYXRlZCBhcyB3aGl0ZSBzcGFjZSIpKTsKKyNsaW5lIDE0OSAic2Nhbi1ncmFtLmwiCit3YXJuX2F0ICgqbG9jLCBfKCJzdHJheSAnLCcgdHJlYXRlZCBhcyB3aGl0ZSBzcGFjZSIpKTsKIAlZWV9CUkVBSwogY2FzZSAyOgogLyogcnVsZSAyIGNhbiBtYXRjaCBlb2wgKi8KLSNsaW5lIDE5OSAic2Nhbi1ncmFtLmwiCisjbGluZSAxNTEgInNjYW4tZ3JhbS5sIgogY2FzZSAzOgogLyogcnVsZSAzIGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDE5OSAic2Nhbi1ncmFtLmwiCi07CisjbGluZSAxNTEgInNjYW4tZ3JhbS5sIgorY29udGludWU7CiAJWVlfQlJFQUsKIGNhc2UgNDoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDIwMCAic2Nhbi1ncmFtLmwiCisjbGluZSAxNTIgInNjYW4tZ3JhbS5sIgogewogICAgIHRva2VuX3N0YXJ0ID0gbG9jLT5zdGFydDsKICAgICBjb250ZXh0X3N0YXRlID0gWVlfU1RBUlQ7CkBAIC0xNDAyLDcgKzE0NzEsNyBAQAogY2FzZSA1OgogLyogcnVsZSA1IGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDIwOCAic2Nhbi1ncmFtLmwiCisjbGluZSAxNjAgInNjYW4tZ3JhbS5sIgogewogICAgIGhhbmRsZV9zeW5jbGluZSAoZ3JhbV90ZXh0ICsgc2l6ZW9mICIjbGluZSAiIC0gMSwgKmxvYyk7CiAgIH0KQEAgLTE0MTEsMjkyICsxNDgwLDMyNCBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogICB8IFNjYW5uaW5nIEJpc29uIGRpcmVjdGl2ZXMuICB8CiAgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEZvciBkaXJlY3RpdmVzIHRoYXQgYXJlIGFsc28gY29tbWFuZCBsaW5lIG9wdGlvbnMsIHRoZSByZWdleCBtdXN0IGJlCisJIiUuLi4iCisgICAgIGFmdGVyICJbLV9dInMgYXJlIHJlbW92ZWQsIGFuZCB0aGUgZGlyZWN0aXZlIG11c3QgbWF0Y2ggdGhlIC0tbG9uZworICAgICBvcHRpb24gbmFtZSwgd2l0aCBhIHNpbmdsZSBzdHJpbmcgYXJndW1lbnQuICBPdGhlcndpc2UsIGFkZCBleGNlcHRpb25zCisgICAgIHRvIC4uL2J1aWxkLWF1eC9jcm9zcy1vcHRpb25zLnBsLiAgKi8KIAogCiBjYXNlIDY6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAyMTkgInNjYW4tZ3JhbS5sIgorI2xpbmUgMTc4ICJzY2FuLWdyYW0ubCIKIHJldHVybiBQRVJDRU5UX05PTkFTU09DOwogCVlZX0JSRUFLCiBjYXNlIDc6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAyMjAgInNjYW4tZ3JhbS5sIgotcmV0dXJuIFBFUkNFTlRfREVCVUc7CisjbGluZSAxNzkgInNjYW4tZ3JhbS5sIgorcmV0dXJuIFBFUkNFTlRfQ09ERTsKIAlZWV9CUkVBSwogY2FzZSA4OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMjIxICJzY2FuLWdyYW0ubCIKLXJldHVybiBQRVJDRU5UX0RFRkFVTFRfUFJFQzsKKyNsaW5lIDE4MCAic2Nhbi1ncmFtLmwiCityZXR1cm4gUEVSQ0VOVF9ERUJVRzsKIAlZWV9CUkVBSwogY2FzZSA5OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMjIyICJzY2FuLWdyYW0ubCIKLXJldHVybiBQRVJDRU5UX0RFRklORTsKKyNsaW5lIDE4MSAic2Nhbi1ncmFtLmwiCityZXR1cm4gUEVSQ0VOVF9ERUZBVUxUX1BSRUM7CiAJWVlfQlJFQUsKIGNhc2UgMTA6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAyMjMgInNjYW4tZ3JhbS5sIgotcmV0dXJuIFBFUkNFTlRfREVGSU5FUzsKKyNsaW5lIDE4MiAic2Nhbi1ncmFtLmwiCityZXR1cm4gUEVSQ0VOVF9ERUZJTkU7CiAJWVlfQlJFQUsKIGNhc2UgMTE6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAyMjQgInNjYW4tZ3JhbS5sIgotdG9rZW5fdHlwZSA9IFBFUkNFTlRfREVTVFJVQ1RPUjsgQkVHSU4gU0NfUFJFX0NPREU7CisjbGluZSAxODMgInNjYW4tZ3JhbS5sIgorcmV0dXJuIFBFUkNFTlRfREVGSU5FUzsKIAlZWV9CUkVBSwogY2FzZSAxMjoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDIyNSAic2Nhbi1ncmFtLmwiCi1yZXR1cm4gUEVSQ0VOVF9EUFJFQzsKKyNsaW5lIDE4NCAic2Nhbi1ncmFtLmwiCityZXR1cm4gUEVSQ0VOVF9ERVNUUlVDVE9SOwogCVlZX0JSRUFLCiBjYXNlIDEzOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMjI2ICJzY2FuLWdyYW0ubCIKLXJldHVybiBQRVJDRU5UX0VSUk9SX1ZFUkJPU0U7CisjbGluZSAxODUgInNjYW4tZ3JhbS5sIgorcmV0dXJuIFBFUkNFTlRfRFBSRUM7CiAJWVlfQlJFQUsKIGNhc2UgMTQ6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAyMjcgInNjYW4tZ3JhbS5sIgotcmV0dXJuIFBFUkNFTlRfRVhQRUNUOworI2xpbmUgMTg2ICJzY2FuLWdyYW0ubCIKK3JldHVybiBQRVJDRU5UX0VSUk9SX1ZFUkJPU0U7CiAJWVlfQlJFQUsKIGNhc2UgMTU6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAyMjggInNjYW4tZ3JhbS5sIgotcmV0dXJuIFBFUkNFTlRfRVhQRUNUX1JSOworI2xpbmUgMTg3ICJzY2FuLWdyYW0ubCIKK3JldHVybiBQRVJDRU5UX0VYUEVDVDsKIAlZWV9CUkVBSwogY2FzZSAxNjoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDIyOSAic2Nhbi1ncmFtLmwiCi1yZXR1cm4gUEVSQ0VOVF9GSUxFX1BSRUZJWDsKKyNsaW5lIDE4OCAic2Nhbi1ncmFtLmwiCityZXR1cm4gUEVSQ0VOVF9FWFBFQ1RfUlI7CiAJWVlfQlJFQUsKIGNhc2UgMTc6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAyMzAgInNjYW4tZ3JhbS5sIgotcmV0dXJuIFBFUkNFTlRfWUFDQzsKKyNsaW5lIDE4OSAic2Nhbi1ncmFtLmwiCityZXR1cm4gUEVSQ0VOVF9GSUxFX1BSRUZJWDsKIAlZWV9CUkVBSwogY2FzZSAxODoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDIzMSAic2Nhbi1ncmFtLmwiCi10b2tlbl90eXBlID0gUEVSQ0VOVF9JTklUSUFMX0FDVElPTjsgQkVHSU4gU0NfUFJFX0NPREU7CisjbGluZSAxOTAgInNjYW4tZ3JhbS5sIgorcmV0dXJuIFBFUkNFTlRfWUFDQzsKIAlZWV9CUkVBSwogY2FzZSAxOToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDIzMiAic2Nhbi1ncmFtLmwiCi1yZXR1cm4gUEVSQ0VOVF9HTFJfUEFSU0VSOworI2xpbmUgMTkxICJzY2FuLWdyYW0ubCIKK3JldHVybiBQRVJDRU5UX0lOSVRJQUxfQUNUSU9OOwogCVlZX0JSRUFLCiBjYXNlIDIwOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMjMzICJzY2FuLWdyYW0ubCIKLXJldHVybiBQRVJDRU5UX0xFRlQ7CisjbGluZSAxOTIgInNjYW4tZ3JhbS5sIgorcmV0dXJuIFBFUkNFTlRfR0xSX1BBUlNFUjsKIAlZWV9CUkVBSwogY2FzZSAyMToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDIzNCAic2Nhbi1ncmFtLmwiCi10b2tlbl90eXBlID0gUEVSQ0VOVF9MRVhfUEFSQU07IEJFR0lOIFNDX1BSRV9DT0RFOworI2xpbmUgMTkzICJzY2FuLWdyYW0ubCIKK3JldHVybiBQRVJDRU5UX0xBTkdVQUdFOwogCVlZX0JSRUFLCiBjYXNlIDIyOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMjM1ICJzY2FuLWdyYW0ubCIKLXJldHVybiBQRVJDRU5UX0xPQ0FUSU9OUzsKKyNsaW5lIDE5NCAic2Nhbi1ncmFtLmwiCityZXR1cm4gUEVSQ0VOVF9MRUZUOwogCVlZX0JSRUFLCiBjYXNlIDIzOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMjM2ICJzY2FuLWdyYW0ubCIKLXJldHVybiBQRVJDRU5UX01FUkdFOworI2xpbmUgMTk1ICJzY2FuLWdyYW0ubCIKK3JldHVybiBQRVJDRU5UX0xFWF9QQVJBTTsKIAlZWV9CUkVBSwogY2FzZSAyNDoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDIzNyAic2Nhbi1ncmFtLmwiCi1yZXR1cm4gUEVSQ0VOVF9OQU1FX1BSRUZJWDsKKyNsaW5lIDE5NiAic2Nhbi1ncmFtLmwiCityZXR1cm4gUEVSQ0VOVF9MT0NBVElPTlM7CiAJWVlfQlJFQUsKIGNhc2UgMjU6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAyMzggInNjYW4tZ3JhbS5sIgotcmV0dXJuIFBFUkNFTlRfTk9fREVGQVVMVF9QUkVDOworI2xpbmUgMTk3ICJzY2FuLWdyYW0ubCIKK3JldHVybiBQRVJDRU5UX01FUkdFOwogCVlZX0JSRUFLCiBjYXNlIDI2OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMjM5ICJzY2FuLWdyYW0ubCIKLXJldHVybiBQRVJDRU5UX05PX0xJTkVTOworI2xpbmUgMTk4ICJzY2FuLWdyYW0ubCIKK3JldHVybiBQRVJDRU5UX05BTUVfUFJFRklYOwogCVlZX0JSRUFLCiBjYXNlIDI3OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMjQwICJzY2FuLWdyYW0ubCIKLXJldHVybiBQRVJDRU5UX05PTkFTU09DOworI2xpbmUgMTk5ICJzY2FuLWdyYW0ubCIKK3JldHVybiBQRVJDRU5UX05PX0RFRkFVTFRfUFJFQzsKIAlZWV9CUkVBSwogY2FzZSAyODoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDI0MSAic2Nhbi1ncmFtLmwiCi1yZXR1cm4gUEVSQ0VOVF9OT05ERVRFUk1JTklTVElDX1BBUlNFUjsKKyNsaW5lIDIwMCAic2Nhbi1ncmFtLmwiCityZXR1cm4gUEVSQ0VOVF9OT19MSU5FUzsKIAlZWV9CUkVBSwogY2FzZSAyOToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDI0MiAic2Nhbi1ncmFtLmwiCi1yZXR1cm4gUEVSQ0VOVF9OVEVSTTsKKyNsaW5lIDIwMSAic2Nhbi1ncmFtLmwiCityZXR1cm4gUEVSQ0VOVF9OT05BU1NPQzsKIAlZWV9CUkVBSwogY2FzZSAzMDoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDI0MyAic2Nhbi1ncmFtLmwiCi1yZXR1cm4gUEVSQ0VOVF9PVVRQVVQ7CisjbGluZSAyMDIgInNjYW4tZ3JhbS5sIgorcmV0dXJuIFBFUkNFTlRfTk9OREVURVJNSU5JU1RJQ19QQVJTRVI7CiAJWVlfQlJFQUsKIGNhc2UgMzE6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAyNDQgInNjYW4tZ3JhbS5sIgotdG9rZW5fdHlwZSA9IFBFUkNFTlRfUEFSU0VfUEFSQU07IEJFR0lOIFNDX1BSRV9DT0RFOworI2xpbmUgMjAzICJzY2FuLWdyYW0ubCIKK3JldHVybiBQRVJDRU5UX05URVJNOwogCVlZX0JSRUFLCiBjYXNlIDMyOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMjQ1ICJzY2FuLWdyYW0ubCIKLXJ1bGVfbGVuZ3RoLS07IHJldHVybiBQRVJDRU5UX1BSRUM7CisjbGluZSAyMDQgInNjYW4tZ3JhbS5sIgorcmV0dXJuIFBFUkNFTlRfT1VUUFVUOwogCVlZX0JSRUFLCiBjYXNlIDMzOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMjQ2ICJzY2FuLWdyYW0ubCIKLXRva2VuX3R5cGUgPSBQRVJDRU5UX1BSSU5URVI7IEJFR0lOIFNDX1BSRV9DT0RFOworI2xpbmUgMjA1ICJzY2FuLWdyYW0ubCIKK3JldHVybiBQRVJDRU5UX1BBUlNFX1BBUkFNOwogCVlZX0JSRUFLCiBjYXNlIDM0OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMjQ3ICJzY2FuLWdyYW0ubCIKLXJldHVybiBQRVJDRU5UX1BVUkVfUEFSU0VSOworI2xpbmUgMjA2ICJzY2FuLWdyYW0ubCIKK3JldHVybiBQRVJDRU5UX1BSRUM7CiAJWVlfQlJFQUsKIGNhc2UgMzU6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAyNDggInNjYW4tZ3JhbS5sIgotcmV0dXJuIFBFUkNFTlRfUkVRVUlSRTsKKyNsaW5lIDIwNyAic2Nhbi1ncmFtLmwiCityZXR1cm4gUEVSQ0VOVF9QUklOVEVSOwogCVlZX0JSRUFLCiBjYXNlIDM2OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMjQ5ICJzY2FuLWdyYW0ubCIKLXJldHVybiBQRVJDRU5UX1JJR0hUOworI2xpbmUgMjA4ICJzY2FuLWdyYW0ubCIKK3JldHVybiBQRVJDRU5UX1BVUkVfUEFSU0VSOwogCVlZX0JSRUFLCiBjYXNlIDM3OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMjUwICJzY2FuLWdyYW0ubCIKLXJldHVybiBQRVJDRU5UX1NLRUxFVE9OOworI2xpbmUgMjA5ICJzY2FuLWdyYW0ubCIKK3JldHVybiBQRVJDRU5UX1JFUVVJUkU7CiAJWVlfQlJFQUsKIGNhc2UgMzg6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAyNTEgInNjYW4tZ3JhbS5sIgotcmV0dXJuIFBFUkNFTlRfU1RBUlQ7CisjbGluZSAyMTAgInNjYW4tZ3JhbS5sIgorcmV0dXJuIFBFUkNFTlRfUklHSFQ7CiAJWVlfQlJFQUsKIGNhc2UgMzk6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAyNTIgInNjYW4tZ3JhbS5sIgotcmV0dXJuIFBFUkNFTlRfVE9LRU47CisjbGluZSAyMTEgInNjYW4tZ3JhbS5sIgorcmV0dXJuIFBFUkNFTlRfU0tFTEVUT047CiAJWVlfQlJFQUsKIGNhc2UgNDA6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAyNTMgInNjYW4tZ3JhbS5sIgotcmV0dXJuIFBFUkNFTlRfVE9LRU47CisjbGluZSAyMTIgInNjYW4tZ3JhbS5sIgorcmV0dXJuIFBFUkNFTlRfU1RBUlQ7CiAJWVlfQlJFQUsKIGNhc2UgNDE6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAyNTQgInNjYW4tZ3JhbS5sIgotcmV0dXJuIFBFUkNFTlRfVE9LRU5fVEFCTEU7CisjbGluZSAyMTMgInNjYW4tZ3JhbS5sIgorcmV0dXJuIFBFUkNFTlRfVE9LRU47CiAJWVlfQlJFQUsKIGNhc2UgNDI6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAyNTUgInNjYW4tZ3JhbS5sIgotcmV0dXJuIFBFUkNFTlRfVFlQRTsKKyNsaW5lIDIxNCAic2Nhbi1ncmFtLmwiCityZXR1cm4gUEVSQ0VOVF9UT0tFTjsKIAlZWV9CUkVBSwogY2FzZSA0MzoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDI1NiAic2Nhbi1ncmFtLmwiCi10b2tlbl90eXBlID0gUEVSQ0VOVF9VTklPTjsgQkVHSU4gU0NfUFJFX0NPREU7CisjbGluZSAyMTUgInNjYW4tZ3JhbS5sIgorcmV0dXJuIFBFUkNFTlRfVE9LRU5fVEFCTEU7CiAJWVlfQlJFQUsKIGNhc2UgNDQ6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAyNTcgInNjYW4tZ3JhbS5sIgotcmV0dXJuIFBFUkNFTlRfVkVSQk9TRTsKKyNsaW5lIDIxNiAic2Nhbi1ncmFtLmwiCityZXR1cm4gUEVSQ0VOVF9UWVBFOwogCVlZX0JSRUFLCiBjYXNlIDQ1OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMjU4ICJzY2FuLWdyYW0ubCIKLXJldHVybiBQRVJDRU5UX1lBQ0M7CisjbGluZSAyMTcgInNjYW4tZ3JhbS5sIgorcmV0dXJuIFBFUkNFTlRfVU5JT047CiAJWVlfQlJFQUsKIGNhc2UgNDY6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAyNjAgInNjYW4tZ3JhbS5sIgorI2xpbmUgMjE4ICJzY2FuLWdyYW0ubCIKK3JldHVybiBQRVJDRU5UX1ZFUkJPU0U7CisJWVlfQlJFQUsKK2Nhc2UgNDc6CitZWV9SVUxFX1NFVFVQCisjbGluZSAyMTkgInNjYW4tZ3JhbS5sIgorcmV0dXJuIFBFUkNFTlRfWUFDQzsKKwlZWV9CUkVBSworY2FzZSA0ODoKKy8qIHJ1bGUgNDggY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAorI2xpbmUgMjIxICJzY2FuLWdyYW0ubCIKIHsKICAgICBjb21wbGFpbl9hdCAoKmxvYywgXygiaW52YWxpZCBkaXJlY3RpdmU6ICVzIiksIHF1b3RlIChncmFtX3RleHQpKTsKICAgfQogCVlZX0JSRUFLCi1jYXNlIDQ3OgotWVlfUlVMRV9TRVRVUAotI2xpbmUgMjY0ICJzY2FuLWdyYW0ubCIKLXJldHVybiBFUVVBTDsKLQlZWV9CUkVBSwotY2FzZSA0ODoKLVlZX1JVTEVfU0VUVVAKLSNsaW5lIDI2NSAic2Nhbi1ncmFtLmwiCi1ydWxlX2xlbmd0aCA9IDA7IHJldHVybiBQSVBFOwotCVlZX0JSRUFLCiBjYXNlIDQ5OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMjY2ICJzY2FuLWdyYW0ubCIKLXJldHVybiBTRU1JQ09MT047CisjbGluZSAyMjUgInNjYW4tZ3JhbS5sIgorcmV0dXJuIEVRVUFMOwogCVlZX0JSRUFLCiBjYXNlIDUwOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMjY4ICJzY2FuLWdyYW0ubCIKLXsKLSAgICB2YWwtPnN5bWJvbCA9IHN5bWJvbF9nZXQgKGdyYW1fdGV4dCwgKmxvYyk7Ci0gICAgaWRfbG9jID0gKmxvYzsKLSAgICBpbmNyZW1lbnRfcnVsZV9sZW5ndGggKCpsb2MpOwotICAgIEJFR0lOIFNDX0FGVEVSX0lERU5USUZJRVI7Ci0gIH0KKyNsaW5lIDIyNiAic2Nhbi1ncmFtLmwiCityZXR1cm4gUElQRTsKIAlZWV9CUkVBSwogY2FzZSA1MToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDI3NSAic2Nhbi1ncmFtLmwiCisjbGluZSAyMjcgInNjYW4tZ3JhbS5sIgorcmV0dXJuIFNFTUlDT0xPTjsKKwlZWV9CUkVBSworY2FzZSA1MjoKK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDIyOCAic2Nhbi1ncmFtLmwiCityZXR1cm4gVFlQRV9UQUdfQU5ZOworCVlZX0JSRUFLCitjYXNlIDUzOgorWVlfUlVMRV9TRVRVUAorI2xpbmUgMjI5ICJzY2FuLWdyYW0ubCIKK3JldHVybiBUWVBFX1RBR19OT05FOworCVlZX0JSRUFLCitjYXNlIDU0OgorWVlfUlVMRV9TRVRVUAorI2xpbmUgMjMxICJzY2FuLWdyYW0ubCIKK3sKKyAgICB2YWwtPnVuaXFzdHIgPSB1bmlxc3RyX25ldyAoZ3JhbV90ZXh0KTsKKyAgICBpZF9sb2MgPSAqbG9jOworICAgIGJyYWNrZXRlZF9pZF9zdHIgPSBOVUxMOworICAgIEJFR0lOIFNDX0FGVEVSX0lERU5USUZJRVI7CisgIH0KKwlZWV9CUkVBSworY2FzZSA1NToKK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDIzOCAic2Nhbi1ncmFtLmwiCiB7CiAgICAgdmFsLT5pbnRlZ2VyID0gc2Nhbl9pbnRlZ2VyIChncmFtX3RleHQsIDEwLCAqbG9jKTsKICAgICByZXR1cm4gSU5UOwogICB9CiAJWVlfQlJFQUsKLWNhc2UgNTI6CitjYXNlIDU2OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMjc5ICJzY2FuLWdyYW0ubCIKKyNsaW5lIDI0MiAic2Nhbi1ncmFtLmwiCiB7CiAgICAgdmFsLT5pbnRlZ2VyID0gc2Nhbl9pbnRlZ2VyIChncmFtX3RleHQsIDE2LCAqbG9jKTsKICAgICByZXR1cm4gSU5UOwogICB9CiAJWVlfQlJFQUsKLS8qIENoYXJhY3RlcnMuICBXZSBkb24ndCBjaGVjayB0aGVyZSBpcyBvbmx5IG9uZS4gICovCi1jYXNlIDUzOgorLyogSWRlbnRpZmllcnMgbWF5IG5vdCBzdGFydCB3aXRoIGEgZGlnaXQuICBZZXQsIGRvbid0IHNpbGVudGx5CisgICAgIGFjY2VwdCAiMUZPTyIgYXMgIjEgRk9PIi4gICovCitjYXNlIDU3OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMjg1ICJzY2FuLWdyYW0ubCIKLVNUUklOR19HUk9XOyB0b2tlbl9zdGFydCA9IGxvYy0+c3RhcnQ7IEJFR0lOIFNDX0VTQ0FQRURfQ0hBUkFDVEVSOworI2xpbmUgMjQ5ICJzY2FuLWdyYW0ubCIKK3sKKyAgICBjb21wbGFpbl9hdCAoKmxvYywgXygiaW52YWxpZCBpZGVudGlmaWVyOiAlcyIpLCBxdW90ZSAoZ3JhbV90ZXh0KSk7CisgIH0KKwlZWV9CUkVBSworLyogQ2hhcmFjdGVycy4gICovCitjYXNlIDU4OgorWVlfUlVMRV9TRVRVUAorI2xpbmUgMjU0ICJzY2FuLWdyYW0ubCIKK3Rva2VuX3N0YXJ0ID0gbG9jLT5zdGFydDsgQkVHSU4gU0NfRVNDQVBFRF9DSEFSQUNURVI7CiAJWVlfQlJFQUsKIC8qIFN0cmluZ3MuICovCi1jYXNlIDU0OgorY2FzZSA1OToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDI4OCAic2Nhbi1ncmFtLmwiCisjbGluZSAyNTcgInNjYW4tZ3JhbS5sIgogdG9rZW5fc3RhcnQgPSBsb2MtPnN0YXJ0OyBCRUdJTiBTQ19FU0NBUEVEX1NUUklORzsKIAlZWV9CUkVBSwogLyogUHJvbG9ndWUuICovCi1jYXNlIDU1OgorY2FzZSA2MDoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDI5MSAic2Nhbi1ncmFtLmwiCisjbGluZSAyNjAgInNjYW4tZ3JhbS5sIgogY29kZV9zdGFydCA9IGxvYy0+c3RhcnQ7IEJFR0lOIFNDX1BST0xPR1VFOwogCVlZX0JSRUFLCiAvKiBDb2RlIGluIGJldHdlZW4gYnJhY2VzLiAgKi8KLWNhc2UgNTY6CitjYXNlIDYxOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMjk0ICJzY2FuLWdyYW0ubCIKKyNsaW5lIDI2MyAic2Nhbi1ncmFtLmwiCiB7Ci0gICAgaWYgKGN1cnJlbnRfcnVsZSAmJiBjdXJyZW50X3J1bGUtPmFjdGlvbikKLSAgICAgIGdyYW1tYXJfbWlkcnVsZV9hY3Rpb24gKCk7CiAgICAgU1RSSU5HX0dST1c7Ci0gICAgdG9rZW5fdHlwZSA9IEJSQUNFRF9DT0RFOwogICAgIGJyYWNlc19sZXZlbCA9IDA7CiAgICAgY29kZV9zdGFydCA9IGxvYy0+c3RhcnQ7CiAgICAgQkVHSU4gU0NfQlJBQ0VEX0NPREU7CiAgIH0KIAlZWV9CUkVBSwogLyogQSB0eXBlLiAqLwotY2FzZSA1NzoKK2Nhc2UgNjI6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAzMDUgInNjYW4tZ3JhbS5sIgorI2xpbmUgMjcxICJzY2FuLWdyYW0ubCIKIHsKICAgICBvYnN0YWNrX2dyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsIGdyYW1fdGV4dCArIDEsIGdyYW1fbGVuZyAtIDIpOwogICAgIFNUUklOR19GSU5JU0g7CkBAIC0xNzA1LDkgKzE4MDYsOSBAQAogICAgIHJldHVybiBUWVBFOwogICB9CiAJWVlfQlJFQUsKLWNhc2UgNTg6CitjYXNlIDYzOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMzEzICJzY2FuLWdyYW0ubCIKKyNsaW5lIDI3OSAic2Nhbi1ncmFtLmwiCiB7CiAgICAgc3RhdGljIGludCBwZXJjZW50X3BlcmNlbnRfY291bnQ7CiAgICAgaWYgKCsrcGVyY2VudF9wZXJjZW50X2NvdW50ID09IDIpCkBAIC0xNzE1LDE1ICsxODE2LDI3IEBACiAgICAgcmV0dXJuIFBFUkNFTlRfUEVSQ0VOVDsKICAgfQogCVlZX0JSRUFLCi1jYXNlIDU5OgorY2FzZSA2NDoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDMyMCAic2Nhbi1ncmFtLmwiCisjbGluZSAyODYgInNjYW4tZ3JhbS5sIgogewotICAgIGNvbXBsYWluX2F0ICgqbG9jLCBfKCJpbnZhbGlkIGNoYXJhY3RlcjogJXMiKSwgcXVvdGUgKGdyYW1fdGV4dCkpOworICAgIGJyYWNrZXRlZF9pZF9zdHIgPSBOVUxMOworICAgIGJyYWNrZXRlZF9pZF9zdGFydCA9IGxvYy0+c3RhcnQ7CisgICAgYnJhY2tldGVkX2lkX2NvbnRleHRfc3RhdGUgPSBZWV9TVEFSVDsKKyAgICBCRUdJTiBTQ19CUkFDS0VURURfSUQ7CisgIH0KKwlZWV9CUkVBSworY2FzZSA2NToKK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDI5MyAic2Nhbi1ncmFtLmwiCit7CisgICAgY29tcGxhaW5fYXQgKCpsb2MsICIlczogJXMiLAorICAgICAgICAgICAgICAgICBuZ2V0dGV4dCAoImludmFsaWQgY2hhcmFjdGVyIiwgImludmFsaWQgY2hhcmFjdGVycyIsIGdyYW1fbGVuZyksCisgICAgICAgICAgICAgICAgIHF1b3RlX21lbSAoZ3JhbV90ZXh0LCBncmFtX2xlbmcpKTsKICAgfQogCVlZX0JSRUFLCiBjYXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToKLSNsaW5lIDMyNCAic2Nhbi1ncmFtLmwiCisjbGluZSAyOTkgInNjYW4tZ3JhbS5sIgogewogICAgIGxvYy0+c3RhcnQgPSBsb2MtPmVuZCA9IHNjYW5uZXJfY3Vyc29yOwogICAgIHl5dGVybWluYXRlICgpOwpAQCAtMTczNSw5MiArMTg0OCwxODIgQEAKICAgYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCi1jYXNlIDYwOgorY2FzZSA2NjoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDMzNyAic2Nhbi1ncmFtLmwiCisjbGluZSAzMTIgInNjYW4tZ3JhbS5sIgogewotICAgIHJ1bGVfbGVuZ3RoID0gMDsKKyAgICBpZiAoYnJhY2tldGVkX2lkX3N0cikKKyAgICAgIHsKKwlST0xMQkFDS19DVVJSRU5UX1RPS0VOOworCUJFR0lOIFNDX1JFVFVSTl9CUkFDS0VURURfSUQ7CisJKmxvYyA9IGlkX2xvYzsKKwlyZXR1cm4gSUQ7CisgICAgICB9CisgICAgZWxzZQorICAgICAgeworCWJyYWNrZXRlZF9pZF9zdGFydCA9IGxvYy0+c3RhcnQ7CisJYnJhY2tldGVkX2lkX2NvbnRleHRfc3RhdGUgPSBZWV9TVEFSVDsKKwlCRUdJTiBTQ19CUkFDS0VURURfSUQ7CisgICAgICB9CisgIH0KKwlZWV9CUkVBSworY2FzZSA2NzoKK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDMyNyAic2Nhbi1ncmFtLmwiCit7CisgICAgQkVHSU4gKGJyYWNrZXRlZF9pZF9zdHIgPyBTQ19SRVRVUk5fQlJBQ0tFVEVEX0lEIDogSU5JVElBTCk7CiAgICAgKmxvYyA9IGlkX2xvYzsKLSAgICBCRUdJTiBJTklUSUFMOwogICAgIHJldHVybiBJRF9DT0xPTjsKICAgfQogCVlZX0JSRUFLCi1jYXNlIDYxOgorY2FzZSA2ODoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM0MyAic2Nhbi1ncmFtLmwiCisjbGluZSAzMzIgInNjYW4tZ3JhbS5sIgogewotICAgIHNjYW5uZXJfY3Vyc29yLmNvbHVtbiAtPSBtYnNud2lkdGggKGdyYW1fdGV4dCwgZ3JhbV9sZW5nLCAwKTsKLSAgICB5eWxlc3MgKDApOworICAgIFJPTExCQUNLX0NVUlJFTlRfVE9LRU47CisgICAgQkVHSU4gKGJyYWNrZXRlZF9pZF9zdHIgPyBTQ19SRVRVUk5fQlJBQ0tFVEVEX0lEIDogSU5JVElBTCk7CiAgICAgKmxvYyA9IGlkX2xvYzsKLSAgICBCRUdJTiBJTklUSUFMOwogICAgIHJldHVybiBJRDsKICAgfQogCVlZX0JSRUFLCiBjYXNlIFlZX1NUQVRFX0VPRihTQ19BRlRFUl9JREVOVElGSUVSKToKLSNsaW5lIDM1MCAic2Nhbi1ncmFtLmwiCisjbGluZSAzMzggInNjYW4tZ3JhbS5sIgogeworICAgIEJFR0lOIChicmFja2V0ZWRfaWRfc3RyID8gU0NfUkVUVVJOX0JSQUNLRVRFRF9JRCA6IElOSVRJQUwpOwogICAgICpsb2MgPSBpZF9sb2M7Ci0gICAgQkVHSU4gSU5JVElBTDsKICAgICByZXR1cm4gSUQ7CiAgIH0KIAlZWV9CUkVBSwogCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorICB8IFNjYW5uaW5nIGJyYWNrZXRlZCBpZGVudGlmaWVycy4gfAorICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisKK2Nhc2UgNjk6CitZWV9SVUxFX1NFVFVQCisjbGluZSAzNTEgInNjYW4tZ3JhbS5sIgoreworICAgIGlmIChicmFja2V0ZWRfaWRfc3RyKQorICAgICAgeworCWNvbXBsYWluX2F0ICgqbG9jLCBfKCJ1bmV4cGVjdGVkIGlkZW50aWZpZXIgaW4gYnJhY2tldGVkIG5hbWU6ICVzIiksCisJCSAgICAgcXVvdGUgKGdyYW1fdGV4dCkpOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKwlicmFja2V0ZWRfaWRfc3RyID0gdW5pcXN0cl9uZXcgKGdyYW1fdGV4dCk7CisJYnJhY2tldGVkX2lkX2xvYyA9ICpsb2M7CisgICAgICB9CisgIH0KKwlZWV9CUkVBSworY2FzZSA3MDoKK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDM2MyAic2Nhbi1ncmFtLmwiCit7CisgICAgQkVHSU4gYnJhY2tldGVkX2lkX2NvbnRleHRfc3RhdGU7CisgICAgaWYgKGJyYWNrZXRlZF9pZF9zdHIpCisgICAgICB7CisJaWYgKElOSVRJQUwgPT0gYnJhY2tldGVkX2lkX2NvbnRleHRfc3RhdGUpCisJICB7CisJICAgIHZhbC0+dW5pcXN0ciA9IGJyYWNrZXRlZF9pZF9zdHI7CisJICAgIGJyYWNrZXRlZF9pZF9zdHIgPSAwOworCSAgICAqbG9jID0gYnJhY2tldGVkX2lkX2xvYzsKKwkgICAgcmV0dXJuIEJSQUNLRVRFRF9JRDsKKwkgIH0KKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBjb21wbGFpbl9hdCAoKmxvYywgXygiYW4gaWRlbnRpZmllciBleHBlY3RlZCIpKTsKKyAgfQorCVlZX0JSRUFLCitjYXNlIDcxOgorWVlfUlVMRV9TRVRVUAorI2xpbmUgMzc5ICJzY2FuLWdyYW0ubCIKK3sKKyAgICBjb21wbGFpbl9hdCAoKmxvYywgIiVzOiAlcyIsCisgICAgICAgICAgICAgICAgIG5nZXR0ZXh0ICgiaW52YWxpZCBjaGFyYWN0ZXIgaW4gYnJhY2tldGVkIG5hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgY2hhcmFjdGVycyBpbiBicmFja2V0ZWQgbmFtZSIsIGdyYW1fbGVuZyksCisgICAgICAgICAgICAgICAgIHF1b3RlX21lbSAoZ3JhbV90ZXh0LCBncmFtX2xlbmcpKTsKKyAgfQorCVlZX0JSRUFLCitjYXNlIFlZX1NUQVRFX0VPRihTQ19CUkFDS0VURURfSUQpOgorI2xpbmUgMzg2ICJzY2FuLWdyYW0ubCIKK3sKKyAgICBCRUdJTiBicmFja2V0ZWRfaWRfY29udGV4dF9zdGF0ZTsKKyAgICB1bmV4cGVjdGVkX2VvZiAoYnJhY2tldGVkX2lkX3N0YXJ0LCAiXSIpOworICB9CisJWVlfQlJFQUsKKworCisKK2Nhc2UgNzI6CitZWV9SVUxFX1NFVFVQCisjbGluZSAzOTQgInNjYW4tZ3JhbS5sIgoreworICAgIFJPTExCQUNLX0NVUlJFTlRfVE9LRU47CisgICAgdmFsLT51bmlxc3RyID0gYnJhY2tldGVkX2lkX3N0cjsKKyAgICBicmFja2V0ZWRfaWRfc3RyID0gMDsKKyAgICAqbG9jID0gYnJhY2tldGVkX2lkX2xvYzsKKyAgICBCRUdJTiBJTklUSUFMOworICAgIHJldHVybiBCUkFDS0VURURfSUQ7CisgIH0KKwlZWV9CUkVBSworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLSAgfCBTY2FubmluZyBhIFlhY2MgY29tbWVudC4gIFRoZSBpbml0aWFsIGAvIConIGlzIGFscmVhZHkgZWF0ZW4uICB8CisgIHwgU2Nhbm5pbmcgYSBZYWNjIGNvbW1lbnQuICBUaGUgaW5pdGlhbCAnLyAqJyBpcyBhbHJlYWR5IGVhdGVuLiAgfAogICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCi1jYXNlIDYyOgorY2FzZSA3MzoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM2NCAic2Nhbi1ncmFtLmwiCisjbGluZSA0MTEgInNjYW4tZ3JhbS5sIgogQkVHSU4gY29udGV4dF9zdGF0ZTsKIAlZWV9CUkVBSwotY2FzZSA2MzoKLS8qIHJ1bGUgNjMgY2FuIG1hdGNoIGVvbCAqLworY2FzZSA3NDoKKy8qIHJ1bGUgNzQgY2FuIG1hdGNoIGVvbCAqLwogWVlfUlVMRV9TRVRVUAotI2xpbmUgMzY1ICJzY2FuLWdyYW0ubCIKLTsKKyNsaW5lIDQxMiAic2Nhbi1ncmFtLmwiCitjb250aW51ZTsKIAlZWV9CUkVBSwogY2FzZSBZWV9TVEFURV9FT0YoU0NfWUFDQ19DT01NRU5UKToKLSNsaW5lIDM2NiAic2Nhbi1ncmFtLmwiCisjbGluZSA0MTMgInNjYW4tZ3JhbS5sIgogdW5leHBlY3RlZF9lb2YgKHRva2VuX3N0YXJ0LCAiKi8iKTsgQkVHSU4gY29udGV4dF9zdGF0ZTsKIAlZWV9CUkVBSwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLSAgfCBTY2FubmluZyBhIEMgY29tbWVudC4gIFRoZSBpbml0aWFsIGAvIConIGlzIGFscmVhZHkgZWF0ZW4uICB8CisgIHwgU2Nhbm5pbmcgYSBDIGNvbW1lbnQuICBUaGUgaW5pdGlhbCAnLyAqJyBpcyBhbHJlYWR5IGVhdGVuLiAgfAogICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCi1jYXNlIDY0OgotLyogcnVsZSA2NCBjYW4gbWF0Y2ggZW9sICovCitjYXNlIDc1OgorLyogcnVsZSA3NSBjYW4gbWF0Y2ggZW9sICovCiBZWV9SVUxFX1NFVFVQCi0jbGluZSAzNzYgInNjYW4tZ3JhbS5sIgorI2xpbmUgNDIzICJzY2FuLWdyYW0ubCIKIFNUUklOR19HUk9XOyBCRUdJTiBjb250ZXh0X3N0YXRlOwogCVlZX0JSRUFLCiBjYXNlIFlZX1NUQVRFX0VPRihTQ19DT01NRU5UKToKLSNsaW5lIDM3NyAic2Nhbi1ncmFtLmwiCisjbGluZSA0MjQgInNjYW4tZ3JhbS5sIgogdW5leHBlY3RlZF9lb2YgKHRva2VuX3N0YXJ0LCAiKi8iKTsgQkVHSU4gY29udGV4dF9zdGF0ZTsKIAlZWV9CUkVBSwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotICB8IFNjYW5uaW5nIGEgbGluZSBjb21tZW50LiAgVGhlIGluaXRpYWwgYC8vJyBpcyBhbHJlYWR5IGVhdGVuLiAgfAorICB8IFNjYW5uaW5nIGEgbGluZSBjb21tZW50LiAgVGhlIGluaXRpYWwgJy8vJyBpcyBhbHJlYWR5IGVhdGVuLiAgfAogICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAKLWNhc2UgNjU6Ci0vKiBydWxlIDY1IGNhbiBtYXRjaCBlb2wgKi8KK2Nhc2UgNzY6CisvKiBydWxlIDc2IGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM4NyAic2Nhbi1ncmFtLmwiCisjbGluZSA0MzQgInNjYW4tZ3JhbS5sIgogU1RSSU5HX0dST1c7IEJFR0lOIGNvbnRleHRfc3RhdGU7CiAJWVlfQlJFQUsKLWNhc2UgNjY6Ci0vKiBydWxlIDY2IGNhbiBtYXRjaCBlb2wgKi8KK2Nhc2UgNzc6CisvKiBydWxlIDc3IGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM4OCAic2Nhbi1ncmFtLmwiCisjbGluZSA0MzUgInNjYW4tZ3JhbS5sIgogU1RSSU5HX0dST1c7CiAJWVlfQlJFQUsKIGNhc2UgWVlfU1RBVEVfRU9GKFNDX0xJTkVfQ09NTUVOVCk6Ci0jbGluZSAzODkgInNjYW4tZ3JhbS5sIgorI2xpbmUgNDM2ICJzY2FuLWdyYW0ubCIKIEJFR0lOIGNvbnRleHRfc3RhdGU7CiAJWVlfQlJFQUsKIApAQCAtMTgzMCwyNyArMjAzMywzMCBAQAogICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCi1jYXNlIDY3OgorY2FzZSA3ODoKKy8qIHJ1bGUgNzggY2FuIG1hdGNoIGVvbCAqLwogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDAwICJzY2FuLWdyYW0ubCIKKyNsaW5lIDQ0NyAic2Nhbi1ncmFtLmwiCiB7CisgICAgaWYgKGdyYW1fdGV4dFswXSA9PSAnXG4nKQorICAgICAgdW5leHBlY3RlZF9uZXdsaW5lICh0b2tlbl9zdGFydCwgIlwiIik7CiAgICAgU1RSSU5HX0ZJTklTSDsKICAgICBsb2MtPnN0YXJ0ID0gdG9rZW5fc3RhcnQ7CiAgICAgdmFsLT5jaGFycyA9IGxhc3Rfc3RyaW5nOwotICAgIGluY3JlbWVudF9ydWxlX2xlbmd0aCAoKmxvYyk7CiAgICAgQkVHSU4gSU5JVElBTDsKICAgICByZXR1cm4gU1RSSU5HOwogICB9CiAJWVlfQlJFQUsKLWNhc2UgNjg6Ci0vKiBydWxlIDY4IGNhbiBtYXRjaCBlb2wgKi8KLVlZX1JVTEVfU0VUVVAKLSNsaW5lIDQwOCAic2Nhbi1ncmFtLmwiCi11bmV4cGVjdGVkX25ld2xpbmUgKHRva2VuX3N0YXJ0LCAiXCIiKTsJQkVHSU4gSU5JVElBTDsKLQlZWV9CUkVBSwogY2FzZSBZWV9TVEFURV9FT0YoU0NfRVNDQVBFRF9TVFJJTkcpOgotI2xpbmUgNDA5ICJzY2FuLWdyYW0ubCIKLXVuZXhwZWN0ZWRfZW9mICh0b2tlbl9zdGFydCwgIlwiIik7CUJFR0lOIElOSVRJQUw7CisjbGluZSA0NTYgInNjYW4tZ3JhbS5sIgoreworICAgIHVuZXhwZWN0ZWRfZW9mICh0b2tlbl9zdGFydCwgIlwiIik7CisgICAgU1RSSU5HX0ZJTklTSDsKKyAgICBsb2MtPnN0YXJ0ID0gdG9rZW5fc3RhcnQ7CisgICAgdmFsLT5jaGFycyA9IGxhc3Rfc3RyaW5nOworICAgIEJFR0lOIElOSVRJQUw7CisgICAgcmV0dXJuIFNUUklORzsKKyAgfQogCVlZX0JSRUFLCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KQEAgLTE4NTksNDIgKzIwNjUsNjEgQEAKICAgYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAKLWNhc2UgNjk6CitjYXNlIDc5OgorLyogcnVsZSA3OSBjYW4gbWF0Y2ggZW9sICovCiBZWV9SVUxFX1NFVFVQCi0jbGluZSA0MTkgInNjYW4tZ3JhbS5sIgorI2xpbmUgNDczICJzY2FuLWdyYW0ubCIKIHsKLSAgICB1bnNpZ25lZCBjaGFyIGxhc3Rfc3RyaW5nXzE7Ci0gICAgU1RSSU5HX0dST1c7CiAgICAgU1RSSU5HX0ZJTklTSDsKICAgICBsb2MtPnN0YXJ0ID0gdG9rZW5fc3RhcnQ7Ci0gICAgdmFsLT5zeW1ib2wgPSBzeW1ib2xfZ2V0IChxdW90ZWFyZ19zdHlsZSAoZXNjYXBlX3F1b3Rpbmdfc3R5bGUsCi0JCQkJCSAgICAgIGxhc3Rfc3RyaW5nKSwKLQkJCSAgICAgICpsb2MpOwotICAgIHN5bWJvbF9jbGFzc19zZXQgKHZhbC0+c3ltYm9sLCB0b2tlbl9zeW0sICpsb2MsIGZhbHNlKTsKLSAgICBsYXN0X3N0cmluZ18xID0gbGFzdF9zdHJpbmdbMV07Ci0gICAgc3ltYm9sX3VzZXJfdG9rZW5fbnVtYmVyX3NldCAodmFsLT5zeW1ib2wsIGxhc3Rfc3RyaW5nXzEsICpsb2MpOworICAgIHZhbC0+Y2hhcmFjdGVyID0gbGFzdF9zdHJpbmdbMF07CisgICAgeworICAgICAgLyogRklYTUU6IEV2ZW50dWFsbHksIG1ha2UgdGhlc2UgZXJyb3JzLiAgKi8KKyAgICAgIGlmIChsYXN0X3N0cmluZ1swXSA9PSAnXDAnKQorICAgICAgICB7CisgICAgICAgICAgd2Fybl9hdCAoKmxvYywgXygiZW1wdHkgY2hhcmFjdGVyIGxpdGVyYWwiKSk7CisgICAgICAgICAgLyogJ1wwJyBzZWVtcyBkYW5nZXJvdXMgZXZlbiBpZiB3ZSBhcmUgYWJvdXQgdG8gY29tcGxhaW4uICAqLworICAgICAgICAgIHZhbC0+Y2hhcmFjdGVyID0gJ1wnJzsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAobGFzdF9zdHJpbmdbMV0gIT0gJ1wwJykKKyAgICAgICAgd2Fybl9hdCAoKmxvYywgXygiZXh0cmEgY2hhcmFjdGVycyBpbiBjaGFyYWN0ZXIgbGl0ZXJhbCIpKTsKKyAgICB9CisgICAgaWYgKGdyYW1fdGV4dFswXSA9PSAnXG4nKQorICAgICAgdW5leHBlY3RlZF9uZXdsaW5lICh0b2tlbl9zdGFydCwgIiciKTsKICAgICBTVFJJTkdfRlJFRTsKLSAgICBpbmNyZW1lbnRfcnVsZV9sZW5ndGggKCpsb2MpOwogICAgIEJFR0lOIElOSVRJQUw7Ci0gICAgcmV0dXJuIElEOworICAgIHJldHVybiBDSEFSOwogICB9CiAJWVlfQlJFQUsKLWNhc2UgNzA6Ci0vKiBydWxlIDcwIGNhbiBtYXRjaCBlb2wgKi8KLVlZX1JVTEVfU0VUVVAKLSNsaW5lIDQzNSAic2Nhbi1ncmFtLmwiCi11bmV4cGVjdGVkX25ld2xpbmUgKHRva2VuX3N0YXJ0LCAiJyIpOwlCRUdJTiBJTklUSUFMOwotCVlZX0JSRUFLCiBjYXNlIFlZX1NUQVRFX0VPRihTQ19FU0NBUEVEX0NIQVJBQ1RFUik6Ci0jbGluZSA0MzYgInNjYW4tZ3JhbS5sIgotdW5leHBlY3RlZF9lb2YgKHRva2VuX3N0YXJ0LCAiJyIpOwlCRUdJTiBJTklUSUFMOworI2xpbmUgNDk0ICJzY2FuLWdyYW0ubCIKK3sKKyAgICBTVFJJTkdfRklOSVNIOworICAgIGxvYy0+c3RhcnQgPSB0b2tlbl9zdGFydDsKKyAgICB2YWwtPmNoYXJhY3RlciA9IGxhc3Rfc3RyaW5nWzBdOworICAgIHsKKyAgICAgIC8qIEZJWE1FOiBFdmVudHVhbGx5LCBtYWtlIHRoZXNlIGVycm9ycy4gICovCisgICAgICBpZiAobGFzdF9zdHJpbmdbMF0gPT0gJ1wwJykKKyAgICAgICAgeworICAgICAgICAgIHdhcm5fYXQgKCpsb2MsIF8oImVtcHR5IGNoYXJhY3RlciBsaXRlcmFsIikpOworICAgICAgICAgIC8qICdcMCcgc2VlbXMgZGFuZ2Vyb3VzIGV2ZW4gaWYgd2UgYXJlIGFib3V0IHRvIGNvbXBsYWluLiAgKi8KKyAgICAgICAgICB2YWwtPmNoYXJhY3RlciA9ICdcJyc7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGxhc3Rfc3RyaW5nWzFdICE9ICdcMCcpCisgICAgICAgIHdhcm5fYXQgKCpsb2MsIF8oImV4dHJhIGNoYXJhY3RlcnMgaW4gY2hhcmFjdGVyIGxpdGVyYWwiKSk7CisgICAgfQorICAgIHVuZXhwZWN0ZWRfZW9mICh0b2tlbl9zdGFydCwgIiciKTsKKyAgICBTVFJJTkdfRlJFRTsKKyAgICBCRUdJTiBJTklUSUFMOworICAgIHJldHVybiBDSEFSOworICB9CiAJWVlfQlJFQUsKIAogCiAKLWNhc2UgNzE6CitjYXNlIDgwOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDQxICJzY2FuLWdyYW0ubCIKKyNsaW5lIDUxOCAic2Nhbi1ncmFtLmwiCiBjb21wbGFpbl9hdCAoKmxvYywgXygiaW52YWxpZCBudWxsIGNoYXJhY3RlciIpKTsKIAlZWV9CUkVBSwogCkBAIC0xOTAzLDk0ICsyMTI4LDk2IEBACiAgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCi1jYXNlIDcyOgotWVlfUlVMRV9TRVRVUAotI2xpbmUgNDUxICJzY2FuLWdyYW0ubCIKLXsKLSAgICB1bnNpZ25lZCBsb25nIGludCBjID0gc3RydG91bCAoZ3JhbV90ZXh0ICsgMSwgTlVMTCwgOCk7Ci0gICAgaWYgKFVDSEFSX01BWCA8IGMpCi0gICAgICBjb21wbGFpbl9hdCAoKmxvYywgXygiaW52YWxpZCBlc2NhcGUgc2VxdWVuY2U6ICVzIiksIHF1b3RlIChncmFtX3RleHQpKTsKLSAgICBlbHNlIGlmICghIGMpCi0gICAgICBjb21wbGFpbl9hdCAoKmxvYywgXygiaW52YWxpZCBudWxsIGNoYXJhY3RlcjogJXMiKSwgcXVvdGUgKGdyYW1fdGV4dCkpOwotICAgIGVsc2UKLSAgICAgIG9ic3RhY2tfMWdyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsIGMpOwotICB9Ci0JWVlfQlJFQUsKLWNhc2UgNzM6Ci1ZWV9SVUxFX1NFVFVQCi0jbGluZSA0NjEgInNjYW4tZ3JhbS5sIgotewotICAgIHZlcmlmeSAoVUNIQVJfTUFYIDwgVUxPTkdfTUFYKTsKLSAgICB1bnNpZ25lZCBsb25nIGludCBjID0gc3RydG91bCAoZ3JhbV90ZXh0ICsgMiwgTlVMTCwgMTYpOwotICAgIGlmIChVQ0hBUl9NQVggPCBjKQotICAgICAgY29tcGxhaW5fYXQgKCpsb2MsIF8oImludmFsaWQgZXNjYXBlIHNlcXVlbmNlOiAlcyIpLCBxdW90ZSAoZ3JhbV90ZXh0KSk7Ci0gICAgZWxzZSBpZiAoISBjKQotICAgICAgY29tcGxhaW5fYXQgKCpsb2MsIF8oImludmFsaWQgbnVsbCBjaGFyYWN0ZXI6ICVzIiksIHF1b3RlIChncmFtX3RleHQpKTsKLSAgICBlbHNlCi0gICAgICBvYnN0YWNrXzFncm93ICgmb2JzdGFja19mb3Jfc3RyaW5nLCBjKTsKLSAgfQotCVlZX0JSRUFLCi1jYXNlIDc0OgotWVlfUlVMRV9TRVRVUAotI2xpbmUgNDcyICJzY2FuLWdyYW0ubCIKLW9ic3RhY2tfMWdyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICdcYScpOwotCVlZX0JSRUFLCi1jYXNlIDc1OgotWVlfUlVMRV9TRVRVUAotI2xpbmUgNDczICJzY2FuLWdyYW0ubCIKLW9ic3RhY2tfMWdyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICdcYicpOwotCVlZX0JSRUFLCi1jYXNlIDc2OgotWVlfUlVMRV9TRVRVUAotI2xpbmUgNDc0ICJzY2FuLWdyYW0ubCIKLW9ic3RhY2tfMWdyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICdcZicpOwotCVlZX0JSRUFLCi1jYXNlIDc3OgotWVlfUlVMRV9TRVRVUAotI2xpbmUgNDc1ICJzY2FuLWdyYW0ubCIKLW9ic3RhY2tfMWdyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICdcbicpOwotCVlZX0JSRUFLCi1jYXNlIDc4OgotWVlfUlVMRV9TRVRVUAotI2xpbmUgNDc2ICJzY2FuLWdyYW0ubCIKLW9ic3RhY2tfMWdyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICdccicpOwotCVlZX0JSRUFLCi1jYXNlIDc5OgotWVlfUlVMRV9TRVRVUAotI2xpbmUgNDc3ICJzY2FuLWdyYW0ubCIKLW9ic3RhY2tfMWdyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICdcdCcpOwotCVlZX0JSRUFLCi1jYXNlIDgwOgotWVlfUlVMRV9TRVRVUAotI2xpbmUgNDc4ICJzY2FuLWdyYW0ubCIKLW9ic3RhY2tfMWdyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICdcdicpOwotCVlZX0JSRUFLCi0vKiBcXFtcIlwnP1xcXSB3b3VsZCBiZSBzaG9ydGVyLCBidXQgaXQgY29uZnVzZXMgeGdldHRleHQuICAqLwogY2FzZSA4MToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDQ4MSAic2Nhbi1ncmFtLmwiCi1vYnN0YWNrXzFncm93ICgmb2JzdGFja19mb3Jfc3RyaW5nLCBncmFtX3RleHRbMV0pOworI2xpbmUgNTI4ICJzY2FuLWdyYW0ubCIKK3sKKyAgICB1bnNpZ25lZCBsb25nIGludCBjID0gc3RydG91bCAoZ3JhbV90ZXh0ICsgMSwgTlVMTCwgOCk7CisgICAgaWYgKCFjIHx8IFVDSEFSX01BWCA8IGMpCisgICAgICBjb21wbGFpbl9hdCAoKmxvYywgXygiaW52YWxpZCBudW1iZXIgYWZ0ZXIgXFwtZXNjYXBlOiAlcyIpLAorICAgICAgICAgICAgICAgICAgIGdyYW1fdGV4dCsxKTsKKyAgICBlbHNlCisgICAgICBvYnN0YWNrXzFncm93ICgmb2JzdGFja19mb3Jfc3RyaW5nLCBjKTsKKyAgfQogCVlZX0JSRUFLCiBjYXNlIDgyOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDgzICJzY2FuLWdyYW0ubCIKKyNsaW5lIDUzNyAic2Nhbi1ncmFtLmwiCiB7Ci0gICAgaW50IGMgPSBjb252ZXJ0X3Vjbl90b19ieXRlIChncmFtX3RleHQpOwotICAgIGlmIChjIDwgMCkKLSAgICAgIGNvbXBsYWluX2F0ICgqbG9jLCBfKCJpbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZTogJXMiKSwgcXVvdGUgKGdyYW1fdGV4dCkpOwotICAgIGVsc2UgaWYgKCEgYykKLSAgICAgIGNvbXBsYWluX2F0ICgqbG9jLCBfKCJpbnZhbGlkIG51bGwgY2hhcmFjdGVyOiAlcyIpLCBxdW90ZSAoZ3JhbV90ZXh0KSk7CisgICAgdmVyaWZ5IChVQ0hBUl9NQVggPCBVTE9OR19NQVgpOworICAgIHVuc2lnbmVkIGxvbmcgaW50IGMgPSBzdHJ0b3VsIChncmFtX3RleHQgKyAyLCBOVUxMLCAxNik7CisgICAgaWYgKCFjIHx8IFVDSEFSX01BWCA8IGMpCisgICAgICBjb21wbGFpbl9hdCAoKmxvYywgXygiaW52YWxpZCBudW1iZXIgYWZ0ZXIgXFwtZXNjYXBlOiAlcyIpLAorICAgICAgICAgICAgICAgICAgIGdyYW1fdGV4dCsxKTsKICAgICBlbHNlCiAgICAgICBvYnN0YWNrXzFncm93ICgmb2JzdGFja19mb3Jfc3RyaW5nLCBjKTsKICAgfQogCVlZX0JSRUFLCiBjYXNlIDgzOgotLyogcnVsZSA4MyBjYW4gbWF0Y2ggZW9sICovCiBZWV9SVUxFX1NFVFVQCi0jbGluZSA0OTIgInNjYW4tZ3JhbS5sIgorI2xpbmUgNTQ3ICJzY2FuLWdyYW0ubCIKK29ic3RhY2tfMWdyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICdcYScpOworCVlZX0JSRUFLCitjYXNlIDg0OgorWVlfUlVMRV9TRVRVUAorI2xpbmUgNTQ4ICJzY2FuLWdyYW0ubCIKK29ic3RhY2tfMWdyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICdcYicpOworCVlZX0JSRUFLCitjYXNlIDg1OgorWVlfUlVMRV9TRVRVUAorI2xpbmUgNTQ5ICJzY2FuLWdyYW0ubCIKK29ic3RhY2tfMWdyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICdcZicpOworCVlZX0JSRUFLCitjYXNlIDg2OgorWVlfUlVMRV9TRVRVUAorI2xpbmUgNTUwICJzY2FuLWdyYW0ubCIKK29ic3RhY2tfMWdyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICdcbicpOworCVlZX0JSRUFLCitjYXNlIDg3OgorWVlfUlVMRV9TRVRVUAorI2xpbmUgNTUxICJzY2FuLWdyYW0ubCIKK29ic3RhY2tfMWdyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICdccicpOworCVlZX0JSRUFLCitjYXNlIDg4OgorWVlfUlVMRV9TRVRVUAorI2xpbmUgNTUyICJzY2FuLWdyYW0ubCIKK29ic3RhY2tfMWdyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICdcdCcpOworCVlZX0JSRUFLCitjYXNlIDg5OgorWVlfUlVMRV9TRVRVUAorI2xpbmUgNTUzICJzY2FuLWdyYW0ubCIKK29ic3RhY2tfMWdyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICdcdicpOworCVlZX0JSRUFLCisvKiBcXFtcIlwnP1xcXSB3b3VsZCBiZSBzaG9ydGVyLCBidXQgaXQgY29uZnVzZXMgeGdldHRleHQuICAqLworY2FzZSA5MDoKK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDU1NiAic2Nhbi1ncmFtLmwiCitvYnN0YWNrXzFncm93ICgmb2JzdGFja19mb3Jfc3RyaW5nLCBncmFtX3RleHRbMV0pOworCVlZX0JSRUFLCitjYXNlIDkxOgorWVlfUlVMRV9TRVRVUAorI2xpbmUgNTU4ICJzY2FuLWdyYW0ubCIKIHsKLSAgICBjb21wbGFpbl9hdCAoKmxvYywgXygidW5yZWNvZ25pemVkIGVzY2FwZSBzZXF1ZW5jZTogJXMiKSwgcXVvdGUgKGdyYW1fdGV4dCkpOwotICAgIFNUUklOR19HUk9XOworICAgIGludCBjID0gY29udmVydF91Y25fdG9fYnl0ZSAoZ3JhbV90ZXh0KTsKKyAgICBpZiAoYyA8PSAwKQorICAgICAgY29tcGxhaW5fYXQgKCpsb2MsIF8oImludmFsaWQgbnVtYmVyIGFmdGVyIFxcLWVzY2FwZTogJXMiKSwKKyAgICAgICAgICAgICAgICAgICBncmFtX3RleHQrMSk7CisgICAgZWxzZQorICAgICAgb2JzdGFja18xZ3JvdyAoJm9ic3RhY2tfZm9yX3N0cmluZywgYyk7CisgIH0KKwlZWV9CUkVBSworY2FzZSA5MjoKKy8qIHJ1bGUgOTIgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAorI2xpbmUgNTY2ICJzY2FuLWdyYW0ubCIKK3sKKyAgICBjaGFyIGNvbnN0ICpwID0gZ3JhbV90ZXh0ICsgMTsKKyAgICAvKiBRdW90ZSBvbmx5IGlmIGVzY2FwaW5nIHdvbid0IG1ha2UgdGhlIGNoYXJhY3RlciB2aXNpYmxlLiAgKi8KKyAgICBpZiAoY19pc3NwYWNlICgodW5zaWduZWQgY2hhcikgKnApICYmIGNfaXNwcmludCAoKHVuc2lnbmVkIGNoYXIpICpwKSkKKyAgICAgIHAgPSBxdW90ZSAocCk7CisgICAgZWxzZQorICAgICAgcCA9IHF1b3RlYXJnX3N0eWxlX21lbSAoZXNjYXBlX3F1b3Rpbmdfc3R5bGUsIHAsIDEpOworICAgIGNvbXBsYWluX2F0ICgqbG9jLCBfKCJpbnZhbGlkIGNoYXJhY3RlciBhZnRlciBcXC1lc2NhcGU6ICVzIiksIHApOwogICB9CiAJWVlfQlJFQUsKIApAQCAtMTk5OSw0NiArMjIyNiw0NiBAQAogICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAKLWNhc2UgODQ6Ci0vKiBydWxlIDg0IGNhbiBtYXRjaCBlb2wgKi8KK2Nhc2UgOTM6CisvKiBydWxlIDkzIGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDUwNCAic2Nhbi1ncmFtLmwiCisjbGluZSA1ODMgInNjYW4tZ3JhbS5sIgogU1RSSU5HX0dST1c7CiAJWVlfQlJFQUsKIAogCiAKLWNhc2UgODU6CitjYXNlIDk0OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNTA5ICJzY2FuLWdyYW0ubCIKKyNsaW5lIDU4OCAic2Nhbi1ncmFtLmwiCiBTVFJJTkdfR1JPVzsgQkVHSU4gY29udGV4dF9zdGF0ZTsKIAlZWV9CUkVBSwotY2FzZSA4NjoKLS8qIHJ1bGUgODYgY2FuIG1hdGNoIGVvbCAqLworY2FzZSA5NToKKy8qIHJ1bGUgOTUgY2FuIG1hdGNoIGVvbCAqLwogWVlfUlVMRV9TRVRVUAotI2xpbmUgNTEwICJzY2FuLWdyYW0ubCIKKyNsaW5lIDU4OSAic2Nhbi1ncmFtLmwiCiB1bmV4cGVjdGVkX25ld2xpbmUgKHRva2VuX3N0YXJ0LCAiJyIpOyBCRUdJTiBjb250ZXh0X3N0YXRlOwogCVlZX0JSRUFLCiBjYXNlIFlZX1NUQVRFX0VPRihTQ19DSEFSQUNURVIpOgotI2xpbmUgNTExICJzY2FuLWdyYW0ubCIKKyNsaW5lIDU5MCAic2Nhbi1ncmFtLmwiCiB1bmV4cGVjdGVkX2VvZiAodG9rZW5fc3RhcnQsICInIik7IEJFR0lOIGNvbnRleHRfc3RhdGU7CiAJWVlfQlJFQUsKIAogCiAKLWNhc2UgODc6CitjYXNlIDk2OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNTE2ICJzY2FuLWdyYW0ubCIKKyNsaW5lIDU5NSAic2Nhbi1ncmFtLmwiCiBTVFJJTkdfR1JPVzsgQkVHSU4gY29udGV4dF9zdGF0ZTsKIAlZWV9CUkVBSwotY2FzZSA4ODoKLS8qIHJ1bGUgODggY2FuIG1hdGNoIGVvbCAqLworY2FzZSA5NzoKKy8qIHJ1bGUgOTcgY2FuIG1hdGNoIGVvbCAqLwogWVlfUlVMRV9TRVRVUAotI2xpbmUgNTE3ICJzY2FuLWdyYW0ubCIKKyNsaW5lIDU5NiAic2Nhbi1ncmFtLmwiCiB1bmV4cGVjdGVkX25ld2xpbmUgKHRva2VuX3N0YXJ0LCAiXCIiKTsgQkVHSU4gY29udGV4dF9zdGF0ZTsKIAlZWV9CUkVBSwogY2FzZSBZWV9TVEFURV9FT0YoU0NfU1RSSU5HKToKLSNsaW5lIDUxOCAic2Nhbi1ncmFtLmwiCisjbGluZSA1OTcgInNjYW4tZ3JhbS5sIgogdW5leHBlY3RlZF9lb2YgKHRva2VuX3N0YXJ0LCAiXCIiKTsgQkVHSU4gY29udGV4dF9zdGF0ZTsKIAlZWV9CUkVBSwogCkBAIC0yMDQ3LDkgKzIyNzQsOSBAQAogICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCi1jYXNlIDg5OgorY2FzZSA5ODoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDUyOCAic2Nhbi1ncmFtLmwiCisjbGluZSA2MDcgInNjYW4tZ3JhbS5sIgogewogICAgIFNUUklOR19HUk9XOwogICAgIGNvbnRleHRfc3RhdGUgPSBZWV9TVEFSVDsKQEAgLTIwNTcsOSArMjI4NCw5IEBACiAgICAgQkVHSU4gU0NfQ0hBUkFDVEVSOwogICB9CiAJWVlfQlJFQUsKLWNhc2UgOTA6CitjYXNlIDk5OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNTM0ICJzY2FuLWdyYW0ubCIKKyNsaW5lIDYxMyAic2Nhbi1ncmFtLmwiCiB7CiAgICAgU1RSSU5HX0dST1c7CiAgICAgY29udGV4dF9zdGF0ZSA9IFlZX1NUQVJUOwpAQCAtMjA2NywxMCArMjI5NCwxMCBAQAogICAgIEJFR0lOIFNDX1NUUklORzsKICAgfQogCVlZX0JSRUFLCi1jYXNlIDkxOgotLyogcnVsZSA5MSBjYW4gbWF0Y2ggZW9sICovCitjYXNlIDEwMDoKKy8qIHJ1bGUgMTAwIGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDU0MCAic2Nhbi1ncmFtLmwiCisjbGluZSA2MTkgInNjYW4tZ3JhbS5sIgogewogICAgIFNUUklOR19HUk9XOwogICAgIGNvbnRleHRfc3RhdGUgPSBZWV9TVEFSVDsKQEAgLTIwNzgsMTAgKzIzMDUsMTAgQEAKICAgICBCRUdJTiBTQ19DT01NRU5UOwogICB9CiAJWVlfQlJFQUsKLWNhc2UgOTI6Ci0vKiBydWxlIDkyIGNhbiBtYXRjaCBlb2wgKi8KK2Nhc2UgMTAxOgorLyogcnVsZSAxMDEgY2FuIG1hdGNoIGVvbCAqLwogWVlfUlVMRV9TRVRVUAotI2xpbmUgNTQ2ICJzY2FuLWdyYW0ubCIKKyNsaW5lIDYyNSAic2Nhbi1ncmFtLmwiCiB7CiAgICAgU1RSSU5HX0dST1c7CiAgICAgY29udGV4dF9zdGF0ZSA9IFlZX1NUQVJUOwpAQCAtMjA4OSwxMzYgKzIzMTYsNTkgQEAKICAgfQogCVlZX0JSRUFLCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotICB8IFNjYW5uaW5nIGFmdGVyICV1bmlvbiBldGMuLCBwb3NzaWJseSBmb2xsb3dlZCBieSB3aGl0ZSBzcGFjZS4gIHwKLSAgfCBGb3IgJXVuaW9uIG9ubHksIGFsbG93IGFyYml0cmFyeSBDIGNvZGUgdG8gYXBwZWFyIGJlZm9yZSB0aGUgICB8Ci0gIHwgZm9sbG93aW5nIGJyYWNlLCBhcyBhbiBleHRlbnNpb24gdG8gUE9TSVguCQkJICAgfAotICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisgIHwgU2Nhbm5pbmcgc29tZSBjb2RlIGluIGJyYWNlcyAoYWN0aW9ucykuIFRoZSBpbml0aWFsICJ7IiBpcyB8CisgIHwgYWxyZWFkeSBlYXRlbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIAotY2FzZSA5MzoKK2Nhc2UgMTAyOgorLyogcnVsZSAxMDIgY2FuIG1hdGNoIGVvbCAqLwogWVlfUlVMRV9TRVRVUAotI2xpbmUgNTYyICJzY2FuLWdyYW0ubCIKLXsKLSAgICBib29sIHZhbGlkID0gZ3JhbV90ZXh0WzBdID09ICd7JyB8fCB0b2tlbl90eXBlID09IFBFUkNFTlRfVU5JT047Ci0gICAgc2Nhbm5lcl9jdXJzb3IuY29sdW1uIC09IG1ic253aWR0aCAoZ3JhbV90ZXh0LCBncmFtX2xlbmcsIDApOwotICAgIHl5bGVzcyAoMCk7Ci0KLSAgICBpZiAodmFsaWQpCi0gICAgICB7Ci0JYnJhY2VzX2xldmVsID0gLTE7Ci0JY29kZV9zdGFydCA9IGxvYy0+c3RhcnQ7Ci0JQkVHSU4gU0NfQlJBQ0VEX0NPREU7Ci0gICAgICB9Ci0gICAgZWxzZQotICAgICAgewotCWNvbXBsYWluX2F0ICgqbG9jLCBfKCJtaXNzaW5nIGB7JyBpbiAlcyIpLAotCQkgICAgIHRva2VuX25hbWUgKHRva2VuX3R5cGUpKTsKLQlvYnN0YWNrX3Nncm93ICgmb2JzdGFja19mb3Jfc3RyaW5nLCAie30iKTsKLQlTVFJJTkdfRklOSVNIOwotCXZhbC0+Y2hhcnMgPSBsYXN0X3N0cmluZzsKLQlCRUdJTiBJTklUSUFMOwotCXJldHVybiB0b2tlbl90eXBlOwotICAgICAgfQotICB9Ci0JWVlfQlJFQUsKLWNhc2UgWVlfU1RBVEVfRU9GKFNDX1BSRV9DT0RFKToKLSNsaW5lIDU4NSAic2Nhbi1ncmFtLmwiCi11bmV4cGVjdGVkX2VvZiAoc2Nhbm5lcl9jdXJzb3IsICJ7fSIpOyBCRUdJTiBJTklUSUFMOwotCVlZX0JSRUFLCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotICB8IFNjYW5uaW5nIHNvbWUgY29kZSBpbiBicmFjZXMgKCV1bmlvbiBhbmQgYWN0aW9ucykuIFRoZSBpbml0aWFsIHwKLSAgfCAieyIgaXMgYWxyZWFkeSBlYXRlbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0KLWNhc2UgOTQ6Ci0vKiBydWxlIDk0IGNhbiBtYXRjaCBlb2wgKi8KLVlZX1JVTEVfU0VUVVAKLSNsaW5lIDU5NiAic2Nhbi1ncmFtLmwiCisjbGluZSA2NDEgInNjYW4tZ3JhbS5sIgogU1RSSU5HX0dST1c7IGJyYWNlc19sZXZlbCsrOwogCVlZX0JSRUFLCi1jYXNlIDk1OgotLyogcnVsZSA5NSBjYW4gbWF0Y2ggZW9sICovCitjYXNlIDEwMzoKKy8qIHJ1bGUgMTAzIGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDU5NyAic2Nhbi1ncmFtLmwiCisjbGluZSA2NDIgInNjYW4tZ3JhbS5sIgogU1RSSU5HX0dST1c7IGJyYWNlc19sZXZlbC0tOwogCVlZX0JSRUFLCi1jYXNlIDk2OgotWVlfUlVMRV9TRVRVUAotI2xpbmUgNTk4ICJzY2FuLWdyYW0ubCIKLXsKLSAgICBib29sIG91dGVyX2JyYWNlID0gLS1icmFjZXNfbGV2ZWwgPCAwOwotCi0gICAgLyogQXMgYW4gdW5kb2N1bWVudGVkIEJpc29uIGV4dGVuc2lvbiwgYXBwZW5kIGA7JyBiZWZvcmUgdGhlIGxhc3QKLSAgICAgICBicmFjZSBpbiBicmFjZWQgY29kZSwgc28gdGhhdCB0aGUgdXNlciBjb2RlIGNhbiBvbWl0IHRyYWlsaW5nCi0gICAgICAgYDsnLiAgQnV0IGRvIG5vdCBhcHBlbmQgYDsnIGlmIGVtdWxhdGluZyBZYWNjLCBzaW5jZSBZYWNjIGRvZXMKLSAgICAgICBub3QgYXBwZW5kIG9uZS4KLQotICAgICAgIEZJWE1FOiBCaXNvbiBzaG91bGQgd2FybiBpZiBhIHNlbWljb2xvbiBzZWVtcyB0byBiZSBuZWNlc3NhcnkKLSAgICAgICBoZXJlLCBhbmQgc2hvdWxkIG9taXQgdGhlIHNlbWljb2xvbiBpZiBpdCBzZWVtcyB1bm5lY2Vzc2FyeQotICAgICAgIChlLmcuLCBhZnRlciAnOycsICd7Jywgb3IgJ30nLCBlYWNoIGZvbGxvd2VkIGJ5IGNvbW1lbnRzIG9yCi0gICAgICAgd2hpdGUgc3BhY2UpLiAgU3VjaCBhIHdhcm5pbmcgc2hvdWxkbid0IGRlcGVuZCBvbiAtLXlhY2M7IGl0Ci0gICAgICAgc2hvdWxkIGRlcGVuZCBvbiBhIG5ldyAtLXBlZGFudGljIG9wdGlvbiwgd2hpY2ggd291bGQgY2F1c2UKLSAgICAgICBCaXNvbiB0byB3YXJuIGlmIGl0IGRldGVjdHMgYW4gZXh0ZW5zaW9uIHRvIFBPU0lYLiAgLS1wZWRhbnRpYwotICAgICAgIHNob3VsZCBhbHNvIGRpYWdub3NlIG90aGVyIEJpc29uIGV4dGVuc2lvbnMgbGlrZSAleWFjYy4KLSAgICAgICBQZXJoYXBzIHRoZXJlIHNob3VsZCBhbHNvIGJlIGEgR0NDLXN0eWxlIC0tcGVkYW50aWMtZXJyb3JzCi0gICAgICAgb3B0aW9uLCBzbyB0aGF0IHN1Y2ggd2FybmluZ3MgYXJlIGRpYWdub3NlZCBhcyBlcnJvcnMuICAqLwotICAgIGlmIChvdXRlcl9icmFjZSAmJiB0b2tlbl90eXBlID09IEJSQUNFRF9DT0RFICYmICEgeWFjY19mbGFnKQotICAgICAgb2JzdGFja18xZ3JvdyAoJm9ic3RhY2tfZm9yX3N0cmluZywgJzsnKTsKLQotICAgIG9ic3RhY2tfMWdyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICd9Jyk7Ci0KLSAgICBpZiAob3V0ZXJfYnJhY2UpCi0gICAgICB7Ci0JU1RSSU5HX0ZJTklTSDsKLQlsb2MtPnN0YXJ0ID0gY29kZV9zdGFydDsKLQl2YWwtPmNoYXJzID0gbGFzdF9zdHJpbmc7Ci0JaW5jcmVtZW50X3J1bGVfbGVuZ3RoICgqbG9jKTsKLQlsYXN0X2JyYWNlZF9jb2RlX2xvYyA9ICpsb2M7Ci0JQkVHSU4gSU5JVElBTDsKLQlyZXR1cm4gdG9rZW5fdHlwZTsKLSAgICAgIH0KLSAgfQotCVlZX0JSRUFLCi0vKiBUb2tlbml6ZSBgPDwlJyBjb3JyZWN0bHkgKGFzIGA8PCcgYCUnKSByYXRoZXIgdGhhbiBpbmNvcnJyZWN0bHkKLSAgICAgKGFzIGA8JyBgPCUnKS4gICovCi1jYXNlIDk3OgotLyogcnVsZSA5NyBjYW4gbWF0Y2ggZW9sICovCi1ZWV9SVUxFX1NFVFVQCi0jbGluZSA2MzQgInNjYW4tZ3JhbS5sIgotU1RSSU5HX0dST1c7Ci0JWVlfQlJFQUsKLWNhc2UgOTg6Ci1ZWV9SVUxFX1NFVFVQCi0jbGluZSA2MzYgInNjYW4tZ3JhbS5sIgotaGFuZGxlX2RvbGxhciAodG9rZW5fdHlwZSwgZ3JhbV90ZXh0LCAqbG9jKTsKLQlZWV9CUkVBSwotY2FzZSA5OToKLVlZX1JVTEVfU0VUVVAKLSNsaW5lIDYzNyAic2Nhbi1ncmFtLmwiCi1oYW5kbGVfYXQgKHRva2VuX3R5cGUsIGdyYW1fdGV4dCwgKmxvYyk7Ci0JWVlfQlJFQUsKLWNhc2UgMTAwOgotWVlfUlVMRV9TRVRVUAotI2xpbmUgNjM5ICJzY2FuLWdyYW0ubCIKLXsKLSAgICB3YXJuX2F0ICgqbG9jLCBfKCJzdHJheSBgJCciKSk7Ci0gICAgb2JzdGFja19zZ3JvdyAoJm9ic3RhY2tfZm9yX3N0cmluZywgIiRdWyIpOwotICB9Ci0JWVlfQlJFQUsKLWNhc2UgMTAxOgorY2FzZSAxMDQ6CiBZWV9SVUxFX1NFVFVQCiAjbGluZSA2NDMgInNjYW4tZ3JhbS5sIgogewotICAgIHdhcm5fYXQgKCpsb2MsIF8oInN0cmF5IGBAJyIpKTsKLSAgICBvYnN0YWNrX3Nncm93ICgmb2JzdGFja19mb3Jfc3RyaW5nLCAiQEAiKTsKKyAgICBvYnN0YWNrXzFncm93ICgmb2JzdGFja19mb3Jfc3RyaW5nLCAnfScpOworCisgICAgLS1icmFjZXNfbGV2ZWw7CisgICAgaWYgKGJyYWNlc19sZXZlbCA8IDApCisgICAgICB7CisJU1RSSU5HX0ZJTklTSDsKKwlsb2MtPnN0YXJ0ID0gY29kZV9zdGFydDsKKwl2YWwtPmNvZGUgPSBsYXN0X3N0cmluZzsKKwlCRUdJTiBJTklUSUFMOworCXJldHVybiBCUkFDRURfQ09ERTsKKyAgICAgIH0KICAgfQogCVlZX0JSRUFLCisvKiBUb2tlbml6ZSAnPDwlJyBjb3JyZWN0bHkgKGFzICc8PCcgJyUnKSByYXRoZXIgdGhhbiBpbmNvcnJyZWN0bHkKKyAgICAgKGFzICc8JyAnPCUnKS4gICovCitjYXNlIDEwNToKKy8qIHJ1bGUgMTA1IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDY1OSAic2Nhbi1ncmFtLmwiCitTVFJJTkdfR1JPVzsKKwlZWV9CUkVBSwogY2FzZSBZWV9TVEFURV9FT0YoU0NfQlJBQ0VEX0NPREUpOgotI2xpbmUgNjQ4ICJzY2FuLWdyYW0ubCIKLXVuZXhwZWN0ZWRfZW9mIChjb2RlX3N0YXJ0LCAifSIpOyBCRUdJTiBJTklUSUFMOworI2xpbmUgNjYxICJzY2FuLWdyYW0ubCIKK3sKKyAgICB1bmV4cGVjdGVkX2VvZiAoY29kZV9zdGFydCwgIn0iKTsKKyAgICBTVFJJTkdfRklOSVNIOworICAgIGxvYy0+c3RhcnQgPSBjb2RlX3N0YXJ0OworICAgIHZhbC0+Y29kZSA9IGxhc3Rfc3RyaW5nOworICAgIEJFR0lOIElOSVRJQUw7CisgICAgcmV0dXJuIEJSQUNFRF9DT0RFOworICB9CiAJWVlfQlJFQUsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KQEAgLTIyMjYsOSArMjM3Niw5IEBACiAgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIAotY2FzZSAxMDI6CitjYXNlIDEwNjoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDY1OCAic2Nhbi1ncmFtLmwiCisjbGluZSA2NzggInNjYW4tZ3JhbS5sIgogewogICAgIFNUUklOR19GSU5JU0g7CiAgICAgbG9jLT5zdGFydCA9IGNvZGVfc3RhcnQ7CkBAIC0yMjM4LDggKzIzODgsMTUgQEAKICAgfQogCVlZX0JSRUFLCiBjYXNlIFlZX1NUQVRFX0VPRihTQ19QUk9MT0dVRSk6Ci0jbGluZSA2NjYgInNjYW4tZ3JhbS5sIgotdW5leHBlY3RlZF9lb2YgKGNvZGVfc3RhcnQsICIlfSIpOyBCRUdJTiBJTklUSUFMOworI2xpbmUgNjg2ICJzY2FuLWdyYW0ubCIKK3sKKyAgICB1bmV4cGVjdGVkX2VvZiAoY29kZV9zdGFydCwgIiV9Iik7CisgICAgU1RSSU5HX0ZJTklTSDsKKyAgICBsb2MtPnN0YXJ0ID0gY29kZV9zdGFydDsKKyAgICB2YWwtPmNoYXJzID0gbGFzdF9zdHJpbmc7CisgICAgQkVHSU4gSU5JVElBTDsKKyAgICByZXR1cm4gUFJPTE9HVUU7CisgIH0KIAlZWV9CUkVBSwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KQEAgLTIyNDksNyArMjQwNiw3IEBACiAKIAogY2FzZSBZWV9TVEFURV9FT0YoU0NfRVBJTE9HVUUpOgotI2xpbmUgNjc3ICJzY2FuLWdyYW0ubCIKKyNsaW5lIDcwNCAic2Nhbi1ncmFtLmwiCiB7CiAgICAgU1RSSU5HX0ZJTklTSDsKICAgICBsb2MtPnN0YXJ0ID0gY29kZV9zdGFydDsKQEAgLTIyNTksNDkgKzI0MTYsMjUgQEAKICAgfQogCVlZX0JSRUFLCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi0gIHwgRXNjYXBlIE00IHF1b3RpbmcgY2hhcmFjdGVycyBpbiBDIGNvZGUuICB8Ci0gIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLQotY2FzZSAxMDM6Ci1ZWV9SVUxFX1NFVFVQCi0jbGluZSA2OTMgInNjYW4tZ3JhbS5sIgotb2JzdGFja19zZ3JvdyAoJm9ic3RhY2tfZm9yX3N0cmluZywgIiRdWyIpOwotCVlZX0JSRUFLCi1jYXNlIDEwNDoKLVlZX1JVTEVfU0VUVVAKLSNsaW5lIDY5NCAic2Nhbi1ncmFtLmwiCi1vYnN0YWNrX3Nncm93ICgmb2JzdGFja19mb3Jfc3RyaW5nLCAiQEAiKTsKLQlZWV9CUkVBSwotY2FzZSAxMDU6Ci1ZWV9SVUxFX1NFVFVQCi0jbGluZSA2OTUgInNjYW4tZ3JhbS5sIgotb2JzdGFja19zZ3JvdyAoJm9ic3RhY2tfZm9yX3N0cmluZywgIkB7Iik7Ci0JWVlfQlJFQUsKLWNhc2UgMTA2OgotWVlfUlVMRV9TRVRVUAotI2xpbmUgNjk2ICJzY2FuLWdyYW0ubCIKLW9ic3RhY2tfc2dyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICJAfSIpOwotCVlZX0JSRUFLCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiAgIHwgQnkgZGVmYXVsdCwgZ3JvdyB0aGUgc3RyaW5nIG9ic3RhY2sgd2l0aCB0aGUgaW5wdXQuICB8CiAgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBjYXNlIDEwNzoKLSNsaW5lIDcwNSAic2Nhbi1ncmFtLmwiCisjbGluZSA3MTkgInNjYW4tZ3JhbS5sIgogY2FzZSAxMDg6CiAvKiBydWxlIDEwOCBjYW4gbWF0Y2ggZW9sICovCiBZWV9SVUxFX1NFVFVQCi0jbGluZSA3MDUgInNjYW4tZ3JhbS5sIgorI2xpbmUgNzE5ICJzY2FuLWdyYW0ubCIKIFNUUklOR19HUk9XOwogCVlZX0JSRUFLCiBjYXNlIDEwOToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDcwNyAic2Nhbi1ncmFtLmwiCisjbGluZSA3MjEgInNjYW4tZ3JhbS5sIgogWVlfRkFUQUxfRVJST1IoICJmbGV4IHNjYW5uZXIgamFtbWVkIiApOwogCVlZX0JSRUFLCi0jbGluZSAyMzA1ICJzY2FuLWdyYW0uYyIKKyNsaW5lIDI0MzYgInNjYW4tZ3JhbS5jIgorY2FzZSBZWV9TVEFURV9FT0YoU0NfUkVUVVJOX0JSQUNLRVRFRF9JRCk6CisJeXl0ZXJtaW5hdGUoKTsKIAogCWNhc2UgWVlfRU5EX09GX0JVRkZFUjoKIAkJewpAQCAtMjQ5OSwyMSArMjYzMiwyMSBAQAogCiAJZWxzZQogCQl7Ci0JCQlzaXplX3QgbnVtX3RvX3JlYWQgPQorCQkJeXlfc2l6ZV90IG51bV90b19yZWFkID0KIAkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7CiAKIAkJd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkKIAkJCXsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLwogCiAJCQkvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KLQkJCVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVI7CisJCQlZWV9CVUZGRVJfU1RBVEUgYiA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRTsKIAogCQkJaW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0KIAkJCQkoaW50KSAoKHl5X2NfYnVmX3ApIC0gYi0+eXlfY2hfYnVmKTsKIAogCQkJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKIAkJCQl7Ci0JCQkJaW50IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOworCQkJCXl5X3NpemVfdCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKIAogCQkJCWlmICggbmV3X3NpemUgPD0gMCApCiAJCQkJCWItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKQEAgLTI1NjgsNiArMjcwMSwxNCBAQAogCWVsc2UKIAkJcmV0X3ZhbCA9IEVPQl9BQ1RfQ09OVElOVUVfU0NBTjsKIAorCWlmICgoeXlfc2l6ZV90KSAoKHl5X25fY2hhcnMpICsgbnVtYmVyX3RvX21vdmUpID4gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSkgeworCQkvKiBFeHRlbmQgdGhlIGFycmF5IGJ5IDUwJSwgcGx1cyB0aGUgbnVtYmVyIHdlIHJlYWxseSBuZWVkLiAqLworCQl5eV9zaXplX3QgbmV3X3NpemUgPSAoeXlfbl9jaGFycykgKyBudW1iZXJfdG9fbW92ZSArICgoeXlfbl9jaGFycykgPj4gMSk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmID0gKGNoYXIgKikgZ3JhbV9yZWFsbG9jKCh2b2lkICopIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmLG5ld19zaXplICApOworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7CisJfQorCiAJKHl5X25fY2hhcnMpICs9IG51bWJlcl90b19tb3ZlOwogCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CiAJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hhcnMpICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CkBAIC0yNjA2LDcgKzI3NDcsNyBAQAogCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCiAJCQl7CiAJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ2MSApCisJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDgyICkKIAkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKIAkJCX0KIAkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CkBAIC0yNjM5LDEzICsyNzgwLDEzIEBACiAJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQogCQl7CiAJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NjEgKQorCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDgyICkKIAkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQl9CiAJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0JeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gNDYwKTsKKwl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA0ODEpOwogCi0JcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRlOworCQlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7CiB9CiAKIC8qICVpZi1jLW9ubHkgKi8KQEAgLTI2ODAsNyArMjgyMSw3IEBACiAKIAkJZWxzZQogCQkJeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KLQkJCWludCBvZmZzZXQgPSAoeXlfY19idWZfcCkgLSAoeXl0ZXh0X3B0cik7CisJCQl5eV9zaXplX3Qgb2Zmc2V0ID0gKHl5X2NfYnVmX3ApIC0gKHl5dGV4dF9wdHIpOwogCQkJKysoeXlfY19idWZfcCk7CiAKIAkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggICkgKQpAQCAtMjg2NSwxMyArMzAwNiw2IEBACiAJZ3JhbV9mcmVlKCh2b2lkICopIGIgICk7CiB9CiAKLS8qICVpZi1jLW9ubHkgKi8KLQotLyogJWVuZGlmICovCi0KLS8qICVpZi1jKystb25seSAqLwotLyogJWVuZGlmICovCi0KIC8qIEluaXRpYWxpemVzIG9yIHJlaW5pdGlhbGl6ZXMgYSBidWZmZXIuCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIHNvbWV0aW1lcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgYnVmZmVyLAogICogc3VjaCBhcyBkdXJpbmcgYSBncmFtX3Jlc3RhcnQoKSBvciBhdCBFT0YuCkBAIC0zMDE0LDcgKzMxNDgsNyBAQAogLyogJWlmLWMrKy1vbmx5ICovCiAvKiAlZW5kaWYgKi8KIHsKLQlpbnQgbnVtX3RvX2FsbG9jOworCXl5X3NpemVfdCBudW1fdG9fYWxsb2M7CiAgICAgCiAJaWYgKCEoeXlfYnVmZmVyX3N0YWNrKSkgewogCkBAIC0zMDI2LDcgKzMxNjAsOSBAQAogCQkoeXlfYnVmZmVyX3N0YWNrKSA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopZ3JhbV9hbGxvYwogCQkJCQkJCQkobnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQogCQkJCQkJCQkpOwotCQkKKwkJaWYgKCAhICh5eV9idWZmZXJfc3RhY2spICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIGdyYW1fZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOworCQkJCQkJCQkgIAogCQltZW1zZXQoKHl5X2J1ZmZlcl9zdGFjayksIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOwogCQkJCQogCQkoeXlfYnVmZmVyX3N0YWNrX21heCkgPSBudW1fdG9fYWxsb2M7CkBAIC0zMDQ0LDYgKzMxODAsOCBAQAogCQkJCQkJCQkoKHl5X2J1ZmZlcl9zdGFjayksCiAJCQkJCQkJCW51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKIAkJCQkJCQkJKTsKKwkJaWYgKCAhICh5eV9idWZmZXJfc3RhY2spICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIGdyYW1fZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOwogCiAJCS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCiAJCW1lbXNldCgoeXlfYnVmZmVyX3N0YWNrKSArICh5eV9idWZmZXJfc3RhY2tfbWF4KSwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CkBAIC0zMDkyLDI4ICszMjMwLDI4IEBACiAvKiAlaWYtYy1vbmx5ICovCiAvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGEgc3RyaW5nLiBUaGUgbmV4dCBjYWxsIHRvIGdyYW1fbGV4KCkgd2lsbAogICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBzdHIuCi0gKiBAcGFyYW0gc3RyIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHNjYW4KKyAqIEBwYXJhbSB5eXN0ciBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byBzY2FuCiAgKiAKICAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgogICogQG5vdGUgSWYgeW91IHdhbnQgdG8gc2NhbiBieXRlcyB0aGF0IG1heSBjb250YWluIE5VTCB2YWx1ZXMsIHRoZW4gdXNlCiAgKiAgICAgICBncmFtX19zY2FuX2J5dGVzKCkgaW5zdGVhZC4KICAqLwotWVlfQlVGRkVSX1NUQVRFIGdyYW1fX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eV9zdHIgKQorWVlfQlVGRkVSX1NUQVRFIGdyYW1fX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciApCiB7CiAgICAgCi0JcmV0dXJuIGdyYW1fX3NjYW5fYnl0ZXMoeXlfc3RyLHN0cmxlbih5eV9zdHIpICk7CisJcmV0dXJuIGdyYW1fX3NjYW5fYnl0ZXMoeXlzdHIsc3RybGVuKHl5c3RyKSApOwogfQogLyogJWVuZGlmICovCiAKIC8qICVpZi1jLW9ubHkgKi8KIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIGdyYW1fbGV4KCkgd2lsbAogICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBieXRlcy4KLSAqIEBwYXJhbSBieXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8gc2NhbgotICogQHBhcmFtIGxlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRlcy4KKyAqIEBwYXJhbSB5eWJ5dGVzIHRoZSBieXRlIGJ1ZmZlciB0byBzY2FuCisgKiBAcGFyYW0gX3l5Ynl0ZXNfbGVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgogICogCiAgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KICAqLwotWVlfQlVGRkVSX1NUQVRFIGdyYW1fX3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiBieXRlcywgaW50ICBsZW4gKQorWVlfQlVGRkVSX1NUQVRFIGdyYW1fX3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCB5eV9zaXplX3QgIF95eWJ5dGVzX2xlbiApCiB7CiAJWVlfQlVGRkVSX1NUQVRFIGI7CiAJY2hhciAqYnVmOwpAQCAtMzEyMSwxNSArMzI1OSwxNSBAQAogCWludCBpOwogICAgIAogCS8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVPQidzLiAqLwotCW4gPSBsZW4gKyAyOworCW4gPSBfeXlieXRlc19sZW4gKyAyOwogCWJ1ZiA9IChjaGFyICopIGdyYW1fYWxsb2MobiAgKTsKIAlpZiAoICEgYnVmICkKIAkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gZ3JhbV9fc2Nhbl9ieXRlcygpIiApOwogCi0JZm9yICggaSA9IDA7IGkgPCBsZW47ICsraSApCi0JCWJ1ZltpXSA9IGJ5dGVzW2ldOworCWZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyArK2kgKQorCQlidWZbaV0gPSB5eWJ5dGVzW2ldOwogCi0JYnVmW2xlbl0gPSBidWZbbGVuKzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCWJ1ZltfeXlieXRlc19sZW5dID0gYnVmW195eWJ5dGVzX2xlbisxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKIAogCWIgPSBncmFtX19zY2FuX2J1ZmZlcihidWYsbiApOwogCWlmICggISBiICkKQEAgLTMyMDksNyArMzM0Nyw3IEBACiAvKiogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uCiAgKiAKICAqLwotaW50IGdyYW1fZ2V0X2xlbmcgICh2b2lkKQoreXlfc2l6ZV90IGdyYW1fZ2V0X2xlbmcgICh2b2lkKQogewogICAgICAgICByZXR1cm4gZ3JhbV9sZW5nOwogfQpAQCAtMzI2Nyw2ICszNDA1LDM2IEBACiAvKiAlaWYtcmVlbnRyYW50ICovCiAvKiAlaWYtYmlzb24tYnJpZGdlICovCiAvKiAlZW5kaWYgKi8KKy8qICVlbmRpZiBpZi1jLW9ubHkgKi8KKworLyogJWlmLWMtb25seSAqLworc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHZvaWQpCit7CisgICAgICAgIC8qIEluaXRpYWxpemF0aW9uIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLgorICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gZ3JhbV9sZXhfZGVzdHJveSgpLCBzbyBkb24ndCBhbGxvY2F0ZSBoZXJlLgorICAgICAqLworCisgICAgKHl5X2J1ZmZlcl9zdGFjaykgPSAwOworICAgICh5eV9idWZmZXJfc3RhY2tfdG9wKSA9IDA7CisgICAgKHl5X2J1ZmZlcl9zdGFja19tYXgpID0gMDsKKyAgICAoeXlfY19idWZfcCkgPSAoY2hhciAqKSAwOworICAgICh5eV9pbml0KSA9IDA7CisgICAgKHl5X3N0YXJ0KSA9IDA7CisKKy8qIERlZmluZWQgaW4gbWFpbi5jICovCisjaWZkZWYgWVlfU1RESU5JVAorICAgIGdyYW1faW4gPSBzdGRpbjsKKyAgICBncmFtX291dCA9IHN0ZG91dDsKKyNlbHNlCisgICAgZ3JhbV9pbiA9IChGSUxFICopIDA7CisgICAgZ3JhbV9vdXQgPSAoRklMRSAqKSAwOworI2VuZGlmCisKKyAgICAvKiBGb3IgZnV0dXJlIHJlZmVyZW5jZTogU2V0IGVycm5vIG9uIGVycm9yLCBzaW5jZSB3ZSBhcmUgY2FsbGVkIGJ5CisgICAgICogZ3JhbV9sZXhfaW5pdCgpCisgICAgICovCisgICAgcmV0dXJuIDA7Cit9CiAvKiAlZW5kaWYgKi8KIAogLyogJWlmLWMtb25seSBTTklQISB0aGlzIGN1cnJlbnRseSBjYXVzZXMgY29uZmxpY3RzIHdpdGggdGhlIGMrKyBzY2FubmVyICovCkBAIC0zMjg1LDYgKzM0NTMsMTAgQEAKIAlncmFtX2ZyZWUoKHl5X2J1ZmZlcl9zdGFjaykgKTsKIAkoeXlfYnVmZmVyX3N0YWNrKSA9IE5VTEw7CiAKKyAgICAvKiBSZXNldCB0aGUgZ2xvYmFscy4gVGhpcyBpcyBpbXBvcnRhbnQgaW4gYSBub24tcmVlbnRyYW50IHNjYW5uZXIgc28gdGhlIG5leHQgdGltZQorICAgICAqIGdyYW1fbGV4KCkgaXMgY2FsbGVkLCBpbml0aWFsaXphdGlvbiB3aWxsIG9jY3VyLiAqLworICAgIHl5X2luaXRfZ2xvYmFscyggKTsKKwogLyogJWlmLXJlZW50cmFudCAqLwogLyogJWVuZGlmICovCiAgICAgcmV0dXJuIDA7CkBAIC0zMjk5LDcgKzM0NzEsNyBAQAogc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICkKIHsKIAlyZWdpc3RlciBpbnQgaTsKLSAgICAJZm9yICggaSA9IDA7IGkgPCBuOyArK2kgKQorCWZvciAoIGkgPSAwOyBpIDwgbjsgKytpICkKIAkJczFbaV0gPSBzMltpXTsKIH0KICNlbmRpZgpAQCAtMzMwOCw3ICszNDgwLDcgQEAKIHN0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqIHMgKQogewogCXJlZ2lzdGVyIGludCBuOwotICAgIAlmb3IgKCBuID0gMDsgc1tuXTsgKytuICkKKwlmb3IgKCBuID0gMDsgc1tuXTsgKytuICkKIAkJOwogCiAJcmV0dXJuIG47CkBAIC0zMzQ0LDkzICszNTE2LDggQEAKIAogLyogJW9rLWZvci1oZWFkZXIgKi8KIAotI3VuZGVmIFlZX05FV19GSUxFCi0jdW5kZWYgWVlfRkxVU0hfQlVGRkVSCi0jdW5kZWYgeXlfc2V0X2JvbAotI3VuZGVmIHl5X25ld19idWZmZXIKLSN1bmRlZiB5eV9zZXRfaW50ZXJhY3RpdmUKLSN1bmRlZiB5eXRleHRfcHRyCi0jdW5kZWYgWVlfRE9fQkVGT1JFX0FDVElPTgorI2xpbmUgNzIxICJzY2FuLWdyYW0ubCIKIAotI2lmZGVmIFlZX0RFQ0xfSVNfT1VSUwotI3VuZGVmIFlZX0RFQ0xfSVNfT1VSUwotI3VuZGVmIFlZX0RFQ0wKLSNlbmRpZgotI2xpbmUgNzA3ICJzY2FuLWdyYW0ubCIKLQotCi0KLS8qIEtlZXBzIHRyYWNrIG9mIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzZW1hbnRpYyB2YWx1ZXMgdG8gdGhlIGxlZnQgb2YKLSAgIGEgaGFuZGxlICh0aG9zZSByZWZlcmVuY2VkIGJ5ICQwLCAkLTEsIGV0Yy4pIGFyZSByZXF1aXJlZCBieSB0aGUKLSAgIHNlbWFudGljIGFjdGlvbnMgb2YgdGhpcyBncmFtbWFyLiAqLwotaW50IG1heF9sZWZ0X3NlbWFudGljX2NvbnRleHQgPSAwOwotCi0vKiBJZiBCVUYgaXMgbnVsbCwgYWRkIEJVRlNJWkUgKHdoaWNoIGluIHRoaXMgY2FzZSBtdXN0IGJlIGxlc3MgdGhhbgotICAgSU5UX01BWCkgdG8gQ09MVU1OOyBvdGhlcndpc2UsIGFkZCBtYnNud2lkdGggKEJVRiwgQlVGU0laRSwgMCkgdG8KLSAgIENPTFVNTi4gIElmIGFuIG92ZXJmbG93IG9jY3Vycywgb3IgbWlnaHQgb2NjdXIgYnV0IGlzIHVuZGV0ZWN0YWJsZSwKLSAgIHJldHVybiBJTlRfTUFYLiAgQXNzdW1lIENPTFVNTiBpcyBub25uZWdhdGl2ZS4gICovCi0KLXN0YXRpYyBpbmxpbmUgaW50Ci1hZGRfY29sdW1uX3dpZHRoIChpbnQgY29sdW1uLCBjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBidWZzaXplKQotewotICBzaXplX3Qgd2lkdGg7Ci0gIHVuc2lnbmVkIGludCByZW1haW5pbmdfY29sdW1ucyA9IElOVF9NQVggLSBjb2x1bW47Ci0KLSAgaWYgKGJ1ZikKLSAgICB7Ci0gICAgICBpZiAoSU5UX01BWCAvIDIgPD0gYnVmc2l6ZSkKLQlyZXR1cm4gSU5UX01BWDsKLSAgICAgIHdpZHRoID0gbWJzbndpZHRoIChidWYsIGJ1ZnNpemUsIDApOwotICAgIH0KLSAgZWxzZQotICAgIHdpZHRoID0gYnVmc2l6ZTsKLQotICByZXR1cm4gd2lkdGggPD0gcmVtYWluaW5nX2NvbHVtbnMgPyBjb2x1bW4gKyB3aWR0aCA6IElOVF9NQVg7Ci19Ci0KLS8qIFNldCAqTE9DIGFuZCBhZGp1c3Qgc2Nhbm5lciBjdXJzb3IgdG8gYWNjb3VudCBmb3IgdG9rZW4gVE9LRU4gb2YKLSAgIHNpemUgU0laRS4gICovCi0KLXN0YXRpYyB2b2lkCi1hZGp1c3RfbG9jYXRpb24gKGxvY2F0aW9uICpsb2MsIGNoYXIgY29uc3QgKnRva2VuLCBzaXplX3Qgc2l6ZSkKLXsKLSAgaW50IGxpbmUgPSBzY2FubmVyX2N1cnNvci5saW5lOwotICBpbnQgY29sdW1uID0gc2Nhbm5lcl9jdXJzb3IuY29sdW1uOwotICBjaGFyIGNvbnN0ICpwMCA9IHRva2VuOwotICBjaGFyIGNvbnN0ICpwID0gdG9rZW47Ci0gIGNoYXIgY29uc3QgKmxpbSA9IHRva2VuICsgc2l6ZTsKLQotICBsb2MtPnN0YXJ0ID0gc2Nhbm5lcl9jdXJzb3I7Ci0KLSAgZm9yIChwID0gdG9rZW47IHAgPCBsaW07IHArKykKLSAgICBzd2l0Y2ggKCpwKQotICAgICAgewotICAgICAgY2FzZSAnXG4nOgotCWxpbmUgKz0gbGluZSA8IElOVF9NQVg7Ci0JY29sdW1uID0gMTsKLQlwMCA9IHAgKyAxOwotCWJyZWFrOwotCi0gICAgICBjYXNlICdcdCc6Ci0JY29sdW1uID0gYWRkX2NvbHVtbl93aWR0aCAoY29sdW1uLCBwMCwgcCAtIHAwKTsKLQljb2x1bW4gPSBhZGRfY29sdW1uX3dpZHRoIChjb2x1bW4sIE5VTEwsIDggLSAoKGNvbHVtbiAtIDEpICYgNykpOwotCXAwID0gcCArIDE7Ci0JYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0JYnJlYWs7Ci0gICAgICB9Ci0KLSAgc2Nhbm5lcl9jdXJzb3IubGluZSA9IGxpbmU7Ci0gIHNjYW5uZXJfY3Vyc29yLmNvbHVtbiA9IGNvbHVtbiA9IGFkZF9jb2x1bW5fd2lkdGggKGNvbHVtbiwgcDAsIHAgLSBwMCk7Ci0KLSAgbG9jLT5lbmQgPSBzY2FubmVyX2N1cnNvcjsKLQotICBpZiAobGluZSA9PSBJTlRfTUFYICYmIGxvYy0+c3RhcnQubGluZSAhPSBJTlRfTUFYKQotICAgIHdhcm5fYXQgKCpsb2MsIF8oImxpbmUgbnVtYmVyIG92ZXJmbG93IikpOwotICBpZiAoY29sdW1uID09IElOVF9NQVggJiYgbG9jLT5zdGFydC5jb2x1bW4gIT0gSU5UX01BWCkKLSAgICB3YXJuX2F0ICgqbG9jLCBfKCJjb2x1bW4gbnVtYmVyIG92ZXJmbG93IikpOwotfQogCiAKIC8qIFJlYWQgYnl0ZXMgZnJvbSBGUCBpbnRvIGJ1ZmZlciBCVUYgb2Ygc2l6ZSBTSVpFLiAgUmV0dXJuIHRoZQpAQCAtMzQ4MCwxNzMgKzM1NjcsNiBAQAogfQogCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBURVhUIGlzIHBvaW50aW5nIHRvIGEgd2FubmFiZWUgc2VtYW50aWMgdmFsdWUgKGkuZS4sIGEgYCQnKS4gICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgUG9zc2libGUgaW5wdXRzOiAkWzxUWVBFTkFNRT5dKCR8aW50ZWdlcikgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IE91dHB1dCB0byBPQlNUQUNLX0ZPUl9TVFJJTkcgYSByZWZlcmVuY2UgdG8gdGhpcyBzZW1hbnRpYyB2YWx1ZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIGJvb2wKLWhhbmRsZV9hY3Rpb25fZG9sbGFyIChjaGFyICp0ZXh0LCBsb2NhdGlvbiBsb2MpCi17Ci0gIGNvbnN0IGNoYXIgKnR5cGVfbmFtZSA9IE5VTEw7Ci0gIGNoYXIgKmNwID0gdGV4dCArIDE7Ci0KLSAgaWYgKCEgY3VycmVudF9ydWxlKQotICAgIHJldHVybiBmYWxzZTsKLQotICAvKiBHZXQgdGhlIHR5cGUgbmFtZSBpZiBleHBsaWNpdC4gKi8KLSAgaWYgKCpjcCA9PSAnPCcpCi0gICAgewotICAgICAgdHlwZV9uYW1lID0gKytjcDsKLSAgICAgIHdoaWxlICgqY3AgIT0gJz4nKQotCSsrY3A7Ci0gICAgICAqY3AgPSAnXDAnOwotICAgICAgKytjcDsKLSAgICB9Ci0KLSAgaWYgKCpjcCA9PSAnJCcpCi0gICAgewotICAgICAgaWYgKCF0eXBlX25hbWUpCi0JdHlwZV9uYW1lID0gc3ltYm9sX2xpc3Rfbl90eXBlX25hbWVfZ2V0IChjdXJyZW50X3J1bGUsIGxvYywgMCk7Ci0gICAgICBpZiAoIXR5cGVfbmFtZSAmJiB0eXBlZCkKLQljb21wbGFpbl9hdCAobG9jLCBfKCIkJCBvZiBgJXMnIGhhcyBubyBkZWNsYXJlZCB0eXBlIiksCi0JCSAgICAgY3VycmVudF9ydWxlLT5zeW0tPnRhZyk7Ci0gICAgICBpZiAoIXR5cGVfbmFtZSkKLQl0eXBlX25hbWUgPSAiIjsKLSAgICAgIG9ic3RhY2tfZmdyb3cxICgmb2JzdGFja19mb3Jfc3RyaW5nLAotCQkgICAgICAiXWI0X2xoc192YWx1ZShbJXNdKVsiLCB0eXBlX25hbWUpOwotICAgICAgY3VycmVudF9ydWxlLT51c2VkID0gdHJ1ZTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBsb25nIGludCBudW0gPSBzdHJ0b2wgKGNwLCBOVUxMLCAxMCk7Ci0KLSAgICAgIGlmICgxIC0gSU5UX01BWCArIHJ1bGVfbGVuZ3RoIDw9IG51bSAmJiBudW0gPD0gcnVsZV9sZW5ndGgpCi0JewotCSAgaW50IG4gPSBudW07Ci0JICBpZiAobWF4X2xlZnRfc2VtYW50aWNfY29udGV4dCA8IDEgLSBuKQotCSAgICBtYXhfbGVmdF9zZW1hbnRpY19jb250ZXh0ID0gMSAtIG47Ci0JICBpZiAoIXR5cGVfbmFtZSAmJiAwIDwgbikKLQkgICAgdHlwZV9uYW1lID0gc3ltYm9sX2xpc3Rfbl90eXBlX25hbWVfZ2V0IChjdXJyZW50X3J1bGUsIGxvYywgbik7Ci0JICBpZiAoIXR5cGVfbmFtZSAmJiB0eXBlZCkKLQkgICAgY29tcGxhaW5fYXQgKGxvYywgXygiJCVkIG9mIGAlcycgaGFzIG5vIGRlY2xhcmVkIHR5cGUiKSwKLQkJCSBuLCBjdXJyZW50X3J1bGUtPnN5bS0+dGFnKTsKLQkgIGlmICghdHlwZV9uYW1lKQotCSAgICB0eXBlX25hbWUgPSAiIjsKLQkgIG9ic3RhY2tfZmdyb3czICgmb2JzdGFja19mb3Jfc3RyaW5nLAotCQkJICAiXWI0X3Joc192YWx1ZSglZCwgJWQsIFslc10pWyIsCi0JCQkgIHJ1bGVfbGVuZ3RoLCBuLCB0eXBlX25hbWUpOwotCSAgc3ltYm9sX2xpc3Rfbl91c2VkX3NldCAoY3VycmVudF9ydWxlLCBuLCB0cnVlKTsKLQl9Ci0gICAgICBlbHNlCi0JY29tcGxhaW5fYXQgKGxvYywgXygiaW50ZWdlciBvdXQgb2YgcmFuZ2U6ICVzIiksIHF1b3RlICh0ZXh0KSk7Ci0gICAgfQotCi0gIHJldHVybiB0cnVlOwotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgTWFwIGAkPycgb250byB0aGUgcHJvcGVyIE00IHN5bWJvbCwgZGVwZW5kaW5nIG9uIGl0cyBUT0tFTl9UWVBFIHwKLXwgKGFyZSB3ZSBpbiBhbiBhY3Rpb24/KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIHZvaWQKLWhhbmRsZV9kb2xsYXIgKGludCB0b2tlbl90eXBlLCBjaGFyICp0ZXh0LCBsb2NhdGlvbiBsb2MpCi17Ci0gIHN3aXRjaCAodG9rZW5fdHlwZSkKLSAgICB7Ci0gICAgY2FzZSBCUkFDRURfQ09ERToKLSAgICAgIGlmIChoYW5kbGVfYWN0aW9uX2RvbGxhciAodGV4dCwgbG9jKSkKLQlyZXR1cm47Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgUEVSQ0VOVF9ERVNUUlVDVE9SOgotICAgIGNhc2UgUEVSQ0VOVF9JTklUSUFMX0FDVElPTjoKLSAgICBjYXNlIFBFUkNFTlRfUFJJTlRFUjoKLSAgICAgIGlmICh0ZXh0WzFdID09ICckJykKLQl7Ci0JICBvYnN0YWNrX3Nncm93ICgmb2JzdGFja19mb3Jfc3RyaW5nLCAiXWI0X2RvbGxhcl9kb2xsYXJbIik7Ci0JICByZXR1cm47Ci0JfQotICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gIGNvbXBsYWluX2F0IChsb2MsIF8oImludmFsaWQgdmFsdWU6ICVzIiksIHF1b3RlICh0ZXh0KSk7Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFRFWFQgaXMgYSBsb2NhdGlvbiB0b2tlbiAoaS5lLiwgYSBgQC4uLicpLiAgT3V0cHV0IHRvIHwKLXwgT0JTVEFDS19GT1JfU1RSSU5HIGEgcmVmZXJlbmNlIHRvIHRoaXMgbG9jYXRpb24uICAgICAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgYm9vbAotaGFuZGxlX2FjdGlvbl9hdCAoY2hhciAqdGV4dCwgbG9jYXRpb24gbG9jKQotewotICBjaGFyICpjcCA9IHRleHQgKyAxOwotICBsb2NhdGlvbnNfZmxhZyA9IHRydWU7Ci0KLSAgaWYgKCEgY3VycmVudF9ydWxlKQotICAgIHJldHVybiBmYWxzZTsKLQotICBpZiAoKmNwID09ICckJykKLSAgICBvYnN0YWNrX3Nncm93ICgmb2JzdGFja19mb3Jfc3RyaW5nLCAiXWI0X2xoc19sb2NhdGlvblsiKTsKLSAgZWxzZQotICAgIHsKLSAgICAgIGxvbmcgaW50IG51bSA9IHN0cnRvbCAoY3AsIE5VTEwsIDEwKTsKLQotICAgICAgaWYgKDEgLSBJTlRfTUFYICsgcnVsZV9sZW5ndGggPD0gbnVtICYmIG51bSA8PSBydWxlX2xlbmd0aCkKLQl7Ci0JICBpbnQgbiA9IG51bTsKLQkgIG9ic3RhY2tfZmdyb3cyICgmb2JzdGFja19mb3Jfc3RyaW5nLCAiXWI0X3Joc19sb2NhdGlvbiglZCwgJWQpWyIsCi0JCQkgIHJ1bGVfbGVuZ3RoLCBuKTsKLQl9Ci0gICAgICBlbHNlCi0JY29tcGxhaW5fYXQgKGxvYywgXygiaW50ZWdlciBvdXQgb2YgcmFuZ2U6ICVzIiksIHF1b3RlICh0ZXh0KSk7Ci0gICAgfQotCi0gIHJldHVybiB0cnVlOwotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgTWFwIGBAPycgb250byB0aGUgcHJvcGVyIE00IHN5bWJvbCwgZGVwZW5kaW5nIG9uIGl0cyBUT0tFTl9UWVBFIHwKLXwgKGFyZSB3ZSBpbiBhbiBhY3Rpb24/KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIHZvaWQKLWhhbmRsZV9hdCAoaW50IHRva2VuX3R5cGUsIGNoYXIgKnRleHQsIGxvY2F0aW9uIGxvYykKLXsKLSAgc3dpdGNoICh0b2tlbl90eXBlKQotICAgIHsKLSAgICBjYXNlIEJSQUNFRF9DT0RFOgotICAgICAgaGFuZGxlX2FjdGlvbl9hdCAodGV4dCwgbG9jKTsKLSAgICAgIHJldHVybjsKLQotICAgIGNhc2UgUEVSQ0VOVF9JTklUSUFMX0FDVElPTjoKLSAgICBjYXNlIFBFUkNFTlRfREVTVFJVQ1RPUjoKLSAgICBjYXNlIFBFUkNFTlRfUFJJTlRFUjoKLSAgICAgIGlmICh0ZXh0WzFdID09ICckJykKLQl7Ci0JICBvYnN0YWNrX3Nncm93ICgmb2JzdGFja19mb3Jfc3RyaW5nLCAiXWI0X2F0X2RvbGxhclsiKTsKLQkgIHJldHVybjsKLQl9Ci0gICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgY29tcGxhaW5fYXQgKGxvYywgXygiaW52YWxpZCB2YWx1ZTogJXMiKSwgcXVvdGUgKHRleHQpKTsKLX0KLQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgU2NhbiBOVU1CRVIgZm9yIGEgYmFzZS1CQVNFIGludGVnZXIgYXQgbG9jYXRpb24gTE9DLiAgfApAQCAtMzcyNSwzNiArMzY0NSwyOCBAQAogfQogCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgSGFuZGxlIGAjbGluZSBJTlQgIkZJTEUiJy4gIEFSR1MgaGFzIGFscmVhZHkgc2tpcHBlZCBgI2xpbmUgJy4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBIYW5kbGUgJyNsaW5lIElOVCggIkZJTEUiKT9cbicuICBBUkdTIGhhcyBhbHJlYWR5IHNraXBwZWQgJyNsaW5lICcuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIHZvaWQKIGhhbmRsZV9zeW5jbGluZSAoY2hhciAqYXJncywgbG9jYXRpb24gbG9jKQogewotICBjaGFyICphZnRlcl9udW07Ci0gIHVuc2lnbmVkIGxvbmcgaW50IGxpbmVubyA9IHN0cnRvdWwgKGFyZ3MsICZhZnRlcl9udW0sIDEwKTsKLSAgY2hhciAqZmlsZSA9IHN0cmNociAoYWZ0ZXJfbnVtLCAnIicpICsgMTsKLSAgKnN0cmNociAoZmlsZSwgJyInKSA9ICdcMCc7CisgIGNoYXIgKmZpbGU7CisgIHVuc2lnbmVkIGxvbmcgaW50IGxpbmVubyA9IHN0cnRvdWwgKGFyZ3MsICZmaWxlLCAxMCk7CiAgIGlmIChJTlRfTUFYIDw9IGxpbmVubykKICAgICB7CiAgICAgICB3YXJuX2F0IChsb2MsIF8oImxpbmUgbnVtYmVyIG92ZXJmbG93IikpOwogICAgICAgbGluZW5vID0gSU5UX01BWDsKICAgICB9Ci0gIHNjYW5uZXJfY3Vyc29yLmZpbGUgPSBjdXJyZW50X2ZpbGUgPSB1bmlxc3RyX25ldyAoZmlsZSk7Ci0gIHNjYW5uZXJfY3Vyc29yLmxpbmUgPSBsaW5lbm87Ci0gIHNjYW5uZXJfY3Vyc29yLmNvbHVtbiA9IDE7Ci19CiAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFJlcG9ydCBhIHJ1bGUgdGhhdCBpcyB0b28gbG9uZy4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgdm9pZAotcnVsZV9sZW5ndGhfb3ZlcmZsb3cgKGxvY2F0aW9uIGxvYykKLXsKLSAgZmF0YWxfYXQgKGxvYywgXygicnVsZSBpcyB0b28gbG9uZyIpKTsKKyAgZmlsZSA9IG1ic2NociAoZmlsZSwgJyInKTsKKyAgaWYgKGZpbGUpCisgICAgeworICAgICAgKm1ic2NociAoZmlsZSArIDEsICciJykgPSAnXDAnOworICAgICAgY3VycmVudF9maWxlID0gdW5pcXN0cl9uZXcgKGZpbGUgKyAxKTsKKyAgICB9CisgIGJvdW5kYXJ5X3NldCAoJnNjYW5uZXJfY3Vyc29yLCBjdXJyZW50X2ZpbGUsIGxpbmVubywgMSk7CiB9CiAKIApAQCAtMzc3MCw2ICszNjgyLDEwIEBACiAgIGxvY2F0aW9uIGxvYzsKICAgbG9jLnN0YXJ0ID0gc3RhcnQ7CiAgIGxvYy5lbmQgPSBzY2FubmVyX2N1cnNvcjsKKyAgdG9rZW5fZW5kID0gcXVvdGUgKHRva2VuX2VuZCk7CisgIC8qIEluc3RlYWQgb2YgJ1wnJywgZGlzcGxheSAiJyIuICAqLworICBpZiAoIXN0cmNtcCAodG9rZW5fZW5kLCAiJ1xcJyciKSkKKyAgICB0b2tlbl9lbmQgPSAiXCInXCIiOwogICBjb21wbGFpbl9hdCAobG9jLCBfKG1zZ2lkKSwgdG9rZW5fZW5kKTsKIH0KIApAQCAtMzc4Miw3ICszNjk4LDcgQEAKIHN0YXRpYyB2b2lkCiB1bmV4cGVjdGVkX2VvZiAoYm91bmRhcnkgc3RhcnQsIGNoYXIgY29uc3QgKnRva2VuX2VuZCkKIHsKLSAgdW5leHBlY3RlZF9lbmQgKHN0YXJ0LCBOXygibWlzc2luZyBgJXMnIGF0IGVuZCBvZiBmaWxlIiksIHRva2VuX2VuZCk7CisgIHVuZXhwZWN0ZWRfZW5kIChzdGFydCwgTl8oIm1pc3NpbmcgJXMgYXQgZW5kIG9mIGZpbGUiKSwgdG9rZW5fZW5kKTsKIH0KIAogCkBAIC0zNzkzLDcgKzM3MDksNyBAQAogc3RhdGljIHZvaWQKIHVuZXhwZWN0ZWRfbmV3bGluZSAoYm91bmRhcnkgc3RhcnQsIGNoYXIgY29uc3QgKnRva2VuX2VuZCkKIHsKLSAgdW5leHBlY3RlZF9lbmQgKHN0YXJ0LCBOXygibWlzc2luZyBgJXMnIGF0IGVuZCBvZiBsaW5lIiksIHRva2VuX2VuZCk7CisgIHVuZXhwZWN0ZWRfZW5kIChzdGFydCwgTl8oIm1pc3NpbmcgJXMgYXQgZW5kIG9mIGxpbmUiKSwgdG9rZW5fZW5kKTsKIH0KIAogCkBAIC0zODAyLDcgKzM3MTgsNyBAQAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiB2b2lkCi1zY2FubmVyX2luaXRpYWxpemUgKHZvaWQpCitncmFtX3NjYW5uZXJfaW5pdGlhbGl6ZSAodm9pZCkKIHsKICAgb2JzdGFja19pbml0ICgmb2JzdGFja19mb3Jfc3RyaW5nKTsKIH0KQEAgLTM4MTMsMTAgKzM3MjksMTAgQEAKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHZvaWQKLXNjYW5uZXJfZnJlZSAodm9pZCkKK2dyYW1fc2Nhbm5lcl9mcmVlICh2b2lkKQogewogICBvYnN0YWNrX2ZyZWUgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsIDApOwogICAvKiBSZWNsYWltIEZsZXgncyBidWZmZXJzLiAgKi8KLSAgZ3JhbV9fZGVsZXRlX2J1ZmZlciAoWVlfQ1VSUkVOVF9CVUZGRVIpOworICBncmFtX2xleF9kZXN0cm95ICgpOwogfQogCmRpZmYgLS1naXQgYS9zcmMvc2Nhbi1ncmFtLmggYi9zcmMvc2Nhbi1ncmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIxMzhhMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zY2FuLWdyYW0uaApAQCAtMCwwICsxLDM4IEBACisvKiBCaXNvbiBHcmFtbWFyIFNjYW5uZXIKKworICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgU0NBTl9HUkFNX0hfCisjIGRlZmluZSBTQ0FOX0dSQU1fSF8KKworLyogRnJvbSB0aGUgc2Nhbm5lci4gICovCitleHRlcm4gRklMRSAqZ3JhbV9pbjsKK2V4dGVybiBpbnQgZ3JhbV9fZmxleF9kZWJ1ZzsKK3ZvaWQgZ3JhbV9zY2FubmVyX2luaXRpYWxpemUgKHZvaWQpOwordm9pZCBncmFtX3NjYW5uZXJfZnJlZSAodm9pZCk7Cit2b2lkIGdyYW1fc2Nhbm5lcl9sYXN0X3N0cmluZ19mcmVlICh2b2lkKTsKKworLyogVGhlc2UgYXJlIGRlY2xhcmVkIGJ5IHRoZSBzY2FubmVyLCBidXQgbm90IHVzZWQuICBXZSBwdXQgdGhlbSBoZXJlCisgICB0byBwYWNpZnkgIm1ha2Ugc3ludGF4LWNoZWNrIi4gICovCitleHRlcm4gRklMRSAqZ3JhbV9vdXQ7CitleHRlcm4gaW50IGdyYW1fbGluZW5vOworCisjIGRlZmluZSBHUkFNX0xFWF9ERUNMIGludCBncmFtX2xleCAoR1JBTV9TVFlQRSAqdmFsLCBsb2NhdGlvbiAqbG9jKQorR1JBTV9MRVhfREVDTDsKKworI2VuZGlmIC8qICFTQ0FOX0dSQU1fSF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9zY2FuLWdyYW0ubCBiL3NyYy9zY2FuLWdyYW0ubAppbmRleCBjZjcwNGM3Li45MDgzZGNlIDEwMDY0NAotLS0gYS9zcmMvc2Nhbi1ncmFtLmwKKysrIGIvc3JjL3NjYW4tZ3JhbS5sCkBAIC0xLDEyICsxLDEyIEBACiAvKiBCaXNvbiBHcmFtbWFyIFNjYW5uZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBDIC0qLQogCi0gICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCiAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCkBAIC0xNSwxMiArMTUsOSBAQAogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gICAwMjExMC0xMzAxICBVU0EKLSovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKLSVvcHRpb24gZGVidWcgbm9kZWZhdWx0IG5vdW5wdXQgbm95eXdyYXAgbmV2ZXItaW50ZXJhY3RpdmUKKyVvcHRpb24gZGVidWcgbm9kZWZhdWx0IG5vaW5wdXQgbm91bnB1dCBub3l5d3JhcCBuZXZlci1pbnRlcmFjdGl2ZQogJW9wdGlvbiBwcmVmaXg9ImdyYW1fIiBvdXRmaWxlPSJsZXgueXkuYyIKIAogJXsKQEAgLTI5LDExMiArMjYsNTYgQEAKICN1bmRlZiBncmFtX3dyYXAKICNkZWZpbmUgZ3JhbV93cmFwKCkgMQogCi0jaW5jbHVkZSAic3lzdGVtLmgiCi0KLSNpbmNsdWRlIDxtYnN3aWR0aC5oPgotI2luY2x1ZGUgPHF1b3RlLmg+CisjZGVmaW5lIEZMRVhfUFJFRklYKElkKSBncmFtXyAjIyBJZAorI2luY2x1ZGUgImZsZXgtc2Nhbm5lci5oIgogCiAjaW5jbHVkZSAiY29tcGxhaW4uaCIKICNpbmNsdWRlICJmaWxlcy5oIgotI2luY2x1ZGUgImdldGFyZ3MuaCIKICNpbmNsdWRlICJncmFtLmgiCiAjaW5jbHVkZSAicXVvdGVhcmcuaCIKICNpbmNsdWRlICJyZWFkZXIuaCIKICNpbmNsdWRlICJ1bmlxc3RyLmgiCiAKLSNkZWZpbmUgWVlfVVNFUl9JTklUCQkJCQlcCi0gIGRvCQkJCQkJCVwKLSAgICB7CQkJCQkJCVwKLSAgICAgIHNjYW5uZXJfY3Vyc29yLmZpbGUgPSBjdXJyZW50X2ZpbGU7CQlcCi0gICAgICBzY2FubmVyX2N1cnNvci5saW5lID0gMTsJCQkJXAotICAgICAgc2Nhbm5lcl9jdXJzb3IuY29sdW1uID0gMTsJCQlcCi0gICAgICBjb2RlX3N0YXJ0ID0gc2Nhbm5lcl9jdXJzb3I7CQkJXAotICAgIH0JCQkJCQkJXAotICB3aGlsZSAoMCkKKyNpbmNsdWRlIDxjLWN0eXBlLmg+CisjaW5jbHVkZSA8bWJzd2lkdGguaD4KKyNpbmNsdWRlIDxxdW90ZS5oPgogCi0vKiBQYWNpZnkgImdjYyAtV21pc3NpbmctcHJvdG90eXBlcyIgd2hlbiBmbGV4IDIuNS4zMSBpcyB1c2VkLiAgKi8KLWludCBncmFtX2dldF9saW5lbm8gKHZvaWQpOwotRklMRSAqZ3JhbV9nZXRfaW4gKHZvaWQpOwotRklMRSAqZ3JhbV9nZXRfb3V0ICh2b2lkKTsKLWludCBncmFtX2dldF9sZW5nICh2b2lkKTsKLWNoYXIgKmdyYW1fZ2V0X3RleHQgKHZvaWQpOwotdm9pZCBncmFtX3NldF9saW5lbm8gKGludCk7Ci12b2lkIGdyYW1fc2V0X2luIChGSUxFICopOwotdm9pZCBncmFtX3NldF9vdXQgKEZJTEUgKik7Ci1pbnQgZ3JhbV9nZXRfZGVidWcgKHZvaWQpOwotdm9pZCBncmFtX3NldF9kZWJ1ZyAoaW50KTsKLWludCBncmFtX2xleF9kZXN0cm95ICh2b2lkKTsKKyNpbmNsdWRlICJzY2FuLWdyYW0uaCIKKworI2RlZmluZSBZWV9ERUNMIEdSQU1fTEVYX0RFQ0wKKworI2RlZmluZSBZWV9VU0VSX0lOSVQJCQkJCVwKKyAgIGNvZGVfc3RhcnQgPSBzY2FubmVyX2N1cnNvciA9IGxvYy0+c3RhcnQ7CQlcCiAKIC8qIExvY2F0aW9uIG9mIHNjYW5uZXIgY3Vyc29yLiAgKi8KLWJvdW5kYXJ5IHNjYW5uZXJfY3Vyc29yOworc3RhdGljIGJvdW5kYXJ5IHNjYW5uZXJfY3Vyc29yOwogCi1zdGF0aWMgdm9pZCBhZGp1c3RfbG9jYXRpb24gKGxvY2F0aW9uICosIGNoYXIgY29uc3QgKiwgc2l6ZV90KTsKLSNkZWZpbmUgWVlfVVNFUl9BQ1RJT04gIGFkanVzdF9sb2NhdGlvbiAobG9jLCB5eXRleHQsIHl5bGVuZyk7CisjZGVmaW5lIFlZX1VTRVJfQUNUSU9OICBsb2NhdGlvbl9jb21wdXRlIChsb2MsICZzY2FubmVyX2N1cnNvciwgeXl0ZXh0LCB5eWxlbmcpOwogCiBzdGF0aWMgc2l6ZV90IG5vX2NyX3JlYWQgKEZJTEUgKiwgY2hhciAqLCBzaXplX3QpOwogI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgc2l6ZSkgKChyZXN1bHQpID0gbm9fY3JfcmVhZCAoeXlpbiwgYnVmLCBzaXplKSkKIAotCi0vKiBPQlNUQUNLX0ZPUl9TVFJJTkcgLS0gVXNlZCB0byBzdG9yZSBhbGwgdGhlIGNoYXJhY3RlcnMgdGhhdCB3ZSBuZWVkIHRvCi0gICBrZWVwICh0byBjb25zdHJ1Y3QgSUQsIFNUUklOR1MgZXRjLikuICBVc2UgdGhlIGZvbGxvd2luZyBtYWNyb3MgdG8KLSAgIHVzZSBpdC4KLQotICAgVXNlIFNUUklOR19HUk9XIHRvIGFwcGVuZCB3aGF0IGhhcyBqdXN0IGJlZW4gbWF0Y2hlZCwgYW5kCi0gICBTVFJJTkdfRklOSVNIIHRvIGVuZCB0aGUgc3RyaW5nIChpdCBwdXRzIHRoZSBlbmRpbmcgMCkuCi0gICBTVFJJTkdfRklOSVNIIGFsc28gc3RvcmVzIHRoaXMgc3RyaW5nIGluIExBU1RfU1RSSU5HLCB3aGljaCBjYW4gYmUKLSAgIHVzZWQsIGFuZCB3aGljaCBpcyB1c2VkIGJ5IFNUUklOR19GUkVFIHRvIGZyZWUgdGhlIGxhc3Qgc3RyaW5nLiAgKi8KLQotc3RhdGljIHN0cnVjdCBvYnN0YWNrIG9ic3RhY2tfZm9yX3N0cmluZzsKLQotLyogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBtb3N0IHJlY2VudGx5IHNhdmVkIHRva2VuLiAgKi8KLWNoYXIgKmxhc3Rfc3RyaW5nOwotCi0vKiBUaGUgbG9jYXRpb24gb2YgdGhlIG1vc3QgcmVjZW50bHkgc2F2ZWQgdG9rZW4sIGlmIGl0IHdhcyBhCi0gICBCUkFDRURfQ09ERSB0b2tlbjsgb3RoZXJ3aXNlLCB0aGlzIGhhcyBhbiB1bnNwZWNpZmllZCB2YWx1ZS4gICovCi1sb2NhdGlvbiBsYXN0X2JyYWNlZF9jb2RlX2xvYzsKLQotI2RlZmluZSBTVFJJTkdfR1JPVyAgIFwKLSAgb2JzdGFja19ncm93ICgmb2JzdGFja19mb3Jfc3RyaW5nLCB5eXRleHQsIHl5bGVuZykKLQotI2RlZmluZSBTVFJJTkdfRklOSVNICQkJCQlcCi0gIGRvIHsJCQkJCQkJXAotICAgIG9ic3RhY2tfMWdyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICdcMCcpOwkJXAotICAgIGxhc3Rfc3RyaW5nID0gb2JzdGFja19maW5pc2ggKCZvYnN0YWNrX2Zvcl9zdHJpbmcpOwlcCisjZGVmaW5lIFJPTExCQUNLX0NVUlJFTlRfVE9LRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzY2FubmVyX2N1cnNvci5jb2x1bW4gLT0gbWJzbndpZHRoICh5eXRleHQsIHl5bGVuZywgMCk7CVwKKyAgICB5eWxlc3MgKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgU1RSSU5HX0ZSRUUgXAotICBvYnN0YWNrX2ZyZWUgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsIGxhc3Rfc3RyaW5nKQorLyogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBtb3N0IHJlY2VudGx5IHNhdmVkIHRva2VuLiAgKi8KK3N0YXRpYyBjaGFyICpsYXN0X3N0cmluZzsKKworLyogQnJhY2tldGVkIGlkZW50aWZpZXIuICovCitzdGF0aWMgdW5pcXN0ciBicmFja2V0ZWRfaWRfc3RyID0gMDsKK3N0YXRpYyBsb2NhdGlvbiBicmFja2V0ZWRfaWRfbG9jOworc3RhdGljIGJvdW5kYXJ5IGJyYWNrZXRlZF9pZF9zdGFydDsKK3N0YXRpYyBpbnQgYnJhY2tldGVkX2lkX2NvbnRleHRfc3RhdGUgPSAwOwogCiB2b2lkCi1zY2FubmVyX2xhc3Rfc3RyaW5nX2ZyZWUgKHZvaWQpCitncmFtX3NjYW5uZXJfbGFzdF9zdHJpbmdfZnJlZSAodm9pZCkKIHsKICAgU1RSSU5HX0ZSRUU7CiB9CiAKLS8qIFdpdGhpbiB3ZWxsLWZvcm1lZCBydWxlcywgUlVMRV9MRU5HVEggaXMgdGhlIG51bWJlciBvZiB2YWx1ZXMgaW4KLSAgIHRoZSBjdXJyZW50IHJ1bGUgc28gZmFyLCB3aGljaCBzYXlzIHdoZXJlIHRvIGZpbmQgYCQwJyB3aXRoIHJlc3BlY3QKLSAgIHRvIHRoZSB0b3Agb2YgdGhlIHN0YWNrLiAgSXQgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBydWxlLT5sZW5ndGggaW4KLSAgIHRoZSBjYXNlIG9mIG1pZCBydWxlIGFjdGlvbnMuCi0KLSAgIE91dHNpZGUgb2Ygd2VsbC1mb3JtZWQgcnVsZXMsIFJVTEVfTEVOR1RIIGhhcyBhbiB1bmRlZmluZWQgdmFsdWUuICAqLwotc3RhdGljIGludCBydWxlX2xlbmd0aDsKLQotc3RhdGljIHZvaWQgcnVsZV9sZW5ndGhfb3ZlcmZsb3cgKGxvY2F0aW9uKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7Ci0KLS8qIEluY3JlbWVudCB0aGUgcnVsZSBsZW5ndGggYnkgb25lLCBjaGVja2luZyBmb3Igb3ZlcmZsb3cuICAqLwotc3RhdGljIGlubGluZSB2b2lkCi1pbmNyZW1lbnRfcnVsZV9sZW5ndGggKGxvY2F0aW9uIGxvYykKLXsKLSAgcnVsZV9sZW5ndGgrKzsKLQotICAvKiBEb24ndCBhbGxvdyBydWxlX2xlbmd0aCA9PSBJTlRfTUFYLCBzaW5jZSB0aGF0IG1pZ2h0IGNhdXNlCi0gICAgIGNvbmZ1c2lvbiB3aXRoIHN0cnRvbCBpZiBJTlRfTUFYID09IExPTkdfTUFYLiAgKi8KLSAgaWYgKHJ1bGVfbGVuZ3RoID09IElOVF9NQVgpCi0gICAgcnVsZV9sZW5ndGhfb3ZlcmZsb3cgKGxvYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhhbmRsZV9kb2xsYXIgKGludCB0b2tlbl90eXBlLCBjaGFyICpjcCwgbG9jYXRpb24gbG9jKTsKLXN0YXRpYyB2b2lkIGhhbmRsZV9hdCAoaW50IHRva2VuX3R5cGUsIGNoYXIgKmNwLCBsb2NhdGlvbiBsb2MpOwogc3RhdGljIHZvaWQgaGFuZGxlX3N5bmNsaW5lIChjaGFyICosIGxvY2F0aW9uKTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGludCBzY2FuX2ludGVnZXIgKGNoYXIgY29uc3QgKnAsIGludCBiYXNlLCBsb2NhdGlvbiBsb2MpOwogc3RhdGljIGludCBjb252ZXJ0X3Vjbl90b19ieXRlIChjaGFyIGNvbnN0ICpoZXhfdGV4dCk7CkBAIC0xNDIsMTUgKzgzLDI5IEBACiBzdGF0aWMgdm9pZCB1bmV4cGVjdGVkX25ld2xpbmUgKGJvdW5kYXJ5LCBjaGFyIGNvbnN0ICopOwogCiAlfQotJXggU0NfQ09NTUVOVCBTQ19MSU5FX0NPTU1FTlQgU0NfWUFDQ19DT01NRU5UCi0leCBTQ19TVFJJTkcgU0NfQ0hBUkFDVEVSCi0leCBTQ19BRlRFUl9JREVOVElGSUVSCisgLyogQSBDLWxpa2UgY29tbWVudCBpbiBkaXJlY3RpdmVzL3J1bGVzLiAqLworJXggU0NfWUFDQ19DT01NRU5UCisgLyogU3RyaW5ncyBhbmQgY2hhcmFjdGVycyBpbiBkaXJlY3RpdmVzL3J1bGVzLiAqLwogJXggU0NfRVNDQVBFRF9TVFJJTkcgU0NfRVNDQVBFRF9DSEFSQUNURVIKLSV4IFNDX1BSRV9DT0RFIFNDX0JSQUNFRF9DT0RFIFNDX1BST0xPR1VFIFNDX0VQSUxPR1VFCisgLyogQSBpZGVudGlmaWVyIHdhcyBqdXN0IHJlYWQgaW4gZGlyZWN0aXZlcy9ydWxlcy4gIFNwZWNpYWwgc3RhdGUKKyAgICB0byBjYXB0dXJlIHRoZSBzZXF1ZW5jZSAnaWRlbnRpZmllciA6Jy4gKi8KKyV4IFNDX0FGVEVSX0lERU5USUZJRVIKIAotbGV0dGVyCSAgWy5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX10KLWlkCSAge2xldHRlcn0oe2xldHRlcn18WzAtOV0pKgotZGlyZWN0aXZlICV7bGV0dGVyfSh7bGV0dGVyfXxbMC05XXwtKSoKKyAvKiBUaHJlZSB0eXBlcyBvZiB1c2VyIGNvZGU6CisgICAgLSBwcm9sb2d1ZSAoY29kZSBiZXR3ZWVuICcleycgJyV9JyBpbiB0aGUgZmlyc3Qgc2VjdGlvbiwgYmVmb3JlICUlKTsKKyAgICAtIGFjdGlvbnMsIHByaW50ZXJzLCB1bmlvbiwgZXRjLCAoYmV0d2VlbiBicmFjZWQgaW4gdGhlIG1pZGRsZSBzZWN0aW9uKTsKKyAgICAtIGVwaWxvZ3VlIChldmVyeXRoaW5nIGFmdGVyIHRoZSBzZWNvbmQgJSUpLiAqLworJXggU0NfUFJPTE9HVUUgU0NfQlJBQ0VEX0NPREUgU0NfRVBJTE9HVUUKKyAvKiBDIGFuZCBDKysgY29tbWVudHMgaW4gY29kZS4gKi8KKyV4IFNDX0NPTU1FTlQgU0NfTElORV9DT01NRU5UCisgLyogU3RyaW5ncyBhbmQgY2hhcmFjdGVycyBpbiBjb2RlLiAqLworJXggU0NfU1RSSU5HIFNDX0NIQVJBQ1RFUgorIC8qIEJyYWNrZXRlZCBpZGVudGlmaWVycyBzdXBwb3J0LiAqLworJXggU0NfQlJBQ0tFVEVEX0lEIFNDX1JFVFVSTl9CUkFDS0VURURfSUQKKworbGV0dGVyCSAgIFsuYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9dCitub3RsZXR0ZXIgW14uYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9dey19WyVce10KK2lkCSAge2xldHRlcn0oe2xldHRlcn18Wy0wLTldKSoKIGludAkgIFswLTldKwogCiAvKiBQT1NJWCBzYXlzIHRoYXQgYSB0YWcgbXVzdCBiZSBib3RoIGFuIGlkIGFuZCBhIEMgdW5pb24gbWVtYmVyLCBidXQKQEAgLTE2NSwxNiArMTIwLDEzIEBACiAlJQogJXsKICAgLyogTmVzdGluZyBsZXZlbCBvZiB0aGUgY3VycmVudCBjb2RlIGluIGJyYWNlcy4gICovCi0gIGludCBicmFjZXNfbGV2ZWwgSUZfTElOVCAoPSAwKTsKKyAgaW50IGJyYWNlc19sZXZlbCBQQUNJRllfQ0MgKD0gMCk7CiAKICAgLyogUGFyZW50IGNvbnRleHQgc3RhdGUsIHdoZW4gYXBwbGljYWJsZS4gICovCi0gIGludCBjb250ZXh0X3N0YXRlIElGX0xJTlQgKD0gMCk7Ci0KLSAgLyogVG9rZW4gdHlwZSB0byByZXR1cm4sIHdoZW4gYXBwbGljYWJsZS4gICovCi0gIGludCB0b2tlbl90eXBlIElGX0xJTlQgKD0gMCk7CisgIGludCBjb250ZXh0X3N0YXRlIFBBQ0lGWV9DQyAoPSAwKTsKIAogICAvKiBMb2NhdGlvbiBvZiBtb3N0IHJlY2VudCBpZGVudGlmaWVyLCB3aGVuIGFwcGxpY2FibGUuICAqLwotICBsb2NhdGlvbiBpZF9sb2MgSUZfTElOVCAoPSBlbXB0eV9sb2NhdGlvbik7CisgIGxvY2F0aW9uIGlkX2xvYyBQQUNJRllfQ0MgKD0gZW1wdHlfbG9jYXRpb24pOwogCiAgIC8qIFdoZXJlIGNvbnRhaW5pbmcgY29kZSBzdGFydGVkLCB3aGVuIGFwcGxpY2FibGUuICBJdHMgaW5pdGlhbAogICAgICB2YWx1ZSBpcyByZWxldmFudCBvbmx5IHdoZW4geXlsZXggaXMgaW52b2tlZCBpbiB0aGUgU0NfRVBJTE9HVUUKQEAgLTE4Myw3ICsxMzUsNyBAQAogCiAgIC8qIFdoZXJlIGNvbnRhaW5pbmcgY29tbWVudCBvciBzdHJpbmcgb3IgY2hhcmFjdGVyIGxpdGVyYWwgc3RhcnRlZCwKICAgICAgd2hlbiBhcHBsaWNhYmxlLiAgKi8KLSAgYm91bmRhcnkgdG9rZW5fc3RhcnQgSUZfTElOVCAoPSBzY2FubmVyX2N1cnNvcik7CisgIGJvdW5kYXJ5IHRva2VuX3N0YXJ0IFBBQ0lGWV9DQyAoPSBzY2FubmVyX2N1cnNvcik7CiAlfQogCiAKQEAgLTE5MSwxMiArMTQzLDEyIEBACiAgIHwgU2Nhbm5pbmcgd2hpdGUgc3BhY2UuICB8CiAgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLTxJTklUSUFMLFNDX0FGVEVSX0lERU5USUZJRVIsU0NfUFJFX0NPREU+Cis8SU5JVElBTCxTQ19BRlRFUl9JREVOVElGSUVSLFNDX0JSQUNLRVRFRF9JRCxTQ19SRVRVUk5fQlJBQ0tFVEVEX0lEPgogewogICAvKiBDb21tZW50cyBhbmQgd2hpdGUgc3BhY2UuICAqLwotICAiLCIJICAgICAgIHdhcm5fYXQgKCpsb2MsIF8oInN0cmF5IGAsJyB0cmVhdGVkIGFzIHdoaXRlIHNwYWNlIikpOworICAiLCIgICAgICAgICAgd2Fybl9hdCAoKmxvYywgXygic3RyYXkgJywnIHRyZWF0ZWQgYXMgd2hpdGUgc3BhY2UiKSk7CiAgIFsgXGZcblx0XHZdICB8Ci0gICIvLyIuKiAgICAgICA7CisgICIvLyIuKiAgICAgICBjb250aW51ZTsKICAgIi8qIiB7CiAgICAgdG9rZW5fc3RhcnQgPSBsb2MtPnN0YXJ0OwogICAgIGNvbnRleHRfc3RhdGUgPSBZWV9TVEFSVDsKQEAgLTIwNSw3ICsxNTcsNyBAQAogCiAgIC8qICNsaW5lIGRpcmVjdGl2ZXMgYXJlIG5vdCBkb2N1bWVudGVkLCBhbmQgbWF5IGJlIHdpdGhkcmF3biBvcgogICAgICBtb2RpZmllZCBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24uICAqLwotICBeIiNsaW5lICJ7aW50fSIgXCIiLioiXCJcbiIgeworICBeIiNsaW5lICJ7aW50fSgiIFwiIi4qIlwiIik/IlxuIiB7CiAgICAgaGFuZGxlX3N5bmNsaW5lICh5eXRleHQgKyBzaXplb2YgIiNsaW5lICIgLSAxLCAqbG9jKTsKICAgfQogfQpAQCAtMjE0LDYxICsxNjYsNzIgQEAKICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogICB8IFNjYW5uaW5nIEJpc29uIGRpcmVjdGl2ZXMuICB8CiAgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworICAvKiBGb3IgZGlyZWN0aXZlcyB0aGF0IGFyZSBhbHNvIGNvbW1hbmQgbGluZSBvcHRpb25zLCB0aGUgcmVnZXggbXVzdCBiZQorCSIlLi4uIgorICAgICBhZnRlciAiWy1fXSJzIGFyZSByZW1vdmVkLCBhbmQgdGhlIGRpcmVjdGl2ZSBtdXN0IG1hdGNoIHRoZSAtLWxvbmcKKyAgICAgb3B0aW9uIG5hbWUsIHdpdGggYSBzaW5nbGUgc3RyaW5nIGFyZ3VtZW50LiAgT3RoZXJ3aXNlLCBhZGQgZXhjZXB0aW9ucworICAgICB0byAuLi9idWlsZC1hdXgvY3Jvc3Mtb3B0aW9ucy5wbC4gICovCisKIDxJTklUSUFMPgogewotICAiJWJpbmFyeSIgICAgICAgICAgICAgICByZXR1cm4gUEVSQ0VOVF9OT05BU1NPQzsKLSAgIiVkZWJ1ZyIgICAgICAgICAgICAgICAgcmV0dXJuIFBFUkNFTlRfREVCVUc7Ci0gICIlZGVmYXVsdCJbLV9dInByZWMiICAgIHJldHVybiBQRVJDRU5UX0RFRkFVTFRfUFJFQzsKLSAgIiVkZWZpbmUiICAgICAgICAgICAgICAgcmV0dXJuIFBFUkNFTlRfREVGSU5FOwotICAiJWRlZmluZXMiICAgICAgICAgICAgICByZXR1cm4gUEVSQ0VOVF9ERUZJTkVTOwotICAiJWRlc3RydWN0b3IiCQkgIHRva2VuX3R5cGUgPSBQRVJDRU5UX0RFU1RSVUNUT1I7IEJFR0lOIFNDX1BSRV9DT0RFOwotICAiJWRwcmVjIgkJICByZXR1cm4gUEVSQ0VOVF9EUFJFQzsKLSAgIiVlcnJvciJbLV9dInZlcmJvc2UiICAgcmV0dXJuIFBFUkNFTlRfRVJST1JfVkVSQk9TRTsKLSAgIiVleHBlY3QiICAgICAgICAgICAgICAgcmV0dXJuIFBFUkNFTlRfRVhQRUNUOwotICAiJWV4cGVjdCJbLV9dInJyIgkgIHJldHVybiBQRVJDRU5UX0VYUEVDVF9SUjsKLSAgIiVmaWxlLXByZWZpeCIgICAgICAgICAgcmV0dXJuIFBFUkNFTlRfRklMRV9QUkVGSVg7CisgICIlYmluYXJ5IiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUEVSQ0VOVF9OT05BU1NPQzsKKyAgIiVjb2RlIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQRVJDRU5UX0NPREU7CisgICIlZGVidWciICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUEVSQ0VOVF9ERUJVRzsKKyAgIiVkZWZhdWx0IlstX10icHJlYyIgICAgICAgICAgICAgIHJldHVybiBQRVJDRU5UX0RFRkFVTFRfUFJFQzsKKyAgIiVkZWZpbmUiICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQRVJDRU5UX0RFRklORTsKKyAgIiVkZWZpbmVzIiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQRVJDRU5UX0RFRklORVM7CisgICIlZGVzdHJ1Y3RvciIgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUEVSQ0VOVF9ERVNUUlVDVE9SOworICAiJWRwcmVjIiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBFUkNFTlRfRFBSRUM7CisgICIlZXJyb3IiWy1fXSJ2ZXJib3NlIiAgICAgICAgICAgICByZXR1cm4gUEVSQ0VOVF9FUlJPUl9WRVJCT1NFOworICAiJWV4cGVjdCIgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBFUkNFTlRfRVhQRUNUOworICAiJWV4cGVjdCJbLV9dInJyIiAgICAgICAgICAgICAgICAgcmV0dXJuIFBFUkNFTlRfRVhQRUNUX1JSOworICAiJWZpbGUtcHJlZml4IiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBFUkNFTlRfRklMRV9QUkVGSVg7CiAgICIlZml4ZWQiWy1fXSJvdXRwdXQiWy1fXSJmaWxlcyIgICByZXR1cm4gUEVSQ0VOVF9ZQUNDOwotICAiJWluaXRpYWwtYWN0aW9uIiAgICAgICB0b2tlbl90eXBlID0gUEVSQ0VOVF9JTklUSUFMX0FDVElPTjsgQkVHSU4gU0NfUFJFX0NPREU7Ci0gICIlZ2xyLXBhcnNlciIgICAgICAgICAgIHJldHVybiBQRVJDRU5UX0dMUl9QQVJTRVI7Ci0gICIlbGVmdCIgICAgICAgICAgICAgICAgIHJldHVybiBQRVJDRU5UX0xFRlQ7Ci0gICIlbGV4LXBhcmFtIgkJICB0b2tlbl90eXBlID0gUEVSQ0VOVF9MRVhfUEFSQU07IEJFR0lOIFNDX1BSRV9DT0RFOwotICAiJWxvY2F0aW9ucyIgICAgICAgICAgICByZXR1cm4gUEVSQ0VOVF9MT0NBVElPTlM7Ci0gICIlbWVyZ2UiCQkgIHJldHVybiBQRVJDRU5UX01FUkdFOwotICAiJW5hbWUiWy1fXSJwcmVmaXgiICAgICByZXR1cm4gUEVSQ0VOVF9OQU1FX1BSRUZJWDsKLSAgIiVubyJbLV9dImRlZmF1bHQiWy1fXSJwcmVjIglyZXR1cm4gUEVSQ0VOVF9OT19ERUZBVUxUX1BSRUM7Ci0gICIlbm8iWy1fXSJsaW5lcyIgICAgICAgIHJldHVybiBQRVJDRU5UX05PX0xJTkVTOwotICAiJW5vbmFzc29jIiAgICAgICAgICAgICByZXR1cm4gUEVSQ0VOVF9OT05BU1NPQzsKLSAgIiVub25kZXRlcm1pbmlzdGljLXBhcnNlciIgICByZXR1cm4gUEVSQ0VOVF9OT05ERVRFUk1JTklTVElDX1BBUlNFUjsKLSAgIiVudGVybSIgICAgICAgICAgICAgICAgcmV0dXJuIFBFUkNFTlRfTlRFUk07Ci0gICIlb3V0cHV0IiAgICAgICAgICAgICAgIHJldHVybiBQRVJDRU5UX09VVFBVVDsKLSAgIiVwYXJzZS1wYXJhbSIJICB0b2tlbl90eXBlID0gUEVSQ0VOVF9QQVJTRV9QQVJBTTsgQkVHSU4gU0NfUFJFX0NPREU7Ci0gICIlcHJlYyIgICAgICAgICAgICAgICAgIHJ1bGVfbGVuZ3RoLS07IHJldHVybiBQRVJDRU5UX1BSRUM7Ci0gICIlcHJpbnRlciIgICAgICAgICAgICAgIHRva2VuX3R5cGUgPSBQRVJDRU5UX1BSSU5URVI7IEJFR0lOIFNDX1BSRV9DT0RFOwotICAiJXB1cmUiWy1fXSJwYXJzZXIiICAgICByZXR1cm4gUEVSQ0VOVF9QVVJFX1BBUlNFUjsKLSAgIiVyZXF1aXJlIiAgICAgICAgICAgICAgcmV0dXJuIFBFUkNFTlRfUkVRVUlSRTsKLSAgIiVyaWdodCIgICAgICAgICAgICAgICAgcmV0dXJuIFBFUkNFTlRfUklHSFQ7Ci0gICIlc2tlbGV0b24iICAgICAgICAgICAgIHJldHVybiBQRVJDRU5UX1NLRUxFVE9OOwotICAiJXN0YXJ0IiAgICAgICAgICAgICAgICByZXR1cm4gUEVSQ0VOVF9TVEFSVDsKLSAgIiV0ZXJtIiAgICAgICAgICAgICAgICAgcmV0dXJuIFBFUkNFTlRfVE9LRU47Ci0gICIldG9rZW4iICAgICAgICAgICAgICAgIHJldHVybiBQRVJDRU5UX1RPS0VOOwotICAiJXRva2VuIlstX10idGFibGUiICAgICByZXR1cm4gUEVSQ0VOVF9UT0tFTl9UQUJMRTsKLSAgIiV0eXBlIiAgICAgICAgICAgICAgICAgcmV0dXJuIFBFUkNFTlRfVFlQRTsKLSAgIiV1bmlvbiIJCSAgdG9rZW5fdHlwZSA9IFBFUkNFTlRfVU5JT047IEJFR0lOIFNDX1BSRV9DT0RFOwotICAiJXZlcmJvc2UiICAgICAgICAgICAgICByZXR1cm4gUEVSQ0VOVF9WRVJCT1NFOwotICAiJXlhY2MiICAgICAgICAgICAgICAgICByZXR1cm4gUEVSQ0VOVF9ZQUNDOworICAiJWluaXRpYWwtYWN0aW9uIiAgICAgICAgICAgICAgICAgcmV0dXJuIFBFUkNFTlRfSU5JVElBTF9BQ1RJT047CisgICIlZ2xyLXBhcnNlciIgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUEVSQ0VOVF9HTFJfUEFSU0VSOworICAiJWxhbmd1YWdlIiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBFUkNFTlRfTEFOR1VBR0U7CisgICIlbGVmdCIgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUEVSQ0VOVF9MRUZUOworICAiJWxleC1wYXJhbSIgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBFUkNFTlRfTEVYX1BBUkFNOworICAiJWxvY2F0aW9ucyIgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBFUkNFTlRfTE9DQVRJT05TOworICAiJW1lcmdlIiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBFUkNFTlRfTUVSR0U7CisgICIlbmFtZSJbLV9dInByZWZpeCIgICAgICAgICAgICAgICByZXR1cm4gUEVSQ0VOVF9OQU1FX1BSRUZJWDsKKyAgIiVubyJbLV9dImRlZmF1bHQiWy1fXSJwcmVjIiAgICAgIHJldHVybiBQRVJDRU5UX05PX0RFRkFVTFRfUFJFQzsKKyAgIiVubyJbLV9dImxpbmVzIiAgICAgICAgICAgICAgICAgIHJldHVybiBQRVJDRU5UX05PX0xJTkVTOworICAiJW5vbmFzc29jIiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBFUkNFTlRfTk9OQVNTT0M7CisgICIlbm9uZGV0ZXJtaW5pc3RpYy1wYXJzZXIiICAgICAgICByZXR1cm4gUEVSQ0VOVF9OT05ERVRFUk1JTklTVElDX1BBUlNFUjsKKyAgIiVudGVybSIgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQRVJDRU5UX05URVJNOworICAiJW91dHB1dCIgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBFUkNFTlRfT1VUUFVUOworICAiJXBhcnNlLXBhcmFtIiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBFUkNFTlRfUEFSU0VfUEFSQU07CisgICIlcHJlYyIgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUEVSQ0VOVF9QUkVDOworICAiJXByaW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBFUkNFTlRfUFJJTlRFUjsKKyAgIiVwdXJlIlstX10icGFyc2VyIiAgICAgICAgICAgICAgIHJldHVybiBQRVJDRU5UX1BVUkVfUEFSU0VSOworICAiJXJlcXVpcmUiICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBFUkNFTlRfUkVRVUlSRTsKKyAgIiVyaWdodCIgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQRVJDRU5UX1JJR0hUOworICAiJXNrZWxldG9uIiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBFUkNFTlRfU0tFTEVUT047CisgICIlc3RhcnQiICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUEVSQ0VOVF9TVEFSVDsKKyAgIiV0ZXJtIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQRVJDRU5UX1RPS0VOOworICAiJXRva2VuIiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBFUkNFTlRfVE9LRU47CisgICIldG9rZW4iWy1fXSJ0YWJsZSIgICAgICAgICAgICAgICByZXR1cm4gUEVSQ0VOVF9UT0tFTl9UQUJMRTsKKyAgIiV0eXBlIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQRVJDRU5UX1RZUEU7CisgICIldW5pb24iICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUEVSQ0VOVF9VTklPTjsKKyAgIiV2ZXJib3NlIiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQRVJDRU5UX1ZFUkJPU0U7CisgICIleWFjYyIgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUEVSQ0VOVF9ZQUNDOwogCi0gIHtkaXJlY3RpdmV9IHsKKyAgIiUie2lkfXwiJSJ7bm90bGV0dGVyfShbWzpncmFwaDpdXSkrIHsKICAgICBjb21wbGFpbl9hdCAoKmxvYywgXygiaW52YWxpZCBkaXJlY3RpdmU6ICVzIiksIHF1b3RlICh5eXRleHQpKTsKICAgfQogCiAgICI9IiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFUVVBTDsKLSAgInwiICAgICAgICAgICAgICAgICAgICAgcnVsZV9sZW5ndGggPSAwOyByZXR1cm4gUElQRTsKKyAgInwiICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBJUEU7CiAgICI7IiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTRU1JQ09MT047CisgICI8Kj4iICAgICAgICAgICAgICAgICAgIHJldHVybiBUWVBFX1RBR19BTlk7CisgICI8PiIgICAgICAgICAgICAgICAgICAgIHJldHVybiBUWVBFX1RBR19OT05FOwogCiAgIHtpZH0gewotICAgIHZhbC0+c3ltYm9sID0gc3ltYm9sX2dldCAoeXl0ZXh0LCAqbG9jKTsKKyAgICB2YWwtPnVuaXFzdHIgPSB1bmlxc3RyX25ldyAoeXl0ZXh0KTsKICAgICBpZF9sb2MgPSAqbG9jOwotICAgIGluY3JlbWVudF9ydWxlX2xlbmd0aCAoKmxvYyk7CisgICAgYnJhY2tldGVkX2lkX3N0ciA9IE5VTEw7CiAgICAgQkVHSU4gU0NfQUZURVJfSURFTlRJRklFUjsKICAgfQogCkBAIC0yODEsOCArMjQ0LDE0IEBACiAgICAgcmV0dXJuIElOVDsKICAgfQogCi0gIC8qIENoYXJhY3RlcnMuICBXZSBkb24ndCBjaGVjayB0aGVyZSBpcyBvbmx5IG9uZS4gICovCi0gICInIgkgICAgICBTVFJJTkdfR1JPVzsgdG9rZW5fc3RhcnQgPSBsb2MtPnN0YXJ0OyBCRUdJTiBTQ19FU0NBUEVEX0NIQVJBQ1RFUjsKKyAgLyogSWRlbnRpZmllcnMgbWF5IG5vdCBzdGFydCB3aXRoIGEgZGlnaXQuICBZZXQsIGRvbid0IHNpbGVudGx5CisgICAgIGFjY2VwdCAiMUZPTyIgYXMgIjEgRk9PIi4gICovCisgIHtpbnR9e2lkfSB7CisgICAgY29tcGxhaW5fYXQgKCpsb2MsIF8oImludmFsaWQgaWRlbnRpZmllcjogJXMiKSwgcXVvdGUgKHl5dGV4dCkpOworICB9CisKKyAgLyogQ2hhcmFjdGVycy4gICovCisgICInIgkgICAgICB0b2tlbl9zdGFydCA9IGxvYy0+c3RhcnQ7IEJFR0lOIFNDX0VTQ0FQRURfQ0hBUkFDVEVSOwogCiAgIC8qIFN0cmluZ3MuICovCiAgICJcIiIJICAgICAgdG9rZW5fc3RhcnQgPSBsb2MtPnN0YXJ0OyBCRUdJTiBTQ19FU0NBUEVEX1NUUklORzsKQEAgLTI5MiwxMCArMjYxLDcgQEAKIAogICAvKiBDb2RlIGluIGJldHdlZW4gYnJhY2VzLiAgKi8KICAgInsiIHsKLSAgICBpZiAoY3VycmVudF9ydWxlICYmIGN1cnJlbnRfcnVsZS0+YWN0aW9uKQotICAgICAgZ3JhbW1hcl9taWRydWxlX2FjdGlvbiAoKTsKICAgICBTVFJJTkdfR1JPVzsKLSAgICB0b2tlbl90eXBlID0gQlJBQ0VEX0NPREU7CiAgICAgYnJhY2VzX2xldmVsID0gMDsKICAgICBjb2RlX3N0YXJ0ID0gbG9jLT5zdGFydDsKICAgICBCRUdJTiBTQ19CUkFDRURfQ09ERTsKQEAgLTMxNyw4ICsyODMsMTcgQEAKICAgICByZXR1cm4gUEVSQ0VOVF9QRVJDRU5UOwogICB9CiAKLSAgLiB7Ci0gICAgY29tcGxhaW5fYXQgKCpsb2MsIF8oImludmFsaWQgY2hhcmFjdGVyOiAlcyIpLCBxdW90ZSAoeXl0ZXh0KSk7CisgICJbIiB7CisgICAgYnJhY2tldGVkX2lkX3N0ciA9IE5VTEw7CisgICAgYnJhY2tldGVkX2lkX3N0YXJ0ID0gbG9jLT5zdGFydDsKKyAgICBicmFja2V0ZWRfaWRfY29udGV4dF9zdGF0ZSA9IFlZX1NUQVJUOworICAgIEJFR0lOIFNDX0JSQUNLRVRFRF9JRDsKKyAgfQorCisgIFteXFslQS1aYS16MC05Xzw+e31cIlwnKjt8PS8sIFxmXG5cdFx2XSt8LiB7CisgICAgY29tcGxhaW5fYXQgKCpsb2MsICIlczogJXMiLAorICAgICAgICAgICAgICAgICBuZ2V0dGV4dCAoImludmFsaWQgY2hhcmFjdGVyIiwgImludmFsaWQgY2hhcmFjdGVycyIsIHl5bGVuZyksCisgICAgICAgICAgICAgICAgIHF1b3RlX21lbSAoeXl0ZXh0LCB5eWxlbmcpKTsKICAgfQogCiAgIDw8RU9GPj4gewpAQCAtMzM0LDQxICszMDksMTEzIEBACiAKIDxTQ19BRlRFUl9JREVOVElGSUVSPgogeworICAiWyIgeworICAgIGlmIChicmFja2V0ZWRfaWRfc3RyKQorICAgICAgeworCVJPTExCQUNLX0NVUlJFTlRfVE9LRU47CisJQkVHSU4gU0NfUkVUVVJOX0JSQUNLRVRFRF9JRDsKKwkqbG9jID0gaWRfbG9jOworCXJldHVybiBJRDsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisJYnJhY2tldGVkX2lkX3N0YXJ0ID0gbG9jLT5zdGFydDsKKwlicmFja2V0ZWRfaWRfY29udGV4dF9zdGF0ZSA9IFlZX1NUQVJUOworCUJFR0lOIFNDX0JSQUNLRVRFRF9JRDsKKyAgICAgIH0KKyAgfQogICAiOiIgewotICAgIHJ1bGVfbGVuZ3RoID0gMDsKKyAgICBCRUdJTiAoYnJhY2tldGVkX2lkX3N0ciA/IFNDX1JFVFVSTl9CUkFDS0VURURfSUQgOiBJTklUSUFMKTsKICAgICAqbG9jID0gaWRfbG9jOwotICAgIEJFR0lOIElOSVRJQUw7CiAgICAgcmV0dXJuIElEX0NPTE9OOwogICB9CiAgIC4gewotICAgIHNjYW5uZXJfY3Vyc29yLmNvbHVtbiAtPSBtYnNud2lkdGggKHl5dGV4dCwgeXlsZW5nLCAwKTsKLSAgICB5eWxlc3MgKDApOworICAgIFJPTExCQUNLX0NVUlJFTlRfVE9LRU47CisgICAgQkVHSU4gKGJyYWNrZXRlZF9pZF9zdHIgPyBTQ19SRVRVUk5fQlJBQ0tFVEVEX0lEIDogSU5JVElBTCk7CiAgICAgKmxvYyA9IGlkX2xvYzsKLSAgICBCRUdJTiBJTklUSUFMOwogICAgIHJldHVybiBJRDsKICAgfQogICA8PEVPRj4+IHsKKyAgICBCRUdJTiAoYnJhY2tldGVkX2lkX3N0ciA/IFNDX1JFVFVSTl9CUkFDS0VURURfSUQgOiBJTklUSUFMKTsKICAgICAqbG9jID0gaWRfbG9jOwotICAgIEJFR0lOIElOSVRJQUw7CiAgICAgcmV0dXJuIElEOwogICB9CiB9CiAKKyAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyAgfCBTY2FubmluZyBicmFja2V0ZWQgaWRlbnRpZmllcnMuIHwKKyAgYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworPFNDX0JSQUNLRVRFRF9JRD4KK3sKKyAge2lkfSB7CisgICAgaWYgKGJyYWNrZXRlZF9pZF9zdHIpCisgICAgICB7CisJY29tcGxhaW5fYXQgKCpsb2MsIF8oInVuZXhwZWN0ZWQgaWRlbnRpZmllciBpbiBicmFja2V0ZWQgbmFtZTogJXMiKSwKKwkJICAgICBxdW90ZSAoeXl0ZXh0KSk7CisgICAgICB9CisgICAgZWxzZQorICAgICAgeworCWJyYWNrZXRlZF9pZF9zdHIgPSB1bmlxc3RyX25ldyAoeXl0ZXh0KTsKKwlicmFja2V0ZWRfaWRfbG9jID0gKmxvYzsKKyAgICAgIH0KKyAgfQorICAiXSIgeworICAgIEJFR0lOIGJyYWNrZXRlZF9pZF9jb250ZXh0X3N0YXRlOworICAgIGlmIChicmFja2V0ZWRfaWRfc3RyKQorICAgICAgeworCWlmIChJTklUSUFMID09IGJyYWNrZXRlZF9pZF9jb250ZXh0X3N0YXRlKQorCSAgeworCSAgICB2YWwtPnVuaXFzdHIgPSBicmFja2V0ZWRfaWRfc3RyOworCSAgICBicmFja2V0ZWRfaWRfc3RyID0gMDsKKwkgICAgKmxvYyA9IGJyYWNrZXRlZF9pZF9sb2M7CisJICAgIHJldHVybiBCUkFDS0VURURfSUQ7CisJICB9CisgICAgICB9CisgICAgZWxzZQorICAgICAgY29tcGxhaW5fYXQgKCpsb2MsIF8oImFuIGlkZW50aWZpZXIgZXhwZWN0ZWQiKSk7CisgIH0KKworICBbXlxdLkEtWmEtejAtOV8vIFxmXG5cdFx2XSt8LiB7CisgICAgY29tcGxhaW5fYXQgKCpsb2MsICIlczogJXMiLAorICAgICAgICAgICAgICAgICBuZ2V0dGV4dCAoImludmFsaWQgY2hhcmFjdGVyIGluIGJyYWNrZXRlZCBuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gYnJhY2tldGVkIG5hbWUiLCB5eWxlbmcpLAorICAgICAgICAgICAgICAgICBxdW90ZV9tZW0gKHl5dGV4dCwgeXlsZW5nKSk7CisgIH0KKworICA8PEVPRj4+IHsKKyAgICBCRUdJTiBicmFja2V0ZWRfaWRfY29udGV4dF9zdGF0ZTsKKyAgICB1bmV4cGVjdGVkX2VvZiAoYnJhY2tldGVkX2lkX3N0YXJ0LCAiXSIpOworICB9Cit9CisKKzxTQ19SRVRVUk5fQlJBQ0tFVEVEX0lEPgoreworICAuIHsKKyAgICBST0xMQkFDS19DVVJSRU5UX1RPS0VOOworICAgIHZhbC0+dW5pcXN0ciA9IGJyYWNrZXRlZF9pZF9zdHI7CisgICAgYnJhY2tldGVkX2lkX3N0ciA9IDA7CisgICAgKmxvYyA9IGJyYWNrZXRlZF9pZF9sb2M7CisgICAgQkVHSU4gSU5JVElBTDsKKyAgICByZXR1cm4gQlJBQ0tFVEVEX0lEOworICB9Cit9CisKIAogICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLSAgfCBTY2FubmluZyBhIFlhY2MgY29tbWVudC4gIFRoZSBpbml0aWFsIGAvIConIGlzIGFscmVhZHkgZWF0ZW4uICB8CisgIHwgU2Nhbm5pbmcgYSBZYWNjIGNvbW1lbnQuICBUaGUgaW5pdGlhbCAnLyAqJyBpcyBhbHJlYWR5IGVhdGVuLiAgfAogICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogPFNDX1lBQ0NfQ09NTUVOVD4KIHsKICAgIiovIiAgICAgQkVHSU4gY29udGV4dF9zdGF0ZTsKLSAgLnxcbgkgICA7CisgIC58XG4JICAgY29udGludWU7CiAgIDw8RU9GPj4gIHVuZXhwZWN0ZWRfZW9mICh0b2tlbl9zdGFydCwgIiovIik7IEJFR0lOIGNvbnRleHRfc3RhdGU7CiB9CiAKIAogICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLSAgfCBTY2FubmluZyBhIEMgY29tbWVudC4gIFRoZSBpbml0aWFsIGAvIConIGlzIGFscmVhZHkgZWF0ZW4uICB8CisgIHwgU2Nhbm5pbmcgYSBDIGNvbW1lbnQuICBUaGUgaW5pdGlhbCAnLyAqJyBpcyBhbHJlYWR5IGVhdGVuLiAgfAogICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogPFNDX0NPTU1FTlQ+CkBAIC0zNzksNyArNDI2LDcgQEAKIAogCiAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi0gIHwgU2Nhbm5pbmcgYSBsaW5lIGNvbW1lbnQuICBUaGUgaW5pdGlhbCBgLy8nIGlzIGFscmVhZHkgZWF0ZW4uICB8CisgIHwgU2Nhbm5pbmcgYSBsaW5lIGNvbW1lbnQuICBUaGUgaW5pdGlhbCAnLy8nIGlzIGFscmVhZHkgZWF0ZW4uICB8CiAgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIDxTQ19MSU5FX0NPTU1FTlQ+CkBAIC0zOTcsMTYgKzQ0NCwyMyBAQAogCiA8U0NfRVNDQVBFRF9TVFJJTkc+CiB7Ci0gICJcIiIgeworICAiXCIifCJcbiIgeworICAgIGlmICh5eXRleHRbMF0gPT0gJ1xuJykKKyAgICAgIHVuZXhwZWN0ZWRfbmV3bGluZSAodG9rZW5fc3RhcnQsICJcIiIpOwogICAgIFNUUklOR19GSU5JU0g7CiAgICAgbG9jLT5zdGFydCA9IHRva2VuX3N0YXJ0OwogICAgIHZhbC0+Y2hhcnMgPSBsYXN0X3N0cmluZzsKLSAgICBpbmNyZW1lbnRfcnVsZV9sZW5ndGggKCpsb2MpOwogICAgIEJFR0lOIElOSVRJQUw7CiAgICAgcmV0dXJuIFNUUklORzsKICAgfQotICBcbgkJdW5leHBlY3RlZF9uZXdsaW5lICh0b2tlbl9zdGFydCwgIlwiIik7CUJFR0lOIElOSVRJQUw7Ci0gIDw8RU9GPj4JdW5leHBlY3RlZF9lb2YgKHRva2VuX3N0YXJ0LCAiXCIiKTsJQkVHSU4gSU5JVElBTDsKKyAgPDxFT0Y+PiB7CisgICAgdW5leHBlY3RlZF9lb2YgKHRva2VuX3N0YXJ0LCAiXCIiKTsKKyAgICBTVFJJTkdfRklOSVNIOworICAgIGxvYy0+c3RhcnQgPSB0b2tlbl9zdGFydDsKKyAgICB2YWwtPmNoYXJzID0gbGFzdF9zdHJpbmc7CisgICAgQkVHSU4gSU5JVElBTDsKKyAgICByZXR1cm4gU1RSSU5HOworICB9CiB9CiAKICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgpAQCAtNDE2LDI0ICs0NzAsNDcgQEAKIAogPFNDX0VTQ0FQRURfQ0hBUkFDVEVSPgogewotICAiJyIgewotICAgIHVuc2lnbmVkIGNoYXIgbGFzdF9zdHJpbmdfMTsKLSAgICBTVFJJTkdfR1JPVzsKKyAgIicifCJcbiIgewogICAgIFNUUklOR19GSU5JU0g7CiAgICAgbG9jLT5zdGFydCA9IHRva2VuX3N0YXJ0OwotICAgIHZhbC0+c3ltYm9sID0gc3ltYm9sX2dldCAocXVvdGVhcmdfc3R5bGUgKGVzY2FwZV9xdW90aW5nX3N0eWxlLAotCQkJCQkgICAgICBsYXN0X3N0cmluZyksCi0JCQkgICAgICAqbG9jKTsKLSAgICBzeW1ib2xfY2xhc3Nfc2V0ICh2YWwtPnN5bWJvbCwgdG9rZW5fc3ltLCAqbG9jLCBmYWxzZSk7Ci0gICAgbGFzdF9zdHJpbmdfMSA9IGxhc3Rfc3RyaW5nWzFdOwotICAgIHN5bWJvbF91c2VyX3Rva2VuX251bWJlcl9zZXQgKHZhbC0+c3ltYm9sLCBsYXN0X3N0cmluZ18xLCAqbG9jKTsKKyAgICB2YWwtPmNoYXJhY3RlciA9IGxhc3Rfc3RyaW5nWzBdOworICAgIHsKKyAgICAgIC8qIEZJWE1FOiBFdmVudHVhbGx5LCBtYWtlIHRoZXNlIGVycm9ycy4gICovCisgICAgICBpZiAobGFzdF9zdHJpbmdbMF0gPT0gJ1wwJykKKyAgICAgICAgeworICAgICAgICAgIHdhcm5fYXQgKCpsb2MsIF8oImVtcHR5IGNoYXJhY3RlciBsaXRlcmFsIikpOworICAgICAgICAgIC8qICdcMCcgc2VlbXMgZGFuZ2Vyb3VzIGV2ZW4gaWYgd2UgYXJlIGFib3V0IHRvIGNvbXBsYWluLiAgKi8KKyAgICAgICAgICB2YWwtPmNoYXJhY3RlciA9ICdcJyc7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGxhc3Rfc3RyaW5nWzFdICE9ICdcMCcpCisgICAgICAgIHdhcm5fYXQgKCpsb2MsIF8oImV4dHJhIGNoYXJhY3RlcnMgaW4gY2hhcmFjdGVyIGxpdGVyYWwiKSk7CisgICAgfQorICAgIGlmICh5eXRleHRbMF0gPT0gJ1xuJykKKyAgICAgIHVuZXhwZWN0ZWRfbmV3bGluZSAodG9rZW5fc3RhcnQsICInIik7CiAgICAgU1RSSU5HX0ZSRUU7Ci0gICAgaW5jcmVtZW50X3J1bGVfbGVuZ3RoICgqbG9jKTsKICAgICBCRUdJTiBJTklUSUFMOwotICAgIHJldHVybiBJRDsKKyAgICByZXR1cm4gQ0hBUjsKICAgfQotICBcbgkJdW5leHBlY3RlZF9uZXdsaW5lICh0b2tlbl9zdGFydCwgIiciKTsJQkVHSU4gSU5JVElBTDsKLSAgPDxFT0Y+Pgl1bmV4cGVjdGVkX2VvZiAodG9rZW5fc3RhcnQsICInIik7CUJFR0lOIElOSVRJQUw7CisgIDw8RU9GPj4geworICAgIFNUUklOR19GSU5JU0g7CisgICAgbG9jLT5zdGFydCA9IHRva2VuX3N0YXJ0OworICAgIHZhbC0+Y2hhcmFjdGVyID0gbGFzdF9zdHJpbmdbMF07CisgICAgeworICAgICAgLyogRklYTUU6IEV2ZW50dWFsbHksIG1ha2UgdGhlc2UgZXJyb3JzLiAgKi8KKyAgICAgIGlmIChsYXN0X3N0cmluZ1swXSA9PSAnXDAnKQorICAgICAgICB7CisgICAgICAgICAgd2Fybl9hdCAoKmxvYywgXygiZW1wdHkgY2hhcmFjdGVyIGxpdGVyYWwiKSk7CisgICAgICAgICAgLyogJ1wwJyBzZWVtcyBkYW5nZXJvdXMgZXZlbiBpZiB3ZSBhcmUgYWJvdXQgdG8gY29tcGxhaW4uICAqLworICAgICAgICAgIHZhbC0+Y2hhcmFjdGVyID0gJ1wnJzsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAobGFzdF9zdHJpbmdbMV0gIT0gJ1wwJykKKyAgICAgICAgd2Fybl9hdCAoKmxvYywgXygiZXh0cmEgY2hhcmFjdGVycyBpbiBjaGFyYWN0ZXIgbGl0ZXJhbCIpKTsKKyAgICB9CisgICAgdW5leHBlY3RlZF9lb2YgKHRva2VuX3N0YXJ0LCAiJyIpOworICAgIFNUUklOR19GUkVFOworICAgIEJFR0lOIElOSVRJQUw7CisgICAgcmV0dXJuIENIQVI7CisgIH0KIH0KIAogPFNDX0VTQ0FQRURfQ0hBUkFDVEVSLFNDX0VTQ0FQRURfU1RSSU5HPgpAQCAtNDUwLDEwICs1MjcsOSBAQAogewogICBcXFswLTddezEsM30gewogICAgIHVuc2lnbmVkIGxvbmcgaW50IGMgPSBzdHJ0b3VsICh5eXRleHQgKyAxLCBOVUxMLCA4KTsKLSAgICBpZiAoVUNIQVJfTUFYIDwgYykKLSAgICAgIGNvbXBsYWluX2F0ICgqbG9jLCBfKCJpbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZTogJXMiKSwgcXVvdGUgKHl5dGV4dCkpOwotICAgIGVsc2UgaWYgKCEgYykKLSAgICAgIGNvbXBsYWluX2F0ICgqbG9jLCBfKCJpbnZhbGlkIG51bGwgY2hhcmFjdGVyOiAlcyIpLCBxdW90ZSAoeXl0ZXh0KSk7CisgICAgaWYgKCFjIHx8IFVDSEFSX01BWCA8IGMpCisgICAgICBjb21wbGFpbl9hdCAoKmxvYywgXygiaW52YWxpZCBudW1iZXIgYWZ0ZXIgXFwtZXNjYXBlOiAlcyIpLAorICAgICAgICAgICAgICAgICAgIHl5dGV4dCsxKTsKICAgICBlbHNlCiAgICAgICBvYnN0YWNrXzFncm93ICgmb2JzdGFja19mb3Jfc3RyaW5nLCBjKTsKICAgfQpAQCAtNDYxLDEwICs1MzcsOSBAQAogICBcXHhbMC05YWJjZGVmQUJDREVGXSsgewogICAgIHZlcmlmeSAoVUNIQVJfTUFYIDwgVUxPTkdfTUFYKTsKICAgICB1bnNpZ25lZCBsb25nIGludCBjID0gc3RydG91bCAoeXl0ZXh0ICsgMiwgTlVMTCwgMTYpOwotICAgIGlmIChVQ0hBUl9NQVggPCBjKQotICAgICAgY29tcGxhaW5fYXQgKCpsb2MsIF8oImludmFsaWQgZXNjYXBlIHNlcXVlbmNlOiAlcyIpLCBxdW90ZSAoeXl0ZXh0KSk7Ci0gICAgZWxzZSBpZiAoISBjKQotICAgICAgY29tcGxhaW5fYXQgKCpsb2MsIF8oImludmFsaWQgbnVsbCBjaGFyYWN0ZXI6ICVzIiksIHF1b3RlICh5eXRleHQpKTsKKyAgICBpZiAoIWMgfHwgVUNIQVJfTUFYIDwgYykKKyAgICAgIGNvbXBsYWluX2F0ICgqbG9jLCBfKCJpbnZhbGlkIG51bWJlciBhZnRlciBcXC1lc2NhcGU6ICVzIiksCisgICAgICAgICAgICAgICAgICAgeXl0ZXh0KzEpOwogICAgIGVsc2UKICAgICAgIG9ic3RhY2tfMWdyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsIGMpOwogICB9CkBAIC00ODIsMTYgKzU1NywyMCBAQAogCiAgIFxcKHV8VVswLTlhYmNkZWZBQkNERUZdezR9KVswLTlhYmNkZWZBQkNERUZdezR9IHsKICAgICBpbnQgYyA9IGNvbnZlcnRfdWNuX3RvX2J5dGUgKHl5dGV4dCk7Ci0gICAgaWYgKGMgPCAwKQotICAgICAgY29tcGxhaW5fYXQgKCpsb2MsIF8oImludmFsaWQgZXNjYXBlIHNlcXVlbmNlOiAlcyIpLCBxdW90ZSAoeXl0ZXh0KSk7Ci0gICAgZWxzZSBpZiAoISBjKQotICAgICAgY29tcGxhaW5fYXQgKCpsb2MsIF8oImludmFsaWQgbnVsbCBjaGFyYWN0ZXI6ICVzIiksIHF1b3RlICh5eXRleHQpKTsKKyAgICBpZiAoYyA8PSAwKQorICAgICAgY29tcGxhaW5fYXQgKCpsb2MsIF8oImludmFsaWQgbnVtYmVyIGFmdGVyIFxcLWVzY2FwZTogJXMiKSwKKyAgICAgICAgICAgICAgICAgICB5eXRleHQrMSk7CiAgICAgZWxzZQogICAgICAgb2JzdGFja18xZ3JvdyAoJm9ic3RhY2tfZm9yX3N0cmluZywgYyk7CiAgIH0KICAgXFwoLnxcbikJewotICAgIGNvbXBsYWluX2F0ICgqbG9jLCBfKCJ1bnJlY29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlOiAlcyIpLCBxdW90ZSAoeXl0ZXh0KSk7Ci0gICAgU1RSSU5HX0dST1c7CisgICAgY2hhciBjb25zdCAqcCA9IHl5dGV4dCArIDE7CisgICAgLyogUXVvdGUgb25seSBpZiBlc2NhcGluZyB3b24ndCBtYWtlIHRoZSBjaGFyYWN0ZXIgdmlzaWJsZS4gICovCisgICAgaWYgKGNfaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIpICpwKSAmJiBjX2lzcHJpbnQgKCh1bnNpZ25lZCBjaGFyKSAqcCkpCisgICAgICBwID0gcXVvdGUgKHApOworICAgIGVsc2UKKyAgICAgIHAgPSBxdW90ZWFyZ19zdHlsZV9tZW0gKGVzY2FwZV9xdW90aW5nX3N0eWxlLCBwLCAxKTsKKyAgICBjb21wbGFpbl9hdCAoKmxvYywgXygiaW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgXFwtZXNjYXBlOiAlcyIpLCBwKTsKICAgfQogfQogCkBAIC01MDEsNyArNTgwLDcgQEAKIAogPFNDX0NIQVJBQ1RFUixTQ19TVFJJTkc+CiB7Ci0gIHtzcGxpY2V9fFxce3NwbGljZX1bXlxuJEBcW1xdXQlTVFJJTkdfR1JPVzsKKyAge3NwbGljZX18XFx7c3BsaWNlfVteXG5cW1xdXQlTVFJJTkdfR1JPVzsKIH0KIAogPFNDX0NIQVJBQ1RFUj4KQEAgLTU1MSwxMDEgKzYzMCw0MiBAQAogfQogCiAKLSAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi0gIHwgU2Nhbm5pbmcgYWZ0ZXIgJXVuaW9uIGV0Yy4sIHBvc3NpYmx5IGZvbGxvd2VkIGJ5IHdoaXRlIHNwYWNlLiAgfAotICB8IEZvciAldW5pb24gb25seSwgYWxsb3cgYXJiaXRyYXJ5IEMgY29kZSB0byBhcHBlYXIgYmVmb3JlIHRoZSAgIHwKLSAgfCBmb2xsb3dpbmcgYnJhY2UsIGFzIGFuIGV4dGVuc2lvbiB0byBQT1NJWC4JCQkgICB8Ci0gIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi08U0NfUFJFX0NPREU+Ci17Ci0gIC4gewotICAgIGJvb2wgdmFsaWQgPSB5eXRleHRbMF0gPT0gJ3snIHx8IHRva2VuX3R5cGUgPT0gUEVSQ0VOVF9VTklPTjsKLSAgICBzY2FubmVyX2N1cnNvci5jb2x1bW4gLT0gbWJzbndpZHRoICh5eXRleHQsIHl5bGVuZywgMCk7Ci0gICAgeXlsZXNzICgwKTsKLQotICAgIGlmICh2YWxpZCkKLSAgICAgIHsKLQlicmFjZXNfbGV2ZWwgPSAtMTsKLQljb2RlX3N0YXJ0ID0gbG9jLT5zdGFydDsKLQlCRUdJTiBTQ19CUkFDRURfQ09ERTsKLSAgICAgIH0KLSAgICBlbHNlCi0gICAgICB7Ci0JY29tcGxhaW5fYXQgKCpsb2MsIF8oIm1pc3NpbmcgYHsnIGluICVzIiksCi0JCSAgICAgdG9rZW5fbmFtZSAodG9rZW5fdHlwZSkpOwotCW9ic3RhY2tfc2dyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICJ7fSIpOwotCVNUUklOR19GSU5JU0g7Ci0JdmFsLT5jaGFycyA9IGxhc3Rfc3RyaW5nOwotCUJFR0lOIElOSVRJQUw7Ci0JcmV0dXJuIHRva2VuX3R5cGU7Ci0gICAgICB9Ci0gIH0KLQotICA8PEVPRj4+ICB1bmV4cGVjdGVkX2VvZiAoc2Nhbm5lcl9jdXJzb3IsICJ7fSIpOyBCRUdJTiBJTklUSUFMOwotfQotCi0KLSAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi0gIHwgU2Nhbm5pbmcgc29tZSBjb2RlIGluIGJyYWNlcyAoJXVuaW9uIGFuZCBhY3Rpb25zKS4gVGhlIGluaXRpYWwgfAotICB8ICJ7IiBpcyBhbHJlYWR5IGVhdGVuLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisgIHwgU2Nhbm5pbmcgc29tZSBjb2RlIGluIGJyYWNlcyAoYWN0aW9ucykuIFRoZSBpbml0aWFsICJ7IiBpcyB8CisgIHwgYWxyZWFkeSBlYXRlbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIDxTQ19CUkFDRURfQ09ERT4KIHsKICAgInsifCI8IntzcGxpY2V9IiUiICBTVFJJTkdfR1JPVzsgYnJhY2VzX2xldmVsKys7CiAgICIlIntzcGxpY2V9Ij4iICAgICAgU1RSSU5HX0dST1c7IGJyYWNlc19sZXZlbC0tOwogICAifSIgewotICAgIGJvb2wgb3V0ZXJfYnJhY2UgPSAtLWJyYWNlc19sZXZlbCA8IDA7Ci0KLSAgICAvKiBBcyBhbiB1bmRvY3VtZW50ZWQgQmlzb24gZXh0ZW5zaW9uLCBhcHBlbmQgYDsnIGJlZm9yZSB0aGUgbGFzdAotICAgICAgIGJyYWNlIGluIGJyYWNlZCBjb2RlLCBzbyB0aGF0IHRoZSB1c2VyIGNvZGUgY2FuIG9taXQgdHJhaWxpbmcKLSAgICAgICBgOycuICBCdXQgZG8gbm90IGFwcGVuZCBgOycgaWYgZW11bGF0aW5nIFlhY2MsIHNpbmNlIFlhY2MgZG9lcwotICAgICAgIG5vdCBhcHBlbmQgb25lLgotCi0gICAgICAgRklYTUU6IEJpc29uIHNob3VsZCB3YXJuIGlmIGEgc2VtaWNvbG9uIHNlZW1zIHRvIGJlIG5lY2Vzc2FyeQotICAgICAgIGhlcmUsIGFuZCBzaG91bGQgb21pdCB0aGUgc2VtaWNvbG9uIGlmIGl0IHNlZW1zIHVubmVjZXNzYXJ5Ci0gICAgICAgKGUuZy4sIGFmdGVyICc7JywgJ3snLCBvciAnfScsIGVhY2ggZm9sbG93ZWQgYnkgY29tbWVudHMgb3IKLSAgICAgICB3aGl0ZSBzcGFjZSkuICBTdWNoIGEgd2FybmluZyBzaG91bGRuJ3QgZGVwZW5kIG9uIC0teWFjYzsgaXQKLSAgICAgICBzaG91bGQgZGVwZW5kIG9uIGEgbmV3IC0tcGVkYW50aWMgb3B0aW9uLCB3aGljaCB3b3VsZCBjYXVzZQotICAgICAgIEJpc29uIHRvIHdhcm4gaWYgaXQgZGV0ZWN0cyBhbiBleHRlbnNpb24gdG8gUE9TSVguICAtLXBlZGFudGljCi0gICAgICAgc2hvdWxkIGFsc28gZGlhZ25vc2Ugb3RoZXIgQmlzb24gZXh0ZW5zaW9ucyBsaWtlICV5YWNjLgotICAgICAgIFBlcmhhcHMgdGhlcmUgc2hvdWxkIGFsc28gYmUgYSBHQ0Mtc3R5bGUgLS1wZWRhbnRpYy1lcnJvcnMKLSAgICAgICBvcHRpb24sIHNvIHRoYXQgc3VjaCB3YXJuaW5ncyBhcmUgZGlhZ25vc2VkIGFzIGVycm9ycy4gICovCi0gICAgaWYgKG91dGVyX2JyYWNlICYmIHRva2VuX3R5cGUgPT0gQlJBQ0VEX0NPREUgJiYgISB5YWNjX2ZsYWcpCi0gICAgICBvYnN0YWNrXzFncm93ICgmb2JzdGFja19mb3Jfc3RyaW5nLCAnOycpOwotCiAgICAgb2JzdGFja18xZ3JvdyAoJm9ic3RhY2tfZm9yX3N0cmluZywgJ30nKTsKIAotICAgIGlmIChvdXRlcl9icmFjZSkKKyAgICAtLWJyYWNlc19sZXZlbDsKKyAgICBpZiAoYnJhY2VzX2xldmVsIDwgMCkKICAgICAgIHsKIAlTVFJJTkdfRklOSVNIOwogCWxvYy0+c3RhcnQgPSBjb2RlX3N0YXJ0OwotCXZhbC0+Y2hhcnMgPSBsYXN0X3N0cmluZzsKLQlpbmNyZW1lbnRfcnVsZV9sZW5ndGggKCpsb2MpOwotCWxhc3RfYnJhY2VkX2NvZGVfbG9jID0gKmxvYzsKKwl2YWwtPmNvZGUgPSBsYXN0X3N0cmluZzsKIAlCRUdJTiBJTklUSUFMOwotCXJldHVybiB0b2tlbl90eXBlOworCXJldHVybiBCUkFDRURfQ09ERTsKICAgICAgIH0KICAgfQogCi0gIC8qIFRva2VuaXplIGA8PCUnIGNvcnJlY3RseSAoYXMgYDw8JyBgJScpIHJhdGhlciB0aGFuIGluY29ycnJlY3RseQotICAgICAoYXMgYDwnIGA8JScpLiAgKi8KKyAgLyogVG9rZW5pemUgJzw8JScgY29ycmVjdGx5IChhcyAnPDwnICclJykgcmF0aGVyIHRoYW4gaW5jb3JycmVjdGx5CisgICAgIChhcyAnPCcgJzwlJykuICAqLwogICAiPCJ7c3BsaWNlfSI8IiAgU1RSSU5HX0dST1c7CiAKLSAgIiQiKCI8Int0YWd9Ij4iKT8oLT9bMC05XSt8IiQiKSAgaGFuZGxlX2RvbGxhciAodG9rZW5fdHlwZSwgeXl0ZXh0LCAqbG9jKTsKLSAgIkAiKC0/WzAtOV0rfCIkIikJCSAgIGhhbmRsZV9hdCAodG9rZW5fdHlwZSwgeXl0ZXh0LCAqbG9jKTsKLQotICAiJCIgIHsKLSAgICB3YXJuX2F0ICgqbG9jLCBfKCJzdHJheSBgJCciKSk7Ci0gICAgb2JzdGFja19zZ3JvdyAoJm9ic3RhY2tfZm9yX3N0cmluZywgIiRdWyIpOworICA8PEVPRj4+IHsKKyAgICB1bmV4cGVjdGVkX2VvZiAoY29kZV9zdGFydCwgIn0iKTsKKyAgICBTVFJJTkdfRklOSVNIOworICAgIGxvYy0+c3RhcnQgPSBjb2RlX3N0YXJ0OworICAgIHZhbC0+Y29kZSA9IGxhc3Rfc3RyaW5nOworICAgIEJFR0lOIElOSVRJQUw7CisgICAgcmV0dXJuIEJSQUNFRF9DT0RFOwogICB9Ci0gICJAIiAgewotICAgIHdhcm5fYXQgKCpsb2MsIF8oInN0cmF5IGBAJyIpKTsKLSAgICBvYnN0YWNrX3Nncm93ICgmb2JzdGFja19mb3Jfc3RyaW5nLCAiQEAiKTsKLSAgfQotCi0gIDw8RU9GPj4gIHVuZXhwZWN0ZWRfZW9mIChjb2RlX3N0YXJ0LCAifSIpOyBCRUdJTiBJTklUSUFMOwogfQogCiAKQEAgLTY2Myw3ICs2ODMsMTQgQEAKICAgICByZXR1cm4gUFJPTE9HVUU7CiAgIH0KIAotICA8PEVPRj4+ICB1bmV4cGVjdGVkX2VvZiAoY29kZV9zdGFydCwgIiV9Iik7IEJFR0lOIElOSVRJQUw7CisgIDw8RU9GPj4geworICAgIHVuZXhwZWN0ZWRfZW9mIChjb2RlX3N0YXJ0LCAiJX0iKTsKKyAgICBTVFJJTkdfRklOSVNIOworICAgIGxvYy0+c3RhcnQgPSBjb2RlX3N0YXJ0OworICAgIHZhbC0+Y2hhcnMgPSBsYXN0X3N0cmluZzsKKyAgICBCRUdJTiBJTklUSUFMOworICAgIHJldHVybiBQUk9MT0dVRTsKKyAgfQogfQogCiAKQEAgLTY4NCwxOSArNzExLDYgQEAKIH0KIAogCi0gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi0gIHwgRXNjYXBlIE00IHF1b3RpbmcgY2hhcmFjdGVycyBpbiBDIGNvZGUuICB8Ci0gIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLTxTQ19DT01NRU5ULFNDX0xJTkVfQ09NTUVOVCxTQ19TVFJJTkcsU0NfQ0hBUkFDVEVSLFNDX0JSQUNFRF9DT0RFLFNDX1BST0xPR1VFLFNDX0VQSUxPR1VFPgotewotICBcJAlvYnN0YWNrX3Nncm93ICgmb2JzdGFja19mb3Jfc3RyaW5nLCAiJF1bIik7Ci0gIFxACW9ic3RhY2tfc2dyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICJAQCIpOwotICBcWwlvYnN0YWNrX3Nncm93ICgmb2JzdGFja19mb3Jfc3RyaW5nLCAiQHsiKTsKLSAgXF0Jb2JzdGFja19zZ3JvdyAoJm9ic3RhY2tfZm9yX3N0cmluZywgIkB9Iik7Ci19Ci0KLQogICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogICB8IEJ5IGRlZmF1bHQsIGdyb3cgdGhlIHN0cmluZyBvYnN0YWNrIHdpdGggdGhlIGlucHV0LiAgfAogICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtNzA2LDc5ICs3MjAsNiBAQAogCiAlJQogCi0vKiBLZWVwcyB0cmFjayBvZiB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2VtYW50aWMgdmFsdWVzIHRvIHRoZSBsZWZ0IG9mCi0gICBhIGhhbmRsZSAodGhvc2UgcmVmZXJlbmNlZCBieSAkMCwgJC0xLCBldGMuKSBhcmUgcmVxdWlyZWQgYnkgdGhlCi0gICBzZW1hbnRpYyBhY3Rpb25zIG9mIHRoaXMgZ3JhbW1hci4gKi8KLWludCBtYXhfbGVmdF9zZW1hbnRpY19jb250ZXh0ID0gMDsKLQotLyogSWYgQlVGIGlzIG51bGwsIGFkZCBCVUZTSVpFICh3aGljaCBpbiB0aGlzIGNhc2UgbXVzdCBiZSBsZXNzIHRoYW4KLSAgIElOVF9NQVgpIHRvIENPTFVNTjsgb3RoZXJ3aXNlLCBhZGQgbWJzbndpZHRoIChCVUYsIEJVRlNJWkUsIDApIHRvCi0gICBDT0xVTU4uICBJZiBhbiBvdmVyZmxvdyBvY2N1cnMsIG9yIG1pZ2h0IG9jY3VyIGJ1dCBpcyB1bmRldGVjdGFibGUsCi0gICByZXR1cm4gSU5UX01BWC4gIEFzc3VtZSBDT0xVTU4gaXMgbm9ubmVnYXRpdmUuICAqLwotCi1zdGF0aWMgaW5saW5lIGludAotYWRkX2NvbHVtbl93aWR0aCAoaW50IGNvbHVtbiwgY2hhciBjb25zdCAqYnVmLCBzaXplX3QgYnVmc2l6ZSkKLXsKLSAgc2l6ZV90IHdpZHRoOwotICB1bnNpZ25lZCBpbnQgcmVtYWluaW5nX2NvbHVtbnMgPSBJTlRfTUFYIC0gY29sdW1uOwotCi0gIGlmIChidWYpCi0gICAgewotICAgICAgaWYgKElOVF9NQVggLyAyIDw9IGJ1ZnNpemUpCi0JcmV0dXJuIElOVF9NQVg7Ci0gICAgICB3aWR0aCA9IG1ic253aWR0aCAoYnVmLCBidWZzaXplLCAwKTsKLSAgICB9Ci0gIGVsc2UKLSAgICB3aWR0aCA9IGJ1ZnNpemU7Ci0KLSAgcmV0dXJuIHdpZHRoIDw9IHJlbWFpbmluZ19jb2x1bW5zID8gY29sdW1uICsgd2lkdGggOiBJTlRfTUFYOwotfQotCi0vKiBTZXQgKkxPQyBhbmQgYWRqdXN0IHNjYW5uZXIgY3Vyc29yIHRvIGFjY291bnQgZm9yIHRva2VuIFRPS0VOIG9mCi0gICBzaXplIFNJWkUuICAqLwotCi1zdGF0aWMgdm9pZAotYWRqdXN0X2xvY2F0aW9uIChsb2NhdGlvbiAqbG9jLCBjaGFyIGNvbnN0ICp0b2tlbiwgc2l6ZV90IHNpemUpCi17Ci0gIGludCBsaW5lID0gc2Nhbm5lcl9jdXJzb3IubGluZTsKLSAgaW50IGNvbHVtbiA9IHNjYW5uZXJfY3Vyc29yLmNvbHVtbjsKLSAgY2hhciBjb25zdCAqcDAgPSB0b2tlbjsKLSAgY2hhciBjb25zdCAqcCA9IHRva2VuOwotICBjaGFyIGNvbnN0ICpsaW0gPSB0b2tlbiArIHNpemU7Ci0KLSAgbG9jLT5zdGFydCA9IHNjYW5uZXJfY3Vyc29yOwotCi0gIGZvciAocCA9IHRva2VuOyBwIDwgbGltOyBwKyspCi0gICAgc3dpdGNoICgqcCkKLSAgICAgIHsKLSAgICAgIGNhc2UgJ1xuJzoKLQlsaW5lICs9IGxpbmUgPCBJTlRfTUFYOwotCWNvbHVtbiA9IDE7Ci0JcDAgPSBwICsgMTsKLQlicmVhazsKLQotICAgICAgY2FzZSAnXHQnOgotCWNvbHVtbiA9IGFkZF9jb2x1bW5fd2lkdGggKGNvbHVtbiwgcDAsIHAgLSBwMCk7Ci0JY29sdW1uID0gYWRkX2NvbHVtbl93aWR0aCAoY29sdW1uLCBOVUxMLCA4IC0gKChjb2x1bW4gLSAxKSAmIDcpKTsKLQlwMCA9IHAgKyAxOwotCWJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotCWJyZWFrOwotICAgICAgfQotCi0gIHNjYW5uZXJfY3Vyc29yLmxpbmUgPSBsaW5lOwotICBzY2FubmVyX2N1cnNvci5jb2x1bW4gPSBjb2x1bW4gPSBhZGRfY29sdW1uX3dpZHRoIChjb2x1bW4sIHAwLCBwIC0gcDApOwotCi0gIGxvYy0+ZW5kID0gc2Nhbm5lcl9jdXJzb3I7Ci0KLSAgaWYgKGxpbmUgPT0gSU5UX01BWCAmJiBsb2MtPnN0YXJ0LmxpbmUgIT0gSU5UX01BWCkKLSAgICB3YXJuX2F0ICgqbG9jLCBfKCJsaW5lIG51bWJlciBvdmVyZmxvdyIpKTsKLSAgaWYgKGNvbHVtbiA9PSBJTlRfTUFYICYmIGxvYy0+c3RhcnQuY29sdW1uICE9IElOVF9NQVgpCi0gICAgd2Fybl9hdCAoKmxvYywgXygiY29sdW1uIG51bWJlciBvdmVyZmxvdyIpKTsKLX0KLQotCiAvKiBSZWFkIGJ5dGVzIGZyb20gRlAgaW50byBidWZmZXIgQlVGIG9mIHNpemUgU0laRS4gIFJldHVybiB0aGUKICAgIG51bWJlciBvZiBieXRlcyByZWFkLiAgUmVtb3ZlICdccicgZnJvbSBpbnB1dCwgdHJlYXRpbmcgXHJcbgogICAgYW5kIGlzb2xhdGVkIFxyIGFzIFxuLiAgKi8KQEAgLTgyNiwxNzMgKzc2Nyw2IEBACiB9CiAKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFRFWFQgaXMgcG9pbnRpbmcgdG8gYSB3YW5uYWJlZSBzZW1hbnRpYyB2YWx1ZSAoaS5lLiwgYSBgJCcpLiAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCBQb3NzaWJsZSBpbnB1dHM6ICRbPFRZUEVOQU1FPl0oJHxpbnRlZ2VyKSAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgT3V0cHV0IHRvIE9CU1RBQ0tfRk9SX1NUUklORyBhIHJlZmVyZW5jZSB0byB0aGlzIHNlbWFudGljIHZhbHVlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgYm9vbAotaGFuZGxlX2FjdGlvbl9kb2xsYXIgKGNoYXIgKnRleHQsIGxvY2F0aW9uIGxvYykKLXsKLSAgY29uc3QgY2hhciAqdHlwZV9uYW1lID0gTlVMTDsKLSAgY2hhciAqY3AgPSB0ZXh0ICsgMTsKLQotICBpZiAoISBjdXJyZW50X3J1bGUpCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIC8qIEdldCB0aGUgdHlwZSBuYW1lIGlmIGV4cGxpY2l0LiAqLwotICBpZiAoKmNwID09ICc8JykKLSAgICB7Ci0gICAgICB0eXBlX25hbWUgPSArK2NwOwotICAgICAgd2hpbGUgKCpjcCAhPSAnPicpCi0JKytjcDsKLSAgICAgICpjcCA9ICdcMCc7Ci0gICAgICArK2NwOwotICAgIH0KLQotICBpZiAoKmNwID09ICckJykKLSAgICB7Ci0gICAgICBpZiAoIXR5cGVfbmFtZSkKLQl0eXBlX25hbWUgPSBzeW1ib2xfbGlzdF9uX3R5cGVfbmFtZV9nZXQgKGN1cnJlbnRfcnVsZSwgbG9jLCAwKTsKLSAgICAgIGlmICghdHlwZV9uYW1lICYmIHR5cGVkKQotCWNvbXBsYWluX2F0IChsb2MsIF8oIiQkIG9mIGAlcycgaGFzIG5vIGRlY2xhcmVkIHR5cGUiKSwKLQkJICAgICBjdXJyZW50X3J1bGUtPnN5bS0+dGFnKTsKLSAgICAgIGlmICghdHlwZV9uYW1lKQotCXR5cGVfbmFtZSA9ICIiOwotICAgICAgb2JzdGFja19mZ3JvdzEgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsCi0JCSAgICAgICJdYjRfbGhzX3ZhbHVlKFslc10pWyIsIHR5cGVfbmFtZSk7Ci0gICAgICBjdXJyZW50X3J1bGUtPnVzZWQgPSB0cnVlOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIGxvbmcgaW50IG51bSA9IHN0cnRvbCAoY3AsIE5VTEwsIDEwKTsKLQotICAgICAgaWYgKDEgLSBJTlRfTUFYICsgcnVsZV9sZW5ndGggPD0gbnVtICYmIG51bSA8PSBydWxlX2xlbmd0aCkKLQl7Ci0JICBpbnQgbiA9IG51bTsKLQkgIGlmIChtYXhfbGVmdF9zZW1hbnRpY19jb250ZXh0IDwgMSAtIG4pCi0JICAgIG1heF9sZWZ0X3NlbWFudGljX2NvbnRleHQgPSAxIC0gbjsKLQkgIGlmICghdHlwZV9uYW1lICYmIDAgPCBuKQotCSAgICB0eXBlX25hbWUgPSBzeW1ib2xfbGlzdF9uX3R5cGVfbmFtZV9nZXQgKGN1cnJlbnRfcnVsZSwgbG9jLCBuKTsKLQkgIGlmICghdHlwZV9uYW1lICYmIHR5cGVkKQotCSAgICBjb21wbGFpbl9hdCAobG9jLCBfKCIkJWQgb2YgYCVzJyBoYXMgbm8gZGVjbGFyZWQgdHlwZSIpLAotCQkJIG4sIGN1cnJlbnRfcnVsZS0+c3ltLT50YWcpOwotCSAgaWYgKCF0eXBlX25hbWUpCi0JICAgIHR5cGVfbmFtZSA9ICIiOwotCSAgb2JzdGFja19mZ3JvdzMgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsCi0JCQkgICJdYjRfcmhzX3ZhbHVlKCVkLCAlZCwgWyVzXSlbIiwKLQkJCSAgcnVsZV9sZW5ndGgsIG4sIHR5cGVfbmFtZSk7Ci0JICBzeW1ib2xfbGlzdF9uX3VzZWRfc2V0IChjdXJyZW50X3J1bGUsIG4sIHRydWUpOwotCX0KLSAgICAgIGVsc2UKLQljb21wbGFpbl9hdCAobG9jLCBfKCJpbnRlZ2VyIG91dCBvZiByYW5nZTogJXMiKSwgcXVvdGUgKHRleHQpKTsKLSAgICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBNYXAgYCQ/JyBvbnRvIHRoZSBwcm9wZXIgTTQgc3ltYm9sLCBkZXBlbmRpbmcgb24gaXRzIFRPS0VOX1RZUEUgfAotfCAoYXJlIHdlIGluIGFuIGFjdGlvbj8pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgdm9pZAotaGFuZGxlX2RvbGxhciAoaW50IHRva2VuX3R5cGUsIGNoYXIgKnRleHQsIGxvY2F0aW9uIGxvYykKLXsKLSAgc3dpdGNoICh0b2tlbl90eXBlKQotICAgIHsKLSAgICBjYXNlIEJSQUNFRF9DT0RFOgotICAgICAgaWYgKGhhbmRsZV9hY3Rpb25fZG9sbGFyICh0ZXh0LCBsb2MpKQotCXJldHVybjsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBQRVJDRU5UX0RFU1RSVUNUT1I6Ci0gICAgY2FzZSBQRVJDRU5UX0lOSVRJQUxfQUNUSU9OOgotICAgIGNhc2UgUEVSQ0VOVF9QUklOVEVSOgotICAgICAgaWYgKHRleHRbMV0gPT0gJyQnKQotCXsKLQkgIG9ic3RhY2tfc2dyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICJdYjRfZG9sbGFyX2RvbGxhclsiKTsKLQkgIHJldHVybjsKLQl9Ci0gICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgY29tcGxhaW5fYXQgKGxvYywgXygiaW52YWxpZCB2YWx1ZTogJXMiKSwgcXVvdGUgKHRleHQpKTsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgVEVYVCBpcyBhIGxvY2F0aW9uIHRva2VuIChpLmUuLCBhIGBALi4uJykuICBPdXRwdXQgdG8gfAotfCBPQlNUQUNLX0ZPUl9TVFJJTkcgYSByZWZlcmVuY2UgdG8gdGhpcyBsb2NhdGlvbi4gICAgICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBib29sCi1oYW5kbGVfYWN0aW9uX2F0IChjaGFyICp0ZXh0LCBsb2NhdGlvbiBsb2MpCi17Ci0gIGNoYXIgKmNwID0gdGV4dCArIDE7Ci0gIGxvY2F0aW9uc19mbGFnID0gdHJ1ZTsKLQotICBpZiAoISBjdXJyZW50X3J1bGUpCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIGlmICgqY3AgPT0gJyQnKQotICAgIG9ic3RhY2tfc2dyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICJdYjRfbGhzX2xvY2F0aW9uWyIpOwotICBlbHNlCi0gICAgewotICAgICAgbG9uZyBpbnQgbnVtID0gc3RydG9sIChjcCwgTlVMTCwgMTApOwotCi0gICAgICBpZiAoMSAtIElOVF9NQVggKyBydWxlX2xlbmd0aCA8PSBudW0gJiYgbnVtIDw9IHJ1bGVfbGVuZ3RoKQotCXsKLQkgIGludCBuID0gbnVtOwotCSAgb2JzdGFja19mZ3JvdzIgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICJdYjRfcmhzX2xvY2F0aW9uKCVkLCAlZClbIiwKLQkJCSAgcnVsZV9sZW5ndGgsIG4pOwotCX0KLSAgICAgIGVsc2UKLQljb21wbGFpbl9hdCAobG9jLCBfKCJpbnRlZ2VyIG91dCBvZiByYW5nZTogJXMiKSwgcXVvdGUgKHRleHQpKTsKLSAgICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBNYXAgYEA/JyBvbnRvIHRoZSBwcm9wZXIgTTQgc3ltYm9sLCBkZXBlbmRpbmcgb24gaXRzIFRPS0VOX1RZUEUgfAotfCAoYXJlIHdlIGluIGFuIGFjdGlvbj8pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgdm9pZAotaGFuZGxlX2F0IChpbnQgdG9rZW5fdHlwZSwgY2hhciAqdGV4dCwgbG9jYXRpb24gbG9jKQotewotICBzd2l0Y2ggKHRva2VuX3R5cGUpCi0gICAgewotICAgIGNhc2UgQlJBQ0VEX0NPREU6Ci0gICAgICBoYW5kbGVfYWN0aW9uX2F0ICh0ZXh0LCBsb2MpOwotICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBQRVJDRU5UX0lOSVRJQUxfQUNUSU9OOgotICAgIGNhc2UgUEVSQ0VOVF9ERVNUUlVDVE9SOgotICAgIGNhc2UgUEVSQ0VOVF9QUklOVEVSOgotICAgICAgaWYgKHRleHRbMV0gPT0gJyQnKQotCXsKLQkgIG9ic3RhY2tfc2dyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICJdYjRfYXRfZG9sbGFyWyIpOwotCSAgcmV0dXJuOwotCX0KLSAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICAgIH0KLQotICBjb21wbGFpbl9hdCAobG9jLCBfKCJpbnZhbGlkIHZhbHVlOiAlcyIpLCBxdW90ZSAodGV4dCkpOwotfQotCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCBTY2FuIE5VTUJFUiBmb3IgYSBiYXNlLUJBU0UgaW50ZWdlciBhdCBsb2NhdGlvbiBMT0MuICB8CkBAIC0xMDcxLDM2ICs4NDUsMjggQEAKIH0KIAogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IEhhbmRsZSBgI2xpbmUgSU5UICJGSUxFIicuICBBUkdTIGhhcyBhbHJlYWR5IHNraXBwZWQgYCNsaW5lICcuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgSGFuZGxlICcjbGluZSBJTlQoICJGSUxFIik/XG4nLiAgQVJHUyBoYXMgYWxyZWFkeSBza2lwcGVkICcjbGluZSAnLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyB2b2lkCiBoYW5kbGVfc3luY2xpbmUgKGNoYXIgKmFyZ3MsIGxvY2F0aW9uIGxvYykKIHsKLSAgY2hhciAqYWZ0ZXJfbnVtOwotICB1bnNpZ25lZCBsb25nIGludCBsaW5lbm8gPSBzdHJ0b3VsIChhcmdzLCAmYWZ0ZXJfbnVtLCAxMCk7Ci0gIGNoYXIgKmZpbGUgPSBzdHJjaHIgKGFmdGVyX251bSwgJyInKSArIDE7Ci0gICpzdHJjaHIgKGZpbGUsICciJykgPSAnXDAnOworICBjaGFyICpmaWxlOworICB1bnNpZ25lZCBsb25nIGludCBsaW5lbm8gPSBzdHJ0b3VsIChhcmdzLCAmZmlsZSwgMTApOwogICBpZiAoSU5UX01BWCA8PSBsaW5lbm8pCiAgICAgewogICAgICAgd2Fybl9hdCAobG9jLCBfKCJsaW5lIG51bWJlciBvdmVyZmxvdyIpKTsKICAgICAgIGxpbmVubyA9IElOVF9NQVg7CiAgICAgfQotICBzY2FubmVyX2N1cnNvci5maWxlID0gY3VycmVudF9maWxlID0gdW5pcXN0cl9uZXcgKGZpbGUpOwotICBzY2FubmVyX2N1cnNvci5saW5lID0gbGluZW5vOwotICBzY2FubmVyX2N1cnNvci5jb2x1bW4gPSAxOwotfQogCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBSZXBvcnQgYSBydWxlIHRoYXQgaXMgdG9vIGxvbmcuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIHZvaWQKLXJ1bGVfbGVuZ3RoX292ZXJmbG93IChsb2NhdGlvbiBsb2MpCi17Ci0gIGZhdGFsX2F0IChsb2MsIF8oInJ1bGUgaXMgdG9vIGxvbmciKSk7CisgIGZpbGUgPSBtYnNjaHIgKGZpbGUsICciJyk7CisgIGlmIChmaWxlKQorICAgIHsKKyAgICAgICptYnNjaHIgKGZpbGUgKyAxLCAnIicpID0gJ1wwJzsKKyAgICAgIGN1cnJlbnRfZmlsZSA9IHVuaXFzdHJfbmV3IChmaWxlICsgMSk7CisgICAgfQorICBib3VuZGFyeV9zZXQgKCZzY2FubmVyX2N1cnNvciwgY3VycmVudF9maWxlLCBsaW5lbm8sIDEpOwogfQogCiAKQEAgLTExMTYsNiArODgyLDEwIEBACiAgIGxvY2F0aW9uIGxvYzsKICAgbG9jLnN0YXJ0ID0gc3RhcnQ7CiAgIGxvYy5lbmQgPSBzY2FubmVyX2N1cnNvcjsKKyAgdG9rZW5fZW5kID0gcXVvdGUgKHRva2VuX2VuZCk7CisgIC8qIEluc3RlYWQgb2YgJ1wnJywgZGlzcGxheSAiJyIuICAqLworICBpZiAoIXN0cmNtcCAodG9rZW5fZW5kLCAiJ1xcJyciKSkKKyAgICB0b2tlbl9lbmQgPSAiXCInXCIiOwogICBjb21wbGFpbl9hdCAobG9jLCBfKG1zZ2lkKSwgdG9rZW5fZW5kKTsKIH0KIApAQCAtMTEyOCw3ICs4OTgsNyBAQAogc3RhdGljIHZvaWQKIHVuZXhwZWN0ZWRfZW9mIChib3VuZGFyeSBzdGFydCwgY2hhciBjb25zdCAqdG9rZW5fZW5kKQogewotICB1bmV4cGVjdGVkX2VuZCAoc3RhcnQsIE5fKCJtaXNzaW5nIGAlcycgYXQgZW5kIG9mIGZpbGUiKSwgdG9rZW5fZW5kKTsKKyAgdW5leHBlY3RlZF9lbmQgKHN0YXJ0LCBOXygibWlzc2luZyAlcyBhdCBlbmQgb2YgZmlsZSIpLCB0b2tlbl9lbmQpOwogfQogCiAKQEAgLTExMzksNyArOTA5LDcgQEAKIHN0YXRpYyB2b2lkCiB1bmV4cGVjdGVkX25ld2xpbmUgKGJvdW5kYXJ5IHN0YXJ0LCBjaGFyIGNvbnN0ICp0b2tlbl9lbmQpCiB7Ci0gIHVuZXhwZWN0ZWRfZW5kIChzdGFydCwgTl8oIm1pc3NpbmcgYCVzJyBhdCBlbmQgb2YgbGluZSIpLCB0b2tlbl9lbmQpOworICB1bmV4cGVjdGVkX2VuZCAoc3RhcnQsIE5fKCJtaXNzaW5nICVzIGF0IGVuZCBvZiBsaW5lIiksIHRva2VuX2VuZCk7CiB9CiAKIApAQCAtMTE0OCw3ICs5MTgsNyBAQAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiB2b2lkCi1zY2FubmVyX2luaXRpYWxpemUgKHZvaWQpCitncmFtX3NjYW5uZXJfaW5pdGlhbGl6ZSAodm9pZCkKIHsKICAgb2JzdGFja19pbml0ICgmb2JzdGFja19mb3Jfc3RyaW5nKTsKIH0KQEAgLTExNTksOSArOTI5LDkgQEAKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHZvaWQKLXNjYW5uZXJfZnJlZSAodm9pZCkKK2dyYW1fc2Nhbm5lcl9mcmVlICh2b2lkKQogewogICBvYnN0YWNrX2ZyZWUgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsIDApOwogICAvKiBSZWNsYWltIEZsZXgncyBidWZmZXJzLiAgKi8KLSAgeXlfZGVsZXRlX2J1ZmZlciAoWVlfQ1VSUkVOVF9CVUZGRVIpOworICB5eWxleF9kZXN0cm95ICgpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL3NjYW4tc2tlbC1jLmMgYi9zcmMvc2Nhbi1za2VsLWMuYwppbmRleCAxYTA0N2NmLi5mYjFhZWE2IDEwMDY0NAotLS0gYS9zcmMvc2Nhbi1za2VsLWMuYworKysgYi9zcmMvc2Nhbi1za2VsLWMuYwpAQCAtMSwyICsxLDMgQEAKICNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlICJzeXN0ZW0uaCIKICNpbmNsdWRlICJzY2FuLXNrZWwuYyIKZGlmZiAtLWdpdCBhL3NyYy9zY2FuLXNrZWwuYyBiL3NyYy9zY2FuLXNrZWwuYwppbmRleCBmMmRkMThjLi45ODQxNzMwIDEwMDY0NAotLS0gYS9zcmMvc2Nhbi1za2VsLmMKKysrIGIvc3JjL3NjYW4tc2tlbC5jCkBAIC02LDEwICs2LDM3IEBACiAKIC8qIEEgbGV4aWNhbCBzY2FubmVyIGdlbmVyYXRlZCBieSBmbGV4ICovCiAKKy8qICVub3QtZm9yLWhlYWRlciAqLworCisvKiAlaWYtYy1vbmx5ICovCisvKiAlaWYtbm90LXJlZW50cmFudCAqLworI2RlZmluZSB5eV9jcmVhdGVfYnVmZmVyIHNrZWxfX2NyZWF0ZV9idWZmZXIKKyNkZWZpbmUgeXlfZGVsZXRlX2J1ZmZlciBza2VsX19kZWxldGVfYnVmZmVyCisjZGVmaW5lIHl5X2ZsZXhfZGVidWcgc2tlbF9fZmxleF9kZWJ1ZworI2RlZmluZSB5eV9pbml0X2J1ZmZlciBza2VsX19pbml0X2J1ZmZlcgorI2RlZmluZSB5eV9mbHVzaF9idWZmZXIgc2tlbF9fZmx1c2hfYnVmZmVyCisjZGVmaW5lIHl5X2xvYWRfYnVmZmVyX3N0YXRlIHNrZWxfX2xvYWRfYnVmZmVyX3N0YXRlCisjZGVmaW5lIHl5X3N3aXRjaF90b19idWZmZXIgc2tlbF9fc3dpdGNoX3RvX2J1ZmZlcgorI2RlZmluZSB5eWluIHNrZWxfaW4KKyNkZWZpbmUgeXlsZW5nIHNrZWxfbGVuZworI2RlZmluZSB5eWxleCBza2VsX2xleAorI2RlZmluZSB5eWxpbmVubyBza2VsX2xpbmVubworI2RlZmluZSB5eW91dCBza2VsX291dAorI2RlZmluZSB5eXJlc3RhcnQgc2tlbF9yZXN0YXJ0CisjZGVmaW5lIHl5dGV4dCBza2VsX3RleHQKKyNkZWZpbmUgeXl3cmFwIHNrZWxfd3JhcAorI2RlZmluZSB5eWFsbG9jIHNrZWxfYWxsb2MKKyNkZWZpbmUgeXlyZWFsbG9jIHNrZWxfcmVhbGxvYworI2RlZmluZSB5eWZyZWUgc2tlbF9mcmVlCisKKy8qICVlbmRpZiAqLworLyogJWVuZGlmICovCisvKiAlb2stZm9yLWhlYWRlciAqLworCiAjZGVmaW5lIEZMRVhfU0NBTk5FUgogI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgogI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJT04gNQotI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMzEKKyNkZWZpbmUgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OIDM3CiAjaWYgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OID4gMAogI2RlZmluZSBGTEVYX0JFVEEKICNlbmRpZgpAQCAtNDcsNyArNzQsMTUgQEAKIAogLyogQzk5IHN5c3RlbXMgaGF2ZSA8aW50dHlwZXMuaD4uIE5vbi1DOTkgc3lzdGVtcyBtYXkgb3IgbWF5IG5vdC4gKi8KIAotI2lmIGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKyNpZiBkZWZpbmVkIChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKworLyogQzk5IHNheXMgdG8gZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwKKyAqIGlmIHlvdSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZvciBpbnQgdHlwZXMuIAorICovCisjaWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyAxCisjZW5kaWYKKwogI2luY2x1ZGUgPGludHR5cGVzLmg+CiB0eXBlZGVmIGludDhfdCBmbGV4X2ludDhfdDsKIHR5cGVkZWYgdWludDhfdCBmbGV4X3VpbnQ4X3Q7CkBAIC02Miw3ICs5Nyw2IEBACiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZsZXhfdWludDE2X3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OwotI2VuZGlmIC8qICEgQzk5ICovCiAKIC8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KICNpZm5kZWYgSU5UOF9NSU4KQEAgLTkzLDYgKzEyNyw4IEBACiAjZGVmaW5lIFVJTlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQogI2VuZGlmCiAKKyNlbmRpZiAvKiAhIEM5OSAqLworCiAjZW5kaWYgLyogISBGTEVYSU5UX0ggKi8KIAogLyogJWVuZGlmICovCkBAIC0xMDcsMTEgKzE0MywxMiBAQAogCiAjZWxzZQkvKiAhIF9fY3BsdXNwbHVzICovCiAKLSNpZiBfX1NURENfXworLyogQzk5IHJlcXVpcmVzIF9fU1REQ19fIHRvIGJlIGRlZmluZWQgYXMgMS4gKi8KKyNpZiBkZWZpbmVkIChfX1NURENfXykKIAogI2RlZmluZSBZWV9VU0VfQ09OU1QKIAotI2VuZGlmCS8qIF9fU1REQ19fICovCisjZW5kaWYJLyogZGVmaW5lZCAoX19TVERDX18pICovCiAjZW5kaWYJLyogISBfX2NwbHVzcGx1cyAqLwogCiAjaWZkZWYgWVlfVVNFX0NPTlNUCkBAIC0xNjksMTMgKzIwNiwyMiBAQAogI2RlZmluZSBZWV9CVUZfU0laRSAxNjM4NAogI2VuZGlmCiAKKy8qIFRoZSBzdGF0ZSBidWYgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBvbmUgc3RhdGUgcGVyIGNoYXJhY3RlciBpbiB0aGUgbWFpbiBidWZmZXIuCisgKi8KKyNkZWZpbmUgWVlfU1RBVEVfQlVGX1NJWkUgICAoKFlZX0JVRl9TSVpFICsgMikgKiBzaXplb2YoeXlfc3RhdGVfdHlwZSkpCisKICNpZm5kZWYgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKICNkZWZpbmUgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKIHR5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOwogI2VuZGlmCiAKKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKK3R5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKKyNlbmRpZgorCiAvKiAlaWYtbm90LXJlZW50cmFudCAqLwotZXh0ZXJuIGludCBza2VsX2xlbmc7CitleHRlcm4geXlfc2l6ZV90IHNrZWxfbGVuZzsKIC8qICVlbmRpZiAqLwogCiAvKiAlaWYtYy1vbmx5ICovCkBAIC0yMDYsMTYgKzI1Miw2IEBACiAKICNkZWZpbmUgdW5wdXQoYykgeXl1bnB1dCggYywgKHl5dGV4dF9wdHIpICApCiAKLS8qIFRoZSBmb2xsb3dpbmcgaXMgYmVjYXVzZSB3ZSBjYW5ub3QgcG9ydGFibHkgZ2V0IG91ciBoYW5kcyBvbiBzaXplX3QKLSAqICh3aXRob3V0IGF1dG9jb25mJ3MgaGVscCwgd2hpY2ggaXNuJ3QgYXZhaWxhYmxlIGJlY2F1c2Ugd2Ugd2FudAotICogZmxleC1nZW5lcmF0ZWQgc2Nhbm5lcnMgdG8gY29tcGlsZSBvbiB0aGVpciBvd24pLgotICovCi0KLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKLSNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKLXR5cGVkZWYgdW5zaWduZWQgaW50IHl5X3NpemVfdDsKLSNlbmRpZgotCiAjaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKICNkZWZpbmUgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQogc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQpAQCAtMjM4LDcgKzI3NCw3IEBACiAJLyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGluZyBFT0IKIAkgKiBjaGFyYWN0ZXJzLgogCSAqLwotCWludCB5eV9uX2NoYXJzOworCXl5X3NpemVfdCB5eV9uX2NoYXJzOwogCiAJLyogV2hldGhlciB3ZSAib3duIiB0aGUgYnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAogCSAqIGFuZCBjYW4gcmVhbGxvYygpIGl0IHRvIGdyb3cgaXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0IHRvCkBAIC0zMjIsMTIgKzM1OCwxMiBAQAogCiAvKiB5eV9ob2xkX2NoYXIgaG9sZHMgdGhlIGNoYXJhY3RlciBsb3N0IHdoZW4gc2tlbF90ZXh0IGlzIGZvcm1lZC4gKi8KIHN0YXRpYyBjaGFyIHl5X2hvbGRfY2hhcjsKLXN0YXRpYyBpbnQgeXlfbl9jaGFyczsJCS8qIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYgKi8KLWludCBza2VsX2xlbmc7CitzdGF0aWMgeXlfc2l6ZV90IHl5X25fY2hhcnM7CQkvKiBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmICovCit5eV9zaXplX3Qgc2tlbF9sZW5nOwogCiAvKiBQb2ludHMgdG8gY3VycmVudCBjaGFyYWN0ZXIgaW4gYnVmZmVyLiAqLwogc3RhdGljIGNoYXIgKnl5X2NfYnVmX3AgPSAoY2hhciAqKSAwOwotc3RhdGljIGludCB5eV9pbml0ID0gMTsJCS8qIHdoZXRoZXIgd2UgbmVlZCB0byBpbml0aWFsaXplICovCitzdGF0aWMgaW50IHl5X2luaXQgPSAwOwkJLyogd2hldGhlciB3ZSBuZWVkIHRvIGluaXRpYWxpemUgKi8KIHN0YXRpYyBpbnQgeXlfc3RhcnQgPSAwOwkvKiBzdGFydCBzdGF0ZSBudW1iZXIgKi8KIAogLyogRmxhZyB3aGljaCBpcyB1c2VkIHRvIGFsbG93IHNrZWxfd3JhcCgpJ3MgdG8gZG8gYnVmZmVyIHN3aXRjaGVzCkBAIC0zNTQsNyArMzkwLDcgQEAKIAogWVlfQlVGRkVSX1NUQVRFIHNrZWxfX3NjYW5fYnVmZmVyIChjaGFyICpiYXNlLHl5X3NpemVfdCBzaXplICApOwogWVlfQlVGRkVSX1NUQVRFIHNrZWxfX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKnl5X3N0ciAgKTsKLVlZX0JVRkZFUl9TVEFURSBza2VsX19zY2FuX2J5dGVzICh5eWNvbnN0IGNoYXIgKmJ5dGVzLGludCBsZW4gICk7CitZWV9CVUZGRVJfU1RBVEUgc2tlbF9fc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRlcyx5eV9zaXplX3QgbGVuICApOwogCiAvKiAlZW5kaWYgKi8KIApAQCAtMzg5LDcgKzQyNSw3IEBACiAvKiAlJSBbMS4wXSBza2VsX3RleHQvc2tlbF9pbi9za2VsX291dC95eV9zdGF0ZV90eXBlL3NrZWxfbGluZW5vIGV0Yy4gZGVmJ3MgJiBpbml0IGdvIGhlcmUgKi8KIC8qIEJlZ2luIHVzZXIgc2VjdDMgKi8KIAotI2RlZmluZSBza2VsX3dyYXAobikgMQorI2RlZmluZSBza2VsX3dyYXAoKSAxCiAjZGVmaW5lIFlZX1NLSVBfWVlXUkFQCiAKICNkZWZpbmUgRkxFWF9ERUJVRwpAQCAtNDI5LDggKzQ2NSw4IEBACiAJKHl5X2NfYnVmX3ApID0geXlfY3A7CiAKIC8qICUlIFs0LjBdIGRhdGEgdGFibGVzIGZvciB0aGUgREZBIGFuZCB0aGUgdXNlcidzIHNlY3Rpb24gMSBkZWZpbml0aW9ucyBnbyBoZXJlICovCi0jZGVmaW5lIFlZX05VTV9SVUxFUyAxMwotI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDE0CisjZGVmaW5lIFlZX05VTV9SVUxFUyAyMgorI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDIzCiAvKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNlZCBpbiB0aGlzIHNjYW5uZXIsCiAgICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8KIHN0cnVjdCB5eV90cmFuc19pbmZvCkBAIC00MzgsMzMgKzQ3NCwzMSBAQAogCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7CiAJZmxleF9pbnQzMl90IHl5X254dDsKIAl9Owotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs2OV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs0NV0gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgIDE0LCAgIDEyLCAgIDExLCAgIDEwLCAgIDEyLCAgIDEwLCAgICAyLCAgIDEwLAotICAgICAgIDEwLCAgICAzLCAgICA0LCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLAotICAgICAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLAotICAgICAgICA2LCAgICA1LCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgICAxLCAgICAwLAotICAgICAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgICA3LCAgIDEwLAotICAgICAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLAotICAgICAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgICA5LCAgICA4LCAgICAwCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMjMsICAgMTEsICAgMTAsICAgIDksCisgICAgICAgMTIsICAgMTksICAgMjEsICAgMjAsICAgMjAsICAgMTEsICAgIDksICAgIDUsICAgIDEsICAgIDksCisgICAgICAgIDQsICAgIDksICAgIDIsICAgIDMsICAgMTIsICAgMTksICAgMTcsICAgMTgsICAgMTMsICAgMTYsCisgICAgICAgMTQsICAgMTUsICAgIDgsICAgIDksICAgIDksICAgIDksICAgIDksICAgIDksICAgIDksICAgIDksCisgICAgICAgIDksICAgIDcsICAgIDYsICAgIDAKICAgICB9IDsKIAogc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQogICAgIHsgICAwLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAzLAorICAgICAgICAxLCAgICAxLCAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICA0LAorICAgICAgICA1LCAgICAxLCAgICAxLCAgICA1LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICA2LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAzLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICA0LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICA1LCAgICAxLCAgICA2LCAgICAxLCAgICAxLCAgICA3LAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICA3LCAgICA4LCAgICA3LCAgICA3LCAgICA3LCAgICA3LAogCi0gICAgICAgIDgsICAgIDksICAgIDEsICAgMTAsICAgMTEsICAgIDEsICAgIDEsICAgMTIsICAgMTMsICAgMTQsCi0gICAgICAgMTUsICAgMTYsICAgIDEsICAgMTcsICAgMTgsICAgMTksICAgMjAsICAgIDEsICAgIDEsICAgMjEsCi0gICAgICAgIDEsICAgIDEsICAgMjIsICAgIDEsICAgMjMsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDksICAgMTAsICAgIDcsICAgIDcsICAgMTEsICAgIDcsICAgIDcsICAgMTIsICAgIDcsICAgMTMsCisgICAgICAgMTQsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsCisgICAgICAgIDcsICAgIDcsICAgMTUsICAgIDEsICAgMTYsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCkBAIC00ODEsNzkgKzUxNSw2NiBAQAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzI0XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVsxN10gPQogICAgIHsgICAwLAotICAgICAgICAxLCAgICAyLCAgICAxLCAgICAzLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxCisgICAgICAgIDEsICAgIDEsICAgIDIsICAgIDMsICAgIDEsICAgIDQsICAgIDEsICAgIDUsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDUsICAgIDUKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbNzRdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzUzXSA9CiAgICAgeyAgIDAsCi0gICAgICAgIDAsICAgIDEsICAxMDcsICAgIDAsICAxMzgsICAgIDIsICAgIDAsICAgIDQsICAxMzgsICAgMjQsCi0gICAgICAgMzksICAxMzgsICAxMzgsICAgIDEsICAgNjMsICAgNDUsICAgIDAsICAgIDIsICAgIDMsICAgIDksCi0gICAgICAgIDUsICAgMTgsICAgMjIsICAgMjgsICAgMTEsICAgMjEsICAgMzMsICAgMzgsICAgMzQsICAgMzIsCi0gICAgICAxMzgsICAxMzgsICAgNDksICAgNDYsICAgNTksICAgNTQsICAgMzAsICAgODEsICAxMzgsICAgIDgsCi0gICAgICAgNTgsICAgNTYsICAgNDcsICAgNjUsICAgNjEsICAgNjksICAgNjgsICAgNjYsICAxMzgsICAgNzgsCi0gICAgICAgNzksICAgNzcsICAgODAsICAgODcsICAgODgsICAgOTEsICAgOTUsICAgODksICAgOTAsICAgOTcsCi0gICAgICAxMDAsICAxMDQsICAxMDYsICAxMTIsICAxMTQsICAxMzgsICAxMzgsICAxMzgsICAxMjUsICAgIDAsCi0gICAgICAxMjgsICAxMzEsICAxMzQKKyAgICAgICAgMCwgICAgMSwgICA2MCwgICAyNiwgICAgNiwgICAgOCwgICAyOSwgICAgMCwgIDEwNSwgICAxMSwKKyAgICAgICAgMCwgICAyNSwgIDEwNSwgIDEwNSwgIDEwNSwgICAgMCwgICAgMCwgIDEwNSwgIDEwNSwgICA0MSwKKyAgICAgIDEwNSwgICA0NiwgIDEwNSwgIDEwNSwgICAgMCwgIDEwNSwgIDEwNSwgIDEwNSwgIDEwNSwgIDEwNSwKKyAgICAgIDEwNSwgIDEwNSwgIDEwNSwgICA2MCwgICAgNCwgICAyMywgICAyNSwgICAyOCwgICA0MywgICAzOCwKKyAgICAgICA1NywgIDEwNSwgIDEwNSwgIDEwNSwgICA3MSwgICA3NiwgICA4MSwgICA4NiwgICA5MSwgICA5NiwKKyAgICAgICAgMCwgIDEwMQogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVmWzc0XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVmWzUzXSA9CiAgICAgeyAgIDAsCi0gICAgICAgNjksICAgNjksICAgNjgsICAgNzAsICAgNjgsICAgNzEsICAgNzAsICAgNzEsICAgNjgsICAgNzEsCi0gICAgICAgMTAsICAgNjgsICAgNjgsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsCi0gICAgICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsCi0gICAgICAgNjgsICAgNjgsICAgMTAsICAgMTAsICAgNzIsICAgMTAsICAgMTAsICAgNzIsICAgNjgsICAgNzMsCi0gICAgICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgNjgsICAgMTAsCi0gICAgICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsCi0gICAgICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgNjgsICAgNjgsICAgIDAsICAgNjgsICAgNjgsCi0gICAgICAgNjgsICAgNjgsICAgNjgKKyAgICAgICA0NSwgICA0NSwgICA0NiwgICA0NiwgICA0NywgICA0NywgICA0NCwgICA0OCwgICA0NCwgICA0NCwKKyAgICAgICA0OSwgICA1MCwgICA0NCwgICA0NCwgICA0NCwgICA0OCwgICA1MSwgICA0NCwgICA0NCwgICA1MiwKKyAgICAgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0OSwgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0NCwKKyAgICAgICA0NCwgICA0NCwgICA0NCwgICA1MiwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwKKyAgICAgICAzNCwgICA0NCwgICA0NCwgICAgMCwgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0NCwKKyAgICAgICA0NCwgICA0NAogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzE2Ml0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFsxMjJdID0KICAgICB7ICAgMCwKLSAgICAgICAgNywgICAgNSwgICAgNSwgICAgNiwgICAgNiwgICAgOSwgICAyMiwgICA2OCwgICAxMCwgICAzOSwKLSAgICAgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAyMywgICAgOCwgICAxMSwgICAxOCwgICAyMSwgICAgOCwKLSAgICAgICAyNSwgICAgOCwgICAyNCwgICAxMiwgICAxMywgICA2OCwgICA2OCwgICA2OCwgICAgOCwgICAyNywKLSAgICAgICAyOSwgICAgOCwgICAgOCwgICAyNiwgICAxNCwgICAyOCwgICAzMSwgICAzMCwgICAgOCwgICAzNCwKLSAgICAgICA0MywgICAzMiwgICAgOCwgICAgOCwgICAgOCwgICA2OCwgICA2OCwgICAxNSwgICAgOCwgICAgOCwKLSAgICAgICAxNiwgICAzNSwgICAzMywgICAzNiwgICAzNywgICAyMCwgICAgOCwgICAgOCwgICAxNywgICAgOCwKLSAgICAgICAzOSwgICA0NSwgICA0MCwgICA0MSwgICAgOCwgICA0NCwgICAgOCwgICA0NiwgICAgOCwgICA0MiwKLSAgICAgICA0NywgICAgOCwgICA0OSwgICAxOSwgICA1MCwgICAgOCwgICAgOCwgICA0OCwgICAgOCwgICAgOCwKLSAgICAgICA0MCwgICA0MCwgICAzOSwgICA1MSwgICA0MCwgICA1MiwgICA1MywgICAgOCwgICAgOCwgICAgOCwKLSAgICAgICAgOCwgICA1NiwgICA1NywgICA1NCwgICA2MCwgICA2MSwgICA1NSwgICAgOCwgICAgOCwgICAgOCwKKyAgICAgICAxNywgICA0NCwgICAgOSwgICAgOSwgICA0NCwgICAxMCwgICAxMCwgICAxNCwgICAxNSwgICAxNCwKKyAgICAgICAxNSwgICAxNywgICAxNywgICAxOCwgICAzNywgICAxNywgICAxOSwgICAyMCwgICAyMSwgICAyMCwKKyAgICAgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAyMiwgICAyMywgICAyNCwgICAyNywgICA0NCwgICAyOCwKKyAgICAgICAyOSwgICAxMiwgICAzMCwgICAyMCwgICAzOCwgICAyMCwgICA0MCwgICAzOSwgICAyMCwgICAzMSwKKyAgICAgICAzMiwgICAxNywgICAxNywgICA0MiwgICAzMywgICAxNywgICAxNywgICAxNywgICAyMCwgICAzMywKKyAgICAgICAxNywgICA0MSwgICAyMCwgICAyMCwgICAyMCwgICAzNCwgICAyMCwgICAzNSwgICAyMCwgICAyMCwKKyAgICAgICAxNywgICAxNywgICA0MywgICAzMywgICAxNywgICAxMiwgICA0NCwgICAyMCwgICA0NCwgICA0NCwKKyAgICAgICAzNiwgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAxMSwgICAxMSwgICAxMSwgICAxMSwKKyAgICAgICAxMSwgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxNiwgICA0NCwgICAxNiwgICA0NCwKKyAgICAgICAxNiwgICAyNSwgICAyNSwgICAyNSwgICA0NCwgICAyNSwgICAyNiwgICAyNiwgICAyNiwgICAyNiwKIAotICAgICAgICA4LCAgICA4LCAgIDQwLCAgIDQwLCAgIDU4LCAgICA4LCAgIDY4LCAgICA4LCAgIDU5LCAgIDYyLAotICAgICAgICA4LCAgIDY0LCAgIDYzLCAgIDY1LCAgICA4LCAgIDY2LCAgICA4LCAgIDY3LCAgIDY4LCAgIDY4LAotICAgICAgIDY4LCAgIDY4LCAgICA4LCAgIDY4LCAgICA4LCAgICA0LCAgICA0LCAgICA0LCAgICA4LCAgIDY4LAotICAgICAgICA4LCAgIDM4LCAgIDM4LCAgIDM4LCAgIDQwLCAgIDQwLCAgIDQwLCAgICAzLCAgIDY4LCAgIDY4LAotICAgICAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LAotICAgICAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LAotICAgICAgIDY4CisgICAgICAgMjYsICAgMjAsICAgNDQsICAgMjAsICAgIDcsICAgNDQsICAgNDQsICAgNDQsICAgNDQsICAgNDQsCisgICAgICAgNDQsICAgNDQsICAgNDQsICAgNDQsICAgNDQsICAgNDQsICAgNDQsICAgNDQsICAgNDQsICAgNDQsCisgICAgICAgNDQKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1sxNjJdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbMTIyXSA9CiAgICAgeyAgIDAsCi0gICAgICAgNzAsICAgIDEsICAgIDIsICAgIDEsICAgIDIsICAgIDYsICAgMTgsICAgIDgsICAgIDYsICAgNDAsCi0gICAgICAgMTcsICAgMTQsICAgMTgsICAgMTksICAgMTksICAgMjEsICAgIDYsICAgMTQsICAgMTcsICAgMjAsCi0gICAgICAgMjEsICAgMjUsICAgMjAsICAgIDYsICAgIDYsICAgIDgsICAgIDgsICAgMTAsICAgMjIsICAgMjMsCi0gICAgICAgMjUsICAgMjYsICAgMjMsICAgMjIsICAgMTAsICAgMjQsICAgMjcsICAgMjYsICAgMjQsICAgMzAsCi0gICAgICAgMzcsICAgMjgsICAgMzAsICAgMjcsICAgMjksICAgMTAsICAgMTAsICAgMTEsICAgMjgsICAgMTEsCi0gICAgICAgMTEsICAgMzMsICAgMjksICAgMzMsICAgMzQsICAgMTYsICAgMzQsICAgNDMsICAgMTEsICAgMzMsCi0gICAgICAgMzUsICAgNDIsICAgMzUsICAgMzYsICAgMzYsICAgNDEsICAgNDIsICAgNDMsICAgNDEsICAgMzYsCi0gICAgICAgNDQsICAgNDUsICAgNDYsICAgMTUsICAgNDcsICAgNDQsICAgNDgsICAgNDUsICAgNDcsICAgNDYsCi0gICAgICAgMzUsICAgMzUsICAgMzgsICAgNDgsICAgMzgsICAgNTAsICAgNTEsICAgNTIsICAgNTAsICAgNTEsCi0gICAgICAgNTMsICAgNTQsICAgNTUsICAgNTIsICAgNTgsICAgNTksICAgNTMsICAgNTQsICAgNTUsICAgNTgsCisgICAgICAgNTEsICAgIDAsICAgIDEsICAgIDIsICAgIDAsICAgIDEsICAgIDIsICAgIDUsICAgIDUsICAgIDYsCisgICAgICAgIDYsICAgMTAsICAgMTAsICAgMTAsICAgMzUsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsCisgICAgICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTIsICAgIDcsICAgMTIsCisgICAgICAgMTIsICAgIDQsICAgMTIsICAgMzYsICAgMzYsICAgMzcsICAgMzgsICAgMzcsICAgMzgsICAgMTIsCisgICAgICAgMTIsICAgMjAsICAgMjAsICAgNDAsICAgMjAsICAgMjAsICAgMjIsICAgMjIsICAgNDAsICAgMjIsCisgICAgICAgMjIsICAgMzksICAgMjIsICAgMzksICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjIsCisgICAgICAgMzQsICAgMzQsICAgNDEsICAgMzQsICAgMzQsICAgIDMsICAgIDAsICAgNDEsICAgIDAsICAgIDAsCisgICAgICAgMzQsICAgNDUsICAgNDUsICAgNDUsICAgNDUsICAgNDUsICAgNDYsICAgNDYsICAgNDYsICAgNDYsCisgICAgICAgNDYsICAgNDcsICAgNDcsICAgNDcsICAgNDcsICAgNDcsICAgNDgsICAgIDAsICAgNDgsICAgIDAsCisgICAgICAgNDgsICAgNDksICAgNDksICAgNDksICAgIDAsICAgNDksICAgNTAsICAgNTAsICAgNTAsICAgNTAsCiAKLSAgICAgICA1OSwgICA1NiwgICAzOCwgICAzOCwgICA1NiwgICA1NywgICAgMywgICA2MCwgICA1NywgICA2MCwKLSAgICAgICA2MSwgICA2MiwgICA2MSwgICA2MywgICA2MiwgICA2NCwgICA2MywgICA2NSwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICA2NCwgICAgMCwgICA2NSwgICA2OSwgICA2OSwgICA2OSwgICA3MSwgICAgMCwKLSAgICAgICA3MSwgICA3MiwgICA3MiwgICA3MiwgICA3MywgICA3MywgICA3MywgICA2OCwgICA2OCwgICA2OCwKLSAgICAgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwKLSAgICAgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwKLSAgICAgICA2OAorICAgICAgIDUwLCAgIDUyLCAgICAwLCAgIDUyLCAgIDQ0LCAgIDQ0LCAgIDQ0LCAgIDQ0LCAgIDQ0LCAgIDQ0LAorICAgICAgIDQ0LCAgIDQ0LCAgIDQ0LCAgIDQ0LCAgIDQ0LCAgIDQ0LCAgIDQ0LCAgIDQ0LCAgIDQ0LCAgIDQ0LAorICAgICAgIDQ0CiAgICAgfSA7CiAKIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwpAQCAtNTYyLDEwICs1ODMsMTEgQEAKIGV4dGVybiBpbnQgc2tlbF9fZmxleF9kZWJ1ZzsKIGludCBza2VsX19mbGV4X2RlYnVnID0gMTsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X3J1bGVfbGluZW51bVsxM10gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X3J1bGVfbGluZW51bVsyMl0gPQogICAgIHsgICAwLAotICAgICAgIDcwLCAgIDk3LCAgIDk4LCAgIDk5LCAgMTAxLCAgMTAyLCAgMTAzLCAgMTA0LCAgMTA1LCAgMTA4LAotICAgICAgMTA5LCAgMTEwCisgICAgICAgNzIsICAgNzMsICAgNzQsICAgNzUsICAgNzYsICAgNzgsICAgNzksICAgODEsICAgOTAsICAgOTEsCisgICAgICAgOTIsICAxMDUsICAxMDcsICAxMDgsICAxMDksICAxMTAsICAxMTEsICAxMTMsICAxMzQsICAxMzksCisgICAgICAxNDAKICAgICB9IDsKIAogLyogVGhlIGludGVudCBiZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKQEAgLTU3OSwzMyArNjAxLDMzIEBACiAjbGluZSAxICJzY2FuLXNrZWwubCIKIC8qIFNjYW4gQmlzb24gU2tlbGV0b25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBDIC0qLQogCi0gICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLgorICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCiAKLSAgIEJpc29uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLSAgIEJpc29uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIEJpc29uOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAgIDAyMTEwLTEzMDEsIFVTQS4gICovCi0jbGluZSAyNyAic2Nhbi1za2VsLmwiCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisjZGVmaW5lIFlZX05PX0lOUFVUIDEKKyNsaW5lIDI0ICJzY2FuLXNrZWwubCIKIC8qIFdvcmsgYXJvdW5kIGEgYnVnIGluIGZsZXggMi41LjMxLiAgU2VlIERlYmlhbiBidWcgMzMzMjMxCiAgICA8aHR0cDovL2J1Z3MuZGViaWFuLm9yZy9jZ2ktYmluL2J1Z3JlcG9ydC5jZ2k/YnVnPTMzMzIzMT4uICAqLwogI3VuZGVmIHNrZWxfd3JhcAogI2RlZmluZSBza2VsX3dyYXAoKSAxCiAKLSNpbmNsdWRlICJzeXN0ZW0uaCIKKyNkZWZpbmUgRkxFWF9QUkVGSVgoSWQpIHNrZWxfICMjIElkCisjaW5jbHVkZSAiZmxleC1zY2FubmVyLmgiCiAKKyNpbmNsdWRlIDxkaXJuYW1lLmg+CiAjaW5jbHVkZSA8ZXJyb3IuaD4KICNpbmNsdWRlIDxxdW90ZWFyZy5oPgogCkBAIC02MTQsMjkgKzYzNiwyNSBAQAogI2luY2x1ZGUgImZpbGVzLmgiCiAjaW5jbHVkZSAic2Nhbi1za2VsLmgiCiAKLS8qIFBhY2lmeSAiZ2NjIC1XbWlzc2luZy1wcm90b3R5cGVzIiB3aGVuIGZsZXggMi41LjMxIGlzIHVzZWQuICAqLwotaW50IHNrZWxfbGV4ICh2b2lkKTsKLWludCBza2VsX2dldF9saW5lbm8gKHZvaWQpOwotRklMRSAqc2tlbF9nZXRfaW4gKHZvaWQpOwotRklMRSAqc2tlbF9nZXRfb3V0ICh2b2lkKTsKLWludCBza2VsX2dldF9sZW5nICh2b2lkKTsKLWNoYXIgKnNrZWxfZ2V0X3RleHQgKHZvaWQpOwotdm9pZCBza2VsX3NldF9saW5lbm8gKGludCk7Ci12b2lkIHNrZWxfc2V0X2luIChGSUxFICopOwotdm9pZCBza2VsX3NldF9vdXQgKEZJTEUgKik7Ci1pbnQgc2tlbF9nZXRfZGVidWcgKHZvaWQpOwotdm9pZCBza2VsX3NldF9kZWJ1ZyAoaW50KTsKLWludCBza2VsX2xleF9kZXN0cm95ICh2b2lkKTsKKyNkZWZpbmUgWVlfREVDTCBzdGF0aWMgaW50IHNrZWxfbGV4ICh2b2lkKQorWVlfREVDTDsKIAogI2RlZmluZSBRUFVUUyhTdHJpbmcpIFwKICAgIGZwdXRzIChxdW90ZWFyZ19zdHlsZSAoY19xdW90aW5nX3N0eWxlLCBTdHJpbmcpLCBza2VsX291dCkKIAotI2RlZmluZSBCQVNFX1FQVVRTKEZpbGUpIFwKLSAgIFFQVVRTIChiYXNlX25hbWUgKEZpbGUpKQorc3RhdGljIHZvaWQgYXRfZGlyZWN0aXZlX3BlcmZvcm0gKGludCBhdF9kaXJlY3RpdmVfYXJnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICphdF9kaXJlY3RpdmVfYXJndltdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipvdXRuYW1lcCwgaW50ICpvdXRfbGluZW5vcCk7CitzdGF0aWMgdm9pZCBmYWlsX2Zvcl9hdF9kaXJlY3RpdmVfdG9vX21hbnlfYXJncyAoY2hhciBjb25zdCAqYXRfZGlyZWN0aXZlX25hbWUpOworc3RhdGljIHZvaWQgZmFpbF9mb3JfYXRfZGlyZWN0aXZlX3Rvb19mZXdfYXJncyAoY2hhciBjb25zdCAqYXRfZGlyZWN0aXZlX25hbWUpOworc3RhdGljIHZvaWQgZmFpbF9mb3JfaW52YWxpZF9hdCAoY2hhciBjb25zdCAqYXQpOwogCi0jbGluZSA2MzggInNjYW4tc2tlbC5jIgorCisjbGluZSA2NTQgInNjYW4tc2tlbC5jIgogCiAjZGVmaW5lIElOSVRJQUwgMAorI2RlZmluZSBTQ19BVF9ESVJFQ1RJVkVfQVJHUyAxCisjZGVmaW5lIFNDX0FUX0RJUkVDVElWRV9TS0lQX1dTIDIKIAogI2lmbmRlZiBZWV9OT19VTklTVERfSAogLyogU3BlY2lhbCBjYXNlIGZvciAidW5pc3RkLmgiLCBzaW5jZSBpdCBpcyBub24tQU5TSS4gV2UgaW5jbHVkZSBpdCB3YXkKQEAgLTY1NiwxMSArNjc0LDQ2IEBACiAKIC8qICVpZi1jLW9ubHkgUmVlbnRyYW50IHN0cnVjdHVyZSBhbmQgbWFjcm9zIChub24tQysrKS4gKi8KIC8qICVpZi1yZWVudHJhbnQgKi8KKy8qICVpZi1jLW9ubHkgKi8KKworc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHZvaWQgKTsKKworLyogJWVuZGlmICovCiAvKiAlaWYtcmVlbnRyYW50ICovCiAvKiAlZW5kaWYgKi8KKy8qICVlbmRpZiBFbmQgcmVlbnRyYW50IHN0cnVjdHVyZXMgYW5kIG1hY3Jvcy4gKi8KKworLyogQWNjZXNzb3IgbWV0aG9kcyB0byBnbG9iYWxzLgorICAgVGhlc2UgYXJlIG1hZGUgdmlzaWJsZSB0byBub24tcmVlbnRyYW50IHNjYW5uZXJzIGZvciBjb252ZW5pZW5jZS4gKi8KKworaW50IHNrZWxfbGV4X2Rlc3Ryb3kgKHZvaWQgKTsKKworaW50IHNrZWxfZ2V0X2RlYnVnICh2b2lkICk7CisKK3ZvaWQgc2tlbF9zZXRfZGVidWcgKGludCBkZWJ1Z19mbGFnICApOworCitZWV9FWFRSQV9UWVBFIHNrZWxfZ2V0X2V4dHJhICh2b2lkICk7CisKK3ZvaWQgc2tlbF9zZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkICApOworCitGSUxFICpza2VsX2dldF9pbiAodm9pZCApOworCit2b2lkIHNrZWxfc2V0X2luICAoRklMRSAqIGluX3N0ciAgKTsKKworRklMRSAqc2tlbF9nZXRfb3V0ICh2b2lkICk7CisKK3ZvaWQgc2tlbF9zZXRfb3V0ICAoRklMRSAqIG91dF9zdHIgICk7CisKK3l5X3NpemVfdCBza2VsX2dldF9sZW5nICh2b2lkICk7CisKK2NoYXIgKnNrZWxfZ2V0X3RleHQgKHZvaWQgKTsKKworaW50IHNrZWxfZ2V0X2xpbmVubyAodm9pZCApOworCit2b2lkIHNrZWxfc2V0X2xpbmVubyAoaW50IGxpbmVfbnVtYmVyICApOworCiAvKiAlaWYtYmlzb24tYnJpZGdlICovCiAvKiAlZW5kaWYgKi8KLS8qICVlbmRpZiBFbmQgcmVlbnRyYW50IHN0cnVjdHVyZXMgYW5kIG1hY3Jvcy4gKi8KIAogLyogTWFjcm9zIGFmdGVyIHRoaXMgcG9pbnQgY2FuIGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlvbnMgaW4KICAqIHNlY3Rpb24gMS4KQEAgLTcxNyw3ICs3NzAsNyBAQAogLyogVGhpcyB1c2VkIHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0aGUgc3RyaW5nIG1pZ2h0IGNvbnRhaW4gTlVMJ3MsCiAgKiB3ZSBub3cgdXNlIGZ3cml0ZSgpLgogICovCi0jZGVmaW5lIEVDSE8gKHZvaWQpIGZ3cml0ZSggc2tlbF90ZXh0LCBza2VsX2xlbmcsIDEsIHNrZWxfb3V0ICkKKyNkZWZpbmUgRUNITyBkbyB7IGlmIChmd3JpdGUoIHNrZWxfdGV4dCwgc2tlbF9sZW5nLCAxLCBza2VsX291dCApKSB7fSB9IHdoaWxlICgwKQogLyogJWVuZGlmICovCiAvKiAlaWYtYysrLW9ubHkgQysrIGRlZmluaXRpb24gKi8KIC8qICVlbmRpZiAqLwpAQCAtODM5LDE5ICs4OTIsMjYgQEAKIAlyZWdpc3RlciBpbnQgeXlfYWN0OwogICAgIAogLyogJSUgWzcuMF0gdXNlcidzIGRlY2xhcmF0aW9ucyBnbyBoZXJlICovCi0jbGluZSA2MyAic2Nhbi1za2VsLmwiCisjbGluZSA1OCAic2Nhbi1za2VsLmwiCiAKIAogCi0gIGludCBsaW5lbm8gSUZfTElOVCAoPSAwKTsKKyAgaW50IG91dF9saW5lbm8gUEFDSUZZX0NDICg9IDApOwogICBjaGFyICpvdXRuYW1lID0gTlVMTDsKIAorICAvKiBDdXJyZW50bHksIG9ubHkgdGhlIEB3YXJuLCBAY29tcGxhaW4sIEBmYXRhbCwgQHdhcm5fYXQsIEBjb21wbGFpbl9hdCwgYW5kCisgICAgIEBmYXRhbF9hdCBkaXJlY3RpdmVzIHRha2UgbXVsdGlwbGUgYXJndW1lbnRzLCBhbmQgdGhlIGxhc3QgdGhyZWUgYWxyZWFkeQorICAgICBjYW4ndCB0YWtlIG1vcmUgdGhhbiA3LiAgYXRfZGlyZWN0aXZlX2FyZ3ZbMF0gaXMgdGhlIGRpcmVjdGl2ZSBuYW1lLiAgKi8KKyAgI2RlZmluZSBBVF9ESVJFQ1RJVkVfQVJHQ19NQVggOAorICBpbnQgYXRfZGlyZWN0aXZlX2FyZ2MgPSAwOworICBjaGFyICphdF9kaXJlY3RpdmVfYXJndltBVF9ESVJFQ1RJVkVfQVJHQ19NQVhdOwogCi0jbGluZSA4NTEgInNjYW4tc2tlbC5jIgogCi0JaWYgKCAoeXlfaW5pdCkgKQorI2xpbmUgOTExICJzY2FuLXNrZWwuYyIKKworCWlmICggISh5eV9pbml0KSApCiAJCXsKLQkJKHl5X2luaXQpID0gMDsKKwkJKHl5X2luaXQpID0gMTsKIAogI2lmZGVmIFlZX1VTRVJfSU5JVAogCQlZWV9VU0VSX0lOSVQ7CkBAIC05MTAsMTMgKzk3MCwxMyBAQAogCQkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQogCQkJCXsKIAkJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA2OSApCisJCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ1ICkKIAkJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CiAJCQkJfQogCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CiAJCQkrK3l5X2NwOwogCQkJfQotCQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gNjggKTsKKwkJd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDQ0ICk7CiAJCXl5X2NwID0gKHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MpOwogCQl5eV9jdXJyZW50X3N0YXRlID0gKHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlKTsKIApAQCAtOTM1LDEzICs5OTUsMTMgQEAKIAkJCXsKIAkJCWlmICggeXlfYWN0ID09IDAgKQogCQkJCWZwcmludGYoIHN0ZGVyciwgIi0tc2Nhbm5lciBiYWNraW5nIHVwXG4iICk7Ci0JCQllbHNlIGlmICggeXlfYWN0IDwgMTMgKQorCQkJZWxzZSBpZiAoIHl5X2FjdCA8IDIyICkKIAkJCQlmcHJpbnRmKCBzdGRlcnIsICItLWFjY2VwdGluZyBydWxlIGF0IGxpbmUgJWxkIChcIiVzXCIpXG4iLAogCQkJCSAgICAgICAgIChsb25nKXl5X3J1bGVfbGluZW51bVt5eV9hY3RdLCBza2VsX3RleHQgKTsKLQkJCWVsc2UgaWYgKCB5eV9hY3QgPT0gMTMgKQorCQkJZWxzZSBpZiAoIHl5X2FjdCA9PSAyMiApCiAJCQkJZnByaW50Ziggc3RkZXJyLCAiLS1hY2NlcHRpbmcgZGVmYXVsdCBydWxlIChcIiVzXCIpXG4iLAogCQkJCSAgICAgICAgIHNrZWxfdGV4dCApOwotCQkJZWxzZSBpZiAoIHl5X2FjdCA9PSAxNCApCisJCQllbHNlIGlmICggeXlfYWN0ID09IDIzICkKIAkJCQlmcHJpbnRmKCBzdGRlcnIsICItLShlbmQgb2YgYnVmZmVyIG9yIGEgTlVMKVxuIiApOwogCQkJZWxzZQogCQkJCWZwcmludGYoIHN0ZGVyciwgIi0tRU9GIChzdGFydCBjb25kaXRpb24gJWQpXG4iLCBZWV9TVEFSVCApOwpAQCAtOTU4LDk1ICsxMDE4LDcxIEBACiAJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOwogCiBjYXNlIDE6Ci0vKiBydWxlIDEgY2FuIG1hdGNoIGVvbCAqLwogWVlfUlVMRV9TRVRVUAotI2xpbmUgNzAgInNjYW4tc2tlbC5sIgotewotICBjaGFyIGNvbnN0ICpmaWxlX25hbWUgPSBza2VsX3RleHQgKyBzaXplb2YgIkBvdXRwdXQgIiAtIDE7Ci0gIHNrZWxfdGV4dFtza2VsX2xlbmcgLSAxXSA9ICdcMCc7Ci0KLSAgLyogRGVjb2RlIHNwZWNpYWwgZmlsZSBuYW1lcy4gIFRoZXkgaW5jbHVkZSB0aGUgZGlyZWN0b3J5IHBhcnQsCi0gICAgIGNvbnRyYXJ5IHRvIHRoZWlyICJmcmVlIiBvY2N1cnJlbmNlcywgdXNlZCBmb3IgaXNzdWluZyAjaW5jbHVkZXMsCi0gICAgIHdoaWNoIG11c3Qgbm90IGluY2x1ZGUgdGhlIGRpcmVjdG9yeSBwYXJ0LiAgKi8KLQotICBpZiAoKmZpbGVfbmFtZSA9PSAnQCcpCi0gICAgewotICAgICAgaWYgKHN0cmNtcCAoZmlsZV9uYW1lLCAiQG91dHB1dF9oZWFkZXJfbmFtZUAiKSA9PSAwKQotCWZpbGVfbmFtZSA9IHNwZWNfZGVmaW5lc19maWxlOwotICAgICAgZWxzZSBpZiAoc3RyY21wIChmaWxlX25hbWUsICJAb3V0cHV0X3BhcnNlcl9uYW1lQCIpID09IDApCi0JZmlsZV9uYW1lID0gcGFyc2VyX2ZpbGVfbmFtZTsKLSAgICAgIGVsc2UKLQlmYXRhbCAoImludmFsaWQgdG9rZW4gaW4gc2tlbGV0b246ICVzIiwgc2tlbF90ZXh0KTsKLSAgICB9Ci0gIGlmIChvdXRuYW1lKQotICAgIHsKLSAgICAgIGZyZWUgKG91dG5hbWUpOwotICAgICAgeGZjbG9zZSAoc2tlbF9vdXQpOwotICAgIH0KLSAgb3V0bmFtZSA9IHhzdHJkdXAgKGZpbGVfbmFtZSk7Ci0gIHNrZWxfb3V0ID0geGZvcGVuIChvdXRuYW1lLCAidyIpOwotICBsaW5lbm8gPSAxOwotfQorI2xpbmUgNzIgInNjYW4tc2tlbC5sIgorZnB1dGMgKCdAJywgc2tlbF9vdXQpOwogCVlZX0JSRUFLCiBjYXNlIDI6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSA5NyAic2Nhbi1za2VsLmwiCi1mcHV0YyAoJ0AnLCBza2VsX291dCk7CisjbGluZSA3MyAic2Nhbi1za2VsLmwiCitmcHV0YyAoJ1snLCBza2VsX291dCk7CiAJWVlfQlJFQUsKIGNhc2UgMzoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDk4ICJzY2FuLXNrZWwubCIKLWZwdXRjICgnWycsIHNrZWxfb3V0KTsKKyNsaW5lIDc0ICJzY2FuLXNrZWwubCIKK2ZwdXRjICgnXScsIHNrZWxfb3V0KTsKIAlZWV9CUkVBSwogY2FzZSA0OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgOTkgInNjYW4tc2tlbC5sIgotZnB1dGMgKCddJywgc2tlbF9vdXQpOworI2xpbmUgNzUgInNjYW4tc2tlbC5sIgorY29udGludWU7ICAvKiBVc2VkIGJ5IGI0X2NhdCBpbiAuLi9kYXRhL2Jpc29uLm00LiAgKi8KIAlZWV9CUkVBSwogY2FzZSA1OgorLyogcnVsZSA1IGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDEwMSAic2Nhbi1za2VsLmwiCi1mcHJpbnRmIChza2VsX291dCwgIiVkIiwgbGluZW5vICsgMSk7CisjbGluZSA3NiAic2Nhbi1za2VsLmwiCitjb250aW51ZTsKIAlZWV9CUkVBSwogY2FzZSA2OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMTAyICJzY2FuLXNrZWwubCIKLVFQVVRTIChvdXRuYW1lKTsKKyNsaW5lIDc4ICJzY2FuLXNrZWwubCIKK2ZwcmludGYgKHNrZWxfb3V0LCAiJWQiLCBvdXRfbGluZW5vICsgMSk7CiAJWVlfQlJFQUsKIGNhc2UgNzoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDEwMyAic2Nhbi1za2VsLmwiCi1RUFVUUyAoZGlyX3ByZWZpeCk7CisjbGluZSA3OSAic2Nhbi1za2VsLmwiCitRUFVUUyAob3V0bmFtZSk7CiAJWVlfQlJFQUsKIGNhc2UgODoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDEwNCAic2Nhbi1za2VsLmwiCi1CQVNFX1FQVVRTIChwYXJzZXJfZmlsZV9uYW1lKTsKLQlZWV9CUkVBSwotY2FzZSA5OgotWVlfUlVMRV9TRVRVUAotI2xpbmUgMTA1ICJzY2FuLXNrZWwubCIKLUJBU0VfUVBVVFMgKHNwZWNfZGVmaW5lc19maWxlKTsKKyNsaW5lIDgxICJzY2FuLXNrZWwubCIKK3sKKyAgc2tlbF90ZXh0W3NrZWxfbGVuZy0xXSA9ICdcMCc7CisgIG9ic3RhY2tfZ3JvdyAoJm9ic3RhY2tfZm9yX3N0cmluZywgc2tlbF90ZXh0LCBza2VsX2xlbmcpOworICBhdF9kaXJlY3RpdmVfYXJndlthdF9kaXJlY3RpdmVfYXJnYysrXSA9CisgICAgb2JzdGFja19maW5pc2ggKCZvYnN0YWNrX2Zvcl9zdHJpbmcpOworICBCRUdJTiBTQ19BVF9ESVJFQ1RJVkVfQVJHUzsKK30KIAlZWV9CUkVBSwogLyogVGhpcyBwYXR0ZXJuIG11c3Qgbm90IG1hdGNoIG1vcmUgdGhhbiB0aGUgcHJldmlvdXMgQCBwYXR0ZXJucy4gKi8KLWNhc2UgMTA6CitjYXNlIDk6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAxMDggInNjYW4tc2tlbC5sIgotZmF0YWwgKCJpbnZhbGlkIEAgaW4gc2tlbGV0b246ICVzIiwgc2tlbF90ZXh0KTsKKyNsaW5lIDkwICJzY2FuLXNrZWwubCIKK2ZhaWxfZm9yX2ludmFsaWRfYXQgKHNrZWxfdGV4dCk7CisJWVlfQlJFQUsKK2Nhc2UgMTA6CisvKiBydWxlIDEwIGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDkxICJzY2FuLXNrZWwubCIKK291dF9saW5lbm8rKzsgRUNITzsKIAlZWV9CUkVBSwogY2FzZSAxMToKLS8qIHJ1bGUgMTEgY2FuIG1hdGNoIGVvbCAqLwogWVlfUlVMRV9TRVRVUAotI2xpbmUgMTA5ICJzY2FuLXNrZWwubCIKLWxpbmVubysrOyBFQ0hPOwotCVlZX0JSRUFLCi1jYXNlIDEyOgotWVlfUlVMRV9TRVRVUAotI2xpbmUgMTEwICJzY2FuLXNrZWwubCIKKyNsaW5lIDkyICJzY2FuLXNrZWwubCIKIEVDSE87CiAJWVlfQlJFQUsKIGNhc2UgWVlfU1RBVEVfRU9GKElOSVRJQUwpOgotI2xpbmUgMTEyICJzY2FuLXNrZWwubCIKKyNsaW5lIDk0ICJzY2FuLXNrZWwubCIKIHsKICAgaWYgKG91dG5hbWUpCiAgICAgewpAQCAtMTA1NiwxMiArMTA5MiwxMDAgQEAKICAgcmV0dXJuIEVPRjsKIH0KIAlZWV9CUkVBSworCisKK2Nhc2UgMTI6CisvKiBydWxlIDEyIGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDEwNSAic2Nhbi1za2VsLmwiCitTVFJJTkdfR1JPVzsKKwlZWV9CUkVBSwogY2FzZSAxMzoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDEyMCAic2Nhbi1za2VsLmwiCisjbGluZSAxMDcgInNjYW4tc2tlbC5sIgorb2JzdGFja18xZ3JvdyAoJm9ic3RhY2tfZm9yX3N0cmluZywgJ0AnKTsKKwlZWV9CUkVBSworY2FzZSAxNDoKK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDEwOCAic2Nhbi1za2VsLmwiCitvYnN0YWNrXzFncm93ICgmb2JzdGFja19mb3Jfc3RyaW5nLCAnWycpOworCVlZX0JSRUFLCitjYXNlIDE1OgorWVlfUlVMRV9TRVRVUAorI2xpbmUgMTA5ICJzY2FuLXNrZWwubCIKK29ic3RhY2tfMWdyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICddJyk7CisJWVlfQlJFQUsKK2Nhc2UgMTY6CitZWV9SVUxFX1NFVFVQCisjbGluZSAxMTAgInNjYW4tc2tlbC5sIgorY29udGludWU7IC8qIEZvciBzdGFydGluZyBhbiBhcmd1bWVudCB0aGF0IGJlZ2lucyB3aXRoIHdoaXRlc3BhY2UuICovCisJWVlfQlJFQUsKK2Nhc2UgMTc6CisvKiBydWxlIDE3IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDExMSAic2Nhbi1za2VsLmwiCitjb250aW51ZTsKKwlZWV9CUkVBSworY2FzZSAxODoKK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDExMyAic2Nhbi1za2VsLmwiCit7CisgICAgaWYgKGF0X2RpcmVjdGl2ZV9hcmdjID49IEFUX0RJUkVDVElWRV9BUkdDX01BWCkKKyAgICAgIGZhaWxfZm9yX2F0X2RpcmVjdGl2ZV90b29fbWFueV9hcmdzIChhdF9kaXJlY3RpdmVfYXJndlswXSk7CisKKyAgICBvYnN0YWNrXzFncm93ICgmb2JzdGFja19mb3Jfc3RyaW5nLCAnXDAnKTsKKyAgICBhdF9kaXJlY3RpdmVfYXJndlthdF9kaXJlY3RpdmVfYXJnYysrXSA9CisgICAgICBvYnN0YWNrX2ZpbmlzaCAoJm9ic3RhY2tfZm9yX3N0cmluZyk7CisKKyAgICAvKiBMaWtlIE00LCBza2lwIHdoaXRlc3BhY2UgYWZ0ZXIgYSBjb21tYS4gICovCisgICAgaWYgKHNrZWxfdGV4dFsxXSA9PSAnLCcpCisgICAgICBCRUdJTiBTQ19BVF9ESVJFQ1RJVkVfU0tJUF9XUzsKKyAgICBlbHNlCisgICAgICB7CisgICAgICAgIGF0X2RpcmVjdGl2ZV9wZXJmb3JtIChhdF9kaXJlY3RpdmVfYXJnYywgYXRfZGlyZWN0aXZlX2FyZ3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0bmFtZSwgJm91dF9saW5lbm8pOworICAgICAgICBvYnN0YWNrX2ZyZWUgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsIGF0X2RpcmVjdGl2ZV9hcmd2WzBdKTsKKyAgICAgICAgYXRfZGlyZWN0aXZlX2FyZ2MgPSAwOworICAgICAgICBCRUdJTiBJTklUSUFMOworICAgICAgfQorICB9CisJWVlfQlJFQUsKK2Nhc2UgMTk6CitZWV9SVUxFX1NFVFVQCisjbGluZSAxMzQgInNjYW4tc2tlbC5sIgorZmFpbF9mb3JfaW52YWxpZF9hdCAoc2tlbF90ZXh0KTsKKwlZWV9CUkVBSworCisKKworY2FzZSAyMDoKKy8qIHJ1bGUgMjAgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAorI2xpbmUgMTM5ICJzY2FuLXNrZWwubCIKK2NvbnRpbnVlOworCVlZX0JSRUFLCitjYXNlIDIxOgorWVlfUlVMRV9TRVRVUAorI2xpbmUgMTQwICJzY2FuLXNrZWwubCIKK3sgeXlsZXNzICgwKTsgQkVHSU4gU0NfQVRfRElSRUNUSVZFX0FSR1M7IH0KKwlZWV9CUkVBSworCisKKworY2FzZSBZWV9TVEFURV9FT0YoU0NfQVRfRElSRUNUSVZFX0FSR1MpOgorY2FzZSBZWV9TVEFURV9FT0YoU0NfQVRfRElSRUNUSVZFX1NLSVBfV1MpOgorI2xpbmUgMTQ1ICJzY2FuLXNrZWwubCIKK3sKKyAgICBmYXRhbCAoXygidW5jbG9zZWQgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIiksIGF0X2RpcmVjdGl2ZV9hcmd2WzBdKTsKKyAgfQorCVlZX0JSRUFLCisKK2Nhc2UgMjI6CitZWV9SVUxFX1NFVFVQCisjbGluZSAxNTAgInNjYW4tc2tlbC5sIgogWVlfRkFUQUxfRVJST1IoICJmbGV4IHNjYW5uZXIgamFtbWVkIiApOwogCVlZX0JSRUFLCi0jbGluZSAxMDY1ICJzY2FuLXNrZWwuYyIKKyNsaW5lIDExODkgInNjYW4tc2tlbC5jIgogCiAJY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgogCQl7CkBAIC0xMjU5LDIxICsxMzgzLDIxIEBACiAKIAllbHNlCiAJCXsKLQkJCXNpemVfdCBudW1fdG9fcmVhZCA9CisJCQl5eV9zaXplX3QgbnVtX3RvX3JlYWQgPQogCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKIAogCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQogCQkJeyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCiAKIAkJCS8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLwotCQkJWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUjsKKwkJCVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFOwogCiAJCQlpbnQgeXlfY19idWZfcF9vZmZzZXQgPQogCQkJCShpbnQpICgoeXlfY19idWZfcCkgLSBiLT55eV9jaF9idWYpOwogCiAJCQlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQogCQkJCXsKLQkJCQlpbnQgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7CisJCQkJeXlfc2l6ZV90IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOwogCiAJCQkJaWYgKCBuZXdfc2l6ZSA8PSAwICkKIAkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUgLyA4OwpAQCAtMTMyOCw2ICsxNDUyLDE0IEBACiAJZWxzZQogCQlyZXRfdmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOwogCisJaWYgKCh5eV9zaXplX3QpICgoeXlfbl9jaGFycykgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7CisJCS8qIEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCisJCXl5X3NpemVfdCBuZXdfc2l6ZSA9ICh5eV9uX2NoYXJzKSArIG51bWJlcl90b19tb3ZlICsgKCh5eV9uX2NoYXJzKSA+PiAxKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgPSAoY2hhciAqKSBza2VsX3JlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYsbmV3X3NpemUgICk7CisJCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9nZXRfbmV4dF9idWZmZXIoKSIgKTsKKwl9CisKIAkoeXlfbl9jaGFycykgKz0gbnVtYmVyX3RvX21vdmU7CiAJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hhcnMpXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKIAlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycykgKyAxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKQEAgLTEzNjUsNyArMTQ5Nyw3IEBACiAJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKIAkJCXsKIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNjkgKQorCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ1ICkKIAkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKIAkJCX0KIAkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CkBAIC0xMzk4LDEzICsxNTMwLDEzIEBACiAJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQogCQl7CiAJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA2OSApCisJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NSApCiAJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKIAkJfQogCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDY4KTsKKwl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA0NCk7CiAKLQlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7CisJCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKIH0KIAogLyogJWlmLWMtb25seSAqLwpAQCAtMTQzOSw3ICsxNTcxLDcgQEAKIAogCQllbHNlCiAJCQl7IC8qIG5lZWQgbW9yZSBpbnB1dCAqLwotCQkJaW50IG9mZnNldCA9ICh5eV9jX2J1Zl9wKSAtICh5eXRleHRfcHRyKTsKKwkJCXl5X3NpemVfdCBvZmZzZXQgPSAoeXlfY19idWZfcCkgLSAoeXl0ZXh0X3B0cik7CiAJCQkrKyh5eV9jX2J1Zl9wKTsKIAogCQkJc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCAgKSApCkBAIC0xNjIzLDEzICsxNzU1LDYgQEAKIAlza2VsX2ZyZWUoKHZvaWQgKikgYiAgKTsKIH0KIAotLyogJWlmLWMtb25seSAqLwotCi0vKiAlZW5kaWYgKi8KLQotLyogJWlmLWMrKy1vbmx5ICovCi0vKiAlZW5kaWYgKi8KLQogLyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZlci4KICAqIFRoaXMgZnVuY3Rpb24gaXMgc29tZXRpbWVzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBidWZmZXIsCiAgKiBzdWNoIGFzIGR1cmluZyBhIHNrZWxfcmVzdGFydCgpIG9yIGF0IEVPRi4KQEAgLTE3NzIsNyArMTg5Nyw3IEBACiAvKiAlaWYtYysrLW9ubHkgKi8KIC8qICVlbmRpZiAqLwogewotCWludCBudW1fdG9fYWxsb2M7CisJeXlfc2l6ZV90IG51bV90b19hbGxvYzsKICAgICAKIAlpZiAoISh5eV9idWZmZXJfc3RhY2spKSB7CiAKQEAgLTE3ODQsNyArMTkwOSw5IEBACiAJCSh5eV9idWZmZXJfc3RhY2spID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKilza2VsX2FsbG9jCiAJCQkJCQkJCShudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCiAJCQkJCQkJCSk7Ci0JCQorCQlpZiAoICEgKHl5X2J1ZmZlcl9zdGFjaykgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gc2tlbF9lbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7CisJCQkJCQkJCSAgCiAJCW1lbXNldCgoeXlfYnVmZmVyX3N0YWNrKSwgMCwgbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CiAJCQkJCiAJCSh5eV9idWZmZXJfc3RhY2tfbWF4KSA9IG51bV90b19hbGxvYzsKQEAgLTE4MDIsNiArMTkyOSw4IEBACiAJCQkJCQkJCSgoeXlfYnVmZmVyX3N0YWNrKSwKIAkJCQkJCQkJbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQogCQkJCQkJCQkpOworCQlpZiAoICEgKHl5X2J1ZmZlcl9zdGFjaykgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gc2tlbF9lbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7CiAKIAkJLyogemVybyBvbmx5IHRoZSBuZXcgc2xvdHMuKi8KIAkJbWVtc2V0KCh5eV9idWZmZXJfc3RhY2spICsgKHl5X2J1ZmZlcl9zdGFja19tYXgpLCAwLCBncm93X3NpemUgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKQEAgLTE4NTAsMjggKzE5NzksMjggQEAKIC8qICVpZi1jLW9ubHkgKi8KIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8gc2tlbF9sZXgoKSB3aWxsCiAgKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIHN0ci4KLSAqIEBwYXJhbSBzdHIgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgdG8gc2NhbgorICogQHBhcmFtIHl5c3RyIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHNjYW4KICAqIAogICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCiAgKiBAbm90ZSBJZiB5b3Ugd2FudCB0byBzY2FuIGJ5dGVzIHRoYXQgbWF5IGNvbnRhaW4gTlVMIHZhbHVlcywgdGhlbiB1c2UKICAqICAgICAgIHNrZWxfX3NjYW5fYnl0ZXMoKSBpbnN0ZWFkLgogICovCi1ZWV9CVUZGRVJfU1RBVEUgc2tlbF9fc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5X3N0ciApCitZWV9CVUZGRVJfU1RBVEUgc2tlbF9fc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5c3RyICkKIHsKICAgICAKLQlyZXR1cm4gc2tlbF9fc2Nhbl9ieXRlcyh5eV9zdHIsc3RybGVuKHl5X3N0cikgKTsKKwlyZXR1cm4gc2tlbF9fc2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4oeXlzdHIpICk7CiB9CiAvKiAlZW5kaWYgKi8KIAogLyogJWlmLWMtb25seSAqLwogLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiB0aGUgZ2l2ZW4gYnl0ZXMuIFRoZSBuZXh0IGNhbGwgdG8gc2tlbF9sZXgoKSB3aWxsCiAgKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIGJ5dGVzLgotICogQHBhcmFtIGJ5dGVzIHRoZSBieXRlIGJ1ZmZlciB0byBzY2FuCi0gKiBAcGFyYW0gbGVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgorICogQHBhcmFtIHl5Ynl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KKyAqIEBwYXJhbSBfeXlieXRlc19sZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCiAgKiAKICAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgogICovCi1ZWV9CVUZGRVJfU1RBVEUgc2tlbF9fc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIGJ5dGVzLCBpbnQgIGxlbiApCitZWV9CVUZGRVJfU1RBVEUgc2tlbF9fc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIHl5X3NpemVfdCAgX3l5Ynl0ZXNfbGVuICkKIHsKIAlZWV9CVUZGRVJfU1RBVEUgYjsKIAljaGFyICpidWY7CkBAIC0xODc5LDE1ICsyMDA4LDE1IEBACiAJaW50IGk7CiAgICAgCiAJLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICovCi0JbiA9IGxlbiArIDI7CisJbiA9IF95eWJ5dGVzX2xlbiArIDI7CiAJYnVmID0gKGNoYXIgKikgc2tlbF9hbGxvYyhuICApOwogCWlmICggISBidWYgKQogCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBza2VsX19zY2FuX2J5dGVzKCkiICk7CiAKLQlmb3IgKCBpID0gMDsgaSA8IGxlbjsgKytpICkKLQkJYnVmW2ldID0gYnl0ZXNbaV07CisJZm9yICggaSA9IDA7IGkgPCBfeXlieXRlc19sZW47ICsraSApCisJCWJ1ZltpXSA9IHl5Ynl0ZXNbaV07CiAKLQlidWZbbGVuXSA9IGJ1ZltsZW4rMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJYnVmW195eWJ5dGVzX2xlbl0gPSBidWZbX3l5Ynl0ZXNfbGVuKzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwogCiAJYiA9IHNrZWxfX3NjYW5fYnVmZmVyKGJ1ZixuICk7CiAJaWYgKCAhIGIgKQpAQCAtMTk2Nyw3ICsyMDk2LDcgQEAKIC8qKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCB0b2tlbi4KICAqIAogICovCi1pbnQgc2tlbF9nZXRfbGVuZyAgKHZvaWQpCit5eV9zaXplX3Qgc2tlbF9nZXRfbGVuZyAgKHZvaWQpCiB7CiAgICAgICAgIHJldHVybiBza2VsX2xlbmc7CiB9CkBAIC0yMDI1LDYgKzIxNTQsMzYgQEAKIC8qICVpZi1yZWVudHJhbnQgKi8KIC8qICVpZi1iaXNvbi1icmlkZ2UgKi8KIC8qICVlbmRpZiAqLworLyogJWVuZGlmIGlmLWMtb25seSAqLworCisvKiAlaWYtYy1vbmx5ICovCitzdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAodm9pZCkKK3sKKyAgICAgICAgLyogSW5pdGlhbGl6YXRpb24gaXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIuCisgICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBza2VsX2xleF9kZXN0cm95KCksIHNvIGRvbid0IGFsbG9jYXRlIGhlcmUuCisgICAgICovCisKKyAgICAoeXlfYnVmZmVyX3N0YWNrKSA9IDA7CisgICAgKHl5X2J1ZmZlcl9zdGFja190b3ApID0gMDsKKyAgICAoeXlfYnVmZmVyX3N0YWNrX21heCkgPSAwOworICAgICh5eV9jX2J1Zl9wKSA9IChjaGFyICopIDA7CisgICAgKHl5X2luaXQpID0gMDsKKyAgICAoeXlfc3RhcnQpID0gMDsKKworLyogRGVmaW5lZCBpbiBtYWluLmMgKi8KKyNpZmRlZiBZWV9TVERJTklUCisgICAgc2tlbF9pbiA9IHN0ZGluOworICAgIHNrZWxfb3V0ID0gc3Rkb3V0OworI2Vsc2UKKyAgICBza2VsX2luID0gKEZJTEUgKikgMDsKKyAgICBza2VsX291dCA9IChGSUxFICopIDA7CisjZW5kaWYKKworICAgIC8qIEZvciBmdXR1cmUgcmVmZXJlbmNlOiBTZXQgZXJybm8gb24gZXJyb3IsIHNpbmNlIHdlIGFyZSBjYWxsZWQgYnkKKyAgICAgKiBza2VsX2xleF9pbml0KCkKKyAgICAgKi8KKyAgICByZXR1cm4gMDsKK30KIC8qICVlbmRpZiAqLwogCiAvKiAlaWYtYy1vbmx5IFNOSVAhIHRoaXMgY3VycmVudGx5IGNhdXNlcyBjb25mbGljdHMgd2l0aCB0aGUgYysrIHNjYW5uZXIgKi8KQEAgLTIwNDMsNiArMjIwMiwxMCBAQAogCXNrZWxfZnJlZSgoeXlfYnVmZmVyX3N0YWNrKSApOwogCSh5eV9idWZmZXJfc3RhY2spID0gTlVMTDsKIAorICAgIC8qIFJlc2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBhIG5vbi1yZWVudHJhbnQgc2Nhbm5lciBzbyB0aGUgbmV4dCB0aW1lCisgICAgICogc2tlbF9sZXgoKSBpcyBjYWxsZWQsIGluaXRpYWxpemF0aW9uIHdpbGwgb2NjdXIuICovCisgICAgeXlfaW5pdF9nbG9iYWxzKCApOworCiAvKiAlaWYtcmVlbnRyYW50ICovCiAvKiAlZW5kaWYgKi8KICAgICByZXR1cm4gMDsKQEAgLTIwNTcsNyArMjIyMCw3IEBACiBzdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIqIHMxLCB5eWNvbnN0IGNoYXIgKiBzMiwgaW50IG4gKQogewogCXJlZ2lzdGVyIGludCBpOwotICAgIAlmb3IgKCBpID0gMDsgaSA8IG47ICsraSApCisJZm9yICggaSA9IDA7IGkgPCBuOyArK2kgKQogCQlzMVtpXSA9IHMyW2ldOwogfQogI2VuZGlmCkBAIC0yMDY2LDcgKzIyMjksNyBAQAogc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogcyApCiB7CiAJcmVnaXN0ZXIgaW50IG47Ci0gICAgCWZvciAoIG4gPSAwOyBzW25dOyArK24gKQorCWZvciAoIG4gPSAwOyBzW25dOyArK24gKQogCQk7CiAKIAlyZXR1cm4gbjsKQEAgLTIxMDIsMTkgKzIyNjUsNyBAQAogCiAvKiAlb2stZm9yLWhlYWRlciAqLwogCi0jdW5kZWYgWVlfTkVXX0ZJTEUKLSN1bmRlZiBZWV9GTFVTSF9CVUZGRVIKLSN1bmRlZiB5eV9zZXRfYm9sCi0jdW5kZWYgeXlfbmV3X2J1ZmZlcgotI3VuZGVmIHl5X3NldF9pbnRlcmFjdGl2ZQotI3VuZGVmIHl5dGV4dF9wdHIKLSN1bmRlZiBZWV9ET19CRUZPUkVfQUNUSU9OCi0KLSNpZmRlZiBZWV9ERUNMX0lTX09VUlMKLSN1bmRlZiBZWV9ERUNMX0lTX09VUlMKLSN1bmRlZiBZWV9ERUNMCi0jZW5kaWYKLSNsaW5lIDEyMCAic2Nhbi1za2VsLmwiCisjbGluZSAxNTAgInNjYW4tc2tlbC5sIgogCiAKIApAQCAtMjEyNSwxMCArMjI3NiwxNTIgQEAKIHZvaWQKIHNjYW5fc2tlbCAoRklMRSAqaW4pCiB7CisgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CisgIGlmICghaW5pdGlhbGl6ZWQpCisgICAgeworICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgb2JzdGFja19pbml0ICgmb2JzdGFja19mb3Jfc3RyaW5nKTsKKyAgICB9CiAgIHNrZWxfaW4gPSBpbjsKICAgc2tlbF9fZmxleF9kZWJ1ZyA9IHRyYWNlX2ZsYWcgJiB0cmFjZV9za2VsZXRvbjsKICAgc2tlbF9sZXggKCk7Cit9CisKK3ZvaWQKK3NrZWxfc2Nhbm5lcl9mcmVlICh2b2lkKQoreworICBvYnN0YWNrX2ZyZWUgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsIDApOwogICAvKiBSZWNsYWltIEZsZXgncyBidWZmZXJzLiAgKi8KLSAgc2tlbF9fZGVsZXRlX2J1ZmZlciAoWVlfQ1VSUkVOVF9CVUZGRVIpOworICBza2VsX2xleF9kZXN0cm95ICgpOworfQorCitzdGF0aWMgdm9pZAorYXRfZGlyZWN0aXZlX3BlcmZvcm0gKGludCBhdF9kaXJlY3RpdmVfYXJnYywKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyICphdF9kaXJlY3RpdmVfYXJndltdLAorICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipvdXRuYW1lcCwgaW50ICpvdXRfbGluZW5vcCkKK3sKKyAgaWYgKDAgPT0gc3RyY21wIChhdF9kaXJlY3RpdmVfYXJndlswXSwgIkBiYXNlbmFtZSIpKQorICAgIHsKKyAgICAgIGlmIChhdF9kaXJlY3RpdmVfYXJnYyA+IDIpCisgICAgICAgIGZhaWxfZm9yX2F0X2RpcmVjdGl2ZV90b29fbWFueV9hcmdzIChhdF9kaXJlY3RpdmVfYXJndlswXSk7CisgICAgICBmcHV0cyAobGFzdF9jb21wb25lbnQgKGF0X2RpcmVjdGl2ZV9hcmd2WzFdKSwgc2tlbF9vdXQpOworICAgIH0KKyAgZWxzZSBpZiAoMCA9PSBzdHJjbXAgKGF0X2RpcmVjdGl2ZV9hcmd2WzBdLCAiQHdhcm4iKQorICAgICAgICAgICB8fCAwID09IHN0cmNtcCAoYXRfZGlyZWN0aXZlX2FyZ3ZbMF0sICJAY29tcGxhaW4iKQorICAgICAgICAgICB8fCAwID09IHN0cmNtcCAoYXRfZGlyZWN0aXZlX2FyZ3ZbMF0sICJAZmF0YWwiKSkKKyAgICB7CisgICAgICB2b2lkICgqZnVuYykoY2hhciBjb25zdCAqLCAuLi4pOworICAgICAgc3dpdGNoIChhdF9kaXJlY3RpdmVfYXJndlswXVsxXSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgJ3cnOiBmdW5jID0gd2FybjsgYnJlYWs7CisgICAgICAgICAgY2FzZSAnYyc6IGZ1bmMgPSBjb21wbGFpbjsgYnJlYWs7CisgICAgICAgICAgY2FzZSAnZic6IGZ1bmMgPSBmYXRhbDsgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogYXZlciAoZmFsc2UpOyBicmVhazsKKyAgICAgICAgfQorICAgICAgc3dpdGNoIChhdF9kaXJlY3RpdmVfYXJnYykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIGZ1bmMgKF8oYXRfZGlyZWN0aXZlX2FyZ3ZbMV0pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIGZ1bmMgKF8oYXRfZGlyZWN0aXZlX2FyZ3ZbMV0pLCBhdF9kaXJlY3RpdmVfYXJndlsyXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBmdW5jIChfKGF0X2RpcmVjdGl2ZV9hcmd2WzFdKSwgYXRfZGlyZWN0aXZlX2FyZ3ZbMl0sCisgICAgICAgICAgICAgICAgICBhdF9kaXJlY3RpdmVfYXJndlszXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICBmdW5jIChfKGF0X2RpcmVjdGl2ZV9hcmd2WzFdKSwgYXRfZGlyZWN0aXZlX2FyZ3ZbMl0sCisgICAgICAgICAgICAgICAgICBhdF9kaXJlY3RpdmVfYXJndlszXSwgYXRfZGlyZWN0aXZlX2FyZ3ZbNF0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgZnVuYyAoXyhhdF9kaXJlY3RpdmVfYXJndlsxXSksIGF0X2RpcmVjdGl2ZV9hcmd2WzJdLAorICAgICAgICAgICAgICAgICAgYXRfZGlyZWN0aXZlX2FyZ3ZbM10sIGF0X2RpcmVjdGl2ZV9hcmd2WzRdLAorICAgICAgICAgICAgICAgICAgYXRfZGlyZWN0aXZlX2FyZ3ZbNV0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGZhaWxfZm9yX2F0X2RpcmVjdGl2ZV90b29fbWFueV9hcmdzIChhdF9kaXJlY3RpdmVfYXJndlswXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZSBpZiAoMCA9PSBzdHJjbXAgKGF0X2RpcmVjdGl2ZV9hcmd2WzBdLCAiQHdhcm5fYXQiKQorICAgICAgICAgICB8fCAwID09IHN0cmNtcCAoYXRfZGlyZWN0aXZlX2FyZ3ZbMF0sICJAY29tcGxhaW5fYXQiKQorICAgICAgICAgICB8fCAwID09IHN0cmNtcCAoYXRfZGlyZWN0aXZlX2FyZ3ZbMF0sICJAZmF0YWxfYXQiKSkKKyAgICB7CisgICAgICB2b2lkICgqZnVuYykobG9jYXRpb24sIGNoYXIgY29uc3QgKiwgLi4uKTsKKyAgICAgIGxvY2F0aW9uIGxvYzsKKyAgICAgIGlmIChhdF9kaXJlY3RpdmVfYXJnYyA8IDQpCisgICAgICAgIGZhaWxfZm9yX2F0X2RpcmVjdGl2ZV90b29fZmV3X2FyZ3MgKGF0X2RpcmVjdGl2ZV9hcmd2WzBdKTsKKyAgICAgIHN3aXRjaCAoYXRfZGlyZWN0aXZlX2FyZ3ZbMF1bMV0pCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlICd3JzogZnVuYyA9IHdhcm5fYXQ7IGJyZWFrOworICAgICAgICAgIGNhc2UgJ2MnOiBmdW5jID0gY29tcGxhaW5fYXQ7IGJyZWFrOworICAgICAgICAgIGNhc2UgJ2YnOiBmdW5jID0gZmF0YWxfYXQ7IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6IGF2ZXIgKGZhbHNlKTsgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGJvdW5kYXJ5X3NldF9mcm9tX3N0cmluZyAoJmxvYy5zdGFydCwgYXRfZGlyZWN0aXZlX2FyZ3ZbMV0pOworICAgICAgYm91bmRhcnlfc2V0X2Zyb21fc3RyaW5nICgmbG9jLmVuZCwgYXRfZGlyZWN0aXZlX2FyZ3ZbMl0pOworICAgICAgc3dpdGNoIChhdF9kaXJlY3RpdmVfYXJnYykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIGZ1bmMgKGxvYywgXyhhdF9kaXJlY3RpdmVfYXJndlszXSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgZnVuYyAobG9jLCBfKGF0X2RpcmVjdGl2ZV9hcmd2WzNdKSwgYXRfZGlyZWN0aXZlX2FyZ3ZbNF0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgZnVuYyAobG9jLCBfKGF0X2RpcmVjdGl2ZV9hcmd2WzNdKSwgYXRfZGlyZWN0aXZlX2FyZ3ZbNF0sCisgICAgICAgICAgICAgICAgICBhdF9kaXJlY3RpdmVfYXJndls1XSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICBmdW5jIChsb2MsIF8oYXRfZGlyZWN0aXZlX2FyZ3ZbM10pLCBhdF9kaXJlY3RpdmVfYXJndls0XSwKKyAgICAgICAgICAgICAgICAgIGF0X2RpcmVjdGl2ZV9hcmd2WzVdLCBhdF9kaXJlY3RpdmVfYXJndls2XSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICBmdW5jIChsb2MsIF8oYXRfZGlyZWN0aXZlX2FyZ3ZbM10pLCBhdF9kaXJlY3RpdmVfYXJndls0XSwKKyAgICAgICAgICAgICAgICAgIGF0X2RpcmVjdGl2ZV9hcmd2WzVdLCBhdF9kaXJlY3RpdmVfYXJndls2XSwKKyAgICAgICAgICAgICAgICAgIGF0X2RpcmVjdGl2ZV9hcmd2WzddKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBmYWlsX2Zvcl9hdF9kaXJlY3RpdmVfdG9vX21hbnlfYXJncyAoYXRfZGlyZWN0aXZlX2FyZ3ZbMF0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UgaWYgKDAgPT0gc3RyY21wIChhdF9kaXJlY3RpdmVfYXJndlswXSwgIkBvdXRwdXQiKSkKKyAgICB7CisgICAgICBpZiAoYXRfZGlyZWN0aXZlX2FyZ2MgPiAyKQorICAgICAgICBmYWlsX2Zvcl9hdF9kaXJlY3RpdmVfdG9vX21hbnlfYXJncyAoYXRfZGlyZWN0aXZlX2FyZ3ZbMF0pOworICAgICAgaWYgKCpvdXRuYW1lcCkKKyAgICAgICAgeworICAgICAgICAgIGZyZWUgKCpvdXRuYW1lcCk7CisgICAgICAgICAgeGZjbG9zZSAoc2tlbF9vdXQpOworICAgICAgICB9CisgICAgICAqb3V0bmFtZXAgPSB4c3RyZHVwIChhdF9kaXJlY3RpdmVfYXJndlsxXSk7CisgICAgICBvdXRwdXRfZmlsZV9uYW1lX2NoZWNrIChvdXRuYW1lcCk7CisgICAgICBza2VsX291dCA9IHhmb3BlbiAoKm91dG5hbWVwLCAidyIpOworICAgICAgKm91dF9saW5lbm9wID0gMTsKKyAgICB9CisgIGVsc2UKKyAgICBmYWlsX2Zvcl9pbnZhbGlkX2F0IChhdF9kaXJlY3RpdmVfYXJndlswXSk7Cit9CisKK3N0YXRpYyB2b2lkCitmYWlsX2Zvcl9hdF9kaXJlY3RpdmVfdG9vX2Zld19hcmdzIChjaGFyIGNvbnN0ICphdF9kaXJlY3RpdmVfbmFtZSkKK3sKKyAgZmF0YWwgKF8oInRvbyBmZXcgYXJndW1lbnRzIGZvciAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iKSwKKyAgICAgICAgIGF0X2RpcmVjdGl2ZV9uYW1lKTsKK30KKworc3RhdGljIHZvaWQKK2ZhaWxfZm9yX2F0X2RpcmVjdGl2ZV90b29fbWFueV9hcmdzIChjaGFyIGNvbnN0ICphdF9kaXJlY3RpdmVfbmFtZSkKK3sKKyAgZmF0YWwgKF8oInRvbyBtYW55IGFyZ3VtZW50cyBmb3IgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIiksCisgICAgICAgICBhdF9kaXJlY3RpdmVfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkCitmYWlsX2Zvcl9pbnZhbGlkX2F0IChjaGFyIGNvbnN0ICphdCkKK3sKKyAgZmF0YWwgKCJpbnZhbGlkIEAgaW4gc2tlbGV0b246ICVzIiwgYXQpOwogfQogCmRpZmYgLS1naXQgYS9zcmMvc2Nhbi1za2VsLmggYi9zcmMvc2Nhbi1za2VsLmgKaW5kZXggYTdlMTRjMy4uMmM2OTMwYiAxMDA2NDQKLS0tIGEvc3JjL3NjYW4tc2tlbC5oCisrKyBiL3NyYy9zY2FuLXNrZWwuaApAQCAtMSwyMyArMSwyMSBAQAogLyogU2NhbiBCaXNvbiBTa2VsZXRvbnMuCiAKLSAgIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMjAwNS0yMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgogCi0gICBCaXNvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLSAgIEJpc29uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCBCaXNvbjsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiB2b2lkIHNjYW5fc2tlbCAoRklMRSAqKTsKIApAQCAtMjYsMyArMjQsNCBAQAogZXh0ZXJuIEZJTEUgKnNrZWxfb3V0OwogZXh0ZXJuIGludCBza2VsX19mbGV4X2RlYnVnOwogZXh0ZXJuIGludCBza2VsX2xpbmVubzsKK3ZvaWQgc2tlbF9zY2FubmVyX2ZyZWUgKHZvaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL3NjYW4tc2tlbC5sIGIvc3JjL3NjYW4tc2tlbC5sCmluZGV4IGM4NGVlYTEuLmVkNjFiNWMgMTAwNjQ0Ci0tLSBhL3NyYy9zY2FuLXNrZWwubAorKysgYi9zcmMvc2Nhbi1za2VsLmwKQEAgLTEsMjYgKzEsMjMgQEAKIC8qIFNjYW4gQmlzb24gU2tlbGV0b25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBDIC0qLQogCi0gICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLgorICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCiAKLSAgIEJpc29uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLSAgIEJpc29uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIEJpc29uOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAgIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKLSVvcHRpb24gbm9kZWZhdWx0IG5veXl3cmFwIG5vdW5wdXQgbmV2ZXItaW50ZXJhY3RpdmUgZGVidWcKKyVvcHRpb24gbm9kZWZhdWx0IG5veXl3cmFwIG5vaW5wdXQgbm91bnB1dCBuZXZlci1pbnRlcmFjdGl2ZSBkZWJ1ZwogJW9wdGlvbiBwcmVmaXg9InNrZWxfIiBvdXRmaWxlPSJsZXgueXkuYyIKIAogJXsKQEAgLTI5LDggKzI2LDEwIEBACiAjdW5kZWYgc2tlbF93cmFwCiAjZGVmaW5lIHNrZWxfd3JhcCgpIDEKIAotI2luY2x1ZGUgInN5c3RlbS5oIgorI2RlZmluZSBGTEVYX1BSRUZJWChJZCkgc2tlbF8gIyMgSWQKKyNpbmNsdWRlICJmbGV4LXNjYW5uZXIuaCIKIAorI2luY2x1ZGUgPGRpcm5hbWUuaD4KICNpbmNsdWRlIDxlcnJvci5oPgogI2luY2x1ZGUgPHF1b3RlYXJnLmg+CiAKQEAgLTM5LDc3ICszOCw2MCBAQAogI2luY2x1ZGUgImZpbGVzLmgiCiAjaW5jbHVkZSAic2Nhbi1za2VsLmgiCiAKLS8qIFBhY2lmeSAiZ2NjIC1XbWlzc2luZy1wcm90b3R5cGVzIiB3aGVuIGZsZXggMi41LjMxIGlzIHVzZWQuICAqLwotaW50IHNrZWxfbGV4ICh2b2lkKTsKLWludCBza2VsX2dldF9saW5lbm8gKHZvaWQpOwotRklMRSAqc2tlbF9nZXRfaW4gKHZvaWQpOwotRklMRSAqc2tlbF9nZXRfb3V0ICh2b2lkKTsKLWludCBza2VsX2dldF9sZW5nICh2b2lkKTsKLWNoYXIgKnNrZWxfZ2V0X3RleHQgKHZvaWQpOwotdm9pZCBza2VsX3NldF9saW5lbm8gKGludCk7Ci12b2lkIHNrZWxfc2V0X2luIChGSUxFICopOwotdm9pZCBza2VsX3NldF9vdXQgKEZJTEUgKik7Ci1pbnQgc2tlbF9nZXRfZGVidWcgKHZvaWQpOwotdm9pZCBza2VsX3NldF9kZWJ1ZyAoaW50KTsKLWludCBza2VsX2xleF9kZXN0cm95ICh2b2lkKTsKKyNkZWZpbmUgWVlfREVDTCBzdGF0aWMgaW50IHNrZWxfbGV4ICh2b2lkKQorWVlfREVDTDsKIAogI2RlZmluZSBRUFVUUyhTdHJpbmcpIFwKICAgIGZwdXRzIChxdW90ZWFyZ19zdHlsZSAoY19xdW90aW5nX3N0eWxlLCBTdHJpbmcpLCB5eW91dCkKIAotI2RlZmluZSBCQVNFX1FQVVRTKEZpbGUpIFwKLSAgIFFQVVRTIChiYXNlX25hbWUgKEZpbGUpKQotCitzdGF0aWMgdm9pZCBhdF9kaXJlY3RpdmVfcGVyZm9ybSAoaW50IGF0X2RpcmVjdGl2ZV9hcmdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmF0X2RpcmVjdGl2ZV9hcmd2W10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKm91dG5hbWVwLCBpbnQgKm91dF9saW5lbm9wKTsKK3N0YXRpYyB2b2lkIGZhaWxfZm9yX2F0X2RpcmVjdGl2ZV90b29fbWFueV9hcmdzIChjaGFyIGNvbnN0ICphdF9kaXJlY3RpdmVfbmFtZSk7CitzdGF0aWMgdm9pZCBmYWlsX2Zvcl9hdF9kaXJlY3RpdmVfdG9vX2Zld19hcmdzIChjaGFyIGNvbnN0ICphdF9kaXJlY3RpdmVfbmFtZSk7CitzdGF0aWMgdm9pZCBmYWlsX2Zvcl9pbnZhbGlkX2F0IChjaGFyIGNvbnN0ICphdCk7CiAlfQorCisleCBTQ19BVF9ESVJFQ1RJVkVfQVJHUworJXggU0NfQVRfRElSRUNUSVZFX1NLSVBfV1MKKwogJSUKIAogJXsKLSAgaW50IGxpbmVubyBJRl9MSU5UICg9IDApOworICBpbnQgb3V0X2xpbmVubyBQQUNJRllfQ0MgKD0gMCk7CiAgIGNoYXIgKm91dG5hbWUgPSBOVUxMOworCisgIC8qIEN1cnJlbnRseSwgb25seSB0aGUgQHdhcm4sIEBjb21wbGFpbiwgQGZhdGFsLCBAd2Fybl9hdCwgQGNvbXBsYWluX2F0LCBhbmQKKyAgICAgQGZhdGFsX2F0IGRpcmVjdGl2ZXMgdGFrZSBtdWx0aXBsZSBhcmd1bWVudHMsIGFuZCB0aGUgbGFzdCB0aHJlZSBhbHJlYWR5CisgICAgIGNhbid0IHRha2UgbW9yZSB0aGFuIDcuICBhdF9kaXJlY3RpdmVfYXJndlswXSBpcyB0aGUgZGlyZWN0aXZlIG5hbWUuICAqLworICAjZGVmaW5lIEFUX0RJUkVDVElWRV9BUkdDX01BWCA4CisgIGludCBhdF9kaXJlY3RpdmVfYXJnYyA9IDA7CisgIGNoYXIgKmF0X2RpcmVjdGl2ZV9hcmd2W0FUX0RJUkVDVElWRV9BUkdDX01BWF07CiAlfQogCi0iQG91dHB1dCAiLipcbiB7Ci0gIGNoYXIgY29uc3QgKmZpbGVfbmFtZSA9IHl5dGV4dCArIHNpemVvZiAiQG91dHB1dCAiIC0gMTsKLSAgeXl0ZXh0W3l5bGVuZyAtIDFdID0gJ1wwJzsKKyJAQCIgZnB1dGMgKCdAJywgeXlvdXQpOworIkB7IiBmcHV0YyAoJ1snLCB5eW91dCk7CisiQH0iIGZwdXRjICgnXScsIHl5b3V0KTsKKyJAYCIgY29udGludWU7ICAvKiBVc2VkIGJ5IGI0X2NhdCBpbiAuLi9kYXRhL2Jpc29uLm00LiAgKi8KK0BcbiAgY29udGludWU7CiAKLSAgLyogRGVjb2RlIHNwZWNpYWwgZmlsZSBuYW1lcy4gIFRoZXkgaW5jbHVkZSB0aGUgZGlyZWN0b3J5IHBhcnQsCi0gICAgIGNvbnRyYXJ5IHRvIHRoZWlyICJmcmVlIiBvY2N1cnJlbmNlcywgdXNlZCBmb3IgaXNzdWluZyAjaW5jbHVkZXMsCi0gICAgIHdoaWNoIG11c3Qgbm90IGluY2x1ZGUgdGhlIGRpcmVjdG9yeSBwYXJ0LiAgKi8KKyJAb2xpbmVAIiAgZnByaW50ZiAoeXlvdXQsICIlZCIsIG91dF9saW5lbm8gKyAxKTsKKyJAb2ZpbGVAIiAgUVBVVFMgKG91dG5hbWUpOwogCi0gIGlmICgqZmlsZV9uYW1lID09ICdAJykKLSAgICB7Ci0gICAgICBpZiAoc3RyY21wIChmaWxlX25hbWUsICJAb3V0cHV0X2hlYWRlcl9uYW1lQCIpID09IDApCi0JZmlsZV9uYW1lID0gc3BlY19kZWZpbmVzX2ZpbGU7Ci0gICAgICBlbHNlIGlmIChzdHJjbXAgKGZpbGVfbmFtZSwgIkBvdXRwdXRfcGFyc2VyX25hbWVAIikgPT0gMCkKLQlmaWxlX25hbWUgPSBwYXJzZXJfZmlsZV9uYW1lOwotICAgICAgZWxzZQotCWZhdGFsICgiaW52YWxpZCB0b2tlbiBpbiBza2VsZXRvbjogJXMiLCB5eXRleHQpOwotICAgIH0KLSAgaWYgKG91dG5hbWUpCi0gICAgewotICAgICAgZnJlZSAob3V0bmFtZSk7Ci0gICAgICB4ZmNsb3NlICh5eW91dCk7Ci0gICAgfQotICBvdXRuYW1lID0geHN0cmR1cCAoZmlsZV9uYW1lKTsKLSAgeXlvdXQgPSB4Zm9wZW4gKG91dG5hbWUsICJ3Iik7Ci0gIGxpbmVubyA9IDE7CitAW2Etel9dKyIoIiB7CisgIHl5dGV4dFt5eWxlbmctMV0gPSAnXDAnOworICBvYnN0YWNrX2dyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsIHl5dGV4dCwgeXlsZW5nKTsKKyAgYXRfZGlyZWN0aXZlX2FyZ3ZbYXRfZGlyZWN0aXZlX2FyZ2MrK10gPQorICAgIG9ic3RhY2tfZmluaXNoICgmb2JzdGFja19mb3Jfc3RyaW5nKTsKKyAgQkVHSU4gU0NfQVRfRElSRUNUSVZFX0FSR1M7CiB9CiAKLSJAQCIJICAgZnB1dGMgKCdAJywgeXlvdXQpOwotIkB7IgkgICBmcHV0YyAoJ1snLCB5eW91dCk7Ci0iQH0iCSAgIGZwdXRjICgnXScsIHl5b3V0KTsKLQotIkBvbGluZUAiICBmcHJpbnRmICh5eW91dCwgIiVkIiwgbGluZW5vICsgMSk7Ci0iQG9maWxlQCIgIFFQVVRTIChvdXRuYW1lKTsKLSJAZGlyX3ByZWZpeEAiIFFQVVRTIChkaXJfcHJlZml4KTsKLSJAb3V0cHV0X3BhcnNlcl9uYW1lQCIJQkFTRV9RUFVUUyAocGFyc2VyX2ZpbGVfbmFtZSk7Ci0iQG91dHB1dF9oZWFkZXJfbmFtZUAiCUJBU0VfUVBVVFMgKHNwZWNfZGVmaW5lc19maWxlKTsKLQogICAvKiBUaGlzIHBhdHRlcm4gbXVzdCBub3QgbWF0Y2ggbW9yZSB0aGFuIHRoZSBwcmV2aW91cyBAIHBhdHRlcm5zLiAqLwotQFtee31AXG5dKiBmYXRhbCAoImludmFsaWQgQCBpbiBza2VsZXRvbjogJXMiLCB5eXRleHQpOwotXG4JICAgbGluZW5vKys7IEVDSE87Ci1bXkBcbl0rCSAgIEVDSE87CitAW15Ae31gKFxuXSogIGZhaWxfZm9yX2ludmFsaWRfYXQgKHl5dGV4dCk7CitcbiAgICAgICAgICAgIG91dF9saW5lbm8rKzsgRUNITzsKK1teQFxuXSsgICAgICAgRUNITzsKIAotPDxFT0Y+PiB7Cis8SU5JVElBTD48PEVPRj4+IHsKICAgaWYgKG91dG5hbWUpCiAgICAgewogICAgICAgZnJlZSAob3V0bmFtZSk7CkBAIC0xMTcsNiArOTksNTQgQEAKICAgICB9CiAgIHJldHVybiBFT0Y7CiB9CisKKzxTQ19BVF9ESVJFQ1RJVkVfQVJHUz4KK3sKKyAgW15AXSsgIFNUUklOR19HUk9XOworCisgICJAQCIgICBvYnN0YWNrXzFncm93ICgmb2JzdGFja19mb3Jfc3RyaW5nLCAnQCcpOworICAiQHsiICAgb2JzdGFja18xZ3JvdyAoJm9ic3RhY2tfZm9yX3N0cmluZywgJ1snKTsKKyAgIkB9IiAgIG9ic3RhY2tfMWdyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICddJyk7CisgICJAYCIgICBjb250aW51ZTsgLyogRm9yIHN0YXJ0aW5nIGFuIGFyZ3VtZW50IHRoYXQgYmVnaW5zIHdpdGggd2hpdGVzcGFjZS4gKi8KKyAgQFxuICAgIGNvbnRpbnVlOworCisgIEBbLCldIHsKKyAgICBpZiAoYXRfZGlyZWN0aXZlX2FyZ2MgPj0gQVRfRElSRUNUSVZFX0FSR0NfTUFYKQorICAgICAgZmFpbF9mb3JfYXRfZGlyZWN0aXZlX3Rvb19tYW55X2FyZ3MgKGF0X2RpcmVjdGl2ZV9hcmd2WzBdKTsKKworICAgIG9ic3RhY2tfMWdyb3cgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsICdcMCcpOworICAgIGF0X2RpcmVjdGl2ZV9hcmd2W2F0X2RpcmVjdGl2ZV9hcmdjKytdID0KKyAgICAgIG9ic3RhY2tfZmluaXNoICgmb2JzdGFja19mb3Jfc3RyaW5nKTsKKworICAgIC8qIExpa2UgTTQsIHNraXAgd2hpdGVzcGFjZSBhZnRlciBhIGNvbW1hLiAgKi8KKyAgICBpZiAoeXl0ZXh0WzFdID09ICcsJykKKyAgICAgIEJFR0lOIFNDX0FUX0RJUkVDVElWRV9TS0lQX1dTOworICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgYXRfZGlyZWN0aXZlX3BlcmZvcm0gKGF0X2RpcmVjdGl2ZV9hcmdjLCBhdF9kaXJlY3RpdmVfYXJndiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRuYW1lLCAmb3V0X2xpbmVubyk7CisgICAgICAgIG9ic3RhY2tfZnJlZSAoJm9ic3RhY2tfZm9yX3N0cmluZywgYXRfZGlyZWN0aXZlX2FyZ3ZbMF0pOworICAgICAgICBhdF9kaXJlY3RpdmVfYXJnYyA9IDA7CisgICAgICAgIEJFR0lOIElOSVRJQUw7CisgICAgICB9CisgIH0KKworICBALj8gIGZhaWxfZm9yX2ludmFsaWRfYXQgKHl5dGV4dCk7Cit9CisKKzxTQ19BVF9ESVJFQ1RJVkVfU0tJUF9XUz4KK3sKKyAgWyBcdFxyXG5dICAgIGNvbnRpbnVlOworICAuICAgICAgICAgICAgeyB5eWxlc3MgKDApOyBCRUdJTiBTQ19BVF9ESVJFQ1RJVkVfQVJHUzsgfQorfQorCis8U0NfQVRfRElSRUNUSVZFX0FSR1MsU0NfQVRfRElSRUNUSVZFX1NLSVBfV1M+Cit7CisgIDw8RU9GPj4geworICAgIGZhdGFsIChfKCJ1bmNsb3NlZCAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iKSwgYXRfZGlyZWN0aXZlX2FyZ3ZbMF0pOworICB9Cit9CisKICUlCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgpAQCAtMTI2LDkgKzE1NiwxNTEgQEAKIHZvaWQKIHNjYW5fc2tlbCAoRklMRSAqaW4pCiB7CisgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CisgIGlmICghaW5pdGlhbGl6ZWQpCisgICAgeworICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgb2JzdGFja19pbml0ICgmb2JzdGFja19mb3Jfc3RyaW5nKTsKKyAgICB9CiAgIHNrZWxfaW4gPSBpbjsKICAgc2tlbF9fZmxleF9kZWJ1ZyA9IHRyYWNlX2ZsYWcgJiB0cmFjZV9za2VsZXRvbjsKICAgc2tlbF9sZXggKCk7Cit9CisKK3ZvaWQKK3NrZWxfc2Nhbm5lcl9mcmVlICh2b2lkKQoreworICBvYnN0YWNrX2ZyZWUgKCZvYnN0YWNrX2Zvcl9zdHJpbmcsIDApOwogICAvKiBSZWNsYWltIEZsZXgncyBidWZmZXJzLiAgKi8KLSAgeXlfZGVsZXRlX2J1ZmZlciAoWVlfQ1VSUkVOVF9CVUZGRVIpOworICB5eWxleF9kZXN0cm95ICgpOworfQorCitzdGF0aWMgdm9pZAorYXRfZGlyZWN0aXZlX3BlcmZvcm0gKGludCBhdF9kaXJlY3RpdmVfYXJnYywKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyICphdF9kaXJlY3RpdmVfYXJndltdLAorICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipvdXRuYW1lcCwgaW50ICpvdXRfbGluZW5vcCkKK3sKKyAgaWYgKDAgPT0gc3RyY21wIChhdF9kaXJlY3RpdmVfYXJndlswXSwgIkBiYXNlbmFtZSIpKQorICAgIHsKKyAgICAgIGlmIChhdF9kaXJlY3RpdmVfYXJnYyA+IDIpCisgICAgICAgIGZhaWxfZm9yX2F0X2RpcmVjdGl2ZV90b29fbWFueV9hcmdzIChhdF9kaXJlY3RpdmVfYXJndlswXSk7CisgICAgICBmcHV0cyAobGFzdF9jb21wb25lbnQgKGF0X2RpcmVjdGl2ZV9hcmd2WzFdKSwgeXlvdXQpOworICAgIH0KKyAgZWxzZSBpZiAoMCA9PSBzdHJjbXAgKGF0X2RpcmVjdGl2ZV9hcmd2WzBdLCAiQHdhcm4iKQorICAgICAgICAgICB8fCAwID09IHN0cmNtcCAoYXRfZGlyZWN0aXZlX2FyZ3ZbMF0sICJAY29tcGxhaW4iKQorICAgICAgICAgICB8fCAwID09IHN0cmNtcCAoYXRfZGlyZWN0aXZlX2FyZ3ZbMF0sICJAZmF0YWwiKSkKKyAgICB7CisgICAgICB2b2lkICgqZnVuYykoY2hhciBjb25zdCAqLCAuLi4pOworICAgICAgc3dpdGNoIChhdF9kaXJlY3RpdmVfYXJndlswXVsxXSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgJ3cnOiBmdW5jID0gd2FybjsgYnJlYWs7CisgICAgICAgICAgY2FzZSAnYyc6IGZ1bmMgPSBjb21wbGFpbjsgYnJlYWs7CisgICAgICAgICAgY2FzZSAnZic6IGZ1bmMgPSBmYXRhbDsgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogYXZlciAoZmFsc2UpOyBicmVhazsKKyAgICAgICAgfQorICAgICAgc3dpdGNoIChhdF9kaXJlY3RpdmVfYXJnYykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIGZ1bmMgKF8oYXRfZGlyZWN0aXZlX2FyZ3ZbMV0pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIGZ1bmMgKF8oYXRfZGlyZWN0aXZlX2FyZ3ZbMV0pLCBhdF9kaXJlY3RpdmVfYXJndlsyXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBmdW5jIChfKGF0X2RpcmVjdGl2ZV9hcmd2WzFdKSwgYXRfZGlyZWN0aXZlX2FyZ3ZbMl0sCisgICAgICAgICAgICAgICAgICBhdF9kaXJlY3RpdmVfYXJndlszXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICBmdW5jIChfKGF0X2RpcmVjdGl2ZV9hcmd2WzFdKSwgYXRfZGlyZWN0aXZlX2FyZ3ZbMl0sCisgICAgICAgICAgICAgICAgICBhdF9kaXJlY3RpdmVfYXJndlszXSwgYXRfZGlyZWN0aXZlX2FyZ3ZbNF0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgZnVuYyAoXyhhdF9kaXJlY3RpdmVfYXJndlsxXSksIGF0X2RpcmVjdGl2ZV9hcmd2WzJdLAorICAgICAgICAgICAgICAgICAgYXRfZGlyZWN0aXZlX2FyZ3ZbM10sIGF0X2RpcmVjdGl2ZV9hcmd2WzRdLAorICAgICAgICAgICAgICAgICAgYXRfZGlyZWN0aXZlX2FyZ3ZbNV0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGZhaWxfZm9yX2F0X2RpcmVjdGl2ZV90b29fbWFueV9hcmdzIChhdF9kaXJlY3RpdmVfYXJndlswXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZSBpZiAoMCA9PSBzdHJjbXAgKGF0X2RpcmVjdGl2ZV9hcmd2WzBdLCAiQHdhcm5fYXQiKQorICAgICAgICAgICB8fCAwID09IHN0cmNtcCAoYXRfZGlyZWN0aXZlX2FyZ3ZbMF0sICJAY29tcGxhaW5fYXQiKQorICAgICAgICAgICB8fCAwID09IHN0cmNtcCAoYXRfZGlyZWN0aXZlX2FyZ3ZbMF0sICJAZmF0YWxfYXQiKSkKKyAgICB7CisgICAgICB2b2lkICgqZnVuYykobG9jYXRpb24sIGNoYXIgY29uc3QgKiwgLi4uKTsKKyAgICAgIGxvY2F0aW9uIGxvYzsKKyAgICAgIGlmIChhdF9kaXJlY3RpdmVfYXJnYyA8IDQpCisgICAgICAgIGZhaWxfZm9yX2F0X2RpcmVjdGl2ZV90b29fZmV3X2FyZ3MgKGF0X2RpcmVjdGl2ZV9hcmd2WzBdKTsKKyAgICAgIHN3aXRjaCAoYXRfZGlyZWN0aXZlX2FyZ3ZbMF1bMV0pCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlICd3JzogZnVuYyA9IHdhcm5fYXQ7IGJyZWFrOworICAgICAgICAgIGNhc2UgJ2MnOiBmdW5jID0gY29tcGxhaW5fYXQ7IGJyZWFrOworICAgICAgICAgIGNhc2UgJ2YnOiBmdW5jID0gZmF0YWxfYXQ7IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6IGF2ZXIgKGZhbHNlKTsgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGJvdW5kYXJ5X3NldF9mcm9tX3N0cmluZyAoJmxvYy5zdGFydCwgYXRfZGlyZWN0aXZlX2FyZ3ZbMV0pOworICAgICAgYm91bmRhcnlfc2V0X2Zyb21fc3RyaW5nICgmbG9jLmVuZCwgYXRfZGlyZWN0aXZlX2FyZ3ZbMl0pOworICAgICAgc3dpdGNoIChhdF9kaXJlY3RpdmVfYXJnYykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIGZ1bmMgKGxvYywgXyhhdF9kaXJlY3RpdmVfYXJndlszXSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgZnVuYyAobG9jLCBfKGF0X2RpcmVjdGl2ZV9hcmd2WzNdKSwgYXRfZGlyZWN0aXZlX2FyZ3ZbNF0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgZnVuYyAobG9jLCBfKGF0X2RpcmVjdGl2ZV9hcmd2WzNdKSwgYXRfZGlyZWN0aXZlX2FyZ3ZbNF0sCisgICAgICAgICAgICAgICAgICBhdF9kaXJlY3RpdmVfYXJndls1XSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICBmdW5jIChsb2MsIF8oYXRfZGlyZWN0aXZlX2FyZ3ZbM10pLCBhdF9kaXJlY3RpdmVfYXJndls0XSwKKyAgICAgICAgICAgICAgICAgIGF0X2RpcmVjdGl2ZV9hcmd2WzVdLCBhdF9kaXJlY3RpdmVfYXJndls2XSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICBmdW5jIChsb2MsIF8oYXRfZGlyZWN0aXZlX2FyZ3ZbM10pLCBhdF9kaXJlY3RpdmVfYXJndls0XSwKKyAgICAgICAgICAgICAgICAgIGF0X2RpcmVjdGl2ZV9hcmd2WzVdLCBhdF9kaXJlY3RpdmVfYXJndls2XSwKKyAgICAgICAgICAgICAgICAgIGF0X2RpcmVjdGl2ZV9hcmd2WzddKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBmYWlsX2Zvcl9hdF9kaXJlY3RpdmVfdG9vX21hbnlfYXJncyAoYXRfZGlyZWN0aXZlX2FyZ3ZbMF0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UgaWYgKDAgPT0gc3RyY21wIChhdF9kaXJlY3RpdmVfYXJndlswXSwgIkBvdXRwdXQiKSkKKyAgICB7CisgICAgICBpZiAoYXRfZGlyZWN0aXZlX2FyZ2MgPiAyKQorICAgICAgICBmYWlsX2Zvcl9hdF9kaXJlY3RpdmVfdG9vX21hbnlfYXJncyAoYXRfZGlyZWN0aXZlX2FyZ3ZbMF0pOworICAgICAgaWYgKCpvdXRuYW1lcCkKKyAgICAgICAgeworICAgICAgICAgIGZyZWUgKCpvdXRuYW1lcCk7CisgICAgICAgICAgeGZjbG9zZSAoeXlvdXQpOworICAgICAgICB9CisgICAgICAqb3V0bmFtZXAgPSB4c3RyZHVwIChhdF9kaXJlY3RpdmVfYXJndlsxXSk7CisgICAgICBvdXRwdXRfZmlsZV9uYW1lX2NoZWNrIChvdXRuYW1lcCk7CisgICAgICB5eW91dCA9IHhmb3BlbiAoKm91dG5hbWVwLCAidyIpOworICAgICAgKm91dF9saW5lbm9wID0gMTsKKyAgICB9CisgIGVsc2UKKyAgICBmYWlsX2Zvcl9pbnZhbGlkX2F0IChhdF9kaXJlY3RpdmVfYXJndlswXSk7Cit9CisKK3N0YXRpYyB2b2lkCitmYWlsX2Zvcl9hdF9kaXJlY3RpdmVfdG9vX2Zld19hcmdzIChjaGFyIGNvbnN0ICphdF9kaXJlY3RpdmVfbmFtZSkKK3sKKyAgZmF0YWwgKF8oInRvbyBmZXcgYXJndW1lbnRzIGZvciAlcyBkaXJlY3RpdmUgaW4gc2tlbGV0b24iKSwKKyAgICAgICAgIGF0X2RpcmVjdGl2ZV9uYW1lKTsKK30KKworc3RhdGljIHZvaWQKK2ZhaWxfZm9yX2F0X2RpcmVjdGl2ZV90b29fbWFueV9hcmdzIChjaGFyIGNvbnN0ICphdF9kaXJlY3RpdmVfbmFtZSkKK3sKKyAgZmF0YWwgKF8oInRvbyBtYW55IGFyZ3VtZW50cyBmb3IgJXMgZGlyZWN0aXZlIGluIHNrZWxldG9uIiksCisgICAgICAgICBhdF9kaXJlY3RpdmVfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkCitmYWlsX2Zvcl9pbnZhbGlkX2F0IChjaGFyIGNvbnN0ICphdCkKK3sKKyAgZmF0YWwgKCJpbnZhbGlkIEAgaW4gc2tlbGV0b246ICVzIiwgYXQpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL3N0YXRlLmMgYi9zcmMvc3RhdGUuYwppbmRleCA0ZWIzOWY5Li42NjZlMGNjIDEwMDY0NAotLS0gYS9zcmMvc3RhdGUuYworKysgYi9zcmMvc3RhdGUuYwpAQCAtMSwyNCArMSwyMSBAQAotLyogVHlwZSBkZWZpbml0aW9ucyBmb3Igbm9uZGV0ZXJtaW5pc3RpYyBmaW5pdGUgc3RhdGUgbWFjaGluZSBmb3IgQmlzb24uCisvKiBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgZmluaXRlIHN0YXRlIG1hY2hpbmUgZm9yIEJpc29uLgogCi0gICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLgorICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCiAKLSAgIEJpc29uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAotICAgQmlzb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIEJpc29uOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpbmNsdWRlIDxjb25maWcuaD4KICNpbmNsdWRlICJzeXN0ZW0uaCIKQEAgLTI4LDYgKzI1LDcgQEAKICNpbmNsdWRlICJjb21wbGFpbi5oIgogI2luY2x1ZGUgImdyYW0uaCIKICNpbmNsdWRlICJzdGF0ZS5oIgorI2luY2x1ZGUgInByaW50LXhtbC5oIgogCiAKIAkJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS4KQEAgLTYxLDcgKzU5LDcgQEAKICAgaW50IGo7CiAgIGZvciAoaiA9IDA7IDsgaisrKQogICAgIHsKLSAgICAgIGFzc2VydCAoaiA8IHNoaWZ0cy0+bnVtKTsKKyAgICAgIGF2ZXIgKGogPCBzaGlmdHMtPm51bSk7CiAgICAgICBpZiAoVFJBTlNJVElPTl9TWU1CT0wgKHNoaWZ0cywgaikgPT0gc3ltKQogCXJldHVybiBzaGlmdHMtPnN0YXRlc1tqXTsKICAgICB9CkBAIC0xMDUsNyArMTAzLDcgQEAKICAgc2l6ZV90IHJ1bGVzX3NpemUgPSBudW0gKiBzaXplb2YgKnJlZHM7CiAgIHJlZHVjdGlvbnMgKnJlcyA9IHhtYWxsb2MgKG9mZnNldG9mIChyZWR1Y3Rpb25zLCBydWxlcykgKyBydWxlc19zaXplKTsKICAgcmVzLT5udW0gPSBudW07Ci0gIHJlcy0+bG9va19haGVhZF90b2tlbnMgPSBOVUxMOworICByZXMtPmxvb2thaGVhZF90b2tlbnMgPSBOVUxMOwogICBtZW1jcHkgKHJlcy0+cnVsZXMsIHJlZHMsIHJ1bGVzX3NpemUpOwogICByZXR1cm4gcmVzOwogfQpAQCAtMTM1LDcgKzEzMyw3IEBACiAgIHN0YXRlICpyZXM7CiAgIHNpemVfdCBpdGVtc19zaXplID0gbml0ZW1zICogc2l6ZW9mICpjb3JlOwogCi0gIGFzc2VydCAobnN0YXRlcyA8IFNUQVRFX05VTUJFUl9NQVhJTVVNKTsKKyAgYXZlciAobnN0YXRlcyA8IFNUQVRFX05VTUJFUl9NQVhJTVVNKTsKIAogICByZXMgPSB4bWFsbG9jIChvZmZzZXRvZiAoc3RhdGUsIGl0ZW1zKSArIGl0ZW1zX3NpemUpOwogICByZXMtPm51bWJlciA9IG5zdGF0ZXMrKzsKQEAgLTE0Myw4ICsxNDEsMTAgQEAKICAgcmVzLT50cmFuc2l0aW9ucyA9IE5VTEw7CiAgIHJlcy0+cmVkdWN0aW9ucyA9IE5VTEw7CiAgIHJlcy0+ZXJycyA9IE5VTEw7CisgIHJlcy0+c3RhdGVfbGlzdCA9IE5VTEw7CiAgIHJlcy0+Y29uc2lzdGVudCA9IDA7CiAgIHJlcy0+c29sdmVkX2NvbmZsaWN0cyA9IE5VTEw7CisgIHJlcy0+c29sdmVkX2NvbmZsaWN0c194bWwgPSBOVUxMOwogCiAgIHJlcy0+bml0ZW1zID0gbml0ZW1zOwogICBtZW1jcHkgKHJlcy0+aXRlbXMsIGNvcmUsIGl0ZW1zX3NpemUpOwpAQCAtMTU0LDYgKzE1NCwzMiBAQAogICByZXR1cm4gcmVzOwogfQogCitzdGF0ZSAqCitzdGF0ZV9uZXdfaXNvY29yZSAoc3RhdGUgY29uc3QgKnMpCit7CisgIHN0YXRlICpyZXM7CisgIHNpemVfdCBpdGVtc19zaXplID0gcy0+bml0ZW1zICogc2l6ZW9mICpzLT5pdGVtczsKKworICBhdmVyIChuc3RhdGVzIDwgU1RBVEVfTlVNQkVSX01BWElNVU0pOworCisgIHJlcyA9IHhtYWxsb2MgKG9mZnNldG9mIChzdGF0ZSwgaXRlbXMpICsgaXRlbXNfc2l6ZSk7CisgIHJlcy0+bnVtYmVyID0gbnN0YXRlcysrOworICByZXMtPmFjY2Vzc2luZ19zeW1ib2wgPSBzLT5hY2Nlc3Npbmdfc3ltYm9sOworICByZXMtPnRyYW5zaXRpb25zID0KKyAgICB0cmFuc2l0aW9uc19uZXcgKHMtPnRyYW5zaXRpb25zLT5udW0sIHMtPnRyYW5zaXRpb25zLT5zdGF0ZXMpOworICByZXMtPnJlZHVjdGlvbnMgPSByZWR1Y3Rpb25zX25ldyAocy0+cmVkdWN0aW9ucy0+bnVtLCBzLT5yZWR1Y3Rpb25zLT5ydWxlcyk7CisgIHJlcy0+ZXJycyA9IE5VTEw7CisgIHJlcy0+c3RhdGVfbGlzdCA9IE5VTEw7CisgIHJlcy0+Y29uc2lzdGVudCA9IHMtPmNvbnNpc3RlbnQ7CisgIHJlcy0+c29sdmVkX2NvbmZsaWN0cyA9IE5VTEw7CisgIHJlcy0+c29sdmVkX2NvbmZsaWN0c194bWwgPSBOVUxMOworCisgIHJlcy0+bml0ZW1zID0gcy0+bml0ZW1zOworICBtZW1jcHkgKHJlcy0+aXRlbXMsIHMtPml0ZW1zLCBpdGVtc19zaXplKTsKKworICByZXR1cm4gcmVzOworfQorCiAKIC8qLS0tLS0tLS0tLgogfCBGcmVlIFMuICB8CkBAIC0xNzYsNyArMjAyLDcgQEAKIHZvaWQKIHN0YXRlX3RyYW5zaXRpb25zX3NldCAoc3RhdGUgKnMsIGludCBudW0sIHN0YXRlICoqdHJhbnMpCiB7Ci0gIGFzc2VydCAoIXMtPnRyYW5zaXRpb25zKTsKKyAgYXZlciAoIXMtPnRyYW5zaXRpb25zKTsKICAgcy0+dHJhbnNpdGlvbnMgPSB0cmFuc2l0aW9uc19uZXcgKG51bSwgdHJhbnMpOwogfQogCkBAIC0xODgsNyArMjE0LDcgQEAKIHZvaWQKIHN0YXRlX3JlZHVjdGlvbnNfc2V0IChzdGF0ZSAqcywgaW50IG51bSwgcnVsZSAqKnJlZHMpCiB7Ci0gIGFzc2VydCAoIXMtPnJlZHVjdGlvbnMpOworICBhdmVyICghcy0+cmVkdWN0aW9ucyk7CiAgIHMtPnJlZHVjdGlvbnMgPSByZWR1Y3Rpb25zX25ldyAobnVtLCByZWRzKTsKIH0KIApAQCAtMjEyLDMyICsyMzgsMzIgQEAKIHZvaWQKIHN0YXRlX2VycnNfc2V0IChzdGF0ZSAqcywgaW50IG51bSwgc3ltYm9sICoqdG9rZW5zKQogewotICBhc3NlcnQgKCFzLT5lcnJzKTsKKyAgYXZlciAoIXMtPmVycnMpOwogICBzLT5lcnJzID0gZXJyc19uZXcgKG51bSwgdG9rZW5zKTsKIH0KIAogCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBQcmludCBvbiBPVVQgYWxsIHRoZSBsb29rLWFoZWFkIHRva2VucyBzdWNoIHRoYXQgUyB8Ci18IHdhbnRzIHRvIHJlZHVjZSBSLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUHJpbnQgb24gT1VUIGFsbCB0aGUgbG9va2FoZWFkIHRva2VucyBzdWNoIHRoYXQgUyB8Cit8IHdhbnRzIHRvIHJlZHVjZSBSLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogdm9pZAotc3RhdGVfcnVsZV9sb29rX2FoZWFkX3Rva2Vuc19wcmludCAoc3RhdGUgKnMsIHJ1bGUgKnIsIEZJTEUgKm91dCkKK3N0YXRlX3J1bGVfbG9va2FoZWFkX3Rva2Vuc19wcmludCAoc3RhdGUgKnMsIHJ1bGUgKnIsIEZJTEUgKm91dCkKIHsKICAgLyogRmluZCB0aGUgcmVkdWN0aW9uIHdlIGFyZSBoYW5kbGluZy4gICovCiAgIHJlZHVjdGlvbnMgKnJlZHMgPSBzLT5yZWR1Y3Rpb25zOwogICBpbnQgcmVkID0gc3RhdGVfcmVkdWN0aW9uX2ZpbmQgKHMsIHIpOwogCiAgIC8qIFByaW50IHRoZW0gaWYgdGhlcmUgYXJlLiAgKi8KLSAgaWYgKHJlZHMtPmxvb2tfYWhlYWRfdG9rZW5zICYmIHJlZCAhPSAtMSkKKyAgaWYgKHJlZHMtPmxvb2thaGVhZF90b2tlbnMgJiYgcmVkICE9IC0xKQogICAgIHsKICAgICAgIGJpdHNldF9pdGVyYXRvciBiaXRlcjsKICAgICAgIGludCBrOwogICAgICAgY2hhciBjb25zdCAqc2VwID0gIiI7CiAgICAgICBmcHJpbnRmIChvdXQsICIgIFsiKTsKLSAgICAgIEJJVFNFVF9GT1JfRUFDSCAoYml0ZXIsIHJlZHMtPmxvb2tfYWhlYWRfdG9rZW5zW3JlZF0sIGssIDApCisgICAgICBCSVRTRVRfRk9SX0VBQ0ggKGJpdGVyLCByZWRzLT5sb29rYWhlYWRfdG9rZW5zW3JlZF0sIGssIDApCiAJewogCSAgZnByaW50ZiAob3V0LCAiJXMlcyIsIHNlcCwgc3ltYm9sc1trXS0+dGFnKTsKIAkgIHNlcCA9ICIsICI7CkBAIC0yNDYsNiArMjcyLDI5IEBACiAgICAgfQogfQogCit2b2lkCitzdGF0ZV9ydWxlX2xvb2thaGVhZF90b2tlbnNfcHJpbnRfeG1sIChzdGF0ZSAqcywgcnVsZSAqciwKKwkJCQkgICAgICAgRklMRSAqb3V0LCBpbnQgbGV2ZWwpCit7CisgIC8qIEZpbmQgdGhlIHJlZHVjdGlvbiB3ZSBhcmUgaGFuZGxpbmcuICAqLworICByZWR1Y3Rpb25zICpyZWRzID0gcy0+cmVkdWN0aW9uczsKKyAgaW50IHJlZCA9IHN0YXRlX3JlZHVjdGlvbl9maW5kIChzLCByKTsKKworICAvKiBQcmludCB0aGVtIGlmIHRoZXJlIGFyZS4gICovCisgIGlmIChyZWRzLT5sb29rYWhlYWRfdG9rZW5zICYmIHJlZCAhPSAtMSkKKyAgICB7CisgICAgICBiaXRzZXRfaXRlcmF0b3IgYml0ZXI7CisgICAgICBpbnQgazsKKyAgICAgIHhtbF9wdXRzIChvdXQsIGxldmVsLCAiPGxvb2thaGVhZHM+Iik7CisgICAgICBCSVRTRVRfRk9SX0VBQ0ggKGJpdGVyLCByZWRzLT5sb29rYWhlYWRfdG9rZW5zW3JlZF0sIGssIDApCisJeworCSAgeG1sX3ByaW50ZiAob3V0LCBsZXZlbCArIDEsICI8c3ltYm9sPiVzPC9zeW1ib2w+IiwKKwkJICAgICAgeG1sX2VzY2FwZSAoc3ltYm9sc1trXS0+dGFnKSk7CisJfQorICAgICAgeG1sX3B1dHMgKG91dCwgbGV2ZWwsICI8L2xvb2thaGVhZHM+Iik7CisgICAgfQorfQorCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCBBIHN0YXRlIGhhc2ggdGFibGUuICB8CkBAIC0zMjksNyArMzc4LDggQEAKIHZvaWQKIHN0YXRlX2hhc2hfaW5zZXJ0IChzdGF0ZSAqcykKIHsKLSAgaGFzaF9pbnNlcnQgKHN0YXRlX3RhYmxlLCBzKTsKKyAgaWYgKCFoYXNoX2luc2VydCAoc3RhdGVfdGFibGUsIHMpKQorICAgIHhhbGxvY19kaWUgKCk7CiB9CiAKIApAQCAtMzUyLDYgKzQwMiw1MiBAQAogICByZXR1cm4gZW50cnk7CiB9CiAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUmVjb3JkIFMgYW5kIGFsbCBzdGF0ZXMgcmVhY2hhYmxlIGZyb20gUyBpbiBSRUFDSEFCTEUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZAorc3RhdGVfcmVjb3JkX3JlYWNoYWJsZV9zdGF0ZXMgKHN0YXRlICpzLCBiaXRzZXQgcmVhY2hhYmxlKQoreworICBpZiAoYml0c2V0X3Rlc3QgKHJlYWNoYWJsZSwgcy0+bnVtYmVyKSkKKyAgICByZXR1cm47CisgIGJpdHNldF9zZXQgKHJlYWNoYWJsZSwgcy0+bnVtYmVyKTsKKyAgeworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBzLT50cmFuc2l0aW9ucy0+bnVtOyArK2kpCisgICAgICBpZiAoIVRSQU5TSVRJT05fSVNfRElTQUJMRUQgKHMtPnRyYW5zaXRpb25zLCBpKSkKKyAgICAgICAgc3RhdGVfcmVjb3JkX3JlYWNoYWJsZV9zdGF0ZXMgKHMtPnRyYW5zaXRpb25zLT5zdGF0ZXNbaV0sIHJlYWNoYWJsZSk7CisgIH0KK30KKwordm9pZAorc3RhdGVfcmVtb3ZlX3VucmVhY2hhYmxlX3N0YXRlcyAoc3RhdGVfbnVtYmVyIG9sZF90b19uZXdbXSkKK3sKKyAgc3RhdGVfbnVtYmVyIG5zdGF0ZXNfcmVhY2hhYmxlID0gMDsKKyAgYml0c2V0IHJlYWNoYWJsZSA9IGJpdHNldF9jcmVhdGUgKG5zdGF0ZXMsIEJJVFNFVF9GSVhFRCk7CisgIHN0YXRlX3JlY29yZF9yZWFjaGFibGVfc3RhdGVzIChzdGF0ZXNbMF0sIHJlYWNoYWJsZSk7CisgIHsKKyAgICBzdGF0ZV9udW1iZXIgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnN0YXRlczsgKytpKQorICAgICAgeworICAgICAgICBpZiAoYml0c2V0X3Rlc3QgKHJlYWNoYWJsZSwgc3RhdGVzW2ldLT5udW1iZXIpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRlc1tuc3RhdGVzX3JlYWNoYWJsZV0gPSBzdGF0ZXNbaV07CisgICAgICAgICAgICBzdGF0ZXNbbnN0YXRlc19yZWFjaGFibGVdLT5udW1iZXIgPSBuc3RhdGVzX3JlYWNoYWJsZTsKKyAgICAgICAgICAgIG9sZF90b19uZXdbaV0gPSBuc3RhdGVzX3JlYWNoYWJsZSsrOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRlX2ZyZWUgKHN0YXRlc1tpXSk7CisgICAgICAgICAgICBvbGRfdG9fbmV3W2ldID0gbnN0YXRlczsKKyAgICAgICAgICB9CisgICAgICB9CisgIH0KKyAgbnN0YXRlcyA9IG5zdGF0ZXNfcmVhY2hhYmxlOworICBiaXRzZXRfZnJlZSAocmVhY2hhYmxlKTsKK30KKwogLyogQWxsIHRoZSBkZWNvcmF0ZWQgc3RhdGVzLCBpbmRleGVkIGJ5IHRoZSBzdGF0ZSBudW1iZXIuICAqLwogc3RhdGUgKipzdGF0ZXMgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9zcmMvc3RhdGUuaCBiL3NyYy9zdGF0ZS5oCmluZGV4IDQ0MGNkNDYuLmRmZGM0OWQgMTAwNjQ0Ci0tLSBhL3NyYy9zdGF0ZS5oCisrKyBiL3NyYy9zdGF0ZS5oCkBAIC0xLDI0ICsxLDIyIEBACi0vKiBUeXBlIGRlZmluaXRpb25zIGZvciBub25kZXRlcm1pbmlzdGljIGZpbml0ZSBzdGF0ZSBtYWNoaW5lIGZvciBCaXNvbi4KKy8qIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBmaW5pdGUgc3RhdGUgbWFjaGluZSBmb3IgQmlzb24uCiAKLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlCi0gICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDIwMDAtMjAwNCwgMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4KIAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCiAKLSAgIEJpc29uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAotICAgQmlzb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIEJpc29uOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKIAogLyogVGhlc2UgdHlwZSBkZWZpbml0aW9ucyBhcmUgdXNlZCB0byByZXByZXNlbnQgYSBub25kZXRlcm1pbmlzdGljCkBAIC00NCwxMyArNDIsMTMgQEAKICAgIEFDQ0VTU0lOR19TWU1CT0wgb2YgdGhlIGNvcmUuCiAKICAgIEVhY2ggY29yZSBjb250YWlucyBhIHZlY3RvciBvZiBOSVRFTVMgaXRlbXMgd2hpY2ggYXJlIHRoZSBpbmRpY2VzCi0gICBpbiB0aGUgUklURU1TIHZlY3RvciBvZiB0aGUgaXRlbXMgdGhhdCBhcmUgc2VsZWN0ZWQgaW4gdGhpcyBzdGF0ZS4KKyAgIGluIHRoZSBSSVRFTSB2ZWN0b3Igb2YgdGhlIGl0ZW1zIHRoYXQgYXJlIHNlbGVjdGVkIGluIHRoaXMgc3RhdGUuCiAKLSAgIFRoZSB0d28gdHlwZXMgb2YgYWN0aW9ucyBhcmUgc2hpZnRzL2dvdG9zIChwdXNoIHRoZSBsb29rLWFoZWFkIHRva2VuCisgICBUaGUgdHdvIHR5cGVzIG9mIGFjdGlvbnMgYXJlIHNoaWZ0cy9nb3RvcyAocHVzaCB0aGUgbG9va2FoZWFkIHRva2VuCiAgICBhbmQgcmVhZCBhbm90aGVyL2dvdG8gdG8gdGhlIHN0YXRlIGRlc2lnbmF0ZWQgYnkgYSBudGVybSkgYW5kCiAgICByZWR1Y3Rpb25zIChjb21iaW5lIHRoZSBsYXN0IG4gdGhpbmdzIG9uIHRoZSBzdGFjayB2aWEgYSBydWxlLAogICAgcmVwbGFjZSB0aGVtIHdpdGggdGhlIHN5bWJvbCB0aGF0IHRoZSBydWxlIGRlcml2ZXMsIGFuZCBsZWF2ZSB0aGUKLSAgIGxvb2stYWhlYWQgdG9rZW4gYWxvbmUpLiAgV2hlbiB0aGUgc3RhdGVzIGFyZSBnZW5lcmF0ZWQsIHRoZXNlCisgICBsb29rYWhlYWQgdG9rZW4gYWxvbmUpLiAgV2hlbiB0aGUgc3RhdGVzIGFyZSBnZW5lcmF0ZWQsIHRoZXNlCiAgICBhY3Rpb25zIGFyZSByZXByZXNlbnRlZCBpbiB0d28gb3RoZXIgbGlzdHMuCiAKICAgIEVhY2ggdHJhbnNpdGlvbiBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBwb3NzaWJsZSB0cmFuc2l0aW9ucyBvdXQKQEAgLTYzLDkgKzYxLDggQEAKICAgIGRlbGV0ZXMgdHJhbnNpdGlvbnMgYnkgaGF2aW5nIHRoZW0gcG9pbnQgdG8gemVyby4KIAogICAgRWFjaCByZWR1Y3Rpb25zIHN0cnVjdHVyZSBkZXNjcmliZXMgdGhlIHBvc3NpYmxlIHJlZHVjdGlvbnMgYXQgdGhlCi0gICBzdGF0ZSB3aG9zZSBudW1iZXIgaXMgaW4gdGhlIG51bWJlciBmaWVsZC4gIFRoZSBkYXRhIGlzIGEgbGlzdCBvZgotICAgbnJlZHMgcnVsZXMsIHJlcHJlc2VudGVkIGJ5IHRoZWlyIHJ1bGUgbnVtYmVycy4gIGZpcnN0X3JlZHVjdGlvbgotICAgcG9pbnRzIHRvIHRoZSBsaXN0IG9mIHRoZXNlIHN0cnVjdHVyZXMuCisgICBzdGF0ZSB3aG9zZSBudW1iZXIgaXMgaW4gdGhlIG51bWJlciBmaWVsZC4gIHJ1bGVzIGlzIGFuIGFycmF5IG9mCisgICBudW0gcnVsZXMuICBsb29rYWhlYWRfdG9rZW5zIGlzIGFuIGFycmF5IG9mIGJpdHNldHMsIG9uZSBwZXIgcnVsZS4KIAogICAgQ29uZmxpY3QgcmVzb2x1dGlvbiBjYW4gZGVjaWRlIHRoYXQgY2VydGFpbiB0b2tlbnMgaW4gY2VydGFpbgogICAgc3RhdGVzIHNob3VsZCBleHBsaWNpdGx5IGJlIGVycm9ycyAoZm9yIGltcGxlbWVudGluZyAlbm9uYXNzb2MpLgpAQCAtMTg1LDcgKzE4Miw4IEBACiB0eXBlZGVmIHN0cnVjdAogewogICBpbnQgbnVtOwotICBiaXRzZXQgKmxvb2tfYWhlYWRfdG9rZW5zOworICBiaXRzZXQgKmxvb2thaGVhZF90b2tlbnM7CisgIC8qIFNvcnRlZCBhc2NlbmRpbmdseSBvbiBydWxlIG51bWJlci4gICovCiAgIHJ1bGUgKnJ1bGVzWzFdOwogfSByZWR1Y3Rpb25zOwogCkBAIC0xOTUsNiArMTkzLDggQEAKIHwgc3RhdGVzLiAgfAogYC0tLS0tLS0tLSovCiAKK3N0cnVjdCBzdGF0ZV9saXN0OworCiBzdHJ1Y3Qgc3RhdGUKIHsKICAgc3RhdGVfbnVtYmVyIG51bWJlcjsKQEAgLTIwMywxNSArMjAzLDIyIEBACiAgIHJlZHVjdGlvbnMgKnJlZHVjdGlvbnM7CiAgIGVycnMgKmVycnM7CiAKLSAgLyogTm9uemVybyBpZiBubyBsb29rLWFoZWFkIGlzIG5lZWRlZCB0byBkZWNpZGUgd2hhdCB0byBkbyBpbiBzdGF0ZSBTLiAgKi8KKyAgLyogV2hlbiBhbiBpbmNsdWRlciAoc3VjaCBhcyBpZWxyLmMpIG5lZWRzIHRvIHN0b3JlIHN0YXRlcyBpbiBhIGxpc3QsIHRoZQorICAgICBpbmNsdWRlciBjYW4gZGVmaW5lIHN0cnVjdCBzdGF0ZV9saXN0IGFzIHRoZSBsaXN0IG5vZGUgc3RydWN0dXJlIGFuZCBjYW4KKyAgICAgc3RvcmUgaW4gdGhpcyBtZW1iZXIgYSByZWZlcmVuY2UgdG8gdGhlIG5vZGUgY29udGFpbmluZyBlYWNoIHN0YXRlLiAgKi8KKyAgc3RydWN0IHN0YXRlX2xpc3QgKnN0YXRlX2xpc3Q7CisKKyAgLyogSWYgbm9uLXplcm8sIHRoZW4gbm8gbG9va2FoZWFkIHNldHMgb24gcmVkdWNlIGFjdGlvbnMgYXJlIG5lZWRlZCB0bworICAgICBkZWNpZGUgd2hhdCB0byBkbyBpbiBzdGF0ZSBTLiAgKi8KICAgY2hhciBjb25zaXN0ZW50OwogCiAgIC8qIElmIHNvbWUgY29uZmxpY3RzIHdlcmUgc29sdmVkIHRoYW5rcyB0byBwcmVjZWRlbmNlL2Fzc29jaWF0aXZpdHksCiAgICAgIGEgaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIHJlc29sdXRpb24uICAqLwogICBjb25zdCBjaGFyICpzb2x2ZWRfY29uZmxpY3RzOworICBjb25zdCBjaGFyICpzb2x2ZWRfY29uZmxpY3RzX3htbDsKIAotICAvKiBJdHMgaXRlbXMuICBNdXN0IGJlIGxhc3QsIHNpbmNlIElURU1TIGNhbiBiZSBhcmJpdHJhcmlseSBsYXJnZS4KLSAgICAgKi8KKyAgLyogSXRzIGl0ZW1zLiAgTXVzdCBiZSBsYXN0LCBzaW5jZSBJVEVNUyBjYW4gYmUgYXJiaXRyYXJpbHkgbGFyZ2UuICBTb3J0ZWQKKyAgICAgYXNjZW5kaW5nbHkgb24gaXRlbSBpbmRleCBpbiBSSVRFTSwgd2hpY2ggaXMgc29ydGVkIG9uIHJ1bGUgbnVtYmVyLiAgKi8KICAgc2l6ZV90IG5pdGVtczsKICAgaXRlbV9udW1iZXIgaXRlbXNbMV07CiB9OwpAQCAtMjIyLDYgKzIyOSw3IEBACiAvKiBDcmVhdGUgYSBuZXcgc3RhdGUgd2l0aCBBQ0NFU1NJTkdfU1lNQk9MIGZvciB0aG9zZSBpdGVtcy4gICovCiBzdGF0ZSAqc3RhdGVfbmV3IChzeW1ib2xfbnVtYmVyIGFjY2Vzc2luZ19zeW1ib2wsCiAJCSAgc2l6ZV90IGNvcmVfc2l6ZSwgaXRlbV9udW1iZXIgKmNvcmUpOworc3RhdGUgKnN0YXRlX25ld19pc29jb3JlIChzdGF0ZSBjb25zdCAqcyk7CiAKIC8qIFNldCB0aGUgdHJhbnNpdGlvbnMgb2YgU1RBVEUuICAqLwogdm9pZCBzdGF0ZV90cmFuc2l0aW9uc19zZXQgKHN0YXRlICpzLCBpbnQgbnVtLCBzdGF0ZSAqKnRyYW5zKTsKQEAgLTIzNCw5ICsyNDIsMTEgQEAKIC8qIFNldCB0aGUgZXJycyBvZiBTVEFURS4gICovCiB2b2lkIHN0YXRlX2VycnNfc2V0IChzdGF0ZSAqcywgaW50IG51bSwgc3ltYm9sICoqZXJyb3JzKTsKIAotLyogUHJpbnQgb24gT1VUIGFsbCB0aGUgbG9vay1haGVhZCB0b2tlbnMgc3VjaCB0aGF0IHRoaXMgU1RBVEUgd2FudHMgdG8KKy8qIFByaW50IG9uIE9VVCBhbGwgdGhlIGxvb2thaGVhZCB0b2tlbnMgc3VjaCB0aGF0IHRoaXMgU1RBVEUgd2FudHMgdG8KICAgIHJlZHVjZSBSLiAgKi8KLXZvaWQgc3RhdGVfcnVsZV9sb29rX2FoZWFkX3Rva2Vuc19wcmludCAoc3RhdGUgKnMsIHJ1bGUgKnIsIEZJTEUgKm91dCk7Cit2b2lkIHN0YXRlX3J1bGVfbG9va2FoZWFkX3Rva2Vuc19wcmludCAoc3RhdGUgKnMsIHJ1bGUgKnIsIEZJTEUgKm91dCk7Cit2b2lkIHN0YXRlX3J1bGVfbG9va2FoZWFkX3Rva2Vuc19wcmludF94bWwgKHN0YXRlICpzLCBydWxlICpyLAorCQkJCQkgICAgRklMRSAqb3V0LCBpbnQgbGV2ZWwpOwogCiAvKiBDcmVhdGUvZGVzdHJveSB0aGUgc3RhdGVzIGhhc2ggdGFibGUuICAqLwogdm9pZCBzdGF0ZV9oYXNoX25ldyAodm9pZCk7CkBAIC0yNDksOSArMjU5LDE2IEBACiAvKiBJbnNlcnQgU1RBVEUgaW4gdGhlIHN0YXRlIGhhc2ggdGFibGUuICAqLwogdm9pZCBzdGF0ZV9oYXNoX2luc2VydCAoc3RhdGUgKnMpOwogCisvKiBSZW1vdmUgdW5yZWFjaGFibGUgc3RhdGVzLCByZW51bWJlciByZW1haW5pbmcgc3RhdGVzLCB1cGRhdGUgTlNUQVRFUywgYW5kCisgICB3cml0ZSB0byBPTERfVE9fTkVXIGEgbWFwcGluZyBvZiBvbGQgc3RhdGUgbnVtYmVycyB0byBuZXcgc3RhdGUgbnVtYmVycyBzdWNoCisgICB0aGF0IHRoZSBvbGQgdmFsdWUgb2YgTlNUQVRFUyBpcyB3cml0dGVuIGFzIHRoZSBuZXcgc3RhdGUgbnVtYmVyIGZvciByZW1vdmVkCisgICBzdGF0ZXMuICBUaGUgc2l6ZSBvZiBPTERfVE9fTkVXIG11c3QgYmUgdGhlIG9sZCB2YWx1ZSBvZiBOU1RBVEVTLiAgKi8KK3ZvaWQgc3RhdGVfcmVtb3ZlX3VucmVhY2hhYmxlX3N0YXRlcyAoc3RhdGVfbnVtYmVyIG9sZF90b19uZXdbXSk7CisKIC8qIEFsbCB0aGUgc3RhdGVzLCBpbmRleGVkIGJ5IHRoZSBzdGF0ZSBudW1iZXIuICAqLwogZXh0ZXJuIHN0YXRlICoqc3RhdGVzOwogCiAvKiBGcmVlIGFsbCB0aGUgc3RhdGVzLiAgKi8KIHZvaWQgc3RhdGVzX2ZyZWUgKHZvaWQpOworCiAjZW5kaWYgLyogIVNUQVRFX0hfICovCmRpZmYgLS1naXQgYS9zcmMvc3ltbGlzdC5jIGIvc3JjL3N5bWxpc3QuYwppbmRleCA3MGRiODJmLi42OWFjOGExIDEwMDY0NAotLS0gYS9zcmMvc3ltbGlzdC5jCisrKyBiL3NyYy9zeW1saXN0LmMKQEAgLTEsMjMgKzEsMjIgQEAKIC8qIExpc3RzIG9mIHN5bWJvbHMgZm9yIEJpc29uCiAKLSAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNS0yMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLgogCiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KIAotICAgQmlzb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCi0gICBCaXNvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggQmlzb247IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogI2luY2x1ZGUgPGNvbmZpZy5oPgogI2luY2x1ZGUgInN5c3RlbS5oIgpAQCAtMzEsNjYgKzMwLDEzMCBAQAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3ltYm9sX2xpc3QgKgotc3ltYm9sX2xpc3RfbmV3IChzeW1ib2wgKnN5bSwgbG9jYXRpb24gbG9jKQorc3ltYm9sX2xpc3Rfc3ltX25ldyAoc3ltYm9sICpzeW0sIGxvY2F0aW9uIGxvYykKIHsKICAgc3ltYm9sX2xpc3QgKnJlcyA9IHhtYWxsb2MgKHNpemVvZiAqcmVzKTsKIAotICByZXMtPnN5bSA9IHN5bTsKLSAgcmVzLT5sb2NhdGlvbiA9IGxvYzsKKyAgcmVzLT5jb250ZW50X3R5cGUgPSBTWU1MSVNUX1NZTUJPTDsKKyAgcmVzLT5jb250ZW50LnN5bSA9IHN5bTsKKyAgcmVzLT5sb2NhdGlvbiA9IHJlcy0+c3ltX2xvYyA9IGxvYzsKIAogICByZXMtPm1pZHJ1bGUgPSBOVUxMOworICByZXMtPm1pZHJ1bGVfcGFyZW50X3J1bGUgPSBOVUxMOworICByZXMtPm1pZHJ1bGVfcGFyZW50X3Joc19pbmRleCA9IDA7CiAKLSAgcmVzLT5hY3Rpb24gPSBOVUxMOwotICByZXMtPnVzZWQgPSBmYWxzZTsKKyAgY29kZV9wcm9wc19ub25lX2luaXQgKCZyZXMtPmFjdGlvbl9wcm9wcyk7CiAKICAgcmVzLT5ydWxlcHJlYyA9IE5VTEw7CiAgIHJlcy0+ZHByZWMgPSAwOwogICByZXMtPm1lcmdlciA9IDA7CiAKKyAgcmVzLT5uYW1lZF9yZWYgPSBOVUxMOworCiAgIHJlcy0+bmV4dCA9IE5VTEw7CiAKICAgcmV0dXJuIHJlczsKIH0KIAogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUHJpbnQgdGhpcyBsaXN0LiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBDcmVhdGUgYSBsaXN0IGNvbnRhaW5pbmcgVFlQRV9OQU1FIGF0IExPQy4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N5bWJvbF9saXN0ICoKK3N5bWJvbF9saXN0X3R5cGVfbmV3ICh1bmlxc3RyIHR5cGVfbmFtZSwgbG9jYXRpb24gbG9jKQoreworICBzeW1ib2xfbGlzdCAqcmVzID0geG1hbGxvYyAoc2l6ZW9mICpyZXMpOworCisgIHJlcy0+Y29udGVudF90eXBlID0gU1lNTElTVF9UWVBFOworICByZXMtPmNvbnRlbnQudHlwZV9uYW1lID0gdHlwZV9uYW1lOworICByZXMtPmxvY2F0aW9uID0gcmVzLT5zeW1fbG9jID0gbG9jOworICByZXMtPm5hbWVkX3JlZiA9IE5VTEw7CisgIHJlcy0+bmV4dCA9IE5VTEw7CisKKyAgcmV0dXJuIHJlczsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IENyZWF0ZSBhIGxpc3QgY29udGFpbmluZyBhIDwqPiBhdCBMT0MuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N5bWJvbF9saXN0ICoKK3N5bWJvbF9saXN0X2RlZmF1bHRfdGFnZ2VkX25ldyAobG9jYXRpb24gbG9jKQoreworICBzeW1ib2xfbGlzdCAqcmVzID0geG1hbGxvYyAoc2l6ZW9mICpyZXMpOworCisgIHJlcy0+Y29udGVudF90eXBlID0gU1lNTElTVF9ERUZBVUxUX1RBR0dFRDsKKyAgcmVzLT5sb2NhdGlvbiA9IHJlcy0+c3ltX2xvYyA9IGxvYzsKKyAgcmVzLT5uYW1lZF9yZWYgPSBOVUxMOworICByZXMtPm5leHQgPSBOVUxMOworCisgIHJldHVybiByZXM7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IENyZWF0ZSBhIGxpc3QgY29udGFpbmluZyBhIDw+IGF0IExPQy4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzeW1ib2xfbGlzdCAqCitzeW1ib2xfbGlzdF9kZWZhdWx0X3RhZ2xlc3NfbmV3IChsb2NhdGlvbiBsb2MpCit7CisgIHN5bWJvbF9saXN0ICpyZXMgPSB4bWFsbG9jIChzaXplb2YgKnJlcyk7CisKKyAgcmVzLT5jb250ZW50X3R5cGUgPSBTWU1MSVNUX0RFRkFVTFRfVEFHTEVTUzsKKyAgcmVzLT5sb2NhdGlvbiA9IHJlcy0+c3ltX2xvYyA9IGxvYzsKKyAgcmVzLT5uYW1lZF9yZWYgPSBOVUxMOworICByZXMtPm5leHQgPSBOVUxMOworCisgIHJldHVybiByZXM7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUHJpbnQgdGhpcyBsaXN0LCBmb3Igd2hpY2ggZXZlcnkgY29udGVudF90eXBlIG11c3QgYmUgU1lNTElTVF9TWU1CT0wuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiB2b2lkCi1zeW1ib2xfbGlzdF9wcmludCAoY29uc3Qgc3ltYm9sX2xpc3QgKmwsIEZJTEUgKmYpCitzeW1ib2xfbGlzdF9zeW1zX3ByaW50IChjb25zdCBzeW1ib2xfbGlzdCAqbCwgRklMRSAqZikKIHsKLSAgZm9yICgvKiBOb3RoaW5nLiAqLzsgbCAmJiBsLT5zeW07IGwgPSBsLT5uZXh0KQorICBmb3IgKC8qIE5vdGhpbmcuICovOyBsICYmIGwtPmNvbnRlbnQuc3ltOyBsID0gbC0+bmV4dCkKICAgICB7Ci0gICAgICBzeW1ib2xfcHJpbnQgKGwtPnN5bSwgZik7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsIGwtPnVzZWQgPyAiIHVzZWQiIDogIiB1bnVzZWQiKTsKLSAgICAgIGlmIChsICYmIGwtPnN5bSkKKyAgICAgIHN5bWJvbF9wcmludCAobC0+Y29udGVudC5zeW0sIGYpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCBsLT5hY3Rpb25fcHJvcHMuaXNfdmFsdWVfdXNlZCA/ICIgdXNlZCIgOiAiIHVudXNlZCIpOworICAgICAgaWYgKGwgJiYgbC0+Y29udGVudC5zeW0pCiAJZnByaW50ZiAoZiwgIiwgIik7CiAgICAgfQogfQogCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBQcmVwZW5kIFNZTSBhdCBMT0MgdG8gdGhlIExJU1QuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBQcmVwZW5kIE5PREUgdG8gdGhlIExJU1QuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3ltYm9sX2xpc3QgKgotc3ltYm9sX2xpc3RfcHJlcGVuZCAoc3ltYm9sX2xpc3QgKmxpc3QsIHN5bWJvbCAqc3ltLCBsb2NhdGlvbiBsb2MpCitzeW1ib2xfbGlzdF9wcmVwZW5kIChzeW1ib2xfbGlzdCAqbGlzdCwgc3ltYm9sX2xpc3QgKm5vZGUpCiB7Ci0gIHN5bWJvbF9saXN0ICpyZXMgPSBzeW1ib2xfbGlzdF9uZXcgKHN5bSwgbG9jKTsKLSAgcmVzLT5uZXh0ID0gbGlzdDsKLSAgcmV0dXJuIHJlczsKKyAgbm9kZS0+bmV4dCA9IGxpc3Q7CisgIHJldHVybiBub2RlOwogfQogCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgRnJlZSB0aGUgTElTVCwgYnV0IG5vdCB0aGUgc3ltYm9scyBpdCBjb250YWlucy4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IEZyZWUgdGhlIExJU1QsIGJ1dCBub3QgdGhlIGl0ZW1zIGl0IGNvbnRhaW5zLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogdm9pZAogc3ltYm9sX2xpc3RfZnJlZSAoc3ltYm9sX2xpc3QgKmxpc3QpCiB7Ci0gIExJU1RfRlJFRSAoc3ltYm9sX2xpc3QsIGxpc3QpOworICBzeW1ib2xfbGlzdCAqbm9kZSwgKm5leHQ7CisgIGZvciAobm9kZSA9IGxpc3Q7IG5vZGU7IG5vZGUgPSBuZXh0KQorICAgIHsKKyAgICAgIG5leHQgPSBub2RlLT5uZXh0OworICAgICAgbmFtZWRfcmVmX2ZyZWUgKG5vZGUtPm5hbWVkX3JlZik7CisgICAgICBmcmVlIChub2RlKTsKKyAgICB9CiB9CiAKIApAQCAtOTgsMTkgKzE2MSwyMSBAQAogfCBSZXR1cm4gaXRzIGxlbmd0aC4gIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXVuc2lnbmVkIGludAotc3ltYm9sX2xpc3RfbGVuZ3RoIChjb25zdCBzeW1ib2xfbGlzdCAqbCkKK2ludAorc3ltYm9sX2xpc3RfbGVuZ3RoIChzeW1ib2xfbGlzdCBjb25zdCAqbCkKIHsKICAgaW50IHJlcyA9IDA7Ci0gIGZvciAoLyogTm90aGluZy4gKi87IGw7IGwgPSBsLT5uZXh0KQorICBmb3IgKC8qIE5vdGhpbmcuICovOworICAgICAgIGwgJiYgIShsLT5jb250ZW50X3R5cGUgPT0gU1lNTElTVF9TWU1CT0wgJiYgbC0+Y29udGVudC5zeW0gPT0gTlVMTCk7CisgICAgICAgbCA9IGwtPm5leHQpCiAgICAgKytyZXM7CiAgIHJldHVybiByZXM7CiB9CiAKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgR2V0IHN5bWJvbCBOIGluIHN5bWJvbCBsaXN0IEwuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IEdldCBpdGVtIE4gaW4gc3ltYm9sIGxpc3QgTC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzeW1ib2xfbGlzdCAqCiBzeW1ib2xfbGlzdF9uX2dldCAoc3ltYm9sX2xpc3QgKmwsIGludCBuKQpAQCAtMTIzLDcgKzE4OCw4IEBACiAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpCiAgICAgewogICAgICAgbCA9IGwtPm5leHQ7Ci0gICAgICBpZiAobCA9PSBOVUxMIHx8IGwtPnN5bSA9PSBOVUxMKQorICAgICAgaWYgKGwgPT0gTlVMTAorICAgICAgICAgIHx8IChsLT5jb250ZW50X3R5cGUgPT0gU1lNTElTVF9TWU1CT0wgJiYgbC0+Y29udGVudC5zeW0gPT0gTlVMTCkpCiAJcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC0xNDUsMTggKzIxMSw1NSBAQAogICAgICAgY29tcGxhaW5fYXQgKGxvYywgXygiaW52YWxpZCAkIHZhbHVlOiAkJWQiKSwgbik7CiAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gIHJldHVybiBsLT5zeW0tPnR5cGVfbmFtZTsKKyAgYXZlciAobC0+Y29udGVudF90eXBlID09IFNZTUxJU1RfU1lNQk9MKTsKKyAgcmV0dXJuIGwtPmNvbnRlbnQuc3ltLT50eXBlX25hbWU7CiB9CiAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBUaGUgc3ltYm9sIE4gaW4gc3ltYm9sIGxpc3QgTCBpcyBVU0VELiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworYm9vbAorc3ltYm9sX2xpc3RfbnVsbCAoc3ltYm9sX2xpc3QgKm5vZGUpCit7CisgIHJldHVybiAhbm9kZSB8fAorICAgIChub2RlLT5jb250ZW50X3R5cGUgPT0gU1lNTElTVF9TWU1CT0wgJiYgIShub2RlLT5jb250ZW50LnN5bSkpOworfQogCiB2b2lkCi1zeW1ib2xfbGlzdF9uX3VzZWRfc2V0IChzeW1ib2xfbGlzdCAqbCwgaW50IG4sIGJvb2wgdXNlZCkKK3N5bWJvbF9saXN0X2Rlc3RydWN0b3Jfc2V0IChzeW1ib2xfbGlzdCAqbm9kZSwgY29kZV9wcm9wcyBjb25zdCAqZGVzdHJ1Y3RvcikKIHsKLSAgbCA9IHN5bWJvbF9saXN0X25fZ2V0IChsLCBuKTsKLSAgaWYgKGwpCi0gICAgbC0+dXNlZCA9IHVzZWQ7CisgIHN3aXRjaCAobm9kZS0+Y29udGVudF90eXBlKQorICAgIHsKKyAgICAgIGNhc2UgU1lNTElTVF9TWU1CT0w6CisgICAgICAgIHN5bWJvbF9kZXN0cnVjdG9yX3NldCAobm9kZS0+Y29udGVudC5zeW0sIGRlc3RydWN0b3IpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU1lNTElTVF9UWVBFOgorICAgICAgICBzZW1hbnRpY190eXBlX2Rlc3RydWN0b3Jfc2V0ICgKKyAgICAgICAgICBzZW1hbnRpY190eXBlX2dldCAobm9kZS0+Y29udGVudC50eXBlX25hbWUpLCBkZXN0cnVjdG9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNZTUxJU1RfREVGQVVMVF9UQUdHRUQ6CisgICAgICAgIGRlZmF1bHRfdGFnZ2VkX2Rlc3RydWN0b3Jfc2V0IChkZXN0cnVjdG9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNZTUxJU1RfREVGQVVMVF9UQUdMRVNTOgorICAgICAgICBkZWZhdWx0X3RhZ2xlc3NfZGVzdHJ1Y3Rvcl9zZXQgKGRlc3RydWN0b3IpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQKK3N5bWJvbF9saXN0X3ByaW50ZXJfc2V0IChzeW1ib2xfbGlzdCAqbm9kZSwgY29kZV9wcm9wcyBjb25zdCAqcHJpbnRlcikKK3sKKyAgc3dpdGNoIChub2RlLT5jb250ZW50X3R5cGUpCisgICAgeworICAgICAgY2FzZSBTWU1MSVNUX1NZTUJPTDoKKyAgICAgICAgc3ltYm9sX3ByaW50ZXJfc2V0IChub2RlLT5jb250ZW50LnN5bSwgcHJpbnRlcik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTWU1MSVNUX1RZUEU6CisgICAgICAgIHNlbWFudGljX3R5cGVfcHJpbnRlcl9zZXQgKAorICAgICAgICAgIHNlbWFudGljX3R5cGVfZ2V0IChub2RlLT5jb250ZW50LnR5cGVfbmFtZSksIHByaW50ZXIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU1lNTElTVF9ERUZBVUxUX1RBR0dFRDoKKyAgICAgICAgZGVmYXVsdF90YWdnZWRfcHJpbnRlcl9zZXQgKHByaW50ZXIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU1lNTElTVF9ERUZBVUxUX1RBR0xFU1M6CisgICAgICAgIGRlZmF1bHRfdGFnbGVzc19wcmludGVyX3NldCAocHJpbnRlcik7CisgICAgICAgIGJyZWFrOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL3NyYy9zeW1saXN0LmggYi9zcmMvc3ltbGlzdC5oCmluZGV4IDA0MjNkMDEuLjYzNTc3ZjcgMTAwNjQ0Ci0tLSBhL3NyYy9zeW1saXN0LmgKKysrIGIvc3JjL3N5bWxpc3QuaApAQCAtMSw4MyArMSwxMjkgQEAKIC8qIExpc3RzIG9mIHN5bWJvbHMgZm9yIEJpc29uCiAKLSAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNS0yMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLgogCiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KIAotICAgQmlzb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCi0gICBCaXNvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggQmlzb247IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogI2lmbmRlZiBTWU1MSVNUX0hfCiAjIGRlZmluZSBTWU1MSVNUX0hfCiAKICMgaW5jbHVkZSAibG9jYXRpb24uaCIKKyMgaW5jbHVkZSAic2Nhbi1jb2RlLmgiCiAjIGluY2x1ZGUgInN5bXRhYi5oIgorIyBpbmNsdWRlICJuYW1lZC1yZWYuaCIKIAogLyogQSBsaXN0IG9mIHN5bWJvbHMsIHVzZWQgZHVyaW5nIHRoZSBwYXJzaW5nIHRvIHN0b3JlIHRoZSBydWxlcy4gICovCiB0eXBlZGVmIHN0cnVjdCBzeW1ib2xfbGlzdAogewotICAvKiBUaGUgc3ltYm9sLiAgKi8KLSAgc3ltYm9sICpzeW07CisgIC8qKgorICAgKiBXaGV0aGVyIHRoaXMgbm9kZSBjb250YWlucyBhIHN5bWJvbCwgYSBzZW1hbnRpYyB0eXBlLCBhIFxjIDwqPiwgb3IgYQorICAgKiBcYyA8Pi4KKyAgICovCisgIGVudW0geworICAgIFNZTUxJU1RfU1lNQk9MLCBTWU1MSVNUX1RZUEUsCisgICAgU1lNTElTVF9ERUZBVUxUX1RBR0dFRCwgU1lNTElTVF9ERUZBVUxUX1RBR0xFU1MKKyAgfSBjb250ZW50X3R5cGU7CisgIHVuaW9uIHsKKyAgICAvKioKKyAgICAgKiBUaGUgc3ltYm9sIG9yIFxjIE5VTEwgaWZmCisgICAgICogPHR0PnN5bWJvbF9saXN0Ojpjb250ZW50X3R5cGUgPSBTWU1MSVNUX1NZTUJPTDwvdHQ+LgorICAgICAqLworICAgIHN5bWJvbCAqc3ltOworICAgIC8qKgorICAgICAqIFRoZSBzZW1hbnRpYyB0eXBlIGlmZiA8dHQ+c3ltYm9sX2xpc3Q6OmNvbnRlbnRfdHlwZSA9IFNZTUxJU1RfVFlQRTwvdHQ+LgorICAgICAqLworICAgIHVuaXFzdHIgdHlwZV9uYW1lOworICB9IGNvbnRlbnQ7CiAgIGxvY2F0aW9uIGxvY2F0aW9uOwogCi0gIC8qIElmIHRoaXMgc3ltYm9sIGlzIHRoZSBnZW5lcmF0ZWQgbGhzIGZvciBhIG1pZC1ydWxlLCBhIHBvaW50ZXIgdG8KLSAgICAgdGhhdCBtaWQtcnVsZS4gICovCisgIC8qIFByb3BlciBsb2NhdGlvbiBvZiB0aGUgc3ltYm9sLCBub3QgYWxsIHRoZSBydWxlICovCisgIGxvY2F0aW9uIHN5bV9sb2M7CisKKyAgLyogSWYgdGhpcyBzeW1ib2wgaXMgdGhlIGdlbmVyYXRlZCBsaHMgZm9yIGEgbWlkcnVsZSBidXQgdGhpcyBpcyB0aGUgcnVsZSBpbgorICAgICB3aG9zZSByaHMgaXQgYXBwZWFycywgTUlEUlVMRSA9IGEgcG9pbnRlciB0byB0aGF0IG1pZHJ1bGUuICAqLwogICBzdHJ1Y3Qgc3ltYm9sX2xpc3QgKm1pZHJ1bGU7CiAKLSAgLyogVGhlIGFjdGlvbiBpcyBhdHRhY2hlZCB0byB0aGUgTEhTIG9mIGEgcnVsZS4gKi8KLSAgY29uc3QgY2hhciAqYWN0aW9uOwotICBsb2NhdGlvbiBhY3Rpb25fbG9jYXRpb247CisgIC8qIElmIHRoaXMgc3ltYm9sIGlzIHRoZSBnZW5lcmF0ZWQgbGhzIGZvciBhIG1pZHJ1bGUgYW5kIHRoaXMgaXMgdGhhdAorICAgICBtaWRydWxlLCBNSURSVUxFX1BBUkVOVF9SVUxFID0gYSBwb2ludGVyIHRvIHRoZSBydWxlIGluIHdob3NlIHJocyBpdAorICAgICBhcHBlYXJzLCBhbmQgTUlEUlVMRV9QQVJFTlRfUkhTX0lOREVYID0gaXRzIHJocyBpbmRleCAoMS1vcmlnaW4pIGluIHRoZQorICAgICBwYXJlbnQgcnVsZS4gICovCisgIHN0cnVjdCBzeW1ib2xfbGlzdCAqbWlkcnVsZV9wYXJlbnRfcnVsZTsKKyAgaW50IG1pZHJ1bGVfcGFyZW50X3Joc19pbmRleDsKIAotICAvKiBXaGV0aGVyIHRoaXMgc3ltYm9sJ3MgdmFsdWUgaXMgdXNlZCBpbiB0aGUgY3VycmVudCBhY3Rpb24uICovCi0gIGJvb2wgdXNlZDsKKyAgLyogVGhlIGFjdGlvbiBpcyBhdHRhY2hlZCB0byB0aGUgTEhTIG9mIGEgcnVsZSwgYnV0IGFjdGlvbiBwcm9wZXJ0aWVzIGZvcgorICAgKiBlYWNoIFJIUyBhcmUgYWxzbyBzdG9yZWQgaGVyZS4gICovCisgIGNvZGVfcHJvcHMgYWN0aW9uX3Byb3BzOwogCiAgIC8qIFByZWNlZGVuY2UvYXNzb2NpYXRpdml0eS4gICovCiAgIHN5bWJvbCAqcnVsZXByZWM7CiAgIGludCBkcHJlYzsKICAgaW50IG1lcmdlcjsKKyAgbG9jYXRpb24gbWVyZ2VyX2RlY2xhcmF0aW9uX2xvY2F0aW9uOworCisgIC8qIE5hbWVkIHJlZmVyZW5jZS4gKi8KKyAgbmFtZWRfcmVmICpuYW1lZF9yZWY7CiAKICAgLyogVGhlIGxpc3QuICAqLwogICBzdHJ1Y3Qgc3ltYm9sX2xpc3QgKm5leHQ7CiB9IHN5bWJvbF9saXN0OwogCiAKLS8qIENyZWF0ZSBhIGxpc3QgY29udGFpbmluZyBTWU0gYXQgTE9DLiAgKi8KLXN5bWJvbF9saXN0ICpzeW1ib2xfbGlzdF9uZXcgKHN5bWJvbCAqc3ltLCBsb2NhdGlvbiBsb2MpOworLyoqIENyZWF0ZSBhIGxpc3QgY29udGFpbmluZyBcYyBzeW0gYXQgXGMgbG9jLiAgKi8KK3N5bWJvbF9saXN0ICpzeW1ib2xfbGlzdF9zeW1fbmV3IChzeW1ib2wgKnN5bSwgbG9jYXRpb24gbG9jKTsKIAotLyogUHJpbnQgaXQuICAqLwotdm9pZCBzeW1ib2xfbGlzdF9wcmludCAoY29uc3Qgc3ltYm9sX2xpc3QgKmwsIEZJTEUgKmYpOworLyoqIENyZWF0ZSBhIGxpc3QgY29udGFpbmluZyBcYyB0eXBlX25hbWUgYXQgXGMgbG9jLiAgKi8KK3N5bWJvbF9saXN0ICpzeW1ib2xfbGlzdF90eXBlX25ldyAodW5pcXN0ciB0eXBlX25hbWUsIGxvY2F0aW9uIGxvYyk7CiAKLS8qIFByZXBlbmQgU1lNIGF0IExPQyB0byB0aGUgTElTVC4gICovCi1zeW1ib2xfbGlzdCAqc3ltYm9sX2xpc3RfcHJlcGVuZCAoc3ltYm9sX2xpc3QgKmwsCi0JCQkJICBzeW1ib2wgKnN5bSwKLQkJCQkgIGxvY2F0aW9uIGxvYyk7CisvKiogQ3JlYXRlIGEgbGlzdCBjb250YWluaW5nIGEgXGMgPCo+IGF0IFxjIGxvYy4gICovCitzeW1ib2xfbGlzdCAqc3ltYm9sX2xpc3RfZGVmYXVsdF90YWdnZWRfbmV3IChsb2NhdGlvbiBsb2MpOworLyoqIENyZWF0ZSBhIGxpc3QgY29udGFpbmluZyBhIFxjIDw+IGF0IFxjIGxvYy4gICovCitzeW1ib2xfbGlzdCAqc3ltYm9sX2xpc3RfZGVmYXVsdF90YWdsZXNzX25ldyAobG9jYXRpb24gbG9jKTsKIAotLyogRnJlZSB0aGUgTElTVCwgYnV0IG5vdCB0aGUgc3ltYm9scyBpdCBjb250YWlucy4gICovCi12b2lkIHN5bWJvbF9saXN0X2ZyZWUgKHN5bWJvbF9saXN0ICpsKTsKKy8qKiBQcmludCB0aGlzIGxpc3QuCiAKLS8qIFJldHVybiBpdHMgbGVuZ3RoLiAqLwotdW5zaWduZWQgaW50IHN5bWJvbF9saXN0X2xlbmd0aCAoY29uc3Qgc3ltYm9sX2xpc3QgKmwpOworICBccHJlIEZvciBldmVyeSBub2RlIFxjIG4gaW4gdGhlIGxpc3QsIDx0dD5uLT5jb250ZW50X3R5cGUgPQorICBTWU1MSVNUX1NZTUJPTDwvdHQ+LiAgKi8KK3ZvaWQgc3ltYm9sX2xpc3Rfc3ltc19wcmludCAoY29uc3Qgc3ltYm9sX2xpc3QgKmwsIEZJTEUgKmYpOwogCi0vKiBHZXQgc3ltYm9sIE4gaW4gc3ltYm9sIGxpc3QgTC4gICovCisvKiogUHJlcGVuZCBcYyBub2RlIHRvIFxjIGxpc3QuICAqLworc3ltYm9sX2xpc3QgKnN5bWJvbF9saXN0X3ByZXBlbmQgKHN5bWJvbF9saXN0ICpsaXN0LCBzeW1ib2xfbGlzdCAqbm9kZSk7CisKKy8qKiBGcmVlIFxjIGxpc3QsIGJ1dCBub3QgdGhlIGl0ZW1zIGl0IGNvbnRhaW5zLiAgKi8KK3ZvaWQgc3ltYm9sX2xpc3RfZnJlZSAoc3ltYm9sX2xpc3QgKmxpc3QpOworCisvKiogUmV0dXJuIHRoZSBsZW5ndGggb2YgXGMgbC4gKi8KK2ludCBzeW1ib2xfbGlzdF9sZW5ndGggKHN5bWJvbF9saXN0IGNvbnN0ICpsKTsKKworLyoqIEdldCBpdGVtIFxjIG4gaW4gc3ltYm9sIGxpc3QgXGMgbC4gICovCiBzeW1ib2xfbGlzdCAqc3ltYm9sX2xpc3Rfbl9nZXQgKHN5bWJvbF9saXN0ICpsLCBpbnQgbik7CiAKIC8qIEdldCB0aGUgZGF0YSB0eXBlIChhbHRlcm5hdGl2ZSBpbiB0aGUgdW5pb24pIG9mIHRoZSB2YWx1ZSBmb3IKICAgIHN5bWJvbCBOIGluIHJ1bGUgUlVMRS4gICovCiB1bmlxc3RyIHN5bWJvbF9saXN0X25fdHlwZV9uYW1lX2dldCAoc3ltYm9sX2xpc3QgKmwsIGxvY2F0aW9uIGxvYywgaW50IG4pOwogCi0vKiBUaGUgc3ltYm9sIE4gaW4gc3ltYm9sIGxpc3QgTCBpcyBVU0VELiAgKi8KLXZvaWQgc3ltYm9sX2xpc3Rfbl91c2VkX3NldCAoc3ltYm9sX2xpc3QgKmwsIGludCBuLCBib29sIHVzZWQpOworLyogQ2hlY2sgd2hldGhlciB0aGUgbm9kZSBpcyBhIGJvcmRlciBlbGVtZW50IG9mIGEgcnVsZS4gKi8KK2Jvb2wgc3ltYm9sX2xpc3RfbnVsbCAoc3ltYm9sX2xpc3QgKm5vZGUpOworCisvKiogU2V0IHRoZSBcYyBcJWRlc3RydWN0b3IgZm9yIFxjIG5vZGUgYXMgXGMgY29kZSBhdCBcYyBsb2MuICAqLwordm9pZCBzeW1ib2xfbGlzdF9kZXN0cnVjdG9yX3NldCAoc3ltYm9sX2xpc3QgKm5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX3Byb3BzIGNvbnN0ICpkZXN0cnVjdG9yKTsKKworLyoqIFNldCB0aGUgXGMgXCVwcmludGVyIGZvciBcYyBub2RlIGFzIFxjIGNvZGUgYXQgXGMgbG9jLiAgKi8KK3ZvaWQgc3ltYm9sX2xpc3RfcHJpbnRlcl9zZXQgKHN5bWJvbF9saXN0ICpub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9wcm9wcyBjb25zdCAqcHJpbnRlcik7CiAKICNlbmRpZiAvKiAhU1lNTElTVF9IXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL3N5bXRhYi5jIGIvc3JjL3N5bXRhYi5jCmluZGV4IGVmNTljNmUuLjU2Y2ZlNTEgMTAwNjQ0Ci0tLSBhL3NyYy9zeW10YWIuYworKysgYi9zcmMvc3ltdGFiLmMKQEAgLTEsMzUgKzEsMzkgQEAKIC8qIFN5bWJvbCB0YWJsZSBtYW5hZ2VyIGZvciBCaXNvbi4KIAotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUKLSAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMjAwMC0yMDAyLCAyMDA0LTIwMTIgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLgogCiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KIAotICAgQmlzb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCi0gICBCaXNvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggQmlzb247IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogI2luY2x1ZGUgPGNvbmZpZy5oPgogI2luY2x1ZGUgInN5c3RlbS5oIgogCiAjaW5jbHVkZSA8aGFzaC5oPgotI2luY2x1ZGUgPHF1b3RlYXJnLmg+CiAKICNpbmNsdWRlICJjb21wbGFpbi5oIgogI2luY2x1ZGUgImdyYW0uaCIKICNpbmNsdWRlICJzeW10YWIuaCIKIAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBTeW1ib2xzIHNvcnRlZCBieSB0YWcuICBBbGxvY2F0ZWQgYnkgdGhlIGZpcnN0IGludm9jYXRpb24gb2YgICAgICAgfAorfCBzeW1ib2xzX2RvLCBhZnRlciB3aGljaCBubyBtb3JlIHN5bWJvbHMgc2hvdWxkIGJlIGNyZWF0ZWQuICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3ltYm9sICoqc3ltYm9sc19zb3J0ZWQgPSBOVUxMOworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgRGlzdGluZ3Vpc2hlZCBzeW1ib2xzLiAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC00MSw2ICs0NSwxNSBAQAogc3ltYm9sICpzdGFydHN5bWJvbCA9IE5VTEw7CiBsb2NhdGlvbiBzdGFydHN5bWJvbF9sb2NhdGlvbjsKIAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IERlZmF1bHQgJWRlc3RydWN0b3IncyBhbmQgJXByaW50ZXIncy4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgY29kZV9wcm9wcyBkZWZhdWx0X3RhZ2dlZF9kZXN0cnVjdG9yID0gQ09ERV9QUk9QU19OT05FX0lOSVQ7CitzdGF0aWMgY29kZV9wcm9wcyBkZWZhdWx0X3RhZ2xlc3NfZGVzdHJ1Y3RvciA9IENPREVfUFJPUFNfTk9ORV9JTklUOworc3RhdGljIGNvZGVfcHJvcHMgZGVmYXVsdF90YWdnZWRfcHJpbnRlciA9IENPREVfUFJPUFNfTk9ORV9JTklUOworc3RhdGljIGNvZGVfcHJvcHMgZGVmYXVsdF90YWdsZXNzX3ByaW50ZXIgPSBDT0RFX1BST1BTX05PTkVfSU5JVDsKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IENyZWF0ZSBhIG5ldyBzeW1ib2wsIG5hbWVkIFRBRy4gIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtNTEsMTIgKzY0LDE5IEBACiAgIHN5bWJvbCAqcmVzID0geG1hbGxvYyAoc2l6ZW9mICpyZXMpOwogCiAgIHVuaXFzdHJfYXNzZXJ0ICh0YWcpOworCisgIC8qIElmIHRoZSB0YWcgaXMgbm90IGEgc3RyaW5nIChzdGFydHMgd2l0aCBhIGRvdWJsZSBxdW90ZSksIGNoZWNrCisgICAgIHRoYXQgaXQgaXMgdmFsaWQgZm9yIFlhY2MuICovCisgIGlmICh0YWdbMF0gIT0gJ1wiJyAmJiB0YWdbMF0gIT0gJ1wnJyAmJiBtYnNjaHIgKHRhZywgJy0nKSkKKyAgICB5YWNjX2F0IChsb2MsIF8oIlBPU0lYIFlhY2MgZm9yYmlkcyBkYXNoZXMgaW4gc3ltYm9sIG5hbWVzOiAlcyIpLAorICAgICAgICAgICAgIHRhZyk7CisKICAgcmVzLT50YWcgPSB0YWc7CiAgIHJlcy0+bG9jYXRpb24gPSBsb2M7CiAKICAgcmVzLT50eXBlX25hbWUgPSBOVUxMOwotICByZXMtPmRlc3RydWN0b3IgPSBOVUxMOwotICByZXMtPnByaW50ZXIgPSBOVUxMOworICBjb2RlX3Byb3BzX25vbmVfaW5pdCAoJnJlcy0+ZGVzdHJ1Y3Rvcik7CisgIGNvZGVfcHJvcHNfbm9uZV9pbml0ICgmcmVzLT5wcmludGVyKTsKIAogICByZXMtPm51bWJlciA9IE5VTUJFUl9VTkRFRklORUQ7CiAgIHJlcy0+cHJlYyA9IDA7CkBAIC03NCw2ICs5NCwyMyBAQAogICByZXR1cm4gcmVzOwogfQogCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IENyZWF0ZSBhIG5ldyBzZW1hbnRpYyB0eXBlLCBuYW1lZCBUQUcuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzZW1hbnRpY190eXBlICoKK3NlbWFudGljX3R5cGVfbmV3ICh1bmlxc3RyIHRhZykKK3sKKyAgc2VtYW50aWNfdHlwZSAqcmVzID0geG1hbGxvYyAoc2l6ZW9mICpyZXMpOworCisgIHVuaXFzdHJfYXNzZXJ0ICh0YWcpOworICByZXMtPnRhZyA9IHRhZzsKKyAgY29kZV9wcm9wc19ub25lX2luaXQgKCZyZXMtPmRlc3RydWN0b3IpOworICBjb2RlX3Byb3BzX25vbmVfaW5pdCAoJnJlcy0+cHJpbnRlcik7CisKKyAgcmV0dXJuIHJlczsKK30KKwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLgogfCBQcmludCBhIHN5bWJvbC4gIHwKQEAgLTgzLDYgKzEyMCwxMCBAQAogICBpZiAocy0+QXR0cikJCQkJCQlcCiAgICAgZnByaW50ZiAoZiwgIiAlcyB7ICVzIH0iLCAjQXR0ciwgcy0+QXR0cikKIAorI2RlZmluZSBTWU1CT0xfQ09ERV9QUklOVChBdHRyKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmIChzLT5BdHRyLmNvZGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmcHJpbnRmIChmLCAiICVzIHsgJXMgfSIsICNBdHRyLCBzLT5BdHRyLmNvZGUpCisKIHZvaWQKIHN5bWJvbF9wcmludCAoc3ltYm9sICpzLCBGSUxFICpmKQogewpAQCAtOTAsMTQgKzEzMSwxNSBAQAogICAgIHsKICAgICAgIGZwcmludGYgKGYsICJcIiVzXCIiLCBzLT50YWcpOwogICAgICAgU1lNQk9MX0FUVFJfUFJJTlQgKHR5cGVfbmFtZSk7Ci0gICAgICBTWU1CT0xfQVRUUl9QUklOVCAoZGVzdHJ1Y3Rvcik7Ci0gICAgICBTWU1CT0xfQVRUUl9QUklOVCAocHJpbnRlcik7CisgICAgICBTWU1CT0xfQ09ERV9QUklOVCAoZGVzdHJ1Y3Rvcik7CisgICAgICBTWU1CT0xfQ09ERV9QUklOVCAocHJpbnRlcik7CiAgICAgfQogICBlbHNlCiAgICAgZnByaW50ZiAoZiwgIjxOVUxMPiIpOwogfQogCiAjdW5kZWYgU1lNQk9MX0FUVFJfUFJJTlQKKyN1bmRlZiBTWU1CT0xfQ09ERV9QUklOVAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgQ29tcGxhaW4gdGhhdCBTJ3MgV0hBVCBpcyByZWRlY2xhcmVkIGF0IFNFQ09ORCwgYW5kIHdhcyBmaXJzdCBzZXQgfApAQCAtMTA1LDEyICsxNDcsMjYgQEAKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgdm9pZAotcmVkZWNsYXJhdGlvbiAoc3ltYm9sKiBzLCBjb25zdCBjaGFyICp3aGF0LCBsb2NhdGlvbiBmaXJzdCwgbG9jYXRpb24gc2Vjb25kKQorc3ltYm9sX3JlZGVjbGFyYXRpb24gKHN5bWJvbCAqcywgY29uc3QgY2hhciAqd2hhdCwgbG9jYXRpb24gZmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gc2Vjb25kKQogewotICBjb21wbGFpbl9hdCAoc2Vjb25kLCBfKCIlcyByZWRlY2xhcmF0aW9uIGZvciAlcyIpLCB3aGF0LCBzLT50YWcpOwotICBjb21wbGFpbl9hdCAoZmlyc3QsIF8oImZpcnN0IGRlY2xhcmF0aW9uIikpOworICB1bnNpZ25lZCBpID0gMDsKKyAgY29tcGxhaW5fYXRfaW5kZW50IChzZWNvbmQsICZpLCBfKCIlcyByZWRlY2xhcmF0aW9uIGZvciAlcyIpLCB3aGF0LCBzLT50YWcpOworICBpICs9IFNVQl9JTkRFTlQ7CisgIGNvbXBsYWluX2F0X2luZGVudCAoZmlyc3QsICZpLCBfKCJwcmV2aW91cyBkZWNsYXJhdGlvbiIpKTsKIH0KIAorc3RhdGljIHZvaWQKK3NlbWFudGljX3R5cGVfcmVkZWNsYXJhdGlvbiAoc2VtYW50aWNfdHlwZSAqcywgY29uc3QgY2hhciAqd2hhdCwgbG9jYXRpb24gZmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uIHNlY29uZCkKK3sKKyAgdW5zaWduZWQgaSA9IDA7CisgIGNvbXBsYWluX2F0X2luZGVudCAoc2Vjb25kLCAmaSwgXygiJXMgcmVkZWNsYXJhdGlvbiBmb3IgPCVzPiIpLCB3aGF0LCBzLT50YWcpOworICBpICs9IFNVQl9JTkRFTlQ7CisgIGNvbXBsYWluX2F0X2luZGVudCAoZmlyc3QsICZpLCBfKCJwcmV2aW91cyBkZWNsYXJhdGlvbiIpKTsKK30KKworCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IFNldCB0aGUgVFlQRV9OQU1FIGFzc29jaWF0ZWQgd2l0aCBTWU0uICBEb2VzIG5vdGhpbmcgaWYgcGFzc2VkIDAgfApAQCAtMTIzLDQ3ICsxNzksMTIzIEBACiAgIGlmICh0eXBlX25hbWUpCiAgICAgewogICAgICAgaWYgKHN5bS0+dHlwZV9uYW1lKQotCXJlZGVjbGFyYXRpb24gKHN5bSwgIiV0eXBlIiwgc3ltLT50eXBlX2xvY2F0aW9uLCBsb2MpOworCXN5bWJvbF9yZWRlY2xhcmF0aW9uIChzeW0sICIldHlwZSIsIHN5bS0+dHlwZV9sb2NhdGlvbiwgbG9jKTsKICAgICAgIHVuaXFzdHJfYXNzZXJ0ICh0eXBlX25hbWUpOwogICAgICAgc3ltLT50eXBlX25hbWUgPSB0eXBlX25hbWU7CiAgICAgICBzeW0tPnR5cGVfbG9jYXRpb24gPSBsb2M7CiAgICAgfQogfQogCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBTZXQgdGhlIERFU1RSVUNUT1IgYXNzb2NpYXRlZCB3aXRoIFNZTS4gIERvIG5vdGhpbmcgaWYgcGFzc2VkIDAuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFNldCB0aGUgREVTVFJVQ1RPUiBhc3NvY2lhdGVkIHdpdGggU1lNLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogdm9pZAotc3ltYm9sX2Rlc3RydWN0b3Jfc2V0IChzeW1ib2wgKnN5bSwgY29uc3QgY2hhciAqZGVzdHJ1Y3RvciwgbG9jYXRpb24gbG9jKQorc3ltYm9sX2Rlc3RydWN0b3Jfc2V0IChzeW1ib2wgKnN5bSwgY29kZV9wcm9wcyBjb25zdCAqZGVzdHJ1Y3RvcikKIHsKLSAgaWYgKGRlc3RydWN0b3IpCi0gICAgewotICAgICAgaWYgKHN5bS0+ZGVzdHJ1Y3RvcikKLQlyZWRlY2xhcmF0aW9uIChzeW0sICIlZGVzdHJ1Y3RvciIsIHN5bS0+ZGVzdHJ1Y3Rvcl9sb2NhdGlvbiwgbG9jKTsKLSAgICAgIHN5bS0+ZGVzdHJ1Y3RvciA9IGRlc3RydWN0b3I7Ci0gICAgICBzeW0tPmRlc3RydWN0b3JfbG9jYXRpb24gPSBsb2M7Ci0gICAgfQorICBpZiAoc3ltLT5kZXN0cnVjdG9yLmNvZGUpCisgICAgc3ltYm9sX3JlZGVjbGFyYXRpb24gKHN5bSwgIiVkZXN0cnVjdG9yIiwgc3ltLT5kZXN0cnVjdG9yLmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0cnVjdG9yLT5sb2NhdGlvbik7CisgIHN5bS0+ZGVzdHJ1Y3RvciA9ICpkZXN0cnVjdG9yOwogfQogCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBTZXQgdGhlIFBSSU5URVIgYXNzb2NpYXRlZCB3aXRoIFNZTS4gIERvIG5vdGhpbmcgaWYgcGFzc2VkIDAuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBTZXQgdGhlIERFU1RSVUNUT1IgYXNzb2NpYXRlZCB3aXRoIFRZUEUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogdm9pZAotc3ltYm9sX3ByaW50ZXJfc2V0IChzeW1ib2wgKnN5bSwgY29uc3QgY2hhciAqcHJpbnRlciwgbG9jYXRpb24gbG9jKQorc2VtYW50aWNfdHlwZV9kZXN0cnVjdG9yX3NldCAoc2VtYW50aWNfdHlwZSAqdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfcHJvcHMgY29uc3QgKmRlc3RydWN0b3IpCiB7Ci0gIGlmIChwcmludGVyKQotICAgIHsKLSAgICAgIGlmIChzeW0tPnByaW50ZXIpCi0JcmVkZWNsYXJhdGlvbiAoc3ltLCAiJXByaW50ZXIiLCBzeW0tPmRlc3RydWN0b3JfbG9jYXRpb24sIGxvYyk7Ci0gICAgICBzeW0tPnByaW50ZXIgPSBwcmludGVyOwotICAgICAgc3ltLT5wcmludGVyX2xvY2F0aW9uID0gbG9jOwotICAgIH0KKyAgaWYgKHR5cGUtPmRlc3RydWN0b3IuY29kZSkKKyAgICBzZW1hbnRpY190eXBlX3JlZGVjbGFyYXRpb24gKHR5cGUsICIlZGVzdHJ1Y3RvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLT5kZXN0cnVjdG9yLmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdHJ1Y3Rvci0+bG9jYXRpb24pOworICB0eXBlLT5kZXN0cnVjdG9yID0gKmRlc3RydWN0b3I7CiB9CiAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBHZXQgdGhlIGNvbXB1dGVkICVkZXN0cnVjdG9yIGZvciBTWU0uICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworY29kZV9wcm9wcyBjb25zdCAqCitzeW1ib2xfZGVzdHJ1Y3Rvcl9nZXQgKHN5bWJvbCBjb25zdCAqc3ltKQoreworICAvKiBQZXItc3ltYm9sICVkZXN0cnVjdG9yLiAgKi8KKyAgaWYgKHN5bS0+ZGVzdHJ1Y3Rvci5jb2RlKQorICAgIHJldHVybiAmc3ltLT5kZXN0cnVjdG9yOworCisgIC8qIFBlci10eXBlICVkZXN0cnVjdG9yLiAgKi8KKyAgaWYgKHN5bS0+dHlwZV9uYW1lKQorICAgIHsKKyAgICAgIGNvZGVfcHJvcHMgY29uc3QgKmRlc3RydWN0b3IgPQorICAgICAgICAmc2VtYW50aWNfdHlwZV9nZXQgKHN5bS0+dHlwZV9uYW1lKS0+ZGVzdHJ1Y3RvcjsKKyAgICAgIGlmIChkZXN0cnVjdG9yLT5jb2RlKQorICAgICAgICByZXR1cm4gZGVzdHJ1Y3RvcjsKKyAgICB9CisKKyAgLyogQXBwbHkgZGVmYXVsdCAlZGVzdHJ1Y3RvcidzIG9ubHkgdG8gdXNlci1kZWZpbmVkIHN5bWJvbHMuICAqLworICBpZiAoc3ltLT50YWdbMF0gPT0gJyQnIHx8IHN5bSA9PSBlcnJ0b2tlbikKKyAgICByZXR1cm4gJmNvZGVfcHJvcHNfbm9uZTsKKworICBpZiAoc3ltLT50eXBlX25hbWUpCisgICAgcmV0dXJuICZkZWZhdWx0X3RhZ2dlZF9kZXN0cnVjdG9yOworICByZXR1cm4gJmRlZmF1bHRfdGFnbGVzc19kZXN0cnVjdG9yOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBTZXQgdGhlIFBSSU5URVIgYXNzb2NpYXRlZCB3aXRoIFNZTS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3ZvaWQKK3N5bWJvbF9wcmludGVyX3NldCAoc3ltYm9sICpzeW0sIGNvZGVfcHJvcHMgY29uc3QgKnByaW50ZXIpCit7CisgIGlmIChzeW0tPnByaW50ZXIuY29kZSkKKyAgICBzeW1ib2xfcmVkZWNsYXJhdGlvbiAoc3ltLCAiJXByaW50ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0tPnByaW50ZXIubG9jYXRpb24sIHByaW50ZXItPmxvY2F0aW9uKTsKKyAgc3ltLT5wcmludGVyID0gKnByaW50ZXI7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBTZXQgdGhlIFBSSU5URVIgYXNzb2NpYXRlZCB3aXRoIFRZUEUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordm9pZAorc2VtYW50aWNfdHlwZV9wcmludGVyX3NldCAoc2VtYW50aWNfdHlwZSAqdHlwZSwgY29kZV9wcm9wcyBjb25zdCAqcHJpbnRlcikKK3sKKyAgaWYgKHR5cGUtPnByaW50ZXIuY29kZSkKKyAgICBzZW1hbnRpY190eXBlX3JlZGVjbGFyYXRpb24gKHR5cGUsICIlcHJpbnRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLT5wcmludGVyLmxvY2F0aW9uLCBwcmludGVyLT5sb2NhdGlvbik7CisgIHR5cGUtPnByaW50ZXIgPSAqcHJpbnRlcjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IEdldCB0aGUgY29tcHV0ZWQgJXByaW50ZXIgZm9yIFNZTS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitjb2RlX3Byb3BzIGNvbnN0ICoKK3N5bWJvbF9wcmludGVyX2dldCAoc3ltYm9sIGNvbnN0ICpzeW0pCit7CisgIC8qIFBlci1zeW1ib2wgJXByaW50ZXIuICAqLworICBpZiAoc3ltLT5wcmludGVyLmNvZGUpCisgICAgcmV0dXJuICZzeW0tPnByaW50ZXI7CisKKyAgLyogUGVyLXR5cGUgJXByaW50ZXIuICAqLworICBpZiAoc3ltLT50eXBlX25hbWUpCisgICAgeworICAgICAgY29kZV9wcm9wcyBjb25zdCAqcHJpbnRlciA9ICZzZW1hbnRpY190eXBlX2dldCAoc3ltLT50eXBlX25hbWUpLT5wcmludGVyOworICAgICAgaWYgKHByaW50ZXItPmNvZGUpCisgICAgICAgIHJldHVybiBwcmludGVyOworICAgIH0KKworICAvKiBBcHBseSB0aGUgZGVmYXVsdCAlcHJpbnRlciBvbmx5IHRvIHVzZXItZGVmaW5lZCBzeW1ib2xzLiAgKi8KKyAgaWYgKHN5bS0+dGFnWzBdID09ICckJyB8fCBzeW0gPT0gZXJydG9rZW4pCisgICAgcmV0dXJuICZjb2RlX3Byb3BzX25vbmU7CisKKyAgaWYgKHN5bS0+dHlwZV9uYW1lKQorICAgIHJldHVybiAmZGVmYXVsdF90YWdnZWRfcHJpbnRlcjsKKyAgcmV0dXJuICZkZWZhdWx0X3RhZ2xlc3NfcHJpbnRlcjsKK30KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgU2V0IHRoZSBQUkVDRURFTkNFIGFzc29jaWF0ZWQgd2l0aCBTWU0uICBEb2VzIG5vdGhpbmcgaWYgaW52b2tlZCB8CkBAIC0xNzYsNyArMzA4LDggQEAKICAgaWYgKGEgIT0gdW5kZWZfYXNzb2MpCiAgICAgewogICAgICAgaWYgKHN5bS0+cHJlYyAhPSAwKQotCXJlZGVjbGFyYXRpb24gKHN5bSwgYXNzb2NfdG9fc3RyaW5nIChhKSwgc3ltLT5wcmVjX2xvY2F0aW9uLCBsb2MpOworCXN5bWJvbF9yZWRlY2xhcmF0aW9uIChzeW0sIGFzc29jX3RvX3N0cmluZyAoYSksIHN5bS0+cHJlY19sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYyk7CiAgICAgICBzeW0tPnByZWMgPSBwcmVjOwogICAgICAgc3ltLT5hc3NvYyA9IGE7CiAgICAgICBzeW0tPnByZWNfbG9jYXRpb24gPSBsb2M7CkBAIC0yMjMsMjEgKzM1NiwyNiBAQAogdm9pZAogc3ltYm9sX3VzZXJfdG9rZW5fbnVtYmVyX3NldCAoc3ltYm9sICpzeW0sIGludCB1c2VyX3Rva2VuX251bWJlciwgbG9jYXRpb24gbG9jKQogewotICBhc3NlcnQgKHN5bS0+Y2xhc3MgPT0gdG9rZW5fc3ltKTsKKyAgaW50ICp1c2VyX3Rva2VuX251bWJlcnA7CiAKLSAgaWYgKHN5bS0+dXNlcl90b2tlbl9udW1iZXIgIT0gVVNFUl9OVU1CRVJfVU5ERUZJTkVECi0gICAgICAmJiBzeW0tPnVzZXJfdG9rZW5fbnVtYmVyICE9IHVzZXJfdG9rZW5fbnVtYmVyKQorICBpZiAoc3ltLT51c2VyX3Rva2VuX251bWJlciAhPSBVU0VSX05VTUJFUl9IQVNfU1RSSU5HX0FMSUFTKQorICAgIHVzZXJfdG9rZW5fbnVtYmVycCA9ICZzeW0tPnVzZXJfdG9rZW5fbnVtYmVyOworICBlbHNlCisgICAgdXNlcl90b2tlbl9udW1iZXJwID0gJnN5bS0+YWxpYXMtPnVzZXJfdG9rZW5fbnVtYmVyOworICBpZiAoKnVzZXJfdG9rZW5fbnVtYmVycCAhPSBVU0VSX05VTUJFUl9VTkRFRklORUQKKyAgICAgICYmICp1c2VyX3Rva2VuX251bWJlcnAgIT0gdXNlcl90b2tlbl9udW1iZXIpCiAgICAgY29tcGxhaW5fYXQgKGxvYywgXygicmVkZWZpbmluZyB1c2VyIHRva2VuIG51bWJlciBvZiAlcyIpLCBzeW0tPnRhZyk7CiAKLSAgc3ltLT51c2VyX3Rva2VuX251bWJlciA9IHVzZXJfdG9rZW5fbnVtYmVyOworICAqdXNlcl90b2tlbl9udW1iZXJwID0gdXNlcl90b2tlbl9udW1iZXI7CiAgIC8qIFVzZXIgZGVmaW5lZCAkZW5kIHRva2VuPyAqLwogICBpZiAodXNlcl90b2tlbl9udW1iZXIgPT0gMCkKICAgICB7CiAgICAgICBlbmR0b2tlbiA9IHN5bTsKLSAgICAgIGVuZHRva2VuLT5udW1iZXIgPSAwOwogICAgICAgLyogSXQgaXMgYWx3YXlzIG1hcHBlZCB0byAwLCBzbyBpdCB3YXMgYWxyZWFkeSBjb3VudGVkIGluCiAJIE5UT0tFTlMuICAqLwotICAgICAgLS1udG9rZW5zOworICAgICAgaWYgKGVuZHRva2VuLT5udW1iZXIgIT0gTlVNQkVSX1VOREVGSU5FRCkKKyAgICAgICAgLS1udG9rZW5zOworICAgICAgZW5kdG9rZW4tPm51bWJlciA9IDA7CiAgICAgfQogfQogCkBAIC0yNzAsMzQgKzQwOCwyNCBAQAogfQogCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBEZWNsYXJlIHRoZSBuZXcgc3ltYm9sIFNZTS4gIE1ha2UgaXQgYW4gYWxpYXMgb2YgU1lNVkFMLCBhbmQgdHlwZSB8Ci18IFNZTVZBTCB3aXRoIFNZTSdzIHR5cGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiB2b2lkCi1zeW1ib2xfbWFrZV9hbGlhcyAoc3ltYm9sICpzeW0sIHN5bWJvbCAqc3ltdmFsLCBsb2NhdGlvbiBsb2MpCitzeW1ib2xfbWFrZV9hbGlhcyAoc3ltYm9sICpzeW0sIHN5bWJvbCAqc3RyLCBsb2NhdGlvbiBsb2MpCiB7Ci0gIGlmIChzeW12YWwtPmFsaWFzKQotICAgIHdhcm5fYXQgKGxvYywgXygic3ltYm9sIGAlcycgdXNlZCBtb3JlIHRoYW4gb25jZSBhcyBhIGxpdGVyYWwgc3RyaW5nIiksCi0JICAgICBzeW12YWwtPnRhZyk7CisgIGlmIChzdHItPmFsaWFzKQorICAgIHdhcm5fYXQgKGxvYywgXygic3ltYm9sICVzIHVzZWQgbW9yZSB0aGFuIG9uY2UgYXMgYSBsaXRlcmFsIHN0cmluZyIpLAorICAgICAgICAgICAgIHN0ci0+dGFnKTsKICAgZWxzZSBpZiAoc3ltLT5hbGlhcykKLSAgICB3YXJuX2F0IChsb2MsIF8oInN5bWJvbCBgJXMnIGdpdmVuIG1vcmUgdGhhbiBvbmUgbGl0ZXJhbCBzdHJpbmciKSwKLQkgICAgIHN5bS0+dGFnKTsKKyAgICB3YXJuX2F0IChsb2MsIF8oInN5bWJvbCAlcyBnaXZlbiBtb3JlIHRoYW4gb25lIGxpdGVyYWwgc3RyaW5nIiksCisgICAgICAgICAgICAgc3ltLT50YWcpOwogICBlbHNlCiAgICAgewotICAgICAgc3ltdmFsLT5jbGFzcyA9IHRva2VuX3N5bTsKLSAgICAgIHN5bXZhbC0+dXNlcl90b2tlbl9udW1iZXIgPSBzeW0tPnVzZXJfdG9rZW5fbnVtYmVyOwotICAgICAgc3ltLT51c2VyX3Rva2VuX251bWJlciA9IFVTRVJfTlVNQkVSX0FMSUFTOwotICAgICAgc3ltdmFsLT5hbGlhcyA9IHN5bTsKLSAgICAgIHN5bS0+YWxpYXMgPSBzeW12YWw7Ci0gICAgICAvKiBzeW0gYW5kIHN5bXZhbCBjb21iaW5lZCBhcmUgb25seSBvbmUgc3ltYm9sLiAgKi8KLSAgICAgIG5zeW1zLS07Ci0gICAgICBudG9rZW5zLS07Ci0gICAgICBhc3NlcnQgKG50b2tlbnMgPT0gc3ltLT5udW1iZXIgfHwgbnRva2VucyA9PSBzeW12YWwtPm51bWJlcik7Ci0gICAgICBzeW0tPm51bWJlciA9IHN5bXZhbC0+bnVtYmVyID0KLQkoc3ltdmFsLT5udW1iZXIgPCBzeW0tPm51bWJlcikgPyBzeW12YWwtPm51bWJlciA6IHN5bS0+bnVtYmVyOwotICAgICAgc3ltYm9sX3R5cGVfc2V0IChzeW12YWwsIHN5bS0+dHlwZV9uYW1lLCBsb2MpOworICAgICAgc3RyLT5jbGFzcyA9IHRva2VuX3N5bTsKKyAgICAgIHN0ci0+dXNlcl90b2tlbl9udW1iZXIgPSBzeW0tPnVzZXJfdG9rZW5fbnVtYmVyOworICAgICAgc3ltLT51c2VyX3Rva2VuX251bWJlciA9IFVTRVJfTlVNQkVSX0hBU19TVFJJTkdfQUxJQVM7CisgICAgICBzdHItPmFsaWFzID0gc3ltOworICAgICAgc3ltLT5hbGlhcyA9IHN0cjsKKyAgICAgIHN0ci0+bnVtYmVyID0gc3ltLT5udW1iZXI7CisgICAgICBzeW1ib2xfdHlwZV9zZXQgKHN0ciwgc3ltLT50eXBlX25hbWUsIGxvYyk7CiAgICAgfQogfQogCkBAIC0zMTAsNDggKzQzOCw0NyBAQAogc3RhdGljIGlubGluZSB2b2lkCiBzeW1ib2xfY2hlY2tfYWxpYXNfY29uc2lzdGVuY3kgKHN5bWJvbCAqdGhpcykKIHsKLSAgc3ltYm9sICphbGlhcyA9IHRoaXM7Ci0gIHN5bWJvbCAqb3JpZyAgPSB0aGlzLT5hbGlhczsKKyAgc3ltYm9sICpzeW0gPSB0aGlzOworICBzeW1ib2wgKnN0ciA9IHRoaXMtPmFsaWFzOwogCi0gIC8qIENoZWNrIG9ubHkgdGhvc2UgdGhhdCBfYXJlXyB0aGUgYWxpYXNlcy4gICovCi0gIGlmICghKHRoaXMtPmFsaWFzICYmIHRoaXMtPnVzZXJfdG9rZW5fbnVtYmVyID09IFVTRVJfTlVNQkVSX0FMSUFTKSkKKyAgLyogQ2hlY2sgb25seSB0aGUgc3ltYm9sIGluIHRoZSBzeW1ib2wtc3RyaW5nIHBhaXIuICAqLworICBpZiAoISh0aGlzLT5hbGlhcworICAgICAgICAmJiB0aGlzLT51c2VyX3Rva2VuX251bWJlciA9PSBVU0VSX05VTUJFUl9IQVNfU1RSSU5HX0FMSUFTKSkKICAgICByZXR1cm47CiAKLSAgaWYgKG9yaWctPnR5cGVfbmFtZSAhPSBhbGlhcy0+dHlwZV9uYW1lKQorICBpZiAoc3RyLT50eXBlX25hbWUgIT0gc3ltLT50eXBlX25hbWUpCiAgICAgewotICAgICAgaWYgKG9yaWctPnR5cGVfbmFtZSkKLQlzeW1ib2xfdHlwZV9zZXQgKGFsaWFzLCBvcmlnLT50eXBlX25hbWUsIG9yaWctPnR5cGVfbG9jYXRpb24pOworICAgICAgaWYgKHN0ci0+dHlwZV9uYW1lKQorCXN5bWJvbF90eXBlX3NldCAoc3ltLCBzdHItPnR5cGVfbmFtZSwgc3RyLT50eXBlX2xvY2F0aW9uKTsKICAgICAgIGVsc2UKLQlzeW1ib2xfdHlwZV9zZXQgKG9yaWcsIGFsaWFzLT50eXBlX25hbWUsIGFsaWFzLT50eXBlX2xvY2F0aW9uKTsKKwlzeW1ib2xfdHlwZV9zZXQgKHN0ciwgc3ltLT50eXBlX25hbWUsIHN5bS0+dHlwZV9sb2NhdGlvbik7CiAgICAgfQogCiAKLSAgaWYgKG9yaWctPmRlc3RydWN0b3IgfHwgYWxpYXMtPmRlc3RydWN0b3IpCisgIGlmIChzdHItPmRlc3RydWN0b3IuY29kZSB8fCBzeW0tPmRlc3RydWN0b3IuY29kZSkKICAgICB7Ci0gICAgICBpZiAob3JpZy0+ZGVzdHJ1Y3RvcikKLQlzeW1ib2xfZGVzdHJ1Y3Rvcl9zZXQgKGFsaWFzLCBvcmlnLT5kZXN0cnVjdG9yLAotCQkJICAgICAgIG9yaWctPmRlc3RydWN0b3JfbG9jYXRpb24pOworICAgICAgaWYgKHN0ci0+ZGVzdHJ1Y3Rvci5jb2RlKQorCXN5bWJvbF9kZXN0cnVjdG9yX3NldCAoc3ltLCAmc3RyLT5kZXN0cnVjdG9yKTsKICAgICAgIGVsc2UKLQlzeW1ib2xfZGVzdHJ1Y3Rvcl9zZXQgKG9yaWcsIGFsaWFzLT5kZXN0cnVjdG9yLAotCQkJICAgICAgIGFsaWFzLT5kZXN0cnVjdG9yX2xvY2F0aW9uKTsKKwlzeW1ib2xfZGVzdHJ1Y3Rvcl9zZXQgKHN0ciwgJnN5bS0+ZGVzdHJ1Y3Rvcik7CiAgICAgfQogCi0gIGlmIChvcmlnLT5wcmludGVyIHx8IGFsaWFzLT5wcmludGVyKQorICBpZiAoc3RyLT5wcmludGVyLmNvZGUgfHwgc3ltLT5wcmludGVyLmNvZGUpCiAgICAgewotICAgICAgaWYgKG9yaWctPnByaW50ZXIpCi0Jc3ltYm9sX3ByaW50ZXJfc2V0IChhbGlhcywgb3JpZy0+cHJpbnRlciwgb3JpZy0+cHJpbnRlcl9sb2NhdGlvbik7CisgICAgICBpZiAoc3RyLT5wcmludGVyLmNvZGUpCisJc3ltYm9sX3ByaW50ZXJfc2V0IChzeW0sICZzdHItPnByaW50ZXIpOwogICAgICAgZWxzZQotCXN5bWJvbF9wcmludGVyX3NldCAob3JpZywgYWxpYXMtPnByaW50ZXIsIGFsaWFzLT5wcmludGVyX2xvY2F0aW9uKTsKKwlzeW1ib2xfcHJpbnRlcl9zZXQgKHN0ciwgJnN5bS0+cHJpbnRlcik7CiAgICAgfQogCi0gIGlmIChhbGlhcy0+cHJlYyB8fCBvcmlnLT5wcmVjKQorICBpZiAoc3ltLT5wcmVjIHx8IHN0ci0+cHJlYykKICAgICB7Ci0gICAgICBpZiAob3JpZy0+cHJlYykKLQlzeW1ib2xfcHJlY2VkZW5jZV9zZXQgKGFsaWFzLCBvcmlnLT5wcmVjLCBvcmlnLT5hc3NvYywKLQkJCSAgICAgICBvcmlnLT5wcmVjX2xvY2F0aW9uKTsKKyAgICAgIGlmIChzdHItPnByZWMpCisJc3ltYm9sX3ByZWNlZGVuY2Vfc2V0IChzeW0sIHN0ci0+cHJlYywgc3RyLT5hc3NvYywKKwkJCSAgICAgICBzdHItPnByZWNfbG9jYXRpb24pOwogICAgICAgZWxzZQotCXN5bWJvbF9wcmVjZWRlbmNlX3NldCAob3JpZywgYWxpYXMtPnByZWMsIGFsaWFzLT5hc3NvYywKLQkJCSAgICAgICBhbGlhcy0+cHJlY19sb2NhdGlvbik7CisJc3ltYm9sX3ByZWNlZGVuY2Vfc2V0IChzdHIsIHN5bS0+cHJlYywgc3ltLT5hc3NvYywKKwkJCSAgICAgICBzeW0tPnByZWNfbG9jYXRpb24pOwogICAgIH0KIH0KIApAQCAtMzcyLDMxICs0OTksMTEgQEAKIHN0YXRpYyBpbmxpbmUgYm9vbAogc3ltYm9sX3BhY2sgKHN5bWJvbCAqdGhpcykKIHsKKyAgYXZlciAodGhpcy0+bnVtYmVyICE9IE5VTUJFUl9VTkRFRklORUQpOwogICBpZiAodGhpcy0+Y2xhc3MgPT0gbnRlcm1fc3ltKQotICAgIHsKLSAgICAgIHRoaXMtPm51bWJlciArPSBudG9rZW5zOwotICAgIH0KLSAgZWxzZSBpZiAodGhpcy0+YWxpYXMpCi0gICAgewotICAgICAgLyogVGhpcyBzeW1ib2wgYW5kIGl0cyBhbGlhcyBhcmUgYSBzaW5nbGUgdG9rZW4gZGVmbi4KLQkgQWxsb2NhdGUgYSB0b2tubywgYW5kIGFzc2lnbiB0byBib3RoIGNoZWNrIGFncmVlbWVudCBvZgotCSBwcmVjIGFuZCBhc3NvYyBmaWVsZHMgYW5kIG1ha2UgYm90aCB0aGUgc2FtZSAqLwotICAgICAgaWYgKHRoaXMtPm51bWJlciA9PSBOVU1CRVJfVU5ERUZJTkVEKQotCXsKLQkgIGlmICh0aGlzID09IGVuZHRva2VuIHx8IHRoaXMtPmFsaWFzID09IGVuZHRva2VuKQotCSAgICB0aGlzLT5udW1iZXIgPSB0aGlzLT5hbGlhcy0+bnVtYmVyID0gMDsKLQkgIGVsc2UKLQkgICAgewotCSAgICAgIGFzc2VydCAodGhpcy0+YWxpYXMtPm51bWJlciAhPSBOVU1CRVJfVU5ERUZJTkVEKTsKLQkgICAgICB0aGlzLT5udW1iZXIgPSB0aGlzLT5hbGlhcy0+bnVtYmVyOwotCSAgICB9Ci0JfQotICAgICAgLyogRG8gbm90IGRvIHByb2Nlc3NpbmcgYmVsb3cgZm9yIFVTRVJfTlVNQkVSX0FMSUFTZXMuICAqLwotICAgICAgaWYgKHRoaXMtPnVzZXJfdG9rZW5fbnVtYmVyID09IFVTRVJfTlVNQkVSX0FMSUFTKQotCXJldHVybiB0cnVlOwotICAgIH0KLSAgZWxzZSAvKiB0aGlzLT5jbGFzcyA9PSB0b2tlbl9zeW0gKi8KLSAgICBhc3NlcnQgKHRoaXMtPm51bWJlciAhPSBOVU1CRVJfVU5ERUZJTkVEKTsKKyAgICB0aGlzLT5udW1iZXIgKz0gbnRva2VuczsKKyAgZWxzZSBpZiAodGhpcy0+dXNlcl90b2tlbl9udW1iZXIgPT0gVVNFUl9OVU1CRVJfSEFTX1NUUklOR19BTElBUykKKyAgICByZXR1cm4gdHJ1ZTsKIAogICBzeW1ib2xzW3RoaXMtPm51bWJlcl0gPSB0aGlzOwogICByZXR1cm4gdHJ1ZTsKQEAgLTQwOSw3ICs1MTYsMjkgQEAKIH0KIAogCitzdGF0aWMgdm9pZAordXNlcl90b2tlbl9udW1iZXJfcmVkZWNsYXJhdGlvbiAoaW50IG51bSwgc3ltYm9sICpmaXJzdCwgc3ltYm9sICpzZWNvbmQpCit7CisgIHVuc2lnbmVkIGkgPSAwOworICAvKiBVc2VyIHRva2VuIG51bWJlcnMgYXJlIG5vdCBhc3NpZ25lZCBkdXJpbmcgdGhlIHBhcnNpbmcsIGJ1dCBpbiBhCisgICAgIHNlY29uZCBzdGVwLCB2aWEgYSB0cmF2ZXJzYWwgb2YgdGhlIHN5bWJvbCB0YWJsZSBzb3J0ZWQgb24gdGFnLgogCisgICAgIEhvd2V2ZXIsIGVycm9yIG1lc3NhZ2VzIG1ha2UgbW9yZSBzZW5zZSBpZiB3ZSBrZWVwIHRoZSBmaXJzdAorICAgICBkZWNsYXJhdGlvbiBmaXJzdC4gICovCisgIGlmIChsb2NhdGlvbl9jbXAgKGZpcnN0LT5sb2NhdGlvbiwgc2Vjb25kLT5sb2NhdGlvbikgPiAwKQorICAgIHsKKyAgICAgIHN5bWJvbCogdG1wID0gZmlyc3Q7CisgICAgICBmaXJzdCA9IHNlY29uZDsKKyAgICAgIHNlY29uZCA9IHRtcDsKKyAgICB9CisgIGNvbXBsYWluX2F0X2luZGVudCAoc2Vjb25kLT5sb2NhdGlvbiwgJmksCisgICAgICAgICAgICAgICAgICAgICAgXygidXNlciB0b2tlbiBudW1iZXIgJWQgcmVkZWNsYXJhdGlvbiBmb3IgJXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICBudW0sIHNlY29uZC0+dGFnKTsKKyAgaSArPSBTVUJfSU5ERU5UOworICBjb21wbGFpbl9hdF9pbmRlbnQgKGZpcnN0LT5sb2NhdGlvbiwgJmksCisgICAgICAgICAgICAgICAgICAgICAgXygicHJldmlvdXMgZGVjbGFyYXRpb24gZm9yICVzIiksCisgICAgICAgICAgICAgICAgICAgICAgZmlyc3QtPnRhZyk7Cit9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IFB1dCBUSElTIGluIFRPS0VOX1RSQU5TTEFUSU9OUyBpZiBpdCBpcyBhIHRva2VuLiAgfApAQCAtNDIwLDE0ICs1NDksMTQgQEAKIHsKICAgLyogTm9uLXRlcm1pbmFsPyAqLwogICBpZiAodGhpcy0+Y2xhc3MgPT0gdG9rZW5fc3ltCi0gICAgICAmJiB0aGlzLT51c2VyX3Rva2VuX251bWJlciAhPSBVU0VSX05VTUJFUl9BTElBUykKKyAgICAgICYmIHRoaXMtPnVzZXJfdG9rZW5fbnVtYmVyICE9IFVTRVJfTlVNQkVSX0hBU19TVFJJTkdfQUxJQVMpCiAgICAgewogICAgICAgLyogQSB0b2tlbiB3aGljaCB0cmFuc2xhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHNldD8gKi8KICAgICAgIGlmICh0b2tlbl90cmFuc2xhdGlvbnNbdGhpcy0+dXNlcl90b2tlbl9udW1iZXJdICE9IHVuZGVmdG9rZW4tPm51bWJlcikKLQljb21wbGFpbl9hdCAodGhpcy0+bG9jYXRpb24sCi0JCSAgICAgXygidG9rZW5zICVzIGFuZCAlcyBib3RoIGFzc2lnbmVkIG51bWJlciAlZCIpLAotCQkgICAgIHN5bWJvbHNbdG9rZW5fdHJhbnNsYXRpb25zW3RoaXMtPnVzZXJfdG9rZW5fbnVtYmVyXV0tPnRhZywKLQkJICAgICB0aGlzLT50YWcsIHRoaXMtPnVzZXJfdG9rZW5fbnVtYmVyKTsKKwl1c2VyX3Rva2VuX251bWJlcl9yZWRlY2xhcmF0aW9uCisgICAgICAgICAgKHRoaXMtPnVzZXJfdG9rZW5fbnVtYmVyLAorICAgICAgICAgICBzeW1ib2xzW3Rva2VuX3RyYW5zbGF0aW9uc1t0aGlzLT51c2VyX3Rva2VuX251bWJlcl1dLAorICAgICAgICAgICB0aGlzKTsKIAogICAgICAgdG9rZW5fdHJhbnNsYXRpb25zW3RoaXMtPnVzZXJfdG9rZW5fbnVtYmVyXSA9IHRoaXMtPm51bWJlcjsKICAgICB9CkBAIC00NDIsMTQgKzU3MSwxNSBAQAogfQogCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgQSBzeW1ib2wgaGFzaCB0YWJsZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBTeW1ib2wgYW5kIHNlbWFudGljIHR5cGUgaGFzaCB0YWJsZXMuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotLyogSW5pdGlhbCBjYXBhY2l0eSBvZiBzeW1ib2xzIGhhc2ggdGFibGUuICAqLworLyogSW5pdGlhbCBjYXBhY2l0eSBvZiBzeW1ib2wgYW5kIHNlbWFudGljIHR5cGUgaGFzaCB0YWJsZS4gICovCiAjZGVmaW5lIEhUX0lOSVRJQUxfQ0FQQUNJVFkgMjU3CiAKIHN0YXRpYyBzdHJ1Y3QgaGFzaF90YWJsZSAqc3ltYm9sX3RhYmxlID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgaGFzaF90YWJsZSAqc2VtYW50aWNfdHlwZV90YWJsZSA9IE5VTEw7CiAKIHN0YXRpYyBpbmxpbmUgYm9vbAogaGFzaF9jb21wYXJlX3N5bWJvbCAoY29uc3Qgc3ltYm9sICptMSwgY29uc3Qgc3ltYm9sICptMikKQEAgLTQ1OCwxMiArNTg4LDI1IEBACiAgIHJldHVybiBVTklRU1RSX0VRIChtMS0+dGFnLCBtMi0+dGFnKTsKIH0KIAorc3RhdGljIGlubGluZSBib29sCitoYXNoX2NvbXBhcmVfc2VtYW50aWNfdHlwZSAoY29uc3Qgc2VtYW50aWNfdHlwZSAqbTEsIGNvbnN0IHNlbWFudGljX3R5cGUgKm0yKQoreworICAvKiBTaW5jZSBuYW1lcyBhcmUgdW5pcXVlLCB3ZSBjYW4gY29tcGFyZSB0aGUgcG9pbnRlcnMgdGhlbXNlbHZlcy4gICovCisgIHJldHVybiBVTklRU1RSX0VRIChtMS0+dGFnLCBtMi0+dGFnKTsKK30KKwogc3RhdGljIGJvb2wKIGhhc2hfc3ltYm9sX2NvbXBhcmF0b3IgKHZvaWQgY29uc3QgKm0xLCB2b2lkIGNvbnN0ICptMikKIHsKICAgcmV0dXJuIGhhc2hfY29tcGFyZV9zeW1ib2wgKG0xLCBtMik7CiB9CiAKK3N0YXRpYyBib29sCitoYXNoX3NlbWFudGljX3R5cGVfY29tcGFyYXRvciAodm9pZCBjb25zdCAqbTEsIHZvaWQgY29uc3QgKm0yKQoreworICByZXR1cm4gaGFzaF9jb21wYXJlX3NlbWFudGljX3R5cGUgKG0xLCBtMik7Cit9CisKIHN0YXRpYyBpbmxpbmUgc2l6ZV90CiBoYXNoX3N5bWJvbCAoY29uc3Qgc3ltYm9sICptLCBzaXplX3QgdGFibGVzaXplKQogewpAQCAtNDcxLDEyICs2MTQsMjQgQEAKICAgcmV0dXJuICgodWludHB0cl90KSBtLT50YWcpICUgdGFibGVzaXplOwogfQogCitzdGF0aWMgaW5saW5lIHNpemVfdAoraGFzaF9zZW1hbnRpY190eXBlIChjb25zdCBzZW1hbnRpY190eXBlICptLCBzaXplX3QgdGFibGVzaXplKQoreworICAvKiBTaW5jZSBuYW1lcyBhcmUgdW5pcXVlLCB3ZSBjYW4gaGFzaCB0aGUgcG9pbnRlciBpdHNlbGYuICAqLworICByZXR1cm4gKCh1aW50cHRyX3QpIG0tPnRhZykgJSB0YWJsZXNpemU7Cit9CisKIHN0YXRpYyBzaXplX3QKIGhhc2hfc3ltYm9sX2hhc2hlciAodm9pZCBjb25zdCAqbSwgc2l6ZV90IHRhYmxlc2l6ZSkKIHsKICAgcmV0dXJuIGhhc2hfc3ltYm9sIChtLCB0YWJsZXNpemUpOwogfQogCitzdGF0aWMgc2l6ZV90CitoYXNoX3NlbWFudGljX3R5cGVfaGFzaGVyICh2b2lkIGNvbnN0ICptLCBzaXplX3QgdGFibGVzaXplKQoreworICByZXR1cm4gaGFzaF9zZW1hbnRpY190eXBlIChtLCB0YWJsZXNpemUpOworfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IENyZWF0ZSB0aGUgc3ltYm9sIGhhc2ggdGFibGUuICB8CkBAIC00OTAsNiArNjQ1LDYyIEBACiAJCQkJICBoYXNoX3N5bWJvbF9oYXNoZXIsCiAJCQkJICBoYXNoX3N5bWJvbF9jb21wYXJhdG9yLAogCQkJCSAgZnJlZSk7CisgIHNlbWFudGljX3R5cGVfdGFibGUgPSBoYXNoX2luaXRpYWxpemUgKEhUX0lOSVRJQUxfQ0FQQUNJVFksCisJCQkJICAgICAgICAgTlVMTCwKKwkJCQkgICAgICAgICBoYXNoX3NlbWFudGljX3R5cGVfaGFzaGVyLAorCQkJCSAgICAgICAgIGhhc2hfc2VtYW50aWNfdHlwZV9jb21wYXJhdG9yLAorCQkJCSAgICAgICAgIGZyZWUpOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgRmluZCB0aGUgc3ltYm9sIG5hbWVkIEtFWSwgYW5kIHJldHVybiBpdC4gIElmIGl0IGRvZXMgbm90IGV4aXN0IHwKK3wgeWV0LCBjcmVhdGUgaXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3ltYm9sICoKK3N5bWJvbF9mcm9tX3VuaXFzdHIgKGNvbnN0IHVuaXFzdHIga2V5LCBsb2NhdGlvbiBsb2MpCit7CisgIHN5bWJvbCBwcm9iZTsKKyAgc3ltYm9sICplbnRyeTsKKworICBwcm9iZS50YWcgPSBrZXk7CisgIGVudHJ5ID0gaGFzaF9sb29rdXAgKHN5bWJvbF90YWJsZSwgJnByb2JlKTsKKworICBpZiAoIWVudHJ5KQorICAgIHsKKyAgICAgIC8qIEZpcnN0IGluc2VydGlvbiBpbiB0aGUgaGFzaC4gKi8KKyAgICAgIGF2ZXIgKCFzeW1ib2xzX3NvcnRlZCk7CisgICAgICBlbnRyeSA9IHN5bWJvbF9uZXcgKGtleSwgbG9jKTsKKyAgICAgIGlmICghaGFzaF9pbnNlcnQgKHN5bWJvbF90YWJsZSwgZW50cnkpKQorICAgICAgICB4YWxsb2NfZGllICgpOworICAgIH0KKyAgcmV0dXJuIGVudHJ5OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IEZpbmQgdGhlIHNlbWFudGljIHR5cGUgbmFtZWQgS0VZLCBhbmQgcmV0dXJuIGl0LiAgSWYgaXQgZG9lcyBub3QgZXhpc3QgfAorfCB5ZXQsIGNyZWF0ZSBpdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3NlbWFudGljX3R5cGUgKgorc2VtYW50aWNfdHlwZV9mcm9tX3VuaXFzdHIgKGNvbnN0IHVuaXFzdHIga2V5KQoreworICBzZW1hbnRpY190eXBlIHByb2JlOworICBzZW1hbnRpY190eXBlICplbnRyeTsKKworICBwcm9iZS50YWcgPSBrZXk7CisgIGVudHJ5ID0gaGFzaF9sb29rdXAgKHNlbWFudGljX3R5cGVfdGFibGUsICZwcm9iZSk7CisKKyAgaWYgKCFlbnRyeSkKKyAgICB7CisgICAgICAvKiBGaXJzdCBpbnNlcnRpb24gaW4gdGhlIGhhc2guICovCisgICAgICBlbnRyeSA9IHNlbWFudGljX3R5cGVfbmV3IChrZXkpOworICAgICAgaWYgKCFoYXNoX2luc2VydCAoc2VtYW50aWNfdHlwZV90YWJsZSwgZW50cnkpKQorICAgICAgICB4YWxsb2NfZGllICgpOworICAgIH0KKyAgcmV0dXJuIGVudHJ5OwogfQogCiAKQEAgLTUwMSwyMCArNzEyLDE5IEBACiBzeW1ib2wgKgogc3ltYm9sX2dldCAoY29uc3QgY2hhciAqa2V5LCBsb2NhdGlvbiBsb2MpCiB7Ci0gIHN5bWJvbCBwcm9iZTsKLSAgc3ltYm9sICplbnRyeTsKKyAgcmV0dXJuIHN5bWJvbF9mcm9tX3VuaXFzdHIgKHVuaXFzdHJfbmV3IChrZXkpLCBsb2MpOworfQogCi0gIGtleSA9IHVuaXFzdHJfbmV3IChrZXkpOwotICBwcm9iZS50YWcgPSBrZXk7Ci0gIGVudHJ5ID0gaGFzaF9sb29rdXAgKHN5bWJvbF90YWJsZSwgJnByb2JlKTsKIAotICBpZiAoIWVudHJ5KQotICAgIHsKLSAgICAgIC8qIEZpcnN0IGluc2VydGlvbiBpbiB0aGUgaGFzaC4gKi8KLSAgICAgIGVudHJ5ID0gc3ltYm9sX25ldyAoa2V5LCBsb2MpOwotICAgICAgaGFzaF9pbnNlcnQgKHN5bWJvbF90YWJsZSwgZW50cnkpOwotICAgIH0KLSAgcmV0dXJuIGVudHJ5OworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgRmluZCB0aGUgc2VtYW50aWMgdHlwZSBuYW1lZCBLRVksIGFuZCByZXR1cm4gaXQuICBJZiBpdCBkb2VzIG5vdCBleGlzdCB8Cit8IHlldCwgY3JlYXRlIGl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc2VtYW50aWNfdHlwZSAqCitzZW1hbnRpY190eXBlX2dldCAoY29uc3QgY2hhciAqa2V5KQoreworICByZXR1cm4gc2VtYW50aWNfdHlwZV9mcm9tX3VuaXFzdHIgKHVuaXFzdHJfbmV3IChrZXkpKTsKIH0KIAogCkBAIC01MzIsMTMgKzc0MiwxOCBAQAogCiAgIHN5bWJvbCAqc3ltOwogCi0gIHNwcmludGYgKGJ1ZiwgIkAlZCIsICsrZHVtbXlfY291bnQpOworICBzcHJpbnRmIChidWYsICIkQCVkIiwgKytkdW1teV9jb3VudCk7CiAgIHN5bSA9IHN5bWJvbF9nZXQgKGJ1ZiwgbG9jKTsKICAgc3ltLT5jbGFzcyA9IG50ZXJtX3N5bTsKICAgc3ltLT5udW1iZXIgPSBudmFycysrOwogICByZXR1cm4gc3ltOwogfQogCitib29sCitzeW1ib2xfaXNfZHVtbXkgKGNvbnN0IHN5bWJvbCAqc3ltKQoreworICByZXR1cm4gc3ltLT50YWdbMF0gPT0gJ0AnIHx8IChzeW0tPnRhZ1swXSA9PSAnJCcgJiYgc3ltLT50YWdbMV0gPT0gJ0AnKTsKK30KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLgogfCBGcmVlIHRoZSBzeW1ib2xzLiAgfApAQCAtNTQ4LDcgKzc2Myw5IEBACiBzeW1ib2xzX2ZyZWUgKHZvaWQpCiB7CiAgIGhhc2hfZnJlZSAoc3ltYm9sX3RhYmxlKTsKKyAgaGFzaF9mcmVlIChzZW1hbnRpY190eXBlX3RhYmxlKTsKICAgZnJlZSAoc3ltYm9scyk7CisgIGZyZWUgKHN5bWJvbHNfc29ydGVkKTsKIH0KIAogCkBAIC01NTcsMTMgKzc3NCwzNiBAQAogfCB0ZXJtaW5hbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorc3RhdGljIGludAorc3ltYm9sc19jbXAgKHN5bWJvbCBjb25zdCAqYSwgc3ltYm9sIGNvbnN0ICpiKQoreworICByZXR1cm4gc3RyY21wIChhLT50YWcsIGItPnRhZyk7Cit9CisKK3N0YXRpYyBpbnQKK3N5bWJvbHNfY21wX3Fzb3J0ICh2b2lkIGNvbnN0ICphLCB2b2lkIGNvbnN0ICpiKQoreworICByZXR1cm4gc3ltYm9sc19jbXAgKCooc3ltYm9sICogY29uc3QgKilhLCAqKHN5bWJvbCAqIGNvbnN0ICopYik7Cit9CisKIHN0YXRpYyB2b2lkCiBzeW1ib2xzX2RvIChIYXNoX3Byb2Nlc3NvciBwcm9jZXNzb3IsIHZvaWQgKnByb2Nlc3Nvcl9kYXRhKQogewotICBoYXNoX2RvX2Zvcl9lYWNoIChzeW1ib2xfdGFibGUsIHByb2Nlc3NvciwgcHJvY2Vzc29yX2RhdGEpOworICBzaXplX3QgY291bnQgPSBoYXNoX2dldF9uX2VudHJpZXMgKHN5bWJvbF90YWJsZSk7CisgIGlmICghc3ltYm9sc19zb3J0ZWQpCisgICAgeworICAgICAgc3ltYm9sc19zb3J0ZWQgPSB4bm1hbGxvYyAoY291bnQsIHNpemVvZiAqc3ltYm9sc19zb3J0ZWQpOworICAgICAgaGFzaF9nZXRfZW50cmllcyAoc3ltYm9sX3RhYmxlLCAodm9pZCoqKXN5bWJvbHNfc29ydGVkLCBjb3VudCk7CisgICAgICBxc29ydCAoc3ltYm9sc19zb3J0ZWQsIGNvdW50LCBzaXplb2YgKnN5bWJvbHNfc29ydGVkLAorICAgICAgICAgICAgIHN5bWJvbHNfY21wX3Fzb3J0KTsKKyAgICB9CisgIHsKKyAgICBzaXplX3QgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgIHByb2Nlc3NvciAoc3ltYm9sc19zb3J0ZWRbaV0sIHByb2Nlc3Nvcl9kYXRhKTsKKyAgfQogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IENoZWNrIHRoYXQgYWxsIHRoZSBzeW1ib2xzIGFyZSBkZWZpbmVkLiAgUmVwb3J0IGFueSB1bmRlZmluZWQgfAogfCBzeW1ib2xzIGFuZCBjb25zaWRlciB0aGVtIG5vbnRlcm1pbmFscy4gICAgICAgICAgICAgICAgICAgICAgIHwKQEAgLTYzOSwxMSArODc5LDM1IEBACiB2b2lkCiBzeW1ib2xzX3BhY2sgKHZvaWQpCiB7Ci0gIHN5bWJvbHMgPSB4Y2FsbG9jIChuc3ltcywgc2l6ZW9mICpzeW1ib2xzKTsKLQogICBzeW1ib2xzX2RvIChzeW1ib2xfY2hlY2tfYWxpYXNfY29uc2lzdGVuY3lfcHJvY2Vzc29yLCBOVUxMKTsKKworICBzeW1ib2xzID0geGNhbGxvYyAobnN5bXMsIHNpemVvZiAqc3ltYm9scyk7CiAgIHN5bWJvbHNfZG8gKHN5bWJvbF9wYWNrX3Byb2Nlc3NvciwgTlVMTCk7CiAKKyAgLyogQWxpYXNlcyBsZWF2ZSBlbXB0eSBzbG90cyBpbiBzeW1ib2xzLCBzbyByZW1vdmUgdGhlbS4gICovCisgIHsKKyAgICBpbnQgd3JpdGVpOworICAgIGludCByZWFkaTsKKyAgICBpbnQgbnN5bXNfb2xkID0gbnN5bXM7CisgICAgZm9yICh3cml0ZWkgPSAwLCByZWFkaSA9IDA7IHJlYWRpIDwgbnN5bXNfb2xkOyByZWFkaSArPSAxKQorICAgICAgeworICAgICAgICBpZiAoc3ltYm9sc1tyZWFkaV0gPT0gTlVMTCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBuc3ltcyAtPSAxOworICAgICAgICAgICAgbnRva2VucyAtPSAxOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHN5bWJvbHNbd3JpdGVpXSA9IHN5bWJvbHNbcmVhZGldOworICAgICAgICAgICAgc3ltYm9sc1t3cml0ZWldLT5udW1iZXIgPSB3cml0ZWk7CisgICAgICAgICAgICBpZiAoc3ltYm9sc1t3cml0ZWldLT5hbGlhcykKKyAgICAgICAgICAgICAgc3ltYm9sc1t3cml0ZWldLT5hbGlhcy0+bnVtYmVyID0gd3JpdGVpOworICAgICAgICAgICAgd3JpdGVpICs9IDE7CisgICAgICAgICAgfQorICAgICAgfQorICB9CisgIHN5bWJvbHMgPSB4bnJlYWxsb2MgKHN5bWJvbHMsIG5zeW1zLCBzaXplb2YgKnN5bWJvbHMpOworCiAgIHN5bWJvbHNfdG9rZW5fdHJhbnNsYXRpb25zX2luaXQgKCk7CiAKICAgaWYgKHN0YXJ0c3ltYm9sLT5jbGFzcyA9PSB1bmtub3duX3N5bSkKQEAgLTY1NSwzICs5MTksNjggQEAKIAkgICAgICBfKCJ0aGUgc3RhcnQgc3ltYm9sICVzIGlzIGEgdG9rZW4iKSwKIAkgICAgICBzdGFydHN5bWJvbC0+dGFnKTsKIH0KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBTZXQgZGVmYXVsdCB0YWdnZWQvdGFnbGVzcyAlZGVzdHJ1Y3Rvci8lcHJpbnRlci4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3ZvaWQKK2RlZmF1bHRfdGFnZ2VkX2Rlc3RydWN0b3Jfc2V0IChjb2RlX3Byb3BzIGNvbnN0ICpkZXN0cnVjdG9yKQoreworICBpZiAoZGVmYXVsdF90YWdnZWRfZGVzdHJ1Y3Rvci5jb2RlKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgY29tcGxhaW5fYXRfaW5kZW50IChkZXN0cnVjdG9yLT5sb2NhdGlvbiwgJmksCisgICAgICAgICAgICAgICAgICAgICAgICAgIF8oInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICUlZGVzdHJ1Y3RvciIpKTsKKyAgICAgIGkgKz0gU1VCX0lOREVOVDsKKyAgICAgIGNvbXBsYWluX2F0X2luZGVudCAoZGVmYXVsdF90YWdnZWRfZGVzdHJ1Y3Rvci5sb2NhdGlvbiwgJmksCisJCSAgICAgICAgICBfKCJwcmV2aW91cyBkZWNsYXJhdGlvbiIpKTsKKyAgICB9CisgIGRlZmF1bHRfdGFnZ2VkX2Rlc3RydWN0b3IgPSAqZGVzdHJ1Y3RvcjsKK30KKwordm9pZAorZGVmYXVsdF90YWdsZXNzX2Rlc3RydWN0b3Jfc2V0IChjb2RlX3Byb3BzIGNvbnN0ICpkZXN0cnVjdG9yKQoreworICBpZiAoZGVmYXVsdF90YWdsZXNzX2Rlc3RydWN0b3IuY29kZSkKKyAgICB7CisgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgIGNvbXBsYWluX2F0X2luZGVudCAoZGVzdHJ1Y3Rvci0+bG9jYXRpb24sICZpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJyZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJSVkZXN0cnVjdG9yIikpOworICAgICAgaSArPSBTVUJfSU5ERU5UOworICAgICAgY29tcGxhaW5fYXRfaW5kZW50IChkZWZhdWx0X3RhZ2xlc3NfZGVzdHJ1Y3Rvci5sb2NhdGlvbiwgJmksCisgICAgICAgICAgICAgICAgICAgICAgICAgIF8oInByZXZpb3VzIGRlY2xhcmF0aW9uIikpOworICAgIH0KKyAgZGVmYXVsdF90YWdsZXNzX2Rlc3RydWN0b3IgPSAqZGVzdHJ1Y3RvcjsKK30KKwordm9pZAorZGVmYXVsdF90YWdnZWRfcHJpbnRlcl9zZXQgKGNvZGVfcHJvcHMgY29uc3QgKnByaW50ZXIpCit7CisgIGlmIChkZWZhdWx0X3RhZ2dlZF9wcmludGVyLmNvZGUpCisgICAgeworICAgICAgdW5zaWduZWQgaSA9IDA7CisgICAgICBjb21wbGFpbl9hdF9pbmRlbnQgKHByaW50ZXItPmxvY2F0aW9uLCAmaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgXygicmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdnZWQgJSVwcmludGVyIikpOworICAgICAgaSArPSBTVUJfSU5ERU5UOworICAgICAgY29tcGxhaW5fYXRfaW5kZW50IChkZWZhdWx0X3RhZ2dlZF9wcmludGVyLmxvY2F0aW9uLCAmaSwKKwkJICAgICAgICAgIF8oInByZXZpb3VzIGRlY2xhcmF0aW9uIikpOworICAgIH0KKyAgZGVmYXVsdF90YWdnZWRfcHJpbnRlciA9ICpwcmludGVyOworfQorCit2b2lkCitkZWZhdWx0X3RhZ2xlc3NfcHJpbnRlcl9zZXQgKGNvZGVfcHJvcHMgY29uc3QgKnByaW50ZXIpCit7CisgIGlmIChkZWZhdWx0X3RhZ2xlc3NfcHJpbnRlci5jb2RlKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgY29tcGxhaW5fYXRfaW5kZW50IChwcmludGVyLT5sb2NhdGlvbiwgJmksCisgICAgICAgICAgICAgICAgICAgICAgICAgIF8oInJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnbGVzcyAlJXByaW50ZXIiKSk7CisgICAgICBpICs9IFNVQl9JTkRFTlQ7CisgICAgICBjb21wbGFpbl9hdF9pbmRlbnQgKGRlZmF1bHRfdGFnbGVzc19wcmludGVyLmxvY2F0aW9uLCAmaSwKKwkJICAgICAgICAgIF8oInByZXZpb3VzIGRlY2xhcmF0aW9uIikpOworICAgIH0KKyAgZGVmYXVsdF90YWdsZXNzX3ByaW50ZXIgPSAqcHJpbnRlcjsKK30KZGlmZiAtLWdpdCBhL3NyYy9zeW10YWIuaCBiL3NyYy9zeW10YWIuaAppbmRleCAwZjg1MmI3Li43ZDhjZjk4IDEwMDY0NAotLS0gYS9zcmMvc3ltdGFiLmgKKysrIGIvc3JjL3N5bXRhYi5oCkBAIC0xLDQ2ICsxLDUwIEBACiAvKiBEZWZpbml0aW9ucyBmb3Igc3ltdGFiLmMgYW5kIGNhbGxlcnMsIHBhcnQgb2YgQmlzb24uCiAKLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MiwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwNCwgMjAwNSwgMjAwNgotICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTIsIDIwMDAtMjAwMiwgMjAwNC0yMDA3LCAyMDA5LTIwMTIgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KIAotICAgQmlzb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogCi0gICBCaXNvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggQmlzb247IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyoqCisgKiBcZmlsZSBzeW10YWIuaAorICogXGJyaWVmIE1hbmlwdWxhdGluZyA6OnN5bWJvbC4KKyAqLwogCiAjaWZuZGVmIFNZTVRBQl9IXwogIyBkZWZpbmUgU1lNVEFCX0hfCiAKICMgaW5jbHVkZSAiYXNzb2MuaCIKICMgaW5jbHVkZSAibG9jYXRpb24uaCIKKyMgaW5jbHVkZSAic2Nhbi1jb2RlLmgiCiAjIGluY2x1ZGUgInVuaXFzdHIuaCIKIAogLyotLS0tLS0tLS0tLgogfCBTeW1ib2xzLiAgfAogYC0tLS0tLS0tLS0qLwogCi0vKiBTeW1ib2wgY2xhc3Nlcy4gICovCisvKiogU3ltYm9sIGNsYXNzZXMuICAqLwogdHlwZWRlZiBlbnVtCiB7Ci0gIHVua25vd25fc3ltLAotICB0b2tlbl9zeW0sCQkvKiB0ZXJtaW5hbCBzeW1ib2wgKi8KLSAgbnRlcm1fc3ltCQkvKiBub24tdGVybWluYWwgKi8KKyAgdW5rbm93bl9zeW0sICAgICAgICAgIC8qKjwgVW5kZWZpbmVkLiAgKi8KKyAgdG9rZW5fc3ltLAkJLyoqPCBUZXJtaW5hbC4gKi8KKyAgbnRlcm1fc3ltCQkvKio8IE5vbi10ZXJtaW5hbC4gKi8KIH0gc3ltYm9sX2NsYXNzOwogCiAKLS8qIEludGVybmFsIHRva2VuIG51bWJlcnMuICovCisvKiogSW50ZXJuYWwgdG9rZW4gbnVtYmVycy4gKi8KIHR5cGVkZWYgaW50IHN5bWJvbF9udW1iZXI7CiAjZGVmaW5lIFNZTUJPTF9OVU1CRVJfTUFYSU1VTSBJTlRfTUFYCiAKQEAgLTUxLDIyICs1NSwzNiBAQAogICAgc3ltYm9sX2NoZWNrX2FsaWFzX2NvbnNpc3RlbmN5LiAgKi8KIHN0cnVjdCBzeW1ib2wKIHsKLSAgLyogVGhlIGtleSwgbmFtZSBvZiB0aGUgc3ltYm9sLiAgKi8KKyAgLyoqIFRoZSBrZXksIG5hbWUgb2YgdGhlIHN5bWJvbC4gICovCiAgIHVuaXFzdHIgdGFnOwotICAvKiBUaGUgbG9jYXRpb24gb2YgaXRzIGZpcnN0IG9jY3VycmVuY2UuICAqLworICAvKiogVGhlIGxvY2F0aW9uIG9mIGl0cyBmaXJzdCBvY2N1cnJlbmNlLiAgKi8KICAgbG9jYXRpb24gbG9jYXRpb247CiAKLSAgLyogSXRzICV0eXBlIGFuZCBhc3NvY2lhdGVkIHByaW50ZXIgYW5kIGRlc3RydWN0b3IuICAqLworICAvKiogSXRzIFxjIFwldHlwZS4KKworICAgICAgQmV3YXJlIHRoYXQgdGhpcyBpcyB0aGUgdHlwZV9uYW1lIGFzIHdhcyBlbnRlcmVkIGJ5IHRoZSB1c2VyLAorICAgICAgaW5jbHVkaW5nIHNpbGx5IHRoaW5ncyBzdWNoIGFzICJdIiBpZiBzaGUgZW50ZXJlZCAiJXRva2VuIDxdPiB0Ii4KKyAgICAgIFRoZXJlZm9yZSwgd2hlbiBvdXRwdXR0aW5nIHR5cGVfbmFtZSB0byBNNCwgYmUgc3VyZSB0byBlc2NhcGUgaXQKKyAgICAgIGludG8gIkB9Ii4gIFNlZSBxdW90ZWRfb3V0cHV0IGZvciBpbnN0YW5jZS4gICovCiAgIHVuaXFzdHIgdHlwZV9uYW1lOworCisgIC8qKiBJdHMgXGMgXCV0eXBlJ3MgbG9jYXRpb24uICAqLwogICBsb2NhdGlvbiB0eXBlX2xvY2F0aW9uOwogCi0gIC8qIERvZXMgbm90IG93biB0aGUgbWVtb3J5LiAqLwotICBjb25zdCBjaGFyICpkZXN0cnVjdG9yOwotICBsb2NhdGlvbiBkZXN0cnVjdG9yX2xvY2F0aW9uOworICAvKiogQW55IFxjIFwlZGVzdHJ1Y3RvciBkZWNsYXJlZCBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgc3ltYm9sLgogCi0gIC8qIERvZXMgbm90IG93biB0aGUgbWVtb3J5LiAqLwotICBjb25zdCBjaGFyICpwcmludGVyOwotICBsb2NhdGlvbiBwcmludGVyX2xvY2F0aW9uOworICAgICAgQWNjZXNzIHRoaXMgZmllbGQgb25seSB0aHJvdWdoIDx0dD5zeW1ib2w8L3R0PidzIGludGVyZmFjZQorICAgICAgZnVuY3Rpb25zLiAgRm9yIGV4YW1wbGUsIGlmIDx0dD5zeW1ib2w6OmRlc3RydWN0b3IgPSBOVUxMPC90dD4sIGEKKyAgICAgIGRlZmF1bHQgXGMgXCVkZXN0cnVjdG9yIG9yIGEgcGVyLXR5cGUgXGMgXCVkZXN0cnVjdG9yIG1pZ2h0IGJlCisgICAgICBhcHByb3ByaWF0ZSwgYW5kIFxjIHN5bWJvbF9kZXN0cnVjdG9yX2dldCB3aWxsIGNvbXB1dGUgdGhlCisgICAgICBjb3JyZWN0IG9uZS4gICovCisgIGNvZGVfcHJvcHMgZGVzdHJ1Y3RvcjsKKworICAvKiogQW55IFxjIFwlcHJpbnRlciBkZWNsYXJlZCBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgc3ltYm9sLgorCisgICAgICBBY2Nlc3MgdGhpcyBmaWVsZCBvbmx5IHRocm91Z2ggPHR0PnN5bWJvbDwvdHQ+J3MgaW50ZXJmYWNlIGZ1bmN0aW9ucy4KKyAgICAgIFxzYSBzeW1ib2w6OmRlc3RydWN0b3IgICovCisgIGNvZGVfcHJvcHMgcHJpbnRlcjsKIAogICBzeW1ib2xfbnVtYmVyIG51bWJlcjsKICAgbG9jYXRpb24gcHJlY19sb2NhdGlvbjsKQEAgLTc0LDg5ICs5MiwxNjUgQEAKICAgYXNzb2MgYXNzb2M7CiAgIGludCB1c2VyX3Rva2VuX251bWJlcjsKIAotICAvKiBQb2ludHMgdG8gdGhlIG90aGVyIGluIHRoZSBpZGVudGlmaWVyLXN5bWJvbCBwYWlyIGZvciBhbiBhbGlhcy4KLSAgICAgU3BlY2lhbCB2YWx1ZSBVU0VSX05VTUJFUl9BTElBUyBpbiB0aGUgaWRlbnRpZmllciBoYWxmIG9mIHRoZQotICAgICBpZGVudGlmaWVyLXN5bWJvbCBwYWlyIGZvciBhbiBhbGlhcy4gICovCisgIC8qIFBvaW50cyB0byB0aGUgb3RoZXIgaW4gdGhlIHN5bWJvbC1zdHJpbmcgcGFpciBmb3IgYW4gYWxpYXMuCisgICAgIFNwZWNpYWwgdmFsdWUgVVNFUl9OVU1CRVJfSEFTX1NUUklOR19BTElBUyBpbiB0aGUgc3ltYm9sIGhhbGYgb2YgdGhlCisgICAgIHN5bWJvbC1zdHJpbmcgcGFpciBmb3IgYW4gYWxpYXMuICAqLwogICBzeW1ib2wgKmFsaWFzOwogICBzeW1ib2xfY2xhc3MgY2xhc3M7CiAgIGJvb2wgZGVjbGFyZWQ7CiB9OwogCi0vKiBVbmRlZmluZWQgdXNlciBudW1iZXIuICAqLworLyoqIFVuZGVmaW5lZCB1c2VyIG51bWJlci4gICovCiAjZGVmaW5lIFVTRVJfTlVNQkVSX1VOREVGSU5FRCAtMQogCi0vKiBgc3ltYm9sLT51c2VyX3Rva2VuX251bWJlciA9PSBVU0VSX05VTUJFUl9BTElBUycgbWVhbnMgdGhpcyBzeW1ib2wKLSAgICpoYXMqIChub3QgaXMpIGEgc3RyaW5nIGxpdGVyYWwgYWxpYXMuICBGb3IgaW5zdGFuY2UsIGAldG9rZW4gZm9vCisvKiBgc3ltYm9sLT51c2VyX3Rva2VuX251bWJlciA9PSBVU0VSX05VTUJFUl9IQVNfU1RSSU5HX0FMSUFTJyBtZWFucworICAgdGhpcyBzeW1ib2wgaGFzIGEgbGl0ZXJhbCBzdHJpbmcgYWxpYXMuICBGb3IgaW5zdGFuY2UsIGAldG9rZW4gZm9vCiAgICAiZm9vIicgaGFzIGAiZm9vIicgbnVtYmVyZWQgcmVndWxhcmx5LCBhbmQgYGZvbycgbnVtYmVyZWQgYXMKLSAgIFVTRVJfTlVNQkVSX0FMSUFTLiAgKi8KLSNkZWZpbmUgVVNFUl9OVU1CRVJfQUxJQVMgLTk5OTEKKyAgIFVTRVJfTlVNQkVSX0hBU19TVFJJTkdfQUxJQVMuICAqLworI2RlZmluZSBVU0VSX05VTUJFUl9IQVNfU1RSSU5HX0FMSUFTIC05OTkxCiAKIC8qIFVuZGVmaW5lZCBpbnRlcm5hbCB0b2tlbiBudW1iZXIuICAqLwogI2RlZmluZSBOVU1CRVJfVU5ERUZJTkVEICgtMSkKIAotLyogUHJpbnQgYSBzeW1ib2wgKGZvciBkZWJ1Z2dpbmcpLiAqLworLyoqIFByaW50IGEgc3ltYm9sIChmb3IgZGVidWdnaW5nKS4gKi8KIHZvaWQgc3ltYm9sX3ByaW50IChzeW1ib2wgKnMsIEZJTEUgKmYpOwogCi0vKiBGZXRjaCAob3IgY3JlYXRlKSB0aGUgc3ltYm9sIGFzc29jaWF0ZWQgdG8gS0VZLiAgKi8KKy8qKiBGZXRjaCAob3IgY3JlYXRlKSB0aGUgc3ltYm9sIGFzc29jaWF0ZWQgdG8gS0VZLiAgKi8KK3N5bWJvbCAqc3ltYm9sX2Zyb21fdW5pcXN0ciAoY29uc3QgdW5pcXN0ciBrZXksIGxvY2F0aW9uIGxvYyk7CisKKy8qKiBGZXRjaCAob3IgY3JlYXRlKSB0aGUgc3ltYm9sIGFzc29jaWF0ZWQgdG8gS0VZLiAgKi8KIHN5bWJvbCAqc3ltYm9sX2dldCAoY29uc3QgY2hhciAqa2V5LCBsb2NhdGlvbiBsb2MpOwogCi0vKiBHZW5lcmF0ZSBhIGR1bW15IG5vbnRlcm1pbmFsLCB3aG9zZSBuYW1lIGNhbm5vdCBjb25mbGljdCB3aXRoIHRoZQotICAgdXNlcidzIG5hbWVzLiAgKi8KKy8qKiBHZW5lcmF0ZSBhIGR1bW15IG5vbnRlcm1pbmFsLgorCisgICBJdHMgbmFtZSBjYW5ub3QgY29uZmxpY3Qgd2l0aCB0aGUgdXNlcidzIG5hbWVzLiAgKi8KIHN5bWJvbCAqZHVtbXlfc3ltYm9sX2dldCAobG9jYXRpb24gbG9jKTsKIAotLyogRGVjbGFyZSB0aGUgbmV3IHN5bWJvbCBTWU0uICBNYWtlIGl0IGFuIGFsaWFzIG9mIFNZTVZBTC4gICovCi12b2lkIHN5bWJvbF9tYWtlX2FsaWFzIChzeW1ib2wgKnN5bSwgc3ltYm9sICpzeW12YWwsIGxvY2F0aW9uIGxvYyk7CisvKiogSXMgdGhpcyBhIGR1bW15IG5vbnRlcm1pbmFsPyAgKi8KK2Jvb2wgc3ltYm9sX2lzX2R1bW15IChjb25zdCBzeW1ib2wgKnN5bSk7CiAKLS8qIFNldCB0aGUgVFlQRV9OQU1FIGFzc29jaWF0ZWQgd2l0aCBTWU0uICBEbyBub3RoaW5nIGlmIHBhc3NlZCAwIGFzCi0gICBUWVBFX05BTUUuICAqLworLyoqCisgKiBNYWtlIFxjIHN0ciB0aGUgbGl0ZXJhbCBzdHJpbmcgYWxpYXMgb2YgXGMgc3ltLiAgQ29weSB0b2tlbiBudW1iZXIsCisgKiBzeW1ib2wgbnVtYmVyLCBhbmQgdHlwZSBmcm9tIFxjIHN5bSB0byBcYyBzdHIuCisgKi8KK3ZvaWQgc3ltYm9sX21ha2VfYWxpYXMgKHN5bWJvbCAqc3ltLCBzeW1ib2wgKnN0ciwgbG9jYXRpb24gbG9jKTsKKworLyoqIFNldCB0aGUgXGMgdHlwZV9uYW1lIGFzc29jaWF0ZWQgd2l0aCBcYyBzeW0uCisKKyAgICBEbyBub3RoaW5nIGlmIHBhc3NlZCAwIGFzIFxjIHR5cGVfbmFtZS4gICovCiB2b2lkIHN5bWJvbF90eXBlX3NldCAoc3ltYm9sICpzeW0sIHVuaXFzdHIgdHlwZV9uYW1lLCBsb2NhdGlvbiBsb2MpOwogCi0vKiBTZXQgdGhlIERFU1RSVUNUT1IgYXNzb2NpYXRlZCB3aXRoIFNZTS4gICovCi12b2lkIHN5bWJvbF9kZXN0cnVjdG9yX3NldCAoc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKmRlc3RydWN0b3IsIGxvY2F0aW9uIGxvYyk7CisvKiogU2V0IHRoZSBcYyBkZXN0cnVjdG9yIGFzc29jaWF0ZWQgd2l0aCBcYyBzeW0uICAqLwordm9pZCBzeW1ib2xfZGVzdHJ1Y3Rvcl9zZXQgKHN5bWJvbCAqc3ltLCBjb2RlX3Byb3BzIGNvbnN0ICpkZXN0cnVjdG9yKTsKIAotLyogU2V0IHRoZSBQUklOVEVSIGFzc29jaWF0ZWQgd2l0aCBTWU0uICAqLwotdm9pZCBzeW1ib2xfcHJpbnRlcl9zZXQgKHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpwcmludGVyLCBsb2NhdGlvbiBsb2MpOworLyoqIEdldCB0aGUgY29tcHV0ZWQgXGMgXCVkZXN0cnVjdG9yIGZvciBcYyBzeW0sIHdoaWNoIHdhcyBpbml0aWFsaXplZCB3aXRoCisgICAgXGMgY29kZV9wcm9wc19ub25lX2luaXQgaWYgdGhlcmUncyBubyBcYyBcJWRlc3RydWN0b3IuICAqLworY29kZV9wcm9wcyBjb25zdCAqc3ltYm9sX2Rlc3RydWN0b3JfZ2V0IChzeW1ib2wgY29uc3QgKnN5bSk7CiAKLS8qIFNldCB0aGUgUFJFQ0VERU5DRSBhc3NvY2lhdGVkIHdpdGggU1lNLiAgRW5zdXJlIHRoYXQgU1lNQk9MIGlzIGEKLSAgIHRlcm1pbmFsLiAgRG8gbm90aGluZyBpZiBpbnZva2VkIHdpdGggVU5ERUZfQVNTT0MgYXMgQVNTT0MuICAqLworLyoqIFNldCB0aGUgXGMgcHJpbnRlciBhc3NvY2lhdGVkIHdpdGggXGMgc3ltLiAgKi8KK3ZvaWQgc3ltYm9sX3ByaW50ZXJfc2V0IChzeW1ib2wgKnN5bSwgY29kZV9wcm9wcyBjb25zdCAqcHJpbnRlcik7CisKKy8qKiBHZXQgdGhlIGNvbXB1dGVkIFxjIFwlcHJpbnRlciBmb3IgXGMgc3ltLCB3aGljaCB3YXMgaW5pdGlhbGl6ZWQgd2l0aAorICAgIFxjIGNvZGVfcHJvcHNfbm9uZV9pbml0IGlmIHRoZXJlJ3Mgbm8gXGMgXCVwcmludGVyLiAgKi8KK2NvZGVfcHJvcHMgY29uc3QgKnN5bWJvbF9wcmludGVyX2dldCAoc3ltYm9sIGNvbnN0ICpzeW0pOworCisvKiBTZXQgdGhlIFxjIHByZWNlZGVuY2UgYXNzb2NpYXRlZCB3aXRoIFxjIHN5bS4KKworICAgRW5zdXJlIHRoYXQgXGEgc3ltYm9sIGlzIGEgdGVybWluYWwuCisgICBEbyBub3RoaW5nIGlmIGludm9rZWQgd2l0aCBcYyB1bmRlZl9hc3NvYyBhcyBcYyBhc3NvYy4gICovCiB2b2lkIHN5bWJvbF9wcmVjZWRlbmNlX3NldCAoc3ltYm9sICpzeW0sIGludCBwcmVjLCBhc3NvYyBhLCBsb2NhdGlvbiBsb2MpOwogCi0vKiBTZXQgdGhlIENMQVNTIGFzc29jaWF0ZWQgd2l0aCBTWU0uICAqLworLyoqIFNldCB0aGUgXGMgY2xhc3MgYXNzb2NpYXRlZCB3aXRoIFxjIHN5bS4gICovCiB2b2lkIHN5bWJvbF9jbGFzc19zZXQgKHN5bWJvbCAqc3ltLCBzeW1ib2xfY2xhc3MgY2xhc3MsIGxvY2F0aW9uIGxvYywKIAkJICAgICAgIGJvb2wgZGVjbGFyaW5nKTsKIAotLyogU2V0IHRoZSBVU0VSX1RPS0VOX05VTUJFUiBhc3NvY2lhdGVkIHdpdGggU1lNLiAgKi8KKy8qKiBTZXQgdGhlIFxjIHVzZXJfdG9rZW5fbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBcYyBzeW0uICAqLwogdm9pZCBzeW1ib2xfdXNlcl90b2tlbl9udW1iZXJfc2V0IChzeW1ib2wgKnN5bSwgaW50IHVzZXJfbnVtYmVyLCBsb2NhdGlvbiBsb2MpOwogCiAKLS8qIERpc3Rpbmd1aXNoZWQgc3ltYm9scy4gIEFYSU9NIGlzIHRoZSByZWFsIHN0YXJ0IHN5bWJvbCwgdGhhdCB1c2VkCi0gICBieSB0aGUgYXV0b21hdG9uLiAgU1RBUlRTWU1CT0wgaXMgdGhlIG9uZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuCi0gICAqLworLyoqIFRoZSBlcnJvciB0b2tlbi4gKi8KIGV4dGVybiBzeW1ib2wgKmVycnRva2VuOworLyoqIFRoZSB0b2tlbiBmb3IgdW5rbm93biB0b2tlbnMuICAqLwogZXh0ZXJuIHN5bWJvbCAqdW5kZWZ0b2tlbjsKKy8qKiBUaGUgZW5kIG9mIGlucHV0IHRva2VuLiAgKi8KIGV4dGVybiBzeW1ib2wgKmVuZHRva2VuOworLyoqIFRoZSBnZW51aW5lIHN0YXJ0IHN5bWJvbC4KKworICAgJGFjY2VwdDogc3RhcnQtc3ltYm9sICRlbmQgKi8KIGV4dGVybiBzeW1ib2wgKmFjY2VwdDsKKworLyoqIFRoZSB1c2VyIHN0YXJ0IHN5bWJvbC4gKi8KIGV4dGVybiBzeW1ib2wgKnN0YXJ0c3ltYm9sOworLyoqIFRoZSBsb2NhdGlvbiBvZiB0aGUgXGMgXCVzdGFydCBkZWNsYXJhdGlvbi4gICovCiBleHRlcm4gbG9jYXRpb24gc3RhcnRzeW1ib2xfbG9jYXRpb247CiAKIAotLyotLS0tLS0tLS0tLS0tLS0uCi18IFN5bWJvbCB0YWJsZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0qLworLyotLS0tLS0tLS0tLS0tLS0tLS4KK3wgU2VtYW50aWMgdHlwZXMuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0qLwogCisvKiogQSBzZW1hbnRpYyB0eXBlIGFuZCBpdHMgYXNzb2NpYXRlZCBcYyBcJWRlc3RydWN0b3IgYW5kIFxjIFwlcHJpbnRlci4KIAotLyogQ3JlYXRlIHRoZSBzeW1ib2wgdGFibGUuICAqLworICAgQWNjZXNzIHRoZSBmaWVsZHMgb2YgdGhpcyBzdHJ1Y3Qgb25seSB0aHJvdWdoIHRoZSBpbnRlcmZhY2UgZnVuY3Rpb25zIGluCisgICB0aGlzIGZpbGUuICBcc2Egc3ltYm9sOjpkZXN0cnVjdG9yICAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAvKiogVGhlIGtleSwgbmFtZSBvZiB0aGUgc2VtYW50aWMgdHlwZS4gICovCisgIHVuaXFzdHIgdGFnOworCisgIC8qKiBBbnkgXGMgJWRlc3RydWN0b3IgZGVjbGFyZWQgZm9yIHRoaXMgc2VtYW50aWMgdHlwZS4gICovCisgIGNvZGVfcHJvcHMgZGVzdHJ1Y3RvcjsKKyAgLyoqIEFueSBcYyAlcHJpbnRlciBkZWNsYXJlZCBmb3IgdGhpcyBzZW1hbnRpYyB0eXBlLiAgKi8KKyAgY29kZV9wcm9wcyBwcmludGVyOworfSBzZW1hbnRpY190eXBlOworCisvKiogRmV0Y2ggKG9yIGNyZWF0ZSkgdGhlIHNlbWFudGljIHR5cGUgYXNzb2NpYXRlZCB0byBLRVkuICAqLworc2VtYW50aWNfdHlwZSAqc2VtYW50aWNfdHlwZV9mcm9tX3VuaXFzdHIgKGNvbnN0IHVuaXFzdHIga2V5KTsKKworLyoqIEZldGNoIChvciBjcmVhdGUpIHRoZSBzZW1hbnRpYyB0eXBlIGFzc29jaWF0ZWQgdG8gS0VZLiAgKi8KK3NlbWFudGljX3R5cGUgKnNlbWFudGljX3R5cGVfZ2V0IChjb25zdCBjaGFyICprZXkpOworCisvKiogU2V0IHRoZSBcYyBkZXN0cnVjdG9yIGFzc29jaWF0ZWQgd2l0aCBcYyB0eXBlLiAgKi8KK3ZvaWQgc2VtYW50aWNfdHlwZV9kZXN0cnVjdG9yX3NldCAoc2VtYW50aWNfdHlwZSAqdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9wcm9wcyBjb25zdCAqZGVzdHJ1Y3Rvcik7CisKKy8qKiBTZXQgdGhlIFxjIHByaW50ZXIgYXNzb2NpYXRlZCB3aXRoIFxjIHR5cGUuICAqLwordm9pZCBzZW1hbnRpY190eXBlX3ByaW50ZXJfc2V0IChzZW1hbnRpY190eXBlICp0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX3Byb3BzIGNvbnN0ICpwcmludGVyKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBTeW1ib2wgYW5kIHNlbWFudGljIHR5cGUgdGFibGVzLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiogQ3JlYXRlIHRoZSBzeW1ib2wgYW5kIHNlbWFudGljIHR5cGUgdGFibGVzLiAgKi8KIHZvaWQgc3ltYm9sc19uZXcgKHZvaWQpOwogCi0vKiBGcmVlIGFsbCB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3Igc3ltYm9scy4gICovCisvKiogRnJlZSBhbGwgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHN5bWJvbHMgYW5kIHNlbWFudGljIHR5cGVzLiAgKi8KIHZvaWQgc3ltYm9sc19mcmVlICh2b2lkKTsKIAotLyogQ2hlY2sgdGhhdCBhbGwgdGhlIHN5bWJvbHMgYXJlIGRlZmluZWQuICBSZXBvcnQgYW55IHVuZGVmaW5lZAotICAgc3ltYm9scyBhbmQgY29uc2lkZXIgdGhlbSBub250ZXJtaW5hbHMuICAqLworLyoqIENoZWNrIHRoYXQgYWxsIHRoZSBzeW1ib2xzIGFyZSBkZWZpbmVkLgorCisgICAgUmVwb3J0IGFueSB1bmRlZmluZWQgc3ltYm9scyBhbmQgY29uc2lkZXIgdGhlbSBub250ZXJtaW5hbHMuICAqLwogdm9pZCBzeW1ib2xzX2NoZWNrX2RlZmluZWQgKHZvaWQpOwogCi0vKiBQZXJmb3JtIHZhcmlvdXMgc2FuaXR5IGNoZWNrcywgYXNzaWduIHN5bWJvbCBudW1iZXJzLCBhbmQgc2V0IHVwCi0gICBUT0tFTl9UUkFOU0xBVElPTlMuICAqLworLyoqIFNhbml0eSBjaGVja3MgYW5kICN0b2tlbl90cmFuc2xhdGlvbnMgY29uc3RydWN0aW9uLgorCisgICBQZXJmb3JtIHZhcmlvdXMgc2FuaXR5IGNoZWNrcywgYXNzaWduIHN5bWJvbCBudW1iZXJzLCBhbmQgc2V0IHVwCisgICAjdG9rZW5fdHJhbnNsYXRpb25zLiAgKi8KIHZvaWQgc3ltYm9sc19wYWNrICh2b2lkKTsKIAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgRGVmYXVsdCAlZGVzdHJ1Y3RvcidzIGFuZCAlcHJpbnRlcidzLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKiBTZXQgdGhlIGRlZmF1bHQgXGMgXCVkZXN0cnVjdG9yIGZvciB0YWdnZWQgdmFsdWVzLiAgKi8KK3ZvaWQgZGVmYXVsdF90YWdnZWRfZGVzdHJ1Y3Rvcl9zZXQgKGNvZGVfcHJvcHMgY29uc3QgKmRlc3RydWN0b3IpOworLyoqIFNldCB0aGUgZGVmYXVsdCBcYyBcJWRlc3RydWN0b3IgZm9yIHRhZ2xlc3MgdmFsdWVzLiAgKi8KK3ZvaWQgZGVmYXVsdF90YWdsZXNzX2Rlc3RydWN0b3Jfc2V0IChjb2RlX3Byb3BzIGNvbnN0ICpkZXN0cnVjdG9yKTsKKworLyoqIFNldCB0aGUgZGVmYXVsdCBcYyBcJXByaW50ZXIgZm9yIHRhZ2dlZCB2YWx1ZXMuICAqLwordm9pZCBkZWZhdWx0X3RhZ2dlZF9wcmludGVyX3NldCAoY29kZV9wcm9wcyBjb25zdCAqcHJpbnRlcik7CisvKiogU2V0IHRoZSBkZWZhdWx0IFxjIFwlcHJpbnRlciBmb3IgdGFnbGVzcyB2YWx1ZXMuICAqLwordm9pZCBkZWZhdWx0X3RhZ2xlc3NfcHJpbnRlcl9zZXQgKGNvZGVfcHJvcHMgY29uc3QgKnByaW50ZXIpOworCiAjZW5kaWYgLyogIVNZTVRBQl9IXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL3N5c3RlbS5oIGIvc3JjL3N5c3RlbS5oCmluZGV4IDYzMTU3OTAuLjM1ZmY4NzYgMTAwNjQ0Ci0tLSBhL3NyYy9zeXN0ZW0uaAorKysgYi9zcmMvc3lzdGVtLmgKQEAgLTEsMTIgKzEsMTEgQEAKIC8qIFN5c3RlbS1kZXBlbmRlbnQgZGVmaW5pdGlvbnMgZm9yIEJpc29uLgogCi0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZQotICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpAQCAtMTQsMTg4ICsxMywyMTIgQEAKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAjaWZuZGVmIEJJU09OX1NZU1RFTV9ICi0jZGVmaW5lIEJJU09OX1NZU1RFTV9ICisjIGRlZmluZSBCSVNPTl9TWVNURU1fSAogCiAvKiBmbGV4IDIuNS4zMSBncmF0dXRpb3VzbHkgZGVmaW5lcyBtYWNyb3MgbGlrZSBJTlQ4X01JTi4gIEJ1dCB0aGlzCiAgICBydW5zIGFmb3VsIG9mIHByZS1DOTkgY29tcGlsZXJzIHRoYXQgaGF2ZSA8aW50dHlwZXMuaD4gb3IKICAgIDxzdGRpbnQuaD4sIHdoaWNoIGFyZSBpbmNsdWRlZCBiZWxvdyBpZiBhdmFpbGFibGUuICBJdCBhbHNvIHJ1bnMKICAgIGFmb3VsIG9mIHByZS1DOTkgY29tcGlsZXJzIHRoYXQgZGVmaW5lIHRoZXNlIG1hY3JvcyBpbiA8bGltaXRzLmg+LiAgKi8KLSNpZiAhIGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyB8fCBfX1NURENfVkVSU0lPTl9fIDwgMTk5OTAxCi0jIHVuZGVmIElOVDhfTUlOCi0jIHVuZGVmIElOVDE2X01JTgotIyB1bmRlZiBJTlQzMl9NSU4KLSMgdW5kZWYgSU5UOF9NQVgKLSMgdW5kZWYgSU5UMTZfTUFYCi0jIHVuZGVmIFVJTlQ4X01BWAotIyB1bmRlZiBJTlQzMl9NQVgKLSMgdW5kZWYgVUlOVDE2X01BWAotIyB1bmRlZiBVSU5UMzJfTUFYCi0jZW5kaWYKKyMgaWYgISBkZWZpbmVkIF9fU1REQ19WRVJTSU9OX18gfHwgX19TVERDX1ZFUlNJT05fXyA8IDE5OTkwMQorIyAgdW5kZWYgSU5UOF9NSU4KKyMgIHVuZGVmIElOVDE2X01JTgorIyAgdW5kZWYgSU5UMzJfTUlOCisjICB1bmRlZiBJTlQ4X01BWAorIyAgdW5kZWYgSU5UMTZfTUFYCisjICB1bmRlZiBVSU5UOF9NQVgKKyMgIHVuZGVmIElOVDMyX01BWAorIyAgdW5kZWYgVUlOVDE2X01BWAorIyAgdW5kZWYgVUlOVDMyX01BWAorIyBlbmRpZgogCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJ1bmxvY2tlZC1pby5oIgotCi0jaWYgSEFWRV9TWVNfVFlQRVNfSAotIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotCi0jaWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisjIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyBpbmNsdWRlIDxzdHJpbmcuaD4KICMgaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLQotI2lmIEhBVkVfSU5UVFlQRVNfSAogIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TVERJTlRfSAotIyBpbmNsdWRlIDxzdGRpbnQuaD4KLSNlbmRpZgogCi0jaWYgISBIQVZFX1VJTlRQVFJfVAorI2RlZmluZSBBUlJBWV9DQVJESU5BTElUWShBcnJheSkgKHNpemVvZiAoQXJyYXkpIC8gc2l6ZW9mICooQXJyYXkpKQorI2RlZmluZSBTVFJFUShMLCBSKSAgKHN0cmNtcChMLCBSKSA9PSAwKQorI2RlZmluZSBTVFJORVEoTCwgUikgKCFTVFJFUShMLCBSKSkKKworIyBpZm5kZWYgVUlOVFBUUl9NQVgKIC8qIFRoaXMgaXNuJ3QgcGVyZmVjdCwgYnV0IGl0J3MgZ29vZCBlbm91Z2ggZm9yIEJpc29uLCB3aGljaCBuZWVkcwogICAgb25seSB0byBoYXNoIHBvaW50ZXJzLiAgKi8KIHR5cGVkZWYgc2l6ZV90IHVpbnRwdHJfdDsKLSNlbmRpZgorIyBlbmRpZgogCi0jaW5jbHVkZSA8dmVyaWZ5Lmg+Ci0jaW5jbHVkZSA8eGFsbG9jLmg+CisvKiBWZXJzaW9uIG1pc21hdGNoLiAqLworIyBkZWZpbmUgRVhfTUlTTUFUQ0ggNjMKIAorLyotLS0tLS0tLS0uCit8IEdudWxpYi4gIHwKK2AtLS0tLS0tLS0qLwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgTWlzc2luZyBwcm90b3R5cGVzLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpbmNsdWRlIDxzdHBjcHkuaD4KLQotLyogRnJvbSBsaWIvYmFzZW5hbWUuYy4gKi8KLWNoYXIgKmJhc2VfbmFtZSAoY2hhciBjb25zdCAqbmFtZSk7CisjIGluY2x1ZGUgPHVubG9ja2VkLWlvLmg+CisjIGluY2x1ZGUgPHZlcmlmeS5oPgorIyBpbmNsdWRlIDx4YWxsb2MuaD4KIAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLgogfCBHQ0MgZXh0ZW5zaW9ucy4gIHwKIGAtLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qIFVzZSB0aGlzIHRvIHN1cHByZXNzIGdjYydzIGAuLi5tYXkgYmUgdXNlZCBiZWZvcmUgaW5pdGlhbGl6ZWQnCi0gICB3YXJuaW5ncy4gICovCi0jaWZkZWYgbGludAotIyBkZWZpbmUgSUZfTElOVChDb2RlKSBDb2RlCi0jZWxzZQotIyBkZWZpbmUgSUZfTElOVChDb2RlKSAvKiBlbXB0eSAqLwotI2VuZGlmCisvKiBVc2UgUEFDSUZZX0NDIHRvIGluZGljYXRlIHRoYXQgQ29kZSBpcyB1bmltcG9ydGFudCB0byB0aGUgbG9naWMgb2YgQmlzb24KKyAgIGJ1dCB0aGF0IGl0IGlzIG5lY2Vzc2FyeSBmb3Igc3VwcHJlc3NpbmcgY29tcGlsZXIgd2FybmluZ3MuICBGb3IgZXhhbXBsZSwKKyAgIENvZGUgbWlnaHQgYmUgYSB2YXJpYWJsZSBpbml0aWFsaXplciB0aGF0J3MgYWx3YXlzIG92ZXJ3cml0dGVuIGJlZm9yZSB0aGUKKyAgIHZhcmlhYmxlIGlzIHVzZWQuCiAKLSNpZm5kZWYgX19hdHRyaWJ1dGVfXworICAgUEFDSUZZX0NDIGlzIGludGVuZGVkIHRvIGJlIHVzZWZ1bCBvbmx5IGFzIGEgY29tbWVudCBhcyBpdCBkb2VzIG5vdCBhbHRlcgorICAgQ29kZS4gIEl0IGlzIHRlbXB0aW5nIHRvIHJlZGVmaW5lIFBBQ0lGWV9DQyBzbyB0aGF0IGl0IHdpbGwgc3VwcHJlc3MgQ29kZQorICAgd2hlbiBjb25maWd1cmluZyB3aXRob3V0IC0tZW5hYmxlLWdjYy13YXJuaW5ncy4gIEhvd2V2ZXIsIHRoYXQgd291bGQgbWVhbgorICAgdGhhdCwgZm9yIG1haW50YWluZXJzLCBCaXNvbiB3b3VsZCBjb21waWxlIHdpdGggcG90ZW50aWFsbHkgbGVzcyB3YXJuaW5ncworICAgYW5kIHNhZmVyIGxvZ2ljIHRoYW4gaXQgd291bGQgZm9yIHVzZXJzLiAgRHVlIHRvIHRoZSBvdmVyaGVhZCBvZiBNNCwKKyAgIHN1cHByZXNzaW5nIENvZGUgaXMgdW5saWtlbHkgdG8gb2ZmZXIgYW55IHNpZ25pZmljYW50IGltcHJvdmVtZW50IGluCisgICBCaXNvbidzIHBlcmZvcm1hbmNlIGFueXdheS4gICovCisjIGRlZmluZSBQQUNJRllfQ0MoQ29kZSkgQ29kZQorCisjIGlmbmRlZiBfX2F0dHJpYnV0ZV9fCiAvKiBUaGlzIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLiAgKi8KLSMgaWYgKCEgZGVmaW5lZCBfX0dOVUNfXyB8fCBfX0dOVUNfXyA8IDIgXAotICAgICAgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA1KSB8fCBfX1NUUklDVF9BTlNJX18pCi0jICBkZWZpbmUgX19hdHRyaWJ1dGVfXyhTcGVjKSAvKiBlbXB0eSAqLworIyAgaWYgKCEgZGVmaW5lZCBfX0dOVUNfXyB8fCBfX0dOVUNfXyA8IDIgXAorICAgICAgIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fIDwgNSkpCisjICAgZGVmaW5lIF9fYXR0cmlidXRlX18oU3BlYykgLyogZW1wdHkgKi8KKyMgIGVuZGlmCiAjIGVuZGlmCi0jZW5kaWYKIAogLyogVGhlIF9fLXByb3RlY3RlZCB2YXJpYW50cyBvZiBgZm9ybWF0JyBhbmQgYHByaW50ZicgYXR0cmlidXRlcwogICAgYXJlIGFjY2VwdGVkIGJ5IGdjYyB2ZXJzaW9ucyAyLjYuNCAoZWZmZWN0aXZlbHkgMi43KSBhbmQgbGF0ZXIuICAqLwotI2lmIF9fR05VQ19fIDwgMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDcpCi0jIGRlZmluZSBfX2Zvcm1hdF9fIGZvcm1hdAotIyBkZWZpbmUgX19wcmludGZfXyBwcmludGYKLSNlbmRpZgorIyBpZiBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA3KQorIyAgZGVmaW5lIF9fZm9ybWF0X18gZm9ybWF0CisjICBkZWZpbmUgX19wcmludGZfXyBwcmludGYKKyMgZW5kaWYKIAotI2lmbmRlZiBBVFRSSUJVVEVfTk9SRVRVUk4KLSMgZGVmaW5lIEFUVFJJQlVURV9OT1JFVFVSTiBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSkKLSNlbmRpZgorIyBpZm5kZWYgQVRUUklCVVRFX05PUkVUVVJOCisjICBkZWZpbmUgQVRUUklCVVRFX05PUkVUVVJOIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKQorIyBlbmRpZgogCi0jaWZuZGVmIEFUVFJJQlVURV9VTlVTRUQKLSMgZGVmaW5lIEFUVFJJQlVURV9VTlVTRUQgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQotI2VuZGlmCisjIGlmbmRlZiBBVFRSSUJVVEVfVU5VU0VECisjICBkZWZpbmUgQVRUUklCVVRFX1VOVVNFRCBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCisjIGVuZGlmCisKIAogLyotLS0tLS0uCiB8IE5MUy4gIHwKIGAtLS0tLS0qLwogCi0jaW5jbHVkZSA8bG9jYWxlLmg+CisjIGluY2x1ZGUgPGxvY2FsZS5oPgogCi0jaW5jbHVkZSA8Z2V0dGV4dC5oPgotI2RlZmluZSBfKE1zZ2lkKSAgZ2V0dGV4dCAoTXNnaWQpCi0jZGVmaW5lIE5fKE1zZ2lkKSAoTXNnaWQpCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBGaXggYnJva2VuIGNvbXBpbGF0aW9uIGZsYWdzLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWZuZGVmIExPQ0FMRURJUgotIyBkZWZpbmUgTE9DQUxFRElSICIvdXNyL2xvY2FsL3NoYXJlL2xvY2FsZSIKLSNlbmRpZgorIyBpbmNsdWRlIDxnZXR0ZXh0Lmg+CisjIGRlZmluZSBfKE1zZ2lkKSAgZ2V0dGV4dCAoTXNnaWQpCisjIGRlZmluZSBOXyhNc2dpZCkgKE1zZ2lkKQogCiAKIC8qLS0tLS0tLS0tLS0uCiB8IEJvb2xlYW5zLiAgfAogYC0tLS0tLS0tLS0tKi8KIAotI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyMgaW5jbHVkZSA8c3RkYm9vbC5oPgorCisKKworLyotLS0tLS0tLS0tLS0tLgorfCBBc3NlcnRpb25zLiAgfAorYC0tLS0tLS0tLS0tLS0qLworCisvKiBJbiB0aGUgcGFzdCwgQmlzb24gZGVmaW5lZCBhdmVyIHRvIHNpbXBseSBpbnZva2UgYWJvcnQgaW4gdGhlIGNhc2Ugb2YKKyAgIGEgZmFpbGVkIGFzc2VydGlvbi4gIFRoZSByYXRpb25hbGUgd2FzIHRoYXQgPGFzc2VydC5oPidzIGFzc2VydGlvbnMKKyAgIHdlcmUgdG9vIGhlYXZ5d2VpZ2h0IGFuZCBjb3VsZCBiZSBkaXNhYmxlZCB0b28gZWFzaWx5LiAgU2VlCisgICBkaXNjdXNzaW9ucyBhdAorICAgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDYtMDEvbXNnMDAwODAuaHRtbD4KKyAgIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA2LTA5L21zZzAwMTExLmh0bWw+LgorCisgICBIb3dldmVyLCBub3JtYWwgYXNzZXJ0IG91dHB1dCBjYW4gYmUgaGVscGZ1bCBkdXJpbmcgZGV2ZWxvcG1lbnQgYW5kCisgICBpbiBidWcgcmVwb3J0cyBmcm9tIHVzZXJzLiAgTW9yZW92ZXIsIGl0J3Mgbm90IGNsZWFyIG5vdyB0aGF0CisgICA8YXNzZXJ0Lmg+J3MgYXNzZXJ0aW9ucyBhcmUgc2lnbmlmaWNhbnRseSBoZWF2eXdlaWdodC4gIEZpbmFsbHksIGlmCisgICB1c2VycyB3YW50IHRvIGV4cGVyaW1lbnQgd2l0aCBkaXNhYmxpbmcgYXNzZXJ0aW9ucywgaXQncyBkZWJhdGFibGUKKyAgIHdoZXRoZXIgaXQncyBvdXIgcmVzcG9uc2liaWxpdHkgdG8gc3RvcCB0aGVtLiAgU2VlIGRpc2N1c3Npb24KKyAgIHN0YXJ0aW5nIGF0CisgICA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwOS0wOS9tc2cwMDAxMy5odG1sPi4KKworICAgRm9yIG5vdywgd2UgdXNlIGFzc2VydCBidXQgd2UgY2FsbCBpdCBhdmVyIHRocm91Z2hvdXQgQmlzb24gaW4gY2FzZQorICAgd2UgbGF0ZXIgd2lzaCB0byB0cnkgYW5vdGhlciBzY2hlbWUuCisqLworIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyMgZGVmaW5lIGF2ZXIgYXNzZXJ0CiAKIAogLyotLS0tLS0tLS0tLS4KIHwgT2JzdGFja3MuICB8CiBgLS0tLS0tLS0tLS0qLwogCi0jZGVmaW5lIG9ic3RhY2tfY2h1bmtfYWxsb2MgeG1hbGxvYwotI2RlZmluZSBvYnN0YWNrX2NodW5rX2ZyZWUgIGZyZWUKLSNpbmNsdWRlIDxvYnN0YWNrLmg+CisjIGRlZmluZSBvYnN0YWNrX2NodW5rX2FsbG9jIHhtYWxsb2MKKyMgZGVmaW5lIG9ic3RhY2tfY2h1bmtfZnJlZSAgZnJlZQorIyBpbmNsdWRlIDxvYnN0YWNrLmg+CiAKLSNkZWZpbmUgb2JzdGFja19zZ3JvdyhPYnMsIFN0cikgXAorIyBkZWZpbmUgb2JzdGFja19zZ3JvdyhPYnMsIFN0cikgICAgICAgICAgICAgICAgXAogICBvYnN0YWNrX2dyb3cgKE9icywgU3RyLCBzdHJsZW4gKFN0cikpCiAKLSNkZWZpbmUgb2JzdGFja19mZ3JvdzEoT2JzLCBGb3JtYXQsIEFyZzEpCVwKLWRvIHsJCQkJCQlcCi0gIGNoYXIgYnVmWzQwOTZdOwkJCQlcCi0gIHNwcmludGYgKGJ1ZiwgRm9ybWF0LCBBcmcxKTsJCQlcCi0gIG9ic3RhY2tfZ3JvdyAoT2JzLCBidWYsIHN0cmxlbiAoYnVmKSk7CVwKLX0gd2hpbGUgKDApCisvKiBPdXRwdXQgU3RyIGVzY2FwZWQgZm9yIG91ciBwb3N0cHJvY2Vzc2luZyAoaS5lLiwgZXNjYXBlIE00IHNwZWNpYWwKKyAgIGNoYXJhY3RlcnMpLgogCi0jZGVmaW5lIG9ic3RhY2tfZmdyb3cyKE9icywgRm9ybWF0LCBBcmcxLCBBcmcyKQlcCi1kbyB7CQkJCQkJXAotICBjaGFyIGJ1Zls0MDk2XTsJCQkJXAotICBzcHJpbnRmIChidWYsIEZvcm1hdCwgQXJnMSwgQXJnMik7CQlcCi0gIG9ic3RhY2tfZ3JvdyAoT2JzLCBidWYsIHN0cmxlbiAoYnVmKSk7CVwKLX0gd2hpbGUgKDApCisgICBGb3IgaW5zdGFuY2UgIltmb29dIiAtPiAiQHtmb29AfSIsICIkJCIgLT4gIiRdWyRdWyIuICovCiAKLSNkZWZpbmUgb2JzdGFja19mZ3JvdzMoT2JzLCBGb3JtYXQsIEFyZzEsIEFyZzIsIEFyZzMpCVwKLWRvIHsJCQkJCQkJXAotICBjaGFyIGJ1Zls0MDk2XTsJCQkJCVwKLSAgc3ByaW50ZiAoYnVmLCBGb3JtYXQsIEFyZzEsIEFyZzIsIEFyZzMpOwkJXAotICBvYnN0YWNrX2dyb3cgKE9icywgYnVmLCBzdHJsZW4gKGJ1ZikpOwkJXAotfSB3aGlsZSAoMCkKKyMgZGVmaW5lIG9ic3RhY2tfZXNjYXBlKE9icywgU3RyKSAgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2hhciBjb25zdCAqcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmb3IgKHAgPSBTdHI7ICpwOyBwKyspICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3dpdGNoICgqcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY2FzZSAnJCc6IG9ic3RhY2tfc2dyb3cgKE9icywgIiRdWyIpOyBicmVhazsgICAgXAorICAgICAgICBjYXNlICdAJzogb2JzdGFja19zZ3JvdyAoT2JzLCAiQEAiICk7IGJyZWFrOyAgICBcCisgICAgICAgIGNhc2UgJ1snOiBvYnN0YWNrX3Nncm93IChPYnMsICJAeyIgKTsgYnJlYWs7ICAgIFwKKyAgICAgICAgY2FzZSAnXSc6IG9ic3RhY2tfc2dyb3cgKE9icywgIkB9IiApOyBicmVhazsgICAgXAorICAgICAgICBkZWZhdWx0OiAgb2JzdGFja18xZ3JvdyAoT2JzLCAqcCAgICk7IGJyZWFrOyAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKIAotI2RlZmluZSBvYnN0YWNrX2Zncm93NChPYnMsIEZvcm1hdCwgQXJnMSwgQXJnMiwgQXJnMywgQXJnNCkJXAotZG8gewkJCQkJCQkJXAotICBjaGFyIGJ1Zls0MDk2XTsJCQkJCQlcCi0gIHNwcmludGYgKGJ1ZiwgRm9ybWF0LCBBcmcxLCBBcmcyLCBBcmczLCBBcmc0KTsJCVwKLSAgb2JzdGFja19ncm93IChPYnMsIGJ1Ziwgc3RybGVuIChidWYpKTsJCQlcCi19IHdoaWxlICgwKQogCisvKiBPdXRwdXQgU3RyIGJvdGggcXVvdGVkIGZvciBNNCAoaS5lLiwgZW1iZWQgaW4gW1suLi5dXSksIGFuZCBlc2NhcGVkCisgICBmb3Igb3VyIHBvc3Rwcm9jZXNzaW5nIChpLmUuLCBlc2NhcGUgTTQgc3BlY2lhbCBjaGFyYWN0ZXJzKS4gIElmCisgICBTdHIgaXMgZW1wdHkgKG9yIE5VTEwpLCBvdXRwdXQgIltdIiBpbnN0ZWFkIG9mICJbW11dIiBhcyBpdCBtYWtlIE00CisgICBwcm9ncmFtbWluZyBlYXNpZXIgKG00X2lmdmFsIGNhbiBiZSB1c2VkKS4KKworICAgRm9yIGluc3RhbmNlICJbZm9vXSIgLT4gIltbQHtmb29AfV1dIiwgIiQkIiAtPiAiW1skXVskXVtdXSIuICovCisKKyMgZGVmaW5lIG9ic3RhY2tfcXVvdGUoT2JzLCBTdHIpICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjaGFyIGNvbnN0KiBvYnN0YWNrX3F1b3RlX3AgPSBTdHI7ICAgICAgICAgIFwKKyAgICBpZiAob2JzdGFja19xdW90ZV9wICYmIG9ic3RhY2tfcXVvdGVfcFswXSkgIFwKKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgb2JzdGFja19zZ3JvdyAoT2JzLCAiW1siKTsgICAgICAgICAgICAgIFwKKyAgICAgICAgb2JzdGFja19lc2NhcGUgKE9icywgb2JzdGFja19xdW90ZV9wKTsgIFwKKyAgICAgICAgb2JzdGFja19zZ3JvdyAoT2JzLCAiXV0iKTsgICAgICAgICAgICAgIFwKKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIG9ic3RhY2tfc2dyb3cgKE9icywgIltdIik7ICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworCisvKiBBcHBlbmQgdGhlIGVuZGluZyAwLCBmaW5pc2ggT2JzLCBhbmQgcmV0dXJuIHRoZSBzdHJpbmcuICAqLworCisjIGRlZmluZSBvYnN0YWNrX2ZpbmlzaDAoT2JzKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKG9ic3RhY2tfMWdyb3cgKE9icywgJ1wwJyksIChjaGFyICopIG9ic3RhY2tfZmluaXNoIChPYnMpKQogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IEV4dGVuc2lvbnMgdG8gdXNlIGZvciB0aGUgb3V0cHV0IGZpbGVzLiAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotI2lmbmRlZiBPVVRQVVRfRVhUCi0jIGRlZmluZSBPVVRQVVRfRVhUICIub3V0cHV0IgotI2VuZGlmCisjIGlmbmRlZiBPVVRQVVRfRVhUCisjICBkZWZpbmUgT1VUUFVUX0VYVCAiLm91dHB1dCIKKyMgZW5kaWYKIAotI2lmbmRlZiBUQUJfRVhUCi0jIGRlZmluZSBUQUJfRVhUICIudGFiIgotI2VuZGlmCi0KLSNpZm5kZWYgREVGQVVMVF9UTVBESVIKLSMgZGVmaW5lIERFRkFVTFRfVE1QRElSICIvdG1wIgotI2VuZGlmCisjIGlmbmRlZiBUQUJfRVhUCisjICBkZWZpbmUgVEFCX0VYVCAiLnRhYiIKKyMgZW5kaWYKIAogCiAKQEAgLTIwMywyMCArMjI2LDE1IEBACiB8IEZyZWUgYSBsaW5rZWQgbGlzdC4gIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0jZGVmaW5lIExJU1RfRlJFRShUeXBlLCBMaXN0KQkJCVwKLWRvIHsJCQkJCQlcCi0gIFR5cGUgKl9ub2RlLCAqX25leHQ7CQkJCVwKLSAgZm9yIChfbm9kZSA9IExpc3Q7IF9ub2RlOyBfbm9kZSA9IF9uZXh0KQlcCi0gICAgewkJCQkJCVwKLSAgICAgIF9uZXh0ID0gX25vZGUtPm5leHQ7CQkJXAotICAgICAgZnJlZSAoX25vZGUpOwkJCQlcCi0gICAgfQkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLQotLyogQXNzZXJ0aW9ucy4gIDxhc3NlcnQuaD4ncyBhc3NlcnRpb25zIGFyZSB0b28gaGVhdnl3ZWlnaHQsIGFuZCBjYW4KLSAgIGJlIGRpc2FibGVkIHRvbyBlYXNpbHksIHNvIGltcGxlbWVudCBpdCBzZXBhcmF0ZWx5IGhlcmUuICAqLwotI2RlZmluZSBhc3NlcnQoeCkgKCh2b2lkKSAoKHgpIHx8IChhYm9ydCAoKSwgMCkpKQorIyBkZWZpbmUgTElTVF9GUkVFKFR5cGUsIExpc3QpICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFR5cGUgKl9ub2RlLCAqX25leHQ7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZvciAoX25vZGUgPSBMaXN0OyBfbm9kZTsgX25vZGUgPSBfbmV4dCkgICAgXAorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfbmV4dCA9IF9ub2RlLT5uZXh0OyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmcmVlIChfbm9kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgpkaWZmIC0tZ2l0IGEvc3JjL3RhYmxlcy5jIGIvc3JjL3RhYmxlcy5jCmluZGV4IGM5MzgxMzkuLmViODI3YjcgMTAwNjQ0Ci0tLSBhL3NyYy90YWJsZXMuYworKysgYi9zcmMvdGFibGVzLmMKQEAgLTEsMzAgKzEsMjcgQEAKIC8qIE91dHB1dCB0aGUgZ2VuZXJhdGVkIHBhcnNpbmcgcHJvZ3JhbSBmb3IgQmlzb24uCiAKLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4NiwgMTk4OSwgMTk5MiwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwKLSAgIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODYsIDE5ODksIDE5OTIsIDIwMDAtMjAwNiwgMjAwOS0yMDEyIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCiAKLSAgIEJpc29uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLSAgIEJpc29uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIEJpc29uOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAgIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpbmNsdWRlIDxjb25maWcuaD4KICNpbmNsdWRlICJzeXN0ZW0uaCIKIAogI2luY2x1ZGUgPGJpdHNldHYuaD4KLSNpbmNsdWRlIDxxdW90ZWFyZy5oPgogCiAjaW5jbHVkZSAiY29tcGxhaW4uaCIKICNpbmNsdWRlICJjb25mbGljdHMuaCIKQEAgLTMyLDYgKzI5LDcgQEAKICNpbmNsdWRlICJnZXRhcmdzLmgiCiAjaW5jbHVkZSAiZ3JhbS5oIgogI2luY2x1ZGUgImxhbHIuaCIKKyNpbmNsdWRlICJtdXNjbGUtdGFiLmgiCiAjaW5jbHVkZSAicmVhZGVyLmgiCiAjaW5jbHVkZSAic3ltdGFiLmgiCiAjaW5jbHVkZSAidGFibGVzLmgiCkBAIC0xMjcsNyArMTI1LDcgQEAKIGJhc2VfbnVtYmVyICp0YWJsZTsKIGJhc2VfbnVtYmVyICpjaGVjazsKIC8qIFRoZSB2YWx1ZSB1c2VkIGluIFRBQkxFIHRvIGRlbm90ZSBleHBsaWNpdCBzeW50YXggZXJyb3JzCi0gICAoJW5vbmFzc29jKSwgYSBuZWdhdGl2ZSBpbmZpbml0ZS4gIEZpcnN0IGRlZmF1bHRzIHRvIEFDVElPTl9OVU1CRVJfTUlOSU5VTSwKKyAgICglbm9uYXNzb2MpLCBhIG5lZ2F0aXZlIGluZmluaXRlLiAgRmlyc3QgZGVmYXVsdHMgdG8gQUNUSU9OX05VTUJFUl9NSU5JTVVNLAogICAgYnV0IGluIG9yZGVyIHRvIGtlZXAgc21hbGwgdGFibGVzLCByZW51bWJlcmVkIGFzIFRBQkxFX0VSUk9SLCB3aGljaAogICAgaXMgdGhlIHNtYWxsZXN0IChub24gZXJyb3IpIHZhbHVlIG1pbnVzIDEuICAqLwogYmFzZV9udW1iZXIgdGFibGVfbmluZiA9IDA7CkBAIC0xOTgsMTggKzE5NiwxOCBAQAogCS8qIEZpbmQgYWxsIHJlZHVjdGlvbnMgZm9yIHRva2VuIEosIGFuZCByZWNvcmQgYWxsIHRoYXQgZG8gbm90CiAJICAgbWF0Y2ggQUNUUk9XW0pdLiAgKi8KIAlmb3IgKGkgPSAwOyBpIDwgcmVkcy0+bnVtOyBpICs9IDEpCi0JICBpZiAoYml0c2V0X3Rlc3QgKHJlZHMtPmxvb2tfYWhlYWRfdG9rZW5zW2ldLCBqKQorCSAgaWYgKGJpdHNldF90ZXN0IChyZWRzLT5sb29rYWhlYWRfdG9rZW5zW2ldLCBqKQogCSAgICAgICYmIChhY3Ryb3dbal0KIAkJICAhPSBydWxlX251bWJlcl9hc19pdGVtX251bWJlciAocmVkcy0+cnVsZXNbaV0tPm51bWJlcikpKQogCSAgICB7Ci0JICAgICAgYXNzZXJ0ICgwIDwgY29uZmxpY3RfbGlzdF9mcmVlKTsKKwkgICAgICBhdmVyICgwIDwgY29uZmxpY3RfbGlzdF9mcmVlKTsKIAkgICAgICBjb25mbGljdF9saXN0W2NvbmZsaWN0X2xpc3RfY250XSA9IHJlZHMtPnJ1bGVzW2ldLT5udW1iZXIgKyAxOwogCSAgICAgIGNvbmZsaWN0X2xpc3RfY250ICs9IDE7CiAJICAgICAgY29uZmxpY3RfbGlzdF9mcmVlIC09IDE7CiAJICAgIH0KIAogCS8qIExlYXZlIGEgMCBhdCB0aGUgZW5kLiAgKi8KLQlhc3NlcnQgKDAgPCBjb25mbGljdF9saXN0X2ZyZWUpOworCWF2ZXIgKDAgPCBjb25mbGljdF9saXN0X2ZyZWUpOwogCWNvbmZsaWN0X2xpc3RbY29uZmxpY3RfbGlzdF9jbnRdID0gMDsKIAljb25mbGljdF9saXN0X2NudCArPSAxOwogCWNvbmZsaWN0X2xpc3RfZnJlZSAtPSAxOwpAQCAtMjE5LDcgKzIxNyw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCBEZWNpZGUgd2hhdCB0byBkbyBmb3IgZWFjaCB0eXBlIG9mIHRva2VuIGlmIHNlZW4gYXMgdGhlICAgICAgICAgICB8Ci18IGxvb2stYWhlYWQgaW4gc3BlY2lmaWVkIHN0YXRlLiAgVGhlIHZhbHVlIHJldHVybmVkIGlzIHVzZWQgYXMgdGhlIHwKK3wgbG9va2FoZWFkIGluIHNwZWNpZmllZCBzdGF0ZS4gIFRoZSB2YWx1ZSByZXR1cm5lZCBpcyB1c2VkIGFzIHRoZSAgfAogfCBkZWZhdWx0IGFjdGlvbiAoeXlkZWZhY3QpIGZvciB0aGUgc3RhdGUuICBJbiBhZGRpdGlvbiwgQUNUUk9XIGlzICB8CiB8IGZpbGxlZCB3aXRoIHdoYXQgdG8gZG8gZm9yIGVhY2gga2luZCBvZiB0b2tlbiwgaW5kZXggYnkgc3ltYm9sICAgIHwKIHwgbnVtYmVyLCB3aXRoIHplcm8gbWVhbmluZyBkbyB0aGUgZGVmYXVsdCBhY3Rpb24uICBUaGUgdmFsdWUgICAgICAgfApAQCAtMjI3LDcgKzIyNSw3IEBACiB8IHNpdHVhdGlvbiBpcyBhbiBlcnJvci4gIFRoZSBwYXJzZXIgcmVjb2duaXplcyB0aGlzIHZhbHVlCSAgICB8CiB8IHNwZWNpYWxseS4JCQkJCQkJICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCBUaGlzIGlzIHdoZXJlIGNvbmZsaWN0cyBhcmUgcmVzb2x2ZWQuICBUaGUgbG9vcCBvdmVyIGxvb2stYWhlYWQgICB8Cit8IFRoaXMgaXMgd2hlcmUgY29uZmxpY3RzIGFyZSByZXNvbHZlZC4gIFRoZSBsb29wIG92ZXIgbG9va2FoZWFkICAgIHwKIHwgcnVsZXMgY29uc2lkZXJlZCBsb3dlci1udW1iZXJlZCBydWxlcyBsYXN0LCBhbmQgdGhlIGxhc3QgcnVsZSAgICAgfAogfCBjb25zaWRlcmVkIHRoYXQgbGlrZXMgYSB0b2tlbiBnZXRzIHRvIGhhbmRsZSBpdC4gICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKQEAgLTI0MSw3ICsyMzksNyBAQAogYWN0aW9uX3JvdyAoc3RhdGUgKnMpCiB7CiAgIGludCBpOwotICBydWxlICpkZWZhdWx0X3J1bGUgPSBOVUxMOworICBydWxlICpkZWZhdWx0X3JlZHVjdGlvbiA9IE5VTEw7CiAgIHJlZHVjdGlvbnMgKnJlZHMgPSBzLT5yZWR1Y3Rpb25zOwogICB0cmFuc2l0aW9ucyAqdHJhbnMgPSBzLT50cmFuc2l0aW9uczsKICAgZXJycyAqZXJycCA9IHMtPmVycnM7CkBAIC0yNTIsMTcgKzI1MCwxNyBAQAogICBmb3IgKGkgPSAwOyBpIDwgbnRva2VuczsgaSsrKQogICAgIGFjdHJvd1tpXSA9IGNvbmZscm93W2ldID0gMDsKIAotICBpZiAocmVkcy0+bG9va19haGVhZF90b2tlbnMpCisgIGlmIChyZWRzLT5sb29rYWhlYWRfdG9rZW5zKQogICAgIHsKICAgICAgIGludCBqOwogICAgICAgYml0c2V0X2l0ZXJhdG9yIGJpdGVyOwogICAgICAgLyogbG9vcCBvdmVyIGFsbCB0aGUgcnVsZXMgYXZhaWxhYmxlIGhlcmUgd2hpY2ggcmVxdWlyZQotCSBsb29rLWFoZWFkIChpbiByZXZlcnNlIG9yZGVyIHRvIGdpdmUgcHJlY2VkZW5jZSB0byB0aGUgZmlyc3QKKwkgbG9va2FoZWFkIChpbiByZXZlcnNlIG9yZGVyIHRvIGdpdmUgcHJlY2VkZW5jZSB0byB0aGUgZmlyc3QKIAkgcnVsZSkgKi8KICAgICAgIGZvciAoaSA9IHJlZHMtPm51bSAtIDE7IGkgPj0gMDsgLS1pKQogCS8qIGFuZCBmaW5kIGVhY2ggdG9rZW4gd2hpY2ggdGhlIHJ1bGUgZmluZHMgYWNjZXB0YWJsZQogCSAgIHRvIGNvbWUgbmV4dCAqLwotCUJJVFNFVF9GT1JfRUFDSCAoYml0ZXIsIHJlZHMtPmxvb2tfYWhlYWRfdG9rZW5zW2ldLCBqLCAwKQorCUJJVFNFVF9GT1JfRUFDSCAoYml0ZXIsIHJlZHMtPmxvb2thaGVhZF90b2tlbnNbaV0sIGosIDApCiAJewogCSAgLyogYW5kIHJlY29yZCB0aGlzIHJ1bGUgYXMgdGhlIHJ1bGUgdG8gdXNlIGlmIHRoYXQKIAkgICAgIHRva2VuIGZvbGxvd3MuICAqLwpAQCAtMzA1LDEzICszMDMsMjQgQEAKICAgICAgIGFjdHJvd1tzeW0tPm51bWJlcl0gPSBBQ1RJT05fTlVNQkVSX01JTklNVU07CiAgICAgfQogCisgIC8qIFR1cm4gb2ZmIGRlZmF1bHQgcmVkdWN0aW9ucyB3aGVyZSByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIuICBTZWUKKyAgICAgc3RhdGVfbG9va2FoZWFkX3Rva2Vuc19jb3VudCBpbiBsYWxyLmMgdG8gdW5kZXJzdGFuZCB3aGVuIHN0YXRlcyBhcmUKKyAgICAgbGFiZWxlZCBhcyBjb25zaXN0ZW50LiAgKi8KKyAgeworICAgIGNoYXIgKmRlZmF1bHRfcmVkdWN0aW9ucyA9CisgICAgICBtdXNjbGVfcGVyY2VudF9kZWZpbmVfZ2V0ICgibHIuZGVmYXVsdC1yZWR1Y3Rpb25zIik7CisgICAgaWYgKDAgIT0gc3RyY21wIChkZWZhdWx0X3JlZHVjdGlvbnMsICJtb3N0IikgJiYgIXMtPmNvbnNpc3RlbnQpCisgICAgICBub2RlZmF1bHQgPSB0cnVlOworICAgIGZyZWUgKGRlZmF1bHRfcmVkdWN0aW9ucyk7CisgIH0KKwogICAvKiBOb3cgZmluZCB0aGUgbW9zdCBjb21tb24gcmVkdWN0aW9uIGFuZCBtYWtlIGl0IHRoZSBkZWZhdWx0IGFjdGlvbgogICAgICBmb3IgdGhpcyBzdGF0ZS4gICovCiAKICAgaWYgKHJlZHMtPm51bSA+PSAxICYmICFub2RlZmF1bHQpCiAgICAgewogICAgICAgaWYgKHMtPmNvbnNpc3RlbnQpCi0JZGVmYXVsdF9ydWxlID0gcmVkcy0+cnVsZXNbMF07CisJZGVmYXVsdF9yZWR1Y3Rpb24gPSByZWRzLT5ydWxlc1swXTsKICAgICAgIGVsc2UKIAl7CiAJICBpbnQgbWF4ID0gMDsKQEAgLTMyOCw3ICszMzcsNyBAQAogCSAgICAgIGlmIChjb3VudCA+IG1heCkKIAkJewogCQkgIG1heCA9IGNvdW50OwotCQkgIGRlZmF1bHRfcnVsZSA9IHI7CisJCSAgZGVmYXVsdF9yZWR1Y3Rpb24gPSByOwogCQl9CiAJICAgIH0KIApAQCAtMzQyLDE3ICszNTEsMTggQEAKIAkgICAgewogCSAgICAgIGludCBqOwogCSAgICAgIGZvciAoaiA9IDA7IGogPCBudG9rZW5zOyBqKyspCi0JCWlmIChhY3Ryb3dbal0gPT0gcnVsZV9udW1iZXJfYXNfaXRlbV9udW1iZXIgKGRlZmF1bHRfcnVsZS0+bnVtYmVyKQorCQlpZiAoYWN0cm93W2pdCisgICAgICAgICAgICAgICAgICAgID09IHJ1bGVfbnVtYmVyX2FzX2l0ZW1fbnVtYmVyIChkZWZhdWx0X3JlZHVjdGlvbi0+bnVtYmVyKQogCQkgICAgJiYgISAobm9uZGV0ZXJtaW5pc3RpY19wYXJzZXIgJiYgY29uZmxyb3dbal0pKQogCQkgIGFjdHJvd1tqXSA9IDA7CiAJICAgIH0KIAl9CiAgICAgfQogCi0gIC8qIElmIGhhdmUgbm8gZGVmYXVsdCBydWxlLCB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4KKyAgLyogSWYgaGF2ZSBubyBkZWZhdWx0IHJlZHVjdGlvbiwgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3IuCiAgICAgIFNvIHJlcGxhY2UgYW55IGFjdGlvbiB3aGljaCBzYXlzICJlcnJvciIgd2l0aCAidXNlIGRlZmF1bHQiLiAgKi8KIAotICBpZiAoIWRlZmF1bHRfcnVsZSkKKyAgaWYgKCFkZWZhdWx0X3JlZHVjdGlvbikKICAgICBmb3IgKGkgPSAwOyBpIDwgbnRva2VuczsgaSsrKQogICAgICAgaWYgKGFjdHJvd1tpXSA9PSBBQ1RJT05fTlVNQkVSX01JTklNVU0pCiAJYWN0cm93W2ldID0gMDsKQEAgLTM2MCw3ICszNzAsNyBAQAogICBpZiAoY29uZmxpY3RlZCkKICAgICBjb25mbGljdF9yb3cgKHMpOwogCi0gIHJldHVybiBkZWZhdWx0X3J1bGU7CisgIHJldHVybiBkZWZhdWx0X3JlZHVjdGlvbjsKIH0KIAogCkBAIC00MTAsNyArNDIwLDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IEZpZ3VyZSBvdXQgdGhlIGFjdGlvbnMgZm9yIHRoZSBzcGVjaWZpZWQgc3RhdGUsIGluZGV4ZWQgYnkgICAgICAgIHwKLXwgbG9vay1haGVhZCB0b2tlbiB0eXBlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBsb29rYWhlYWQgdG9rZW4gdHlwZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgVGhlIFlZREVGQUNUIHRhYmxlIGlzIG91dHB1dCBub3cuICBUaGUgZGV0YWlsZWQgaW5mbyBpcyBzYXZlZCBmb3IgfAogfCBwdXR0aW5nIGludG8gWVlUQUJMRSBsYXRlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CkBAIC00NDEsOCArNDUxLDggQEAKIAogICBmb3IgKGkgPSAwOyBpIDwgbnN0YXRlczsgKytpKQogICAgIHsKLSAgICAgIHJ1bGUgKmRlZmF1bHRfcnVsZSA9IGFjdGlvbl9yb3cgKHN0YXRlc1tpXSk7Ci0gICAgICB5eWRlZmFjdFtpXSA9IGRlZmF1bHRfcnVsZSA/IGRlZmF1bHRfcnVsZS0+bnVtYmVyICsgMSA6IDA7CisgICAgICBydWxlICpkZWZhdWx0X3JlZHVjdGlvbiA9IGFjdGlvbl9yb3cgKHN0YXRlc1tpXSk7CisgICAgICB5eWRlZmFjdFtpXSA9IGRlZmF1bHRfcmVkdWN0aW9uID8gZGVmYXVsdF9yZWR1Y3Rpb24tPm51bWJlciArIDEgOiAwOwogICAgICAgc2F2ZV9yb3cgKGkpOwogCiAgICAgICAvKiBOb3cgdGhhdCB0aGUgcGFyc2VyIHdhcyBjb21wdXRlZCwgd2UgY2FuIGZpbmQgd2hpY2ggcnVsZXMgYXJlCkBAIC02NzMsMTQgKzY4MywxNCBAQAogICBiYXNlX251bWJlciAqdG8gPSB0b3NbaV07CiAgIHVuc2lnbmVkIGludCAqY29uZmxpY3RfdG8gPSBjb25mbGljdF90b3NbaV07CiAKLSAgYXNzZXJ0ICh0KTsKKyAgYXZlciAodCAhPSAwKTsKIAogICBmb3IgKGogPSBsb3d6ZXJvIC0gZnJvbVswXTsgOyBqKyspCiAgICAgewogICAgICAgaW50IGs7CiAgICAgICBib29sIG9rID0gdHJ1ZTsKIAotICAgICAgYXNzZXJ0IChqIDwgdGFibGVfc2l6ZSk7CisgICAgICBhdmVyIChqIDwgdGFibGVfc2l6ZSk7CiAKICAgICAgIGZvciAoayA9IDA7IG9rICYmIGsgPCB0OyBrKyspCiAJewpAQCAtNzEzLDcgKzcyMyw3IEBACiAJICBpZiAobG9jID4gaGlnaCkKIAkgICAgaGlnaCA9IGxvYzsKIAotCSAgYXNzZXJ0IChCQVNFX01JTklNVU0gPD0gaiAmJiBqIDw9IEJBU0VfTUFYSU1VTSk7CisJICBhdmVyIChCQVNFX01JTklNVU0gPD0gaiAmJiBqIDw9IEJBU0VfTUFYSU1VTSk7CiAJICByZXR1cm4gajsKIAl9CiAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL3RhYmxlcy5oIGIvc3JjL3RhYmxlcy5oCmluZGV4IDkxMTkxN2YuLjhiNWMxZmEgMTAwNjQ0Ci0tLSBhL3NyYy90YWJsZXMuaAorKysgYi9zcmMvdGFibGVzLmgKQEAgLTEsMjIgKzEsMjEgQEAKIC8qIFByZXBhcmUgdGhlIExBTFIgYW5kIEdMUiBwYXJzZXIgdGFibGVzLgotICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCiAKLSAgIEJpc29uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLSAgIEJpc29uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIEJpc29uOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAgIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpZm5kZWYgVEFCTEVTX0hfCiAjIGRlZmluZSBUQUJMRVNfSF8KQEAgLTQ3LDMzICs0NiwxMyBAQAogCiAgICBZWVNUT1NbU10gPSB0aGUgc3ltYm9sIG51bWJlciBvZiB0aGUgc3ltYm9sIHRoYXQgbGVhZHMgdG8gc3RhdGUgUy4KIAotICAgWVlERUZBQ1RbU10gPSBkZWZhdWx0IHJ1bGUgdG8gcmVkdWNlIHdpdGggaW4gc3RhdGUgcywgd2hlbiBZWVRBQkxFCi0gICBkb2Vzbid0IHNwZWNpZnkgc29tZXRoaW5nIGVsc2UgdG8gZG8uICBaZXJvIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuCi0gICBlcnJvci4KLQotICAgWVlERUZHT1RPW0ldID0gZGVmYXVsdCBzdGF0ZSB0byBnbyB0byBhZnRlciBhIHJlZHVjdGlvbiBvZiBhIHJ1bGUKLSAgIHRoYXQgZ2VuZXJhdGVzIHZhcmlhYmxlIE5UT0tFTlMgKyBJLCBleGNlcHQgd2hlbiBZWVRBQkxFIHNwZWNpZmllcwotICAgc29tZXRoaW5nIGVsc2UgdG8gZG8uCi0KLSAgIFlZUEFDVFtTXSA9IGluZGV4IGluIFlZVEFCTEUgb2YgdGhlIHBvcnRpb24gZGVzY3JpYmluZyBzdGF0ZSBTLgotICAgVGhlIGxvb2stYWhlYWQgdG9rZW4ncyB0eXBlIGlzIHVzZWQgdG8gaW5kZXggdGhhdCBwb3J0aW9uIHRvIGZpbmQKLSAgIG91dCB3aGF0IHRvIGRvLgotCi0gICBJZiB0aGUgdmFsdWUgaW4gWVlUQUJMRSBpcyBwb3NpdGl2ZSwgd2Ugc2hpZnQgdGhlIHRva2VuIGFuZCBnbyB0bwotICAgdGhhdCBzdGF0ZS4KLQotICAgSWYgdGhlIHZhbHVlIGlzIG5lZ2F0aXZlLCBpdCBpcyBtaW51cyBhIHJ1bGUgbnVtYmVyIHRvIHJlZHVjZSBieS4KLQotICAgSWYgdGhlIHZhbHVlIGlzIHplcm8sIHRoZSBkZWZhdWx0IGFjdGlvbiBmcm9tIFlZREVGQUNUW1NdIGlzIHVzZWQuCi0KLSAgIFlZUEdPVE9bSV0gPSB0aGUgaW5kZXggaW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nIHdoYXQgdG8KLSAgIGRvIGFmdGVyIHJlZHVjaW5nIGEgcnVsZSB0aGF0IGRlcml2ZXMgdmFyaWFibGUgSSArIE5UT0tFTlMuICBUaGlzCi0gICBwb3J0aW9uIGlzIGluZGV4ZWQgYnkgdGhlIHBhcnNlciBzdGF0ZSBudW1iZXIsIFMsIGFzIG9mIGJlZm9yZSB0aGUKLSAgIHRleHQgZm9yIHRoaXMgbm9udGVybWluYWwgd2FzIHJlYWQuICBUaGUgdmFsdWUgZnJvbSBZWVRBQkxFIGlzIHRoZQotICAgc3RhdGUgdG8gZ28gdG8gaWYgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4gWVlDSEVDSyBpcyBTLgorICAgWVlGSU5BTCA9IHRoZSBzdGF0ZSBudW1iZXIgb2YgdGhlIHRlcm1pbmF0aW9uIHN0YXRlLgogCiAgICBZWVRBQkxFID0gYSB2ZWN0b3IgZmlsbGVkIHdpdGggcG9ydGlvbnMgZm9yIGRpZmZlcmVudCB1c2VzLCBmb3VuZAotICAgdmlhIFlZUEFDVCBhbmQgWVlQR09UTy4KKyAgIHZpYSBZWVBBQ1QgYW5kIFlZUEdPVE8sIGRlc2NyaWJlZCBiZWxvdy4KKworICAgWVlMQVNUICggPSBoaWdoKSB0aGUgbnVtYmVyIG9mIHRoZSBsYXN0IGVsZW1lbnQgb2YgWVlUQUJMRSwgaS5lLiwKKyAgIHNpemVvZiAoWVlUQUJMRSkgLSAxLgogCiAgICBZWUNIRUNLID0gYSB2ZWN0b3IgaW5kZXhlZCBpbiBwYXJhbGxlbCB3aXRoIFlZVEFCTEUuICBJdCBpbmRpY2F0ZXMsCiAgICBpbiBhIHJvdW5kYWJvdXQgd2F5LCB0aGUgYm91bmRzIG9mIHRoZSBwb3J0aW9uIHlvdSBhcmUgdHJ5aW5nIHRvCkBAIC04NSwxMCArNjQsNTMgQEAKICAgIGRlZmF1bHQgKGZyb20gWVlERUZBQ1Qgb3IgWVlERUZHT1RPKSBzaG91bGQgYmUgdXNlZC4gIE90aGVyd2lzZSwKICAgIFlZVEFCTEVbUCtJXSBzaG91bGQgYmUgdXNlZC4KIAotICAgWVlGSU5BTCA9IHRoZSBzdGF0ZSBudW1iZXIgb2YgdGhlIHRlcm1pbmF0aW9uIHN0YXRlLgorICAgWVlERUZBQ1RbU10gPSBkZWZhdWx0IHJlZHVjdGlvbiBudW1iZXIgaW4gc3RhdGUgcy4gIFBlcmZvcm1lZCB3aGVuCisgICBZWVRBQkxFIGRvZXNuJ3Qgc3BlY2lmeSBzb21ldGhpbmcgZWxzZSB0byBkby4gIFplcm8gbWVhbnMgdGhlIGRlZmF1bHQKKyAgIGlzIGFuIGVycm9yLgogCi0gICBZWUxBU1QgKCA9IGhpZ2gpIHRoZSBudW1iZXIgb2YgdGhlIGxhc3QgZWxlbWVudCBvZiBZWVRBQkxFLCBpLmUuLAotICAgc2l6ZW9mIChZWVRBQkxFKSAtIDEuICAqLworICAgWVlERUZHT1RPW0ldID0gZGVmYXVsdCBzdGF0ZSB0byBnbyB0byBhZnRlciBhIHJlZHVjdGlvbiBvZiBhIHJ1bGUKKyAgIHRoYXQgZ2VuZXJhdGVzIHZhcmlhYmxlIE5UT0tFTlMgKyBJLCBleGNlcHQgd2hlbiBZWVRBQkxFIHNwZWNpZmllcworICAgc29tZXRoaW5nIGVsc2UgdG8gZG8uCisKKyAgIFlZUEFDVFtTXSA9IGluZGV4IGluIFlZVEFCTEUgb2YgdGhlIHBvcnRpb24gZGVzY3JpYmluZyBzdGF0ZSBTLgorICAgVGhlIGxvb2thaGVhZCB0b2tlbidzIG51bWJlciwgSSwgaXMgdXNlZCB0byBpbmRleCB0aGF0IHBvcnRpb24gb2YKKyAgIFlZVEFCTEUgdG8gZmluZCBvdXQgd2hhdCBhY3Rpb24gdG8gcGVyZm9ybS4KKworICAgSWYgWVlQQUNUW1NdID09IFlZUEFDVF9OSU5GLCBpZiBZWVBBQ1RbU10gKyBJIGlzIG91dHNpZGUgdGhlIGJvdW5kcworICAgb2YgWVlUQUJMRSAoZnJvbSAwIHRvIFlZTEFTVCksIG9yIEkgaXMgb3V0c2lkZSB0aGUgYm91bmRzIGZvciBwb3J0aW9uCisgICBTICh0aGF0IGlzLCBZWUNIRUNLW1lZUEFDVFtTXSArIEldICE9IEkpLCB0aGVuIHRoZSBkZWZhdWx0IGFjdGlvbgorICAgKHRoYXQgaXMsIFlZREVGQUNUW1NdKSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIFlZVEFCTEUuICBPdGhlcndpc2UsCisgICB0aGUgdmFsdWUgWVlUQUJMRVtZWVBBQ1RbU10gKyBJXSBzaG91bGQgYmUgdXNlZCBldmVuIGlmCisgICBZWVBBQ1RbU10gPCAwLgorCisgICBJZiB0aGUgdmFsdWUgaW4gWVlUQUJMRSBpcyBwb3NpdGl2ZSwgd2Ugc2hpZnQgdGhlIHRva2VuIGFuZCBnbyB0bworICAgdGhhdCBzdGF0ZS4KKworICAgSWYgdGhlIHZhbHVlIGlzIG5lZ2F0aXZlLCBpdCBpcyBtaW51cyBhIHJ1bGUgbnVtYmVyIHRvIHJlZHVjZSBieS4KKworICAgSWYgdGhlIHZhbHVlIGlzIFlZVEFCTEVfTklORiwgaXQncyBhIHN5bnRheCBlcnJvci4KKworICAgWVlQR09UT1tJXSA9IHRoZSBpbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcgd2hhdCB0bworICAgZG8gYWZ0ZXIgcmVkdWNpbmcgYSBydWxlIHRoYXQgZGVyaXZlcyB2YXJpYWJsZSBJICsgTlRPS0VOUy4gIFRoaXMKKyAgIHBvcnRpb24gaXMgaW5kZXhlZCBieSB0aGUgcGFyc2VyIHN0YXRlIG51bWJlciwgUywgYXMgb2YgYmVmb3JlIHRoZQorICAgdGV4dCBmb3IgdGhpcyBub250ZXJtaW5hbCB3YXMgcmVhZC4KKworICAgSWYgWVlQR09UT1tJXSArIFMgaXMgb3V0c2lkZSB0aGUgYm91bmRzIG9mIFlZVEFCTEUgKGZyb20gMCB0byBZWUxBU1QpCisgICBvciBpZiBTIGlzIG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgcG9ydGlvbiBmb3IgSSAodGhhdCBpcywKKyAgIFlZQ0hFQ0tbWVlQR09UT1tJXSArIFNdICE9IFMpLCB0aGVuIHRoZSBkZWZhdWx0IHN0YXRlICh0aGF0IGlzLAorICAgWVlERUZHT1RPW0ldKSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIFlZVEFCTEUuICBPdGhlcndpc2UsCisgICBZWVRBQkxFW1lZUEdPVE9bSV0gKyBTXSBpcyB0aGUgc3RhdGUgdG8gZ28gdG8gZXZlbiBpZiBZWVBHT1RPW0ldIDwgMC4KKworICAgV2hlbiB0aGUgYWJvdmUgWVlQQUNULCBZWVBHT1RPLCBhbmQgWVlDSEVDSyB0ZXN0cyBkZXRlcm1pbmUgdGhhdCBhCisgICB2YWx1ZSBmcm9tIFlZVEFCTEUgc2hvdWxkIGJlIHVzZWQsIHRoYXQgdmFsdWUgaXMgbmV2ZXIgemVybywgc28gaXQgaXMKKyAgIHVzZWxlc3MgdG8gY2hlY2sgZm9yIHplcm8uICBXaGVuIHRob3NlIHRlc3RzIGluZGljYXRlIHRoYXQgdGhlIHZhbHVlCisgICBmcm9tIFlZREVGQUNUIG9yIFlZREVGR09UTyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLCB0aGUgdmFsdWUgZnJvbQorICAgWVlUQUJMRSAqbWlnaHQqIGJlIHplcm8sIHdoaWNoLCBhcyBhIGNvbnNlcXVlbmNlIG9mIHRoZSB3YXkgaW4gd2hpY2gKKyAgIHRoZSB0YWJsZXMgYXJlIGNvbnN0cnVjdGVkLCBhbHNvIGhhcHBlbnMgdG8gaW5kaWNhdGUgdGhhdCBZWURFRkFDVCBvcgorICAgWVlERUZHT1RPIHNob3VsZCBiZSB1c2VkLiAgSG93ZXZlciwgdGhlIFlZVEFCTEUgdmFsdWUgY2Fubm90IGJlCisgICB0cnVzdGVkIHdoZW4gdGhlIFlZREVGQUNUIG9yIFlZREVGR09UTyB2YWx1ZSBzaG91bGQgYmUgdXNlZC4gIEluCisgICBzdW1tYXJ5LCBmb3JnZXQgYWJvdXQgemVybyB2YWx1ZXMgaW4gWVlUQUJMRS4KKyovCiAKIGV4dGVybiBpbnQgbnZlY3RvcnM7CiAKZGlmZiAtLWdpdCBhL3NyYy91bmlxc3RyLmMgYi9zcmMvdW5pcXN0ci5jCmluZGV4IDg4MDRhODAuLjYyZDA5Y2EgMTAwNjQ0Ci0tLSBhL3NyYy91bmlxc3RyLmMKKysrIGIvc3JjL3VuaXFzdHIuYwpAQCAtMSwyMyArMSwyMSBAQAogLyogS2VlcCBhIHVuaXF1ZSBjb3B5IG9mIHN0cmluZ3MuCiAKLSAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDA1LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgogCi0gICBCaXNvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLSAgIEJpc29uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCBCaXNvbjsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjaW5jbHVkZSAic3lzdGVtLmgiCkBAIC0yNSw2ICsyMyw3IEBACiAjaW5jbHVkZSA8ZXJyb3IuaD4KICNpbmNsdWRlIDxoYXNoLmg+CiAjaW5jbHVkZSA8cXVvdGVhcmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KIAogI2luY2x1ZGUgInVuaXFzdHIuaCIKIApAQCAtNDksMTEgKzQ4LDI3IEBACiAgICAgewogICAgICAgLyogRmlyc3QgaW5zZXJ0aW9uIGluIHRoZSBoYXNoLiAqLwogICAgICAgcmVzID0geHN0cmR1cCAoc3RyKTsKLSAgICAgIGhhc2hfaW5zZXJ0ICh1bmlxc3Ryc190YWJsZSwgcmVzKTsKKyAgICAgIGlmICghaGFzaF9pbnNlcnQgKHVuaXFzdHJzX3RhYmxlLCByZXMpKQorICAgICAgICB4YWxsb2NfZGllICgpOwogICAgIH0KICAgcmV0dXJuIHJlczsKIH0KIAordW5pcXN0cgordW5pcXN0cl92c3ByaW50ZiAoY2hhciBjb25zdCAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgc2l6ZV90IGxlbmd0aDsKKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisgIGxlbmd0aCA9IHZzbnByaW50ZiAoTlVMTCwgMCwgZm9ybWF0LCBhcmdzKTsKKyAgdmFfZW5kIChhcmdzKTsKKworICBjaGFyIHJlc1tsZW5ndGggKyAxXTsKKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisgIHZzcHJpbnRmIChyZXMsIGZvcm1hdCwgYXJncyk7CisgIHZhX2VuZCAoYXJncyk7CisgIHJldHVybiB1bmlxc3RyX25ldyAocmVzKTsKK30KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IEFib3J0IGlmIFMgaXMgbm90IGEgdW5pcXN0ci4gIHwKZGlmZiAtLWdpdCBhL3NyYy91bmlxc3RyLmggYi9zcmMvdW5pcXN0ci5oCmluZGV4IGFiNDgyYmUuLjY3N2VjYzQgMTAwNjQ0Ci0tLSBhL3NyYy91bmlxc3RyLmgKKysrIGIvc3JjL3VuaXFzdHIuaApAQCAtMSwyMyArMSwyMSBAQAogLyogS2VlcGluZyBhIHVuaXF1ZSBjb3B5IG9mIHN0cmluZ3MuCiAKLSAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDAzLCAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJpc29uLCB0aGUgR05VIENvbXBpbGVyIENvbXBpbGVyLgogCi0gICBCaXNvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKLSAgIEJpc29uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCBCaXNvbjsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAjaWZuZGVmIFVOSVFTVFJfSF8KICMgZGVmaW5lIFVOSVFTVFJfSF8KQEAgLTMxLDggKzI5LDE4IEBACiAvKiBSZXR1cm4gdGhlIHVuaXFzdHIgZm9yIFNUUi4gICovCiB1bmlxc3RyIHVuaXFzdHJfbmV3IChjaGFyIGNvbnN0ICpzdHIpOwogCisvKiBSZXR1cm4gYSB1bmlxc3RyIGJ1aWx0IGJ5IHZzcHJpbnRmLiAgSW4gb3JkZXIgdG8gc2ltcGx5IGNvbmNhdGVuYXRlCisgICBzdHJpbmdzLCB1c2UgVU5JUVNUUl9DT05DQVQsIHdoaWNoIGlzIGEgY29udmVuaWVudCB3cmFwcGVyIGFyb3VuZAorICAgdGhpcyBmdW5jdGlvbi4gICovCit1bmlxc3RyIHVuaXFzdHJfdnNwcmludGYgKGNoYXIgY29uc3QgKmZvcm1hdCwgLi4uKQorICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMSwgMikpKTsKKwogLyogVHdvIHVuaXFzdHIgdmFsdWVzIGhhdmUgdGhlIHNhbWUgdmFsdWUgaWZmIHRoZXkgYXJlIHRoZSBzYW1lLiAgKi8KLSNkZWZpbmUgVU5JUVNUUl9FUShVU1RSMSwgVVNUUjIpICgoVVNUUjEpID09IChVU1RSMikpCisjZGVmaW5lIFVOSVFTVFJfRVEoVVNUUjEsIFVTVFIyKSAoISEoKFVTVFIxKSA9PSAoVVNUUjIpKSkKKworLyogQ29tcGFyZSB0d28gdW5pcXN0ciBhIGxhIHN0cmNtcDogbmVnYXRpdmUgZm9yIDwsIG51bCBmb3IgPSwgYW5kCisgICBwb3NpdGl2ZSBmb3IgPi4gIFVuZGVmaW5lZCBvcmRlciwgcmVsaWVzIG9uIGFkZHJlc3Nlcy4gICovCisjZGVmaW5lIFVOSVFTVFJfQ01QKFVTVFIxLCBVU1RSMikgKChVU1RSMSkgLSAoVVNUUjIpKQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCBJbml0aWFsaXppbmcsIGRlc3Ryb3lpbmcsIGRlYnVnZ2luZy4gIHwKQEAgLTUwLDQgKzU4LDQxIEBACiAvKiBSZXBvcnQgdGhlbSBhbGwuICAqLwogdm9pZCB1bmlxc3Ryc19wcmludCAodm9pZCk7CiAKKy8qLS0tLS0tLS0tLS0tLS0tLS4KK3wgQ29uY2F0ZW5hdGlvbi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tKi8KKworLyogQ29uY2F0ZW5hdGUgYXQgbW9zdCAyMCBzdHJpbmdzIGFuZCByZXR1cm4gYSB1bmlxc3RyLiAgVGhlIGdvYWwgb2YKKyAgIHRoaXMgbWFjcm8gaXMgdG8gbWFrZSB0aGUgY2FsbGVyJ3MgY29kZSBhIGxpdHRsZSBtb3JlIHN1Y2NpbmN0CisgICB3aXRob3V0IGEgdHJpdmlhbCB1bmlxc3RyX3ZzcHJpbnRmIGZvcm1hdCBzdHJpbmcgdG8gbWFpbnRhaW4KKyAgIChmb3IgZXhhbXBsZSwgIiVzJXMlcyIpIHdoaWxlIHN0aWxsIGJlbmVmaXR0aW5nIGZyb20gZ2NjJ3MgdHlwZQorICAgY2hlY2tpbmcuICBVbmZvcnR1bmF0ZWx5LCBiZWNhdXNlIG9mIHRoZSBtaXNzaW5nIGZvcm1hdCBzdHJpbmcgaW4gdGhlCisgICBtYWNybyBpbnZvY2F0aW9uLCB0aGUgYXJndW1lbnQgbnVtYmVyIHJlcG9ydGVkIGJ5IGdjYyBmb3IgYSBiYWQKKyAgIGFyZ3VtZW50IHR5cGUgaXMgMSB0b28gbGFyZ2UuICAqLworI2RlZmluZSBVTklRU1RSX0NPTkNBVCguLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHVuaXFzdHJfdnNwcmludGYgKFVOSVFTVFJfR0VOX0ZPUk1BVCAoX19WQV9BUkdTX18sICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiLCAiJXMiLCAiJXMiLCAiJXMiLCAiJXMiLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIsICIlcyIsICIlcyIsICIlcyIsICIlcyIsICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiwgIiVzIiwgIiVzIiwgIiVzIiwgIiVzIiwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiLCAiJXMiLCAiJXMiLCAiJXMiLCAiJXMiKSwgXAorICAgICAgICAgICAgICAgICAgICBfX1ZBX0FSR1NfXykKKworI2RlZmluZSBVTklRU1RSX0dFTl9GT1JNQVQoRjEsICBGMiwgIEYzLCAgRjQsICBGNSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEY2LCAgRjcsICBGOCwgIEY5LCAgRjEwLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGMTEsIEYxMiwgRjEzLCBGMTQsIEYxNSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRjE2LCBGMTcsIEYxOCwgRjE5LCBGMjAsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikgICAgICAgICAgICAgICAgICAgICBcCisgIFVOSVFTVFJfR0VOX0ZPUk1BVF8gKF9fVkFfQVJHU19fLCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAiIiwgIiIsICIiLCAiIiwgIiIsICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIiIsICIiLCAiIiwgIiIsICIiLCAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICIiLCAiIiwgIiIsICIiLCAiIiwgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAiIiwgIiIsICIiLCAiIiwgIiIpCisKKyNkZWZpbmUgVU5JUVNUUl9HRU5fRk9STUFUXyhGMSwgIEYyLCAgRjMsICBGNCwgIEY1LCAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRjYsICBGNywgIEY4LCAgRjksICBGMTAsICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYxMSwgRjEyLCBGMTMsIEYxNCwgRjE1LCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGMTYsIEYxNywgRjE4LCBGMTksIEYyMCwgLi4uKSBcCisgIEYxICBGMiAgRjMgIEY0ICBGNSAgRjYgIEY3ICBGOCAgRjkgIEYxMCAgICAgICAgICAgICAgICAgXAorICBGMTEgRjEyIEYxMyBGMTQgRjE1IEYxNiBGMTcgRjE4IEYxOSBGMjAKKwogI2VuZGlmIC8qICEgZGVmaW5lZCBVTklRU1RSX0hfICovCmRpZmYgLS1naXQgYS9zcmMvdmNnLmMgYi9zcmMvdmNnLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ZmJiNjQuLjAwMDAwMDAKLS0tIGEvc3JjL3ZjZy5jCisrKyAvZGV2L251bGwKQEAgLTEsODQxICswLDAgQEAKLS8qIFZDRyBkZXNjcmlwdGlvbiBoYW5kbGVyIGZvciBCaXNvbi4KLQotICAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUKLSAgIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCi0KLSAgIEJpc29uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgQmlzb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCBCaXNvbjsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwotCi0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0jaW5jbHVkZSAic3lzdGVtLmgiCi0KLSNpbmNsdWRlIDxxdW90ZWFyZy5oPgotCi0jaW5jbHVkZSAidmNnLmgiCi0jaW5jbHVkZSAidmNnX2RlZmF1bHRzLmgiCi0KLS8qIFJldHVybiBhbiB1bmFtYmlndW91cyBwcmludGFibGUgcmVwcmVzZW50YXRlZCwgZm9yIE5BTUUsIHN1aXRhYmxlCi0gICBmb3IgQyBzdHJpbmdzLiAgVXNlIHNsb3QgMiBzaW5jZSB0aGUgdXNlciBtYXkgdXNlIHNsb3RzIDAgYW5kIDEuCi0gICAqLwotCi1zdGF0aWMgY2hhciBjb25zdCAqCi1xdW90ZSAoY2hhciBjb25zdCAqbmFtZSkKLXsKLSAgcmV0dXJuIHF1b3RlYXJnX25fc3R5bGUgKDIsIGNfcXVvdGluZ19zdHlsZSwgbmFtZSk7Ci19Ci0KLQotLyogSW5pdGlhbGl6ZSBhIGdyYXBoIHdpdGggdGhlIGRlZmF1bHQgdmFsdWVzLiAqLwotdm9pZAotbmV3X2dyYXBoIChncmFwaCAqZykKLXsKLSAgZy0+dGl0bGUgPSBHX1RJVExFOwotICBnLT5sYWJlbCA9IEdfTEFCRUw7Ci0KLSAgZy0+aW5mb3NbMF0gPSBHX0lORk9TMTsKLSAgZy0+aW5mb3NbMV0gPSBHX0lORk9TMjsKLSAgZy0+aW5mb3NbMl0gPSBHX0lORk9TMzsKLQotICBnLT5jb2xvciA9IEdfQ09MT1I7Ci0gIGctPnRleHRjb2xvciA9IEdfVEVYVENPTE9SOwotICBnLT5ib3JkZXJjb2xvciA9IEdfQk9SREVSQ09MT1I7Ci0KLSAgZy0+d2lkdGggPSBHX1dJRFRIOwotICBnLT5oZWlnaHQgPSBHX0hFSUdIVDsKLSAgZy0+Ym9yZGVyd2lkdGggPSBHX0JPUkRFUldJRFRIOwotICBnLT54ID0gR19YOwotICBnLT55ID0gR19ZOwotICBnLT5mb2xkaW5nID0gR19GT0xESU5HOwotICBnLT5zaHJpbmsgPSBHX1NIUklOSzsKLSAgZy0+c3RyZXRjaCA9IEdfU1RSRVRDSDsKLQotICBnLT50ZXh0bW9kZSA9IEdfVEVYVE1PREU7Ci0gIGctPnNoYXBlID0gR19TSEFQRTsKLQotICBnLT52ZXJ0aWNhbF9vcmRlciA9IEdfVkVSVElDQUxfT1JERVI7Ci0gIGctPmhvcml6b250YWxfb3JkZXIgPSBHX0hPUklaT05UQUxfT1JERVI7Ci0KLSAgZy0+eG1heCA9IEdfWE1BWDsgLyogTm90IG91dHB1dC4gKi8KLSAgZy0+eW1heCA9IEdfWU1BWDsgLyogTm90IG91dHB1dC4gKi8KLQotICBnLT54YmFzZSA9IEdfWEJBU0U7Ci0gIGctPnliYXNlID0gR19ZQkFTRTsKLQotICBnLT54c3BhY2UgPSBHX1hTUEFDRTsKLSAgZy0+eXNwYWNlID0gR19ZU1BBQ0U7Ci0gIGctPnhsc3BhY2UgPSBHX1hMU1BBQ0U7IC8qIE5vdCBvdXRwdXQuICovCi0KLSAgZy0+eHJhc3RlciA9IEdfWFJBU1RFUjsKLSAgZy0+eXJhc3RlciA9IEdfWVJBU1RFUjsKLSAgZy0+eGxyYXN0ZXIgPSBHX1hMUkFTVEVSOwotCi0gIGctPmhpZGRlbiA9IEdfSElEREVOOyAvKiBObyBkZWZhdWx0IHZhbHVlLiAqLwotCi0gIGctPmNsYXNzbmFtZSA9IEdfQ0xBU1NOQU1FOyAvKiBObyBjbGFzcyBuYW1lIGFzc29jaWF0aW9uLiAqLwotCi0gIGctPmxheW91dF9kb3duZmFjdG9yID0gR19MQVlPVVRfRE9XTkZBQ1RPUjsKLSAgZy0+bGF5b3V0X3VwZmFjdG9yID0gR19MQVlPVVRfVVBGQUNUT1I7Ci0gIGctPmxheW91dF9uZWFyZmFjdG9yID0gR19MQVlPVVRfTkVBUkZBQ1RPUjsKLSAgZy0+bGF5b3V0X3NwbGluZWZhY3RvciA9IEdfTEFZT1VUX1NQTElORUZBQ1RPUjsKLQotICBnLT5sYXRlX2VkZ2VfbGFiZWxzID0gR19MQVRFX0VER0VfTEFCRUxTOwotICBnLT5kaXNwbGF5X2VkZ2VfbGFiZWxzID0gR19ESVNQTEFZX0VER0VfTEFCRUxTOwotICBnLT5kaXJ0eV9lZGdlX2xhYmVscyA9IEdfRElSVFlfRURHRV9MQUJFTFM7Ci0gIGctPmZpbmV0dW5pbmcgPSBHX0ZJTkVUVU5JTkc7Ci0gIGctPmlnbm9yZV9zaW5nbGVzID0gR19JR05PUkVfU0lOR0xFUzsKLSAgZy0+cHJpb3JpdHlfcGhhc2UgPSBHX1BSSU9SSVRZX1BIQVNFOwotICBnLT5tYW5oYXR0YW5fZWRnZXMgPSBHX01BTkhBVFRBTl9FREdFUzsKLSAgZy0+c21hbmhhdHRhbl9lZGdlcyA9IEdfU01BTkhBVFRBTl9FREdFUzsKLSAgZy0+bmVhcl9lZGdlcyA9IEdfTkVBUl9FREdFUzsKLQotICBnLT5vcmllbnRhdGlvbiA9IEdfT1JJRU5UQVRJT047Ci0gIGctPm5vZGVfYWxpZ25tZW50ID0gR19OT0RFX0FMSUdOTUVOVDsKLSAgZy0+cG9ydF9zaGFyaW5nID0gR19QT1JUX1NIQVJJTkc7Ci0gIGctPmFycm93X21vZGUgPSBHX0FSUk9XX01PREU7Ci0gIGctPnRyZWVmYWN0b3IgPSBHX1RSRUVGQUNUT1I7Ci0gIGctPnNwcmVhZGxldmVsID0gR19TUFJFQURMRVZFTDsKLSAgZy0+Y3Jvc3Npbmdfd2VpZ2h0ID0gR19DUk9TU0lOR19XRUlHSFQ7Ci0gIGctPmNyb3NzaW5nX3BoYXNlMiA9IEdfQ1JPU1NJTkdfUEhBU0UyOwotICBnLT5jcm9zc2luZ19vcHRpbWl6YXRpb24gPSBHX0NST1NTSU5HX09QVElNSVpBVElPTjsKLSAgZy0+dmlldyA9IEdfVklFVzsKLQotICBnLT5lZGdlcyA9IEdfRURHRVM7Ci0gIGctPm5vZGVzID0gR19OT0RFUzsKLSAgZy0+c3BsaW5lcyA9IEdfU1BMSU5FUzsKLQotICBnLT5ibWF4ID0gR19CTUFYOwotICBnLT5jbWluID0gR19DTUlOOwotICBnLT5jbWF4ID0gR19DTUFYOwotICBnLT5wbWluID0gR19QTUlOOwotICBnLT5wbWF4ID0gR19QTUFYOwotICBnLT5ybWluID0gR19STUlOOwotICBnLT5ybWF4ID0gR19STUFYOwotICBnLT5zbWF4ID0gR19TTUFYOwotCi0gIGctPm5vZGVfbGlzdCA9IEdfTk9ERV9MSVNUOwotICBnLT5lZGdlX2xpc3QgPSBHX0VER0VfTElTVDsKLQotICBuZXdfZWRnZSAoJmctPmVkZ2UpOwotICBuZXdfbm9kZSAoJmctPm5vZGUpOwotfQotCi0vKiBJbml0aWFsaXplIGEgbm9kZSB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlcy4gKi8KLXZvaWQKLW5ld19ub2RlIChub2RlICpuKQotewotICBuLT50aXRsZSA9IE5fVElUTEU7Ci0gIG4tPmxhYmVsID0gTl9MQUJFTDsKLQotICBuLT5sb2N4ID0gTl9MT0NYOyAvKiBEZWZhdWx0IHVuc3BjaWZpZWQuICovCi0gIG4tPmxvY3kgPSBOX0xPQ1k7IC8qIERlZmF1bHQgdW5zcGNpZmllZC4gKi8KLQotICBuLT52ZXJ0aWNhbF9vcmRlciA9IE5fVkVSVElDQUxfT1JERVI7CS8qIERlZmF1bHQgdW5zcGNpZmllZC4gKi8KLSAgbi0+aG9yaXpvbnRhbF9vcmRlciA9IE5fSE9SSVpPTlRBTF9PUkRFUjsJLyogRGVmYXVsdCB1bnNwY2lmaWVkLiAqLwotCi0gIG4tPndpZHRoID0gTl9XSURUSDsgLyogV2UgYXNzdW1lIHRoYXQgd2UgY2FuJ3QgZGVmaW5lIGl0IG5vdy4gKi8KLSAgbi0+aGVpZ2h0ID0gTl9IRUlHSFQ7IC8qIEFsc28uICovCi0KLSAgbi0+c2hyaW5rID0gTl9TSFJJTks7Ci0gIG4tPnN0cmV0Y2ggPSBOX1NUUkVUQ0g7Ci0KLSAgbi0+Zm9sZGluZyA9IE5fRk9MRElORzsgLyogTm8gZXhwbGljaXQgZGVmYXVsdCB2YWx1ZS4gKi8KLQotICBuLT5zaGFwZSA9IE5fU0hBUEU7Ci0gIG4tPnRleHRtb2RlID0gTl9URVhUTU9ERTsKLSAgbi0+Ym9yZGVyd2lkdGggPSBOX0JPUkRFUldJRFRIOwotCi0gIG4tPmNvbG9yID0gTl9DT0xPUjsKLSAgbi0+dGV4dGNvbG9yID0gTl9URVhUQ09MT1I7Ci0gIG4tPmJvcmRlcmNvbG9yID0gTl9CT1JERVJDT0xPUjsKLQotICBuLT5pbmZvc1swXSA9IE5fSU5GT1MxOwotICBuLT5pbmZvc1sxXSA9IE5fSU5GT1MyOwotICBuLT5pbmZvc1syXSA9IE5fSU5GT1MzOwotCi0gIG4tPm5leHQgPSBOX05FWFQ7Ci19Ci0KLS8qIEluaXRpYWxpemUgYW4gZWRnZSB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlcy4gKi8KLXZvaWQKLW5ld19lZGdlIChlZGdlICplKQotewotICBlLT50eXBlID0gRV9FREdFX1RZUEU7Ci0KLSAgZS0+c291cmNlbmFtZSA9IEVfU09VUkNFTkFNRTsKLSAgZS0+dGFyZ2V0bmFtZSA9IEVfVEFSR0VUTkFNRTsKLSAgZS0+bGFiZWwgPSBFX0xBQkVMOwotCi0gIGUtPmxpbmVzdHlsZSA9IEVfTElORVNUWUxFOwotICBlLT50aGlja25lc3MgPSBFX1RISUNLTkVTUzsKLQotICBlLT5jbGFzcyA9IEVfQ0xBU1M7Ci0KLSAgZS0+Y29sb3IgPSBFX0NPTE9SOwotICBlLT50ZXh0Y29sb3IgPSBFX1RFWFRDT0xPUjsKLSAgZS0+YXJyb3djb2xvciA9IEVfQVJST1dDT0xPUjsKLSAgZS0+YmFja2Fycm93Y29sb3IgPSBFX0JBQ0tBUlJPV0NPTE9SOwotCi0gIGUtPmFycm93c2l6ZSA9IEVfQVJST1dTSVpFOwotICBlLT5iYWNrYXJyb3dzaXplID0gRV9CQUNLQVJST1dTSVpFOwotICBlLT5hcnJvd3N0eWxlID0gRV9BUlJPV1NUWUxFOwotCi0gIGUtPmJhY2thcnJvd3N0eWxlID0gRV9CQUNLQVJST1dTVFlMRTsKLQotICBlLT5wcmlvcml0eSA9IEVfUFJJT1JJVFk7Ci0KLSAgZS0+YW5jaG9yID0gRV9BTkNIT1I7Ci0KLSAgZS0+aG9yaXpvbnRhbF9vcmRlciA9IEVfSE9SSVpPTlRBTF9PUkRFUjsKLQotICBlLT5uZXh0ID0gRV9ORVhUOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IEdldCBmdW5jdGlvbnMuCSAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgUmV0dXJuIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIGFuIGVudW0gdmFsdWUuIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGNvbnN0IGNoYXIgKgotZ2V0X2NvbG9yX3N0ciAoZW51bSBjb2xvciBjb2xvcikKLXsKLSAgc3dpdGNoIChjb2xvcikKLSAgICB7Ci0gICAgZGVmYXVsdDoJCWFib3J0ICgpOwotICAgIGNhc2Ugd2hpdGU6CQlyZXR1cm4gIndoaXRlIjsKLSAgICBjYXNlIGJsdWU6CQlyZXR1cm4gImJsdWUiOwotICAgIGNhc2UgcmVkOgkJcmV0dXJuICJyZWQiOwotICAgIGNhc2UgZ3JlZW46CQlyZXR1cm4gImdyZWVuIjsKLSAgICBjYXNlIHllbGxvdzoJcmV0dXJuICJ5ZWxsb3ciOwotICAgIGNhc2UgbWFnZW50YToJcmV0dXJuICJtYWdlbnRhIjsKLSAgICBjYXNlIGN5YW46CQlyZXR1cm4gImN5YW4iOwotICAgIGNhc2UgZGFya2dyZXk6CXJldHVybiAiZGFya2dyZXkiOwotICAgIGNhc2UgZGFya2JsdWU6CXJldHVybiAiZGFya2JsdWUiOwotICAgIGNhc2UgZGFya3JlZDoJcmV0dXJuICJkYXJrcmVkIjsKLSAgICBjYXNlIGRhcmtncmVlbjoJcmV0dXJuICJkYXJrZ3JlZW4iOwotICAgIGNhc2UgZGFya3llbGxvdzoJcmV0dXJuICJkYXJreWVsbG93IjsKLSAgICBjYXNlIGRhcmttYWdlbnRhOglyZXR1cm4gImRhcmttYWdlbnRhIjsKLSAgICBjYXNlIGRhcmtjeWFuOglyZXR1cm4gImRhcmtjeWFuIjsKLSAgICBjYXNlIGdvbGQ6CQlyZXR1cm4gImdvbGQiOwotICAgIGNhc2UgbGlnaHRncmV5OglyZXR1cm4gImxpZ2h0Z3JleSI7Ci0gICAgY2FzZSBsaWdodGJsdWU6CXJldHVybiAibGlnaHRibHVlIjsKLSAgICBjYXNlIGxpZ2h0cmVkOglyZXR1cm4gImxpZ2h0cmVkIjsKLSAgICBjYXNlIGxpZ2h0Z3JlZW46CXJldHVybiAibGlnaHRncmVlbiI7Ci0gICAgY2FzZSBsaWdodHllbGxvdzoJcmV0dXJuICJsaWdodHllbGxvdyI7Ci0gICAgY2FzZSBsaWdodG1hZ2VudGE6CXJldHVybiAibGlnaHRtYWdlbnRhIjsKLSAgICBjYXNlIGxpZ2h0Y3lhbjoJcmV0dXJuICJsaWdodGN5YW4iOwotICAgIGNhc2UgbGlsYWM6CQlyZXR1cm4gImxpbGFjIjsKLSAgICBjYXNlIHR1cnF1b2lzZToJcmV0dXJuICJ0dXJxdW9pc2UiOwotICAgIGNhc2UgYXF1YW1hcmluZToJcmV0dXJuICJhcXVhbWFyaW5lIjsKLSAgICBjYXNlIGtoYWtpOgkJcmV0dXJuICJraGFraSI7Ci0gICAgY2FzZSBwdXJwbGU6CXJldHVybiAicHVycGxlIjsKLSAgICBjYXNlIHllbGxvd2dyZWVuOglyZXR1cm4gInllbGxvd2dyZWVuIjsKLSAgICBjYXNlIHBpbms6CQlyZXR1cm4gInBpbmsiOwotICAgIGNhc2Ugb3JhbmdlOglyZXR1cm4gIm9yYW5nZSI7Ci0gICAgY2FzZSBvcmNoaWQ6CXJldHVybiAib3JjaGlkIjsKLSAgICBjYXNlIGJsYWNrOgkJcmV0dXJuICJibGFjayI7Ci0gICAgfQotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqCi1nZXRfdGV4dG1vZGVfc3RyIChlbnVtIHRleHRtb2RlIHRleHRtb2RlKQotewotICBzd2l0Y2ggKHRleHRtb2RlKQotICAgIHsKLSAgICBkZWZhdWx0OgkJYWJvcnQgKCk7Ci0gICAgY2FzZSBjZW50ZXJlZDoJcmV0dXJuICJjZW50ZXIiOwotICAgIGNhc2UgbGVmdF9qdXN0aWZ5OglyZXR1cm4gImxlZnRfanVzdGlmeSI7Ci0gICAgY2FzZSByaWdodF9qdXN0aWZ5OglyZXR1cm4gInJpZ2h0X2p1c3RpZnkiOwotICAgIH0KLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKgotZ2V0X3NoYXBlX3N0ciAoZW51bSBzaGFwZSBzaGFwZSkKLXsKLSAgc3dpdGNoIChzaGFwZSkKLSAgICB7Ci0gICAgZGVmYXVsdDoJCWFib3J0ICgpOwotICAgIGNhc2UgYm94OgkJcmV0dXJuICJib3giOwotICAgIGNhc2UgcmhvbWI6CQlyZXR1cm4gInJob21iIjsKLSAgICBjYXNlIGVsbGlwc2U6CXJldHVybiAiZWxsaXBzZSI7Ci0gICAgY2FzZSB0cmlhbmdsZToJcmV0dXJuICJ0cmlhbmdsZSI7Ci0gICAgfQotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqCi1nZXRfZGVjaXNpb25fc3RyIChlbnVtIGRlY2lzaW9uIGRlY2lzaW9uKQotewotICBzd2l0Y2ggKGRlY2lzaW9uKQotICAgIHsKLSAgICBkZWZhdWx0OglhYm9ydCAoKTsKLSAgICBjYXNlIG5vOglyZXR1cm4gIm5vIjsKLSAgICBjYXNlIHllczoJcmV0dXJuICJ5ZXMiOwotICAgIH0KLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKgotZ2V0X29yaWVudGF0aW9uX3N0ciAoZW51bSBvcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgc3dpdGNoIChvcmllbnRhdGlvbikKLSAgICB7Ci0gICAgZGVmYXVsdDoJCWFib3J0ICgpOwotICAgIGNhc2UgdG9wX3RvX2JvdHRvbToJcmV0dXJuICJ0b3BfdG9fYm90dG9tIjsKLSAgICBjYXNlIGJvdHRvbV90b190b3A6IHJldHVybiAiYm90dG9tX3RvX3RvcCI7Ci0gICAgY2FzZSBsZWZ0X3RvX3JpZ2h0OiByZXR1cm4gImxlZnRfdG9fcmlnaHQiOwotICAgIGNhc2UgcmlnaHRfdG9fbGVmdDogcmV0dXJuICJyaWdodF90b19sZWZ0IjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICoKLWdldF9ub2RlX2FsaWdubWVudF9zdHIgKGVudW0gYWxpZ25tZW50IGFsaWdubWVudCkKLXsKLSAgc3dpdGNoIChhbGlnbm1lbnQpCi0gICAgewotICAgIGRlZmF1bHQ6CQlhYm9ydCAoKTsKLSAgICBjYXNlIGNlbnRlcjoJcmV0dXJuICJjZW50ZXIiOwotICAgIGNhc2UgdG9wOgkJcmV0dXJuICJ0b3AiOwotICAgIGNhc2UgYm90dG9tOglyZXR1cm4gImJvdHRvbSI7Ci0gICAgfQotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqCi1nZXRfYXJyb3dfbW9kZV9zdHIgKGVudW0gYXJyb3dfbW9kZSBhcnJvd19tb2RlKQotewotICBzd2l0Y2ggKGFycm93X21vZGUpCi0gICAgewotICAgIGRlZmF1bHQ6CQlhYm9ydCAoKTsKLSAgICBjYXNlIGZpeGVkOgkJcmV0dXJuICJmaXhlZCI7Ci0gICAgY2FzZSBmcmVlX2E6CXJldHVybiAiZnJlZSI7Ci0gICAgfQotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqCi1nZXRfY3Jvc3NpbmdfdHlwZV9zdHIgKGVudW0gY3Jvc3NpbmdfdHlwZSBjcm9zc2luZ190eXBlKQotewotICBzd2l0Y2ggKGNyb3NzaW5nX3R5cGUpCi0gICAgewotICAgIGRlZmF1bHQ6CQlhYm9ydCAoKTsKLSAgICBjYXNlIGJhcnk6CQlyZXR1cm4gImJhcnkiOwotICAgIGNhc2UgbWVkaWFuOglyZXR1cm4gIm1lZGlhbiI7Ci0gICAgY2FzZSBiYXJ5bWVkaWFuOglyZXR1cm4gImJhcnltZWRpYW4iOwotICAgIGNhc2UgbWVkaWFuYmFyeToJcmV0dXJuICJtZWRpYW5iYXJ5IjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICoKLWdldF92aWV3X3N0ciAoZW51bSB2aWV3IHZpZXcpCi17Ci0gIC8qIFRoZXJlIGlzIG5vIHdheSB3aXRoIHZjZyAxLjMwIHRvIHNwZWNpZnkgYSBub3JtYWwgdmlldyBleHBsaWNpdGx5LAotICAgICBzbyBpdCBpcyBhbiBlcnJvciBoZXJlIGlmIHZpZXcgPT0gbm9ybWFsX3ZpZXcuICAqLwotICBzd2l0Y2ggKHZpZXcpCi0gICAgewotICAgIGRlZmF1bHQ6CQlhYm9ydCAoKTsKLSAgICBjYXNlIGNmaXNoOgkJcmV0dXJuICJjZmlzaCI7Ci0gICAgY2FzZSBwZmlzaDoJCXJldHVybiAicGZpc2giOwotICAgIGNhc2UgZmNmaXNoOglyZXR1cm4gImZjZmlzaCI7Ci0gICAgY2FzZSBmcGZpc2g6CXJldHVybiAiZnBmaXNoIjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICoKLWdldF9saW5lc3R5bGVfc3RyIChlbnVtIGxpbmVzdHlsZSBsaW5lc3R5bGUpCi17Ci0gIHN3aXRjaCAobGluZXN0eWxlKQotICAgIHsKLSAgICBkZWZhdWx0OgkJYWJvcnQgKCk7Ci0gICAgY2FzZSBjb250aW51b3VzOglyZXR1cm4gImNvbnRpbnVvdXMiOwotICAgIGNhc2UgZGFzaGVkOglyZXR1cm4gImRhc2hlZCI7Ci0gICAgY2FzZSBkb3R0ZWQ6CXJldHVybiAiZG90dGVkIjsKLSAgICBjYXNlIGludmlzaWJsZToJcmV0dXJuICJpbnZpc2libGUiOwotICAgIH0KLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKgotZ2V0X2Fycm93c3R5bGVfc3RyIChlbnVtIGFycm93c3R5bGUgYXJyb3dzdHlsZSkKLXsKLSAgc3dpdGNoIChhcnJvd3N0eWxlKQotICAgIHsKLSAgICBkZWZhdWx0OglhYm9ydCAoKTsKLSAgICBjYXNlIHNvbGlkOglyZXR1cm4gInNvbGlkIjsKLSAgICBjYXNlIGxpbmU6CXJldHVybiAibGluZSI7Ci0gICAgY2FzZSBub25lOglyZXR1cm4gIm5vbmUiOwotICAgIH0KLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IEFkZCBmdW5jdGlvbnMuCSAgICAgICAgfAotfCBFZGdlIGFuZCBub2RlcyBpbnRvIGEgZ3JhcGguICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotdm9pZAotYWRkX25vZGUgKGdyYXBoICpnLCBub2RlICpuKQotewotICBuLT5uZXh0ID0gZy0+bm9kZV9saXN0OwotICBnLT5ub2RlX2xpc3QgPSBuOwotfQotCi12b2lkCi1hZGRfZWRnZSAoZ3JhcGggKmcsIGVkZ2UgKmUpCi17Ci0gIGUtPm5leHQgPSBnLT5lZGdlX2xpc3Q7Ci0gIGctPmVkZ2VfbGlzdCA9IGU7Ci19Ci0KLXZvaWQKLWFkZF9jbGFzc25hbWUgKGdyYXBoICpnLCBpbnQgdmFsLCBjb25zdCBjaGFyICpuYW1lKQotewotICBzdHJ1Y3QgY2xhc3NuYW1lICpjbGFzc25hbWUgPSB4bWFsbG9jIChzaXplb2YgKmNsYXNzbmFtZSk7Ci0gIGNsYXNzbmFtZS0+bm8gPSB2YWw7Ci0gIGNsYXNzbmFtZS0+bmFtZSA9IG5hbWU7Ci0gIGNsYXNzbmFtZS0+bmV4dCA9IGctPmNsYXNzbmFtZTsKLSAgZy0+Y2xhc3NuYW1lID0gY2xhc3NuYW1lOwotfQotCi12b2lkCi1hZGRfaW5mb25hbWUgKGdyYXBoICpnLCBpbnQgaW50ZWdlciwgY29uc3QgY2hhciAqc3RyKQotewotICBzdHJ1Y3QgaW5mb25hbWUgKmluZm9uYW1lID0geG1hbGxvYyAoc2l6ZW9mICppbmZvbmFtZSk7Ci0gIGluZm9uYW1lLT5pbnRlZ2VyID0gaW50ZWdlcjsKLSAgaW5mb25hbWUtPmNoYXJzID0gc3RyOwotICBpbmZvbmFtZS0+bmV4dCA9IGctPmluZm9uYW1lOwotICBnLT5pbmZvbmFtZSA9IGluZm9uYW1lOwotfQotCi0vKiBCdWlsZCBhIGNvbG9yZW50cnkgc3RydWN0IGFuZCBhZGQgaXQgdG8gdGhlIGxpc3QuICAqLwotdm9pZAotYWRkX2NvbG9yZW50cnkgKGdyYXBoICpnLCBpbnQgY29sb3JfaWR4LCBpbnQgcmVkX2NwLAotCQlpbnQgZ3JlZW5fY3AsIGludCBibHVlX2NwKQotewotICBzdHJ1Y3QgY29sb3JlbnRyeSAqY2UgPSB4bWFsbG9jIChzaXplb2YgKmNlKTsKLSAgY2UtPmNvbG9yX2luZGV4ID0gY29sb3JfaWR4OwotICBjZS0+cmVkX2NwID0gcmVkX2NwOwotICBjZS0+Z3JlZW5fY3AgPSBncmVlbl9jcDsKLSAgY2UtPmJsdWVfY3AgPSBibHVlX2NwOwotICBjZS0+bmV4dCA9IGctPmNvbG9yZW50cnk7Ci0gIGctPmNvbG9yZW50cnkgPSBjZTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBPcGVuIGFuZCBjbG9zZSBmdW5jdGlvbnMgKGZvcm1hdHRlZCkgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi12b2lkCi1vcGVuX2VkZ2UgKGVkZ2UgKmUsIEZJTEUgKmZvdXQpCi17Ci0gIHN3aXRjaCAoZS0+dHlwZSkKLSAgICB7Ci0gICAgY2FzZSBub3JtYWxfZWRnZToKLSAgICAgIGZwdXRzICgiXHRlZGdlOiB7XG4iLCBmb3V0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgYmFja19lZGdlOgotICAgICAgZnB1dHMgKCJcdGJhY2tlZGdlOiB7XG4iLCBmb3V0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgbmVhcl9lZGdlOgotICAgICAgZnB1dHMgKCJcdG5lYXJlZGdlOiB7XG4iLCBmb3V0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgYmVudF9uZWFyX2VkZ2U6Ci0gICAgICBmcHV0cyAoIlx0YmVudG5lYXJlZGdlOiB7XG4iLCBmb3V0KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBmcHV0cyAoIlx0ZWRnZToge1xuIiwgZm91dCk7Ci0gICAgfQotfQotCi12b2lkCi1jbG9zZV9lZGdlIChGSUxFICpmb3V0KQotewotICBmcHV0cyAoIlx0fVxuIiwgZm91dCk7Ci19Ci0KLXZvaWQKLW9wZW5fbm9kZSAoRklMRSAqZm91dCkKLXsKLSAgZnB1dHMgKCJcdG5vZGU6IHtcbiIsIGZvdXQpOwotfQotCi12b2lkCi1jbG9zZV9ub2RlIChGSUxFICpmb3V0KQotewotICBmcHV0cyAoIlx0fVxuIiwgZm91dCk7Ci19Ci0KLXZvaWQKLW9wZW5fZ3JhcGggKEZJTEUgKmZvdXQpCi17Ci0gIGZwdXRzICgiZ3JhcGg6IHtcbiIsIGZvdXQpOwotfQotCi12b2lkCi1jbG9zZV9ncmFwaCAoZ3JhcGggKmcsIEZJTEUgKmZvdXQpCi17Ci0gIGZwdXRjICgnXG4nLCBmb3V0KTsKLQotICAvKiBGSVhNRTogVW5hbGxvY2F0ZSBub2RlcyBhbmQgZWRnZXMgaWYgcmVxdWlyZWQuICAqLwotICB7Ci0gICAgbm9kZSAqbjsKLQotICAgIGZvciAobiA9IGctPm5vZGVfbGlzdDsgbjsgbiA9IG4tPm5leHQpCi0gICAgICB7Ci0Jb3Blbl9ub2RlIChmb3V0KTsKLQlvdXRwdXRfbm9kZSAobiwgZm91dCk7Ci0JY2xvc2Vfbm9kZSAoZm91dCk7Ci0gICAgICB9Ci0gIH0KLQotICBmcHV0YyAoJ1xuJywgZm91dCk7Ci0KLSAgewotICAgIGVkZ2UgKmU7Ci0KLSAgICBmb3IgKGUgPSBnLT5lZGdlX2xpc3Q7IGU7IGUgPSBlLT5uZXh0KQotICAgICAgewotCW9wZW5fZWRnZSAoZSwgZm91dCk7Ci0Jb3V0cHV0X2VkZ2UgKGUsIGZvdXQpOwotCWNsb3NlX2VkZ2UgKGZvdXQpOwotICAgICAgfQotICB9Ci0KLSAgZnB1dHMgKCJ9XG4iLCBmb3V0KTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBPdXRwdXQgZnVuY3Rpb25zIChmb3JtYXR0ZWQpIGluIGZpbGUgRk9VVCAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi12b2lkCi1vdXRwdXRfbm9kZSAobm9kZSAqbiwgRklMRSAqZm91dCkKLXsKLSAgaWYgKG4tPnRpdGxlICE9IE5fVElUTEUpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0XHR0aXRsZTpcdCVzXG4iLCBxdW90ZSAobi0+dGl0bGUpKTsKLSAgaWYgKG4tPmxhYmVsICE9IE5fTEFCRUwpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0XHRsYWJlbDpcdCVzXG4iLCBxdW90ZSAobi0+bGFiZWwpKTsKLQotICBpZiAoKG4tPmxvY3ggIT0gTl9MT0NYKSAmJiAobi0+bG9jeSAhPSBOX0xPQ1kpKQotICAgIGZwcmludGYgKGZvdXQsICJcdFx0bG9jIHsgeDogJWQgIHk6ICVkIH1cdFxuIiwgbi0+bG9jeCwgbi0+bG9jeSk7Ci0KLSAgaWYgKG4tPnZlcnRpY2FsX29yZGVyICE9IE5fVkVSVElDQUxfT1JERVIpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0XHR2ZXJ0aWNhbF9vcmRlcjpcdCVkXG4iLCBuLT52ZXJ0aWNhbF9vcmRlcik7Ci0gIGlmIChuLT5ob3Jpem9udGFsX29yZGVyICE9IE5fSE9SSVpPTlRBTF9PUkRFUikKLSAgICBmcHJpbnRmIChmb3V0LCAiXHRcdGhvcml6b250YWxfb3JkZXI6XHQlZFxuIiwgbi0+aG9yaXpvbnRhbF9vcmRlcik7Ci0KLSAgaWYgKG4tPndpZHRoICE9IE5fV0lEVEgpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0XHR3aWR0aDpcdCVkXG4iLCBuLT53aWR0aCk7Ci0gIGlmIChuLT5oZWlnaHQgIT0gTl9IRUlHSFQpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0XHRoZWlnaHQ6XHQlZFxuIiwgbi0+aGVpZ2h0KTsKLQotICBpZiAobi0+c2hyaW5rICE9IE5fU0hSSU5LKQotICAgIGZwcmludGYgKGZvdXQsICJcdFx0c2hyaW5rOlx0JWRcbiIsIG4tPnNocmluayk7Ci0gIGlmIChuLT5zdHJldGNoICE9IE5fU1RSRVRDSCkKLSAgICBmcHJpbnRmIChmb3V0LCAiXHRcdHN0cmV0Y2g6XHQlZFxuIiwgbi0+c3RyZXRjaCk7Ci0KLSAgaWYgKG4tPmZvbGRpbmcgIT0gTl9GT0xESU5HKQotICAgIGZwcmludGYgKGZvdXQsICJcdFx0Zm9sZGluZzpcdCVkXG4iLCBuLT5mb2xkaW5nKTsKLQotICBpZiAobi0+dGV4dG1vZGUgIT0gTl9URVhUTU9ERSkKLSAgICBmcHJpbnRmIChmb3V0LCAiXHRcdHRleHRtb2RlOlx0JXNcbiIsCi0JICAgICBnZXRfdGV4dG1vZGVfc3RyIChuLT50ZXh0bW9kZSkpOwotCi0gIGlmIChuLT5zaGFwZSAhPSBOX1NIQVBFKQotICAgIGZwcmludGYgKGZvdXQsICJcdFx0c2hhcGU6XHQlc1xuIiwgZ2V0X3NoYXBlX3N0ciAobi0+c2hhcGUpKTsKLQotICBpZiAobi0+Ym9yZGVyd2lkdGggIT0gTl9CT1JERVJXSURUSCkKLSAgICBmcHJpbnRmIChmb3V0LCAiXHRcdGJvcmRlcndpZHRoOlx0JWRcbiIsIG4tPmJvcmRlcndpZHRoKTsKLQotICBpZiAobi0+Y29sb3IgIT0gTl9DT0xPUikKLSAgICBmcHJpbnRmIChmb3V0LCAiXHRcdGNvbG9yOlx0JXNcbiIsIGdldF9jb2xvcl9zdHIgKG4tPmNvbG9yKSk7Ci0gIGlmIChuLT50ZXh0Y29sb3IgIT0gTl9URVhUQ09MT1IpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0XHR0ZXh0Y29sb3I6XHQlc1xuIiwKLQkgICAgIGdldF9jb2xvcl9zdHIgKG4tPnRleHRjb2xvcikpOwotICBpZiAobi0+Ym9yZGVyY29sb3IgIT0gTl9CT1JERVJDT0xPUikKLSAgICBmcHJpbnRmIChmb3V0LCAiXHRcdGJvcmRlcmNvbG9yOlx0JXNcbiIsCi0JICAgICBnZXRfY29sb3Jfc3RyIChuLT5ib3JkZXJjb2xvcikpOwotCi0gIHsKLSAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgMzsgKytpKQotICAgICAgaWYgKG4tPmluZm9zW2ldKQotCWZwcmludGYgKGZvdXQsICJcdFx0aW5mbyVkOlx0JXNcbiIsCi0JCSBpLCBxdW90ZSAobi0+aW5mb3NbaV0pKTsKLSAgfQotfQotCi12b2lkCi1vdXRwdXRfZWRnZSAoZWRnZSAqZSwgRklMRSAqZm91dCkKLXsKLSAgLyogRklYTUU6IFNPVVJDRU5BTUUgYW5kIFRBUkdFVE5BTUUgYXJlIG1hbmRhdG9yeQotICAgICBzbyBpdCBoYXMgdG8gYmUgZmF0YWwgbm90IHRvIGdpdmUgdGhlc2UgaW5mb3JtYXRpb25zLiAgKi8KLSAgaWYgKGUtPnNvdXJjZW5hbWUgIT0gRV9TT1VSQ0VOQU1FKQotICAgIGZwcmludGYgKGZvdXQsICJcdFx0c291cmNlbmFtZTpcdCVzXG4iLCBxdW90ZSAoZS0+c291cmNlbmFtZSkpOwotICBpZiAoZS0+dGFyZ2V0bmFtZSAhPSBFX1RBUkdFVE5BTUUpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0XHR0YXJnZXRuYW1lOlx0JXNcbiIsIHF1b3RlIChlLT50YXJnZXRuYW1lKSk7Ci0KLSAgaWYgKGUtPmxhYmVsICE9IEVfTEFCRUwpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0XHRsYWJlbDpcdCVzXG4iLCBxdW90ZSAoZS0+bGFiZWwpKTsKLQotICBpZiAoZS0+bGluZXN0eWxlICE9IEVfTElORVNUWUxFKQotICAgIGZwcmludGYgKGZvdXQsICJcdFx0bGluZXN0eWxlOlx0JXNcbiIsIGdldF9saW5lc3R5bGVfc3RyIChlLT5saW5lc3R5bGUpKTsKLQotICBpZiAoZS0+dGhpY2tuZXNzICE9IEVfVEhJQ0tORVNTKQotICAgIGZwcmludGYgKGZvdXQsICJcdFx0dGhpY2tuZXNzOlx0JWRcbiIsIGUtPnRoaWNrbmVzcyk7Ci0gIGlmIChlLT5jbGFzcyAhPSBFX0NMQVNTKQotICAgIGZwcmludGYgKGZvdXQsICJcdFx0Y2xhc3M6XHQlZFxuIiwgZS0+Y2xhc3MpOwotCi0gIGlmIChlLT5jb2xvciAhPSBFX0NPTE9SKQotICAgIGZwcmludGYgKGZvdXQsICJcdFx0Y29sb3I6XHQlc1xuIiwgZ2V0X2NvbG9yX3N0ciAoZS0+Y29sb3IpKTsKLSAgaWYgKGUtPmNvbG9yICE9IEVfVEVYVENPTE9SKQotICAgIGZwcmludGYgKGZvdXQsICJcdFx0dGV4dGNvbG9yOlx0JXNcbiIsCi0JICAgICBnZXRfY29sb3Jfc3RyIChlLT50ZXh0Y29sb3IpKTsKLSAgaWYgKGUtPmFycm93Y29sb3IgIT0gRV9BUlJPV0NPTE9SKQotICAgIGZwcmludGYgKGZvdXQsICJcdFx0YXJyb3djb2xvcjpcdCVzXG4iLAotCSAgICAgZ2V0X2NvbG9yX3N0ciAoZS0+YXJyb3djb2xvcikpOwotICBpZiAoZS0+YmFja2Fycm93Y29sb3IgIT0gRV9CQUNLQVJST1dDT0xPUikKLSAgICBmcHJpbnRmIChmb3V0LCAiXHRcdGJhY2thcnJvd2NvbG9yOlx0JXNcbiIsCi0JICAgICBnZXRfY29sb3Jfc3RyIChlLT5iYWNrYXJyb3djb2xvcikpOwotCi0gIGlmIChlLT5hcnJvd3NpemUgIT0gRV9BUlJPV1NJWkUpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0XHRhcnJvd3NpemU6XHQlZFxuIiwgZS0+YXJyb3dzaXplKTsKLSAgaWYgKGUtPmJhY2thcnJvd3NpemUgIT0gRV9CQUNLQVJST1dTSVpFKQotICAgIGZwcmludGYgKGZvdXQsICJcdFx0YmFja2Fycm93c2l6ZTpcdCVkXG4iLCBlLT5iYWNrYXJyb3dzaXplKTsKLQotICBpZiAoZS0+YXJyb3dzdHlsZSAhPSBFX0FSUk9XU1RZTEUpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0XHRhcnJvd3N0eWxlOlx0JXNcbiIsCi0JICAgICBnZXRfYXJyb3dzdHlsZV9zdHIgKGUtPmFycm93c3R5bGUpKTsKLSAgaWYgKGUtPmJhY2thcnJvd3N0eWxlICE9IEVfQkFDS0FSUk9XU1RZTEUpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0XHRiYWNrYXJyb3dzdHlsZTpcdCVzXG4iLAotCSAgICAgZ2V0X2Fycm93c3R5bGVfc3RyIChlLT5iYWNrYXJyb3dzdHlsZSkpOwotCi0gIGlmIChlLT5wcmlvcml0eSAhPSBFX1BSSU9SSVRZKQotICAgIGZwcmludGYgKGZvdXQsICJcdFx0cHJpb3JpdHk6XHQlZFxuIiwgZS0+cHJpb3JpdHkpOwotICBpZiAoZS0+YW5jaG9yICE9IEVfQU5DSE9SKQotICAgIGZwcmludGYgKGZvdXQsICJcdFx0YW5jaG9yOlx0JWRcbiIsIGUtPmFuY2hvcik7Ci0gIGlmIChlLT5ob3Jpem9udGFsX29yZGVyICE9IEVfSE9SSVpPTlRBTF9PUkRFUikKLSAgICBmcHJpbnRmIChmb3V0LCAiXHRcdGhvcml6b250YWxfb3JkZXI6XHQlZFxuIiwgZS0+aG9yaXpvbnRhbF9vcmRlcik7Ci19Ci0KLXZvaWQKLW91dHB1dF9ncmFwaCAoZ3JhcGggKmcsIEZJTEUgKmZvdXQpCi17Ci0gIGlmIChnLT50aXRsZSkKLSAgICBmcHJpbnRmIChmb3V0LCAiXHR0aXRsZTpcdCVzXG4iLCBxdW90ZSAoZy0+dGl0bGUpKTsKLSAgaWYgKGctPmxhYmVsKQotICAgIGZwcmludGYgKGZvdXQsICJcdGxhYmVsOlx0JXNcbiIsIHF1b3RlIChnLT5sYWJlbCkpOwotCi0gIHsKLSAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgMzsgKytpKQotICAgICAgaWYgKGctPmluZm9zW2ldKQotCWZwcmludGYgKGZvdXQsICJcdGluZm8lZDpcdCVzXG4iLCBpLCBxdW90ZSAoZy0+aW5mb3NbaV0pKTsKLSAgfQotCi0gIGlmIChnLT5jb2xvciAhPSBHX0NPTE9SKQotICAgIGZwcmludGYgKGZvdXQsICJcdGNvbG9yOlx0JXNcbiIsIGdldF9jb2xvcl9zdHIgKGctPmNvbG9yKSk7Ci0gIGlmIChnLT50ZXh0Y29sb3IgIT0gR19URVhUQ09MT1IpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0dGV4dGNvbG9yOlx0JXNcbiIsIGdldF9jb2xvcl9zdHIgKGctPnRleHRjb2xvcikpOwotICBpZiAoZy0+Ym9yZGVyY29sb3IgIT0gR19CT1JERVJDT0xPUikKLSAgICBmcHJpbnRmIChmb3V0LCAiXHRib3JkZXJjb2xvcjpcdCVzXG4iLAotCSAgICAgZ2V0X2NvbG9yX3N0ciAoZy0+Ym9yZGVyY29sb3IpKTsKLQotICBpZiAoZy0+d2lkdGggIT0gR19XSURUSCkKLSAgICBmcHJpbnRmIChmb3V0LCAiXHR3aWR0aDpcdCVkXG4iLCBnLT53aWR0aCk7Ci0gIGlmIChnLT5oZWlnaHQgIT0gR19IRUlHSFQpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0aGVpZ2h0Olx0JWRcbiIsIGctPmhlaWdodCk7Ci0gIGlmIChnLT5ib3JkZXJ3aWR0aCAhPSBHX0JPUkRFUldJRFRIKQotICAgIGZwcmludGYgKGZvdXQsICJcdGJvcmRlcndpZHRoOlx0JWRcbiIsIGctPmJvcmRlcndpZHRoKTsKLQotICBpZiAoZy0+eCAhPSBHX1gpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0eDpcdCVkXG4iLCBnLT54KTsKLSAgaWYgKGctPnkgIT0gR19ZKQotICAgIGZwcmludGYgKGZvdXQsICJcdHk6XHQlZFxuIiwgZy0+eSk7Ci0KLSAgaWYgKGctPmZvbGRpbmcgIT0gR19GT0xESU5HKQotICAgIGZwcmludGYgKGZvdXQsICJcdGZvbGRpbmc6XHQlZFxuIiwgZy0+Zm9sZGluZyk7Ci0KLSAgaWYgKGctPnNocmluayAhPSBHX1NIUklOSykKLSAgICBmcHJpbnRmIChmb3V0LCAiXHRzaHJpbms6XHQlZFxuIiwgZy0+c2hyaW5rKTsKLSAgaWYgKGctPnN0cmV0Y2ggIT0gR19TVFJFVENIKQotICAgIGZwcmludGYgKGZvdXQsICJcdHN0cmV0Y2g6XHQlZFxuIiwgZy0+c3RyZXRjaCk7Ci0KLSAgaWYgKGctPnRleHRtb2RlICE9IEdfVEVYVE1PREUpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0dGV4dG1vZGU6XHQlc1xuIiwKLQkgICAgIGdldF90ZXh0bW9kZV9zdHIgKGctPnRleHRtb2RlKSk7Ci0KLSAgaWYgKGctPnNoYXBlICE9IEdfU0hBUEUpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0c2hhcGU6XHQlc1xuIiwgZ2V0X3NoYXBlX3N0ciAoZy0+c2hhcGUpKTsKLQotICBpZiAoZy0+dmVydGljYWxfb3JkZXIgIT0gR19WRVJUSUNBTF9PUkRFUikKLSAgICBmcHJpbnRmIChmb3V0LCAiXHR2ZXJ0aWNhbF9vcmRlcjpcdCVkXG4iLCBnLT52ZXJ0aWNhbF9vcmRlcik7Ci0gIGlmIChnLT5ob3Jpem9udGFsX29yZGVyICE9IEdfSE9SSVpPTlRBTF9PUkRFUikKLSAgICBmcHJpbnRmIChmb3V0LCAiXHRob3Jpem9udGFsX29yZGVyOlx0JWRcbiIsIGctPmhvcml6b250YWxfb3JkZXIpOwotCi0gIGlmIChnLT54bWF4ICE9IEdfWE1BWCkKLSAgICBmcHJpbnRmIChmb3V0LCAiXHR4bWF4Olx0JWRcbiIsIGctPnhtYXgpOwotICBpZiAoZy0+eW1heCAhPSBHX1lNQVgpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0eW1heDpcdCVkXG4iLCBnLT55bWF4KTsKLQotICBpZiAoZy0+eGJhc2UgIT0gR19YQkFTRSkKLSAgICBmcHJpbnRmIChmb3V0LCAiXHR4YmFzZTpcdCVkXG4iLCBnLT54YmFzZSk7Ci0gIGlmIChnLT55YmFzZSAhPSBHX1lCQVNFKQotICAgIGZwcmludGYgKGZvdXQsICJcdHliYXNlOlx0JWRcbiIsIGctPnliYXNlKTsKLQotICBpZiAoZy0+eHNwYWNlICE9IEdfWFNQQUNFKQotICAgIGZwcmludGYgKGZvdXQsICJcdHhzcGFjZTpcdCVkXG4iLCBnLT54c3BhY2UpOwotICBpZiAoZy0+eXNwYWNlICE9IEdfWVNQQUNFKQotICAgIGZwcmludGYgKGZvdXQsICJcdHlzcGFjZTpcdCVkXG4iLCBnLT55c3BhY2UpOwotICBpZiAoZy0+eGxzcGFjZSAhPSBHX1hMU1BBQ0UpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0eGxzcGFjZTpcdCVkXG4iLCBnLT54bHNwYWNlKTsKLQotICBpZiAoZy0+eHJhc3RlciAhPSBHX1hSQVNURVIpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0eHJhc3RlcjpcdCVkXG4iLCBnLT54cmFzdGVyKTsKLSAgaWYgKGctPnlyYXN0ZXIgIT0gR19ZUkFTVEVSKQotICAgIGZwcmludGYgKGZvdXQsICJcdHlyYXN0ZXI6XHQlZFxuIiwgZy0+eXJhc3Rlcik7Ci0gIGlmIChnLT54bHJhc3RlciAhPSBHX1hMUkFTVEVSKQotICAgIGZwcmludGYgKGZvdXQsICJcdHhscmFzdGVyOlx0JWRcbiIsIGctPnhscmFzdGVyKTsKLQotICBpZiAoZy0+aGlkZGVuICE9IEdfSElEREVOKQotICAgIGZwcmludGYgKGZvdXQsICJcdGhpZGRlbjpcdCVkXG4iLCBnLT5oaWRkZW4pOwotCi0gIC8qIEZJWE1FOiBVbmFsbG9jYXRlIHN0cnVjdCBsaXN0IGlmIHJlcXVpcmVkLgotICAgICBNYXliZSB3aXRoIGEgbGl0dGxlIGZ1bmN0aW9uLiAgKi8KLSAgaWYgKGctPmNsYXNzbmFtZSAhPSBHX0NMQVNTTkFNRSkKLSAgICB7Ci0gICAgICBzdHJ1Y3QgY2xhc3NuYW1lICppdGU7Ci0KLSAgICAgIGZvciAoaXRlID0gZy0+Y2xhc3NuYW1lOyBpdGU7IGl0ZSA9IGl0ZS0+bmV4dCkKLQlmcHJpbnRmIChmb3V0LCAiXHRjbGFzc25hbWUgJWQgOlx0JXNcbiIsIGl0ZS0+bm8sIGl0ZS0+bmFtZSk7Ci0gICAgfQotCi0gIGlmIChnLT5pbmZvbmFtZSAhPSBHX0lORk9OQU1FKQotICAgIHsKLSAgICAgIHN0cnVjdCBpbmZvbmFtZSAqaXRlOwotCi0gICAgICBmb3IgKGl0ZSA9IGctPmluZm9uYW1lOyBpdGU7IGl0ZSA9IGl0ZS0+bmV4dCkKLQlmcHJpbnRmIChmb3V0LCAiXHRpbmZvbmFtZSAlZCA6XHQlc1xuIiwgaXRlLT5pbnRlZ2VyLCBpdGUtPmNoYXJzKTsKLSAgICB9Ci0KLSAgaWYgKGctPmNvbG9yZW50cnkgIT0gR19DT0xPUkVOVFJZKQotICAgIHsKLSAgICAgIHN0cnVjdCBjb2xvcmVudHJ5ICppdGU7Ci0KLSAgICAgIGZvciAoaXRlID0gZy0+Y29sb3JlbnRyeTsgaXRlOyBpdGUgPSBpdGUtPm5leHQpCi0JewotCSAgZnByaW50ZiAoZm91dCwgIlx0Y29sb3JlbnRyeSAlZCA6XHQlZCAlZCAlZFxuIiwKLQkJICAgaXRlLT5jb2xvcl9pbmRleCwKLQkJICAgaXRlLT5yZWRfY3AsCi0JCSAgIGl0ZS0+Z3JlZW5fY3AsCi0JCSAgIGl0ZS0+Ymx1ZV9jcCk7Ci0JfQotICAgIH0KLQotICBpZiAoZy0+bGF5b3V0X2Rvd25mYWN0b3IgIT0gR19MQVlPVVRfRE9XTkZBQ1RPUikKLSAgICBmcHJpbnRmIChmb3V0LCAiXHRsYXlvdXRfZG93bmZhY3RvcjpcdCVkXG4iLCBnLT5sYXlvdXRfZG93bmZhY3Rvcik7Ci0gIGlmIChnLT5sYXlvdXRfdXBmYWN0b3IgIT0gR19MQVlPVVRfVVBGQUNUT1IpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0bGF5b3V0X3VwZmFjdG9yOlx0JWRcbiIsIGctPmxheW91dF91cGZhY3Rvcik7Ci0gIGlmIChnLT5sYXlvdXRfbmVhcmZhY3RvciAhPSBHX0xBWU9VVF9ORUFSRkFDVE9SKQotICAgIGZwcmludGYgKGZvdXQsICJcdGxheW91dF9uZWFyZmFjdG9yOlx0JWRcbiIsIGctPmxheW91dF9uZWFyZmFjdG9yKTsKLSAgaWYgKGctPmxheW91dF9zcGxpbmVmYWN0b3IgIT0gR19MQVlPVVRfU1BMSU5FRkFDVE9SKQotICAgIGZwcmludGYgKGZvdXQsICJcdGxheW91dF9zcGxpbmVmYWN0b3I6XHQlZFxuIiwKLQkgICAgIGctPmxheW91dF9zcGxpbmVmYWN0b3IpOwotCi0gIGlmIChnLT5sYXRlX2VkZ2VfbGFiZWxzICE9IEdfTEFURV9FREdFX0xBQkVMUykKLSAgICBmcHJpbnRmIChmb3V0LCAiXHRsYXRlX2VkZ2VfbGFiZWxzOlx0JXNcbiIsCi0JICAgICBnZXRfZGVjaXNpb25fc3RyIChnLT5sYXRlX2VkZ2VfbGFiZWxzKSk7Ci0gIGlmIChnLT5kaXNwbGF5X2VkZ2VfbGFiZWxzICE9IEdfRElTUExBWV9FREdFX0xBQkVMUykKLSAgICBmcHJpbnRmIChmb3V0LCAiXHRkaXNwbGF5X2VkZ2VfbGFiZWxzOlx0JXNcbiIsCi0JICAgICBnZXRfZGVjaXNpb25fc3RyIChnLT5kaXNwbGF5X2VkZ2VfbGFiZWxzKSk7Ci0gIGlmIChnLT5kaXJ0eV9lZGdlX2xhYmVscyAhPSBHX0RJUlRZX0VER0VfTEFCRUxTKQotICAgIGZwcmludGYgKGZvdXQsICJcdGRpcnR5X2VkZ2VfbGFiZWxzOlx0JXNcbiIsCi0JICAgICBnZXRfZGVjaXNpb25fc3RyIChnLT5kaXJ0eV9lZGdlX2xhYmVscykpOwotICBpZiAoZy0+ZmluZXR1bmluZyAhPSBHX0ZJTkVUVU5JTkcpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0ZmluZXR1bmluZzpcdCVzXG4iLAotCSAgICAgZ2V0X2RlY2lzaW9uX3N0ciAoZy0+ZmluZXR1bmluZykpOwotICBpZiAoZy0+aWdub3JlX3NpbmdsZXMgIT0gR19JR05PUkVfU0lOR0xFUykKLSAgICBmcHJpbnRmIChmb3V0LCAiXHRpZ25vcmVfc2luZ2xlczpcdCVzXG4iLAotCSAgICAgZ2V0X2RlY2lzaW9uX3N0ciAoZy0+aWdub3JlX3NpbmdsZXMpKTsKLSAgaWYgKGctPnByaW9yaXR5X3BoYXNlICE9IEdfUFJJT1JJVFlfUEhBU0UpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0cHJpb3JpdHlfcGhhc2U6XHQlc1xuIiwKLQkgICAgIGdldF9kZWNpc2lvbl9zdHIgKGctPnByaW9yaXR5X3BoYXNlKSk7Ci0gIGlmIChnLT5tYW5oYXR0YW5fZWRnZXMgIT0gR19NQU5IQVRUQU5fRURHRVMpCi0gICAgZnByaW50ZiAoZm91dCwKLQkgICAgICJcdG1hbmhhdHRhbl9lZGdlczpcdCVzXG4iLAotCSAgICAgZ2V0X2RlY2lzaW9uX3N0ciAoZy0+bWFuaGF0dGFuX2VkZ2VzKSk7Ci0gIGlmIChnLT5zbWFuaGF0dGFuX2VkZ2VzICE9IEdfU01BTkhBVFRBTl9FREdFUykKLSAgICBmcHJpbnRmIChmb3V0LAotCSAgICAgIlx0c21hbmhhdHRhbl9lZGdlczpcdCVzXG4iLAotCSAgICAgZ2V0X2RlY2lzaW9uX3N0ciAoZy0+c21hbmhhdHRhbl9lZGdlcykpOwotICBpZiAoZy0+bmVhcl9lZGdlcyAhPSBHX05FQVJfRURHRVMpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0bmVhcl9lZGdlczpcdCVzXG4iLAotCSAgICAgZ2V0X2RlY2lzaW9uX3N0ciAoZy0+bmVhcl9lZGdlcykpOwotCi0gIGlmIChnLT5vcmllbnRhdGlvbiAhPSBHX09SSUVOVEFUSU9OKQotICAgIGZwcmludGYgKGZvdXQsICJcdG9yaWVudGF0aW9uOlx0JXNcbiIsCi0JICAgICBnZXRfb3JpZW50YXRpb25fc3RyIChnLT5vcmllbnRhdGlvbikpOwotCi0gIGlmIChnLT5ub2RlX2FsaWdubWVudCAhPSBHX05PREVfQUxJR05NRU5UKQotICAgIGZwcmludGYgKGZvdXQsICJcdG5vZGVfYWxpZ25tZW50Olx0JXNcbiIsCi0JICAgICBnZXRfbm9kZV9hbGlnbm1lbnRfc3RyIChnLT5ub2RlX2FsaWdubWVudCkpOwotCi0gIGlmIChnLT5wb3J0X3NoYXJpbmcgIT0gR19QT1JUX1NIQVJJTkcpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0cG9ydF9zaGFyaW5nOlx0JXNcbiIsCi0JICAgICBnZXRfZGVjaXNpb25fc3RyIChnLT5wb3J0X3NoYXJpbmcpKTsKLQotICBpZiAoZy0+YXJyb3dfbW9kZSAhPSBHX0FSUk9XX01PREUpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0YXJyb3dfbW9kZTpcdCVzXG4iLAotCSAgICAgZ2V0X2Fycm93X21vZGVfc3RyIChnLT5hcnJvd19tb2RlKSk7Ci0KLSAgaWYgKGctPnRyZWVmYWN0b3IgIT0gR19UUkVFRkFDVE9SKQotICAgIGZwcmludGYgKGZvdXQsICJcdHRyZWVmYWN0b3I6XHQlZlxuIiwgZy0+dHJlZWZhY3Rvcik7Ci0gIGlmIChnLT5zcHJlYWRsZXZlbCAhPSBHX1NQUkVBRExFVkVMKQotICAgIGZwcmludGYgKGZvdXQsICJcdHNwcmVhZGxldmVsOlx0JWRcbiIsIGctPnNwcmVhZGxldmVsKTsKLQotICBpZiAoZy0+Y3Jvc3Npbmdfd2VpZ2h0ICE9IEdfQ1JPU1NJTkdfV0VJR0hUKQotICAgIGZwcmludGYgKGZvdXQsICJcdGNyb3NzaW5nX3dlaWdodDpcdCVzXG4iLAotCSAgICAgZ2V0X2Nyb3NzaW5nX3R5cGVfc3RyIChnLT5jcm9zc2luZ193ZWlnaHQpKTsKLSAgaWYgKGctPmNyb3NzaW5nX3BoYXNlMiAhPSBHX0NST1NTSU5HX1BIQVNFMikKLSAgICBmcHJpbnRmIChmb3V0LCAiXHRjcm9zc2luZ19waGFzZTI6XHQlc1xuIiwKLQkgICAgIGdldF9kZWNpc2lvbl9zdHIgKGctPmNyb3NzaW5nX3BoYXNlMikpOwotICBpZiAoZy0+Y3Jvc3Npbmdfb3B0aW1pemF0aW9uICE9IEdfQ1JPU1NJTkdfT1BUSU1JWkFUSU9OKQotICAgIGZwcmludGYgKGZvdXQsICJcdGNyb3NzaW5nX29wdGltaXphdGlvbjpcdCVzXG4iLAotCSAgICAgZ2V0X2RlY2lzaW9uX3N0ciAoZy0+Y3Jvc3Npbmdfb3B0aW1pemF0aW9uKSk7Ci0KLSAgaWYgKGctPnZpZXcgIT0gbm9ybWFsX3ZpZXcpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0dmlldzpcdCVzXG4iLCBnZXRfdmlld19zdHIgKGctPnZpZXcpKTsKLQotICBpZiAoZy0+ZWRnZXMgIT0gR19FREdFUykKLSAgICBmcHJpbnRmIChmb3V0LCAiXHRlZGdlczpcdCVzXG4iLCBnZXRfZGVjaXNpb25fc3RyIChnLT5lZGdlcykpOwotCi0gIGlmIChnLT5ub2RlcyAhPSBHX05PREVTKQotICAgIGZwcmludGYgKGZvdXQsIlx0bm9kZXM6XHQlc1xuIiwgZ2V0X2RlY2lzaW9uX3N0ciAoZy0+bm9kZXMpKTsKLQotICBpZiAoZy0+c3BsaW5lcyAhPSBHX1NQTElORVMpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0c3BsaW5lczpcdCVzXG4iLCBnZXRfZGVjaXNpb25fc3RyIChnLT5zcGxpbmVzKSk7Ci0KLSAgaWYgKGctPmJtYXggIT0gR19CTUFYKQotICAgIGZwcmludGYgKGZvdXQsICJcdGJtYXg6XHQlZFxuIiwgZy0+Ym1heCk7Ci0gIGlmIChnLT5jbWluICE9IEdfQ01JTikKLSAgICBmcHJpbnRmIChmb3V0LCAiXHRjbWluOlx0JWRcbiIsIGctPmNtaW4pOwotICBpZiAoZy0+Y21heCAhPSBHX0NNQVgpCi0gICAgZnByaW50ZiAoZm91dCwgIlx0Y21heDpcdCVkXG4iLCBnLT5jbWF4KTsKLSAgaWYgKGctPnBtaW4gIT0gR19QTUlOKQotICAgIGZwcmludGYgKGZvdXQsICJcdHBtaW46XHQlZFxuIiwgZy0+cG1pbik7Ci0gIGlmIChnLT5wbWF4ICE9IEdfUE1BWCkKLSAgICBmcHJpbnRmIChmb3V0LCAiXHRwbWF4Olx0JWRcbiIsIGctPnBtYXgpOwotICBpZiAoZy0+cm1pbiAhPSBHX1JNSU4pCi0gICAgZnByaW50ZiAoZm91dCwgIlx0cm1pbjpcdCVkXG4iLCBnLT5ybWluKTsKLSAgaWYgKGctPnJtYXggIT0gR19STUFYKQotICAgIGZwcmludGYgKGZvdXQsICJcdHJtYXg6XHQlZFxuIiwgZy0+cm1heCk7Ci0gIGlmIChnLT5zbWF4ICE9IEdfU01BWCkKLSAgICBmcHJpbnRmIChmb3V0LCAiXHRzbWF4Olx0JWRcbiIsIGctPnNtYXgpOwotfQpkaWZmIC0tZ2l0IGEvc3JjL3ZjZy5oIGIvc3JjL3ZjZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDM1NjAzLi4wMDAwMDAwCi0tLSBhL3NyYy92Y2cuaAorKysgL2Rldi9udWxsCkBAIC0xLDk2MyArMCwwIEBACi0vKiBWQ0cgZGVzY3JpcHRpb24gaGFuZGxlciBmb3IgQmlzb24uCi0KLSAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQmlzb24sIHRoZSBHTlUgQ29tcGlsZXIgQ29tcGlsZXIuCi0KLSAgIEJpc29uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgQmlzb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCBCaXNvbjsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwotCi0jaWZuZGVmIFZDR19IXwotIyBkZWZpbmUgVkNHX0hfCi0KLS8qIFZDRyBjb2xvciBtYXAuIFRoZSAzMiBwcmltZSBwcmVkZWZpbmVkIGNvbG9ycy4gKi8KLWVudW0gY29sb3IKLXsKLSAgd2hpdGUJCT0gMCwKLSAgYmx1ZSwKLSAgcmVkLAotICBncmVlbgkJPSAzLAotICB5ZWxsb3csCi0gIG1hZ2VudGEsCi0gIGN5YW4JCT0gNiwKLSAgZGFya2dyZXksCi0gIGRhcmtibHVlLAotICBkYXJrcmVkCT0gOSwKLSAgZGFya2dyZWVuLAotICBkYXJreWVsbG93LAotICBkYXJrbWFnZW50YQk9IDEyLAotICBkYXJrY3lhbiwKLSAgZ29sZCwKLSAgbGlnaHRncmV5CT0gMTUsCi0gIGxpZ2h0Ymx1ZSwKLSAgbGlnaHRyZWQsCi0gIGxpZ2h0Z3JlZW4JPSAxOCwKLSAgbGlnaHR5ZWxsb3csCi0gIGxpZ2h0bWFnZW50YSwKLSAgbGlnaHRjeWFuCT0gMjEsCi0gIGxpbGFjLAotICB0dXJxdW9pc2UsCi0gIGFxdWFtYXJpbmUJPSAyNCwKLSAga2hha2ksCi0gIHB1cnBsZSwKLSAgeWVsbG93Z3JlZW4JPSAyNywKLSAgcGluaywKLSAgb3JhbmdlLAotICBvcmNoaWQsCi0gIGJsYWNrCQk9IDMxCi19OwotCi0vKiBWQ0cgdGV4dG1vZGUuIFNwZWNpZnkgdGhlIGFkanVzdGVtZW50IG9mIHRoZSB0ZXh0IHdpdGhpbiB0aGUgYm9yZGVyIG9mIGEgc3VtbWFyeSBub2RlLiAqLwotZW51bSB0ZXh0bW9kZQotewotICBjZW50ZXJlZCwKLSAgbGVmdF9qdXN0aWZ5LAotICByaWdodF9qdXN0aWZ5Ci19OwotCi0vKiBWQ0cgc2hhcGVzLiBVc2VkIGZvciBub2RlcyBzaGFwZXMuICovCi1lbnVtIHNoYXBlCi17Ci0gIGJveCwKLSAgcmhvbWIsCi0gIGVsbGlwc2UsCi0gIHRyaWFuZ2xlCi19OwotCi0vKiBTdHJ1Y3R1cmUgZm9yIGNvbG9yZW50cmllcy4gICovCi1zdHJ1Y3QgY29sb3JlbnRyeQotewotICBpbnQgY29sb3JfaW5kZXg7Ci0gIGludCByZWRfY3A7Ci0gIGludCBncmVlbl9jcDsKLSAgaW50IGJsdWVfY3A7Ci0gIHN0cnVjdCBjb2xvcmVudHJ5ICpuZXh0OwotfTsKLQotLyogU3RydWN0dXJlIHRvIGNvbnN0cnVjdCBsaXN0cyBvZiBjbGFzc25hbWVzLiAqLwotc3RydWN0IGNsYXNzbmFtZQotewotICBpbnQgbm87IC8qIENsYXNzIG51bWJlciAqLwotICBjb25zdCBjaGFyICpuYW1lOyAvKiBOYW1lIGFzc29jaWF0ZWQgdG8gdGhlIGNsYXNzIG5vLiAqLwotICBzdHJ1Y3QgY2xhc3NuYW1lICpuZXh0OyAvKiBuZXh0IG5hbWUgY2xhc3MgYXNzb2NpYXRpb24uICovCi19OwotCi0vKiBTdHJ1Y3R1cmUgaXMgaW4gaW5mb25hbWUuICAqLwotc3RydWN0IGluZm9uYW1lCi17Ci0gIGludCBpbnRlZ2VyOwotICBjaGFyIGNvbnN0ICpjaGFyczsKLSAgc3RydWN0IGluZm9uYW1lICpuZXh0OwotfTsKLQotLyogVkNHIGRlY2lzaW9uIHllcy9uby4gKi8KLWVudW0gZGVjaXNpb24KLXsKLSAgeWVzLAotICBubwotfTsKLQotLyogVkNHIGdyYXBoIG9yaWVudGF0aW9uLiAqLwotZW51bSBvcmllbnRhdGlvbgotewotICB0b3BfdG9fYm90dG9tLAotICBib3R0b21fdG9fdG9wLAotICBsZWZ0X3RvX3JpZ2h0LAotICByaWdodF90b19sZWZ0Ci19OwotCi0vKiBWQ0cgYWxpZ25tZW50IGZvciBub2RlIGFsaWduZW1lbnQuICovCi1lbnVtIGFsaWdubWVudAotewotICBjZW50ZXIsCi0gIHRvcCwKLSAgYm90dG9tCi19OwotCi0vKiBWQ0cgYXJyb3cgbW9kZS4gKi8KLWVudW0gYXJyb3dfbW9kZQotewotICBmaXhlZCwKLSAgZnJlZV9hCi19OwotCi0vKiBWQ0cgY3Jvc3Npbmcgd2VpZ2h0IHR5cGUuICovCi1lbnVtIGNyb3NzaW5nX3R5cGUKLXsKLSAgYmFyeSwKLSAgbWVkaWFuLAotICBiYXJ5bWVkaWFuLAotICBtZWRpYW5iYXJ5Ci19OwotCi0vKiBWQ0cgdmlld3MuICovCi1lbnVtIHZpZXcKLXsKLSAgbm9ybWFsX3ZpZXcsCi0gIGNmaXNoLAotICBwZmlzaCwKLSAgZmNmaXNoLAotICBmcGZpc2gKLX07Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBOb2RlIGF0dHJpYnV0cyBsaXN0LiBzdHJ1Y3R1cmUgdGhhdCBkZXNjcmliZXMgYSBub2RlLiB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RydWN0IG5vZGUKLXsKLSAgLyogVGl0bGUgdGhlIHVuaXF1ZSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIG5vZGUuIFRoaXMgYXR0cmlidXRlIGlzCi0gICAgIG1hbmRhdG9yeS4gKi8KLSAgY29uc3QgY2hhciAqdGl0bGU7Ci0KLSAgLyogTGFiZWwgdGhlIHRleHQgZGlzcGxheWVkIGluc2lkZSB0aGUgbm9kZS4gSWYgbm8gbGFiZWwgaXMgc3BlY2lmaWVkCi0gICAgIHRoZW4gdGhlIHRpdGxlIG9mIHRoZSBub2RlIHdpbGwgYmUgdXNlZC4gTm90ZSB0aGF0IHRoaXMgdGV4dCBtYXkKLSAgICAgY29udGFpbiBjb250cm9sIGNoYXJhY3RlcnMgbGlrZSBORVdMSU5FIHRoYXQgaW5mbHVlbmNlcyB0aGUgc2l6ZSBvZgotICAgICB0aGUgbm9kZS4gKi8KLSAgY29uc3QgY2hhciAqbGFiZWw7Ci0KLSAgLyogbG9jIGlzIHRoZSBsb2NhdGlvbiBhcyB4LCB5IHBvc2l0aW9uIHJlbGF0aXZlbHkgdG8gdGhlIHN5c3RlbSBvZgotICAgICBjb29yZGluYXRlcyBvZiB0aGUgZ3JhcGguIExvY2F0aW9ucyBhcmUgc3BlY2lmaWVkIGluIHRoZSBmb3JtCi0gICAgIGxvYzogLSB4OiB4cG9zIHk6IHlwb3MgIiIuIFRoZSBsb2NhdGlvbnMgb2Ygbm9kZXMgYXJlIG9ubHkgdmFsaWQsCi0gICAgIGlmIHRoZSB3aG9sZSBncmFwaCBpcyBmdWxseSBzcGVjaWZpZWQgd2l0aCBsb2NhdGlvbnMgYW5kIG5vIHBhcnQgaXMKLSAgICAgZm9sZGVkLiBUaGUgbGF5b3V0IGFsZ29yaXRobSBvZiB0aGUgdG9vbCBjYWxjdWxhdGVzIGFwcHJvcHJpYXRlIHgsIHkKLSAgICAgcG9zaXRpb25zLCBpZiBhdCBsZWFzdCBvbmUgbm9kZSB0aGF0IG11c3QgYmUgZHJhd24gKGkuZS4sIGlzIG5vdAotICAgICBoaWRkZW4gYnkgZm9sZGluZyBvciBlZGdlIGNsYXNzZXMpIGRvZXMgbm90IGhhdmUgZml4ZWQgc3BlY2lmaWVkCi0gICAgIGxvY2F0aW9ucy4KLSAgICAgRGVmYXVsdCBpcyBub25lLiAqLwotICBpbnQgbG9jeDsKLSAgaW50IGxvY3k7Ci0KLSAgLyogdmVydGljYWwgb3JkZXIgaXMgdGhlIGxldmVsIHBvc2l0aW9uIChyYW5rKSBvZiB0aGUgbm9kZS4gV2UgY2FuIGFsc28KLSAgICAgc3BlY2lmeSBsZXZlbDogaW50LiBMZXZlbCBzcGVjaWZpY2F0aW9ucyBhcmUgb25seSB2YWxpZCwgaWYgdGhlCi0gICAgIGxheW91dCBpcyBjYWxjdWxhdGVkLCBpLmUuIGlmIGF0IGxlYXN0IG9uZSBub2RlIGRvZXMgbm90IGhhdmUgYQotICAgICBmaXhlZCBsb2NhdGlvbiBzcGVjaWZpY2F0aW9uLiBUaGUgbGF5b3V0IGFsZ29yaXRobSBwYXJ0aXRpb25lZCBhbGwKLSAgICAgbm9kZXMgaW50byBsZXZlbHMgMC4uLm1heGxldmVsLiBOb2RlcyBhdCB0aGUgbGV2ZWwgMCBhcmUgb24gdGhlCi0gICAgIHVwcGVyIGNvcm5lci4gVGhlIGFsZ29yaXRobSBpcyBhYmxlIHRvIGNhbGN1bGF0ZSBhcHByb3ByaWF0ZSBsZXZlbHMKLSAgICAgZm9yIHRoZSBub2RlcyBhdXRvbWF0aWNhbGx5LCBpZiBubyBmaXhlZCBsZXZlbHMgYXJlIGdpdmVuLgotICAgICBTcGVjaWZpY2F0aW9ucyBvZiBsZXZlbHMgYXJlIGFkZGl0aW9uYWwgY29uc3RyYWludHMsIHRoYXQgbWF5IGJlCi0gICAgIGlnbm9yZWQsIGlmIHRoZXkgYXJlIGluIGNvbmZsaWN0IHdpdGggbmVhciBlZGdlIHNwZWNpZmljYXRpb25zLgotICAgICBEZWZhdWx0IHZhbHVlcyBhcmUgdW5zcGVjaWZpZWQuICovCi0gIGludCB2ZXJ0aWNhbF9vcmRlcjsKLQotICAvKiBob3Jpem9udGFsIG9yZGVyIGlzIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBub2RlIHdpdGhpbiBhCi0gICAgIGxldmVsLiBUaGUgbm9kZXMgd2hpY2ggYXJlIHNwZWNpZmllZCB3aXRoIGhvcml6b250YWwgcG9zaXRpb25zIGFyZQotICAgICBvcmRlcmVkIGFjY29yZGluZyB0byB0aGVzZSBwb3NpdGlvbnMgd2l0aGluIHRoZSBsZXZlbHMuIFRoZSBub2RlcwotICAgICB3aGljaCBkbyBub3QgaGF2ZSB0aGlzIGF0dHJpYnV0ZSBhcmUgaW5zZXJ0ZWQgaW50byB0aGlzIG9yZGVyaW5nIGJ5Ci0gICAgIHRoZSBjcm9zc2luZyByZWR1Y3Rpb24gbWVjaGFuaXNtLiBOb3RlIHRoYXQgY29ubmVjdGVkIGNvbXBvbmVudHMgYXJlCi0gICAgIGhhbmRsZWQgc2VwYXJhdGVseSwgdGh1cyBpdCBpcyBub3QgcG9zc2libGUgdG8gaW50ZXJtaXggc3VjaAotICAgICBjb21wb25lbnRzIGJ5IHNwZWNpZnlpbmcgYSBob3Jpem9udGFsIG9yZGVyLiBJZiB0aGUgYWxnb3JpdGhtIGZvcgotICAgICBkb3dud2FyZCBsYWlkIG91dCB0cmVlcyBpcyB1c2VkLCB0aGUgaG9yaXpvbnRhbCBvcmRlciBpbmZsdWVuY2VzCi0gICAgIG9ubHkgdGhlIG9yZGVyIG9mIHRoZSBjaGlsZCBub2RlcyBhdCBhIG5vZGUsIGJ1dCBub3QgdGhlIG9yZGVyIG9mCi0gICAgIHRoZSB3aG9sZSBsZXZlbC4KLSAgICAgRGVmYXVsdCBpcyB1bnNwZWNpZmllZC4gKi8KLSAgaW50IGhvcml6b250YWxfb3JkZXI7Ci0KLSAgLyogd2lkdGgsIGhlaWdodCBpcyB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiBhIG5vZGUgaW5jbHVkaW5nIHRoZSBib3JkZXIuCi0gICAgIElmIG5vIHZhbHVlIChpbiBwaXhlbHMpIGlzIGdpdmVuIHRoZW4gd2lkdGggYW5kIGhlaWdodCBhcmUKLSAgICAgY2FsY3VsYXRlZCBmcm9tIHRoZSBzaXplIG9mIHRoZSBsYWJlbC4KLSAgICAgRGVmYXVsdCBhcmUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgbGFiZWwuICovCi0gIGludCB3aWR0aDsKLSAgaW50IGhlaWdodDsKLQotICAvKiBzaHJpbmssIHN0cmV0Y2ggZ2l2ZXMgdGhlIHNocmlua2luZyBhbmQgc3RyZXRjaGluZyBmYWN0b3Igb2YgdGhlCi0gICAgIG5vZGUuIFRoZSB2YWx1ZXMgb2YgdGhlIGF0dHJpYnV0ZXMgd2lkdGgsIGhlaWdodCwgYm9yZGVyd2lkdGggYW5kCi0gICAgIHRoZSBzaXplIG9mIHRoZSBsYWJlbCB0ZXh0IGlzIHNjYWxlZCBieSAoKHN0cmV0Y2g9c2hyaW5rKSBcTGFtYmRhCi0gICAgIDEwMCkgcGVyY2VudC4gTm90ZSB0aGF0IHRoZSBhY3R1YWwgc2NhbGUgdmFsdWUgaXMgZGV0ZXJtaW5lZCBieSB0aGUKLSAgICAgc2NhbGUgdmFsdWUgb2YgYSBub2RlIHJlbGF0aXZlbHkgdG8gYSBzY2FsZSB2YWx1ZSBvZiB0aGUgZ3JhcGgsCi0gICAgIGkuZS4gaWYgKHN0cmV0Y2gsc2hyaW5rKSA9ICgyLDEpIGZvciB0aGUgZ3JhcGggYW5kIChzdHJldGNoLHNocmluaykKLSAgICAgPSAoMiwxKSBmb3IgdGhlIG5vZGUgb2YgdGhlIGdyYXBoLCB0aGVuIHRoZSBub2RlIGlzIHNjYWxlZCBieSB0aGUKLSAgICAgZmFjdG9yIDQgY29tcGFyZWQgdG8gdGhlIG5vcm1hbCBzaXplLiBUaGUgc2NhbGUgdmFsdWUgY2FuIGFsc28gYmUKLSAgICAgc3BlY2lmaWVkIGJ5IHNjYWxpbmc6IGZsb2F0LgotICAgICBEZWZhdWx0IGFyZSAxLDEuICovCi0gIGludCBzaHJpbms7Ci0gIGludCBzdHJldGNoOwotCi0gIC8qIGZvbGRpbmcgc3BlY2lmaWVzIHRoZSBkZWZhdWx0IGZvbGRpbmcgb2YgdGhlIG5vZGVzLiBUaGUgZm9sZGluZyBrCi0gICAgICh3aXRoIGsgPyAwKSBtZWFucyB0aGF0IHRoZSBncmFwaCBwYXJ0IHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBlZGdlcwotICAgICBvZiBhIGNsYXNzIGxlc3Mgb3IgZXF1YWwgdG8gayBpcyBmb2xkZWQgYW5kIGRpc3BsYXllZCBhcyBvbmUgbm9kZS4KLSAgICAgVGhlcmUgYXJlIGNvbW1hbmRzIHRvIHVuZm9sZCBzdWNoIHN1bW1hcnkgbm9kZXMsIHNlZSBzZWN0aW9uIDUuIElmCi0gICAgIG5vIGZvbGRpbmcgaXMgc3BlY2lmaWVkIGZvciBhIG5vZGUsIHRoZW4gdGhlIG5vZGUgbWF5IGJlIGZvbGRlZCBpZgotICAgICBpdCBpcyBpbiB0aGUgcmVnaW9uIG9mIGFub3RoZXIgbm9kZSB0aGF0IHN0YXJ0cyB0aGUgZm9sZGluZy4gSWYKLSAgICAgZm9sZGluZyAwIGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgbm9kZSBpcyBuZXZlciBmb2xkZWQuIEluIHRoaXMgY2FzZQotICAgICB0aGUgZm9sZGluZyBzdG9wcyBhdCB0aGUgcHJlZGVjZXNzb3JzIG9mIHRoaXMgbm9kZSwgaWYgaXQgaXMKLSAgICAgcmVhY2hhYmxlIGZyb20gYW5vdGhlciBmb2xkaW5nIG5vZGUuIFRoZSBzdW1tYXJ5IG5vZGUgaW5oZXJpdHMgc29tZQotICAgICBhdHRyaWJ1dGVzIGZyb20gdGhlIG9yaWdpbmFsIG5vZGUgd2hpY2ggc3RhcnRzIHRoZSBmb2xkaW5nIChhbGwKLSAgICAgY29sb3IgYXR0cmlidXRlcywgdGV4dG1vZGUgYW5kIGxhYmVsLCBidXQgbm90IHRoZSBsb2NhdGlvbikuIEEKLSAgICAgZm9sZGVkIHJlZ2lvbiBtYXkgY29udGFpbiBmb2xkZWQgcmVnaW9ucyB3aXRoIHNtYWxsZXIgZm9sZGluZyBjbGFzcwotICAgICB2YWx1ZXMgKG5lc3RlZCBmb2xkaW5ncykuIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgbm9kZSB0aGF0IHN0YXJ0Ci0gICAgIHRoZSBmb2xkaW5nIG9mIHRoZSBzYW1lIHJlZ2lvbiAodGhpcyBpbXBsaWVzIHRoYXQgdGhlIGZvbGRpbmcgY2xhc3MKLSAgICAgdmFsdWVzIGFyZSBlcXVhbCkgdGhlbiB0aGUgYXR0cmlidXRlcyBhcmUgaW5oZXJpdGVkIGJ5IG9uZSBvZiB0aGVzZQotICAgICBub2RlcyBub25kZXRlcm1pbmlzdGljYWxseS4gSWYgZm9sZG5vZGUgYXR0cmlidXRlcyBhcmUgc3BlY2lmaWVkLAotICAgICB0aGVuIHRoZSBzdW1tYXJ5IG5vZGUgYXR0cmlidXRlcyBhcmUgaW5oZXJpdGVkIGZyb20gdGhlc2UgYXR0cmlidXRlcy4KLSAgICAgRGVmYXVsdCBpcyBub25lLiAqLwotICBpbnQgZm9sZGluZzsKLQotICAvKiBzaGFwZSBzcGVjaWZpZXMgdGhlIHZpc3VhbCBhcHBlYXJhbmNlIG9mIGEgbm9kZTogYm94LCByaG9tYiwgZWxsaXBzZSwKLSAgICAgYW5kIHRyaWFuZ2xlLiBUaGUgZHJhd2luZyBvZiBlbGxpcHNlcyBpcyBtdWNoIHNsb3dlciB0aGFuIHRoZSBkcmF3aW5nCi0gICAgIG9mIHRoZSBvdGhlciBzaGFwZXMuCi0gICAgIERlZmF1bHQgaXMgYm94LiAqLwotICBlbnVtIHNoYXBlIHNoYXBlOwotCi0gIC8qIHRleHRtb2RlIHNwZWNpZmllcyB0aGUgYWRqdXN0bWVudCBvZiB0aGUgdGV4dCB3aXRoaW4gdGhlIGJvcmRlciBvZiBhCi0gICAgIG5vZGUuIFRoZSBwb3NzaWJpbGl0aWVzIGFyZSBjZW50ZXIsIGxlZnQuanVzdGlmeSBhbmQgcmlnaHQuanVzdGlmeS4KLSAgICAgRGVmYXVsdCBpcyBjZW50ZXIuICovCi0gIGVudW0gdGV4dG1vZGUgdGV4dG1vZGU7Ci0KLSAgLyogYm9yZGVyd2lkdGggc3BlY2lmaWVzIHRoZSB0aGlja25lc3Mgb2YgdGhlIG5vZGUncyBib3JkZXIgaW4gcGl4ZWxzLgotICAgICBjb2xvciBpcyB0aGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgbm9kZS4gSWYgbm9uZSBpcyBnaXZlbiwgdGhlCi0gICAgIG5vZGUgaXMgd2hpdGUuIEZvciB0aGUgcG9zc2liaWxpdGllcywgc2VlIHRoZSBhdHRyaWJ1dGUgY29sb3IgZm9yCi0gICAgIGdyYXBocy4KLSAgICAgRGVmYXVsdCBpcyAyLiAqLwotICBpbnQgYm9yZGVyd2lkdGg7Ci0KLSAgLyogbm9kZSBjb2xvci4KLSAgICAgRGVmYXVsdCBpcyB3aGl0ZSBvciB0cmFuc3BhcmVudCwgKi8KLSAgZW51bSBjb2xvciBjb2xvcjsKLQotICAvKiB0ZXh0Y29sb3IgaXMgdGhlIGNvbG9yIGZvciB0aGUgbGFiZWwgdGV4dC4gYm9yZGVyY29sb3IgaXMgdGhlIGNvbG9yCi0gICAgIG9mIHRoZSBib3JkZXIuIERlZmF1bHQgY29sb3IgaXMgdGhlIHRleHRjb2xvci4gaW5mbzEsIGluZm8yLCBpbmZvMwotICAgICBjb21iaW5lcyBhZGRpdGlvbmFsIHRleHQgbGFiZWxzIHdpdGggYSBub2RlIG9yIGEgZm9sZGVkIGdyYXBoLiBpbmZvMSwKLSAgICAgRGVmYXVsdCBpcyBibGFjay4gKi8KLSAgZW51bSBjb2xvciB0ZXh0Y29sb3I7Ci0KLSAgLyogaW5mbzIsIGluZm8zIGNhbiBiZSBzZWxlY3RlZCBmcm9tIHRoZSBtZW51LiBUaGUgY29ycmVzcG9uZGluZyB0ZXh0Ci0gICAgIGxhYmVscyBjYW4gYmUgc2hvd24gYnkgbW91c2UgY2xpY2tzIG9uIG5vZGVzLgwKLSAgICAgRGVmYXVsdCBhcmUgbnVsbCBzdHJpbmdzLiAqLwotICBjb25zdCBjaGFyICppbmZvc1szXTsKLQotICAvKiBOb2RlIGJvcmRlciBjb2xvci4KLSAgICAgRGVmYXVsdCBpcyB0ZXh0Y29sb3IuICovCi0gIGVudW0gY29sb3IgYm9yZGVyY29sb3I7Ci0KLSAgLyogTmV4dCBub2RlIG5vZGUuLi4gKi8KLSAgc3RydWN0IG5vZGUgKm5leHQ7Ci19OwotCi0vKiB0eXBlZGVmIGFsaWFzLiAqLwotdHlwZWRlZiBzdHJ1Y3Qgbm9kZSBub2RlOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IEVkZ2UgYXR0cmlidXRzIGxpc3QuIFN0cnVjdHVyZSB0aGF0IGRlc2NyaWJlcyBhbiBlZGdlLiB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIFZDRyBFZGdlIHR5cGUuICovCi1lbnVtIGVkZ2VfdHlwZQotewotICBub3JtYWxfZWRnZSwKLSAgYmFja19lZGdlLAotICBuZWFyX2VkZ2UsCi0gIGJlbnRfbmVhcl9lZGdlCi19OwotCi0vKiBTdHJ1Y3RzIGVudW0gZGVmaW5pdGlvbnMgZm9yIGVkZ2VzLiAqLwotZW51bSBsaW5lc3R5bGUKLXsKLSAgY29udGludW91cywKLSAgZGFzaGVkLAotICBkb3R0ZWQsCi0gIGludmlzaWJsZQotfTsKLQotZW51bSBhcnJvd3N0eWxlCi17Ci0gIHNvbGlkLAotICBsaW5lLAotICBub25lCi19OwotCi0vKiBUaGUgc3RydWN0IGVkZ2UgaXRzZWxmLiAqLwotc3RydWN0IGVkZ2UKLXsKLQotICAvKiBFZGdlIHR5cGUuCi0gICAgIERlZmF1bHQgaXMgbm9ybWFsIGVkZ2UuICovCi0gIGVudW0gZWRnZV90eXBlIHR5cGU7Ci0KLSAgLyogU291cmNlbmFtZSBpcyB0aGUgdGl0bGUgb2YgdGhlIHNvdXJjZSBub2RlIG9mIHRoZSBlZGdlLgotICAgICBEZWZhdWx0OiBub25lLiAqLwotICBjb25zdCBjaGFyICpzb3VyY2VuYW1lOyAvKiBNYW5kYXRvcnkuICovCi0KLSAgLyogVGFyZ2V0bmFtZSBpcyB0aGUgdGl0bGUgb2YgdGhlIHRhcmdldCBub2RlIG9mIHRoZSBlZGdlLgotICAgICBEZWZhdWx0OiBub25lLiAqLwotICBjb25zdCBjaGFyICp0YXJnZXRuYW1lOyAvKiBNYW5kYXRvcnkuICovCi0KLSAgLyogTGFiZWwgc3BlY2lmaWVzIHRoZSBsYWJlbCBvZiB0aGUgZWRnZS4gSXQgaXMgZHJhd24gaWYKLSAgICAgZGlzcGxheS5lZGdlLmxhYmVscyBpcyBzZXQgdG8geWVzLgotICAgICBEZWZhdWx0OiBubyBsYWJlbC4gKi8KLSAgY29uc3QgY2hhciAqbGFiZWw7Ci0KLSAgLyogTGluZXN0eWxlIHNwZWNpZmllcyB0aGUgc3R5bGUgdGhlIGVkZ2UgaXMgZHJhd24uIFBvc3NpYmlsaXRpZXMgYXJlOgotICAgICBmZmwgY29udGludW91cyBhIHNvbGlkIGxpbmUgaXMgZHJhd24gKCAtLSApIGZmbCBkYXNoZWQgdGhlIGVkZ2UKLSAgICAgY29uc2lzdHMgb2Ygc2luZ2xlIGRhc2hlcyAoIC0gLSAtICkgZmZsIGRvdHRlZCB0aGUgZWRnZSBpcyBtYWRlIG9mCi0gICAgIHNpbmdsZSBkb3RzICggXERlbHRhICBcRGVsdGEgIFxEZWx0YSAgKSBmZmwgaW52aXNpYmxlIHRoZSBlZGdlIGlzIG5vdAotICAgICBkcmF3bi4gVGhlIGF0dHJpYnV0ZXMgb2YgaXRzIHNoYXBlIChjb2xvciwgdGhpY2tuZXNzKSBhcmUgaWdub3JlZC4KLSAgICAgVG8gZHJhdyBhIGRhc2hlZCBvciBkb3R0ZWQgbGluZSBuZWVkcyBtb3JlIHRpbWUgdGhhbiBzb2xpZCBsaW5lcy4KLSAgICAgRGVmYXVsdCBpcyBjb250aW51b3VzLiAqLwotICBlbnVtIGxpbmVzdHlsZSBsaW5lc3R5bGU7Ci0KLSAgLyogVGhpY2tuZXNzIGlzIHRoZSB0aGlja25lc3Mgb2YgYW4gZWRnZS4KLSAgICAgRGVmYXVsdCBpcyAyLiAqLwotICBpbnQgdGhpY2tuZXNzOwotCi0gIC8qIENsYXNzIHNwZWNpZmllcyB0aGUgZm9sZGluZyBjbGFzcyBvZiB0aGUgZWRnZS4gTm9kZXMgcmVhY2hhYmxlIGJ5Ci0gICAgIGVkZ2VzIG9mIGEgY2xhc3MgbGVzcyBvciBlcXVhbCB0byBhIGNvbnN0YW50IGsgc3BlY2lmeSBmb2xkaW5nCi0gICAgIHJlZ2lvbnMgb2Ygay4gU2VlIHRoZSBub2RlIGF0dHJpYnV0ZSBmb2xkaW5nIGFuZCB0aGUgZm9sZGluZyBjb21tYW5kcy4KLSAgICAgRGVmYXVsdCBpcyAxLiAqLwotICBpbnQgY2xhc3M7Ci0KLSAgLyogY29sb3IgaXMgdGhlIGNvbG9yIG9mIHRoZSBlZGdlLgotICAgICBEZWZhdWx0IGlzIGJsYWNrLiAqLwotICBlbnVtIGNvbG9yIGNvbG9yOwotCi0gIC8qIHRleHRjb2xvciBpcyB0aGUgY29sb3Igb2YgdGhlIGxhYmVsIG9mIHRoZSBlZGdlLiBhcnJvd2NvbG9yLAotICAgICBiYWNrYXJyb3djb2xvciBpcyB0aGUgY29sb3Igb2YgdGhlIGFycm93IGhlYWQgYW5kIG9mIHRoZSBiYWNrYXJyb3cKLSAgICAgaGVhZC4gcHJpb3JpdHkgVGhlIHBvc2l0aW9ucyBvZiB0aGUgbm9kZXMgYXJlIG1haW5seSBkZXRlcm1pbmVkIGJ5Ci0gICAgIHRoZSBpbmNvbWluZyBhbmQgb3V0Z29pbmcgZWRnZXMuIE9uZSBjYW4gdGhpbmsgb2YgcnViYmVyYmFuZHMgaW5zdGVhZAotICAgICBvZiBlZGdlcyB0aGF0IHB1bGwgYSBub2RlIGludG8gaXRzIHBvc2l0aW9uLiBUaGUgcHJpb3JpdHkgb2YgYW4gZWRnZXMKLSAgICAgY29ycmVzcG9uZHMgdG8gdGhlIHN0cmVuZ3RoIG9mIHRoZSBydWJiZXJiYW5kLgotICAgICBEZWZhdWx0IGlzIGNvbG9yLiAqLwotICBlbnVtIGNvbG9yIHRleHRjb2xvcjsKLQotICAvKiBBcnJvdyBjb2xvci4KLSAgICAgRGVmYXVsdCBpcyBjb2xvci4gKi8KLSAgZW51bSBjb2xvciBhcnJvd2NvbG9yOwotCi0gIC8qIEJhY2tBcnJvdyBjb2xvci4KLSAgICAgRGVmYXVsdCBpcyBjb2xvci4gKi8KLSAgZW51bSBjb2xvciBiYWNrYXJyb3djb2xvcjsKLQotICAvKiBhcnJvd3NpemUsIGJhY2thcnJvd3NpemUgVGhlIGFycm93IGhlYWQgaXMgYSByaWdodC1hbmdsZWQsIGlzb3NjZWxlcwotICAgICB0cmlhbmdsZSBhbmQgdGhlIGNhdGhldHVzZXMgaGF2ZSBsZW5ndGggYXJyb3dzaXplLgotICAgICBEZWZhdWx0IGlzIDEwLiAqLwotICBpbnQgYXJyb3dzaXplOwotCi0gIC8qIEJhY2thcnJvdyBzaXplCi0gICAgIERlZmF1bHQgaXMgMC4gKi8KLSAgaW50IGJhY2thcnJvd3NpemU7Ci0KLSAgLyogYXJyb3dzdHlsZSwgYmFja2Fycm93c3R5bGUgRWFjaCBlZGdlIGhhcyB0d28gYXJyb3cgaGVhZHM6IHRoZSBvbmUKLSAgICAgYXBwZWFycyBhdCB0aGUgdGFyZ2V0IG5vZGUgKHRoZSBub3JtYWwgYXJyb3cgaGVhZCksIHRoZSBvdGhlciBhcHBlYXJzCi0gICAgIGF0IHRoZSBzb3VyY2Ugbm9kZSAodGhlIGJhY2thcnJvdyBoZWFkKS4gTm9ybWFsIGVkZ2VzIG9ubHkgaGF2ZSB0aGUKLSAgICAgbm9ybWFsIHNvbGlkIGFycm93IGhlYWQsIHdoaWxlIHRoZSBiYWNrYXJyb3cgaGVhZCBpcyBub3QgZHJhd24sIGkuZS4KLSAgICAgaXQgaXMgbm9uZS4gQXJyb3dzdHlsZSBpcyB0aGUgc3R5bGUgb2YgdGhlIG5vcm1hbCBhcnJvdyBoZWFkLCBhbmQKLSAgICAgYmFja2Fycm93c3R5bGUgaXMgdGhlIHN0eWxlIG9mIHRoZSBiYWNrYXJyb3cgaGVhZC4gU3R5bGVzIGFyZSBub25lLAotICAgICBpLmUuIG5vIGFycm93IGhlYWQsIHNvbGlkLCBhbmQgbGluZS4KLSAgICAgRGVmYXVsdCBpcyBzb2xpZC4gKi8KLSAgZW51bSBhcnJvd3N0eWxlIGFycm93c3R5bGU7Ci0KLSAgLyogRGVmYXVsdCBpcyBub25lLiAqLwotICBlbnVtIGFycm93c3R5bGUgYmFja2Fycm93c3R5bGU7Ci0KLSAgLyogRGVmYXVsdCBpcyAxLiAqLwotICBpbnQgcHJpb3JpdHk7Ci0KLSAgLyogQW5jaG9yLiBBbiBhbmNob3IgcG9pbnQgZGVzY3JpYmVzIHRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBpbiBhIG5vZGUKLSAgICAgd2hlcmUgYW4gZWRnZSBnb2VzIG91dC4gVGhpcyBpcyB1c2VmdWwsIGlmIG5vZGUgbGFiZWxzIGFyZSBzZXZlcmFsCi0gICAgIGxpbmVzIGxvbmcsIGFuZCBvdXRnb2luZyBlZGdlcyBhcmUgcmVsYXRlZCB0byBsYWJlbCBsaW5lcy4gKEUuZy4sCi0gICAgIHRoaXMgYWxsb3dzIGEgbmljZSB2aXN1YWxpemF0aW9uIG9mIHN0cnVjdHMgY29udGFpbmluZyBwb2ludGVycyBhcwotICAgICBmaWVsZHMuKS4KLSAgICAgRGVmYXVsdCBpcyBub25lLiAqLwotICBpbnQgYW5jaG9yOwotCi0gIC8qIEhvcml6b250YWwgb3JkZXIgaXMgdGhlIGhvcml6b250YWwgcG9zaXRpb24gdGhlIGVkZ2UuIFRoaXMgaXMgb2YKLSAgICAgaW50ZXJlc3Qgb25seSBpZiB0aGUgZWRnZSBjcm9zc2VzIHNldmVyYWwgbGV2ZWxzIGJlY2F1c2UgaXQgc3BlY2lmaWVzCi0gICAgIHRoZSBwb2ludCB3aGVyZSB0aGUgZWRnZSBjcm9zc2VzIHRoZSBsZXZlbC4gd2l0aGluIGEgbGV2ZWwuIFRoZSBub2RlcwotICAgICB3aGljaCBhcmUgc3BlY2lmaWVkIHdpdGggaG9yaXpvbnRhbCBwb3NpdGlvbnMgYXJlIG9yZGVyZWQgYWNjb3JkaW5nCi0gICAgIHRvIHRoZXNlIHBvc2l0aW9ucyB3aXRoaW4gYSBsZXZlbC4gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgYSBsb25nCi0gICAgIGVkZ2UgdGhhdCBjcm9zc2VzIHRoZSBsZXZlbCBzcGVjaWZpZXMgYmV0d2VlbiB3aGljaCB0d28gbm9kZSBvZiB0aGF0Ci0gICAgIGxldmVsIHRoZSBlZGdlIGhhcyB0byBiZSBkcmF3bi4gT3RoZXIgZWRnZXMgd2hpY2ggZG8gbm90IGhhdmUgdGhpcwotICAgICBhdHRyaWJ1dGUgYXJlIGluc2VydGVkIGludG8gdGhpcyBvcmRlcmluZyBieSB0aGUgY3Jvc3NpbmcgcmVkdWN0aW9uCi0gICAgIG1lY2hhbmlzbS4gTm90ZSB0aGF0IGNvbm5lY3RlZCBjb21wb25lbnRzIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHksCi0gICAgIHRodXMgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGludGVybWl4IHN1Y2ggY29tcG9uZW50cyBieSBzcGVjaWZ5aW5nIGEKLSAgICAgaG9yaXpvbnRhbCBvcmRlci4KLSAgICAgRGVmYXVsdCBpcyB1bnNwY2lmaWVkLiAqLwotICBpbnQgaG9yaXpvbnRhbF9vcmRlcjsKLQotICAvKgotICAqKiBOZXh0IGVkZ2Ugbm9kZS4uLgotICAqLwotICBzdHJ1Y3QgZWRnZSAqbmV4dDsKLQotfTsKLQotLyoKLSoqIHR5cGVkZWYgYWxpYXMuCi0qLwotdHlwZWRlZiBzdHJ1Y3QgZWRnZSBlZGdlOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBHcmFwaCBhdHRyaWJ1dHMgbGlzdC4gU3RydWN0dXJlIHRoYXQgZGVzY3JpYmVzIGEgZ3JhcGguIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0cnVjdCBncmFwaAotewotICAvKiBHcmFwaCB0aXRsZSBvciBuYW1lLgotICAgICBUaXRsZSBzcGVjaWZpZXMgdGhlIG5hbWUgKGEgc3RyaW5nKSBhc3NvY2lhdGVkIHdpdGggdGhlIGdyYXBoLiBUaGUKLSAgICAgZGVmYXVsdCBuYW1lIG9mIGEgc3ViZ3JhcGggaXMgdGhlIG5hbWUgb2YgdGhlIG91dGVyIGdyYXBoLCBhbmQgdGhlCi0gICAgIG5hbWUgb2YgdGhlIG91dG1vc3QgZ3JhcGggaXMgdGhlIG5hbWUgb2YgdGhlIHNwZWNpZmljYXRpb24gaW5wdXQKLSAgICAgZmlsZS4gVGhlIG5hbWUgb2YgYSBncmFwaCBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoaXMgZ3JhcGgsIGUuZy4sIGlmCi0gICAgIHdlIHdhbnQgdG8gZXhwcmVzcyB0aGF0IGFuIGVkZ2UgcG9pbnRzIHRvIGEgc3ViZ3JhcGguIFN1Y2ggZWRnZXMKLSAgICAgcG9pbnQgdG8gdGhlIHJvb3Qgb2YgdGhlIGdyYXBoLCBpLmUuIHRoZSBmaXJzdCBub2RlIG9mIHRoZSBncmFwaCBvcgotICAgICB0aGUgcm9vdCBvZiB0aGUgZmlyc3Qgc3ViZ3JhcGggaW4gdGhlIGdyYXBoLCBpZiB0aGUgc3ViZ3JhcGggaXMKLSAgICAgdmlzdWFsaXplZCBleHBsaWNpdGx5LgotICAgICBCeSBkZWZhdWx0LCBpdCdzIHRoZSBuYW1lIG9mIHRoZSB2Y2cgZ3JhcGggZmlsZSBkZXNjcmlwdGlvbi4gKi8KLSAgY29uc3QgY2hhciAqdGl0bGU7Ci0KLSAgLyogR3JhcGggbGFiZWwuCi0gICAgIExhYmVsIHRoZSB0ZXh0IGRpc3BsYXllZCBpbnNpZGUgdGhlIG5vZGUsIHdoZW4gdGhlIGdyYXBoIGlzIGZvbGRlZAotICAgICB0byBhIG5vZGUuIElmIG5vIGxhYmVsIGlzIHNwZWNpZmllZCB0aGVuIHRoZSB0aXRsZSBvZiB0aGUgZ3JhcGggd2lsbAotICAgICBiZSB1c2VkLiBOb3RlIHRoYXQgdGhpcyB0ZXh0IG1heSBjb250YWluIGNvbnRyb2wgY2hhcmFjdGVycyBsaWtlCi0gICAgIE5FV0xJTkUgdGhhdCBpbmZsdWVuY2VzIHRoZSBzaXplIG9mIHRoZSBub2RlLgotICAgICBCeSBkZWZhdWx0LCBpdCB0YWtlcyB0aGUgdGl0bGUgdmFsdWUgKi8KLSAgY29uc3QgY2hhciAqbGFiZWw7Ci0KLSAgLyogQW55IGluZm9ybWF0aW9ucy4KLSAgICAgSW5mbzEsIGluZm8yLCBpbmZvMyBjb21iaW5lcyBhZGRpdGlvbmFsIHRleHQgbGFiZWxzIHdpdGggYSBub2RlIG9yIGEKLSAgICAgZm9sZGVkIGdyYXBoLiBpbmZvMSwgaW5mbzIsIGluZm8zIGNhbiBiZSBzZWxlY3RlZCBmcm9tIHRoZSBtZW51Ci0gICAgIGludGVyYWN0aXZlbHkuIFRoZSBjb3JyZXNwb25kaW5nIHRleHQgbGFiZWxzIGNhbiBiZSBzaG93biBieSBtb3VzZQotICAgICBjbGlja3Mgb24gbm9kZXMuCi0gICAgIERlZmF1bHQgdmFsdWVzIGFyZSBlbXB0eSBzdHJpbmdzIChoZXJlIE5VTEwgcG9pbnRlcnMpICovCi0gIGNvbnN0IGNoYXIgKmluZm9zWzNdOwotCi0gIC8qIEJhY2tncm91bmQgY29sb3IgYW5kIHN1bW1hcnkgbm9kZSBjb2xvcnMKLSAgICAgQ29sb3Igc3BlY2lmaWVzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGZvciB0aGUgb3V0ZXJtb3N0IGdyYXBoLCBvciB0aGUKLSAgICAgY29sb3Igb2YgdGhlIHN1bW1hcnkgbm9kZSBmb3Igc3ViZ3JhcGhzLiBDb2xvcnMgYXJlIGdpdmVuIGluIHRoZSBlbnVtCi0gICAgIGRlY2xhcmVkIGFib3ZlLiBJZiBtb3JlIHRoYW4gdGhlc2UgZGVmYXVsdCBjb2xvcnMgYXJlIG5lZWRlZCwgYQotICAgICBjb2xvciBtYXAgd2l0aCBtYXhpbWFsIDI1NiBlbnRyaWVzIGNhbiBiZSB1c2VkLiBUaGUgZmlyc3QgMzIgZW50cmllcwotICAgICBjb3JyZXNwb25kIHRvIHRoZSBjb2xvcnMganVzdCBsaXN0ZWQuIEEgY29sb3Igb2YgdGhlIGNvbG9yIG1hcCBjYW4KLSAgICAgc2VsZWN0ZWQgYnkgdGhlIGNvbG9yIG1hcCBpbmRleCwgYW4gaW50ZWdlciwgZm9yIGluc3RhbmNlIHJlZCBoYXMKLSAgICAgaW5kZXggMiwgZ3JlZW4gaGFzIGluZGV4IDMsIGV0Yy4KLSAgICAgRGVmYXVsdCBpcyB3aGl0ZSBmb3IgYmFja2dyb3VuZCBhbmQgd2hpdGUgb3IgdHJhbnNwYXJlbnQgZm9yIHN1bW1hcnkKLSAgICAgbm9kZXMuICovCi0gIGVudW0gY29sb3IgY29sb3I7Ci0KLSAgLyogVGV4dGNvbG9yLgotICAgICBuZWVkIGV4cGxhbmF0aW9ucyA/Pz8KLSAgICAgZGVmYXVsdCBpcyBibGFjayBmb3Igc3VtbWFyeSBub2Rlcy4gKi8KLSAgZW51bSBjb2xvciB0ZXh0Y29sb3I7Ci0KLSAgLyogQm9yZGVyY29sb3IgaXMgdGhlIGNvbG9yIG9mIHRoZSBzdW1tYXJ5IG5vZGUncyBib3JkZXIuIERlZmF1bHQgY29sb3IKLSAgICAgaXMgdGhlIHRleHRjb2xvci4gd2lkdGgsIGhlaWdodCBhcmUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUKLSAgICAgZGlzcGxheWVkIHBhcnQgb2YgdGhlIHdpbmRvdyBvZiB0aGUgb3V0ZXJtb3N0IGdyYXBoIGluIHBpeGVscywgb3IKLSAgICAgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgc3VtbWFyeSBub2RlIG9mIGlubmVyIHN1YmdyYXBocy4KLSAgICAgRGVmYXVsdCBpcyB0aGUgZGVmYXVsdCBvZiB0aGUgdGV4dGNvbG9yLiAqLwotICBlbnVtIGNvbG9yIGJvcmRlcmNvbG9yOwotCi0gIC8qIFdpZHRoLCBoZWlnaHQgYXJlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGRpc3BsYXllZCBwYXJ0IG9mIHRoZQotICAgICB3aW5kb3cgb2YgdGhlIG91dGVybW9zdCBncmFwaCBpbiBwaXhlbHMsIG9yIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlCi0gICAgIHN1bW1hcnkgbm9kZSBvZiBpbm5lciBzdWJncmFwaHMuCi0gICAgIERlZmF1bHQgdmFsdWUgaXMgMTAwLiAqLwotICBpbnQgd2lkdGg7Ci0gIGludCBoZWlnaHQ7Ci0KLSAgLyogU3BlY2lmeSB0aGUgdGhpY2tuZXNzIGlmIHN1bW1hcnkgbm9kZSdzIGJvcmRlciBpbiBwaXhlbHMuCi0gICAgIGRlZmF1bHQgdmFsdWUgaXMgMi4gKi8KLSAgaW50IGJvcmRlcndpZHRoOwotCi0gIC8qIHgsIHkgYXJlIHRoZSB4LXBvc2l0aW9uIGFuZCB5LXBvc2l0aW9uIG9mIHRoZSBncmFwaCdzIHdpbmRvdyBpbgotICAgICBwaXhlbHMsIHJlbGF0aXZlbHkgdG8gdGhlIHJvb3Qgc2NyZWVuLCBpZiBpdCBpcyB0aGUgb3V0ZXJtb3N0IGdyYXBoLgotICAgICBUaGUgb3JpZ2luIG9mIHRoZSB3aW5kb3cgaXMgdXBwZXIsIGxlZnQgaGFuZC4gRm9yIGlubmVyIHN1YmdyYXBocywKLSAgICAgaXQgaXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBmb2xkZWQgc3VtbWFyeSBub2RlLiBUaGUgcG9zaXRpb24gY2FuIGFsc28KLSAgICAgYmUgc3BlY2lmaWVkIGluIHRoZSBmb3JtIGxvYzogZng6aW50IHk6aW50Zy4KLSAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMC4gKi8KLSAgaW50IHg7Ci0gIGludCB5OwotCi0gIC8qIGZvbGRpbmcgb2YgYSBzdWJncmFwaCBpcyAxLCBpZiB0aGUgc3ViZ3JhcGggaXMgZnVzZWQsIGFuZCAwLCBpZiB0aGUKLSAgICAgc3ViZ3JhcGggaXMgdmlzdWFsaXplZCBleHBsaWNpdGx5LiBUaGVyZSBhcmUgY29tbWFuZHMgdG8gdW5mb2xkIHN1Y2gKLSAgICAgc3VtbWFyeSBub2Rlcy4KLSAgICAgRGVmYXVsdCB2YWx1ZSBpcyAwICovCi0gIGludCBmb2xkaW5nOwotCi0gIC8qIFNocmluaywgc3RyZXRjaCBnaXZlcyB0aGUgc2hyaW5raW5nIGFuZCBzdHJldGNoaW5nIGZhY3RvciBmb3IgdGhlCi0gICAgIGdyYXBoJ3MgcmVwcmVzZW50YXRpb24gKGRlZmF1bHQgaXMgMSwgMSkuICgoc3RyZXRjaD1zaHJpbmspIFxMYW1iZGEKLSAgICAgMTAwKSBpcyB0aGUgc2NhbGluZyBvZiB0aGUgZ3JhcGggaW4gcGVyY2VudGFnZSwgZS5nLiwKLSAgICAgKHN0cmV0Y2gsc2hyaW5rKSA9ICgxLDEpIG9yICgyLDIpIG9yICgzLDMpIDogOiA6IGlzIG5vcm1hbCBzaXplLAotICAgICAoc3RyZXRjaCxzaHJpbmspID0gKDEsMikgaXMgaGFsZiBzaXplLCAoc3RyZXRjaCxzaHJpbmspID0gKDIsMSkgaXMKLSAgICAgZG91YmxlIHNpemUuIEZvciBzdWJncmFwaHMsIGl0IGlzIGFsc28gdGhlIHNjYWxpbmcgZmFjdG9yIG9mIHRoZQotICAgICBzdW1tYXJ5IG5vZGUuIFRoZSBzY2FsaW5nIGZhY3RvciBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgYnkgc2NhbGluZzoKLSAgICAgZmxvYXQgKGhlcmUsIHNjYWxpbmcgMS4wIG1lYW5zIG5vcm1hbCBzaXplKS4gKi8KLSAgaW50IHNocmluazsKLSAgaW50IHN0cmV0Y2g7Ci0KLSAgLyogdGV4dG1vZGUgc3BlY2lmaWVzIHRoZSBhZGp1c3RtZW50IG9mIHRoZSB0ZXh0IHdpdGhpbiB0aGUgYm9yZGVyIG9mIGEKLSAgICAgc3VtbWFyeSBub2RlLiBUaGUgcG9zc2liaWxpdGllcyBhcmUgY2VudGVyLCBsZWZ0Lmp1c3RpZnkgYW5kCi0gICAgIHJpZ2h0Lmp1c3RpZnkuCi0gICAgIERlZmF1bHQgdmFsdWUgaXMgY2VudGVyLiovCi0gIGVudW0gdGV4dG1vZGUgdGV4dG1vZGU7Ci0KLSAgLyogU2hhcGUgY2FuIGJlIHNwZWNpZmllZCBmb3Igc3ViZ3JhcGhzIG9ubHkuIEl0IGlzIHRoZSBzaGFwZSBvZiB0aGUKLSAgICAgc3ViZ3JhcGggc3VtbWFyeSBub2RlIHRoYXQgYXBwZWFycyBpZiB0aGUgc3ViZ3JhcGggaXMgZm9sZGVkOiBib3gsCi0gICAgIHJob21iLCBlbGxpcHNlLCBhbmQgdHJpYW5nbGUuIHZlcnRpY2FsIG9yZGVyIGlzIHRoZSBsZXZlbCBwb3NpdGlvbgotICAgICAocmFuaykgb2YgdGhlIHN1bW1hcnkgbm9kZSBvZiBhbiBpbm5lciBzdWJncmFwaCwgaWYgdGhpcyBzdWJncmFwaCBpcwotICAgICBmb2xkZWQuIFdlIGNhbiBhbHNvIHNwZWNpZnkgbGV2ZWw6IGludC4gVGhlIGxldmVsIGlzIG9ubHkKLSAgICAgcmVjb2duaXplZCwgaWYgYW4gYXV0b21hdGljYWwgbGF5b3V0IGlzIGNhbGN1bGF0ZWQuIGhvcml6b250YWwgb3JkZXIKLSAgICAgaXMgdGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHN1bW1hcnkgbm9kZSB3aXRoaW4gYSBsZXZlbC4gVGhlCi0gICAgIG5vZGVzIHdoaWNoIGFyZSBzcGVjaWZpZWQgd2l0aCBob3Jpem9udGFsIHBvc2l0aW9ucyBhcmUgb3JkZXJlZAotICAgICBhY2NvcmRpbmcgdG8gdGhlc2UgcG9zaXRpb25zIHdpdGhpbiB0aGUgbGV2ZWxzLiBUaGUgbm9kZXMgd2hpY2ggZG8KLSAgICAgbm90IGhhdmUgdGhpcyBhdHRyaWJ1dGUgYXJlIGluc2VydGVkIGludG8gdGhpcyBvcmRlcmluZyBieSB0aGUKLSAgICAgY3Jvc3NpbmcgcmVkdWN0aW9uIG1lY2hhbmlzbS4gTm90ZSB0aGF0IGNvbm5lY3RlZAotICAgICBjb21wb25lbnRzIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHksIHRodXMgaXQgaXMgbm90IHBvc3NpYmxlIHRvCi0gICAgIGludGVybWl4IHN1Y2ggY29tcG9uZW50cyBieSBzcGVjaWZ5aW5nIGEgaG9yaXpvbnRhbCBvcmRlci4gSWYgdGhlCi0gICAgIGFsZ29yaXRobSBmb3IgZG93bndhcmQgbGFpZCBvdXQgdHJlZXMgaXMgdXNlZCwgdGhlIGhvcml6b250YWwgb3JkZXIKLSAgICAgaW5mbHVlbmNlcyBvbmx5IHRoZSBvcmRlciBvZiB0aGUgY2hpbGQgbm9kZXMgYXQgYSBub2RlLCBidXQgbm90IHRoZQotICAgICBvcmRlciBvZiB0aGUgd2hvbGUgbGV2ZWwuCi0gICAgIERlZmF1bHQgaXMgYm94LCBvdGhlcjogcmhvbWIsIGVsbGlwc2UsIHRyaWFuZ2xlLiAqLwotICBlbnVtIHNoYXBlIHNoYXBlOwotCi0gIC8qIFZlcnRpY2FsIG9yZGVyIGlzIHRoZSBsZXZlbCBwb3NpdGlvbiAocmFuaykgb2YgdGhlIHN1bW1hcnkgbm9kZSBvZiBhbgotICAgICBpbm5lciBzdWJncmFwaCwgaWYgdGhpcyBzdWJncmFwaCBpcyBmb2xkZWQuIFdlIGNhbiBhbHNvIHNwZWNpZnkKLSAgICAgbGV2ZWw6IGludC4gVGhlIGxldmVsIGlzIG9ubHkgcmVjb2duaXplZCwgaWYgYW4gYXV0b21hdGljYWwgbGF5b3V0IGlzCi0gICAgIGNhbGN1bGF0ZWQuICAqLwotICBpbnQgdmVydGljYWxfb3JkZXI7Ci0KLSAgLyogSG9yaXpvbnRhbCBvcmRlciBpcyB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgc3VtbWFyeSBub2RlIHdpdGhpbgotICAgICBhIGxldmVsLiBUaGUgbm9kZXMgd2hpY2ggYXJlIHNwZWNpZmllZCB3aXRoIGhvcml6b250YWwgcG9zaXRpb25zIGFyZQotICAgICBvcmRlcmVkIGFjY29yZGluZyB0byB0aGVzZSBwb3NpdGlvbnMgd2l0aGluIHRoZSBsZXZlbHMuIFRoZSBub2RlcyB3aGljaAotICAgICBkbyBub3QgaGF2ZSB0aGlzIGF0dHJpYnV0ZSBhcmUgaW5zZXJ0ZWQgaW50byB0aGlzIG9yZGVyaW5nIGJ5IHRoZQotICAgICBjcm9zc2luZyByZWR1Y3Rpb24gbWVjaGFuaXNtLiBOb3RlIHRoYXQgY29ubmVjdGVkIGNvbXBvbmVudHMgYXJlCi0gICAgIGhhbmRsZWQgc2VwYXJhdGVseSwgdGh1cyBpdCBpcyBub3QgcG9zc2libGUgdG8gaW50ZXJtaXggc3VjaCBjb21wb25lbnRzCi0gICAgIGJ5IHNwZWNpZnlpbmcgYSBob3Jpem9udGFsIG9yZGVyLiBJZiB0aGUgYWxnb3JpdGhtIGZvciBkb3dud2FyZCBsYWlkCi0gICAgIG91dCB0cmVlcyBpcyB1c2VkLCB0aGUgaG9yaXpvbnRhbCBvcmRlciBpbmZsdWVuY2VzIG9ubHkgdGhlIG9yZGVyIG9mCi0gICAgIHRoZSBjaGlsZCBub2RlcyBhdCBhIG5vZGUsIGJ1dCBub3QgdGhlIG9yZGVyIG9mIHRoZSB3aG9sZSBsZXZlbC4gICovCi0gIGludCBob3Jpem9udGFsX29yZGVyOwotCi0gIC8qIHhtYXgsIHltYXggc3BlY2lmeSB0aGUgbWF4aW1hbCBzaXplIG9mIHRoZSB2aXJ0dWFsIHdpbmRvdyB0aGF0IGlzCi0gICAgIHVzZWQgdG8gZGlzcGxheSB0aGUgZ3JhcGguIFRoaXMgaXMgdXN1YWxseSBsYXJnZXIgdGhhbiB0aGUgZGlzcGxheWVkCi0gICAgIHBhcnQsIHRodXMgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGRpc3BsYXllZCBwYXJ0IGNhbm5vdCBiZQotICAgICBncmVhdGVyIHRoYW4geG1heCBhbmQgeW1heC4gT25seSB0aG9zZSBwYXJ0cyBvZiB0aGUgZ3JhcGggYXJlIGRyYXduCi0gICAgIHRoYXQgYXJlIGluc2lkZSB0aGUgdmlydHVhbCB3aW5kb3cuIFRoZSB2aXJ0dWFsIHdpbmRvdyBjYW4gYmUgbW92ZWQKLSAgICAgb3ZlciB0aGUgcG90ZW50aWFsIGluZmluaXRlIHN5c3RlbSBvZiBjb29yZGluYXRlcyBieSBzcGVjaWFsCi0gICAgIHBvc2l0aW9uaW5nIGNvbW1hbmRzLgotICAgICBEZWZhdWx0cyBhcmUgOTAgYW5kIDkwLiAqLwotICBpbnQgeG1heDsKLSAgaW50IHltYXg7Ci0KLSAgLyogeHktYmFzZTogc3BlY2lmeSB0aGUgdXBwZXIgbGVmdCBjb3JuZXIgY29vcmRpbmF0ZXMgb2YgdGhlIGdyYXBoCi0gICAgIHJlbGF0aXZlbHkgdG8gdGhlIHJvb3Qgd2luZG93LgotICAgICBEZWZhdWx0cyBhcmUgNSwgNS4gKi8KLSAgaW50IHhiYXNlOwotICBpbnQgeWJhc2U7Ci0KLSAgLyogeHNwYWNlLCB5c3BhY2UgdGhlIG1pbmltdW0gaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgZGlzdGFuY2UgYmV0d2VlbgotICAgICBub2Rlcy4geGxzcGFjZSBpcyB0aGUgaG9yaXpvbnRhbCBkaXN0YW5jZSBiZXR3ZWVuIGxpbmVzIGF0IHRoZQotICAgICBwb2ludHMgd2hlcmUgdGhleSBjcm9zcyB0aGUgbGV2ZWxzLiAoQXQgdGhlc2UgcG9pbnRzLCBkdW1teSBub2RlcwotICAgICBhcmUgdXNlZC4gSW4gZmFjdCwgdGhpcyBpcyB0aGUgaG9yaXpvbnRhbCBkaXN0YW5jZSBiZXR3ZWVuIGR1bW15Ci0gICAgIG5vZGVzLikgSXQgaXMgcmVjb21tZW5kZWQgdG8gc2V0IHhsc3BhY2UgdG8gYSBsYXJnZXIgdmFsdWUsIGlmCi0gICAgIHNwbGluZXMgYXJlIHVzZWQgdG8gZHJhdyBlZGdlcywgdG8gcHJldmVudCBzaGFycCBiZW5kaW5ncy4KLSAgICAgRGVmYXVsdCBhcmUgMjAgYW5kIDcwLiAqLwotICBpbnQgeHNwYWNlOwotICBpbnQgeXNwYWNlOwotCi0gIC8qIFRoZSBob3Jpem9udGFsIHNwYWNlIGJldHdlZW4gbGluZXMgYXQgdGhlIHBvaW50IHdoZXJlIHRoZXkgY3Jvc3MKLSAgICAgdGhlIGxldmVscy4KLSAgICAgZGVmYXVsdHMgdmFsdWUgaXMgMS8yIHhzcGFjZSAocG9seWdvbmUpIGFuZCA0LzUgeHNwYWNlIChzcGxpbmVzKSovCi0gIGludCB4bHNwYWNlOwotCi0gIC8qIHhyYXN0ZXIsIHlyYXN0ZXIgc3BlY2lmaWVzIHRoZSByYXN0ZXIgZGlzdGFuY2UgZm9yIHRoZSBwb3NpdGlvbiBvZgotICAgICB0aGUgbm9kZXMuIFRoZSBjZW50ZXIgb2YgYSBub2RlIGlzIGFsaWduZWQgdG8gdGhpcyByYXN0ZXIuIHhscmFzdGVyCi0gICAgIGlzIHRoZSBob3Jpem9udGFsIHJhc3RlciBmb3IgdGhlIHBvc2l0aW9ucyBvZiB0aGUgbGluZSBjb250cm9sCi0gICAgIHBvaW50cyAodGhlIGR1bW15IG5vZGVzKS4gSXQgc2hvdWxkIGJlIGEgZGl2aXNvciBvZiB4cmFzdGVyLgotICAgICBkZWZhdWx0cyBhcmUgMSwxLiAqLwotICBpbnQgeHJhc3RlcjsKLSAgaW50IHlyYXN0ZXI7Ci0KLSAgLyogeGxyYXN0ZXIgaXMgdGhlIGhvcml6b250YWwgcmFzdGVyIGZvciB0aGUgcG9zaXRpb25zIG9mIHRoZSBsaW5lCi0gICAgIGNvbnRyb2wgcG9pbnRzICh0aGUgZHVtbXkgbm9kZXMpLiBJdCBzaG91bGQgYmUgYSBkaXZpc29yIG9mIHhyYXN0ZXIuCi0gICAgIGRlZmF1bHRzIGlzIDEuICovCi0gIGludCB4bHJhc3RlcjsKLQotICAvKiBoaWRkZW4gc3BlY2lmaWVzIHRoZSBjbGFzc2VzIG9mIGVkZ2VzIHRoYXQgYXJlIGhpZGRlbi4KLSAgICAgRWRnZXMgdGhhdCBhcmUgd2l0aGluIHN1Y2ggYSBjbGFzcyBhcmUgbm90IGxhaWQgb3V0IG5vciBkcmF3bi4KLSAgICAgTm9kZXMgdGhhdCBhcmUgb25seSByZWFjaGFibGUgKGZvcndhcmQgb3IgYmFja3dhcmQpIGJ5IGVkZ2VzIG9mIGFuCi0gICAgIGhpZGRlbiBjbGFzcyBhcmUgbm90IGRyYXduLiBIb3dldmVyLCBub2RlcyB0aGF0IGFyZSBub3QgcmVhY2hhYmxlCi0gICAgIGF0IGFsbCBhcmUgZHJhd24uIChCdXQgc2VlIGF0dHJpYnV0ZSBpZ25vcmUuc2luZ2xlcy4pIFNwZWNpZmljYXRpb24KLSAgICAgb2YgY2xhc3NlcyBvZiBoaWRkZW4gZWRnZXMgYWxsb3dzIHRvIGhpZGUgcGFydHMgb2YgYSBncmFwaCwgZS5nLiwKLSAgICAgYW5ub3RhdGlvbnMgb2YgYSBzeW50YXggdHJlZS4gVGhpcyBhdHRyaWJ1dGUgaXMgb25seSBhbGxvd2VkIGF0IHRoZQotICAgICBvdXRlcm1vc3QgbGV2ZWwuIE1vcmUgdGhhbiBvbmUgc2V0dGluZ3MgYXJlIHBvc3NpYmxlIHRvIHNwZWNpZnkKLSAgICAgZXhhY3RseSB0aGUgc2V0IG9mIGNsYXNzZXMgdGhhdCBhcmUgaGlkZGVuLiBOb3RlIHRoZSBpbXBvcnRhbnQKLSAgICAgZGlmZmVyZW5jZSBiZXR3ZWVuIGhpZGluZyBvZiBlZGdlcyBhbmQgdGhlIGVkZ2UgbGluZSBzdHlsZSBpbnZpc2libGUuCi0gICAgIEhpZGRlbiBlZGdlcyBhcmUgbm90IGV4aXN0ZW50IGluIHRoZSBsYXlvdXQuIEVkZ2VzIHdpdGggbGluZSBzdHlsZQotICAgICBpbnZpc2libGUgYXJlIGV4aXN0ZW50IGluIHRoZSBsYXlvdXQ7IHRoZXkgbmVlZCBzcGFjZSBhbmQgbWF5Ci0gICAgIHByb2R1Y2UgY3Jvc3NpbmdzIGFuZCBpbmZsdWVuY2UgdGhlIGxheW91dCwgYnV0IHlvdSBjYW5ub3Qgc2VlCi0gICAgIHRoZW0uCi0gICAgIE5vIGRlZmF1bHQgdmFsdWUuICovCi0gIGludCBoaWRkZW47Ci0KLSAgLyogQ2xhc3NuYW1lIGFsbG93cyB0byBpbnRyb2R1Y2UgbmFtZXMgZm9yIHRoZSBlZGdlIGNsYXNzZXMuIFRoZSBuYW1lcwotICAgICBhcmUgdXNlZCBpbiB0aGUgbWVudXMuIGluZm9uYW1lIGFsbG93cyB0byBpbnRyb2R1Y2UgbmFtZXMgZm9yIHRoZQotICAgICBhZGRpdGlvbmFsIHRleHQgbGFiZWxzLiBUaGUgbmFtZXMgYXJlIHVzZWQgaW4gdGhlIG1lbnVzLgotICAgICBkZWZhdWx0cyBhcmUgMSwyLDMuLi4KLSAgICAgQnkgZGVmYXVsdCwgbm8gY2xhc3MgbmFtZXMuICovCi0gIHN0cnVjdCBjbGFzc25hbWUgKmNsYXNzbmFtZTsKLQotICAvKiBJbmZvbmFtZSBhbGxvd3MgdG8gaW50cm9kdWNlIG5hbWVzIGZvciB0aGUgYWRkaXRpb25hbCB0ZXh0IGxhYmVscy4KLSAgICAgVGhlIG5hbWVzIGFyZSB1c2VkIGluIHRoZSBtZW51cy4KLSAgICAgSW5mb25hbWUgaXMgZ2l2ZW4gYnkgYW4gaW50ZWdlciBhbmQgYSBzdHJpbmcuCi0gICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5VTEwuICAqLwotICBzdHJ1Y3QgaW5mb25hbWUgKmluZm9uYW1lOwotCi0gIC8qIENvbG9yZW50cnkgYWxsb3dzIHRvIGZpbGwgdGhlIGNvbG9yIG1hcC4gQSBjb2xvciBpcyBhIHRyaXBsZXQgb2YgaW50ZWdlcgotICAgICB2YWx1ZXMgZm9yIHRoZSByZWQvZ3JlZW4vYmx1ZS1wYXJ0LiBFYWNoIGludGVnZXIgaXMgYmV0d2VlbiAwIChvZmYpIGFuZAotICAgICAyNTUgKG9uKSwgZS5nLiwgMCAwIDAgaXMgYmxhY2sgYW5kIDI1NSAyNTUgMjU1IGlzIHdoaXRlLiBGb3IgaW5zdGFuY2UKLSAgICAgY29sb3JlbnRyeSA3NSA6IDcwIDEzMCAxODAgc2V0cyB0aGUgbWFwIGVudHJ5IDc1IHRvIHN0ZWVsIGJsdWUuIFRoaXMKLSAgICAgY29sb3IgY2FuIGJlIHVzZWQgYnkgc3BlY2lmeWluZyBqdXN0IHRoZSBudW1iZXIgNzUuCi0gICAgIERlZmF1bHQgaWQgTlVMTC4gICovCi0gIHN0cnVjdCBjb2xvcmVudHJ5ICpjb2xvcmVudHJ5OwotCi0gIC8qIExheW91dCBkb3duZmFjdG9yLCBsYXlvdXQgdXBmYWN0b3IsIGxheW91dCBuZWFyZmFjdG9yIFRoZSBsYXlvdXQKLSAgICAgYWxnb3JpdGhtIHBhcnRpdGlvbnMgdGhlIHNldCBvZiBlZGdlcyBpbnRvIGVkZ2VzIHBvaW50aW5nIHVwd2FyZCwKLSAgICAgZWRnZXMgcG9pbnRpbmcgZG93bndhcmQsIGFuZCBlZGdlcyBwb2ludGluZyBzaWRld2FyZHMuIFRoZSBsYXN0IHR5cGUKLSAgICAgb2YgZWRnZXMgaXMgYWxzbyBjYWxsZWQgbmVhciBlZGdlcy4gSWYgdGhlIGxheW91dC5kb3duZmFjdG9yIGlzCi0gICAgIGxhcmdlIGNvbXBhcmVkIHRvIHRoZSBsYXlvdXQudXBmYWN0b3IgYW5kIHRoZSBsYXlvdXQubmVhcmZhY3RvciwKLSAgICAgdGhlbiB0aGUgcG9zaXRpb25zIG9mIHRoZSBub2RlcyBpcyBtYWlubHkgZGV0ZXJtaW5lZCBieSB0aGUgZWRnZXMKLSAgICAgcG9pbnRpbmcgZG93bndhcmRzLiBJZiB0aGUgbGF5b3V0LnVwZmFjdG9yIGlzIGxhcmdlIGNvbXBhcmVkIHRvIHRoZQotICAgICBsYXlvdXQuZG93bmZhY3RvciBhbmQgdGhlIGxheW91dC5uZWFyZmFjdG9yLCB0aGVuIHRoZSBwb3NpdGlvbnMgb2YKLSAgICAgdGhlIG5vZGVzIGlzIG1haW5seSBkZXRlcm1pbmVkIGJ5IHRoZSBlZGdlcyBwb2ludGluZyB1cHdhcmRzLiBJZiB0aGUKLSAgICAgbGF5b3V0Lm5lYXJmYWN0b3IgaXMgbGFyZ2UsIHRoZW4gdGhlIHBvc2l0aW9ucyBvZiB0aGUgbm9kZXMgaXMKLSAgICAgbWFpbmx5IGRldGVybWluZWQgYnkgdGhlIGVkZ2VzIHBvaW50aW5nIHNpZGV3YXJkcy4gVGhlc2UgYXR0cmlidXRlcwotICAgICBoYXZlIG5vIGVmZmVjdCwgaWYgdGhlIG1ldGhvZCBmb3IgZG93bndhcmQgbGFpZCBvdXQgdHJlZXMgaXMgdXNlZC4KLSAgICAgRGVmYXVsdCBpcyBub3JtYWwuICovCi0gIGludCBsYXlvdXRfZG93bmZhY3RvcjsKLSAgaW50IGxheW91dF91cGZhY3RvcjsKLSAgaW50IGxheW91dF9uZWFyZmFjdG9yOwotICAvKiBMYXlvdXQgc3BsaW5lZmFjdG9yIGRldGVybWluZXMgdGhlIGJlbmRpbmcgYXQgc3BsaW5lcy4gVGhlIGZhY3RvcgotICAgICAxMDAgaW5kaWNhdGVzIGEgdmVyeSBzaGFycCBiZW5kaW5nLCBhIGZhY3RvciAxIGluZGljYXRlcyBhIHZlcnkgZmxhdAotICAgICBiZW5kaW5nLiBVc2VmdWwgdmFsdWVzIGFyZSAzMCA6IDogOiA4MC4gKi8KLSAgaW50IGxheW91dF9zcGxpbmVmYWN0b3I7Ci0KLSAgLyogTGF0ZSBlZGdlIGxhYmVscyB5ZXMgbWVhbnMgdGhhdCB0aGUgZ3JhcGggaXMgZmlyc3QgcGFydGl0aW9uZWQgYW5kCi0gICAgIHRoZW4sIGxhYmVscyBhcmUgaW50cm9kdWNlZC4gVGhlIGRlZmF1bHQgYWxnb3JpdGhtIGZpcnN0IGNyZWF0ZXMKLSAgICAgbGFiZWxzIGFuZCB0aGVuIHBhcnRpdGlvbnMgdGhlIGdyYXBoLCB3aGljaCB5aWVsZCBhIG1vcmUgY29tcGFjdAotICAgICBsYXlvdXQsIGJ1dCBtYXkgaGF2ZSBtb3JlIGNyb3NzaW5ncy4KLSAgICAgRGVmYXVsdCBpcyBuby4gKi8KLSAgZW51bSBkZWNpc2lvbiBsYXRlX2VkZ2VfbGFiZWxzOwotCi0gIC8qIERpc3BsYXkgZWRnZSBsYWJlbHMgeWVzIG1lYW5zIGRpc3BsYXkgbGFiZWxzIGFuZCBubyBtZWFucyBkb24ndAotICAgICBkaXNwbGF5IGVkZ2UgbGFiZWxzLgotICAgICBEZWZhdWx0IHZhdWxlIGlzIG5vLiAqLwotICBlbnVtIGRlY2lzaW9uIGRpc3BsYXlfZWRnZV9sYWJlbHM7Ci0KLSAgLyogRGlydHkgZWRnZSBsYWJlbHMgeWVzIGVuZm9yY2VzIGEgZmFzdCBsYXlvdXQgb2YgZWRnZSBsYWJlbHMsIHdoaWNoCi0gICAgIG1heSB2ZXJ5IHVnbHkgYmVjYXVzZSBzZXZlcmFsIGxhYmVscyBtYXkgYmUgZHJhd24gYXQgdGhlIHNhbWUgcGxhY2UuCi0gICAgIERpcnR5IGVkZ2UgbGFiZWxzIGNhbm5vdCBiZSB1c2VkIGlmIHNwbGluZXMgYXJlIHVzZWQuCi0gICAgIERlZmF1bHQgaXMgbm8uCi0gICovCi0gIGVudW0gZGVjaXNpb24gZGlydHlfZWRnZV9sYWJlbHM7Ci0KLSAgLyogRmluZXR1bmluZyBubyBzd2l0Y2hlcyB0aGUgZmluZSB0dW5pbmcgcGhhc2Ugb2YgdGhlIGdyYXBoIGxheW91dAotICAgICBhbGdvcml0aG0gb2ZmLCB3aGlsZSBpdCBpcyBvbiBhcyBkZWZhdWx0LiBUaGUgZmluZSB0dW5pbmcgcGhhc2UKLSAgICAgdHJpZXMgdG8gZ2l2ZSBhbGwgZWRnZXMgdGhlIHNhbWUgbGVuZ3RoLgotICAgICBEZWZhdWx0IGlzIHllcy4gKi8KLSAgZW51bSBkZWNpc2lvbiBmaW5ldHVuaW5nOwotCi0gIC8qIElnbm9yZSBzaW5nbGVzIHllcyBoaWRlcyBhbGwgbm9kZXMgd2hpY2ggd291bGQgYXBwZWFyIHNpbmdsZSBhbmQKLSAgICAgdW5jb25uZWN0ZWQgZnJvbSB0aGUgcmVtYWluaW5nIGdyYXBoLiBTdWNoIG5vZGVzIGhhdmUgbm8gZWRnZSBhdCBhbGwKLSAgICAgYW5kIGFyZSBzb21ldGltZXMgdmVyeSB1Z2x5LiBEZWZhdWx0IGlzIHRvIHNob3cgYWxsIG5vZGVzLgotICAgICBEZWZhdWx0IGlzIG5vLiAqLwotICBlbnVtIGRlY2lzaW9uIGlnbm9yZV9zaW5nbGVzOwotCi0gIC8qIHByaW9yaXR5IHBoYXNlIHllcyByZXBsYWNlcyB0aGUgbm9ybWFsIHBlbmR1bHVtIG1ldGhvZCBieSBhCi0gICAgIHNwZWNpYWxpemVkIG1ldGhvZDogSXQgZm9yY2VzIHN0cmFpZ2h0IGxvbmcgZWRnZXMgd2l0aCA5MCBkZWdyZWUsCi0gICAgIGp1c3QgYXMgdGhlIHN0cmFpZ2h0IHBoYXNlLiBJbiBmYWN0LCB0aGUgc3RyYWlnaHQgcGhhc2UgaXMgYSBmaW5lCi0gICAgIHR1bmUgcGhhc2Ugb2YgdGhlIHByaW9yaXR5IG1ldGhvZC4gVGhpcyBwaGFzZSBpcyBhbHNvIHJlY29tbWVuZGVkLAotICAgICBpZiBhbiBvcnRob2dvbmFsIGxheW91dCBpcyBzZWxlY3RlZCAoc2VlIG1hbmhhdHRhbi5lZGdlcykuCi0gICAgIERlZmF1bHQgaXMgbm8uICovCi0gIGVudW0gZGVjaXNpb24gcHJpb3JpdHlfcGhhc2U7Ci0KLSAgLyogbWFuaGF0dGFuIGVkZ2VzIHllcyBzd2l0Y2hlcyB0aGUgb3J0aG9nb25hbCBsYXlvdXQgb24uIE9ydGhvZ29uYWwKLSAgICAgbGF5b3V0IChvciBtYW5oYXR0YW4gbGF5b3V0KSBtZWFucyB0aGF0IGFsbCBlZGdlcyBjb25zaXN0IG9mIGxpbmUKLSAgICAgc2VnbWVudHMgd2l0aCBncmFkaWVudCAwIG9yIDkwIGRlZ3JlZS4gVmVydGljYWwgZWRnZSBzZWdtZW50cyBtaWdodAotICAgICBieSBzaGFyZWQgYnkgc2V2ZXJhbCBlZGdlcywgd2hpbGUgaG9yaXpvbnRhbCBlZGdlIHNlZ21lbnRzIGFyZSBuZXZlcgotICAgICBzaGFyZWQuIFRoaXMgcmVzdWx0cyBpbiB2ZXJ5IGFlc3RoZXRpY2FsIGxheW91dHMganVzdCBmb3IgZmxvd2NoYXJ0cy4KLSAgICAgSWYgdGhlIG9ydGhvZ29uYWwgbGF5b3V0IGlzIHVzZWQsIHRoZW4gdGhlIHByaW9yaXR5IHBoYXNlIGFuZAotICAgICBzdHJhaWdodCBwaGFzZSBzaG91bGQgYmUgdXNlZC4gVGh1cywgdGhlc2UgYm90aCBwaGFzZXMgYXJlIHN3aXRjaGVkCi0gICAgIG9uLCB0b28sIHVubGVzcyBwcmlvcml0eSBsYXlvdXQgYW5kIHN0cmFpZ2h0IGxpbmUgdHVuaW5nIGFyZQotICAgICBzd2l0Y2hlZCBvZmYgZXhwbGljaXRseS4KLSAgICAgRGVmYXVsdCBpcyBuby4gKi8KLSAgZW51bSBkZWNpc2lvbiBtYW5oYXR0YW5fZWRnZXM7Ci0KLSAgLyogU21hbmhhdHRhbiBlZGdlcyB5ZXMgc3dpdGNoZXMgYSBzcGVjaWFsaXplZCBvcnRob2dvbmFsIGxheW91dCBvbjoKLSAgICAgSGVyZSwgYWxsIGhvcml6b250YWwgZWRnZSBzZWdtZW50cyBiZXR3ZWVuIHR3byBsZXZlbHMgc2hhcmUgdGhlIHNhbWUKLSAgICAgaG9yaXpvbnRhbCBsaW5lLCBpLmUuIG5vdCBvbmx5IHZlcnRpY2FsIGVkZ2Ugc2VnbWVudHMgYXJlIHNoYXJlZCwKLSAgICAgYnV0IGhvcml6b250YWwgZWRnZSBzZWdtZW50cyBhcmUgc2hhcmVkIGJ5IHNldmVyYWwgZWRnZXMsIHRvby4gVGhpcwotICAgICBsb29rcyBuaWNlIGZvciB0cmVlcyBidXQgbWlnaHQgYmUgdG9vIGNvbmZ1c2luZyBpbiBnZW5lcmFsLCBiZWNhdXNlCi0gICAgIHRoZSBsb2NhdGlvbiBvZiBhbiBlZGdlIG1pZ2h0IGJlIGFtYmlndW91c2x5LgotICAgICBEZWZhdWx0IGlzIG5vLiAqLwotICBlbnVtIGRlY2lzaW9uIHNtYW5oYXR0YW5fZWRnZXM7Ci0KLSAgLyogTmVhciBlZGdlcyBubyBzdXBwcmVzc2VzIG5lYXIgZWRnZXMgYW5kIGJlbnQgbmVhciBlZGdlcyBpbiB0aGUKLSAgICAgZ3JhcGggbGF5b3V0LgotICAgICBEZWZhdWx0IGlzIHllcy4gKi8KLSAgZW51bSBkZWNpc2lvbiBuZWFyX2VkZ2VzOwotCi0gIC8qIE9yaWVudGF0aW9uIHNwZWNpZmllcyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIGdyYXBoOiB0b3AudG8uYm90dG9tLAotICAgICBib3R0b20udG8udG9wLCBsZWZ0LnRvLnJpZ2h0IG9yIHJpZ2h0LnRvLmxlZnQuIE5vdGU6IHRoZSBub3JtYWwKLSAgICAgb3JpZW50YXRpb24gaXMgdG9wLnRvLmJvdHRvbS4gQWxsIGV4cGxhbmF0aW9ucyBoZXJlIGFyZSBnaXZlbgotICAgICByZWxhdGl2ZWx5IHRvIHRoZSBub3JtYWwgb3JpZW50YXRpb24sIGkuZS4sIGUuZy4sIGlmIHRoZSBvcmllbnRhdGlvbgotICAgICBpcyBsZWZ0IHRvIHJpZ2h0LCB0aGUgYXR0cmlidXRlIHhsc3BhY2UgaXMgbm90IHRoZSBob3Jpem9udGFsIGJ1dAotICAgICB0aGUgdmVydGljYWwgZGlzdGFuY2UgYmV0d2VlbiBsaW5lcywgZXRjLgotICAgICBEZWZhdWx0IGlzIHRvX3RvX2JvdHRvbS4gKi8KLSAgZW51bSBvcmllbnRhdGlvbiBvcmllbnRhdGlvbjsKLQotICAvKiBOb2RlIGFsaWdubWVudCBzcGVjaWZpZWQgdGhlIHZlcnRpY2FsIGFsaWdubWVudCBvZiBub2RlcyBhdCB0aGUKLSAgICAgaG9yaXpvbnRhbCByZWZlcmVuY2UgbGluZSBvZiB0aGUgbGV2ZWxzLiBJZiB0b3AgaXMgc3BlY2lmaWVkLCB0aGUKLSAgICAgdG9wcyBvZiBhbGwgbm9kZXMgb2YgYSBsZXZlbCBoYXZlIHRoZSBzYW1lIHktY29vcmRpbmF0ZTsgb24gYm90dG9tLAotICAgICB0aGUgYm90dG9tcyBoYXZlIHRoZSBzYW1lIHktY29vcmRpbmF0ZSwgb24gY2VudGVyIHRoZSBub2RlcyBhcmUKLSAgICAgY2VudGVyZWQgYXQgdGhlIGxldmVscy4KLSAgICAgRGVmYXVsdCBpcyBjZW50ZXIuICovCi0gIGVudW0gYWxpZ25tZW50IG5vZGVfYWxpZ25tZW50OwotCi0gIC8qIFBvcnQgc2hhcmluZyBubyBzdXBwcmVzc2VzIHRoZSBzaGFyaW5nIG9mIHBvcnRzIG9mIGVkZ2VzIGF0IHRoZQotICAgICBub2Rlcy4gTm9ybWFsbHksIGlmIG11bHRpcGxlIGVkZ2VzIGFyZSBhZGphY2VudCB0byB0aGUgc2FtZSBub2RlLAotICAgICBhbmQgdGhlIGFycm93IGhlYWQgb2YgYWxsIHRoZXNlIGVkZ2VzIGhhcyB0aGUgc2FtZSB2aXN1YWwgYXBwZWFyYW5jZQotICAgICAoY29sb3IsIHNpemUsIGV0Yy4pLCB0aGVuIHRoZXNlIGVkZ2VzIG1heSBzaGFyZSBhIHBvcnQgYXQgYSBub2RlLAotICAgICBpLmUuIG9ubHkgb25lIGFycm93IGhlYWQgaXMgZHJhdywgYW5kIGFsbCBlZGdlcyBhcmUgaW5jb21pbmcgaW50bwotICAgICB0aGlzIGFycm93IGhlYWQuIFRoaXMgYWxsb3dzIHRvIGhhdmUgbWFueSBlZGdlcyBhZGphY2VudCB0byBvbmUgbm9kZQotICAgICB3aXRob3V0IGdldHRpbmcgY29uZnVzZWQgYnkgdG9vIG1hbnkgYXJyb3cgaGVhZHMuIElmIG5vIHBvcnQgc2hhcmluZwotICAgICBpcyB1c2VkLCBlYWNoIGVkZ2UgaGFzIGl0cyBvd24gcG9ydCwgaS5lLiBpdHMgb3duIHBsYWNlIHdoZXJlIGl0IGlzCi0gICAgIGFkamFjZW50IHRvIHRoZSBub2RlLgotICAgICBEZWZhdWx0IGlzIHllcy4gKi8KLSAgZW51bSBkZWNpc2lvbiBwb3J0X3NoYXJpbmc7Ci0KLSAgLyogQXJyb3cgbW9kZSBmaXhlZCAoZGVmYXVsdCkgc2hvdWxkIGJlIHVzZWQsIGlmIHBvcnQgc2hhcmluZyBpcyB1c2VkLAotICAgICBiZWNhdXNlIHRoZW4sIG9ubHkgYSBmaXhlZCBzZXQgb2Ygcm90YXRpb25zIGZvciB0aGUgYXJyb3cgaGVhZHMgYXJlCi0gICAgIHVzZWQuIElmIHRoZSBhcnJvdyBtb2RlIGlzIGZyZWUsIHRoZW4gZWFjaCBhcnJvdyBoZWFkIGlzIHJvdGF0ZWQKLSAgICAgaW5kaXZpZHVhbGx5IHRvIGVhY2ggZWRnZS4gQnV0IHRoaXMgY2FuIHlpZWxkIHRvIGEgYmxhY2sgc3BvdCwgd2hlcmUKLSAgICAgbm90aGluZyBpcyByZWNvZ25pemFibGUsIGlmIHBvcnQgc2hhcmluZyBpcyB1c2VkLCBzaW5jZSBhbGwgdGhlc2UKLSAgICAgcWRpZmZlcmVudGx5IHJvdGF0ZWQgYXJyb3cgaGVhZHMgYXJlIGRyYXduIGF0IHRoZSBzYW1lIHBsYWNlLiBJZiB0aGUKLSAgICAgYXJyb3cgbW9kZSBpcyBmaXhlZCwgdGhlbiB0aGUgYXJyb3cgaGVhZCBpcyByb3RhdGVkIG9ubHkgaW4gc3RlcHMgb2YKLSAgICAgNDUgZGVncmVlLCBhbmQgb25seSBvbmUgYXJyb3cgaGVhZCBvY2N1cnMgYXQgZWFjaCBwb3J0LgotICAgICBEZWZhdWx0IGlzIGZpeGVkLiAqLwotICBlbnVtIGFycm93X21vZGUgYXJyb3dfbW9kZTsKLQotICAvKiBUcmVlZmFjdG9yIFRoZSBhbGdvcml0aG0gdHJlZSBmb3IgZG93bndhcmQgbGFpZCBvdXQgdHJlZXMgdHJpZXMgdG8KLSAgICAgcHJvZHVjZSBhIG1lZGl1bSBkZW5zZSwgYmFsYW5jZWQgdHJlZS1saWtlIGxheW91dC4gSWYgdGhlIHRyZWUKLSAgICAgZmFjdG9yIGlzIGdyZWF0ZXIgdGhhbiAwLjUsIHRoZSB0cmVlIGVkZ2VzIGFyZSBzcHJlYWQsIGkuZS4gdGhleQotICAgICBnZXQgYSBsYXJnZXIgZ3JhZGllbnQuIFRoaXMgbWF5IGltcHJvdmUgdGhlIHJlYWRhYmlsaXR5IG9mIHRoZSB0cmVlLgotICAgICBOb3RlOiBpdCBpcyBub3Qgb2J2aW91cyB3aGV0aGVyIHNwcmVhZGluZyByZXN1bHRzIGluIGEgbW9yZSBkZW5zZSBvcgotICAgICB3aWRlIGxheW91dC4gRm9yIGEgdHJlZSwgdGhlcmUgaXMgYSB0cmVlIGZhY3RvciBzdWNoIHRoYXQgdGhlIHdob2xlCi0gICAgIHRyZWUgaXMgbWluaW1hbCB3aWRlLgotICAgICBEZWZhdWx0IGlzIDAuNS4gKi8KLSAgZmxvYXQgdHJlZWZhY3RvcjsKLQotICAvKiBTcHJlYWRsZXZlbCBUaGlzIHBhcmFtZXRlciBvbmx5IGluZmx1ZW5jZXMgdGhlIGFsZ29yaXRobSB0cmVlLCB0b28uCi0gICAgIEZvciBsYXJnZSwgYmFsYW5jZWQgdHJlZXMsIHNwcmVhZGluZyBvZiB0aGUgdXBwZXJtb3N0IG5vZGVzIHdvdWxkCi0gICAgIGVubGFyZ2UgdGhlIHdpZHRoIG9mIHRoZSB0cmVlIHRvbyBtdWNoLCBzdWNoIHRoYXQgdGhlIHRyZWUgZG9lcyBub3QKLSAgICAgZml0IGFueW1vcmUgaW4gYSB3aW5kb3cuIFRodXMsIHRoZSBzcHJlYWRsZXZlbCBzcGVjaWZpZXMgdGhlIG1pbmltYWwKLSAgICAgbGV2ZWwgKHJhbmspIHdoZXJlIG5vZGVzIGFyZSBzcHJlYWQuIE5vZGVzIG9mIGxldmVscyB1cHBlciB0aGFuCi0gICAgIHNwcmVhZGxldmVsIGFyZSBub3Qgc3ByZWFkLgotICAgICBEZWZhdWx0IGlzIDEuICovCi0gIGludCBzcHJlYWRsZXZlbDsKLQotICAvKiBDcm9zc2luZyB3ZWlnaHQgc3BlY2lmaWVzIHRoZSB3ZWlnaHQgdGhhdCBpcyB1c2VkIGZvciB0aGUgY3Jvc3NpbmcKLSAgICAgcmVkdWN0aW9uOiBiYXJ5IChkZWZhdWx0KSwgbWVkaWFuLCBiYXJ5bWVkaWFuIG9yIG1lZGlhbmJhcnkuIFdlCi0gICAgIGNhbm5vdCBnaXZlIGEgZ2VuZXJhbCByZWNvbW1lbmRhdGlvbiwgd2hpY2ggaXMgdGhlIGJlc3QgbWV0aG9kLiBGb3IKLSAgICAgZ3JhcGhzIHdpdGggdmVyeSBsYXJnZSBhdmVyYWdlIGRlZ3JlZSBvZiBlZGdlcyAobnVtYmVyIG9mIGluY29taW5nCi0gICAgIGFuZCBvdXRnb2luZyBlZGdlcyBhdCBhIG5vZGUpLCB0aGUgd2VpZ2h0IGJhcnkgaXMgdGhlIGZhc3Rlc3QKLSAgICAgbWV0aG9kLiBXaXRoIHRoZSB3ZWlnaHRzIGJhcnltZWRpYW4gYW5kIG1lZGlhbmJhcnksIGVxdWFsIHdlaWdodHMgb2YKLSAgICAgZGlmZmVyZW50IG5vZGVzIGFyZSBub3QgdmVyeSBwcm9iYWJsZSwgdGh1cyB0aGUgY3Jvc3NpbmcgcmVkdWN0aW9uCi0gICAgIHBoYXNlIDIgbWlnaHQgYmUgdmVyeSBmYXN0LgotICAgICBEZWZhdWx0IGlzIGJhcnkuICovCi0gIGVudW0gY3Jvc3NpbmdfdHlwZSBjcm9zc2luZ193ZWlnaHQ7Ci0KLSAgLyogQ3Jvc3NpbmcgcGhhc2UyIGlzIHRoZSBtb3N0IHRpbWUgY29uc3VtaW5nIHBoYXNlIG9mIHRoZSBjcm9zc2luZwotICAgICByZWR1Y3Rpb24uIEluIHRoaXMgcGhhc2UsIHRoZSBub2RlcyB0aGF0IGhhcHBlbiB0byBoYXZlIGVxdWFsCi0gICAgIGNyb3NzaW5nIHdlaWdodHMgYXJlIHBlcm11dGVkLiBCeSBzcGVjaWZ5aW5nIG5vLCB0aGlzIHBoYXNlIGlzCi0gICAgIHN1cHByZXNzZWQuCi0gICAgIERlZmF1bHQgaXMgeWVzLiAqLwotICBlbnVtIGRlY2lzaW9uIGNyb3NzaW5nX3BoYXNlMjsKLQotICAvKiBDcm9zc2luZyBvcHRpbWl6YXRpb24gaXMgYSBwb3N0cHJvY2Vzc2luZyBwaGFzZSBhZnRlciB0aGUgbm9ybWFsCi0gICAgIGNyb3NzaW5nIHJlZHVjdGlvbjogd2UgdHJ5IHRvIG9wdGltaXplIGxvY2FsbHksIGJ5IGV4Y2hhbmdpbmcgcGFpcnMKLSAgICAgb2Ygbm9kZXMgdG8gcmVkdWNlIHRoZSBjcm9zc2luZ3MuIEFsdGhvdWdoIHRoaXMgcGhhc2UgaXMgbm90IHZlcnkKLSAgICAgdGltZSBjb25zdW1pbmcsIGl0IGNhbiBiZSBzdXBwcmVzc2VkIGJ5IHNwZWNpZnlpbmcgbm8uCi0gICAgIERlZmF1bHQgaXMgeWVzLiAqLwotICBlbnVtIGRlY2lzaW9uIGNyb3NzaW5nX29wdGltaXphdGlvbjsKLQotICAvKiBWaWV3IGFsbG93cyB0byBzZWxlY3QgdGhlIGZpc2hleWUgdmlld3MuIEJlY2F1c2UKLSAgICAgb2YgdGhlIGZpeGVkIHNpemUgb2YgdGhlIHdpbmRvdyB0aGF0IHNob3dzIHRoZSBncmFwaCwgd2Ugbm9ybWFsbHkKLSAgICAgY2FuIG9ubHkgc2VlIGEgc21hbGwgYW1vdW50IG9mIGEgbGFyZ2UgZ3JhcGguIElmIHdlIHNocmluayB0aGUgZ3JhcGgKLSAgICAgc3VjaCB0aGF0IGl0IGZpdHMgaW50byB0aGUgd2luZG93LCB3ZSBjYW5ub3QgcmVjb2duaXplIGFueSBkZXRhaWwKLSAgICAgYW55bW9yZS4gRmlzaGV5ZSB2aWV3cyBhcmUgY29vcmRpbmF0ZSB0cmFuc2Zvcm1hdGlvbnM6IHRoZSB2aWV3IG9udG8KLSAgICAgdGhlIGdyYXBoIGlzIGRpc3RvcnQsIHRvIG92ZXJjb21lIHRoaXMgdXNhZ2UgZGVmaWNpZW5jeS4gVGhlIHBvbGFyCi0gICAgIGZpc2hleWUgaXMgZWFzeSB0byBleHBsYWluOiBhc3N1bWUgYSBwcm9qZWN0aW9uIG9mIHRoZSBwbGFuZSB0aGF0Ci0gICAgIGNvbnRhaW5zIHRoZSBncmFwaCBwaWN0dXJlIG9udG8gYSBzcGhlcmljIGJhbGwuIElmIHdlIG5vdyBsb29rIG9udG8KLSAgICAgdGhpcyBiYWxsIGluIDMgRCwgd2UgaGF2ZSBhIHBvbGFyIGZpc2hleWUgdmlldy4gVGhlcmUgaXMgYSBmb2N1cwotICAgICBwb2ludCB3aGljaCBpcyBtYWduaWZpZWQgc3VjaCB0aGF0IHdlIHNlZSBhbGwgZGV0YWlscy4gUGFydHMgb2YgdGhlCi0gICAgIHBsYW5lIHRoYXQgYXJlIGZhciBhd2F5IGZyb20gdGhlIGZvY3VzIHBvaW50IGFyZSBkZW1hZ25pZmllZCB2ZXJ5Ci0gICAgIG11Y2guIENhcnRlc2lhbiBmaXNoZXllIGhhdmUgYSBzaW1pbGFyIGVmZmVjdDsgb25seSB0aGUgZm9ybXVsYSBmb3IKLSAgICAgdGhlIGNvb3JkaW5hdGUgdHJhbnNmb3JtYXRpb24gaXMgZGlmZmVyZW50LiBTZWxlY3RpbmcgY2Zpc2ggbWVhbnMKLSAgICAgdGhlIGNhcnRlc2lhbiBmaXNoZXllIGlzIHVzZWQgd2hpY2ggZGVtYWduaWZpZXMgc3VjaCB0aGF0IHRoZSB3aG9sZQotICAgICBncmFwaCBpcyB2aXNpYmxlIChzZWxmIGFkYXB0YWJsZSBjYXJ0ZXNpYW4gZmlzaGV5ZSkuIFdpdGggZmNmaXNoLAotICAgICB0aGUgY2FydGVzaWFuIGZpc2hleWUgc2hvd3MgdGhlIHJlZ2lvbiBvZiBhIGZpeGVkIHJhZGl1cyBhcm91bmQgdGhlCi0gICAgIGZvY3VzIHBvaW50IChmaXhlZCByYWRpdXMgY2FydGVzaWFuIGZpc2hleWUpLiBUaGlzIHJlZ2lvbiBtaWdodCBiZQotICAgICBzbWFsbGVyIHRoYW4gdGhlIHdob2xlIGdyYXBoLCBidXQgdGhlIGRlbWFnbmlmaWNhdGlvbiBuZWVkZWQgdG8gc2hvdwotICAgICB0aGlzIHJlZ2lvbiBpbiB0aGUgd2luZG93IGlzIGFsc28gbm90IHNvIGxhcmdlLCB0aHVzIG1vcmUgZGV0YWlscwotICAgICBhcmUgcmVjb2duaXphYmxlLiBXaXRoIHBmaXNoIHRoZSBzZWxmIGFkYXB0YWJsZSBwb2xhciBmaXNoZXllIGlzCi0gICAgIHNlbGVjdGVkIHRoYXQgc2hvd3MgdGhlIHdob2xlIGdyYXBoLCBhbmQgd2l0aCBmcGZpc2ggdGhlIGZpeGVkCi0gICAgIHJhZGl1cyBwb2xhciBmaXNoZXllIGlzIHNlbGVjdGVkLgotICAgICBEZWZhdWx0IGlzIG5vcm1hbCB2aWV3LiAgKi8KLSAgZW51bSB2aWV3IHZpZXc7Ci0KLSAgLyogRWRnZXMgbm8gc3VwcHJlc3NlcyB0aGUgZHJhd2luZyBvZiBlZGdlcy4KLSAgICAgRGVmYXVsdCBpcyB5ZXMuICovCi0gIGVudW0gZGVjaXNpb24gZWRnZXM7Ci0KLSAgLyogTm9kZXMgbm8gc3VwcHJlc3NlcyB0aGUgZHJhd2luZyBvZiBub2Rlcy4KLSAgICAgRGVmYXVsdCBpcyB5ZXMuICovCi0gIGVudW0gZGVjaXNpb24gbm9kZXM7Ci0KLSAgLyogU3BsaW5lcyBzcGVjaWZpZXMgd2hldGhlciBzcGxpbmVzIGFyZSB1c2VkIHRvIGRyYXcgZWRnZXMgKHllcyBvciBubykuCi0gICAgIEFzIGRlZmF1bHQsIHBvbHlnb24gc2VnbWVudHMgYXJlIHVzZWQgdG8gZHJhdyBlZGdlcywgYmVjYXVzZSB0aGlzIGlzCi0gICAgIG11Y2ggZmFzdGVyLiBOb3RlIHRoYXQgdGhlIHNwbGluZSBkcmF3aW5nIHJvdXRpbmUgaXMgbm90IGZ1bGx5Ci0gICAgIHZhbGlkYXRlZCwgYW5kIGlzIHZlcnkgc2xvdy4gSXRzIHVzZSBpcyBtYWlubHkgdG8gcHJlcGFyZSBoaWdoCi0gICAgIHF1YWxpdHkgUG9zdFNjcmlwdCBvdXRwdXQgZm9yIHZlcnkgc21hbGwgZ3JhcGhzLgotICAgICBEZWZhdWx0IGlzIG5vLiAqLwotICBlbnVtIGRlY2lzaW9uIHNwbGluZXM7Ci0KLSAgLyogQm1heCBzZXQgdGhlIG1heGltYWwgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdGhhdCBhcmUgZG9uZSBmb3IgdGhlCi0gICAgIHJlZHVjdGlvbiBvZiBlZGdlIGJlbmRpbmdzLgotICAgRGVmYXVsdCBpcyAxMDAuICovCi0gIGludCBibWF4OwotCi0gIC8qIENtaW4gc2V0IHRoZSBtaW5pbWFsIG51bWJlciBvZiBpdGVyYXRpb25zIHRoYXQgYXJlIGRvbmUgZm9yIHRoZQotICAgICBjcm9zc2luZyByZWR1Y3Rpb24gd2l0aCB0aGUgY3Jvc3Npbmcgd2VpZ2h0cy4gVGhlIG5vcm1hbCBtZXRob2QKLSAgICAgc3RvcHMgaWYgdHdvIGNvbnNlY3V0aXZlIGNoZWNrcyBkb2VzIG5vdCByZWR1Y2UgdGhlIG51bWJlciBvZgotICAgICBjcm9zc2luZ3MgYW55bW9yZS4gSG93ZXZlciwgdGhpcyBpbmNyZWFzaW5nIG9mIHRoZSBudW1iZXIgb2YKLSAgICAgY3Jvc3NpbmdzIG1pZ2h0IGJlIGxvY2FsbHksIHN1Y2ggdGhhdCBhZnRlciBzb21lIG1vcmUgaXRlcmF0aW9ucywKLSAgICAgdGhlIGNyb3NzaW5nIG51bWJlciBtaWdodCBkZWNyZWFzZSBtdWNoIG1vcmUuCi0gICAgIERlZmF1bHQgaXMgMC4gKi8KLSAgaW50IGNtaW47Ci0KLSAgLyogQ21heCBzZXQgdGhlIG1heGltYWwgbnVtYmVyIG9mIGludGVyYWN0aW9ucyBmb3IgY3Jvc3NpbmcgcmVkdWN0aW9uLgotICAgICBUaGlzIGlzIGhlbHBmdWwgZm9yIHNwZWVkaW5nIHVwIHRoZSBsYXlvdXQgcHJvY2Vzcy4KLSAgICAgRGVmYXVsdCBpcyAtMSwgd2hpY2ggcmVwcmVzZW50cyBpbmZpbml0eS4gICovCi0gIGludCBjbWF4OwotCi0gIC8qIFBtaW4gc2V0IHRoZSBtaW5pbWFsIG51bWJlciBvZiBpdGVyYXRpb25zIHRoYXQgaXMgZG9uZSB3aXRoIHRoZQotICAgICBwZW5kdWx1bSBtZXRob2QuIFNpbWlsYXIgdG8gdGhlIGNyb3NzaW5nIHJlZHVjdGlvbiwgdGhpcyBtZXRob2QKLSAgICAgc3RvcHMgaWYgdGhlIGBpbWJhbGFuY2VtZW50IHdlaWdodCcgZG9lcyBub3QgZGVjcmVhc2VzIGFueW1vcmUuCi0gICAgIEhvd2V2ZXIsIHRoZSBpbmNyZWFzaW5nIG9mIHRoZSBpbWJhbGFuY2VtZW50IHdlaWdodCBtaWdodCBiZSBsb2NhbGx5LAotICAgICBzdWNoIHRoYXQgYWZ0ZXIgc29tZSBtb3JlIGl0ZXJhdGlvbnMsIHRoZSBpbWJhbGFuY2VtZW50IHdlaWdodCBtaWdodAotICAgICBkZWNyZWFzZSBtdWNoIG1vcmUuCi0gICAgIERlZmF1bHQgaXMgMC4gKi8KLSAgaW50IHBtaW47Ci0KLSAgLyogUG1heCBzZXQgdGhlIG1heGltYWwgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgb2YgdGhlIHBlbmR1bHVtIG1ldGhvZC4KLSAgICAgVGhpcyBpcyBoZWxwZnVsIGZvciBzcGVlZHVwIHRoZSBsYXlvdXQgcHJvY2Vzcy4KLSAgICAgRGVmYXVsdCBpcyAxMDAuICovCi0gIGludCBwbWF4OwotCi0gIC8qIFJtaW4gc2V0IHRoZSBtaW5pbWFsIG51bWJlciBvZiBpdGVyYXRpb25zIHRoYXQgaXMgZG9uZSB3aXRoIHRoZQotICAgICBydWJiZXJiYW5kIG1ldGhvZC4gVGhpcyBpcyBzaW1pbGFyIGFzIGZvciB0aGUgcGVuZHVsdW0gbWV0aG9kLgotICAgICBEZWZhdWx0IGlzIDAuICovCi0gIGludCBybWluOwotCi0gIC8qIFJtYXggc2V0IHRoZSBtYXhpbWFsIG51bWJlciBvZiBpdGVyYXRpb25zIG9mIHRoZSBydWJiZXJiYW5kIG1ldGhvZC4KLSAgICAgVGhpcyBpcyBoZWxwZnVsIGZvciBzcGVlZHVwIHRoZSBsYXlvdXQgcHJvY2Vzcy4KLSAgICAgRGVmYXVsdCBpcyAxMDAuICovCi0gIGludCBybWF4OwotCi0gIC8qIFNtYXggc2V0IHRoZSBtYXhpbWFsIG51bWJlciBvZiBpdGVyYXRpb25zIG9mIHRoZSBzdHJhaWdodCBsaW5lCi0gICAgIHJlY29nbml0aW9uIHBoYXNlICh1c2VmdWwgb25seSwgaWYgdGhlIHN0cmFpZ2h0IGxpbmUgcmVjb2duaXRpb24KLSAgICAgcGhhc2UgaXMgc3dpdGNoZWQgb24sIHNlZSBhdHRyaWJ1dGUgc3RyYWlnaHQucGhhc2UpLgotICAgICBEZWZhdWx0IGlzIDEwMC4gKi8KLSAgaW50IHNtYXg7Ci0KLSAgLyogR2VuZXJpYyB2YWx1ZXMuCi0gICAqLwotICBub2RlIG5vZGU7Ci0gIGVkZ2UgZWRnZTsKLQotICAvKiBMaXN0IG9mIG5vZGVzIGRlY2xhcmVkLgotICAgICBQb2ludGVyLiAqLwotICBub2RlICpub2RlX2xpc3Q7Ci0KLSAgLyogTGlzdCBvZiBlZGdlcyBkZWNsYXJlZC4KLSAgICAgUG9pbnRlci4gKi8KLSAgZWRnZSAqZWRnZV9saXN0OwotCi19OwotCi0vKiBHcmFwaCB0eXBlZGVmcy4gKi8KLXR5cGVkZWYgc3RydWN0IGdyYXBoIGdyYXBoOwotCi12b2lkIG5ld19ncmFwaCAoZ3JhcGggKmcpOwotdm9pZCBuZXdfbm9kZSAobm9kZSAqbik7Ci12b2lkIG5ld19lZGdlIChlZGdlICplKTsKLQotdm9pZCBhZGRfbm9kZSAoZ3JhcGggKmcsIG5vZGUgKm4pOwotdm9pZCBhZGRfZWRnZSAoZ3JhcGggKmcsIGVkZ2UgKmUpOwotCi12b2lkIGFkZF9jb2xvcmVudHJ5IChncmFwaCAqZywgaW50IGNvbG9yX2lkeCwgaW50IHJlZF9jcCwKLQkJICAgICBpbnQgZ3JlZW5fY3AsIGludCBibHVlX2NwKTsKLXZvaWQgYWRkX2NsYXNzbmFtZSAoZ3JhcGggKmcsIGludCB2YWwsIGNvbnN0IGNoYXIgKm5hbWUpOwotdm9pZCBhZGRfaW5mb25hbWUgKGdyYXBoICpnLCBpbnQgdmFsLCBjb25zdCBjaGFyICpuYW1lKTsKLQotdm9pZCBvcGVuX25vZGUgKEZJTEUgKmZvdXQpOwotdm9pZCBvdXRwdXRfbm9kZSAobm9kZSAqbiwgRklMRSAqZm91dCk7Ci12b2lkIGNsb3NlX25vZGUgKEZJTEUgKmZvdXQpOwotCi12b2lkIG9wZW5fZWRnZSAoZWRnZSAqZSwgRklMRSAqZm91dCk7Ci12b2lkIG91dHB1dF9lZGdlIChlZGdlICplLCBGSUxFICpmb3V0KTsKLXZvaWQgY2xvc2VfZWRnZSAoRklMRSAqZm91dCk7Ci0KLXZvaWQgb3Blbl9ncmFwaCAoRklMRSAqZm91dCk7Ci12b2lkIG91dHB1dF9ncmFwaCAoZ3JhcGggKmcsIEZJTEUgKmZvdXQpOwotdm9pZCBjbG9zZV9ncmFwaCAoZ3JhcGggKmcsIEZJTEUgKmZvdXQpOwotCi0jZW5kaWYgLyogVkNHX0hfICovCmRpZmYgLS1naXQgYS9zcmMvdmNnX2RlZmF1bHRzLmggYi9zcmMvdmNnX2RlZmF1bHRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ZTI0YjUuLjAwMDAwMDAKLS0tIGEvc3JjL3ZjZ19kZWZhdWx0cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTgxICswLDAgQEAKLS8qIFZDRyBkZXNjcmlwdGlvbiBoYW5kbGVyIGZvciBCaXNvbi4KLQotICAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0gICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCaXNvbiwgdGhlIEdOVSBDb21waWxlciBDb21waWxlci4KLQotICAgQmlzb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICBCaXNvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIEJpc29uOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCi0KLSNpZm5kZWYgVkNHX0RFRkFVTFRTX0hfCi0jIGRlZmluZSBWQ0dfREVGQVVMVFNfSF8KLQotLyogR3JhcGggZGVmYXVsdHMuICovCi0jIGRlZmluZSBHX1RJVExFCQlOVUxMCi0jIGRlZmluZSBHX0xBQkVMCQlOVUxMCi0jIGRlZmluZSBHX0lORk9TMQkJTlVMTAotIyBkZWZpbmUgR19JTkZPUzIJCU5VTEwKLSMgZGVmaW5lIEdfSU5GT1MzCQlOVUxMCi0KLSMgZGVmaW5lIEdfQ09MT1IJCXdoaXRlCi0jIGRlZmluZSBHX1RFWFRDT0xPUgkJYmxhY2sKLSMgZGVmaW5lIEdfQk9SREVSQ09MT1IJCUdfVEVYVENPTE9SCi0KLSMgZGVmaW5lIEdfV0lEVEgJCTEwMAotIyBkZWZpbmUgR19IRUlHSFQJCTEwMAotIyBkZWZpbmUgR19CT1JERVJXSURUSAkJMgotCi0jIGRlZmluZSBHX1gJCQkwCi0jIGRlZmluZSBHX1kJCQkwCi0KLSMgZGVmaW5lIEdfRk9MRElORwkJMAotCi0jIGRlZmluZSBHX1NIUklOSwkJMQotIyBkZWZpbmUgR19TVFJFVENICQkxCi0KLSMgZGVmaW5lIEdfVEVYVE1PREUJCWNlbnRlcmVkCi0jIGRlZmluZSBHX1NIQVBFCQlib3gKLQotIyBkZWZpbmUgR19WRVJUSUNBTF9PUkRFUgkwCS8qIFVuc3BlY2lmaWVkIGZvciBzdWJncmFwaHMuICAqLwotIyBkZWZpbmUgR19IT1JJWk9OVEFMX09SREVSCTAJLyogVW5zcGVjaWZpZWQgZm9yIHN1YmdyYXBocy4gICovCi0KLSMgZGVmaW5lIEdfWE1BWAkJCTkwCS8qIE5vdCBvdXRwdXQuICAqLwotIyBkZWZpbmUgR19ZTUFYCQkJOTAJLyogTm90IG91dHB1dC4gICovCi0KLSMgZGVmaW5lIEdfWEJBU0UJCTUKLSMgZGVmaW5lIEdfWUJBU0UJCTUKLQotIyBkZWZpbmUgR19YU1BBQ0UJCTIwCi0jIGRlZmluZSBHX1lTUEFDRQkJNzAKLSMgZGVmaW5lIEdfWExTUEFDRQkJKEdfWFNQQUNFIC8gMikJLyogTm90IG91dHB1dCAqLwotCi0jIGRlZmluZSBHX1hSQVNURVIJCTEKLSMgZGVmaW5lIEdfWVJBU1RFUgkJMQotIyBkZWZpbmUgR19YTFJBU1RFUgkJMQotCi0jIGRlZmluZSBHX0hJRERFTgkJKC0xKQkvKiBObyBkZWZhdWx0IHZhbHVlLiAgKi8KLQotIyBkZWZpbmUgR19DTEFTU05BTUUJCU5VTEwJLyogTm8gY2xhc3MgbmFtZSBhc3NvY2lhdGlvbi4gICovCi0jIGRlZmluZSBHX0lORk9OQU1FCQlOVUxMCi0jIGRlZmluZSBHX0NPTE9SRU5UUlkJCU5VTEwKLQotIyBkZWZpbmUgR19MQVlPVVRBTEdPUklUSE0Jbm9ybWFsCi0jIGRlZmluZSBHX0xBWU9VVF9ET1dORkFDVE9SCTEKLSMgZGVmaW5lIEdfTEFZT1VUX1VQRkFDVE9SCTEKLSMgZGVmaW5lIEdfTEFZT1VUX05FQVJGQUNUT1IJMQotIyBkZWZpbmUgR19MQVlPVVRfU1BMSU5FRkFDVE9SCTcwCi0KLSMgZGVmaW5lIEdfTEFURV9FREdFX0xBQkVMUwlubwotIyBkZWZpbmUgR19ESVNQTEFZX0VER0VfTEFCRUxTCW5vCi0jIGRlZmluZSBHX0RJUlRZX0VER0VfTEFCRUxTCW5vCi0jIGRlZmluZSBHX0ZJTkVUVU5JTkcJCXllcwotIyBkZWZpbmUgR19JR05PUkVfU0lOR0xFUwlubwotIyBkZWZpbmUgR19MT05HX1NUUkFJR0hUX1BIQVNFCW5vCi0jIGRlZmluZSBHX1BSSU9SSVRZX1BIQVNFCW5vCi0jIGRlZmluZSBHX01BTkhBVFRBTl9FREdFUwlubwotIyBkZWZpbmUgR19TTUFOSEFUVEFOX0VER0VTCW5vCi0jIGRlZmluZSBHX05FQVJfRURHRVMJCXllcwotCi0jIGRlZmluZSBHX09SSUVOVEFUSU9OCQl0b3BfdG9fYm90dG9tCi0jIGRlZmluZSBHX05PREVfQUxJR05NRU5UCWNlbnRlcgotIyBkZWZpbmUgR19QT1JUX1NIQVJJTkcJCXllcwotIyBkZWZpbmUgR19BUlJPV19NT0RFCQlmaXhlZAotIyBkZWZpbmUgR19UUkVFRkFDVE9SCQkwLjUKLSMgZGVmaW5lIEdfU1BSRUFETEVWRUwJCTEKLSMgZGVmaW5lIEdfQ1JPU1NJTkdfV0VJR0hUCWJhcnkKLSMgZGVmaW5lIEdfQ1JPU1NJTkdfUEhBU0UyCXllcwotIyBkZWZpbmUgR19DUk9TU0lOR19PUFRJTUlaQVRJT04JeWVzCi0jIGRlZmluZSBHX1ZJRVcJCQlub3JtYWxfdmlldwotCi0jIGRlZmluZSBHX0VER0VTCQl5ZXMKLSMgZGVmaW5lIEdfTk9ERVMJCXllcwotIyBkZWZpbmUgR19TUExJTkVTCQlubwotCi0jIGRlZmluZSBHX0JNQVgJCQkxMDAKLSMgZGVmaW5lIEdfQ01JTgkJCTAKLSMgZGVmaW5lIEdfQ01BWAkJCSgtMSkJLyogSW5maW5pdHkgKi8KLSMgZGVmaW5lIEdfUE1JTgkJCTAKLSMgZGVmaW5lIEdfUE1BWAkJCTEwMAotIyBkZWZpbmUgR19STUlOCQkJMAotIyBkZWZpbmUgR19STUFYCQkJMTAwCi0jIGRlZmluZSBHX1NNQVgJCQkxMDAKLQotIyBkZWZpbmUgR19OT0RFX0xJU1QJCU5VTEwKLSMgZGVmaW5lIEdfRURHRV9MSVNUCQlOVUxMCi0KLS8qIE5vZGVzIGRlZmF1bHRzLiAqLwotIyBkZWZpbmUgTl9USVRMRQkJTlVMTAotIyBkZWZpbmUgTl9MQUJFTAkJTlVMTAotCi0jIGRlZmluZSBOX0xPQ1gJCQkoLTEpCS8qIERlZmF1bHQgdW5zcGNpZmllZCAqLwotIyBkZWZpbmUgTl9MT0NZCQkJKC0xKQkvKiBEZWZhdWx0IHVuc3BjaWZpZWQgKi8KLQotIyBkZWZpbmUgTl9WRVJUSUNBTF9PUkRFUgkoLTEpCS8qIERlZmF1bHQgdW5zcGNpZmllZCAqLwotIyBkZWZpbmUgTl9IT1JJWk9OVEFMX09SREVSCSgtMSkJLyogRGVmYXVsdCB1bnNwY2lmaWVkICovCi0KLSMgZGVmaW5lIE5fV0lEVEgJCSgtMSkJLyogV2UgYXNzdW1lIHRoYXQgd2UgY2FuJ3QgZGVmaW5lIGl0IG5vdy4gKi8KLSMgZGVmaW5lIE5fSEVJR0hUCQkoLTEpCS8qIGFsc28uICovCi0KLSMgZGVmaW5lIE5fU0hSSU5LCQkxCi0jIGRlZmluZSBOX1NUUkVUQ0gJCTEKLQotIyBkZWZpbmUgTl9GT0xESU5HCQkoLTEpCS8qIG5vIGV4cGxpY2l0IGRlZmF1bHQgdmFsdWUuICovCi0KLSMgZGVmaW5lIE5fU0hBUEUJCWJveAotIyBkZWZpbmUgTl9URVhUTU9ERQkJY2VudGVyZWQKLSMgZGVmaW5lIE5fQk9SREVSV0lEVEgJCTIKLQotIyBkZWZpbmUgTl9DT0xPUgkJd2hpdGUKLSMgZGVmaW5lIE5fVEVYVENPTE9SCQlibGFjawotIyBkZWZpbmUgTl9CT1JERVJDT0xPUgkJTl9URVhUQ09MT1IKLQotIyBkZWZpbmUgTl9JTkZPUzEJCU5VTEwKLSMgZGVmaW5lIE5fSU5GT1MyCQlOVUxMCi0jIGRlZmluZSBOX0lORk9TMwkJTlVMTAotCi0jIGRlZmluZSBOX05FWFQJCQlOVUxMCi0KLS8qIEVkZ2UgZGVmYXVsdHMuICovCi0jIGRlZmluZSBFX0VER0VfVFlQRQkJbm9ybWFsX2VkZ2UKLQotIyBkZWZpbmUgRV9TT1VSQ0VOQU1FCQlOVUxMCS8qIE1hbmRhdG9yeS4gKi8KLSMgZGVmaW5lIEVfVEFSR0VUTkFNRQkJTlVMTAkvKiBNYW5kYXRvcnkuICovCi0jIGRlZmluZSBFX0xBQkVMCQlOVUxMCi0KLSMgZGVmaW5lIEVfTElORVNUWUxFCQljb250aW51b3VzCi0jIGRlZmluZSBFX1RISUNLTkVTUwkJMgotCi0jIGRlZmluZSBFX0NMQVNTCQkxCi0KLSMgZGVmaW5lIEVfQ09MT1IJCWJsYWNrCi0jIGRlZmluZSBFX1RFWFRDT0xPUgkJRV9DT0xPUgotIyBkZWZpbmUgRV9BUlJPV0NPTE9SCQlFX0NPTE9SCi0jIGRlZmluZSBFX0JBQ0tBUlJPV0NPTE9SCUVfQ09MT1IKLQotIyBkZWZpbmUgRV9BUlJPV1NJWkUJCTEwCi0jIGRlZmluZSBFX0JBQ0tBUlJPV1NJWkUJMAotCi0jIGRlZmluZSBFX0FSUk9XU1RZTEUJCXNvbGlkCi0jIGRlZmluZSBFX0JBQ0tBUlJPV1NUWUxFCW5vbmUKLQotIyBkZWZpbmUgRV9QUklPUklUWQkJMQotCi0jIGRlZmluZSBFX0FOQ0hPUgkJKC0xKQotCi0jIGRlZmluZSBFX0hPUklaT05UQUxfT1JERVIJKC0xKQotCi0jIGRlZmluZSBFX05FWFQJCQlOVUxMCi0KLSNlbmRpZiAvKiBub3QgVkNHX0RFRkFVTFRTX0hfICovCmRpZmYgLS1naXQgYS9zcmMveWFjYyBiL3NyYy95YWNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBlZGEyMjZkLi4wMDAwMDAwCi0tLSBhL3NyYy95YWNjCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0jISAvYmluL3NoCi1leGVjIC9ob21lL3BoYW5uYS9zcmMvYmlzb24vYmluL2Jpc29uIC15ICIkQCIKZGlmZiAtLWdpdCBhL3N0YW1wLWgxIGIvc3RhbXAtaDEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1NDdmZTEuLjAwMDAwMDAKLS0tIGEvc3RhbXAtaDEKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi10aW1lc3RhbXAgZm9yIGNvbmZpZy5oCmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZSBiL3Rlc3RzL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmIyOGU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNDIzICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuOS42IGZyb20gTWFrZWZpbGUuYW0uCi0jIHRlc3RzL01ha2VmaWxlLiAgR2VuZXJhdGVkIGZyb20gTWFrZWZpbGUuaW4gYnkgY29uZmlndXJlLgotCi0jIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKLSMgMjAwMywgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi0KLXNyY2RpciA9IC4KLXRvcF9zcmNkaXIgPSAuLgotCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9iaXNvbgotcGtnbGliZGlyID0gJChsaWJkaXIpL2Jpc29uCi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9iaXNvbgotdG9wX2J1aWxkZGlyID0gLi4KLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLUlOU1RBTEwgPSAvdXNyL2Jpbi9pbnN0YWxsIC1jCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0geDg2XzY0LXVua25vd24tbGludXgtZ251Ci1ob3N0X3RyaXBsZXQgPSB4ODZfNjQtdW5rbm93bi1saW51eC1nbnUKLXN1YmRpciA9IHRlc3RzCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gXAotCSQoc3JjZGlyKS9hdGxvY2FsLmluICQoc3JjZGlyKS9iaXNvbi5pbgotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYmlzb24taTE4bi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jLXdvcmtpbmcubTQgJCh0b3Bfc3JjZGlyKS9tNC9jeHgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZGlybmFtZS5tNCAkKHRvcF9zcmNkaXIpL200L2RtYWxsb2MubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZG9zLm00ICQodG9wX3NyY2RpcikvbTQvZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZXhpdGZhaWwubTQgJCh0b3Bfc3JjZGlyKS9tNC9leHRlbnNpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dldG9wdC5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHRfZ2wubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ251bGliLm00ICQodG9wX3NyY2RpcikvbTQvaGFyZC1sb2NhbGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaGFzaC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzX2hfZ2wubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxkX2dsLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeF9nbC5tNCAkKHRvcF9zcmNkaXIpL200L200Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L21icnRvd2MubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYnN0YXRlX3QubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbWJzd2lkdGgubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvb2JzdGFjay5tNCAkKHRvcF9zcmNkaXIpL200L29uY2Vvbmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvX2dsLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcXVvdGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9xdW90ZWFyZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdGRib29sLm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50X2hfZ2wubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RkaW8tc2FmZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHBjcHkubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RyZHVwLm00ICQodG9wX3NyY2RpcikvbTQvc3RyZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RybmR1cC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cm5sZW4ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RydG9sLm00ICQodG9wX3NyY2RpcikvbTQvc3RydG91bC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdHJ2ZXJzY21wLm00ICQodG9wX3NyY2RpcikvbTQvc3VicGlwZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC90aW1ldmFyLm00ICQodG9wX3NyY2RpcikvbTQvdWludG1heF90X2dsLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Vsb25nbG9uZ19nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGQtc2FmZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC91bmxvY2tlZC1pby5tNCAkKHRvcF9zcmNkaXIpL200L3dhcm5pbmcubTQgXAotCSQodG9wX3NyY2RpcikvbTQveGFsbG9jLm00ICQodG9wX3NyY2RpcikvbTQveHN0cm5kdXAubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLW1raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9ta2luc3RhbGxkaXJzCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPSBhdGxvY2FsIGJpc29uCi1TT1VSQ0VTID0KLURJU1RfU09VUkNFUyA9Ci1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUNMT0NBTCA9ICR7U0hFTEx9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9taXNzaW5nIC0tcnVuIGFjbG9jYWwtMS45Ci1BTURFUF9GQUxTRSA9ICMKLUFNREVQX1RSVUUgPSAKLUFNVEFSID0gJHtTSEVMTH0gL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC90b29scy9iaXNvbi0yLjMvYnVpbGQtYXV4L21pc3NpbmcgLS1ydW4gdGFyCi1BVVRPQ09ORiA9ICR7U0hFTEx9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9taXNzaW5nIC0tcnVuIGF1dG9jb25mCi1BVVRPSEVBREVSID0gJHtTSEVMTH0gL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC90b29scy9iaXNvbi0yLjMvYnVpbGQtYXV4L21pc3NpbmcgLS1ydW4gYXV0b2hlYWRlcgotQVVUT000VEUgPSAke1NIRUxMfSAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL2Jpc29uLTIuMy9idWlsZC1hdXgvbWlzc2luZyAtLXJ1biBhdXRvbTR0ZQotQVVUT01BS0UgPSAke1NIRUxMfSAvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL2Jpc29uLTIuMy9idWlsZC1hdXgvbWlzc2luZyAtLXJ1biBhdXRvbWFrZS0xLjkKLUFXSyA9IGdhd2sKLUJJU09OX0NYWF9XT1JLUyA9IDoKLUJJU09OX0NYWF9XT1JLU19GQUxTRSA9ICMKLUJJU09OX0NYWF9XT1JLU19UUlVFID0gCi1CSVNPTl9MT0NBTEVESVIgPSAvdXNyL3NoYXJlL2xvY2FsZQotQ0MgPSBnY2MKLUNDREVQTU9ERSA9IGRlcG1vZGU9Z2NjMwotQ0ZMQUdTID0gLWcgLU8yCi1DUFAgPSBnY2MgLUUKLUNQUEZMQUdTID0gCi1DWFggPSBnKysKLUNYWERFUE1PREUgPSBkZXBtb2RlPWdjYzMKLUNYWEZMQUdTID0gLWcgLU8yCi1DWUdQQVRIX1cgPSBlY2hvCi1ERUZTID0gLURIQVZFX0NPTkZJR19ICi1ERVBESVIgPSAuZGVwcwotRUNIT19DID0gCi1FQ0hPX04gPSAtbgotRUNIT19UID0gCi1FR1JFUCA9IGdyZXAgLUUKLUVYRUVYVCA9IAotR0NDID0geWVzCi1HRVRPUFRfSCA9IAotR01TR0ZNVCA9IC91c3IvYmluL21zZ2ZtdAotSEFWRV9fQk9PTCA9IDEKLUlOU1RBTExfREFUQSA9ICR7SU5TVEFMTH0gLW0gNjQ0Ci1JTlNUQUxMX1BST0dSQU0gPSAke0lOU1RBTEx9Ci1JTlNUQUxMX1NDUklQVCA9ICR7SU5TVEFMTH0KLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9ICR7U0hFTEx9ICQoaW5zdGFsbF9zaCkgLWMgLXMKLUlOVExMSUJTID0gCi1JTlRMX01BQ09TWF9MSUJTID0gCi1MREZMQUdTID0gCi1MRVggPSBmbGV4Ci1MRVhMSUIgPSAtbGZsCi1MRVhfT1VUUFVUX1JPT1QgPSBsZXgueXkKLUxJQklDT05WID0gLWxpY29udgotTElCSU5UTCA9IAotTElCT0JKUyA9ICBkaXJuYW1lJFUubyBleGl0ZmFpbCRVLm8gaGFyZC1sb2NhbGUkVS5vIGhhc2gkVS5vIHF1b3RlJFUubyBxdW90ZWFyZyRVLm8gZm9wZW4tc2FmZXIkVS5vIGR1cC1zYWZlciRVLm8gZmQtc2FmZXIkVS5vIHBpcGUtc2FmZXIkVS5vIHhtYWxsb2MkVS5vCi1MSUJTID0gCi1MVExJQklDT05WID0gLWxpY29udgotTFRMSUJJTlRMID0gCi1MVExJQk9CSlMgPSAgZGlybmFtZSRVLmxvIGV4aXRmYWlsJFUubG8gaGFyZC1sb2NhbGUkVS5sbyBoYXNoJFUubG8gcXVvdGUkVS5sbyBxdW90ZWFyZyRVLmxvIGZvcGVuLXNhZmVyJFUubG8gZHVwLXNhZmVyJFUubG8gZmQtc2FmZXIkVS5sbyBwaXBlLXNhZmVyJFUubG8geG1hbGxvYyRVLmxvCi1NNCA9IC91c3IvYmluL200Ci1NQUtFSU5GTyA9ICR7U0hFTEx9IC91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL2J1aWxkLWF1eC9taXNzaW5nIC0tcnVuIG1ha2VpbmZvCi1NS0lOU1RBTExESVJTID0gJCh0b3BfYnVpbGRkaXIpL2J1aWxkLWF1eC9ta2luc3RhbGxkaXJzCi1NU0dGTVQgPSAvdXNyL2Jpbi9tc2dmbXQKLU1TR01FUkdFID0gL3Vzci9iaW4vbXNnbWVyZ2UKLU8wQ0ZMQUdTID0gLWcgCi1PMENYWEZMQUdTID0gLWcgCi1PQkpFWFQgPSBvCi1QQUNLQUdFID0gYmlzb24KLVBBQ0tBR0VfQlVHUkVQT1JUID0gYnVnLWJpc29uQGdudS5vcmcKLVBBQ0tBR0VfTkFNRSA9IEdOVSBCaXNvbgotUEFDS0FHRV9TVFJJTkcgPSBHTlUgQmlzb24gMi4zCi1QQUNLQUdFX1RBUk5BTUUgPSBiaXNvbgotUEFDS0FHRV9WRVJTSU9OID0gMi4zCi1QQVRIX1NFUEFSQVRPUiA9IDoKLVBPU1VCID0gcG8KLVJBTkxJQiA9IHJhbmxpYgotU0VUX01BS0UgPSAKLVNIRUxMID0gL2Jpbi9zaAotU1REQk9PTF9IID0gCi1TVFJJUCA9IAotVU5JU1REX0ggPSAKLVVTRV9OTFMgPSB5ZXMKLVZBTEdSSU5EID0gCi1WRVJTSU9OID0gMi4zCi1XQVJOSU5HX0NGTEFHUyA9IAotV0FSTklOR19DWFhGTEFHUyA9IAotV0VSUk9SX0NGTEFHUyA9IAotWEdFVFRFWFQgPSAvdXNyL2Jpbi94Z2V0dGV4dAotWUFDQyA9IGJpc29uIC15Ci1ZQUNDX0xJQlJBUlkgPSBsaWJ5LmEKLVlBQ0NfU0NSSVBUID0geWFjYwotYWNfY3RfQ0MgPSBnY2MKLWFjX2N0X0NYWCA9IGcrKwotYWNfY3RfUkFOTElCID0gcmFubGliCi1hY19jdF9TVFJJUCA9IAotYWNsb2NhbGRpciA9ICR7ZGF0YWRpcn0vYWNsb2NhbAotYW1fX2Zhc3RkZXBDQ19GQUxTRSA9ICMKLWFtX19mYXN0ZGVwQ0NfVFJVRSA9IAotYW1fX2Zhc3RkZXBDWFhfRkFMU0UgPSAjCi1hbV9fZmFzdGRlcENYWF9UUlVFID0gCi1hbV9faW5jbHVkZSA9IGluY2x1ZGUKLWFtX19sZWFkaW5nX2RvdCA9IC4KLWFtX19xdW90ZSA9IAotYW1fX3RhciA9ICR7QU1UQVJ9IGNob2YgLSAiJCR0YXJkaXIiCi1hbV9fdW50YXIgPSAke0FNVEFSfSB4ZiAtCi1iaW5kaXIgPSAke2V4ZWNfcHJlZml4fS9iaW4KLWJ1aWxkID0geDg2XzY0LXVua25vd24tbGludXgtZ251Ci1idWlsZF9hbGlhcyA9IAotYnVpbGRfY3B1ID0geDg2XzY0Ci1idWlsZF9vcyA9IGxpbnV4LWdudQotYnVpbGRfdmVuZG9yID0gdW5rbm93bgotZGF0YWRpciA9ICR7cHJlZml4fS9zaGFyZQotZXhlY19wcmVmaXggPSAke3ByZWZpeH0KLWhvc3QgPSB4ODZfNjQtdW5rbm93bi1saW51eC1nbnUKLWhvc3RfYWxpYXMgPSAKLWhvc3RfY3B1ID0geDg2XzY0Ci1ob3N0X29zID0gbGludXgtZ251Ci1ob3N0X3ZlbmRvciA9IHVua25vd24KLWluY2x1ZGVkaXIgPSAke3ByZWZpeH0vaW5jbHVkZQotaW5mb2RpciA9ICR7cHJlZml4fS9pbmZvCi1pbnN0YWxsX3NoID0gL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC90b29scy9iaXNvbi0yLjMvYnVpbGQtYXV4L2luc3RhbGwtc2gKLWxpYmRpciA9ICR7ZXhlY19wcmVmaXh9L2xpYgotbGliZXhlY2RpciA9ICR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMKLWxvY2Fsc3RhdGVkaXIgPSAke3ByZWZpeH0vdmFyCi1tYW5kaXIgPSAke3ByZWZpeH0vbWFuCi1ta2Rpcl9wID0gbWtkaXIgLXAgLS0KLW9sZGluY2x1ZGVkaXIgPSAvdXNyL2luY2x1ZGUKLXByZWZpeCA9IC9ob21lL3BoYW5uYS9zcmMvYmlzb24KLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBzLHgseCwKLXNiaW5kaXIgPSAke2V4ZWNfcHJlZml4fS9zYmluCi1zaGFyZWRzdGF0ZWRpciA9ICR7cHJlZml4fS9jb20KLXN5c2NvbmZkaXIgPSAke3ByZWZpeH0vZXRjCi10YXJnZXRfYWxpYXMgPSAKLUVYVFJBX0RJU1QgPSAkKFRFU1RTVUlURV9BVCkgdGVzdHN1aXRlIHBhY2thZ2UubTQKLURJU1RDTEVBTkZJTEVTID0gYXRjb25maWcgJChjaGVja19TQ1JJUFRTKQotTUFJTlRBSU5FUkNMRUFORklMRVMgPSBNYWtlZmlsZS5pbiAkKFRFU1RTVUlURSkKLVRFU1RTVUlURV9BVCA9IFwKLQlsb2NhbC5hdCBcCi0JdGVzdHN1aXRlLmF0IFwKLQlpbnB1dC5hdCBcCi0Jb3V0cHV0LmF0IHNldHMuYXQgcmVkdWNlLmF0IFwKLQlzeW5jbGluZXMuYXQgaGVhZGVycy5hdCBhY3Rpb25zLmF0IGNvbmZsaWN0cy5hdCBcCi0JY2FsYy5hdCBcCi0gICAgICAgIHRvcnR1cmUuYXQgZXhpc3RpbmcuYXQgcmVncmVzc2lvbi5hdCBcCi0gICAgICAgIGMrKy5hdCBcCi0JY3h4LXR5cGUuYXQgZ2xyLXJlZ3Jlc3Npb24uYXQKLQotVEVTVFNVSVRFID0gJChzcmNkaXIpL3Rlc3RzdWl0ZQotQVVUT1RFU1QgPSAkKEFVVE9NNFRFKSAtLWxhbmd1YWdlPWF1dG90ZXN0Ci1jaGVja19TQ1JJUFRTID0gYmlzb24KLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKLQkJJiYgZXhpdCAwOyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSAgdGVzdHMvTWFrZWZpbGUnOyBcCi0JY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSAgdGVzdHMvTWFrZWZpbGUKLS5QUkVDSU9VUzogTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi1hdGxvY2FsOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHNyY2RpcikvYXRsb2NhbC5pbgotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRACi1iaXNvbjogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL2Jpc29uLmluCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKLXVuaW5zdGFsbC1pbmZvLWFtOgotdGFnczogVEFHUwotVEFHUzoKLQotY3RhZ3M6IENUQUdTCi1DVEFHUzoKLQotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCi0JICBjYXNlICQkZmlsZSBpbiBcCi0JICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0JICAgICQodG9wX3NyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3wiYDs7IFwKLQkgIGVzYWM7IFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGRpcj1gZWNobyAiJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgIGlmIHRlc3QgIiQkZGlyIiAhPSAiJCRmaWxlIiAmJiB0ZXN0ICIkJGRpciIgIT0gIi4iOyB0aGVuIFwKLQkgICAgZGlyPSIvJCRkaXIiOyBcCi0JICAgICQobWtkaXJfcCkgIiQoZGlzdGRpcikkJGRpciI7IFwKLQkgIGVsc2UgXAotCSAgICBkaXI9Jyc7IFwKLQkgIGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJChjaGVja19TQ1JJUFRTKQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrLWxvY2FsCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUKLWluc3RhbGxkaXJzOgotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKLQkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC16ICIkKERJU1RDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChESVNUQ0xFQU5GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi0JLXRlc3QgLXogIiQoTUFJTlRBSU5FUkNMRUFORklMRVMpIiB8fCBybSAtZiAkKE1BSU5UQUlORVJDTEVBTkZJTEVTKQotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxvY2FsIG1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbGNoZWNrLWFtOiBpbnN0YWxsY2hlY2stbG9jYWwKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWluZm8tYW0KLQotLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNoZWNrLWxvY2FsIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxvY2FsIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0ZGlyIGR2aSBkdmktYW0gXAotCWh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAotCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsY2hlY2stbG9jYWwgaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1nZW5lcmljIHBkZiBwZGYtYW0gcHMgcHMtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLWluZm8tYW0KLQotCi0kKHNyY2RpcikvcGFja2FnZS5tNDogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLQl7IFwKLQkgIGVjaG8gJyMgU2lnbmF0dXJlIG9mIHRoZSBjdXJyZW50IHBhY2thZ2UuJzsgXAotCSAgZWNobyAnbTRfZGVmaW5lKFtBVF9QQUNLQUdFX05BTUVdLCAgICAgIFskKFBBQ0tBR0VfTkFNRSldKSc7IFwKLQkgIGVjaG8gJ200X2RlZmluZShbQVRfUEFDS0FHRV9UQVJOQU1FXSwgICBbJChQQUNLQUdFX1RBUk5BTUUpXSknOyBcCi0JICBlY2hvICdtNF9kZWZpbmUoW0FUX1BBQ0tBR0VfVkVSU0lPTl0sICAgWyQoUEFDS0FHRV9WRVJTSU9OKV0pJzsgXAotCSAgZWNobyAnbTRfZGVmaW5lKFtBVF9QQUNLQUdFX1NUUklOR10sICAgIFskKFBBQ0tBR0VfU1RSSU5HKV0pJzsgXAotCSAgZWNobyAnbTRfZGVmaW5lKFtBVF9QQUNLQUdFX0JVR1JFUE9SVF0sIFskKFBBQ0tBR0VfQlVHUkVQT1JUKV0pJzsgXAotCX0gPiQoc3JjZGlyKS9wYWNrYWdlLm00Ci0kKFRFU1RTVUlURSk6IHBhY2thZ2UubTQgJChURVNUU1VJVEVfQVQpCi0JJChBVVRPVEVTVCkgLUkgJChzcmNkaXIpIHRlc3RzdWl0ZS5hdCAtbyAkQC50bXAKLQltdiAkQC50bXAgJEAKLQotYXRjb25maWc6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmIC4vY29uZmlnLnN0YXR1cyB0ZXN0cy8kQAotCi1jbGVhbi1sb2NhbDoKLQl0ZXN0ICEgLWYgJChURVNUU1VJVEUpIHx8ICQoU0hFTEwpICQoVEVTVFNVSVRFKSAtLWNsZWFuCi0KLWNoZWNrLWxvY2FsOiBhdGNvbmZpZyBhdGxvY2FsICQoVEVTVFNVSVRFKQotCSQoU0hFTEwpICQoVEVTVFNVSVRFKSAkKFRFU1RTVUlURUZMQUdTKQotCi0jIFJ1biB0aGUgdGVzdCBzdWl0ZSBvbiB0aGUgKmluc3RhbGxlZCogdHJlZS4KLWluc3RhbGxjaGVjay1sb2NhbDoKLQkkKFNIRUxMKSAkKFRFU1RTVUlURSkgQVVUT1RFU1RfUEFUSD0iJChiaW5kaXIpIiAkKFRFU1RTVUlURUZMQUdTKQotCi0jIEJlIHJlYWwgbWVhbiB3aXRoIGl0LgotLlBIT05ZOiBtYWludGFpbmVyLWNoZWNrLWcrKwotbWFpbnRhaW5lci1jaGVjay1nKys6ICQoVEVTVFNVSVRFKQotCSQoVEVTVFNVSVRFKSBDQz0nJChDWFgpJwotCi0uUEhPTlk6IG1haW50YWluZXItY2hlY2stcG9zaXgKLW1haW50YWluZXItY2hlY2stcG9zaXg6ICQoVEVTVFNVSVRFKQotCSQoVEVTVFNVSVRFKSBQT1NJWExZX0NPUlJFQ1Q9MSBfUE9TSVgyX1ZFUlNJT049MjAwMTEyCi0KLS5QSE9OWTogbWFpbnRhaW5lci1jaGVjay12YWxncmluZAotbWFpbnRhaW5lci1jaGVjay12YWxncmluZDogJChURVNUU1VJVEUpCi0JdGVzdCAteiAnJChWQUxHUklORCknIHx8IFwKLQkgICAkKFRFU1RTVUlURSkgUFJFQklTT049JyQoVkFMR1JJTkQpIC1xJyBQUkVQQVJTRVI9JyQoVkFMR1JJTkQpIC1xJwotCi0uUEhPTlk6IG1haW50YWluZXItY2hlY2sKLW1haW50YWluZXItY2hlY2s6IG1haW50YWluZXItY2hlY2stcG9zaXggbWFpbnRhaW5lci1jaGVjay12YWxncmluZCBtYWludGFpbmVyLWNoZWNrLWcrKwotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQppbmRleCA3Y2YxODhhLi5iNjg0OGQ3IDEwMDY0NAotLS0gYS90ZXN0cy9NYWtlZmlsZS5hbQorKysgYi90ZXN0cy9NYWtlZmlsZS5hbQpAQCAtMiwyMyArMiwyMCBAQAogCiAjIyBNYWtlZmlsZSBmb3IgQmlzb24gdGVzdHN1aXRlLgogCi0jIyBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZQotIyMgRm91bmRhdGlvbiwgSW5jLgorIyMgQ29weXJpZ2h0IChDKSAyMDAwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLSMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIyMgYW55IGxhdGVyIHZlcnNpb24uCi0KLSMjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotIyMgMDIxMTAtMTMwMSwgVVNBLgorIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIAogRVhUUkFfRElTVCA9ICQoVEVTVFNVSVRFX0FUKSB0ZXN0c3VpdGUgcGFja2FnZS5tNAogCkBAIC0yOSwxNSArMjYsMTYgQEAKICMjIHBhY2thZ2UubTQuICAjIwogIyMgLS0tLS0tLS0tLS0tICMjCiAKLSQoc3JjZGlyKS9wYWNrYWdlLm00OiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotCXsgXAorJChzcmNkaXIpL3BhY2thZ2UubTQ6ICQodG9wX3NyY2RpcikvY29uZmlndXJlCisJJChBTV9WX0dFTikgeyBcCiAJICBlY2hvICcjIFNpZ25hdHVyZSBvZiB0aGUgY3VycmVudCBwYWNrYWdlLic7IFwKIAkgIGVjaG8gJ200X2RlZmluZShbQVRfUEFDS0FHRV9OQU1FXSwgICAgICBbJChQQUNLQUdFX05BTUUpXSknOyBcCiAJICBlY2hvICdtNF9kZWZpbmUoW0FUX1BBQ0tBR0VfVEFSTkFNRV0sICAgWyQoUEFDS0FHRV9UQVJOQU1FKV0pJzsgXAogCSAgZWNobyAnbTRfZGVmaW5lKFtBVF9QQUNLQUdFX1ZFUlNJT05dLCAgIFskKFBBQ0tBR0VfVkVSU0lPTildKSc7IFwKIAkgIGVjaG8gJ200X2RlZmluZShbQVRfUEFDS0FHRV9TVFJJTkddLCAgICBbJChQQUNLQUdFX1NUUklORyldKSc7IFwKIAkgIGVjaG8gJ200X2RlZmluZShbQVRfUEFDS0FHRV9CVUdSRVBPUlRdLCBbJChQQUNLQUdFX0JVR1JFUE9SVCldKSc7IFwKLQl9ID4kKHNyY2RpcikvcGFja2FnZS5tNAorCX0gPiRALnRtcAorCSQoQU1fVl9hdCkgbXYgJEAudG1wICRACiAKICMjIC0tLS0tLS0tLS0tLSAjIwogIyMgVGVzdCBzdWl0ZS4gICMjCkBAIC00NiwyMCArNDQsMjIgQEAKIFRFU1RTVUlURV9BVCA9IFwKIAlsb2NhbC5hdCBcCiAJdGVzdHN1aXRlLmF0IFwKLQlpbnB1dC5hdCBcCi0Jb3V0cHV0LmF0IHNldHMuYXQgcmVkdWNlLmF0IFwKKwlpbnB1dC5hdCBuYW1lZC1yZWZzLmF0IFwKKwlvdXRwdXQuYXQgc2tlbGV0b25zLmF0IHNldHMuYXQgcmVkdWNlLmF0IFwKIAlzeW5jbGluZXMuYXQgaGVhZGVycy5hdCBhY3Rpb25zLmF0IGNvbmZsaWN0cy5hdCBcCiAJY2FsYy5hdCBcCiAgICAgICAgIHRvcnR1cmUuYXQgZXhpc3RpbmcuYXQgcmVncmVzc2lvbi5hdCBcCiAgICAgICAgIGMrKy5hdCBcCi0JY3h4LXR5cGUuYXQgZ2xyLXJlZ3Jlc3Npb24uYXQKKyAgICAgICAgamF2YS5hdCBcCisJY3h4LXR5cGUuYXQgZ2xyLXJlZ3Jlc3Npb24uYXQgXAorCXB1c2guYXQKIAogVEVTVFNVSVRFID0gJChzcmNkaXIpL3Rlc3RzdWl0ZQogCiBBVVRPVEVTVCA9ICQoQVVUT000VEUpIC0tbGFuZ3VhZ2U9YXV0b3Rlc3QKLSQoVEVTVFNVSVRFKTogcGFja2FnZS5tNCAkKFRFU1RTVUlURV9BVCkKLQkkKEFVVE9URVNUKSAtSSAkKHNyY2RpcikgdGVzdHN1aXRlLmF0IC1vICRALnRtcAotCW12ICRALnRtcCAkQAorJChURVNUU1VJVEUpOiAkKHNyY2RpcikvcGFja2FnZS5tNCAkKFRFU1RTVUlURV9BVCkKKwkkKEFNX1ZfR0VOKSAkKEFVVE9URVNUKSAtSSAkKHNyY2RpcikgdGVzdHN1aXRlLmF0IC1vICRALnRtcAorCSQoQU1fVl9hdCkgbXYgJEAudG1wICRACiAKIGF0Y29uZmlnOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwogCWNkICQodG9wX2J1aWxkZGlyKSAmJiAuL2NvbmZpZy5zdGF0dXMgdGVzdHMvJEAKQEAgLTczLDIyICs3MywzNSBAQAogY2hlY2tfU0NSSVBUUyA9IGJpc29uCiAKICMgUnVuIHRoZSB0ZXN0IHN1aXRlIG9uIHRoZSAqaW5zdGFsbGVkKiB0cmVlLgotaW5zdGFsbGNoZWNrLWxvY2FsOgotCSQoU0hFTEwpICQoVEVTVFNVSVRFKSBBVVRPVEVTVF9QQVRIPSIkKGJpbmRpcikiICQoVEVTVFNVSVRFRkxBR1MpCitpbnN0YWxsY2hlY2stbG9jYWw6IGF0Y29uZmlnIGF0bG9jYWwgJChURVNUU1VJVEUpCisJJChURVNUU1VJVEUpIEFVVE9URVNUX1BBVEg9IiQoYmluZGlyKSIgJChURVNUU1VJVEVGTEFHUykKIAogIyBCZSByZWFsIG1lYW4gd2l0aCBpdC4KIC5QSE9OWTogbWFpbnRhaW5lci1jaGVjay1nKysKLW1haW50YWluZXItY2hlY2stZysrOiAkKFRFU1RTVUlURSkKLQkkKFRFU1RTVUlURSkgQ0M9JyQoQ1hYKScKK21haW50YWluZXItY2hlY2stZysrOiBhdGNvbmZpZyBhdGxvY2FsICQoVEVTVFNVSVRFKQorCSQoVEVTVFNVSVRFKSAkKFRFU1RTVUlURUZMQUdTKSAtLWNvbXBpbGUtYy13aXRoLWN4eAogCiAuUEhPTlk6IG1haW50YWluZXItY2hlY2stcG9zaXgKLW1haW50YWluZXItY2hlY2stcG9zaXg6ICQoVEVTVFNVSVRFKQotCSQoVEVTVFNVSVRFKSBQT1NJWExZX0NPUlJFQ1Q9MSBfUE9TSVgyX1ZFUlNJT049MjAwMTEyCittYWludGFpbmVyLWNoZWNrLXBvc2l4OiBhdGNvbmZpZyBhdGxvY2FsICQoVEVTVFNVSVRFKQorCSQoVEVTVFNVSVRFKSAkKFRFU1RTVUlURUZMQUdTKSBQT1NJWExZX0NPUlJFQ1Q9MSBfUE9TSVgyX1ZFUlNJT049MjAwMTEyCiAKIC5QSE9OWTogbWFpbnRhaW5lci1jaGVjay12YWxncmluZAotbWFpbnRhaW5lci1jaGVjay12YWxncmluZDogJChURVNUU1VJVEUpCi0JdGVzdCAteiAnJChWQUxHUklORCknIHx8IFwKLQkgICAkKFRFU1RTVUlURSkgUFJFQklTT049JyQoVkFMR1JJTkQpIC1xJyBQUkVQQVJTRVI9JyQoVkFMR1JJTkQpIC1xJworbWFpbnRhaW5lci1jaGVjay12YWxncmluZDogYXRjb25maWcgYXRsb2NhbCAkKFRFU1RTVUlURSkKKwl0ZXN0IC16ICckKFZBTEdSSU5EKScgfHwJCQkJCVwKKwkgICQoVEVTVFNVSVRFKSAkKFRFU1RTVUlURUZMQUdTKQkJCQlcCisJICBQUkVCSVNPTj0nJChWQUxHUklORF9QUkVCSVNPTiknIFBSRVBBUlNFUj0nJChWQUxHUklORCkgLXEnCVwKKwkgIFZBTEdSSU5EX09QVFM9Jy0tbGVhay1jaGVjaz1mdWxsIC0tc2hvdy1yZWFjaGFibGU9eWVzJwogCiAuUEhPTlk6IG1haW50YWluZXItY2hlY2sKIG1haW50YWluZXItY2hlY2s6IG1haW50YWluZXItY2hlY2stcG9zaXggbWFpbnRhaW5lci1jaGVjay12YWxncmluZCBtYWludGFpbmVyLWNoZWNrLWcrKworCisuUEhPTlk6IG1haW50YWluZXItcHVzaC1jaGVjaworbWFpbnRhaW5lci1wdXNoLWNoZWNrOgorCUJJU09OX1VTRV9QVVNIX0ZPUl9QVUxMPTEgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgbWFpbnRhaW5lci1jaGVjaworCisuUEhPTlk6IG1haW50YWluZXIteG1sLWNoZWNrCittYWludGFpbmVyLXhtbC1jaGVjazoKKwlCSVNPTl9URVNUX1hNTD0xICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIG1haW50YWluZXItY2hlY2sKKworLlBIT05ZOiBtYWludGFpbmVyLXJlbGVhc2UtY2hlY2sKK21haW50YWluZXItcmVsZWFzZS1jaGVjazogbWFpbnRhaW5lci1jaGVjayBtYWludGFpbmVyLXB1c2gtY2hlY2sgbWFpbnRhaW5lci14bWwtY2hlY2sKZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLmluIGIvdGVzdHMvTWFrZWZpbGUuaW4KaW5kZXggMjBmOWIzYy4uNDA1ZTI5MSAxMDA2NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuaW4KKysrIGIvdGVzdHMvTWFrZWZpbGUuaW4KQEAgLTEsOCArMSw4IEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjkuNiBmcm9tIE1ha2VmaWxlLmFtLgorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMi41IGZyb20gTWFrZWZpbGUuYW0uCiAjIEBjb25maWd1cmVfaW5wdXRACiAKLSMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAotIyAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKICMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KQEAgLTEzLDE1ICsxMyw0MSBAQAogIyBQQVJUSUNVTEFSIFBVUlBPU0UuCiAKIEBTRVRfTUFLRUAKLXNyY2RpciA9IEBzcmNkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiBWUEFUSCA9IEBzcmNkaXJACithbV9fbWFrZV9kcnlydW4gPSBcCisgIHsgXAorICAgIGFtX19kcnk9bm87IFwKKyAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKKyAgICAgICpcXFtcIFwJXSopIFwKKyAgICAgICAgZWNobyAnYW0tLWVjaG86IDsgQGVjaG8gIkFNIiAgT0snIHwgJChNQUtFKSAtZiAtIDI+L2Rldi9udWxsIFwKKyAgICAgICAgICB8IGdyZXAgJ15BTSBPSyQkJyA+L2Rldi9udWxsIHx8IGFtX19kcnk9eWVzOzsgXAorICAgICAgKikgXAorICAgICAgICBmb3IgYW1fX2ZsZyBpbiAkJE1BS0VGTEFHUzsgZG8gXAorICAgICAgICAgIGNhc2UgJCRhbV9fZmxnIGluIFwKKyAgICAgICAgICAgICo9KnwtLSopIDs7IFwKKyAgICAgICAgICAgICpuKikgYW1fX2RyeT15ZXM7IGJyZWFrOzsgXAorICAgICAgICAgIGVzYWM7IFwKKyAgICAgICAgZG9uZTs7IFwKKyAgICBlc2FjOyBcCisgICAgdGVzdCAkJGFtX19kcnkgPSB5ZXM7IFwKKyAgfQogcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACiBwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXRvcF9idWlsZGRpciA9IC4uCitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACiBhbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1JTlNUQUxMID0gQElOU1RBTExACiBpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAogaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwogaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCkBAIC0zOSwxMzMgKzY1LDEyMjEgQEAKIERJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbiBcCiAJJChzcmNkaXIpL2F0bG9jYWwuaW4gJChzcmNkaXIpL2Jpc29uLmluCiBBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaXNvbi1pMThuLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2Mtd29ya2luZy5tNCAkKHRvcF9zcmNkaXIpL200L2N4eC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9kaXJuYW1lLm00ICQodG9wX3NyY2RpcikvbTQvZG1hbGxvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9kb3MubTQgJCh0b3Bfc3JjZGlyKS9tNC9lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9leGl0ZmFpbC5tNCAkKHRvcF9zcmNkaXIpL200L2V4dGVuc2lvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ2V0b3B0Lm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dF9nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9oYXJkLWxvY2FsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9oYXNoLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaF9nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGRfZ2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4X2dsLm00ICQodG9wX3NyY2RpcikvbTQvbTQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbWJydG93Yy5tNCAkKHRvcF9zcmNkaXIpL200L21ic3RhdGVfdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9tYnN3aWR0aC5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9vYnN0YWNrLm00ICQodG9wX3NyY2RpcikvbTQvb25jZW9ubHkubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG9fZ2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC8wMGdudWxpYi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9hbGxvY2EubTQgJCh0b3Bfc3JjZGlyKS9tNC9hc20tdW5kZXJzY29yZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9hc3NlcnQubTQgJCh0b3Bfc3JjZGlyKS9tNC9iaXNvbi1pMThuLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Mtd29ya2luZy5tNCAkKHRvcF9zcmNkaXIpL200L2NhbGxvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZS1zdHJlYW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZW91dC5tNCAkKHRvcF9zcmNkaXIpL200L2NvZGVzZXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29uZmlnLWgubTQgJCh0b3Bfc3JjZGlyKS9tNC9jb25maWdtYWtlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N4eC5tNCAkKHRvcF9zcmNkaXIpL200L2Rpcm5hbWUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZG1hbGxvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9kb3VibGUtc2xhc2gtcm9vdC5tNCAkKHRvcF9zcmNkaXIpL200L2R1cDIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZW52aXJvbi5tNCAkKHRvcF9zcmNkaXIpL200L2Vycm5vX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXJyb3IubTQgJCh0b3Bfc3JjZGlyKS9tNC9leHBvbmVudGQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXhwb25lbnRmLm00ICQodG9wX3NyY2RpcikvbTQvZXhwb25lbnRsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2V4dGVuc2lvbnMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXh0ZXJuLWlubGluZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mYXRhbC1zaWduYWwubTQgJCh0b3Bfc3JjZGlyKS9tNC9mY250bC1vLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZjbnRsLm00ICQodG9wX3NyY2RpcikvbTQvZmNudGxfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mbGV4Lm00ICQodG9wX3NyY2RpcikvbTQvZmxvYXRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mb3Blbi5tNCAkKHRvcF9zcmNkaXIpL200L2ZwZW5kaW5nLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZwaWVlZS5tNCAkKHRvcF9zcmNkaXIpL200L2ZwcmludGYtcG9zaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZnJleHAubTQgJCh0b3Bfc3JjZGlyKS9tNC9mcmV4cGwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZnNldGVyci5tNCAkKHRvcF9zcmNkaXIpL200L2ZzdGF0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dldGRlbGltLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0ZHRhYmxlc2l6ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nZXRsaW5lLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0b3B0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgJCh0b3Bfc3JjZGlyKS9tNC9nbGliYzIxLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dudWxpYi1jb21tb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ251bGliLWNvbXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbmNsdWRlX25leHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2ludG1heF90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzLXByaS5tNCAkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9pc25hbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pc25hbmQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pc25hbmYubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaXNuYW5sLm00ICQodG9wX3NyY2RpcikvbTQvaXN3YmxhbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvamF2YWNvbXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9qYXZhZXhlYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sYXJnZWZpbGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9sZGV4cC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sZGV4cGwubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYnVuaXN0cmluZy1iYXNlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvY2FsY2hhcnNldC5tNCAkKHRvcF9zcmNkaXIpL200L2xvY2FsZS1mci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sb2NhbGUtamEubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb2NhbGUtemgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9jay5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L200Lm00ICQodG9wX3NyY2RpcikvbTQvbWFsbG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21hdGhfaC5tNCAkKHRvcF9zcmNkaXIpL200L21iY2hhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYml0ZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYnJ0b3djLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21ic2luaXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYnN0YXRlX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWJzd2lkdGgubTQgJCh0b3Bfc3JjZGlyKS9tNC9tZW1jaHIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbW1hcC1hbm9uLm00ICQodG9wX3NyY2RpcikvbTQvbW9kZV90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21zdmMtaW52YWwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbXN2Yy1ub3Rocm93Lm00ICQodG9wX3NyY2RpcikvbTQvbXVsdGlhcmNoLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L25scy5tNCAkKHRvcF9zcmNkaXIpL200L25vY3Jhc2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvb2JzdGFjay1wcmludGYubTQgJCh0b3Bfc3JjZGlyKS9tNC9vZmZfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9vcGVuLm00ICQodG9wX3NyY2RpcikvbTQvcGF0aG1heC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wZXJyb3IubTQgJCh0b3Bfc3JjZGlyKS9tNC9waXBlMi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Bvc2l4X3NwYXduLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ByaW50Zi1mcmV4cC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcmludGYtZnJleHBsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ByaW50Zi1wb3NpeC1ycGwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJpbnRmLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAogCSQodG9wX3NyY2RpcikvbTQvcXVvdGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9xdW90ZWFyZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9zdGRib29sLm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50X2hfZ2wubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RkaW8tc2FmZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHBjcHkubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmFpc2UubTQgJCh0b3Bfc3JjZGlyKS9tNC9yYXdtZW1jaHIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmVhbGxvYy5tNCAkKHRvcF9zcmNkaXIpL200L3NjaGVkX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc2V0ZW52Lm00ICQodG9wX3NyY2RpcikvbTQvc2lnX2F0b21pY190Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NpZ2FjdGlvbi5tNCAkKHRvcF9zcmNkaXIpL200L3NpZ25hbF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NpZ25hbGJsb2NraW5nLm00ICQodG9wX3NyY2RpcikvbTQvc2lnbmJpdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zaXplX21heC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zbnByaW50Zi1wb3NpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zbnByaW50Zi5tNCAkKHRvcF9zcmNkaXIpL200L3NwYXduLXBpcGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3Bhd25faC5tNCAkKHRvcF9zcmNkaXIpL200L3NwcmludGYtcG9zaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3NpemVfdC5tNCAkKHRvcF9zcmNkaXIpL200L3N0YXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RkYm9vbC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGRlZl9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGludC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGlvX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRsaWJfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHBjcHkubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJjaHJudWwubTQgXAogCSQodG9wX3NyY2RpcikvbTQvc3RyZHVwLm00ICQodG9wX3NyY2RpcikvbTQvc3RyZXJyb3IubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RyZXJyb3Jfci5tNCAkKHRvcF9zcmNkaXIpL200L3N0cmluZ19oLm00IFwKIAkkKHRvcF9zcmNkaXIpL200L3N0cm5kdXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJubGVuLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3N0cnRvbC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cnRvdWwubTQgXAotCSQodG9wX3NyY2RpcikvbTQvc3RydmVyc2NtcC5tNCAkKHRvcF9zcmNkaXIpL200L3N1YnBpcGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvdGltZXZhci5tNCAkKHRvcF9zcmNkaXIpL200L3VpbnRtYXhfdF9nbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC91bG9uZ2xvbmdfZ2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RydG91bC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cnZlcnNjbXAubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3lzX3NvY2tldF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N5c19zdGF0X2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zeXNfdHlwZXNfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zeXNfd2FpdF9oLm00ICQodG9wX3NyY2RpcikvbTQvdGhyZWFkbGliLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3RpbWVfaC5tNCAkKHRvcF9zcmNkaXIpL200L3RpbWV2YXIubTQgXAogCSQodG9wX3NyY2RpcikvbTQvdW5pc3RkLXNhZmVyLm00ICQodG9wX3NyY2RpcikvbTQvdW5pc3RkX2gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvdW5sb2NrZWQtaW8ubTQgJCh0b3Bfc3JjZGlyKS9tNC93YXJuaW5nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3hhbGxvYy5tNCAkKHRvcF9zcmNkaXIpL200L3hzdHJuZHVwLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3VubG9ja2VkLWlvLm00ICQodG9wX3NyY2RpcikvbTQvdmFzbnByaW50Zi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC92ZnByaW50Zi1wb3NpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC92c25wcmludGYtcG9zaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdnNucHJpbnRmLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ZzcHJpbnRmLXBvc2l4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3dhaXQtcHJvY2Vzcy5tNCAkKHRvcF9zcmNkaXIpL200L3dhaXRwaWQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2Fybi1vbi11c2UubTQgJCh0b3Bfc3JjZGlyKS9tNC93YXJuaW5ncy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93Y2hhcl9oLm00ICQodG9wX3NyY2RpcikvbTQvd2NoYXJfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93Y3R5cGVfaC5tNCAkKHRvcF9zcmNkaXIpL200L3djd2lkdGgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2ludF90Lm00ICQodG9wX3NyY2RpcikvbTQveGFsbG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3hzaXplLm00ICQodG9wX3NyY2RpcikvbTQveHN0cm5kdXAubTQgXAogCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCiBhbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAogCSQoQUNMT0NBTF9NNCkKLW1raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9ta2luc3RhbGxkaXJzCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmgKIENPTkZJR19DTEVBTl9GSUxFUyA9IGF0bG9jYWwgYmlzb24KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitBTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQorYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCithbV9fdl9QXzAgPSBmYWxzZQorYW1fX3ZfUF8xID0gOgorQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKK2FtX192X0dFTl8xID0gCitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK2FtX192X2F0XzEgPSAKIFNPVVJDRVMgPQogRElTVF9TT1VSQ0VTID0KK2FtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAorICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKKyAgICBufG5vfE5PKSBmYWxzZTs7IFwKKyAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAorICBlc2FjCiBESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorcGtnbGliZXhlY2RpciA9IEBwa2dsaWJleGVjZGlyQAogQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQU1ERVBfRkFMU0UgPSBAQU1ERVBfRkFMU0VACi1BTURFUF9UUlVFID0gQEFNREVQX1RSVUVACitBTExPQ0EgPSBAQUxMT0NBQAorQUxMT0NBX0ggPSBAQUxMT0NBX0hACiBBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVBQTEVfVU5JVkVSU0FMX0JVSUxEID0gQEFQUExFX1VOSVZFUlNBTF9CVUlMREAKK0FSID0gQEFSQAorQVJGTEFHUyA9IEBBUkZMQUdTQAorQVNNX1NZTUJPTF9QUkVGSVggPSBAQVNNX1NZTUJPTF9QUkVGSVhACiBBVVRPQ09ORiA9IEBBVVRPQ09ORkAKIEFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKIEFVVE9NNFRFID0gQEFVVE9NNFRFQAogQVVUT01BS0UgPSBAQVVUT01BS0VACiBBV0sgPSBAQVdLQAogQklTT05fQ1hYX1dPUktTID0gQEJJU09OX0NYWF9XT1JLU0AKLUJJU09OX0NYWF9XT1JLU19GQUxTRSA9IEBCSVNPTl9DWFhfV09SS1NfRkFMU0VACi1CSVNPTl9DWFhfV09SS1NfVFJVRSA9IEBCSVNPTl9DWFhfV09SS1NfVFJVRUAKK0JJU09OX0NfV09SS1MgPSBAQklTT05fQ19XT1JLU0AKIEJJU09OX0xPQ0FMRURJUiA9IEBCSVNPTl9MT0NBTEVESVJACitCSVRTSVpFT0ZfUFRSRElGRl9UID0gQEJJVFNJWkVPRl9QVFJESUZGX1RACitCSVRTSVpFT0ZfU0lHX0FUT01JQ19UID0gQEJJVFNJWkVPRl9TSUdfQVRPTUlDX1RACitCSVRTSVpFT0ZfU0laRV9UID0gQEJJVFNJWkVPRl9TSVpFX1RACitCSVRTSVpFT0ZfV0NIQVJfVCA9IEBCSVRTSVpFT0ZfV0NIQVJfVEAKK0JJVFNJWkVPRl9XSU5UX1QgPSBAQklUU0laRU9GX1dJTlRfVEAKIENDID0gQENDQAogQ0NERVBNT0RFID0gQENDREVQTU9ERUAKIENGTEFHUyA9IEBDRkxBR1NACitDTEFTU1BBVEggPSBAQ0xBU1NQQVRIQAorQ0xBU1NQQVRIX1NFUEFSQVRPUiA9IEBDTEFTU1BBVEhfU0VQQVJBVE9SQAorQ09ORklHX0lOQ0xVREUgPSBAQ09ORklHX0lOQ0xVREVACitDT05GX0pBVkEgPSBAQ09ORl9KQVZBQAorQ09ORl9KQVZBQyA9IEBDT05GX0pBVkFDQAogQ1BQID0gQENQUEAKIENQUEZMQUdTID0gQENQUEZMQUdTQAogQ1hYID0gQENYWEAKIENYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKIENYWEZMQUdTID0gQENYWEZMQUdTQAorQ1hYX0NPTVBJTEVSX1BPU0lYTFlfQ09SUkVDVCA9IEBDWFhfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUQAogQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0NfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUID0gQENfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUQAogREVGUyA9IEBERUZTQAogREVQRElSID0gQERFUERJUkAKK0RPVCA9IEBET1RACiBFQ0hPX0MgPSBARUNIT19DQAogRUNIT19OID0gQEVDSE9fTkAKIEVDSE9fVCA9IEBFQ0hPX1RACiBFR1JFUCA9IEBFR1JFUEAKK0VNVUxUSUhPUF9ISURERU4gPSBARU1VTFRJSE9QX0hJRERFTkAKK0VNVUxUSUhPUF9WQUxVRSA9IEBFTVVMVElIT1BfVkFMVUVACitFTk9MSU5LX0hJRERFTiA9IEBFTk9MSU5LX0hJRERFTkAKK0VOT0xJTktfVkFMVUUgPSBARU5PTElOS19WQUxVRUAKK0VPVkVSRkxPV19ISURERU4gPSBARU9WRVJGTE9XX0hJRERFTkAKK0VPVkVSRkxPV19WQUxVRSA9IEBFT1ZFUkZMT1dfVkFMVUVACitFUlJOT19IID0gQEVSUk5PX0hACiBFWEVFWFQgPSBARVhFRVhUQAorRkxPQVRfSCA9IEBGTE9BVF9IQAogR0NDID0gQEdDQ0AKIEdFVE9QVF9IID0gQEdFVE9QVF9IQAorR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKK0dMSUJDMjEgPSBAR0xJQkMyMUAKIEdNU0dGTVQgPSBAR01TR0ZNVEAKK0dNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAorR05VTElCX0FDT1NGID0gQEdOVUxJQl9BQ09TRkAKK0dOVUxJQl9BQ09TTCA9IEBHTlVMSUJfQUNPU0xACitHTlVMSUJfQVNJTkYgPSBAR05VTElCX0FTSU5GQAorR05VTElCX0FTSU5MID0gQEdOVUxJQl9BU0lOTEAKK0dOVUxJQl9BVEFOMkYgPSBAR05VTElCX0FUQU4yRkAKK0dOVUxJQl9BVEFORiA9IEBHTlVMSUJfQVRBTkZACitHTlVMSUJfQVRBTkwgPSBAR05VTElCX0FUQU5MQAorR05VTElCX0FUT0xMID0gQEdOVUxJQl9BVE9MTEAKK0dOVUxJQl9CVE9XQyA9IEBHTlVMSUJfQlRPV0NACitHTlVMSUJfQ0FMTE9DX1BPU0lYID0gQEdOVUxJQl9DQUxMT0NfUE9TSVhACitHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRSA9IEBHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRUAKK0dOVUxJQl9DQlJUID0gQEdOVUxJQl9DQlJUQAorR05VTElCX0NCUlRGID0gQEdOVUxJQl9DQlJURkAKK0dOVUxJQl9DQlJUTCA9IEBHTlVMSUJfQ0JSVExACitHTlVMSUJfQ0VJTCA9IEBHTlVMSUJfQ0VJTEAKK0dOVUxJQl9DRUlMRiA9IEBHTlVMSUJfQ0VJTEZACitHTlVMSUJfQ0VJTEwgPSBAR05VTElCX0NFSUxMQAorR05VTElCX0NIRElSID0gQEdOVUxJQl9DSERJUkAKK0dOVUxJQl9DSE9XTiA9IEBHTlVMSUJfQ0hPV05ACitHTlVMSUJfQ0xPU0UgPSBAR05VTElCX0NMT1NFQAorR05VTElCX0NPUFlTSUdOID0gQEdOVUxJQl9DT1BZU0lHTkAKK0dOVUxJQl9DT1BZU0lHTkYgPSBAR05VTElCX0NPUFlTSUdORkAKK0dOVUxJQl9DT1BZU0lHTkwgPSBAR05VTElCX0NPUFlTSUdOTEAKK0dOVUxJQl9DT1NGID0gQEdOVUxJQl9DT1NGQAorR05VTElCX0NPU0hGID0gQEdOVUxJQl9DT1NIRkAKK0dOVUxJQl9DT1NMID0gQEdOVUxJQl9DT1NMQAorR05VTElCX0RQUklOVEYgPSBAR05VTElCX0RQUklOVEZACitHTlVMSUJfRFVQID0gQEdOVUxJQl9EVVBACitHTlVMSUJfRFVQMiA9IEBHTlVMSUJfRFVQMkAKK0dOVUxJQl9EVVAzID0gQEdOVUxJQl9EVVAzQAorR05VTElCX0VOVklST04gPSBAR05VTElCX0VOVklST05ACitHTlVMSUJfRVVJREFDQ0VTUyA9IEBHTlVMSUJfRVVJREFDQ0VTU0AKK0dOVUxJQl9FWFAyID0gQEdOVUxJQl9FWFAyQAorR05VTElCX0VYUDJGID0gQEdOVUxJQl9FWFAyRkAKK0dOVUxJQl9FWFAyTCA9IEBHTlVMSUJfRVhQMkxACitHTlVMSUJfRVhQRiA9IEBHTlVMSUJfRVhQRkAKK0dOVUxJQl9FWFBMID0gQEdOVUxJQl9FWFBMQAorR05VTElCX0VYUE0xID0gQEdOVUxJQl9FWFBNMUAKK0dOVUxJQl9FWFBNMUYgPSBAR05VTElCX0VYUE0xRkAKK0dOVUxJQl9FWFBNMUwgPSBAR05VTElCX0VYUE0xTEAKK0dOVUxJQl9GQUJTRiA9IEBHTlVMSUJfRkFCU0ZACitHTlVMSUJfRkFCU0wgPSBAR05VTElCX0ZBQlNMQAorR05VTElCX0ZBQ0NFU1NBVCA9IEBHTlVMSUJfRkFDQ0VTU0FUQAorR05VTElCX0ZDSERJUiA9IEBHTlVMSUJfRkNIRElSQAorR05VTElCX0ZDSE1PREFUID0gQEdOVUxJQl9GQ0hNT0RBVEAKK0dOVUxJQl9GQ0hPV05BVCA9IEBHTlVMSUJfRkNIT1dOQVRACitHTlVMSUJfRkNMT1NFID0gQEdOVUxJQl9GQ0xPU0VACitHTlVMSUJfRkNOVEwgPSBAR05VTElCX0ZDTlRMQAorR05VTElCX0ZEQVRBU1lOQyA9IEBHTlVMSUJfRkRBVEFTWU5DQAorR05VTElCX0ZET1BFTiA9IEBHTlVMSUJfRkRPUEVOQAorR05VTElCX0ZGTFVTSCA9IEBHTlVMSUJfRkZMVVNIQAorR05VTElCX0ZGU0wgPSBAR05VTElCX0ZGU0xACitHTlVMSUJfRkZTTEwgPSBAR05VTElCX0ZGU0xMQAorR05VTElCX0ZHRVRDID0gQEdOVUxJQl9GR0VUQ0AKK0dOVUxJQl9GR0VUUyA9IEBHTlVMSUJfRkdFVFNACitHTlVMSUJfRkxPT1IgPSBAR05VTElCX0ZMT09SQAorR05VTElCX0ZMT09SRiA9IEBHTlVMSUJfRkxPT1JGQAorR05VTElCX0ZMT09STCA9IEBHTlVMSUJfRkxPT1JMQAorR05VTElCX0ZNQSA9IEBHTlVMSUJfRk1BQAorR05VTElCX0ZNQUYgPSBAR05VTElCX0ZNQUZACitHTlVMSUJfRk1BTCA9IEBHTlVMSUJfRk1BTEAKK0dOVUxJQl9GTU9EID0gQEdOVUxJQl9GTU9EQAorR05VTElCX0ZNT0RGID0gQEdOVUxJQl9GTU9ERkAKK0dOVUxJQl9GTU9ETCA9IEBHTlVMSUJfRk1PRExACitHTlVMSUJfRk9QRU4gPSBAR05VTElCX0ZPUEVOQAorR05VTElCX0ZQUklOVEYgPSBAR05VTElCX0ZQUklOVEZACitHTlVMSUJfRlBSSU5URl9QT1NJWCA9IEBHTlVMSUJfRlBSSU5URl9QT1NJWEAKK0dOVUxJQl9GUFVSR0UgPSBAR05VTElCX0ZQVVJHRUAKK0dOVUxJQl9GUFVUQyA9IEBHTlVMSUJfRlBVVENACitHTlVMSUJfRlBVVFMgPSBAR05VTElCX0ZQVVRTQAorR05VTElCX0ZSRUFEID0gQEdOVUxJQl9GUkVBREAKK0dOVUxJQl9GUkVPUEVOID0gQEdOVUxJQl9GUkVPUEVOQAorR05VTElCX0ZSRVhQID0gQEdOVUxJQl9GUkVYUEAKK0dOVUxJQl9GUkVYUEYgPSBAR05VTElCX0ZSRVhQRkAKK0dOVUxJQl9GUkVYUEwgPSBAR05VTElCX0ZSRVhQTEAKK0dOVUxJQl9GU0NBTkYgPSBAR05VTElCX0ZTQ0FORkAKK0dOVUxJQl9GU0VFSyA9IEBHTlVMSUJfRlNFRUtACitHTlVMSUJfRlNFRUtPID0gQEdOVUxJQl9GU0VFS09ACitHTlVMSUJfRlNUQVQgPSBAR05VTElCX0ZTVEFUQAorR05VTElCX0ZTVEFUQVQgPSBAR05VTElCX0ZTVEFUQVRACitHTlVMSUJfRlNZTkMgPSBAR05VTElCX0ZTWU5DQAorR05VTElCX0ZURUxMID0gQEdOVUxJQl9GVEVMTEAKK0dOVUxJQl9GVEVMTE8gPSBAR05VTElCX0ZURUxMT0AKK0dOVUxJQl9GVFJVTkNBVEUgPSBAR05VTElCX0ZUUlVOQ0FURUAKK0dOVUxJQl9GVVRJTUVOUyA9IEBHTlVMSUJfRlVUSU1FTlNACitHTlVMSUJfRldSSVRFID0gQEdOVUxJQl9GV1JJVEVACitHTlVMSUJfR0VUQyA9IEBHTlVMSUJfR0VUQ0AKK0dOVUxJQl9HRVRDSEFSID0gQEdOVUxJQl9HRVRDSEFSQAorR05VTElCX0dFVENXRCA9IEBHTlVMSUJfR0VUQ1dEQAorR05VTElCX0dFVERFTElNID0gQEdOVUxJQl9HRVRERUxJTUAKK0dOVUxJQl9HRVRET01BSU5OQU1FID0gQEdOVUxJQl9HRVRET01BSU5OQU1FQAorR05VTElCX0dFVERUQUJMRVNJWkUgPSBAR05VTElCX0dFVERUQUJMRVNJWkVACitHTlVMSUJfR0VUR1JPVVBTID0gQEdOVUxJQl9HRVRHUk9VUFNACitHTlVMSUJfR0VUSE9TVE5BTUUgPSBAR05VTElCX0dFVEhPU1ROQU1FQAorR05VTElCX0dFVExJTkUgPSBAR05VTElCX0dFVExJTkVACitHTlVMSUJfR0VUTE9BREFWRyA9IEBHTlVMSUJfR0VUTE9BREFWR0AKK0dOVUxJQl9HRVRMT0dJTiA9IEBHTlVMSUJfR0VUTE9HSU5ACitHTlVMSUJfR0VUTE9HSU5fUiA9IEBHTlVMSUJfR0VUTE9HSU5fUkAKK0dOVUxJQl9HRVRQQUdFU0laRSA9IEBHTlVMSUJfR0VUUEFHRVNJWkVACitHTlVMSUJfR0VUU1VCT1BUID0gQEdOVUxJQl9HRVRTVUJPUFRACitHTlVMSUJfR0VUVVNFUlNIRUxMID0gQEdOVUxJQl9HRVRVU0VSU0hFTExACitHTlVMSUJfR0xfVU5JU1REX0hfR0VUT1BUID0gQEdOVUxJQl9HTF9VTklTVERfSF9HRVRPUFRACitHTlVMSUJfR1JBTlRQVCA9IEBHTlVMSUJfR1JBTlRQVEAKK0dOVUxJQl9HUk9VUF9NRU1CRVIgPSBAR05VTElCX0dST1VQX01FTUJFUkAKK0dOVUxJQl9IWVBPVCA9IEBHTlVMSUJfSFlQT1RACitHTlVMSUJfSFlQT1RGID0gQEdOVUxJQl9IWVBPVEZACitHTlVMSUJfSFlQT1RMID0gQEdOVUxJQl9IWVBPVExACitHTlVMSUJfSUxPR0IgPSBAR05VTElCX0lMT0dCQAorR05VTElCX0lMT0dCRiA9IEBHTlVMSUJfSUxPR0JGQAorR05VTElCX0lMT0dCTCA9IEBHTlVMSUJfSUxPR0JMQAorR05VTElCX0lNQVhBQlMgPSBAR05VTElCX0lNQVhBQlNACitHTlVMSUJfSU1BWERJViA9IEBHTlVMSUJfSU1BWERJVkAKK0dOVUxJQl9JU0FUVFkgPSBAR05VTElCX0lTQVRUWUAKK0dOVUxJQl9JU0ZJTklURSA9IEBHTlVMSUJfSVNGSU5JVEVACitHTlVMSUJfSVNJTkYgPSBAR05VTElCX0lTSU5GQAorR05VTElCX0lTTkFOID0gQEdOVUxJQl9JU05BTkAKK0dOVUxJQl9JU05BTkQgPSBAR05VTElCX0lTTkFOREAKK0dOVUxJQl9JU05BTkYgPSBAR05VTElCX0lTTkFORkAKK0dOVUxJQl9JU05BTkwgPSBAR05VTElCX0lTTkFOTEAKK0dOVUxJQl9JU1dCTEFOSyA9IEBHTlVMSUJfSVNXQkxBTktACitHTlVMSUJfSVNXQ1RZUEUgPSBAR05VTElCX0lTV0NUWVBFQAorR05VTElCX0xDSE1PRCA9IEBHTlVMSUJfTENITU9EQAorR05VTElCX0xDSE9XTiA9IEBHTlVMSUJfTENIT1dOQAorR05VTElCX0xERVhQRiA9IEBHTlVMSUJfTERFWFBGQAorR05VTElCX0xERVhQTCA9IEBHTlVMSUJfTERFWFBMQAorR05VTElCX0xJTksgPSBAR05VTElCX0xJTktACitHTlVMSUJfTElOS0FUID0gQEdOVUxJQl9MSU5LQVRACitHTlVMSUJfTE9HID0gQEdOVUxJQl9MT0dACitHTlVMSUJfTE9HMTAgPSBAR05VTElCX0xPRzEwQAorR05VTElCX0xPRzEwRiA9IEBHTlVMSUJfTE9HMTBGQAorR05VTElCX0xPRzEwTCA9IEBHTlVMSUJfTE9HMTBMQAorR05VTElCX0xPRzFQID0gQEdOVUxJQl9MT0cxUEAKK0dOVUxJQl9MT0cxUEYgPSBAR05VTElCX0xPRzFQRkAKK0dOVUxJQl9MT0cxUEwgPSBAR05VTElCX0xPRzFQTEAKK0dOVUxJQl9MT0cyID0gQEdOVUxJQl9MT0cyQAorR05VTElCX0xPRzJGID0gQEdOVUxJQl9MT0cyRkAKK0dOVUxJQl9MT0cyTCA9IEBHTlVMSUJfTE9HMkxACitHTlVMSUJfTE9HQiA9IEBHTlVMSUJfTE9HQkAKK0dOVUxJQl9MT0dCRiA9IEBHTlVMSUJfTE9HQkZACitHTlVMSUJfTE9HQkwgPSBAR05VTElCX0xPR0JMQAorR05VTElCX0xPR0YgPSBAR05VTElCX0xPR0ZACitHTlVMSUJfTE9HTCA9IEBHTlVMSUJfTE9HTEAKK0dOVUxJQl9MU0VFSyA9IEBHTlVMSUJfTFNFRUtACitHTlVMSUJfTFNUQVQgPSBAR05VTElCX0xTVEFUQAorR05VTElCX01BTExPQ19QT1NJWCA9IEBHTlVMSUJfTUFMTE9DX1BPU0lYQAorR05VTElCX01CUkxFTiA9IEBHTlVMSUJfTUJSTEVOQAorR05VTElCX01CUlRPV0MgPSBAR05VTElCX01CUlRPV0NACitHTlVMSUJfTUJTQ0FTRUNNUCA9IEBHTlVMSUJfTUJTQ0FTRUNNUEAKK0dOVUxJQl9NQlNDQVNFU1RSID0gQEdOVUxJQl9NQlNDQVNFU1RSQAorR05VTElCX01CU0NIUiA9IEBHTlVMSUJfTUJTQ0hSQAorR05VTElCX01CU0NTUE4gPSBAR05VTElCX01CU0NTUE5ACitHTlVMSUJfTUJTSU5JVCA9IEBHTlVMSUJfTUJTSU5JVEAKK0dOVUxJQl9NQlNMRU4gPSBAR05VTElCX01CU0xFTkAKK0dOVUxJQl9NQlNOQ0FTRUNNUCA9IEBHTlVMSUJfTUJTTkNBU0VDTVBACitHTlVMSUJfTUJTTkxFTiA9IEBHTlVMSUJfTUJTTkxFTkAKK0dOVUxJQl9NQlNOUlRPV0NTID0gQEdOVUxJQl9NQlNOUlRPV0NTQAorR05VTElCX01CU1BCUksgPSBAR05VTElCX01CU1BCUktACitHTlVMSUJfTUJTUENBU0VDTVAgPSBAR05VTElCX01CU1BDQVNFQ01QQAorR05VTElCX01CU1JDSFIgPSBAR05VTElCX01CU1JDSFJACitHTlVMSUJfTUJTUlRPV0NTID0gQEdOVUxJQl9NQlNSVE9XQ1NACitHTlVMSUJfTUJTU0VQID0gQEdOVUxJQl9NQlNTRVBACitHTlVMSUJfTUJTU1BOID0gQEdOVUxJQl9NQlNTUE5ACitHTlVMSUJfTUJTU1RSID0gQEdOVUxJQl9NQlNTVFJACitHTlVMSUJfTUJTVE9LX1IgPSBAR05VTElCX01CU1RPS19SQAorR05VTElCX01CVE9XQyA9IEBHTlVMSUJfTUJUT1dDQAorR05VTElCX01FTUNIUiA9IEBHTlVMSUJfTUVNQ0hSQAorR05VTElCX01FTU1FTSA9IEBHTlVMSUJfTUVNTUVNQAorR05VTElCX01FTVBDUFkgPSBAR05VTElCX01FTVBDUFlACitHTlVMSUJfTUVNUkNIUiA9IEBHTlVMSUJfTUVNUkNIUkAKK0dOVUxJQl9NS0RJUkFUID0gQEdOVUxJQl9NS0RJUkFUQAorR05VTElCX01LRFRFTVAgPSBAR05VTElCX01LRFRFTVBACitHTlVMSUJfTUtGSUZPID0gQEdOVUxJQl9NS0ZJRk9ACitHTlVMSUJfTUtGSUZPQVQgPSBAR05VTElCX01LRklGT0FUQAorR05VTElCX01LTk9EID0gQEdOVUxJQl9NS05PREAKK0dOVUxJQl9NS05PREFUID0gQEdOVUxJQl9NS05PREFUQAorR05VTElCX01LT1NURU1QID0gQEdOVUxJQl9NS09TVEVNUEAKK0dOVUxJQl9NS09TVEVNUFMgPSBAR05VTElCX01LT1NURU1QU0AKK0dOVUxJQl9NS1NURU1QID0gQEdOVUxJQl9NS1NURU1QQAorR05VTElCX01LU1RFTVBTID0gQEdOVUxJQl9NS1NURU1QU0AKK0dOVUxJQl9NS1RJTUUgPSBAR05VTElCX01LVElNRUAKK0dOVUxJQl9NT0RGID0gQEdOVUxJQl9NT0RGQAorR05VTElCX01PREZGID0gQEdOVUxJQl9NT0RGRkAKK0dOVUxJQl9NT0RGTCA9IEBHTlVMSUJfTU9ERkxACitHTlVMSUJfTkFOT1NMRUVQID0gQEdOVUxJQl9OQU5PU0xFRVBACitHTlVMSUJfTk9OQkxPQ0tJTkcgPSBAR05VTElCX05PTkJMT0NLSU5HQAorR05VTElCX09CU1RBQ0tfUFJJTlRGID0gQEdOVUxJQl9PQlNUQUNLX1BSSU5URkAKK0dOVUxJQl9PQlNUQUNLX1BSSU5URl9QT1NJWCA9IEBHTlVMSUJfT0JTVEFDS19QUklOVEZfUE9TSVhACitHTlVMSUJfT1BFTiA9IEBHTlVMSUJfT1BFTkAKK0dOVUxJQl9PUEVOQVQgPSBAR05VTElCX09QRU5BVEAKK0dOVUxJQl9QQ0xPU0UgPSBAR05VTElCX1BDTE9TRUAKK0dOVUxJQl9QRVJST1IgPSBAR05VTElCX1BFUlJPUkAKK0dOVUxJQl9QSVBFID0gQEdOVUxJQl9QSVBFQAorR05VTElCX1BJUEUyID0gQEdOVUxJQl9QSVBFMkAKK0dOVUxJQl9QT1BFTiA9IEBHTlVMSUJfUE9QRU5ACitHTlVMSUJfUE9TSVhfT1BFTlBUID0gQEdOVUxJQl9QT1NJWF9PUEVOUFRACitHTlVMSUJfUE9TSVhfU1BBV04gPSBAR05VTElCX1BPU0lYX1NQQVdOQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9ERVNUUk9ZID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfREVTVFJPWUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VURkxBR1MgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRGTEFHU0AKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUUEdST1VQID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUUEdST1VQQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBBUkFNID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0NIRURQQVJBTUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0NIRURQT0xJQ1kgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTQ0hFRFBPTElDWUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfR0VUU0lHREVGQVVMVCA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNJR0RFRkFVTFRACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX0dFVFNJR01BU0sgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9HRVRTSUdNQVNLQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9JTklUID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfSU5JVEAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VURkxBR1MgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRGTEFHU0AKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUUEdST1VQID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUUEdST1VQQAorR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTQ0hFRFBBUkFNID0gQEdOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQQVJBTUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0NIRURQT0xJQ1kgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTQ0hFRFBPTElDWUAKK0dOVUxJQl9QT1NJWF9TUEFXTkFUVFJfU0VUU0lHREVGQVVMVCA9IEBHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNJR0RFRkFVTFRACitHTlVMSUJfUE9TSVhfU1BBV05BVFRSX1NFVFNJR01BU0sgPSBAR05VTElCX1BPU0lYX1NQQVdOQVRUUl9TRVRTSUdNQVNLQAorR05VTElCX1BPU0lYX1NQQVdOUCA9IEBHTlVMSUJfUE9TSVhfU1BBV05QQAorR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRSA9IEBHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERENMT1NFQAorR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BREREVVAyID0gQEdOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMkAKK0dOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURET1BFTiA9IEBHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU5ACitHTlVMSUJfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0RFU1RST1kgPSBAR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19ERVNUUk9ZQAorR05VTElCX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19JTklUID0gQEdOVUxJQl9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfSU5JVEAKK0dOVUxJQl9QT1dGID0gQEdOVUxJQl9QT1dGQAorR05VTElCX1BSRUFEID0gQEdOVUxJQl9QUkVBREAKK0dOVUxJQl9QUklOVEYgPSBAR05VTElCX1BSSU5URkAKK0dOVUxJQl9QUklOVEZfUE9TSVggPSBAR05VTElCX1BSSU5URl9QT1NJWEAKK0dOVUxJQl9QVEhSRUFEX1NJR01BU0sgPSBAR05VTElCX1BUSFJFQURfU0lHTUFTS0AKK0dOVUxJQl9QVFNOQU1FID0gQEdOVUxJQl9QVFNOQU1FQAorR05VTElCX1BUU05BTUVfUiA9IEBHTlVMSUJfUFRTTkFNRV9SQAorR05VTElCX1BVVEMgPSBAR05VTElCX1BVVENACitHTlVMSUJfUFVUQ0hBUiA9IEBHTlVMSUJfUFVUQ0hBUkAKK0dOVUxJQl9QVVRFTlYgPSBAR05VTElCX1BVVEVOVkAKK0dOVUxJQl9QVVRTID0gQEdOVUxJQl9QVVRTQAorR05VTElCX1BXUklURSA9IEBHTlVMSUJfUFdSSVRFQAorR05VTElCX1JBSVNFID0gQEdOVUxJQl9SQUlTRUAKK0dOVUxJQl9SQU5ET00gPSBAR05VTElCX1JBTkRPTUAKK0dOVUxJQl9SQU5ET01fUiA9IEBHTlVMSUJfUkFORE9NX1JACitHTlVMSUJfUkFXTUVNQ0hSID0gQEdOVUxJQl9SQVdNRU1DSFJACitHTlVMSUJfUkVBRCA9IEBHTlVMSUJfUkVBREAKK0dOVUxJQl9SRUFETElOSyA9IEBHTlVMSUJfUkVBRExJTktACitHTlVMSUJfUkVBRExJTktBVCA9IEBHTlVMSUJfUkVBRExJTktBVEAKK0dOVUxJQl9SRUFMTE9DX1BPU0lYID0gQEdOVUxJQl9SRUFMTE9DX1BPU0lYQAorR05VTElCX1JFQUxQQVRIID0gQEdOVUxJQl9SRUFMUEFUSEAKK0dOVUxJQl9SRU1BSU5ERVIgPSBAR05VTElCX1JFTUFJTkRFUkAKK0dOVUxJQl9SRU1BSU5ERVJGID0gQEdOVUxJQl9SRU1BSU5ERVJGQAorR05VTElCX1JFTUFJTkRFUkwgPSBAR05VTElCX1JFTUFJTkRFUkxACitHTlVMSUJfUkVNT1ZFID0gQEdOVUxJQl9SRU1PVkVACitHTlVMSUJfUkVOQU1FID0gQEdOVUxJQl9SRU5BTUVACitHTlVMSUJfUkVOQU1FQVQgPSBAR05VTElCX1JFTkFNRUFUQAorR05VTElCX1JJTlQgPSBAR05VTElCX1JJTlRACitHTlVMSUJfUklOVEYgPSBAR05VTElCX1JJTlRGQAorR05VTElCX1JJTlRMID0gQEdOVUxJQl9SSU5UTEAKK0dOVUxJQl9STURJUiA9IEBHTlVMSUJfUk1ESVJACitHTlVMSUJfUk9VTkQgPSBAR05VTElCX1JPVU5EQAorR05VTElCX1JPVU5ERiA9IEBHTlVMSUJfUk9VTkRGQAorR05VTElCX1JPVU5ETCA9IEBHTlVMSUJfUk9VTkRMQAorR05VTElCX1JQTUFUQ0ggPSBAR05VTElCX1JQTUFUQ0hACitHTlVMSUJfU0NBTkYgPSBAR05VTElCX1NDQU5GQAorR05VTElCX1NFVEVOViA9IEBHTlVMSUJfU0VURU5WQAorR05VTElCX1NFVEhPU1ROQU1FID0gQEdOVUxJQl9TRVRIT1NUTkFNRUAKK0dOVUxJQl9TSUdBQ1RJT04gPSBAR05VTElCX1NJR0FDVElPTkAKK0dOVUxJQl9TSUdOQUxfSF9TSUdQSVBFID0gQEdOVUxJQl9TSUdOQUxfSF9TSUdQSVBFQAorR05VTElCX1NJR05CSVQgPSBAR05VTElCX1NJR05CSVRACitHTlVMSUJfU0lHUFJPQ01BU0sgPSBAR05VTElCX1NJR1BST0NNQVNLQAorR05VTElCX1NJTkYgPSBAR05VTElCX1NJTkZACitHTlVMSUJfU0lOSEYgPSBAR05VTElCX1NJTkhGQAorR05VTElCX1NJTkwgPSBAR05VTElCX1NJTkxACitHTlVMSUJfU0xFRVAgPSBAR05VTElCX1NMRUVQQAorR05VTElCX1NOUFJJTlRGID0gQEdOVUxJQl9TTlBSSU5URkAKK0dOVUxJQl9TUFJJTlRGX1BPU0lYID0gQEdOVUxJQl9TUFJJTlRGX1BPU0lYQAorR05VTElCX1NRUlRGID0gQEdOVUxJQl9TUVJURkAKK0dOVUxJQl9TUVJUTCA9IEBHTlVMSUJfU1FSVExACitHTlVMSUJfU1RBVCA9IEBHTlVMSUJfU1RBVEAKK0dOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HID0gQEdOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HQAorR05VTElCX1NURElPX0hfU0lHUElQRSA9IEBHTlVMSUJfU1RESU9fSF9TSUdQSVBFQAorR05VTElCX1NUUENQWSA9IEBHTlVMSUJfU1RQQ1BZQAorR05VTElCX1NUUE5DUFkgPSBAR05VTElCX1NUUE5DUFlACitHTlVMSUJfU1RSQ0FTRVNUUiA9IEBHTlVMSUJfU1RSQ0FTRVNUUkAKK0dOVUxJQl9TVFJDSFJOVUwgPSBAR05VTElCX1NUUkNIUk5VTEAKK0dOVUxJQl9TVFJEVVAgPSBAR05VTElCX1NUUkRVUEAKK0dOVUxJQl9TVFJFUlJPUiA9IEBHTlVMSUJfU1RSRVJST1JACitHTlVMSUJfU1RSRVJST1JfUiA9IEBHTlVMSUJfU1RSRVJST1JfUkAKK0dOVUxJQl9TVFJOQ0FUID0gQEdOVUxJQl9TVFJOQ0FUQAorR05VTElCX1NUUk5EVVAgPSBAR05VTElCX1NUUk5EVVBACitHTlVMSUJfU1RSTkxFTiA9IEBHTlVMSUJfU1RSTkxFTkAKK0dOVUxJQl9TVFJQQlJLID0gQEdOVUxJQl9TVFJQQlJLQAorR05VTElCX1NUUlBUSU1FID0gQEdOVUxJQl9TVFJQVElNRUAKK0dOVUxJQl9TVFJTRVAgPSBAR05VTElCX1NUUlNFUEAKK0dOVUxJQl9TVFJTSUdOQUwgPSBAR05VTElCX1NUUlNJR05BTEAKK0dOVUxJQl9TVFJTVFIgPSBAR05VTElCX1NUUlNUUkAKK0dOVUxJQl9TVFJUT0QgPSBAR05VTElCX1NUUlRPREAKK0dOVUxJQl9TVFJUT0lNQVggPSBAR05VTElCX1NUUlRPSU1BWEAKK0dOVUxJQl9TVFJUT0tfUiA9IEBHTlVMSUJfU1RSVE9LX1JACitHTlVMSUJfU1RSVE9MTCA9IEBHTlVMSUJfU1RSVE9MTEAKK0dOVUxJQl9TVFJUT1VMTCA9IEBHTlVMSUJfU1RSVE9VTExACitHTlVMSUJfU1RSVE9VTUFYID0gQEdOVUxJQl9TVFJUT1VNQVhACitHTlVMSUJfU1RSVkVSU0NNUCA9IEBHTlVMSUJfU1RSVkVSU0NNUEAKK0dOVUxJQl9TWU1MSU5LID0gQEdOVUxJQl9TWU1MSU5LQAorR05VTElCX1NZTUxJTktBVCA9IEBHTlVMSUJfU1lNTElOS0FUQAorR05VTElCX1NZU1RFTV9QT1NJWCA9IEBHTlVMSUJfU1lTVEVNX1BPU0lYQAorR05VTElCX1RBTkYgPSBAR05VTElCX1RBTkZACitHTlVMSUJfVEFOSEYgPSBAR05VTElCX1RBTkhGQAorR05VTElCX1RBTkwgPSBAR05VTElCX1RBTkxACitHTlVMSUJfVElNRUdNID0gQEdOVUxJQl9USU1FR01ACitHTlVMSUJfVElNRV9SID0gQEdOVUxJQl9USU1FX1JACitHTlVMSUJfVE1QRklMRSA9IEBHTlVMSUJfVE1QRklMRUAKK0dOVUxJQl9UT1dDVFJBTlMgPSBAR05VTElCX1RPV0NUUkFOU0AKK0dOVUxJQl9UUlVOQyA9IEBHTlVMSUJfVFJVTkNACitHTlVMSUJfVFJVTkNGID0gQEdOVUxJQl9UUlVOQ0ZACitHTlVMSUJfVFJVTkNMID0gQEdOVUxJQl9UUlVOQ0xACitHTlVMSUJfVFRZTkFNRV9SID0gQEdOVUxJQl9UVFlOQU1FX1JACitHTlVMSUJfVU5JU1REX0hfTk9OQkxPQ0tJTkcgPSBAR05VTElCX1VOSVNURF9IX05PTkJMT0NLSU5HQAorR05VTElCX1VOSVNURF9IX1NJR1BJUEUgPSBAR05VTElCX1VOSVNURF9IX1NJR1BJUEVACitHTlVMSUJfVU5MSU5LID0gQEdOVUxJQl9VTkxJTktACitHTlVMSUJfVU5MSU5LQVQgPSBAR05VTElCX1VOTElOS0FUQAorR05VTElCX1VOTE9DS1BUID0gQEdOVUxJQl9VTkxPQ0tQVEAKK0dOVUxJQl9VTlNFVEVOViA9IEBHTlVMSUJfVU5TRVRFTlZACitHTlVMSUJfVVNMRUVQID0gQEdOVUxJQl9VU0xFRVBACitHTlVMSUJfVVRJTUVOU0FUID0gQEdOVUxJQl9VVElNRU5TQVRACitHTlVMSUJfVkFTUFJJTlRGID0gQEdOVUxJQl9WQVNQUklOVEZACitHTlVMSUJfVkRQUklOVEYgPSBAR05VTElCX1ZEUFJJTlRGQAorR05VTElCX1ZGUFJJTlRGID0gQEdOVUxJQl9WRlBSSU5URkAKK0dOVUxJQl9WRlBSSU5URl9QT1NJWCA9IEBHTlVMSUJfVkZQUklOVEZfUE9TSVhACitHTlVMSUJfVkZTQ0FORiA9IEBHTlVMSUJfVkZTQ0FORkAKK0dOVUxJQl9WUFJJTlRGID0gQEdOVUxJQl9WUFJJTlRGQAorR05VTElCX1ZQUklOVEZfUE9TSVggPSBAR05VTElCX1ZQUklOVEZfUE9TSVhACitHTlVMSUJfVlNDQU5GID0gQEdOVUxJQl9WU0NBTkZACitHTlVMSUJfVlNOUFJJTlRGID0gQEdOVUxJQl9WU05QUklOVEZACitHTlVMSUJfVlNQUklOVEZfUE9TSVggPSBAR05VTElCX1ZTUFJJTlRGX1BPU0lYQAorR05VTElCX1dBSVRQSUQgPSBAR05VTElCX1dBSVRQSURACitHTlVMSUJfV0NQQ1BZID0gQEdOVUxJQl9XQ1BDUFlACitHTlVMSUJfV0NQTkNQWSA9IEBHTlVMSUJfV0NQTkNQWUAKK0dOVUxJQl9XQ1JUT01CID0gQEdOVUxJQl9XQ1JUT01CQAorR05VTElCX1dDU0NBU0VDTVAgPSBAR05VTElCX1dDU0NBU0VDTVBACitHTlVMSUJfV0NTQ0FUID0gQEdOVUxJQl9XQ1NDQVRACitHTlVMSUJfV0NTQ0hSID0gQEdOVUxJQl9XQ1NDSFJACitHTlVMSUJfV0NTQ01QID0gQEdOVUxJQl9XQ1NDTVBACitHTlVMSUJfV0NTQ09MTCA9IEBHTlVMSUJfV0NTQ09MTEAKK0dOVUxJQl9XQ1NDUFkgPSBAR05VTElCX1dDU0NQWUAKK0dOVUxJQl9XQ1NDU1BOID0gQEdOVUxJQl9XQ1NDU1BOQAorR05VTElCX1dDU0RVUCA9IEBHTlVMSUJfV0NTRFVQQAorR05VTElCX1dDU0xFTiA9IEBHTlVMSUJfV0NTTEVOQAorR05VTElCX1dDU05DQVNFQ01QID0gQEdOVUxJQl9XQ1NOQ0FTRUNNUEAKK0dOVUxJQl9XQ1NOQ0FUID0gQEdOVUxJQl9XQ1NOQ0FUQAorR05VTElCX1dDU05DTVAgPSBAR05VTElCX1dDU05DTVBACitHTlVMSUJfV0NTTkNQWSA9IEBHTlVMSUJfV0NTTkNQWUAKK0dOVUxJQl9XQ1NOTEVOID0gQEdOVUxJQl9XQ1NOTEVOQAorR05VTElCX1dDU05SVE9NQlMgPSBAR05VTElCX1dDU05SVE9NQlNACitHTlVMSUJfV0NTUEJSSyA9IEBHTlVMSUJfV0NTUEJSS0AKK0dOVUxJQl9XQ1NSQ0hSID0gQEdOVUxJQl9XQ1NSQ0hSQAorR05VTElCX1dDU1JUT01CUyA9IEBHTlVMSUJfV0NTUlRPTUJTQAorR05VTElCX1dDU1NQTiA9IEBHTlVMSUJfV0NTU1BOQAorR05VTElCX1dDU1NUUiA9IEBHTlVMSUJfV0NTU1RSQAorR05VTElCX1dDU1RPSyA9IEBHTlVMSUJfV0NTVE9LQAorR05VTElCX1dDU1dJRFRIID0gQEdOVUxJQl9XQ1NXSURUSEAKK0dOVUxJQl9XQ1NYRlJNID0gQEdOVUxJQl9XQ1NYRlJNQAorR05VTElCX1dDVE9CID0gQEdOVUxJQl9XQ1RPQkAKK0dOVUxJQl9XQ1RPTUIgPSBAR05VTElCX1dDVE9NQkAKK0dOVUxJQl9XQ1RSQU5TID0gQEdOVUxJQl9XQ1RSQU5TQAorR05VTElCX1dDVFlQRSA9IEBHTlVMSUJfV0NUWVBFQAorR05VTElCX1dDV0lEVEggPSBAR05VTElCX1dDV0lEVEhACitHTlVMSUJfV01FTUNIUiA9IEBHTlVMSUJfV01FTUNIUkAKK0dOVUxJQl9XTUVNQ01QID0gQEdOVUxJQl9XTUVNQ01QQAorR05VTElCX1dNRU1DUFkgPSBAR05VTElCX1dNRU1DUFlACitHTlVMSUJfV01FTU1PVkUgPSBAR05VTElCX1dNRU1NT1ZFQAorR05VTElCX1dNRU1TRVQgPSBAR05VTElCX1dNRU1TRVRACitHTlVMSUJfV1JJVEUgPSBAR05VTElCX1dSSVRFQAorR05VTElCX19FWElUID0gQEdOVUxJQl9fRVhJVEAKK0dSRVAgPSBAR1JFUEAKK0hBVkVfQUNPU0YgPSBASEFWRV9BQ09TRkAKK0hBVkVfQUNPU0wgPSBASEFWRV9BQ09TTEAKK0hBVkVfQVNJTkYgPSBASEFWRV9BU0lORkAKK0hBVkVfQVNJTkwgPSBASEFWRV9BU0lOTEAKK0hBVkVfQVRBTjJGID0gQEhBVkVfQVRBTjJGQAorSEFWRV9BVEFORiA9IEBIQVZFX0FUQU5GQAorSEFWRV9BVEFOTCA9IEBIQVZFX0FUQU5MQAorSEFWRV9BVE9MTCA9IEBIQVZFX0FUT0xMQAorSEFWRV9CVE9XQyA9IEBIQVZFX0JUT1dDQAorSEFWRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FID0gQEhBVkVfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRUAKK0hBVkVfQ0JSVCA9IEBIQVZFX0NCUlRACitIQVZFX0NCUlRGID0gQEhBVkVfQ0JSVEZACitIQVZFX0NCUlRMID0gQEhBVkVfQ0JSVExACitIQVZFX0NIT1dOID0gQEhBVkVfQ0hPV05ACitIQVZFX0NPUFlTSUdOID0gQEhBVkVfQ09QWVNJR05ACitIQVZFX0NPUFlTSUdOTCA9IEBIQVZFX0NPUFlTSUdOTEAKK0hBVkVfQ09TRiA9IEBIQVZFX0NPU0ZACitIQVZFX0NPU0hGID0gQEhBVkVfQ09TSEZACitIQVZFX0NPU0wgPSBASEFWRV9DT1NMQAorSEFWRV9ERUNMX0FDT1NMID0gQEhBVkVfREVDTF9BQ09TTEAKK0hBVkVfREVDTF9BU0lOTCA9IEBIQVZFX0RFQ0xfQVNJTkxACitIQVZFX0RFQ0xfQVRBTkwgPSBASEFWRV9ERUNMX0FUQU5MQAorSEFWRV9ERUNMX0NCUlRGID0gQEhBVkVfREVDTF9DQlJURkAKK0hBVkVfREVDTF9DQlJUTCA9IEBIQVZFX0RFQ0xfQ0JSVExACitIQVZFX0RFQ0xfQ0VJTEYgPSBASEFWRV9ERUNMX0NFSUxGQAorSEFWRV9ERUNMX0NFSUxMID0gQEhBVkVfREVDTF9DRUlMTEAKK0hBVkVfREVDTF9DT1BZU0lHTkYgPSBASEFWRV9ERUNMX0NPUFlTSUdORkAKK0hBVkVfREVDTF9DT1NMID0gQEhBVkVfREVDTF9DT1NMQAorSEFWRV9ERUNMX0VOVklST04gPSBASEFWRV9ERUNMX0VOVklST05ACitIQVZFX0RFQ0xfRVhQMiA9IEBIQVZFX0RFQ0xfRVhQMkAKK0hBVkVfREVDTF9FWFAyRiA9IEBIQVZFX0RFQ0xfRVhQMkZACitIQVZFX0RFQ0xfRVhQMkwgPSBASEFWRV9ERUNMX0VYUDJMQAorSEFWRV9ERUNMX0VYUEwgPSBASEFWRV9ERUNMX0VYUExACitIQVZFX0RFQ0xfRVhQTTFMID0gQEhBVkVfREVDTF9FWFBNMUxACitIQVZFX0RFQ0xfRkNIRElSID0gQEhBVkVfREVDTF9GQ0hESVJACitIQVZFX0RFQ0xfRkRBVEFTWU5DID0gQEhBVkVfREVDTF9GREFUQVNZTkNACitIQVZFX0RFQ0xfRkxPT1JGID0gQEhBVkVfREVDTF9GTE9PUkZACitIQVZFX0RFQ0xfRkxPT1JMID0gQEhBVkVfREVDTF9GTE9PUkxACitIQVZFX0RFQ0xfRlBVUkdFID0gQEhBVkVfREVDTF9GUFVSR0VACitIQVZFX0RFQ0xfRlJFWFBMID0gQEhBVkVfREVDTF9GUkVYUExACitIQVZFX0RFQ0xfRlNFRUtPID0gQEhBVkVfREVDTF9GU0VFS09ACitIQVZFX0RFQ0xfRlRFTExPID0gQEhBVkVfREVDTF9GVEVMTE9ACitIQVZFX0RFQ0xfR0VUREVMSU0gPSBASEFWRV9ERUNMX0dFVERFTElNQAorSEFWRV9ERUNMX0dFVERPTUFJTk5BTUUgPSBASEFWRV9ERUNMX0dFVERPTUFJTk5BTUVACitIQVZFX0RFQ0xfR0VUTElORSA9IEBIQVZFX0RFQ0xfR0VUTElORUAKK0hBVkVfREVDTF9HRVRMT0FEQVZHID0gQEhBVkVfREVDTF9HRVRMT0FEQVZHQAorSEFWRV9ERUNMX0dFVExPR0lOX1IgPSBASEFWRV9ERUNMX0dFVExPR0lOX1JACitIQVZFX0RFQ0xfR0VUUEFHRVNJWkUgPSBASEFWRV9ERUNMX0dFVFBBR0VTSVpFQAorSEFWRV9ERUNMX0dFVFVTRVJTSEVMTCA9IEBIQVZFX0RFQ0xfR0VUVVNFUlNIRUxMQAorSEFWRV9ERUNMX0lNQVhBQlMgPSBASEFWRV9ERUNMX0lNQVhBQlNACitIQVZFX0RFQ0xfSU1BWERJViA9IEBIQVZFX0RFQ0xfSU1BWERJVkAKK0hBVkVfREVDTF9MREVYUEwgPSBASEFWRV9ERUNMX0xERVhQTEAKK0hBVkVfREVDTF9MT0NBTFRJTUVfUiA9IEBIQVZFX0RFQ0xfTE9DQUxUSU1FX1JACitIQVZFX0RFQ0xfTE9HMTBMID0gQEhBVkVfREVDTF9MT0cxMExACitIQVZFX0RFQ0xfTE9HMiA9IEBIQVZFX0RFQ0xfTE9HMkAKK0hBVkVfREVDTF9MT0cyRiA9IEBIQVZFX0RFQ0xfTE9HMkZACitIQVZFX0RFQ0xfTE9HMkwgPSBASEFWRV9ERUNMX0xPRzJMQAorSEFWRV9ERUNMX0xPR0IgPSBASEFWRV9ERUNMX0xPR0JACitIQVZFX0RFQ0xfTE9HTCA9IEBIQVZFX0RFQ0xfTE9HTEAKK0hBVkVfREVDTF9NRU1NRU0gPSBASEFWRV9ERUNMX01FTU1FTUAKK0hBVkVfREVDTF9NRU1SQ0hSID0gQEhBVkVfREVDTF9NRU1SQ0hSQAorSEFWRV9ERUNMX09CU1RBQ0tfUFJJTlRGID0gQEhBVkVfREVDTF9PQlNUQUNLX1BSSU5URkAKK0hBVkVfREVDTF9SRU1BSU5ERVIgPSBASEFWRV9ERUNMX1JFTUFJTkRFUkAKK0hBVkVfREVDTF9SRU1BSU5ERVJMID0gQEhBVkVfREVDTF9SRU1BSU5ERVJMQAorSEFWRV9ERUNMX1JJTlRGID0gQEhBVkVfREVDTF9SSU5URkAKK0hBVkVfREVDTF9ST1VORCA9IEBIQVZFX0RFQ0xfUk9VTkRACitIQVZFX0RFQ0xfUk9VTkRGID0gQEhBVkVfREVDTF9ST1VOREZACitIQVZFX0RFQ0xfUk9VTkRMID0gQEhBVkVfREVDTF9ST1VORExACitIQVZFX0RFQ0xfU0VURU5WID0gQEhBVkVfREVDTF9TRVRFTlZACitIQVZFX0RFQ0xfU0VUSE9TVE5BTUUgPSBASEFWRV9ERUNMX1NFVEhPU1ROQU1FQAorSEFWRV9ERUNMX1NJTkwgPSBASEFWRV9ERUNMX1NJTkxACitIQVZFX0RFQ0xfU05QUklOVEYgPSBASEFWRV9ERUNMX1NOUFJJTlRGQAorSEFWRV9ERUNMX1NRUlRMID0gQEhBVkVfREVDTF9TUVJUTEAKK0hBVkVfREVDTF9TVFJEVVAgPSBASEFWRV9ERUNMX1NUUkRVUEAKK0hBVkVfREVDTF9TVFJFUlJPUl9SID0gQEhBVkVfREVDTF9TVFJFUlJPUl9SQAorSEFWRV9ERUNMX1NUUk5EVVAgPSBASEFWRV9ERUNMX1NUUk5EVVBACitIQVZFX0RFQ0xfU1RSTkxFTiA9IEBIQVZFX0RFQ0xfU1RSTkxFTkAKK0hBVkVfREVDTF9TVFJTSUdOQUwgPSBASEFWRV9ERUNMX1NUUlNJR05BTEAKK0hBVkVfREVDTF9TVFJUT0lNQVggPSBASEFWRV9ERUNMX1NUUlRPSU1BWEAKK0hBVkVfREVDTF9TVFJUT0tfUiA9IEBIQVZFX0RFQ0xfU1RSVE9LX1JACitIQVZFX0RFQ0xfU1RSVE9VTUFYID0gQEhBVkVfREVDTF9TVFJUT1VNQVhACitIQVZFX0RFQ0xfVEFOTCA9IEBIQVZFX0RFQ0xfVEFOTEAKK0hBVkVfREVDTF9UUlVOQyA9IEBIQVZFX0RFQ0xfVFJVTkNACitIQVZFX0RFQ0xfVFJVTkNGID0gQEhBVkVfREVDTF9UUlVOQ0ZACitIQVZFX0RFQ0xfVFJVTkNMID0gQEhBVkVfREVDTF9UUlVOQ0xACitIQVZFX0RFQ0xfVFRZTkFNRV9SID0gQEhBVkVfREVDTF9UVFlOQU1FX1JACitIQVZFX0RFQ0xfVU5TRVRFTlYgPSBASEFWRV9ERUNMX1VOU0VURU5WQAorSEFWRV9ERUNMX1ZTTlBSSU5URiA9IEBIQVZFX0RFQ0xfVlNOUFJJTlRGQAorSEFWRV9ERUNMX1dDVE9CID0gQEhBVkVfREVDTF9XQ1RPQkAKK0hBVkVfREVDTF9XQ1dJRFRIID0gQEhBVkVfREVDTF9XQ1dJRFRIQAorSEFWRV9EUFJJTlRGID0gQEhBVkVfRFBSSU5URkAKK0hBVkVfRFVQMiA9IEBIQVZFX0RVUDJACitIQVZFX0RVUDMgPSBASEFWRV9EVVAzQAorSEFWRV9FVUlEQUNDRVNTID0gQEhBVkVfRVVJREFDQ0VTU0AKK0hBVkVfRVhQRiA9IEBIQVZFX0VYUEZACitIQVZFX0VYUEwgPSBASEFWRV9FWFBMQAorSEFWRV9FWFBNMSA9IEBIQVZFX0VYUE0xQAorSEFWRV9FWFBNMUYgPSBASEFWRV9FWFBNMUZACitIQVZFX0ZBQlNGID0gQEhBVkVfRkFCU0ZACitIQVZFX0ZBQlNMID0gQEhBVkVfRkFCU0xACitIQVZFX0ZBQ0NFU1NBVCA9IEBIQVZFX0ZBQ0NFU1NBVEAKK0hBVkVfRkNIRElSID0gQEhBVkVfRkNIRElSQAorSEFWRV9GQ0hNT0RBVCA9IEBIQVZFX0ZDSE1PREFUQAorSEFWRV9GQ0hPV05BVCA9IEBIQVZFX0ZDSE9XTkFUQAorSEFWRV9GQ05UTCA9IEBIQVZFX0ZDTlRMQAorSEFWRV9GREFUQVNZTkMgPSBASEFWRV9GREFUQVNZTkNACitIQVZFX0ZFQVRVUkVTX0ggPSBASEFWRV9GRUFUVVJFU19IQAorSEFWRV9GRlNMID0gQEhBVkVfRkZTTEAKK0hBVkVfRkZTTEwgPSBASEFWRV9GRlNMTEAKK0hBVkVfRk1BID0gQEhBVkVfRk1BQAorSEFWRV9GTUFGID0gQEhBVkVfRk1BRkAKK0hBVkVfRk1BTCA9IEBIQVZFX0ZNQUxACitIQVZFX0ZNT0RGID0gQEhBVkVfRk1PREZACitIQVZFX0ZNT0RMID0gQEhBVkVfRk1PRExACitIQVZFX0ZSRVhQRiA9IEBIQVZFX0ZSRVhQRkAKK0hBVkVfRlNFRUtPID0gQEhBVkVfRlNFRUtPQAorSEFWRV9GU1RBVEFUID0gQEhBVkVfRlNUQVRBVEAKK0hBVkVfRlNZTkMgPSBASEFWRV9GU1lOQ0AKK0hBVkVfRlRFTExPID0gQEhBVkVfRlRFTExPQAorSEFWRV9GVFJVTkNBVEUgPSBASEFWRV9GVFJVTkNBVEVACitIQVZFX0ZVVElNRU5TID0gQEhBVkVfRlVUSU1FTlNACitIQVZFX0dDSl9DID0gQEhBVkVfR0NKX0NACitIQVZFX0dDSl9JTl9QQVRIID0gQEhBVkVfR0NKX0lOX1BBVEhACitIQVZFX0dFVERUQUJMRVNJWkUgPSBASEFWRV9HRVREVEFCTEVTSVpFQAorSEFWRV9HRVRHUk9VUFMgPSBASEFWRV9HRVRHUk9VUFNACitIQVZFX0dFVEhPU1ROQU1FID0gQEhBVkVfR0VUSE9TVE5BTUVACitIQVZFX0dFVExPR0lOID0gQEhBVkVfR0VUTE9HSU5ACitIQVZFX0dFVE9QVF9IID0gQEhBVkVfR0VUT1BUX0hACitIQVZFX0dFVFBBR0VTSVpFID0gQEhBVkVfR0VUUEFHRVNJWkVACitIQVZFX0dFVFNVQk9QVCA9IEBIQVZFX0dFVFNVQk9QVEAKK0hBVkVfR0lKID0gQEhBVkVfR0lKQAorSEFWRV9HSUpfSU5fUEFUSCA9IEBIQVZFX0dJSl9JTl9QQVRIQAorSEFWRV9HUkFOVFBUID0gQEhBVkVfR1JBTlRQVEAKK0hBVkVfR1JPVVBfTUVNQkVSID0gQEhBVkVfR1JPVVBfTUVNQkVSQAorSEFWRV9IWVBPVEYgPSBASEFWRV9IWVBPVEZACitIQVZFX0hZUE9UTCA9IEBIQVZFX0hZUE9UTEAKK0hBVkVfSUxPR0IgPSBASEFWRV9JTE9HQkAKK0hBVkVfSUxPR0JGID0gQEhBVkVfSUxPR0JGQAorSEFWRV9JTE9HQkwgPSBASEFWRV9JTE9HQkxACitIQVZFX0lOVFRZUEVTX0ggPSBASEFWRV9JTlRUWVBFU19IQAorSEFWRV9JU05BTkQgPSBASEFWRV9JU05BTkRACitIQVZFX0lTTkFORiA9IEBIQVZFX0lTTkFORkAKK0hBVkVfSVNOQU5MID0gQEhBVkVfSVNOQU5MQAorSEFWRV9JU1dCTEFOSyA9IEBIQVZFX0lTV0JMQU5LQAorSEFWRV9JU1dDTlRSTCA9IEBIQVZFX0lTV0NOVFJMQAorSEFWRV9KQVZBID0gQEhBVkVfSkFWQUAKK0hBVkVfSkFWQUMgPSBASEFWRV9KQVZBQ0AKK0hBVkVfSkFWQUNfRU5WVkFSID0gQEhBVkVfSkFWQUNfRU5WVkFSQAorSEFWRV9KQVZBQ19JTl9QQVRIID0gQEhBVkVfSkFWQUNfSU5fUEFUSEAKK0hBVkVfSkFWQV9FTlZWQVIgPSBASEFWRV9KQVZBX0VOVlZBUkAKK0hBVkVfSkFWQV9JTl9QQVRIID0gQEhBVkVfSkFWQV9JTl9QQVRIQAorSEFWRV9KSUtFUyA9IEBIQVZFX0pJS0VTQAorSEFWRV9KSUtFU19JTl9QQVRIID0gQEhBVkVfSklLRVNfSU5fUEFUSEAKK0hBVkVfSlJFID0gQEhBVkVfSlJFQAorSEFWRV9KUkVfSU5fUEFUSCA9IEBIQVZFX0pSRV9JTl9QQVRIQAorSEFWRV9KVklFVyA9IEBIQVZFX0pWSUVXQAorSEFWRV9KVklFV19JTl9QQVRIID0gQEhBVkVfSlZJRVdfSU5fUEFUSEAKK0hBVkVfTENITU9EID0gQEhBVkVfTENITU9EQAorSEFWRV9MQ0hPV04gPSBASEFWRV9MQ0hPV05ACitIQVZFX0xERVhQRiA9IEBIQVZFX0xERVhQRkAKK0hBVkVfTElOSyA9IEBIQVZFX0xJTktACitIQVZFX0xJTktBVCA9IEBIQVZFX0xJTktBVEAKK0hBVkVfTE9HMTBGID0gQEhBVkVfTE9HMTBGQAorSEFWRV9MT0cxMEwgPSBASEFWRV9MT0cxMExACitIQVZFX0xPRzFQID0gQEhBVkVfTE9HMVBACitIQVZFX0xPRzFQRiA9IEBIQVZFX0xPRzFQRkAKK0hBVkVfTE9HMVBMID0gQEhBVkVfTE9HMVBMQAorSEFWRV9MT0dCRiA9IEBIQVZFX0xPR0JGQAorSEFWRV9MT0dCTCA9IEBIQVZFX0xPR0JMQAorSEFWRV9MT0dGID0gQEhBVkVfTE9HRkAKK0hBVkVfTE9HTCA9IEBIQVZFX0xPR0xACitIQVZFX0xPTkdfTE9OR19JTlQgPSBASEFWRV9MT05HX0xPTkdfSU5UQAorSEFWRV9MU1RBVCA9IEBIQVZFX0xTVEFUQAorSEFWRV9NQlJMRU4gPSBASEFWRV9NQlJMRU5ACitIQVZFX01CUlRPV0MgPSBASEFWRV9NQlJUT1dDQAorSEFWRV9NQlNJTklUID0gQEhBVkVfTUJTSU5JVEAKK0hBVkVfTUJTTEVOID0gQEhBVkVfTUJTTEVOQAorSEFWRV9NQlNOUlRPV0NTID0gQEhBVkVfTUJTTlJUT1dDU0AKK0hBVkVfTUJTUlRPV0NTID0gQEhBVkVfTUJTUlRPV0NTQAorSEFWRV9NRU1DSFIgPSBASEFWRV9NRU1DSFJACitIQVZFX01FTVBDUFkgPSBASEFWRV9NRU1QQ1BZQAorSEFWRV9NS0RJUkFUID0gQEhBVkVfTUtESVJBVEAKK0hBVkVfTUtEVEVNUCA9IEBIQVZFX01LRFRFTVBACitIQVZFX01LRklGTyA9IEBIQVZFX01LRklGT0AKK0hBVkVfTUtGSUZPQVQgPSBASEFWRV9NS0ZJRk9BVEAKK0hBVkVfTUtOT0QgPSBASEFWRV9NS05PREAKK0hBVkVfTUtOT0RBVCA9IEBIQVZFX01LTk9EQVRACitIQVZFX01LT1NURU1QID0gQEhBVkVfTUtPU1RFTVBACitIQVZFX01LT1NURU1QUyA9IEBIQVZFX01LT1NURU1QU0AKK0hBVkVfTUtTVEVNUCA9IEBIQVZFX01LU1RFTVBACitIQVZFX01LU1RFTVBTID0gQEhBVkVfTUtTVEVNUFNACitIQVZFX01PREZGID0gQEhBVkVfTU9ERkZACitIQVZFX01PREZMID0gQEhBVkVfTU9ERkxACitIQVZFX01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUiA9IEBIQVZFX01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUkAKK0hBVkVfTkFOT1NMRUVQID0gQEhBVkVfTkFOT1NMRUVQQAorSEFWRV9PUEVOQVQgPSBASEFWRV9PUEVOQVRACitIQVZFX09TX0ggPSBASEFWRV9PU19IQAorSEFWRV9QQ0xPU0UgPSBASEFWRV9QQ0xPU0VACitIQVZFX1BJUEUgPSBASEFWRV9QSVBFQAorSEFWRV9QSVBFMiA9IEBIQVZFX1BJUEUyQAorSEFWRV9QT1BFTiA9IEBIQVZFX1BPUEVOQAorSEFWRV9QT1NJWF9PUEVOUFQgPSBASEFWRV9QT1NJWF9PUEVOUFRACitIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HID0gQEhBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkdACitIQVZFX1BPU0lYX1NQQVdOID0gQEhBVkVfUE9TSVhfU1BBV05ACitIQVZFX1BPU0lYX1NQQVdOQVRUUl9UID0gQEhBVkVfUE9TSVhfU1BBV05BVFRSX1RACitIQVZFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19UID0gQEhBVkVfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX1RACitIQVZFX1BPV0YgPSBASEFWRV9QT1dGQAorSEFWRV9QUkVBRCA9IEBIQVZFX1BSRUFEQAorSEFWRV9QVEhSRUFEX1NJR01BU0sgPSBASEFWRV9QVEhSRUFEX1NJR01BU0tACitIQVZFX1BUU05BTUUgPSBASEFWRV9QVFNOQU1FQAorSEFWRV9QVFNOQU1FX1IgPSBASEFWRV9QVFNOQU1FX1JACitIQVZFX1BXUklURSA9IEBIQVZFX1BXUklURUAKK0hBVkVfUkFJU0UgPSBASEFWRV9SQUlTRUAKK0hBVkVfUkFORE9NID0gQEhBVkVfUkFORE9NQAorSEFWRV9SQU5ET01fSCA9IEBIQVZFX1JBTkRPTV9IQAorSEFWRV9SQU5ET01fUiA9IEBIQVZFX1JBTkRPTV9SQAorSEFWRV9SQVdNRU1DSFIgPSBASEFWRV9SQVdNRU1DSFJACitIQVZFX1JFQURMSU5LID0gQEhBVkVfUkVBRExJTktACitIQVZFX1JFQURMSU5LQVQgPSBASEFWRV9SRUFETElOS0FUQAorSEFWRV9SRUFMUEFUSCA9IEBIQVZFX1JFQUxQQVRIQAorSEFWRV9SRU1BSU5ERVIgPSBASEFWRV9SRU1BSU5ERVJACitIQVZFX1JFTUFJTkRFUkYgPSBASEFWRV9SRU1BSU5ERVJGQAorSEFWRV9SRU5BTUVBVCA9IEBIQVZFX1JFTkFNRUFUQAorSEFWRV9SSU5UID0gQEhBVkVfUklOVEAKK0hBVkVfUklOVEwgPSBASEFWRV9SSU5UTEAKK0hBVkVfUlBNQVRDSCA9IEBIQVZFX1JQTUFUQ0hACitIQVZFX1NBTUVfTE9OR19ET1VCTEVfQVNfRE9VQkxFID0gQEhBVkVfU0FNRV9MT05HX0RPVUJMRV9BU19ET1VCTEVACitIQVZFX1NDSEVEX0ggPSBASEFWRV9TQ0hFRF9IQAorSEFWRV9TRVRFTlYgPSBASEFWRV9TRVRFTlZACitIQVZFX1NFVEhPU1ROQU1FID0gQEhBVkVfU0VUSE9TVE5BTUVACitIQVZFX1NJR0FDVElPTiA9IEBIQVZFX1NJR0FDVElPTkAKK0hBVkVfU0lHSEFORExFUl9UID0gQEhBVkVfU0lHSEFORExFUl9UQAorSEFWRV9TSUdJTkZPX1QgPSBASEFWRV9TSUdJTkZPX1RACitIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1QgPSBASEFWRV9TSUdORURfU0lHX0FUT01JQ19UQAorSEFWRV9TSUdORURfV0NIQVJfVCA9IEBIQVZFX1NJR05FRF9XQ0hBUl9UQAorSEFWRV9TSUdORURfV0lOVF9UID0gQEhBVkVfU0lHTkVEX1dJTlRfVEAKK0hBVkVfU0lHU0VUX1QgPSBASEFWRV9TSUdTRVRfVEAKK0hBVkVfU0lORiA9IEBIQVZFX1NJTkZACitIQVZFX1NJTkhGID0gQEhBVkVfU0lOSEZACitIQVZFX1NJTkwgPSBASEFWRV9TSU5MQAorSEFWRV9TTEVFUCA9IEBIQVZFX1NMRUVQQAorSEFWRV9TUEFXTl9IID0gQEhBVkVfU1BBV05fSEAKK0hBVkVfU1FSVEYgPSBASEFWRV9TUVJURkAKK0hBVkVfU1FSVEwgPSBASEFWRV9TUVJUTEAKK0hBVkVfU1RESU5UX0ggPSBASEFWRV9TVERJTlRfSEAKK0hBVkVfU1RQQ1BZID0gQEhBVkVfU1RQQ1BZQAorSEFWRV9TVFBOQ1BZID0gQEhBVkVfU1RQTkNQWUAKK0hBVkVfU1RSQ0FTRVNUUiA9IEBIQVZFX1NUUkNBU0VTVFJACitIQVZFX1NUUkNIUk5VTCA9IEBIQVZFX1NUUkNIUk5VTEAKK0hBVkVfU1RSUEJSSyA9IEBIQVZFX1NUUlBCUktACitIQVZFX1NUUlBUSU1FID0gQEhBVkVfU1RSUFRJTUVACitIQVZFX1NUUlNFUCA9IEBIQVZFX1NUUlNFUEAKK0hBVkVfU1RSVE9EID0gQEhBVkVfU1RSVE9EQAorSEFWRV9TVFJUT0xMID0gQEhBVkVfU1RSVE9MTEAKK0hBVkVfU1RSVE9VTEwgPSBASEFWRV9TVFJUT1VMTEAKK0hBVkVfU1RSVUNUX1JBTkRPTV9EQVRBID0gQEhBVkVfU1RSVUNUX1JBTkRPTV9EQVRBQAorSEFWRV9TVFJVQ1RfU0NIRURfUEFSQU0gPSBASEFWRV9TVFJVQ1RfU0NIRURfUEFSQU1ACitIQVZFX1NUUlVDVF9TSUdBQ1RJT05fU0FfU0lHQUNUSU9OID0gQEhBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT05ACitIQVZFX1NUUlZFUlNDTVAgPSBASEFWRV9TVFJWRVJTQ01QQAorSEFWRV9TWU1MSU5LID0gQEhBVkVfU1lNTElOS0AKK0hBVkVfU1lNTElOS0FUID0gQEhBVkVfU1lNTElOS0FUQAorSEFWRV9TWVNfQklUWVBFU19IID0gQEhBVkVfU1lTX0JJVFlQRVNfSEAKK0hBVkVfU1lTX0lOVFRZUEVTX0ggPSBASEFWRV9TWVNfSU5UVFlQRVNfSEAKK0hBVkVfU1lTX0xPQURBVkdfSCA9IEBIQVZFX1NZU19MT0FEQVZHX0hACitIQVZFX1NZU19QQVJBTV9IID0gQEhBVkVfU1lTX1BBUkFNX0hACitIQVZFX1NZU19UWVBFU19IID0gQEhBVkVfU1lTX1RZUEVTX0hACitIQVZFX1RBTkYgPSBASEFWRV9UQU5GQAorSEFWRV9UQU5IRiA9IEBIQVZFX1RBTkhGQAorSEFWRV9UQU5MID0gQEhBVkVfVEFOTEAKK0hBVkVfVElNRUdNID0gQEhBVkVfVElNRUdNQAorSEFWRV9UWVBFX1ZPTEFUSUxFX1NJR19BVE9NSUNfVCA9IEBIQVZFX1RZUEVfVk9MQVRJTEVfU0lHX0FUT01JQ19UQAorSEFWRV9VTklTVERfSCA9IEBIQVZFX1VOSVNURF9IQAorSEFWRV9VTkxJTktBVCA9IEBIQVZFX1VOTElOS0FUQAorSEFWRV9VTkxPQ0tQVCA9IEBIQVZFX1VOTE9DS1BUQAorSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UID0gQEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVEAKK0hBVkVfVVNMRUVQID0gQEhBVkVfVVNMRUVQQAorSEFWRV9VVElNRU5TQVQgPSBASEFWRV9VVElNRU5TQVRACitIQVZFX1ZBU1BSSU5URiA9IEBIQVZFX1ZBU1BSSU5URkAKK0hBVkVfVkRQUklOVEYgPSBASEFWRV9WRFBSSU5URkAKK0hBVkVfV0NIQVJfSCA9IEBIQVZFX1dDSEFSX0hACitIQVZFX1dDSEFSX1QgPSBASEFWRV9XQ0hBUl9UQAorSEFWRV9XQ1BDUFkgPSBASEFWRV9XQ1BDUFlACitIQVZFX1dDUE5DUFkgPSBASEFWRV9XQ1BOQ1BZQAorSEFWRV9XQ1JUT01CID0gQEhBVkVfV0NSVE9NQkAKK0hBVkVfV0NTQ0FTRUNNUCA9IEBIQVZFX1dDU0NBU0VDTVBACitIQVZFX1dDU0NBVCA9IEBIQVZFX1dDU0NBVEAKK0hBVkVfV0NTQ0hSID0gQEhBVkVfV0NTQ0hSQAorSEFWRV9XQ1NDTVAgPSBASEFWRV9XQ1NDTVBACitIQVZFX1dDU0NPTEwgPSBASEFWRV9XQ1NDT0xMQAorSEFWRV9XQ1NDUFkgPSBASEFWRV9XQ1NDUFlACitIQVZFX1dDU0NTUE4gPSBASEFWRV9XQ1NDU1BOQAorSEFWRV9XQ1NEVVAgPSBASEFWRV9XQ1NEVVBACitIQVZFX1dDU0xFTiA9IEBIQVZFX1dDU0xFTkAKK0hBVkVfV0NTTkNBU0VDTVAgPSBASEFWRV9XQ1NOQ0FTRUNNUEAKK0hBVkVfV0NTTkNBVCA9IEBIQVZFX1dDU05DQVRACitIQVZFX1dDU05DTVAgPSBASEFWRV9XQ1NOQ01QQAorSEFWRV9XQ1NOQ1BZID0gQEhBVkVfV0NTTkNQWUAKK0hBVkVfV0NTTkxFTiA9IEBIQVZFX1dDU05MRU5ACitIQVZFX1dDU05SVE9NQlMgPSBASEFWRV9XQ1NOUlRPTUJTQAorSEFWRV9XQ1NQQlJLID0gQEhBVkVfV0NTUEJSS0AKK0hBVkVfV0NTUkNIUiA9IEBIQVZFX1dDU1JDSFJACitIQVZFX1dDU1JUT01CUyA9IEBIQVZFX1dDU1JUT01CU0AKK0hBVkVfV0NTU1BOID0gQEhBVkVfV0NTU1BOQAorSEFWRV9XQ1NTVFIgPSBASEFWRV9XQ1NTVFJACitIQVZFX1dDU1RPSyA9IEBIQVZFX1dDU1RPS0AKK0hBVkVfV0NTV0lEVEggPSBASEFWRV9XQ1NXSURUSEAKK0hBVkVfV0NTWEZSTSA9IEBIQVZFX1dDU1hGUk1ACitIQVZFX1dDVFJBTlNfVCA9IEBIQVZFX1dDVFJBTlNfVEAKK0hBVkVfV0NUWVBFX0ggPSBASEFWRV9XQ1RZUEVfSEAKK0hBVkVfV0NUWVBFX1QgPSBASEFWRV9XQ1RZUEVfVEAKK0hBVkVfV0lOU09DSzJfSCA9IEBIQVZFX1dJTlNPQ0syX0hACitIQVZFX1dJTlRfVCA9IEBIQVZFX1dJTlRfVEAKK0hBVkVfV01FTUNIUiA9IEBIQVZFX1dNRU1DSFJACitIQVZFX1dNRU1DTVAgPSBASEFWRV9XTUVNQ01QQAorSEFWRV9XTUVNQ1BZID0gQEhBVkVfV01FTUNQWUAKK0hBVkVfV01FTU1PVkUgPSBASEFWRV9XTUVNTU9WRUAKK0hBVkVfV01FTVNFVCA9IEBIQVZFX1dNRU1TRVRACiBIQVZFX19CT09MID0gQEhBVkVfX0JPT0xACitIQVZFX19FWElUID0gQEhBVkVfX0VYSVRACitIRUxQMk1BTiA9IEBIRUxQMk1BTkAKK0lOQ0xVREVfTkVYVCA9IEBJTkNMVURFX05FWFRACitJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFID0gQElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVACitJTlNUQUxMID0gQElOU1RBTExACiBJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAogSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKIElOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAogSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVDMyX01BWF9MVF9JTlRNQVhfTUFYID0gQElOVDMyX01BWF9MVF9JTlRNQVhfTUFYQAorSU5UNjRfTUFYX0VRX0xPTkdfTUFYID0gQElOVDY0X01BWF9FUV9MT05HX01BWEAKIElOVExMSUJTID0gQElOVExMSUJTQAogSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSVNOQU5EX0xJQk0gPSBASVNOQU5EX0xJQk1ACitJU05BTkZfTElCTSA9IEBJU05BTkZfTElCTUAKK0lTTkFOTF9MSUJNID0gQElTTkFOTF9MSUJNQAorSVNOQU5fTElCTSA9IEBJU05BTl9MSUJNQAorTERFWFBMX0xJQk0gPSBATERFWFBMX0xJQk1ACitMREVYUF9MSUJNID0gQExERVhQX0xJQk1ACiBMREZMQUdTID0gQExERkxBR1NACiBMRVggPSBATEVYQAogTEVYTElCID0gQExFWExJQkAKK0xFWF9JU19GTEVYID0gQExFWF9JU19GTEVYQAogTEVYX09VVFBVVF9ST09UID0gQExFWF9PVVRQVVRfUk9PVEAKK0xJQkJJU09OX0xJQkRFUFMgPSBATElCQklTT05fTElCREVQU0AKK0xJQkJJU09OX0xUTElCREVQUyA9IEBMSUJCSVNPTl9MVExJQkRFUFNACiBMSUJJQ09OViA9IEBMSUJJQ09OVkAKIExJQklOVEwgPSBATElCSU5UTEAKK0xJQk1VTFRJVEhSRUFEID0gQExJQk1VTFRJVEhSRUFEQAogTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUFRIID0gQExJQlBUSEAKK0xJQlBUSF9QUkVGSVggPSBATElCUFRIX1BSRUZJWEAKIExJQlMgPSBATElCU0AKK0xJQlRIUkVBRCA9IEBMSUJUSFJFQURACitMSUJVTklTVFJJTkdfVU5JVFlQRVNfSCA9IEBMSUJVTklTVFJJTkdfVU5JVFlQRVNfSEAKK0xJQlVOSVNUUklOR19VTklXSURUSF9IID0gQExJQlVOSVNUUklOR19VTklXSURUSF9IQAorTE9DQUxDSEFSU0VUX1RFU1RTX0VOVklST05NRU5UID0gQExPQ0FMQ0hBUlNFVF9URVNUU19FTlZJUk9OTUVOVEAKK0xPQ0FMRV9GUl9VVEY4ID0gQExPQ0FMRV9GUl9VVEY4QAorTE9DQUxFX0pBID0gQExPQ0FMRV9KQUAKK0xPQ0FMRV9aSF9DTiA9IEBMT0NBTEVfWkhfQ05ACiBMVExJQklDT05WID0gQExUTElCSUNPTlZACiBMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJNVUxUSVRIUkVBRCA9IEBMVExJQk1VTFRJVEhSRUFEQAogTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xUTElCUFRIID0gQExUTElCUFRIQAorTFRMSUJUSFJFQUQgPSBATFRMSUJUSFJFQURACiBNNCA9IEBNNEAKK000X0RFQlVHRklMRSA9IEBNNF9ERUJVR0ZJTEVACitNNF9HTlUgPSBATTRfR05VQAogTUFLRUlORk8gPSBATUFLRUlORk9ACi1NS0lOU1RBTExESVJTID0gQE1LSU5TVEFMTERJUlNACitNS0RJUl9QID0gQE1LRElSX1BACiBNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAogTVNHTUVSR0UgPSBATVNHTUVSR0VACi1PMENGTEFHUyA9IEBPMENGTEFHU0AKLU8wQ1hYRkxBR1MgPSBATzBDWFhGTEFHU0AKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0VSUk5PX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRVJSTk9fSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0ZDTlRMX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRkNOVExfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0ZMT0FUX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRkxPQVRfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX0dFVE9QVF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX0dFVE9QVF9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfSU5UVFlQRVNfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9JTlRUWVBFU19IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfTUFUSF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX01BVEhfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NDSEVEX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU0NIRURfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NJR05BTF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NJR05BTF9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1BBV05fSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TUEFXTl9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1REREVGX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1REREVGX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERJTlRfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERJTlRfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURElPX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RESU9fSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURExJQl9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURExJQl9IQAorTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RSSU5HX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RSSU5HX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfU1RBVF9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19TVEFUX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfVFlQRVNfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfVFlQRVNfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19XQUlUX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1lTX1dBSVRfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1RJTUVfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9USU1FX0hACitORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9VTklTVERfSCA9IEBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9VTklTVERfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDSEFSX0ggPSBATkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfV0NIQVJfSEAKK05FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDVFlQRV9IID0gQE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1dDVFlQRV9IQAorTkVYVF9FUlJOT19IID0gQE5FWFRfRVJSTk9fSEAKK05FWFRfRkNOVExfSCA9IEBORVhUX0ZDTlRMX0hACitORVhUX0ZMT0FUX0ggPSBATkVYVF9GTE9BVF9IQAorTkVYVF9HRVRPUFRfSCA9IEBORVhUX0dFVE9QVF9IQAorTkVYVF9JTlRUWVBFU19IID0gQE5FWFRfSU5UVFlQRVNfSEAKK05FWFRfTUFUSF9IID0gQE5FWFRfTUFUSF9IQAorTkVYVF9TQ0hFRF9IID0gQE5FWFRfU0NIRURfSEAKK05FWFRfU0lHTkFMX0ggPSBATkVYVF9TSUdOQUxfSEAKK05FWFRfU1BBV05fSCA9IEBORVhUX1NQQVdOX0hACitORVhUX1NURERFRl9IID0gQE5FWFRfU1REREVGX0hACitORVhUX1NURElOVF9IID0gQE5FWFRfU1RESU5UX0hACitORVhUX1NURElPX0ggPSBATkVYVF9TVERJT19IQAorTkVYVF9TVERMSUJfSCA9IEBORVhUX1NURExJQl9IQAorTkVYVF9TVFJJTkdfSCA9IEBORVhUX1NUUklOR19IQAorTkVYVF9TWVNfU1RBVF9IID0gQE5FWFRfU1lTX1NUQVRfSEAKK05FWFRfU1lTX1RZUEVTX0ggPSBATkVYVF9TWVNfVFlQRVNfSEAKK05FWFRfU1lTX1dBSVRfSCA9IEBORVhUX1NZU19XQUlUX0hACitORVhUX1RJTUVfSCA9IEBORVhUX1RJTUVfSEAKK05FWFRfVU5JU1REX0ggPSBATkVYVF9VTklTVERfSEAKK05FWFRfV0NIQVJfSCA9IEBORVhUX1dDSEFSX0hACitORVhUX1dDVFlQRV9IID0gQE5FWFRfV0NUWVBFX0hACiBPQkpFWFQgPSBAT0JKRVhUQAogUEFDS0FHRSA9IEBQQUNLQUdFQAogUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX0NPUFlSSUdIVF9ZRUFSID0gQFBBQ0tBR0VfQ09QWVJJR0hUX1lFQVJACiBQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAogUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACiBQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACiBQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAogUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMID0gQFBFUkxACiBQT1NVQiA9IEBQT1NVQkAKK1BSQUdNQV9DT0xVTU5TID0gQFBSQUdNQV9DT0xVTU5TQAorUFJBR01BX1NZU1RFTV9IRUFERVIgPSBAUFJBR01BX1NZU1RFTV9IRUFERVJACitQUklQVFJfUFJFRklYID0gQFBSSVBUUl9QUkVGSVhACitQUklfTUFDUk9TX0JST0tFTiA9IEBQUklfTUFDUk9TX0JST0tFTkAKK1BUSFJFQURfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQyA9IEBQVEhSRUFEX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUNACitQVFJESUZGX1RfU1VGRklYID0gQFBUUkRJRkZfVF9TVUZGSVhACiBSQU5MSUIgPSBAUkFOTElCQAorUkVQTEFDRV9CVE9XQyA9IEBSRVBMQUNFX0JUT1dDQAorUkVQTEFDRV9DQUxMT0MgPSBAUkVQTEFDRV9DQUxMT0NACitSRVBMQUNFX0NBTk9OSUNBTElaRV9GSUxFX05BTUUgPSBAUkVQTEFDRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FQAorUkVQTEFDRV9DQlJURiA9IEBSRVBMQUNFX0NCUlRGQAorUkVQTEFDRV9DQlJUTCA9IEBSRVBMQUNFX0NCUlRMQAorUkVQTEFDRV9DRUlMID0gQFJFUExBQ0VfQ0VJTEAKK1JFUExBQ0VfQ0VJTEYgPSBAUkVQTEFDRV9DRUlMRkAKK1JFUExBQ0VfQ0VJTEwgPSBAUkVQTEFDRV9DRUlMTEAKK1JFUExBQ0VfQ0hPV04gPSBAUkVQTEFDRV9DSE9XTkAKK1JFUExBQ0VfQ0xPU0UgPSBAUkVQTEFDRV9DTE9TRUAKK1JFUExBQ0VfRFBSSU5URiA9IEBSRVBMQUNFX0RQUklOVEZACitSRVBMQUNFX0RVUCA9IEBSRVBMQUNFX0RVUEAKK1JFUExBQ0VfRFVQMiA9IEBSRVBMQUNFX0RVUDJACitSRVBMQUNFX0VYUDIgPSBAUkVQTEFDRV9FWFAyQAorUkVQTEFDRV9FWFAyTCA9IEBSRVBMQUNFX0VYUDJMQAorUkVQTEFDRV9FWFBNMSA9IEBSRVBMQUNFX0VYUE0xQAorUkVQTEFDRV9FWFBNMUYgPSBAUkVQTEFDRV9FWFBNMUZACitSRVBMQUNFX0ZBQlNMID0gQFJFUExBQ0VfRkFCU0xACitSRVBMQUNFX0ZDSE9XTkFUID0gQFJFUExBQ0VfRkNIT1dOQVRACitSRVBMQUNFX0ZDTE9TRSA9IEBSRVBMQUNFX0ZDTE9TRUAKK1JFUExBQ0VfRkNOVEwgPSBAUkVQTEFDRV9GQ05UTEAKK1JFUExBQ0VfRkRPUEVOID0gQFJFUExBQ0VfRkRPUEVOQAorUkVQTEFDRV9GRkxVU0ggPSBAUkVQTEFDRV9GRkxVU0hACitSRVBMQUNFX0ZMT09SID0gQFJFUExBQ0VfRkxPT1JACitSRVBMQUNFX0ZMT09SRiA9IEBSRVBMQUNFX0ZMT09SRkAKK1JFUExBQ0VfRkxPT1JMID0gQFJFUExBQ0VfRkxPT1JMQAorUkVQTEFDRV9GTUEgPSBAUkVQTEFDRV9GTUFACitSRVBMQUNFX0ZNQUYgPSBAUkVQTEFDRV9GTUFGQAorUkVQTEFDRV9GTUFMID0gQFJFUExBQ0VfRk1BTEAKK1JFUExBQ0VfRk1PRCA9IEBSRVBMQUNFX0ZNT0RACitSRVBMQUNFX0ZNT0RGID0gQFJFUExBQ0VfRk1PREZACitSRVBMQUNFX0ZNT0RMID0gQFJFUExBQ0VfRk1PRExACitSRVBMQUNFX0ZPUEVOID0gQFJFUExBQ0VfRk9QRU5ACitSRVBMQUNFX0ZQUklOVEYgPSBAUkVQTEFDRV9GUFJJTlRGQAorUkVQTEFDRV9GUFVSR0UgPSBAUkVQTEFDRV9GUFVSR0VACitSRVBMQUNFX0ZSRU9QRU4gPSBAUkVQTEFDRV9GUkVPUEVOQAorUkVQTEFDRV9GUkVYUCA9IEBSRVBMQUNFX0ZSRVhQQAorUkVQTEFDRV9GUkVYUEYgPSBAUkVQTEFDRV9GUkVYUEZACitSRVBMQUNFX0ZSRVhQTCA9IEBSRVBMQUNFX0ZSRVhQTEAKK1JFUExBQ0VfRlNFRUsgPSBAUkVQTEFDRV9GU0VFS0AKK1JFUExBQ0VfRlNFRUtPID0gQFJFUExBQ0VfRlNFRUtPQAorUkVQTEFDRV9GU1RBVCA9IEBSRVBMQUNFX0ZTVEFUQAorUkVQTEFDRV9GU1RBVEFUID0gQFJFUExBQ0VfRlNUQVRBVEAKK1JFUExBQ0VfRlRFTEwgPSBAUkVQTEFDRV9GVEVMTEAKK1JFUExBQ0VfRlRFTExPID0gQFJFUExBQ0VfRlRFTExPQAorUkVQTEFDRV9GVFJVTkNBVEUgPSBAUkVQTEFDRV9GVFJVTkNBVEVACitSRVBMQUNFX0ZVVElNRU5TID0gQFJFUExBQ0VfRlVUSU1FTlNACitSRVBMQUNFX0dFVENXRCA9IEBSRVBMQUNFX0dFVENXREAKK1JFUExBQ0VfR0VUREVMSU0gPSBAUkVQTEFDRV9HRVRERUxJTUAKK1JFUExBQ0VfR0VURE9NQUlOTkFNRSA9IEBSRVBMQUNFX0dFVERPTUFJTk5BTUVACitSRVBMQUNFX0dFVEdST1VQUyA9IEBSRVBMQUNFX0dFVEdST1VQU0AKK1JFUExBQ0VfR0VUTElORSA9IEBSRVBMQUNFX0dFVExJTkVACitSRVBMQUNFX0dFVExPR0lOX1IgPSBAUkVQTEFDRV9HRVRMT0dJTl9SQAorUkVQTEFDRV9HRVRQQUdFU0laRSA9IEBSRVBMQUNFX0dFVFBBR0VTSVpFQAorUkVQTEFDRV9IVUdFX1ZBTCA9IEBSRVBMQUNFX0hVR0VfVkFMQAorUkVQTEFDRV9IWVBPVCA9IEBSRVBMQUNFX0hZUE9UQAorUkVQTEFDRV9IWVBPVEYgPSBAUkVQTEFDRV9IWVBPVEZACitSRVBMQUNFX0hZUE9UTCA9IEBSRVBMQUNFX0hZUE9UTEAKK1JFUExBQ0VfSUxPR0IgPSBAUkVQTEFDRV9JTE9HQkAKK1JFUExBQ0VfSUxPR0JGID0gQFJFUExBQ0VfSUxPR0JGQAorUkVQTEFDRV9JU0FUVFkgPSBAUkVQTEFDRV9JU0FUVFlACitSRVBMQUNFX0lTRklOSVRFID0gQFJFUExBQ0VfSVNGSU5JVEVACitSRVBMQUNFX0lTSU5GID0gQFJFUExBQ0VfSVNJTkZACitSRVBMQUNFX0lTTkFOID0gQFJFUExBQ0VfSVNOQU5ACitSRVBMQUNFX0lTV0JMQU5LID0gQFJFUExBQ0VfSVNXQkxBTktACitSRVBMQUNFX0lTV0NOVFJMID0gQFJFUExBQ0VfSVNXQ05UUkxACitSRVBMQUNFX0lUT0xEID0gQFJFUExBQ0VfSVRPTERACitSRVBMQUNFX0xDSE9XTiA9IEBSRVBMQUNFX0xDSE9XTkAKK1JFUExBQ0VfTERFWFBMID0gQFJFUExBQ0VfTERFWFBMQAorUkVQTEFDRV9MSU5LID0gQFJFUExBQ0VfTElOS0AKK1JFUExBQ0VfTElOS0FUID0gQFJFUExBQ0VfTElOS0FUQAorUkVQTEFDRV9MT0NBTFRJTUVfUiA9IEBSRVBMQUNFX0xPQ0FMVElNRV9SQAorUkVQTEFDRV9MT0cgPSBAUkVQTEFDRV9MT0dACitSRVBMQUNFX0xPRzEwID0gQFJFUExBQ0VfTE9HMTBACitSRVBMQUNFX0xPRzEwRiA9IEBSRVBMQUNFX0xPRzEwRkAKK1JFUExBQ0VfTE9HMTBMID0gQFJFUExBQ0VfTE9HMTBMQAorUkVQTEFDRV9MT0cxUCA9IEBSRVBMQUNFX0xPRzFQQAorUkVQTEFDRV9MT0cxUEYgPSBAUkVQTEFDRV9MT0cxUEZACitSRVBMQUNFX0xPRzFQTCA9IEBSRVBMQUNFX0xPRzFQTEAKK1JFUExBQ0VfTE9HMiA9IEBSRVBMQUNFX0xPRzJACitSRVBMQUNFX0xPRzJGID0gQFJFUExBQ0VfTE9HMkZACitSRVBMQUNFX0xPRzJMID0gQFJFUExBQ0VfTE9HMkxACitSRVBMQUNFX0xPR0IgPSBAUkVQTEFDRV9MT0dCQAorUkVQTEFDRV9MT0dCRiA9IEBSRVBMQUNFX0xPR0JGQAorUkVQTEFDRV9MT0dCTCA9IEBSRVBMQUNFX0xPR0JMQAorUkVQTEFDRV9MT0dGID0gQFJFUExBQ0VfTE9HRkAKK1JFUExBQ0VfTE9HTCA9IEBSRVBMQUNFX0xPR0xACitSRVBMQUNFX0xTRUVLID0gQFJFUExBQ0VfTFNFRUtACitSRVBMQUNFX0xTVEFUID0gQFJFUExBQ0VfTFNUQVRACitSRVBMQUNFX01BTExPQyA9IEBSRVBMQUNFX01BTExPQ0AKK1JFUExBQ0VfTUJSTEVOID0gQFJFUExBQ0VfTUJSTEVOQAorUkVQTEFDRV9NQlJUT1dDID0gQFJFUExBQ0VfTUJSVE9XQ0AKK1JFUExBQ0VfTUJTSU5JVCA9IEBSRVBMQUNFX01CU0lOSVRACitSRVBMQUNFX01CU05SVE9XQ1MgPSBAUkVQTEFDRV9NQlNOUlRPV0NTQAorUkVQTEFDRV9NQlNSVE9XQ1MgPSBAUkVQTEFDRV9NQlNSVE9XQ1NACitSRVBMQUNFX01CU1RBVEVfVCA9IEBSRVBMQUNFX01CU1RBVEVfVEAKK1JFUExBQ0VfTUJUT1dDID0gQFJFUExBQ0VfTUJUT1dDQAorUkVQTEFDRV9NRU1DSFIgPSBAUkVQTEFDRV9NRU1DSFJACitSRVBMQUNFX01FTU1FTSA9IEBSRVBMQUNFX01FTU1FTUAKK1JFUExBQ0VfTUtESVIgPSBAUkVQTEFDRV9NS0RJUkAKK1JFUExBQ0VfTUtGSUZPID0gQFJFUExBQ0VfTUtGSUZPQAorUkVQTEFDRV9NS05PRCA9IEBSRVBMQUNFX01LTk9EQAorUkVQTEFDRV9NS1NURU1QID0gQFJFUExBQ0VfTUtTVEVNUEAKK1JFUExBQ0VfTUtUSU1FID0gQFJFUExBQ0VfTUtUSU1FQAorUkVQTEFDRV9NT0RGID0gQFJFUExBQ0VfTU9ERkAKK1JFUExBQ0VfTU9ERkYgPSBAUkVQTEFDRV9NT0RGRkAKK1JFUExBQ0VfTU9ERkwgPSBAUkVQTEFDRV9NT0RGTEAKK1JFUExBQ0VfTkFOID0gQFJFUExBQ0VfTkFOQAorUkVQTEFDRV9OQU5PU0xFRVAgPSBAUkVQTEFDRV9OQU5PU0xFRVBACitSRVBMQUNFX05VTEwgPSBAUkVQTEFDRV9OVUxMQAorUkVQTEFDRV9PQlNUQUNLX1BSSU5URiA9IEBSRVBMQUNFX09CU1RBQ0tfUFJJTlRGQAorUkVQTEFDRV9PUEVOID0gQFJFUExBQ0VfT1BFTkAKK1JFUExBQ0VfT1BFTkFUID0gQFJFUExBQ0VfT1BFTkFUQAorUkVQTEFDRV9QRVJST1IgPSBAUkVQTEFDRV9QRVJST1JACitSRVBMQUNFX1BPUEVOID0gQFJFUExBQ0VfUE9QRU5ACitSRVBMQUNFX1BPU0lYX1NQQVdOID0gQFJFUExBQ0VfUE9TSVhfU1BBV05ACitSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRSA9IEBSRVBMQUNFX1BPU0lYX1NQQVdOX0ZJTEVfQUNUSU9OU19BRERDTE9TRUAKK1JFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERERVUDIgPSBAUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURERFVQMkAKK1JFUExBQ0VfUE9TSVhfU1BBV05fRklMRV9BQ1RJT05TX0FERE9QRU4gPSBAUkVQTEFDRV9QT1NJWF9TUEFXTl9GSUxFX0FDVElPTlNfQURET1BFTkAKK1JFUExBQ0VfUFJFQUQgPSBAUkVQTEFDRV9QUkVBREAKK1JFUExBQ0VfUFJJTlRGID0gQFJFUExBQ0VfUFJJTlRGQAorUkVQTEFDRV9QVEhSRUFEX1NJR01BU0sgPSBAUkVQTEFDRV9QVEhSRUFEX1NJR01BU0tACitSRVBMQUNFX1BUU05BTUUgPSBAUkVQTEFDRV9QVFNOQU1FQAorUkVQTEFDRV9QVFNOQU1FX1IgPSBAUkVQTEFDRV9QVFNOQU1FX1JACitSRVBMQUNFX1BVVEVOViA9IEBSRVBMQUNFX1BVVEVOVkAKK1JFUExBQ0VfUFdSSVRFID0gQFJFUExBQ0VfUFdSSVRFQAorUkVQTEFDRV9SQUlTRSA9IEBSRVBMQUNFX1JBSVNFQAorUkVQTEFDRV9SQU5ET01fUiA9IEBSRVBMQUNFX1JBTkRPTV9SQAorUkVQTEFDRV9SRUFEID0gQFJFUExBQ0VfUkVBREAKK1JFUExBQ0VfUkVBRExJTksgPSBAUkVQTEFDRV9SRUFETElOS0AKK1JFUExBQ0VfUkVBTExPQyA9IEBSRVBMQUNFX1JFQUxMT0NACitSRVBMQUNFX1JFQUxQQVRIID0gQFJFUExBQ0VfUkVBTFBBVEhACitSRVBMQUNFX1JFTUFJTkRFUiA9IEBSRVBMQUNFX1JFTUFJTkRFUkAKK1JFUExBQ0VfUkVNQUlOREVSRiA9IEBSRVBMQUNFX1JFTUFJTkRFUkZACitSRVBMQUNFX1JFTUFJTkRFUkwgPSBAUkVQTEFDRV9SRU1BSU5ERVJMQAorUkVQTEFDRV9SRU1PVkUgPSBAUkVQTEFDRV9SRU1PVkVACitSRVBMQUNFX1JFTkFNRSA9IEBSRVBMQUNFX1JFTkFNRUAKK1JFUExBQ0VfUkVOQU1FQVQgPSBAUkVQTEFDRV9SRU5BTUVBVEAKK1JFUExBQ0VfUk1ESVIgPSBAUkVQTEFDRV9STURJUkAKK1JFUExBQ0VfUk9VTkQgPSBAUkVQTEFDRV9ST1VOREAKK1JFUExBQ0VfUk9VTkRGID0gQFJFUExBQ0VfUk9VTkRGQAorUkVQTEFDRV9ST1VOREwgPSBAUkVQTEFDRV9ST1VORExACitSRVBMQUNFX1NFVEVOViA9IEBSRVBMQUNFX1NFVEVOVkAKK1JFUExBQ0VfU0lHTkJJVCA9IEBSRVBMQUNFX1NJR05CSVRACitSRVBMQUNFX1NJR05CSVRfVVNJTkdfR0NDID0gQFJFUExBQ0VfU0lHTkJJVF9VU0lOR19HQ0NACitSRVBMQUNFX1NMRUVQID0gQFJFUExBQ0VfU0xFRVBACitSRVBMQUNFX1NOUFJJTlRGID0gQFJFUExBQ0VfU05QUklOVEZACitSRVBMQUNFX1NQUklOVEYgPSBAUkVQTEFDRV9TUFJJTlRGQAorUkVQTEFDRV9TUVJUTCA9IEBSRVBMQUNFX1NRUlRMQAorUkVQTEFDRV9TVEFUID0gQFJFUExBQ0VfU1RBVEAKK1JFUExBQ0VfU1RESU9fUkVBRF9GVU5DUyA9IEBSRVBMQUNFX1NURElPX1JFQURfRlVOQ1NACitSRVBMQUNFX1NURElPX1dSSVRFX0ZVTkNTID0gQFJFUExBQ0VfU1RESU9fV1JJVEVfRlVOQ1NACitSRVBMQUNFX1NUUE5DUFkgPSBAUkVQTEFDRV9TVFBOQ1BZQAorUkVQTEFDRV9TVFJDQVNFU1RSID0gQFJFUExBQ0VfU1RSQ0FTRVNUUkAKK1JFUExBQ0VfU1RSQ0hSTlVMID0gQFJFUExBQ0VfU1RSQ0hSTlVMQAorUkVQTEFDRV9TVFJEVVAgPSBAUkVQTEFDRV9TVFJEVVBACitSRVBMQUNFX1NUUkVSUk9SID0gQFJFUExBQ0VfU1RSRVJST1JACitSRVBMQUNFX1NUUkVSUk9SX1IgPSBAUkVQTEFDRV9TVFJFUlJPUl9SQAorUkVQTEFDRV9TVFJOQ0FUID0gQFJFUExBQ0VfU1RSTkNBVEAKK1JFUExBQ0VfU1RSTkRVUCA9IEBSRVBMQUNFX1NUUk5EVVBACitSRVBMQUNFX1NUUk5MRU4gPSBAUkVQTEFDRV9TVFJOTEVOQAorUkVQTEFDRV9TVFJTSUdOQUwgPSBAUkVQTEFDRV9TVFJTSUdOQUxACitSRVBMQUNFX1NUUlNUUiA9IEBSRVBMQUNFX1NUUlNUUkAKK1JFUExBQ0VfU1RSVE9EID0gQFJFUExBQ0VfU1RSVE9EQAorUkVQTEFDRV9TVFJUT0lNQVggPSBAUkVQTEFDRV9TVFJUT0lNQVhACitSRVBMQUNFX1NUUlRPS19SID0gQFJFUExBQ0VfU1RSVE9LX1JACitSRVBMQUNFX1NZTUxJTksgPSBAUkVQTEFDRV9TWU1MSU5LQAorUkVQTEFDRV9USU1FR00gPSBAUkVQTEFDRV9USU1FR01ACitSRVBMQUNFX1RNUEZJTEUgPSBAUkVQTEFDRV9UTVBGSUxFQAorUkVQTEFDRV9UT1dMT1dFUiA9IEBSRVBMQUNFX1RPV0xPV0VSQAorUkVQTEFDRV9UUlVOQyA9IEBSRVBMQUNFX1RSVU5DQAorUkVQTEFDRV9UUlVOQ0YgPSBAUkVQTEFDRV9UUlVOQ0ZACitSRVBMQUNFX1RSVU5DTCA9IEBSRVBMQUNFX1RSVU5DTEAKK1JFUExBQ0VfVFRZTkFNRV9SID0gQFJFUExBQ0VfVFRZTkFNRV9SQAorUkVQTEFDRV9VTkxJTksgPSBAUkVQTEFDRV9VTkxJTktACitSRVBMQUNFX1VOTElOS0FUID0gQFJFUExBQ0VfVU5MSU5LQVRACitSRVBMQUNFX1VOU0VURU5WID0gQFJFUExBQ0VfVU5TRVRFTlZACitSRVBMQUNFX1VTTEVFUCA9IEBSRVBMQUNFX1VTTEVFUEAKK1JFUExBQ0VfVVRJTUVOU0FUID0gQFJFUExBQ0VfVVRJTUVOU0FUQAorUkVQTEFDRV9WQVNQUklOVEYgPSBAUkVQTEFDRV9WQVNQUklOVEZACitSRVBMQUNFX1ZEUFJJTlRGID0gQFJFUExBQ0VfVkRQUklOVEZACitSRVBMQUNFX1ZGUFJJTlRGID0gQFJFUExBQ0VfVkZQUklOVEZACitSRVBMQUNFX1ZQUklOVEYgPSBAUkVQTEFDRV9WUFJJTlRGQAorUkVQTEFDRV9WU05QUklOVEYgPSBAUkVQTEFDRV9WU05QUklOVEZACitSRVBMQUNFX1ZTUFJJTlRGID0gQFJFUExBQ0VfVlNQUklOVEZACitSRVBMQUNFX1dDUlRPTUIgPSBAUkVQTEFDRV9XQ1JUT01CQAorUkVQTEFDRV9XQ1NOUlRPTUJTID0gQFJFUExBQ0VfV0NTTlJUT01CU0AKK1JFUExBQ0VfV0NTUlRPTUJTID0gQFJFUExBQ0VfV0NTUlRPTUJTQAorUkVQTEFDRV9XQ1NXSURUSCA9IEBSRVBMQUNFX1dDU1dJRFRIQAorUkVQTEFDRV9XQ1RPQiA9IEBSRVBMQUNFX1dDVE9CQAorUkVQTEFDRV9XQ1RPTUIgPSBAUkVQTEFDRV9XQ1RPTUJACitSRVBMQUNFX1dDV0lEVEggPSBAUkVQTEFDRV9XQ1dJRFRIQAorUkVQTEFDRV9XUklURSA9IEBSRVBMQUNFX1dSSVRFQAorU0NIRURfSCA9IEBTQ0hFRF9IQAogU0VUX01BS0UgPSBAU0VUX01BS0VACiBTSEVMTCA9IEBTSEVMTEAKK1NJR19BVE9NSUNfVF9TVUZGSVggPSBAU0lHX0FUT01JQ19UX1NVRkZJWEAKK1NJWkVfVF9TVUZGSVggPSBAU0laRV9UX1NVRkZJWEAKIFNUREJPT0xfSCA9IEBTVERCT09MX0hACitTVERERUZfSCA9IEBTVERERUZfSEAKK1NURElOVF9IID0gQFNURElOVF9IQAogU1RSSVAgPSBAU1RSSVBACi1VTklTVERfSCA9IEBVTklTVERfSEAKK1NZU19USU1FX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUMgPSBAU1lTX1RJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQ0AKK1RJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQyA9IEBUSU1FX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUNACitVSU5UMzJfTUFYX0xUX1VJTlRNQVhfTUFYID0gQFVJTlQzMl9NQVhfTFRfVUlOVE1BWF9NQVhACitVSU5UNjRfTUFYX0VRX1VMT05HX01BWCA9IEBVSU5UNjRfTUFYX0VRX1VMT05HX01BWEAKK1VOREVGSU5FX1NUUlRPS19SID0gQFVOREVGSU5FX1NUUlRPS19SQAorVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IID0gQFVOSVNURF9IX0hBVkVfV0lOU09DSzJfSEAKK1VOSVNURF9IX0hBVkVfV0lOU09DSzJfSF9BTkRfVVNFX1NPQ0tFVFMgPSBAVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IX0FORF9VU0VfU09DS0VUU0AKIFVTRV9OTFMgPSBAVVNFX05MU0AKIFZBTEdSSU5EID0gQFZBTEdSSU5EQAorVkFMR1JJTkRfUFJFQklTT04gPSBAVkFMR1JJTkRfUFJFQklTT05ACiBWRVJTSU9OID0gQFZFUlNJT05ACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKK1dBUk5fQ0ZMQUdTID0gQFdBUk5fQ0ZMQUdTQAorV0FSTl9DRkxBR1NfVEVTVCA9IEBXQVJOX0NGTEFHU19URVNUQAorV0FSTl9DWFhGTEFHUyA9IEBXQVJOX0NYWEZMQUdTQAorV0FSTl9DWFhGTEFHU19URVNUID0gQFdBUk5fQ1hYRkxBR1NfVEVTVEAKK1dDSEFSX1RfU1VGRklYID0gQFdDSEFSX1RfU1VGRklYQAogV0VSUk9SX0NGTEFHUyA9IEBXRVJST1JfQ0ZMQUdTQAorV0VSUk9SX0NYWEZMQUdTID0gQFdFUlJPUl9DWFhGTEFHU0AKK1dJTkRPV1NfNjRfQklUX09GRl9UID0gQFdJTkRPV1NfNjRfQklUX09GRl9UQAorV0lORE9XU182NF9CSVRfU1RfU0laRSA9IEBXSU5ET1dTXzY0X0JJVF9TVF9TSVpFQAorV0lOVF9UX1NVRkZJWCA9IEBXSU5UX1RfU1VGRklYQAogWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAorWFNMVFBST0MgPSBAWFNMVFBST0NACiBZQUNDID0gQFlBQ0NACiBZQUNDX0xJQlJBUlkgPSBAWUFDQ19MSUJSQVJZQAogWUFDQ19TQ1JJUFQgPSBAWUFDQ19TQ1JJUFRACitZRkxBR1MgPSBAWUZMQUdTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAogYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACiBhY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfUkFOTElCID0gQGFjX2N0X1JBTkxJQkAKLWFjX2N0X1NUUklQID0gQGFjX2N0X1NUUklQQAogYWNsb2NhbGRpciA9IEBhY2xvY2FsZGlyQAotYW1fX2Zhc3RkZXBDQ19GQUxTRSA9IEBhbV9fZmFzdGRlcENDX0ZBTFNFQAotYW1fX2Zhc3RkZXBDQ19UUlVFID0gQGFtX19mYXN0ZGVwQ0NfVFJVRUAKLWFtX19mYXN0ZGVwQ1hYX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAotYW1fX2Zhc3RkZXBDWFhfVFJVRSA9IEBhbV9fZmFzdGRlcENYWF9UUlVFQAogYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACiBhbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAogYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKQEAgLTE3Nyw0MSArMTI5MSw2MSBAQAogYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKIGJ1aWxkX29zID0gQGJ1aWxkX29zQAogYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAogZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKIGV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorZ2xfTElCT0JKUyA9IEBnbF9MSUJPQkpTQAorZ2xfTFRMSUJPQkpTID0gQGdsX0xUTElCT0JKU0AKK2dsdGVzdHNfTElCT0JKUyA9IEBnbHRlc3RzX0xJQk9CSlNACitnbHRlc3RzX0xUTElCT0JKUyA9IEBnbHRlc3RzX0xUTElCT0JKU0AKK2dsdGVzdHNfV0lUTkVTUyA9IEBnbHRlc3RzX1dJVE5FU1NACiBob3N0ID0gQGhvc3RACiBob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACiBob3N0X2NwdSA9IEBob3N0X2NwdUAKIGhvc3Rfb3MgPSBAaG9zdF9vc0AKIGhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAogaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAogaW5mb2RpciA9IEBpbmZvZGlyQAogaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAogbGliZGlyID0gQGxpYmRpckAKIGxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xpc3BkaXIgPSBAbGlzcGRpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACiBsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACiBtYW5kaXIgPSBAbWFuZGlyQAogbWtkaXJfcCA9IEBta2Rpcl9wQAogb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKIHByZWZpeCA9IEBwcmVmaXhACiBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKIHNiaW5kaXIgPSBAc2JpbmRpckAKIHNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKIHN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKIHRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAogRVhUUkFfRElTVCA9ICQoVEVTVFNVSVRFX0FUKSB0ZXN0c3VpdGUgcGFja2FnZS5tNAogRElTVENMRUFORklMRVMgPSBhdGNvbmZpZyAkKGNoZWNrX1NDUklQVFMpCiBNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9IE1ha2VmaWxlLmluICQoVEVTVFNVSVRFKQogVEVTVFNVSVRFX0FUID0gXAogCWxvY2FsLmF0IFwKIAl0ZXN0c3VpdGUuYXQgXAotCWlucHV0LmF0IFwKLQlvdXRwdXQuYXQgc2V0cy5hdCByZWR1Y2UuYXQgXAorCWlucHV0LmF0IG5hbWVkLXJlZnMuYXQgXAorCW91dHB1dC5hdCBza2VsZXRvbnMuYXQgc2V0cy5hdCByZWR1Y2UuYXQgXAogCXN5bmNsaW5lcy5hdCBoZWFkZXJzLmF0IGFjdGlvbnMuYXQgY29uZmxpY3RzLmF0IFwKIAljYWxjLmF0IFwKICAgICAgICAgdG9ydHVyZS5hdCBleGlzdGluZy5hdCByZWdyZXNzaW9uLmF0IFwKICAgICAgICAgYysrLmF0IFwKLQljeHgtdHlwZS5hdCBnbHItcmVncmVzc2lvbi5hdAorICAgICAgICBqYXZhLmF0IFwKKwljeHgtdHlwZS5hdCBnbHItcmVncmVzc2lvbi5hdCBcCisJcHVzaC5hdAogCiBURVNUU1VJVEUgPSAkKHNyY2RpcikvdGVzdHN1aXRlCiBBVVRPVEVTVCA9ICQoQVVUT000VEUpIC0tbGFuZ3VhZ2U9YXV0b3Rlc3QKQEAgLTIyMywxNCArMTM1NywxNCBAQAogCUBmb3IgZGVwIGluICQ/OyBkbyBcCiAJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKIAkgICAgKiQkZGVwKikgXAotCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCi0JCSYmIGV4aXQgMDsgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKIAkgICAgICBleGl0IDE7OyBcCiAJICBlc2FjOyBcCiAJZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251ICB0ZXN0cy9NYWtlZmlsZSc7IFwKLQljZCAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251ICB0ZXN0cy9NYWtlZmlsZQorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ25pdHMgdGVzdHMvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbml0cyB0ZXN0cy9NYWtlZmlsZQogLlBSRUNJT1VTOiBNYWtlZmlsZQogTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwogCUBjYXNlICckPycgaW4gXApAQCAtMjQ4LDQyICsxMzgyLDQ3IEBACiAJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiAkKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQogCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKIGF0bG9jYWw6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9hdGxvY2FsLmluCiAJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKIGJpc29uOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHNyY2RpcikvYmlzb24uaW4KIAljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQAotdW5pbnN0YWxsLWluZm8tYW06CiB0YWdzOiBUQUdTCiBUQUdTOgogCiBjdGFnczogQ1RBR1MKIENUQUdTOgogCitjc2NvcGUgY3Njb3BlbGlzdDoKKwogCiBkaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCi0JICBjYXNlICQkZmlsZSBpbiBcCi0JICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0JICAgICQodG9wX3NyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3wiYDs7IFwKLQkgIGVzYWM7IFwKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAogCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAotCSAgICBkaXI9Ii8kJGRpciI7IFwKLQkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAotCSAgZWxzZSBcCi0JICAgIGRpcj0nJzsgXAotCSAgZmk7IFwKIAkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKIAkgICAgZmk7IFwKLQkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKIAkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCiAJICAgIHx8IGV4aXQgMTsgXAogCSAgZmk7IFwKIAlkb25lCkBAIC0zMDMsMTYgKzE0NDIsMjIgQEAKIAogaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KIGluc3RhbGwtc3RyaXA6Ci0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCi0JICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCisJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAgIGluc3RhbGw7IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorCWZpCiBtb3N0bHljbGVhbi1nZW5lcmljOgogCiBjbGVhbi1nZW5lcmljOgogCiBkaXN0Y2xlYW4tZ2VuZXJpYzoKIAktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKIAktdGVzdCAteiAiJChESVNUQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoRElTVENMRUFORklMRVMpCiAKIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKQEAgLTMzMywxOCArMTQ3OCwzOCBAQAogCiBodG1sOiBodG1sLWFtCiAKK2h0bWwtYW06CisKIGluZm86IGluZm8tYW0KIAogaW5mby1hbToKIAogaW5zdGFsbC1kYXRhLWFtOgogCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKIGluc3RhbGwtZXhlYy1hbToKIAoraW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCiBpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQogCitpbnN0YWxsLWluZm8tYW06CisKIGluc3RhbGwtbWFuOgogCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKwogaW5zdGFsbGNoZWNrLWFtOiBpbnN0YWxsY2hlY2stbG9jYWwKIAogbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQpAQCAtMzYzLDMxICsxNTI4LDM1IEBACiAKIHBzLWFtOgogCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1pbmZvLWFtCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiBjaGVjay1hbSBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKIAogLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNoZWNrLWxvY2FsIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAogCWNsZWFuLWxvY2FsIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0ZGlyIGR2aSBkdmktYW0gXAogCWh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAorCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCisJaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKKwlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAogCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsY2hlY2stbG9jYWwgaW5zdGFsbGRpcnMgXAogCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1nZW5lcmljIHBkZiBwZGYtYW0gcHMgcHMtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLWluZm8tYW0KKwltb3N0bHljbGVhbi1nZW5lcmljIHBkZiBwZGYtYW0gcHMgcHMtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQogCiAKLSQoc3JjZGlyKS9wYWNrYWdlLm00OiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotCXsgXAorJChzcmNkaXIpL3BhY2thZ2UubTQ6ICQodG9wX3NyY2RpcikvY29uZmlndXJlCisJJChBTV9WX0dFTikgeyBcCiAJICBlY2hvICcjIFNpZ25hdHVyZSBvZiB0aGUgY3VycmVudCBwYWNrYWdlLic7IFwKIAkgIGVjaG8gJ200X2RlZmluZShbQVRfUEFDS0FHRV9OQU1FXSwgICAgICBbJChQQUNLQUdFX05BTUUpXSknOyBcCiAJICBlY2hvICdtNF9kZWZpbmUoW0FUX1BBQ0tBR0VfVEFSTkFNRV0sICAgWyQoUEFDS0FHRV9UQVJOQU1FKV0pJzsgXAogCSAgZWNobyAnbTRfZGVmaW5lKFtBVF9QQUNLQUdFX1ZFUlNJT05dLCAgIFskKFBBQ0tBR0VfVkVSU0lPTildKSc7IFwKIAkgIGVjaG8gJ200X2RlZmluZShbQVRfUEFDS0FHRV9TVFJJTkddLCAgICBbJChQQUNLQUdFX1NUUklORyldKSc7IFwKIAkgIGVjaG8gJ200X2RlZmluZShbQVRfUEFDS0FHRV9CVUdSRVBPUlRdLCBbJChQQUNLQUdFX0JVR1JFUE9SVCldKSc7IFwKLQl9ID4kKHNyY2RpcikvcGFja2FnZS5tNAotJChURVNUU1VJVEUpOiBwYWNrYWdlLm00ICQoVEVTVFNVSVRFX0FUKQotCSQoQVVUT1RFU1QpIC1JICQoc3JjZGlyKSB0ZXN0c3VpdGUuYXQgLW8gJEAudG1wCi0JbXYgJEAudG1wICRACisJfSA+JEAudG1wCisJJChBTV9WX2F0KSBtdiAkQC50bXAgJEAKKyQoVEVTVFNVSVRFKTogJChzcmNkaXIpL3BhY2thZ2UubTQgJChURVNUU1VJVEVfQVQpCisJJChBTV9WX0dFTikgJChBVVRPVEVTVCkgLUkgJChzcmNkaXIpIHRlc3RzdWl0ZS5hdCAtbyAkQC50bXAKKwkkKEFNX1ZfYXQpIG12ICRALnRtcCAkQAogCiBhdGNvbmZpZzogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKIAljZCAkKHRvcF9idWlsZGRpcikgJiYgLi9jb25maWcuc3RhdHVzIHRlc3RzLyRACkBAIC0zOTksMjUgKzE1NjgsMzkgQEAKIAkkKFNIRUxMKSAkKFRFU1RTVUlURSkgJChURVNUU1VJVEVGTEFHUykKIAogIyBSdW4gdGhlIHRlc3Qgc3VpdGUgb24gdGhlICppbnN0YWxsZWQqIHRyZWUuCi1pbnN0YWxsY2hlY2stbG9jYWw6Ci0JJChTSEVMTCkgJChURVNUU1VJVEUpIEFVVE9URVNUX1BBVEg9IiQoYmluZGlyKSIgJChURVNUU1VJVEVGTEFHUykKK2luc3RhbGxjaGVjay1sb2NhbDogYXRjb25maWcgYXRsb2NhbCAkKFRFU1RTVUlURSkKKwkkKFRFU1RTVUlURSkgQVVUT1RFU1RfUEFUSD0iJChiaW5kaXIpIiAkKFRFU1RTVUlURUZMQUdTKQogCiAjIEJlIHJlYWwgbWVhbiB3aXRoIGl0LgogLlBIT05ZOiBtYWludGFpbmVyLWNoZWNrLWcrKwotbWFpbnRhaW5lci1jaGVjay1nKys6ICQoVEVTVFNVSVRFKQotCSQoVEVTVFNVSVRFKSBDQz0nJChDWFgpJworbWFpbnRhaW5lci1jaGVjay1nKys6IGF0Y29uZmlnIGF0bG9jYWwgJChURVNUU1VJVEUpCisJJChURVNUU1VJVEUpICQoVEVTVFNVSVRFRkxBR1MpIC0tY29tcGlsZS1jLXdpdGgtY3h4CiAKIC5QSE9OWTogbWFpbnRhaW5lci1jaGVjay1wb3NpeAotbWFpbnRhaW5lci1jaGVjay1wb3NpeDogJChURVNUU1VJVEUpCi0JJChURVNUU1VJVEUpIFBPU0lYTFlfQ09SUkVDVD0xIF9QT1NJWDJfVkVSU0lPTj0yMDAxMTIKK21haW50YWluZXItY2hlY2stcG9zaXg6IGF0Y29uZmlnIGF0bG9jYWwgJChURVNUU1VJVEUpCisJJChURVNUU1VJVEUpICQoVEVTVFNVSVRFRkxBR1MpIFBPU0lYTFlfQ09SUkVDVD0xIF9QT1NJWDJfVkVSU0lPTj0yMDAxMTIKIAogLlBIT05ZOiBtYWludGFpbmVyLWNoZWNrLXZhbGdyaW5kCi1tYWludGFpbmVyLWNoZWNrLXZhbGdyaW5kOiAkKFRFU1RTVUlURSkKLQl0ZXN0IC16ICckKFZBTEdSSU5EKScgfHwgXAotCSAgICQoVEVTVFNVSVRFKSBQUkVCSVNPTj0nJChWQUxHUklORCkgLXEnIFBSRVBBUlNFUj0nJChWQUxHUklORCkgLXEnCittYWludGFpbmVyLWNoZWNrLXZhbGdyaW5kOiBhdGNvbmZpZyBhdGxvY2FsICQoVEVTVFNVSVRFKQorCXRlc3QgLXogJyQoVkFMR1JJTkQpJyB8fAkJCQkJXAorCSAgJChURVNUU1VJVEUpICQoVEVTVFNVSVRFRkxBR1MpCQkJCVwKKwkgIFBSRUJJU09OPSckKFZBTEdSSU5EX1BSRUJJU09OKScgUFJFUEFSU0VSPSckKFZBTEdSSU5EKSAtcScJXAorCSAgVkFMR1JJTkRfT1BUUz0nLS1sZWFrLWNoZWNrPWZ1bGwgLS1zaG93LXJlYWNoYWJsZT15ZXMnCiAKIC5QSE9OWTogbWFpbnRhaW5lci1jaGVjawogbWFpbnRhaW5lci1jaGVjazogbWFpbnRhaW5lci1jaGVjay1wb3NpeCBtYWludGFpbmVyLWNoZWNrLXZhbGdyaW5kIG1haW50YWluZXItY2hlY2stZysrCisKKy5QSE9OWTogbWFpbnRhaW5lci1wdXNoLWNoZWNrCittYWludGFpbmVyLXB1c2gtY2hlY2s6CisJQklTT05fVVNFX1BVU0hfRk9SX1BVTEw9MSAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBtYWludGFpbmVyLWNoZWNrCisKKy5QSE9OWTogbWFpbnRhaW5lci14bWwtY2hlY2sKK21haW50YWluZXIteG1sLWNoZWNrOgorCUJJU09OX1RFU1RfWE1MPTEgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgbWFpbnRhaW5lci1jaGVjaworCisuUEhPTlk6IG1haW50YWluZXItcmVsZWFzZS1jaGVjaworbWFpbnRhaW5lci1yZWxlYXNlLWNoZWNrOiBtYWludGFpbmVyLWNoZWNrIG1haW50YWluZXItcHVzaC1jaGVjayBtYWludGFpbmVyLXhtbC1jaGVjaworCiAjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgogIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCiAuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS90ZXN0cy9hY3Rpb25zLmF0IGIvdGVzdHMvYWN0aW9ucy5hdAppbmRleCA3YTAzZmIwLi45N2MwOGMyIDEwMDY0NAotLS0gYS90ZXN0cy9hY3Rpb25zLmF0CisrKyBiL3Rlc3RzL2FjdGlvbnMuYXQKQEAgLTEsMjAgKzEsMTkgQEAKICMgRXhlY3V0aW5nIEFjdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvdGVzdCAtKi0KLSMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIENvcHlyaWdodCAoQykgMjAwMS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSMgYW55IGxhdGVyIHZlcnNpb24uCi0KKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKICMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQorIwogIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0jIDAyMTEwLTEzMDEsIFVTQS4KKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAKIEFUX0JBTk5FUihbW1VzZXIgQWN0aW9ucy5dXSkKIApAQCAtMjksMTQgKzI4LDEzIEBACiAjIGluc3RlYWQgb2YgYmVpbmcgYXR0YWNoZWQgdG8gdGhlIGVtcHR5IHJ1bGUgZGVkaWNhdGVkIHRvIHRoaXMKICMgYWN0aW9uLgogCitBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMKIEFUX0RBVEFfR1JBTU1BUihbW2lucHV0LnldXSwKIFtbJWVycm9yLXZlcmJvc2UKICVkZWJ1ZwogJXsKLSMgaW5jbHVkZSA8c3RkaW8uaD4KLSMgaW5jbHVkZSA8c3RkbGliLmg+Ci0gIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKGNvbnN0IGNoYXIgKm1zZyk7Ci0gIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOworXUFUX1lZRVJST1JfREVDTEFSRVsKK11BVF9ZWUxFWF9ERUNMQVJFWwogJX0KICUlCiBleHA6ICAgICB7IHB1dGNoYXIgKCcwJyk7IH0KQEAgLTUyLDI3ICs1MCwxNyBAQAogICAgICAgICAgeyBwdXRjaGFyICgnXG4nKTsgfQogICAgOwogJSUKLXN0YXRpYyBpbnQKLXl5bGV4ICh2b2lkKQotewotICBzdGF0aWMgY29uc3QgY2hhciAqaW5wdXQgPSAiMTIzNDU2Nzg5IjsKLSAgcmV0dXJuICppbnB1dCsrOwotfQotCi1zdGF0aWMgdm9pZAoteXllcnJvciAoY29uc3QgY2hhciAqbXNnKQotewotICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKLX0KLQorXUFUX1lZRVJST1JfREVGSU5FWworXUFUX1lZTEVYX0RFRklORShbIjEyMzQ1Njc4OSJdKVsKIGludAogbWFpbiAodm9pZCkKIHsKICAgcmV0dXJuIHl5cGFyc2UgKCk7CiB9CiBdXSkKK0FUX0JJU09OX09QVElPTl9QT1BERUZTCiAKLUFUX0NIRUNLKFtiaXNvbiAtZCAtdiAtbyBpbnB1dC5jIGlucHV0LnldKQorQVRfQklTT05fQ0hFQ0soWy1kIC12IC1vIGlucHV0LmMgaW5wdXQueV0pCiBBVF9DT01QSUxFKFtpbnB1dF0pCiBBVF9QQVJTRVJfQ0hFQ0soWy4vaW5wdXRdLCAwLAogW1swMTIzNDU2Nzg5CkBAIC04MSw2ICs2OSwxODQgQEAKIEFUX0NMRUFOVVAKIAogCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEluaXRpYWwgbG9jYXRpb24uICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQVRfVEVTVChTS0VMRVRPTi1OQU1FLCBESVJFQ1RJVkVTLCBbTU9SRS1ESVJFQ1RJVkVTXSwgW0xPQ0FUSU9OID0gMS4xXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgdGhhdCB0aGUgaW5pdGlhbCBsb2NhdGlvbiBpcyBjb3JyZWN0LgorbTRfcHVzaGRlZihbQVRfVEVTVF0sCitbQVRfU0VUVVAoW0luaXRpYWwgbG9jYXRpb246ICQxICQyXSkKKworQVRfQklTT05fT1BUSU9OX1BVU0hERUZTKFslbG9jYXRpb25zICVza2VsZXRvbiAiJDEiICQyXSkKK0FUX0RBVEFfR1JBTU1BUihbW2lucHV0LnldXSwKK1tbJWRlZmluZXMgLyogRklYTUU6IFJlcXVpcmVkIGJ5IGxhbHIxLmNjIGluIEJpc29uIDIuNi4gKi8KKyVsb2NhdGlvbnMKKyVkZWJ1ZworJXNrZWxldG9uICIkMSIKK10kMlsKK10kM1sKKyVjb2RlCit7CisjIGluY2x1ZGUgPHN0ZGlvLmg+CisjIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBnZXRlbnYgKi8KK11BVF9ZWUVSUk9SX0RFQ0xBUkVbCitdQVRfWVlMRVhfREVDTEFSRVsKK30KKyUlCitleHA6IHsgXUFUX1NLRUxfQ0NfSUYoW1tzdGQ6OmNlcnIgPDwgQCQgPDwgc3RkOjplbmRsXV0sCisgICAgICAgICAgICAgICAgICAgICAgW1tZWV9MT0NBVElPTl9QUklOVChzdGRlcnIsIEAkKTsgZnB1dGMgKCdcbicsIHN0ZGVycildXSlbOyB9CislJQorXUFUX1lZRVJST1JfREVGSU5FWworCitdQVRfWVlMRVhfUFJPVE9UWVBFWwore11BVF9QVVJFX0lGKFsKKyAgWVlVU0UobHZhbHApOworICBZWVVTRShsbG9jcCk7XSwgW0FUX1NLRUxfQ0NfSUYoWworICBZWVVTRShsdmFscCk7CisgIFlZVVNFKGxsb2NwKTtdKV0pWworICByZXR1cm4gJ3gnOworfQorCitpbnQKK21haW4gKHZvaWQpCit7XUFUX1NLRUxfQ0NfSUYoW1sKKyAgeXk6OnBhcnNlciBwOworICBwLnNldF9kZWJ1Z19sZXZlbCAoISFnZXRlbnYoIllZREVCVUciKSk7CisgIHJldHVybiBwLnBhcnNlICgpO11dLCBbWworICB5eWRlYnVnID0gISFnZXRlbnYoIllZREVCVUciKTsKKyAgcmV0dXJuICEheXlwYXJzZSAoXUFUX1BBUkFNX0lGKFswXSlbKTtdXSlbCit9CitdXSkKKworQVRfRlVMTF9DT01QSUxFKFtpbnB1dF0pCitBVF9QQVJTRVJfQ0hFQ0soWy4vaW5wdXRdLCAxLCBbXSwKK1ttNF9kZWZhdWx0KFskNF0sIFsxLjFdKQorbTRfZGVmYXVsdChbJDRdLCBbMS4xXSlbOiBzeW50YXggZXJyb3IKK11dKQorQVRfQklTT05fT1BUSU9OX1BPUERFRlMKK0FUX0NMRUFOVVAKK10pCisKKyMjIEZJWE1FOiB0ZXN0IEphdmEsIGFuZCBpdGVyYXRlIG92ZXIgc2tlbGV0b25zLgorQVRfVEVTVChbeWFjYy5jXSkKK0FUX1RFU1QoW3lhY2MuY10sIFslZGVmaW5lIGFwaS5wdXJlIGZ1bGxdKQorQVRfVEVTVChbeWFjYy5jXSwgWyVkZWZpbmUgYXBpLnB1cmUgJXBhcnNlLXBhcmFtIHsgaW50IHggfV0pCitBVF9URVNUKFt5YWNjLmNdLCBbJWRlZmluZSBhcGkucHVzaC1wdWxsIGJvdGhdKQorQVRfVEVTVChbeWFjYy5jXSwgWyVkZWZpbmUgYXBpLnB1c2gtcHVsbCBib3RoICVkZWZpbmUgYXBpLnB1cmUgZnVsbF0pCitBVF9URVNUKFtnbHIuY10pCitBVF9URVNUKFtnbHIuY10sIFslZGVmaW5lIGFwaS5wdXJlXSkKK0FUX1RFU1QoW2xhbHIxLmNjXSkKK0FUX1RFU1QoW2dsci5jY10pCisKKyMjIEEgdmVyeSBkaWZmZXJlbnQgdGVzdCwgYmFzZWQgb24gUG9zdGdyZVNRTCdzIGltcGxlbWVudGF0aW9uIG9mIHRoZQorIyMgbG9jYXRpb25zLiAgU2VlCisjIyBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMTItMTEvbXNnMDAwMjMuaHRtbAorIyMKKyMjIFdlaXJkbHkgZW5vdWdoLCB0byB0cmlnZ2VyIHRoZSB3YXJuaW5nIHdpdGggR0NDIDQuNywgd2UgbXVzdCBub3QKKyMjIHVzZSBmcHJpbnRmLCBzbyBydW4gdGhlIHRlc3QgdHdpY2U6IG9uY2UgdG8gY2hlY2sgdGhlIHdhcm5pbmcKKyMjIChhYnNlbmNlIHRoZXJlb2YpLCBhbmQgYW5vdGhlciB0aW1lIHRvIGNoZWNrIHRoZSB2YWx1ZS4KK0FUX1RFU1QoW3lhY2MuY10sIFslZGVmaW5lIGFwaS5wdXJlIGZ1bGxdLAorW1sleworIyBkZWZpbmUgWVlMVFlQRSBpbnQKKyMgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKFN0cmVhbSwgTG9jKSAgICAgIFwKKyAgICh2b2lkKSAoTG9jKQorIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKSAgICBcCisgIChDdXJyZW50KSA9ICgoUmhzKVtOID8gMSA6IDBdKQorJX0KK11dLAorW0AmdEBdKQorCitBVF9URVNUKFt5YWNjLmNdLCBbJWRlZmluZSBhcGkucHVyZSBmdWxsXSwKK1tbJXsKKyMgZGVmaW5lIFlZTFRZUEUgaW50CisjIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChTdHJlYW0sIExvYykgICAgICBcCisgICAgZnByaW50ZiAoKFN0cmVhbSksICIlZCIsIChMb2MpKQorIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKSAgICBcCisgIChDdXJyZW50KSA9ICgoUmhzKVtOID8gMSA6IDBdKQorJX0KK11dLAorWzBdKQorCisKK200X3BvcGRlZihbQVRfVEVTVF0pCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjCisjIyBMb2NhdGlvbiBQcmludC4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQVRfVEVTVChTS0VMRVRPTi1OQU1FLCBESVJFQ1RJVkVTLCBbTU9SRS1ESVJFQ1RJVkVTXSwgW0xPQ0FUSU9OID0gMS4xXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgdGhhdCB0aGUgaW5pdGlhbCBsb2NhdGlvbiBpcyBjb3JyZWN0LgorbTRfcHVzaGRlZihbQVRfVEVTVF0sCitbQVRfU0VUVVAoW0xvY2F0aW9uIHByaW50OiAkMSAkMl0pCisKK0FUX0JJU09OX09QVElPTl9QVVNIREVGUyhbJWxvY2F0aW9ucyAlc2tlbGV0b24gIiQxIiAkMl0pCitBVF9EQVRBX0dSQU1NQVIoW1tpbnB1dC55XV0sCitbWyVkZWZpbmVzIC8qIEZJWE1FOiBSZXF1aXJlZCBieSBsYWxyMS5jYyBpbiBCaXNvbiAyLjYuICovCislbG9jYXRpb25zCislZGVidWcKKyVza2VsZXRvbiAiJDEiCitdJDJbCitdJDNbCislY29kZQoreworIyBpbmNsdWRlIDxzdGRpby5oPgorIyBpbmNsdWRlIDxzdGRsaWIuaD4gLyogZ2V0ZW52ICovCitdQVRfWVlFUlJPUl9ERUNMQVJFWworXUFUX1lZTEVYX0RFQ0xBUkVbCit9CislJQorZXhwOjsKKyUlCitdQVRfWVlFUlJPUl9ERUZJTkVbCitdQVRfWVlMRVhfREVGSU5FWworCitpbnQKK21haW4gKHZvaWQpCit7CisjZGVmaW5lIFRFU1QoTDEsIEMxLCBMMiwgQzIpICAgICAgICAgIFwKKyAgXUFUX0xPQ19GSVJTVF9MSU5FWyA9IEwxOyAgICAgICAgICAgXAorICBdQVRfTE9DX0ZJUlNUX0NPTFVNTlsgPSBDMTsgICAgICAgICBcCisgIF1BVF9MT0NfTEFTVF9MSU5FWyA9IEwyOyAgICAgICAgICAgIFwKKyAgXUFUX0xPQ19MQVNUX0NPTFVNTlsgPSBDMjsgICAgICAgICAgXAorICBdWVlfTE9DQVRJT05fUFJJTlQoc3Rkb3V0LCBBVF9MT0MpWztcCisgIHB1dGNoYXIgKCdcbicpOworCisgIFRFU1QoMSwgMSwgMSwgMSk7CisgIFRFU1QoMiwgMSwgMiwgMTApOworICBURVNUKDMsIDEsIDQsIDEpOworICBURVNUKDUsIDEsIDYsIDEwKTsKKworICBURVNUKDcsIDIsIDAsIDIpOworICBURVNUKDgsIDAsIDgsIDApOworICByZXR1cm4gMDsKK30KK11dKQorCitBVF9GVUxMX0NPTVBJTEUoW2lucHV0XSkKK0FUX1BBUlNFUl9DSEVDSyhbLi9pbnB1dF0sIDAsCitbWzEuMQorMi4xLTkKKzMuMS00LjAKKzUuMS02LjkKKzcuMgorOC4wCitdXSkKK0FUX0JJU09OX09QVElPTl9QT1BERUZTCitBVF9DTEVBTlVQCitdKQorCisjIyBGSVhNRTogdGVzdCBKYXZhLCBhbmQgaXRlcmF0ZSBvdmVyIHNrZWxldG9ucy4KK0FUX1RFU1QoW3lhY2MuY10pCitBVF9URVNUKFtnbHIuY10pCisjQVRfVEVTVChbbGFscjEuY2NdKQorI0FUX1RFU1QoW2dsci5jY10pCisKK200X3BvcGRlZihbQVRfVEVTVF0pCiAKIAogCkBAIC05MCwxNCArMjU2LDEzIEBACiAKIEFUX1NFVFVQKFtFeG90aWMgRG9sbGFyc10pCiAKK0FUX0JJU09OX09QVElPTl9QVVNIREVGUwogQVRfREFUQV9HUkFNTUFSKFtbaW5wdXQueV1dLAogW1slZXJyb3ItdmVyYm9zZQogJWRlYnVnCiAlewotIyBpbmNsdWRlIDxzdGRpby5oPgotIyBpbmNsdWRlIDxzdGRsaWIuaD4KLSAgc3RhdGljIHZvaWQgeXllcnJvciAoY29uc3QgY2hhciAqbXNnKTsKLSAgc3RhdGljIGludCB5eWxleCAodm9pZCk7CitdQVRfWVlFUlJPUl9ERUNMQVJFWworXUFUX1lZTEVYX0RFQ0xBUkVbCiAjIGRlZmluZSBVU0UoVmFyKQogJX0KIApAQCAtMTI4LDE4ICsyOTMsOCBAQAogOwogCiAlJQotc3RhdGljIGludAoteXlsZXggKHZvaWQpCi17Ci0gIHJldHVybiBFT0Y7Ci19Ci0KLXN0YXRpYyB2b2lkCi15eWVycm9yIChjb25zdCBjaGFyICptc2cpCi17Ci0gIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOwotfQotCitdQVRfWVlFUlJPUl9ERUZJTkVbCitdQVRfWVlMRVhfREVGSU5FWwogaW50CiBtYWluICh2b2lkKQogewpAQCAtMTQ3LDEyICszMDIsNDcgQEAKIH0KIF1dKQogCi1BVF9DSEVDSyhbYmlzb24gLWQgLXYgLW8gaW5wdXQuYyBpbnB1dC55XSwgMCkKK0FUX0JJU09OX0NIRUNLKFstZCAtdiAtbyBpbnB1dC5jIGlucHV0LnldLCAwKQogQVRfQ09NUElMRShbaW5wdXRdKQogQVRfUEFSU0VSX0NIRUNLKFsuL2lucHV0XSwgMCwKIFtbMTUKIF1dKQogCisjIE1ha2Ugc3VyZSB0aGF0IGZpZWxkcyBhZnRlciAkbiBvciAkLW4gYXJlIHBhcnNlZCBjb3JyZWN0bHkuICBBdCBvbmUKKyMgcG9pbnQgd2hpbGUgaW1wbGVtZW50aW5nIGRhc2hlcyBpbiBzeW1ib2wgbmFtZXMsIHdlIHdlcmUgZHJvcHBpbmcKKyMgZmllbGRzIGFmdGVyICQtbi4KK0FUX0RBVEFfR1JBTU1BUihbW2lucHV0LnldXSwKK1tbCisleworI2luY2x1ZGUgPHN0ZGlvLmg+CitdQVRfWVlFUlJPUl9ERUNMQVJFWworXUFUX1lZTEVYX0RFQ0xBUkVbCisgIHR5cGVkZWYgc3RydWN0IHsgaW50IHZhbDsgfSBzdHlwZTsKKyMgZGVmaW5lIFlZU1RZUEUgc3R5cGUKKyV9CisKKyUlCitzdGFydDogb25lIHR3byB7ICQkLnZhbCA9ICQxLnZhbCArICQyLnZhbDsgfSBzdW0gOworb25lOiB7ICQkLnZhbCA9IDE7IH0gOwordHdvOiB7ICQkLnZhbCA9IDI7IH0gOworc3VtOiB7IHByaW50ZiAoIiVkXG4iLCAkMC52YWwgKyAkLTEudmFsICsgJC0yLnZhbCk7IH0gOworCislJQorXUFUX1lZRVJST1JfREVGSU5FWworXUFUX1lZTEVYX0RFRklORVsKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CitdXSkKKworQVRfRlVMTF9DT01QSUxFKFtpbnB1dF0pCitBVF9QQVJTRVJfQ0hFQ0soW1suL2lucHV0XV0sIFtbMF1dLAorW1s2CitdXSkKKworQVRfQklTT05fT1BUSU9OX1BPUERFRlMKIEFUX0NMRUFOVVAKIAogCkBAIC0xNjEsNDUgKzM1MSw0OSBAQAogIyMgUHJpbnRlcnMgYW5kIERlc3RydWN0b3JzLiAgIyMKICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAKLSMgX0FUX0NIRUNLX1BSSU5URVJfQU5EX0RFU1RSVUNUT1IoJDEsICQyLCAkMywgJDQsIEJJU09OLURJUkVDVElWRSwgVU5JT04tRkxBRykKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgX0FUX0NIRUNLX1BSSU5URVJfQU5EX0RFU1RSVUNUT1IoJDEsICQyLCAkMywgJDQsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJU09OLURJUkVDVElWRSwgVU5JT04tRkxBRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogbTRfZGVmaW5lKFtfQVRfQ0hFQ0tfUFJJTlRFUl9BTkRfREVTVFJVQ1RPUl0sCiBbIyBNYWtlIHN1cmUgY29tcGxleCAkbiB3b3JrLgotbTRfaWYoWyQxJDIkM10sICRbMV0kWzJdJFszXSwgW10sCittNF9pZihbJDEkMiQzJDRdLCAkWzFdJFsyXSRbM10kWzRdLCBbXSwKICAgICAgICBbbTRfZmF0YWwoWyQwOiBJbnZhbGlkIGFyZ3VtZW50czogJEBdKV0pZG5sCiAKICMgQmUgc3VyZSB0byBwYXNzIGFsbCB0aGUgJWRpcmVjdGl2ZXMgdG8gdGhpcyBtYWNybyB0byBoYXZlIGNvcnJlY3QKICMgaGVscGluZyBtYWNyb3MuICBTbyBkb24ndCBwdXQgYW55IGRpcmVjdGx5IGluIHRoZSBCaXNvbiBmaWxlLgogQVRfQklTT05fT1BUSU9OX1BVU0hERUZTKFskNV0pCiBBVF9EQVRBX0dSQU1NQVIoW1tpbnB1dC55XV0sCi1bWyV7CitbWyVjb2RlIHJlcXVpcmVzIHsKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGFzc2VydC5oPgogCiAjZGVmaW5lIFlZSU5JVERFUFRIIDEwCiAjZGVmaW5lIFlZTUFYREVQVEggMTAKLV1BVF9MQUxSMV9DQ19JRigKLSAgWyNkZWZpbmUgUkFOR0UoTG9jYXRpb24pIChMb2NhdGlvbikuYmVnaW4ubGluZSwgKExvY2F0aW9uKS5lbmQubGluZV0sCi0gIFsjZGVmaW5lIFJBTkdFKExvY2F0aW9uKSAoTG9jYXRpb24pLmZpcnN0X2xpbmUsIChMb2NhdGlvbikubGFzdF9saW5lXSkKLVslfQorI2RlZmluZSBSQU5HRShMb2NhdGlvbikgXUFUX0xBTFIxX0NDX0lGKFsoTG9jYXRpb24pLmJlZ2luLmxpbmUsIChMb2NhdGlvbikuZW5kLmxpbmVdLAorICAgICAgWyhMb2NhdGlvbikuZmlyc3RfbGluZSwgKExvY2F0aW9uKS5sYXN0X2xpbmVdKVsKIAotJDVdCi1tNF9pZnZhbChbJDZdLCBbJXVuaW9uCisvKiBEaXNwbGF5IHRoZSBzeW1ib2wgdHlwZSBTeW1ib2wuICAqLworI2RlZmluZSBWKFN5bWJvbCwgVmFsdWUsIExvY2F0aW9uLCBTZXApIFwKKyAgIGZwcmludGYgKHN0ZGVyciwgI1N5bWJvbCAiICglZEAlZC0lZCkiIFNlcCwgVmFsdWUsIFJBTkdFKExvY2F0aW9uKSkKK30KKworJDUKK11tNF9pZnZhbChbJDZdLCBbJXVuaW9uCiB7CiAgIGludCBpdmFsOwogfV0pCi1BVF9MQUxSMV9DQ19JRihbJWRlZmluZSAiZ2xvYmFsX3Rva2Vuc19hbmRfeXlzdHlwZSJdKQotWwotJXsKLV1BVF9MQUxSMV9DQ19JRihbdHlwZWRlZiB5eTo6bG9jYXRpb24gWVlMVFlQRTsKLSAgICAgICAgICAgICAgICBtNF9pZnZhbChbJDZdLCAsIFsjZGVmaW5lIFlZU1RZUEUgaW50XSldKQotW3N0YXRpYyBpbnQgeXlsZXggKF1BVF9MRVhfRk9STUFMU1spOwotXUFUX0xBTFIxX0NDX0lGKFtdLCBbc3RhdGljIHZvaWQgeXllcnJvciAoY29uc3QgY2hhciAqbXNnKTtdKQotWyV9CitBVF9MQUxSMV9DQ19JRihbJWRlZmluZSBnbG9iYWxfdG9rZW5zX2FuZF95eXN0eXBlXSkKK200X2lmdmFsKFskNl0sIFtbJWNvZGUgcHJvdmlkZXMge11dLCBbWyVjb2RlIHtdXSkKK0FUX0xBTFIxX0NDX0lGKFt0eXBlZGVmIHl5Ojpsb2NhdGlvbiBZWUxUWVBFO10pWworXUFUX1lZTEVYX0RFQ0xBUkVbCitdQVRfTEFMUjFfQ0NfSUYoW10sIFtBVF9ZWUVSUk9SX0RFQ0xBUkVdKQorW30KIAotXW00X2lmdmFsKFskNl0sIFsldHlwZSA8aXZhbD4gJygnICd4JyAneScgJyknICc7JyB0aGluZyBsaW5lIGlucHV0XSlbCitdbTRfaWZ2YWwoWyQ2XSwgWyV0eXBlIDxpdmFsPiAnKCcgJ3gnICd5JyAnKScgJzsnIHRoaW5nIGxpbmUgaW5wdXQgRU5EXSlbCiAKKy8qIEZJWE1FOiBUaGlzICVwcmludGVyIGlzbid0IGFjdHVhbGx5IHRlc3RlZC4gICovCiAlcHJpbnRlcgogICB7CiAgICAgXUFUX0xBTFIxX0NDX0lGKFtkZWJ1Z19zdHJlYW0gKCkgPDwgJCQ7XSwKQEAgLTIwOCwyNSArNDAyLDMwIEBACiAgIGlucHV0IGxpbmUgdGhpbmcgJ3gnICd5JwogCiAlZGVzdHJ1Y3RvcgotICB7IHByaW50ZiAoIkZyZWVpbmcgbnRlcm0gaW5wdXQgKCVkQCVkLSVkKVxuIiwgJCQsIFJBTkdFIChAJCkpOyB9CisgIHsgZnByaW50ZiAoc3RkZXJyLCAiRnJlZWluZyBudGVybSBpbnB1dCAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KICAgaW5wdXQKIAogJWRlc3RydWN0b3IKLSAgeyBwcmludGYgKCJGcmVlaW5nIG50ZXJtIGxpbmUgKCVkQCVkLSVkKVxuIiwgJCQsIFJBTkdFIChAJCkpOyB9CisgIHsgZnByaW50ZiAoc3RkZXJyLCAiRnJlZWluZyBudGVybSBsaW5lICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQogICBsaW5lCiAKICVkZXN0cnVjdG9yCi0gIHsgcHJpbnRmICgiRnJlZWluZyBudGVybSB0aGluZyAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KKyAgeyBmcHJpbnRmIChzdGRlcnIsICJGcmVlaW5nIG50ZXJtIHRoaW5nICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQogICB0aGluZwogCiAlZGVzdHJ1Y3RvcgotICB7IHByaW50ZiAoIkZyZWVpbmcgdG9rZW4gJ3gnICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQorICB7IGZwcmludGYgKHN0ZGVyciwgIkZyZWVpbmcgdG9rZW4gJ3gnICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQogICAneCcKIAogJWRlc3RydWN0b3IKLSAgeyBwcmludGYgKCJGcmVlaW5nIHRva2VuICd5JyAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KKyAgeyBmcHJpbnRmIChzdGRlcnIsICJGcmVlaW5nIHRva2VuICd5JyAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KICAgJ3knCiAKKyV0b2tlbiBFTkQgMAorJWRlc3RydWN0b3IKKyAgeyBmcHJpbnRmIChzdGRlcnIsICJGcmVlaW5nIHRva2VuIEVORCAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KKyAgRU5ECisKICUlCiAvKgogICAgVGhpcyBncmFtbWFyIGlzIG1hZGUgdG8gZXhlcmNpc2UgZXJyb3IgcmVjb3ZlcnkuCkBAIC0yMzksMTQgKzQzOCwxNSBAQAogICAvKiBOb3RoaW5nLiAqLwogICAgIHsKICAgICAgICQkID0gMDsKLSAgICAgIHByaW50ZiAoImlucHV0ICglZEAlZC0lZCk6IC8qIE5vdGhpbmcgKi9cbiIsICQkLCBSQU5HRSAoQCQpKTsKKyAgICAgIFYoaW5wdXQsICQkLCBAJCwgIjogLyogTm90aGluZyAqL1xuIik7CiAgICAgfQogfCBsaW5lIGlucHV0IC8qIFJpZ2h0IHJlY3Vyc2l2ZSB0byBsb2FkIHRoZSBzdGFjayBzbyB0aGF0IHBvcHBpbmcgYXQKLQkJRU9GIGNhbgliZSBleGVyY2lzZWQuICAqLworICAgICAgICAgICAgICAgIEVORCBjYW4gYmUgZXhlcmNpc2VkLiAgKi8KICAgICB7CiAgICAgICAkJCA9IDI7Ci0gICAgICBwcmludGYgKCJpbnB1dCAoJWRAJWQtJWQpOiBsaW5lICglZEAlZC0lZCkgaW5wdXQgKCVkQCVkLSVkKVxuIiwKLQkgICAgICAkJCwgUkFOR0UgKEAkKSwgJDEsIFJBTkdFIChAMSksICQyLCBSQU5HRSAoQDIpKTsKKyAgICAgIFYoaW5wdXQsICQkLCBAJCwgIjogIik7CisgICAgICBWKGxpbmUsICAkMSwgQDEsICIgIik7CisgICAgICBWKGlucHV0LCAkMiwgQDIsICJcbiIpOwogICAgIH0KIDsKIApAQCAtMjU0LDI4ICs0NTQsMzYgQEAKICAgdGhpbmcgdGhpbmcgdGhpbmcgJzsnCiAgICAgewogICAgICAgJCQgPSAkMTsKLSAgICAgIHByaW50ZiAoImxpbmUgKCVkQCVkLSVkKTogdGhpbmcgKCVkQCVkLSVkKSB0aGluZyAoJWRAJWQtJWQpIHRoaW5nICglZEAlZC0lZCkgJzsnICglZEAlZC0lZClcbiIsCi0gICAgICAgICAgICAgICQkLCBSQU5HRSAoQCQpLCAkMSwgUkFOR0UgKEAxKSwgJDIsIFJBTkdFIChAMiksCi0gICAgICAgICAgICAgICQzLCBSQU5HRSAoQDMpLCAkNCwgUkFOR0UgKEA0KSk7CisgICAgICBWKGxpbmUsICAkJCwgQCQsICI6ICIpOworICAgICAgVih0aGluZywgJDEsIEAxLCAiICIpOworICAgICAgVih0aGluZywgJDIsIEAyLCAiICIpOworICAgICAgVih0aGluZywgJDMsIEAzLCAiICIpOworICAgICAgVig7LCAgICAgJDQsIEA0LCAiXG4iKTsKICAgICB9CiB8ICcoJyB0aGluZyB0aGluZyAnKScKICAgICB7CiAgICAgICAkJCA9ICQxOwotICAgICAgcHJpbnRmICgibGluZSAoJWRAJWQtJWQpOiAnKCcgKCVkQCVkLSVkKSB0aGluZyAoJWRAJWQtJWQpIHRoaW5nICglZEAlZC0lZCkgJyknICglZEAlZC0lZClcbiIsCi0gICAgICAgICAgICAgICQkLCBSQU5HRSAoQCQpLCAkMSwgUkFOR0UgKEAxKSwgJDIsIFJBTkdFIChAMiksCi0gICAgICAgICAgICAgICQzLCBSQU5HRSAoQDMpLCAkNCwgUkFOR0UgKEA0KSk7CisgICAgICBWKGxpbmUsICAkJCwgQCQsICI6ICIpOworICAgICAgVignKCcsICAgJDEsIEAxLCAiICIpOworICAgICAgVih0aGluZywgJDIsIEAyLCAiICIpOworICAgICAgVih0aGluZywgJDMsIEAzLCAiICIpOworICAgICAgVignKScsICAgJDQsIEA0LCAiXG4iKTsKICAgICB9CiB8ICcoJyB0aGluZyAnKScKICAgICB7CiAgICAgICAkJCA9ICQxOwotICAgICAgcHJpbnRmICgibGluZSAoJWRAJWQtJWQpOiAnKCcgKCVkQCVkLSVkKSB0aGluZyAoJWRAJWQtJWQpICcpJyAoJWRAJWQtJWQpXG4iLAotICAgICAgICAgICAgICAkJCwgUkFOR0UgKEAkKSwgJDEsIFJBTkdFIChAMSksICQyLCBSQU5HRSAoQDIpLCAkMywgUkFOR0UgKEAzKSk7CisgICAgICBWKGxpbmUsICAkJCwgQCQsICI6ICIpOworICAgICAgVignKCcsICAgJDEsIEAxLCAiICIpOworICAgICAgVih0aGluZywgJDIsIEAyLCAiICIpOworICAgICAgVignKScsICAgJDMsIEAzLCAiXG4iKTsKICAgICB9CiB8ICcoJyBlcnJvciAnKScKICAgICB7CiAgICAgICAkJCA9IC0xOwotICAgICAgcHJpbnRmICgibGluZSAoJWRAJWQtJWQpOiAnKCcgKCVkQCVkLSVkKSBlcnJvciAoQCVkLSVkKSAnKScgKCVkQCVkLSVkKVxuIiwKLSAgICAgICAgICAgICAgJCQsIFJBTkdFIChAJCksICQxLCBSQU5HRSAoQDEpLCBSQU5HRSAoQDIpLCAkMywgUkFOR0UgKEAzKSk7CisgICAgICBWKGxpbmUsICAkJCwgQCQsICI6ICIpOworICAgICAgVignKCcsICAgJDEsIEAxLCAiICIpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiZXJyb3IgKEAlZC0lZCkgIiwgUkFOR0UgKEAyKSk7CisgICAgICBWKCcpJywgICAkMywgQDMsICJcbiIpOwogICAgIH0KIDsKIApAQCAtMjgzLDQ2ICs0OTEsMzUgQEAKICAgJ3gnCiAgICAgewogICAgICAgJCQgPSAkMTsKLSAgICAgIHByaW50ZiAoInRoaW5nICglZEAlZC0lZCk6ICd4JyAoJWRAJWQtJWQpXG4iLAotICAgICAgICAgICAgICAkJCwgUkFOR0UgKEAkKSwgJDEsIFJBTkdFIChAMSkpOworICAgICAgVih0aGluZywgJCQsIEAkLCAiOiAiKTsKKyAgICAgIFYoJ3gnLCAgICQxLCBAMSwgIlxuIik7CiAgICAgfQogOwogJSUKIC8qIEFsaWFzIHRvIEFSR1ZbMV0uICovCi1jb25zdCBjaGFyICpzb3VyY2UgPSAwOworY29uc3QgY2hhciAqc291cmNlID0gWVlfTlVMTDsKIAotc3RhdGljIGludAoteXlsZXggKF1BVF9MRVhfRk9STUFMU1spCitdQVRfWVlFUlJPUl9ERUZJTkVbCisKK3N0YXRpYworXUFUX1lZTEVYX1BST1RPVFlQRVsKIHsKICAgc3RhdGljIHVuc2lnbmVkIGludCBjb3VudGVyID0gMDsKIAogICBpbnQgYyA9IF1BVF9WQUxbXW00X2lmdmFsKFskNl0sIFsuaXZhbF0pWyA9IGNvdW50ZXIrKzsKICAgLyogQXMgaW4gQkFTSUMsIGxpbmUgbnVtYmVycyBnbyBmcm9tIDEwIHRvIDEwLiAgKi8KLV1BVF9MQUxSMV9DQ19JRigKLVsgQVRfTE9DLmJlZ2luLmxpbmUgPSBBVF9MT0MuYmVnaW4uY29sdW1uID0gMTAgKiBjOwotICBBVF9MT0MuZW5kLmxpbmUgPSBBVF9MT0MuZW5kLmNvbHVtbiA9IEFUX0xPQy5iZWdpbi5saW5lICsgOTsKLV0sCi1bIEFUX0xPQy5maXJzdF9saW5lID0gQVRfTE9DLmZpcnN0X2NvbHVtbiA9IDEwICogYzsKLSAgQVRfTE9DLmxhc3RfbGluZSA9IEFUX0xPQy5sYXN0X2NvbHVtbiA9IEFUX0xPQy5maXJzdF9saW5lICsgOTsKLV0pWwotCisgIF1BVF9MT0NfRklSU1RfTElORVsgPSBdQVRfTE9DX0ZJUlNUX0NPTFVNTlsgPSAxMCAqIGM7CisgIF1BVF9MT0NfTEFTVF9MSU5FWyA9IF1BVF9MT0NfTEFTVF9DT0xVTU5bID0gXUFUX0xPQ19GSVJTVF9MSU5FWyArIDk7CisgIGFzc2VydCAoMCA8PSBjICYmIGMgPD0gc3RybGVuIChzb3VyY2UpKTsKICAgaWYgKHNvdXJjZVtjXSkKLSAgICBwcmludGYgKCJzZW5kaW5nOiAnJWMnIiwgc291cmNlW2NdKTsKKyAgICBmcHJpbnRmIChzdGRlcnIsICJzZW5kaW5nOiAnJWMnIiwgc291cmNlW2NdKTsKICAgZWxzZQotICAgIHByaW50ZiAoInNlbmRpbmc6IEVPRiIpOwotICBwcmludGYgKCIgKCVkQCVkLSVkKVxuIiwgYywgUkFOR0UgKF1BVF9MT0NbKSk7CisgICAgZnByaW50ZiAoc3RkZXJyLCAic2VuZGluZzogRU5EIik7CisgIGZwcmludGYgKHN0ZGVyciwgIiAoJWRAJWQtJWQpXG4iLCBjLCBSQU5HRSAoXUFUX0xPQ1spKTsKICAgcmV0dXJuIHNvdXJjZVtjXTsKIH0KLQogXUFUX0xBTFIxX0NDX0lGKAotWy8qIEEgQysrIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gKi8KLXZvaWQKLXl5OjpwYXJzZXI6OmVycm9yIChjb25zdCBsb2NhdGlvbiYgbCwgY29uc3Qgc3RkOjpzdHJpbmcmIG0pCi17Ci0gIHByaW50ZiAoIiVkLSVkOiAlc1xuIiwgUkFOR0UgKGwpLCBtLmNfc3RyKCkpOwotfQotCi1zdGF0aWMgYm9vbCB5eWRlYnVnOworW3N0YXRpYyBib29sIHl5ZGVidWc7CiBpbnQKIHl5cGFyc2UgKCkKIHsKQEAgLTMzMCwxMiArNTI3LDcgQEAKICAgcGFyc2VyLnNldF9kZWJ1Z19sZXZlbCAoeXlkZWJ1Zyk7CiAgIHJldHVybiBwYXJzZXIucGFyc2UgKCk7CiB9Ci1dLAotW3N0YXRpYyB2b2lkCi15eWVycm9yIChjb25zdCBjaGFyICptc2cpCi17Ci0gIHByaW50ZiAoIiVkLSVkOiAlc1xuIiwgUkFOR0UgKHl5bGxvYyksIG1zZyk7Ci19XSlbCitdKVsKIAogaW50CiBtYWluIChpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKQpAQCAtMzQ3LDE5ICs1MzksMTUgQEAKICAgc3RhdHVzID0geXlwYXJzZSAoKTsKICAgc3dpdGNoIChzdGF0dXMpCiAgICAgewotICAgICAgY2FzZSAwOiBwcmludGYgKCJTdWNjZXNzZnVsIHBhcnNlLlxuIik7IGJyZWFrOwotICAgICAgY2FzZSAxOiBwcmludGYgKCJQYXJzaW5nIEZBSUxFRC5cbiIpOyBicmVhazsKLSAgICAgIGRlZmF1bHQ6IHByaW50ZiAoIlBhcnNpbmcgRkFJTEVEIChzdGF0dXMgJWQpLlxuIiwgc3RhdHVzKTsgYnJlYWs7CisgICAgICBjYXNlIDA6IGZwcmludGYgKHN0ZGVyciwgIlN1Y2Nlc3NmdWwgcGFyc2UuXG4iKTsgYnJlYWs7CisgICAgICBjYXNlIDE6IGZwcmludGYgKHN0ZGVyciwgIlBhcnNpbmcgRkFJTEVELlxuIik7IGJyZWFrOworICAgICAgZGVmYXVsdDogZnByaW50ZiAoc3RkZXJyLCAiUGFyc2luZyBGQUlMRUQgKHN0YXR1cyAlZCkuXG4iLCBzdGF0dXMpOyBicmVhazsKICAgICB9CiAgIHJldHVybiBzdGF0dXM7CiB9CiBdXSkKIAotQVRfTEFMUjFfQ0NfSUYoCi0gIFtBVF9DSEVDSyhbYmlzb24gLW8gaW5wdXQuY2MgaW5wdXQueV0pCi0gICBBVF9DT01QSUxFX0NYWChbaW5wdXRdKV0sCi0gIFtBVF9DSEVDSyhbYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55XSkKLSAgIEFUX0NPTVBJTEUoW2lucHV0XSldKQorQVRfRlVMTF9DT01QSUxFKFtpbnB1dF0pCiAKIAogIyBDaGVjayB0aGUgbG9jYXRpb24gb2YgImVtcHR5IgpAQCAtMzY3LDE1ICs1NTUsMTYgQEAKICMgSS5lLiwgZXBzaWxvbi1yZWR1Y3Rpb25zLCBhcyBpbiAiKHgpIiB3aGljaCBlbmRzIGJ5IHJlZHVjaW5nCiAjIGFuIGVtcHR5ICJsaW5lIiBudGVybS4KICMgRklYTUU6IFRoaXMgbG9jYXRpb24gaXMgbm90IHNhdGlzZnlpbmcuICBEZXBlbmQgb24gdGhlIGxvb2thaGVhZD8KLUFUX1BBUlNFUl9DSEVDSyhbLi9pbnB1dCAnKHgpJ10sIDAsCitBVF9QQVJTRVJfQ0hFQ0soWy4vaW5wdXQgJyh4KSddLCAwLCBbXSwKIFtbc2VuZGluZzogJygnICgwQDAtOSkKIHNlbmRpbmc6ICd4JyAoMUAxMC0xOSkKIHRoaW5nICgxQDEwLTE5KTogJ3gnICgxQDEwLTE5KQogc2VuZGluZzogJyknICgyQDIwLTI5KQogbGluZSAoMEAwLTI5KTogJygnICgwQDAtOSkgdGhpbmcgKDFAMTAtMTkpICcpJyAoMkAyMC0yOSkKLXNlbmRpbmc6IEVPRiAoM0AzMC0zOSkKK3NlbmRpbmc6IEVORCAoM0AzMC0zOSkKIGlucHV0ICgwQDI5LTI5KTogLyogTm90aGluZyAqLwogaW5wdXQgKDJAMC0yOSk6IGxpbmUgKDBAMC0yOSkgaW5wdXQgKDBAMjktMjkpCitGcmVlaW5nIHRva2VuIEVORCAoM0AzMC0zOSkKIEZyZWVpbmcgbnRlcm0gaW5wdXQgKDJAMC0yOSkKIFN1Y2Nlc3NmdWwgcGFyc2UuCiBdXSkKQEAgLTM4NSwxNiArNTc0LDE3IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyAnKHkpJyBpcyBhbiBlcnJvciwgYnV0IGNhbiBiZSByZWNvdmVyZWQgZnJvbS4gIEJ1dCB3aGF0J3MgdGhlIGxvY2F0aW9uCiAjIG9mIHRoZSBlcnJvciBpdHNlbGYgKCd5JyksIGFuZCBvZiB0aGUgcmVzdWx0aW5nIHJlZHVjdGlvbiAoJyhlcnJvciknKS4KLUFUX1BBUlNFUl9DSEVDSyhbLi9pbnB1dCAnKHkpJ10sIDAsCitBVF9QQVJTRVJfQ0hFQ0soWy4vaW5wdXQgJyh5KSddLCAwLCBbXSwKIFtbc2VuZGluZzogJygnICgwQDAtOSkKIHNlbmRpbmc6ICd5JyAoMUAxMC0xOSkKLTEwLTE5OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ3knLCBleHBlY3RpbmcgJ3gnCisxMC4xMC0xOS4xODogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICd5JywgZXhwZWN0aW5nICd4JwogRnJlZWluZyB0b2tlbiAneScgKDFAMTAtMTkpCiBzZW5kaW5nOiAnKScgKDJAMjAtMjkpCiBsaW5lICgtMUAwLTI5KTogJygnICgwQDAtOSkgZXJyb3IgKEAxMC0xOSkgJyknICgyQDIwLTI5KQotc2VuZGluZzogRU9GICgzQDMwLTM5KQorc2VuZGluZzogRU5EICgzQDMwLTM5KQogaW5wdXQgKDBAMjktMjkpOiAvKiBOb3RoaW5nICovCiBpbnB1dCAoMkAwLTI5KTogbGluZSAoLTFAMC0yOSkgaW5wdXQgKDBAMjktMjkpCitGcmVlaW5nIHRva2VuIEVORCAoM0AzMC0zOSkKIEZyZWVpbmcgbnRlcm0gaW5wdXQgKDJAMC0yOSkKIFN1Y2Nlc3NmdWwgcGFyc2UuCiBdXSkKQEAgLTQxNCwxNCArNjA0LDE0IEBACiAjICAgICAnKCcsICd4JywgJyknLAogIyAgICAgJygnLCAneCcsICcpJywKICMgICAgICd5JwotQVRfUEFSU0VSX0NIRUNLKFsuL2lucHV0ICcoeHh4eHgpKHgpKHgpeSddLCAxLAorQVRfUEFSU0VSX0NIRUNLKFsuL2lucHV0ICcoeHh4eHgpKHgpKHgpeSddLCAxLCBbXSwKIFtbc2VuZGluZzogJygnICgwQDAtOSkKIHNlbmRpbmc6ICd4JyAoMUAxMC0xOSkKIHRoaW5nICgxQDEwLTE5KTogJ3gnICgxQDEwLTE5KQogc2VuZGluZzogJ3gnICgyQDIwLTI5KQogdGhpbmcgKDJAMjAtMjkpOiAneCcgKDJAMjAtMjkpCiBzZW5kaW5nOiAneCcgKDNAMzAtMzkpCi0zMC0zOTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICd4JywgZXhwZWN0aW5nICcpJworMzAuMzAtMzkuMzg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAneCcsIGV4cGVjdGluZyAnKScKIEZyZWVpbmcgbnRlcm0gdGhpbmcgKDJAMjAtMjkpCiBGcmVlaW5nIG50ZXJtIHRoaW5nICgxQDEwLTE5KQogRnJlZWluZyB0b2tlbiAneCcgKDNAMzAtMzkpCkBAIC00NDYsMTggKzYzNiw1MSBAQAogaW5wdXQgKDJAMTAwLTEyOSk6IGxpbmUgKDEwQDEwMC0xMjkpIGlucHV0ICgwQDEyOS0xMjkpCiBpbnB1dCAoMkA3MC0xMjkpOiBsaW5lICg3QDcwLTk5KSBpbnB1dCAoMkAxMDAtMTI5KQogaW5wdXQgKDJAMC0xMjkpOiBsaW5lICgtMUAwLTY5KSBpbnB1dCAoMkA3MC0xMjkpCi0xMzAtMTM5OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ3knLCBleHBlY3RpbmcgJGVuZAorMTMwLjEzMC0xMzkuMTM4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ3knLCBleHBlY3RpbmcgRU5ECiBGcmVlaW5nIG50ZXJtIGlucHV0ICgyQDAtMTI5KQogRnJlZWluZyB0b2tlbiAneScgKDEzQDEzMC0xMzkpCiBQYXJzaW5nIEZBSUxFRC4KIF1dKQogCisKKyMgU3ludGF4IGVycm9yIGNhdWdodCBieSB0aGUgcGFyc2VyIHdoZXJlIGxvb2thaGVhZCA9IEVORAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMb2FkIHRoZSBzdGFjayBhbmQgcHJvdm9rZSBhbiBlcnJvciB0aGF0IGNhbm5vdCBiZSBjYXVnaHQgYnkgdGhlCisjIGdyYW1tYXIsIHRvIGNoZWNrIHRoYXQgdGhlIHN0YWNrIGlzIGNsZWFyZWQuICBBbmQgbWFrZSBzdXJlIHRoZQorIyBsb29rYWhlYWQgaXMgZnJlZWQuCisjCisjICAgICAnKCcsICd4JywgJyknLAorIyAgICAgJygnLCAneCcsICcpJywKKyMgICAgICd4JworQVRfUEFSU0VSX0NIRUNLKFsuL2lucHV0ICcoeCkoeCl4J10sIDEsIFtdLAorW1tzZW5kaW5nOiAnKCcgKDBAMC05KQorc2VuZGluZzogJ3gnICgxQDEwLTE5KQordGhpbmcgKDFAMTAtMTkpOiAneCcgKDFAMTAtMTkpCitzZW5kaW5nOiAnKScgKDJAMjAtMjkpCitsaW5lICgwQDAtMjkpOiAnKCcgKDBAMC05KSB0aGluZyAoMUAxMC0xOSkgJyknICgyQDIwLTI5KQorc2VuZGluZzogJygnICgzQDMwLTM5KQorc2VuZGluZzogJ3gnICg0QDQwLTQ5KQordGhpbmcgKDRANDAtNDkpOiAneCcgKDRANDAtNDkpCitzZW5kaW5nOiAnKScgKDVANTAtNTkpCitsaW5lICgzQDMwLTU5KTogJygnICgzQDMwLTM5KSB0aGluZyAoNEA0MC00OSkgJyknICg1QDUwLTU5KQorc2VuZGluZzogJ3gnICg2QDYwLTY5KQordGhpbmcgKDZANjAtNjkpOiAneCcgKDZANjAtNjkpCitzZW5kaW5nOiBFTkQgKDdANzAtNzkpCis3MC43MC03OS43ODogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIEVORCwgZXhwZWN0aW5nICd4JworRnJlZWluZyBudGVybSB0aGluZyAoNkA2MC02OSkKK0ZyZWVpbmcgbnRlcm0gbGluZSAoM0AzMC01OSkKK0ZyZWVpbmcgbnRlcm0gbGluZSAoMEAwLTI5KQorRnJlZWluZyB0b2tlbiBFTkQgKDdANzAtNzkpCitQYXJzaW5nIEZBSUxFRC4KK11dKQorCisKICMgQ2hlY2sgZGVzdHJ1Y3Rpb24gdXBvbiBzdGFjayBvdmVyZmxvdwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFVwb24gc3RhY2sgb3ZlcmZsb3csIGFsbCBzeW1ib2xzIG9uIHRoZSBzdGFjayBzaG91bGQgYmUgZGVzdHJveWVkLgogIyBPbmx5IGNoZWNrIGZvciB5YWNjLmMuCiBBVF9ZQUNDX0lGKFsKLUFUX1BBUlNFUl9DSEVDSyhbLi9pbnB1dCAnKHgpKHgpKHgpKHgpKHgpKHgpKHgpJ10sIDIsCitBVF9QQVJTRVJfQ0hFQ0soWy4vaW5wdXQgJyh4KSh4KSh4KSh4KSh4KSh4KSh4KSddLCAyLCBbXSwKIFtbc2VuZGluZzogJygnICgwQDAtOSkKIHNlbmRpbmc6ICd4JyAoMUAxMC0xOSkKIHRoaW5nICgxQDEwLTE5KTogJ3gnICgxQDEwLTE5KQpAQCAtNDkyLDcgKzcxNSw3IEBACiBzZW5kaW5nOiAneCcgKDE5QDE5MC0xOTkpCiB0aGluZyAoMTlAMTkwLTE5OSk6ICd4JyAoMTlAMTkwLTE5OSkKIHNlbmRpbmc6ICcpJyAoMjBAMjAwLTIwOSkKLTIwMC0yMDk6IG1lbW9yeSBleGhhdXN0ZWQKKzIwMC4yMDAtMjA5LjIwODogbWVtb3J5IGV4aGF1c3RlZAogRnJlZWluZyBudGVybSB0aGluZyAoMTlAMTkwLTE5OSkKIEZyZWVpbmcgbnRlcm0gbGluZSAoMTVAMTUwLTE3OSkKIEZyZWVpbmcgbnRlcm0gbGluZSAoMTJAMTIwLTE0OSkKQEAgLTUwNCwxMyArNzI3LDE0IEBACiBdXSkKIF0pCiAKLV0pCitBVF9CSVNPTl9PUFRJT05fUE9QREVGUworXSkjIF9BVF9DSEVDS19QUklOVEVSX0FORF9ERVNUUlVDVE9SCiAKIAogIyBBVF9DSEVDS19QUklOVEVSX0FORF9ERVNUUlVDVE9SKFtCSVNPTi1PUFRJT05TXSwgW1VOSU9OLUZMQUddLCBbU0tJUF9GTEFHXSkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBtNF9kZWZpbmUoW0FUX0NIRUNLX1BSSU5URVJfQU5EX0RFU1RSVUNUT1JdLAotW0FUX1NFVFVQKFtQcmludGVycyBhbmQgRGVzdHJ1Y3RvcnMgJDI6ICQxXSkKK1tBVF9TRVRVUChbUHJpbnRlcnMgYW5kIERlc3RydWN0b3JzJDJdbTRfaWZ2YWwoWyQxXSwgW1s6ICQxXV0pKQogCiAkMwogX0FUX0NIRUNLX1BSSU5URVJfQU5EX0RFU1RSVUNUT1IoJFsxXSwgJFsyXSwgJFszXSwgJFs0XSwKQEAgLTUyNSwxMyArNzQ5LDEwMDggQEAKIAogCiBBVF9DSEVDS19QUklOVEVSX0FORF9ERVNUUlVDVE9SKFtdKQotQVRfQ0hFQ0tfUFJJTlRFUl9BTkRfREVTVFJVQ1RPUihbXSwgW3dpdGggdW5pb25dKQorQVRfQ0hFQ0tfUFJJTlRFUl9BTkRfREVTVFJVQ1RPUihbXSwgWyB3aXRoIHVuaW9uXSkKIAotIyBUaGVzZSB0ZXN0cyBjdXJyZW50bHkgZmFpbCBvbiBhIERlYmlhbiBHTlUvTGludXggMy4wcjIgeDg2IGhvc3QsCi0jIGJ1dCB0aGUgMm5kIHRlc3Qgc3VjY2VlZHMgb24gYSBTb2xhcmlzIDkgc3BhcmMgaG9zdHMgKEZvcnRlIDcgY2MpLgotIyBTa2lwIHRoZW0gdW50aWwgd2UgZmlndXJlIG91dCB3aGF0IHRoZSBwcm9ibGVtIGlzLgogQVRfQ0hFQ0tfUFJJTlRFUl9BTkRfREVTVFJVQ1RPUihbJWRlZmluZXMgJXNrZWxldG9uICJsYWxyMS5jYyJdKQotQVRfQ0hFQ0tfUFJJTlRFUl9BTkRfREVTVFJVQ1RPUihbJWRlZmluZXMgJXNrZWxldG9uICJsYWxyMS5jYyJdLCBbd2l0aCB1bmlvbl0pCitBVF9DSEVDS19QUklOVEVSX0FORF9ERVNUUlVDVE9SKFslZGVmaW5lcyAlc2tlbGV0b24gImxhbHIxLmNjIl0sIFsgd2l0aCB1bmlvbl0pCiAKIEFUX0NIRUNLX1BSSU5URVJfQU5EX0RFU1RSVUNUT1IoWyVnbHItcGFyc2VyXSkKLUFUX0NIRUNLX1BSSU5URVJfQU5EX0RFU1RSVUNUT1IoWyVnbHItcGFyc2VyXSwgW3dpdGggdW5pb25dKQorQVRfQ0hFQ0tfUFJJTlRFUl9BTkRfREVTVFJVQ1RPUihbJWdsci1wYXJzZXJdLCBbIHdpdGggdW5pb25dKQorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIERlZmF1bHQgdGFnbGVzcyAlcHJpbnRlciBhbmQgJWRlc3RydWN0b3IuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIENoZWNrIHRoYXQgdGhlIHJpZ2h0ICVwcmludGVyIGFuZCAlZGVzdHJ1Y3RvciBhcmUgY2FsbGVkLCB0aGF0IHRoZXkncmUgbm90CisjIGNhbGxlZCBmb3IgJGVuZCwgYW5kIHRoYXQgJCQgYW5kIEAkIHdvcmsgY29ycmVjdGx5LgorCitBVF9TRVRVUChbRGVmYXVsdCB0YWdsZXNzICVwcmludGVyIGFuZCAlZGVzdHJ1Y3Rvcl0pCitBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMoWyVsb2NhdGlvbnNdKQorQVRfREFUQV9HUkFNTUFSKFtbaW5wdXQueV1dLAorW1slZXJyb3ItdmVyYm9zZQorJWRlYnVnCislbG9jYXRpb25zCisKKyV7CisjIGluY2x1ZGUgPHN0ZGlvLmg+CisjIGluY2x1ZGUgPHN0ZGxpYi5oPgorXUFUX1lZTEVYX0RFQ0xBUkVbCitdQVRfWVlFUlJPUl9ERUNMQVJFWworIyBkZWZpbmUgVVNFKFNZTSkKKyV9CisKKyVwcmludGVyIHsKKyAgZnByaW50ZiAoeXlvdXRwdXQsICI8Kj4gcHJpbnRlciBzaG91bGQgbm90IGJlIGNhbGxlZC5cbiIpOworfSA8Kj4KKworJXByaW50ZXIgeworICBmcHJpbnRmICh5eW91dHB1dCwgIjw+IHByaW50ZXIgZm9yICclYycgQCAlZCIsICQkLCBAJC5maXJzdF9jb2x1bW4pOworfSA8PgorJWRlc3RydWN0b3IgeworICBmcHJpbnRmIChzdGRvdXQsICI8PiBkZXN0cnVjdG9yIGZvciAnJWMnIEAgJWQuXG4iLCAkJCwgQCQuZmlyc3RfY29sdW1uKTsKK30gPD4KKworJXByaW50ZXIgeworICBmcHJpbnRmICh5eW91dHB1dCwgIidiJy8nYycgcHJpbnRlciBmb3IgJyVjJyBAICVkIiwgJCQsIEAkLmZpcnN0X2NvbHVtbik7Cit9ICdiJyAnYycKKyVkZXN0cnVjdG9yIHsKKyAgZnByaW50ZiAoc3Rkb3V0LCAiJ2InLydjJyBkZXN0cnVjdG9yIGZvciAnJWMnIEAgJWQuXG4iLCAkJCwgQCQuZmlyc3RfY29sdW1uKTsKK30gJ2InICdjJworCislZGVzdHJ1Y3RvciB7CisgIGZwcmludGYgKHl5b3V0cHV0LCAiPCo+IGRlc3RydWN0b3Igc2hvdWxkIG5vdCBiZSBjYWxsZWQuXG4iKTsKK30gPCo+CisKKyUlCisKK3N0YXJ0OiAnYScgJ2InICdjJyAnZCcgJ2UnIHsgJCQgPSAnUyc7IFVTRSgoJDEsICQyLCAkMywgJDQsICQ1KSk7IH0gOworCislJQorXUFUX1lZRVJST1JfREVGSU5FWworXUFUX1lZTEVYX0RFRklORShbImFiY2QiXSwgW1t5eWx2YWwgPSByZXNdXSlbCisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgeXlkZWJ1ZyA9IDE7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorXV0pCisKK0FUX0JJU09OX0NIRUNLKFstbyBpbnB1dC5jIGlucHV0LnldKQorQVRfQ09NUElMRShbaW5wdXRdKQorQVRfUEFSU0VSX0NIRUNLKFsuL2lucHV0XSwgMSwKK1tbPD4gZGVzdHJ1Y3RvciBmb3IgJ2QnIEAgNC4KKydiJy8nYycgZGVzdHJ1Y3RvciBmb3IgJ2MnIEAgMy4KKydiJy8nYycgZGVzdHJ1Y3RvciBmb3IgJ2InIEAgMi4KKzw+IGRlc3RydWN0b3IgZm9yICdhJyBAIDEuCitdXSwKK1tbU3RhcnRpbmcgcGFyc2UKK0VudGVyaW5nIHN0YXRlIDAKK1JlYWRpbmcgYSB0b2tlbjogTmV4dCB0b2tlbiBpcyB0b2tlbiAnYScgKDEuMTogPD4gcHJpbnRlciBmb3IgJ2EnIEAgMSkKK1NoaWZ0aW5nIHRva2VuICdhJyAoMS4xOiA8PiBwcmludGVyIGZvciAnYScgQCAxKQorRW50ZXJpbmcgc3RhdGUgMQorUmVhZGluZyBhIHRva2VuOiBOZXh0IHRva2VuIGlzIHRva2VuICdiJyAoMS4yOiAnYicvJ2MnIHByaW50ZXIgZm9yICdiJyBAIDIpCitTaGlmdGluZyB0b2tlbiAnYicgKDEuMjogJ2InLydjJyBwcmludGVyIGZvciAnYicgQCAyKQorRW50ZXJpbmcgc3RhdGUgMworUmVhZGluZyBhIHRva2VuOiBOZXh0IHRva2VuIGlzIHRva2VuICdjJyAoMS4zOiAnYicvJ2MnIHByaW50ZXIgZm9yICdjJyBAIDMpCitTaGlmdGluZyB0b2tlbiAnYycgKDEuMzogJ2InLydjJyBwcmludGVyIGZvciAnYycgQCAzKQorRW50ZXJpbmcgc3RhdGUgNQorUmVhZGluZyBhIHRva2VuOiBOZXh0IHRva2VuIGlzIHRva2VuICdkJyAoMS40OiA8PiBwcmludGVyIGZvciAnZCcgQCA0KQorU2hpZnRpbmcgdG9rZW4gJ2QnICgxLjQ6IDw+IHByaW50ZXIgZm9yICdkJyBAIDQpCitFbnRlcmluZyBzdGF0ZSA2CitSZWFkaW5nIGEgdG9rZW46IE5vdyBhdCBlbmQgb2YgaW5wdXQuCisxLjU6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkZW5kLCBleHBlY3RpbmcgJ2UnCitFcnJvcjogcG9wcGluZyB0b2tlbiAnZCcgKDEuNDogPD4gcHJpbnRlciBmb3IgJ2QnIEAgNCkKK1N0YWNrIG5vdyAwIDEgMyA1CitFcnJvcjogcG9wcGluZyB0b2tlbiAnYycgKDEuMzogJ2InLydjJyBwcmludGVyIGZvciAnYycgQCAzKQorU3RhY2sgbm93IDAgMSAzCitFcnJvcjogcG9wcGluZyB0b2tlbiAnYicgKDEuMjogJ2InLydjJyBwcmludGVyIGZvciAnYicgQCAyKQorU3RhY2sgbm93IDAgMQorRXJyb3I6IHBvcHBpbmcgdG9rZW4gJ2EnICgxLjE6IDw+IHByaW50ZXIgZm9yICdhJyBAIDEpCitTdGFjayBub3cgMAorQ2xlYW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQgdG9rZW4gJGVuZCAoMS41OiApCitTdGFjayBub3cgMAorXV0pCisKK0FUX0JJU09OX09QVElPTl9QT1BERUZTCitBVF9DTEVBTlVQCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIERlZmF1bHQgdGFnZ2VkIGFuZCBwZXItdHlwZSAlcHJpbnRlciBhbmQgJWRlc3RydWN0b3IuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1NFVFVQKFtEZWZhdWx0IHRhZ2dlZCBhbmQgcGVyLXR5cGUgJXByaW50ZXIgYW5kICVkZXN0cnVjdG9yXSkKK0FUX0JJU09OX09QVElPTl9QVVNIREVGUworQVRfREFUQV9HUkFNTUFSKFtbaW5wdXQueV1dLAorW1slZXJyb3ItdmVyYm9zZQorJWRlYnVnCisKKyV7CisjIGluY2x1ZGUgPHN0ZGlvLmg+CisjIGluY2x1ZGUgPHN0ZGxpYi5oPgorXUFUX1lZRVJST1JfREVDTEFSRVsKK11BVF9ZWUxFWF9ERUNMQVJFWworIyBkZWZpbmUgVVNFKFNZTSkKKyV9CisKKyVwcmludGVyIHsKKyAgZnByaW50ZiAoeXlvdXRwdXQsICI8PiBwcmludGVyIHNob3VsZCBub3QgYmUgY2FsbGVkLlxuIik7Cit9IDw+CisKKyV1bmlvbiB7IGludCBmaWVsZDA7IGludCBmaWVsZDE7IGludCBmaWVsZDI7IH0KKyV0eXBlIDxmaWVsZDA+IHN0YXJ0ICdhJyAnZycKKyV0eXBlIDxmaWVsZDE+ICdlJworJXR5cGUgPGZpZWxkMj4gJ2YnCislcHJpbnRlciB7CisgIGZwcmludGYgKHl5b3V0cHV0LCAiPCo+LzxmaWVsZDI+L2UgcHJpbnRlciIpOworfSA8Kj4gJ2UnIDxmaWVsZDI+CislZGVzdHJ1Y3RvciB7CisgIGZwcmludGYgKHN0ZG91dCwgIjwqPi88ZmllbGQyPi9lIGRlc3RydWN0b3IuXG4iKTsKK30gPCo+ICdlJyA8ZmllbGQyPgorCisldHlwZSA8ZmllbGQxPiAnYicKKyVwcmludGVyIHsgZnByaW50ZiAoeXlvdXRwdXQsICI8ZmllbGQxPiBwcmludGVyIik7IH0gPGZpZWxkMT4KKyVkZXN0cnVjdG9yIHsgZnByaW50ZiAoc3Rkb3V0LCAiPGZpZWxkMT4gZGVzdHJ1Y3Rvci5cbiIpOyB9IDxmaWVsZDE+CisKKyV0eXBlIDxmaWVsZDA+ICdjJworJXByaW50ZXIgeyBmcHJpbnRmICh5eW91dHB1dCwgIidjJyBwcmludGVyIik7IH0gJ2MnCislZGVzdHJ1Y3RvciB7IGZwcmludGYgKHN0ZG91dCwgIidjJyBkZXN0cnVjdG9yLlxuIik7IH0gJ2MnCisKKyV0eXBlIDxmaWVsZDE+ICdkJworJXByaW50ZXIgeyBmcHJpbnRmICh5eW91dHB1dCwgIidkJyBwcmludGVyIik7IH0gJ2QnCislZGVzdHJ1Y3RvciB7IGZwcmludGYgKHN0ZG91dCwgIidkJyBkZXN0cnVjdG9yLlxuIik7IH0gJ2QnCisKKyVkZXN0cnVjdG9yIHsKKyAgZnByaW50ZiAoeXlvdXRwdXQsICI8PiBkZXN0cnVjdG9yIHNob3VsZCBub3QgYmUgY2FsbGVkLlxuIik7Cit9IDw+CisKKyUlCisKK3N0YXJ0OgorICAnYScgJ2InICdjJyAnZCcgJ2UnICdmJyAnZycKKyAgICB7CisgICAgICBVU0UoKCQxLCAkMiwgJDMsICQ0LCAkNSwgJDYsICQ3KSk7CisgICAgICAkJCA9ICdTJzsKKyAgICB9CisgIDsKKworJSUKK11BVF9ZWUVSUk9SX0RFRklORVsKK11BVF9ZWUxFWF9ERUZJTkUoWyJhYmNkZWYiXSlbCisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgeXlkZWJ1ZyA9IDE7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorXV0pCisKK0FUX0JJU09OX0NIRUNLKFstbyBpbnB1dC5jIGlucHV0LnldKQorQVRfQ09NUElMRShbaW5wdXRdKQorQVRfUEFSU0VSX0NIRUNLKFsuL2lucHV0XSwgMSwKK1tbPCo+LzxmaWVsZDI+L2UgZGVzdHJ1Y3Rvci4KKzwqPi88ZmllbGQyPi9lIGRlc3RydWN0b3IuCisnZCcgZGVzdHJ1Y3Rvci4KKydjJyBkZXN0cnVjdG9yLgorPGZpZWxkMT4gZGVzdHJ1Y3Rvci4KKzwqPi88ZmllbGQyPi9lIGRlc3RydWN0b3IuCitdXSwKK1tbU3RhcnRpbmcgcGFyc2UKK0VudGVyaW5nIHN0YXRlIDAKK1JlYWRpbmcgYSB0b2tlbjogTmV4dCB0b2tlbiBpcyB0b2tlbiAnYScgKDwqPi88ZmllbGQyPi9lIHByaW50ZXIpCitTaGlmdGluZyB0b2tlbiAnYScgKDwqPi88ZmllbGQyPi9lIHByaW50ZXIpCitFbnRlcmluZyBzdGF0ZSAxCitSZWFkaW5nIGEgdG9rZW46IE5leHQgdG9rZW4gaXMgdG9rZW4gJ2InICg8ZmllbGQxPiBwcmludGVyKQorU2hpZnRpbmcgdG9rZW4gJ2InICg8ZmllbGQxPiBwcmludGVyKQorRW50ZXJpbmcgc3RhdGUgMworUmVhZGluZyBhIHRva2VuOiBOZXh0IHRva2VuIGlzIHRva2VuICdjJyAoJ2MnIHByaW50ZXIpCitTaGlmdGluZyB0b2tlbiAnYycgKCdjJyBwcmludGVyKQorRW50ZXJpbmcgc3RhdGUgNQorUmVhZGluZyBhIHRva2VuOiBOZXh0IHRva2VuIGlzIHRva2VuICdkJyAoJ2QnIHByaW50ZXIpCitTaGlmdGluZyB0b2tlbiAnZCcgKCdkJyBwcmludGVyKQorRW50ZXJpbmcgc3RhdGUgNgorUmVhZGluZyBhIHRva2VuOiBOZXh0IHRva2VuIGlzIHRva2VuICdlJyAoPCo+LzxmaWVsZDI+L2UgcHJpbnRlcikKK1NoaWZ0aW5nIHRva2VuICdlJyAoPCo+LzxmaWVsZDI+L2UgcHJpbnRlcikKK0VudGVyaW5nIHN0YXRlIDcKK1JlYWRpbmcgYSB0b2tlbjogTmV4dCB0b2tlbiBpcyB0b2tlbiAnZicgKDwqPi88ZmllbGQyPi9lIHByaW50ZXIpCitTaGlmdGluZyB0b2tlbiAnZicgKDwqPi88ZmllbGQyPi9lIHByaW50ZXIpCitFbnRlcmluZyBzdGF0ZSA4CitSZWFkaW5nIGEgdG9rZW46IE5vdyBhdCBlbmQgb2YgaW5wdXQuCitzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJGVuZCwgZXhwZWN0aW5nICdnJworRXJyb3I6IHBvcHBpbmcgdG9rZW4gJ2YnICg8Kj4vPGZpZWxkMj4vZSBwcmludGVyKQorU3RhY2sgbm93IDAgMSAzIDUgNiA3CitFcnJvcjogcG9wcGluZyB0b2tlbiAnZScgKDwqPi88ZmllbGQyPi9lIHByaW50ZXIpCitTdGFjayBub3cgMCAxIDMgNSA2CitFcnJvcjogcG9wcGluZyB0b2tlbiAnZCcgKCdkJyBwcmludGVyKQorU3RhY2sgbm93IDAgMSAzIDUKK0Vycm9yOiBwb3BwaW5nIHRva2VuICdjJyAoJ2MnIHByaW50ZXIpCitTdGFjayBub3cgMCAxIDMKK0Vycm9yOiBwb3BwaW5nIHRva2VuICdiJyAoPGZpZWxkMT4gcHJpbnRlcikKK1N0YWNrIG5vdyAwIDEKK0Vycm9yOiBwb3BwaW5nIHRva2VuICdhJyAoPCo+LzxmaWVsZDI+L2UgcHJpbnRlcikKK1N0YWNrIG5vdyAwCitDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCB0b2tlbiAkZW5kICgpCitTdGFjayBub3cgMAorXV0pCisKK0FUX0JJU09OX09QVElPTl9QT1BERUZTCitBVF9DTEVBTlVQCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBEZWZhdWx0ICVwcmludGVyIGFuZCAlZGVzdHJ1Y3RvciBmb3IgdXNlci1kZWZpbmVkIGVuZCB0b2tlbi4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1NFVFVQKFtEZWZhdWx0ICVwcmludGVyIGFuZCAlZGVzdHJ1Y3RvciBmb3IgdXNlci1kZWZpbmVkIGVuZCB0b2tlbl0pCisKKyMgX0FUX0NIRUNLX0RFRkFVTFRfUFJJTlRFUl9BTkRfREVTVFJVQ1RPUl9GT1JfRU5EX1RPS0VOKFRZUEVEKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19BVF9DSEVDS19ERUZBVUxUX1BSSU5URVJfQU5EX0RFU1RSVUNUT1JfRk9SX0VORF9UT0tFTl0sCitbbTRfaWYoJDEsIDAsCisgIFttNF9wdXNoZGVmKFtraW5kXSwgW10pIG00X3B1c2hkZWYoW25vdF9raW5kXSwgWypdKV0sCisgIFttNF9wdXNoZGVmKFtraW5kXSwgWypdKSBtNF9wdXNoZGVmKFtub3Rfa2luZF0sIFtdKV0pCisKK0FUX0JJU09OX09QVElPTl9QVVNIREVGUyhbJWxvY2F0aW9uc10pCitBVF9EQVRBX0dSQU1NQVIoW1tpbnB1dF1dJDFbWy55XV0sCitbWyVlcnJvci12ZXJib3NlCislZGVidWcKKyVsb2NhdGlvbnMKKworJXsKKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyMgaW5jbHVkZSA8c3RkbGliLmg+CitdQVRfWVlFUlJPUl9ERUNMQVJFWworXUFUX1lZTEVYX0RFQ0xBUkVbCisjIGRlZmluZSBVU0UoU1lNKQorJX0KKworJWRlc3RydWN0b3IgeworICBmcHJpbnRmICh5eW91dHB1dCwgIjxdXW5vdF9raW5kW1s+IGRlc3RydWN0b3Igc2hvdWxkIG5vdCBiZSBjYWxsZWQuXG4iKTsKK30gPF1dbm90X2tpbmRbWz4KKworJXRva2VuIEVORCAwCislcHJpbnRlciB7CisgIGZwcmludGYgKHl5b3V0cHV0LCAiPF1da2luZFtbPiBmb3IgJyVjJyBAICVkIiwgJCQsIEAkLmZpcnN0X2NvbHVtbik7Cit9IDxdXWtpbmRbWz4KKyVkZXN0cnVjdG9yIHsKKyAgZnByaW50ZiAoc3Rkb3V0LCAiPF1da2luZFtbPiBmb3IgJyVjJyBAICVkLlxuIiwgJCQsIEAkLmZpcnN0X2NvbHVtbik7Cit9IDxdXWtpbmRbWz4KKworJXByaW50ZXIgeworICBmcHJpbnRmICh5eW91dHB1dCwgIjxdXW5vdF9raW5kW1s+IHByaW50ZXIgc2hvdWxkIG5vdCBiZSBjYWxsZWQuXG4iKTsKK30gPF1dbm90X2tpbmRbWz4KKworXV1tNF9pZigkMSwgMCwgW1tbCitdXV0sCitbW1sldW5pb24geyBjaGFyIHRhZzsgfQorJXR5cGUgPHRhZz4gc3RhcnQgRU5EXV1dKVtbCisKKyUlCisKK3N0YXJ0OiB7ICQkID0gJ1MnOyB9IDsKKworJSUKKworc3RhdGljIGludAoreXlsZXggKHZvaWQpCit7CisgIHN0YXRpYyBpbnQgY2FsbGVkOworICBpZiAoY2FsbGVkKyspCisgICAgYWJvcnQgKCk7CisgIHl5bHZhbF1dbTRfaWYoJDEsIDAsLCBbW1sudGFnXV1dKVtbID0gJ0UnOworICB5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGxvYy5sYXN0X2xpbmUgPSAxOworICB5eWxsb2MuZmlyc3RfY29sdW1uID0geXlsbG9jLmxhc3RfY29sdW1uID0gMTsKKyAgcmV0dXJuIDA7Cit9CitdQVRfWVlFUlJPUl9ERUZJTkVbCisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgeXlkZWJ1ZyA9IDE7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorXV0pCitBVF9CSVNPTl9PUFRJT05fUE9QREVGUworCitBVF9CSVNPTl9DSEVDSyhbLW8gaW5wdXQkMS5jIGlucHV0JDEueV0pCitBVF9DT01QSUxFKFtpbnB1dCQxXSkKK0FUX1BBUlNFUl9DSEVDSyhbLi9pbnB1dCQxXSwgMCwKK1tbPF1da2luZFtbPiBmb3IgJ0UnIEAgMS4KKzxdXWtpbmRbWz4gZm9yICdTJyBAIDEuCitdXSwKK1tbU3RhcnRpbmcgcGFyc2UKK0VudGVyaW5nIHN0YXRlIDAKK1JlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgMSAobGluZSA0Mik6CistPiAkJCA9IG50ZXJtIHN0YXJ0ICgxLjE6IDxdXWtpbmRbWz4gZm9yICdTJyBAIDEpCitTdGFjayBub3cgMAorRW50ZXJpbmcgc3RhdGUgMQorUmVhZGluZyBhIHRva2VuOiBOb3cgYXQgZW5kIG9mIGlucHV0LgorU2hpZnRpbmcgdG9rZW4gRU5EICgxLjE6IDxdXWtpbmRbWz4gZm9yICdFJyBAIDEpCitFbnRlcmluZyBzdGF0ZSAyCitTdGFjayBub3cgMCAxIDIKK0NsZWFudXA6IHBvcHBpbmcgdG9rZW4gRU5EICgxLjE6IDxdXWtpbmRbWz4gZm9yICdFJyBAIDEpCitDbGVhbnVwOiBwb3BwaW5nIG50ZXJtIHN0YXJ0ICgxLjE6IDxdXWtpbmRbWz4gZm9yICdTJyBAIDEpCitdXSkKKworbTRfcG9wZGVmKFtraW5kXSkKK200X3BvcGRlZihbbm90X2tpbmRdKQorXSkKKworX0FUX0NIRUNLX0RFRkFVTFRfUFJJTlRFUl9BTkRfREVTVFJVQ1RPUl9GT1JfRU5EX1RPS0VOKDApCitfQVRfQ0hFQ0tfREVGQVVMVF9QUklOVEVSX0FORF9ERVNUUlVDVE9SX0ZPUl9FTkRfVE9LRU4oMSkKKworQVRfQ0xFQU5VUAorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBEZWZhdWx0ICVwcmludGVyIGFuZCAlZGVzdHJ1Y3RvciBhcmUgbm90IGZvciBlcnJvciBvciAkdW5kZWZpbmVkLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitBVF9TRVRVUChbRGVmYXVsdCAlcHJpbnRlciBhbmQgJWRlc3RydWN0b3IgYXJlIG5vdCBmb3IgZXJyb3Igb3IgJHVuZGVmaW5lZF0pCisKKyMgSWYgQmlzb24gd2VyZSB0byBhcHBseSB0aGUgZGVmYXVsdCAlcHJpbnRlciBhbmQgJWRlc3RydWN0b3IgdG8gdGhlIGVycm9yCisjIHRva2VuIG9yIHRvICR1bmRlZmluZWQ6CisjICAgLSBGb3IgdGhlIGVycm9yIHRva2VuOgorIyAgICAgLSBJdCB3b3VsZCBnZW5lcmF0ZSB3YXJuaW5ncyBmb3IgdW51c2VkICRuLgorIyAgICAgLSBJdCB3b3VsZCBpbnZva2UgdGhlICVwcmludGVyIGFuZCAlZGVzdHJ1Y3RvciBvbiB0aGUgZXJyb3IgdG9rZW4ncworIyAgICAgICBzZW1hbnRpYyB2YWx1ZSwgd2hpY2ggd291bGQgYmUgaW5pdGlhbGl6ZWQgZnJvbSB0aGUgbG9va2FoZWFkLCB3aGljaAorIyAgICAgICB3b3VsZCBiZSBkZXN0cm95ZWQgc2VwYXJhdGVseS4KKyMgICAtIEZvciAkdW5kZWZpbmVkLCB3aG8ga25vd3Mgd2hhdCB0aGUgc2VtYW50aWMgdmFsdWUgd291bGQgYmUuCitBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMKK0FUX0RBVEFfR1JBTU1BUihbW2lucHV0LnldXSwKK1tbJWRlYnVnCisKKyV7CisjIGluY2x1ZGUgPHN0ZGlvLmg+CisjIGluY2x1ZGUgPHN0ZGxpYi5oPgorXUFUX1lZRVJST1JfREVDTEFSRVsKK11BVF9ZWUxFWF9ERUNMQVJFWworIyBkZWZpbmUgVVNFKFNZTSkKKyV9CisKKyVwcmludGVyIHsKKyAgZnByaW50ZiAoeXlvdXRwdXQsICInJWMnIiwgJCQpOworfSA8PiA8Kj4KKyVkZXN0cnVjdG9yIHsKKyAgZnByaW50ZiAoc3RkZXJyLCAiREVTVFJPWSAnJWMnXG4iLCAkJCk7Cit9IDw+IDwqPgorCislJQorCitzdGFydDoKKyAgeyAkJCA9ICdTJzsgfQorICAvKiBJbiBvcmRlciB0byByZXZlYWwgdGhlIHByb2JsZW1zIHRoYXQgdGhpcyBidWcgY2F1c2VkIGR1cmluZyBwYXJzaW5nLCBhZGQKKyAgICogJDIgdG8gVVNFLiAgKi8KKyAgfCAnYScgZXJyb3IgJ2InICdjJyB7IFVTRSgoJDEsICQzLCAkNCkpOyAkJCA9ICdTJzsgfQorICA7CisKKyUlCitdQVRfWVlFUlJPUl9ERUZJTkVbCitdQVRfWVlMRVhfREVGSU5FKFsiYWJkIl0sIFt5eWx2YWwgPSByZXNdKVsKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgeXlkZWJ1ZyA9IDE7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorXV0pCitBVF9CSVNPTl9PUFRJT05fUE9QREVGUworCitBVF9CSVNPTl9DSEVDSyhbLW8gaW5wdXQuYyBpbnB1dC55XSkKK0FUX0NPTVBJTEUoW2lucHV0XSkKK0FUX1BBUlNFUl9DSEVDSyhbLi9pbnB1dF0sIFsxXSwgW10sCitbW1N0YXJ0aW5nIHBhcnNlCitFbnRlcmluZyBzdGF0ZSAwCitSZWFkaW5nIGEgdG9rZW46IE5leHQgdG9rZW4gaXMgdG9rZW4gJ2EnICgnYScpCitTaGlmdGluZyB0b2tlbiAnYScgKCdhJykKK0VudGVyaW5nIHN0YXRlIDEKK1JlYWRpbmcgYSB0b2tlbjogTmV4dCB0b2tlbiBpcyB0b2tlbiAnYicgKCdiJykKK3N5bnRheCBlcnJvcgorU2hpZnRpbmcgdG9rZW4gZXJyb3IgKCkKK0VudGVyaW5nIHN0YXRlIDMKK05leHQgdG9rZW4gaXMgdG9rZW4gJ2InICgnYicpCitTaGlmdGluZyB0b2tlbiAnYicgKCdiJykKK0VudGVyaW5nIHN0YXRlIDUKK1JlYWRpbmcgYSB0b2tlbjogTmV4dCB0b2tlbiBpcyB0b2tlbiAkdW5kZWZpbmVkICgpCitFcnJvcjogcG9wcGluZyB0b2tlbiAnYicgKCdiJykKK0RFU1RST1kgJ2InCitTdGFjayBub3cgMCAxIDMKK0Vycm9yOiBwb3BwaW5nIHRva2VuIGVycm9yICgpCitTdGFjayBub3cgMCAxCitTaGlmdGluZyB0b2tlbiBlcnJvciAoKQorRW50ZXJpbmcgc3RhdGUgMworTmV4dCB0b2tlbiBpcyB0b2tlbiAkdW5kZWZpbmVkICgpCitFcnJvcjogZGlzY2FyZGluZyB0b2tlbiAkdW5kZWZpbmVkICgpCitFcnJvcjogcG9wcGluZyB0b2tlbiBlcnJvciAoKQorU3RhY2sgbm93IDAgMQorU2hpZnRpbmcgdG9rZW4gZXJyb3IgKCkKK0VudGVyaW5nIHN0YXRlIDMKK1JlYWRpbmcgYSB0b2tlbjogTm93IGF0IGVuZCBvZiBpbnB1dC4KK0NsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIHRva2VuICRlbmQgKCkKK1N0YWNrIG5vdyAwIDEgMworQ2xlYW51cDogcG9wcGluZyB0b2tlbiBlcnJvciAoKQorQ2xlYW51cDogcG9wcGluZyB0b2tlbiAnYScgKCdhJykKK0RFU1RST1kgJ2EnCitdXSkKKworQVRfQ0xFQU5VUAorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBEZWZhdWx0ICVwcmludGVyIGFuZCAlZGVzdHJ1Y3RvciBhcmUgbm90IGZvciAkYWNjZXB0LiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitBVF9TRVRVUChbRGVmYXVsdCAlcHJpbnRlciBhbmQgJWRlc3RydWN0b3IgYXJlIG5vdCBmb3IgJGFjY2VwdF0pCisKKyMgSWYgWVlTVFlQRSBpcyBhIHVuaW9uIGFuZCBCaXNvbiB3ZXJlIHRvIGFwcGx5IHRoZSBkZWZhdWx0ICVwcmludGVyIGFuZAorIyAlZGVzdHJ1Y3RvciB0byAkYWNjZXB0OgorIyAgIC0gVGhlICVwcmludGVyIGFuZCAlZGVzdHJ1Y3RvciBjb2RlIGdlbmVyYXRlZCBmb3IgJGFjY2VwdCB3b3VsZCBhbHdheXMgYmUKKyMgICAgIGRlYWQgY29kZSBiZWNhdXNlICRhY2NlcHQgaXMgY3VycmVudGx5IG5ldmVyIHNoaWZ0ZWQgb250byB0aGUgc3RhY2suCisjICAgLSAkJCBmb3IgJGFjY2VwdCB3b3VsZCBhbHdheXMgYmUgb2YgdHlwZSBZWVNUWVBFIGJlY2F1c2UgaXQncyBub3QgcG9zc2libGUKKyMgICAgIHRvIGRlY2xhcmUgYCV0eXBlIDxmaWVsZD4gJGFjY2VwdCcuICAoQWxzbyB0cnVlIGZvciAkdW5kZWZpbmVkLikKKyMgICAtIFRodXMsIHRoZSBjb21waWxlciBtaWdodCBjb21wbGFpbiB0aGF0IHRoZSB1c2VyIGNvZGUgYXNzdW1lcyB0aGUgd3JvbmcKKyMgICAgIHR5cGUgZm9yICQkIHNpbmNlIHRoZSBjb2RlIG1pZ2h0IGFzc3VtZSB0aGUgdHlwZSBhc3NvY2lhdGVkIHdpdGggYQorIyAgICAgc3BlY2lmaWMgdW5pb24gZmllbGQsIHdoaWNoIGlzIGVzcGVjaWFsbHkgcmVhc29uYWJsZSBpbiBDKysgc2luY2UgdGhhdAorIyAgICAgdHlwZSBtYXkgYmUgYSBiYXNlIHR5cGUuICBUaGlzIHRlc3QgY2FzZSBjaGVja3MgZm9yIHRoaXMgcHJvYmxlbS4gIChBbHNvCisjICAgICB0cnVlIGZvciAkdW5kZWZpbmVkIGFuZCB0aGUgZXJyb3IgdG9rZW4sIHNvIHRoZXJlIGFyZSB0aHJlZSB3YXJuaW5ncyBmb3IKKyMgICAgICVwcmludGVyIGFuZCB0aHJlZSBmb3IgJWRlc3RydWN0b3IuKQorCitBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMKK0FUX0RBVEFfR1JBTU1BUihbW2lucHV0LnldXSwKK1tbJWRlYnVnIC8qIFNvIHRoYXQgJXByaW50ZXIgaXMgYWN0dWFsbHkgY29tcGlsZWQuICAqLworCisleworIyBpbmNsdWRlIDxzdGRpby5oPgorIyBpbmNsdWRlIDxzdGRsaWIuaD4KK11BVF9ZWUVSUk9SX0RFQ0xBUkVbCitdQVRfWVlMRVhfREVDTEFSRVsKKyMgZGVmaW5lIFVTRShTWU0pCislfQorCislcHJpbnRlciB7CisgIGNoYXIgY2hyID0gJCQ7CisgIGZwcmludGYgKHl5b3V0cHV0LCAiJyVjJyIsIGNocik7Cit9IDw+IDwqPgorJWRlc3RydWN0b3IgeworICBjaGFyIGNociA9ICQkOworICBmcHJpbnRmIChzdGRlcnIsICJERVNUUk9ZICclYydcbiIsIGNocik7Cit9IDw+IDwqPgorCisldW5pb24geyBjaGFyIGNocjsgfQorJXR5cGUgPGNocj4gc3RhcnQKKworJSUKKworc3RhcnQ6IHsgVVNFKCQkKTsgfSA7CisKKyUlCitdQVRfWVlFUlJPUl9ERUZJTkVbCitdQVRfWVlMRVhfREVGSU5FWworaW50CittYWluICh2b2lkKQoreworICByZXR1cm4geXlwYXJzZSAoKTsKK30KK11dKQorQVRfQklTT05fT1BUSU9OX1BPUERFRlMKKworQVRfQklTT05fQ0hFQ0soWy1vIGlucHV0LmMgaW5wdXQueV0pCitBVF9DT01QSUxFKFtpbnB1dF0pCisKK0FUX0NMRUFOVVAKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRGVmYXVsdCAlcHJpbnRlciBhbmQgJWRlc3RydWN0b3IgZm9yIG1pZC1ydWxlIHZhbHVlcy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworQVRfU0VUVVAoW0RlZmF1bHQgJXByaW50ZXIgYW5kICVkZXN0cnVjdG9yIGZvciBtaWQtcnVsZSB2YWx1ZXNdKQorCitBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMKK0FUX0RBVEFfR1JBTU1BUihbW2lucHV0LnldXSwKK1tbJWRlYnVnIC8qIFNvIHRoYXQgJXByaW50ZXIgaXMgYWN0dWFsbHkgY29tcGlsZWQuICAqLworCisleworIyBpbmNsdWRlIDxzdGRpby5oPgorIyBpbmNsdWRlIDxzdGRsaWIuaD4KK11BVF9ZWUVSUk9SX0RFQ0xBUkVbCitdQVRfWVlMRVhfREVDTEFSRVsKKyMgZGVmaW5lIFVTRShTWU0pCisjIGRlZmluZSBZWUxUWVBFIGludAorIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKSAodm9pZCkoUmhzKQorIyBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKQorJX0KKworJXByaW50ZXIgeyBmcHJpbnRmICh5eW91dHB1dCwgIiVkIiwgQCQpOyB9IDw+CislZGVzdHJ1Y3RvciB7IGZwcmludGYgKHN0ZGVyciwgIkRFU1RST1kgJWRcbiIsIEAkKTsgfSA8PgorJXByaW50ZXIgeyBmcHJpbnRmICh5eW91dHB1dCwgIjwqPiBwcmludGVyIHNob3VsZCBub3QgYmUgY2FsbGVkIik7IH0gPCo+CislZGVzdHJ1Y3RvciB7IGZwcmludGYgKHl5b3V0cHV0LCAiPCo+IGRlc3RydWN0b3Igc2hvdWxkIG5vdCBiZSBjYWxsZWQiKTsgfSA8Kj4KKworJSUKKworc3RhcnQ6CisgIHsgICAgICAgICAgIEAkID0gMTsgfSAvLyBOb3Qgc2V0IG9yIHVzZWQuCisgIHsgVVNFICgkJCk7IEAkID0gMjsgfSAvLyBCb3RoIHNldCBhbmQgdXNlZC4KKyAgeyBVU0UgKCQkKTsgQCQgPSAzOyB9IC8vIE9ubHkgc2V0LgorICB7ICAgICAgICAgICBAJCA9IDQ7IH0gLy8gT25seSB1c2VkLgorICAnYycKKyAgeyBVU0UgKCgkJCwgJDIsICQ0LCAkNSkpOyBAJCA9IDA7IH0KKyAgOworCislJQorXUFUX1lZRVJST1JfREVGSU5FWworXUFUX1lZTEVYX0RFRklORVsKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgeXlkZWJ1ZyA9IDE7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorXV0pCitBVF9CSVNPTl9PUFRJT05fUE9QREVGUworCitBVF9CSVNPTl9DSEVDSyhbLW8gaW5wdXQuYyBpbnB1dC55XSwgMCwsCitbW2lucHV0Lnk6MzMuMy0yMzogd2FybmluZzogdW5zZXQgdmFsdWU6ICQkCitpbnB1dC55OjMyLjMtMjM6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDMKK11dKQorCitBVF9CSVNPTl9DSEVDSyhbLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnldLCAwLCwKK1tbaW5wdXQueTozMy4zLTIzOiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogJCQKKyAgIHsgICAgICAgICAgIEAkID0gNDsgfSAvLyBPbmx5IHVzZWQuCisgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MzIuMy0yMzogd2FybmluZzogdW51c2VkIHZhbHVlOiAkMworICAgeyBVU0UgKCQkKTsgQCQgPSAzOyB9IC8vIE9ubHkgc2V0LgorICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitdXSkKKworQVRfQ09NUElMRShbaW5wdXRdKQorQVRfUEFSU0VSX0NIRUNLKFsuL2lucHV0XSwgMSwsCitbW1N0YXJ0aW5nIHBhcnNlCitFbnRlcmluZyBzdGF0ZSAwCitSZWR1Y2luZyBzdGFjayBieSBydWxlIDEgKGxpbmUgMzApOgorLT4gJCQgPSBudGVybSAkQDEgKDogKQorU3RhY2sgbm93IDAKK0VudGVyaW5nIHN0YXRlIDIKK1JlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgMiAobGluZSAzMSk6CistPiAkJCA9IG50ZXJtIEAyICg6IDIpCitTdGFjayBub3cgMCAyCitFbnRlcmluZyBzdGF0ZSA0CitSZWR1Y2luZyBzdGFjayBieSBydWxlIDMgKGxpbmUgMzIpOgorLT4gJCQgPSBudGVybSBAMyAoOiAzKQorU3RhY2sgbm93IDAgMiA0CitFbnRlcmluZyBzdGF0ZSA1CitSZWR1Y2luZyBzdGFjayBieSBydWxlIDQgKGxpbmUgMzMpOgorLT4gJCQgPSBudGVybSBANCAoOiA0KQorU3RhY2sgbm93IDAgMiA0IDUKK0VudGVyaW5nIHN0YXRlIDYKK1JlYWRpbmcgYSB0b2tlbjogTm93IGF0IGVuZCBvZiBpbnB1dC4KK3N5bnRheCBlcnJvcgorRXJyb3I6IHBvcHBpbmcgbnRlcm0gQDQgKDogNCkKK0RFU1RST1kgNAorU3RhY2sgbm93IDAgMiA0IDUKK0Vycm9yOiBwb3BwaW5nIG50ZXJtIEAzICg6IDMpCitERVNUUk9ZIDMKK1N0YWNrIG5vdyAwIDIgNAorRXJyb3I6IHBvcHBpbmcgbnRlcm0gQDIgKDogMikKK0RFU1RST1kgMgorU3RhY2sgbm93IDAgMgorRXJyb3I6IHBvcHBpbmcgbnRlcm0gJEAxICg6ICkKK1N0YWNrIG5vdyAwCitDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCB0b2tlbiAkZW5kICg6ICkKK1N0YWNrIG5vdyAwCitdXSkKKworQVRfQ0xFQU5VUAorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBAJCBpbXBsaWVzICVsb2NhdGlvbnMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBCaXNvbiBvbmNlIGZvcmdvdCB0byBjaGVjayBmb3IgQCQgaW4gYWN0aW9ucyBvdGhlciB0aGFuIHNlbWFudGljIGFjdGlvbnMuCisKKyMgQVRfQ0hFQ0tfQUNUSU9OX0xPQ0FUSU9OUyhBQ1RJT04tRElSRUNUSVZFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW0FUX0NIRUNLX0FDVElPTl9MT0NBVElPTlNdLAorW0FUX1NFVFVQKFtbQCQgaW4gXSQxWyBpbXBsaWVzICVsb2NhdGlvbnNdXSkKK0FUX0JJU09OX09QVElPTl9QVVNIREVGUworQVRfREFUQV9HUkFNTUFSKFtbaW5wdXQueV1dLAorW1slY29kZSB7CisgICNpbmNsdWRlIDxzdGRpby5oPgorXUFUX1lZRVJST1JfREVDTEFSRVsKK11BVF9ZWUxFWF9ERUNMQVJFWworfQorCislZGVidWcKKworXSQxWyB7CisgIGZwcmludGYgKHN0ZGVyciwgIiVkXG4iLCBAJC5maXJzdF9saW5lKTsKK30gXW00X2lmKCQxLCBbJWluaXRpYWwtYWN0aW9uXSwgW10sIFtbc3RhcnRdXSlbCisKKyUlCisKK3N0YXJ0OiAgOworCislJQorCitzdGF0aWMgaW50Cit5eWxleCAodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK11BVF9ZWUVSUk9SX0RFRklORVsKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CitdXSkKKworQVRfQklTT05fQ0hFQ0soW1stbyBpbnB1dC5jIGlucHV0LnldXSkKK0FUX0NPTVBJTEUoW1tpbnB1dF1dKQorQVRfQklTT05fT1BUSU9OX1BPUERFRlMKK0FUX0NMRUFOVVBdKQorCitBVF9DSEVDS19BQ1RJT05fTE9DQVRJT05TKFtbJWluaXRpYWwtYWN0aW9uXV0pCitBVF9DSEVDS19BQ1RJT05fTE9DQVRJT05TKFtbJWRlc3RydWN0b3JdXSkKK0FUX0NIRUNLX0FDVElPTl9MT0NBVElPTlMoW1slcHJpbnRlcl1dKQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFF1YWxpZmllZCAkJCBpbiBhY3Rpb25zLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBDaGVjayB0aGF0IHdlIGNhbiB1c2VkIHF1YWxpZmllZCAkJCAodi5nLiwgJDx0eXBlPiQpIG5vdCBvbmx5IGluCisjIHJ1bGUgYWN0aW9ucywgYnV0IGFsc28gd2hlcmUgJCQgaXMgdmFsaWQ6ICVwcmludGVyIGFuZCAlZGVzdHJ1Y3Rvci4KKyMKKyMgRklYTUU6IE5vdCBhY3R1YWxseSBjaGVja2luZyAlZGVzdHJ1Y3RvciwgYnV0IGl0J3MgdGhlIHNhbWUgY29kZSBhcworIyAlcHJpbnRlci4uLgorIworIyBUbyBkbyB0aGF0LCB1c2UgYSBzZW1hbnRpYyB2YWx1ZSB0aGF0IGhhcyB0d28gZmllbGRzIChzZW1fdHlwZSksCisjIGRlY2xhcmUgc3ltYm9scyB0byBoYXZlIG9ubHkgb25lIG9mIHRoZXNlIHR5cGVzIChJTlQsIGZsb2F0KSwgYW5kCisjIHVzZSAkPHR5cGU+JCB0byBnZXQgdGhlIG90aGVyIG9uZS4gIEluY2x1ZGluZyBmb3Igc3ltYm9scyB0aGF0IGFyZQorIyBub3QgdHlwZWQgKFVOVFlQRUQpLgorCittNF9wdXNoZGVmKFtBVF9URVNUXSwKK1tBVF9TRVRVUChbW1F1YWxpZmllZCAkJCBpbiBhY3Rpb25zOiAkMV1dKQorCitBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMoWyVsb2NhdGlvbnMgJXNrZWxldG9uICIkMSJdKQorCitBVF9EQVRBX0dSQU1NQVIoW1tpbnB1dC55XV0sCitbWyVza2VsZXRvbiAiJDEiCislZGVmaW5lcyAgIC8vIEZJWE1FOiBNYW5kYXRlZCBieSBsYWxyMS5jYyBpbiBCaXNvbiAyLjYuCislbG9jYXRpb25zIC8vIEZJWE1FOiBNYW5kYXRlZCBieSBsYWxyMS5jYyBpbiBCaXNvbiAyLjYuCislZGVidWcKKyVjb2RlIHJlcXVpcmVzCit7CisgIHR5cGVkZWYgc3RydWN0IHNlbV90eXBlCisgIHsKKyAgICBpbnQgaXZhbDsKKyAgICBmbG9hdCBmdmFsOworICB9IHNlbV90eXBlOworCisjIGRlZmluZSBZWVNUWVBFIHNlbV90eXBlCisKK11BVF9TS0VMX0NDX0lGKFtbCisjIGluY2x1ZGUgPGlvc3RyZWFtPgorICBzdGF0aWMgdm9pZAorICByZXBvcnQgKHN0ZDo6b3N0cmVhbSYgeXlvLCBpbnQgaXZhbCwgZmxvYXQgZnZhbCkKKyAgeworICAgIHl5byA8PCAiaXZhbDogIiA8PCBpdmFsIDw8ICIsIGZ2YWw6ICIgPDwgIGZ2YWw7CisgIH0KK11dLCBbWworIyBpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZAorICByZXBvcnQgKEZJTEUqIHl5bywgaW50IGl2YWwsIGZsb2F0IGZ2YWwpCisgIHsKKyAgICBmcHJpbnRmICh5eW8sICJpdmFsOiAlZCwgZnZhbDogJTEuMWYiLCBpdmFsLCBmdmFsKTsKKyAgfQorXV0pWworfQorCislY29kZQoreworICBdQVRfWVlFUlJPUl9ERUNMQVJFWworICBdQVRfWVlMRVhfREVDTEFSRVsKK30KKworJXRva2VuIFVOVFlQRUQKKyV0b2tlbiA8aXZhbD4gSU5UCisldHlwZSA8ZnZhbD4gZmxvYXQKKyVwcmludGVyIHsgcmVwb3J0ICh5eW8sICQkLCAgICAgICAkPGZ2YWw+JCk7IH0gPGl2YWw+OworJXByaW50ZXIgeyByZXBvcnQgKHl5bywgJDxpdmFsPiQsICQkICAgICAgKTsgfSA8ZnZhbD47CislcHJpbnRlciB7IHJlcG9ydCAoeXlvLCAkPGl2YWw+JCwgJDxmdmFsPiQpOyB9IDw+OworCislaW5pdGlhbC1hY3Rpb24KK3sKKyAgJDxpdmFsPiQgPSA0MjsKKyAgJDxmdmFsPiQgPSA0LjI7Cit9CisKKyUlCitmbG9hdDogVU5UWVBFRCBJTlQKK3sKKyAgJCQgICAgICAgPSAkPGZ2YWw+MSArICQ8ZnZhbD4yOworICAkPGl2YWw+JCA9ICQ8aXZhbD4xICsgJF1bMjsKK307CislJQorXUFUX1lZRVJST1JfREVGSU5FWworXUFUX1lZTEVYX0RFRklORShBVF9TS0VMX0NDX0lGKFtbe3l5OjpwYXJzZXI6OnRva2VuOjpVTlRZUEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXk6OnBhcnNlcjo6dG9rZW46OklOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFT0Z9XV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1t7VU5UWVBFRCwgSU5ULCBFT0Z9XV0pLAorICAgICAgICAgICAgICAgICBbQVRfVkFMLml2YWwgPSB0b2tudW0gKiAxMDsgQVRfVkFMLmZ2YWwgPSB0b2tudW0gLyAxMC4wO10pWworaW50CittYWluICh2b2lkKQore11BVF9TS0VMX0NDX0lGKFtbCisgIHl5OjpwYXJzZXIgcDsKKyAgcC5zZXRfZGVidWdfbGV2ZWwoMSk7CisgIHJldHVybiBwLnBhcnNlICgpO11dLCBbWworICB5eWRlYnVnID0gMTsKKyAgcmV0dXJuIHl5cGFyc2UgKCk7XV0pWworfQorXV0pCisKK0FUX0ZVTExfQ09NUElMRShbW2lucHV0XV0pCitBVF9QQVJTRVJfQ0hFQ0soWy4vaW5wdXRdLCAwLCBbXSwgW3N0ZGVycl0pCisjIERvbid0IGJlIHRvbyBwaWNreSBvbiB0aGUgdHJhY2VzLCBHTFIgaXMgbm90IGV4YWN0bHkgdGhlIHNhbWUuICBLZWVwCisjIG9ubHkgdGhlIGxpbmVzIGZyb20gdGhlIHByaW50ZXIuCisjCisjIERvbid0IGNhcmUgYWJvdXQgbG9jYXRpb25zLiAgRklYTUU6IHJlbW92ZSB0aGVpciByZW1vdmFsIHdoZW4gQmlzb24KKyMgc3VwcG9ydHMgQysrIHdpdGhvdXQgbG9jYXRpb25zLgorQVRfQ0hFQ0soW1tzZWQgLW5lICdzLyhbLTAtOS5dKjogLygvOy9pdmFsOi9wJyBzdGRlcnJdXSwgMCwKK1tbUmVhZGluZyBhIHRva2VuOiBOZXh0IHRva2VuIGlzIHRva2VuIFVOVFlQRUQgKGl2YWw6IDEwLCBmdmFsOiAwLjEpCitTaGlmdGluZyB0b2tlbiBVTlRZUEVEIChpdmFsOiAxMCwgZnZhbDogMC4xKQorUmVhZGluZyBhIHRva2VuOiBOZXh0IHRva2VuIGlzIHRva2VuIElOVCAoaXZhbDogMjAsIGZ2YWw6IDAuMikKK1NoaWZ0aW5nIHRva2VuIElOVCAoaXZhbDogMjAsIGZ2YWw6IDAuMikKKyAgICRdWzEgPSB0b2tlbiBVTlRZUEVEIChpdmFsOiAxMCwgZnZhbDogMC4xKQorICAgJF1bMiA9IHRva2VuIElOVCAoaXZhbDogMjAsIGZ2YWw6IDAuMikKKy0+ICQkID0gbnRlcm0gZmxvYXQgKGl2YWw6IDMwLCBmdmFsOiAwLjMpCitDbGVhbnVwOiBwb3BwaW5nIG50ZXJtIGZsb2F0IChpdmFsOiAzMCwgZnZhbDogMC4zKQorXV0pCisKK0FUX0JJU09OX09QVElPTl9QT1BERUZTCisKK0FUX0NMRUFOVVAKK10pCisKK0FUX1RFU1QoW3lhY2MuY10pCitBVF9URVNUKFtnbHIuY10pCitBVF9URVNUKFtsYWxyMS5jY10pCitBVF9URVNUKFtnbHIuY2NdKQorCittNF9wb3BkZWYoW0FUX1RFU1RdKQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRml4IHVzZXIgYWN0aW9ucyB3aXRob3V0IGEgdHJhaWxpbmcgc2VtaWNvbG9uLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1NFVFVQKFtbRml4IHVzZXIgYWN0aW9ucyB3aXRob3V0IGEgdHJhaWxpbmcgc2VtaWNvbG9uXV0pCisKKyMgVGhpcyBmZWF0dXJlIGlzIHVuZG9jdW1lbnRlZCwgYnV0IHdlIGFjY2lkZW50YWxseSBicm9rZSBpdCBpbiAyLjNhLAorIyBhbmQgdGhlcmUgd2FzIGEgY29tcGxhaW50IGF0OgorIyA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDA4LTExL21zZzAwMDAxLmh0bWw+LgorQVRfQklTT05fT1BUSU9OX1BVU0hERUZTCitBVF9EQVRBKFtpbnB1dC55XSwKK1tbJSUKK3N0YXJ0OiB0ZXN0MiB0ZXN0MSB0ZXN0MCB0ZXN0YzsKKwordGVzdDIKKzogJ2EnIHsgc2VtaTsJCQkvKiBURVNUOk46MiAqLyB9Cit8ICdiJyB7IGlmICgwKSB7bm9fc2VtaX0JLyogVEVTVDpOOjIgKi8gfQorfCAnYycgeyBpZiAoMCkge3NlbWk7fQkJLyogVEVTVDpOOjIgKi8gfQorfCAnZCcgeyBzZW1pOyAgIG5vX3NlbWkJCS8qIFRFU1Q6WToyICovIH0KK3wgJ2UnIHsgc2VtaSgpOyBub19zZW1pKCkJLyogVEVTVDpZOjIgKi8gfQorfCAnZicgeyBzZW1pW107IG5vX3NlbWlbXQkvKiBURVNUOlk6MiAqLyB9Cit8ICdnJyB7IHNlbWkrKzsgbm9fc2VtaSsrCS8qIFRFU1Q6WToyICovIH0KK3wgJ2gnIHsge25vX3NlbWl9IG5vX3NlbWkJLyogVEVTVDpZOjIgKi8gfQorfCAnaScgeyB7c2VtaTt9ICAgbm9fc2VtaQkvKiBURVNUOlk6MiAqLyB9Cis7Cit0ZXN0MQorICA6ICdhJyB7IHNlbWk7CQkJLy8gVEVTVDpOOjEgOworfSB8ICdiJyB7IGlmICgwKSB7bm9fc2VtaX0JLy8gVEVTVDpOOjEgOworfSB8ICdjJyB7IGlmICgwKSB7c2VtaTt9CS8vIFRFU1Q6TjoxIDsKK30gfCAnZCcgeyBzZW1pOyAgIG5vX3NlbWkJLy8gVEVTVDpZOjEgOworfSB8ICdlJyB7IHNlbWkoKTsgbm9fc2VtaSgpCS8vIFRFU1Q6WToxIDsKK30gfCAnZicgeyBzZW1pW107IG5vX3NlbWlbXQkvLyBURVNUOlk6MSA7Cit9IHwgJ2cnIHsgc2VtaSsrOyBub19zZW1pKysJLy8gVEVTVDpZOjEgOworfSB8ICdoJyB7IHtub19zZW1pfSBub19zZW1pCS8vIFRFU1Q6WToxIDsKK30gfCAnaScgeyB7c2VtaTt9ICAgbm9fc2VtaQkvLyBURVNUOlk6MSA7Cit9IDsKK3Rlc3QwCisgIDogJ2EnIHsgc2VtaTsJCQkvLyBURVNUOk46MSB7fQorfSB8ICdiJyB7IGlmICgwKSB7bm9fc2VtaX0JLy8gVEVTVDpOOjEge30KK30gfCAnYycgeyBpZiAoMCkge3NlbWk7fQkvLyBURVNUOk46MSB7fQorfSB8ICdkJyB7IHNlbWk7ICAgbm9fc2VtaQkvLyBURVNUOlk6MSB7fQorfSB8ICdlJyB7IHNlbWkoKTsgbm9fc2VtaSgpCS8vIFRFU1Q6WToxIHt9Cit9IHwgJ2YnIHsgc2VtaVtdOyBub19zZW1pW10JLy8gVEVTVDpZOjEge30KK30gfCAnZycgeyBzZW1pKys7IG5vX3NlbWkrKwkvLyBURVNUOlk6MSB7fQorfSB8ICdoJyB7IHtub19zZW1pfSBub19zZW1pCS8vIFRFU1Q6WToxIHt9Cit9IHwgJ2knIHsge3NlbWk7fSAgIG5vX3NlbWkJLy8gVEVTVDpZOjEge30KK30gOworCit0ZXN0YworOiAnYScgeworI2RlZmluZSBURVNUX01BQ1JPX04gXAorW10iYnJva2VuXCIgJCBAICQkIEAkIFtdO1wKK3N0cmluZzsifQorfCAnYicgeworbm9fc2VtaQorI2RlZmluZSBURVNUX01BQ1JPX04gXAorW10iYnJva2VuXCIgJCBAICQkIEAkIFtdO1wKK3N0cmluZzsifQorXV0pCitBVF9CSVNPTl9PUFRJT05fUE9QREVGUworCitBVF9CSVNPTl9DSEVDSyhbWy1vIGlucHV0LmMgaW5wdXQueV1dLCBbMF0sIFtdLAorW1tpbnB1dC55OjguNDg6IHdhcm5pbmc6IGEgJzsnIG1pZ2h0IGJlIG5lZWRlZCBhdCB0aGUgZW5kIG9mIGFjdGlvbiBjb2RlCitpbnB1dC55OjguNDg6ICAgICBmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24gd2lsbCBub3QgYWRkIHRoZSAnOycKK2lucHV0Lnk6OS40ODogd2FybmluZzogYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUKK2lucHV0Lnk6OS40ODogICAgIGZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JworaW5wdXQueToxMC40ODogd2FybmluZzogYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUKK2lucHV0Lnk6MTAuNDg6ICAgICBmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24gd2lsbCBub3QgYWRkIHRoZSAnOycKK2lucHV0Lnk6MTEuNDg6IHdhcm5pbmc6IGEgJzsnIG1pZ2h0IGJlIG5lZWRlZCBhdCB0aGUgZW5kIG9mIGFjdGlvbiBjb2RlCitpbnB1dC55OjExLjQ4OiAgICAgZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnCitpbnB1dC55OjEyLjQ4OiB3YXJuaW5nOiBhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZQoraW5wdXQueToxMi40ODogICAgIGZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JworaW5wdXQueToxMy40ODogd2FybmluZzogYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUKK2lucHV0Lnk6MTMuNDg6ICAgICBmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24gd2lsbCBub3QgYWRkIHRoZSAnOycKK2lucHV0Lnk6MjAuMTogd2FybmluZzogYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUKK2lucHV0Lnk6MjAuMTogICAgIGZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JworaW5wdXQueToyMS4xOiB3YXJuaW5nOiBhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZQoraW5wdXQueToyMS4xOiAgICAgZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnCitpbnB1dC55OjIyLjE6IHdhcm5pbmc6IGEgJzsnIG1pZ2h0IGJlIG5lZWRlZCBhdCB0aGUgZW5kIG9mIGFjdGlvbiBjb2RlCitpbnB1dC55OjIyLjE6ICAgICBmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24gd2lsbCBub3QgYWRkIHRoZSAnOycKK2lucHV0Lnk6MjMuMTogd2FybmluZzogYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUKK2lucHV0Lnk6MjMuMTogICAgIGZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JworaW5wdXQueToyNC4xOiB3YXJuaW5nOiBhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZQoraW5wdXQueToyNC4xOiAgICAgZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnCitpbnB1dC55OjI1LjE6IHdhcm5pbmc6IGEgJzsnIG1pZ2h0IGJlIG5lZWRlZCBhdCB0aGUgZW5kIG9mIGFjdGlvbiBjb2RlCitpbnB1dC55OjI1LjE6ICAgICBmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24gd2lsbCBub3QgYWRkIHRoZSAnOycKK2lucHV0Lnk6MzEuMTogd2FybmluZzogYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUKK2lucHV0Lnk6MzEuMTogICAgIGZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JworaW5wdXQueTozMi4xOiB3YXJuaW5nOiBhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZQoraW5wdXQueTozMi4xOiAgICAgZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnCitpbnB1dC55OjMzLjE6IHdhcm5pbmc6IGEgJzsnIG1pZ2h0IGJlIG5lZWRlZCBhdCB0aGUgZW5kIG9mIGFjdGlvbiBjb2RlCitpbnB1dC55OjMzLjE6ICAgICBmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24gd2lsbCBub3QgYWRkIHRoZSAnOycKK2lucHV0Lnk6MzQuMTogd2FybmluZzogYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUKK2lucHV0Lnk6MzQuMTogICAgIGZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JworaW5wdXQueTozNS4xOiB3YXJuaW5nOiBhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZQoraW5wdXQueTozNS4xOiAgICAgZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnCitpbnB1dC55OjM2LjE6IHdhcm5pbmc6IGEgJzsnIG1pZ2h0IGJlIG5lZWRlZCBhdCB0aGUgZW5kIG9mIGFjdGlvbiBjb2RlCitpbnB1dC55OjM2LjE6ICAgICBmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24gd2lsbCBub3QgYWRkIHRoZSAnOycKK11dKQorCitBVF9NQVRDSEVTX0NIRUNLKFtpbnB1dC5jXSwgW1svXCogVEVTVDpOOjIgXCovIFx9JF1dLCAgICAgICBbWzNdXSkKK0FUX01BVENIRVNfQ0hFQ0soW2lucHV0LmNdLCBbWy9cKiBURVNUOlk6MiBcKi8gO1x9JF1dLCAgICAgIFtbNl1dKQorQVRfTUFUQ0hFU19DSEVDSyhbaW5wdXQuY10sIFtbLy8gVEVTVDpOOjEgWzt7fV0qXG5cfSRdXSwgICAgW1s2XV0pCitBVF9NQVRDSEVTX0NIRUNLKFtpbnB1dC5jXSwgW1svLyBURVNUOlk6MSBbO3t9XSpcbjtcfSRdXSwgIFtbMTJdXSkKK0FUX01BVENIRVNfQ0hFQ0soW2lucHV0LmNdLCBbWyNkZWZpbmUgVEVTVF9NQUNST19OIFxcXG5cW1xdImJyb2tlblxcIiBcJCBcQCBcJFwkIFxAXCQgXFtcXTtcXFxuc3RyaW5nOyJcfV1dLCBbWzJdXSkKKworQVRfQ0xFQU5VUAorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBEZXN0cm95aW5nIGxvb2thaGVhZCBhc3NpZ25lZCBieSBzZW1hbnRpYyBhY3Rpb24uICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworQVRfU0VUVVAoW1tEZXN0cm95aW5nIGxvb2thaGVhZCBhc3NpZ25lZCBieSBzZW1hbnRpYyBhY3Rpb25dXSkKKworQVRfQklTT05fT1BUSU9OX1BVU0hERUZTCitBVF9EQVRBX0dSQU1NQVIoW2lucHV0LnldLAorW1sKKyVjb2RlIHsKKyAgI2luY2x1ZGUgPGFzc2VydC5oPgorICAjaW5jbHVkZSA8c3RkaW8uaD4KK11BVF9ZWUVSUk9SX0RFQ0xBUkVbCitdQVRfWVlMRVhfREVDTEFSRVsKKyAgI2RlZmluZSBVU0UoVmFyKQorfQorCislZGVzdHJ1Y3RvciB7IGZwcmludGYgKHN0ZGVyciwgIidhJyBkZXN0cnVjdG9yXG4iKTsgfSAnYScKKyVkZXN0cnVjdG9yIHsgZnByaW50ZiAoc3RkZXJyLCAiJ2InIGRlc3RydWN0b3JcbiIpOyB9ICdiJworCislJQorCisvLyBJbiBhIHByZXZpb3VzIHZlcnNpb24gb2YgQmlzb24sIHl5Y2hhciBhc3NpZ25lZCBieSB0aGUgc2VtYW50aWMKKy8vIGFjdGlvbiBiZWxvdyB3YXMgbm90IHRyYW5zbGF0ZWQgaW50byB5eXRva2VuIGJlZm9yZSB0aGUgbG9va2FoZWFkIHdhcworLy8gZGlzY2FyZGVkIGFuZCB0aHVzIGJlZm9yZSBpdHMgZGVzdHJ1Y3RvciAoc2VsZWN0ZWQgYWNjb3JkaW5nIHRvCisvLyB5eXRva2VuKSB3YXMgY2FsbGVkIGluIG9yZGVyIHRvIHJldHVybiBmcm9tIHl5cGFyc2UuICBUaGlzIHdvdWxkCisvLyBoYXBwZW4gZXZlbiBpZiBZWUFDQ0VQVCB3YXMgcGVyZm9ybWVkIGluIGEgbGF0ZXIgc2VtYW50aWMgYWN0aW9uIGFzCisvLyBsb25nIGFzIG9ubHkgY29uc2lzdGVudCBzdGF0ZXMgd2l0aCBkZWZhdWx0IHJlZHVjdGlvbnMgd2VyZSB2aXNpdGVkCisvLyBpbiBiZXR3ZWVuLiAgSG93ZXZlciwgd2UgbGVhdmUgWVlBQ0NFUFQgaW4gdGhlIHNhbWUgc2VtYW50aWMgYWN0aW9uCisvLyBmb3IgdGhpcyB0ZXN0IGluIG9yZGVyIHRvIHNob3cgdGhhdCBza2VsZXRvbnMgY2Fubm90IHNpbXBseSB0cmFuc2xhdGUKKy8vIGltbWVkaWF0ZWx5IGFmdGVyIGV2ZXJ5IHNlbWFudGljIGFjdGlvbiBiZWNhdXNlIGEgc2VtYW50aWMgYWN0aW9uCisvLyB0aGF0IGhhcyBzZXQgeXljaGFyIG1pZ2h0IG5vdCBhbHdheXMgcmV0dXJuIG5vcm1hbGx5LiAgSW5zdGVhZCwKKy8vIHNrZWxldG9ucyBtdXN0IHRyYW5zbGF0ZSBiZWZvcmUgZXZlcnkgdXNlIG9mIHl5dG9rZW4uCitzdGFydDogJ2EnIGFjY2VwdCB7IFVTRSgkMSk7IH0gOworYWNjZXB0OiAvKmVtcHR5Ki8geworICBhc3NlcnQgKHl5Y2hhciA9PSBZWUVNUFRZKTsKKyAgeXljaGFyID0gJ2InOworICBZWUFDQ0VQVDsKK30gOworCislJQorXUFUX1lZRVJST1JfREVGSU5FWworXUFUX1lZTEVYX0RFRklORShbImEiXSlbCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorXV0pCitBVF9CSVNPTl9PUFRJT05fUE9QREVGUworQVRfQklTT05fQ0hFQ0soW1stbyBpbnB1dC5jIGlucHV0LnldXSkKK0FUX0NPTVBJTEUoW1tpbnB1dF1dKQorQVRfUEFSU0VSX0NIRUNLKFtbLi9pbnB1dF1dLCBbWzBdXSwgW10sCitbWydiJyBkZXN0cnVjdG9yCisnYScgZGVzdHJ1Y3RvcgorXV0pCisKK0FUX0NMRUFOVVAKKworIyMgLS0tLS0tLS0tLSAjIworIyMgWVlCQUNLVVAuICAjIworIyMgLS0tLS0tLS0tLSAjIworCitBVF9TRVRVUChbW1lZQkFDS1VQXV0pCisKK0FUX0JJU09OX09QVElPTl9QVVNIREVGUyhbJXB1cmUtcGFyc2VyXSkKKworQVRfREFUQV9HUkFNTUFSKFtpbnB1dC55XSwKK1tbCislZXJyb3ItdmVyYm9zZQorJWRlYnVnCislcHVyZS1wYXJzZXIKKyVjb2RlIHsKKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyMgaW5jbHVkZSA8c3RkbGliLmg+CisjIGluY2x1ZGUgPGFzc2VydC5oPgorCisgIF1BVF9ZWUVSUk9SX0RFQ0xBUkVbCisgIF1BVF9ZWUxFWF9ERUNMQVJFWworfQorJSUKK2lucHV0OgorICBleHAgZXhwIHt9Cis7CisKK2V4cDoKKyAgJ2EnICAgICB7IHByaW50ZiAoImE6ICVkXG4iLCAkMSk7IH0KK3wgJ2InICAgICB7IFlZQkFDS1VQKCdhJywgMTIzKTsgfQorfCAnYycgJ2QnIHsgWVlCQUNLVVAoJ2EnLCA0NTYpOyB9Cis7CisKKyUlCitdQVRfWVlFUlJPUl9ERUZJTkVbCitdQVRfWVlMRVhfREVGSU5FKFsiYmNkIl0sIFsqbHZhbHAgPSAodG9rbnVtICsgMSkgKiAxMF0pWworCitpbnQKK21haW4gKHZvaWQpCit7CisgIHl5ZGVidWcgPSAhIWdldGVudigiWVlERUJVRyIpOworICByZXR1cm4geXlwYXJzZSAoKTsKK30KK11dKQorQVRfQklTT05fT1BUSU9OX1BPUERFRlMKKworQVRfQklTT05fQ0hFQ0soW1stbyBpbnB1dC5jIGlucHV0LnldXSkKK0FUX0NPTVBJTEUoW1tpbnB1dF1dKQorQVRfUEFSU0VSX0NIRUNLKFtbLi9pbnB1dF1dLCBbWzBdXSwKK1tbYTogMTIzCithOiA0NTYKK11dKQorCitBVF9DTEVBTlVQCmRpZmYgLS1naXQgYS90ZXN0cy9hdGNvbmZpZyBiL3Rlc3RzL2F0Y29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjJiMjZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2F0Y29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotIyBDb25maWd1cmFibGUgdmFyaWFibGUgdmFsdWVzIGZvciBidWlsZGluZyB0ZXN0IHN1aXRlcy4KLSMgR2VuZXJhdGVkIGJ5IC4vY29uZmlnLnN0YXR1cy4KLSMgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoZSB0ZXN0IHN1aXRlIHdpbGwgZGVmaW5lIHRvcF9zcmNkaXI9Ly4uLy4uIGV0Yy4KLWF0X3Rlc3RkaXI9J3Rlc3RzJwotYWJzX2J1aWxkZGlyPScvdXNyL2xvY2FsL2dvb2dsZS93b3Jrc3BhY2UvV2ViS2l0L3Rvb2xzL2Jpc29uLTIuMy90ZXN0cycKLWF0X3NyY2Rpcj0nLicKLWFic19zcmNkaXI9Jy91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL3Rlc3RzJwotYXRfdG9wX3NyY2Rpcj0nLi4nCi1hYnNfdG9wX3NyY2Rpcj0nL3Vzci9sb2NhbC9nb29nbGUvd29ya3NwYWNlL1dlYktpdC90b29scy9iaXNvbi0yLjMvdGVzdHMvLi4nCi1hdF90b3BfYnVpbGRkaXI9Jy4uLycKLWFic190b3BfYnVpbGRkaXI9Jy91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL3Rlc3RzLy4uLy4nCi0KLUFVVE9URVNUX1BBVEg9J3Rlc3RzJwotCi1TSEVMTD0ke0NPTkZJR19TSEVMTC0nL2Jpbi9zaCd9CmRpZmYgLS1naXQgYS90ZXN0cy9hdGxvY2FsIGIvdGVzdHMvYXRsb2NhbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ5ZmQxMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9hdGxvY2FsCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotIyB0ZXN0cy9hdGxvY2FsLiAgR2VuZXJhdGVkIGZyb20gYXRsb2NhbC5pbiBieSBjb25maWd1cmUuCQkJCQktKi0gc2hlbGwtc2NyaXB0IC0qLQotIyBDb25maWd1cmFibGUgdmFyaWFibGUgdmFsdWVzIGZvciBCaXNvbiB0ZXN0IHN1aXRlLgotIyBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgV2UgbmVlZCBhIEMgY29tcGlsZXIuCi1DQz0nZ2NjJwotCi0jIFdlIHdhbnQgbm8gb3B0aW1pemF0aW9uLgotQ0ZMQUdTPSctZyAgICcKLQotIyBXZSBuZWVkIGBjb25maWcuaCcuCi1DUFBGTEFHUz0iLURIQVZFX0NPTkZJR19IPTEgLUkkYWJzX3RvcF9idWlsZGRpciAiCi0KLSMgSXMgdGhlIGNvbXBpbGVyIEdDQz8KLUdDQz0neWVzJwotCi0jIFRoZSBDKysgY29tcGlsZXIuCi1DWFg9J2crKycKLQotIyBJZiAnZXhpdCA3Nyc7IHNraXAgYWxsIEMrKyB0ZXN0czsgb3RoZXJ3aXNlICc6Jy4KLUJJU09OX0NYWF9XT1JLUz0nOicKLQotIyBXZSB3YW50IG5vIG9wdGltaXphdGlvbiB3aXRoIEMrKywgdG9vLgotQ1hYRkxBR1M9Jy1nICAgJwotCi0jIEFyZSBzcGVjaWFsIGxpbmsgb3B0aW9ucyBuZWVkZWQ/Ci1MREZMQUdTPScnCi0KLSMgQXJlIHNwZWNpYWwgbGlicmFyaWVzIG5lZWRlZD8KLUxJQlM9JyAnCmRpZmYgLS1naXQgYS90ZXN0cy9hdGxvY2FsLmluIGIvdGVzdHMvYXRsb2NhbC5pbgppbmRleCAxNWM5OWU2Li5mODE3Zjk0IDEwMDY0NAotLS0gYS90ZXN0cy9hdGxvY2FsLmluCisrKyBiL3Rlc3RzL2F0bG9jYWwuaW4KQEAgLTEsMzAgKzEsMTAzIEBACiAjIEBjb25maWd1cmVfaW5wdXRACQkJCQktKi0gc2hlbGwtc2NyaXB0IC0qLQogIyBDb25maWd1cmFibGUgdmFyaWFibGUgdmFsdWVzIGZvciBCaXNvbiB0ZXN0IHN1aXRlLgotIyBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLSMgV2UgbmVlZCBhIEMgY29tcGlsZXIuCi1DQz0nQENDQCcKLQotIyBXZSB3YW50IG5vIG9wdGltaXphdGlvbi4KLUNGTEFHUz0nQE8wQ0ZMQUdTQCBAV0FSTklOR19DRkxBR1NAIEBXRVJST1JfQ0ZMQUdTQCcKKyMgQ29weXJpZ2h0IChDKSAyMDAwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCiAjIFdlIG5lZWQgYGNvbmZpZy5oJy4KLUNQUEZMQUdTPSItREhBVkVfQ09ORklHX0g9MSAtSSRhYnNfdG9wX2J1aWxkZGlyIEBDUFBGTEFHU0AiCitDUFBGTEFHUz0iLUkkYWJzX3RvcF9idWlsZGRpci9saWIgQENQUEZMQUdTQCIKKworIyBEb24ndCBqdXN0IGNoZWNrIGlmICRQT1NJWExZX0NPUlJFQ1QgaXMgc2V0LCBhcyBCYXNoLCB3aGVuIGxhdW5jaGVkCisjIGFzIC9iaW4vc2gsIHNldHMgdGhlIHNoZWxsIHZhcmlhYmxlIFBPU0lYTFlfQ09SUkVDVCB0byB5LCBidXQgbm90CisjIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZS4KK2lmIGVudiB8IGdyZXAgJ15QT1NJWExZX0NPUlJFQ1Q9JyA+L2Rldi9udWxsOyB0aGVuCisgIFBPU0lYTFlfQ09SUkVDVF9JU19FWFBPUlRFRD10cnVlCitlbHNlCisgIFBPU0lYTFlfQ09SUkVDVF9JU19FWFBPUlRFRD1mYWxzZQorZmkKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQy9DKysgQ29tcGlsYXRpb24uICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCis6ICR7Q0M9J0BDQ0AnfQorOiAke0NYWD0nQENYWEAnfQogCiAjIElzIHRoZSBjb21waWxlciBHQ0M/CiBHQ0M9J0BHQ0NAJwogCi0jIFRoZSBDKysgY29tcGlsZXIuCi1DWFg9J0BDWFhAJworIyBTb21ldGltZXMgYSB0ZXN0IGdyb3VwIG5lZWRzIHRvIGlnbm9yZSBnY2Mgd2FybmluZ3MsIHNvIGl0IGxvY2FsbHkKKyMgc2V0cyBDRkxBR1MgdG8gdGhpcy4KKyAgTk9fV0VSUk9SX0NGTEFHUz0nQENGTEFHU0AgICBAV0FSTl9DRkxBR1NAICAgQFdBUk5fQ0ZMQUdTX1RFU1RAJworTk9fV0VSUk9SX0NYWEZMQUdTPSdAQ1hYRkxBR1NAIEBXQVJOX0NYWEZMQUdTQCBAV0FSTl9DWFhGTEFHU19URVNUQCcKIAotIyBJZiAnZXhpdCA3Nyc7IHNraXAgYWxsIEMrKyB0ZXN0czsgb3RoZXJ3aXNlICc6Jy4KKyMgQnV0IG1vc3Qgb2YgdGhlIHRpbWUsIHdlIHdhbnQgLVdlcnJvci4KKyAgQ0ZMQUdTPSIkTk9fV0VSUk9SX0NGTEFHUyAgIEBXRVJST1JfQ0ZMQUdTQCIKK0NYWEZMQUdTPSIkTk9fV0VSUk9SX0NYWEZMQUdTIEBXRVJST1JfQ1hYRkxBR1NAIgorCisjIElmICdleGl0IDc3Jzsgc2tpcCBhbGwgQy9DKysgdGVzdHM7IG90aGVyd2lzZSAnOicuCitCSVNPTl9DX1dPUktTPSdAQklTT05fQ19XT1JLU0AnCiBCSVNPTl9DWFhfV09SS1M9J0BCSVNPTl9DWFhfV09SS1NAJwogCi0jIFdlIHdhbnQgbm8gb3B0aW1pemF0aW9uIHdpdGggQysrLCB0b28uCi1DWFhGTEFHUz0nQE8wQ1hYRkxBR1NAIEBXQVJOSU5HX0NYWEZMQUdTQCBAV0VSUk9SX0NGTEFHU0AnCisjIFdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIFBPU0lYTFlfQ09SUkVDVCBkZWZpbmVkLgorOiAke0NfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUPSdAQ19DT01QSUxFUl9QT1NJWExZX0NPUlJFQ1RAJ30KKzogJHtDWFhfQ09NUElMRVJfUE9TSVhMWV9DT1JSRUNUPSdAQ1hYX0NPTVBJTEVSX1BPU0lYTFlfQ09SUkVDVEAnfQorCitpZiAkUE9TSVhMWV9DT1JSRUNUX0lTX0VYUE9SVEVEOyB0aGVuCisgICRDX0NPTVBJTEVSX1BPU0lYTFlfQ09SUkVDVCB8fAorICAgIEJJU09OX0NfV09SS1M9ImFzX2ZuX2Vycm9yIDc3IFBPU0lYTFlfQ09SUkVDVCIKKyAgJENYWF9DT01QSUxFUl9QT1NJWExZX0NPUlJFQ1QgfHwKKyAgICBCSVNPTl9DWFhfV09SS1M9ImFzX2ZuX2Vycm9yIDc3IFBPU0lYTFlfQ09SUkVDVCIKK2ZpCisKKyMgSGFuZGxlIC0tY29tcGlsZS1jLXdpdGgtY3h4IGhlcmUsIG9uY2UgQ1hYIGFuZCBDWFhGTEFHUyBhcmUga25vd24uCitpZiAiJGF0X2FyZ19jb21waWxlX2Nfd2l0aF9jeHgiOyB0aGVuCisgIENDX0lTX0NYWD0xCisgIENDPSRDWFgKKyAgTk9fV0VSUk9SX0NGTEFHUz0kTk9fV0VSUk9SX0NYWEZMQUdTCisgIENGTEFHUz0kQ1hYRkxBR1MKKyAgQklTT05fQ19XT1JLUz0kQklTT05fQ1hYX1dPUktTCitlbHNlCisgIENDX0lTX0NYWD0wCitmaQorCisKKyMjIC0tLS0tLS0gIyMKKyMjIE90aGVyLiAgIyMKKyMjIC0tLS0tLS0gIyMKKworIyBFbXB0eSBpZiBubyBqYXZhYyB3YXMgZm91bmQKK0NPTkZfSkFWQUM9J0BDT05GX0pBVkFDQCcKKworIyBFbXB0eSBpZiBubyBKYXZhIFZNIHdhcyBmb3VuZAorQ09ORl9KQVZBPSdAQ09ORl9KQVZBQCcKKworIyBXZSBuZWVkIGVncmVwLgorOiAke0VHUkVQPSdARUdSRVBAJ30KKworIyBVc2Ugc2ltcGxlIHF1b3RlcyAobGliL3F1b3RlLmMpLgorTENfQ1RZUEU9QworZXhwb3J0IExDX0NUWVBFCiAKICMgQXJlIHNwZWNpYWwgbGluayBvcHRpb25zIG5lZWRlZD8KIExERkxBR1M9J0BMREZMQUdTQCcKIAogIyBBcmUgc3BlY2lhbCBsaWJyYXJpZXMgbmVlZGVkPwotTElCUz0nQExJQlNAIEBJTlRMTElCU0AnCitMSUJTPSIkYWJzX3RvcF9idWlsZGRpci9saWIvbGliYmlzb24uYSBATElCU0AgQElOVExMSUJTQCIKKworIyBFbXB0eSBpZiBubyB4c2x0cHJvYyB3YXMgZm91bmQKKzogJHtYU0xUUFJPQz0nQFhTTFRQUk9DQCd9CisKKzogJHtQRVJMPSdAUEVSTEAnfQpkaWZmIC0tZ2l0IGEvdGVzdHMvYmlzb24gYi90ZXN0cy9iaXNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggODJkZDY1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9iaXNvbgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotIyEgL2Jpbi9zaAotIyB0ZXN0cy9iaXNvbi4gIEdlbmVyYXRlZCBmcm9tIGJpc29uLmluIGJ5IGNvbmZpZ3VyZS4KLSMgV3JhcHBlciBhcm91bmQgYSBub24gaW5zdGFsbGVkIGJpc29uIHRvIG1ha2UgaXQgd29yayBhcyBhbiBpbnN0YWxsZWQgb25lLgotCi0jIFVzZSB0aGUgc2hpcHBlZCBmaWxlcywgbm90IHRob3NlIGluc3RhbGxlZC4KLUJJU09OX1BLR0RBVEFESVI9Jy91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL3Rlc3RzLy4uL2RhdGEnCi1leHBvcnQgQklTT05fUEtHREFUQURJUgotZXhlYyAkUFJFQklTT04gJy91c3IvbG9jYWwvZ29vZ2xlL3dvcmtzcGFjZS9XZWJLaXQvdG9vbHMvYmlzb24tMi4zL3Rlc3RzLy4uLy4vc3JjL2Jpc29uJyAkezErIiRAIn0KZGlmZiAtLWdpdCBhL3Rlc3RzL2Jpc29uLmluIGIvdGVzdHMvYmlzb24uaW4KaW5kZXggYjkwYzA4Ny4uZjIxYjJiYyAxMDA2NDQKLS0tIGEvdGVzdHMvYmlzb24uaW4KKysrIGIvdGVzdHMvYmlzb24uaW4KQEAgLTIsNyArMiw1NCBAQAogIyBAY29uZmlndXJlX2lucHV0QAogIyBXcmFwcGVyIGFyb3VuZCBhIG5vbiBpbnN0YWxsZWQgYmlzb24gdG8gbWFrZSBpdCB3b3JrIGFzIGFuIGluc3RhbGxlZCBvbmUuCiAKKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCithYnNfdG9wX3NyY2Rpcj0nQGFic190b3Bfc3JjZGlyQCcKK2Fic190b3BfYnVpbGRkaXI9J0BhYnNfdG9wX2J1aWxkZGlyQCcKKzogJHtQRVJMPSdAUEVSTEAnfQorCiAjIFVzZSB0aGUgc2hpcHBlZCBmaWxlcywgbm90IHRob3NlIGluc3RhbGxlZC4KLUJJU09OX1BLR0RBVEFESVI9J0BhYnNfdG9wX3NyY2RpckAvZGF0YScKK0JJU09OX1BLR0RBVEFESVI9JGFic190b3Bfc3JjZGlyL2RhdGEKIGV4cG9ydCBCSVNPTl9QS0dEQVRBRElSCi1leGVjICRQUkVCSVNPTiAnQGFic190b3BfYnVpbGRkaXJAL3NyYy9iaXNvbicgJHsxKyIkQCJ9CisKKyRQUkVCSVNPTiAiJGFic190b3BfYnVpbGRkaXIvc3JjL2Jpc29uIiAkezErIiRAIn0KK3N0YXR1cz0kPworCisjIEFzIGEgc3BlY2lhbCBkYXJrIG1hZ2ljLCBpZiB3ZSBhcmUgYWN0dWFsbHkgdXNpbmcgdGhpcyB3cmFwcGVyIHRvCisjIGNvbXBpbGUgQmlzb24ncyBzcmMvcGFyc2UtZ3JhbS55LCBwb3N0LXByb2Nlc3MgdGhlIHN5bmNsaW5lcyB0bworIyBhdm9pZCBkZXBlbmRlbmNpZXMgb24gdGhlIHVzZXIncyBzZXQgdXAgKHNyY2RpciB2cy4gYnVpbGRkaXIpLgorZm9yIGkKK2RvCisgIGNhc2UgJGkgaW4KKyAgICAqL3BhcnNlLWdyYW0ueSkKKyAgICBpZiAkUEVSTCAtLXZlcnNpb24gPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIyBXZSBhcmUgY2FsbGVkIGJ5IHlsd3JhcCB3aGljaCBzdGlsbCB1c2VzIHkudGFiLiosIGFuZAorICAgICAgIyBwb3N0LXByb2Nlc3NlcyB0aGUgc3luY2xpbmVzIG9uIHkudGFiLmMgaXRzZWxmLiAgRG9uJ3QgbGV0IGl0CisgICAgICAjIGRvIGl0LiAgQmVzaWRlcywgaXQgbGVhdmVzICJwYXJzZS1ncmFtLnkiIGFzIHRoZSBzb3VyY2UsCisgICAgICAjIGRyb3BwaW5nIHRoZSBzcmMvIHBhcnQuCisgICAgICAkUEVSTCAtcGkgLWUgJ3N7InlcLnRhYlwufXsicGFyc2UtZ3JhbS59ZzsnICAgIFwKKyAgICAgICAgICAgICAgICAtZSAnc3siLiovKHBhcnNlLWdyYW1cLnkpIn17IiQxIn1nOycgXAorICAgICAgICAgICB5LnRhYi5bY2hdCisgICAgZmkKKyAgICA7OworICBlc2FjCitkb25lCisKK2V4aXQgJHN0YXR1cworCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTogc2hlbGwtc2NyaXB0CisjIEVuZDoKZGlmZiAtLWdpdCBhL3Rlc3RzL2MrKy5hdCBiL3Rlc3RzL2MrKy5hdAppbmRleCBlMWJkOTA2Li5hNWQ4Mzg1IDEwMDY0NAotLS0gYS90ZXN0cy9jKysuYXQKKysrIGIvdGVzdHMvYysrLmF0CkBAIC0xLDIwICsxLDIwIEBACi0jIENoZWNraW5nIHRoZSBvdXRwdXQgZmlsZW5hbWVzLiAgICAgICAgICAgICAgICAgICAgLSotIEF1dG90ZXN0IC0qLQotIyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENoZWNraW5nIHRoZSBDKysgRmVhdHVyZXMuICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b3Rlc3QgLSotCiAKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUsIDIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0jIGFueSBsYXRlciB2ZXJzaW9uLgotCisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCiAjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KKyMKICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotIyAwMjExMC0xMzAxLCBVU0EuCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCiBBVF9CQU5ORVIoW1tDKysgRmVhdHVyZXMuXV0pCiAKQEAgLTMwLDYgKzMwLDcgQEAKIAkgW200X2ZhdGFsKFtpbnZhbGlkIGFyZ3VtZW50OiAkMV0pXSkKIEFUX1NFVFVQKFtEb3h5Z2VuICQxIERvY3VtZW50YXRpb25dKQogCitBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMoWyVza2VsZXRvbiAibGFscjEuY2MiXSkKIEFUX0RBVEEoW2lucHV0Lnl5XSwKIFtbJXNrZWxldG9uICJsYWxyMS5jYyIKICVsb2NhdGlvbnMKQEAgLTM4LDEzICszOSwxMCBAQAogJSUKIGV4cDo7CiAlJQoteXk6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGxvY2F0aW9uJiBsLCBjb25zdCBzdGQ6OnN0cmluZyYgbSkKLXsKLSAgc3RkOjpjZXJyIDw8IGwgPDwgcyA8PCBzdGQ6OmVuZGw7Ci19CitdQVRfWVlFUlJPUl9ERUZJTkVbCiBdXSkKIAotQVRfQ0hFQ0soW2Jpc29uIC1vIGlucHV0LmNjIGlucHV0Lnl5XSwgMCkKK0FUX0JJU09OX0NIRUNLKFstbyBpbnB1dC5jYyBpbnB1dC55eV0sIDApCiAKIEFUX0RBVEEoW0RveHlmaWxlXSwKIFsjIFRoZSBQUk9KRUNUX05BTUUgdGFnIGlzIGEgc2luZ2xlIHdvcmQgKG9yIGEgc2VxdWVuY2Ugb2Ygd29yZHMKQEAgLTk0LDYgKzkyLDcgQEAKIEFUX0NIRUNLKFtkb3h5Z2VuIC0tdmVyc2lvbiB8fCBleGl0IDc3XSwgMCwgaWdub3JlKQogQVRfQ0hFQ0soW2RveHlnZW5dLCAwLCBbXSwgW2lnbm9yZV0pCiAKK0FUX0JJU09OX09QVElPTl9QT1BERUZTCiBBVF9DTEVBTlVQCiAKIG00X3BvcGRlZihbQVRfRE9YWUdFTl9QUklWQVRFXSkKQEAgLTEwMSwzICsxMDAsMzE4IEBACiAKIEFUX0NIRUNLX0RPWFlHRU4oW1B1YmxpY10pCiBBVF9DSEVDS19ET1hZR0VOKFtQcml2YXRlXSkKKworIyMgLS0tLS0tLS0tLS0tICMjCisjIyBOYW1lc3BhY2VzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLSAjIworCisjIEFUX0NIRUNLX05BTUVTUEFDRShOQU1FU1BBQ0UtREVDTCwgW0NPTVBJTEUtRVJST1JdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VlIGlmIEJpc29uIGNhbiBoYW5kbGUgJWRlZmluZSBuYW1lc3BhY2UgIk5BTUVTUEFDRS1ERUNMIi4gIElmIENPTVBJTEUtRVJST1IKKyMgaXMgc3BlY2lmaWVkLCB0aGVuIEJpc29uIHNob3VsZCBhY2NlcHQgdGhlIGlucHV0LCBidXQgY29tcGlsYXRpb24gd2lsbCBmYWlsLAorIyBzbyBkb24ndCBjaGVjayBjb21waWxhdGlvbi4KK200X2RlZmluZShbQVRfQ0hFQ0tfTkFNRVNQQUNFXSwKK1sKKworQVRfREFUQV9HUkFNTUFSKFtbaW5wdXQueV1dLAorW1slbGFuZ3VhZ2UgIkMrKyIKKyVkZWZpbmVzCislZGVmaW5lIG5hbWVzcGFjZSAiXSQxWyIKKyV1bmlvbiB7IGludCBpOyB9CislZGVmaW5lIGdsb2JhbF90b2tlbnNfYW5kX3l5c3R5cGUKKworJWNvZGUgeworICAvLyBZWVNUWVBFIGNvbnRhaW5zIGEgbmFtZXNwYWNlIHJlZmVyZW5jZS4KKyAgaW50IHl5bGV4IChZWVNUWVBFICpsdmFsKSB7CisgICAgbHZhbC0+aSA9IDM7CisgICAgcmV0dXJuIDA7CisgIH0KK30KKworJSUKKworc3RhcnQ6IDsKKworJSUKKwordm9pZAorXSQxWzo6cGFyc2VyOjplcnJvciAoY29uc3QgXSQxWzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICZsb2MsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmbXNnKQoreworICBzdGQ6OmNlcnIgPDwgIkF0ICIgPDwgbG9jIDw8ICI6ICIgPDwgbXNnIDw8IHN0ZDo6ZW5kbDsKK30KKworaW50CittYWluICh2b2lkKQoreworICBdJDFbOjpwYXJzZXIgcDsKKyAgcmV0dXJuIHAucGFyc2UgKCk7Cit9CitdXSkKKworQVRfQklTT05fQ0hFQ0soW1stbyBpbnB1dC5jYyBpbnB1dC55XV0pCisKK200X2lmKFskI10sIFsxXSwKK1tBVF9DT01QSUxFX0NYWChbW2lucHV0XV0sIFtbaW5wdXQuY2NdXSkKK0FUX1BBUlNFUl9DSEVDSyhbWy4vaW5wdXRdXSldKQorCitdKQorCitBVF9TRVRVUChbW1JlbGF0aXZlIG5hbWVzcGFjZSByZWZlcmVuY2VzXV0pCitBVF9DSEVDS19OQU1FU1BBQ0UoW1tmb29dXSkKK0FUX0NIRUNLX05BTUVTUEFDRShbW2Zvbzo6YmFyXV0pCitBVF9DSEVDS19OQU1FU1BBQ0UoW1tmb286OmJhcjo6YmF6XV0pCitBVF9DTEVBTlVQCisKK0FUX1NFVFVQKFtbQWJzb2x1dGUgbmFtZXNwYWNlIHJlZmVyZW5jZXNdXSkKK0FUX0NIRUNLX05BTUVTUEFDRShbWzo6Zm9vXV0pCitBVF9DSEVDS19OQU1FU1BBQ0UoW1s6OmZvbzo6YmFyXV0pCitBVF9DSEVDS19OQU1FU1BBQ0UoW1s6OmZvbzo6YmFyOjpiYXpdXSkKK0FUX0NIRUNLX05BTUVTUEFDRShbWwk6OmZvb11dKQorQVRfQ0hFQ0tfTkFNRVNQQUNFKFtbICAJIDo6Zm9vOjpiYXJdXSkKK0FUX0NIRUNLX05BTUVTUEFDRShbWyAgOjpmb286OmJhcjo6YmF6XV0pCitBVF9DTEVBTlVQCisKK0FUX1NFVFVQKFtbU3ludGFjdGljYWxseSBpbnZhbGlkIG5hbWVzcGFjZSByZWZlcmVuY2VzXV0pCitBVF9DSEVDS19OQU1FU1BBQ0UoW1s6Zm9vOmJhcl1dLCBbWy1dXSkKK0FUX0NIRUNLX05BTUVTUEFDRShbW2ZvbzogOmJhcl1dLCBbWy1dXSkKKyMgVGhpcyBvbmUgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBgWzNdJyBpcyBlbmNvZGVkIGFzIGBAPDpAM0A6PkAnLCB3aGljaAorIyBjb250YWlucyBzaW5nbGUgb2NjdXJyZW5jZXMgb2YgYDonLgorQVRfQ0hFQ0tfTkFNRVNQQUNFKFtbZm9vWzNdOjpiYXI6OmJhel1dLCBbWy1dXSkKK0FUX0NIRUNLX05BTUVTUEFDRShbW2Zvbzo6YmFyLGJhel1dLCBbWy1dXSkKK0FUX0NIRUNLX05BTUVTUEFDRShbW2Zvbzo6YmFyOjooYmF6XV0sIFtbLV1dKQorQVRfQ0xFQU5VUAorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRXhjZXB0aW9uIHNhZmV0eS4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworQVRfU0VUVVAoW1tFeGNlcHRpb24gc2FmZXR5XV0pCisKK0FUX0JJU09OX09QVElPTl9QVVNIREVGUyhbJXNrZWxldG9uICJsYWxyMS5jYyJdKQorCitBVF9EQVRBX0dSQU1NQVIoW1tpbnB1dC55eV1dLAorW1slc2tlbGV0b24gImxhbHIxLmNjIgorJWRlZmluZXMgLy8gRklYTUU6IE1hbmRhdGVkIGluIDIuNi4KKyVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKworJWNvZGUgcmVxdWlyZXMKK3sKKyAgI2luY2x1ZGUgPGNhc3NlcnQ+CisgICNpbmNsdWRlIDxjc3RkbGliPiAvLyBzaXplX3QgYW5kIGdldGVudi4KKyAgI2luY2x1ZGUgPGlvc3RyZWFtPgorICAjaW5jbHVkZSA8bGlzdD4KKworICBib29sIGRlYnVnID0gZmFsc2U7CisKKyAgLy8vIEEgY2xhc3MgdGhhdCBjb3VudHMgaXRzIG51bWJlciBvZiBpbnN0YW5jZXMuCisgIHN0cnVjdCBPYmplY3QKKyAgeworICAgIHR5cGVkZWYgc3RkOjpsaXN0PGNvbnN0IE9iamVjdCo+IG9iamVjdHM7CisgICAgc3RhdGljIG9iamVjdHMgaW5zdGFuY2VzOworICAgIGNoYXIgdmFsOworCisgICAgc3RhdGljIGJvb2wKKyAgICBlbXB0eSAoKQorICAgIHsKKyAgICAgIHJldHVybiBpbnN0YW5jZXMuZW1wdHkoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZAorICAgIGxvZyAoT2JqZWN0IGNvbnN0ICpvLCBjb25zdCBzdGQ6OnN0cmluZyYgbXNnKQorICAgIHsKKyAgICAgIGlmIChkZWJ1ZykKKyAgICAgICAgeworICAgICAgICAgIGlmIChvKQorICAgICAgICAgICAgc3RkOjpjZXJyIDw8IG8gPDwgIi0+IjsKKyAgICAgICAgICBzdGQ6OmNlcnIgPDwgbXNnIDw8ICIgeyI7CisgICAgICAgICAgY29uc3QgY2hhciogc2VwID0gIiAiOworICAgICAgICAgIGZvciAob2JqZWN0czo6Y29uc3RfaXRlcmF0b3IgaSA9IGluc3RhbmNlcy5iZWdpbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaV9lbmQgPSBpbnN0YW5jZXMuZW5kKCk7CisgICAgICAgICAgICAgICBpICE9IGlfZW5kOworICAgICAgICAgICAgICAgKytpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgc2VwIDw8ICppOworICAgICAgICAgICAgICBzZXAgPSAiLCAiOworICAgICAgICAgICAgfQorICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiIH0iIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIE9iamVjdCAoY2hhciB2KQorICAgICAgOiB2YWwgKHYpCisgICAgeworICAgICAgaW5zdGFuY2VzLnB1c2hfYmFjayh0aGlzKTsKKyAgICAgIGxvZyAodGhpcywgIk9iamVjdDo6T2JqZWN0Iik7CisgICAgfQorCisgICAgfk9iamVjdCAoKQorICAgIHsKKyAgICAgIGluc3RhbmNlcy5yZW1vdmUodGhpcyk7CisgICAgICBsb2cgKHRoaXMsICJPYmplY3Q6On5PYmplY3QiKTsKKyAgICB9CisgIH07Cit9CisKKyVjb2RlCit7CisgICNpbmNsdWRlIDxjYXNzZXJ0PgorICAjaW5jbHVkZSA8Y3N0cmluZz4gLy8gc3RyY2hyCisgICNpbmNsdWRlIDxzdGRleGNlcHQ+CisgIGludCB5eWxleCAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqKTsKKyAgT2JqZWN0OjpvYmplY3RzIE9iamVjdDo6aW5zdGFuY2VzOworICBzdGF0aWMgY2hhciBjb25zdCAqaW5wdXQ7Cit9CisKKyV1bmlvbgoreworICBPYmplY3QgKm9iajsKK30KKworJWluaXRpYWwtYWN0aW9uCit7CisgIGlmIChzdHJjaHIgKGlucHV0LCAnaScpKQorICAgIHRocm93IHN0ZDo6cnVudGltZV9lcnJvciAoImluaXRpYWwtYWN0aW9uIik7Cit9CisKKyVkZXN0cnVjdG9yIHsgZGVsZXRlICQkOyB9IDxvYmo+OworJXByaW50ZXIKK3sKKyAgeXlvIDw8ICQkIDw8ICIgJyIgPDwgJCQtPnZhbCA8PCAnXCcnOworICBpZiAoJCQtPnZhbCA9PSAncCcpCisgICAgdGhyb3cgc3RkOjpydW50aW1lX2Vycm9yICgicHJpbnRlciIpOworfSA8b2JqPjsKKworJXRva2VuIDxvYmo+ICdhJyAnRScgJ2UnICdwJyAnUicgJ3MnICdUJworJXR5cGUgIDxvYmo+IGxpc3QgaXRlbQorCislJQorCitzdGFydDogbGlzdCB7IGRlbGV0ZSAkMTsgfTsKKworbGlzdDoKKyAgaXRlbSAgICAgICB7ICQkID0gJDE7IH0KK3wgaXRlbSBsaXN0ICB7ICQkID0gJDE7IGRlbGV0ZSAkMjsgfSAvLyBSaWdodCByZWN1cnNpb24gdG8gbG9hZCB0aGUgc3RhY2suCis7CisKK2l0ZW06CisgICdhJyAgeyAkJCA9ICQxOyB9Cit8ICdlJyAgeyBZWVVTRSAoJCQpOyBZWVVTRSgkMSk7IGVycm9yIChsb2NhdGlvbl90eXBlKCksICJzeW50YXggZXJyb3IiKTsgfQorLy8gTm90IGp1c3QgJ0UnLCBvdGhlcndpc2Ugd2UgcmVkdWNlIHdoZW4gJ0UnIGlzIHRoZSBsb29rYWhlYWQsIGFuZAorLy8gdGhlbiB0aGUgc3RhY2sgaXMgZW1wdGllZCwgZGVmZWF0aW5nIHRoZSBwb2ludCBvZiB0aGUgdGVzdC4KK3wgJ0UnICdhJyB7IFlZVVNFKCQxKTsgJCQgPSAkMjsgfQorfCAnUicgIHsgJCQgPSBZWV9OVUxMOyBkZWxldGUgJDE7IFlZRVJST1I7IH0KK3wgJ3AnICB7ICQkID0gJDE7IH0KK3wgJ3MnICB7ICQkID0gJDE7IHRocm93IHN0ZDo6cnVudGltZV9lcnJvciAoInJlZHVjdGlvbiIpOyB9Cit8ICdUJyAgeyAkJCA9IFlZX05VTEw7IGRlbGV0ZSAkMTsgWVlBQk9SVDsgfQorfCBlcnJvciB7ICQkID0gWVlfTlVMTDsgeXllcnJvazsgfQorOworJSUKKworaW50Cit5eWxleCAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHApCit7CisgIC8vICdhJzogbm8gZXJyb3IuCisgIC8vICdlJzogdXNlciBhY3Rpb24gY2FsbHMgZXJyb3IuCisgIC8vICdFJzogc3ludGF4IGVycm9yLCB3aXRoIHl5ZXJyb3IgdGhhdCB0aHJvd3MuCisgIC8vICdpJzogaW5pdGlhbCBhY3Rpb24gdGhyb3dzLgorICAvLyAnbCc6IHl5bGV4IHRocm93cy4KKyAgLy8gJ1InOiBjYWxsIFlZRVJST1IgaW4gdGhlIGFjdGlvbgorICAvLyAncyc6IHJlZHVjdGlvbiB0aHJvd3MuCisgIC8vICdUJzogY2FsbCBZWUFCT1JUIGluIHRoZSBhY3Rpb24KKyAgc3dpdGNoIChpbnQgcmVzID0gKmlucHV0KyspCisgIHsKKyAgICBjYXNlICdsJzoKKyAgICAgIHRocm93IHN0ZDo6cnVudGltZV9lcnJvciAoInl5bGV4Iik7CisgICAgZGVmYXVsdDoKKyAgICAgIGx2YWxwLT5vYmogPSBuZXcgT2JqZWN0IChyZXMpOworICAgICAgLy8gRmFsbCB0aHJvdWdoLgorICAgIGNhc2UgMDoKKyAgICAgIHJldHVybiByZXM7CisgIH0KK30KKworLyogQSBDKysgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3ZvaWQKK3l5OjpwYXJzZXI6OmVycm9yIChjb25zdCBsb2NhdGlvbl90eXBlJiBsLCBjb25zdCBzdGQ6OnN0cmluZyYgbSkKK3sKKyAgWVlVU0UgKGwpOworICB0aHJvdyBzdGQ6OnJ1bnRpbWVfZXJyb3IgKG0pOworfQorCitpbnQKK21haW4gKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pCit7CisgIHN3aXRjaCAoYXJnYykKKyAgeworICAgIGNhc2UgMjoKKyAgICAgIGlucHV0ID0gYXJndlsxXTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMzoKKyAgICAgIGFzc2VydCAoIXN0cmNtcCAoYXJndlsxXSwgIi0tZGVidWciKSk7CisgICAgICBkZWJ1ZyA9IDE7CisgICAgICBpbnB1dCA9IGFyZ3ZbMl07CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYWJvcnQgKCk7CisgIH0KKworICB5eTo6cGFyc2VyIHBhcnNlcjsKKyAgZGVidWcgfD0gISFnZXRlbnYgKCJZWURFQlVHIik7CisgIHBhcnNlci5zZXRfZGVidWdfbGV2ZWwgKGRlYnVnKTsKKyAgaW50IHJlcyA9IDI7CisgIHRyeQorICB7CisgICAgcmVzID0gcGFyc2VyLnBhcnNlICgpOworICB9CisgIGNhdGNoIChjb25zdCBzdGQ6OmV4Y2VwdGlvbiYgZSkKKyAgeworICAgIHN0ZDo6Y2VyciA8PCAiZXhjZXB0aW9uIGNhdWdodDogIiA8PCBlLndoYXQgKCkgPDwgc3RkOjplbmRsOworICB9CisgIGNhdGNoICguLi4pCisgIHsKKyAgICBzdGQ6OmNlcnIgPDwgInVua25vd24gZXhjZXB0aW9uIGNhdWdodCIgPDwgc3RkOjplbmRsOworICB9CisgIE9iamVjdDo6bG9nIChZWV9OVUxMLCAiZW5kIik7CisgIGFzc2VydCAoT2JqZWN0OjplbXB0eSgpKTsKKyAgcmV0dXJuIHJlczsKK30KK11dKQorQVRfQklTT05fQ0hFQ0soW1stbyBpbnB1dC5jYyAtLXJlcG9ydD1hbGwgaW5wdXQueXldXSkKK0FUX0NPTVBJTEVfQ1hYKFtbaW5wdXRdXSkKKworQVRfUEFSU0VSX0NIRUNLKFtbLi9pbnB1dCBhYWFhc11dLCBbWzJdXSwgW1tdXSwKK1tbZXhjZXB0aW9uIGNhdWdodDogcmVkdWN0aW9uCitdXSkKKworQVRfUEFSU0VSX0NIRUNLKFtbLi9pbnB1dCBhYWFhbF1dLCBbWzJdXSwgW1tdXSwKK1tbZXhjZXB0aW9uIGNhdWdodDogeXlsZXgKK11dKQorCitBVF9QQVJTRVJfQ0hFQ0soW1suL2lucHV0IGldXSwgW1syXV0sIFtbXV0sCitbW2V4Y2VwdGlvbiBjYXVnaHQ6IGluaXRpYWwtYWN0aW9uCitdXSkKKworQVRfUEFSU0VSX0NIRUNLKFtbLi9pbnB1dCBhYWFhcF1dKQorCitBVF9QQVJTRVJfQ0hFQ0soW1suL2lucHV0IC0tZGVidWcgYWFhYXBdXSwgW1syXV0sIFtbXV0sIFtbc3RkZXJyXV0pCitBVF9DSEVDSyhbW2dyZXAgJ15leGNlcHRpb24gY2F1Z2h0OiBwcmludGVyJCcgc3RkZXJyXV0sIFtdLCBbaWdub3JlXSkKKworQVRfUEFSU0VSX0NIRUNLKFtbLi9pbnB1dCBhYWFhZV1dLCBbWzJdXSwgW1tdXSwKK1tbZXhjZXB0aW9uIGNhdWdodDogc3ludGF4IGVycm9yCitdXSkKKworQVRfUEFSU0VSX0NIRUNLKFtbLi9pbnB1dCBhYWFhRV1dLCBbWzJdXSwgW1tdXSwKK1tbZXhjZXB0aW9uIGNhdWdodDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICRlbmQsIGV4cGVjdGluZyAnYScKK11dKQorCitBVF9QQVJTRVJfQ0hFQ0soW1suL2lucHV0IGFhYWFUXV0sIFtbMV1dKQorCisjIFRoZXJlIGlzIGVycm9yLXJlY292ZXJ5LCBzbyBleGl0IHN1Y2Nlc3MuCitBVF9QQVJTRVJfQ0hFQ0soW1suL2lucHV0IGFhYWFSXV0sIFtbMF1dKQorCitBVF9CSVNPTl9PUFRJT05fUE9QREVGUworCitBVF9DTEVBTlVQCmRpZmYgLS1naXQgYS90ZXN0cy9jYWxjLmF0IGIvdGVzdHMvY2FsYy5hdAppbmRleCBkZWRmNTY4Li5mNzI4MzZlIDEwMDY0NAotLS0gYS90ZXN0cy9jYWxjLmF0CisrKyBiL3Rlc3RzL2NhbGMuYXQKQEAgLTEsMjIgKzEsMTkgQEAKICMgU2ltcGxlIGNhbGN1bGF0b3IuICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvdGVzdCAtKi0KIAotIyBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwMC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSMgYW55IGxhdGVyIHZlcnNpb24uCi0KKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKICMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQorIwogIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0jIDAyMTEwLTEzMDEsIFVTQS4KKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAKICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKICMjIENvbXBpbGUgdGhlIGdyYW1tYXIgZGVzY3JpYmVkIGluIHRoZSBkb2N1bWVudGF0aW9uLiAgIyMKQEAgLTMwLDg1ICsyNywyNjcgQEAKIAogIyBfQVRfREFUQV9DQUxDX1koJDEsICQyLCAkMywgW0JJU09OLURJUkVDVElWRVNdKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBQcm9kdWNlIGBjYWxjLnknLiAgRG9uJ3QgY2FsbCB0aGlzIG1hY3JvIGRpcmVjdGx5LCBiZWNhdXNlIGl0IGNvbnRhaW5zCi0jIHNvbWUgb2NjdXJyZW5jZXMgb2YgYCQxJyBldGMuIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYnkgbTQuICBTbwotIyB5b3Ugc2hvdWxkIGNhbGwgaXQgd2l0aCAkMSwgJDIsIGFuZCAkMyBhcyBhcmd1bWVudHMsIHdoaWNoIGlzIHdoYXQKLSMgQVRfREFUQV9DQUxDX1kgZG9lcy4KKyMgUHJvZHVjZSBgY2FsYy55JyBhbmQsIGlmICVkZWZpbmVzIHdhcyBzcGVjaWZpZWQsIGBjYWxjLWxleC5jJyBvcgorIyBgY2FsYy1sZXguY2MnLgorIworIyBEb24ndCBjYWxsIHRoaXMgbWFjcm8gZGlyZWN0bHksIGJlY2F1c2UgaXQgY29udGFpbnMgc29tZSBvY2N1cnJlbmNlcworIyBvZiBgJDEnIGV0Yy4gd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBieSBtNC4gIFNvIHlvdSBzaG91bGQgY2FsbCBpdAorIyB3aXRoICQxLCAkMiwgYW5kICQzIGFzIGFyZ3VtZW50cywgd2hpY2ggaXMgd2hhdCBBVF9EQVRBX0NBTENfWSBkb2VzLgorIworIyBXaGVuICVkZWZpbmVzIGlzIG5vdCBwYXNzZWQsIGdlbmVyYXRlIGEgc2luZ2xlIHNlbGYtY29udGFpbmVkIGZpbGUuCisjIE90aGVyd2lzZSwgZ2VuZXJhdGUgdGhyZWU6IGNhbGMueSB3aXRoIHRoZSBwYXJzZXIsIGNhbGMtbGV4LmMgd2l0aAorIyB0aGUgc2Nhbm5lciwgYW5kIGNhbGMtbWFpbi5jIHdpdGggIm1haW4oKSIuICBUaGlzIGlzIGluIG9yZGVyIHRvCisjIHN0cmVzcyB0aGUgdXNlIG9mIHRoZSBnZW5lcmF0ZWQgcGFyc2VyIGhlYWRlci4gIFRvIGF2b2lkIGNvZGUKKyMgZHVwbGljYXRpb24sIEFUX0NBTENfTEVYIGFuZCBBVF9DQUxDX01BSU4gY29udGFpbiB0aGUgYm9keSBvZiB0aGVzZQorIyB0d28gbGF0ZXIgZmlsZXMuCiBtNF9kZWZpbmUoW19BVF9EQVRBX0NBTENfWV0sCiBbbTRfaWYoWyQxJDIkM10sICRbMV0kWzJdJFszXSwgW10sCiAgICAgICAgW200X2ZhdGFsKFskMDogSW52YWxpZCBhcmd1bWVudHM6ICRAXSldKWRubAotQVRfREFUQV9HUkFNTUFSKFtjYWxjLnldLAotW1svKiBJbmZpeCBub3RhdGlvbiBjYWxjdWxhdG9yLS1jYWxjICovCi1dJDQKLUFUX1NLRUxfQ0NfSUYoCi1bJWRlZmluZSAiZ2xvYmFsX3Rva2Vuc19hbmRfeXlzdHlwZSJdKVsKLSV7Ci0jaW5jbHVkZSA8c3RkaW8uaD4KIAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgorbTRfcHVzaGRlZihbQVRfQ0FMQ19NQUlOXSwKK1sjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaWYgSEFWRV9VTklTVERfSAogIyBpbmNsdWRlIDx1bmlzdGQuaD4KICNlbHNlCiAjIHVuZGVmIGFsYXJtCiAjIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLwogI2VuZGlmCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNkZWZpbmUgVVNFKFZhcikKIAotLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KLXR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOworQVRfU0tFTF9DQ19JRihbWworLyogQSBDKysgXUFUX05BTUVfUFJFRklYW3BhcnNlIHRoYXQgc2ltdWxhdGVzIHRoZSBDIHNpZ25hdHVyZS4gICovCitpbnQKK11BVF9OQU1FX1BSRUZJWFtwYXJzZSAoXUFUX1BBUkFNX0lGKFtzZW1hbnRpY192YWx1ZSAqcmVzdWx0LCBpbnQgKmNvdW50XSkpWworeworICBdQVRfTkFNRV9QUkVGSVhbOjpwYXJzZXIgcGFyc2VyXUFUX1BBUkFNX0lGKFsgKHJlc3VsdCwgY291bnQpXSlbOworI2lmIF1BVF9BUElfUFJFRklYW0RFQlVHCisgIHBhcnNlci5zZXRfZGVidWdfbGV2ZWwgKDEpOworI2VuZGlmCisgIHJldHVybiBwYXJzZXIucGFyc2UgKCk7Cit9CitdXSlbCiAKLXN0YXRpYyBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKLXN0YXRpYyBpbnQgZ2xvYmFsX2NvdW50ID0gMDsKLSV9CitzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKK2ludCBnbG9iYWxfY291bnQgPSAwOworCisvKiBBIEMgbWFpbiBmdW5jdGlvbi4gICovCitpbnQKK21haW4gKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKyAgc2VtYW50aWNfdmFsdWUgcmVzdWx0ID0gMDsKKyAgaW50IGNvdW50ID0gMDsKKyAgaW50IHN0YXR1czsKKworICAvKiBUaGlzIHVzZWQgdG8gYmUgYWxhcm0gKDEwKSwgYnV0IHRoYXQgaXNuJ3QgZW5vdWdoIHRpbWUgZm9yCisgICAgIGEgSnVseSAxOTk1IHZpbnRhZ2UgREVDIEFscGhhc3RhdGlvbiAyMDAgNC8xMDAgc3lzdGVtLAorICAgICBhY2NvcmRpbmcgdG8gTmVsc29uIEguIEYuIEJlZWJlLiAgMTAwIHNlY29uZHMgaXMgZW5vdWdoLiAgKi8KKyAgYWxhcm0gKDEwMCk7CisKKyAgaWYgKGFyZ2MgPT0gMikKKyAgICBpbnB1dCA9IGZvcGVuIChhcmd2WzFdLCAiciIpOworICBlbHNlCisgICAgaW5wdXQgPSBzdGRpbjsKKworICBpZiAoIWlucHV0KQorICAgIHsKKyAgICAgIHBlcnJvciAoYXJndlsxXSk7CisgICAgICByZXR1cm4gMzsKKyAgICB9CisKK11BVF9TS0VMX0NDX0lGKFtdLCBbbTRfYm1hdGNoKFskNF0sIFslZGVidWddLAorWyAgXUFUX05BTUVfUFJFRklYW2RlYnVnID0gMTtdKV0pWworICBzdGF0dXMgPSBdQVRfTkFNRV9QUkVGSVhbcGFyc2UgKF1BVF9QQVJBTV9JRihbWyZyZXN1bHQsICZjb3VudF1dKVspOworICBpZiAoZmNsb3NlIChpbnB1dCkpCisgICAgcGVycm9yICgiZmNsb3NlIik7CisgIGFzc2VydCAoZ2xvYmFsX3Jlc3VsdCA9PSByZXN1bHQpOworICBhc3NlcnQgKGdsb2JhbF9jb3VudCA9PSBjb3VudCk7CisgIHJldHVybiBzdGF0dXM7Cit9CitdXSkKKworCittNF9wdXNoZGVmKFtBVF9DQUxDX0xFWF0sCitbWyNpbmNsdWRlIDxjdHlwZS5oPgorCitdQVRfWVlMRVhfREVDTEFSRV9FWFRFUk5bCitzdGF0aWMgaW50IGdldF9jaGFyIChdQVRfWVlMRVhfRk9STUFMU1spOworc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoXUFUX1lZTEVYX1BSRV9GT1JNQUxTWyBpbnQgYyk7CisKK11BVF9MT0NBVElPTl9JRihbCitzdGF0aWMgQVRfWVlMVFlQRSBsYXN0X3l5bGxvYzsKK10pWworc3RhdGljIGludAorZ2V0X2NoYXIgKF1BVF9ZWUxFWF9GT1JNQUxTWykKK3sKKyAgaW50IHJlcyA9IGdldGMgKGlucHV0KTsKKyAgXUFUX1VTRV9MRVhfQVJHU1s7CitdQVRfTE9DQVRJT05fSUYoWworICBsYXN0X3l5bGxvYyA9IEFUX0xPQzsKKyAgaWYgKHJlcyA9PSAnXG4nKQorICAgIHsKKyAgICAgIEFUX0xPQ19MQVNUX0xJTkUrKzsKKyAgICAgIEFUX0xPQ19MQVNUX0NPTFVNTiA9IDE7CisgICAgfQorICBlbHNlCisgICAgQVRfTE9DX0xBU1RfQ09MVU1OKys7CitdKVsKKyAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQKK3VuZ2V0X2NoYXIgKF1BVF9ZWUxFWF9QUkVfRk9STUFMU1sgaW50IGMpCit7CisgIF1BVF9VU0VfTEVYX0FSR1NbOworXUFUX0xPQ0FUSU9OX0lGKFsKKyAgLyogV3Jvbmcgd2hlbiBDID09IGBcbicuICovCisgIEFUX0xPQyA9IGxhc3RfeXlsbG9jOworXSlbCisgIHVuZ2V0YyAoYywgaW5wdXQpOworfQorCitzdGF0aWMgaW50CityZWFkX3NpZ25lZF9pbnRlZ2VyIChdQVRfWVlMRVhfRk9STUFMU1spCit7CisgIGludCBjID0gZ2V0X2NoYXIgKF1BVF9ZWUxFWF9BUkdTWyk7CisgIGludCBzaWduID0gMTsKKyAgaW50IG4gPSAwOworCisgIF1BVF9VU0VfTEVYX0FSR1NbOworICBpZiAoYyA9PSAnLScpCisgICAgeworICAgICAgYyA9IGdldF9jaGFyIChdQVRfWVlMRVhfQVJHU1spOworICAgICAgc2lnbiA9IC0xOworICAgIH0KKworICB3aGlsZSAoaXNkaWdpdCAoYykpCisgICAgeworICAgICAgbiA9IDEwICogbiArIChjIC0gJzAnKTsKKyAgICAgIGMgPSBnZXRfY2hhciAoXUFUX1lZTEVYX0FSR1NbKTsKKyAgICB9CisKKyAgdW5nZXRfY2hhciAoXUFUX1lZTEVYX1BSRV9BUkdTWyBjKTsKKworICByZXR1cm4gc2lnbiAqIG47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IExleGljYWwgYW5hbHl6ZXIgcmV0dXJucyBhbiBpbnRlZ2VyIG9uIHRoZSBzdGFjayBhbmQgdGhlIHRva2VuIHwKK3wgTlVNLCBvciB0aGUgQVNDSUkgY2hhcmFjdGVyIHJlYWQgaWYgbm90IGEgbnVtYmVyLiAgU2tpcHMgYWxsICAgfAorfCBibGFua3MgYW5kIHRhYnMsIHJldHVybnMgMCBmb3IgRU9GLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworXUFUX1lZTEVYX1BST1RPVFlQRVsKK3sKKyAgaW50IGM7CisgIC8qIFNraXAgY3VycmVudCB0b2tlbiwgdGhlbiB3aGl0ZSBzcGFjZXMuICAqLworICBkbworICAgIHsKK11BVF9MT0NBVElPTl9JRigKK1sgICAgIEFUX0xPQ19GSVJTVF9DT0xVTU4gPSBBVF9MT0NfTEFTVF9DT0xVTU47CisgICAgICBBVF9MT0NfRklSU1RfTElORSAgID0gQVRfTE9DX0xBU1RfTElORTsKK10pWworICAgIH0KKyAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKF1BVF9ZWUxFWF9BUkdTWykpID09ICcgJyB8fCBjID09ICdcdCcpOworCisgIC8qIHByb2Nlc3MgbnVtYmVycyAgICovCisgIGlmIChjID09ICcuJyB8fCBpc2RpZ2l0IChjKSkKKyAgICB7CisgICAgICB1bmdldF9jaGFyIChdQVRfWVlMRVhfUFJFX0FSR1NbIGMpOworICAgICAgXUFUX1ZBTFsuaXZhbCA9IHJlYWRfc2lnbmVkX2ludGVnZXIgKF1BVF9ZWUxFWF9BUkdTWyk7CisgICAgICByZXR1cm4gTlVNOworICAgIH0KKworICAvKiBSZXR1cm4gZW5kLW9mLWZpbGUuICAqLworICBpZiAoYyA9PSBFT0YpCisgICAgcmV0dXJuIENBTENfRU9GOworCisgIC8qIFJldHVybiBzaW5nbGUgY2hhcnMuICovCisgIHJldHVybiBjOworfQorXV0pCisKK0FUX0RBVEFfR1JBTU1BUihbY2FsYy55XSwKK1tbLyogSW5maXggbm90YXRpb24gY2FsY3VsYXRvci0tY2FsYyAqLworXSQ0CitBVF9TS0VMX0NDX0lGKAorWyVkZWZpbmUgZ2xvYmFsX3Rva2Vuc19hbmRfeXlzdHlwZV0pWworJWNvZGUgcmVxdWlyZXMKK3sKK11BVF9MT0NBVElPTl9UWVBFX0lGKFtbCisjIGluY2x1ZGUgPGlvc3RyZWFtPgorICBzdHJ1Y3QgUG9pbnQKKyAgeworICAgIGludCBsOworICAgIGludCBjOworICB9OworCisgIHN0cnVjdCBTcGFuCisgIHsKKyAgICBQb2ludCBmaXJzdDsKKyAgICBQb2ludCBsYXN0OworICB9OworCisjIGRlZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKE4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChDdXJyZW50KS5maXJzdCA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0OyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChDdXJyZW50KS5sYXN0ICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3Q7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChDdXJyZW50KS5maXJzdCA9IChDdXJyZW50KS5sYXN0ID0gWVlSSFNMT0MgKFJocywgMCkubGFzdDsgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHdoaWxlIChmYWxzZSkKKworXV0pWworICAvKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLworICB0eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKK30KIAogLyogRXhlcmNpc2UgJXVuaW9uLiAqLwogJXVuaW9uCiB7CiAgIHNlbWFudGljX3ZhbHVlIGl2YWw7CiB9OworJXByaW50ZXIgeyBdQVRfU0tFTF9DQ19JRihbW3l5b3V0cHV0IDw8ICQkXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZnByaW50ZiAoeXlvdXRwdXQsICIlZCIsICQkKV1dKVs7IH0gPGl2YWw+OwogCi0lewotc3RhdGljIGludCBwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCk7Ci1dQVRfU0tFTF9DQ19JRigKLVsjaWZuZGVmIFlZTFRZUEUKLVsjXSBkZWZpbmUgWVlMVFlQRSBBVF9OQU1FX1BSRUZJWDo6bG9jYXRpb24KLSNlbmRpZgotI2RlZmluZSBmaXJzdF9saW5lICAgYmVnaW4ubGluZQotI2RlZmluZSBmaXJzdF9jb2x1bW4gYmVnaW4uY29sdW1uCi0jZGVmaW5lIGxhc3RfbGluZSAgICBlbmQubGluZQotI2RlZmluZSBsYXN0X2NvbHVtbiAgZW5kLmNvbHVtbgotXSwKLVsvKiB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZjoKLSAgIC0gJWxvY2F0aW9uICYgJXB1cmUgJiAlZ2xyCi0gICAtICVsb2NhdGlvbiAmICVwdXJlICYgJXlhY2MgJiAlcGFyc2UtcGFyYW0uICovCi1zdGF0aWMgdm9pZCB5eWVycm9yIChBVF9ZWUVSUk9SX0FSR19MT0NfSUYoW1lZTFRZUEUgKmxsb2NwLCBdKQotICAgICAgICAgICAgICAgICAgICAgQVRfUEFSQU1fSUYoW3NlbWFudGljX3ZhbHVlICpyZXN1bHQsIGludCAqY291bnQsIF0pCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzCi0gICAgICAgICAgICAgICAgICAgICApO10pWwotc3RhdGljIGludCB5eWxleCAoXUFUX0xFWF9GT1JNQUxTWyk7Ci1zdGF0aWMgaW50IGdldF9jaGFyIChdQVRfTEVYX0ZPUk1BTFNbKTsKLXN0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKF1BVF9MRVhfUFJFX0ZPUk1BTFNbIGludCBjKTsKLSV9Ci0KLV1BVF9TS0VMX0NDX0lGKAotWy8qIFRoZSBsYWxyMS5jYyBza2VsZXRvbiwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGRlZmluZXMKLSAgIGEgY29uc3RydWN0b3IgZm9yIHBvc2l0aW9uIHRoYXQgaW5pdGlhbGl6ZXMgdGhlIGZpbGVuYW1lLiAgVGhlCi0gICBnbHIuY2Mgc2tlbGV0b24gZG9lcyBub3QgKGFuZCBpbiBmYWN0IGNhbm5vdDogbG9jYXRpb24vcG9zaXRpb24KLSAgIGFyZSBzdG9yZWQgaW4gYSB1bmlvbiwgZnJvbSB3aGljaCBvYmplY3RzIHdpdGggY29uc3RydWN0b3JzIGFyZQotICAgZXhjbHVkZWQgaW4gQysrLiAqLwotJWluaXRpYWwtYWN0aW9uIHsKLSAgQCQuaW5pdGlhbGl6ZSAoMCk7CislY29kZSBwcm92aWRlcworeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgLyogVGhlIGlucHV0LiAgKi8KKyAgZXh0ZXJuIEZJTEUgKmlucHV0OworICBleHRlcm4gc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdDsKKyAgZXh0ZXJuIGludCBnbG9iYWxfY291bnQ7CiB9Ci1dKVsKKworJWNvZGUKK3sKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNkZWZpbmUgVVNFKFZhcikKKworRklMRSAqaW5wdXQ7CitzdGF0aWMgaW50IHBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KTsKKworXUFUX1lZRVJST1JfREVDTEFSRVsKK11BVF9ZWUxFWF9ERUNMQVJFX0VYVEVSTlsKK30KKworXUFUX1NLRUxfQ0NfSUYoW0FUX0xPQ0FUSU9OX1RZUEVfSUYoW1sKKyVpbml0aWFsLWFjdGlvbgoreworICBAJC5maXJzdC5sID0gQCQuZmlyc3QuYyA9IDE7CisgIEAkLmxhc3QgPSBAJC5maXJzdDsKK31dXSldKVsKIAogLyogQmlzb24gRGVjbGFyYXRpb25zICovCiAldG9rZW4gQ0FMQ19FT0YgMCAiZW5kIG9mIGlucHV0IgogJXRva2VuIDxpdmFsPiBOVU0gIm51bWJlciIKICV0eXBlICA8aXZhbD4gZXhwCiAKLSVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbgkgICAgICAgKi8KKyVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbiAgICAgICAgICAgICovCiAlbGVmdCAnLScgJysnCiAlbGVmdCAnKicgJy8nCiAlbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLwpAQCAtMTQxLDIxMyArMzIwLDU4IEBACiB8ICctJyBleHAgICVwcmVjIE5FRyB7ICQkID0gLSQyOyAgICAgICAgICAgIH0KIHwgZXhwICdeJyBleHAgICAgICAgIHsgJCQgPSBwb3dlciAoJDEsICQzKTsgfQogfCAnKCcgZXhwICcpJyAgICAgICAgeyAkJCA9ICQyOyAgICAgICAgICAgICB9Ci18ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgICAgICAgICAgIH0KK3wgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyB5eWVycm9rOyAgfQogfCAnIScgICAgICAgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9CiB8ICctJyBlcnJvciAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KIDsKICUlCi0vKiBUaGUgaW5wdXQuICAqLwotc3RhdGljIEZJTEUgKmlucHV0OwotCi1dQVRfU0tFTF9DQ19JRigKLVsvKiBBIEMrKyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLwotdm9pZAotQVRfTkFNRV9QUkVGSVg6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGxvY2F0aW9uJiBsLCBjb25zdCBzdGQ6OnN0cmluZyYgbSkKLXsKLSAgKHZvaWQpIGw7Ci0gIHN0ZDo6Y2VyciA8PCBBVF9MT0NBVElPTl9JRihbbCA8PCAiOiAiIDw8IF0pbSA8PCBzdGQ6OmVuZGw7Ci19Ci0KLWludAoteXlwYXJzZSAoQVRfUEFSQU1fSUYoW3NlbWFudGljX3ZhbHVlICpyZXN1bHQsIGludCAqY291bnRdKSkKLXsKLSAgQVRfTkFNRV9QUkVGSVg6OnBhcnNlciBwYXJzZXJbXUFUX1BBUkFNX0lGKFsgKHJlc3VsdCwgY291bnQpXSk7Ci0gIHBhcnNlci5zZXRfZGVidWdfbGV2ZWwgKCEhWVlERUJVRyk7Ci0gIHJldHVybiBwYXJzZXIucGFyc2UgKCk7Ci19Ci1dLAotW3N0YXRpYyB2b2lkCi15eWVycm9yIChBVF9ZWUVSUk9SX0FSR19MT0NfSUYoW1lZTFRZUEUgKmxsb2NwLCBdKQotICAgICAgICAgQVRfUEFSQU1fSUYoW3NlbWFudGljX3ZhbHVlICpyZXN1bHQsIGludCAqY291bnQsIF0pCi0gICAgICAgICBjb25zdCBjaGFyICpzKQotewotQVRfUEFSQU1fSUYoWyh2b2lkKSByZXN1bHQ7ICh2b2lkKSBjb3VudDtdKQotQVRfWVlFUlJPUl9TRUVTX0xPQ19JRihbCi0gIGZwcmludGYgKHN0ZGVyciwgIiVkLiVkIiwKLSAgICAgICAgICAgQVRfTE9DLmZpcnN0X2xpbmUsIEFUX0xPQy5maXJzdF9jb2x1bW4pOwotICBpZiAoQVRfTE9DLmZpcnN0X2xpbmUgIT0gQVRfTE9DLmxhc3RfbGluZSkKLSAgICBmcHJpbnRmIChzdGRlcnIsICItJWQuJWQiLAotCSAgICAgQVRfTE9DLmxhc3RfbGluZSwgIEFUX0xPQy5sYXN0X2NvbHVtbiAtIDEpOwotICBlbHNlIGlmIChBVF9MT0MuZmlyc3RfY29sdW1uICE9IEFUX0xPQy5sYXN0X2NvbHVtbiAtIDEpCi0gICAgZnByaW50ZiAoc3RkZXJyLCAiLSVkIiwKLQkgICAgIEFUX0xPQy5sYXN0X2NvbHVtbiAtIDEpOwotICBmcHJpbnRmIChzdGRlcnIsICI6ICIpO10pCi0gIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBzKTsKLX1dKVsKLQotCi1dQVRfTE9DQVRJT05fSUYoWwotc3RhdGljIFlZTFRZUEUgbGFzdF95eWxsb2M7Ci1dKVsKLXN0YXRpYyBpbnQKLWdldF9jaGFyIChdQVRfTEVYX0ZPUk1BTFNbKQotewotICBpbnQgcmVzID0gZ2V0YyAoaW5wdXQpOwotICBdQVRfVVNFX0xFWF9BUkdTWzsKLV1BVF9MT0NBVElPTl9JRihbCi0gIGxhc3RfeXlsbG9jID0gQVRfTE9DOwotICBpZiAocmVzID09ICdcbicpCi0gICAgewotICAgICAgQVRfTE9DLmxhc3RfbGluZSsrOwotICAgICAgQVRfTE9DLmxhc3RfY29sdW1uID0gMDsKLSAgICB9Ci0gIGVsc2UKLSAgICBBVF9MT0MubGFzdF9jb2x1bW4rKzsKLV0pWwotICByZXR1cm4gcmVzOwotfQotCi0KLXN0YXRpYyB2b2lkCi11bmdldF9jaGFyIChdQVRfTEVYX1BSRV9GT1JNQUxTWyBpbnQgYykKLXsKLSAgXUFUX1VTRV9MRVhfQVJHU1s7Ci1dQVRfTE9DQVRJT05fSUYoWwotICAvKiBXcm9uZyB3aGVuIEMgPT0gYFxuJy4gKi8KLSAgQVRfTE9DID0gbGFzdF95eWxsb2M7Ci1dKVsKLSAgdW5nZXRjIChjLCBpbnB1dCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXJlYWRfc2lnbmVkX2ludGVnZXIgKF1BVF9MRVhfRk9STUFMU1spCi17Ci0gIGludCBjID0gZ2V0X2NoYXIgKF1BVF9MRVhfQVJHU1spOwotICBpbnQgc2lnbiA9IDE7Ci0gIGludCBuID0gMDsKLQotICBdQVRfVVNFX0xFWF9BUkdTWzsKLSAgaWYgKGMgPT0gJy0nKQotICAgIHsKLSAgICAgIGMgPSBnZXRfY2hhciAoXUFUX0xFWF9BUkdTWyk7Ci0gICAgICBzaWduID0gLTE7Ci0gICAgfQotCi0gIHdoaWxlIChpc2RpZ2l0IChjKSkKLSAgICB7Ci0gICAgICBuID0gMTAgKiBuICsgKGMgLSAnMCcpOwotICAgICAgYyA9IGdldF9jaGFyIChdQVRfTEVYX0FSR1NbKTsKLSAgICB9Ci0KLSAgdW5nZXRfY2hhciAoXUFUX0xFWF9QUkVfQVJHU1sgYyk7Ci0KLSAgcmV0dXJuIHNpZ24gKiBuOwotfQotCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IExleGljYWwgYW5hbHl6ZXIgcmV0dXJucyBhbiBpbnRlZ2VyIG9uIHRoZSBzdGFjayBhbmQgdGhlIHRva2VuIHwKLXwgTlVNLCBvciB0aGUgQVNDSUkgY2hhcmFjdGVyIHJlYWQgaWYgbm90IGEgbnVtYmVyLiAgU2tpcHMgYWxsICAgfAotfCBibGFua3MgYW5kIHRhYnMsIHJldHVybnMgMCBmb3IgRU9GLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGludAoteXlsZXggKF1BVF9MRVhfRk9STUFMU1spCi17Ci0gIHN0YXRpYyBpbnQgaW5pdCA9IDE7Ci0gIGludCBjOwotCi0gIGlmIChpbml0KQotICAgIHsKLSAgICAgIGluaXQgPSAwOwotXUFUX0xPQ0FUSU9OX0lGKFsKLSAgICAgIEFUX0xPQy5sYXN0X2NvbHVtbiA9IDA7Ci0gICAgICBBVF9MT0MubGFzdF9saW5lID0gMTsKLV0pWwotICAgIH0KLQotXUFUX0xPQ0FUSU9OX0lGKFsKLSBBVF9MT0MuZmlyc3RfY29sdW1uID0gQVRfTE9DLmxhc3RfY29sdW1uOwotICBBVF9MT0MuZmlyc3RfbGluZSAgID0gQVRfTE9DLmxhc3RfbGluZTsKLV0pWwotCi0gIC8qIFNraXAgd2hpdGUgc3BhY2UuICAqLwotICB3aGlsZSAoKGMgPSBnZXRfY2hhciAoXUFUX0xFWF9BUkdTWykpID09ICcgJyB8fCBjID09ICdcdCcpCi0gICAgewotXUFUX0xPQ0FUSU9OX0lGKAotWyAgICAgQVRfTE9DLmZpcnN0X2NvbHVtbiA9IEFUX0xPQy5sYXN0X2NvbHVtbjsKLSAgICAgIEFUX0xPQy5maXJzdF9saW5lICAgPSBBVF9MT0MubGFzdF9saW5lOwotXSlbCi0gICAgfQotCi0gIC8qIHByb2Nlc3MgbnVtYmVycyAgICovCi0gIGlmIChjID09ICcuJyB8fCBpc2RpZ2l0IChjKSkKLSAgICB7Ci0gICAgICB1bmdldF9jaGFyIChdQVRfTEVYX1BSRV9BUkdTWyBjKTsKLSAgICAgIF1BVF9WQUxbLml2YWwgPSByZWFkX3NpZ25lZF9pbnRlZ2VyIChdQVRfTEVYX0FSR1NbKTsKLSAgICAgIHJldHVybiBOVU07Ci0gICAgfQotCi0gIC8qIFJldHVybiBlbmQtb2YtZmlsZS4gICovCi0gIGlmIChjID09IEVPRikKLSAgICByZXR1cm4gQ0FMQ19FT0Y7Ci0KLSAgLyogUmV0dXJuIHNpbmdsZSBjaGFycy4gKi8KLSAgcmV0dXJuIGM7Ci19CiAKIHN0YXRpYyBpbnQKIHBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQogewogICBpbnQgcmVzID0gMTsKLSAgaWYgKGV4cG9uZW50IDwgMCkKLSAgICBleGl0ICgzKTsKKyAgYXNzZXJ0ICgwIDw9IGV4cG9uZW50KTsKICAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQogICAgIHJlcyAqPSBiYXNlOwogICByZXR1cm4gcmVzOwogfQogCitdQVRfU0tFTF9DQ19JRigKK1tBVF9MT0NBVElPTl9UWVBFX0lGKFtbCisgIHN0ZDo6b3N0cmVhbSYKKyAgb3BlcmF0b3I8PCAoc3RkOjpvc3RyZWFtJiBvLCBjb25zdCBTcGFuJiBzKQorICB7CisgICAgbyA8PCBzLmZpcnN0LmwgPDwgJy4nIDw8IHMuZmlyc3QuYzsKKyAgICBpZiAocy5maXJzdC5sICE9IHMubGFzdC5sKQorICAgICAgbyA8PCAnLScgPDwgcy5sYXN0LmwgPDwgJy4nIDw8IHMubGFzdC5jIC0gMTsKKyAgICBlbHNlIGlmIChzLmZpcnN0LmMgIT0gcy5sYXN0LmMgLSAxKQorICAgICAgbyA8PCAnLScgPDwgcy5sYXN0LmMgLSAxOworICAgIHJldHVybiBvOworICB9CitdXSldKVsKK11BVF9ZWUVSUk9SX0RFRklORVsKK11BVF9ERUZJTkVTX0lGKFtdLAorW0FUX0NBTENfTEVYCitBVF9DQUxDX01BSU5dKV0pCiAKLWludAotbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQotewotICBzZW1hbnRpY192YWx1ZSByZXN1bHQgPSAwOwotICBpbnQgY291bnQgPSAwOwotICBpbnQgc3RhdHVzOworQVRfREVGSU5FU19JRihbQVRfREFUQV9TT1VSQ0UoW1tjYWxjLWxleC5jXUFUX1NLRUxfQ0NfSUYoW1tjXV0pXSwKK1tbI2luY2x1ZGUgImNhbGMuaF1BVF9TS0VMX0NDX0lGKFtbaF1dKVsiCiAKLSAgLyogVGhpcyB1c2VkIHRvIGJlIGFsYXJtICgxMCksIGJ1dCB0aGF0IGlzbid0IGVub3VnaCB0aW1lIGZvcgotICAgICBhIEp1bHkgMTk5NSB2aW50YWdlIERFQyBBbHBoYXN0YXRpb24gMjAwIDQvMTAwIHN5c3RlbSwKLSAgICAgYWNjb3JkaW5nIHRvIE5lbHNvbiBILiBGLiBCZWViZS4gIDEwMCBzZWNvbmRzIGlzIGVub3VnaC4gICovCi0gIGFsYXJtICgxMDApOworXUFUX0NBTENfTEVYXSkKK0FUX0RBVEFfU09VUkNFKFtbY2FsYy1tYWluLmNdQVRfU0tFTF9DQ19JRihbW2NdXSldLAorW1sjaW5jbHVkZSAiY2FsYy5oXUFUX1NLRUxfQ0NfSUYoW1toXV0pWyIKIAotICBpZiAoYXJnYyA9PSAyKQotICAgIGlucHV0ID0gZm9wZW4gKGFyZ3ZbMV0sICJyIik7Ci0gIGVsc2UKLSAgICBpbnB1dCA9IHN0ZGluOwotCi0gIGlmICghaW5wdXQpCi0gICAgewotICAgICAgcGVycm9yIChhcmd2WzFdKTsKLSAgICAgIHJldHVybiAzOwotICAgIH0KLQotXUFUX1NLRUxfQ0NfSUYoW10sIFttNF9ibWF0Y2goWyQ0XSwgWyVkZWJ1Z10sCi1bICB5eWRlYnVnID0gMTtdKV0pWwotICBzdGF0dXMgPSB5eXBhcnNlIChdQVRfUEFSQU1fSUYoWyZyZXN1bHQsICZjb3VudF0pWyk7Ci0gIGlmIChnbG9iYWxfcmVzdWx0ICE9IHJlc3VsdCkKLSAgICBhYm9ydCAoKTsKLSAgaWYgKGdsb2JhbF9jb3VudCAhPSBjb3VudCkKLSAgICBhYm9ydCAoKTsKLSAgcmV0dXJuIHN0YXR1czsKLX0KLV1dKQorXUFUX0NBTENfTUFJTl0pCitdKQorbTRfcG9wZGVmKFtBVF9DQUxDX01BSU5dKQorbTRfcG9wZGVmKFtBVF9DQUxDX0xFWF0pCiBdKSMgX0FUX0RBVEFfQ0FMQ19ZCiAKIAogIyBBVF9EQVRBX0NBTENfWShbQklTT04tT1BUSU9OU10pCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUHJvZHVjZSBgY2FsYy55Jy4KKyMgUHJvZHVjZSBgY2FsYy55JyBhbmQsIGlmICVkZWZpbmVzIHdhcyBzcGVjaWZpZWQsIGBjYWxjLWxleC5jJyBvcgorIyBgY2FsYy1sZXguY2MnLgogbTRfZGVmaW5lKFtBVF9EQVRBX0NBTENfWV0sCiBbX0FUX0RBVEFfQ0FMQ19ZKCRbMV0sICRbMl0sICRbM10sIFskMV0pCiBdKQpAQCAtNDEwLDExICs0MzQsMTMgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkW1swLTkkXV0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgpAQCAtNDM2LDI2ICs0NjIsMzkgQEAKIF0pCiAKIAotIyBBVF9DSEVDS19DQUxDKFtCSVNPTi1PUFRJT05TLCBbRVhQRUNURUQtVE8tRkFJTF1dKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBVF9DSEVDS19TUEFDRVMoW0ZJTEVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNYWtlIHN1cmUgd2UgZGlkIG5vdCBpbnRyb2R1Y2UgYmFkIHNwYWNlcy4gIENoZWNrZWQgaGVyZSBiZWNhdXNlIGFsbAorIyB0aGUgc2tlbGV0b25zIGFyZSAob3Igc2hvdWxkIGJlKSBleGVyY2l6ZWQgaGVyZS4KK200X2RlZmluZShbQVRfQ0hFQ0tfU1BBQ0VTXSwKK1tBVF9DSEVDSyhbJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknICQxCitdKWRubAorXSkKKworCisjIEFUX0NIRUNLX0NBTEMoW0JJU09OLU9QVElPTlNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgU3RhcnQgYSB0ZXN0aW5nIGNodW5rIHdoaWNoIGNvbXBpbGVzIGBjYWxjJyBncmFtbWFyIHdpdGgKICMgQklTT04tT1BUSU9OUywgYW5kIHBlcmZvcm1zIHNldmVyYWwgdGVzdHMgb3ZlciB0aGUgcGFyc2VyLgotIyBIb3dldmVyLCBpZiBFWFBFQ1RFRC1UTy1GQUlMIGlzIG5vbmVtcHR5LCB0aGlzIHRlc3QgaXMgZXhwZWN0ZWQgdG8gZmFpbC4KIG00X2RlZmluZShbQVRfQ0hFQ0tfQ0FMQ10sCi1bIyBXZSB1c2UgaW50ZWdlcnMgdG8gYXZvaWQgZGVwZW5kZW5jaWVzIHVwb24gdGhlIHByZWNpc2lvbiBvZiBkb3VibGVzLgotQVRfU0VUVVAoW0NhbGN1bGF0b3IgJDFdKQorW200X2lmdmFsKFskMl0sIFttNF9mYXRhbChbJDA6IGV4cGVjdGVkIGEgc2luZ2xlIGFyZ3VtZW50XSldKQogCi1tNF9pZnZhbChbJDJdLCBbQVRfQ0hFQ0soW2V4aXQgNzddKV0pCisjIFdlIHVzZSBpbnRlZ2VycyB0byBhdm9pZCBkZXBlbmRlbmNpZXMgdXBvbiB0aGUgcHJlY2lzaW9uIG9mIGRvdWJsZXMuCitBVF9TRVRVUChbQ2FsY3VsYXRvciAkMV0pCiAKIEFUX0JJU09OX09QVElPTl9QVVNIREVGUyhbJDFdKQogCiBBVF9EQVRBX0NBTENfWShbJDFdKQotCi1BVF9TS0VMX0NDX0lGKAotICBbQVRfQ0hFQ0soW2Jpc29uIC1vIGNhbGMuY2MgY2FsYy55XSkKLSAgIEFUX0NPTVBJTEVfQ1hYKFtjYWxjXSldLAotICBbQVRfQ0hFQ0soW2Jpc29uIC1vIGNhbGMuYyBjYWxjLnldKQotICAgQVRfQ09NUElMRShbY2FsY10pXSkKK0FUX0ZVTExfQ09NUElMRShbY2FsY10sIEFUX0RFRklORVNfSUYoW1tsZXhdLCBbbWFpbl1dKSkKK0FUX0NIRUNLX1NQQUNFUyhbY2FsYy5BVF9TS0VMX0NDX0lGKFtjY10sIFtjXSldKQorQVRfREVGSU5FU19JRihbQVRfQ0hFQ0tfU1BBQ0VTKFtjYWxjLkFUX1NLRUxfQ0NfSUYoW2hoXSwgW2hdKV0pXSkKIAogIyBUZXN0IHRoZSBwcmlvcml0aWVzLgogX0FUX0NIRUNLX0NBTEMoWyQxXSwKQEAgLTQ3NSwyMiArNTE0LDIyIEBACiAgICAgICAgICAgICAgICBbODQyXSkKIAogIyBTb21lIHN5bnRheCBlcnJvcnMuCi1fQVRfQ0hFQ0tfQ0FMQ19FUlJPUihbJDFdLCBbMV0sIFswIDBdLCBbMTVdLAotICAgICAgICAgICAgICAgICAgICAgWzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcl0pCitfQVRfQ0hFQ0tfQ0FMQ19FUlJPUihbJDFdLCBbMV0sIFsxIDJdLCBbMTVdLAorICAgICAgICAgICAgICAgICAgICAgWzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcl0pCiBfQVRfQ0hFQ0tfQ0FMQ19FUlJPUihbJDFdLCBbMV0sIFsxLy8yXSwgWzIwXSwKLSAgICAgICAgICAgICAgICAgICAgIFsxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnISddKQorICAgICAgICAgICAgICAgICAgICAgWzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJ10pCiBfQVRfQ0hFQ0tfQ0FMQ19FUlJPUihbJDFdLCBbMV0sIFtlcnJvcl0sIFs1XSwKLSAgICAgICAgICAgICAgICAgICAgIFsxLjA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkXSkKKyAgICAgICAgICAgICAgICAgICAgIFsxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkXSkKIF9BVF9DSEVDS19DQUxDX0VSUk9SKFskMV0sIFsxXSwgWzEgPSAyID0gM10sIFszMF0sCi0gICAgICAgICAgICAgICAgICAgICBbMS42OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nXSkKKyAgICAgICAgICAgICAgICAgICAgIFsxLjc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPSddKQogX0FUX0NIRUNLX0NBTENfRVJST1IoWyQxXSwgWzFdLAogICAgICAgICAgICAgICAgICAgICAgWwogKzFdLAogICAgICAgICAgICAgICAgICAgICAgWzIwXSwKLSAgICAgICAgICAgICAgICAgICAgIFsyLjA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKyddKQorICAgICAgICAgICAgICAgICAgICAgWzIuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJ10pCiAjIEV4ZXJjaXNlIGVycm9yIG1lc3NhZ2VzIHdpdGggRU9GOiB3b3JrIG9uIGFuIGVtcHR5IGZpbGUuCiBfQVRfQ0hFQ0tfQ0FMQ19FUlJPUihbJDFdLCBbMV0sIFsvZGV2L251bGxdLCBbNF0sCi0gICAgICAgICAgICAgICAgICAgICBbMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XSkKKyAgICAgICAgICAgICAgICAgICAgIFsxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXRdKQogCiAjIEV4ZXJjaXNlIHRoZSBlcnJvciB0b2tlbjogd2l0aG91dCBpdCwgd2UgZGllIGF0IHRoZSBmaXJzdCBlcnJvciwKICMgaGVuY2UgYmUgc3VyZSB0bwpAQCAtNTAzLDI5ICs1NDIsMzcgQEAKICMKICMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCiAjCi0jIC0gY2hlY2sgdGhlIGxvb2stYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCi0jICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZQorIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCiAjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKICMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCiAjCiBfQVRfQ0hFQ0tfQ0FMQ19FUlJPUihbJDFdLCBbMF0sCiAgICAgICAgICAgICAgICAgICAgICBbKCkgKyAoMSArIDEgKyAxICspICsgKCogKiAqKSArICgxICogMiAqICopID0gMV0sCiAgICAgICAgICAgICAgICAgICAgICBbMjUwXSwKLVsxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuNDA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK1sxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKIGNhbGM6IGVycm9yOiA0NDQ0ICE9IDFdKQogCiAjIFRoZSBzYW1lLCBidXQgdGhpcyB0aW1lIGV4ZXJjaXNpbmcgZXhwbGljaXRseSB0cmlnZ2VyZWQgc3ludGF4IGVycm9ycy4KLSMgUE9TSVggc2F5cyB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KLV9BVF9DSEVDS19DQUxDX0VSUk9SKFskMV0sIFswXSwgWyghKSArICgwIDApID0gMV0sIFsxMDJdLAotWzEuOTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorIyBQT1NJWCBzYXlzIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCitfQVRfQ0hFQ0tfQ0FMQ19FUlJPUihbJDFdLCBbMF0sIFsoISkgKyAoMSAyKSA9IDFdLCBbMTAyXSwKK1sxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxXSkKLV9BVF9DSEVDS19DQUxDX0VSUk9SKFskMV0sIFswXSwgWygtICopICsgKDAgMCkgPSAxXSwgWzExM10sCi1bMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjExOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCitfQVRfQ0hFQ0tfQ0FMQ19FUlJPUihbJDFdLCBbMF0sIFsoLSAqKSArICgxIDIpID0gMV0sIFsxMTNdLAorWzEuNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogY2FsYzogZXJyb3I6IDIyMjIgIT0gMV0pCisKKyMgQ2hlY2sgdGhhdCB5eWVycm9rIHdvcmtzIHByb3Blcmx5OiBzZWNvbmQgZXJyb3IgaXMgbm90IHJlcG9ydGVkLAorIyB0aGlyZCBhbmQgZm91cnRoIGFyZS4gIFBhcnNlIHN0YXR1cyBpcyBzdWNjZXNmdWxsLgorX0FUX0NIRUNLX0NBTENfRVJST1IoWyQxXSwgWzBdLCBbKCogKikgKyAoKikgKyAoKildLCBbMTEzXSwKK1sxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTY6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnISddKQorCiBBVF9CSVNPTl9PUFRJT05fUE9QREVGUwogCiBBVF9DTEVBTlVQCkBAIC01NTEsMjIgKzU5OCwyNyBAQAogCiBBVF9DSEVDS19DQUxDX0xBTFIoWyVkZWZpbmVzXSkKIEFUX0NIRUNLX0NBTENfTEFMUihbJWxvY2F0aW9uc10pCi1BVF9DSEVDS19DQUxDX0xBTFIoWyVuYW1lLXByZWZpeD0iY2FsYyJdKQorCitBVF9DSEVDS19DQUxDX0xBTFIoWyVuYW1lLXByZWZpeD0iY2FsYyJdKSBkbmwgdGVzdCBkZXByZWNhdGVkIGA9JwogQVRfQ0hFQ0tfQ0FMQ19MQUxSKFsldmVyYm9zZV0pCiBBVF9DSEVDS19DQUxDX0xBTFIoWyV5YWNjXSkKIEFUX0NIRUNLX0NBTENfTEFMUihbJWVycm9yLXZlcmJvc2VdKQogCi1BVF9DSEVDS19DQUxDX0xBTFIoWyVwdXJlLXBhcnNlciAlbG9jYXRpb25zXSkKK0FUX0NIRUNLX0NBTENfTEFMUihbJWRlZmluZSBhcGkucHVyZSBmdWxsICVsb2NhdGlvbnNdKQorQVRfQ0hFQ0tfQ0FMQ19MQUxSKFslZGVmaW5lIGFwaS5wdXNoLXB1bGwgYm90aCAlZGVmaW5lIGFwaS5wdXJlIGZ1bGwgJWxvY2F0aW9uc10pCiBBVF9DSEVDS19DQUxDX0xBTFIoWyVlcnJvci12ZXJib3NlICVsb2NhdGlvbnNdKQogCi1BVF9DSEVDS19DQUxDX0xBTFIoWyVlcnJvci12ZXJib3NlICVsb2NhdGlvbnMgJWRlZmluZXMgJW5hbWUtcHJlZml4PSJjYWxjIiAldmVyYm9zZSAleWFjY10pCitBVF9DSEVDS19DQUxDX0xBTFIoWyVlcnJvci12ZXJib3NlICVsb2NhdGlvbnMgJWRlZmluZXMgJW5hbWUtcHJlZml4ICJjYWxjIiAldmVyYm9zZSAleWFjY10pCitBVF9DSEVDS19DQUxDX0xBTFIoWyVlcnJvci12ZXJib3NlICVsb2NhdGlvbnMgJWRlZmluZXMgJWRlZmluZSBhcGkucHJlZml4ICJjYWxjIiAldmVyYm9zZSAleWFjY10pCiAKIEFUX0NIRUNLX0NBTENfTEFMUihbJWRlYnVnXSkKLUFUX0NIRUNLX0NBTENfTEFMUihbJWVycm9yLXZlcmJvc2UgJWRlYnVnICVsb2NhdGlvbnMgJWRlZmluZXMgJW5hbWUtcHJlZml4PSJjYWxjIiAldmVyYm9zZSAleWFjY10pCitBVF9DSEVDS19DQUxDX0xBTFIoWyVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeCAiY2FsYyIgJXZlcmJvc2UgJXlhY2NdKQorQVRfQ0hFQ0tfQ0FMQ19MQUxSKFslZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlZGVmaW5lIGFwaS5wcmVmaXggImNhbGMiICV2ZXJib3NlICV5YWNjXSkKIAotQVRfQ0hFQ0tfQ0FMQ19MQUxSKFslcHVyZS1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVsb2NhdGlvbnMgJWRlZmluZXMgJW5hbWUtcHJlZml4PSJjYWxjIiAldmVyYm9zZSAleWFjY10pCitBVF9DSEVDS19DQUxDX0xBTFIoWyVkZWZpbmUgYXBpLnB1cmUgZnVsbCAldmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXggImNhbGMiICV2ZXJib3NlICV5YWNjXSkKK0FUX0NIRUNLX0NBTENfTEFMUihbJWRlZmluZSBhcGkucHVzaC1wdWxsIGJvdGggJWRlZmluZSBhcGkucHVyZSBmdWxsICV2ZXJib3NlICVkZWJ1ZyAlbG9jYXRpb25zICVkZWZpbmVzICVkZWZpbmUgYXBpLnByZWZpeCAiY2FsYyIgJXZlcmJvc2UgJXlhY2NdKQogCi1BVF9DSEVDS19DQUxDX0xBTFIoWyVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjICVwYXJzZS1wYXJhbSB7c2VtYW50aWNfdmFsdWUgKnJlc3VsdH0gJXBhcnNlLXBhcmFtIHtpbnQgKmNvdW50fV0pCitBVF9DSEVDS19DQUxDX0xBTFIoWyVkZWZpbmUgYXBpLnB1cmUgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVsb2NhdGlvbnMgJWRlZmluZXMgJWRlZmluZSBhcGkucHJlZml4ICJjYWxjIiAldmVyYm9zZSAleWFjYyAlcGFyc2UtcGFyYW0ge3NlbWFudGljX3ZhbHVlICpyZXN1bHR9ICVwYXJzZS1wYXJhbSB7aW50ICpjb3VudH1dKQogCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwpAQCAtNTg3LDIyICs2MzksMjUgQEAKIAogQVRfQ0hFQ0tfQ0FMQ19HTFIoWyVkZWZpbmVzXSkKIEFUX0NIRUNLX0NBTENfR0xSKFslbG9jYXRpb25zXSkKLUFUX0NIRUNLX0NBTENfR0xSKFslbmFtZS1wcmVmaXg9ImNhbGMiXSkKK0FUX0NIRUNLX0NBTENfR0xSKFslbmFtZS1wcmVmaXggImNhbGMiXSkKK0FUX0NIRUNLX0NBTENfR0xSKFslZGVmaW5lIGFwaS5wcmVmaXggImNhbGMiXSkKIEFUX0NIRUNLX0NBTENfR0xSKFsldmVyYm9zZV0pCiBBVF9DSEVDS19DQUxDX0dMUihbJXlhY2NdKQogQVRfQ0hFQ0tfQ0FMQ19HTFIoWyVlcnJvci12ZXJib3NlXSkKIAotQVRfQ0hFQ0tfQ0FMQ19HTFIoWyVwdXJlLXBhcnNlciAlbG9jYXRpb25zXSkKK0FUX0NIRUNLX0NBTENfR0xSKFslZGVmaW5lIGFwaS5wdXJlICVsb2NhdGlvbnNdKQogQVRfQ0hFQ0tfQ0FMQ19HTFIoWyVlcnJvci12ZXJib3NlICVsb2NhdGlvbnNdKQogCi1BVF9DSEVDS19DQUxDX0dMUihbJWVycm9yLXZlcmJvc2UgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjXSkKK0FUX0NIRUNLX0NBTENfR0xSKFslZXJyb3ItdmVyYm9zZSAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeCAiY2FsYyIgJXZlcmJvc2UgJXlhY2NdKQogCiBBVF9DSEVDS19DQUxDX0dMUihbJWRlYnVnXSkKLUFUX0NIRUNLX0NBTENfR0xSKFslZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjXSkKK0FUX0NIRUNLX0NBTENfR0xSKFslZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXggImNhbGMiICV2ZXJib3NlICV5YWNjXSkKK0FUX0NIRUNLX0NBTENfR0xSKFslZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlZGVmaW5lIGFwaS5wcmVmaXggImNhbGMiICV2ZXJib3NlICV5YWNjXSkKIAotQVRfQ0hFQ0tfQ0FMQ19HTFIoWyVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjXSkKK0FUX0NIRUNLX0NBTENfR0xSKFslZGVmaW5lIGFwaS5wdXJlICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeCAiY2FsYyIgJXZlcmJvc2UgJXlhY2NdKQogCi1BVF9DSEVDS19DQUxDX0dMUihbJXB1cmUtcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MgJXBhcnNlLXBhcmFtIHtzZW1hbnRpY192YWx1ZSAqcmVzdWx0fSAlcGFyc2UtcGFyYW0ge2ludCAqY291bnR9XSkKK0FUX0NIRUNLX0NBTENfR0xSKFslZGVmaW5lIGFwaS5wdXJlICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeCAiY2FsYyIgJXZlcmJvc2UgJXlhY2MgJXBhcnNlLXBhcmFtIHtzZW1hbnRpY192YWx1ZSAqcmVzdWx0fSAlcGFyc2UtcGFyYW0ge2ludCAqY291bnR9XSkKK0FUX0NIRUNLX0NBTENfR0xSKFslZGVmaW5lIGFwaS5wdXJlICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbG9jYXRpb25zICVkZWZpbmVzICVkZWZpbmUgYXBpLnByZWZpeCAiY2FsYyIgJXZlcmJvc2UgJXlhY2MgJXBhcnNlLXBhcmFtIHtzZW1hbnRpY192YWx1ZSAqcmVzdWx0fSAlcGFyc2UtcGFyYW0ge2ludCAqY291bnR9XSkKIAogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKQEAgLTYxMSwyMSArNjY2LDI2IEBACiAKIEFUX0JBTk5FUihbW1NpbXBsZSBMQUxSKDEpIEMrKyBDYWxjdWxhdG9yLl1dKQogCisjIEZpcnN0IGxldCdzIHRyeSB1c2luZyAlc2tlbGV0b24KK0FUX0NIRUNLX0NBTEMoWyVza2VsZXRvbiAibGFscjEuY2MiICVkZWZpbmVzICVsb2NhdGlvbnNdKQorCiAjIEFUX0NIRUNLX0NBTENfTEFMUjFfQ0MoW0JJU09OLU9QVElPTlNdKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgU3RhcnQgYSB0ZXN0aW5nIGNodW5rIHdoaWNoIGNvbXBpbGVzIGBjYWxjJyBncmFtbWFyIHdpdGgKICMgdGhlIEMrKyBza2VsZXRvbiwgYW5kIHBlcmZvcm1zIHNldmVyYWwgdGVzdHMgb3ZlciB0aGUgcGFyc2VyLgogbTRfZGVmaW5lKFtBVF9DSEVDS19DQUxDX0xBTFIxX0NDXSwKLVtBVF9DSEVDS19DQUxDKFslc2tlbGV0b24gImxhbHIxLmNjIiAlZGVmaW5lcyAlbG9jYXRpb25zXSAkQCldKQorW0FUX0NIRUNLX0NBTEMoWyVsYW5ndWFnZSAiQysrIiAlZGVmaW5lcyAlbG9jYXRpb25zXSAkQCldKQogCiBBVF9DSEVDS19DQUxDX0xBTFIxX0NDKFtdKQotQVRfQ0hFQ0tfQ0FMQ19MQUxSMV9DQyhbJWVycm9yLXZlcmJvc2UgJW5hbWUtcHJlZml4PSJjYWxjIiAldmVyYm9zZSAleWFjY10pCitBVF9DSEVDS19DQUxDX0xBTFIxX0NDKFslZGVmaW5lIGFwaS5sb2NhdGlvbi50eXBlIFNwYW5dKQorQVRfQ0hFQ0tfQ0FMQ19MQUxSMV9DQyhbJWVycm9yLXZlcmJvc2UgJW5hbWUtcHJlZml4ICJjYWxjIiAldmVyYm9zZSAleWFjY10pCitBVF9DSEVDS19DQUxDX0xBTFIxX0NDKFslZXJyb3ItdmVyYm9zZSAlZGVmaW5lIGFwaS5wcmVmaXggImNhbGMiICV2ZXJib3NlICV5YWNjXSkKK0FUX0NIRUNLX0NBTENfTEFMUjFfQ0MoWyVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbmFtZS1wcmVmaXggImNhbGMiICV2ZXJib3NlICV5YWNjXSkKIAotQVRfQ0hFQ0tfQ0FMQ19MQUxSMV9DQyhbJWVycm9yLXZlcmJvc2UgJWRlYnVnICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2NdKQorQVRfQ0hFQ0tfQ0FMQ19MQUxSMV9DQyhbJXB1cmUtcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlZGVmaW5lIGFwaS5wcmVmaXggImNhbGMiICV2ZXJib3NlICV5YWNjXSkKIAotQVRfQ0hFQ0tfQ0FMQ19MQUxSMV9DQyhbJXB1cmUtcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjXSkKLQotQVRfQ0hFQ0tfQ0FMQ19MQUxSMV9DQyhbJXB1cmUtcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjICVwYXJzZS1wYXJhbSB7c2VtYW50aWNfdmFsdWUgKnJlc3VsdH0gJXBhcnNlLXBhcmFtIHtpbnQgKmNvdW50fV0pCitBVF9DSEVDS19DQUxDX0xBTFIxX0NDKFslcHVyZS1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVuYW1lLXByZWZpeCAiY2FsYyIgJXZlcmJvc2UgJXlhY2MgJXBhcnNlLXBhcmFtIHtzZW1hbnRpY192YWx1ZSAqcmVzdWx0fSAlcGFyc2UtcGFyYW0ge2ludCAqY291bnR9XSkKK0FUX0NIRUNLX0NBTENfTEFMUjFfQ0MoWyVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWRlZmluZSBhcGkucHJlZml4ICJjYWxjIiAldmVyYm9zZSAleWFjYyAlcGFyc2UtcGFyYW0ge3NlbWFudGljX3ZhbHVlICpyZXN1bHR9ICVwYXJzZS1wYXJhbSB7aW50ICpjb3VudH1dKQogCiAKIApAQCAtNjM1LDE5ICs2OTUsMjUgQEAKIAogQVRfQkFOTkVSKFtbU2ltcGxlIEdMUiBDKysgQ2FsY3VsYXRvci5dXSkKIAorIyBBZ2Fpbiwgd2UgdHJ5IGFsc28gdXNpbmcgJXNrZWxldG9uLgorQVRfQ0hFQ0tfQ0FMQyhbJXNrZWxldG9uICJnbHIuY2MiICVkZWZpbmVzICVsb2NhdGlvbnNdKQorCiAjIEFUX0NIRUNLX0NBTENfR0xSX0NDKFtCSVNPTi1PUFRJT05TXSkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBTdGFydCBhIHRlc3RpbmcgY2h1bmsgd2hpY2ggY29tcGlsZXMgYGNhbGMnIGdyYW1tYXIgd2l0aAogIyB0aGUgR0xSIEMrKyBza2VsZXRvbiwgYW5kIHBlcmZvcm1zIHNldmVyYWwgdGVzdHMgb3ZlciB0aGUgcGFyc2VyLgogbTRfZGVmaW5lKFtBVF9DSEVDS19DQUxDX0dMUl9DQ10sCi1bQVRfQ0hFQ0tfQ0FMQyhbJXNrZWxldG9uICJnbHIuY2MiICVkZWZpbmVzICVsb2NhdGlvbnNdICRAKV0pCitbQVRfQ0hFQ0tfQ0FMQyhbJWxhbmd1YWdlICJDKysiICVnbHItcGFyc2VyICVkZWZpbmVzICVsb2NhdGlvbnNdICRAKV0pCiAKLSNBVF9DSEVDS19DQUxDX0dMUl9DQyhbXSkKLSNBVF9DSEVDS19DQUxDX0dMUl9DQyhbJWVycm9yLXZlcmJvc2UgJW5hbWUtcHJlZml4PSJjYWxjIiAldmVyYm9zZSAleWFjY10pCitBVF9DSEVDS19DQUxDX0dMUl9DQyhbXSkKK0FUX0NIRUNLX0NBTENfR0xSX0NDKFslZGVmaW5lIGFwaS5sb2NhdGlvbi50eXBlIFNwYW5dKQorQVRfQ0hFQ0tfQ0FMQ19HTFJfQ0MoWyVlcnJvci12ZXJib3NlICVuYW1lLXByZWZpeCAiY2FsYyIgJXZlcmJvc2UgJXlhY2NdKQorQVRfQ0hFQ0tfQ0FMQ19HTFJfQ0MoWyVlcnJvci12ZXJib3NlICVkZWZpbmUgYXBpLnByZWZpeCAiY2FsYyIgJXZlcmJvc2UgJXlhY2NdKQogCi0jIEFUX0NIRUNLX0NBTENfR0xSX0NDKFslZGVidWddKQotI0FUX0NIRUNLX0NBTENfR0xSX0NDKFslZXJyb3ItdmVyYm9zZSAlZGVidWcgJW5hbWUtcHJlZml4PSJjYWxjIiAldmVyYm9zZSAleWFjY10pCitBVF9DSEVDS19DQUxDX0dMUl9DQyhbJWRlYnVnXSkKK0FUX0NIRUNLX0NBTENfR0xSX0NDKFslZXJyb3ItdmVyYm9zZSAlZGVidWcgJW5hbWUtcHJlZml4ICJjYWxjIiAldmVyYm9zZSAleWFjY10pCiAKLUFUX0NIRUNLX0NBTENfR0xSX0NDKFslcHVyZS1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2NdKQorQVRfQ0hFQ0tfQ0FMQ19HTFJfQ0MoWyVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJW5hbWUtcHJlZml4ICJjYWxjIiAldmVyYm9zZSAleWFjY10pCiAKLUFUX0NIRUNLX0NBTENfR0xSX0NDKFslcHVyZS1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MgJXBhcnNlLXBhcmFtIHtzZW1hbnRpY192YWx1ZSAqcmVzdWx0fSAlcGFyc2UtcGFyYW0ge2ludCAqY291bnR9XSkKK0FUX0NIRUNLX0NBTENfR0xSX0NDKFslcHVyZS1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVuYW1lLXByZWZpeCAiY2FsYyIgJXZlcmJvc2UgJXlhY2MgJXBhcnNlLXBhcmFtIHtzZW1hbnRpY192YWx1ZSAqcmVzdWx0fSAlcGFyc2UtcGFyYW0ge2ludCAqY291bnR9XSkKK0FUX0NIRUNLX0NBTENfR0xSX0NDKFslcHVyZS1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVkZWZpbmUgYXBpLnByZWZpeCAiY2FsYyIgJXZlcmJvc2UgJXlhY2MgJXBhcnNlLXBhcmFtIHtzZW1hbnRpY192YWx1ZSAqcmVzdWx0fSAlcGFyc2UtcGFyYW0ge2ludCAqY291bnR9XSkKZGlmZiAtLWdpdCBhL3Rlc3RzL2NvbmZsaWN0cy5hdCBiL3Rlc3RzL2NvbmZsaWN0cy5hdAppbmRleCAxY2JmMjNhLi41NjUzYjQ4IDEwMDY0NAotLS0gYS90ZXN0cy9jb25mbGljdHMuYXQKKysrIGIvdGVzdHMvY29uZmxpY3RzLmF0CkBAIC0xLDIxICsxLDIwIEBACiAjIEV4ZXJjaXNpbmcgQmlzb24gb24gY29uZmxpY3RzLiAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b3Rlc3QgLSotCiAKLSMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNSwgMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgogCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSMgYW55IGxhdGVyIHZlcnNpb24uCi0KKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKICMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQorIwogIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0jIDAyMTEwLTEzMDEsIFVTQS4KKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAKIEFUX0JBTk5FUihbW0NvbmZsaWN0cy5dXSkKIApAQCAtMzgsOCArMzcsMTQgQEAKIGU6ICdlJyB8IC8qIE5vdGhpbmcuICovOwogXV0pCiAKLUFUX0NIRUNLKFtiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnldLCAwLCBbXSwKLVtbaW5wdXQueTo0Ljk6IHdhcm5pbmc6IHJ1bGUgbmV2ZXIgcmVkdWNlZCBiZWNhdXNlIG9mIGNvbmZsaWN0czogZTogLyogZW1wdHkgKi8KK0FUX0JJU09OX0NIRUNLKFstbyBpbnB1dC5jIGlucHV0LnldLCAwLCBbXSwKK1tbaW5wdXQueTo0Ljk6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0czogZTogLyogZW1wdHkgKi8KK11dKQorCitBVF9CSVNPTl9DSEVDSyhbLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnldLCAwLCBbXSwKK1tbaW5wdXQueTo0Ljk6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cworIGU6ICdlJyB8IC8qIE5vdGhpbmcuICovOworICAgICAgICAgXgogXV0pCiAKIEFUX0NMRUFOVVAKQEAgLTUxLDMwICs1NiwyNiBAQAogCiBBVF9TRVRVUChbJW5vbmFzc29jIGFuZCBlb2ZdKQogCitBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMKIEFUX0RBVEFfR1JBTU1BUihbaW5wdXQueV0sCiBbWwogJXsKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgogCiAjZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAxCi1zdGF0aWMgdm9pZAoteXllcnJvciAoY29uc3QgY2hhciAqbXNnKQotewotICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKLX0KLQorXUFUX1lZRVJST1JfREVGSU5FWwogLyogVGhlIGN1cnJlbnQgYXJndW1lbnQuICovCi1zdGF0aWMgY29uc3QgY2hhciAqaW5wdXQgPSBOVUxMOworc3RhdGljIGNvbnN0IGNoYXIgKmlucHV0OwogCiBzdGF0aWMgaW50CiB5eWxleCAodm9pZCkKIHsKLSAgLyogTm8gdG9rZW4gc3RhbmRzIGZvciBlbmQgb2YgZmlsZS4gKi8KLSAgaWYgKGlucHV0ICYmICppbnB1dCkKLSAgICByZXR1cm4gKmlucHV0Kys7Ci0gIGVsc2UKLSAgICByZXR1cm4gMDsKKyAgc3RhdGljIHNpemVfdCB0b2tudW07CisgIGFzc2VydCAodG9rbnVtIDw9IHN0cmxlbiAoaW5wdXQpKTsKKyAgcmV0dXJuIGlucHV0W3Rva251bSsrXTsKIH0KIAogJX0KQEAgLTkwLDM3ICs5MSw0NTQgQEAKIGludAogbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKIHsKLSAgaWYgKGFyZ2MgPiAxKQotICAgIGlucHV0ID0gYXJndlsxXTsKKyAgaW5wdXQgPSBhcmdjIDw9IDEgPyAiIiA6IGFyZ3ZbMV07CiAgIHJldHVybiB5eXBhcnNlICgpOwogfQogXV0pCitBVF9CSVNPTl9PUFRJT05fUE9QREVGUwogCi0jIFNwZWNpZnkgdGhlIG91dHB1dCBmaWxlcyB0byBhdm9pZCBwcm9ibGVtcyBvbiBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zLgotQVRfQ0hFQ0soW2Jpc29uIC1vIGlucHV0LmMgaW5wdXQueV0pCittNF9wdXNoZGVmKFtBVF9OT05BU1NPQ19BTkRfRU9GX0NIRUNLXSwKK1tBVF9CSVNPTl9DSEVDSyhbJDFbIC1vIGlucHV0LmMgaW5wdXQueV1dKQogQVRfQ09NUElMRShbaW5wdXRdKQogCittNF9wdXNoZGVmKFtBVF9FWFBFQ1RJTkddLCBbbTRfaWYoJDIsIFtjb3JyZWN0XSwgW1ssIGV4cGVjdGluZyAkZW5kXV0pXSkKKwogQVRfUEFSU0VSX0NIRUNLKFsuL2lucHV0ICcwPDAnXSkKLSMgRklYTUU6IFRoaXMgaXMgYW4gYWN0dWFsIGJ1ZywgYnV0IGEgbmV3IG9uZSwgaW4gdGhlIHNlbnNlIHRoYXQKLSMgbm8gb25lIGhhcyBldmVyIHNwb3R0ZWQgaXQhICBUaGUgbWVzc2FnZXMgYXJlICp3cm9uZyo6IHRoZXJlIHNob3VsZAotIyBiZSBub3RoaW5nIHRoZXJlLCBpdCBzaG91bGQgYmUgZXhwZWN0ZWQgZW9mLgogQVRfUEFSU0VSX0NIRUNLKFsuL2lucHV0ICcwPDA8MCddLCBbMV0sIFtdLAotICAgICAgICAgW3N5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPCcsIGV4cGVjdGluZyAnPCcgb3IgJz4nCisgICAgICAgICBbc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc8J0FUX0VYUEVDVElORwogXSkKIAogQVRfUEFSU0VSX0NIRUNLKFsuL2lucHV0ICcwPjAnXSkKIEFUX1BBUlNFUl9DSEVDSyhbLi9pbnB1dCAnMD4wPjAnXSwgWzFdLCBbXSwKLSAgICAgICAgIFtzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz4nLCBleHBlY3RpbmcgJzwnIG9yICc+JworICAgICAgICAgW3N5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPidBVF9FWFBFQ1RJTkcKIF0pCiAKIEFUX1BBUlNFUl9DSEVDSyhbLi9pbnB1dCAnMDwwPjAnXSwgWzFdLCBbXSwKLSAgICAgICAgIFtzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz4nLCBleHBlY3RpbmcgJzwnIG9yICc+JworICAgICAgICAgW3N5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPidBVF9FWFBFQ1RJTkcKIF0pCiAKK200X3BvcGRlZihbQVRfRVhQRUNUSU5HXSldKQorCisjIEV4cGVjdGVkIHRva2VuIGxpc3QgaXMgbWlzc2luZy4KK0FUX05PTkFTU09DX0FORF9FT0ZfQ0hFQ0soW10sIFtbaW5jb3JyZWN0XV0pCisKKyMgV2UgbXVzdCBkaXNhYmxlIGRlZmF1bHQgcmVkdWN0aW9ucyBpbiBpbmNvbnNpc3RlbnQgc3RhdGVzIGluIG9yZGVyIHRvCisjIGhhdmUgYW4gZXhwbGljaXQgbGlzdCBvZiBhbGwgZXhwZWN0ZWQgdG9rZW5zLgorQVRfTk9OQVNTT0NfQU5EX0VPRl9DSEVDSyhbWy1EbHIuZGVmYXVsdC1yZWR1Y3Rpb25zPWNvbnNpc3RlbnRdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW1tjb3JyZWN0XV0pCisKKyMgbHIuZGVmYXVsdC1yZWR1Y3Rpb25zPWNvbnNpc3RlbnQgaGFwcGVucyB0byB3b3JrIGZvciB0aGlzIHRlc3QgY2FzZS4KKyMgSG93ZXZlciwgZm9yIG90aGVyIGdyYW1tYXJzLCBsb29rYWhlYWQgc2V0cyBjYW4gYmUgbWVyZ2VkIGZvcgorIyBkaWZmZXJlbnQgbGVmdCBjb250ZXh0cywgc28gaXQgaXMgc3RpbGwgcG9zc2libGUgdG8gaGF2ZSBhbiBpbmNvcnJlY3QKKyMgZXhwZWN0ZWQgbGlzdC4gIENhbm9uaWNhbCBMUiBpcyBhbG1vc3QgYSBnZW5lcmFsIHNvbHV0aW9uICh0aGF0IGlzLCBpdAorIyBjYW4gZmFpbCBvbmx5IHdoZW4gJW5vbmFzc29jIGlzIHVzZWQpLCBzbyBtYWtlIHN1cmUgaXQgZ2l2ZXMgdGhlIHNhbWUKKyMgcmVzdWx0IGFzIGFib3ZlLgorQVRfTk9OQVNTT0NfQU5EX0VPRl9DSEVDSyhbWy1EbHIudHlwZT1jYW5vbmljYWwtbHJdXSwgW1tjb3JyZWN0XV0pCisKKyMgcGFyc2UubGFjPWZ1bGwgaXMgYSBjb21wbGV0ZWx5IGdlbmVyYWwgc29sdXRpb24gdGhhdCBkb2VzIG5vdCByZXF1aXJlCisjIGFueSBvZiB0aGUgYWJvdmUgc2FjcmlmaWNlcy4gIE9mIGNvdXJzZSwgaXQgZG9lcyBub3QgZXh0ZW5kIHRoZQorIyBsYW5ndWFnZS1yZWNvZ25pdGlvbiBwb3dlciBvZiBMQUxSIHRvIChJRSlMUiwgYnV0IGl0IGRvZXMgZW5zdXJlIHRoYXQKKyMgdGhlIHJlcG9ydGVkIGxpc3Qgb2YgZXhwZWN0ZWQgdG9rZW5zIG1hdGNoZXMgd2hhdCB0aGUgZ2l2ZW4gcGFyc2VyCisjIHdvdWxkIGhhdmUgYWNjZXB0ZWQgaW4gcGxhY2Ugb2YgdGhlIHVuZXhwZWN0ZWQgdG9rZW4uCitBVF9OT05BU1NPQ19BTkRfRU9GX0NIRUNLKFtbLURwYXJzZS5sYWM9ZnVsbF1dLCBbW2NvcnJlY3RdXSkKKworbTRfcG9wZGVmKFtBVF9OT05BU1NPQ19BTkRfRU9GX0NIRUNLXSkKKwogQVRfQ0xFQU5VUAogCiAKIAorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjICVlcnJvci12ZXJib3NlIGFuZCBjb25zaXN0ZW50IGVycm9ycy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitBVF9TRVRVUChbWyVlcnJvci12ZXJib3NlIGFuZCBjb25zaXN0ZW50IGVycm9yc11dKQorCittNF9wdXNoZGVmKFtBVF9DT05TSVNURU5UX0VSUk9SU19DSEVDS10sIFsKKworQVRfQklTT05fT1BUSU9OX1BVU0hERUZTKFskMV0pCisKK200X3B1c2hkZWYoW0FUX1lZTEVYX1BST1RPVFlQRV0sCitbQVRfU0tFTF9DQ19JRihbW2ludCB5eWxleCAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHApXV0sCisgICAgICAgICAgICAgICBbW2ludCB5eWxleCAoWVlTVFlQRSAqbHZhbHApXV0pXSkKKworQVRfU0tFTF9KQVZBX0lGKFtBVF9EQVRBXSwgW0FUX0RBVEFfR1JBTU1BUl0pKFtpbnB1dC55XSwKK1tBVF9TS0VMX0pBVkFfSUYoW1sKKworJWNvZGUgaW1wb3J0cyB7CisgIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworfV1dLCBbWworCislY29kZSB7XUFUX1NLRUxfQ0NfSUYoW1sKKyAgI2luY2x1ZGUgPGNhc3NlcnQ+CisgICNpbmNsdWRlIDxzdHJpbmc+XV0sIFtbCisgICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIF1BVF9ZWUVSUk9SX0RFQ0xBUkVdKVsKKyAgXUFUX1lZTEVYX1BST1RPVFlQRVs7CisgICNkZWZpbmUgVVNFKFZhcikKK30KKworXUFUX1NLRUxfQ0NfSUYoW1slZGVmaW5lc11dLCBbWyVkZWZpbmUgYXBpLnB1cmVdXSldKVsKKworXSQxWworCislZXJyb3ItdmVyYm9zZQorCislJQorCitdJDJbCisKK11BVF9TS0VMX0pBVkFfSUYoW1slY29kZSBsZXhlciB7XV0sIFtbJSVdXSlbCisKKy8qLS0tLS0tLS0uCit8IHl5bGV4LiAgfAorYC0tLS0tLS0tKi9dQVRfU0tFTF9KQVZBX0lGKFtbCisKK3B1YmxpYyBTdHJpbmcgaW5wdXQgPSAiXSQzWyI7CitwdWJsaWMgaW50IGluZGV4ID0gMDsKK3B1YmxpYyBpbnQgeXlsZXggKCkKK3sKKyAgaWYgKGluZGV4IDwgaW5wdXQubGVuZ3RoICgpKQorICAgIHJldHVybiBpbnB1dC5jaGFyQXQgKGluZGV4KyspOworICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CitwdWJsaWMgT2JqZWN0IGdldExWYWwgKCkKK3sKKyAgcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOworfV1dLCBbWworCitdQVRfWVlMRVhfUFJPVE9UWVBFWworeworICBzdGF0aWMgY2hhciBjb25zdCAqaW5wdXQgPSAiXSQzWyI7CisgICpsdmFscCA9IDE7CisgIHJldHVybiAqaW5wdXQrKzsKK31dXSlbCitdQVRfWVlFUlJPUl9ERUZJTkVbCitdQVRfU0tFTF9KQVZBX0lGKFtbCit9OworCislJV1dKVsKKworLyotLS0tLS0tLgorfCBtYWluLiAgfAorYC0tLS0tLS0qL11BVF9TS0VMX0pBVkFfSUYoW1sKKworY2xhc3MgaW5wdXQKK3sKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZyBhcmdzW10pIHRocm93cyBJT0V4Y2VwdGlvbgorICB7CisgICAgWVlQYXJzZXIgcCA9IG5ldyBZWVBhcnNlciAoKTsKKyAgICBwLnBhcnNlICgpOworICB9Cit9XV0sIFtBVF9TS0VMX0NDX0lGKFtbCisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgeXk6OnBhcnNlciBwYXJzZXI7CisgIHJldHVybiBwYXJzZXIucGFyc2UgKCk7Cit9XV0sIFtbCisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9XV0pXSlbCitdXSkKKworQVRfRlVMTF9DT01QSUxFKFtbaW5wdXRdXSkKKworbTRfcHVzaGRlZihbQVRfRVhQRUNUSU5HXSwgW200X2lmKCQ1LCBbYWJdLCBbWywgZXhwZWN0aW5nICdhJyBvciAnYiddXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkNSwgW2FdLCAgW1ssIGV4cGVjdGluZyAnYSddXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkNSwgW2JdLCAgW1ssIGV4cGVjdGluZyAnYiddXSldKQorCitBVF9TS0VMX0pBVkFfSUYoW0FUX0pBVkFfUEFSU0VSX0NIRUNLKFtbaW5wdXRdXSwgW1swXV1dLAorICAgICAgICAgICAgICAgIFtBVF9QQVJTRVJfQ0hFQ0soW1suL2lucHV0XV0sIFtbMV1dXSksCitbW11dLAorW1tzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgXSQ0W11BVF9FWFBFQ1RJTkdbCitdXSkKKworbTRfcG9wZGVmKFtBVF9FWFBFQ1RJTkddKQorbTRfcG9wZGVmKFtBVF9ZWUxFWF9QUk9UT1RZUEVdKQorQVRfQklTT05fT1BUSU9OX1BPUERFRlMKKworXSkKKworbTRfcHVzaGRlZihbQVRfUFJFVklPVVNfU1RBVEVfR1JBTU1BUl0sCitbWyVub25hc3NvYyAnYSc7CisKK3N0YXJ0OiBjb25zaXN0ZW50LWVycm9yLW9uLWEtYSAnYScgOworCitjb25zaXN0ZW50LWVycm9yLW9uLWEtYToKKyAgICAnYScgZGVmYXVsdC1yZWR1Y3Rpb24KKyAgfCAnYScgZGVmYXVsdC1yZWR1Y3Rpb24gJ2EnCisgIHwgJ2EnIHNoaWZ0CisgIDsKKworZGVmYXVsdC1yZWR1Y3Rpb246IC8qZW1wdHkqLyA7CitzaGlmdDogJ2InIDsKKworLy8gUHJvdmlkZSBhbm90aGVyIGNvbnRleHQgaW4gd2hpY2ggYWxsIHJ1bGVzIGFyZSB1c2VmdWwgc28gdGhhdCB0aGlzCisvLyB0ZXN0IGNhc2UgbG9va3MgYSBsaXR0bGUgbW9yZSByZWFsaXN0aWMuCitzdGFydDogJ2InIGNvbnNpc3RlbnQtZXJyb3Itb24tYS1hICdjJyA7CitdXSkKKworbTRfcHVzaGRlZihbQVRfUFJFVklPVVNfU1RBVEVfSU5QVVRdLCBbW2FdXSkKKworIyBVbmZvcnR1bmF0ZWx5LCBubyBleHBlY3RlZCB0b2tlbnMgYXJlIHJlcG9ydGVkIGV2ZW4gdGhvdWdoICdiJyBjYW4gYmUKKyMgYWNjZXB0ZWQuICBOZXZlcnRoZWxlc3MsIHRoZSBtYWluIHBvaW50IG9mIHRoaXMgdGVzdCBpcyB0byBtYWtlIHN1cmUKKyMgdGhhdCBhdCBsZWFzdCB0aGUgdW5leHBlY3RlZCB0b2tlbiBpcyByZXBvcnRlZC4gIEluIGEgcHJldmlvdXMgdmVyc2lvbgorIyBvZiBCaXNvbiwgaXQgd2Fzbid0IHJlcG9ydGVkIGJlY2F1c2UgdGhlIGVycm9yIGlzIGRldGVjdGVkIGluIGEKKyMgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGFuIGVycm9yIGFjdGlvbiwgYW5kIHRoYXQgY2FzZSBhbHdheXMgdHJpZ2dlcmVkCisjIHRoZSBzaW1wbGUgInN5bnRheCBlcnJvciIgbWVzc2FnZS4KKyMKKyMgVGhlIHBvaW50IGlzbid0IHRvIHRlc3QgSUVMUiBoZXJlLCBidXQgc3RhdGUgbWVyZ2luZyBoYXBwZW5zIHRvCisjIGNvbXBsaWNhdGUgdGhpcyBleGFtcGxlLgorQVRfQ09OU0lTVEVOVF9FUlJPUlNfQ0hFQ0soW1slZGVmaW5lIGxyLnR5cGUgaWVscl1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FUX1BSRVZJT1VTX1NUQVRFX0dSQU1NQVJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FUX1BSRVZJT1VTX1NUQVRFX0lOUFVUXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbJGVuZF1dLCBbW25vbmVdXSkKK0FUX0NPTlNJU1RFTlRfRVJST1JTX0NIRUNLKFtbJWRlZmluZSBsci50eXBlIGllbHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJWdsci1wYXJzZXJdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBVF9QUkVWSU9VU19TVEFURV9HUkFNTUFSXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBVF9QUkVWSU9VU19TVEFURV9JTlBVVF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbWyRlbmRdXSwgW1tub25lXV0pCitBVF9DT05TSVNURU5UX0VSUk9SU19DSEVDSyhbWyVkZWZpbmUgbHIudHlwZSBpZWxyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVsYW5ndWFnZSAiYysrIl1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FUX1BSRVZJT1VTX1NUQVRFX0dSQU1NQVJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FUX1BSRVZJT1VTX1NUQVRFX0lOUFVUXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbJGVuZF1dLCBbW25vbmVdXSkKK0FUX0NPTlNJU1RFTlRfRVJST1JTX0NIRUNLKFtbJWRlZmluZSBsci50eXBlIGllbHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJWxhbmd1YWdlICJqYXZhIl1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FUX1BSRVZJT1VTX1NUQVRFX0dSQU1NQVJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FUX1BSRVZJT1VTX1NUQVRFX0lOUFVUXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZW5kIG9mIGlucHV0XV0sIFtbbm9uZV1dKQorCisjIEV2ZW4gY2Fub25pY2FsIExSIGRvZXNuJ3QgZm9yZXNlZSB0aGUgZXJyb3IgZm9yICdhJyEKK0FUX0NPTlNJU1RFTlRfRVJST1JTX0NIRUNLKFtbJWRlZmluZSBsci50eXBlIGllbHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJWRlZmluZSBsci5kZWZhdWx0LXJlZHVjdGlvbnMgY29uc2lzdGVudF1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FUX1BSRVZJT1VTX1NUQVRFX0dSQU1NQVJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FUX1BSRVZJT1VTX1NUQVRFX0lOUFVUXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbJGVuZF1dLCBbW2FiXV0pCitBVF9DT05TSVNURU5UX0VSUk9SU19DSEVDSyhbWyVkZWZpbmUgbHIudHlwZSBpZWxyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVkZWZpbmUgbHIuZGVmYXVsdC1yZWR1Y3Rpb25zIGFjY2VwdGluZ11dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FUX1BSRVZJT1VTX1NUQVRFX0dSQU1NQVJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FUX1BSRVZJT1VTX1NUQVRFX0lOUFVUXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbJGVuZF1dLCBbW2FiXV0pCitBVF9DT05TSVNURU5UX0VSUk9SU19DSEVDSyhbWyVkZWZpbmUgbHIudHlwZSBjYW5vbmljYWwtbHJdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBVF9QUkVWSU9VU19TVEFURV9HUkFNTUFSXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBVF9QUkVWSU9VU19TVEFURV9JTlBVVF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbWyRlbmRdXSwgW1thYl1dKQorCisjIE9ubHkgTEFDIGdldHMgaXQgcmlnaHQuCitBVF9DT05TSVNURU5UX0VSUk9SU19DSEVDSyhbWyVkZWZpbmUgbHIudHlwZSBjYW5vbmljYWwtbHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJWRlZmluZSBwYXJzZS5sYWMgZnVsbF1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FUX1BSRVZJT1VTX1NUQVRFX0dSQU1NQVJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FUX1BSRVZJT1VTX1NUQVRFX0lOUFVUXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbJGVuZF1dLCBbW2JdXSkKK0FUX0NPTlNJU1RFTlRfRVJST1JTX0NIRUNLKFtbJWRlZmluZSBsci50eXBlIGllbHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJWRlZmluZSBwYXJzZS5sYWMgZnVsbF1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FUX1BSRVZJT1VTX1NUQVRFX0dSQU1NQVJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FUX1BSRVZJT1VTX1NUQVRFX0lOUFVUXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbJGVuZF1dLCBbW2JdXSkKKworbTRfcG9wZGVmKFtBVF9QUkVWSU9VU19TVEFURV9HUkFNTUFSXSkKK200X3BvcGRlZihbQVRfUFJFVklPVVNfU1RBVEVfSU5QVVRdKQorCittNF9wdXNoZGVmKFtBVF9VU0VSX0FDVElPTl9HUkFNTUFSXSwKK1tbJW5vbmFzc29jICdhJzsKKworLy8gSWYgJCQgPSAwIGhlcmUsIHRoZW4gd2Uga25vdyB0aGF0IHRoZSAnYScgZGVzdHJ1Y3RvciBpcyBiZWluZyBpbnZva2VkCisvLyBpbmNvcnJlY3RseSBmb3IgdGhlICdiJyBzZXQgaW4gdGhlIHNlbWFudGljIGFjdGlvbiBiZWxvdy4gIEFsbCAnYScKKy8vIHRva2VucyBhcmUgcmV0dXJuZWQgYnkgeXlsZXgsIHdoaWNoIHNldHMgJCQgPSAxLgorJWRlc3RydWN0b3IgeworICBpZiAoISQkKQorICAgIGZwcmludGYgKHN0ZGVyciwgIldyb25nIGRlc3RydWN0b3IuXG4iKTsKK30gJ2EnOworCisvLyBSYXRoZXIgdGhhbiBkZXBlbmQgb24gYW4gaW5jb25zaXN0ZW50IHN0YXRlIHRvIGluZHVjZSByZWFkaW5nIGEKKy8vIGxvb2thaGVhZCBhcyBpbiB0aGUgcHJldmlvdXMgZ3JhbW1hciwganVzdCBhc3NpZ24gdGhlIGxvb2thaGVhZCBpbiBhCisvLyBzZW1hbnRpYyBhY3Rpb24uICBUaGF0IGxvb2thaGVhZCBpc24ndCBuZWVkZWQgYmVmb3JlIGVpdGhlciBlcnJvcgorLy8gYWN0aW9uIGlzIGVuY291bnRlcmVkLiAgSW4gYSBwcmV2aW91cyB2ZXJzaW9uIG9mIEJpc29uLCB0aGlzIHdhcyBhCisvLyBwcm9ibGVtIGFzIGl0IG1lYW50IHl5Y2hhciB3YXMgbm90IHRyYW5zbGF0ZWQgaW50byB5eXRva2VuIGJlZm9yZQorLy8gZWl0aGVyIGVycm9yIGFjdGlvbi4gIFRoZSBzZWNvbmQgZXJyb3IgYWN0aW9uIHRodXMgaW52b2tlZCBhCisvLyBkZXN0cnVjdG9yIHRoYXQgaXQgc2VsZWN0ZWQgYWNjb3JkaW5nIHRvIHRoZSBpbmNvcnJlY3QgeXl0b2tlbi4gIFRoZQorLy8gZmlyc3QgZXJyb3IgYWN0aW9uIHdvdWxkIGhhdmUgcmVwb3J0ZWQgYW4gaW5jb3JyZWN0IHVuZXhwZWN0ZWQgdG9rZW4KKy8vIGV4Y2VwdCB0aGF0LCBkdWUgdG8gdGhlIGJ1ZyBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIGdyYW1tYXIsIHRoZQorLy8gdW5leHBlY3RlZCB0b2tlbiB3YXMgbm90IHJlcG9ydGVkIGF0IGFsbC4KK3N0YXJ0OiBlcnJvci1yZWR1Y2UgY29uc2lzdGVudC1lcnJvciAnYScgeyBVU0UgKCRdWzMpOyB9IDsKKworZXJyb3ItcmVkdWNlOgorICAnYScgJ2EnIGNvbnNpc3RlbnQtcmVkdWN0aW9uIGNvbnNpc3RlbnQtZXJyb3IgJ2EnCisgIHsgVVNFICgoJF1bMSwgJF1bMiwgJF1bNSkpOyB9Cit8ICdhJyBlcnJvcgorICB7IFVTRSAoJF1bMSk7IH0KKzsKKworY29uc2lzdGVudC1yZWR1Y3Rpb246IC8qZW1wdHkqLyB7CisgIGFzc2VydCAoeXljaGFyID09IF1BVF9TS0VMX0NDX0lGKFtbeXllbXB0eV9dXSwgW1tZWUVNUFRZXV0pWyk7CisgIHl5bHZhbCA9IDA7CisgIHl5Y2hhciA9ICdiJzsKK30gOworCitjb25zaXN0ZW50LWVycm9yOgorICAnYScgeyBVU0UgKCRdWzEpOyB9Cit8IC8qZW1wdHkqLyAlcHJlYyAnYScKKzsKKworLy8gUHJvdmlkZSBhbm90aGVyIGNvbnRleHQgaW4gd2hpY2ggYWxsIHJ1bGVzIGFyZSB1c2VmdWwgc28gdGhhdCB0aGlzCisvLyB0ZXN0IGNhc2UgbG9va3MgYSBsaXR0bGUgbW9yZSByZWFsaXN0aWMuCitzdGFydDogJ2InIGNvbnNpc3RlbnQtZXJyb3IgJ2InIDsKK11dKQorbTRfcHVzaGRlZihbQVRfVVNFUl9BQ1RJT05fSU5QVVRdLCBbW2FhXV0pCisKK0FUX0NPTlNJU1RFTlRfRVJST1JTX0NIRUNLKFtbXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbQVRfVVNFUl9BQ1RJT05fR1JBTU1BUl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbQVRfVVNFUl9BQ1RJT05fSU5QVVRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW1snYiddXSwgW1tub25lXV0pCitBVF9DT05TSVNURU5UX0VSUk9SU19DSEVDSyhbWyVnbHItcGFyc2VyXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbQVRfVVNFUl9BQ1RJT05fR1JBTU1BUl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbQVRfVVNFUl9BQ1RJT05fSU5QVVRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW1snYiddXSwgW1tub25lXV0pCitBVF9DT05TSVNURU5UX0VSUk9SU19DSEVDSyhbWyVsYW5ndWFnZSAiYysrIl1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FUX1VTRVJfQUNUSU9OX0dSQU1NQVJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FUX1VTRVJfQUNUSU9OX0lOUFVUXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbJ2InXV0sIFtbbm9uZV1dKQorIyBObyBKYXZhIHRlc3QgYmVjYXVzZSB5eWNoYXIgY2Fubm90IGJlIG1hbmlwdWxhdGVkIGJ5IHVzZXJzLgorCitBVF9DT05TSVNURU5UX0VSUk9SU19DSEVDSyhbWyVkZWZpbmUgbHIuZGVmYXVsdC1yZWR1Y3Rpb25zIGNvbnNpc3RlbnRdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBVF9VU0VSX0FDVElPTl9HUkFNTUFSXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBVF9VU0VSX0FDVElPTl9JTlBVVF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbWydiJ11dLCBbW25vbmVdXSkKKworIyBDYW5vbmljYWwgTFIgZG9lc24ndCBmb3Jlc2VlIHRoZSBlcnJvciBmb3IgJ2EnIQorQVRfQ09OU0lTVEVOVF9FUlJPUlNfQ0hFQ0soW1slZGVmaW5lIGxyLmRlZmF1bHQtcmVkdWN0aW9ucyBhY2NlcHRpbmddXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBVF9VU0VSX0FDVElPTl9HUkFNTUFSXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBVF9VU0VSX0FDVElPTl9JTlBVVF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbWyRlbmRdXSwgW1thXV0pCitBVF9DT05TSVNURU5UX0VSUk9SU19DSEVDSyhbWyVkZWZpbmUgbHIudHlwZSBjYW5vbmljYWwtbHJdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBVF9VU0VSX0FDVElPTl9HUkFNTUFSXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBVF9VU0VSX0FDVElPTl9JTlBVVF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbWyRlbmRdXSwgW1thXV0pCisKK0FUX0NPTlNJU1RFTlRfRVJST1JTX0NIRUNLKFtbJWRlZmluZSBwYXJzZS5sYWMgZnVsbF1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FUX1VTRVJfQUNUSU9OX0dSQU1NQVJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FUX1VTRVJfQUNUSU9OX0lOUFVUXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbJ2InXV0sIFtbbm9uZV1dKQorQVRfQ09OU0lTVEVOVF9FUlJPUlNfQ0hFQ0soW1slZGVmaW5lIHBhcnNlLmxhYyBmdWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVkZWZpbmUgbHIuZGVmYXVsdC1yZWR1Y3Rpb25zIGFjY2VwdGluZ11dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FUX1VTRVJfQUNUSU9OX0dSQU1NQVJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FUX1VTRVJfQUNUSU9OX0lOUFVUXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbJGVuZF1dLCBbW25vbmVdXSkKKworbTRfcG9wZGVmKFtBVF9VU0VSX0FDVElPTl9HUkFNTUFSXSkKK200X3BvcGRlZihbQVRfVVNFUl9BQ1RJT05fSU5QVVRdKQorCittNF9wb3BkZWYoW0FUX0NPTlNJU1RFTlRfRVJST1JTX0NIRUNLXSkKKworQVRfQ0xFQU5VUAorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTEFDOiAlbm9uYXNzb2MgcmVxdWlyZXMgc3BsaXR0aW5nIGNhbm9uaWNhbCBMUiBzdGF0ZXMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIFRoaXMgdGVzdCBjYXNlIGRlbW9uc3RyYXRlcyB0aGF0LCB3aGVuICVub25hc3NvYyBpcyB1c2VkLCBjYW5vbmljYWwKKyMgTFIoMSkgcGFyc2VyIHRhYmxlIGNvbnN0cnVjdGlvbiBmb2xsb3dlZCBieSBjb25mbGljdCByZXNvbHV0aW9uCisjIHdpdGhvdXQgZnVydGhlciBzdGF0ZSBzcGxpdHRpbmcgaXMgbm90IGFsd2F5cyBzdWZmaWNpZW50IHRvIHByb2R1Y2UgYQorIyBwYXJzZXIgdGhhdCBjYW4gZGV0ZWN0IGFsbCBzeW50YXggZXJyb3JzIGFzIHNvb24gYXMgcG9zc2libGUgb24gb25lCisjIHRva2VuIG9mIGxvb2thaGVhZC4gIEhvd2V2ZXIsIExBQyBzb2x2ZXMgdGhlIHByb2JsZW0gY29tcGxldGVseSBldmVuCisjIHdpdGggbWluaW1hbCBMUiBwYXJzZXIgdGFibGVzLgorCitBVF9TRVRVUChbW0xBQzogJW5vbmFzc29jIHJlcXVpcmVzIHNwbGl0dGluZyBjYW5vbmljYWwgTFIgc3RhdGVzXV0pCitBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMKK0FUX0RBVEFfR1JBTU1BUihbW2lucHV0LnldXSwKK1tbJWNvZGUgeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgXUFUX1lZRVJST1JfREVDTEFSRVsKKyAgXUFUX1lZTEVYX0RFQ0xBUkVbCit9CisKKyVlcnJvci12ZXJib3NlCislbm9uYXNzb2MgJ2EnCisKKyUlCisKK3N0YXJ0OgorICAnYScgcHJvYmxlbSAnYScgLy8gRmlyc3QgY29udGV4dC4KK3wgJ2InIHByb2JsZW0gJ2InIC8vIFNlY29uZCBjb250ZXh0LgorfCAnYycgcmVkdWNlLW5vbmFzc29jIC8vIEp1c3QgbWFrZXMgcmVkdWNlLW5vbmFzc29jIHVzZWZ1bC4KKzsKKworcHJvYmxlbToKKyAgbG9vayByZWR1Y2Utbm9uYXNzb2MKK3wgbG9vayAnYScKK3wgbG9vayAnYicKKzsKKworLy8gRm9yIHRoZSBzdGF0ZSByZWFjaGVkIGFmdGVyIHNoaWZ0aW5nIHRoZSAnYScgaW4gdGhlc2UgcHJvZHVjdGlvbnMsCisvLyBsb29rYWhlYWQgc2V0cyBhcmUgdGhlIHNhbWUgaW4gYm90aCB0aGUgZmlyc3QgYW5kIHNlY29uZCBjb250ZXh0cy4KKy8vIFRodXMsIGNhbm9uaWNhbCBMUiByZXVzZXMgdGhlIHNhbWUgc3RhdGUgZm9yIGJvdGggY29udGV4dHMuICBIb3dldmVyLAorLy8gdGhlIGxvb2thaGVhZCAnYScgZm9yIHRoZSByZWR1Y3Rpb24gImxvb2s6ICdhJyIgbGF0ZXIgYmVjb21lcyBhbgorLy8gZXJyb3IgYWN0aW9uIG9ubHkgaW4gdGhlIGZpcnN0IGNvbnRleHQuICBJbiBvcmRlciB0byBpbW1lZGlhdGVseQorLy8gZGV0ZWN0IHRoZSBzeW50YXggZXJyb3Igb24gJ2EnIGhlcmUgZm9yIG9ubHkgdGhlIGZpcnN0IGNvbnRleHQsIHRoaXMKKy8vIGNhbm9uaWNhbCBMUiBzdGF0ZSB3b3VsZCBoYXZlIHRvIGJlIHNwbGl0IGludG8gdHdvIHN0YXRlcywgYW5kIHRoZQorLy8gJ2EnIGxvb2thaGVhZCB3b3VsZCBoYXZlIHRvIGJlIHJlbW92ZWQgZnJvbSBvbmx5IG9uZSBvZiB0aGUgc3RhdGVzLgorbG9vazoKKyAgJ2EnIC8vIFJlZHVjdGlvbiBsb29rYWhlYWQgc2V0IGlzIGFsd2F5cyBbJ2EnLCAnYiddLgorfCAnYScgJ2InCit8ICdhJyAnYycgLy8gJ2MnIGlzIGZvcmdvdHRlbiBhcyBhbiBleHBlY3RlZCB0b2tlbi4KKzsKKworcmVkdWNlLW5vbmFzc29jOiAlcHJlYyAnYSc7CisKKyUlCitdQVRfWVlFUlJPUl9ERUZJTkVbCitdQVRfWVlMRVhfREVGSU5FKFsiYWFhIl0pWworCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorXV0pCitBVF9CSVNPTl9PUFRJT05fUE9QREVGUworCisjIFNob3cgY2Fub25pY2FsIExSJ3MgZmFpbHVyZS4KK0FUX0JJU09OX0NIRUNLKFtbLURsci50eXBlPWNhbm9uaWNhbC1sciAtbyBpbnB1dC5jIGlucHV0LnldXSwKKyAgICAgICAgICAgICAgIFtbMF1dLCBbW11dLAorW1tpbnB1dC55OiBjb25mbGljdHM6IDIgc2hpZnQvcmVkdWNlCitdXSkKK0FUX0NPTVBJTEUoW1tpbnB1dF1dKQorQVRfUEFSU0VSX0NIRUNLKFtbLi9pbnB1dF1dLCBbWzFdXSwgW1tdXSwKK1tbc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICdhJywgZXhwZWN0aW5nICdiJworXV0pCisKKyMgSXQncyBjb3JyZWN0ZWQgYnkgTEFDLgorQVRfQklTT05fQ0hFQ0soW1stRGxyLnR5cGU9Y2Fub25pY2FsLWxyIC1EcGFyc2UubGFjPWZ1bGwgXAorICAgICAgICAgICAgICAgICAtbyBpbnB1dC5jIGlucHV0LnldXSwgW1swXV0sIFtbXV0sCitbW2lucHV0Lnk6IGNvbmZsaWN0czogMiBzaGlmdC9yZWR1Y2UKK11dKQorQVRfQ09NUElMRShbW2lucHV0XV0pCitBVF9QQVJTRVJfQ0hFQ0soW1suL2lucHV0XV0sIFtbMV1dLCBbW11dLAorW1tzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ2EnLCBleHBlY3RpbmcgJ2InIG9yICdjJworXV0pCisKKyMgSUVMUiBpcyBzdWZmaWNpZW50IHdoZW4gTEFDIGlzIHVzZWQuCitBVF9CSVNPTl9DSEVDSyhbWy1EbHIudHlwZT1pZWxyIC1EcGFyc2UubGFjPWZ1bGwgLW8gaW5wdXQuYyBpbnB1dC55XV0sCisgICAgICAgICAgICAgICBbWzBdXSwgW1tdXSwKK1tbaW5wdXQueTogY29uZmxpY3RzOiAyIHNoaWZ0L3JlZHVjZQorXV0pCitBVF9DT01QSUxFKFtbaW5wdXRdXSkKK0FUX1BBUlNFUl9DSEVDSyhbWy4vaW5wdXRdXSwgW1sxXV0sIFtbXV0sCitbW3N5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnYScsIGV4cGVjdGluZyAnYicgb3IgJ2MnCitdXSkKKworQVRfQ0xFQU5VUAorCiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAjIyBVbnJlc29sdmVkIFNSIENvbmZsaWN0cy4gICMjCiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCkBAIC0xMzUsNyArNTUzLDcgQEAKIGV4cDogZXhwIE9QIGV4cCB8IE5VTTsKIF1dKQogCi1BVF9DSEVDSyhbYmlzb24gLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueV0sIDAsIFtdLAorQVRfQklTT05fQ0hFQ0soWy1vIGlucHV0LmMgLS1yZXBvcnQ9YWxsIGlucHV0LnldLCAwLCBbXSwKIFtpbnB1dC55OiBjb25mbGljdHM6IDEgc2hpZnQvcmVkdWNlCiBdKQogCkBAIC0xNjgsNyArNTg2LDcgQEAKICAgICBvbiBsZWZ0OiAxIDIsIG9uIHJpZ2h0OiAwIDEKIAogCi1zdGF0ZSAwCitTdGF0ZSAwCiAKICAgICAwICRhY2NlcHQ6IC4gZXhwICRlbmQKICAgICAxIGV4cDogLiBleHAgT1AgZXhwCkBAIC0xNzksMTQgKzU5NywxNCBAQAogICAgIGV4cCAgZ28gdG8gc3RhdGUgMgogCiAKLXN0YXRlIDEKK1N0YXRlIDEKIAogICAgIDIgZXhwOiBOVU0gLgogCiAgICAgJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDIgKGV4cCkKIAogCi1zdGF0ZSAyCitTdGF0ZSAyCiAKICAgICAwICRhY2NlcHQ6IGV4cCAuICRlbmQKICAgICAxIGV4cDogZXhwIC4gT1AgZXhwCkBAIC0xOTUsMTQgKzYxMywxNCBAQAogICAgIE9QICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNAogCiAKLXN0YXRlIDMKK1N0YXRlIDMKIAogICAgIDAgJGFjY2VwdDogZXhwICRlbmQgLgogCiAgICAgJGRlZmF1bHQgIGFjY2VwdAogCiAKLXN0YXRlIDQKK1N0YXRlIDQKIAogICAgIDEgZXhwOiAuIGV4cCBPUCBleHAKICAgICAxICAgIHwgZXhwIE9QIC4gZXhwCkBAIC0yMTMsOSArNjMxLDkgQEAKICAgICBleHAgIGdvIHRvIHN0YXRlIDUKIAogCi1zdGF0ZSA1CitTdGF0ZSA1CiAKLSAgICAxIGV4cDogZXhwIC4gT1AgZXhwICBbJGVuZCwgT1BdCisgICAgMSBleHA6IGV4cCAuIE9QIGV4cAogICAgIDEgICAgfCBleHAgT1AgZXhwIC4gIFskZW5kLCBPUF0KIAogICAgIE9QICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDQKQEAgLTI0Myw3ICs2NjEsNyBAQAogZXhwOiBleHAgT1AgZXhwIHwgTlVNOwogXV0pCiAKLUFUX0NIRUNLKFtiaXNvbiAtbyBpbnB1dC5jIC0tcmVwb3J0PWFsbCBpbnB1dC55XSkKK0FUX0JJU09OX0NIRUNLKFstbyBpbnB1dC5jIC0tcmVwb3J0PWFsbCBpbnB1dC55XSkKIAogIyBDaGVjayB0aGUgY29udGVudHMgb2YgdGhlIHJlcG9ydC4KIEFUX0NIRUNLKFtjYXQgaW5wdXQub3V0cHV0XSwgW10sCkBAIC0yNzEsNyArNjg5LDcgQEAKICAgICBvbiBsZWZ0OiAxIDIsIG9uIHJpZ2h0OiAwIDEKIAogCi1zdGF0ZSAwCitTdGF0ZSAwCiAKICAgICAwICRhY2NlcHQ6IC4gZXhwICRlbmQKICAgICAxIGV4cDogLiBleHAgT1AgZXhwCkBAIC0yODIsMTQgKzcwMCwxNCBAQAogICAgIGV4cCAgZ28gdG8gc3RhdGUgMgogCiAKLXN0YXRlIDEKK1N0YXRlIDEKIAogICAgIDIgZXhwOiBOVU0gLgogCiAgICAgJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDIgKGV4cCkKIAogCi1zdGF0ZSAyCitTdGF0ZSAyCiAKICAgICAwICRhY2NlcHQ6IGV4cCAuICRlbmQKICAgICAxIGV4cDogZXhwIC4gT1AgZXhwCkBAIC0yOTgsMTQgKzcxNiwxNCBAQAogICAgIE9QICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNAogCiAKLXN0YXRlIDMKK1N0YXRlIDMKIAogICAgIDAgJGFjY2VwdDogZXhwICRlbmQgLgogCiAgICAgJGRlZmF1bHQgIGFjY2VwdAogCiAKLXN0YXRlIDQKK1N0YXRlIDQKIAogICAgIDEgZXhwOiAuIGV4cCBPUCBleHAKICAgICAxICAgIHwgZXhwIE9QIC4gZXhwCkBAIC0zMTYsOSArNzM0LDkgQEAKICAgICBleHAgIGdvIHRvIHN0YXRlIDUKIAogCi1zdGF0ZSA1CitTdGF0ZSA1CiAKLSAgICAxIGV4cDogZXhwIC4gT1AgZXhwICBbJGVuZCwgT1BdCisgICAgMSBleHA6IGV4cCAuIE9QIGV4cAogICAgIDEgICAgfCBleHAgT1AgZXhwIC4gIFskZW5kLCBPUF0KIAogICAgICRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAxIChleHApCkBAIC0zNjUsMTQgKzc4MywxNCBAQAogJSUKIF1dKQogCi1BVF9DSEVDSyhbYmlzb24gLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueV0sIDAsIFtdLAorQVRfQklTT05fQ0hFQ0soWy1vIGlucHV0LmMgLS1yZXBvcnQ9YWxsIGlucHV0LnldLCAwLCBbXSwKIFtbaW5wdXQueTogY29uZmxpY3RzOiAxIHJlZHVjZS9yZWR1Y2UKLWlucHV0Lnk6NC42LTg6IHdhcm5pbmc6IHJ1bGUgbmV2ZXIgcmVkdWNlZCBiZWNhdXNlIG9mIGNvbmZsaWN0czogaWQ6ICcwJworaW5wdXQueTo0LjYtODogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzOiBpZDogJzAnCiBdXSkKIAogIyBDaGVjayB0aGUgY29udGVudHMgb2YgdGhlIHJlcG9ydC4KIEFUX0NIRUNLKFtjYXQgaW5wdXQub3V0cHV0XSwgW10sCi1bW1J1bGVzIG5ldmVyIHJlZHVjZWQKK1tbUnVsZXMgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0cwogCiAgICAgNCBpZDogJzAnCiAKQEAgLTQxMSw3ICs4MjksNyBAQAogICAgIG9uIGxlZnQ6IDQsIG9uIHJpZ2h0OiAyCiAKIAotc3RhdGUgMAorU3RhdGUgMAogCiAgICAgMCAkYWNjZXB0OiAuIGV4cCAkZW5kCiAgICAgMSBleHA6IC4gbnVtCkBAIC00MjYsNyArODQ0LDcgQEAKICAgICBpZCAgIGdvIHRvIHN0YXRlIDQKIAogCi1zdGF0ZSAxCitTdGF0ZSAxCiAKICAgICAzIG51bTogJzAnIC4gIFskZW5kXQogICAgIDQgaWQ6ICcwJyAuICBbJGVuZF0KQEAgLTQzNiwyOCArODU0LDI4IEBACiAgICAgJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDMgKG51bSkKIAogCi1zdGF0ZSAyCitTdGF0ZSAyCiAKICAgICAwICRhY2NlcHQ6IGV4cCAuICRlbmQKIAogICAgICRlbmQgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNQogCiAKLXN0YXRlIDMKK1N0YXRlIDMKIAogICAgIDEgZXhwOiBudW0gLgogCiAgICAgJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDEgKGV4cCkKIAogCi1zdGF0ZSA0CitTdGF0ZSA0CiAKICAgICAyIGV4cDogaWQgLgogCiAgICAgJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDIgKGV4cCkKIAogCi1zdGF0ZSA1CitTdGF0ZSA1CiAKICAgICAwICRhY2NlcHQ6IGV4cCAkZW5kIC4KIApAQCAtNDgyLDkgKzkwMCw5IEBACiBleHA6IGV4cCBPUCBleHAgfCBOVU07CiBdXSkKIAotQVRfQ0hFQ0soW2Jpc29uIC1vIGlucHV0LmMgaW5wdXQueV0sIDEsIFtdLAorQVRfQklTT05fQ0hFQ0soWy1vIGlucHV0LmMgaW5wdXQueV0sIDEsIFtdLAogW2lucHV0Lnk6IGNvbmZsaWN0czogMSBzaGlmdC9yZWR1Y2UKLWlucHV0Lnk6IGV4cGVjdGVkIDAgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cworaW5wdXQueTogZXJyb3I6IGV4cGVjdGVkIDAgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cwogXSkKIEFUX0NMRUFOVVAKIApAQCAtNTAyLDcgKzkyMCw3IEBACiBleHA6IGV4cCBPUCBleHAgfCBOVU07CiBdXSkKIAotQVRfQ0hFQ0soW2Jpc29uIC1vIGlucHV0LmMgaW5wdXQueV0pCitBVF9CSVNPTl9DSEVDSyhbLW8gaW5wdXQuYyBpbnB1dC55XSkKIEFUX0NMRUFOVVAKIAogCkBAIC01MTksMTYgKzkzNywxNiBAQAogZXhwOiBleHAgT1AgZXhwIHwgTlVNOwogXV0pCiAKLUFUX0NIRUNLKFtiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnldLCAxLCBbXSwKK0FUX0JJU09OX0NIRUNLKFstbyBpbnB1dC5jIGlucHV0LnldLCAxLCBbXSwKIFtpbnB1dC55OiBjb25mbGljdHM6IDEgc2hpZnQvcmVkdWNlCi1pbnB1dC55OiBleHBlY3RlZCAyIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMKK2lucHV0Lnk6IGVycm9yOiBleHBlY3RlZCAyIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMKIF0pCiBBVF9DTEVBTlVQCiAKIAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyAlZXhwZWN0IHdpdGggcmVkdWNlIGNvbmZsaWN0cyAgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgJWV4cGVjdCB3aXRoIHJlZHVjZSBjb25mbGljdHMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogCiBBVF9TRVRVUChbJWV4cGVjdCB3aXRoIHJlZHVjZSBjb25mbGljdHNdKQogCkBAIC01MzksMTYgKzk1NywzMyBAQAogYTogJ2EnOwogXV0pCiAKLUFUX0NIRUNLKFtiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnldLCAxLCBbXSwKK0FUX0JJU09OX0NIRUNLKFstbyBpbnB1dC5jIGlucHV0LnldLCAxLCBbXSwKIFtpbnB1dC55OiBjb25mbGljdHM6IDEgcmVkdWNlL3JlZHVjZQotaW5wdXQueTogZXhwZWN0ZWQgMCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0cworaW5wdXQueTogZXJyb3I6IGV4cGVjdGVkIDAgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMKIF0pCiBBVF9DTEVBTlVQCiAKIAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgJW5vLWRlZmF1bHQtcHJlYyB3aXRob3V0ICVwcmVjICAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgJXByZWMgd2l0aCB1c2VyIHN0cmluZ3MuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitBVF9TRVRVUChbJXByZWMgd2l0aCB1c2VyIHN0cmluZ10pCisKK0FUX0RBVEEoW1tpbnB1dC55XV0sCitbWyUlCitleHA6CisgICJmb28iICVwcmVjICJmb28iCis7CitdXSkKKworQVRfQklTT05fQ0hFQ0soWy1vIGlucHV0LmMgaW5wdXQueV0pCitBVF9DTEVBTlVQCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjICVuby1kZWZhdWx0LXByZWMgd2l0aG91dCAlcHJlYy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogCiBBVF9TRVRVUChbJW5vLWRlZmF1bHQtcHJlYyB3aXRob3V0ICVwcmVjXSkKIApAQCAtNTY2LDE1ICsxMDAxLDE1IEBACiAgICA7CiBdXSkKIAotQVRfQ0hFQ0soW2Jpc29uIC1vIGlucHV0LmMgaW5wdXQueV0sIDAsIFtdLAorQVRfQklTT05fQ0hFQ0soWy1vIGlucHV0LmMgaW5wdXQueV0sIDAsIFtdLAogW1tpbnB1dC55OiBjb25mbGljdHM6IDQgc2hpZnQvcmVkdWNlCiBdXSkKIEFUX0NMRUFOVVAKIAogCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyAlbm8tZGVmYXVsdC1wcmVjIHdpdGggJXByZWMgICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgJW5vLWRlZmF1bHQtcHJlYyB3aXRoICVwcmVjLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAKIEFUX1NFVFVQKFslbm8tZGVmYXVsdC1wcmVjIHdpdGggJXByZWNdKQogCkBAIC01OTIsMTMgKzEwMjcsMTMgQEAKICAgIDsKIF1dKQogCi1BVF9DSEVDSyhbYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55XSkKK0FUX0JJU09OX0NIRUNLKFstbyBpbnB1dC5jIGlucHV0LnldKQogQVRfQ0xFQU5VUAogCiAKLSMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjICVkZWZhdWx0LXByZWMgICAgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLSAjIworIyMgJWRlZmF1bHQtcHJlYy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0gIyMKIAogQVRfU0VUVVAoWyVkZWZhdWx0LXByZWNdKQogCkBAIC02MTYsNSArMTA1MSw0NjYgQEAKICAgIDsKIF1dKQogCi1BVF9DSEVDSyhbYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55XSkKK0FUX0JJU09OX0NIRUNLKFstbyBpbnB1dC5jIGlucHV0LnldKQorQVRfQ0xFQU5VUAorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFVucmVhY2hhYmxlIFN0YXRlcyBBZnRlciBDb25mbGljdCBSZXNvbHV0aW9uLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworQVRfU0VUVVAoW1tVbnJlYWNoYWJsZSBTdGF0ZXMgQWZ0ZXIgQ29uZmxpY3QgUmVzb2x1dGlvbl1dKQorCisjIElmIGNvbmZsaWN0IHJlc29sdXRpb24gbWFrZXMgc3RhdGVzIHVucmVhY2hhYmxlLCByZW1vdmUgdGhvc2Ugc3RhdGVzLCByZXBvcnQKKyMgcnVsZXMgdGhhdCBhcmUgdGhlbiB1bnVzZWQsIGFuZCBkb24ndCByZXBvcnQgY29uZmxpY3RzIGluIHRob3NlIHN0YXRlcy4gIFRlc3QKKyMgd2hhdCBoYXBwZW5zIHdoZW4gYSBub250ZXJtaW5hbCBiZWNvbWVzIHVzZWxlc3MgYXMgYSByZXN1bHQgb2Ygc3RhdGUgcmVtb3ZhbAorIyBzaW5jZSB0aGF0IGNhdXNlcyBsYWxyLm8ncyBnb3RvIG1hcCB0byBiZSByZXdyaXR0ZW4uCisKK0FUX0RBVEEoW1tpbnB1dC55XV0sCitbWyVvdXRwdXQgImlucHV0LmMiCislbGVmdCAnYScKKworJSUKKworc3RhcnQ6IHJlc29sdmVkX2NvbmZsaWN0ICdhJyByZXBvcnRlZF9jb25mbGljdHMgJ2EnIDsKKworLyogUy9SIGNvbmZsaWN0IHJlc29sdmVkIGFzIHJlZHVjZSwgc28gdGhlIHN0YXRlIHdpdGggaXRlbQorICogKHJlc29sdmVkX2NvbmZsaWN0OiAnYScgLiB1bnJlYWNoYWJsZTEpIGFuZCBhbGwgaXQgdHJhbnNpdGlvbiBzdWNjZXNzb3JzIGFyZQorICogdW5yZWFjaGFibGUsIGFuZCB0aGUgYXNzb2NpYXRlZCBwcm9kdWN0aW9uIGlzIHVzZWxlc3MuICAqLworcmVzb2x2ZWRfY29uZmxpY3Q6CisgICAgJ2EnIHVucmVhY2hhYmxlMQorICB8ICVwcmVjICdhJworICA7CisKKy8qIFMvUiBjb25mbGljdCB0aGF0IG5lZWQgbm90IGJlIHJlcG9ydGVkIHNpbmNlIGl0IGlzIHVucmVhY2hhYmxlIGJlY2F1c2Ugb2YKKyAqIHRoZSBwcmV2aW91cyBjb25mbGljdCByZXNvbHV0aW9uLiAgTm9udGVybWluYWwgdW5yZWFjaGFibGUxIGFuZCBhbGwgaXRzCisgKiBwcm9kdWN0aW9ucyBhcmUgdXNlbGVzcy4gICovCit1bnJlYWNoYWJsZTE6CisgICAgJ2EnIHVucmVhY2hhYmxlMgorICB8CisgIDsKKworLyogTGlrZXdpc2UgZm9yIGEgUi9SIGNvbmZsaWN0IGFuZCBub250ZXJtaW5hbCB1bnJlYWNoYWJsZTIuICAqLwordW5yZWFjaGFibGUyOiB8IDsKKworLyogTWFrZSBzdXJlIHJlbWFpbmluZyBTL1IgYW5kIFIvUiBjb25mbGljdHMgYXJlIHN0aWxsIHJlcG9ydGVkIGNvcnJlY3RseSBldmVuCisgKiB3aGVuIHRoZWlyIHN0YXRlcyBhcmUgcmVudW1iZXJlZCBkdWUgdG8gc3RhdGUgcmVtb3ZhbC4gICovCityZXBvcnRlZF9jb25mbGljdHM6CisgICAgJ2EnCisgIHwgJ2EnCisgIHwKKyAgOworCitdXSkKKworQVRfQklTT05fQ0hFQ0soW1stLXJlcG9ydD1hbGwgaW5wdXQueV1dLCAwLCBbXSwKK1tbaW5wdXQueTogY29uZmxpY3RzOiAxIHNoaWZ0L3JlZHVjZSwgMSByZWR1Y2UvcmVkdWNlCitpbnB1dC55OjEyLjUtMjA6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0czogcmVzb2x2ZWRfY29uZmxpY3Q6ICdhJyB1bnJlYWNoYWJsZTEKK2lucHV0Lnk6MjAuNS0yMDogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzOiB1bnJlYWNoYWJsZTE6ICdhJyB1bnJlYWNoYWJsZTIKK2lucHV0Lnk6MjEuNDogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzOiB1bnJlYWNoYWJsZTE6IC8qIGVtcHR5ICovCitpbnB1dC55OjI1LjEzOiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHM6IHVucmVhY2hhYmxlMjogLyogZW1wdHkgKi8KK2lucHV0Lnk6MjUuMTY6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0czogdW5yZWFjaGFibGUyOiAvKiBlbXB0eSAqLworaW5wdXQueTozMS41LTc6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0czogcmVwb3J0ZWRfY29uZmxpY3RzOiAnYScKK2lucHV0Lnk6MzIuNDogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzOiByZXBvcnRlZF9jb25mbGljdHM6IC8qIGVtcHR5ICovCitdXSkKKworQVRfQ0hFQ0soW1tjYXQgaW5wdXQub3V0cHV0XV0sIDAsCitbW1J1bGVzIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHMKKworICAgIDIgcmVzb2x2ZWRfY29uZmxpY3Q6ICdhJyB1bnJlYWNoYWJsZTEKKworICAgIDQgdW5yZWFjaGFibGUxOiAnYScgdW5yZWFjaGFibGUyCisgICAgNSAgICAgICAgICAgICB8IC8qIGVtcHR5ICovCisKKyAgICA2IHVucmVhY2hhYmxlMjogLyogZW1wdHkgKi8KKyAgICA3ICAgICAgICAgICAgIHwgLyogZW1wdHkgKi8KKworICAgIDkgcmVwb3J0ZWRfY29uZmxpY3RzOiAnYScKKyAgIDEwICAgICAgICAgICAgICAgICAgIHwgLyogZW1wdHkgKi8KKworCitTdGF0ZSA0IGNvbmZsaWN0czogMSBzaGlmdC9yZWR1Y2UKK1N0YXRlIDUgY29uZmxpY3RzOiAxIHJlZHVjZS9yZWR1Y2UKKworCitHcmFtbWFyCisKKyAgICAwICRhY2NlcHQ6IHN0YXJ0ICRlbmQKKworICAgIDEgc3RhcnQ6IHJlc29sdmVkX2NvbmZsaWN0ICdhJyByZXBvcnRlZF9jb25mbGljdHMgJ2EnCisKKyAgICAyIHJlc29sdmVkX2NvbmZsaWN0OiAnYScgdW5yZWFjaGFibGUxCisgICAgMyAgICAgICAgICAgICAgICAgIHwgLyogZW1wdHkgKi8KKworICAgIDQgdW5yZWFjaGFibGUxOiAnYScgdW5yZWFjaGFibGUyCisgICAgNSAgICAgICAgICAgICB8IC8qIGVtcHR5ICovCisKKyAgICA2IHVucmVhY2hhYmxlMjogLyogZW1wdHkgKi8KKyAgICA3ICAgICAgICAgICAgIHwgLyogZW1wdHkgKi8KKworICAgIDggcmVwb3J0ZWRfY29uZmxpY3RzOiAnYScKKyAgICA5ICAgICAgICAgICAgICAgICAgIHwgJ2EnCisgICAxMCAgICAgICAgICAgICAgICAgICB8IC8qIGVtcHR5ICovCisKKworVGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyCisKKyRlbmQgKDApIDAKKydhJyAoOTcpIDEgMiA0IDggOQorZXJyb3IgKDI1NikKKworCitOb250ZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIKKworJGFjY2VwdCAoNCkKKyAgICBvbiBsZWZ0OiAwCitzdGFydCAoNSkKKyAgICBvbiBsZWZ0OiAxLCBvbiByaWdodDogMAorcmVzb2x2ZWRfY29uZmxpY3QgKDYpCisgICAgb24gbGVmdDogMiAzLCBvbiByaWdodDogMQordW5yZWFjaGFibGUxICg3KQorICAgIG9uIGxlZnQ6IDQgNSwgb24gcmlnaHQ6IDIKK3VucmVhY2hhYmxlMiAoOCkKKyAgICBvbiBsZWZ0OiA2IDcsIG9uIHJpZ2h0OiA0CityZXBvcnRlZF9jb25mbGljdHMgKDkpCisgICAgb24gbGVmdDogOCA5IDEwLCBvbiByaWdodDogMQorCisKK1N0YXRlIDAKKworICAgIDAgJGFjY2VwdDogLiBzdGFydCAkZW5kCisgICAgMSBzdGFydDogLiByZXNvbHZlZF9jb25mbGljdCAnYScgcmVwb3J0ZWRfY29uZmxpY3RzICdhJworICAgIDIgcmVzb2x2ZWRfY29uZmxpY3Q6IC4gJ2EnIHVucmVhY2hhYmxlMQorICAgIDMgICAgICAgICAgICAgICAgICB8IC4gIFsnYSddCisKKyAgICAkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMyAocmVzb2x2ZWRfY29uZmxpY3QpCisKKyAgICBzdGFydCAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMQorICAgIHJlc29sdmVkX2NvbmZsaWN0ICBnbyB0byBzdGF0ZSAyCisKKyAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgMyBhbmQgdG9rZW4gJ2EnIHJlc29sdmVkIGFzIHJlZHVjZSAoJWxlZnQgJ2EnKS4KKworCitTdGF0ZSAxCisKKyAgICAwICRhY2NlcHQ6IHN0YXJ0IC4gJGVuZAorCisgICAgJGVuZCAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAzCisKKworU3RhdGUgMgorCisgICAgMSBzdGFydDogcmVzb2x2ZWRfY29uZmxpY3QgLiAnYScgcmVwb3J0ZWRfY29uZmxpY3RzICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDQKKworCitTdGF0ZSAzCisKKyAgICAwICRhY2NlcHQ6IHN0YXJ0ICRlbmQgLgorCisgICAgJGRlZmF1bHQgIGFjY2VwdAorCisKK1N0YXRlIDQKKworICAgIDEgc3RhcnQ6IHJlc29sdmVkX2NvbmZsaWN0ICdhJyAuIHJlcG9ydGVkX2NvbmZsaWN0cyAnYScKKyAgICA4IHJlcG9ydGVkX2NvbmZsaWN0czogLiAnYScKKyAgICA5ICAgICAgICAgICAgICAgICAgIHwgLiAnYScKKyAgIDEwICAgICAgICAgICAgICAgICAgIHwgLiAgWydhJ10KKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1CisKKyAgICAnYScgIFtyZWR1Y2UgdXNpbmcgcnVsZSAxMCAocmVwb3J0ZWRfY29uZmxpY3RzKV0KKworICAgIHJlcG9ydGVkX2NvbmZsaWN0cyAgZ28gdG8gc3RhdGUgNgorCisKK1N0YXRlIDUKKworICAgIDggcmVwb3J0ZWRfY29uZmxpY3RzOiAnYScgLiAgWydhJ10KKyAgICA5ICAgICAgICAgICAgICAgICAgIHwgJ2EnIC4gIFsnYSddCisKKyAgICAnYScgICAgICAgcmVkdWNlIHVzaW5nIHJ1bGUgOCAocmVwb3J0ZWRfY29uZmxpY3RzKQorICAgICdhJyAgICAgICBbcmVkdWNlIHVzaW5nIHJ1bGUgOSAocmVwb3J0ZWRfY29uZmxpY3RzKV0KKyAgICAkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgOCAocmVwb3J0ZWRfY29uZmxpY3RzKQorCisKK1N0YXRlIDYKKworICAgIDEgc3RhcnQ6IHJlc29sdmVkX2NvbmZsaWN0ICdhJyByZXBvcnRlZF9jb25mbGljdHMgLiAnYScKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA3CisKKworU3RhdGUgNworCisgICAgMSBzdGFydDogcmVzb2x2ZWRfY29uZmxpY3QgJ2EnIHJlcG9ydGVkX2NvbmZsaWN0cyAnYScgLgorCisgICAgJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDEgKHN0YXJ0KQorXV0pCisKK0FUX0RBVEEoW1tpbnB1dC1rZWVwLnldXSwKK1tbJWRlZmluZSBsci5rZWVwLXVucmVhY2hhYmxlLXN0YXRlcworXV0pCitBVF9DSEVDSyhbW2NhdCBpbnB1dC55ID4+IGlucHV0LWtlZXAueV1dKQorCitBVF9CSVNPTl9DSEVDSyhbW2lucHV0LWtlZXAueV1dLCAwLCBbXSwKK1tbaW5wdXQta2VlcC55OiBjb25mbGljdHM6IDIgc2hpZnQvcmVkdWNlLCAyIHJlZHVjZS9yZWR1Y2UKK2lucHV0LWtlZXAueToyMi40OiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHM6IHVucmVhY2hhYmxlMTogLyogZW1wdHkgKi8KK2lucHV0LWtlZXAueToyNi4xNjogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzOiB1bnJlYWNoYWJsZTI6IC8qIGVtcHR5ICovCitpbnB1dC1rZWVwLnk6MzIuNS03OiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHM6IHJlcG9ydGVkX2NvbmZsaWN0czogJ2EnCitpbnB1dC1rZWVwLnk6MzMuNDogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzOiByZXBvcnRlZF9jb25mbGljdHM6IC8qIGVtcHR5ICovCitdXSkKKworQVRfQ0xFQU5VUAorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgU29sdmVkIGNvbmZsaWN0cyByZXBvcnQgZm9yIG11bHRpcGxlIHJlZHVjdGlvbnMgaW4gYSBzdGF0ZS4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworQVRfU0VUVVAoW1tTb2x2ZWQgY29uZmxpY3RzIHJlcG9ydCBmb3IgbXVsdGlwbGUgcmVkdWN0aW9ucyBpbiBhIHN0YXRlXV0pCisKKyMgVXNlZCB0byBsb3NlIGVhcmxpZXIgc29sdmVkIGNvbmZsaWN0IG1lc3NhZ2VzIGV2ZW4gd2l0aGluIGEgc2luZ2xlIFMvUi9SLgorCitBVF9EQVRBKFtbaW5wdXQueV1dLAorW1slbGVmdCAnYScKKyVyaWdodCAnYicKKyVyaWdodCAnYycKKyVyaWdodCAnZCcKKyUlCitzdGFydDoKKyAgICAnYScKKyAgfCBlbXB0eV9hICdhJworICB8ICdiJworICB8IGVtcHR5X2IgJ2InCisgIHwgJ2MnCisgIHwgZW1wdHlfYzEgJ2MnCisgIHwgZW1wdHlfYzIgJ2MnCisgIHwgZW1wdHlfYzMgJ2MnCisgIDsKK2VtcHR5X2E6ICVwcmVjICdhJyA7CitlbXB0eV9iOiAlcHJlYyAnYicgOworZW1wdHlfYzE6ICVwcmVjICdjJyA7CitlbXB0eV9jMjogJXByZWMgJ2MnIDsKK2VtcHR5X2MzOiAlcHJlYyAnZCcgOworXV0pCitBVF9CSVNPTl9DSEVDSyhbWy0tcmVwb3J0PWFsbCAtbyBpbnB1dC5jIGlucHV0LnldXSwgMCwgW10sIFtpZ25vcmVdKQorQVRfQ0hFQ0soW1tjYXQgaW5wdXQub3V0cHV0IHwgc2VkIC1uICcvXlN0YXRlIDAkLywvXlN0YXRlIDEkL3AnXV0sIDAsCitbW1N0YXRlIDAKKworICAgIDAgJGFjY2VwdDogLiBzdGFydCAkZW5kCisgICAgMSBzdGFydDogLiAnYScKKyAgICAyICAgICAgfCAuIGVtcHR5X2EgJ2EnCisgICAgMyAgICAgIHwgLiAnYicKKyAgICA0ICAgICAgfCAuIGVtcHR5X2IgJ2InCisgICAgNSAgICAgIHwgLiAnYycKKyAgICA2ICAgICAgfCAuIGVtcHR5X2MxICdjJworICAgIDcgICAgICB8IC4gZW1wdHlfYzIgJ2MnCisgICAgOCAgICAgIHwgLiBlbXB0eV9jMyAnYycKKyAgICA5IGVtcHR5X2E6IC4gIFsnYSddCisgICAxMCBlbXB0eV9iOiAuICBbXQorICAgMTEgZW1wdHlfYzE6IC4gIFtdCisgICAxMiBlbXB0eV9jMjogLiAgW10KKyAgIDEzIGVtcHR5X2MzOiAuICBbJ2MnXQorCisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEKKworICAgICdjJyAgICAgICByZWR1Y2UgdXNpbmcgcnVsZSAxMyAoZW1wdHlfYzMpCisgICAgJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDkgKGVtcHR5X2EpCisKKyAgICBzdGFydCAgICAgZ28gdG8gc3RhdGUgMgorICAgIGVtcHR5X2EgICBnbyB0byBzdGF0ZSAzCisgICAgZW1wdHlfYiAgIGdvIHRvIHN0YXRlIDQKKyAgICBlbXB0eV9jMSAgZ28gdG8gc3RhdGUgNQorICAgIGVtcHR5X2MyICBnbyB0byBzdGF0ZSA2CisgICAgZW1wdHlfYzMgIGdvIHRvIHN0YXRlIDcKKworICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSA5IGFuZCB0b2tlbiAnYScgcmVzb2x2ZWQgYXMgcmVkdWNlICglbGVmdCAnYScpLgorICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAxMCBhbmQgdG9rZW4gJ2InIHJlc29sdmVkIGFzIHNoaWZ0ICglcmlnaHQgJ2InKS4KKyAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgMTEgYW5kIHRva2VuICdjJyByZXNvbHZlZCBhcyBzaGlmdCAoJXJpZ2h0ICdjJykuCisgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlIDEyIGFuZCB0b2tlbiAnYycgcmVzb2x2ZWQgYXMgc2hpZnQgKCVyaWdodCAnYycpLgorICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAxMyBhbmQgdG9rZW4gJ2MnIHJlc29sdmVkIGFzIHJlZHVjZSAoJ2MnIDwgJ2QnKS4KKworCitTdGF0ZSAxCitdXSkKKworQVRfQ0xFQU5VUAorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgJW5vbmFzc29jIGVycm9yIGFjdGlvbnMgZm9yIG11bHRpcGxlIHJlZHVjdGlvbnMgaW4gYSBzdGF0ZS4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBVc2VkIHRvIGFib3J0IHdoZW4gdHJ5aW5nIHRvIHJlc29sdmUgY29uZmxpY3RzIGFzICVub25hc3NvYyBlcnJvciBhY3Rpb25zIGZvcgorIyBtdWx0aXBsZSByZWR1Y3Rpb25zIGluIGEgc3RhdGUuCisKKyMgRm9yIGEgJW5vbmFzc29jIGVycm9yIGFjdGlvbiB0b2tlbiwgdXNlZCB0byBwcmludCB0aGUgZmlyc3QgcmVtYWluaW5nCisjIHJlZHVjdGlvbiBvbiB0aGF0IHRva2VuIHdpdGhvdXQgYnJhY2tldHMuCisKK0FUX1NFVFVQKFtbJW5vbmFzc29jIGVycm9yIGFjdGlvbnMgZm9yIG11bHRpcGxlIHJlZHVjdGlvbnMgaW4gYSBzdGF0ZV1dKQorCitBVF9EQVRBKFtbaW5wdXQueV1dLAorW1slbm9uYXNzb2MgJ2EnICdiJyAnYycKKyUlCitzdGFydDoKKyAgICAnYScKKyAgfCBlbXB0eV9hICdhJworICB8ICdiJworICB8IGVtcHR5X2IgJ2InCisgIHwgJ2MnCisgIHwgZW1wdHlfYzEgJ2MnCisgIHwgZW1wdHlfYzIgJ2MnCisgIHwgZW1wdHlfYzMgJ2MnCisgIDsKK2VtcHR5X2E6ICVwcmVjICdhJyA7CitlbXB0eV9iOiAlcHJlYyAnYicgOworZW1wdHlfYzE6ICVwcmVjICdjJyA7CitlbXB0eV9jMjogJXByZWMgJ2MnIDsKK2VtcHR5X2MzOiAlcHJlYyAnYycgOworXV0pCisKK0FUX0JJU09OX0NIRUNLKFtbLS1yZXBvcnQ9YWxsIC1vIGlucHV0LmMgaW5wdXQueV1dLCAwLCBbXSwgW2lnbm9yZV0pCitBVF9DSEVDSyhbW2NhdCBpbnB1dC5vdXRwdXQgfCBzZWQgLW4gJy9eU3RhdGUgMCQvLC9eU3RhdGUgMSQvcCddXSwgMCwKK1tbU3RhdGUgMAorCisgICAgMCAkYWNjZXB0OiAuIHN0YXJ0ICRlbmQKKyAgICAxIHN0YXJ0OiAuICdhJworICAgIDIgICAgICB8IC4gZW1wdHlfYSAnYScKKyAgICAzICAgICAgfCAuICdiJworICAgIDQgICAgICB8IC4gZW1wdHlfYiAnYicKKyAgICA1ICAgICAgfCAuICdjJworICAgIDYgICAgICB8IC4gZW1wdHlfYzEgJ2MnCisgICAgNyAgICAgIHwgLiBlbXB0eV9jMiAnYycKKyAgICA4ICAgICAgfCAuIGVtcHR5X2MzICdjJworICAgIDkgZW1wdHlfYTogLiAgW10KKyAgIDEwIGVtcHR5X2I6IC4gIFtdCisgICAxMSBlbXB0eV9jMTogLiAgW10KKyAgIDEyIGVtcHR5X2MyOiAuICBbJ2MnXQorICAgMTMgZW1wdHlfYzM6IC4gIFsnYyddCisKKyAgICAnYScgIGVycm9yIChub25hc3NvY2lhdGl2ZSkKKyAgICAnYicgIGVycm9yIChub25hc3NvY2lhdGl2ZSkKKyAgICAnYycgIGVycm9yIChub25hc3NvY2lhdGl2ZSkKKworICAgICdjJyAgW3JlZHVjZSB1c2luZyBydWxlIDEyIChlbXB0eV9jMildCisgICAgJ2MnICBbcmVkdWNlIHVzaW5nIHJ1bGUgMTMgKGVtcHR5X2MzKV0KKworICAgIHN0YXJ0ICAgICBnbyB0byBzdGF0ZSAxCisgICAgZW1wdHlfYSAgIGdvIHRvIHN0YXRlIDIKKyAgICBlbXB0eV9iICAgZ28gdG8gc3RhdGUgMworICAgIGVtcHR5X2MxICBnbyB0byBzdGF0ZSA0CisgICAgZW1wdHlfYzIgIGdvIHRvIHN0YXRlIDUKKyAgICBlbXB0eV9jMyAgZ28gdG8gc3RhdGUgNgorCisgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlIDkgYW5kIHRva2VuICdhJyByZXNvbHZlZCBhcyBhbiBlcnJvciAoJW5vbmFzc29jICdhJykuCisgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlIDEwIGFuZCB0b2tlbiAnYicgcmVzb2x2ZWQgYXMgYW4gZXJyb3IgKCVub25hc3NvYyAnYicpLgorICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAxMSBhbmQgdG9rZW4gJ2MnIHJlc29sdmVkIGFzIGFuIGVycm9yICglbm9uYXNzb2MgJ2MnKS4KKworCitTdGF0ZSAxCitdXSkKK0FUX0NMRUFOVVAKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIC1XIHZlcnN1cyAlZXhwZWN0IGFuZCAlZXhwZWN0LXJyICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1NFVFVQKFtbLVcgdmVyc3VzICVleHBlY3QgYW5kICVleHBlY3QtcnJdXSkKKworQVRfREFUQShbW3NyLXJyLnldXSwKK1tbJWdsci1wYXJzZXIKKyUlCitzdGFydDogJ2EnIHwgQSAnYScgfCBCICdhJyA7CitBOiA7CitCOiA7CitdXSkKK0FUX0RBVEEoW1tzci55XV0sCitbWyVnbHItcGFyc2VyCislJQorc3RhcnQ6ICdhJyB8IEEgJ2EnIDsKK0E6IDsKK11dKQorQVRfREFUQShbW3JyLnldXSwKK1tbJWdsci1wYXJzZXIKKyUlCitzdGFydDogQSB8IEIgOworQTogOworQjogOworXV0pCisKK0FUX0JJU09OX0NIRUNLKFtbc3ItcnIueV1dLCBbWzBdXSwgW1tdXSwKK1tbc3ItcnIueTogY29uZmxpY3RzOiAxIHNoaWZ0L3JlZHVjZSwgMSByZWR1Y2UvcmVkdWNlCitdXSkKK0FUX0JJU09OX0NIRUNLKFtbLVduby1jb25mbGljdHMtc3Igc3ItcnIueV1dLCBbWzBdXSwgW1tdXSwKK1tbc3ItcnIueTogY29uZmxpY3RzOiAxIHJlZHVjZS9yZWR1Y2UKK11dKQorQVRfQklTT05fQ0hFQ0soW1stV25vLWNvbmZsaWN0cy1yciBzci1yci55XV0sIFtbMF1dLCBbW11dLAorW1tzci1yci55OiBjb25mbGljdHM6IDEgc2hpZnQvcmVkdWNlCitdXSkKKworW2ZvciBncmFtIGluIHNyLXJyIHNyIHJyOyBkbworICBmb3Igc3JfZXhwX2kgaW4gJycgMCAxIDI7IGRvCisgICAgZm9yIHJyX2V4cF9pIGluICcnIDAgMSAyOyBkbworICAgICAgdGVzdCAteiAiJHNyX2V4cF9pIiAmJiB0ZXN0IC16ICIkcnJfZXhwX2kiICYmIGNvbnRpbnVlCisKKyAgICAgICMgQnVpbGQgZ3JhbW1hciBmaWxlLgorICAgICAgc3JfZXhwPTAKKyAgICAgIHJyX2V4cD0wCisgICAgICBmaWxlPSRncmFtCisgICAgICBkaXJlY3RpdmVzPQorICAgICAgaWYgdGVzdCAtbiAiJHNyX2V4cF9pIjsgdGhlbgorICAgICAgICBzcl9leHA9JHNyX2V4cF9pCisgICAgICAgIGZpbGU9JGZpbGUtZXhwZWN0LSRzcl9leHAKKyAgICAgICAgZGlyZWN0aXZlcz0iJWV4cGVjdCAkc3JfZXhwIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLW4gIiRycl9leHBfaSI7IHRoZW4KKyAgICAgICAgcnJfZXhwPSRycl9leHBfaQorICAgICAgICBmaWxlPSRmaWxlLWV4cGVjdC1yci0kcnJfZXhwCisgICAgICAgIGRpcmVjdGl2ZXM9IiRkaXJlY3RpdmVzICVleHBlY3QtcnIgJHJyX2V4cCIKKyAgICAgIGZpCisgICAgICBmaWxlPSRmaWxlLnkKKyAgICAgIGVjaG8gIiRkaXJlY3RpdmVzIiA+ICRmaWxlCisgICAgICBjYXQgJGdyYW0ueSA+PiAkZmlsZQorCisgICAgICAjIENvdW50IGFjdHVhbCBjb25mbGljdHMuCisgICAgICBjb25mbGljdHM9CisgICAgICBzcl9jb3VudD0wCisgICAgICBycl9jb3VudD0wCisgICAgICBpZiB0ZXN0ICRncmFtID0gc3IgfHwgdGVzdCAkZ3JhbSA9IHNyLXJyOyB0aGVuCisgICAgICAgIGNvbmZsaWN0cz0iMSBzaGlmdC9yZWR1Y2UiCisgICAgICAgIHNyX2NvdW50PTEKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICRncmFtID0gcnIgfHwgdGVzdCAkZ3JhbSA9IHNyLXJyOyB0aGVuCisgICAgICAgIGlmIHRlc3QgLW4gIiRjb25mbGljdHMiOyB0aGVuCisgICAgICAgICAgY29uZmxpY3RzPSIkY29uZmxpY3RzLCAiCisgICAgICAgIGZpCisgICAgICAgIGNvbmZsaWN0cz0iJHtjb25mbGljdHN9MSByZWR1Y2UvcmVkdWNlIgorICAgICAgICBycl9jb3VudD0xCisgICAgICBmaQorCisgICAgICAjIFJ1biB0ZXN0cy4KKyAgICAgIGlmIHRlc3QgJHNyX2NvdW50IC1lcSAkc3JfZXhwICYmIHRlc3QgJHJyX2NvdW50IC1lcSAkcnJfZXhwOyB0aGVuCisgICAgICAgIF1BVF9CSVNPTl9DSEVDSyhbWy1Xbm9uZSAkZmlsZV1dKVsKKyAgICAgICAgXUFUX0JJU09OX0NIRUNLKFtbLVdlcnJvciAkZmlsZV1dKVsKKyAgICAgIGVsc2UKKyAgICAgICAgZWNobyAiJGZpbGU6IGNvbmZsaWN0czogJGNvbmZsaWN0cyIgPiBleHBlcnIKKyAgICAgICAgaWYgdGVzdCAkc3JfY291bnQgLW5lICRzcl9leHA7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0ICRzcl9leHAgLW5lIDE7IHRoZW4gcz1zOyBlbHNlIHM9IDsgZmkKKyAgICAgICAgICBlY2hvICIkZmlsZTogZXJyb3I6IGV4cGVjdGVkICRzcl9leHAgc2hpZnQvcmVkdWNlIGNvbmZsaWN0JHMiID4+IGV4cGVycgorICAgICAgICBmaQorICAgICAgICBpZiB0ZXN0ICRycl9jb3VudCAtbmUgJHJyX2V4cDsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgJHJyX2V4cCAtbmUgMTsgdGhlbiBzPXM7IGVsc2Ugcz0gOyBmaQorICAgICAgICAgIGVjaG8gIiRmaWxlOiBlcnJvcjogZXhwZWN0ZWQgJHJyX2V4cCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0JHMiID4+IGV4cGVycgorICAgICAgICBmaQorICAgICAgICBdQVRfQklTT05fQ0hFQ0soW1stV25vbmUgJGZpbGVdXSwgW1sxXV0sIFtbXV0sIFtbZXhwZXJyXV0pWworICAgICAgICBdQVRfQklTT05fQ0hFQ0soW1stV2Vycm9yICRmaWxlXV0sIFtbMV1dLCBbW11dLCBbW2V4cGVycl1dKVsKKyAgICAgIGZpCisgICAgZG9uZQorICBkb25lCitkb25lXQorCiBBVF9DTEVBTlVQCmRpZmYgLS1naXQgYS90ZXN0cy9jeHgtdHlwZS5hdCBiL3Rlc3RzL2N4eC10eXBlLmF0CmluZGV4IGI3MTZhMWQuLmIwZTVmZGMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2N4eC10eXBlLmF0CisrKyBiL3Rlc3RzL2N4eC10eXBlLmF0CkBAIC0xLDIwICsxLDE5IEBACiAjIENoZWNraW5nIEdMUiBQYXJzaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b3Rlc3QgLSotCi0jIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBDb3B5cmlnaHQgKEMpIDIwMDItMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0jIGFueSBsYXRlciB2ZXJzaW9uLgotCisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCiAjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KKyMKICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotIyAwMjExMC0xMzAxLCBVU0EuCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCiBBVF9CQU5ORVIoW1tDKysgVHlwZSBTeW50YXggKEdMUikuXV0pCiAKQEAgLTI0LDE1ICsyMywxNSBAQAogIyBhbmQgd2l0aCBSRVNPTFZFMSBhbmQgUkVTT0xWRTIgYXMgYW5ub3RhdGlvbnMgb24gdGhlIGNvbmZsaWN0ZWQgcnVsZSBmb3IKICMgc3RtdC4gIFRoZW4gY29tcGlsZSB0aGUgcmVzdWx0LgogbTRfZGVmaW5lKFtfQVRfVEVTVF9HTFJfQ1hYVFlQRVNdLAotWwotQVRfQklTT05fT1BUSU9OX1BVU0hERUZTKFskMV0pCitbQVRfQklTT05fT1BUSU9OX1BVU0hERUZTKFslZ2xyLXBhcnNlciAkMV0pCiAKIEFUX0RBVEFfR1JBTU1BUihbdHlwZXMueV0sCiBbWy8qIFNpbXBsaWZpZWQgQysrIFR5cGUgYW5kIEV4cHJlc3Npb24gR3JhbW1hci4gICovCiAKICQxCiAKLSV7CislY29kZSByZXF1aXJlcworewogICAjaW5jbHVkZSA8c3RkaW8uaD4KICAgdW5pb24gTm9kZSB7CiAgICAgc3RydWN0IHsKQEAgLTUyLDMzICs1MSwyMiBAQAogICAgIH0gdGVybTsKICAgfTsKICAgdHlwZWRlZiB1bmlvbiBOb2RlIE5vZGU7CisgICNkZWZpbmUgWVlTVFlQRSBOb2RlICoKK30KKworJWNvZGUKK3sKICAgc3RhdGljIE5vZGUgKm5ld19udGVybSAoY2hhciBjb25zdCAqLCBOb2RlICosIE5vZGUgKiwgTm9kZSAqKTsKICAgc3RhdGljIE5vZGUgKm5ld190ZXJtIChjaGFyICopOwogICBzdGF0aWMgdm9pZCBmcmVlX25vZGUgKE5vZGUgKik7CiAgIHN0YXRpYyBjaGFyICpub2RlX3RvX3N0cmluZyAoTm9kZSAqKTsKLSAgI2RlZmluZSBZWVNUWVBFIE5vZGUgKgogXW00X2JtYXRjaChbJDJdLCBbc3RtdE1lcmdlXSwKIFsgc3RhdGljIFlZU1RZUEUgc3RtdE1lcmdlIChZWVNUWVBFIHgwLCBZWVNUWVBFIHgxKTtdKVsKICAgI2RlZmluZSBZWUlOSVRERVBUSCAxMAogICAjZGVmaW5lIFlZU1RBQ0tFWFBBTkRBQkxFIDEKLSAgc3RydWN0IFlZTFRZUEU7Ci0jaWYgWVlQVVJFCi0jIGlmIFlZTFNQX05FRURFRAotIyAgZGVmaW5lIExFWF9QQVJBTUVURVJTIFlZU1RZUEUgKmx2YWxwLCBzdHJ1Y3QgWVlMVFlQRSAqbGxvY3AKLSMgIGRlZmluZSBFUlJPUl9QQVJBTUVURVJTIHN0cnVjdCBZWUxUWVBFICpsbG9jcCwgY2hhciBjb25zdCAqcwotIyBlbHNlCi0jICBkZWZpbmUgTEVYX1BBUkFNRVRFUlMgWVlTVFlQRSAqbHZhbHAKLSMgZW5kaWYKLSNlbmRpZgotI2lmbmRlZiBMRVhfUEFSQU1FVEVSUwotIyBkZWZpbmUgTEVYX1BBUkFNRVRFUlMgdm9pZAotI2VuZGlmCi0jaWZuZGVmIEVSUk9SX1BBUkFNRVRFUlMKLSMgZGVmaW5lIEVSUk9SX1BBUkFNRVRFUlMgY2hhciBjb25zdCAqcwotI2VuZGlmCi0gIGludCB5eWxleCAoTEVYX1BBUkFNRVRFUlMpOwotICB2b2lkIHl5ZXJyb3IgKEVSUk9SX1BBUkFNRVRFUlMpOwotJX0KKyAgXUFUX1lZRVJST1JfREVDTEFSRVsKKyAgXUFUX1lZTEVYX0RFQ0xBUkVbCit9CiAKICV0b2tlbiBUWVBFTkFNRSBJRAogCkBAIC05MywzNSArODEsMzUgQEAKIAogcHJvZyA6CiAgICAgIHwgcHJvZyBzdG10ICAgewotCQkJY2hhciAqb3V0cHV0O11BVF9MT0NBVElPTl9JRihbCi0JCQlwcmludGYgKCIlZC4lZC0lZC4lZDogIiwKLQkJCSAgICAgQDIuZmlyc3RfbGluZSwgQDIuZmlyc3RfY29sdW1uLAotCQkJICAgICBAMi5sYXN0X2xpbmUsIEAyLmxhc3RfY29sdW1uKTtdKVsKLQkJCW91dHB1dCA9IG5vZGVfdG9fc3RyaW5nIChdJFsyKTsKLQkJCXByaW50ZiAoIiVzXG4iLCBvdXRwdXQpOwotCQkJZnJlZSAob3V0cHV0KTsKLQkJCWZyZWVfbm9kZSAoXSRbMik7Ci0JCSAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm91dHB1dDtdQVRfTE9DQVRJT05fSUYoWworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiJWQuJWQtJWQuJWQ6ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAyLmZpcnN0X2xpbmUsIEAyLmZpcnN0X2NvbHVtbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDIubGFzdF9saW5lLCBAMi5sYXN0X2NvbHVtbik7XSlbCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBub2RlX3RvX3N0cmluZyAoXSRbMik7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIlc1xuIiwgb3V0cHV0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUgKG91dHB1dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVlX25vZGUgKF0kWzIpOworICAgICAgICAgICAgICAgICAgIH0KICAgICAgOwogCi1zdG10IDogZXhwciAnOycgICQyCXsgJCQgPSBdJFsxOyB9CitzdG10IDogZXhwciAnOycgICQyICAgICB7ICQkID0gXSRbMTsgfQogICAgICB8IGRlY2wgICAgICAkMwotICAgICB8IGVycm9yICc7Jwl7ICQkID0gbmV3X250ZXJtICgiPGVycm9yPiIsIDAsIDAsIDApOyB9Ci0gICAgIHwgJ0AnCQl7IFlZQUNDRVBUOyB9CisgICAgIHwgZXJyb3IgJzsnICAgICAgICB7ICQkID0gbmV3X250ZXJtICgiPGVycm9yPiIsIFlZX05VTEwsIFlZX05VTEwsIFlZX05VTEwpOyB9CisgICAgIHwgJ0AnICAgICAgICAgICAgICB7IFlZQUNDRVBUOyB9CiAgICAgIDsKIAogZXhwciA6IElECiAgICAgIHwgVFlQRU5BTUUgJygnIGV4cHIgJyknCi0JCQl7ICQkID0gbmV3X250ZXJtICgiPGNhc3Q+KCVzLCVzKSIsIF0kWzMsIF0kWzEsIDApOyB9Ci0gICAgIHwgZXhwciAnKycgZXhwcgl7ICQkID0gbmV3X250ZXJtICgiKyglcywlcykiLCBdJFsxLCBdJFszLCAwKTsgfQotICAgICB8IGV4cHIgJz0nIGV4cHIgICAgeyAkJCA9IG5ld19udGVybSAoIj0oJXMsJXMpIiwgXSRbMSwgXSRbMywgMCk7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBuZXdfbnRlcm0gKCI8Y2FzdD4oJXMsJXMpIiwgXSRbMywgXSRbMSwgWVlfTlVMTCk7IH0KKyAgICAgfCBleHByICcrJyBleHByICAgIHsgJCQgPSBuZXdfbnRlcm0gKCIrKCVzLCVzKSIsIF0kWzEsIF0kWzMsIFlZX05VTEwpOyB9CisgICAgIHwgZXhwciAnPScgZXhwciAgICB7ICQkID0gbmV3X250ZXJtICgiPSglcywlcykiLCBdJFsxLCBdJFszLCBZWV9OVUxMKTsgfQogICAgICA7CiAKIGRlY2wgOiBUWVBFTkFNRSBkZWNsYXJhdG9yICc7JwotCQkJeyAkJCA9IG5ld19udGVybSAoIjxkZWNsYXJlPiglcywlcykiLCBdJFsxLCBdJFsyLCAwKTsgfQorICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ld19udGVybSAoIjxkZWNsYXJlPiglcywlcykiLCBdJFsxLCBdJFsyLCBZWV9OVUxMKTsgfQogICAgICB8IFRZUEVOQU1FIGRlY2xhcmF0b3IgJz0nIGV4cHIgJzsnCi0JCQl7ICQkID0gbmV3X250ZXJtICgiPGluaXQtZGVjbGFyZT4oJXMsJXMsJXMpIiwgXSRbMSwKLQkJCQkJICBdJFsyLCBdJFs0KTsgfQorICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ld19udGVybSAoIjxpbml0LWRlY2xhcmU+KCVzLCVzLCVzKSIsIF0kWzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdJFsyLCBdJFs0KTsgfQogICAgICA7CiAKIGRlY2xhcmF0b3IgOiBJRApAQCAtMTM0LDE5ICsxMjIsMjAgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KIAogaW50CiBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7Ci0gIGlmIChhcmdjICE9IDIpCi0gICAgYWJvcnQgKCk7CisgIGFzc2VydCAoYXJnYyA9PSAyKTsKICAgaWYgKCFmcmVvcGVuIChhcmd2WzFdLCAiciIsIHN0ZGluKSkKICAgICByZXR1cm4gMzsKICAgcmV0dXJuIHl5cGFyc2UgKCk7CiB9CiAKLWludAoteXlsZXggKExFWF9QQVJBTUVURVJTKQorXUFUX1lZRVJST1JfREVGSU5FWworCitdQVRfWVlMRVhfUFJPVE9UWVBFWwogewogICBjaGFyIGJ1ZmZlclsyNTZdOwogICBpbnQgYzsKQEAgLTE2Myw3MyArMTUyLDU4IEBACiAKICAgd2hpbGUgKDEpCiAgICAgeworICAgICAgYXNzZXJ0ICghZmVvZiAoc3RkaW4pKTsKICAgICAgIGMgPSBnZXRjaGFyICgpOwogICAgICAgc3dpdGNoIChjKQotCXsKLQljYXNlIEVPRjoKLQkgIHJldHVybiAwOwotCWNhc2UgJ1x0JzoKLQkgIGNvbE51bSA9IChjb2xOdW0gKyA3KSAmIH43OwotCSAgYnJlYWs7Ci0JY2FzZSAnICc6IGNhc2UgJ1xmJzoKLQkgIGNvbE51bSArPSAxOwotCSAgYnJlYWs7Ci0JY2FzZSAnXG4nOgotCSAgbGluZU51bSArPSAxOwotCSAgY29sTnVtID0gMDsKLQkgIGJyZWFrOwotCWRlZmF1bHQ6Ci0JICB7Ci0JICAgIGludCB0b2s7Ci0jaWYgWVlMU1BfTkVFREVECi0JICAgIHl5bGxvYy5maXJzdF9saW5lID0geXlsbG9jLmxhc3RfbGluZSA9IGxpbmVOdW07Ci0JICAgIHl5bGxvYy5maXJzdF9jb2x1bW4gPSBjb2xOdW07Ci0jZW5kaWYKLQkgICAgaWYgKGlzYWxwaGEgKGMpKQotCSAgICAgIHsKLQkJaSA9IDA7CisgICAgICAgIHsKKyAgICAgICAgY2FzZSBFT0Y6CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgJ1x0JzoKKyAgICAgICAgICBjb2xOdW0gPSAoY29sTnVtICsgNykgJiB+NzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnICc6IGNhc2UgJ1xmJzoKKyAgICAgICAgICBjb2xOdW0gKz0gMTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnXG4nOgorICAgICAgICAgIGxpbmVOdW0gKz0gMTsKKyAgICAgICAgICBjb2xOdW0gPSAwOworICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHsKKyAgICAgICAgICAgIGludCB0b2s7XUFUX0xPQ0FUSU9OX0lGKFtbCisgICAgICAgICAgICB5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGxvYy5sYXN0X2xpbmUgPSBsaW5lTnVtOworICAgICAgICAgICAgeXlsbG9jLmZpcnN0X2NvbHVtbiA9IGNvbE51bTtdXSlbCisgICAgICAgICAgICBpZiAoaXNhbHBoYSAoYykpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpID0gMDsKIAotCQlkbwotCQkgIHsKLQkJICAgIGJ1ZmZlcltpKytdID0gYzsKLQkJICAgIGNvbE51bSArPSAxOwotCQkgICAgaWYgKGkgPT0gc2l6ZW9mIGJ1ZmZlciAtIDEpCi0JCSAgICAgIGFib3J0ICgpOwotCQkgICAgYyA9IGdldGNoYXIgKCk7Ci0JCSAgfQotCQl3aGlsZSAoaXNhbG51bSAoYykgfHwgYyA9PSAnXycpOworICAgICAgICAgICAgICAgIGRvCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpKytdID0gYzsKKyAgICAgICAgICAgICAgICAgICAgY29sTnVtICs9IDE7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCAoaSAhPSBzaXplb2YgYnVmZmVyIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIGMgPSBnZXRjaGFyICgpOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdoaWxlIChpc2FsbnVtIChjKSB8fCBjID09ICdfJyk7CiAKLQkJdW5nZXRjIChjLCBzdGRpbik7Ci0JCWJ1ZmZlcltpKytdID0gMDsKLQkJdG9rID0gaXN1cHBlciAoKHVuc2lnbmVkIGNoYXIpIGJ1ZmZlclswXSkgPyBUWVBFTkFNRSA6IElEOwotCQl5eWx2YWwgPSBuZXdfdGVybSAoc3RyY3B5ICgoY2hhciAqKSBtYWxsb2MgKGkpLCBidWZmZXIpKTsKLQkgICAgICB9Ci0JICAgIGVsc2UKLQkgICAgICB7Ci0JCWNvbE51bSArPSAxOwotCQl0b2sgPSBjOwotCQl5eWx2YWwgPSAwOwotCSAgICAgIH0KLSNpZiBZWUxTUF9ORUVERUQKLQkgICAgeXlsbG9jLmxhc3RfY29sdW1uID0gY29sTnVtLTE7Ci0jZW5kaWYKLQkgICAgcmV0dXJuIHRvazsKLQkgIH0KLQl9CisgICAgICAgICAgICAgICAgdW5nZXRjIChjLCBzdGRpbik7CisgICAgICAgICAgICAgICAgYnVmZmVyW2krK10gPSAwOworICAgICAgICAgICAgICAgIHRvayA9IGlzdXBwZXIgKCh1bnNpZ25lZCBjaGFyKSBidWZmZXJbMF0pID8gVFlQRU5BTUUgOiBJRDsKKyAgICAgICAgICAgICAgICB5eWx2YWwgPSBuZXdfdGVybSAoc3RyY3B5ICgoY2hhciAqKSBtYWxsb2MgKGkpLCBidWZmZXIpKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29sTnVtICs9IDE7CisgICAgICAgICAgICAgICAgdG9rID0gYzsKKyAgICAgICAgICAgICAgICB5eWx2YWwgPSBZWV9OVUxMOworICAgICAgICAgICAgICB9XUFUX0xPQ0FUSU9OX0lGKFtbCisgICAgICAgICAgICB5eWxsb2MubGFzdF9jb2x1bW4gPSBjb2xOdW0tMTtdXSlbCisgICAgICAgICAgICByZXR1cm4gdG9rOworICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZAoteXllcnJvciAoRVJST1JfUEFSQU1FVEVSUykKLXsKLSNpZiBZWVBVUkUgJiYgWVlMU1BfTkVFREVECi0gIC8qIFBhY2lmeSBHQ0MgYnkgdXNpbmcgbGxvY3AuICAqLwotICBpZiAoISBsbG9jcCkKLSAgICBhYm9ydCAoKTsKLSNlbmRpZgotICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgcyk7Ci19Ci0KIHN0YXRpYyBOb2RlICoKIG5ld19udGVybSAoY2hhciBjb25zdCAqZm9ybSwgTm9kZSAqY2hpbGQwLCBOb2RlICpjaGlsZDEsIE5vZGUgKmNoaWxkMikKIHsKQEAgLTI5Nyw3ICsyNzEsNyBAQAogICAgICAgY2hpbGQxID0gbm9kZV90b19zdHJpbmcgKG5vZGUtPm50ZXJtLmNoaWxkcmVuWzFdKTsKICAgICAgIGNoaWxkMiA9IG5vZGVfdG9fc3RyaW5nIChub2RlLT5udGVybS5jaGlsZHJlblsyXSk7CiAgICAgICBidWZmZXIgPSAoY2hhciAqKSBtYWxsb2MgKHN0cmxlbiAobm9kZS0+bnRlcm0uZm9ybSkgKyBzdHJsZW4gKGNoaWxkMCkKLQkJCQkrIHN0cmxlbiAoY2hpbGQxKSArIHN0cmxlbiAoY2hpbGQyKSArIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHN0cmxlbiAoY2hpbGQxKSArIHN0cmxlbiAoY2hpbGQyKSArIDEpOwogICAgICAgc3ByaW50ZiAoYnVmZmVyLCBub2RlLT5udGVybS5mb3JtLCBjaGlsZDAsIGNoaWxkMSwgY2hpbGQyKTsKICAgICAgIGZyZWUgKGNoaWxkMCk7CiAgICAgICBmcmVlIChjaGlsZDEpOwpAQCAtMzEzLDcgKzI4Nyw3IEBACiBbW3N0YXRpYyBZWVNUWVBFCiBzdG10TWVyZ2UgKFlZU1RZUEUgeDAsIFlZU1RZUEUgeDEpCiB7Ci0gIHJldHVybiBuZXdfbnRlcm0gKCI8T1I+KCVzLCVzKSIsIHgwLCB4MSwgMCk7CisgIHJldHVybiBuZXdfbnRlcm0gKCI8T1I+KCVzLCVzKSIsIHgwLCB4MSwgWVlfTlVMTCk7CiB9CiBdXSkKICkKQEAgLTM0NCw3ICszMTgsNyBAQAogVGhpcyBpcyB0b3RhbCBnYXJiYWdlLCBidXQgaXQgc2hvdWxkIGJlIGlnbm9yZWQuCiBdXSkKIAotQVRfQ0hFQ0soW2Jpc29uIC1vIHR5cGVzLmMgdHlwZXMueV0sIDAsIFtdLCBpZ25vcmUpCitBVF9CSVNPTl9DSEVDSyhbLW8gdHlwZXMuYyB0eXBlcy55XSwgMCwgW10sIGlnbm9yZSkKIEFUX0NPTVBJTEUoW3R5cGVzXSkKIEFUX0JJU09OX09QVElPTl9QT1BERUZTCiBdKQpAQCAtNDAxLDcxICszNzUsNzkgQEAKIFtbc3ludGF4IGVycm9yCiBdXSkKIAorbTRfZGVmaW5lKFtfQVRfR0xSX1NUREVSUl9XSVRIX0xPQ10sCitbWzE3LjU6IHN5bnRheCBlcnJvcgorXV0pCisKIG00X2RlZmluZShbX0FUX1ZFUkJPU0VfR0xSX1NUREVSUl0sCiBbW3N5bnRheCBlcnJvciwgdW5leHBlY3RlZCBJRCwgZXhwZWN0aW5nICc9JyBvciAnKycgb3IgJyknCiBdXSkKIAorbTRfZGVmaW5lKFtfQVRfVkVSQk9TRV9HTFJfU1RERVJSX1dJVEhfTE9DXSwKK1tbMTcuNTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIElELCBleHBlY3RpbmcgJz0nIG9yICcrJyBvciAnKScKK11dKQorCiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAjIyBDb21waWxlIHRoZSBncmFtbWFyIGRlc2NyaWJlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gICMjCiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAKIEFUX1NFVFVQKFtHTFI6IFJlc29sdmUgYW1iaWd1aXR5LCBpbXB1cmUsIG5vIGxvY2F0aW9uc10pCiBfQVRfVEVTVF9HTFJfQ1hYVFlQRVMoW10sCi0JCSAgICAgIFslZHByZWMgMV0sIFslZHByZWMgMl0pCisgICAgICAgICAgICAgICAgICAgICAgWyVkcHJlYyAxXSwgWyVkcHJlYyAyXSkKIEFUX1BBUlNFUl9DSEVDSyhbWy4vdHlwZXMgdGVzdC1pbnB1dF1dLCAwLAotCQlfQVRfUkVTT0xWRURfR0xSX09VVFBVVCwgX0FUX0dMUl9TVERFUlIpCisgICAgICAgICAgICAgICAgW19BVF9SRVNPTFZFRF9HTFJfT1VUUFVUXSwgW19BVF9HTFJfU1RERVJSXSkKIEFUX0NMRUFOVVAKIAogQVRfU0VUVVAoW0dMUjogUmVzb2x2ZSBhbWJpZ3VpdHksIGltcHVyZSwgbG9jYXRpb25zXSkKIF9BVF9URVNUX0dMUl9DWFhUWVBFUyhbJWxvY2F0aW9uc10sWyVkcHJlYyAxXSxbJWRwcmVjIDJdKQogQVRfUEFSU0VSX0NIRUNLKFtbLi90eXBlcyB0ZXN0LWlucHV0XV0sIDAsCi0JCV9BVF9SRVNPTFZFRF9HTFJfT1VUUFVUX1dJVEhfTE9DLCBfQVRfR0xSX1NUREVSUikKKyAgICAgICAgICAgICAgICBbX0FUX1JFU09MVkVEX0dMUl9PVVRQVVRfV0lUSF9MT0NdLCBbX0FUX0dMUl9TVERFUlJfV0lUSF9MT0NdKQogQVRfQ0xFQU5VUAogCiBBVF9TRVRVUChbR0xSOiBSZXNvbHZlIGFtYmlndWl0eSwgcHVyZSwgbm8gbG9jYXRpb25zXSkKLV9BVF9URVNUX0dMUl9DWFhUWVBFUyhbJXB1cmUtcGFyc2VyXSwKLQkJICAgICAgWyVkcHJlYyAxXSwgWyVkcHJlYyAyXSkKK19BVF9URVNUX0dMUl9DWFhUWVBFUyhbJWRlZmluZSBhcGkucHVyZV0sCisgICAgICAgICAgICAgICAgICAgICAgWyVkcHJlYyAxXSwgWyVkcHJlYyAyXSkKIEFUX1BBUlNFUl9DSEVDSyhbWy4vdHlwZXMgdGVzdC1pbnB1dF1dLCAwLAotCQlfQVRfUkVTT0xWRURfR0xSX09VVFBVVCwgX0FUX0dMUl9TVERFUlIpCisgICAgICAgICAgICAgICAgW19BVF9SRVNPTFZFRF9HTFJfT1VUUFVUXSwgW19BVF9HTFJfU1RERVJSXSkKIEFUX0NMRUFOVVAKIAogQVRfU0VUVVAoW0dMUjogUmVzb2x2ZSBhbWJpZ3VpdHksIHB1cmUsIGxvY2F0aW9uc10pCi1fQVRfVEVTVF9HTFJfQ1hYVFlQRVMoWyVwdXJlLXBhcnNlciAlbG9jYXRpb25zXSwKLQkJICAgICAgWyVkcHJlYyAxXSwgWyVkcHJlYyAyXSkKK19BVF9URVNUX0dMUl9DWFhUWVBFUyhbJWRlZmluZSBhcGkucHVyZSAlbG9jYXRpb25zXSwKKyAgICAgICAgICAgICAgICAgICAgICBbJWRwcmVjIDFdLCBbJWRwcmVjIDJdKQogQVRfUEFSU0VSX0NIRUNLKFtbLi90eXBlcyB0ZXN0LWlucHV0XV0sIDAsCi0JCV9BVF9SRVNPTFZFRF9HTFJfT1VUUFVUX1dJVEhfTE9DLCBfQVRfR0xSX1NUREVSUikKKyAgICAgICAgICAgICAgICBbX0FUX1JFU09MVkVEX0dMUl9PVVRQVVRfV0lUSF9MT0NdLCBbX0FUX0dMUl9TVERFUlJfV0lUSF9MT0NdKQogQVRfQ0xFQU5VUAogCiBBVF9TRVRVUChbR0xSOiBNZXJnZSBjb25mbGljdGluZyBwYXJzZXMsIGltcHVyZSwgbm8gbG9jYXRpb25zXSkKIF9BVF9URVNUX0dMUl9DWFhUWVBFUyhbXSwKLQkJICAgICAgWyVtZXJnZSA8c3RtdE1lcmdlPl0sIFslbWVyZ2UgPHN0bXRNZXJnZT5dKQorICAgICAgICAgICAgICAgICAgICAgIFslbWVyZ2UgPHN0bXRNZXJnZT5dLCBbJW1lcmdlIDxzdG10TWVyZ2U+XSkKIEFUX1BBUlNFUl9DSEVDSyhbWy4vdHlwZXMgdGVzdC1pbnB1dF1dLCAwLAotCQlfQVRfQU1CSUdfR0xSX09VVFBVVCwgX0FUX0dMUl9TVERFUlIpCisgICAgICAgICAgICAgICAgW19BVF9BTUJJR19HTFJfT1VUUFVUXSwgW19BVF9HTFJfU1RERVJSXSkKIEFUX0NMRUFOVVAKIAogQVRfU0VUVVAoW0dMUjogTWVyZ2UgY29uZmxpY3RpbmcgcGFyc2VzLCBpbXB1cmUsIGxvY2F0aW9uc10pCiBfQVRfVEVTVF9HTFJfQ1hYVFlQRVMoWyVsb2NhdGlvbnNdLAotCQkgICAgICBbJW1lcmdlIDxzdG10TWVyZ2U+XSwgWyVtZXJnZSA8c3RtdE1lcmdlPl0pCisgICAgICAgICAgICAgICAgICAgICAgWyVtZXJnZSA8c3RtdE1lcmdlPl0sIFslbWVyZ2UgPHN0bXRNZXJnZT5dKQogQVRfUEFSU0VSX0NIRUNLKFtbLi90eXBlcyB0ZXN0LWlucHV0XV0sIDAsCi0JCV9BVF9BTUJJR19HTFJfT1VUUFVUX1dJVEhfTE9DLCBfQVRfR0xSX1NUREVSUikKKyAgICAgICAgICAgICAgICBbX0FUX0FNQklHX0dMUl9PVVRQVVRfV0lUSF9MT0NdLCBbX0FUX0dMUl9TVERFUlJfV0lUSF9MT0NdKQogQVRfQ0xFQU5VUAogCiBBVF9TRVRVUChbR0xSOiBNZXJnZSBjb25mbGljdGluZyBwYXJzZXMsIHB1cmUsIG5vIGxvY2F0aW9uc10pCi1fQVRfVEVTVF9HTFJfQ1hYVFlQRVMoWyVwdXJlLXBhcnNlcl0sCi0JCSAgICAgIFslbWVyZ2UgPHN0bXRNZXJnZT5dLCBbJW1lcmdlIDxzdG10TWVyZ2U+XSkKK19BVF9URVNUX0dMUl9DWFhUWVBFUyhbJWRlZmluZSBhcGkucHVyZV0sCisgICAgICAgICAgICAgICAgICAgICAgWyVtZXJnZSA8c3RtdE1lcmdlPl0sIFslbWVyZ2UgPHN0bXRNZXJnZT5dKQogQVRfUEFSU0VSX0NIRUNLKFtbLi90eXBlcyB0ZXN0LWlucHV0XV0sIDAsCi0JCV9BVF9BTUJJR19HTFJfT1VUUFVULCBfQVRfR0xSX1NUREVSUikKKyAgICAgICAgICAgICAgICBbX0FUX0FNQklHX0dMUl9PVVRQVVRdLCBbX0FUX0dMUl9TVERFUlJdKQogQVRfQ0xFQU5VUAogQVRfU0VUVVAoW0dMUjogTWVyZ2UgY29uZmxpY3RpbmcgcGFyc2VzLCBwdXJlLCBsb2NhdGlvbnNdKQotX0FUX1RFU1RfR0xSX0NYWFRZUEVTKFslcHVyZS1wYXJzZXIgJWxvY2F0aW9uc10sCi0JCSAgICAgIFslbWVyZ2UgPHN0bXRNZXJnZT5dLFslbWVyZ2UgPHN0bXRNZXJnZT5dKQorX0FUX1RFU1RfR0xSX0NYWFRZUEVTKFslZGVmaW5lIGFwaS5wdXJlICVsb2NhdGlvbnNdLAorICAgICAgICAgICAgICAgICAgICAgIFslbWVyZ2UgPHN0bXRNZXJnZT5dLFslbWVyZ2UgPHN0bXRNZXJnZT5dKQogQVRfUEFSU0VSX0NIRUNLKFtbLi90eXBlcyB0ZXN0LWlucHV0XV0sIDAsCi0JCV9BVF9BTUJJR19HTFJfT1VUUFVUX1dJVEhfTE9DLCBfQVRfR0xSX1NUREVSUikKKyAgICAgICAgICAgICAgICBbX0FUX0FNQklHX0dMUl9PVVRQVVRfV0lUSF9MT0NdLCBbX0FUX0dMUl9TVERFUlJfV0lUSF9MT0NdKQogQVRfQ0xFQU5VUAogCiBBVF9TRVRVUChbR0xSOiBWZXJib3NlIG1lc3NhZ2VzLCByZXNvbHZlIGFtYmlndWl0eSwgaW1wdXJlLCBubyBsb2NhdGlvbnNdKQogX0FUX1RFU1RfR0xSX0NYWFRZUEVTKFslZXJyb3ItdmVyYm9zZV0sCi0JCSAgICAgIFslbWVyZ2UgPHN0bXRNZXJnZT5dLCBbJW1lcmdlIDxzdG10TWVyZ2U+XSkKKyAgICAgICAgICAgICAgICAgICAgICBbJW1lcmdlIDxzdG10TWVyZ2U+XSwgWyVtZXJnZSA8c3RtdE1lcmdlPl0pCiBBVF9QQVJTRVJfQ0hFQ0soW1suL3R5cGVzIHRlc3QtaW5wdXRdXSwgMCwKLQkJX0FUX0FNQklHX0dMUl9PVVRQVVQsIF9BVF9WRVJCT1NFX0dMUl9TVERFUlIpCisgICAgICAgICAgICAgICAgW19BVF9BTUJJR19HTFJfT1VUUFVUXSwgW19BVF9WRVJCT1NFX0dMUl9TVERFUlJdKQogQVRfQ0xFQU5VUApkaWZmIC0tZ2l0IGEvdGVzdHMvZXhpc3RpbmcuYXQgYi90ZXN0cy9leGlzdGluZy5hdAppbmRleCA5ZGI2MjVhLi4xYjZmYTRkIDEwMDY0NAotLS0gYS90ZXN0cy9leGlzdGluZy5hdAorKysgYi90ZXN0cy9leGlzdGluZy5hdApAQCAtMSwzOSArMSw4MyBAQAogIyBFeGVyY2lzaW5nIEJpc29uIG9uIGFjdHVhbCBncmFtbWFycy4gICAgICAgICAgICAgICAgICAgLSotIEF1dG90ZXN0IC0qLQogCi0jIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MCwgMTk5MSwgMTk5MiwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNQotIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTg5LTE5OTIsIDIwMDAtMjAwNSwgMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLgogCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSMgYW55IGxhdGVyIHZlcnNpb24uCi0KKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKICMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQorIwogIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0jIDAyMTEwLTEzMDEsIFVTQS4KKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAKIEFUX0JBTk5FUihbW0V4aXN0aW5nIEdyYW1tYXJzLl1dKQotIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIEdOVSBBV0sgR3JhbW1hci4gICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLSAjIwogCi1BVF9TRVRVUChbR05VIEFXSyBHcmFtbWFyXSkKKyMgQVRfVEVTVF9FWElTVElOR19HUkFNTUFSKERFU0NSSVBUSU9OLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgREVDTFMsIEdSQU1NQVIsIElOUFVULAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgQklTT04tU1RERVJSLCBMQVNULVNUQVRFLCBMQUxSMS1ESUZGLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgW09USEVSLUNIRUNLU10sCisjICAgICAgICAgICAgICAgICAgICAgICAgICBbUEFSU0VSLUVYSVQtVkFMVUVdLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgW1BBUlNFUi1TVERPVVRdLCBbUEFSU0VSLVNUREVSUl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW0FUX1RFU1RfRVhJU1RJTkdfR1JBTU1BUl0sIFtfQVRfVEVTVF9FWElTVElOR19HUkFNTUFSKFskXVsxXSwgJEApXSkKKworbTRfZGVmaW5lKFtfQVRfVEVTVF9FWElTVElOR19HUkFNTUFSXSwKK1sKK2RubCBTZWUgaG93IHRoZSBwYXJzZXIgdGFibGVzIGhhdmUgY2hhbmdlZC4gIEFzIHRoZSAub3V0cHV0IGZvcm1hdCBldm9sdmVzLCB0aGUKK2RubCBkaWZmIGNvbW1lbnRzIHdpdGggbGluZSBudW1iZXJzIG1pZ2h0IGJlIGEgcGFpbiB0byBtYWludGFpbi4gIFdoZW4gdGhhdAorZG5sIHRpbWUgY29tZXMsIGp1c3QgdXNlIHNlZCB0byBkcm9wIHRoZSBsaW5lIG51bWJlcnMuICBGb3Igbm93LCBhcyBMUigxKQorZG5sIHN1cHBvcnQgaXMgcmFwaWRseSBldm9sdmluZywgbGV0J3Mga2VlcCB0aGF0IGluZm9ybWF0aW9uIHRvIGJlIGNhcmVmdWwuCitkbmwgSG93ZXZlciwgd2UgZG9uJ3QgZG8gZGlmZnMgZm9yIGNhbm9uaWNhbCBMUigxKSBiZWNhdXNlIHRoZSBkaWZmIGlzIGh1Z2UuCittNF9wdXNoZGVmKFtBVF9MQUxSMV9ESUZGX0NIRUNLXSwKK1tkbmwgV2UgbmVlZCBkaWZmIC11LCB3aGljaCBpcyBub3QgcG9ydGFibGUuCitBVF9DSEVDSyhbZGlmZiAtdSAvZGV2L251bGwgL2Rldi9udWxsIHx8IGV4aXQgNzddLCBbMF0sIFtpZ25vcmVdKQorCitBVF9DSEVDSyhbW3NlZCAncy9eJWRlZmluZSBsci50eXBlIC4qJC8vJyBpbnB1dC55ID4gaW5wdXQtbGFsci55XV0pCitBVF9CSVNPTl9DSEVDSyhbWy0tcmVwb3J0PWFsbCBpbnB1dC1sYWxyLnldXSwgW1swXV0sIFtpZ25vcmVdLCBbaWdub3JlXSkKK0FUX0NIRUNLKFtbZGlmZiAtdSBpbnB1dC1sYWxyLm91dHB1dCBpbnB1dC5vdXRwdXQgXAorICAgICAgICAgICB8IHNlZCAtbiAnL15AQC8sJHAnIHwgc2VkICdzL14gJC8vJ11dLAorICAgICAgICAgW1swXV0sIFskMV0pXSkKKworQVRfVEVTVF9UQUJMRVNfQU5EX1BBUlNFKFskMls6IExBTFIoMSldXSwgW1tMQUxSXV0sIFtbbGFzdC1zdGF0ZV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtbJWRlZmluZSBsci50eXBlIGxhbHIKK10kM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgWyQ0XSwgWyQ1XSwgWyQ2XSwgWyQ3XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbQVRfTEFMUjFfRElGRl9DSEVDSyhbJDhdKSQ5XSwgWyQxMF0sIFskMTFdLCBbJDEyXSkKK0FUX1RFU1RfVEFCTEVTX0FORF9QQVJTRShbJDJbOiBJRUxSKDEpXV0sIFtbSUVMUl1dLCBbW2xhc3Qtc3RhdGVdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbWyVkZWZpbmUgbHIudHlwZSBpZWxyCitdJDNdLAorICAgICAgICAgICAgICAgICAgICAgICAgIFskNF0sIFskNV0sIFskNl0sIFskN10sCisgICAgICAgICAgICAgICAgICAgICAgICAgW0FUX0xBTFIxX0RJRkZfQ0hFQ0soWyQ4XSkkOV0sIFskMTBdLCBbJDExXSwgWyQxMl0pCitBVF9URVNUX1RBQkxFU19BTkRfUEFSU0UoWyQyWzogQ2Fub25pY2FsIExSKDEpXV0sIFtbY2Fub25pY2FsIExSXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgW1tsYXN0LXN0YXRlLG5vLXhtbF1dLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtbJWRlZmluZSBsci50eXBlIGNhbm9uaWNhbC1scgorXSQzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJDRdLCBbJDVdLCBbJDZdLCBbJDddLAorICAgICAgICAgICAgICAgICAgICAgICAgIFskOV0sIFskMTBdLCBbJDExXSwgWyQxMl0pCisKK200X3BvcGRlZihbQVRfTEFMUjFfRElGRl9DSEVDS10pCitdKQorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEdOVSBBV0sgMy4xLjAgR3JhbW1hci4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogCiAjIFdlIGhhdmUgYmVlbiBjYXJlZnVsIHRvIHN0cmlwIGFsbCB0aGUgYWN0aW9ucyBleGNlcHRzIHRoZQotIyBtaWQtcnVsZSBhY3Rpb25zLiAgV2UgcmVseSBvbiAlZXhwZWN0IHRvIGNoZWNrIHRoYXQgdGhlcmUgYXJlCi0jIGluZGVlZCA2NSBTUiBjb25mbGljdHMuCisjIG1pZC1ydWxlIGFjdGlvbnMuCiAjCi0jIEJpc29uIHdhcyBvbmNlIHdyb25nLCBkdWUgdG8gYW4gaW5jb3JyZWN0IGNvbXB1dGF0aW9uIG9mIG51bGxhYmxlLgotIyBJdCByZXBvcnRlZCA0ODUgU1IgY29uZmxpY3RzIQorIyBUaGVyZSBhcmUgNjUgU1IgY29uZmxpY3RzLiAgQmlzb24gd2FzIG9uY2Ugd3JvbmcsIGR1ZSB0byBhbiBpbmNvcnJlY3QKKyMgY29tcHV0YXRpb24gb2YgbnVsbGFibGUuICBJdCByZXBvcnRlZCA0ODUgU1IgY29uZmxpY3RzIQogCi1BVF9EQVRBKFtbaW5wdXQueV1dLAotW1slZXhwZWN0IDY1CitBVF9URVNUX0VYSVNUSU5HX0dSQU1NQVIoW1tHTlUgQVdLIDMuMS4wIEdyYW1tYXJdXSwKK1tbJWVycm9yLXZlcmJvc2UKIAogJXRva2VuIEZVTkNfQ0FMTCBOQU1FIFJFR0VYUAogJXRva2VuIEVSUk9SCkBAIC02OCw4ICsxMTIsOCBAQAogJWxlZnQgSU5DUkVNRU5UIERFQ1JFTUVOVAogJWxlZnQgJyQnCiAlbGVmdCAnKCcgJyknCi0lJQotCitdXSwKK1tbCiBzdGFydAogCTogb3B0X25scyBwcm9ncmFtIG9wdF9ubHMKIAk7CkBAIC0zNDYsMzEgKzM5MCwzOTggQEAKIAogY29tbWEJOiAnLCcgb3B0X25scwogCTsKK11dLAogCi0lJQotXV0pCitkbmwgSU5QVVQKK2RubAorZG5sIEZvciBleGFtcGxlLCBpbiBBV0s6CitkbmwKK2RubCAgIGdldGxpbmUgJCE0KjA7CitkbmwKK2RubCBUaGUgZ3JhbW1hciBiZWxvdyAoZnJvbSBHTlUgQVdLIDMuMS4wKSB1c2luZyBjYW5vbmljYWwgTFIoMSkgb3IgSUVMUigxKQorZG5sIHBhcnNlcyBpdCBhczoKK2RubAorZG5sICAgZ2V0bGluZSAkISg0KjApOworZG5sCitkbmwgVGhhdCBpcywgdGhleSBzaGlmdCBgKicgaW1tZWRpYXRlbHkgYW5kIG1ha2UgaXQgcGFydCBvZiB0aGUgZ2V0bGluZQorZG5sIGFyZ3VtZW50LgorZG5sCitkbmwgVGhlIGdyYW1tYXIgYmVsb3cgdXNpbmcgTEFMUigxKSBwYXJzZXMgaXQgYXMgYSBzeW50YXggZXJyb3IuICBTbyBkb2VzCitkbmwgR05VIEFXSyAzLjAuNiwgMy4xLjAsIGFuZCAzLjEuMS4gIFRoZXkgcmVkdWNlIHRoZSBmdWxsIGdldGxpbmUgZXhwcmVzc2lvbgorZG5sIGJlZm9yZSBzaGlmdGluZyBgKicgZXZlbiB0aG91Z2ggYConIGlzIG5vdCBhIHZhbGlkIGxvb2thaGVhZC4KK2RubAorZG5sIEdOVSBBV0sgMy4xLjIsIDMuMS4zLCAzLjEuNCwgYW5kIDMuMS41IHBhcnNlIGl0IGFzOgorZG5sCitkbmwgICAoZ2V0bGluZSAkITQpKjA7CitkbmwKK2RubCBUaGF0IGlzLCBsaWtlIHRoZSBvdGhlciB2ZXJzaW9ucyBvZiBHTlUgQVdLLCB0aGV5IHJlZHVjZSB0aGUgZnVsbCBnZXRsaW5lCitkbmwgZXhwcmVzc2lvbiBiZWZvcmUgc2hpZnRpbmcgYConLiAgSG93ZXZlciwgYmVjYXVzZSBvZiBhIGRpZmZlcmVudCBMSFMgb24gdGhlCitkbmwgZ2V0bGluZSBydWxlLCBgKicgYWN0dWFsbHkgaXMgYSB2YWxpZCBsb29rYWhlYWQuICBTb2xhcmlzIC91c3IveHBnNC9iaW4vYXdrCitkbmwgYW5kIHRoZSBPcGVuIEdyb3VwIGF3ayBzcGVjaWZpY2F0aW9uIHNlZW0gdG8gYWdyZWU6CitkbmwKK2RubCAgIGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9wdWJzL29ubGluZS83OTA4Nzk5L3hjdS9hd2suaHRtbAorZG5sCitkbmwgL2Jpbi9uYXdrIGFuZCAvYmluL2F3ayBvbiBTb2xhcmlzIDEwIHJlcG9ydCBpdCBhcyBhIHN5bnRheCBlcnJvciwgYnV0IHRoZXkKK2RubCBkb24ndCBsaWtlIGV2ZW4gYHByaW50ICQhNDsnLgorW1tMRVhfR0VUTElORSwgJyQnLCAnIScsIFlOVU1CRVIsICcqJywgWU5VTUJFUiwgJzsnXV0sCiAKLSMgUGFzcyBwbGVudHkgb2Ygb3B0aW9ucywgdG8gZXhlcmNpc2UgcGxlbnR5IG9mIGNvZGUsIGV2ZW4gaWYgd2UKLSMgZG9uJ3QgYWN0dWFsbHkgY2hlY2sgdGhlIG91dHB1dC4gIEJ1dCBTRUdWIGlzIHdhdGNoaW5nIHVzLCBhbmQKLSMgc28gbWlnaHQgZG8gZG1hbGxvYy4KLUFUX0NIRUNLKFtbYmlzb24gLS12ZXJib3NlIC0tZGVmaW5lcyBpbnB1dC55XV0pCitkbmwgQklTT04tU1RERVJSCitbQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sCitbW2lucHV0Lnk6IGNvbmZsaWN0czogMjY1IHNoaWZ0L3JlZHVjZV1dLAorW1tpbnB1dC55OiBjb25mbGljdHM6IDY1IHNoaWZ0L3JlZHVjZV1dKVsKK11dLAogCi1BVF9DTEVBTlVQCitkbmwgTEFTVC1TVEFURQorW0FUX0NPTkRfQ0FTRShbW0xBTFJdXSwgW1szMTldXSwgW1tjYW5vbmljYWwgTFJdXSwgW1syMzU4XV0sIFtbMzI4XV0pXSwKKworZG5sIExBTFIxLURJRkYgbm90IHVzZWQgZm9yIGNhbm9uaWNhbCBMUigxKSBiZWNhdXNlIHRoZSBkaWZmIGlzIGh1Z2UuCitkbmwgSXNvY29yZSBtYXAgZnJvbSBMQUxSKDEpIHN0YXRlIG51bWJlciB0byBuZXcgc3RhdGUgbnVtYmVyIHBsdXMgZGVzY3JpcHRpb25zCitkbmwgb2YgYW55IGNoYW5nZSBpbiB0aGUgYWN0aW9ucyByZXN1bHRpbmcgaW4gYSBjaGFuZ2UgaW4gYWNjZXB0ZWQgbGFuZ3VhZ2U6CitkbmwgICAtIDI0IC0+IDMyMAorZG5sICAgLSAxNiAtPiAzMjEKK2RubCAgIC0gMTcgLT4gMzIyCitkbmwgICAtIDIwIC0+IDMyMworZG5sICAgLSAyMSAtPiAzMjQKK2RubCAgIC0gNTQgLT4gMzI1CitkbmwgICAtIDU2IC0+IDMyNjogcmVkdWNlIC0+IHNoaWZ0IG9uICcqJywgJy8nLCBhbmQgJyUnCitkbmwgICAtIDU4IC0+IDMyNzogcmVkdWNlIC0+IHNoaWZ0IG9uICcqJywgJy8nLCBhbmQgJyUnCitkbmwgICAtIDYxIC0+IDMyODogcmVkdWNlIC0+IHNoaWZ0IG9uICcqJywgJy8nLCBhbmQgJyUnCitbQVRfQ09ORF9DQVNFKFtbTEFMUl1dLCBbXSwKK1tbQEAgLTcxMiw3ICs3MTIsNyBAQAorICAgMTU2ICAgICAgICAgfCAuICckJyBub25fcG9zdF9zaW1wX2V4cAorCisgICAgIE5BTUUgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOQorLSAgICAnJCcgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDI0CisrICAgICckJyAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMzIwCisKKyAgICAgTkFNRSAgICAgIFtyZWR1Y2UgdXNpbmcgcnVsZSAxNTIgKG9wdF92YXJpYWJsZSldCisgICAgICckJyAgICAgICBbcmVkdWNlIHVzaW5nIHJ1bGUgMTUyIChvcHRfdmFyaWFibGUpXQorQEAgLTUzNzksNyArNTM3OSw3IEBACisgICAxNTYgICAgICAgICB8IC4gJyQnIG5vbl9wb3N0X3NpbXBfZXhwCisKKyAgICAgTkFNRSAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5CistICAgICckJyAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMjQKKysgICAgJyQnICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAzMjAKKworICAgICBOQU1FICAgICAgW3JlZHVjZSB1c2luZyBydWxlIDE1MiAob3B0X3ZhcmlhYmxlKV0KKyAgICAgJyQnICAgICAgIFtyZWR1Y2UgdXNpbmcgcnVsZSAxNTIgKG9wdF92YXJpYWJsZSldCitAQCAtNTM5OSw3ICs1Mzk5LDcgQEAKKyAgIDE1NiAgICAgICAgIHwgLiAnJCcgbm9uX3Bvc3Rfc2ltcF9leHAKKworICAgICBOQU1FICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDkKKy0gICAgJyQnICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyNAorKyAgICAnJCcgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDMyMAorCisgICAgIE5BTUUgICAgICBbcmVkdWNlIHVzaW5nIHJ1bGUgMTUyIChvcHRfdmFyaWFibGUpXQorICAgICAnJCcgICAgICAgW3JlZHVjZSB1c2luZyBydWxlIDE1MiAob3B0X3ZhcmlhYmxlKV0KK0BAIC02MjE0LDcgKzYyMTQsNyBAQAorICAgMTU2ICAgICAgICAgfCAuICckJyBub25fcG9zdF9zaW1wX2V4cAorCisgICAgIE5BTUUgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOQorLSAgICAnJCcgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDI0CisrICAgICckJyAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMzIwCisKKyAgICAgTkFNRSAgICAgIFtyZWR1Y2UgdXNpbmcgcnVsZSAxNTIgKG9wdF92YXJpYWJsZSldCisgICAgICckJyAgICAgICBbcmVkdWNlIHVzaW5nIHJ1bGUgMTUyIChvcHRfdmFyaWFibGUpXQorQEAgLTExMDk5LDMgKzExMDk5LDI3NCBAQAorICAgIDQ1IHN0YXRlbWVudDogTEVYX0ZPUiAnKCcgb3B0X2V4cCBzZW1pIG9wdF9ubHMgZXhwIHNlbWkgb3B0X25scyBvcHRfZXhwIHJfcGFyZW4gb3B0X25scyBzdGF0ZW1lbnQgLgorCisgICAgICRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA0NSAoc3RhdGVtZW50KQorKworKworK1N0YXRlIDMyMAorKworKyAgMTM5IG5vbl9wb3N0X3NpbXBfZXhwOiAuICchJyBzaW1wX2V4cAorKyAgMTQwICAgICAgICAgICAgICAgICAgfCAuICcoJyBleHAgcl9wYXJlbgorKyAgMTQxICAgICAgICAgICAgICAgICAgfCAuIExFWF9CVUlMVElOICcoJyBvcHRfZXhwcmVzc2lvbl9saXN0IHJfcGFyZW4KKysgIDE0MiAgICAgICAgICAgICAgICAgIHwgLiBMRVhfTEVOR1RIICcoJyBvcHRfZXhwcmVzc2lvbl9saXN0IHJfcGFyZW4KKysgIDE0MyAgICAgICAgICAgICAgICAgIHwgLiBMRVhfTEVOR1RICisrICAxNDQgICAgICAgICAgICAgICAgICB8IC4gRlVOQ19DQUxMICcoJyBvcHRfZXhwcmVzc2lvbl9saXN0IHJfcGFyZW4KKysgIDE0NSAgICAgICAgICAgICAgICAgIHwgLiB2YXJpYWJsZQorKyAgMTQ2ICAgICAgICAgICAgICAgICAgfCAuIElOQ1JFTUVOVCB2YXJpYWJsZQorKyAgMTQ3ICAgICAgICAgICAgICAgICAgfCAuIERFQ1JFTUVOVCB2YXJpYWJsZQorKyAgMTQ4ICAgICAgICAgICAgICAgICAgfCAuIFlOVU1CRVIKKysgIDE0OSAgICAgICAgICAgICAgICAgIHwgLiBZU1RSSU5HCisrICAxNTAgICAgICAgICAgICAgICAgICB8IC4gJy0nIHNpbXBfZXhwCisrICAxNTEgICAgICAgICAgICAgICAgICB8IC4gJysnIHNpbXBfZXhwCisrICAxNTQgdmFyaWFibGU6IC4gTkFNRQorKyAgMTU1ICAgICAgICAgfCAuIE5BTUUgJ1snIGV4cHJlc3Npb25fbGlzdCAnXScKKysgIDE1NiAgICAgICAgIHwgLiAnJCcgbm9uX3Bvc3Rfc2ltcF9leHAKKysgIDE1NiAgICAgICAgIHwgJyQnIC4gbm9uX3Bvc3Rfc2ltcF9leHAKKysKKysgICAgRlVOQ19DQUxMICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOAorKyAgICBOQU1FICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5CisrICAgIFlOVU1CRVIgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEwCisrICAgIFlTVFJJTkcgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDExCisrICAgIElOQ1JFTUVOVCAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDMyMQorKyAgICBERUNSRU1FTlQgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAzMjIKKysgICAgTEVYX0JVSUxUSU4gIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTgKKysgICAgTEVYX0xFTkdUSCAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTkKKysgICAgJysnICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMzIzCisrICAgICctJyAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDMyNAorKyAgICAnIScgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAzMjUKKysgICAgJyQnICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMzIwCisrICAgICcoJyAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDU1CisrCisrICAgIG5vbl9wb3N0X3NpbXBfZXhwICBnbyB0byBzdGF0ZSA2MgorKyAgICB2YXJpYWJsZSAgICAgICAgICAgZ28gdG8gc3RhdGUgNjMKKysKKysKKytTdGF0ZSAzMjEKKysKKysgIDE0NiBub25fcG9zdF9zaW1wX2V4cDogSU5DUkVNRU5UIC4gdmFyaWFibGUKKysgIDE1NCB2YXJpYWJsZTogLiBOQU1FCisrICAxNTUgICAgICAgICB8IC4gTkFNRSAnWycgZXhwcmVzc2lvbl9saXN0ICddJworKyAgMTU2ICAgICAgICAgfCAuICckJyBub25fcG9zdF9zaW1wX2V4cAorKworKyAgICBOQU1FICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDkKKysgICAgJyQnICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAzMjAKKysKKysgICAgdmFyaWFibGUgIGdvIHRvIHN0YXRlIDUwCisrCisrCisrU3RhdGUgMzIyCisrCisrICAxNDcgbm9uX3Bvc3Rfc2ltcF9leHA6IERFQ1JFTUVOVCAuIHZhcmlhYmxlCisrICAxNTQgdmFyaWFibGU6IC4gTkFNRQorKyAgMTU1ICAgICAgICAgfCAuIE5BTUUgJ1snIGV4cHJlc3Npb25fbGlzdCAnXScKKysgIDE1NiAgICAgICAgIHwgLiAnJCcgbm9uX3Bvc3Rfc2ltcF9leHAKKysKKysgICAgTkFNRSAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5CisrICAgICckJyAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMzIwCisrCisrICAgIHZhcmlhYmxlICBnbyB0byBzdGF0ZSA1MQorKworKworK1N0YXRlIDMyMworKworKyAgMTMwIHNpbXBfZXhwOiAuIG5vbl9wb3N0X3NpbXBfZXhwCisrICAxMzEgICAgICAgICB8IC4gc2ltcF9leHAgJ14nIHNpbXBfZXhwCisrICAxMzIgICAgICAgICB8IC4gc2ltcF9leHAgJyonIHNpbXBfZXhwCisrICAxMzMgICAgICAgICB8IC4gc2ltcF9leHAgJy8nIHNpbXBfZXhwCisrICAxMzQgICAgICAgICB8IC4gc2ltcF9leHAgJyUnIHNpbXBfZXhwCisrICAxMzUgICAgICAgICB8IC4gc2ltcF9leHAgJysnIHNpbXBfZXhwCisrICAxMzYgICAgICAgICB8IC4gc2ltcF9leHAgJy0nIHNpbXBfZXhwCisrICAxMzcgICAgICAgICB8IC4gdmFyaWFibGUgSU5DUkVNRU5UCisrICAxMzggICAgICAgICB8IC4gdmFyaWFibGUgREVDUkVNRU5UCisrICAxMzkgbm9uX3Bvc3Rfc2ltcF9leHA6IC4gJyEnIHNpbXBfZXhwCisrICAxNDAgICAgICAgICAgICAgICAgICB8IC4gJygnIGV4cCByX3BhcmVuCisrICAxNDEgICAgICAgICAgICAgICAgICB8IC4gTEVYX0JVSUxUSU4gJygnIG9wdF9leHByZXNzaW9uX2xpc3Qgcl9wYXJlbgorKyAgMTQyICAgICAgICAgICAgICAgICAgfCAuIExFWF9MRU5HVEggJygnIG9wdF9leHByZXNzaW9uX2xpc3Qgcl9wYXJlbgorKyAgMTQzICAgICAgICAgICAgICAgICAgfCAuIExFWF9MRU5HVEgKKysgIDE0NCAgICAgICAgICAgICAgICAgIHwgLiBGVU5DX0NBTEwgJygnIG9wdF9leHByZXNzaW9uX2xpc3Qgcl9wYXJlbgorKyAgMTQ1ICAgICAgICAgICAgICAgICAgfCAuIHZhcmlhYmxlCisrICAxNDYgICAgICAgICAgICAgICAgICB8IC4gSU5DUkVNRU5UIHZhcmlhYmxlCisrICAxNDcgICAgICAgICAgICAgICAgICB8IC4gREVDUkVNRU5UIHZhcmlhYmxlCisrICAxNDggICAgICAgICAgICAgICAgICB8IC4gWU5VTUJFUgorKyAgMTQ5ICAgICAgICAgICAgICAgICAgfCAuIFlTVFJJTkcKKysgIDE1MCAgICAgICAgICAgICAgICAgIHwgLiAnLScgc2ltcF9leHAKKysgIDE1MSAgICAgICAgICAgICAgICAgIHwgLiAnKycgc2ltcF9leHAKKysgIDE1MSAgICAgICAgICAgICAgICAgIHwgJysnIC4gc2ltcF9leHAKKysgIDE1NCB2YXJpYWJsZTogLiBOQU1FCisrICAxNTUgICAgICAgICB8IC4gTkFNRSAnWycgZXhwcmVzc2lvbl9saXN0ICddJworKyAgMTU2ICAgICAgICAgfCAuICckJyBub25fcG9zdF9zaW1wX2V4cAorKworKyAgICBGVU5DX0NBTEwgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4CisrICAgIE5BTUUgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDkKKysgICAgWU5VTUJFUiAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTAKKysgICAgWVNUUklORyAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTEKKysgICAgSU5DUkVNRU5UICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTYKKysgICAgREVDUkVNRU5UICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTcKKysgICAgTEVYX0JVSUxUSU4gIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTgKKysgICAgTEVYX0xFTkdUSCAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTkKKysgICAgJysnICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMjAKKysgICAgJy0nICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMjEKKysgICAgJyEnICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNTQKKysgICAgJyQnICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMjQKKysgICAgJygnICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNTUKKysKKysgICAgc2ltcF9leHAgICAgICAgICAgIGdvIHRvIHN0YXRlIDMyNgorKyAgICBub25fcG9zdF9zaW1wX2V4cCAgZ28gdG8gc3RhdGUgMzUKKysgICAgdmFyaWFibGUgICAgICAgICAgIGdvIHRvIHN0YXRlIDU3CisrCisrCisrU3RhdGUgMzI0CisrCisrICAxMzAgc2ltcF9leHA6IC4gbm9uX3Bvc3Rfc2ltcF9leHAKKysgIDEzMSAgICAgICAgIHwgLiBzaW1wX2V4cCAnXicgc2ltcF9leHAKKysgIDEzMiAgICAgICAgIHwgLiBzaW1wX2V4cCAnKicgc2ltcF9leHAKKysgIDEzMyAgICAgICAgIHwgLiBzaW1wX2V4cCAnLycgc2ltcF9leHAKKysgIDEzNCAgICAgICAgIHwgLiBzaW1wX2V4cCAnJScgc2ltcF9leHAKKysgIDEzNSAgICAgICAgIHwgLiBzaW1wX2V4cCAnKycgc2ltcF9leHAKKysgIDEzNiAgICAgICAgIHwgLiBzaW1wX2V4cCAnLScgc2ltcF9leHAKKysgIDEzNyAgICAgICAgIHwgLiB2YXJpYWJsZSBJTkNSRU1FTlQKKysgIDEzOCAgICAgICAgIHwgLiB2YXJpYWJsZSBERUNSRU1FTlQKKysgIDEzOSBub25fcG9zdF9zaW1wX2V4cDogLiAnIScgc2ltcF9leHAKKysgIDE0MCAgICAgICAgICAgICAgICAgIHwgLiAnKCcgZXhwIHJfcGFyZW4KKysgIDE0MSAgICAgICAgICAgICAgICAgIHwgLiBMRVhfQlVJTFRJTiAnKCcgb3B0X2V4cHJlc3Npb25fbGlzdCByX3BhcmVuCisrICAxNDIgICAgICAgICAgICAgICAgICB8IC4gTEVYX0xFTkdUSCAnKCcgb3B0X2V4cHJlc3Npb25fbGlzdCByX3BhcmVuCisrICAxNDMgICAgICAgICAgICAgICAgICB8IC4gTEVYX0xFTkdUSAorKyAgMTQ0ICAgICAgICAgICAgICAgICAgfCAuIEZVTkNfQ0FMTCAnKCcgb3B0X2V4cHJlc3Npb25fbGlzdCByX3BhcmVuCisrICAxNDUgICAgICAgICAgICAgICAgICB8IC4gdmFyaWFibGUKKysgIDE0NiAgICAgICAgICAgICAgICAgIHwgLiBJTkNSRU1FTlQgdmFyaWFibGUKKysgIDE0NyAgICAgICAgICAgICAgICAgIHwgLiBERUNSRU1FTlQgdmFyaWFibGUKKysgIDE0OCAgICAgICAgICAgICAgICAgIHwgLiBZTlVNQkVSCisrICAxNDkgICAgICAgICAgICAgICAgICB8IC4gWVNUUklORworKyAgMTUwICAgICAgICAgICAgICAgICAgfCAuICctJyBzaW1wX2V4cAorKyAgMTUwICAgICAgICAgICAgICAgICAgfCAnLScgLiBzaW1wX2V4cAorKyAgMTUxICAgICAgICAgICAgICAgICAgfCAuICcrJyBzaW1wX2V4cAorKyAgMTU0IHZhcmlhYmxlOiAuIE5BTUUKKysgIDE1NSAgICAgICAgIHwgLiBOQU1FICdbJyBleHByZXNzaW9uX2xpc3QgJ10nCisrICAxNTYgICAgICAgICB8IC4gJyQnIG5vbl9wb3N0X3NpbXBfZXhwCisrCisrICAgIEZVTkNfQ0FMTCAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDgKKysgICAgTkFNRSAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOQorKyAgICBZTlVNQkVSICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxMAorKyAgICBZU1RSSU5HICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxMQorKyAgICBJTkNSRU1FTlQgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxNgorKyAgICBERUNSRU1FTlQgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxNworKyAgICBMRVhfQlVJTFRJTiAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxOAorKyAgICBMRVhfTEVOR1RIICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxOQorKyAgICAnKycgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyMAorKyAgICAnLScgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyMQorKyAgICAnIScgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1NAorKyAgICAnJCcgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyNAorKyAgICAnKCcgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1NQorKworKyAgICBzaW1wX2V4cCAgICAgICAgICAgZ28gdG8gc3RhdGUgMzI3CisrICAgIG5vbl9wb3N0X3NpbXBfZXhwICBnbyB0byBzdGF0ZSAzNQorKyAgICB2YXJpYWJsZSAgICAgICAgICAgZ28gdG8gc3RhdGUgNTcKKysKKysKKytTdGF0ZSAzMjUKKysKKysgIDEzMCBzaW1wX2V4cDogLiBub25fcG9zdF9zaW1wX2V4cAorKyAgMTMxICAgICAgICAgfCAuIHNpbXBfZXhwICdeJyBzaW1wX2V4cAorKyAgMTMyICAgICAgICAgfCAuIHNpbXBfZXhwICcqJyBzaW1wX2V4cAorKyAgMTMzICAgICAgICAgfCAuIHNpbXBfZXhwICcvJyBzaW1wX2V4cAorKyAgMTM0ICAgICAgICAgfCAuIHNpbXBfZXhwICclJyBzaW1wX2V4cAorKyAgMTM1ICAgICAgICAgfCAuIHNpbXBfZXhwICcrJyBzaW1wX2V4cAorKyAgMTM2ICAgICAgICAgfCAuIHNpbXBfZXhwICctJyBzaW1wX2V4cAorKyAgMTM3ICAgICAgICAgfCAuIHZhcmlhYmxlIElOQ1JFTUVOVAorKyAgMTM4ICAgICAgICAgfCAuIHZhcmlhYmxlIERFQ1JFTUVOVAorKyAgMTM5IG5vbl9wb3N0X3NpbXBfZXhwOiAuICchJyBzaW1wX2V4cAorKyAgMTM5ICAgICAgICAgICAgICAgICAgfCAnIScgLiBzaW1wX2V4cAorKyAgMTQwICAgICAgICAgICAgICAgICAgfCAuICcoJyBleHAgcl9wYXJlbgorKyAgMTQxICAgICAgICAgICAgICAgICAgfCAuIExFWF9CVUlMVElOICcoJyBvcHRfZXhwcmVzc2lvbl9saXN0IHJfcGFyZW4KKysgIDE0MiAgICAgICAgICAgICAgICAgIHwgLiBMRVhfTEVOR1RIICcoJyBvcHRfZXhwcmVzc2lvbl9saXN0IHJfcGFyZW4KKysgIDE0MyAgICAgICAgICAgICAgICAgIHwgLiBMRVhfTEVOR1RICisrICAxNDQgICAgICAgICAgICAgICAgICB8IC4gRlVOQ19DQUxMICcoJyBvcHRfZXhwcmVzc2lvbl9saXN0IHJfcGFyZW4KKysgIDE0NSAgICAgICAgICAgICAgICAgIHwgLiB2YXJpYWJsZQorKyAgMTQ2ICAgICAgICAgICAgICAgICAgfCAuIElOQ1JFTUVOVCB2YXJpYWJsZQorKyAgMTQ3ICAgICAgICAgICAgICAgICAgfCAuIERFQ1JFTUVOVCB2YXJpYWJsZQorKyAgMTQ4ICAgICAgICAgICAgICAgICAgfCAuIFlOVU1CRVIKKysgIDE0OSAgICAgICAgICAgICAgICAgIHwgLiBZU1RSSU5HCisrICAxNTAgICAgICAgICAgICAgICAgICB8IC4gJy0nIHNpbXBfZXhwCisrICAxNTEgICAgICAgICAgICAgICAgICB8IC4gJysnIHNpbXBfZXhwCisrICAxNTQgdmFyaWFibGU6IC4gTkFNRQorKyAgMTU1ICAgICAgICAgfCAuIE5BTUUgJ1snIGV4cHJlc3Npb25fbGlzdCAnXScKKysgIDE1NiAgICAgICAgIHwgLiAnJCcgbm9uX3Bvc3Rfc2ltcF9leHAKKysKKysgICAgRlVOQ19DQUxMICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOAorKyAgICBOQU1FICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5CisrICAgIFlOVU1CRVIgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEwCisrICAgIFlTVFJJTkcgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDExCisrICAgIElOQ1JFTUVOVCAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE2CisrICAgIERFQ1JFTUVOVCAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE3CisrICAgIExFWF9CVUlMVElOICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE4CisrICAgIExFWF9MRU5HVEggICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE5CisrICAgICcrJyAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIwCisrICAgICctJyAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIxCisrICAgICchJyAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDU0CisrICAgICckJyAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDI0CisrICAgICcoJyAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDU1CisrCisrICAgIHNpbXBfZXhwICAgICAgICAgICBnbyB0byBzdGF0ZSAzMjgKKysgICAgbm9uX3Bvc3Rfc2ltcF9leHAgIGdvIHRvIHN0YXRlIDM1CisrICAgIHZhcmlhYmxlICAgICAgICAgICBnbyB0byBzdGF0ZSA1NworKworKworK1N0YXRlIDMyNgorKworKyAgMTMxIHNpbXBfZXhwOiBzaW1wX2V4cCAuICdeJyBzaW1wX2V4cAorKyAgMTMyICAgICAgICAgfCBzaW1wX2V4cCAuICcqJyBzaW1wX2V4cAorKyAgMTMzICAgICAgICAgfCBzaW1wX2V4cCAuICcvJyBzaW1wX2V4cAorKyAgMTM0ICAgICAgICAgfCBzaW1wX2V4cCAuICclJyBzaW1wX2V4cAorKyAgMTM1ICAgICAgICAgfCBzaW1wX2V4cCAuICcrJyBzaW1wX2V4cAorKyAgMTM2ICAgICAgICAgfCBzaW1wX2V4cCAuICctJyBzaW1wX2V4cAorKyAgMTUxIG5vbl9wb3N0X3NpbXBfZXhwOiAnKycgc2ltcF9leHAgLiAgW2Vycm9yLCBGVU5DX0NBTEwsIE5BTUUsIFlOVU1CRVIsIFlTVFJJTkcsIFJFTE9QLCBBUFBFTkRfT1AsIE1BVENIT1AsIE5FV0xJTkUsIExFWF9JTiwgTEVYX0FORCwgTEVYX09SLCBJTkNSRU1FTlQsIERFQ1JFTUVOVCwgTEVYX0JVSUxUSU4sIExFWF9MRU5HVEgsICc/JywgJzonLCAnLCcsICc8JywgJz4nLCAnfCcsIFRXT1dBWUlPLCAnKycsICctJywgJyEnLCAnJCcsICcoJywgJyknLCAnQDo+QCcsICd7JywgJzsnXQorKworKyAgICAnKicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgODkKKysgICAgJy8nICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDkwCisrICAgICclJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5MQorKyAgICAnXicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTIKKysKKysgICAgJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDE1MSAobm9uX3Bvc3Rfc2ltcF9leHApCisrCisrICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAxNTEgYW5kIHRva2VuICcrJyByZXNvbHZlZCBhcyByZWR1Y2UgKCcrJyA8IFVOQVJZKS4KKysgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlIDE1MSBhbmQgdG9rZW4gJy0nIHJlc29sdmVkIGFzIHJlZHVjZSAoJy0nIDwgVU5BUlkpLgorKworKworK1N0YXRlIDMyNworKworKyAgMTMxIHNpbXBfZXhwOiBzaW1wX2V4cCAuICdeJyBzaW1wX2V4cAorKyAgMTMyICAgICAgICAgfCBzaW1wX2V4cCAuICcqJyBzaW1wX2V4cAorKyAgMTMzICAgICAgICAgfCBzaW1wX2V4cCAuICcvJyBzaW1wX2V4cAorKyAgMTM0ICAgICAgICAgfCBzaW1wX2V4cCAuICclJyBzaW1wX2V4cAorKyAgMTM1ICAgICAgICAgfCBzaW1wX2V4cCAuICcrJyBzaW1wX2V4cAorKyAgMTM2ICAgICAgICAgfCBzaW1wX2V4cCAuICctJyBzaW1wX2V4cAorKyAgMTUwIG5vbl9wb3N0X3NpbXBfZXhwOiAnLScgc2ltcF9leHAgLiAgW2Vycm9yLCBGVU5DX0NBTEwsIE5BTUUsIFlOVU1CRVIsIFlTVFJJTkcsIFJFTE9QLCBBUFBFTkRfT1AsIE1BVENIT1AsIE5FV0xJTkUsIExFWF9JTiwgTEVYX0FORCwgTEVYX09SLCBJTkNSRU1FTlQsIERFQ1JFTUVOVCwgTEVYX0JVSUxUSU4sIExFWF9MRU5HVEgsICc/JywgJzonLCAnLCcsICc8JywgJz4nLCAnfCcsIFRXT1dBWUlPLCAnKycsICctJywgJyEnLCAnJCcsICcoJywgJyknLCAnQDo+QCcsICd7JywgJzsnXQorKworKyAgICAnKicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgODkKKysgICAgJy8nICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDkwCisrICAgICclJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5MQorKyAgICAnXicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTIKKysKKysgICAgJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDE1MCAobm9uX3Bvc3Rfc2ltcF9leHApCisrCisrICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAxNTAgYW5kIHRva2VuICcrJyByZXNvbHZlZCBhcyByZWR1Y2UgKCcrJyA8IFVOQVJZKS4KKysgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlIDE1MCBhbmQgdG9rZW4gJy0nIHJlc29sdmVkIGFzIHJlZHVjZSAoJy0nIDwgVU5BUlkpLgorKworKworK1N0YXRlIDMyOAorKworKyAgMTMxIHNpbXBfZXhwOiBzaW1wX2V4cCAuICdeJyBzaW1wX2V4cAorKyAgMTMyICAgICAgICAgfCBzaW1wX2V4cCAuICcqJyBzaW1wX2V4cAorKyAgMTMzICAgICAgICAgfCBzaW1wX2V4cCAuICcvJyBzaW1wX2V4cAorKyAgMTM0ICAgICAgICAgfCBzaW1wX2V4cCAuICclJyBzaW1wX2V4cAorKyAgMTM1ICAgICAgICAgfCBzaW1wX2V4cCAuICcrJyBzaW1wX2V4cAorKyAgMTM2ICAgICAgICAgfCBzaW1wX2V4cCAuICctJyBzaW1wX2V4cAorKyAgMTM5IG5vbl9wb3N0X3NpbXBfZXhwOiAnIScgc2ltcF9leHAgLiAgW2Vycm9yLCBGVU5DX0NBTEwsIE5BTUUsIFlOVU1CRVIsIFlTVFJJTkcsIFJFTE9QLCBBUFBFTkRfT1AsIE1BVENIT1AsIE5FV0xJTkUsIExFWF9JTiwgTEVYX0FORCwgTEVYX09SLCBJTkNSRU1FTlQsIERFQ1JFTUVOVCwgTEVYX0JVSUxUSU4sIExFWF9MRU5HVEgsICc/JywgJzonLCAnLCcsICc8JywgJz4nLCAnfCcsIFRXT1dBWUlPLCAnKycsICctJywgJyEnLCAnJCcsICcoJywgJyknLCAnQDo+QCcsICd7JywgJzsnXQorKworKyAgICAnKicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgODkKKysgICAgJy8nICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDkwCisrICAgICclJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5MQorKyAgICAnXicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTIKKysKKysgICAgJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDEzOSAobm9uX3Bvc3Rfc2ltcF9leHApCisrCisrICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAxMzkgYW5kIHRva2VuICcrJyByZXNvbHZlZCBhcyByZWR1Y2UgKCcrJyA8IFVOQVJZKS4KKysgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlIDEzOSBhbmQgdG9rZW4gJy0nIHJlc29sdmVkIGFzIHJlZHVjZSAoJy0nIDwgVU5BUlkpLgorXV0pXSwKKworZG5sIE9USEVSLUNIRUNLUworW10sCisKK2RubCBQQVJTRVItRVhJVC1WQUxVRSwgUEFSU0VSLVNURE9VVCwgUEFSU0VSLVNUREVSUgorZG5sIEluIHRoZSBjYXNlIG9mIHRoZSBzeW50YXggZXJyb3IsIHRoZSBwYXJzZXIgcmVjb3ZlcnMsIHNvIGl0IHJldHVybnMgMC4KK1tbMF1dLAorW10sCitbQVRfQ09ORF9DQVNFKFtbTEFMUl1dLAorW1tzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgTkVXTElORSBvciAneycgb3IgJzsnCitdXSldKQogCiAjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIwogIyMgR05VIENpbSBHcmFtbWFyLiAgIyMKICMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCiAKLUFUX1NFVFVQKFtHTlUgQ2ltIEdyYW1tYXJdKQotCiAjIEdOVSBDaW0sIHRoZSBHTlUgU2ltdWxhIDg3IENvbXBpbGVyLgogCiAjIEJpc29uIHdhcyBvbmNlIHdyb25nLCBkdWUgdG8gYW4gaW5jb3JyZWN0IGNvbXB1dGF0aW9uIG9mIHRoZSBSUiBjb25mbGljdHMuCiAjIEl0IHJlcG9ydGVkIDgwIFNSICYmIDk5IFJSIGNvbmZsaWN0cyBpbnN0ZWFkIG9mIDc4LzEwISEhCiAKLUFUX0RBVEEoW1tpbnB1dC55XV0sCi1bWyV1bmlvbiB7fQotCitBVF9URVNUX0VYSVNUSU5HX0dSQU1NQVIoW1tHTlUgQ2ltIEdyYW1tYXJdXSwKK1tbCiAldG9rZW4KIAlIQUNUSVZBVEUgSEFGVEVSIC8qSEFORCovIEhBUlJBWSBIQVQKIAlIQkVGT1JFIEhCRUdJTiBIQk9PTEVBTgpAQCAtNDMwLDcgKzg0MSw4IEBACiAlbGVmdCAgIEhET1QKIAogJXN0YXJ0ICBNQUlOX01PRFVMRQotJSUKK11dLAorW1sKIC8qIEdSQU1BVElLSyBGT1IgUFJPR1JBTSBNT0RVTEVTICovCiBNQUlOX01PRFVMRSAgICAgOiAgICAgICB7fQogCQkJTU9EVUxTCkBAIC05NDksMTcgKzEzNjEsMjYgQEAKIAkJCUhQQVJFWFBTRVBBUkFUT1IKIAkJCUFSR1VNRU5UX0xJU1QKIAkJOwotJSUKLV1dKQorXV0sCiAKLSMgUGFzcyBwbGVudHkgb2Ygb3B0aW9ucywgdG8gZXhlcmNpc2UgcGxlbnR5IG9mIGNvZGUsIGV2ZW4gaWYgd2UKLSMgZG9uJ3QgYWN0dWFsbHkgY2hlY2sgdGhlIG91dHB1dC4gIEJ1dCBTRUdWIGlzIHdhdGNoaW5nIHVzLCBhbmQKLSMgc28gbWlnaHQgZG8gZG1hbGxvYy4KLUFUX0NIRUNLKFtbYmlzb24gLS12ZXJib3NlIC0tZGVmaW5lcyBpbnB1dC55XV0sIDAsIFtdLAotW1tpbnB1dC55OiBjb25mbGljdHM6IDc4IHNoaWZ0L3JlZHVjZSwgMTAgcmVkdWNlL3JlZHVjZQotXV0pCitkbmwgSU5QVVQKK1tbXV0sCiAKLUFUX0NIRUNLKFtbZ3JlcCAnXlN0YXRlLipjb25mbGljdHM6JyBpbnB1dC5vdXRwdXRdXSwgMCwKK2RubCBCSVNPTi1TVERFUlIKK1tBVF9DT05EX0NBU0UoW1tjYW5vbmljYWwgTFJdXSwKK1tbaW5wdXQueTogY29uZmxpY3RzOiAxODc2IHNoaWZ0L3JlZHVjZSwgMTQ0IHJlZHVjZS9yZWR1Y2VdXSwKK1tbaW5wdXQueTogY29uZmxpY3RzOiA3OCBzaGlmdC9yZWR1Y2UsIDEwIHJlZHVjZS9yZWR1Y2VdXSlbCitdXSwKKworZG5sIExBU1QtU1RBVEUKK1tBVF9DT05EX0NBU0UoW1tjYW5vbmljYWwgTFJdXSwgW1sxMDQyNV1dLCBbWzQ0Ml1dKV0sCisKK2RubCBMQUxSMS1ESUZGIG5vdCB1c2VkIGZvciBjYW5vbmljYWwgTFIoMSkgYmVjYXVzZSB0aGUgZGlmZiBpcyBodWdlLgorW10sCisKK2RubCBPVEhFUi1DSEVDS1MKK1tBVF9DT05EX0NBU0UoW1tjYW5vbmljYWwgTFJdXSwgW1tdXSwKK1tBVF9DSEVDSyhbW2dyZXAgJ15TdGF0ZS4qY29uZmxpY3RzOicgaW5wdXQub3V0cHV0XV0sIFtbMF1dLAogW1tTdGF0ZSA2NCBjb25mbGljdHM6IDE0IHNoaWZ0L3JlZHVjZQogU3RhdGUgMTY0IGNvbmZsaWN0czogMSBzaGlmdC9yZWR1Y2UKIFN0YXRlIDIwMSBjb25mbGljdHM6IDMzIHNoaWZ0L3JlZHVjZSwgNCByZWR1Y2UvcmVkdWNlCkBAIC05NjksMjIgKzEzOTAsMTggQEAKIFN0YXRlIDM1NiBjb25mbGljdHM6IDEgc2hpZnQvcmVkdWNlCiBTdGF0ZSAzNjAgY29uZmxpY3RzOiA5IHNoaWZ0L3JlZHVjZSwgMiByZWR1Y2UvcmVkdWNlCiBTdGF0ZSA0MjcgY29uZmxpY3RzOiA5IHNoaWZ0L3JlZHVjZSwgMiByZWR1Y2UvcmVkdWNlCi1dXSkKK11dKV0pXSkKIAotQVRfQ0xFQU5VUAotCi0jIyAtLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgR05VIHBpYyBHcmFtbWFyLiAgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCi0KLUFUX1NFVFVQKFtHTlUgcGljIEdyYW1tYXJdKQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEdOVSBwaWMgKEdyb2ZmIDEuMTguMSkgR3JhbW1hci4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogCiAjIEdOVSBwaWMsIHBhcnQgb2YgZ3JvZmYuCiAKICMgQmlzb24gb25jZSByZXBvcnRlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIHRoYXQgaXQgc2hvdWxkbid0IGhhdmUuCiAKLUFUX0RBVEEoW1tpbnB1dC55XV0sCi1bWyV1bmlvbiB7fQorQVRfVEVTVF9FWElTVElOR19HUkFNTUFSKFtbR05VIHBpYyAoR3JvZmYgMS4xOC4xKSBHcmFtbWFyXV0sCitbWyVlcnJvci12ZXJib3NlCiAKICV0b2tlbiBMQUJFTAogJXRva2VuIFZBUklBQkxFCkBAIC0xMDY0LDcgKzE0ODEsNyBAQAogJXRva2VuIFJBTkQKICV0b2tlbiBTUkFORAogJXRva2VuIENPUFkKLSV0b2tlbiBUSFJVCisldG9rZW4gVEhST1VHSAogJXRva2VuIFRPUAogJXRva2VuIEJPVFRPTQogJXRva2VuIFVQUEVSCkBAIC0xMTUwLDkgKzE1NjcsOCBAQAogJWxlZnQgJyonICcvJyAnJScKICVyaWdodCAnIScKICVyaWdodCAnXicKLQotJSUKLQorXV0sCitbWwogdG9wOgogCW9wdGlvbmFsX3NlcGFyYXRvcgogCXwgZWxlbWVudF9saXN0CkBAIC0xMTkxLDEyICsxNjA3LDEyIEBACiAJCXt9CiAJICBERUxJTUlURUQKIAl8IENPUFkgVEVYVAotCXwgQ09QWSBURVhUIFRIUlUKKwl8IENPUFkgVEVYVCBUSFJPVUdICiAJCXt9CiAJICBERUxJTUlURUQKIAkJe30KIAkgIHVudGlsCi0JfCBDT1BZIFRIUlUKKwl8IENPUFkgVEhST1VHSAogCQl7fQogCSAgREVMSU1JVEVECiAJCXt9CkBAIC0xMjY4LDcgKzE2ODQsNyBAQAogCXwgTEFCRUwgJzonIG9wdGlvbmFsX3NlcGFyYXRvciBlbGVtZW50CiAJfCBMQUJFTCAnOicgb3B0aW9uYWxfc2VwYXJhdG9yIHBvc2l0aW9uX25vdF9wbGFjZQogCXwgTEFCRUwgJzonIG9wdGlvbmFsX3NlcGFyYXRvciBwbGFjZQotCXwgJ3t9JworCXwgJ3snIHt9IGVsZW1lbnRfbGlzdCAnfScKIAkJe30KIAkgIG9wdGlvbmFsX2VsZW1lbnQKIAl8IHBsYWNlbGVzc19lbGVtZW50CkBAIC0xNTE1LDExICsxOTMxLDExODkgQEAKIAl8IGV4cHIgT1JPUiBleHByCiAJfCAnIScgZXhwcgogCTsKLV1dKQorXV0sCiAKLSMgUGFzcyBwbGVudHkgb2Ygb3B0aW9ucywgdG8gZXhlcmNpc2UgcGxlbnR5IG9mIGNvZGUsIGV2ZW4gaWYgd2UKLSMgZG9uJ3QgYWN0dWFsbHkgY2hlY2sgdGhlIG91dHB1dC4gIEJ1dCBTRUdWIGlzIHdhdGNoaW5nIHVzLCBhbmQKLSMgc28gbWlnaHQgZG8gZG1hbGxvYy4KLUFUX0NIRUNLKFtbYmlzb24gLS12ZXJib3NlIC0tZGVmaW5lcyBpbnB1dC55XV0sIDAsIFtdLCBbXSkKK2RubCBJTlBVVAorZG5sCitkbmwgRm9yIGV4YW1wbGUsIGluIHBpYzoKK2RubAorZG5sICAgLlBTCitkbmwgICBBOiBjaXJjbGUgIkEiCitkbmwgICBCOiBBIGxlZnQKK2RubCAgIGNpcmNsZSAiQiIgYXQgQgorZG5sICAgLlBFCitkbmwKK2RubCBFdmVuIHVzaW5nIGdyb2ZmIDEuMTkuMiwgdGhlIDNyZCBsaW5lIGFib3ZlIGlzIGEgc3ludGF4IGVycm9yLiAgQ2hhbmdlCitkbmwgImxlZnQiIHRvICJyaWdodCIsIGFuZCBpdCBzdGlsbCBpcy4gIEhvd2V2ZXIsIGFkZCAidXBwZXIiIG9yICJsb3dlciIgYmVmb3JlCitkbmwgImxlZnQgb3IgInJpZ2h0IiBhbmQgaXQncyBhY2NlcHRlZCB0byBtZWFuICIubnciLCAiLm5lIiwgIi5zdyIsIG9yICIuc2UiLgorZG5sIChUaGVyZSBzZWVtIHRvIGJlIG5vIGFsaWFzZXMgZm9yICJub3J0aCIgYW5kICJzb3V0aCIgdGhhdCBjYW4gc3RhbmQgYWxvbmUKK2RubCB3aXRob3V0IGJlaW5nIGZvbGxvd2VkIGJ5ICJvZiIuKQorW1tWQVJJQUJMRSwgJz0nLCBMQUJFTCwgTEVGVCwgRE9UX1hdXSwKIAotQVRfQ0xFQU5VUAorZG5sIEJJU09OLVNUREVSUgorW1tpbnB1dC55OjQ3MC4xMS00ODogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzOiBwYXRoOiBPUkRJTkFMIExBU1Qgb2JqZWN0X3R5cGUgcmVsYXRpdmVfcGF0aAorXV0sCisKK2RubCBMQVNULVNUQVRFCitbQVRfQ09ORF9DQVNFKFtbTEFMUl1dLCBbWzQyMl1dLCBbW2Nhbm9uaWNhbCBMUl1dLCBbWzQ4MzNdXSwgW1s0MjddXSldLAorCitkbmwgTEFMUjEtRElGRiBub3QgdXNlZCBmb3IgY2Fub25pY2FsIExSKDEpIGJlY2F1c2UgdGhlIGRpZmYgaXMgaHVnZS4KK2RubCBJc29jb3JlIG1hcCBmcm9tIExBTFIoMSkgc3RhdGUgbnVtYmVyIHRvIG5ldyBzdGF0ZSBudW1iZXIgcGx1cyBkZXNjcmlwdGlvbnMKK2RubCBvZiBhbnkgY2hhbmdlIGluIHRoZSBhY3Rpb25zIHJlc3VsdGluZyBpbiBhIGNoYW5nZSBpbiBhY2NlcHRlZCBsYW5ndWFnZToKK2RubCAgIC0gMTAyIC0+IDQyMzogcmVkdWNlIC0+IHNoaWZ0IG9uIExFRlQgYW5kIFJJR0hUCitkbmwgICAtIDIzNyAtPiA0MjUKK2RubCAgIC0gMjY2IC0+IDQyNAorZG5sICAgLSAzMzkgLT4gNDI2CitkbmwgICAtIDM4MyAtPiA0MjcKK1tBVF9DT05EX0NBU0UoW1tMQUxSXV0sIFtdLAorW1tAQCAtMTIyMyw3ICsxMjIzLDcgQEAKKyAgICAgdGV4dF9leHByICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTIKKyAgICAgdGV4dCAgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTMKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC0xMzc3LDcgKzEzNzcsNyBAQAorICAgICAnIScgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTQKKworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTE4NTQsNyArMTg1NCw3IEBACisKKyAgICAgdGV4dCAgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxNjIKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC0yMDQ3LDcgKzIwNDcsNyBAQAorICAgICB0ZXh0X2V4cHIgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMgorICAgICB0ZXh0ICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTI1NzEsNyArMjU3MSw3IEBACisgICAgIHBvc2l0aW9uX25vdF9wbGFjZSAgICAgZ28gdG8gc3RhdGUgOTkKKyAgICAgZXhwcl9wYWlyICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxOTEKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDEKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC0yNzMyLDcgKzI3MzIsNyBAQAorICAgICB0ZXh0X2V4cHIgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMgorICAgICB0ZXh0ICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTI4NzUsNyArMjg3NSw3IEBACisgICAgICchJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5NAorCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMzAxOCw3ICszMDE4LDcgQEAKKyAgICAgJyEnICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDk0CisKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC0zMjU2LDcgKzMyNTYsNyBAQAorCisgU3RhdGUgMTAyCisKKy0gIDE0NiBwbGFjZTogbGFiZWwgLiAgWyRlbmQsIExBQkVMLCBWQVJJQUJMRSwgTlVNQkVSLCBURVhULCBPUkRJTkFMLCBMRUZUX0FSUk9XX0hFQUQsIFJJR0hUX0FSUk9XX0hFQUQsIERPVUJMRV9BUlJPV19IRUFELCBMQVNULCBVUCwgRE9XTiwgTEVGVCwgUklHSFQsIEhFSUdIVCwgUkFESVVTLCBXSURUSCwgRElBTUVURVIsIEZST00sIFRPLCBBVCwgV0lUSCwgQlksIFRIRU4sIFNPTElELCBET1RURUQsIERBU0hFRCwgQ0hPUCwgU0FNRSwgSU5WSVNJQkxFLCBMSlVTVCwgUkpVU1QsIEFCT1ZFLCBCRUxPVywgQU5ELCBIRVJFLCBET1RfWCwgRE9UX1ksIERPVF9IVCwgRE9UX1dJRCwgRE9UX1JBRCwgU0lOLCBDT1MsIEFUQU4yLCBMT0csIEVYUCwgU1FSVCwgS19NQVgsIEtfTUlOLCBJTlQsIFJBTkQsIFNSQU5ELCBDVywgQ0NXLCBUSElDS05FU1MsIEZJTEwsIENPTE9SRUQsIE9VVExJTkVELCBTSEFERUQsIEFMSUdORUQsIFNQUklOVEYsICcoJywgJ2AnLCAnLCcsICc+JywgJysnLCAnLScsICchJywgJzsnLCAnfScsICdAOj5AJywgJyknXQorKyAgMTQ2IHBsYWNlOiBsYWJlbCAuICBbJGVuZCwgTEFCRUwsIFZBUklBQkxFLCBOVU1CRVIsIFRFWFQsIE9SRElOQUwsIExFRlRfQVJST1dfSEVBRCwgUklHSFRfQVJST1dfSEVBRCwgRE9VQkxFX0FSUk9XX0hFQUQsIExBU1QsIFVQLCBET1dOLCBMRUZULCBSSUdIVCwgSEVJR0hULCBSQURJVVMsIFdJRFRILCBESUFNRVRFUiwgRlJPTSwgVE8sIEFULCBXSVRILCBCWSwgVEhFTiwgU09MSUQsIERPVFRFRCwgREFTSEVELCBDSE9QLCBTQU1FLCBJTlZJU0lCTEUsIExKVVNULCBSSlVTVCwgQUJPVkUsIEJFTE9XLCBIRVJFLCBET1RfWCwgRE9UX1ksIERPVF9IVCwgRE9UX1dJRCwgRE9UX1JBRCwgU0lOLCBDT1MsIEFUQU4yLCBMT0csIEVYUCwgU1FSVCwgS19NQVgsIEtfTUlOLCBJTlQsIFJBTkQsIFNSQU5ELCBDVywgQ0NXLCBUSElDS05FU1MsIEZJTEwsIENPTE9SRUQsIE9VVExJTkVELCBTSEFERUQsIEFMSUdORUQsIFNQUklOVEYsICcoJywgJ2AnLCAnKycsICctJywgJyEnLCAnOycsICd9JywgJ0A6PkAnXQorICAgMTQ3ICAgICAgfCBsYWJlbCAuIGNvcm5lcgorICAgMTUzIGxhYmVsOiBsYWJlbCAuICcuJyBMQUJFTAorICAgMTgwIGNvcm5lcjogLiBET1RfTgorQEAgLTM2NDUsNyArMzY0NSw3IEBACisgICAgIHRleHRfZXhwciAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEyCisgICAgIHRleHQgICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEzCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMzgwNCw3ICszODA0LDcgQEAKKyAgICAgdGV4dF9leHByICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAyMzkKKyAgICAgdGV4dCAgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTMKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC00NDgxLDcgKzQ0ODEsNyBAQAorICAgICAkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgODkgKG9iamVjdF9zcGVjKQorCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtNDY3Myw3ICs0NjczLDcgQEAKKyAgICAgJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDkxIChvYmplY3Rfc3BlYykKKworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTQ4NjcsNyArNDg2Nyw3IEBACisgICAgICRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA5NSAob2JqZWN0X3NwZWMpCisKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC01MDY1LDcgKzUwNjUsNyBAQAorICAgICAkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgOTMgKG9iamVjdF9zcGVjKQorCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtNTI2MCw3ICs1MjYwLDcgQEAKKyAgICAgJyEnICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDk0CisKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC01NDAzLDcgKzU0MDMsNyBAQAorICAgICAnIScgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTQKKworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTU1NDYsNyArNTU0Niw3IEBACisgICAgICchJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5NAorCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtNTY4OSw3ICs1Njg5LDcgQEAKKyAgICAgJyEnICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDk0CisKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC02NDc1LDcgKzY0NzUsNyBAQAorCisgICAgIGV4cHJfcGFpciAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMjgwCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtNjYzMyw3ICs2NjMzLDcgQEAKKyAgICAgJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDEwNSAob2JqZWN0X3NwZWMpCisKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC02ODI1LDcgKzY4MjUsNyBAQAorICAgICAkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMTA3IChvYmplY3Rfc3BlYykKKworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTcwMTcsNyArNzAxNyw3IEBACisgICAgICRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAxMTQgKG9iamVjdF9zcGVjKQorCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtNzI2NCw3ICs3MjY0LDcgQEAKKyAgICAgJyEnICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDk0CisKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC03NDA4LDcgKzc0MDgsNyBAQAorICAgICAkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMTA5IChvYmplY3Rfc3BlYykKKworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTc4MTksMTIgKzc4MTksMTIgQEAKKyAgICAgcG9zaXRpb25fbm90X3BsYWNlICAgICBnbyB0byBzdGF0ZSAyOTYKKyAgICAgZXhwcl9wYWlyICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDAKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAyOTcKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKKyAgICAgY29ybmVyICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDYKKy0gICAgZXhwciAgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAyNjYKKysgICAgZXhwciAgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjQKKworCisgU3RhdGUgMTY1CitAQCAtNzk4Nyw3ICs3OTg3LDcgQEAKKyAgICAgdGV4dF9leHByICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTIKKyAgICAgdGV4dCAgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTMKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC04MTcyLDcgKzgxNzIsNyBAQAorICAgICB0ZXh0X2V4cHIgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMgorICAgICB0ZXh0ICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTgzMzMsNyArODMzMyw3IEBACisgICAgIHRleHRfZXhwciAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEyCisgICAgIHRleHQgICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEzCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtODQ5NCw3ICs4NDk0LDcgQEAKKyAgICAgdGV4dF9leHByICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTIKKyAgICAgdGV4dCAgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTMKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC04NjU1LDcgKzg2NTUsNyBAQAorICAgICB0ZXh0X2V4cHIgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMgorICAgICB0ZXh0ICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTg4MTYsNyArODgxNiw3IEBACisgICAgIHRleHRfZXhwciAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEyCisgICAgIHRleHQgICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEzCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtODk3Nyw3ICs4OTc3LDcgQEAKKyAgICAgdGV4dF9leHByICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTIKKyAgICAgdGV4dCAgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTMKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC05MTM4LDcgKzkxMzgsNyBAQAorICAgICB0ZXh0X2V4cHIgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMgorICAgICB0ZXh0ICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTkyOTksNyArOTI5OSw3IEBACisgICAgIHRleHRfZXhwciAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEyCisgICAgIHRleHQgICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEzCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtOTQ2MCw3ICs5NDYwLDcgQEAKKyAgICAgdGV4dF9leHByICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTIKKyAgICAgdGV4dCAgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTMKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC05NjIzLDcgKzk2MjMsNyBAQAorICAgICB0ZXh0X2V4cHIgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMgorICAgICB0ZXh0ICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTk3ODQsNyArOTc4NCw3IEBACisgICAgIHRleHRfZXhwciAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEyCisgICAgIHRleHQgICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEzCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtOTkyMSw3ICs5OTIxLDcgQEAKKworICAgICAkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgNDcgKGFueV9leHByKQorCistICAgIGJldHdlZW4gIGdvIHRvIHN0YXRlIDIzNworKyAgICBiZXR3ZWVuICBnbyB0byBzdGF0ZSA0MjUKKworCisgU3RhdGUgMTkzCitAQCAtMTAxNTIsNyArMTAxNTIsNyBAQAorCisgICAgIGV4cHJfcGFpciAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMzE3CisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMTAyOTgsNyArMTAyOTgsNyBAQAorCisgICAgIGV4cHJfcGFpciAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMzE4CisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMTA2MjIsNyArMTA2MjIsNyBAQAorICAgICAnIScgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTQKKworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTEwNzY1LDcgKzEwNzY1LDcgQEAKKyAgICAgJyEnICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDk0CisKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC0xMDkwOCw3ICsxMDkwOCw3IEBACisgICAgICchJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5NAorCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMTEwNTEsNyArMTEwNTEsNyBAQAorICAgICAnIScgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTQKKworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTExMTk0LDcgKzExMTk0LDcgQEAKKyAgICAgJyEnICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDk0CisKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC0xMTMzNyw3ICsxMTMzNyw3IEBACisgICAgICchJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5NAorCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMTE0ODAsNyArMTE0ODAsNyBAQAorICAgICAnIScgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTQKKworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTExNjM3LDcgKzExNjM3LDcgQEAKKyAgICAgcG9zaXRpb25fbm90X3BsYWNlICAgICBnbyB0byBzdGF0ZSA5OQorICAgICBleHByX3BhaXIgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMAorICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMQorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTExNzgwLDcgKzExNzgwLDcgQEAKKyAgICAgJyEnICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDk0CisKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC0xMTkyMyw3ICsxMTkyMyw3IEBACisgICAgICchJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5NAorCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMTIwNjYsNyArMTIwNjYsNyBAQAorICAgICAnIScgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTQKKworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTEyMjA5LDcgKzEyMjA5LDcgQEAKKyAgICAgJyEnICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDk0CisKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC0xMjM1Miw3ICsxMjM1Miw3IEBACisgICAgICchJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5NAorCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMTI0OTUsNyArMTI0OTUsNyBAQAorICAgICAnIScgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTQKKworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTEyNjM4LDcgKzEyNjM4LDcgQEAKKyAgICAgJyEnICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDk0CisKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC0xMjc5NCwxMiArMTI3OTQsMTIgQEAKKyAgICAgcG9zaXRpb25fbm90X3BsYWNlICAgICBnbyB0byBzdGF0ZSA5OQorICAgICBleHByX3BhaXIgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMAorICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMQorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorICAgICBjb3JuZXIgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNgorLSAgICBleHByICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDI2NgorKyAgICBleHByICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyNAorCisKKyBTdGF0ZSAyMzgKK0BAIC0xMjkzNyw3ICsxMjkzNyw3IEBACisgICAgICchJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5NAorCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMTMxNjAsNyArMTMxNjAsNyBAQAorICAgICB0ZXh0X2V4cHIgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDM0MgorICAgICB0ZXh0ICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTEzMzE5LDcgKzEzMzE5LDcgQEAKKyAgICAgdGV4dF9leHByICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAzNDQKKyAgICAgdGV4dCAgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTMKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC0xMzUwMiw3ICsxMzUwMiw3IEBACisgICAgIHRleHRfZXhwciAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMzQ4CisgICAgIHRleHQgICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEzCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMTM2NjEsNyArMTM2NjEsNyBAQAorICAgICB0ZXh0X2V4cHIgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDM1MAorICAgICB0ZXh0ICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTEzODA0LDcgKzEzODA0LDcgQEAKKyAgICAgJyEnICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDk0CisKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC0xNDc0Nyw3ICsxNDc0Nyw3IEBACisgICAgIHBvc2l0aW9uX25vdF9wbGFjZSAgICAgZ28gdG8gc3RhdGUgOTkKKyAgICAgZXhwcl9wYWlyICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxOTEKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDEKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC0xNTA3NCw3ICsxNTA3NCw3IEBACisgICAgIHRleHQgICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEzCisgICAgIGV4cHJfcGFpciAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMzY1CisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMTU2OTMsMTIgKzE1NjkzLDEyIEBACisgICAgIHBvc2l0aW9uX25vdF9wbGFjZSAgICAgZ28gdG8gc3RhdGUgOTkKKyAgICAgZXhwcl9wYWlyICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDAKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDEKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKKyAgICAgY29ybmVyICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDYKKy0gICAgZXhwciAgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAyNjYKKysgICAgZXhwciAgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjQKKworCisgU3RhdGUgMzE1CitAQCAtMTYxMjQsNyArMTYxMjQsNyBAQAorCisgICAgICRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAyMzkgKGV4cHIpCisKKy0gICAgYmV0d2VlbiAgZ28gdG8gc3RhdGUgMjM3CisrICAgIGJldHdlZW4gIGdvIHRvIHN0YXRlIDQyNQorCisgICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAyMzkgYW5kIHRva2VuIE9GIHJlc29sdmVkIGFzIHNoaWZ0ICgnPCcgPCBPRikuCisgICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAyMzkgYW5kIHRva2VuIEJFVFdFRU4gcmVzb2x2ZWQgYXMgc2hpZnQgKCc8JyA8IEJFVFdFRU4pLgorQEAgLTE3MjM0LDcgKzE3MjM0LDcgQEAKKyAgICAgdGV4dF9leHByICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTIKKyAgICAgdGV4dCAgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTMKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC0xNzQxNiw3ICsxNzQxNiw3IEBACisgICAgIHRleHRfZXhwciAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEyCisgICAgIHRleHQgICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEzCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMTc1NzcsNyArMTc1NzcsNyBAQAorICAgICB0ZXh0X2V4cHIgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMgorICAgICB0ZXh0ICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTE3NzcyLDEyICsxNzc3MiwxMiBAQAorICAgICBwb3NpdGlvbl9ub3RfcGxhY2UgICAgIGdvIHRvIHN0YXRlIDk5CisgICAgIGV4cHJfcGFpciAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAwCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAxCistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CisgICAgIGNvcm5lciAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTA2CistICAgIGV4cHIgICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMjY2CisrICAgIGV4cHIgICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDI0CisKKworIFN0YXRlIDM4MworQEAgLTE4MDcxLDcgKzE4MDcxLDcgQEAKKyAgICAgJyEnICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDk0CisKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC0xODIyMSw3ICsxODIyMSw3IEBACisgICAgICchJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5NAorCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMTg4MzAsNyArMTg4MzAsNyBAQAorICAgICAnIScgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTQKKworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTE4OTg3LDcgKzE4OTg3LDcgQEAKKyAgICAgJyEnICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDk0CisKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC0xOTA4OSwzICsxOTA4OSw0NDAgQEAKKyAgICAyOSBwbGFjZWxlc3NfZWxlbWVudDogRk9SIFZBUklBQkxFICc9JyBleHByIFRPIGV4cHIgb3B0aW9uYWxfYnkgRE8gJEA2IERFTElNSVRFRCAuCisKKyAgICAgJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDI5IChwbGFjZWxlc3NfZWxlbWVudCkKKysKKysKKytTdGF0ZSA0MjMKKysKKysgIDE0NiBwbGFjZTogbGFiZWwgLiAgWyRlbmQsIEFORCwgRE9UX1gsIERPVF9ZLCBET1RfSFQsIERPVF9XSUQsIERPVF9SQUQsICcsJywgJz4nLCAnKycsICctJywgJzsnLCAnfScsICdAOj5AJywgJyknXQorKyAgMTQ3ICAgICAgfCBsYWJlbCAuIGNvcm5lcgorKyAgMTUzIGxhYmVsOiBsYWJlbCAuICcuJyBMQUJFTAorKyAgMTgwIGNvcm5lcjogLiBET1RfTgorKyAgMTgxICAgICAgIHwgLiBET1RfRQorKyAgMTgyICAgICAgIHwgLiBET1RfVworKyAgMTgzICAgICAgIHwgLiBET1RfUworKyAgMTg0ICAgICAgIHwgLiBET1RfTkUKKysgIDE4NSAgICAgICB8IC4gRE9UX1NFCisrICAxODYgICAgICAgfCAuIERPVF9OVworKyAgMTg3ICAgICAgIHwgLiBET1RfU1cKKysgIDE4OCAgICAgICB8IC4gRE9UX0MKKysgIDE4OSAgICAgICB8IC4gRE9UX1NUQVJUCisrICAxOTAgICAgICAgfCAuIERPVF9FTkQKKysgIDE5MSAgICAgICB8IC4gVE9QCisrICAxOTIgICAgICAgfCAuIEJPVFRPTQorKyAgMTkzICAgICAgIHwgLiBMRUZUCisrICAxOTQgICAgICAgfCAuIFJJR0hUCisrICAxOTUgICAgICAgfCAuIFVQUEVSIExFRlQKKysgIDE5NiAgICAgICB8IC4gTE9XRVIgTEVGVAorKyAgMTk3ICAgICAgIHwgLiBVUFBFUiBSSUdIVAorKyAgMTk4ICAgICAgIHwgLiBMT1dFUiBSSUdIVAorKyAgMTk5ICAgICAgIHwgLiBMRUZUX0NPUk5FUgorKyAgMjAwICAgICAgIHwgLiBSSUdIVF9DT1JORVIKKysgIDIwMSAgICAgICB8IC4gVVBQRVIgTEVGVF9DT1JORVIKKysgIDIwMiAgICAgICB8IC4gTE9XRVIgTEVGVF9DT1JORVIKKysgIDIwMyAgICAgICB8IC4gVVBQRVIgUklHSFRfQ09STkVSCisrICAyMDQgICAgICAgfCAuIExPV0VSIFJJR0hUX0NPUk5FUgorKyAgMjA1ICAgICAgIHwgLiBOT1JUSAorKyAgMjA2ICAgICAgIHwgLiBTT1VUSAorKyAgMjA3ICAgICAgIHwgLiBFQVNUCisrICAyMDggICAgICAgfCAuIFdFU1QKKysgIDIwOSAgICAgICB8IC4gQ0VOVEVSCisrICAyMTAgICAgICAgfCAuIFNUQVJUCisrICAyMTEgICAgICAgfCAuIEVORAorKworKyAgICBMRUZUICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNTMKKysgICAgUklHSFQgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDU0CisrICAgIERPVF9OICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1NgorKyAgICBET1RfRSAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNTcKKysgICAgRE9UX1cgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDU4CisrICAgIERPVF9TICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1OQorKyAgICBET1RfTkUgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNjAKKysgICAgRE9UX1NFICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDYxCisrICAgIERPVF9OVyAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA2MgorKyAgICBET1RfU1cgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNjMKKysgICAgRE9UX0MgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDY0CisrICAgIERPVF9TVEFSVCAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA2NQorKyAgICBET1RfRU5EICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNjYKKysgICAgVE9QICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDc4CisrICAgIEJPVFRPTSAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA3OQorKyAgICBVUFBFUiAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgODAKKysgICAgTE9XRVIgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDgxCisrICAgIExFRlRfQ09STkVSICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4MgorKyAgICBSSUdIVF9DT1JORVIgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgODMKKysgICAgTk9SVEggICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDg0CisrICAgIFNPVVRIICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4NQorKyAgICBFQVNUICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgODYKKysgICAgV0VTVCAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDg3CisrICAgIENFTlRFUiAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4OAorKyAgICBFTkQgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgODkKKysgICAgU1RBUlQgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDkwCisrICAgICcuJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyMDQKKysKKysgICAgJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDE0NiAocGxhY2UpCisrCisrICAgIGNvcm5lciAgZ28gdG8gc3RhdGUgMjA1CisrCisrCisrU3RhdGUgNDI0CisrCisrICAxNDAgcG9zaXRpb25fbm90X3BsYWNlOiBleHByIC4gYmV0d2VlbiBwb3NpdGlvbiBBTkQgcG9zaXRpb24KKysgIDE0MSAgICAgICAgICAgICAgICAgICB8IGV4cHIgLiAnPCcgcG9zaXRpb24gJywnIHBvc2l0aW9uICc+JworKyAgMTQyIGJldHdlZW46IC4gQkVUV0VFTgorKyAgMTQzICAgICAgICB8IC4gT0YgVEhFIFdBWSBCRVRXRUVOCisrICAxNDQgZXhwcl9wYWlyOiBleHByIC4gJywnIGV4cHIKKysgIDIxOSBleHByOiBleHByIC4gJysnIGV4cHIKKysgIDIyMCAgICAgfCBleHByIC4gJy0nIGV4cHIKKysgIDIyMSAgICAgfCBleHByIC4gJyonIGV4cHIKKysgIDIyMiAgICAgfCBleHByIC4gJy8nIGV4cHIKKysgIDIyMyAgICAgfCBleHByIC4gJyUnIGV4cHIKKysgIDIyNCAgICAgfCBleHByIC4gJ14nIGV4cHIKKysgIDIzOSAgICAgfCBleHByIC4gJzwnIGV4cHIKKysgIDI0MCAgICAgfCBleHByIC4gTEVTU0VRVUFMIGV4cHIKKysgIDI0MSAgICAgfCBleHByIC4gJz4nIGV4cHIKKysgIDI0MiAgICAgfCBleHByIC4gR1JFQVRFUkVRVUFMIGV4cHIKKysgIDI0MyAgICAgfCBleHByIC4gRVFVQUxFUVVBTCBleHByCisrICAyNDQgICAgIHwgZXhwciAuIE5PVEVRVUFMIGV4cHIKKysgIDI0NSAgICAgfCBleHByIC4gQU5EQU5EIGV4cHIKKysgIDI0NiAgICAgfCBleHByIC4gT1JPUiBleHByCisrCisrICAgIE9GICAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyMjAKKysgICAgQkVUV0VFTiAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIyMQorKyAgICBBTkRBTkQgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMjIyCisrICAgIE9ST1IgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyMjMKKysgICAgTk9URVFVQUwgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIyNAorKyAgICBFUVVBTEVRVUFMICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMjI1CisrICAgIExFU1NFUVVBTCAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyMjYKKysgICAgR1JFQVRFUkVRVUFMICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIyNworKyAgICAnLCcgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMjI4CisrICAgICc8JyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyMjkKKysgICAgJz4nICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIzMAorKyAgICAnKycgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMjMxCisrICAgICctJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyMzIKKysgICAgJyonICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIzMworKyAgICAnLycgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMjM0CisrICAgICclJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyMzUKKysgICAgJ14nICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIzNgorKworKyAgICBiZXR3ZWVuICBnbyB0byBzdGF0ZSA0MjUKKysKKysKKytTdGF0ZSA0MjUKKysKKysgIDEzNCBwb3NpdGlvbjogLiBwb3NpdGlvbl9ub3RfcGxhY2UKKysgIDEzNSAgICAgICAgIHwgLiBwbGFjZQorKyAgMTM2IHBvc2l0aW9uX25vdF9wbGFjZTogLiBleHByX3BhaXIKKysgIDEzNyAgICAgICAgICAgICAgICAgICB8IC4gcG9zaXRpb24gJysnIGV4cHJfcGFpcgorKyAgMTM4ICAgICAgICAgICAgICAgICAgIHwgLiBwb3NpdGlvbiAnLScgZXhwcl9wYWlyCisrICAxMzkgICAgICAgICAgICAgICAgICAgfCAuICcoJyBwb3NpdGlvbiAnLCcgcG9zaXRpb24gJyknCisrICAxNDAgICAgICAgICAgICAgICAgICAgfCAuIGV4cHIgYmV0d2VlbiBwb3NpdGlvbiBBTkQgcG9zaXRpb24KKysgIDE0MCAgICAgICAgICAgICAgICAgICB8IGV4cHIgYmV0d2VlbiAuIHBvc2l0aW9uIEFORCBwb3NpdGlvbgorKyAgMTQxICAgICAgICAgICAgICAgICAgIHwgLiBleHByICc8JyBwb3NpdGlvbiAnLCcgcG9zaXRpb24gJz4nCisrICAxNDQgZXhwcl9wYWlyOiAuIGV4cHIgJywnIGV4cHIKKysgIDE0NSAgICAgICAgICB8IC4gJygnIGV4cHJfcGFpciAnKScKKysgIDE0NiBwbGFjZTogLiBsYWJlbAorKyAgMTQ3ICAgICAgfCAuIGxhYmVsIGNvcm5lcgorKyAgMTQ4ICAgICAgfCAuIGNvcm5lciBsYWJlbAorKyAgMTQ5ICAgICAgfCAuIGNvcm5lciBPRiBsYWJlbAorKyAgMTUwICAgICAgfCAuIEhFUkUKKysgIDE1MSBsYWJlbDogLiBMQUJFTAorKyAgMTUyICAgICAgfCAuIG50aF9wcmltaXRpdmUKKysgIDE1MyAgICAgIHwgLiBsYWJlbCAnLicgTEFCRUwKKysgIDE1NCBvcmRpbmFsOiAuIE9SRElOQUwKKysgIDE1NSAgICAgICAgfCAuICdgJyBhbnlfZXhwciBUSAorKyAgMTU2IG9wdGlvbmFsX29yZGluYWxfbGFzdDogLiBMQVNUCisrICAxNTcgICAgICAgICAgICAgICAgICAgICAgfCAuIG9yZGluYWwgTEFTVAorKyAgMTU4IG50aF9wcmltaXRpdmU6IC4gb3JkaW5hbCBvYmplY3RfdHlwZQorKyAgMTU5ICAgICAgICAgICAgICB8IC4gb3B0aW9uYWxfb3JkaW5hbF9sYXN0IG9iamVjdF90eXBlCisrICAxODAgY29ybmVyOiAuIERPVF9OCisrICAxODEgICAgICAgfCAuIERPVF9FCisrICAxODIgICAgICAgfCAuIERPVF9XCisrICAxODMgICAgICAgfCAuIERPVF9TCisrICAxODQgICAgICAgfCAuIERPVF9ORQorKyAgMTg1ICAgICAgIHwgLiBET1RfU0UKKysgIDE4NiAgICAgICB8IC4gRE9UX05XCisrICAxODcgICAgICAgfCAuIERPVF9TVworKyAgMTg4ICAgICAgIHwgLiBET1RfQworKyAgMTg5ICAgICAgIHwgLiBET1RfU1RBUlQKKysgIDE5MCAgICAgICB8IC4gRE9UX0VORAorKyAgMTkxICAgICAgIHwgLiBUT1AKKysgIDE5MiAgICAgICB8IC4gQk9UVE9NCisrICAxOTMgICAgICAgfCAuIExFRlQKKysgIDE5NCAgICAgICB8IC4gUklHSFQKKysgIDE5NSAgICAgICB8IC4gVVBQRVIgTEVGVAorKyAgMTk2ICAgICAgIHwgLiBMT1dFUiBMRUZUCisrICAxOTcgICAgICAgfCAuIFVQUEVSIFJJR0hUCisrICAxOTggICAgICAgfCAuIExPV0VSIFJJR0hUCisrICAxOTkgICAgICAgfCAuIExFRlRfQ09STkVSCisrICAyMDAgICAgICAgfCAuIFJJR0hUX0NPUk5FUgorKyAgMjAxICAgICAgIHwgLiBVUFBFUiBMRUZUX0NPUk5FUgorKyAgMjAyICAgICAgIHwgLiBMT1dFUiBMRUZUX0NPUk5FUgorKyAgMjAzICAgICAgIHwgLiBVUFBFUiBSSUdIVF9DT1JORVIKKysgIDIwNCAgICAgICB8IC4gTE9XRVIgUklHSFRfQ09STkVSCisrICAyMDUgICAgICAgfCAuIE5PUlRICisrICAyMDYgICAgICAgfCAuIFNPVVRICisrICAyMDcgICAgICAgfCAuIEVBU1QKKysgIDIwOCAgICAgICB8IC4gV0VTVAorKyAgMjA5ICAgICAgIHwgLiBDRU5URVIKKysgIDIxMCAgICAgICB8IC4gU1RBUlQKKysgIDIxMSAgICAgICB8IC4gRU5ECisrICAyMTIgZXhwcjogLiBWQVJJQUJMRQorKyAgMjEzICAgICB8IC4gTlVNQkVSCisrICAyMTQgICAgIHwgLiBwbGFjZSBET1RfWAorKyAgMjE1ICAgICB8IC4gcGxhY2UgRE9UX1kKKysgIDIxNiAgICAgfCAuIHBsYWNlIERPVF9IVAorKyAgMjE3ICAgICB8IC4gcGxhY2UgRE9UX1dJRAorKyAgMjE4ICAgICB8IC4gcGxhY2UgRE9UX1JBRAorKyAgMjE5ICAgICB8IC4gZXhwciAnKycgZXhwcgorKyAgMjIwICAgICB8IC4gZXhwciAnLScgZXhwcgorKyAgMjIxICAgICB8IC4gZXhwciAnKicgZXhwcgorKyAgMjIyICAgICB8IC4gZXhwciAnLycgZXhwcgorKyAgMjIzICAgICB8IC4gZXhwciAnJScgZXhwcgorKyAgMjI0ICAgICB8IC4gZXhwciAnXicgZXhwcgorKyAgMjI1ICAgICB8IC4gJy0nIGV4cHIKKysgIDIyNiAgICAgfCAuICcoJyBhbnlfZXhwciAnKScKKysgIDIyNyAgICAgfCAuIFNJTiAnKCcgYW55X2V4cHIgJyknCisrICAyMjggICAgIHwgLiBDT1MgJygnIGFueV9leHByICcpJworKyAgMjI5ICAgICB8IC4gQVRBTjIgJygnIGFueV9leHByICcsJyBhbnlfZXhwciAnKScKKysgIDIzMCAgICAgfCAuIExPRyAnKCcgYW55X2V4cHIgJyknCisrICAyMzEgICAgIHwgLiBFWFAgJygnIGFueV9leHByICcpJworKyAgMjMyICAgICB8IC4gU1FSVCAnKCcgYW55X2V4cHIgJyknCisrICAyMzMgICAgIHwgLiBLX01BWCAnKCcgYW55X2V4cHIgJywnIGFueV9leHByICcpJworKyAgMjM0ICAgICB8IC4gS19NSU4gJygnIGFueV9leHByICcsJyBhbnlfZXhwciAnKScKKysgIDIzNSAgICAgfCAuIElOVCAnKCcgYW55X2V4cHIgJyknCisrICAyMzYgICAgIHwgLiBSQU5EICcoJyBhbnlfZXhwciAnKScKKysgIDIzNyAgICAgfCAuIFJBTkQgJygnICcpJworKyAgMjM4ICAgICB8IC4gU1JBTkQgJygnIGFueV9leHByICcpJworKyAgMjM5ICAgICB8IC4gZXhwciAnPCcgZXhwcgorKyAgMjQwICAgICB8IC4gZXhwciBMRVNTRVFVQUwgZXhwcgorKyAgMjQxICAgICB8IC4gZXhwciAnPicgZXhwcgorKyAgMjQyICAgICB8IC4gZXhwciBHUkVBVEVSRVFVQUwgZXhwcgorKyAgMjQzICAgICB8IC4gZXhwciBFUVVBTEVRVUFMIGV4cHIKKysgIDI0NCAgICAgfCAuIGV4cHIgTk9URVFVQUwgZXhwcgorKyAgMjQ1ICAgICB8IC4gZXhwciBBTkRBTkQgZXhwcgorKyAgMjQ2ICAgICB8IC4gZXhwciBPUk9SIGV4cHIKKysgIDI0NyAgICAgfCAuICchJyBleHByCisrCisrICAgIExBQkVMICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA0OAorKyAgICBWQVJJQUJMRSAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNDkKKysgICAgTlVNQkVSICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDUwCisrICAgIE9SRElOQUwgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1MQorKyAgICBMQVNUICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNTIKKysgICAgTEVGVCAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDUzCisrICAgIFJJR0hUICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1NAorKyAgICBIRVJFICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNTUKKysgICAgRE9UX04gICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDU2CisrICAgIERPVF9FICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1NworKyAgICBET1RfVyAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNTgKKysgICAgRE9UX1MgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDU5CisrICAgIERPVF9ORSAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA2MAorKyAgICBET1RfU0UgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNjEKKysgICAgRE9UX05XICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDYyCisrICAgIERPVF9TVyAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA2MworKyAgICBET1RfQyAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNjQKKysgICAgRE9UX1NUQVJUICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDY1CisrICAgIERPVF9FTkQgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA2NgorKyAgICBTSU4gICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNjcKKysgICAgQ09TICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDY4CisrICAgIEFUQU4yICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA2OQorKyAgICBMT0cgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNzAKKysgICAgRVhQICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDcxCisrICAgIFNRUlQgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA3MgorKyAgICBLX01BWCAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNzMKKysgICAgS19NSU4gICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDc0CisrICAgIElOVCAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA3NQorKyAgICBSQU5EICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNzYKKysgICAgU1JBTkQgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDc3CisrICAgIFRPUCAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA3OAorKyAgICBCT1RUT00gICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNzkKKysgICAgVVBQRVIgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDgwCisrICAgIExPV0VSICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4MQorKyAgICBMRUZUX0NPUk5FUiAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgODIKKysgICAgUklHSFRfQ09STkVSICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDgzCisrICAgIE5PUlRIICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4NAorKyAgICBTT1VUSCAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgODUKKysgICAgRUFTVCAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDg2CisrICAgIFdFU1QgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4NworKyAgICBDRU5URVIgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgODgKKysgICAgRU5EICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDg5CisrICAgIFNUQVJUICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5MAorKyAgICAnKCcgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTEKKysgICAgJ2AnICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDkyCisrICAgICctJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5MworKyAgICAnIScgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTQKKysKKysgICAgcG9zaXRpb24gICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjYKKysgICAgcG9zaXRpb25fbm90X3BsYWNlICAgICBnbyB0byBzdGF0ZSA5OQorKyAgICBleHByX3BhaXIgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMAorKyAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMQorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworKyAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworKyAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorKyAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorKyAgICBjb3JuZXIgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNgorKyAgICBleHByICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyNAorKworKworK1N0YXRlIDQyNgorKworKyAgMTM3IHBvc2l0aW9uX25vdF9wbGFjZTogcG9zaXRpb24gLiAnKycgZXhwcl9wYWlyCisrICAxMzggICAgICAgICAgICAgICAgICAgfCBwb3NpdGlvbiAuICctJyBleHByX3BhaXIKKysgIDE0MCAgICAgICAgICAgICAgICAgICB8IGV4cHIgYmV0d2VlbiBwb3NpdGlvbiAuIEFORCBwb3NpdGlvbgorKworKyAgICBBTkQgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNDI3CisrICAgICcrJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxOTcKKysgICAgJy0nICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE5OAorKworKworK1N0YXRlIDQyNworKworKyAgMTM0IHBvc2l0aW9uOiAuIHBvc2l0aW9uX25vdF9wbGFjZQorKyAgMTM1ICAgICAgICAgfCAuIHBsYWNlCisrICAxMzYgcG9zaXRpb25fbm90X3BsYWNlOiAuIGV4cHJfcGFpcgorKyAgMTM3ICAgICAgICAgICAgICAgICAgIHwgLiBwb3NpdGlvbiAnKycgZXhwcl9wYWlyCisrICAxMzggICAgICAgICAgICAgICAgICAgfCAuIHBvc2l0aW9uICctJyBleHByX3BhaXIKKysgIDEzOSAgICAgICAgICAgICAgICAgICB8IC4gJygnIHBvc2l0aW9uICcsJyBwb3NpdGlvbiAnKScKKysgIDE0MCAgICAgICAgICAgICAgICAgICB8IC4gZXhwciBiZXR3ZWVuIHBvc2l0aW9uIEFORCBwb3NpdGlvbgorKyAgMTQwICAgICAgICAgICAgICAgICAgIHwgZXhwciBiZXR3ZWVuIHBvc2l0aW9uIEFORCAuIHBvc2l0aW9uCisrICAxNDEgICAgICAgICAgICAgICAgICAgfCAuIGV4cHIgJzwnIHBvc2l0aW9uICcsJyBwb3NpdGlvbiAnPicKKysgIDE0NCBleHByX3BhaXI6IC4gZXhwciAnLCcgZXhwcgorKyAgMTQ1ICAgICAgICAgIHwgLiAnKCcgZXhwcl9wYWlyICcpJworKyAgMTQ2IHBsYWNlOiAuIGxhYmVsCisrICAxNDcgICAgICB8IC4gbGFiZWwgY29ybmVyCisrICAxNDggICAgICB8IC4gY29ybmVyIGxhYmVsCisrICAxNDkgICAgICB8IC4gY29ybmVyIE9GIGxhYmVsCisrICAxNTAgICAgICB8IC4gSEVSRQorKyAgMTUxIGxhYmVsOiAuIExBQkVMCisrICAxNTIgICAgICB8IC4gbnRoX3ByaW1pdGl2ZQorKyAgMTUzICAgICAgfCAuIGxhYmVsICcuJyBMQUJFTAorKyAgMTU0IG9yZGluYWw6IC4gT1JESU5BTAorKyAgMTU1ICAgICAgICB8IC4gJ2AnIGFueV9leHByIFRICisrICAxNTYgb3B0aW9uYWxfb3JkaW5hbF9sYXN0OiAuIExBU1QKKysgIDE1NyAgICAgICAgICAgICAgICAgICAgICB8IC4gb3JkaW5hbCBMQVNUCisrICAxNTggbnRoX3ByaW1pdGl2ZTogLiBvcmRpbmFsIG9iamVjdF90eXBlCisrICAxNTkgICAgICAgICAgICAgIHwgLiBvcHRpb25hbF9vcmRpbmFsX2xhc3Qgb2JqZWN0X3R5cGUKKysgIDE4MCBjb3JuZXI6IC4gRE9UX04KKysgIDE4MSAgICAgICB8IC4gRE9UX0UKKysgIDE4MiAgICAgICB8IC4gRE9UX1cKKysgIDE4MyAgICAgICB8IC4gRE9UX1MKKysgIDE4NCAgICAgICB8IC4gRE9UX05FCisrICAxODUgICAgICAgfCAuIERPVF9TRQorKyAgMTg2ICAgICAgIHwgLiBET1RfTlcKKysgIDE4NyAgICAgICB8IC4gRE9UX1NXCisrICAxODggICAgICAgfCAuIERPVF9DCisrICAxODkgICAgICAgfCAuIERPVF9TVEFSVAorKyAgMTkwICAgICAgIHwgLiBET1RfRU5ECisrICAxOTEgICAgICAgfCAuIFRPUAorKyAgMTkyICAgICAgIHwgLiBCT1RUT00KKysgIDE5MyAgICAgICB8IC4gTEVGVAorKyAgMTk0ICAgICAgIHwgLiBSSUdIVAorKyAgMTk1ICAgICAgIHwgLiBVUFBFUiBMRUZUCisrICAxOTYgICAgICAgfCAuIExPV0VSIExFRlQKKysgIDE5NyAgICAgICB8IC4gVVBQRVIgUklHSFQKKysgIDE5OCAgICAgICB8IC4gTE9XRVIgUklHSFQKKysgIDE5OSAgICAgICB8IC4gTEVGVF9DT1JORVIKKysgIDIwMCAgICAgICB8IC4gUklHSFRfQ09STkVSCisrICAyMDEgICAgICAgfCAuIFVQUEVSIExFRlRfQ09STkVSCisrICAyMDIgICAgICAgfCAuIExPV0VSIExFRlRfQ09STkVSCisrICAyMDMgICAgICAgfCAuIFVQUEVSIFJJR0hUX0NPUk5FUgorKyAgMjA0ICAgICAgIHwgLiBMT1dFUiBSSUdIVF9DT1JORVIKKysgIDIwNSAgICAgICB8IC4gTk9SVEgKKysgIDIwNiAgICAgICB8IC4gU09VVEgKKysgIDIwNyAgICAgICB8IC4gRUFTVAorKyAgMjA4ICAgICAgIHwgLiBXRVNUCisrICAyMDkgICAgICAgfCAuIENFTlRFUgorKyAgMjEwICAgICAgIHwgLiBTVEFSVAorKyAgMjExICAgICAgIHwgLiBFTkQKKysgIDIxMiBleHByOiAuIFZBUklBQkxFCisrICAyMTMgICAgIHwgLiBOVU1CRVIKKysgIDIxNCAgICAgfCAuIHBsYWNlIERPVF9YCisrICAyMTUgICAgIHwgLiBwbGFjZSBET1RfWQorKyAgMjE2ICAgICB8IC4gcGxhY2UgRE9UX0hUCisrICAyMTcgICAgIHwgLiBwbGFjZSBET1RfV0lECisrICAyMTggICAgIHwgLiBwbGFjZSBET1RfUkFECisrICAyMTkgICAgIHwgLiBleHByICcrJyBleHByCisrICAyMjAgICAgIHwgLiBleHByICctJyBleHByCisrICAyMjEgICAgIHwgLiBleHByICcqJyBleHByCisrICAyMjIgICAgIHwgLiBleHByICcvJyBleHByCisrICAyMjMgICAgIHwgLiBleHByICclJyBleHByCisrICAyMjQgICAgIHwgLiBleHByICdeJyBleHByCisrICAyMjUgICAgIHwgLiAnLScgZXhwcgorKyAgMjI2ICAgICB8IC4gJygnIGFueV9leHByICcpJworKyAgMjI3ICAgICB8IC4gU0lOICcoJyBhbnlfZXhwciAnKScKKysgIDIyOCAgICAgfCAuIENPUyAnKCcgYW55X2V4cHIgJyknCisrICAyMjkgICAgIHwgLiBBVEFOMiAnKCcgYW55X2V4cHIgJywnIGFueV9leHByICcpJworKyAgMjMwICAgICB8IC4gTE9HICcoJyBhbnlfZXhwciAnKScKKysgIDIzMSAgICAgfCAuIEVYUCAnKCcgYW55X2V4cHIgJyknCisrICAyMzIgICAgIHwgLiBTUVJUICcoJyBhbnlfZXhwciAnKScKKysgIDIzMyAgICAgfCAuIEtfTUFYICcoJyBhbnlfZXhwciAnLCcgYW55X2V4cHIgJyknCisrICAyMzQgICAgIHwgLiBLX01JTiAnKCcgYW55X2V4cHIgJywnIGFueV9leHByICcpJworKyAgMjM1ICAgICB8IC4gSU5UICcoJyBhbnlfZXhwciAnKScKKysgIDIzNiAgICAgfCAuIFJBTkQgJygnIGFueV9leHByICcpJworKyAgMjM3ICAgICB8IC4gUkFORCAnKCcgJyknCisrICAyMzggICAgIHwgLiBTUkFORCAnKCcgYW55X2V4cHIgJyknCisrICAyMzkgICAgIHwgLiBleHByICc8JyBleHByCisrICAyNDAgICAgIHwgLiBleHByIExFU1NFUVVBTCBleHByCisrICAyNDEgICAgIHwgLiBleHByICc+JyBleHByCisrICAyNDIgICAgIHwgLiBleHByIEdSRUFURVJFUVVBTCBleHByCisrICAyNDMgICAgIHwgLiBleHByIEVRVUFMRVFVQUwgZXhwcgorKyAgMjQ0ICAgICB8IC4gZXhwciBOT1RFUVVBTCBleHByCisrICAyNDUgICAgIHwgLiBleHByIEFOREFORCBleHByCisrICAyNDYgICAgIHwgLiBleHByIE9ST1IgZXhwcgorKyAgMjQ3ICAgICB8IC4gJyEnIGV4cHIKKysKKysgICAgTEFCRUwgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDQ4CisrICAgIFZBUklBQkxFICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA0OQorKyAgICBOVU1CRVIgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNTAKKysgICAgT1JESU5BTCAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDUxCisrICAgIExBU1QgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1MgorKyAgICBMRUZUICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNTMKKysgICAgUklHSFQgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDU0CisrICAgIEhFUkUgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1NQorKyAgICBET1RfTiAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNTYKKysgICAgRE9UX0UgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDU3CisrICAgIERPVF9XICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1OAorKyAgICBET1RfUyAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNTkKKysgICAgRE9UX05FICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDYwCisrICAgIERPVF9TRSAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA2MQorKyAgICBET1RfTlcgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNjIKKysgICAgRE9UX1NXICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDYzCisrICAgIERPVF9DICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA2NAorKyAgICBET1RfU1RBUlQgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNjUKKysgICAgRE9UX0VORCAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDY2CisrICAgIFNJTiAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA2NworKyAgICBDT1MgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNjgKKysgICAgQVRBTjIgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDY5CisrICAgIExPRyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA3MAorKyAgICBFWFAgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNzEKKysgICAgU1FSVCAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDcyCisrICAgIEtfTUFYICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA3MworKyAgICBLX01JTiAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNzQKKysgICAgSU5UICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDc1CisrICAgIFJBTkQgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA3NgorKyAgICBTUkFORCAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNzcKKysgICAgVE9QICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDc4CisrICAgIEJPVFRPTSAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA3OQorKyAgICBVUFBFUiAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgODAKKysgICAgTE9XRVIgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDgxCisrICAgIExFRlRfQ09STkVSICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4MgorKyAgICBSSUdIVF9DT1JORVIgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgODMKKysgICAgTk9SVEggICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDg0CisrICAgIFNPVVRIICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4NQorKyAgICBFQVNUICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgODYKKysgICAgV0VTVCAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDg3CisrICAgIENFTlRFUiAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4OAorKyAgICBFTkQgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgODkKKysgICAgU1RBUlQgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDkwCisrICAgICcoJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5MQorKyAgICAnYCcgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTIKKysgICAgJy0nICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDkzCisrICAgICchJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5NAorKworKyAgICBwb3NpdGlvbiAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQwMgorKyAgICBwb3NpdGlvbl9ub3RfcGxhY2UgICAgIGdvIHRvIHN0YXRlIDk5CisrICAgIGV4cHJfcGFpciAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAwCisrICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAxCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisrICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisrICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisrICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CisrICAgIGNvcm5lciAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTA2CisrICAgIGV4cHIgICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDI0CitdXSldLAorCitkbmwgT1RIRVItQ0hFQ0tTCitbXSwKKworZG5sIFBBUlNFUi1FWElULVZBTFVFLCBQQVJTRVItU1RET1VULCBQQVJTRVItU1RERVJSCitbQVRfQ09ORF9DQVNFKFtbTEFMUl1dLCBbWzFdXSwgW1swXV0pXSwKK1tdLAorW0FUX0NPTkRfQ0FTRShbW0xBTFJdXSwKK1tbc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIExFRlQKK11dKV0pCmRpZmYgLS1naXQgYS90ZXN0cy9nbHItcmVncmVzc2lvbi5hdCBiL3Rlc3RzL2dsci1yZWdyZXNzaW9uLmF0CmluZGV4IDllM2NlYzcuLmUwODkwNGIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2dsci1yZWdyZXNzaW9uLmF0CisrKyBiL3Rlc3RzL2dsci1yZWdyZXNzaW9uLmF0CkBAIC0xLDQwICsxLDQzIEBACiAjIENoZWNraW5nIEdMUiBQYXJzaW5nOiBSZWdyZXNzaW9uIFRlc3RzICAgICAgICAgICAtKi0gQXV0b3Rlc3QgLSotCi0jIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMywgMjAwNS0yMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIyBhbnkgbGF0ZXIgdmVyc2lvbi4KLQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIwogIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCisjCiAjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSMgMDIxMTAtMTMwMSwgVVNBLgorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIAogQVRfQkFOTkVSKFtbR0xSIFJlZ3Jlc3Npb24gVGVzdHNdXSkKIAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBCYWRseSBDb2xsYXBzZWQgR0xSIFN0YXRlcy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQmFkbHkgQ29sbGFwc2VkIEdMUiBTdGF0ZXMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogCiBBVF9TRVRVUChbQmFkbHkgQ29sbGFwc2VkIEdMUiBTdGF0ZXNdKQogCitBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMKIEFUX0RBVEFfR1JBTU1BUihbZ2xyLXJlZ3IxLnldLAogW1svKiBSZWdyZXNzaW9uIFRlc3Q6IEltcHJvcGVyIHN0YXRlIGNvbXByZXNzaW9uICovCiAvKiBSZXBvcnRlZCBieSBTY290dCBNY1BlYWsgKi8KIAogJXsKICNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgogCiAjZGVmaW5lIFlZU1RZUEUgaW50CiBzdGF0aWMgWVlTVFlQRSBleHByTWVyZ2UgKFlZU1RZUEUgeDAsIFlZU1RZUEUgeDEpOwotaW50IHl5bGV4ICh2b2lkKTsKLXZvaWQgeXllcnJvciAoY2hhciBjb25zdCAqbXNnKTsKK11BVF9ZWUVSUk9SX0RFQ0xBUkVbCitdQVRfWVlMRVhfREVDTEFSRVsKICV9CiAKIApAQCAtNjQsMzggKzY3LDMxIEBACiAgIHJldHVybiAwOwogfQogCitjb25zdCBjaGFyICppbnB1dCA9IFlZX05VTEw7CisKIGludAotbWFpbiAodm9pZCkKK21haW4gKGludCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2W10pCiB7CisgIGFzc2VydCAoYXJnYyA9PSAyKTsKKyAgaW5wdXQgPSBhcmd2WzFdOwogICByZXR1cm4geXlwYXJzZSAoKTsKIH0KIAotdm9pZAoteXllcnJvciAoY2hhciBjb25zdCAqbXNnKQotewotICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKLX0KLQorXUFUX1lZRVJST1JfREVGSU5FWwogCiBpbnQKIHl5bGV4ICh2b2lkKQogewotICBmb3IgKDs7KQotICAgIHsKLSAgICAgIGludCBjaCA9IGdldGNoYXIgKCk7Ci0gICAgICBpZiAoY2ggPT0gRU9GKQotCXJldHVybiAwOwotICAgICAgZWxzZSBpZiAoY2ggPT0gJ0InIHx8IGNoID09ICdQJykKLQlyZXR1cm4gY2g7Ci0gICAgfQorICByZXR1cm4gKmlucHV0Kys7CiB9CiBdXSkKK0FUX0JJU09OX09QVElPTl9QT1BERUZTCiAKLUFUX0NIRUNLKFtbYmlzb24gLW8gZ2xyLXJlZ3IxLmMgZ2xyLXJlZ3IxLnldXSwgMCwgW10sCitBVF9CSVNPTl9DSEVDSyhbWy1vIGdsci1yZWdyMS5jIGdsci1yZWdyMS55XV0sIDAsIFtdLAogW2dsci1yZWdyMS55OiBjb25mbGljdHM6IDEgc2hpZnQvcmVkdWNlCiBdKQogQVRfQ09NUElMRShbZ2xyLXJlZ3IxXSkKLUFUX0NIRUNLKFtbZWNobyBCUEJQQiB8IC4vZ2xyLXJlZ3IxXV0sIDAsCitBVF9QQVJTRVJfQ0hFQ0soW1suL2dsci1yZWdyMSBCUEJQQl1dLCAwLAogW1tFIC0+ICdCJwogRSAtPiAnQicKIEUgLT4gRSAnUCcgRQpAQCAtMTA5LDEyICsxMDUsMTMgQEAKIAogQVRfQ0xFQU5VUAogCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIEltcHJvcGVyIGhhbmRsaW5nIG9mIGVtYmVkZGVkIGFjdGlvbnMgYW5kICQtTiBpbiBHTFIgcGFyc2VycyAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgSW1wcm9wZXIgaGFuZGxpbmcgb2YgZW1iZWRkZWQgYWN0aW9ucyBhbmQgJC1OIGluIEdMUiBwYXJzZXJzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAKIEFUX1NFVFVQKFtJbXByb3BlciBoYW5kbGluZyBvZiBlbWJlZGRlZCBhY3Rpb25zIGFuZCBkb2xsYXIoLU4pIGluIEdMUiBwYXJzZXJzXSkKIAorQVRfQklTT05fT1BUSU9OX1BVU0hERUZTCiBBVF9EQVRBX0dSQU1NQVIoW2dsci1yZWdyMmEueV0sCiBbWy8qIFJlZ3Jlc3Npb24gVGVzdDogSW1wcm9wZXIgaGFuZGxpbmcgb2YgZW1iZWRkZWQgYWN0aW9ucyBhbmQgJC1OICAqLwogLyogUmVwb3J0ZWQgYnkgUy4gRWtlbiAqLwpAQCAtMTI2LDggKzEyMyw5IEBACiAgICNpbmNsdWRlIDxzdGRpby5oPgogICAjaW5jbHVkZSA8c3RkbGliLmg+CiAgICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAgaW50IHl5bGV4ICh2b2lkKTsKLSAgdm9pZCB5eWVycm9yIChjaGFyIGNvbnN0ICopOworICAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgIF1BVF9ZWUVSUk9SX0RFQ0xBUkVbCisgIF1BVF9ZWUxFWF9ERUNMQVJFWwogJX0KIAogJWdsci1wYXJzZXIKQEAgLTE2NywxNSArMTY1LDE3IEBACiAgICB7IHByaW50ZiAoIlZhcmlhYmxlOiAnJXMnXG4iLCAkLTEpOyB9CiAKICUlCi0KLUZJTEUgKmlucHV0ID0gTlVMTDsKK11BVF9ZWUVSUk9SX0RFRklORVsKK0ZJTEUgKmlucHV0OwogCiBpbnQKIHl5bGV4ICh2b2lkKQogewogICBjaGFyIGJ1Zls1MF07CiAgIGNoYXIgKnM7Ci0gIHN3aXRjaCAoZnNjYW5mIChpbnB1dCwgIiAlMVthLXosXSIsIGJ1ZikpIHsKKyAgYXNzZXJ0ICghZmVvZiAoc3RkaW4pKTsKKyAgc3dpdGNoIChmc2NhbmYgKGlucHV0LCAiICUxW2EteixdIiwgYnVmKSkKKyAgewogICBjYXNlIDE6CiAgICAgcmV0dXJuIGJ1ZlswXTsKICAgY2FzZSBFT0Y6CkBAIC0xODUsNjMgKzE4NSw3OCBAQAogICB9CiAgIGlmIChmc2NhbmYgKGlucHV0LCAiJTQ5cyIsIGJ1ZikgIT0gMSkKICAgICByZXR1cm4gMDsKLSAgaWYgKHNpemVvZiBidWYgLSAxIDw9IHN0cmxlbiAoYnVmKSkKLSAgICBhYm9ydCAoKTsKKyAgYXNzZXJ0IChzdHJsZW4gKGJ1ZikgPCBzaXplb2YgYnVmIC0gMSk7CiAgIHMgPSAoY2hhciAqKSBtYWxsb2MgKHN0cmxlbiAoYnVmKSArIDEpOwogICBzdHJjcHkgKHMsIGJ1Zik7CiAgIHl5bHZhbCA9IHM7CiAgIHJldHVybiAnVic7CiB9CiAKLXZvaWQKLXl5ZXJyb3IgKGNoYXIgY29uc3QgKnMpCi17IHByaW50ZiAoIiVzXG4iLCBzKTsKLX0KLQogaW50CiBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CisgIGludCByZXM7CiAgIGlucHV0ID0gc3RkaW47Ci0gIGlmIChhcmdjID09IDIgJiYgIShpbnB1dCA9IGZvcGVuIChhcmd2WzFdLCAiciIpKSkgcmV0dXJuIDM7Ci0gIHJldHVybiB5eXBhcnNlICgpOworICBpZiAoYXJnYyA9PSAyICYmICEoaW5wdXQgPSBmb3BlbiAoYXJndlsxXSwgInIiKSkpCisgICAgcmV0dXJuIDM7CisgIHJlcyA9IHl5cGFyc2UgKCk7CisgIGlmIChhcmdjID09IDIgJiYgZmNsb3NlIChpbnB1dCkpCisgICAgcmV0dXJuIDQ7CisgIHJldHVybiByZXM7CiB9CiBdXSkKK0FUX0JJU09OX09QVElPTl9QT1BERUZTCiAKLUFUX0NIRUNLKFtbYmlzb24gLW8gZ2xyLXJlZ3IyYS5jIGdsci1yZWdyMmEueV1dLCAwLCBbXSwKK0FUX0JJU09OX0NIRUNLKFtbLW8gZ2xyLXJlZ3IyYS5jIGdsci1yZWdyMmEueV1dLCAwLCBbXSwKIFtnbHItcmVncjJhLnk6IGNvbmZsaWN0czogMiBzaGlmdC9yZWR1Y2UKIF0pCiBBVF9DT01QSUxFKFtnbHItcmVncjJhXSkKIAotQVRfQ0hFQ0soW1tlY2hvIHMgVkFSSUFCTEVfMSB0IHYgeCBxIHwgLi9nbHItcmVncjJhXV0sIDAsCitBVF9EQVRBKFtpbnB1dDEudHh0XSwKK1tbcyBWQVJJQUJMRV8xIHQgdiB4IHEKK11dKQorQVRfUEFSU0VSX0NIRUNLKFtbLi9nbHItcmVncjJhIGlucHV0MS50eHRdXSwgMCwKIFtbVmFyaWFibGU6ICdWQVJJQUJMRV8xJwotXV0sIFtdKQotQVRfQ0hFQ0soW1tlY2hvIHMgVkFSSUFCTEVfMSAsIEFOT1RIRVJfVkFSSUFCTEVfMiB0IGUgfCAuL2dsci1yZWdyMmFdXSwgMCwKK11dKQorCitBVF9EQVRBKFtpbnB1dDIudHh0XSwKK1tbcyBWQVJJQUJMRV8xICwgQU5PVEhFUl9WQVJJQUJMRV8yIHQgZQorXV0pCitBVF9QQVJTRVJfQ0hFQ0soW1suL2dsci1yZWdyMmEgaW5wdXQyLnR4dF1dLAorMCwKIFtbVmFybGlzdDogJ1ZBUklBQkxFXzEsQU5PVEhFUl9WQVJJQUJMRV8yJwogXV0pCi1BVF9DSEVDSyhbW2VjaG8gcyBWQVJJQUJMRV8zIHQgdiB4IHwgLi9nbHItcmVncjJhXV0sIDAsCisKK0FUX0RBVEEoW2lucHV0My50eHRdLAorW1tzIFZBUklBQkxFXzMgdCB2IHgKK11dKQorQVRfUEFSU0VSX0NIRUNLKFtbLi9nbHItcmVncjJhIGlucHV0My50eHRdXSwgMCwKIFtbVmFyaWFibGU6ICdWQVJJQUJMRV8zJwotXV0sIFtdKQorXV0pCiAKIAogQVRfQ0xFQU5VUAogCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIEltcHJvcGVyIG1lcmdpbmcgb2YgR0xSIGRlbGF5ZWQgYWN0aW9uIHNldHMgICAgICAgICAgICAgICAgICAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEltcHJvcGVyIG1lcmdpbmcgb2YgR0xSIGRlbGF5ZWQgYWN0aW9uIHNldHMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAKIEFUX1NFVFVQKFtJbXByb3BlciBtZXJnaW5nIG9mIEdMUiBkZWxheWVkIGFjdGlvbiBzZXRzXSkKIAorQVRfQklTT05fT1BUSU9OX1BVU0hERUZTCiBBVF9EQVRBX0dSQU1NQVIoW2dsci1yZWdyMy55XSwKIFtbLyogUmVncmVzc2lvbiBUZXN0OiBJbXByb3BlciBtZXJnaW5nIG9mIEdMUiBkZWxheWVkIGFjdGlvbiBzZXRzLiAgKi8KIC8qIFJlcG9ydGVkIGJ5IE0uIFJvc2llbiAqLwogCiAlewogI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAKIHN0YXRpYyBpbnQgTWVyZ2VSdWxlIChpbnQgeDAsIGludCB4MSk7Ci1zdGF0aWMgdm9pZCB5eWVycm9yIChjaGFyIGNvbnN0ICogcyk7Ci1pbnQgeXlsZXggKHZvaWQpOworXUFUX1lZRVJST1JfREVDTEFSRVsKK11BVF9ZWUxFWF9ERUNMQVJFWwogCiAjZGVmaW5lIFJVTEUoeCkgKDEgPDwgKHgpKQogCkBAIC0yODIsMTUgKzI5NywxNCBAQAogCiAlJQogCi1zdGF0aWMgaW50IE1lcmdlUnVsZSAoaW50IHgwLCBpbnQgeDEpIHsKK3N0YXRpYyBpbnQKK01lcmdlUnVsZSAoaW50IHgwLCBpbnQgeDEpCit7CiAgIHJldHVybiB4MCB8IHgxOwogfQorXUFUX1lZRVJST1JfREVGSU5FWwogCi1zdGF0aWMgdm9pZCB5eWVycm9yKGNoYXIgY29uc3QgKiBzKSB7Ci0gIGZwcmludGYoc3RkZXJyLCJlcnJvcjogJXNcbiIscyk7Ci19Ci0KLUZJTEUgKmlucHV0ID0gTlVMTDsKK0ZJTEUgKmlucHV0ID0gWVlfTlVMTDsKIAogaW50IFBbXSA9IHsgUDEsIFAyIH07CiBpbnQgT1tdID0geyBPMSwgTzIgfTsKQEAgLTI5OSw2ICszMTMsNyBAQAogaW50IHl5bGV4ICh2b2lkKQogewogICBjaGFyIGlucFszXTsKKyAgYXNzZXJ0ICghZmVvZiAoc3RkaW4pKTsKICAgaWYgKGZzY2FuZiAoaW5wdXQsICIlMnMiLCBpbnApID09IEVPRikKICAgICByZXR1cm4gMDsKICAgc3dpdGNoIChpbnBbMF0pCkBAIC0zMTAsMzIgKzMyNSw0NSBAQAogICByZXR1cm4gQkFEX0NIQVI7CiB9CiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pIHsKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQoreworICBpbnQgcmVzOwogICBpbnB1dCA9IHN0ZGluOwotICBpZiAoYXJnYyA9PSAyICYmICEoaW5wdXQgPSBmb3BlbiAoYXJndlsxXSwgInIiKSkpIHJldHVybiAzOwotICByZXR1cm4geXlwYXJzZSAoKTsKKyAgaWYgKGFyZ2MgPT0gMiAmJiAhKGlucHV0ID0gZm9wZW4gKGFyZ3ZbMV0sICJyIikpKQorICAgIHJldHVybiAzOworICByZXMgPSB5eXBhcnNlICgpOworICBpZiAoYXJnYyA9PSAyICYmIGZjbG9zZSAoaW5wdXQpKQorICAgIHJldHVybiA0OworICByZXR1cm4gcmVzOwogfQogXV0pCitBVF9CSVNPTl9PUFRJT05fUE9QREVGUwogCi1BVF9DSEVDSyhbW2Jpc29uIC1vIGdsci1yZWdyMy5jIGdsci1yZWdyMy55XV0sIDAsIFtdLAorQVRfQklTT05fQ0hFQ0soW1stbyBnbHItcmVncjMuYyBnbHItcmVncjMueV1dLCAwLCBbXSwKIFtnbHItcmVncjMueTogY29uZmxpY3RzOiAxIHNoaWZ0L3JlZHVjZSwgMSByZWR1Y2UvcmVkdWNlCiBdKQogQVRfQ09NUElMRShbZ2xyLXJlZ3IzXSkKIAotQVRfQ0hFQ0soW1tlY2hvIHAxIHQ0IG8yIHAxIHAxIHQxIG8xIHQyIHAyIG8xIHQzIHAyIHAyIHwgLi9nbHItcmVncjNdXSwgMCwKK0FUX0RBVEEoW2lucHV0LnR4dF0sCitbW3AxIHQ0IG8yIHAxIHAxIHQxIG8xIHQyIHAyIG8xIHQzIHAyIHAyCitdXSkKK0FUX1BBUlNFUl9DSEVDSyhbWy4vZ2xyLXJlZ3IzIGlucHV0LnR4dF1dLAorMCwKIFtbUmVzdWx0OiAxYzA0Ci1dXSwgW10pCitdXSkKIAogQVRfQ0xFQU5VUAogCiAKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIER1cGxpY2F0ZSByZXByZXNlbnRhdGlvbiBvZiBtZXJnZWQgdHJlZXMuICBTZWUJCQkgICAgICMjCi0jIyA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2hlbHAtYmlzb24vMjAwNS0wNy9tc2cwMDAxMy5odG1sPi4gICAgICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBEdXBsaWNhdGUgcmVwcmVzZW50YXRpb24gb2YgbWVyZ2VkIHRyZWVzLiAgU2VlICAgICAgICAgICAgICAgICAgICAgICAgICMjCisjIyA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2hlbHAtYmlzb24vMjAwNS0wNy9tc2cwMDAxMy5odG1sPi4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAKIEFUX1NFVFVQKFtEdXBsaWNhdGUgcmVwcmVzZW50YXRpb24gb2YgbWVyZ2VkIHRyZWVzXSkKIAorQVRfQklTT05fT1BUSU9OX1BVU0hERUZTCiBBVF9EQVRBX0dSQU1NQVIoW2dsci1yZWdyNC55XSwKIFtbCiAldW5pb24geyBjaGFyICpwdHI7IH0KQEAgLTM0OCw4ICszNzYsMTAgQEAKICAgI2luY2x1ZGUgPHN0cmluZy5oPgogICBzdGF0aWMgY2hhciAqbWVyZ2UgKFlZU1RZUEUsIFlZU1RZUEUpOwogICBzdGF0aWMgY2hhciAqbWFrZV92YWx1ZSAoY2hhciBjb25zdCAqLCBjaGFyIGNvbnN0ICopOwotICBzdGF0aWMgdm9pZCB5eWVycm9yIChjaGFyIGNvbnN0ICopOwotICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKKyAgXUFUX1lZRVJST1JfREVDTEFSRVsKKyAgXUFUX1lZTEVYX0RFQ0xBUkVbCisgIHN0YXRpYyBjaGFyICpwdHJzWzEwMF07CisgIHN0YXRpYyBjaGFyICoqcHRyc19uZXh0ID0gcHRyczsKICV9CiAKICUlCkBAIC0zNzEsMjUgKzQwMSwyMyBAQAogQjogICdhJyB7ICQkID0gbWFrZV92YWx1ZSAoIkIiLCAiJ2EnIik7ICB9IDsKIAogJSUKLQotc3RhdGljIGludAoteXlsZXggKHZvaWQpCi17Ci0gIHN0YXRpYyBjaGFyIGNvbnN0ICppbnB1dCA9ICJhIjsKLSAgcmV0dXJuICppbnB1dCsrOwotfQorXUFUX1lZRVJST1JfREVGSU5FWworXUFUX1lZTEVYX0RFRklORShbImEiXSlbCiAKIGludAogbWFpbiAodm9pZCkKIHsKLSAgcmV0dXJuIHl5cGFyc2UgKCk7CisgIGludCBzdGF0dXMgPSB5eXBhcnNlICgpOworICB3aGlsZSAocHRyc19uZXh0ICE9IHB0cnMpCisgICAgZnJlZSAoKi0tcHRyc19uZXh0KTsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIGNoYXIgKgogbWFrZV92YWx1ZSAoY2hhciBjb25zdCAqcGFyZW50LCBjaGFyIGNvbnN0ICpjaGlsZCkKIHsKICAgY2hhciBjb25zdCBmb3JtYXRbXSA9ICIlcyA8LSAlcyI7Ci0gIGNoYXIgKnZhbHVlID0KKyAgY2hhciAqdmFsdWUgPSAqcHRyc19uZXh0KysgPQogICAgIChjaGFyICopIG1hbGxvYyAoc3RybGVuIChwYXJlbnQpICsgc3RybGVuIChjaGlsZCkgKyBzaXplb2YgZm9ybWF0KTsKICAgc3ByaW50ZiAodmFsdWUsIGZvcm1hdCwgcGFyZW50LCBjaGlsZCk7CiAgIHJldHVybiB2YWx1ZTsKQEAgLTM5OSw0NSArNDI3LDQxIEBACiBtZXJnZSAoWVlTVFlQRSBzMSwgWVlTVFlQRSBzMikKIHsKICAgY2hhciBjb25zdCBmb3JtYXRbXSA9ICJtZXJnZXsgJXMgYW5kICVzIH0iOwotICBjaGFyICp2YWx1ZSA9CisgIGNoYXIgKnZhbHVlID0gKnB0cnNfbmV4dCsrID0KICAgICAoY2hhciAqKSBtYWxsb2MgKHN0cmxlbiAoczEucHRyKSArIHN0cmxlbiAoczIucHRyKSArIHNpemVvZiBmb3JtYXQpOwogICBzcHJpbnRmICh2YWx1ZSwgZm9ybWF0LCBzMS5wdHIsIHMyLnB0cik7CiAgIHJldHVybiB2YWx1ZTsKIH0KLQotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKGNoYXIgY29uc3QgKm1zZykKLXsKLSAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Ci19CiBdXSkKK0FUX0JJU09OX09QVElPTl9QT1BERUZTCiAKLUFUX0NIRUNLKFtbYmlzb24gLW8gZ2xyLXJlZ3I0LmMgZ2xyLXJlZ3I0LnldXSwgMCwgW10sCitBVF9CSVNPTl9DSEVDSyhbWy1vIGdsci1yZWdyNC5jIGdsci1yZWdyNC55XV0sIDAsIFtdLAogW2dsci1yZWdyNC55OiBjb25mbGljdHM6IDEgcmVkdWNlL3JlZHVjZQogXSkKIEFUX0NPTVBJTEUoW2dsci1yZWdyNF0pCiAKLUFUX0NIRUNLKFtbLi9nbHItcmVncjRdXSwgMCwKK0FUX1BBUlNFUl9DSEVDSyhbWy4vZ2xyLXJlZ3I0XV0sIDAsCiBbW21lcmdleyBTIDwtIG1lcmdleyBBIDwtIEExIDwtICdhJyBhbmQgQSA8LSBBMiA8LSAnYScgfSBhbmQgUyA8LSBCIDwtICdhJyB9CiBdXSwgW10pCiAKIEFUX0NMRUFOVVAKIAogCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgVXNlciBkZXN0cnVjdG9yIGZvciB1bnJlc29sdmVkIEdMUiBzZW1hbnRpYyB2YWx1ZS4gIFNlZQkJICAgICAgIyMKLSMjIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA1LTA4L21zZzAwMDE2Lmh0bWw+LiAgICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgVXNlciBkZXN0cnVjdG9yIGZvciB1bnJlc29sdmVkIEdMUiBzZW1hbnRpYyB2YWx1ZS4gIFNlZSAgICAgICAgICAgICAgICAgICAjIworIyMgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDUtMDgvbXNnMDAwMTYuaHRtbD4uICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogCiBBVF9TRVRVUChbVXNlciBkZXN0cnVjdG9yIGZvciB1bnJlc29sdmVkIEdMUiBzZW1hbnRpYyB2YWx1ZV0pCiAKK0FUX0JJU09OX09QVElPTl9QVVNIREVGUwogQVRfREFUQV9HUkFNTUFSKFtnbHItcmVncjUueV0sCiBbWwogJXsKICAgI2luY2x1ZGUgPHN0ZGlvLmg+CiAgICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAgc3RhdGljIHZvaWQgeXllcnJvciAoY2hhciBjb25zdCAqKTsKLSAgc3RhdGljIGludCB5eWxleCAodm9pZCk7CisgIF1BVF9ZWUVSUk9SX0RFQ0xBUkVbCisgIF1BVF9ZWUxFWF9ERUNMQVJFWwogICBlbnVtIHsgTUFHSUNfVkFMVUUgPSAtMTA1NzgwODEyNSB9OyAvKiBvcmlnaW5hbGx5IGNob3NlbiBhdCByYW5kb20gKi8KICV9CiAKQEAgLTQ2MSw1MyArNDg1LDQzIEBACiAgICA7CiAKICUlCi0KLXN0YXRpYyBpbnQKLXl5bGV4ICh2b2lkKQotewotICBzdGF0aWMgY2hhciBjb25zdCAqaW5wdXQgPSAiYSI7Ci0gIHJldHVybiAqaW5wdXQrKzsKLX0KLQotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKGNoYXIgY29uc3QgKm1zZykKLXsKLSAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Ci19Ci0KK11BVF9ZWUxFWF9ERUZJTkUoWyJhIl0pWworXUFUX1lZRVJST1JfREVGSU5FWwogaW50CiBtYWluICh2b2lkKQogewogICByZXR1cm4geXlwYXJzZSAoKSAhPSAxOwogfQogXV0pCitBVF9CSVNPTl9PUFRJT05fUE9QREVGUwogCi1BVF9DSEVDSyhbW2Jpc29uIC1vIGdsci1yZWdyNS5jIGdsci1yZWdyNS55XV0sIDAsIFtdLAorQVRfQklTT05fQ0hFQ0soW1stbyBnbHItcmVncjUuYyBnbHItcmVncjUueV1dLCAwLCBbXSwKIFtnbHItcmVncjUueTogY29uZmxpY3RzOiAxIHJlZHVjZS9yZWR1Y2UKIF0pCiBBVF9DT01QSUxFKFtnbHItcmVncjVdKQogCi1BVF9DSEVDSyhbWy4vZ2xyLXJlZ3I1XV0sIDAsIFtdLAorQVRfUEFSU0VSX0NIRUNLKFtbLi9nbHItcmVncjVdXSwgMCwgW10sCiBbc3ludGF4IGlzIGFtYmlndW91cwogXSkKIAogQVRfQ0xFQU5VUAogCiAKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBVc2VyIGRlc3RydWN0b3IgYWZ0ZXIgYW4gZXJyb3IgZHVyaW5nIGEgc3BsaXQgcGFyc2UuICBTZWUJCSAgICAgICMjCi0jIyA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwNS0wOC9tc2cwMDAyOS5odG1sPi4gICAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFVzZXIgZGVzdHJ1Y3RvciBhZnRlciBhbiBlcnJvciBkdXJpbmcgYSBzcGxpdCBwYXJzZS4gIFNlZSAgICAgICAgICAgICAgICAgIyMKKyMjIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA1LTA4L21zZzAwMDI5Lmh0bWw+LiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKIAogQVRfU0VUVVAoW1VzZXIgZGVzdHJ1Y3RvciBhZnRlciBhbiBlcnJvciBkdXJpbmcgYSBzcGxpdCBwYXJzZV0pCiAKK0FUX0JJU09OX09QVElPTl9QVVNIREVGUwogQVRfREFUQV9HUkFNTUFSKFtnbHItcmVncjYueV0sCiBbWwogJXsKICAgI2luY2x1ZGUgPHN0ZGlvLmg+CiAgICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAgc3RhdGljIHZvaWQgeXllcnJvciAoY2hhciBjb25zdCAqKTsKLSAgc3RhdGljIGludCB5eWxleCAodm9pZCk7CisgIF1BVF9ZWUVSUk9SX0RFQ0xBUkVbCisgIF1BVF9ZWUxFWF9ERUNMQVJFWwogJX0KIAogJWdsci1wYXJzZXIKQEAgLTUyMywzMyArNTM3LDIyIEBACiBzdGFydDogJ2EnIHwgJ2EnIDsKIAogJSUKLQotc3RhdGljIGludAoteXlsZXggKHZvaWQpCi17Ci0gIHN0YXRpYyBjaGFyIGNvbnN0ICppbnB1dCA9ICJhIjsKLSAgcmV0dXJuICppbnB1dCsrOwotfQotCi1zdGF0aWMgdm9pZAoteXllcnJvciAoY2hhciBjb25zdCAqbXNnKQotewotICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKLX0KLQorXUFUX1lZRVJST1JfREVGSU5FWworXUFUX1lZTEVYX0RFRklORShbImEiXSlbCiBpbnQKIG1haW4gKHZvaWQpCiB7CiAgIHJldHVybiB5eXBhcnNlICgpICE9IDE7CiB9CiBdXSkKK0FUX0JJU09OX09QVElPTl9QT1BERUZTCiAKLUFUX0NIRUNLKFtbYmlzb24gLW8gZ2xyLXJlZ3I2LmMgZ2xyLXJlZ3I2LnldXSwgMCwgW10sCitBVF9CSVNPTl9DSEVDSyhbWy1vIGdsci1yZWdyNi5jIGdsci1yZWdyNi55XV0sIDAsIFtdLAogW2dsci1yZWdyNi55OiBjb25mbGljdHM6IDEgcmVkdWNlL3JlZHVjZQogXSkKIEFUX0NPTVBJTEUoW2dsci1yZWdyNl0pCiAKLUFUX0NIRUNLKFtbLi9nbHItcmVncjZdXSwgMCwKK0FUX1BBUlNFUl9DSEVDSyhbWy4vZ2xyLXJlZ3I2XV0sIDAsCiBbRGVzdHJ1Y3RvciBjYWxsZWQuCiBdLAogW3N5bnRheCBpcyBhbWJpZ3VvdXMKQEAgLTU1OSwyOCArNTYyLDM0IEBACiAKIAogIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgRHVwbGljYXRlZCB1c2VyIGRlc3RydWN0b3IgZm9yIGxvb2thaGVhZC4gIFNlZQkJCSAgICAgIyMKKyMjIER1cGxpY2F0ZWQgdXNlciBkZXN0cnVjdG9yIGZvciBsb29rYWhlYWQuICBTZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKICMjIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA1LTA4L21zZzAwMDM1Lmh0bWw+LiAgIyMKICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKIAogQVRfU0VUVVAoW0R1cGxpY2F0ZWQgdXNlciBkZXN0cnVjdG9yIGZvciBsb29rYWhlYWRdKQogCitBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMKIEFUX0RBVEFfR1JBTU1BUihbZ2xyLXJlZ3I3LnldLAogW1sKICV7CiAgICNpbmNsdWRlIDxzdGRpby5oPgogICAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKGNoYXIgY29uc3QgKik7Ci0gIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOworICBdQVRfWVlFUlJPUl9ERUNMQVJFWworICBdQVRfWVlMRVhfREVDTEFSRVsKICAgI2RlZmluZSBZWVNUQUNLRVhQQU5EQUJMRSAwCisgIHR5cGVkZWYgc3RydWN0IGNvdW50X25vZGUgeworICAgIGludCBjb3VudDsKKyAgICBzdHJ1Y3QgY291bnRfbm9kZSAqcHJldjsKKyAgfSBjb3VudF9ub2RlOworICBzdGF0aWMgY291bnRfbm9kZSAqdGFpbDsKICV9CiAKICVnbHItcGFyc2VyCi0ldW5pb24geyBpbnQgKmNvdW50OyB9Ci0ldHlwZSA8Y291bnQ+ICdhJworJXVuaW9uIHsgY291bnRfbm9kZSAqbm9kZTsgfQorJXR5cGUgPG5vZGU+ICdhJwogCiAlZGVzdHJ1Y3RvciB7Ci0gIGlmICgoKiQkKSsrKQorICBpZiAoJCQtPmNvdW50KyspCiAgICAgZnByaW50ZiAoc3RkZXJyLCAiRGVzdHJ1Y3RvciBjYWxsZWQgb24gc2FtZSB2YWx1ZSB0d2ljZS5cbiIpOwogfSAnYScKIApAQCAtNTk5LDM1ICs2MDgsNDAgQEAKIHN0YXRpYyBpbnQKIHl5bGV4ICh2b2lkKQogewotICB5eWx2YWwuY291bnQgPSAoaW50ICopIG1hbGxvYyAoc2l6ZW9mIChpbnQpKTsKLSAgaWYgKCF5eWx2YWwuY291bnQpCisgIHl5bHZhbC5ub2RlID0gKGNvdW50X25vZGUqKSBtYWxsb2MgKHNpemVvZiAqeXlsdmFsLm5vZGUpOworICBpZiAoIXl5bHZhbC5ub2RlKQogICAgIHsKICAgICAgIGZwcmludGYgKHN0ZGVyciwgIlRlc3QgaW5jb25jbHVzaXZlLlxuIik7CiAgICAgICBleGl0IChFWElUX0ZBSUxVUkUpOwogICAgIH0KLSAgKnl5bHZhbC5jb3VudCA9IDA7CisgIHl5bHZhbC5ub2RlLT5jb3VudCA9IDA7CisgIHl5bHZhbC5ub2RlLT5wcmV2ID0gdGFpbDsKKyAgdGFpbCA9IHl5bHZhbC5ub2RlOwogICByZXR1cm4gJ2EnOwogfQogCi1zdGF0aWMgdm9pZAoteXllcnJvciAoY2hhciBjb25zdCAqbXNnKQotewotICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKLX0KLQorXUFUX1lZRVJST1JfREVGSU5FWwogaW50CiBtYWluICh2b2lkKQogewotICByZXR1cm4geXlwYXJzZSAoKTsKKyAgaW50IHN0YXR1cyA9IHl5cGFyc2UgKCk7CisgIHdoaWxlICh0YWlsKQorICAgIHsKKyAgICAgIGNvdW50X25vZGUgKnByZXYgPSB0YWlsLT5wcmV2OworICAgICAgZnJlZSAodGFpbCk7CisgICAgICB0YWlsID0gcHJldjsKKyAgICB9CisgIHJldHVybiBzdGF0dXM7CiB9CiBdXSkKK0FUX0JJU09OX09QVElPTl9QT1BERUZTCiAKLUFUX0NIRUNLKFtbYmlzb24gLW8gZ2xyLXJlZ3I3LmMgZ2xyLXJlZ3I3LnldXSwgMCwgW10sCitBVF9CSVNPTl9DSEVDSyhbWy1vIGdsci1yZWdyNy5jIGdsci1yZWdyNy55XV0sIDAsIFtdLAogW2dsci1yZWdyNy55OiBjb25mbGljdHM6IDIgcmVkdWNlL3JlZHVjZQogXSkKIEFUX0NPTVBJTEUoW2dsci1yZWdyN10pCiAKLUFUX0NIRUNLKFtbLi9nbHItcmVncjddXSwgMiwgW10sCitBVF9QQVJTRVJfQ0hFQ0soW1suL2dsci1yZWdyN11dLCAyLCBbXSwKIFttZW1vcnkgZXhoYXVzdGVkCiBdKQogCkBAIC02NDMsMTQgKzY1NywxNCBAQAogCiBBVF9TRVRVUChbSW5jb3JyZWN0bHkgaW5pdGlhbGl6ZWQgbG9jYXRpb24gZm9yIGVtcHR5IHJpZ2h0LWhhbmQgc2lkZSBpbiBHTFJdKQogCitBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMKIEFUX0RBVEFfR1JBTU1BUihbZ2xyLXJlZ3I4LnldLAogW1sKICV7CiAgICNpbmNsdWRlIDxzdGRpby5oPgogICAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKGNoYXIgY29uc3QgKik7Ci0gIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOwotICBzdGF0aWMgdm9pZCB5eWVycm9yIChjaGFyIGNvbnN0ICptc2cpOworICBdQVRfWVlFUlJPUl9ERUNMQVJFWworICBdQVRfWVlMRVhfREVDTEFSRVsKICV9CiAKICV0b2tlbiBUX0NPTlNUQU5UCkBAIC02ODQsMTIgKzY5OCw3IEBACiAKICUlCiAKLXZvaWQKLXl5ZXJyb3IgKGNoYXIgY29uc3QgKm1zZykKLXsKLSAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Ci19Ci0KK11BVF9ZWUVSUk9SX0RFRklORVsKIHN0YXRpYyBpbnQgbGV4SW5kZXg7CiAKIGludCB5eWxleCAodm9pZCkKQEAgLTY5Nyw2ICs3MDYsOCBAQAogICBsZXhJbmRleCArPSAxOwogICBzd2l0Y2ggKGxleEluZGV4KQogICAgIHsKKyAgICBkZWZhdWx0OgorICAgICAgYWJvcnQgKCk7CiAgICAgY2FzZSAxOgogICAgICAgeXlsbG9jLmZpcnN0X2NvbHVtbiA9IDE7CiAgICAgICB5eWxsb2MubGFzdF9jb2x1bW4gPSA5OwpAQCAtNzA1LDcgKzcxNiw3IEBACiAgICAgICB5eWxsb2MuZmlyc3RfY29sdW1uID0gMTM7CiAgICAgICB5eWxsb2MubGFzdF9jb2x1bW4gPSAxNzsKICAgICAgIHJldHVybiBUX1BPUlQ7Ci0gICAgZGVmYXVsdDoKKyAgICBjYXNlIDM6CiAgICAgICByZXR1cm4gMDsKICAgICB9CiB9CkBAIC03MTcsMTMgKzcyOCwxNCBAQAogICByZXR1cm4gMDsKIH0KIF1dKQorQVRfQklTT05fT1BUSU9OX1BPUERFRlMKIAotQVRfQ0hFQ0soW1tiaXNvbiAtbyBnbHItcmVncjguYyBnbHItcmVncjgueV1dLCAwLCBbXSwKK0FUX0JJU09OX0NIRUNLKFtbLW8gZ2xyLXJlZ3I4LmMgZ2xyLXJlZ3I4LnldXSwgMCwgW10sCiBbZ2xyLXJlZ3I4Lnk6IGNvbmZsaWN0czogMSByZWR1Y2UvcmVkdWNlCiBdKQogQVRfQ09NUElMRShbZ2xyLXJlZ3I4XSkKIAotQVRfQ0hFQ0soW1suL2dsci1yZWdyOF1dLCAwLAorQVRfUEFSU0VSX0NIRUNLKFtbLi9nbHItcmVncjhdXSwgMCwKIFtlbXB0eTogOS85CiAxLzkgLSA5LzkgLSAxMy8xNwogXSwKQEAgLTczMywxOSArNzQ1LDIwIEBACiAKIAogIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgTm8gdXNlcnMgZGVzdHJ1Y3RvcnMgaWYgc3RhY2sgMCBkZWxldGVkLiAgU2VlCQkJICAgICAjIworIyMgTm8gdXNlcnMgZGVzdHJ1Y3RvcnMgaWYgc3RhY2sgMCBkZWxldGVkLiAgU2VlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwogIyMgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDUtMDkvbXNnMDAxMDkuaHRtbD4uICAjIwogIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogCiBBVF9TRVRVUChbTm8gdXNlcnMgZGVzdHJ1Y3RvcnMgaWYgc3RhY2sgMCBkZWxldGVkXSkKIAorQVRfQklTT05fT1BUSU9OX1BVU0hERUZTCiBBVF9EQVRBX0dSQU1NQVIoW2dsci1yZWdyOS55XSwKIFtbCiAlewogIyBpbmNsdWRlIDxzdGRpby5oPgogIyBpbmNsdWRlIDxzdGRsaWIuaD4KLSAgc3RhdGljIHZvaWQgeXllcnJvciAoY2hhciBjb25zdCAqKTsKLSAgc3RhdGljIGludCB5eWxleCAodm9pZCk7CisgIF1BVF9ZWUVSUk9SX0RFQ0xBUkVbCisgIF1BVF9ZWUxFWF9ERUNMQVJFWwogIyBkZWZpbmUgWVlTVEFDS0VYUEFOREFCTEUgMAogICBzdGF0aWMgaW50IHRva2VucyA9IDA7CiAgIHN0YXRpYyBpbnQgZGVzdHJ1Y3RvcnMgPSAwOwpAQCAtNzgxLDEyICs3OTQsNyBAQAogICByZXR1cm4gJ2EnOwogfQogCi1zdGF0aWMgdm9pZAoteXllcnJvciAoY2hhciBjb25zdCAqbXNnKQotewotICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKLX0KLQorXUFUX1lZRVJST1JfREVGSU5FWwogaW50CiBtYWluICh2b2lkKQogewpAQCAtODAwLDMxICs4MDgsMzQgQEAKICAgcmV0dXJuICFleGl0X3N0YXR1czsKIH0KIF1dKQorQVRfQklTT05fT1BUSU9OX1BPUERFRlMKIAotQVRfQ0hFQ0soW1tiaXNvbiAtbyBnbHItcmVncjkuYyBnbHItcmVncjkueV1dLCAwLCBbXSwKK0FUX0JJU09OX0NIRUNLKFtbLW8gZ2xyLXJlZ3I5LmMgZ2xyLXJlZ3I5LnldXSwgMCwgW10sCiBbZ2xyLXJlZ3I5Lnk6IGNvbmZsaWN0czogMSByZWR1Y2UvcmVkdWNlCiBdKQogQVRfQ09NUElMRShbZ2xyLXJlZ3I5XSkKIAotQVRfQ0hFQ0soW1suL2dsci1yZWdyOV1dLCAwLCBbXSwKK0FUX1BBUlNFUl9DSEVDSyhbWy4vZ2xyLXJlZ3I5XV0sIDAsIFtdLAogW21lbW9yeSBleGhhdXN0ZWQKIF0pCiAKIEFUX0NMRUFOVVAKIAogCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBDb3JydXB0ZWQgc2VtYW50aWMgb3B0aW9ucyBpZiB1c2VyIGFjdGlvbiBjdXRzIHBhcnNlLgkgICAgICAgICAgICAgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQ29ycnVwdGVkIHNlbWFudGljIG9wdGlvbnMgaWYgdXNlciBhY3Rpb24gY3V0cyBwYXJzZS4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKIAogQVRfU0VUVVAoW0NvcnJ1cHRlZCBzZW1hbnRpYyBvcHRpb25zIGlmIHVzZXIgYWN0aW9uIGN1dHMgcGFyc2VdKQogCitBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMKIEFUX0RBVEFfR1JBTU1BUihbZ2xyLXJlZ3IxMC55XSwKIFtbCiAleworIyBpbmNsdWRlIDxzdGRsaWIuaD4KICMgaW5jbHVkZSA8c3RkaW8uaD4KLSAgc3RhdGljIHZvaWQgeXllcnJvciAoY2hhciBjb25zdCAqKTsKLSAgc3RhdGljIGludCB5eWxleCAodm9pZCk7CisgIF1BVF9ZWUVSUk9SX0RFQ0xBUkVbCisgIF1BVF9ZWUxFWF9ERUNMQVJFWwogICAjZGVmaW5lIEdBUkJBR0VfU0laRSA1MAogICBzdGF0aWMgY2hhciBnYXJiYWdlW0dBUkJBR0VfU0laRV07CiAlfQpAQCAtODQxLDE4ICs4NTIsOCBAQAogICA7CiAKICUlCi0KLXN0YXRpYyB2b2lkCi15eWVycm9yIChjaGFyIGNvbnN0ICptc2cpCi17Ci0gIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOwotfQotCi1zdGF0aWMgaW50Ci15eWxleCAodm9pZCkKLXsKLSAgcmV0dXJuIDA7Ci19CitdQVRfWVlFUlJPUl9ERUZJTkVbCitdQVRfWVlMRVhfREVGSU5FWwogCiBpbnQKIG1haW4gKHZvaWQpCkBAIC04NjMsMjkgKzg2NCwzMSBAQAogICByZXR1cm4geXlwYXJzZSAoKTsKIH0KIF1dKQorQVRfQklTT05fT1BUSU9OX1BPUERFRlMKIAotQVRfQ0hFQ0soW1tiaXNvbiAtbyBnbHItcmVncjEwLmMgZ2xyLXJlZ3IxMC55XV0sIDAsIFtdLAorQVRfQklTT05fQ0hFQ0soW1stbyBnbHItcmVncjEwLmMgZ2xyLXJlZ3IxMC55XV0sIDAsIFtdLAogW2dsci1yZWdyMTAueTogY29uZmxpY3RzOiAxIHJlZHVjZS9yZWR1Y2UKIF0pCiBBVF9DT01QSUxFKFtnbHItcmVncjEwXSkKIAotQVRfQ0hFQ0soW1suL2dsci1yZWdyMTBdXSwgMCwgW10sIFtdKQorQVRfUEFSU0VSX0NIRUNLKFtbLi9nbHItcmVncjEwXV0sIDAsIFtdLCBbXSkKIAogQVRfQ0xFQU5VUAogCiAKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFVuZGVzaXJhYmxlIGRlc3RydWN0b3JzIGlmIHVzZXIgYWN0aW9uIGN1dHMgcGFyc2UuCQkJICAgICAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBVbmRlc2lyYWJsZSBkZXN0cnVjdG9ycyBpZiB1c2VyIGFjdGlvbiBjdXRzIHBhcnNlLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogCiBBVF9TRVRVUChbVW5kZXNpcmFibGUgZGVzdHJ1Y3RvcnMgaWYgdXNlciBhY3Rpb24gY3V0cyBwYXJzZV0pCiAKK0FUX0JJU09OX09QVElPTl9QVVNIREVGUwogQVRfREFUQV9HUkFNTUFSKFtnbHItcmVncjExLnldLAogW1sKICV7CiAjIGluY2x1ZGUgPHN0ZGxpYi5oPgotICBzdGF0aWMgdm9pZCB5eWVycm9yIChjaGFyIGNvbnN0ICopOwotICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKKyAgXUFUX1lZRVJST1JfREVDTEFSRVsKKyAgXUFUX1lZTEVYX0RFQ0xBUkVbCiAgIHN0YXRpYyBpbnQgZGVzdHJ1Y3RvcnMgPSAwOwogIyBkZWZpbmUgVVNFKHZhbCkKICV9CkBAIC05MDQsMTggKzkwNyw4IEBACiAKICUlCiAKLXN0YXRpYyB2b2lkCi15eWVycm9yIChjaGFyIGNvbnN0ICptc2cpCi17Ci0gIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOwotfQotCi1zdGF0aWMgaW50Ci15eWxleCAodm9pZCkKLXsKLSAgc3RhdGljIGNoYXIgY29uc3QgKmlucHV0ID0gImEiOwotICByZXR1cm4gKmlucHV0Kys7Ci19CitdQVRfWVlFUlJPUl9ERUZJTkVbCitdQVRfWVlMRVhfREVGSU5FKFsiYSJdKVsKIAogaW50CiBtYWluICh2b2lkKQpAQCAtOTI5LDIzICs5MjIsMjUgQEAKICAgcmV0dXJuIGV4aXRfc3RhdHVzOwogfQogXV0pCitBVF9CSVNPTl9PUFRJT05fUE9QREVGUwogCi1BVF9DSEVDSyhbW2Jpc29uIC1vIGdsci1yZWdyMTEuYyBnbHItcmVncjExLnldXSwgMCwgW10sCitBVF9CSVNPTl9DSEVDSyhbWy1vIGdsci1yZWdyMTEuYyBnbHItcmVncjExLnldXSwgMCwgW10sCiBbZ2xyLXJlZ3IxMS55OiBjb25mbGljdHM6IDEgcmVkdWNlL3JlZHVjZQogXSkKIEFUX0NPTVBJTEUoW2dsci1yZWdyMTFdKQogCi1BVF9DSEVDSyhbWy4vZ2xyLXJlZ3IxMV1dLCAwLCBbXSwgW10pCitBVF9QQVJTRVJfQ0hFQ0soW1suL2dsci1yZWdyMTFdXSwgMCwgW10sIFtdKQogCiBBVF9DTEVBTlVQCiAKIAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgTGVha2VkIHNlbWFudGljIHZhbHVlcyBpZiB1c2VyIGFjdGlvbiBjdXRzIHBhcnNlLgkJCSAgICAgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBMZWFrZWQgc2VtYW50aWMgdmFsdWVzIGlmIHVzZXIgYWN0aW9uIGN1dHMgcGFyc2UuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKIAogQVRfU0VUVVAoW0xlYWtlZCBzZW1hbnRpYyB2YWx1ZXMgaWYgdXNlciBhY3Rpb24gY3V0cyBwYXJzZV0pCiAKK0FUX0JJU09OX09QVElPTl9QVVNIREVGUwogQVRfREFUQV9HUkFNTUFSKFtnbHItcmVncjEyLnldLAogW1sKICVnbHItcGFyc2VyCkBAIC05NTgsOSArOTUzLDEwIEBACiAKICV7CiAjIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyBpbmNsdWRlIDxhc3NlcnQuaD4KICAgc3RhdGljIGludCBtZXJnZSAoWVlTVFlQRSwgWVlTVFlQRSk7Ci0gIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKGNoYXIgY29uc3QgKik7Ci0gIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOworICBdQVRfWVlFUlJPUl9ERUNMQVJFWworICBdQVRfWVlMRVhfREVDTEFSRVsKICAgc3RhdGljIGludCBwYXJlbnRfcmhzX2JlZm9yZV92YWx1ZSA9IDA7CiAgIHN0YXRpYyBpbnQgbWVyZ2VkX3ZhbHVlID0gMDsKICAgc3RhdGljIGludCBwYXJlbnRfcmhzX2FmdGVyX3ZhbHVlID0gMDsKQEAgLTEwMjAsMjEgKzEwMTYsMTAgQEAKICAgcmV0dXJuIGR1bW15OwogfQogCi1zdGF0aWMgdm9pZAoteXllcnJvciAoY2hhciBjb25zdCAqbXNnKQotewotICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKLX0KLQotc3RhdGljIGludAoteXlsZXggKHZvaWQpCi17Ci0gIHN0YXRpYyBpbnQgY29uc3QgaW5wdXRbXSA9IHsgUEFSRU5UX1JIU19BRlRFUiwgMCB9OwotICBzdGF0aWMgY29uc3QgaW50ICppbnB1dHAgPSBpbnB1dDsKLSAgaWYgKCppbnB1dHAgPT0gUEFSRU5UX1JIU19BRlRFUikKLSAgICBwYXJlbnRfcmhzX2FmdGVyX3ZhbHVlID0gMTsKLSAgcmV0dXJuICppbnB1dHArKzsKLX0KK11BVF9ZWUVSUk9SX0RFRklORVsKK11BVF9ZWUxFWF9ERUZJTkUoW3sgUEFSRU5UX1JIU19BRlRFUiwgMCB9XSwKKyBbaWYgKHJlcyA9PSBQQVJFTlRfUkhTX0FGVEVSKQorICAgIHBhcmVudF9yaHNfYWZ0ZXJfdmFsdWUgPSAxO10pWwogCiBpbnQKIG1haW4gKHZvaWQpCkBAIC0xMDU4LDEzICsxMDQzLDE0IEBACiAgIHJldHVybiBleGl0X3N0YXR1czsKIH0KIF1dKQorQVRfQklTT05fT1BUSU9OX1BPUERFRlMKIAotQVRfQ0hFQ0soW1tiaXNvbiAtbyBnbHItcmVncjEyLmMgZ2xyLXJlZ3IxMi55XV0sIDAsIFtdLAorQVRfQklTT05fQ0hFQ0soW1stbyBnbHItcmVncjEyLmMgZ2xyLXJlZ3IxMi55XV0sIDAsIFtdLAogW2dsci1yZWdyMTIueTogY29uZmxpY3RzOiAxIHNoaWZ0L3JlZHVjZSwgMSByZWR1Y2UvcmVkdWNlCiBdKQogQVRfQ09NUElMRShbZ2xyLXJlZ3IxMl0pCiAKLUFUX0NIRUNLKFtbLi9nbHItcmVncjEyXV0sIDAsIFtdLCBbXSkKK0FUX1BBUlNFUl9DSEVDSyhbWy4vZ2xyLXJlZ3IxMl1dLCAwLCBbXSwgW10pCiAKIEFUX0NMRUFOVVAKIApAQCAtMTA3Nyw2ICsxMDYzLDcgQEAKIAogQVRfU0VUVVAoW0luY29ycmVjdCBsb29rYWhlYWQgZHVyaW5nIGRldGVybWluaXN0aWMgR0xSXSkKIAorQVRfQklTT05fT1BUSU9OX1BVU0hERUZTCiBBVF9EQVRBX0dSQU1NQVIoW2dsci1yZWdyMTMueV0sCiBbWwogLyogVGVzdHM6CkBAIC0xMDg4LDkgKzEwNzUsMTAgQEAKIAogJXsKICAgI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKGNoYXIgY29uc3QgKik7Ci0gIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOwotICBzdGF0aWMgdm9pZCBwcmludF9sb29rX2FoZWFkIChjaGFyIGNvbnN0ICopOworICAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgIF1BVF9ZWUVSUk9SX0RFQ0xBUkVbCisgIF1BVF9ZWUxFWF9ERUNMQVJFWworICBzdGF0aWMgdm9pZCBwcmludF9sb29rYWhlYWQgKGNoYXIgY29uc3QgKik7CiAgICNkZWZpbmUgVVNFKHZhbHVlKQogJX0KIApAQCAtMTEwNCwzMiArMTA5MiwzMiBAQAogc3RhcnQ6CiAgIGRlZnN0YXRlX2luaXQgZGVmc3RhdGVfc2hpZnQgJ2InIGNoYW5nZV9sb29rYWhlYWQgJ2EnIHsKICAgICBVU0UgKCQzKTsKLSAgICBwcmludF9sb29rX2FoZWFkICgic3RhcnQgPC0gZGVmc3RhdGVfaW5pdCBkZWZzdGF0ZV9zaGlmdCAnYiciKTsKKyAgICBwcmludF9sb29rYWhlYWQgKCJzdGFydCA8LSBkZWZzdGF0ZV9pbml0IGRlZnN0YXRlX3NoaWZ0ICdiJyIpOwogICB9CiAgIDsKIGRlZnN0YXRlX2luaXQ6CiAgIHsKLSAgICBwcmludF9sb29rX2FoZWFkICgiZGVmc3RhdGVfaW5pdCA8LSBlbXB0eSBzdHJpbmciKTsKKyAgICBwcmludF9sb29rYWhlYWQgKCJkZWZzdGF0ZV9pbml0IDwtIGVtcHR5IHN0cmluZyIpOwogICB9CiAgIDsKIGRlZnN0YXRlX3NoaWZ0OgogICBub25kZWZzdGF0ZSBkZWZzdGF0ZV9sb29rICdhJyB7CiAgICAgVVNFICgkMyk7Ci0gICAgcHJpbnRfbG9va19haGVhZCAoImRlZnN0YXRlX3NoaWZ0IDwtIG5vbmRlZnN0YXRlIGRlZnN0YXRlX2xvb2sgJ2EnIik7CisgICAgcHJpbnRfbG9va2FoZWFkICgiZGVmc3RhdGVfc2hpZnQgPC0gbm9uZGVmc3RhdGUgZGVmc3RhdGVfbG9vayAnYSciKTsKICAgfQogICA7CiBkZWZzdGF0ZV9sb29rOgogICB7Ci0gICAgcHJpbnRfbG9va19haGVhZCAoImRlZnN0YXRlX2xvb2sgPC0gZW1wdHkgc3RyaW5nIik7CisgICAgcHJpbnRfbG9va2FoZWFkICgiZGVmc3RhdGVfbG9vayA8LSBlbXB0eSBzdHJpbmciKTsKICAgfQogICA7CiBub25kZWZzdGF0ZToKICAgewotICAgIHByaW50X2xvb2tfYWhlYWQgKCJub25kZWZzdGF0ZSA8LSBlbXB0eSBzdHJpbmciKTsKKyAgICBwcmludF9sb29rYWhlYWQgKCJub25kZWZzdGF0ZSA8LSBlbXB0eSBzdHJpbmciKTsKICAgfQogICB8ICdiJyB7CiAgICAgVVNFICgkMSk7Ci0gICAgcHJpbnRfbG9va19haGVhZCAoIm5vbmRlZnN0YXRlIDwtICdiJyIpOworICAgIHByaW50X2xvb2thaGVhZCAoIm5vbmRlZnN0YXRlIDwtICdiJyIpOwogICB9CiAgIDsKIGNoYW5nZV9sb29rYWhlYWQ6CkBAIC0xMTQwLDI1ICsxMTI4LDEyIEBACiAKICUlCiAKLXN0YXRpYyB2b2lkCi15eWVycm9yIChjaGFyIGNvbnN0ICptc2cpCi17Ci0gIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOwotfQotCi1zdGF0aWMgaW50Ci15eWxleCAodm9pZCkKLXsKLSAgc3RhdGljIGNoYXIgY29uc3QgKmlucHV0ID0gImFiIjsKLSAgc3RhdGljIGludCBpID0gMDsKLSAgeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxsb2MubGFzdF9saW5lID0gMTsKLSAgeXlsbG9jLmZpcnN0X2NvbHVtbiA9IHl5bGxvYy5sYXN0X2NvbHVtbiA9IGkgKyAxOwotICB5eWx2YWwudmFsdWUgPSBpbnB1dFtpXSArICdBJyAtICdhJzsKLSAgcmV0dXJuIGlucHV0W2krK107Ci19CitdQVRfWVlFUlJPUl9ERUZJTkVbCitdQVRfWVlMRVhfREVGSU5FKFsiYWIiXSwKKyAgICAgICAgICAgICAgICAgW3l5bHZhbC52YWx1ZSA9IHJlcyArICdBJyAtICdhJ10pWwogCiBzdGF0aWMgdm9pZAotcHJpbnRfbG9va19haGVhZCAoY2hhciBjb25zdCAqcmVkdWN0aW9uKQorcHJpbnRfbG9va2FoZWFkIChjaGFyIGNvbnN0ICpyZWR1Y3Rpb24pCiB7CiAgIHByaW50ZiAoIiVzOlxuICB5eWNoYXI9IiwgcmVkdWN0aW9uKTsKICAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQpAQCAtMTE4NSwxMSArMTE2MCwxMiBAQAogICByZXR1cm4geXlwYXJzZSAoKTsKIH0KIF1dKQorQVRfQklTT05fT1BUSU9OX1BPUERFRlMKIAotQVRfQ0hFQ0soW1tiaXNvbiAtbyBnbHItcmVncjEzLmMgZ2xyLXJlZ3IxMy55XV0sIDAsIFtdLCBbXSkKK0FUX0JJU09OX0NIRUNLKFtbLW8gZ2xyLXJlZ3IxMy5jIGdsci1yZWdyMTMueV1dLCAwLCBbXSwgW10pCiBBVF9DT01QSUxFKFtnbHItcmVncjEzXSkKIAotQVRfQ0hFQ0soW1suL2dsci1yZWdyMTNdXSwgMCwKK0FUX1BBUlNFUl9DSEVDSyhbWy4vZ2xyLXJlZ3IxM11dLCAwLAogW2RlZnN0YXRlX2luaXQgPC0gZW1wdHkgc3RyaW5nOgogICB5eWNoYXI9WVlFTVBUWQogbm9uZGVmc3RhdGUgPC0gZW1wdHkgc3RyaW5nOgpAQCAtMTIwNSwxMiArMTE4MSwxMyBAQAogQVRfQ0xFQU5VUAogCiAKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIEluY29ycmVjdCBsb29rYWhlYWQgZHVyaW5nIG5vbmRldGVybWluaXN0aWMgR0xSLgkJCSAgICAgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEluY29ycmVjdCBsb29rYWhlYWQgZHVyaW5nIG5vbmRldGVybWluaXN0aWMgR0xSLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKIAogQVRfU0VUVVAoW0luY29ycmVjdCBsb29rYWhlYWQgZHVyaW5nIG5vbmRldGVybWluaXN0aWMgR0xSXSkKIAorQVRfQklTT05fT1BUSU9OX1BVU0hERUZTCiBBVF9EQVRBX0dSQU1NQVIoW2dsci1yZWdyMTQueV0sCiBbWwogLyogVGVzdHM6CkBAIC0xMjM1LDEwICsxMjEyLDEyIEBACiAldW5pb24geyBjaGFyIHZhbHVlOyB9CiAKICV7CisgICNpbmNsdWRlIDxzdGRsaWIuaD4KICAgI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKGNoYXIgY29uc3QgKik7Ci0gIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOwotICBzdGF0aWMgdm9pZCBwcmludF9sb29rX2FoZWFkIChjaGFyIGNvbnN0ICopOworICAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgIF1BVF9ZWUVSUk9SX0RFQ0xBUkVbCisgIF1BVF9ZWUxFWF9ERUNMQVJFWworICBzdGF0aWMgdm9pZCBwcmludF9sb29rYWhlYWQgKGNoYXIgY29uc3QgKik7CiAgIHN0YXRpYyBjaGFyIG1lcmdlICh1bmlvbiBZWVNUWVBFLCB1bmlvbiBZWVNUWVBFKTsKICAgI2RlZmluZSBVU0UodmFsdWUpCiAlfQpAQCAtMTI1Miw3ICsxMjMxLDcgQEAKIHN0YXJ0OgogICBtZXJnZSAnYycgc3RhY2tfZXhwbG9zaW9uIHsKICAgICBVU0UgKCQyKTsgVVNFICgkMyk7Ci0gICAgcHJpbnRfbG9va19haGVhZCAoInN0YXJ0IDwtIG1lcmdlICdjJyBzdGFja19leHBsb3Npb24iKTsKKyAgICBwcmludF9sb29rYWhlYWQgKCJzdGFydCA8LSBtZXJnZSAnYycgc3RhY2tfZXhwbG9zaW9uIik7CiAgIH0KICAgOwogCkBAIC0xMjYwLDQ0ICsxMjM5LDQ0IEBACiBtZXJnZToKICAgbm9uY29uZmxpY3QxICdhJyAnYicgbm9uY29uZmxpY3QyICVkcHJlYyAxIHsKICAgICBVU0UgKCQyKTsgVVNFICgkMyk7Ci0gICAgcHJpbnRfbG9va19haGVhZCAoIm1lcmdlIDwtIG5vbmNvbmZsaWN0MSAnYScgJ2InIG5vbmNvbmZsaWN0MiIpOworICAgIHByaW50X2xvb2thaGVhZCAoIm1lcmdlIDwtIG5vbmNvbmZsaWN0MSAnYScgJ2InIG5vbmNvbmZsaWN0MiIpOwogICB9CiAgIHwgY29uZmxpY3QgZGVmc3RhdGVfbG9vayAnYScgbm9uY29uZmxpY3QyICdiJyBkZWZzdGF0ZV9zaGlmdCAlZHByZWMgMiB7CiAgICAgVVNFICgkMyk7IFVTRSAoJDUpOwotICAgIHByaW50X2xvb2tfYWhlYWQgKCJtZXJnZSA8LSBjb25mbGljdCBkZWZzdGF0ZV9sb29rICdhJyBub25jb25mbGljdDIgJ2InIgorICAgIHByaW50X2xvb2thaGVhZCAoIm1lcmdlIDwtIGNvbmZsaWN0IGRlZnN0YXRlX2xvb2sgJ2EnIG5vbmNvbmZsaWN0MiAnYiciCiAJCSAgICAgICIgZGVmc3RhdGVfc2hpZnQiKTsKICAgfQogICA7CiAKIG5vbmNvbmZsaWN0MToKICAgewotICAgIHByaW50X2xvb2tfYWhlYWQgKCJub25jb25mbGljdDEgPC0gZW1wdHkgc3RyaW5nIik7CisgICAgcHJpbnRfbG9va2FoZWFkICgibm9uY29uZmxpY3QxIDwtIGVtcHR5IHN0cmluZyIpOwogICB9CiAgIDsKIG5vbmNvbmZsaWN0MjoKICAgewotICAgIHByaW50X2xvb2tfYWhlYWQgKCJub25jb25mbGljdDIgPC0gZW1wdHkgc3RyaW5nIik7CisgICAgcHJpbnRfbG9va2FoZWFkICgibm9uY29uZmxpY3QyIDwtIGVtcHR5IHN0cmluZyIpOwogICB9CiAgIHwgJ2EnIHsKICAgICBVU0UgKCQxKTsKLSAgICBwcmludF9sb29rX2FoZWFkICgibm9uY29uZmxpY3QyIDwtICdhJyIpOworICAgIHByaW50X2xvb2thaGVhZCAoIm5vbmNvbmZsaWN0MiA8LSAnYSciKTsKICAgfQogICA7CiBjb25mbGljdDoKICAgewotICAgIHByaW50X2xvb2tfYWhlYWQgKCJjb25mbGljdCA8LSBlbXB0eSBzdHJpbmciKTsKKyAgICBwcmludF9sb29rYWhlYWQgKCJjb25mbGljdCA8LSBlbXB0eSBzdHJpbmciKTsKICAgfQogICA7CiBkZWZzdGF0ZV9sb29rOgogICB7Ci0gICAgcHJpbnRfbG9va19haGVhZCAoImRlZnN0YXRlX2xvb2sgPC0gZW1wdHkgc3RyaW5nIik7CisgICAgcHJpbnRfbG9va2FoZWFkICgiZGVmc3RhdGVfbG9vayA8LSBlbXB0eSBzdHJpbmciKTsKICAgfQogICA7CiAKIC8qIHl5Y2hhciAhPSBZWUVNUFRZIGJ1dCBsb29rYWhlYWQgbmVlZCBpcyB5eWZhbHNlLiAgKi8KIGRlZnN0YXRlX3NoaWZ0OgogICB7Ci0gICAgcHJpbnRfbG9va19haGVhZCAoImRlZnN0YXRlX3NoaWZ0IDwtIGVtcHR5IHN0cmluZyIpOworICAgIHByaW50X2xvb2thaGVhZCAoImRlZnN0YXRlX3NoaWZ0IDwtIGVtcHR5IHN0cmluZyIpOwogICB9CiAgIDsKIApAQCAtMTM0NiwyNSArMTMyNSwyMSBAQAogCiAlJQogCi1zdGF0aWMgdm9pZAoteXllcnJvciAoY2hhciBjb25zdCAqbXNnKQotewotICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKLX0KLQorXUFUX1lZRVJST1JfREVGSU5FWwogc3RhdGljIGludAogeXlsZXggKHZvaWQpCiB7Ci0gIHN0YXRpYyBjaGFyIGNvbnN0ICppbnB1dCA9ICJhYmNkZGRkIjsKLSAgc3RhdGljIGludCBpID0gMDsKKyAgc3RhdGljIGNoYXIgY29uc3QgaW5wdXRbXSA9ICJhYmNkZGRkIjsKKyAgc3RhdGljIHNpemVfdCB0b2tudW07CisgIGFzc2VydCAodG9rbnVtIDwgc2l6ZW9mIGlucHV0KTsKICAgeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxsb2MubGFzdF9saW5lID0gMTsKLSAgeXlsbG9jLmZpcnN0X2NvbHVtbiA9IHl5bGxvYy5sYXN0X2NvbHVtbiA9IGkgKyAxOwotICB5eWx2YWwudmFsdWUgPSBpbnB1dFtpXSArICdBJyAtICdhJzsKLSAgcmV0dXJuIGlucHV0W2krK107CisgIHl5bGxvYy5maXJzdF9jb2x1bW4gPSB5eWxsb2MubGFzdF9jb2x1bW4gPSB0b2tudW0gKyAxOworICB5eWx2YWwudmFsdWUgPSBpbnB1dFt0b2tudW1dICsgJ0EnIC0gJ2EnOworICByZXR1cm4gaW5wdXRbdG9rbnVtKytdOwogfQogCiBzdGF0aWMgdm9pZAotcHJpbnRfbG9va19haGVhZCAoY2hhciBjb25zdCAqcmVkdWN0aW9uKQorcHJpbnRfbG9va2FoZWFkIChjaGFyIGNvbnN0ICpyZWR1Y3Rpb24pCiB7CiAgIHByaW50ZiAoIiVzOlxuICB5eWNoYXI9IiwgcmVkdWN0aW9uKTsKICAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQpAQCAtMTM5OCwxMyArMTM3MywxNCBAQAogICByZXR1cm4geXlwYXJzZSAoKTsKIH0KIF1dKQorQVRfQklTT05fT1BUSU9OX1BPUERFRlMKIAotQVRfQ0hFQ0soW1tiaXNvbiAtbyBnbHItcmVncjE0LmMgZ2xyLXJlZ3IxNC55XV0sIDAsIFtdLAorQVRfQklTT05fQ0hFQ0soW1stbyBnbHItcmVncjE0LmMgZ2xyLXJlZ3IxNC55XV0sIDAsIFtdLAogW2dsci1yZWdyMTQueTogY29uZmxpY3RzOiAzIHJlZHVjZS9yZWR1Y2UKIF0pCiBBVF9DT01QSUxFKFtnbHItcmVncjE0XSkKIAotQVRfQ0hFQ0soW1suL2dsci1yZWdyMTRdXSwgMCwKK0FUX1BBUlNFUl9DSEVDSyhbWy4vZ2xyLXJlZ3IxNF1dLCAwLAogW2NvbmZsaWN0IDwtIGVtcHR5IHN0cmluZzoKICAgeXljaGFyPSdhJywgeXlsdmFsPSdBJywgeXlsbG9jPSgxLDEpLCgxLDEpCiBkZWZzdGF0ZV9sb29rIDwtIGVtcHR5IHN0cmluZzoKQEAgLTE0MjIsMTIgKzEzOTgsMTMgQEAKIEFUX0NMRUFOVVAKIAogCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBMZWFrZWQgc2VtYW50aWMgdmFsdWVzIHdoZW4gcmVwb3J0aW5nIGFtYmlndWl0eS4JCQkgICAgICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBMZWFrZWQgc2VtYW50aWMgdmFsdWVzIHdoZW4gcmVwb3J0aW5nIGFtYmlndWl0eS4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAKIEFUX1NFVFVQKFtMZWFrZWQgc2VtYW50aWMgdmFsdWVzIHdoZW4gcmVwb3J0aW5nIGFtYmlndWl0eV0pCiAKK0FUX0JJU09OX09QVElPTl9QVVNIREVGUwogQVRfREFUQV9HUkFNTUFSKFtnbHItcmVncjE1LnldLAogW1sKICVnbHItcGFyc2VyCkBAIC0xNDM1LDggKzE0MTIsOCBAQAogCiAlewogIyBpbmNsdWRlIDxzdGRsaWIuaD4KLSAgc3RhdGljIHZvaWQgeXllcnJvciAoY2hhciBjb25zdCAqKTsKLSAgc3RhdGljIGludCB5eWxleCAodm9pZCk7CisgIF1BVF9ZWUVSUk9SX0RFQ0xBUkVbCisgIF1BVF9ZWUxFWF9ERUNMQVJFWwogICBzdGF0aWMgaW50IHBhcmVudF9yaHNfYmVmb3JlX3ZhbHVlID0gMDsKICMgZGVmaW5lIFVTRSh2YWwpCiAlfQpAQCAtMTQ3NCwxOCArMTQ1MSw4IEBACiBhbWJpZ3VpdHkyOiA7CiAKICUlCi0KLXN0YXRpYyB2b2lkCi15eWVycm9yIChjaGFyIGNvbnN0ICptc2cpCi17Ci0gIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOwotfQotCi1zdGF0aWMgaW50Ci15eWxleCAodm9pZCkKLXsKLSAgcmV0dXJuIDA7Ci19CitdQVRfWVlFUlJPUl9ERUZJTkVbCitdQVRfWVlMRVhfREVGSU5FWwogCiBpbnQKIG1haW4gKHZvaWQpCkBAIC0xNDk5LDI0ICsxNDY2LDI3IEBACiAgIHJldHVybiBleGl0X3N0YXR1czsKIH0KIF1dKQorQVRfQklTT05fT1BUSU9OX1BPUERFRlMKIAotQVRfQ0hFQ0soW1tiaXNvbiAtbyBnbHItcmVncjE1LmMgZ2xyLXJlZ3IxNS55XV0sIDAsIFtdLAorQVRfQklTT05fQ0hFQ0soW1stbyBnbHItcmVncjE1LmMgZ2xyLXJlZ3IxNS55XV0sIDAsIFtdLAogW2dsci1yZWdyMTUueTogY29uZmxpY3RzOiAyIHJlZHVjZS9yZWR1Y2UKIF0pCiBBVF9DT01QSUxFKFtnbHItcmVncjE1XSkKIAotQVRfQ0hFQ0soW1suL2dsci1yZWdyMTVdXSwgMCwgW10sCitBVF9QQVJTRVJfQ0hFQ0soW1suL2dsci1yZWdyMTVdXSwgMCwgW10sCiBbc3ludGF4IGlzIGFtYmlndW91cwogXSkKIAogQVRfQ0xFQU5VUAogCiAKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIExlYWtlZCBsb29rYWhlYWQgYWZ0ZXIgbm9uZGV0ZXJtaW5pc3RpYyBwYXJzZSBzeW50YXggZXJyb3IuCQkgICAgICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIExlYWtlZCBsb29rYWhlYWQgYWZ0ZXIgbm9uZGV0ZXJtaW5pc3RpYyBwYXJzZSBzeW50YXggZXJyb3IuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAKIEFUX1NFVFVQKFtMZWFrZWQgbG9va2FoZWFkIGFmdGVyIG5vbmRldGVybWluaXN0aWMgcGFyc2Ugc3ludGF4IGVycm9yXSkKKworQVRfQklTT05fT1BUSU9OX1BVU0hERUZTCiBBVF9EQVRBX0dSQU1NQVIoW2dsci1yZWdyMTYueV0sCiBbWwogJWdsci1wYXJzZXIKQEAgLTE1MjQsOCArMTQ5NCw5IEBACiAKICV7CiAjIGluY2x1ZGUgPHN0ZGxpYi5oPgotICBzdGF0aWMgdm9pZCB5eWVycm9yIChjaGFyIGNvbnN0ICopOwotICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgIF1BVF9ZWUVSUk9SX0RFQ0xBUkVbCisgIF1BVF9ZWUxFWF9ERUNMQVJFWwogICBzdGF0aWMgaW50IGxvb2thaGVhZF92YWx1ZSA9IDA7CiAjIGRlZmluZSBVU0UodmFsKQogJX0KQEAgLTE1MzgsMjAgKzE1MDksMTAgQEAKIAogJSUKIAotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKGNoYXIgY29uc3QgKm1zZykKLXsKLSAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl5bGV4ICh2b2lkKQotewotICBzdGF0aWMgY2hhciBjb25zdCAqaW5wdXQgPSAiYWIiOwotICBpZiAoKmlucHV0ID09ICdiJykKLSAgICBsb29rYWhlYWRfdmFsdWUgPSAxOwotICByZXR1cm4gKmlucHV0Kys7Ci19CitdQVRfWVlFUlJPUl9ERUZJTkVbCitdQVRfWVlMRVhfREVGSU5FKFsiYWIiXSwKKyAgW2lmIChyZXMgPT0gJ2InKQorICAgIGxvb2thaGVhZF92YWx1ZSA9IDFdKVsKIAogaW50CiBtYWluICh2b2lkKQpAQCAtMTU2NSw0NSArMTUyNiw0MiBAQAogICByZXR1cm4gZXhpdF9zdGF0dXM7CiB9CiBdXSkKK0FUX0JJU09OX09QVElPTl9QT1BERUZTCiAKLUFUX0NIRUNLKFtbYmlzb24gLW8gZ2xyLXJlZ3IxNi5jIGdsci1yZWdyMTYueV1dLCAwLCBbXSwKK0FUX0JJU09OX0NIRUNLKFtbLW8gZ2xyLXJlZ3IxNi5jIGdsci1yZWdyMTYueV1dLCAwLCBbXSwKIFtnbHItcmVncjE2Lnk6IGNvbmZsaWN0czogMSByZWR1Y2UvcmVkdWNlCiBdKQogQVRfQ09NUElMRShbZ2xyLXJlZ3IxNl0pCiAKLUFUX0NIRUNLKFtbLi9nbHItcmVncjE2XV0sIDAsIFtdLAorQVRfUEFSU0VSX0NIRUNLKFtbLi9nbHItcmVncjE2XV0sIDAsIFtdLAogW3N5bnRheCBlcnJvcgogXSkKIAogQVRfQ0xFQU5VUAogCiAKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFVuaW5pdGlhbGl6ZWQgbG9jYXRpb24gd2hlbiByZXBvcnRpbmcgYW1iaWd1aXR5LgkJCSAgICAgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFVuaW5pdGlhbGl6ZWQgbG9jYXRpb24gd2hlbiByZXBvcnRpbmcgYW1iaWd1aXR5LiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKIAogQVRfU0VUVVAoW1VuaW5pdGlhbGl6ZWQgbG9jYXRpb24gd2hlbiByZXBvcnRpbmcgYW1iaWd1aXR5XSkKKworQVRfQklTT05fT1BUSU9OX1BVU0hERUZTKFslZ2xyLXBhcnNlciAlbG9jYXRpb25zICVkZWZpbmUgYXBpLnB1cmVdKQorCiBBVF9EQVRBX0dSQU1NQVIoW2dsci1yZWdyMTcueV0sCiBbWwogJWdsci1wYXJzZXIKICVsb2NhdGlvbnMKLSVwdXJlLXBhcnNlcgorJWRlZmluZSBhcGkucHVyZQogJWVycm9yLXZlcmJvc2UKIAogJXVuaW9uIHsgaW50IGR1bW15OyB9CiAKICV7Ci0gIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKFlZTFRZUEUgKiwgY2hhciBjb25zdCAqKTsKLSAgc3RhdGljIGludCB5eWxleCAoWVlTVFlQRSAqLCBZWUxUWVBFICopOworICBdQVRfWVlFUlJPUl9ERUNMQVJFWworICBdQVRfWVlMRVhfREVDTEFSRVsKICV9CiAKLSVpbml0aWFsLWFjdGlvbiB7Ci0gIEAkLmZpcnN0X2xpbmUgPSAxOwotICBAJC5maXJzdF9jb2x1bW4gPSAxOwotICBAJC5sYXN0X2xpbmUgPSAxOwotICBAJC5sYXN0X2NvbHVtbiA9IDE7Ci19Ci0KICUlCiAKIC8qIFRlc3RzIHRoZSBjYXNlIG9mIGFuIGVtcHR5IFJIUyB0aGF0IGhhcyBpbmhlcml0ZWQgdGhlIGxvY2F0aW9uIG9mIHRoZQpAQCAtMTYyNCwyNCArMTU4MiwyMCBAQAogZW1wdHkyOiA7CiAKICUlCisjIGluY2x1ZGUgPGFzc2VydC5oPgogCi1zdGF0aWMgdm9pZAoteXllcnJvciAoWVlMVFlQRSAqbG9jcCwgY2hhciBjb25zdCAqbXNnKQotewotICBmcHJpbnRmIChzdGRlcnIsICJFcnJvciBhdCAlZC4lZC0lZC4lZDogJXMuXG4iLCBsb2NwLT5maXJzdF9saW5lLAotCSAgIGxvY3AtPmZpcnN0X2NvbHVtbiwgbG9jcC0+bGFzdF9saW5lLCBsb2NwLT5sYXN0X2NvbHVtbiwgbXNnKTsKLX0KLQorXUFUX1lZRVJST1JfREVGSU5FWwogc3RhdGljIGludAogeXlsZXggKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCkKIHsKICAgc3RhdGljIGNoYXIgY29uc3QgaW5wdXRbXSA9ICJhYiI7Ci0gIHN0YXRpYyBjaGFyIGNvbnN0ICppbnB1dHAgPSBpbnB1dDsKKyAgc3RhdGljIHNpemVfdCB0b2tudW07CisgIGFzc2VydCAodG9rbnVtIDwgc2l6ZW9mIGlucHV0KTsKICAgbHZhbHAtPmR1bW15ID0gMDsKICAgbGxvY3AtPmZpcnN0X2xpbmUgPSBsbG9jcC0+bGFzdF9saW5lID0gMjsKLSAgbGxvY3AtPmZpcnN0X2NvbHVtbiA9IGlucHV0cCAtIGlucHV0ICsgMTsKKyAgbGxvY3AtPmZpcnN0X2NvbHVtbiA9IHRva251bSArIDE7CiAgIGxsb2NwLT5sYXN0X2NvbHVtbiA9IGxsb2NwLT5maXJzdF9jb2x1bW4gKyAxOwotICByZXR1cm4gKmlucHV0cCsrOworICByZXR1cm4gaW5wdXRbdG9rbnVtKytdOwogfQogCiBpbnQKQEAgLTE2NTAsMTQgKzE2MDQsMTcyIEBACiAgIHJldHVybiB5eXBhcnNlICgpICE9IDE7CiB9CiBdXSkKK0FUX0JJU09OX09QVElPTl9QT1BERUZTCiAKLUFUX0NIRUNLKFtbYmlzb24gLW8gZ2xyLXJlZ3IxNy5jIGdsci1yZWdyMTcueV1dLCAwLCBbXSwKK0FUX0JJU09OX0NIRUNLKFtbLW8gZ2xyLXJlZ3IxNy5jIGdsci1yZWdyMTcueV1dLCAwLCBbXSwKIFtnbHItcmVncjE3Lnk6IGNvbmZsaWN0czogMyByZWR1Y2UvcmVkdWNlCiBdKQogQVRfQ09NUElMRShbZ2xyLXJlZ3IxN10pCiAKLUFUX0NIRUNLKFtbLi9nbHItcmVncjE3XV0sIDAsIFtdLAotW0Vycm9yIGF0IDEuMS0yLjM6IHN5bnRheCBpcyBhbWJpZ3VvdXMuCitBVF9QQVJTRVJfQ0hFQ0soW1suL2dsci1yZWdyMTddXSwgMCwgW10sCitbMS4xLTIuMjogc3ludGF4IGlzIGFtYmlndW91cworXSkKKworQVRfQ0xFQU5VUAorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1pc3NlZCAlbWVyZ2UgdHlwZSB3YXJuaW5ncyB3aGVuIExIUyB0eXBlIGlzIGRlY2xhcmVkIGxhdGVyLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworQVRfU0VUVVAoW01pc3NlZCAlbWVyZ2UgdHlwZSB3YXJuaW5ncyB3aGVuIExIUyB0eXBlIGlzIGRlY2xhcmVkIGxhdGVyXSkKKworQVRfQklTT05fT1BUSU9OX1BVU0hERUZTCitBVF9EQVRBX0dSQU1NQVIoW2dsci1yZWdyMTgueV0sCitbWyVnbHItcGFyc2VyCisKKyV7CisgICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAgXUFUX1lZRVJST1JfREVDTEFSRVsKKyAgXUFUX1lZTEVYX0RFQ0xBUkVbCislfQorCisldW5pb24geworICBpbnQgdHlwZTE7CisgIGludCB0eXBlMjsKKyAgaW50IHR5cGUzOworfQorCislJQorCitzeW0xOiBzeW0yICVtZXJnZTxtZXJnZT4geyAkJCA9ICQxOyB9IDsKK3N5bTI6IHN5bTMgJW1lcmdlPG1lcmdlPiB7ICQkID0gJDE7IH0gOworc3ltMzogJW1lcmdlPG1lcmdlPiB7ICQkID0gMDsgfSA7CisKKyV0eXBlIDx0eXBlMT4gc3ltMTsKKyV0eXBlIDx0eXBlMj4gc3ltMjsKKyV0eXBlIDx0eXBlMz4gc3ltMzsKKworJSUKK11BVF9ZWUVSUk9SX0RFRklORVsKK11BVF9ZWUxFWF9ERUZJTkVbCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorXV0pCitBVF9CSVNPTl9PUFRJT05fUE9QREVGUworCitBVF9CSVNPTl9DSEVDSyhbWy1vIGdsci1yZWdyMTguYyBnbHItcmVncjE4LnldXSwgMSwgW10sCitbZ2xyLXJlZ3IxOC55OjI2LjE4LTI0OiBlcnJvcjogcmVzdWx0IHR5cGUgY2xhc2ggb24gbWVyZ2UgZnVuY3Rpb24gJ21lcmdlJzogPHR5cGUyPiAhPSA8dHlwZTE+CitnbHItcmVncjE4Lnk6MjUuMTgtMjQ6ICAgICBwcmV2aW91cyBkZWNsYXJhdGlvbgorZ2xyLXJlZ3IxOC55OjI3LjEzLTE5OiBlcnJvcjogcmVzdWx0IHR5cGUgY2xhc2ggb24gbWVyZ2UgZnVuY3Rpb24gJ21lcmdlJzogPHR5cGUzPiAhPSA8dHlwZTI+CitnbHItcmVncjE4Lnk6MjYuMTgtMjQ6ICAgICBwcmV2aW91cyBkZWNsYXJhdGlvbgorXSkKKworQVRfQ0xFQU5VUAorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEFtYmlndWl0eSByZXBvcnRzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworQVRfU0VUVVAoW0FtYmlndWl0eSByZXBvcnRzXSkKKworQVRfQklTT05fT1BUSU9OX1BVU0hERUZTCitBVF9EQVRBX0dSQU1NQVIoW2lucHV0LnldLAorW1sKKyV7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICAjaW5jbHVkZSA8c3RkbGliLmg+CisgIF1BVF9ZWUVSUk9SX0RFQ0xBUkVbCisgIF1BVF9ZWUxFWF9ERUNMQVJFWworJX0KKworJWRlYnVnCislZ2xyLXBhcnNlcgorCislJQorc3RhcnQ6CisgICdhJyBiICdjJyBkCit8ICdhJyBiICdjJyBkCis7CitiOiAnYic7CitkOiAvKiBuYWRhLiAgKi87CislJQorXUFUX1lZTEVYX0RFRklORShbImFiYyJdKVsKK11BVF9ZWUVSUk9SX0RFRklORVsKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgeXlkZWJ1ZyA9IDE7CisgIHJldHVybiAhIXl5cGFyc2UgKCk7Cit9CitdXSkKK0FUX0JJU09OX09QVElPTl9QT1BERUZTCisKK0FUX0JJU09OX0NIRUNLKFtbLW8gaW5wdXQuYyBpbnB1dC55XV0sIDAsIFtdLAorW2lucHV0Lnk6IGNvbmZsaWN0czogMSByZWR1Y2UvcmVkdWNlCitdKQorQVRfQ09NUElMRShbaW5wdXRdKQorCitBVF9QQVJTRVJfQ0hFQ0soW1suL2lucHV0XV0sIDEsIFtdLAorW1N0YXJ0aW5nIHBhcnNlCitFbnRlcmluZyBzdGF0ZSAwCitSZWFkaW5nIGEgdG9rZW46IE5leHQgdG9rZW4gaXMgdG9rZW4gJ2EnICgpCitTaGlmdGluZyB0b2tlbiAnYScgKCkKK0VudGVyaW5nIHN0YXRlIDEKK1JlYWRpbmcgYSB0b2tlbjogTmV4dCB0b2tlbiBpcyB0b2tlbiAnYicgKCkKK1NoaWZ0aW5nIHRva2VuICdiJyAoKQorRW50ZXJpbmcgc3RhdGUgMworUmVkdWNpbmcgc3RhY2sgMCBieSBydWxlIDMgKGxpbmUgMjUpOgorICAgJDEgPSB0b2tlbiAnYicgKCkKKy0+ICQkID0gbnRlcm0gYiAoKQorRW50ZXJpbmcgc3RhdGUgNAorUmVhZGluZyBhIHRva2VuOiBOZXh0IHRva2VuIGlzIHRva2VuICdjJyAoKQorU2hpZnRpbmcgdG9rZW4gJ2MnICgpCitFbnRlcmluZyBzdGF0ZSA2CitSZWR1Y2luZyBzdGFjayAwIGJ5IHJ1bGUgNCAobGluZSAyNik6CistPiAkJCA9IG50ZXJtIGQgKCkKK0VudGVyaW5nIHN0YXRlIDcKK1JlYWRpbmcgYSB0b2tlbjogTm93IGF0IGVuZCBvZiBpbnB1dC4KK1N0YWNrIDAgRW50ZXJpbmcgc3RhdGUgNworTm93IGF0IGVuZCBvZiBpbnB1dC4KK1NwbGl0dGluZyBvZmYgc3RhY2sgMSBmcm9tIDAuCitSZWR1Y2VkIHN0YWNrIDEgYnkgcnVsZSAjMjsgYWN0aW9uIGRlZmVycmVkLiAgTm93IGluIHN0YXRlIDIuCitTdGFjayAxIEVudGVyaW5nIHN0YXRlIDIKK05vdyBhdCBlbmQgb2YgaW5wdXQuCitSZWR1Y2VkIHN0YWNrIDAgYnkgcnVsZSAjMTsgYWN0aW9uIGRlZmVycmVkLiAgTm93IGluIHN0YXRlIDIuCitNZXJnaW5nIHN0YWNrIDAgaW50byBzdGFjayAxLgorU3RhY2sgMSBFbnRlcmluZyBzdGF0ZSAyCitOb3cgYXQgZW5kIG9mIGlucHV0LgorUmVtb3ZpbmcgZGVhZCBzdGFja3MuCitSZW5hbWUgc3RhY2sgMSAtPiAwLgorT24gc3RhY2sgMCwgc2hpZnRpbmcgdG9rZW4gJGVuZCAoKQorU3RhY2sgMCBub3cgaW4gc3RhdGUgIzUKK0FtYmlndWl0eSBkZXRlY3RlZC4KK09wdGlvbiAxLAorICBzdGFydCAtPiA8UnVsZSAxLCB0b2tlbnMgMSAuLiAzPgorICAgICdhJyA8dG9rZW5zIDEgLi4gMT4KKyAgICBiIDx0b2tlbnMgMiAuLiAyPgorICAgICdjJyA8dG9rZW5zIDMgLi4gMz4KKyAgICBkIDxlbXB0eT4KKworT3B0aW9uIDIsCisgIHN0YXJ0IC0+IDxSdWxlIDIsIHRva2VucyAxIC4uIDM+CisgICAgJ2EnIDx0b2tlbnMgMSAuLiAxPgorICAgIGIgPHRva2VucyAyIC4uIDI+CisgICAgJ2MnIDx0b2tlbnMgMyAuLiAzPgorICAgIGQgPGVtcHR5PgorCitzeW50YXggaXMgYW1iaWd1b3VzCitDbGVhbnVwOiBwb3BwaW5nIHRva2VuICRlbmQgKCkKK0NsZWFudXA6IHBvcHBpbmcgdW5yZXNvbHZlZCBudGVybSBzdGFydCAoKQorQ2xlYW51cDogcG9wcGluZyBudGVybSBkICgpCitDbGVhbnVwOiBwb3BwaW5nIHRva2VuICdjJyAoKQorQ2xlYW51cDogcG9wcGluZyBudGVybSBiICgpCitDbGVhbnVwOiBwb3BwaW5nIHRva2VuICdhJyAoKQogXSkKIAogQVRfQ0xFQU5VUApkaWZmIC0tZ2l0IGEvdGVzdHMvaGVhZGVycy5hdCBiL3Rlc3RzL2hlYWRlcnMuYXQKaW5kZXggYTM0OGQ2NS4uMzUxYjhhNyAxMDA2NDQKLS0tIGEvdGVzdHMvaGVhZGVycy5hdAorKysgYi90ZXN0cy9oZWFkZXJzLmF0CkBAIC0xLDY1ICsxLDQ0IEBACiAjIEJpc29uIFBhcnNlciBIZWFkZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b3Rlc3QgLSotCi0jIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgMjAwNi0yMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIyBhbnkgbGF0ZXIgdmVyc2lvbi4KLQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIwogIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCisjCiAjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSMgMDIxMTAtMTMwMSwgVVNBLgorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIAogQVRfQkFOTkVSKFtbUGFyc2VyIEhlYWRlcnMuXV0pCiAKIAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgJXVuaW9uIGFuZCAtLWRlZmluZXMuICAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotCi0KLUFUX1NFVFVQKFsldW5pb24gYW5kIC0tZGVmaW5lc10pCi0KLUFUX0RBVEEoW2lucHV0LnldLAotWyV1bmlvbgotewotICBpbnQgICBpbnRlZ2VyOwotICBjaGFyICpzdHJpbmcgOwotfQotJSUKLWV4cDoge307Ci1dKQotCi1BVF9DSEVDSyhbYmlzb24gLS1kZWZpbmVzIGlucHV0LnldKQotCi1BVF9DTEVBTlVQCi0KLQotCiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKICMjIEludmFsaWQgQ1BQIGhlYWRlcnMuICAjIwogIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAKLSMgQVRfVEVTVF9DUFBfR1VBUkRfSChbSU5QVVQtRklMRS1CQVNFKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFUX1RFU1RfQ1BQX0dVQVJEX0goQkFTRS1OQU1FLCBbRElSRUNUSVZFU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZJWE1FOiBNdWNoIG9mIHRoaXMgY2FuIGJlIGNvdmVyZWQgYnkgY2FsYy5hdC4KIG00X2RlZmluZShbQVRfVEVTVF9DUFBfR1VBUkRfSF0sCi1bQVRfU0VUVVAoW0ludmFsaWQgQ1BQIGd1YXJkczogJDFdKQotCitbQVRfU0VUVVAoW0ludmFsaWQgQ1BQIGd1YXJkczogJDIgLS1kZWZpbmVzPSQxLmhdKQorQVRfQklTT05fT1BUSU9OX1BVU0hERUZTKFskMl0pCiAjIFBvc3NpYmx5IGNyZWF0ZSBpbm5lciBkaXJlY3Rvcmllcy4KIGRpcm5hbWU9YEFTX0RJUk5BTUUoWyQxXSlgCiBBU19NS0RJUl9QKFskZGlybmFtZV0pCiAKIEFUX0RBVEFfR1JBTU1BUihbJDEueV0sCi1bJXsKK1skMgorJXsKICNpbmNsdWRlIDwkMS5oPgotdm9pZCB5eWVycm9yIChjb25zdCBjaGFyICopOwotaW50IHl5bGV4ICh2b2lkKTsKK11BVF9ZWUVSUk9SX0RFQ0xBUkVfRVhURVJOWworXUFUX1lZTEVYX0RFQ0xBUkVfRVhURVJOWwogJX0KICUlCiBkdW1teTo7CkBAIC02NywxNSArNDYsMTggQEAKICNpbmNsdWRlIDwkMS5oPgogXSkKIAotQVRfQ0hFQ0soW2Jpc29uIC0tZGVmaW5lcz0kMS5oIC0tb3V0cHV0PXkudGFiLmMgJDEueV0pCitBVF9CSVNPTl9DSEVDSyhbLS1kZWZpbmVzPSQxLmggLS1vdXRwdXQ9JDEuYyAkMS55XSkKIAotQVRfQ09NUElMRShbeS50YWIub10sIFstSS4gLWMgeS50YWIuY10pCitBVF9DT01QSUxFKFskMS5vXSwgWy1JLiAtYyAkMS5jXSkKIAorQVRfQklTT05fT1BUSU9OX1BPUERFRlMKIEFUX0NMRUFOVVAKIF0pCiAKIEFUX1RFU1RfQ1BQX0dVQVJEX0goW2lucHV0L2lucHV0XSkKIEFUX1RFU1RfQ1BQX0dVQVJEX0goWzlmb29dKQorQVRfVEVTVF9DUFBfR1VBUkRfSChbaW5wdXQvaW5wdXRdLCBbJWdsci1wYXJzZXJdKQorQVRfVEVTVF9DUFBfR1VBUkRfSChbOWZvb10sICAgICAgICBbJWdsci1wYXJzZXJdKQogCiAKIApAQCAtODksNyArNzEsNyBAQAogQVRfREFUQV9HUkFNTUFSKFtpbnB1dC55XSwKIFslbG9jYXRpb25zCiAKLSVuYW1lLXByZWZpeD0ibXlfIgorJW5hbWUtcHJlZml4ICJteV8iCiAlewogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC0xMTEsNyArOTMsNyBAQAogZXhwOjsKIF0pCiAKLUFUX0NIRUNLKFtiaXNvbiAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55XSkKK0FUX0JJU09OX0NIRUNLKFstLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55XSkKIAogIyBZWUxUWVBFIHNob3VsZCBiZSBkZWZpbmVkLCBhbmQgTVlfTExPQyBkZWNsYXJlZC4KIEFUX0RBVEEoW2NhbGxlci5jXSwKQEAgLTEyOSw5ICsxMTEsMTcxIEBACiAKICMgTGluayBhbmQgZXhlY3V0ZSwganVzdCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBmaW5lIChhbmQgaW4KICMgcGFydGljdWxhciwgdGhhdCBNWV9MTE9DIGlzIGluZGVlZCBkZWZpbmVkIHNvbWV3aGVyZSkuCi1BVF9DT01QSUxFKFtjYWxsZXIub10sIFstYyBjYWxsZXIuY10pCi1BVF9DT01QSUxFKFtpbnB1dC5vXSwgWy1jIGlucHV0LmNdKQorQVRfQ09NUElMRShbY2FsbGVyLm9dKQorQVRfQ09NUElMRShbaW5wdXQub10pCiBBVF9DT01QSUxFKFtjYWxsZXJdLCBbY2FsbGVyLm8gaW5wdXQub10pCiBBVF9QQVJTRVJfQ0hFQ0soWy4vY2FsbGVyXSkKIAogQVRfQ0xFQU5VUAorCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgU2V2ZXJhbCBwYXJzZXJzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1NFVFVQKFtTZXZlcmFsIHBhcnNlcnNdKQorCisjIEFUX1RFU1QoW1BSRUZJWF0sIFtESVJFQ1RJVkVTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBHZW5lcmF0ZSBhbmQgY29tcGlsZSB0byAqLm8uICBNYWtlIHN1cmUgdGhlcmUgaXMgbm8gKGFsbG93ZWQpIFlZKgorIyBub3IgeXkqIGlkZW50aWZpZXJzIGluIHRoZSBoZWFkZXIuICBDaGVjayB0aGF0IGhlYWRlcnMgYXJlCisjIHNlbGYtY29udGFpbmVkLCBhbmQgY2FuIGJlIGNvbXBpbGVkIGJ5IGEgQysrIGNvbXBpbGVyLgorbTRfcHVzaGRlZihbQVRfVEVTVF0sCitbQVRfQklTT05fT1BUSU9OX1BVU0hERUZTKFslZGVmaW5lIGFwaS5wcmVmaXggIiQxXyIgJDJdKQorQVRfREFUQV9HUkFNTUFSKFskMS55XSwKK1tbJWRlZmluZSBhcGkucHJlZml4ICIkMV8iCiskMgorJWVycm9yLXZlcmJvc2UKKyV1bmlvbgoreworICBpbnQgaW50ZWdlcjsKK30KKyV7CisjaW5jbHVkZSA8c3RkaW8uaD4KKyAgXUFUX1lZRVJST1JfREVDTEFSRVsKKyAgXUFUX1lZTEVYX0RFQ0xBUkVbCislfQorJSUKK2V4cDoKKyAgJ3gnICcxJyB7IHByaW50ZiAoIngxXG4iKTsgfQorfCAneCcgJzInIHsgcHJpbnRmICgieDJcbiIpOyB9Cit8ICd4JyAnMycgeyBwcmludGYgKCJ4M1xuIik7IH0KK3wgJ3gnICc0JyB7IHByaW50ZiAoIng0XG4iKTsgfQorfCAneCcgJzUnIHsgcHJpbnRmICgieDVcbiIpOyB9Cit8ICd4JyAnNicgeyBwcmludGYgKCJ4NlxuIik7IH0KK3wgJ3gnICc3JyB7IHByaW50ZiAoIng3XG4iKTsgfQorfCAneCcgJzgnIHsgcHJpbnRmICgieDhcbiIpOyB9Cis7CisKKyUlCitdQVRfWVlFUlJPUl9ERUZJTkVbCitdQVRfWVlMRVhfREVGSU5FKFsiJDEiXSlbCitdXSkKKworQVRfQklTT05fQ0hFQ0soWy1kIC1vICQxLkFUX1NLRUxfQ0NfSUYoW2NjXSwgW2NdKSAkMS55XSkKKworQVRfTEFOR19DT01QSUxFKFskMS5vXSkKK0FUX0NIRUNLKFtbZWNobyAiJDEiID4+ZXhwb3V0XV0pCisKK0FUX0JJU09OX09QVElPTl9QT1BERUZTCitdKSMgQVRfVEVTVAorCitBVF9EQVRBKFttYWluLmNjXSwKK1tBVF9EQVRBX1NPVVJDRV9QUk9MT0dVRQorWy8vIElmIHdlIGFyZSBjb21waWxpbmcgd2l0aCBDQz0kQ1hYLCB0aGVuIGRvIG5vdCBsb2FkIHRoZSBDIGhlYWRlcnMKKy8vIGluc2lkZSBleHRlcm4gIkMiLCBzaW5jZSB0aGV5IHdlcmUgX25vdF8gY29tcGlsZWQgdGhpcyB3YXkuCisjaWYgISBDQ19JU19DWFgKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorICAjaW5jbHVkZSAieDEuaCIKKyAgI2luY2x1ZGUgIngyLmgiCisgICNpbmNsdWRlICJ4My5oIgorICAjaW5jbHVkZSAieDQuaCIKKyAgI2luY2x1ZGUgIng2LmgiCisgICNpbmNsdWRlICJ4Ny5oIgorICAjaW5jbHVkZSAieDguaCIKKyNpZiAhIENDX0lTX0NYWAorfQorI2VuZGlmCisjaW5jbHVkZSAieDUuaGgiCisvLyNpbmNsdWRlICJ4Ni5oaCIKKworI2RlZmluZSBSVU4oUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGludCByZXMgPSBTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChyZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RkOjpjZXJyIDw8ICNTIjogIiA8PCByZXMgPDwgc3RkOjplbmRsOyAgXAorICB9IHdoaWxlIChmYWxzZSkKKworaW50CittYWluICh2b2lkKQoreworICBSVU4oeDFfcGFyc2UoKSk7CisgIFJVTih4Ml9wYXJzZSgpKTsKKyAgUlVOKHgzX3BhcnNlKCkpOworICBSVU4oeDRfcGFyc2UoKSk7CisgIHg1Xzo6cGFyc2VyIHA1OworICBSVU4ocDUucGFyc2UoKSk7CisgIFJVTih4Nl9wYXJzZSgpKTsKKyAgUlVOKHg3X3BhcnNlKCkpOworICBSVU4oeDhfcGFyc2UoKSk7CisvLyAgeDZfOjpwYXJzZXIgcDY7CisvLyAgUlVOKHA2LnBhcnNlKCkpOworICByZXR1cm4gMDsKK30KK11dKSMgbWFpbi5jYworCitBVF9URVNUKFt4MV0sIFtdKQorQVRfVEVTVChbeDJdLCBbJWxvY2F0aW9ucyAlZGVidWddKQorQVRfVEVTVChbeDNdLCBbJWdsci1wYXJzZXJdKQorQVRfVEVTVChbeDRdLCBbJWxvY2F0aW9ucyAlZGVidWcgJWdsci1wYXJzZXJdKQorQVRfVEVTVChbeDVdLCBbJWxvY2F0aW9ucyAlZGVidWcgJWxhbmd1YWdlICJjKysiXSkKK0FUX1RFU1QoW3g2XSwgWyVkZWZpbmUgYXBpLnB1cmVdKQorQVRfVEVTVChbeDddLCBbJWRlZmluZSBhcGkucHVzaC1wdWxsIGJvdGhdKQorQVRfVEVTVChbeDhdLCBbJWRlZmluZSBhcGkucHVyZSAlZGVmaW5lIGFwaS5wdXNoLXB1bGwgYm90aF0pCisjQVRfVEVTVChbeDVdLCBbJWxvY2F0aW9ucyAlbGFuZ3VhZ2UgImMrKyIgJWdsci1wYXJzZXJdKQorCisjIENoZWNrIHRoZXJlIGlzIG5vICd5eScgbGVmdC4KKyMgQysrIG91dHB1dCByZWxpZXMgb24gbmFtZXNwYWNlcyBhbmQgc3RpbGwgdXNlcyB5eSBhIGxvdC4KKyMKKyMgQ2hlY2sgdGhlcmUgaXMgbm8gJ1lZJyBsZWZ0LgorIyBJZ25vcmUgY29tbWVudHMsIFlZQ2hhciAodGVtcGxhdGUgcGFyYW1ldGVyKSwgWVlQQVJTRV9QQVJBTQorIyAob2Jzb2xldGUpLCBZWVBVU0hfTU9SRShfREVGSU5FRCk/ICAoY29uc3RhbnQgZGVmaW5pdGlvbiksCisjIFlZX1x3K19JTkNMVURFRCAoaGVhZGVyIGd1YXJkcykuCisjCisjIFlZREVCVUcgKG5vdCByZW5hbWVkKSBjYW4gYmUgcmVhZCwgYnV0IG5vdCBjaGFuZ2VkLgorQVRfQ0hFQ0soW1skUEVSTCAtbiAtMDc3NyAtZSAnCisgIHN7L1wqLio/XCovfXt9Z3M7CisgIHN7Ly8uKn17fWc7CisgIHN7XGIoWVlDaGFyCisgICAgICB8WVlQQVJTRV9QQVJBTQorICAgICAgfFlZUFVTSF9NT1JFKF9ERUZJTkVEKT8KKyAgICAgIHxZWV9cdytfSU5DTFVERUQKKyAgICAgIHxZWV9OVUxMCisgICAgICB8KGRlZmluZWR8aWYpXCBZWURFQlVHCisgICAgICApXGJ9e31neDsKKyAgd2hpbGUgKC9eKC4qWVkuKikkL2dtKQorICB7CisgICAgcHJpbnQgIiRBUkdWOiBpbnZhbGlkIGV4cG9ydGVkIFlZOiAkMVxuIjsKKyAgfQorICBpZiAoJEFSR1YgPX4gL1wuaCQvKQorICB7CisgICAgd2hpbGUgKC9eKC4qeXkuKikkL2dtKQorICAgIHsKKyAgICAgIHByaW50ICIkQVJHVjogaW52YWxpZCBleHBvcnRlZCB5eTogJDFcbiI7CisgICAgfQorICB9CisnIC0tICouaGggKi5oXV0pCisKKyMgQ2hlY2sgdGhhdCB0aGUgaGVhZGVycyBhcmUgc2VsZi1jb250YWluZWQsIGFuZCBwcm90ZWN0ZWQgYWdhaW5zdAorIyBtdWx0aXBsZSBpbmNsdXNpb25zLiAgV2hpbGUgYXQgaXQsIGNoZWNrIHRoZXkgYXJlIHNhbmUgZm9yIEMrKy4KK2ZvciBoIGluICouaCAqLmhoCitkbworICAjIE5vIHNoZWxsIGV4cGFuc2lvbiB3aXRoIEFUX0RBVEEuCisgIGNhdCA+JGguY2MgPDxFT0YKK0FUX0RBVEFfU09VUkNFX1BST0xPR1VFCisjaW5jbHVkZSAiJGgiCisjaW5jbHVkZSAiJGgiCitFT0YKKyAgQVRfQ09NUElMRV9DWFgoWyRoLm9dKQorZG9uZQorCisjIERvIHRoaXMgbGF0ZSwgc28gdGhhdCBvdGhlciBjaGVja3MgaGF2ZSBiZWVuIHBlcmZvcm1lZC4KK0FUX1NLSVBfSUZfQ0FOTk9UX0xJTktfQ19BTkRfQ1hYCisKK0FUX0NPTVBJTEVfQ1hYKFtwYXJzZXJdLCBbW3hbMS04XS5vIC1EQ0NfSVNfQ1hYPSRDQ19JU19DWFggbWFpbi5jY11dKQorQVRfUEFSU0VSX0NIRUNLKFsuL3BhcnNlcl0sIFswXSwgW1tleHBvdXRdXSkKKworbTRfcG9wZGVmKFtBVF9URVNUXSkKKworQVRfQ0xFQU5VUApkaWZmIC0tZ2l0IGEvdGVzdHMvaW5wdXQuYXQgYi90ZXN0cy9pbnB1dC5hdAppbmRleCA4MmZiZTA2Li42Yjg3NjMzIDEwMDY0NAotLS0gYS90ZXN0cy9pbnB1dC5hdAorKysgYi90ZXN0cy9pbnB1dC5hdApAQCAtMSw1NyArMSw5NyBAQAogIyBDaGVja2luZyB0aGUgQmlzb24gc2Nhbm5lci4gICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvdGVzdCAtKi0KLSMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIENvcHlyaWdodCAoQykgMjAwMi0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSMgYW55IGxhdGVyIHZlcnNpb24uCi0KKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKICMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQorIwogIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0jIDAyMTEwLTEzMDEsIFVTQS4KKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAKIEFUX0JBTk5FUihbW0lucHV0IFByb2Nlc3NpbmcuXV0pCiAKICMgTW9zdGx5IHRlc3QgdGhhdCB3ZSBhcmUgcm9idXN0IHRvIG1pc3Rha2VzLgogCiAKLSMjIC0tLS0tLS0tLS0tLSAjIwotIyMgSW52YWxpZCAkbi4gICMjCi0jIyAtLS0tLS0tLS0tLS0gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEludmFsaWQgaW5wdXRzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKIAotQVRfU0VUVVAoW0ludmFsaWQgZG9sbGFyLW5dKQorQVRfU0VUVVAoW0ludmFsaWQgaW5wdXRzXSkKIAogQVRfREFUQShbaW5wdXQueV0sCi1bWyUlCi1leHA6IHsgJCQgPSAkMSA7IH07CitbW1wwMDBcMDAxXDAwMlwzNzc/CislJQorPworZGVmYXVsdDogJ2EnIH0KKyUmCislYS1kb2VzLW5vdC1leGlzdAorJS0KKyV7CiBdXSkKK0FUX0NIRUNLKFtbJFBFUkwgLXBpIC1lICdzL1xcKFxkezN9KS9jaHIob2N0KCQxKSkvZ2UnIGlucHV0LnkgfHwgZXhpdCA3N11dKQogCi1BVF9DSEVDSyhbYmlzb24gaW5wdXQueV0sIFsxXSwgW10sCi1bW2lucHV0Lnk6Mi4xMy0xNDogaW50ZWdlciBvdXQgb2YgcmFuZ2U6IGAkMScKK0FUX0JJU09OX0NIRUNLKFtpbnB1dC55XSwgWzFdLCBbXSwKK1tbaW5wdXQueToxLjEtMjogZXJyb3I6IGludmFsaWQgY2hhcmFjdGVyczogJ1wwXDAwMVwwMDJcMzc3PycKK2lucHV0Lnk6My4xOiBlcnJvcjogaW52YWxpZCBjaGFyYWN0ZXI6ICc/JworaW5wdXQueTo0LjE0OiBlcnJvcjogaW52YWxpZCBjaGFyYWN0ZXI6ICd9JworaW5wdXQueTo1LjE6IGVycm9yOiBpbnZhbGlkIGNoYXJhY3RlcjogJyUnCitpbnB1dC55OjUuMjogZXJyb3I6IGludmFsaWQgY2hhcmFjdGVyOiAnJicKK2lucHV0Lnk6Ni4xLTE3OiBlcnJvcjogaW52YWxpZCBkaXJlY3RpdmU6ICclYS1kb2VzLW5vdC1leGlzdCcKK2lucHV0Lnk6Ny4xOiBlcnJvcjogaW52YWxpZCBjaGFyYWN0ZXI6ICclJworaW5wdXQueTo3LjI6IGVycm9yOiBpbnZhbGlkIGNoYXJhY3RlcjogJy0nCitpbnB1dC55OjguMS05LjA6IGVycm9yOiBtaXNzaW5nICclfScgYXQgZW5kIG9mIGZpbGUKK2lucHV0Lnk6OC4xLTkuMDogZXJyb3I6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAley4uLiV9CiBdXSkKIAogQVRfQ0xFQU5VUAogCiAKK0FUX1NFVFVQKFtJbnZhbGlkIGlucHV0cyB3aXRoIHt9XSkKKworIyBXZSB1c2VkIHRvIFNFR1YgaGVyZS4gIFNlZQorIyBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDUtMDcvbXNnMDAwNTMuaHRtbAorCitBVF9EQVRBKFtpbnB1dC55XSwKK1tbCislZGVzdHJ1Y3RvcgorJWluaXRpYWwtYWN0aW9uCislbGV4LXBhcmFtCislcGFyc2UtcGFyYW0KKyVwcmludGVyCisldW5pb24KK11dKQorCitBVF9CSVNPTl9DSEVDSyhbaW5wdXQueV0sIFsxXSwgW10sCitbW2lucHV0Lnk6My4xLTE1OiBlcnJvcjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVpbml0aWFsLWFjdGlvbiwgZXhwZWN0aW5nIHsuLi59CitdXSkKKworQVRfQ0xFQU5VUAorCisKKwogIyMgLS0tLS0tLS0tLS0tICMjCi0jIyBJbnZhbGlkIEBuLiAgIyMKKyMjIEludmFsaWQgJG4uICAjIwogIyMgLS0tLS0tLS0tLS0tICMjCiAKLUFUX1NFVFVQKFtJbnZhbGlkIEBuXSkKK0FUX1NFVFVQKFtJbnZhbGlkICRuIGFuZCBAbl0pCiAKIEFUX0RBVEEoW2lucHV0LnldLAogW1slJQorZXhwOiB7ICQkID0gJDEgOyB9OwogZXhwOiB7IEAkID0gQDEgOyB9OwogXV0pCiAKLUFUX0NIRUNLKFtiaXNvbiBpbnB1dC55XSwgWzFdLCBbXSwKLVtbaW5wdXQueToyLjEzLTE0OiBpbnRlZ2VyIG91dCBvZiByYW5nZTogYEAxJworQVRfQklTT05fQ0hFQ0soW2lucHV0LnldLCBbMV0sIFtdLAorW1tpbnB1dC55OjIuMTMtMTQ6IGVycm9yOiBpbnRlZ2VyIG91dCBvZiByYW5nZTogJyQxJworaW5wdXQueTozLjEzLTE0OiBlcnJvcjogaW50ZWdlciBvdXQgb2YgcmFuZ2U6ICdAMScKIF1dKQogCiBBVF9DTEVBTlVQCkBAIC02NCw4NyArMTA0LDM2NSBAQAogQVRfU0VUVVAoW1R5cGUgQ2xhc2hlc10pCiAKIEFUX0RBVEEoW2lucHV0LnldLAotW1sldG9rZW4gZm9vCitbWyV1bmlvbiB7IGludCBiYXI7IH0KKyV0b2tlbiBmb28KICV0eXBlIDxiYXI+IGV4cAogJSUKLWV4cDogZm9vIHt9IGZvbworZXhwOiBmb28geyAkJDsgfSBmb28geyAkMjsgfSBmb28KICAgIHwgZm9vCiAgICB8IC8qIEVtcHR5LiAqLwogICAgOwogXV0pCiAKLUFUX0NIRUNLKFtiaXNvbiBpbnB1dC55XSwgW10sIFtdLAotW1tpbnB1dC55OjQuNi0xNTogd2FybmluZzogdHlwZSBjbGFzaCBvbiBkZWZhdWx0IGFjdGlvbjogPGJhcj4gIT0gPD4KLWlucHV0Lnk6NS42LTg6IHdhcm5pbmc6IHR5cGUgY2xhc2ggb24gZGVmYXVsdCBhY3Rpb246IDxiYXI+ICE9IDw+Ci1pbnB1dC55OjYuNTogd2FybmluZzogZW1wdHkgcnVsZSBmb3IgdHlwZWQgbm9udGVybWluYWwsIGFuZCBubyBhY3Rpb24KK0FUX0JJU09OX0NIRUNLKFtpbnB1dC55XSwgWzFdLCBbXSwKK1tbaW5wdXQueTo1LjEyLTEzOiBlcnJvcjogJCQgZm9yIHRoZSBtaWRydWxlIGF0ICQyIG9mICdleHAnIGhhcyBubyBkZWNsYXJlZCB0eXBlCitpbnB1dC55OjUuMjQtMjU6IGVycm9yOiAkMiBvZiAnZXhwJyBoYXMgbm8gZGVjbGFyZWQgdHlwZQoraW5wdXQueTo1LjYtMzI6IHdhcm5pbmc6IHR5cGUgY2xhc2ggb24gZGVmYXVsdCBhY3Rpb246IDxiYXI+ICE9IDw+CitpbnB1dC55OjYuNi04OiB3YXJuaW5nOiB0eXBlIGNsYXNoIG9uIGRlZmF1bHQgYWN0aW9uOiA8YmFyPiAhPSA8PgoraW5wdXQueTo3LjU6IHdhcm5pbmc6IGVtcHR5IHJ1bGUgZm9yIHR5cGVkIG5vbnRlcm1pbmFsLCBhbmQgbm8gYWN0aW9uCiBdXSkKIAogQVRfQ0xFQU5VUAogCiAKKyMgX0FUX1VOVVNFRF9WQUxVRVNfREVDTEFSQVRJT05TKCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgR2VuZXJhdGUgdGhlIHRva2VuLCB0eXBlLCBhbmQgZGVzdHJ1Y3RvcgorIyBkZWNsYXJhdGlvbnMgZm9yIHRoZSB1bnVzZWQgdmFsdWVzIHRlc3RzLgorCittNF9kZWZpbmUoW19BVF9VTlVTRURfVkFMVUVTX0RFQ0xBUkFUSU9OU10sCitbW1sldG9rZW4gPGludGVnZXI+IElOVDsKKyV0eXBlIDxpbnRlZ2VyPiBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbDsKKyVkZXN0cnVjdG9yIHsgZGVzdHJveSAoJCQpOyB9IElOVCBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbDtdXV0pCisKKworIyBBVF9DSEVDS19VTlVTRURfVkFMVUVTKERFQ0xBUkFUSU9OU19BRlRFUiwgQ0hFQ0tfTUlEUlVMRV9WQUxVRVMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBHZW5lcmF0ZSBhIGdyYW1tYXIgdG8gdGVzdCB1bnVzZWQgdmFsdWVzLAorIyBjb21waWxlIGl0LCBydW4gaXQuICBJZiBERUNMQVJBVElPTlNfQUZURVIKKyMgaXMgc2V0LCB0aGVuIHRoZSB0b2tlbiwgdHlwZSwgYW5kIGRlc3RydWN0b3IKKyMgZGVjbGFyYXRpb25zIGFyZSBnZW5lcmF0ZWQgYWZ0ZXIgdGhlIHJ1bGVzCisjIHJhdGhlciB0aGFuIGJlZm9yZS4gIElmIENIRUNLX01JRFJVTEVfVkFMVUVTCisjIGlzIHNldCwgdGhlbiAtLXdhcm5pbmdzPW1pZHJ1bGUtdmFsdWVzIGlzCisjIHNldC4KKworbTRfZGVmaW5lKFtBVF9DSEVDS19VTlVTRURfVkFMVUVTXSwKK1tBVF9EQVRBKFtpbnB1dC55XSwKK200X2lmdmFsKCQxLCBbCisKKworXSwgW19BVF9VTlVTRURfVkFMVUVTX0RFQ0xBUkFUSU9OUworXSlbWyUlCitzdGFydDoKKyAgJ2EnIGEgeyAkXTJbOyB9IHwgJ2InIGIgeyAkXTJbOyB9IHwgJ2MnIGMgeyAkXTJbOyB9IHwgJ2QnIGQgeyAkXTJbOyB9Cit8ICdlJyBlIHsgJF0yWzsgfSB8ICdmJyBmIHsgJF0yWzsgfSB8ICdnJyBnIHsgJF0yWzsgfSB8ICdoJyBoIHsgJF0yWzsgfQorfCAnaScgaSB7ICRdMls7IH0gfCAnaicgaiB7ICRdMls7IH0gfCAnaycgayB7ICRdMls7IH0gfCAnbCcgbCB7ICRdMls7IH0KKzsKKworYTogSU5UIHwgSU5UIHsgfSBJTlQgeyB9IElOVCB7IH07CitiOiBJTlQgfCAvKiBlbXB0eSAqLzsKK2M6IElOVCB8IElOVCB7ICRdMVs7IH0gSU5UIHsgJDxpbnRlZ2VyPjI7IH0gSU5UIHsgJDxpbnRlZ2VyPjQ7IH07CitkOiBJTlQgfCBJTlQgeyB9IElOVCB7ICRdMVs7IH0gSU5UIHsgJDxpbnRlZ2VyPjI7IH07CitlOiBJTlQgfCBJTlQgeyB9IElOVCB7ICB9IElOVCB7ICRdMVs7IH07CitmOiBJTlQgfCBJTlQgeyB9IElOVCB7ICB9IElOVCB7ICRdJFsgPSAkXTFbICsgJF0zWyArICRdNVs7IH07CitnOiBJTlQgfCBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyB9OworaDogSU5UIHwgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgJDxpbnRlZ2VyPiQgPSAkPGludGVnZXI+MjsgfSBJTlQgeyB9OworaTogSU5UIHwgSU5UIElOVCB7IH0geyAkXSRbID0gJF0xWyArICRdMls7IH07CitqOiBJTlQgfCBJTlQgSU5UIHsgJDxpbnRlZ2VyPiQgPSAxOyB9IHsgJF0kWyA9ICRdMVsgKyAkXTJbOyB9OworazogSU5UIHwgSU5UIElOVCB7ICQ8aW50ZWdlcj4kOyB9IHsgJDxpbnRlZ2VyPiQgPSAkPGludGVnZXI+MzsgfSB7IH07CitsOiBJTlQgfCBJTlQgeyAkPGludGVnZXI+JCA9ICQ8aW50ZWdlcj4xOyB9IElOVCB7ICQ8aW50ZWdlcj4kID0gJDxpbnRlZ2VyPjIgKyAkPGludGVnZXI+MzsgfSBJTlQgeyAkPGludGVnZXI+JCA9ICQ8aW50ZWdlcj40ICsgJDxpbnRlZ2VyPjU7IH07XV1tNF9pZnZhbCgkMSwgWworX0FUX1VOVVNFRF9WQUxVRVNfREVDTEFSQVRJT05TXSkKKykKKworQVRfQklTT05fQ0hFQ0sobTRfaWZ2YWwoJDIsIFstLXdhcm5pbmdzPW1pZHJ1bGUtdmFsdWVzIF0pWy1mY2FyZXQgaW5wdXQueV0sCisgICAgICAgICAgICAgICBbMF0sIFtdLAorW1tpbnB1dC55OjExLjEwLTMyOiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogJF1bJAorIGE6IElOVCB8IElOVCB7IH0gSU5UIHsgfSBJTlQgeyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjExLjEwLTEyOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICRdWzEKKyBhOiBJTlQgfCBJTlQgeyB9IElOVCB7IH0gSU5UIHsgfTsKKyAgICAgICAgICBeXl4KK2lucHV0Lnk6MTEuMTgtMjA6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJF1bMworIGE6IElOVCB8IElOVCB7IH0gSU5UIHsgfSBJTlQgeyB9OworICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjExLjI2LTI4OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICRdWzUKKyBhOiBJTlQgfCBJTlQgeyB9IElOVCB7IH0gSU5UIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjEyLjk6IHdhcm5pbmc6IGVtcHR5IHJ1bGUgZm9yIHR5cGVkIG5vbnRlcm1pbmFsLCBhbmQgbm8gYWN0aW9uCisgYjogSU5UIHwgLyogZW1wdHkgKi87CisgICAgICAgICBeCitdXW00X2lmdmFsKCQyLCBbW1tpbnB1dC55OjEzLjE0LTIwOiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogJF1bJAorIGM6IElOVCB8IElOVCB7ICRdWzE7IH0gSU5UIHsgJDxpbnRlZ2VyPjI7IH0gSU5UIHsgJDxpbnRlZ2VyPjQ7IH07CisgICAgICAgICAgICAgIF5eXl5eXl4KK2lucHV0Lnk6MTMuMjYtNDE6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkXVskCisgYzogSU5UIHwgSU5UIHsgJF1bMTsgfSBJTlQgeyAkPGludGVnZXI+MjsgfSBJTlQgeyAkPGludGVnZXI+NDsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXgorXV1dKVtbaW5wdXQueToxMy4xMC02Mjogd2FybmluZzogdW5zZXQgdmFsdWU6ICRdWyQKKyBjOiBJTlQgfCBJTlQgeyAkXVsxOyB9IElOVCB7ICQ8aW50ZWdlcj4yOyB9IElOVCB7ICQ8aW50ZWdlcj40OyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjEzLjIyLTI0OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICRdWzMKKyBjOiBJTlQgfCBJTlQgeyAkXVsxOyB9IElOVCB7ICQ8aW50ZWdlcj4yOyB9IElOVCB7ICQ8aW50ZWdlcj40OyB9OworICAgICAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxMy40My00NTogd2FybmluZzogdW51c2VkIHZhbHVlOiAkXVs1CisgYzogSU5UIHwgSU5UIHsgJF1bMTsgfSBJTlQgeyAkPGludGVnZXI+MjsgfSBJTlQgeyAkPGludGVnZXI+NDsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK11dbTRfaWZ2YWwoJDIsIFtbW2lucHV0Lnk6MTQuMTQtMTY6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkXVskCisgZDogSU5UIHwgSU5UIHsgfSBJTlQgeyAkXVsxOyB9IElOVCB7ICQ8aW50ZWdlcj4yOyB9OworICAgICAgICAgICAgICBeXl4KK11dXSlbW2lucHV0Lnk6MTQuMTAtNDk6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkXVskCisgZDogSU5UIHwgSU5UIHsgfSBJTlQgeyAkXVsxOyB9IElOVCB7ICQ8aW50ZWdlcj4yOyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTQuMTgtMjA6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJF1bMworIGQ6IElOVCB8IElOVCB7IH0gSU5UIHsgJF1bMTsgfSBJTlQgeyAkPGludGVnZXI+MjsgfTsKKyAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxNC4zMC0zMjogd2FybmluZzogdW51c2VkIHZhbHVlOiAkXVs1CisgZDogSU5UIHwgSU5UIHsgfSBJTlQgeyAkXVsxOyB9IElOVCB7ICQ8aW50ZWdlcj4yOyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjE1LjEwLTM3OiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogJF1bJAorIGU6IElOVCB8IElOVCB7IH0gSU5UIHsgIH0gSU5UIHsgJF1bMTsgfTsKKyAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjE1LjE4LTIwOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICRdWzMKKyBlOiBJTlQgfCBJTlQgeyB9IElOVCB7ICB9IElOVCB7ICRdWzE7IH07CisgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTUuMjctMjk6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJF1bNQorIGU6IElOVCB8IElOVCB7IH0gSU5UIHsgIH0gSU5UIHsgJF1bMTsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxNy4xMC01ODogd2FybmluZzogdW5zZXQgdmFsdWU6ICRdWyQKKyBnOiBJTlQgfCBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTcuMTAtMTI6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJF1bMQorIGc6IElOVCB8IElOVCB7ICQ8aW50ZWdlcj4kOyB9IElOVCB7ICQ8aW50ZWdlcj4kOyB9IElOVCB7IH07CisgICAgICAgICAgXl5eCitdXW00X2lmdmFsKCQyLCBbW1tpbnB1dC55OjE3LjE0LTI5OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICRdWzIKKyBnOiBJTlQgfCBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyB9OworICAgICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eCitdXV0pW1tpbnB1dC55OjE3LjMxLTMzOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICRdWzMKKyBnOiBJTlQgfCBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXgorXV1tNF9pZnZhbCgkMiwgW1tbaW5wdXQueToxNy4zNS01MDogd2FybmluZzogdW51c2VkIHZhbHVlOiAkXVs0CisgZzogSU5UIHwgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXgorXV1dKVtbaW5wdXQueToxNy41Mi01NDogd2FybmluZzogdW51c2VkIHZhbHVlOiAkXVs1CisgZzogSU5UIHwgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTguMTAtNzI6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkXVskCisgaDogSU5UIHwgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgJDxpbnRlZ2VyPiQgPSAkPGludGVnZXI+MjsgfSBJTlQgeyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgoraW5wdXQueToxOC4xMC0xMjogd2FybmluZzogdW51c2VkIHZhbHVlOiAkXVsxCisgaDogSU5UIHwgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgJDxpbnRlZ2VyPiQgPSAkPGludGVnZXI+MjsgfSBJTlQgeyB9OworICAgICAgICAgIF5eXgoraW5wdXQueToxOC4zMS0zMzogd2FybmluZzogdW51c2VkIHZhbHVlOiAkXVszCisgaDogSU5UIHwgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgJDxpbnRlZ2VyPiQgPSAkPGludGVnZXI+MjsgfSBJTlQgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXgorXV1tNF9pZnZhbCgkMiwgW1tbaW5wdXQueToxOC4zNS02NDogd2FybmluZzogdW51c2VkIHZhbHVlOiAkXVs0CisgaDogSU5UIHwgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgJDxpbnRlZ2VyPiQgPSAkPGludGVnZXI+MjsgfSBJTlQgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK11dXSlbW2lucHV0Lnk6MTguNjYtNjg6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJF1bNQorIGg6IElOVCB8IElOVCB7ICQ8aW50ZWdlcj4kOyB9IElOVCB7ICQ8aW50ZWdlcj4kID0gJDxpbnRlZ2VyPjI7IH0gSU5UIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXgorXV1tNF9pZnZhbCgkMiwgW1tbaW5wdXQueToyMC4xOC0zNzogd2FybmluZzogdW51c2VkIHZhbHVlOiAkXVszCisgajogSU5UIHwgSU5UIElOVCB7ICQ8aW50ZWdlcj4kID0gMTsgfSB7ICRdWyQgPSAkXVsxICsgJF1bMjsgfTsKKyAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eCitdXV0pW1tpbnB1dC55OjIxLjEwLTY4OiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogJF1bJAorIGs6IElOVCB8IElOVCBJTlQgeyAkPGludGVnZXI+JDsgfSB7ICQ8aW50ZWdlcj4kID0gJDxpbnRlZ2VyPjM7IH0geyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjIxLjEwLTEyOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICRdWzEKKyBrOiBJTlQgfCBJTlQgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0geyAkPGludGVnZXI+JCA9ICQ8aW50ZWdlcj4zOyB9IHsgfTsKKyAgICAgICAgICBeXl4KK2lucHV0Lnk6MjEuMTQtMTY6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJF1bMgorIGs6IElOVCB8IElOVCBJTlQgeyAkPGludGVnZXI+JDsgfSB7ICQ8aW50ZWdlcj4kID0gJDxpbnRlZ2VyPjM7IH0geyB9OworICAgICAgICAgICAgICBeXl4KK11dbTRfaWZ2YWwoJDIsIFtbW2lucHV0Lnk6MjEuMzUtNjQ6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJF1bNAorIGs6IElOVCB8IElOVCBJTlQgeyAkPGludGVnZXI+JDsgfSB7ICQ8aW50ZWdlcj4kID0gJDxpbnRlZ2VyPjM7IH0geyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK11dXSkpCitdKQorCiAjIyAtLS0tLS0tLS0tLS0tLS0gIyMKICMjIFVudXNlZCB2YWx1ZXMuICAjIwogIyMgLS0tLS0tLS0tLS0tLS0tICMjCiAKIEFUX1NFVFVQKFtVbnVzZWQgdmFsdWVzXSkKK0FUX0NIRUNLX1VOVVNFRF9WQUxVRVMKK0FUX0NIRUNLX1VOVVNFRF9WQUxVRVMoLCBbMV0pCitBVF9DTEVBTlVQCiAKLUFUX0RBVEEoW2lucHV0LnldLAotW1sldG9rZW4gPGludGVnZXI+IElOVAotJXR5cGUgPGludGVnZXI+IGEgYiBjIGQgZSBmIGcgaCBpIGogayBsCi0lZGVzdHJ1Y3RvciB7IGRlc3Ryb3kgKCQkKTsgfSBJTlQgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBVbnVzZWQgdmFsdWVzIGJlZm9yZSBzeW1ib2wgZGVjbGFyYXRpb25zLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitBVF9TRVRVUChbVW51c2VkIHZhbHVlcyBiZWZvcmUgc3ltYm9sIGRlY2xhcmF0aW9uc10pCitBVF9DSEVDS19VTlVTRURfVkFMVUVTKFsxXSkKK0FUX0NIRUNLX1VOVVNFRF9WQUxVRVMoWzFdLCBbMV0pCitBVF9DTEVBTlVQCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBEZWZhdWx0ICVwcmludGVyIGFuZCAlZGVzdHJ1Y3RvciByZWRlY2xhcmVkLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitBVF9TRVRVUChbRGVmYXVsdCAlcHJpbnRlciBhbmQgJWRlc3RydWN0b3IgcmVkZWNsYXJlZF0pCisKK0FUX0RBVEEoW1tpbnB1dC55XV0sCitbWyVkZXN0cnVjdG9yIHsgZGVzdHJveSAoJCQpOyB9IDwqPiA8Kj4KKyVwcmludGVyIHsgcHJpbnQgKCQkKTsgfSA8Kj4gPCo+CisKKyVkZXN0cnVjdG9yIHsgZGVzdHJveSAoJCQpOyB9IDwqPgorJXByaW50ZXIgeyBwcmludCAoJCQpOyB9IDwqPgorCislZGVzdHJ1Y3RvciB7IGRlc3Ryb3kgKCQkKTsgfSA8PiA8PgorJXByaW50ZXIgeyBwcmludCAoJCQpOyB9IDw+IDw+CisKKyVkZXN0cnVjdG9yIHsgZGVzdHJveSAoJCQpOyB9IDw+CislcHJpbnRlciB7IHByaW50ICgkJCk7IH0gPD4KKwogJSUKLXN0YXJ0OgotICAnYScgYSB7ICQyIH0gfCAnYicgYiB7ICQyIH0gfCAnYycgYyB7ICQyIH0gfCAnZCcgZCB7ICQyIH0gfCAnZScgZSB7ICQyIH0KLXwgJ2YnIGYgeyAkMiB9IHwgJ2cnIGcgeyAkMiB9IHwgJ2gnIGggeyAkMiB9IHwgJ2knIGkgeyAkMiB9IHwgJ2onIGogeyAkMiB9Ci18ICdrJyBrIHsgJDIgfSB8ICdsJyBsIHsgJDIgfQotOwogCi1hOiBJTlQgfCBJTlQgeyB9IElOVCB7IH0gSU5UIHsgfTsKLWI6IElOVCB8IC8qIGVtcHR5ICovOwotYzogSU5UIHwgSU5UIHsgJDEgfSBJTlQgeyB9IElOVCB7IH07Ci1kOiBJTlQgfCBJTlQgeyB9IElOVCB7ICQxIH0gSU5UIHsgfTsKLWU6IElOVCB8IElOVCB7IH0gSU5UIHsgIH0gSU5UIHsgJDEgfTsKLWY6IElOVCB8IElOVCB7IH0gSU5UIHsgIH0gSU5UIHsgJCQgPSAkMSArICQzICsgJDU7IH07Ci1nOiBJTlQgfCBJTlQgeyAkJCB9IElOVCB7ICQkIH0gSU5UIHsgfTsKLWg6IElOVCB8IElOVCB7ICQkIH0gSU5UIHsgJCQgPSAkMiB9IElOVCB7IH07Ci1pOiBJTlQgfCBJTlQgSU5UIHsgfSB7ICQkID0gJDEgKyAkMjsgfTsKLWo6IElOVCB8IElOVCBJTlQgeyAkPGludGVnZXI+JCA9IDE7IH0geyAkJCA9ICQxICsgJDI7IH07Ci1rOiBJTlQgfCBJTlQgSU5UIHsgJCQ7IH0geyAkJCA9ICQzOyB9IHsgfTsKLWw6IElOVCB8IElOVCB7ICQkID0gJDE7IH0gSU5UIHsgJCQgPSAkMiArICQzOyB9IElOVCB7ICQkID0gJDQgKyAkNTsgfTsKK3N0YXJ0OiA7CiAKKyVkZXN0cnVjdG9yIHsgZGVzdHJveSAoJCQpOyB9IDwqPjsKKyVwcmludGVyIHsgcHJpbnQgKCQkKTsgfSA8Kj47CisKKyVkZXN0cnVjdG9yIHsgZGVzdHJveSAoJCQpOyB9IDw+OworJXByaW50ZXIgeyBwcmludCAoJCQpOyB9IDw+OwogXV0pCiAKLUFUX0NIRUNLKFtiaXNvbiBpbnB1dC55XSwgW10sIFtdLAotW1tpbnB1dC55OjExLjEwLTMyOiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogJCQKLWlucHV0Lnk6MTEuMTAtMzI6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDEKLWlucHV0Lnk6MTEuMTAtMzI6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDMKLWlucHV0Lnk6MTEuMTAtMzI6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDUKLWlucHV0Lnk6MTIuOTogd2FybmluZzogZW1wdHkgcnVsZSBmb3IgdHlwZWQgbm9udGVybWluYWwsIGFuZCBubyBhY3Rpb24KLWlucHV0Lnk6MTMuMTAtMzU6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkJAotaW5wdXQueToxMy4xMC0zNTogd2FybmluZzogdW51c2VkIHZhbHVlOiAkMwotaW5wdXQueToxMy4xMC0zNTogd2FybmluZzogdW51c2VkIHZhbHVlOiAkNQotaW5wdXQueToxNC4xMC0zNTogd2FybmluZzogdW5zZXQgdmFsdWU6ICQkCi1pbnB1dC55OjE0LjEwLTM1OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQzCi1pbnB1dC55OjE0LjEwLTM1OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQ1Ci1pbnB1dC55OjE1LjEwLTM2OiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogJCQKLWlucHV0Lnk6MTUuMTAtMzY6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDMKLWlucHV0Lnk6MTUuMTAtMzY6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDUKLWlucHV0Lnk6MTcuMTAtMzg6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkJAotaW5wdXQueToxNy4xMC0zODogd2FybmluZzogdW51c2VkIHZhbHVlOiAkMQotaW5wdXQueToxNy4xMC0zODogd2FybmluZzogdW51c2VkIHZhbHVlOiAkMgotaW5wdXQueToxNy4xMC0zODogd2FybmluZzogdW51c2VkIHZhbHVlOiAkMwotaW5wdXQueToxNy4xMC0zODogd2FybmluZzogdW51c2VkIHZhbHVlOiAkNAotaW5wdXQueToxNy4xMC0zODogd2FybmluZzogdW51c2VkIHZhbHVlOiAkNQotaW5wdXQueToxOC4xMC00Mzogd2FybmluZzogdW5zZXQgdmFsdWU6ICQkCi1pbnB1dC55OjE4LjEwLTQzOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQxCi1pbnB1dC55OjE4LjEwLTQzOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQzCi1pbnB1dC55OjE4LjEwLTQzOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQ0Ci1pbnB1dC55OjE4LjEwLTQzOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQ1Ci1pbnB1dC55OjIwLjEwLTU1OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQzCi1pbnB1dC55OjIxLjEwLTQxOiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogJCQKLWlucHV0Lnk6MjEuMTAtNDE6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDEKLWlucHV0Lnk6MjEuMTAtNDE6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDIKLWlucHV0Lnk6MjEuMTAtNDE6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDQKK0FUX0JJU09OX0NIRUNLKFtpbnB1dC55XSwgWzFdLCBbXSwKK1tbaW5wdXQueToxLjEzLTI5OiBlcnJvcjogcmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdnZWQgJWRlc3RydWN0b3IKK2lucHV0Lnk6MS4xMy0yOTogICAgIHByZXZpb3VzIGRlY2xhcmF0aW9uCitpbnB1dC55OjIuMTAtMjQ6IGVycm9yOiByZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlcHJpbnRlcgoraW5wdXQueToyLjEwLTI0OiAgICAgcHJldmlvdXMgZGVjbGFyYXRpb24KK2lucHV0Lnk6NC4xMy0yOTogZXJyb3I6IHJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICVkZXN0cnVjdG9yCitpbnB1dC55OjEuMTMtMjk6ICAgICBwcmV2aW91cyBkZWNsYXJhdGlvbgoraW5wdXQueTo1LjEwLTI0OiBlcnJvcjogcmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdnZWQgJXByaW50ZXIKK2lucHV0Lnk6Mi4xMC0yNDogICAgIHByZXZpb3VzIGRlY2xhcmF0aW9uCitpbnB1dC55OjcuMTMtMjk6IGVycm9yOiByZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJWRlc3RydWN0b3IKK2lucHV0Lnk6Ny4xMy0yOTogICAgIHByZXZpb3VzIGRlY2xhcmF0aW9uCitpbnB1dC55OjguMTAtMjQ6IGVycm9yOiByZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJXByaW50ZXIKK2lucHV0Lnk6OC4xMC0yNDogICAgIHByZXZpb3VzIGRlY2xhcmF0aW9uCitpbnB1dC55OjEwLjEzLTI5OiBlcnJvcjogcmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdsZXNzICVkZXN0cnVjdG9yCitpbnB1dC55OjcuMTMtMjk6ICAgICAgcHJldmlvdXMgZGVjbGFyYXRpb24KK2lucHV0Lnk6MTEuMTAtMjQ6IGVycm9yOiByZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJXByaW50ZXIKK2lucHV0Lnk6OC4xMC0yNDogICAgICBwcmV2aW91cyBkZWNsYXJhdGlvbgoraW5wdXQueToxNy4xMy0yOTogZXJyb3I6IHJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICVkZXN0cnVjdG9yCitpbnB1dC55OjQuMTMtMjk6ICAgICAgcHJldmlvdXMgZGVjbGFyYXRpb24KK2lucHV0Lnk6MTguMTAtMjQ6IGVycm9yOiByZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlcHJpbnRlcgoraW5wdXQueTo1LjEwLTI0OiAgICAgIHByZXZpb3VzIGRlY2xhcmF0aW9uCitpbnB1dC55OjIwLjEzLTI5OiBlcnJvcjogcmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdsZXNzICVkZXN0cnVjdG9yCitpbnB1dC55OjEwLjEzLTI5OiAgICAgcHJldmlvdXMgZGVjbGFyYXRpb24KK2lucHV0Lnk6MjEuMTAtMjQ6IGVycm9yOiByZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJXByaW50ZXIKK2lucHV0Lnk6MTEuMTAtMjQ6ICAgICBwcmV2aW91cyBkZWNsYXJhdGlvbgorXV0pCisKK0FUX0NMRUFOVVAKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBQZXItdHlwZSAlcHJpbnRlciBhbmQgJWRlc3RydWN0b3IgcmVkZWNsYXJlZC4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1NFVFVQKFtQZXItdHlwZSAlcHJpbnRlciBhbmQgJWRlc3RydWN0b3IgcmVkZWNsYXJlZF0pCisKK0FUX0RBVEEoW1tpbnB1dC55XV0sCitbWyVkZXN0cnVjdG9yIHsgZGVzdHJveSAoJCQpOyB9IDxmaWVsZDE+IDxmaWVsZDI+CislcHJpbnRlciB7IHByaW50ICgkJCk7IH0gPGZpZWxkMT4gPGZpZWxkMj4KKworJWRlc3RydWN0b3IgeyBkZXN0cm95ICgkJCk7IH0gPGZpZWxkMT4gPGZpZWxkMT4KKyVwcmludGVyIHsgcHJpbnQgKCQkKTsgfSA8ZmllbGQyPiA8ZmllbGQyPgorCislJQorCitzdGFydDogOworCislZGVzdHJ1Y3RvciB7IGRlc3Ryb3kgKCQkKTsgfSA8ZmllbGQyPiA8ZmllbGQxPjsKKyVwcmludGVyIHsgcHJpbnQgKCQkKTsgfSA8ZmllbGQyPiA8ZmllbGQxPjsKK11dKQorCitBVF9CSVNPTl9DSEVDSyhbaW5wdXQueV0sIFsxXSwgW10sCitbW2lucHV0Lnk6NC4xMy0yOTogZXJyb3I6ICVkZXN0cnVjdG9yIHJlZGVjbGFyYXRpb24gZm9yIDxmaWVsZDE+CitpbnB1dC55OjEuMTMtMjk6ICAgICBwcmV2aW91cyBkZWNsYXJhdGlvbgoraW5wdXQueTo0LjEzLTI5OiBlcnJvcjogJWRlc3RydWN0b3IgcmVkZWNsYXJhdGlvbiBmb3IgPGZpZWxkMT4KK2lucHV0Lnk6NC4xMy0yOTogICAgIHByZXZpb3VzIGRlY2xhcmF0aW9uCitpbnB1dC55OjUuMTAtMjQ6IGVycm9yOiAlcHJpbnRlciByZWRlY2xhcmF0aW9uIGZvciA8ZmllbGQyPgoraW5wdXQueToyLjEwLTI0OiAgICAgcHJldmlvdXMgZGVjbGFyYXRpb24KK2lucHV0Lnk6NS4xMC0yNDogZXJyb3I6ICVwcmludGVyIHJlZGVjbGFyYXRpb24gZm9yIDxmaWVsZDI+CitpbnB1dC55OjUuMTAtMjQ6ICAgICBwcmV2aW91cyBkZWNsYXJhdGlvbgoraW5wdXQueToxMS4xMy0yOTogZXJyb3I6ICVkZXN0cnVjdG9yIHJlZGVjbGFyYXRpb24gZm9yIDxmaWVsZDE+CitpbnB1dC55OjQuMTMtMjk6ICAgICAgcHJldmlvdXMgZGVjbGFyYXRpb24KK2lucHV0Lnk6MTEuMTMtMjk6IGVycm9yOiAlZGVzdHJ1Y3RvciByZWRlY2xhcmF0aW9uIGZvciA8ZmllbGQyPgoraW5wdXQueToxLjEzLTI5OiAgICAgIHByZXZpb3VzIGRlY2xhcmF0aW9uCitpbnB1dC55OjEyLjEwLTI0OiBlcnJvcjogJXByaW50ZXIgcmVkZWNsYXJhdGlvbiBmb3IgPGZpZWxkMT4KK2lucHV0Lnk6Mi4xMC0yNDogICAgICBwcmV2aW91cyBkZWNsYXJhdGlvbgoraW5wdXQueToxMi4xMC0yNDogZXJyb3I6ICVwcmludGVyIHJlZGVjbGFyYXRpb24gZm9yIDxmaWVsZDI+CitpbnB1dC55OjUuMTAtMjQ6ICAgICAgcHJldmlvdXMgZGVjbGFyYXRpb24KK11dKQorCitBVF9DTEVBTlVQCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgVW51c2VkIHZhbHVlcyB3aXRoIGRlZmF1bHQgJWRlc3RydWN0b3IuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitBVF9TRVRVUChbVW51c2VkIHZhbHVlcyB3aXRoIGRlZmF1bHQgJWRlc3RydWN0b3JdKQorCitBVF9EQVRBKFtbaW5wdXQueV1dLAorW1slZGVzdHJ1Y3RvciB7IGRlc3Ryb3kgKCQkKTsgfSA8PgorJXR5cGUgPHRhZz4gdGFnZ2VkCisKKyUlCisKK3N0YXJ0OiBlbmQgZW5kIHRhZ2dlZCB0YWdnZWQgeyAkPHRhZz4xOyAkMzsgfSA7CitlbmQ6IHsgfSA7Cit0YWdnZWQ6IHsgfSA7CitdXSkKKworQVRfQklTT05fQ0hFQ0soW2lucHV0LnldLCBbMF0sIFtdLAorW1tpbnB1dC55OjYuOC00NTogd2FybmluZzogdW5zZXQgdmFsdWU6ICQkCitpbnB1dC55OjYuMTItMTQ6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDIKK2lucHV0Lnk6Ny42LTg6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkJAorXV0pCisKK0FUX0RBVEEoW1tpbnB1dC55XV0sCitbWyVkZXN0cnVjdG9yIHsgZGVzdHJveSAoJCQpOyB9IDwqPgorJXR5cGUgPHRhZz4gdGFnZ2VkCisKKyUlCisKK3N0YXJ0OiBlbmQgZW5kIHRhZ2dlZCB0YWdnZWQgeyAkPHRhZz4xOyAkMzsgfSA7CitlbmQ6IHsgfSA7Cit0YWdnZWQ6IHsgfSA7CitdXSkKKworQVRfQklTT05fQ0hFQ0soW2lucHV0LnldLCBbMF0sIFtdLAorW1tpbnB1dC55OjYuMjMtMjg6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDQKK2lucHV0Lnk6OC45LTExOiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogJCQKK11dKQorCitBVF9DTEVBTlVQCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFVudXNlZCB2YWx1ZXMgd2l0aCBwZXItdHlwZSAlZGVzdHJ1Y3Rvci4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitBVF9TRVRVUChbVW51c2VkIHZhbHVlcyB3aXRoIHBlci10eXBlICVkZXN0cnVjdG9yXSkKKworQVRfREFUQShbW2lucHV0LnldXSwKK1tbJWRlc3RydWN0b3IgeyBkZXN0cm95ICgkJCk7IH0gPGZpZWxkMT4KKyV0eXBlIDxmaWVsZDE+IHN0YXJ0IGVuZAorCislJQorCitzdGFydDogZW5kIGVuZCB7ICQxOyB9IDsKK2VuZDogeyB9ICA7CitdXSkKKworQVRfQklTT05fQ0hFQ0soW2lucHV0LnldLCBbMF0sIFtdLAorW1tpbnB1dC55OjYuOC0yMjogd2FybmluZzogdW5zZXQgdmFsdWU6ICQkCitpbnB1dC55OjYuMTItMTQ6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDIKK2lucHV0Lnk6Ny42LTg6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkJAogXV0pCiAKIEFUX0NMRUFOVVAKQEAgLTE3MywxNSArNDkxLDE1IEBACiBleHA6IGZvbzsKIF1dKQogCi1BVF9DSEVDSyhbYmlzb24gaW5wdXQueV0sIFsxXSwgW10sCi1bW2lucHV0Lnk6OC43LTExOiAldHlwZSByZWRlY2xhcmF0aW9uIGZvciBmb28KLWlucHV0Lnk6My43LTExOiBmaXJzdCBkZWNsYXJhdGlvbgotaW5wdXQueToxMC4xMy0xNzogJWRlc3RydWN0b3IgcmVkZWNsYXJhdGlvbiBmb3IgZm9vCi1pbnB1dC55OjUuMTMtMTc6IGZpcnN0IGRlY2xhcmF0aW9uCi1pbnB1dC55OjkuMTAtMTQ6ICVwcmludGVyIHJlZGVjbGFyYXRpb24gZm9yIGZvbwotaW5wdXQueToxMC4xMy0xNzogZmlyc3QgZGVjbGFyYXRpb24KLWlucHV0Lnk6MTEuMS01OiAlbGVmdCByZWRlY2xhcmF0aW9uIGZvciBmb28KLWlucHV0Lnk6Ni4xLTU6IGZpcnN0IGRlY2xhcmF0aW9uCitBVF9CSVNPTl9DSEVDSyhbaW5wdXQueV0sIFsxXSwgW10sCitbW2lucHV0Lnk6OC43LTExOiBlcnJvcjogJXR5cGUgcmVkZWNsYXJhdGlvbiBmb3IgZm9vCitpbnB1dC55OjMuNy0xMTogICAgIHByZXZpb3VzIGRlY2xhcmF0aW9uCitpbnB1dC55OjEwLjEzLTE3OiBlcnJvcjogJWRlc3RydWN0b3IgcmVkZWNsYXJhdGlvbiBmb3IgZm9vCitpbnB1dC55OjUuMTMtMTc6ICAgICAgcHJldmlvdXMgZGVjbGFyYXRpb24KK2lucHV0Lnk6OS4xMC0xNDogZXJyb3I6ICVwcmludGVyIHJlZGVjbGFyYXRpb24gZm9yIGZvbworaW5wdXQueTo0LjEwLTE0OiAgICAgcHJldmlvdXMgZGVjbGFyYXRpb24KK2lucHV0Lnk6MTEuMS01OiBlcnJvcjogJWxlZnQgcmVkZWNsYXJhdGlvbiBmb3IgZm9vCitpbnB1dC55OjYuMS01OiAgICAgIHByZXZpb3VzIGRlY2xhcmF0aW9uCiBdXSkKIAogQVRfQ0xFQU5VUApAQCAtMTk3LDE4ICs1MTUsMTggQEAKIAogQVRfU0VUVVAoW1RvcnR1cmluZyB0aGUgU2Nhbm5lcl0pCiAKLQorQVRfQklTT05fT1BUSU9OX1BVU0hERUZTCiBBVF9EQVRBKFtpbnB1dC55XSwgW10pCi1BVF9DSEVDSyhbYmlzb24gaW5wdXQueV0sIFsxXSwgW10sCi1bW2lucHV0Lnk6MS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUKK0FUX0JJU09OX0NIRUNLKFtpbnB1dC55XSwgWzFdLCBbXSwKK1tbaW5wdXQueToxLjE6IGVycm9yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUKIF1dKQogCiAKLUFUX0RBVEEoW2lucHV0LnldLCAKK0FUX0RBVEEoW2lucHV0LnldLAogW3t9CiBdKQotQVRfQ0hFQ0soW2Jpc29uIGlucHV0LnldLCBbMV0sIFtdLAotW1tpbnB1dC55OjEuMS0yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgey4uLn0KK0FUX0JJU09OX0NIRUNLKFtpbnB1dC55XSwgWzFdLCBbXSwKK1tbaW5wdXQueToxLjEtMjogZXJyb3I6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCB7Li4ufQogXV0pCiAKIApAQCAtMjQ3LDYgKzU2NSw4IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAlfQogLyogJXsgYW5kICV9IGNhbiBiZSBoZXJlIHRvby4gKi8KIApAQCAtMjczLDggKzU5Myw4IEBACiAlfQogCiAlewotc3RhdGljIHZvaWQgeXllcnJvciAoY29uc3QgY2hhciAqcyk7Ci1zdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKK11BVF9ZWUVSUk9SX0RFQ0xBUkVbCitdQVRfWVlMRVhfREVDTEFSRVsKICV9CiAKICV0eXBlIDxpdmFsPiAnQDw6QCcKQEAgLTMwNiwyNSArNjI2LDIxIEBACiAgIHJlcy5pdmFsID0gdmFsOwogICByZXR1cm4gcmVzOwogfQotCitdQVRfWVlFUlJPUl9ERUZJTkVbCiBzdGF0aWMgaW50CiB5eWxleCAodm9pZCkKIHsKLSAgc3RhdGljIGNvbnN0IGNoYXIgKmlucHV0ID0gIkA8OkBcMVwyJEB7QG9saW5lQF9fQCZ0QG9saW5lX19cCisgIHN0YXRpYyBjaGFyIGNvbnN0IGlucHV0W10gPSAiQDw6QFwxXDIkQHtAb2xpbmVAX19AJnRAb2xpbmVfX1wKICNvdXRwdXQgIjsgLyogIgogICAqLwotICB5eWx2YWwgPSB2YWx1ZV9hc195eXN0eXBlICgqaW5wdXQpOwotICByZXR1cm4gKmlucHV0Kys7Ci19Ci0KLXN0YXRpYyB2b2lkCi15eWVycm9yIChjb25zdCBjaGFyICptc2cpCi17Ci0gIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworICBzdGF0aWMgc2l6ZV90IHRva251bTsKKyAgYXNzZXJ0ICh0b2tudW0gPCBzaXplb2YgaW5wdXQpOworICB5eWx2YWwgPSB2YWx1ZV9hc195eXN0eXBlIChpbnB1dFt0b2tudW1dKTsKKyAgcmV0dXJuIGlucHV0W3Rva251bSsrXTsKIH0KIF1dKQogCi0jIFBhY2lmeSBFbWFjcydmb250LWxvY2stbW9kZTogIgorIyBQYWNpZnkgRW1hY3MnIGZvbnQtbG9jay1tb2RlOiAiCiAKIEFUX0RBVEEoW21haW4uY10sCiBbW3R5cGVkZWYgaW50IHZhbHVlOwpAQCAtMzM4LDEwICs2NTQsMTEgQEAKICAgcmV0dXJuIHl5cGFyc2UgKCk7CiB9CiBdXSkKK0FUX0JJU09OX09QVElPTl9QT1BERUZTCiAKLUFUX0NIRUNLKFtiaXNvbiAtZCAtdiAtbyBpbnB1dC5jIGlucHV0LnldKQotQVRfQ09NUElMRShbaW5wdXQub10sIFstYyBpbnB1dC5jXSkKLUFUX0NPTVBJTEUoW21haW4ub10sIFstYyBtYWluLmNdKQorQVRfQklTT05fQ0hFQ0soWy1kIC12IC1vIGlucHV0LmMgaW5wdXQueV0pCitBVF9DT01QSUxFKFtpbnB1dC5vXSkKK0FUX0NPTVBJTEUoW21haW4ub10pCiBBVF9DT01QSUxFKFtpbnB1dF0sIFtpbnB1dC5vIG1haW4ub10pCiBBVF9QQVJTRVJfQ0hFQ0soWy4vaW5wdXRdLCAwLAogW1tbQDw6QF0sCkBAIC0zNzAsNyArNjg3LDcgQEAKICUlCiBdXSkKIAotQVRfQ0hFQ0soW2Jpc29uIC1vIGlucHV0LmMgaW5wdXQueV0pCitBVF9CSVNPTl9DSEVDSyhbLW8gaW5wdXQuYyBpbnB1dC55XSkKIAogQVRfQ0xFQU5VUAogCkBAIC0zODYsNyArNzAzLDcgQEAKICUlCiBlbXB0eV9maWxlOjsKIF1dKQotQVRfQ0hFQ0soW2Jpc29uIC1vIGlucHV0LmMgaW5wdXQueV0sICQyLCBbXSwgaWdub3JlKQorQVRfQklTT05fQ0hFQ0soWy1vIGlucHV0LmMgaW5wdXQueV0sICQyLCBbXSwgaWdub3JlKQogQVRfQ0xFQU5VUAogXSkKIApAQCAtMzk0LDMgKzcxMSw5MTQgQEAKIEFUX0NIRUNLX1JFUVVJUkUoQVRfUEFDS0FHRV9WRVJTSU9OLCAwKQogIyMgRklYTUU6IFNvbWUgZGF5IGF1Z21lbnQgdGhpcyB2ZXJzaW9uIG51bWJlci4KIEFUX0NIRUNLX1JFUVVJUkUoMTAwLjAsIDYzKQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFN0cmluZyBhbGlhc2VzIGZvciBjaGFyYWN0ZXIgdG9rZW5zLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworQVRfU0VUVVAoW1N0cmluZyBhbGlhc2VzIGZvciBjaGFyYWN0ZXIgdG9rZW5zXSkKKworIyBCaXNvbiBvbmNlIHRob3VnaHQgYSBjaGFyYWN0ZXIgdG9rZW4gYW5kIGl0cyBhbGlhcyB3ZXJlIGRpZmZlcmVudCBzeW1ib2xzCisjIHdpdGggdGhlIHNhbWUgdXNlciB0b2tlbiBudW1iZXIuCisKK0FUX0RBVEFfR1JBTU1BUihbaW5wdXQueV0sCitbWyV0b2tlbiAnYScgImEiCislJQorc3RhcnQ6ICdhJzsKKyUlCitdXSkKKworQVRfQklTT05fQ0hFQ0soWy1vIGlucHV0LmMgaW5wdXQueV0pCisKK0FUX0NMRUFOVVAKKworCisjIyAtLS0tLS0tLS0tLS0tLSAjIworIyMgU3ltYm9sIG5hbWVzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1NFVFVQKFtTeW1ib2xzXSkKKworQVRfQklTT05fT1BUSU9OX1BVU0hERUZTCitBVF9EQVRBX0dSQU1NQVIoW2lucHV0LnldLAorW1sldG9rZW4gV0lUSC1EQVNICisldG9rZW4gV0lUSE9VVF9EQVNIICJXSVRIT1VULURBU0giCisldG9rZW4gV0lUSC5QRVJJT0QKKyV0b2tlbiBXSVRIT1VUX1BFUklPRCAiV0lUSE9VVC5QRVJJT0QiCislY29kZSB7CisgIF1BVF9ZWUVSUk9SX0RFQ0xBUkVbCisgIF1BVF9ZWUxFWF9ERUNMQVJFWworfQorJSUKK3N0YXJ0OiB3aXRoLWRhc2ggd2l0aG91dF9kYXNoIHdpdGgucGVyaW9kIHdpdGhvdXRfcGVyaW9kOword2l0aC1kYXNoOiBXSVRILURBU0g7Cit3aXRob3V0X2Rhc2g6ICJXSVRIT1VULURBU0giOword2l0aC5wZXJpb2Q6IFdJVEguUEVSSU9EOword2l0aG91dF9wZXJpb2Q6ICJXSVRIT1VULlBFUklPRCI7CislJQorXUFUX1lZRVJST1JfREVGSU5FWworXUFUX1lZTEVYX0RFRklORVsKK11dKQorQVRfQklTT05fT1BUSU9OX1BPUERFRlMKKworIyBQT1NJWCBZYWNjIGFjY2VwdCBwZXJpb2RzLCBidXQgbm90IGRhc2hlcy4KK0FUX0JJU09OX0NIRUNLKFstLXlhY2MgaW5wdXQueV0sIFsxXSwgW10sCitbW2lucHV0Lnk6OS44LTE2OiBQT1NJWCBZYWNjIGZvcmJpZHMgZGFzaGVzIGluIHN5bWJvbCBuYW1lczogV0lUSC1EQVNICitpbnB1dC55OjE4LjgtMTY6IFBPU0lYIFlhY2MgZm9yYmlkcyBkYXNoZXMgaW4gc3ltYm9sIG5hbWVzOiB3aXRoLWRhc2gKK11dKQorCisjIFNvIHdhcm4gYWJvdXQgdGhlbS4KK0FUX0JJU09OX0NIRUNLKFstV3lhY2MgaW5wdXQueV0sIFtdLCBbXSwKK1tbaW5wdXQueTo5LjgtMTY6IHdhcm5pbmc6IFBPU0lYIFlhY2MgZm9yYmlkcyBkYXNoZXMgaW4gc3ltYm9sIG5hbWVzOiBXSVRILURBU0gKK2lucHV0Lnk6MTguOC0xNjogd2FybmluZzogUE9TSVggWWFjYyBmb3JiaWRzIGRhc2hlcyBpbiBzeW1ib2wgbmFtZXM6IHdpdGgtZGFzaAorXV0pCisKKyMgRGFzaGVzIGFyZSBmaW5lIGZvciBHTlUgQmlzb24uCitBVF9CSVNPTl9DSEVDSyhbLW8gaW5wdXQuYyBpbnB1dC55XSkKKworIyBNYWtlIHN1cmUgd2UgZG9uJ3QgZXhwb3J0IHNpbGx5IHRva2VuIGlkZW50aWZpZXJzIHdpdGggcGVyaW9kcyBvciBkYXNoZXMuCitBVF9DT01QSUxFKFtpbnB1dC5vXSkKKworCisjIFBlcmlvZHMgYXJlIGdlbnVpbmUgbGV0dGVycywgdGhleSBjYW4gc3RhcnQgaWRlbnRpZmllcnMuCisjIERpZ2l0cyBhbmQgZGFzaGVzIGNhbm5vdC4KK0FUX0RBVEFfR1JBTU1BUihbaW5wdXQueV0sCitbWyV0b2tlbiAuR09PRAorICAgICAgICAgLUdPT0QKKyAgICAgICAgIDFOVjRMMUQKKyAgICAgICAgIC0xMjMKKyUlCitzdGFydDogLkdPT0QgR09PRAorXV0pCitBVF9CSVNPTl9DSEVDSyhbLW8gaW5wdXQuYyBpbnB1dC55XSwgWzFdLCBbXSwKK1tbaW5wdXQueToxMC4xMDogZXJyb3I6IGludmFsaWQgY2hhcmFjdGVyOiAnLScKK2lucHV0Lnk6MTEuMTAtMTY6IGVycm9yOiBpbnZhbGlkIGlkZW50aWZpZXI6ICcxTlY0TDFEJworaW5wdXQueToxMi4xMDogZXJyb3I6IGludmFsaWQgY2hhcmFjdGVyOiAnLScKK11dKQorCitBVF9DTEVBTlVQCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE51bWJlcmVkIHRva2Vucy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworCitBVF9TRVRVUChbTnVtYmVyZWQgdG9rZW5zXSkKKworQVRfREFUQV9HUkFNTUFSKFtyZWRlY2wueV0sCitbWyV0b2tlbiBERUNJTUFMXzEgICAgIDExMjU5Mzc1CisgICAgICAgICBIRVhBREVDSU1BTF8xIDB4YWJjZGVmCisgICAgICAgICBIRVhBREVDSU1BTF8yIDB4RkVEQ0JBCisgICAgICAgICBERUNJTUFMXzIgICAgIDE2NzAyNjUwCislJQorc3RhcnQ6IERFQ0lNQUxfMSBIRVhBREVDSU1BTF8yOworXV0pCisKK0FUX0JJU09OX0NIRUNLKFtyZWRlY2wueV0sIFsxXSwgW10sCitbW3JlZGVjbC55OjEwLjEwLTIyOiBlcnJvcjogdXNlciB0b2tlbiBudW1iZXIgMTEyNTkzNzUgcmVkZWNsYXJhdGlvbiBmb3IgSEVYQURFQ0lNQUxfMQorcmVkZWNsLnk6OS44LTE2OiAgICAgICBwcmV2aW91cyBkZWNsYXJhdGlvbiBmb3IgREVDSU1BTF8xCityZWRlY2wueToxMi4xMC0xODogZXJyb3I6IHVzZXIgdG9rZW4gbnVtYmVyIDE2NzAyNjUwIHJlZGVjbGFyYXRpb24gZm9yIERFQ0lNQUxfMgorcmVkZWNsLnk6MTEuMTAtMjI6ICAgICBwcmV2aW91cyBkZWNsYXJhdGlvbiBmb3IgSEVYQURFQ0lNQUxfMgorXV0pCisKK0FUX0RBVEFfR1JBTU1BUihbdG9vLWxhcmdlLnldLAorW1sldG9rZW4gVE9PX0xBUkdFX0RFQyA5OTk5OTk5OTk5OTk5OTk5OTk5OTkKKyAgICAgICAgIFRPT19MQVJHRV9IRVggMHhGRkZGRkZGRkZGRkZGRkZGRkZGCislJQorc3RhcnQ6IFRPT19MQVJHRV9ERUMgVE9PX0xBUkdFX0hFWAorJSUKK11dKQorCitBVF9CSVNPTl9DSEVDSyhbdG9vLWxhcmdlLnldLCBbMV0sIFtdLAorW1t0b28tbGFyZ2UueTo5LjIyLTQyOiBlcnJvcjogaW50ZWdlciBvdXQgb2YgcmFuZ2U6ICc5OTk5OTk5OTk5OTk5OTk5OTk5OTknCit0b28tbGFyZ2UueToxMC4yNC00NDogZXJyb3I6IGludGVnZXIgb3V0IG9mIHJhbmdlOiAnMHhGRkZGRkZGRkZGRkZGRkZGRkZGJworXV0pCisKK0FUX0NMRUFOVVAKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFVuY2xvc2VkIGNvbnN0cnVjdHMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1NFVFVQKFtVbmNsb3NlZCBjb25zdHJ1Y3RzXSkKKworIyBCaXNvbidzIHNjYW4tZ3JhbS5sIG9uY2UgZm9yZ290IHRvIFNUUklOR19GSU5JU0ggc29tZSB1bmNsb3NlZCBjb25zdHJ1Y3RzLCBzbworIyB0aGV5IHdlcmUgcHJlcGVuZGVkIHRvIHdoYXRldmVyIGl0IFNUUklOR19HUk9XJ2VkIG5leHQuICBJdCBhbHNvIHRocmV3IHRoZW0KKyMgYXdheSByYXRoZXIgdGhhbiByZXR1cm5pbmcgdGhlbSB0byB0aGUgcGFyc2VyLiAgVGhlIGVmZmVjdCB3YXMgY29uZnVzaW5nCisjIHN1YnNlcXVlbnQgZXJyb3IgbWVzc2FnZXMuCisKK0FUX0RBVEEoW2lucHV0LnldLAorW1sldG9rZW4gQSAiYQorJXRva2VuIEIgImIiCisldG9rZW4gQUIgImFiIiAvLyBVc2VkIHRvIGNvbXBsYWluIHRoYXQgImFiIiB3YXMgYWxyZWFkeSB1c2VkLgorJXRva2VuIEMgJzEKKyV0b2tlbiBUV08gIjIiCisldG9rZW4gVElDS19UV0VMVkUgIicxMiIgLy8gVXNlZCB0byBjb21wbGFpbiB0aGF0ICInMTIiIHdhcyBhbHJlYWR5IHVzZWQuCisKKyUlCisKK3N0YXJ0OiA7CisKKy8vIFVzZWQgdG8gcmVwb3J0IGEgc3ludGF4IGVycm9yIGJlY2F1c2UgaXQgZGlkbid0IHNlZSBhbnkga2luZCBvZiBzeW1ib2wKKy8vIGlkZW50aWZpZXIuCisldHlwZSA8Zj4gJ2EKKzsKKyV0eXBlIDxmPiAiYQorOworLy8gVXNlZCB0byByZXBvcnQgYSBzeW50YXggZXJyb3IgYmVjYXVzZSBpdCBkaWRuJ3Qgc2VlIGJyYWNlZCBjb2RlLgorJWRlc3RydWN0b3IgeyBmcmVlICgkJCkKK11dKQorCitBVF9CSVNPTl9DSEVDSyhbLW8gaW5wdXQuYyBpbnB1dC55XSwgMSwgW10sCitbW2lucHV0Lnk6MS4xMC0yLjA6IGVycm9yOiBtaXNzaW5nICciJyBhdCBlbmQgb2YgbGluZQoraW5wdXQueTo0LjEwLTUuMDogZXJyb3I6IG1pc3NpbmcgIiciIGF0IGVuZCBvZiBsaW5lCitpbnB1dC55OjE0LjExLTE1LjA6IGVycm9yOiBtaXNzaW5nICInIiBhdCBlbmQgb2YgbGluZQoraW5wdXQueToxNi4xMS0xNy4wOiBlcnJvcjogbWlzc2luZyAnIicgYXQgZW5kIG9mIGxpbmUKK2lucHV0Lnk6MTkuMTMtMjAuMDogZXJyb3I6IG1pc3NpbmcgJ30nIGF0IGVuZCBvZiBmaWxlCitpbnB1dC55OjIwLjE6IGVycm9yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUKK11dKQorCitBVF9CSVNPTl9DSEVDSyhbLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnldLCAxLCBbXSwKK1tbaW5wdXQueToxLjEwLTIuMDogZXJyb3I6IG1pc3NpbmcgJyInIGF0IGVuZCBvZiBsaW5lCisgJXRva2VuIEEgImEKKyAgICAgICAgICBeXgoraW5wdXQueTo0LjEwLTUuMDogZXJyb3I6IG1pc3NpbmcgIiciIGF0IGVuZCBvZiBsaW5lCisgJXRva2VuIEMgJzEKKyAgICAgICAgICBeXgoraW5wdXQueToxNC4xMS0xNS4wOiBlcnJvcjogbWlzc2luZyAiJyIgYXQgZW5kIG9mIGxpbmUKKyAldHlwZSA8Zj4gJ2EKKyAgICAgICAgICAgXl4KK2lucHV0Lnk6MTYuMTEtMTcuMDogZXJyb3I6IG1pc3NpbmcgJyInIGF0IGVuZCBvZiBsaW5lCisgJXR5cGUgPGY+ICJhCisgICAgICAgICAgIF5eCitpbnB1dC55OjE5LjEzLTIwLjA6IGVycm9yOiBtaXNzaW5nICd9JyBhdCBlbmQgb2YgZmlsZQorICVkZXN0cnVjdG9yIHsgZnJlZSAoJCQpCisgICAgICAgICAgICAgXl5eXl5eXl5eXl4KK2lucHV0Lnk6MjAuMTogZXJyb3I6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgZmlsZQorXV0pCisKK0FUX0NMRUFOVVAKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAlc3RhcnQgYWZ0ZXIgZmlyc3QgcnVsZS4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1NFVFVQKFslc3RhcnQgYWZ0ZXIgZmlyc3QgcnVsZV0pCisKKyMgQmlzb24gb25jZSBjb21wbGFpbmVkIHRoYXQgYSAlc3RhcnQgYWZ0ZXIgdGhlIGZpcnN0IHJ1bGUgd2FzIGEgcmVkZWNsYXJhdGlvbgorIyBvZiB0aGUgc3RhcnQgc3ltYm9sLgorCitBVF9EQVRBKFtpbnB1dC55XSwKK1tbJSUKK2ZhbHNlX3N0YXJ0OiA7CitzdGFydDogZmFsc2Vfc3RhcnQgOworJXN0YXJ0IHN0YXJ0OworXV0pCisKK0FUX0JJU09OX0NIRUNLKFstbyBpbnB1dC5jIGlucHV0LnldKQorCitBVF9DTEVBTlVQCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAlcHJlYyB0YWtlcyBhIHRva2VuLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitBVF9TRVRVUChbJXByZWMgdGFrZXMgYSB0b2tlbl0pCisKKyMgQmlzb24gb25jZSBhbGxvd2VkICVwcmVjIHN5bSB3aGVyZSBzeW0gd2FzIGEgbm9udGVybWluYWwuCisKK0FUX0RBVEEoW2lucHV0LnldLAorW1slJQorc3RhcnQ6IFBSRUMgJXByZWMgUFJFQyA7CitQUkVDOiA7CitdXSkKKworQVRfQklTT05fQ0hFQ0soW2lucHV0LnldLCBbMV0sIFtdLAorW1tpbnB1dC55OjMuMS00OiBlcnJvcjogcnVsZSBnaXZlbiBmb3IgUFJFQywgd2hpY2ggaXMgYSB0b2tlbgorXV0pCisKK0FUX0NMRUFOVVAKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAlcHJlYydzIHRva2VuIG11c3QgYmUgZGVmaW5lZC4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1NFVFVQKFtbJXByZWMncyB0b2tlbiBtdXN0IGJlIGRlZmluZWRdXSkKKworIyBBY2NvcmRpbmcgdG8gUE9TSVgsIGEgJXByZWMgdG9rZW4gbXVzdCBiZSBkZWZpbmVkIHNlcGFyYXRlbHkuCisKK0FUX0RBVEEoW1tpbnB1dC55XV0sCitbWyUlCitzdGFydDogJXByZWMgUFJFQyA7CitdXSkKKworQVRfQklTT05fQ0hFQ0soW1tpbnB1dC55XV0sIFtbMF1dLCBbXSwKK1tbaW5wdXQueToyLjgtMTc6IHdhcm5pbmc6IHRva2VuIGZvciAlcHJlYyBpcyBub3QgZGVmaW5lZDogUFJFQworXV0pCisKK0FUX0NMRUFOVVAKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgUmVqZWN0IHVudXNlZCAlY29kZSBxdWFsaWZpZXJzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1NFVFVQKFtSZWplY3QgdW51c2VkICVjb2RlIHF1YWxpZmllcnNdKQorCitBVF9EQVRBKFtpbnB1dC1jLnldLAorW1slY29kZSBxIHt9CislY29kZSBiYWQge30KKyVjb2RlIGJhZCB7fQorJWNvZGUgZm9ybWF0IHt9CislJQorc3RhcnQ6IDsKK11dKQorQVRfQklTT05fQ0hFQ0soW1tpbnB1dC1jLnldXSwgW1sxXV0sIFtdLAorW1tpbnB1dC1jLnk6MS43OiBlcnJvcjogJWNvZGUgcXVhbGlmaWVyICdxJyBpcyBub3QgdXNlZAoraW5wdXQtYy55OjIuNy05OiBlcnJvcjogJWNvZGUgcXVhbGlmaWVyICdiYWQnIGlzIG5vdCB1c2VkCitpbnB1dC1jLnk6My43LTk6IGVycm9yOiAlY29kZSBxdWFsaWZpZXIgJ2JhZCcgaXMgbm90IHVzZWQKK2lucHV0LWMueTo0LjctMTI6IGVycm9yOiAlY29kZSBxdWFsaWZpZXIgJ2Zvcm1hdCcgaXMgbm90IHVzZWQKK11dKQorCitBVF9EQVRBKFtpbnB1dC1jLWdsci55XSwKK1tbJWNvZGUgcSB7fQorJWNvZGUgYmFkIHt9CisgJWNvZGUgYmFkIHt9CislJQorc3RhcnQ6IDsKK11dKQorQVRfQklTT05fQ0hFQ0soW1tpbnB1dC1jLWdsci55XV0sIFtbMV1dLCBbXSwKK1tbaW5wdXQtYy1nbHIueToxLjc6IGVycm9yOiAlY29kZSBxdWFsaWZpZXIgJ3EnIGlzIG5vdCB1c2VkCitpbnB1dC1jLWdsci55OjIuNy05OiBlcnJvcjogJWNvZGUgcXVhbGlmaWVyICdiYWQnIGlzIG5vdCB1c2VkCitpbnB1dC1jLWdsci55OjMuOC0xMDogZXJyb3I6ICVjb2RlIHF1YWxpZmllciAnYmFkJyBpcyBub3QgdXNlZAorXV0pCisKK0FUX0RBVEEoW2lucHV0LWMrKy55XSwKK1tbJWNvZGUgcSB7fQorJWNvZGUgYmFkIHt9CisgJWNvZGUgcSB7fQorJSUKK3N0YXJ0OiA7CitdXSkKK0FUX0JJU09OX0NIRUNLKFtbaW5wdXQtYysrLnldXSwgW1sxXV0sIFtdLAorW1tpbnB1dC1jKysueToxLjc6IGVycm9yOiAlY29kZSBxdWFsaWZpZXIgJ3EnIGlzIG5vdCB1c2VkCitpbnB1dC1jKysueToyLjctOTogZXJyb3I6ICVjb2RlIHF1YWxpZmllciAnYmFkJyBpcyBub3QgdXNlZAoraW5wdXQtYysrLnk6My44OiBlcnJvcjogJWNvZGUgcXVhbGlmaWVyICdxJyBpcyBub3QgdXNlZAorXV0pCisKK0FUX0RBVEEoW2lucHV0LWMrKy1nbHIueV0sCitbWyVjb2RlIGJhZCB7fQorJWNvZGUgcSB7fQorJWNvZGUgcSB7fQorJSUKK3N0YXJ0OiA7CitdXSkKK0FUX0JJU09OX0NIRUNLKFtbaW5wdXQtYysrLWdsci55XV0sIFtbMV1dLCBbXSwKK1tbaW5wdXQtYysrLWdsci55OjEuNy05OiBlcnJvcjogJWNvZGUgcXVhbGlmaWVyICdiYWQnIGlzIG5vdCB1c2VkCitpbnB1dC1jKystZ2xyLnk6Mi43OiBlcnJvcjogJWNvZGUgcXVhbGlmaWVyICdxJyBpcyBub3QgdXNlZAoraW5wdXQtYysrLWdsci55OjMuNzogZXJyb3I6ICVjb2RlIHF1YWxpZmllciAncScgaXMgbm90IHVzZWQKK11dKQorCitBVF9EQVRBKFtzcGVjaWFsLWNoYXItQEAueV0sCitbWyVjb2RlIGJhZCB7fQorJWNvZGUgcSB7fQorJWNvZGUgcSB7fQorJSUKK3N0YXJ0OiA7CitdXSkKK0FUX0JJU09OX0NIRUNLKFtbc3BlY2lhbC1jaGFyLUBALnldXSwgW1sxXV0sIFtdLAorW1tzcGVjaWFsLWNoYXItQEAueToxLjctOTogZXJyb3I6ICVjb2RlIHF1YWxpZmllciAnYmFkJyBpcyBub3QgdXNlZAorc3BlY2lhbC1jaGFyLUBALnk6Mi43OiBlcnJvcjogJWNvZGUgcXVhbGlmaWVyICdxJyBpcyBub3QgdXNlZAorc3BlY2lhbC1jaGFyLUBALnk6My43OiBlcnJvcjogJWNvZGUgcXVhbGlmaWVyICdxJyBpcyBub3QgdXNlZAorXV0pCisKK0FUX0RBVEEoW3NwZWNpYWwtY2hhci1AOj5ALnldLAorW1slY29kZSBiYWQge30KKyVjb2RlIHEge30KKyVjb2RlIHEge30KKyUlCitzdGFydDogOworXV0pCitBVF9CSVNPTl9DSEVDSyhbW3NwZWNpYWwtY2hhci1AOj5ALnldXSwgW1sxXV0sIFtdLAorW1tzcGVjaWFsLWNoYXItQDo+QC55OjEuNy05OiBlcnJvcjogJWNvZGUgcXVhbGlmaWVyICdiYWQnIGlzIG5vdCB1c2VkCitzcGVjaWFsLWNoYXItQDo+QC55OjIuNzogZXJyb3I6ICVjb2RlIHF1YWxpZmllciAncScgaXMgbm90IHVzZWQKK3NwZWNpYWwtY2hhci1AOj5ALnk6My43OiBlcnJvcjogJWNvZGUgcXVhbGlmaWVyICdxJyBpcyBub3QgdXNlZAorXV0pCisKK0FUX0NMRUFOVVAKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjCisjIyAlZGVmaW5lIGVycm9ycy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1NFVFVQKFslZGVmaW5lIGVycm9yc10pCisKK0FUX0RBVEEoW2lucHV0LXJlZGVmaW5lZC55XSwKK1tbJWRlZmluZSB2YXIgInZhbHVlMSIKKyVkZWZpbmUgdmFyICJ2YWx1ZTEiCisgJWRlZmluZSB2YXIgInZhbHVlMiIKKyVkZWZpbmUgc3BlY2lhbDEgIkA6PkAiCislZGVmaW5lIHNwZWNpYWwyICJAPDpAIgorJSUKK3N0YXJ0OiA7CitdXSkKKworQVRfQklTT05fQ0hFQ0soW1tpbnB1dC1yZWRlZmluZWQueV1dLCBbWzFdXSwgW10sCitbW2lucHV0LXJlZGVmaW5lZC55OjIuOS0xMTogZXJyb3I6ICVkZWZpbmUgdmFyaWFibGUgJ3ZhcicgcmVkZWZpbmVkCitpbnB1dC1yZWRlZmluZWQueToxLjktMTE6ICAgICBwcmV2aW91cyBkZWZpbml0aW9uCitpbnB1dC1yZWRlZmluZWQueTozLjEwLTEyOiBlcnJvcjogJWRlZmluZSB2YXJpYWJsZSAndmFyJyByZWRlZmluZWQKK2lucHV0LXJlZGVmaW5lZC55OjIuOS0xMTogICAgICBwcmV2aW91cyBkZWZpbml0aW9uCitdXSkKKworQVRfREFUQShbaW5wdXQtdW51c2VkLnldLAorW1slZGVmaW5lIHZhciAidmFsdWUiCislJQorc3RhcnQ6IDsKK11dKQorCitBVF9CSVNPTl9DSEVDSyhbW2lucHV0LXVudXNlZC55XV0sIFtbMV1dLCBbXSwKK1tbaW5wdXQtdW51c2VkLnk6MS45LTExOiBlcnJvcjogJWRlZmluZSB2YXJpYWJsZSAndmFyJyBpcyBub3QgdXNlZAorXV0pCisKK0FUX0NMRUFOVVAKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgJWRlZmluZSwgLS1kZWZpbmUsIC0tZm9yY2UtZGVmaW5lLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1NFVFVQKFtbJWRlZmluZSwgLS1kZWZpbmUsIC0tZm9yY2UtZGVmaW5lXV0pCisKK0FUX0RBVEEoW1tza2VsLmNdXSwKK1tbbTRAJnRAX2RpdmVydF9wdXNoKDApQAorQG91dHB1dChiNF9wYXJzZXJfZmlsZV9uYW1lQClACitbdmFyLWRkOiBdYjRfcGVyY2VudF9kZWZpbmVfZ2V0KFtbdmFyLWRkXV0pWwordmFyLWZmOiBdYjRfcGVyY2VudF9kZWZpbmVfZ2V0KFtbdmFyLWZmXV0pWwordmFyLWRmZzogXWI0X3BlcmNlbnRfZGVmaW5lX2dldChbW3Zhci1kZmddXSlbCit2YXItZmQ6IF1iNF9wZXJjZW50X2RlZmluZV9nZXQoW1t2YXItZmRdXSkKK200QCZ0QF9kaXZlcnRfcG9wKDApCitdXSkKK0FUX0RBVEEoW1tpbnB1dC55XV0sCitbWyVkZWZpbmUgdmFyLWRmZyAiZ3JhbSIKKyUlCitzdGFydDogOworXV0pCitBVF9CSVNPTl9DSEVDSyhbWy1EdmFyLWRkPWNtZC1kMSAtRHZhci1kZD1jbWQtZDIgXAorICAgICAgICAgICAgICAgICAtRnZhci1mZj1jbWQtZjEgLUZ2YXItZmY9Y21kLWYyIFwKKyAgICAgICAgICAgICAgICAgLUR2YXItZGZnPWNtZC1kIC1GdmFyLWRmZz1jbWQtZiBcCisgICAgICAgICAgICAgICAgIC1GdmFyLWZkPWNtZC1mIC1EdmFyLWZkPWNtZC1kICAgXAorICAgICAgICAgICAgICAgICAtLXNrZWxldG9uIC4vc2tlbC5jIGlucHV0LnldXSkKK0FUX0NIRUNLKFtbY2F0IGlucHV0LnRhYi5jXV0sIFtbMF1dLAorW1t2YXItZGQ6IGNtZC1kMgordmFyLWZmOiBjbWQtZjIKK3Zhci1kZmc6IGNtZC1mCit2YXItZmQ6IGNtZC1kCitdXSkKKworQVRfREFUQShbW2lucHV0LWRnLnldXSwKK1tbJWRlZmluZSB2YXIgImdyYW0iCislJQorc3RhcnQ6IDsKK11dKQorQVRfQklTT05fQ0hFQ0soW1stRHZhcj1jbWQtZCBpbnB1dC1kZy55XV0sIFtbMV1dLCBbXSwKK1tbaW5wdXQtZGcueToxLjktMTE6IGVycm9yOiAlZGVmaW5lIHZhcmlhYmxlICd2YXInIHJlZGVmaW5lZAorPGNvbW1hbmQgbGluZT46MTogICAgICBwcmV2aW91cyBkZWZpbml0aW9uCitdXSkKKworQVRfREFUQShbW2lucHV0LWRnLnldXSwKK1tbJWRlZmluZSB2YXIgImdyYW0iCislJQorc3RhcnQ6IDsKK11dKQorQVRfQklTT05fQ0hFQ0soW1stZmNhcmV0IC1EdmFyPWNtZC1kIGlucHV0LWRnLnldXSwgW1sxXV0sIFtdLAorW1tpbnB1dC1kZy55OjEuOS0xMTogZXJyb3I6ICVkZWZpbmUgdmFyaWFibGUgJ3ZhcicgcmVkZWZpbmVkCisgJWRlZmluZSB2YXIgImdyYW0iCisgICAgICAgICBeXl4KKzxjb21tYW5kIGxpbmU+OjI6ICAgICAgcHJldmlvdXMgZGVmaW5pdGlvbgorXV0pCisKK0FUX0RBVEEoW1tpbnB1dC11bnVzZWQueV1dLAorW1slJQorc3RhcnQ6IDsKK11dKQorQVRfQklTT05fQ0hFQ0soW1stRHVudXNlZC1kIC1GdW51c2VkLWYgaW5wdXQtdW51c2VkLnldXSwgW1sxXV0sIFtdLAorW1s8Y29tbWFuZCBsaW5lPjoxOiBlcnJvcjogJWRlZmluZSB2YXJpYWJsZSAndW51c2VkLWQnIGlzIG5vdCB1c2VkCis8Y29tbWFuZCBsaW5lPjoyOiBlcnJvcjogJWRlZmluZSB2YXJpYWJsZSAndW51c2VkLWYnIGlzIG5vdCB1c2VkCitdXSkKKworQVRfQ0xFQU5VUAorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjICVkZWZpbmUgQm9vbGVhbiB2YXJpYWJsZXMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1NFVFVQKFtbJWRlZmluZSBCb29sZWFuIHZhcmlhYmxlc11dKQorCitBVF9EQVRBKFtJbnB1dC55XSwKK1tbJWxhbmd1YWdlICJKYXZhIgorJWRlZmluZSBwdWJsaWMgIm1heWJlIgorJWRlZmluZSBwYXJzZXJfY2xhc3NfbmFtZSAiSW5wdXQiCislJQorc3RhcnQ6IDsKK11dKQorCitBVF9CSVNPTl9DSEVDSyhbW0lucHV0LnldXSwgWzFdLCBbXSwKK1tbSW5wdXQueToyLjktMTQ6IGVycm9yOiBpbnZhbGlkIHZhbHVlIGZvciAlZGVmaW5lIEJvb2xlYW4gdmFyaWFibGUgJ3B1YmxpYycKK11dKQorCitBVF9DTEVBTlVQCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgJWRlZmluZSBlbnVtIHZhcmlhYmxlcy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworQVRfU0VUVVAoW1slZGVmaW5lIGVudW0gdmFyaWFibGVzXV0pCisKKyMgRnJvbnQtZW5kLgorQVRfREFUQShbW2lucHV0LnldXSwKK1tbJWRlZmluZSBsci5kZWZhdWx0LXJlZHVjdGlvbnMgYm9ndXMKKyUlCitzdGFydDogOworXV0pCitBVF9CSVNPTl9DSEVDSyhbW2lucHV0LnldXSwgW1sxXV0sIFtbXV0sCitbW2lucHV0Lnk6MS45LTI5OiBlcnJvcjogaW52YWxpZCB2YWx1ZSBmb3IgJWRlZmluZSB2YXJpYWJsZSAnbHIuZGVmYXVsdC1yZWR1Y3Rpb25zJzogJ2JvZ3VzJworaW5wdXQueToxLjktMjk6ICAgICBhY2NlcHRlZCB2YWx1ZTogJ21vc3QnCitpbnB1dC55OjEuOS0yOTogICAgIGFjY2VwdGVkIHZhbHVlOiAnY29uc2lzdGVudCcKK2lucHV0Lnk6MS45LTI5OiAgICAgYWNjZXB0ZWQgdmFsdWU6ICdhY2NlcHRpbmcnCitdXSkKKworIyBCYWNrLWVuZC4KKyMgRklYTUU6IHRoZXNlIHNob3VsZCBiZSBpbmRlbnRlZCwgYnV0IHdlIHNob3VsZG4ndCBtZXNzIHdpdGggdGhlIG00IHlldAorQVRfREFUQShbW2lucHV0LnldXSwKK1tbJWRlZmluZSBhcGkucHVzaC1wdWxsIG5laXRoZXIKKyUlCitzdGFydDogOworXV0pCitBVF9CSVNPTl9DSEVDSyhbW2lucHV0LnldXSwgWzFdLCBbXSwKK1tbaW5wdXQueToxLjktMjE6IGVycm9yOiBpbnZhbGlkIHZhbHVlIGZvciAlZGVmaW5lIHZhcmlhYmxlICdhcGkucHVzaC1wdWxsJzogJ25laXRoZXInCitpbnB1dC55OjEuOS0yMTogZXJyb3I6IGFjY2VwdGVkIHZhbHVlOiAncHVsbCcKK2lucHV0Lnk6MS45LTIxOiBlcnJvcjogYWNjZXB0ZWQgdmFsdWU6ICdwdXNoJworaW5wdXQueToxLjktMjE6IGVycm9yOiBhY2NlcHRlZCB2YWx1ZTogJ2JvdGgnCitdXSkKKworQVRfQ0xFQU5VUAorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgJWRlZmluZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1NFVFVQKFtbJWRlZmluZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XV0pCisKKyMgVGhlIGVycm9yIG1lc3NhZ2VzIHRlbGwgdXMgd2hldGhlciB1bmRlcnNjb3JlcyBpbiB0aGVzZSB2YXJpYWJsZXMgYXJlCisjIGJlaW5nIGNvbnZlcnRlZCB0byBkYXNoZXMuCisKK0FUX0RBVEEoW1tpbnB1dC55XV0sCitbWyVkZWZpbmUgYXBpLnB1c2hfcHVsbCAibmVpdGhlciIKKyUlCitzdGFydDogOworXV0pCitBVF9CSVNPTl9DSEVDSyhbW2lucHV0LnldXSwgWzFdLCBbXSwKK1tbaW5wdXQueToxLjktMjE6IGVycm9yOiBpbnZhbGlkIHZhbHVlIGZvciAlZGVmaW5lIHZhcmlhYmxlICdhcGkucHVzaC1wdWxsJzogJ25laXRoZXInCitpbnB1dC55OjEuOS0yMTogZXJyb3I6IGFjY2VwdGVkIHZhbHVlOiAncHVsbCcKK2lucHV0Lnk6MS45LTIxOiBlcnJvcjogYWNjZXB0ZWQgdmFsdWU6ICdwdXNoJworaW5wdXQueToxLjktMjE6IGVycm9yOiBhY2NlcHRlZCB2YWx1ZTogJ2JvdGgnCitdXSkKKworQVRfREFUQShbW2lucHV0LnldXSwKK1tbJWRlZmluZSBsci5rZWVwX3VucmVhY2hhYmxlX3N0YXRlcyBtYXliZQorJSUKK3N0YXJ0OiA7CitdXSkKK0FUX0JJU09OX0NIRUNLKFtbaW5wdXQueV1dLCBbMV0sIFtdLAorW1tpbnB1dC55OjEuOS0zNDogZXJyb3I6IGludmFsaWQgdmFsdWUgZm9yICVkZWZpbmUgQm9vbGVhbiB2YXJpYWJsZSAnbHIua2VlcC11bnJlYWNoYWJsZS1zdGF0ZXMnCitdXSkKKworQVRfREFUQShbW2lucHV0LnldXSwKK1tbJWRlZmluZSBmb29fYmFyICJiYXoiCislJQorc3RhcnQ6IDsKK11dKQorQVRfQklTT05fQ0hFQ0soW1tpbnB1dC55XV0sIFtbMV1dLCBbXSwKK1tbaW5wdXQueToxLjktMTU6IGVycm9yOiAlZGVmaW5lIHZhcmlhYmxlICdmb29fYmFyJyBpcyBub3QgdXNlZAorXV0pCisKK0FUX0NMRUFOVVAKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgVW51c2VkICVkZWZpbmUgYXBpLnB1cmUuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitBVF9TRVRVUChbW1VudXNlZCAlZGVmaW5lIGFwaS5wdXJlXV0pCisKKyMgQVRfQ0hFQ0tfQVBJX1BVUkUoREVDTFMsIFZBTFVFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1ha2Ugc3VyZSBCaXNvbiByZXBvcnRzIHRoYXQgYCVkZWZpbmUgYXBpLnB1cmUgVkFMVUUnIGlzIHVudXNlZCB3aGVuIERFQ0xTCisjIGFyZSBzcGVjaWZpZWQuCittNF9kZWZpbmUoW0FUX0NIRUNLX0FQSV9QVVJFXSwKK1sKK0FUX0RBVEEoW1tpbnB1dC55XV0sCitbWyVkZWZpbmUgYXBpLnB1cmUgXSQyWworXSQxWworJSUKK3N0YXJ0OiA7CitdXSkKKworQVRfQklTT05fQ0hFQ0soW1tpbnB1dC55XV0sIFtbMV1dLCBbXSwKK1tbaW5wdXQueToxLjktMTY6IGVycm9yOiAlZGVmaW5lIHZhcmlhYmxlICdhcGkucHVyZScgaXMgbm90IHVzZWQKK11dKQorXSkKKworQVRfQ0hFQ0tfQVBJX1BVUkUoW1slbGFuZ3VhZ2UgImMrKyIgJWRlZmluZXNdXSwgW1tdXSkKK0FUX0NIRUNLX0FQSV9QVVJFKFtbJWxhbmd1YWdlICJjKysiICVkZWZpbmVzXV0sIFtbZmFsc2VdXSkKK0FUX0NIRUNLX0FQSV9QVVJFKFtbJWxhbmd1YWdlICJjKysiICVkZWZpbmVzICVnbHItcGFyc2VyXV0sIFtbIiJdXSkKK0FUX0NIRUNLX0FQSV9QVVJFKFtbJWxhbmd1YWdlICJjKysiICVkZWZpbmVzICVnbHItcGFyc2VyXV0sIFtbZmFsc2VdXSkKK0FUX0NIRUNLX0FQSV9QVVJFKFtbJWxhbmd1YWdlICJqYXZhIl1dLCBbW3RydWVdXSkKK0FUX0NIRUNLX0FQSV9QVVJFKFtbJWxhbmd1YWdlICJqYXZhIl1dLCBbW2ZhbHNlXV0pCisKK0FUX0NMRUFOVVAKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEMrKyBuYW1lc3BhY2UgcmVmZXJlbmNlIGVycm9ycy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitBVF9TRVRVUChbW0MrKyBuYW1lc3BhY2UgcmVmZXJlbmNlIGVycm9yc11dKQorCisjIEFUX0NIRUNLX05BTUVTUEFDRV9FUlJPUihOQU1FU1BBQ0UtREVDTCwgRVJST1IsIFtFUlJPUl0sIC4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNYWtlIHN1cmUgQmlzb24gcmVwb3J0cyBhbGwgRVJST1IncyBmb3IgJWRlZmluZSBuYW1lc3BhY2UgIk5BTUVTUEFDRS1ERUNMIi4KK200X2RlZmluZShbQVRfQ0hFQ0tfTkFNRVNQQUNFX0VSUk9SXSwKK1sKK0FUX0RBVEEoW1tpbnB1dC55XV0sCitbWyVsYW5ndWFnZSAiQysrIgorJWRlZmluZXMKKyVkZWZpbmUgbmFtZXNwYWNlICJdJDFbIgorJSUKK3N0YXJ0OiA7CitdXSkKKworQVRfQklTT05fQ0hFQ0soW1tpbnB1dC55XV0sIFsxXSwgW10sCitbbTRfZm9yZWFjaChbYjRfYXJnXSwgbTRfZHF1b3RlKG00X3NoaWZ0KCRAKSksCitbW2lucHV0Lnk6My45LTE3OiBlcnJvcjogXWI0X2FyZ1sKK11dKV0pCitdKQorCitBVF9DSEVDS19OQU1FU1BBQ0VfRVJST1IoW1tdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbW25hbWVzcGFjZSByZWZlcmVuY2UgaXMgZW1wdHldXSkKK0FUX0NIRUNLX05BTUVTUEFDRV9FUlJPUihbWyAJCSAgCSAJXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgW1tuYW1lc3BhY2UgcmVmZXJlbmNlIGlzIGVtcHR5XV0pCitBVF9DSEVDS19OQU1FU1BBQ0VfRVJST1IoW1tmb286Ojo6YmFyXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgW1tuYW1lc3BhY2UgcmVmZXJlbmNlIGhhcyBjb25zZWN1dGl2ZSAiOjoiXV0pCitBVF9DSEVDS19OQU1FU1BBQ0VfRVJST1IoW1tmb286OiAJOjpiYXJdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbW25hbWVzcGFjZSByZWZlcmVuY2UgaGFzIGNvbnNlY3V0aXZlICI6OiJdXSkKK0FUX0NIRUNLX05BTUVTUEFDRV9FUlJPUihbWzo6OjpiYXJdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbW25hbWVzcGFjZSByZWZlcmVuY2UgaGFzIGNvbnNlY3V0aXZlICI6OiJdXSkKK0FUX0NIRUNLX05BTUVTUEFDRV9FUlJPUihbWzo6IDo6YmFyXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgW1tuYW1lc3BhY2UgcmVmZXJlbmNlIGhhcyBjb25zZWN1dGl2ZSAiOjoiXV0pCitBVF9DSEVDS19OQU1FU1BBQ0VfRVJST1IoW1tmb286OmJhcjo6CTo6XV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgW1tuYW1lc3BhY2UgcmVmZXJlbmNlIGhhcyBjb25zZWN1dGl2ZSAiOjoiXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgW1tuYW1lc3BhY2UgcmVmZXJlbmNlIGhhcyBhIHRyYWlsaW5nICI6OiJdXSkKK0FUX0NIRUNLX05BTUVTUEFDRV9FUlJPUihbW2Zvbzo6YmFyOjpdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbW25hbWVzcGFjZSByZWZlcmVuY2UgaGFzIGEgdHJhaWxpbmcgIjo6Il1dKQorQVRfQ0hFQ0tfTkFNRVNQQUNFX0VSUk9SKFtbZm9vOjpiYXI6OiAJXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgW1tuYW1lc3BhY2UgcmVmZXJlbmNlIGhhcyBhIHRyYWlsaW5nICI6OiJdXSkKK0FUX0NIRUNLX05BTUVTUEFDRV9FUlJPUihbWzo6XV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgW1tuYW1lc3BhY2UgcmVmZXJlbmNlIGhhcyBhIHRyYWlsaW5nICI6OiJdXSkKKworQVRfQ0xFQU5VUAorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEJhZCBjaGFyYWN0ZXIgbGl0ZXJhbHMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQmlzb24gdXNlZCB0byBhY2NlcHQgY2hhcmFjdGVyIGxpdGVyYWxzIHRoYXQgd2VyZSBlbXB0eSBvciBjb250YWluZWQKKyMgdG9vIG1hbnkgY2hhcmFjdGVycy4KKworIyBGSVhNRTogQVRfREFUQSBvciBzb21lIHZhcmlhbnQgb2YgQVRfREFUQSBtYXkgZXZlbnR1YWxseSBwZXJtaXQKKyMgdGhlIGZpbmFsIG5ld2xpbmUgdG8gYmUgb21pdHRlZC4gIFNlZSB0aGUgdGhyZWFkcyBzdGFydGluZyBhdAorIyA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwOS0wNy9tc2cwMDAxOS5odG1sPi4KKworQVRfU0VUVVAoW1tCYWQgY2hhcmFjdGVyIGxpdGVyYWxzXV0pCisKK0FUX0RBVEEoW2VtcHR5LnldLAorW1slJQorc3RhcnQ6ICcnOworc3RhcnQ6ICcKK11dKQorQVRfQ0hFQ0soW1skUEVSTCAtZSAicHJpbnQgJ3N0YXJ0OiBcJyc7IiA+PiBlbXB0eS55IHx8IGV4aXQgNzddXSkKKworQVRfQklTT05fQ0hFQ0soW2VtcHR5LnldLCBbMV0sIFtdLAorW1tlbXB0eS55OjIuOC05OiB3YXJuaW5nOiBlbXB0eSBjaGFyYWN0ZXIgbGl0ZXJhbAorZW1wdHkueTozLjgtNC4wOiB3YXJuaW5nOiBlbXB0eSBjaGFyYWN0ZXIgbGl0ZXJhbAorZW1wdHkueTozLjgtNC4wOiBlcnJvcjogbWlzc2luZyAiJyIgYXQgZW5kIG9mIGxpbmUKK2VtcHR5Lnk6NC44OiB3YXJuaW5nOiBlbXB0eSBjaGFyYWN0ZXIgbGl0ZXJhbAorZW1wdHkueTo0Ljg6IGVycm9yOiBtaXNzaW5nICInIiBhdCBlbmQgb2YgZmlsZQorXV0pCisKK0FUX0RBVEEoW3R3by55XSwKK1tbJSUKK3N0YXJ0OiAnYWInOworc3RhcnQ6ICdhYgorXV0pCitBVF9DSEVDSyhbWyRQRVJMIC1lICJwcmludCAnc3RhcnQ6IFwnYWInOyIgPj4gdHdvLnkgfHwgZXhpdCA3N11dKQorCitBVF9CSVNPTl9DSEVDSyhbdHdvLnldLCBbMV0sIFtdLAorW1t0d28ueToyLjgtMTE6IHdhcm5pbmc6IGV4dHJhIGNoYXJhY3RlcnMgaW4gY2hhcmFjdGVyIGxpdGVyYWwKK3R3by55OjMuOC00LjA6IHdhcm5pbmc6IGV4dHJhIGNoYXJhY3RlcnMgaW4gY2hhcmFjdGVyIGxpdGVyYWwKK3R3by55OjMuOC00LjA6IGVycm9yOiBtaXNzaW5nICInIiBhdCBlbmQgb2YgbGluZQordHdvLnk6NC44LTEwOiB3YXJuaW5nOiBleHRyYSBjaGFyYWN0ZXJzIGluIGNoYXJhY3RlciBsaXRlcmFsCit0d28ueTo0LjgtMTA6IGVycm9yOiBtaXNzaW5nICInIiBhdCBlbmQgb2YgZmlsZQorXV0pCisKK0FUX0RBVEEoW3RocmVlLnldLAorW1slJQorc3RhcnQ6ICdhYmMnOworc3RhcnQ6ICdhYmMKK11dKQorQVRfQ0hFQ0soW1skUEVSTCAtZSAicHJpbnQgJ3N0YXJ0OiBcJ2FiYyc7IiA+PiB0aHJlZS55IHx8IGV4aXQgNzddXSkKKworQVRfQklTT05fQ0hFQ0soW3RocmVlLnldLCBbMV0sIFtdLAorW1t0aHJlZS55OjIuOC0xMjogd2FybmluZzogZXh0cmEgY2hhcmFjdGVycyBpbiBjaGFyYWN0ZXIgbGl0ZXJhbAordGhyZWUueTozLjgtNC4wOiB3YXJuaW5nOiBleHRyYSBjaGFyYWN0ZXJzIGluIGNoYXJhY3RlciBsaXRlcmFsCit0aHJlZS55OjMuOC00LjA6IGVycm9yOiBtaXNzaW5nICInIiBhdCBlbmQgb2YgbGluZQordGhyZWUueTo0LjgtMTE6IHdhcm5pbmc6IGV4dHJhIGNoYXJhY3RlcnMgaW4gY2hhcmFjdGVyIGxpdGVyYWwKK3RocmVlLnk6NC44LTExOiBlcnJvcjogbWlzc2luZyAiJyIgYXQgZW5kIG9mIGZpbGUKK11dKQorCitBVF9DTEVBTlVQCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEJhZCBlc2NhcGVzIGluIGxpdGVyYWxzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworQVRfU0VUVVAoW1tCYWQgZXNjYXBlcyBpbiBsaXRlcmFsc11dKQorCitBVF9EQVRBKFtpbnB1dC55XSwKK1tbJSUKK3N0YXJ0OiAnXDc3NycgJ1wwJyAnXHhmZmYnICdceDAnCisgICAgICAgJ1x1ZmZmZicgJ1x1MDAwMCcgJ1xVZmZmZmZmZmYnICdcVTAwMDAwMDAwJworICAgICAgICdcICcgJ1xBJzsKK11dKQorCisjIEl0IGlzIG5vdCBlYXN5IHRvIGNyZWF0ZSBzcGVjaWFsIGNoYXJhY3RlcnMsIHdlIGNhbm5vdCBldmVuIHRydXN0IHRyLgorIyBCZXNpZGUgd2UgY2Fubm90IGV2ZW4gZXhwZWN0ICJlY2hvICdcMCciIHRvIG91dHB1dCB0d28gY2hhcmFjdGVycworIyAod2VsbCB0aHJlZSB3aXRoIFxuKTogYXQgbGVhc3QgQmFzaCAzLjIgY29udmVydHMgdGhlIHR3by1jaGFyYWN0ZXIKKyMgc2VxdWVuY2UgIlwwIiBpbnRvIGEgc2luZ2xlIE5VTCBjaGFyYWN0ZXIuCitBVF9DSEVDSyhbWyRQRVJMIC1lICdwcmludCAic3RhcnQ6IFwiXFxcdFxcXGZcXFwwXFxcMVwiIDsiOycgPj4gaW5wdXQueSBcCisgICAgICAgICAgIHx8IGV4aXQgNzddXSkKKworQVRfQklTT05fQ0hFQ0soW2lucHV0LnldLCBbMV0sIFtdLAorW1tpbnB1dC55OjIuOS0xMjogZXJyb3I6IGludmFsaWQgbnVtYmVyIGFmdGVyIFwtZXNjYXBlOiA3NzcKK2lucHV0Lnk6Mi44LTEzOiB3YXJuaW5nOiBlbXB0eSBjaGFyYWN0ZXIgbGl0ZXJhbAoraW5wdXQueToyLjE2LTE3OiBlcnJvcjogaW52YWxpZCBudW1iZXIgYWZ0ZXIgXC1lc2NhcGU6IDAKK2lucHV0Lnk6Mi4xNS0xODogd2FybmluZzogZW1wdHkgY2hhcmFjdGVyIGxpdGVyYWwKK2lucHV0Lnk6Mi4yMS0yNTogZXJyb3I6IGludmFsaWQgbnVtYmVyIGFmdGVyIFwtZXNjYXBlOiB4ZmZmCitpbnB1dC55OjIuMjAtMjY6IHdhcm5pbmc6IGVtcHR5IGNoYXJhY3RlciBsaXRlcmFsCitpbnB1dC55OjIuMjktMzE6IGVycm9yOiBpbnZhbGlkIG51bWJlciBhZnRlciBcLWVzY2FwZTogeDAKK2lucHV0Lnk6Mi4yOC0zMjogd2FybmluZzogZW1wdHkgY2hhcmFjdGVyIGxpdGVyYWwKK2lucHV0Lnk6My45LTE0OiBlcnJvcjogaW52YWxpZCBudW1iZXIgYWZ0ZXIgXC1lc2NhcGU6IHVmZmZmCitpbnB1dC55OjMuOC0xNTogd2FybmluZzogZW1wdHkgY2hhcmFjdGVyIGxpdGVyYWwKK2lucHV0Lnk6My4xOC0yMzogZXJyb3I6IGludmFsaWQgbnVtYmVyIGFmdGVyIFwtZXNjYXBlOiB1MDAwMAoraW5wdXQueTozLjE3LTI0OiB3YXJuaW5nOiBlbXB0eSBjaGFyYWN0ZXIgbGl0ZXJhbAoraW5wdXQueTozLjI3LTM2OiBlcnJvcjogaW52YWxpZCBudW1iZXIgYWZ0ZXIgXC1lc2NhcGU6IFVmZmZmZmZmZgoraW5wdXQueTozLjI2LTM3OiB3YXJuaW5nOiBlbXB0eSBjaGFyYWN0ZXIgbGl0ZXJhbAoraW5wdXQueTozLjQwLTQ5OiBlcnJvcjogaW52YWxpZCBudW1iZXIgYWZ0ZXIgXC1lc2NhcGU6IFUwMDAwMDAwMAoraW5wdXQueTozLjM5LTUwOiB3YXJuaW5nOiBlbXB0eSBjaGFyYWN0ZXIgbGl0ZXJhbAoraW5wdXQueTo0LjktMTA6IGVycm9yOiBpbnZhbGlkIGNoYXJhY3RlciBhZnRlciBcLWVzY2FwZTogJyAnCitpbnB1dC55OjQuOC0xMTogd2FybmluZzogZW1wdHkgY2hhcmFjdGVyIGxpdGVyYWwKK2lucHV0Lnk6NC4xNC0xNTogZXJyb3I6IGludmFsaWQgY2hhcmFjdGVyIGFmdGVyIFwtZXNjYXBlOiBBCitpbnB1dC55OjQuMTMtMTY6IHdhcm5pbmc6IGVtcHR5IGNoYXJhY3RlciBsaXRlcmFsCitpbnB1dC55OjUuOS0xNjogZXJyb3I6IGludmFsaWQgY2hhcmFjdGVyIGFmdGVyIFwtZXNjYXBlOiBcdAoraW5wdXQueTo1LjE3OiBlcnJvcjogaW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgXC1lc2NhcGU6IFxmCitpbnB1dC55OjUuMTg6IGVycm9yOiBpbnZhbGlkIGNoYXJhY3RlciBhZnRlciBcLWVzY2FwZTogXDAKK2lucHV0Lnk6NS4xOTogZXJyb3I6IGludmFsaWQgY2hhcmFjdGVyIGFmdGVyIFwtZXNjYXBlOiBcMDAxCitdXSkKKworQVRfQ0xFQU5VUAorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBMQUM6IEVycm9ycyBmb3IgJWRlZmluZS4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1NFVFVQKFtbTEFDOiBFcnJvcnMgZm9yICVkZWZpbmVdXSkKKworQVRfREFUQShbW2lucHV0LnldXSwKK1tbJSUKK3N0YXJ0OiA7CitdXSkKKworIyBwYXJzZS5sYWMuKiBvcHRpb25zIGFyZSB1c2VsZXNzIGlmIExBQyBpc24ndCBhY3R1YWxseSBhY3RpdmF0ZWQuCitBVF9CSVNPTl9DSEVDSyhbWy1EcGFyc2UubGFjLmVzLWNhcGFjaXR5LWluaXRpYWw9MSBpbnB1dC55XV0sCisgICAgICAgICAgICAgICBbWzFdXSwgW10sCitbWzxjb21tYW5kIGxpbmU+OjE6IGVycm9yOiAlZGVmaW5lIHZhcmlhYmxlICdwYXJzZS5sYWMuZXMtY2FwYWNpdHktaW5pdGlhbCcgaXMgbm90IHVzZWQKK11dKQorQVRfQklTT05fQ0hFQ0soW1stRHBhcnNlLmxhYy5tZW1vcnktdHJhY2U9ZnVsbCBpbnB1dC55XV0sCisgICAgICAgICAgICAgICBbWzFdXSwgW10sCitbWzxjb21tYW5kIGxpbmU+OjE6IGVycm9yOiAlZGVmaW5lIHZhcmlhYmxlICdwYXJzZS5sYWMubWVtb3J5LXRyYWNlJyBpcyBub3QgdXNlZAorXV0pCisKK0FUX0NMRUFOVVAKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAtV2Vycm9yIGlzIG5vdCBhZmZlY3RlZCBieSAtV25vbmUgYW5kIC1XYWxsLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitBVF9TRVRVUChbWy1XZXJyb3IgaXMgbm90IGFmZmVjdGVkIGJ5IC1Xbm9uZSBhbmQgLVdhbGxdXSkKKworQVRfREFUQShbW2lucHV0LnldXSwKK1tbJSUKK2Zvby1iYXI6IDsKK11dKQorCisjIC1XZXJyb3IgaXMgbm90IGVuYWJsZWQgYnkgLVdhbGwgb3IgZXF1aXZhbGVudC4KK0FUX0JJU09OX0NIRUNLKFtbLVdhbGwgaW5wdXQueV1dLCBbWzBdXSwgW1tdXSwKK1tbaW5wdXQueToyLjEtNzogd2FybmluZzogUE9TSVggWWFjYyBmb3JiaWRzIGRhc2hlcyBpbiBzeW1ib2wgbmFtZXM6IGZvby1iYXIKK11dKQorQVRfQklTT05fQ0hFQ0soW1stVyBpbnB1dC55XV0sIFtbMF1dLCBbW11dLAorW1tpbnB1dC55OjIuMS03OiB3YXJuaW5nOiBQT1NJWCBZYWNjIGZvcmJpZHMgZGFzaGVzIGluIHN5bWJvbCBuYW1lczogZm9vLWJhcgorXV0pCitBVF9CSVNPTl9DSEVDSyhbWy1Xbm8tbm9uZSBpbnB1dC55XV0sIFtbMF1dLCBbW11dLAorW1tpbnB1dC55OjIuMS03OiB3YXJuaW5nOiBQT1NJWCBZYWNjIGZvcmJpZHMgZGFzaGVzIGluIHN5bWJvbCBuYW1lczogZm9vLWJhcgorXV0pCisKKyMgLVdlcnJvciBpcyBub3QgZGlzYWJsZWQgYnkgLVdub25lIG9yIGVxdWl2YWxlbnQuCitBVF9CSVNPTl9DSEVDSyhbWy1XZXJyb3Isbm9uZSx5YWNjIGlucHV0LnldXSwgW1sxXV0sIFtbXV0sIFtbc3RkZXJyXV0pCitBVF9DSEVDSyhbW3NlZCAncy9eLipiaXNvbjovYmlzb246Lycgc3RkZXJyXV0sIFtbMF1dLAorW1tiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMKK2lucHV0Lnk6Mi4xLTc6IHdhcm5pbmc6IFBPU0lYIFlhY2MgZm9yYmlkcyBkYXNoZXMgaW4gc3ltYm9sIG5hbWVzOiBmb28tYmFyCitdXSkKK1ttdiBzdGRlcnIgZXhwZXJyXQorQVRfQklTT05fQ0hFQ0soW1stV2Vycm9yLG5vLWFsbCx5YWNjIGlucHV0LnldXSwgW1sxXV0sIFtbXV0sIFtbZXhwZXJyXV0pCisKK0FUX0NMRUFOVVAKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjICVuYW1lLXByZWZpeCBhbmQgJWRlZmluZSBhcGkucHJlZml4IGFyZSBpbmNvbXBhdGlibGUuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1NFVFVQKFtbJW5hbWUtcHJlZml4IGFuZCAlZGVmaW5lIGFwaS5wcmVmaXggYXJlIGluY29tcGF0aWJsZV1dKQorCisjIEFUX1RFU1QoRElSRUNUSVZFUywgT1BUSU9OUywgRVJST1ItTE9DQVRJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9wdXNoZGVmKFtBVF9URVNUXSwKK1tBVF9EQVRBKFtbaW5wdXQueV1dLAorW1skMQorJSUKK2V4cDo7CitdXSkKK0FUX0JJU09OX0NIRUNLKFtbJDIgaW5wdXQueV1dLCBbWzFdXSwgW1tdXSwKK1tbJDM6IGVycm9yOiAnJW5hbWUtcHJlZml4JyBhbmQgJyVkZWZpbmUgYXBpLnByZWZpeCcgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIKK11dKQorXSkKKworQVRfVEVTVChbJWRlZmluZSBhcGkucHJlZml4IGZvbyAlbmFtZS1wcmVmaXggImJhciJdLCBbXSwgW2lucHV0Lnk6MS45LTE4XSkKK0FUX1RFU1QoW10sIFstRGFwaS5wcmVmaXg9Zm9vIC1wIGJhcl0sIFs8Y29tbWFuZCBsaW5lPjoxXSkKK0FUX1RFU1QoWyVuYW1lLXByZWZpeCAiYmFyIl0sIFstRGFwaS5wcmVmaXg9Zm9vXSwgWzxjb21tYW5kIGxpbmU+OjFdKQorQVRfVEVTVChbJWRlZmluZSBhcGkucHJlZml4IGZvb10sIFstcCBiYXJdLCBbaW5wdXQueToxLjktMThdKQorCittNF9wb3BkZWYoW0FUX1RFU1RdKQorCitBVF9DTEVBTlVQCisKKworIyMgLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFN0cmF5ICQgb3IgQC4gICMjCisjIyAtLS0tLS0tLS0tLS0tLSAjIworCitBVF9TRVRVUChbW1N0cmF5ICQgb3IgQF1dKQorCisjIEdpdmUgJXByaW50ZXIgYW5kICVkZXN0cnVjdG9yICI8Kj4gZXhwIFRPSyIgaW5zdGVhZCBvZiAiPCo+IiB0bworIyBjaGVjayB0aGF0IHRoZSB3YXJuaW5ncyBhcmUgcmVwb3J0ZWQgb25jZSwgbm90IHRocmVlIHRpbWVzLgorCitBVF9EQVRBX0dSQU1NQVIoW1tpbnB1dC55XV0sCitbWyV0b2tlbiBUT0sKKyVkZXN0cnVjdG9yICAgICB7ICQlOyBAJTsgfSA8Kj4gZXhwIFRPSzsKKyVpbml0aWFsLWFjdGlvbiB7ICQlOyBAJTsgfTsKKyVwcmludGVyICAgICAgICB7ICQlOyBAJTsgfSA8Kj4gZXhwIFRPSzsKKyUlCitleHA6IFRPSyAgICAgICAgeyAkJTsgQCU7ICQkID0gJDE7IH07CitdXSkKKworQVRfQklTT05fQ0hFQ0soW1tpbnB1dC55XV0sIDAsIFtdLAorW1tpbnB1dC55OjEwLjE5OiB3YXJuaW5nOiBzdHJheSAnJCcKK2lucHV0Lnk6MTAuMjM6IHdhcm5pbmc6IHN0cmF5ICdAJworaW5wdXQueToxMS4xOTogd2FybmluZzogc3RyYXkgJyQnCitpbnB1dC55OjExLjIzOiB3YXJuaW5nOiBzdHJheSAnQCcKK2lucHV0Lnk6MTIuMTk6IHdhcm5pbmc6IHN0cmF5ICckJworaW5wdXQueToxMi4yMzogd2FybmluZzogc3RyYXkgJ0AnCitpbnB1dC55OjE0LjE5OiB3YXJuaW5nOiBzdHJheSAnJCcKK2lucHV0Lnk6MTQuMjM6IHdhcm5pbmc6IHN0cmF5ICdAJworXV0pCisKK0FUX0NMRUFOVVAKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIENvZGUgaW5qZWN0aW9uLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKworCitBVF9TRVRVUChbW0NvZGUgaW5qZWN0aW9uXV0pCisKK200X3BhdHRlcm5fYWxsb3coW15tNF9lcnJwcmludG4kXSkKKworIyBBVF9URVNUKFtNQUNST10pCisjIC0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGhhdmUgTUFDUk8gYmUgcnVuIGJ5IGJpc29uLgorbTRfcHVzaGRlZihbQVRfVEVTVF0sCitbQVRfREFUQShbW2lucHV0LnldXSwKK1tbJXR5cGUgPCQxKERFQUQgJXR5cGUpPiBleHAKKyV0b2tlbiA8JDEoREVBRCAldG9rZW4pPiBhCislaW5pdGlhbC1hY3Rpb24KK3sKKyAgJCQ7CisgICQ8JDEoREVBRCAlaW5pdGlhbC1hY3Rpb24pPiQKK307CislcHJpbnRlcgoreworICAkJAorICAkPCQxKERFQUQgJXByaW50ZXIpPiQKK30gPD4gPCo+OworJWxleC1wYXJhbQoreworICAkMShERUFEICVsZXgtcGFyYW0pCit9OworJXBhcnNlLXBhcmFtCit7CisgICQxKERFQUQgJXBhcnNlLXBhcmFtKQorfTsKKyUlCitleHA6CisgIGEgYVtsYXN0XQorICB7CisgICAgJCQ7CisgICAgJF1bMTsKKyAgICAkPCQxKERFQUQgYWN0aW9uIDEpPiQKKyAgICAkPCQxKERFQUQgYWN0aW9uIDIpPjEKKyAgICAkPCQxKERFQUQgYWN0aW9uIDMpPmxhc3QKKyAgICAkPCQxKERFQUQgYWN0aW9uIDQpPjAKKyAgICA7CisgIH07CitdXSkKKworIyBGSVhNRTogUHJvdmlkZSBhIG1lYW5zIHRvIGl0ZXJhdGUgb3ZlciBhbGwgdGhlIHNrZWxldG9ucy4KK0FUX0JJU09OX0NIRUNLKFtbLWQgICAgICAgICAgICAgICBpbnB1dC55XV0pCitBVF9CSVNPTl9DSEVDSyhbWy1kIC1TIGdsci5jICAgICAgaW5wdXQueV1dKQorQVRfQklTT05fQ0hFQ0soW1stZCAtUyBsYWxyMS5jYyAgIGlucHV0LnldXSkKK0FUX0JJU09OX0NIRUNLKFtbLWQgLVMgZ2xyLmNjICAgICBpbnB1dC55XV0pCitBVF9CSVNPTl9DSEVDSyhbWyAgIC1TIGxhbHIxLmphdmEgaW5wdXQueV1dKQorXSkKKworQVRfVEVTVChbbTRfZXJycHJpbnRuXSkKK0FUX1RFU1QoW0A6PkBtNF9lcnJwcmludG5dKQorCittNF9wb3BkZWYoW0FUX1RFU1RdKQorCitBVF9DTEVBTlVQCmRpZmYgLS1naXQgYS90ZXN0cy9qYXZhLmF0IGIvdGVzdHMvamF2YS5hdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjNmNTAwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvamF2YS5hdApAQCAtMCwwICsxLDgwNyBAQAorIyBKYXZhIHRlc3RzIGZvciBzaW1wbGUgY2FsY3VsYXRvci4gICAgICAgICAgIC0qLSBBdXRvdGVzdCAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworQVRfQkFOTkVSKFtbSmF2YSBDYWxjdWxhdG9yLl1dKQorCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisjIEhlbHBpbmcgQXV0b3Rlc3QgbWFjcm9zLiAgIworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKworCisjIF9BVF9EQVRBX0pBVkFfQ0FMQ19ZKCQxLCAkMiwgJDMsIFtCSVNPTi1ESVJFQ1RJVkVTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9kdWNlIGBjYWxjLnknLiAgRG9uJ3QgY2FsbCB0aGlzIG1hY3JvIGRpcmVjdGx5LCBiZWNhdXNlIGl0IGNvbnRhaW5zCisjIHNvbWUgb2NjdXJyZW5jZXMgb2YgYCQxJyBldGMuIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYnkgbTQuICBTbworIyB5b3Ugc2hvdWxkIGNhbGwgaXQgd2l0aCAkMSwgJDIsIGFuZCAkMyBhcyBhcmd1bWVudHMsIHdoaWNoIGlzIHdoYXQKKyMgQVRfREFUQV9KQVZBX0NBTENfWSBkb2VzLgorbTRfZGVmaW5lKFtfQVRfREFUQV9KQVZBX0NBTENfWV0sCitbbTRfaWYoWyQxJDIkM10sICRbMV0kWzJdJFszXSwgW10sCisgICAgICAgW200X2ZhdGFsKFskMDogSW52YWxpZCBhcmd1bWVudHM6ICRAXSldKWRubAorQVRfQklTT05fT1BUSU9OX1BVU0hERUZTKFslbGFuZ3VhZ2UgIkphdmEiICQ0XSkKK0FUX0RBVEEoW0NhbGMueV0sCitbWy8qIEluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3ItLWNhbGMgKi8KKyVsYW5ndWFnZSAiSmF2YSIKKyVuYW1lLXByZWZpeCAiQ2FsYyIKKyVkZWZpbmUgcGFyc2VyX2NsYXNzX25hbWUgIkNhbGMiCislZGVmaW5lIHB1YmxpYworCitdJDRbCisKKyVjb2RlIGltcG9ydHMgeworICBpbXBvcnQgamF2YS5pby5TdHJlYW1Ub2tlbml6ZXI7CisgIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworICBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKKyAgaW1wb3J0IGphdmEuaW8uUmVhZGVyOworICBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK30KKworLyogQmlzb24gRGVjbGFyYXRpb25zICovCisldG9rZW4gPEludGVnZXI+IE5VTSAibnVtYmVyIgorJXR5cGUgIDxJbnRlZ2VyPiBleHAKKworJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uICAgICAgICAgICAgKi8KKyVsZWZ0ICctJyAnKycKKyVsZWZ0ICcqJyAnLycKKyVsZWZ0IE5FRyAgICAgLyogbmVnYXRpb24tLXVuYXJ5IG1pbnVzICovCislcmlnaHQgJ14nICAgIC8qIGV4cG9uZW50aWF0aW9uICAgICAgICAqLworCisvKiBHcmFtbWFyIGZvbGxvd3MgKi8KKyUlCitpbnB1dDoKKyAgbGluZQorfCBpbnB1dCBsaW5lCis7CisKK2xpbmU6CisgICdcbicKK3wgZXhwICdcbicKK3wgZXJyb3IgJ1xuJworOworCitleHA6CisgIE5VTSAgICAgICAgICAgICAgICB7ICQkID0gJDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorfCBleHAgJz0nIGV4cAorICB7CisgICAgaWYgKCQxLmludFZhbHVlICgpICE9ICQzLmludFZhbHVlICgpKQorICAgICAgeXllcnJvciAoXUFUX0xPQ0FUSU9OX0lGKFtbQCQsXV0pWyAiY2FsYzogZXJyb3I6ICIgKyAkMSArICIgIT0gIiArICQzKTsKKyAgfQorfCBleHAgJysnIGV4cCAgICAgICAgeyAkJCA9IG5ldyBJbnRlZ2VyICgkMS5pbnRWYWx1ZSAoKSArICQzLmludFZhbHVlICgpKTsgIH0KK3wgZXhwICctJyBleHAgICAgICAgIHsgJCQgPSBuZXcgSW50ZWdlciAoJDEuaW50VmFsdWUgKCkgLSAkMy5pbnRWYWx1ZSAoKSk7ICB9Cit8IGV4cCAnKicgZXhwICAgICAgICB7ICQkID0gbmV3IEludGVnZXIgKCQxLmludFZhbHVlICgpICogJDMuaW50VmFsdWUgKCkpOyAgfQorfCBleHAgJy8nIGV4cCAgICAgICAgeyAkJCA9IG5ldyBJbnRlZ2VyICgkMS5pbnRWYWx1ZSAoKSAvICQzLmludFZhbHVlICgpKTsgIH0KK3wgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSBuZXcgSW50ZWdlciAoLSQyLmludFZhbHVlICgpKTsgICAgICAgICAgICAgICAgICB9Cit8IGV4cCAnXicgZXhwICAgICAgICB7ICQkID0gbmV3IEludGVnZXIgKChpbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgucG93ICgkMS5pbnRWYWx1ZSAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQzLmludFZhbHVlICgpKSk7ICAgICAgICB9Cit8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IG5ldyBJbnRlZ2VyICgxMTExKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KK3wgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSBuZXcgSW50ZWdlciAoMCk7IHJldHVybiBZWUVSUk9SOyAgICAgICAgICAgICAgICB9Cit8ICctJyBlcnJvciAgICAgICAgICB7ICQkID0gbmV3IEludGVnZXIgKDApOyByZXR1cm4gWVlFUlJPUjsgICAgICAgICAgICAgICAgfQorOworCitdQVRfTEVYUEFSQU1fSUYoW1sKKyVjb2RlIGxleGVyIHsKK11dLAorW1sKKyUlCitjbGFzcyBDYWxjTGV4ZXIgaW1wbGVtZW50cyBDYWxjLkxleGVyIHsKK11dKVsKKyAgU3RyZWFtVG9rZW5pemVyIHN0OworCisgIHB1YmxpYyBdQVRfTEVYUEFSQU1fSUYoW1tZWUxleGVyXV0sIFtbQ2FsY0xleGVyXV0pIChJbnB1dFN0cmVhbSBpcykKKyAgeworICAgIHN0ID0gbmV3IFN0cmVhbVRva2VuaXplciAobmV3IElucHV0U3RyZWFtUmVhZGVyIChpcykpOworICAgIHN0LnJlc2V0U3ludGF4ICgpOworICAgIHN0LmVvbElzU2lnbmlmaWNhbnQgKHRydWUpOworICAgIHN0LndoaXRlc3BhY2VDaGFycyAoOSwgOSk7CisgICAgc3Qud2hpdGVzcGFjZUNoYXJzICgzMiwgMzIpOworICAgIHN0LndvcmRDaGFycyAoNDgsIDU3KTsKKyAgfQorCitBVF9MT0NBVElPTl9JRihbWworICBQb3NpdGlvbiB5eXBvcyA9IG5ldyBQb3NpdGlvbiAoMSwgMCk7CisKKyAgcHVibGljIFBvc2l0aW9uIGdldFN0YXJ0UG9zKCkgeworICAgIHJldHVybiB5eXBvczsKKyAgfQorCisgIHB1YmxpYyBQb3NpdGlvbiBnZXRFbmRQb3MoKSB7CisgICAgcmV0dXJuIHl5cG9zOworICB9CitdXSlbCisgIF1BVF9ZWUVSUk9SX0RFRklORVsKKworICBJbnRlZ2VyIHl5bHZhbDsKKworICBwdWJsaWMgT2JqZWN0IGdldExWYWwoKSB7CisgICAgcmV0dXJuIHl5bHZhbDsKKyAgfQorCisgIHB1YmxpYyBpbnQgeXlsZXggKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICBpbnQgdHR5cGUgPSBzdC5uZXh0VG9rZW4gKCk7CisgICAgXUFUX0xPQ0FUSU9OX0lGKFtbeXlwb3MgPSBuZXcgUG9zaXRpb24gKHl5cG9zLmxpbmVubyAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlwb3MudG9rZW4gKCkgKyAxKTtdXSlbCisgICAgaWYgKHR0eXBlID09IHN0LlRUX0VPRikKKyAgICAgIHJldHVybiBDYWxjLkVPRjsKKworICAgIGVsc2UgaWYgKHR0eXBlID09IHN0LlRUX0VPTCkKKyAgICAgIHsKKyAgICAgICAgXUFUX0xPQ0FUSU9OX0lGKFtbeXlwb3MgPSBuZXcgUG9zaXRpb24gKHl5cG9zLmxpbmVubyAoKSArIDEsIDApO11dKVsKKyAgICAgICAgcmV0dXJuIChpbnQpICdcbic7CisgICAgICB9CisKKyAgICBlbHNlIGlmICh0dHlwZSA9PSBzdC5UVF9XT1JEKQorICAgICAgeworICAgICAgICB5eWx2YWwgPSBuZXcgSW50ZWdlciAoc3Quc3ZhbCk7CisgICAgICAgIHJldHVybiBDYWxjLk5VTTsKKyAgICAgIH0KKworICAgIGVsc2UKKyAgICAgIHJldHVybiBzdC50dHlwZTsKKyAgfQorCisKK11BVF9MRVhQQVJBTV9JRihbWworfTsKKyUlXV0sIFtbCit9XV0pCisKK1sKK2NsYXNzIFBvc2l0aW9uIHsKKyAgcHVibGljIGludCBsaW5lOworICBwdWJsaWMgaW50IHRva2VuOworCisgIHB1YmxpYyBQb3NpdGlvbiAoKQorICB7CisgICAgbGluZSA9IDA7CisgICAgdG9rZW4gPSAwOworICB9CisKKyAgcHVibGljIFBvc2l0aW9uIChpbnQgbCwgaW50IHQpCisgIHsKKyAgICBsaW5lID0gbDsKKyAgICB0b2tlbiA9IHQ7CisgIH0KKworICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMgKFBvc2l0aW9uIGwpCisgIHsKKyAgICByZXR1cm4gbC5saW5lID09IGxpbmUgJiYgbC50b2tlbiA9PSB0b2tlbjsKKyAgfQorCisgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcgKCkKKyAgeworICAgIHJldHVybiBJbnRlZ2VyLnRvU3RyaW5nIChsaW5lKSArICIuIiArIEludGVnZXIudG9TdHJpbmcodG9rZW4pOworICB9CisKKyAgcHVibGljIGludCBsaW5lbm8gKCkKKyAgeworICAgIHJldHVybiBsaW5lOworICB9CisKKyAgcHVibGljIGludCB0b2tlbiAoKQorICB7CisgICAgcmV0dXJuIHRva2VuOworICB9Cit9CisKK11dKQorQVRfQklTT05fT1BUSU9OX1BPUERFRlMKK10pIyBfQVRfREFUQV9KQVZBX0NBTENfWQorCisKKyMgQVRfREFUQV9DQUxDX1koW0JJU09OLU9QVElPTlNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgYGNhbGMueScuCittNF9kZWZpbmUoW0FUX0RBVEFfSkFWQV9DQUxDX1ldLAorW19BVF9EQVRBX0pBVkFfQ0FMQ19ZKCRbMV0sICRbMl0sICRbM10sIFskMV0pCitdKQorCisKKyMgX0FUX0NIRUNLX0pBVkFfQ0FMQ19FUlJPUihCSVNPTi1PUFRJT05TLCBJTlBVVCwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICBbVkVSQk9TRS1BTkQtTE9DQVRFRC1FUlJPUi1NRVNTQUdFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUnVuIGBjYWxjJyBvbiBJTlBVVCwgYW5kIGV4cGVjdCBhIGBzeW50YXggZXJyb3InIG1lc3NhZ2UuCisjCisjIElmIElOUFVUIHN0YXJ0cyB3aXRoIGEgc2xhc2gsIGl0IGlzIHVzZWQgYXMgYWJzb2x1dGUgaW5wdXQgZmlsZSBuYW1lLAorIyBvdGhlcndpc2UgYXMgY29udGVudHMuCisjCisjIFRoZSBWRVJCT1NFLUFORC1MT0NBVEVELUVSUk9SLU1FU1NBR0UgaXMgc3RyaXBwZWQgb2YgbG9jYXRpb25zCisjIGFuZCBleHBlY3RlZCB0b2tlbnMgaWYgbmVjZXNzYXJ5LCBhbmQgY29tcGFyZWQgd2l0aCB0aGUgb3V0cHV0LgorbTRfZGVmaW5lKFtfQVRfQ0hFQ0tfSkFWQV9DQUxDX0VSUk9SXSwKK1ttNF9ibWF0Y2goWyQyXSwgW14vXSwKKyAgICAgICAgICAgW0FUX0pBVkFfUEFSU0VSX0NIRUNLKFtDYWxjIDwgJDJdLCAwLCBbXSwgW3N0ZGVycl0pXSwKKyAgICAgICAgICAgW0FUX0RBVEEoW1tpbnB1dF1dLAorW1skMgorXV0pCitBVF9KQVZBX1BBUlNFUl9DSEVDSyhbQ2FsYyA8IGlucHV0XSwgMCwgW10sIFtzdGRlcnJdKV0pCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorQVRfREFUQShbW2V4cG91dF1dLAorWyQzCitdKQorIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KK0FUX1lZRVJST1JfU0VFU19MT0NfSUYoW10sCitbW3NlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dF1dKQorIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK200X2JtYXRjaChbJDFdLCBbJWVycm9yLXZlcmJvc2VdLCBbXSwKK1tbc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0XV0pCisjIDQuIENoZWNrCitBVF9DSEVDSyhbY2F0IHN0ZGVycl0sIDAsIFtleHBvdXRdKQorXSkKKworIyBfQVRfQ0hFQ0tfSkFWQV9DQUxDKFtCSVNPTi1ESVJFQ1RJVkVTXSwgW0JJU09OLUNPREVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTdGFydCBhIHRlc3RpbmcgY2h1bmsgd2hpY2ggY29tcGlsZXMgYGNhbGMnIGdyYW1tYXIgd2l0aAorIyBCSVNPTi1ESVJFQ1RJVkVTLCBhbmQgcGVyZm9ybXMgc2V2ZXJhbCB0ZXN0cyBvdmVyIHRoZSBwYXJzZXIuCittNF9kZWZpbmUoW19BVF9DSEVDS19KQVZBX0NBTENdLAorWyMgV2UgdXNlIGludGVnZXJzIHRvIGF2b2lkIGRlcGVuZGVuY2llcyB1cG9uIHRoZSBwcmVjaXNpb24gb2YgZG91Ymxlcy4KK0FUX1NFVFVQKFtDYWxjdWxhdG9yICQxXSkKKworQVRfQklTT05fT1BUSU9OX1BVU0hERUZTKFskMV0pCisKK0FUX0RBVEFfSkFWQV9DQUxDX1koWyQxCislY29kZSB7CiskMgorfV0pCisKK0FUX0JJU09OX0NIRUNLKFstbyBDYWxjLmphdmEgQ2FsYy55XSkKK0FUX0pBVkFfQ09NUElMRShbQ2FsYy5qYXZhXSkKKworIyBUZXN0IHRoZSBwcmlvcml0aWVzLgorQVRfREFUQShbW2lucHV0XV0sCitbWzEgKyAyICogMyA9IDcKKzEgKyAyICogLTMgPSAtNQorCistMV4yID0gLTEKKygtMSleMiA9IDEKKworLS0tMSA9IC0xCisKKzEgLSAyIC0gMyA9IC00CisxIC0gKDIgLSAzKSA9IDIKKworMl4yXjMgPSAyNTYKKygyXjIpXjMgPSA2NAorXV0pCitBVF9KQVZBX1BBUlNFUl9DSEVDSyhbQ2FsYyA8IGlucHV0XSwgMCwgW10sIFtzdGRlcnJdKQorCisKKyMgU29tZSBzeW50YXggZXJyb3JzLgorX0FUX0NIRUNLX0pBVkFfQ0FMQ19FUlJPUihbJDFdLCBbMCAwXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcl0pCitfQVRfQ0hFQ0tfSkFWQV9DQUxDX0VSUk9SKFskMV0sIFsxLy8yXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJ10pCitfQVRfQ0hFQ0tfSkFWQV9DQUxDX0VSUk9SKFskMV0sIFtlcnJvcl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkXSkKK19BVF9DSEVDS19KQVZBX0NBTENfRVJST1IoWyQxXSwgWzEgPSAyID0gM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsxLjQ6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPSddKQorX0FUX0NIRUNLX0pBVkFfQ0FMQ19FUlJPUihbJDFdLCBbCisrMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsyLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKyddKQorIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgorX0FUX0NIRUNLX0pBVkFfQ0FMQ19FUlJPUihbJDFdLCBbL2Rldi9udWxsXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dF0pCisKKyMgRXhlcmNpc2UgdGhlIGVycm9yIHRva2VuOiB3aXRob3V0IGl0LCB3ZSBkaWUgYXQgdGhlIGZpcnN0IGVycm9yLAorIyBoZW5jZSBiZSBzdXJlIHRvCisjCisjIC0gaGF2ZSBzZXZlcmFsIGVycm9ycyB3aGljaCBleGVyY2lzZSBkaWZmZXJlbnQgc2hpZnQvZGlzY2FyZGluZ3MKKyMgICAtICgpOiBub3RoaW5nIHRvIHBvcCwgbm90aGluZyB0byBkaXNjYXJkCisjICAgLSAoMSArIDEgKyAxICspOiBhIGxvdCB0byBwb3AsIG5vdGhpbmcgdG8gZGlzY2FyZAorIyAgIC0gKCogKiAqKTogbm90aGluZyB0byBwb3AsIGEgbG90IHRvIGRpc2NhcmQKKyMgICAtICgxICsgMiAqICopOiBzb21lIHRvIHBvcCBhbmQgZGlzY2FyZAorIworIyAtIHRlc3QgdGhlIGFjdGlvbiBhc3NvY2lhdGVkIHRvIGBlcnJvcicKKyMKKyMgLSBjaGVjayB0aGUgbG9va2FoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAorIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZQorIyAgIGZpcnN0IGVycm9yIGlzICIpIiwgd2hpY2ggaXMgbmVlZGVkIHRvIHJlY292ZXIgZnJvbSB0aGUgZXJyb3IgYW5kCisjICAgcHJvZHVjZSB0aGUgIjAiIHRoYXQgdHJpZ2dlcnMgdGhlICIwICE9IDEiIGVycm9yLgorIworX0FUX0NIRUNLX0pBVkFfQ0FMQ19FUlJPUihbJDFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbKCkgKyAoMSArIDEgKyAxICspICsgKCogKiAqKSArICgxICogMiAqICopID0gMV0sCitbMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjExOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE0OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjI0OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEtMS4yNzogY2FsYzogZXJyb3I6IDQ0NDQgIT0gMV0pCisKKyMgVGhlIHNhbWUsIGJ1dCB0aGlzIHRpbWUgZXhlcmNpc2luZyBleHBsaWNpdGx5IHRyaWdnZXJlZCBzeW50YXggZXJyb3JzLgorIyBQT1NJWCBzYXlzIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCitfQVRfQ0hFQ0tfSkFWQV9DQUxDX0VSUk9SKFskMV0sIFsoISkgKyAoMCAwKSA9IDFdLAorWzEuNzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS4xLTEuMTA6IGNhbGM6IGVycm9yOiAyMjIyICE9IDFdKQorX0FUX0NIRUNLX0pBVkFfQ0FMQ19FUlJPUihbJDFdLCBbKC0gKikgKyAoMCAwKSA9IDFdLAorWzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS44OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjEtMS4xMTogY2FsYzogZXJyb3I6IDIyMjIgIT0gMV0pCitBVF9CSVNPTl9PUFRJT05fUE9QREVGUworCitBVF9DTEVBTlVQCitdKSMgX0FUX0NIRUNLX0pBVkFfQ0FMQworCisKKyMgQVRfQ0hFQ0tfSkFWQV9DQUxDKFtCSVNPTi1ESVJFQ1RJVkVTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU3RhcnQgYSB0ZXN0aW5nIGNodW5rIHdoaWNoIGNvbXBpbGVzIGBjYWxjJyBncmFtbWFyIHdpdGgKKyMgQklTT04tRElSRUNUSVZFUywgYW5kIHBlcmZvcm1zIHNldmVyYWwgdGVzdHMgb3ZlciB0aGUgcGFyc2VyLgorIyBSdW4gdGhlIHRlc3Qgd2l0aCBhbmQgd2l0aG91dCAlZXJyb3ItdmVyYm9zZS4KK200X2RlZmluZShbQVRfQ0hFQ0tfSkFWQV9DQUxDXSwKK1tfQVRfQ0hFQ0tfSkFWQV9DQUxDKFskMV0sIFskMl0pCitfQVRfQ0hFQ0tfSkFWQV9DQUxDKFslZXJyb3ItdmVyYm9zZSAkMV0sIFskMl0pCitfQVRfQ0hFQ0tfSkFWQV9DQUxDKFslbG9jYXRpb25zICQxXSwgWyQyXSkKK19BVF9DSEVDS19KQVZBX0NBTEMoWyVlcnJvci12ZXJib3NlICVsb2NhdGlvbnMgJDFdLCBbJDJdKQorXSkjIEFUX0NIRUNLX0pBVkFfQ0FMQworCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKyMgU2ltcGxlIExBTFIgQ2FsY3VsYXRvci4gICMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKworQVRfQ0hFQ0tfSkFWQV9DQUxDKFtdLCBbWworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nIGFyZ3NbXSkgdGhyb3dzIElPRXhjZXB0aW9uCisgIHsKKyAgICBDYWxjTGV4ZXIgbCA9IG5ldyBDYWxjTGV4ZXIgKFN5c3RlbS5pbik7CisgICAgQ2FsYyBwID0gbmV3IENhbGMgKGwpOworICAgIHAucGFyc2UgKCk7CisgIH0KK11dKQorCitBVF9DSEVDS19KQVZBX0NBTEMoWyVsZXgtcGFyYW0geyBJbnB1dFN0cmVhbSBpcyB9IF0sIFtbCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmcgYXJnc1tdKSB0aHJvd3MgSU9FeGNlcHRpb24KKyAgeworICAgIG5ldyBDYWxjIChTeXN0ZW0uaW4pLnBhcnNlICgpOworICB9CitdXSkKKworCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0jCisjIEphdmEgRGlyZWN0aXZlcy4gIworIyAtLS0tLS0tLS0tLS0tLS0tLSMKKworQVRfQkFOTkVSKFtKYXZhIFBhcmFtZXRlcnMuXSkKKworCisjIEFUX0NIRUNLX0pBVkFfTUlOSU1BTChbRElSRUNUSVZFU10sIFtQQVJTRVJfQUNUSU9OXSwgW1BPU0lUSU9OX0NMQVNTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB0aGF0IGEgbWluaW5hbCBwYXJzZXIgd2l0aCBESVJFQ1RJVkVTIGNvbXBpbGVzIGluIEphdmEuCisjIFB1dCB0aGUgSmF2YSBjb2RlIGluIFlZUGFyc2VyLmphdmEuCittNF9kZWZpbmUoW0FUX0NIRUNLX0pBVkFfTUlOSU1BTF0sCitbCitBVF9EQVRBKFtbWVlQYXJzZXIueV1dLCBbCislbGFuZ3VhZ2UgIkphdmEiCislbG9jYXRpb25zCislZGVidWcKKyVlcnJvci12ZXJib3NlCisldG9rZW4tdGFibGUKKyQxCislJQorc3RhcnQ6ICJlbmQiIHskMn07CislJQorY2xhc3MgbTRfZGVmYXVsdChbJDNdLCBbUG9zaXRpb25dKSB7fQorXSkKK0FUX0JJU09OX0NIRUNLKFtbWVlQYXJzZXIueV1dKQorQVRfQ0hFQ0soW1tncmVwICdbbWJdNF8nIFlZUGFyc2VyLnldXSwgWzFdLCBbaWdub3JlXSkKK0FUX0pBVkFfQ09NUElMRShbW1lZUGFyc2VyLmphdmFdXSkKK10pCisKKworIyBBVF9DSEVDS19KQVZBX01JTklNQUxfV19MRVhFUihbMTpESVJFQ1RJVkVTXSwgWzI6TEVYX1RIUk9XU10sCisjICAgICAgIFszOllZTEVYX0FDVElPTl0sIFs0OkxFWEVSX0JPRFldLCBbNTpQQVJTRVJfQUNUSU9OXSwgWzY6U1RZUEVdLAorIyAgICAgICBbNzpQT1NJVElPTl9UWVBFXSwgWzg6TE9DQVRJT05fVFlQRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB0aGF0IGEgbWluaW5hbCBwYXJzZXIgd2l0aCBESVJFQ1RJVkVTIGFuZCBhICIlY29kZSBsZXhlciIuCisjIFlZTEVYIGlzIHRoZSBib2R5IG9mIHl5bGV4ICgpIHdoaWNoIHRocm93cyBMRVhfVEhST1cuCisjIGNvbXBpbGVzIGluIEphdmEuCittNF9kZWZpbmUoW0FUX0NIRUNLX0pBVkFfTUlOSU1BTF9XX0xFWEVSXSwKK1tBVF9DSEVDS19KQVZBX01JTklNQUwoWyQxCisKKyVjb2RlIGxleGVyCit7CisgIG00X2RlZmF1bHQoWyQ2XSwgW09iamVjdF0pIHl5bHZhbDsKKyAgcHVibGljIG00X2RlZmF1bHQoWyQ2XSwgW09iamVjdF0pIGdldExWYWwoKSB7IHJldHVybiB5eWx2YWw7IH0KKworICBwdWJsaWMgbTRfZGVmYXVsdChbJDddLCBbUG9zaXRpb25dKSBnZXRTdGFydFBvcygpIHsgcmV0dXJuIG51bGw7IH0KKyAgcHVibGljIG00X2RlZmF1bHQoWyQ3XSwgW1Bvc2l0aW9uXSkgZ2V0RW5kUG9zKCkgICB7IHJldHVybiBudWxsOyB9CisKKyAgcHVibGljIHZvaWQgeXllcnJvciAobTRfZGVmYXVsdChbJDhdLCBbTG9jYXRpb25dKSBsb2MsIFN0cmluZyBzKQorICB7CisgICAgU3lzdGVtLmVyci5wcmludGxuIChsb2MgKyAiOiAiICsgcyk7CisgIH0KKworICBwdWJsaWMgaW50IHl5bGV4ICgpJDIKKyAgeworICAgICQzCisgIH0KKworICAkNAorfV0sIFskNV0sIFskN10pXSkKKworCisjIEFUX0NIRUNLX0pBVkFfR1JFUChbTElORV0sIFtDT1VOVD0xXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB0aGF0IFlZUGFyc2VyLmphdmEgY29udGFpbnMgZXhhY3RseSBDT1VOVCBsaW5lcyBtYXRjaGluZyBeTElORSQKKyMgd2l0aCBncmVwLgorbTRfZGVmaW5lKFtBVF9DSEVDS19KQVZBX0dSRVBdLAorCVtBVF9DSEVDSyhbZ3JlcCAtYyAnXiQxJCcgWVlQYXJzZXIuamF2YV0sIFtdLCBbbTRfZGVmYXVsdChbJDJdLCBbMV0pCitdKQorXSkKKworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKyMgSmF2YSBwYXJzZXIgY2xhc3MgYW5kIHBhY2thZ2UgbmFtZXMgIworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisKK0FUX1NFVFVQKFtKYXZhIHBhcnNlciBjbGFzcyBhbmQgcGFja2FnZSBuYW1lc10pCisKK0FUX0NIRUNLX0pBVkFfTUlOSU1BTChbXSkKK0FUX0NIRUNLX0pBVkFfR1JFUChbW2NsYXNzIFlZUGFyc2VyXV0pCisKK0FUX0NIRUNLX0pBVkFfTUlOSU1BTChbWyVuYW1lLXByZWZpeCAiUHJlZml4Il1dKQorQVRfQ0hFQ0tfSkFWQV9HUkVQKFtbY2xhc3MgUHJlZml4UGFyc2VyXV0pCisKK0FUX0NIRUNLX0pBVkFfTUlOSU1BTChbWyVkZWZpbmUgcGFyc2VyX2NsYXNzX25hbWUgIlBhcnNlckNsYXNzTmFtZSJdXSkKK0FUX0NIRUNLX0pBVkFfR1JFUChbW2NsYXNzIFBhcnNlckNsYXNzTmFtZV1dKQorCitBVF9DSEVDS19KQVZBX01JTklNQUwoW1slZGVmaW5lIHBhY2thZ2UgInVzZXJfamF2YV9wYWNrYWdlIl1dKQorQVRfQ0hFQ0tfSkFWQV9HUkVQKFtbcGFja2FnZSB1c2VyX2phdmFfcGFja2FnZTtdXSkKKworQVRfQ0xFQU5VUAorCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKyMgSmF2YSBwYXJzZXIgY2xhc3MgbW9kaWZpZXJzICMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKworQVRfU0VUVVAoW0phdmEgcGFyc2VyIGNsYXNzIG1vZGlmaWVyc10pCisKK0FUX0NIRUNLX0pBVkFfTUlOSU1BTChbWyVkZWZpbmUgYWJzdHJhY3RdXSkKK0FUX0NIRUNLX0pBVkFfR1JFUChbW2Fic3RyYWN0IGNsYXNzIFlZUGFyc2VyXV0pCisKK0FUX0NIRUNLX0pBVkFfTUlOSU1BTChbWyVkZWZpbmUgZmluYWxdXSkKK0FUX0NIRUNLX0pBVkFfR1JFUChbW2ZpbmFsIGNsYXNzIFlZUGFyc2VyXV0pCisKK0FUX0NIRUNLX0pBVkFfTUlOSU1BTChbWyVkZWZpbmUgc3RyaWN0ZnBdXSkKK0FUX0NIRUNLX0pBVkFfR1JFUChbW3N0cmljdGZwIGNsYXNzIFlZUGFyc2VyXV0pCisKK0FUX0NIRUNLX0pBVkFfTUlOSU1BTChbWworJWRlZmluZSBhYnN0cmFjdAorJWRlZmluZSBzdHJpY3RmcF1dKQorQVRfQ0hFQ0tfSkFWQV9HUkVQKFtbYWJzdHJhY3Qgc3RyaWN0ZnAgY2xhc3MgWVlQYXJzZXJdXSkKKworQVRfQ0hFQ0tfSkFWQV9NSU5JTUFMKFtbCislZGVmaW5lIGZpbmFsCislZGVmaW5lIHN0cmljdGZwXV0pCitBVF9DSEVDS19KQVZBX0dSRVAoW1tmaW5hbCBzdHJpY3RmcCBjbGFzcyBZWVBhcnNlcl1dKQorCitBVF9DSEVDS19KQVZBX01JTklNQUwoW1slZGVmaW5lIHB1YmxpY11dKQorQVRfQ0hFQ0tfSkFWQV9HUkVQKFtbcHVibGljIGNsYXNzIFlZUGFyc2VyXV0pCisKK0FUX0NIRUNLX0pBVkFfTUlOSU1BTChbWworJWRlZmluZSBwdWJsaWMKKyVkZWZpbmUgYWJzdHJhY3RdXSkKK0FUX0NIRUNLX0pBVkFfR1JFUChbW3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBZWVBhcnNlcl1dKQorCitBVF9DSEVDS19KQVZBX01JTklNQUwoW1sKKyVkZWZpbmUgcHVibGljCislZGVmaW5lIGZpbmFsXV0pCitBVF9DSEVDS19KQVZBX0dSRVAoW1twdWJsaWMgZmluYWwgY2xhc3MgWVlQYXJzZXJdXSkKKworQVRfQ0hFQ0tfSkFWQV9NSU5JTUFMKFtbCislZGVmaW5lIHB1YmxpYworJWRlZmluZSBzdHJpY3RmcF1dKQorQVRfQ0hFQ0tfSkFWQV9HUkVQKFtbcHVibGljIHN0cmljdGZwIGNsYXNzIFlZUGFyc2VyXV0pCisKK0FUX0NIRUNLX0pBVkFfTUlOSU1BTChbWworJWRlZmluZSBwdWJsaWMKKyVkZWZpbmUgYWJzdHJhY3QKKyVkZWZpbmUgc3RyaWN0ZnBdXSkKK0FUX0NIRUNLX0pBVkFfR1JFUChbW3B1YmxpYyBhYnN0cmFjdCBzdHJpY3RmcCBjbGFzcyBZWVBhcnNlcl1dKQorCitBVF9DSEVDS19KQVZBX01JTklNQUwoW1sKKyVkZWZpbmUgcHVibGljCislZGVmaW5lIGZpbmFsCislZGVmaW5lIHN0cmljdGZwXV0pCitBVF9DSEVDS19KQVZBX0dSRVAoW1twdWJsaWMgZmluYWwgc3RyaWN0ZnAgY2xhc3MgWVlQYXJzZXJdXSkKKworQVRfQ0xFQU5VUAorCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisjIEphdmEgcGFyc2VyIGNsYXNzIGV4dGVuZHMgYW5kIGltcGxlbWVudHMgIworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKworQVRfU0VUVVAoW0phdmEgcGFyc2VyIGNsYXNzIGV4dGVuZHMgYW5kIGltcGxlbWVudHNdKQorCitBVF9DSEVDS19KQVZBX01JTklNQUwoW1slZGVmaW5lIGV4dGVuZHMgIlRocmVhZCJdXSkKK0FUX0NIRUNLX0pBVkFfR1JFUChbW2NsYXNzIFlZUGFyc2VyIGV4dGVuZHMgVGhyZWFkXV0pCisKK0FUX0NIRUNLX0pBVkFfTUlOSU1BTChbWyVkZWZpbmUgaW1wbGVtZW50cyAiQ2xvbmVhYmxlIl1dKQorQVRfQ0hFQ0tfSkFWQV9HUkVQKFtbY2xhc3MgWVlQYXJzZXIgaW1wbGVtZW50cyBDbG9uZWFibGVdXSkKKworQVRfQ0hFQ0tfSkFWQV9NSU5JTUFMKFtbCislZGVmaW5lIGV4dGVuZHMgIlRocmVhZCIKKyVkZWZpbmUgaW1wbGVtZW50cyAiQ2xvbmVhYmxlIl1dKQorQVRfQ0hFQ0tfSkFWQV9HUkVQKFtbY2xhc3MgWVlQYXJzZXIgZXh0ZW5kcyBUaHJlYWQgaW1wbGVtZW50cyBDbG9uZWFibGVdXSkKKworQVRfQ0xFQU5VUAorCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworIyBKYXZhICVwYXJzZS1wYXJhbSBhbmQgJWxleC1wYXJhbSAjCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKworQVRfU0VUVVAoW0phdmEgJXBhcnNlLXBhcmFtIGFuZCAlbGV4LXBhcmFtXSkKKworQVRfQ0hFQ0tfSkFWQV9NSU5JTUFMKFtdKQorQVRfQ0hFQ0tfSkFWQV9HUkVQKFtbICpwdWJsaWMgWVlQYXJzZXIgKExleGVyIHl5bGV4ZXIpIHtdXSkKKworQVRfQ0hFQ0tfSkFWQV9NSU5JTUFMKFtbJXBhcnNlLXBhcmFtIHtpbnQgcGFyc2VfcGFyYW0xfV1dKQorQVRfQ0hFQ0tfSkFWQV9HUkVQKFtbICpwcm90ZWN0ZWQgZmluYWwgaW50IHBhcnNlX3BhcmFtMTtdXSkKK0FUX0NIRUNLX0pBVkFfR1JFUChbWyAqcHVibGljIFlZUGFyc2VyIChMZXhlciB5eWxleGVyLCAqaW50IHBhcnNlX3BhcmFtMSkge11dKQorQVRfQ0hFQ0tfSkFWQV9HUkVQKFtbWwkgXSp0aGlzLnBhcnNlX3BhcmFtMSA9IHBhcnNlX3BhcmFtMTtdXSkKKworQVRfQ0hFQ0tfSkFWQV9NSU5JTUFMKFtbCislcGFyc2UtcGFyYW0ge2ludCBwYXJzZV9wYXJhbTF9CislcGFyc2UtcGFyYW0ge2xvbmcgcGFyc2VfcGFyYW0yfV1dKQorQVRfQ0hFQ0tfSkFWQV9HUkVQKFtbICpwcm90ZWN0ZWQgZmluYWwgaW50IHBhcnNlX3BhcmFtMTtdXSkKK0FUX0NIRUNLX0pBVkFfR1JFUChbWyAqcHJvdGVjdGVkIGZpbmFsIGxvbmcgcGFyc2VfcGFyYW0yO11dKQorQVRfQ0hFQ0tfSkFWQV9HUkVQKFtbICpwdWJsaWMgWVlQYXJzZXIgKExleGVyIHl5bGV4ZXIsICppbnQgcGFyc2VfcGFyYW0xLCAqbG9uZyBwYXJzZV9wYXJhbTIpIHtdXSkKK0FUX0NIRUNLX0pBVkFfR1JFUChbW1sJIF0qdGhpcy5wYXJzZV9wYXJhbTEgPSBwYXJzZV9wYXJhbTE7XV0pCitBVF9DSEVDS19KQVZBX0dSRVAoW1tbCSBdKnRoaXMucGFyc2VfcGFyYW0yID0gcGFyc2VfcGFyYW0yO11dKQorCitBVF9DSEVDS19KQVZBX01JTklNQUxfV19MRVhFUihbXSwgW10sIFtbcmV0dXJuIEVPRjtdXSkKK0FUX0NIRUNLX0pBVkFfR1JFUChbWyAqcHVibGljIFlZUGFyc2VyICgpIHtdXSkKK0FUX0NIRUNLX0pBVkFfR1JFUChbWyAqcHJvdGVjdGVkIFlZUGFyc2VyIChMZXhlciB5eWxleGVyKSB7XV0pCisKK0FUX0NIRUNLX0pBVkFfTUlOSU1BTF9XX0xFWEVSKFtbJXBhcnNlLXBhcmFtIHtpbnQgcGFyc2VfcGFyYW0xfV1dLAorCVtdLCBbW3JldHVybiBFT0Y7XV0pCitBVF9DSEVDS19KQVZBX0dSRVAoW1sgKnByb3RlY3RlZCBmaW5hbCBpbnQgcGFyc2VfcGFyYW0xO11dKQorQVRfQ0hFQ0tfSkFWQV9HUkVQKFtbICpwdWJsaWMgWVlQYXJzZXIgKGludCBwYXJzZV9wYXJhbTEpIHtdXSkKK0FUX0NIRUNLX0pBVkFfR1JFUChbWyAqcHJvdGVjdGVkIFlZUGFyc2VyIChMZXhlciB5eWxleGVyLCAqaW50IHBhcnNlX3BhcmFtMSkge11dKQorQVRfQ0hFQ0tfSkFWQV9HUkVQKFtbWwkgXSp0aGlzLnBhcnNlX3BhcmFtMSA9IHBhcnNlX3BhcmFtMTtdXSwgWzJdKQorCitBVF9DSEVDS19KQVZBX01JTklNQUxfV19MRVhFUihbWworJXBhcnNlLXBhcmFtIHtpbnQgcGFyc2VfcGFyYW0xfQorJXBhcnNlLXBhcmFtIHtsb25nIHBhcnNlX3BhcmFtMn1dXSwKKwlbXSwgW1tyZXR1cm4gRU9GO11dKQorQVRfQ0hFQ0tfSkFWQV9HUkVQKFtbICpwcm90ZWN0ZWQgZmluYWwgaW50IHBhcnNlX3BhcmFtMTtdXSkKK0FUX0NIRUNLX0pBVkFfR1JFUChbWyAqcHJvdGVjdGVkIGZpbmFsIGxvbmcgcGFyc2VfcGFyYW0yO11dKQorQVRfQ0hFQ0tfSkFWQV9HUkVQKFtbICpwdWJsaWMgWVlQYXJzZXIgKGludCBwYXJzZV9wYXJhbTEsICpsb25nIHBhcnNlX3BhcmFtMikge11dKQorQVRfQ0hFQ0tfSkFWQV9HUkVQKFtbICpwcm90ZWN0ZWQgWVlQYXJzZXIgKExleGVyIHl5bGV4ZXIsICppbnQgcGFyc2VfcGFyYW0xLCAqbG9uZyBwYXJzZV9wYXJhbTIpIHtdXSkKK0FUX0NIRUNLX0pBVkFfR1JFUChbW1sJIF0qdGhpcy5wYXJzZV9wYXJhbTEgPSBwYXJzZV9wYXJhbTE7XV0sIFsyXSkKK0FUX0NIRUNLX0pBVkFfR1JFUChbW1sJIF0qdGhpcy5wYXJzZV9wYXJhbTIgPSBwYXJzZV9wYXJhbTI7XV0sIFsyXSkKKworQVRfQ0hFQ0tfSkFWQV9NSU5JTUFMX1dfTEVYRVIoW1slbGV4LXBhcmFtIHtjaGFyIGxleF9wYXJhbTF9XV0sCisJW10sIFtbcmV0dXJuIEVPRjtdXSwgW1tZWUxleGVyIChjaGFyIGxleF9wYXJhbTEpIHt9XV0pCitBVF9DSEVDS19KQVZBX0dSRVAoW1sgKnB1YmxpYyBZWVBhcnNlciAoY2hhciBsZXhfcGFyYW0xKSB7XV0pCitBVF9DSEVDS19KQVZBX0dSRVAoW1suKiA9IG5ldyBZWUxleGVyICoobGV4X3BhcmFtMSk7XV0pCisKK0FUX0NIRUNLX0pBVkFfTUlOSU1BTF9XX0xFWEVSKFtbCislbGV4LXBhcmFtIHtjaGFyIGxleF9wYXJhbTF9CislbGV4LXBhcmFtIHtzaG9ydCBsZXhfcGFyYW0yfV1dLAorCVtdLCBbW3JldHVybiBFT0Y7XV0sIFtbWVlMZXhlciAoY2hhciBsZXhfcGFyYW0xLCBzaG9ydCBsZXhfcGFyYW0yKSB7fV1dKQorQVRfQ0hFQ0tfSkFWQV9HUkVQKFtbICpwdWJsaWMgWVlQYXJzZXIgKGNoYXIgbGV4X3BhcmFtMSwgKnNob3J0IGxleF9wYXJhbTIpIHtdXSkKK0FUX0NIRUNLX0pBVkFfR1JFUChbWy4qID0gbmV3IFlZTGV4ZXIgKihsZXhfcGFyYW0xLCAqbGV4X3BhcmFtMik7XV0pCisKK0FUX0NIRUNLX0pBVkFfTUlOSU1BTF9XX0xFWEVSKFtbCislcGFyc2UtcGFyYW0ge2ludCBwYXJzZV9wYXJhbTF9CislcGFyc2UtcGFyYW0ge2xvbmcgcGFyc2VfcGFyYW0yfQorJWxleC1wYXJhbSB7Y2hhciBsZXhfcGFyYW0xfQorJWxleC1wYXJhbSB7c2hvcnQgbGV4X3BhcmFtMn1dXSwKKwlbXSwgW1tyZXR1cm4gRU9GO11dLCBbW1lZTGV4ZXIgKGNoYXIgbGV4X3BhcmFtMSwgc2hvcnQgbGV4X3BhcmFtMikge31dXSkKK0FUX0NIRUNLX0pBVkFfR1JFUChbWyAqcHJvdGVjdGVkIGZpbmFsIGludCBwYXJzZV9wYXJhbTE7XV0pCitBVF9DSEVDS19KQVZBX0dSRVAoW1sgKnByb3RlY3RlZCBmaW5hbCBsb25nIHBhcnNlX3BhcmFtMjtdXSkKK0FUX0NIRUNLX0pBVkFfR1JFUChbWyAqcHVibGljIFlZUGFyc2VyIChjaGFyIGxleF9wYXJhbTEsICpzaG9ydCBsZXhfcGFyYW0yLCAqaW50IHBhcnNlX3BhcmFtMSwgKmxvbmcgcGFyc2VfcGFyYW0yKSB7XV0pCitBVF9DSEVDS19KQVZBX0dSRVAoW1suKiA9IG5ldyBZWUxleGVyICoobGV4X3BhcmFtMSwgKmxleF9wYXJhbTIpO11dKQorQVRfQ0hFQ0tfSkFWQV9HUkVQKFtbICpwcm90ZWN0ZWQgWVlQYXJzZXIgKExleGVyIHl5bGV4ZXIsICppbnQgcGFyc2VfcGFyYW0xLCAqbG9uZyBwYXJzZV9wYXJhbTIpIHtdXSkKK0FUX0NIRUNLX0pBVkFfR1JFUChbW1sJIF0qdGhpcy5wYXJzZV9wYXJhbTEgPSBwYXJzZV9wYXJhbTE7XV0sIFsyXSkKK0FUX0NIRUNLX0pBVkFfR1JFUChbW1sJIF0qdGhpcy5wYXJzZV9wYXJhbTIgPSBwYXJzZV9wYXJhbTI7XV0sIFsyXSkKKworQVRfQ0xFQU5VUAorCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisjIEphdmEgdGhyb3cgc3BlY2lmaWNhdGlvbnMgIworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKworQVRfU0VUVVAoW0phdmEgdGhyb3dzIHNwZWNpZmljYXRpb25zXSkKKworIyAlZGVmaW5lIHRocm93cwktIDAgMSAyCisjICVkZWZpbmUgbGV4LXRocm93cwktIDAgMSAyCisjICVjb2RlIGxleGVyCQkgIDAgMQorCittNF9kZWZpbmUoW0FUX0pUX2xleF90aHJvd3NfZGVmaW5lXSwgW200X2Nhc2UoQVRfSlRfbGV4X3Rocm93cywKKwktMSwgW10sCisJIDAsIFtbJWRlZmluZSBsZXhfdGhyb3dzICIiXV0sCisJIDEsIFtbJWRlZmluZSBsZXhfdGhyb3dzICJJbnRlcnJ1cHRlZEV4Y2VwdGlvbiJdXSwKKwkgMiwgW1slZGVmaW5lIGxleF90aHJvd3MgIkludGVycnVwdGVkRXhjZXB0aW9uLCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIl1dKV0pCisKK200X2RlZmluZShbQVRfSlRfeXlsZXhfdGhyb3dzXSwgW200X2Nhc2UoQVRfSlRfbGV4X3Rocm93cywKKwktMSwgW1sgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb25dXSwKKwkgMCwgW10sCisJIDEsIFtbIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbl1dLAorCSAyLCBbWyB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb25dXSldKQorCittNF9kZWZpbmUoW0FUX0pUX3l5bGV4X2FjdGlvbl0sIFttNF9jYXNlKEFUX0pUX2xleF90aHJvd3MsCisJLTEsIFtbdGhyb3cgbmV3IGphdmEuaW8uSU9FeGNlcHRpb24oKTtdXSwKKwkgMCwgW1tyZXR1cm4gRU9GO11dLAorCSAxLCBbW3Rocm93IG5ldyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbigpO11dLAorCSAyLCBbW3Rocm93IG5ldyBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uKCk7XV0pXSkKKworCittNF9kZWZpbmUoW0FUX0pUX3Rocm93c19kZWZpbmVdLCBbbTRfY2FzZShBVF9KVF90aHJvd3MsCisJLTEsIFtdLAorCSAwLCBbWyVkZWZpbmUgdGhyb3dzICIiXV0sCisJIDEsIFtbJWRlZmluZSB0aHJvd3MgIkNsYXNzTm90Rm91bmRFeGNlcHRpb24iXV0sCisJIDIsIFtbJWRlZmluZSB0aHJvd3MgIkNsYXNzTm90Rm91bmRFeGNlcHRpb24sIEluc3RhbnRpYXRpb25FeGNlcHRpb24iXV0pXSkKKworbTRfZGVmaW5lKFtBVF9KVF95eWFjdGlvbl90aHJvd3NdLCBbbTRfY2FzZShBVF9KVF90aHJvd3MsCisJLTEsIFtdLAorCSAwLCBbXSwKKwkgMSwgW1sgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb25dXSwKKwkgMiwgW1sgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24sIEluc3RhbnRpYXRpb25FeGNlcHRpb25dXSldKQorCittNF9kZWZpbmUoW0FUX0pUX3BhcnNlX3Rocm93c18yXSwgW200X2Nhc2UoQVRfSlRfdGhyb3dzLAorCS0xLCBbXSwKKwkgMCwgW10sCisJIDEsIFtbLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uXV0sCisJIDIsIFtbLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uXV0pXSkKKworbTRfZGVmaW5lKFtBVF9KVF9wYXJzZV90aHJvd3NdLAorCVttNF9pZihtNF9xdW90ZShBVF9KVF95eWxleF90aHJvd3MpLCBbXSwKKwkJW0FUX0pUX3l5YWN0aW9uX3Rocm93c10sCisJCVtBVF9KVF95eWxleF90aHJvd3NbXUFUX0pUX3BhcnNlX3Rocm93c18yXSldKQorCittNF9kZWZpbmUoW0FUX0pUX2luaXRpYWxfYWN0aW9uXSwgW200X2Nhc2UoQVRfSlRfdGhyb3dzLAorCS0xLCBbXSwKKwkgMCwgW10sCisJIDEsIFtbJWluaXRpYWwtYWN0aW9uIHtpZiAodHJ1ZSkgdGhyb3cgbmV3IENsYXNzTm90Rm91bmRFeGNlcHRpb24oKTt9XV0sCisJIDIsIFtbJWluaXRpYWwtYWN0aW9uIHtpZiAodHJ1ZSkgdGhyb3cgbmV3IEluc3RhbnRpYXRpb25FeGNlcHRpb24oKTt9XV0pXSkKKworbTRfZGVmaW5lKFtBVF9KVF9wYXJzZV9hY3Rpb25dLCBbbTRfY2FzZShBVF9KVF90aHJvd3MsCisJLTEsIFtdLAorCSAwLCBbXSwKKwkgMSwgW1t0aHJvdyBuZXcgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbigpO11dLAorCSAyLCBbW3Rocm93IG5ldyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uKCk7XV0pXSkKKworbTRfZm9yKFtBVF9KVF9sZXhlcl0sIDAsIDEsIDEsCisgIFttNF9mb3IoW0FUX0pUX2xleF90aHJvd3NdLCAtMSwgMiwgMSwKKyAgICBbbTRfZm9yKFtBVF9KVF90aHJvd3NdLCAtMSwgMiwgMSwKKyAgICAgIFttNF9pZihBVF9KVF9sZXhlciwgMCwKKwlbQVRfQ0hFQ0tfSkFWQV9NSU5JTUFMKFsKK0FUX0pUX3Rocm93c19kZWZpbmUKK0FUX0pUX2xleF90aHJvd3NfZGVmaW5lCitBVF9KVF9pbml0aWFsX2FjdGlvbl0sCitbQVRfSlRfcGFyc2VfYWN0aW9uXSldLAorCVtBVF9DSEVDS19KQVZBX01JTklNQUxfV19MRVhFUihbCitBVF9KVF90aHJvd3NfZGVmaW5lCitBVF9KVF9sZXhfdGhyb3dzX2RlZmluZQorQVRfSlRfaW5pdGlhbF9hY3Rpb25dLAorW0FUX0pUX3l5bGV4X3Rocm93c10sCitbQVRfSlRfeXlsZXhfYWN0aW9uXSwKK1tdLAorW0FUX0pUX3BhcnNlX2FjdGlvbl0pXSkKK0FUX0NIRUNLX0pBVkFfR1JFUChbWyAqaW50IHl5bGV4ICgpXUFUX0pUX3l5bGV4X3Rocm93cyAqWztdXSkKK0FUX0NIRUNLX0pBVkFfR1JFUChbWyAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKV1BVF9KVF95eWFjdGlvbl90aHJvd3NbICpdXSkKK0FUX0NIRUNLX0pBVkFfR1JFUChbWyAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCldQVRfSlRfcGFyc2VfdGhyb3dzWyAqXV0pCitdKV0pXSkKKworQVRfQ0xFQU5VUAorCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKyMgSmF2YSBzdHlwZSwgcG9zaXRpb25fY2xhc3MgYW5kIGxvY2F0aW9uX2NsYXNzICMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKworQVRfU0VUVVAoW0phdmEgc3R5cGUsIHBvc2l0aW9uX2NsYXNzIGFuZCBsb2NhdGlvbl9jbGFzc10pCisKK0FUX0NIRUNLX0pBVkFfTUlOSU1BTChbWworJWRlZmluZSBzdHlwZSAiamF2YS5hd3QuQ29sb3IiCisldHlwZTxqYXZhLmF3dC5Db2xvcj4gc3RhcnQ7CislZGVmaW5lIGFwaS5sb2NhdGlvbi50eXBlICJNeUxvYyIKKyVkZWZpbmUgYXBpLnBvc2l0aW9uLnR5cGUgIk15UG9zIgorJWNvZGUgeyBjbGFzcyBNeVBvcyB7fSB9XV0sIFtbJCQgPSAkPGphdmEuYXd0LkNvbG9yPjE7XV0sIFtbTXlQb3NdXSkKK0FUX0NIRUNLKFtbZ3JlcCAnamF2YS5hd3QuQ29sb3InIFlZUGFyc2VyLmphdmFdXSwgWzBdLCBbaWdub3JlXSkKK0FUX0NIRUNLKFtbJEVHUkVQIC12ICcgKi8/XConIFlZUGFyc2VyLmphdmEgfCBncmVwICdQb3NpdGlvbiddXSwgWzFdLCBbaWdub3JlXSkKK0FUX0NIRUNLKFtbJEVHUkVQIC12ICcgKi8/XConIFlZUGFyc2VyLmphdmEgfCBncmVwICdMb2NhdGlvbiddXSwgWzFdLCBbaWdub3JlXSkKKworQVRfQ0hFQ0tfSkFWQV9NSU5JTUFMX1dfTEVYRVIoW1sKKyVkZWZpbmUgc3R5cGUgImphdmEuYXd0LkNvbG9yIgorJXR5cGU8amF2YS5hd3QuQ29sb3I+IHN0YXJ0OworJWRlZmluZSBhcGkubG9jYXRpb24udHlwZSAiTXlMb2MiCislZGVmaW5lIGFwaS5wb3NpdGlvbi50eXBlICJNeVBvcyIKKyVjb2RlIHsgY2xhc3MgTXlQb3Mge30gfV1dLCBbXSwgW1tyZXR1cm4gRU9GO11dLCBbXSwKK1tbJCQgPSAkPGphdmEuYXd0LkNvbG9yPjE7XV0sCitbW2phdmEuYXd0LkNvbG9yXV0sIFtbTXlQb3NdXSwgW1tNeUxvY11dKQorQVRfQ0hFQ0soW1tncmVwICdqYXZhLmF3dC5Db2xvcicgWVlQYXJzZXIuamF2YV1dLCBbMF0sIFtpZ25vcmVdKQorQVRfQ0hFQ0soW1skRUdSRVAgLXYgJyAqLz9cKicgWVlQYXJzZXIuamF2YSB8IGdyZXAgJ1Bvc2l0aW9uJ11dLCBbMV0sIFtpZ25vcmVdKQorQVRfQ0hFQ0soW1skRUdSRVAgLXYgJyAqLz9cKicgWVlQYXJzZXIuamF2YSB8IGdyZXAgJ0xvY2F0aW9uJ11dLCBbMV0sIFtpZ25vcmVdKQorCitBVF9DTEVBTlVQCisKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisjIEphdmEgc3ludGF4IGVycm9yIGhhbmRsaW5nIHdpdGhvdXQgZXJyb3IgdG9rZW4uICMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworCitBVF9TRVRVUChbSmF2YSBzeW50YXggZXJyb3IgaGFuZGxpbmcgd2l0aG91dCBlcnJvciB0b2tlbl0pCisKK0FUX0RBVEEoW1tZWVBhcnNlci55XV0sIFtbJWxhbmd1YWdlICJKYXZhIgorCislbGV4LXBhcmFtIHsgU3RyaW5nIHMgfQorCislY29kZSBpbXBvcnRzIHsKKyAgaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Cit9CisKKyVjb2RlIGxleGVyIHsKKyAgU3RyaW5nIElucHV0OworICBpbnQgUG9zaXRpb247CisKKyAgcHVibGljIFlZTGV4ZXIgKFN0cmluZyBzKQorICB7CisgICAgSW5wdXQgICAgPSBzOworICAgIFBvc2l0aW9uID0gMDsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHl5ZXJyb3IgKFN0cmluZyBzKQorICB7CisgICAgU3lzdGVtLmVyci5wcmludGxuIChzKTsKKyAgfQorCisgIHB1YmxpYyBPYmplY3QgZ2V0TFZhbCAoKQorICB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgaW50IHl5bGV4ICgpIHRocm93cyBJT0V4Y2VwdGlvbgorICB7CisgICAgaWYgKFBvc2l0aW9uID49IElucHV0Lmxlbmd0aCAoKSkKKyAgICAgIHJldHVybiBFT0Y7CisgICAgZWxzZQorICAgICAgcmV0dXJuIElucHV0LmNoYXJBdCAoUG9zaXRpb24rKyk7CisgIH0KK30KKworJWNvZGUgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nIGFyZ3MgW10pIHRocm93cyBJT0V4Y2VwdGlvbgorICB7CisgICAgWVlQYXJzZXIgcCA9IG5ldyBZWVBhcnNlciAoYXJncyBbMF0pOworICAgIHAucGFyc2UgKCk7CisgIH0KK30KKyUlCitpbnB1dDoKKyAgJ2EnICdhJworOworXV0pCitBVF9CSVNPTl9DSEVDSyhbW1lZUGFyc2VyLnldXSkKK0FUX0pBVkFfQ09NUElMRShbW1lZUGFyc2VyLmphdmFdXSkKK0FUX0pBVkFfUEFSU0VSX0NIRUNLKFtbWVlQYXJzZXIgYWFdXSwgW1swXV0sIFtbXV0sIFtbXV0pCitBVF9KQVZBX1BBUlNFUl9DSEVDSyhbW1lZUGFyc2VyIGFiXV0sIFtbMF1dLCBbW11dLCBbW3N5bnRheCBlcnJvcgorXV0pCitBVF9KQVZBX1BBUlNFUl9DSEVDSyhbW1lZUGFyc2VyIGJhXV0sIFtbMF1dLCBbW11dLCBbW3N5bnRheCBlcnJvcgorXV0pCisKK0FUX0NMRUFOVVAKZGlmZiAtLWdpdCBhL3Rlc3RzL2xvY2FsLmF0IGIvdGVzdHMvbG9jYWwuYXQKaW5kZXggNTViYTgyNC4uNjhhN2VjYSAxMDA2NDQKLS0tIGEvdGVzdHMvbG9jYWwuYXQKKysrIGIvdGVzdHMvbG9jYWwuYXQKQEAgLTEsMzYgKzEsMTA4IEBACiAjIFByb2Nlc3MgdGhpcyAtKi0gQXV0b3Rlc3QgLSotIGZpbGUgd2l0aCBhdXRvbTR0ZS4KIAogIyBNYWNyb3MgZm9yIHRoZSBHTlUgQmlzb24gVGVzdCBzdWl0ZS4KLSMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIENvcHlyaWdodCAoQykgMjAwMy0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSMgYW55IGxhdGVyIHZlcnNpb24uCi0KKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKICMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQorIwogIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0jIDAyMTEwLTEzMDEsIFVTQS4KKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAKLSMgV2Ugd2FudCBhIHJlY2VudCBBdXRvdGVzdC4KIG00X3ZlcnNpb25fcHJlcmVxKFsyLjU4XSkKIAogCisjIG00X251bGxfaWYoVkFMLCBJRi1UUlVFLCBJRi1GQUxTRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJZiBWQUwgZXZhbHVhdGVzIHRvIGVtcHR5IG9yIDAsIHJ1biBJRi1UUlVFLCBvdGhlcndpc2UgSUYtRkFMU0UuCittNF9kZWZpbmUoW200X251bGxfaWZdLAorW200X2Nhc2UobTRfcXVvdGUoJDEpLAorICAgICAgICAgWzBdLCBbJDJdLAorICAgICAgICAgW10sICBbJDJdLAorICAgICAgICAgWyQzXSldKQorCisjIyAtLS0tLS0tLS0tLS0tICMjCisjIyBCYXNpYyB0ZXN0cy4gICMjCisjIyAtLS0tLS0tLS0tLS0tICMjCisKKyMgQVRfTUFUQ0hFU19DSEVDSyhGSUxFLCBQRVJMLVJFR0VYUCwgQ09VTlQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeHBlY3QgQ09VTlQgbWF0Y2hlcyBvZiB0aGUgUEVSTC1SRUdFWFAgaW4gRklMRS4gIFRoZSBmaWxlIGlzCisjIHRha2VuIGluICJzbHVycCIgbW9kZSwgaS5lLiwgb25lIGNhbiBtYXRjaCBlbmQtb2YtbGluZXMuCittNF9kZWZpbmUoW0FUX01BVENIRVNfQ0hFQ0tdLAorW0FUX0NIRUNLKFskUEVSTCAtMDc3NyAtbmUgJworbXkgJGNvdW50ID0gMDsKK3N7JDJ9eyArKyRjb3VudDsgIiIgfWdlbTsKK3ByaW50ZiAiJGNvdW50XG4iOycgJDFdLCBbMF0sIFskMworXSldKQorCisKKyMgQVRfU0FWRV9TUEVDSUFMX0ZJTEVTIC8gQVRfUkVTVE9SRV9TUEVDSUFMX0ZJTEVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEb24ndCBpbnRlcmZlcmUgd2l0aCBjYWxsZXIncyBmaWxlcy4KK200X2RpdmVydF90ZXh0KFtQUkVQQVJFX1RFU1RTXSwKK1thdF9zYXZlX3NwZWNpYWxfZmlsZXMgKCkKK3sKKyAgZm9yIGF0X3NhdmVfZmlsZSBpbiBzdGRlcnIgZXhwZXJyIGV4cG91dAorICBkbworICAgIHRlc3QgISAtZiBhdC1iaXNvbi1jaGVjay0kYXRfc2F2ZV9maWxlLmJhayB8fAorICAgICAgYXNfZm5fZXJyb3IgMSAiZmF0YWwgZXJyb3I6IGJhY2stdXAgb24gdG9wIG9mIGEgYmFjay11cCIKKyAgICB0ZXN0ICEgLWYgJGF0X3NhdmVfZmlsZSB8fCBtdiAkYXRfc2F2ZV9maWxlIGF0LWJpc29uLWNoZWNrLSRhdF9zYXZlX2ZpbGUuYmFrCisgIGRvbmUKK30KKworYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzICgpCit7CisgIGZvciBhdF9zYXZlX2ZpbGUgaW4gc3RkZXJyIGV4cGVyciBleHBvdXQKKyAgZG8KKyAgICB0ZXN0ICEgLWYgYXQtYmlzb24tY2hlY2stJGF0X3NhdmVfZmlsZS5iYWsgfHwKKyAgICAgIG12IGF0LWJpc29uLWNoZWNrLSRhdF9zYXZlX2ZpbGUuYmFrICRhdF9zYXZlX2ZpbGUKKyAgZG9uZQorfQorXSkKKworbTRfZGVmaW5lKFtBVF9TQVZFX1NQRUNJQUxfRklMRVNdLCAgICBbYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzXSkKK200X2RlZmluZShbQVRfUkVTVE9SRV9TUEVDSUFMX0ZJTEVTXSwgW2F0X3Jlc3RvcmVfc3BlY2lhbF9maWxlc10pCisKKworCiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAjIyBNYWNyb3MgZGVjb2RpbmcgQmlzb24gb3B0aW9ucy4gICMjCiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAKKyMgQVRfTE9DX1BVU0hERUYoRklSU1QtTElORSwgRklSU1QtQ09MVU1OLCBMQVNULUxJTkUsIExBU1QtQ09MVU1OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFB1c2hkZWYgQVRfTE9DXyhGSVJTVHxMQVNUKV8oTElORXxDT0xVTU4pLgorbTRfZGVmaW5lKFtBVF9MT0NfUFVTSERFRl0sCitbbTRfcHVzaGRlZihbQVRfTE9DX0ZJUlNUX0xJTkVdLCAgW0FUX0xPQy4kMV0pCittNF9wdXNoZGVmKFtBVF9MT0NfRklSU1RfQ09MVU1OXSwgW0FUX0xPQy4kMl0pCittNF9wdXNoZGVmKFtBVF9MT0NfTEFTVF9MSU5FXSwgICAgW0FUX0xPQy4kM10pCittNF9wdXNoZGVmKFtBVF9MT0NfTEFTVF9DT0xVTU5dLCAgW0FUX0xPQy4kNF0pXSkKKworIyBBVF9MT0NfUE9QREVGCisjIC0tLS0tLS0tLS0tLS0KKyMgUG9wZGVmIEFUX0xPQ18oRklSU1R8TEFTVClfKExJTkV8Q09MKS4KK200X2RlZmluZShbQVRfTE9DX1BPUERFRl0sCitbbTRfcG9wZGVmKFtBVF9MT0NfRklSU1RfTElORV0pCittNF9wb3BkZWYoW0FUX0xPQ19GSVJTVF9DT0xVTU5dKQorbTRfcG9wZGVmKFtBVF9MT0NfTEFTVF9MSU5FXSkKK200X3BvcGRlZihbQVRfTE9DX0xBU1RfQ09MVU1OXSldKQorCisKIAogIyBBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMoW0JJU09OLU9QVElPTlNdKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogbTRfZGVmaW5lKFtBVF9CSVNPTl9PUFRJT05fUFVTSERFRlNdLAotW19BVF9CSVNPTl9PUFRJT05fUFVTSERFRlMoJFsxXSwgJFsyXSwgWyQxXSldKQorW200X2RpdmVydF90ZXh0KFtLSUxMXSwKKyAgICAgICAgICAgICAgICBbX0FUX0JJU09OX09QVElPTl9QVVNIREVGUygkWzFdLCAkWzJdLCBbJDFdKV0pXSkKIAogCiAjIF9BVF9CSVNPTl9PUFRJT05fUFVTSERFRlMoJDEsICQyLCBbQklTT04tT1BUSU9OU10pCkBAIC00MSw5OCArMTEzLDE1OSBAQAogbTRfZGVmaW5lKFtfQVRfQklTT05fT1BUSU9OX1BVU0hERUZTXSwKIFttNF9pZihbJDEkMl0sICRbMV0kWzJdLCBbXSwKICAgICAgICBbbTRfZmF0YWwoWyQwOiBJbnZhbGlkIGFyZ3VtZW50czogJEBdKV0pZG5sCi1tNF9wdXNoZGVmKFtBVF9MQUxSMV9DQ19JRl0sCi1bbTRfYm1hdGNoKFskM10sIFsibGFscjEuY2MiXSwgWyQxXSwgWyQyXSldKQotbTRfcHVzaGRlZihbQVRfR0xSX0NDX0lGXSwKLVttNF9ibWF0Y2goWyQzXSwgWyJnbHIuY2MiXSwgWyQxXSwgWyQyXSldKQorbTRfcHVzaGRlZihbQVRfREVGSU5FU19JRl0sCitbbTRfYm1hdGNoKFskM10sIFslZGVmaW5lc10sIFskMV0sIFskMl0pXSkKIG00X3B1c2hkZWYoW0FUX1NLRUxfQ0NfSUZdLAotW200X2JtYXRjaChbJDNdLCBbIlwoZ2xyXHxsYWxyMVwpLmNjIl0sIFskMV0sIFskMl0pXSkKK1ttNF9ibWF0Y2goWyQzXSwgWyVsYW5ndWFnZSAiW0NjXVwrXCsiXHwlc2tlbGV0b24gIlthLXowLTldK1wuY2MiXSwgWyQxXSwgWyQyXSldKQorbTRfcHVzaGRlZihbQVRfU0tFTF9KQVZBX0lGXSwKK1ttNF9ibWF0Y2goWyQzXSwgWyVsYW5ndWFnZSAiW0pqXVtBYV1bVnZdW0FhXSJcfCVza2VsZXRvbiAiW2EtejAtOV0rXC5qYXZhIl0sIFskMV0sIFskMl0pXSkKKyMgVGhlIHRhcmdldCBsYW5ndWFnZTogImMiLCAiYysrIiwgb3IgImphdmEiLgorbTRfcHVzaGRlZihbQVRfTEFOR10sCitbQVRfU0tFTF9KQVZBX0lGKFtqYXZhXSwKKyAgICAgICAgICAgICAgICAgW0FUX1NLRUxfQ0NfSUYoW2MrK10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjXSldKV0pCiBtNF9wdXNoZGVmKFtBVF9HTFJfSUZdLAotW200X2JtYXRjaChbJDNdLCBbJWdsci1wYXJzZXJdLCBbJDFdLCBbJDJdKV0pCitbbTRfYm1hdGNoKFskM10sIFslZ2xyLXBhcnNlclx8JXNrZWxldG9uICJnbHJcLi4qIl0sIFskMV0sIFskMl0pXSkKK200X3B1c2hkZWYoW0FUX0xBTFIxX0NDX0lGXSwKK1tBVF9TS0VMX0NDX0lGKFtBVF9HTFJfSUYoWyQyXSwgWyQxXSldLCBbJDJdKV0pCittNF9wdXNoZGVmKFtBVF9HTFJfQ0NfSUZdLAorW0FUX1NLRUxfQ0NfSUYoW0FUX0dMUl9JRihbJDFdLCBbJDJdKV0sIFskMl0pXSkKICMgVXNpbmcgeWFjYy5jPwogbTRfcHVzaGRlZihbQVRfWUFDQ19JRl0sCi1bbTRfYm1hdGNoKFskM10sIFslZ2xyLXBhcnNlclx8JXNrZWxldG9uXSwgWyQyXSwgWyQxXSldKQotbTRfcHVzaGRlZihbQVRfUEFSQU1fSUZdLAotW200X2JtYXRjaChbJDNdLCBbJXBhcnNlLXBhcmFtXSwgWyQxXSwgWyQyXSldKQorW200X2JtYXRjaChbJDNdLCBbJWxhbmd1YWdlXHwlZ2xyLXBhcnNlclx8JXNrZWxldG9uXSwgWyQyXSwgWyQxXSldKQorbTRfcHVzaGRlZihbQVRfTEVYUEFSQU1fSUZdLAorW200X2JtYXRjaChbJDNdLCBbJWxleC1wYXJhbV0sIFskMV0sIFskMl0pXSkKIG00X3B1c2hkZWYoW0FUX0xPQ0FUSU9OX0lGXSwKIFttNF9ibWF0Y2goWyQzXSwgWyVsb2NhdGlvbnNdLCBbJDFdLCBbJDJdKV0pCi1tNF9wdXNoZGVmKFtBVF9QVVJFX0lGXSwKLVttNF9ibWF0Y2goWyQzXSwgWyVwdXJlLXBhcnNlcl0sIFskMV0sIFskMl0pXSkKLW00X3B1c2hkZWYoW0FUX1BVUkVfQU5EX0xPQ19JRl0sCi1bbTRfYm1hdGNoKFskM10sIFslbG9jYXRpb25zLiolcHVyZS1wYXJzZXJcfCVwdXJlLXBhcnNlci4qJWxvY2F0aW9uc10sCi0JICAgWyQxXSwgWyQyXSldKQotbTRfcHVzaGRlZihbQVRfR0xSX09SX1BBUkFNX0lGXSwKLVttNF9ibWF0Y2goWyQzXSwgWyVnbHItcGFyc2VyXHwlcGFyc2UtcGFyYW1dLCBbJDFdLCBbJDJdKV0pCi1tNF9wdXNoZGVmKFtBVF9OQU1FX1BSRUZJWF0sCi1bbTRfYm1hdGNoKFskM10sIFslbmFtZS1wcmVmaXg9Ii4qIl0sIAotICAgICAgICAgICBbbTRfYnJlZ2V4cChbJDNdLCBbbmFtZS1wcmVmaXg9IlwoW14iXSpcKSJdLCBbXDFdKV0sCi0gICAgICAgICAgIFt5eV0pXSkKLSMgeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWYgJWxvY2F0aW9uICYgJXB1cmUgJiAoJWdsciBvciAlcGFyc2UtcGFyYW0pLgotbTRfcHVzaGRlZihbQVRfWVlFUlJPUl9BUkdfTE9DX0lGXSwKLVtBVF9HTFJfT1JfUEFSQU1fSUYoW0FUX1BVUkVfQU5EX0xPQ19JRihbJDFdLCBbJDJdKV0sCi0JCSAgICBbJDJdKV0pCi0jIHl5ZXJyb3IgYWx3YXlzIHNlZXMgdGhlIGxvY2F0aW9ucyAod2hlbiBhY3RpdmF0ZWQpLCBleGNlcHQgaWYKLSMgeWFjYyAmIHB1cmUgJiAhcGFyYW0uCi1tNF9wdXNoZGVmKFtBVF9ZWUVSUk9SX1NFRVNfTE9DX0lGXSwKLVtBVF9MT0NBVElPTl9JRihbQVRfWUFDQ19JRihbQVRfUFVSRV9JRihbQVRfUEFSQU1fSUYoWyQxXSwgWyQyXSldLAotCQkJCQlbJDFdKV0sCi0JCQkgICAgWyQxXSldLAotCQlbJDJdKV0pCittNF9wdXNoZGVmKFtBVF9MT0NBVElPTl9UWVBFX0lGXSwKK1ttNF9ibWF0Y2goWyQzXSwgWyVkZWZpbmUgXChhcGlcLmxvY2F0aW9uXC50eXBlXHxsb2NhdGlvbl90eXBlXCldLCBbJDFdLCBbJDJdKV0pCittNF9wdXNoZGVmKFtBVF9QQVJBTV9JRl0sCitbbTRfYm1hdGNoKFskM10sIFslcGFyc2UtcGFyYW1dLCBbJDFdLCBbJDJdKV0pCisjIENvbW1hLXRlcm1pbmF0ZWQgbGlzdCBvZiBmb3JtYWxzIHBhcnNlLXBhcmFtZXRlcnMuCisjIEUuZy4sICVwYXJzZS1wYXJhbSB7IGludCB4IH0ge2ludCB5fSAtPiAiaW50IHgsIGludCB5LCAiLgorbTRfcHVzaGRlZihbQVRfUEFSU0VfUEFSQU1TXSkKK200X2JwYXRzdWJzdChbJDNdLCBbJXBhcnNlLXBhcmFtIHsgKlwoW157fV0qW157fSBdXCkgKn1dLAorICAgICAgICAgICAgIFttNF9hcHBlbmQoW0FUX1BBUlNFX1BBUkFNU10sIFtcMSwgXSldKQogCi0jIFRoZSBpbnRlcmZhY2UgaXMgcHVyZTogZWl0aGVyIGJlY2F1c2UgJXB1cmUtcGFyc2VyLCBvciBiZWNhdXNlIHdlCittNF9wdXNoZGVmKFtBVF9QVVJFX0lGXSwKK1ttNF9ibWF0Y2goWyQzXSwgWyVkZWZpbmUgICphcGlcLnB1cmVcfCVwdXJlLXBhcnNlcl0sCisgICAgICAgICAgIFttNF9ibWF0Y2goWyQzXSwgWyVkZWZpbmUgICphcGlcLnB1cmUgKiI/ZmFsc2UiP10sIFskMl0sIFskMV0pXSwKKyAgICAgICAgICAgWyQyXSldKQorbTRfcHVzaGRlZihbQVRfTkFNRV9QUkVGSVhdLAorW200X2JtYXRjaChbJDNdLCBbXCglZGVmaW5lIGFwaVwucHJlZml4XHwlbmFtZS1wcmVmaXhcKSAiLioiXSwKKyAgICAgICAgICAgW200X2JyZWdleHAoWyQzXSwgW1woJWRlZmluZSBhcGlcLnByZWZpeFx8JW5hbWUtcHJlZml4XCkgIlwoW14iIl0qXCkiXSwgW1wyXSldLAorICAgICAgICAgICBbeXldKV0pCittNF9wdXNoZGVmKFtBVF9BUElfcHJlZml4XSwKK1ttNF9ibWF0Y2goWyQzXSwgWyVkZWZpbmUgYXBpXC5wcmVmaXggIi4qIl0sCisgICAgICAgICAgIFttNF9icmVnZXhwKFskM10sIFslZGVmaW5lIGFwaVwucHJlZml4ICJcKFteIiJdKlwpIl0sIFtcMV0pXSwKKyAgICAgICAgICAgW3l5XSldKQorbTRfcHVzaGRlZihbQVRfQVBJX1BSRUZJWF0sCitbbTRfdG91cHBlcihBVF9BUElfcHJlZml4KV0pCisjIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmICVsb2NhdGlvbiwgYW5kIGlmIHRoZSBwYXJzZXIgaXMgcHVyZS4gRm9yCisjIGhpc3RvcmljYWwgcmVhc29ucywgd2l0aCB0aGUgInlhY2MuYyIgc2tlbGV0b24sIHRoZSBsb2NhdGlvbiBpcyBub3QgcGFzc2VkCisjIHVubGVzcyBhbiBhZGRpdGlvbmFsICIlcGFyc2UtcGFyYW0iIGlzIHByZXNlbnQsIG9yIGlmIHRoZSBwdXJpdHkgaXMgZGVmaW5lZAorIyBhcyAiZnVsbCIuCittNF9wdXNoZGVmKFtBVF9ZWUVSUk9SX0FSR19MT0NfSUZdLAorW0FUX0xPQ0FUSU9OX0lGKFtBVF9QVVJFX0lGKFttNF9ibWF0Y2goWyQzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG00X3F1b3RlKG00X2pvaW4oW1x8XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyVkZWZpbmUgYXBpLnB1cmUgIj9mdWxsIj9dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJWdsci1wYXJzZXJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJXBhcnNlLXBhcmFtXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyVza2VsZXRvbiAiP2dsci5jIj9dKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJDFdLCBbJDJdKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyQyXSldLAorICAgICAgICAgICAgICAgIFskMl0pXSkKKworIyB5eWVycm9yIGFsd2F5cyBzZWVzIHRoZSBsb2NhdGlvbnMgKHdoZW4gYWN0aXZhdGVkKSBpZiB0aGUgcGFyc2VyIGlzIGltcHVyZS4KKyMgV2hlbiB0aGUgcGFyc2VyIGlzIHB1cmUsIHl5ZXJyb3Igc2VlcyB0aGUgbG9jYXRpb24gaWYgaXQgaXMgcmVjZWl2ZWQgYXMgYW4KKyMgYXJndW1lbnQuCittNF9wdXNoZGVmKFtBVF9ZWUVSUk9SX1NFRVNfTE9DX0lGXSwKK1tBVF9MT0NBVElPTl9JRihbQVRfWUFDQ19JRihbQVRfUFVSRV9JRihbQVRfWVlFUlJPUl9BUkdfTE9DX0lGKFskMV0sIFskMl0pXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJDFdKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyQxXSldLAorICAgICAgICAgICAgICAgIFskMl0pXSkKKworIyBUaGUgaW50ZXJmYWNlIGlzIHB1cmU6IGVpdGhlciBiZWNhdXNlICVkZWZpbmUgYXBpLnB1cmUsIG9yIGJlY2F1c2Ugd2UKICMgYXJlIHVzaW5nIHRoZSBDKysgcGFyc2Vycy4KIG00X3B1c2hkZWYoW0FUX1BVUkVfTEVYX0lGXSwKIFtBVF9QVVJFX0lGKFskMV0sCiAJICAgIFtBVF9TS0VMX0NDX0lGKFskMV0sIFskMl0pXSldKQogCittNF9wdXNoZGVmKFtBVF9ZWVNUWVBFXSwKK1tBVF9TS0VMX0NDX0lGKFtBVF9OQU1FX1BSRUZJWFs6OnBhcnNlcjo6c2VtYW50aWNfdHlwZV1dLAorICAgICAgICAgICAgICAgW0FUX0FQSV9QUkVGSVhbU1RZUEVdXSldKQorbTRfcHVzaGRlZihbQVRfWVlMVFlQRV0sCitbQVRfU0tFTF9DQ19JRihbQVRfTkFNRV9QUkVGSVhbOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGVdXSwKKyAgICAgICAgICAgICAgIFtBVF9BUElfUFJFRklYW0xUWVBFXV0pXSkKKworCiBBVF9QVVJFX0xFWF9JRigKIFttNF9wdXNoZGVmKFtBVF9MT0NdLCBbKCpsbG9jcCldKQogIG00X3B1c2hkZWYoW0FUX1ZBTF0sIFsoKmx2YWxwKV0pCi0gbTRfcHVzaGRlZihbQVRfTEVYX0ZPUk1BTFNdLAotCSAgICBbWVlTVFlQRSAqbHZhbHBbXUFUX0xPQ0FUSU9OX0lGKFssIFlZTFRZUEUgKmxsb2NwXSldKQotIG00X3B1c2hkZWYoW0FUX0xFWF9BUkdTXSwKKyBtNF9wdXNoZGVmKFtBVF9ZWUxFWF9GT1JNQUxTXSwKKwkgICAgW0FUX1lZU1RZUEUgKmx2YWxwW11BVF9MT0NBVElPTl9JRihbLCBBVF9ZWUxUWVBFICpsbG9jcF0pXSkKKyBtNF9wdXNoZGVmKFtBVF9ZWUxFWF9BUkdTXSwKIAkgICAgW2x2YWxwW11BVF9MT0NBVElPTl9JRihbLCBsbG9jcF0pXSkKICBtNF9wdXNoZGVmKFtBVF9VU0VfTEVYX0FSR1NdLAogCSAgICBbKHZvaWQpIGx2YWxwO0FUX0xPQ0FUSU9OX0lGKFsodm9pZCkgbGxvY3BdKV0pCi0gbTRfcHVzaGRlZihbQVRfTEVYX1BSRV9GT1JNQUxTXSwKLQkgICAgW0FUX0xFWF9GT1JNQUxTLCBdKQotIG00X3B1c2hkZWYoW0FUX0xFWF9QUkVfQVJHU10sCi0JICAgIFtBVF9MRVhfQVJHUywgXSkKKyBtNF9wdXNoZGVmKFtBVF9ZWUxFWF9QUkVfRk9STUFMU10sCisJICAgIFtBVF9ZWUxFWF9GT1JNQUxTLCBdKQorIG00X3B1c2hkZWYoW0FUX1lZTEVYX1BSRV9BUkdTXSwKKwkgICAgW0FUX1lZTEVYX0FSR1MsIF0pCiBdLAotW200X3B1c2hkZWYoW0FUX0xPQ10sIFsoeXlsbG9jKV0pCi0gbTRfcHVzaGRlZihbQVRfVkFMXSwgWyh5eWx2YWwpXSkKLSBtNF9wdXNoZGVmKFtBVF9MRVhfRk9STUFMU10sICAgICBbdm9pZF0pCi0gbTRfcHVzaGRlZihbQVRfTEVYX0FSR1NdLCAgICAgICAgW10pCitbbTRfcHVzaGRlZihbQVRfTE9DXSwgW1soXUFUX05BTUVfUFJFRklYW2xsb2MpXV0pCisgbTRfcHVzaGRlZihbQVRfVkFMXSwgW1soXUFUX05BTUVfUFJFRklYW2x2YWwpXV0pCisgbTRfcHVzaGRlZihbQVRfWVlMRVhfRk9STUFMU10sICAgICBbdm9pZF0pCisgbTRfcHVzaGRlZihbQVRfWVlMRVhfQVJHU10sICAgICAgICBbXSkKICBtNF9wdXNoZGVmKFtBVF9VU0VfTEVYX0FSR1NdLCAgICBbXSkKLSBtNF9wdXNoZGVmKFtBVF9MRVhfUFJFX0ZPUk1BTFNdLCBbXSkKLSBtNF9wdXNoZGVmKFtBVF9MRVhfUFJFX0FSR1NdLCAgICBbXSkKKyBtNF9wdXNoZGVmKFtBVF9ZWUxFWF9QUkVfRk9STUFMU10sIFtdKQorIG00X3B1c2hkZWYoW0FUX1lZTEVYX1BSRV9BUkdTXSwgICAgW10pCiBdKQorCisjIEhhbmRsZSB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIGxvY2F0aW9uIGNvbXBvbmVudHMuCisKK0FUX1NLRUxfQ0NfSUYoCisgIFtBVF9MT0NBVElPTl9UWVBFX0lGKAorICAgIFtBVF9MT0NfUFVTSERFRihbZmlyc3QubF0sIFtmaXJzdC5jXSwgW2xhc3QubF0sIFtsYXN0LmNdKV0sCisgICAgW0FUX0xPQ19QVVNIREVGKFtiZWdpbi5saW5lXSwgW2JlZ2luLmNvbHVtbl0sIFtlbmQubGluZV0sIFtlbmQuY29sdW1uXSldKV0sCisgIFtBVF9MT0NfUFVTSERFRihbZmlyc3RfbGluZV0sIFtmaXJzdF9jb2x1bW5dLCBbbGFzdF9saW5lXSwgW2xhc3RfY29sdW1uXSldKQorCiBdKSMgX0FUX0JJU09OX09QVElPTl9QVVNIREVGUwogCiAKICMgQVRfQklTT05fT1BUSU9OX1BPUERFRlMKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIG00X2RlZmluZShbQVRfQklTT05fT1BUSU9OX1BPUERFRlNdLAotW200X3BvcGRlZihbQVRfTEVYX1BSRV9BUkdTXSkKLW00X3BvcGRlZihbQVRfTEVYX1BSRV9GT1JNQUxTXSkKK1ttNF9kaXZlcnRfdGV4dChbS0lMTF0sCitbbTRfcG9wZGVmKFtBVF9ZWUxFWF9QUkVfQVJHU10pCittNF9wb3BkZWYoW0FUX1lZTEVYX1BSRV9GT1JNQUxTXSkKIG00X3BvcGRlZihbQVRfVVNFX0xFWF9BUkdTXSkKLW00X3BvcGRlZihbQVRfTEVYX0FSR1NdKQotbTRfcG9wZGVmKFtBVF9MRVhfRk9STUFMU10pCittNF9wb3BkZWYoW0FUX1lZTEVYX0FSR1NdKQorbTRfcG9wZGVmKFtBVF9ZWUxFWF9GT1JNQUxTXSkKK200X3BvcGRlZihbQVRfWVlMVFlQRV0pCittNF9wb3BkZWYoW0FUX1lZU1RZUEVdKQogbTRfcG9wZGVmKFtBVF9WQUxdKQogbTRfcG9wZGVmKFtBVF9MT0NdKQogbTRfcG9wZGVmKFtBVF9QVVJFX0xFWF9JRl0pCiBtNF9wb3BkZWYoW0FUX1lZRVJST1JfU0VFU19MT0NfSUZdKQogbTRfcG9wZGVmKFtBVF9ZWUVSUk9SX0FSR19MT0NfSUZdKQorbTRfcG9wZGVmKFtBVF9BUElfUFJFRklYXSkKK200X3BvcGRlZihbQVRfQVBJX3ByZWZpeF0pCiBtNF9wb3BkZWYoW0FUX05BTUVfUFJFRklYXSkKLW00X3BvcGRlZihbQVRfR0xSX09SX1BBUkFNX0lGXSkKLW00X3BvcGRlZihbQVRfUFVSRV9BTkRfTE9DX0lGXSkKK200X3BvcGRlZihbQVRfTE9DQVRJT05fVFlQRV9JRl0pCiBtNF9wb3BkZWYoW0FUX0xPQ0FUSU9OX0lGXSkKK200X3BvcGRlZihbQVRfUEFSU0VfUEFSQU1TXSkKIG00X3BvcGRlZihbQVRfUEFSQU1fSUZdKQorbTRfcG9wZGVmKFtBVF9MRVhQQVJBTV9JRl0pCiBtNF9wb3BkZWYoW0FUX1lBQ0NfSUZdKQogbTRfcG9wZGVmKFtBVF9HTFJfSUZdKQogbTRfcG9wZGVmKFtBVF9TS0VMX0NDX0lGXSkKK200X3BvcGRlZihbQVRfTEFOR10pCittNF9wb3BkZWYoW0FUX1NLRUxfSkFWQV9JRl0pCiBtNF9wb3BkZWYoW0FUX0dMUl9DQ19JRl0pCiBtNF9wb3BkZWYoW0FUX0xBTFIxX0NDX0lGXSkKK200X3BvcGRlZihbQVRfREVGSU5FU19JRl0pCitBVF9MT0NfUE9QREVGXSlkbmwKIF0pIyBBVF9CSVNPTl9PUFRJT05fUE9QREVGUwogCiAKQEAgLTE0MSwyMyArMjc0LDM3IEBACiAjIyBHZW5lcmF0aW5nIEdyYW1tYXIgRmlsZXMuICAjIwogIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKIAorIyBBVF9EQVRBX1NPVVJDRV9QUk9MT0dVRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhlIHByb2xvZ3VlIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIGFueSBzb3VyY2UgY29kZSB0aGF0IGlzCisjIG1lYW50IHRvIGJlIGNvbXBpbGVkLgorbTRfZGVmaW5lKFtBVF9EQVRBX1NPVVJDRV9QUk9MT0dVRV0sCitbWyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK11dKQogCiAjIEFUX0RBVEFfR1JBTU1BUl9QUk9MT0dVRQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgVGhlIHByb2xvZ3VlIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIGFueSBncmFtbWFyIHdoaWNoIHBhcnNlciBpcwogIyBtZWFudCB0byBiZSBjb21waWxlZC4KIG00X2RlZmluZShbQVRfREFUQV9HUkFNTUFSX1BST0xPR1VFXSwKLVtbJXsKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotICAvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KLSMgdW5kZWYgbWFsbG9jCi0jIHVuZGVmIG1lbWNtcAotIyB1bmRlZiByZWFsbG9jCi0jZW5kaWYKLSV9XQotXSkKK1tbJWNvZGUgdG9wIHsKK11BVF9EQVRBX1NPVVJDRV9QUk9MT0dVRVtdZG5sCitbfQorXV0pCiAKKyMgQVRfREFUQV9TT1VSQ0UoTkFNRSwgQ09OVEVOVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgR2VuZXJhdGUgdGhlIGZpbGUgTkFNRSwgd2hpY2ggQ09OVEVOVCBpcyBwcmVjZWRlZCBieQorIyBBVF9EQVRBX1NPVVJDRV9QUk9MT0dVRS4KK200X2RlZmluZShbQVRfREFUQV9TT1VSQ0VdLAorW0FUX0RBVEEoWyQxXSwKK1tBVF9EQVRBX1NPVVJDRV9QUk9MT0dVRQorJDJdKQorXSkKIAogIyBBVF9EQVRBX0dSQU1NQVIoTkFNRSwgQ09OVEVOVCkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNjksNiArMzE2LDI3NiBAQAogJDJdKQogXSkKIAorIyBBVF9ZWUxFWF9QUk9UT1RZUEUKKyMgQVRfWVlMRVhfREVDTEFSRV9FWFRFUk4KKyMgQVRfWVlMRVhfREVDTEFSRQorIyBBVF9ZWUxFWF9ERUZJTkUoW0lOUFVUXSwgW0FDVElPTl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSU5QVVQgY2FuIGJlIGVtcHR5LCBvciBpbiBkb3VibGUgcXVvdGVzLCBvciBhIGxpc3QgKGluIGJyYWNlcykuCisjIEFDVElPTiBtYXkgY29tcHV0ZSB5eWx2YWwgZm9yIGluc3RhbmNlLCB1c2luZyAicmVzIiBhcyB0b2tlbiB0eXBlLAorIyBhbmQgInRva251bSIgYXMgdGhlIG51bWJlciBvZiBjYWxscyB0byB5eWxleCAoc3RhcnRpbmcgYXQgMCkuCittNF9kZWZpbmUoW0FUX1lZTEVYX1BST1RPVFlQRV0sCitbaW50IEFUX05BTUVfUFJFRklYW11sZXggKF1BVF9ZWUxFWF9GT1JNQUxTWylbXWRubAorXSkKKworbTRfZGVmaW5lKFtBVF9ZWUxFWF9ERUNMQVJFX0VYVEVSTl0sCitbQVRfWVlMRVhfUFJPVE9UWVBFO2RubAorXSkKKworbTRfZGVmaW5lKFtBVF9ZWUxFWF9ERUNMQVJFXSwKK1tzdGF0aWMgQVRfWVlMRVhfREVDTEFSRV9FWFRFUk5bXWRubAorXSkKKworbTRfZGVmaW5lKFtBVF9ZWUxFWF9ERUZJTkVdLAorW1sjaW5jbHVkZSA8YXNzZXJ0Lmg+CitzdGF0aWMKK11BVF9ZWUxFWF9QUk9UT1RZUEVbCit7CisgIF1tNF9ibWF0Y2goWyQxXSwgW15cKCIuKiJcKT8kXSwKKyAgICAgICAgICAgICBbW3N0YXRpYyBjaGFyIGNvbnN0IGlucHV0W10gPSBdbTRfZGVmYXVsdChbJDFdLCBbIiJdKV0sCisgICAgICAgICAgICAgW1tzdGF0aWMgaW50IGNvbnN0IGlucHV0W10gPSBdJDFdKVs7CisgIHN0YXRpYyBzaXplX3QgdG9rbnVtID0gMDsKKyAgaW50IHJlczsKKyAgXUFUX1VTRV9MRVhfQVJHU1s7CisgIGFzc2VydCAodG9rbnVtIDwgc2l6ZW9mIGlucHV0IC8gc2l6ZW9mIGlucHV0WzBdKTsKKyAgcmVzID0gaW5wdXRbdG9rbnVtKytdOworICBdJDJbO11BVF9MT0NBVElPTl9JRihbWworICBdQVRfTE9DX0ZJUlNUX0xJTkVbID0gXUFUX0xPQ19MQVNUX0xJTkVbID0gMTsKKyAgXUFUX0xPQ19GSVJTVF9DT0xVTU5bID0gXUFUX0xPQ19MQVNUX0NPTFVNTlsgPSB0b2tudW07XV0pWworICByZXR1cm4gcmVzOworfV1kbmwKK10pCisKKyMgQVRfWVlFUlJPUl9GT1JNQUxTCisjIEFUX1lZRVJST1JfUFJPVE9UWVBFCisjIEFUX1lZRVJST1JfREVDTEFSRV9FWFRFUk4KKyMgQVRfWVlFUlJPUl9ERUNMQVJFCisjIEFUX1lZRVJST1JfREVGSU5FCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTXVzdCBiZSBjYWxsZWQgaW5zaWRlIGEgQVRfQklTT05fT1BUSU9OX1BVU0hERUZTL1BPUERFRlMgcGFpci4KK200X2RlZmluZShbQVRfWVlFUlJPUl9GT1JNQUxTXSwKK1ttNF9jYXNlKEFUX0xBTkcsCitbY10sIFtBVF9ZWUVSUk9SX0FSR19MT0NfSUYoW0FUX1lZTFRZUEUgY29uc3QgKiBjb25zdCBsbG9jcCwgXSlBVF9QQVJTRV9QQVJBTVMgW2NvbnN0IGNoYXIgKm1zZ11dKVtdZG5sCitdKQorCittNF9kZWZpbmUoW0FUX1lZRVJST1JfUFJPVE9UWVBFXSwKK1ttNF9jYXNlKEFUX0xBTkcsCitbY10sIFtbdm9pZCBdQVRfTkFNRV9QUkVGSVhbZXJyb3IgKF1BVF9ZWUVSUk9SX0ZPUk1BTFNbKV1dKVtdZG5sCitdKQorCittNF9kZWZpbmUoW0FUX1lZRVJST1JfREVDTEFSRV9FWFRFUk5dLAorW200X2Nhc2UoQVRfTEFORywKK1tjXSwgW0FUX1lZRVJST1JfUFJPVE9UWVBFO10pW11kbmwKK10pCisKK200X2RlZmluZShbQVRfWVlFUlJPUl9ERUNMQVJFXSwKK1ttNF9jYXNlKEFUX0xBTkcsCitbY10sIFtzdGF0aWMgQVRfWVlFUlJPUl9ERUNMQVJFX0VYVEVSTl0pW11kbmwKK10pCisKK200X2RlZmluZShbQVRfWVlFUlJPUl9ERUZJTkVdLAorW200X2Nhc2UoQVRfTEFORywKK1tjXSwgW1sjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCitdQVRfWVlFUlJPUl9QUk9UT1RZUEVbCit7XW00X2JwYXRzdWJzdChtNF9kZWZuKFtBVF9QQVJTRV9QQVJBTVNdKSwKKyAgICAgICAgICAgICAgW1teLF0rW15BLVphLXpfMC05XVwoW0EtWmEtel9dW0EtWmEtel8wLTldKlwpLCAqXSwgWworICBZWVVTRShcMSk7XSlkbmwKK0FUX1lZRVJST1JfU0VFU19MT0NfSUYoW1sKKyAgWVlfTE9DQVRJT05fUFJJTlQgKHN0ZGVyciwgXUFUX0xPQ1spOworICBmcHJpbnRmIChzdGRlcnIsICI6ICIpO11dKVsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9XV0sCitbYysrXSwgW1svKiBBIEMrKyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLwordm9pZAorXUFUX05BTUVfUFJFRklYWzo6cGFyc2VyOjplcnJvciAoY29uc3QgbG9jYXRpb25fdHlwZSYgbCwgY29uc3Qgc3RkOjpzdHJpbmcmIG0pCit7CisgICh2b2lkKSBsOworICBzdGQ6OmNlcnIgPDwgXUFUX0xPQ0FUSU9OX0lGKFtsIDw8ICI6ICIgPDwgXSlbbSA8PCBzdGQ6OmVuZGw7Cit9XV0sCitbamF2YV0sIFtBVF9MT0NBVElPTl9JRihbW3B1YmxpYyB2b2lkIHl5ZXJyb3IgKENhbGMuTG9jYXRpb24gbCwgU3RyaW5nIHMpCisgIHsKKyAgICBpZiAobCA9PSBudWxsKQorICAgICAgU3lzdGVtLmVyci5wcmludGxuIChzKTsKKyAgICBlbHNlCisgICAgICBTeXN0ZW0uZXJyLnByaW50bG4gKGwgKyAiOiAiICsgcyk7CisgIH0KK11dLCBbWworICBwdWJsaWMgdm9pZCB5eWVycm9yIChTdHJpbmcgcykKKyAgeworICAgIFN5c3RlbS5lcnIucHJpbnRsbiAocyk7CisgIH1dXSldLAorW200X2ZhdGFsKFskMDogaW52YWxpZCBsYW5ndWFnZTogXUFUX0xBTkcpXSlkbmwKK10pCisKKworIyMgLS0tLS0tLS0tLS0tLS0tICMjCisjIyBSdW5uaW5nIEJpc29uLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLSAjIworCisjIEFUX0JJU09OX0NIRUNLKEJJU09OX0FSR1MsIFtPVEhFUl9BVF9DSEVDS19BUkdTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBIaWdoLWxldmVsIHJvdXRpbmUgdGhhdCBtYXkgY2FsbCBiaXNvbiBzZXZlcmFsIHRpbWVzLCB1bmRlciBkaWZmZXJlbnQKKyMgY29uZGl0aW9ucy4KKyMKKyMgQ2hlY2sgQmlzb24gYnkgaW52b2tpbmcgYGJpc29uIEJJU09OX0FSR1MnLiAgQklTT05fQVJHUyBzaG91bGQgbm90IGNvbnRhaW4KKyMgc2hlbGwgY29uc3RydWN0cyAoc3VjaCBhcyByZWRpcmVjdGlvbiBvciBwaXBlcykgdGhhdCB3b3VsZCBwcmV2ZW50CisjIGFwcGVuZGluZyBhZGRpdGlvbmFsIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgZm9yIGJpc29uLiBPVEhFUl9BVF9DSEVDS19BUkdTCisjIGFyZSB0aGUgdXN1YWwgcmVtYWluaW5nIGFyZ3VtZW50cyB0byBBVF9DSEVDSzogU1RBVFVTLCBTVERPVVQsIGV0Yy4KKyMKKyMgVGhpcyBtYWNybyBvciBBVF9CSVNPTl9DSEVDS19OT19YTUwgc2hvdWxkIGFsd2F5cyBiZSB1c2VkIHdoZW5ldmVyIGludm9raW5nCisjIEJpc29uIGluIHRoZSB0ZXN0IHN1aXRlLiAgRm9yIG5vdyBpdCBlbnN1cmVzIHRoYXQ6CisjCisjICAgMS4gVmFsZ3JpbmQgZG9lc24ndCByZXBvcnQgcmVhY2hhYmxlIG1lbW9yeSB3aGVuIEJpc29uIGlzIGV4cGVjdGVkIHRvIGhhdmUKKyMgICAgICBhIG5vbi16ZXJvIGV4aXQgc3RhdHVzIHNpbmNlIEJpc29uIGRvZXNuJ3QgYWx3YXlzIHRyeSB0byBmcmVlIGFsbCBtZW1vcnkKKyMgICAgICBpbiB0aGF0IGNhc2UuCisjCisjICAgMi4gSW4gdGhlIGNhc2Ugb2YgbWFpbnRhaW5lci14bWwtY2hlY2ssIFhNTC9YU0xUIG91dHB1dCBpcyBjb21wYXJlZCB3aXRoCisjICAgICAgLS1ncmFwaCBhbmQgLS1yZXBvcnQ9YWxsIG91dHB1dCBmb3IgZXZlcnkgd29ya2luZyBncmFtbWFyLgorIworIyAgIDMuIElmIHN0ZGVyciBjb250YWlucyBhIHdhcm5pbmcsIC1XZXJyb3IgYW5kIC0td2FybmluZ3M9ZXJyb3IKKyMgICAgICBjb252ZXJ0IHRoZSB3YXJuaW5nIHRvIGFuIGVycm9yLgorIworIyAgIDQuIElmIHN0ZGVyciBjb250YWlucyBhIHdhcm5pbmcsIC1Xbm9uZSBhbmQgLS13YXJuaW5ncz1ub25lIHN1cHByZXNzIGl0LgorbTRfZGVmaW5lKFtBVF9CSVNPTl9DSEVDS10sCitbbTRfbnVsbF9pZihbJDJdLCBbQVRfQklTT05fQ0hFQ0tfWE1MKCRAKV0pCitBVF9CSVNPTl9DSEVDS19OT19YTUwoJEApXSkKKworbTRfZGVmaW5lKFtBVF9CSVNPTl9XRVJST1JfTVNHXSwKKyAgICAgICAgICBbW2Jpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc11dKQorCisKKyMgQVRfQklTT05fQ0hFQ0tfKEJJU09OX0FSR1MsIFtPVEhFUl9BVF9DSEVDS19BUkdTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTG93LWxldmVsIG1hY3JvIHRvIHJ1biBiaXNvbiBvbmNlLgorbTRfZGVmaW5lKFtBVF9CSVNPTl9DSEVDS19dLAorW0FUX0NIRUNLKEFUX1FVRUxMX1ZBTEdSSU5EW1sgYmlzb24gXV0kQCldKQorCisKKyMgQVRfQklTT05fQ0hFQ0tfV0FSTklOR1MoQklTT05fQVJHUywgW09USEVSX0FUX0NIRUNLX0FSR1NdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHRoYXQgd2FybmluZ3MgKGlmIHNvbWUgYXJlIGV4cGVjdGVkKSBhcmUgY29ycmVjdGx5CisjIHR1cm5lZCBpbnRvIGVycm9ycyB3aXRoIC1XZXJyb3IsIGV0Yy4KK200X2RlZmluZShbQVRfQklTT05fQ0hFQ0tfV0FSTklOR1NdLAorW200X2lmKG00X2JyZWdleHAoWyQ0XSwgWzogd2FybmluZzogXSksIFstMV0sIFtdLAorICAgICAgW200X251bGxfaWYoWyQyXSwgW0FUX0JJU09OX0NIRUNLX1dBUk5JTkdTXygkQCldKV0pXSkKKworbTRfZGVmaW5lKFtBVF9CSVNPTl9DSEVDS19XQVJOSU5HU19dLAorW1sjIERlZmluaW5nIFBPU0lYTFlfQ09SUkVDVCBjYXVzZXMgYmlzb24gdG8gY29tcGxhaW4gaWYgb3B0aW9ucyBhcmUKKyMgYWRkZWQgYWZ0ZXIgdGhlIGdyYW1tYXIgZmlsZSBuYW1lLCBzbyBza2lwIHRoZXNlIGNoZWNrcyBpbiB0aGF0CisjIGNhc2UuCitpZiB0ZXN0ICIkUE9TSVhMWV9DT1JSRUNUX0lTX0VYUE9SVEVEIiA9IGZhbHNlOyB0aGVuCisgIF1BVF9TQVZFX1NQRUNJQUxfRklMRVNbCisKKyAgIyBUbyBhdm9pZCBleHBhbmRpbmcgaXQgcmVwZWF0ZWRseSwgc3RvcmUgc3BlY2lmaWVkIHN0ZG91dC4KKyAgXUFUX0RBVEEoW2V4cG91dF0sIFskM10pWworCisgICMgUnVuIHdpdGggLVdlcnJvci4KKyAgXUFUX0JJU09OX0NIRUNLXyhbJDFbIC1XZXJyb3JdXSwgW1sxXV0sIFtleHBvdXRdLCBbc3RkZXJyXSlbCisKKyAgIyBCdWlsZCBleHBlY3RlZCBzdGRlcnIgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgIndhcm5pbmdzIGJlaW5nCisgICMgdHJlYXRlZCBhcyBlcnJvcnMiIG1lc3NhZ2UuCisgIF1BVF9EQVRBKFtbYXQtYmlzb24tY2hlY2std2FybmluZ3NdXSwgWyQ0XSlbCisgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PWBzZWQgLW4gXAorICAgICcvOiB3YXJuaW5nOiAvez07cTt9JyBhdC1iaXNvbi1jaGVjay13YXJuaW5nc2AKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2ZpcnN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19maXJzdF90bXA9YHNlZCAtbiBcCisgICAgJy9jb25mbGljdHM6IFswLTldLipyZWR1Y2UkL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdF90bXA6PTF9CisgIGlmIHRlc3QgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcCAtbHQgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0OyB0aGVuCisgICAgYXRfYmlzb25fY2hlY2tfZmlyc3Q9JGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcAorICBmaQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdCAtZ3QgMTsgdGhlbgorICAgIHNlZCAtbiAiMSxgZXhwciAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLSAxYCJwIFwKKyAgICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4gZXhwZXJyCisgIGZpCisgIGVjaG8gJ11BVF9CSVNPTl9XRVJST1JfTVNHWycgPj4gZXhwZXJyCisKKyAgIyBGaW5pc2ggYnVpbGRpbmcgZXhwZWN0ZWQgc3RkZXJyIGFuZCBjaGVjay4gIFVubGlrZSB3YXJuaW5ncywKKyAgIyBjb21wbGFpbnRzIGNhdXNlIGJpc29uIHRvIGV4aXQgZWFybHkuICBUaHVzLCB3aXRoIC1XZXJyb3IsIGJpc29uCisgICMgZG9lcyBub3QgbmVjZXNzYXJpbHkgcmVwb3J0IGFsbCB3YXJuaW5ncyB0aGF0IGl0IGRvZXMgd2l0aG91dAorICAjIC1XZXJyb3IsIGJ1dCBpdCBhdCBsZWFzdCByZXBvcnRzIG9uZS4KKyAgYXRfYmlzb25fY2hlY2tfbGFzdD1gc2VkIC1uICckPScgc3RkZXJyYAorICA6ICR7YXRfYmlzb25fY2hlY2tfbGFzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfbGFzdD1gZXhwciAkYXRfYmlzb25fY2hlY2tfbGFzdCAtIDFgCisgIHNlZCAtbiAiJGF0X2Jpc29uX2NoZWNrX2ZpcnN0LCRhdF9iaXNvbl9jaGVja19sYXN0InAgXAorICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4+IGV4cGVycgorICBdQVRfQ0hFQ0soW1tzZWQgJ3MsLiovXChdQVRfQklTT05fV0VSUk9SX01TR1tcKSQsXDEsJyBcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyXV0sIFtbMF1dLCBbW11dLCBbZXhwZXJyXSlbCisKKyAgIyBOb3cgY2hlY2sgLS13YXJuaW5ncz1lcnJvci4KKyAgY3Agc3RkZXJyIGV4cGVycgorICBdQVRfQklTT05fQ0hFQ0tfKFskMVsgLS13YXJuaW5ncz1lcnJvcl1dLCBbWzFdXSwgW2V4cG91dF0sIFtleHBlcnJdKVsKKworICAjIE5vdyBjaGVjayAtV25vbmUgYW5kIC0td2FybmluZ3M9bm9uZSBieSBtYWtpbmcgc3VyZSB0aGF0CisgICMgLVdlcnJvciBkb2Vzbid0IGNoYW5nZSB0aGUgZXhpdCBzdGF0dXMgd2hlbiAtV25vbmUgb3IKKyAgIyAtLXdhcm5pbmdzPW5vbmUgaXMgc3BlY2lmaWVkLgorICBdQVRfQklTT05fQ0hFQ0tfKFskMVsgLVdub25lIC1XZXJyb3JdXSwgW1swXV0sIFtleHBvdXRdKVsKKyAgXUFUX0JJU09OX0NIRUNLXyhbJDFbIC0td2FybmluZ3M9bm9uZSAtV2Vycm9yXV0sIFtbMF1dLCBbZXhwb3V0XSlbCisKKyAgXUFUX1JFU1RPUkVfU1BFQ0lBTF9GSUxFU1sKK2ZpXWRubAorXSkKKworIyBBVF9CSVNPTl9DSEVDS19OT19YTUwoQklTT05fQVJHUywgW09USEVSX0FUX0NIRUNLX0FSR1NdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTYW1lIGFzIEFUX0JJU09OX0NIRUNLIGV4Y2VwdCBkb24ndCBwZXJmb3JtIFhNTC9YU0xUIGNoZWNrcy4gIFRoaXMgaXMgdXNlZnVsCisjIHdoZW4gYSB0b3J0dXJlZCBncmFtbWFyJ3MgWE1MIGlzIGtub3duIHRvIGJlIHRvbyBsYXJnZSBmb3IgeHNsdHByb2MgdG8KKyMgaGFuZGxlLgorbTRfZGVmaW5lKFtBVF9CSVNPTl9DSEVDS19OT19YTUxdLAorW0FUX0NIRUNLKG00X251bGxfaWYoWyQyXSwgW10sIFtBVF9RVUVMTF9WQUxHUklORCBdKVtbYmlzb24gXV0kQCkKK0FUX0JJU09OX0NIRUNLX1dBUk5JTkdTKCRAKV0pCisKKyMgQVRfQklTT05fQ0hFQ0tfWE1MKEJJU09OX0FSR1MsIFtPVEhFUl9BVF9DSEVDS19BUkdTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUnVuIEFUX0JJU09OX0NIRUNLJ3MgWE1ML1hTTFQgY2hlY2tzIGlmICRCSVNPTl9URVNUX1hNTD0xIGFuZCAkWFNMVFBST0MgaXMKKyMgZGVmaW5lZC4gIEl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBpbnZva2UgdGhpcyBtYWNybyBpZiBCaXNvbiBpcyBleHBlY3RlZCB0bworIyBoYXZlIGEgbm9uLXplcm8gZXhpdCBzdGF0dXMuCittNF9kZWZpbmUoW0FUX0JJU09OX0NIRUNLX1hNTF0sCitbW2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuXQorICBBVF9TQVZFX1NQRUNJQUxfRklMRVMKKyAgW21rZGlyIHhtbC10ZXN0c10KKyAgbTRfcHVzaGRlZihbQVRfQklTT05fQVJHU10sCisgICAgICAgICAgICAgW200X2JwYXRzdWJzdHMoW1skMV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFstLXJlcG9ydCgtZmlsZSk/PVteXVsgXSpdLCBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLS1ncmFwaD1bXl1bIF0qXSwgW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWy0teG1sPVteXVsgXSpdLCBbXSldKWRubAorICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICBBVF9CSVNPTl9DSEVDS18oW1stLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgXV1BVF9CSVNPTl9BUkdTLAorICAgICAgICAgICAgICAgICAgW1swXV0sIFtpZ25vcmVdLCBbaWdub3JlXSkKKyAgQVRfQklTT05fQ0hFQ0tfKFtbLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIF1dQVRfQklTT05fQVJHUywKKyAgICAgICAgICAgICAgICAgW1swXV0sIFtpZ25vcmVdLCBbaWdub3JlXSkKKyAgbTRfcG9wZGVmKFtBVF9CSVNPTl9BUkdTXSlkbmwKKyAgW2NwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXRdCisgIEFUX0NIRUNLKFtbJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgXV1BVF9RVUVMTF9WQUxHUklORFtbIGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbF1dLCBbWzBdXSwgW2V4cG91dF0pCisgIFtzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dF0KKyAgQVRfQ0hFQ0soW1skWFNMVFBST0MgXAorICAgICAgICAgICAgIGBdXUFUX1FVRUxMX1ZBTEdSSU5EW1sgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0XV0sIFtbMF1dLCBbZXhwb3V0XSkKKyAgW3JtIC1yZiB4bWwtdGVzdHMgZXhwb3V0XQorICBBVF9SRVNUT1JFX1NQRUNJQUxfRklMRVMKK1tmaV1dKQorCisjIEFUX1FVRUxMX1ZBTEdSSU5ECisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIFB1dCB0aGlzIGJlZm9yZSBhIEJpc29uIGludm9jYXRpb24gdG8ga2VlcCBWYWxncmluZCBmcm9tIGNvbXBsYWluaW5nIGFib3V0CisjIHJlYWNoYWJsZSBtZW1vcnkuCisjCisjIERvIG5vdCBxdW90ZSBpbnZvY2F0aW9ucyBvZiB0aGlzIG1hY3JvIHdpdGhpbiB0aGUgZmlyc3QgYXJndW1lbnQgb2YgQVRfQ0hFQ0suCisjIFRoZSB0cmlwbGUgcXVvdGluZyBiZWxvdyB3aWxsIGNhdXNlIHRlc3QgY2FzZXMgdG8gZmFpbCBpZiB5b3UgZG8uICBJZiB5b3UgZG8KKyMgc28gYW55d2F5IGJ1dCBhbHNvIGRlY3JlYXNlIHRoZSBxdW90aW5nIGJlbG93IHRvIGF2b2lkIHRoYXQgcHJvYmxlbSwgQVRfQ0hFQ0sKKyMgd2lsbCB0aGVuIGZhaWwgdG8gc2hlbGwtZXNjYXBlIGl0cyBjb250ZW50cyB3aGVuIGF0dGVtcHRpbmcgdG8gcHJpbnQgdGhlbS4KKyMgVGhlIHRlc3RzdWl0ZSB2ZXJib3NlIG91dHB1dCwgYXQgbGVhc3QsIHdpbGwgYmUgaW5jb3JyZWN0LCBidXQgbm90aGluZyBtYXkKKyMgZmFpbCB0byBtYWtlIHN1cmUgeW91IG5vdGljZS4KK200X2RlZmluZShbQVRfUVVFTExfVkFMR1JJTkRdLAorW1tbVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTO11dXSkKKworCiAKICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogIyMgQ29tcGlsaW5nIEMsIEMrKyBGaWxlcy4gICMjCkBAIC0xNzcsMzUgKzU5NCwzMTUgQEAKIAogIyBBVF9DT01QSUxFKE9VVFBVVCwgW1NPVVJDRVMgPSBPVVRQVVQuY10pCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ29tcGlsZSBTT1VSQ0VTIGludG8gT1VUUFVULiAgSWYgT1VUUFVUIGRvZXMgbm90IGNvbnRhaW4gJy4nLAotIyBhc3N1bWUgdGhhdCB3ZSBhcmUgbGlua2luZyB0b287IHRoaXMgaXMgYSBoYWNrLgorIyBDb21waWxlIFNPVVJDRVMgaW50byBPVVRQVVQuCisjCisjIElmIE9VVFBVVCBkb2VzIG5vdCBjb250YWluICcuJywgYXNzdW1lIHRoYXQgd2UgYXJlIGxpbmtpbmcgdG9vLAorIyBvdGhlcndpc2UgcGFzcyAiLWMiOyB0aGlzIGlzIGEgaGFjay4gIFRoZSBkZWZhdWx0IFNPVVJDRVMgaXMgT1VUUFVUCisjIHdpdGggdHJhaWxpbmcgLm8gcmVtb3ZlZCwgYW5kICIuYyIgYXBwZW5kZWQuCiBtNF9kZWZpbmUoW0FUX0NPTVBJTEVdLAotW0FUX0NIRUNLKFskQ0MgJENGTEFHUyAkQ1BQRkxBR1MgbTRfYm1hdGNoKFskMV0sIFtbLl1dLCBbXSwgWyRMREZMQUdTIF0pLW8gJDEgbTRfZGVmYXVsdChbJDJdLCBbJDEuY10pW11tNF9ibWF0Y2goWyQxXSwgW1suXV0sIFtdLCBbICRMSUJTXSldLAorW0FUX0NIRUNLKFskQklTT05fQ19XT1JLU10sIDAsIGlnbm9yZSwgaWdub3JlKQorQVRfQ0hFQ0sobTRfam9pbihbIF0sCisgICAgICAgICAgICAgICAgICBbJENDICRDRkxBR1MgJENQUEZMQUdTXSwKKyAgICAgICAgICAgICAgICAgIFttNF9ibWF0Y2goWyQxXSwgW1suXV0sIFstY10sIFskTERGTEFHU10pXSwKKyAgICAgICAgICAgICAgICAgIFstbyAkMV0sCisgICAgICAgICAgICAgICAgICBbbTRfZGVmYXVsdChbJDJdLCBbbTRfYnBhdHN1YnN0KFskMV0sIFtcLm8kXSkuY10pXSwKKyAgICAgICAgICAgICAgICAgIFttNF9ibWF0Y2goWyQxXSwgW1suXV0sIFtdLCBbJExJQlNdKV0pLAogCSAgIDAsIFtpZ25vcmVdLCBbaWdub3JlXSldKQogCiAjIEFUX0NPTVBJTEVfQ1hYKE9VVFBVVCwgW1NPVVJDRVMgPSBPVVRQVVQuY2NdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDb21waWxlIFNPVVJDRVMgaW50byBPVVRQVVQuICBJZiBPVVRQVVQgZG9lcyBub3QgY29udGFpbiAnLicsCi0jIGFzc3VtZSB0aGF0IHdlIGFyZSBsaW5raW5nIHRvbzsgdGhpcyBpcyBhIGhhY2suCi0jIElmIHRoZSBDKysgY29tcGlsZXIgZG9lcyBub3Qgd29yaywgaWdub3JlIHRoZSB0ZXN0LgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcGlsZSBTT1VSQ0VTIGludG8gT1VUUFVULiAgSWYgdGhlIEMrKyBjb21waWxlciBkb2VzIG5vdCB3b3JrLAorIyBpZ25vcmUgdGhlIHRlc3QuCisjCisjIElmIE9VVFBVVCBkb2VzIG5vdCBjb250YWluICcuJywgYXNzdW1lIHRoYXQgd2UgYXJlIGxpbmtpbmcgdG9vLAorIyBvdGhlcndpc2UgcGFzcyAiLWMiOyB0aGlzIGlzIGEgaGFjay4gIFRoZSBkZWZhdWx0IFNPVVJDRVMgaXMgT1VUUFVUCisjIHdpdGggdHJhaWxpbmcgLm8gcmVtb3ZlZCwgYW5kICIuY2MiIGFwcGVuZGVkLgogbTRfZGVmaW5lKFtBVF9DT01QSUxFX0NYWF0sCiBbQVRfS0VZV09SRFMoYysrKQogQVRfQ0hFQ0soWyRCSVNPTl9DWFhfV09SS1NdLCAwLCBpZ25vcmUsIGlnbm9yZSkKLUFUX0NIRUNLKFskQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgbTRfYm1hdGNoKFskMV0sIFtbLl1dLCBbXSwgWyRMREZMQUdTIF0pLW8gJDEgbTRfZGVmYXVsdChbJDJdLCBbJDEuY2NdKVtdbTRfYm1hdGNoKFskMV0sIFtbLl1dLCBbXSwgWyAkTElCU10pXSwKK0FUX0NIRUNLKG00X2pvaW4oWyBdLAorICAgICAgICAgICAgICAgICBbJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTXSwKKyAgICAgICAgICAgICAgICAgW200X2JtYXRjaChbJDFdLCBbWy5dXSwgWy1jXSwgWyRMREZMQUdTXSldLAorICAgICAgICAgICAgICAgICBbLW8gJDFdLAorICAgICAgICAgICAgICAgICBbbTRfZGVmYXVsdChbJDJdLCBbbTRfYnBhdHN1YnN0KFskMV0sIFtcLm8kXSkuY2NdKV0sCisgICAgICAgICAgICAgICAgIFttNF9ibWF0Y2goWyQxXSwgW1suXV0sIFtdLCBbJExJQlNdKV0pLAogCSAwLCBbaWdub3JlXSwgW2lnbm9yZV0pXSkKIAorIyBBVF9KQVZBX0NPTVBJTEUoU09VUkNFUykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbXBpbGUgU09VUkNFUyBpbnRvIEphdmEgY2xhc3MgZmlsZXMuICBTa2lwIHRoZSB0ZXN0IGlmIGphdmEgb3IgamF2YWMKKyMgaXMgbm90IGluc3RhbGxlZC4KK200X2RlZmluZShbQVRfSkFWQV9DT01QSUxFXSwKK1tBVF9LRVlXT1JEUyhqYXZhKQorQVRfU0tJUF9JRihbW3Rlc3QgLXogIiRDT05GX0pBVkFDIl1dKQorQVRfU0tJUF9JRihbW3Rlc3QgLXogIiRDT05GX0pBVkEiXV0pCitBVF9DSEVDSyhbWyRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBdJDFdLAorICAgICAgICAgW1swXV0sIFtpZ25vcmVdLCBbaWdub3JlXSldKQorCisjIEFUX0xBTkdfQ09NUElMRShPVVRQVVQsIFtTT1VSQ0VTID0gT1VUUFVULmNdCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbXBpbGUgU09VUkNFUyBpbnRvIE9VVFBVVC4gIFNraXAgaWYgY29tcGlsZXIgZG9lcyBub3Qgd29yay4KKyMKKyMgSWYgT1VUUFVUIGRvZXMgbm90IGNvbnRhaW4gJy4nLCBhc3N1bWUgdGhhdCB3ZSBhcmUgbGlua2luZyB0b28sCisjIG90aGVyd2lzZSBwYXNzICItYyI7IHRoaXMgaXMgYSBoYWNrLiAgVGhlIGRlZmF1bHQgU09VUkNFUyBpcyBPVVRQVVQKKyMgd2l0aCB0cmFpbGluZyAubyByZW1vdmVkLCBhbmQgIi5jIi8iLmNjIiBhcHBlbmRlZC4KK200X2RlZmluZShbQVRfTEFOR19DT01QSUxFXSwKK1ttNF9jYXNlKEFUX0xBTkcsCitbY10sICAgIFtBVF9DT01QSUxFKFskMV0sIFskMl0pXSwKK1tjKytdLCAgW0FUX0NPTVBJTEVfQ1hYKFskMV0sIFskMl0pXSwKK1tqYXZhXSwgW0FUX0pBVkFfQ09NUElMRShbJDEuamF2YV0sIFskMl0pXSwKKyAgICAgICAgW200X2ZhdGFsKFt1bmtub3duIGxhbmd1YWdlOiBdbTRfZGVmbihbQVRfTEFOR10pKV0pW11kbmwKK10pCisKKyMgQVRfRlVMTF9DT01QSUxFKE9VVFBVVCwgW09USEVSMV0sIFtPVEhFUjJdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbXBpbGUgT1VUUFVULnkgdG8gT1VUUFVULmMsIE9VVFBVVC5jYywgb3IgT1VUUFVULmphdmEsIGFuZCB0aGVuCisjIGNvbXBpbGUgaXQgdG8gT1VUUFVUIG9yIE9VVFBVVC5jbGFzcy4gIElmIE9USEVSIGlzIHNwZWNpZmllZCwgY29tcGlsZQorIyBPVVRQVVQtT1RIRVIuYywgT1VUUFVULU9USEVSLmNjLCBvciBPVVRQVVQtT1RIRVIuamF2YSB0byBPVVRQVVQgb3IKKyMgT1VUUFVULmphdmEgYWxvbmcgd2l0aCBpdC4gIFJlbGllcyBvbiBBVF9TS0VMX0NDX0lGIGFuZAorIyBBVF9TS0VMX0pBVkFfSUYuCittNF9kZWZpbmUoW0FUX0ZVTExfQ09NUElMRV0sCitbbTRfY2FzZShBVF9MQU5HLAorW2phdmFdLAorICBbQVRfQklTT05fQ0hFQ0soWy1vICQxLmphdmEgJDEueV0pCisgICBBVF9MQU5HX0NPTVBJTEUoWyQxXSwKKyAgICAgICAgICAgICAgICAgICBtNF9qb2luKFsgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFskMS5qYXZhXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG00X2lmdmFsKCQyLCBbWyQxLSQyLmphdmFdXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtNF9pZnZhbCgkMywgW1skMS0kMy5qYXZhXV0pKSldLAorW2MrK10sCisgIFtBVF9CSVNPTl9DSEVDSyhbLW8gJDEuY2MgJDEueV0pCisgICBBVF9MQU5HX0NPTVBJTEUoWyQxXSwKKyAgICAgICAgICAgICAgICAgICBtNF9qb2luKFsgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFskMS5jY10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtNF9pZnZhbCgkMiwgW1skMS0kMi5jY11dKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG00X2lmdmFsKCQzLCBbWyQxLSQzLmNjXV0pKSldLAorW2NdLAorICBbQVRfQklTT05fQ0hFQ0soWy1vICQxLmMgJDEueV0pCisgICBBVF9MQU5HX0NPTVBJTEUoWyQxXSwKKyAgICAgICAgICAgICAgICAgICBtNF9qb2luKFsgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFskMS5jXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG00X2lmdmFsKCQyLCBbWyQxLSQyLmNdXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtNF9pZnZhbCgkMywgW1skMS0kMy5jXV0pKSldKQorXSkKKworCisKKyMgQVRfU0tJUF9JRl9DQU5OT1RfTElOS19DX0FORF9DWFgKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgdGhhdCB3ZSBjYW4gbGluayB0b2dldGhlciBDIGFuZCBDKysgb2JqZWN0cy4KK200X2RlZmluZShbQVRfU0tJUF9JRl9DQU5OT1RfTElOS19DX0FORF9DWFhdLAorW0FUX0RBVEEoW2MtYW5kLWN4eC5oXSwKK1tbI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKyAgaW50IGZvcnR5dHdvICh2b2lkKTsKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCitdXSkKK0FUX0RBVEEoW2Mtb25seS5jXSwKK1tbI2luY2x1ZGUgImMtYW5kLWN4eC5oIgoraW50CittYWluICh2b2lkKQoreworICByZXR1cm4gZm9ydHl0d28gKCkgPT0gNDIgPyAwIDogMTsKK30KK11dKQorQVRfREFUQShbY3h4LW9ubHkuY2NdLAorW1sjaW5jbHVkZSAiYy1hbmQtY3h4LmgiCitpbnQgZm9ydHl0d28gKCkKK3sKKyAgcmV0dXJuIDQyOworfQorXV0pCitBVF9DT01QSUxFKFtjLW9ubHkub10sIFtjLW9ubHkuY10pCitBVF9DT01QSUxFX0NYWChbY3h4LW9ubHkub10sIFtjeHgtb25seS5jY10pCitBVF9DSEVDSyhbJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGMtb25seS5vIGN4eC1vbmx5Lm8gLW8gYy1hbmQtY3h4IHx8CisgICAgICAgICAgZXhpdCA3N10sIFtpZ25vcmVdLCBbaWdub3JlXSkKK0FUX1BBUlNFUl9DSEVDSyhbLi9jLWFuZC1jeHhdKQorXSkKIAogCiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAjIyBSdW5uaW5nIGEgZ2VuZXJhdGVkIHBhcnNlci4gICMjCiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAKLSMgQVRfUEFSU0VSX0NIRUNLKENPTU1BTkQsIEVYSVQtU1RBVFVTLCBFWFBPVVQsIEVYUEVSUikKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgU28gdGhhdCB3ZSBjYW4gcnVuIGAuL3Rlc3RzdWl0ZSBQUkVQQVJTRVI9J3ZhbGdyaW5kIC1xJyBmb3IgaW5zdGFuY2UuCi1tNF9kZWZpbmUoW0FUX1BBUlNFUl9DSEVDS10sCi1bQVRfQ0hFQ0soWyRQUkVQQVJTRVIgJDFdLCBbJDJdLCBbJDNdLCBbJDRdKV0pCiAKKyMgQVRfUEFSU0VSX0NIRUNLKENPTU1BTkQsIEVYSVQtU1RBVFVTLCBFWFBPVVQsIEVYUEVSUiwgW1BSRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTbyB0aGF0IHdlIGNhbiBydW4gYC4vdGVzdHN1aXRlIFBSRVBBUlNFUj0ndmFsZ3JpbmQgLXEnIGZvciBpbnN0YW5jZS4KKyMKKyMgR2V0IHJpZCBvZiBzcHVyaW91cyBtZXNzYWdlcyB3aGVuIGNvbXBpbGVkIHdpdGggLS1jb3ZlcmFnZToKKyMgK3Byb2ZpbGluZzovWy4uLl0vbGliL2ZwcmludGYuZ2NkYTpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzCittNF9kZWZpbmUoW0FUX1BBUlNFUl9DSEVDS10sCitbQVRfQ0hFQ0soWyQ1ICRQUkVQQVJTRVIgJDFdLCBbJDJdLCBbJDNdLCBbc3RkZXJyXSkKK0FUX0NIRUNLKFtzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycl0sCisgICAgICAgICBbMF0sIFtdLCBbJDRdKQorXSkKKworCisjIEFUX0pBVkFfUEFSU0VSX0NIRUNLKENPTU1BTkQsIEVYSVQtU1RBVFVTLCBFWFBPVVQsIEVYUEVSUiwgW1BSRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW0FUX0pBVkFfUEFSU0VSX0NIRUNLXSwKK1tBVF9DSEVDSyhbJDVbICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBdJDFdLCBbJDJdLCBbJDNdLCBbJDRdKV0pCisKKworIyBBVF9URVNUX1RBQkxFU19BTkRfUEFSU0UoVElUTEUsIENPTkQtVkFMVUUsIFRFU1QtU1BFQywKKyMgICAgICAgICAgICAgICAgICAgICAgICAgIERFQ0xTLCBHUkFNTUFSLCBJTlBVVCwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgIEJJU09OLVNUREVSUiwgVEFCTEVTLU9SLUxBU1QtU1RBVEUsCisjICAgICAgICAgICAgICAgICAgICAgICAgICBbT1RIRVItQ0hFQ0tTXSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgIFtQQVJTRVItRVhJVC1WQUxVRV0sCisjICAgICAgICAgICAgICAgICAgICAgICAgICBbUEFSU0VSLVNURE9VVF0sIFtQQVJTRVItU1RERVJSXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBVc2luZyBUSVRMRSBhcyB0aGUgdGVzdCBncm91cCB0aXRsZSwgY2hlY2sgdGhlIGdlbmVyYXRlZCBwYXJzZXIgdGFibGVzCisjIGFuZCBwYXJzZXIgZm9yIGEgc3BlY2lmaWVkIGdyYW1tYXIgZmlsZSB1bmRlciBhIGNvbmRpdGlvbiBsYWJlbGVkIGJ5CisjIENPTkQtVkFMVUUuCisjCisjIFRFU1QtU1BFQyBpcyBhIGNvbW1hLWRlbGltaXRlZCBsaXN0IG9mIGF0dHJpYnV0ZXMgb2YgdGhpcyB0ZXN0LiAgRWFjaAorIyByZWNvZ25pemVkIGF0dHJpYnV0ZSBpcyBkZXNjcmliZWQgYmVsb3cgd2hlcmUgaXQgaXMgcmVsZXZhbnQuCisjCisjIEluc2VydCBERUNMUyBhbmQgR1JBTU1BUiBpbnRvIHRoZSBkZWNsYXJhdGlvbnMgYW5kIGdyYW1tYXIgc2VjdGlvbiBvZgorIyB0aGUgZ3JhbW1hciBmaWxlLiAgSW5zZXJ0IGJhc2ljIHl5ZXJyb3IsIHl5bGV4LCBhbmQgbWFpbiBmdW5jdGlvbgorIyBkZWZpbml0aW9ucyBhcyB3ZWxsLiAgSGFyZGNvZGUgeXlsZXggdG8gcmV0dXJuIHRoZSAocG9zc2libHkgZW1wdHkpCisjIGNvbW1hLWRlbGltaXRlZCBzZXJpZXMgb2YgdG9rZW5zIGluIElOUFVUIGZvbGxvd2VkIGJ5IHRva2VuIDAuCisjCisjIElmIFRFU1QtU1BFQyBjb250YWlucyB0aGUgYXR0cmlidXRlIG5vLXhtbCwgdGhlbiBpbnZva2UgYmlzb24gdXNpbmcKKyMgQVRfQklTT05fQ0hFQ0tfTk9fWE1MLiAgT3RoZXJ3aXNlLCBpbnZva2UgYmlzb24gdXNpbmcgQVRfQklTT05fQ0hFQ0suCisjIE9uIHRoZSBiaXNvbiBjb21tYW5kLWxpbmUsIHNwZWNpZnkgYC0tcmVwb3J0PWFsbCAtLWRlZmluZXMnLiAgQ2hlY2sKKyMgdGhhdCBCaXNvbiBleGl0cyB3aXRoIHZhbHVlIDAsIGhhcyBubyBzdGRvdXQsIGFuZCBoYXMgc3RkZXJyCisjIEJJU09OLVNUREVSUi4KKyMKKyMgSWYgVEVTVC1TUEVDIGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGUgYGxhc3Qtc3RhdGUnLCBjaGVjayB0aGF0IHRoZSB2YWx1ZQorIyBvZiBUQUJMRVMtT1ItTEFTVC1TVEFURSBpcyB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgc3RhdGUgZ2VuZXJhdGVkIGZvcgorIyB0aGUgZ3JhbW1hcjsgaW4gb3RoZXIgd29yZHMsIGNoZWNrIHRoZSBudW1iZXIgb2Ygc3RhdGVzIChtaW51cyBvbmUpLgorIyBPdGhlcndpc2UsIGNoZWNrIHRoYXQgZXZlcnl0aGluZyBpbiB0aGUgYC5vdXRwdXQnIGZpbGUgc3RhcnRpbmcgd2l0aAorIyB0aGUgZGVmaW5pdGlvbiBvZiBzdGF0ZSAwIGlzIHRoZSBzYW1lIGFzIHRoZSBlbnRpcmUgdmFsdWUgb2YKKyMgVEFCTEVTLU9SLUxBU1QtU1RBVEUuCisjCisjIEV4cGFuZCB0aGUgTTQgaW4gT1RIRVItQ0hFQ0tTIHRvIHBlcmZvcm0gYWRkaXRpb25hbCBjaGVja3Mgb2YgdGhlCisjIGAub3V0cHV0JyBmaWxlLCB3aGljaCBpcyBuYW1lZCBgaW5wdXQub3V0cHV0JywgYW5kL29yIGdyYW1tYXIgZmlsZSwKKyMgd2hpY2ggaXMgbmFtZWQgYGlucHV0LnknLgorIworIyBGaW5hbGx5LCBjb21waWxlIHRoZSBnZW5lcmF0ZWQgcGFyc2VyIGFuZCB0aGVuIHJ1biBpdCB1c2luZworIyBBVF9QQVJTRVJfQ0hFQ0sgd2l0aCBQQVJTRVItRVhJVC1WQUxVRSwgUEFSU0VSLVNURE9VVCwgYW5kCisjIFBBUlNFUi1TVERFUlIgYXMgdGhlIDJuZC00dGggYXJndW1lbnRzLgorIworIyBBcyBhIHByZWNvbmRpdGlvbiwgeW91IG11c3QgcHJvcGVybHkgZG91YmxlLXF1b3RlIGFsbCBhcmd1bWVudHMgdGhhdAorIyBhcmUgdG8gYmUgaW50ZXJwcmV0ZWQgYXMgc3RyaW5ncy4KKyMKKyMgQVRfQ09ORF9DQVNFICh3aGVuIGFwcGVhcmluZyBpbiBzaW5nbGUtcXVvdGVkIHNlZ21lbnRzIG9mIGFyZ3VtZW50cykKKyMgaW52b2tlcyBtNF9jYXNlIHdpdGggaXRzIG93biBhcmd1bWVudHMgYnV0IENPTkQtVkFMVUUgaW5zZXJ0ZWQgYXMgdGhlCisjIGZpcnN0IGFyZ3VtZW50LiAgVGhpcyBpcyB1c2VmdWwsIGZvciBleGFtcGxlLCB3aGVuIHdyYXBwaW5nIG11bHRpcGxlCisjIEFUX1RFU1RfVEFCTEVTX0FORF9QQVJTRSBpbnZvY2F0aW9ucywgZWFjaCByZXByZXNlbnRpbmcgYSBkaWZmZXJlbnQKKyMgY29uZGl0aW9uLCBpbiBhbm90aGVyIG1hY3JvLgorIworIyBGb3IgZXhhbXBsZToKKyMKKyMgICAjIEFUX1RFU1RfU1lOVEFYX0VSUk9SKERFU0NSSVBUSU9OLCBERUNMUywgR1JBTU1BUiwgSU5QVVQsIExBU1QtU1RBVEUsCisjICAgIyAgICAgICAgICAgICAgICAgICAgICBQQVJTRVItRVhJVC1WQUxVRSwgUEFSU0VSLVNURE9VVCwgUEFSU0VSLVNUREVSUikKKyMgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgIG00X2RlZmluZShbQVRfVEVTVF9TWU5UQVhfRVJST1JdLAorIyAgIFsKKyMgICAgIEFUX1RFU1RfVEFCTEVTX0FORF9QQVJTRShbJDFbIHdpdGggJWVycm9yLXZlcmJvc2VdXSwgW1t2ZXJib3NlXV0sCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tsYXN0LXN0YXRlXV0sCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1slZXJyb3ItdmVyYm9zZSBdJDJdLCBbJDNdLCBbJDRdLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbXV0sIFskNV0sIFtdLCBbJDZdLCBbJDddLCBbJDhdKQorIyAgICAgQVRfVEVTVF9UQUJMRVNfQU5EX1BBUlNFKFskMVsgd2l0aCBubyAlZXJyb3ItdmVyYm9zZV1dLCBbW25vIHZlcmJvc2VdXSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2xhc3Qtc3RhdGVdXSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJDJdLCBbJDNdLCBbJDRdLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbXV0sIFskNV0sIFtdLCBbJDZdLCBbJDddLCBbJDhdKQorIyAgIF0pCisjCisjICAgQVRfVEVTVF9TWU5UQVhfRVJST1IoW1tTaW5nbGUgQ2hhciBHcmFtbWFyXV0sCisjICAgICAgICAgICAgICAgICAgICAgICAgW1sldG9rZW4gJ2InXV0sIFtbc3RhcnQ6ICdhJyA7XV0sIFtbJ2EnLCAnYiddXSwKKyMgICAgICAgICAgICAgICAgICAgICAgICBbWzNdXSwKKyMgICAgICAgICAgICAgICAgICAgICAgICBbWzFdXSwgW1tdXSwKKyMgICAgICAgICAgICAgICAgICAgICAgICBbQVRfQ09ORF9DQVNFKFtbbm8gdmVyYm9zZV1dLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tzeW50YXggZXJyb3IKKyMgICBdXSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICdiJywgZXhwZWN0aW5nICRlbmQKKyMgICBdXSldKQorbTRfZGVmaW5lKFtBVF9URVNUX1RBQkxFU19BTkRfUEFSU0VdLAorW200X3B1c2hkZWYoW0FUX0NPTkRfQ0FTRV0sIFttNF9jYXNlKFskMl0sICRdW0ApXSkKKworQVRfU0VUVVAoWyQxXSkKK0FUX0JJU09OX09QVElPTl9QVVNIREVGUyhbJDRdKQorQVRfREFUQV9HUkFNTUFSKFtbaW5wdXQueV1dLAorW1slY29kZSB7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICBdQVRfWVlFUlJPUl9ERUNMQVJFWworICBdQVRfWVlMRVhfREVDTEFSRVsKK30KKworXSQ0WworCislJQorCitdJDVbCisKKyUlCitdQVRfWVlFUlJPUl9ERUZJTkVbCitzdGF0aWMgaW50Cit5eWxleCAodm9pZCkKK3sKKyAgc3RhdGljIGludCBjb25zdCBpbnB1dFtdID0geworICAgIF1tNF9pZihbJDZdLCBbXSwgW10sIFskNl0sIFtbXV0sIFtdLCBbJDZbLCBdXSlbMAorICB9OworICBzdGF0aWMgaW50IGNvbnN0ICppbnB1dHAgPSBpbnB1dDsKKyAgcmV0dXJuICppbnB1dHArKzsKK30KKworaW50CittYWluICh2b2lkKQoreworICByZXR1cm4geXlwYXJzZSAoKTsKK30KK11dKQorCisjIEluIHNvbWUgdmVyc2lvbnMgb2YgQXV0b2NvbmYsIEFUX0NIRUNLIGludm9rZXMgQVNfRVNDQVBFIGJlZm9yZQorIyBleHBhbmRpbmcgbWFjcm9zLCBzbyBpdCBjb3JydXB0cyBzb21lIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUKKyMgbWFjcm9zLiAgVG8gYXZvaWQgdGhpcywgZXhwYW5kIG5vdyBhbmQgcGFzcyBpdCB0aGUgcmVzdWx0IHdpdGggcHJvcGVyCisjIHN0cmluZyBxdW90YXRpb24uICBBc3N1bWUgYXJncyA3IHRocm91Z2ggMTIgZXhwYW5kIHRvIHByb3Blcmx5IHF1b3RlZAorIyBzdHJpbmdzLgorCittNF9pZihtNF9pbmRleChtNF9xdW90ZSgkMyksIFtuby14bWxdKSwgLTEsCisgICAgICBbQVRfQklTT05fQ0hFQ0tdLAorICAgICAgW0FUX0JJU09OX0NIRUNLX05PX1hNTF0pKFtbLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnldXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMF0sIFtdLCBtNF9kcXVvdGUoJDcpKQorCittNF9pZihtNF9pbmRleChtNF9xdW90ZSgkMyksIFtsYXN0LXN0YXRlXSksIC0xLAorICAgICAgW0FUX0NIRUNLKFtbc2VkIC1uICcvXlN0YXRlIDAkLywkcCcgaW5wdXQub3V0cHV0XV0sIFtbMF1dLAorICAgICAgICAgICAgICAgIG00X2RxdW90ZSgkOCkpXSwKKyAgICAgIFtBVF9DSEVDSyhbW3NlZCAtbiAncy9eU3RhdGUgLy9wJyBpbnB1dC5vdXRwdXQgfCB0YWlsIC0xXV0sIFtbMF1dLAorICAgICAgICAgICAgICAgIG00X2RxdW90ZSgkOClbWworXV0pXSkKKworJDkKKworIyBDYW5vbmljYWwgTFIgZ2VuZXJhdGVzIHZlcnkgbGFyZ2UgdGFibGVzLCByZXN1bHRpbmcgaW4gdmVyeSBsb25nCisjIGZpbGVzIHdpdGggI2xpbmUgZGlyZWN0aXZlcyB0aGF0IG1heSBvdmVyZmxvdyB3aGF0IHRoZSBzdGFuZGFyZHMKKyMgKEM5MCBhbmQgQysrOTgpIGd1YXJhbnRlZTogMzI3NjcuICBJbiB0aGF0IGNhc2UsIEdDQydzIC1wZWRhbnRpYworIyB3aWxsIGlzc3VlIGFuIGVycm9yLgorIworIyBUaGVyZSBpcyBubyAiIiBhcm91bmQgYHdjYCBzaW5jZSBzb21lIGluZGVudCB0aGUgcmVzdWx0LgorbTRfYm1hdGNoKFskNF0sIFslZGVmaW5lIGxyLnR5cGUgY2Fub25pY2FsLWxyXSwKK1tpZiB0ZXN0IDMyNzY3IC1sdCBgd2MgLWwgPCBpbnB1dC5jYDsgdGhlbgorICBDRkxBR1M9YGVjaG8gIiAkQ0ZMQUdTICIgfCBzZWQgLWUgJ3MvIC1wZWRhbnRpYyAvLydgCisgIENYWEZMQUdTPWBlY2hvICIgJENYWEZMQUdTICIgfCBzZWQgLWUgJ3MvIC1wZWRhbnRpYyAvLydgCitmaV0pCitBVF9DT01QSUxFKFtbaW5wdXRdXSkKKworQVRfUEFSU0VSX0NIRUNLKFtbLi9pbnB1dF1dLAorICAgICAgICAgICAgICAgIG00X2lmdmFsKFskMTBdLCBbbTRfZHF1b3RlKCQxMCldKSwKKyAgICAgICAgICAgICAgICBtNF9pZnZhbChbJDExXSwgW200X2RxdW90ZSgkMTEpXSksCisgICAgICAgICAgICAgICAgbTRfaWZ2YWwoWyQxMl0sIFttNF9kcXVvdGUoJDEyKV0pKQorCitBVF9CSVNPTl9PUFRJT05fUE9QREVGUworQVRfQ0xFQU5VUAorCittNF9wb3BkZWYoW0FUX0NPTkRfQ0FTRV0pXSkKIAogCiAKQEAgLTIxNSw0ICs5MTIsMTUgQEAKIAogQVRfSU5JVAogCisjIENhbm5vdCBhc3NpZ24gQ0MgYW5kIENGTEFHUyBoZXJlLCBzaW5jZSBhdGxvY2FsIGlzIGxvYWRlZCBhZnRlcgorIyBvcHRpb25zIGFyZSBwcm9jZXNzZWQsIHNvIHdlIGRvbid0IGtub3cgdGhlIHZhbHVlIG9mIENYWCBhbmQKKyMgQ1hYRkxBR1MgeWV0LgorIworIyBOb3RlIHRoYXQgaXQgYWxzbyBtZWFucyB0aGF0IGNvbW1hbmQgbGluZSB2YWx1ZXMgZm9yIENYWCBhbmQKKyMgQ1hYRkxBR1Mgd2lsbCBub3QgYmUgcHJvcGFnYXRlZCB0byBDQyBhbmQgQ0ZMQUdTLgorQVRfQVJHX09QVElPTihbY29tcGlsZS1jLXdpdGgtY3h4XSwKKyAgICAgICAgICAgICAgW2NvbXBpbGUgQyBwYXJzZXJzIHdpdGggdGhlIEMrKyBjb21waWxlcl0pCisKK0FUX0NPTE9SX1RFU1RTCisKIEFUX1RFU1RFRChbYmlzb25dKQpkaWZmIC0tZ2l0IGEvdGVzdHMvbmFtZWQtcmVmcy5hdCBiL3Rlc3RzL25hbWVkLXJlZnMuYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZiMDE1OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL25hbWVkLXJlZnMuYXQKQEAgLTAsMCArMSw3MDAgQEAKKyMgTmFtZWQgcmVmZXJlbmNlcyB0ZXN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvdGVzdCAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBGSVhNRTogRHVwbGljYXRpb24gd2l0aCBjYWxjLmF0LgorQVRfQkFOTkVSKFtbTmFtZWQgcmVmZXJlbmNlcyB0ZXN0cy5dXSkKKworQVRfU0VUVVAoW1R1dG9yaWFsIGNhbGN1bGF0b3JdKQorQVRfQklTT05fT1BUSU9OX1BVU0hERUZTCitBVF9EQVRBX0dSQU1NQVIoW3Rlc3QueV0sCitbWworJXsKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+Cit0eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKK0ZJTEUgKmlucHV0Oworc3RhdGljIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOworc3RhdGljIGludCBnbG9iYWxfY291bnQgPSAwOworc3RhdGljIGludCBwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCk7CitdQVRfWVlFUlJPUl9ERUNMQVJFWworXUFUX1lZTEVYX0RFQ0xBUkVbCislfQorCisldW5pb24KK3sKKyAgc2VtYW50aWNfdmFsdWUgaXZhbDsKK307CisKKyV0b2tlbiBDQUxDX0VPRiAwICJlbmQgb2YgaW5wdXQiCisldG9rZW4gPGl2YWw+IE5VTSAibnVtYmVyIgorJXR5cGUgIDxpdmFsPiBleHAKKworJW5vbmFzc29jICc9JyAgIC8qIGNvbXBhcmlzb24JICAgICAgICovCislbGVmdCAnLScgJysnCislbGVmdCAnKicgJy8nCislbGVmdCBORUcgICAgICAgLyogbmVnYXRpb24tLXVuYXJ5IG1pbnVzICovCislcmlnaHQgJ14nICAgICAgLyogZXhwb25lbnRpYXRpb24gICAgICAgICovCisKKyUlCitpbnB1dDoKKyAgbGluZQorfCBpbnB1dCBsaW5lICAgICAgICAge30KKzsKKworbGluZToKKyAgJ1xuJworfCBleHAgJ1xuJyAgICAgICAgICAge30KKzsKKworZXhwOgorICBOVU0gICAgICAgICAgICAgICAgeyAkJCA9ICROVU07IH0KK3wgZXhwW2xdICc9JyBleHBbcl0KKyAgeworICAgIGlmICgkbCAhPSAkcikKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImNhbGM6IGVycm9yOiAlZCAhPSAlZFxuIiwgJGwsICRyKTsKKyAgICAkJCA9ICRsOworICB9Cit8IGV4cFt4XSAnKycgeyAkPGl2YWw+JCA9ICR4OyB9IFtsXSBleHBbcl0gIHsgJCQgPSAkPGl2YWw+bCArICRyOyAgICB9Cit8IGV4cFtsXSAnLScgZXhwW3JdICB7ICQkID0gJGwgLSAkcjsgICAgICAgIH0KK3wgZXhwW2xdICcqJyBleHBbcl0gIHsgJCQgPSAkbCAqICRyOyAgICAgICAgfQorfCBleHBbbF0gJy8nIGV4cFtyXSAgeyAkJCA9ICRsIC8gJHI7ICAgICAgICB9Cit8ICctJyBleHAgICVwcmVjIE5FRyB7ICQkID0gLSQyOyAgICAgICAgICAgIH0KK3wgZXhwW2xdICdeJyBleHBbcl0gIHsgJCQgPSBwb3dlciAoJGwsICRyKTsgfQorfCAnKCcgZXhwW2VdICcpJyAgICAgeyAkJCA9ICRlOyAgICAgICAgICAgfQorfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7IHl5ZXJyb2s7ICB9Cit8ICchJyAgICAgICAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KK3wgJy0nIGVycm9yICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQorOworJSUKK11BVF9ZWUVSUk9SX0RFRklORVsKK3N0YXRpYyBpbnQgZ2V0X2NoYXIgKHZvaWQpCit7CisgIGludCByZXMgPSBnZXRjIChpbnB1dCk7CisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKGludCBjKQoreworICB1bmdldGMgKGMsIGlucHV0KTsKK30KKworc3RhdGljIGludCByZWFkX3NpZ25lZF9pbnRlZ2VyICh2b2lkKQoreworICBpbnQgYyA9IGdldF9jaGFyICgpOworICBpbnQgc2lnbiA9IDE7CisgIGludCBuID0gMDsKKyAgaWYgKGMgPT0gJy0nKQorICAgIHsKKyAgICAgIGMgPSBnZXRfY2hhciAoKTsKKyAgICAgIHNpZ24gPSAtMTsKKyAgICB9CisgIHdoaWxlIChpc2RpZ2l0IChjKSkKKyAgICB7CisgICAgICBuID0gMTAgKiBuICsgKGMgLSAnMCcpOworICAgICAgYyA9IGdldF9jaGFyICgpOworICAgIH0KKyAgdW5nZXRfY2hhciAoIGMpOworICByZXR1cm4gc2lnbiAqIG47Cit9CisKK3N0YXRpYyBpbnQKK3l5bGV4ICh2b2lkKQoreworICBpbnQgYzsKKyAgLyogU2tpcCB3aGl0ZSBzcGFjZS4gICovCisgIHdoaWxlICgoYyA9IGdldF9jaGFyICgpKSA9PSAnICcgfHwgYyA9PSAnXHQnKSB7fQorCisgIC8qIHByb2Nlc3MgbnVtYmVycyAgICovCisgIGlmIChjID09ICcuJyB8fCBpc2RpZ2l0IChjKSkKKyAgICB7CisgICAgICB1bmdldF9jaGFyICggYyk7CisgICAgICAoeXlsdmFsKS5pdmFsID0gcmVhZF9zaWduZWRfaW50ZWdlciAoKTsKKyAgICAgIHJldHVybiBOVU07CisgICAgfQorCisgIC8qIFJldHVybiBlbmQtb2YtZmlsZS4gICovCisgIGlmIChjID09IEVPRikKKyAgICByZXR1cm4gQ0FMQ19FT0Y7CisKKyAgLyogUmV0dXJuIHNpbmdsZSBjaGFycy4gKi8KKyAgcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBpbnQgcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpCit7CisgIGludCByZXMgPSAxOworICBhc3NlcnQgKDAgPD0gZXhwb25lbnQpOworICBmb3IgKC8qIE5pZW50ZSAqLzsgZXhwb25lbnQ7IC0tZXhwb25lbnQpCisgICAgcmVzICo9IGJhc2U7CisgIHJldHVybiByZXM7Cit9CisKK2ludCBtYWluIChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisgIHNlbWFudGljX3ZhbHVlIHJlc3VsdCA9IDA7CisgIGludCBjb3VudCA9IDA7CisgIGludCBzdGF0dXM7CisgIGlmIChhcmdjID09IDIpCisgICAgaW5wdXQgPSBmb3BlbiAoYXJndlsxXSwgInIiKTsKKyAgZWxzZQorICAgIGlucHV0ID0gc3RkaW47CisgIGlmICghaW5wdXQpCisgICAgeworICAgICAgcGVycm9yIChhcmd2WzFdKTsKKyAgICAgIHJldHVybiAzOworICAgIH0KKyAgc3RhdHVzID0geXlwYXJzZSAoKTsKKyAgZmNsb3NlIChpbnB1dCk7CisgIGFzc2VydCAoZ2xvYmFsX3Jlc3VsdCA9PSByZXN1bHQpOworICBhc3NlcnQgKGdsb2JhbF9jb3VudCA9PSBjb3VudCk7CisgIHJldHVybiBzdGF0dXM7Cit9CitdXSkKKworQVRfREFUQShbaW5wdXQudHh0XSwKK1tbCisxICsgMiAqIDMgPSA3CisxICsgMiAqIC0zID0gLTUKKy0xXjIgPSAtMQorKC0xKV4yID0gMQorLS0tMSA9IC0xCisxIC0gMiAtIDMgPSAtNAorMSAtICgyIC0gMykgPSAyCisyXjJeMyA9IDI1NgorKDJeMileMyA9IDY0CitdXSkKKworQVRfQklTT05fQ0hFQ0soWy1vIHRlc3QuYyB0ZXN0LnldKQorQVRfQ09NUElMRShbW3Rlc3RdXSkKK0FUX1BBUlNFUl9DSEVDSyhbLi90ZXN0IGlucHV0LnR4dF0sIDAsIFtdLCBbc3RkZXJyXSkKK0FUX0JJU09OX09QVElPTl9QT1BERUZTCitBVF9DTEVBTlVQCisKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKK0FUX1NFVFVQKFtVbmRlZmluZWQgYW5kIGFtYmlndW91cyByZWZlcmVuY2VzXSkKK0FUX0JJU09OX09QVElPTl9QVVNIREVGUworQVRfREFUQV9HUkFNTUFSKFt0ZXN0LnldLAorW1sKKyV7CitzdGF0aWMgaW50IHBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KTsKK11BVF9ZWUVSUk9SX0RFQ0xBUkVbCitdQVRfWVlMRVhfREVDTEFSRVsKKyV9CisKKyV1bmlvbgoreworICBpbnQgaXZhbDsKK307CisKKyV0b2tlbiBDQUxDX0VPRiAwICJlbmQgb2YgaW5wdXQiCisldG9rZW4gPGl2YWw+IE5VTSAibnVtYmVyIgorJXR5cGUgIDxpdmFsPiBleHAKKworJW5vbmFzc29jICc9JyAgIC8qIGNvbXBhcmlzb24JICAgICAgICovCislbGVmdCAnLScgJysnCislbGVmdCAnKicgJy8nCislbGVmdCBORUcgICAgICAgLyogbmVnYXRpb24tLXVuYXJ5IG1pbnVzICovCislcmlnaHQgJ14nICAgICAgLyogZXhwb25lbnRpYXRpb24gICAgICAgICovCisKKyUlCitpbnB1dDoKKyAgbGluZQorfCBpbnB1dCBsaW5lICAgICAgICAge30KKzsKKworbGluZToKKyAgJ1xuJworfCBleHAgJ1xuJyAgICAgICAgICAge30KKzsKKworZXhwOgorICBOVU0geyAkJCA9ICROVU07IH0KK3wgZXhwW2xdICc9JyBleHBbcl0KKyAgeworICAgIGlmICgkbCAhPSAkcikKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImNhbGM6IGVycm9yOiAlZCAhPSAlZFxuIiwgJGwsICRyKTsKKyAgICAkJCA9ICRsOworICB9Cit8IGV4cFt4XSAnKycgeyAkPGl2YWw+JCA9ICR4OyB9IFtsXSBleHBbcl0geyAkJCA9ICQ8aXZhbD5sbzkgKyAkcjsgfQorfCBleHBbeF0gJy0nIHsgJDxpdmFsPiQgPSAkeDsgfSBbbF0gZXhwW3JdIHsgJCQgPSAkPGl2YWw+ZXhwIC0gJHI7IH0KK3wgZXhwW3hdICcqJyB7ICQ8aXZhbD4kID0gJHg7IH0gW2xdIGV4cFtyXSB7ICQkID0gJGwgKiAkcjsgfQorfCBleHBbbF0gJy8nIGV4cFtyXSAgeyAkJCA9ICRsIC8gJHI7ICAgICAgICB9Cit8ICctJyBleHAgICVwcmVjIE5FRyB7ICQkID0gLSQyOyAgICAgICAgICAgIH0KK3wgZXhwW2xdICdeJyBleHBbcl0gIHsgJCQgPSBwb3dlciAoJGwsICRyMTIpOyB9Cit8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJGV4cG87ICAgICAgICAgICB9Cit8ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgeXllcnJvazsgIH0KK3wgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQorfCAnLScgZXJyb3IgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9Cis7CislJQorXV0pCisKK0FUX0JJU09OX0NIRUNLKFstbyB0ZXN0LmMgdGVzdC55XSwgMSwgW10sCitbW3Rlc3QueTo1MC41MS02MDogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnJDxpdmFsPmxvOScKK3Rlc3QueTo1MC4zLTY4OiAgICAgIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogbG85Cit0ZXN0Lnk6NTEuNTEtNjA6IHdhcm5pbmc6IG1pc2xlYWRpbmcgcmVmZXJlbmNlOiAnJDxpdmFsPmV4cCcKK3Rlc3QueTo0Mi4xLTM6ICAgICAgIHJlZmVycyB0bzogJGV4cCBhdCAkJAordGVzdC55OjUxLjc6ICAgICAgICAgcG9zc2libHkgbWVhbnQ6ICR4LCBoaWRpbmcgJGV4cCBhdCAkMQordGVzdC55OjUxLjQxOiAgICAgICAgcG9zc2libHkgbWVhbnQ6ICRyLCBoaWRpbmcgJGV4cCBhdCAkNAordGVzdC55OjUyLjUxLTUyOiBlcnJvcjogJGwgb2YgJ2V4cCcgaGFzIG5vIGRlY2xhcmVkIHR5cGUKK3Rlc3QueTo1NS40MC00MzogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnJHIxMicKK3Rlc3QueTo1NS4zLTQ3OiAgICAgIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogcjEyCit0ZXN0Lnk6NTYuMjktMzM6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJyRleHBvJwordGVzdC55OjU2LjMtNDY6ICAgICAgc3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiBleHBvCitdXSkKK0FUX0JJU09OX09QVElPTl9QT1BERUZTCitBVF9DTEVBTlVQCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0FUX1NFVFVQKFtNaXNsZWFkaW5nIHJlZmVyZW5jZXNdKQorQVRfREFUQV9HUkFNTUFSKFt0ZXN0LnldLAorW1sKKyUlCitzdGFydDogZm9vIGZvby5iYXIgeyAkZm9vLmJhcjsgfQorZm9vOiAnMScKK2Zvby5iYXI6ICcyJworXV0pCitBVF9CSVNPTl9DSEVDSyhbLW8gdGVzdC5jIHRlc3QueV0sIDAsIFtdLAorW1t0ZXN0Lnk6MTEuMjItMjk6IHdhcm5pbmc6IG1pc2xlYWRpbmcgcmVmZXJlbmNlOiAnJGZvby5iYXInCit0ZXN0Lnk6MTEuOC0xMDogICAgICByZWZlcnMgdG86ICRmb28gYXQgJDEKK3Rlc3QueToxMS4xMi0xODogICAgIHBvc3NpYmx5IG1lYW50OiAkW2Zvby5iYXJdIGF0ICQyCitdXSkKK0FUX0NMRUFOVVAKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQVRfU0VUVVAoW01hbnkga2luZHMgb2YgZXJyb3JzXSkKK0FUX0RBVEFfR1JBTU1BUihbdGVzdC55XSwKK1tbCisldG9rZW4gSURFTlQKKyV0b2tlbiBOVU1CRVIKKyV0b2tlbiBBU1NJR05PUAorJXRva2VuIElGCisldG9rZW4gSUYxCisldG9rZW4gVEhFTgorJXRva2VuIEVMU0UKKyV0b2tlbiBGSQorJXRva2VuIFdISUxFCisldG9rZW4gRE8KKyV0b2tlbiBPRAorJXN0YXJ0IHByb2dyYW0KKyUlCitpZl9zdG10MTogSUYgZXhwcltjb25kXSBUSEVOIHN0bXRbdGhlbl0gRUxTRSBzdG10Lmxpc3RbZWxzZV0gRkkKKyAgICAgICAgICB7ICRpZl9zdG10MSA9IG5ldyBJZlN0bXQoJGNvbmQxLCAkdGhlbi5mMSwgJGVsc2UpOyB9OworaWZfc3RtdDI6IElGIGV4cHJbY29uZF0gVEhFTiBzdG10W3RoZW5dIEZJCisgICAgICAgICAgeyAkaWZfc3RtdDIgPSBuZXcgSWZTdG10KCRjb25kLCAkc3RtdC5maWVsZCwgMCk7IH07CitpZl9zdG10MzogSUYgZXhwcltjb25kXSBUSEVOIHN0bXQubGlzdCBGSQorICAgICAgICAgIHsgJGlmX3N0bXQzID0gbmV3IElmU3RtdCgkY29uZCwgJHN0bXQubGlzdCwgMCk7IH07CitpZl9zdG10NDogSUYgZXhwcltjb25kXSBUSEVOIHN0bXRbeHl6XSBFTFNFIHN0bXRbeHl6XSBGSQorICAgICAgICAgIHsgJGlmX3N0bXQ0ID0gbmV3IElmU3RtdCgkY29uZCwgJHh5eiwgJGNvbmQpOyB9OworaWZfc3RtdDU6IElGIGV4cHJbY29uZF0gVEhFTiBzdG10Lmxpc3RbdGhlbl0gRUxTRSBzdG10Lmxpc3RbZWxzZV0gRkkKKyAgICAgICAgICB7ICRpZl9zdG10NSA9IG5ldyBJZlN0bXQoJGNvbmQsICRzdG10Lmxpc3QsICRlbHNlKTsgfTsKK2lmX3N0bXQ2OiBJRiBleHByW2NvbmRdIFRIRU4gc3RtdC5saXN0W3RoZW5dIEVMU0Ugc3RtdC5saXN0W2Vsc2VdIEZJCisgICAgICAgICAgeyAkaWZfc3RtdDYgPSBuZXcgSWZTdG10KCRjb25kLCAkc3RtdC5saXN0LmZpZWxkLCAkZWxzZSk7IH07CitpZl9zdG10NzogSUYgZXhwcltjb25kXSBUSEVOIHN0bXQubGlzdFt0aGVuXSBFTFNFIHN0bXQubGlzdFtlbHNlXSBGSQorICAgICAgICAgIHsgJGlmX3N0bXQ3ID0gbmV3IElmU3RtdCgkY29uZCwgJFtzdG10Lmxpc3RdLmZpZWxkLCAkZWxzZSk7IH07CitpZl9zdG10ODogSUYgZXhwcltjb25kXSBUSEVOIHN0bXQubGlzdFt0aGVuLjFdIEVMU0Ugc3RtdC5saXN0W2Vsc2VdIEZJCisgICAgICAgICAgeyAkaWZfc3RtdDggPSBuZXcgSWZTdG10KCRjb25kLCAkdGhlbi4xLCAkZWxzZSk7IH07CitpZl9zdG10OTogSUYgZXhwcltjb25kXSBUSEVOIHN0bXQubGlzdFt0aGVuLjFdIEVMU0Ugc3RtdC5saXN0W2Vsc2VdIEZJCisgICAgICAgICAgeyAkaWZfc3RtdDkgPSBuZXcgSWZTdG10KCRjb25kLCAkdGhlbi4xLmZpZWxkLCAkZWxzZSk7IH07CitpZl9zdG10MTA6IElGIGV4cHJbY29uZF0gVEhFTiBzdG10W3N0bXQueF0gRkkKKyAgICAgICAgICB7ICRpZl9zdG10MTAgPSBuZXcgSWZTdG10KCRjb25kLCAkc3RtdC54LCAwKTsgfTsKK2lmLXN0bXQtYTogSUYgZXhwcltjb25kXSBUSEVOIHN0bXQubGlzdFt0aGVuXSBFTFNFIHN0bXQubGlzdFtlbHNlXSBGSQorICAgICAgICAgIHsgJGlmLXN0bXQtYSA9IG5ldyBJZlN0bXQoJGNvbmQsICR0aGVuLCAkZWxzZSk7IH07CitpZi1zdG10LWI6IElGIGV4cHJbY29uZF0gVEhFTiBpZi1zdG10LWFbdGhlbi1hXSBFTFNFIHN0bXQubGlzdFtlbHNlXSBGSQorICAgICAgICAgIHsgJFtpZi1zdG10LWJdID0gbmV3IElmU3RtdCgkY29uZCwgJHRoZW4tYS5mLCAkZWxzZSk7IH07Citwcm9ncmFtOiBzdG10Lmxpc3Q7CitzdG10Lmxpc3Q6ICBzdG10ICc7JyBzdG10Lmxpc3QgeyAkMy0+aW5zZXJ0KCRzdG10KTsgJCQgPSAkMzsgfQorICAgICAgICB8ICAgc3RtdCAnOycgeyBTTCA9IG5ldyBTdG10TGlzdCgpOyAgU0wtPmluc2VydCgkMSk7ICQkID0gU0w7IH0KKyAgICAgICAgOworc3RtdDogIGFzc2lnbl9zdG10IHsgJCQgPSAkMTsgfQorICAgIHwgIGlmX3N0bXQgeyAkJCA9ICQxOyB9CisgICAgfCAgaWZfc3RtdDEgeyAkJCA9ICQxOyB9CisgICAgfCAgd2hpbGVfc3RtdCB7ICQkID0gJDE7IH0KKyAgICA7Cithc3NpZ25fc3RtdDogSURFTlQgQVNTSUdOT1AgZXhwcgorICAgICAgIHsgJCQgPSBuZXcgQXNzaWduU3RtdChzdHJpbmcoJDEpLCQzKTsgfTsKK2lmX3N0bXQ6IElGIGV4cHJbY29uZF0gVEhFTiBzdG10Lmxpc3QgRkkKKyAgICAgICB7ICRpZl9zdG10ID0gbmV3IElmU3RtdCgkY29uZCwgJFtzdG10Lmxpc3RdLCAwKTsgfTsKK3doaWxlX3N0bXRbcmVzXTogV0hJTEUgZXhwciBETyBzdG10Lmxpc3QgT0QKKyAgICAgICB7ICRyZXMgPSBuZXcgV2hpbGVTdG10KCRbZXhwcl0sICRbc3RtdC5saXN0XSk7IH07CitleHByOiBleHByICcrJyB0ZXJtICAgeyAkJCA9IG5ldyBQbHVzKCQxLCQzKTsgfQorICAgIHwgZXhwciAnLScgdGVybSAgIHsgJCQgPSBuZXcgTWludXMoJDEsJDMpOyB9CisgICAgfCB0ZXJtICAgICAgICAgICAgeyAkJCA9ICQxOyB9CisgICAgOwordGVybTogdGVybSAnKicgZmFjdG9yICAgeyAkJCA9IG5ldyBUaW1lcygkMSwkMyk7IH0KKyAgICB8IGZhY3RvciAgICAgICAgICAgIHsgJCQgPSAkMTsgfQorICAgIDsKK2ZhY3RvcjogICAgICcoJyBleHByICcpJyAgeyAkJCA9ICQyOyB9CisgICAgfCAgICAgICBOVU1CRVIgeyAkJCA9IG5ldyBOdW1iZXIoJDEpOyB9CisgICAgfCAgICAgICBJREVOVCB7ICQkID0gbmV3IElkZW50KHN0cmluZygkMSkpOyB9CisgICAgOworXV0pCitBVF9CSVNPTl9DSEVDSyhbLW8gdGVzdC5jIHRlc3QueV0sIDEsIFtdLAorW1t0ZXN0Lnk6MjQuMzYtNDE6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJyRjb25kMScKK3Rlc3QueToyMy4xMS0yNC42MjogIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogY29uZDEKK3Rlc3QueToyNi40My01MzogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnJHN0bXQuZmllbGQnCit0ZXN0Lnk6MjUuMTEtMjYuNjA6ICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IHN0bXQKK3Rlc3QueToyNS4zNS0zODogICAgIHBvc3NpYmx5IG1lYW50OiAkdGhlbi5maWVsZCwgaGlkaW5nICRzdG10LmZpZWxkIGF0ICQ0Cit0ZXN0Lnk6MjguNDMtNTI6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJyRzdG10Lmxpc3QnCit0ZXN0Lnk6MjcuMTEtMjguNTk6ICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IHN0bXQKK3Rlc3QueToyNy4zMC0zODogICAgIHBvc3NpYmx5IG1lYW50OiAkW3N0bXQubGlzdF0gYXQgJDQKK3Rlc3QueTozMC40My00NjogZXJyb3I6IGFtYmlndW91cyByZWZlcmVuY2U6ICckeHl6JwordGVzdC55OjI5LjM1LTM3OiAgICAgcmVmZXJzIHRvOiAkeHl6IGF0ICQ0Cit0ZXN0Lnk6MjkuNTAtNTI6ICAgICByZWZlcnMgdG86ICR4eXogYXQgJDYKK3Rlc3QueTozMi40My01MjogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnJHN0bXQubGlzdCcKK3Rlc3QueTozMS4xMS0zMi42MzogIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogc3RtdAordGVzdC55OjMxLjQwLTQzOiAgICAgcG9zc2libHkgbWVhbnQ6ICR0aGVuLCBoaWRpbmcgJFtzdG10Lmxpc3RdIGF0ICQ0Cit0ZXN0Lnk6MzEuNjEtNjQ6ICAgICBwb3NzaWJseSBtZWFudDogJGVsc2UsIGhpZGluZyAkW3N0bXQubGlzdF0gYXQgJDYKK3Rlc3QueTozNC40My01ODogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnJHN0bXQubGlzdC5maWVsZCcKK3Rlc3QueTozMy4xMS0zNC42OTogIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogc3RtdAordGVzdC55OjMzLjQwLTQzOiAgICAgcG9zc2libHkgbWVhbnQ6ICR0aGVuLmZpZWxkLCBoaWRpbmcgJFtzdG10Lmxpc3RdLmZpZWxkIGF0ICQ0Cit0ZXN0Lnk6MzMuNjEtNjQ6ICAgICBwb3NzaWJseSBtZWFudDogJGVsc2UuZmllbGQsIGhpZGluZyAkW3N0bXQubGlzdF0uZmllbGQgYXQgJDYKK3Rlc3QueTozNi40My01NDogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnJFtzdG10Lmxpc3RdJwordGVzdC55OjM1LjExLTM2LjcxOiAgc3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiBzdG10Lmxpc3QKK3Rlc3QueTozNS40MC00MzogICAgIHBvc3NpYmx5IG1lYW50OiAkdGhlbiwgaGlkaW5nICRbc3RtdC5saXN0XSBhdCAkNAordGVzdC55OjM1LjYxLTY0OiAgICAgcG9zc2libHkgbWVhbnQ6ICRlbHNlLCBoaWRpbmcgJFtzdG10Lmxpc3RdIGF0ICQ2Cit0ZXN0Lnk6MzguNDMtNDk6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJyR0aGVuLjEnCit0ZXN0Lnk6MzcuMTEtMzguNjA6ICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IHRoZW4KK3Rlc3QueTozNy40MC00NTogICAgIHBvc3NpYmx5IG1lYW50OiAkW3RoZW4uMV0gYXQgJDQKK3Rlc3QueTo0MC40My01NTogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnJHRoZW4uMS5maWVsZCcKK3Rlc3QueTozOS4xMS00MC42NjogIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogdGhlbgordGVzdC55OjM5LjQwLTQ1OiAgICAgcG9zc2libHkgbWVhbnQ6ICRbdGhlbi4xXS5maWVsZCBhdCAkNAordGVzdC55OjQyLjQ0LTUwOiBlcnJvcjogaW52YWxpZCByZWZlcmVuY2U6ICckc3RtdC54JwordGVzdC55OjQxLjEyLTQyLjU3OiAgc3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiBzdG10Cit0ZXN0Lnk6NDEuMzYtNDE6ICAgICBwb3NzaWJseSBtZWFudDogJFtzdG10LnhdLngsIGhpZGluZyAkc3RtdC54IGF0ICQ0Cit0ZXN0Lnk6NDEuMzYtNDE6ICAgICBwb3NzaWJseSBtZWFudDogJFtzdG10LnhdIGF0ICQ0Cit0ZXN0Lnk6NDQuMTMtMjI6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJyRpZi1zdG10LWEnCit0ZXN0Lnk6NDMuMTItNDQuNTk6ICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IGlmCit0ZXN0Lnk6NDMuMS05OiAgICAgICBwb3NzaWJseSBtZWFudDogJFtpZi1zdG10LWFdIGF0ICQkCit0ZXN0Lnk6NDYuNDYtNTQ6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJyR0aGVuLWEuZicKK3Rlc3QueTo0NS4xMi00Ni42NTogIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogdGhlbgordGVzdC55OjQ1LjQxLTQ2OiAgICAgcG9zc2libHkgbWVhbnQ6ICRbdGhlbi1hXS5mIGF0ICQ0CitdXSkKKworQVRfQklTT05fQ0hFQ0soWy1mY2FyZXQgLW8gdGVzdC5jIHRlc3QueV0sIDEsIFtdLAorW1t0ZXN0Lnk6MjQuMzYtNDE6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJyRjb25kMScKKyAgICAgICAgICAgeyAkaWZfc3RtdDEgPSBuZXcgSWZTdG10KCRjb25kMSwgJHRoZW4uZjEsICRlbHNlKTsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXgordGVzdC55OjIzLjExLTI0LjYyOiAgc3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiBjb25kMQorIGlmX3N0bXQxOiBJRiBleHByW2NvbmRdIFRIRU4gc3RtdFt0aGVuXSBFTFNFIHN0bXQubGlzdFtlbHNlXSBGSQorICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgordGVzdC55OjI2LjQzLTUzOiBlcnJvcjogaW52YWxpZCByZWZlcmVuY2U6ICckc3RtdC5maWVsZCcKKyAgICAgICAgICAgeyAkaWZfc3RtdDIgPSBuZXcgSWZTdG10KCRjb25kLCAkc3RtdC5maWVsZCwgMCk7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl4KK3Rlc3QueToyNS4xMS0yNi42MDogIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogc3RtdAorIGlmX3N0bXQyOiBJRiBleHByW2NvbmRdIFRIRU4gc3RtdFt0aGVuXSBGSQorICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgordGVzdC55OjI1LjM1LTM4OiAgICAgcG9zc2libHkgbWVhbnQ6ICR0aGVuLmZpZWxkLCBoaWRpbmcgJHN0bXQuZmllbGQgYXQgJDQKKyBpZl9zdG10MjogSUYgZXhwcltjb25kXSBUSEVOIHN0bXRbdGhlbl0gRkkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXgordGVzdC55OjI4LjQzLTUyOiBlcnJvcjogaW52YWxpZCByZWZlcmVuY2U6ICckc3RtdC5saXN0JworICAgICAgICAgICB7ICRpZl9zdG10MyA9IG5ldyBJZlN0bXQoJGNvbmQsICRzdG10Lmxpc3QsIDApOyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl4KK3Rlc3QueToyNy4xMS0yOC41OTogIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogc3RtdAorIGlmX3N0bXQzOiBJRiBleHByW2NvbmRdIFRIRU4gc3RtdC5saXN0IEZJCisgICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK3Rlc3QueToyNy4zMC0zODogICAgIHBvc3NpYmx5IG1lYW50OiAkW3N0bXQubGlzdF0gYXQgJDQKKyBpZl9zdG10MzogSUYgZXhwcltjb25kXSBUSEVOIHN0bXQubGlzdCBGSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eCit0ZXN0Lnk6MzAuNDMtNDY6IGVycm9yOiBhbWJpZ3VvdXMgcmVmZXJlbmNlOiAnJHh5eicKKyAgICAgICAgICAgeyAkaWZfc3RtdDQgPSBuZXcgSWZTdG10KCRjb25kLCAkeHl6LCAkY29uZCk7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXgordGVzdC55OjI5LjM1LTM3OiAgICAgcmVmZXJzIHRvOiAkeHl6IGF0ICQ0CisgaWZfc3RtdDQ6IElGIGV4cHJbY29uZF0gVEhFTiBzdG10W3h5el0gRUxTRSBzdG10W3h5el0gRkkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCit0ZXN0Lnk6MjkuNTAtNTI6ICAgICByZWZlcnMgdG86ICR4eXogYXQgJDYKKyBpZl9zdG10NDogSUYgZXhwcltjb25kXSBUSEVOIHN0bXRbeHl6XSBFTFNFIHN0bXRbeHl6XSBGSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK3Rlc3QueTozMi40My01MjogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnJHN0bXQubGlzdCcKKyAgICAgICAgICAgeyAkaWZfc3RtdDUgPSBuZXcgSWZTdG10KCRjb25kLCAkc3RtdC5saXN0LCAkZWxzZSk7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXgordGVzdC55OjMxLjExLTMyLjYzOiAgc3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiBzdG10CisgaWZfc3RtdDU6IElGIGV4cHJbY29uZF0gVEhFTiBzdG10Lmxpc3RbdGhlbl0gRUxTRSBzdG10Lmxpc3RbZWxzZV0gRkkKKyAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgordGVzdC55OjMxLjQwLTQzOiAgICAgcG9zc2libHkgbWVhbnQ6ICR0aGVuLCBoaWRpbmcgJFtzdG10Lmxpc3RdIGF0ICQ0CisgaWZfc3RtdDU6IElGIGV4cHJbY29uZF0gVEhFTiBzdG10Lmxpc3RbdGhlbl0gRUxTRSBzdG10Lmxpc3RbZWxzZV0gRkkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eCit0ZXN0Lnk6MzEuNjEtNjQ6ICAgICBwb3NzaWJseSBtZWFudDogJGVsc2UsIGhpZGluZyAkW3N0bXQubGlzdF0gYXQgJDYKKyBpZl9zdG10NTogSUYgZXhwcltjb25kXSBUSEVOIHN0bXQubGlzdFt0aGVuXSBFTFNFIHN0bXQubGlzdFtlbHNlXSBGSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl4KK3Rlc3QueTozNC40My01ODogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnJHN0bXQubGlzdC5maWVsZCcKKyAgICAgICAgICAgeyAkaWZfc3RtdDYgPSBuZXcgSWZTdG10KCRjb25kLCAkc3RtdC5saXN0LmZpZWxkLCAkZWxzZSk7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXgordGVzdC55OjMzLjExLTM0LjY5OiAgc3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiBzdG10CisgaWZfc3RtdDY6IElGIGV4cHJbY29uZF0gVEhFTiBzdG10Lmxpc3RbdGhlbl0gRUxTRSBzdG10Lmxpc3RbZWxzZV0gRkkKKyAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgordGVzdC55OjMzLjQwLTQzOiAgICAgcG9zc2libHkgbWVhbnQ6ICR0aGVuLmZpZWxkLCBoaWRpbmcgJFtzdG10Lmxpc3RdLmZpZWxkIGF0ICQ0CisgaWZfc3RtdDY6IElGIGV4cHJbY29uZF0gVEhFTiBzdG10Lmxpc3RbdGhlbl0gRUxTRSBzdG10Lmxpc3RbZWxzZV0gRkkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eCit0ZXN0Lnk6MzMuNjEtNjQ6ICAgICBwb3NzaWJseSBtZWFudDogJGVsc2UuZmllbGQsIGhpZGluZyAkW3N0bXQubGlzdF0uZmllbGQgYXQgJDYKKyBpZl9zdG10NjogSUYgZXhwcltjb25kXSBUSEVOIHN0bXQubGlzdFt0aGVuXSBFTFNFIHN0bXQubGlzdFtlbHNlXSBGSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl4KK3Rlc3QueTozNi40My01NDogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnJFtzdG10Lmxpc3RdJworICAgICAgICAgICB7ICRpZl9zdG10NyA9IG5ldyBJZlN0bXQoJGNvbmQsICRbc3RtdC5saXN0XS5maWVsZCwgJGVsc2UpOyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eXgordGVzdC55OjM1LjExLTM2LjcxOiAgc3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiBzdG10Lmxpc3QKKyBpZl9zdG10NzogSUYgZXhwcltjb25kXSBUSEVOIHN0bXQubGlzdFt0aGVuXSBFTFNFIHN0bXQubGlzdFtlbHNlXSBGSQorICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCit0ZXN0Lnk6MzUuNDAtNDM6ICAgICBwb3NzaWJseSBtZWFudDogJHRoZW4sIGhpZGluZyAkW3N0bXQubGlzdF0gYXQgJDQKKyBpZl9zdG10NzogSUYgZXhwcltjb25kXSBUSEVOIHN0bXQubGlzdFt0aGVuXSBFTFNFIHN0bXQubGlzdFtlbHNlXSBGSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl4KK3Rlc3QueTozNS42MS02NDogICAgIHBvc3NpYmx5IG1lYW50OiAkZWxzZSwgaGlkaW5nICRbc3RtdC5saXN0XSBhdCAkNgorIGlmX3N0bXQ3OiBJRiBleHByW2NvbmRdIFRIRU4gc3RtdC5saXN0W3RoZW5dIEVMU0Ugc3RtdC5saXN0W2Vsc2VdIEZJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXgordGVzdC55OjM4LjQzLTQ5OiBlcnJvcjogaW52YWxpZCByZWZlcmVuY2U6ICckdGhlbi4xJworICAgICAgICAgICB7ICRpZl9zdG10OCA9IG5ldyBJZlN0bXQoJGNvbmQsICR0aGVuLjEsICRlbHNlKTsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eCit0ZXN0Lnk6MzcuMTEtMzguNjA6ICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IHRoZW4KKyBpZl9zdG10ODogSUYgZXhwcltjb25kXSBUSEVOIHN0bXQubGlzdFt0aGVuLjFdIEVMU0Ugc3RtdC5saXN0W2Vsc2VdIEZJCisgICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgordGVzdC55OjM3LjQwLTQ1OiAgICAgcG9zc2libHkgbWVhbnQ6ICRbdGhlbi4xXSBhdCAkNAorIGlmX3N0bXQ4OiBJRiBleHByW2NvbmRdIFRIRU4gc3RtdC5saXN0W3RoZW4uMV0gRUxTRSBzdG10Lmxpc3RbZWxzZV0gRkkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4KK3Rlc3QueTo0MC40My01NTogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnJHRoZW4uMS5maWVsZCcKKyAgICAgICAgICAgeyAkaWZfc3RtdDkgPSBuZXcgSWZTdG10KCRjb25kLCAkdGhlbi4xLmZpZWxkLCAkZWxzZSk7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl5eXgordGVzdC55OjM5LjExLTQwLjY2OiAgc3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiB0aGVuCisgaWZfc3RtdDk6IElGIGV4cHJbY29uZF0gVEhFTiBzdG10Lmxpc3RbdGhlbi4xXSBFTFNFIHN0bXQubGlzdFtlbHNlXSBGSQorICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK3Rlc3QueTozOS40MC00NTogICAgIHBvc3NpYmx5IG1lYW50OiAkW3RoZW4uMV0uZmllbGQgYXQgJDQKKyBpZl9zdG10OTogSUYgZXhwcltjb25kXSBUSEVOIHN0bXQubGlzdFt0aGVuLjFdIEVMU0Ugc3RtdC5saXN0W2Vsc2VdIEZJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eCit0ZXN0Lnk6NDIuNDQtNTA6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJyRzdG10LngnCisgICAgICAgICAgIHsgJGlmX3N0bXQxMCA9IG5ldyBJZlN0bXQoJGNvbmQsICRzdG10LngsIDApOyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eCit0ZXN0Lnk6NDEuMTItNDIuNTc6ICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IHN0bXQKKyBpZl9zdG10MTA6IElGIGV4cHJbY29uZF0gVEhFTiBzdG10W3N0bXQueF0gRkkKKyAgICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK3Rlc3QueTo0MS4zNi00MTogICAgIHBvc3NpYmx5IG1lYW50OiAkW3N0bXQueF0ueCwgaGlkaW5nICRzdG10LnggYXQgJDQKKyBpZl9zdG10MTA6IElGIGV4cHJbY29uZF0gVEhFTiBzdG10W3N0bXQueF0gRkkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXgordGVzdC55OjQxLjM2LTQxOiAgICAgcG9zc2libHkgbWVhbnQ6ICRbc3RtdC54XSBhdCAkNAorIGlmX3N0bXQxMDogSUYgZXhwcltjb25kXSBUSEVOIHN0bXRbc3RtdC54XSBGSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eCit0ZXN0Lnk6NDQuMTMtMjI6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJyRpZi1zdG10LWEnCisgICAgICAgICAgIHsgJGlmLXN0bXQtYSA9IG5ldyBJZlN0bXQoJGNvbmQsICR0aGVuLCAkZWxzZSk7IH07CisgICAgICAgICAgICAgXl5eXl5eXl5eXgordGVzdC55OjQzLjEyLTQ0LjU5OiAgc3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiBpZgorIGlmLXN0bXQtYTogSUYgZXhwcltjb25kXSBUSEVOIHN0bXQubGlzdFt0aGVuXSBFTFNFIHN0bXQubGlzdFtlbHNlXSBGSQorICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgordGVzdC55OjQzLjEtOTogICAgICAgcG9zc2libHkgbWVhbnQ6ICRbaWYtc3RtdC1hXSBhdCAkJAorIGlmLXN0bXQtYTogSUYgZXhwcltjb25kXSBUSEVOIHN0bXQubGlzdFt0aGVuXSBFTFNFIHN0bXQubGlzdFtlbHNlXSBGSQorIF5eXl5eXl5eXgordGVzdC55OjQ2LjQ2LTU0OiBlcnJvcjogaW52YWxpZCByZWZlcmVuY2U6ICckdGhlbi1hLmYnCisgICAgICAgICAgIHsgJFtpZi1zdG10LWJdID0gbmV3IElmU3RtdCgkY29uZCwgJHRoZW4tYS5mLCAkZWxzZSk7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eCit0ZXN0Lnk6NDUuMTItNDYuNjU6ICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IHRoZW4KKyBpZi1zdG10LWI6IElGIGV4cHJbY29uZF0gVEhFTiBpZi1zdG10LWFbdGhlbi1hXSBFTFNFIHN0bXQubGlzdFtlbHNlXSBGSQorICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCit0ZXN0Lnk6NDUuNDEtNDY6ICAgICBwb3NzaWJseSBtZWFudDogJFt0aGVuLWFdLmYgYXQgJDQKKyBpZi1zdG10LWI6IElGIGV4cHJbY29uZF0gVEhFTiBpZi1zdG10LWFbdGhlbi1hXSBFTFNFIHN0bXQubGlzdFtlbHNlXSBGSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4KK11dKQorCitBVF9DTEVBTlVQCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0FUX1NFVFVQKFtNaXNzaW5nIGlkZW50aWZpZXJzIGluIGJyYWNrZXRzXSkKK0FUX0RBVEFfR1JBTU1BUihbdGVzdC55XSwKK1tbCislJQorc3RhcnQ6IGZvb1tdIGJhcgorICB7IHMgPSAkZm9vOyB9CitdXSkKK0FUX0JJU09OX0NIRUNLKFstbyB0ZXN0LmMgdGVzdC55XSwgMSwgW10sCitbW3Rlc3QueToxMS4xMjogZXJyb3I6IGFuIGlkZW50aWZpZXIgZXhwZWN0ZWQKK11dKQorQVRfQ0xFQU5VUAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitBVF9TRVRVUChbUmVkdW5kYW50IHdvcmRzIGluIGJyYWNrZXRzXSkKK0FUX0RBVEFfR1JBTU1BUihbdGVzdC55XSwKK1tbCislJQorc3RhcnQ6IGZvb1sgYSBkIF0gYmFyCisgIHsgcyA9ICRmb287IH0KK11dKQorQVRfQklTT05fQ0hFQ0soWy1vIHRlc3QuYyB0ZXN0LnldLCAxLCBbXSwKK1tbdGVzdC55OjExLjE1OiBlcnJvcjogdW5leHBlY3RlZCBpZGVudGlmaWVyIGluIGJyYWNrZXRlZCBuYW1lOiAnZCcKK11dKQorQVRfQ0xFQU5VUAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitBVF9TRVRVUChbQ29tbWVudHMgaW4gYnJhY2tldHNdKQorQVRfREFUQV9HUkFNTUFSKFt0ZXN0LnldLAorW1sKKyUlCitzdGFydDogZm9vWy8qIGNvbW1lbnQgKi9dIGJhcgorICB7IHMgPSAkZm9vOyB9CitdXSkKK0FUX0JJU09OX0NIRUNLKFstbyB0ZXN0LmMgdGVzdC55XSwgMSwgW10sCitbW3Rlc3QueToxMS4yNTogZXJyb3I6IGFuIGlkZW50aWZpZXIgZXhwZWN0ZWQKK11dKQorQVRfQ0xFQU5VUAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitBVF9TRVRVUChbU3RyYXkgc3ltYm9scyBpbiBicmFja2V0c10pCitBVF9EQVRBX0dSQU1NQVIoW3Rlc3QueV0sCitbWworJSUKK3N0YXJ0OiBmb29bICUgLyogYWFhICovIComLS4rXDAwMFwwMDFcMDAyXDM3NyBdIGJhcgorICB7IHMgPSAkZm9vOyB9CitdXSkKK0FUX0NIRUNLKFtbJFBFUkwgLXBpIC1lICdzL1xcKFxkezN9KS9jaHIob2N0KCQxKSkvZ2UnIHRlc3QueSB8fCBleGl0IDc3XV0pCitBVF9CSVNPTl9DSEVDSyhbLW8gdGVzdC5jIHRlc3QueV0sIDEsIFtdLAorW1t0ZXN0Lnk6MTEuMTM6IGVycm9yOiBpbnZhbGlkIGNoYXJhY3RlciBpbiBicmFja2V0ZWQgbmFtZTogJyUnCit0ZXN0Lnk6MTEuMjUtMjc6IGVycm9yOiBpbnZhbGlkIGNoYXJhY3RlcnMgaW4gYnJhY2tldGVkIG5hbWU6ICcqJi0nCit0ZXN0Lnk6MTEuMjktMzA6IGVycm9yOiBpbnZhbGlkIGNoYXJhY3RlcnMgaW4gYnJhY2tldGVkIG5hbWU6ICcrXDBcMDAxXDAwMlwzNzcnCitdXSkKK0FUX0NMRUFOVVAKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQVRfU0VUVVAoW1JlZHVuZGFudCB3b3JkcyBpbiBMSFMgYnJhY2tldHNdKQorQVRfREFUQV9HUkFNTUFSKFt0ZXN0LnldLAorW1sKKyUlCitzdGFydFthIHNdOiBmb287CitdXSkKK0FUX0JJU09OX0NIRUNLKFstbyB0ZXN0LmMgdGVzdC55XSwgMSwgW10sCitbW3Rlc3QueToxMS45OiBlcnJvcjogdW5leHBlY3RlZCBpZGVudGlmaWVyIGluIGJyYWNrZXRlZCBuYW1lOiAncycKK11dKQorQVRfQ0xFQU5VUAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJpc29uIHVzZWQgdG8gZnJlZSB0d2ljZSB0aGUgbmFtZWQgcmVmIGZvciAiYSIsIHNpbmNlIGEgc2luZ2xlIGNvcHkKKyMgd2FzIHVzZWQgaW4gdHdvIHJ1bGVzLgorQVRfU0VUVVAoW0ZhY3RvcmVkIExIU10pCitBVF9EQVRBX0dSQU1NQVIoW3Rlc3QueV0sCitbWworJSUKK3N0YXJ0W2FdOiAiZm9vIiB8ICJiYXIiOworXV0pCitBVF9CSVNPTl9DSEVDSyhbLW8gdGVzdC5jIHRlc3QueV0pCitBVF9DTEVBTlVQCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0FUX1NFVFVQKFtVbnJlc29sdmVkIHJlZmVyZW5jZXNdKQorQVRfREFUQV9HUkFNTUFSKFt0ZXN0LnldLAorW1sKKyUlCitzdGF0OgorICBzeW1fYSBzeW1fYiB7IGZ1bmMoJHN5bS5maWVsZCk7IH0KK3wgc3ltX2Egc3ltX2IgeyBmdW5jKCQ8YWE+c3ltLmZpZWxkKTsgfQorfCBzeW1fYSBzeW1fYiB7IGZ1bmMoJFtzeW0uZmllbGRdKTsgfQorfCBzeW1fYSBzeW1fYiB7IGZ1bmMoJDxhYT5bc3ltLmZpZWxkXSk7IH0KK3wgc3ltX2Egc3ltX2IgeyBmdW5jKCRzeW0pOyB9Cit8IHN5bV9hIHN5bV9iIHsgZnVuYygkPGFhPnN5bSk7IH0KK3wgc3ltX2Egc3ltX2IgeyBmdW5jKCRbc3ltXSk7IH0gc3ltX2Egc3ltX2IgeyBmdW5jKCQ8YWE+W3N5bV0pOyB9Cis7CisKK3N0YXQxOgorICBzeW1fYSBzeW1fYiB7IGZ1bmMoJHN5bS1maWVsZCk7IH0KK3wgc3ltX2Egc3ltX2IgeyBmdW5jKCQ8YWE+c3ltLWZpZWxkKTsgfQorfCBzeW1fYSBzeW1fYiB7IGZ1bmMoJFtzeW0tZmllbGRdKTsgfQorfCBzeW1fYSBzeW1fYiB7IGZ1bmMoJDxhYT5bc3ltLWZpZWxkXSk7IH0KK3wgc3ltX2Egc3ltX2IgeyBmdW5jKCRzeW0pOyB9Cit8IHN5bV9hIHN5bV9iIHsgZnVuYygkPGFhPnN5bSk7IH0KK3wgc3ltX2Egc3ltX2IgeyBmdW5jKCRbc3ltXSk7IH0gc3ltX2Egc3ltX2IgeyBmdW5jKCQ8YWE+W3N5bV0pOyB9Cis7CisKK3N5bV9hOiAnYSc7CitzeW1fYjogJ2InOworXV0pCitBVF9CSVNPTl9DSEVDSyhbLW8gdGVzdC5jIHRlc3QueV0sIDEsIFtdLAorW1t0ZXN0Lnk6MTIuMjItMzE6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJyRzeW0uZmllbGQnCit0ZXN0Lnk6MTIuMy0zNTogICAgICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IHN5bQordGVzdC55OjEzLjIyLTM1OiBlcnJvcjogaW52YWxpZCByZWZlcmVuY2U6ICckPGFhPnN5bS5maWVsZCcKK3Rlc3QueToxMy4zLTM5OiAgICAgIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogc3ltCit0ZXN0Lnk6MTQuMjItMzM6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJyRbc3ltLmZpZWxkXScKK3Rlc3QueToxNC4zLTM3OiAgICAgIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogc3ltLmZpZWxkCit0ZXN0Lnk6MTUuMjItMzc6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJyQ8YWE+W3N5bS5maWVsZF0nCit0ZXN0Lnk6MTUuMy00MTogICAgICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IHN5bS5maWVsZAordGVzdC55OjE2LjIyLTI1OiBlcnJvcjogaW52YWxpZCByZWZlcmVuY2U6ICckc3ltJwordGVzdC55OjE2LjMtMjk6ICAgICAgc3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiBzeW0KK3Rlc3QueToxNy4yMi0yOTogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnJDxhYT5zeW0nCit0ZXN0Lnk6MTcuMy0zMzogICAgICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IHN5bQordGVzdC55OjE4LjIyLTI3OiBlcnJvcjogaW52YWxpZCByZWZlcmVuY2U6ICckW3N5bV0nCit0ZXN0Lnk6MTguMy02NTogICAgICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb24gYmVmb3JlICQzOiBzeW0KK3Rlc3QueToxOC41Mi02MTogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnJDxhYT5bc3ltXScKK3Rlc3QueToxOC4zLTY1OiAgICAgIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogc3ltCit0ZXN0Lnk6MjIuMjItMzE6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJyRzeW0tZmllbGQnCit0ZXN0Lnk6MjIuMy0zNTogICAgICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IHN5bQordGVzdC55OjIzLjIyLTM1OiBlcnJvcjogaW52YWxpZCByZWZlcmVuY2U6ICckPGFhPnN5bS1maWVsZCcKK3Rlc3QueToyMy4zLTM5OiAgICAgIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogc3ltCit0ZXN0Lnk6MjQuMjItMzM6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJyRbc3ltLWZpZWxkXScKK3Rlc3QueToyNC4zLTM3OiAgICAgIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogc3ltLWZpZWxkCit0ZXN0Lnk6MjUuMjItMzc6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJyQ8YWE+W3N5bS1maWVsZF0nCit0ZXN0Lnk6MjUuMy00MTogICAgICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IHN5bS1maWVsZAordGVzdC55OjI2LjIyLTI1OiBlcnJvcjogaW52YWxpZCByZWZlcmVuY2U6ICckc3ltJwordGVzdC55OjI2LjMtMjk6ICAgICAgc3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiBzeW0KK3Rlc3QueToyNy4yMi0yOTogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnJDxhYT5zeW0nCit0ZXN0Lnk6MjcuMy0zMzogICAgICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IHN5bQordGVzdC55OjI4LjIyLTI3OiBlcnJvcjogaW52YWxpZCByZWZlcmVuY2U6ICckW3N5bV0nCit0ZXN0Lnk6MjguMy02NTogICAgICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb24gYmVmb3JlICQzOiBzeW0KK3Rlc3QueToyOC41Mi02MTogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnJDxhYT5bc3ltXScKK3Rlc3QueToyOC4zLTY1OiAgICAgIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogc3ltCitdXSkKK0FUX0NMRUFOVVAKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQVRfU0VUVVAoW1skIG9yIEAgZm9sbG93ZWQgYnkgLiBvciAtXV0pCitBVF9EQVRBKFtbdGVzdC55XV0sCitbWworJSUKK3N0YXJ0OgorICAuZmllbGQgeyAkLmZpZWxkOyB9Cit8ICdhJyAgICB7IEAuZmllbGQ7IH0KKzsKKy5maWVsZDogOworXV0pCitBVF9CSVNPTl9DSEVDSyhbW3Rlc3QueV1dLCBbWzFdXSwgW10sCitbW3Rlc3QueTo0LjEyLTE4OiBlcnJvcjogaW52YWxpZCByZWZlcmVuY2U6ICckLmZpZWxkJwordGVzdC55OjQuMTM6ICAgICAgICBzeW50YXggZXJyb3IgYWZ0ZXIgJyQnLCBleHBlY3RpbmcgaW50ZWdlciwgbGV0dGVyLCAnXycsICdAPDpAJywgb3IgJyQnCit0ZXN0Lnk6NC4zLTg6ICAgICAgIHBvc3NpYmx5IG1lYW50OiAkWy5maWVsZF0gYXQgJDEKK3Rlc3QueTo1LjEyLTE4OiBlcnJvcjogaW52YWxpZCByZWZlcmVuY2U6ICdALmZpZWxkJwordGVzdC55OjUuMTM6ICAgICAgICBzeW50YXggZXJyb3IgYWZ0ZXIgJ0AnLCBleHBlY3RpbmcgaW50ZWdlciwgbGV0dGVyLCAnXycsICdAPDpAJywgb3IgJyQnCitdXSkKK0FUX0RBVEEoW1t0ZXN0LnldXSwKK1tbCislJQorc3RhcnQ6CisgICdhJyB7ICQtZmllbGQ7IH0KK3wgJ2InIHsgQC1maWVsZDsgfQorOworXV0pCitBVF9CSVNPTl9DSEVDSyhbW3Rlc3QueV1dLCBbWzBdXSwgW10sCitbW3Rlc3QueTo0Ljk6IHdhcm5pbmc6IHN0cmF5ICckJwordGVzdC55OjUuOTogd2FybmluZzogc3RyYXkgJ0AnCitdXSkKK0FUX0NMRUFOVVAKZGlmZiAtLWdpdCBhL3Rlc3RzL291dHB1dC5hdCBiL3Rlc3RzL291dHB1dC5hdAppbmRleCA4ZGRkZTQ2Li42NTc5MDNhIDEwMDY0NAotLS0gYS90ZXN0cy9vdXRwdXQuYXQKKysrIGIvdGVzdHMvb3V0cHV0LmF0CkBAIC0xLDM5ICsxLDQxIEBACiAjIENoZWNraW5nIHRoZSBvdXRwdXQgZmlsZW5hbWVzLiAgICAgICAgICAgICAgICAgICAgLSotIEF1dG90ZXN0IC0qLQotIyBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIsIDIwMDUtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0jIGFueSBsYXRlciB2ZXJzaW9uLgotCisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCiAjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KKyMKICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotIyAwMjExMC0xMzAxLCBVU0EuCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCiBBVF9CQU5ORVIoW1tPdXRwdXQgZmlsZSBuYW1lcy5dXSkKIAogCiAjIEFUX0NIRUNLX09VVFBVVChJTlBVVC1GSUxFLCBbRElSRUNUSVZFU10sIFtGTEFHU10sIEVYUEVDVEVELUZJTEVTLCBbU0hFTExJT10sCi0jICAgICAgICAgICAgICAgICBbQURESVRJT05BTC1URVNUU10pCisjICAgICAgICAgICAgICAgICBbQURESVRJT05BTC1URVNUU10sIFtQUkUtVEVTVFNdKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogbTRfZGVmaW5lKFtBVF9DSEVDS19PVVRQVVRdLAotW0FUX1NFVFVQKFtPdXRwdXQgZmlsZXM6ICQyICQzICQ1XSkKLWNhc2UgIiQxIiBpbgotICAqLyopIG1rZGlyIGBlY2hvICIkMSIgfCBzZWQgJ3MsLy4qLCwnYDs7Ci1lc2FjCitbQVRfU0VUVVAoW1tPdXRwdXQgZmlsZXM6ICQyICQzICQ1XV0pCiskNworZm9yIGZpbGUgaW4gJDEgJDQ7IGRvCisgIGNhc2UgIiRmaWxlIiBpbgorICAgICovKikgbWtkaXIgLXAgYGVjaG8gIiRmaWxlIiB8IHNlZCAncywvLiosLCdgOzsKKyAgZXNhYworZG9uZQogQVRfREFUQShbJDFdLAogW1skMgogJSUKIGZvbzoge307CiBdXSkKIAotQVRfQ0hFQ0soW2Jpc29uICQzICQxICQ1XSwgMCkKK0FUX0JJU09OX0NIRUNLKFskMyAkMSAkNV0sIDApCiBBVF9DSEVDSyhbbHMgJDRdLCBbXSwgW2lnbm9yZV0pCiAkNgogQVRfQ0xFQU5VUApAQCAtNDEsOSArNDMsMTUgQEAKIAogQVRfQ0hFQ0tfT1VUUFVUKFtmb28ueV0sIFtdLCBbLWR2XSwKIAkJW2Zvby5vdXRwdXQgZm9vLnRhYi5jIGZvby50YWIuaF0pCisKKyMgU29tZSB2ZXJzaW9ucyBvZiBWYWxncmluZCAoYXQgbGVhc3QgdmFsZ3JpbmQtMy42LjAuU1ZOLURlYmlhbikgcmVwb3J0CisjICJmZ3JlcDogd3JpdGUgZXJyb3I6IEJhZCBmaWxlIGRlc2NyaXB0b3IiIHdoZW4gc3Rkb3V0IGlzIGNsb3NlZCwgc28gd2UKKyMgc2tpcCB0aGlzIHRlc3QgZ3JvdXAgZHVyaW5nIG1haW50YWluZXItY2hlY2stdmFsZ3JpbmQuCiBBVF9DSEVDS19PVVRQVVQoW2Zvby55XSwgW10sIFstZHZdLAogCQlbZm9vLm91dHB1dCBmb28udGFiLmMgZm9vLnRhYi5oXSwKLQkJWz4mLV0pCisJCVs+Ji1dLCBbXSwKKwkJW0FUX0NIRUNLKFtbY2FzZSAiJFBSRUJJU09OIiBpbiAqdmFsZ3JpbmQqKSBleGl0IDc3OzsgZXNhY11dKV0pCisKIEFUX0NIRUNLX09VVFBVVChbZm9vLnldLCBbXSwgWy1kdiAtbyBmb28uY10sCiAJCVtmb28uYyBmb28uaCBmb28ub3V0cHV0XSkKIEFUX0NIRUNLX09VVFBVVChbZm9vLnldLCBbXSwgWy1kdiAtbyBmb28udGFiLmNdLApAQCAtNTMsNyArNjEsNyBAQAogQVRfQ0hFQ0tfT1VUUFVUKFtmb28ueV0sIFtdLCBbLWR2IC1iIGJhcl0sCiAJCVtiYXIub3V0cHV0IGJhci50YWIuYyBiYXIudGFiLmhdKQogQVRfQ0hFQ0tfT1VUUFVUKFtmb28ueV0sIFtdLCBbLWR2IC1nIC1vIGZvby5jXSwKLQkJW2Zvby5jIGZvby5oIGZvby5vdXRwdXQgZm9vLnZjZ10pCisJCVtmb28uYyBmb28uZG90IGZvby5oIGZvby5vdXRwdXRdKQogCiAKIEFUX0NIRUNLX09VVFBVVChbZm9vLnldLCBbJWRlZmluZXMgJXZlcmJvc2VdLCAgICAgIFtdLApAQCAtNjQsMTMgKzcyLDEzIEBACiBBVF9DSEVDS19PVVRQVVQoW2Zvby55eV0sIFslZGVmaW5lcyAldmVyYm9zZSAleWFjY10sW10sCiAJCVt5Lm91dHB1dCB5LnRhYi5jIHkudGFiLmhdKQogCi0jIEV4ZXJjaXNlICVvdXRwdXQgYW5kICVmaWxlLXByZWZpeAotQVRfQ0hFQ0tfT1VUUFVUKFtmb28ueV0sIFslZmlsZS1wcmVmaXg9ImJhciIgJWRlZmluZXMgJXZlcmJvc2VdLCAgICAgIFtdLAorIyBFeGVyY2lzZSAlb3V0cHV0IGFuZCAlZmlsZS1wcmVmaXggaW5jbHVkaW5nIGRlcHJlY2F0ZWQgJz0nCitBVF9DSEVDS19PVVRQVVQoW2Zvby55XSwgWyVmaWxlLXByZWZpeCAiYmFyIiAlZGVmaW5lcyAldmVyYm9zZV0sICAgICAgW10sCiAJCVtiYXIub3V0cHV0IGJhci50YWIuYyBiYXIudGFiLmhdKQogQVRfQ0hFQ0tfT1VUUFVUKFtmb28ueV0sIFslb3V0cHV0PSJiYXIuYyIgJWRlZmluZXMgJXZlcmJvc2UgJXlhY2NdLFtdLAogCQlbYmFyLm91dHB1dCBiYXIuYyBiYXIuaF0pCiBBVF9DSEVDS19PVVRQVVQoW2Zvby55XSwKLQkJWyVmaWxlLXByZWZpeD0iYmF6IiAlb3V0cHV0PSJiYXIuYyIgJWRlZmluZXMgJXZlcmJvc2UgJXlhY2NdLAorCQlbJWZpbGUtcHJlZml4PSJiYXoiICVvdXRwdXQgImJhci5jIiAlZGVmaW5lcyAldmVyYm9zZSAleWFjY10sCiAJCVtdLAogCQlbYmFyLm91dHB1dCBiYXIuYyBiYXIuaF0pCiAKQEAgLTg2LDYgKzk0LDEwIEBACiAJCVstLWRlZmluZXM9Zm9vLmhwcCAtbyBmb28uYysrXSwKIAkJW2Zvby5jKysgZm9vLmhwcF0pCiAKK0FUX0NIRUNLX09VVFBVVChbZm9vLnl5XSwgWyVkZWZpbmVzICJmb28uaHBwIl0sCisJCVstbyBmb28uYysrXSwKKwkJW2Zvby5jKysgZm9vLmhwcF0pCisKIEFUX0NIRUNLX09VVFBVVChbZm9vLnl5XSwgW10sCiAJCVstbyBmb28uYysrIC0tZ3JhcGg9Zm9vLmdwaF0sCiAJCVtmb28uYysrIGZvby5ncGhdKQpAQCAtMTEyLDMgKzEyNCw0NzUgQEAKIAkJWy1vIHN1YmRpci9mb28uY2NdLAogCQlbc3ViZGlyL2Zvby5jYyBzdWJkaXIvZm9vLmhoIHN1YmRpci9mb28ub3V0cHV0IHN1YmRpci9sb2NhdGlvbi5oaCBzdWJkaXIvc3RhY2suaGggc3ViZGlyL3Bvc2l0aW9uLmhoXSwKIAkJW10sIFtBVF9DSEVDS19OT19TVUJESVJfUEFSVChbc3ViZGlyL2Zvb10pXSkKKworQVRfQ0hFQ0tfT1VUUFVUKFtncmFtX2Rpci9mb28ueXldLAorICAgICAgICAgICAgICAgIFslc2tlbGV0b24gImxhbHIxLmNjIiAlZGVmaW5lcyAldmVyYm9zZSAlZmlsZS1wcmVmaXggIm91dHB1dF9kaXIvZm9vIl0sCisgICAgICAgICAgICAgICAgW10sCisJCVtvdXRwdXRfZGlyL2Zvby50YWIuY2Mgb3V0cHV0X2Rpci9mb28udGFiLmhoIG91dHB1dF9kaXIvZm9vLm91dHB1dCBvdXRwdXRfZGlyL2xvY2F0aW9uLmhoIG91dHB1dF9kaXIvc3RhY2suaGggb3V0cHV0X2Rpci9wb3NpdGlvbi5oaF0pCisKKworIyBBVF9DSEVDS19DT05GTElDVElOR19PVVRQVVQoSU5QVVQtRklMRSwgRElSRUNUSVZFUywgRkxBR1MsIFNUREVSUiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtFWElULVNUQVRVU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtBVF9DSEVDS19DT05GTElDVElOR19PVVRQVVRdLAorW0FUX1NFVFVQKFtDb25mbGljdGluZyBvdXRwdXQgZmlsZXM6ICQyICQzXSkKK2Nhc2UgIiQxIiBpbgorICAqLyopIG1rZGlyIGBlY2hvICIkMSIgfCBzZWQgJ3MsLy4qLCwnYDs7Citlc2FjCitBVF9EQVRBKFskMV0sCitbWyQyCislJQorZm9vOiB7fTsKK11dKQorCitbY3AgXSQxWyBleHBvdXRdCisjIEJlY2F1c2UgYW4gb3V0cHV0IGZpbGUgbmFtZSBjb25mbGljdCBpcyBzdGlsbCBhIHdhcm5pbmcsIEJpc29uIGV4aXRzCisjIHdpdGggc3RhdHVzIDAsIHNvIEFUX0JJU09OX0NIRUNLIGRvZXMgbm90IHJlYWxpemUgdGhhdCB0aGVyZSBtYXkgYmUgbm8KKyMgb3V0cHV0IGZpbGUgYWdhaW5zdCB3aGljaCB0byBjaGVjayB0aGUgWE1MLiAgQVRfQklTT05fQ0hFQ0tfTk9fWE1MCisjIGF2b2lkcyB0aGF0IHByb2JsZW0uCitBVF9CSVNPTl9DSEVDS19OT19YTUwoWyQzICQxXSwgJDUsIFtdLCBbJDRdKQorQVRfQ0hFQ0soW1tjYXQgJDFdXSwgW1swXV0sIFtleHBvdXRdKQorQVRfQ0xFQU5VUAorXSkKKworQVRfQ0hFQ0tfQ09ORkxJQ1RJTkdfT1VUUFVUKFtmb28ueV0sCitbXSwgWy0tZ3JhcGg9ImZvby50YWIuYyJdLAorW2Zvby55OiB3YXJuaW5nOiBjb25mbGljdGluZyBvdXRwdXRzIHRvIGZpbGUgJ2Zvby50YWIuYycKK10pCisKK0FUX0NIRUNLX0NPTkZMSUNUSU5HX09VVFBVVChbZm9vLnldLAorWyVkZWZpbmVzICJmb28ub3V0cHV0Il0sIFstdl0sCitbZm9vLnk6IHdhcm5pbmc6IGNvbmZsaWN0aW5nIG91dHB1dHMgdG8gZmlsZSAnZm9vLm91dHB1dCcKK10pCisKK0FUX0NIRUNLX0NPTkZMSUNUSU5HX09VVFBVVChbZm9vLnldLAorWyVza2VsZXRvbiAibGFscjEuY2MiICVkZWZpbmVzXSwgWy0tZ3JhcGg9ImxvY2F0aW9uLmhoIl0sCitbZm9vLnk6IHdhcm5pbmc6IGNvbmZsaWN0aW5nIG91dHB1dHMgdG8gZmlsZSAnbG9jYXRpb24uaGgnCitdKQorCitBVF9DSEVDS19DT05GTElDVElOR19PVVRQVVQoW2Zvby55XSwgW10sIFstbyBmb28ueV0sCitbZm9vLnk6IGVycm9yOiByZWZ1c2luZyB0byBvdmVyd3JpdGUgdGhlIGlucHV0IGZpbGUgJ2Zvby55JworXSwgMSkKKworCisjIEFUX0NIRUNLX09VVFBVVF9GSUxFX05BTUUoRklMRS1OQU1FLVBSRUZJWCwgW0FERElUSU9OQUwtVEVTVFNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbQVRfQ0hFQ0tfT1VUUFVUX0ZJTEVfTkFNRV0sCitbQVRfU0VUVVAoW091dHB1dCBmaWxlIG5hbWU6ICQxXSkKKworQVRfQklTT05fT1BUSU9OX1BVU0hERUZTCisjIFNraXAgaWYgcGxhdGZvcm0gZG9lc24ndCBzdXBwb3J0IGZpbGUgbmFtZS4gIEZvciBleGFtcGxlLCBDeWd3aW4KKyMgZG9lc24ndCBzdXBwb3J0IGZpbGUgbmFtZXMgY29udGFpbmluZyAiOiIgb3IgIlwiLgorQVRfQ0hFQ0soW1t0b3VjaCAiXUFTX0VTQ0FQRShbJDFbLnRtcF1dKVsiIHx8IGV4aXQgNzddXSkKKworQVRfREFUQV9HUkFNTUFSKFtnbHIueV0sCitbWyVnbHItcGFyc2VyCislY29kZSB7CitdQVRfWVlFUlJPUl9ERUNMQVJFX0VYVEVSTlsKK11BVF9ZWUxFWF9ERUNMQVJFX0VYVEVSTlsKK30KKyUlCitzdGFydDoge307CitdXSkKK0FUX0JJU09OX0NIRUNLKFstbyAiQVNfRVNDQVBFKFskMS5jXSkiIC0tZGVmaW5lcz0iQVNfRVNDQVBFKFskMS5oXSkiIGdsci55XSkKK0FUX0NIRUNLKFtscyAiQVNfRVNDQVBFKFskMS5jXSkiICJBU19FU0NBUEUoWyQxLmhdKSJdLCBbXSwgW2lnbm9yZV0pCitBVF9DT01QSUxFKFtnbHIub10sIFstYyAiQVNfRVNDQVBFKFskMS5jXSkiXSkKKyQyCisKK0FUX0RBVEFfR1JBTU1BUihbY3h4LnldLAorW1slc2tlbGV0b24gImxhbHIxLmNjIgorJWNvZGUgeyBpbnQgeXlsZXggKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUqKTsgfQorJSUKK3N0YXJ0OiB7fTsKK11dKQorQVRfQklTT05fQ0hFQ0soWy1vICJBU19FU0NBUEUoWyQxLmNdKSIgLS1kZWZpbmVzPSJBU19FU0NBUEUoWyQxLmhdKSIgY3h4LnldKQorQVRfQ0hFQ0soW2xzICJBU19FU0NBUEUoWyQxLmNdKSIgIkFTX0VTQ0FQRShbJDEuaF0pIl0sIFtdLCBbaWdub3JlXSkKK0FUX0NPTVBJTEVfQ1hYKFtjeHgub10sIFstYyAiQVNfRVNDQVBFKFskMS5jXSkiXSkKKyQyCisKK0FUX0JJU09OX09QVElPTl9QT1BERUZTCitBVF9DTEVBTlVQCitdKQorCisjIE5vdGljZSB0aGF0IHRoZSBoZWFkZXIgZmlsZSBuYW1lIGhlcmUgY2Fubm90IGNvbnRhaW4KKyMgJyInIHNpbmNlIEZJTEVOQU1FIGluICcjaW5jbHVkZSAiRklMRU5BTUUiJyBjYW5ub3QuCitBVF9DSEVDS19PVVRQVVRfRklMRV9OQU1FKFtbYH4hQCMkJV4mKigpLT1fK3t9W118XDo7PD4sIC4nXV0pCitkbmwgV29yayBhcm91bmQgYSBidWcgaW4gbTRfZXhwYW5kIHRoYXQgYnJva2UgQVRfU0VUVVAgaW4gYXV0b2NvbmYgMi42MiwKK2RubCBieSB1c2luZyB0aGUgZGVmaW5pdGlvbiBmcm9tIDIuNjMuCittNF92ZXJzaW9uX3ByZXJlcShbMi42M10sIFtdLAorW200X2RlZmluZShbbTRfZXhwYW5kXSwgW18kMCgtPTx7KCQxKX0+PS0pXSkKK200X2RlZmluZShbX200X2V4cGFuZF0sCitbbTRfY2hhbmdlcXVvdGUoWy09PHsoXSwgWyl9Pj0tXSkkMW00X2NoYW5nZXF1b3RlKFssIF0pXSldKQorQVRfQ0hFQ0tfT1VUUFVUX0ZJTEVfTkFNRShbWyhdXSkKK0FUX0NIRUNLX09VVFBVVF9GSUxFX05BTUUoW1spXV0pCitBVF9DSEVDS19PVVRQVVRfRklMRV9OQU1FKFtbQCU6QF1dKQorQVRfQ0hFQ0tfT1VUUFVUX0ZJTEVfTkFNRShbW0BAXV0pCitBVF9DSEVDS19PVVRQVVRfRklMRV9OQU1FKFtbQHtdXSkKK0FUX0NIRUNLX09VVFBVVF9GSUxFX05BTUUoW1tAfV1dKQorQVRfQ0hFQ0tfT1VUUFVUX0ZJTEVfTkFNRShbW0A8OkBdXSkKK0FUX0NIRUNLX09VVFBVVF9GSUxFX05BTUUoW1tAOj5AXV0pCisKKworIyBBVF9URVNUKFNFVFVQLU5BTUUsIEdSQU1NQVIsIERPVC1CT0RZKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB0aGF0IHRoZSBET1QgZ3JhcGggZm9yIEdSQU1NQVIgaXMgRE9ULUJPRFkuCittNF9wdXNoZGVmKFtBVF9URVNUXSwKK1tBVF9TRVRVUChbJDFdKQorQVRfS0VZV09SRFMoW1tncmFwaF1dKQorQVRfREFUQShbW2lucHV0LnldXSwgWyQyXSkKK0FUX0JJU09OX0NIRUNLKFtbLXJhbGwgLS1ncmFwaCBpbnB1dC55XV0sIFswXSwgW1tdXSwgW1tpZ25vcmVdXSkKK0FUX0NIRUNLKFtbZ3JlcCAtdiAvLyBpbnB1dC5kb3RdXSwgWzBdLAorW1sKK2RpZ3JhcGggImlucHV0LnkiCit7CisgIG5vZGUgW2ZvbnRuYW1lID0gY291cmllciwgc2hhcGUgPSBib3gsIGNvbG9yc2NoZW1lID0gcGFpcmVkNl0KKyAgZWRnZSBbZm9udG5hbWUgPSBjb3VyaWVyXQorICBdJDNbfQorXV0pCitBVF9DTEVBTlVQCitdKQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgR3JhcGggd2l0aCBubyBjb25mbGljdHMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworQVRfVEVTVChbR3JhcGggd2l0aCBubyBjb25mbGljdHNdLAorW1slJQorZXhwOiBhICc/JyBiOworYTogOworYjogJ2InOworXV0sCitbWworICAwIFtsYWJlbD0iU3RhdGUgMFxuXGwgIDAgJGFjY2VwdDogLiBleHAgJGVuZFxsICAxIGV4cDogLiBhICc/JyBiXGwgIDIgYTogLlxsIl0KKyAgMCAtPiAxIFtzdHlsZT1kYXNoZWQgbGFiZWw9ImV4cCJdCisgIDAgLT4gMiBbc3R5bGU9ZGFzaGVkIGxhYmVsPSJhIl0KKyAgMCAtPiAiMFIyIiBbc3R5bGU9c29saWRdCisgIjBSMiIgW2xhYmVsPSJSMiIsIGZpbGxjb2xvcj0zLCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCisgIDEgW2xhYmVsPSJTdGF0ZSAxXG5cbCAgMCAkYWNjZXB0OiBleHAgLiAkZW5kXGwiXQorICAxIC0+IDMgW3N0eWxlPXNvbGlkIGxhYmVsPSIkZW5kIl0KKyAgMiBbbGFiZWw9IlN0YXRlIDJcblxsICAxIGV4cDogYSAuICc/JyBiXGwiXQorICAyIC0+IDQgW3N0eWxlPXNvbGlkIGxhYmVsPSInPyciXQorICAzIFtsYWJlbD0iU3RhdGUgM1xuXGwgIDAgJGFjY2VwdDogZXhwICRlbmQgLlxsIl0KKyAgMyAtPiAiM1IwIiBbc3R5bGU9c29saWRdCisgIjNSMCIgW2xhYmVsPSJBY2MiLCBmaWxsY29sb3I9MSwgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICA0IFtsYWJlbD0iU3RhdGUgNFxuXGwgIDEgZXhwOiBhICc/JyAuIGJcbCAgMyBiOiAuICdiJ1xsIl0KKyAgNCAtPiA1IFtzdHlsZT1zb2xpZCBsYWJlbD0iJ2InIl0KKyAgNCAtPiA2IFtzdHlsZT1kYXNoZWQgbGFiZWw9ImIiXQorICA1IFtsYWJlbD0iU3RhdGUgNVxuXGwgIDMgYjogJ2InIC5cbCJdCisgIDUgLT4gIjVSMyIgW3N0eWxlPXNvbGlkXQorICI1UjMiIFtsYWJlbD0iUjMiLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICA2IFtsYWJlbD0iU3RhdGUgNlxuXGwgIDEgZXhwOiBhICc/JyBiIC5cbCJdCisgIDYgLT4gIjZSMSIgW3N0eWxlPXNvbGlkXQorICI2UjEiIFtsYWJlbD0iUjEiLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorXV0pCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgR3JhcGggd2l0aCB1bnNvbHZlZCBTL1IuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworQVRfVEVTVChbR3JhcGggd2l0aCB1bnNvbHZlZCBTL1JdLAorW1slJQorc3RhcnQ6CisgICAgJ2EnCisgIHwgZW1wdHlfYSAnYScKKyAgfCAnYicKKyAgfCBlbXB0eV9iICdiJworICB8ICdjJworICB8IGVtcHR5X2MgJ2MnCisgIDsKK2VtcHR5X2E6ICVwcmVjICdhJzsKK2VtcHR5X2I6ICVwcmVjICdiJzsKK2VtcHR5X2M6ICVwcmVjICdjJzsKK11dLAorW1sKKyAgMCBbbGFiZWw9IlN0YXRlIDBcblxsICAwICRhY2NlcHQ6IC4gc3RhcnQgJGVuZFxsICAxIHN0YXJ0OiAuICdhJ1xsICAyICAgICAgfCAuIGVtcHR5X2EgJ2EnXGwgIDMgICAgICB8IC4gJ2InXGwgIDQgICAgICB8IC4gZW1wdHlfYiAnYidcbCAgNSAgICAgIHwgLiAnYydcbCAgNiAgICAgIHwgLiBlbXB0eV9jICdjJ1xsICA3IGVtcHR5X2E6IC4gIFsnYSddXGwgIDggZW1wdHlfYjogLiAgWydiJ11cbCAgOSBlbXB0eV9jOiAuICBbJ2MnXVxsIl0KKyAgMCAtPiAxIFtzdHlsZT1zb2xpZCBsYWJlbD0iJ2EnIl0KKyAgMCAtPiAyIFtzdHlsZT1zb2xpZCBsYWJlbD0iJ2InIl0KKyAgMCAtPiAzIFtzdHlsZT1zb2xpZCBsYWJlbD0iJ2MnIl0KKyAgMCAtPiA0IFtzdHlsZT1kYXNoZWQgbGFiZWw9InN0YXJ0Il0KKyAgMCAtPiA1IFtzdHlsZT1kYXNoZWQgbGFiZWw9ImVtcHR5X2EiXQorICAwIC0+IDYgW3N0eWxlPWRhc2hlZCBsYWJlbD0iZW1wdHlfYiJdCisgIDAgLT4gNyBbc3R5bGU9ZGFzaGVkIGxhYmVsPSJlbXB0eV9jIl0KKyAgMCAtPiAiMFI3ZCIgW2xhYmVsPSJbJ2EnXSIsIHN0eWxlPXNvbGlkXQorICIwUjdkIiBbbGFiZWw9IlI3IiwgZmlsbGNvbG9yPTUsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgMCAtPiAiMFI4ZCIgW2xhYmVsPSJbJ2InXSIsIHN0eWxlPXNvbGlkXQorICIwUjhkIiBbbGFiZWw9IlI4IiwgZmlsbGNvbG9yPTUsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgMCAtPiAiMFI5ZCIgW2xhYmVsPSJbJ2MnXSIsIHN0eWxlPXNvbGlkXQorICIwUjlkIiBbbGFiZWw9IlI5IiwgZmlsbGNvbG9yPTUsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgMSBbbGFiZWw9IlN0YXRlIDFcblxsICAxIHN0YXJ0OiAnYScgLlxsIl0KKyAgMSAtPiAiMVIxIiBbc3R5bGU9c29saWRdCisgIjFSMSIgW2xhYmVsPSJSMSIsIGZpbGxjb2xvcj0zLCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCisgIDIgW2xhYmVsPSJTdGF0ZSAyXG5cbCAgMyBzdGFydDogJ2InIC5cbCJdCisgIDIgLT4gIjJSMyIgW3N0eWxlPXNvbGlkXQorICIyUjMiIFtsYWJlbD0iUjMiLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICAzIFtsYWJlbD0iU3RhdGUgM1xuXGwgIDUgc3RhcnQ6ICdjJyAuXGwiXQorICAzIC0+ICIzUjUiIFtzdHlsZT1zb2xpZF0KKyAiM1I1IiBbbGFiZWw9IlI1IiwgZmlsbGNvbG9yPTMsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgNCBbbGFiZWw9IlN0YXRlIDRcblxsICAwICRhY2NlcHQ6IHN0YXJ0IC4gJGVuZFxsIl0KKyAgNCAtPiA4IFtzdHlsZT1zb2xpZCBsYWJlbD0iJGVuZCJdCisgIDUgW2xhYmVsPSJTdGF0ZSA1XG5cbCAgMiBzdGFydDogZW1wdHlfYSAuICdhJ1xsIl0KKyAgNSAtPiA5IFtzdHlsZT1zb2xpZCBsYWJlbD0iJ2EnIl0KKyAgNiBbbGFiZWw9IlN0YXRlIDZcblxsICA0IHN0YXJ0OiBlbXB0eV9iIC4gJ2InXGwiXQorICA2IC0+IDEwIFtzdHlsZT1zb2xpZCBsYWJlbD0iJ2InIl0KKyAgNyBbbGFiZWw9IlN0YXRlIDdcblxsICA2IHN0YXJ0OiBlbXB0eV9jIC4gJ2MnXGwiXQorICA3IC0+IDExIFtzdHlsZT1zb2xpZCBsYWJlbD0iJ2MnIl0KKyAgOCBbbGFiZWw9IlN0YXRlIDhcblxsICAwICRhY2NlcHQ6IHN0YXJ0ICRlbmQgLlxsIl0KKyAgOCAtPiAiOFIwIiBbc3R5bGU9c29saWRdCisgIjhSMCIgW2xhYmVsPSJBY2MiLCBmaWxsY29sb3I9MSwgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICA5IFtsYWJlbD0iU3RhdGUgOVxuXGwgIDIgc3RhcnQ6IGVtcHR5X2EgJ2EnIC5cbCJdCisgIDkgLT4gIjlSMiIgW3N0eWxlPXNvbGlkXQorICI5UjIiIFtsYWJlbD0iUjIiLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICAxMCBbbGFiZWw9IlN0YXRlIDEwXG5cbCAgNCBzdGFydDogZW1wdHlfYiAnYicgLlxsIl0KKyAgMTAgLT4gIjEwUjQiIFtzdHlsZT1zb2xpZF0KKyAiMTBSNCIgW2xhYmVsPSJSNCIsIGZpbGxjb2xvcj0zLCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCisgIDExIFtsYWJlbD0iU3RhdGUgMTFcblxsICA2IHN0YXJ0OiBlbXB0eV9jICdjJyAuXGwiXQorICAxMSAtPiAiMTFSNiIgW3N0eWxlPXNvbGlkXQorICIxMVI2IiBbbGFiZWw9IlI2IiwgZmlsbGNvbG9yPTMsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KK11dKQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBHcmFwaCB3aXRoIHNvbHZlZCBTL1IuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1RFU1QoW0dyYXBoIHdpdGggc29sdmVkIFMvUl0sCitbWyVsZWZ0ICdhJworJXJpZ2h0ICdiJworJXJpZ2h0ICdjJworJSUKK3N0YXJ0OgorICAgICdhJworICB8IGVtcHR5X2EgJ2EnCisgIHwgJ2InCisgIHwgZW1wdHlfYiAnYicKKyAgfCAnYycKKyAgfCBlbXB0eV9jICdjJworICA7CitlbXB0eV9hOiAlcHJlYyAnYSc7CitlbXB0eV9iOiAlcHJlYyAnYic7CitlbXB0eV9jOiAlcHJlYyAnYyc7CitdXSwKK1tbCisgIDAgW2xhYmVsPSJTdGF0ZSAwXG5cbCAgMCAkYWNjZXB0OiAuIHN0YXJ0ICRlbmRcbCAgMSBzdGFydDogLiAnYSdcbCAgMiAgICAgIHwgLiBlbXB0eV9hICdhJ1xsICAzICAgICAgfCAuICdiJ1xsICA0ICAgICAgfCAuIGVtcHR5X2IgJ2InXGwgIDUgICAgICB8IC4gJ2MnXGwgIDYgICAgICB8IC4gZW1wdHlfYyAnYydcbCAgNyBlbXB0eV9hOiAuICBbJ2EnXVxsICA4IGVtcHR5X2I6IC4gIFtdXGwgIDkgZW1wdHlfYzogLiAgW11cbCJdCisgIDAgLT4gMSBbc3R5bGU9c29saWQgbGFiZWw9IidiJyJdCisgIDAgLT4gMiBbc3R5bGU9c29saWQgbGFiZWw9IidjJyJdCisgIDAgLT4gMyBbc3R5bGU9ZGFzaGVkIGxhYmVsPSJzdGFydCJdCisgIDAgLT4gNCBbc3R5bGU9ZGFzaGVkIGxhYmVsPSJlbXB0eV9hIl0KKyAgMCAtPiA1IFtzdHlsZT1kYXNoZWQgbGFiZWw9ImVtcHR5X2IiXQorICAwIC0+IDYgW3N0eWxlPWRhc2hlZCBsYWJlbD0iZW1wdHlfYyJdCisgIDAgLT4gIjBSNyIgW3N0eWxlPXNvbGlkXQorICIwUjciIFtsYWJlbD0iUjciLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICAxIFtsYWJlbD0iU3RhdGUgMVxuXGwgIDMgc3RhcnQ6ICdiJyAuXGwiXQorICAxIC0+ICIxUjMiIFtzdHlsZT1zb2xpZF0KKyAiMVIzIiBbbGFiZWw9IlIzIiwgZmlsbGNvbG9yPTMsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgMiBbbGFiZWw9IlN0YXRlIDJcblxsICA1IHN0YXJ0OiAnYycgLlxsIl0KKyAgMiAtPiAiMlI1IiBbc3R5bGU9c29saWRdCisgIjJSNSIgW2xhYmVsPSJSNSIsIGZpbGxjb2xvcj0zLCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCisgIDMgW2xhYmVsPSJTdGF0ZSAzXG5cbCAgMCAkYWNjZXB0OiBzdGFydCAuICRlbmRcbCJdCisgIDMgLT4gNyBbc3R5bGU9c29saWQgbGFiZWw9IiRlbmQiXQorICA0IFtsYWJlbD0iU3RhdGUgNFxuXGwgIDIgc3RhcnQ6IGVtcHR5X2EgLiAnYSdcbCJdCisgIDQgLT4gOCBbc3R5bGU9c29saWQgbGFiZWw9IidhJyJdCisgIDUgW2xhYmVsPSJTdGF0ZSA1XG5cbCAgNCBzdGFydDogZW1wdHlfYiAuICdiJ1xsIl0KKyAgNSAtPiA5IFtzdHlsZT1zb2xpZCBsYWJlbD0iJ2InIl0KKyAgNiBbbGFiZWw9IlN0YXRlIDZcblxsICA2IHN0YXJ0OiBlbXB0eV9jIC4gJ2MnXGwiXQorICA2IC0+IDEwIFtzdHlsZT1zb2xpZCBsYWJlbD0iJ2MnIl0KKyAgNyBbbGFiZWw9IlN0YXRlIDdcblxsICAwICRhY2NlcHQ6IHN0YXJ0ICRlbmQgLlxsIl0KKyAgNyAtPiAiN1IwIiBbc3R5bGU9c29saWRdCisgIjdSMCIgW2xhYmVsPSJBY2MiLCBmaWxsY29sb3I9MSwgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICA4IFtsYWJlbD0iU3RhdGUgOFxuXGwgIDIgc3RhcnQ6IGVtcHR5X2EgJ2EnIC5cbCJdCisgIDggLT4gIjhSMiIgW3N0eWxlPXNvbGlkXQorICI4UjIiIFtsYWJlbD0iUjIiLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICA5IFtsYWJlbD0iU3RhdGUgOVxuXGwgIDQgc3RhcnQ6IGVtcHR5X2IgJ2InIC5cbCJdCisgIDkgLT4gIjlSNCIgW3N0eWxlPXNvbGlkXQorICI5UjQiIFtsYWJlbD0iUjQiLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICAxMCBbbGFiZWw9IlN0YXRlIDEwXG5cbCAgNiBzdGFydDogZW1wdHlfYyAnYycgLlxsIl0KKyAgMTAgLT4gIjEwUjYiIFtzdHlsZT1zb2xpZF0KKyAiMTBSNiIgW2xhYmVsPSJSNiIsIGZpbGxjb2xvcj0zLCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCitdXSkKKworIyMgLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgR3JhcGggd2l0aCAgUi9SLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLSAjIworCitBVF9URVNUKFtHcmFwaCB3aXRoIFIvUl0sCitbWyUlCitleHA6IGEgfCBiOworYTogOworYjogOworXV0sCitbWworICAwIFtsYWJlbD0iU3RhdGUgMFxuXGwgIDAgJGFjY2VwdDogLiBleHAgJGVuZFxsICAxIGV4cDogLiBhXGwgIDIgICAgfCAuIGJcbCAgMyBhOiAuICBbJGVuZF1cbCAgNCBiOiAuICBbJGVuZF1cbCJdCisgIDAgLT4gMSBbc3R5bGU9ZGFzaGVkIGxhYmVsPSJleHAiXQorICAwIC0+IDIgW3N0eWxlPWRhc2hlZCBsYWJlbD0iYSJdCisgIDAgLT4gMyBbc3R5bGU9ZGFzaGVkIGxhYmVsPSJiIl0KKyAgMCAtPiAiMFIzIiBbc3R5bGU9c29saWRdCisgIjBSMyIgW2xhYmVsPSJSMyIsIGZpbGxjb2xvcj0zLCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCisgIDAgLT4gIjBSNGQiIFtsYWJlbD0iWyRlbmRdIiwgc3R5bGU9c29saWRdCisgIjBSNGQiIFtsYWJlbD0iUjQiLCBmaWxsY29sb3I9NSwgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICAxIFtsYWJlbD0iU3RhdGUgMVxuXGwgIDAgJGFjY2VwdDogZXhwIC4gJGVuZFxsIl0KKyAgMSAtPiA0IFtzdHlsZT1zb2xpZCBsYWJlbD0iJGVuZCJdCisgIDIgW2xhYmVsPSJTdGF0ZSAyXG5cbCAgMSBleHA6IGEgLlxsIl0KKyAgMiAtPiAiMlIxIiBbc3R5bGU9c29saWRdCisgIjJSMSIgW2xhYmVsPSJSMSIsIGZpbGxjb2xvcj0zLCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCisgIDMgW2xhYmVsPSJTdGF0ZSAzXG5cbCAgMiBleHA6IGIgLlxsIl0KKyAgMyAtPiAiM1IyIiBbc3R5bGU9c29saWRdCisgIjNSMiIgW2xhYmVsPSJSMiIsIGZpbGxjb2xvcj0zLCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCisgIDQgW2xhYmVsPSJTdGF0ZSA0XG5cbCAgMCAkYWNjZXB0OiBleHAgJGVuZCAuXGwiXQorICA0IC0+ICI0UjAiIFtzdHlsZT1zb2xpZF0KKyAiNFIwIiBbbGFiZWw9IkFjYyIsIGZpbGxjb2xvcj0xLCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCitdXSkKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgR3JhcGggd2l0aCByZWR1Y3Rpb25zIHdpdGggbXVsdGlwbGUgTEFULiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitBVF9URVNUKFtHcmFwaCB3aXRoIHJlZHVjdGlvbnMgd2l0aCBtdWx0aXBsZSBMQVRdLAorW1slJQorZXhwOiBhICc7JyB8IGEgJzsnIHwgYSAnLicgfCBiICc/JyB8IGIgJyEnIHwgYyAnPycgfCBjICc7JzsKK2E6IDsKK2I6IDsKK2M6IDsKK11dLAorW1sKKyAgMCBbbGFiZWw9IlN0YXRlIDBcblxsICAwICRhY2NlcHQ6IC4gZXhwICRlbmRcbCAgMSBleHA6IC4gYSAnOydcbCAgMiAgICB8IC4gYSAnOydcbCAgMyAgICB8IC4gYSAnLidcbCAgNCAgICB8IC4gYiAnPydcbCAgNSAgICB8IC4gYiAnISdcbCAgNiAgICB8IC4gYyAnPydcbCAgNyAgICB8IC4gYyAnOydcbCAgOCBhOiAuICBbJzsnLCAnLiddXGwgIDkgYjogLiAgWyc/JywgJyEnXVxsIDEwIGM6IC4gIFsnOycsICc/J11cbCJdCisgIDAgLT4gMSBbc3R5bGU9ZGFzaGVkIGxhYmVsPSJleHAiXQorICAwIC0+IDIgW3N0eWxlPWRhc2hlZCBsYWJlbD0iYSJdCisgIDAgLT4gMyBbc3R5bGU9ZGFzaGVkIGxhYmVsPSJiIl0KKyAgMCAtPiA0IFtzdHlsZT1kYXNoZWQgbGFiZWw9ImMiXQorICAwIC0+ICIwUjgiIFtzdHlsZT1zb2xpZF0KKyAiMFI4IiBbbGFiZWw9IlI4IiwgZmlsbGNvbG9yPTMsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgMCAtPiAiMFI5IiBbbGFiZWw9IlsnPycsICchJ10iLCBzdHlsZT1zb2xpZF0KKyAiMFI5IiBbbGFiZWw9IlI5IiwgZmlsbGNvbG9yPTMsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgMCAtPiAiMFIxMGQiIFtsYWJlbD0iWyc7JywgJz8nXSIsIHN0eWxlPXNvbGlkXQorICIwUjEwZCIgW2xhYmVsPSJSMTAiLCBmaWxsY29sb3I9NSwgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICAxIFtsYWJlbD0iU3RhdGUgMVxuXGwgIDAgJGFjY2VwdDogZXhwIC4gJGVuZFxsIl0KKyAgMSAtPiA1IFtzdHlsZT1zb2xpZCBsYWJlbD0iJGVuZCJdCisgIDIgW2xhYmVsPSJTdGF0ZSAyXG5cbCAgMSBleHA6IGEgLiAnOydcbCAgMiAgICB8IGEgLiAnOydcbCAgMyAgICB8IGEgLiAnLidcbCJdCisgIDIgLT4gNiBbc3R5bGU9c29saWQgbGFiZWw9Iic7JyJdCisgIDIgLT4gNyBbc3R5bGU9c29saWQgbGFiZWw9IicuJyJdCisgIDMgW2xhYmVsPSJTdGF0ZSAzXG5cbCAgNCBleHA6IGIgLiAnPydcbCAgNSAgICB8IGIgLiAnISdcbCJdCisgIDMgLT4gOCBbc3R5bGU9c29saWQgbGFiZWw9Iic/JyJdCisgIDMgLT4gOSBbc3R5bGU9c29saWQgbGFiZWw9IichJyJdCisgIDQgW2xhYmVsPSJTdGF0ZSA0XG5cbCAgNiBleHA6IGMgLiAnPydcbCAgNyAgICB8IGMgLiAnOydcbCJdCisgIDQgLT4gMTAgW3N0eWxlPXNvbGlkIGxhYmVsPSInOyciXQorICA0IC0+IDExIFtzdHlsZT1zb2xpZCBsYWJlbD0iJz8nIl0KKyAgNSBbbGFiZWw9IlN0YXRlIDVcblxsICAwICRhY2NlcHQ6IGV4cCAkZW5kIC5cbCJdCisgIDUgLT4gIjVSMCIgW3N0eWxlPXNvbGlkXQorICI1UjAiIFtsYWJlbD0iQWNjIiwgZmlsbGNvbG9yPTEsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgNiBbbGFiZWw9IlN0YXRlIDZcblxsICAxIGV4cDogYSAnOycgLiAgWyRlbmRdXGwgIDIgICAgfCBhICc7JyAuICBbJGVuZF1cbCJdCisgIDYgLT4gIjZSMSIgW3N0eWxlPXNvbGlkXQorICI2UjEiIFtsYWJlbD0iUjEiLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICA2IC0+ICI2UjJkIiBbbGFiZWw9IlskZW5kXSIsIHN0eWxlPXNvbGlkXQorICI2UjJkIiBbbGFiZWw9IlIyIiwgZmlsbGNvbG9yPTUsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgNyBbbGFiZWw9IlN0YXRlIDdcblxsICAzIGV4cDogYSAnLicgLlxsIl0KKyAgNyAtPiAiN1IzIiBbc3R5bGU9c29saWRdCisgIjdSMyIgW2xhYmVsPSJSMyIsIGZpbGxjb2xvcj0zLCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCisgIDggW2xhYmVsPSJTdGF0ZSA4XG5cbCAgNCBleHA6IGIgJz8nIC5cbCJdCisgIDggLT4gIjhSNCIgW3N0eWxlPXNvbGlkXQorICI4UjQiIFtsYWJlbD0iUjQiLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICA5IFtsYWJlbD0iU3RhdGUgOVxuXGwgIDUgZXhwOiBiICchJyAuXGwiXQorICA5IC0+ICI5UjUiIFtzdHlsZT1zb2xpZF0KKyAiOVI1IiBbbGFiZWw9IlI1IiwgZmlsbGNvbG9yPTMsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgMTAgW2xhYmVsPSJTdGF0ZSAxMFxuXGwgIDcgZXhwOiBjICc7JyAuXGwiXQorICAxMCAtPiAiMTBSNyIgW3N0eWxlPXNvbGlkXQorICIxMFI3IiBbbGFiZWw9IlI3IiwgZmlsbGNvbG9yPTMsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgMTEgW2xhYmVsPSJTdGF0ZSAxMVxuXGwgIDYgZXhwOiBjICc/JyAuXGwiXQorICAxMSAtPiAiMTFSNiIgW3N0eWxlPXNvbGlkXQorICIxMVI2IiBbbGFiZWw9IlI2IiwgZmlsbGNvbG9yPTMsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KK11dKQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEdyYXBoIHdpdGggYSByZWR1Y3Rpb24gcnVsZSBib3RoIGVuYWJsZWQgYW5kIGRpc2FibGVkLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1RFU1QoW0dyYXBoIHdpdGggYSByZWR1Y3Rpb24gcnVsZSBib3RoIGVuYWJsZWQgYW5kIGRpc2FibGVkXSwKK1tbJSUKK2V4cDogaWZleHAgfCBvcGV4cCB8IGltbTsKK2lmZXhwOiAiaWYiIGV4cCAidGhlbiIgZXhwIGVsc2VleHA7CitlbHNlZXhwOiAiZWxzZSIgZXhwIHwgOworb3BleHA6IGV4cCAnKycgZXhwOworaW1tOiAnMCc7CitdXSwKK1tbCisgIDAgW2xhYmVsPSJTdGF0ZSAwXG5cbCAgMCAkYWNjZXB0OiAuIGV4cCAkZW5kXGwgIDEgZXhwOiAuIGlmZXhwXGwgIDIgICAgfCAuIG9wZXhwXGwgIDMgICAgfCAuIGltbVxsICA0IGlmZXhwOiAuIFwiaWZcIiBleHAgXCJ0aGVuXCIgZXhwIGVsc2VleHBcbCAgNyBvcGV4cDogLiBleHAgJysnIGV4cFxsICA4IGltbTogLiAnMCdcbCJdCisgIDAgLT4gMSBbc3R5bGU9c29saWQgbGFiZWw9IlwiaWZcIiJdCisgIDAgLT4gMiBbc3R5bGU9c29saWQgbGFiZWw9IicwJyJdCisgIDAgLT4gMyBbc3R5bGU9ZGFzaGVkIGxhYmVsPSJleHAiXQorICAwIC0+IDQgW3N0eWxlPWRhc2hlZCBsYWJlbD0iaWZleHAiXQorICAwIC0+IDUgW3N0eWxlPWRhc2hlZCBsYWJlbD0ib3BleHAiXQorICAwIC0+IDYgW3N0eWxlPWRhc2hlZCBsYWJlbD0iaW1tIl0KKyAgMSBbbGFiZWw9IlN0YXRlIDFcblxsICAxIGV4cDogLiBpZmV4cFxsICAyICAgIHwgLiBvcGV4cFxsICAzICAgIHwgLiBpbW1cbCAgNCBpZmV4cDogLiBcImlmXCIgZXhwIFwidGhlblwiIGV4cCBlbHNlZXhwXGwgIDQgICAgICB8IFwiaWZcIiAuIGV4cCBcInRoZW5cIiBleHAgZWxzZWV4cFxsICA3IG9wZXhwOiAuIGV4cCAnKycgZXhwXGwgIDggaW1tOiAuICcwJ1xsIl0KKyAgMSAtPiAxIFtzdHlsZT1zb2xpZCBsYWJlbD0iXCJpZlwiIl0KKyAgMSAtPiAyIFtzdHlsZT1zb2xpZCBsYWJlbD0iJzAnIl0KKyAgMSAtPiA3IFtzdHlsZT1kYXNoZWQgbGFiZWw9ImV4cCJdCisgIDEgLT4gNCBbc3R5bGU9ZGFzaGVkIGxhYmVsPSJpZmV4cCJdCisgIDEgLT4gNSBbc3R5bGU9ZGFzaGVkIGxhYmVsPSJvcGV4cCJdCisgIDEgLT4gNiBbc3R5bGU9ZGFzaGVkIGxhYmVsPSJpbW0iXQorICAyIFtsYWJlbD0iU3RhdGUgMlxuXGwgIDggaW1tOiAnMCcgLlxsIl0KKyAgMiAtPiAiMlI4IiBbc3R5bGU9c29saWRdCisgIjJSOCIgW2xhYmVsPSJSOCIsIGZpbGxjb2xvcj0zLCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCisgIDMgW2xhYmVsPSJTdGF0ZSAzXG5cbCAgMCAkYWNjZXB0OiBleHAgLiAkZW5kXGwgIDcgb3BleHA6IGV4cCAuICcrJyBleHBcbCJdCisgIDMgLT4gOCBbc3R5bGU9c29saWQgbGFiZWw9IiRlbmQiXQorICAzIC0+IDkgW3N0eWxlPXNvbGlkIGxhYmVsPSInKyciXQorICA0IFtsYWJlbD0iU3RhdGUgNFxuXGwgIDEgZXhwOiBpZmV4cCAuXGwiXQorICA0IC0+ICI0UjEiIFtzdHlsZT1zb2xpZF0KKyAiNFIxIiBbbGFiZWw9IlIxIiwgZmlsbGNvbG9yPTMsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgNSBbbGFiZWw9IlN0YXRlIDVcblxsICAyIGV4cDogb3BleHAgLlxsIl0KKyAgNSAtPiAiNVIyIiBbc3R5bGU9c29saWRdCisgIjVSMiIgW2xhYmVsPSJSMiIsIGZpbGxjb2xvcj0zLCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCisgIDYgW2xhYmVsPSJTdGF0ZSA2XG5cbCAgMyBleHA6IGltbSAuXGwiXQorICA2IC0+ICI2UjMiIFtzdHlsZT1zb2xpZF0KKyAiNlIzIiBbbGFiZWw9IlIzIiwgZmlsbGNvbG9yPTMsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgNyBbbGFiZWw9IlN0YXRlIDdcblxsICA0IGlmZXhwOiBcImlmXCIgZXhwIC4gXCJ0aGVuXCIgZXhwIGVsc2VleHBcbCAgNyBvcGV4cDogZXhwIC4gJysnIGV4cFxsIl0KKyAgNyAtPiAxMCBbc3R5bGU9c29saWQgbGFiZWw9IlwidGhlblwiIl0KKyAgNyAtPiA5IFtzdHlsZT1zb2xpZCBsYWJlbD0iJysnIl0KKyAgOCBbbGFiZWw9IlN0YXRlIDhcblxsICAwICRhY2NlcHQ6IGV4cCAkZW5kIC5cbCJdCisgIDggLT4gIjhSMCIgW3N0eWxlPXNvbGlkXQorICI4UjAiIFtsYWJlbD0iQWNjIiwgZmlsbGNvbG9yPTEsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgOSBbbGFiZWw9IlN0YXRlIDlcblxsICAxIGV4cDogLiBpZmV4cFxsICAyICAgIHwgLiBvcGV4cFxsICAzICAgIHwgLiBpbW1cbCAgNCBpZmV4cDogLiBcImlmXCIgZXhwIFwidGhlblwiIGV4cCBlbHNlZXhwXGwgIDcgb3BleHA6IC4gZXhwICcrJyBleHBcbCAgNyAgICAgIHwgZXhwICcrJyAuIGV4cFxsICA4IGltbTogLiAnMCdcbCJdCisgIDkgLT4gMSBbc3R5bGU9c29saWQgbGFiZWw9IlwiaWZcIiJdCisgIDkgLT4gMiBbc3R5bGU9c29saWQgbGFiZWw9IicwJyJdCisgIDkgLT4gMTEgW3N0eWxlPWRhc2hlZCBsYWJlbD0iZXhwIl0KKyAgOSAtPiA0IFtzdHlsZT1kYXNoZWQgbGFiZWw9ImlmZXhwIl0KKyAgOSAtPiA1IFtzdHlsZT1kYXNoZWQgbGFiZWw9Im9wZXhwIl0KKyAgOSAtPiA2IFtzdHlsZT1kYXNoZWQgbGFiZWw9ImltbSJdCisgIDEwIFtsYWJlbD0iU3RhdGUgMTBcblxsICAxIGV4cDogLiBpZmV4cFxsICAyICAgIHwgLiBvcGV4cFxsICAzICAgIHwgLiBpbW1cbCAgNCBpZmV4cDogLiBcImlmXCIgZXhwIFwidGhlblwiIGV4cCBlbHNlZXhwXGwgIDQgICAgICB8IFwiaWZcIiBleHAgXCJ0aGVuXCIgLiBleHAgZWxzZWV4cFxsICA3IG9wZXhwOiAuIGV4cCAnKycgZXhwXGwgIDggaW1tOiAuICcwJ1xsIl0KKyAgMTAgLT4gMSBbc3R5bGU9c29saWQgbGFiZWw9IlwiaWZcIiJdCisgIDEwIC0+IDIgW3N0eWxlPXNvbGlkIGxhYmVsPSInMCciXQorICAxMCAtPiAxMiBbc3R5bGU9ZGFzaGVkIGxhYmVsPSJleHAiXQorICAxMCAtPiA0IFtzdHlsZT1kYXNoZWQgbGFiZWw9ImlmZXhwIl0KKyAgMTAgLT4gNSBbc3R5bGU9ZGFzaGVkIGxhYmVsPSJvcGV4cCJdCisgIDEwIC0+IDYgW3N0eWxlPWRhc2hlZCBsYWJlbD0iaW1tIl0KKyAgMTEgW2xhYmVsPSJTdGF0ZSAxMVxuXGwgIDcgb3BleHA6IGV4cCAuICcrJyBleHBcbCAgNyAgICAgIHwgZXhwICcrJyBleHAgLiAgWyRlbmQsIFwidGhlblwiLCBcImVsc2VcIiwgJysnXVxsIl0KKyAgMTEgLT4gOSBbc3R5bGU9c29saWQgbGFiZWw9IicrJyJdCisgIDExIC0+ICIxMVI3ZCIgW2xhYmVsPSJbJysnXSIsIHN0eWxlPXNvbGlkXQorICIxMVI3ZCIgW2xhYmVsPSJSNyIsIGZpbGxjb2xvcj01LCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCisgIDExIC0+ICIxMVI3IiBbc3R5bGU9c29saWRdCisgIjExUjciIFtsYWJlbD0iUjciLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICAxMiBbbGFiZWw9IlN0YXRlIDEyXG5cbCAgNCBpZmV4cDogXCJpZlwiIGV4cCBcInRoZW5cIiBleHAgLiBlbHNlZXhwXGwgIDUgZWxzZWV4cDogLiBcImVsc2VcIiBleHBcbCAgNiAgICAgICAgfCAuICBbJGVuZCwgXCJ0aGVuXCIsIFwiZWxzZVwiLCAnKyddXGwgIDcgb3BleHA6IGV4cCAuICcrJyBleHBcbCJdCisgIDEyIC0+IDEzIFtzdHlsZT1zb2xpZCBsYWJlbD0iXCJlbHNlXCIiXQorICAxMiAtPiA5IFtzdHlsZT1zb2xpZCBsYWJlbD0iJysnIl0KKyAgMTIgLT4gMTQgW3N0eWxlPWRhc2hlZCBsYWJlbD0iZWxzZWV4cCJdCisgIDEyIC0+ICIxMlI2ZCIgW2xhYmVsPSJbXCJlbHNlXCIsICcrJ10iLCBzdHlsZT1zb2xpZF0KKyAiMTJSNmQiIFtsYWJlbD0iUjYiLCBmaWxsY29sb3I9NSwgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICAxMiAtPiAiMTJSNiIgW3N0eWxlPXNvbGlkXQorICIxMlI2IiBbbGFiZWw9IlI2IiwgZmlsbGNvbG9yPTMsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgMTMgW2xhYmVsPSJTdGF0ZSAxM1xuXGwgIDEgZXhwOiAuIGlmZXhwXGwgIDIgICAgfCAuIG9wZXhwXGwgIDMgICAgfCAuIGltbVxsICA0IGlmZXhwOiAuIFwiaWZcIiBleHAgXCJ0aGVuXCIgZXhwIGVsc2VleHBcbCAgNSBlbHNlZXhwOiBcImVsc2VcIiAuIGV4cFxsICA3IG9wZXhwOiAuIGV4cCAnKycgZXhwXGwgIDggaW1tOiAuICcwJ1xsIl0KKyAgMTMgLT4gMSBbc3R5bGU9c29saWQgbGFiZWw9IlwiaWZcIiJdCisgIDEzIC0+IDIgW3N0eWxlPXNvbGlkIGxhYmVsPSInMCciXQorICAxMyAtPiAxNSBbc3R5bGU9ZGFzaGVkIGxhYmVsPSJleHAiXQorICAxMyAtPiA0IFtzdHlsZT1kYXNoZWQgbGFiZWw9ImlmZXhwIl0KKyAgMTMgLT4gNSBbc3R5bGU9ZGFzaGVkIGxhYmVsPSJvcGV4cCJdCisgIDEzIC0+IDYgW3N0eWxlPWRhc2hlZCBsYWJlbD0iaW1tIl0KKyAgMTQgW2xhYmVsPSJTdGF0ZSAxNFxuXGwgIDQgaWZleHA6IFwiaWZcIiBleHAgXCJ0aGVuXCIgZXhwIGVsc2VleHAgLlxsIl0KKyAgMTQgLT4gIjE0UjQiIFtzdHlsZT1zb2xpZF0KKyAiMTRSNCIgW2xhYmVsPSJSNCIsIGZpbGxjb2xvcj0zLCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCisgIDE1IFtsYWJlbD0iU3RhdGUgMTVcblxsICA1IGVsc2VleHA6IFwiZWxzZVwiIGV4cCAuICBbJGVuZCwgXCJ0aGVuXCIsIFwiZWxzZVwiLCAnKyddXGwgIDcgb3BleHA6IGV4cCAuICcrJyBleHBcbCJdCisgIDE1IC0+IDkgW3N0eWxlPXNvbGlkIGxhYmVsPSInKyciXQorICAxNSAtPiAiMTVSNWQiIFtsYWJlbD0iWycrJ10iLCBzdHlsZT1zb2xpZF0KKyAiMTVSNWQiIFtsYWJlbD0iUjUiLCBmaWxsY29sb3I9NSwgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICAxNSAtPiAiMTVSNSIgW3N0eWxlPXNvbGlkXQorICIxNVI1IiBbbGFiZWw9IlI1IiwgZmlsbGNvbG9yPTMsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KK11dKQorCittNF9wb3BkZWYoW0FUX1RFU1RdKQpkaWZmIC0tZ2l0IGEvdGVzdHMvcGFja2FnZS5tNCBiL3Rlc3RzL3BhY2thZ2UubTQKaW5kZXggNGM1OTI5My4uM2I1OTljMCAxMDA2NDQKLS0tIGEvdGVzdHMvcGFja2FnZS5tNAorKysgYi90ZXN0cy9wYWNrYWdlLm00CkBAIC0xLDYgKzEsNiBAQAogIyBTaWduYXR1cmUgb2YgdGhlIGN1cnJlbnQgcGFja2FnZS4KIG00X2RlZmluZShbQVRfUEFDS0FHRV9OQU1FXSwgICAgICBbR05VIEJpc29uXSkKIG00X2RlZmluZShbQVRfUEFDS0FHRV9UQVJOQU1FXSwgICBbYmlzb25dKQotbTRfZGVmaW5lKFtBVF9QQUNLQUdFX1ZFUlNJT05dLCAgIFsyLjNdKQotbTRfZGVmaW5lKFtBVF9QQUNLQUdFX1NUUklOR10sICAgIFtHTlUgQmlzb24gMi4zXSkKK200X2RlZmluZShbQVRfUEFDS0FHRV9WRVJTSU9OXSwgICBbMi43XSkKK200X2RlZmluZShbQVRfUEFDS0FHRV9TVFJJTkddLCAgICBbR05VIEJpc29uIDIuN10pCiBtNF9kZWZpbmUoW0FUX1BBQ0tBR0VfQlVHUkVQT1JUXSwgW2J1Zy1iaXNvbkBnbnUub3JnXSkKZGlmZiAtLWdpdCBhL3Rlc3RzL3B1c2guYXQgYi90ZXN0cy9wdXNoLmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiOTkzOTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9wdXNoLmF0CkBAIC0wLDAgKzEsMTU5IEBACisjIENoZWNraW5nIFB1c2ggUGFyc2luZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG90ZXN0IC0qLQorCisjIENvcHlyaWdodCAoQykgMjAwNywgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitBVF9CQU5ORVIoW1tQdXNoIFBhcnNpbmcgVGVzdHNdXSkKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1lbW9yeSBMZWFrIGZvciBFYXJseSBEZWxldGlvbi4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitBVF9TRVRVUChbW01lbW9yeSBMZWFrIGZvciBFYXJseSBEZWxldGlvbl1dKQorCisjIFJlcXVpcmVzIFZhbGdyaW5kLgorQVRfQklTT05fT1BUSU9OX1BVU0hERUZTCitBVF9EQVRBX0dSQU1NQVIoW1tpbnB1dC55XV0sCitbWworJXsKKyAgI2luY2x1ZGUgPGFzc2VydC5oPgorICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgI2RlZmluZSBZWUlOSVRERVBUSCAxCitdQVRfWVlFUlJPUl9ERUNMQVJFWworJX0KKworJWRlZmluZSBhcGkucHVyZQorJWRlZmluZSBhcGkucHVzaC1wdWxsIHB1c2gKKworJSUKKworc3RhcnQ6ICdhJyAnYicgJ2MnIDsKKworJSUKKworXUFUX1lZRVJST1JfREVGSU5FWworCitpbnQKK21haW4gKHZvaWQpCit7CisgIHl5cHN0YXRlICpwczsKKworICAvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgdHJ5IHRvIGZyZWUgcHMtPnl5c3MgaW4gdGhpcyBjYXNlLiAgKi8KKyAgcHMgPSB5eXBzdGF0ZV9uZXcgKCk7CisgIHl5cHN0YXRlX2RlbGV0ZSAocHMpOworCisgIC8qIHl5cHN0YXRlX2RlbGV0ZSB1c2VkIHRvIGxlYWsgcHMtPnl5c3MgaWYgdGhlIHN0YWNrIHdhcyByZWFsbG9jYXRlZCBidXQgdGhlCisgICAgIHBhcnNlIGRpZCBub3QgcmV0dXJuIG9uIHN1Y2Nlc3MsIHN5bnRheCBlcnJvciwgb3IgbWVtb3J5IGV4aGF1c3Rpb24uICAqLworICBwcyA9IHl5cHN0YXRlX25ldyAoKTsKKyAgYXNzZXJ0ICh5eXB1c2hfcGFyc2UgKHBzLCAnYScsIFlZX05VTEwpID09IFlZUFVTSF9NT1JFKTsKKyAgeXlwc3RhdGVfZGVsZXRlIChwcyk7CisKKyAgcHMgPSB5eXBzdGF0ZV9uZXcgKCk7CisgIGFzc2VydCAoeXlwdXNoX3BhcnNlIChwcywgJ2EnLCBZWV9OVUxMKSA9PSBZWVBVU0hfTU9SRSk7CisgIGFzc2VydCAoeXlwdXNoX3BhcnNlIChwcywgJ2InLCBZWV9OVUxMKSA9PSBZWVBVU0hfTU9SRSk7CisgIHl5cHN0YXRlX2RlbGV0ZSAocHMpOworCisgIHJldHVybiAwOworfQorXV0pCitBVF9CSVNPTl9PUFRJT05fUE9QREVGUworCitBVF9CSVNPTl9DSEVDSyhbWy1vIGlucHV0LmMgaW5wdXQueV1dKQorQVRfQ09NUElMRShbW2lucHV0XV0pCitBVF9QQVJTRVJfQ0hFQ0soW1suL2lucHV0XV0pCisKK0FUX0NMRUFOVVAKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNdWx0aXBsZSBpbXB1cmUgaW5zdGFuY2VzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitBVF9TRVRVUChbW011bHRpcGxlIGltcHVyZSBpbnN0YW5jZXNdXSkKKworbTRfcHVzaGRlZihbQVRfTVVMVElQTEVfSU1QVVJFX0lOU1RBTkNFU19DSEVDS10sIFsKK0FUX0JJU09OX09QVElPTl9QVVNIREVGUyhbJWRlZmluZSBhcGkucHVzaC1wdWxsICQxXSkKK0FUX0RBVEFfR1JBTU1BUihbW2lucHV0LnldXSwKK1tbCisleworICAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgICNpbmNsdWRlIDxzdGRpby5oPgorXUFUX1lZRVJST1JfREVDTEFSRVsKK11tNF9pZihbJDFdLCBbW2JvdGhdXSwgW0FUX1lZTEVYX0RFQ0xBUkUoW10pXSlbCislfQorCislZGVmaW5lIGFwaS5wdXNoLXB1bGwgXSQxWworCislJQorCitzdGFydDogOworCislJQorXUFUX1lZRVJST1JfREVGSU5FWworXW00X2lmKFskMV0sIFtbYm90aF1dLCBbQVRfWVlMRVhfREVGSU5FXSlbCisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCAyOyArK2kpCisgICAgeworICAgICAgeXlwc3RhdGUgKnBzID0geXlwc3RhdGVfbmV3ICgpOworICAgICAgYXNzZXJ0IChwcyk7CisgICAgICBhc3NlcnQgKHl5cHN0YXRlX25ldyAoKSA9PSBZWV9OVUxMKTsKKyAgICAgIF1tNF9pZihbJDFdLCBbW2JvdGhdXSwgW1thc3NlcnQgKHl5cGFyc2UgKCkgPT0gMildXSlbOworICAgICAgeXljaGFyID0gMDsKKyAgICAgIGFzc2VydCAoeXlwdXNoX3BhcnNlIChwcykgPT0gMCk7CisgICAgICBhc3NlcnQgKHl5cHN0YXRlX25ldyAoKSA9PSBZWV9OVUxMKTsKKyAgICAgIF1tNF9pZihbJDFdLCBbW2JvdGhdXSwgW1thc3NlcnQgKHl5cGFyc2UgKCkgPT0gMildXSlbOworICAgICAgeXlwc3RhdGVfZGVsZXRlIChwcyk7CisgICAgfQorCisgIHJldHVybiAwOworfQorXV0pCisKK0FUX0JJU09OX0NIRUNLKFtbLW8gaW5wdXQuYyBpbnB1dC55XV0pCitBVF9DT01QSUxFKFtbaW5wdXRdXSkKK0FUX1BBUlNFUl9DSEVDSyhbWy4vaW5wdXRdXSkKK0FUX0JJU09OX09QVElPTl9QT1BERUZTCitdKQorCitBVF9NVUxUSVBMRV9JTVBVUkVfSU5TVEFOQ0VTX0NIRUNLKFtbYm90aF1dKQorQVRfTVVMVElQTEVfSU1QVVJFX0lOU1RBTkNFU19DSEVDSyhbW3B1c2hdXSkKKworbTRfcG9wZGVmKFtBVF9NVUxUSVBMRV9JTVBVUkVfSU5TVEFOQ0VTX0NIRUNLXSkKKworQVRfQ0xFQU5VUAorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgVW5zdXBwb3J0ZWQgU2tlbGV0b25zLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1NFVFVQKFtbVW5zdXBwb3J0ZWQgU2tlbGV0b25zXV0pCisKK0FUX0JJU09OX09QVElPTl9QVVNIREVGUworQVRfREFUQShbW2lucHV0LnldXSwKK1tbJWdsci1wYXJzZXIKKyVkZWZpbmUgYXBpLnB1c2gtcHVsbCBwdXNoCislJQorc3RhcnQ6IDsKK11dKQorQVRfQklTT05fT1BUSU9OX1BPUERFRlMKKworQVRfQklTT05fQ0hFQ0soW1tpbnB1dC55XV0sIFtbMV1dLCBbXSwKK1tbaW5wdXQueToyLjktMjE6IGVycm9yOiAlZGVmaW5lIHZhcmlhYmxlICdhcGkucHVzaC1wdWxsJyBpcyBub3QgdXNlZAorXV0pCisKK0FUX0NMRUFOVVAKZGlmZiAtLWdpdCBhL3Rlc3RzL3JlZHVjZS5hdCBiL3Rlc3RzL3JlZHVjZS5hdAppbmRleCA5MGIwMTMwLi40N2Y5MjNjIDEwMDY0NAotLS0gYS90ZXN0cy9yZWR1Y2UuYXQKKysrIGIvdGVzdHMvcmVkdWNlLmF0CkBAIC0xLDIwICsxLDE5IEBACiAjIEV4ZXJjaXNpbmcgQmlzb24gR3JhbW1hciBSZWR1Y3Rpb24uICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvdGVzdCAtKi0KLSMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIyBhbnkgbGF0ZXIgdmVyc2lvbi4KLQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIwogIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCisjCiAjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSMgMDIxMTAtMTMwMSwgVVNBLgorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIAogQVRfQkFOTkVSKFtbR3JhbW1hciBSZWR1Y3Rpb24uXV0pCiAKQEAgLTI3LDcgKzI2LDcgQEAKIAogQVRfREFUQShbW2lucHV0LnldXSwKIFtbJXZlcmJvc2UKLSVvdXRwdXQ9ImlucHV0LmMiCislb3V0cHV0ICJpbnB1dC5jIgogCiAldG9rZW4gdXNlbGVzczEKICV0b2tlbiB1c2VsZXNzMgpAQCAtNDQsMTAgKzQzLDEwIEBACiBleHA6IHVzZWZ1bDsKIF1dKQogCi1BVF9DSEVDSyhbW2Jpc29uIGlucHV0LnldXSkKK0FUX0JJU09OX0NIRUNLKFtbaW5wdXQueV1dKQogCiBBVF9DSEVDSyhbW3NlZCAtbiAnL15HcmFtbWFyL3E7L14kLyFwJyBpbnB1dC5vdXRwdXRdXSwgMCwKLVtbVGVybWluYWxzIHdoaWNoIGFyZSBub3QgdXNlZAorW1tUZXJtaW5hbHMgdW51c2VkIGluIGdyYW1tYXIKICAgIHVzZWxlc3MxCiAgICB1c2VsZXNzMgogICAgdXNlbGVzczMKQEAgLTcxLDcgKzcwLDcgQEAKIAogQVRfREFUQShbW2lucHV0LnldXSwKIFtbJXZlcmJvc2UKLSVvdXRwdXQ9ImlucHV0LmMiCislb3V0cHV0ICJpbnB1dC5jIgogCiAlbnRlcm0gdXNlbGVzczEKICVudGVybSB1c2VsZXNzMgpAQCAtODgsMjEgKzg3LDIxIEBACiBleHA6IHVzZWZ1bDsKIF1dKQogCi1BVF9DSEVDSyhbW2Jpc29uIGlucHV0LnldXSwgMCwgW10sCi1bW2lucHV0Lnk6IHdhcm5pbmc6IDkgdXNlbGVzcyBub250ZXJtaW5hbHMKLWlucHV0Lnk6NC44LTE1OiB3YXJuaW5nOiB1c2VsZXNzIG5vbnRlcm1pbmFsOiB1c2VsZXNzMQotaW5wdXQueTo1LjgtMTU6IHdhcm5pbmc6IHVzZWxlc3Mgbm9udGVybWluYWw6IHVzZWxlc3MyCi1pbnB1dC55OjYuOC0xNTogd2FybmluZzogdXNlbGVzcyBub250ZXJtaW5hbDogdXNlbGVzczMKLWlucHV0Lnk6Ny44LTE1OiB3YXJuaW5nOiB1c2VsZXNzIG5vbnRlcm1pbmFsOiB1c2VsZXNzNAotaW5wdXQueTo4LjgtMTU6IHdhcm5pbmc6IHVzZWxlc3Mgbm9udGVybWluYWw6IHVzZWxlc3M1Ci1pbnB1dC55OjkuOC0xNTogd2FybmluZzogdXNlbGVzcyBub250ZXJtaW5hbDogdXNlbGVzczYKLWlucHV0Lnk6MTAuOC0xNTogd2FybmluZzogdXNlbGVzcyBub250ZXJtaW5hbDogdXNlbGVzczcKLWlucHV0Lnk6MTEuOC0xNTogd2FybmluZzogdXNlbGVzcyBub250ZXJtaW5hbDogdXNlbGVzczgKLWlucHV0Lnk6MTIuOC0xNTogd2FybmluZzogdXNlbGVzcyBub250ZXJtaW5hbDogdXNlbGVzczkKK0FUX0JJU09OX0NIRUNLKFtbaW5wdXQueV1dLCAwLCBbXSwKK1tbaW5wdXQueTogd2FybmluZzogOSBub250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyCitpbnB1dC55OjQuOC0xNTogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzMQoraW5wdXQueTo1LjgtMTU6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczIKK2lucHV0Lnk6Ni44LTE1OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3MzCitpbnB1dC55OjcuOC0xNTogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzNAoraW5wdXQueTo4LjgtMTU6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczUKK2lucHV0Lnk6OS44LTE1OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3M2CitpbnB1dC55OjEwLjgtMTU6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczcKK2lucHV0Lnk6MTEuOC0xNTogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzOAoraW5wdXQueToxMi44LTE1OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3M5CiBdXSkKIAogQVRfQ0hFQ0soW1tzZWQgLW4gJy9eR3JhbW1hci9xOy9eJC8hcCcgaW5wdXQub3V0cHV0XV0sIDAsCi1bW1VzZWxlc3Mgbm9udGVybWluYWxzCitbW05vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXIKICAgIHVzZWxlc3MxCiAgICB1c2VsZXNzMgogICAgdXNlbGVzczMKQEAgLTEyOCw3ICsxMjcsNyBAQAogCiBBVF9EQVRBKFtbaW5wdXQueV1dLAogW1sldmVyYm9zZQotJW91dHB1dD0iaW5wdXQuYyIKKyVvdXRwdXQgImlucHV0LmMiCiAldG9rZW4gdXNlZnVsCiAlJQogZXhwOiB1c2VmdWw7CkBAIC0xNDMsMzAgKzE0Miw5MCBAQAogdXNlbGVzczk6ICc5JzsKIF1dKQogCi1BVF9DSEVDSyhbW2Jpc29uIGlucHV0LnldXSwgMCwgW10sCi1bW2lucHV0Lnk6IHdhcm5pbmc6IDkgdXNlbGVzcyBub250ZXJtaW5hbHMgYW5kIDkgdXNlbGVzcyBydWxlcwotaW5wdXQueTo2LjEtODogd2FybmluZzogdXNlbGVzcyBub250ZXJtaW5hbDogdXNlbGVzczEKLWlucHV0Lnk6Ny4xLTg6IHdhcm5pbmc6IHVzZWxlc3Mgbm9udGVybWluYWw6IHVzZWxlc3MyCi1pbnB1dC55OjguMS04OiB3YXJuaW5nOiB1c2VsZXNzIG5vbnRlcm1pbmFsOiB1c2VsZXNzMwotaW5wdXQueTo5LjEtODogd2FybmluZzogdXNlbGVzcyBub250ZXJtaW5hbDogdXNlbGVzczQKLWlucHV0Lnk6MTAuMS04OiB3YXJuaW5nOiB1c2VsZXNzIG5vbnRlcm1pbmFsOiB1c2VsZXNzNQotaW5wdXQueToxMS4xLTg6IHdhcm5pbmc6IHVzZWxlc3Mgbm9udGVybWluYWw6IHVzZWxlc3M2Ci1pbnB1dC55OjEyLjEtODogd2FybmluZzogdXNlbGVzcyBub250ZXJtaW5hbDogdXNlbGVzczcKLWlucHV0Lnk6MTMuMS04OiB3YXJuaW5nOiB1c2VsZXNzIG5vbnRlcm1pbmFsOiB1c2VsZXNzOAotaW5wdXQueToxNC4xLTg6IHdhcm5pbmc6IHVzZWxlc3Mgbm9udGVybWluYWw6IHVzZWxlc3M5Ci1pbnB1dC55OjYuMTEtMTM6IHdhcm5pbmc6IHVzZWxlc3MgcnVsZTogdXNlbGVzczE6ICcxJwotaW5wdXQueTo3LjExLTEzOiB3YXJuaW5nOiB1c2VsZXNzIHJ1bGU6IHVzZWxlc3MyOiAnMicKLWlucHV0Lnk6OC4xMS0xMzogd2FybmluZzogdXNlbGVzcyBydWxlOiB1c2VsZXNzMzogJzMnCi1pbnB1dC55OjkuMTEtMTM6IHdhcm5pbmc6IHVzZWxlc3MgcnVsZTogdXNlbGVzczQ6ICc0JwotaW5wdXQueToxMC4xMS0xMzogd2FybmluZzogdXNlbGVzcyBydWxlOiB1c2VsZXNzNTogJzUnCi1pbnB1dC55OjExLjExLTEzOiB3YXJuaW5nOiB1c2VsZXNzIHJ1bGU6IHVzZWxlc3M2OiAnNicKLWlucHV0Lnk6MTIuMTEtMTM6IHdhcm5pbmc6IHVzZWxlc3MgcnVsZTogdXNlbGVzczc6ICc3JwotaW5wdXQueToxMy4xMS0xMzogd2FybmluZzogdXNlbGVzcyBydWxlOiB1c2VsZXNzODogJzgnCi1pbnB1dC55OjE0LjExLTEzOiB3YXJuaW5nOiB1c2VsZXNzIHJ1bGU6IHVzZWxlc3M5OiAnOScKK0FUX0JJU09OX0NIRUNLKFtbLWZjYXJldCBpbnB1dC55XV0sIDAsIFtdLAorW1tpbnB1dC55OiB3YXJuaW5nOiA5IG5vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXIKK2lucHV0Lnk6IHdhcm5pbmc6IDkgcnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyCitpbnB1dC55OjYuMS04OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3MxCisgdXNlbGVzczE6ICcxJzsKKyBeXl5eXl5eXgoraW5wdXQueTo3LjEtODogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzMgorIHVzZWxlc3MyOiAnMic7CisgXl5eXl5eXl4KK2lucHV0Lnk6OC4xLTg6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczMKKyB1c2VsZXNzMzogJzMnOworIF5eXl5eXl5eCitpbnB1dC55OjkuMS04OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3M0CisgdXNlbGVzczQ6ICc0JzsKKyBeXl5eXl5eXgoraW5wdXQueToxMC4xLTg6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczUKKyB1c2VsZXNzNTogJzUnOworIF5eXl5eXl5eCitpbnB1dC55OjExLjEtODogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzNgorIHVzZWxlc3M2OiAnNic7CisgXl5eXl5eXl4KK2lucHV0Lnk6MTIuMS04OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3M3CisgdXNlbGVzczc6ICc3JzsKKyBeXl5eXl5eXgoraW5wdXQueToxMy4xLTg6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczgKKyB1c2VsZXNzODogJzgnOworIF5eXl5eXl5eCitpbnB1dC55OjE0LjEtODogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzOQorIHVzZWxlc3M5OiAnOSc7CisgXl5eXl5eXl4KK2lucHV0Lnk6Ni4xMS0xMzogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIGdyYW1tYXIKKyB1c2VsZXNzMTogJzEnOworICAgICAgICAgICBeXl4KK2lucHV0Lnk6Ny4xMS0xMzogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIGdyYW1tYXIKKyB1c2VsZXNzMjogJzInOworICAgICAgICAgICBeXl4KK2lucHV0Lnk6OC4xMS0xMzogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIGdyYW1tYXIKKyB1c2VsZXNzMzogJzMnOworICAgICAgICAgICBeXl4KK2lucHV0Lnk6OS4xMS0xMzogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIGdyYW1tYXIKKyB1c2VsZXNzNDogJzQnOworICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTAuMTEtMTM6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyCisgdXNlbGVzczU6ICc1JzsKKyAgICAgICAgICAgXl5eCitpbnB1dC55OjExLjExLTEzOiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcgorIHVzZWxlc3M2OiAnNic7CisgICAgICAgICAgIF5eXgoraW5wdXQueToxMi4xMS0xMzogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIGdyYW1tYXIKKyB1c2VsZXNzNzogJzcnOworICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTMuMTEtMTM6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyCisgdXNlbGVzczg6ICc4JzsKKyAgICAgICAgICAgXl5eCitpbnB1dC55OjE0LjExLTEzOiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcgorIHVzZWxlc3M5OiAnOSc7CisgICAgICAgICAgIF5eXgorXV0pCisKK0FUX0JJU09OX0NIRUNLKFtbaW5wdXQueV1dLCAwLCBbXSwKK1tbaW5wdXQueTogd2FybmluZzogOSBub250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyCitpbnB1dC55OiB3YXJuaW5nOiA5IHJ1bGVzIHVzZWxlc3MgaW4gZ3JhbW1hcgoraW5wdXQueTo2LjEtODogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzMQoraW5wdXQueTo3LjEtODogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzMgoraW5wdXQueTo4LjEtODogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzMworaW5wdXQueTo5LjEtODogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzNAoraW5wdXQueToxMC4xLTg6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczUKK2lucHV0Lnk6MTEuMS04OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3M2CitpbnB1dC55OjEyLjEtODogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzNworaW5wdXQueToxMy4xLTg6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczgKK2lucHV0Lnk6MTQuMS04OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3M5CitpbnB1dC55OjYuMTEtMTM6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzMTogJzEnCitpbnB1dC55OjcuMTEtMTM6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzMjogJzInCitpbnB1dC55OjguMTEtMTM6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzMzogJzMnCitpbnB1dC55OjkuMTEtMTM6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzNDogJzQnCitpbnB1dC55OjEwLjExLTEzOiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczU6ICc1JworaW5wdXQueToxMS4xMS0xMzogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3M2OiAnNicKK2lucHV0Lnk6MTIuMTEtMTM6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzNzogJzcnCitpbnB1dC55OjEzLjExLTEzOiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczg6ICc4JworaW5wdXQueToxNC4xMS0xMzogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3M5OiAnOScKIF1dKQogCiBBVF9DSEVDSyhbW3NlZCAtbiAnL15HcmFtbWFyL3E7L14kLyFwJyBpbnB1dC5vdXRwdXRdXSwgMCwKLVtbVXNlbGVzcyBub250ZXJtaW5hbHMKK1tbTm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hcgogICAgdXNlbGVzczEKICAgIHVzZWxlc3MyCiAgICB1c2VsZXNzMwpAQCAtMTc2LDcgKzIzNSw3IEBACiAgICB1c2VsZXNzNwogICAgdXNlbGVzczgKICAgIHVzZWxlc3M5Ci1UZXJtaW5hbHMgd2hpY2ggYXJlIG5vdCB1c2VkCitUZXJtaW5hbHMgdW51c2VkIGluIGdyYW1tYXIKICAgICcxJwogICAgJzInCiAgICAnMycKQEAgLTE4Niw3ICsyNDUsNyBAQAogICAgJzcnCiAgICAnOCcKICAgICc5JwotVXNlbGVzcyBydWxlcworUnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyCiAgICAgMiB1c2VsZXNzMTogJzEnCiAgICAgMyB1c2VsZXNzMjogJzInCiAgICAgNCB1c2VsZXNzMzogJzMnCkBAIC0yMjEsNyArMjgwLDcgQEAKIC8qIEEgdXNlZnVsIG9uZS4gKi8KICV0b2tlbiB1c2VmdWwKICV2ZXJib3NlCi0lb3V0cHV0PSJub3QtcmVkdWNlZC5jIgorJW91dHB1dCAibm90LXJlZHVjZWQuYyIKIAogJSUKIApAQCAtMjM4LDIyICsyOTcsNDMgQEAKICUlCiBdXSkKIAotQVRfQ0hFQ0soW1tiaXNvbiBub3QtcmVkdWNlZC55XV0sIDAsIFtdLAotW1tub3QtcmVkdWNlZC55OiB3YXJuaW5nOiAyIHVzZWxlc3Mgbm9udGVybWluYWxzIGFuZCAzIHVzZWxlc3MgcnVsZXMKLW5vdC1yZWR1Y2VkLnk6MTQuMS0xMzogd2FybmluZzogdXNlbGVzcyBub250ZXJtaW5hbDogbm90X3JlYWNoYWJsZQotbm90LXJlZHVjZWQueToxMS42LTE5OiB3YXJuaW5nOiB1c2VsZXNzIG5vbnRlcm1pbmFsOiBub25fcHJvZHVjdGl2ZQotbm90LXJlZHVjZWQueToxMS42LTU3OiB3YXJuaW5nOiB1c2VsZXNzIHJ1bGU6IGV4cDogbm9uX3Byb2R1Y3RpdmUKLW5vdC1yZWR1Y2VkLnk6MTQuMTYtNTY6IHdhcm5pbmc6IHVzZWxlc3MgcnVsZTogbm90X3JlYWNoYWJsZTogdXNlZnVsCi1ub3QtcmVkdWNlZC55OjE3LjE3LTE4LjYzOiB3YXJuaW5nOiB1c2VsZXNzIHJ1bGU6IG5vbl9wcm9kdWN0aXZlOiBub25fcHJvZHVjdGl2ZSB1c2VsZXNzX3Rva2VuCitBVF9CSVNPTl9DSEVDSyhbWy1mY2FyZXQgbm90LXJlZHVjZWQueV1dLCAwLCBbXSwKK1tbbm90LXJlZHVjZWQueTogd2FybmluZzogMiBub250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyCitub3QtcmVkdWNlZC55OiB3YXJuaW5nOiAzIHJ1bGVzIHVzZWxlc3MgaW4gZ3JhbW1hcgorbm90LXJlZHVjZWQueToxNC4xLTEzOiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IG5vdF9yZWFjaGFibGUKKyBub3RfcmVhY2hhYmxlOiB1c2VmdWwgIHsgLyogQSBub3QgcmVhY2hhYmxlIGFjdGlvbi4gKi8gfQorIF5eXl5eXl5eXl5eXl4KK25vdC1yZWR1Y2VkLnk6MTEuNi0xOTogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiBub25fcHJvZHVjdGl2ZQorICAgIHwgbm9uX3Byb2R1Y3RpdmUgICAgeyAvKiBBIG5vbiBwcm9kdWN0aXZlIGFjdGlvbi4gKi8gfQorICAgICAgXl5eXl5eXl5eXl5eXl4KK25vdC1yZWR1Y2VkLnk6MTEuNi01Nzogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIGdyYW1tYXIKKyAgICB8IG5vbl9wcm9kdWN0aXZlICAgIHsgLyogQSBub24gcHJvZHVjdGl2ZSBhY3Rpb24uICovIH0KKyAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK25vdC1yZWR1Y2VkLnk6MTQuMTYtNTY6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyCisgbm90X3JlYWNoYWJsZTogdXNlZnVsICB7IC8qIEEgbm90IHJlYWNoYWJsZSBhY3Rpb24uICovIH0KKyAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorbm90LXJlZHVjZWQueToxNy4xNy0xOC42Mzogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIGdyYW1tYXIKKyBub25fcHJvZHVjdGl2ZTogbm9uX3Byb2R1Y3RpdmUgdXNlbGVzc190b2tlbgorICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitdXSkKKworQVRfQklTT05fQ0hFQ0soW1tub3QtcmVkdWNlZC55XV0sIDAsIFtdLAorW1tub3QtcmVkdWNlZC55OiB3YXJuaW5nOiAyIG5vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXIKK25vdC1yZWR1Y2VkLnk6IHdhcm5pbmc6IDMgcnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyCitub3QtcmVkdWNlZC55OjE0LjEtMTM6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogbm90X3JlYWNoYWJsZQorbm90LXJlZHVjZWQueToxMS42LTE5OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IG5vbl9wcm9kdWN0aXZlCitub3QtcmVkdWNlZC55OjExLjYtNTc6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyOiBleHA6IG5vbl9wcm9kdWN0aXZlCitub3QtcmVkdWNlZC55OjE0LjE2LTU2OiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcjogbm90X3JlYWNoYWJsZTogdXNlZnVsCitub3QtcmVkdWNlZC55OjE3LjE3LTE4LjYzOiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcjogbm9uX3Byb2R1Y3RpdmU6IG5vbl9wcm9kdWN0aXZlIHVzZWxlc3NfdG9rZW4KIF1dKQogCiBBVF9DSEVDSyhbW3NlZCAtbiAnL15HcmFtbWFyL3E7L14kLyFwJyBub3QtcmVkdWNlZC5vdXRwdXRdXSwgMCwKLVtbVXNlbGVzcyBub250ZXJtaW5hbHMKK1tbTm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hcgogICAgbm90X3JlYWNoYWJsZQogICAgbm9uX3Byb2R1Y3RpdmUKLVRlcm1pbmFscyB3aGljaCBhcmUgbm90IHVzZWQKK1Rlcm1pbmFscyB1bnVzZWQgaW4gZ3JhbW1hcgogICAgdXNlbGVzc190b2tlbgotVXNlbGVzcyBydWxlcworUnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyCiAgICAgMiBleHA6IG5vbl9wcm9kdWN0aXZlCiAgICAgMyBub3RfcmVhY2hhYmxlOiB1c2VmdWwKICAgICA0IG5vbl9wcm9kdWN0aXZlOiBub25fcHJvZHVjdGl2ZSB1c2VsZXNzX3Rva2VuCkBAIC0yNjcsNyArMzQ3LDcgQEAKIC8qIEEgdXNlZnVsIG9uZS4gKi8KICV0b2tlbiB1c2VmdWwKICV2ZXJib3NlCi0lb3V0cHV0PSJyZWR1Y2VkLmMiCislb3V0cHV0ICJyZWR1Y2VkLmMiCiAKICUlCiAKQEAgLTI4NCw3ICszNjQsNyBAQAogJSUKIF1dKQogCi1BVF9DSEVDSyhbW2Jpc29uIHJlZHVjZWQueV1dKQorQVRfQklTT05fQ0hFQ0soW1tyZWR1Y2VkLnldXSkKIAogIyBDb21wYXJpbmcgdGhlIHBhcnNlcnMuCiBjcCByZWR1Y2VkLmMgZXhwb3V0CkBAIC0zMDQsNyArMzg0LDcgQEAKIAogQVRfREFUQShbW2lucHV0LnldXSwKIFtbJXZlcmJvc2UKLSVvdXRwdXQ9ImlucHV0LmMiCislb3V0cHV0ICJpbnB1dC5jIgogJXRva2VuIHVzZWZ1bAogJSUKIGV4cDogdXNlZnVsIHwgdW5kZXJpdmFibGU7CkBAIC0zMTIsMjAgKzM5MiwyMSBAQAogaW5kaXJlY3Rpb246IHVuZGVyaXZhYmxlOwogXV0pCiAKLUFUX0NIRUNLKFtbYmlzb24gaW5wdXQueV1dLCAwLCBbXSwKLVtbaW5wdXQueTogd2FybmluZzogMiB1c2VsZXNzIG5vbnRlcm1pbmFscyBhbmQgMyB1c2VsZXNzIHJ1bGVzCi1pbnB1dC55OjUuMTUtMjU6IHdhcm5pbmc6IHVzZWxlc3Mgbm9udGVybWluYWw6IHVuZGVyaXZhYmxlCi1pbnB1dC55OjYuMTQtMjQ6IHdhcm5pbmc6IHVzZWxlc3Mgbm9udGVybWluYWw6IGluZGlyZWN0aW9uCi1pbnB1dC55OjUuMTUtMjU6IHdhcm5pbmc6IHVzZWxlc3MgcnVsZTogZXhwOiB1bmRlcml2YWJsZQotaW5wdXQueTo2LjE0LTI0OiB3YXJuaW5nOiB1c2VsZXNzIHJ1bGU6IHVuZGVyaXZhYmxlOiBpbmRpcmVjdGlvbgotaW5wdXQueTo3LjE0LTI0OiB3YXJuaW5nOiB1c2VsZXNzIHJ1bGU6IGluZGlyZWN0aW9uOiB1bmRlcml2YWJsZQorQVRfQklTT05fQ0hFQ0soW1tpbnB1dC55XV0sIDAsIFtdLAorW1tpbnB1dC55OiB3YXJuaW5nOiAyIG5vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXIKK2lucHV0Lnk6IHdhcm5pbmc6IDMgcnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyCitpbnB1dC55OjUuMTUtMjU6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdW5kZXJpdmFibGUKK2lucHV0Lnk6Ni4xNC0yNDogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiBpbmRpcmVjdGlvbgoraW5wdXQueTo1LjE1LTI1OiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcjogZXhwOiB1bmRlcml2YWJsZQoraW5wdXQueTo2LjE0LTI0OiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcjogdW5kZXJpdmFibGU6IGluZGlyZWN0aW9uCitpbnB1dC55OjcuMTQtMjQ6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyOiBpbmRpcmVjdGlvbjogdW5kZXJpdmFibGUKIF1dKQogCiBBVF9DSEVDSyhbW3NlZCAtbiAnL15HcmFtbWFyL3E7L14kLyFwJyBpbnB1dC5vdXRwdXRdXSwgMCwKLVtbVXNlbGVzcyBub250ZXJtaW5hbHMKK1tbTm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hcgogICAgdW5kZXJpdmFibGUKICAgIGluZGlyZWN0aW9uCi1Vc2VsZXNzIHJ1bGVzCitSdWxlcyB1c2VsZXNzIGluIGdyYW1tYXIKICAgICAyIGV4cDogdW5kZXJpdmFibGUKICAgICAzIHVuZGVyaXZhYmxlOiBpbmRpcmVjdGlvbgogICAgIDQgaW5kaXJlY3Rpb246IHVuZGVyaXZhYmxlCkBAIC0zNDIsMTQgKzQyMywxMjQzIEBACiBBVF9TRVRVUChbRW1wdHkgTGFuZ3VhZ2VdKQogCiBBVF9EQVRBKFtbaW5wdXQueV1dLAotW1slb3V0cHV0PSJpbnB1dC5jIgorW1slb3V0cHV0ICJpbnB1dC5jIgogJSUKIGV4cDogZXhwOwogXV0pCiAKLUFUX0NIRUNLKFtbYmlzb24gaW5wdXQueV1dLCAxLCBbXSwKLVtbaW5wdXQueTogd2FybmluZzogMiB1c2VsZXNzIG5vbnRlcm1pbmFscyBhbmQgMiB1c2VsZXNzIHJ1bGVzCitBVF9CSVNPTl9DSEVDSyhbW2lucHV0LnldXSwgMSwgW10sCitbW2lucHV0Lnk6IHdhcm5pbmc6IDIgbm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hcgoraW5wdXQueTogd2FybmluZzogMiBydWxlcyB1c2VsZXNzIGluIGdyYW1tYXIKIGlucHV0Lnk6My4xLTM6IGZhdGFsIGVycm9yOiBzdGFydCBzeW1ib2wgZXhwIGRvZXMgbm90IGRlcml2ZSBhbnkgc2VudGVuY2UKIF1dKQogCiBBVF9DTEVBTlVQCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgJWRlZmluZSBsci50eXBlLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQVRfVEVTVF9MUl9UWVBFKERFU0NSSVBUSU9OLAorIyAgICAgICAgICAgICAgICAgREVDTFMsIEdSQU1NQVIsIElOUFVULAorIyAgICAgICAgICAgICAgICAgQklTT04tU1RERVJSLCBUQUJMRVMsCisjICAgICAgICAgICAgICAgICBbT1RIRVItQ0hFQ0tTXSwKKyMgICAgICAgICAgICAgICAgIFtQQVJTRVItRVhJVC1WQUxVRV0sCisjICAgICAgICAgICAgICAgICBbUEFSU0VSLVNURE9VVF0sIFtQQVJTRVItU1RERVJSXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtBVF9URVNUX0xSX1RZUEVdLAorWworQVRfVEVTVF9UQUJMRVNfQU5EX1BBUlNFKFtbbm8gJWRlZmluZSBsci50eXBlOiBdJDFdLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtbTEFMUl1dLCBbW11dLAorICAgICAgICAgICAgICAgICAgICAgICAgIFskMl0sIG00X3NoaWZ0bigyLCAkQCkpCitBVF9URVNUX1RBQkxFU19BTkRfUEFSU0UoW1slZGVmaW5lIGxyLnR5cGUgbGFscjogXSQxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbW0xBTFJdXSwgW1tdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbWyVkZWZpbmUgbHIudHlwZSBsYWxyCitdJDJdLAorICAgICAgICAgICAgICAgICAgICAgICAgIG00X3NoaWZ0bigyLCAkQCkpCitBVF9URVNUX1RBQkxFU19BTkRfUEFSU0UoW1slZGVmaW5lIGxyLnR5cGUgaWVscjogXSQxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbW0lFTFJdXSwgW1tdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbWyVkZWZpbmUgbHIudHlwZSBpZWxyCitdJDJdLAorICAgICAgICAgICAgICAgICAgICAgICAgIG00X3NoaWZ0bigyLCAkQCkpCitBVF9URVNUX1RBQkxFU19BTkRfUEFSU0UoW1slZGVmaW5lIGxyLnR5cGUgY2Fub25pY2FsLWxyOiBdJDFdLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtbY2Fub25pY2FsIExSXV0sIFtbXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgW1slZGVmaW5lIGxyLnR5cGUgY2Fub25pY2FsLWxyCitdJDJdLAorICAgICAgICAgICAgICAgICAgICAgICAgIG00X3NoaWZ0bigyLCAkQCkpCitdKQorCitBVF9URVNUX0xSX1RZUEUoW1tTaW5nbGUgU3RhdGUgU3BsaXRdXSwKK1tbJWxlZnQgJ2EnCisvLyBDb25mbGljdCByZXNvbHV0aW9uIHJlbmRlcnMgc3RhdGUgMTIgdW5yZWFjaGFibGUgZm9yIGNhbm9uaWNhbCBMUigxKS4gIFdlCisvLyBrZWVwIGl0IHNvIHRoYXQgdGhlIHBhc2VyIHRhYmxlIGRpZmYgaXMgZWFzaWVyIHRvIGNvZGUuCislZGVmaW5lIGxyLmtlZXAtdW5yZWFjaGFibGUtc3RhdGVzXV0sCitbWworUzogJ2EnIEEgJ2EnIC8qIHJ1bGUgMSAqLworIHwgJ2InIEEgJ2InIC8qIHJ1bGUgMiAqLworIHwgJ2MnIGMgICAgIC8qIHJ1bGUgMyAqLworIDsKKworLyogQSBjb25mbGljdCBzaG91bGQgYXBwZWFyIGFmdGVyIHRoZSBmaXJzdCAnYScgaW4gcnVsZXMgNCBhbmQgNSBidXQgb25seSBhZnRlcgorICAgaGF2aW5nIHNoaWZ0ZWQgdGhlIGZpcnN0ICdhJyBpbiBydWxlIDEuICBIb3dldmVyLCB3aGVuIExBTFIoMSkgbWVyZ2luZyBpcworICAgY2hvc2VuLCB0aGUgc3RhdGUgY29udGFpbmluZyB0aGF0IGNvbmZsaWN0IGlzIHJldXNlZCBhZnRlciBoYXZpbmcgc2VlbiB0aGUKKyAgIGZpcnN0ICdiJyBpbiBydWxlIDIgYW5kIHRoZW4gdGhlIGZpcnN0ICdhJyBpbiBydWxlcyA0IGFuZCA1LiAgSW4gYm90aCBjYXNlcywKKyAgIGJlY2F1c2Ugb2YgdGhlIG1lcmdlZCBzdGF0ZSwgaWYgdGhlIG5leHQgdG9rZW4gaXMgYW4gJ2EnLCB0aGUgJWxlZnQgZm9yY2VzIGEKKyAgIHJlZHVjdGlvbiBhY3Rpb24gd2l0aCBydWxlIDUuICBJbiB0aGUgbGF0dGVyIGNhc2UsIG9ubHkgYSBzaGlmdCBpcyBhY3R1YWxseQorICAgZ3JhbW1hdGljYWxseSBjb3JyZWN0LiAgVGh1cywgdGhlIHBhcnNlciB3b3VsZCByZXBvcnQgYSBzeW50YXggZXJyb3IgZm9yIHRoZQorICAgZ3JhbW1hdGljYWxseSBjb3JyZWN0IHNlbnRlbmNlICJiYWFiIiBiZWNhdXNlIGl0IHdvdWxkIGVuY291bnRlciBhIHN5bnRheAorICAgZXJyb3IgYWZ0ZXIgdGhhdCBpbmNvcnJlY3QgcmVkdWN0aW9uLgorCisgICBEZXNwaXRlIG5vdCBiZWluZyBMQUxSKDEpLCBNZW5oaXIgdmVyc2lvbiAyMDA3MDMyMiBzdWZmZXJzIGZyb20gdGhpcyBwcm9ibGVtCisgICBhcyB3ZWxsLiAgSXQgdXNlcyBEYXZpZCBQYWdlcidzIHdlYWsgY29tcGF0aWJpbGl0eSB0ZXN0IGZvciBtZXJnaW5nIHN0YXRlcy4KKyAgIEJpc29uIGFuZCBNZW5oaXIgYWNjZXB0IG5vbi1MUigxKSBncmFtbWFycyB3aXRoIGNvbmZsaWN0IHJlc29sdXRpb24uICBQYWdlcgorICAgZGVzaWduZWQgaGlzIGFsZ29yaXRobSBvbmx5IGZvciBMUigxKSBncmFtbWFycy4gICovCitBOiAnYScgJ2EnIC8qIHJ1bGUgNCAqLworIHwgJ2EnICAgICAvKiBydWxlIDUgKi8KKyA7CisKKy8qIFJ1bGUgMywgcnVsZSA2LCBhbmQgcnVsZSA3IGVuc3VyZSB0aGF0IEJpc29uIGRvZXMgbm90IHJlcG9ydCBydWxlIDQgYXMKKyAgIHVzZWxlc3MgYWZ0ZXIgY29uZmxpY3QgcmVzb2x1dGlvbi4gIFRoaXMgcHJvdmVzIHRoYXQsIGV2ZW4gdGhvdWdoIExBTFIoMSkKKyAgIGdlbmVyYXRlcyBpbmNvcnJlY3QgcGFyc2VyIHRhYmxlcyBzb21ldGltZXMsIEJpc29uIHdpbGwgbm90IG5lY2Vzc2FyaWx5CisgICBwcm9kdWNlIGFueSB3YXJuaW5nIHRvIGhlbHAgdGhlIHVzZXIgcmVhbGl6ZSBpdC4gICovCitjOiAnYScgJ2InIC8qIHJ1bGUgNiAqLworIHwgQSAgICAgICAvKiBydWxlIDcgKi8KKyA7CitdXSwKKworZG5sIElOUFVUCitbWydiJywgJ2EnLCAnYScsICdiJ11dLAorCitkbmwgQklTT04tU1RERVJSCitbXSwKKworZG5sIFRBQkxFUworW1tTdGF0ZSAwCisKKyAgICAwICRhY2NlcHQ6IC4gUyAkZW5kCisgICAgMSBTOiAuICdhJyBBICdhJworICAgIDIgIHwgLiAnYicgQSAnYicKKyAgICAzICB8IC4gJ2MnIGMKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxCisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIKKyAgICAnYycgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMworCisgICAgUyAgZ28gdG8gc3RhdGUgNAorCisKK1N0YXRlIDEKKworICAgIDEgUzogJ2EnIC4gQSAnYScKKyAgICA0IEE6IC4gJ2EnICdhJworICAgIDUgIHwgLiAnYScKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1CisKKyAgICBBICBnbyB0byBzdGF0ZSA2CisKKworU3RhdGUgMgorCisgICAgMiBTOiAnYicgLiBBICdiJworICAgIDQgQTogLiAnYScgJ2EnCisgICAgNSAgfCAuICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIF1BVF9DT05EX0NBU0UoW1tMQUxSXV0sIFtbNV1dLCBbWzE2XV0pWworCisgICAgQSAgZ28gdG8gc3RhdGUgNworCisKK1N0YXRlIDMKKworICAgIDMgUzogJ2MnIC4gYworICAgIDQgQTogLiAnYScgJ2EnCisgICAgNSAgfCAuICdhJworICAgIDYgYzogLiAnYScgJ2InCisgICAgNyAgfCAuIEEKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4CisKKyAgICBBICBnbyB0byBzdGF0ZSA5CisgICAgYyAgZ28gdG8gc3RhdGUgMTAKKworCitTdGF0ZSA0CisKKyAgICAwICRhY2NlcHQ6IFMgLiAkZW5kCisKKyAgICAkZW5kICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDExCisKKworU3RhdGUgNQorCisgICAgNCBBOiAnYScgLiAnYScKKyAgICA1ICB8ICdhJyAuICBdQVRfQ09ORF9DQVNFKFtbTEFMUl1dLCBbW1snYScsICdiJ11dXSwgW1tbJ2EnXV1dKVsKKworICAgIF1BVF9DT05EX0NBU0UoW1tjYW5vbmljYWwgTFJdXSwgW1snYSddXSwKKyAgICAgICAgICAgICAgICAgIFtbJGRlZmF1bHRdXSlbICByZWR1Y2UgdXNpbmcgcnVsZSA1IChBKQorCisgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlIDUgYW5kIHRva2VuICdhJyByZXNvbHZlZCBhcyByZWR1Y2UgKCVsZWZ0ICdhJykuCisKKworU3RhdGUgNgorCisgICAgMSBTOiAnYScgQSAuICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEzCisKKworU3RhdGUgNworCisgICAgMiBTOiAnYicgQSAuICdiJworCisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE0CisKKworU3RhdGUgOAorCisgICAgNCBBOiAnYScgLiAnYScKKyAgICA1ICB8ICdhJyAuICBbJGVuZF0KKyAgICA2IGM6ICdhJyAuICdiJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIF1BVF9DT05EX0NBU0UoW1tjYW5vbmljYWwgTFJdXSwgW1sxN11dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbMTJdXSlbCisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE1CisKKyAgICBdQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbJGVuZF1dLAorICAgICAgICAgICAgICAgICAgW1skZGVmYXVsdF1dKVsgIHJlZHVjZSB1c2luZyBydWxlIDUgKEEpCisKKworU3RhdGUgOQorCisgICAgNyBjOiBBIC5dQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbICBbJGVuZF1dXSlbCisKKyAgICBdQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbJGVuZF1dLAorICAgICAgICAgICAgICAgICAgW1skZGVmYXVsdF1dKVsgIHJlZHVjZSB1c2luZyBydWxlIDcgKGMpCisKKworU3RhdGUgMTAKKworICAgIDMgUzogJ2MnIGMgLl1BVF9DT05EX0NBU0UoW1tjYW5vbmljYWwgTFJdXSwgW1sgIFskZW5kXV1dKVsKKworICAgIF1BVF9DT05EX0NBU0UoW1tjYW5vbmljYWwgTFJdXSwgW1skZW5kXV0sCisgICAgICAgICAgICAgICAgICBbWyRkZWZhdWx0XV0pWyAgcmVkdWNlIHVzaW5nIHJ1bGUgMyAoUykKKworCitTdGF0ZSAxMQorCisgICAgMCAkYWNjZXB0OiBTICRlbmQgLgorCisgICAgJGRlZmF1bHQgIGFjY2VwdAorCisKK1N0YXRlIDEyCisKKyAgICA0IEE6ICdhJyAnYScgLl1BVF9DT05EX0NBU0UoW1tjYW5vbmljYWwgTFJdXSwgW1sgIFsnYSddXV0pWworCisgICAgXUFUX0NPTkRfQ0FTRShbW2Nhbm9uaWNhbCBMUl1dLCBbWydhJ11dLAorICAgICAgICAgICAgICAgICAgW1skZGVmYXVsdF1dKVsgIHJlZHVjZSB1c2luZyBydWxlIDQgKEEpCisKKworU3RhdGUgMTMKKworICAgIDEgUzogJ2EnIEEgJ2EnIC5dQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbICBbJGVuZF1dXSlbCisKKyAgICBdQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbJGVuZF1dLAorICAgICAgICAgICAgICAgICAgW1skZGVmYXVsdF1dKVsgIHJlZHVjZSB1c2luZyBydWxlIDEgKFMpCisKKworU3RhdGUgMTQKKworICAgIDIgUzogJ2InIEEgJ2InIC5dQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbICBbJGVuZF1dXSlbCisKKyAgICBdQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbJGVuZF1dLAorICAgICAgICAgICAgICAgICAgW1skZGVmYXVsdF1dKVsgIHJlZHVjZSB1c2luZyBydWxlIDIgKFMpCisKKworU3RhdGUgMTUKKworICAgIDYgYzogJ2EnICdiJyAuXUFUX0NPTkRfQ0FTRShbW2Nhbm9uaWNhbCBMUl1dLCBbWyAgWyRlbmRdXV0pWworCisgICAgXUFUX0NPTkRfQ0FTRShbW2Nhbm9uaWNhbCBMUl1dLCBbWyRlbmRdXSwKKyAgICAgICAgICAgICAgICAgIFtbJGRlZmF1bHRdXSlbICByZWR1Y2UgdXNpbmcgcnVsZSA2IChjKV1BVF9DT05EX0NBU0UoW1tMQUxSXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbXV0sIFtbCisKKworU3RhdGUgMTYKKworICAgIDQgQTogJ2EnIC4gJ2EnCisgICAgNSAgfCAnYScgLiAgWydiJ10KKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSBdQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbMThdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbWzEyXV0pWworCisgICAgXUFUX0NPTkRfQ0FTRShbW2Nhbm9uaWNhbCBMUl1dLCBbWydiJ11dLAorICAgICAgICAgICAgICAgICAgW1skZGVmYXVsdF1dKVsgIHJlZHVjZSB1c2luZyBydWxlIDUgKEEpXUFUX0NPTkRfQ0FTRShbW2Nhbm9uaWNhbCBMUl1dLCBbWworCisKK1N0YXRlIDE3CisKKyAgICA0IEE6ICdhJyAnYScgLiAgWyRlbmRdCisKKyAgICAkZW5kICByZWR1Y2UgdXNpbmcgcnVsZSA0IChBKQorCisKK1N0YXRlIDE4CisKKyAgICA0IEE6ICdhJyAnYScgLiAgWydiJ10KKworICAgICdiJyAgcmVkdWNlIHVzaW5nIHJ1bGUgNCAoQSldXSldKVsKK11dLAorCitkbmwgT1RIRVItQ0hFQ0tTCitbXSwKKworZG5sIFBBUlNFUi1FWElULVZBTFVFLCBQQVJTRVItU1RET1VULCBQQVJTRVItU1RERVJSCitbQVRfQ09ORF9DQVNFKFtbTEFMUl1dLCBbWzFdXSwgW1swXV0pXSwKK1tdLAorW0FUX0NPTkRfQ0FTRShbW0xBTFJdXSwKK1tbc3ludGF4IGVycm9yCitdXSldKQorCitBVF9URVNUX0xSX1RZUEUoW1tMYW5lIFNwbGl0XV0sCitbWyVsZWZ0ICdhJworLy8gQ29uZmxpY3QgcmVzb2x1dGlvbiByZW5kZXJzIHN0YXRlIDE2IHVucmVhY2hhYmxlIGZvciBjYW5vbmljYWwgTFIoMSkuICBXZQorLy8ga2VlcCBpdCBzbyB0aGF0IHRoZSBwYXNlciB0YWJsZSBkaWZmIGlzIGVhc2llciB0byBjb2RlLgorJWRlZmluZSBsci5rZWVwLXVucmVhY2hhYmxlLXN0YXRlc11dLAorW1sKKy8qIFNpbWlsYXIgdG8gdGhlIGxhc3QgdGVzdCBjYXNlIHNldCBidXQgdHdvIHN0YXRlcyBtdXN0IGJlIHNwbGl0LiAgKi8KK1M6ICdhJyBBICdhJyAvKiBydWxlIDEgKi8KKyB8ICdiJyBBICdiJyAvKiBydWxlIDIgKi8KKyB8ICdjJyBjICAgICAvKiBydWxlIDMgKi8KKyA7CisKK0E6ICdhJyAnYScgJ2EnIC8qIHJ1bGUgNCAqLworIHwgJ2EnICdhJyAgICAgLyogcnVsZSA1ICovCisgOworCitjOiAnYScgJ2EnICdiJyAvKiBydWxlIDYgKi8KKyB8IEEgICAgICAgICAgIC8qIHJ1bGUgNyAqLworIDsKK11dLAorCitkbmwgSU5QVVQKK1tbJ2InLCAnYScsICdhJywgJ2EnLCAnYiddXSwKKworZG5sIEJJU09OLVNUREVSUgorW10sCisKK2RubCBUQUJMRVMKK1tbU3RhdGUgMAorCisgICAgMCAkYWNjZXB0OiAuIFMgJGVuZAorICAgIDEgUzogLiAnYScgQSAnYScKKyAgICAyICB8IC4gJ2InIEEgJ2InCisgICAgMyAgfCAuICdjJyBjCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMQorICAgICdiJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyCisgICAgJ2MnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDMKKworICAgIFMgIGdvIHRvIHN0YXRlIDQKKworCitTdGF0ZSAxCisKKyAgICAxIFM6ICdhJyAuIEEgJ2EnCisgICAgNCBBOiAuICdhJyAnYScgJ2EnCisgICAgNSAgfCAuICdhJyAnYScKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1CisKKyAgICBBICBnbyB0byBzdGF0ZSA2CisKKworU3RhdGUgMgorCisgICAgMiBTOiAnYicgLiBBICdiJworICAgIDQgQTogLiAnYScgJ2EnICdhJworICAgIDUgIHwgLiAnYScgJ2EnCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgXUFUX0NPTkRfQ0FTRShbW0xBTFJdXSwgW1s1XV0sIFtbMThdXSlbCisKKyAgICBBICBnbyB0byBzdGF0ZSA3CisKKworU3RhdGUgMworCisgICAgMyBTOiAnYycgLiBjCisgICAgNCBBOiAuICdhJyAnYScgJ2EnCisgICAgNSAgfCAuICdhJyAnYScKKyAgICA2IGM6IC4gJ2EnICdhJyAnYicKKyAgICA3ICB8IC4gQQorCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDgKKworICAgIEEgIGdvIHRvIHN0YXRlIDkKKyAgICBjICBnbyB0byBzdGF0ZSAxMAorCisKK1N0YXRlIDQKKworICAgIDAgJGFjY2VwdDogUyAuICRlbmQKKworICAgICRlbmQgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTEKKworCitTdGF0ZSA1CisKKyAgICA0IEE6ICdhJyAuICdhJyAnYScKKyAgICA1ICB8ICdhJyAuICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEyCisKKworU3RhdGUgNgorCisgICAgMSBTOiAnYScgQSAuICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEzCisKKworU3RhdGUgNworCisgICAgMiBTOiAnYicgQSAuICdiJworCisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE0CisKKworU3RhdGUgOAorCisgICAgNCBBOiAnYScgLiAnYScgJ2EnCisgICAgNSAgfCAnYScgLiAnYScKKyAgICA2IGM6ICdhJyAuICdhJyAnYicKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxNQorCisKK1N0YXRlIDkKKworICAgIDcgYzogQSAuXUFUX0NPTkRfQ0FTRShbW2Nhbm9uaWNhbCBMUl1dLCBbWyAgWyRlbmRdXV0pWworCisgICAgXUFUX0NPTkRfQ0FTRShbW2Nhbm9uaWNhbCBMUl1dLCBbWyRlbmRdXSwKKyAgICAgICAgICAgICAgICAgIFtbJGRlZmF1bHRdXSlbICByZWR1Y2UgdXNpbmcgcnVsZSA3IChjKQorCisKK1N0YXRlIDEwCisKKyAgICAzIFM6ICdjJyBjIC5dQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbICBbJGVuZF1dXSlbCisKKyAgICBdQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbJGVuZF1dLAorICAgICAgICAgICAgICAgICAgW1skZGVmYXVsdF1dKVsgIHJlZHVjZSB1c2luZyBydWxlIDMgKFMpCisKKworU3RhdGUgMTEKKworICAgIDAgJGFjY2VwdDogUyAkZW5kIC4KKworICAgICRkZWZhdWx0ICBhY2NlcHQKKworCitTdGF0ZSAxMgorCisgICAgNCBBOiAnYScgJ2EnIC4gJ2EnCisgICAgNSAgfCAnYScgJ2EnIC4gIF1BVF9DT05EX0NBU0UoW1tMQUxSXV0sIFtbWydhJywgJ2InXV1dLCBbW1snYSddXV0pWworCisgICAgXUFUX0NPTkRfQ0FTRShbW2Nhbm9uaWNhbCBMUl1dLCBbWydhJ11dLAorICAgICAgICAgICAgICAgICAgW1skZGVmYXVsdF1dKVsgIHJlZHVjZSB1c2luZyBydWxlIDUgKEEpCisKKyAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgNSBhbmQgdG9rZW4gJ2EnIHJlc29sdmVkIGFzIHJlZHVjZSAoJWxlZnQgJ2EnKS4KKworCitTdGF0ZSAxMworCisgICAgMSBTOiAnYScgQSAnYScgLl1BVF9DT05EX0NBU0UoW1tjYW5vbmljYWwgTFJdXSwgW1sgIFskZW5kXV1dKVsKKworICAgIF1BVF9DT05EX0NBU0UoW1tjYW5vbmljYWwgTFJdXSwgW1skZW5kXV0sCisgICAgICAgICAgICAgICAgICBbWyRkZWZhdWx0XV0pWyAgcmVkdWNlIHVzaW5nIHJ1bGUgMSAoUykKKworCitTdGF0ZSAxNAorCisgICAgMiBTOiAnYicgQSAnYicgLl1BVF9DT05EX0NBU0UoW1tjYW5vbmljYWwgTFJdXSwgW1sgIFskZW5kXV1dKVsKKworICAgIF1BVF9DT05EX0NBU0UoW1tjYW5vbmljYWwgTFJdXSwgW1skZW5kXV0sCisgICAgICAgICAgICAgICAgICBbWyRkZWZhdWx0XV0pWyAgcmVkdWNlIHVzaW5nIHJ1bGUgMiAoUykKKworCitTdGF0ZSAxNQorCisgICAgNCBBOiAnYScgJ2EnIC4gJ2EnCisgICAgNSAgfCAnYScgJ2EnIC4gIFskZW5kXQorICAgIDYgYzogJ2EnICdhJyAuICdiJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIF1BVF9DT05EX0NBU0UoW1tjYW5vbmljYWwgTFJdXSwgW1sxOV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbMTZdXSlbCisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE3CisKKyAgICBdQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbJGVuZF1dLAorICAgICAgICAgICAgICAgICAgW1skZGVmYXVsdF1dKVsgIHJlZHVjZSB1c2luZyBydWxlIDUgKEEpCisKKworU3RhdGUgMTYKKworICAgIDQgQTogJ2EnICdhJyAnYScgLl1BVF9DT05EX0NBU0UoW1tjYW5vbmljYWwgTFJdXSwgW1sgIFsnYSddXV0pWworCisgICAgXUFUX0NPTkRfQ0FTRShbW2Nhbm9uaWNhbCBMUl1dLCBbWydhJ11dLAorICAgICAgICAgICAgICAgICAgW1skZGVmYXVsdF1dKVsgIHJlZHVjZSB1c2luZyBydWxlIDQgKEEpCisKKworU3RhdGUgMTcKKworICAgIDYgYzogJ2EnICdhJyAnYicgLl1BVF9DT05EX0NBU0UoW1tjYW5vbmljYWwgTFJdXSwgW1sgIFskZW5kXV1dKVsKKworICAgIF1BVF9DT05EX0NBU0UoW1tjYW5vbmljYWwgTFJdXSwgW1skZW5kXV0sCisgICAgICAgICAgICAgICAgICBbWyRkZWZhdWx0XV0pWyAgcmVkdWNlIHVzaW5nIHJ1bGUgNiAoYyldQVRfQ09ORF9DQVNFKFtbTEFMUl1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW11dLCBbWworCisKK1N0YXRlIDE4CisKKyAgICA0IEE6ICdhJyAuICdhJyAnYScKKyAgICA1ICB8ICdhJyAuICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIF1BVF9DT05EX0NBU0UoW1tjYW5vbmljYWwgTFJdXSwgW1syMF1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbMTldXSlbCisKKworU3RhdGUgMTldQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbCisKKyAgICA0IEE6ICdhJyAnYScgJ2EnIC5dQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbICBbJGVuZF1dXSlbCisKKyAgICBdQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbJGVuZF1dLAorICAgICAgICAgICAgICAgICAgW1skZGVmYXVsdF1dKVsgIHJlZHVjZSB1c2luZyBydWxlIDQgKEEpCisKKworU3RhdGUgMjBdXSlbCisKKyAgICA0IEE6ICdhJyAnYScgLiAnYScKKyAgICA1ICB8ICdhJyAnYScgLiAgWydiJ10KKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSBdQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbMjFdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbWzE2XV0pWworCisgICAgXUFUX0NPTkRfQ0FTRShbW2Nhbm9uaWNhbCBMUl1dLCBbWydiJ11dLAorICAgICAgICAgICAgICAgICAgW1skZGVmYXVsdF1dKVsgIHJlZHVjZSB1c2luZyBydWxlIDUgKEEpXUFUX0NPTkRfQ0FTRShbW2Nhbm9uaWNhbCBMUl1dLCBbWworCisKK1N0YXRlIDIxCisKKyAgICA0IEE6ICdhJyAnYScgJ2EnIC5dQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbICBbJ2InXV1dKVsKKworICAgIF1BVF9DT05EX0NBU0UoW1tjYW5vbmljYWwgTFJdXSwgW1snYiddXSwKKyAgICAgICAgICAgICAgICAgIFtbJGRlZmF1bHRdXSlbICByZWR1Y2UgdXNpbmcgcnVsZSA0IChBKV1dKV0pWworXV0sCisKK2RubCBPVEhFUi1DSEVDS1MKK1tdLAorCitkbmwgUEFSU0VSLUVYSVQtVkFMVUUsIFBBUlNFUi1TVERPVVQsIFBBUlNFUi1TVERFUlIKK1tBVF9DT05EX0NBU0UoW1tMQUxSXV0sIFtbMV1dLCBbWzBdXSldLAorW10sCitbQVRfQ09ORF9DQVNFKFtbTEFMUl1dLAorW1tzeW50YXggZXJyb3IKK11dKV0pCisKK0FUX1RFU1RfTFJfVFlQRShbW0NvbXBsZXggTGFuZSBTcGxpdF1dLAorW1slbGVmdCAnYScKKy8vIENvbmZsaWN0IHJlc29sdXRpb24gcmVuZGVycyBzdGF0ZSAxNiB1bnJlYWNoYWJsZSBmb3IgY2Fub25pY2FsIExSKDEpLiAgV2UKKy8vIGtlZXAgaXQgc28gdGhhdCB0aGUgcGFzZXIgdGFibGUgZGlmZiBpcyBlYXNpZXIgdG8gY29kZS4KKyVkZWZpbmUgbHIua2VlcC11bnJlYWNoYWJsZS1zdGF0ZXNdXSwKK1tbCisvKiBTaW1pbGFyIHRvIHRoZSBsYXN0IHRlc3QgY2FzZSBzZXQgYnV0IGZvcnNlZWluZyB0aGUgUy9SIGNvbmZsaWN0IGZyb20gdGhlCisgICBmaXJzdCBzdGF0ZSB0aGF0IG11c3QgYmUgc3BsaXQgaXMgYmVjb21pbmcgZGlmZmljdWx0LiAgSW1hZ2luZSBpZiBCIHdlcmUKKyAgIGV2ZW4gbW9yZSBjb21wbGV4LiAgSW1hZ2luZSBpZiBBIGhhZCBvdGhlciBSSFMncyBlbmRpbmcgaW4gb3RoZXIKKyAgIG5vbnRlcm1pbmFscy4gICovCitTOiAnYScgQSAnYScKKyB8ICdiJyBBICdiJworIHwgJ2MnIGMKKyA7CitBOiAnYScgJ2EnIEIKKyA7CitCOiAnYScKKyB8ICVwcmVjICdhJworIDsKK2M6ICdhJyAnYScgJ2InCisgfCBBCisgOworXV0sCisKK2RubCBJTlBVVAorW1snYicsICdhJywgJ2EnLCAnYScsICdiJ11dLAorCitkbmwgQklTT04tU1RERVJSCitbXSwKKworZG5sIFRBQkxFUworW1tTdGF0ZSAwCisKKyAgICAwICRhY2NlcHQ6IC4gUyAkZW5kCisgICAgMSBTOiAuICdhJyBBICdhJworICAgIDIgIHwgLiAnYicgQSAnYicKKyAgICAzICB8IC4gJ2MnIGMKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxCisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIKKyAgICAnYycgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMworCisgICAgUyAgZ28gdG8gc3RhdGUgNAorCisKK1N0YXRlIDEKKworICAgIDEgUzogJ2EnIC4gQSAnYScKKyAgICA0IEE6IC4gJ2EnICdhJyBCCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNQorCisgICAgQSAgZ28gdG8gc3RhdGUgNgorCisKK1N0YXRlIDIKKworICAgIDIgUzogJ2InIC4gQSAnYicKKyAgICA0IEE6IC4gJ2EnICdhJyBCCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgXUFUX0NPTkRfQ0FTRShbW0xBTFJdXSwgW1s1XV0sIFtbMTldXSlbCisKKyAgICBBICBnbyB0byBzdGF0ZSA3CisKKworU3RhdGUgMworCisgICAgMyBTOiAnYycgLiBjCisgICAgNCBBOiAuICdhJyAnYScgQgorICAgIDcgYzogLiAnYScgJ2EnICdiJworICAgIDggIHwgLiBBCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOAorCisgICAgQSAgZ28gdG8gc3RhdGUgOQorICAgIGMgIGdvIHRvIHN0YXRlIDEwCisKKworU3RhdGUgNAorCisgICAgMCAkYWNjZXB0OiBTIC4gJGVuZAorCisgICAgJGVuZCAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxMQorCisKK1N0YXRlIDUKKworICAgIDQgQTogJ2EnIC4gJ2EnIEIKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxMgorCisKK1N0YXRlIDYKKworICAgIDEgUzogJ2EnIEEgLiAnYScKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxMworCisKK1N0YXRlIDcKKworICAgIDIgUzogJ2InIEEgLiAnYicKKworICAgICdiJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxNAorCisKK1N0YXRlIDgKKworICAgIDQgQTogJ2EnIC4gJ2EnIEIKKyAgICA3IGM6ICdhJyAuICdhJyAnYicKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxNQorCisKK1N0YXRlIDkKKworICAgIDggYzogQSAuXUFUX0NPTkRfQ0FTRShbW2Nhbm9uaWNhbCBMUl1dLCBbWyAgWyRlbmRdXV0pWworCisgICAgXUFUX0NPTkRfQ0FTRShbW2Nhbm9uaWNhbCBMUl1dLCBbWyRlbmRdXSwKKyAgICAgICAgICAgICAgICAgIFtbJGRlZmF1bHRdXSlbICByZWR1Y2UgdXNpbmcgcnVsZSA4IChjKQorCisKK1N0YXRlIDEwCisKKyAgICAzIFM6ICdjJyBjIC5dQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbICBbJGVuZF1dXSlbCisKKyAgICBdQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbJGVuZF1dLAorICAgICAgICAgICAgICAgICAgW1skZGVmYXVsdF1dKVsgIHJlZHVjZSB1c2luZyBydWxlIDMgKFMpCisKKworU3RhdGUgMTEKKworICAgIDAgJGFjY2VwdDogUyAkZW5kIC4KKworICAgICRkZWZhdWx0ICBhY2NlcHQKKworCitTdGF0ZSAxMgorCisgICAgNCBBOiAnYScgJ2EnIC4gQgorICAgIDUgQjogLiAnYScKKyAgICA2ICB8IC4gIF1BVF9DT05EX0NBU0UoW1tMQUxSXV0sIFtbWydhJywgJ2InXV1dLCBbW1snYSddXV0pWworCisgICAgXUFUX0NPTkRfQ0FTRShbW2Nhbm9uaWNhbCBMUl1dLCBbWydhJ11dLAorICAgICAgICAgICAgICAgICAgW1skZGVmYXVsdF1dKVsgIHJlZHVjZSB1c2luZyBydWxlIDYgKEIpCisKKyAgICBCICBnbyB0byBzdGF0ZSAxNworCisgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlIDYgYW5kIHRva2VuICdhJyByZXNvbHZlZCBhcyByZWR1Y2UgKCVsZWZ0ICdhJykuCisKKworU3RhdGUgMTMKKworICAgIDEgUzogJ2EnIEEgJ2EnIC5dQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbICBbJGVuZF1dXSlbCisKKyAgICBdQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbJGVuZF1dLAorICAgICAgICAgICAgICAgICAgW1skZGVmYXVsdF1dKVsgIHJlZHVjZSB1c2luZyBydWxlIDEgKFMpCisKKworU3RhdGUgMTQKKworICAgIDIgUzogJ2InIEEgJ2InIC5dQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbICBbJGVuZF1dXSlbCisKKyAgICBdQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbJGVuZF1dLAorICAgICAgICAgICAgICAgICAgW1skZGVmYXVsdF1dKVsgIHJlZHVjZSB1c2luZyBydWxlIDIgKFMpCisKKworU3RhdGUgMTUKKworICAgIDQgQTogJ2EnICdhJyAuIEIKKyAgICA1IEI6IC4gJ2EnCisgICAgNiAgfCAuICBbJGVuZF0KKyAgICA3IGM6ICdhJyAnYScgLiAnYicKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSBdQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbMjBdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbWzE2XV0pWworICAgICdiJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxOAorCisgICAgXUFUX0NPTkRfQ0FTRShbW2Nhbm9uaWNhbCBMUl1dLCBbWyRlbmRdXSwKKyAgICAgICAgICAgICAgICAgIFtbJGRlZmF1bHRdXSlbICByZWR1Y2UgdXNpbmcgcnVsZSA2IChCKQorCisgICAgQiAgZ28gdG8gc3RhdGUgXUFUX0NPTkRfQ0FTRShbW2Nhbm9uaWNhbCBMUl1dLCBbWzIxXV0sIFtbMTddXSlbCisKKworU3RhdGUgMTYKKworICAgIDUgQjogJ2EnIC5dQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbICBbJ2EnXV1dKVsKKworICAgIF1BVF9DT05EX0NBU0UoW1tjYW5vbmljYWwgTFJdXSwgW1snYSddXSwKKyAgICAgICAgICAgICAgICAgIFtbJGRlZmF1bHRdXSlbICByZWR1Y2UgdXNpbmcgcnVsZSA1IChCKQorCisKK1N0YXRlIDE3CisKKyAgICA0IEE6ICdhJyAnYScgQiAuXUFUX0NPTkRfQ0FTRShbW2Nhbm9uaWNhbCBMUl1dLCBbWyAgWydhJ11dXSlbCisKKyAgICBdQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbJ2EnXV0sCisgICAgICAgICAgICAgICAgICBbWyRkZWZhdWx0XV0pWyAgcmVkdWNlIHVzaW5nIHJ1bGUgNCAoQSkKKworCitTdGF0ZSAxOAorCisgICAgNyBjOiAnYScgJ2EnICdiJyAuXUFUX0NPTkRfQ0FTRShbW2Nhbm9uaWNhbCBMUl1dLCBbWyAgWyRlbmRdXV0pWworCisgICAgXUFUX0NPTkRfQ0FTRShbW2Nhbm9uaWNhbCBMUl1dLCBbWyRlbmRdXSwKKyAgICAgICAgICAgICAgICAgIFtbJGRlZmF1bHRdXSlbICByZWR1Y2UgdXNpbmcgcnVsZSA3IChjKV1BVF9DT05EX0NBU0UoW1tMQUxSXV0sIFtdLCBbWworCisKK1N0YXRlIDE5CisKKyAgICA0IEE6ICdhJyAuICdhJyBCCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgXUFUX0NPTkRfQ0FTRShbW2Nhbm9uaWNhbCBMUl1dLCBbWzIyXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1syMF1dKVsKKworCitTdGF0ZSAyMF1BVF9DT05EX0NBU0UoW1tjYW5vbmljYWwgTFJdXSwgW1sKKworICAgIDUgQjogJ2EnIC4gIFskZW5kXQorCisgICAgJGVuZCAgcmVkdWNlIHVzaW5nIHJ1bGUgNSAoQikKKworCitTdGF0ZSAyMQorCisgICAgNCBBOiAnYScgJ2EnIEIgLiAgWyRlbmRdCisKKyAgICAkZW5kICByZWR1Y2UgdXNpbmcgcnVsZSA0IChBKQorCisKK1N0YXRlIDIyXV0pWworCisgICAgNCBBOiAnYScgJ2EnIC4gQgorICAgIDUgQjogLiAnYScKKyAgICA2ICB8IC4gIFsnYiddCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgXUFUX0NPTkRfQ0FTRShbW2Nhbm9uaWNhbCBMUl1dLCBbWzIzXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1sxNl1dKVsKKworICAgIF1BVF9DT05EX0NBU0UoW1tjYW5vbmljYWwgTFJdXSwgW1snYiddXSwKKyAgICAgICAgICAgICAgICAgIFtbJGRlZmF1bHRdXSlbICByZWR1Y2UgdXNpbmcgcnVsZSA2IChCKQorCisgICAgQiAgZ28gdG8gc3RhdGUgXUFUX0NPTkRfQ0FTRShbW2Nhbm9uaWNhbCBMUl1dLCBbWzI0CisKKworU3RhdGUgMjMKKworICAgIDUgQjogJ2EnIC4gIFsnYiddCisKKyAgICAnYicgIHJlZHVjZSB1c2luZyBydWxlIDUgKEIpCisKKworU3RhdGUgMjQKKworICAgIDQgQTogJ2EnICdhJyBCIC4gIFsnYiddCisKKyAgICAnYicgIHJlZHVjZSB1c2luZyBydWxlIDQgKEEpXV0sIFtbMTddXSldKVsKK11dLAorCitkbmwgT1RIRVItQ0hFQ0tTCitbXSwKKworZG5sIFBBUlNFUi1FWElULVZBTFVFLCBQQVJTRVItU1RET1VULCBQQVJTRVItU1RERVJSCitbQVRfQ09ORF9DQVNFKFtbTEFMUl1dLCBbWzFdXSwgW1swXV0pXSwKK1tdLAorW0FUX0NPTkRfQ0FTRShbW0xBTFJdXSwKK1tbc3ludGF4IGVycm9yCitdXSldKQorCitBVF9URVNUX0xSX1RZUEUoW1tTcGxpdCBEdXJpbmcgQWRkZWQgTG9va2FoZWFkIFByb3BhZ2F0aW9uXV0sCitbWyVkZWZpbmUgbHIua2VlcC11bnJlYWNoYWJsZS1zdGF0ZXNdXSwKK1tbCisvKiBUaGUgcGFydGlhbCBzdGF0ZSBjaGFydCBkaWFncmFtIGJlbG93IGlzIGZvciBMQUxSKDEpLiAgU3RhdGUgMCBpcyB0aGUgc3RhcnQKKyAgIHN0YXRlLiAgU3RhdGVzIGFyZSBpdGVyYXRlZCBmb3Igc3VjY2Vzc29yIGNvbnN0cnVjdGlvbiBpbiBudW1lcmljYWwgb3JkZXIuCisgICBUcmFuc2l0aW9ucyBhcmUgZG93bndhcmRzLgorCisgICBTdGF0ZSAxMyBoYXMgYSBSL1IgY29uZmxpY3QgdGhhdCBjYW5ub3QgYmUgcHJlZGljdGVkIGJ5IEJpc29uJ3MgTFIoMSkKKyAgIGFsZ29yaXRobSB1c2luZyBhbm5vdGF0aW9ucyBhbG9uZS4gIFRoYXQgaXMsIHdoZW4gc3RhdGUgMTEncyBzdWNjZXNzb3Igb24KKyAgICdkJyBpcyBtZXJnZWQgd2l0aCBzdGF0ZSA1ICh3aGljaCBpcyBvcmlnaW5hbGx5IGp1c3Qgc3RhdGUgMSdzIHN1Y2Nlc3NvciBvbgorICAgJ2QnKSwgc3RhdGUgNSdzIHN1Y2Nlc3NvciBvbiAnZScgbXVzdCB0aGVuIGJlIGNoYW5nZWQgYmVjYXVzZSB0aGUgcmVzdWx0aW5nCisgICBsb29rYWhlYWRzIHRoYXQgcHJvcGFnYXRlIHRvIGl0IG5vdyBtYWtlIGl0IGluY29tcGF0aWJsZSB3aXRoIHN0YXRlIDgncworICAgc3VjY2Vzc29yIG9uICdlJy4gIEluIG90aGVyIHdvcmRzLCBzdGF0ZSAxMyBtdXN0IGJlIHNwbGl0IHRvIGF2b2lkIHRoZQorICAgY29uZmxpY3QuCisKKyAgICAgICAgICAwCisgICAgICAgIC8gfCBcCisgICAgIGEgLyBjfCAgXCBiCisgICAgICAxICAgMyAgIDIKKyAgICAgIHwgICB8ICAgfAorICAgICBkfCAgIHxjICB8IGQKKyAgICAgIHwgIDExICAgfAorICAgICAgfCAgIHwgICB8CisgICAgICAgXCAvZCAgIHwKKyAgICAgICAgNSAgICAgOAorICAgICAgICAgXCAgICB8CisgICAgICAgIGUgXCAgLyBlCisgICAgICAgICAgIDEzCisgICAgICAgICAgIFIvUgorCisgICBUaGlzIGdyYW1tYXIgaXMgZGVzaWduZWQgY2FyZWZ1bGx5IHRvIG1ha2Ugc3VyZSB0aGF0LCBkZXNwaXRlIEJpc29uJ3MgTFIoMSkKKyAgIGFsZ29yaXRobSdzIGJyZWFkLWZpcnN0IGl0ZXJhdGlvbiBvZiB0cmFuc2l0aW9ucyB0byByZWNvbnN0cnVjdCBzdGF0ZXMsCisgICBzdGF0ZSAxMSdzIHN1Y2Nlc3NvcnMgYXJlIGNvbnN0cnVjdGVkIGFmdGVyIHN0YXRlIDUncyBhbmQgc3RhdGUgOCdzLgorICAgT3RoZXJ3aXNlIChmb3IgZXhhbXBsZSwgaWYgeW91IHJlbW92ZSB0aGUgZmlyc3QgJ2MnIGluIGVhY2ggb2YgcnVsZXMgNiBhbmQKKyAgIDcpLCBzdGF0ZSA1J3Mgc3VjY2Vzc29yIG9uICdlJyB3b3VsZCBuZXZlciBiZSBtZXJnZWQgd2l0aCBzdGF0ZSA4J3MsIHNvIHRoZQorICAgc3BsaXQgb2YgdGhlIHJlc3VsdGluZyBzdGF0ZSAxMyB3b3VsZCBuZXZlciBuZWVkIHRvIGJlIHBlcmZvcm1lZC4gICovCitTOiAnYScgQSAnZicKKyB8ICdhJyBCCisgfCAnYicgQSAnZicKKyB8ICdiJyBCICdnJworIHwgJ2InICdkJworIHwgJ2MnICdjJyBBICdnJworIHwgJ2MnICdjJyBCCisgOworQTogJ2QnICdlJyA7CitCOiAnZCcgJ2UnIDsKK11dLAorCitkbmwgSU5QVVQKK1tbJ2InLCAnZCcsICdlJywgJ2cnXV0sCisKK2RubCBCSVNPTi1TVERFUlIKK1tBVF9DT05EX0NBU0UoW1tMQUxSXV0sCitbW2lucHV0Lnk6IGNvbmZsaWN0czogMSByZWR1Y2UvcmVkdWNlCitdXSwgW10pXSwKKworZG5sIFRBQkxFUworW1tTdGF0ZSAwCisKKyAgICAwICRhY2NlcHQ6IC4gUyAkZW5kCisgICAgMSBTOiAuICdhJyBBICdmJworICAgIDIgIHwgLiAnYScgQgorICAgIDMgIHwgLiAnYicgQSAnZicKKyAgICA0ICB8IC4gJ2InIEIgJ2cnCisgICAgNSAgfCAuICdiJyAnZCcKKyAgICA2ICB8IC4gJ2MnICdjJyBBICdnJworICAgIDcgIHwgLiAnYycgJ2MnIEIKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxCisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIKKyAgICAnYycgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMworCisgICAgUyAgZ28gdG8gc3RhdGUgNAorCisKK1N0YXRlIDEKKworICAgIDEgUzogJ2EnIC4gQSAnZicKKyAgICAyICB8ICdhJyAuIEIKKyAgICA4IEE6IC4gJ2QnICdlJworICAgIDkgQjogLiAnZCcgJ2UnCisKKyAgICAnZCcgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNQorCisgICAgQSAgZ28gdG8gc3RhdGUgNgorICAgIEIgIGdvIHRvIHN0YXRlIDcKKworCitTdGF0ZSAyCisKKyAgICAzIFM6ICdiJyAuIEEgJ2YnCisgICAgNCAgfCAnYicgLiBCICdnJworICAgIDUgIHwgJ2InIC4gJ2QnCisgICAgOCBBOiAuICdkJyAnZScKKyAgICA5IEI6IC4gJ2QnICdlJworCisgICAgJ2QnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDgKKworICAgIEEgIGdvIHRvIHN0YXRlIDkKKyAgICBCICBnbyB0byBzdGF0ZSAxMAorCisKK1N0YXRlIDMKKworICAgIDYgUzogJ2MnIC4gJ2MnIEEgJ2cnCisgICAgNyAgfCAnYycgLiAnYycgQgorCisgICAgJ2MnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDExCisKKworU3RhdGUgNAorCisgICAgMCAkYWNjZXB0OiBTIC4gJGVuZAorCisgICAgJGVuZCAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxMgorCisKK1N0YXRlIDUKKworICAgIDggQTogJ2QnIC4gJ2UnCisgICAgOSBCOiAnZCcgLiAnZScKKworICAgICdlJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSBdQVRfQ09ORF9DQVNFKFtbTEFMUl1dLCBbWzEzXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbY2Fub25pY2FsIExSXV0sIFtbMTNdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1syMF1dKVsKKworCitTdGF0ZSA2CisKKyAgICAxIFM6ICdhJyBBIC4gJ2YnCisKKyAgICAnZicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTQKKworCitTdGF0ZSA3CisKKyAgICAyIFM6ICdhJyBCIC5dQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbICBbJGVuZF1dXSlbCisKKyAgICBdQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbJGVuZF1dLAorICAgICAgICAgICAgICAgICAgW1skZGVmYXVsdF1dKVsgIHJlZHVjZSB1c2luZyBydWxlIDIgKFMpCisKKworU3RhdGUgOAorCisgICAgNSBTOiAnYicgJ2QnIC4gIFskZW5kXQorICAgIDggQTogJ2QnIC4gJ2UnCisgICAgOSBCOiAnZCcgLiAnZScKKworICAgICdlJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSBdQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbMjBdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbWzEzXV0pWworCisgICAgXUFUX0NPTkRfQ0FTRShbW2Nhbm9uaWNhbCBMUl1dLCBbWyRlbmRdXSwKKyAgICAgICAgICAgICAgICAgIFtbJGRlZmF1bHRdXSlbICByZWR1Y2UgdXNpbmcgcnVsZSA1IChTKQorCisKK1N0YXRlIDkKKworICAgIDMgUzogJ2InIEEgLiAnZicKKworICAgICdmJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxNQorCisKK1N0YXRlIDEwCisKKyAgICA0IFM6ICdiJyBCIC4gJ2cnCisKKyAgICAnZycgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTYKKworCitTdGF0ZSAxMQorCisgICAgNiBTOiAnYycgJ2MnIC4gQSAnZycKKyAgICA3ICB8ICdjJyAnYycgLiBCCisgICAgOCBBOiAuICdkJyAnZScKKyAgICA5IEI6IC4gJ2QnICdlJworCisgICAgJ2QnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIF1BVF9DT05EX0NBU0UoW1tjYW5vbmljYWwgTFJdXSwgW1syMV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbNV1dKVsKKworICAgIEEgIGdvIHRvIHN0YXRlIDE3CisgICAgQiAgZ28gdG8gc3RhdGUgMTgKKworCitTdGF0ZSAxMgorCisgICAgMCAkYWNjZXB0OiBTICRlbmQgLgorCisgICAgJGRlZmF1bHQgIGFjY2VwdF1BVF9DT05EX0NBU0UoW1tMQUxSXV0sIFtbCisKKworU3RhdGUgMTMKKworICAgIDggQTogJ2QnICdlJyAuICBbJ2YnLCAnZyddCisgICAgOSBCOiAnZCcgJ2UnIC4gIFskZW5kLCAnZyddCisKKyAgICAkZW5kICAgICAgcmVkdWNlIHVzaW5nIHJ1bGUgOSAoQikKKyAgICAnZycgICAgICAgcmVkdWNlIHVzaW5nIHJ1bGUgOCAoQSkKKyAgICAnZycgICAgICAgW3JlZHVjZSB1c2luZyBydWxlIDkgKEIpXQorICAgICRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA4IChBKV1dLCBbWworCisKK1N0YXRlIDEzCisKKyAgICA4IEE6ICdkJyAnZScgLiAgWydmJ10KKyAgICA5IEI6ICdkJyAnZScgLiAgXUFUX0NPTkRfQ0FTRShbW2Nhbm9uaWNhbCBMUl1dLCBbW1skZW5kXV1dLCBbW1snZyddXV0pWworCisgICAgXUFUX0NPTkRfQ0FTRShbW2Nhbm9uaWNhbCBMUl1dLCBbWyRlbmRdXSwKKyAgICAgICAgICAgICAgICAgIFtbJ2cnICAgICBdXSlbICByZWR1Y2UgdXNpbmcgcnVsZSA5IChCKQorICAgIF1BVF9DT05EX0NBU0UoW1tjYW5vbmljYWwgTFJdXSwgW1snZicgXV0sCisgICAgICAgICAgICAgICAgICBbWyRkZWZhdWx0XV0pWyAgcmVkdWNlIHVzaW5nIHJ1bGUgOCAoQSldXSlbCisKKworU3RhdGUgMTQKKworICAgIDEgUzogJ2EnIEEgJ2YnIC5dQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbICBbJGVuZF1dXSlbCisKKyAgICBdQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbJGVuZF1dLAorICAgICAgICAgICAgICAgICAgW1skZGVmYXVsdF1dKVsgIHJlZHVjZSB1c2luZyBydWxlIDEgKFMpCisKKworU3RhdGUgMTUKKworICAgIDMgUzogJ2InIEEgJ2YnIC5dQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbICBbJGVuZF1dXSlbCisKKyAgICBdQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbJGVuZF1dLAorICAgICAgICAgICAgICAgICAgW1skZGVmYXVsdF1dKVsgIHJlZHVjZSB1c2luZyBydWxlIDMgKFMpCisKKworU3RhdGUgMTYKKworICAgIDQgUzogJ2InIEIgJ2cnIC5dQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbICBbJGVuZF1dXSlbCisKKyAgICBdQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbJGVuZF1dLAorICAgICAgICAgICAgICAgICAgW1skZGVmYXVsdF1dKVsgIHJlZHVjZSB1c2luZyBydWxlIDQgKFMpCisKKworU3RhdGUgMTcKKworICAgIDYgUzogJ2MnICdjJyBBIC4gJ2cnCisKKyAgICAnZycgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTkKKworCitTdGF0ZSAxOAorCisgICAgNyBTOiAnYycgJ2MnIEIgLl1BVF9DT05EX0NBU0UoW1tjYW5vbmljYWwgTFJdXSwgW1sgIFskZW5kXV1dKVsKKworICAgIF1BVF9DT05EX0NBU0UoW1tjYW5vbmljYWwgTFJdXSwgW1skZW5kXV0sCisgICAgICAgICAgICAgICAgICBbWyRkZWZhdWx0XV0pWyAgcmVkdWNlIHVzaW5nIHJ1bGUgNyAoUykKKworCitTdGF0ZSAxOQorCisgICAgNiBTOiAnYycgJ2MnIEEgJ2cnIC5dQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbICBbJGVuZF1dXSlbCisKKyAgICBdQVRfQ09ORF9DQVNFKFtbY2Fub25pY2FsIExSXV0sIFtbJGVuZF1dLAorICAgICAgICAgICAgICAgICAgW1skZGVmYXVsdF1dKVsgIHJlZHVjZSB1c2luZyBydWxlIDYgKFMpXUFUX0NPTkRfQ0FTRShbW0xBTFJdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tdXSwgW1sKKworCitTdGF0ZSAyMF1BVF9DT05EX0NBU0UoW1tjYW5vbmljYWwgTFJdXSwgW1sKKworICAgIDggQTogJ2QnICdlJyAuICBbJ2YnXQorICAgIDkgQjogJ2QnICdlJyAuICBbJ2cnXQorCisgICAgJ2YnICByZWR1Y2UgdXNpbmcgcnVsZSA4IChBKQorICAgICdnJyAgcmVkdWNlIHVzaW5nIHJ1bGUgOSAoQikKKworCitTdGF0ZSAyMQorCisgICAgOCBBOiAnZCcgLiAnZScKKyAgICA5IEI6ICdkJyAuICdlJworCisgICAgJ2UnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIyCisKKworU3RhdGUgMjIKKworICAgIDggQTogJ2QnICdlJyAuICBbJ2cnXQorICAgIDkgQjogJ2QnICdlJyAuICBbJGVuZF0KKworICAgICRlbmQgIHJlZHVjZSB1c2luZyBydWxlIDkgKEIpCisgICAgJ2cnICAgcmVkdWNlIHVzaW5nIHJ1bGUgOCAoQSldXSwgW1sKKworICAgIDggQTogJ2QnICdlJyAuICBbJ2YnLCAnZyddCisgICAgOSBCOiAnZCcgJ2UnIC4gIFskZW5kXQorCisgICAgJGVuZCAgICAgIHJlZHVjZSB1c2luZyBydWxlIDkgKEIpCisgICAgJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDggKEEpXV0pXSlbCitdXSwKKworZG5sIE9USEVSLUNIRUNLUworW10sCisKK2RubCBQQVJTRVItRVhJVC1WQUxVRSwgUEFSU0VSLVNURE9VVCwgUEFSU0VSLVNUREVSUgorW0FUX0NPTkRfQ0FTRShbW0xBTFJdXSwgW1sxXV0sIFtbMF1dKV0sCitbXSwKK1tBVF9DT05EX0NBU0UoW1tMQUxSXV0sCitbW3N5bnRheCBlcnJvcgorXV0pXSkKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjICVkZWZpbmUgbHIuZGVmYXVsdC1yZWR1Y3Rpb25zLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBBVF9URVNUX0xSX0RFRkFVTFRfUkVEVUNUSU9OUyhHUkFNTUFSLCBJTlBVVCwgVEFCTEVTKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtBVF9URVNUX0xSX0RFRkFVTFRfUkVEVUNUSU9OU10sCitbCitBVF9URVNUX1RBQkxFU19BTkRfUEFSU0UoW1tubyAlZGVmaW5lIGxyLmRlZmF1bHQtcmVkdWN0aW9uc11dLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtbbW9zdF1dLCBbW11dLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtbXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgWyQxXSwgWyQyXSwgW1tdXSwgWyQzXSkKK0FUX1RFU1RfVEFCTEVTX0FORF9QQVJTRShbWyVkZWZpbmUgbHIuZGVmYXVsdC1yZWR1Y3Rpb25zIG1vc3RdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbW21vc3RdXSwgW1tdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbWyVkZWZpbmUgbHIuZGVmYXVsdC1yZWR1Y3Rpb25zIG1vc3RdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJDFdLCBbJDJdLCBbW11dLCBbJDNdKQorQVRfVEVTVF9UQUJMRVNfQU5EX1BBUlNFKFtbJWRlZmluZSBsci5kZWZhdWx0LXJlZHVjdGlvbnMgY29uc2lzdGVudF1dLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtbY29uc2lzdGVudF1dLCBbW11dLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtbJWRlZmluZSBsci5kZWZhdWx0LXJlZHVjdGlvbnMgY29uc2lzdGVudF1dLAorICAgICAgICAgICAgICAgICAgICAgICAgIFskMV0sIFskMl0sIFtbXV0sIFskM10pCitBVF9URVNUX1RBQkxFU19BTkRfUEFSU0UoW1slZGVmaW5lIGxyLmRlZmF1bHQtcmVkdWN0aW9ucyBhY2NlcHRpbmddXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbW2FjY2VwdGluZ11dLCBbW11dLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtbJWRlZmluZSBsci5kZWZhdWx0LXJlZHVjdGlvbnMgYWNjZXB0aW5nXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgWyQxXSwgWyQyXSwgW1tdXSwgWyQzXSkKK10pCisKK0FUX1RFU1RfTFJfREVGQVVMVF9SRURVQ1RJT05TKFtbCisvKiBUaGUgc3RhcnQgc3RhdGUgaXMgY29uc2lzdGVudCBhbmQgaGFzIGEgc2hpZnQgb24gJ2EnIGFuZCBubyByZWR1Y3Rpb25zLgorICAgQWZ0ZXIgcHVzaGluZyB0aGUgYiBiZWxvdywgZW50ZXIgYW4gaW5jb25zaXN0ZW50IHN0YXRlIHRoYXQgaGFzIGEgc2hpZnQgYW5kCisgICBvbmUgcmVkdWN0aW9uIHdpdGggb25lIGxvb2thaGVhZC4gICovCitzdGFydDoKKyAgICBhIGIKKyAgfCBhIGIgJ2EnCisgIHwgYSBjICdiJworICA7CisKKy8qIEFmdGVyIHNoaWZ0aW5nIHRoaXMgJ2EnLCBlbnRlciBhIGNvbnNpc3RlbnQgc3RhdGUgdGhhdCBoYXMgbm8gc2hpZnQgYW5kIDEKKyAgIHJlZHVjdGlvbiB3aXRoIG11bHRpcGxlIGxvb2thaGVhZHMuICAqLworYTogJ2EnIDsKKworLyogQWZ0ZXIgdGhlIHByZXZpb3VzIHJlZHVjdGlvbiwgZW50ZXIgYW4gaW5jb25zaXN0ZW50IHN0YXRlIHRoYXQgaGFzIG5vIHNoaWZ0CisgICBhbmQgbXVsdGlwbGUgcmVkdWN0aW9ucy4gIFRoZSBmaXJzdCByZWR1Y3Rpb24gaGFzIG1vcmUgbG9va2FoZWFkcyB0aGFuIHRoZQorICAgc2Vjb25kLCBzbyB0aGUgZmlyc3Qgc2hvdWxkIGFsd2F5cyBiZSBwcmVmZXJyZWQgYXMgdGhlIGRlZmF1bHQgcmVkdWN0aW9uIGlmCisgICBlbmFibGVkLiAgVGhlIHNlY29uZCByZWR1Y3Rpb24gaGFzIG9uZSBsb29rYWhlYWQuICAqLworYjogOworYzogOworXV0sCitkbmwgVmlzaXQgZWFjaCBzdGF0ZSBtZW50aW9uZWQgYWJvdmUuCitbWydhJywgJ2EnXV0sCitbW1N0YXRlIDAKKworICAgIDAgJGFjY2VwdDogLiBzdGFydCAkZW5kCisgICAgMSBzdGFydDogLiBhIGIKKyAgICAyICAgICAgfCAuIGEgYiAnYScKKyAgICAzICAgICAgfCAuIGEgYyAnYicKKyAgICA0IGE6IC4gJ2EnCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMQorCisgICAgc3RhcnQgIGdvIHRvIHN0YXRlIDIKKyAgICBhICAgICAgZ28gdG8gc3RhdGUgMworCisKK1N0YXRlIDEKKworICAgIDQgYTogJ2EnIC5dQVRfQ09ORF9DQVNFKFtbYWNjZXB0aW5nXV0sIFtbICBbJGVuZCwgJ2EnLCAnYiddCisKKyAgICAkZW5kICByZWR1Y2UgdXNpbmcgcnVsZSA0IChhKQorICAgICdhJyAgIHJlZHVjZSB1c2luZyBydWxlIDQgKGEpCisgICAgJ2InICAgcmVkdWNlIHVzaW5nIHJ1bGUgNCAoYSldXSwgW1sKKworICAgICRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA0IChhKV1dKVsKKworCitTdGF0ZSAyCisKKyAgICAwICRhY2NlcHQ6IHN0YXJ0IC4gJGVuZAorCisgICAgJGVuZCAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA0CisKKworU3RhdGUgMworCisgICAgMSBzdGFydDogYSAuIGIKKyAgICAyICAgICAgfCBhIC4gYiAnYScKKyAgICAzICAgICAgfCBhIC4gYyAnYicKKyAgICA1IGI6IC4gIFskZW5kLCAnYSddCisgICAgNiBjOiAuICBbJ2InXV1BVF9DT05EX0NBU0UoW1ttb3N0XV0sIFtbCisKKyAgICAnYicgICAgICAgcmVkdWNlIHVzaW5nIHJ1bGUgNiAoYykKKyAgICAkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgNSAoYildXSwgW1sKKworICAgICRlbmQgIHJlZHVjZSB1c2luZyBydWxlIDUgKGIpCisgICAgJ2EnICAgcmVkdWNlIHVzaW5nIHJ1bGUgNSAoYikKKyAgICAnYicgICByZWR1Y2UgdXNpbmcgcnVsZSA2IChjKV1dKVsKKworICAgIGIgIGdvIHRvIHN0YXRlIDUKKyAgICBjICBnbyB0byBzdGF0ZSA2CisKKworU3RhdGUgNAorCisgICAgMCAkYWNjZXB0OiBzdGFydCAkZW5kIC4KKworICAgICRkZWZhdWx0ICBhY2NlcHQKKworCitTdGF0ZSA1CisKKyAgICAxIHN0YXJ0OiBhIGIgLiAgWyRlbmRdCisgICAgMiAgICAgIHwgYSBiIC4gJ2EnCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNworCisgICAgXUFUX0NPTkRfQ0FTRShbW21vc3RdXSwgW1skZGVmYXVsdF1dLAorICAgICAgICAgICAgICAgICAgW1skZW5kXV0pWyAgcmVkdWNlIHVzaW5nIHJ1bGUgMSAoc3RhcnQpCisKKworU3RhdGUgNgorCisgICAgMyBzdGFydDogYSBjIC4gJ2InCisKKyAgICAnYicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOAorCisKK1N0YXRlIDcKKworICAgIDIgc3RhcnQ6IGEgYiAnYScgLl1BVF9DT05EX0NBU0UoW1thY2NlcHRpbmddXSwgW1sgIFskZW5kXQorCisgICAgJGVuZCAgcmVkdWNlIHVzaW5nIHJ1bGUgMiAoc3RhcnQpXV0sIFtbCisKKyAgICAkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMiAoc3RhcnQpXV0pWworCisKK1N0YXRlIDgKKworICAgIDMgc3RhcnQ6IGEgYyAnYicgLl1BVF9DT05EX0NBU0UoW1thY2NlcHRpbmddXSwgW1sgIFskZW5kXQorCisgICAgJGVuZCAgcmVkdWNlIHVzaW5nIHJ1bGUgMyAoc3RhcnQpXV0sIFtbCisKKyAgICAkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMyAoc3RhcnQpXV0pWworXV0pCmRpZmYgLS1naXQgYS90ZXN0cy9yZWdyZXNzaW9uLmF0IGIvdGVzdHMvcmVncmVzc2lvbi5hdAppbmRleCA2YTM3Zjc1Li5kYjZjM2I5IDEwMDY0NAotLS0gYS90ZXN0cy9yZWdyZXNzaW9uLmF0CisrKyBiL3Rlc3RzL3JlZ3Jlc3Npb24uYXQKQEAgLTEsMjIgKzEsMTkgQEAKICMgQmlzb24gUmVncmVzc2lvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvdGVzdCAtKi0KIAotIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwMS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSMgYW55IGxhdGVyIHZlcnNpb24uCi0KKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKICMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQorIwogIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0jIDAyMTEwLTEzMDEsIFVTQS4KKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAKIEFUX0JBTk5FUihbW1JlZ3Jlc3Npb24gdGVzdHMuXV0pCiAKQEAgLTI3LDEwICsyNCwxMSBAQAogCiBBVF9TRVRVUChbVHJpdmlhbCBncmFtbWFyc10pCiAKK0FUX0JJU09OX09QVElPTl9QVVNIREVGUwogQVRfREFUQV9HUkFNTUFSKFtpbnB1dC55XSwKIFtbJXsKLXZvaWQgeXllcnJvciAoY2hhciBjb25zdCAqKTsKLWludCB5eWxleCAodm9pZCk7CitdQVRfWVlFUlJPUl9ERUNMQVJFX0VYVEVSTlsKK11BVF9ZWUxFWF9ERUNMQVJFX0VYVEVSTlsKICNkZWZpbmUgWVlTVFlQRSBpbnQgKgogJX0KIApAQCAtNDAsMjkgKzM4LDYwIEBACiAKIHByb2dyYW06ICd4JzsKIF1dKQorQVRfQklTT05fT1BUSU9OX1BPUERFRlMKIAotQVRfQ0hFQ0soW2Jpc29uIC1vIGlucHV0LmMgaW5wdXQueV0pCi1BVF9DT01QSUxFKFtpbnB1dC5vXSwgWy1jIGlucHV0LmNdKQorQVRfQklTT05fQ0hFQ0soWy1vIGlucHV0LmMgaW5wdXQueV0pCitBVF9DT01QSUxFKFtpbnB1dC5vXSkKIEFUX0NPTVBJTEUoW2lucHV0Lm9dLCBbLURZWURFQlVHIC1jIGlucHV0LmNdKQogCiBBVF9DTEVBTlVQCiAKIAogCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBFYXJseSB0b2tlbiBkZWZpbml0aW9ucy4gICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgWVlTVFlQRSB0eXBlZGVmLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1NFVFVQKFtZWVNUWVBFIHR5cGVkZWZdKQorCitBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMKK0FUX0RBVEFfR1JBTU1BUihbaW5wdXQueV0sCitbWyV7CitdQVRfWVlFUlJPUl9ERUNMQVJFX0VYVEVSTlsKK11BVF9ZWUxFWF9ERUNMQVJFX0VYVEVSTlsKK3R5cGVkZWYgdW5pb24geyBjaGFyIGNvbnN0ICp2YWw7IH0gWVlTVFlQRTsKKyV9CisKKyV0eXBlIDx2YWw+IHByb2dyYW0KKworJSUKKworcHJvZ3JhbTogeyAkJCA9ICIiOyB9OworXV0pCitBVF9CSVNPTl9PUFRJT05fUE9QREVGUworCitBVF9CSVNPTl9DSEVDSyhbLW8gaW5wdXQuYyBpbnB1dC55XSkKK0FUX0NPTVBJTEUoW2lucHV0Lm9dKQorCitBVF9DTEVBTlVQCiAKIAotQVRfU0VUVVAoW0Vhcmx5IHRva2VuIGRlZmluaXRpb25zXSkKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRWFybHkgdG9rZW4gZGVmaW5pdGlvbnMgd2l0aCAtLXlhY2MuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKK0FUX1NFVFVQKFtFYXJseSB0b2tlbiBkZWZpbml0aW9ucyB3aXRoIC0teWFjY10pCiAKICMgRm91bmQgaW4gR0NKOiB0aGV5IGV4cGVjdCB0aGUgdG9rZW5zIHRvIGJlIGRlZmluZWQgYmVmb3JlIHRoZSB1c2VyCiAjIHByb2xvZ3VlLCBzbyB0aGF0IHRoZXkgY2FuIHVzZSB0aGUgdG9rZW4gZGVmaW5pdGlvbnMgaW4gaXQuCiAKK0FUX0JJU09OX09QVElPTl9QVVNIREVGUwogQVRfREFUQV9HUkFNTUFSKFtpbnB1dC55XSwKIFtbJXsKLXZvaWQgeXllcnJvciAoY29uc3QgY2hhciAqcyk7Ci1pbnQgeXlsZXggKHZvaWQpOworXUFUX1lZRVJST1JfREVDTEFSRV9FWFRFUk5bCitdQVRfWVlMRVhfREVDTEFSRV9FWFRFUk5bCiAlfQogCiAldW5pb24KQEAgLTc5LDkgKzEwOCw1NSBAQAogZXhwOiBNWV9UT0tFTjsKICUlCiBdXSkKK0FUX0JJU09OX09QVElPTl9QT1BERUZTCiAKLUFUX0NIRUNLKFtiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnldKQotQVRfQ09NUElMRShbaW5wdXQub10sIFstYyBpbnB1dC5jXSkKK0FUX0JJU09OX0NIRUNLKFsteSAtbyBpbnB1dC5jIGlucHV0LnldKQorQVRfQ09NUElMRShbaW5wdXQub10pCisKK0FUX0NMRUFOVVAKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEVhcmx5IHRva2VuIGRlZmluaXRpb25zIHdpdGhvdXQgLS15YWNjLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCitBVF9TRVRVUChbRWFybHkgdG9rZW4gZGVmaW5pdGlvbnMgd2l0aG91dCAtLXlhY2NdKQorCisjIEZvdW5kIGluIEdDSjogdGhleSBleHBlY3QgdGhlIHRva2VucyB0byBiZSBkZWZpbmVkIGJlZm9yZSB0aGUgdXNlcgorIyBwcm9sb2d1ZSwgc28gdGhhdCB0aGV5IGNhbiB1c2UgdGhlIHRva2VuIGRlZmluaXRpb25zIGluIGl0LgorCitBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMKK0FUX0RBVEFfR1JBTU1BUihbaW5wdXQueV0sCitbWyV7CisjaW5jbHVkZSA8c3RkaW8uaD4KK11BVF9ZWUVSUk9SX0RFQ0xBUkVfRVhURVJOWworXUFUX1lZTEVYX0RFQ0xBUkVfRVhURVJOWwordm9pZCBwcmludF9teV90b2tlbiAodm9pZCk7CislfQorCisldW5pb24KK3sKKyAgaW50IHZhbDsKK307Cislewordm9pZAorcHJpbnRfbXlfdG9rZW4gKHZvaWQpCit7CisgIGVudW0geXl0b2tlbnR5cGUgbXlfdG9rZW4gPSBNWV9UT0tFTjsKKyAgcHJpbnRmICgiJWRcbiIsIG15X3Rva2VuKTsKK30KKyV9CisldG9rZW4gTVlfVE9LRU4KKyUlCitleHA6IE1ZX1RPS0VOOworJSUKK11dKQorQVRfQklTT05fT1BUSU9OX1BPUERFRlMKKworQVRfQklTT05fQ0hFQ0soWy1vIGlucHV0LmMgaW5wdXQueV0pCitBVF9DT01QSUxFKFtpbnB1dC5vXSkKIAogQVRfQ0xFQU5VUAogCkBAIC05NCwxNSArMTY5LDE3IEBACiAKIEFUX1NFVFVQKFtCcmFjZXMgcGFyc2luZ10pCiAKK0FUX0JJU09OX09QVElPTl9QVVNIREVGUwogQVRfREFUQShbaW5wdXQueV0sCi1bWy8qIEJpc29uIHVzZWQgdG8gc3dhbGxvdyB0aGUgY2hhcmFjdGVyIGFmdGVyIGB9Jy4gKi8KK1tbLyogQmlzb24gdXNlZCB0byBzd2FsbG93IHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgJ30nLiAqLwogCiAlJQogZXhwOiB7IHRlc3RzID0ge3t7e3t7e3t7e319fX19fX19fX07IH07CiAlJQogXV0pCitBVF9CSVNPTl9PUFRJT05fUE9QREVGUwogCi1BVF9DSEVDSyhbYmlzb24gLXYgLW8gaW5wdXQuYyBpbnB1dC55XSkKK0FUX0JJU09OX0NIRUNLKFstdiAtbyBpbnB1dC5jIGlucHV0LnldKQogCiBBVF9DSEVDSyhbZ3JlcCAndGVzdHMgPSB7e3t7e3t7e3t7fX19fX19fX19fTsnIGlucHV0LmNdLCAwLCBbaWdub3JlXSkKIApAQCAtMTE2LDggKzE5Myw5IEBACiAKIEFUX1NFVFVQKFtEdXBsaWNhdGUgc3RyaW5nXSkKIAorQVRfQklTT05fT1BUSU9OX1BVU0hERUZTCiBBVF9EQVRBKFtpbnB1dC55XSwKLVtbLyogYEJpc29uIC12JyB1c2VkIHRvIGR1bXAgY29yZSB3aGVuIHR3byB0b2tlbnMgYXJlIGRlZmluZWQgd2l0aCB0aGUgc2FtZQorW1svKiAnQmlzb24gLXYnIHVzZWQgdG8gZHVtcCBjb3JlIHdoZW4gdHdvIHRva2VucyBhcmUgZGVmaW5lZCB3aXRoIHRoZSBzYW1lCiAgICBzdHJpbmcsIGFzIExFIGFuZCBHRSBiZWxvdy4gKi8KIAogJXRva2VuIE5VTQpAQCAtMTI4LDkgKzIwNiwxMCBAQAogZXhwOiAnKCcgZXhwICcpJyB8IE5VTSA7CiAlJQogXV0pCitBVF9CSVNPTl9PUFRJT05fUE9QREVGUwogCi1BVF9DSEVDSyhbYmlzb24gLXYgLW8gaW5wdXQuYyBpbnB1dC55XSwgMCwgW10sCi1bW2lucHV0Lnk6Ni44LTE0OiB3YXJuaW5nOiBzeW1ib2wgYCI8PSInIHVzZWQgbW9yZSB0aGFuIG9uY2UgYXMgYSBsaXRlcmFsIHN0cmluZworQVRfQklTT05fQ0hFQ0soWy12IC1vIGlucHV0LmMgaW5wdXQueV0sIDAsIFtdLAorW1tpbnB1dC55OjYuOC0xNDogd2FybmluZzogc3ltYm9sICI8PSIgdXNlZCBtb3JlIHRoYW4gb25jZSBhcyBhIGxpdGVyYWwgc3RyaW5nCiBdXSkKIAogQVRfQ0xFQU5VUApAQCAtMTQ0LDYgKzIyMyw3IEBACiAKIEFUX0tFWVdPUkRTKFtyZXBvcnRdKQogCitBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMKIEFUX0RBVEEoW2lucHV0LnldLAogW1slJQogZXhwcjoKQEAgLTE3Myw4ICsyNTMsOSBAQAogCiB9OwogXV0pCitBVF9CSVNPTl9PUFRJT05fUE9QREVGUwogCi1BVF9DSEVDSyhbYmlzb24gLW8gaW5wdXQuYyAtdiBpbnB1dC55XSkKK0FUX0JJU09OX0NIRUNLKFstbyBpbnB1dC5jIC12IGlucHV0LnldKQogCiAjIENoZWNrIHRoZSBjb250ZW50cyBvZiB0aGUgcmVwb3J0LgogQVRfQ0hFQ0soW2NhdCBpbnB1dC5vdXRwdXRdLCBbXSwKQEAgLTE4MiwxMyArMjYzLDEzIEBACiAKICAgICAwICRhY2NlcHQ6IGV4cHIgJGVuZAogCi0gICAgMSBAMTogLyogZW1wdHkgKi8KKyAgICAxICRAMTogLyogZW1wdHkgKi8KIAotICAgIDIgZXhwcjogJ2EnIEAxICdiJworICAgIDIgZXhwcjogJ2EnICRAMSAnYicKIAotICAgIDMgQDI6IC8qIGVtcHR5ICovCisgICAgMyAkQDI6IC8qIGVtcHR5ICovCiAKLSAgICA0IGV4cHI6IEAyICdjJworICAgIDQgZXhwcjogJEAyICdjJwogCiAKIFRlcm1pbmFscywgd2l0aCBydWxlcyB3aGVyZSB0aGV5IGFwcGVhcgpAQCAtMjA2LDcxICsyODcsNzEgQEAKICAgICBvbiBsZWZ0OiAwCiBleHByICg3KQogICAgIG9uIGxlZnQ6IDIgNCwgb24gcmlnaHQ6IDAKLUAxICg4KQorJEAxICg4KQogICAgIG9uIGxlZnQ6IDEsIG9uIHJpZ2h0OiAyCi1AMiAoOSkKKyRAMiAoOSkKICAgICBvbiBsZWZ0OiAzLCBvbiByaWdodDogNAogCiAKLXN0YXRlIDAKK1N0YXRlIDAKIAogICAgIDAgJGFjY2VwdDogLiBleHByICRlbmQKIAogICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxCiAKLSAgICAkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMyAoQDIpCisgICAgJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDMgKCRAMikKIAogICAgIGV4cHIgIGdvIHRvIHN0YXRlIDIKLSAgICBAMiAgICBnbyB0byBzdGF0ZSAzCisgICAgJEAyICAgZ28gdG8gc3RhdGUgMwogCiAKLXN0YXRlIDEKK1N0YXRlIDEKIAotICAgIDIgZXhwcjogJ2EnIC4gQDEgJ2InCisgICAgMiBleHByOiAnYScgLiAkQDEgJ2InCiAKLSAgICAkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMSAoQDEpCisgICAgJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDEgKCRAMSkKIAotICAgIEAxICBnbyB0byBzdGF0ZSA0CisgICAgJEAxICBnbyB0byBzdGF0ZSA0CiAKIAotc3RhdGUgMgorU3RhdGUgMgogCiAgICAgMCAkYWNjZXB0OiBleHByIC4gJGVuZAogCiAgICAgJGVuZCAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1CiAKIAotc3RhdGUgMworU3RhdGUgMwogCi0gICAgNCBleHByOiBAMiAuICdjJworICAgIDQgZXhwcjogJEAyIC4gJ2MnCiAKICAgICAnYycgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNgogCiAKLXN0YXRlIDQKK1N0YXRlIDQKIAotICAgIDIgZXhwcjogJ2EnIEAxIC4gJ2InCisgICAgMiBleHByOiAnYScgJEAxIC4gJ2InCiAKICAgICAnYicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNwogCiAKLXN0YXRlIDUKK1N0YXRlIDUKIAogICAgIDAgJGFjY2VwdDogZXhwciAkZW5kIC4KIAogICAgICRkZWZhdWx0ICBhY2NlcHQKIAogCi1zdGF0ZSA2CitTdGF0ZSA2CiAKLSAgICA0IGV4cHI6IEAyICdjJyAuCisgICAgNCBleHByOiAkQDIgJ2MnIC4KIAogICAgICRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA0IChleHByKQogCiAKLXN0YXRlIDcKK1N0YXRlIDcKIAotICAgIDIgZXhwcjogJ2EnIEAxICdiJyAuCisgICAgMiBleHByOiAnYScgJEAxICdiJyAuCiAKICAgICAkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMiAoZXhwcikKIF1dKQpAQCAtMjk2LDcgKzM3Nyw3IEBACiAlJQogXV0pCiAKLUFUX0NIRUNLKFtiaXNvbiAtdiAtbyBpbnB1dC5jIGlucHV0LnldKQorQVRfQklTT05fQ0hFQ0soWy12IC1vIGlucHV0LmMgaW5wdXQueV0pCiAKIEFUX0NMRUFOVVAKIApAQCAtMzE5LDE1ICs0MDAsMTYgQEAKICV7CiBdXSkKIAotQVRfQ0hFQ0soW2Jpc29uIGlucHV0LnldLCBbMV0sIFtdLAotW1tpbnB1dC55OjIuMTogaW52YWxpZCBjaGFyYWN0ZXI6IGA/JwotaW5wdXQueTozLjE0OiBpbnZhbGlkIGNoYXJhY3RlcjogYH0nCi1pbnB1dC55OjQuMTogaW52YWxpZCBjaGFyYWN0ZXI6IGAlJwotaW5wdXQueTo0LjI6IGludmFsaWQgY2hhcmFjdGVyOiBgJicKLWlucHV0Lnk6NS4xLTE3OiBpbnZhbGlkIGRpcmVjdGl2ZTogYCVhLWRvZXMtbm90LWV4aXN0JwotaW5wdXQueTo2LjE6IGludmFsaWQgY2hhcmFjdGVyOiBgJScKLWlucHV0Lnk6Ni4yOiBpbnZhbGlkIGNoYXJhY3RlcjogYC0nCi1pbnB1dC55OjcuMS04LjA6IG1pc3NpbmcgYCV9JyBhdCBlbmQgb2YgZmlsZQorQVRfQklTT05fQ0hFQ0soW2lucHV0LnldLCBbMV0sIFtdLAorW1tpbnB1dC55OjIuMTogZXJyb3I6IGludmFsaWQgY2hhcmFjdGVyOiAnPycKK2lucHV0Lnk6My4xNDogZXJyb3I6IGludmFsaWQgY2hhcmFjdGVyOiAnfScKK2lucHV0Lnk6NC4xOiBlcnJvcjogaW52YWxpZCBjaGFyYWN0ZXI6ICclJworaW5wdXQueTo0LjI6IGVycm9yOiBpbnZhbGlkIGNoYXJhY3RlcjogJyYnCitpbnB1dC55OjUuMS0xNzogZXJyb3I6IGludmFsaWQgZGlyZWN0aXZlOiAnJWEtZG9lcy1ub3QtZXhpc3QnCitpbnB1dC55OjYuMTogZXJyb3I6IGludmFsaWQgY2hhcmFjdGVyOiAnJScKK2lucHV0Lnk6Ni4yOiBlcnJvcjogaW52YWxpZCBjaGFyYWN0ZXI6ICctJworaW5wdXQueTo3LjEtOC4wOiBlcnJvcjogbWlzc2luZyAnJX0nIGF0IGVuZCBvZiBmaWxlCitpbnB1dC55OjcuMS04LjA6IGVycm9yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXsuLi4lfQogXV0pCiAKIEFUX0NMRUFOVVAKQEAgLTM0NSwxMCArNDI3LDggQEAKICV1bmlvbgogXV0pCiAKLUFUX0NIRUNLKFtiaXNvbiBpbnB1dC55XSwgWzFdLCBbXSwKLVtbaW5wdXQueTozLjE6IG1pc3NpbmcgYHsnIGluICIlZGVzdHJ1Y3RvciB7Li4ufSIKLWlucHV0Lnk6NC4xOiBtaXNzaW5nIGB7JyBpbiAiJWluaXRpYWwtYWN0aW9uIHsuLi59IgotaW5wdXQueTo0LjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlaW5pdGlhbC1hY3Rpb24gey4uLn0sIGV4cGVjdGluZyBzdHJpbmcgb3IgaWRlbnRpZmllcgorQVRfQklTT05fQ0hFQ0soW2lucHV0LnldLCBbMV0sIFtdLAorW1tpbnB1dC55OjMuMS0xNTogZXJyb3I6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlaW5pdGlhbC1hY3Rpb24sIGV4cGVjdGluZyB7Li4ufQogXV0pCiAKIEFUX0NMRUFOVVAKQEAgLTM2MiwxMiArNDQyLDE0IEBACiAKIEFUX1NFVFVQKFtUb2tlbiBkZWZpbml0aW9uc10pCiAKLSMgQmlzb24gbWFuYWdlZCwgd2hlbiBmZWQgd2l0aCBgJXRva2VuICdmJyAiZiInIHRvICNkZWZpbmUgJ2YnIQorQVRfQklTT05fT1BUSU9OX1BVU0hERUZTCisjIEJpc29uIG1hbmFnZWQsIHdoZW4gZmVkIHdpdGggJyV0b2tlbiAnZicgImYiJyB0byAjZGVmaW5lICdmJyEKIEFUX0RBVEFfR1JBTU1BUihbaW5wdXQueV0sCiBbJXsKKyNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdGRpby5oPgotdm9pZCB5eWVycm9yIChjb25zdCBjaGFyICpzKTsKLWludCB5eWxleCAodm9pZCk7CitdQVRfWVlFUlJPUl9ERUNMQVJFWworXUFUX1lZTEVYX0RFQ0xBUkVbCiAlfQogWyVlcnJvci12ZXJib3NlCiAldG9rZW4gTVlFT0YgMCAiZW5kIG9mIGZpbGUiCkBAIC0zNzYsMjAgKzQ1OCwxMiBAQAogJXRva2VuIENfVE9LRU4gJ2MnCiAldG9rZW4gJ2QnIERfVE9LRU4KICV0b2tlbiBTUEVDSUFMICJcXFwnXD9cIlxhXGJcZlxuXHJcdFx2XDAwMVwyMDFceDAwMVx4MDAwMDgxPz8hIgorJXRva2VuIFNQRUNJQUwgIlxcXCdcP1wiXGFcYlxmXG5cclx0XHZcMDAxXDIwMVx4MDAxXHgwMDAwODE/PyEiCiAlJQogZXhwOiAiYSIgIlxcXCdcP1wiXGFcYlxmXG5cclx0XHZcMDAxXDIwMVx4MDAxXHgwMDAwODE/PyEiOwogJSUKLXZvaWQKLXl5ZXJyb3IgKGNoYXIgY29uc3QgKnMpCi17Ci0gIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBzKTsKLX0KLQotaW50Ci15eWxleCAodm9pZCkKLXsKLSAgcmV0dXJuIFNQRUNJQUw7Ci19CitdQVRfWVlFUlJPUl9ERUZJTkVbCitdQVRfWVlMRVhfREVGSU5FKFt7IFNQRUNJQUwgfV0pWwogCiBpbnQKIG1haW4gKHZvaWQpCkBAIC0zOTcsMTEgKzQ3MSwzMiBAQAogICByZXR1cm4geXlwYXJzZSAoKTsKIH0KIF1dKQorQVRfQklTT05fT1BUSU9OX1BPUERFRlMKIAotQVRfQ0hFQ0soW2Jpc29uIC1vIGlucHV0LmMgaW5wdXQueV0pCisjIENoZWNraW5nIHRoZSB3YXJuaW5nIG1lc3NhZ2UgZ3VhcmFudGVlcyB0aGF0IHRoZSB0cmlncmFwaCAiPz8hIiBpc24ndAorIyB1bm5lY2Vzc2FyaWx5IGVzY2FwZWQgaGVyZSBldmVuIHRob3VnaCBpdCB3b3VsZCBuZWVkIHRvIGJlIGlmIGVuY29kZWQgaW4gYQorIyBDLXN0cmluZyBsaXRlcmFsLiAgQWxzbyBub3RpY2UgdGhhdCB1bm5lY2Vzc2FyeSBlc2NhcGluZywgc3VjaCBhcyAiXD8iLCBmcm9tCisjIHRoZSB1c2VyIHNwZWNpZmljYXRpb24gaXMgZWxpbWluYXRlZC4KK0FUX0JJU09OX0NIRUNLKFstbyBpbnB1dC5jIGlucHV0LnldLCBbWzBdXSwgW1tdXSwKK1tbaW5wdXQueToyMi44LTE0OiB3YXJuaW5nOiBzeW1ib2wgU1BFQ0lBTCByZWRlY2xhcmVkCitpbnB1dC55OjIyLjgtNjM6IHdhcm5pbmc6IHN5bWJvbCAiXFwnP1wiXGFcYlxmXG5cclx0XHZcMDAxXDIwMVwwMDFcMjAxPz8hIiB1c2VkIG1vcmUgdGhhbiBvbmNlIGFzIGEgbGl0ZXJhbCBzdHJpbmcKK11dKQorQVRfQklTT05fQ0hFQ0soWy1mY2FyZXQgLW8gaW5wdXQuYyBpbnB1dC55XSwgW1swXV0sIFtbXV0sCitbW2lucHV0Lnk6MjIuOC0xNDogd2FybmluZzogc3ltYm9sIFNQRUNJQUwgcmVkZWNsYXJlZAorICV0b2tlbiBTUEVDSUFMICJcXFwnXD9cIlxhXGJcZlxuXHJcdFx2XDAwMVwyMDFceDAwMVx4MDAwMDgxPz8hIgorICAgICAgICBeXl5eXl5eCitpbnB1dC55OjIyLjgtNjM6IHdhcm5pbmc6IHN5bWJvbCAiXFwnP1wiXGFcYlxmXG5cclx0XHZcMDAxXDIwMVwwMDFcMjAxPz8hIiB1c2VkIG1vcmUgdGhhbiBvbmNlIGFzIGEgbGl0ZXJhbCBzdHJpbmcKKyAldG9rZW4gU1BFQ0lBTCAiXFxcJ1w/XCJcYVxiXGZcblxyXHRcdlwwMDFcMjAxXHgwMDFceDAwMDA4MT8/ISIKKyAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK11dKQogQVRfQ09NUElMRShbaW5wdXRdKQorCisjIENoZWNraW5nIHRoZSBlcnJvciBtZXNzYWdlIGhlcmUgZ3VhcmFudGVlcyB0aGF0IHl5dG5hbWUsIHdoaWNoIGRvZXMgY29udGFpbgorIyBDLXN0cmluZyBsaXRlcmFscywgZG9lcyBoYXZlIHRoZSB0cmlncmFwaCBlc2NhcGVkIGNvcnJlY3RseS4gIFRodXMsIHRoZQorIyBzeW1ib2wgbmFtZSByZXBvcnRlZCBieSB0aGUgcGFyc2VyIGlzIGV4YWN0bHkgdGhlIHNhbWUgYXMgdGhhdCByZXBvcnRlZCBieQorIyBCaXNvbiBpdHNlbGYuCiBBVF9EQVRBKFtleHBlcnJdLAotW1tzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgIlxcJz9cIlxhXGJcZlxuXHJcdFx2XDAwMVwyMDFcMDAxXDIwMT9cPyEiLCBleHBlY3RpbmcgYQorW1tzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgIlxcJz9cIlxhXGJcZlxuXHJcdFx2XDAwMVwyMDFcMDAxXDIwMT8/ISIsIGV4cGVjdGluZyBhCiBdXSkKIEFUX1BBUlNFUl9DSEVDSyhbLi9pbnB1dF0sIDEsIFtdLCBbZXhwZXJyXSkKIEFUX0NMRUFOVVAKQEAgLTQxNSwyMiArNTEwLDI0IEBACiAKIEFUX1NFVFVQKFtDaGFyYWN0ZXJzIEVzY2FwZXNdKQogCitBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMKIEFUX0RBVEFfR1JBTU1BUihbaW5wdXQueV0sCiBbJXsKLXZvaWQgeXllcnJvciAoY29uc3QgY2hhciAqcyk7Ci1pbnQgeXlsZXggKHZvaWQpOworXUFUX1lZRVJST1JfREVDTEFSRV9FWFRFUk5bCitdQVRfWVlMRVhfREVDTEFSRV9FWFRFUk5bCiAlfQogWyUlCiBleHA6CiAgICdcJycgIlwnIgogfCAnXCInICJcIiIKLXwgJyInICAiJyIKK3wgJyInICAiJyIgLyogUGFjaWZ5IGZvbnQtbG9jay1tb2RlOiAiLiAqLwogOwogXV0pCi0jIFBhY2lmeSBmb250LWxvY2stbW9kZTogIgogCi1BVF9DSEVDSyhbYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55XSkKLUFUX0NPTVBJTEUoW2lucHV0Lm9dLCBbLWMgaW5wdXQuY10pCitBVF9CSVNPTl9PUFRJT05fUE9QREVGUworCitBVF9CSVNPTl9DSEVDSyhbLW8gaW5wdXQuYyBpbnB1dC55XSkKK0FUX0NPTVBJTEUoW2lucHV0Lm9dKQogQVRfQ0xFQU5VUAogCiAKQEAgLTQ0MSw3ICs1MzgsNyBAQAogCiAjIFRoZSBnZW5lcmF0aW9uIG9mIHRoZSByZWR1Y3Rpb24gd2FzIG9uY2Ugd3JvbmcgaW4gQmlzb24sIGFuZCBtYWRlIGl0CiAjIG1pc3Mgc29tZSByZWR1Y3Rpb25zLiAgSW4gdGhlIGZvbGxvd2luZyB0ZXN0IGNhc2UsIHRoZSByZWR1Y3Rpb24gb24KLSMgYHVuZGVmX2lkX3RvaycgaW4gc3RhdGUgMSB3YXMgbWlzc2luZy4gIFRoaXMgaXMgc3RyaXBwZWQgZG93biBmcm9tCisjICd1bmRlZl9pZF90b2snIGluIHN0YXRlIDEgd2FzIG1pc3NpbmcuICBUaGlzIGlzIHN0cmlwcGVkIGRvd24gZnJvbQogIyB0aGUgYWN0dWFsIHdlYjJjLnkuCiAKIEFUX1NFVFVQKFtXZWIyYyBSZXBvcnRdKQpAQCAtNDY5LDcgKzU2Niw3IEBACiAlJQogXV0pCiAKLUFUX0NIRUNLKFtiaXNvbiAtdiBpbnB1dC55XSkKK0FUX0JJU09OX0NIRUNLKFstdiBpbnB1dC55XSkKIEFUX0NIRUNLKFtjYXQgaW5wdXQub3V0cHV0XSwgMCwKIFtbR3JhbW1hcgogCkBAIC00ODAsOSArNTc3LDkgQEAKICAgICAyIENPTlNUX0RFQ19MSVNUOiBDT05TVF9ERUMKICAgICAzICAgICAgICAgICAgICAgfCBDT05TVF9ERUNfTElTVCBDT05TVF9ERUMKIAotICAgIDQgQDE6IC8qIGVtcHR5ICovCisgICAgNCAkQDE6IC8qIGVtcHR5ICovCiAKLSAgICA1IENPTlNUX0RFQzogQDEgdW5kZWZfaWRfdG9rICc9JyBjb25zdF9pZF90b2sgJzsnCisgICAgNSBDT05TVF9ERUM6ICRAMSB1bmRlZl9pZF90b2sgJz0nIGNvbnN0X2lkX3RvayAnOycKIAogCiBUZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIKQEAgLTUwNSw5MyArNjAyLDkzIEBACiAgICAgb24gbGVmdDogMiAzLCBvbiByaWdodDogMSAzCiBDT05TVF9ERUMgKDEwKQogICAgIG9uIGxlZnQ6IDUsIG9uIHJpZ2h0OiAyIDMKLUAxICgxMSkKKyRAMSAoMTEpCiAgICAgb24gbGVmdDogNCwgb24gcmlnaHQ6IDUKIAogCi1zdGF0ZSAwCitTdGF0ZSAwCiAKICAgICAwICRhY2NlcHQ6IC4gQ09OU1RfREVDX1BBUlQgJGVuZAogCi0gICAgJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDQgKEAxKQorICAgICRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA0ICgkQDEpCiAKICAgICBDT05TVF9ERUNfUEFSVCAgZ28gdG8gc3RhdGUgMQogICAgIENPTlNUX0RFQ19MSVNUICBnbyB0byBzdGF0ZSAyCiAgICAgQ09OU1RfREVDICAgICAgIGdvIHRvIHN0YXRlIDMKLSAgICBAMSAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNAorICAgICRAMSAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0CiAKIAotc3RhdGUgMQorU3RhdGUgMQogCiAgICAgMCAkYWNjZXB0OiBDT05TVF9ERUNfUEFSVCAuICRlbmQKIAogICAgICRlbmQgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNQogCiAKLXN0YXRlIDIKK1N0YXRlIDIKIAogICAgIDEgQ09OU1RfREVDX1BBUlQ6IENPTlNUX0RFQ19MSVNUIC4KICAgICAzIENPTlNUX0RFQ19MSVNUOiBDT05TVF9ERUNfTElTVCAuIENPTlNUX0RFQwogCi0gICAgdW5kZWZfaWRfdG9rICByZWR1Y2UgdXNpbmcgcnVsZSA0IChAMSkKKyAgICB1bmRlZl9pZF90b2sgIHJlZHVjZSB1c2luZyBydWxlIDQgKCRAMSkKICAgICAkZGVmYXVsdCAgICAgIHJlZHVjZSB1c2luZyBydWxlIDEgKENPTlNUX0RFQ19QQVJUKQogCiAgICAgQ09OU1RfREVDICBnbyB0byBzdGF0ZSA2Ci0gICAgQDEgICAgICAgICBnbyB0byBzdGF0ZSA0CisgICAgJEAxICAgICAgICBnbyB0byBzdGF0ZSA0CiAKIAotc3RhdGUgMworU3RhdGUgMwogCiAgICAgMiBDT05TVF9ERUNfTElTVDogQ09OU1RfREVDIC4KIAogICAgICRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAyIChDT05TVF9ERUNfTElTVCkKIAogCi1zdGF0ZSA0CitTdGF0ZSA0CiAKLSAgICA1IENPTlNUX0RFQzogQDEgLiB1bmRlZl9pZF90b2sgJz0nIGNvbnN0X2lkX3RvayAnOycKKyAgICA1IENPTlNUX0RFQzogJEAxIC4gdW5kZWZfaWRfdG9rICc9JyBjb25zdF9pZF90b2sgJzsnCiAKICAgICB1bmRlZl9pZF90b2sgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNwogCiAKLXN0YXRlIDUKK1N0YXRlIDUKIAogICAgIDAgJGFjY2VwdDogQ09OU1RfREVDX1BBUlQgJGVuZCAuCiAKICAgICAkZGVmYXVsdCAgYWNjZXB0CiAKIAotc3RhdGUgNgorU3RhdGUgNgogCiAgICAgMyBDT05TVF9ERUNfTElTVDogQ09OU1RfREVDX0xJU1QgQ09OU1RfREVDIC4KIAogICAgICRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAzIChDT05TVF9ERUNfTElTVCkKIAogCi1zdGF0ZSA3CitTdGF0ZSA3CiAKLSAgICA1IENPTlNUX0RFQzogQDEgdW5kZWZfaWRfdG9rIC4gJz0nIGNvbnN0X2lkX3RvayAnOycKKyAgICA1IENPTlNUX0RFQzogJEAxIHVuZGVmX2lkX3RvayAuICc9JyBjb25zdF9pZF90b2sgJzsnCiAKICAgICAnPScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOAogCiAKLXN0YXRlIDgKK1N0YXRlIDgKIAotICAgIDUgQ09OU1RfREVDOiBAMSB1bmRlZl9pZF90b2sgJz0nIC4gY29uc3RfaWRfdG9rICc7JworICAgIDUgQ09OU1RfREVDOiAkQDEgdW5kZWZfaWRfdG9rICc9JyAuIGNvbnN0X2lkX3RvayAnOycKIAogICAgIGNvbnN0X2lkX3RvayAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5CiAKIAotc3RhdGUgOQorU3RhdGUgOQogCi0gICAgNSBDT05TVF9ERUM6IEAxIHVuZGVmX2lkX3RvayAnPScgY29uc3RfaWRfdG9rIC4gJzsnCisgICAgNSBDT05TVF9ERUM6ICRAMSB1bmRlZl9pZF90b2sgJz0nIGNvbnN0X2lkX3RvayAuICc7JwogCiAgICAgJzsnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEwCiAKIAotc3RhdGUgMTAKK1N0YXRlIDEwCiAKLSAgICA1IENPTlNUX0RFQzogQDEgdW5kZWZfaWRfdG9rICc9JyBjb25zdF9pZF90b2sgJzsnIC4KKyAgICA1IENPTlNUX0RFQzogJEAxIHVuZGVmX2lkX3RvayAnPScgY29uc3RfaWRfdG9rICc7JyAuCiAKICAgICAkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgNSAoQ09OU1RfREVDKQogXV0pCkBAIC02MDMsNyArNzAwLDcgQEAKICMjIFdlYjJjIEFjdGlvbnMuICAjIwogIyMgLS0tLS0tLS0tLS0tLS0tICMjCiAKLSMgVGhlIGdlbmVyYXRpb24gb2YgdGhlIG1hcHBpbmcgYHN0YXRlIC0+IGFjdGlvbicgd2FzIG9uY2Ugd3JvbmcgaW4KKyMgVGhlIGdlbmVyYXRpb24gb2YgdGhlIG1hcHBpbmcgJ3N0YXRlIC0+IGFjdGlvbicgd2FzIG9uY2Ugd3JvbmcgaW4KICMgZXh0cmVtZWx5IHNwZWNpZmljIHNpdHVhdGlvbnMuICB3ZWIyYy55IGV4aGliaXRzIHRoaXMgc2l0dWF0aW9uLgogIyBCZWxvdyBpcyBhIHN0cmlwcGVkIHZlcnNpb24gb2YgdGhlIGdyYW1tYXIuICBJdCBsb29rcyBsaWtlIG9uZSBjYW4KICMgc2ltcGxpZnkgaXQgZnVydGhlciwgYnV0IGp1c3QgZG9uJ3Q6IGl0IGlzIHR1bmVkIHRvIGV4aGliaXQgYSBidWcsCkBAIC02MzQsMTAgKzczMSw5IEBACiAlJQogXV0pCiAKLUFUX0NIRUNLKFtiaXNvbiAtdiAtbyBpbnB1dC5jIGlucHV0LnldKQorQVRfQklTT05fQ0hFQ0soWy12IC1vIGlucHV0LmMgaW5wdXQueV0pCiAKLSMgQ2hlY2sgb25seSB0aGUgdGFibGVzLiAgV2UgZG9uJ3QgdXNlIC0tbm8tcGFyc2VyLCBiZWNhdXNlIGl0IGlzCi0jIHN0aWxsIHRvIGJlIGltcGxlbWVudGVkIGluIHRoZSBleHBlcmltZW50YWwgYnJhbmNoIG9mIEJpc29uLgorIyBDaGVjayBvbmx5IHRoZSB0YWJsZXMuCiBbc2VkIC1uICdzLyAgKiQvLzsvXnN0YXRpYyBjb25zdC4qXFtcXSA9LywvXn0vcCcgaW5wdXQuYyA+dGFibGVzLmNdCiAKIEFUX0NIRUNLKFtbY2F0IHRhYmxlcy5jXV0sIDAsCkBAIC02ODcsNyArNzgzLDcgQEAKIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQogewogICAiJGVuZCIsICJlcnJvciIsICIkdW5kZWZpbmVkIiwgIlwiaWZcIiIsICJcImNvbnN0XCIiLCAiXCJ0aGVuXCIiLAotICAiXCJlbHNlXCIiLCAiJGFjY2VwdCIsICJzdGF0ZW1lbnQiLCAic3RydWN0X3N0YXQiLCAiaWYiLCAiZWxzZSIsIDAKKyAgIlwiZWxzZVwiIiwgIiRhY2NlcHQiLCAic3RhdGVtZW50IiwgInN0cnVjdF9zdGF0IiwgImlmIiwgImVsc2UiLCBZWV9OVUxMCiB9Owogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXl0b2tudW1bXSA9CiB7CkBAIC03NTAsMTIgKzg0NiwxMSBAQAogIyBzbyB0aGF0IHBvc3NpYmxlIGJvdW5kIGNoZWNraW5nIGNvbXBpbGVycyBjb3VsZCBjaGVjayBhbGwgdGhlIHNrZWxldG9ucy4KIG00X2RlZmluZShbX0FUX0RBVEFfREFOQ0VSX1ldLAogW0FUX0RBVEFfR1JBTU1BUihbZGFuY2VyLnldLAotWyV7Ci1zdGF0aWMgaW50IHl5bGV4IChBVF9MQUxSMV9DQ19JRihbaW50ICpdLCBbdm9pZF0pKTsKLUFUX0xBTFIxX0NDX0lGKFtdLAotWyNpbmNsdWRlIDxzdGRpby5oPgotc3RhdGljIHZvaWQgeXllcnJvciAoY29uc3QgY2hhciAqKTtdKQotJX0KK1tbJWNvZGUgcHJvdmlkZXMKK3sKKyAgXUFUX1lZRVJST1JfREVDTEFSRVsKKyAgXUFUX1lZTEVYX0RFQ0xBUkVbCit9CiAkMQogJXRva2VuIEFSUk9XIElOVkFMSUQgTlVNQkVSIFNUUklORyBEQVRBCiAlZGVmaW5lcwpAQCAtODAwLDQ2ICs4OTUsMjYgQEAKICAgIHwgSU5WQUxJRAogICAgOwogJSUKLUFUX0xBTFIxX0NDX0lGKAotWy8qIEEgQysrIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gKi8KLXZvaWQKLXl5OjpwYXJzZXI6OmVycm9yIChjb25zdCBsb2NhdGlvbiYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtKQotewotICBzdGQ6OmNlcnIgPDwgbSA8PCBzdGQ6OmVuZGw7Ci19Ci0KLWludAorXUFUX1lZRVJST1JfREVGSU5FWworXUFUX1lZTEVYX0RFRklORShbIjoiXSlbCitdQVRfTEFMUjFfQ0NfSUYoCitbaW50CiB5eXBhcnNlICgpCiB7CiAgIHl5OjpwYXJzZXIgcGFyc2VyOwotICBwYXJzZXIuc2V0X2RlYnVnX2xldmVsICghIVlZREVCVUcpOworI2lmIFlZREVCVUcKKyAgcGFyc2VyLnNldF9kZWJ1Z19sZXZlbCAoWVlERUJVRyk7CisjZW5kaWYKICAgcmV0dXJuIHBhcnNlci5wYXJzZSAoKTsKIH0KLV0sCi1bc3RhdGljIHZvaWQKLXl5ZXJyb3IgKGNvbnN0IGNoYXIgKnMpCi17Ci0gIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBzKTsKLX1dKQotCi1zdGF0aWMgaW50Ci15eWxleCAoQVRfTEFMUjFfQ0NfSUYoW2ludCAqbHZhbF0sIFt2b2lkXSkpCi1bewotICBzdGF0aWMgaW50IHRva251bSA9IDA7Ci0gIHN0YXRpYyBpbnQgdG9rZW5zW10gPQotICAgIHsKLSAgICAgICc6JywgLTEKLSAgICB9OwotICBdQVRfTEFMUjFfQ0NfSUYoWypsdmFsID0gMDsgLyogUGFjaWZ5IEdDQy4gICovXSlbCi0gIHJldHVybiB0b2tlbnNbdG9rbnVtKytdOwotfV0KK10pWwogCiBpbnQKIG1haW4gKHZvaWQpCiB7CiAgIHJldHVybiB5eXBhcnNlICgpOwogfQotXSkKK11dKQogXSkjIF9BVF9EQVRBX0RBTkNFUl9ZCiAKIApAQCAtODUwLDEyICs5MjUsNyBAQAogW0FUX1NFVFVQKFtEYW5jZXIgJDFdKQogQVRfQklTT05fT1BUSU9OX1BVU0hERUZTKFskMV0pCiBfQVRfREFUQV9EQU5DRVJfWShbJDFdKQotQVRfQ0hFQ0soW2Jpc29uIC1vIGRhbmNlci5jIGRhbmNlci55XSkKLUFUX0xBTFIxX0NDX0lGKAotICBbQVRfQ0hFQ0soW2Jpc29uIC1vIGRhbmNlci5jYyBkYW5jZXIueV0pCi0gICBBVF9DT01QSUxFX0NYWChbZGFuY2VyXSldLAotICBbQVRfQ0hFQ0soW2Jpc29uIC1vIGRhbmNlci5jIGRhbmNlci55XSkKLSAgIEFUX0NPTVBJTEUoW2RhbmNlcl0pXSkKK0FUX0ZVTExfQ09NUElMRShbZGFuY2VyXSkKIEFUX1BBUlNFUl9DSEVDSyhbLi9kYW5jZXJdLCAxLCBbXSwKIFtzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJzonCiBdKQpAQCAtODc3LDExICs5NDcsMTIgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIG00X2RlZmluZShbX0FUX0RBVEFfRVhQRUNUMl9ZXSwKIFtBVF9EQVRBX0dSQU1NQVIoW2V4cGVjdDIueV0sCi1bJXsKLXN0YXRpYyBpbnQgeXlsZXggKEFUX0xBTFIxX0NDX0lGKFtpbnQgKl0sIFt2b2lkXSkpOworW1sleworc3RhdGljIGludCB5eWxleCAoXUFUX0xBTFIxX0NDX0lGKFtpbnQgKl0sIFt2b2lkXSkpOwogQVRfTEFMUjFfQ0NfSUYoW10sCi1bI2luY2x1ZGUgPHN0ZGlvLmg+Ci1zdGF0aWMgdm9pZCB5eWVycm9yIChjb25zdCBjaGFyICopO10pCitbWyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorXUFUX1lZRVJST1JfREVDTEFSRV0pWwogJX0KICQxCiAlZGVmaW5lcwpAQCAtODk4LDYxICs5NjksNDcgQEAKIHQ6IEEgfCBCOwogCiAlJQotQVRfTEFMUjFfQ0NfSUYoCi1bLyogQSBDKysgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAqLwotdm9pZAoteXk6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGxvY2F0aW9uJiwgY29uc3Qgc3RkOjpzdHJpbmcmIG0pCi17Ci0gIHN0ZDo6Y2VyciA8PCBtIDw8IHN0ZDo6ZW5kbDsKLX0KLQotaW50CitdQVRfWVlFUlJPUl9ERUZJTkVbCitdQVRfTEFMUjFfQ0NfSUYoCitbaW50CiB5eXBhcnNlICgpCiB7CiAgIHl5OjpwYXJzZXIgcGFyc2VyOwogICByZXR1cm4gcGFyc2VyLnBhcnNlICgpOwogfQotXSwKLVtzdGF0aWMgdm9pZAoteXllcnJvciAoY29uc3QgY2hhciAqcykKLXsKLSAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIHMpOwotfV0pCitdKVsKIAorI2luY2x1ZGUgPGFzc2VydC5oPgogc3RhdGljIGludAoteXlsZXggKEFUX0xBTFIxX0NDX0lGKFtpbnQgKmx2YWxdLCBbdm9pZF0pKQotW3sKLSAgc3RhdGljIGludCB0b2tudW0gPSAwOwotICBzdGF0aWMgaW50IHRva2Vuc1tdID0KK3l5bGV4IChdQVRfTEFMUjFfQ0NfSUYoW2ludCAqbHZhbF0sIFt2b2lkXSlbKQoreworICBzdGF0aWMgaW50IGNvbnN0IHRva2Vuc1tdID0KICAgICB7CiAgICAgICAxMDAwLCAnKycsICcrJywgLTEKICAgICB9OworICBzdGF0aWMgc2l6ZV90IHRva251bTsKICAgXUFUX0xBTFIxX0NDX0lGKFsqbHZhbCA9IDA7IC8qIFBhY2lmeSBHQ0MuICAqL10pWworICBhc3NlcnQgKHRva251bSA8IHNpemVvZiB0b2tlbnMgLyBzaXplb2YgKnRva2Vucyk7CiAgIHJldHVybiB0b2tlbnNbdG9rbnVtKytdOwotfV0KK30KIAogaW50CiBtYWluICh2b2lkKQogewogICByZXR1cm4geXlwYXJzZSAoKTsKIH0KLV0pCitdXSkKIF0pIyBfQVRfREFUQV9FWFBFQ1QyX1kKIAogCiAjIEFUX0NIRUNLX0VYUEVDVDIoQklTT04tT1BUSU9OUykKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgR2VuZXJhdGUgdGhlIGdyYW1tYXIsIGNvbXBpbGUgaXQsIHJ1biBpdC4KIG00X2RlZmluZShbQVRfQ0hFQ0tfRVhQRUNUMl0sCiBbQVRfU0VUVVAoW0V4cGVjdGluZyB0d28gdG9rZW5zICQxXSkKIEFUX0JJU09OX09QVElPTl9QVVNIREVGUyhbJDFdKQogX0FUX0RBVEFfRVhQRUNUMl9ZKFskMV0pCi1BVF9DSEVDSyhbYmlzb24gLW8gZXhwZWN0Mi5jIGV4cGVjdDIueV0pCi1BVF9MQUxSMV9DQ19JRigKLSAgW0FUX0NIRUNLKFtiaXNvbiAtbyBleHBlY3QyLmNjIGV4cGVjdDIueV0pCi0gICBBVF9DT01QSUxFX0NYWChbZXhwZWN0Ml0pXSwKLSAgW0FUX0NIRUNLKFtiaXNvbiAtbyBleHBlY3QyLmMgZXhwZWN0Mi55XSkKLSAgIEFUX0NPTVBJTEUoW2V4cGVjdDJdKV0pCitBVF9GVUxMX0NPTVBJTEUoW2V4cGVjdDJdKQogQVRfUEFSU0VSX0NIRUNLKFsuL2V4cGVjdDJdLCAxLCBbXSwKIFtzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnLCBleHBlY3RpbmcgQSBvciBCCiBdKQpAQCAtOTYzLDMgKzEwMjAsNjUwIEBACiBBVF9DSEVDS19FWFBFQ1QyKCkKIEFUX0NIRUNLX0VYUEVDVDIoWyVnbHItcGFyc2VyXSkKIEFUX0NIRUNLX0VYUEVDVDIoWyVza2VsZXRvbiAibGFscjEuY2MiXSkKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQnJhY2VkIGNvZGUgaW4gZGVjbGFyYXRpb24gaW4gcnVsZXMgc2VjdGlvbi4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworQVRfU0VUVVAoW0JyYWNlZCBjb2RlIGluIGRlY2xhcmF0aW9uIGluIHJ1bGVzIHNlY3Rpb25dKQorCisjIEJpc29uIG9uY2UgbWlzdG9vayBicmFjZWQgY29kZSBpbiBhIGRlY2xhcmF0aW9uIGluIHRoZSBydWxlcyBzZWN0aW9uIHRvIGJlIGEKKyMgcnVsZSBhY3Rpb24uCitBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMKK0FUX0RBVEFfR1JBTU1BUihbaW5wdXQueV0sCitbWyV7CisjaW5jbHVkZSA8c3RkaW8uaD4KK11BVF9ZWUVSUk9SX0RFQ0xBUkVbCitdQVRfWVlMRVhfREVDTEFSRVsKKyV9CisKKyVlcnJvci12ZXJib3NlCisKKyUlCisKK3N0YXJ0OgorICB7CisgICAgcHJpbnRmICgiQmlzb24gd291bGQgb25jZSBjb252ZXJ0IHRoaXMgYWN0aW9uIHRvIGEgbWlkcnVsZSBiZWNhdXNlIG9mIHRoZSIKKwkgICAgIiBzdWJzZXF1ZW50IGJyYWNlZCBjb2RlLlxuIik7CisgIH0KKyAgOworCislZGVzdHJ1Y3RvciB7IGZwcmludGYgKHN0ZGVyciwgIkRFU1RSVUNUT1JcbiIpOyB9ICdhJzsKKyVwcmludGVyIHsgZnByaW50ZiAoeXlvdXRwdXQsICJQUklOVEVSIik7IH0gJ2EnOworCislJQorXUFUX1lZRVJST1JfREVGSU5FWworXUFUX1lZTEVYX0RFRklORShbImEiXSlbCisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgeXlkZWJ1ZyA9IDE7CisgIHJldHVybiAheXlwYXJzZSAoKTsKK30KK11dKQorQVRfQklTT05fT1BUSU9OX1BPUERFRlMKKworQVRfQklTT05fQ0hFQ0soWy10IC1vIGlucHV0LmMgaW5wdXQueV0pCitBVF9DT01QSUxFKFtpbnB1dF0pCitBVF9QQVJTRVJfQ0hFQ0soWy4vaW5wdXRdLCAwLAorW1tCaXNvbiB3b3VsZCBvbmNlIGNvbnZlcnQgdGhpcyBhY3Rpb24gdG8gYSBtaWRydWxlIGJlY2F1c2Ugb2YgdGhlIHN1YnNlcXVlbnQgYnJhY2VkIGNvZGUuCitdXSwKK1tbU3RhcnRpbmcgcGFyc2UKK0VudGVyaW5nIHN0YXRlIDAKK1JlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgMSAobGluZSAyMCk6CistPiAkJCA9IG50ZXJtIHN0YXJ0ICgpCitTdGFjayBub3cgMAorRW50ZXJpbmcgc3RhdGUgMQorUmVhZGluZyBhIHRva2VuOiBOZXh0IHRva2VuIGlzIHRva2VuICdhJyAoUFJJTlRFUikKK3N5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnYScsIGV4cGVjdGluZyAkZW5kCitFcnJvcjogcG9wcGluZyBudGVybSBzdGFydCAoKQorU3RhY2sgbm93IDAKK0NsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIHRva2VuICdhJyAoUFJJTlRFUikKK0RFU1RSVUNUT1IKK1N0YWNrIG5vdyAwCitdXSkKKworQVRfQ0xFQU5VUAorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBTdHJpbmcgYWxpYXMgZGVjbGFyZWQgYWZ0ZXIgdXNlLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitBVF9TRVRVUChbU3RyaW5nIGFsaWFzIGRlY2xhcmVkIGFmdGVyIHVzZV0pCisKKyMgQmlzb24gb25jZSBpbmNvcnJlY3RseSBhc3NlcnRlZCB0aGF0IHRoZSBzeW1ib2wgbnVtYmVyIGZvciBlaXRoZXIgYSB0b2tlbiBvcgorIyBpdHMgYWxpYXMgd2FzIHRoZSBoaWdoZXN0IHN5bWJvbCBudW1iZXIgc28gZmFyIGF0IHRoZSBwb2ludCBvZiB0aGUgYWxpYXMKKyMgZGVjbGFyYXRpb24uICBUaGF0IHdhcyB0cnVlIHVubGVzcyB0aGUgZGVjbGFyYXRpb24gYXBwZWFyZWQgYWZ0ZXIgdGhlaXIgZmlyc3QKKyMgdXNlcyBhbmQgb3RoZXIgdG9rZW5zIGFwcGVhcmVkIGluIGJldHdlZW4uCisKK0FUX0RBVEEoW2lucHV0LnldLAorW1slJQorc3RhcnQ6ICdhJyAiQSIgJ2InOworJXRva2VuICdhJyAiQSI7CitdXSkKKworQVRfQklTT05fQ0hFQ0soWy10IC1vIGlucHV0LmMgaW5wdXQueV0pCisKK0FUX0NMRUFOVVAKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBFeHRyYSBsb29rYWhlYWQgc2V0cyBpbiByZXBvcnQuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworQVRfU0VUVVAoW1tFeHRyYSBsb29rYWhlYWQgc2V0cyBpbiByZXBvcnRdXSkKKworIyBCaXNvbiBwcmludHMgZWFjaCByZWR1Y3Rpb24ncyBsb29rYWhlYWQgc2V0IG9ubHkgbmV4dCB0byB0aGUgYXNzb2NpYXRlZAorIyBzdGF0ZSdzIG9uZSBpdGVtIHRoYXQgKDEpIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FtZSBydWxlIGFzIHRoZSByZWR1Y3Rpb24KKyMgYW5kICgyKSBoYXMgaXRzIGRvdCBhdCB0aGUgZW5kIG9mIGl0cyBSSFMuICBQcmV2aW91c2x5LCBCaXNvbiBhbHNvCisjIGVycm9uZW91c2x5IHByaW50ZWQgdGhlIGxvb2thaGVhZCBzZXQgbmV4dCB0byBhbGwgb2YgdGhlIHN0YXRlJ3Mgb3RoZXIgaXRlbXMKKyMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lIHJ1bGUuICBUaGlzIGJ1ZyBhZmZlY3RlZCBvbmx5IHRoZSAnLm91dHB1dCcgZmlsZSBhbmQKKyMgbm90IHRoZSBnZW5lcmF0ZWQgcGFyc2VyIHNvdXJjZSBjb2RlLgorCitBVF9EQVRBKFtbaW5wdXQueV1dLAorW1slJQorc3RhcnQ6IGEgfCAnYScgYSAnYScgOworYTogJ2EnIDsKK11dKQorCitBVF9CSVNPTl9DSEVDSyhbWy0tcmVwb3J0PWFsbCBpbnB1dC55XV0pCitBVF9DSEVDSyhbW3NlZCAtbiAnL15TdGF0ZSAxJC8sL15TdGF0ZSAyJC9wJyBpbnB1dC5vdXRwdXRdXSwgW1swXV0sCitbW1N0YXRlIDEKKworICAgIDIgc3RhcnQ6ICdhJyAuIGEgJ2EnCisgICAgMyBhOiAuICdhJworICAgIDMgIHwgJ2EnIC4gIFskZW5kXQorCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDQKKworICAgICRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAzIChhKQorCisgICAgYSAgZ28gdG8gc3RhdGUgNQorCisKK1N0YXRlIDIKK11dKQorCitBVF9DTEVBTlVQCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBUb2tlbiBudW1iZXIgaW4gcHJlY2VkZW5jZSBkZWNsYXJhdGlvbi4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1NFVFVQKFtbVG9rZW4gbnVtYmVyIGluIHByZWNlZGVuY2UgZGVjbGFyYXRpb25dXSkKKworIyBQT1NJWCBzYXlzIHRva2VuIG51bWJlcnMgY2FuIGJlIGRlY2xhcmVkIGluICVsZWZ0LCAlcmlnaHQsIGFuZCAlbm9uYXNzb2MsIGJ1dAorIyB3ZSBsb3N0IHRoaXMgaW4gQmlzb24gMS41MC4KK0FUX0JJU09OX09QVElPTl9QVVNIREVGUworQVRfREFUQV9HUkFNTUFSKFtpbnB1dC55XSwKK1tbJXsKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIF1BVF9ZWUVSUk9SX0RFQ0xBUkVbCisgIF1BVF9ZWUxFWF9ERUNMQVJFWworJX0KKworJWVycm9yLXZlcmJvc2UKKyVyaWdodCBFTkQgMAorJWxlZnQgVEsxIDEgVEsyIDIgInRvayBhbGlhcyIgMworCislJQorCitzdGFydDoKKyAgICBUSzEgc3JfY29uZmxpY3QgInRvayBhbGlhcyIKKyAgfCBzdGFydCAlcHJlYyBFTkQKKyAgOworc3JfY29uZmxpY3Q6CisgIFRLMgorICB8IFRLMiAidG9rIGFsaWFzIgorICA7CisKKyUlCisKK11BVF9ZWUVSUk9SX0RFRklORVsKK11BVF9ZWUxFWF9ERUZJTkUoW3sgMSwgMiwgMywgMCB9XSlbCisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CitdXSkKK0FUX0JJU09OX09QVElPTl9QT1BERUZTCisKK0FUX0JJU09OX0NIRUNLKFtbLW8gaW5wdXQuYyBpbnB1dC55XV0sIFtbMF1dLCwKK1tbaW5wdXQueToyMy41LTE5OiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHM6IHN0YXJ0OiBzdGFydAoraW5wdXQueToyNy41LTE5OiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHM6IHNyX2NvbmZsaWN0OiBUSzIgInRvayBhbGlhcyIKK11dKQorQVRfQ09NUElMRShbW2lucHV0XV0pCitBVF9QQVJTRVJfQ0hFQ0soW1suL2lucHV0XV0pCisKK0FUX0NMRUFOVVAKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgcGFyc2UtZ3JhbS55OiBMQUxSID0gSUVMUi4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBJZiBwYXJzZS1ncmFtLnkncyBMQUxSIGFuZCBJRUxSIHBhcnNlciB0YWJsZXMgZXZlciBiZWdpbiB0byBkaWZmZXIsIHdlCisjIG5lZWQgdG8gZml4IHBhcnNlLWdyYW0ueSBvciBzdGFydCB1c2luZyBJRUxSLgorCitBVF9TRVRVUChbW3BhcnNlLWdyYW0ueTogTEFMUiA9IElFTFJdXSkKKworIyBBdm9pZCBkaWZmZXJlbmNlcyBpbiBzeW5jbGluZXMgYnkgdGVsbGluZyBiaXNvbiB0aGF0IHRoZSBvdXRwdXQgZmlsZXMKKyMgaGF2ZSB0aGUgc2FtZSBuYW1lLgorW2NwICRhYnNfdG9wX3NyY2Rpci9zcmMvcGFyc2UtZ3JhbS55IGlucHV0LnldCitBVF9CSVNPTl9DSEVDSyhbWy1vIGlucHV0LmMgLURsci50eXBlPWxhbHIgaW5wdXQueV1dKQorW212IGlucHV0LmMgbGFsci5jXQorQVRfQ0FQVFVSRV9GSUxFKFtsYWxyLmNdKQorQVRfQklTT05fQ0hFQ0soW1stbyBpbnB1dC5jIC1EbHIudHlwZT1pZWxyIGlucHV0LnldXSkKK1ttdiBpbnB1dC5jIGllbHIuY10KK0FUX0NBUFRVUkVfRklMRShbaWVsci5jXSkKK0FUX0NIRUNLKFtbZGlmZiBsYWxyLmMgaWVsci5jXV0sIFtbMF1dKQorCitBVF9DTEVBTlVQCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjICVlcnJvci12ZXJib3NlIGFuZCBZWVNUQUNLX1VTRV9BTExPQ0EuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1NFVFVQKFtbJWVycm9yLXZlcmJvc2UgYW5kIFlZU1RBQ0tfVVNFX0FMTE9DQV1dKQorCitBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMKK0FUX0RBVEFfR1JBTU1BUihbaW5wdXQueV0sCitbWyVjb2RlIHsKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIF1BVF9ZWUVSUk9SX0RFQ0xBUkVbCisgIF1BVF9ZWUxFWF9ERUNMQVJFWworICAjZGVmaW5lIFlZU1RBQ0tfVVNFX0FMTE9DQSAxCit9CisKKyVlcnJvci12ZXJib3NlCisKKyUlCisKK3N0YXJ0OiBjaGVjayBzeW50YXhfZXJyb3Igc3ludGF4X2Vycm9yIDsKKworY2hlY2s6Cit7CisgIGlmICgxMjggPCBzaXplb2YgeXltc2didWYpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLAorICAgICAgICAgICAgICAgIlRoZSBpbml0aWFsIHNpemUgb2YgeXltc2didWYgaW4geXlwYXJzZSBoYXMgaW5jcmVhc2VkXG4iCisgICAgICAgICAgICAgICAic2luY2UgdGhpcyB0ZXN0IGdyb3VwIHdhcyBsYXN0IHVwZGF0ZWQuICBBcyBhIHJlc3VsdCxcbiIKKyAgICAgICAgICAgICAgICJ0aGlzIHRlc3QgZ3JvdXAgbWF5IG5vIGxvbmdlciBtYW5hZ2UgdG8gaW5kdWNlIGFcbiIKKyAgICAgICAgICAgICAgICJyZWFsbG9jYXRpb24gb2YgdGhlIHN5bnRheCBlcnJvciBtZXNzYWdlIGJ1ZmZlci5cbiIKKyAgICAgICAgICAgICAgICJUaGlzIHRlc3QgZ3JvdXAgbXVzdCBiZSBhZGp1c3RlZCB0byBwcm9kdWNlIGEgbG9uZ2VyXG4iCisgICAgICAgICAgICAgICAiZXJyb3IgbWVzc2FnZS5cbiIpOworICAgICAgWVlBQk9SVDsKKyAgICB9Cit9Cis7CisKKy8vIEluZHVjZSBhIHN5bnRheCBlcnJvciBtZXNzYWdlIHdob3NlIHRvdGFsIGxlbmd0aCBpcyBtb3JlIHRoYW4KKy8vIHNpemVvZiB5eW1zZ2J1ZiBpbiB5eXBhcnNlLiAgRWFjaCB0b2tlbiBoZXJlIGlzIDY0IGJ5dGVzLgorc3ludGF4X2Vycm9yOgorICAiMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkzMTIzNDU2Nzg5NDEyMzQ1Njc4OTUxMjM0NTY3ODk2MTIzQSIKK3wgIjEyMzQ1Njc4OTExMjM0NTY3ODkyMTIzNDU2Nzg5MzEyMzQ1Njc4OTQxMjM0NTY3ODk1MTIzNDU2Nzg5NjEyM0IiCit8IGVycm9yICdhJyAnYicgJ2MnCis7CisKKyUlCisKK11BVF9ZWUVSUk9SX0RFRklORVsKKy8qIEluZHVjZSB0d28gc3ludGF4IGVycm9yIG1lc3NhZ2VzICh3aGljaCByZXF1aXJlcyBmdWxsIGVycm9yCisgICByZWNvdmVyeSBieSBzaGlmdGluZyAzIHRva2VucykgaW4gb3JkZXIgdG8gZGV0ZWN0IGFueSBsb3NzIG9mIHRoZQorICAgcmVhbGxvY2F0ZWQgYnVmZmVyLiAgKi8KK11BVF9ZWUxFWF9ERUZJTkUoWyJhYmMiXSlbCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorXV0pCitBVF9CSVNPTl9PUFRJT05fUE9QREVGUworCitBVF9CSVNPTl9DSEVDSyhbWy1vIGlucHV0LmMgaW5wdXQueV1dKQorQVRfQ09NUElMRShbW2lucHV0XV0pCitBVF9QQVJTRVJfQ0hFQ0soW1suL2lucHV0XV0sIFtbMV1dLCBbXSwKK1tbc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICdhJywgZXhwZWN0aW5nIDEyMzQ1Njc4OTExMjM0NTY3ODkyMTIzNDU2Nzg5MzEyMzQ1Njc4OTQxMjM0NTY3ODk1MTIzNDU2Nzg5NjEyM0Egb3IgMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkzMTIzNDU2Nzg5NDEyMzQ1Njc4OTUxMjM0NTY3ODk2MTIzQgorc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICRlbmQsIGV4cGVjdGluZyAxMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OTMxMjM0NTY3ODk0MTIzNDU2Nzg5NTEyMzQ1Njc4OTYxMjNBIG9yIDEyMzQ1Njc4OTExMjM0NTY3ODkyMTIzNDU2Nzg5MzEyMzQ1Njc4OTQxMjM0NTY3ODk1MTIzNDU2Nzg5NjEyM0IKK11dKQorCitBVF9DTEVBTlVQCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAlZXJyb3ItdmVyYm9zZSBvdmVyZmxvdy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgSW1hZ2luZSB0aGUgY2FzZSB3aGVyZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gPSBZWVNJWkVfTUFYSU1VTSBhbmQgYW4KKyMgaW52b2NhdGlvbiBvZiB5eXN5bnRheF9lcnJvciBoYXMgY2F1c2VkIHl5bXNnX2FsbG9jIHRvIGdyb3cgdG8gZXhhY3RseQorIyBZWVNUQUNLX0FMTE9DX01BWElNVU0gKHBlcmhhcHMgYmVjYXVzZSB0aGUgbm9ybWFsIGRvdWJsaW5nIG9mIHNpemUgaGFkCisjIHRvIGJlIGNsaXBwZWQgdG8gWVlTVEFDS19BTExPQ19NQVhJTVVNKS4gIEluIGFuIG9sZCB2ZXJzaW9uIG9mIHlhY2MuYywKKyMgYSBzdWJzZXF1ZW50IGludm9jYXRpb24gb2YgeXlzeW50YXhfZXJyb3IgdGhhdCBvdmVyZmxvd3MgZHVyaW5nIGl0cworIyBzaXplIGNhbGN1bGF0aW9uIHdvdWxkIHJldHVybiBZWVNJWkVfTUFYSU1VTSB0byB5eXBhcnNlLiAgVGhlbiwKKyMgeXlwYXJzZSB3b3VsZCBpbnZva2UgeXllcnJvciB1c2luZyB0aGUgb2xkIGNvbnRlbnRzIG9mIHl5bXNnLgorCitBVF9TRVRVUChbWyVlcnJvci12ZXJib3NlIG92ZXJmbG93XV0pCitBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMKK0FUX0RBVEFfR1JBTU1BUihbaW5wdXQueV0sCitbWyVjb2RlIHsKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIF1BVF9ZWUVSUk9SX0RFQ0xBUkVbCisgIF1BVF9ZWUxFWF9ERUNMQVJFWworCisgIC8qIFRoaXMgcHJldmVudHMgdGhpcyB0ZXN0IGNhc2UgZnJvbSBoYXZpbmcgdG8gaW5kdWNlIGVycm9yIG1lc3NhZ2VzCisgICAgIGxhcmdlIGVub3VnaCB0byBvdmVyZmxvdyBzaXplX3QuICAqLworICAjZGVmaW5lIFlZU0laRV9UIHVuc2lnbmVkIGNoYXIKKworICAvKiBCcmluZyBpbiBtYWxsb2MgYW5kIHNldCBFWElUX1NVQ0NFU1Mgc28geWFjYy5jIGRvZXNuJ3QgdHJ5IHRvCisgICAgIHByb3ZpZGUgYSBtYWxsb2MgcHJvdG90eXBlIHVzaW5nIG91ciBZWVNJWkVfVC4gICovCisgICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAgI2lmbmRlZiBFWElUX1NVQ0NFU1MKKyAgIyBkZWZpbmUgRVhJVF9TVUNDRVNTIDAKKyAgI2VuZGlmCisKKyAgLyogTWF4IGRlcHRoIGlzIHVzdWFsbHkgbXVjaCBzbWFsbGVyIHRoYW4gWVlTVEFDS19BTExPQ19NQVhJTVVNLCBhbmQKKyAgICAgd2UgZG9uJ3Qgd2FudCBnY2MgdG8gd2FybiBldmVyeXdoZXJlIHRoaXMgY29uc3RhbnQgd291bGQgYmUgdG9vIGJpZworICAgICB0byBtYWtlIHNlbnNlIGZvciBvdXIgWVlTSVpFX1QuICAqLworICAjZGVmaW5lIFlZTUFYREVQVEggMTAwCit9CisKKyVlcnJvci12ZXJib3NlCisKKyUlCisKK3N0YXJ0OiBzeW50YXhfZXJyb3IxIGNoZWNrIHN5bnRheF9lcnJvcjIgOworCisvLyBJbmR1Y2UgYSBzeW50YXggZXJyb3IgbWVzc2FnZSB3aG9zZSB0b3RhbCBsZW5ndGggY2F1c2VzIHl5bXNnIGluCisvLyB5eXBhcnNlIHRvIGJlIHJlYWxsb2NhdGVkIHRvIHNpemUgWVlTVEFDS19BTExPQ19NQVhJTVVNLCB3aGljaAorLy8gc2hvdWxkIGJlIDI1NS4gIEVhY2ggdG9rZW4gaGVyZSBpcyA2NCBieXRlcy4KK3N5bnRheF9lcnJvcjE6CisgICIxMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OTMxMjM0NTY3ODk0MTIzNDU2Nzg5NTEyMzQ1Njc4OTYxMjNBIgorfCAiMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkzMTIzNDU2Nzg5NDEyMzQ1Njc4OTUxMjM0NTY3ODk2MTIzQiIKK3wgIjEyMzQ1Njc4OTExMjM0NTY3ODkyMTIzNDU2Nzg5MzEyMzQ1Njc4OTQxMjM0NTY3ODk1MTIzNDU2Nzg5NjEyM0MiCit8IGVycm9yICdhJyAnYicgJ2MnCis7CisKK2NoZWNrOgoreworICBpZiAoeXltc2dfYWxsb2MgIT0gWVlTVEFDS19BTExPQ19NQVhJTVVNCisgICAgICB8fCBZWVNUQUNLX0FMTE9DX01BWElNVU0gIT0gWVlTSVpFX01BWElNVU0KKyAgICAgIHx8IFlZU0laRV9NQVhJTVVNICE9IDI1NSkKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsCisgICAgICAgICAgICAgICAiVGhlIGFzc3VtcHRpb25zIG9mIHRoaXMgdGVzdCBncm91cCBhcmUgbm8gbG9uZ2VyXG4iCisgICAgICAgICAgICAgICAidmFsaWQsIHNvIGl0IG1heSBubyBsb25nZXIgY2F0Y2ggdGhlIGVycm9yIGl0IHdhc1xuIgorICAgICAgICAgICAgICAgImRlc2lnbmVkIHRvIGNhdGNoLiAgU3BlY2lmaWNhbGx5LCB0aGUgZm9sbG93aW5nXG4iCisgICAgICAgICAgICAgICAidmFsdWVzIHNob3VsZCBhbGwgYmUgMjU1OlxuXG4iKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgeXltc2dfYWxsb2MgPSAlZFxuIiwgeXltc2dfYWxsb2MpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICBZWVNUQUNLX0FMTE9DX01BWElNVU0gPSAlZFxuIiwKKyAgICAgICAgICAgICAgIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSk7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICIgIFlZU0laRV9NQVhJTVVNID0gJWRcbiIsIFlZU0laRV9NQVhJTVVNKTsKKyAgICAgIFlZQUJPUlQ7CisgICAgfQorfQorOworCisvLyBOb3cgb3ZlcmZsb3cuCitzeW50YXhfZXJyb3IyOgorICAiMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkzMTIzNDU2Nzg5NDEyMzQ1Njc4OTUxMjM0NTY3ODk2MTIzQSIKK3wgIjEyMzQ1Njc4OTExMjM0NTY3ODkyMTIzNDU2Nzg5MzEyMzQ1Njc4OTQxMjM0NTY3ODk1MTIzNDU2Nzg5NjEyM0IiCit8ICIxMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OTMxMjM0NTY3ODk0MTIzNDU2Nzg5NTEyMzQ1Njc4OTYxMjNDIgorfCAiMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkzMTIzNDU2Nzg5NDEyMzQ1Njc4OTUxMjM0NTY3ODk2MTIzRCIKK3wgIjEyMzQ1Njc4OTExMjM0NTY3ODkyMTIzNDU2Nzg5MzEyMzQ1Njc4OTQxMjM0NTY3ODk1MTIzNDU2Nzg5NjEyM0UiCis7CisKKyUlCisKK11BVF9ZWUVSUk9SX0RFRklORVsKKy8qIEluZHVjZSB0d28gc3ludGF4IGVycm9yIG1lc3NhZ2VzICh3aGljaCByZXF1aXJlcyBmdWxsIGVycm9yCisgICByZWNvdmVyeSBieSBzaGlmdGluZyAzIHRva2VucykuICAqLworXUFUX1lZTEVYX0RFRklORShbImFiYyJdKVsKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgLyogUHVzaCBwYXJzZXJzIHRocm93IGF3YXkgdGhlIG1lc3NhZ2UgYnVmZmVyIGJldHdlZW4gdG9rZW5zLCBzbyBza2lwCisgICAgIHRoaXMgdGVzdCB1bmRlciBtYWludGFpbmVyLXB1c2gtY2hlY2suICAqLworICBpZiAoWVlQVVNIKQorICAgIHJldHVybiA3NzsKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CitdXSkKKworQVRfQklTT05fQ0hFQ0soW1stbyBpbnB1dC5jIGlucHV0LnldXSkKKworIyBnY2Mgd2FybnMgYWJvdXQgdGF1dG9sb2dpZXMgYW5kIGZhbGxhY2llcyBpbnZvbHZpbmcgY29tcGFyaXNvbnMgZm9yCisjIHVuc2lnbmVkIGNoYXIuICBIb3dldmVyLCBpdCBkb2Vzbid0IHByb2R1Y2UgdGhlc2Ugc2FtZSB3YXJuaW5ncyBmb3IKKyMgc2l6ZV90IGFuZCBtYW55IG90aGVyIHR5cGVzIHdoZW4gdGhlIHdhcm5pbmdzIHdvdWxkIHNlZW0gdG8gbWFrZSBqdXN0CisjIGFzIG11Y2ggc2Vuc2UuICBXZSBpZ25vcmUgdGhlIHdhcm5pbmdzLgorW0NGTEFHUz0iJE5PX1dFUlJPUl9DRkxBR1MiXQorQVRfQ09NUElMRShbW2lucHV0XV0pCisKK0FUX1BBUlNFUl9DSEVDSyhbWy4vaW5wdXRdXSwgW1syXV0sIFtdLAorW1tzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ2EnLCBleHBlY3RpbmcgMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkzMTIzNDU2Nzg5NDEyMzQ1Njc4OTUxMjM0NTY3ODk2MTIzQSBvciAxMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OTMxMjM0NTY3ODk0MTIzNDU2Nzg5NTEyMzQ1Njc4OTYxMjNCIG9yIDEyMzQ1Njc4OTExMjM0NTY3ODkyMTIzNDU2Nzg5MzEyMzQ1Njc4OTQxMjM0NTY3ODk1MTIzNDU2Nzg5NjEyM0MKK3N5bnRheCBlcnJvcgorbWVtb3J5IGV4aGF1c3RlZAorXV0pCitBVF9CSVNPTl9PUFRJT05fUE9QREVGUworQVRfQ0xFQU5VUAorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBMQUM6IEV4cGxvcmF0b3J5IHN0YWNrLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitBVF9TRVRVUChbW0xBQzogRXhwbG9yYXRvcnkgc3RhY2tdXSkKKworbTRfcHVzaGRlZihbQVRfTEFDX0NIRUNLXSwgWworCitBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMoWyQxXSkKKworQVRfREFUQV9HUkFNTUFSKFtpbnB1dC55XSwKK1tbJWNvZGUgeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgXUFUX1lZRVJST1JfREVDTEFSRVsKKyAgaW50IHl5bGV4IChdQVRfUFVSRV9JRihbW1lZU1RZUEUgKl1dLCBbW3ZvaWRdXSlbKTsKK30KKworXSQxWworJWVycm9yLXZlcmJvc2UKKyV0b2tlbiAnYycKKworJSUKKworLy8gZGVmYXVsdCByZWR1Y3Rpb25zIGluIGluY29uc2lzdGVudCBzdGF0ZXMKKy8vIHYgICB2IHYgICB2IHYgdiB2ICAgdiB2IHYgdiB2IHYgdgorUzogQSBCIEEgQSBCIEEgQSBBIEEgQiBBIEEgQSBBIEEgQSBBIEIgQyBDIEEgQSBBIEEgQSBBIEEgQSBBIEEgQSBBIEIgOworLy8gICAgICAgXiAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLy8gTEFDIHJlYWxsb2NzCisKK0E6ICdhJyB8IC8qZW1wdHkqLyB7IHByaW50ZiAoImluY29uc2lzdGVudCBkZWZhdWx0IHJlZHVjdGlvblxuIik7IH0gOworQjogJ2InIDsKK0M6IC8qZW1wdHkqLyB7IHByaW50ZiAoImNvbnNpc3RlbnQgZGVmYXVsdCByZWR1Y3Rpb25cbiIpOyB9IDsKKworJSUKK11BVF9ZWUVSUk9SX0RFRklORVsKK2ludAoreXlsZXggKF1BVF9QVVJFX0lGKFtbWVlTVFlQRSAqdl1dLCBbW3ZvaWRdXSlbKQoreworICBzdGF0aWMgY2hhciBjb25zdCAqaW5wdXQgPSAiYmJiYmMiO11BVF9QVVJFX0lGKFtbCisgICp2ID0gMDtdXSlbCisgIHJldHVybiAqaW5wdXQrKzsKK30KKworaW50CittYWluICh2b2lkKQoreworICB5eWRlYnVnID0gMTsKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CitdXSkKKworQVRfQklTT05fQ0hFQ0soW1stRHBhcnNlLmxhYz1mdWxsIC1EcGFyc2UubGFjLmVzLWNhcGFjaXR5LWluaXRpYWw9MSBcCisgICAgICAgICAgICAgICAgIC1EcGFyc2UubGFjLm1lbW9yeS10cmFjZT1mdWxsIFwKKyAgICAgICAgICAgICAgICAgLXQgLW8gaW5wdXQuYyBpbnB1dC55XV0sIFtbMF1dLCBbXSwKK1tbaW5wdXQueTogY29uZmxpY3RzOiAyMSBzaGlmdC9yZWR1Y2UKK11dKQorQVRfQ09NUElMRShbW2lucHV0XV0pCitBVF9QQVJTRVJfQ0hFQ0soW1suL2lucHV0ID4gc3Rkb3V0LnR4dCAyPiBzdGRlcnIudHh0XV0sIFtbMV1dKQorCisjIE1ha2Ugc3VyZSBzeW50YXggZXJyb3IgZG9lc24ndCBmb3JnZXQgdGhhdCAnYScgaXMgZXhwZWN0ZWQuICBJdCB3b3VsZAorIyBiZSBmb3Jnb3R0ZW4gd2l0aG91dCBsb29rYWhlYWQgY29ycmVjdGlvbi4KK0FUX0NIRUNLKFtbZ3JlcCAnc3ludGF4IGVycm9yLCcgc3RkZXJyLnR4dF1dLCBbWzBdXSwKK1tbc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICdjJywgZXhwZWN0aW5nICdhJyBvciAnYicKK11dKQorCisjIENoZWNrIG51bWJlciBvZiBkZWZhdWx0IHJlZHVjdGlvbnMgaW4gaW5jb25zaXN0ZW50IHN0YXRlcyB0byBiZSBzdXJlCisjIHN5bnRheCBlcnJvciBpcyBkZXRlY3RlZCBiZWZvcmUgdW5uZWNlc3NhcnkgcmVkdWN0aW9ucyBhcmUgcGVyZm9ybWVkLgorQVRfQ0hFQ0soW1skUEVSTCAtMDc3NyAtbmUgJ3ByaW50IHMvaW5jb25zaXN0ZW50IGRlZmF1bHQgcmVkdWN0aW9uLy9nOycgXAorICAgICAgICAgICA8IHN0ZG91dC50eHQgfHwgZXhpdCA3N11dLCBbWzBdXSwgW1sxNF1dKQorCisjIENoZWNrIG51bWJlciBvZiBkZWZhdWx0IHJlZHVjdGlvbnMgaW4gY29uc2lzdGVudCBzdGF0ZXMgdG8gYmUgc3VyZQorIyBpdCBpcyBwZXJmb3JtZWQgYmVmb3JlIHRoZSBzeW50YXggZXJyb3IgaXMgZGV0ZWN0ZWQuCitBVF9DSEVDSyhbWyRQRVJMIC0wNzc3IC1uZSAncHJpbnQgcy9cYmNvbnNpc3RlbnQgZGVmYXVsdCByZWR1Y3Rpb24vL2c7JyBcCisgICAgICAgICAgIDwgc3Rkb3V0LnR4dCB8fCBleGl0IDc3XV0sIFtbMF1dLCBbWzJdXSkKKworIyBDaGVjayBudW1iZXIgb2YgcmVhbGxvY3MgdG8gYmUgc3VyZSByZWFsbG9jYXRlZCBtZW1vcnkgaXNuJ3Qgc29tZWhvdworIyBsb3N0IGJldHdlZW4gTEFDIGludm9jYXRpb25zLgorQVRfQ0hFQ0soW1skUEVSTCAtMDc3NyAtbmUgJ3ByaW50IHMvXChyZWFsbG9jLy9nOycgPCBzdGRlcnIudHh0IFwKKyAgICAgICAgICAgfHwgZXhpdCA3N11dLCBbWzBdXSwgW1szXV0pCisKK0FUX0JJU09OX09QVElPTl9QT1BERUZTCitdKQorCitBVF9MQUNfQ0hFQ0soW1slZGVmaW5lIGFwaS5wdXNoLXB1bGwgcHVsbF1dKQorQVRfTEFDX0NIRUNLKFtbJWRlZmluZSBhcGkucHVzaC1wdWxsIHB1bGwgJWRlZmluZSBhcGkucHVyZV1dKQorQVRfTEFDX0NIRUNLKFtbJWRlZmluZSBhcGkucHVzaC1wdWxsIGJvdGhdXSkKK0FUX0xBQ19DSEVDSyhbWyVkZWZpbmUgYXBpLnB1c2gtcHVsbCBib3RoICVkZWZpbmUgYXBpLnB1cmVdXSkKKworbTRfcG9wZGVmKFtBVF9MQUNfQ0hFQ0tdKQorCitBVF9DTEVBTlVQCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIExBQzogTWVtb3J5IGV4aGF1c3Rpb24uICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1NFVFVQKFtbTEFDOiBNZW1vcnkgZXhoYXVzdGlvbl1dKQorCittNF9wdXNoZGVmKFtBVF9MQUNfQ0hFQ0tdLAorW0FUX0JJU09OX09QVElPTl9QVVNIREVGUworQVRfREFUQV9HUkFNTUFSKFtpbnB1dC55XSwKK1tbJWNvZGUgeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgXUFUX1lZRVJST1JfREVDTEFSRVsKKyAgXUFUX1lZTEVYX0RFQ0xBUkVbCisgICNkZWZpbmUgWVlNQVhERVBUSCA4Cit9CisKKyVlcnJvci12ZXJib3NlCisKKyUlCisKK1M6IEEgQSBBIEEgQSBBIEEgQSBBIDsKK0E6IC8qZW1wdHkqLyB8ICdhJyA7CisKKyUlCitdQVRfWVlFUlJPUl9ERUZJTkVbCitdQVRfWVlMRVhfREVGSU5FKFsiJDEiXSlbCitpbnQKK21haW4gKHZvaWQpCit7CisgIHl5ZGVidWcgPSAxOworICByZXR1cm4geXlwYXJzZSAoKTsKK30KK11dKQorCitBVF9CSVNPTl9DSEVDSyhbWy1EcGFyc2UubGFjPWZ1bGwgLURwYXJzZS5sYWMuZXMtY2FwYWNpdHktaW5pdGlhbD0xIFwKKyAgICAgICAgICAgICAgICAgLXQgLW8gaW5wdXQuYyBpbnB1dC55XV0sIFtbMF1dLCBbXSwKK1tbaW5wdXQueTogY29uZmxpY3RzOiA4IHNoaWZ0L3JlZHVjZQorXV0pCitBVF9DT01QSUxFKFtbaW5wdXRdXSkKK0FUX0JJU09OX09QVElPTl9QT1BERUZTCitdKQorCisjIENoZWNrIGZvciBtZW1vcnkgZXhoYXVzdGlvbiBkdXJpbmcgcGFyc2luZy4KK0FUX0xBQ19DSEVDSyhbXSkKK0FUX1BBUlNFUl9DSEVDSyhbWy4vaW5wdXRdXSwgW1syXV0sIFtdLAorW1tTdGFydGluZyBwYXJzZQorRW50ZXJpbmcgc3RhdGUgMAorUmVhZGluZyBhIHRva2VuOiBOb3cgYXQgZW5kIG9mIGlucHV0LgorTEFDOiBpbml0aWFsIGNvbnRleHQgZXN0YWJsaXNoZWQgZm9yICRlbmQKK0xBQzogY2hlY2tpbmcgbG9va2FoZWFkICRlbmQ6IFIyIEczIFIyIEc1IFIyIEc2IFIyIEc3IFIyIEc4IFIyIEc5IFIyIEcxMCBSMiBHMTEgUjIgKG1heCBzaXplIGV4Y2VlZGVkKQorbWVtb3J5IGV4aGF1c3RlZAorQ2xlYW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQgdG9rZW4gJGVuZCAoKQorU3RhY2sgbm93IDAKK11dKQorCisjIEluZHVjZSBhbiBpbW1lZGlhdGUgc3ludGF4IGVycm9yIHdpdGggYW4gdW5kZWZpbmVkIHRva2VuLCBhbmQgY2hlY2sKKyMgZm9yIG1lbW9yeSBleGhhdXN0aW9uIHdoaWxlIGJ1aWxkaW5nIHN5bnRheCBlcnJvciBtZXNzYWdlLgorQVRfTEFDX0NIRUNLKFt6XSwgW1swXV0pCitBVF9QQVJTRVJfQ0hFQ0soW1suL2lucHV0XV0sIFtbMl1dLCBbXSwKK1tbU3RhcnRpbmcgcGFyc2UKK0VudGVyaW5nIHN0YXRlIDAKK1JlYWRpbmcgYSB0b2tlbjogTmV4dCB0b2tlbiBpcyB0b2tlbiAkdW5kZWZpbmVkICgpCitMQUM6IGluaXRpYWwgY29udGV4dCBlc3RhYmxpc2hlZCBmb3IgJHVuZGVmaW5lZAorTEFDOiBjaGVja2luZyBsb29rYWhlYWQgJHVuZGVmaW5lZDogQWx3YXlzIEVycgorQ29uc3RydWN0aW5nIHN5bnRheCBlcnJvciBtZXNzYWdlCitMQUM6IGNoZWNraW5nIGxvb2thaGVhZCAkZW5kOiBSMiBHMyBSMiBHNSBSMiBHNiBSMiBHNyBSMiBHOCBSMiBHOSBSMiBHMTAgUjIgRzExIFIyIChtYXggc2l6ZSBleGNlZWRlZCkKK3N5bnRheCBlcnJvcgorbWVtb3J5IGV4aGF1c3RlZAorQ2xlYW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQgdG9rZW4gJHVuZGVmaW5lZCAoKQorU3RhY2sgbm93IDAKK11dKQorCittNF9wb3BkZWYoW0FUX0xBQ19DSEVDS10pCisKK0FUX0NMRUFOVVAKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBMZXggYW5kIHBhcnNlIHBhcmFtcy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQVRfVEVTVChTS0VMRVRPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgdGhhdCB0aGUgaWRlbnRpZmllciBvZiB0aGUgcGFyYW1zIGlzIHByb3Blcmx5IGZldGNoZWQKKyMgZXZlbiB3aGVuIHRoZXJlIGFyZSB0cmFpbGluZyBibGFua3MuCisKK200X3B1c2hkZWYoW0FUX1RFU1RdLAorW0FUX1NFVFVQKFtbTGV4IGFuZCBwYXJzZSBwYXJhbXM6ICQxXV0pCisKK0FUX0JJU09OX09QVElPTl9QVVNIREVGUyhbJWxvY2F0aW9ucyAlc2tlbGV0b24gIiQxIiAlcGFyc2UtcGFyYW0geyBpbnQgeCB9ICVwYXJzZS1wYXJhbSB7IGludCB5IH1dKQorCisjIyBGSVhNRTogSW1wcm92ZSBwYXJzaW5nIG9mIHBhcnNlLXBhcmFtIGFuZCB1c2UgdGhlIGdlbmVyYXRlZAorIyMgeXllcnJvci4KK0FUX0RBVEFfR1JBTU1BUihbaW5wdXQueV0sCitbWyVkZWZpbmVzCislbG9jYXRpb25zCislc2tlbGV0b24gIiQxIgorJXVuaW9uIHsgaW50IGl2YWw7IH0KKyVwYXJzZS1wYXJhbSB7IGludCB4IH0KKy8vIFNwYWNlcywgdGFicywgYW5kIG5ldyBsaW5lcy4KKyVwYXJzZS1wYXJhbSB7IEAmdEAKKwkgaW50IHkJIEAmdEAKKyAgICAgICAgIEAmdEAKKyBAJnRACit9CisKKyV7CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworICBdQVRfWVlFUlJPUl9ERUNMQVJFWworICBdQVRfWVlMRVhfREVDTEFSRVsKKyV9CisKKyUlCitleHA6ICdhJyB7IGZwcmludGYgKHN0ZG91dCwgIng6ICVkLCB5OiAlZFxuIiwgeCwgeSk7IH07CislJQorXUFUX1lZRVJST1JfREVGSU5FWworXUFUX1lZTEVYX0RFRklORShbImEiXSlbCisKK11BVF9TS0VMX0NDX0lGKAorW2ludAoreXlwYXJzZSAoaW50IHgsIGludCB5KQoreworICB5eTo6cGFyc2VyIHBhcnNlcih4LCB5KTsKKyAgcmV0dXJuIHBhcnNlci5wYXJzZSAoKTsKK30KK10pWworCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiAhIXl5cGFyc2UoMSwgMik7Cit9CitdXSkKKworQVRfRlVMTF9DT01QSUxFKFtpbnB1dF0pCitBVF9QQVJTRVJfQ0hFQ0soWy4vaW5wdXRdLCAwLCBbW3g6IDEsIHk6IDIKK11dKQorQVRfQklTT05fT1BUSU9OX1BPUERFRlMKKworQVRfQ0xFQU5VUAorXSkKKworIyMgRklYTUU6IHRlc3QgSmF2YSwgYW5kIGl0ZXJhdGUgb3ZlciBza2VsZXRvbnMuCitBVF9URVNUKFt5YWNjLmNdKQorQVRfVEVTVChbZ2xyLmNdKQorQVRfVEVTVChbbGFscjEuY2NdKQorQVRfVEVTVChbZ2xyLmNjXSkKKworbTRfcG9wZGVmKFtBVF9URVNUXSkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NldHMuYXQgYi90ZXN0cy9zZXRzLmF0CmluZGV4IGE3MzEzMTUuLjRjYmRmZDYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3NldHMuYXQKKysrIGIvdGVzdHMvc2V0cy5hdApAQCAtMSwyMCArMSwyMCBAQAogIyBFeGVyY2lzaW5nIEJpc29uIEdyYW1tYXIgU2V0cy4gICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG90ZXN0IC0qLQotIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIDIwMDUsIDIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0jIGFueSBsYXRlciB2ZXJzaW9uLgotCisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCiAjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KKyMKICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotIyAwMjExMC0xMzAxLCBVU0EuCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCiAKICMgQVRfRVhUUkFDVF9TRVRTKElOUFVULCBPVVRQVVQpCkBAIC03OCw3ICs3OCw3IEBACiBlOiAnZScgfCAvKiBOb3RoaW5nICovOwogXV0pCiAKLUFUX0NIRUNLKFtbYmlzb24gLS10cmFjZT1zZXRzIGlucHV0LnldXSwgW10sIFtdLCBbc3RkZXJyXSkKK0FUX0JJU09OX0NIRUNLKFtbLS10cmFjZT1zZXRzIGlucHV0LnldXSwgW10sIFtdLCBbc3RkZXJyXSkKIEFUX0VYVFJBQ1RfU0VUUyhbc3RkZXJyXSwgW3NldHNdKQogQVRfQ0hFQ0soW1tjYXQgc2V0c11dLCBbXSwKIFtbREVSSVZFUwpAQCAtMTYyLDcgKzE2Miw3IEBACiBoOiAnaCc7CiBdXSkKIAotQVRfQ0hFQ0soW1tiaXNvbiAtLXRyYWNlPXNldHMgaW5wdXQueV1dLCBbXSwgW10sIFtzdGRlcnJdKQorQVRfQklTT05fQ0hFQ0soW1stLXRyYWNlPXNldHMgaW5wdXQueV1dLCBbXSwgW10sIFtzdGRlcnJdKQogCiBBVF9DSEVDSyhbW3NlZCAtbiAncy9bCSBdKiQvLzsvXlJUQzogRmlyc3RzIE91dHB1dCBCRUdJTi8sL15SVEM6IEZpcnN0cyBPdXRwdXQgRU5EL3AnIHN0ZGVycl1dLCBbXSwKIFtbUlRDOiBGaXJzdHMgT3V0cHV0IEJFR0lOCkBAIC0yMDgsNyArMjA4LDcgQEAKICA7CiBdXSkKIAotQVRfQ0hFQ0soW1tiaXNvbiAtLXRyYWNlPXNldHMgaW5wdXQueV1dLCBbXSwgW10sIFtzdGRlcnJdKQorQVRfQklTT05fQ0hFQ0soW1stLXRyYWNlPXNldHMgaW5wdXQueV1dLCBbXSwgW10sIFtzdGRlcnJdKQogQVRfRVhUUkFDVF9TRVRTKFtzdGRlcnJdLCBbc2V0c10pCiBBVF9DSEVDSyhbW2NhdCBzZXRzXV0sIFtdLAogW1tERVJJVkVTCkBAIC0yNzgsNyArMjc4LDcgQEAKIDsKIF1dKQogCi1BVF9DSEVDSyhbW2Jpc29uIC12IC1vIGlucHV0LmMgaW5wdXQueV1dKQorQVRfQklTT05fQ0hFQ0soW1stdiAtbyBpbnB1dC5jIGlucHV0LnldXSkKIAogIyBHZXQgdGhlIGZpbmFsIHN0YXRlIGluIHRoZSBwYXJzZXIuCiBBVF9DSEVDSyhbW3NlZCAtbiAncy8uKmRlZmluZSBZWUZJTkFMICpcKFswLTldWzAtOV0qXCkvZmluYWwgc3RhdGUgXDEvcCcgaW5wdXQuY11dLApAQCAtMjg3LDcgKzI4Nyw3IEBACiAKICMgR2V0IHRoZSBmaW5hbCBzdGF0ZSBpbiB0aGUgcmVwb3J0LCBmcm9tIHRoZSAiYWNjZXB0IiBhY3Rpb24uLgogQVRfQ0hFQ0soW3NlZCAtbiAnCi0gICAgICAgICAgIC9ec3RhdGUgXCguKlwpL3sKKyAgICAgICAgICAgL15TdGF0ZSBcKC4qXCkvewogCSAgICAgcy8vZmluYWwgc3RhdGUgXDEvCiAJICAgICB4CiAJICAgfQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2tlbGV0b25zLmF0IGIvdGVzdHMvc2tlbGV0b25zLmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNDk2YzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9za2VsZXRvbnMuYXQKQEAgLTAsMCArMSwzMzAgQEAKKyMgQ2hlY2tpbmcgc2tlbGV0b24gc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b3Rlc3QgLSotCisKKyMgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK0FUX0JBTk5FUihbW1NrZWxldG9uIFN1cHBvcnQuXV0pCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgUmVsYXRpdmUgc2tlbGV0b24gZmlsZSBuYW1lcy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworQVRfU0VUVVAoW1tSZWxhdGl2ZSBza2VsZXRvbiBmaWxlIG5hbWVzXV0pCisKK0FUX0NIRUNLKFtbbWtkaXIgdG1wXV0pCisKK0FUX0RBVEEoW1t0bXAvc2tlbC5jXV0sCitbW200QCZ0QF9kaXZlcnRfcHVzaCgwKWRAJnRAbmwKK0BvdXRwdXQoYjRfcGFyc2VyX2ZpbGVfbmFtZUApZEAmdEBubAorYjRfcGVyY2VudF9kZWZpbmVfZ2V0KFtbdGVzdF1dKQorbTRAJnRAX2RpdmVydF9wb3AoMCkKK11dKQorCitBVF9EQVRBKFtbc2tlbC5jXV0sCitbW200QCZ0QF9kaXZlcnRfcHVzaCgwKWRAJnRAbmwKK0BvdXRwdXQoYjRfcGFyc2VyX2ZpbGVfbmFtZUApZEAmdEBubAorYjRfcGVyY2VudF9kZWZpbmVfZ2V0KFtbdGVzdF1dKSAtLSBMb2NhbAorbTRAJnRAX2RpdmVydF9wb3AoMCkKK11dKQorCitBVF9EQVRBKFtbdG1wL2lucHV0LWdyYW0ueV1dLAorW1slc2tlbGV0b24gIi4vc2tlbC5jIgorJWRlZmluZSB0ZXN0ICJIZWxsbyBXb3JsZCIKKyUlCitzdGFydDogOworXV0pCisKK0FUX0RBVEEoW1tpbnB1dC1ncmFtLnldXSwKK1tbJXNrZWxldG9uICIuL3NrZWwuYyIKKyVkZWZpbmUgdGVzdCAiSGVsbG8gV29ybGQiCislJQorc3RhcnQ6IDsKK11dKQorCitBVF9EQVRBKFtbdG1wL2lucHV0LWNtZC1saW5lLnldXSwKK1tbJWRlZmluZSB0ZXN0ICJIZWxsbyBXb3JsZCIKKyUlCitzdGFydDogOworXV0pCisKK0FUX0JJU09OX0NIRUNLKFtbdG1wL2lucHV0LWdyYW0ueV1dKQorQVRfQ0hFQ0soW1tjYXQgaW5wdXQtZ3JhbS50YWIuY11dLCBbWzBdXSwKK1tbSGVsbG8gV29ybGQKK11dKQorCitBVF9CSVNPTl9DSEVDSyhbW2lucHV0LWdyYW0ueV1dKQorQVRfQ0hFQ0soW1tjYXQgaW5wdXQtZ3JhbS50YWIuY11dLCBbWzBdXSwKK1tbSGVsbG8gV29ybGQgLS0gTG9jYWwKK11dKQorCitBVF9CSVNPTl9DSEVDSyhbWy0tc2tlbGV0b249dG1wL3NrZWwuYyB0bXAvaW5wdXQtY21kLWxpbmUueV1dKQorQVRfQ0hFQ0soW1tjYXQgaW5wdXQtY21kLWxpbmUudGFiLmNdXSwgW1swXV0sCitbW0hlbGxvIFdvcmxkCitdXSkKKworQVRfQ0xFQU5VUAorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEluc3RhbGxlZCBza2VsZXRvbiBmaWxlIG5hbWVzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworQVRfU0VUVVAoW1tJbnN0YWxsZWQgc2tlbGV0b24gZmlsZSBuYW1lc11dKQorCitBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMKK200X3B1c2hkZWYoW0FUX0dSQU1dLAorW1sleworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgXUFUX1lZRVJST1JfREVDTEFSRVsKKyAgaW50IHl5bGV4ICh2b2lkKTsKKyV9CisKKyVlcnJvci12ZXJib3NlCisldG9rZW4gJ2EnCisKKyUlCisKK3N0YXJ0OiA7CisKKyUlCisKK11BVF9ZWUVSUk9SX0RFRklORVsKK2ludAoreXlsZXggKHZvaWQpCit7CisgIHJldHVybiAnYSc7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CitdXSkKKworQVRfREFUQV9HUkFNTUFSKFtbaW5wdXQtY21kLWxpbmUueV1dLAorW0FUX0dSQU1dKQorCitBVF9EQVRBX0dSQU1NQVIoW1tpbnB1dC1ncmFtLnldXSwKK1tbJXNrZWxldG9uICJ5YWNjLmMiXQorQVRfR1JBTV0pCisKK0FUX0JJU09OX0NIRUNLKFtbLS1za2VsZXRvbj15YWNjLmMgLW8gaW5wdXQtY21kLWxpbmUuYyBpbnB1dC1jbWQtbGluZS55XV0pCitBVF9DT01QSUxFKFtbaW5wdXQtY21kLWxpbmVdXSkKK0FUX1BBUlNFUl9DSEVDSyhbWy4vaW5wdXQtY21kLWxpbmVdXSwgW1sxXV0sIFtdLAorW1tzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ2EnLCBleHBlY3RpbmcgJGVuZAorXV0pCisKK0FUX0JJU09OX0NIRUNLKFtbLW8gaW5wdXQtZ3JhbS5jIGlucHV0LWdyYW0ueV1dKQorQVRfQ09NUElMRShbW2lucHV0LWdyYW1dXSkKK0FUX1BBUlNFUl9DSEVDSyhbWy4vaW5wdXQtZ3JhbV1dLCBbWzFdXSwgW10sCitbW3N5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnYScsIGV4cGVjdGluZyAkZW5kCitdXSkKKworbTRfcG9wZGVmKFtBVF9HUkFNXSkKKworQVRfQklTT05fT1BUSU9OX1BPUERFRlMKK0FUX0NMRUFOVVAKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjICVkZWZpbmUgQm9vbGVhbiB2YXJpYWJsZXM6IGludmFsaWQgc2tlbGV0b24gZGVmYXVsdHMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1NFVFVQKFtbJWRlZmluZSBCb29sZWFuIHZhcmlhYmxlczogaW52YWxpZCBza2VsZXRvbiBkZWZhdWx0c11dKQorCitBVF9EQVRBKFtbc2tlbC5jXV0sCitbW2I0X3BlcmNlbnRfZGVmaW5lX2RlZmF1bHQoW1tmb29dXSwgW1tib2d1cyB2YWx1ZV1dKQorYjRfcGVyY2VudF9kZWZpbmVfZmxhZ19pZihbW2Zvb11dKQorXV0pCisKK0FUX0RBVEEoW1tpbnB1dC55XV0sCitbWyVza2VsZXRvbiAiLi9za2VsLmMiCislJQorc3RhcnQ6IDsKK11dKQorCitBVF9CSVNPTl9DSEVDSyhbW2lucHV0LnldXSwgW1sxXV0sIFtbXV0sCitbWzxza2VsZXRvbiBkZWZhdWx0IHZhbHVlPjogZXJyb3I6IGludmFsaWQgdmFsdWUgZm9yICVkZWZpbmUgQm9vbGVhbiB2YXJpYWJsZSAnZm9vJworXV0pCisKK0FUX0NMRUFOVVAKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIENvbXBsYWluaW5nIGR1cmluZyBtYWNybyBhcmd1bWVudCBleHBhbnNpb24uICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1NFVFVQKFtbQ29tcGxhaW5pbmcgZHVyaW5nIG1hY3JvIGFyZ3VtZW50IGV4cGFuc2lvbl1dKQorCitBVF9EQVRBKFtbc2tlbDEuY11dLAorW1ttNEAmdEBfZGVmaW5lKFtmb293XSwgW2I0X3dhcm4oW1tmb293IGZ1YmFyXV0pXSkKK200QCZ0QF9kZWZpbmUoW2Zvb3dhdF0sIFtiNF93YXJuX2F0KFtbZm9vdy55OjIuM11dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tmb293Lnk6NS40XV0sIFtbZm9vd2F0IGZ1YmFyXV0pXSkKK200QCZ0QF9kZWZpbmUoW2Zvb2NdLCBbYjRfY29tcGxhaW4oW1tmb29jIGZ1YmFyXV0pXSkKK200QCZ0QF9kZWZpbmUoW2Zvb2NhdF0sIFtiNF9jb21wbGFpbl9hdChbW2Zvb2MueToxLjFdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2Zvb2MueToxMC42XV0sIFtbZm9vY2F0IGZ1YmFyXV0pXSkKK200QCZ0QF9kZWZpbmUoW2Zvb2ZdLCBbYjRfZmF0YWwoW1tmb29mIGZ1YmFyXV0pXSkKK200QCZ0QF9pZihmb293LCBbMV0sIFt5ZXNdKQorbTRAJnRAX2lmKGZvb3dhdCwgWzFdLCBbeWVzXSkKK200QCZ0QF9pZihmb29jLCBbMV0sIFt5ZXNdKQorbTRAJnRAX2lmKGZvb2NhdCwgWzFdLCBbeWVzXSkKK200QCZ0QF9pZihmb29mLCBbMV0sIFt5ZXNdKQorXV0pCisKK0FUX0RBVEEoW1tpbnB1dDEueV1dLAorW1slc2tlbGV0b24gIi4vc2tlbDEuYyIKKyUlCitzdGFydDogOworXV0pCisKK0FUX0JJU09OX0NIRUNLKFtbaW5wdXQxLnldXSwgW1sxXV0sIFtbXV0sCitbW2lucHV0MS55OiB3YXJuaW5nOiBmb293IGZ1YmFyCitmb293Lnk6Mi4zLTUuMzogd2FybmluZzogZm9vd2F0IGZ1YmFyCitpbnB1dDEueTogZXJyb3I6IGZvb2MgZnViYXIKK2Zvb2MueToxLjEtMTAuNTogZXJyb3I6IGZvb2NhdCBmdWJhcgoraW5wdXQxLnk6IGZhdGFsIGVycm9yOiBmb29mIGZ1YmFyCitdXSkKKworQVRfREFUQShbW3NrZWwyLmNdXSwKK1tbbTRAJnRAX2RlZmluZShbZm9vZmF0XSwgW2I0X2ZhdGFsX2F0KFtbZm9vZi55OjEyLjExXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2Zvb2YueToxMDAuMTIzXV0sIFtbZm9vZmF0IGZ1YmFyXV0pXSkKK200QCZ0QF9pZihmb29mYXQsIFsxXSwgW3llc10pCitdXSkKKworQVRfREFUQShbW2lucHV0Mi55XV0sCitbWyVza2VsZXRvbiAiLi9za2VsMi5jIgorJSUKK3N0YXJ0OiA7CitdXSkKKworQVRfQklTT05fQ0hFQ0soW1tpbnB1dDIueV1dLCBbWzFdXSwgW1tdXSwKK1tbZm9vZi55OjEyLjExLTEwMC4xMjI6IGZhdGFsIGVycm9yOiBmb29mYXQgZnViYXIKK11dKQorCitBVF9EQVRBKFtbc2tlbDMuY11dLAorW1tiNF9jb21wbGFpbl9hdChiNF9wZXJjZW50X2RlZmluZV9nZXRfbG9jKFtbYm9ndXNdXSksIFtbYmFkIHZhbHVlXV0pCitdXSkKKworQVRfREFUQShbW2lucHV0My55XV0sCitbWyVza2VsZXRvbiAiLi9za2VsMy5jIgorJSUKK3N0YXJ0OiA7CitdXSkKKworQVRfQklTT05fQ0hFQ0soW1tpbnB1dDMueV1dLCBbWzFdXSwgW1tdXSwKK1tbaW5wdXQzLnk6IGZhdGFsIGVycm9yOiBiNF9wZXJjZW50X2RlZmluZV9nZXRfbG9jOiB1bmRlZmluZWQgJWRlZmluZSB2YXJpYWJsZSAnYm9ndXMnCitdXSkKKworQVRfREFUQShbW3NrZWw0LmNdXSwKK1tbYjRfd2Fybl9hdChiNF9wZXJjZW50X2RlZmluZV9nZXRfc3luY2xpbmUoW1tib2d1c11dKSwgW1tiYWQgdmFsdWVdXSkKK11dKQorCitBVF9EQVRBKFtbaW5wdXQ0LnldXSwKK1tbJXNrZWxldG9uICIuL3NrZWw0LmMiCislJQorc3RhcnQ6IDsKK11dKQorCitBVF9CSVNPTl9DSEVDSyhbW2lucHV0NC55XV0sIFtbMV1dLCBbW11dLAorW1tpbnB1dDQueTogZmF0YWwgZXJyb3I6IGI0X3BlcmNlbnRfZGVmaW5lX2dldF9zeW5jbGluZTogdW5kZWZpbmVkICVkZWZpbmUgdmFyaWFibGUgJ2JvZ3VzJworXV0pCisKK0FUX0NMRUFOVVAKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEZhdGFsIGVycm9ycyBtYWtlIE00IGV4aXQgaW1tZWRpYXRlbHkuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1NFVFVQKFtbRmF0YWwgZXJyb3JzIG1ha2UgTTQgZXhpdCBpbW1lZGlhdGVseV1dKQorCitBVF9EQVRBKFtbc2tlbDEuY11dLAorW1tiNF9jb21wbGFpbihbW25vbi1mYXRhbCBlcnJvcl1dKQorYjRfZmF0YWwoW1tNNCBzaG91bGQgZXhpdCBpbW1lZGlhdGVseSBoZXJlXV0pCittNEAmdEBfZmF0YWwoW3RoaXMgc2hvdWxkIG5ldmVyIGJlIGV2YWx1YXRlZF0pCitdXSkKKworQVRfREFUQShbW2lucHV0MS55XV0sCitbWyVza2VsZXRvbiAiLi9za2VsMS5jIgorJSUKK3N0YXJ0OiA7CitdXSkKKworQVRfQklTT05fQ0hFQ0soW1tpbnB1dDEueV1dLCBbWzFdXSwgW1tdXSwKK1tbaW5wdXQxLnk6IGVycm9yOiBub24tZmF0YWwgZXJyb3IKK2lucHV0MS55OiBmYXRhbCBlcnJvcjogTTQgc2hvdWxkIGV4aXQgaW1tZWRpYXRlbHkgaGVyZQorXV0pCisKK0FUX0RBVEEoW1tza2VsMi5jXV0sCitbW2I0X3dhcm4oW1ttb3JuaW5nXV0pCitiNF9mYXRhbF9hdChbW2Zvby55OjEuNV1dLCBbW2Zvby55OjEuN11dLCBbW000IHNob3VsZCBleGl0IGltbWVkaWF0ZWx5IGhlcmVdXSkKK200QCZ0QF9mYXRhbChbdGhpcyBzaG91bGQgbmV2ZXIgYmUgZXZhbHVhdGVkXSkKK11dKQorCitBVF9EQVRBKFtbaW5wdXQyLnldXSwKK1tbJXNrZWxldG9uICIuL3NrZWwyLmMiCislJQorc3RhcnQ6IDsKK11dKQorCitBVF9CSVNPTl9DSEVDSyhbW2lucHV0Mi55XV0sIFtbMV1dLCBbW11dLAorW1tpbnB1dDIueTogd2FybmluZzogbW9ybmluZworZm9vLnk6MS41LTY6IGZhdGFsIGVycm9yOiBNNCBzaG91bGQgZXhpdCBpbW1lZGlhdGVseSBoZXJlCitdXSkKKworQVRfQ0xFQU5VUAorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRmF0YWwgZXJyb3JzIGJ1dCBNNCBjb250aW51ZXMgcHJvZHVjaW5nIG91dHB1dC4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBBdCBvbmUgdGltZSwgaWYgQmlzb24gZW5jb3VudGVyZWQgYSBmYXRhbCBlcnJvciBkdXJpbmcgTTQgcHJvY2Vzc2luZywKKyMgQmlzb24gZmFpbGVkIHRvIGRyYWluIE00J3Mgb3V0cHV0IHBpcGUuICBUaGUgcmVzdWx0IHdhcyBhIFNJR1BJUEUuCisjIE9uIHNvbWUgcGxhdGZvcm1zLCB0aGUgZGVmYXVsdCBkaXNwb3NpdGlvbiBmb3IgU0lHUElQRSBpcyB0ZXJtaW5hdGUsCisjIHdoaWNoIHdhcyBmaW5lLiAgT24gb3RoZXJzLCBpdCdzIGlnbm9yZSwgd2hpY2ggY2F1c2VkIE00IHRvIHJlcG9ydAorIyB0aGUgYnJva2VuIHBpcGUgdG8gdGhlIHVzZXIsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGJvdGhlciB0aGUgdXNlciB3aXRoCisjIHRoYXQuCisKKyMgVGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbiBzb21ld2hlcmUuICBUaGF0IGlzLCBiZWZvcmUgdGhlIGFzc29jaWF0ZWQKKyMgZml4LCBydW5uaW5nIHRoaXMgdGVzdCBncm91cCBtYW55IHRpbWVzIGluIGEgcm93IHdvdWxkIG9jY2FzaW9uYWxseQorIyBwcm9kdWNlIGEgcGFzcyBhbW9uZyBhbGwgdGhlIGZhaWx1cmVzLgorCitBVF9TRVRVUChbW0ZhdGFsIGVycm9ycyBidXQgTTQgY29udGludWVzIHByb2R1Y2luZyBvdXRwdXRdXSkKKworQVRfREFUQShbW2dlbi1za2VsLnBsXV0sCitbW3VzZSB3YXJuaW5nczsKK3VzZSBzdHJpY3Q7CitteSAkTTQgPSAibTQiOworbXkgJEROTCA9ICJkIi4ibmwiOworcHJpbnQgIiR7TTR9X2RpdmVydF9wdXNoKDApJEROTFxuIjsKK3ByaW50ICdAb3V0cHV0KEAsQCknLCAiXG4iOworKHByaW50ICJnYXJiYWdlIngxMCwgIlxuIikgZm9yICgxLi4xMDAwKTsKK3ByaW50ICIke000fV9kaXZlcnRfcG9wKDApXG4iOworXV0pCitBVF9DSEVDSyhbWyRQRVJMIGdlbi1za2VsLnBsID4gc2tlbC5jIHx8IGV4aXQgNzddXSkKKworQVRfREFUQShbW2lucHV0LnldXSwKK1tbJXNrZWxldG9uICIuL3NrZWwuYyIKKyUlCitzdGFydDogOworXV0pCisKK0FUX0JJU09OX0NIRUNLKFtbaW5wdXQueV1dLCBbWzFdXSwgW1tdXSwKK1tbaW5wdXQueTogZmF0YWwgZXJyb3I6IHRvbyBtYW55IGFyZ3VtZW50cyBmb3IgQG91dHB1dCBkaXJlY3RpdmUgaW4gc2tlbGV0b24KK11dKQorCitBVF9DTEVBTlVQCmRpZmYgLS1naXQgYS90ZXN0cy9zeW5jbGluZXMuYXQgYi90ZXN0cy9zeW5jbGluZXMuYXQKaW5kZXggNWVjYmRiMy4uNmI4NDcxOSAxMDA2NDQKLS0tIGEvdGVzdHMvc3luY2xpbmVzLmF0CisrKyBiL3Rlc3RzL3N5bmNsaW5lcy5hdApAQCAtMSwyMCArMSwyMCBAQAogIyBFeGVjdXRpbmcgQWN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG90ZXN0IC0qLQotIyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0LTIwMDUsIDIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0jIGFueSBsYXRlciB2ZXJzaW9uLgotCisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCiAjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KKyMKICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotIyAwMjExMC0xMzAxLCBVU0EuCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCiBBVF9CQU5ORVIoW1tVc2VyIEFjdGlvbnMuXV0pCiAKQEAgLTIzLDEwICsyMywxNSBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBDb21waWxlIEZJTEUgZXhwZWN0aW5nIGFuIGVycm9yLCBhbmQgc2F2ZSBpbiB0aGUgZmlsZSBzdGRvdXQgdGhlCiAjIG5vcm1hbGl6ZWQgb3V0cHV0LiAgSWdub3JlIHRoZSBleGl0IHN0YXR1cywgc2luY2Ugc29tZSBjb21waWxlcnMKLSMgKGUuZy4gYzg5IG9uIElSSVggNi41KSB0cmlnZXIgd2FybmluZ3Mgb24gYCNlcnJvcicsIGluc3RlYWQgb2YKKyMgKGUuZy4gYzg5IG9uIElSSVggNi41KSB0cmlnZ2VyIHdhcm5pbmdzIG9uIGAjZXJyb3InLCBpbnN0ZWFkIG9mCiAjIGVycm9ycy4KIG00X2RlZmluZShbQVRfU1lOQ0xJTkVTX0NPTVBJTEVdLAogW0FUX0NIRUNLKFskQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgJDFdLCBbaWdub3JlXSwgW10sIFtzdGRlcnJdKQorCisjIFRyYW5zZm9ybSBzdGRlcnIgaW50byBzb21ldGhpbmcgbGlrZSB0aGlzOgorIworIyAgIGlucHV0Lnk6NDogI2Vycm9yICI0IgorIwogIyBJbiBjYXNlIEdDQyBkaXNwbGF5cyBjb2x1bW4gaW5mb3JtYXRpb24sIHN0cmlwIGl0IGRvd24uCiAjCiAjICAgaW5wdXQueTo0OjI6ICNlcnJvciAiNCIgICAgb3IKQEAgLTM1LDE2ICs0MCw3NCBAQAogIyA9PgogIyAgIGlucHV0Lnk6NDogI2Vycm9yICI0IgogIwotQVRfQ0hFQ0soW1tzZWQgLWUgJ3MvXlwoW146XSo6W146Ll0qXClbLjpdW146XSo6XCguKlwpJC9cMTpcMi8nIC1lICdzL15cKFteOl0qOlteOl0qOlwpW15AJTpAXSpcKCBAJTpAZXJyb3JcKS9cMVwyLycgc3RkZXJyXV0sIDAsIFtzdGRvdXRdKQorIyBJdCBtYXkgYWxzbyBpc3N1ZSBtb3JlIGNvbnRleHQgaW5mb3JtYXRpb246CisjCisjICAgaW5wdXQueTogSW4gZnVuY3Rpb24gJ3l5cGFyc2UnOgorIyAgIGlucHV0Lnk6ODogI2Vycm9yICI4IgorIyA9PgorIyAgIGlucHV0Lnk6NDogI2Vycm9yICI4IgorIworIyBUaGUgbWVzc2FnZSBtYXkgaW5jbHVkZSBhIGNhcmV0LWVycm9yIChpbmRlbnRlZCBieSBHQ0MgNC44LAorIyBub3QgYnkgY2xhbmcgMy4yKToKKyMKKyMgICBpbnB1dC55OjE6MjogZXJyb3I6ICNlcnJvciAiMSIKKyMgICAgI2Vycm9yICIxIgorIyAgICAgXgorIworIyBQb3NzaWJseSBkaXN0Y2MgYWRkcyBpdHMgYml0cy4KKyMKKyMgICBkaXN0Y2NbMzMxODddIEVSUk9SOiBjb21waWxlIChudWxsKSBvbiBsb2NhbGhvc3QgZmFpbGVkCisjICAgc3luY2xpbmUuYzoxOjI6IGVycm9yOiAjZXJyb3IgIjEiCisjICAgZGlzdGNjWzMzMTg1XSBFUlJPUjogY29tcGlsZSBzeW5jbGluZS5jIG9uIGxvY2FsaG9zdCBmYWlsZWQKKyMKKyMgb3IgZXZlbgorIworIyAgIGRpc3RjY1szNTg4Ml0gKGRjY19jb25uZWN0X2J5X25hbWUpIEVSUk9SOiBmYWlsZWQgdG8gbG9vayB1cCBob3N0ICJjaHJpc2ltYWMiOiBVbmtub3duIGhvc3QKKyMgICBkaXN0Y2NbMzU4ODJdIFdhcm5pbmc6IGZhaWxlZCB0byBkaXN0cmlidXRlIGlucHV0LmMgdG8gY2hyaXNpbWFjLzQsIHJ1bm5pbmcgbG9jYWxseSBpbnN0ZWFkCisjCisjIFRoZSBjb21waWxlciBtaWdodCBlbmQgYnkgdGhlIG51bWJlciBvZiBtZXNzYWdlcyBpc3N1ZWQgKENsYW5nIDMuMik6CisjCisjICAgIHN5bmNsaW5lLmM6MToyOiBlcnJvcjogIjEiCisjICAgICNlcnJvciAiMSIKKyMgICAgIF4KKyMgICAgMSBlcnJvciBnZW5lcmF0ZWQuCisjCisjIFdoZW4gYysrIGlzIHVzZWQgdG8gY29tcGlsZXIgQywgd2UgbWlnaHQgaGF2ZSBtb3JlIG1lc3NhZ2VzIChDbGFuZyAzLjIpOgorIworIyAgICBjbGFuZzogd2FybmluZzogdHJlYXRpbmcgJ2MnIGlucHV0IGFzICdjKysnIHdoZW4gaW4gQysrIG1vZGUsIHRoaXMgYmVoYXZpb3IgaXMgZGVwcmVjYXRlZAorCitBVF9DSEVDSyhbWyRQRVJMIC1wIC0wNzc3IC0gc3RkZXJyIDw8XEVPRgorICAjIDEuIFJlbW92ZSB1c2VsZXNzIGxpbmVzLgorCisgICMgZGlzdGNjIGNsdXR0ZXIuCisgIHMvXmRpc3RjY1xbXGQrXF0gLipcbi8vZ207CisgICMgYyB2cy4gYysrLgorICBzL15jbGFuZzogd2FybmluZzogdHJlYXRpbmcgJ2MnIGlucHV0IGFzICdjXCtcKycuKlxuLy9nbTsKKyAgIyBGdW5jdGlvbiBjb250ZXh0LgorICBzL15bXjpdKjogSW4gZnVuY3Rpb24gJ1teJ10rJzpcbi8vZ207CisgICMgQ2FyZXQgZXJyb3IuCisgIHMvXiAqI2Vycm9yLipcbiAqXF5cbi8vZ207CisgICMgTnVtYmVyIG9mIGVycm9ycy4KKyAgcy9eMSBlcnJvciBnZW5lcmF0ZWRcLlxuLy9nbTsKKworICAjIDIuIE5vcm1hbGl6ZSB0aGUgbGluZXMgd2Uga2VwdC4KKworICAjIFJlbW92ZSBjb2x1bW4uCisgIHMvXihbXjpdKzpcZCspWy46XVteOl0rOiguKykkLyRdWzE6JF1bMi9nbTsKKyAgIyBNYXAgYWxsIGNvbWJpbmF0aW9ucyBvZiAiZXJyb3I6ICIgYW5kICIjZXJyb3I6ICIgdG8gIiNlcnJvciAiLgorICBzL14oW146XSs6XGQrKTooIHwjZXJyb3J8ZXJyb3J8OikrLyRdWzE6ICNlcnJvciAvZ207CitFT0YKK11dLAorICAwLCBbc3Rkb3V0XSkKIF0pCiAKLSMgQVRfVEVTVF9TWU5DTElORShUSVRMRSwgSU5QVVQsIEVSUk9SLU1TRykKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQVRfVEVTVChUSVRMRSwgSU5QVVQsIEVSUk9SLU1TRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgQ2hlY2sgdGhhdCBjb21waWxpbmcgdGhlIHBhcnNlciBwcm9kdWNlZCBmcm9tIElOUFVUIGNhdXNlIEdDQwogIyB0byBpc3N1ZSBFUlJPUi1NU0cuCi1tNF9kZWZpbmUoW0FUX1RFU1RfU1lOQ0xJTkVdLAorbTRfcHVzaGRlZihbQVRfVEVTVF0sCiBbQVRfU0VUVVAoWyQxXSkKLQorQVRfQklTT05fT1BUSU9OX1BVU0hERUZTCiAjIEl0IHNlZW1zIGltcG9zc2libGUgdG8gZmluZCBhIGdlbmVyaWMgc2NoZW1lIHRvIGNoZWNrIHRoZSBsb2NhdGlvbgogIyBvZiBhbiBlcnJvci4gIEV2ZW4gcmVxdWlyaW5nIEdDQyBpcyBub3Qgc3VmZmljaWVudCwgc2luY2UgZm9yIGluc3RhbmNlCiAjIHRoZSB2ZXJzaW9uIG1vZGlmaWVkIGJ5IEFwcGxlOgpAQCAtNjQsNjUgKzEyNyw2OSBAQAogCiBBVF9EQVRBKFtzeW5jbGluZS5jXSwKIFtbI2Vycm9yICIxIgoraW50IGk7IC8qIGF2b2lkcyAtcGVkYW50aWMgd2FybmluZyBhYm91dCBhbiBlbXB0eSB0cmFuc2xhdGlvbiB1bml0LiAqLwogXV0pCiAKIEFUX1NZTkNMSU5FU19DT01QSUxFKFtzeW5jbGluZS5jXSkKIEFUX0NIRUNLKFtbdGVzdCAiYGNhdCBzdGRvdXRgIiA9ICdzeW5jbGluZS5jOjE6IEAlOkBlcnJvciAiMSInIHx8IGV4aXQgNzddXSkKIAogQVRfREFUQShbW2lucHV0LnldXSwgWyQyXSkKLUFUX0NIRUNLKFtiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnldKQorQVRfQklTT05fQ0hFQ0soWy1vIGlucHV0LmMgaW5wdXQueV0pCiBBVF9TWU5DTElORVNfQ09NUElMRShbaW5wdXQuY10pCiBBVF9DSEVDSyhbY2F0IHN0ZG91dF0sIDAsIFskM10pCitBVF9CSVNPTl9PUFRJT05fUE9QREVGUwogQVRfQ0xFQU5VUAogXSkKIAogCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFByb2xvZ3VlIHN5bmNoIGxpbmUuICAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBQcm9sb2d1ZSBzeW5jbGluZS4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAKIAotQVRfVEVTVF9TWU5DTElORShbUHJvbG9ndWUgc3luY2ggbGluZV0sCitBVF9URVNUKFtQcm9sb2d1ZSBzeW5jbGluZV0sCiBbWyV7CiAjZXJyb3IgIjIiCi12b2lkIHl5ZXJyb3IgKGNvbnN0IGNoYXIgKnMpOwotaW50IHl5bGV4ICh2b2lkKTsKK11BVF9ZWUVSUk9SX0RFQ0xBUkVfRVhURVJOWworXUFUX1lZTEVYX0RFQ0xBUkVfRVhURVJOWwogJX0KICUlCiBleHA6ICcwJzsKKyUlCiBdXSwKIFtpbnB1dC55OjI6ICNlcnJvciAiMiIKIF0pCiAKIAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgJXVuaW9uIHN5bmNoIGxpbmUuICAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjICV1bmlvbiBzeW5jbGluZS4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIwogCi1BVF9URVNUX1NZTkNMSU5FKFsldW5pb24gc3luY2ggbGluZV0sCitBVF9URVNUKFsldW5pb24gc3luY2xpbmVdLAogW1sldW5pb24gewogI2Vycm9yICIyIgogICBjaGFyIGR1bW15OwogfQogJXsKLXZvaWQgeXllcnJvciAoY29uc3QgY2hhciAqcyk7Ci1pbnQgeXlsZXggKHZvaWQpOworXUFUX1lZRVJST1JfREVDTEFSRV9FWFRFUk5bCitdQVRfWVlMRVhfREVDTEFSRV9FWFRFUk5bCiAlfQogJSUKIGV4cDogJzAnOworJSUKIF1dLAogW2lucHV0Lnk6MjogI2Vycm9yICIyIgogXSkKIAogCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBQb3N0cHJvbG9ndWUgc3luY2ggbGluZS4gICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgUG9zdHByb2xvZ3VlIHN5bmNsaW5lLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAKLUFUX1RFU1RfU1lOQ0xJTkUoW1Bvc3Rwcm9sb2d1ZSBzeW5jaCBsaW5lXSwKK0FUX1RFU1QoW1Bvc3Rwcm9sb2d1ZSBzeW5jbGluZV0sCiBbWyV7Ci12b2lkIHl5ZXJyb3IgKGNvbnN0IGNoYXIgKnMpOwotaW50IHl5bGV4ICh2b2lkKTsKK11BVF9ZWUVSUk9SX0RFQ0xBUkVfRVhURVJOWworXUFUX1lZTEVYX0RFQ0xBUkVfRVhURVJOWwogJX0KICV1bmlvbgogewpAQCAtMTMzLDE5ICsyMDAsMjAgQEAKICV9CiAlJQogZXhwOiAnMCc7CislJQogXV0sCiBbaW5wdXQueToxMDogI2Vycm9yICIxMCIKIF0pCiAKIAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgQWN0aW9uIHN5bmNoIGxpbmUuICAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEFjdGlvbiBzeW5jbGluZS4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIwogCi1BVF9URVNUX1NZTkNMSU5FKFtBY3Rpb24gc3luY2ggbGluZV0sCitBVF9URVNUKFtBY3Rpb24gc3luY2xpbmVdLAogW1slewotdm9pZCB5eWVycm9yIChjb25zdCBjaGFyICpzKTsKLWludCB5eWxleCAodm9pZCk7CitdQVRfWVlFUlJPUl9ERUNMQVJFX0VYVEVSTlsKK11BVF9ZWUxFWF9ERUNMQVJFX0VYVEVSTlsKICV9CiAlJQogZXhwOgpAQCAtMTU3LDE0ICsyMjUsMTQgQEAKIF0pCiAKIAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBFcGlsb2d1ZSBzeW5jaCBsaW5lLiAgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRXBpbG9ndWUgc3luY2xpbmUuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogCi1BVF9URVNUX1NZTkNMSU5FKFtFcGlsb2d1ZSBzeW5jaCBsaW5lXSwKK0FUX1RFU1QoW0VwaWxvZ3VlIHN5bmNsaW5lXSwKIFtbJXsKLXZvaWQgeXllcnJvciAoY29uc3QgY2hhciAqcyk7Ci1pbnQgeXlsZXggKHZvaWQpOworXUFUX1lZRVJST1JfREVDTEFSRV9FWFRFUk5bCitdQVRfWVlMRVhfREVDTEFSRV9FWFRFUk5bCiAlfQogJSUKIGV4cDogJzAnOwpAQCAtMTczLDMgKzI0MSw1NSBAQAogXV0sCiBbaW5wdXQueTo4OiAjZXJyb3IgIjgiCiBdKQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgJWNvZGUgdG9wIHN5bmNsaW5lLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FUX1RFU1QoWyVjb2RlIHRvcCBzeW5jbGluZV0sCitbWyVjb2RlIHRvcCB7CisjZXJyb3IgIjIiCit9CisleworXUFUX1lZRVJST1JfREVDTEFSRV9FWFRFUk5bCitdQVRfWVlMRVhfREVDTEFSRV9FWFRFUk5bCislfQorJSUKK2V4cDogJzAnOworJSUKK11dLAorW2lucHV0Lnk6MjogI2Vycm9yICIyIgorXSkKKworbTRfcG9wZGVmKFtBVF9URVNUXSkKKworIyMgLS0tLS0tLS0tLS0gIyMKKyMjICVuby1saW5lcy4gICMjCisjIyAtLS0tLS0tLS0tLSAjIworCittNF9wdXNoZGVmKFtBVF9URVNUXSwKK1tBVF9TRVRVUChbJW5vLWxpbmVzXSkKKworQVRfQklTT05fT1BUSU9OX1BVU0hERUZTKFslc2tlbGV0b24gIiQxIiAlZGVmaW5lc10pCitBVF9EQVRBX0dSQU1NQVIoW2lucHV0LnldLAorWyVza2VsZXRvbiAiJDEiICVkZWZpbmVzCisleworXUFUX1lZRVJST1JfREVDTEFSRV9FWFRFUk5bCitdQVRfWVlMRVhfREVDTEFSRV9FWFRFUk5bCislfQorJSUKK2V4cDogJzAnCitdKQorQVRfQklTT05fQ0hFQ0soWy0tbm8tbGluZXMgLW8gaW5wdXQuQVRfU0tFTF9DQ19JRihbY2NdLCBbY10pIC1kIGlucHV0LnldKQorQVRfQ0hFQ0soW1tncmVwICcjbGluZScgXUFUX1NLRUxfQ0NfSUYoWyouY2MgKi5oaF0sIFsqLmMgKi5oXSldLCAxKQorQVRfQklTT05fT1BUSU9OX1BPUERFRlMKKworQVRfQ0xFQU5VUAorXSkKKworQVRfVEVTVChbeWFjYy5jXSkKK0FUX1RFU1QoW2dsci5jXSkKK0FUX1RFU1QoW2xhbHIxLmNjXSkKK0FUX1RFU1QoW2dsci5jY10pCisKK200X3BvcGRlZihbQVRfVEVTVF0pCmRpZmYgLS1naXQgYS90ZXN0cy90ZXN0c3VpdGUgYi90ZXN0cy90ZXN0c3VpdGUKaW5kZXggZDQyOTM0NS4uMmU2MjI2OCAxMDA3NTUKLS0tIGEvdGVzdHMvdGVzdHN1aXRlCisrKyBiL3Rlc3RzL3Rlc3RzdWl0ZQpAQCAtMSw3NSArMSw0MzEgQEAKICMhIC9iaW4vc2gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMgR2VuZXJhdGVkIGZyb20gLi4vLi4vLi4vdGVzdHMvbG9jYWwuYXQgYnkgR05VIEF1dG9jb25mIDIuNjkuCisjCisjIENvcHlyaWdodCAoQykgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIHRlc3Qgc3VpdGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAKLSMgQmUgQm91cm5lIGNvbXBhdGlibGUKLWlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCitEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgogICBlbXVsYXRlIHNoCiAgIE5VTExDTUQ9OgotICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAogICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgogICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKLWVsaWYgdGVzdCAtbiAiJHtCQVNIX1ZFUlNJT04rc2V0fSIgJiYgKHNldCAtbyBwb3NpeCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIHNldCAtbyBwb3NpeAotZmkKLURVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKLQotIyBTdXBwb3J0IHVuc2V0IHdoZW4gcG9zc2libGUuCi1pZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYXNfdW5zZXQ9dW5zZXQKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKIGVsc2UKLSAgYXNfdW5zZXQ9ZmFsc2UKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYwogZmkKIAogCi0jIFdvcmsgYXJvdW5kIGJ1Z3MgaW4gcHJlLTMuMCBVV0lOIGtzaC4KLSRhc191bnNldCBFTlYgTUFJTCBNQUlMUEFUSAorYXNfbmw9JworJworZXhwb3J0IGFzX25sCisjIFByaW50aW5nIGEgbG9uZyBzdHJpbmcgY3Jhc2hlcyBTb2xhcmlzIDcgL3Vzci9iaW4vcHJpbnRmLgorYXNfZWNobz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KKyMgUHJlZmVyIGEga3NoIHNoZWxsIGJ1aWx0aW4gb3ZlciBhbiBleHRlcm5hbCBwcmludGYgcHJvZ3JhbSBvbiBTb2xhcmlzLAorIyBidXQgd2l0aG91dCB3YXN0aW5nIGZvcmtzIGZvciBiYXNoIG9yIHpzaC4KK2lmIHRlc3QgLXogIiRCQVNIX1ZFUlNJT04kWlNIX1ZFUlNJT04iIFwKKyAgICAmJiAodGVzdCAiWGBwcmludCAtciAtLSAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50IC1yIC0tJworICBhc19lY2hvX249J3ByaW50IC1ybiAtLScKK2VsaWYgKHRlc3QgIlhgcHJpbnRmICVzICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnRmICVzXG4nCisgIGFzX2VjaG9fbj0ncHJpbnRmICVzJworZWxzZQorICBpZiB0ZXN0ICJYYCgvdXNyL3VjYi9lY2hvIC1uIC1uICRhc19lY2hvKSAyPi9kZXYvbnVsbGAiID0gIlgtbiAkYXNfZWNobyI7IHRoZW4KKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgL3Vzci91Y2IvZWNobyAtbiAiJDEkYXNfbmwiJworICAgIGFzX2VjaG9fbj0nL3Vzci91Y2IvZWNobyAtbicKKyAgZWxzZQorICAgIGFzX2VjaG9fYm9keT0nZXZhbCBleHByICJYJDEiIDogIlhcXCguKlxcKSInCisgICAgYXNfZWNob19uX2JvZHk9J2V2YWwKKyAgICAgIGFyZz0kMTsKKyAgICAgIGNhc2UgJGFyZyBpbiAjKAorICAgICAgKiIkYXNfbmwiKikKKwlleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpJGFzX25sIjsKKwlhcmc9YGV4cHIgIlgkYXJnIiA6ICIuKiRhc19ubFxcKC4qXFwpImA7OworICAgICAgZXNhYzsKKyAgICAgIGV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkiIHwgdHIgLWQgIiRhc19ubCIKKyAgICAnCisgICAgZXhwb3J0IGFzX2VjaG9fbl9ib2R5CisgICAgYXNfZWNob19uPSdzaCAtYyAkYXNfZWNob19uX2JvZHkgYXNfZWNobycKKyAgZmkKKyAgZXhwb3J0IGFzX2VjaG9fYm9keQorICBhc19lY2hvPSdzaCAtYyAkYXNfZWNob19ib2R5IGFzX2VjaG8nCitmaQorCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgIFBBVEhfU0VQQVJBVE9SPToKKyAgKFBBVEg9Jy9iaW47L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgJiYgeworICAgIChQQVRIPScvYmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIHx8CisgICAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgfQorZmkKKworCisjIElGUworIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4gIFF1b3RpbmcgaXMKKyMgdGhlcmUgdG8gcHJldmVudCBlZGl0b3JzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgc3BhY2UtdGFiLgorIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkCisjIHNwbGl0dGluZyBieSBzZXR0aW5nIElGUyB0byBlbXB0eSB2YWx1ZS4pCitJRlM9IiAiIgkkYXNfbmwiCisKKyMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIGRpcmVjdG9yeSBzZXBhcmF0b3IuCithc19teXNlbGY9CitjYXNlICQwIGluICMoKAorICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7CisgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhaworICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgICAgOzsKK2VzYWMKKyMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKyMgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbm90IHRvIGJlIGZvdW5kIGluIHRoZSBwYXRoLgoraWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgorICBhc19teXNlbGY9JDAKK2ZpCitpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCisgICRhc19lY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCisgIGV4aXQgMQorZmkKKworIyBVbnNldCB2YXJpYWJsZXMgdGhhdCB3ZSBkbyBub3QgbmVlZCBhbmQgd2hpY2ggY2F1c2UgYnVncyAoZS5nLiBpbgorIyBwcmUtMy4wIFVXSU4ga3NoKS4gIEJ1dCBkbyBub3QgY2F1c2UgYnVncyBpbiBiYXNoIDIuMDE7IHRoZSAifHwgZXhpdCAxIgorIyBzdXBwcmVzc2VzIGFueSAiU2VnbWVudGF0aW9uIGZhdWx0IiBtZXNzYWdlIHRoZXJlLiAgJygoJyBjb3VsZAorIyB0cmlnZ2VyIGEgYnVnIGluIHBka3NoIDUuMi4xNC4KK2ZvciBhc192YXIgaW4gQkFTSF9FTlYgRU5WIE1BSUwgTUFJTFBBVEgKK2RvIGV2YWwgdGVzdCB4XCR7JGFzX3ZhcitzZXR9ID0geHNldCBcCisgICYmICggKHVuc2V0ICRhc192YXIpIHx8IGV4aXQgMSkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0ICRhc192YXIgfHwgOgorZG9uZQogUFMxPSckICcKIFBTMj0nPiAnCiBQUzQ9JysgJwogCiAjIE5MUyBudWlzYW5jZXMuCi1mb3IgYXNfdmFyIGluIFwKLSAgTEFORyBMQU5HVUFHRSBMQ19BRERSRVNTIExDX0FMTCBMQ19DT0xMQVRFIExDX0NUWVBFIExDX0lERU5USUZJQ0FUSU9OIFwKLSAgTENfTUVBU1VSRU1FTlQgTENfTUVTU0FHRVMgTENfTU9ORVRBUlkgTENfTkFNRSBMQ19OVU1FUklDIExDX1BBUEVSIFwKLSAgTENfVEVMRVBIT05FIExDX1RJTUUKLWRvCi0gIGlmIChzZXQgK3g7IHRlc3QgLXogImAoZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyKSAyPiYxYCIpOyB0aGVuCi0gICAgZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyCi0gIGVsc2UKLSAgICAkYXNfdW5zZXQgJGFzX3ZhcgotICBmaQotZG9uZQorTENfQUxMPUMKK2V4cG9ydCBMQ19BTEwKK0xBTkdVQUdFPUMKK2V4cG9ydCBMQU5HVUFHRQogCi0jIFJlcXVpcmVkIHRvIHVzZSBiYXNlbmFtZS4KLWlmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisjIENEUEFUSC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworaWYgdGVzdCAieCRDT05GSUdfU0hFTEwiID0geDsgdGhlbgorICBhc19ib3VybmVfY29tcGF0aWJsZT0iaWYgdGVzdCAtbiBcIlwke1pTSF9WRVJTSU9OK3NldH1cIiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiBcJHsxK1wiXCRAXCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnXCR7MStcIlwkQFwifSc9J1wiXCRAXCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgXGAoc2V0IC1vKSAyPi9kZXYvbnVsbFxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYworZmkKKyIKKyAgYXNfcmVxdWlyZWQ9ImFzX2ZuX3JldHVybiAoKSB7IChleGl0IFwkMSk7IH0KK2FzX2ZuX3N1Y2Nlc3MgKCkgeyBhc19mbl9yZXR1cm4gMDsgfQorYXNfZm5fZmFpbHVyZSAoKSB7IGFzX2ZuX3JldHVybiAxOyB9Cithc19mbl9yZXRfc3VjY2VzcyAoKSB7IHJldHVybiAwOyB9Cithc19mbl9yZXRfZmFpbHVyZSAoKSB7IHJldHVybiAxOyB9CisKK2V4aXRjb2RlPTAKK2FzX2ZuX3N1Y2Nlc3MgfHwgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3N1Y2Nlc3MgZmFpbGVkLjsgfQorYXNfZm5fZmFpbHVyZSAmJiB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fZmFpbHVyZSBzdWNjZWVkZWQuOyB9Cithc19mbl9yZXRfc3VjY2VzcyB8fCB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fcmV0X3N1Y2Nlc3MgZmFpbGVkLjsgfQorYXNfZm5fcmV0X2ZhaWx1cmUgJiYgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3JldF9mYWlsdXJlIHN1Y2NlZWRlZC47IH0KK2lmICggc2V0IHg7IGFzX2ZuX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuIDoKKworZWxzZQorICBleGl0Y29kZT0xOyBlY2hvIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIG5vdCBzYXZlZC4KK2ZpCit0ZXN0IHhcJGV4aXRjb2RlID0geDAgfHwgZXhpdCAxCit0ZXN0IC14IC8gfHwgZXhpdCAxIgorICBhc19zdWdnZXN0ZWQ9IiAgYXNfbGluZW5vXzE9Ijthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCRMSU5FTk87YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQiIGFzX2xpbmVub18xYT1cJExJTkVOTworICBhc19saW5lbm9fMj0iO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkJExJTkVOTzthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCIgYXNfbGluZW5vXzJhPVwkTElORU5PCisgIGV2YWwgJ3Rlc3QgXCJ4XCRhc19saW5lbm9fMSdcJGFzX3J1bidcIiAhPSBcInhcJGFzX2xpbmVub18yJ1wkYXNfcnVuJ1wiICYmCisgIHRlc3QgXCJ4XGBleHByIFwkYXNfbGluZW5vXzEnXCRhc19ydW4nICsgMVxgXCIgPSBcInhcJGFzX2xpbmVub18yJ1wkYXNfcnVuJ1wiJyB8fCBleGl0IDEKK3Rlc3QgXCQoKCAxICsgMSApKSA9IDIgfHwgZXhpdCAxIgorICBpZiAoZXZhbCAiJGFzX3JlcXVpcmVkIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBhc19oYXZlX3JlcXVpcmVkPXllcworZWxzZQorICBhc19oYXZlX3JlcXVpcmVkPW5vCitmaQorICBpZiB0ZXN0IHgkYXNfaGF2ZV9yZXF1aXJlZCA9IHh5ZXMgJiYgKGV2YWwgIiRhc19zdWdnZXN0ZWQiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisKK2Vsc2UKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorYXNfZm91bmQ9ZmFsc2UKK2ZvciBhc19kaXIgaW4gL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgYXNfZm91bmQ9OgorICBjYXNlICRhc19kaXIgaW4gIygKKwkgLyopCisJICAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbworCSAgICAgIyBUcnkgb25seSBzaGVsbHMgdGhhdCBleGlzdCwgdG8gc2F2ZSBzZXZlcmFsIGZvcmtzLgorCSAgICAgYXNfc2hlbGw9JGFzX2Rpci8kYXNfYmFzZQorCSAgICAgaWYgeyB0ZXN0IC1mICIkYXNfc2hlbGwiIHx8IHRlc3QgLWYgIiRhc19zaGVsbC5leGUiOyB9ICYmCisJCSAgICB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19yZXF1aXJlZCIgfCBhc19ydW49YSAiJGFzX3NoZWxsIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIENPTkZJR19TSEVMTD0kYXNfc2hlbGwgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKKwkJICAgaWYgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfc3VnZ2VzdGVkIiB8IGFzX3J1bj1hICIkYXNfc2hlbGwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgYnJlYWsgMgorZmkKK2ZpCisJICAgZG9uZTs7CisgICAgICAgZXNhYworICBhc19mb3VuZD1mYWxzZQorZG9uZQorJGFzX2ZvdW5kIHx8IHsgaWYgeyB0ZXN0IC1mICIkU0hFTEwiIHx8IHRlc3QgLWYgIiRTSEVMTC5leGUiOyB9ICYmCisJICAgICAgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfcmVxdWlyZWQiIHwgYXNfcnVuPWEgIiRTSEVMTCI7IH0gMj4vZGV2L251bGw7IHRoZW4gOgorICBDT05GSUdfU0hFTEw9JFNIRUxMIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCitmaTsgfQorSUZTPSRhc19zYXZlX0lGUworCisKKyAgICAgIGlmIHRlc3QgIngkQ09ORklHX1NIRUxMIiAhPSB4OyB0aGVuIDoKKyAgZXhwb3J0IENPTkZJR19TSEVMTAorICAgICAgICAgICAgICMgV2UgY2Fubm90IHlldCBhc3N1bWUgYSBkZWNlbnQgc2hlbGwsIHNvIHdlIGhhdmUgdG8gcHJvdmlkZSBhCisjIG5ldXRyYWxpemF0aW9uIHZhbHVlIGZvciBzaGVsbHMgd2l0aG91dCB1bnNldDsgYW5kIHRoaXMgYWxzbworIyB3b3JrcyBhcm91bmQgc2hlbGxzIHRoYXQgY2Fubm90IHVuc2V0IG5vbmV4aXN0ZW50IHZhcmlhYmxlcy4KKyMgUHJlc2VydmUgLXYgYW5kIC14IHRvIHRoZSByZXBsYWNlbWVudCBzaGVsbC4KK0JBU0hfRU5WPS9kZXYvbnVsbAorRU5WPS9kZXYvbnVsbAorKHVuc2V0IEJBU0hfRU5WKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQkFTSF9FTlYgRU5WCitjYXNlICQtIGluICMgKCgoKAorICAqdip4KiB8ICp4KnYqICkgYXNfb3B0cz0tdnggOzsKKyAgKnYqICkgYXNfb3B0cz0tdiA7OworICAqeCogKSBhc19vcHRzPS14IDs7CisgICogKSBhc19vcHRzPSA7OworZXNhYworZXhlYyAkQ09ORklHX1NIRUxMICRhc19vcHRzICIkYXNfbXlzZWxmIiAkezErIiRAIn0KKyMgQWRtaXR0ZWRseSwgdGhpcyBpcyBxdWl0ZSBwYXJhbm9pZCwgc2luY2UgYWxsIHRoZSBrbm93biBzaGVsbHMgYmFpbAorIyBvdXQgYWZ0ZXIgYSBmYWlsZWQgYGV4ZWMnLgorJGFzX2VjaG8gIiQwOiBjb3VsZCBub3QgcmUtZXhlY3V0ZSB3aXRoICRDT05GSUdfU0hFTEwiID4mMgorZXhpdCAyNTUKK2ZpCisKKyAgICBpZiB0ZXN0IHgkYXNfaGF2ZV9yZXF1aXJlZCA9IHhubzsgdGhlbiA6CisgICRhc19lY2hvICIkMDogVGhpcyBzY3JpcHQgcmVxdWlyZXMgYSBzaGVsbCBtb3JlIG1vZGVybiB0aGFuIGFsbCIKKyAgJGFzX2VjaG8gIiQwOiB0aGUgc2hlbGxzIHRoYXQgSSBmb3VuZCBvbiB5b3VyIHN5c3RlbS4iCisgIGlmIHRlc3QgeCR7WlNIX1ZFUlNJT04rc2V0fSA9IHhzZXQgOyB0aGVuCisgICAgJGFzX2VjaG8gIiQwOiBJbiBwYXJ0aWN1bGFyLCB6c2ggJFpTSF9WRVJTSU9OIGhhcyBidWdzIGFuZCBzaG91bGQiCisgICAgJGFzX2VjaG8gIiQwOiBiZSB1cGdyYWRlZCB0byB6c2ggNC4zLjQgb3IgbGF0ZXIuIgorICBlbHNlCisgICAgJGFzX2VjaG8gIiQwOiBQbGVhc2UgdGVsbCBidWctYXV0b2NvbmZAZ251Lm9yZyBhYm91dCB5b3VyIHN5c3RlbSwKKyQwOiBpbmNsdWRpbmcgYW55IGVycm9yIHBvc3NpYmx5IG91dHB1dCBiZWZvcmUgdGhpcworJDA6IG1lc3NhZ2UuIFRoZW4gaW5zdGFsbCBhIG1vZGVybiBzaGVsbCwgb3IgbWFudWFsbHkgcnVuCiskMDogdGhlIHNjcmlwdCB1bmRlciBzdWNoIGEgc2hlbGwgaWYgeW91IGRvIGhhdmUgb25lLiIKKyAgZmkKKyAgZXhpdCAxCitmaQorZmkKK2ZpCitTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorZXhwb3J0IFNIRUxMCisjIFVuc2V0IG1vcmUgdmFyaWFibGVzIGtub3duIHRvIGludGVyZmVyZSB3aXRoIGJlaGF2aW9yIG9mIGNvbW1vbiB0b29scy4KK0NMSUNPTE9SX0ZPUkNFPSBHUkVQX09QVElPTlM9Cit1bnNldCBDTElDT0xPUl9GT1JDRSBHUkVQX09QVElPTlMKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNNHNoIFNoZWxsIEZ1bmN0aW9ucy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyBhc19mbl91bnNldCBWQVIKKyMgLS0tLS0tLS0tLS0tLS0tCisjIFBvcnRhYmx5IHVuc2V0IFZBUi4KK2FzX2ZuX3Vuc2V0ICgpCit7CisgIHsgZXZhbCAkMT07IHVuc2V0ICQxO30KK30KK2FzX3Vuc2V0PWFzX2ZuX3Vuc2V0CisKKyMgYXNfZm5fc2V0X3N0YXR1cyBTVEFUVVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0ICQ/IHRvIFNUQVRVUywgd2l0aG91dCBmb3JraW5nLgorYXNfZm5fc2V0X3N0YXR1cyAoKQoreworICByZXR1cm4gJDEKK30gIyBhc19mbl9zZXRfc3RhdHVzCisKKyMgYXNfZm5fZXhpdCBTVEFUVVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhpdCB0aGUgc2hlbGwgd2l0aCBTVEFUVVMsIGV2ZW4gaW4gYSAidHJhcCAwIiBvciAic2V0IC1lIiBjb250ZXh0LgorYXNfZm5fZXhpdCAoKQoreworICBzZXQgK2UKKyAgYXNfZm5fc2V0X3N0YXR1cyAkMQorICBleGl0ICQxCit9ICMgYXNfZm5fZXhpdAorCisjIGFzX2ZuX21rZGlyX3AKKyMgLS0tLS0tLS0tLS0tLQorIyBDcmVhdGUgIiRhc19kaXIiIGFzIGEgZGlyZWN0b3J5LCBpbmNsdWRpbmcgcGFyZW50cyBpZiBuZWNlc3NhcnkuCithc19mbl9ta2Rpcl9wICgpCit7CisKKyAgY2FzZSAkYXNfZGlyIGluICMoCisgIC0qKSBhc19kaXI9Li8kYXNfZGlyOzsKKyAgZXNhYworICB0ZXN0IC1kICIkYXNfZGlyIiB8fCBldmFsICRhc19ta2Rpcl9wIHx8IHsKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIDo7IGRvCisgICAgICBjYXNlICRhc19kaXIgaW4gIygKKyAgICAgICpcJyopIGFzX3FkaXI9YCRhc19lY2hvICIkYXNfZGlyIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7ICMnKAorICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKKyAgICAgIGVzYWMKKyAgICAgIGFzX2RpcnM9IickYXNfcWRpcicgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJGFzX2RpciIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgICAgICB0ZXN0IC1kICIkYXNfZGlyIiAmJiBicmVhaworICAgIGRvbmUKKyAgICB0ZXN0IC16ICIkYXNfZGlycyIgfHwgZXZhbCAibWtkaXIgJGFzX2RpcnMiCisgIH0gfHwgdGVzdCAtZCAiJGFzX2RpciIgfHwgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiCisKKworfSAjIGFzX2ZuX21rZGlyX3AKKworIyBhc19mbl9leGVjdXRhYmxlX3AgRklMRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0IGlmIEZJTEUgaXMgYW4gZXhlY3V0YWJsZSByZWd1bGFyIGZpbGUuCithc19mbl9leGVjdXRhYmxlX3AgKCkKK3sKKyAgdGVzdCAtZiAiJDEiICYmIHRlc3QgLXggIiQxIgorfSAjIGFzX2ZuX2V4ZWN1dGFibGVfcAorIyBhc19mbl9hcHBlbmQgVkFSIFZBTFVFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXBwZW5kIHRoZSB0ZXh0IGluIFZBTFVFIHRvIHRoZSBlbmQgb2YgdGhlIGRlZmluaXRpb24gY29udGFpbmVkIGluIFZBUi4gVGFrZQorIyBhZHZhbnRhZ2Ugb2YgYW55IHNoZWxsIG9wdGltaXphdGlvbnMgdGhhdCBhbGxvdyBhbW9ydGl6ZWQgbGluZWFyIGdyb3d0aCBvdmVyCisjIHJlcGVhdGVkIGFwcGVuZHMsIGluc3RlYWQgb2YgdGhlIHR5cGljYWwgcXVhZHJhdGljIGdyb3d0aCBwcmVzZW50IGluIG5haXZlCisjIGltcGxlbWVudGF0aW9ucy4KK2lmIChldmFsICJhc192YXI9MTsgYXNfdmFyKz0yOyB0ZXN0IHhcJGFzX3ZhciA9IHgxMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxKz1cJDIKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxPVwkJDFcJDIKKyAgfQorZmkgIyBhc19mbl9hcHBlbmQKKworIyBhc19mbl9hcml0aCBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gYXJpdGhtZXRpYyBldmFsdWF0aW9uIG9uIHRoZSBBUkdzLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUKKyMgZ2xvYmFsICRhc192YWwuIFRha2UgYWR2YW50YWdlIG9mIHNoZWxscyB0aGF0IGNhbiBhdm9pZCBmb3Jrcy4gVGhlIGFyZ3VtZW50cworIyBtdXN0IGJlIHBvcnRhYmxlIGFjcm9zcyAkKCgpKSBhbmQgZXhwci4KK2lmIChldmFsICJ0ZXN0IFwkKCggMSArIDEgKSkgPSAyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPSQoKCAkKiApKQorICB9JworZWxzZQorICBhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPWBleHByICIkQCIgfHwgdGVzdCAkPyAtZXEgMWAKKyAgfQorZmkgIyBhc19mbl9hcml0aAorCisKKyMgYXNfZm5fZXJyb3IgU1RBVFVTIEVSUk9SIFtMSU5FTk8gTE9HX0ZEXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCAiYGJhc2VuYW1lICQwYDogZXJyb3I6IEVSUk9SIiB0byBzdGRlcnIuIElmIExJTkVOTyBhbmQgTE9HX0ZEIGFyZQorIyBwcm92aWRlZCwgYWxzbyBvdXRwdXQgdGhlIGVycm9yIHRvIExPR19GRCwgcmVmZXJlbmNpbmcgTElORU5PLiBUaGVuIGV4aXQgdGhlCisjIHNjcmlwdCB3aXRoIFNUQVRVUywgdXNpbmcgMSBpZiB0aGF0IHdhcyAwLgorYXNfZm5fZXJyb3IgKCkKK3sKKyAgYXNfc3RhdHVzPSQxOyB0ZXN0ICRhc19zdGF0dXMgLWVxIDAgJiYgYXNfc3RhdHVzPTEKKyAgaWYgdGVzdCAiJDQiOyB0aGVuCisgICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMyJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiAkMiIgPiYkNAorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJDIiID4mMgorICBhc19mbl9leGl0ICRhc19zdGF0dXMKK30gIyBhc19mbl9lcnJvcgorCitpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KICAgYXNfZXhwcj1leHByCiBlbHNlCiAgIGFzX2V4cHI9ZmFsc2UKIGZpCiAKLWlmIChiYXNlbmFtZSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KK2lmIChiYXNlbmFtZSAtLSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAtLSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KICAgYXNfYmFzZW5hbWU9YmFzZW5hbWUKIGVsc2UKICAgYXNfYmFzZW5hbWU9ZmFsc2UKIGZpCiAKLQotIyBOYW1lIG9mIHRoZSBleGVjdXRhYmxlLgotYXNfbWU9YCRhc19iYXNlbmFtZSAiJDAiIHx8Cithc19tZT1gJGFzX2Jhc2VuYW1lIC0tICIkMCIgfHwKICRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCiAJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJDAiIDogJ1hcKC9cKSQnIFx8IFwKLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgvIiQwIiB8Ci0gICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcL1woXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcL1woXC9cKS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIHMvLiovLi87IHEnYAorCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgvIiQwIiB8CisgICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcL1woXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcL1woXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAogCitpZiAoYXNfZGlyPWBkaXJuYW1lIC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfZGlybmFtZT1kaXJuYW1lCitlbHNlCisgIGFzX2Rpcm5hbWU9ZmFsc2UKK2ZpCiAKLSMgUEFUSCBuZWVkcyBDUiwgYW5kIExJTkVOTyBuZWVkcyBDUiBhbmQgUEFUSC4KICMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KIGFzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JwogYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCkBAIC03NywxNDYgKzQzMyw5MSBAQAogYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JwogYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCiAKLSMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgotaWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KLSAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAotICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCi0gIGNobW9kICt4IGNvbmYkJC5zaAotICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgIFBBVEhfU0VQQVJBVE9SPSc7JwotICBlbHNlCi0gICAgUEFUSF9TRVBBUkFUT1I9OgotICBmaQotICBybSAtZiBjb25mJCQuc2gKLWZpCiAKLQotICBhc19saW5lbm9fMT0kTElORU5PCi0gIGFzX2xpbmVub18yPSRMSU5FTk8KLSAgYXNfbGluZW5vXzM9YChleHByICRhc19saW5lbm9fMSArIDEpIDI+L2Rldi9udWxsYAotICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKLSAgdGVzdCAieCRhc19saW5lbm9fMyIgID0gIngkYXNfbGluZW5vXzIiICB8fCB7Ci0gICMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIHBhdGggYXQgYWxsCi0gICMgcmVsYXRpdmUgb3Igbm90LgotICBjYXNlICQwIGluCi0gICAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OwotICAgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKLWRvbmUKLQotICAgICAgIDs7Ci0gIGVzYWMKLSAgIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJwotICAjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KLSAgaWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgotICAgIGFzX215c2VsZj0kMAotICBmaQotICBpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgcGF0aCIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgZmkKLSAgY2FzZSAkQ09ORklHX1NIRUxMIGluCi0gICcnKQotICAgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbwotCSBjYXNlICRhc19kaXIgaW4KLQkgLyopCi0JICAgaWYgKCIkYXNfZGlyLyRhc19iYXNlIiAtYyAnCi0gIGFzX2xpbmVub18xPSRMSU5FTk8KLSAgYXNfbGluZW5vXzI9JExJTkVOTwotICBhc19saW5lbm9fMz1gKGV4cHIgJGFzX2xpbmVub18xICsgMSkgMj4vZGV2L251bGxgCi0gIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgotICB0ZXN0ICJ4JGFzX2xpbmVub18zIiAgPSAieCRhc19saW5lbm9fMiIgJykgMj4vZGV2L251bGw7IHRoZW4KLQkgICAgICRhc191bnNldCBCQVNIX0VOViB8fCB0ZXN0ICIke0JBU0hfRU5WK3NldH0iICE9IHNldCB8fCB7IEJBU0hfRU5WPTsgZXhwb3J0IEJBU0hfRU5WOyB9Ci0JICAgICAkYXNfdW5zZXQgRU5WIHx8IHRlc3QgIiR7RU5WK3NldH0iICE9IHNldCB8fCB7IEVOVj07IGV4cG9ydCBFTlY7IH0KLQkgICAgIENPTkZJR19TSEVMTD0kYXNfZGlyLyRhc19iYXNlCi0JICAgICBleHBvcnQgQ09ORklHX1NIRUxMCi0JICAgICBleGVjICIkQ09ORklHX1NIRUxMIiAiJDAiICR7MSsiJEAifQotCSAgIGZpOzsKLQkgZXNhYwotICAgICAgIGRvbmUKLWRvbmUKLTs7Ci0gIGVzYWMKLQotICAjIENyZWF0ZSAkYXNfbWUubGluZW5vIGFzIGEgY29weSBvZiAkYXNfbXlzZWxmLCBidXQgd2l0aCAkTElORU5PCi0gICMgdW5pZm9ybWx5IHJlcGxhY2VkIGJ5IHRoZSBsaW5lIG51bWJlci4gIFRoZSBmaXJzdCAnc2VkJyBpbnNlcnRzIGEKLSAgIyBsaW5lLW51bWJlciBsaW5lIGJlZm9yZSBlYWNoIGxpbmU7IHRoZSBzZWNvbmQgJ3NlZCcgZG9lcyB0aGUgcmVhbAotICAjIHdvcmsuICBUaGUgc2Vjb25kIHNjcmlwdCB1c2VzICdOJyB0byBwYWlyIGVhY2ggbGluZS1udW1iZXIgbGluZQotICAjIHdpdGggdGhlIG51bWJlcmVkIGxpbmUsIGFuZCBhcHBlbmRzIHRyYWlsaW5nICctJyBkdXJpbmcKLSAgIyBzdWJzdGl0dXRpb24gc28gdGhhdCAkTElORU5PIGlzIG5vdCBhIHNwZWNpYWwgY2FzZSBhdCBsaW5lIGVuZC4KLSAgIyAoUmFqYSBSIEhhcmluYXRoIHN1Z2dlc3RlZCBzZWQgJz0nLCBhbmQgUGF1bCBFZ2dlcnQgd3JvdGUgdGhlCi0gICMgc2Vjb25kICdzZWQnIHNjcmlwdC4gIEJsYW1lIExlZSBFLiBNY01haG9uIGZvciBzZWQncyBzeW50YXguICA6LSkKLSAgc2VkICc9JyA8JGFzX215c2VsZiB8CisgIGFzX2xpbmVub18xPSRMSU5FTk8gYXNfbGluZW5vXzFhPSRMSU5FTk8KKyAgYXNfbGluZW5vXzI9JExJTkVOTyBhc19saW5lbm9fMmE9JExJTkVOTworICBldmFsICd0ZXN0ICJ4JGFzX2xpbmVub18xJyRhc19ydW4nIiAhPSAieCRhc19saW5lbm9fMickYXNfcnVuJyIgJiYKKyAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSckYXNfcnVuJyArIDFgIiA9ICJ4JGFzX2xpbmVub18yJyRhc19ydW4nIicgfHwgeworICAjIEJsYW1lIExlZSBFLiBNY01haG9uICgxOTMxLTE5ODkpIGZvciBzZWQncyBzeW50YXguICA6LSkKKyAgc2VkIC1uICcKKyAgICBwCisgICAgL1skXUxJTkVOTy89CisgICcgPCRhc19teXNlbGYgfAogICAgIHNlZCAnCisgICAgICBzL1skXUxJTkVOTy4qLyYtLworICAgICAgdCBsaW5lbm8KKyAgICAgIGIKKyAgICAgIDpsaW5lbm8KICAgICAgIE4KLSAgICAgIHMsJCwtLAotICAgICAgOiBsb29wCi0gICAgICBzLF5cKFsnJGFzX2NyX2RpZ2l0cyddKlwpXCguKlwpWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX11cKSxcMVwyXDFcMywKKyAgICAgIDpsb29wCisgICAgICBzL1skXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dLipcblwpXCguKlwpL1wyXDFcMi8KICAgICAgIHQgbG9vcAotICAgICAgcywtJCwsCi0gICAgICBzLF5bJyRhc19jcl9kaWdpdHMnXSpcbiwsCisgICAgICBzLy1cbi4qLy8KICAgICAnID4kYXNfbWUubGluZW5vICYmCi0gIGNobW9kICt4ICRhc19tZS5saW5lbm8gfHwKLSAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICBjaG1vZCAreCAiJGFzX21lLmxpbmVubyIgfHwKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyOyBhc19mbl9leGl0IDE7IH0KIAorICAjIElmIHdlIGhhZCB0byByZS1leGVjdXRlIHdpdGggJENPTkZJR19TSEVMTCwgd2UncmUgZW5zdXJlZCB0byBoYXZlCisgICMgYWxyZWFkeSBkb25lIHRoYXQsIHNvIGVuc3VyZSB3ZSBkb24ndCB0cnkgdG8gZG8gc28gYWdhaW4gYW5kIGZhbGwKKyAgIyBpbiBhbiBpbmZpbml0ZSBsb29wLiAgVGhpcyBoYXMgYWxyZWFkeSBoYXBwZW5lZCBpbiBwcmFjdGljZS4KKyAgX2FzX2Nhbl9yZWV4ZWM9bm87IGV4cG9ydCBfYXNfY2FuX3JlZXhlYwogICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcwogICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKLSAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpYmxlIHRvIHRoaXMpLgotICAuIC4vJGFzX21lLmxpbmVubworICAjIG9yaWdpbmFsIGFuZCBzbyBvbi4gIEF1dG9jb25mIGlzIGVzcGVjaWFsbHkgc2Vuc2l0aXZlIHRvIHRoaXMpLgorICAuICIuLyRhc19tZS5saW5lbm8iCiAgICMgRXhpdCBzdGF0dXMgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kLgogICBleGl0CiB9CiAKLQotY2FzZSBgZWNobyAidGVzdGluZ1xjIjsgZWNobyAxLDIsM2AsYGVjaG8gLW4gdGVzdGluZzsgZWNobyAxLDIsM2AgaW4KLSAgKmMqLC1uKikgRUNIT19OPSBFQ0hPX0M9JwotJyBFQ0hPX1Q9JwknIDs7Ci0gICpjKiwqICApIEVDSE9fTj0tbiBFQ0hPX0M9IEVDSE9fVD0gOzsKLSAgKikgICAgICAgRUNIT19OPSBFQ0hPX0M9J1xjJyBFQ0hPX1Q9IDs7CitFQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQorY2FzZSBgZWNobyAtbiB4YCBpbiAjKCgoKCgKKy1uKikKKyAgY2FzZSBgZWNobyAneHlcYydgIGluCisgICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgorICB4eSkgIEVDSE9fQz0nXGMnOzsKKyAgKikgICBlY2hvIGBlY2hvIGtzaDg4IGJ1ZyBvbiBBSVggNi4xYCA+IC9kZXYvbnVsbAorICAgICAgIEVDSE9fVD0nCSc7OworICBlc2FjOzsKKyopCisgIEVDSE9fTj0nLW4nOzsKIGVzYWMKIAotaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYXNfZXhwcj1leHByCi1lbHNlCi0gIGFzX2V4cHI9ZmFsc2UKLWZpCi0KIHJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCi1lY2hvID5jb25mJCQuZmlsZQotaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCi0gICMgV2UgY291bGQganVzdCBjaGVjayBmb3IgREpHUFA7IGJ1dCB0aGlzIHRlc3QgYSkgd29ya3MgYikgaXMgbW9yZSBnZW5lcmljCi0gICMgYW5kIGMpIHdpbGwgcmVtYWluIHZhbGlkIG9uY2UgREpHUFAgc3VwcG9ydHMgc3ltbGlua3MgKERKR1BQIDIuMDQpLgotICBpZiB0ZXN0IC1mIGNvbmYkJC5leGU7IHRoZW4KLSAgICAjIERvbid0IHVzZSBsbiBhdCBhbGw7IHdlIGRvbid0IGhhdmUgYW55IGxpbmtzCi0gICAgYXNfbG5fcz0nY3AgLXAnCi0gIGVsc2UKK2lmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgorICBybSAtZiBjb25mJCQuZGlyL2NvbmYkJC5maWxlCitlbHNlCisgIHJtIC1mIGNvbmYkJC5kaXIKKyAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorZmkKK2lmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4KKyAgaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCiAgICAgYXNfbG5fcz0nbG4gLXMnCisgICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKKyAgICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgorICAgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgorICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcFInLgorICAgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKyAgICAgIGFzX2xuX3M9J2NwIC1wUicKKyAgZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhc19sbl9zPWxuCisgIGVsc2UKKyAgICBhc19sbl9zPSdjcCAtcFInCiAgIGZpCi1lbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgotICBhc19sbl9zPWxuCiBlbHNlCi0gIGFzX2xuX3M9J2NwIC1wJworICBhc19sbl9zPSdjcCAtcFInCiBmaQotcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKK3JtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKIAogaWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgotICBhc19ta2Rpcl9wPToKKyAgYXNfbWtkaXJfcD0nbWtkaXIgLXAgIiRhc19kaXIiJwogZWxzZQogICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAogICBhc19ta2Rpcl9wPWZhbHNlCiBmaQogCi1hc19leGVjdXRhYmxlX3A9InRlc3QgLWYiCithc190ZXN0X3g9J3Rlc3QgLXgnCithc19leGVjdXRhYmxlX3A9YXNfZm5fZXhlY3V0YWJsZV9wCiAKICMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KIGFzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCkBAIC0yMjUsMTQgKzUyNiw3IEBACiBhc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgogCiAKLSMgSUZTCi0jIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLgotYXNfbmw9JwotJwotSUZTPSIgCSRhc19ubCIKIAotIyBDRFBBVEguCi0kYXNfdW5zZXQgQ0RQQVRICiAKIAogU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KQEAgLTI0MCwyNCArNTM0LDYgQEAKICMgSG93IHdlcmUgd2UgcnVuPwogYXRfY2xpX2FyZ3M9IiRAIgogCi0jIExvYWQgdGhlIGNvbmZpZyBmaWxlLgotZm9yIGF0X2ZpbGUgaW4gYXRjb25maWcgYXRsb2NhbAotZG8KLSAgdGVzdCAtciAkYXRfZmlsZSB8fCBjb250aW51ZQotICAuIC4vJGF0X2ZpbGUgfHwgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIGNvbnRlbnQ6ICRhdF9maWxlIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZG9uZQotCi0jIGF0Y29uZmlnIGRlbGl2ZXJzIHBhdGhzIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3RvcnkgdGhlIHRlc3Qgc3VpdGUgaXMKLSMgaW4sIGJ1dCB0aGUgZ3JvdXBzIHRoZW1zZWx2ZXMgYXJlIHJ1biBpbiB0ZXN0c3VpdGUtZGlyL2dyb3VwLWRpci4KLWlmIHRlc3QgLW4gIiRhdF90b3Bfc3JjZGlyIjsgdGhlbgotICBidWlsZGRpcj0uLi8uLgotICBmb3IgYXRfZGlyIGluIHNyY2RpciB0b3Bfc3JjZGlyIHRvcF9idWlsZGRpcgotICBkbwotICAgIGF0X3ZhbD1gZXZhbCBlY2hvICckeydhdF8kYXRfZGlyJ30nYAotICAgIGV2YWwgIiRhdF9kaXI9XCRhdF92YWwvLi4vLi4iCi0gIGRvbmUKLWZpCiAKICMgTm90IGFsbCBzaGVsbHMgaGF2ZSB0aGUgJ3RpbWVzJyBidWlsdGluOyB0aGUgc3Vic2hlbGwgaXMgbmVlZGVkIHRvIG1ha2UKICMgc3VyZSB3ZSBkaXNjYXJkIHRoZSAndGltZXM6IG5vdCBmb3VuZCcgbWVzc2FnZSBmcm9tIHRoZSBzaGVsbC4KQEAgLTI2OCwyMDggKzU0NCw0NDAgQEAKIGF0X2RlYnVnX2FyZ3M9CiAjIC1lIHNldHMgdG8gdHJ1ZQogYXRfZXJyZXhpdF9wPWZhbHNlCi0jIFNoYWxsIHdlIGJlIHZlcmJvc2U/CisjIFNoYWxsIHdlIGJlIHZlcmJvc2U/ICAnOicgbWVhbnMgbm8sIGVtcHR5IG1lYW5zIHllcy4KIGF0X3ZlcmJvc2U9OgotYXRfcXVpZXQ9ZWNobworYXRfcXVpZXQ9CisjIFJ1bm5pbmcgc2V2ZXJhbCBqb2JzIGluIHBhcmFsbGVsLCAwIG1lYW5zIGFzIG1hbnkgYXMgdGVzdCBncm91cHMuCithdF9qb2JzPTEKK2F0X3RyYWNlb249OgorYXRfdHJhY2VfZWNobz06CithdF9jaGVja19maWx0ZXJfdHJhY2U9OgogCiAjIFNoYWxsIHdlIGtlZXAgdGhlIGRlYnVnIHNjcmlwdHM/ICBNdXN0IGJlIGA6JyB3aGVuIHRoZSBzdWl0ZSBpcwogIyBydW4gYnkgYSBkZWJ1ZyBzY3JpcHQsIHNvIHRoYXQgdGhlIHNjcmlwdCBkb2Vzbid0IHJlbW92ZSBpdHNlbGYuCiBhdF9kZWJ1Z19wPWZhbHNlCiAjIERpc3BsYXkgaGVscCBtZXNzYWdlPwogYXRfaGVscF9wPWZhbHNlCisjIERpc3BsYXkgdGhlIHZlcnNpb24gbWVzc2FnZT8KK2F0X3ZlcnNpb25fcD1mYWxzZQogIyBMaXN0IHRlc3QgZ3JvdXBzPwogYXRfbGlzdF9wPWZhbHNlCisjIC0tY2xlYW4KK2F0X2NsZWFuPWZhbHNlCiAjIFRlc3QgZ3JvdXBzIHRvIHJ1bgogYXRfZ3JvdXBzPQorIyBXaGV0aGVyIHRvIHJlcnVuIGZhaWxlZCB0ZXN0cy4KK2F0X3JlY2hlY2s9CisjIFdoZXRoZXIgYSB3cml0ZSBmYWlsdXJlIG9jY3VycmVkCithdF93cml0ZV9mYWlsPTAKIAotIyBUaGUgZGlyZWN0b3J5IHdlIGFyZSBpbi4KKyMgVGhlIGRpcmVjdG9yeSB3ZSBydW4gdGhlIHN1aXRlIGluLiAgRGVmYXVsdCB0byAuIGlmIG5vIC1DIG9wdGlvbi4KIGF0X2Rpcj1gcHdkYAotIyBUaGUgZGlyZWN0b3J5IHRoZSB3aG9sZSBzdWl0ZSB3b3JrcyBpbi4KLSMgU2hvdWxkIGJlIGFic29sdXRlbHkgdG8gbGV0IHRoZSB1c2VyIGBjZCcgYXQgd2lsbC4KLWF0X3N1aXRlX2Rpcj0kYXRfZGlyLyRhc19tZS5kaXIKLSMgVGhlIGZpbGUgY29udGFpbmluZyB0aGUgc3VpdGUuCi1hdF9zdWl0ZV9sb2c9JGF0X2Rpci8kYXNfbWUubG9nCi0jIFRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGxvY2F0aW9uIG9mIHRoZSBsYXN0IEFUX0NIRUNLLgotYXRfY2hlY2tfbGluZV9maWxlPSRhdF9zdWl0ZV9kaXIvYXQtY2hlY2stbGluZQotIyBUaGUgZmlsZSBjb250YWluaW5nIHRoZSBleGl0IHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kLgotYXRfc3RhdHVzX2ZpbGU9JGF0X3N1aXRlX2Rpci9hdC1zdGF0dXMKLSMgVGhlIGZpbGVzIGNvbnRhaW5pbmcgdGhlIG91dHB1dCBvZiB0aGUgdGVzdGVkIGNvbW1hbmRzLgotYXRfc3Rkb3V0PSRhdF9zdWl0ZV9kaXIvYXQtc3Rkb3V0Ci1hdF9zdGRlcjE9JGF0X3N1aXRlX2Rpci9hdC1zdGRlcjEKLWF0X3N0ZGVycj0kYXRfc3VpdGVfZGlyL2F0LXN0ZGVycgotIyBUaGUgZmlsZSBjb250YWluaW5nIGRhdGVzLgotYXRfdGltZXNfZmlsZT0kYXRfc3VpdGVfZGlyL2F0LXRpbWVzCisjIEFuIGFic29sdXRlIHJlZmVyZW5jZSB0byB0aGlzIHRlc3RzdWl0ZSBzY3JpcHQuCitjYXNlICRhc19teXNlbGYgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhdF9teXNlbGY9JGFzX215c2VsZiA7OworICAqICkgYXRfbXlzZWxmPSRhdF9kaXIvJGFzX215c2VsZiA7OworZXNhYworIyBXaGV0aGVyIC1DIGlzIGluIGVmZmVjdC4KK2F0X2NoYW5nZV9kaXI9ZmFsc2UKIAorIyBXaGV0aGVyIHRvIGVuYWJsZSBjb2xvcmVkIHRlc3QgcmVzdWx0cy4KK2F0X2NvbG9yPWF1dG8KICMgTGlzdCBvZiB0aGUgdGVzdGVkIHByb2dyYW1zLgogYXRfdGVzdGVkPSdiaXNvbicKLSMgTGlzdCBvZiB0aGUgYWxsIHRoZSB0ZXN0IGdyb3Vwcy4KLWF0X2dyb3Vwc19hbGw9JyBiYW5uZXItMSAxIDIgMyA0IDUgNiA3IDggOSAxMCBiYW5uZXItMiAxMSAxMiAxMyAxNCAxNSAxNiAxNyAxOCAxOSAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAyOCAyOSAzMCBiYW5uZXItMyAzMSAzMiAzMyAzNCBiYW5uZXItNCAzNSAzNiAzNyAzOCAzOSA0MCBiYW5uZXItNSA0MSA0MiA0MyA0NCA0NSBiYW5uZXItNiA0NiA0NyA0OCA0OSBiYW5uZXItNyA1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NyBiYW5uZXItOCA1OCA1OSA2MCA2MSA2MiA2MyA2NCA2NSA2NiA2NyA2OCA2OSBiYW5uZXItOSA3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NyA3OCA3OSA4MCA4MSA4MiA4MyBiYW5uZXItMTAgODQgODUgODYgODcgODggODkgOTAgOTEgOTIgOTMgOTQgOTUgOTYgOTcgYmFubmVyLTExIDk4IDk5IDEwMCAxMDEgMTAyIGJhbm5lci0xMiAxMDMgMTA0IGJhbm5lci0xMyAxMDUgMTA2IDEwNyAxMDggMTA5IGJhbm5lci0xNCAxMTAgMTExIDExMiBiYW5uZXItMTUgMTEzIDExNCAxMTUgMTE2IDExNyAxMTggMTE5IDEyMCAxMjEgMTIyIDEyMyAxMjQgMTI1IDEyNiAxMjcgMTI4IDEyOSAxMzAgYmFubmVyLTE2IDEzMSAxMzIgYmFubmVyLTE3IDEzMyAxMzQgMTM1IDEzNiAxMzcgMTM4IDEzOSAxNDAgMTQxIGJhbm5lci0xOCAxNDIgMTQzIDE0NCAxNDUgMTQ2IDE0NyAxNDggMTQ5IDE1MCAxNTEgMTUyIDE1MyAxNTQgMTU1IDE1NiAxNTcgMTU4JwotIyBBcyBtYW55IGRvdHMgYXMgdGhlcmUgYXJlIGRpZ2l0cyBpbiB0aGUgbGFzdCB0ZXN0IGdyb3VwIG51bWJlci4KKyMgQXMgbWFueSBxdWVzdGlvbiBtYXJrcyBhcyB0aGVyZSBhcmUgZGlnaXRzIGluIHRoZSBsYXN0IHRlc3QgZ3JvdXAgbnVtYmVyLgogIyBVc2VkIHRvIG5vcm1hbGl6ZSB0aGUgdGVzdCBncm91cCBudW1iZXJzIHNvIHRoYXQgYGxzJyBsaXN0cyB0aGVtIGluCiAjIG51bWVyaWNhbCBvcmRlci4KLWF0X2Zvcm1hdD0nLi4uJworYXRfZm9ybWF0PSc/Pz8nCiAjIERlc2NyaXB0aW9uIG9mIGFsbCB0aGUgdGVzdCBncm91cHMuCi1hdF9oZWxwX2FsbD0nMTtpbnB1dC5hdDoyODtJbnZhbGlkIGRvbGxhci1uOzsKLTI7aW5wdXQuYXQ6NDY7SW52YWxpZCBAbjs7Ci0zO2lucHV0LmF0OjY0O1R5cGUgQ2xhc2hlczs7Ci00O2lucHV0LmF0Ojg5O1VudXNlZCB2YWx1ZXM7OwotNTtpbnB1dC5hdDoxNTc7SW5jb21wYXRpYmxlIEFsaWFzZXM7OwotNjtpbnB1dC5hdDoxOTg7VG9ydHVyaW5nIHRoZSBTY2FubmVyOzsKLTc7aW5wdXQuYXQ6MzU3O1R5cGVkIHN5bWJvbCBhbGlhc2VzOzsKLTg7aW5wdXQuYXQ6MzkzO1JlcXVpcmUgMS4wOzsKLTk7aW5wdXQuYXQ6Mzk0O1JlcXVpcmUgMi4zOzsKLTEwO2lucHV0LmF0OjM5NjtSZXF1aXJlIDEwMC4wOzsKLTExO291dHB1dC5hdDo0MztPdXRwdXQgZmlsZXM6ICAtZHYgOzsKLTEyO291dHB1dC5hdDo0NjtPdXRwdXQgZmlsZXM6ICAtZHYgPiYtOzsKLTEzO291dHB1dC5hdDo0ODtPdXRwdXQgZmlsZXM6ICAtZHYgLW8gZm9vLmMgOzsKLTE0O291dHB1dC5hdDo1MDtPdXRwdXQgZmlsZXM6ICAtZHYgLW8gZm9vLnRhYi5jIDs7Ci0xNTtvdXRwdXQuYXQ6NTI7T3V0cHV0IGZpbGVzOiAgLWR2IC15IDs7Ci0xNjtvdXRwdXQuYXQ6NTQ7T3V0cHV0IGZpbGVzOiAgLWR2IC1iIGJhciA7OwotMTc7b3V0cHV0LmF0OjU2O091dHB1dCBmaWxlczogIC1kdiAtZyAtbyBmb28uYyA7OwotMTg7b3V0cHV0LmF0OjYwO091dHB1dCBmaWxlczogJWRlZmluZXMgJXZlcmJvc2UgIDs7Ci0xOTtvdXRwdXQuYXQ6NjI7T3V0cHV0IGZpbGVzOiAlZGVmaW5lcyAldmVyYm9zZSAleWFjYyAgOzsKLTIwO291dHB1dC5hdDo2NTtPdXRwdXQgZmlsZXM6ICVkZWZpbmVzICV2ZXJib3NlICV5YWNjICA7OwotMjE7b3V0cHV0LmF0OjY5O091dHB1dCBmaWxlczogJWZpbGUtcHJlZml4PSJiYXIiICVkZWZpbmVzICV2ZXJib3NlICA7OwotMjI7b3V0cHV0LmF0OjcxO091dHB1dCBmaWxlczogJW91dHB1dD0iYmFyLmMiICVkZWZpbmVzICV2ZXJib3NlICV5YWNjICA7OwotMjM7b3V0cHV0LmF0Ojc1O091dHB1dCBmaWxlczogJWZpbGUtcHJlZml4PSJiYXoiICVvdXRwdXQ9ImJhci5jIiAlZGVmaW5lcyAldmVyYm9zZSAleWFjYyAgOzsKLTI0O291dHB1dC5hdDo4MDtPdXRwdXQgZmlsZXM6ICVkZWZpbmVzICV2ZXJib3NlICA7OwotMjU7b3V0cHV0LmF0OjgzO091dHB1dCBmaWxlczogJWRlZmluZXMgJXZlcmJvc2UgIC1vIGZvby5jIDs7Ci0yNjtvdXRwdXQuYXQ6ODc7T3V0cHV0IGZpbGVzOiAgLS1kZWZpbmVzPWZvby5ocHAgLW8gZm9vLmMrKyA7OwotMjc7b3V0cHV0LmF0OjkxO091dHB1dCBmaWxlczogIC1vIGZvby5jKysgLS1ncmFwaD1mb28uZ3BoIDs7Ci0yODtvdXRwdXQuYXQ6MTA1O091dHB1dCBmaWxlczogJXNrZWxldG9uICJsYWxyMS5jYyIgJWRlZmluZXMgJXZlcmJvc2UgIDs7Ci0yOTtvdXRwdXQuYXQ6MTA5O091dHB1dCBmaWxlczogJXNrZWxldG9uICJsYWxyMS5jYyIgJWRlZmluZXMgJXZlcmJvc2UgIDs7Ci0zMDtvdXRwdXQuYXQ6MTE0O091dHB1dCBmaWxlczogJXNrZWxldG9uICJsYWxyMS5jYyIgJWRlZmluZXMgJXZlcmJvc2UgLW8gc3ViZGlyL2Zvby5jYyA7OwotMzE7c2V0cy5hdDo2NjtOdWxsYWJsZTs7Ci0zMjtzZXRzLmF0OjE1MTtCcm9rZW4gQ2xvc3VyZTs7Ci0zMztzZXRzLmF0OjE5MztGaXJzdHM7OwotMzQ7c2V0cy5hdDoyNjk7QWNjZXB0OzsKLTM1O3JlZHVjZS5hdDoyNjtVc2VsZXNzIFRlcm1pbmFsczs7Ci0zNjtyZWR1Y2UuYXQ6NzA7VXNlbGVzcyBOb250ZXJtaW5hbHM7OwotMzc7cmVkdWNlLmF0OjEyNTtVc2VsZXNzIFJ1bGVzO3JlcG9ydDsKLTM4O3JlZHVjZS5hdDoyMTI7UmVkdWNlZCBBdXRvbWF0b247cmVwb3J0OwotMzk7cmVkdWNlLmF0OjMwMTtVbmRlcml2YWJsZSBSdWxlcztyZXBvcnQ7Ci00MDtyZWR1Y2UuYXQ6MzQyO0VtcHR5IExhbmd1YWdlOzsKLTQxO3N5bmNsaW5lcy5hdDo5NTtQcm9sb2d1ZSBzeW5jaCBsaW5lOzsKLTQyO3N5bmNsaW5lcy5hdDoxMTU7JXVuaW9uIHN5bmNoIGxpbmU7OwotNDM7c3luY2xpbmVzLmF0OjEzODtQb3N0cHJvbG9ndWUgc3luY2ggbGluZTs7Ci00NDtzeW5jbGluZXMuYXQ6MTU3O0FjdGlvbiBzeW5jaCBsaW5lOzsKLTQ1O3N5bmNsaW5lcy5hdDoxNzU7RXBpbG9ndWUgc3luY2ggbGluZTs7Ci00NjtoZWFkZXJzLmF0OjI3OyV1bmlvbiBhbmQgLS1kZWZpbmVzOzsKLTQ3O2hlYWRlcnMuYXQ6Nzc7SW52YWxpZCBDUFAgZ3VhcmRzOiBpbnB1dC9pbnB1dDs7Ci00ODtoZWFkZXJzLmF0Ojc4O0ludmFsaWQgQ1BQIGd1YXJkczogOWZvbzs7Ci00OTtoZWFkZXJzLmF0Ojg3O2V4cG9ydCBZWUxUWVBFOzsKLTUwO2FjdGlvbnMuYXQ6MjU7TWlkLXJ1bGUgYWN0aW9uczs7Ci01MTthY3Rpb25zLmF0OjkxO0V4b3RpYyBEb2xsYXJzOzsKLTUyO2FjdGlvbnMuYXQ6NTI3O1ByaW50ZXJzIGFuZCBEZXN0cnVjdG9ycyA6IDs7Ci01MzthY3Rpb25zLmF0OjUyODtQcmludGVycyBhbmQgRGVzdHJ1Y3RvcnMgd2l0aCB1bmlvbjogOzsKLTU0O2FjdGlvbnMuYXQ6NTMzO1ByaW50ZXJzIGFuZCBEZXN0cnVjdG9ycyA6ICVkZWZpbmVzICVza2VsZXRvbiAibGFscjEuY2MiO2MrKzsKLTU1O2FjdGlvbnMuYXQ6NTM0O1ByaW50ZXJzIGFuZCBEZXN0cnVjdG9ycyB3aXRoIHVuaW9uOiAlZGVmaW5lcyAlc2tlbGV0b24gImxhbHIxLmNjIjtjKys7Ci01NjthY3Rpb25zLmF0OjUzNjtQcmludGVycyBhbmQgRGVzdHJ1Y3RvcnMgOiAlZ2xyLXBhcnNlcjs7Ci01NzthY3Rpb25zLmF0OjUzNztQcmludGVycyBhbmQgRGVzdHJ1Y3RvcnMgd2l0aCB1bmlvbjogJWdsci1wYXJzZXI7OwotNTg7Y29uZmxpY3RzLmF0OjMyO1MvUiBpbiBpbml0aWFsOzsKLTU5O2NvbmZsaWN0cy5hdDo1Mjslbm9uYXNzb2MgYW5kIGVvZjs7Ci02MDtjb25mbGljdHMuYXQ6MTI4O1VucmVzb2x2ZWQgU1IgQ29uZmxpY3RzO3JlcG9ydDsKLTYxO2NvbmZsaWN0cy5hdDoyMzU7UmVzb2x2ZWQgU1IgQ29uZmxpY3RzO3JlcG9ydDsKLTYyO2NvbmZsaWN0cy5hdDozNTc7RGVmYXVsdGVkIENvbmZsaWN0ZWQgUmVkdWN0aW9uO3JlcG9ydDsKLTYzO2NvbmZsaWN0cy5hdDo0NzY7JWV4cGVjdCBub3QgZW5vdWdoOzsKLTY0O2NvbmZsaWN0cy5hdDo0OTY7JWV4cGVjdCByaWdodDs7Ci02NTtjb25mbGljdHMuYXQ6NTEzOyVleHBlY3QgdG9vIG11Y2g7OwotNjY7Y29uZmxpY3RzLmF0OjUzMzslZXhwZWN0IHdpdGggcmVkdWNlIGNvbmZsaWN0czs7Ci02Nztjb25mbGljdHMuYXQ6NTUzOyVuby1kZWZhdWx0LXByZWMgd2l0aG91dCAlcHJlYzs7Ci02ODtjb25mbGljdHMuYXQ6NTc5OyVuby1kZWZhdWx0LXByZWMgd2l0aCAlcHJlYzs7Ci02OTtjb25mbGljdHMuYXQ6NjAzOyVkZWZhdWx0LXByZWM7OwotNzA7Y2FsYy5hdDo1NTA7Q2FsY3VsYXRvciA7OwotNzE7Y2FsYy5hdDo1NTI7Q2FsY3VsYXRvciAlZGVmaW5lczs7Ci03MjtjYWxjLmF0OjU1MztDYWxjdWxhdG9yICVsb2NhdGlvbnM7OwotNzM7Y2FsYy5hdDo1NTQ7Q2FsY3VsYXRvciAlbmFtZS1wcmVmaXg9ImNhbGMiOzsKLTc0O2NhbGMuYXQ6NTU1O0NhbGN1bGF0b3IgJXZlcmJvc2U7OwotNzU7Y2FsYy5hdDo1NTY7Q2FsY3VsYXRvciAleWFjYzs7Ci03NjtjYWxjLmF0OjU1NztDYWxjdWxhdG9yICVlcnJvci12ZXJib3NlOzsKLTc3O2NhbGMuYXQ6NTU5O0NhbGN1bGF0b3IgJXB1cmUtcGFyc2VyICVsb2NhdGlvbnM7OwotNzg7Y2FsYy5hdDo1NjA7Q2FsY3VsYXRvciAlZXJyb3ItdmVyYm9zZSAlbG9jYXRpb25zOzsKLTc5O2NhbGMuYXQ6NTYyO0NhbGN1bGF0b3IgJWVycm9yLXZlcmJvc2UgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjOzsKLTgwO2NhbGMuYXQ6NTY0O0NhbGN1bGF0b3IgJWRlYnVnOzsKLTgxO2NhbGMuYXQ6NTY1O0NhbGN1bGF0b3IgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVsb2NhdGlvbnMgJWRlZmluZXMgJW5hbWUtcHJlZml4PSJjYWxjIiAldmVyYm9zZSAleWFjYzs7Ci04MjtjYWxjLmF0OjU2NztDYWxjdWxhdG9yICVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjOzsKLTgzO2NhbGMuYXQ6NTY5O0NhbGN1bGF0b3IgJXB1cmUtcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MgJXBhcnNlLXBhcmFtIHtzZW1hbnRpY192YWx1ZSAqcmVzdWx0fSAlcGFyc2UtcGFyYW0ge2ludCAqY291bnR9OzsKLTg0O2NhbGMuYXQ6NTg2O0NhbGN1bGF0b3IgJWdsci1wYXJzZXIgOzsKLTg1O2NhbGMuYXQ6NTg4O0NhbGN1bGF0b3IgJWdsci1wYXJzZXIgJWRlZmluZXM7OwotODY7Y2FsYy5hdDo1ODk7Q2FsY3VsYXRvciAlZ2xyLXBhcnNlciAlbG9jYXRpb25zOzsKLTg3O2NhbGMuYXQ6NTkwO0NhbGN1bGF0b3IgJWdsci1wYXJzZXIgJW5hbWUtcHJlZml4PSJjYWxjIjs7Ci04ODtjYWxjLmF0OjU5MTtDYWxjdWxhdG9yICVnbHItcGFyc2VyICV2ZXJib3NlOzsKLTg5O2NhbGMuYXQ6NTkyO0NhbGN1bGF0b3IgJWdsci1wYXJzZXIgJXlhY2M7OwotOTA7Y2FsYy5hdDo1OTM7Q2FsY3VsYXRvciAlZ2xyLXBhcnNlciAlZXJyb3ItdmVyYm9zZTs7Ci05MTtjYWxjLmF0OjU5NTtDYWxjdWxhdG9yICVnbHItcGFyc2VyICVwdXJlLXBhcnNlciAlbG9jYXRpb25zOzsKLTkyO2NhbGMuYXQ6NTk2O0NhbGN1bGF0b3IgJWdsci1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWxvY2F0aW9uczs7Ci05MztjYWxjLmF0OjU5ODtDYWxjdWxhdG9yICVnbHItcGFyc2VyICVlcnJvci12ZXJib3NlICVsb2NhdGlvbnMgJWRlZmluZXMgJW5hbWUtcHJlZml4PSJjYWxjIiAldmVyYm9zZSAleWFjYzs7Ci05NDtjYWxjLmF0OjYwMDtDYWxjdWxhdG9yICVnbHItcGFyc2VyICVkZWJ1Zzs7Ci05NTtjYWxjLmF0OjYwMTtDYWxjdWxhdG9yICVnbHItcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2M7OwotOTY7Y2FsYy5hdDo2MDM7Q2FsY3VsYXRvciAlZ2xyLXBhcnNlciAlcHVyZS1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVsb2NhdGlvbnMgJWRlZmluZXMgJW5hbWUtcHJlZml4PSJjYWxjIiAldmVyYm9zZSAleWFjYzs7Ci05NztjYWxjLmF0OjYwNTtDYWxjdWxhdG9yICVnbHItcGFyc2VyICVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjICVwYXJzZS1wYXJhbSB7c2VtYW50aWNfdmFsdWUgKnJlc3VsdH0gJXBhcnNlLXBhcmFtIHtpbnQgKmNvdW50fTs7Ci05ODtjYWxjLmF0OjYyMTtDYWxjdWxhdG9yICVza2VsZXRvbiAibGFscjEuY2MiICVkZWZpbmVzICVsb2NhdGlvbnMgO2MrKzsKLTk5O2NhbGMuYXQ6NjIyO0NhbGN1bGF0b3IgJXNrZWxldG9uICJsYWxyMS5jYyIgJWRlZmluZXMgJWxvY2F0aW9ucyAlZXJyb3ItdmVyYm9zZSAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjO2MrKzsKLTEwMDtjYWxjLmF0OjYyNDtDYWxjdWxhdG9yICVza2VsZXRvbiAibGFscjEuY2MiICVkZWZpbmVzICVsb2NhdGlvbnMgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2M7YysrOwotMTAxO2NhbGMuYXQ6NjI2O0NhbGN1bGF0b3IgJXNrZWxldG9uICJsYWxyMS5jYyIgJWRlZmluZXMgJWxvY2F0aW9ucyAlcHVyZS1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2M7YysrOwotMTAyO2NhbGMuYXQ6NjI4O0NhbGN1bGF0b3IgJXNrZWxldG9uICJsYWxyMS5jYyIgJWRlZmluZXMgJWxvY2F0aW9ucyAlcHVyZS1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MgJXBhcnNlLXBhcmFtIHtzZW1hbnRpY192YWx1ZSAqcmVzdWx0fSAlcGFyc2UtcGFyYW0ge2ludCAqY291bnR9O2MrKzsKLTEwMztjYWxjLmF0OjY1MTtDYWxjdWxhdG9yICVza2VsZXRvbiAiZ2xyLmNjIiAlZGVmaW5lcyAlbG9jYXRpb25zICVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJW5hbWUtcHJlZml4PSJjYWxjIiAldmVyYm9zZSAleWFjYztjKys7Ci0xMDQ7Y2FsYy5hdDo2NTM7Q2FsY3VsYXRvciAlc2tlbGV0b24gImdsci5jYyIgJWRlZmluZXMgJWxvY2F0aW9ucyAlcHVyZS1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MgJXBhcnNlLXBhcmFtIHtzZW1hbnRpY192YWx1ZSAqcmVzdWx0fSAlcGFyc2UtcGFyYW0ge2ludCAqY291bnR9O2MrKzsKLTEwNTt0b3J0dXJlLmF0OjE0MDtCaWcgdHJpYW5nbGU7OwotMTA2O3RvcnR1cmUuYXQ6MjMyO0JpZyBob3Jpem9udGFsOzsKLTEwNzt0b3J0dXJlLmF0OjM2ODtNYW55IGxvb2stYWhlYWQgdG9rZW5zOzsKLTEwODt0b3J0dXJlLmF0OjQ0NTtFeHBsb2RpbmcgdGhlIFN0YWNrIFNpemUgd2l0aCBBbGxvY2E7OwotMTA5O3RvcnR1cmUuYXQ6NDcxO0V4cGxvZGluZyB0aGUgU3RhY2sgU2l6ZSB3aXRoIE1hbGxvYzs7Ci0xMTA7ZXhpc3RpbmcuYXQ6MjY7R05VIEFXSyBHcmFtbWFyOzsKLTExMTtleGlzdGluZy5hdDozNjQ7R05VIENpbSBHcmFtbWFyOzsKLTExMjtleGlzdGluZy5hdDo5ODA7R05VIHBpYyBHcmFtbWFyOzsKLTExMztyZWdyZXNzaW9uLmF0OjI4O1RyaXZpYWwgZ3JhbW1hcnM7OwotMTE0O3JlZ3Jlc3Npb24uYXQ6NTc7RWFybHkgdG9rZW4gZGVmaW5pdGlvbnM7OwotMTE1O3JlZ3Jlc3Npb24uYXQ6OTU7QnJhY2VzIHBhcnNpbmc7OwotMTE2O3JlZ3Jlc3Npb24uYXQ6MTE3O0R1cGxpY2F0ZSBzdHJpbmc7OwotMTE3O3JlZ3Jlc3Npb24uYXQ6MTQzO1J1bGUgTGluZSBOdW1iZXJzO3JlcG9ydDsKLTExODtyZWdyZXNzaW9uLmF0OjI4NztNaXhpbmcgJXRva2VuIHN0eWxlczs7Ci0xMTk7cmVncmVzc2lvbi5hdDozMTA7SW52YWxpZCBpbnB1dHM7OwotMTIwO3JlZ3Jlc3Npb24uYXQ6MzM2O0ludmFsaWQgaW5wdXRzIHdpdGgge307OwotMTIxO3JlZ3Jlc3Npb24uYXQ6MzYzO1Rva2VuIGRlZmluaXRpb25zOzsKLTEyMjtyZWdyZXNzaW9uLmF0OjQxNjtDaGFyYWN0ZXJzIEVzY2FwZXM7OwotMTIzO3JlZ3Jlc3Npb24uYXQ6NDQ3O1dlYjJjIFJlcG9ydDtyZXBvcnQ7Ci0xMjQ7cmVncmVzc2lvbi5hdDo2MjQ7V2ViMmMgQWN0aW9ucztyZXBvcnQ7Ci0xMjU7cmVncmVzc2lvbi5hdDo4NjY7RGFuY2VyIDs7Ci0xMjY7cmVncmVzc2lvbi5hdDo4Njc7RGFuY2VyICVnbHItcGFyc2VyOzsKLTEyNztyZWdyZXNzaW9uLmF0Ojg2ODtEYW5jZXIgJXNrZWxldG9uICJsYWxyMS5jYyI7YysrOwotMTI4O3JlZ3Jlc3Npb24uYXQ6OTYzO0V4cGVjdGluZyB0d28gdG9rZW5zIDs7Ci0xMjk7cmVncmVzc2lvbi5hdDo5NjQ7RXhwZWN0aW5nIHR3byB0b2tlbnMgJWdsci1wYXJzZXI7OwotMTMwO3JlZ3Jlc3Npb24uYXQ6OTY1O0V4cGVjdGluZyB0d28gdG9rZW5zICVza2VsZXRvbiAibGFscjEuY2MiO2MrKzsKLTEzMTtjKysuYXQ6MTAyO0RveHlnZW4gUHVibGljIERvY3VtZW50YXRpb247OwotMTMyO2MrKy5hdDoxMDM7RG94eWdlbiBQcml2YXRlIERvY3VtZW50YXRpb247OwotMTMzO2N4eC10eXBlLmF0OjQxMjtHTFI6IFJlc29sdmUgYW1iaWd1aXR5LCBpbXB1cmUsIG5vIGxvY2F0aW9uczs7Ci0xMzQ7Y3h4LXR5cGUuYXQ6NDE5O0dMUjogUmVzb2x2ZSBhbWJpZ3VpdHksIGltcHVyZSwgbG9jYXRpb25zOzsKLTEzNTtjeHgtdHlwZS5hdDo0MjU7R0xSOiBSZXNvbHZlIGFtYmlndWl0eSwgcHVyZSwgbm8gbG9jYXRpb25zOzsKLTEzNjtjeHgtdHlwZS5hdDo0MzI7R0xSOiBSZXNvbHZlIGFtYmlndWl0eSwgcHVyZSwgbG9jYXRpb25zOzsKLTEzNztjeHgtdHlwZS5hdDo0Mzk7R0xSOiBNZXJnZSBjb25mbGljdGluZyBwYXJzZXMsIGltcHVyZSwgbm8gbG9jYXRpb25zOzsKLTEzODtjeHgtdHlwZS5hdDo0NDY7R0xSOiBNZXJnZSBjb25mbGljdGluZyBwYXJzZXMsIGltcHVyZSwgbG9jYXRpb25zOzsKLTEzOTtjeHgtdHlwZS5hdDo0NTM7R0xSOiBNZXJnZSBjb25mbGljdGluZyBwYXJzZXMsIHB1cmUsIG5vIGxvY2F0aW9uczs7Ci0xNDA7Y3h4LXR5cGUuYXQ6NDU5O0dMUjogTWVyZ2UgY29uZmxpY3RpbmcgcGFyc2VzLCBwdXJlLCBsb2NhdGlvbnM7OwotMTQxO2N4eC10eXBlLmF0OjQ2NjtHTFI6IFZlcmJvc2UgbWVzc2FnZXMsIHJlc29sdmUgYW1iaWd1aXR5LCBpbXB1cmUsIG5vIGxvY2F0aW9uczs7Ci0xNDI7Z2xyLXJlZ3Jlc3Npb24uYXQ6MjU7QmFkbHkgQ29sbGFwc2VkIEdMUiBTdGF0ZXM7OwotMTQzO2dsci1yZWdyZXNzaW9uLmF0OjExNjtJbXByb3BlciBoYW5kbGluZyBvZiBlbWJlZGRlZCBhY3Rpb25zIGFuZCBkb2xsYXIoLU4pIGluIEdMUiBwYXJzZXJzOzsKLTE0NDtnbHItcmVncmVzc2lvbi5hdDoyMzI7SW1wcm9wZXIgbWVyZ2luZyBvZiBHTFIgZGVsYXllZCBhY3Rpb24gc2V0czs7Ci0xNDU7Z2xyLXJlZ3Jlc3Npb24uYXQ6MzM3O0R1cGxpY2F0ZSByZXByZXNlbnRhdGlvbiBvZiBtZXJnZWQgdHJlZXM7OwotMTQ2O2dsci1yZWdyZXNzaW9uLmF0OjQzMjtVc2VyIGRlc3RydWN0b3IgZm9yIHVucmVzb2x2ZWQgR0xSIHNlbWFudGljIHZhbHVlOzsKLTE0NztnbHItcmVncmVzc2lvbi5hdDo1MDI7VXNlciBkZXN0cnVjdG9yIGFmdGVyIGFuIGVycm9yIGR1cmluZyBhIHNwbGl0IHBhcnNlOzsKLTE0ODtnbHItcmVncmVzc2lvbi5hdDo1NjY7RHVwbGljYXRlZCB1c2VyIGRlc3RydWN0b3IgZm9yIGxvb2thaGVhZDs7Ci0xNDk7Z2xyLXJlZ3Jlc3Npb24uYXQ6NjQ0O0luY29ycmVjdGx5IGluaXRpYWxpemVkIGxvY2F0aW9uIGZvciBlbXB0eSByaWdodC1oYW5kIHNpZGUgaW4gR0xSOzsKLTE1MDtnbHItcmVncmVzc2lvbi5hdDo3NDA7Tm8gdXNlcnMgZGVzdHJ1Y3RvcnMgaWYgc3RhY2sgMCBkZWxldGVkOzsKLTE1MTtnbHItcmVncmVzc2lvbi5hdDo4MjA7Q29ycnVwdGVkIHNlbWFudGljIG9wdGlvbnMgaWYgdXNlciBhY3Rpb24gY3V0cyBwYXJzZTs7Ci0xNTI7Z2xyLXJlZ3Jlc3Npb24uYXQ6ODgxO1VuZGVzaXJhYmxlIGRlc3RydWN0b3JzIGlmIHVzZXIgYWN0aW9uIGN1dHMgcGFyc2U7OwotMTUzO2dsci1yZWdyZXNzaW9uLmF0Ojk0NztMZWFrZWQgc2VtYW50aWMgdmFsdWVzIGlmIHVzZXIgYWN0aW9uIGN1dHMgcGFyc2U7OwotMTU0O2dsci1yZWdyZXNzaW9uLmF0OjEwNzg7SW5jb3JyZWN0IGxvb2thaGVhZCBkdXJpbmcgZGV0ZXJtaW5pc3RpYyBHTFI7OwotMTU1O2dsci1yZWdyZXNzaW9uLmF0OjEyMTI7SW5jb3JyZWN0IGxvb2thaGVhZCBkdXJpbmcgbm9uZGV0ZXJtaW5pc3RpYyBHTFI7OwotMTU2O2dsci1yZWdyZXNzaW9uLmF0OjE0Mjk7TGVha2VkIHNlbWFudGljIHZhbHVlcyB3aGVuIHJlcG9ydGluZyBhbWJpZ3VpdHk7OwotMTU3O2dsci1yZWdyZXNzaW9uLmF0OjE1MTk7TGVha2VkIGxvb2thaGVhZCBhZnRlciBub25kZXRlcm1pbmlzdGljIHBhcnNlIHN5bnRheCBlcnJvcjs7Ci0xNTg7Z2xyLXJlZ3Jlc3Npb24uYXQ6MTU4NTtVbmluaXRpYWxpemVkIGxvY2F0aW9uIHdoZW4gcmVwb3J0aW5nIGFtYmlndWl0eTs7Ci0nCithdF9oZWxwX2FsbD0iMTtpbnB1dC5hdDoyNztJbnZhbGlkIGlucHV0czs7CisyO2lucHV0LmF0OjU3O0ludmFsaWQgaW5wdXRzIHdpdGgge307OworMztpbnB1dC5hdDo4NDtJbnZhbGlkIFwkbiBhbmQgQG47OworNDtpbnB1dC5hdDoxMDQ7VHlwZSBDbGFzaGVzOzsKKzU7aW5wdXQuYXQ6Mjg1O1VudXNlZCB2YWx1ZXM7OworNjtpbnB1dC5hdDoyOTU7VW51c2VkIHZhbHVlcyBiZWZvcmUgc3ltYm9sIGRlY2xhcmF0aW9uczs7Cis3O2lucHV0LmF0OjMwNTtEZWZhdWx0ICVwcmludGVyIGFuZCAlZGVzdHJ1Y3RvciByZWRlY2xhcmVkOzsKKzg7aW5wdXQuYXQ6MzY1O1Blci10eXBlICVwcmludGVyIGFuZCAlZGVzdHJ1Y3RvciByZWRlY2xhcmVkOzsKKzk7aW5wdXQuYXQ6NDA4O1VudXNlZCB2YWx1ZXMgd2l0aCBkZWZhdWx0ICVkZXN0cnVjdG9yOzsKKzEwO2lucHV0LmF0OjQ1MDtVbnVzZWQgdmFsdWVzIHdpdGggcGVyLXR5cGUgJWRlc3RydWN0b3I7OworMTE7aW5wdXQuYXQ6NDc1O0luY29tcGF0aWJsZSBBbGlhc2VzOzsKKzEyO2lucHV0LmF0OjUxNjtUb3J0dXJpbmcgdGhlIFNjYW5uZXI7OworMTM7aW5wdXQuYXQ6Njc0O1R5cGVkIHN5bWJvbCBhbGlhc2VzOzsKKzE0O2lucHV0LmF0OjcxMDtSZXF1aXJlIDEuMDs7CisxNTtpbnB1dC5hdDo3MTE7UmVxdWlyZSAyLjc7OworMTY7aW5wdXQuYXQ6NzEzO1JlcXVpcmUgMTAwLjA7OworMTc7aW5wdXQuYXQ6NzIwO1N0cmluZyBhbGlhc2VzIGZvciBjaGFyYWN0ZXIgdG9rZW5zOzsKKzE4O2lucHV0LmF0Ojc0MTtTeW1ib2xzOzsKKzE5O2lucHV0LmF0OjgwNztOdW1iZXJlZCB0b2tlbnM7OworMjA7aW5wdXQuYXQ6ODQ1O1VuY2xvc2VkIGNvbnN0cnVjdHM7OworMjE7aW5wdXQuYXQ6OTA5OyVzdGFydCBhZnRlciBmaXJzdCBydWxlOzsKKzIyO2lucHV0LmF0OjkzMDslcHJlYyB0YWtlcyBhIHRva2VuOzsKKzIzO2lucHV0LmF0Ojk1MTslcHJlYydzIHRva2VuIG11c3QgYmUgZGVmaW5lZDs7CisyNDtpbnB1dC5hdDo5NzE7UmVqZWN0IHVudXNlZCAlY29kZSBxdWFsaWZpZXJzOzsKKzI1O2lucHV0LmF0OjEwNjA7JWRlZmluZSBlcnJvcnM7OworMjY7aW5wdXQuYXQ6MTA5NjslZGVmaW5lLCAtLWRlZmluZSwgLS1mb3JjZS1kZWZpbmU7OworMjc7aW5wdXQuYXQ6MTE2MTslZGVmaW5lIEJvb2xlYW4gdmFyaWFibGVzOzsKKzI4O2lucHV0LmF0OjExODE7JWRlZmluZSBlbnVtIHZhcmlhYmxlczs7CisyOTtpbnB1dC5hdDoxMjE2OyVkZWZpbmUgYmFja3dhcmQgY29tcGF0aWJpbGl0eTs7CiszMDtpbnB1dC5hdDoxMjU3O1VudXNlZCAlZGVmaW5lIGFwaS5wdXJlOzsKKzMxO2lucHV0LmF0OjEyOTA7QysrIG5hbWVzcGFjZSByZWZlcmVuY2UgZXJyb3JzOzsKKzMyO2lucHV0LmF0OjEzNDY7QmFkIGNoYXJhY3RlciBsaXRlcmFsczs7CiszMztpbnB1dC5hdDoxMzk5O0JhZCBlc2NhcGVzIGluIGxpdGVyYWxzOzsKKzM0O2lucHV0LmF0OjE0NDg7TEFDOiBFcnJvcnMgZm9yICVkZWZpbmU7OworMzU7aW5wdXQuYXQ6MTQ3MTstV2Vycm9yIGlzIG5vdCBhZmZlY3RlZCBieSAtV25vbmUgYW5kIC1XYWxsOzsKKzM2O2lucHV0LmF0OjE1MDU7JW5hbWUtcHJlZml4IGFuZCAlZGVmaW5lIGFwaS5wcmVmaXggYXJlIGluY29tcGF0aWJsZTs7CiszNztpbnB1dC5hdDoxNTM0O1N0cmF5IFwkIG9yIEA7OworMzg7aW5wdXQuYXQ6MTU2ODtDb2RlIGluamVjdGlvbjs7CiszOTtuYW1lZC1yZWZzLmF0OjIxO1R1dG9yaWFsIGNhbGN1bGF0b3I7OworNDA7bmFtZWQtcmVmcy5hdDoxOTU7VW5kZWZpbmVkIGFuZCBhbWJpZ3VvdXMgcmVmZXJlbmNlczs7Cis0MTtuYW1lZC1yZWZzLmF0OjI3MTtNaXNsZWFkaW5nIHJlZmVyZW5jZXM7OworNDI7bmFtZWQtcmVmcy5hdDoyODg7TWFueSBraW5kcyBvZiBlcnJvcnM7OworNDM7bmFtZWQtcmVmcy5hdDo1MjE7TWlzc2luZyBpZGVudGlmaWVycyBpbiBicmFja2V0czs7Cis0NDtuYW1lZC1yZWZzLmF0OjUzNTtSZWR1bmRhbnQgd29yZHMgaW4gYnJhY2tldHM7OworNDU7bmFtZWQtcmVmcy5hdDo1NDk7Q29tbWVudHMgaW4gYnJhY2tldHM7OworNDY7bmFtZWQtcmVmcy5hdDo1NjM7U3RyYXkgc3ltYm9scyBpbiBicmFja2V0czs7Cis0NztuYW1lZC1yZWZzLmF0OjU4MDtSZWR1bmRhbnQgd29yZHMgaW4gTEhTIGJyYWNrZXRzOzsKKzQ4O25hbWVkLXJlZnMuYXQ6NTk1O0ZhY3RvcmVkIExIUzs7Cis0OTtuYW1lZC1yZWZzLmF0OjYwNjtVbnJlc29sdmVkIHJlZmVyZW5jZXM7OworNTA7bmFtZWQtcmVmcy5hdDo2NzE7XCQgb3IgQCBmb2xsb3dlZCBieSAuIG9yIC07OworNTE7b3V0cHV0LmF0OjQ0O091dHB1dCBmaWxlczogIC1kdiA7OworNTI7b3V0cHV0LmF0OjUwO091dHB1dCBmaWxlczogIC1kdiA+Ji07OworNTM7b3V0cHV0LmF0OjU1O091dHB1dCBmaWxlczogIC1kdiAtbyBmb28uYyA7OworNTQ7b3V0cHV0LmF0OjU3O091dHB1dCBmaWxlczogIC1kdiAtbyBmb28udGFiLmMgOzsKKzU1O291dHB1dC5hdDo1OTtPdXRwdXQgZmlsZXM6ICAtZHYgLXkgOzsKKzU2O291dHB1dC5hdDo2MTtPdXRwdXQgZmlsZXM6ICAtZHYgLWIgYmFyIDs7Cis1NztvdXRwdXQuYXQ6NjM7T3V0cHV0IGZpbGVzOiAgLWR2IC1nIC1vIGZvby5jIDs7Cis1ODtvdXRwdXQuYXQ6Njc7T3V0cHV0IGZpbGVzOiAlZGVmaW5lcyAldmVyYm9zZSAgOzsKKzU5O291dHB1dC5hdDo2OTtPdXRwdXQgZmlsZXM6ICVkZWZpbmVzICV2ZXJib3NlICV5YWNjICA7OworNjA7b3V0cHV0LmF0OjcyO091dHB1dCBmaWxlczogJWRlZmluZXMgJXZlcmJvc2UgJXlhY2MgIDs7Cis2MTtvdXRwdXQuYXQ6NzY7T3V0cHV0IGZpbGVzOiAlZmlsZS1wcmVmaXggXCJiYXJcIiAlZGVmaW5lcyAldmVyYm9zZSAgOzsKKzYyO291dHB1dC5hdDo3ODtPdXRwdXQgZmlsZXM6ICVvdXRwdXQ9XCJiYXIuY1wiICVkZWZpbmVzICV2ZXJib3NlICV5YWNjICA7OworNjM7b3V0cHV0LmF0OjgwO091dHB1dCBmaWxlczogJWZpbGUtcHJlZml4PVwiYmF6XCIgJW91dHB1dCBcImJhci5jXCIgJWRlZmluZXMgJXZlcmJvc2UgJXlhY2MgIDs7Cis2NDtvdXRwdXQuYXQ6ODc7T3V0cHV0IGZpbGVzOiAlZGVmaW5lcyAldmVyYm9zZSAgOzsKKzY1O291dHB1dC5hdDo5MDtPdXRwdXQgZmlsZXM6ICVkZWZpbmVzICV2ZXJib3NlICAtbyBmb28uYyA7OworNjY7b3V0cHV0LmF0OjkzO091dHB1dCBmaWxlczogIC0tZGVmaW5lcz1mb28uaHBwIC1vIGZvby5jKysgOzsKKzY3O291dHB1dC5hdDo5NztPdXRwdXQgZmlsZXM6ICVkZWZpbmVzIFwiZm9vLmhwcFwiIC1vIGZvby5jKysgOzsKKzY4O291dHB1dC5hdDoxMDE7T3V0cHV0IGZpbGVzOiAgLW8gZm9vLmMrKyAtLWdyYXBoPWZvby5ncGggOzsKKzY5O291dHB1dC5hdDoxMTY7T3V0cHV0IGZpbGVzOiAlc2tlbGV0b24gXCJsYWxyMS5jY1wiICVkZWZpbmVzICV2ZXJib3NlICA7OworNzA7b3V0cHV0LmF0OjExOTtPdXRwdXQgZmlsZXM6ICVza2VsZXRvbiBcImxhbHIxLmNjXCIgJWRlZmluZXMgJXZlcmJvc2UgIDs7Cis3MTtvdXRwdXQuYXQ6MTIzO091dHB1dCBmaWxlczogJXNrZWxldG9uIFwibGFscjEuY2NcIiAlZGVmaW5lcyAldmVyYm9zZSAtbyBzdWJkaXIvZm9vLmNjIDs7Cis3MjtvdXRwdXQuYXQ6MTI4O091dHB1dCBmaWxlczogJXNrZWxldG9uIFwibGFscjEuY2NcIiAlZGVmaW5lcyAldmVyYm9zZSAlZmlsZS1wcmVmaXggXCJvdXRwdXRfZGlyL2Zvb1wiICA7OworNzM7b3V0cHV0LmF0OjE1ODtDb25mbGljdGluZyBvdXRwdXQgZmlsZXM6ICAtLWdyYXBoPVwiZm9vLnRhYi5jXCI7OworNzQ7b3V0cHV0LmF0OjE2MztDb25mbGljdGluZyBvdXRwdXQgZmlsZXM6ICVkZWZpbmVzIFwiZm9vLm91dHB1dFwiIC12OzsKKzc1O291dHB1dC5hdDoxNjg7Q29uZmxpY3Rpbmcgb3V0cHV0IGZpbGVzOiAlc2tlbGV0b24gXCJsYWxyMS5jY1wiICVkZWZpbmVzIC0tZ3JhcGg9XCJsb2NhdGlvbi5oaFwiOzsKKzc2O291dHB1dC5hdDoxNzM7Q29uZmxpY3Rpbmcgb3V0cHV0IGZpbGVzOiAgLW8gZm9vLnk7OworNzc7b3V0cHV0LmF0OjIxOTtPdXRwdXQgZmlsZSBuYW1lOiBcYH4hQCNcJCVeJiooKS09Xyt7fVtdfFxcOjs8PiwgLic7YysrOworNzg7b3V0cHV0LmF0OjIyNjtPdXRwdXQgZmlsZSBuYW1lOiAoO2MrKzsKKzc5O291dHB1dC5hdDoyMjc7T3V0cHV0IGZpbGUgbmFtZTogKTtjKys7Cis4MDtvdXRwdXQuYXQ6MjI4O091dHB1dCBmaWxlIG5hbWU6ICM7YysrOworODE7b3V0cHV0LmF0OjIyOTtPdXRwdXQgZmlsZSBuYW1lOiBAQDtjKys7Cis4MjtvdXRwdXQuYXQ6MjMwO091dHB1dCBmaWxlIG5hbWU6IEB7O2MrKzsKKzgzO291dHB1dC5hdDoyMzE7T3V0cHV0IGZpbGUgbmFtZTogQH07YysrOworODQ7b3V0cHV0LmF0OjIzMjtPdXRwdXQgZmlsZSBuYW1lOiBbO2MrKzsKKzg1O291dHB1dC5hdDoyMzM7T3V0cHV0IGZpbGUgbmFtZTogXTtjKys7Cis4NjtvdXRwdXQuYXQ6MjYwO0dyYXBoIHdpdGggbm8gY29uZmxpY3RzO2dyYXBoOworODc7b3V0cHV0LmF0OjI5NDtHcmFwaCB3aXRoIHVuc29sdmVkIFMvUjtncmFwaDsKKzg4O291dHB1dC5hdDozNTg7R3JhcGggd2l0aCBzb2x2ZWQgUy9SO2dyYXBoOworODk7b3V0cHV0LmF0OjQxNztHcmFwaCB3aXRoIFIvUjtncmFwaDsKKzkwO291dHB1dC5hdDo0NDk7R3JhcGggd2l0aCByZWR1Y3Rpb25zIHdpdGggbXVsdGlwbGUgTEFUO2dyYXBoOworOTE7b3V0cHV0LmF0OjUwODtHcmFwaCB3aXRoIGEgcmVkdWN0aW9uIHJ1bGUgYm90aCBlbmFibGVkIGFuZCBkaXNhYmxlZDtncmFwaDsKKzkyO3NrZWxldG9ucy5hdDoyNDtSZWxhdGl2ZSBza2VsZXRvbiBmaWxlIG5hbWVzOzsKKzkzO3NrZWxldG9ucy5hdDo4NDtJbnN0YWxsZWQgc2tlbGV0b24gZmlsZSBuYW1lczs7Cis5NDtza2VsZXRvbnMuYXQ6MTQ2OyVkZWZpbmUgQm9vbGVhbiB2YXJpYWJsZXM6IGludmFsaWQgc2tlbGV0b24gZGVmYXVsdHM7OworOTU7c2tlbGV0b25zLmF0OjE3MDtDb21wbGFpbmluZyBkdXJpbmcgbWFjcm8gYXJndW1lbnQgZXhwYW5zaW9uOzsKKzk2O3NrZWxldG9ucy5hdDoyNTI7RmF0YWwgZXJyb3JzIG1ha2UgTTQgZXhpdCBpbW1lZGlhdGVseTs7Cis5Nztza2VsZXRvbnMuYXQ6MzA2O0ZhdGFsIGVycm9ycyBidXQgTTQgY29udGludWVzIHByb2R1Y2luZyBvdXRwdXQ7OworOTg7c2V0cy5hdDo2NjtOdWxsYWJsZTs7Cis5OTtzZXRzLmF0OjE1MTtCcm9rZW4gQ2xvc3VyZTs7CisxMDA7c2V0cy5hdDoxOTM7Rmlyc3RzOzsKKzEwMTtzZXRzLmF0OjI2OTtBY2NlcHQ7OworMTAyO3JlZHVjZS5hdDoyNTtVc2VsZXNzIFRlcm1pbmFsczs7CisxMDM7cmVkdWNlLmF0OjY5O1VzZWxlc3MgTm9udGVybWluYWxzOzsKKzEwNDtyZWR1Y2UuYXQ6MTI0O1VzZWxlc3MgUnVsZXM7cmVwb3J0OworMTA1O3JlZHVjZS5hdDoyNzE7UmVkdWNlZCBBdXRvbWF0b247cmVwb3J0OworMTA2O3JlZHVjZS5hdDozODE7VW5kZXJpdmFibGUgUnVsZXM7cmVwb3J0OworMTA3O3JlZHVjZS5hdDo0MjM7RW1wdHkgTGFuZ3VhZ2U7OworMTA4O3JlZHVjZS5hdDo0NzQ7bm8gJWRlZmluZSBsci50eXBlOiBTaW5nbGUgU3RhdGUgU3BsaXQ7OworMTA5O3JlZHVjZS5hdDo0NzQ7JWRlZmluZSBsci50eXBlIGxhbHI6IFNpbmdsZSBTdGF0ZSBTcGxpdDs7CisxMTA7cmVkdWNlLmF0OjQ3NDslZGVmaW5lIGxyLnR5cGUgaWVscjogU2luZ2xlIFN0YXRlIFNwbGl0OzsKKzExMTtyZWR1Y2UuYXQ6NDc0OyVkZWZpbmUgbHIudHlwZSBjYW5vbmljYWwtbHI6IFNpbmdsZSBTdGF0ZSBTcGxpdDs7CisxMTI7cmVkdWNlLmF0OjcwNztubyAlZGVmaW5lIGxyLnR5cGU6IExhbmUgU3BsaXQ7OworMTEzO3JlZHVjZS5hdDo3MDc7JWRlZmluZSBsci50eXBlIGxhbHI6IExhbmUgU3BsaXQ7OworMTE0O3JlZHVjZS5hdDo3MDc7JWRlZmluZSBsci50eXBlIGllbHI6IExhbmUgU3BsaXQ7OworMTE1O3JlZHVjZS5hdDo3MDc7JWRlZmluZSBsci50eXBlIGNhbm9uaWNhbC1scjogTGFuZSBTcGxpdDs7CisxMTY7cmVkdWNlLmF0Ojk1MTtubyAlZGVmaW5lIGxyLnR5cGU6IENvbXBsZXggTGFuZSBTcGxpdDs7CisxMTc7cmVkdWNlLmF0Ojk1MTslZGVmaW5lIGxyLnR5cGUgbGFscjogQ29tcGxleCBMYW5lIFNwbGl0OzsKKzExODtyZWR1Y2UuYXQ6OTUxOyVkZWZpbmUgbHIudHlwZSBpZWxyOiBDb21wbGV4IExhbmUgU3BsaXQ7OworMTE5O3JlZHVjZS5hdDo5NTE7JWRlZmluZSBsci50eXBlIGNhbm9uaWNhbC1scjogQ29tcGxleCBMYW5lIFNwbGl0OzsKKzEyMDtyZWR1Y2UuYXQ6MTIyMDtubyAlZGVmaW5lIGxyLnR5cGU6IFNwbGl0IER1cmluZyBBZGRlZCBMb29rYWhlYWQgUHJvcGFnYXRpb247OworMTIxO3JlZHVjZS5hdDoxMjIwOyVkZWZpbmUgbHIudHlwZSBsYWxyOiBTcGxpdCBEdXJpbmcgQWRkZWQgTG9va2FoZWFkIFByb3BhZ2F0aW9uOzsKKzEyMjtyZWR1Y2UuYXQ6MTIyMDslZGVmaW5lIGxyLnR5cGUgaWVscjogU3BsaXQgRHVyaW5nIEFkZGVkIExvb2thaGVhZCBQcm9wYWdhdGlvbjs7CisxMjM7cmVkdWNlLmF0OjEyMjA7JWRlZmluZSBsci50eXBlIGNhbm9uaWNhbC1scjogU3BsaXQgRHVyaW5nIEFkZGVkIExvb2thaGVhZCBQcm9wYWdhdGlvbjs7CisxMjQ7cmVkdWNlLmF0OjE1NTA7bm8gJWRlZmluZSBsci5kZWZhdWx0LXJlZHVjdGlvbnM7OworMTI1O3JlZHVjZS5hdDoxNTUwOyVkZWZpbmUgbHIuZGVmYXVsdC1yZWR1Y3Rpb25zIG1vc3Q7OworMTI2O3JlZHVjZS5hdDoxNTUwOyVkZWZpbmUgbHIuZGVmYXVsdC1yZWR1Y3Rpb25zIGNvbnNpc3RlbnQ7OworMTI3O3JlZHVjZS5hdDoxNTUwOyVkZWZpbmUgbHIuZGVmYXVsdC1yZWR1Y3Rpb25zIGFjY2VwdGluZzs7CisxMjg7c3luY2xpbmVzLmF0OjE1MDtQcm9sb2d1ZSBzeW5jbGluZTs7CisxMjk7c3luY2xpbmVzLmF0OjE2ODsldW5pb24gc3luY2xpbmU7OworMTMwO3N5bmNsaW5lcy5hdDoxODk7UG9zdHByb2xvZ3VlIHN5bmNsaW5lOzsKKzEzMTtzeW5jbGluZXMuYXQ6MjEzO0FjdGlvbiBzeW5jbGluZTs7CisxMzI7c3luY2xpbmVzLmF0OjIzMjtFcGlsb2d1ZSBzeW5jbGluZTs7CisxMzM7c3luY2xpbmVzLmF0OjI0OTslY29kZSB0b3Agc3luY2xpbmU7OworMTM0O3N5bmNsaW5lcy5hdDoyOTA7JW5vLWxpbmVzOzsKKzEzNTtzeW5jbGluZXMuYXQ6MjkxOyVuby1saW5lczs7CisxMzY7c3luY2xpbmVzLmF0OjI5Mjslbm8tbGluZXM7OworMTM3O3N5bmNsaW5lcy5hdDoyOTM7JW5vLWxpbmVzOzsKKzEzODtoZWFkZXJzLmF0OjU3O0ludmFsaWQgQ1BQIGd1YXJkczogIC0tZGVmaW5lcz1pbnB1dC9pbnB1dC5oOzsKKzEzOTtoZWFkZXJzLmF0OjU4O0ludmFsaWQgQ1BQIGd1YXJkczogIC0tZGVmaW5lcz05Zm9vLmg7OworMTQwO2hlYWRlcnMuYXQ6NTk7SW52YWxpZCBDUFAgZ3VhcmRzOiAlZ2xyLXBhcnNlciAtLWRlZmluZXM9aW5wdXQvaW5wdXQuaDs7CisxNDE7aGVhZGVycy5hdDo2MDtJbnZhbGlkIENQUCBndWFyZHM6ICVnbHItcGFyc2VyIC0tZGVmaW5lcz05Zm9vLmg7OworMTQyO2hlYWRlcnMuYXQ6Njk7ZXhwb3J0IFlZTFRZUEU7OworMTQzO2hlYWRlcnMuYXQ6MTI1O1NldmVyYWwgcGFyc2VycztjKys7CisxNDQ7YWN0aW9ucy5hdDoyNDtNaWQtcnVsZSBhY3Rpb25zOzsKKzE0NTthY3Rpb25zLmF0OjEzMztJbml0aWFsIGxvY2F0aW9uOiB5YWNjLmMgOzsKKzE0NjthY3Rpb25zLmF0OjEzNDtJbml0aWFsIGxvY2F0aW9uOiB5YWNjLmMgJWRlZmluZSBhcGkucHVyZSBmdWxsOzsKKzE0NzthY3Rpb25zLmF0OjEzNTtJbml0aWFsIGxvY2F0aW9uOiB5YWNjLmMgJWRlZmluZSBhcGkucHVyZSAlcGFyc2UtcGFyYW0geyBpbnQgeCB9OzsKKzE0ODthY3Rpb25zLmF0OjEzNjtJbml0aWFsIGxvY2F0aW9uOiB5YWNjLmMgJWRlZmluZSBhcGkucHVzaC1wdWxsIGJvdGg7OworMTQ5O2FjdGlvbnMuYXQ6MTM3O0luaXRpYWwgbG9jYXRpb246IHlhY2MuYyAlZGVmaW5lIGFwaS5wdXNoLXB1bGwgYm90aCAlZGVmaW5lIGFwaS5wdXJlIGZ1bGw7OworMTUwO2FjdGlvbnMuYXQ6MTM4O0luaXRpYWwgbG9jYXRpb246IGdsci5jIDs7CisxNTE7YWN0aW9ucy5hdDoxMzk7SW5pdGlhbCBsb2NhdGlvbjogZ2xyLmMgJWRlZmluZSBhcGkucHVyZTs7CisxNTI7YWN0aW9ucy5hdDoxNDA7SW5pdGlhbCBsb2NhdGlvbjogbGFscjEuY2MgO2MrKzsKKzE1MzthY3Rpb25zLmF0OjE0MTtJbml0aWFsIGxvY2F0aW9uOiBnbHIuY2MgO2MrKzsKKzE1NDthY3Rpb25zLmF0OjE1MDtJbml0aWFsIGxvY2F0aW9uOiB5YWNjLmMgJWRlZmluZSBhcGkucHVyZSBmdWxsOzsKKzE1NTthY3Rpb25zLmF0OjE2MTtJbml0aWFsIGxvY2F0aW9uOiB5YWNjLmMgJWRlZmluZSBhcGkucHVyZSBmdWxsOzsKKzE1NjthY3Rpb25zLmF0OjI0NDtMb2NhdGlvbiBwcmludDogeWFjYy5jIDs7CisxNTc7YWN0aW9ucy5hdDoyNDU7TG9jYXRpb24gcHJpbnQ6IGdsci5jIDs7CisxNTg7YWN0aW9ucy5hdDoyNTc7RXhvdGljIERvbGxhcnM7OworMTU5O2FjdGlvbnMuYXQ6NzUxO1ByaW50ZXJzIGFuZCBEZXN0cnVjdG9yczs7CisxNjA7YWN0aW9ucy5hdDo3NTI7UHJpbnRlcnMgYW5kIERlc3RydWN0b3JzIHdpdGggdW5pb247OworMTYxO2FjdGlvbnMuYXQ6NzU0O1ByaW50ZXJzIGFuZCBEZXN0cnVjdG9yczogJWRlZmluZXMgJXNrZWxldG9uIFwibGFscjEuY2NcIjtjKys7CisxNjI7YWN0aW9ucy5hdDo3NTU7UHJpbnRlcnMgYW5kIERlc3RydWN0b3JzIHdpdGggdW5pb246ICVkZWZpbmVzICVza2VsZXRvbiBcImxhbHIxLmNjXCI7YysrOworMTYzO2FjdGlvbnMuYXQ6NzU3O1ByaW50ZXJzIGFuZCBEZXN0cnVjdG9yczogJWdsci1wYXJzZXI7OworMTY0O2FjdGlvbnMuYXQ6NzU4O1ByaW50ZXJzIGFuZCBEZXN0cnVjdG9ycyB3aXRoIHVuaW9uOiAlZ2xyLXBhcnNlcjs7CisxNjU7YWN0aW9ucy5hdDo3Njk7RGVmYXVsdCB0YWdsZXNzICVwcmludGVyIGFuZCAlZGVzdHJ1Y3Rvcjs7CisxNjY7YWN0aW9ucy5hdDo4Njc7RGVmYXVsdCB0YWdnZWQgYW5kIHBlci10eXBlICVwcmludGVyIGFuZCAlZGVzdHJ1Y3Rvcjs7CisxNjc7YWN0aW9ucy5hdDo5OTE7RGVmYXVsdCAlcHJpbnRlciBhbmQgJWRlc3RydWN0b3IgZm9yIHVzZXItZGVmaW5lZCBlbmQgdG9rZW47OworMTY4O2FjdGlvbnMuYXQ6MTA5ODtEZWZhdWx0ICVwcmludGVyIGFuZCAlZGVzdHJ1Y3RvciBhcmUgbm90IGZvciBlcnJvciBvciBcJHVuZGVmaW5lZDs7CisxNjk7YWN0aW9ucy5hdDoxMTkzO0RlZmF1bHQgJXByaW50ZXIgYW5kICVkZXN0cnVjdG9yIGFyZSBub3QgZm9yIFwkYWNjZXB0OzsKKzE3MDthY3Rpb25zLmF0OjEyNTg7RGVmYXVsdCAlcHJpbnRlciBhbmQgJWRlc3RydWN0b3IgZm9yIG1pZC1ydWxlIHZhbHVlczs7CisxNzE7YWN0aW9ucy5hdDoxNDA2O0BcJCBpbiAlaW5pdGlhbC1hY3Rpb24gaW1wbGllcyAlbG9jYXRpb25zOzsKKzE3MjthY3Rpb25zLmF0OjE0MDc7QFwkIGluICVkZXN0cnVjdG9yIGltcGxpZXMgJWxvY2F0aW9uczs7CisxNzM7YWN0aW9ucy5hdDoxNDA4O0BcJCBpbiAlcHJpbnRlciBpbXBsaWVzICVsb2NhdGlvbnM7OworMTc0O2FjdGlvbnMuYXQ6MTUyOTtRdWFsaWZpZWQgXCRcJCBpbiBhY3Rpb25zOiB5YWNjLmM7OworMTc1O2FjdGlvbnMuYXQ6MTUzMDtRdWFsaWZpZWQgXCRcJCBpbiBhY3Rpb25zOiBnbHIuYzs7CisxNzY7YWN0aW9ucy5hdDoxNTMxO1F1YWxpZmllZCBcJFwkIGluIGFjdGlvbnM6IGxhbHIxLmNjO2MrKzsKKzE3NzthY3Rpb25zLmF0OjE1MzI7UXVhbGlmaWVkIFwkXCQgaW4gYWN0aW9uczogZ2xyLmNjO2MrKzsKKzE3ODthY3Rpb25zLmF0OjE1NDA7Rml4IHVzZXIgYWN0aW9ucyB3aXRob3V0IGEgdHJhaWxpbmcgc2VtaWNvbG9uOzsKKzE3OTthY3Rpb25zLmF0OjE2NDk7RGVzdHJveWluZyBsb29rYWhlYWQgYXNzaWduZWQgYnkgc2VtYW50aWMgYWN0aW9uOzsKKzE4MDthY3Rpb25zLmF0OjE3MDg7WVlCQUNLVVA7OworMTgxO2NvbmZsaWN0cy5hdDozMTtTL1IgaW4gaW5pdGlhbDs7CisxODI7Y29uZmxpY3RzLmF0OjU3OyVub25hc3NvYyBhbmQgZW9mOzsKKzE4Mztjb25mbGljdHMuYXQ6MTU1OyVlcnJvci12ZXJib3NlIGFuZCBjb25zaXN0ZW50IGVycm9ycztjKysgamF2YTsKKzE4NDtjb25mbGljdHMuYXQ6NDU2O0xBQzogJW5vbmFzc29jIHJlcXVpcmVzIHNwbGl0dGluZyBjYW5vbmljYWwgTFIgc3RhdGVzOzsKKzE4NTtjb25mbGljdHMuYXQ6NTQ2O1VucmVzb2x2ZWQgU1IgQ29uZmxpY3RzO3JlcG9ydDsKKzE4Njtjb25mbGljdHMuYXQ6NjUzO1Jlc29sdmVkIFNSIENvbmZsaWN0cztyZXBvcnQ7CisxODc7Y29uZmxpY3RzLmF0Ojc3NTtEZWZhdWx0ZWQgQ29uZmxpY3RlZCBSZWR1Y3Rpb247cmVwb3J0OworMTg4O2NvbmZsaWN0cy5hdDo4OTQ7JWV4cGVjdCBub3QgZW5vdWdoOzsKKzE4OTtjb25mbGljdHMuYXQ6OTE0OyVleHBlY3QgcmlnaHQ7OworMTkwO2NvbmZsaWN0cy5hdDo5MzE7JWV4cGVjdCB0b28gbXVjaDs7CisxOTE7Y29uZmxpY3RzLmF0Ojk1MTslZXhwZWN0IHdpdGggcmVkdWNlIGNvbmZsaWN0czs7CisxOTI7Y29uZmxpY3RzLmF0Ojk3MTslcHJlYyB3aXRoIHVzZXIgc3RyaW5nOzsKKzE5Mztjb25mbGljdHMuYXQ6OTg4OyVuby1kZWZhdWx0LXByZWMgd2l0aG91dCAlcHJlYzs7CisxOTQ7Y29uZmxpY3RzLmF0OjEwMTQ7JW5vLWRlZmF1bHQtcHJlYyB3aXRoICVwcmVjOzsKKzE5NTtjb25mbGljdHMuYXQ6MTAzODslZGVmYXVsdC1wcmVjOzsKKzE5Njtjb25mbGljdHMuYXQ6MTA2MjtVbnJlYWNoYWJsZSBTdGF0ZXMgQWZ0ZXIgQ29uZmxpY3QgUmVzb2x1dGlvbjs7CisxOTc7Y29uZmxpY3RzLmF0OjEyNzM7U29sdmVkIGNvbmZsaWN0cyByZXBvcnQgZm9yIG11bHRpcGxlIHJlZHVjdGlvbnMgaW4gYSBzdGF0ZTs7CisxOTg7Y29uZmxpY3RzLmF0OjEzNTM7JW5vbmFzc29jIGVycm9yIGFjdGlvbnMgZm9yIG11bHRpcGxlIHJlZHVjdGlvbnMgaW4gYSBzdGF0ZTs7CisxOTk7Y29uZmxpY3RzLmF0OjE0MjI7LVcgdmVyc3VzICVleHBlY3QgYW5kICVleHBlY3QtcnI7OworMjAwO2NhbGMuYXQ6NTk3O0NhbGN1bGF0b3IgOzsKKzIwMTtjYWxjLmF0OjU5OTtDYWxjdWxhdG9yICVkZWZpbmVzOzsKKzIwMjtjYWxjLmF0OjYwMDtDYWxjdWxhdG9yICVsb2NhdGlvbnM7OworMjAzO2NhbGMuYXQ6NjAyO0NhbGN1bGF0b3IgJW5hbWUtcHJlZml4PVwiY2FsY1wiOzsKKzIwNDtjYWxjLmF0OjYwMztDYWxjdWxhdG9yICV2ZXJib3NlOzsKKzIwNTtjYWxjLmF0OjYwNDtDYWxjdWxhdG9yICV5YWNjOzsKKzIwNjtjYWxjLmF0OjYwNTtDYWxjdWxhdG9yICVlcnJvci12ZXJib3NlOzsKKzIwNztjYWxjLmF0OjYwNztDYWxjdWxhdG9yICVkZWZpbmUgYXBpLnB1cmUgZnVsbCAlbG9jYXRpb25zOzsKKzIwODtjYWxjLmF0OjYwODtDYWxjdWxhdG9yICVkZWZpbmUgYXBpLnB1c2gtcHVsbCBib3RoICVkZWZpbmUgYXBpLnB1cmUgZnVsbCAlbG9jYXRpb25zOzsKKzIwOTtjYWxjLmF0OjYwOTtDYWxjdWxhdG9yICVlcnJvci12ZXJib3NlICVsb2NhdGlvbnM7OworMjEwO2NhbGMuYXQ6NjExO0NhbGN1bGF0b3IgJWVycm9yLXZlcmJvc2UgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXggXCJjYWxjXCIgJXZlcmJvc2UgJXlhY2M7OworMjExO2NhbGMuYXQ6NjEyO0NhbGN1bGF0b3IgJWVycm9yLXZlcmJvc2UgJWxvY2F0aW9ucyAlZGVmaW5lcyAlZGVmaW5lIGFwaS5wcmVmaXggXCJjYWxjXCIgJXZlcmJvc2UgJXlhY2M7OworMjEyO2NhbGMuYXQ6NjE0O0NhbGN1bGF0b3IgJWRlYnVnOzsKKzIxMztjYWxjLmF0OjYxNTtDYWxjdWxhdG9yICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeCBcImNhbGNcIiAldmVyYm9zZSAleWFjYzs7CisyMTQ7Y2FsYy5hdDo2MTY7Q2FsY3VsYXRvciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlZGVmaW5lIGFwaS5wcmVmaXggXCJjYWxjXCIgJXZlcmJvc2UgJXlhY2M7OworMjE1O2NhbGMuYXQ6NjE4O0NhbGN1bGF0b3IgJWRlZmluZSBhcGkucHVyZSBmdWxsICV2ZXJib3NlICVkZWJ1ZyAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeCBcImNhbGNcIiAldmVyYm9zZSAleWFjYzs7CisyMTY7Y2FsYy5hdDo2MTk7Q2FsY3VsYXRvciAlZGVmaW5lIGFwaS5wdXNoLXB1bGwgYm90aCAlZGVmaW5lIGFwaS5wdXJlIGZ1bGwgJXZlcmJvc2UgJWRlYnVnICVsb2NhdGlvbnMgJWRlZmluZXMgJWRlZmluZSBhcGkucHJlZml4IFwiY2FsY1wiICV2ZXJib3NlICV5YWNjOzsKKzIxNztjYWxjLmF0OjYyMTtDYWxjdWxhdG9yICVkZWZpbmUgYXBpLnB1cmUgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVsb2NhdGlvbnMgJWRlZmluZXMgJWRlZmluZSBhcGkucHJlZml4IFwiY2FsY1wiICV2ZXJib3NlICV5YWNjICVwYXJzZS1wYXJhbSB7c2VtYW50aWNfdmFsdWUgKnJlc3VsdH0gJXBhcnNlLXBhcmFtIHtpbnQgKmNvdW50fTs7CisyMTg7Y2FsYy5hdDo2Mzg7Q2FsY3VsYXRvciAlZ2xyLXBhcnNlciA7OworMjE5O2NhbGMuYXQ6NjQwO0NhbGN1bGF0b3IgJWdsci1wYXJzZXIgJWRlZmluZXM7OworMjIwO2NhbGMuYXQ6NjQxO0NhbGN1bGF0b3IgJWdsci1wYXJzZXIgJWxvY2F0aW9uczs7CisyMjE7Y2FsYy5hdDo2NDI7Q2FsY3VsYXRvciAlZ2xyLXBhcnNlciAlbmFtZS1wcmVmaXggXCJjYWxjXCI7OworMjIyO2NhbGMuYXQ6NjQzO0NhbGN1bGF0b3IgJWdsci1wYXJzZXIgJWRlZmluZSBhcGkucHJlZml4IFwiY2FsY1wiOzsKKzIyMztjYWxjLmF0OjY0NDtDYWxjdWxhdG9yICVnbHItcGFyc2VyICV2ZXJib3NlOzsKKzIyNDtjYWxjLmF0OjY0NTtDYWxjdWxhdG9yICVnbHItcGFyc2VyICV5YWNjOzsKKzIyNTtjYWxjLmF0OjY0NjtDYWxjdWxhdG9yICVnbHItcGFyc2VyICVlcnJvci12ZXJib3NlOzsKKzIyNjtjYWxjLmF0OjY0ODtDYWxjdWxhdG9yICVnbHItcGFyc2VyICVkZWZpbmUgYXBpLnB1cmUgJWxvY2F0aW9uczs7CisyMjc7Y2FsYy5hdDo2NDk7Q2FsY3VsYXRvciAlZ2xyLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlbG9jYXRpb25zOzsKKzIyODtjYWxjLmF0OjY1MTtDYWxjdWxhdG9yICVnbHItcGFyc2VyICVlcnJvci12ZXJib3NlICVsb2NhdGlvbnMgJWRlZmluZXMgJW5hbWUtcHJlZml4IFwiY2FsY1wiICV2ZXJib3NlICV5YWNjOzsKKzIyOTtjYWxjLmF0OjY1MztDYWxjdWxhdG9yICVnbHItcGFyc2VyICVkZWJ1Zzs7CisyMzA7Y2FsYy5hdDo2NTQ7Q2FsY3VsYXRvciAlZ2xyLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXggXCJjYWxjXCIgJXZlcmJvc2UgJXlhY2M7OworMjMxO2NhbGMuYXQ6NjU1O0NhbGN1bGF0b3IgJWdsci1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVsb2NhdGlvbnMgJWRlZmluZXMgJWRlZmluZSBhcGkucHJlZml4IFwiY2FsY1wiICV2ZXJib3NlICV5YWNjOzsKKzIzMjtjYWxjLmF0OjY1NztDYWxjdWxhdG9yICVnbHItcGFyc2VyICVkZWZpbmUgYXBpLnB1cmUgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVsb2NhdGlvbnMgJWRlZmluZXMgJW5hbWUtcHJlZml4IFwiY2FsY1wiICV2ZXJib3NlICV5YWNjOzsKKzIzMztjYWxjLmF0OjY1OTtDYWxjdWxhdG9yICVnbHItcGFyc2VyICVkZWZpbmUgYXBpLnB1cmUgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVsb2NhdGlvbnMgJWRlZmluZXMgJW5hbWUtcHJlZml4IFwiY2FsY1wiICV2ZXJib3NlICV5YWNjICVwYXJzZS1wYXJhbSB7c2VtYW50aWNfdmFsdWUgKnJlc3VsdH0gJXBhcnNlLXBhcmFtIHtpbnQgKmNvdW50fTs7CisyMzQ7Y2FsYy5hdDo2NjA7Q2FsY3VsYXRvciAlZ2xyLXBhcnNlciAlZGVmaW5lIGFwaS5wdXJlICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbG9jYXRpb25zICVkZWZpbmVzICVkZWZpbmUgYXBpLnByZWZpeCBcImNhbGNcIiAldmVyYm9zZSAleWFjYyAlcGFyc2UtcGFyYW0ge3NlbWFudGljX3ZhbHVlICpyZXN1bHR9ICVwYXJzZS1wYXJhbSB7aW50ICpjb3VudH07OworMjM1O2NhbGMuYXQ6NjcwO0NhbGN1bGF0b3IgJXNrZWxldG9uIFwibGFscjEuY2NcIiAlZGVmaW5lcyAlbG9jYXRpb25zO2MrKzsKKzIzNjtjYWxjLmF0OjY3OTtDYWxjdWxhdG9yICVsYW5ndWFnZSBcIkMrK1wiICVkZWZpbmVzICVsb2NhdGlvbnMgO2MrKzsKKzIzNztjYWxjLmF0OjY4MDtDYWxjdWxhdG9yICVsYW5ndWFnZSBcIkMrK1wiICVkZWZpbmVzICVsb2NhdGlvbnMgJWRlZmluZSBhcGkubG9jYXRpb24udHlwZSBTcGFuO2MrKzsKKzIzODtjYWxjLmF0OjY4MTtDYWxjdWxhdG9yICVsYW5ndWFnZSBcIkMrK1wiICVkZWZpbmVzICVsb2NhdGlvbnMgJWVycm9yLXZlcmJvc2UgJW5hbWUtcHJlZml4IFwiY2FsY1wiICV2ZXJib3NlICV5YWNjO2MrKzsKKzIzOTtjYWxjLmF0OjY4MjtDYWxjdWxhdG9yICVsYW5ndWFnZSBcIkMrK1wiICVkZWZpbmVzICVsb2NhdGlvbnMgJWVycm9yLXZlcmJvc2UgJWRlZmluZSBhcGkucHJlZml4IFwiY2FsY1wiICV2ZXJib3NlICV5YWNjO2MrKzsKKzI0MDtjYWxjLmF0OjY4MztDYWxjdWxhdG9yICVsYW5ndWFnZSBcIkMrK1wiICVkZWZpbmVzICVsb2NhdGlvbnMgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVuYW1lLXByZWZpeCBcImNhbGNcIiAldmVyYm9zZSAleWFjYztjKys7CisyNDE7Y2FsYy5hdDo2ODU7Q2FsY3VsYXRvciAlbGFuZ3VhZ2UgXCJDKytcIiAlZGVmaW5lcyAlbG9jYXRpb25zICVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWRlZmluZSBhcGkucHJlZml4IFwiY2FsY1wiICV2ZXJib3NlICV5YWNjO2MrKzsKKzI0MjtjYWxjLmF0OjY4NztDYWxjdWxhdG9yICVsYW5ndWFnZSBcIkMrK1wiICVkZWZpbmVzICVsb2NhdGlvbnMgJXB1cmUtcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbmFtZS1wcmVmaXggXCJjYWxjXCIgJXZlcmJvc2UgJXlhY2MgJXBhcnNlLXBhcmFtIHtzZW1hbnRpY192YWx1ZSAqcmVzdWx0fSAlcGFyc2UtcGFyYW0ge2ludCAqY291bnR9O2MrKzsKKzI0MztjYWxjLmF0OjY4ODtDYWxjdWxhdG9yICVsYW5ndWFnZSBcIkMrK1wiICVkZWZpbmVzICVsb2NhdGlvbnMgJXB1cmUtcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlZGVmaW5lIGFwaS5wcmVmaXggXCJjYWxjXCIgJXZlcmJvc2UgJXlhY2MgJXBhcnNlLXBhcmFtIHtzZW1hbnRpY192YWx1ZSAqcmVzdWx0fSAlcGFyc2UtcGFyYW0ge2ludCAqY291bnR9O2MrKzsKKzI0NDtjYWxjLmF0OjY5OTtDYWxjdWxhdG9yICVza2VsZXRvbiBcImdsci5jY1wiICVkZWZpbmVzICVsb2NhdGlvbnM7YysrOworMjQ1O2NhbGMuYXQ6NzA4O0NhbGN1bGF0b3IgJWxhbmd1YWdlIFwiQysrXCIgJWdsci1wYXJzZXIgJWRlZmluZXMgJWxvY2F0aW9ucyA7YysrOworMjQ2O2NhbGMuYXQ6NzA5O0NhbGN1bGF0b3IgJWxhbmd1YWdlIFwiQysrXCIgJWdsci1wYXJzZXIgJWRlZmluZXMgJWxvY2F0aW9ucyAlZGVmaW5lIGFwaS5sb2NhdGlvbi50eXBlIFNwYW47YysrOworMjQ3O2NhbGMuYXQ6NzEwO0NhbGN1bGF0b3IgJWxhbmd1YWdlIFwiQysrXCIgJWdsci1wYXJzZXIgJWRlZmluZXMgJWxvY2F0aW9ucyAlZXJyb3ItdmVyYm9zZSAlbmFtZS1wcmVmaXggXCJjYWxjXCIgJXZlcmJvc2UgJXlhY2M7YysrOworMjQ4O2NhbGMuYXQ6NzExO0NhbGN1bGF0b3IgJWxhbmd1YWdlIFwiQysrXCIgJWdsci1wYXJzZXIgJWRlZmluZXMgJWxvY2F0aW9ucyAlZXJyb3ItdmVyYm9zZSAlZGVmaW5lIGFwaS5wcmVmaXggXCJjYWxjXCIgJXZlcmJvc2UgJXlhY2M7YysrOworMjQ5O2NhbGMuYXQ6NzEzO0NhbGN1bGF0b3IgJWxhbmd1YWdlIFwiQysrXCIgJWdsci1wYXJzZXIgJWRlZmluZXMgJWxvY2F0aW9ucyAlZGVidWc7YysrOworMjUwO2NhbGMuYXQ6NzE0O0NhbGN1bGF0b3IgJWxhbmd1YWdlIFwiQysrXCIgJWdsci1wYXJzZXIgJWRlZmluZXMgJWxvY2F0aW9ucyAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJW5hbWUtcHJlZml4IFwiY2FsY1wiICV2ZXJib3NlICV5YWNjO2MrKzsKKzI1MTtjYWxjLmF0OjcxNjtDYWxjdWxhdG9yICVsYW5ndWFnZSBcIkMrK1wiICVnbHItcGFyc2VyICVkZWZpbmVzICVsb2NhdGlvbnMgJXB1cmUtcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbmFtZS1wcmVmaXggXCJjYWxjXCIgJXZlcmJvc2UgJXlhY2M7YysrOworMjUyO2NhbGMuYXQ6NzE4O0NhbGN1bGF0b3IgJWxhbmd1YWdlIFwiQysrXCIgJWdsci1wYXJzZXIgJWRlZmluZXMgJWxvY2F0aW9ucyAlcHVyZS1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVuYW1lLXByZWZpeCBcImNhbGNcIiAldmVyYm9zZSAleWFjYyAlcGFyc2UtcGFyYW0ge3NlbWFudGljX3ZhbHVlICpyZXN1bHR9ICVwYXJzZS1wYXJhbSB7aW50ICpjb3VudH07YysrOworMjUzO2NhbGMuYXQ6NzE5O0NhbGN1bGF0b3IgJWxhbmd1YWdlIFwiQysrXCIgJWdsci1wYXJzZXIgJWRlZmluZXMgJWxvY2F0aW9ucyAlcHVyZS1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVkZWZpbmUgYXBpLnByZWZpeCBcImNhbGNcIiAldmVyYm9zZSAleWFjYyAlcGFyc2UtcGFyYW0ge3NlbWFudGljX3ZhbHVlICpyZXN1bHR9ICVwYXJzZS1wYXJhbSB7aW50ICpjb3VudH07YysrOworMjU0O3RvcnR1cmUuYXQ6MTM3O0JpZyB0cmlhbmdsZTs7CisyNTU7dG9ydHVyZS5hdDoyMjc7QmlnIGhvcml6b250YWw7OworMjU2O3RvcnR1cmUuYXQ6MzY0O01hbnkgbG9va2FoZWFkIHRva2Vuczs7CisyNTc7dG9ydHVyZS5hdDo0NjY7RXhwbG9kaW5nIHRoZSBTdGFjayBTaXplIHdpdGggQWxsb2NhOzsKKzI1ODt0b3J0dXJlLmF0OjUxMjtFeHBsb2RpbmcgdGhlIFN0YWNrIFNpemUgd2l0aCBNYWxsb2M7OworMjU5O2V4aXN0aW5nLmF0Ojc5O0dOVSBBV0sgMy4xLjAgR3JhbW1hcjogTEFMUigxKTs7CisyNjA7ZXhpc3RpbmcuYXQ6Nzk7R05VIEFXSyAzLjEuMCBHcmFtbWFyOiBJRUxSKDEpOzsKKzI2MTtleGlzdGluZy5hdDo3OTtHTlUgQVdLIDMuMS4wIEdyYW1tYXI6IENhbm9uaWNhbCBMUigxKTs7CisyNjI7ZXhpc3RpbmcuYXQ6NzgzO0dOVSBDaW0gR3JhbW1hcjogTEFMUigxKTs7CisyNjM7ZXhpc3RpbmcuYXQ6NzgzO0dOVSBDaW0gR3JhbW1hcjogSUVMUigxKTs7CisyNjQ7ZXhpc3RpbmcuYXQ6NzgzO0dOVSBDaW0gR3JhbW1hcjogQ2Fub25pY2FsIExSKDEpOzsKKzI2NTtleGlzdGluZy5hdDoxNDAzO0dOVSBwaWMgKEdyb2ZmIDEuMTguMSkgR3JhbW1hcjogTEFMUigxKTs7CisyNjY7ZXhpc3RpbmcuYXQ6MTQwMztHTlUgcGljIChHcm9mZiAxLjE4LjEpIEdyYW1tYXI6IElFTFIoMSk7OworMjY3O2V4aXN0aW5nLmF0OjE0MDM7R05VIHBpYyAoR3JvZmYgMS4xOC4xKSBHcmFtbWFyOiBDYW5vbmljYWwgTFIoMSk7OworMjY4O3JlZ3Jlc3Npb24uYXQ6MjU7VHJpdmlhbCBncmFtbWFyczs7CisyNjk7cmVncmVzc2lvbi5hdDo1NTtZWVNUWVBFIHR5cGVkZWY7OworMjcwO3JlZ3Jlc3Npb24uYXQ6ODU7RWFybHkgdG9rZW4gZGVmaW5pdGlvbnMgd2l0aCAtLXlhY2M7OworMjcxO3JlZ3Jlc3Npb24uYXQ6MTI1O0Vhcmx5IHRva2VuIGRlZmluaXRpb25zIHdpdGhvdXQgLS15YWNjOzsKKzI3MjtyZWdyZXNzaW9uLmF0OjE3MDtCcmFjZXMgcGFyc2luZzs7CisyNzM7cmVncmVzc2lvbi5hdDoxOTQ7RHVwbGljYXRlIHN0cmluZzs7CisyNzQ7cmVncmVzc2lvbi5hdDoyMjI7UnVsZSBMaW5lIE51bWJlcnM7cmVwb3J0OworMjc1O3JlZ3Jlc3Npb24uYXQ6MzY4O01peGluZyAldG9rZW4gc3R5bGVzOzsKKzI3NjtyZWdyZXNzaW9uLmF0OjM5MTtJbnZhbGlkIGlucHV0czs7CisyNzc7cmVncmVzc2lvbi5hdDo0MTg7SW52YWxpZCBpbnB1dHMgd2l0aCB7fTs7CisyNzg7cmVncmVzc2lvbi5hdDo0NDM7VG9rZW4gZGVmaW5pdGlvbnM7OworMjc5O3JlZ3Jlc3Npb24uYXQ6NTExO0NoYXJhY3RlcnMgRXNjYXBlczs7CisyODA7cmVncmVzc2lvbi5hdDo1NDQ7V2ViMmMgUmVwb3J0O3JlcG9ydDsKKzI4MTtyZWdyZXNzaW9uLmF0OjcyMTtXZWIyYyBBY3Rpb25zO3JlcG9ydDsKKzI4MjtyZWdyZXNzaW9uLmF0OjkzNjtEYW5jZXIgOzsKKzI4MztyZWdyZXNzaW9uLmF0OjkzNztEYW5jZXIgJWdsci1wYXJzZXI7OworMjg0O3JlZ3Jlc3Npb24uYXQ6OTM4O0RhbmNlciAlc2tlbGV0b24gXCJsYWxyMS5jY1wiO2MrKzsKKzI4NTtyZWdyZXNzaW9uLmF0OjEwMjA7RXhwZWN0aW5nIHR3byB0b2tlbnMgOzsKKzI4NjtyZWdyZXNzaW9uLmF0OjEwMjE7RXhwZWN0aW5nIHR3byB0b2tlbnMgJWdsci1wYXJzZXI7OworMjg3O3JlZ3Jlc3Npb24uYXQ6MTAyMjtFeHBlY3RpbmcgdHdvIHRva2VucyAlc2tlbGV0b24gXCJsYWxyMS5jY1wiO2MrKzsKKzI4ODtyZWdyZXNzaW9uLmF0OjEwMzA7QnJhY2VkIGNvZGUgaW4gZGVjbGFyYXRpb24gaW4gcnVsZXMgc2VjdGlvbjs7CisyODk7cmVncmVzc2lvbi5hdDoxMDk3O1N0cmluZyBhbGlhcyBkZWNsYXJlZCBhZnRlciB1c2U7OworMjkwO3JlZ3Jlc3Npb24uYXQ6MTEyMDtFeHRyYSBsb29rYWhlYWQgc2V0cyBpbiByZXBvcnQ7OworMjkxO3JlZ3Jlc3Npb24uYXQ6MTE2MTtUb2tlbiBudW1iZXIgaW4gcHJlY2VkZW5jZSBkZWNsYXJhdGlvbjs7CisyOTI7cmVncmVzc2lvbi5hdDoxMjE5O3BhcnNlLWdyYW0ueTogTEFMUiA9IElFTFI7OworMjkzO3JlZ3Jlc3Npb24uYXQ6MTI0MDslZXJyb3ItdmVyYm9zZSBhbmQgWVlTVEFDS19VU0VfQUxMT0NBOzsKKzI5NDtyZWdyZXNzaW9uLmF0OjEzMTk7JWVycm9yLXZlcmJvc2Ugb3ZlcmZsb3c7OworMjk1O3JlZ3Jlc3Npb24uYXQ6MTQyOTtMQUM6IEV4cGxvcmF0b3J5IHN0YWNrOzsKKzI5NjtyZWdyZXNzaW9uLmF0OjE1MjM7TEFDOiBNZW1vcnkgZXhoYXVzdGlvbjs7CisyOTc7cmVncmVzc2lvbi5hdDoxNjY0O0xleCBhbmQgcGFyc2UgcGFyYW1zOiB5YWNjLmM7OworMjk4O3JlZ3Jlc3Npb24uYXQ6MTY2NTtMZXggYW5kIHBhcnNlIHBhcmFtczogZ2xyLmM7OworMjk5O3JlZ3Jlc3Npb24uYXQ6MTY2NjtMZXggYW5kIHBhcnNlIHBhcmFtczogbGFscjEuY2M7YysrOworMzAwO3JlZ3Jlc3Npb24uYXQ6MTY2NztMZXggYW5kIHBhcnNlIHBhcmFtczogZ2xyLmNjO2MrKzsKKzMwMTtjKysuYXQ6MTAxO0RveHlnZW4gUHVibGljIERvY3VtZW50YXRpb247OworMzAyO2MrKy5hdDoxMDI7RG94eWdlbiBQcml2YXRlIERvY3VtZW50YXRpb247OworMzAzO2MrKy5hdDoxNjA7UmVsYXRpdmUgbmFtZXNwYWNlIHJlZmVyZW5jZXM7YysrOworMzA0O2MrKy5hdDoxNjY7QWJzb2x1dGUgbmFtZXNwYWNlIHJlZmVyZW5jZXM7YysrOworMzA1O2MrKy5hdDoxNzU7U3ludGFjdGljYWxseSBpbnZhbGlkIG5hbWVzcGFjZSByZWZlcmVuY2VzOzsKKzMwNjtjKysuYXQ6MTkwO0V4Y2VwdGlvbiBzYWZldHk7YysrOworMzA3O2phdmEuYXQ6MzYwO0NhbGN1bGF0b3IgO2phdmE7CiszMDg7amF2YS5hdDozNjA7Q2FsY3VsYXRvciAlZXJyb3ItdmVyYm9zZSA7amF2YTsKKzMwOTtqYXZhLmF0OjM2MDtDYWxjdWxhdG9yICVsb2NhdGlvbnMgO2phdmE7CiszMTA7amF2YS5hdDozNjA7Q2FsY3VsYXRvciAlZXJyb3ItdmVyYm9zZSAlbG9jYXRpb25zIDtqYXZhOworMzExO2phdmEuYXQ6MzY5O0NhbGN1bGF0b3IgJWxleC1wYXJhbSB7IElucHV0U3RyZWFtIGlzIH0gO2phdmE7CiszMTI7amF2YS5hdDozNjk7Q2FsY3VsYXRvciAlZXJyb3ItdmVyYm9zZSAlbGV4LXBhcmFtIHsgSW5wdXRTdHJlYW0gaXMgfSA7amF2YTsKKzMxMztqYXZhLmF0OjM2OTtDYWxjdWxhdG9yICVsb2NhdGlvbnMgJWxleC1wYXJhbSB7IElucHV0U3RyZWFtIGlzIH0gO2phdmE7CiszMTQ7amF2YS5hdDozNjk7Q2FsY3VsYXRvciAlZXJyb3ItdmVyYm9zZSAlbG9jYXRpb25zICVsZXgtcGFyYW0geyBJbnB1dFN0cmVhbSBpcyB9IDtqYXZhOworMzE1O2phdmEuYXQ6NDU1O0phdmEgcGFyc2VyIGNsYXNzIGFuZCBwYWNrYWdlIG5hbWVzO2phdmE7CiszMTY7amF2YS5hdDo0NzY7SmF2YSBwYXJzZXIgY2xhc3MgbW9kaWZpZXJzO2phdmE7CiszMTc7amF2YS5hdDo1MzQ7SmF2YSBwYXJzZXIgY2xhc3MgZXh0ZW5kcyBhbmQgaW1wbGVtZW50cztqYXZhOworMzE4O2phdmEuYXQ6NTU0O0phdmEgJXBhcnNlLXBhcmFtIGFuZCAlbGV4LXBhcmFtO2phdmE7CiszMTk7amF2YS5hdDo2Mjg7SmF2YSB0aHJvd3Mgc3BlY2lmaWNhdGlvbnM7amF2YTsKKzMyMDtqYXZhLmF0OjcxNztKYXZhIHN0eXBlLCBwb3NpdGlvbl9jbGFzcyBhbmQgbG9jYXRpb25fY2xhc3M7amF2YTsKKzMyMTtqYXZhLmF0Ojc0ODtKYXZhIHN5bnRheCBlcnJvciBoYW5kbGluZyB3aXRob3V0IGVycm9yIHRva2VuO2phdmE7CiszMjI7Y3h4LXR5cGUuYXQ6Mzk0O0dMUjogUmVzb2x2ZSBhbWJpZ3VpdHksIGltcHVyZSwgbm8gbG9jYXRpb25zOzsKKzMyMztjeHgtdHlwZS5hdDo0MDE7R0xSOiBSZXNvbHZlIGFtYmlndWl0eSwgaW1wdXJlLCBsb2NhdGlvbnM7OworMzI0O2N4eC10eXBlLmF0OjQwNztHTFI6IFJlc29sdmUgYW1iaWd1aXR5LCBwdXJlLCBubyBsb2NhdGlvbnM7OworMzI1O2N4eC10eXBlLmF0OjQxNDtHTFI6IFJlc29sdmUgYW1iaWd1aXR5LCBwdXJlLCBsb2NhdGlvbnM7OworMzI2O2N4eC10eXBlLmF0OjQyMTtHTFI6IE1lcmdlIGNvbmZsaWN0aW5nIHBhcnNlcywgaW1wdXJlLCBubyBsb2NhdGlvbnM7OworMzI3O2N4eC10eXBlLmF0OjQyODtHTFI6IE1lcmdlIGNvbmZsaWN0aW5nIHBhcnNlcywgaW1wdXJlLCBsb2NhdGlvbnM7OworMzI4O2N4eC10eXBlLmF0OjQzNTtHTFI6IE1lcmdlIGNvbmZsaWN0aW5nIHBhcnNlcywgcHVyZSwgbm8gbG9jYXRpb25zOzsKKzMyOTtjeHgtdHlwZS5hdDo0NDE7R0xSOiBNZXJnZSBjb25mbGljdGluZyBwYXJzZXMsIHB1cmUsIGxvY2F0aW9uczs7CiszMzA7Y3h4LXR5cGUuYXQ6NDQ4O0dMUjogVmVyYm9zZSBtZXNzYWdlcywgcmVzb2x2ZSBhbWJpZ3VpdHksIGltcHVyZSwgbm8gbG9jYXRpb25zOzsKKzMzMTtnbHItcmVncmVzc2lvbi5hdDoyNTtCYWRseSBDb2xsYXBzZWQgR0xSIFN0YXRlczs7CiszMzI7Z2xyLXJlZ3Jlc3Npb24uYXQ6MTEyO0ltcHJvcGVyIGhhbmRsaW5nIG9mIGVtYmVkZGVkIGFjdGlvbnMgYW5kIGRvbGxhcigtTikgaW4gR0xSIHBhcnNlcnM7OworMzMzO2dsci1yZWdyZXNzaW9uLmF0OjI0NDtJbXByb3BlciBtZXJnaW5nIG9mIEdMUiBkZWxheWVkIGFjdGlvbiBzZXRzOzsKKzMzNDtnbHItcmVncmVzc2lvbi5hdDozNjQ7RHVwbGljYXRlIHJlcHJlc2VudGF0aW9uIG9mIG1lcmdlZCB0cmVlczs7CiszMzU7Z2xyLXJlZ3Jlc3Npb24uYXQ6NDU1O1VzZXIgZGVzdHJ1Y3RvciBmb3IgdW5yZXNvbHZlZCBHTFIgc2VtYW50aWMgdmFsdWU7OworMzM2O2dsci1yZWdyZXNzaW9uLmF0OjUxNTtVc2VyIGRlc3RydWN0b3IgYWZ0ZXIgYW4gZXJyb3IgZHVyaW5nIGEgc3BsaXQgcGFyc2U7OworMzM3O2dsci1yZWdyZXNzaW9uLmF0OjU2OTtEdXBsaWNhdGVkIHVzZXIgZGVzdHJ1Y3RvciBmb3IgbG9va2FoZWFkOzsKKzMzODtnbHItcmVncmVzc2lvbi5hdDo2NTg7SW5jb3JyZWN0bHkgaW5pdGlhbGl6ZWQgbG9jYXRpb24gZm9yIGVtcHR5IHJpZ2h0LWhhbmQgc2lkZSBpbiBHTFI7OworMzM5O2dsci1yZWdyZXNzaW9uLmF0Ojc1MjtObyB1c2VycyBkZXN0cnVjdG9ycyBpZiBzdGFjayAwIGRlbGV0ZWQ7OworMzQwO2dsci1yZWdyZXNzaW9uLmF0OjgyOTtDb3JydXB0ZWQgc2VtYW50aWMgb3B0aW9ucyBpZiB1c2VyIGFjdGlvbiBjdXRzIHBhcnNlOzsKKzM0MTtnbHItcmVncmVzc2lvbi5hdDo4ODM7VW5kZXNpcmFibGUgZGVzdHJ1Y3RvcnMgaWYgdXNlciBhY3Rpb24gY3V0cyBwYXJzZTs7CiszNDI7Z2xyLXJlZ3Jlc3Npb24uYXQ6OTQxO0xlYWtlZCBzZW1hbnRpYyB2YWx1ZXMgaWYgdXNlciBhY3Rpb24gY3V0cyBwYXJzZTs7CiszNDM7Z2xyLXJlZ3Jlc3Npb24uYXQ6MTA2NDtJbmNvcnJlY3QgbG9va2FoZWFkIGR1cmluZyBkZXRlcm1pbmlzdGljIEdMUjs7CiszNDQ7Z2xyLXJlZ3Jlc3Npb24uYXQ6MTE4ODtJbmNvcnJlY3QgbG9va2FoZWFkIGR1cmluZyBub25kZXRlcm1pbmlzdGljIEdMUjs7CiszNDU7Z2xyLXJlZ3Jlc3Npb24uYXQ6MTQwNTtMZWFrZWQgc2VtYW50aWMgdmFsdWVzIHdoZW4gcmVwb3J0aW5nIGFtYmlndWl0eTs7CiszNDY7Z2xyLXJlZ3Jlc3Npb24uYXQ6MTQ4NztMZWFrZWQgbG9va2FoZWFkIGFmdGVyIG5vbmRldGVybWluaXN0aWMgcGFyc2Ugc3ludGF4IGVycm9yOzsKKzM0NztnbHItcmVncmVzc2lvbi5hdDoxNTQ3O1VuaW5pdGlhbGl6ZWQgbG9jYXRpb24gd2hlbiByZXBvcnRpbmcgYW1iaWd1aXR5OzsKKzM0ODtnbHItcmVncmVzc2lvbi5hdDoxNjI1O01pc3NlZCAlbWVyZ2UgdHlwZSB3YXJuaW5ncyB3aGVuIExIUyB0eXBlIGlzIGRlY2xhcmVkIGxhdGVyOzsKKzM0OTtnbHItcmVncmVzc2lvbi5hdDoxNjc4O0FtYmlndWl0eSByZXBvcnRzOzsKKzM1MDtwdXNoLmF0OjI0O01lbW9yeSBMZWFrIGZvciBFYXJseSBEZWxldGlvbjs7CiszNTE7cHVzaC5hdDo4MztNdWx0aXBsZSBpbXB1cmUgaW5zdGFuY2VzOzsKKzM1MjtwdXNoLmF0OjE0NDtVbnN1cHBvcnRlZCBTa2VsZXRvbnM7OworIgorIyBMaXN0IG9mIHRoZSBhbGwgdGhlIHRlc3QgZ3JvdXBzLgorYXRfZ3JvdXBzX2FsbD1gJGFzX2VjaG8gIiRhdF9oZWxwX2FsbCIgfCBzZWQgJ3MvOy4qLy8nYAogCi1hdF9rZXl3b3Jkcz0KKyMgYXRfZm5fdmFsaWRhdGVfcmFuZ2VzIE5BTUUuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVmFsaWRhdGUgYW5kIG5vcm1hbGl6ZSB0aGUgdGVzdCBncm91cCBudW1iZXIgY29udGFpbmVkIGluIGVhY2ggdmFyaWFibGUKKyMgTkFNRS4gTGVhZGluZyB6ZXJvZXMgYXJlIHRyZWF0ZWQgYXMgZGVjaW1hbC4KK2F0X2ZuX3ZhbGlkYXRlX3JhbmdlcyAoKQoreworICBmb3IgYXRfZ3JwCisgIGRvCisgICAgZXZhbCBhdF92YWx1ZT1cJCRhdF9ncnAKKyAgICBpZiB0ZXN0ICRhdF92YWx1ZSAtbHQgMSB8fCB0ZXN0ICRhdF92YWx1ZSAtZ3QgMzUyOyB0aGVuCisgICAgICAkYXNfZWNobyAiaW52YWxpZCB0ZXN0IGdyb3VwOiAkYXRfdmFsdWUiID4mMgorICAgICAgZXhpdCAxCisgICAgZmkKKyAgICBjYXNlICRhdF92YWx1ZSBpbgorICAgICAgMCopICMgV2Ugd2FudCB0byB0cmVhdCBsZWFkaW5nIDAgYXMgZGVjaW1hbCwgbGlrZSBleHByIGFuZCB0ZXN0LCBidXQKKwkgICMgQVNfVkFSX0FSSVRIIHRyZWF0cyBpdCBhcyBvY3RhbCBpZiBpdCB1c2VzICQoKCApKS4KKwkgICMgV2l0aCBYU0kgc2hlbGxzLCAke2F0X3ZhbHVlIyR7YXRfdmFsdWUlJVsxLTldKn19IGF2b2lkcyB0aGUKKwkgICMgZXhwciBmb3JrLCBidXQgaXQgaXMgbm90IHdvcnRoIHRoZSBlZmZvcnQgdG8gZGV0ZXJtaW5lIGlmIHRoZQorCSAgIyBzaGVsbCBzdXBwb3J0cyBYU0kgd2hlbiB0aGUgdXNlciBjYW4ganVzdCBhdm9pZCBsZWFkaW5nIDAuCisJICBldmFsICRhdF9ncnA9J2BleHByICRhdF92YWx1ZSArIDBgJyA7OworICAgIGVzYWMKKyAgZG9uZQorfQorCisjIworIyMgU2V0IHVwIHBhY2thZ2Ugc3BlY2lmaWMgb3B0aW9ucy4KKyMjCisKK2F0X2FyZ19jb21waWxlX2Nfd2l0aF9jeHg9ZmFsc2UKK2F0X2FyZ19naXZlbl9jb21waWxlX2Nfd2l0aF9jeHg9ZmFsc2UKKworCiBhdF9wcmV2PQogZm9yIGF0X29wdGlvbgogZG8KQEAgLTQ3OSw3ICs5ODcsMTAgQEAKICAgICBhdF9wcmV2PQogICBmaQogCi0gIGF0X29wdGFyZz1gZXhwciAieCRhdF9vcHRpb24iIDogJ3hbXj1dKj1cKC4qXCknYAorICBjYXNlICRhdF9vcHRpb24gaW4KKyAgKj0/KikgYXRfb3B0YXJnPWBleHByICJYJGF0X29wdGlvbiIgOiAnW149XSo9XCguKlwpJ2AgOzsKKyAgKikgICAgYXRfb3B0YXJnPSA7OworICBlc2FjCiAKICAgIyBBY2NlcHQgdGhlIGltcG9ydGFudCBDeWdudXMgY29uZmlndXJlIG9wdGlvbnMsIHNvIHdlIGNhbiBkaWFnbm9zZSB0eXBvcy4KIApAQCAtNDkzLDEzICsxMDA0LDI0IEBACiAJOzsKIAogICAgIC0tdmVyc2lvbiB8IC1WICkKLQllY2hvICIkYXNfbWUgKEdOVSBCaXNvbiAyLjMpIgotCWV4aXQgMAorCWF0X3ZlcnNpb25fcD06CiAJOzsKIAogICAgIC0tY2xlYW4gfCAtYyApCi0Jcm0gLXJmICRhdF9zdWl0ZV9kaXIgJGF0X3N1aXRlX2xvZwotCWV4aXQgMAorCWF0X2NsZWFuPToKKwk7OworCisgICAgLS1jb2xvciApCisJYXRfY29sb3I9YWx3YXlzCisJOzsKKyAgICAtLWNvbG9yPSogKQorCWNhc2UgJGF0X29wdGFyZyBpbgorCW5vIHwgbmV2ZXIgfCBub25lKSBhdF9jb2xvcj1uZXZlciA7OworCWF1dG8gfCB0dHkgfCBpZi10dHkpIGF0X2NvbG9yPWF1dG8gOzsKKwlhbHdheXMgfCB5ZXMgfCBmb3JjZSkgYXRfY29sb3I9YWx3YXlzIDs7CisJKikgYXRfb3B0bmFtZT1gZWNobyAiICRhdF9vcHRpb24iIHwgc2VkICdzL14gLy87IHMvPS4qLy8nYAorCSAgIGFzX2ZuX2Vycm9yICQ/ICJ1bnJlY29nbml6ZWQgYXJndW1lbnQgdG8gJGF0X29wdG5hbWU6ICRhdF9vcHRhcmciIDs7CisJZXNhYwogCTs7CiAKICAgICAtLWRlYnVnIHwgLWQgKQpAQCAtNTEyLDMwICsxMDM0LDM1IEBACiAJOzsKIAogICAgIC0tdmVyYm9zZSB8IC12ICkKLQlhdF92ZXJib3NlPWVjaG87IGF0X3F1aWV0PToKKwlhdF92ZXJib3NlPTsgYXRfcXVpZXQ9OgogCTs7CiAKICAgICAtLXRyYWNlIHwgLXggKQotCWF0X3RyYWNlb249J3NldCAtdngnOyBhdF90cmFjZW9mZj0nc2V0ICt2eCcKKwlhdF90cmFjZW9uPSdzZXQgLXgnCisJYXRfdHJhY2VfZWNobz1lY2hvCisJYXRfY2hlY2tfZmlsdGVyX3RyYWNlPWF0X2ZuX2ZpbHRlcl90cmFjZQogCTs7CiAKICAgICBbMC05XSB8IFswLTldWzAtOV0gfCBbMC05XVswLTldWzAtOV0gfCBbMC05XVswLTldWzAtOV1bMC05XSkKLQlhdF9ncm91cHM9IiRhdF9ncm91cHMkYXRfb3B0aW9uICIKKwlhdF9mbl92YWxpZGF0ZV9yYW5nZXMgYXRfb3B0aW9uCisJYXNfZm5fYXBwZW5kIGF0X2dyb3VwcyAiJGF0X29wdGlvbiRhc19ubCIKIAk7OwogCiAgICAgIyBSYW5nZXMKICAgICBbMC05XS0gfCBbMC05XVswLTldLSB8IFswLTldWzAtOV1bMC05XS0gfCBbMC05XVswLTldWzAtOV1bMC05XS0pCi0JYXRfcmFuZ2Vfc3RhcnQ9YGVjaG8gJGF0X29wdGlvbiB8dHIgLWQgJy0nYAotCWF0X3JhbmdlPWBlY2hvICIgJGF0X2dyb3Vwc19hbGwgIiB8IFwKLQkgIHNlZCAtZSAncyxeLiogJyRhdF9yYW5nZV9zdGFydCcgLCckYXRfcmFuZ2Vfc3RhcnQnICwnYAotCWF0X2dyb3Vwcz0iJGF0X2dyb3VwcyRhdF9yYW5nZSAiCisJYXRfcmFuZ2Vfc3RhcnQ9YGVjaG8gJGF0X29wdGlvbiB8dHIgLWQgWC1gCisJYXRfZm5fdmFsaWRhdGVfcmFuZ2VzIGF0X3JhbmdlX3N0YXJ0CisJYXRfcmFuZ2U9YCRhc19lY2hvICIkYXRfZ3JvdXBzX2FsbCIgfCBcCisJICBzZWQgLW5lICcvXickYXRfcmFuZ2Vfc3RhcnQnJC8sJHAnYAorCWFzX2ZuX2FwcGVuZCBhdF9ncm91cHMgIiRhdF9yYW5nZSRhc19ubCIKIAk7OwogCiAgICAgLVswLTldIHwgLVswLTldWzAtOV0gfCAtWzAtOV1bMC05XVswLTldIHwgLVswLTldWzAtOV1bMC05XVswLTldKQotCWF0X3JhbmdlX2VuZD1gZWNobyAkYXRfb3B0aW9uIHx0ciAtZCAnLSdgCi0JYXRfcmFuZ2U9YGVjaG8gIiAkYXRfZ3JvdXBzX2FsbCAiIHwgXAotCSAgc2VkIC1lICdzLCAnJGF0X3JhbmdlX2VuZCcgLiokLCAnJGF0X3JhbmdlX2VuZCcsJ2AKLQlhdF9ncm91cHM9IiRhdF9ncm91cHMkYXRfcmFuZ2UgIgorCWF0X3JhbmdlX2VuZD1gZWNobyAkYXRfb3B0aW9uIHx0ciAtZCBYLWAKKwlhdF9mbl92YWxpZGF0ZV9yYW5nZXMgYXRfcmFuZ2VfZW5kCisJYXRfcmFuZ2U9YCRhc19lY2hvICIkYXRfZ3JvdXBzX2FsbCIgfCBcCisJICBzZWQgLW5lICcxLC9eJyRhdF9yYW5nZV9lbmQnJC9wJ2AKKwlhc19mbl9hcHBlbmQgYXRfZ3JvdXBzICIkYXRfcmFuZ2UkYXNfbmwiCiAJOzsKIAogICAgIFswLTldLVswLTldIHwgWzAtOV0tWzAtOV1bMC05XSB8IFswLTldLVswLTldWzAtOV1bMC05XSB8IFwKQEAgLTU0NCwxMyArMTA3MSw0NSBAQAogICAgIFswLTldWzAtOV1bMC05XS1bMC05XVswLTldWzAtOV0gfCBcCiAgICAgWzAtOV1bMC05XVswLTldLVswLTldWzAtOV1bMC05XVswLTldIHwgXAogICAgIFswLTldWzAtOV1bMC05XVswLTldLVswLTldWzAtOV1bMC05XVswLTldICkKLQlhdF9yYW5nZV9zdGFydD1gZWNobyAkYXRfb3B0aW9uIHxzZWQgJ3MsLS4qLCwnYAotCWF0X3JhbmdlX2VuZD1gZWNobyAkYXRfb3B0aW9uIHxzZWQgJ3MsLiotLCwnYAotCSMgRklYTUU6IE1heWJlIHRlc3QgdG8gbWFrZSBzdXJlIHN0YXJ0IDw9IGVuZD8KLQlhdF9yYW5nZT1gZWNobyAiICRhdF9ncm91cHNfYWxsICIgfCBcCi0JICBzZWQgLWUgJ3MsXi4qICckYXRfcmFuZ2Vfc3RhcnQnICwnJGF0X3JhbmdlX3N0YXJ0JyAsJyBcCi0JICAgICAgLWUgJ3MsICckYXRfcmFuZ2VfZW5kJyAuKiQsICckYXRfcmFuZ2VfZW5kJywnYAotCWF0X2dyb3Vwcz0iJGF0X2dyb3VwcyRhdF9yYW5nZSAiCisJYXRfcmFuZ2Vfc3RhcnQ9YGV4cHIgJGF0X29wdGlvbiA6ICdcKC4qXCktJ2AKKwlhdF9yYW5nZV9lbmQ9YGV4cHIgJGF0X29wdGlvbiA6ICcuKi1cKC4qXCknYAorCWlmIHRlc3QgJGF0X3JhbmdlX3N0YXJ0IC1ndCAkYXRfcmFuZ2VfZW5kOyB0aGVuCisJICBhdF90bXA9JGF0X3JhbmdlX2VuZAorCSAgYXRfcmFuZ2VfZW5kPSRhdF9yYW5nZV9zdGFydAorCSAgYXRfcmFuZ2Vfc3RhcnQ9JGF0X3RtcAorCWZpCisJYXRfZm5fdmFsaWRhdGVfcmFuZ2VzIGF0X3JhbmdlX3N0YXJ0IGF0X3JhbmdlX2VuZAorCWF0X3JhbmdlPWAkYXNfZWNobyAiJGF0X2dyb3Vwc19hbGwiIHwgXAorCSAgc2VkIC1uZSAnL14nJGF0X3JhbmdlX3N0YXJ0JyQvLC9eJyRhdF9yYW5nZV9lbmQnJC9wJ2AKKwlhc19mbl9hcHBlbmQgYXRfZ3JvdXBzICIkYXRfcmFuZ2UkYXNfbmwiCisJOzsKKworICAgICMgRGlyZWN0b3J5IHNlbGVjdGlvbi4KKyAgICAtLWRpcmVjdG9yeSB8IC1DICkKKwlhdF9wcmV2PS0tZGlyZWN0b3J5CisJOzsKKyAgICAtLWRpcmVjdG9yeT0qICkKKwlhdF9jaGFuZ2VfZGlyPToKKwlhdF9kaXI9JGF0X29wdGFyZworCWlmIHRlc3QgeC0gPSAieCRhdF9kaXIiIDsgdGhlbgorCSAgYXRfZGlyPS4vLQorCWZpCisJOzsKKworICAgICMgUGFyYWxsZWwgZXhlY3V0aW9uLgorICAgIC0tam9icyB8IC1qICkKKwlhdF9qb2JzPTAKKwk7OworICAgIC0tam9icz0qIHwgLWpbMC05XSogKQorCWlmIHRlc3QgLW4gIiRhdF9vcHRhcmciOyB0aGVuCisJICBhdF9qb2JzPSRhdF9vcHRhcmcKKwllbHNlCisJICBhdF9qb2JzPWBleHByIFgkYXRfb3B0aW9uIDogJ1gtalwoLipcKSdgCisJZmkKKwljYXNlICRhdF9qb2JzIGluICpbITAtOV0qKQorCSAgYXRfb3B0bmFtZT1gZWNobyAiICRhdF9vcHRpb24iIHwgc2VkICdzL14gLy87IHMvWzAtOT1dLiovLydgCisJICBhc19mbl9lcnJvciAkPyAibm9uLW51bWVyaWMgYXJndW1lbnQgdG8gJGF0X29wdG5hbWU6ICRhdF9qb2JzIiA7OworCWVzYWMKIAk7OwogCiAgICAgIyBLZXl3b3Jkcy4KQEAgLTU1OCw2NyArMTExNywxMjQgQEAKIAlhdF9wcmV2PS0ta2V5d29yZHMKIAk7OwogICAgIC0ta2V5d29yZHM9KiApCi0JYXRfa2V5d29yZHM9IiRhdF9rZXl3b3JkcywkYXRfb3B0YXJnIgorCWF0X2dyb3Vwc19zZWxlY3RlZD0kYXRfaGVscF9hbGwKKwlhdF9zYXZlX0lGUz0kSUZTCisJSUZTPSwKKwlzZXQgWCAkYXRfb3B0YXJnCisJc2hpZnQKKwlJRlM9JGF0X3NhdmVfSUZTCisJZm9yIGF0X2tleXdvcmQKKwlkbworCSAgYXRfaW52ZXJ0PQorCSAgY2FzZSAkYXRfa2V5d29yZCBpbgorCSAgJyEnKikKKwkgICAgYXRfaW52ZXJ0PSItdiIKKwkgICAgYXRfa2V5d29yZD1gZXhwciAiWCRhdF9rZXl3b3JkIiA6ICdYIVwoLipcKSdgCisJICAgIDs7CisJICBlc2FjCisJICAjIEl0IGlzIG9uIHB1cnBvc2UgdGhhdCB3ZSBtYXRjaCB0aGUgdGVzdCBncm91cCB0aXRsZXMgdG9vLgorCSAgYXRfZ3JvdXBzX3NlbGVjdGVkPWAkYXNfZWNobyAiJGF0X2dyb3Vwc19zZWxlY3RlZCIgfAorCSAgICAgIGdyZXAgLWkgJGF0X2ludmVydCAiXlsxLTldW147XSo7LipbOyBdJGF0X2tleXdvcmRbIDtdImAKKwlkb25lCisJIyBTbWFzaCB0aGUga2V5d29yZHMuCisJYXRfZ3JvdXBzX3NlbGVjdGVkPWAkYXNfZWNobyAiJGF0X2dyb3Vwc19zZWxlY3RlZCIgfCBzZWQgJ3MvOy4qLy8nYAorCWFzX2ZuX2FwcGVuZCBhdF9ncm91cHMgIiRhdF9ncm91cHNfc2VsZWN0ZWQkYXNfbmwiCiAJOzsKKyAgICAtLXJlY2hlY2spCisJYXRfcmVjaGVjaz06CisJOzsKKyAgICAtLWNvbXBpbGUtYy13aXRoLWN4eCApCisJYXRfb3B0YXJnPToKKwlhdF9hcmdfY29tcGlsZV9jX3dpdGhfY3h4PToKKwlhdF9hcmdfZ2l2ZW5fY29tcGlsZV9jX3dpdGhfY3h4PToKKwkJOzsKKyAgICAtLW5vLWNvbXBpbGUtYy13aXRoLWN4eCApCisJYXRfb3B0YXJnPWZhbHNlCisJYXRfYXJnX2NvbXBpbGVfY193aXRoX2N4eD1mYWxzZQorCWF0X2FyZ19naXZlbl9jb21waWxlX2Nfd2l0aF9jeHg9OgorCQk7OworCiAKICAgICAqPSopCi0gIAlhdF9lbnZ2YXI9YGV4cHIgIngkYXRfb3B0aW9uIiA6ICd4XChbXj1dKlwpPSdgCi0gIAkjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCi0gIAlleHByICJ4JGF0X2VudnZhciIgOiAiLipbXl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gIAkgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB2YXJpYWJsZSBuYW1lOiAkYXRfZW52dmFyIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAJYXRfdmFsdWU9YGVjaG8gIiRhdF9vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgCi0gIAlldmFsICIkYXRfZW52dmFyPSckYXRfdmFsdWUnIgotICAJZXhwb3J0ICRhdF9lbnZ2YXIKLQkjIFByb3BhZ2F0ZSB0byBkZWJ1ZyBzY3JpcHRzLgotICAJYXRfZGVidWdfYXJncz0iJGF0X2RlYnVnX2FyZ3MgJGF0X29wdGlvbiIKLSAgCTs7CisJYXRfZW52dmFyPWBleHByICJ4JGF0X29wdGlvbiIgOiAneFwoW149XSpcKT0nYAorCSMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKwljYXNlICRhdF9lbnZ2YXIgaW4KKwkgICcnIHwgWzAtOV0qIHwgKlshXyRhc19jcl9hbG51bV0qICkKKwkgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFyaWFibGUgbmFtZTogXGAkYXRfZW52dmFyJyIgOzsKKwllc2FjCisJYXRfdmFsdWU9YCRhc19lY2hvICIkYXRfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYAorCSMgRXhwb3J0IG5vdywgYnV0IHNhdmUgZXZhbCBmb3IgbGF0ZXIgYW5kIGZvciBkZWJ1ZyBzY3JpcHRzLgorCWV4cG9ydCAkYXRfZW52dmFyCisJYXNfZm5fYXBwZW5kIGF0X2RlYnVnX2FyZ3MgIiAkYXRfZW52dmFyPSckYXRfdmFsdWUnIgorCTs7CiAKLSAgICAgKikgZWNobyAiJGFzX21lOiBpbnZhbGlkIG9wdGlvbjogJGF0X29wdGlvbiIgPiYyCi0JZWNobyAiVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMgorICAgICAqKSAkYXNfZWNobyAiJGFzX21lOiBpbnZhbGlkIG9wdGlvbjogJGF0X29wdGlvbiIgPiYyCisJJGFzX2VjaG8gIlRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjIKIAlleGl0IDEKIAk7OwogICBlc2FjCiBkb25lCiAKLSMgUHJvY2VzcyB0aGUgLS1rZXl3b3JkcwotaWYgdGVzdCAtbiAiJGF0X2tleXdvcmRzIjsgdGhlbgotICBhdF9ncm91cHNfc2VsZWN0ZWQ9JGF0X2hlbHBfYWxsCi0gIGZvciBhdF9rZXl3b3JkIGluIGBJRlM9LDsgc2V0IFggJGF0X2tleXdvcmRzOyBzaGlmdDsgZWNobyAkezErJEB9YAotICBkbwotICAgICMgSXQgaXMgb24gcHVycG9zZSB0aGF0IHdlIG1hdGNoIHRoZSB0ZXN0IGdyb3VwIHRpdGxlcyB0b28uCi0gICAgYXRfZ3JvdXBzX3NlbGVjdGVkPWBlY2hvICIkYXRfZ3JvdXBzX3NlbGVjdGVkIiB8Ci0JCQlncmVwIC1pICJeW147XSo7W147XSouKls7IF0kYXRfa2V5d29yZFsgO10iYAotICBkb25lCi0gIGF0X2dyb3Vwc19zZWxlY3RlZD1gZWNobyAiJGF0X2dyb3Vwc19zZWxlY3RlZCIgfCBzZWQgJ3MvOy4qLy8nYAotICAjIFNtYXNoIHRoZSBlbmQgb2YgbGluZXMuCi0gIGF0X2dyb3Vwc19zZWxlY3RlZD1gZWNobyAkYXRfZ3JvdXBzX3NlbGVjdGVkYAotICBhdF9ncm91cHM9IiRhdF9ncm91cHMkYXRfZ3JvdXBzX3NlbGVjdGVkICIKKyMgVmVyaWZ5IG91ciBsYXN0IG9wdGlvbiBkaWRuJ3QgcmVxdWlyZSBhbiBhcmd1bWVudAoraWYgdGVzdCAtbiAiJGF0X3ByZXYiOyB0aGVuIDoKKyAgYXNfZm5fZXJyb3IgJD8gIlxgJGF0X3ByZXYnIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgogZmkKIAorIyBUaGUgZmlsZSBjb250YWluaW5nIHRoZSBzdWl0ZS4KK2F0X3N1aXRlX2xvZz0kYXRfZGlyLyRhc19tZS5sb2cKKwogIyBTZWxlY3RlZCB0ZXN0IGdyb3Vwcy4KLXRlc3QgLXogIiRhdF9ncm91cHMiICYmIGF0X2dyb3Vwcz0kYXRfZ3JvdXBzX2FsbAoraWYgdGVzdCAteiAiJGF0X2dyb3VwcyRhdF9yZWNoZWNrIjsgdGhlbgorICBhdF9ncm91cHM9JGF0X2dyb3Vwc19hbGwKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGF0X3JlY2hlY2siICYmIHRlc3QgLXIgIiRhdF9zdWl0ZV9sb2ciOyB0aGVuCisgICAgYXRfb2xkZmFpbHM9YHNlZCAtbiAnCisgICAgICAvXkZhaWxlZCB0ZXN0czokLywvXlNraXBwZWQgdGVzdHM6JC97CisJcy9eWyBdKlwoWzEtOV1bMC05XSpcKTouKi9cMS9wCisgICAgICB9CisgICAgICAvXlVuZXhwZWN0ZWQgcGFzc2VzOiQvLC9eIyMgRGV0YWlsZWQgZmFpbGVkIHRlc3RzL3sKKwlzL15bIF0qXChbMS05XVswLTldKlwpOi4qL1wxL3AKKyAgICAgIH0KKyAgICAgIC9eIyMgRGV0YWlsZWQgZmFpbGVkIHRlc3RzL3EKKyAgICAgICcgIiRhdF9zdWl0ZV9sb2ciYAorICAgIGFzX2ZuX2FwcGVuZCBhdF9ncm91cHMgIiRhdF9vbGRmYWlscyRhc19ubCIKKyAgZmkKKyAgIyBTb3J0IHRoZSB0ZXN0cywgcmVtb3ZpbmcgZHVwbGljYXRlcy4KKyAgYXRfZ3JvdXBzPWAkYXNfZWNobyAiJGF0X2dyb3VwcyIgfCBzb3J0IC1udSB8IHNlZCAnL14kL2QnYAorZmkKKworaWYgdGVzdCB4IiRhdF9jb2xvciIgPSB4YWx3YXlzIFwKKyAgIHx8IHsgdGVzdCB4IiRhdF9jb2xvciIgPSB4YXV0byAmJiB0ZXN0IC10IDE7IH07IHRoZW4KKyAgYXRfcmVkPWBwcmludGYgJ1wwMzNbMDszMW0nYAorICBhdF9ncm49YHByaW50ZiAnXDAzM1swOzMybSdgCisgIGF0X2xnbj1gcHJpbnRmICdcMDMzWzE7MzJtJ2AKKyAgYXRfYmx1PWBwcmludGYgJ1wwMzNbMTszNG0nYAorICBhdF9zdGQ9YHByaW50ZiAnXDAzM1ttJ2AKK2Vsc2UKKyAgYXRfcmVkPSBhdF9ncm49IGF0X2xnbj0gYXRfYmx1PSBhdF9zdGQ9CitmaQogCiAjIEhlbHAgbWVzc2FnZS4KIGlmICRhdF9oZWxwX3A7IHRoZW4KLSAgY2F0IDw8X0FURU9GCisgIGNhdCA8PF9BVEVPRiB8fCBhdF93cml0ZV9mYWlsPTEKIFVzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVkFSSUFCTEU9VkFMVUVdLi4uIFtURVNUU10KIAotUnVuIGFsbCB0aGUgdGVzdHMsIG9yIHRoZSBzZWxlY3RlZCBURVNUUywgYW5kIHNhdmUgYSBkZXRhaWxlZCBsb2cgZmlsZS4KLVVwb24gZmFpbHVyZSwgY3JlYXRlIGRlYnVnZ2luZyBzY3JpcHRzLgorUnVuIGFsbCB0aGUgdGVzdHMsIG9yIHRoZSBzZWxlY3RlZCBURVNUUywgZ2l2ZW4gYnkgbnVtZXJpYyByYW5nZXMsIGFuZAorc2F2ZSBhIGRldGFpbGVkIGxvZyBmaWxlLiAgVXBvbiBmYWlsdXJlLCBjcmVhdGUgZGVidWdnaW5nIHNjcmlwdHMuCiAKLVlvdSBzaG91bGQgbm90IGNoYW5nZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdW5sZXNzIGV4cGxpY2l0bHkgcGFzc2VkCi1hcyBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiAgU2V0IFxgQVVUT1RFU1RfUEFUSCcgdG8gc2VsZWN0IHRoZSBleGVjdXRhYmxlcworRG8gbm90IGNoYW5nZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZGlyZWN0bHkuICBJbnN0ZWFkLCBzZXQgdGhlbSB2aWEKK2NvbW1hbmQgbGluZSBhcmd1bWVudHMuICBTZXQgXGBBVVRPVEVTVF9QQVRIJyB0byBzZWxlY3QgdGhlIGV4ZWN1dGFibGVzCiB0byBleGVyY2lzZS4gIEVhY2ggcmVsYXRpdmUgZGlyZWN0b3J5IGlzIGV4cGFuZGVkIGFzIGJ1aWxkIGFuZCBzb3VyY2UKLWRpcmVjdG9yaWVzIHJlbGF0aXZlbHkgdG8gdGhlIHRvcCBsZXZlbCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gIEUuZy4sCitkaXJlY3RvcmllcyByZWxhdGl2ZSB0byB0aGUgdG9wIGxldmVsIG9mIHRoaXMgZGlzdHJpYnV0aW9uLgorRS5nLiwgZnJvbSB3aXRoaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeSAvdG1wL2Zvby0xLjAsIGludm9raW5nIHRoaXM6CiAKICAgJCAkMCBBVVRPVEVTVF9QQVRIPWJpbgogCi1wb3NzaWJseSBhbW91bnRzIGludG8KK2lzIGVxdWl2YWxlbnQgdG8gdGhlIGZvbGxvd2luZywgYXNzdW1pbmcgdGhlIHNvdXJjZSBkaXJlY3RvcnkgaXMgL3NyYy9mb28tMS4wOgogCi0gIFBBVEg9L3RtcC9mb28tMS4wL2Jpbjovc3JjL2Zvby0xLjAvYmluOlwkUEFUSAorICBQQVRIPS90bXAvZm9vLTEuMC9iaW46L3NyYy9mb28tMS4wL2JpbjpcJFBBVEggJDAKIF9BVEVPRgotY2F0IDw8X0FURU9GCitjYXQgPDxfQVRFT0YgfHwgYXRfd3JpdGVfZmFpbD0xCiAKIE9wZXJhdGlvbiBtb2RlczoKICAgLWgsIC0taGVscCAgICAgcHJpbnQgdGhlIGhlbHAgbWVzc2FnZSwgdGhlbiBleGl0CkBAIC02MjYsMTQ1ICsxMjQyLDM1NiBAQAogICAtYywgLS1jbGVhbiAgICByZW1vdmUgYWxsIHRoZSBmaWxlcyB0aGlzIHRlc3Qgc3VpdGUgbWlnaHQgY3JlYXRlIGFuZCBleGl0CiAgIC1sLCAtLWxpc3QgICAgIGRlc2NyaWJlcyBhbGwgdGhlIHRlc3RzLCBvciB0aGUgc2VsZWN0ZWQgVEVTVFMKIF9BVEVPRgotY2F0IDw8X0FURU9GCitjYXQgPDxfQVRFT0YgfHwgYXRfd3JpdGVfZmFpbD0xCiAKIEV4ZWN1dGlvbiB0dW5pbmc6CisgIC1DLCAtLWRpcmVjdG9yeT1ESVIKKyAgICAgICAgICAgICAgICAgY2hhbmdlIHRvIGRpcmVjdG9yeSBESVIgYmVmb3JlIHN0YXJ0aW5nCisgICAgICAtLWNvbG9yWz1uZXZlcnxhdXRvfGFsd2F5c10KKyAgICAgICAgICAgICAgICAgZGlzYWJsZSBjb2xvcmVkIHRlc3QgcmVzdWx0cywgb3IgZW5hYmxlIGV2ZW4gd2l0aG91dCB0ZXJtaW5hbAorICAtaiwgLS1qb2JzWz1OXQorICAgICAgICAgICAgICAgICBBbGxvdyBOIGpvYnMgYXQgb25jZTsgaW5maW5pdGUgam9icyB3aXRoIG5vIGFyZyAoZGVmYXVsdCAxKQogICAtaywgLS1rZXl3b3Jkcz1LRVlXT1JEUwotCSAgICAgICAgIHNlbGVjdCB0aGUgdGVzdHMgbWF0Y2hpbmcgYWxsIHRoZSBjb21tYSBzZXBhcmF0ZWQgS0VZV09SRFMKLQkgICAgICAgICBhY2N1bXVsYXRlcworICAgICAgICAgICAgICAgICBzZWxlY3QgdGhlIHRlc3RzIG1hdGNoaW5nIGFsbCB0aGUgY29tbWEtc2VwYXJhdGVkIEtFWVdPUkRTCisgICAgICAgICAgICAgICAgIG11bHRpcGxlIFxgLWsnIGFjY3VtdWxhdGU7IHByZWZpeGVkIFxgIScgbmVnYXRlcyBhIEtFWVdPUkQKKyAgICAgIC0tcmVjaGVjayAgc2VsZWN0IGFsbCB0ZXN0cyB0aGF0IGZhaWxlZCBvciBwYXNzZWQgdW5leHBlY3RlZGx5IGxhc3QgdGltZQogICAtZSwgLS1lcnJleGl0ICBhYm9ydCBhcyBzb29uIGFzIGEgdGVzdCBmYWlsczsgaW1wbGllcyAtLWRlYnVnCiAgIC12LCAtLXZlcmJvc2UgIGZvcmNlIG1vcmUgZGV0YWlsZWQgb3V0cHV0Ci0JICAgICAgICAgZGVmYXVsdCBmb3IgZGVidWdnaW5nIHNjcmlwdHMKLSAgLWQsIC0tZGVidWcgICAgaW5oaWJpdCBjbGVhbiB1cCBhbmQgZGVidWcgc2NyaXB0IGNyZWF0aW9uCi0JICAgICAgICAgZGVmYXVsdCBmb3IgZGVidWdnaW5nIHNjcmlwdHMKKyAgICAgICAgICAgICAgICAgZGVmYXVsdCBmb3IgZGVidWdnaW5nIHNjcmlwdHMKKyAgLWQsIC0tZGVidWcgICAgaW5oaWJpdCBjbGVhbiB1cCBhbmQgdG9wLWxldmVsIGxvZ2dpbmcKKyAgICAgICAgICAgICAgICAgZGVmYXVsdCBmb3IgZGVidWdnaW5nIHNjcmlwdHMKICAgLXgsIC0tdHJhY2UgICAgZW5hYmxlIHRlc3RzIHNoZWxsIHRyYWNpbmcKIF9BVEVPRgotY2F0IDw8X0FURU9GCitjYXQgPDxfQVRFT0YgfHwgYXRfd3JpdGVfZmFpbD0xCisKK090aGVyIG9wdGlvbnM6CitfQVRFT0YKKworY2F0IDw8X0FURU9GIHx8IGF0X3dyaXRlX2ZhaWw9MQorY29tcGlsZSBDIHBhcnNlcnMgd2l0aCB0aGUgQysrIGNvbXBpbGVyCitfQVRFT0YKK2NhdCA8PF9BVEVPRiB8fCBhdF93cml0ZV9mYWlsPTEKIAogUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1iaXNvbkBnbnUub3JnPi4KK0dlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LgogX0FURU9GCi0gIGV4aXQgMAorICBleGl0ICRhdF93cml0ZV9mYWlsCiBmaQogCiAjIExpc3Qgb2YgdGVzdHMuCiBpZiAkYXRfbGlzdF9wOyB0aGVuCi0gIGNhdCA8PF9BVEVPRgotR05VIEJpc29uIDIuMyB0ZXN0IHN1aXRlIHRlc3QgZ3JvdXBzOgorICBjYXQgPDxfQVRFT0YgfHwgYXRfd3JpdGVfZmFpbD0xCitHTlUgQmlzb24gMi43IHRlc3Qgc3VpdGUgdGVzdCBncm91cHM6CiAKLSBOVU06IEZJTEVOQU1FOkxJTkUgICAgICBURVNULUdST1VQLU5BTUUKKyBOVU06IEZJTEUtTkFNRTpMSU5FICAgICBURVNULUdST1VQLU5BTUUKICAgICAgIEtFWVdPUkRTCiAKIF9BVEVPRgotICAjICIgIDEgNDIgIDQ1ICIgPT4gIl4oMXw0Mnw0NSk7Ii4KLSAgYXRfZ3JvdXBzX3BhdHRlcm49YGVjaG8gIiRhdF9ncm91cHMiIHwgc2VkICdzL14gICovLztzLyAgKiQvLztzLyAgKi98L2cnYAotICBlY2hvICIkYXRfaGVscF9hbGwiIHwKLSAgICBhd2sgJ0JFR0lOIHsgRlMgPSAiOyIgfQotCSB7IGlmICgkMSAhfiAvXignIiRhdF9ncm91cHNfcGF0dGVybiInKSQvKSBuZXh0IH0KLQkgeyBpZiAoJDEpIHByaW50ZiAiICUzZDogJS0xOHMgJXNcbiIsICQxLCAkMiwgJDMKLQkgICBpZiAoJDQpIHByaW50ZiAiICAgICAgJXNcbiIsICQ0IH0gJwotICBleGl0IDAKKyAgIyBQYXNzIGFuIGVtcHR5IGxpbmUgYXMgc2VwYXJhdG9yIGJldHdlZW4gc2VsZWN0ZWQgZ3JvdXBzIGFuZCBoZWxwLgorICAkYXNfZWNobyAiJGF0X2dyb3VwcyRhc19ubCRhc19ubCRhdF9oZWxwX2FsbCIgfAorICAgIGF3ayAnTkYgPT0gMSAmJiBGUyAhPSAiOyIgeworCSAgIHNlbGVjdGVkWyQgMV0gPSAxCisJICAgbmV4dAorCSB9CisJIC9eJC8geyBGUyA9ICI7IiB9CisJIE5GID4gMCB7CisJICAgaWYgKHNlbGVjdGVkWyQgMV0pIHsKKwkgICAgIHByaW50ZiAiICUzZDogJS0xOHMgJXNcbiIsICQgMSwgJCAyLCAkIDMKKwkgICAgIGlmICgkIDQpIHsKKwkgICAgICAgbG1heCA9IDc5CisJICAgICAgIGluZGVudCA9ICIgICAgICIKKwkgICAgICAgbGluZSA9IGluZGVudAorCSAgICAgICBsZW4gPSBsZW5ndGggKGxpbmUpCisJICAgICAgIG4gPSBzcGxpdCAoJCA0LCBhLCAiICIpCisJICAgICAgIGZvciAoaSA9IDE7IGkgPD0gbjsgaSsrKSB7CisJCSBsID0gbGVuZ3RoIChhW2ldKSArIDEKKwkJIGlmIChpID4gMSAmJiBsZW4gKyBsID4gbG1heCkgeworCQkgICBwcmludCBsaW5lCisJCSAgIGxpbmUgPSBpbmRlbnQgIiAiIGFbaV0KKwkJICAgbGVuID0gbGVuZ3RoIChsaW5lKQorCQkgfSBlbHNlIHsKKwkJICAgbGluZSA9IGxpbmUgIiAiIGFbaV0KKwkJICAgbGVuICs9IGwKKwkJIH0KKwkgICAgICAgfQorCSAgICAgICBpZiAobikKKwkJIHByaW50IGxpbmUKKwkgICAgIH0KKwkgICB9CisJIH0nIHx8IGF0X3dyaXRlX2ZhaWw9MQorICBleGl0ICRhdF93cml0ZV9mYWlsCitmaQoraWYgJGF0X3ZlcnNpb25fcDsgdGhlbgorICAkYXNfZWNobyAiJGFzX21lIChHTlUgQmlzb24gMi43KSIgJiYKKyAgY2F0IDw8XF9BVEVPRiB8fCBhdF93cml0ZV9mYWlsPTEKKworQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhpcyB0ZXN0IHN1aXRlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKK3VubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KK19BVEVPRgorICBleGl0ICRhdF93cml0ZV9mYWlsCitmaQorCisjIFNob3VsZCB3ZSBwcmludCBiYW5uZXJzPyAgWWVzIGlmIG1vcmUgdGhhbiBvbmUgdGVzdCBpcyBydW4uCitjYXNlICRhdF9ncm91cHMgaW4gIygKKyAgKiRhc19ubCogKQorICAgICAgYXRfcHJpbnRfYmFubmVycz06IDs7ICMoCisgICogKSBhdF9wcmludF9iYW5uZXJzPWZhbHNlIDs7Citlc2FjCisjIFRleHQgZm9yIGJhbm5lciBOLCBzZXQgdG8gYSBzaW5nbGUgc3BhY2Ugb25jZSBwcmludGVkLgorIyBCYW5uZXIgMS4gaW5wdXQuYXQ6MTgKKyMgQ2F0ZWdvcnkgc3RhcnRzIGF0IHRlc3QgZ3JvdXAgMS4KK2F0X2Jhbm5lcl90ZXh0XzE9IklucHV0IFByb2Nlc3NpbmcuIgorIyBCYW5uZXIgMi4gbmFtZWQtcmVmcy5hdDoxOQorIyBDYXRlZ29yeSBzdGFydHMgYXQgdGVzdCBncm91cCAzOS4KK2F0X2Jhbm5lcl90ZXh0XzI9Ik5hbWVkIHJlZmVyZW5jZXMgdGVzdHMuIgorIyBCYW5uZXIgMy4gb3V0cHV0LmF0OjE4CisjIENhdGVnb3J5IHN0YXJ0cyBhdCB0ZXN0IGdyb3VwIDUxLgorYXRfYmFubmVyX3RleHRfMz0iT3V0cHV0IGZpbGUgbmFtZXMuIgorIyBCYW5uZXIgNC4gc2tlbGV0b25zLmF0OjE4CisjIENhdGVnb3J5IHN0YXJ0cyBhdCB0ZXN0IGdyb3VwIDkyLgorYXRfYmFubmVyX3RleHRfND0iU2tlbGV0b24gU3VwcG9ydC4iCisjIEJhbm5lciA1LiBzZXRzLmF0OjU5CisjIENhdGVnb3J5IHN0YXJ0cyBhdCB0ZXN0IGdyb3VwIDk4LgorYXRfYmFubmVyX3RleHRfNT0iR3JhbW1hciBTZXRzIChGaXJzdHMgZXRjLikuIgorIyBCYW5uZXIgNi4gcmVkdWNlLmF0OjE4CisjIENhdGVnb3J5IHN0YXJ0cyBhdCB0ZXN0IGdyb3VwIDEwMi4KK2F0X2Jhbm5lcl90ZXh0XzY9IkdyYW1tYXIgUmVkdWN0aW9uLiIKKyMgQmFubmVyIDcuIHN5bmNsaW5lcy5hdDoxOQorIyBDYXRlZ29yeSBzdGFydHMgYXQgdGVzdCBncm91cCAxMjguCithdF9iYW5uZXJfdGV4dF83PSJVc2VyIEFjdGlvbnMuIgorIyBCYW5uZXIgOC4gaGVhZGVycy5hdDoxOQorIyBDYXRlZ29yeSBzdGFydHMgYXQgdGVzdCBncm91cCAxMzguCithdF9iYW5uZXJfdGV4dF84PSJQYXJzZXIgSGVhZGVycy4iCisjIEJhbm5lciA5LiBhY3Rpb25zLmF0OjE4CisjIENhdGVnb3J5IHN0YXJ0cyBhdCB0ZXN0IGdyb3VwIDE0NC4KK2F0X2Jhbm5lcl90ZXh0Xzk9IlVzZXIgQWN0aW9ucy4iCisjIEJhbm5lciAxMC4gY29uZmxpY3RzLmF0OjE5CisjIENhdGVnb3J5IHN0YXJ0cyBhdCB0ZXN0IGdyb3VwIDE4MS4KK2F0X2Jhbm5lcl90ZXh0XzEwPSJDb25mbGljdHMuIgorIyBCYW5uZXIgMTEuIGNhbGMuYXQ6NTg4CisjIENhdGVnb3J5IHN0YXJ0cyBhdCB0ZXN0IGdyb3VwIDIwMC4KK2F0X2Jhbm5lcl90ZXh0XzExPSJTaW1wbGUgTEFMUigxKSBDYWxjdWxhdG9yLiIKKyMgQmFubmVyIDEyLiBjYWxjLmF0OjYyOAorIyBDYXRlZ29yeSBzdGFydHMgYXQgdGVzdCBncm91cCAyMTguCithdF9iYW5uZXJfdGV4dF8xMj0iU2ltcGxlIEdMUiBDYWxjdWxhdG9yLiIKKyMgQmFubmVyIDEzLiBjYWxjLmF0OjY2NworIyBDYXRlZ29yeSBzdGFydHMgYXQgdGVzdCBncm91cCAyMzUuCithdF9iYW5uZXJfdGV4dF8xMz0iU2ltcGxlIExBTFIoMSkgQysrIENhbGN1bGF0b3IuIgorIyBCYW5uZXIgMTQuIGNhbGMuYXQ6Njk2CisjIENhdGVnb3J5IHN0YXJ0cyBhdCB0ZXN0IGdyb3VwIDI0NC4KK2F0X2Jhbm5lcl90ZXh0XzE0PSJTaW1wbGUgR0xSIEMrKyBDYWxjdWxhdG9yLiIKKyMgQmFubmVyIDE1LiB0b3J0dXJlLmF0OjE5CisjIENhdGVnb3J5IHN0YXJ0cyBhdCB0ZXN0IGdyb3VwIDI1NC4KK2F0X2Jhbm5lcl90ZXh0XzE1PSJUb3J0dXJlIFRlc3RzLiIKKyMgQmFubmVyIDE2LiBleGlzdGluZy5hdDoxOQorIyBDYXRlZ29yeSBzdGFydHMgYXQgdGVzdCBncm91cCAyNTkuCithdF9iYW5uZXJfdGV4dF8xNj0iRXhpc3RpbmcgR3JhbW1hcnMuIgorIyBCYW5uZXIgMTcuIHJlZ3Jlc3Npb24uYXQ6MTgKKyMgQ2F0ZWdvcnkgc3RhcnRzIGF0IHRlc3QgZ3JvdXAgMjY4LgorYXRfYmFubmVyX3RleHRfMTc9IlJlZ3Jlc3Npb24gdGVzdHMuIgorIyBCYW5uZXIgMTguIGMrKy5hdDoxOQorIyBDYXRlZ29yeSBzdGFydHMgYXQgdGVzdCBncm91cCAzMDEuCithdF9iYW5uZXJfdGV4dF8xOD0iQysrIEZlYXR1cmVzLiIKKyMgQmFubmVyIDE5LiBqYXZhLmF0OjE4CisjIENhdGVnb3J5IHN0YXJ0cyBhdCB0ZXN0IGdyb3VwIDMwNy4KK2F0X2Jhbm5lcl90ZXh0XzE5PSJKYXZhIENhbGN1bGF0b3IuIgorIyBCYW5uZXIgMjAuIGphdmEuYXQ6MzgyCisjIENhdGVnb3J5IHN0YXJ0cyBhdCB0ZXN0IGdyb3VwIDMxNS4KK2F0X2Jhbm5lcl90ZXh0XzIwPSJKYXZhIFBhcmFtZXRlcnMuIgorIyBCYW5uZXIgMjEuIGN4eC10eXBlLmF0OjE4CisjIENhdGVnb3J5IHN0YXJ0cyBhdCB0ZXN0IGdyb3VwIDMyMi4KK2F0X2Jhbm5lcl90ZXh0XzIxPSJDKysgVHlwZSBTeW50YXggKEdMUikuIgorIyBCYW5uZXIgMjIuIGdsci1yZWdyZXNzaW9uLmF0OjE5CisjIENhdGVnb3J5IHN0YXJ0cyBhdCB0ZXN0IGdyb3VwIDMzMS4KK2F0X2Jhbm5lcl90ZXh0XzIyPSJHTFIgUmVncmVzc2lvbiBUZXN0cyIKKyMgQmFubmVyIDIzLiBwdXNoLmF0OjE4CisjIENhdGVnb3J5IHN0YXJ0cyBhdCB0ZXN0IGdyb3VwIDM1MC4KK2F0X2Jhbm5lcl90ZXh0XzIzPSJQdXNoIFBhcnNpbmcgVGVzdHMiCisKKyMgVGFrZSBhbnkgLUMgaW50byBhY2NvdW50LgoraWYgJGF0X2NoYW5nZV9kaXIgOyB0aGVuCisgIHRlc3QgeCAhPSAieCRhdF9kaXIiICYmIGNkICIkYXRfZGlyIiBcCisgICAgfHwgYXNfZm5fZXJyb3IgJD8gInVuYWJsZSB0byBjaGFuZ2UgZGlyZWN0b3J5IgorICBhdF9kaXI9YHB3ZGAKK2ZpCisKKyMgTG9hZCB0aGUgY29uZmlnIGZpbGVzIGZvciBhbnkgZGVmYXVsdCB2YXJpYWJsZSBhc3NpZ25tZW50cy4KK2ZvciBhdF9maWxlIGluIGF0Y29uZmlnIGF0bG9jYWwKK2RvCisgIHRlc3QgLXIgJGF0X2ZpbGUgfHwgY29udGludWUKKyAgLiAuLyRhdF9maWxlIHx8IGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGNvbnRlbnQ6ICRhdF9maWxlIgorZG9uZQorCisjIEF1dG9jb25mIDw9Mi41OWIgc2V0IGF0X3RvcF9idWlsZGRpciBpbnN0ZWFkIG9mIGF0X3RvcF9idWlsZF9wcmVmaXg6Cis6ICIke2F0X3RvcF9idWlsZF9wcmVmaXg9JGF0X3RvcF9idWlsZGRpcn0iCisKKyMgUGVyZm9ybSBhbnkgYXNzaWdubWVudHMgcmVxdWVzdGVkIGR1cmluZyBhcmd1bWVudCBwYXJzaW5nLgorZXZhbCAiJGF0X2RlYnVnX2FyZ3MiCisKKyMgYXRjb25maWcgZGVsaXZlcnMgbmFtZXMgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSB0aGUgdGVzdCBzdWl0ZSBpcworIyBpbiwgYnV0IHRoZSBncm91cHMgdGhlbXNlbHZlcyBhcmUgcnVuIGluIHRlc3RzdWl0ZS1kaXIvZ3JvdXAtZGlyLgoraWYgdGVzdCAtbiAiJGF0X3RvcF9zcmNkaXIiOyB0aGVuCisgIGJ1aWxkZGlyPS4uLy4uCisgIGZvciBhdF9kaXJfdmFyIGluIHNyY2RpciB0b3Bfc3JjZGlyIHRvcF9idWlsZF9wcmVmaXgKKyAgZG8KKyAgICBldmFsIGF0X3ZhbD1cJGF0XyRhdF9kaXJfdmFyCisgICAgY2FzZSAkYXRfdmFsIGluCisgICAgICBbXFwvJF0qIHwgPzpbXFwvXSogKSBhdF9wcmVmaXg9IDs7CisgICAgICAqKSBhdF9wcmVmaXg9Li4vLi4vIDs7CisgICAgZXNhYworICAgIGV2YWwgIiRhdF9kaXJfdmFyPVwkYXRfcHJlZml4XCRhdF92YWwiCisgIGRvbmUKK2ZpCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBEaXJlY3Rvcnkgc3RydWN0dXJlLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBUaGlzIGlzIHRoZSBzZXQgb2YgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIHVzZWQgYnkgdGhpcyBzY3JpcHQKKyMgKG5vbi1saXRlcmFscyBhcmUgY2FwaXRhbGl6ZWQpOgorIworIyBURVNUU1VJVEUgICAgICAgICAtIHRoZSB0ZXN0c3VpdGUKKyMgVEVTVFNVSVRFLmxvZyAgICAgLSBzdW1tYXJpemVzIHRoZSBjb21wbGV0ZSB0ZXN0c3VpdGUgcnVuCisjIFRFU1RTVUlURS5kaXIvICAgIC0gY3JlYXRlZCBkdXJpbmcgYSBydW4sIHJlbWFpbnMgYWZ0ZXIgLWQgb3IgZmFpbGVkIHRlc3QKKyMgKyBhdC1ncm91cHMvICAgICAgLSBkdXJpbmcgYSBydW46IHN0YXR1cyBvZiBhbGwgZ3JvdXBzIGluIHJ1bgorIyB8ICsgTk5OLyAgICAgICAgICAtIGR1cmluZyBhIHJ1bjogbWV0YS1kYXRhIGFib3V0IHRlc3QgZ3JvdXAgTk5OCisjIHwgfCArIGNoZWNrLWxpbmUgIC0gbG9jYXRpb24gKHNvdXJjZSBmaWxlIGFuZCBsaW5lKSBvZiBjdXJyZW50IEFUX0NIRUNLCisjIHwgfCArIHN0YXR1cyAgICAgIC0gZXhpdCBzdGF0dXMgb2YgY3VycmVudCBBVF9DSEVDSworIyB8IHwgKyBzdGRvdXQgICAgICAtIHN0ZG91dCBvZiBjdXJyZW50IEFUX0NIRUNLCisjIHwgfCArIHN0ZGVyMSAgICAgIC0gc3RkZXJyLCBpbmNsdWRpbmcgdHJhY2UKKyMgfCB8ICsgc3RkZXJyICAgICAgLSBzdGRlcnIsIHdpdGggdHJhY2UgZmlsdGVyZWQgb3V0CisjIHwgfCArIHRlc3Qtc291cmNlIC0gcG9ydGlvbiBvZiB0ZXN0c3VpdGUgdGhhdCBkZWZpbmVzIGdyb3VwCisjIHwgfCArIHRpbWVzICAgICAgIC0gdGltZXN0YW1wcyBmb3IgY29tcHV0aW5nIGR1cmF0aW9uCisjIHwgfCArIHBhc3MgICAgICAgIC0gY3JlYXRlZCBpZiBncm91cCBwYXNzZWQKKyMgfCB8ICsgeHBhc3MgICAgICAgLSBjcmVhdGVkIGlmIGdyb3VwIHhwYXNzZWQKKyMgfCB8ICsgZmFpbCAgICAgICAgLSBjcmVhdGVkIGlmIGdyb3VwIGZhaWxlZAorIyB8IHwgKyB4ZmFpbCAgICAgICAtIGNyZWF0ZWQgaWYgZ3JvdXAgeGZhaWxlZAorIyB8IHwgKyBza2lwICAgICAgICAtIGNyZWF0ZWQgaWYgZ3JvdXAgc2tpcHBlZAorIyArIGF0LXN0b3AgICAgICAgICAtIGR1cmluZyBhIHJ1bjogZW5kIHRoZSBydW4gaWYgdGhpcyBmaWxlIGV4aXN0cworIyArIGF0LXNvdXJjZS1saW5lcyAtIGR1cmluZyBhIHJ1bjogY2FjaGUgb2YgVEVTVFNVSVRFIGxpbmUgbnVtYmVycyBmb3IgZXh0cmFjdGlvbgorIyArIDAuLk5OTi8gICAgICAgICAtIGNyZWF0ZWQgZm9yIGVhY2ggZ3JvdXAgTk5OLCByZW1haW5zIGFmdGVyIC1kIG9yIGZhaWxlZCB0ZXN0CisjIHwgKyBURVNUU1VJVEUubG9nIC0gc3VtbWFyaXplcyB0aGUgZ3JvdXAgcmVzdWx0cworIyB8ICsgLi4uICAgICAgICAgICAtIGZpbGVzIGNyZWF0ZWQgZHVyaW5nIHRoZSBncm91cAorCisjIFRoZSBkaXJlY3RvcnkgdGhlIHdob2xlIHN1aXRlIHdvcmtzIGluLgorIyBTaG91bGQgYmUgYWJzb2x1dGUgdG8gbGV0IHRoZSB1c2VyIGBjZCcgYXQgd2lsbC4KK2F0X3N1aXRlX2Rpcj0kYXRfZGlyLyRhc19tZS5kaXIKKyMgVGhlIGZpbGUgY29udGFpbmluZyB0aGUgc3VpdGUgKCRhdF9kaXIgbWlnaHQgaGF2ZSBjaGFuZ2VkIHNpbmNlIGVhcmxpZXIpLgorYXRfc3VpdGVfbG9nPSRhdF9kaXIvJGFzX21lLmxvZworIyBUaGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgaGVscGVyIGZpbGVzIHBlciB0ZXN0IGdyb3VwLgorYXRfaGVscGVyX2Rpcj0kYXRfc3VpdGVfZGlyL2F0LWdyb3VwcworIyBTdG9wIGZpbGU6IGlmIGl0IGV4aXN0cywgZG8gbm90IHN0YXJ0IG5ldyBqb2JzLgorYXRfc3RvcF9maWxlPSRhdF9zdWl0ZV9kaXIvYXQtc3RvcAorIyBUaGUgZmlmbyB1c2VkIGZvciB0aGUgam9iIGRpc3BhdGNoZXIuCithdF9qb2JfZmlmbz0kYXRfc3VpdGVfZGlyL2F0LWpvYi1maWZvCisKK2lmICRhdF9jbGVhbjsgdGhlbgorICB0ZXN0IC1kICIkYXRfc3VpdGVfZGlyIiAmJgorICAgIGZpbmQgIiRhdF9zdWl0ZV9kaXIiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IFx7XH0gXDsKKyAgcm0gLWYgLXIgIiRhdF9zdWl0ZV9kaXIiICIkYXRfc3VpdGVfbG9nIgorICBleGl0ICQ/CiBmaQogCiAjIERvbid0IHRha2Ugcmlza3M6IHVzZSBvbmx5IGFic29sdXRlIGRpcmVjdG9yaWVzIGluIFBBVEguCiAjCi0jIEZvciBzdGFuZC1hbG9uZSB0ZXN0IHN1aXRlcywgQVVUT1RFU1RfUEFUSCBpcyByZWxhdGl2ZSB0byBgLicuCisjIEZvciBzdGFuZC1hbG9uZSB0ZXN0IHN1aXRlcyAoaWUuIGF0Y29uZmlnIHdhcyBub3QgZm91bmQpLAorIyBBVVRPVEVTVF9QQVRIIGlzIHJlbGF0aXZlIHRvIGAuJy4KICMKICMgRm9yIGVtYmVkZGVkIHRlc3Qgc3VpdGVzLCBBVVRPVEVTVF9QQVRIIGlzIHJlbGF0aXZlIHRvIHRoZSB0b3AgbGV2ZWwKICMgb2YgdGhlIHBhY2thZ2UuICBUaGVuIGV4cGFuZCBpdCBpbnRvIGJ1aWxkL3NyYyBwYXJ0cywgc2luY2UgdXNlcnMKICMgbWF5IGNyZWF0ZSBleGVjdXRhYmxlcyBpbiBib3RoIHBsYWNlcy4KLSMKLSMgVGhlcmUgbWlnaHQgYmUgZGlyZWN0b3JpZXMgdGhhdCBkb24ndCBleGlzdCwgYnV0IGRvbid0IHJlZGlyZWN0Ci0jIGJ1aWx0aW5zJyAoZWcuLCBjZCkgc3RkZXJyIGRpcmVjdGx5OiBVbHRyaXgncyBzaCBoYXRlcyB0aGF0LgotQVVUT1RFU1RfUEFUSD1gZWNobyAkQVVUT1RFU1RfUEFUSCB8IHRyICc6JyAkUEFUSF9TRVBBUkFUT1JgCitBVVRPVEVTVF9QQVRIPWAkYXNfZWNobyAiJEFVVE9URVNUX1BBVEgiIHwgc2VkICJzfDp8JFBBVEhfU0VQQVJBVE9SfGciYAogYXRfcGF0aD0KIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKIGZvciBhc19kaXIgaW4gJEFVVE9URVNUX1BBVEggJFBBVEgKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgY2FzZSAkYXNfZGlyIGluCisgICAgdGVzdCAtbiAiJGF0X3BhdGgiICYmIGFzX2ZuX2FwcGVuZCBhdF9wYXRoICRQQVRIX1NFUEFSQVRPUgorY2FzZSAkYXNfZGlyIGluCiAgIFtcXC9dKiB8ID86W1xcL10qICkKLSAgICBhdF9wYXRoPSRhdF9wYXRoJFBBVEhfU0VQQVJBVE9SJGFzX2RpcgorICAgIGFzX2ZuX2FwcGVuZCBhdF9wYXRoICIkYXNfZGlyIgogICAgIDs7CiAgICogKQotICAgIGlmIHRlc3QgLXogIiRhdF90b3BfYnVpbGRkaXIiOyB0aGVuCisgICAgaWYgdGVzdCAteiAiJGF0X3RvcF9idWlsZF9wcmVmaXgiOyB0aGVuCiAgICAgICAjIFN0YW5kLWFsb25lIHRlc3Qgc3VpdGUuCi0gICAgICBhdF9wYXRoPSRhdF9wYXRoJFBBVEhfU0VQQVJBVE9SJGFzX2RpcgorICAgICAgYXNfZm5fYXBwZW5kIGF0X3BhdGggIiRhc19kaXIiCiAgICAgZWxzZQogICAgICAgIyBFbWJlZGRlZCB0ZXN0IHN1aXRlLgotICAgICAgYXRfcGF0aD0kYXRfcGF0aCRQQVRIX1NFUEFSQVRPUiRhdF90b3BfYnVpbGRkaXIvJGFzX2RpcgotICAgICAgYXRfcGF0aD0kYXRfcGF0aCRQQVRIX1NFUEFSQVRPUiRhdF90b3Bfc3JjZGlyLyRhc19kaXIKKyAgICAgIGFzX2ZuX2FwcGVuZCBhdF9wYXRoICIkYXRfdG9wX2J1aWxkX3ByZWZpeCRhc19kaXIkUEFUSF9TRVBBUkFUT1IiCisgICAgICBhc19mbl9hcHBlbmQgYXRfcGF0aCAiJGF0X3RvcF9zcmNkaXIvJGFzX2RpciIKICAgICBmaQogICAgIDs7CiBlc2FjCi1kb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAogCiAjIE5vdyBidWlsZCBhbmQgc2ltcGxpZnkgUEFUSC4KLVBBVEg9CisjCisjIFRoZXJlIG1pZ2h0IGJlIGRpcmVjdG9yaWVzIHRoYXQgZG9uJ3QgZXhpc3QsIGJ1dCBkb24ndCByZWRpcmVjdAorIyBidWlsdGlucycgKGVnLiwgY2QpIHN0ZGVyciBkaXJlY3RseTogVWx0cml4J3Mgc2ggaGF0ZXMgdGhhdC4KK2F0X25ld19wYXRoPQogYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogZm9yIGFzX2RpciBpbiAkYXRfcGF0aAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBhc19kaXI9YChjZCAiJGFzX2RpciIgJiYgcHdkKSAyPi9kZXYvbnVsbGAKLXRlc3QgLWQgIiRhc19kaXIiIHx8IGNvbnRpbnVlCi1jYXNlICRQQVRIIGluCi0JICAgICAgICAgICRhc19kaXIgICAgICAgICAgICAgICAgIHwgXAotCSAgICAgICAgICAkYXNfZGlyJFBBVEhfU0VQQVJBVE9SKiB8IFwKLSAgKiRQQVRIX1NFUEFSQVRPUiRhc19kaXIgICAgICAgICAgICAgICAgIHwgXAotICAqJFBBVEhfU0VQQVJBVE9SJGFzX2RpciRQQVRIX1NFUEFSQVRPUiogKSA7OwotCi0gICcnKSBQQVRIPSRhc19kaXIgOzsKLSAgICopIFBBVEg9JFBBVEgkUEFUSF9TRVBBUkFUT1IkYXNfZGlyIDs7CisgICAgdGVzdCAtZCAiJGFzX2RpciIgfHwgY29udGludWUKK2Nhc2UgJGFzX2RpciBpbgorICBbXFwvXSogfCA/OltcXC9dKiApIDs7CisgICogKSBhc19kaXI9YChjZCAiJGFzX2RpciIgJiYgcHdkKSAyPi9kZXYvbnVsbGAgOzsKIGVzYWMKLWRvbmUKK2Nhc2UgJFBBVEhfU0VQQVJBVE9SJGF0X25ld19wYXRoJFBBVEhfU0VQQVJBVE9SIGluCisgICokUEFUSF9TRVBBUkFUT1IkYXNfZGlyJFBBVEhfU0VQQVJBVE9SKikgOzsKKyAgJFBBVEhfU0VQQVJBVE9SJFBBVEhfU0VQQVJBVE9SKSBhdF9uZXdfcGF0aD0kYXNfZGlyIDs7CisgICopIGFzX2ZuX2FwcGVuZCBhdF9uZXdfcGF0aCAiJFBBVEhfU0VQQVJBVE9SJGFzX2RpciIgOzsKK2VzYWMKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUwogCitQQVRIPSRhdF9uZXdfcGF0aAogZXhwb3J0IFBBVEgKIAogIyBTZXR0aW5nIHVwIHRoZSBGRHMuCi0jIDUgaXMgdGhlIGxvZyBmaWxlLiAgTm90IHRvIGJlIG92ZXJ3cml0dGVuIGlmIGAtZCcuCiAKLSRhdF9kZWJ1Z19wICYmIGF0X3N1aXRlX2xvZz0vZGV2L251bGwKLWV4ZWMgNT4kYXRfc3VpdGVfbG9nCisKKworIyA1IGlzIHRoZSBsb2cgZmlsZS4gIE5vdCB0byBiZSBvdmVyd3JpdHRlbiBpZiBgLWQnLgoraWYgJGF0X2RlYnVnX3A7IHRoZW4KKyAgYXRfc3VpdGVfbG9nPS9kZXYvbnVsbAorZWxzZQorICA6ID4iJGF0X3N1aXRlX2xvZyIKK2ZpCitleGVjIDU+PiIkYXRfc3VpdGVfbG9nIgogCiAjIEJhbm5lcnMgYW5kIGxvZ3MuCi1jYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBHTlUgQmlzb24gMi4zIHRlc3Qgc3VpdGUuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKKyRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBHTlUgQmlzb24gMi43IHRlc3Qgc3VpdGUuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjIgogewotICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBHTlUgQmlzb24gMi4zIHRlc3Qgc3VpdGUuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKKyAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEdOVSBCaXNvbiAyLjcgdGVzdCBzdWl0ZS4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMiCiAgIGVjaG8KIAotICBlY2hvICIkYXNfbWU6IGNvbW1hbmQgbGluZSB3YXM6IgotICBlY2hvICIgICQgJDAgJGF0X2NsaV9hcmdzIgorICAkYXNfZWNobyAiJGFzX21lOiBjb21tYW5kIGxpbmUgd2FzOiIKKyAgJGFzX2VjaG8gIiAgXCQgJDAgJGF0X2NsaV9hcmdzIgogICBlY2hvCiAKLSAgIyBUcnkgdG8gZmluZCBhIGZldyBDaGFuZ2VMb2dzIGluIGNhc2UgaXQgbWlnaHQgaGVscCBkZXRlcm1pbmluZyB0aGUKLSAgIyBleGFjdCB2ZXJzaW9uLiAgVXNlIHRoZSByZWxhdGl2ZSBkaXI6IGlmIHRoZSB0b3AgZGlyIGlzIGEgc3ltbGluaywKLSAgIyBmaW5kIHdpbGwgbm90IGZvbGxvdyBpdCAoYW5kIG9wdGlvbnMgdG8gZm9sbG93IHRoZSBsaW5rcyBhcmUgbm90Ci0gICMgcG9ydGFibGUpLCB3aGljaCB3b3VsZCByZXN1bHQgaW4gbm8gb3V0cHV0IGhlcmUuCi0gIGlmIHRlc3QgLW4gIiRhdF90b3Bfc3JjZGlyIjsgdGhlbgotICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tICMjCi0jIyBDaGFuZ2VMb2dzLiAjIwotIyMgLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAorICAjIElmIENoYW5nZUxvZyBleGlzdHMsIGxpc3QgYSBmZXcgbGluZXMgaW4gY2FzZSBpdCBtaWdodCBoZWxwIGRldGVybWluaW5nCisgICMgdGhlIGV4YWN0IHZlcnNpb24uCisgIGlmIHRlc3QgLW4gIiRhdF90b3Bfc3JjZGlyIiAmJiB0ZXN0IC1mICIkYXRfdG9wX3NyY2Rpci9DaGFuZ2VMb2ciOyB0aGVuCisgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0gIyMKKyMjIENoYW5nZUxvZy4gIyMKKyMjIC0tLS0tLS0tLS0gIyMiCiAgICAgZWNobwotICAgIGZvciBhdF9maWxlIGluIGBmaW5kICIkYXRfdG9wX3NyY2RpciIgLW5hbWUgQ2hhbmdlTG9nIC1wcmludGAKLSAgICBkbwotICAgICAgZWNobyAiJGFzX21lOiAkYXRfZmlsZToiCi0gICAgICBzZWQgJ3MvXi98IC87MTBxJyAkYXRfZmlsZQotICAgICAgZWNobwotICAgIGRvbmUKKyAgICBzZWQgJ3MvXi98IC87MTBxJyAiJGF0X3RvcF9zcmNkaXIvQ2hhbmdlTG9nIgorICAgIGVjaG8KKyAgZmkKIAotICAgIHsKKyAgewogY2F0IDw8X0FTVU5BTUUKICMjIC0tLS0tLS0tLSAjIwogIyMgUGxhdGZvcm0uICMjCkBAIC03ODIsNyArMTYwOSw3IEBACiAvYmluL2FyY2ggICAgICAgICAgICAgID0gYCgvYmluL2FyY2gpIDI+L2Rldi9udWxsICAgICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCiAvdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCiAvdXNyL2NvbnZleC9nZXRzeXNpbmZvID0gYCgvdXNyL2NvbnZleC9nZXRzeXNpbmZvKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCi1ob3N0aW5mbyAgICAgICAgICAgICAgID0gYChob3N0aW5mbykgMj4vZGV2L251bGwgICAgICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCisvdXNyL2Jpbi9ob3N0aW5mbyAgICAgID0gYCgvdXNyL2Jpbi9ob3N0aW5mbykgMj4vZGV2L251bGwgICAgICB8fCBlY2hvIHVua25vd25gCiAvYmluL21hY2hpbmUgICAgICAgICAgID0gYCgvYmluL21hY2hpbmUpIDI+L2Rldi9udWxsICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCiAvdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVsKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCiAvYmluL3VuaXZlcnNlICAgICAgICAgID0gYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbCAgICAgICAgICB8fCBlY2hvIHVua25vd25gCkBAIC03OTQsMjcgKzE2MjEsMTk4IEBACiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGVjaG8gIlBBVEg6ICRhc19kaXIiCi1kb25lCisgICAgJGFzX2VjaG8gIlBBVEg6ICRhc19kaXIiCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAogfQotICAgIGVjaG8KLSAgZmkKKyAgZWNobwogCiAgICMgQ29udGVudHMgb2YgdGhlIGNvbmZpZyBmaWxlcy4KICAgZm9yIGF0X2ZpbGUgaW4gYXRjb25maWcgYXRsb2NhbAogICBkbwogICAgIHRlc3QgLXIgJGF0X2ZpbGUgfHwgY29udGludWUKLSAgICBlY2hvICIkYXNfbWU6ICRhdF9maWxlOiIKKyAgICAkYXNfZWNobyAiJGFzX21lOiAkYXRfZmlsZToiCiAgICAgc2VkICdzL14vfCAvJyAkYXRfZmlsZQogICAgIGVjaG8KICAgZG9uZQorfSA+JjUKIAotICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tICMjCithdF9zYXZlX3NwZWNpYWxfZmlsZXMgKCkKK3sKKyAgZm9yIGF0X3NhdmVfZmlsZSBpbiBzdGRlcnIgZXhwZXJyIGV4cG91dAorICBkbworICAgIHRlc3QgISAtZiBhdC1iaXNvbi1jaGVjay0kYXRfc2F2ZV9maWxlLmJhayB8fAorICAgICAgYXNfZm5fZXJyb3IgMSAiZmF0YWwgZXJyb3I6IGJhY2stdXAgb24gdG9wIG9mIGEgYmFjay11cCIKKyAgICB0ZXN0ICEgLWYgJGF0X3NhdmVfZmlsZSB8fCBtdiAkYXRfc2F2ZV9maWxlIGF0LWJpc29uLWNoZWNrLSRhdF9zYXZlX2ZpbGUuYmFrCisgIGRvbmUKK30KKworYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzICgpCit7CisgIGZvciBhdF9zYXZlX2ZpbGUgaW4gc3RkZXJyIGV4cGVyciBleHBvdXQKKyAgZG8KKyAgICB0ZXN0ICEgLWYgYXQtYmlzb24tY2hlY2stJGF0X3NhdmVfZmlsZS5iYWsgfHwKKyAgICAgIG12IGF0LWJpc29uLWNoZWNrLSRhdF9zYXZlX2ZpbGUuYmFrICRhdF9zYXZlX2ZpbGUKKyAgZG9uZQorfQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEF1dG90ZXN0IHNoZWxsIGZ1bmN0aW9ucy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBhdF9mbl9iYW5uZXIgTlVNQkVSCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0IGJhbm5lciBOVU1CRVIsIHByb3ZpZGVkIHRoZSB0ZXN0c3VpdGUgaXMgcnVubmluZyBtdWx0aXBsZSBncm91cHMgYW5kCisjIHRoaXMgcGFydGljdWxhciBiYW5uZXIgaGFzIG5vdCB5ZXQgYmVlbiBwcmludGVkLgorYXRfZm5fYmFubmVyICgpCit7CisgICRhdF9wcmludF9iYW5uZXJzIHx8IHJldHVybiAwCisgIGV2YWwgYXRfYmFubmVyX3RleHQ9XCRhdF9iYW5uZXJfdGV4dF8kMQorICB0ZXN0ICJ4JGF0X2Jhbm5lcl90ZXh0IiA9ICJ4ICIgJiYgcmV0dXJuIDAKKyAgZXZhbCAiYXRfYmFubmVyX3RleHRfJDE9XCIgXCIiCisgIGlmIHRlc3QgLXogIiRhdF9iYW5uZXJfdGV4dCI7IHRoZW4KKyAgICAkYXRfZmlyc3QgfHwgZWNobworICBlbHNlCisgICAgJGFzX2VjaG8gIiRhc19ubCRhdF9iYW5uZXJfdGV4dCRhc19ubCIKKyAgZmkKK30gIyBhdF9mbl9iYW5uZXIKKworIyBhdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgUkVBU09OIExJTkUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gQVRfQ0hFQ0sgcHJlcGFyYXRpb25zIGZvciB0aGUgY29tbWFuZCBhdCBMSU5FIGZvciBhbiB1bnRyYWNlYWJsZQorIyBjb21tYW5kOyBSRUFTT04gaXMgdGhlIHJlYXNvbiBmb3IgZGlzYWJsaW5nIHRyYWNpbmcuCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgKCkKK3sKKyAgJGF0X3RyYWNlX2VjaG8gIk5vdCBlbmFibGluZyBzaGVsbCB0cmFjaW5nIChjb21tYW5kIGNvbnRhaW5zICQxKSIKKyAgJGFzX2VjaG8gIiQyIiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisgIGF0X2NoZWNrX3RyYWNlPTogYXRfY2hlY2tfZmlsdGVyPToKKyAgOiA+IiRhdF9zdGRvdXQiOyA6ID4iJGF0X3N0ZGVyciIKK30KKworIyBhdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlIExJTkUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gQVRfQ0hFQ0sgcHJlcGFyYXRpb25zIGZvciB0aGUgY29tbWFuZCBhdCBMSU5FIGZvciBhIHRyYWNlYWJsZQorIyBjb21tYW5kLgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAoKQoreworICAkYXNfZWNobyAiJDEiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyAgYXRfY2hlY2tfdHJhY2U9JGF0X3RyYWNlb24gYXRfY2hlY2tfZmlsdGVyPSRhdF9jaGVja19maWx0ZXJfdHJhY2UKKyAgOiA+IiRhdF9zdGRvdXQiOyA6ID4iJGF0X3N0ZGVyciIKK30KKworIyBhdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgQ09NTUFORCBMSU5FCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVjaWRlIGlmIENPTU1BTkQgYXQgTElORSBpcyB0cmFjZWFibGUgYXQgcnVudGltZSwgYW5kIGNhbGwgdGhlIGFwcHJvcHJpYXRlCisjIHByZXBhcmF0aW9uIGZ1bmN0aW9uLgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICgpCit7CisgIGNhc2UgJDEgaW4KKyAgICAqJGFzX25sKikKKyAgICAgIGF0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgIiQyIiA7OworICAgICopCisgICAgICBhdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICIkMiIgOzsKKyAgZXNhYworfQorCisjIGF0X2ZuX2ZpbHRlcl90cmFjZQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVtb3ZlIHRoZSBsaW5lcyBpbiB0aGUgZmlsZSAiJGF0X3N0ZGVyciIgZ2VuZXJhdGVkIGJ5ICJzZXQgLXgiIGFuZCBwcmludAorIyB0aGVtIHRvIHN0ZGVyci4KK2F0X2ZuX2ZpbHRlcl90cmFjZSAoKQoreworICBtdiAiJGF0X3N0ZGVyciIgIiRhdF9zdGRlcjEiCisgIGdyZXAgJ14gKisnICIkYXRfc3RkZXIxIiA+JjIKKyAgZ3JlcCAtdiAnXiAqKycgIiRhdF9zdGRlcjEiID4iJGF0X3N0ZGVyciIKK30KKworIyBhdF9mbl9sb2dfZmFpbHVyZSBGSUxFLUxJU1QKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvcHkgdGhlIGZpbGVzIGluIHRoZSBsaXN0IG9uIHN0ZG91dCB3aXRoIGEgIj4gIiBwcmVmaXgsIGFuZCBleGl0IHRoZSBzaGVsbAorIyB3aXRoIGEgZmFpbHVyZSBleGl0IGNvZGUuCithdF9mbl9sb2dfZmFpbHVyZSAoKQoreworICBmb3IgZmlsZQorICAgIGRvICRhc19lY2hvICIkZmlsZToiOyBzZWQgJ3MvXi8+IC8nICIkZmlsZSI7IGRvbmUKKyAgZWNobyAxID4gIiRhdF9zdGF0dXNfZmlsZSIKKyAgZXhpdCAxCit9CisKKyMgYXRfZm5fY2hlY2tfc2tpcCBFWElULUNPREUgTElORQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgRVhJVC1DT0RFIGlzIGEgc3BlY2lhbCBleGl0IGNvZGUgKDc3IG9yIDk5KSwgYW5kIGlmIHNvIGV4aXQKKyMgdGhlIHRlc3QgZ3JvdXAgc3Vic2hlbGwgd2l0aCB0aGF0IHNhbWUgZXhpdCBjb2RlLiBVc2UgTElORSBpbiBhbnkgcmVwb3J0CisjIGFib3V0IHRlc3QgZmFpbHVyZS4KK2F0X2ZuX2NoZWNrX3NraXAgKCkKK3sKKyAgY2FzZSAkMSBpbgorICAgIDk5KSBlY2hvIDk5ID4gIiRhdF9zdGF0dXNfZmlsZSI7IGF0X2ZhaWxlZD06CisJJGFzX2VjaG8gIiQyOiBoYXJkIGZhaWx1cmUiOyBleGl0IDk5OzsKKyAgICA3NykgZWNobyA3NyA+ICIkYXRfc3RhdHVzX2ZpbGUiOyBleGl0IDc3OzsKKyAgZXNhYworfQorCisjIGF0X2ZuX2NoZWNrX3N0YXR1cyBFWFBFQ1RFRCBFWElULUNPREUgTElORQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgd2hldGhlciBFWElULUNPREUgaXMgdGhlIEVYUEVDVEVEIGV4aXQgY29kZSwgYW5kIGlmIHNvIGRvIG5vdGhpbmcuCisjIE90aGVyd2lzZSwgaWYgaXQgaXMgNzcgb3IgOTksIGV4aXQgdGhlIHRlc3QgZ3JvdXAgc3Vic2hlbGwgd2l0aCB0aGF0IHNhbWUKKyMgZXhpdCBjb2RlOyBpZiBpdCBpcyBhbnl0aGluZyBlbHNlIHByaW50IGFuIGVycm9yIG1lc3NhZ2UgcmVmZXJyaW5nIHRvIExJTkUsCisjIGFuZCBmYWlsIHRoZSB0ZXN0LgorYXRfZm5fY2hlY2tfc3RhdHVzICgpCit7CisgIGNhc2UgJDIgaW4KKyAgICAkMSApIDs7CisgICAgNzcpIGVjaG8gNzcgPiAiJGF0X3N0YXR1c19maWxlIjsgZXhpdCA3Nzs7CisgICAgOTkpIGVjaG8gOTkgPiAiJGF0X3N0YXR1c19maWxlIjsgYXRfZmFpbGVkPToKKwkkYXNfZWNobyAiJDM6IGhhcmQgZmFpbHVyZSI7IGV4aXQgOTk7OworICAgICopICRhc19lY2hvICIkMzogZXhpdCBjb2RlIHdhcyAkMiwgZXhwZWN0ZWQgJDEiCisgICAgICBhdF9mYWlsZWQ9Ojs7CisgIGVzYWMKK30KKworIyBhdF9mbl9kaWZmX2Rldm51bGwgRklMRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbWl0IGEgZGlmZiBiZXR3ZWVuIC9kZXYvbnVsbCBhbmQgRklMRS4gVXNlcyAidGVzdCAtcyIgdG8gYXZvaWQgdXNlbGVzcyBkaWZmCisjIGludm9jYXRpb25zLgorYXRfZm5fZGlmZl9kZXZudWxsICgpCit7CisgIHRlc3QgLXMgIiQxIiB8fCByZXR1cm4gMAorICAkYXRfZGlmZiAiJGF0X2Rldm51bGwiICIkMSIKK30KKworIyBhdF9mbl90ZXN0IE5VTUJFUgorIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBQYXJzZSBvdXQgdGVzdCBOVU1CRVIgZnJvbSB0aGUgdGFpbCBvZiB0aGlzIGZpbGUuCithdF9mbl90ZXN0ICgpCit7CisgIGV2YWwgYXRfc2VkPVwkYXRfc2VkJDEKKyAgc2VkICIkYXRfc2VkIiAiJGF0X215c2VsZiIgPiAiJGF0X3Rlc3Rfc291cmNlIgorfQorCisjIGF0X2ZuX2NyZWF0ZV9kZWJ1Z2dpbmdfc2NyaXB0CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENyZWF0ZSB0aGUgZGVidWdnaW5nIHNjcmlwdCAkYXRfZ3JvdXBfZGlyL3J1biB3aGljaCB3aWxsIHJlcHJvZHVjZSB0aGUKKyMgY3VycmVudCB0ZXN0IGdyb3VwLgorYXRfZm5fY3JlYXRlX2RlYnVnZ2luZ19zY3JpcHQgKCkKK3sKKyAgeworICAgIGVjaG8gIiMhIC9iaW4vc2giICYmCisgICAgZWNobyAndGVzdCAiJHtaU0hfVkVSU0lPTitzZXR9IiA9IHNldCAmJiBhbGlhcyAtZyAnXCcnJHsxKyIkQCJ9J1wnJz0nXCcnIiRAIidcJycnICYmCisgICAgJGFzX2VjaG8gImNkICckYXRfZGlyJyIgJiYKKyAgICAkYXNfZWNobyAiZXhlYyBcJHtDT05GSUdfU0hFTEwtJFNIRUxMfSBcIiRhdF9teXNlbGZcIiAtdiAtZCAkYXRfZGVidWdfYXJncyAkYXRfZ3JvdXAgXCR7MStcIlwkQFwifSIgJiYKKyAgICBlY2hvICdleGl0IDEnCisgIH0gPiIkYXRfZ3JvdXBfZGlyL3J1biIgJiYKKyAgY2htb2QgK3ggIiRhdF9ncm91cF9kaXIvcnVuIgorfQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRW5kIG9mIGF1dG90ZXN0IHNoZWxsIGZ1bmN0aW9ucy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCit7CisgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tICMjCiAjIyBUZXN0ZWQgcHJvZ3JhbXMuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMiCiAgIGVjaG8KIH0gPiY1CiAKQEAgLTgyMiwzODQgKzE4MjAsMzMyNCBAQAogZm9yIGF0X3Byb2dyYW0gaW4gOiAkYXRfdGVzdGVkCiBkbwogICB0ZXN0ICIkYXRfcHJvZ3JhbSIgPSA6ICYmIGNvbnRpbnVlCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgY2FzZSAkYXRfcHJvZ3JhbSBpbgorICAgIFtcXC9dKiB8ID86W1xcL10qICkgJGF0X3Byb2dyYW1fPSRhdF9wcm9ncmFtIDs7CisgICAgKiApCisgICAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogZm9yIGFzX2RpciBpbiAkUEFUSAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICB0ZXN0IC1mICRhc19kaXIvJGF0X3Byb2dyYW0gJiYgYnJlYWsKLWRvbmUKKyAgICB0ZXN0IC1mICIkYXNfZGlyLyRhdF9wcm9ncmFtIiAmJiBicmVhaworICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKLSAgaWYgdGVzdCAtZiAkYXNfZGlyLyRhdF9wcm9ncmFtOyB0aGVuCisgICAgYXRfcHJvZ3JhbV89JGFzX2Rpci8kYXRfcHJvZ3JhbSA7OworICBlc2FjCisgIGlmIHRlc3QgLWYgIiRhdF9wcm9ncmFtXyI7IHRoZW4KICAgICB7Ci0gICAgICBlY2hvICJsb2NhbC5hdDoyMTY6ICRhc19kaXIvJGF0X3Byb2dyYW0gLS12ZXJzaW9uIgotICAgICAgJGFzX2Rpci8kYXRfcHJvZ3JhbSAtLXZlcnNpb24KKyAgICAgICRhc19lY2hvICIkYXRfc3JjZGlyL2xvY2FsLmF0OjkxMzogJGF0X3Byb2dyYW1fIC0tdmVyc2lvbiIKKyAgICAgICIkYXRfcHJvZ3JhbV8iIC0tdmVyc2lvbiA8L2Rldi9udWxsCiAgICAgICBlY2hvCiAgICAgfSA+JjUgMj4mMQogICBlbHNlCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgJGF0X3Byb2dyYW0iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgJGF0X3Byb2dyYW0iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGZpbmQgJGF0X3Byb2dyYW0iICIkTElORU5PIiA1CiAgIGZpCiBkb25lCiAKIHsKLSAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLS0gIyMKICMjIFJ1bm5pbmcgdGhlIHRlc3RzLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLSAjIyIKIH0gPiY1CiAKIGF0X3N0YXJ0X2RhdGU9YGRhdGVgCi1hdF9zdGFydF90aW1lPWAoZGF0ZSArJXMpIDI+L2Rldi9udWxsYAotZWNobyAiJGFzX21lOiBzdGFydGluZyBhdDogJGF0X3N0YXJ0X2RhdGUiID4mNQotYXRfeHBhc3NfbGlzdD0KLWF0X3hmYWlsX2xpc3Q9Ci1hdF9wYXNzX2xpc3Q9Ci1hdF9mYWlsX2xpc3Q9Ci1hdF9za2lwX2xpc3Q9Ci1hdF9ncm91cF9jb3VudD0wCithdF9zdGFydF90aW1lPWBkYXRlICslcyAyPi9kZXYvbnVsbGAKKyRhc19lY2hvICIkYXNfbWU6IHN0YXJ0aW5nIGF0OiAkYXRfc3RhcnRfZGF0ZSIgPiY1CiAKICMgQ3JlYXRlIHRoZSBtYXN0ZXIgZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4KLXRlc3QgLWQgJGF0X3N1aXRlX2RpciB8fAotICBta2RpciAkYXRfc3VpdGVfZGlyIHx8Ci0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGF0X3N1aXRlX2RpciIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhdF9zdWl0ZV9kaXIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2FzX2Rpcj0iJGF0X3N1aXRlX2RpciI7IGFzX2ZuX21rZGlyX3AgfHwKKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjcmVhdGUgXGAkYXRfc3VpdGVfZGlyJyIgIiRMSU5FTk8iIDUKIAogIyBDYW4gd2UgZGlmZiB3aXRoIGAvZGV2L251bGwnPyAgRFUgNS4wIHJlZnVzZXMuCiBpZiBkaWZmIC9kZXYvbnVsbCAvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCiAgIGF0X2Rldm51bGw9L2Rldi9udWxsCiBlbHNlCiAgIGF0X2Rldm51bGw9JGF0X3N1aXRlX2Rpci9kZXZudWxsCi0gIGNwIC9kZXYvbnVsbCAkYXRfZGV2bnVsbAorICA+IiRhdF9kZXZudWxsIgogZmkKIAogIyBVc2UgYGRpZmYgLXUnIHdoZW4gcG9zc2libGUuCi1pZiBkaWZmIC11ICRhdF9kZXZudWxsICRhdF9kZXZudWxsID4vZGV2L251bGwgMj4mMTsgdGhlbgoraWYgYXRfZGlmZj1gZGlmZiAtdSAiJGF0X2Rldm51bGwiICIkYXRfZGV2bnVsbCIgMj4mMWAgJiYgdGVzdCAteiAiJGF0X2RpZmYiCit0aGVuCiAgIGF0X2RpZmY9J2RpZmYgLXUnCiBlbHNlCiAgIGF0X2RpZmY9ZGlmZgogZmkKIAorIyBHZXQgdGhlIGxhc3QgbmVlZGVkIGdyb3VwLgorZm9yIGF0X2dyb3VwIGluIDogJGF0X2dyb3VwczsgZG8gOjsgZG9uZQogCi1mb3IgYXRfZ3JvdXAgaW4gJGF0X2dyb3VwcwotZG8KKyMgRXh0cmFjdCB0aGUgc3RhcnQgYW5kIGVuZCBsaW5lcyBvZiBlYWNoIHRlc3QgZ3JvdXAgYXQgdGhlIHRhaWwKKyMgb2YgdGhpcyBmaWxlCithd2sgJworQkVHSU4geyBGUz0iByIgfQorL14jQVRfU1RBUlRfLyB7CisgIHN0YXJ0ID0gTlIKK30KKy9eI0FUX1NUT1BfLyB7CisgIHRlc3QgPSBzdWJzdHIgKCQgMCwgMTApCisgIHByaW50ICJhdF9zZWQiIHRlc3QgIj1cIjEsIiBzdGFydCAiZDsiIChOUi0xKSAicVwiIgorICBpZiAodGVzdCA9PSAiJyIkYXRfZ3JvdXAiJyIpIGV4aXQKK30nICIkYXRfbXlzZWxmIiA+ICIkYXRfc3VpdGVfZGlyL2F0LXNvdXJjZS1saW5lcyIgJiYKKy4gIiRhdF9zdWl0ZV9kaXIvYXQtc291cmNlLWxpbmVzIiB8fAorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSB0ZXN0IGxpbmUgbnVtYmVyIGNhY2hlIiAiJExJTkVOTyIgNQorcm0gLWYgIiRhdF9zdWl0ZV9kaXIvYXQtc291cmNlLWxpbmVzIgorCisjIFNldCBudW1iZXIgb2Ygam9icyBmb3IgYC1qJzsgYXZvaWQgbW9yZSBqb2JzIHRoYW4gdGVzdCBncm91cHMuCitzZXQgWCAkYXRfZ3JvdXBzOyBzaGlmdDsgYXRfbWF4X2pvYnM9JCMKK2lmIHRlc3QgJGF0X21heF9qb2JzIC1lcSAwOyB0aGVuCisgIGF0X2pvYnM9MQorZmkKK2lmIHRlc3QgJGF0X2pvYnMgLW5lIDEgJiYKKyAgIHsgdGVzdCAkYXRfam9icyAtZXEgMCB8fCB0ZXN0ICRhdF9qb2JzIC1ndCAkYXRfbWF4X2pvYnM7IH07IHRoZW4KKyAgYXRfam9icz0kYXRfbWF4X2pvYnMKK2ZpCisKKyMgSWYgcGFyYWxsZWwgbW9kZSwgZG9uJ3Qgb3V0cHV0IGJhbm5lcnMsIGRvbid0IHNwbGl0IHN1bW1hcnkgbGluZXMuCitpZiB0ZXN0ICRhdF9qb2JzIC1uZSAxOyB0aGVuCisgIGF0X3ByaW50X2Jhbm5lcnM9ZmFsc2UKKyAgYXRfcXVpZXQ9OgorZmkKKworIyBTZXQgdXAgaGVscGVyIGRpcnMuCitybSAtcmYgIiRhdF9oZWxwZXJfZGlyIiAmJgorbWtkaXIgIiRhdF9oZWxwZXJfZGlyIiAmJgorY2QgIiRhdF9oZWxwZXJfZGlyIiAmJgoreyB0ZXN0IC16ICIkYXRfZ3JvdXBzIiB8fCBta2RpciAkYXRfZ3JvdXBzOyB9IHx8Cithc19mbl9lcnJvciAkPyAidGVzdHN1aXRlIGRpcmVjdG9yeSBzZXR1cCBmYWlsZWQiICIkTElORU5PIiA1CisKKyMgRnVuY3Rpb25zIGZvciBydW5uaW5nIGEgdGVzdCBncm91cC4gIFdlIGxlYXZlIHRoZSBhY3R1YWwKKyMgdGVzdCBncm91cCBleGVjdXRpb24gb3V0c2lkZSBvZiBhIHNoZWxsIGZ1bmN0aW9uIGluIG9yZGVyCisjIHRvIGF2b2lkIGhpdHRpbmcgenNoIDQueCBleGl0IHN0YXR1cyBidWdzLgorCisjIGF0X2ZuX2dyb3VwX3ByZXBhcmUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcmVwYXJlIGZvciBydW5uaW5nIGEgdGVzdCBncm91cC4KK2F0X2ZuX2dyb3VwX3ByZXBhcmUgKCkKK3sKKyAgIyBUaGUgZGlyZWN0b3J5IGZvciBhZGRpdGlvbmFsIHBlci1ncm91cCBoZWxwZXIgZmlsZXMuCisgIGF0X2pvYl9kaXI9JGF0X2hlbHBlcl9kaXIvJGF0X2dyb3VwCisgICMgVGhlIGZpbGUgY29udGFpbmluZyB0aGUgbG9jYXRpb24gb2YgdGhlIGxhc3QgQVRfQ0hFQ0suCisgIGF0X2NoZWNrX2xpbmVfZmlsZT0kYXRfam9iX2Rpci9jaGVjay1saW5lCisgICMgVGhlIGZpbGUgY29udGFpbmluZyB0aGUgZXhpdCBzdGF0dXMgb2YgdGhlIGxhc3QgY29tbWFuZC4KKyAgYXRfc3RhdHVzX2ZpbGU9JGF0X2pvYl9kaXIvc3RhdHVzCisgICMgVGhlIGZpbGVzIGNvbnRhaW5pbmcgdGhlIG91dHB1dCBvZiB0aGUgdGVzdGVkIGNvbW1hbmRzLgorICBhdF9zdGRvdXQ9JGF0X2pvYl9kaXIvc3Rkb3V0CisgIGF0X3N0ZGVyMT0kYXRfam9iX2Rpci9zdGRlcjEKKyAgYXRfc3RkZXJyPSRhdF9qb2JfZGlyL3N0ZGVycgorICAjIFRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGNvZGUgZm9yIGEgdGVzdCBncm91cC4KKyAgYXRfdGVzdF9zb3VyY2U9JGF0X2pvYl9kaXIvdGVzdC1zb3VyY2UKKyAgIyBUaGUgZmlsZSBjb250YWluaW5nIGRhdGVzLgorICBhdF90aW1lc19maWxlPSRhdF9qb2JfZGlyL3RpbWVzCisKICAgIyBCZSBzdXJlIHRvIGNvbWUgYmFjayB0byB0aGUgdG9wIHRlc3QgZGlyZWN0b3J5LgotICBjZCAkYXRfc3VpdGVfZGlyCi0KLSAgY2FzZSAkYXRfZ3JvdXAgaW4KLSAgICBiYW5uZXItKikKLSAgICAgIGF0X2dyb3VwX2xvZz0kYXRfc3VpdGVfbG9nCi0gICAgICA7OwotCi0gICAgKikKLSAgICAgICMgU2tpcCB0ZXN0cyB3ZSBhbHJlYWR5IHJ1biAodXNpbmcgLS1rZXl3b3JkcyBtYWtlcyBpdCBlYXN5IHRvIGdldAotICAgICAgIyBkdXBsaWNhdGlvbikuCi0gICAgICBjYXNlICIgJGF0X3Bhc3NfdGVzdCAkYXRfc2tpcF90ZXN0ICRhdF9mYWlsX3Rlc3QgIiBpbgotCSoiICRhdF9ncm91cCAiKiApIGNvbnRpbnVlOzsKLSAgICAgIGVzYWMKLQotICAgICAgIyBOb3JtYWxpemUgdGhlIHRlc3QgZ3JvdXAgbnVtYmVyLgotICAgICAgYXRfZ3JvdXBfbm9ybWFsaXplZD1gZXhwciAiMDAwMDAkYXRfZ3JvdXAiIDogIi4qXCgkYXRfZm9ybWF0XCkiYAotCi0gICAgICAjIENyZWF0ZSBhIGZyZXNoIGRpcmVjdG9yeSBmb3IgdGhlIG5leHQgdGVzdCBncm91cCwgYW5kIGVudGVyLgotICAgICAgYXRfZ3JvdXBfZGlyPSRhdF9zdWl0ZV9kaXIvJGF0X2dyb3VwX25vcm1hbGl6ZWQKLSAgICAgIGF0X2dyb3VwX2xvZz0kYXRfZ3JvdXBfZGlyLyRhc19tZS5sb2cKLSAgICAgIHJtIC1yZiAkYXRfZ3JvdXBfZGlyCi0gICAgICBta2RpciAkYXRfZ3JvdXBfZGlyIHx8Ci0JeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSAkYXRfZ3JvdXBfZGlyIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGF0X2dyb3VwX2RpciIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgICAgY2QgJGF0X2dyb3VwX2RpcgotICAgICAgOzsKLSAgZXNhYwotCi0gIGVjaG8gMCA+ICRhdF9zdGF0dXNfZmlsZQorICBjZCAiJGF0X3N1aXRlX2RpciIKIAogICAjIENsZWFybHkgc2VwYXJhdGUgdGhlIHRlc3QgZ3JvdXBzIHdoZW4gdmVyYm9zZS4KLSAgdGVzdCAkYXRfZ3JvdXBfY291bnQgIT0gMCAmJiAkYXRfdmVyYm9zZQorICAkYXRfZmlyc3QgfHwgJGF0X3ZlcmJvc2UgZWNobworCisgIGF0X2dyb3VwX25vcm1hbGl6ZWQ9JGF0X2dyb3VwCisKKyAgZXZhbCAnd2hpbGUgOjsgZG8KKyAgICBjYXNlICRhdF9ncm91cF9ub3JtYWxpemVkIGluICMoCisgICAgJyIkYXRfZm9ybWF0IicqKSBicmVhazs7CisgICAgZXNhYworICAgIGF0X2dyb3VwX25vcm1hbGl6ZWQ9MCRhdF9ncm91cF9ub3JtYWxpemVkCisgIGRvbmUnCisKKworICAjIENyZWF0ZSBhIGZyZXNoIGRpcmVjdG9yeSBmb3IgdGhlIG5leHQgdGVzdCBncm91cCwgYW5kIGVudGVyLgorICAjIElmIG9uZSBhbHJlYWR5IGV4aXN0cywgdGhlIHVzZXIgbWF5IGhhdmUgaW52b2tlZCAuL3J1biBmcm9tCisgICMgd2l0aGluIHRoYXQgZGlyZWN0b3J5OyB3ZSByZW1vdmUgdGhlIGNvbnRlbnRzLCBidXQgbm90IHRoZQorICAjIGRpcmVjdG9yeSBpdHNlbGYsIHNvIHRoYXQgd2UgYXJlbid0IHB1bGxpbmcgdGhlIHJ1ZyBvdXQgZnJvbQorICAjIHVuZGVyIHRoZSBzaGVsbCdzIG5vdGlvbiBvZiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisgIGF0X2dyb3VwX2Rpcj0kYXRfc3VpdGVfZGlyLyRhdF9ncm91cF9ub3JtYWxpemVkCisgIGF0X2dyb3VwX2xvZz0kYXRfZ3JvdXBfZGlyLyRhc19tZS5sb2cKKyAgaWYgdGVzdCAtZCAiJGF0X2dyb3VwX2RpciI7IHRoZW4KKyAgZmluZCAiJGF0X2dyb3VwX2RpciIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDsKKyAgcm0gLWZyICIkYXRfZ3JvdXBfZGlyIi8qICIkYXRfZ3JvdXBfZGlyIi8uWyEuXSAiJGF0X2dyb3VwX2RpciIvLj8/KgorZmkgfHwKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHRlc3QgZGlyZWN0b3J5IGZvciAkYXRfZ3JvdXBfbm9ybWFsaXplZCBjb3VsZCBub3QgYmUgY2xlYW5lZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB0ZXN0IGRpcmVjdG9yeSBmb3IgJGF0X2dyb3VwX25vcm1hbGl6ZWQgY291bGQgbm90IGJlIGNsZWFuZWQiID4mMjt9CisgICMgQmUgdG9sZXJhbnQgaWYgdGhlIGFib3ZlIGBybScgd2FzIG5vdCBhYmxlIHRvIHJlbW92ZSB0aGUgZGlyZWN0b3J5LgorICBhc19kaXI9IiRhdF9ncm91cF9kaXIiOyBhc19mbl9ta2Rpcl9wCisKKyAgZWNobyAwID4gIiRhdF9zdGF0dXNfZmlsZSIKIAogICAjIEluIHZlcmJvc2UgbW9kZSwgYXBwZW5kIHRvIHRoZSBsb2cgZmlsZSAqYW5kKiBzaG93IG9uCi0gICMgdGhlIHN0YW5kYXJkIG91dHB1dDsgaW4gcXVpZXQgbW9kZSBvbmx5IHdyaXRlIHRvIHRoZSBsb2cKLSAgaWYgdGVzdCAkYXRfdmVyYm9zZSA9IGVjaG87IHRoZW4KLSAgICBhdF90ZWVfcGlwZT0idGVlIC1hICRhdF9ncm91cF9sb2ciCisgICMgdGhlIHN0YW5kYXJkIG91dHB1dDsgaW4gcXVpZXQgbW9kZSBvbmx5IHdyaXRlIHRvIHRoZSBsb2cuCisgIGlmIHRlc3QgLXogIiRhdF92ZXJib3NlIjsgdGhlbgorICAgIGF0X3RlZV9waXBlPSd0ZWUgLWEgIiRhdF9ncm91cF9sb2ciJwogICBlbHNlCi0gICAgYXRfdGVlX3BpcGU9ImNhdCA+PiAkYXRfZ3JvdXBfbG9nIgorICAgIGF0X3RlZV9waXBlPSdjYXQgPj4gIiRhdF9ncm91cF9sb2ciJwogICBmaQorfQogCi0gIGNhc2UgJGF0X2dyb3VwIGluCisjIGF0X2ZuX2dyb3VwX2Jhbm5lciBPUkRJTkFMIExJTkUgREVTQyBQQUQgW0JBTk5FUl0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWNsYXJlIHRoZSB0ZXN0IGdyb3VwIE9SRElOQUwsIGxvY2F0ZWQgYXQgTElORSB3aXRoIGdyb3VwIGRlc2NyaXB0aW9uIERFU0MsCisjIGFuZCByZXNpZGluZyB1bmRlciBCQU5ORVIuIFVzZSBQQUQgdG8gYWxpZ24gdGhlIHN0YXR1cyBjb2x1bW4uCithdF9mbl9ncm91cF9iYW5uZXIgKCkKK3sKKyAgYXRfc2V0dXBfbGluZT0iJDIiCisgIHRlc3QgLW4gIiQ1IiAmJiBhdF9mbl9iYW5uZXIgJDUKKyAgYXRfZGVzYz0iJDMiCisgIGNhc2UgJDEgaW4KKyAgICBbMC05XSkgICAgICBhdF9kZXNjX2xpbmU9IiAgJDE6ICI7OworICAgIFswLTldWzAtOV0pIGF0X2Rlc2NfbGluZT0iICQxOiAiIDs7CisgICAgKikgICAgICAgICAgYXRfZGVzY19saW5lPSIkMTogIiAgOzsKKyAgZXNhYworICBhc19mbl9hcHBlbmQgYXRfZGVzY19saW5lICIkMyQ0IgorICAkYXRfcXVpZXQgJGFzX2VjaG9fbiAiJGF0X2Rlc2NfbGluZSIKKyAgZWNobyAiIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIGNvbXBpbGF0aW9uIC0qLSIgPj4gIiRhdF9ncm91cF9sb2ciCit9CiAKLSAgYmFubmVyLTEgKSAjIEJhbm5lciAxLiBpbnB1dC5hdDoxOQotICAgIGNhdCA8PFxfQVRFT0YKKyMgYXRfZm5fZ3JvdXBfcG9zdHByb2Nlc3MKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGVyZm9ybSBjbGVhbnVwIGFmdGVyIHJ1bm5pbmcgYSB0ZXN0IGdyb3VwLgorYXRfZm5fZ3JvdXBfcG9zdHByb2Nlc3MgKCkKK3sKKyAgIyBCZSBzdXJlIHRvIGNvbWUgYmFjayB0byB0aGUgc3VpdGUgZGlyZWN0b3J5LCBpbiBwYXJ0aWN1bGFyCisgICMgc2luY2UgYmVsb3cgd2UgbWlnaHQgYHJtJyB0aGUgZ3JvdXAgZGlyZWN0b3J5IHdlIGFyZSBpbiBjdXJyZW50bHkuCisgIGNkICIkYXRfc3VpdGVfZGlyIgogCi1JbnB1dCBQcm9jZXNzaW5nLgotCisgIGlmIHRlc3QgISAtZiAiJGF0X2NoZWNrX2xpbmVfZmlsZSI7IHRoZW4KKyAgICBzZWQgInMvXiAqLyRhc19tZTogV0FSTklORzogLyIgPDxfQVRFT0YKKyAgICAgIEEgZmFpbHVyZSBoYXBwZW5lZCBpbiBhIHRlc3QgZ3JvdXAgYmVmb3JlIGFueSB0ZXN0IGNvdWxkIGJlCisgICAgICBydW4uIFRoaXMgbWVhbnMgdGhhdCB0ZXN0IHN1aXRlIGlzIGltcHJvcGVybHkgZGVzaWduZWQuICBQbGVhc2UKKyAgICAgIHJlcG9ydCB0aGlzIGZhaWx1cmUgdG8gPGJ1Zy1iaXNvbkBnbnUub3JnPi4KIF9BVEVPRgotICAgIDs7CisgICAgJGFzX2VjaG8gIiRhdF9zZXR1cF9saW5lIiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisgICAgYXRfc3RhdHVzPTk5CisgIGZpCisgICRhdF92ZXJib3NlICRhc19lY2hvX24gIiRhdF9ncm91cC4gJGF0X3NldHVwX2xpbmU6ICIKKyAgJGFzX2VjaG9fbiAiJGF0X2dyb3VwLiAkYXRfc2V0dXBfbGluZTogIiA+PiAiJGF0X2dyb3VwX2xvZyIKKyAgY2FzZSAkYXRfeGZhaWw6JGF0X3N0YXR1cyBpbgorICAgIHllczowKQorCWF0X21zZz0iVU5FWFBFQ1RFRCBQQVNTIgorCWF0X3Jlcz14cGFzcworCWF0X2VycmV4aXQ9JGF0X2VycmV4aXRfcAorCWF0X2NvbG9yPSRhdF9yZWQKKwk7OworICAgIG5vOjApCisJYXRfbXNnPSJvayIKKwlhdF9yZXM9cGFzcworCWF0X2VycmV4aXQ9ZmFsc2UKKwlhdF9jb2xvcj0kYXRfZ3JuCisJOzsKKyAgICAqOjc3KQorCWF0X21zZz0nc2tpcHBlZCAoJ2BjYXQgIiRhdF9jaGVja19saW5lX2ZpbGUiYCcpJworCWF0X3Jlcz1za2lwCisJYXRfZXJyZXhpdD1mYWxzZQorCWF0X2NvbG9yPSRhdF9ibHUKKwk7OworICAgIG5vOiogfCAqOjk5KQorCWF0X21zZz0nRkFJTEVEICgnYGNhdCAiJGF0X2NoZWNrX2xpbmVfZmlsZSJgJyknCisJYXRfcmVzPWZhaWwKKwlhdF9lcnJleGl0PSRhdF9lcnJleGl0X3AKKwlhdF9jb2xvcj0kYXRfcmVkCisJOzsKKyAgICB5ZXM6KikKKwlhdF9tc2c9J2V4cGVjdGVkIGZhaWx1cmUgKCdgY2F0ICIkYXRfY2hlY2tfbGluZV9maWxlImAnKScKKwlhdF9yZXM9eGZhaWwKKwlhdF9lcnJleGl0PWZhbHNlCisJYXRfY29sb3I9JGF0X2xnbgorCTs7CisgIGVzYWMKKyAgZWNobyAiJGF0X3JlcyIgPiAiJGF0X2pvYl9kaXIvJGF0X3JlcyIKKyAgIyBJbiBwYXJhbGxlbCBtb2RlLCBvdXRwdXQgdGhlIHN1bW1hcnkgbGluZSBvbmx5IGFmdGVyd2FyZHMuCisgIGlmIHRlc3QgJGF0X2pvYnMgLW5lIDEgJiYgdGVzdCAtbiAiJGF0X3ZlcmJvc2UiOyB0aGVuCisgICAgJGFzX2VjaG8gIiRhdF9kZXNjX2xpbmUgJGF0X2NvbG9yJGF0X21zZyRhdF9zdGQiCisgIGVsc2UKKyAgICAjIE1ha2Ugc3VyZSB0aGVyZSBpcyBhIHNlcGFyYXRvciBldmVuIHdpdGggbG9uZyB0aXRsZXMuCisgICAgJGFzX2VjaG8gIiAkYXRfY29sb3IkYXRfbXNnJGF0X3N0ZCIKKyAgZmkKKyAgYXRfbG9nX21zZz0iJGF0X2dyb3VwLiAkYXRfZGVzYyAoJGF0X3NldHVwX2xpbmUpOiAkYXRfbXNnIgorICBjYXNlICRhdF9zdGF0dXMgaW4KKyAgICAwfDc3KQorICAgICAgIyAkYXRfdGltZXNfZmlsZSBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgZ3JvdXAgc3VjY2VlZGVkLgorICAgICAgIyBXZSdyZSBub3QgaW5jbHVkaW5nIHRoZSBncm91cCBsb2csIHNvIHRoZSBzdWNjZXNzIG1lc3NhZ2UKKyAgICAgICMgaXMgd3JpdHRlbiBpbiB0aGUgZ2xvYmFsIGxvZyBzZXBhcmF0ZWx5LiAgQnV0IHdlIGFsc28KKyAgICAgICMgd3JpdGUgdG8gdGhlIGdyb3VwIGxvZyBpbiBjYXNlIHRoZXkncmUgdXNpbmcgLWQuCisgICAgICBpZiB0ZXN0IC1mICIkYXRfdGltZXNfZmlsZSI7IHRoZW4KKwlhdF9sb2dfbXNnPSIkYXRfbG9nX21zZyAgICAgKCJgc2VkIDFkICIkYXRfdGltZXNfZmlsZSJgJyknCisJcm0gLWYgIiRhdF90aW1lc19maWxlIgorICAgICAgZmkKKyAgICAgICRhc19lY2hvICIkYXRfbG9nX21zZyIgPj4gIiRhdF9ncm91cF9sb2ciCisgICAgICAkYXNfZWNobyAiJGF0X2xvZ19tc2ciID4mNQogCi0gIDEgKSAjIDEuIGlucHV0LmF0OjI4OiBJbnZhbGlkIGRvbGxhci1uCi0gICAgYXRfc2V0dXBfbGluZT0naW5wdXQuYXQ6MjgnCi0gICAgYXRfZGVzYz0nSW52YWxpZCBkb2xsYXItbicKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiICAxOiBJbnZhbGlkIGRvbGxhci1uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCisgICAgICAjIENsZWFudXAgdGhlIGdyb3VwIGRpcmVjdG9yeSwgdW5sZXNzIHRoZSB1c2VyIHdhbnRzIHRoZSBmaWxlcworICAgICAgIyBvciB0aGUgc3VjY2VzcyB3YXMgdW5leHBlY3RlZC4KKyAgICAgIGlmICRhdF9kZWJ1Z19wIHx8IHRlc3QgJGF0X3JlcyA9IHhwYXNzOyB0aGVuCisJYXRfZm5fY3JlYXRlX2RlYnVnZ2luZ19zY3JpcHQKKwlpZiB0ZXN0ICRhdF9yZXMgPSB4cGFzcyAmJiAkYXRfZXJyZXhpdDsgdGhlbgorCSAgZWNobyBzdG9wID4gIiRhdF9zdG9wX2ZpbGUiCisJZmkKKyAgICAgIGVsc2UKKwlpZiB0ZXN0IC1kICIkYXRfZ3JvdXBfZGlyIjsgdGhlbgorCSAgZmluZCAiJGF0X2dyb3VwX2RpciIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3ggXHtcfSBcOworCSAgcm0gLWZyICIkYXRfZ3JvdXBfZGlyIgorCWZpCisJcm0gLWYgIiRhdF90ZXN0X3NvdXJjZSIKKyAgICAgIGZpCisgICAgICA7OworICAgICopCisgICAgICAjIFVwb24gZmFpbHVyZSwgaW5jbHVkZSB0aGUgbG9nIGludG8gdGhlIHRlc3RzdWl0ZSdzIGdsb2JhbAorICAgICAgIyBsb2cuICBUaGUgZmFpbHVyZSBtZXNzYWdlIGlzIHdyaXR0ZW4gaW4gdGhlIGdyb3VwIGxvZy4gIEl0CisgICAgICAjIGlzIGxhdGVyIGluY2x1ZGVkIGluIHRoZSBnbG9iYWwgbG9nLgorICAgICAgJGFzX2VjaG8gIiRhdF9sb2dfbXNnIiA+PiAiJGF0X2dyb3VwX2xvZyIKKworICAgICAgIyBVcG9uIGZhaWx1cmUsIGtlZXAgdGhlIGdyb3VwIGRpcmVjdG9yeSBmb3IgYXV0b3BzeSwgYW5kIGNyZWF0ZQorICAgICAgIyB0aGUgZGVidWdnaW5nIHNjcmlwdC4gIFdpdGggLWUsIGRvIG5vdCBzdGFydCBhbnkgZnVydGhlciB0ZXN0cy4KKyAgICAgIGF0X2ZuX2NyZWF0ZV9kZWJ1Z2dpbmdfc2NyaXB0CisgICAgICBpZiAkYXRfZXJyZXhpdDsgdGhlbgorCWVjaG8gc3RvcCA+ICIkYXRfc3RvcF9maWxlIgorICAgICAgZmkKKyAgICAgIDs7CisgIGVzYWMKK30KKworCisjIyAtLS0tLS0tLS0tLS0gIyMKKyMjIERyaXZlciBsb29wLiAjIworIyMgLS0tLS0tLS0tLS0tICMjCisKKworaWYgKHNldCAtbSAmJiBzZXQgK20gJiYgc2V0ICtiKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgc2V0ICtiCisgIGF0X2pvYl9jb250cm9sX29uPSdzZXQgLW0nIGF0X2pvYl9jb250cm9sX29mZj0nc2V0ICttJyBhdF9qb2JfZ3JvdXA9LQorZWxzZQorICBhdF9qb2JfY29udHJvbF9vbj06IGF0X2pvYl9jb250cm9sX29mZj06IGF0X2pvYl9ncm91cD0KK2ZpCisKK2ZvciBhdF9zaWduYWwgaW4gMSAyIDE1OyBkbworICB0cmFwICdzZXQgK3g7IHNldCArZQorCSRhdF9qb2JfY29udHJvbF9vZmYKKwlhdF9zaWduYWw9JyIkYXRfc2lnbmFsIicKKwllY2hvIHN0b3AgPiAiJGF0X3N0b3BfZmlsZSIKKwl0cmFwICIiICRhdF9zaWduYWwKKwlhdF9wZ2lkcz0KKwlmb3IgYXRfcGdpZCBpbiBgam9icyAtcCAyPi9kZXYvbnVsbGA7IGRvCisJICBhdF9wZ2lkcz0iJGF0X3BnaWRzICRhdF9qb2JfZ3JvdXAkYXRfcGdpZCIKKwlkb25lCisJdGVzdCAteiAiJGF0X3BnaWRzIiB8fCBraWxsIC0kYXRfc2lnbmFsICRhdF9wZ2lkcyAyPi9kZXYvbnVsbAorCXdhaXQKKwlpZiB0ZXN0ICIkYXRfam9icyIgLWVxIDEgfHwgdGVzdCAteiAiJGF0X3ZlcmJvc2UiOyB0aGVuCisJICBlY2hvID4mMgorCWZpCisJYXRfc2lnbmFtZT1ga2lsbCAtbCAkYXRfc2lnbmFsIDI+JjEgfHwgZWNobyAkYXRfc2lnbmFsYAorCXNldCB4ICRhdF9zaWduYW1lCisJdGVzdCAwIC1ndCAyICYmIGF0X3NpZ25hbWU9JGF0X3NpZ25hbAorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogY2F1Z2h0IHNpZ25hbCAkYXRfc2lnbmFtZSwgYmFpbGluZyBvdXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY2F1Z2h0IHNpZ25hbCAkYXRfc2lnbmFtZSwgYmFpbGluZyBvdXQiID4mMjt9CisJYXNfZm5fYXJpdGggMTI4ICsgJGF0X3NpZ25hbCAmJiBleGl0X3N0YXR1cz0kYXNfdmFsCisJYXNfZm5fZXhpdCAkZXhpdF9zdGF0dXMnICRhdF9zaWduYWwKK2RvbmUKKworcm0gLWYgIiRhdF9zdG9wX2ZpbGUiCithdF9maXJzdD06CisKK2lmIHRlc3QgJGF0X2pvYnMgLW5lIDEgJiYKKyAgICAgcm0gLWYgIiRhdF9qb2JfZmlmbyIgJiYKKyAgICAgdGVzdCAtbiAiJGF0X2pvYl9ncm91cCIgJiYKKyAgICAgKCBta2ZpZm8gIiRhdF9qb2JfZmlmbyIgJiYgdHJhcCAnZXhpdCAxJyBQSVBFIFNUT1AgVFNUUCApIDI+L2Rldi9udWxsCit0aGVuCisgICMgRklGTyBqb2IgZGlzcGF0Y2hlci4KKworICB0cmFwICdhdF9waWRzPQorCWZvciBhdF9waWQgaW4gYGpvYnMgLXBgOyBkbworCSAgYXRfcGlkcz0iJGF0X3BpZHMgJGF0X2pvYl9ncm91cCRhdF9waWQiCisJZG9uZQorCWlmIHRlc3QgLW4gIiRhdF9waWRzIjsgdGhlbgorCSAgYXRfc2lnPVRTVFAKKwkgIHRlc3QgIiR7VE1PVVQrc2V0fSIgPSBzZXQgJiYgYXRfc2lnPVNUT1AKKwkgIGtpbGwgLSRhdF9zaWcgJGF0X3BpZHMgMj4vZGV2L251bGwKKwlmaQorCWtpbGwgLVNUT1AgJCQKKwl0ZXN0IC16ICIkYXRfcGlkcyIgfHwga2lsbCAtQ09OVCAkYXRfcGlkcyAyPi9kZXYvbnVsbCcgVFNUUAorCisgIGVjaG8KKyAgIyBUdXJuIGpvYnMgaW50byBhIGxpc3Qgb2YgbnVtYmVycywgc3RhcnRpbmcgZnJvbSAxLgorICBhdF9qb2JsaXN0PWAkYXNfZWNobyAiJGF0X2dyb3VwcyIgfCBzZWQgLW4gMSwke2F0X2pvYnN9cGAKKworICBzZXQgWCAkYXRfam9ibGlzdAorICBzaGlmdAorICBmb3IgYXRfZ3JvdXAgaW4gJGF0X2dyb3VwczsgZG8KKyAgICAkYXRfam9iX2NvbnRyb2xfb24gMj4vZGV2L251bGwKICAgICAoCi0gICAgICBlY2hvICIxLiBpbnB1dC5hdDoyODogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgorICAgICAgIyBTdGFydCBvbmUgdGVzdCBncm91cC4KKyAgICAgICRhdF9qb2JfY29udHJvbF9vZmYKKyAgICAgIGlmICRhdF9maXJzdDsgdGhlbgorCWV4ZWMgNz4iJGF0X2pvYl9maWZvIgorICAgICAgZWxzZQorCWV4ZWMgNjwmLQorICAgICAgZmkKKyAgICAgIHRyYXAgJ3NldCAreDsgc2V0ICtlCisJICAgIHRyYXAgIiIgUElQRQorCSAgICBlY2hvIHN0b3AgPiAiJGF0X3N0b3BfZmlsZSIKKwkgICAgZWNobyA+JjcKKwkgICAgYXNfZm5fZXhpdCAxNDEnIFBJUEUKKyAgICAgIGF0X2ZuX2dyb3VwX3ByZXBhcmUKKyAgICAgIGlmIGNkICIkYXRfZ3JvdXBfZGlyIiAmJgorCSBhdF9mbl90ZXN0ICRhdF9ncm91cCAmJgorCSAuICIkYXRfdGVzdF9zb3VyY2UiCisgICAgICB0aGVuIDo7IGVsc2UKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVuYWJsZSB0byBwYXJzZSB0ZXN0IGdyb3VwOiAkYXRfZ3JvdXAiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5hYmxlIHRvIHBhcnNlIHRlc3QgZ3JvdXA6ICRhdF9ncm91cCIgPiYyO30KKwlhdF9mYWlsZWQ9OgorICAgICAgZmkKKyAgICAgIGF0X2ZuX2dyb3VwX3Bvc3Rwcm9jZXNzCisgICAgICBlY2hvID4mNworICAgICkgJgorICAgICRhdF9qb2JfY29udHJvbF9vZmYKKyAgICBpZiAkYXRfZmlyc3Q7IHRoZW4KKyAgICAgIGF0X2ZpcnN0PWZhbHNlCisgICAgICBleGVjIDY8IiRhdF9qb2JfZmlmbyIgNz4iJGF0X2pvYl9maWZvIgorICAgIGZpCisgICAgc2hpZnQgIyBDb25zdW1lIG9uZSB0b2tlbi4KKyAgICBpZiB0ZXN0ICQjIC1ndCAwOyB0aGVuIDo7IGVsc2UKKyAgICAgIHJlYWQgYXRfdG9rZW4gPCY2IHx8IGJyZWFrCisgICAgICBzZXQgeCAkKgorICAgIGZpCisgICAgdGVzdCAtZiAiJGF0X3N0b3BfZmlsZSIgJiYgYnJlYWsKKyAgZG9uZQorICBleGVjIDc+Ji0KKyAgIyBSZWFkIGJhY2sgdGhlIHJlbWFpbmluZyAoJGF0X2pvYnMgLSAxKSB0b2tlbnMuCisgIHNldCBYICRhdF9qb2JsaXN0CisgIHNoaWZ0CisgIGlmIHRlc3QgJCMgLWd0IDA7IHRoZW4KKyAgICBzaGlmdAorICAgIGZvciBhdF9qb2IKKyAgICBkbworICAgICAgcmVhZCBhdF90b2tlbgorICAgIGRvbmUgPCY2CisgIGZpCisgIGV4ZWMgNjwmLQorICB3YWl0CitlbHNlCisgICMgUnVuIHNlcmlhbGx5LCBhdm9pZCBmb3JrcyBhbmQgb3RoZXIgcG90ZW50aWFsIHN1cnByaXNlcy4KKyAgZm9yIGF0X2dyb3VwIGluICRhdF9ncm91cHM7IGRvCisgICAgYXRfZm5fZ3JvdXBfcHJlcGFyZQorICAgIGlmIGNkICIkYXRfZ3JvdXBfZGlyIiAmJgorICAgICAgIGF0X2ZuX3Rlc3QgJGF0X2dyb3VwICYmCisgICAgICAgLiAiJGF0X3Rlc3Rfc291cmNlIjsgdGhlbiA6OyBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVuYWJsZSB0byBwYXJzZSB0ZXN0IGdyb3VwOiAkYXRfZ3JvdXAiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5hYmxlIHRvIHBhcnNlIHRlc3QgZ3JvdXA6ICRhdF9ncm91cCIgPiYyO30KKyAgICAgIGF0X2ZhaWxlZD06CisgICAgZmkKKyAgICBhdF9mbl9ncm91cF9wb3N0cHJvY2VzcworICAgIHRlc3QgLWYgIiRhdF9zdG9wX2ZpbGUiICYmIGJyZWFrCisgICAgYXRfZmlyc3Q9ZmFsc2UKKyAgZG9uZQorZmkKKworIyBXcmFwIHVwIHRoZSB0ZXN0IHN1aXRlIHdpdGggc3VtbWFyeSBzdGF0aXN0aWNzLgorY2QgIiRhdF9oZWxwZXJfZGlyIgorCisjIFVzZSA/Li4/Pz8/IHdoZW4gdGhlIGxpc3QgbXVzdCByZW1haW4gc29ydGVkLCB0aGUgZmFzdGVyICogb3RoZXJ3aXNlLgorYXRfcGFzc19saXN0PWBmb3IgZiBpbiAqL3Bhc3M7IGRvIGVjaG8gJGY7IGRvbmUgfCBzZWQgJy9cKi9kOyBzLC9wYXNzLCwnYAorYXRfc2tpcF9saXN0PWBmb3IgZiBpbiAqL3NraXA7IGRvIGVjaG8gJGY7IGRvbmUgfCBzZWQgJy9cKi9kOyBzLC9za2lwLCwnYAorYXRfeGZhaWxfbGlzdD1gZm9yIGYgaW4gKi94ZmFpbDsgZG8gZWNobyAkZjsgZG9uZSB8IHNlZCAnL1wqL2Q7IHMsL3hmYWlsLCwnYAorYXRfeHBhc3NfbGlzdD1gZm9yIGYgaW4gPy94cGFzcyA/Py94cGFzcyA/Pz8veHBhc3MgPz8/Py94cGFzczsgZG8KKwkJIGVjaG8gJGY7IGRvbmUgfCBzZWQgJy8/L2Q7IHMsL3hwYXNzLCwnYAorYXRfZmFpbF9saXN0PWBmb3IgZiBpbiA/L2ZhaWwgPz8vZmFpbCA/Pz8vZmFpbCA/Pz8/L2ZhaWw7IGRvCisJCWVjaG8gJGY7IGRvbmUgfCBzZWQgJy8/L2Q7IHMsL2ZhaWwsLCdgCisKK3NldCBYICRhdF9wYXNzX2xpc3QgJGF0X3hwYXNzX2xpc3QgJGF0X3hmYWlsX2xpc3QgJGF0X2ZhaWxfbGlzdCAkYXRfc2tpcF9saXN0CitzaGlmdDsgYXRfZ3JvdXBfY291bnQ9JCMKK3NldCBYICRhdF94cGFzc19saXN0OyBzaGlmdDsgYXRfeHBhc3NfY291bnQ9JCM7IGF0X3hwYXNzX2xpc3Q9JCoKK3NldCBYICRhdF94ZmFpbF9saXN0OyBzaGlmdDsgYXRfeGZhaWxfY291bnQ9JCMKK3NldCBYICRhdF9mYWlsX2xpc3Q7IHNoaWZ0OyBhdF9mYWlsX2NvdW50PSQjOyBhdF9mYWlsX2xpc3Q9JCoKK3NldCBYICRhdF9za2lwX2xpc3Q7IHNoaWZ0OyBhdF9za2lwX2NvdW50PSQjCisKK2FzX2ZuX2FyaXRoICRhdF9ncm91cF9jb3VudCAtICRhdF9za2lwX2NvdW50ICYmIGF0X3J1bl9jb3VudD0kYXNfdmFsCithc19mbl9hcml0aCAkYXRfeHBhc3NfY291bnQgKyAkYXRfZmFpbF9jb3VudCAmJiBhdF91bmV4cGVjdGVkX2NvdW50PSRhc192YWwKK2FzX2ZuX2FyaXRoICRhdF94ZmFpbF9jb3VudCArICRhdF9mYWlsX2NvdW50ICYmIGF0X3RvdGFsX2ZhaWxfY291bnQ9JGFzX3ZhbAorCisjIEJhY2sgdG8gdGhlIHRvcCBkaXJlY3RvcnkuCitjZCAiJGF0X2RpciIKK3JtIC1yZiAiJGF0X2hlbHBlcl9kaXIiCisKKyMgQ29tcHV0ZSB0aGUgZHVyYXRpb24gb2YgdGhlIHN1aXRlLgorYXRfc3RvcF9kYXRlPWBkYXRlYAorYXRfc3RvcF90aW1lPWBkYXRlICslcyAyPi9kZXYvbnVsbGAKKyRhc19lY2hvICIkYXNfbWU6IGVuZGluZyBhdDogJGF0X3N0b3BfZGF0ZSIgPiY1CitjYXNlICRhdF9zdGFydF90aW1lLCRhdF9zdG9wX3RpbWUgaW4KKyAgWzAtOV0qLFswLTldKikKKyAgICBhc19mbl9hcml0aCAkYXRfc3RvcF90aW1lIC0gJGF0X3N0YXJ0X3RpbWUgJiYgYXRfZHVyYXRpb25fcz0kYXNfdmFsCisgICAgYXNfZm5fYXJpdGggJGF0X2R1cmF0aW9uX3MgLyA2MCAmJiBhdF9kdXJhdGlvbl9tPSRhc192YWwKKyAgICBhc19mbl9hcml0aCAkYXRfZHVyYXRpb25fbSAvIDYwICYmIGF0X2R1cmF0aW9uX2g9JGFzX3ZhbAorICAgIGFzX2ZuX2FyaXRoICRhdF9kdXJhdGlvbl9zICUgNjAgJiYgYXRfZHVyYXRpb25fcz0kYXNfdmFsCisgICAgYXNfZm5fYXJpdGggJGF0X2R1cmF0aW9uX20gJSA2MCAmJiBhdF9kdXJhdGlvbl9tPSRhc192YWwKKyAgICBhdF9kdXJhdGlvbj0iJHthdF9kdXJhdGlvbl9ofWggJHthdF9kdXJhdGlvbl9tfW0gJHthdF9kdXJhdGlvbl9zfXMiCisgICAgJGFzX2VjaG8gIiRhc19tZTogdGVzdCBzdWl0ZSBkdXJhdGlvbjogJGF0X2R1cmF0aW9uIiA+JjUKKyAgICA7OworZXNhYworCitlY2hvCiskYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0tLSAjIworIyMgVGVzdCByZXN1bHRzLiAjIworIyMgLS0tLS0tLS0tLS0tLSAjIyIKK2VjaG8KK3sKKyAgZWNobworICAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0tLSAjIworIyMgVGVzdCByZXN1bHRzLiAjIworIyMgLS0tLS0tLS0tLS0tLSAjIyIKKyAgZWNobworfSA+JjUKKworaWYgdGVzdCAkYXRfcnVuX2NvdW50ID0gMTsgdGhlbgorICBhdF9yZXN1bHQ9IjEgdGVzdCIKKyAgYXRfd2VyZT13YXMKK2Vsc2UKKyAgYXRfcmVzdWx0PSIkYXRfcnVuX2NvdW50IHRlc3RzIgorICBhdF93ZXJlPXdlcmUKK2ZpCitpZiAkYXRfZXJyZXhpdF9wICYmIHRlc3QgJGF0X3VuZXhwZWN0ZWRfY291bnQgIT0gMDsgdGhlbgorICBpZiB0ZXN0ICRhdF94cGFzc19jb3VudCA9IDE7IHRoZW4KKyAgICBhdF9yZXN1bHQ9IiRhdF9yZXN1bHQgJGF0X3dlcmUgcnVuLCBvbmUgcGFzc2VkIgorICBlbHNlCisgICAgYXRfcmVzdWx0PSIkYXRfcmVzdWx0ICRhdF93ZXJlIHJ1biwgb25lIGZhaWxlZCIKKyAgZmkKKyAgYXRfcmVzdWx0PSIkYXRfcmVzdWx0IHVuZXhwZWN0ZWRseSBhbmQgaW5oaWJpdGVkIHN1YnNlcXVlbnQgdGVzdHMuIgorICBhdF9jb2xvcj0kYXRfcmVkCitlbHNlCisgICMgRG9uJ3QgeW91IGp1c3QgbG92ZSBleHBvbmVudGlhbCBleHBsb3Npb24gb2YgdGhlIG51bWJlciBvZiBjYXNlcz8KKyAgYXRfY29sb3I9JGF0X3JlZAorICBjYXNlICRhdF94cGFzc19jb3VudDokYXRfZmFpbF9jb3VudDokYXRfeGZhaWxfY291bnQgaW4KKyAgICAjIFNvIGZhciwgc28gZ29vZC4KKyAgICAwOjA6MCkgYXRfcmVzdWx0PSIkYXRfcmVzdWx0ICRhdF93ZXJlIHN1Y2Nlc3NmdWwuIiBhdF9jb2xvcj0kYXRfZ3JuIDs7CisgICAgMDowOiopIGF0X3Jlc3VsdD0iJGF0X3Jlc3VsdCBiZWhhdmVkIGFzIGV4cGVjdGVkLiIgYXRfY29sb3I9JGF0X2xnbiA7OworCisgICAgIyBTb21lIHVuZXhwZWN0ZWQgZmFpbHVyZXMKKyAgICAwOio6MCkgYXRfcmVzdWx0PSIkYXRfcmVzdWx0ICRhdF93ZXJlIHJ1biwKKyRhdF9mYWlsX2NvdW50IGZhaWxlZCB1bmV4cGVjdGVkbHkuIiA7OworCisgICAgIyBTb21lIGZhaWx1cmVzLCBib3RoIGV4cGVjdGVkIGFuZCB1bmV4cGVjdGVkCisgICAgMDoqOjEpIGF0X3Jlc3VsdD0iJGF0X3Jlc3VsdCAkYXRfd2VyZSBydW4sCiskYXRfdG90YWxfZmFpbF9jb3VudCBmYWlsZWQgKCRhdF94ZmFpbF9jb3VudCBleHBlY3RlZCBmYWlsdXJlKS4iIDs7CisgICAgMDoqOiopIGF0X3Jlc3VsdD0iJGF0X3Jlc3VsdCAkYXRfd2VyZSBydW4sCiskYXRfdG90YWxfZmFpbF9jb3VudCBmYWlsZWQgKCRhdF94ZmFpbF9jb3VudCBleHBlY3RlZCBmYWlsdXJlcykuIiA7OworCisgICAgIyBObyB1bmV4cGVjdGVkIGZhaWx1cmVzLCBidXQgc29tZSB4cGFzc2VzCisgICAgKjowOiopIGF0X3Jlc3VsdD0iJGF0X3Jlc3VsdCAkYXRfd2VyZSBydW4sCiskYXRfeHBhc3NfY291bnQgcGFzc2VkIHVuZXhwZWN0ZWRseS4iIDs7CisKKyAgICAjIE5vIGV4cGVjdGVkIGZhaWx1cmVzLCBidXQgZmFpbHVyZXMgYW5kIHhwYXNzZXMKKyAgICAqOjE6MCkgYXRfcmVzdWx0PSIkYXRfcmVzdWx0ICRhdF93ZXJlIHJ1biwKKyRhdF91bmV4cGVjdGVkX2NvdW50IGRpZCBub3QgYmVoYXZlIGFzIGV4cGVjdGVkICgkYXRfZmFpbF9jb3VudCB1bmV4cGVjdGVkIGZhaWx1cmUpLiIgOzsKKyAgICAqOio6MCkgYXRfcmVzdWx0PSIkYXRfcmVzdWx0ICRhdF93ZXJlIHJ1biwKKyRhdF91bmV4cGVjdGVkX2NvdW50IGRpZCBub3QgYmVoYXZlIGFzIGV4cGVjdGVkICgkYXRfZmFpbF9jb3VudCB1bmV4cGVjdGVkIGZhaWx1cmVzKS4iIDs7CisKKyAgICAjIEFsbCBvZiB0aGVtLgorICAgICo6KjoxKSBhdF9yZXN1bHQ9IiRhdF9yZXN1bHQgJGF0X3dlcmUgcnVuLAorJGF0X3hwYXNzX2NvdW50IHBhc3NlZCB1bmV4cGVjdGVkbHksCiskYXRfdG90YWxfZmFpbF9jb3VudCBmYWlsZWQgKCRhdF94ZmFpbF9jb3VudCBleHBlY3RlZCBmYWlsdXJlKS4iIDs7CisgICAgKjoqOiopIGF0X3Jlc3VsdD0iJGF0X3Jlc3VsdCAkYXRfd2VyZSBydW4sCiskYXRfeHBhc3NfY291bnQgcGFzc2VkIHVuZXhwZWN0ZWRseSwKKyRhdF90b3RhbF9mYWlsX2NvdW50IGZhaWxlZCAoJGF0X3hmYWlsX2NvdW50IGV4cGVjdGVkIGZhaWx1cmVzKS4iIDs7CisgIGVzYWMKKworICBpZiB0ZXN0ICRhdF9za2lwX2NvdW50ID0gMCAmJiB0ZXN0ICRhdF9ydW5fY291bnQgLWd0IDE7IHRoZW4KKyAgICBhdF9yZXN1bHQ9IkFsbCAkYXRfcmVzdWx0IgorICBmaQorZmkKKworIyBOb3cgcHV0IHNraXBzIGluIHRoZSBtaXguCitjYXNlICRhdF9za2lwX2NvdW50IGluCisgIDApIDs7CisgIDEpIGF0X3Jlc3VsdD0iJGF0X3Jlc3VsdAorMSB0ZXN0IHdhcyBza2lwcGVkLiIgOzsKKyAgKikgYXRfcmVzdWx0PSIkYXRfcmVzdWx0CiskYXRfc2tpcF9jb3VudCB0ZXN0cyB3ZXJlIHNraXBwZWQuIiA7OworZXNhYworCitpZiB0ZXN0ICRhdF91bmV4cGVjdGVkX2NvdW50ID0gMDsgdGhlbgorICBlY2hvICIkYXRfY29sb3IkYXRfcmVzdWx0JGF0X3N0ZCIKKyAgZWNobyAiJGF0X3Jlc3VsdCIgPiY1CitlbHNlCisgIGVjaG8gIiR7YXRfY29sb3J9RVJST1I6ICRhdF9yZXN1bHQkYXRfc3RkIiA+JjIKKyAgZWNobyAiRVJST1I6ICRhdF9yZXN1bHQiID4mNQorICB7CisgICAgZWNobworICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFN1bW1hcnkgb2YgdGhlIGZhaWx1cmVzLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjIgorCisgICAgIyBTdW1tYXJ5IG9mIGZhaWxlZCBhbmQgc2tpcHBlZCB0ZXN0cy4KKyAgICBpZiB0ZXN0ICRhdF9mYWlsX2NvdW50ICE9IDA7IHRoZW4KKyAgICAgIGVjaG8gIkZhaWxlZCB0ZXN0czoiCisgICAgICAkU0hFTEwgIiRhdF9teXNlbGYiICRhdF9mYWlsX2xpc3QgLS1saXN0CisgICAgICBlY2hvCisgICAgZmkKKyAgICBpZiB0ZXN0ICRhdF9za2lwX2NvdW50ICE9IDA7IHRoZW4KKyAgICAgIGVjaG8gIlNraXBwZWQgdGVzdHM6IgorICAgICAgJFNIRUxMICIkYXRfbXlzZWxmIiAkYXRfc2tpcF9saXN0IC0tbGlzdAorICAgICAgZWNobworICAgIGZpCisgICAgaWYgdGVzdCAkYXRfeHBhc3NfY291bnQgIT0gMDsgdGhlbgorICAgICAgZWNobyAiVW5leHBlY3RlZCBwYXNzZXM6IgorICAgICAgJFNIRUxMICIkYXRfbXlzZWxmIiAkYXRfeHBhc3NfbGlzdCAtLWxpc3QKKyAgICAgIGVjaG8KKyAgICBmaQorICAgIGlmIHRlc3QgJGF0X2ZhaWxfY291bnQgIT0gMDsgdGhlbgorICAgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIERldGFpbGVkIGZhaWxlZCB0ZXN0cy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMiCisgICAgICBlY2hvCisgICAgICBmb3IgYXRfZ3JvdXAgaW4gJGF0X2ZhaWxfbGlzdAorICAgICAgZG8KKwlhdF9ncm91cF9ub3JtYWxpemVkPSRhdF9ncm91cAorCisgIGV2YWwgJ3doaWxlIDo7IGRvCisgICAgY2FzZSAkYXRfZ3JvdXBfbm9ybWFsaXplZCBpbiAjKAorICAgICciJGF0X2Zvcm1hdCInKikgYnJlYWs7OworICAgIGVzYWMKKyAgICBhdF9ncm91cF9ub3JtYWxpemVkPTAkYXRfZ3JvdXBfbm9ybWFsaXplZAorICBkb25lJworCisJY2F0ICIkYXRfc3VpdGVfZGlyLyRhdF9ncm91cF9ub3JtYWxpemVkLyRhc19tZS5sb2ciCisJZWNobworICAgICAgZG9uZQorICAgICAgZWNobworICAgIGZpCisgICAgaWYgdGVzdCAtbiAiJGF0X3RvcF9zcmNkaXIiOyB0aGVuCisgICAgICBzZWQgJ2g7cy8uLy0vZztzL14uLi4vIyMgLztzLy4uLiQvICMjLztwO3g7cDt4JyA8PF9BU0JPWAorIyMgJHthdF90b3BfYnVpbGRfcHJlZml4fWNvbmZpZy5sb2cgIyMKK19BU0JPWAorICAgICAgc2VkICdzL14vfCAvJyAke2F0X3RvcF9idWlsZF9wcmVmaXh9Y29uZmlnLmxvZworICAgICAgZWNobworICAgIGZpCisgIH0gPiY1CisKKyAgc2VkICdoO3MvLi8tL2c7cy9eLi4uLyMjIC87cy8uLi4kLyAjIy87cDt4O3A7eCcgPDxfQVNCT1gKKyMjICRhc19tZS5sb2cgd2FzIGNyZWF0ZWQuICMjCitfQVNCT1gKKworICBlY2hvCisgIGlmICRhdF9kZWJ1Z19wOyB0aGVuCisgICAgYXRfbXNnPSdwZXItdGVzdCBsb2cgZmlsZXMnCisgIGVsc2UKKyAgICBhdF9tc2c9IlxgJHthdF90ZXN0ZGlyKyR7YXRfdGVzdGRpcn0vfSRhc19tZS5sb2cnIgorICBmaQorICAkYXNfZWNobyAiUGxlYXNlIHNlbmQgJGF0X21zZyBhbmQgYWxsIGluZm9ybWF0aW9uIHlvdSB0aGluayBtaWdodCBoZWxwOgorCisgICBUbzogPGJ1Zy1iaXNvbkBnbnUub3JnPgorICAgU3ViamVjdDogW0dOVSBCaXNvbiAyLjddICRhc19tZTogJGF0X2ZhaWxfbGlzdCR7YXRfZmFpbF9saXN0OisgZmFpbGVkJHthdF94cGFzc19saXN0OissIH19JGF0X3hwYXNzX2xpc3Qke2F0X3hwYXNzX2xpc3Q6KyBwYXNzZWQgdW5leHBlY3RlZGx5fQorCitZb3UgbWF5IGludmVzdGlnYXRlIGFueSBwcm9ibGVtIGlmIHlvdSBmZWVsIGFibGUgdG8gZG8gc28sIGluIHdoaWNoCitjYXNlIHRoZSB0ZXN0IHN1aXRlIHByb3ZpZGVzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gIEl0cyBvdXRwdXQgbWF5CitiZSBmb3VuZCBiZWxvdyBcYCR7YXRfdGVzdGRpciske2F0X3Rlc3RkaXJ9L30kYXNfbWUuZGlyJy4KKyIKKyAgZXhpdCAxCitmaQorCitleGl0IDAKKworIyMgLS0tLS0tLS0tLS0tLSAjIworIyMgQWN0dWFsIHRlc3RzLiAjIworIyMgLS0tLS0tLS0tLS0tLSAjIworI0FUX1NUQVJUXzEKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxICdpbnB1dC5hdDoyNycgXAorICAiSW52YWxpZCBpbnB1dHMiICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDEKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKK1wwMDBcMDAxXDAwMlwzNzc/CislJQorPworZGVmYXVsdDogJ2EnIH0KKyUmCislYS1kb2VzLW5vdC1leGlzdAorJS0KKyV7CitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjM5OiBcJFBFUkwgLXBpIC1lICdzL1xcXFwoXFxkezN9KS9jaHIob2N0KFwkMSkpL2dlJyBpbnB1dC55IHx8IGV4aXQgNzciCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRQRVJMIC1waSAtZSAncy9cXFxcKFxcZHszfSkvY2hyKG9jdCgkMSkpL2dlJyBpbnB1dC55IHx8IGV4aXQgNzciICJpbnB1dC5hdDozOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtcGkgLWUgJ3MvXFwoXGR7M30pL2NocihvY3QoJDEpKS9nZScgaW5wdXQueSB8fCBleGl0IDc3CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjM5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo0MTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSIgImlucHV0LmF0OjQxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6MS4xLTI6IGVycm9yOiBpbnZhbGlkIGNoYXJhY3RlcnM6ICdcXDBcXDAwMVxcMDAyXFwzNzc/JworaW5wdXQueTozLjE6IGVycm9yOiBpbnZhbGlkIGNoYXJhY3RlcjogJz8nCitpbnB1dC55OjQuMTQ6IGVycm9yOiBpbnZhbGlkIGNoYXJhY3RlcjogJ30nCitpbnB1dC55OjUuMTogZXJyb3I6IGludmFsaWQgY2hhcmFjdGVyOiAnJScKK2lucHV0Lnk6NS4yOiBlcnJvcjogaW52YWxpZCBjaGFyYWN0ZXI6ICcmJworaW5wdXQueTo2LjEtMTc6IGVycm9yOiBpbnZhbGlkIGRpcmVjdGl2ZTogJyVhLWRvZXMtbm90LWV4aXN0JworaW5wdXQueTo3LjE6IGVycm9yOiBpbnZhbGlkIGNoYXJhY3RlcjogJyUnCitpbnB1dC55OjcuMjogZXJyb3I6IGludmFsaWQgY2hhcmFjdGVyOiAnLScKK2lucHV0Lnk6OC4xLTkuMDogZXJyb3I6IG1pc3NpbmcgJyV9JyBhdCBlbmQgb2YgZmlsZQoraW5wdXQueTo4LjEtOS4wOiBlcnJvcjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICV7Li4uJX0KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjQxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMQorI0FUX1NUQVJUXzIKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyICdpbnB1dC5hdDo1NycgXAorICAiSW52YWxpZCBpbnB1dHMgd2l0aCB7fSIgIiAgICAgICAgICAgICAgICAgICAgICAgICAiIDEKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworIyBXZSB1c2VkIHRvIFNFR1YgaGVyZS4gIFNlZQorIyBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWJpc29uLzIwMDUtMDcvbXNnMDAwNTMuaHRtbAorCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworCislZGVzdHJ1Y3RvcgorJWluaXRpYWwtYWN0aW9uCislbGV4LXBhcmFtCislcGFyc2UtcGFyYW0KKyVwcmludGVyCisldW5pb24KK19BVEVPRgorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjcyOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IiAiaW5wdXQuYXQ6NzIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueTozLjEtMTU6IGVycm9yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJWluaXRpYWwtYWN0aW9uLCBleHBlY3Rpbmcgey4uLn0KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjcyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMgorI0FUX1NUQVJUXzMKK2F0X2ZuX2dyb3VwX2Jhbm5lciAzICdpbnB1dC5hdDo4NCcgXAorICAiSW52YWxpZCBcJG4gYW5kIEBuIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAxCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMy4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIGNhdCA+aW5wdXQueSA8PCdfQVRFT0YnCiAlJQogZXhwOiB7ICQkID0gJDEgOyB9OwotX0FURU9GCi0KLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJpbnB1dC5hdDozNzogYmlzb24gaW5wdXQueSIKLWVjaG8gaW5wdXQuYXQ6MzcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIGlucHV0LnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyA+PiRhdF9zdGRlcnI7IGVjaG8gImlucHV0Lnk6Mi4xMy0xNDogaW50ZWdlciBvdXQgb2YgcmFuZ2U6IFxgXCQxJwotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiaW5wdXQuYXQ6Mzc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0KLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwotCi0gIDIgKSAjIDIuIGlucHV0LmF0OjQ2OiBJbnZhbGlkIEBuCi0gICAgYXRfc2V0dXBfbGluZT0naW5wdXQuYXQ6NDYnCi0gICAgYXRfZGVzYz0nSW52YWxpZCBAbicKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiICAyOiBJbnZhbGlkIEBuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiMi4gaW5wdXQuYXQ6NDY6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KLQotCi1jYXQgPmlucHV0LnkgPDwnX0FURU9GJwotJSUKIGV4cDogeyBAJCA9IEAxIDsgfTsKIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiaW5wdXQuYXQ6NTU6IGJpc29uIGlucHV0LnkiCi1lY2hvIGlucHV0LmF0OjU1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gPj4kYXRfc3RkZXJyOyBlY2hvICJpbnB1dC55OjIuMTMtMTQ6IGludGVnZXIgb3V0IG9mIHJhbmdlOiBcYEAxJwotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiaW5wdXQuYXQ6NTU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjkyOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IiAiaW5wdXQuYXQ6OTIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueToyLjEzLTE0OiBlcnJvcjogaW50ZWdlciBvdXQgb2YgcmFuZ2U6ICdcJDEnCitpbnB1dC55OjMuMTMtMTQ6IGVycm9yOiBpbnRlZ2VyIG91dCBvZiByYW5nZTogJ0AxJworIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6OTIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwogCi0gIDMgKSAjIDMuIGlucHV0LmF0OjY0OiBUeXBlIENsYXNoZXMKLSAgICBhdF9zZXR1cF9saW5lPSdpbnB1dC5hdDo2NCcKLSAgICBhdF9kZXNjPSdUeXBlIENsYXNoZXMnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiAgMzogVHlwZSBDbGFzaGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjMuIGlucHV0LmF0OjY0OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzMKKyNBVF9TVEFSVF80CithdF9mbl9ncm91cF9iYW5uZXIgNCAnaW5wdXQuYXQ6MTA0JyBcCisgICJUeXBlIENsYXNoZXMiICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgMQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjQuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiBjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJXVuaW9uIHsgaW50IGJhcjsgfQogJXRva2VuIGZvbwogJXR5cGUgPGJhcj4gZXhwCiAlJQotZXhwOiBmb28ge30gZm9vCitleHA6IGZvbyB7ICQkOyB9IGZvbyB7ICQyOyB9IGZvbwogICAgfCBmb28KICAgIHwgLyogRW1wdHkuICovCiAgICA7CiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImlucHV0LmF0OjgwOiBiaXNvbiBpbnB1dC55IgotZWNobyBpbnB1dC5hdDo4MCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gaW5wdXQueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvID4+JGF0X3N0ZGVycjsgZWNobyAiaW5wdXQueTo0LjYtMTU6IHdhcm5pbmc6IHR5cGUgY2xhc2ggb24gZGVmYXVsdCBhY3Rpb246IDxiYXI+ICE9IDw+Ci1pbnB1dC55OjUuNi04OiB3YXJuaW5nOiB0eXBlIGNsYXNoIG9uIGRlZmF1bHQgYWN0aW9uOiA8YmFyPiAhPSA8PgotaW5wdXQueTo2LjU6IHdhcm5pbmc6IGVtcHR5IHJ1bGUgZm9yIHR5cGVkIG5vbnRlcm1pbmFsLCBhbmQgbm8gYWN0aW9uCi0iIHwgJGF0X2RpZmYgLSAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJpbnB1dC5hdDo4MDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTE3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IiAiaW5wdXQuYXQ6MTE3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6NS4xMi0xMzogZXJyb3I6IFwkXCQgZm9yIHRoZSBtaWRydWxlIGF0IFwkMiBvZiAnZXhwJyBoYXMgbm8gZGVjbGFyZWQgdHlwZQoraW5wdXQueTo1LjI0LTI1OiBlcnJvcjogXCQyIG9mICdleHAnIGhhcyBubyBkZWNsYXJlZCB0eXBlCitpbnB1dC55OjUuNi0zMjogd2FybmluZzogdHlwZSBjbGFzaCBvbiBkZWZhdWx0IGFjdGlvbjogPGJhcj4gIT0gPD4KK2lucHV0Lnk6Ni42LTg6IHdhcm5pbmc6IHR5cGUgY2xhc2ggb24gZGVmYXVsdCBhY3Rpb246IDxiYXI+ICE9IDw+CitpbnB1dC55OjcuNTogd2FybmluZzogZW1wdHkgcnVsZSBmb3IgdHlwZWQgbm9udGVybWluYWwsIGFuZCBubyBhY3Rpb24KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjExNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7CiAKLSAgNCApICMgNC4gaW5wdXQuYXQ6ODk6IFVudXNlZCB2YWx1ZXMKLSAgICBhdF9zZXR1cF9saW5lPSdpbnB1dC5hdDo4OScKLSAgICBhdF9kZXNjPSdVbnVzZWQgdmFsdWVzJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgIDQ6IFVudXNlZCB2YWx1ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICI0LiBpbnB1dC5hdDo4OTogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgotCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzQKKyNBVF9TVEFSVF81CithdF9mbl9ncm91cF9iYW5uZXIgNSAnaW5wdXQuYXQ6Mjg1JyBcCisgICJVbnVzZWQgdmFsdWVzIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgMQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjUuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogY2F0ID5pbnB1dC55IDw8J19BVEVPRicKLSV0b2tlbiA8aW50ZWdlcj4gSU5UCi0ldHlwZSA8aW50ZWdlcj4gYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwKLSVkZXN0cnVjdG9yIHsgZGVzdHJveSAoJCQpOyB9IElOVCBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbAorJXRva2VuIDxpbnRlZ2VyPiBJTlQ7CisldHlwZSA8aW50ZWdlcj4gYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGw7CislZGVzdHJ1Y3RvciB7IGRlc3Ryb3kgKCQkKTsgfSBJTlQgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGw7CiAlJQogc3RhcnQ6Ci0gICdhJyBhIHsgJDIgfSB8ICdiJyBiIHsgJDIgfSB8ICdjJyBjIHsgJDIgfSB8ICdkJyBkIHsgJDIgfSB8ICdlJyBlIHsgJDIgfQotfCAnZicgZiB7ICQyIH0gfCAnZycgZyB7ICQyIH0gfCAnaCcgaCB7ICQyIH0gfCAnaScgaSB7ICQyIH0gfCAnaicgaiB7ICQyIH0KLXwgJ2snIGsgeyAkMiB9IHwgJ2wnIGwgeyAkMiB9CisgICdhJyBhIHsgJDI7IH0gfCAnYicgYiB7ICQyOyB9IHwgJ2MnIGMgeyAkMjsgfSB8ICdkJyBkIHsgJDI7IH0KK3wgJ2UnIGUgeyAkMjsgfSB8ICdmJyBmIHsgJDI7IH0gfCAnZycgZyB7ICQyOyB9IHwgJ2gnIGggeyAkMjsgfQorfCAnaScgaSB7ICQyOyB9IHwgJ2onIGogeyAkMjsgfSB8ICdrJyBrIHsgJDI7IH0gfCAnbCcgbCB7ICQyOyB9CiA7CiAKIGE6IElOVCB8IElOVCB7IH0gSU5UIHsgfSBJTlQgeyB9OwogYjogSU5UIHwgLyogZW1wdHkgKi87Ci1jOiBJTlQgfCBJTlQgeyAkMSB9IElOVCB7IH0gSU5UIHsgfTsKLWQ6IElOVCB8IElOVCB7IH0gSU5UIHsgJDEgfSBJTlQgeyB9OwotZTogSU5UIHwgSU5UIHsgfSBJTlQgeyAgfSBJTlQgeyAkMSB9OworYzogSU5UIHwgSU5UIHsgJDE7IH0gSU5UIHsgJDxpbnRlZ2VyPjI7IH0gSU5UIHsgJDxpbnRlZ2VyPjQ7IH07CitkOiBJTlQgfCBJTlQgeyB9IElOVCB7ICQxOyB9IElOVCB7ICQ8aW50ZWdlcj4yOyB9OworZTogSU5UIHwgSU5UIHsgfSBJTlQgeyAgfSBJTlQgeyAkMTsgfTsKIGY6IElOVCB8IElOVCB7IH0gSU5UIHsgIH0gSU5UIHsgJCQgPSAkMSArICQzICsgJDU7IH07Ci1nOiBJTlQgfCBJTlQgeyAkJCB9IElOVCB7ICQkIH0gSU5UIHsgfTsKLWg6IElOVCB8IElOVCB7ICQkIH0gSU5UIHsgJCQgPSAkMiB9IElOVCB7IH07CitnOiBJTlQgfCBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyB9OworaDogSU5UIHwgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgJDxpbnRlZ2VyPiQgPSAkPGludGVnZXI+MjsgfSBJTlQgeyB9OwogaTogSU5UIHwgSU5UIElOVCB7IH0geyAkJCA9ICQxICsgJDI7IH07CiBqOiBJTlQgfCBJTlQgSU5UIHsgJDxpbnRlZ2VyPiQgPSAxOyB9IHsgJCQgPSAkMSArICQyOyB9OwotazogSU5UIHwgSU5UIElOVCB7ICQkOyB9IHsgJCQgPSAkMzsgfSB7IH07Ci1sOiBJTlQgfCBJTlQgeyAkJCA9ICQxOyB9IElOVCB7ICQkID0gJDIgKyAkMzsgfSBJTlQgeyAkJCA9ICQ0ICsgJDU7IH07Ci0KK2s6IElOVCB8IElOVCBJTlQgeyAkPGludGVnZXI+JDsgfSB7ICQ8aW50ZWdlcj4kID0gJDxpbnRlZ2VyPjM7IH0geyB9OworbDogSU5UIHwgSU5UIHsgJDxpbnRlZ2VyPiQgPSAkPGludGVnZXI+MTsgfSBJTlQgeyAkPGludGVnZXI+JCA9ICQ8aW50ZWdlcj4yICsgJDxpbnRlZ2VyPjM7IH0gSU5UIHsgJDxpbnRlZ2VyPiQgPSAkPGludGVnZXI+NCArICQ8aW50ZWdlcj41OyB9OwogX0FURU9GCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJpbnB1dC5hdDoxNDg6IGJpc29uIGlucHV0LnkiCi1lY2hvIGlucHV0LmF0OjE0OCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gaW5wdXQueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvID4+JGF0X3N0ZGVycjsgZWNobyAiaW5wdXQueToxMS4xMC0zMjogd2FybmluZzogdW5zZXQgdmFsdWU6IFwkXCQKLWlucHV0Lnk6MTEuMTAtMzI6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQxCi1pbnB1dC55OjExLjEwLTMyOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkMwotaW5wdXQueToxMS4xMC0zMjogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDUKLWlucHV0Lnk6MTIuOTogd2FybmluZzogZW1wdHkgcnVsZSBmb3IgdHlwZWQgbm9udGVybWluYWwsIGFuZCBubyBhY3Rpb24KLWlucHV0Lnk6MTMuMTAtMzU6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiBcJFwkCi1pbnB1dC55OjEzLjEwLTM1OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkMwotaW5wdXQueToxMy4xMC0zNTogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDUKLWlucHV0Lnk6MTQuMTAtMzU6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiBcJFwkCi1pbnB1dC55OjE0LjEwLTM1OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkMwotaW5wdXQueToxNC4xMC0zNTogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDUKLWlucHV0Lnk6MTUuMTAtMzY6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiBcJFwkCi1pbnB1dC55OjE1LjEwLTM2OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkMwotaW5wdXQueToxNS4xMC0zNjogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDUKLWlucHV0Lnk6MTcuMTAtMzg6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiBcJFwkCi1pbnB1dC55OjE3LjEwLTM4OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkMQotaW5wdXQueToxNy4xMC0zODogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDIKLWlucHV0Lnk6MTcuMTAtMzg6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQzCi1pbnB1dC55OjE3LjEwLTM4OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkNAotaW5wdXQueToxNy4xMC0zODogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDUKLWlucHV0Lnk6MTguMTAtNDM6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiBcJFwkCi1pbnB1dC55OjE4LjEwLTQzOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkMQotaW5wdXQueToxOC4xMC00Mzogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDMKLWlucHV0Lnk6MTguMTAtNDM6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQ0Ci1pbnB1dC55OjE4LjEwLTQzOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkNQotaW5wdXQueToyMC4xMC01NTogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDMKLWlucHV0Lnk6MjEuMTAtNDE6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiBcJFwkCi1pbnB1dC55OjIxLjEwLTQxOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkMQotaW5wdXQueToyMS4xMC00MTogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDIKLWlucHV0Lnk6MjEuMTAtNDE6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQ0Ci0iIHwgJGF0X2RpZmYgLSAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJpbnB1dC5hdDoxNDg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjg2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLWZjYXJldCBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiaW5wdXQuYXQ6Mjg2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1mY2FyZXQgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjg2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoyODY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1mY2FyZXQgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZmNhcmV0IGlucHV0LnkiICJpbnB1dC5hdDoyODYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWZjYXJldCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoyODYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjg2OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaW5wdXQuYXQ6Mjg2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjI4NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjI4NjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImlucHV0LmF0OjI4NiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoyODYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoyODY6IGJpc29uIC1mY2FyZXQgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImlucHV0LmF0OjI4NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtZmNhcmV0IGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OjExLjEwLTMyOiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogXCRcJAorIGE6IElOVCB8IElOVCB7IH0gSU5UIHsgfSBJTlQgeyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjExLjEwLTEyOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkMQorIGE6IElOVCB8IElOVCB7IH0gSU5UIHsgfSBJTlQgeyB9OworICAgICAgICAgIF5eXgoraW5wdXQueToxMS4xOC0yMDogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDMKKyBhOiBJTlQgfCBJTlQgeyB9IElOVCB7IH0gSU5UIHsgfTsKKyAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxMS4yNi0yODogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDUKKyBhOiBJTlQgfCBJTlQgeyB9IElOVCB7IH0gSU5UIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjEyLjk6IHdhcm5pbmc6IGVtcHR5IHJ1bGUgZm9yIHR5cGVkIG5vbnRlcm1pbmFsLCBhbmQgbm8gYWN0aW9uCisgYjogSU5UIHwgLyogZW1wdHkgKi87CisgICAgICAgICBeCitpbnB1dC55OjEzLjEwLTYyOiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogXCRcJAorIGM6IElOVCB8IElOVCB7IFwkMTsgfSBJTlQgeyBcJDxpbnRlZ2VyPjI7IH0gSU5UIHsgXCQ8aW50ZWdlcj40OyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjEzLjIyLTI0OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkMworIGM6IElOVCB8IElOVCB7IFwkMTsgfSBJTlQgeyBcJDxpbnRlZ2VyPjI7IH0gSU5UIHsgXCQ8aW50ZWdlcj40OyB9OworICAgICAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxMy40My00NTogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDUKKyBjOiBJTlQgfCBJTlQgeyBcJDE7IH0gSU5UIHsgXCQ8aW50ZWdlcj4yOyB9IElOVCB7IFwkPGludGVnZXI+NDsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTQuMTAtNDk6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiBcJFwkCisgZDogSU5UIHwgSU5UIHsgfSBJTlQgeyBcJDE7IH0gSU5UIHsgXCQ8aW50ZWdlcj4yOyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTQuMTgtMjA6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQzCisgZDogSU5UIHwgSU5UIHsgfSBJTlQgeyBcJDE7IH0gSU5UIHsgXCQ8aW50ZWdlcj4yOyB9OworICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjE0LjMwLTMyOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkNQorIGQ6IElOVCB8IElOVCB7IH0gSU5UIHsgXCQxOyB9IElOVCB7IFwkPGludGVnZXI+MjsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxNS4xMC0zNzogd2FybmluZzogdW5zZXQgdmFsdWU6IFwkXCQKKyBlOiBJTlQgfCBJTlQgeyB9IElOVCB7ICB9IElOVCB7IFwkMTsgfTsKKyAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjE1LjE4LTIwOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkMworIGU6IElOVCB8IElOVCB7IH0gSU5UIHsgIH0gSU5UIHsgXCQxOyB9OworICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjE1LjI3LTI5OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkNQorIGU6IElOVCB8IElOVCB7IH0gSU5UIHsgIH0gSU5UIHsgXCQxOyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjE3LjEwLTU4OiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogXCRcJAorIGc6IElOVCB8IElOVCB7IFwkPGludGVnZXI+XCQ7IH0gSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSBJTlQgeyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTcuMTAtMTI6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQxCisgZzogSU5UIHwgSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSBJTlQgeyBcJDxpbnRlZ2VyPlwkOyB9IElOVCB7IH07CisgICAgICAgICAgXl5eCitpbnB1dC55OjE3LjMxLTMzOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkMworIGc6IElOVCB8IElOVCB7IFwkPGludGVnZXI+XCQ7IH0gSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSBJTlQgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxNy41Mi01NDogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDUKKyBnOiBJTlQgfCBJTlQgeyBcJDxpbnRlZ2VyPlwkOyB9IElOVCB7IFwkPGludGVnZXI+XCQ7IH0gSU5UIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTguMTAtNzI6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiBcJFwkCisgaDogSU5UIHwgSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSBJTlQgeyBcJDxpbnRlZ2VyPlwkID0gXCQ8aW50ZWdlcj4yOyB9IElOVCB7IH07CisgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjE4LjEwLTEyOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkMQorIGg6IElOVCB8IElOVCB7IFwkPGludGVnZXI+XCQ7IH0gSU5UIHsgXCQ8aW50ZWdlcj5cJCA9IFwkPGludGVnZXI+MjsgfSBJTlQgeyB9OworICAgICAgICAgIF5eXgoraW5wdXQueToxOC4zMS0zMzogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDMKKyBoOiBJTlQgfCBJTlQgeyBcJDxpbnRlZ2VyPlwkOyB9IElOVCB7IFwkPGludGVnZXI+XCQgPSBcJDxpbnRlZ2VyPjI7IH0gSU5UIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTguNjYtNjg6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQ1CisgaDogSU5UIHwgSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSBJTlQgeyBcJDxpbnRlZ2VyPlwkID0gXCQ8aW50ZWdlcj4yOyB9IElOVCB7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MjEuMTAtNjg6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiBcJFwkCisgazogSU5UIHwgSU5UIElOVCB7IFwkPGludGVnZXI+XCQ7IH0geyBcJDxpbnRlZ2VyPlwkID0gXCQ8aW50ZWdlcj4zOyB9IHsgfTsKKyAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgoraW5wdXQueToyMS4xMC0xMjogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDEKKyBrOiBJTlQgfCBJTlQgSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSB7IFwkPGludGVnZXI+XCQgPSBcJDxpbnRlZ2VyPjM7IH0geyB9OworICAgICAgICAgIF5eXgoraW5wdXQueToyMS4xNC0xNjogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDIKKyBrOiBJTlQgfCBJTlQgSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSB7IFwkPGludGVnZXI+XCQgPSBcJDxpbnRlZ2VyPjM7IH0geyB9OworICAgICAgICAgICAgICBeXl4KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjI4NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyMgRGVmaW5pbmcgUE9TSVhMWV9DT1JSRUNUIGNhdXNlcyBiaXNvbiB0byBjb21wbGFpbiBpZiBvcHRpb25zIGFyZQorIyBhZGRlZCBhZnRlciB0aGUgZ3JhbW1hciBmaWxlIG5hbWUsIHNvIHNraXAgdGhlc2UgY2hlY2tzIGluIHRoYXQKKyMgY2FzZS4KK2lmIHRlc3QgIiRQT1NJWExZX0NPUlJFQ1RfSVNfRVhQT1JURUQiID0gZmFsc2U7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisKKyAgIyBUbyBhdm9pZCBleHBhbmRpbmcgaXQgcmVwZWF0ZWRseSwgc3RvcmUgc3BlY2lmaWVkIHN0ZG91dC4KKyAgOiA+ZXhwb3V0CisKKyAgIyBSdW4gd2l0aCAtV2Vycm9yLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjg2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgaW5wdXQueSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCBpbnB1dC55IC1XZXJyb3IiICJpbnB1dC5hdDoyODYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IGlucHV0LnkgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjg2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgQnVpbGQgZXhwZWN0ZWQgc3RkZXJyIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlICJ3YXJuaW5ncyBiZWluZworICAjIHRyZWF0ZWQgYXMgZXJyb3JzIiBtZXNzYWdlLgorICBjYXQgPmF0LWJpc29uLWNoZWNrLXdhcm5pbmdzIDw8J19BVEVPRicKK2lucHV0Lnk6MTEuMTAtMzI6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkJAorIGE6IElOVCB8IElOVCB7IH0gSU5UIHsgfSBJTlQgeyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjExLjEwLTEyOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQxCisgYTogSU5UIHwgSU5UIHsgfSBJTlQgeyB9IElOVCB7IH07CisgICAgICAgICAgXl5eCitpbnB1dC55OjExLjE4LTIwOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQzCisgYTogSU5UIHwgSU5UIHsgfSBJTlQgeyB9IElOVCB7IH07CisgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTEuMjYtMjg6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDUKKyBhOiBJTlQgfCBJTlQgeyB9IElOVCB7IH0gSU5UIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjEyLjk6IHdhcm5pbmc6IGVtcHR5IHJ1bGUgZm9yIHR5cGVkIG5vbnRlcm1pbmFsLCBhbmQgbm8gYWN0aW9uCisgYjogSU5UIHwgLyogZW1wdHkgKi87CisgICAgICAgICBeCitpbnB1dC55OjEzLjEwLTYyOiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogJCQKKyBjOiBJTlQgfCBJTlQgeyAkMTsgfSBJTlQgeyAkPGludGVnZXI+MjsgfSBJTlQgeyAkPGludGVnZXI+NDsgfTsKKyAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgoraW5wdXQueToxMy4yMi0yNDogd2FybmluZzogdW51c2VkIHZhbHVlOiAkMworIGM6IElOVCB8IElOVCB7ICQxOyB9IElOVCB7ICQ8aW50ZWdlcj4yOyB9IElOVCB7ICQ8aW50ZWdlcj40OyB9OworICAgICAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxMy40My00NTogd2FybmluZzogdW51c2VkIHZhbHVlOiAkNQorIGM6IElOVCB8IElOVCB7ICQxOyB9IElOVCB7ICQ8aW50ZWdlcj4yOyB9IElOVCB7ICQ8aW50ZWdlcj40OyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxNC4xMC00OTogd2FybmluZzogdW5zZXQgdmFsdWU6ICQkCisgZDogSU5UIHwgSU5UIHsgfSBJTlQgeyAkMTsgfSBJTlQgeyAkPGludGVnZXI+MjsgfTsKKyAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjE0LjE4LTIwOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQzCisgZDogSU5UIHwgSU5UIHsgfSBJTlQgeyAkMTsgfSBJTlQgeyAkPGludGVnZXI+MjsgfTsKKyAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxNC4zMC0zMjogd2FybmluZzogdW51c2VkIHZhbHVlOiAkNQorIGQ6IElOVCB8IElOVCB7IH0gSU5UIHsgJDE7IH0gSU5UIHsgJDxpbnRlZ2VyPjI7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTUuMTAtMzc6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkJAorIGU6IElOVCB8IElOVCB7IH0gSU5UIHsgIH0gSU5UIHsgJDE7IH07CisgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgoraW5wdXQueToxNS4xOC0yMDogd2FybmluZzogdW51c2VkIHZhbHVlOiAkMworIGU6IElOVCB8IElOVCB7IH0gSU5UIHsgIH0gSU5UIHsgJDE7IH07CisgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTUuMjctMjk6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDUKKyBlOiBJTlQgfCBJTlQgeyB9IElOVCB7ICB9IElOVCB7ICQxOyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjE3LjEwLTU4OiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogJCQKKyBnOiBJTlQgfCBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTcuMTAtMTI6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDEKKyBnOiBJTlQgfCBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyB9OworICAgICAgICAgIF5eXgoraW5wdXQueToxNy4zMS0zMzogd2FybmluZzogdW51c2VkIHZhbHVlOiAkMworIGc6IElOVCB8IElOVCB7ICQ8aW50ZWdlcj4kOyB9IElOVCB7ICQ8aW50ZWdlcj4kOyB9IElOVCB7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjE3LjUyLTU0OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQ1CisgZzogSU5UIHwgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTguMTAtNzI6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkJAorIGg6IElOVCB8IElOVCB7ICQ8aW50ZWdlcj4kOyB9IElOVCB7ICQ8aW50ZWdlcj4kID0gJDxpbnRlZ2VyPjI7IH0gSU5UIHsgfTsKKyAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTguMTAtMTI6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDEKKyBoOiBJTlQgfCBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyAkPGludGVnZXI+JCA9ICQ8aW50ZWdlcj4yOyB9IElOVCB7IH07CisgICAgICAgICAgXl5eCitpbnB1dC55OjE4LjMxLTMzOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQzCisgaDogSU5UIHwgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgJDxpbnRlZ2VyPiQgPSAkPGludGVnZXI+MjsgfSBJTlQgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxOC42Ni02ODogd2FybmluZzogdW51c2VkIHZhbHVlOiAkNQorIGg6IElOVCB8IElOVCB7ICQ8aW50ZWdlcj4kOyB9IElOVCB7ICQ8aW50ZWdlcj4kID0gJDxpbnRlZ2VyPjI7IH0gSU5UIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToyMS4xMC02ODogd2FybmluZzogdW5zZXQgdmFsdWU6ICQkCisgazogSU5UIHwgSU5UIElOVCB7ICQ8aW50ZWdlcj4kOyB9IHsgJDxpbnRlZ2VyPiQgPSAkPGludGVnZXI+MzsgfSB7IH07CisgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MjEuMTAtMTI6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDEKKyBrOiBJTlQgfCBJTlQgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0geyAkPGludGVnZXI+JCA9ICQ8aW50ZWdlcj4zOyB9IHsgfTsKKyAgICAgICAgICBeXl4KK2lucHV0Lnk6MjEuMTQtMTY6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDIKKyBrOiBJTlQgfCBJTlQgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0geyAkPGludGVnZXI+JCA9ICQ8aW50ZWdlcj4zOyB9IHsgfTsKKyAgICAgICAgICAgICAgXl5eCitfQVRFT0YKKworICBhdF9iaXNvbl9jaGVja19maXJzdD1gc2VkIC1uIFwKKyAgICAnLzogd2FybmluZzogL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wPWBzZWQgLW4gXAorICAgICcvY29uZmxpY3RzOiBbMC05XS4qcmVkdWNlJC97PTtxO30nIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzYAorICA6ICR7YXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wOj0xfQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdF90bXAgLWx0ICRhdF9iaXNvbl9jaGVja19maXJzdDsgdGhlbgorICAgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PSRhdF9iaXNvbl9jaGVja19maXJzdF90bXAKKyAgZmkKKyAgaWYgdGVzdCAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLWd0IDE7IHRoZW4KKyAgICBzZWQgLW4gIjEsYGV4cHIgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0IC0gMWAicCBcCisgICAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+IGV4cGVycgorICBmaQorICBlY2hvICdiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMnID4+IGV4cGVycgorCisgICMgRmluaXNoIGJ1aWxkaW5nIGV4cGVjdGVkIHN0ZGVyciBhbmQgY2hlY2suICBVbmxpa2Ugd2FybmluZ3MsCisgICMgY29tcGxhaW50cyBjYXVzZSBiaXNvbiB0byBleGl0IGVhcmx5LiAgVGh1cywgd2l0aCAtV2Vycm9yLCBiaXNvbgorICAjIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHJlcG9ydCBhbGwgd2FybmluZ3MgdGhhdCBpdCBkb2VzIHdpdGhvdXQKKyAgIyAtV2Vycm9yLCBidXQgaXQgYXQgbGVhc3QgcmVwb3J0cyBvbmUuCisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YHNlZCAtbiAnJD0nIHN0ZGVycmAKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2xhc3Q6PTF9CisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YGV4cHIgJGF0X2Jpc29uX2NoZWNrX2xhc3QgLSAxYAorICBzZWQgLW4gIiRhdF9iaXNvbl9jaGVja19maXJzdCwkYXRfYmlzb25fY2hlY2tfbGFzdCJwIFwKKyAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+PiBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjI4Njogc2VkICdzLC4qL1xcKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1xcKVwkLFxcMSwnIFxcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiaW5wdXQuYXQ6Mjg2IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAncywuKi9cKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1wpJCxcMSwnIFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjg2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC0td2FybmluZ3M9ZXJyb3IuCisgIGNwIHN0ZGVyciBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjI4NjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IGlucHV0LnkgLS13YXJuaW5ncz1lcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yIiAiaW5wdXQuYXQ6Mjg2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjg2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC1Xbm9uZSBhbmQgLS13YXJuaW5ncz1ub25lIGJ5IG1ha2luZyBzdXJlIHRoYXQKKyAgIyAtV2Vycm9yIGRvZXNuJ3QgY2hhbmdlIHRoZSBleGl0IHN0YXR1cyB3aGVuIC1Xbm9uZSBvcgorICAjIC0td2FybmluZ3M9bm9uZSBpcyBzcGVjaWZpZWQuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoyODY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIiAiaW5wdXQuYXQ6Mjg2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjI4NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjI4NjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiICJpbnB1dC5hdDoyODYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjg2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKIAotJGF0X3RyYWNlb24KK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCisldG9rZW4gPGludGVnZXI+IElOVDsKKyV0eXBlIDxpbnRlZ2VyPiBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbDsKKyVkZXN0cnVjdG9yIHsgZGVzdHJveSAoJCQpOyB9IElOVCBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbDsKKyUlCitzdGFydDoKKyAgJ2EnIGEgeyAkMjsgfSB8ICdiJyBiIHsgJDI7IH0gfCAnYycgYyB7ICQyOyB9IHwgJ2QnIGQgeyAkMjsgfQorfCAnZScgZSB7ICQyOyB9IHwgJ2YnIGYgeyAkMjsgfSB8ICdnJyBnIHsgJDI7IH0gfCAnaCcgaCB7ICQyOyB9Cit8ICdpJyBpIHsgJDI7IH0gfCAnaicgaiB7ICQyOyB9IHwgJ2snIGsgeyAkMjsgfSB8ICdsJyBsIHsgJDI7IH0KKzsKKworYTogSU5UIHwgSU5UIHsgfSBJTlQgeyB9IElOVCB7IH07CitiOiBJTlQgfCAvKiBlbXB0eSAqLzsKK2M6IElOVCB8IElOVCB7ICQxOyB9IElOVCB7ICQ8aW50ZWdlcj4yOyB9IElOVCB7ICQ8aW50ZWdlcj40OyB9OworZDogSU5UIHwgSU5UIHsgfSBJTlQgeyAkMTsgfSBJTlQgeyAkPGludGVnZXI+MjsgfTsKK2U6IElOVCB8IElOVCB7IH0gSU5UIHsgIH0gSU5UIHsgJDE7IH07CitmOiBJTlQgfCBJTlQgeyB9IElOVCB7ICB9IElOVCB7ICQkID0gJDEgKyAkMyArICQ1OyB9OworZzogSU5UIHwgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgfTsKK2g6IElOVCB8IElOVCB7ICQ8aW50ZWdlcj4kOyB9IElOVCB7ICQ8aW50ZWdlcj4kID0gJDxpbnRlZ2VyPjI7IH0gSU5UIHsgfTsKK2k6IElOVCB8IElOVCBJTlQgeyB9IHsgJCQgPSAkMSArICQyOyB9OworajogSU5UIHwgSU5UIElOVCB7ICQ8aW50ZWdlcj4kID0gMTsgfSB7ICQkID0gJDEgKyAkMjsgfTsKK2s6IElOVCB8IElOVCBJTlQgeyAkPGludGVnZXI+JDsgfSB7ICQ8aW50ZWdlcj4kID0gJDxpbnRlZ2VyPjM7IH0geyB9OworbDogSU5UIHwgSU5UIHsgJDxpbnRlZ2VyPiQgPSAkPGludGVnZXI+MTsgfSBJTlQgeyAkPGludGVnZXI+JCA9ICQ8aW50ZWdlcj4yICsgJDxpbnRlZ2VyPjM7IH0gSU5UIHsgJDxpbnRlZ2VyPiQgPSAkPGludGVnZXI+NCArICQ8aW50ZWdlcj41OyB9OworX0FURU9GCiAKIAotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7CitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjI4NzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0td2FybmluZ3M9bWlkcnVsZS12YWx1ZXMgLWZjYXJldCBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiaW5wdXQuYXQ6Mjg3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0td2FybmluZ3M9bWlkcnVsZS12YWx1ZXMgLWZjYXJldCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoyODciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIDUgKSAjIDUuIGlucHV0LmF0OjE1NzogSW5jb21wYXRpYmxlIEFsaWFzZXMKLSAgICBhdF9zZXR1cF9saW5lPSdpbnB1dC5hdDoxNTcnCi0gICAgYXRfZGVzYz0nSW5jb21wYXRpYmxlIEFsaWFzZXMnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiAgNTogSW5jb21wYXRpYmxlIEFsaWFzZXMgICAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjUuIGlucHV0LmF0OjE1NzogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjg3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXdhcm5pbmdzPW1pZHJ1bGUtdmFsdWVzIC1mY2FyZXQgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXdhcm5pbmdzPW1pZHJ1bGUtdmFsdWVzIC1mY2FyZXQgaW5wdXQueSIgImlucHV0LmF0OjI4NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXdhcm5pbmdzPW1pZHJ1bGUtdmFsdWVzIC1mY2FyZXQgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjI4NzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImlucHV0LmF0OjI4NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoyODciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoyODc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJpbnB1dC5hdDoyODciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjg3OiBiaXNvbiAtLXdhcm5pbmdzPW1pZHJ1bGUtdmFsdWVzIC1mY2FyZXQgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImlucHV0LmF0OjI4NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtLXdhcm5pbmdzPW1pZHJ1bGUtdmFsdWVzIC1mY2FyZXQgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6MTEuMTAtMzI6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiBcJFwkCisgYTogSU5UIHwgSU5UIHsgfSBJTlQgeyB9IElOVCB7IH07CisgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTEuMTAtMTI6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQxCisgYTogSU5UIHwgSU5UIHsgfSBJTlQgeyB9IElOVCB7IH07CisgICAgICAgICAgXl5eCitpbnB1dC55OjExLjE4LTIwOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkMworIGE6IElOVCB8IElOVCB7IH0gSU5UIHsgfSBJTlQgeyB9OworICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjExLjI2LTI4OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkNQorIGE6IElOVCB8IElOVCB7IH0gSU5UIHsgfSBJTlQgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTIuOTogd2FybmluZzogZW1wdHkgcnVsZSBmb3IgdHlwZWQgbm9udGVybWluYWwsIGFuZCBubyBhY3Rpb24KKyBiOiBJTlQgfCAvKiBlbXB0eSAqLzsKKyAgICAgICAgIF4KK2lucHV0Lnk6MTMuMTQtMjA6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiBcJFwkCisgYzogSU5UIHwgSU5UIHsgXCQxOyB9IElOVCB7IFwkPGludGVnZXI+MjsgfSBJTlQgeyBcJDxpbnRlZ2VyPjQ7IH07CisgICAgICAgICAgICAgIF5eXl5eXl4KK2lucHV0Lnk6MTMuMjYtNDE6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiBcJFwkCisgYzogSU5UIHwgSU5UIHsgXCQxOyB9IElOVCB7IFwkPGludGVnZXI+MjsgfSBJTlQgeyBcJDxpbnRlZ2VyPjQ7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTMuMTAtNjI6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiBcJFwkCisgYzogSU5UIHwgSU5UIHsgXCQxOyB9IElOVCB7IFwkPGludGVnZXI+MjsgfSBJTlQgeyBcJDxpbnRlZ2VyPjQ7IH07CisgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTMuMjItMjQ6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQzCisgYzogSU5UIHwgSU5UIHsgXCQxOyB9IElOVCB7IFwkPGludGVnZXI+MjsgfSBJTlQgeyBcJDxpbnRlZ2VyPjQ7IH07CisgICAgICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjEzLjQzLTQ1OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkNQorIGM6IElOVCB8IElOVCB7IFwkMTsgfSBJTlQgeyBcJDxpbnRlZ2VyPjI7IH0gSU5UIHsgXCQ8aW50ZWdlcj40OyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxNC4xNC0xNjogd2FybmluZzogdW5zZXQgdmFsdWU6IFwkXCQKKyBkOiBJTlQgfCBJTlQgeyB9IElOVCB7IFwkMTsgfSBJTlQgeyBcJDxpbnRlZ2VyPjI7IH07CisgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxNC4xMC00OTogd2FybmluZzogdW5zZXQgdmFsdWU6IFwkXCQKKyBkOiBJTlQgfCBJTlQgeyB9IElOVCB7IFwkMTsgfSBJTlQgeyBcJDxpbnRlZ2VyPjI7IH07CisgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgoraW5wdXQueToxNC4xOC0yMDogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDMKKyBkOiBJTlQgfCBJTlQgeyB9IElOVCB7IFwkMTsgfSBJTlQgeyBcJDxpbnRlZ2VyPjI7IH07CisgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTQuMzAtMzI6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQ1CisgZDogSU5UIHwgSU5UIHsgfSBJTlQgeyBcJDE7IH0gSU5UIHsgXCQ8aW50ZWdlcj4yOyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjE1LjEwLTM3OiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogXCRcJAorIGU6IElOVCB8IElOVCB7IH0gSU5UIHsgIH0gSU5UIHsgXCQxOyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTUuMTgtMjA6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQzCisgZTogSU5UIHwgSU5UIHsgfSBJTlQgeyAgfSBJTlQgeyBcJDE7IH07CisgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTUuMjctMjk6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQ1CisgZTogSU5UIHwgSU5UIHsgfSBJTlQgeyAgfSBJTlQgeyBcJDE7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTcuMTAtNTg6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiBcJFwkCisgZzogSU5UIHwgSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSBJTlQgeyBcJDxpbnRlZ2VyPlwkOyB9IElOVCB7IH07CisgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgoraW5wdXQueToxNy4xMC0xMjogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDEKKyBnOiBJTlQgfCBJTlQgeyBcJDxpbnRlZ2VyPlwkOyB9IElOVCB7IFwkPGludGVnZXI+XCQ7IH0gSU5UIHsgfTsKKyAgICAgICAgICBeXl4KK2lucHV0Lnk6MTcuMTQtMjk6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQyCisgZzogSU5UIHwgSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSBJTlQgeyBcJDxpbnRlZ2VyPlwkOyB9IElOVCB7IH07CisgICAgICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTcuMzEtMzM6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQzCisgZzogSU5UIHwgSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSBJTlQgeyBcJDxpbnRlZ2VyPlwkOyB9IElOVCB7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjE3LjM1LTUwOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkNAorIGc6IElOVCB8IElOVCB7IFwkPGludGVnZXI+XCQ7IH0gSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSBJTlQgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjE3LjUyLTU0OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkNQorIGc6IElOVCB8IElOVCB7IFwkPGludGVnZXI+XCQ7IH0gSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSBJTlQgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxOC4xMC03Mjogd2FybmluZzogdW5zZXQgdmFsdWU6IFwkXCQKKyBoOiBJTlQgfCBJTlQgeyBcJDxpbnRlZ2VyPlwkOyB9IElOVCB7IFwkPGludGVnZXI+XCQgPSBcJDxpbnRlZ2VyPjI7IH0gSU5UIHsgfTsKKyAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTguMTAtMTI6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQxCisgaDogSU5UIHwgSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSBJTlQgeyBcJDxpbnRlZ2VyPlwkID0gXCQ8aW50ZWdlcj4yOyB9IElOVCB7IH07CisgICAgICAgICAgXl5eCitpbnB1dC55OjE4LjMxLTMzOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkMworIGg6IElOVCB8IElOVCB7IFwkPGludGVnZXI+XCQ7IH0gSU5UIHsgXCQ8aW50ZWdlcj5cJCA9IFwkPGludGVnZXI+MjsgfSBJTlQgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxOC4zNS02NDogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDQKKyBoOiBJTlQgfCBJTlQgeyBcJDxpbnRlZ2VyPlwkOyB9IElOVCB7IFwkPGludGVnZXI+XCQgPSBcJDxpbnRlZ2VyPjI7IH0gSU5UIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjE4LjY2LTY4OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkNQorIGg6IElOVCB8IElOVCB7IFwkPGludGVnZXI+XCQ7IH0gSU5UIHsgXCQ8aW50ZWdlcj5cJCA9IFwkPGludGVnZXI+MjsgfSBJTlQgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjIwLjE4LTM3OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkMworIGo6IElOVCB8IElOVCBJTlQgeyBcJDxpbnRlZ2VyPlwkID0gMTsgfSB7IFwkXCQgPSBcJDEgKyBcJDI7IH07CisgICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXgoraW5wdXQueToyMS4xMC02ODogd2FybmluZzogdW5zZXQgdmFsdWU6IFwkXCQKKyBrOiBJTlQgfCBJTlQgSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSB7IFwkPGludGVnZXI+XCQgPSBcJDxpbnRlZ2VyPjM7IH0geyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjIxLjEwLTEyOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkMQorIGs6IElOVCB8IElOVCBJTlQgeyBcJDxpbnRlZ2VyPlwkOyB9IHsgXCQ8aW50ZWdlcj5cJCA9IFwkPGludGVnZXI+MzsgfSB7IH07CisgICAgICAgICAgXl5eCitpbnB1dC55OjIxLjE0LTE2OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkMgorIGs6IElOVCB8IElOVCBJTlQgeyBcJDxpbnRlZ2VyPlwkOyB9IHsgXCQ8aW50ZWdlcj5cJCA9IFwkPGludGVnZXI+MzsgfSB7IH07CisgICAgICAgICAgICAgIF5eXgoraW5wdXQueToyMS4zNS02NDogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDQKKyBrOiBJTlQgfCBJTlQgSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSB7IFwkPGludGVnZXI+XCQgPSBcJDxpbnRlZ2VyPjM7IH0geyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjI4NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyMgRGVmaW5pbmcgUE9TSVhMWV9DT1JSRUNUIGNhdXNlcyBiaXNvbiB0byBjb21wbGFpbiBpZiBvcHRpb25zIGFyZQorIyBhZGRlZCBhZnRlciB0aGUgZ3JhbW1hciBmaWxlIG5hbWUsIHNvIHNraXAgdGhlc2UgY2hlY2tzIGluIHRoYXQKKyMgY2FzZS4KK2lmIHRlc3QgIiRQT1NJWExZX0NPUlJFQ1RfSVNfRVhQT1JURUQiID0gZmFsc2U7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisKKyAgIyBUbyBhdm9pZCBleHBhbmRpbmcgaXQgcmVwZWF0ZWRseSwgc3RvcmUgc3BlY2lmaWVkIHN0ZG91dC4KKyAgOiA+ZXhwb3V0CisKKyAgIyBSdW4gd2l0aCAtV2Vycm9yLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjg3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0td2FybmluZ3M9bWlkcnVsZS12YWx1ZXMgLWZjYXJldCBpbnB1dC55IC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXdhcm5pbmdzPW1pZHJ1bGUtdmFsdWVzIC1mY2FyZXQgaW5wdXQueSAtV2Vycm9yIiAiaW5wdXQuYXQ6Mjg3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS13YXJuaW5ncz1taWRydWxlLXZhbHVlcyAtZmNhcmV0IGlucHV0LnkgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgQnVpbGQgZXhwZWN0ZWQgc3RkZXJyIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlICJ3YXJuaW5ncyBiZWluZworICAjIHRyZWF0ZWQgYXMgZXJyb3JzIiBtZXNzYWdlLgorICBjYXQgPmF0LWJpc29uLWNoZWNrLXdhcm5pbmdzIDw8J19BVEVPRicKK2lucHV0Lnk6MTEuMTAtMzI6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkJAorIGE6IElOVCB8IElOVCB7IH0gSU5UIHsgfSBJTlQgeyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjExLjEwLTEyOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQxCisgYTogSU5UIHwgSU5UIHsgfSBJTlQgeyB9IElOVCB7IH07CisgICAgICAgICAgXl5eCitpbnB1dC55OjExLjE4LTIwOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQzCisgYTogSU5UIHwgSU5UIHsgfSBJTlQgeyB9IElOVCB7IH07CisgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTEuMjYtMjg6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDUKKyBhOiBJTlQgfCBJTlQgeyB9IElOVCB7IH0gSU5UIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjEyLjk6IHdhcm5pbmc6IGVtcHR5IHJ1bGUgZm9yIHR5cGVkIG5vbnRlcm1pbmFsLCBhbmQgbm8gYWN0aW9uCisgYjogSU5UIHwgLyogZW1wdHkgKi87CisgICAgICAgICBeCitpbnB1dC55OjEzLjE0LTIwOiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogJCQKKyBjOiBJTlQgfCBJTlQgeyAkMTsgfSBJTlQgeyAkPGludGVnZXI+MjsgfSBJTlQgeyAkPGludGVnZXI+NDsgfTsKKyAgICAgICAgICAgICAgXl5eXl5eXgoraW5wdXQueToxMy4yNi00MTogd2FybmluZzogdW5zZXQgdmFsdWU6ICQkCisgYzogSU5UIHwgSU5UIHsgJDE7IH0gSU5UIHsgJDxpbnRlZ2VyPjI7IH0gSU5UIHsgJDxpbnRlZ2VyPjQ7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTMuMTAtNjI6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkJAorIGM6IElOVCB8IElOVCB7ICQxOyB9IElOVCB7ICQ8aW50ZWdlcj4yOyB9IElOVCB7ICQ8aW50ZWdlcj40OyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjEzLjIyLTI0OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQzCisgYzogSU5UIHwgSU5UIHsgJDE7IH0gSU5UIHsgJDxpbnRlZ2VyPjI7IH0gSU5UIHsgJDxpbnRlZ2VyPjQ7IH07CisgICAgICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjEzLjQzLTQ1OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQ1CisgYzogSU5UIHwgSU5UIHsgJDE7IH0gSU5UIHsgJDxpbnRlZ2VyPjI7IH0gSU5UIHsgJDxpbnRlZ2VyPjQ7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjE0LjE0LTE2OiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogJCQKKyBkOiBJTlQgfCBJTlQgeyB9IElOVCB7ICQxOyB9IElOVCB7ICQ8aW50ZWdlcj4yOyB9OworICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTQuMTAtNDk6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkJAorIGQ6IElOVCB8IElOVCB7IH0gSU5UIHsgJDE7IH0gSU5UIHsgJDxpbnRlZ2VyPjI7IH07CisgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgoraW5wdXQueToxNC4xOC0yMDogd2FybmluZzogdW51c2VkIHZhbHVlOiAkMworIGQ6IElOVCB8IElOVCB7IH0gSU5UIHsgJDE7IH0gSU5UIHsgJDxpbnRlZ2VyPjI7IH07CisgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTQuMzAtMzI6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDUKKyBkOiBJTlQgfCBJTlQgeyB9IElOVCB7ICQxOyB9IElOVCB7ICQ8aW50ZWdlcj4yOyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjE1LjEwLTM3OiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogJCQKKyBlOiBJTlQgfCBJTlQgeyB9IElOVCB7ICB9IElOVCB7ICQxOyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTUuMTgtMjA6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDMKKyBlOiBJTlQgfCBJTlQgeyB9IElOVCB7ICB9IElOVCB7ICQxOyB9OworICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjE1LjI3LTI5OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQ1CisgZTogSU5UIHwgSU5UIHsgfSBJTlQgeyAgfSBJTlQgeyAkMTsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxNy4xMC01ODogd2FybmluZzogdW5zZXQgdmFsdWU6ICQkCisgZzogSU5UIHwgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgfTsKKyAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjE3LjEwLTEyOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQxCisgZzogSU5UIHwgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgfTsKKyAgICAgICAgICBeXl4KK2lucHV0Lnk6MTcuMTQtMjk6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDIKKyBnOiBJTlQgfCBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyB9OworICAgICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjE3LjMxLTMzOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQzCisgZzogSU5UIHwgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTcuMzUtNTA6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDQKKyBnOiBJTlQgfCBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjE3LjUyLTU0OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQ1CisgZzogSU5UIHwgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTguMTAtNzI6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkJAorIGg6IElOVCB8IElOVCB7ICQ8aW50ZWdlcj4kOyB9IElOVCB7ICQ8aW50ZWdlcj4kID0gJDxpbnRlZ2VyPjI7IH0gSU5UIHsgfTsKKyAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTguMTAtMTI6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDEKKyBoOiBJTlQgfCBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyAkPGludGVnZXI+JCA9ICQ8aW50ZWdlcj4yOyB9IElOVCB7IH07CisgICAgICAgICAgXl5eCitpbnB1dC55OjE4LjMxLTMzOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQzCisgaDogSU5UIHwgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgJDxpbnRlZ2VyPiQgPSAkPGludGVnZXI+MjsgfSBJTlQgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxOC4zNS02NDogd2FybmluZzogdW51c2VkIHZhbHVlOiAkNAorIGg6IElOVCB8IElOVCB7ICQ8aW50ZWdlcj4kOyB9IElOVCB7ICQ8aW50ZWdlcj4kID0gJDxpbnRlZ2VyPjI7IH0gSU5UIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjE4LjY2LTY4OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQ1CisgaDogSU5UIHwgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgJDxpbnRlZ2VyPiQgPSAkPGludGVnZXI+MjsgfSBJTlQgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjIwLjE4LTM3OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQzCisgajogSU5UIHwgSU5UIElOVCB7ICQ8aW50ZWdlcj4kID0gMTsgfSB7ICQkID0gJDEgKyAkMjsgfTsKKyAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjIxLjEwLTY4OiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogJCQKKyBrOiBJTlQgfCBJTlQgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0geyAkPGludGVnZXI+JCA9ICQ8aW50ZWdlcj4zOyB9IHsgfTsKKyAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgoraW5wdXQueToyMS4xMC0xMjogd2FybmluZzogdW51c2VkIHZhbHVlOiAkMQorIGs6IElOVCB8IElOVCBJTlQgeyAkPGludGVnZXI+JDsgfSB7ICQ8aW50ZWdlcj4kID0gJDxpbnRlZ2VyPjM7IH0geyB9OworICAgICAgICAgIF5eXgoraW5wdXQueToyMS4xNC0xNjogd2FybmluZzogdW51c2VkIHZhbHVlOiAkMgorIGs6IElOVCB8IElOVCBJTlQgeyAkPGludGVnZXI+JDsgfSB7ICQ8aW50ZWdlcj4kID0gJDxpbnRlZ2VyPjM7IH0geyB9OworICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MjEuMzUtNjQ6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDQKKyBrOiBJTlQgfCBJTlQgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0geyAkPGludGVnZXI+JCA9ICQ8aW50ZWdlcj4zOyB9IHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitfQVRFT0YKKworICBhdF9iaXNvbl9jaGVja19maXJzdD1gc2VkIC1uIFwKKyAgICAnLzogd2FybmluZzogL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wPWBzZWQgLW4gXAorICAgICcvY29uZmxpY3RzOiBbMC05XS4qcmVkdWNlJC97PTtxO30nIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzYAorICA6ICR7YXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wOj0xfQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdF90bXAgLWx0ICRhdF9iaXNvbl9jaGVja19maXJzdDsgdGhlbgorICAgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PSRhdF9iaXNvbl9jaGVja19maXJzdF90bXAKKyAgZmkKKyAgaWYgdGVzdCAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLWd0IDE7IHRoZW4KKyAgICBzZWQgLW4gIjEsYGV4cHIgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0IC0gMWAicCBcCisgICAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+IGV4cGVycgorICBmaQorICBlY2hvICdiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMnID4+IGV4cGVycgorCisgICMgRmluaXNoIGJ1aWxkaW5nIGV4cGVjdGVkIHN0ZGVyciBhbmQgY2hlY2suICBVbmxpa2Ugd2FybmluZ3MsCisgICMgY29tcGxhaW50cyBjYXVzZSBiaXNvbiB0byBleGl0IGVhcmx5LiAgVGh1cywgd2l0aCAtV2Vycm9yLCBiaXNvbgorICAjIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHJlcG9ydCBhbGwgd2FybmluZ3MgdGhhdCBpdCBkb2VzIHdpdGhvdXQKKyAgIyAtV2Vycm9yLCBidXQgaXQgYXQgbGVhc3QgcmVwb3J0cyBvbmUuCisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YHNlZCAtbiAnJD0nIHN0ZGVycmAKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2xhc3Q6PTF9CisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YGV4cHIgJGF0X2Jpc29uX2NoZWNrX2xhc3QgLSAxYAorICBzZWQgLW4gIiRhdF9iaXNvbl9jaGVja19maXJzdCwkYXRfYmlzb25fY2hlY2tfbGFzdCJwIFwKKyAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+PiBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjI4Nzogc2VkICdzLC4qL1xcKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1xcKVwkLFxcMSwnIFxcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiaW5wdXQuYXQ6Mjg3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAncywuKi9cKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1wpJCxcMSwnIFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC0td2FybmluZ3M9ZXJyb3IuCisgIGNwIHN0ZGVyciBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjI4NzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXdhcm5pbmdzPW1pZHJ1bGUtdmFsdWVzIC1mY2FyZXQgaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS13YXJuaW5ncz1taWRydWxlLXZhbHVlcyAtZmNhcmV0IGlucHV0LnkgLS13YXJuaW5ncz1lcnJvciIgImlucHV0LmF0OjI4NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0td2FybmluZ3M9bWlkcnVsZS12YWx1ZXMgLWZjYXJldCBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC1Xbm9uZSBhbmQgLS13YXJuaW5ncz1ub25lIGJ5IG1ha2luZyBzdXJlIHRoYXQKKyAgIyAtV2Vycm9yIGRvZXNuJ3QgY2hhbmdlIHRoZSBleGl0IHN0YXR1cyB3aGVuIC1Xbm9uZSBvcgorICAjIC0td2FybmluZ3M9bm9uZSBpcyBzcGVjaWZpZWQuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoyODc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS13YXJuaW5ncz1taWRydWxlLXZhbHVlcyAtZmNhcmV0IGlucHV0LnkgLVdub25lIC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXdhcm5pbmdzPW1pZHJ1bGUtdmFsdWVzIC1mY2FyZXQgaW5wdXQueSAtV25vbmUgLVdlcnJvciIgImlucHV0LmF0OjI4NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0td2FybmluZ3M9bWlkcnVsZS12YWx1ZXMgLWZjYXJldCBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjI4NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjI4NzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXdhcm5pbmdzPW1pZHJ1bGUtdmFsdWVzIC1mY2FyZXQgaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0td2FybmluZ3M9bWlkcnVsZS12YWx1ZXMgLWZjYXJldCBpbnB1dC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIiAiaW5wdXQuYXQ6Mjg3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS13YXJuaW5ncz1taWRydWxlLXZhbHVlcyAtZmNhcmV0IGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF81CisjQVRfU1RBUlRfNgorYXRfZm5fZ3JvdXBfYmFubmVyIDYgJ2lucHV0LmF0OjI5NScgXAorICAiVW51c2VkIHZhbHVlcyBiZWZvcmUgc3ltYm9sIGRlY2xhcmF0aW9ucyIgIiAgICAgICAiIDEKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI2LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCisKKworCislJQorc3RhcnQ6CisgICdhJyBhIHsgJDI7IH0gfCAnYicgYiB7ICQyOyB9IHwgJ2MnIGMgeyAkMjsgfSB8ICdkJyBkIHsgJDI7IH0KK3wgJ2UnIGUgeyAkMjsgfSB8ICdmJyBmIHsgJDI7IH0gfCAnZycgZyB7ICQyOyB9IHwgJ2gnIGggeyAkMjsgfQorfCAnaScgaSB7ICQyOyB9IHwgJ2onIGogeyAkMjsgfSB8ICdrJyBrIHsgJDI7IH0gfCAnbCcgbCB7ICQyOyB9Cis7CisKK2E6IElOVCB8IElOVCB7IH0gSU5UIHsgfSBJTlQgeyB9OworYjogSU5UIHwgLyogZW1wdHkgKi87CitjOiBJTlQgfCBJTlQgeyAkMTsgfSBJTlQgeyAkPGludGVnZXI+MjsgfSBJTlQgeyAkPGludGVnZXI+NDsgfTsKK2Q6IElOVCB8IElOVCB7IH0gSU5UIHsgJDE7IH0gSU5UIHsgJDxpbnRlZ2VyPjI7IH07CitlOiBJTlQgfCBJTlQgeyB9IElOVCB7ICB9IElOVCB7ICQxOyB9OworZjogSU5UIHwgSU5UIHsgfSBJTlQgeyAgfSBJTlQgeyAkJCA9ICQxICsgJDMgKyAkNTsgfTsKK2c6IElOVCB8IElOVCB7ICQ8aW50ZWdlcj4kOyB9IElOVCB7ICQ8aW50ZWdlcj4kOyB9IElOVCB7IH07CitoOiBJTlQgfCBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyAkPGludGVnZXI+JCA9ICQ8aW50ZWdlcj4yOyB9IElOVCB7IH07CitpOiBJTlQgfCBJTlQgSU5UIHsgfSB7ICQkID0gJDEgKyAkMjsgfTsKK2o6IElOVCB8IElOVCBJTlQgeyAkPGludGVnZXI+JCA9IDE7IH0geyAkJCA9ICQxICsgJDI7IH07CitrOiBJTlQgfCBJTlQgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0geyAkPGludGVnZXI+JCA9ICQ8aW50ZWdlcj4zOyB9IHsgfTsKK2w6IElOVCB8IElOVCB7ICQ8aW50ZWdlcj4kID0gJDxpbnRlZ2VyPjE7IH0gSU5UIHsgJDxpbnRlZ2VyPiQgPSAkPGludGVnZXI+MiArICQ8aW50ZWdlcj4zOyB9IElOVCB7ICQ8aW50ZWdlcj4kID0gJDxpbnRlZ2VyPjQgKyAkPGludGVnZXI+NTsgfTsKKyV0b2tlbiA8aW50ZWdlcj4gSU5UOworJXR5cGUgPGludGVnZXI+IGEgYiBjIGQgZSBmIGcgaCBpIGogayBsOworJWRlc3RydWN0b3IgeyBkZXN0cm95ICgkJCk7IH0gSU5UIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsOworX0FURU9GCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoyOTY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtZmNhcmV0IGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJpbnB1dC5hdDoyOTYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLWZjYXJldCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoyOTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoyOTY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1mY2FyZXQgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZmNhcmV0IGlucHV0LnkiICJpbnB1dC5hdDoyOTYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWZjYXJldCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoyOTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjk2OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaW5wdXQuYXQ6Mjk2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjI5NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjI5NjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImlucHV0LmF0OjI5NiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoyOTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoyOTY6IGJpc29uIC1mY2FyZXQgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImlucHV0LmF0OjI5NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtZmNhcmV0IGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OjExLjEwLTMyOiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogXCRcJAorIGE6IElOVCB8IElOVCB7IH0gSU5UIHsgfSBJTlQgeyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjExLjEwLTEyOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkMQorIGE6IElOVCB8IElOVCB7IH0gSU5UIHsgfSBJTlQgeyB9OworICAgICAgICAgIF5eXgoraW5wdXQueToxMS4xOC0yMDogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDMKKyBhOiBJTlQgfCBJTlQgeyB9IElOVCB7IH0gSU5UIHsgfTsKKyAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxMS4yNi0yODogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDUKKyBhOiBJTlQgfCBJTlQgeyB9IElOVCB7IH0gSU5UIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjEyLjk6IHdhcm5pbmc6IGVtcHR5IHJ1bGUgZm9yIHR5cGVkIG5vbnRlcm1pbmFsLCBhbmQgbm8gYWN0aW9uCisgYjogSU5UIHwgLyogZW1wdHkgKi87CisgICAgICAgICBeCitpbnB1dC55OjEzLjEwLTYyOiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogXCRcJAorIGM6IElOVCB8IElOVCB7IFwkMTsgfSBJTlQgeyBcJDxpbnRlZ2VyPjI7IH0gSU5UIHsgXCQ8aW50ZWdlcj40OyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjEzLjIyLTI0OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkMworIGM6IElOVCB8IElOVCB7IFwkMTsgfSBJTlQgeyBcJDxpbnRlZ2VyPjI7IH0gSU5UIHsgXCQ8aW50ZWdlcj40OyB9OworICAgICAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxMy40My00NTogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDUKKyBjOiBJTlQgfCBJTlQgeyBcJDE7IH0gSU5UIHsgXCQ8aW50ZWdlcj4yOyB9IElOVCB7IFwkPGludGVnZXI+NDsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTQuMTAtNDk6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiBcJFwkCisgZDogSU5UIHwgSU5UIHsgfSBJTlQgeyBcJDE7IH0gSU5UIHsgXCQ8aW50ZWdlcj4yOyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTQuMTgtMjA6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQzCisgZDogSU5UIHwgSU5UIHsgfSBJTlQgeyBcJDE7IH0gSU5UIHsgXCQ8aW50ZWdlcj4yOyB9OworICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjE0LjMwLTMyOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkNQorIGQ6IElOVCB8IElOVCB7IH0gSU5UIHsgXCQxOyB9IElOVCB7IFwkPGludGVnZXI+MjsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxNS4xMC0zNzogd2FybmluZzogdW5zZXQgdmFsdWU6IFwkXCQKKyBlOiBJTlQgfCBJTlQgeyB9IElOVCB7ICB9IElOVCB7IFwkMTsgfTsKKyAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjE1LjE4LTIwOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkMworIGU6IElOVCB8IElOVCB7IH0gSU5UIHsgIH0gSU5UIHsgXCQxOyB9OworICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjE1LjI3LTI5OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkNQorIGU6IElOVCB8IElOVCB7IH0gSU5UIHsgIH0gSU5UIHsgXCQxOyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjE3LjEwLTU4OiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogXCRcJAorIGc6IElOVCB8IElOVCB7IFwkPGludGVnZXI+XCQ7IH0gSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSBJTlQgeyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTcuMTAtMTI6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQxCisgZzogSU5UIHwgSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSBJTlQgeyBcJDxpbnRlZ2VyPlwkOyB9IElOVCB7IH07CisgICAgICAgICAgXl5eCitpbnB1dC55OjE3LjMxLTMzOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkMworIGc6IElOVCB8IElOVCB7IFwkPGludGVnZXI+XCQ7IH0gSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSBJTlQgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxNy41Mi01NDogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDUKKyBnOiBJTlQgfCBJTlQgeyBcJDxpbnRlZ2VyPlwkOyB9IElOVCB7IFwkPGludGVnZXI+XCQ7IH0gSU5UIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTguMTAtNzI6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiBcJFwkCisgaDogSU5UIHwgSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSBJTlQgeyBcJDxpbnRlZ2VyPlwkID0gXCQ8aW50ZWdlcj4yOyB9IElOVCB7IH07CisgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjE4LjEwLTEyOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkMQorIGg6IElOVCB8IElOVCB7IFwkPGludGVnZXI+XCQ7IH0gSU5UIHsgXCQ8aW50ZWdlcj5cJCA9IFwkPGludGVnZXI+MjsgfSBJTlQgeyB9OworICAgICAgICAgIF5eXgoraW5wdXQueToxOC4zMS0zMzogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDMKKyBoOiBJTlQgfCBJTlQgeyBcJDxpbnRlZ2VyPlwkOyB9IElOVCB7IFwkPGludGVnZXI+XCQgPSBcJDxpbnRlZ2VyPjI7IH0gSU5UIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTguNjYtNjg6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQ1CisgaDogSU5UIHwgSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSBJTlQgeyBcJDxpbnRlZ2VyPlwkID0gXCQ8aW50ZWdlcj4yOyB9IElOVCB7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MjEuMTAtNjg6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiBcJFwkCisgazogSU5UIHwgSU5UIElOVCB7IFwkPGludGVnZXI+XCQ7IH0geyBcJDxpbnRlZ2VyPlwkID0gXCQ8aW50ZWdlcj4zOyB9IHsgfTsKKyAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgoraW5wdXQueToyMS4xMC0xMjogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDEKKyBrOiBJTlQgfCBJTlQgSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSB7IFwkPGludGVnZXI+XCQgPSBcJDxpbnRlZ2VyPjM7IH0geyB9OworICAgICAgICAgIF5eXgoraW5wdXQueToyMS4xNC0xNjogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDIKKyBrOiBJTlQgfCBJTlQgSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSB7IFwkPGludGVnZXI+XCQgPSBcJDxpbnRlZ2VyPjM7IH0geyB9OworICAgICAgICAgICAgICBeXl4KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjI5NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyMgRGVmaW5pbmcgUE9TSVhMWV9DT1JSRUNUIGNhdXNlcyBiaXNvbiB0byBjb21wbGFpbiBpZiBvcHRpb25zIGFyZQorIyBhZGRlZCBhZnRlciB0aGUgZ3JhbW1hciBmaWxlIG5hbWUsIHNvIHNraXAgdGhlc2UgY2hlY2tzIGluIHRoYXQKKyMgY2FzZS4KK2lmIHRlc3QgIiRQT1NJWExZX0NPUlJFQ1RfSVNfRVhQT1JURUQiID0gZmFsc2U7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisKKyAgIyBUbyBhdm9pZCBleHBhbmRpbmcgaXQgcmVwZWF0ZWRseSwgc3RvcmUgc3BlY2lmaWVkIHN0ZG91dC4KKyAgOiA+ZXhwb3V0CisKKyAgIyBSdW4gd2l0aCAtV2Vycm9yLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjk2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgaW5wdXQueSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCBpbnB1dC55IC1XZXJyb3IiICJpbnB1dC5hdDoyOTYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IGlucHV0LnkgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjk2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgQnVpbGQgZXhwZWN0ZWQgc3RkZXJyIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlICJ3YXJuaW5ncyBiZWluZworICAjIHRyZWF0ZWQgYXMgZXJyb3JzIiBtZXNzYWdlLgorICBjYXQgPmF0LWJpc29uLWNoZWNrLXdhcm5pbmdzIDw8J19BVEVPRicKK2lucHV0Lnk6MTEuMTAtMzI6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkJAorIGE6IElOVCB8IElOVCB7IH0gSU5UIHsgfSBJTlQgeyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjExLjEwLTEyOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQxCisgYTogSU5UIHwgSU5UIHsgfSBJTlQgeyB9IElOVCB7IH07CisgICAgICAgICAgXl5eCitpbnB1dC55OjExLjE4LTIwOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQzCisgYTogSU5UIHwgSU5UIHsgfSBJTlQgeyB9IElOVCB7IH07CisgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTEuMjYtMjg6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDUKKyBhOiBJTlQgfCBJTlQgeyB9IElOVCB7IH0gSU5UIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjEyLjk6IHdhcm5pbmc6IGVtcHR5IHJ1bGUgZm9yIHR5cGVkIG5vbnRlcm1pbmFsLCBhbmQgbm8gYWN0aW9uCisgYjogSU5UIHwgLyogZW1wdHkgKi87CisgICAgICAgICBeCitpbnB1dC55OjEzLjEwLTYyOiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogJCQKKyBjOiBJTlQgfCBJTlQgeyAkMTsgfSBJTlQgeyAkPGludGVnZXI+MjsgfSBJTlQgeyAkPGludGVnZXI+NDsgfTsKKyAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgoraW5wdXQueToxMy4yMi0yNDogd2FybmluZzogdW51c2VkIHZhbHVlOiAkMworIGM6IElOVCB8IElOVCB7ICQxOyB9IElOVCB7ICQ8aW50ZWdlcj4yOyB9IElOVCB7ICQ8aW50ZWdlcj40OyB9OworICAgICAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxMy40My00NTogd2FybmluZzogdW51c2VkIHZhbHVlOiAkNQorIGM6IElOVCB8IElOVCB7ICQxOyB9IElOVCB7ICQ8aW50ZWdlcj4yOyB9IElOVCB7ICQ8aW50ZWdlcj40OyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxNC4xMC00OTogd2FybmluZzogdW5zZXQgdmFsdWU6ICQkCisgZDogSU5UIHwgSU5UIHsgfSBJTlQgeyAkMTsgfSBJTlQgeyAkPGludGVnZXI+MjsgfTsKKyAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjE0LjE4LTIwOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQzCisgZDogSU5UIHwgSU5UIHsgfSBJTlQgeyAkMTsgfSBJTlQgeyAkPGludGVnZXI+MjsgfTsKKyAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxNC4zMC0zMjogd2FybmluZzogdW51c2VkIHZhbHVlOiAkNQorIGQ6IElOVCB8IElOVCB7IH0gSU5UIHsgJDE7IH0gSU5UIHsgJDxpbnRlZ2VyPjI7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTUuMTAtMzc6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkJAorIGU6IElOVCB8IElOVCB7IH0gSU5UIHsgIH0gSU5UIHsgJDE7IH07CisgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgoraW5wdXQueToxNS4xOC0yMDogd2FybmluZzogdW51c2VkIHZhbHVlOiAkMworIGU6IElOVCB8IElOVCB7IH0gSU5UIHsgIH0gSU5UIHsgJDE7IH07CisgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTUuMjctMjk6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDUKKyBlOiBJTlQgfCBJTlQgeyB9IElOVCB7ICB9IElOVCB7ICQxOyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjE3LjEwLTU4OiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogJCQKKyBnOiBJTlQgfCBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTcuMTAtMTI6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDEKKyBnOiBJTlQgfCBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyB9OworICAgICAgICAgIF5eXgoraW5wdXQueToxNy4zMS0zMzogd2FybmluZzogdW51c2VkIHZhbHVlOiAkMworIGc6IElOVCB8IElOVCB7ICQ8aW50ZWdlcj4kOyB9IElOVCB7ICQ8aW50ZWdlcj4kOyB9IElOVCB7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjE3LjUyLTU0OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQ1CisgZzogSU5UIHwgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTguMTAtNzI6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkJAorIGg6IElOVCB8IElOVCB7ICQ8aW50ZWdlcj4kOyB9IElOVCB7ICQ8aW50ZWdlcj4kID0gJDxpbnRlZ2VyPjI7IH0gSU5UIHsgfTsKKyAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTguMTAtMTI6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDEKKyBoOiBJTlQgfCBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyAkPGludGVnZXI+JCA9ICQ8aW50ZWdlcj4yOyB9IElOVCB7IH07CisgICAgICAgICAgXl5eCitpbnB1dC55OjE4LjMxLTMzOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQzCisgaDogSU5UIHwgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgJDxpbnRlZ2VyPiQgPSAkPGludGVnZXI+MjsgfSBJTlQgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxOC42Ni02ODogd2FybmluZzogdW51c2VkIHZhbHVlOiAkNQorIGg6IElOVCB8IElOVCB7ICQ8aW50ZWdlcj4kOyB9IElOVCB7ICQ8aW50ZWdlcj4kID0gJDxpbnRlZ2VyPjI7IH0gSU5UIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToyMS4xMC02ODogd2FybmluZzogdW5zZXQgdmFsdWU6ICQkCisgazogSU5UIHwgSU5UIElOVCB7ICQ8aW50ZWdlcj4kOyB9IHsgJDxpbnRlZ2VyPiQgPSAkPGludGVnZXI+MzsgfSB7IH07CisgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MjEuMTAtMTI6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDEKKyBrOiBJTlQgfCBJTlQgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0geyAkPGludGVnZXI+JCA9ICQ8aW50ZWdlcj4zOyB9IHsgfTsKKyAgICAgICAgICBeXl4KK2lucHV0Lnk6MjEuMTQtMTY6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDIKKyBrOiBJTlQgfCBJTlQgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0geyAkPGludGVnZXI+JCA9ICQ8aW50ZWdlcj4zOyB9IHsgfTsKKyAgICAgICAgICAgICAgXl5eCitfQVRFT0YKKworICBhdF9iaXNvbl9jaGVja19maXJzdD1gc2VkIC1uIFwKKyAgICAnLzogd2FybmluZzogL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wPWBzZWQgLW4gXAorICAgICcvY29uZmxpY3RzOiBbMC05XS4qcmVkdWNlJC97PTtxO30nIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzYAorICA6ICR7YXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wOj0xfQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdF90bXAgLWx0ICRhdF9iaXNvbl9jaGVja19maXJzdDsgdGhlbgorICAgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PSRhdF9iaXNvbl9jaGVja19maXJzdF90bXAKKyAgZmkKKyAgaWYgdGVzdCAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLWd0IDE7IHRoZW4KKyAgICBzZWQgLW4gIjEsYGV4cHIgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0IC0gMWAicCBcCisgICAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+IGV4cGVycgorICBmaQorICBlY2hvICdiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMnID4+IGV4cGVycgorCisgICMgRmluaXNoIGJ1aWxkaW5nIGV4cGVjdGVkIHN0ZGVyciBhbmQgY2hlY2suICBVbmxpa2Ugd2FybmluZ3MsCisgICMgY29tcGxhaW50cyBjYXVzZSBiaXNvbiB0byBleGl0IGVhcmx5LiAgVGh1cywgd2l0aCAtV2Vycm9yLCBiaXNvbgorICAjIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHJlcG9ydCBhbGwgd2FybmluZ3MgdGhhdCBpdCBkb2VzIHdpdGhvdXQKKyAgIyAtV2Vycm9yLCBidXQgaXQgYXQgbGVhc3QgcmVwb3J0cyBvbmUuCisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YHNlZCAtbiAnJD0nIHN0ZGVycmAKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2xhc3Q6PTF9CisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YGV4cHIgJGF0X2Jpc29uX2NoZWNrX2xhc3QgLSAxYAorICBzZWQgLW4gIiRhdF9iaXNvbl9jaGVja19maXJzdCwkYXRfYmlzb25fY2hlY2tfbGFzdCJwIFwKKyAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+PiBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjI5Njogc2VkICdzLC4qL1xcKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1xcKVwkLFxcMSwnIFxcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiaW5wdXQuYXQ6Mjk2IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAncywuKi9cKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1wpJCxcMSwnIFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjk2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC0td2FybmluZ3M9ZXJyb3IuCisgIGNwIHN0ZGVyciBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjI5NjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IGlucHV0LnkgLS13YXJuaW5ncz1lcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yIiAiaW5wdXQuYXQ6Mjk2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjk2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC1Xbm9uZSBhbmQgLS13YXJuaW5ncz1ub25lIGJ5IG1ha2luZyBzdXJlIHRoYXQKKyAgIyAtV2Vycm9yIGRvZXNuJ3QgY2hhbmdlIHRoZSBleGl0IHN0YXR1cyB3aGVuIC1Xbm9uZSBvcgorICAjIC0td2FybmluZ3M9bm9uZSBpcyBzcGVjaWZpZWQuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoyOTY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIiAiaW5wdXQuYXQ6Mjk2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjI5NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjI5NjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiICJpbnB1dC5hdDoyOTYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjk2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKworCisKKyUlCitzdGFydDoKKyAgJ2EnIGEgeyAkMjsgfSB8ICdiJyBiIHsgJDI7IH0gfCAnYycgYyB7ICQyOyB9IHwgJ2QnIGQgeyAkMjsgfQorfCAnZScgZSB7ICQyOyB9IHwgJ2YnIGYgeyAkMjsgfSB8ICdnJyBnIHsgJDI7IH0gfCAnaCcgaCB7ICQyOyB9Cit8ICdpJyBpIHsgJDI7IH0gfCAnaicgaiB7ICQyOyB9IHwgJ2snIGsgeyAkMjsgfSB8ICdsJyBsIHsgJDI7IH0KKzsKKworYTogSU5UIHwgSU5UIHsgfSBJTlQgeyB9IElOVCB7IH07CitiOiBJTlQgfCAvKiBlbXB0eSAqLzsKK2M6IElOVCB8IElOVCB7ICQxOyB9IElOVCB7ICQ8aW50ZWdlcj4yOyB9IElOVCB7ICQ8aW50ZWdlcj40OyB9OworZDogSU5UIHwgSU5UIHsgfSBJTlQgeyAkMTsgfSBJTlQgeyAkPGludGVnZXI+MjsgfTsKK2U6IElOVCB8IElOVCB7IH0gSU5UIHsgIH0gSU5UIHsgJDE7IH07CitmOiBJTlQgfCBJTlQgeyB9IElOVCB7ICB9IElOVCB7ICQkID0gJDEgKyAkMyArICQ1OyB9OworZzogSU5UIHwgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgfTsKK2g6IElOVCB8IElOVCB7ICQ8aW50ZWdlcj4kOyB9IElOVCB7ICQ8aW50ZWdlcj4kID0gJDxpbnRlZ2VyPjI7IH0gSU5UIHsgfTsKK2k6IElOVCB8IElOVCBJTlQgeyB9IHsgJCQgPSAkMSArICQyOyB9OworajogSU5UIHwgSU5UIElOVCB7ICQ8aW50ZWdlcj4kID0gMTsgfSB7ICQkID0gJDEgKyAkMjsgfTsKK2s6IElOVCB8IElOVCBJTlQgeyAkPGludGVnZXI+JDsgfSB7ICQ8aW50ZWdlcj4kID0gJDxpbnRlZ2VyPjM7IH0geyB9OworbDogSU5UIHwgSU5UIHsgJDxpbnRlZ2VyPiQgPSAkPGludGVnZXI+MTsgfSBJTlQgeyAkPGludGVnZXI+JCA9ICQ8aW50ZWdlcj4yICsgJDxpbnRlZ2VyPjM7IH0gSU5UIHsgJDxpbnRlZ2VyPiQgPSAkPGludGVnZXI+NCArICQ8aW50ZWdlcj41OyB9OworJXRva2VuIDxpbnRlZ2VyPiBJTlQ7CisldHlwZSA8aW50ZWdlcj4gYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGw7CislZGVzdHJ1Y3RvciB7IGRlc3Ryb3kgKCQkKTsgfSBJTlQgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGw7CitfQVRFT0YKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjI5NzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0td2FybmluZ3M9bWlkcnVsZS12YWx1ZXMgLWZjYXJldCBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiaW5wdXQuYXQ6Mjk3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0td2FybmluZ3M9bWlkcnVsZS12YWx1ZXMgLWZjYXJldCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoyOTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoyOTc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0td2FybmluZ3M9bWlkcnVsZS12YWx1ZXMgLWZjYXJldCBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0td2FybmluZ3M9bWlkcnVsZS12YWx1ZXMgLWZjYXJldCBpbnB1dC55IiAiaW5wdXQuYXQ6Mjk3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0td2FybmluZ3M9bWlkcnVsZS12YWx1ZXMgLWZjYXJldCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoyOTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjk3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaW5wdXQuYXQ6Mjk3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjI5NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjI5NzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImlucHV0LmF0OjI5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoyOTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoyOTc6IGJpc29uIC0td2FybmluZ3M9bWlkcnVsZS12YWx1ZXMgLWZjYXJldCBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiaW5wdXQuYXQ6Mjk3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC0td2FybmluZ3M9bWlkcnVsZS12YWx1ZXMgLWZjYXJldCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueToxMS4xMC0zMjogd2FybmluZzogdW5zZXQgdmFsdWU6IFwkXCQKKyBhOiBJTlQgfCBJTlQgeyB9IElOVCB7IH0gSU5UIHsgfTsKKyAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgoraW5wdXQueToxMS4xMC0xMjogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDEKKyBhOiBJTlQgfCBJTlQgeyB9IElOVCB7IH0gSU5UIHsgfTsKKyAgICAgICAgICBeXl4KK2lucHV0Lnk6MTEuMTgtMjA6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQzCisgYTogSU5UIHwgSU5UIHsgfSBJTlQgeyB9IElOVCB7IH07CisgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTEuMjYtMjg6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQ1CisgYTogSU5UIHwgSU5UIHsgfSBJTlQgeyB9IElOVCB7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxMi45OiB3YXJuaW5nOiBlbXB0eSBydWxlIGZvciB0eXBlZCBub250ZXJtaW5hbCwgYW5kIG5vIGFjdGlvbgorIGI6IElOVCB8IC8qIGVtcHR5ICovOworICAgICAgICAgXgoraW5wdXQueToxMy4xNC0yMDogd2FybmluZzogdW5zZXQgdmFsdWU6IFwkXCQKKyBjOiBJTlQgfCBJTlQgeyBcJDE7IH0gSU5UIHsgXCQ8aW50ZWdlcj4yOyB9IElOVCB7IFwkPGludGVnZXI+NDsgfTsKKyAgICAgICAgICAgICAgXl5eXl5eXgoraW5wdXQueToxMy4yNi00MTogd2FybmluZzogdW5zZXQgdmFsdWU6IFwkXCQKKyBjOiBJTlQgfCBJTlQgeyBcJDE7IH0gSU5UIHsgXCQ8aW50ZWdlcj4yOyB9IElOVCB7IFwkPGludGVnZXI+NDsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXgoraW5wdXQueToxMy4xMC02Mjogd2FybmluZzogdW5zZXQgdmFsdWU6IFwkXCQKKyBjOiBJTlQgfCBJTlQgeyBcJDE7IH0gSU5UIHsgXCQ8aW50ZWdlcj4yOyB9IElOVCB7IFwkPGludGVnZXI+NDsgfTsKKyAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgoraW5wdXQueToxMy4yMi0yNDogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDMKKyBjOiBJTlQgfCBJTlQgeyBcJDE7IH0gSU5UIHsgXCQ8aW50ZWdlcj4yOyB9IElOVCB7IFwkPGludGVnZXI+NDsgfTsKKyAgICAgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTMuNDMtNDU6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQ1CisgYzogSU5UIHwgSU5UIHsgXCQxOyB9IElOVCB7IFwkPGludGVnZXI+MjsgfSBJTlQgeyBcJDxpbnRlZ2VyPjQ7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjE0LjE0LTE2OiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogXCRcJAorIGQ6IElOVCB8IElOVCB7IH0gSU5UIHsgXCQxOyB9IElOVCB7IFwkPGludGVnZXI+MjsgfTsKKyAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjE0LjEwLTQ5OiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogXCRcJAorIGQ6IElOVCB8IElOVCB7IH0gSU5UIHsgXCQxOyB9IElOVCB7IFwkPGludGVnZXI+MjsgfTsKKyAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjE0LjE4LTIwOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkMworIGQ6IElOVCB8IElOVCB7IH0gSU5UIHsgXCQxOyB9IElOVCB7IFwkPGludGVnZXI+MjsgfTsKKyAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxNC4zMC0zMjogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDUKKyBkOiBJTlQgfCBJTlQgeyB9IElOVCB7IFwkMTsgfSBJTlQgeyBcJDxpbnRlZ2VyPjI7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTUuMTAtMzc6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiBcJFwkCisgZTogSU5UIHwgSU5UIHsgfSBJTlQgeyAgfSBJTlQgeyBcJDE7IH07CisgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgoraW5wdXQueToxNS4xOC0yMDogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDMKKyBlOiBJTlQgfCBJTlQgeyB9IElOVCB7ICB9IElOVCB7IFwkMTsgfTsKKyAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxNS4yNy0yOTogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDUKKyBlOiBJTlQgfCBJTlQgeyB9IElOVCB7ICB9IElOVCB7IFwkMTsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxNy4xMC01ODogd2FybmluZzogdW5zZXQgdmFsdWU6IFwkXCQKKyBnOiBJTlQgfCBJTlQgeyBcJDxpbnRlZ2VyPlwkOyB9IElOVCB7IFwkPGludGVnZXI+XCQ7IH0gSU5UIHsgfTsKKyAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjE3LjEwLTEyOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkMQorIGc6IElOVCB8IElOVCB7IFwkPGludGVnZXI+XCQ7IH0gSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSBJTlQgeyB9OworICAgICAgICAgIF5eXgoraW5wdXQueToxNy4xNC0yOTogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDIKKyBnOiBJTlQgfCBJTlQgeyBcJDxpbnRlZ2VyPlwkOyB9IElOVCB7IFwkPGludGVnZXI+XCQ7IH0gSU5UIHsgfTsKKyAgICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXgoraW5wdXQueToxNy4zMS0zMzogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDMKKyBnOiBJTlQgfCBJTlQgeyBcJDxpbnRlZ2VyPlwkOyB9IElOVCB7IFwkPGludGVnZXI+XCQ7IH0gSU5UIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTcuMzUtNTA6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQ0CisgZzogSU5UIHwgSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSBJTlQgeyBcJDxpbnRlZ2VyPlwkOyB9IElOVCB7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTcuNTItNTQ6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQ1CisgZzogSU5UIHwgSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSBJTlQgeyBcJDxpbnRlZ2VyPlwkOyB9IElOVCB7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjE4LjEwLTcyOiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogXCRcJAorIGg6IElOVCB8IElOVCB7IFwkPGludGVnZXI+XCQ7IH0gSU5UIHsgXCQ8aW50ZWdlcj5cJCA9IFwkPGludGVnZXI+MjsgfSBJTlQgeyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgoraW5wdXQueToxOC4xMC0xMjogd2FybmluZzogdW51c2VkIHZhbHVlOiBcJDEKKyBoOiBJTlQgfCBJTlQgeyBcJDxpbnRlZ2VyPlwkOyB9IElOVCB7IFwkPGludGVnZXI+XCQgPSBcJDxpbnRlZ2VyPjI7IH0gSU5UIHsgfTsKKyAgICAgICAgICBeXl4KK2lucHV0Lnk6MTguMzEtMzM6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQzCisgaDogSU5UIHwgSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSBJTlQgeyBcJDxpbnRlZ2VyPlwkID0gXCQ8aW50ZWdlcj4yOyB9IElOVCB7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjE4LjM1LTY0OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkNAorIGg6IElOVCB8IElOVCB7IFwkPGludGVnZXI+XCQ7IH0gSU5UIHsgXCQ8aW50ZWdlcj5cJCA9IFwkPGludGVnZXI+MjsgfSBJTlQgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTguNjYtNjg6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQ1CisgaDogSU5UIHwgSU5UIHsgXCQ8aW50ZWdlcj5cJDsgfSBJTlQgeyBcJDxpbnRlZ2VyPlwkID0gXCQ8aW50ZWdlcj4yOyB9IElOVCB7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MjAuMTgtMzc6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQzCisgajogSU5UIHwgSU5UIElOVCB7IFwkPGludGVnZXI+XCQgPSAxOyB9IHsgXCRcJCA9IFwkMSArIFwkMjsgfTsKKyAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjIxLjEwLTY4OiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogXCRcJAorIGs6IElOVCB8IElOVCBJTlQgeyBcJDxpbnRlZ2VyPlwkOyB9IHsgXCQ8aW50ZWdlcj5cJCA9IFwkPGludGVnZXI+MzsgfSB7IH07CisgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MjEuMTAtMTI6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQxCisgazogSU5UIHwgSU5UIElOVCB7IFwkPGludGVnZXI+XCQ7IH0geyBcJDxpbnRlZ2VyPlwkID0gXCQ8aW50ZWdlcj4zOyB9IHsgfTsKKyAgICAgICAgICBeXl4KK2lucHV0Lnk6MjEuMTQtMTY6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQyCisgazogSU5UIHwgSU5UIElOVCB7IFwkPGludGVnZXI+XCQ7IH0geyBcJDxpbnRlZ2VyPlwkID0gXCQ8aW50ZWdlcj4zOyB9IHsgfTsKKyAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjIxLjM1LTY0OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkNAorIGs6IElOVCB8IElOVCBJTlQgeyBcJDxpbnRlZ2VyPlwkOyB9IHsgXCQ8aW50ZWdlcj5cJCA9IFwkPGludGVnZXI+MzsgfSB7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworIyBEZWZpbmluZyBQT1NJWExZX0NPUlJFQ1QgY2F1c2VzIGJpc29uIHRvIGNvbXBsYWluIGlmIG9wdGlvbnMgYXJlCisjIGFkZGVkIGFmdGVyIHRoZSBncmFtbWFyIGZpbGUgbmFtZSwgc28gc2tpcCB0aGVzZSBjaGVja3MgaW4gdGhhdAorIyBjYXNlLgoraWYgdGVzdCAiJFBPU0lYTFlfQ09SUkVDVF9JU19FWFBPUlRFRCIgPSBmYWxzZTsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKworICAjIFRvIGF2b2lkIGV4cGFuZGluZyBpdCByZXBlYXRlZGx5LCBzdG9yZSBzcGVjaWZpZWQgc3Rkb3V0LgorICA6ID5leHBvdXQKKworICAjIFJ1biB3aXRoIC1XZXJyb3IuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoyOTc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS13YXJuaW5ncz1taWRydWxlLXZhbHVlcyAtZmNhcmV0IGlucHV0LnkgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0td2FybmluZ3M9bWlkcnVsZS12YWx1ZXMgLWZjYXJldCBpbnB1dC55IC1XZXJyb3IiICJpbnB1dC5hdDoyOTciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXdhcm5pbmdzPW1pZHJ1bGUtdmFsdWVzIC1mY2FyZXQgaW5wdXQueSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoyOTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBCdWlsZCBleHBlY3RlZCBzdGRlcnIgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgIndhcm5pbmdzIGJlaW5nCisgICMgdHJlYXRlZCBhcyBlcnJvcnMiIG1lc3NhZ2UuCisgIGNhdCA+YXQtYmlzb24tY2hlY2std2FybmluZ3MgPDwnX0FURU9GJworaW5wdXQueToxMS4xMC0zMjogd2FybmluZzogdW5zZXQgdmFsdWU6ICQkCisgYTogSU5UIHwgSU5UIHsgfSBJTlQgeyB9IElOVCB7IH07CisgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTEuMTAtMTI6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDEKKyBhOiBJTlQgfCBJTlQgeyB9IElOVCB7IH0gSU5UIHsgfTsKKyAgICAgICAgICBeXl4KK2lucHV0Lnk6MTEuMTgtMjA6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDMKKyBhOiBJTlQgfCBJTlQgeyB9IElOVCB7IH0gSU5UIHsgfTsKKyAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxMS4yNi0yODogd2FybmluZzogdW51c2VkIHZhbHVlOiAkNQorIGE6IElOVCB8IElOVCB7IH0gSU5UIHsgfSBJTlQgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTIuOTogd2FybmluZzogZW1wdHkgcnVsZSBmb3IgdHlwZWQgbm9udGVybWluYWwsIGFuZCBubyBhY3Rpb24KKyBiOiBJTlQgfCAvKiBlbXB0eSAqLzsKKyAgICAgICAgIF4KK2lucHV0Lnk6MTMuMTQtMjA6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkJAorIGM6IElOVCB8IElOVCB7ICQxOyB9IElOVCB7ICQ8aW50ZWdlcj4yOyB9IElOVCB7ICQ8aW50ZWdlcj40OyB9OworICAgICAgICAgICAgICBeXl5eXl5eCitpbnB1dC55OjEzLjI2LTQxOiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogJCQKKyBjOiBJTlQgfCBJTlQgeyAkMTsgfSBJTlQgeyAkPGludGVnZXI+MjsgfSBJTlQgeyAkPGludGVnZXI+NDsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXgoraW5wdXQueToxMy4xMC02Mjogd2FybmluZzogdW5zZXQgdmFsdWU6ICQkCisgYzogSU5UIHwgSU5UIHsgJDE7IH0gSU5UIHsgJDxpbnRlZ2VyPjI7IH0gSU5UIHsgJDxpbnRlZ2VyPjQ7IH07CisgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTMuMjItMjQ6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDMKKyBjOiBJTlQgfCBJTlQgeyAkMTsgfSBJTlQgeyAkPGludGVnZXI+MjsgfSBJTlQgeyAkPGludGVnZXI+NDsgfTsKKyAgICAgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTMuNDMtNDU6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDUKKyBjOiBJTlQgfCBJTlQgeyAkMTsgfSBJTlQgeyAkPGludGVnZXI+MjsgfSBJTlQgeyAkPGludGVnZXI+NDsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTQuMTQtMTY6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkJAorIGQ6IElOVCB8IElOVCB7IH0gSU5UIHsgJDE7IH0gSU5UIHsgJDxpbnRlZ2VyPjI7IH07CisgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxNC4xMC00OTogd2FybmluZzogdW5zZXQgdmFsdWU6ICQkCisgZDogSU5UIHwgSU5UIHsgfSBJTlQgeyAkMTsgfSBJTlQgeyAkPGludGVnZXI+MjsgfTsKKyAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjE0LjE4LTIwOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQzCisgZDogSU5UIHwgSU5UIHsgfSBJTlQgeyAkMTsgfSBJTlQgeyAkPGludGVnZXI+MjsgfTsKKyAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxNC4zMC0zMjogd2FybmluZzogdW51c2VkIHZhbHVlOiAkNQorIGQ6IElOVCB8IElOVCB7IH0gSU5UIHsgJDE7IH0gSU5UIHsgJDxpbnRlZ2VyPjI7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTUuMTAtMzc6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkJAorIGU6IElOVCB8IElOVCB7IH0gSU5UIHsgIH0gSU5UIHsgJDE7IH07CisgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgoraW5wdXQueToxNS4xOC0yMDogd2FybmluZzogdW51c2VkIHZhbHVlOiAkMworIGU6IElOVCB8IElOVCB7IH0gSU5UIHsgIH0gSU5UIHsgJDE7IH07CisgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTUuMjctMjk6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDUKKyBlOiBJTlQgfCBJTlQgeyB9IElOVCB7ICB9IElOVCB7ICQxOyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjE3LjEwLTU4OiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogJCQKKyBnOiBJTlQgfCBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTcuMTAtMTI6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDEKKyBnOiBJTlQgfCBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyB9OworICAgICAgICAgIF5eXgoraW5wdXQueToxNy4xNC0yOTogd2FybmluZzogdW51c2VkIHZhbHVlOiAkMgorIGc6IElOVCB8IElOVCB7ICQ8aW50ZWdlcj4kOyB9IElOVCB7ICQ8aW50ZWdlcj4kOyB9IElOVCB7IH07CisgICAgICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTcuMzEtMzM6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDMKKyBnOiBJTlQgfCBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxNy4zNS01MDogd2FybmluZzogdW51c2VkIHZhbHVlOiAkNAorIGc6IElOVCB8IElOVCB7ICQ8aW50ZWdlcj4kOyB9IElOVCB7ICQ8aW50ZWdlcj4kOyB9IElOVCB7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTcuNTItNTQ6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDUKKyBnOiBJTlQgfCBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXgoraW5wdXQueToxOC4xMC03Mjogd2FybmluZzogdW5zZXQgdmFsdWU6ICQkCisgaDogSU5UIHwgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgJDxpbnRlZ2VyPiQgPSAkPGludGVnZXI+MjsgfSBJTlQgeyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgoraW5wdXQueToxOC4xMC0xMjogd2FybmluZzogdW51c2VkIHZhbHVlOiAkMQorIGg6IElOVCB8IElOVCB7ICQ8aW50ZWdlcj4kOyB9IElOVCB7ICQ8aW50ZWdlcj4kID0gJDxpbnRlZ2VyPjI7IH0gSU5UIHsgfTsKKyAgICAgICAgICBeXl4KK2lucHV0Lnk6MTguMzEtMzM6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDMKKyBoOiBJTlQgfCBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyAkPGludGVnZXI+JCA9ICQ8aW50ZWdlcj4yOyB9IElOVCB7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCitpbnB1dC55OjE4LjM1LTY0OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQ0CisgaDogSU5UIHwgSU5UIHsgJDxpbnRlZ2VyPiQ7IH0gSU5UIHsgJDxpbnRlZ2VyPiQgPSAkPGludGVnZXI+MjsgfSBJTlQgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MTguNjYtNjg6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDUKKyBoOiBJTlQgfCBJTlQgeyAkPGludGVnZXI+JDsgfSBJTlQgeyAkPGludGVnZXI+JCA9ICQ8aW50ZWdlcj4yOyB9IElOVCB7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK2lucHV0Lnk6MjAuMTgtMzc6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDMKKyBqOiBJTlQgfCBJTlQgSU5UIHsgJDxpbnRlZ2VyPiQgPSAxOyB9IHsgJCQgPSAkMSArICQyOyB9OworICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl4KK2lucHV0Lnk6MjEuMTAtNjg6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkJAorIGs6IElOVCB8IElOVCBJTlQgeyAkPGludGVnZXI+JDsgfSB7ICQ8aW50ZWdlcj4kID0gJDxpbnRlZ2VyPjM7IH0geyB9OworICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjIxLjEwLTEyOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQxCisgazogSU5UIHwgSU5UIElOVCB7ICQ8aW50ZWdlcj4kOyB9IHsgJDxpbnRlZ2VyPiQgPSAkPGludGVnZXI+MzsgfSB7IH07CisgICAgICAgICAgXl5eCitpbnB1dC55OjIxLjE0LTE2OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQyCisgazogSU5UIHwgSU5UIElOVCB7ICQ8aW50ZWdlcj4kOyB9IHsgJDxpbnRlZ2VyPiQgPSAkPGludGVnZXI+MzsgfSB7IH07CisgICAgICAgICAgICAgIF5eXgoraW5wdXQueToyMS4zNS02NDogd2FybmluZzogdW51c2VkIHZhbHVlOiAkNAorIGs6IElOVCB8IElOVCBJTlQgeyAkPGludGVnZXI+JDsgfSB7ICQ8aW50ZWdlcj4kID0gJDxpbnRlZ2VyPjM7IH0geyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK19BVEVPRgorCisgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PWBzZWQgLW4gXAorICAgICcvOiB3YXJuaW5nOiAvez07cTt9JyBhdC1iaXNvbi1jaGVjay13YXJuaW5nc2AKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2ZpcnN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19maXJzdF90bXA9YHNlZCAtbiBcCisgICAgJy9jb25mbGljdHM6IFswLTldLipyZWR1Y2UkL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdF90bXA6PTF9CisgIGlmIHRlc3QgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcCAtbHQgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0OyB0aGVuCisgICAgYXRfYmlzb25fY2hlY2tfZmlyc3Q9JGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcAorICBmaQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdCAtZ3QgMTsgdGhlbgorICAgIHNlZCAtbiAiMSxgZXhwciAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLSAxYCJwIFwKKyAgICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4gZXhwZXJyCisgIGZpCisgIGVjaG8gJ2Jpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycycgPj4gZXhwZXJyCisKKyAgIyBGaW5pc2ggYnVpbGRpbmcgZXhwZWN0ZWQgc3RkZXJyIGFuZCBjaGVjay4gIFVubGlrZSB3YXJuaW5ncywKKyAgIyBjb21wbGFpbnRzIGNhdXNlIGJpc29uIHRvIGV4aXQgZWFybHkuICBUaHVzLCB3aXRoIC1XZXJyb3IsIGJpc29uCisgICMgZG9lcyBub3QgbmVjZXNzYXJpbHkgcmVwb3J0IGFsbCB3YXJuaW5ncyB0aGF0IGl0IGRvZXMgd2l0aG91dAorICAjIC1XZXJyb3IsIGJ1dCBpdCBhdCBsZWFzdCByZXBvcnRzIG9uZS4KKyAgYXRfYmlzb25fY2hlY2tfbGFzdD1gc2VkIC1uICckPScgc3RkZXJyYAorICA6ICR7YXRfYmlzb25fY2hlY2tfbGFzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfbGFzdD1gZXhwciAkYXRfYmlzb25fY2hlY2tfbGFzdCAtIDFgCisgIHNlZCAtbiAiJGF0X2Jpc29uX2NoZWNrX2ZpcnN0LCRhdF9iaXNvbl9jaGVja19sYXN0InAgXAorICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4+IGV4cGVycgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjk3OiBzZWQgJ3MsLiovXFwoYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzXFwpXCQsXFwxLCcgXFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJpbnB1dC5hdDoyOTciCisoICRhdF9jaGVja190cmFjZTsgc2VkICdzLC4qL1woYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzXCkkLFwxLCcgXAorICAgICAgICAgICAgICBzdGRlcnIgMT4mMgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorJGF0X2RpZmYgZXhwZXJyICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoyOTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBOb3cgY2hlY2sgLS13YXJuaW5ncz1lcnJvci4KKyAgY3Agc3RkZXJyIGV4cGVycgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjk3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0td2FybmluZ3M9bWlkcnVsZS12YWx1ZXMgLWZjYXJldCBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXdhcm5pbmdzPW1pZHJ1bGUtdmFsdWVzIC1mY2FyZXQgaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yIiAiaW5wdXQuYXQ6Mjk3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS13YXJuaW5ncz1taWRydWxlLXZhbHVlcyAtZmNhcmV0IGlucHV0LnkgLS13YXJuaW5ncz1lcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorJGF0X2RpZmYgZXhwZXJyICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoyOTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBOb3cgY2hlY2sgLVdub25lIGFuZCAtLXdhcm5pbmdzPW5vbmUgYnkgbWFraW5nIHN1cmUgdGhhdAorICAjIC1XZXJyb3IgZG9lc24ndCBjaGFuZ2UgdGhlIGV4aXQgc3RhdHVzIHdoZW4gLVdub25lIG9yCisgICMgLS13YXJuaW5ncz1ub25lIGlzIHNwZWNpZmllZC4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjI5NzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXdhcm5pbmdzPW1pZHJ1bGUtdmFsdWVzIC1mY2FyZXQgaW5wdXQueSAtV25vbmUgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0td2FybmluZ3M9bWlkcnVsZS12YWx1ZXMgLWZjYXJldCBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIiAiaW5wdXQuYXQ6Mjk3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS13YXJuaW5ncz1taWRydWxlLXZhbHVlcyAtZmNhcmV0IGlucHV0LnkgLVdub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Mjk3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0td2FybmluZ3M9bWlkcnVsZS12YWx1ZXMgLWZjYXJldCBpbnB1dC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS13YXJuaW5ncz1taWRydWxlLXZhbHVlcyAtZmNhcmV0IGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiICJpbnB1dC5hdDoyOTciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXdhcm5pbmdzPW1pZHJ1bGUtdmFsdWVzIC1mY2FyZXQgaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoyOTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQorCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzYKKyNBVF9TVEFSVF83CithdF9mbl9ncm91cF9iYW5uZXIgNyAnaW5wdXQuYXQ6MzA1JyBcCisgICJEZWZhdWx0ICVwcmludGVyIGFuZCAlZGVzdHJ1Y3RvciByZWRlY2xhcmVkIiAiICAgICIgMQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjcuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWRlc3RydWN0b3IgeyBkZXN0cm95ICgkJCk7IH0gPCo+IDwqPgorJXByaW50ZXIgeyBwcmludCAoJCQpOyB9IDwqPiA8Kj4KKworJWRlc3RydWN0b3IgeyBkZXN0cm95ICgkJCk7IH0gPCo+CislcHJpbnRlciB7IHByaW50ICgkJCk7IH0gPCo+CisKKyVkZXN0cnVjdG9yIHsgZGVzdHJveSAoJCQpOyB9IDw+IDw+CislcHJpbnRlciB7IHByaW50ICgkJCk7IH0gPD4gPD4KKworJWRlc3RydWN0b3IgeyBkZXN0cm95ICgkJCk7IH0gPD4KKyVwcmludGVyIHsgcHJpbnQgKCQkKTsgfSA8PgorCislJQorCitzdGFydDogOworCislZGVzdHJ1Y3RvciB7IGRlc3Ryb3kgKCQkKTsgfSA8Kj47CislcHJpbnRlciB7IHByaW50ICgkJCk7IH0gPCo+OworCislZGVzdHJ1Y3RvciB7IGRlc3Ryb3kgKCQkKTsgfSA8PjsKKyVwcmludGVyIHsgcHJpbnQgKCQkKTsgfSA8PjsKK19BVEVPRgorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjMzMTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSIgImlucHV0LmF0OjMzMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OjEuMTMtMjk6IGVycm9yOiByZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlZGVzdHJ1Y3RvcgoraW5wdXQueToxLjEzLTI5OiAgICAgcHJldmlvdXMgZGVjbGFyYXRpb24KK2lucHV0Lnk6Mi4xMC0yNDogZXJyb3I6IHJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICVwcmludGVyCitpbnB1dC55OjIuMTAtMjQ6ICAgICBwcmV2aW91cyBkZWNsYXJhdGlvbgoraW5wdXQueTo0LjEzLTI5OiBlcnJvcjogcmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdnZWQgJWRlc3RydWN0b3IKK2lucHV0Lnk6MS4xMy0yOTogICAgIHByZXZpb3VzIGRlY2xhcmF0aW9uCitpbnB1dC55OjUuMTAtMjQ6IGVycm9yOiByZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2dlZCAlcHJpbnRlcgoraW5wdXQueToyLjEwLTI0OiAgICAgcHJldmlvdXMgZGVjbGFyYXRpb24KK2lucHV0Lnk6Ny4xMy0yOTogZXJyb3I6IHJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnbGVzcyAlZGVzdHJ1Y3RvcgoraW5wdXQueTo3LjEzLTI5OiAgICAgcHJldmlvdXMgZGVjbGFyYXRpb24KK2lucHV0Lnk6OC4xMC0yNDogZXJyb3I6IHJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnbGVzcyAlcHJpbnRlcgoraW5wdXQueTo4LjEwLTI0OiAgICAgcHJldmlvdXMgZGVjbGFyYXRpb24KK2lucHV0Lnk6MTAuMTMtMjk6IGVycm9yOiByZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJWRlc3RydWN0b3IKK2lucHV0Lnk6Ny4xMy0yOTogICAgICBwcmV2aW91cyBkZWNsYXJhdGlvbgoraW5wdXQueToxMS4xMC0yNDogZXJyb3I6IHJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnbGVzcyAlcHJpbnRlcgoraW5wdXQueTo4LjEwLTI0OiAgICAgIHByZXZpb3VzIGRlY2xhcmF0aW9uCitpbnB1dC55OjE3LjEzLTI5OiBlcnJvcjogcmVkZWNsYXJhdGlvbiBmb3IgZGVmYXVsdCB0YWdnZWQgJWRlc3RydWN0b3IKK2lucHV0Lnk6NC4xMy0yOTogICAgICBwcmV2aW91cyBkZWNsYXJhdGlvbgoraW5wdXQueToxOC4xMC0yNDogZXJyb3I6IHJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnZ2VkICVwcmludGVyCitpbnB1dC55OjUuMTAtMjQ6ICAgICAgcHJldmlvdXMgZGVjbGFyYXRpb24KK2lucHV0Lnk6MjAuMTMtMjk6IGVycm9yOiByZWRlY2xhcmF0aW9uIGZvciBkZWZhdWx0IHRhZ2xlc3MgJWRlc3RydWN0b3IKK2lucHV0Lnk6MTAuMTMtMjk6ICAgICBwcmV2aW91cyBkZWNsYXJhdGlvbgoraW5wdXQueToyMS4xMC0yNDogZXJyb3I6IHJlZGVjbGFyYXRpb24gZm9yIGRlZmF1bHQgdGFnbGVzcyAlcHJpbnRlcgoraW5wdXQueToxMS4xMC0yNDogICAgIHByZXZpb3VzIGRlY2xhcmF0aW9uCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDozMzEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF83CisjQVRfU1RBUlRfOAorYXRfZm5fZ3JvdXBfYmFubmVyIDggJ2lucHV0LmF0OjM2NScgXAorICAiUGVyLXR5cGUgJXByaW50ZXIgYW5kICVkZXN0cnVjdG9yIHJlZGVjbGFyZWQiICIgICAiIDEKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI4LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVkZXN0cnVjdG9yIHsgZGVzdHJveSAoJCQpOyB9IDxmaWVsZDE+IDxmaWVsZDI+CislcHJpbnRlciB7IHByaW50ICgkJCk7IH0gPGZpZWxkMT4gPGZpZWxkMj4KKworJWRlc3RydWN0b3IgeyBkZXN0cm95ICgkJCk7IH0gPGZpZWxkMT4gPGZpZWxkMT4KKyVwcmludGVyIHsgcHJpbnQgKCQkKTsgfSA8ZmllbGQyPiA8ZmllbGQyPgorCislJQorCitzdGFydDogOworCislZGVzdHJ1Y3RvciB7IGRlc3Ryb3kgKCQkKTsgfSA8ZmllbGQyPiA8ZmllbGQxPjsKKyVwcmludGVyIHsgcHJpbnQgKCQkKTsgfSA8ZmllbGQyPiA8ZmllbGQxPjsKK19BVEVPRgorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjM4MjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSIgImlucHV0LmF0OjM4MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OjQuMTMtMjk6IGVycm9yOiAlZGVzdHJ1Y3RvciByZWRlY2xhcmF0aW9uIGZvciA8ZmllbGQxPgoraW5wdXQueToxLjEzLTI5OiAgICAgcHJldmlvdXMgZGVjbGFyYXRpb24KK2lucHV0Lnk6NC4xMy0yOTogZXJyb3I6ICVkZXN0cnVjdG9yIHJlZGVjbGFyYXRpb24gZm9yIDxmaWVsZDE+CitpbnB1dC55OjQuMTMtMjk6ICAgICBwcmV2aW91cyBkZWNsYXJhdGlvbgoraW5wdXQueTo1LjEwLTI0OiBlcnJvcjogJXByaW50ZXIgcmVkZWNsYXJhdGlvbiBmb3IgPGZpZWxkMj4KK2lucHV0Lnk6Mi4xMC0yNDogICAgIHByZXZpb3VzIGRlY2xhcmF0aW9uCitpbnB1dC55OjUuMTAtMjQ6IGVycm9yOiAlcHJpbnRlciByZWRlY2xhcmF0aW9uIGZvciA8ZmllbGQyPgoraW5wdXQueTo1LjEwLTI0OiAgICAgcHJldmlvdXMgZGVjbGFyYXRpb24KK2lucHV0Lnk6MTEuMTMtMjk6IGVycm9yOiAlZGVzdHJ1Y3RvciByZWRlY2xhcmF0aW9uIGZvciA8ZmllbGQxPgoraW5wdXQueTo0LjEzLTI5OiAgICAgIHByZXZpb3VzIGRlY2xhcmF0aW9uCitpbnB1dC55OjExLjEzLTI5OiBlcnJvcjogJWRlc3RydWN0b3IgcmVkZWNsYXJhdGlvbiBmb3IgPGZpZWxkMj4KK2lucHV0Lnk6MS4xMy0yOTogICAgICBwcmV2aW91cyBkZWNsYXJhdGlvbgoraW5wdXQueToxMi4xMC0yNDogZXJyb3I6ICVwcmludGVyIHJlZGVjbGFyYXRpb24gZm9yIDxmaWVsZDE+CitpbnB1dC55OjIuMTAtMjQ6ICAgICAgcHJldmlvdXMgZGVjbGFyYXRpb24KK2lucHV0Lnk6MTIuMTAtMjQ6IGVycm9yOiAlcHJpbnRlciByZWRlY2xhcmF0aW9uIGZvciA8ZmllbGQyPgoraW5wdXQueTo1LjEwLTI0OiAgICAgIHByZXZpb3VzIGRlY2xhcmF0aW9uCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDozODIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF84CisjQVRfU1RBUlRfOQorYXRfZm5fZ3JvdXBfYmFubmVyIDkgJ2lucHV0LmF0OjQwOCcgXAorICAiVW51c2VkIHZhbHVlcyB3aXRoIGRlZmF1bHQgJWRlc3RydWN0b3IiICIgICAgICAgICAiIDEKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI5LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVkZXN0cnVjdG9yIHsgZGVzdHJveSAoJCQpOyB9IDw+CisldHlwZSA8dGFnPiB0YWdnZWQKKworJSUKKworc3RhcnQ6IGVuZCBlbmQgdGFnZ2VkIHRhZ2dlZCB7ICQ8dGFnPjE7ICQzOyB9IDsKK2VuZDogeyB9IDsKK3RhZ2dlZDogeyB9IDsKK19BVEVPRgorCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NDIxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImlucHV0LmF0OjQyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo0MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo0MjE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgaW5wdXQueSIgImlucHV0LmF0OjQyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo0MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NDIxOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaW5wdXQuYXQ6NDIxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjQyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjQyMTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImlucHV0LmF0OjQyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo0MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo0MjE6IGJpc29uIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJpbnB1dC5hdDo0MjEiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6Ni44LTQ1OiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogXCRcJAoraW5wdXQueTo2LjEyLTE0OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkMgoraW5wdXQueTo3LjYtODogd2FybmluZzogdW5zZXQgdmFsdWU6IFwkXCQKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjQyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyMgRGVmaW5pbmcgUE9TSVhMWV9DT1JSRUNUIGNhdXNlcyBiaXNvbiB0byBjb21wbGFpbiBpZiBvcHRpb25zIGFyZQorIyBhZGRlZCBhZnRlciB0aGUgZ3JhbW1hciBmaWxlIG5hbWUsIHNvIHNraXAgdGhlc2UgY2hlY2tzIGluIHRoYXQKKyMgY2FzZS4KK2lmIHRlc3QgIiRQT1NJWExZX0NPUlJFQ1RfSVNfRVhQT1JURUQiID0gZmFsc2U7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisKKyAgIyBUbyBhdm9pZCBleHBhbmRpbmcgaXQgcmVwZWF0ZWRseSwgc3RvcmUgc3BlY2lmaWVkIHN0ZG91dC4KKyAgOiA+ZXhwb3V0CisKKyAgIyBSdW4gd2l0aCAtV2Vycm9yLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NDIxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLVdlcnJvciIgImlucHV0LmF0OjQyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NDIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgQnVpbGQgZXhwZWN0ZWQgc3RkZXJyIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlICJ3YXJuaW5ncyBiZWluZworICAjIHRyZWF0ZWQgYXMgZXJyb3JzIiBtZXNzYWdlLgorICBjYXQgPmF0LWJpc29uLWNoZWNrLXdhcm5pbmdzIDw8J19BVEVPRicKK2lucHV0Lnk6Ni44LTQ1OiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogJCQKK2lucHV0Lnk6Ni4xMi0xNDogd2FybmluZzogdW51c2VkIHZhbHVlOiAkMgoraW5wdXQueTo3LjYtODogd2FybmluZzogdW5zZXQgdmFsdWU6ICQkCitfQVRFT0YKKworICBhdF9iaXNvbl9jaGVja19maXJzdD1gc2VkIC1uIFwKKyAgICAnLzogd2FybmluZzogL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wPWBzZWQgLW4gXAorICAgICcvY29uZmxpY3RzOiBbMC05XS4qcmVkdWNlJC97PTtxO30nIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzYAorICA6ICR7YXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wOj0xfQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdF90bXAgLWx0ICRhdF9iaXNvbl9jaGVja19maXJzdDsgdGhlbgorICAgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PSRhdF9iaXNvbl9jaGVja19maXJzdF90bXAKKyAgZmkKKyAgaWYgdGVzdCAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLWd0IDE7IHRoZW4KKyAgICBzZWQgLW4gIjEsYGV4cHIgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0IC0gMWAicCBcCisgICAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+IGV4cGVycgorICBmaQorICBlY2hvICdiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMnID4+IGV4cGVycgorCisgICMgRmluaXNoIGJ1aWxkaW5nIGV4cGVjdGVkIHN0ZGVyciBhbmQgY2hlY2suICBVbmxpa2Ugd2FybmluZ3MsCisgICMgY29tcGxhaW50cyBjYXVzZSBiaXNvbiB0byBleGl0IGVhcmx5LiAgVGh1cywgd2l0aCAtV2Vycm9yLCBiaXNvbgorICAjIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHJlcG9ydCBhbGwgd2FybmluZ3MgdGhhdCBpdCBkb2VzIHdpdGhvdXQKKyAgIyAtV2Vycm9yLCBidXQgaXQgYXQgbGVhc3QgcmVwb3J0cyBvbmUuCisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YHNlZCAtbiAnJD0nIHN0ZGVycmAKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2xhc3Q6PTF9CisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YGV4cHIgJGF0X2Jpc29uX2NoZWNrX2xhc3QgLSAxYAorICBzZWQgLW4gIiRhdF9iaXNvbl9jaGVja19maXJzdCwkYXRfYmlzb25fY2hlY2tfbGFzdCJwIFwKKyAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+PiBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjQyMTogc2VkICdzLC4qL1xcKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1xcKVwkLFxcMSwnIFxcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiaW5wdXQuYXQ6NDIxIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAncywuKi9cKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1wpJCxcMSwnIFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NDIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC0td2FybmluZ3M9ZXJyb3IuCisgIGNwIHN0ZGVyciBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjQyMTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IiICJpbnB1dC5hdDo0MjEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NDIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC1Xbm9uZSBhbmQgLS13YXJuaW5ncz1ub25lIGJ5IG1ha2luZyBzdXJlIHRoYXQKKyAgIyAtV2Vycm9yIGRvZXNuJ3QgY2hhbmdlIHRoZSBleGl0IHN0YXR1cyB3aGVuIC1Xbm9uZSBvcgorICAjIC0td2FybmluZ3M9bm9uZSBpcyBzcGVjaWZpZWQuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo0MjE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtV25vbmUgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLVdub25lIC1XZXJyb3IiICJpbnB1dC5hdDo0MjEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjQyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjQyMTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvciIgImlucHV0LmF0OjQyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NDIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVkZXN0cnVjdG9yIHsgZGVzdHJveSAoJCQpOyB9IDwqPgorJXR5cGUgPHRhZz4gdGFnZ2VkCisKKyUlCisKK3N0YXJ0OiBlbmQgZW5kIHRhZ2dlZCB0YWdnZWQgeyAkPHRhZz4xOyAkMzsgfSA7CitlbmQ6IHsgfSA7Cit0YWdnZWQ6IHsgfSA7CitfQVRFT0YKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjQzODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJpbnB1dC5hdDo0MzgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NDM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NDM4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIGlucHV0LnkiICJpbnB1dC5hdDo0MzgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NDM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjQzODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImlucHV0LmF0OjQzOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo0MzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo0Mzg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJpbnB1dC5hdDo0MzgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NDM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NDM4OiBiaXNvbiBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiaW5wdXQuYXQ6NDM4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OjYuMjMtMjg6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQ0CitpbnB1dC55OjguOS0xMTogd2FybmluZzogdW5zZXQgdmFsdWU6IFwkXCQKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjQzOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyMgRGVmaW5pbmcgUE9TSVhMWV9DT1JSRUNUIGNhdXNlcyBiaXNvbiB0byBjb21wbGFpbiBpZiBvcHRpb25zIGFyZQorIyBhZGRlZCBhZnRlciB0aGUgZ3JhbW1hciBmaWxlIG5hbWUsIHNvIHNraXAgdGhlc2UgY2hlY2tzIGluIHRoYXQKKyMgY2FzZS4KK2lmIHRlc3QgIiRQT1NJWExZX0NPUlJFQ1RfSVNfRVhQT1JURUQiID0gZmFsc2U7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisKKyAgIyBUbyBhdm9pZCBleHBhbmRpbmcgaXQgcmVwZWF0ZWRseSwgc3RvcmUgc3BlY2lmaWVkIHN0ZG91dC4KKyAgOiA+ZXhwb3V0CisKKyAgIyBSdW4gd2l0aCAtV2Vycm9yLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NDM4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLVdlcnJvciIgImlucHV0LmF0OjQzOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NDM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgQnVpbGQgZXhwZWN0ZWQgc3RkZXJyIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlICJ3YXJuaW5ncyBiZWluZworICAjIHRyZWF0ZWQgYXMgZXJyb3JzIiBtZXNzYWdlLgorICBjYXQgPmF0LWJpc29uLWNoZWNrLXdhcm5pbmdzIDw8J19BVEVPRicKK2lucHV0Lnk6Ni4yMy0yODogd2FybmluZzogdW51c2VkIHZhbHVlOiAkNAoraW5wdXQueTo4LjktMTE6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkJAorX0FURU9GCisKKyAgYXRfYmlzb25fY2hlY2tfZmlyc3Q9YHNlZCAtbiBcCisgICAgJy86IHdhcm5pbmc6IC97PTtxO30nIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzYAorICA6ICR7YXRfYmlzb25fY2hlY2tfZmlyc3Q6PTF9CisgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcD1gc2VkIC1uIFwKKyAgICAnL2NvbmZsaWN0czogWzAtOV0uKnJlZHVjZSQvez07cTt9JyBhdC1iaXNvbi1jaGVjay13YXJuaW5nc2AKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcDo9MX0KKyAgaWYgdGVzdCAkYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wIC1sdCAkYXRfYmlzb25fY2hlY2tfZmlyc3Q7IHRoZW4KKyAgICBhdF9iaXNvbl9jaGVja19maXJzdD0kYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wCisgIGZpCisgIGlmIHRlc3QgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0IC1ndCAxOyB0aGVuCisgICAgc2VkIC1uICIxLGBleHByICRhdF9iaXNvbl9jaGVja19maXJzdCAtIDFgInAgXAorICAgICAgYXQtYmlzb24tY2hlY2std2FybmluZ3MgPiBleHBlcnIKKyAgZmkKKyAgZWNobyAnYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzJyA+PiBleHBlcnIKKworICAjIEZpbmlzaCBidWlsZGluZyBleHBlY3RlZCBzdGRlcnIgYW5kIGNoZWNrLiAgVW5saWtlIHdhcm5pbmdzLAorICAjIGNvbXBsYWludHMgY2F1c2UgYmlzb24gdG8gZXhpdCBlYXJseS4gIFRodXMsIHdpdGggLVdlcnJvciwgYmlzb24KKyAgIyBkb2VzIG5vdCBuZWNlc3NhcmlseSByZXBvcnQgYWxsIHdhcm5pbmdzIHRoYXQgaXQgZG9lcyB3aXRob3V0CisgICMgLVdlcnJvciwgYnV0IGl0IGF0IGxlYXN0IHJlcG9ydHMgb25lLgorICBhdF9iaXNvbl9jaGVja19sYXN0PWBzZWQgLW4gJyQ9JyBzdGRlcnJgCisgIDogJHthdF9iaXNvbl9jaGVja19sYXN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19sYXN0PWBleHByICRhdF9iaXNvbl9jaGVja19sYXN0IC0gMWAKKyAgc2VkIC1uICIkYXRfYmlzb25fY2hlY2tfZmlyc3QsJGF0X2Jpc29uX2NoZWNrX2xhc3QicCBcCisgICAgYXQtYmlzb24tY2hlY2std2FybmluZ3MgPj4gZXhwZXJyCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo0Mzg6IHNlZCAncywuKi9cXChiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnNcXClcJCxcXDEsJyBcXAorICAgICAgICAgICAgICBzdGRlcnIgMT4mMiIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImlucHV0LmF0OjQzOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgJ3MsLiovXChiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnNcKSQsXDEsJyBcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCiskYXRfZGlmZiBleHBlcnIgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjQzOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIE5vdyBjaGVjayAtLXdhcm5pbmdzPWVycm9yLgorICBjcCBzdGRlcnIgZXhwZXJyCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo0Mzg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yIiAiaW5wdXQuYXQ6NDM4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCiskYXRfZGlmZiBleHBlcnIgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjQzOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIE5vdyBjaGVjayAtV25vbmUgYW5kIC0td2FybmluZ3M9bm9uZSBieSBtYWtpbmcgc3VyZSB0aGF0CisgICMgLVdlcnJvciBkb2Vzbid0IGNoYW5nZSB0aGUgZXhpdCBzdGF0dXMgd2hlbiAtV25vbmUgb3IKKyAgIyAtLXdhcm5pbmdzPW5vbmUgaXMgc3BlY2lmaWVkLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NDM4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLVdub25lIC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIiAiaW5wdXQuYXQ6NDM4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtV25vbmUgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo0MzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo0Mzg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiICJpbnB1dC5hdDo0MzgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjQzOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfOQorI0FUX1NUQVJUXzEwCithdF9mbl9ncm91cF9iYW5uZXIgMTAgJ2lucHV0LmF0OjQ1MCcgXAorICAiVW51c2VkIHZhbHVlcyB3aXRoIHBlci10eXBlICVkZXN0cnVjdG9yIiAiICAgICAgICAiIDEKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxMC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislZGVzdHJ1Y3RvciB7IGRlc3Ryb3kgKCQkKTsgfSA8ZmllbGQxPgorJXR5cGUgPGZpZWxkMT4gc3RhcnQgZW5kCisKKyUlCisKK3N0YXJ0OiBlbmQgZW5kIHsgJDE7IH0gOworZW5kOiB7IH0gIDsKK19BVEVPRgorCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NDYyOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImlucHV0LmF0OjQ2MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo0NjIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo0NjI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgaW5wdXQueSIgImlucHV0LmF0OjQ2MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo0NjIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NDYyOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaW5wdXQuYXQ6NDYyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjQ2MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjQ2MjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImlucHV0LmF0OjQ2MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo0NjIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo0NjI6IGJpc29uIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJpbnB1dC5hdDo0NjIiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6Ni44LTIyOiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogXCRcJAoraW5wdXQueTo2LjEyLTE0OiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6IFwkMgoraW5wdXQueTo3LjYtODogd2FybmluZzogdW5zZXQgdmFsdWU6IFwkXCQKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjQ2MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyMgRGVmaW5pbmcgUE9TSVhMWV9DT1JSRUNUIGNhdXNlcyBiaXNvbiB0byBjb21wbGFpbiBpZiBvcHRpb25zIGFyZQorIyBhZGRlZCBhZnRlciB0aGUgZ3JhbW1hciBmaWxlIG5hbWUsIHNvIHNraXAgdGhlc2UgY2hlY2tzIGluIHRoYXQKKyMgY2FzZS4KK2lmIHRlc3QgIiRQT1NJWExZX0NPUlJFQ1RfSVNfRVhQT1JURUQiID0gZmFsc2U7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisKKyAgIyBUbyBhdm9pZCBleHBhbmRpbmcgaXQgcmVwZWF0ZWRseSwgc3RvcmUgc3BlY2lmaWVkIHN0ZG91dC4KKyAgOiA+ZXhwb3V0CisKKyAgIyBSdW4gd2l0aCAtV2Vycm9yLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NDYyOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLVdlcnJvciIgImlucHV0LmF0OjQ2MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NDYyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgQnVpbGQgZXhwZWN0ZWQgc3RkZXJyIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlICJ3YXJuaW5ncyBiZWluZworICAjIHRyZWF0ZWQgYXMgZXJyb3JzIiBtZXNzYWdlLgorICBjYXQgPmF0LWJpc29uLWNoZWNrLXdhcm5pbmdzIDw8J19BVEVPRicKK2lucHV0Lnk6Ni44LTIyOiB3YXJuaW5nOiB1bnNldCB2YWx1ZTogJCQKK2lucHV0Lnk6Ni4xMi0xNDogd2FybmluZzogdW51c2VkIHZhbHVlOiAkMgoraW5wdXQueTo3LjYtODogd2FybmluZzogdW5zZXQgdmFsdWU6ICQkCitfQVRFT0YKKworICBhdF9iaXNvbl9jaGVja19maXJzdD1gc2VkIC1uIFwKKyAgICAnLzogd2FybmluZzogL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wPWBzZWQgLW4gXAorICAgICcvY29uZmxpY3RzOiBbMC05XS4qcmVkdWNlJC97PTtxO30nIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzYAorICA6ICR7YXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wOj0xfQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdF90bXAgLWx0ICRhdF9iaXNvbl9jaGVja19maXJzdDsgdGhlbgorICAgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PSRhdF9iaXNvbl9jaGVja19maXJzdF90bXAKKyAgZmkKKyAgaWYgdGVzdCAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLWd0IDE7IHRoZW4KKyAgICBzZWQgLW4gIjEsYGV4cHIgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0IC0gMWAicCBcCisgICAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+IGV4cGVycgorICBmaQorICBlY2hvICdiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMnID4+IGV4cGVycgorCisgICMgRmluaXNoIGJ1aWxkaW5nIGV4cGVjdGVkIHN0ZGVyciBhbmQgY2hlY2suICBVbmxpa2Ugd2FybmluZ3MsCisgICMgY29tcGxhaW50cyBjYXVzZSBiaXNvbiB0byBleGl0IGVhcmx5LiAgVGh1cywgd2l0aCAtV2Vycm9yLCBiaXNvbgorICAjIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHJlcG9ydCBhbGwgd2FybmluZ3MgdGhhdCBpdCBkb2VzIHdpdGhvdXQKKyAgIyAtV2Vycm9yLCBidXQgaXQgYXQgbGVhc3QgcmVwb3J0cyBvbmUuCisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YHNlZCAtbiAnJD0nIHN0ZGVycmAKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2xhc3Q6PTF9CisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YGV4cHIgJGF0X2Jpc29uX2NoZWNrX2xhc3QgLSAxYAorICBzZWQgLW4gIiRhdF9iaXNvbl9jaGVja19maXJzdCwkYXRfYmlzb25fY2hlY2tfbGFzdCJwIFwKKyAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+PiBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjQ2Mjogc2VkICdzLC4qL1xcKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1xcKVwkLFxcMSwnIFxcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiaW5wdXQuYXQ6NDYyIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAncywuKi9cKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1wpJCxcMSwnIFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NDYyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC0td2FybmluZ3M9ZXJyb3IuCisgIGNwIHN0ZGVyciBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjQ2MjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IiICJpbnB1dC5hdDo0NjIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NDYyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC1Xbm9uZSBhbmQgLS13YXJuaW5ncz1ub25lIGJ5IG1ha2luZyBzdXJlIHRoYXQKKyAgIyAtV2Vycm9yIGRvZXNuJ3QgY2hhbmdlIHRoZSBleGl0IHN0YXR1cyB3aGVuIC1Xbm9uZSBvcgorICAjIC0td2FybmluZ3M9bm9uZSBpcyBzcGVjaWZpZWQuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo0NjI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtV25vbmUgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLVdub25lIC1XZXJyb3IiICJpbnB1dC5hdDo0NjIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjQ2MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjQ2MjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvciIgImlucHV0LmF0OjQ2MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NDYyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xMAorI0FUX1NUQVJUXzExCithdF9mbl9ncm91cF9iYW5uZXIgMTEgJ2lucHV0LmF0OjQ3NScgXAorICAiSW5jb21wYXRpYmxlIEFsaWFzZXMiICIgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDEKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxMS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIGNhdCA+aW5wdXQueSA8PCdfQVRFT0YnCkBAIC0xMjIwLDg1ICs1MTU4LDYzIEBACiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImlucHV0LmF0OjE4NTogYmlzb24gaW5wdXQueSIKLWVjaG8gaW5wdXQuYXQ6MTg1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gPj4kYXRfc3RkZXJyOyBlY2hvICJpbnB1dC55OjguNy0xMTogJXR5cGUgcmVkZWNsYXJhdGlvbiBmb3IgZm9vCi1pbnB1dC55OjMuNy0xMTogZmlyc3QgZGVjbGFyYXRpb24KLWlucHV0Lnk6MTAuMTMtMTc6ICVkZXN0cnVjdG9yIHJlZGVjbGFyYXRpb24gZm9yIGZvbwotaW5wdXQueTo1LjEzLTE3OiBmaXJzdCBkZWNsYXJhdGlvbgotaW5wdXQueTo5LjEwLTE0OiAlcHJpbnRlciByZWRlY2xhcmF0aW9uIGZvciBmb28KLWlucHV0Lnk6MTAuMTMtMTc6IGZpcnN0IGRlY2xhcmF0aW9uCi1pbnB1dC55OjExLjEtNTogJWxlZnQgcmVkZWNsYXJhdGlvbiBmb3IgZm9vCi1pbnB1dC55OjYuMS01OiBmaXJzdCBkZWNsYXJhdGlvbgotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiaW5wdXQuYXQ6MTg1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KLQotCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICA2ICkgIyA2LiBpbnB1dC5hdDoxOTg6IFRvcnR1cmluZyB0aGUgU2Nhbm5lcgotICAgIGF0X3NldHVwX2xpbmU9J2lucHV0LmF0OjE5OCcKLSAgICBhdF9kZXNjPSdUb3J0dXJpbmcgdGhlIFNjYW5uZXInCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiAgNjogVG9ydHVyaW5nIHRoZSBTY2FubmVyICAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjYuIGlucHV0LmF0OjE5ODogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjQ5NDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSIgImlucHV0LmF0OjQ5NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OjguNy0xMTogZXJyb3I6ICV0eXBlIHJlZGVjbGFyYXRpb24gZm9yIGZvbworaW5wdXQueTozLjctMTE6ICAgICBwcmV2aW91cyBkZWNsYXJhdGlvbgoraW5wdXQueToxMC4xMy0xNzogZXJyb3I6ICVkZXN0cnVjdG9yIHJlZGVjbGFyYXRpb24gZm9yIGZvbworaW5wdXQueTo1LjEzLTE3OiAgICAgIHByZXZpb3VzIGRlY2xhcmF0aW9uCitpbnB1dC55OjkuMTAtMTQ6IGVycm9yOiAlcHJpbnRlciByZWRlY2xhcmF0aW9uIGZvciBmb28KK2lucHV0Lnk6NC4xMC0xNDogICAgIHByZXZpb3VzIGRlY2xhcmF0aW9uCitpbnB1dC55OjExLjEtNTogZXJyb3I6ICVsZWZ0IHJlZGVjbGFyYXRpb24gZm9yIGZvbworaW5wdXQueTo2LjEtNTogICAgICBwcmV2aW91cyBkZWNsYXJhdGlvbgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NDk0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKLWNhdCA+aW5wdXQueSA8PCdfQVRFT0YnCi1fQVRFT0YKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTEKKyNBVF9TVEFSVF8xMgorYXRfZm5fZ3JvdXBfYmFubmVyIDEyICdpbnB1dC5hdDo1MTYnIFwKKyAgIlRvcnR1cmluZyB0aGUgU2Nhbm5lciIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIiAxCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTIuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJpbnB1dC5hdDoyMDQ6IGJpc29uIGlucHV0LnkiCi1lY2hvIGlucHV0LmF0OjIwNCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gaW5wdXQueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvID4+JGF0X3N0ZGVycjsgZWNobyAiaW5wdXQueToxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgZmlsZQotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiaW5wdXQuYXQ6MjA0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKIAotJGF0X3RyYWNlb24KKzogPmlucHV0LnkKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjUyMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSIgImlucHV0LmF0OjUyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OjEuMTogZXJyb3I6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgZmlsZQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NTIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKwogCiAKIApAQCAtMTMwNiw0NCArNTIyMiwzMyBAQAoge30KIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImlucHV0LmF0OjIxMjogYmlzb24gaW5wdXQueSIKLWVjaG8gaW5wdXQuYXQ6MjEyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gPj4kYXRfc3RkZXJyOyBlY2hvICJpbnB1dC55OjEuMS0yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgey4uLn0KLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImlucHV0LmF0OjIxMjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NTI4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IiAiaW5wdXQuYXQ6NTI4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6MS4xLTI6IGVycm9yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgey4uLn0KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjUyOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogCiBjYXQgPmlucHV0LnkgPDwnX0FURU9GJwotJXsKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotICAvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KLSMgdW5kZWYgbWFsbG9jCi0jIHVuZGVmIG1lbWNtcAotIyB1bmRlZiByZWFsbG9jCi0jZW5kaWYKLSV9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCiAlewogLyogVGhpcyBpcyBzZWVuIGluIEdDQzogYSAleyBhbmQgJX0gaW4gbWlkZGxlIG9mIGEgY29tbWVudC4gKi8KQEAgLTEzNzksNiArNTI4NCw4IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAlfQogLyogJXsgYW5kICV9IGNhbiBiZSBoZXJlIHRvby4gKi8KIApAQCAtMTQwNSw3ICs1MzEyLDcgQEAKICV9CiAKICV7Ci1zdGF0aWMgdm9pZCB5eWVycm9yIChjb25zdCBjaGFyICpzKTsKK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOwogc3RhdGljIGludCB5eWxleCAodm9pZCk7CiAlfQogCkBAIC0xNDM4LDI3ICs1MzQ1LDI5IEBACiAgIHJlcy5pdmFsID0gdmFsOwogICByZXR1cm4gcmVzOwogfQotCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQogc3RhdGljIGludAogeXlsZXggKHZvaWQpCiB7Ci0gIHN0YXRpYyBjb25zdCBjaGFyICppbnB1dCA9ICJbXDFcMiRAe0BvbGluZUBfX29saW5lX19cCisgIHN0YXRpYyBjaGFyIGNvbnN0IGlucHV0W10gPSAiW1wxXDIkQHtAb2xpbmVAX19vbGluZV9fXAogI291dHB1dCAiOyAvKiAiCiAgICovCi0gIHl5bHZhbCA9IHZhbHVlX2FzX3l5c3R5cGUgKCppbnB1dCk7Ci0gIHJldHVybiAqaW5wdXQrKzsKLX0KLQotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKGNvbnN0IGNoYXIgKm1zZykKLXsKLSAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7CisgIHN0YXRpYyBzaXplX3QgdG9rbnVtOworICBhc3NlcnQgKHRva251bSA8IHNpemVvZiBpbnB1dCk7CisgIHl5bHZhbCA9IHZhbHVlX2FzX3l5c3R5cGUgKGlucHV0W3Rva251bV0pOworICByZXR1cm4gaW5wdXRbdG9rbnVtKytdOwogfQogX0FURU9GCiAKIAogCi0jIFBhY2lmeSBFbWFjcydmb250LWxvY2stbW9kZTogIgorIyBQYWNpZnkgRW1hY3MnIGZvbnQtbG9jay1tb2RlOiAiCiAKIGNhdCA+bWFpbi5jIDw8J19BVEVPRicKIHR5cGVkZWYgaW50IHZhbHVlOwpAQCAtMTQ3NCwxNjEgKzUzODMsMjI1IEBACiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImlucHV0LmF0OjM0MjogYmlzb24gLWQgLXYgLW8gaW5wdXQuYyBpbnB1dC55IgotZWNobyBpbnB1dC5hdDozNDIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1kIC12IC1vIGlucHV0LmMgaW5wdXQueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJpbnB1dC5hdDozNDI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjY1OTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1kIC12IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImlucHV0LmF0OjY1OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtZCAtdiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjY1OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjY1OTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWQgLXYgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kIC12IC1vIGlucHV0LmMgaW5wdXQueSIgImlucHV0LmF0OjY1OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZCAtdiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjY1OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo2NTk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJpbnB1dC5hdDo2NTkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NjU5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NjU5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaW5wdXQuYXQ6NjU5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjY1OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gImlucHV0LmF0OjM0MzogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIC1vIGlucHV0Lm8gLWMgaW5wdXQuYyIKLWVjaG8gaW5wdXQuYXQ6MzQzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLW8gaW5wdXQubyAtYyBpbnB1dC5jICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImlucHV0LmF0OjM0MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCi0KLSRhdF90cmFjZW9mZgotZWNobyAiaW5wdXQuYXQ6MzQ0OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgLW8gbWFpbi5vIC1jIG1haW4uYyIKLWVjaG8gaW5wdXQuYXQ6MzQ0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLW8gbWFpbi5vIC1jIG1haW4uYyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJpbnB1dC5hdDozNDQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gImlucHV0LmF0OjM0NTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5vIG1haW4ubyBcJExJQlMiCi1lY2hvIGlucHV0LmF0OjM0NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0Lm8gbWFpbi5vICRMSUJTICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImlucHV0LmF0OjM0NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCi0KLSRhdF90cmFjZW9mZgotZWNobyAiaW5wdXQuYXQ6MzQ4OiBcJFBSRVBBUlNFUiAuL2lucHV0IgotZWNobyBpbnB1dC5hdDozNDggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9pbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvID4+JGF0X3N0ZG91dDsgZWNobyAiW1tdLAotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiaW5wdXQuYXQ6MzQ4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo2NTk6IGJpc29uIC1kIC12IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImlucHV0LmF0OjY1OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtZCAtdiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NjU5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo2NjA6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJpbnB1dC5hdDo2NjAiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjY2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgNyApICMgNy4gaW5wdXQuYXQ6MzU3OiBUeXBlZCBzeW1ib2wgYWxpYXNlcwotICAgIGF0X3NldHVwX2xpbmU9J2lucHV0LmF0OjM1NycKLSAgICBhdF9kZXNjPSdUeXBlZCBzeW1ib2wgYWxpYXNlcycKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiICA3OiBUeXBlZCBzeW1ib2wgYWxpYXNlcyAgICAgICAgICAgICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiNy4gaW5wdXQuYXQ6MzU3OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NjYwOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgLWMgLW8gaW5wdXQubyBpbnB1dC5jICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTIC1jIC1vIGlucHV0Lm8gaW5wdXQuYyAiICJpbnB1dC5hdDo2NjAiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTIC1jIC1vIGlucHV0Lm8gaW5wdXQuYworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NjYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjY2MTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImlucHV0LmF0OjY2MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NjYxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjY2MTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIC1jIC1vIG1haW4ubyBtYWluLmMgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgLW8gbWFpbi5vIG1haW4uYyAiICJpbnB1dC5hdDo2NjEiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTIC1jIC1vIG1haW4ubyBtYWluLmMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjY2MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo2NjI6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJpbnB1dC5hdDo2NjIiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjY2MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo2NjI6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQubyBtYWluLm8gXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQubyBtYWluLm8gJExJQlMiICJpbnB1dC5hdDo2NjIiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0Lm8gbWFpbi5vICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo2NjIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NjYzOiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgImlucHV0LmF0OjY2MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIltbXSwKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjY2MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo2NjM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiaW5wdXQuYXQ6NjYzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjY2MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzEyCisjQVRfU1RBUlRfMTMKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxMyAnaW5wdXQuYXQ6Njc0JyBcCisgICJUeXBlZCBzeW1ib2wgYWxpYXNlcyIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICIgMQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjEzLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogIyBCaXNvbiAyLjAgYnJva2UgdHlwZWQgc3ltYm9sIGFsaWFzZXMgLSBlbnN1cmUgdGhleSB3b3JrLgogCiBjYXQgPmlucHV0LnkgPDwnX0FURU9GJwotJXsKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotICAvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KLSMgdW5kZWYgbWFsbG9jCi0jIHVuZGVmIG1lbWNtcAotIyB1bmRlZiByZWFsbG9jCi0jZW5kaWYKLSV9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCiAldW5pb24KIHsKQEAgLTE2NDMsNTcgKzU2MTYsMTE0IEBACiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImlucHV0LmF0OjM3MzogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgotZWNobyBpbnB1dC5hdDozNzMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJpbnB1dC5hdDozNzM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NjkwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiaW5wdXQuYXQ6NjkwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NjkwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo2OTA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiICJpbnB1dC5hdDo2OTAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo2OTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NjkwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaW5wdXQuYXQ6NjkwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjY5MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjY5MDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImlucHV0LmF0OjY5MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo2OTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo2OTA6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImlucHV0LmF0OjY5MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NjkwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKIAotICA4ICkgIyA4LiBpbnB1dC5hdDozOTM6IFJlcXVpcmUgMS4wCi0gICAgYXRfc2V0dXBfbGluZT0naW5wdXQuYXQ6MzkzJwotICAgIGF0X2Rlc2M9J1JlcXVpcmUgMS4wJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgIDg6IFJlcXVpcmUgMS4wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICI4LiBpbnB1dC5hdDozOTM6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTMKKyNBVF9TVEFSVF8xNAorYXRfZm5fZ3JvdXBfYmFubmVyIDE0ICdpbnB1dC5hdDo3MTAnIFwKKyAgIlJlcXVpcmUgMS4wIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAxCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTQuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogY2F0ID5pbnB1dC55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogJXJlcXVpcmUgIjEuMCI7CiAlJQpAQCAtMTcwMSwxMTMgKzU3MzEsMjI3IEBACiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImlucHV0LmF0OjM5MzogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgotZWNobyBpbnB1dC5hdDozOTMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJpbnB1dC5hdDozOTM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NzEwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiaW5wdXQuYXQ6NzEwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NzEwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo3MTA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiICJpbnB1dC5hdDo3MTAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo3MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NzEwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaW5wdXQuYXQ6NzEwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjcxMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjcxMDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImlucHV0LmF0OjcxMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo3MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo3MTA6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImlucHV0LmF0OjcxMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo3MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICA5ICkgIyA5LiBpbnB1dC5hdDozOTQ6IFJlcXVpcmUgMi4zCi0gICAgYXRfc2V0dXBfbGluZT0naW5wdXQuYXQ6Mzk0JwotICAgIGF0X2Rlc2M9J1JlcXVpcmUgMi4zJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgIDk6IFJlcXVpcmUgMi4zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICI5LiBpbnB1dC5hdDozOTQ6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTQKKyNBVF9TVEFSVF8xNQorYXRfZm5fZ3JvdXBfYmFubmVyIDE1ICdpbnB1dC5hdDo3MTEnIFwKKyAgIlJlcXVpcmUgMi43IiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAxCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTUuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogY2F0ID5pbnB1dC55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAotJXJlcXVpcmUgIjIuMyI7CislcmVxdWlyZSAiMi43IjsKICUlCiBlbXB0eV9maWxlOjsKIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiaW5wdXQuYXQ6Mzk0OiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCi1lY2hvIGlucHV0LmF0OjM5NCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImlucHV0LmF0OjM5NDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo3MTE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJpbnB1dC5hdDo3MTEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo3MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjcxMTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgImlucHV0LmF0OjcxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjcxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo3MTE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJpbnB1dC5hdDo3MTEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NzExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NzExOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaW5wdXQuYXQ6NzExIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjcxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjcxMTogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiaW5wdXQuYXQ6NzExIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjcxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwotCi0gIDEwICkgIyAxMC4gaW5wdXQuYXQ6Mzk2OiBSZXF1aXJlIDEwMC4wCi0gICAgYXRfc2V0dXBfbGluZT0naW5wdXQuYXQ6Mzk2JwotICAgIGF0X2Rlc2M9J1JlcXVpcmUgMTAwLjAnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiAxMDogUmVxdWlyZSAxMDAuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjEwLiBpbnB1dC5hdDozOTY6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTUKKyNBVF9TVEFSVF8xNgorYXRfZm5fZ3JvdXBfYmFubmVyIDE2ICdpbnB1dC5hdDo3MTMnIFwKKyAgIlJlcXVpcmUgMTAwLjAiICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAxCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTYuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogY2F0ID5pbnB1dC55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogJXJlcXVpcmUgIjEwMC4wIjsKICUlCkBAIC0xODE1LDU4ICs1OTU5LDYzMzAgQEAKIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiaW5wdXQuYXQ6Mzk2OiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCi1lY2hvIGlucHV0LmF0OjM5NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgNjMpIDs7Ci0gICAqKSBlY2hvICJpbnB1dC5hdDozOTY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgNjMiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjcxMzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiICJpbnB1dC5hdDo3MTMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDYzICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NzEzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzE2CisjQVRfU1RBUlRfMTcKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxNyAnaW5wdXQuYXQ6NzIwJyBcCisgICJTdHJpbmcgYWxpYXNlcyBmb3IgY2hhcmFjdGVyIHRva2VucyIgIiAgICAgICAgICAgICIgMQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjE3LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworIyBCaXNvbiBvbmNlIHRob3VnaHQgYSBjaGFyYWN0ZXIgdG9rZW4gYW5kIGl0cyBhbGlhcyB3ZXJlIGRpZmZlcmVudCBzeW1ib2xzCisjIHdpdGggdGhlIHNhbWUgdXNlciB0b2tlbiBudW1iZXIuCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisldG9rZW4gJ2EnICJhIgorJSUKK3N0YXJ0OiAnYSc7CislJQorX0FURU9GCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjczMjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImlucHV0LmF0OjczMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjczMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjczMjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgImlucHV0LmF0OjczMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjczMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo3MzI6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJpbnB1dC5hdDo3MzIiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NzMyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NzMyOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaW5wdXQuYXQ6NzMyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjczMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjczMjogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiaW5wdXQuYXQ6NzMyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo3MzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xNworI0FUX1NUQVJUXzE4CithdF9mbl9ncm91cF9iYW5uZXIgMTggJ2lucHV0LmF0Ojc0MScgXAorICAiU3ltYm9scyIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDEKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxOC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyV0b2tlbiBXSVRILURBU0gKKyV0b2tlbiBXSVRIT1VUX0RBU0ggIldJVEhPVVQtREFTSCIKKyV0b2tlbiBXSVRILlBFUklPRAorJXRva2VuIFdJVEhPVVRfUEVSSU9EICJXSVRIT1VULlBFUklPRCIKKyVjb2RlIHsKKyAgc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CisgIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOworfQorJSUKK3N0YXJ0OiB3aXRoLWRhc2ggd2l0aG91dF9kYXNoIHdpdGgucGVyaW9kIHdpdGhvdXRfcGVyaW9kOword2l0aC1kYXNoOiBXSVRILURBU0g7Cit3aXRob3V0X2Rhc2g6ICJXSVRIT1VULURBU0giOword2l0aC5wZXJpb2Q6IFdJVEguUEVSSU9EOword2l0aG91dF9wZXJpb2Q6ICJXSVRIT1VULlBFUklPRCI7CislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKyNpbmNsdWRlIDxhc3NlcnQuaD4KK3N0YXRpYworaW50IHl5bGV4ICh2b2lkKQoreworICBzdGF0aWMgY2hhciBjb25zdCBpbnB1dFtdID0gIiI7CisgIHN0YXRpYyBzaXplX3QgdG9rbnVtID0gMDsKKyAgaW50IHJlczsKKyAgOworICBhc3NlcnQgKHRva251bSA8IHNpemVvZiBpbnB1dCAvIHNpemVvZiBpbnB1dFswXSk7CisgIHJlcyA9IGlucHV0W3Rva251bSsrXTsKKyAgOworICByZXR1cm4gcmVzOworfQorX0FURU9GCisKKworCisKKyMgUE9TSVggWWFjYyBhY2NlcHQgcGVyaW9kcywgYnV0IG5vdCBkYXNoZXMuCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo3NjY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS15YWNjIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXlhY2MgaW5wdXQueSIgImlucHV0LmF0Ojc2NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teWFjYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueTo5LjgtMTY6IFBPU0lYIFlhY2MgZm9yYmlkcyBkYXNoZXMgaW4gc3ltYm9sIG5hbWVzOiBXSVRILURBU0gKK2lucHV0Lnk6MTguOC0xNjogUE9TSVggWWFjYyBmb3JiaWRzIGRhc2hlcyBpbiBzeW1ib2wgbmFtZXM6IHdpdGgtZGFzaAorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NzY2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgU28gd2FybiBhYm91dCB0aGVtLgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo3NzI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtV3lhY2MgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImlucHV0LmF0Ojc3MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtV3lhY2MgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NzcyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NzcyOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtV3lhY2MgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtV3lhY2MgaW5wdXQueSIgImlucHV0LmF0Ojc3MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtV3lhY2MgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NzcyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0Ojc3MjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImlucHV0LmF0Ojc3MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo3NzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo3NzI6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJpbnB1dC5hdDo3NzIiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NzcyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NzcyOiBiaXNvbiAtV3lhY2MgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImlucHV0LmF0Ojc3MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtV3lhY2MgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6OS44LTE2OiB3YXJuaW5nOiBQT1NJWCBZYWNjIGZvcmJpZHMgZGFzaGVzIGluIHN5bWJvbCBuYW1lczogV0lUSC1EQVNICitpbnB1dC55OjE4LjgtMTY6IHdhcm5pbmc6IFBPU0lYIFlhY2MgZm9yYmlkcyBkYXNoZXMgaW4gc3ltYm9sIG5hbWVzOiB3aXRoLWRhc2gKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0Ojc3MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyMgRGVmaW5pbmcgUE9TSVhMWV9DT1JSRUNUIGNhdXNlcyBiaXNvbiB0byBjb21wbGFpbiBpZiBvcHRpb25zIGFyZQorIyBhZGRlZCBhZnRlciB0aGUgZ3JhbW1hciBmaWxlIG5hbWUsIHNvIHNraXAgdGhlc2UgY2hlY2tzIGluIHRoYXQKKyMgY2FzZS4KK2lmIHRlc3QgIiRQT1NJWExZX0NPUlJFQ1RfSVNfRVhQT1JURUQiID0gZmFsc2U7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisKKyAgIyBUbyBhdm9pZCBleHBhbmRpbmcgaXQgcmVwZWF0ZWRseSwgc3RvcmUgc3BlY2lmaWVkIHN0ZG91dC4KKyAgOiA+ZXhwb3V0CisKKyAgIyBSdW4gd2l0aCAtV2Vycm9yLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NzcyOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1XeWFjYyBpbnB1dC55IC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtV3lhY2MgaW5wdXQueSAtV2Vycm9yIiAiaW5wdXQuYXQ6NzcyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLVd5YWNjIGlucHV0LnkgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NzcyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgQnVpbGQgZXhwZWN0ZWQgc3RkZXJyIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlICJ3YXJuaW5ncyBiZWluZworICAjIHRyZWF0ZWQgYXMgZXJyb3JzIiBtZXNzYWdlLgorICBjYXQgPmF0LWJpc29uLWNoZWNrLXdhcm5pbmdzIDw8J19BVEVPRicKK2lucHV0Lnk6OS44LTE2OiB3YXJuaW5nOiBQT1NJWCBZYWNjIGZvcmJpZHMgZGFzaGVzIGluIHN5bWJvbCBuYW1lczogV0lUSC1EQVNICitpbnB1dC55OjE4LjgtMTY6IHdhcm5pbmc6IFBPU0lYIFlhY2MgZm9yYmlkcyBkYXNoZXMgaW4gc3ltYm9sIG5hbWVzOiB3aXRoLWRhc2gKK19BVEVPRgorCisgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PWBzZWQgLW4gXAorICAgICcvOiB3YXJuaW5nOiAvez07cTt9JyBhdC1iaXNvbi1jaGVjay13YXJuaW5nc2AKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2ZpcnN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19maXJzdF90bXA9YHNlZCAtbiBcCisgICAgJy9jb25mbGljdHM6IFswLTldLipyZWR1Y2UkL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdF90bXA6PTF9CisgIGlmIHRlc3QgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcCAtbHQgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0OyB0aGVuCisgICAgYXRfYmlzb25fY2hlY2tfZmlyc3Q9JGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcAorICBmaQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdCAtZ3QgMTsgdGhlbgorICAgIHNlZCAtbiAiMSxgZXhwciAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLSAxYCJwIFwKKyAgICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4gZXhwZXJyCisgIGZpCisgIGVjaG8gJ2Jpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycycgPj4gZXhwZXJyCisKKyAgIyBGaW5pc2ggYnVpbGRpbmcgZXhwZWN0ZWQgc3RkZXJyIGFuZCBjaGVjay4gIFVubGlrZSB3YXJuaW5ncywKKyAgIyBjb21wbGFpbnRzIGNhdXNlIGJpc29uIHRvIGV4aXQgZWFybHkuICBUaHVzLCB3aXRoIC1XZXJyb3IsIGJpc29uCisgICMgZG9lcyBub3QgbmVjZXNzYXJpbHkgcmVwb3J0IGFsbCB3YXJuaW5ncyB0aGF0IGl0IGRvZXMgd2l0aG91dAorICAjIC1XZXJyb3IsIGJ1dCBpdCBhdCBsZWFzdCByZXBvcnRzIG9uZS4KKyAgYXRfYmlzb25fY2hlY2tfbGFzdD1gc2VkIC1uICckPScgc3RkZXJyYAorICA6ICR7YXRfYmlzb25fY2hlY2tfbGFzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfbGFzdD1gZXhwciAkYXRfYmlzb25fY2hlY2tfbGFzdCAtIDFgCisgIHNlZCAtbiAiJGF0X2Jpc29uX2NoZWNrX2ZpcnN0LCRhdF9iaXNvbl9jaGVja19sYXN0InAgXAorICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4+IGV4cGVycgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NzcyOiBzZWQgJ3MsLiovXFwoYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzXFwpXCQsXFwxLCcgXFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJpbnB1dC5hdDo3NzIiCisoICRhdF9jaGVja190cmFjZTsgc2VkICdzLC4qL1woYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzXCkkLFwxLCcgXAorICAgICAgICAgICAgICBzdGRlcnIgMT4mMgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorJGF0X2RpZmYgZXhwZXJyICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo3NzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBOb3cgY2hlY2sgLS13YXJuaW5ncz1lcnJvci4KKyAgY3Agc3RkZXJyIGV4cGVycgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NzcyOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1XeWFjYyBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtV3lhY2MgaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yIiAiaW5wdXQuYXQ6NzcyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLVd5YWNjIGlucHV0LnkgLS13YXJuaW5ncz1lcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorJGF0X2RpZmYgZXhwZXJyICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo3NzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBOb3cgY2hlY2sgLVdub25lIGFuZCAtLXdhcm5pbmdzPW5vbmUgYnkgbWFraW5nIHN1cmUgdGhhdAorICAjIC1XZXJyb3IgZG9lc24ndCBjaGFuZ2UgdGhlIGV4aXQgc3RhdHVzIHdoZW4gLVdub25lIG9yCisgICMgLS13YXJuaW5ncz1ub25lIGlzIHNwZWNpZmllZC4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0Ojc3MjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtV3lhY2MgaW5wdXQueSAtV25vbmUgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1XeWFjYyBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIiAiaW5wdXQuYXQ6NzcyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLVd5YWNjIGlucHV0LnkgLVdub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NzcyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NzcyOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1XeWFjYyBpbnB1dC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLVd5YWNjIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiICJpbnB1dC5hdDo3NzIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtV3lhY2MgaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo3NzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQogCi0kYXRfdHJhY2VvbgorIyBEYXNoZXMgYXJlIGZpbmUgZm9yIEdOVSBCaXNvbi4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Nzc4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiaW5wdXQuYXQ6Nzc4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Nzc4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo3Nzg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiICJpbnB1dC5hdDo3NzgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo3NzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Nzc4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaW5wdXQuYXQ6Nzc4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0Ojc3OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0Ojc3ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImlucHV0LmF0Ojc3OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo3NzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo3Nzg6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImlucHV0LmF0Ojc3OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6Nzc4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0gIGJhbm5lci0yICkgIyBCYW5uZXIgMi4gb3V0cHV0LmF0OjE5Ci0gICAgY2F0IDw8XF9BVEVPRgogCi1PdXRwdXQgZmlsZSBuYW1lcy4KKyMgTWFrZSBzdXJlIHdlIGRvbid0IGV4cG9ydCBzaWxseSB0b2tlbiBpZGVudGlmaWVycyB3aXRoIHBlcmlvZHMgb3IgZGFzaGVzLgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0Ojc4MTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImlucHV0LmF0Ojc4MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6NzgxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0Ojc4MTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIC1jIC1vIGlucHV0Lm8gaW5wdXQuYyAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyAtbyBpbnB1dC5vIGlucHV0LmMgIiAiaW5wdXQuYXQ6NzgxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyAtbyBpbnB1dC5vIGlucHV0LmMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0Ojc4MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIFBlcmlvZHMgYXJlIGdlbnVpbmUgbGV0dGVycywgdGhleSBjYW4gc3RhcnQgaWRlbnRpZmllcnMuCisjIERpZ2l0cyBhbmQgZGFzaGVzIGNhbm5vdC4KK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisldG9rZW4gLkdPT0QKKyAgICAgICAgIC1HT09ECisgICAgICAgICAxTlY0TDFECisgICAgICAgICAtMTIzCislJQorc3RhcnQ6IC5HT09EIEdPT0QKIF9BVEVPRgotICAgIDs7CiAKLSAgMTEgKSAjIDExLiBvdXRwdXQuYXQ6NDM6IE91dHB1dCBmaWxlczogIC1kdgotICAgIGF0X3NldHVwX2xpbmU9J291dHB1dC5hdDo0MycKLSAgICBhdF9kZXNjPSdPdXRwdXQgZmlsZXM6ICAtZHYgJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgMTE6IE91dHB1dCBmaWxlczogIC1kdiAgICAgICAgICAgICAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIxMS4gb3V0cHV0LmF0OjQzOiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCiAKLWNhc2UgImZvby55IiBpbgotICAqLyopIG1rZGlyIGBlY2hvICJmb28ueSIgfCBzZWQgJ3MsLy4qLCwnYDs7Ci1lc2FjCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo3OTQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IiAiaW5wdXQuYXQ6Nzk0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueToxMC4xMDogZXJyb3I6IGludmFsaWQgY2hhcmFjdGVyOiAnLScKK2lucHV0Lnk6MTEuMTAtMTY6IGVycm9yOiBpbnZhbGlkIGlkZW50aWZpZXI6ICcxTlY0TDFEJworaW5wdXQueToxMi4xMDogZXJyb3I6IGludmFsaWQgY2hhcmFjdGVyOiAnLScKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0Ojc5NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzE4CisjQVRfU1RBUlRfMTkKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxOSAnaW5wdXQuYXQ6ODA3JyBcCisgICJOdW1iZXJlZCB0b2tlbnMiICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgMQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjE5LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworY2F0ID5yZWRlY2wueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisldG9rZW4gREVDSU1BTF8xICAgICAxMTI1OTM3NQorICAgICAgICAgSEVYQURFQ0lNQUxfMSAweGFiY2RlZgorICAgICAgICAgSEVYQURFQ0lNQUxfMiAweEZFRENCQQorICAgICAgICAgREVDSU1BTF8yICAgICAxNjcwMjY1MAorJSUKK3N0YXJ0OiBERUNJTUFMXzEgSEVYQURFQ0lNQUxfMjsKK19BVEVPRgorCisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6ODE4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIHJlZGVjbC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gcmVkZWNsLnkiICJpbnB1dC5hdDo4MTgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiByZWRlY2wueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInJlZGVjbC55OjEwLjEwLTIyOiBlcnJvcjogdXNlciB0b2tlbiBudW1iZXIgMTEyNTkzNzUgcmVkZWNsYXJhdGlvbiBmb3IgSEVYQURFQ0lNQUxfMQorcmVkZWNsLnk6OS44LTE2OiAgICAgICBwcmV2aW91cyBkZWNsYXJhdGlvbiBmb3IgREVDSU1BTF8xCityZWRlY2wueToxMi4xMC0xODogZXJyb3I6IHVzZXIgdG9rZW4gbnVtYmVyIDE2NzAyNjUwIHJlZGVjbGFyYXRpb24gZm9yIERFQ0lNQUxfMgorcmVkZWNsLnk6MTEuMTAtMjI6ICAgICBwcmV2aW91cyBkZWNsYXJhdGlvbiBmb3IgSEVYQURFQ0lNQUxfMgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6ODE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK2NhdCA+dG9vLWxhcmdlLnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJXRva2VuIFRPT19MQVJHRV9ERUMgOTk5OTk5OTk5OTk5OTk5OTk5OTk5CisgICAgICAgICBUT09fTEFSR0VfSEVYIDB4RkZGRkZGRkZGRkZGRkZGRkZGRgorJSUKK3N0YXJ0OiBUT09fTEFSR0VfREVDIFRPT19MQVJHRV9IRVgKKyUlCitfQVRFT0YKKworCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjgzMzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiB0b28tbGFyZ2UueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIHRvby1sYXJnZS55IiAiaW5wdXQuYXQ6ODMzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gdG9vLWxhcmdlLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJ0b28tbGFyZ2UueTo5LjIyLTQyOiBlcnJvcjogaW50ZWdlciBvdXQgb2YgcmFuZ2U6ICc5OTk5OTk5OTk5OTk5OTk5OTk5OTknCit0b28tbGFyZ2UueToxMC4yNC00NDogZXJyb3I6IGludGVnZXIgb3V0IG9mIHJhbmdlOiAnMHhGRkZGRkZGRkZGRkZGRkZGRkZGJworIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6ODMzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTkKKyNBVF9TVEFSVF8yMAorYXRfZm5fZ3JvdXBfYmFubmVyIDIwICdpbnB1dC5hdDo4NDUnIFwKKyAgIlVuY2xvc2VkIGNvbnN0cnVjdHMiICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAxCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjAuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisjIEJpc29uJ3Mgc2Nhbi1ncmFtLmwgb25jZSBmb3Jnb3QgdG8gU1RSSU5HX0ZJTklTSCBzb21lIHVuY2xvc2VkIGNvbnN0cnVjdHMsIHNvCisjIHRoZXkgd2VyZSBwcmVwZW5kZWQgdG8gd2hhdGV2ZXIgaXQgU1RSSU5HX0dST1cnZWQgbmV4dC4gIEl0IGFsc28gdGhyZXcgdGhlbQorIyBhd2F5IHJhdGhlciB0aGFuIHJldHVybmluZyB0aGVtIHRvIHRoZSBwYXJzZXIuICBUaGUgZWZmZWN0IHdhcyBjb25mdXNpbmcKKyMgc3Vic2VxdWVudCBlcnJvciBtZXNzYWdlcy4KKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyV0b2tlbiBBICJhCisldG9rZW4gQiAiYiIKKyV0b2tlbiBBQiAiYWIiIC8vIFVzZWQgdG8gY29tcGxhaW4gdGhhdCAiYWIiIHdhcyBhbHJlYWR5IHVzZWQuCisldG9rZW4gQyAnMQorJXRva2VuIFRXTyAiMiIKKyV0b2tlbiBUSUNLX1RXRUxWRSAiJzEyIiAvLyBVc2VkIHRvIGNvbXBsYWluIHRoYXQgIicxMiIgd2FzIGFscmVhZHkgdXNlZC4KKworJSUKKworc3RhcnQ6IDsKKworLy8gVXNlZCB0byByZXBvcnQgYSBzeW50YXggZXJyb3IgYmVjYXVzZSBpdCBkaWRuJ3Qgc2VlIGFueSBraW5kIG9mIHN5bWJvbAorLy8gaWRlbnRpZmllci4KKyV0eXBlIDxmPiAnYQorOworJXR5cGUgPGY+ICJhCis7CisvLyBVc2VkIHRvIHJlcG9ydCBhIHN5bnRheCBlcnJvciBiZWNhdXNlIGl0IGRpZG4ndCBzZWUgYnJhY2VkIGNvZGUuCislZGVzdHJ1Y3RvciB7IGZyZWUgKCQkKQorX0FURU9GCisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6ODc0OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIgImlucHV0LmF0Ojg3NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6MS4xMC0yLjA6IGVycm9yOiBtaXNzaW5nICdcIicgYXQgZW5kIG9mIGxpbmUKK2lucHV0Lnk6NC4xMC01LjA6IGVycm9yOiBtaXNzaW5nIFwiJ1wiIGF0IGVuZCBvZiBsaW5lCitpbnB1dC55OjE0LjExLTE1LjA6IGVycm9yOiBtaXNzaW5nIFwiJ1wiIGF0IGVuZCBvZiBsaW5lCitpbnB1dC55OjE2LjExLTE3LjA6IGVycm9yOiBtaXNzaW5nICdcIicgYXQgZW5kIG9mIGxpbmUKK2lucHV0Lnk6MTkuMTMtMjAuMDogZXJyb3I6IG1pc3NpbmcgJ30nIGF0IGVuZCBvZiBmaWxlCitpbnB1dC55OjIwLjE6IGVycm9yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0Ojg3NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo4ODM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IC1vIGlucHV0LmMgaW5wdXQueSIgImlucHV0LmF0Ojg4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueToxLjEwLTIuMDogZXJyb3I6IG1pc3NpbmcgJ1wiJyBhdCBlbmQgb2YgbGluZQorICV0b2tlbiBBIFwiYQorICAgICAgICAgIF5eCitpbnB1dC55OjQuMTAtNS4wOiBlcnJvcjogbWlzc2luZyBcIidcIiBhdCBlbmQgb2YgbGluZQorICV0b2tlbiBDICcxCisgICAgICAgICAgXl4KK2lucHV0Lnk6MTQuMTEtMTUuMDogZXJyb3I6IG1pc3NpbmcgXCInXCIgYXQgZW5kIG9mIGxpbmUKKyAldHlwZSA8Zj4gJ2EKKyAgICAgICAgICAgXl4KK2lucHV0Lnk6MTYuMTEtMTcuMDogZXJyb3I6IG1pc3NpbmcgJ1wiJyBhdCBlbmQgb2YgbGluZQorICV0eXBlIDxmPiBcImEKKyAgICAgICAgICAgXl4KK2lucHV0Lnk6MTkuMTMtMjAuMDogZXJyb3I6IG1pc3NpbmcgJ30nIGF0IGVuZCBvZiBmaWxlCisgJWRlc3RydWN0b3IgeyBmcmVlIChcJFwkKQorICAgICAgICAgICAgIF5eXl5eXl5eXl5eCitpbnB1dC55OjIwLjE6IGVycm9yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0Ojg4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzIwCisjQVRfU1RBUlRfMjEKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyMSAnaW5wdXQuYXQ6OTA5JyBcCisgICIlc3RhcnQgYWZ0ZXIgZmlyc3QgcnVsZSIgIiAgICAgICAgICAgICAgICAgICAgICAgICIgMQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjIxLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworIyBCaXNvbiBvbmNlIGNvbXBsYWluZWQgdGhhdCBhICVzdGFydCBhZnRlciB0aGUgZmlyc3QgcnVsZSB3YXMgYSByZWRlY2xhcmF0aW9uCisjIG9mIHRoZSBzdGFydCBzeW1ib2wuCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislJQorZmFsc2Vfc3RhcnQ6IDsKK3N0YXJ0OiBmYWxzZV9zdGFydCA7Cislc3RhcnQgc3RhcnQ7CitfQVRFT0YKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjkyMTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImlucHV0LmF0OjkyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjkyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjkyMTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgImlucHV0LmF0OjkyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjkyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo5MjE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJpbnB1dC5hdDo5MjEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6OTIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6OTIxOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaW5wdXQuYXQ6OTIxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjkyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjkyMTogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiaW5wdXQuYXQ6OTIxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo5MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yMQorI0FUX1NUQVJUXzIyCithdF9mbl9ncm91cF9iYW5uZXIgMjIgJ2lucHV0LmF0OjkzMCcgXAorICAiJXByZWMgdGFrZXMgYSB0b2tlbiIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDEKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyMi4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKyMgQmlzb24gb25jZSBhbGxvd2VkICVwcmVjIHN5bSB3aGVyZSBzeW0gd2FzIGEgbm9udGVybWluYWwuCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislJQorc3RhcnQ6IFBSRUMgJXByZWMgUFJFQyA7CitQUkVDOiA7CitfQVRFT0YKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo5NDA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkiICJpbnB1dC5hdDo5NDAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueTozLjEtNDogZXJyb3I6IHJ1bGUgZ2l2ZW4gZm9yIFBSRUMsIHdoaWNoIGlzIGEgdG9rZW4KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0Ojk0MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzIyCisjQVRfU1RBUlRfMjMKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyMyAnaW5wdXQuYXQ6OTUxJyBcCisgICIlcHJlYydzIHRva2VuIG11c3QgYmUgZGVmaW5lZCIgIiAgICAgICAgICAgICAgICAgICIgMQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjIzLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworIyBBY2NvcmRpbmcgdG8gUE9TSVgsIGEgJXByZWMgdG9rZW4gbXVzdCBiZSBkZWZpbmVkIHNlcGFyYXRlbHkuCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislJQorc3RhcnQ6ICVwcmVjIFBSRUMgOworX0FURU9GCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo5NjA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiaW5wdXQuYXQ6OTYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0Ojk2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0Ojk2MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBpbnB1dC55IiAiaW5wdXQuYXQ6OTYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0Ojk2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo5NjA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJpbnB1dC5hdDo5NjAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6OTYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6OTYwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaW5wdXQuYXQ6OTYwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0Ojk2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0Ojk2MDogYmlzb24gaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImlucHV0LmF0Ojk2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueToyLjgtMTc6IHdhcm5pbmc6IHRva2VuIGZvciAlcHJlYyBpcyBub3QgZGVmaW5lZDogUFJFQworIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6OTYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworIyBEZWZpbmluZyBQT1NJWExZX0NPUlJFQ1QgY2F1c2VzIGJpc29uIHRvIGNvbXBsYWluIGlmIG9wdGlvbnMgYXJlCisjIGFkZGVkIGFmdGVyIHRoZSBncmFtbWFyIGZpbGUgbmFtZSwgc28gc2tpcCB0aGVzZSBjaGVja3MgaW4gdGhhdAorIyBjYXNlLgoraWYgdGVzdCAiJFBPU0lYTFlfQ09SUkVDVF9JU19FWFBPUlRFRCIgPSBmYWxzZTsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKworICAjIFRvIGF2b2lkIGV4cGFuZGluZyBpdCByZXBlYXRlZGx5LCBzdG9yZSBzcGVjaWZpZWQgc3Rkb3V0LgorICA6ID5leHBvdXQKKworICAjIFJ1biB3aXRoIC1XZXJyb3IuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo5NjA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtV2Vycm9yIiAiaW5wdXQuYXQ6OTYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo5NjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBCdWlsZCBleHBlY3RlZCBzdGRlcnIgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgIndhcm5pbmdzIGJlaW5nCisgICMgdHJlYXRlZCBhcyBlcnJvcnMiIG1lc3NhZ2UuCisgIGNhdCA+YXQtYmlzb24tY2hlY2std2FybmluZ3MgPDwnX0FURU9GJworaW5wdXQueToyLjgtMTc6IHdhcm5pbmc6IHRva2VuIGZvciAlcHJlYyBpcyBub3QgZGVmaW5lZDogUFJFQworX0FURU9GCisKKyAgYXRfYmlzb25fY2hlY2tfZmlyc3Q9YHNlZCAtbiBcCisgICAgJy86IHdhcm5pbmc6IC97PTtxO30nIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzYAorICA6ICR7YXRfYmlzb25fY2hlY2tfZmlyc3Q6PTF9CisgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcD1gc2VkIC1uIFwKKyAgICAnL2NvbmZsaWN0czogWzAtOV0uKnJlZHVjZSQvez07cTt9JyBhdC1iaXNvbi1jaGVjay13YXJuaW5nc2AKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcDo9MX0KKyAgaWYgdGVzdCAkYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wIC1sdCAkYXRfYmlzb25fY2hlY2tfZmlyc3Q7IHRoZW4KKyAgICBhdF9iaXNvbl9jaGVja19maXJzdD0kYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wCisgIGZpCisgIGlmIHRlc3QgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0IC1ndCAxOyB0aGVuCisgICAgc2VkIC1uICIxLGBleHByICRhdF9iaXNvbl9jaGVja19maXJzdCAtIDFgInAgXAorICAgICAgYXQtYmlzb24tY2hlY2std2FybmluZ3MgPiBleHBlcnIKKyAgZmkKKyAgZWNobyAnYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzJyA+PiBleHBlcnIKKworICAjIEZpbmlzaCBidWlsZGluZyBleHBlY3RlZCBzdGRlcnIgYW5kIGNoZWNrLiAgVW5saWtlIHdhcm5pbmdzLAorICAjIGNvbXBsYWludHMgY2F1c2UgYmlzb24gdG8gZXhpdCBlYXJseS4gIFRodXMsIHdpdGggLVdlcnJvciwgYmlzb24KKyAgIyBkb2VzIG5vdCBuZWNlc3NhcmlseSByZXBvcnQgYWxsIHdhcm5pbmdzIHRoYXQgaXQgZG9lcyB3aXRob3V0CisgICMgLVdlcnJvciwgYnV0IGl0IGF0IGxlYXN0IHJlcG9ydHMgb25lLgorICBhdF9iaXNvbl9jaGVja19sYXN0PWBzZWQgLW4gJyQ9JyBzdGRlcnJgCisgIDogJHthdF9iaXNvbl9jaGVja19sYXN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19sYXN0PWBleHByICRhdF9iaXNvbl9jaGVja19sYXN0IC0gMWAKKyAgc2VkIC1uICIkYXRfYmlzb25fY2hlY2tfZmlyc3QsJGF0X2Jpc29uX2NoZWNrX2xhc3QicCBcCisgICAgYXQtYmlzb24tY2hlY2std2FybmluZ3MgPj4gZXhwZXJyCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo5NjA6IHNlZCAncywuKi9cXChiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnNcXClcJCxcXDEsJyBcXAorICAgICAgICAgICAgICBzdGRlcnIgMT4mMiIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImlucHV0LmF0Ojk2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgJ3MsLiovXChiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnNcKSQsXDEsJyBcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCiskYXRfZGlmZiBleHBlcnIgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0Ojk2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIE5vdyBjaGVjayAtLXdhcm5pbmdzPWVycm9yLgorICBjcCBzdGRlcnIgZXhwZXJyCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo5NjA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yIiAiaW5wdXQuYXQ6OTYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCiskYXRfZGlmZiBleHBlcnIgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0Ojk2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIE5vdyBjaGVjayAtV25vbmUgYW5kIC0td2FybmluZ3M9bm9uZSBieSBtYWtpbmcgc3VyZSB0aGF0CisgICMgLVdlcnJvciBkb2Vzbid0IGNoYW5nZSB0aGUgZXhpdCBzdGF0dXMgd2hlbiAtV25vbmUgb3IKKyAgIyAtLXdhcm5pbmdzPW5vbmUgaXMgc3BlY2lmaWVkLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6OTYwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLVdub25lIC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIiAiaW5wdXQuYXQ6OTYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtV25vbmUgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo5NjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo5NjA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiICJpbnB1dC5hdDo5NjAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0Ojk2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjMKKyNBVF9TVEFSVF8yNAorYXRfZm5fZ3JvdXBfYmFubmVyIDI0ICdpbnB1dC5hdDo5NzEnIFwKKyAgIlJlamVjdCB1bnVzZWQgJWNvZGUgcXVhbGlmaWVycyIgIiAgICAgICAgICAgICAgICAgIiAxCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjQuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCitjYXQgPmlucHV0LWMueSA8PCdfQVRFT0YnCislY29kZSBxIHt9CislY29kZSBiYWQge30KKyVjb2RlIGJhZCB7fQorJWNvZGUgZm9ybWF0IHt9CislJQorc3RhcnQ6IDsKK19BVEVPRgorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo5ODE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQtYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQtYy55IiAiaW5wdXQuYXQ6OTgxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQtYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQtYy55OjEuNzogZXJyb3I6ICVjb2RlIHF1YWxpZmllciAncScgaXMgbm90IHVzZWQKK2lucHV0LWMueToyLjctOTogZXJyb3I6ICVjb2RlIHF1YWxpZmllciAnYmFkJyBpcyBub3QgdXNlZAoraW5wdXQtYy55OjMuNy05OiBlcnJvcjogJWNvZGUgcXVhbGlmaWVyICdiYWQnIGlzIG5vdCB1c2VkCitpbnB1dC1jLnk6NC43LTEyOiBlcnJvcjogJWNvZGUgcXVhbGlmaWVyICdmb3JtYXQnIGlzIG5vdCB1c2VkCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDo5ODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5pbnB1dC1jLWdsci55IDw8J19BVEVPRicKKyVjb2RlIHEge30KKyVjb2RlIGJhZCB7fQorICVjb2RlIGJhZCB7fQorJSUKK3N0YXJ0OiA7CitfQVRFT0YKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6OTk1OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LWMtZ2xyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC1jLWdsci55IiAiaW5wdXQuYXQ6OTk1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQtYy1nbHIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0LWMtZ2xyLnk6MS43OiBlcnJvcjogJWNvZGUgcXVhbGlmaWVyICdxJyBpcyBub3QgdXNlZAoraW5wdXQtYy1nbHIueToyLjctOTogZXJyb3I6ICVjb2RlIHF1YWxpZmllciAnYmFkJyBpcyBub3QgdXNlZAoraW5wdXQtYy1nbHIueTozLjgtMTA6IGVycm9yOiAlY29kZSBxdWFsaWZpZXIgJ2JhZCcgaXMgbm90IHVzZWQKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0Ojk5NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCitjYXQgPmlucHV0LWMrKy55IDw8J19BVEVPRicKKyVjb2RlIHEge30KKyVjb2RlIGJhZCB7fQorICVjb2RlIHEge30KKyUlCitzdGFydDogOworX0FURU9GCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjEwMDg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQtYysrLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC1jKysueSIgImlucHV0LmF0OjEwMDgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC1jKysueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0LWMrKy55OjEuNzogZXJyb3I6ICVjb2RlIHF1YWxpZmllciAncScgaXMgbm90IHVzZWQKK2lucHV0LWMrKy55OjIuNy05OiBlcnJvcjogJWNvZGUgcXVhbGlmaWVyICdiYWQnIGlzIG5vdCB1c2VkCitpbnB1dC1jKysueTozLjg6IGVycm9yOiAlY29kZSBxdWFsaWZpZXIgJ3EnIGlzIG5vdCB1c2VkCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMDA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK2NhdCA+aW5wdXQtYysrLWdsci55IDw8J19BVEVPRicKKyVjb2RlIGJhZCB7fQorJWNvZGUgcSB7fQorJWNvZGUgcSB7fQorJSUKK3N0YXJ0OiA7CitfQVRFT0YKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTAyMTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC1jKystZ2xyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC1jKystZ2xyLnkiICJpbnB1dC5hdDoxMDIxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQtYysrLWdsci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQtYysrLWdsci55OjEuNy05OiBlcnJvcjogJWNvZGUgcXVhbGlmaWVyICdiYWQnIGlzIG5vdCB1c2VkCitpbnB1dC1jKystZ2xyLnk6Mi43OiBlcnJvcjogJWNvZGUgcXVhbGlmaWVyICdxJyBpcyBub3QgdXNlZAoraW5wdXQtYysrLWdsci55OjMuNzogZXJyb3I6ICVjb2RlIHF1YWxpZmllciAncScgaXMgbm90IHVzZWQKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjEwMjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5zcGVjaWFsLWNoYXItQEAueSA8PCdfQVRFT0YnCislY29kZSBiYWQge30KKyVjb2RlIHEge30KKyVjb2RlIHEge30KKyUlCitzdGFydDogOworX0FURU9GCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjEwMzQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gc3BlY2lhbC1jaGFyLUBALnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBzcGVjaWFsLWNoYXItQEAueSIgImlucHV0LmF0OjEwMzQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBzcGVjaWFsLWNoYXItQEAueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInNwZWNpYWwtY2hhci1AQC55OjEuNy05OiBlcnJvcjogJWNvZGUgcXVhbGlmaWVyICdiYWQnIGlzIG5vdCB1c2VkCitzcGVjaWFsLWNoYXItQEAueToyLjc6IGVycm9yOiAlY29kZSBxdWFsaWZpZXIgJ3EnIGlzIG5vdCB1c2VkCitzcGVjaWFsLWNoYXItQEAueTozLjc6IGVycm9yOiAlY29kZSBxdWFsaWZpZXIgJ3EnIGlzIG5vdCB1c2VkCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMDM0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK2NhdCA+c3BlY2lhbC1jaGFyLV0ueSA8PCdfQVRFT0YnCislY29kZSBiYWQge30KKyVjb2RlIHEge30KKyVjb2RlIHEge30KKyUlCitzdGFydDogOworX0FURU9GCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjEwNDc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gc3BlY2lhbC1jaGFyLV0ueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIHNwZWNpYWwtY2hhci1dLnkiICJpbnB1dC5hdDoxMDQ3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gc3BlY2lhbC1jaGFyLV0ueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInNwZWNpYWwtY2hhci1dLnk6MS43LTk6IGVycm9yOiAlY29kZSBxdWFsaWZpZXIgJ2JhZCcgaXMgbm90IHVzZWQKK3NwZWNpYWwtY2hhci1dLnk6Mi43OiBlcnJvcjogJWNvZGUgcXVhbGlmaWVyICdxJyBpcyBub3QgdXNlZAorc3BlY2lhbC1jaGFyLV0ueTozLjc6IGVycm9yOiAlY29kZSBxdWFsaWZpZXIgJ3EnIGlzIG5vdCB1c2VkCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMDQ3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjQKKyNBVF9TVEFSVF8yNQorYXRfZm5fZ3JvdXBfYmFubmVyIDI1ICdpbnB1dC5hdDoxMDYwJyBcCisgICIlZGVmaW5lIGVycm9ycyIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgMQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI1LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworY2F0ID5pbnB1dC1yZWRlZmluZWQueSA8PCdfQVRFT0YnCislZGVmaW5lIHZhciAidmFsdWUxIgorJWRlZmluZSB2YXIgInZhbHVlMSIKKyAlZGVmaW5lIHZhciAidmFsdWUyIgorJWRlZmluZSBzcGVjaWFsMSAiXSIKKyVkZWZpbmUgc3BlY2lhbDIgIlsiCislJQorc3RhcnQ6IDsKK19BVEVPRgorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjEwNzI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQtcmVkZWZpbmVkLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC1yZWRlZmluZWQueSIgImlucHV0LmF0OjEwNzIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC1yZWRlZmluZWQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0LXJlZGVmaW5lZC55OjIuOS0xMTogZXJyb3I6ICVkZWZpbmUgdmFyaWFibGUgJ3ZhcicgcmVkZWZpbmVkCitpbnB1dC1yZWRlZmluZWQueToxLjktMTE6ICAgICBwcmV2aW91cyBkZWZpbml0aW9uCitpbnB1dC1yZWRlZmluZWQueTozLjEwLTEyOiBlcnJvcjogJWRlZmluZSB2YXJpYWJsZSAndmFyJyByZWRlZmluZWQKK2lucHV0LXJlZGVmaW5lZC55OjIuOS0xMTogICAgICBwcmV2aW91cyBkZWZpbml0aW9uCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMDcyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK2NhdCA+aW5wdXQtdW51c2VkLnkgPDwnX0FURU9GJworJWRlZmluZSB2YXIgInZhbHVlIgorJSUKK3N0YXJ0OiA7CitfQVRFT0YKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMDg1OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LXVudXNlZC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQtdW51c2VkLnkiICJpbnB1dC5hdDoxMDg1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQtdW51c2VkLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC11bnVzZWQueToxLjktMTE6IGVycm9yOiAlZGVmaW5lIHZhcmlhYmxlICd2YXInIGlzIG5vdCB1c2VkCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMDg1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjUKKyNBVF9TVEFSVF8yNgorYXRfZm5fZ3JvdXBfYmFubmVyIDI2ICdpbnB1dC5hdDoxMDk2JyBcCisgICIlZGVmaW5lLCAtLWRlZmluZSwgLS1mb3JjZS1kZWZpbmUiICIgICAgICAgICAgICAgICIgMQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI2LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworY2F0ID5za2VsLmMgPDwnX0FURU9GJworbTRfZGl2ZXJ0X3B1c2goMClACitAb3V0cHV0KGI0X3BhcnNlcl9maWxlX25hbWVAKUAKK1t2YXItZGQ6IF1iNF9wZXJjZW50X2RlZmluZV9nZXQoW1t2YXItZGRdXSlbCit2YXItZmY6IF1iNF9wZXJjZW50X2RlZmluZV9nZXQoW1t2YXItZmZdXSlbCit2YXItZGZnOiBdYjRfcGVyY2VudF9kZWZpbmVfZ2V0KFtbdmFyLWRmZ11dKVsKK3Zhci1mZDogXWI0X3BlcmNlbnRfZGVmaW5lX2dldChbW3Zhci1mZF1dKQorbTRfZGl2ZXJ0X3BvcCgwKQorX0FURU9GCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislZGVmaW5lIHZhci1kZmcgImdyYW0iCislJQorc3RhcnQ6IDsKK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjExMTI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtRHZhci1kZD1jbWQtZDEgLUR2YXItZGQ9Y21kLWQyIFxcCisgICAgICAgICAgICAgICAgIC1GdmFyLWZmPWNtZC1mMSAtRnZhci1mZj1jbWQtZjIgXFwKKyAgICAgICAgICAgICAgICAgLUR2YXItZGZnPWNtZC1kIC1GdmFyLWRmZz1jbWQtZiBcXAorICAgICAgICAgICAgICAgICAtRnZhci1mZD1jbWQtZiAtRHZhci1mZD1jbWQtZCAgIFxcCisgICAgICAgICAgICAgICAgIC0tc2tlbGV0b24gLi9za2VsLmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImlucHV0LmF0OjExMTIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLUR2YXItZGQ9Y21kLWQxIC1EdmFyLWRkPWNtZC1kMiBcCisgICAgICAgICAgICAgICAgIC1GdmFyLWZmPWNtZC1mMSAtRnZhci1mZj1jbWQtZjIgXAorICAgICAgICAgICAgICAgICAtRHZhci1kZmc9Y21kLWQgLUZ2YXItZGZnPWNtZC1mIFwKKyAgICAgICAgICAgICAgICAgLUZ2YXItZmQ9Y21kLWYgLUR2YXItZmQ9Y21kLWQgICBcCisgICAgICAgICAgICAgICAgIC0tc2tlbGV0b24gLi9za2VsLmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTExMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjExMTI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1EdmFyLWRkPWNtZC1kMSAtRHZhci1kZD1jbWQtZDIgXFwKKyAgICAgICAgICAgICAgICAgLUZ2YXItZmY9Y21kLWYxIC1GdmFyLWZmPWNtZC1mMiBcXAorICAgICAgICAgICAgICAgICAtRHZhci1kZmc9Y21kLWQgLUZ2YXItZGZnPWNtZC1mIFxcCisgICAgICAgICAgICAgICAgIC1GdmFyLWZkPWNtZC1mIC1EdmFyLWZkPWNtZC1kICAgXFwKKyAgICAgICAgICAgICAgICAgLS1za2VsZXRvbiAuL3NrZWwuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiaW5wdXQuYXQ6MTExMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtRHZhci1kZD1jbWQtZDEgLUR2YXItZGQ9Y21kLWQyIFwKKyAgICAgICAgICAgICAgICAgLUZ2YXItZmY9Y21kLWYxIC1GdmFyLWZmPWNtZC1mMiBcCisgICAgICAgICAgICAgICAgIC1EdmFyLWRmZz1jbWQtZCAtRnZhci1kZmc9Y21kLWYgXAorICAgICAgICAgICAgICAgICAtRnZhci1mZD1jbWQtZiAtRHZhci1mZD1jbWQtZCAgIFwKKyAgICAgICAgICAgICAgICAgLS1za2VsZXRvbiAuL3NrZWwuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMTEyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjExMTI6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJpbnB1dC5hdDoxMTEyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjExMTIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMTEyOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaW5wdXQuYXQ6MTExMiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMTEyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTExMjogYmlzb24gLUR2YXItZGQ9Y21kLWQxIC1EdmFyLWRkPWNtZC1kMiBcXAorICAgICAgICAgICAgICAgICAtRnZhci1mZj1jbWQtZjEgLUZ2YXItZmY9Y21kLWYyIFxcCisgICAgICAgICAgICAgICAgIC1EdmFyLWRmZz1jbWQtZCAtRnZhci1kZmc9Y21kLWYgXFwKKyAgICAgICAgICAgICAgICAgLUZ2YXItZmQ9Y21kLWYgLUR2YXItZmQ9Y21kLWQgICBcXAorICAgICAgICAgICAgICAgICAtLXNrZWxldG9uIC4vc2tlbC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJpbnB1dC5hdDoxMTEyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1EdmFyLWRkPWNtZC1kMSAtRHZhci1kZD1jbWQtZDIgXAorICAgICAgICAgICAgICAgICAtRnZhci1mZj1jbWQtZjEgLUZ2YXItZmY9Y21kLWYyIFwKKyAgICAgICAgICAgICAgICAgLUR2YXItZGZnPWNtZC1kIC1GdmFyLWRmZz1jbWQtZiBcCisgICAgICAgICAgICAgICAgIC1GdmFyLWZkPWNtZC1mIC1EdmFyLWZkPWNtZC1kICAgXAorICAgICAgICAgICAgICAgICAtLXNrZWxldG9uIC4vc2tlbC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTExMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjExMTc6IGNhdCBpbnB1dC50YWIuYyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImlucHV0LmF0OjExMTciCisoICRhdF9jaGVja190cmFjZTsgY2F0IGlucHV0LnRhYi5jCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAidmFyLWRkOiBjbWQtZDIKK3Zhci1mZjogY21kLWYyCit2YXItZGZnOiBjbWQtZgordmFyLWZkOiBjbWQtZAorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTExNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dC1kZy55IDw8J19BVEVPRicKKyVkZWZpbmUgdmFyICJncmFtIgorJSUKK3N0YXJ0OiA7CitfQVRFT0YKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTEyOTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtRHZhcj1jbWQtZCBpbnB1dC1kZy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLUR2YXI9Y21kLWQgaW5wdXQtZGcueSIgImlucHV0LmF0OjExMjkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtRHZhcj1jbWQtZCBpbnB1dC1kZy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQtZGcueToxLjktMTE6IGVycm9yOiAlZGVmaW5lIHZhcmlhYmxlICd2YXInIHJlZGVmaW5lZAorPGNvbW1hbmQgbGluZT46MTogICAgICBwcmV2aW91cyBkZWZpbml0aW9uCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMTI5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK2NhdCA+aW5wdXQtZGcueSA8PCdfQVRFT0YnCislZGVmaW5lIHZhciAiZ3JhbSIKKyUlCitzdGFydDogOworX0FURU9GCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjExMzk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCAtRHZhcj1jbWQtZCBpbnB1dC1kZy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCAtRHZhcj1jbWQtZCBpbnB1dC1kZy55IiAiaW5wdXQuYXQ6MTEzOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgLUR2YXI9Y21kLWQgaW5wdXQtZGcueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0LWRnLnk6MS45LTExOiBlcnJvcjogJWRlZmluZSB2YXJpYWJsZSAndmFyJyByZWRlZmluZWQKKyAlZGVmaW5lIHZhciBcImdyYW1cIgorICAgICAgICAgXl5eCis8Y29tbWFuZCBsaW5lPjoyOiAgICAgIHByZXZpb3VzIGRlZmluaXRpb24KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjExMzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5pbnB1dC11bnVzZWQueSA8PCdfQVRFT0YnCislJQorc3RhcnQ6IDsKK19BVEVPRgorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMTUwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1EdW51c2VkLWQgLUZ1bnVzZWQtZiBpbnB1dC11bnVzZWQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1EdW51c2VkLWQgLUZ1bnVzZWQtZiBpbnB1dC11bnVzZWQueSIgImlucHV0LmF0OjExNTAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtRHVudXNlZC1kIC1GdW51c2VkLWYgaW5wdXQtdW51c2VkLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICI8Y29tbWFuZCBsaW5lPjoxOiBlcnJvcjogJWRlZmluZSB2YXJpYWJsZSAndW51c2VkLWQnIGlzIG5vdCB1c2VkCis8Y29tbWFuZCBsaW5lPjoyOiBlcnJvcjogJWRlZmluZSB2YXJpYWJsZSAndW51c2VkLWYnIGlzIG5vdCB1c2VkCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMTUwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjYKKyNBVF9TVEFSVF8yNworYXRfZm5fZ3JvdXBfYmFubmVyIDI3ICdpbnB1dC5hdDoxMTYxJyBcCisgICIlZGVmaW5lIEJvb2xlYW4gdmFyaWFibGVzIiAiICAgICAgICAgICAgICAgICAgICAgICIgMQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI3LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworY2F0ID5JbnB1dC55IDw8J19BVEVPRicKKyVsYW5ndWFnZSAiSmF2YSIKKyVkZWZpbmUgcHVibGljICJtYXliZSIKKyVkZWZpbmUgcGFyc2VyX2NsYXNzX25hbWUgIklucHV0IgorJSUKK3N0YXJ0OiA7CitfQVRFT0YKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMTcxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIElucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBJbnB1dC55IiAiaW5wdXQuYXQ6MTE3MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIElucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJJbnB1dC55OjIuOS0xNDogZXJyb3I6IGludmFsaWQgdmFsdWUgZm9yICVkZWZpbmUgQm9vbGVhbiB2YXJpYWJsZSAncHVibGljJworIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTE3MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzI3CisjQVRfU1RBUlRfMjgKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyOCAnaW5wdXQuYXQ6MTE4MScgXAorICAiJWRlZmluZSBlbnVtIHZhcmlhYmxlcyIgIiAgICAgICAgICAgICAgICAgICAgICAgICAiIDEKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyOC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKyMgRnJvbnQtZW5kLgorY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVkZWZpbmUgbHIuZGVmYXVsdC1yZWR1Y3Rpb25zIGJvZ3VzCislJQorc3RhcnQ6IDsKK19BVEVPRgorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMTg5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IiAiaW5wdXQuYXQ6MTE4OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OjEuOS0yOTogZXJyb3I6IGludmFsaWQgdmFsdWUgZm9yICVkZWZpbmUgdmFyaWFibGUgJ2xyLmRlZmF1bHQtcmVkdWN0aW9ucyc6ICdib2d1cycKK2lucHV0Lnk6MS45LTI5OiAgICAgYWNjZXB0ZWQgdmFsdWU6ICdtb3N0JworaW5wdXQueToxLjktMjk6ICAgICBhY2NlcHRlZCB2YWx1ZTogJ2NvbnNpc3RlbnQnCitpbnB1dC55OjEuOS0yOTogICAgIGFjY2VwdGVkIHZhbHVlOiAnYWNjZXB0aW5nJworIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTE4OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIEJhY2stZW5kLgorIyBGSVhNRTogdGhlc2Ugc2hvdWxkIGJlIGluZGVudGVkLCBidXQgd2Ugc2hvdWxkbid0IG1lc3Mgd2l0aCB0aGUgbTQgeWV0CitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWRlZmluZSBhcGkucHVzaC1wdWxsIG5laXRoZXIKKyUlCitzdGFydDogOworX0FURU9GCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjEyMDM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkiICJpbnB1dC5hdDoxMjAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6MS45LTIxOiBlcnJvcjogaW52YWxpZCB2YWx1ZSBmb3IgJWRlZmluZSB2YXJpYWJsZSAnYXBpLnB1c2gtcHVsbCc6ICduZWl0aGVyJworaW5wdXQueToxLjktMjE6IGVycm9yOiBhY2NlcHRlZCB2YWx1ZTogJ3B1bGwnCitpbnB1dC55OjEuOS0yMTogZXJyb3I6IGFjY2VwdGVkIHZhbHVlOiAncHVzaCcKK2lucHV0Lnk6MS45LTIxOiBlcnJvcjogYWNjZXB0ZWQgdmFsdWU6ICdib3RoJworIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTIwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzI4CisjQVRfU1RBUlRfMjkKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyOSAnaW5wdXQuYXQ6MTIxNicgXAorICAiJWRlZmluZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IiAiICAgICAgICAgICAgICAgICAiIDEKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyOS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKyMgVGhlIGVycm9yIG1lc3NhZ2VzIHRlbGwgdXMgd2hldGhlciB1bmRlcnNjb3JlcyBpbiB0aGVzZSB2YXJpYWJsZXMgYXJlCisjIGJlaW5nIGNvbnZlcnRlZCB0byBkYXNoZXMuCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislZGVmaW5lIGFwaS5wdXNoX3B1bGwgIm5laXRoZXIiCislJQorc3RhcnQ6IDsKK19BVEVPRgorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMjI2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IiAiaW5wdXQuYXQ6MTIyNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OjEuOS0yMTogZXJyb3I6IGludmFsaWQgdmFsdWUgZm9yICVkZWZpbmUgdmFyaWFibGUgJ2FwaS5wdXNoLXB1bGwnOiAnbmVpdGhlcicKK2lucHV0Lnk6MS45LTIxOiBlcnJvcjogYWNjZXB0ZWQgdmFsdWU6ICdwdWxsJworaW5wdXQueToxLjktMjE6IGVycm9yOiBhY2NlcHRlZCB2YWx1ZTogJ3B1c2gnCitpbnB1dC55OjEuOS0yMTogZXJyb3I6IGFjY2VwdGVkIHZhbHVlOiAnYm90aCcKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjEyMjYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVkZWZpbmUgbHIua2VlcF91bnJlYWNoYWJsZV9zdGF0ZXMgbWF5YmUKKyUlCitzdGFydDogOworX0FURU9GCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjEyMzg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkiICJpbnB1dC5hdDoxMjM4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6MS45LTM0OiBlcnJvcjogaW52YWxpZCB2YWx1ZSBmb3IgJWRlZmluZSBCb29sZWFuIHZhcmlhYmxlICdsci5rZWVwLXVucmVhY2hhYmxlLXN0YXRlcycKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjEyMzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVkZWZpbmUgZm9vX2JhciAiYmF6IgorJSUKK3N0YXJ0OiA7CitfQVRFT0YKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTI0NzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSIgImlucHV0LmF0OjEyNDciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueToxLjktMTU6IGVycm9yOiAlZGVmaW5lIHZhcmlhYmxlICdmb29fYmFyJyBpcyBub3QgdXNlZAorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTI0NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzI5CisjQVRfU1RBUlRfMzAKK2F0X2ZuX2dyb3VwX2Jhbm5lciAzMCAnaW5wdXQuYXQ6MTI1NycgXAorICAiVW51c2VkICVkZWZpbmUgYXBpLnB1cmUiICIgICAgICAgICAgICAgICAgICAgICAgICAiIDEKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIzMC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKyMgQVRfQ0hFQ0tfQVBJX1BVUkUoREVDTFMsIFZBTFVFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1ha2Ugc3VyZSBCaXNvbiByZXBvcnRzIHRoYXQgYCVkZWZpbmUgYXBpLnB1cmUgVkFMVUUnIGlzIHVudXNlZCB3aGVuIERFQ0xTCisjIGFyZSBzcGVjaWZpZWQuCisKKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWRlZmluZSBhcGkucHVyZQorJWxhbmd1YWdlICJjKysiICVkZWZpbmVzCislJQorc3RhcnQ6IDsKK19BVEVPRgorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjEyNzc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkiICJpbnB1dC5hdDoxMjc3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6MS45LTE2OiBlcnJvcjogJWRlZmluZSB2YXJpYWJsZSAnYXBpLnB1cmUnIGlzIG5vdCB1c2VkCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMjc3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVkZWZpbmUgYXBpLnB1cmUgZmFsc2UKKyVsYW5ndWFnZSAiYysrIiAlZGVmaW5lcworJSUKK3N0YXJ0OiA7CitfQVRFT0YKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMjc4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IiAiaW5wdXQuYXQ6MTI3OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OjEuOS0xNjogZXJyb3I6ICVkZWZpbmUgdmFyaWFibGUgJ2FwaS5wdXJlJyBpcyBub3QgdXNlZAorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTI3OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislZGVmaW5lIGFwaS5wdXJlICIiCislbGFuZ3VhZ2UgImMrKyIgJWRlZmluZXMgJWdsci1wYXJzZXIKKyUlCitzdGFydDogOworX0FURU9GCisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTI3OTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSIgImlucHV0LmF0OjEyNzkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueToxLjktMTY6IGVycm9yOiAlZGVmaW5lIHZhcmlhYmxlICdhcGkucHVyZScgaXMgbm90IHVzZWQKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjEyNzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWRlZmluZSBhcGkucHVyZSBmYWxzZQorJWxhbmd1YWdlICJjKysiICVkZWZpbmVzICVnbHItcGFyc2VyCislJQorc3RhcnQ6IDsKK19BVEVPRgorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjEyODA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkiICJpbnB1dC5hdDoxMjgwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6MS45LTE2OiBlcnJvcjogJWRlZmluZSB2YXJpYWJsZSAnYXBpLnB1cmUnIGlzIG5vdCB1c2VkCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMjgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVkZWZpbmUgYXBpLnB1cmUgdHJ1ZQorJWxhbmd1YWdlICJqYXZhIgorJSUKK3N0YXJ0OiA7CitfQVRFT0YKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMjgxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IiAiaW5wdXQuYXQ6MTI4MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OjEuOS0xNjogZXJyb3I6ICVkZWZpbmUgdmFyaWFibGUgJ2FwaS5wdXJlJyBpcyBub3QgdXNlZAorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTI4MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislZGVmaW5lIGFwaS5wdXJlIGZhbHNlCislbGFuZ3VhZ2UgImphdmEiCislJQorc3RhcnQ6IDsKK19BVEVPRgorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjEyODI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkiICJpbnB1dC5hdDoxMjgyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6MS45LTE2OiBlcnJvcjogJWRlZmluZSB2YXJpYWJsZSAnYXBpLnB1cmUnIGlzIG5vdCB1c2VkCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMjgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8zMAorI0FUX1NUQVJUXzMxCithdF9mbl9ncm91cF9iYW5uZXIgMzEgJ2lucHV0LmF0OjEyOTAnIFwKKyAgIkMrKyBuYW1lc3BhY2UgcmVmZXJlbmNlIGVycm9ycyIgIiAgICAgICAgICAgICAgICAgIiAxCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMzEuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisjIEFUX0NIRUNLX05BTUVTUEFDRV9FUlJPUihOQU1FU1BBQ0UtREVDTCwgRVJST1IsIFtFUlJPUl0sIC4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNYWtlIHN1cmUgQmlzb24gcmVwb3J0cyBhbGwgRVJST1IncyBmb3IgJWRlZmluZSBuYW1lc3BhY2UgIk5BTUVTUEFDRS1ERUNMIi4KKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislbGFuZ3VhZ2UgIkMrKyIKKyVkZWZpbmVzCislZGVmaW5lIG5hbWVzcGFjZSAiIgorJSUKK3N0YXJ0OiA7CitfQVRFT0YKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMzExOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IiAiaW5wdXQuYXQ6MTMxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OjMuOS0xNzogZXJyb3I6IG5hbWVzcGFjZSByZWZlcmVuY2UgaXMgZW1wdHkKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjEzMTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWxhbmd1YWdlICJDKysiCislZGVmaW5lcworJWRlZmluZSBuYW1lc3BhY2UgIiAJCSAgCSAJIgorJSUKK3N0YXJ0OiA7CitfQVRFT0YKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMzEzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IiAiaW5wdXQuYXQ6MTMxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OjMuOS0xNzogZXJyb3I6IG5hbWVzcGFjZSByZWZlcmVuY2UgaXMgZW1wdHkKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjEzMTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWxhbmd1YWdlICJDKysiCislZGVmaW5lcworJWRlZmluZSBuYW1lc3BhY2UgImZvbzo6OjpiYXIiCislJQorc3RhcnQ6IDsKK19BVEVPRgorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjEzMTU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkiICJpbnB1dC5hdDoxMzE1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6My45LTE3OiBlcnJvcjogbmFtZXNwYWNlIHJlZmVyZW5jZSBoYXMgY29uc2VjdXRpdmUgXCI6OlwiCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMzE1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVsYW5ndWFnZSAiQysrIgorJWRlZmluZXMKKyVkZWZpbmUgbmFtZXNwYWNlICJmb286OiAJOjpiYXIiCislJQorc3RhcnQ6IDsKK19BVEVPRgorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjEzMTc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkiICJpbnB1dC5hdDoxMzE3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6My45LTE3OiBlcnJvcjogbmFtZXNwYWNlIHJlZmVyZW5jZSBoYXMgY29uc2VjdXRpdmUgXCI6OlwiCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMzE3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVsYW5ndWFnZSAiQysrIgorJWRlZmluZXMKKyVkZWZpbmUgbmFtZXNwYWNlICI6Ojo6YmFyIgorJSUKK3N0YXJ0OiA7CitfQVRFT0YKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMzE5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IiAiaW5wdXQuYXQ6MTMxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OjMuOS0xNzogZXJyb3I6IG5hbWVzcGFjZSByZWZlcmVuY2UgaGFzIGNvbnNlY3V0aXZlIFwiOjpcIgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTMxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislbGFuZ3VhZ2UgIkMrKyIKKyVkZWZpbmVzCislZGVmaW5lIG5hbWVzcGFjZSAiOjogOjpiYXIiCislJQorc3RhcnQ6IDsKK19BVEVPRgorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjEzMjE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkiICJpbnB1dC5hdDoxMzIxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6My45LTE3OiBlcnJvcjogbmFtZXNwYWNlIHJlZmVyZW5jZSBoYXMgY29uc2VjdXRpdmUgXCI6OlwiCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMzIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVsYW5ndWFnZSAiQysrIgorJWRlZmluZXMKKyVkZWZpbmUgbmFtZXNwYWNlICJmb286OmJhcjo6CTo6IgorJSUKK3N0YXJ0OiA7CitfQVRFT0YKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMzIzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IiAiaW5wdXQuYXQ6MTMyMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OjMuOS0xNzogZXJyb3I6IG5hbWVzcGFjZSByZWZlcmVuY2UgaGFzIGNvbnNlY3V0aXZlIFwiOjpcIgoraW5wdXQueTozLjktMTc6IGVycm9yOiBuYW1lc3BhY2UgcmVmZXJlbmNlIGhhcyBhIHRyYWlsaW5nIFwiOjpcIgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTMyMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislbGFuZ3VhZ2UgIkMrKyIKKyVkZWZpbmVzCislZGVmaW5lIG5hbWVzcGFjZSAiZm9vOjpiYXI6OiIKKyUlCitzdGFydDogOworX0FURU9GCisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTMyNjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSIgImlucHV0LmF0OjEzMjYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueTozLjktMTc6IGVycm9yOiBuYW1lc3BhY2UgcmVmZXJlbmNlIGhhcyBhIHRyYWlsaW5nIFwiOjpcIgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTMyNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislbGFuZ3VhZ2UgIkMrKyIKKyVkZWZpbmVzCislZGVmaW5lIG5hbWVzcGFjZSAiZm9vOjpiYXI6OiAJIgorJSUKK3N0YXJ0OiA7CitfQVRFT0YKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMzI4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IiAiaW5wdXQuYXQ6MTMyOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OjMuOS0xNzogZXJyb3I6IG5hbWVzcGFjZSByZWZlcmVuY2UgaGFzIGEgdHJhaWxpbmcgXCI6OlwiCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMzI4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVsYW5ndWFnZSAiQysrIgorJWRlZmluZXMKKyVkZWZpbmUgbmFtZXNwYWNlICI6OiIKKyUlCitzdGFydDogOworX0FURU9GCisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTMzMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSIgImlucHV0LmF0OjEzMzAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueTozLjktMTc6IGVycm9yOiBuYW1lc3BhY2UgcmVmZXJlbmNlIGhhcyBhIHRyYWlsaW5nIFwiOjpcIgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTMzMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMzEKKyNBVF9TVEFSVF8zMgorYXRfZm5fZ3JvdXBfYmFubmVyIDMyICdpbnB1dC5hdDoxMzQ2JyBcCisgICJCYWQgY2hhcmFjdGVyIGxpdGVyYWxzIiAiICAgICAgICAgICAgICAgICAgICAgICAgICIgMQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjMyLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworY2F0ID5lbXB0eS55IDw8J19BVEVPRicKKyUlCitzdGFydDogJyc7CitzdGFydDogJworX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMzUzOiBcJFBFUkwgLWUgXCJwcmludCAnc3RhcnQ6IFxcJyc7XCIgPj4gZW1wdHkueSB8fCBleGl0IDc3IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkUEVSTCAtZSBcInByaW50ICdzdGFydDogXFwnJztcIiA+PiBlbXB0eS55IHx8IGV4aXQgNzciICJpbnB1dC5hdDoxMzUzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1lICJwcmludCAnc3RhcnQ6IFwnJzsiID4+IGVtcHR5LnkgfHwgZXhpdCA3NworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMzUzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxMzU1OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGVtcHR5LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBlbXB0eS55IiAiaW5wdXQuYXQ6MTM1NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGVtcHR5LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJlbXB0eS55OjIuOC05OiB3YXJuaW5nOiBlbXB0eSBjaGFyYWN0ZXIgbGl0ZXJhbAorZW1wdHkueTozLjgtNC4wOiB3YXJuaW5nOiBlbXB0eSBjaGFyYWN0ZXIgbGl0ZXJhbAorZW1wdHkueTozLjgtNC4wOiBlcnJvcjogbWlzc2luZyBcIidcIiBhdCBlbmQgb2YgbGluZQorZW1wdHkueTo0Ljg6IHdhcm5pbmc6IGVtcHR5IGNoYXJhY3RlciBsaXRlcmFsCitlbXB0eS55OjQuODogZXJyb3I6IG1pc3NpbmcgXCInXCIgYXQgZW5kIG9mIGZpbGUKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjEzNTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID50d28ueSA8PCdfQVRFT0YnCislJQorc3RhcnQ6ICdhYic7CitzdGFydDogJ2FiCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjEzNjg6IFwkUEVSTCAtZSBcInByaW50ICdzdGFydDogXFwnYWInO1wiID4+IHR3by55IHx8IGV4aXQgNzciCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRQRVJMIC1lIFwicHJpbnQgJ3N0YXJ0OiBcXCdhYic7XCIgPj4gdHdvLnkgfHwgZXhpdCA3NyIgImlucHV0LmF0OjEzNjgiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLWUgInByaW50ICdzdGFydDogXCdhYic7IiA+PiB0d28ueSB8fCBleGl0IDc3CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjEzNjgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjEzNzA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gdHdvLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiB0d28ueSIgImlucHV0LmF0OjEzNzAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiB0d28ueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInR3by55OjIuOC0xMTogd2FybmluZzogZXh0cmEgY2hhcmFjdGVycyBpbiBjaGFyYWN0ZXIgbGl0ZXJhbAordHdvLnk6My44LTQuMDogd2FybmluZzogZXh0cmEgY2hhcmFjdGVycyBpbiBjaGFyYWN0ZXIgbGl0ZXJhbAordHdvLnk6My44LTQuMDogZXJyb3I6IG1pc3NpbmcgXCInXCIgYXQgZW5kIG9mIGxpbmUKK3R3by55OjQuOC0xMDogd2FybmluZzogZXh0cmEgY2hhcmFjdGVycyBpbiBjaGFyYWN0ZXIgbGl0ZXJhbAordHdvLnk6NC44LTEwOiBlcnJvcjogbWlzc2luZyBcIidcIiBhdCBlbmQgb2YgZmlsZQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTM3MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCitjYXQgPnRocmVlLnkgPDwnX0FURU9GJworJSUKK3N0YXJ0OiAnYWJjJzsKK3N0YXJ0OiAnYWJjCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjEzODM6IFwkUEVSTCAtZSBcInByaW50ICdzdGFydDogXFwnYWJjJztcIiA+PiB0aHJlZS55IHx8IGV4aXQgNzciCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRQRVJMIC1lIFwicHJpbnQgJ3N0YXJ0OiBcXCdhYmMnO1wiID4+IHRocmVlLnkgfHwgZXhpdCA3NyIgImlucHV0LmF0OjEzODMiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLWUgInByaW50ICdzdGFydDogXCdhYmMnOyIgPj4gdGhyZWUueSB8fCBleGl0IDc3CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjEzODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjEzODU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gdGhyZWUueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIHRocmVlLnkiICJpbnB1dC5hdDoxMzg1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gdGhyZWUueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInRocmVlLnk6Mi44LTEyOiB3YXJuaW5nOiBleHRyYSBjaGFyYWN0ZXJzIGluIGNoYXJhY3RlciBsaXRlcmFsCit0aHJlZS55OjMuOC00LjA6IHdhcm5pbmc6IGV4dHJhIGNoYXJhY3RlcnMgaW4gY2hhcmFjdGVyIGxpdGVyYWwKK3RocmVlLnk6My44LTQuMDogZXJyb3I6IG1pc3NpbmcgXCInXCIgYXQgZW5kIG9mIGxpbmUKK3RocmVlLnk6NC44LTExOiB3YXJuaW5nOiBleHRyYSBjaGFyYWN0ZXJzIGluIGNoYXJhY3RlciBsaXRlcmFsCit0aHJlZS55OjQuOC0xMTogZXJyb3I6IG1pc3NpbmcgXCInXCIgYXQgZW5kIG9mIGZpbGUKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjEzODUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8zMgorI0FUX1NUQVJUXzMzCithdF9mbl9ncm91cF9iYW5uZXIgMzMgJ2lucHV0LmF0OjEzOTknIFwKKyAgIkJhZCBlc2NhcGVzIGluIGxpdGVyYWxzIiAiICAgICAgICAgICAgICAgICAgICAgICAgIiAxCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMzMuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJSUKK3N0YXJ0OiAnXDc3NycgJ1wwJyAnXHhmZmYnICdceDAnCisgICAgICAgJ1x1ZmZmZicgJ1x1MDAwMCcgJ1xVZmZmZmZmZmYnICdcVTAwMDAwMDAwJworICAgICAgICdcICcgJ1xBJzsKK19BVEVPRgorCisKKyMgSXQgaXMgbm90IGVhc3kgdG8gY3JlYXRlIHNwZWNpYWwgY2hhcmFjdGVycywgd2UgY2Fubm90IGV2ZW4gdHJ1c3QgdHIuCisjIEJlc2lkZSB3ZSBjYW5ub3QgZXZlbiBleHBlY3QgImVjaG8gJ1wwJyIgdG8gb3V0cHV0IHR3byBjaGFyYWN0ZXJzCisjICh3ZWxsIHRocmVlIHdpdGggXG4pOiBhdCBsZWFzdCBCYXNoIDMuMiBjb252ZXJ0cyB0aGUgdHdvLWNoYXJhY3RlcgorIyBzZXF1ZW5jZSAiXDAiIGludG8gYSBzaW5nbGUgTlVMIGNoYXJhY3Rlci4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNDEyOiBcJFBFUkwgLWUgJ3ByaW50IFwic3RhcnQ6IFxcXCJcXFxcXFx0XFxcXFxcZlxcXFxcXDBcXFxcXFwxXFxcIiA7XCI7JyA+PiBpbnB1dC55IFxcCisgICAgICAgICAgIHx8IGV4aXQgNzciCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJpbnB1dC5hdDoxNDEyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1lICdwcmludCAic3RhcnQ6IFwiXFxcdFxcXGZcXFwwXFxcMVwiIDsiOycgPj4gaW5wdXQueSBcCisgICAgICAgICAgIHx8IGV4aXQgNzcKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQxMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQxNTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSIgImlucHV0LmF0OjE0MTUiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueToyLjktMTI6IGVycm9yOiBpbnZhbGlkIG51bWJlciBhZnRlciBcXC1lc2NhcGU6IDc3NworaW5wdXQueToyLjgtMTM6IHdhcm5pbmc6IGVtcHR5IGNoYXJhY3RlciBsaXRlcmFsCitpbnB1dC55OjIuMTYtMTc6IGVycm9yOiBpbnZhbGlkIG51bWJlciBhZnRlciBcXC1lc2NhcGU6IDAKK2lucHV0Lnk6Mi4xNS0xODogd2FybmluZzogZW1wdHkgY2hhcmFjdGVyIGxpdGVyYWwKK2lucHV0Lnk6Mi4yMS0yNTogZXJyb3I6IGludmFsaWQgbnVtYmVyIGFmdGVyIFxcLWVzY2FwZTogeGZmZgoraW5wdXQueToyLjIwLTI2OiB3YXJuaW5nOiBlbXB0eSBjaGFyYWN0ZXIgbGl0ZXJhbAoraW5wdXQueToyLjI5LTMxOiBlcnJvcjogaW52YWxpZCBudW1iZXIgYWZ0ZXIgXFwtZXNjYXBlOiB4MAoraW5wdXQueToyLjI4LTMyOiB3YXJuaW5nOiBlbXB0eSBjaGFyYWN0ZXIgbGl0ZXJhbAoraW5wdXQueTozLjktMTQ6IGVycm9yOiBpbnZhbGlkIG51bWJlciBhZnRlciBcXC1lc2NhcGU6IHVmZmZmCitpbnB1dC55OjMuOC0xNTogd2FybmluZzogZW1wdHkgY2hhcmFjdGVyIGxpdGVyYWwKK2lucHV0Lnk6My4xOC0yMzogZXJyb3I6IGludmFsaWQgbnVtYmVyIGFmdGVyIFxcLWVzY2FwZTogdTAwMDAKK2lucHV0Lnk6My4xNy0yNDogd2FybmluZzogZW1wdHkgY2hhcmFjdGVyIGxpdGVyYWwKK2lucHV0Lnk6My4yNy0zNjogZXJyb3I6IGludmFsaWQgbnVtYmVyIGFmdGVyIFxcLWVzY2FwZTogVWZmZmZmZmZmCitpbnB1dC55OjMuMjYtMzc6IHdhcm5pbmc6IGVtcHR5IGNoYXJhY3RlciBsaXRlcmFsCitpbnB1dC55OjMuNDAtNDk6IGVycm9yOiBpbnZhbGlkIG51bWJlciBhZnRlciBcXC1lc2NhcGU6IFUwMDAwMDAwMAoraW5wdXQueTozLjM5LTUwOiB3YXJuaW5nOiBlbXB0eSBjaGFyYWN0ZXIgbGl0ZXJhbAoraW5wdXQueTo0LjktMTA6IGVycm9yOiBpbnZhbGlkIGNoYXJhY3RlciBhZnRlciBcXC1lc2NhcGU6ICcgJworaW5wdXQueTo0LjgtMTE6IHdhcm5pbmc6IGVtcHR5IGNoYXJhY3RlciBsaXRlcmFsCitpbnB1dC55OjQuMTQtMTU6IGVycm9yOiBpbnZhbGlkIGNoYXJhY3RlciBhZnRlciBcXC1lc2NhcGU6IEEKK2lucHV0Lnk6NC4xMy0xNjogd2FybmluZzogZW1wdHkgY2hhcmFjdGVyIGxpdGVyYWwKK2lucHV0Lnk6NS45LTE2OiBlcnJvcjogaW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgXFwtZXNjYXBlOiBcXHQKK2lucHV0Lnk6NS4xNzogZXJyb3I6IGludmFsaWQgY2hhcmFjdGVyIGFmdGVyIFxcLWVzY2FwZTogXFxmCitpbnB1dC55OjUuMTg6IGVycm9yOiBpbnZhbGlkIGNoYXJhY3RlciBhZnRlciBcXC1lc2NhcGU6IFxcMAoraW5wdXQueTo1LjE5OiBlcnJvcjogaW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgXFwtZXNjYXBlOiBcXDAwMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQxNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzMzCisjQVRfU1RBUlRfMzQKK2F0X2ZuX2dyb3VwX2Jhbm5lciAzNCAnaW5wdXQuYXQ6MTQ0OCcgXAorICAiTEFDOiBFcnJvcnMgZm9yICVkZWZpbmUiICIgICAgICAgICAgICAgICAgICAgICAgICAiIDEKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIzNC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislJQorc3RhcnQ6IDsKK19BVEVPRgorCisKKyMgcGFyc2UubGFjLiogb3B0aW9ucyBhcmUgdXNlbGVzcyBpZiBMQUMgaXNuJ3QgYWN0dWFsbHkgYWN0aXZhdGVkLgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQ1NjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtRHBhcnNlLmxhYy5lcy1jYXBhY2l0eS1pbml0aWFsPTEgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1EcGFyc2UubGFjLmVzLWNhcGFjaXR5LWluaXRpYWw9MSBpbnB1dC55IiAiaW5wdXQuYXQ6MTQ1NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1EcGFyc2UubGFjLmVzLWNhcGFjaXR5LWluaXRpYWw9MSBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiPGNvbW1hbmQgbGluZT46MTogZXJyb3I6ICVkZWZpbmUgdmFyaWFibGUgJ3BhcnNlLmxhYy5lcy1jYXBhY2l0eS1pbml0aWFsJyBpcyBub3QgdXNlZAorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQ1NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQ2MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtRHBhcnNlLmxhYy5tZW1vcnktdHJhY2U9ZnVsbCBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLURwYXJzZS5sYWMubWVtb3J5LXRyYWNlPWZ1bGwgaW5wdXQueSIgImlucHV0LmF0OjE0NjAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtRHBhcnNlLmxhYy5tZW1vcnktdHJhY2U9ZnVsbCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiPGNvbW1hbmQgbGluZT46MTogZXJyb3I6ICVkZWZpbmUgdmFyaWFibGUgJ3BhcnNlLmxhYy5tZW1vcnktdHJhY2UnIGlzIG5vdCB1c2VkCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNDYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMzQKKyNBVF9TVEFSVF8zNQorYXRfZm5fZ3JvdXBfYmFubmVyIDM1ICdpbnB1dC5hdDoxNDcxJyBcCisgICItV2Vycm9yIGlzIG5vdCBhZmZlY3RlZCBieSAtV25vbmUgYW5kIC1XYWxsIiAiICAgICIgMQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjM1LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyUlCitmb28tYmFyOiA7CitfQVRFT0YKKworCisjIC1XZXJyb3IgaXMgbm90IGVuYWJsZWQgYnkgLVdhbGwgb3IgZXF1aXZhbGVudC4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQ3OTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1XYWxsIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJpbnB1dC5hdDoxNDc5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1XYWxsIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE0NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNDc5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtV2FsbCBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1XYWxsIGlucHV0LnkiICJpbnB1dC5hdDoxNDc5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1XYWxsIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE0NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQ3OTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImlucHV0LmF0OjE0NzkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQ3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE0Nzk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJpbnB1dC5hdDoxNDc5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE0NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNDc5OiBiaXNvbiAtV2FsbCBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiaW5wdXQuYXQ6MTQ3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtV2FsbCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueToyLjEtNzogd2FybmluZzogUE9TSVggWWFjYyBmb3JiaWRzIGRhc2hlcyBpbiBzeW1ib2wgbmFtZXM6IGZvby1iYXIKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE0NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisjIERlZmluaW5nIFBPU0lYTFlfQ09SUkVDVCBjYXVzZXMgYmlzb24gdG8gY29tcGxhaW4gaWYgb3B0aW9ucyBhcmUKKyMgYWRkZWQgYWZ0ZXIgdGhlIGdyYW1tYXIgZmlsZSBuYW1lLCBzbyBza2lwIHRoZXNlIGNoZWNrcyBpbiB0aGF0CisjIGNhc2UuCitpZiB0ZXN0ICIkUE9TSVhMWV9DT1JSRUNUX0lTX0VYUE9SVEVEIiA9IGZhbHNlOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworCisgICMgVG8gYXZvaWQgZXhwYW5kaW5nIGl0IHJlcGVhdGVkbHksIHN0b3JlIHNwZWNpZmllZCBzdGRvdXQuCisgIDogPmV4cG91dAorCisgICMgUnVuIHdpdGggLVdlcnJvci4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE0Nzk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLVdhbGwgaW5wdXQueSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLVdhbGwgaW5wdXQueSAtV2Vycm9yIiAiaW5wdXQuYXQ6MTQ3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1XYWxsIGlucHV0LnkgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQ3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIEJ1aWxkIGV4cGVjdGVkIHN0ZGVyciB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSAid2FybmluZ3MgYmVpbmcKKyAgIyB0cmVhdGVkIGFzIGVycm9ycyIgbWVzc2FnZS4KKyAgY2F0ID5hdC1iaXNvbi1jaGVjay13YXJuaW5ncyA8PCdfQVRFT0YnCitpbnB1dC55OjIuMS03OiB3YXJuaW5nOiBQT1NJWCBZYWNjIGZvcmJpZHMgZGFzaGVzIGluIHN5bWJvbCBuYW1lczogZm9vLWJhcgorX0FURU9GCisKKyAgYXRfYmlzb25fY2hlY2tfZmlyc3Q9YHNlZCAtbiBcCisgICAgJy86IHdhcm5pbmc6IC97PTtxO30nIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzYAorICA6ICR7YXRfYmlzb25fY2hlY2tfZmlyc3Q6PTF9CisgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcD1gc2VkIC1uIFwKKyAgICAnL2NvbmZsaWN0czogWzAtOV0uKnJlZHVjZSQvez07cTt9JyBhdC1iaXNvbi1jaGVjay13YXJuaW5nc2AKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcDo9MX0KKyAgaWYgdGVzdCAkYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wIC1sdCAkYXRfYmlzb25fY2hlY2tfZmlyc3Q7IHRoZW4KKyAgICBhdF9iaXNvbl9jaGVja19maXJzdD0kYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wCisgIGZpCisgIGlmIHRlc3QgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0IC1ndCAxOyB0aGVuCisgICAgc2VkIC1uICIxLGBleHByICRhdF9iaXNvbl9jaGVja19maXJzdCAtIDFgInAgXAorICAgICAgYXQtYmlzb24tY2hlY2std2FybmluZ3MgPiBleHBlcnIKKyAgZmkKKyAgZWNobyAnYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzJyA+PiBleHBlcnIKKworICAjIEZpbmlzaCBidWlsZGluZyBleHBlY3RlZCBzdGRlcnIgYW5kIGNoZWNrLiAgVW5saWtlIHdhcm5pbmdzLAorICAjIGNvbXBsYWludHMgY2F1c2UgYmlzb24gdG8gZXhpdCBlYXJseS4gIFRodXMsIHdpdGggLVdlcnJvciwgYmlzb24KKyAgIyBkb2VzIG5vdCBuZWNlc3NhcmlseSByZXBvcnQgYWxsIHdhcm5pbmdzIHRoYXQgaXQgZG9lcyB3aXRob3V0CisgICMgLVdlcnJvciwgYnV0IGl0IGF0IGxlYXN0IHJlcG9ydHMgb25lLgorICBhdF9iaXNvbl9jaGVja19sYXN0PWBzZWQgLW4gJyQ9JyBzdGRlcnJgCisgIDogJHthdF9iaXNvbl9jaGVja19sYXN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19sYXN0PWBleHByICRhdF9iaXNvbl9jaGVja19sYXN0IC0gMWAKKyAgc2VkIC1uICIkYXRfYmlzb25fY2hlY2tfZmlyc3QsJGF0X2Jpc29uX2NoZWNrX2xhc3QicCBcCisgICAgYXQtYmlzb24tY2hlY2std2FybmluZ3MgPj4gZXhwZXJyCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNDc5OiBzZWQgJ3MsLiovXFwoYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzXFwpXCQsXFwxLCcgXFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJpbnB1dC5hdDoxNDc5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAncywuKi9cKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1wpJCxcMSwnIFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQ3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIE5vdyBjaGVjayAtLXdhcm5pbmdzPWVycm9yLgorICBjcCBzdGRlcnIgZXhwZXJyCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNDc5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1XYWxsIGlucHV0LnkgLS13YXJuaW5ncz1lcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1XYWxsIGlucHV0LnkgLS13YXJuaW5ncz1lcnJvciIgImlucHV0LmF0OjE0NzkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtV2FsbCBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQ3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIE5vdyBjaGVjayAtV25vbmUgYW5kIC0td2FybmluZ3M9bm9uZSBieSBtYWtpbmcgc3VyZSB0aGF0CisgICMgLVdlcnJvciBkb2Vzbid0IGNoYW5nZSB0aGUgZXhpdCBzdGF0dXMgd2hlbiAtV25vbmUgb3IKKyAgIyAtLXdhcm5pbmdzPW5vbmUgaXMgc3BlY2lmaWVkLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQ3OTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtV2FsbCBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLVdhbGwgaW5wdXQueSAtV25vbmUgLVdlcnJvciIgImlucHV0LmF0OjE0NzkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtV2FsbCBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE0NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNDc5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1XYWxsIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtV2FsbCBpbnB1dC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIiAiaW5wdXQuYXQ6MTQ3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1XYWxsIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQ3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE0ODI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtVyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiaW5wdXQuYXQ6MTQ4MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtVyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNDgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQ4MjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLVcgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtVyBpbnB1dC55IiAiaW5wdXQuYXQ6MTQ4MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtVyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNDgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE0ODI6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJpbnB1dC5hdDoxNDgyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE0ODIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNDgyOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaW5wdXQuYXQ6MTQ4MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNDgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQ4MjogYmlzb24gLVcgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImlucHV0LmF0OjE0ODIiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLVcgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6Mi4xLTc6IHdhcm5pbmc6IFBPU0lYIFlhY2MgZm9yYmlkcyBkYXNoZXMgaW4gc3ltYm9sIG5hbWVzOiBmb28tYmFyCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNDgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworIyBEZWZpbmluZyBQT1NJWExZX0NPUlJFQ1QgY2F1c2VzIGJpc29uIHRvIGNvbXBsYWluIGlmIG9wdGlvbnMgYXJlCisjIGFkZGVkIGFmdGVyIHRoZSBncmFtbWFyIGZpbGUgbmFtZSwgc28gc2tpcCB0aGVzZSBjaGVja3MgaW4gdGhhdAorIyBjYXNlLgoraWYgdGVzdCAiJFBPU0lYTFlfQ09SUkVDVF9JU19FWFBPUlRFRCIgPSBmYWxzZTsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKworICAjIFRvIGF2b2lkIGV4cGFuZGluZyBpdCByZXBlYXRlZGx5LCBzdG9yZSBzcGVjaWZpZWQgc3Rkb3V0LgorICA6ID5leHBvdXQKKworICAjIFJ1biB3aXRoIC1XZXJyb3IuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNDgyOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1XIGlucHV0LnkgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1XIGlucHV0LnkgLVdlcnJvciIgImlucHV0LmF0OjE0ODIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtVyBpbnB1dC55IC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE0ODIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBCdWlsZCBleHBlY3RlZCBzdGRlcnIgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgIndhcm5pbmdzIGJlaW5nCisgICMgdHJlYXRlZCBhcyBlcnJvcnMiIG1lc3NhZ2UuCisgIGNhdCA+YXQtYmlzb24tY2hlY2std2FybmluZ3MgPDwnX0FURU9GJworaW5wdXQueToyLjEtNzogd2FybmluZzogUE9TSVggWWFjYyBmb3JiaWRzIGRhc2hlcyBpbiBzeW1ib2wgbmFtZXM6IGZvby1iYXIKK19BVEVPRgorCisgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PWBzZWQgLW4gXAorICAgICcvOiB3YXJuaW5nOiAvez07cTt9JyBhdC1iaXNvbi1jaGVjay13YXJuaW5nc2AKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2ZpcnN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19maXJzdF90bXA9YHNlZCAtbiBcCisgICAgJy9jb25mbGljdHM6IFswLTldLipyZWR1Y2UkL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdF90bXA6PTF9CisgIGlmIHRlc3QgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcCAtbHQgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0OyB0aGVuCisgICAgYXRfYmlzb25fY2hlY2tfZmlyc3Q9JGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcAorICBmaQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdCAtZ3QgMTsgdGhlbgorICAgIHNlZCAtbiAiMSxgZXhwciAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLSAxYCJwIFwKKyAgICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4gZXhwZXJyCisgIGZpCisgIGVjaG8gJ2Jpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycycgPj4gZXhwZXJyCisKKyAgIyBGaW5pc2ggYnVpbGRpbmcgZXhwZWN0ZWQgc3RkZXJyIGFuZCBjaGVjay4gIFVubGlrZSB3YXJuaW5ncywKKyAgIyBjb21wbGFpbnRzIGNhdXNlIGJpc29uIHRvIGV4aXQgZWFybHkuICBUaHVzLCB3aXRoIC1XZXJyb3IsIGJpc29uCisgICMgZG9lcyBub3QgbmVjZXNzYXJpbHkgcmVwb3J0IGFsbCB3YXJuaW5ncyB0aGF0IGl0IGRvZXMgd2l0aG91dAorICAjIC1XZXJyb3IsIGJ1dCBpdCBhdCBsZWFzdCByZXBvcnRzIG9uZS4KKyAgYXRfYmlzb25fY2hlY2tfbGFzdD1gc2VkIC1uICckPScgc3RkZXJyYAorICA6ICR7YXRfYmlzb25fY2hlY2tfbGFzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfbGFzdD1gZXhwciAkYXRfYmlzb25fY2hlY2tfbGFzdCAtIDFgCisgIHNlZCAtbiAiJGF0X2Jpc29uX2NoZWNrX2ZpcnN0LCRhdF9iaXNvbl9jaGVja19sYXN0InAgXAorICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4+IGV4cGVycgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQ4Mjogc2VkICdzLC4qL1xcKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1xcKVwkLFxcMSwnIFxcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiaW5wdXQuYXQ6MTQ4MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgJ3MsLiovXChiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnNcKSQsXDEsJyBcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCiskYXRfZGlmZiBleHBlcnIgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE0ODIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBOb3cgY2hlY2sgLS13YXJuaW5ncz1lcnJvci4KKyAgY3Agc3RkZXJyIGV4cGVycgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQ4MjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtVyBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtVyBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IiICJpbnB1dC5hdDoxNDgyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLVcgaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCiskYXRfZGlmZiBleHBlcnIgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE0ODIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBOb3cgY2hlY2sgLVdub25lIGFuZCAtLXdhcm5pbmdzPW5vbmUgYnkgbWFraW5nIHN1cmUgdGhhdAorICAjIC1XZXJyb3IgZG9lc24ndCBjaGFuZ2UgdGhlIGV4aXQgc3RhdHVzIHdoZW4gLVdub25lIG9yCisgICMgLS13YXJuaW5ncz1ub25lIGlzIHNwZWNpZmllZC4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE0ODI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLVcgaW5wdXQueSAtV25vbmUgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1XIGlucHV0LnkgLVdub25lIC1XZXJyb3IiICJpbnB1dC5hdDoxNDgyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLVcgaW5wdXQueSAtV25vbmUgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNDgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQ4MjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtVyBpbnB1dC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLVcgaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvciIgImlucHV0LmF0OjE0ODIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtVyBpbnB1dC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE0ODIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNDg1OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLVduby1ub25lIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJpbnB1dC5hdDoxNDg1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1Xbm8tbm9uZSBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNDg1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQ4NTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLVduby1ub25lIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLVduby1ub25lIGlucHV0LnkiICJpbnB1dC5hdDoxNDg1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1Xbm8tbm9uZSBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNDg1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE0ODU6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJpbnB1dC5hdDoxNDg1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE0ODUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNDg1OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaW5wdXQuYXQ6MTQ4NSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNDg1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQ4NTogYmlzb24gLVduby1ub25lIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJpbnB1dC5hdDoxNDg1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1Xbm8tbm9uZSBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueToyLjEtNzogd2FybmluZzogUE9TSVggWWFjYyBmb3JiaWRzIGRhc2hlcyBpbiBzeW1ib2wgbmFtZXM6IGZvby1iYXIKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE0ODUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisjIERlZmluaW5nIFBPU0lYTFlfQ09SUkVDVCBjYXVzZXMgYmlzb24gdG8gY29tcGxhaW4gaWYgb3B0aW9ucyBhcmUKKyMgYWRkZWQgYWZ0ZXIgdGhlIGdyYW1tYXIgZmlsZSBuYW1lLCBzbyBza2lwIHRoZXNlIGNoZWNrcyBpbiB0aGF0CisjIGNhc2UuCitpZiB0ZXN0ICIkUE9TSVhMWV9DT1JSRUNUX0lTX0VYUE9SVEVEIiA9IGZhbHNlOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworCisgICMgVG8gYXZvaWQgZXhwYW5kaW5nIGl0IHJlcGVhdGVkbHksIHN0b3JlIHNwZWNpZmllZCBzdGRvdXQuCisgIDogPmV4cG91dAorCisgICMgUnVuIHdpdGggLVdlcnJvci4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE0ODU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLVduby1ub25lIGlucHV0LnkgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1Xbm8tbm9uZSBpbnB1dC55IC1XZXJyb3IiICJpbnB1dC5hdDoxNDg1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLVduby1ub25lIGlucHV0LnkgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQ4NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIEJ1aWxkIGV4cGVjdGVkIHN0ZGVyciB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSAid2FybmluZ3MgYmVpbmcKKyAgIyB0cmVhdGVkIGFzIGVycm9ycyIgbWVzc2FnZS4KKyAgY2F0ID5hdC1iaXNvbi1jaGVjay13YXJuaW5ncyA8PCdfQVRFT0YnCitpbnB1dC55OjIuMS03OiB3YXJuaW5nOiBQT1NJWCBZYWNjIGZvcmJpZHMgZGFzaGVzIGluIHN5bWJvbCBuYW1lczogZm9vLWJhcgorX0FURU9GCisKKyAgYXRfYmlzb25fY2hlY2tfZmlyc3Q9YHNlZCAtbiBcCisgICAgJy86IHdhcm5pbmc6IC97PTtxO30nIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzYAorICA6ICR7YXRfYmlzb25fY2hlY2tfZmlyc3Q6PTF9CisgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcD1gc2VkIC1uIFwKKyAgICAnL2NvbmZsaWN0czogWzAtOV0uKnJlZHVjZSQvez07cTt9JyBhdC1iaXNvbi1jaGVjay13YXJuaW5nc2AKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcDo9MX0KKyAgaWYgdGVzdCAkYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wIC1sdCAkYXRfYmlzb25fY2hlY2tfZmlyc3Q7IHRoZW4KKyAgICBhdF9iaXNvbl9jaGVja19maXJzdD0kYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wCisgIGZpCisgIGlmIHRlc3QgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0IC1ndCAxOyB0aGVuCisgICAgc2VkIC1uICIxLGBleHByICRhdF9iaXNvbl9jaGVja19maXJzdCAtIDFgInAgXAorICAgICAgYXQtYmlzb24tY2hlY2std2FybmluZ3MgPiBleHBlcnIKKyAgZmkKKyAgZWNobyAnYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzJyA+PiBleHBlcnIKKworICAjIEZpbmlzaCBidWlsZGluZyBleHBlY3RlZCBzdGRlcnIgYW5kIGNoZWNrLiAgVW5saWtlIHdhcm5pbmdzLAorICAjIGNvbXBsYWludHMgY2F1c2UgYmlzb24gdG8gZXhpdCBlYXJseS4gIFRodXMsIHdpdGggLVdlcnJvciwgYmlzb24KKyAgIyBkb2VzIG5vdCBuZWNlc3NhcmlseSByZXBvcnQgYWxsIHdhcm5pbmdzIHRoYXQgaXQgZG9lcyB3aXRob3V0CisgICMgLVdlcnJvciwgYnV0IGl0IGF0IGxlYXN0IHJlcG9ydHMgb25lLgorICBhdF9iaXNvbl9jaGVja19sYXN0PWBzZWQgLW4gJyQ9JyBzdGRlcnJgCisgIDogJHthdF9iaXNvbl9jaGVja19sYXN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19sYXN0PWBleHByICRhdF9iaXNvbl9jaGVja19sYXN0IC0gMWAKKyAgc2VkIC1uICIkYXRfYmlzb25fY2hlY2tfZmlyc3QsJGF0X2Jpc29uX2NoZWNrX2xhc3QicCBcCisgICAgYXQtYmlzb24tY2hlY2std2FybmluZ3MgPj4gZXhwZXJyCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNDg1OiBzZWQgJ3MsLiovXFwoYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzXFwpXCQsXFwxLCcgXFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJpbnB1dC5hdDoxNDg1IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAncywuKi9cKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1wpJCxcMSwnIFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQ4NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIE5vdyBjaGVjayAtLXdhcm5pbmdzPWVycm9yLgorICBjcCBzdGRlcnIgZXhwZXJyCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNDg1OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1Xbm8tbm9uZSBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtV25vLW5vbmUgaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yIiAiaW5wdXQuYXQ6MTQ4NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1Xbm8tbm9uZSBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQ4NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIE5vdyBjaGVjayAtV25vbmUgYW5kIC0td2FybmluZ3M9bm9uZSBieSBtYWtpbmcgc3VyZSB0aGF0CisgICMgLVdlcnJvciBkb2Vzbid0IGNoYW5nZSB0aGUgZXhpdCBzdGF0dXMgd2hlbiAtV25vbmUgb3IKKyAgIyAtLXdhcm5pbmdzPW5vbmUgaXMgc3BlY2lmaWVkLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQ4NTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtV25vLW5vbmUgaW5wdXQueSAtV25vbmUgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1Xbm8tbm9uZSBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIiAiaW5wdXQuYXQ6MTQ4NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1Xbm8tbm9uZSBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE0ODUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNDg1OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1Xbm8tbm9uZSBpbnB1dC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLVduby1ub25lIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiICJpbnB1dC5hdDoxNDg1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLVduby1ub25lIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQ4NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCisKKyMgLVdlcnJvciBpcyBub3QgZGlzYWJsZWQgYnkgLVdub25lIG9yIGVxdWl2YWxlbnQuCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNDkwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1XZXJyb3Isbm9uZSx5YWNjIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtV2Vycm9yLG5vbmUseWFjYyBpbnB1dC55IiAiaW5wdXQuYXQ6MTQ5MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1XZXJyb3Isbm9uZSx5YWNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE0OTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNDkxOiBzZWQgJ3MvXi4qYmlzb246L2Jpc29uOi8nIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImlucHV0LmF0OjE0OTEiCisoICRhdF9jaGVja190cmFjZTsgc2VkICdzL14uKmJpc29uOi9iaXNvbjovJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMKK2lucHV0Lnk6Mi4xLTc6IHdhcm5pbmc6IFBPU0lYIFlhY2MgZm9yYmlkcyBkYXNoZXMgaW4gc3ltYm9sIG5hbWVzOiBmb28tYmFyCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNDkxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworbXYgc3RkZXJyIGV4cGVycgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTQ5NjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtV2Vycm9yLG5vLWFsbCx5YWNjIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtV2Vycm9yLG5vLWFsbCx5YWNjIGlucHV0LnkiICJpbnB1dC5hdDoxNDk2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLVdlcnJvcixuby1hbGwseWFjYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCiskYXRfZGlmZiBleHBlcnIgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE0OTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8zNQorI0FUX1NUQVJUXzM2CithdF9mbl9ncm91cF9iYW5uZXIgMzYgJ2lucHV0LmF0OjE1MDUnIFwKKyAgIiVuYW1lLXByZWZpeCBhbmQgJWRlZmluZSBhcGkucHJlZml4IGFyZSBpbmNvbXBhdGlibGUiICIiIDEKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIzNi4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKyMgQVRfVEVTVChESVJFQ1RJVkVTLCBPUFRJT05TLCBFUlJPUi1MT0NBVElPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWRlZmluZSBhcGkucHJlZml4IGZvbyAlbmFtZS1wcmVmaXggImJhciIKKyUlCitleHA6OworX0FURU9GCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE1MjA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAgaW5wdXQueSIgImlucHV0LmF0OjE1MjAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6MS45LTE4OiBlcnJvcjogJyVuYW1lLXByZWZpeCcgYW5kICclZGVmaW5lIGFwaS5wcmVmaXgnIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNTIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCisKKyUlCitleHA6OworX0FURU9GCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE1MjE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLURhcGkucHJlZml4PWZvbyAtcCBiYXIgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1EYXBpLnByZWZpeD1mb28gLXAgYmFyIGlucHV0LnkiICJpbnB1dC5hdDoxNTIxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLURhcGkucHJlZml4PWZvbyAtcCBiYXIgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gIjxjb21tYW5kIGxpbmU+OjE6IGVycm9yOiAnJW5hbWUtcHJlZml4JyBhbmQgJyVkZWZpbmUgYXBpLnByZWZpeCcgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE1MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVuYW1lLXByZWZpeCAiYmFyIgorJSUKK2V4cDo7CitfQVRFT0YKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTUyMjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtRGFwaS5wcmVmaXg9Zm9vIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtRGFwaS5wcmVmaXg9Zm9vIGlucHV0LnkiICJpbnB1dC5hdDoxNTIyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLURhcGkucHJlZml4PWZvbyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiPGNvbW1hbmQgbGluZT46MTogZXJyb3I6ICclbmFtZS1wcmVmaXgnIGFuZCAnJWRlZmluZSBhcGkucHJlZml4JyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlcgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTUyMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWRlZmluZSBhcGkucHJlZml4IGZvbworJSUKK2V4cDo7CitfQVRFT0YKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTUyMzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtcCBiYXIgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1wIGJhciBpbnB1dC55IiAiaW5wdXQuYXQ6MTUyMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1wIGJhciBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueToxLjktMTg6IGVycm9yOiAnJW5hbWUtcHJlZml4JyBhbmQgJyVkZWZpbmUgYXBpLnByZWZpeCcgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE1MjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8zNgorI0FUX1NUQVJUXzM3CithdF9mbl9ncm91cF9iYW5uZXIgMzcgJ2lucHV0LmF0OjE1MzQnIFwKKyAgIlN0cmF5IFwkIG9yIEAiICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgMQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjM3LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworIyBHaXZlICVwcmludGVyIGFuZCAlZGVzdHJ1Y3RvciAiPCo+IGV4cCBUT0siIGluc3RlYWQgb2YgIjwqPiIgdG8KKyMgY2hlY2sgdGhhdCB0aGUgd2FybmluZ3MgYXJlIHJlcG9ydGVkIG9uY2UsIG5vdCB0aHJlZSB0aW1lcy4KKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyV0b2tlbiBUT0sKKyVkZXN0cnVjdG9yICAgICB7ICQlOyBAJTsgfSA8Kj4gZXhwIFRPSzsKKyVpbml0aWFsLWFjdGlvbiB7ICQlOyBAJTsgfTsKKyVwcmludGVyICAgICAgICB7ICQlOyBAJTsgfSA8Kj4gZXhwIFRPSzsKKyUlCitleHA6IFRPSyAgICAgICAgeyAkJTsgQCU7ICQkID0gJDE7IH07CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTU0ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJpbnB1dC5hdDoxNTQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE1NDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNTQ4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIGlucHV0LnkiICJpbnB1dC5hdDoxNTQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE1NDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTU0ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImlucHV0LmF0OjE1NDgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTU0OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE1NDg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJpbnB1dC5hdDoxNTQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE1NDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNTQ4OiBiaXNvbiBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiaW5wdXQuYXQ6MTU0OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueToxMC4xOTogd2FybmluZzogc3RyYXkgJ1wkJworaW5wdXQueToxMC4yMzogd2FybmluZzogc3RyYXkgJ0AnCitpbnB1dC55OjExLjE5OiB3YXJuaW5nOiBzdHJheSAnXCQnCitpbnB1dC55OjExLjIzOiB3YXJuaW5nOiBzdHJheSAnQCcKK2lucHV0Lnk6MTIuMTk6IHdhcm5pbmc6IHN0cmF5ICdcJCcKK2lucHV0Lnk6MTIuMjM6IHdhcm5pbmc6IHN0cmF5ICdAJworaW5wdXQueToxNC4xOTogd2FybmluZzogc3RyYXkgJ1wkJworaW5wdXQueToxNC4yMzogd2FybmluZzogc3RyYXkgJ0AnCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNTQ4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworIyBEZWZpbmluZyBQT1NJWExZX0NPUlJFQ1QgY2F1c2VzIGJpc29uIHRvIGNvbXBsYWluIGlmIG9wdGlvbnMgYXJlCisjIGFkZGVkIGFmdGVyIHRoZSBncmFtbWFyIGZpbGUgbmFtZSwgc28gc2tpcCB0aGVzZSBjaGVja3MgaW4gdGhhdAorIyBjYXNlLgoraWYgdGVzdCAiJFBPU0lYTFlfQ09SUkVDVF9JU19FWFBPUlRFRCIgPSBmYWxzZTsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKworICAjIFRvIGF2b2lkIGV4cGFuZGluZyBpdCByZXBlYXRlZGx5LCBzdG9yZSBzcGVjaWZpZWQgc3Rkb3V0LgorICA6ID5leHBvdXQKKworICAjIFJ1biB3aXRoIC1XZXJyb3IuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNTQ4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLVdlcnJvciIgImlucHV0LmF0OjE1NDgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE1NDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBCdWlsZCBleHBlY3RlZCBzdGRlcnIgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgIndhcm5pbmdzIGJlaW5nCisgICMgdHJlYXRlZCBhcyBlcnJvcnMiIG1lc3NhZ2UuCisgIGNhdCA+YXQtYmlzb24tY2hlY2std2FybmluZ3MgPDwnX0FURU9GJworaW5wdXQueToxMC4xOTogd2FybmluZzogc3RyYXkgJyQnCitpbnB1dC55OjEwLjIzOiB3YXJuaW5nOiBzdHJheSAnQCcKK2lucHV0Lnk6MTEuMTk6IHdhcm5pbmc6IHN0cmF5ICckJworaW5wdXQueToxMS4yMzogd2FybmluZzogc3RyYXkgJ0AnCitpbnB1dC55OjEyLjE5OiB3YXJuaW5nOiBzdHJheSAnJCcKK2lucHV0Lnk6MTIuMjM6IHdhcm5pbmc6IHN0cmF5ICdAJworaW5wdXQueToxNC4xOTogd2FybmluZzogc3RyYXkgJyQnCitpbnB1dC55OjE0LjIzOiB3YXJuaW5nOiBzdHJheSAnQCcKK19BVEVPRgorCisgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PWBzZWQgLW4gXAorICAgICcvOiB3YXJuaW5nOiAvez07cTt9JyBhdC1iaXNvbi1jaGVjay13YXJuaW5nc2AKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2ZpcnN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19maXJzdF90bXA9YHNlZCAtbiBcCisgICAgJy9jb25mbGljdHM6IFswLTldLipyZWR1Y2UkL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdF90bXA6PTF9CisgIGlmIHRlc3QgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcCAtbHQgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0OyB0aGVuCisgICAgYXRfYmlzb25fY2hlY2tfZmlyc3Q9JGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcAorICBmaQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdCAtZ3QgMTsgdGhlbgorICAgIHNlZCAtbiAiMSxgZXhwciAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLSAxYCJwIFwKKyAgICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4gZXhwZXJyCisgIGZpCisgIGVjaG8gJ2Jpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycycgPj4gZXhwZXJyCisKKyAgIyBGaW5pc2ggYnVpbGRpbmcgZXhwZWN0ZWQgc3RkZXJyIGFuZCBjaGVjay4gIFVubGlrZSB3YXJuaW5ncywKKyAgIyBjb21wbGFpbnRzIGNhdXNlIGJpc29uIHRvIGV4aXQgZWFybHkuICBUaHVzLCB3aXRoIC1XZXJyb3IsIGJpc29uCisgICMgZG9lcyBub3QgbmVjZXNzYXJpbHkgcmVwb3J0IGFsbCB3YXJuaW5ncyB0aGF0IGl0IGRvZXMgd2l0aG91dAorICAjIC1XZXJyb3IsIGJ1dCBpdCBhdCBsZWFzdCByZXBvcnRzIG9uZS4KKyAgYXRfYmlzb25fY2hlY2tfbGFzdD1gc2VkIC1uICckPScgc3RkZXJyYAorICA6ICR7YXRfYmlzb25fY2hlY2tfbGFzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfbGFzdD1gZXhwciAkYXRfYmlzb25fY2hlY2tfbGFzdCAtIDFgCisgIHNlZCAtbiAiJGF0X2Jpc29uX2NoZWNrX2ZpcnN0LCRhdF9iaXNvbl9jaGVja19sYXN0InAgXAorICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4+IGV4cGVycgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTU0ODogc2VkICdzLC4qL1xcKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1xcKVwkLFxcMSwnIFxcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiaW5wdXQuYXQ6MTU0OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgJ3MsLiovXChiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnNcKSQsXDEsJyBcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCiskYXRfZGlmZiBleHBlcnIgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE1NDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBOb3cgY2hlY2sgLS13YXJuaW5ncz1lcnJvci4KKyAgY3Agc3RkZXJyIGV4cGVycgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTU0ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IiICJpbnB1dC5hdDoxNTQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCiskYXRfZGlmZiBleHBlcnIgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE1NDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBOb3cgY2hlY2sgLVdub25lIGFuZCAtLXdhcm5pbmdzPW5vbmUgYnkgbWFraW5nIHN1cmUgdGhhdAorICAjIC1XZXJyb3IgZG9lc24ndCBjaGFuZ2UgdGhlIGV4aXQgc3RhdHVzIHdoZW4gLVdub25lIG9yCisgICMgLS13YXJuaW5ncz1ub25lIGlzIHNwZWNpZmllZC4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE1NDg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtV25vbmUgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLVdub25lIC1XZXJyb3IiICJpbnB1dC5hdDoxNTQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtV25vbmUgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNTQ4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTU0ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvciIgImlucHV0LmF0OjE1NDgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE1NDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQorCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzM3CisjQVRfU1RBUlRfMzgKK2F0X2ZuX2dyb3VwX2Jhbm5lciAzOCAnaW5wdXQuYXQ6MTU2OCcgXAorICAiQ29kZSBpbmplY3Rpb24iICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDEKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIzOC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworCisjIEFUX1RFU1QoW01BQ1JPXSkKKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gaGF2ZSBNQUNSTyBiZSBydW4gYnkgYmlzb24uCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyV0eXBlIDxtNF9lcnJwcmludG4oREVBRCAldHlwZSk+IGV4cAorJXRva2VuIDxtNF9lcnJwcmludG4oREVBRCAldG9rZW4pPiBhCislaW5pdGlhbC1hY3Rpb24KK3sKKyAgJCQ7CisgICQ8bTRfZXJycHJpbnRuKERFQUQgJWluaXRpYWwtYWN0aW9uKT4kCit9OworJXByaW50ZXIKK3sKKyAgJCQKKyAgJDxtNF9lcnJwcmludG4oREVBRCAlcHJpbnRlcik+JAorfSA8PiA8Kj47CislbGV4LXBhcmFtCit7CisgIG00X2VycnByaW50bihERUFEICVsZXgtcGFyYW0pCit9OworJXBhcnNlLXBhcmFtCit7CisgIG00X2VycnByaW50bihERUFEICVwYXJzZS1wYXJhbSkKK307CislJQorZXhwOgorICBhIGFbbGFzdF0KKyAgeworICAgICQkOworICAgICQxOworICAgICQ8bTRfZXJycHJpbnRuKERFQUQgYWN0aW9uIDEpPiQKKyAgICAkPG00X2VycnByaW50bihERUFEIGFjdGlvbiAyKT4xCisgICAgJDxtNF9lcnJwcmludG4oREVBRCBhY3Rpb24gMyk+bGFzdAorICAgICQ8bTRfZXJycHJpbnRuKERFQUQgYWN0aW9uIDQpPjAKKyAgICA7CisgIH07CitfQVRFT0YKKworCisjIEZJWE1FOiBQcm92aWRlIGEgbWVhbnMgdG8gaXRlcmF0ZSBvdmVyIGFsbCB0aGUgc2tlbGV0b25zLgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjE5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLWQgICAgICAgICAgICAgICBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiaW5wdXQuYXQ6MTYxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtZCAgICAgICAgICAgICAgIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjE5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZCAgICAgICAgICAgICAgIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWQgICAgICAgICAgICAgICBpbnB1dC55IiAiaW5wdXQuYXQ6MTYxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZCAgICAgICAgICAgICAgIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYxOTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImlucHV0LmF0OjE2MTkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MTk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJpbnB1dC5hdDoxNjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjE5OiBiaXNvbiAtZCAgICAgICAgICAgICAgIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJpbnB1dC5hdDoxNjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1kICAgICAgICAgICAgICAgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MTk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtZCAtUyBnbHIuYyAgICAgIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJpbnB1dC5hdDoxNjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1kIC1TIGdsci5jICAgICAgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MTk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kIC1TIGdsci5jICAgICAgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZCAtUyBnbHIuYyAgICAgIGlucHV0LnkiICJpbnB1dC5hdDoxNjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kIC1TIGdsci5jICAgICAgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjE5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaW5wdXQuYXQ6MTYxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYxOTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImlucHV0LmF0OjE2MTkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MTk6IGJpc29uIC1kIC1TIGdsci5jICAgICAgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImlucHV0LmF0OjE2MTkiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLWQgLVMgZ2xyLmMgICAgICBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYxOTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1kIC1TIGxhbHIxLmNjICAgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImlucHV0LmF0OjE2MTkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLWQgLVMgbGFscjEuY2MgICBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYxOTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWQgLVMgbGFscjEuY2MgICBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kIC1TIGxhbHIxLmNjICAgaW5wdXQueSIgImlucHV0LmF0OjE2MTkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWQgLVMgbGFscjEuY2MgICBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MTk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJpbnB1dC5hdDoxNjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjE5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaW5wdXQuYXQ6MTYxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYxOTogYmlzb24gLWQgLVMgbGFscjEuY2MgICBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiaW5wdXQuYXQ6MTYxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtZCAtUyBsYWxyMS5jYyAgIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjE5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLWQgLVMgZ2xyLmNjICAgICBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiaW5wdXQuYXQ6MTYxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtZCAtUyBnbHIuY2MgICAgIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjE5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZCAtUyBnbHIuY2MgICAgIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWQgLVMgZ2xyLmNjICAgICBpbnB1dC55IiAiaW5wdXQuYXQ6MTYxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZCAtUyBnbHIuY2MgICAgIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYxOTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImlucHV0LmF0OjE2MTkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MTk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJpbnB1dC5hdDoxNjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjE5OiBiaXNvbiAtZCAtUyBnbHIuY2MgICAgIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJpbnB1dC5hdDoxNjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1kIC1TIGdsci5jYyAgICAgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MTk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAgICAtUyBsYWxyMS5qYXZhIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJpbnB1dC5hdDoxNjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90ICAgIC1TIGxhbHIxLmphdmEgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MTk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sICAgIC1TIGxhbHIxLmphdmEgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAgICAtUyBsYWxyMS5qYXZhIGlucHV0LnkiICJpbnB1dC5hdDoxNjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sICAgIC1TIGxhbHIxLmphdmEgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjE5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaW5wdXQuYXQ6MTYxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYxOTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImlucHV0LmF0OjE2MTkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MTk6IGJpc29uICAgIC1TIGxhbHIxLmphdmEgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImlucHV0LmF0OjE2MTkiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gICAgLVMgbGFscjEuamF2YSBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyV0eXBlIDxdbTRfZXJycHJpbnRuKERFQUQgJXR5cGUpPiBleHAKKyV0b2tlbiA8XW00X2VycnByaW50bihERUFEICV0b2tlbik+IGEKKyVpbml0aWFsLWFjdGlvbgoreworICAkJDsKKyAgJDxdbTRfZXJycHJpbnRuKERFQUQgJWluaXRpYWwtYWN0aW9uKT4kCit9OworJXByaW50ZXIKK3sKKyAgJCQKKyAgJDxdbTRfZXJycHJpbnRuKERFQUQgJXByaW50ZXIpPiQKK30gPD4gPCo+OworJWxleC1wYXJhbQoreworICBdbTRfZXJycHJpbnRuKERFQUQgJWxleC1wYXJhbSkKK307CislcGFyc2UtcGFyYW0KK3sKKyAgXW00X2VycnByaW50bihERUFEICVwYXJzZS1wYXJhbSkKK307CislJQorZXhwOgorICBhIGFbbGFzdF0KKyAgeworICAgICQkOworICAgICQxOworICAgICQ8XW00X2VycnByaW50bihERUFEIGFjdGlvbiAxKT4kCisgICAgJDxdbTRfZXJycHJpbnRuKERFQUQgYWN0aW9uIDIpPjEKKyAgICAkPF1tNF9lcnJwcmludG4oREVBRCBhY3Rpb24gMyk+bGFzdAorICAgICQ8XW00X2VycnByaW50bihERUFEIGFjdGlvbiA0KT4wCisgICAgOworICB9OworX0FURU9GCisKKworIyBGSVhNRTogUHJvdmlkZSBhIG1lYW5zIHRvIGl0ZXJhdGUgb3ZlciBhbGwgdGhlIHNrZWxldG9ucy4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYyMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1kICAgICAgICAgICAgICAgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImlucHV0LmF0OjE2MjAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLWQgICAgICAgICAgICAgICBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYyMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWQgICAgICAgICAgICAgICBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kICAgICAgICAgICAgICAgaW5wdXQueSIgImlucHV0LmF0OjE2MjAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWQgICAgICAgICAgICAgICBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MjA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJpbnB1dC5hdDoxNjIwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjIwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaW5wdXQuYXQ6MTYyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYyMDogYmlzb24gLWQgICAgICAgICAgICAgICBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiaW5wdXQuYXQ6MTYyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtZCAgICAgICAgICAgICAgIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjIwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLWQgLVMgZ2xyLmMgICAgICBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiaW5wdXQuYXQ6MTYyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtZCAtUyBnbHIuYyAgICAgIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjIwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZCAtUyBnbHIuYyAgICAgIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWQgLVMgZ2xyLmMgICAgICBpbnB1dC55IiAiaW5wdXQuYXQ6MTYyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZCAtUyBnbHIuYyAgICAgIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYyMDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImlucHV0LmF0OjE2MjAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MjA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJpbnB1dC5hdDoxNjIwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjIwOiBiaXNvbiAtZCAtUyBnbHIuYyAgICAgIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJpbnB1dC5hdDoxNjIwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1kIC1TIGdsci5jICAgICAgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MjA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtZCAtUyBsYWxyMS5jYyAgIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJpbnB1dC5hdDoxNjIwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1kIC1TIGxhbHIxLmNjICAgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MjA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kIC1TIGxhbHIxLmNjICAgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZCAtUyBsYWxyMS5jYyAgIGlucHV0LnkiICJpbnB1dC5hdDoxNjIwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kIC1TIGxhbHIxLmNjICAgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjIwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaW5wdXQuYXQ6MTYyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYyMDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImlucHV0LmF0OjE2MjAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MjA6IGJpc29uIC1kIC1TIGxhbHIxLmNjICAgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImlucHV0LmF0OjE2MjAiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLWQgLVMgbGFscjEuY2MgICBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYyMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1kIC1TIGdsci5jYyAgICAgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImlucHV0LmF0OjE2MjAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLWQgLVMgZ2xyLmNjICAgICBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYyMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWQgLVMgZ2xyLmNjICAgICBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kIC1TIGdsci5jYyAgICAgaW5wdXQueSIgImlucHV0LmF0OjE2MjAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWQgLVMgZ2xyLmNjICAgICBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MjA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJpbnB1dC5hdDoxNjIwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjIwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaW5wdXQuYXQ6MTYyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYyMDogYmlzb24gLWQgLVMgZ2xyLmNjICAgICBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiaW5wdXQuYXQ6MTYyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtZCAtUyBnbHIuY2MgICAgIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjIwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgICAgLVMgbGFscjEuamF2YSBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiaW5wdXQuYXQ6MTYyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAgICAtUyBsYWxyMS5qYXZhIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjIwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAgICAtUyBsYWxyMS5qYXZhIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgICAgLVMgbGFscjEuamF2YSBpbnB1dC55IiAiaW5wdXQuYXQ6MTYyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAgICAtUyBsYWxyMS5qYXZhIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYyMDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImlucHV0LmF0OjE2MjAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaW5wdXQuYXQ6MTYyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MjA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJpbnB1dC5hdDoxNjIwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2lucHV0LmF0OjE2MjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjIwOiBiaXNvbiAgICAtUyBsYWxyMS5qYXZhIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJpbnB1dC5hdDoxNjIwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uICAgIC1TIGxhbHIxLmphdmEgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9pbnB1dC5hdDoxNjIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMzgKKyNBVF9TVEFSVF8zOQorYXRfZm5fZ3JvdXBfYmFubmVyIDM5ICduYW1lZC1yZWZzLmF0OjIxJyBcCisgICJUdXRvcmlhbCBjYWxjdWxhdG9yIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgMgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjM5LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworY2F0ID50ZXN0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworCisleworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KK3R5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOworRklMRSAqaW5wdXQ7CitzdGF0aWMgc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7CitzdGF0aWMgaW50IGdsb2JhbF9jb3VudCA9IDA7CitzdGF0aWMgaW50IHBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KTsKK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworc3RhdGljIGludCB5eWxleCAodm9pZCk7CislfQorCisldW5pb24KK3sKKyAgc2VtYW50aWNfdmFsdWUgaXZhbDsKK307CisKKyV0b2tlbiBDQUxDX0VPRiAwICJlbmQgb2YgaW5wdXQiCisldG9rZW4gPGl2YWw+IE5VTSAibnVtYmVyIgorJXR5cGUgIDxpdmFsPiBleHAKKworJW5vbmFzc29jICc9JyAgIC8qIGNvbXBhcmlzb24JICAgICAgICovCislbGVmdCAnLScgJysnCislbGVmdCAnKicgJy8nCislbGVmdCBORUcgICAgICAgLyogbmVnYXRpb24tLXVuYXJ5IG1pbnVzICovCislcmlnaHQgJ14nICAgICAgLyogZXhwb25lbnRpYXRpb24gICAgICAgICovCisKKyUlCitpbnB1dDoKKyAgbGluZQorfCBpbnB1dCBsaW5lICAgICAgICAge30KKzsKKworbGluZToKKyAgJ1xuJworfCBleHAgJ1xuJyAgICAgICAgICAge30KKzsKKworZXhwOgorICBOVU0gICAgICAgICAgICAgICAgeyAkJCA9ICROVU07IH0KK3wgZXhwW2xdICc9JyBleHBbcl0KKyAgeworICAgIGlmICgkbCAhPSAkcikKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImNhbGM6IGVycm9yOiAlZCAhPSAlZFxuIiwgJGwsICRyKTsKKyAgICAkJCA9ICRsOworICB9Cit8IGV4cFt4XSAnKycgeyAkPGl2YWw+JCA9ICR4OyB9IFtsXSBleHBbcl0gIHsgJCQgPSAkPGl2YWw+bCArICRyOyAgICB9Cit8IGV4cFtsXSAnLScgZXhwW3JdICB7ICQkID0gJGwgLSAkcjsgICAgICAgIH0KK3wgZXhwW2xdICcqJyBleHBbcl0gIHsgJCQgPSAkbCAqICRyOyAgICAgICAgfQorfCBleHBbbF0gJy8nIGV4cFtyXSAgeyAkJCA9ICRsIC8gJHI7ICAgICAgICB9Cit8ICctJyBleHAgICVwcmVjIE5FRyB7ICQkID0gLSQyOyAgICAgICAgICAgIH0KK3wgZXhwW2xdICdeJyBleHBbcl0gIHsgJCQgPSBwb3dlciAoJGwsICRyKTsgfQorfCAnKCcgZXhwW2VdICcpJyAgICAgeyAkJCA9ICRlOyAgICAgICAgICAgfQorfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7IHl5ZXJyb2s7ICB9Cit8ICchJyAgICAgICAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KK3wgJy0nIGVycm9yICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQorOworJSUKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CitzdGF0aWMgaW50IGdldF9jaGFyICh2b2lkKQoreworICBpbnQgcmVzID0gZ2V0YyAoaW5wdXQpOworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZCB1bmdldF9jaGFyIChpbnQgYykKK3sKKyAgdW5nZXRjIChjLCBpbnB1dCk7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9zaWduZWRfaW50ZWdlciAodm9pZCkKK3sKKyAgaW50IGMgPSBnZXRfY2hhciAoKTsKKyAgaW50IHNpZ24gPSAxOworICBpbnQgbiA9IDA7CisgIGlmIChjID09ICctJykKKyAgICB7CisgICAgICBjID0gZ2V0X2NoYXIgKCk7CisgICAgICBzaWduID0gLTE7CisgICAgfQorICB3aGlsZSAoaXNkaWdpdCAoYykpCisgICAgeworICAgICAgbiA9IDEwICogbiArIChjIC0gJzAnKTsKKyAgICAgIGMgPSBnZXRfY2hhciAoKTsKKyAgICB9CisgIHVuZ2V0X2NoYXIgKCBjKTsKKyAgcmV0dXJuIHNpZ24gKiBuOworfQorCitzdGF0aWMgaW50Cit5eWxleCAodm9pZCkKK3sKKyAgaW50IGM7CisgIC8qIFNraXAgd2hpdGUgc3BhY2UuICAqLworICB3aGlsZSAoKGMgPSBnZXRfY2hhciAoKSkgPT0gJyAnIHx8IGMgPT0gJ1x0Jykge30KKworICAvKiBwcm9jZXNzIG51bWJlcnMgICAqLworICBpZiAoYyA9PSAnLicgfHwgaXNkaWdpdCAoYykpCisgICAgeworICAgICAgdW5nZXRfY2hhciAoIGMpOworICAgICAgKHl5bHZhbCkuaXZhbCA9IHJlYWRfc2lnbmVkX2ludGVnZXIgKCk7CisgICAgICByZXR1cm4gTlVNOworICAgIH0KKworICAvKiBSZXR1cm4gZW5kLW9mLWZpbGUuICAqLworICBpZiAoYyA9PSBFT0YpCisgICAgcmV0dXJuIENBTENfRU9GOworCisgIC8qIFJldHVybiBzaW5nbGUgY2hhcnMuICovCisgIHJldHVybiBjOworfQorCitzdGF0aWMgaW50IHBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQoreworICBpbnQgcmVzID0gMTsKKyAgYXNzZXJ0ICgwIDw9IGV4cG9uZW50KTsKKyAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQorICAgIHJlcyAqPSBiYXNlOworICByZXR1cm4gcmVzOworfQorCitpbnQgbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworICBzZW1hbnRpY192YWx1ZSByZXN1bHQgPSAwOworICBpbnQgY291bnQgPSAwOworICBpbnQgc3RhdHVzOworICBpZiAoYXJnYyA9PSAyKQorICAgIGlucHV0ID0gZm9wZW4gKGFyZ3ZbMV0sICJyIik7CisgIGVsc2UKKyAgICBpbnB1dCA9IHN0ZGluOworICBpZiAoIWlucHV0KQorICAgIHsKKyAgICAgIHBlcnJvciAoYXJndlsxXSk7CisgICAgICByZXR1cm4gMzsKKyAgICB9CisgIHN0YXR1cyA9IHl5cGFyc2UgKCk7CisgIGZjbG9zZSAoaW5wdXQpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOworICByZXR1cm4gc3RhdHVzOworfQorX0FURU9GCisKKworCitjYXQgPmlucHV0LnR4dCA8PCdfQVRFT0YnCisKKzEgKyAyICogMyA9IDcKKzEgKyAyICogLTMgPSAtNQorLTFeMiA9IC0xCisoLTEpXjIgPSAxCistLS0xID0gLTEKKzEgLSAyIC0gMyA9IC00CisxIC0gKDIgLSAzKSA9IDIKKzJeMl4zID0gMjU2CisoMl4yKV4zID0gNjQKK19BVEVPRgorCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDoxODQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyB0ZXN0LmMgdGVzdC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAibmFtZWQtcmVmcy5hdDoxODQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gdGVzdC5jIHRlc3QueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDoxODQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9uYW1lZC1yZWZzLmF0OjE4NDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gdGVzdC5jIHRlc3QueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyB0ZXN0LmMgdGVzdC55IiAibmFtZWQtcmVmcy5hdDoxODQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gdGVzdC5jIHRlc3QueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDoxODQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDoxODQ6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJuYW1lZC1yZWZzLmF0OjE4NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9uYW1lZC1yZWZzLmF0OjE4NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6MTg0OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAibmFtZWQtcmVmcy5hdDoxODQiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDoxODQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9uYW1lZC1yZWZzLmF0OjE4NDogYmlzb24gLW8gdGVzdC5jIHRlc3QueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm5hbWVkLXJlZnMuYXQ6MTg0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIHRlc3QuYyB0ZXN0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDoxODQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9uYW1lZC1yZWZzLmF0OjE4NTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgIm5hbWVkLXJlZnMuYXQ6MTg1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9uYW1lZC1yZWZzLmF0OjE4NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9uYW1lZC1yZWZzLmF0OjE4NTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyB0ZXN0IHRlc3QuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyB0ZXN0IHRlc3QuYyAkTElCUyIgIm5hbWVkLXJlZnMuYXQ6MTg1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyB0ZXN0IHRlc3QuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDoxODUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDoxODY6ICBcJFBSRVBBUlNFUiAuL3Rlc3QgaW5wdXQudHh0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL3Rlc3QgaW5wdXQudHh0IiAibmFtZWQtcmVmcy5hdDoxODYiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi90ZXN0IGlucHV0LnR4dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDoxODYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDoxODY6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAibmFtZWQtcmVmcy5hdDoxODYiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6MTg2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMzkKKyNBVF9TVEFSVF80MAorYXRfZm5fZ3JvdXBfYmFubmVyIDQwICduYW1lZC1yZWZzLmF0OjE5NScgXAorICAiVW5kZWZpbmVkIGFuZCBhbWJpZ3VvdXMgcmVmZXJlbmNlcyIgIiAgICAgICAgICAgICAiIDIKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI0MC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2NhdCA+dGVzdC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKworJXsKK3N0YXRpYyBpbnQgcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpOworc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CitzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKKyV9CisKKyV1bmlvbgoreworICBpbnQgaXZhbDsKK307CisKKyV0b2tlbiBDQUxDX0VPRiAwICJlbmQgb2YgaW5wdXQiCisldG9rZW4gPGl2YWw+IE5VTSAibnVtYmVyIgorJXR5cGUgIDxpdmFsPiBleHAKKworJW5vbmFzc29jICc9JyAgIC8qIGNvbXBhcmlzb24JICAgICAgICovCislbGVmdCAnLScgJysnCislbGVmdCAnKicgJy8nCislbGVmdCBORUcgICAgICAgLyogbmVnYXRpb24tLXVuYXJ5IG1pbnVzICovCislcmlnaHQgJ14nICAgICAgLyogZXhwb25lbnRpYXRpb24gICAgICAgICovCisKKyUlCitpbnB1dDoKKyAgbGluZQorfCBpbnB1dCBsaW5lICAgICAgICAge30KKzsKKworbGluZToKKyAgJ1xuJworfCBleHAgJ1xuJyAgICAgICAgICAge30KKzsKKworZXhwOgorICBOVU0geyAkJCA9ICROVU07IH0KK3wgZXhwW2xdICc9JyBleHBbcl0KKyAgeworICAgIGlmICgkbCAhPSAkcikKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImNhbGM6IGVycm9yOiAlZCAhPSAlZFxuIiwgJGwsICRyKTsKKyAgICAkJCA9ICRsOworICB9Cit8IGV4cFt4XSAnKycgeyAkPGl2YWw+JCA9ICR4OyB9IFtsXSBleHBbcl0geyAkJCA9ICQ8aXZhbD5sbzkgKyAkcjsgfQorfCBleHBbeF0gJy0nIHsgJDxpdmFsPiQgPSAkeDsgfSBbbF0gZXhwW3JdIHsgJCQgPSAkPGl2YWw+ZXhwIC0gJHI7IH0KK3wgZXhwW3hdICcqJyB7ICQ8aXZhbD4kID0gJHg7IH0gW2xdIGV4cFtyXSB7ICQkID0gJGwgKiAkcjsgfQorfCBleHBbbF0gJy8nIGV4cFtyXSAgeyAkJCA9ICRsIC8gJHI7ICAgICAgICB9Cit8ICctJyBleHAgICVwcmVjIE5FRyB7ICQkID0gLSQyOyAgICAgICAgICAgIH0KK3wgZXhwW2xdICdeJyBleHBbcl0gIHsgJCQgPSBwb3dlciAoJGwsICRyMTIpOyB9Cit8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJGV4cG87ICAgICAgICAgICB9Cit8ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgeXllcnJvazsgIH0KK3wgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQorfCAnLScgZXJyb3IgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9Cis7CislJQorX0FURU9GCisKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9uYW1lZC1yZWZzLmF0OjI1MzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyB0ZXN0LmMgdGVzdC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gdGVzdC5jIHRlc3QueSIgIm5hbWVkLXJlZnMuYXQ6MjUzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gdGVzdC5jIHRlc3QueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInRlc3QueTo1MC41MS02MDogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnXCQ8aXZhbD5sbzknCit0ZXN0Lnk6NTAuMy02ODogICAgICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IGxvOQordGVzdC55OjUxLjUxLTYwOiB3YXJuaW5nOiBtaXNsZWFkaW5nIHJlZmVyZW5jZTogJ1wkPGl2YWw+ZXhwJwordGVzdC55OjQyLjEtMzogICAgICAgcmVmZXJzIHRvOiBcJGV4cCBhdCBcJFwkCit0ZXN0Lnk6NTEuNzogICAgICAgICBwb3NzaWJseSBtZWFudDogXCR4LCBoaWRpbmcgXCRleHAgYXQgXCQxCit0ZXN0Lnk6NTEuNDE6ICAgICAgICBwb3NzaWJseSBtZWFudDogXCRyLCBoaWRpbmcgXCRleHAgYXQgXCQ0Cit0ZXN0Lnk6NTIuNTEtNTI6IGVycm9yOiBcJGwgb2YgJ2V4cCcgaGFzIG5vIGRlY2xhcmVkIHR5cGUKK3Rlc3QueTo1NS40MC00MzogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnXCRyMTInCit0ZXN0Lnk6NTUuMy00NzogICAgICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IHIxMgordGVzdC55OjU2LjI5LTMzOiBlcnJvcjogaW52YWxpZCByZWZlcmVuY2U6ICdcJGV4cG8nCit0ZXN0Lnk6NTYuMy00NjogICAgICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IGV4cG8KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6MjUzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfNDAKKyNBVF9TVEFSVF80MQorYXRfZm5fZ3JvdXBfYmFubmVyIDQxICduYW1lZC1yZWZzLmF0OjI3MScgXAorICAiTWlzbGVhZGluZyByZWZlcmVuY2VzIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAiIDIKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI0MS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCitjYXQgPnRlc3QueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisKKyUlCitzdGFydDogZm9vIGZvby5iYXIgeyAkZm9vLmJhcjsgfQorZm9vOiAnMScKK2Zvby5iYXI6ICcyJworX0FURU9GCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9uYW1lZC1yZWZzLmF0OjI3OTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIHRlc3QuYyB0ZXN0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJuYW1lZC1yZWZzLmF0OjI3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyB0ZXN0LmMgdGVzdC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9uYW1lZC1yZWZzLmF0OjI3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6Mjc5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyB0ZXN0LmMgdGVzdC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIHRlc3QuYyB0ZXN0LnkiICJuYW1lZC1yZWZzLmF0OjI3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyB0ZXN0LmMgdGVzdC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9uYW1lZC1yZWZzLmF0OjI3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9uYW1lZC1yZWZzLmF0OjI3OTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm5hbWVkLXJlZnMuYXQ6Mjc5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6Mjc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDoyNzk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJuYW1lZC1yZWZzLmF0OjI3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9uYW1lZC1yZWZzLmF0OjI3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6Mjc5OiBiaXNvbiAtbyB0ZXN0LmMgdGVzdC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAibmFtZWQtcmVmcy5hdDoyNzkiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gdGVzdC5jIHRlc3QueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInRlc3QueToxMS4yMi0yOTogd2FybmluZzogbWlzbGVhZGluZyByZWZlcmVuY2U6ICdcJGZvby5iYXInCit0ZXN0Lnk6MTEuOC0xMDogICAgICByZWZlcnMgdG86IFwkZm9vIGF0IFwkMQordGVzdC55OjExLjEyLTE4OiAgICAgcG9zc2libHkgbWVhbnQ6IFwkW2Zvby5iYXJdIGF0IFwkMgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDoyNzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisjIERlZmluaW5nIFBPU0lYTFlfQ09SUkVDVCBjYXVzZXMgYmlzb24gdG8gY29tcGxhaW4gaWYgb3B0aW9ucyBhcmUKKyMgYWRkZWQgYWZ0ZXIgdGhlIGdyYW1tYXIgZmlsZSBuYW1lLCBzbyBza2lwIHRoZXNlIGNoZWNrcyBpbiB0aGF0CisjIGNhc2UuCitpZiB0ZXN0ICIkUE9TSVhMWV9DT1JSRUNUX0lTX0VYUE9SVEVEIiA9IGZhbHNlOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworCisgICMgVG8gYXZvaWQgZXhwYW5kaW5nIGl0IHJlcGVhdGVkbHksIHN0b3JlIHNwZWNpZmllZCBzdGRvdXQuCisgIDogPmV4cG91dAorCisgICMgUnVuIHdpdGggLVdlcnJvci4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6Mjc5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIHRlc3QuYyB0ZXN0LnkgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIHRlc3QuYyB0ZXN0LnkgLVdlcnJvciIgIm5hbWVkLXJlZnMuYXQ6Mjc5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gdGVzdC5jIHRlc3QueSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9uYW1lZC1yZWZzLmF0OjI3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIEJ1aWxkIGV4cGVjdGVkIHN0ZGVyciB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSAid2FybmluZ3MgYmVpbmcKKyAgIyB0cmVhdGVkIGFzIGVycm9ycyIgbWVzc2FnZS4KKyAgY2F0ID5hdC1iaXNvbi1jaGVjay13YXJuaW5ncyA8PCdfQVRFT0YnCit0ZXN0Lnk6MTEuMjItMjk6IHdhcm5pbmc6IG1pc2xlYWRpbmcgcmVmZXJlbmNlOiAnJGZvby5iYXInCit0ZXN0Lnk6MTEuOC0xMDogICAgICByZWZlcnMgdG86ICRmb28gYXQgJDEKK3Rlc3QueToxMS4xMi0xODogICAgIHBvc3NpYmx5IG1lYW50OiAkW2Zvby5iYXJdIGF0ICQyCitfQVRFT0YKKworICBhdF9iaXNvbl9jaGVja19maXJzdD1gc2VkIC1uIFwKKyAgICAnLzogd2FybmluZzogL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wPWBzZWQgLW4gXAorICAgICcvY29uZmxpY3RzOiBbMC05XS4qcmVkdWNlJC97PTtxO30nIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzYAorICA6ICR7YXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wOj0xfQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdF90bXAgLWx0ICRhdF9iaXNvbl9jaGVja19maXJzdDsgdGhlbgorICAgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PSRhdF9iaXNvbl9jaGVja19maXJzdF90bXAKKyAgZmkKKyAgaWYgdGVzdCAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLWd0IDE7IHRoZW4KKyAgICBzZWQgLW4gIjEsYGV4cHIgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0IC0gMWAicCBcCisgICAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+IGV4cGVycgorICBmaQorICBlY2hvICdiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMnID4+IGV4cGVycgorCisgICMgRmluaXNoIGJ1aWxkaW5nIGV4cGVjdGVkIHN0ZGVyciBhbmQgY2hlY2suICBVbmxpa2Ugd2FybmluZ3MsCisgICMgY29tcGxhaW50cyBjYXVzZSBiaXNvbiB0byBleGl0IGVhcmx5LiAgVGh1cywgd2l0aCAtV2Vycm9yLCBiaXNvbgorICAjIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHJlcG9ydCBhbGwgd2FybmluZ3MgdGhhdCBpdCBkb2VzIHdpdGhvdXQKKyAgIyAtV2Vycm9yLCBidXQgaXQgYXQgbGVhc3QgcmVwb3J0cyBvbmUuCisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YHNlZCAtbiAnJD0nIHN0ZGVycmAKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2xhc3Q6PTF9CisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YGV4cHIgJGF0X2Jpc29uX2NoZWNrX2xhc3QgLSAxYAorICBzZWQgLW4gIiRhdF9iaXNvbl9jaGVja19maXJzdCwkYXRfYmlzb25fY2hlY2tfbGFzdCJwIFwKKyAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+PiBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6Mjc5OiBzZWQgJ3MsLiovXFwoYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzXFwpXCQsXFwxLCcgXFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJuYW1lZC1yZWZzLmF0OjI3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgJ3MsLiovXChiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnNcKSQsXDEsJyBcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCiskYXRfZGlmZiBleHBlcnIgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6Mjc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC0td2FybmluZ3M9ZXJyb3IuCisgIGNwIHN0ZGVyciBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6Mjc5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIHRlc3QuYyB0ZXN0LnkgLS13YXJuaW5ncz1lcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIHRlc3QuYyB0ZXN0LnkgLS13YXJuaW5ncz1lcnJvciIgIm5hbWVkLXJlZnMuYXQ6Mjc5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gdGVzdC5jIHRlc3QueSAtLXdhcm5pbmdzPWVycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCiskYXRfZGlmZiBleHBlcnIgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6Mjc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC1Xbm9uZSBhbmQgLS13YXJuaW5ncz1ub25lIGJ5IG1ha2luZyBzdXJlIHRoYXQKKyAgIyAtV2Vycm9yIGRvZXNuJ3QgY2hhbmdlIHRoZSBleGl0IHN0YXR1cyB3aGVuIC1Xbm9uZSBvcgorICAjIC0td2FybmluZ3M9bm9uZSBpcyBzcGVjaWZpZWQuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9uYW1lZC1yZWZzLmF0OjI3OTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyB0ZXN0LmMgdGVzdC55IC1Xbm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gdGVzdC5jIHRlc3QueSAtV25vbmUgLVdlcnJvciIgIm5hbWVkLXJlZnMuYXQ6Mjc5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gdGVzdC5jIHRlc3QueSAtV25vbmUgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9uYW1lZC1yZWZzLmF0OjI3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6Mjc5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIHRlc3QuYyB0ZXN0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyB0ZXN0LmMgdGVzdC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIiAibmFtZWQtcmVmcy5hdDoyNzkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyB0ZXN0LmMgdGVzdC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6Mjc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfNDEKKyNBVF9TVEFSVF80MgorYXRfZm5fZ3JvdXBfYmFubmVyIDQyICduYW1lZC1yZWZzLmF0OjI4OCcgXAorICAiTWFueSBraW5kcyBvZiBlcnJvcnMiICIgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDIKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI0Mi4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCitjYXQgPnRlc3QueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisKKyV0b2tlbiBJREVOVAorJXRva2VuIE5VTUJFUgorJXRva2VuIEFTU0lHTk9QCisldG9rZW4gSUYKKyV0b2tlbiBJRjEKKyV0b2tlbiBUSEVOCisldG9rZW4gRUxTRQorJXRva2VuIEZJCisldG9rZW4gV0hJTEUKKyV0b2tlbiBETworJXRva2VuIE9ECislc3RhcnQgcHJvZ3JhbQorJSUKK2lmX3N0bXQxOiBJRiBleHByW2NvbmRdIFRIRU4gc3RtdFt0aGVuXSBFTFNFIHN0bXQubGlzdFtlbHNlXSBGSQorICAgICAgICAgIHsgJGlmX3N0bXQxID0gbmV3IElmU3RtdCgkY29uZDEsICR0aGVuLmYxLCAkZWxzZSk7IH07CitpZl9zdG10MjogSUYgZXhwcltjb25kXSBUSEVOIHN0bXRbdGhlbl0gRkkKKyAgICAgICAgICB7ICRpZl9zdG10MiA9IG5ldyBJZlN0bXQoJGNvbmQsICRzdG10LmZpZWxkLCAwKTsgfTsKK2lmX3N0bXQzOiBJRiBleHByW2NvbmRdIFRIRU4gc3RtdC5saXN0IEZJCisgICAgICAgICAgeyAkaWZfc3RtdDMgPSBuZXcgSWZTdG10KCRjb25kLCAkc3RtdC5saXN0LCAwKTsgfTsKK2lmX3N0bXQ0OiBJRiBleHByW2NvbmRdIFRIRU4gc3RtdFt4eXpdIEVMU0Ugc3RtdFt4eXpdIEZJCisgICAgICAgICAgeyAkaWZfc3RtdDQgPSBuZXcgSWZTdG10KCRjb25kLCAkeHl6LCAkY29uZCk7IH07CitpZl9zdG10NTogSUYgZXhwcltjb25kXSBUSEVOIHN0bXQubGlzdFt0aGVuXSBFTFNFIHN0bXQubGlzdFtlbHNlXSBGSQorICAgICAgICAgIHsgJGlmX3N0bXQ1ID0gbmV3IElmU3RtdCgkY29uZCwgJHN0bXQubGlzdCwgJGVsc2UpOyB9OworaWZfc3RtdDY6IElGIGV4cHJbY29uZF0gVEhFTiBzdG10Lmxpc3RbdGhlbl0gRUxTRSBzdG10Lmxpc3RbZWxzZV0gRkkKKyAgICAgICAgICB7ICRpZl9zdG10NiA9IG5ldyBJZlN0bXQoJGNvbmQsICRzdG10Lmxpc3QuZmllbGQsICRlbHNlKTsgfTsKK2lmX3N0bXQ3OiBJRiBleHByW2NvbmRdIFRIRU4gc3RtdC5saXN0W3RoZW5dIEVMU0Ugc3RtdC5saXN0W2Vsc2VdIEZJCisgICAgICAgICAgeyAkaWZfc3RtdDcgPSBuZXcgSWZTdG10KCRjb25kLCAkW3N0bXQubGlzdF0uZmllbGQsICRlbHNlKTsgfTsKK2lmX3N0bXQ4OiBJRiBleHByW2NvbmRdIFRIRU4gc3RtdC5saXN0W3RoZW4uMV0gRUxTRSBzdG10Lmxpc3RbZWxzZV0gRkkKKyAgICAgICAgICB7ICRpZl9zdG10OCA9IG5ldyBJZlN0bXQoJGNvbmQsICR0aGVuLjEsICRlbHNlKTsgfTsKK2lmX3N0bXQ5OiBJRiBleHByW2NvbmRdIFRIRU4gc3RtdC5saXN0W3RoZW4uMV0gRUxTRSBzdG10Lmxpc3RbZWxzZV0gRkkKKyAgICAgICAgICB7ICRpZl9zdG10OSA9IG5ldyBJZlN0bXQoJGNvbmQsICR0aGVuLjEuZmllbGQsICRlbHNlKTsgfTsKK2lmX3N0bXQxMDogSUYgZXhwcltjb25kXSBUSEVOIHN0bXRbc3RtdC54XSBGSQorICAgICAgICAgIHsgJGlmX3N0bXQxMCA9IG5ldyBJZlN0bXQoJGNvbmQsICRzdG10LngsIDApOyB9OworaWYtc3RtdC1hOiBJRiBleHByW2NvbmRdIFRIRU4gc3RtdC5saXN0W3RoZW5dIEVMU0Ugc3RtdC5saXN0W2Vsc2VdIEZJCisgICAgICAgICAgeyAkaWYtc3RtdC1hID0gbmV3IElmU3RtdCgkY29uZCwgJHRoZW4sICRlbHNlKTsgfTsKK2lmLXN0bXQtYjogSUYgZXhwcltjb25kXSBUSEVOIGlmLXN0bXQtYVt0aGVuLWFdIEVMU0Ugc3RtdC5saXN0W2Vsc2VdIEZJCisgICAgICAgICAgeyAkW2lmLXN0bXQtYl0gPSBuZXcgSWZTdG10KCRjb25kLCAkdGhlbi1hLmYsICRlbHNlKTsgfTsKK3Byb2dyYW06IHN0bXQubGlzdDsKK3N0bXQubGlzdDogIHN0bXQgJzsnIHN0bXQubGlzdCB7ICQzLT5pbnNlcnQoJHN0bXQpOyAkJCA9ICQzOyB9CisgICAgICAgIHwgICBzdG10ICc7JyB7IFNMID0gbmV3IFN0bXRMaXN0KCk7ICBTTC0+aW5zZXJ0KCQxKTsgJCQgPSBTTDsgfQorICAgICAgICA7CitzdG10OiAgYXNzaWduX3N0bXQgeyAkJCA9ICQxOyB9CisgICAgfCAgaWZfc3RtdCB7ICQkID0gJDE7IH0KKyAgICB8ICBpZl9zdG10MSB7ICQkID0gJDE7IH0KKyAgICB8ICB3aGlsZV9zdG10IHsgJCQgPSAkMTsgfQorICAgIDsKK2Fzc2lnbl9zdG10OiBJREVOVCBBU1NJR05PUCBleHByCisgICAgICAgeyAkJCA9IG5ldyBBc3NpZ25TdG10KHN0cmluZygkMSksJDMpOyB9OworaWZfc3RtdDogSUYgZXhwcltjb25kXSBUSEVOIHN0bXQubGlzdCBGSQorICAgICAgIHsgJGlmX3N0bXQgPSBuZXcgSWZTdG10KCRjb25kLCAkW3N0bXQubGlzdF0sIDApOyB9Oword2hpbGVfc3RtdFtyZXNdOiBXSElMRSBleHByIERPIHN0bXQubGlzdCBPRAorICAgICAgIHsgJHJlcyA9IG5ldyBXaGlsZVN0bXQoJFtleHByXSwgJFtzdG10Lmxpc3RdKTsgfTsKK2V4cHI6IGV4cHIgJysnIHRlcm0gICB7ICQkID0gbmV3IFBsdXMoJDEsJDMpOyB9CisgICAgfCBleHByICctJyB0ZXJtICAgeyAkJCA9IG5ldyBNaW51cygkMSwkMyk7IH0KKyAgICB8IHRlcm0gICAgICAgICAgICB7ICQkID0gJDE7IH0KKyAgICA7Cit0ZXJtOiB0ZXJtICcqJyBmYWN0b3IgICB7ICQkID0gbmV3IFRpbWVzKCQxLCQzKTsgfQorICAgIHwgZmFjdG9yICAgICAgICAgICAgeyAkJCA9ICQxOyB9CisgICAgOworZmFjdG9yOiAgICAgJygnIGV4cHIgJyknICB7ICQkID0gJDI7IH0KKyAgICB8ICAgICAgIE5VTUJFUiB7ICQkID0gbmV3IE51bWJlcigkMSk7IH0KKyAgICB8ICAgICAgIElERU5UIHsgJCQgPSBuZXcgSWRlbnQoc3RyaW5nKCQxKSk7IH0KKyAgICA7CitfQVRFT0YKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9uYW1lZC1yZWZzLmF0OjM1NTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyB0ZXN0LmMgdGVzdC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gdGVzdC5jIHRlc3QueSIgIm5hbWVkLXJlZnMuYXQ6MzU1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gdGVzdC5jIHRlc3QueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInRlc3QueToyNC4zNi00MTogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnXCRjb25kMScKK3Rlc3QueToyMy4xMS0yNC42MjogIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogY29uZDEKK3Rlc3QueToyNi40My01MzogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnXCRzdG10LmZpZWxkJwordGVzdC55OjI1LjExLTI2LjYwOiAgc3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiBzdG10Cit0ZXN0Lnk6MjUuMzUtMzg6ICAgICBwb3NzaWJseSBtZWFudDogXCR0aGVuLmZpZWxkLCBoaWRpbmcgXCRzdG10LmZpZWxkIGF0IFwkNAordGVzdC55OjI4LjQzLTUyOiBlcnJvcjogaW52YWxpZCByZWZlcmVuY2U6ICdcJHN0bXQubGlzdCcKK3Rlc3QueToyNy4xMS0yOC41OTogIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogc3RtdAordGVzdC55OjI3LjMwLTM4OiAgICAgcG9zc2libHkgbWVhbnQ6IFwkW3N0bXQubGlzdF0gYXQgXCQ0Cit0ZXN0Lnk6MzAuNDMtNDY6IGVycm9yOiBhbWJpZ3VvdXMgcmVmZXJlbmNlOiAnXCR4eXonCit0ZXN0Lnk6MjkuMzUtMzc6ICAgICByZWZlcnMgdG86IFwkeHl6IGF0IFwkNAordGVzdC55OjI5LjUwLTUyOiAgICAgcmVmZXJzIHRvOiBcJHh5eiBhdCBcJDYKK3Rlc3QueTozMi40My01MjogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnXCRzdG10Lmxpc3QnCit0ZXN0Lnk6MzEuMTEtMzIuNjM6ICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IHN0bXQKK3Rlc3QueTozMS40MC00MzogICAgIHBvc3NpYmx5IG1lYW50OiBcJHRoZW4sIGhpZGluZyBcJFtzdG10Lmxpc3RdIGF0IFwkNAordGVzdC55OjMxLjYxLTY0OiAgICAgcG9zc2libHkgbWVhbnQ6IFwkZWxzZSwgaGlkaW5nIFwkW3N0bXQubGlzdF0gYXQgXCQ2Cit0ZXN0Lnk6MzQuNDMtNTg6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJ1wkc3RtdC5saXN0LmZpZWxkJwordGVzdC55OjMzLjExLTM0LjY5OiAgc3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiBzdG10Cit0ZXN0Lnk6MzMuNDAtNDM6ICAgICBwb3NzaWJseSBtZWFudDogXCR0aGVuLmZpZWxkLCBoaWRpbmcgXCRbc3RtdC5saXN0XS5maWVsZCBhdCBcJDQKK3Rlc3QueTozMy42MS02NDogICAgIHBvc3NpYmx5IG1lYW50OiBcJGVsc2UuZmllbGQsIGhpZGluZyBcJFtzdG10Lmxpc3RdLmZpZWxkIGF0IFwkNgordGVzdC55OjM2LjQzLTU0OiBlcnJvcjogaW52YWxpZCByZWZlcmVuY2U6ICdcJFtzdG10Lmxpc3RdJwordGVzdC55OjM1LjExLTM2LjcxOiAgc3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiBzdG10Lmxpc3QKK3Rlc3QueTozNS40MC00MzogICAgIHBvc3NpYmx5IG1lYW50OiBcJHRoZW4sIGhpZGluZyBcJFtzdG10Lmxpc3RdIGF0IFwkNAordGVzdC55OjM1LjYxLTY0OiAgICAgcG9zc2libHkgbWVhbnQ6IFwkZWxzZSwgaGlkaW5nIFwkW3N0bXQubGlzdF0gYXQgXCQ2Cit0ZXN0Lnk6MzguNDMtNDk6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJ1wkdGhlbi4xJwordGVzdC55OjM3LjExLTM4LjYwOiAgc3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiB0aGVuCit0ZXN0Lnk6MzcuNDAtNDU6ICAgICBwb3NzaWJseSBtZWFudDogXCRbdGhlbi4xXSBhdCBcJDQKK3Rlc3QueTo0MC40My01NTogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnXCR0aGVuLjEuZmllbGQnCit0ZXN0Lnk6MzkuMTEtNDAuNjY6ICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IHRoZW4KK3Rlc3QueTozOS40MC00NTogICAgIHBvc3NpYmx5IG1lYW50OiBcJFt0aGVuLjFdLmZpZWxkIGF0IFwkNAordGVzdC55OjQyLjQ0LTUwOiBlcnJvcjogaW52YWxpZCByZWZlcmVuY2U6ICdcJHN0bXQueCcKK3Rlc3QueTo0MS4xMi00Mi41NzogIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogc3RtdAordGVzdC55OjQxLjM2LTQxOiAgICAgcG9zc2libHkgbWVhbnQ6IFwkW3N0bXQueF0ueCwgaGlkaW5nIFwkc3RtdC54IGF0IFwkNAordGVzdC55OjQxLjM2LTQxOiAgICAgcG9zc2libHkgbWVhbnQ6IFwkW3N0bXQueF0gYXQgXCQ0Cit0ZXN0Lnk6NDQuMTMtMjI6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJ1wkaWYtc3RtdC1hJwordGVzdC55OjQzLjEyLTQ0LjU5OiAgc3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiBpZgordGVzdC55OjQzLjEtOTogICAgICAgcG9zc2libHkgbWVhbnQ6IFwkW2lmLXN0bXQtYV0gYXQgXCRcJAordGVzdC55OjQ2LjQ2LTU0OiBlcnJvcjogaW52YWxpZCByZWZlcmVuY2U6ICdcJHRoZW4tYS5mJwordGVzdC55OjQ1LjEyLTQ2LjY1OiAgc3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiB0aGVuCit0ZXN0Lnk6NDUuNDEtNDY6ICAgICBwb3NzaWJseSBtZWFudDogXCRbdGhlbi1hXS5mIGF0IFwkNAorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDozNTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDozOTc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCAtbyB0ZXN0LmMgdGVzdC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCAtbyB0ZXN0LmMgdGVzdC55IiAibmFtZWQtcmVmcy5hdDozOTciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IC1vIHRlc3QuYyB0ZXN0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJ0ZXN0Lnk6MjQuMzYtNDE6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJ1wkY29uZDEnCisgICAgICAgICAgIHsgXCRpZl9zdG10MSA9IG5ldyBJZlN0bXQoXCRjb25kMSwgXCR0aGVuLmYxLCBcJGVsc2UpOyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eCit0ZXN0Lnk6MjMuMTEtMjQuNjI6ICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IGNvbmQxCisgaWZfc3RtdDE6IElGIGV4cHJbY29uZF0gVEhFTiBzdG10W3RoZW5dIEVMU0Ugc3RtdC5saXN0W2Vsc2VdIEZJCisgICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCit0ZXN0Lnk6MjYuNDMtNTM6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJ1wkc3RtdC5maWVsZCcKKyAgICAgICAgICAgeyBcJGlmX3N0bXQyID0gbmV3IElmU3RtdChcJGNvbmQsIFwkc3RtdC5maWVsZCwgMCk7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl4KK3Rlc3QueToyNS4xMS0yNi42MDogIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogc3RtdAorIGlmX3N0bXQyOiBJRiBleHByW2NvbmRdIFRIRU4gc3RtdFt0aGVuXSBGSQorICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgordGVzdC55OjI1LjM1LTM4OiAgICAgcG9zc2libHkgbWVhbnQ6IFwkdGhlbi5maWVsZCwgaGlkaW5nIFwkc3RtdC5maWVsZCBhdCBcJDQKKyBpZl9zdG10MjogSUYgZXhwcltjb25kXSBUSEVOIHN0bXRbdGhlbl0gRkkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXgordGVzdC55OjI4LjQzLTUyOiBlcnJvcjogaW52YWxpZCByZWZlcmVuY2U6ICdcJHN0bXQubGlzdCcKKyAgICAgICAgICAgeyBcJGlmX3N0bXQzID0gbmV3IElmU3RtdChcJGNvbmQsIFwkc3RtdC5saXN0LCAwKTsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eCit0ZXN0Lnk6MjcuMTEtMjguNTk6ICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IHN0bXQKKyBpZl9zdG10MzogSUYgZXhwcltjb25kXSBUSEVOIHN0bXQubGlzdCBGSQorICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCit0ZXN0Lnk6MjcuMzAtMzg6ICAgICBwb3NzaWJseSBtZWFudDogXCRbc3RtdC5saXN0XSBhdCBcJDQKKyBpZl9zdG10MzogSUYgZXhwcltjb25kXSBUSEVOIHN0bXQubGlzdCBGSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eCit0ZXN0Lnk6MzAuNDMtNDY6IGVycm9yOiBhbWJpZ3VvdXMgcmVmZXJlbmNlOiAnXCR4eXonCisgICAgICAgICAgIHsgXCRpZl9zdG10NCA9IG5ldyBJZlN0bXQoXCRjb25kLCBcJHh5eiwgXCRjb25kKTsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eCit0ZXN0Lnk6MjkuMzUtMzc6ICAgICByZWZlcnMgdG86IFwkeHl6IGF0IFwkNAorIGlmX3N0bXQ0OiBJRiBleHByW2NvbmRdIFRIRU4gc3RtdFt4eXpdIEVMU0Ugc3RtdFt4eXpdIEZJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXgordGVzdC55OjI5LjUwLTUyOiAgICAgcmVmZXJzIHRvOiBcJHh5eiBhdCBcJDYKKyBpZl9zdG10NDogSUYgZXhwcltjb25kXSBUSEVOIHN0bXRbeHl6XSBFTFNFIHN0bXRbeHl6XSBGSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KK3Rlc3QueTozMi40My01MjogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnXCRzdG10Lmxpc3QnCisgICAgICAgICAgIHsgXCRpZl9zdG10NSA9IG5ldyBJZlN0bXQoXCRjb25kLCBcJHN0bXQubGlzdCwgXCRlbHNlKTsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eCit0ZXN0Lnk6MzEuMTEtMzIuNjM6ICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IHN0bXQKKyBpZl9zdG10NTogSUYgZXhwcltjb25kXSBUSEVOIHN0bXQubGlzdFt0aGVuXSBFTFNFIHN0bXQubGlzdFtlbHNlXSBGSQorICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCit0ZXN0Lnk6MzEuNDAtNDM6ICAgICBwb3NzaWJseSBtZWFudDogXCR0aGVuLCBoaWRpbmcgXCRbc3RtdC5saXN0XSBhdCBcJDQKKyBpZl9zdG10NTogSUYgZXhwcltjb25kXSBUSEVOIHN0bXQubGlzdFt0aGVuXSBFTFNFIHN0bXQubGlzdFtlbHNlXSBGSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl4KK3Rlc3QueTozMS42MS02NDogICAgIHBvc3NpYmx5IG1lYW50OiBcJGVsc2UsIGhpZGluZyBcJFtzdG10Lmxpc3RdIGF0IFwkNgorIGlmX3N0bXQ1OiBJRiBleHByW2NvbmRdIFRIRU4gc3RtdC5saXN0W3RoZW5dIEVMU0Ugc3RtdC5saXN0W2Vsc2VdIEZJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXgordGVzdC55OjM0LjQzLTU4OiBlcnJvcjogaW52YWxpZCByZWZlcmVuY2U6ICdcJHN0bXQubGlzdC5maWVsZCcKKyAgICAgICAgICAgeyBcJGlmX3N0bXQ2ID0gbmV3IElmU3RtdChcJGNvbmQsIFwkc3RtdC5saXN0LmZpZWxkLCBcJGVsc2UpOyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl4KK3Rlc3QueTozMy4xMS0zNC42OTogIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogc3RtdAorIGlmX3N0bXQ2OiBJRiBleHByW2NvbmRdIFRIRU4gc3RtdC5saXN0W3RoZW5dIEVMU0Ugc3RtdC5saXN0W2Vsc2VdIEZJCisgICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK3Rlc3QueTozMy40MC00MzogICAgIHBvc3NpYmx5IG1lYW50OiBcJHRoZW4uZmllbGQsIGhpZGluZyBcJFtzdG10Lmxpc3RdLmZpZWxkIGF0IFwkNAorIGlmX3N0bXQ2OiBJRiBleHByW2NvbmRdIFRIRU4gc3RtdC5saXN0W3RoZW5dIEVMU0Ugc3RtdC5saXN0W2Vsc2VdIEZJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXgordGVzdC55OjMzLjYxLTY0OiAgICAgcG9zc2libHkgbWVhbnQ6IFwkZWxzZS5maWVsZCwgaGlkaW5nIFwkW3N0bXQubGlzdF0uZmllbGQgYXQgXCQ2CisgaWZfc3RtdDY6IElGIGV4cHJbY29uZF0gVEhFTiBzdG10Lmxpc3RbdGhlbl0gRUxTRSBzdG10Lmxpc3RbZWxzZV0gRkkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eCit0ZXN0Lnk6MzYuNDMtNTQ6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJ1wkW3N0bXQubGlzdF0nCisgICAgICAgICAgIHsgXCRpZl9zdG10NyA9IG5ldyBJZlN0bXQoXCRjb25kLCBcJFtzdG10Lmxpc3RdLmZpZWxkLCBcJGVsc2UpOyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eXgordGVzdC55OjM1LjExLTM2LjcxOiAgc3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiBzdG10Lmxpc3QKKyBpZl9zdG10NzogSUYgZXhwcltjb25kXSBUSEVOIHN0bXQubGlzdFt0aGVuXSBFTFNFIHN0bXQubGlzdFtlbHNlXSBGSQorICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCit0ZXN0Lnk6MzUuNDAtNDM6ICAgICBwb3NzaWJseSBtZWFudDogXCR0aGVuLCBoaWRpbmcgXCRbc3RtdC5saXN0XSBhdCBcJDQKKyBpZl9zdG10NzogSUYgZXhwcltjb25kXSBUSEVOIHN0bXQubGlzdFt0aGVuXSBFTFNFIHN0bXQubGlzdFtlbHNlXSBGSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl4KK3Rlc3QueTozNS42MS02NDogICAgIHBvc3NpYmx5IG1lYW50OiBcJGVsc2UsIGhpZGluZyBcJFtzdG10Lmxpc3RdIGF0IFwkNgorIGlmX3N0bXQ3OiBJRiBleHByW2NvbmRdIFRIRU4gc3RtdC5saXN0W3RoZW5dIEVMU0Ugc3RtdC5saXN0W2Vsc2VdIEZJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXgordGVzdC55OjM4LjQzLTQ5OiBlcnJvcjogaW52YWxpZCByZWZlcmVuY2U6ICdcJHRoZW4uMScKKyAgICAgICAgICAgeyBcJGlmX3N0bXQ4ID0gbmV3IElmU3RtdChcJGNvbmQsIFwkdGhlbi4xLCBcJGVsc2UpOyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl4KK3Rlc3QueTozNy4xMS0zOC42MDogIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogdGhlbgorIGlmX3N0bXQ4OiBJRiBleHByW2NvbmRdIFRIRU4gc3RtdC5saXN0W3RoZW4uMV0gRUxTRSBzdG10Lmxpc3RbZWxzZV0gRkkKKyAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCit0ZXN0Lnk6MzcuNDAtNDU6ICAgICBwb3NzaWJseSBtZWFudDogXCRbdGhlbi4xXSBhdCBcJDQKKyBpZl9zdG10ODogSUYgZXhwcltjb25kXSBUSEVOIHN0bXQubGlzdFt0aGVuLjFdIEVMU0Ugc3RtdC5saXN0W2Vsc2VdIEZJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eCit0ZXN0Lnk6NDAuNDMtNTU6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJ1wkdGhlbi4xLmZpZWxkJworICAgICAgICAgICB7IFwkaWZfc3RtdDkgPSBuZXcgSWZTdG10KFwkY29uZCwgXCR0aGVuLjEuZmllbGQsIFwkZWxzZSk7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl5eXgordGVzdC55OjM5LjExLTQwLjY2OiAgc3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiB0aGVuCisgaWZfc3RtdDk6IElGIGV4cHJbY29uZF0gVEhFTiBzdG10Lmxpc3RbdGhlbi4xXSBFTFNFIHN0bXQubGlzdFtlbHNlXSBGSQorICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK3Rlc3QueTozOS40MC00NTogICAgIHBvc3NpYmx5IG1lYW50OiBcJFt0aGVuLjFdLmZpZWxkIGF0IFwkNAorIGlmX3N0bXQ5OiBJRiBleHByW2NvbmRdIFRIRU4gc3RtdC5saXN0W3RoZW4uMV0gRUxTRSBzdG10Lmxpc3RbZWxzZV0gRkkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4KK3Rlc3QueTo0Mi40NC01MDogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnXCRzdG10LngnCisgICAgICAgICAgIHsgXCRpZl9zdG10MTAgPSBuZXcgSWZTdG10KFwkY29uZCwgXCRzdG10LngsIDApOyB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eCit0ZXN0Lnk6NDEuMTItNDIuNTc6ICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IHN0bXQKKyBpZl9zdG10MTA6IElGIGV4cHJbY29uZF0gVEhFTiBzdG10W3N0bXQueF0gRkkKKyAgICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK3Rlc3QueTo0MS4zNi00MTogICAgIHBvc3NpYmx5IG1lYW50OiBcJFtzdG10LnhdLngsIGhpZGluZyBcJHN0bXQueCBhdCBcJDQKKyBpZl9zdG10MTA6IElGIGV4cHJbY29uZF0gVEhFTiBzdG10W3N0bXQueF0gRkkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXgordGVzdC55OjQxLjM2LTQxOiAgICAgcG9zc2libHkgbWVhbnQ6IFwkW3N0bXQueF0gYXQgXCQ0CisgaWZfc3RtdDEwOiBJRiBleHByW2NvbmRdIFRIRU4gc3RtdFtzdG10LnhdIEZJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4KK3Rlc3QueTo0NC4xMy0yMjogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnXCRpZi1zdG10LWEnCisgICAgICAgICAgIHsgXCRpZi1zdG10LWEgPSBuZXcgSWZTdG10KFwkY29uZCwgXCR0aGVuLCBcJGVsc2UpOyB9OworICAgICAgICAgICAgIF5eXl5eXl5eXl4KK3Rlc3QueTo0My4xMi00NC41OTogIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogaWYKKyBpZi1zdG10LWE6IElGIGV4cHJbY29uZF0gVEhFTiBzdG10Lmxpc3RbdGhlbl0gRUxTRSBzdG10Lmxpc3RbZWxzZV0gRkkKKyAgICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK3Rlc3QueTo0My4xLTk6ICAgICAgIHBvc3NpYmx5IG1lYW50OiBcJFtpZi1zdG10LWFdIGF0IFwkXCQKKyBpZi1zdG10LWE6IElGIGV4cHJbY29uZF0gVEhFTiBzdG10Lmxpc3RbdGhlbl0gRUxTRSBzdG10Lmxpc3RbZWxzZV0gRkkKKyBeXl5eXl5eXl4KK3Rlc3QueTo0Ni40Ni01NDogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnXCR0aGVuLWEuZicKKyAgICAgICAgICAgeyBcJFtpZi1zdG10LWJdID0gbmV3IElmU3RtdChcJGNvbmQsIFwkdGhlbi1hLmYsIFwkZWxzZSk7IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eCit0ZXN0Lnk6NDUuMTItNDYuNjU6ICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IHRoZW4KKyBpZi1zdG10LWI6IElGIGV4cHJbY29uZF0gVEhFTiBpZi1zdG10LWFbdGhlbi1hXSBFTFNFIHN0bXQubGlzdFtlbHNlXSBGSQorICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCit0ZXN0Lnk6NDUuNDEtNDY6ICAgICBwb3NzaWJseSBtZWFudDogXCRbdGhlbi1hXS5mIGF0IFwkNAorIGlmLXN0bXQtYjogSUYgZXhwcltjb25kXSBUSEVOIGlmLXN0bXQtYVt0aGVuLWFdIEVMU0Ugc3RtdC5saXN0W2Vsc2VdIEZJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDozOTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF80MgorI0FUX1NUQVJUXzQzCithdF9mbl9ncm91cF9iYW5uZXIgNDMgJ25hbWVkLXJlZnMuYXQ6NTIxJyBcCisgICJNaXNzaW5nIGlkZW50aWZpZXJzIGluIGJyYWNrZXRzIiAiICAgICAgICAgICAgICAgICIgMgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjQzLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKK2NhdCA+dGVzdC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKworJSUKK3N0YXJ0OiBmb29bXSBiYXIKKyAgeyBzID0gJGZvbzsgfQorX0FURU9GCisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDo1Mjg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gdGVzdC5jIHRlc3QueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIHRlc3QuYyB0ZXN0LnkiICJuYW1lZC1yZWZzLmF0OjUyOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIHRlc3QuYyB0ZXN0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJ0ZXN0Lnk6MTEuMTI6IGVycm9yOiBhbiBpZGVudGlmaWVyIGV4cGVjdGVkCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9uYW1lZC1yZWZzLmF0OjUyOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF80MworI0FUX1NUQVJUXzQ0CithdF9mbl9ncm91cF9iYW5uZXIgNDQgJ25hbWVkLXJlZnMuYXQ6NTM1JyBcCisgICJSZWR1bmRhbnQgd29yZHMgaW4gYnJhY2tldHMiICIgICAgICAgICAgICAgICAgICAgICIgMgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjQ0LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKK2NhdCA+dGVzdC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKworJSUKK3N0YXJ0OiBmb29bIGEgZCBdIGJhcgorICB7IHMgPSAkZm9vOyB9CitfQVRFT0YKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9uYW1lZC1yZWZzLmF0OjU0MjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyB0ZXN0LmMgdGVzdC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gdGVzdC5jIHRlc3QueSIgIm5hbWVkLXJlZnMuYXQ6NTQyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gdGVzdC5jIHRlc3QueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInRlc3QueToxMS4xNTogZXJyb3I6IHVuZXhwZWN0ZWQgaWRlbnRpZmllciBpbiBicmFja2V0ZWQgbmFtZTogJ2QnCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9uYW1lZC1yZWZzLmF0OjU0MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF80NAorI0FUX1NUQVJUXzQ1CithdF9mbl9ncm91cF9iYW5uZXIgNDUgJ25hbWVkLXJlZnMuYXQ6NTQ5JyBcCisgICJDb21tZW50cyBpbiBicmFja2V0cyIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICIgMgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjQ1LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKK2NhdCA+dGVzdC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKworJSUKK3N0YXJ0OiBmb29bLyogY29tbWVudCAqL10gYmFyCisgIHsgcyA9ICRmb287IH0KK19BVEVPRgorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6NTU2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIHRlc3QuYyB0ZXN0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyB0ZXN0LmMgdGVzdC55IiAibmFtZWQtcmVmcy5hdDo1NTYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyB0ZXN0LmMgdGVzdC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAidGVzdC55OjExLjI1OiBlcnJvcjogYW4gaWRlbnRpZmllciBleHBlY3RlZAorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDo1NTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfNDUKKyNBVF9TVEFSVF80NgorYXRfZm5fZ3JvdXBfYmFubmVyIDQ2ICduYW1lZC1yZWZzLmF0OjU2MycgXAorICAiU3RyYXkgc3ltYm9scyBpbiBicmFja2V0cyIgIiAgICAgICAgICAgICAgICAgICAgICAiIDIKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI0Ni4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCitjYXQgPnRlc3QueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisKKyUlCitzdGFydDogZm9vWyAlIC8qIGFhYSAqLyAqJi0uK1wwMDBcMDAxXDAwMlwzNzcgXSBiYXIKKyAgeyBzID0gJGZvbzsgfQorX0FURU9GCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6NTcwOiBcJFBFUkwgLXBpIC1lICdzL1xcXFwoXFxkezN9KS9jaHIob2N0KFwkMSkpL2dlJyB0ZXN0LnkgfHwgZXhpdCA3NyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFBFUkwgLXBpIC1lICdzL1xcXFwoXFxkezN9KS9jaHIob2N0KCQxKSkvZ2UnIHRlc3QueSB8fCBleGl0IDc3IiAibmFtZWQtcmVmcy5hdDo1NzAiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLXBpIC1lICdzL1xcKFxkezN9KS9jaHIob2N0KCQxKSkvZ2UnIHRlc3QueSB8fCBleGl0IDc3CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6NTcwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDo1NzE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gdGVzdC5jIHRlc3QueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIHRlc3QuYyB0ZXN0LnkiICJuYW1lZC1yZWZzLmF0OjU3MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIHRlc3QuYyB0ZXN0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJ0ZXN0Lnk6MTEuMTM6IGVycm9yOiBpbnZhbGlkIGNoYXJhY3RlciBpbiBicmFja2V0ZWQgbmFtZTogJyUnCit0ZXN0Lnk6MTEuMjUtMjc6IGVycm9yOiBpbnZhbGlkIGNoYXJhY3RlcnMgaW4gYnJhY2tldGVkIG5hbWU6ICcqJi0nCit0ZXN0Lnk6MTEuMjktMzA6IGVycm9yOiBpbnZhbGlkIGNoYXJhY3RlcnMgaW4gYnJhY2tldGVkIG5hbWU6ICcrXFwwXFwwMDFcXDAwMlxcMzc3JworIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDo1NzEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfNDYKKyNBVF9TVEFSVF80NworYXRfZm5fZ3JvdXBfYmFubmVyIDQ3ICduYW1lZC1yZWZzLmF0OjU4MCcgXAorICAiUmVkdW5kYW50IHdvcmRzIGluIExIUyBicmFja2V0cyIgIiAgICAgICAgICAgICAgICAiIDIKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI0Ny4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCitjYXQgPnRlc3QueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisKKyUlCitzdGFydFthIHNdOiBmb287CitfQVRFT0YKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9uYW1lZC1yZWZzLmF0OjU4NjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyB0ZXN0LmMgdGVzdC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gdGVzdC5jIHRlc3QueSIgIm5hbWVkLXJlZnMuYXQ6NTg2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gdGVzdC5jIHRlc3QueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInRlc3QueToxMS45OiBlcnJvcjogdW5leHBlY3RlZCBpZGVudGlmaWVyIGluIGJyYWNrZXRlZCBuYW1lOiAncycKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6NTg2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzQ3CisjQVRfU1RBUlRfNDgKK2F0X2ZuX2dyb3VwX2Jhbm5lciA0OCAnbmFtZWQtcmVmcy5hdDo1OTUnIFwKKyAgIkZhY3RvcmVkIExIUyIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAyCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiNDguICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworY2F0ID50ZXN0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworCislJQorc3RhcnRbYV06ICJmb28iIHwgImJhciI7CitfQVRFT0YKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6NjAxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gdGVzdC5jIHRlc3QueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgIm5hbWVkLXJlZnMuYXQ6NjAxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIHRlc3QuYyB0ZXN0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6NjAxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDo2MDE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIHRlc3QuYyB0ZXN0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gdGVzdC5jIHRlc3QueSIgIm5hbWVkLXJlZnMuYXQ6NjAxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIHRlc3QuYyB0ZXN0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6NjAxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6NjAxOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAibmFtZWQtcmVmcy5hdDo2MDEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDo2MDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9uYW1lZC1yZWZzLmF0OjYwMTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm5hbWVkLXJlZnMuYXQ6NjAxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6NjAxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDo2MDE6IGJpc29uIC1vIHRlc3QuYyB0ZXN0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJuYW1lZC1yZWZzLmF0OjYwMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyB0ZXN0LmMgdGVzdC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6NjAxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzQ4CisjQVRfU1RBUlRfNDkKK2F0X2ZuX2dyb3VwX2Jhbm5lciA0OSAnbmFtZWQtcmVmcy5hdDo2MDYnIFwKKyAgIlVucmVzb2x2ZWQgcmVmZXJlbmNlcyIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIiAyCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiNDkuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworY2F0ID50ZXN0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworCislJQorc3RhdDoKKyAgc3ltX2Egc3ltX2IgeyBmdW5jKCRzeW0uZmllbGQpOyB9Cit8IHN5bV9hIHN5bV9iIHsgZnVuYygkPGFhPnN5bS5maWVsZCk7IH0KK3wgc3ltX2Egc3ltX2IgeyBmdW5jKCRbc3ltLmZpZWxkXSk7IH0KK3wgc3ltX2Egc3ltX2IgeyBmdW5jKCQ8YWE+W3N5bS5maWVsZF0pOyB9Cit8IHN5bV9hIHN5bV9iIHsgZnVuYygkc3ltKTsgfQorfCBzeW1fYSBzeW1fYiB7IGZ1bmMoJDxhYT5zeW0pOyB9Cit8IHN5bV9hIHN5bV9iIHsgZnVuYygkW3N5bV0pOyB9IHN5bV9hIHN5bV9iIHsgZnVuYygkPGFhPltzeW1dKTsgfQorOworCitzdGF0MToKKyAgc3ltX2Egc3ltX2IgeyBmdW5jKCRzeW0tZmllbGQpOyB9Cit8IHN5bV9hIHN5bV9iIHsgZnVuYygkPGFhPnN5bS1maWVsZCk7IH0KK3wgc3ltX2Egc3ltX2IgeyBmdW5jKCRbc3ltLWZpZWxkXSk7IH0KK3wgc3ltX2Egc3ltX2IgeyBmdW5jKCQ8YWE+W3N5bS1maWVsZF0pOyB9Cit8IHN5bV9hIHN5bV9iIHsgZnVuYygkc3ltKTsgfQorfCBzeW1fYSBzeW1fYiB7IGZ1bmMoJDxhYT5zeW0pOyB9Cit8IHN5bV9hIHN5bV9iIHsgZnVuYygkW3N5bV0pOyB9IHN5bV9hIHN5bV9iIHsgZnVuYygkPGFhPltzeW1dKTsgfQorOworCitzeW1fYTogJ2EnOworc3ltX2I6ICdiJzsKK19BVEVPRgorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6NjMzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIHRlc3QuYyB0ZXN0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyB0ZXN0LmMgdGVzdC55IiAibmFtZWQtcmVmcy5hdDo2MzMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyB0ZXN0LmMgdGVzdC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAidGVzdC55OjEyLjIyLTMxOiBlcnJvcjogaW52YWxpZCByZWZlcmVuY2U6ICdcJHN5bS5maWVsZCcKK3Rlc3QueToxMi4zLTM1OiAgICAgIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogc3ltCit0ZXN0Lnk6MTMuMjItMzU6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJ1wkPGFhPnN5bS5maWVsZCcKK3Rlc3QueToxMy4zLTM5OiAgICAgIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogc3ltCit0ZXN0Lnk6MTQuMjItMzM6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJ1wkW3N5bS5maWVsZF0nCit0ZXN0Lnk6MTQuMy0zNzogICAgICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IHN5bS5maWVsZAordGVzdC55OjE1LjIyLTM3OiBlcnJvcjogaW52YWxpZCByZWZlcmVuY2U6ICdcJDxhYT5bc3ltLmZpZWxkXScKK3Rlc3QueToxNS4zLTQxOiAgICAgIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogc3ltLmZpZWxkCit0ZXN0Lnk6MTYuMjItMjU6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJ1wkc3ltJwordGVzdC55OjE2LjMtMjk6ICAgICAgc3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiBzeW0KK3Rlc3QueToxNy4yMi0yOTogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnXCQ8YWE+c3ltJwordGVzdC55OjE3LjMtMzM6ICAgICAgc3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiBzeW0KK3Rlc3QueToxOC4yMi0yNzogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnXCRbc3ltXScKK3Rlc3QueToxOC4zLTY1OiAgICAgIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbiBiZWZvcmUgXCQzOiBzeW0KK3Rlc3QueToxOC41Mi02MTogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnXCQ8YWE+W3N5bV0nCit0ZXN0Lnk6MTguMy02NTogICAgICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IHN5bQordGVzdC55OjIyLjIyLTMxOiBlcnJvcjogaW52YWxpZCByZWZlcmVuY2U6ICdcJHN5bS1maWVsZCcKK3Rlc3QueToyMi4zLTM1OiAgICAgIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogc3ltCit0ZXN0Lnk6MjMuMjItMzU6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJ1wkPGFhPnN5bS1maWVsZCcKK3Rlc3QueToyMy4zLTM5OiAgICAgIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogc3ltCit0ZXN0Lnk6MjQuMjItMzM6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJ1wkW3N5bS1maWVsZF0nCit0ZXN0Lnk6MjQuMy0zNzogICAgICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IHN5bS1maWVsZAordGVzdC55OjI1LjIyLTM3OiBlcnJvcjogaW52YWxpZCByZWZlcmVuY2U6ICdcJDxhYT5bc3ltLWZpZWxkXScKK3Rlc3QueToyNS4zLTQxOiAgICAgIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbjogc3ltLWZpZWxkCit0ZXN0Lnk6MjYuMjItMjU6IGVycm9yOiBpbnZhbGlkIHJlZmVyZW5jZTogJ1wkc3ltJwordGVzdC55OjI2LjMtMjk6ICAgICAgc3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiBzeW0KK3Rlc3QueToyNy4yMi0yOTogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnXCQ8YWE+c3ltJwordGVzdC55OjI3LjMtMzM6ICAgICAgc3ltYm9sIG5vdCBmb3VuZCBpbiBwcm9kdWN0aW9uOiBzeW0KK3Rlc3QueToyOC4yMi0yNzogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnXCRbc3ltXScKK3Rlc3QueToyOC4zLTY1OiAgICAgIHN5bWJvbCBub3QgZm91bmQgaW4gcHJvZHVjdGlvbiBiZWZvcmUgXCQzOiBzeW0KK3Rlc3QueToyOC41Mi02MTogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnXCQ8YWE+W3N5bV0nCit0ZXN0Lnk6MjguMy02NTogICAgICBzeW1ib2wgbm90IGZvdW5kIGluIHByb2R1Y3Rpb246IHN5bQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDo2MzMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfNDkKKyNBVF9TVEFSVF81MAorYXRfZm5fZ3JvdXBfYmFubmVyIDUwICduYW1lZC1yZWZzLmF0OjY3MScgXAorICAiXCQgb3IgQCBmb2xsb3dlZCBieSAuIG9yIC0iICIgICAgICAgICAgICAgICAgICAgICAgIiAyCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiNTAuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworY2F0ID50ZXN0LnkgPDwnX0FURU9GJworCislJQorc3RhcnQ6CisgIC5maWVsZCB7ICQuZmllbGQ7IH0KK3wgJ2EnICAgIHsgQC5maWVsZDsgfQorOworLmZpZWxkOiA7CitfQVRFT0YKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDo2ODE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gdGVzdC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gdGVzdC55IiAibmFtZWQtcmVmcy5hdDo2ODEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiB0ZXN0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJ0ZXN0Lnk6NC4xMi0xODogZXJyb3I6IGludmFsaWQgcmVmZXJlbmNlOiAnXCQuZmllbGQnCit0ZXN0Lnk6NC4xMzogICAgICAgIHN5bnRheCBlcnJvciBhZnRlciAnXCQnLCBleHBlY3RpbmcgaW50ZWdlciwgbGV0dGVyLCAnXycsICdbJywgb3IgJ1wkJwordGVzdC55OjQuMy04OiAgICAgICBwb3NzaWJseSBtZWFudDogXCRbLmZpZWxkXSBhdCBcJDEKK3Rlc3QueTo1LjEyLTE4OiBlcnJvcjogaW52YWxpZCByZWZlcmVuY2U6ICdALmZpZWxkJwordGVzdC55OjUuMTM6ICAgICAgICBzeW50YXggZXJyb3IgYWZ0ZXIgJ0AnLCBleHBlY3RpbmcgaW50ZWdlciwgbGV0dGVyLCAnXycsICdbJywgb3IgJ1wkJworIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDo2ODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+dGVzdC55IDw8J19BVEVPRicKKworJSUKK3N0YXJ0OgorICAnYScgeyAkLWZpZWxkOyB9Cit8ICdiJyB7IEAtZmllbGQ7IH0KKzsKK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6Njk2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgdGVzdC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAibmFtZWQtcmVmcy5hdDo2OTYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgdGVzdC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9uYW1lZC1yZWZzLmF0OjY5NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6Njk2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCB0ZXN0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgdGVzdC55IiAibmFtZWQtcmVmcy5hdDo2OTYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgdGVzdC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9uYW1lZC1yZWZzLmF0OjY5NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9uYW1lZC1yZWZzLmF0OjY5NjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm5hbWVkLXJlZnMuYXQ6Njk2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6Njk2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDo2OTY6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJuYW1lZC1yZWZzLmF0OjY5NiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9uYW1lZC1yZWZzLmF0OjY5NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6Njk2OiBiaXNvbiB0ZXN0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJuYW1lZC1yZWZzLmF0OjY5NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiB0ZXN0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJ0ZXN0Lnk6NC45OiB3YXJuaW5nOiBzdHJheSAnXCQnCit0ZXN0Lnk6NS45OiB3YXJuaW5nOiBzdHJheSAnQCcKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6Njk2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworIyBEZWZpbmluZyBQT1NJWExZX0NPUlJFQ1QgY2F1c2VzIGJpc29uIHRvIGNvbXBsYWluIGlmIG9wdGlvbnMgYXJlCisjIGFkZGVkIGFmdGVyIHRoZSBncmFtbWFyIGZpbGUgbmFtZSwgc28gc2tpcCB0aGVzZSBjaGVja3MgaW4gdGhhdAorIyBjYXNlLgoraWYgdGVzdCAiJFBPU0lYTFlfQ09SUkVDVF9JU19FWFBPUlRFRCIgPSBmYWxzZTsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKworICAjIFRvIGF2b2lkIGV4cGFuZGluZyBpdCByZXBlYXRlZGx5LCBzdG9yZSBzcGVjaWZpZWQgc3Rkb3V0LgorICA6ID5leHBvdXQKKworICAjIFJ1biB3aXRoIC1XZXJyb3IuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9uYW1lZC1yZWZzLmF0OjY5NjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiB0ZXN0LnkgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIHRlc3QueSAtV2Vycm9yIiAibmFtZWQtcmVmcy5hdDo2OTYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiB0ZXN0LnkgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDo2OTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBCdWlsZCBleHBlY3RlZCBzdGRlcnIgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgIndhcm5pbmdzIGJlaW5nCisgICMgdHJlYXRlZCBhcyBlcnJvcnMiIG1lc3NhZ2UuCisgIGNhdCA+YXQtYmlzb24tY2hlY2std2FybmluZ3MgPDwnX0FURU9GJwordGVzdC55OjQuOTogd2FybmluZzogc3RyYXkgJyQnCit0ZXN0Lnk6NS45OiB3YXJuaW5nOiBzdHJheSAnQCcKK19BVEVPRgorCisgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PWBzZWQgLW4gXAorICAgICcvOiB3YXJuaW5nOiAvez07cTt9JyBhdC1iaXNvbi1jaGVjay13YXJuaW5nc2AKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2ZpcnN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19maXJzdF90bXA9YHNlZCAtbiBcCisgICAgJy9jb25mbGljdHM6IFswLTldLipyZWR1Y2UkL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdF90bXA6PTF9CisgIGlmIHRlc3QgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcCAtbHQgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0OyB0aGVuCisgICAgYXRfYmlzb25fY2hlY2tfZmlyc3Q9JGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcAorICBmaQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdCAtZ3QgMTsgdGhlbgorICAgIHNlZCAtbiAiMSxgZXhwciAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLSAxYCJwIFwKKyAgICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4gZXhwZXJyCisgIGZpCisgIGVjaG8gJ2Jpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycycgPj4gZXhwZXJyCisKKyAgIyBGaW5pc2ggYnVpbGRpbmcgZXhwZWN0ZWQgc3RkZXJyIGFuZCBjaGVjay4gIFVubGlrZSB3YXJuaW5ncywKKyAgIyBjb21wbGFpbnRzIGNhdXNlIGJpc29uIHRvIGV4aXQgZWFybHkuICBUaHVzLCB3aXRoIC1XZXJyb3IsIGJpc29uCisgICMgZG9lcyBub3QgbmVjZXNzYXJpbHkgcmVwb3J0IGFsbCB3YXJuaW5ncyB0aGF0IGl0IGRvZXMgd2l0aG91dAorICAjIC1XZXJyb3IsIGJ1dCBpdCBhdCBsZWFzdCByZXBvcnRzIG9uZS4KKyAgYXRfYmlzb25fY2hlY2tfbGFzdD1gc2VkIC1uICckPScgc3RkZXJyYAorICA6ICR7YXRfYmlzb25fY2hlY2tfbGFzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfbGFzdD1gZXhwciAkYXRfYmlzb25fY2hlY2tfbGFzdCAtIDFgCisgIHNlZCAtbiAiJGF0X2Jpc29uX2NoZWNrX2ZpcnN0LCRhdF9iaXNvbl9jaGVja19sYXN0InAgXAorICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4+IGV4cGVycgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDo2OTY6IHNlZCAncywuKi9cXChiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnNcXClcJCxcXDEsJyBcXAorICAgICAgICAgICAgICBzdGRlcnIgMT4mMiIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgIm5hbWVkLXJlZnMuYXQ6Njk2IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAncywuKi9cKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1wpJCxcMSwnIFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDo2OTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBOb3cgY2hlY2sgLS13YXJuaW5ncz1lcnJvci4KKyAgY3Agc3RkZXJyIGV4cGVycgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDo2OTY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gdGVzdC55IC0td2FybmluZ3M9ZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiB0ZXN0LnkgLS13YXJuaW5ncz1lcnJvciIgIm5hbWVkLXJlZnMuYXQ6Njk2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gdGVzdC55IC0td2FybmluZ3M9ZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDo2OTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBOb3cgY2hlY2sgLVdub25lIGFuZCAtLXdhcm5pbmdzPW5vbmUgYnkgbWFraW5nIHN1cmUgdGhhdAorICAjIC1XZXJyb3IgZG9lc24ndCBjaGFuZ2UgdGhlIGV4aXQgc3RhdHVzIHdoZW4gLVdub25lIG9yCisgICMgLS13YXJuaW5ncz1ub25lIGlzIHNwZWNpZmllZC4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6Njk2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIHRlc3QueSAtV25vbmUgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIHRlc3QueSAtV25vbmUgLVdlcnJvciIgIm5hbWVkLXJlZnMuYXQ6Njk2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gdGVzdC55IC1Xbm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL25hbWVkLXJlZnMuYXQ6Njk2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDo2OTY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gdGVzdC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gdGVzdC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIiAibmFtZWQtcmVmcy5hdDo2OTYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiB0ZXN0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvbmFtZWQtcmVmcy5hdDo2OTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF81MAorI0FUX1NUQVJUXzUxCithdF9mbl9ncm91cF9iYW5uZXIgNTEgJ291dHB1dC5hdDo0NCcgXAorICAiT3V0cHV0IGZpbGVzOiAgLWR2ICIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDMKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI1MS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2ZvciBmaWxlIGluIGZvby55IGZvby5vdXRwdXQgZm9vLnRhYi5jIGZvby50YWIuaDsgZG8KKyAgY2FzZSAiJGZpbGUiIGluCisgICAgKi8qKSBta2RpciAtcCBgZWNobyAiJGZpbGUiIHwgc2VkICdzLC8uKiwsJ2A7OworICBlc2FjCitkb25lCiBjYXQgPmZvby55IDw8J19BVEVPRicKIAogJSUKQEAgLTE4NzQsNzUgKzEyMjkwLDEzNyBAQAogX0FURU9GCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJvdXRwdXQuYXQ6NDM6IGJpc29uIC1kdiBmb28ueSAiCi1lY2hvIG91dHB1dC5hdDo0MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLWR2IGZvby55ICApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJvdXRwdXQuYXQ6NDM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjQ0OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLWR2IGZvby55ICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgIm91dHB1dC5hdDo0NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtZHYgZm9vLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo0NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjQ0OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZHYgZm9vLnkgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kdiBmb28ueSAiICJvdXRwdXQuYXQ6NDQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWR2IGZvby55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjQ0OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjQ0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo0NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo0NDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDo0NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKLQotJGF0X3RyYWNlb24KLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJvdXRwdXQuYXQ6NDM6IGxzIGZvby5vdXRwdXQgZm9vLnRhYi5jIGZvby50YWIuaCIKLWVjaG8gb3V0cHV0LmF0OjQzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBscyBmb28ub3V0cHV0IGZvby50YWIuYyBmb28udGFiLmggKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAib3V0cHV0LmF0OjQzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NDQ6IGJpc29uIC1kdiBmb28ueSAiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6NDQiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLWR2IGZvby55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo0NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Cit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjQ0OiBscyBmb28ub3V0cHV0IGZvby50YWIuYyBmb28udGFiLmgiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6NDQiCisoICRhdF9jaGVja190cmFjZTsgbHMgZm9vLm91dHB1dCBmb28udGFiLmMgZm9vLnRhYi5oCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjQ0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICAxMiApICMgMTIuIG91dHB1dC5hdDo0NjogT3V0cHV0IGZpbGVzOiAgLWR2ID4mLQotICAgIGF0X3NldHVwX2xpbmU9J291dHB1dC5hdDo0NicKLSAgICBhdF9kZXNjPSdPdXRwdXQgZmlsZXM6ICAtZHYgPiYtJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgMTI6IE91dHB1dCBmaWxlczogIC1kdiA+Ji0gICAgICAgICAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIxMi4gb3V0cHV0LmF0OjQ2OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCiAKLWNhc2UgImZvby55IiBpbgotICAqLyopIG1rZGlyIGBlY2hvICJmb28ueSIgfCBzZWQgJ3MsLy4qLCwnYDs7Ci1lc2FjCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzUxCisjQVRfU1RBUlRfNTIKK2F0X2ZuX2dyb3VwX2Jhbm5lciA1MiAnb3V0cHV0LmF0OjUwJyBcCisgICJPdXRwdXQgZmlsZXM6ICAtZHYgPiYtIiAiICAgICAgICAgICAgICAgICAgICAgICAgICIgMworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjUyLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NTA6IGNhc2UgXCJcJFBSRUJJU09OXCIgaW4gKnZhbGdyaW5kKikgZXhpdCA3Nzs7IGVzYWMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImNhc2UgXCIkUFJFQklTT05cIiBpbiAqdmFsZ3JpbmQqKSBleGl0IDc3OzsgZXNhYyIgIm91dHB1dC5hdDo1MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXNlICIkUFJFQklTT04iIGluICp2YWxncmluZCopIGV4aXQgNzc7OyBlc2FjCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo1MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK2ZvciBmaWxlIGluIGZvby55IGZvby5vdXRwdXQgZm9vLnRhYi5jIGZvby50YWIuaDsgZG8KKyAgY2FzZSAiJGZpbGUiIGluCisgICAgKi8qKSBta2RpciAtcCBgZWNobyAiJGZpbGUiIHwgc2VkICdzLC8uKiwsJ2A7OworICBlc2FjCitkb25lCiBjYXQgPmZvby55IDw8J19BVEVPRicKIAogJSUKQEAgLTE5NTAsNzUgKzEyNDI4LDEyNSBAQAogX0FURU9GCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJvdXRwdXQuYXQ6NDY6IGJpc29uIC1kdiBmb28ueSA+Ji0iCi1lY2hvIG91dHB1dC5hdDo0NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLWR2IGZvby55ID4mLSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJvdXRwdXQuYXQ6NDY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjUwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLWR2IGZvby55ID4mLSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgIm91dHB1dC5hdDo1MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtZHYgZm9vLnkgPiYtCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo1MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWR2IGZvby55ID4mLSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZHYgZm9vLnkgPiYtIiAib3V0cHV0LmF0OjUwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kdiBmb28ueSA+Ji0KKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo1MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NTA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6NTAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjUwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjUwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjUwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo1MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gIm91dHB1dC5hdDo0NjogbHMgZm9vLm91dHB1dCBmb28udGFiLmMgZm9vLnRhYi5oIgotZWNobyBvdXRwdXQuYXQ6NDYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGxzIGZvby5vdXRwdXQgZm9vLnRhYi5jIGZvby50YWIuaCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJvdXRwdXQuYXQ6NDY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo1MDogYmlzb24gLWR2IGZvby55ID4mLSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDo1MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtZHYgZm9vLnkgPiYtCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo1MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Cit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjUwOiBscyBmb28ub3V0cHV0IGZvby50YWIuYyBmb28udGFiLmgiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6NTAiCisoICRhdF9jaGVja190cmFjZTsgbHMgZm9vLm91dHB1dCBmb28udGFiLmMgZm9vLnRhYi5oCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjUwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICAxMyApICMgMTMuIG91dHB1dC5hdDo0ODogT3V0cHV0IGZpbGVzOiAgLWR2IC1vIGZvby5jCi0gICAgYXRfc2V0dXBfbGluZT0nb3V0cHV0LmF0OjQ4JwotICAgIGF0X2Rlc2M9J091dHB1dCBmaWxlczogIC1kdiAtbyBmb28uYyAnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiAxMzogT3V0cHV0IGZpbGVzOiAgLWR2IC1vIGZvby5jICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjEzLiBvdXRwdXQuYXQ6NDg6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KIAotY2FzZSAiZm9vLnkiIGluCi0gICovKikgbWtkaXIgYGVjaG8gImZvby55IiB8IHNlZCAncywvLiosLCdgOzsKLWVzYWMKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfNTIKKyNBVF9TVEFSVF81MworYXRfZm5fZ3JvdXBfYmFubmVyIDUzICdvdXRwdXQuYXQ6NTUnIFwKKyAgIk91dHB1dCBmaWxlczogIC1kdiAtbyBmb28uYyAiICIgICAgICAgICAgICAgICAgICAgIiAzCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiNTMuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCitmb3IgZmlsZSBpbiBmb28ueSBmb28uYyBmb28uaCBmb28ub3V0cHV0OyBkbworICBjYXNlICIkZmlsZSIgaW4KKyAgICAqLyopIG1rZGlyIC1wIGBlY2hvICIkZmlsZSIgfCBzZWQgJ3MsLy4qLCwnYDs7CisgIGVzYWMKK2RvbmUKIGNhdCA+Zm9vLnkgPDwnX0FURU9GJwogCiAlJQpAQCAtMjAyNiw3NSArMTI1NTQsMTI1IEBACiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gIm91dHB1dC5hdDo0ODogYmlzb24gLWR2IC1vIGZvby5jIGZvby55ICIKLWVjaG8gb3V0cHV0LmF0OjQ4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtZHYgLW8gZm9vLmMgZm9vLnkgICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gIm91dHB1dC5hdDo0ODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NTU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtZHYgLW8gZm9vLmMgZm9vLnkgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAib3V0cHV0LmF0OjU1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1kdiAtbyBmb28uYyBmb28ueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjU1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NTU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kdiAtbyBmb28uYyBmb28ueSAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWR2IC1vIGZvby5jIGZvby55ICIgIm91dHB1dC5hdDo1NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZHYgLW8gZm9vLmMgZm9vLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo1NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NTU6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6NTUiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjU1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjU1OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjU1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo1NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gIm91dHB1dC5hdDo0ODogbHMgZm9vLmMgZm9vLmggZm9vLm91dHB1dCIKLWVjaG8gb3V0cHV0LmF0OjQ4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBscyBmb28uYyBmb28uaCBmb28ub3V0cHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gIm91dHB1dC5hdDo0ODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjU1OiBiaXNvbiAtZHYgLW8gZm9vLmMgZm9vLnkgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjU1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1kdiAtbyBmb28uYyBmb28ueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo1NTogbHMgZm9vLmMgZm9vLmggZm9vLm91dHB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDo1NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBscyBmb28uYyBmb28uaCBmb28ub3V0cHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjU1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICAxNCApICMgMTQuIG91dHB1dC5hdDo1MDogT3V0cHV0IGZpbGVzOiAgLWR2IC1vIGZvby50YWIuYwotICAgIGF0X3NldHVwX2xpbmU9J291dHB1dC5hdDo1MCcKLSAgICBhdF9kZXNjPSdPdXRwdXQgZmlsZXM6ICAtZHYgLW8gZm9vLnRhYi5jICcKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDE0OiBPdXRwdXQgZmlsZXM6ICAtZHYgLW8gZm9vLnRhYi5jICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiMTQuIG91dHB1dC5hdDo1MDogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgogCi1jYXNlICJmb28ueSIgaW4KLSAgKi8qKSBta2RpciBgZWNobyAiZm9vLnkiIHwgc2VkICdzLC8uKiwsJ2A7OwotZXNhYworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF81MworI0FUX1NUQVJUXzU0CithdF9mbl9ncm91cF9iYW5uZXIgNTQgJ291dHB1dC5hdDo1NycgXAorICAiT3V0cHV0IGZpbGVzOiAgLWR2IC1vIGZvby50YWIuYyAiICIgICAgICAgICAgICAgICAiIDMKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI1NC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2ZvciBmaWxlIGluIGZvby55IGZvby5vdXRwdXQgZm9vLnRhYi5jIGZvby50YWIuaDsgZG8KKyAgY2FzZSAiJGZpbGUiIGluCisgICAgKi8qKSBta2RpciAtcCBgZWNobyAiJGZpbGUiIHwgc2VkICdzLC8uKiwsJ2A7OworICBlc2FjCitkb25lCiBjYXQgPmZvby55IDw8J19BVEVPRicKIAogJSUKQEAgLTIxMDIsNzUgKzEyNjgwLDEyNSBAQAogX0FURU9GCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJvdXRwdXQuYXQ6NTA6IGJpc29uIC1kdiAtbyBmb28udGFiLmMgZm9vLnkgIgotZWNobyBvdXRwdXQuYXQ6NTAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1kdiAtbyBmb28udGFiLmMgZm9vLnkgICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gIm91dHB1dC5hdDo1MDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NTc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtZHYgLW8gZm9vLnRhYi5jIGZvby55ICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgIm91dHB1dC5hdDo1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtZHYgLW8gZm9vLnRhYi5jIGZvby55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo1NzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWR2IC1vIGZvby50YWIuYyBmb28ueSAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWR2IC1vIGZvby50YWIuYyBmb28ueSAiICJvdXRwdXQuYXQ6NTciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWR2IC1vIGZvby50YWIuYyBmb28ueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo1NzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDo1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NTc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6NTciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCi0KLSRhdF90cmFjZW9uCi0KLSRhdF90cmFjZW9mZgotZWNobyAib3V0cHV0LmF0OjUwOiBscyBmb28ub3V0cHV0IGZvby50YWIuYyBmb28udGFiLmgiCi1lY2hvIG91dHB1dC5hdDo1MCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgbHMgZm9vLm91dHB1dCBmb28udGFiLmMgZm9vLnRhYi5oICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gIm91dHB1dC5hdDo1MDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjU3OiBiaXNvbiAtZHYgLW8gZm9vLnRhYi5jIGZvby55ICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDo1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtZHYgLW8gZm9vLnRhYi5jIGZvby55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Cit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjU3OiBscyBmb28ub3V0cHV0IGZvby50YWIuYyBmb28udGFiLmgiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6NTciCisoICRhdF9jaGVja190cmFjZTsgbHMgZm9vLm91dHB1dCBmb28udGFiLmMgZm9vLnRhYi5oCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICAxNSApICMgMTUuIG91dHB1dC5hdDo1MjogT3V0cHV0IGZpbGVzOiAgLWR2IC15Ci0gICAgYXRfc2V0dXBfbGluZT0nb3V0cHV0LmF0OjUyJwotICAgIGF0X2Rlc2M9J091dHB1dCBmaWxlczogIC1kdiAteSAnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiAxNTogT3V0cHV0IGZpbGVzOiAgLWR2IC15ICAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjE1LiBvdXRwdXQuYXQ6NTI6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KIAotY2FzZSAiZm9vLnkiIGluCi0gICovKikgbWtkaXIgYGVjaG8gImZvby55IiB8IHNlZCAncywvLiosLCdgOzsKLWVzYWMKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfNTQKKyNBVF9TVEFSVF81NQorYXRfZm5fZ3JvdXBfYmFubmVyIDU1ICdvdXRwdXQuYXQ6NTknIFwKKyAgIk91dHB1dCBmaWxlczogIC1kdiAteSAiICIgICAgICAgICAgICAgICAgICAgICAgICAgIiAzCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiNTUuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCitmb3IgZmlsZSBpbiBmb28ueSB5Lm91dHB1dCB5LnRhYi5jIHkudGFiLmg7IGRvCisgIGNhc2UgIiRmaWxlIiBpbgorICAgICovKikgbWtkaXIgLXAgYGVjaG8gIiRmaWxlIiB8IHNlZCAncywvLiosLCdgOzsKKyAgZXNhYworZG9uZQogY2F0ID5mb28ueSA8PCdfQVRFT0YnCiAKICUlCkBAIC0yMTc4LDc1ICsxMjgwNiwxMjUgQEAKIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAib3V0cHV0LmF0OjUyOiBiaXNvbiAtZHYgLXkgZm9vLnkgIgotZWNobyBvdXRwdXQuYXQ6NTIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1kdiAteSBmb28ueSAgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAib3V0cHV0LmF0OjUyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo1OTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1kdiAteSBmb28ueSAiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJvdXRwdXQuYXQ6NTkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLWR2IC15IGZvby55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo1OTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWR2IC15IGZvby55ICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZHYgLXkgZm9vLnkgIiAib3V0cHV0LmF0OjU5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kdiAteSBmb28ueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjU5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo1OTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDo1OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NTk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6NTkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjU5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCi0KLSRhdF90cmFjZW9uCi0KLSRhdF90cmFjZW9mZgotZWNobyAib3V0cHV0LmF0OjUyOiBscyB5Lm91dHB1dCB5LnRhYi5jIHkudGFiLmgiCi1lY2hvIG91dHB1dC5hdDo1MiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgbHMgeS5vdXRwdXQgeS50YWIuYyB5LnRhYi5oICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gIm91dHB1dC5hdDo1MjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjU5OiBiaXNvbiAtZHYgLXkgZm9vLnkgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjU5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1kdiAteSBmb28ueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo1OTogbHMgeS5vdXRwdXQgeS50YWIuYyB5LnRhYi5oIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjU5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGxzIHkub3V0cHV0IHkudGFiLmMgeS50YWIuaAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo1OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgMTYgKSAjIDE2LiBvdXRwdXQuYXQ6NTQ6IE91dHB1dCBmaWxlczogIC1kdiAtYiBiYXIKLSAgICBhdF9zZXR1cF9saW5lPSdvdXRwdXQuYXQ6NTQnCi0gICAgYXRfZGVzYz0nT3V0cHV0IGZpbGVzOiAgLWR2IC1iIGJhciAnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiAxNjogT3V0cHV0IGZpbGVzOiAgLWR2IC1iIGJhciAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjE2LiBvdXRwdXQuYXQ6NTQ6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KIAotY2FzZSAiZm9vLnkiIGluCi0gICovKikgbWtkaXIgYGVjaG8gImZvby55IiB8IHNlZCAncywvLiosLCdgOzsKLWVzYWMKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfNTUKKyNBVF9TVEFSVF81NgorYXRfZm5fZ3JvdXBfYmFubmVyIDU2ICdvdXRwdXQuYXQ6NjEnIFwKKyAgIk91dHB1dCBmaWxlczogIC1kdiAtYiBiYXIgIiAiICAgICAgICAgICAgICAgICAgICAgIiAzCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiNTYuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCitmb3IgZmlsZSBpbiBmb28ueSBiYXIub3V0cHV0IGJhci50YWIuYyBiYXIudGFiLmg7IGRvCisgIGNhc2UgIiRmaWxlIiBpbgorICAgICovKikgbWtkaXIgLXAgYGVjaG8gIiRmaWxlIiB8IHNlZCAncywvLiosLCdgOzsKKyAgZXNhYworZG9uZQogY2F0ID5mb28ueSA8PCdfQVRFT0YnCiAKICUlCkBAIC0yMjU0LDc1ICsxMjkzMiwxMjUgQEAKIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAib3V0cHV0LmF0OjU0OiBiaXNvbiAtZHYgLWIgYmFyIGZvby55ICIKLWVjaG8gb3V0cHV0LmF0OjU0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtZHYgLWIgYmFyIGZvby55ICApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJvdXRwdXQuYXQ6NTQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjYxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLWR2IC1iIGJhciBmb28ueSAiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJvdXRwdXQuYXQ6NjEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLWR2IC1iIGJhciBmb28ueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjYxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NjE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kdiAtYiBiYXIgZm9vLnkgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kdiAtYiBiYXIgZm9vLnkgIiAib3V0cHV0LmF0OjYxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kdiAtYiBiYXIgZm9vLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo2MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NjE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6NjEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjYxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjYxOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjYxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo2MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gIm91dHB1dC5hdDo1NDogbHMgYmFyLm91dHB1dCBiYXIudGFiLmMgYmFyLnRhYi5oIgotZWNobyBvdXRwdXQuYXQ6NTQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGxzIGJhci5vdXRwdXQgYmFyLnRhYi5jIGJhci50YWIuaCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJvdXRwdXQuYXQ6NTQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo2MTogYmlzb24gLWR2IC1iIGJhciBmb28ueSAiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6NjEiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLWR2IC1iIGJhciBmb28ueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo2MTogbHMgYmFyLm91dHB1dCBiYXIudGFiLmMgYmFyLnRhYi5oIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjYxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGxzIGJhci5vdXRwdXQgYmFyLnRhYi5jIGJhci50YWIuaAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo2MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgMTcgKSAjIDE3LiBvdXRwdXQuYXQ6NTY6IE91dHB1dCBmaWxlczogIC1kdiAtZyAtbyBmb28uYwotICAgIGF0X3NldHVwX2xpbmU9J291dHB1dC5hdDo1NicKLSAgICBhdF9kZXNjPSdPdXRwdXQgZmlsZXM6ICAtZHYgLWcgLW8gZm9vLmMgJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgMTc6IE91dHB1dCBmaWxlczogIC1kdiAtZyAtbyBmb28uYyAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIxNy4gb3V0cHV0LmF0OjU2OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCiAKLWNhc2UgImZvby55IiBpbgotICAqLyopIG1rZGlyIGBlY2hvICJmb28ueSIgfCBzZWQgJ3MsLy4qLCwnYDs7Ci1lc2FjCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzU2CisjQVRfU1RBUlRfNTcKK2F0X2ZuX2dyb3VwX2Jhbm5lciA1NyAnb3V0cHV0LmF0OjYzJyBcCisgICJPdXRwdXQgZmlsZXM6ICAtZHYgLWcgLW8gZm9vLmMgIiAiICAgICAgICAgICAgICAgICIgMworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjU3LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworZm9yIGZpbGUgaW4gZm9vLnkgZm9vLmMgZm9vLmRvdCBmb28uaCBmb28ub3V0cHV0OyBkbworICBjYXNlICIkZmlsZSIgaW4KKyAgICAqLyopIG1rZGlyIC1wIGBlY2hvICIkZmlsZSIgfCBzZWQgJ3MsLy4qLCwnYDs7CisgIGVzYWMKK2RvbmUKIGNhdCA+Zm9vLnkgPDwnX0FURU9GJwogCiAlJQpAQCAtMjMzMCw3NSArMTMwNTgsMTI1IEBACiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gIm91dHB1dC5hdDo1NjogYmlzb24gLWR2IC1nIC1vIGZvby5jIGZvby55ICIKLWVjaG8gb3V0cHV0LmF0OjU2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtZHYgLWcgLW8gZm9vLmMgZm9vLnkgICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gIm91dHB1dC5hdDo1NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NjM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtZHYgLWcgLW8gZm9vLmMgZm9vLnkgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAib3V0cHV0LmF0OjYzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1kdiAtZyAtbyBmb28uYyBmb28ueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjYzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NjM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kdiAtZyAtbyBmb28uYyBmb28ueSAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWR2IC1nIC1vIGZvby5jIGZvby55ICIgIm91dHB1dC5hdDo2MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZHYgLWcgLW8gZm9vLmMgZm9vLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo2MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NjM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6NjMiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjYzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjYzOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjYzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo2MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gIm91dHB1dC5hdDo1NjogbHMgZm9vLmMgZm9vLmggZm9vLm91dHB1dCBmb28udmNnIgotZWNobyBvdXRwdXQuYXQ6NTYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGxzIGZvby5jIGZvby5oIGZvby5vdXRwdXQgZm9vLnZjZyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJvdXRwdXQuYXQ6NTY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo2MzogYmlzb24gLWR2IC1nIC1vIGZvby5jIGZvby55ICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDo2MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtZHYgLWcgLW8gZm9vLmMgZm9vLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjYzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NjM6IGxzIGZvby5jIGZvby5kb3QgZm9vLmggZm9vLm91dHB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDo2MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBscyBmb28uYyBmb28uZG90IGZvby5oIGZvby5vdXRwdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIDE4ICkgIyAxOC4gb3V0cHV0LmF0OjYwOiBPdXRwdXQgZmlsZXM6ICVkZWZpbmVzICV2ZXJib3NlCi0gICAgYXRfc2V0dXBfbGluZT0nb3V0cHV0LmF0OjYwJwotICAgIGF0X2Rlc2M9J091dHB1dCBmaWxlczogJWRlZmluZXMgJXZlcmJvc2UgICcKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDE4OiBPdXRwdXQgZmlsZXM6ICVkZWZpbmVzICV2ZXJib3NlICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiMTguIG91dHB1dC5hdDo2MDogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgogCi1jYXNlICJmb28ueSIgaW4KLSAgKi8qKSBta2RpciBgZWNobyAiZm9vLnkiIHwgc2VkICdzLC8uKiwsJ2A7OwotZXNhYworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF81NworI0FUX1NUQVJUXzU4CithdF9mbl9ncm91cF9iYW5uZXIgNTggJ291dHB1dC5hdDo2NycgXAorICAiT3V0cHV0IGZpbGVzOiAlZGVmaW5lcyAldmVyYm9zZSAgIiAiICAgICAgICAgICAgICAiIDMKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI1OC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2ZvciBmaWxlIGluIGZvby55IGZvby5vdXRwdXQgZm9vLnRhYi5jIGZvby50YWIuaDsgZG8KKyAgY2FzZSAiJGZpbGUiIGluCisgICAgKi8qKSBta2RpciAtcCBgZWNobyAiJGZpbGUiIHwgc2VkICdzLC8uKiwsJ2A7OworICBlc2FjCitkb25lCiBjYXQgPmZvby55IDw8J19BVEVPRicKICVkZWZpbmVzICV2ZXJib3NlCiAlJQpAQCAtMjQwNiw3NSArMTMxODQsMTI1IEBACiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gIm91dHB1dC5hdDo2MDogYmlzb24gIGZvby55ICIKLWVjaG8gb3V0cHV0LmF0OjYwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAgZm9vLnkgICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gIm91dHB1dC5hdDo2MDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6Njc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAgZm9vLnkgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAib3V0cHV0LmF0OjY3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90ICBmb28ueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjY3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6Njc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sICBmb28ueSAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgIGZvby55ICIgIm91dHB1dC5hdDo2NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAgZm9vLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo2NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6Njc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6NjciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjY3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjY3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjY3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo2NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gIm91dHB1dC5hdDo2MDogbHMgZm9vLm91dHB1dCBmb28udGFiLmMgZm9vLnRhYi5oIgotZWNobyBvdXRwdXQuYXQ6NjAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGxzIGZvby5vdXRwdXQgZm9vLnRhYi5jIGZvby50YWIuaCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJvdXRwdXQuYXQ6NjA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo2NzogYmlzb24gIGZvby55ICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDo2NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAgZm9vLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjY3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6Njc6IGxzIGZvby5vdXRwdXQgZm9vLnRhYi5jIGZvby50YWIuaCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDo2NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBscyBmb28ub3V0cHV0IGZvby50YWIuYyBmb28udGFiLmgKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NjciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIDE5ICkgIyAxOS4gb3V0cHV0LmF0OjYyOiBPdXRwdXQgZmlsZXM6ICVkZWZpbmVzICV2ZXJib3NlICV5YWNjCi0gICAgYXRfc2V0dXBfbGluZT0nb3V0cHV0LmF0OjYyJwotICAgIGF0X2Rlc2M9J091dHB1dCBmaWxlczogJWRlZmluZXMgJXZlcmJvc2UgJXlhY2MgICcKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDE5OiBPdXRwdXQgZmlsZXM6ICVkZWZpbmVzICV2ZXJib3NlICV5YWNjICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiMTkuIG91dHB1dC5hdDo2MjogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgogCi1jYXNlICJmb28ueSIgaW4KLSAgKi8qKSBta2RpciBgZWNobyAiZm9vLnkiIHwgc2VkICdzLC8uKiwsJ2A7OwotZXNhYworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF81OAorI0FUX1NUQVJUXzU5CithdF9mbl9ncm91cF9iYW5uZXIgNTkgJ291dHB1dC5hdDo2OScgXAorICAiT3V0cHV0IGZpbGVzOiAlZGVmaW5lcyAldmVyYm9zZSAleWFjYyAgIiAiICAgICAgICAiIDMKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI1OS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2ZvciBmaWxlIGluIGZvby55IHkub3V0cHV0IHkudGFiLmMgeS50YWIuaDsgZG8KKyAgY2FzZSAiJGZpbGUiIGluCisgICAgKi8qKSBta2RpciAtcCBgZWNobyAiJGZpbGUiIHwgc2VkICdzLC8uKiwsJ2A7OworICBlc2FjCitkb25lCiBjYXQgPmZvby55IDw8J19BVEVPRicKICVkZWZpbmVzICV2ZXJib3NlICV5YWNjCiAlJQpAQCAtMjQ4Miw3NSArMTMzMTAsMTI1IEBACiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gIm91dHB1dC5hdDo2MjogYmlzb24gIGZvby55ICIKLWVjaG8gb3V0cHV0LmF0OjYyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAgZm9vLnkgICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gIm91dHB1dC5hdDo2MjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6Njk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAgZm9vLnkgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAib3V0cHV0LmF0OjY5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90ICBmb28ueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6Njk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sICBmb28ueSAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgIGZvby55ICIgIm91dHB1dC5hdDo2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAgZm9vLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6Njk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6NjkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjY5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjY5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gIm91dHB1dC5hdDo2MjogbHMgeS5vdXRwdXQgeS50YWIuYyB5LnRhYi5oIgotZWNobyBvdXRwdXQuYXQ6NjIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGxzIHkub3V0cHV0IHkudGFiLmMgeS50YWIuaCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJvdXRwdXQuYXQ6NjI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo2OTogYmlzb24gIGZvby55ICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDo2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAgZm9vLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6Njk6IGxzIHkub3V0cHV0IHkudGFiLmMgeS50YWIuaCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDo2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBscyB5Lm91dHB1dCB5LnRhYi5jIHkudGFiLmgKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIDIwICkgIyAyMC4gb3V0cHV0LmF0OjY1OiBPdXRwdXQgZmlsZXM6ICVkZWZpbmVzICV2ZXJib3NlICV5YWNjCi0gICAgYXRfc2V0dXBfbGluZT0nb3V0cHV0LmF0OjY1JwotICAgIGF0X2Rlc2M9J091dHB1dCBmaWxlczogJWRlZmluZXMgJXZlcmJvc2UgJXlhY2MgICcKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDIwOiBPdXRwdXQgZmlsZXM6ICVkZWZpbmVzICV2ZXJib3NlICV5YWNjICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiMjAuIG91dHB1dC5hdDo2NTogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgogCi1jYXNlICJmb28ueXkiIGluCi0gICovKikgbWtkaXIgYGVjaG8gImZvby55eSIgfCBzZWQgJ3MsLy4qLCwnYDs7Ci1lc2FjCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzU5CisjQVRfU1RBUlRfNjAKK2F0X2ZuX2dyb3VwX2Jhbm5lciA2MCAnb3V0cHV0LmF0OjcyJyBcCisgICJPdXRwdXQgZmlsZXM6ICVkZWZpbmVzICV2ZXJib3NlICV5YWNjICAiICIgICAgICAgICIgMworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjYwLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworZm9yIGZpbGUgaW4gZm9vLnl5IHkub3V0cHV0IHkudGFiLmMgeS50YWIuaDsgZG8KKyAgY2FzZSAiJGZpbGUiIGluCisgICAgKi8qKSBta2RpciAtcCBgZWNobyAiJGZpbGUiIHwgc2VkICdzLC8uKiwsJ2A7OworICBlc2FjCitkb25lCiBjYXQgPmZvby55eSA8PCdfQVRFT0YnCiAlZGVmaW5lcyAldmVyYm9zZSAleWFjYwogJSUKQEAgLTI1NTgsMTUxICsxMzQzNiwyNTEgQEAKIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAib3V0cHV0LmF0OjY1OiBiaXNvbiAgZm9vLnl5ICIKLWVjaG8gb3V0cHV0LmF0OjY1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAgZm9vLnl5ICApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJvdXRwdXQuYXQ6NjU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjcyOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgIGZvby55eSAiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJvdXRwdXQuYXQ6NzIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgIGZvby55eQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjcyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NzI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sICBmb28ueXkgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sICBmb28ueXkgIiAib3V0cHV0LmF0OjcyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sICBmb28ueXkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo3MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NzI6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6NzIiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjcyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjcyOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjcyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo3MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gIm91dHB1dC5hdDo2NTogbHMgeS5vdXRwdXQgeS50YWIuYyB5LnRhYi5oIgotZWNobyBvdXRwdXQuYXQ6NjUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGxzIHkub3V0cHV0IHkudGFiLmMgeS50YWIuaCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJvdXRwdXQuYXQ6NjU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo3MjogYmlzb24gIGZvby55eSAiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6NzIiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gIGZvby55eQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo3MjogbHMgeS5vdXRwdXQgeS50YWIuYyB5LnRhYi5oIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjcyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGxzIHkub3V0cHV0IHkudGFiLmMgeS50YWIuaAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo3MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgMjEgKSAjIDIxLiBvdXRwdXQuYXQ6Njk6IE91dHB1dCBmaWxlczogJWZpbGUtcHJlZml4PSJiYXIiICVkZWZpbmVzICV2ZXJib3NlCi0gICAgYXRfc2V0dXBfbGluZT0nb3V0cHV0LmF0OjY5JwotICAgIGF0X2Rlc2M9J091dHB1dCBmaWxlczogJWZpbGUtcHJlZml4PSJiYXIiICVkZWZpbmVzICV2ZXJib3NlICAnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiAyMTogT3V0cHV0IGZpbGVzOiAlZmlsZS1wcmVmaXg9ImJhciIgJWRlZmluZXMgJXZlcmJvc2UgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIyMS4gb3V0cHV0LmF0OjY5OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCiAKLWNhc2UgImZvby55IiBpbgotICAqLyopIG1rZGlyIGBlY2hvICJmb28ueSIgfCBzZWQgJ3MsLy4qLCwnYDs7Ci1lc2FjCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzYwCisjQVRfU1RBUlRfNjEKK2F0X2ZuX2dyb3VwX2Jhbm5lciA2MSAnb3V0cHV0LmF0Ojc2JyBcCisgICJPdXRwdXQgZmlsZXM6ICVmaWxlLXByZWZpeCBcImJhclwiICVkZWZpbmVzICV2ZXJib3NlICAiICIiIDMKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI2MS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2ZvciBmaWxlIGluIGZvby55IGJhci5vdXRwdXQgYmFyLnRhYi5jIGJhci50YWIuaDsgZG8KKyAgY2FzZSAiJGZpbGUiIGluCisgICAgKi8qKSBta2RpciAtcCBgZWNobyAiJGZpbGUiIHwgc2VkICdzLC8uKiwsJ2A7OworICBlc2FjCitkb25lCiBjYXQgPmZvby55IDw8J19BVEVPRicKLSVmaWxlLXByZWZpeD0iYmFyIiAlZGVmaW5lcyAldmVyYm9zZQorJWZpbGUtcHJlZml4ICJiYXIiICVkZWZpbmVzICV2ZXJib3NlCiAlJQogZm9vOiB7fTsKIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAib3V0cHV0LmF0OjY5OiBiaXNvbiAgZm9vLnkgIgotZWNobyBvdXRwdXQuYXQ6NjkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uICBmb28ueSAgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAib3V0cHV0LmF0OjY5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo3NjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90ICBmb28ueSAiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJvdXRwdXQuYXQ6NzYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgIGZvby55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo3NjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgIGZvby55ICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAgZm9vLnkgIiAib3V0cHV0LmF0Ojc2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sICBmb28ueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0Ojc2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo3NjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDo3NiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NzY6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6NzYiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0Ojc2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCi0KLSRhdF90cmFjZW9uCi0KLSRhdF90cmFjZW9mZgotZWNobyAib3V0cHV0LmF0OjY5OiBscyBiYXIub3V0cHV0IGJhci50YWIuYyBiYXIudGFiLmgiCi1lY2hvIG91dHB1dC5hdDo2OSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgbHMgYmFyLm91dHB1dCBiYXIudGFiLmMgYmFyLnRhYi5oICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gIm91dHB1dC5hdDo2OTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0Ojc2OiBiaXNvbiAgZm9vLnkgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0Ojc2IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uICBmb28ueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo3NjogbHMgYmFyLm91dHB1dCBiYXIudGFiLmMgYmFyLnRhYi5oIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0Ojc2IgorKCAkYXRfY2hlY2tfdHJhY2U7IGxzIGJhci5vdXRwdXQgYmFyLnRhYi5jIGJhci50YWIuaAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo3NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgMjIgKSAjIDIyLiBvdXRwdXQuYXQ6NzE6IE91dHB1dCBmaWxlczogJW91dHB1dD0iYmFyLmMiICVkZWZpbmVzICV2ZXJib3NlICV5YWNjCi0gICAgYXRfc2V0dXBfbGluZT0nb3V0cHV0LmF0OjcxJwotICAgIGF0X2Rlc2M9J091dHB1dCBmaWxlczogJW91dHB1dD0iYmFyLmMiICVkZWZpbmVzICV2ZXJib3NlICV5YWNjICAnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiAyMjogT3V0cHV0IGZpbGVzOiAlb3V0cHV0PSJiYXIuYyIgJWRlZmluZXMgJXZlcmJvc2UgJXlhY2MgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIyMi4gb3V0cHV0LmF0OjcxOiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCiAKLWNhc2UgImZvby55IiBpbgotICAqLyopIG1rZGlyIGBlY2hvICJmb28ueSIgfCBzZWQgJ3MsLy4qLCwnYDs7Ci1lc2FjCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzYxCisjQVRfU1RBUlRfNjIKK2F0X2ZuX2dyb3VwX2Jhbm5lciA2MiAnb3V0cHV0LmF0Ojc4JyBcCisgICJPdXRwdXQgZmlsZXM6ICVvdXRwdXQ9XCJiYXIuY1wiICVkZWZpbmVzICV2ZXJib3NlICV5YWNjICAiICIiIDMKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI2Mi4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2ZvciBmaWxlIGluIGZvby55IGJhci5vdXRwdXQgYmFyLmMgYmFyLmg7IGRvCisgIGNhc2UgIiRmaWxlIiBpbgorICAgICovKikgbWtkaXIgLXAgYGVjaG8gIiRmaWxlIiB8IHNlZCAncywvLiosLCdgOzsKKyAgZXNhYworZG9uZQogY2F0ID5mb28ueSA8PCdfQVRFT0YnCiAlb3V0cHV0PSJiYXIuYyIgJWRlZmluZXMgJXZlcmJvc2UgJXlhY2MKICUlCkBAIC0yNzEwLDc5MCArMTM2ODgsNzA1MSBAQAogX0FURU9GCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJvdXRwdXQuYXQ6NzE6IGJpc29uICBmb28ueSAiCi1lY2hvIG91dHB1dC5hdDo3MSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gIGZvby55ICApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJvdXRwdXQuYXQ6NzE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0Ojc4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgIGZvby55ICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgIm91dHB1dC5hdDo3OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAgZm9vLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo3OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0Ojc4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAgZm9vLnkgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sICBmb28ueSAiICJvdXRwdXQuYXQ6NzgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgIGZvby55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0Ojc4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0Ojc4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo3OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo3ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDo3OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6Nzg6IGJpc29uICBmb28ueSAiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6NzgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gIGZvby55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo3OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSRhdF90cmFjZW9mZgotZWNobyAib3V0cHV0LmF0OjcxOiBscyBiYXIub3V0cHV0IGJhci5jIGJhci5oIgotZWNobyBvdXRwdXQuYXQ6NzEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGxzIGJhci5vdXRwdXQgYmFyLmMgYmFyLmggKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAib3V0cHV0LmF0OjcxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0Ojc4OiBscyBiYXIub3V0cHV0IGJhci5jIGJhci5oIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0Ojc4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGxzIGJhci5vdXRwdXQgYmFyLmMgYmFyLmgKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF82MgorI0FUX1NUQVJUXzYzCithdF9mbl9ncm91cF9iYW5uZXIgNjMgJ291dHB1dC5hdDo4MCcgXAorICAiT3V0cHV0IGZpbGVzOiAlZmlsZS1wcmVmaXg9XCJiYXpcIiAlb3V0cHV0IFwiYmFyLmNcIiAlZGVmaW5lcyAldmVyYm9zZSAleWFjYyAgIiAiIiAzCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiNjMuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCitmb3IgZmlsZSBpbiBmb28ueSBiYXIub3V0cHV0IGJhci5jIGJhci5oOyBkbworICBjYXNlICIkZmlsZSIgaW4KKyAgICAqLyopIG1rZGlyIC1wIGBlY2hvICIkZmlsZSIgfCBzZWQgJ3MsLy4qLCwnYDs7CisgIGVzYWMKK2RvbmUKK2NhdCA+Zm9vLnkgPDwnX0FURU9GJworJWZpbGUtcHJlZml4PSJiYXoiICVvdXRwdXQgImJhci5jIiAlZGVmaW5lcyAldmVyYm9zZSAleWFjYworJSUKK2Zvbzoge307CitfQVRFT0YKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo4MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90ICBmb28ueSAiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJvdXRwdXQuYXQ6ODAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgIGZvby55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6ODAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6ODA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sICBmb28ueSAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgIGZvby55ICIgIm91dHB1dC5hdDo4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAgZm9vLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo4MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6ODA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6ODAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjgwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjgwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo4MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo4MDogYmlzb24gIGZvby55ICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDo4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAgZm9vLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6ODA6IGxzIGJhci5vdXRwdXQgYmFyLmMgYmFyLmgiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6ODAiCisoICRhdF9jaGVja190cmFjZTsgbHMgYmFyLm91dHB1dCBiYXIuYyBiYXIuaAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo4MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgMjMgKSAjIDIzLiBvdXRwdXQuYXQ6NzU6IE91dHB1dCBmaWxlczogJWZpbGUtcHJlZml4PSJiYXoiICVvdXRwdXQ9ImJhci5jIiAlZGVmaW5lcyAldmVyYm9zZSAleWFjYwotICAgIGF0X3NldHVwX2xpbmU9J291dHB1dC5hdDo3NScKLSAgICBhdF9kZXNjPSdPdXRwdXQgZmlsZXM6ICVmaWxlLXByZWZpeD0iYmF6IiAlb3V0cHV0PSJiYXIuYyIgJWRlZmluZXMgJXZlcmJvc2UgJXlhY2MgICcKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDIzOiBPdXRwdXQgZmlsZXM6ICVmaWxlLXByZWZpeD0iYmF6IiAlb3V0cHV0PSJiYXIuYyIgJWRlZmluZXMgJXZlcmJvc2UgJXlhY2MgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIyMy4gb3V0cHV0LmF0Ojc1OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfNjMKKyNBVF9TVEFSVF82NAorYXRfZm5fZ3JvdXBfYmFubmVyIDY0ICdvdXRwdXQuYXQ6ODcnIFwKKyAgIk91dHB1dCBmaWxlczogJWRlZmluZXMgJXZlcmJvc2UgICIgIiAgICAgICAgICAgICAgIiAzCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiNjQuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCitmb3IgZmlsZSBpbiBmb28ueXkgZm9vLm91dHB1dCBmb28udGFiLmNjIGZvby50YWIuaGg7IGRvCisgIGNhc2UgIiRmaWxlIiBpbgorICAgICovKikgbWtkaXIgLXAgYGVjaG8gIiRmaWxlIiB8IHNlZCAncywvLiosLCdgOzsKKyAgZXNhYworZG9uZQorY2F0ID5mb28ueXkgPDwnX0FURU9GJworJWRlZmluZXMgJXZlcmJvc2UKKyUlCitmb286IHt9OworX0FURU9GCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6ODc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAgZm9vLnl5ICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgIm91dHB1dC5hdDo4NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAgZm9vLnl5CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6ODciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6ODc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sICBmb28ueXkgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sICBmb28ueXkgIiAib3V0cHV0LmF0Ojg3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sICBmb28ueXkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo4NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6ODc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6ODciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0Ojg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0Ojg3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0Ojg3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo4NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo4NzogYmlzb24gIGZvby55eSAiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6ODciCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gIGZvby55eQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6ODciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6ODc6IGxzIGZvby5vdXRwdXQgZm9vLnRhYi5jYyBmb28udGFiLmhoIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0Ojg3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGxzIGZvby5vdXRwdXQgZm9vLnRhYi5jYyBmb28udGFiLmhoCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0Ojg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzY0CisjQVRfU1RBUlRfNjUKK2F0X2ZuX2dyb3VwX2Jhbm5lciA2NSAnb3V0cHV0LmF0OjkwJyBcCisgICJPdXRwdXQgZmlsZXM6ICVkZWZpbmVzICV2ZXJib3NlICAtbyBmb28uYyAiICIgICAgICIgMworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjY1LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworZm9yIGZpbGUgaW4gZm9vLnl5IGZvby5jIGZvby5oIGZvby5vdXRwdXQ7IGRvCisgIGNhc2UgIiRmaWxlIiBpbgorICAgICovKikgbWtkaXIgLXAgYGVjaG8gIiRmaWxlIiB8IHNlZCAncywvLiosLCdgOzsKKyAgZXNhYworZG9uZQorY2F0ID5mb28ueXkgPDwnX0FURU9GJworJWRlZmluZXMgJXZlcmJvc2UKKyUlCitmb286IHt9OworX0FURU9GCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6OTA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBmb28uYyBmb28ueXkgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAib3V0cHV0LmF0OjkwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGZvby5jIGZvby55eQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjkwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjkwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBmb28uYyBmb28ueXkgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGZvby5jIGZvby55eSAiICJvdXRwdXQuYXQ6OTAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZm9vLmMgZm9vLnl5CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6OTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjkwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjkwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo5MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo5MDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDo5MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6OTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6OTA6IGJpc29uIC1vIGZvby5jIGZvby55eSAiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6OTAiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gZm9vLmMgZm9vLnl5CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo5MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo5MDogbHMgZm9vLmMgZm9vLmggZm9vLm91dHB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDo5MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBscyBmb28uYyBmb28uaCBmb28ub3V0cHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjkwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzY1CisjQVRfU1RBUlRfNjYKK2F0X2ZuX2dyb3VwX2Jhbm5lciA2NiAnb3V0cHV0LmF0OjkzJyBcCisgICJPdXRwdXQgZmlsZXM6ICAtLWRlZmluZXM9Zm9vLmhwcCAtbyBmb28uYysrICIgIiAgICIgMworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjY2LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworZm9yIGZpbGUgaW4gZm9vLnl5IGZvby5jKysgZm9vLmhwcDsgZG8KKyAgY2FzZSAiJGZpbGUiIGluCisgICAgKi8qKSBta2RpciAtcCBgZWNobyAiJGZpbGUiIHwgc2VkICdzLC8uKiwsJ2A7OworICBlc2FjCitkb25lCitjYXQgPmZvby55eSA8PCdfQVRFT0YnCisKKyUlCitmb286IHt9OworX0FURU9GCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6OTM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLWRlZmluZXM9Zm9vLmhwcCAtbyBmb28uYysrIGZvby55eSAiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJvdXRwdXQuYXQ6OTMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1kZWZpbmVzPWZvby5ocHAgLW8gZm9vLmMrKyBmb28ueXkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo5MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo5MzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1kZWZpbmVzPWZvby5ocHAgLW8gZm9vLmMrKyBmb28ueXkgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tZGVmaW5lcz1mb28uaHBwIC1vIGZvby5jKysgZm9vLnl5ICIgIm91dHB1dC5hdDo5MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLWRlZmluZXM9Zm9vLmhwcCAtbyBmb28uYysrIGZvby55eQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjkzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo5MzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDo5MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6OTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6OTM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6OTMiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjkzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjkzOiBiaXNvbiAtLWRlZmluZXM9Zm9vLmhwcCAtbyBmb28uYysrIGZvby55eSAiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6OTMiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLS1kZWZpbmVzPWZvby5ocHAgLW8gZm9vLmMrKyBmb28ueXkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjkzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjkzOiBscyBmb28uYysrIGZvby5ocHAiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6OTMiCisoICRhdF9jaGVja190cmFjZTsgbHMgZm9vLmMrKyBmb28uaHBwCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjkzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzY2CisjQVRfU1RBUlRfNjcKK2F0X2ZuX2dyb3VwX2Jhbm5lciA2NyAnb3V0cHV0LmF0Ojk3JyBcCisgICJPdXRwdXQgZmlsZXM6ICVkZWZpbmVzIFwiZm9vLmhwcFwiIC1vIGZvby5jKysgIiAiICAgIiAzCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiNjcuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCitmb3IgZmlsZSBpbiBmb28ueXkgZm9vLmMrKyBmb28uaHBwOyBkbworICBjYXNlICIkZmlsZSIgaW4KKyAgICAqLyopIG1rZGlyIC1wIGBlY2hvICIkZmlsZSIgfCBzZWQgJ3MsLy4qLCwnYDs7CisgIGVzYWMKK2RvbmUKK2NhdCA+Zm9vLnl5IDw8J19BVEVPRicKKyVkZWZpbmVzICJmb28uaHBwIgorJSUKK2Zvbzoge307CitfQVRFT0YKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo5NzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGZvby5jKysgZm9vLnl5ICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgIm91dHB1dC5hdDo5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBmb28uYysrIGZvby55eQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0Ojk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0Ojk3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBmb28uYysrIGZvby55eSAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZm9vLmMrKyBmb28ueXkgIiAib3V0cHV0LmF0Ojk3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGZvby5jKysgZm9vLnl5CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0Ojk3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0Ojk3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo5NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo5NzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDo5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6OTc6IGJpc29uIC1vIGZvby5jKysgZm9vLnl5ICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDo5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBmb28uYysrIGZvby55eQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6OTc6IGxzIGZvby5jKysgZm9vLmhwcCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDo5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBscyBmb28uYysrIGZvby5ocHAKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfNjcKKyNBVF9TVEFSVF82OAorYXRfZm5fZ3JvdXBfYmFubmVyIDY4ICdvdXRwdXQuYXQ6MTAxJyBcCisgICJPdXRwdXQgZmlsZXM6ICAtbyBmb28uYysrIC0tZ3JhcGg9Zm9vLmdwaCAiICIgICAgICIgMworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjY4LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworZm9yIGZpbGUgaW4gZm9vLnl5IGZvby5jKysgZm9vLmdwaDsgZG8KKyAgY2FzZSAiJGZpbGUiIGluCisgICAgKi8qKSBta2RpciAtcCBgZWNobyAiJGZpbGUiIHwgc2VkICdzLC8uKiwsJ2A7OworICBlc2FjCitkb25lCitjYXQgPmZvby55eSA8PCdfQVRFT0YnCisKKyUlCitmb286IHt9OworX0FURU9GCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTAxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gZm9vLmMrKyAgZm9vLnl5ICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgIm91dHB1dC5hdDoxMDEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gZm9vLmMrKyAgZm9vLnl5CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTAxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjEwMTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZm9vLmMrKyAgZm9vLnl5ICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBmb28uYysrICBmb28ueXkgIiAib3V0cHV0LmF0OjEwMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBmb28uYysrICBmb28ueXkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoxMDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjEwMTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDoxMDEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjEwMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoxMDE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6MTAxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoxMDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTAxOiBiaXNvbiAtbyBmb28uYysrIC0tZ3JhcGg9Zm9vLmdwaCBmb28ueXkgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjEwMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBmb28uYysrIC0tZ3JhcGg9Zm9vLmdwaCBmb28ueXkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjEwMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoxMDE6IGxzIGZvby5jKysgZm9vLmdwaCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDoxMDEiCisoICRhdF9jaGVja190cmFjZTsgbHMgZm9vLmMrKyBmb28uZ3BoCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjEwMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF82OAorI0FUX1NUQVJUXzY5CithdF9mbl9ncm91cF9iYW5uZXIgNjkgJ291dHB1dC5hdDoxMTYnIFwKKyAgIk91dHB1dCBmaWxlczogJXNrZWxldG9uIFwibGFscjEuY2NcIiAlZGVmaW5lcyAldmVyYm9zZSAgIiAiIiAzCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiNjkuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCitmb3IgZmlsZSBpbiBmb28ueXkgZm9vLnRhYi5jYyBmb28udGFiLmhoIGZvby5vdXRwdXQgbG9jYXRpb24uaGggc3RhY2suaGggcG9zaXRpb24uaGg7IGRvCisgIGNhc2UgIiRmaWxlIiBpbgorICAgICovKikgbWtkaXIgLXAgYGVjaG8gIiRmaWxlIiB8IHNlZCAncywvLiosLCdgOzsKKyAgZXNhYworZG9uZQorY2F0ID5mb28ueXkgPDwnX0FURU9GJworJXNrZWxldG9uICJsYWxyMS5jYyIgJWRlZmluZXMgJXZlcmJvc2UKKyUlCitmb286IHt9OworX0FURU9GCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTE2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgIGZvby55eSAiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJvdXRwdXQuYXQ6MTE2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90ICBmb28ueXkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoxMTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTE2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAgZm9vLnl5ICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAgZm9vLnl5ICIgIm91dHB1dC5hdDoxMTYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgIGZvby55eQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjExNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTE2OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjExNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjExNjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDoxMTYiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjExNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoxMTY6IGJpc29uICBmb28ueXkgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjExNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAgZm9vLnl5CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoxMTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTE2OiBscyBmb28udGFiLmNjIGZvby50YWIuaGggZm9vLm91dHB1dCBsb2NhdGlvbi5oaCBzdGFjay5oaCBwb3NpdGlvbi5oaCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDoxMTYiCisoICRhdF9jaGVja190cmFjZTsgbHMgZm9vLnRhYi5jYyBmb28udGFiLmhoIGZvby5vdXRwdXQgbG9jYXRpb24uaGggc3RhY2suaGggcG9zaXRpb24uaGgKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzY5CisjQVRfU1RBUlRfNzAKK2F0X2ZuX2dyb3VwX2Jhbm5lciA3MCAnb3V0cHV0LmF0OjExOScgXAorICAiT3V0cHV0IGZpbGVzOiAlc2tlbGV0b24gXCJsYWxyMS5jY1wiICVkZWZpbmVzICV2ZXJib3NlICAiICIiIDMKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI3MC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2ZvciBmaWxlIGluIHN1YmRpci9mb28ueXkgZm9vLnRhYi5jYyBmb28udGFiLmhoIGZvby5vdXRwdXQgbG9jYXRpb24uaGggc3RhY2suaGggcG9zaXRpb24uaGg7IGRvCisgIGNhc2UgIiRmaWxlIiBpbgorICAgICovKikgbWtkaXIgLXAgYGVjaG8gIiRmaWxlIiB8IHNlZCAncywvLiosLCdgOzsKKyAgZXNhYworZG9uZQorY2F0ID5zdWJkaXIvZm9vLnl5IDw8J19BVEVPRicKKyVza2VsZXRvbiAibGFscjEuY2MiICVkZWZpbmVzICV2ZXJib3NlCislJQorZm9vOiB7fTsKK19BVEVPRgorCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjExOTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90ICBzdWJkaXIvZm9vLnl5ICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgIm91dHB1dC5hdDoxMTkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgIHN1YmRpci9mb28ueXkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoxMTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTE5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAgc3ViZGlyL2Zvby55eSAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgIHN1YmRpci9mb28ueXkgIiAib3V0cHV0LmF0OjExOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAgc3ViZGlyL2Zvby55eQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjExOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTE5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjExOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjExOTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDoxMTkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjExOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoxMTk6IGJpc29uICBzdWJkaXIvZm9vLnl5ICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDoxMTkiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gIHN1YmRpci9mb28ueXkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjExOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoxMTk6IGxzIGZvby50YWIuY2MgZm9vLnRhYi5oaCBmb28ub3V0cHV0IGxvY2F0aW9uLmhoIHN0YWNrLmhoIHBvc2l0aW9uLmhoIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjExOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBscyBmb28udGFiLmNjIGZvby50YWIuaGggZm9vLm91dHB1dCBsb2NhdGlvbi5oaCBzdGFjay5oaCBwb3NpdGlvbi5oaAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoxMTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisjIEFsc28gbWFrZSBzdXJlIHRoYXQgdGhlIGluY2x1ZGVzIGRvIG5vdCByZWZlciB0byB0aGUgc3ViZGlyZWN0b3J5LgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoxMTk6IGdyZXAgJ2luY2x1ZGUgLnN1YmRpci8nIGZvby50YWIuY2MiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6MTE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ2luY2x1ZGUgLnN1YmRpci8nIGZvby50YWIuY2MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjExOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTE5OiBncmVwICdpbmNsdWRlIC5zdWJkaXIvJyBmb28udGFiLmhoIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjExOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwICdpbmNsdWRlIC5zdWJkaXIvJyBmb28udGFiLmhoCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoxMTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfNzAKKyNBVF9TVEFSVF83MQorYXRfZm5fZ3JvdXBfYmFubmVyIDcxICdvdXRwdXQuYXQ6MTIzJyBcCisgICJPdXRwdXQgZmlsZXM6ICVza2VsZXRvbiBcImxhbHIxLmNjXCIgJWRlZmluZXMgJXZlcmJvc2UgLW8gc3ViZGlyL2Zvby5jYyAiICIiIDMKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI3MS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2ZvciBmaWxlIGluIHN1YmRpci9mb28ueXkgc3ViZGlyL2Zvby5jYyBzdWJkaXIvZm9vLmhoIHN1YmRpci9mb28ub3V0cHV0IHN1YmRpci9sb2NhdGlvbi5oaCBzdWJkaXIvc3RhY2suaGggc3ViZGlyL3Bvc2l0aW9uLmhoOyBkbworICBjYXNlICIkZmlsZSIgaW4KKyAgICAqLyopIG1rZGlyIC1wIGBlY2hvICIkZmlsZSIgfCBzZWQgJ3MsLy4qLCwnYDs7CisgIGVzYWMKK2RvbmUKK2NhdCA+c3ViZGlyL2Zvby55eSA8PCdfQVRFT0YnCislc2tlbGV0b24gImxhbHIxLmNjIiAlZGVmaW5lcyAldmVyYm9zZQorJSUKK2Zvbzoge307CitfQVRFT0YKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoxMjM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBzdWJkaXIvZm9vLmNjIHN1YmRpci9mb28ueXkgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAib3V0cHV0LmF0OjEyMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBzdWJkaXIvZm9vLmNjIHN1YmRpci9mb28ueXkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoxMjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTIzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBzdWJkaXIvZm9vLmNjIHN1YmRpci9mb28ueXkgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIHN1YmRpci9mb28uY2Mgc3ViZGlyL2Zvby55eSAiICJvdXRwdXQuYXQ6MTIzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIHN1YmRpci9mb28uY2Mgc3ViZGlyL2Zvby55eQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjEyMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTIzOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjEyMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTIzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjEyMzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDoxMjMiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjEyMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoxMjM6IGJpc29uIC1vIHN1YmRpci9mb28uY2Mgc3ViZGlyL2Zvby55eSAiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6MTIzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIHN1YmRpci9mb28uY2Mgc3ViZGlyL2Zvby55eQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTIzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjEyMzogbHMgc3ViZGlyL2Zvby5jYyBzdWJkaXIvZm9vLmhoIHN1YmRpci9mb28ub3V0cHV0IHN1YmRpci9sb2NhdGlvbi5oaCBzdWJkaXIvc3RhY2suaGggc3ViZGlyL3Bvc2l0aW9uLmhoIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjEyMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBscyBzdWJkaXIvZm9vLmNjIHN1YmRpci9mb28uaGggc3ViZGlyL2Zvby5vdXRwdXQgc3ViZGlyL2xvY2F0aW9uLmhoIHN1YmRpci9zdGFjay5oaCBzdWJkaXIvcG9zaXRpb24uaGgKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTIzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworIyBBbHNvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbmNsdWRlcyBkbyBub3QgcmVmZXIgdG8gdGhlIHN1YmRpcmVjdG9yeS4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTIzOiBncmVwICdpbmNsdWRlIC5zdWJkaXIvJyBzdWJkaXIvZm9vLmNjIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjEyMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwICdpbmNsdWRlIC5zdWJkaXIvJyBzdWJkaXIvZm9vLmNjCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoxMjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjEyMzogZ3JlcCAnaW5jbHVkZSAuc3ViZGlyLycgc3ViZGlyL2Zvby5oaCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDoxMjMiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnaW5jbHVkZSAuc3ViZGlyLycgc3ViZGlyL2Zvby5oaAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTIzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzcxCisjQVRfU1RBUlRfNzIKK2F0X2ZuX2dyb3VwX2Jhbm5lciA3MiAnb3V0cHV0LmF0OjEyOCcgXAorICAiT3V0cHV0IGZpbGVzOiAlc2tlbGV0b24gXCJsYWxyMS5jY1wiICVkZWZpbmVzICV2ZXJib3NlICVmaWxlLXByZWZpeCBcIm91dHB1dF9kaXIvZm9vXCIgICIgIiIgMworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjcyLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworZm9yIGZpbGUgaW4gZ3JhbV9kaXIvZm9vLnl5IG91dHB1dF9kaXIvZm9vLnRhYi5jYyBvdXRwdXRfZGlyL2Zvby50YWIuaGggb3V0cHV0X2Rpci9mb28ub3V0cHV0IG91dHB1dF9kaXIvbG9jYXRpb24uaGggb3V0cHV0X2Rpci9zdGFjay5oaCBvdXRwdXRfZGlyL3Bvc2l0aW9uLmhoOyBkbworICBjYXNlICIkZmlsZSIgaW4KKyAgICAqLyopIG1rZGlyIC1wIGBlY2hvICIkZmlsZSIgfCBzZWQgJ3MsLy4qLCwnYDs7CisgIGVzYWMKK2RvbmUKK2NhdCA+Z3JhbV9kaXIvZm9vLnl5IDw8J19BVEVPRicKKyVza2VsZXRvbiAibGFscjEuY2MiICVkZWZpbmVzICV2ZXJib3NlICVmaWxlLXByZWZpeCAib3V0cHV0X2Rpci9mb28iCislJQorZm9vOiB7fTsKK19BVEVPRgorCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjEyODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90ICBncmFtX2Rpci9mb28ueXkgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAib3V0cHV0LmF0OjEyOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAgZ3JhbV9kaXIvZm9vLnl5CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTI4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjEyODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgIGdyYW1fZGlyL2Zvby55eSAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgIGdyYW1fZGlyL2Zvby55eSAiICJvdXRwdXQuYXQ6MTI4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sICBncmFtX2Rpci9mb28ueXkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoxMjgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjEyODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDoxMjgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjEyOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoxMjg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6MTI4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoxMjgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTI4OiBiaXNvbiAgZ3JhbV9kaXIvZm9vLnl5ICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDoxMjgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gIGdyYW1fZGlyL2Zvby55eQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTI4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjEyODogbHMgb3V0cHV0X2Rpci9mb28udGFiLmNjIG91dHB1dF9kaXIvZm9vLnRhYi5oaCBvdXRwdXRfZGlyL2Zvby5vdXRwdXQgb3V0cHV0X2Rpci9sb2NhdGlvbi5oaCBvdXRwdXRfZGlyL3N0YWNrLmhoIG91dHB1dF9kaXIvcG9zaXRpb24uaGgiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6MTI4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGxzIG91dHB1dF9kaXIvZm9vLnRhYi5jYyBvdXRwdXRfZGlyL2Zvby50YWIuaGggb3V0cHV0X2Rpci9mb28ub3V0cHV0IG91dHB1dF9kaXIvbG9jYXRpb24uaGggb3V0cHV0X2Rpci9zdGFjay5oaCBvdXRwdXRfZGlyL3Bvc2l0aW9uLmhoCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjEyOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF83MgorI0FUX1NUQVJUXzczCithdF9mbl9ncm91cF9iYW5uZXIgNzMgJ291dHB1dC5hdDoxNTgnIFwKKyAgIkNvbmZsaWN0aW5nIG91dHB1dCBmaWxlczogIC0tZ3JhcGg9XCJmb28udGFiLmNcIiIgIiAiIDMKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI3My4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiBjYXNlICJmb28ueSIgaW4KICAgKi8qKSBta2RpciBgZWNobyAiZm9vLnkiIHwgc2VkICdzLC8uKiwsJ2A7OwogZXNhYwogY2F0ID5mb28ueSA8PCdfQVRFT0YnCi0lZmlsZS1wcmVmaXg9ImJheiIgJW91dHB1dD0iYmFyLmMiICVkZWZpbmVzICV2ZXJib3NlICV5YWNjCi0lJQotZm9vOiB7fTsKLV9BVEVPRgotCi0KLSRhdF90cmFjZW9mZgotZWNobyAib3V0cHV0LmF0Ojc1OiBiaXNvbiAgZm9vLnkgIgotZWNobyBvdXRwdXQuYXQ6NzUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uICBmb28ueSAgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAib3V0cHV0LmF0Ojc1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJvdXRwdXQuYXQ6NzU6IGxzIGJhci5vdXRwdXQgYmFyLmMgYmFyLmgiCi1lY2hvIG91dHB1dC5hdDo3NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgbHMgYmFyLm91dHB1dCBiYXIuYyBiYXIuaCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJvdXRwdXQuYXQ6NzU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0KLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwotCi0gIDI0ICkgIyAyNC4gb3V0cHV0LmF0OjgwOiBPdXRwdXQgZmlsZXM6ICVkZWZpbmVzICV2ZXJib3NlCi0gICAgYXRfc2V0dXBfbGluZT0nb3V0cHV0LmF0OjgwJwotICAgIGF0X2Rlc2M9J091dHB1dCBmaWxlczogJWRlZmluZXMgJXZlcmJvc2UgICcKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDI0OiBPdXRwdXQgZmlsZXM6ICVkZWZpbmVzICV2ZXJib3NlICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiMjQuIG91dHB1dC5hdDo4MDogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgotCi1jYXNlICJmb28ueXkiIGluCi0gICovKikgbWtkaXIgYGVjaG8gImZvby55eSIgfCBzZWQgJ3MsLy4qLCwnYDs7Ci1lc2FjCi1jYXQgPmZvby55eSA8PCdfQVRFT0YnCi0lZGVmaW5lcyAldmVyYm9zZQotJSUKLWZvbzoge307Ci1fQVRFT0YKLQotCi0kYXRfdHJhY2VvZmYKLWVjaG8gIm91dHB1dC5hdDo4MDogYmlzb24gIGZvby55eSAiCi1lY2hvIG91dHB1dC5hdDo4MCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gIGZvby55eSAgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAib3V0cHV0LmF0OjgwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJvdXRwdXQuYXQ6ODA6IGxzIGZvby5vdXRwdXQgZm9vLnRhYi5jYyBmb28udGFiLmhoIgotZWNobyBvdXRwdXQuYXQ6ODAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGxzIGZvby5vdXRwdXQgZm9vLnRhYi5jYyBmb28udGFiLmhoICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gIm91dHB1dC5hdDo4MDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCi0KLQotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Ci0KLSAgMjUgKSAjIDI1LiBvdXRwdXQuYXQ6ODM6IE91dHB1dCBmaWxlczogJWRlZmluZXMgJXZlcmJvc2UgIC1vIGZvby5jCi0gICAgYXRfc2V0dXBfbGluZT0nb3V0cHV0LmF0OjgzJwotICAgIGF0X2Rlc2M9J091dHB1dCBmaWxlczogJWRlZmluZXMgJXZlcmJvc2UgIC1vIGZvby5jICcKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDI1OiBPdXRwdXQgZmlsZXM6ICVkZWZpbmVzICV2ZXJib3NlICAtbyBmb28uYyAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiMjUuIG91dHB1dC5hdDo4MzogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgotCi1jYXNlICJmb28ueXkiIGluCi0gICovKikgbWtkaXIgYGVjaG8gImZvby55eSIgfCBzZWQgJ3MsLy4qLCwnYDs7Ci1lc2FjCi1jYXQgPmZvby55eSA8PCdfQVRFT0YnCi0lZGVmaW5lcyAldmVyYm9zZQotJSUKLWZvbzoge307Ci1fQVRFT0YKLQotCi0kYXRfdHJhY2VvZmYKLWVjaG8gIm91dHB1dC5hdDo4MzogYmlzb24gLW8gZm9vLmMgZm9vLnl5ICIKLWVjaG8gb3V0cHV0LmF0OjgzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtbyBmb28uYyBmb28ueXkgICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gIm91dHB1dC5hdDo4MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCi0KLSRhdF90cmFjZW9mZgotZWNobyAib3V0cHV0LmF0OjgzOiBscyBmb28uYyBmb28uaCBmb28ub3V0cHV0IgotZWNobyBvdXRwdXQuYXQ6ODMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGxzIGZvby5jIGZvby5oIGZvby5vdXRwdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAib3V0cHV0LmF0OjgzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KLQotCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICAyNiApICMgMjYuIG91dHB1dC5hdDo4NzogT3V0cHV0IGZpbGVzOiAgLS1kZWZpbmVzPWZvby5ocHAgLW8gZm9vLmMrKwotICAgIGF0X3NldHVwX2xpbmU9J291dHB1dC5hdDo4NycKLSAgICBhdF9kZXNjPSdPdXRwdXQgZmlsZXM6ICAtLWRlZmluZXM9Zm9vLmhwcCAtbyBmb28uYysrICcKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDI2OiBPdXRwdXQgZmlsZXM6ICAtLWRlZmluZXM9Zm9vLmhwcCAtbyBmb28uYysrICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiMjYuIG91dHB1dC5hdDo4NzogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgotCi1jYXNlICJmb28ueXkiIGluCi0gICovKikgbWtkaXIgYGVjaG8gImZvby55eSIgfCBzZWQgJ3MsLy4qLCwnYDs7Ci1lc2FjCi1jYXQgPmZvby55eSA8PCdfQVRFT0YnCiAKICUlCiBmb286IHt9OwogX0FURU9GCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJvdXRwdXQuYXQ6ODc6IGJpc29uIC0tZGVmaW5lcz1mb28uaHBwIC1vIGZvby5jKysgZm9vLnl5ICIKLWVjaG8gb3V0cHV0LmF0Ojg3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtLWRlZmluZXM9Zm9vLmhwcCAtbyBmb28uYysrIGZvby55eSAgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAib3V0cHV0LmF0Ojg3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCitjcCBmb28ueSBleHBvdXQKKyMgQmVjYXVzZSBhbiBvdXRwdXQgZmlsZSBuYW1lIGNvbmZsaWN0IGlzIHN0aWxsIGEgd2FybmluZywgQmlzb24gZXhpdHMKKyMgd2l0aCBzdGF0dXMgMCwgc28gQVRfQklTT05fQ0hFQ0sgZG9lcyBub3QgcmVhbGl6ZSB0aGF0IHRoZXJlIG1heSBiZSBubworIyBvdXRwdXQgZmlsZSBhZ2FpbnN0IHdoaWNoIHRvIGNoZWNrIHRoZSBYTUwuICBBVF9CSVNPTl9DSEVDS19OT19YTUwKKyMgYXZvaWRzIHRoYXQgcHJvYmxlbS4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTU4OiBiaXNvbiAtLWdyYXBoPVwiZm9vLnRhYi5jXCIgZm9vLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6MTU4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC0tZ3JhcGg9ImZvby50YWIuYyIgZm9vLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJmb28ueTogd2FybmluZzogY29uZmxpY3Rpbmcgb3V0cHV0cyB0byBmaWxlICdmb28udGFiLmMnCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTU4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisjIERlZmluaW5nIFBPU0lYTFlfQ09SUkVDVCBjYXVzZXMgYmlzb24gdG8gY29tcGxhaW4gaWYgb3B0aW9ucyBhcmUKKyMgYWRkZWQgYWZ0ZXIgdGhlIGdyYW1tYXIgZmlsZSBuYW1lLCBzbyBza2lwIHRoZXNlIGNoZWNrcyBpbiB0aGF0CisjIGNhc2UuCitpZiB0ZXN0ICIkUE9TSVhMWV9DT1JSRUNUX0lTX0VYUE9SVEVEIiA9IGZhbHNlOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworCisgICMgVG8gYXZvaWQgZXhwYW5kaW5nIGl0IHJlcGVhdGVkbHksIHN0b3JlIHNwZWNpZmllZCBzdGRvdXQuCisgIDogPmV4cG91dAorCisgICMgUnVuIHdpdGggLVdlcnJvci4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoxNTg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1ncmFwaD1cImZvby50YWIuY1wiIGZvby55IC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLWdyYXBoPVwiZm9vLnRhYi5jXCIgZm9vLnkgLVdlcnJvciIgIm91dHB1dC5hdDoxNTgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLWdyYXBoPSJmb28udGFiLmMiIGZvby55IC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoxNTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBCdWlsZCBleHBlY3RlZCBzdGRlcnIgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgIndhcm5pbmdzIGJlaW5nCisgICMgdHJlYXRlZCBhcyBlcnJvcnMiIG1lc3NhZ2UuCisgIGNhdCA+YXQtYmlzb24tY2hlY2std2FybmluZ3MgPDwnX0FURU9GJworZm9vLnk6IHdhcm5pbmc6IGNvbmZsaWN0aW5nIG91dHB1dHMgdG8gZmlsZSAnZm9vLnRhYi5jJworX0FURU9GCisKKyAgYXRfYmlzb25fY2hlY2tfZmlyc3Q9YHNlZCAtbiBcCisgICAgJy86IHdhcm5pbmc6IC97PTtxO30nIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzYAorICA6ICR7YXRfYmlzb25fY2hlY2tfZmlyc3Q6PTF9CisgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcD1gc2VkIC1uIFwKKyAgICAnL2NvbmZsaWN0czogWzAtOV0uKnJlZHVjZSQvez07cTt9JyBhdC1iaXNvbi1jaGVjay13YXJuaW5nc2AKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcDo9MX0KKyAgaWYgdGVzdCAkYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wIC1sdCAkYXRfYmlzb25fY2hlY2tfZmlyc3Q7IHRoZW4KKyAgICBhdF9iaXNvbl9jaGVja19maXJzdD0kYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wCisgIGZpCisgIGlmIHRlc3QgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0IC1ndCAxOyB0aGVuCisgICAgc2VkIC1uICIxLGBleHByICRhdF9iaXNvbl9jaGVja19maXJzdCAtIDFgInAgXAorICAgICAgYXQtYmlzb24tY2hlY2std2FybmluZ3MgPiBleHBlcnIKKyAgZmkKKyAgZWNobyAnYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzJyA+PiBleHBlcnIKKworICAjIEZpbmlzaCBidWlsZGluZyBleHBlY3RlZCBzdGRlcnIgYW5kIGNoZWNrLiAgVW5saWtlIHdhcm5pbmdzLAorICAjIGNvbXBsYWludHMgY2F1c2UgYmlzb24gdG8gZXhpdCBlYXJseS4gIFRodXMsIHdpdGggLVdlcnJvciwgYmlzb24KKyAgIyBkb2VzIG5vdCBuZWNlc3NhcmlseSByZXBvcnQgYWxsIHdhcm5pbmdzIHRoYXQgaXQgZG9lcyB3aXRob3V0CisgICMgLVdlcnJvciwgYnV0IGl0IGF0IGxlYXN0IHJlcG9ydHMgb25lLgorICBhdF9iaXNvbl9jaGVja19sYXN0PWBzZWQgLW4gJyQ9JyBzdGRlcnJgCisgIDogJHthdF9iaXNvbl9jaGVja19sYXN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19sYXN0PWBleHByICRhdF9iaXNvbl9jaGVja19sYXN0IC0gMWAKKyAgc2VkIC1uICIkYXRfYmlzb25fY2hlY2tfZmlyc3QsJGF0X2Jpc29uX2NoZWNrX2xhc3QicCBcCisgICAgYXQtYmlzb24tY2hlY2std2FybmluZ3MgPj4gZXhwZXJyCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTU4OiBzZWQgJ3MsLiovXFwoYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzXFwpXCQsXFwxLCcgXFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJvdXRwdXQuYXQ6MTU4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAncywuKi9cKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1wpJCxcMSwnIFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjE1OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIE5vdyBjaGVjayAtLXdhcm5pbmdzPWVycm9yLgorICBjcCBzdGRlcnIgZXhwZXJyCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTU4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tZ3JhcGg9XCJmb28udGFiLmNcIiBmb28ueSAtLXdhcm5pbmdzPWVycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1ncmFwaD1cImZvby50YWIuY1wiIGZvby55IC0td2FybmluZ3M9ZXJyb3IiICJvdXRwdXQuYXQ6MTU4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1ncmFwaD0iZm9vLnRhYi5jIiBmb28ueSAtLXdhcm5pbmdzPWVycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCiskYXRfZGlmZiBleHBlcnIgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoxNTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBOb3cgY2hlY2sgLVdub25lIGFuZCAtLXdhcm5pbmdzPW5vbmUgYnkgbWFraW5nIHN1cmUgdGhhdAorICAjIC1XZXJyb3IgZG9lc24ndCBjaGFuZ2UgdGhlIGV4aXQgc3RhdHVzIHdoZW4gLVdub25lIG9yCisgICMgLS13YXJuaW5ncz1ub25lIGlzIHNwZWNpZmllZC4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoxNTg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1ncmFwaD1cImZvby50YWIuY1wiIGZvby55IC1Xbm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1ncmFwaD1cImZvby50YWIuY1wiIGZvby55IC1Xbm9uZSAtV2Vycm9yIiAib3V0cHV0LmF0OjE1OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tZ3JhcGg9ImZvby50YWIuYyIgZm9vLnkgLVdub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjE1OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoxNTg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1ncmFwaD1cImZvby50YWIuY1wiIGZvby55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1ncmFwaD1cImZvby50YWIuY1wiIGZvby55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIiAib3V0cHV0LmF0OjE1OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tZ3JhcGg9ImZvby50YWIuYyIgZm9vLnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjE1OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjE1ODogY2F0IGZvby55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjE1OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgZm9vLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjE1OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzczCisjQVRfU1RBUlRfNzQKK2F0X2ZuX2dyb3VwX2Jhbm5lciA3NCAnb3V0cHV0LmF0OjE2MycgXAorICAiQ29uZmxpY3Rpbmcgb3V0cHV0IGZpbGVzOiAlZGVmaW5lcyBcImZvby5vdXRwdXRcIiAtdiIgIiIgMworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjc0LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKLSRhdF90cmFjZW9mZgotZWNobyAib3V0cHV0LmF0Ojg3OiBscyBmb28uYysrIGZvby5ocHAiCi1lY2hvIG91dHB1dC5hdDo4NyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgbHMgZm9vLmMrKyBmb28uaHBwICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gIm91dHB1dC5hdDo4NzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OworY2FzZSAiZm9vLnkiIGluCisgICovKikgbWtkaXIgYGVjaG8gImZvby55IiB8IHNlZCAncywvLiosLCdgOzsKIGVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2NhdCA+Zm9vLnkgPDwnX0FURU9GJworJWRlZmluZXMgImZvby5vdXRwdXQiCislJQorZm9vOiB7fTsKK19BVEVPRgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKworY3AgZm9vLnkgZXhwb3V0CisjIEJlY2F1c2UgYW4gb3V0cHV0IGZpbGUgbmFtZSBjb25mbGljdCBpcyBzdGlsbCBhIHdhcm5pbmcsIEJpc29uIGV4aXRzCisjIHdpdGggc3RhdHVzIDAsIHNvIEFUX0JJU09OX0NIRUNLIGRvZXMgbm90IHJlYWxpemUgdGhhdCB0aGVyZSBtYXkgYmUgbm8KKyMgb3V0cHV0IGZpbGUgYWdhaW5zdCB3aGljaCB0byBjaGVjayB0aGUgWE1MLiAgQVRfQklTT05fQ0hFQ0tfTk9fWE1MCisjIGF2b2lkcyB0aGF0IHByb2JsZW0uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjE2MzogYmlzb24gLXYgZm9vLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6MTYzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC12IGZvby55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiZm9vLnk6IHdhcm5pbmc6IGNvbmZsaWN0aW5nIG91dHB1dHMgdG8gZmlsZSAnZm9vLm91dHB1dCcKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoxNjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisjIERlZmluaW5nIFBPU0lYTFlfQ09SUkVDVCBjYXVzZXMgYmlzb24gdG8gY29tcGxhaW4gaWYgb3B0aW9ucyBhcmUKKyMgYWRkZWQgYWZ0ZXIgdGhlIGdyYW1tYXIgZmlsZSBuYW1lLCBzbyBza2lwIHRoZXNlIGNoZWNrcyBpbiB0aGF0CisjIGNhc2UuCitpZiB0ZXN0ICIkUE9TSVhMWV9DT1JSRUNUX0lTX0VYUE9SVEVEIiA9IGZhbHNlOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworCisgICMgVG8gYXZvaWQgZXhwYW5kaW5nIGl0IHJlcGVhdGVkbHksIHN0b3JlIHNwZWNpZmllZCBzdGRvdXQuCisgIDogPmV4cG91dAorCisgICMgUnVuIHdpdGggLVdlcnJvci4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoxNjM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLXYgZm9vLnkgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC12IGZvby55IC1XZXJyb3IiICJvdXRwdXQuYXQ6MTYzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLXYgZm9vLnkgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjE2MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIEJ1aWxkIGV4cGVjdGVkIHN0ZGVyciB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSAid2FybmluZ3MgYmVpbmcKKyAgIyB0cmVhdGVkIGFzIGVycm9ycyIgbWVzc2FnZS4KKyAgY2F0ID5hdC1iaXNvbi1jaGVjay13YXJuaW5ncyA8PCdfQVRFT0YnCitmb28ueTogd2FybmluZzogY29uZmxpY3Rpbmcgb3V0cHV0cyB0byBmaWxlICdmb28ub3V0cHV0JworX0FURU9GCisKKyAgYXRfYmlzb25fY2hlY2tfZmlyc3Q9YHNlZCAtbiBcCisgICAgJy86IHdhcm5pbmc6IC97PTtxO30nIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzYAorICA6ICR7YXRfYmlzb25fY2hlY2tfZmlyc3Q6PTF9CisgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcD1gc2VkIC1uIFwKKyAgICAnL2NvbmZsaWN0czogWzAtOV0uKnJlZHVjZSQvez07cTt9JyBhdC1iaXNvbi1jaGVjay13YXJuaW5nc2AKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcDo9MX0KKyAgaWYgdGVzdCAkYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wIC1sdCAkYXRfYmlzb25fY2hlY2tfZmlyc3Q7IHRoZW4KKyAgICBhdF9iaXNvbl9jaGVja19maXJzdD0kYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wCisgIGZpCisgIGlmIHRlc3QgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0IC1ndCAxOyB0aGVuCisgICAgc2VkIC1uICIxLGBleHByICRhdF9iaXNvbl9jaGVja19maXJzdCAtIDFgInAgXAorICAgICAgYXQtYmlzb24tY2hlY2std2FybmluZ3MgPiBleHBlcnIKKyAgZmkKKyAgZWNobyAnYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzJyA+PiBleHBlcnIKKworICAjIEZpbmlzaCBidWlsZGluZyBleHBlY3RlZCBzdGRlcnIgYW5kIGNoZWNrLiAgVW5saWtlIHdhcm5pbmdzLAorICAjIGNvbXBsYWludHMgY2F1c2UgYmlzb24gdG8gZXhpdCBlYXJseS4gIFRodXMsIHdpdGggLVdlcnJvciwgYmlzb24KKyAgIyBkb2VzIG5vdCBuZWNlc3NhcmlseSByZXBvcnQgYWxsIHdhcm5pbmdzIHRoYXQgaXQgZG9lcyB3aXRob3V0CisgICMgLVdlcnJvciwgYnV0IGl0IGF0IGxlYXN0IHJlcG9ydHMgb25lLgorICBhdF9iaXNvbl9jaGVja19sYXN0PWBzZWQgLW4gJyQ9JyBzdGRlcnJgCisgIDogJHthdF9iaXNvbl9jaGVja19sYXN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19sYXN0PWBleHByICRhdF9iaXNvbl9jaGVja19sYXN0IC0gMWAKKyAgc2VkIC1uICIkYXRfYmlzb25fY2hlY2tfZmlyc3QsJGF0X2Jpc29uX2NoZWNrX2xhc3QicCBcCisgICAgYXQtYmlzb24tY2hlY2std2FybmluZ3MgPj4gZXhwZXJyCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTYzOiBzZWQgJ3MsLiovXFwoYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzXFwpXCQsXFwxLCcgXFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJvdXRwdXQuYXQ6MTYzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAncywuKi9cKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1wpJCxcMSwnIFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjE2MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIE5vdyBjaGVjayAtLXdhcm5pbmdzPWVycm9yLgorICBjcCBzdGRlcnIgZXhwZXJyCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTYzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC12IGZvby55IC0td2FybmluZ3M9ZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtdiBmb28ueSAtLXdhcm5pbmdzPWVycm9yIiAib3V0cHV0LmF0OjE2MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC12IGZvby55IC0td2FybmluZ3M9ZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjE2MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIE5vdyBjaGVjayAtV25vbmUgYW5kIC0td2FybmluZ3M9bm9uZSBieSBtYWtpbmcgc3VyZSB0aGF0CisgICMgLVdlcnJvciBkb2Vzbid0IGNoYW5nZSB0aGUgZXhpdCBzdGF0dXMgd2hlbiAtV25vbmUgb3IKKyAgIyAtLXdhcm5pbmdzPW5vbmUgaXMgc3BlY2lmaWVkLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjE2MzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtdiBmb28ueSAtV25vbmUgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC12IGZvby55IC1Xbm9uZSAtV2Vycm9yIiAib3V0cHV0LmF0OjE2MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC12IGZvby55IC1Xbm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoxNjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTYzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC12IGZvby55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLXYgZm9vLnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiICJvdXRwdXQuYXQ6MTYzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLXYgZm9vLnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjE2MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjE2MzogY2F0IGZvby55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjE2MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgZm9vLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjE2MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzc0CisjQVRfU1RBUlRfNzUKK2F0X2ZuX2dyb3VwX2Jhbm5lciA3NSAnb3V0cHV0LmF0OjE2OCcgXAorICAiQ29uZmxpY3Rpbmcgb3V0cHV0IGZpbGVzOiAlc2tlbGV0b24gXCJsYWxyMS5jY1wiICVkZWZpbmVzIC0tZ3JhcGg9XCJsb2NhdGlvbi5oaFwiIiAiIiAzCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiNzUuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAotCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICAyNyApICMgMjcuIG91dHB1dC5hdDo5MTogT3V0cHV0IGZpbGVzOiAgLW8gZm9vLmMrKyAtLWdyYXBoPWZvby5ncGgKLSAgICBhdF9zZXR1cF9saW5lPSdvdXRwdXQuYXQ6OTEnCi0gICAgYXRfZGVzYz0nT3V0cHV0IGZpbGVzOiAgLW8gZm9vLmMrKyAtLWdyYXBoPWZvby5ncGggJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgMjc6IE91dHB1dCBmaWxlczogIC1vIGZvby5jKysgLS1ncmFwaD1mb28uZ3BoICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIyNy4gb3V0cHV0LmF0OjkxOiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCi0KLWNhc2UgImZvby55eSIgaW4KLSAgKi8qKSBta2RpciBgZWNobyAiZm9vLnl5IiB8IHNlZCAncywvLiosLCdgOzsKK2Nhc2UgImZvby55IiBpbgorICAqLyopIG1rZGlyIGBlY2hvICJmb28ueSIgfCBzZWQgJ3MsLy4qLCwnYDs7CiBlc2FjCi1jYXQgPmZvby55eSA8PCdfQVRFT0YnCitjYXQgPmZvby55IDw8J19BVEVPRicKKyVza2VsZXRvbiAibGFscjEuY2MiICVkZWZpbmVzCislJQorZm9vOiB7fTsKK19BVEVPRgorCisKK2NwIGZvby55IGV4cG91dAorIyBCZWNhdXNlIGFuIG91dHB1dCBmaWxlIG5hbWUgY29uZmxpY3QgaXMgc3RpbGwgYSB3YXJuaW5nLCBCaXNvbiBleGl0cworIyB3aXRoIHN0YXR1cyAwLCBzbyBBVF9CSVNPTl9DSEVDSyBkb2VzIG5vdCByZWFsaXplIHRoYXQgdGhlcmUgbWF5IGJlIG5vCisjIG91dHB1dCBmaWxlIGFnYWluc3Qgd2hpY2ggdG8gY2hlY2sgdGhlIFhNTC4gIEFUX0JJU09OX0NIRUNLX05PX1hNTAorIyBhdm9pZHMgdGhhdCBwcm9ibGVtLgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoxNjg6IGJpc29uIC0tZ3JhcGg9XCJsb2NhdGlvbi5oaFwiIGZvby55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjE2OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtLWdyYXBoPSJsb2NhdGlvbi5oaCIgZm9vLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJmb28ueTogd2FybmluZzogY29uZmxpY3Rpbmcgb3V0cHV0cyB0byBmaWxlICdsb2NhdGlvbi5oaCcKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoxNjgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisjIERlZmluaW5nIFBPU0lYTFlfQ09SUkVDVCBjYXVzZXMgYmlzb24gdG8gY29tcGxhaW4gaWYgb3B0aW9ucyBhcmUKKyMgYWRkZWQgYWZ0ZXIgdGhlIGdyYW1tYXIgZmlsZSBuYW1lLCBzbyBza2lwIHRoZXNlIGNoZWNrcyBpbiB0aGF0CisjIGNhc2UuCitpZiB0ZXN0ICIkUE9TSVhMWV9DT1JSRUNUX0lTX0VYUE9SVEVEIiA9IGZhbHNlOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworCisgICMgVG8gYXZvaWQgZXhwYW5kaW5nIGl0IHJlcGVhdGVkbHksIHN0b3JlIHNwZWNpZmllZCBzdGRvdXQuCisgIDogPmV4cG91dAorCisgICMgUnVuIHdpdGggLVdlcnJvci4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoxNjg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1ncmFwaD1cImxvY2F0aW9uLmhoXCIgZm9vLnkgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tZ3JhcGg9XCJsb2NhdGlvbi5oaFwiIGZvby55IC1XZXJyb3IiICJvdXRwdXQuYXQ6MTY4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1ncmFwaD0ibG9jYXRpb24uaGgiIGZvby55IC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoxNjgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBCdWlsZCBleHBlY3RlZCBzdGRlcnIgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgIndhcm5pbmdzIGJlaW5nCisgICMgdHJlYXRlZCBhcyBlcnJvcnMiIG1lc3NhZ2UuCisgIGNhdCA+YXQtYmlzb24tY2hlY2std2FybmluZ3MgPDwnX0FURU9GJworZm9vLnk6IHdhcm5pbmc6IGNvbmZsaWN0aW5nIG91dHB1dHMgdG8gZmlsZSAnbG9jYXRpb24uaGgnCitfQVRFT0YKKworICBhdF9iaXNvbl9jaGVja19maXJzdD1gc2VkIC1uIFwKKyAgICAnLzogd2FybmluZzogL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wPWBzZWQgLW4gXAorICAgICcvY29uZmxpY3RzOiBbMC05XS4qcmVkdWNlJC97PTtxO30nIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzYAorICA6ICR7YXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wOj0xfQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdF90bXAgLWx0ICRhdF9iaXNvbl9jaGVja19maXJzdDsgdGhlbgorICAgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PSRhdF9iaXNvbl9jaGVja19maXJzdF90bXAKKyAgZmkKKyAgaWYgdGVzdCAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLWd0IDE7IHRoZW4KKyAgICBzZWQgLW4gIjEsYGV4cHIgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0IC0gMWAicCBcCisgICAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+IGV4cGVycgorICBmaQorICBlY2hvICdiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMnID4+IGV4cGVycgorCisgICMgRmluaXNoIGJ1aWxkaW5nIGV4cGVjdGVkIHN0ZGVyciBhbmQgY2hlY2suICBVbmxpa2Ugd2FybmluZ3MsCisgICMgY29tcGxhaW50cyBjYXVzZSBiaXNvbiB0byBleGl0IGVhcmx5LiAgVGh1cywgd2l0aCAtV2Vycm9yLCBiaXNvbgorICAjIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHJlcG9ydCBhbGwgd2FybmluZ3MgdGhhdCBpdCBkb2VzIHdpdGhvdXQKKyAgIyAtV2Vycm9yLCBidXQgaXQgYXQgbGVhc3QgcmVwb3J0cyBvbmUuCisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YHNlZCAtbiAnJD0nIHN0ZGVycmAKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2xhc3Q6PTF9CisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YGV4cHIgJGF0X2Jpc29uX2NoZWNrX2xhc3QgLSAxYAorICBzZWQgLW4gIiRhdF9iaXNvbl9jaGVja19maXJzdCwkYXRfYmlzb25fY2hlY2tfbGFzdCJwIFwKKyAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+PiBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoxNjg6IHNlZCAncywuKi9cXChiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnNcXClcJCxcXDEsJyBcXAorICAgICAgICAgICAgICBzdGRlcnIgMT4mMiIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgIm91dHB1dC5hdDoxNjgiCisoICRhdF9jaGVja190cmFjZTsgc2VkICdzLC4qL1woYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzXCkkLFwxLCcgXAorICAgICAgICAgICAgICBzdGRlcnIgMT4mMgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorJGF0X2RpZmYgZXhwZXJyICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTY4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC0td2FybmluZ3M9ZXJyb3IuCisgIGNwIHN0ZGVyciBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoxNjg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1ncmFwaD1cImxvY2F0aW9uLmhoXCIgZm9vLnkgLS13YXJuaW5ncz1lcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tZ3JhcGg9XCJsb2NhdGlvbi5oaFwiIGZvby55IC0td2FybmluZ3M9ZXJyb3IiICJvdXRwdXQuYXQ6MTY4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1ncmFwaD0ibG9jYXRpb24uaGgiIGZvby55IC0td2FybmluZ3M9ZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjE2OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIE5vdyBjaGVjayAtV25vbmUgYW5kIC0td2FybmluZ3M9bm9uZSBieSBtYWtpbmcgc3VyZSB0aGF0CisgICMgLVdlcnJvciBkb2Vzbid0IGNoYW5nZSB0aGUgZXhpdCBzdGF0dXMgd2hlbiAtV25vbmUgb3IKKyAgIyAtLXdhcm5pbmdzPW5vbmUgaXMgc3BlY2lmaWVkLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjE2ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLWdyYXBoPVwibG9jYXRpb24uaGhcIiBmb28ueSAtV25vbmUgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tZ3JhcGg9XCJsb2NhdGlvbi5oaFwiIGZvby55IC1Xbm9uZSAtV2Vycm9yIiAib3V0cHV0LmF0OjE2OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tZ3JhcGg9ImxvY2F0aW9uLmhoIiBmb28ueSAtV25vbmUgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTY4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjE2ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLWdyYXBoPVwibG9jYXRpb24uaGhcIiBmb28ueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tZ3JhcGg9XCJsb2NhdGlvbi5oaFwiIGZvby55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIiAib3V0cHV0LmF0OjE2OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tZ3JhcGg9ImxvY2F0aW9uLmhoIiBmb28ueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTY4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTY4OiBjYXQgZm9vLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6MTY4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBmb28ueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MTY4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF83NQorI0FUX1NUQVJUXzc2CithdF9mbl9ncm91cF9iYW5uZXIgNzYgJ291dHB1dC5hdDoxNzMnIFwKKyAgIkNvbmZsaWN0aW5nIG91dHB1dCBmaWxlczogIC1vIGZvby55IiAiICAgICAgICAgICAgIiAzCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiNzYuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworY2FzZSAiZm9vLnkiIGluCisgICovKikgbWtkaXIgYGVjaG8gImZvby55IiB8IHNlZCAncywvLiosLCdgOzsKK2VzYWMKK2NhdCA+Zm9vLnkgPDwnX0FURU9GJwogCiAlJQogZm9vOiB7fTsKIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAib3V0cHV0LmF0OjkxOiBiaXNvbiAtbyBmb28uYysrIC0tZ3JhcGg9Zm9vLmdwaCBmb28ueXkgIgotZWNobyBvdXRwdXQuYXQ6OTEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGZvby5jKysgLS1ncmFwaD1mb28uZ3BoIGZvby55eSAgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAib3V0cHV0LmF0OjkxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJvdXRwdXQuYXQ6OTE6IGxzIGZvby5jKysgZm9vLmdwaCIKLWVjaG8gb3V0cHV0LmF0OjkxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBscyBmb28uYysrIGZvby5ncGggKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAib3V0cHV0LmF0OjkxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK2NwIGZvby55IGV4cG91dAorIyBCZWNhdXNlIGFuIG91dHB1dCBmaWxlIG5hbWUgY29uZmxpY3QgaXMgc3RpbGwgYSB3YXJuaW5nLCBCaXNvbiBleGl0cworIyB3aXRoIHN0YXR1cyAwLCBzbyBBVF9CSVNPTl9DSEVDSyBkb2VzIG5vdCByZWFsaXplIHRoYXQgdGhlcmUgbWF5IGJlIG5vCisjIG91dHB1dCBmaWxlIGFnYWluc3Qgd2hpY2ggdG8gY2hlY2sgdGhlIFhNTC4gIEFUX0JJU09OX0NIRUNLX05PX1hNTAorIyBhdm9pZHMgdGhhdCBwcm9ibGVtLgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoxNzM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gZm9vLnkgZm9vLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBmb28ueSBmb28ueSIgIm91dHB1dC5hdDoxNzMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBmb28ueSBmb28ueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImZvby55OiBlcnJvcjogcmVmdXNpbmcgdG8gb3ZlcndyaXRlIHRoZSBpbnB1dCBmaWxlICdmb28ueScKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoxNzMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoxNzM6IGNhdCBmb28ueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDoxNzMiCisoICRhdF9jaGVja190cmFjZTsgY2F0IGZvby55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoxNzMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIDI4ICkgIyAyOC4gb3V0cHV0LmF0OjEwNTogT3V0cHV0IGZpbGVzOiAlc2tlbGV0b24gImxhbHIxLmNjIiAlZGVmaW5lcyAldmVyYm9zZQotICAgIGF0X3NldHVwX2xpbmU9J291dHB1dC5hdDoxMDUnCi0gICAgYXRfZGVzYz0nT3V0cHV0IGZpbGVzOiAlc2tlbGV0b24gImxhbHIxLmNjIiAlZGVmaW5lcyAldmVyYm9zZSAgJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgMjg6IE91dHB1dCBmaWxlczogJXNrZWxldG9uICJsYWxyMS5jYyIgJWRlZmluZXMgJXZlcmJvc2UgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIyOC4gb3V0cHV0LmF0OjEwNTogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF83NgorI0FUX1NUQVJUXzc3CithdF9mbl9ncm91cF9iYW5uZXIgNzcgJ291dHB1dC5hdDoyMTknIFwKKyAgIk91dHB1dCBmaWxlIG5hbWU6IFxgfiFAI1wkJV4mKigpLT1fK3t9W118XFw6Ozw+LCAuJyIgIiIgMworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjc3LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKLWNhc2UgImZvby55eSIgaW4KLSAgKi8qKSBta2RpciBgZWNobyAiZm9vLnl5IiB8IHNlZCAncywvLiosLCdgOzsKLWVzYWMKLWNhdCA+Zm9vLnl5IDw8J19BVEVPRicKLSVza2VsZXRvbiAibGFscjEuY2MiICVkZWZpbmVzICV2ZXJib3NlCisKKworIyBTa2lwIGlmIHBsYXRmb3JtIGRvZXNuJ3Qgc3VwcG9ydCBmaWxlIG5hbWUuICBGb3IgZXhhbXBsZSwgQ3lnd2luCisjIGRvZXNuJ3Qgc3VwcG9ydCBmaWxlIG5hbWVzIGNvbnRhaW5pbmcgIjoiIG9yICJcIi4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjE5OiB0b3VjaCBcIlxcXGB+IUAjXFxcJCVeJiooKS09Xyt7fVtdfFxcXFw6Ozw+LCAuJy50bXBcIiB8fCBleGl0IDc3IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjIxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyB0b3VjaCAiXGB+IUAjXCQlXiYqKCktPV8re31bXXxcXDo7PD4sIC4nLnRtcCIgfHwgZXhpdCA3NworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmdsci55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVnbHItcGFyc2VyCislY29kZSB7Cit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworaW50IHl5bGV4ICh2b2lkKTsKK30KICUlCi1mb286IHt9Oworc3RhcnQ6IHt9OwogX0FURU9GCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJvdXRwdXQuYXQ6MTA1OiBiaXNvbiAgZm9vLnl5ICIKLWVjaG8gb3V0cHV0LmF0OjEwNSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gIGZvby55eSAgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAib3V0cHV0LmF0OjEwNTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjE5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gXCJcXFxgfiFAI1xcXCQlXiYqKCktPV8re31bXXxcXFxcOjs8PiwgLicuY1wiIC0tZGVmaW5lcz1cIlxcXGB+IUAjXFxcJCVeJiooKS09Xyt7fVtdfFxcXFw6Ozw+LCAuJy5oXCIgZ2xyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6MjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vICJcYH4hQCNcJCVeJiooKS09Xyt7fVtdfFxcOjs8PiwgLicuYyIgLS1kZWZpbmVzPSJcYH4hQCNcJCVeJiooKS09Xyt7fVtdfFxcOjs8PiwgLicuaCIgZ2xyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMTk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIFwiXFxcYH4hQCNcXFwkJV4mKigpLT1fK3t9W118XFxcXDo7PD4sIC4nLmNcIiAtLWRlZmluZXM9XCJcXFxgfiFAI1xcXCQlXiYqKCktPV8re31bXXxcXFxcOjs8PiwgLicuaFwiIGdsci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjIxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyAiXGB+IUAjXCQlXiYqKCktPV8re31bXXxcXDo7PD4sIC4nLmMiIC0tZGVmaW5lcz0iXGB+IUAjXCQlXiYqKCktPV8re31bXXxcXDo7PD4sIC4nLmgiIGdsci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMTk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6MjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjE5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjIxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCi0KLSRhdF90cmFjZW9uCi0KLSRhdF90cmFjZW9mZgotZWNobyAib3V0cHV0LmF0OjEwNTogbHMgZm9vLnRhYi5jYyBmb28udGFiLmhoIGZvby5vdXRwdXQgbG9jYXRpb24uaGggc3RhY2suaGggcG9zaXRpb24uaGgiCi1lY2hvIG91dHB1dC5hdDoxMDUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGxzIGZvby50YWIuY2MgZm9vLnRhYi5oaCBmb28ub3V0cHV0IGxvY2F0aW9uLmhoIHN0YWNrLmhoIHBvc2l0aW9uLmhoICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gIm91dHB1dC5hdDoxMDU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMTk6IGJpc29uIC1vIFwiXFxcYH4hQCNcXFwkJV4mKigpLT1fK3t9W118XFxcXDo7PD4sIC4nLmNcIiAtLWRlZmluZXM9XCJcXFxgfiFAI1xcXCQlXiYqKCktPV8re31bXXxcXFxcOjs8PiwgLicuaFwiIGdsci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjIxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyAiXGB+IUAjXCQlXiYqKCktPV8re31bXXxcXDo7PD4sIC4nLmMiIC0tZGVmaW5lcz0iXGB+IUAjXCQlXiYqKCktPV8re31bXXxcXDo7PD4sIC4nLmgiIGdsci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMTk6IGxzIFwiXFxcYH4hQCNcXFwkJV4mKigpLT1fK3t9W118XFxcXDo7PD4sIC4nLmNcIiBcIlxcXGB+IUAjXFxcJCVeJiooKS09Xyt7fVtdfFxcXFw6Ozw+LCAuJy5oXCIiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6MjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGxzICJcYH4hQCNcJCVeJiooKS09Xyt7fVtdfFxcOjs8PiwgLicuYyIgIlxgfiFAI1wkJV4mKigpLT1fK3t9W118XFw6Ozw+LCAuJy5oIgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIDI5ICkgIyAyOS4gb3V0cHV0LmF0OjEwOTogT3V0cHV0IGZpbGVzOiAlc2tlbGV0b24gImxhbHIxLmNjIiAlZGVmaW5lcyAldmVyYm9zZQotICAgIGF0X3NldHVwX2xpbmU9J291dHB1dC5hdDoxMDknCi0gICAgYXRfZGVzYz0nT3V0cHV0IGZpbGVzOiAlc2tlbGV0b24gImxhbHIxLmNjIiAlZGVmaW5lcyAldmVyYm9zZSAgJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgMjk6IE91dHB1dCBmaWxlczogJXNrZWxldG9uICJsYWxyMS5jYyIgJWRlZmluZXMgJXZlcmJvc2UgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIyOS4gb3V0cHV0LmF0OjEwOTogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMTk6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJvdXRwdXQuYXQ6MjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotY2FzZSAic3ViZGlyL2Zvby55eSIgaW4KLSAgKi8qKSBta2RpciBgZWNobyAic3ViZGlyL2Zvby55eSIgfCBzZWQgJ3MsLy4qLCwnYDs7Ci1lc2FjCi1jYXQgPnN1YmRpci9mb28ueXkgPDwnX0FURU9GJwotJXNrZWxldG9uICJsYWxyMS5jYyIgJWRlZmluZXMgJXZlcmJvc2UKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjE5OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgLWMgLW8gZ2xyLm8gLWMgXCJcXFxgfiFAI1xcXCQlXiYqKCktPV8re31bXXxcXFxcOjs8PiwgLicuY1wiICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDoyMTkiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTIC1jIC1vIGdsci5vIC1jICJcYH4hQCNcJCVeJiooKS09Xyt7fVtdfFxcOjs8PiwgLicuYyIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5jeHgueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislc2tlbGV0b24gImxhbHIxLmNjIgorJWNvZGUgeyBpbnQgeXlsZXggKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUqKTsgfQogJSUKLWZvbzoge307CitzdGFydDoge307CiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gIm91dHB1dC5hdDoxMDk6IGJpc29uICBzdWJkaXIvZm9vLnl5ICIKLWVjaG8gb3V0cHV0LmF0OjEwOSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gIHN1YmRpci9mb28ueXkgICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gIm91dHB1dC5hdDoxMDk6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIxOTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIFwiXFxcYH4hQCNcXFwkJV4mKigpLT1fK3t9W118XFxcXDo7PD4sIC4nLmNcIiAtLWRlZmluZXM9XCJcXFxgfiFAI1xcXCQlXiYqKCktPV8re31bXXxcXFxcOjs8PiwgLicuaFwiIGN4eC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjIxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyAiXGB+IUAjXCQlXiYqKCktPV8re31bXXxcXDo7PD4sIC4nLmMiIC0tZGVmaW5lcz0iXGB+IUAjXCQlXiYqKCktPV8re31bXXxcXDo7PD4sIC4nLmgiIGN4eC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjE5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBcIlxcXGB+IUAjXFxcJCVeJiooKS09Xyt7fVtdfFxcXFw6Ozw+LCAuJy5jXCIgLS1kZWZpbmVzPVwiXFxcYH4hQCNcXFwkJV4mKigpLT1fK3t9W118XFxcXDo7PD4sIC4nLmhcIiBjeHgueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDoyMTkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gIlxgfiFAI1wkJV4mKigpLT1fK3t9W118XFw6Ozw+LCAuJy5jIiAtLWRlZmluZXM9IlxgfiFAI1wkJV4mKigpLT1fK3t9W118XFw6Ozw+LCAuJy5oIiBjeHgueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjE5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjIxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIxOTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDoyMTkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gIm91dHB1dC5hdDoxMDk6IGxzIGZvby50YWIuY2MgZm9vLnRhYi5oaCBmb28ub3V0cHV0IGxvY2F0aW9uLmhoIHN0YWNrLmhoIHBvc2l0aW9uLmhoIgotZWNobyBvdXRwdXQuYXQ6MTA5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBscyBmb28udGFiLmNjIGZvby50YWIuaGggZm9vLm91dHB1dCBsb2NhdGlvbi5oaCBzdGFjay5oaCBwb3NpdGlvbi5oaCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJvdXRwdXQuYXQ6MTA5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KLQotIyBBbHNvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbmNsdWRlcyBkbyBub3QgcmVmZXIgdG8gdGhlIHN1YmRpcmVjdG9yeS4KLSRhdF90cmFjZW9mZgotZWNobyAib3V0cHV0LmF0OjEwOTogZ3JlcCAnaW5jbHVkZSAuc3ViZGlyLycgZm9vLnRhYi5jYyIKLWVjaG8gb3V0cHV0LmF0OjEwOSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgZ3JlcCAnaW5jbHVkZSAuc3ViZGlyLycgZm9vLnRhYi5jYyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJvdXRwdXQuYXQ6MTA5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJvdXRwdXQuYXQ6MTA5OiBncmVwICdpbmNsdWRlIC5zdWJkaXIvJyBmb28udGFiLmhoIgotZWNobyBvdXRwdXQuYXQ6MTA5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBncmVwICdpbmNsdWRlIC5zdWJkaXIvJyBmb28udGFiLmhoICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gIm91dHB1dC5hdDoxMDk6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMTk6IGJpc29uIC1vIFwiXFxcYH4hQCNcXFwkJV4mKigpLT1fK3t9W118XFxcXDo7PD4sIC4nLmNcIiAtLWRlZmluZXM9XCJcXFxgfiFAI1xcXCQlXiYqKCktPV8re31bXXxcXFxcOjs8PiwgLicuaFwiIGN4eC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjIxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyAiXGB+IUAjXCQlXiYqKCktPV8re31bXXxcXDo7PD4sIC4nLmMiIC0tZGVmaW5lcz0iXGB+IUAjXCQlXiYqKCktPV8re31bXXxcXDo7PD4sIC4nLmgiIGN4eC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMTk6IGxzIFwiXFxcYH4hQCNcXFwkJV4mKigpLT1fK3t9W118XFxcXDo7PD4sIC4nLmNcIiBcIlxcXGB+IUAjXFxcJCVeJiooKS09Xyt7fVtdfFxcXFw6Ozw+LCAuJy5oXCIiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6MjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGxzICJcYH4hQCNcJCVeJiooKS09Xyt7fVtdfFxcOjs8PiwgLicuYyIgIlxgfiFAI1wkJV4mKigpLT1fK3t9W118XFw6Ozw+LCAuJy5oIgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIDMwICkgIyAzMC4gb3V0cHV0LmF0OjExNDogT3V0cHV0IGZpbGVzOiAlc2tlbGV0b24gImxhbHIxLmNjIiAlZGVmaW5lcyAldmVyYm9zZSAtbyBzdWJkaXIvZm9vLmNjCi0gICAgYXRfc2V0dXBfbGluZT0nb3V0cHV0LmF0OjExNCcKLSAgICBhdF9kZXNjPSdPdXRwdXQgZmlsZXM6ICVza2VsZXRvbiAibGFscjEuY2MiICVkZWZpbmVzICV2ZXJib3NlIC1vIHN1YmRpci9mb28uY2MgJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgMzA6IE91dHB1dCBmaWxlczogJXNrZWxldG9uICJsYWxyMS5jYyIgJWRlZmluZXMgJXZlcmJvc2UgLW8gc3ViZGlyL2Zvby5jYyAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiMzAuIG91dHB1dC5hdDoxMTQ6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KIAotY2FzZSAic3ViZGlyL2Zvby55eSIgaW4KLSAgKi8qKSBta2RpciBgZWNobyAic3ViZGlyL2Zvby55eSIgfCBzZWQgJ3MsLy4qLCwnYDs7Ci1lc2FjCi1jYXQgPnN1YmRpci9mb28ueXkgPDwnX0FURU9GJwotJXNrZWxldG9uICJsYWxyMS5jYyIgJWRlZmluZXMgJXZlcmJvc2UKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjE5OiBcJEJJU09OX0NYWF9XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NYWF9XT1JLUyIgIm91dHB1dC5hdDoyMTkiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NYWF9XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjE5OiBcJENYWCBcJENYWEZMQUdTIFwkQ1BQRkxBR1MgLWMgLW8gY3h4Lm8gLWMgXCJcXFxgfiFAI1xcXCQlXiYqKCktPV8re31bXXxcXFxcOjs8PiwgLicuY1wiICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDoyMTkiCisoICRhdF9jaGVja190cmFjZTsgJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTIC1jIC1vIGN4eC5vIC1jICJcYH4hQCNcJCVeJiooKS09Xyt7fVtdfFxcOjs8PiwgLicuYyIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzc3CisjQVRfU1RBUlRfNzgKK2F0X2ZuX2dyb3VwX2Jhbm5lciA3OCAnb3V0cHV0LmF0OjIyNicgXAorICAiT3V0cHV0IGZpbGUgbmFtZTogKCIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDMKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI3OC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworIyBTa2lwIGlmIHBsYXRmb3JtIGRvZXNuJ3Qgc3VwcG9ydCBmaWxlIG5hbWUuICBGb3IgZXhhbXBsZSwgQ3lnd2luCisjIGRvZXNuJ3Qgc3VwcG9ydCBmaWxlIG5hbWVzIGNvbnRhaW5pbmcgIjoiIG9yICJcIi4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI2OiB0b3VjaCBcIigudG1wXCIgfHwgZXhpdCA3NyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDoyMjYiCisoICRhdF9jaGVja190cmFjZTsgdG91Y2ggIigudG1wIiB8fCBleGl0IDc3CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+Z2xyLnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWdsci1wYXJzZXIKKyVjb2RlIHsKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CitpbnQgeXlsZXggKHZvaWQpOworfQogJSUKLWZvbzoge307CitzdGFydDoge307CiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gIm91dHB1dC5hdDoxMTQ6IGJpc29uIC1vIHN1YmRpci9mb28uY2Mgc3ViZGlyL2Zvby55eSAiCi1lY2hvIG91dHB1dC5hdDoxMTQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIHN1YmRpci9mb28uY2Mgc3ViZGlyL2Zvby55eSAgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAib3V0cHV0LmF0OjExNDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gXCIoLmNcIiAtLWRlZmluZXM9XCIoLmhcIiBnbHIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgIm91dHB1dC5hdDoyMjYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gIiguYyIgLS1kZWZpbmVzPSIoLmgiIGdsci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBcIiguY1wiIC0tZGVmaW5lcz1cIiguaFwiIGdsci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIFwiKC5jXCIgLS1kZWZpbmVzPVwiKC5oXCIgZ2xyLnkiICJvdXRwdXQuYXQ6MjI2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vICIoLmMiIC0tZGVmaW5lcz0iKC5oIiBnbHIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI2OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjIyNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyNjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDoyMjYiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gIm91dHB1dC5hdDoxMTQ6IGxzIHN1YmRpci9mb28uY2Mgc3ViZGlyL2Zvby5oaCBzdWJkaXIvZm9vLm91dHB1dCBzdWJkaXIvbG9jYXRpb24uaGggc3ViZGlyL3N0YWNrLmhoIHN1YmRpci9wb3NpdGlvbi5oaCIKLWVjaG8gb3V0cHV0LmF0OjExNCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgbHMgc3ViZGlyL2Zvby5jYyBzdWJkaXIvZm9vLmhoIHN1YmRpci9mb28ub3V0cHV0IHN1YmRpci9sb2NhdGlvbi5oaCBzdWJkaXIvc3RhY2suaGggc3ViZGlyL3Bvc2l0aW9uLmhoICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gIm91dHB1dC5hdDoxMTQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0jIEFsc28gbWFrZSBzdXJlIHRoYXQgdGhlIGluY2x1ZGVzIGRvIG5vdCByZWZlciB0byB0aGUgc3ViZGlyZWN0b3J5LgotJGF0X3RyYWNlb2ZmCi1lY2hvICJvdXRwdXQuYXQ6MTE0OiBncmVwICdpbmNsdWRlIC5zdWJkaXIvJyBzdWJkaXIvZm9vLmNjIgotZWNobyBvdXRwdXQuYXQ6MTE0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBncmVwICdpbmNsdWRlIC5zdWJkaXIvJyBzdWJkaXIvZm9vLmNjICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gIm91dHB1dC5hdDoxMTQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gIm91dHB1dC5hdDoxMTQ6IGdyZXAgJ2luY2x1ZGUgLnN1YmRpci8nIHN1YmRpci9mb28uaGgiCi1lY2hvIG91dHB1dC5hdDoxMTQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGdyZXAgJ2luY2x1ZGUgLnN1YmRpci8nIHN1YmRpci9mb28uaGggKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAib3V0cHV0LmF0OjExNDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyNjogYmlzb24gLW8gXCIoLmNcIiAtLWRlZmluZXM9XCIoLmhcIiBnbHIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDoyMjYiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gIiguYyIgLS1kZWZpbmVzPSIoLmgiIGdsci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjY6IGxzIFwiKC5jXCIgXCIoLmhcIiIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDoyMjYiCisoICRhdF9jaGVja190cmFjZTsgbHMgIiguYyIgIiguaCIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjY6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJvdXRwdXQuYXQ6MjI2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjY6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyAtYyAtbyBnbHIubyAtYyBcIiguY1wiICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTIC1jIC1vIGdsci5vIC1jIFwiKC5jXCIgIiAib3V0cHV0LmF0OjIyNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgLW8gZ2xyLm8gLWMgIiguYyIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgYmFubmVyLTMgKSAjIEJhbm5lciAzLiBzZXRzLmF0OjU5Ci0gICAgY2F0IDw8XF9BVEVPRgogCi1HcmFtbWFyIFNldHMgKEZpcnN0cyBldGMuKS4KK2NhdCA+Y3h4LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAorJXNrZWxldG9uICJsYWxyMS5jYyIKKyVjb2RlIHsgaW50IHl5bGV4ICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlKik7IH0KKyUlCitzdGFydDoge307CiBfQVRFT0YKLSAgICA7OwogCi0gIDMxICkgIyAzMS4gc2V0cy5hdDo2NjogTnVsbGFibGUKLSAgICBhdF9zZXR1cF9saW5lPSdzZXRzLmF0OjY2JwotICAgIGF0X2Rlc2M9J051bGxhYmxlJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgMzE6IE51bGxhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIzMS4gc2V0cy5hdDo2NjogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBcIiguY1wiIC0tZGVmaW5lcz1cIiguaFwiIGN4eC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAib3V0cHV0LmF0OjIyNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyAiKC5jIiAtLWRlZmluZXM9IiguaCIgY3h4LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBcIiguY1wiIC0tZGVmaW5lcz1cIiguaFwiIGN4eC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIFwiKC5jXCIgLS1kZWZpbmVzPVwiKC5oXCIgY3h4LnkiICJvdXRwdXQuYXQ6MjI2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vICIoLmMiIC0tZGVmaW5lcz0iKC5oIiBjeHgueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI2OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjIyNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyNjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDoyMjYiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjY6IGJpc29uIC1vIFwiKC5jXCIgLS1kZWZpbmVzPVwiKC5oXCIgY3h4LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6MjI2IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vICIoLmMiIC0tZGVmaW5lcz0iKC5oIiBjeHgueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyNjogbHMgXCIoLmNcIiBcIiguaFwiIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjIyNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBscyAiKC5jIiAiKC5oIgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI2OiBcJEJJU09OX0NYWF9XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NYWF9XT1JLUyIgIm91dHB1dC5hdDoyMjYiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NYWF9XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI2OiBcJENYWCBcJENYWEZMQUdTIFwkQ1BQRkxBR1MgLWMgLW8gY3h4Lm8gLWMgXCIoLmNcIiAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAtYyAtbyBjeHgubyAtYyBcIiguY1wiICIgIm91dHB1dC5hdDoyMjYiCisoICRhdF9jaGVja190cmFjZTsgJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTIC1jIC1vIGN4eC5vIC1jICIoLmMiCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF83OAorI0FUX1NUQVJUXzc5CithdF9mbl9ncm91cF9iYW5uZXIgNzkgJ291dHB1dC5hdDoyMjcnIFwKKyAgIk91dHB1dCBmaWxlIG5hbWU6ICkiICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAzCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiNzkuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisKKyMgU2tpcCBpZiBwbGF0Zm9ybSBkb2Vzbid0IHN1cHBvcnQgZmlsZSBuYW1lLiAgRm9yIGV4YW1wbGUsIEN5Z3dpbgorIyBkb2Vzbid0IHN1cHBvcnQgZmlsZSBuYW1lcyBjb250YWluaW5nICI6IiBvciAiXCIuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyNzogdG91Y2ggXCIpLnRtcFwiIHx8IGV4aXQgNzciCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6MjI3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHRvdWNoICIpLnRtcCIgfHwgZXhpdCA3NworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmdsci55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVnbHItcGFyc2VyCislY29kZSB7Cit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworaW50IHl5bGV4ICh2b2lkKTsKK30KKyUlCitzdGFydDoge307CitfQVRFT0YKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBcIikuY1wiIC0tZGVmaW5lcz1cIikuaFwiIGdsci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAib3V0cHV0LmF0OjIyNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyAiKS5jIiAtLWRlZmluZXM9IikuaCIgZ2xyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBcIikuY1wiIC0tZGVmaW5lcz1cIikuaFwiIGdsci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIFwiKS5jXCIgLS1kZWZpbmVzPVwiKS5oXCIgZ2xyLnkiICJvdXRwdXQuYXQ6MjI3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vICIpLmMiIC0tZGVmaW5lcz0iKS5oIiBnbHIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjIyNyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyNzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDoyMjciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjc6IGJpc29uIC1vIFwiKS5jXCIgLS1kZWZpbmVzPVwiKS5oXCIgZ2xyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6MjI3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vICIpLmMiIC0tZGVmaW5lcz0iKS5oIiBnbHIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyNzogbHMgXCIpLmNcIiBcIikuaFwiIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjIyNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBscyAiKS5jIiAiKS5oIgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyNzogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgIm91dHB1dC5hdDoyMjciCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyNzogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIC1jIC1vIGdsci5vIC1jIFwiKS5jXCIgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgLW8gZ2xyLm8gLWMgXCIpLmNcIiAiICJvdXRwdXQuYXQ6MjI3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyAtbyBnbHIubyAtYyAiKS5jIgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCitjYXQgPmN4eC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVza2VsZXRvbiAibGFscjEuY2MiCislY29kZSB7IGludCB5eWxleCAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSopOyB9CislJQorc3RhcnQ6IHt9OworX0FURU9GCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gXCIpLmNcIiAtLWRlZmluZXM9XCIpLmhcIiBjeHgueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgIm91dHB1dC5hdDoyMjciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gIikuYyIgLS1kZWZpbmVzPSIpLmgiIGN4eC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyNzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gXCIpLmNcIiAtLWRlZmluZXM9XCIpLmhcIiBjeHgueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBcIikuY1wiIC0tZGVmaW5lcz1cIikuaFwiIGN4eC55IiAib3V0cHV0LmF0OjIyNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyAiKS5jIiAtLWRlZmluZXM9IikuaCIgY3h4LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyNzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDoyMjciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6MjI3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI3OiBiaXNvbiAtbyBcIikuY1wiIC0tZGVmaW5lcz1cIikuaFwiIGN4eC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjIyNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyAiKS5jIiAtLWRlZmluZXM9IikuaCIgY3h4LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjc6IGxzIFwiKS5jXCIgXCIpLmhcIiIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDoyMjciCisoICRhdF9jaGVja190cmFjZTsgbHMgIikuYyIgIikuaCIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyNzogXCRCSVNPTl9DWFhfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DWFhfV09SS1MiICJvdXRwdXQuYXQ6MjI3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DWFhfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyNzogXCRDWFggXCRDWFhGTEFHUyBcJENQUEZMQUdTIC1jIC1vIGN4eC5vIC1jIFwiKS5jXCIgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgLWMgLW8gY3h4Lm8gLWMgXCIpLmNcIiAiICJvdXRwdXQuYXQ6MjI3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAtYyAtbyBjeHgubyAtYyAiKS5jIgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfNzkKKyNBVF9TVEFSVF84MAorYXRfZm5fZ3JvdXBfYmFubmVyIDgwICdvdXRwdXQuYXQ6MjI4JyBcCisgICJPdXRwdXQgZmlsZSBuYW1lOiAjIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgMworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjgwLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworCisjIFNraXAgaWYgcGxhdGZvcm0gZG9lc24ndCBzdXBwb3J0IGZpbGUgbmFtZS4gIEZvciBleGFtcGxlLCBDeWd3aW4KKyMgZG9lc24ndCBzdXBwb3J0IGZpbGUgbmFtZXMgY29udGFpbmluZyAiOiIgb3IgIlwiLgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjg6IHRvdWNoIFwiIy50bXBcIiB8fCBleGl0IDc3IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjIyOCIKKyggJGF0X2NoZWNrX3RyYWNlOyB0b3VjaCAiIy50bXAiIHx8IGV4aXQgNzcKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5nbHIueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislZ2xyLXBhcnNlcgorJWNvZGUgewordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKK2ludCB5eWxleCAodm9pZCk7Cit9CislJQorc3RhcnQ6IHt9OworX0FURU9GCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gXCIjLmNcIiAtLWRlZmluZXM9XCIjLmhcIiBnbHIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgIm91dHB1dC5hdDoyMjgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gIiMuYyIgLS1kZWZpbmVzPSIjLmgiIGdsci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gXCIjLmNcIiAtLWRlZmluZXM9XCIjLmhcIiBnbHIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBcIiMuY1wiIC0tZGVmaW5lcz1cIiMuaFwiIGdsci55IiAib3V0cHV0LmF0OjIyOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyAiIy5jIiAtLWRlZmluZXM9IiMuaCIgZ2xyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDoyMjgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6MjI4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI4OiBiaXNvbiAtbyBcIiMuY1wiIC0tZGVmaW5lcz1cIiMuaFwiIGdsci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjIyOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyAiIy5jIiAtLWRlZmluZXM9IiMuaCIgZ2xyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjg6IGxzIFwiIy5jXCIgXCIjLmhcIiIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDoyMjgiCisoICRhdF9jaGVja190cmFjZTsgbHMgIiMuYyIgIiMuaCIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjg6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJvdXRwdXQuYXQ6MjI4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjg6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyAtYyAtbyBnbHIubyAtYyBcIiMuY1wiICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTIC1jIC1vIGdsci5vIC1jIFwiIy5jXCIgIiAib3V0cHV0LmF0OjIyOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgLW8gZ2xyLm8gLWMgIiMuYyIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5jeHgueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislc2tlbGV0b24gImxhbHIxLmNjIgorJWNvZGUgeyBpbnQgeXlsZXggKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUqKTsgfQorJSUKK3N0YXJ0OiB7fTsKK19BVEVPRgorCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIFwiIy5jXCIgLS1kZWZpbmVzPVwiIy5oXCIgY3h4LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJvdXRwdXQuYXQ6MjI4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vICIjLmMiIC0tZGVmaW5lcz0iIy5oIiBjeHgueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIFwiIy5jXCIgLS1kZWZpbmVzPVwiIy5oXCIgY3h4LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gXCIjLmNcIiAtLWRlZmluZXM9XCIjLmhcIiBjeHgueSIgIm91dHB1dC5hdDoyMjgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gIiMuYyIgLS1kZWZpbmVzPSIjLmgiIGN4eC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6MjI4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjIyOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyODogYmlzb24gLW8gXCIjLmNcIiAtLWRlZmluZXM9XCIjLmhcIiBjeHgueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDoyMjgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gIiMuYyIgLS1kZWZpbmVzPSIjLmgiIGN4eC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI4OiBscyBcIiMuY1wiIFwiIy5oXCIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6MjI4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGxzICIjLmMiICIjLmgiCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjg6IFwkQklTT05fQ1hYX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ1hYX1dPUktTIiAib3V0cHV0LmF0OjIyOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ1hYX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjg6IFwkQ1hYIFwkQ1hYRkxBR1MgXCRDUFBGTEFHUyAtYyAtbyBjeHgubyAtYyBcIiMuY1wiICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTIC1jIC1vIGN4eC5vIC1jIFwiIy5jXCIgIiAib3V0cHV0LmF0OjIyOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgLWMgLW8gY3h4Lm8gLWMgIiMuYyIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzgwCisjQVRfU1RBUlRfODEKK2F0X2ZuX2dyb3VwX2Jhbm5lciA4MSAnb3V0cHV0LmF0OjIyOScgXAorICAiT3V0cHV0IGZpbGUgbmFtZTogQEAiICIgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDMKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI4MS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworIyBTa2lwIGlmIHBsYXRmb3JtIGRvZXNuJ3Qgc3VwcG9ydCBmaWxlIG5hbWUuICBGb3IgZXhhbXBsZSwgQ3lnd2luCisjIGRvZXNuJ3Qgc3VwcG9ydCBmaWxlIG5hbWVzIGNvbnRhaW5pbmcgIjoiIG9yICJcIi4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI5OiB0b3VjaCBcIkBALnRtcFwiIHx8IGV4aXQgNzciCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6MjI5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHRvdWNoICJAQC50bXAiIHx8IGV4aXQgNzcKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5nbHIueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislZ2xyLXBhcnNlcgorJWNvZGUgewordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKK2ludCB5eWxleCAodm9pZCk7Cit9CislJQorc3RhcnQ6IHt9OworX0FURU9GCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gXCJAQC5jXCIgLS1kZWZpbmVzPVwiQEAuaFwiIGdsci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAib3V0cHV0LmF0OjIyOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyAiQEAuYyIgLS1kZWZpbmVzPSJAQC5oIiBnbHIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIFwiQEAuY1wiIC0tZGVmaW5lcz1cIkBALmhcIiBnbHIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBcIkBALmNcIiAtLWRlZmluZXM9XCJAQC5oXCIgZ2xyLnkiICJvdXRwdXQuYXQ6MjI5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vICJAQC5jIiAtLWRlZmluZXM9IkBALmgiIGdsci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6MjI5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjIyOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyOTogYmlzb24gLW8gXCJAQC5jXCIgLS1kZWZpbmVzPVwiQEAuaFwiIGdsci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjIyOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyAiQEAuYyIgLS1kZWZpbmVzPSJAQC5oIiBnbHIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyOTogbHMgXCJAQC5jXCIgXCJAQC5oXCIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6MjI5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGxzICJAQC5jIiAiQEAuaCIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjk6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJvdXRwdXQuYXQ6MjI5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjk6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyAtYyAtbyBnbHIubyAtYyBcIkBALmNcIiAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyAtbyBnbHIubyAtYyBcIkBALmNcIiAiICJvdXRwdXQuYXQ6MjI5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyAtbyBnbHIubyAtYyAiQEAuYyIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5jeHgueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislc2tlbGV0b24gImxhbHIxLmNjIgorJWNvZGUgeyBpbnQgeXlsZXggKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUqKTsgfQorJSUKK3N0YXJ0OiB7fTsKK19BVEVPRgorCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyOTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIFwiQEAuY1wiIC0tZGVmaW5lcz1cIkBALmhcIiBjeHgueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgIm91dHB1dC5hdDoyMjkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gIkBALmMiIC0tZGVmaW5lcz0iQEAuaCIgY3h4LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBcIkBALmNcIiAtLWRlZmluZXM9XCJAQC5oXCIgY3h4LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gXCJAQC5jXCIgLS1kZWZpbmVzPVwiQEAuaFwiIGN4eC55IiAib3V0cHV0LmF0OjIyOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyAiQEAuYyIgLS1kZWZpbmVzPSJAQC5oIiBjeHgueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjIyOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyOTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDoyMjkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjk6IGJpc29uIC1vIFwiQEAuY1wiIC0tZGVmaW5lcz1cIkBALmhcIiBjeHgueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDoyMjkiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gIkBALmMiIC0tZGVmaW5lcz0iQEAuaCIgY3h4LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjk6IGxzIFwiQEAuY1wiIFwiQEAuaFwiIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjIyOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBscyAiQEAuYyIgIkBALmgiCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIyOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjk6IFwkQklTT05fQ1hYX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ1hYX1dPUktTIiAib3V0cHV0LmF0OjIyOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ1hYX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjI5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjk6IFwkQ1hYIFwkQ1hYRkxBR1MgXCRDUFBGTEFHUyAtYyAtbyBjeHgubyAtYyBcIkBALmNcIiAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAtYyAtbyBjeHgubyAtYyBcIkBALmNcIiAiICJvdXRwdXQuYXQ6MjI5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAtYyAtbyBjeHgubyAtYyAiQEAuYyIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzgxCisjQVRfU1RBUlRfODIKK2F0X2ZuX2dyb3VwX2Jhbm5lciA4MiAnb3V0cHV0LmF0OjIzMCcgXAorICAiT3V0cHV0IGZpbGUgbmFtZTogQHsiICIgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDMKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI4Mi4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworIyBTa2lwIGlmIHBsYXRmb3JtIGRvZXNuJ3Qgc3VwcG9ydCBmaWxlIG5hbWUuICBGb3IgZXhhbXBsZSwgQ3lnd2luCisjIGRvZXNuJ3Qgc3VwcG9ydCBmaWxlIG5hbWVzIGNvbnRhaW5pbmcgIjoiIG9yICJcIi4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMwOiB0b3VjaCBcIkB7LnRtcFwiIHx8IGV4aXQgNzciCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6MjMwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHRvdWNoICJAey50bXAiIHx8IGV4aXQgNzcKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5nbHIueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislZ2xyLXBhcnNlcgorJWNvZGUgewordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKK2ludCB5eWxleCAodm9pZCk7Cit9CislJQorc3RhcnQ6IHt9OworX0FURU9GCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gXCJAey5jXCIgLS1kZWZpbmVzPVwiQHsuaFwiIGdsci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAib3V0cHV0LmF0OjIzMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyAiQHsuYyIgLS1kZWZpbmVzPSJAey5oIiBnbHIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIFwiQHsuY1wiIC0tZGVmaW5lcz1cIkB7LmhcIiBnbHIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBcIkB7LmNcIiAtLWRlZmluZXM9XCJAey5oXCIgZ2xyLnkiICJvdXRwdXQuYXQ6MjMwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vICJAey5jIiAtLWRlZmluZXM9IkB7LmgiIGdsci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6MjMwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjIzMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMDogYmlzb24gLW8gXCJAey5jXCIgLS1kZWZpbmVzPVwiQHsuaFwiIGdsci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjIzMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyAiQHsuYyIgLS1kZWZpbmVzPSJAey5oIiBnbHIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMDogbHMgXCJAey5jXCIgXCJAey5oXCIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6MjMwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGxzICJAey5jIiAiQHsuaCIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzA6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJvdXRwdXQuYXQ6MjMwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzA6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyAtYyAtbyBnbHIubyAtYyBcIkB7LmNcIiAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyAtbyBnbHIubyAtYyBcIkB7LmNcIiAiICJvdXRwdXQuYXQ6MjMwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyAtbyBnbHIubyAtYyAiQHsuYyIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5jeHgueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislc2tlbGV0b24gImxhbHIxLmNjIgorJWNvZGUgeyBpbnQgeXlsZXggKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUqKTsgfQorJSUKK3N0YXJ0OiB7fTsKK19BVEVPRgorCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIFwiQHsuY1wiIC0tZGVmaW5lcz1cIkB7LmhcIiBjeHgueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgIm91dHB1dC5hdDoyMzAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gIkB7LmMiIC0tZGVmaW5lcz0iQHsuaCIgY3h4LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBcIkB7LmNcIiAtLWRlZmluZXM9XCJAey5oXCIgY3h4LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gXCJAey5jXCIgLS1kZWZpbmVzPVwiQHsuaFwiIGN4eC55IiAib3V0cHV0LmF0OjIzMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyAiQHsuYyIgLS1kZWZpbmVzPSJAey5oIiBjeHgueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjIzMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDoyMzAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzA6IGJpc29uIC1vIFwiQHsuY1wiIC0tZGVmaW5lcz1cIkB7LmhcIiBjeHgueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDoyMzAiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gIkB7LmMiIC0tZGVmaW5lcz0iQHsuaCIgY3h4LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzA6IGxzIFwiQHsuY1wiIFwiQHsuaFwiIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjIzMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBscyAiQHsuYyIgIkB7LmgiCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzA6IFwkQklTT05fQ1hYX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ1hYX1dPUktTIiAib3V0cHV0LmF0OjIzMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ1hYX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzA6IFwkQ1hYIFwkQ1hYRkxBR1MgXCRDUFBGTEFHUyAtYyAtbyBjeHgubyAtYyBcIkB7LmNcIiAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAtYyAtbyBjeHgubyAtYyBcIkB7LmNcIiAiICJvdXRwdXQuYXQ6MjMwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAtYyAtbyBjeHgubyAtYyAiQHsuYyIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzgyCisjQVRfU1RBUlRfODMKK2F0X2ZuX2dyb3VwX2Jhbm5lciA4MyAnb3V0cHV0LmF0OjIzMScgXAorICAiT3V0cHV0IGZpbGUgbmFtZTogQH0iICIgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDMKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI4My4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworIyBTa2lwIGlmIHBsYXRmb3JtIGRvZXNuJ3Qgc3VwcG9ydCBmaWxlIG5hbWUuICBGb3IgZXhhbXBsZSwgQ3lnd2luCisjIGRvZXNuJ3Qgc3VwcG9ydCBmaWxlIG5hbWVzIGNvbnRhaW5pbmcgIjoiIG9yICJcIi4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMxOiB0b3VjaCBcIkB9LnRtcFwiIHx8IGV4aXQgNzciCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6MjMxIgorKCAkYXRfY2hlY2tfdHJhY2U7IHRvdWNoICJAfS50bXAiIHx8IGV4aXQgNzcKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5nbHIueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislZ2xyLXBhcnNlcgorJWNvZGUgewordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKK2ludCB5eWxleCAodm9pZCk7Cit9CislJQorc3RhcnQ6IHt9OworX0FURU9GCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gXCJAfS5jXCIgLS1kZWZpbmVzPVwiQH0uaFwiIGdsci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAib3V0cHV0LmF0OjIzMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyAiQH0uYyIgLS1kZWZpbmVzPSJAfS5oIiBnbHIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIFwiQH0uY1wiIC0tZGVmaW5lcz1cIkB9LmhcIiBnbHIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBcIkB9LmNcIiAtLWRlZmluZXM9XCJAfS5oXCIgZ2xyLnkiICJvdXRwdXQuYXQ6MjMxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vICJAfS5jIiAtLWRlZmluZXM9IkB9LmgiIGdsci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6MjMxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMxOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjIzMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMTogYmlzb24gLW8gXCJAfS5jXCIgLS1kZWZpbmVzPVwiQH0uaFwiIGdsci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjIzMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyAiQH0uYyIgLS1kZWZpbmVzPSJAfS5oIiBnbHIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMTogbHMgXCJAfS5jXCIgXCJAfS5oXCIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6MjMxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGxzICJAfS5jIiAiQH0uaCIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzE6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJvdXRwdXQuYXQ6MjMxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzE6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyAtYyAtbyBnbHIubyAtYyBcIkB9LmNcIiAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyAtbyBnbHIubyAtYyBcIkB9LmNcIiAiICJvdXRwdXQuYXQ6MjMxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyAtbyBnbHIubyAtYyAiQH0uYyIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5jeHgueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislc2tlbGV0b24gImxhbHIxLmNjIgorJWNvZGUgeyBpbnQgeXlsZXggKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUqKTsgfQorJSUKK3N0YXJ0OiB7fTsKK19BVEVPRgorCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIFwiQH0uY1wiIC0tZGVmaW5lcz1cIkB9LmhcIiBjeHgueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgIm91dHB1dC5hdDoyMzEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gIkB9LmMiIC0tZGVmaW5lcz0iQH0uaCIgY3h4LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBcIkB9LmNcIiAtLWRlZmluZXM9XCJAfS5oXCIgY3h4LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gXCJAfS5jXCIgLS1kZWZpbmVzPVwiQH0uaFwiIGN4eC55IiAib3V0cHV0LmF0OjIzMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyAiQH0uYyIgLS1kZWZpbmVzPSJAfS5oIiBjeHgueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMxOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjIzMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDoyMzEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzE6IGJpc29uIC1vIFwiQH0uY1wiIC0tZGVmaW5lcz1cIkB9LmhcIiBjeHgueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDoyMzEiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gIkB9LmMiIC0tZGVmaW5lcz0iQH0uaCIgY3h4LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzE6IGxzIFwiQH0uY1wiIFwiQH0uaFwiIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjIzMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBscyAiQH0uYyIgIkB9LmgiCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzE6IFwkQklTT05fQ1hYX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ1hYX1dPUktTIiAib3V0cHV0LmF0OjIzMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ1hYX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzE6IFwkQ1hYIFwkQ1hYRkxBR1MgXCRDUFBGTEFHUyAtYyAtbyBjeHgubyAtYyBcIkB9LmNcIiAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAtYyAtbyBjeHgubyAtYyBcIkB9LmNcIiAiICJvdXRwdXQuYXQ6MjMxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAtYyAtbyBjeHgubyAtYyAiQH0uYyIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzgzCisjQVRfU1RBUlRfODQKK2F0X2ZuX2dyb3VwX2Jhbm5lciA4NCAnb3V0cHV0LmF0OjIzMicgXAorICAiT3V0cHV0IGZpbGUgbmFtZTogWyIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDMKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI4NC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworIyBTa2lwIGlmIHBsYXRmb3JtIGRvZXNuJ3Qgc3VwcG9ydCBmaWxlIG5hbWUuICBGb3IgZXhhbXBsZSwgQ3lnd2luCisjIGRvZXNuJ3Qgc3VwcG9ydCBmaWxlIG5hbWVzIGNvbnRhaW5pbmcgIjoiIG9yICJcIi4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMyOiB0b3VjaCBcIlsudG1wXCIgfHwgZXhpdCA3NyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDoyMzIiCisoICRhdF9jaGVja190cmFjZTsgdG91Y2ggIlsudG1wIiB8fCBleGl0IDc3CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+Z2xyLnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWdsci1wYXJzZXIKKyVjb2RlIHsKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CitpbnQgeXlsZXggKHZvaWQpOworfQorJSUKK3N0YXJ0OiB7fTsKK19BVEVPRgorCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIFwiWy5jXCIgLS1kZWZpbmVzPVwiWy5oXCIgZ2xyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJvdXRwdXQuYXQ6MjMyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vICJbLmMiIC0tZGVmaW5lcz0iWy5oIiBnbHIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIFwiWy5jXCIgLS1kZWZpbmVzPVwiWy5oXCIgZ2xyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gXCJbLmNcIiAtLWRlZmluZXM9XCJbLmhcIiBnbHIueSIgIm91dHB1dC5hdDoyMzIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gIlsuYyIgLS1kZWZpbmVzPSJbLmgiIGdsci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzI6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6MjMyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMyOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjIzMiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMjogYmlzb24gLW8gXCJbLmNcIiAtLWRlZmluZXM9XCJbLmhcIiBnbHIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDoyMzIiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gIlsuYyIgLS1kZWZpbmVzPSJbLmgiIGdsci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMyOiBscyBcIlsuY1wiIFwiWy5oXCIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6MjMyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGxzICJbLmMiICJbLmgiCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMyOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAib3V0cHV0LmF0OjIzMiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMyOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgLWMgLW8gZ2xyLm8gLWMgXCJbLmNcIiAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyAtbyBnbHIubyAtYyBcIlsuY1wiICIgIm91dHB1dC5hdDoyMzIiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTIC1jIC1vIGdsci5vIC1jICJbLmMiCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK2NhdCA+Y3h4LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJXNrZWxldG9uICJsYWxyMS5jYyIKKyVjb2RlIHsgaW50IHl5bGV4ICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlKik7IH0KKyUlCitzdGFydDoge307CitfQVRFT0YKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBcIlsuY1wiIC0tZGVmaW5lcz1cIlsuaFwiIGN4eC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAib3V0cHV0LmF0OjIzMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyAiWy5jIiAtLWRlZmluZXM9IlsuaCIgY3h4LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMyOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBcIlsuY1wiIC0tZGVmaW5lcz1cIlsuaFwiIGN4eC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIFwiWy5jXCIgLS1kZWZpbmVzPVwiWy5oXCIgY3h4LnkiICJvdXRwdXQuYXQ6MjMyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vICJbLmMiIC0tZGVmaW5lcz0iWy5oIiBjeHgueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMyOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjIzMiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDoyMzIiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzI6IGJpc29uIC1vIFwiWy5jXCIgLS1kZWZpbmVzPVwiWy5oXCIgY3h4LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6MjMyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vICJbLmMiIC0tZGVmaW5lcz0iWy5oIiBjeHgueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMjogbHMgXCJbLmNcIiBcIlsuaFwiIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjIzMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBscyAiWy5jIiAiWy5oIgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMyOiBcJEJJU09OX0NYWF9XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NYWF9XT1JLUyIgIm91dHB1dC5hdDoyMzIiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NYWF9XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMyOiBcJENYWCBcJENYWEZMQUdTIFwkQ1BQRkxBR1MgLWMgLW8gY3h4Lm8gLWMgXCJbLmNcIiAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAtYyAtbyBjeHgubyAtYyBcIlsuY1wiICIgIm91dHB1dC5hdDoyMzIiCisoICRhdF9jaGVja190cmFjZTsgJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTIC1jIC1vIGN4eC5vIC1jICJbLmMiCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF84NAorI0FUX1NUQVJUXzg1CithdF9mbl9ncm91cF9iYW5uZXIgODUgJ291dHB1dC5hdDoyMzMnIFwKKyAgIk91dHB1dCBmaWxlIG5hbWU6IF0iICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAzCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiODUuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisKKyMgU2tpcCBpZiBwbGF0Zm9ybSBkb2Vzbid0IHN1cHBvcnQgZmlsZSBuYW1lLiAgRm9yIGV4YW1wbGUsIEN5Z3dpbgorIyBkb2Vzbid0IHN1cHBvcnQgZmlsZSBuYW1lcyBjb250YWluaW5nICI6IiBvciAiXCIuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMzogdG91Y2ggXCJdLnRtcFwiIHx8IGV4aXQgNzciCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6MjMzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHRvdWNoICJdLnRtcCIgfHwgZXhpdCA3NworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmdsci55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVnbHItcGFyc2VyCislY29kZSB7Cit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworaW50IHl5bGV4ICh2b2lkKTsKK30KKyUlCitzdGFydDoge307CitfQVRFT0YKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBcIl0uY1wiIC0tZGVmaW5lcz1cIl0uaFwiIGdsci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAib3V0cHV0LmF0OjIzMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyAiXS5jIiAtLWRlZmluZXM9Il0uaCIgZ2xyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBcIl0uY1wiIC0tZGVmaW5lcz1cIl0uaFwiIGdsci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIFwiXS5jXCIgLS1kZWZpbmVzPVwiXS5oXCIgZ2xyLnkiICJvdXRwdXQuYXQ6MjMzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vICJdLmMiIC0tZGVmaW5lcz0iXS5oIiBnbHIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMzOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjIzMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDoyMzMiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzM6IGJpc29uIC1vIFwiXS5jXCIgLS1kZWZpbmVzPVwiXS5oXCIgZ2xyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6MjMzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vICJdLmMiIC0tZGVmaW5lcz0iXS5oIiBnbHIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMzogbHMgXCJdLmNcIiBcIl0uaFwiIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjIzMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBscyAiXS5jIiAiXS5oIgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMzogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgIm91dHB1dC5hdDoyMzMiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMzogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIC1jIC1vIGdsci5vIC1jIFwiXS5jXCIgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgLW8gZ2xyLm8gLWMgXCJdLmNcIiAiICJvdXRwdXQuYXQ6MjMzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyAtbyBnbHIubyAtYyAiXS5jIgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCitjYXQgPmN4eC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVza2VsZXRvbiAibGFscjEuY2MiCislY29kZSB7IGludCB5eWxleCAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSopOyB9CislJQorc3RhcnQ6IHt9OworX0FURU9GCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gXCJdLmNcIiAtLWRlZmluZXM9XCJdLmhcIiBjeHgueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgIm91dHB1dC5hdDoyMzMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gIl0uYyIgLS1kZWZpbmVzPSJdLmgiIGN4eC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gXCJdLmNcIiAtLWRlZmluZXM9XCJdLmhcIiBjeHgueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBcIl0uY1wiIC0tZGVmaW5lcz1cIl0uaFwiIGN4eC55IiAib3V0cHV0LmF0OjIzMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyAiXS5jIiAtLWRlZmluZXM9Il0uaCIgY3h4LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDoyMzMiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6MjMzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMzOiBiaXNvbiAtbyBcIl0uY1wiIC0tZGVmaW5lcz1cIl0uaFwiIGN4eC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjIzMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyAiXS5jIiAtLWRlZmluZXM9Il0uaCIgY3h4LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzM6IGxzIFwiXS5jXCIgXCJdLmhcIiIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDoyMzMiCisoICRhdF9jaGVja190cmFjZTsgbHMgIl0uYyIgIl0uaCIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjMzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMzogXCRCSVNPTl9DWFhfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DWFhfV09SS1MiICJvdXRwdXQuYXQ6MjMzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DWFhfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyMzMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMzogXCRDWFggXCRDWFhGTEFHUyBcJENQUEZMQUdTIC1jIC1vIGN4eC5vIC1jIFwiXS5jXCIgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgLWMgLW8gY3h4Lm8gLWMgXCJdLmNcIiAiICJvdXRwdXQuYXQ6MjMzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAtYyAtbyBjeHgubyAtYyAiXS5jIgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjIzMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfODUKKyNBVF9TVEFSVF84NgorYXRfZm5fZ3JvdXBfYmFubmVyIDg2ICdvdXRwdXQuYXQ6MjYwJyBcCisgICJHcmFwaCB3aXRoIG5vIGNvbmZsaWN0cyIgIiAgICAgICAgICAgICAgICAgICAgICAgICIgMworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjg2LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyUlCitleHA6IGEgJz8nIGI7CithOiA7CitiOiAnYic7CitfQVRFT0YKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjYwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLXJhbGwgLS1ncmFwaCBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAib3V0cHV0LmF0OjI2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtcmFsbCAtLWdyYXBoIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjYwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtcmFsbCAtLWdyYXBoIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLXJhbGwgLS1ncmFwaCBpbnB1dC55IiAib3V0cHV0LmF0OjI2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtcmFsbCAtLWdyYXBoIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjI2MDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDoyNjAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjI2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyNjA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6MjYwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjYwOiBiaXNvbiAtcmFsbCAtLWdyYXBoIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6MjYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1yYWxsIC0tZ3JhcGggaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MjYwOiBncmVwIC12IC8vIGlucHV0LmRvdCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDoyNjAiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtdiAvLyBpbnB1dC5kb3QKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIKK2RpZ3JhcGggXCJpbnB1dC55XCIKK3sKKyAgbm9kZSBbZm9udG5hbWUgPSBjb3VyaWVyLCBzaGFwZSA9IGJveCwgY29sb3JzY2hlbWUgPSBwYWlyZWQ2XQorICBlZGdlIFtmb250bmFtZSA9IGNvdXJpZXJdCisKKyAgMCBbbGFiZWw9XCJTdGF0ZSAwXFxuXFxsICAwIFwkYWNjZXB0OiAuIGV4cCBcJGVuZFxcbCAgMSBleHA6IC4gYSAnPycgYlxcbCAgMiBhOiAuXFxsXCJdCisgIDAgLT4gMSBbc3R5bGU9ZGFzaGVkIGxhYmVsPVwiZXhwXCJdCisgIDAgLT4gMiBbc3R5bGU9ZGFzaGVkIGxhYmVsPVwiYVwiXQorICAwIC0+IFwiMFIyXCIgW3N0eWxlPXNvbGlkXQorIFwiMFIyXCIgW2xhYmVsPVwiUjJcIiwgZmlsbGNvbG9yPTMsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgMSBbbGFiZWw9XCJTdGF0ZSAxXFxuXFxsICAwIFwkYWNjZXB0OiBleHAgLiBcJGVuZFxcbFwiXQorICAxIC0+IDMgW3N0eWxlPXNvbGlkIGxhYmVsPVwiXCRlbmRcIl0KKyAgMiBbbGFiZWw9XCJTdGF0ZSAyXFxuXFxsICAxIGV4cDogYSAuICc/JyBiXFxsXCJdCisgIDIgLT4gNCBbc3R5bGU9c29saWQgbGFiZWw9XCInPydcIl0KKyAgMyBbbGFiZWw9XCJTdGF0ZSAzXFxuXFxsICAwIFwkYWNjZXB0OiBleHAgXCRlbmQgLlxcbFwiXQorICAzIC0+IFwiM1IwXCIgW3N0eWxlPXNvbGlkXQorIFwiM1IwXCIgW2xhYmVsPVwiQWNjXCIsIGZpbGxjb2xvcj0xLCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCisgIDQgW2xhYmVsPVwiU3RhdGUgNFxcblxcbCAgMSBleHA6IGEgJz8nIC4gYlxcbCAgMyBiOiAuICdiJ1xcbFwiXQorICA0IC0+IDUgW3N0eWxlPXNvbGlkIGxhYmVsPVwiJ2InXCJdCisgIDQgLT4gNiBbc3R5bGU9ZGFzaGVkIGxhYmVsPVwiYlwiXQorICA1IFtsYWJlbD1cIlN0YXRlIDVcXG5cXGwgIDMgYjogJ2InIC5cXGxcIl0KKyAgNSAtPiBcIjVSM1wiIFtzdHlsZT1zb2xpZF0KKyBcIjVSM1wiIFtsYWJlbD1cIlIzXCIsIGZpbGxjb2xvcj0zLCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCisgIDYgW2xhYmVsPVwiU3RhdGUgNlxcblxcbCAgMSBleHA6IGEgJz8nIGIgLlxcbFwiXQorICA2IC0+IFwiNlIxXCIgW3N0eWxlPXNvbGlkXQorIFwiNlIxXCIgW2xhYmVsPVwiUjFcIiwgZmlsbGNvbG9yPTMsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KK30KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDoyNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzg2CisjQVRfU1RBUlRfODcKK2F0X2ZuX2dyb3VwX2Jhbm5lciA4NyAnb3V0cHV0LmF0OjI5NCcgXAorICAiR3JhcGggd2l0aCB1bnNvbHZlZCBTL1IiICIgICAgICAgICAgICAgICAgICAgICAgICAiIDMKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI4Ny4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislJQorc3RhcnQ6CisgICAgJ2EnCisgIHwgZW1wdHlfYSAnYScKKyAgfCAnYicKKyAgfCBlbXB0eV9iICdiJworICB8ICdjJworICB8IGVtcHR5X2MgJ2MnCisgIDsKK2VtcHR5X2E6ICVwcmVjICdhJzsKK2VtcHR5X2I6ICVwcmVjICdiJzsKK2VtcHR5X2M6ICVwcmVjICdjJzsKK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyOTQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtcmFsbCAtLWdyYXBoIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJvdXRwdXQuYXQ6Mjk0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1yYWxsIC0tZ3JhcGggaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjI5NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyOTQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1yYWxsIC0tZ3JhcGggaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtcmFsbCAtLWdyYXBoIGlucHV0LnkiICJvdXRwdXQuYXQ6Mjk0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1yYWxsIC0tZ3JhcGggaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjI5NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6Mjk0OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjI5NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6Mjk0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjI5NDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDoyOTQiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjI5NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyOTQ6IGJpc29uIC1yYWxsIC0tZ3JhcGggaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDoyOTQiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLXJhbGwgLS1ncmFwaCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjI5NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDoyOTQ6IGdyZXAgLXYgLy8gaW5wdXQuZG90IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjI5NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC12IC8vIGlucHV0LmRvdAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIgorZGlncmFwaCBcImlucHV0LnlcIgoreworICBub2RlIFtmb250bmFtZSA9IGNvdXJpZXIsIHNoYXBlID0gYm94LCBjb2xvcnNjaGVtZSA9IHBhaXJlZDZdCisgIGVkZ2UgW2ZvbnRuYW1lID0gY291cmllcl0KKworICAwIFtsYWJlbD1cIlN0YXRlIDBcXG5cXGwgIDAgXCRhY2NlcHQ6IC4gc3RhcnQgXCRlbmRcXGwgIDEgc3RhcnQ6IC4gJ2EnXFxsICAyICAgICAgfCAuIGVtcHR5X2EgJ2EnXFxsICAzICAgICAgfCAuICdiJ1xcbCAgNCAgICAgIHwgLiBlbXB0eV9iICdiJ1xcbCAgNSAgICAgIHwgLiAnYydcXGwgIDYgICAgICB8IC4gZW1wdHlfYyAnYydcXGwgIDcgZW1wdHlfYTogLiAgWydhJ11cXGwgIDggZW1wdHlfYjogLiAgWydiJ11cXGwgIDkgZW1wdHlfYzogLiAgWydjJ11cXGxcIl0KKyAgMCAtPiAxIFtzdHlsZT1zb2xpZCBsYWJlbD1cIidhJ1wiXQorICAwIC0+IDIgW3N0eWxlPXNvbGlkIGxhYmVsPVwiJ2InXCJdCisgIDAgLT4gMyBbc3R5bGU9c29saWQgbGFiZWw9XCInYydcIl0KKyAgMCAtPiA0IFtzdHlsZT1kYXNoZWQgbGFiZWw9XCJzdGFydFwiXQorICAwIC0+IDUgW3N0eWxlPWRhc2hlZCBsYWJlbD1cImVtcHR5X2FcIl0KKyAgMCAtPiA2IFtzdHlsZT1kYXNoZWQgbGFiZWw9XCJlbXB0eV9iXCJdCisgIDAgLT4gNyBbc3R5bGU9ZGFzaGVkIGxhYmVsPVwiZW1wdHlfY1wiXQorICAwIC0+IFwiMFI3ZFwiIFtsYWJlbD1cIlsnYSddXCIsIHN0eWxlPXNvbGlkXQorIFwiMFI3ZFwiIFtsYWJlbD1cIlI3XCIsIGZpbGxjb2xvcj01LCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCisgIDAgLT4gXCIwUjhkXCIgW2xhYmVsPVwiWydiJ11cIiwgc3R5bGU9c29saWRdCisgXCIwUjhkXCIgW2xhYmVsPVwiUjhcIiwgZmlsbGNvbG9yPTUsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgMCAtPiBcIjBSOWRcIiBbbGFiZWw9XCJbJ2MnXVwiLCBzdHlsZT1zb2xpZF0KKyBcIjBSOWRcIiBbbGFiZWw9XCJSOVwiLCBmaWxsY29sb3I9NSwgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICAxIFtsYWJlbD1cIlN0YXRlIDFcXG5cXGwgIDEgc3RhcnQ6ICdhJyAuXFxsXCJdCisgIDEgLT4gXCIxUjFcIiBbc3R5bGU9c29saWRdCisgXCIxUjFcIiBbbGFiZWw9XCJSMVwiLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICAyIFtsYWJlbD1cIlN0YXRlIDJcXG5cXGwgIDMgc3RhcnQ6ICdiJyAuXFxsXCJdCisgIDIgLT4gXCIyUjNcIiBbc3R5bGU9c29saWRdCisgXCIyUjNcIiBbbGFiZWw9XCJSM1wiLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICAzIFtsYWJlbD1cIlN0YXRlIDNcXG5cXGwgIDUgc3RhcnQ6ICdjJyAuXFxsXCJdCisgIDMgLT4gXCIzUjVcIiBbc3R5bGU9c29saWRdCisgXCIzUjVcIiBbbGFiZWw9XCJSNVwiLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICA0IFtsYWJlbD1cIlN0YXRlIDRcXG5cXGwgIDAgXCRhY2NlcHQ6IHN0YXJ0IC4gXCRlbmRcXGxcIl0KKyAgNCAtPiA4IFtzdHlsZT1zb2xpZCBsYWJlbD1cIlwkZW5kXCJdCisgIDUgW2xhYmVsPVwiU3RhdGUgNVxcblxcbCAgMiBzdGFydDogZW1wdHlfYSAuICdhJ1xcbFwiXQorICA1IC0+IDkgW3N0eWxlPXNvbGlkIGxhYmVsPVwiJ2EnXCJdCisgIDYgW2xhYmVsPVwiU3RhdGUgNlxcblxcbCAgNCBzdGFydDogZW1wdHlfYiAuICdiJ1xcbFwiXQorICA2IC0+IDEwIFtzdHlsZT1zb2xpZCBsYWJlbD1cIidiJ1wiXQorICA3IFtsYWJlbD1cIlN0YXRlIDdcXG5cXGwgIDYgc3RhcnQ6IGVtcHR5X2MgLiAnYydcXGxcIl0KKyAgNyAtPiAxMSBbc3R5bGU9c29saWQgbGFiZWw9XCInYydcIl0KKyAgOCBbbGFiZWw9XCJTdGF0ZSA4XFxuXFxsICAwIFwkYWNjZXB0OiBzdGFydCBcJGVuZCAuXFxsXCJdCisgIDggLT4gXCI4UjBcIiBbc3R5bGU9c29saWRdCisgXCI4UjBcIiBbbGFiZWw9XCJBY2NcIiwgZmlsbGNvbG9yPTEsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgOSBbbGFiZWw9XCJTdGF0ZSA5XFxuXFxsICAyIHN0YXJ0OiBlbXB0eV9hICdhJyAuXFxsXCJdCisgIDkgLT4gXCI5UjJcIiBbc3R5bGU9c29saWRdCisgXCI5UjJcIiBbbGFiZWw9XCJSMlwiLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICAxMCBbbGFiZWw9XCJTdGF0ZSAxMFxcblxcbCAgNCBzdGFydDogZW1wdHlfYiAnYicgLlxcbFwiXQorICAxMCAtPiBcIjEwUjRcIiBbc3R5bGU9c29saWRdCisgXCIxMFI0XCIgW2xhYmVsPVwiUjRcIiwgZmlsbGNvbG9yPTMsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgMTEgW2xhYmVsPVwiU3RhdGUgMTFcXG5cXGwgIDYgc3RhcnQ6IGVtcHR5X2MgJ2MnIC5cXGxcIl0KKyAgMTEgLT4gXCIxMVI2XCIgW3N0eWxlPXNvbGlkXQorIFwiMTFSNlwiIFtsYWJlbD1cIlI2XCIsIGZpbGxjb2xvcj0zLCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCit9CisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6Mjk0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF84NworI0FUX1NUQVJUXzg4CithdF9mbl9ncm91cF9iYW5uZXIgODggJ291dHB1dC5hdDozNTgnIFwKKyAgIkdyYXBoIHdpdGggc29sdmVkIFMvUiIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIiAzCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiODguICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWxlZnQgJ2EnCislcmlnaHQgJ2InCislcmlnaHQgJ2MnCislJQorc3RhcnQ6CisgICAgJ2EnCisgIHwgZW1wdHlfYSAnYScKKyAgfCAnYicKKyAgfCBlbXB0eV9iICdiJworICB8ICdjJworICB8IGVtcHR5X2MgJ2MnCisgIDsKK2VtcHR5X2E6ICVwcmVjICdhJzsKK2VtcHR5X2I6ICVwcmVjICdiJzsKK2VtcHR5X2M6ICVwcmVjICdjJzsKK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDozNTg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtcmFsbCAtLWdyYXBoIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJvdXRwdXQuYXQ6MzU4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1yYWxsIC0tZ3JhcGggaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjM1OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDozNTg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1yYWxsIC0tZ3JhcGggaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtcmFsbCAtLWdyYXBoIGlucHV0LnkiICJvdXRwdXQuYXQ6MzU4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1yYWxsIC0tZ3JhcGggaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjM1OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MzU4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjM1OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6MzU4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjM1ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDozNTgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjM1OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDozNTg6IGJpc29uIC1yYWxsIC0tZ3JhcGggaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDozNTgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLXJhbGwgLS1ncmFwaCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjM1OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDozNTg6IGdyZXAgLXYgLy8gaW5wdXQuZG90IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjM1OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC12IC8vIGlucHV0LmRvdAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIgorZGlncmFwaCBcImlucHV0LnlcIgoreworICBub2RlIFtmb250bmFtZSA9IGNvdXJpZXIsIHNoYXBlID0gYm94LCBjb2xvcnNjaGVtZSA9IHBhaXJlZDZdCisgIGVkZ2UgW2ZvbnRuYW1lID0gY291cmllcl0KKworICAwIFtsYWJlbD1cIlN0YXRlIDBcXG5cXGwgIDAgXCRhY2NlcHQ6IC4gc3RhcnQgXCRlbmRcXGwgIDEgc3RhcnQ6IC4gJ2EnXFxsICAyICAgICAgfCAuIGVtcHR5X2EgJ2EnXFxsICAzICAgICAgfCAuICdiJ1xcbCAgNCAgICAgIHwgLiBlbXB0eV9iICdiJ1xcbCAgNSAgICAgIHwgLiAnYydcXGwgIDYgICAgICB8IC4gZW1wdHlfYyAnYydcXGwgIDcgZW1wdHlfYTogLiAgWydhJ11cXGwgIDggZW1wdHlfYjogLiAgW11cXGwgIDkgZW1wdHlfYzogLiAgW11cXGxcIl0KKyAgMCAtPiAxIFtzdHlsZT1zb2xpZCBsYWJlbD1cIidiJ1wiXQorICAwIC0+IDIgW3N0eWxlPXNvbGlkIGxhYmVsPVwiJ2MnXCJdCisgIDAgLT4gMyBbc3R5bGU9ZGFzaGVkIGxhYmVsPVwic3RhcnRcIl0KKyAgMCAtPiA0IFtzdHlsZT1kYXNoZWQgbGFiZWw9XCJlbXB0eV9hXCJdCisgIDAgLT4gNSBbc3R5bGU9ZGFzaGVkIGxhYmVsPVwiZW1wdHlfYlwiXQorICAwIC0+IDYgW3N0eWxlPWRhc2hlZCBsYWJlbD1cImVtcHR5X2NcIl0KKyAgMCAtPiBcIjBSN1wiIFtzdHlsZT1zb2xpZF0KKyBcIjBSN1wiIFtsYWJlbD1cIlI3XCIsIGZpbGxjb2xvcj0zLCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCisgIDEgW2xhYmVsPVwiU3RhdGUgMVxcblxcbCAgMyBzdGFydDogJ2InIC5cXGxcIl0KKyAgMSAtPiBcIjFSM1wiIFtzdHlsZT1zb2xpZF0KKyBcIjFSM1wiIFtsYWJlbD1cIlIzXCIsIGZpbGxjb2xvcj0zLCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCisgIDIgW2xhYmVsPVwiU3RhdGUgMlxcblxcbCAgNSBzdGFydDogJ2MnIC5cXGxcIl0KKyAgMiAtPiBcIjJSNVwiIFtzdHlsZT1zb2xpZF0KKyBcIjJSNVwiIFtsYWJlbD1cIlI1XCIsIGZpbGxjb2xvcj0zLCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCisgIDMgW2xhYmVsPVwiU3RhdGUgM1xcblxcbCAgMCBcJGFjY2VwdDogc3RhcnQgLiBcJGVuZFxcbFwiXQorICAzIC0+IDcgW3N0eWxlPXNvbGlkIGxhYmVsPVwiXCRlbmRcIl0KKyAgNCBbbGFiZWw9XCJTdGF0ZSA0XFxuXFxsICAyIHN0YXJ0OiBlbXB0eV9hIC4gJ2EnXFxsXCJdCisgIDQgLT4gOCBbc3R5bGU9c29saWQgbGFiZWw9XCInYSdcIl0KKyAgNSBbbGFiZWw9XCJTdGF0ZSA1XFxuXFxsICA0IHN0YXJ0OiBlbXB0eV9iIC4gJ2InXFxsXCJdCisgIDUgLT4gOSBbc3R5bGU9c29saWQgbGFiZWw9XCInYidcIl0KKyAgNiBbbGFiZWw9XCJTdGF0ZSA2XFxuXFxsICA2IHN0YXJ0OiBlbXB0eV9jIC4gJ2MnXFxsXCJdCisgIDYgLT4gMTAgW3N0eWxlPXNvbGlkIGxhYmVsPVwiJ2MnXCJdCisgIDcgW2xhYmVsPVwiU3RhdGUgN1xcblxcbCAgMCBcJGFjY2VwdDogc3RhcnQgXCRlbmQgLlxcbFwiXQorICA3IC0+IFwiN1IwXCIgW3N0eWxlPXNvbGlkXQorIFwiN1IwXCIgW2xhYmVsPVwiQWNjXCIsIGZpbGxjb2xvcj0xLCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCisgIDggW2xhYmVsPVwiU3RhdGUgOFxcblxcbCAgMiBzdGFydDogZW1wdHlfYSAnYScgLlxcbFwiXQorICA4IC0+IFwiOFIyXCIgW3N0eWxlPXNvbGlkXQorIFwiOFIyXCIgW2xhYmVsPVwiUjJcIiwgZmlsbGNvbG9yPTMsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgOSBbbGFiZWw9XCJTdGF0ZSA5XFxuXFxsICA0IHN0YXJ0OiBlbXB0eV9iICdiJyAuXFxsXCJdCisgIDkgLT4gXCI5UjRcIiBbc3R5bGU9c29saWRdCisgXCI5UjRcIiBbbGFiZWw9XCJSNFwiLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICAxMCBbbGFiZWw9XCJTdGF0ZSAxMFxcblxcbCAgNiBzdGFydDogZW1wdHlfYyAnYycgLlxcbFwiXQorICAxMCAtPiBcIjEwUjZcIiBbc3R5bGU9c29saWRdCisgXCIxMFI2XCIgW2xhYmVsPVwiUjZcIiwgZmlsbGNvbG9yPTMsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KK30KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDozNTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzg4CisjQVRfU1RBUlRfODkKK2F0X2ZuX2dyb3VwX2Jhbm5lciA4OSAnb3V0cHV0LmF0OjQxNycgXAorICAiR3JhcGggd2l0aCBSL1IiICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDMKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI4OS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislJQorZXhwOiBhIHwgYjsKK2E6IDsKK2I6IDsKK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo0MTc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtcmFsbCAtLWdyYXBoIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJvdXRwdXQuYXQ6NDE3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1yYWxsIC0tZ3JhcGggaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjQxNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo0MTc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1yYWxsIC0tZ3JhcGggaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtcmFsbCAtLWdyYXBoIGlucHV0LnkiICJvdXRwdXQuYXQ6NDE3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1yYWxsIC0tZ3JhcGggaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjQxNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NDE3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjQxNyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NDE3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjQxNzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDo0MTciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjQxNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo0MTc6IGJpc29uIC1yYWxsIC0tZ3JhcGggaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDo0MTciCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLXJhbGwgLS1ncmFwaCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjQxNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo0MTc6IGdyZXAgLXYgLy8gaW5wdXQuZG90IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjQxNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC12IC8vIGlucHV0LmRvdAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIgorZGlncmFwaCBcImlucHV0LnlcIgoreworICBub2RlIFtmb250bmFtZSA9IGNvdXJpZXIsIHNoYXBlID0gYm94LCBjb2xvcnNjaGVtZSA9IHBhaXJlZDZdCisgIGVkZ2UgW2ZvbnRuYW1lID0gY291cmllcl0KKworICAwIFtsYWJlbD1cIlN0YXRlIDBcXG5cXGwgIDAgXCRhY2NlcHQ6IC4gZXhwIFwkZW5kXFxsICAxIGV4cDogLiBhXFxsICAyICAgIHwgLiBiXFxsICAzIGE6IC4gIFtcJGVuZF1cXGwgIDQgYjogLiAgW1wkZW5kXVxcbFwiXQorICAwIC0+IDEgW3N0eWxlPWRhc2hlZCBsYWJlbD1cImV4cFwiXQorICAwIC0+IDIgW3N0eWxlPWRhc2hlZCBsYWJlbD1cImFcIl0KKyAgMCAtPiAzIFtzdHlsZT1kYXNoZWQgbGFiZWw9XCJiXCJdCisgIDAgLT4gXCIwUjNcIiBbc3R5bGU9c29saWRdCisgXCIwUjNcIiBbbGFiZWw9XCJSM1wiLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICAwIC0+IFwiMFI0ZFwiIFtsYWJlbD1cIltcJGVuZF1cIiwgc3R5bGU9c29saWRdCisgXCIwUjRkXCIgW2xhYmVsPVwiUjRcIiwgZmlsbGNvbG9yPTUsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgMSBbbGFiZWw9XCJTdGF0ZSAxXFxuXFxsICAwIFwkYWNjZXB0OiBleHAgLiBcJGVuZFxcbFwiXQorICAxIC0+IDQgW3N0eWxlPXNvbGlkIGxhYmVsPVwiXCRlbmRcIl0KKyAgMiBbbGFiZWw9XCJTdGF0ZSAyXFxuXFxsICAxIGV4cDogYSAuXFxsXCJdCisgIDIgLT4gXCIyUjFcIiBbc3R5bGU9c29saWRdCisgXCIyUjFcIiBbbGFiZWw9XCJSMVwiLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICAzIFtsYWJlbD1cIlN0YXRlIDNcXG5cXGwgIDIgZXhwOiBiIC5cXGxcIl0KKyAgMyAtPiBcIjNSMlwiIFtzdHlsZT1zb2xpZF0KKyBcIjNSMlwiIFtsYWJlbD1cIlIyXCIsIGZpbGxjb2xvcj0zLCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCisgIDQgW2xhYmVsPVwiU3RhdGUgNFxcblxcbCAgMCBcJGFjY2VwdDogZXhwIFwkZW5kIC5cXGxcIl0KKyAgNCAtPiBcIjRSMFwiIFtzdHlsZT1zb2xpZF0KKyBcIjRSMFwiIFtsYWJlbD1cIkFjY1wiLCBmaWxsY29sb3I9MSwgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorfQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjQxNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfODkKKyNBVF9TVEFSVF85MAorYXRfZm5fZ3JvdXBfYmFubmVyIDkwICdvdXRwdXQuYXQ6NDQ5JyBcCisgICJHcmFwaCB3aXRoIHJlZHVjdGlvbnMgd2l0aCBtdWx0aXBsZSBMQVQiICIgICAgICAgICIgMworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjkwLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyUlCitleHA6IGEgJzsnIHwgYSAnOycgfCBhICcuJyB8IGIgJz8nIHwgYiAnIScgfCBjICc/JyB8IGMgJzsnOworYTogOworYjogOworYzogOworX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjQ0OTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1yYWxsIC0tZ3JhcGggaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgIm91dHB1dC5hdDo0NDkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLXJhbGwgLS1ncmFwaCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NDQ5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjQ0OTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLXJhbGwgLS1ncmFwaCBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1yYWxsIC0tZ3JhcGggaW5wdXQueSIgIm91dHB1dC5hdDo0NDkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLXJhbGwgLS1ncmFwaCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NDQ5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo0NDk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJvdXRwdXQuYXQ6NDQ5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo0NDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NDQ5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjQ0OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NDQ5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjQ0OTogYmlzb24gLXJhbGwgLS1ncmFwaCBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjQ0OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtcmFsbCAtLWdyYXBoIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NDQ5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjQ0OTogZ3JlcCAtdiAvLyBpbnB1dC5kb3QiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJvdXRwdXQuYXQ6NDQ5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLXYgLy8gaW5wdXQuZG90CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiCitkaWdyYXBoIFwiaW5wdXQueVwiCit7CisgIG5vZGUgW2ZvbnRuYW1lID0gY291cmllciwgc2hhcGUgPSBib3gsIGNvbG9yc2NoZW1lID0gcGFpcmVkNl0KKyAgZWRnZSBbZm9udG5hbWUgPSBjb3VyaWVyXQorCisgIDAgW2xhYmVsPVwiU3RhdGUgMFxcblxcbCAgMCBcJGFjY2VwdDogLiBleHAgXCRlbmRcXGwgIDEgZXhwOiAuIGEgJzsnXFxsICAyICAgIHwgLiBhICc7J1xcbCAgMyAgICB8IC4gYSAnLidcXGwgIDQgICAgfCAuIGIgJz8nXFxsICA1ICAgIHwgLiBiICchJ1xcbCAgNiAgICB8IC4gYyAnPydcXGwgIDcgICAgfCAuIGMgJzsnXFxsICA4IGE6IC4gIFsnOycsICcuJ11cXGwgIDkgYjogLiAgWyc/JywgJyEnXVxcbCAxMCBjOiAuICBbJzsnLCAnPyddXFxsXCJdCisgIDAgLT4gMSBbc3R5bGU9ZGFzaGVkIGxhYmVsPVwiZXhwXCJdCisgIDAgLT4gMiBbc3R5bGU9ZGFzaGVkIGxhYmVsPVwiYVwiXQorICAwIC0+IDMgW3N0eWxlPWRhc2hlZCBsYWJlbD1cImJcIl0KKyAgMCAtPiA0IFtzdHlsZT1kYXNoZWQgbGFiZWw9XCJjXCJdCisgIDAgLT4gXCIwUjhcIiBbc3R5bGU9c29saWRdCisgXCIwUjhcIiBbbGFiZWw9XCJSOFwiLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICAwIC0+IFwiMFI5XCIgW2xhYmVsPVwiWyc/JywgJyEnXVwiLCBzdHlsZT1zb2xpZF0KKyBcIjBSOVwiIFtsYWJlbD1cIlI5XCIsIGZpbGxjb2xvcj0zLCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCisgIDAgLT4gXCIwUjEwZFwiIFtsYWJlbD1cIlsnOycsICc/J11cIiwgc3R5bGU9c29saWRdCisgXCIwUjEwZFwiIFtsYWJlbD1cIlIxMFwiLCBmaWxsY29sb3I9NSwgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICAxIFtsYWJlbD1cIlN0YXRlIDFcXG5cXGwgIDAgXCRhY2NlcHQ6IGV4cCAuIFwkZW5kXFxsXCJdCisgIDEgLT4gNSBbc3R5bGU9c29saWQgbGFiZWw9XCJcJGVuZFwiXQorICAyIFtsYWJlbD1cIlN0YXRlIDJcXG5cXGwgIDEgZXhwOiBhIC4gJzsnXFxsICAyICAgIHwgYSAuICc7J1xcbCAgMyAgICB8IGEgLiAnLidcXGxcIl0KKyAgMiAtPiA2IFtzdHlsZT1zb2xpZCBsYWJlbD1cIic7J1wiXQorICAyIC0+IDcgW3N0eWxlPXNvbGlkIGxhYmVsPVwiJy4nXCJdCisgIDMgW2xhYmVsPVwiU3RhdGUgM1xcblxcbCAgNCBleHA6IGIgLiAnPydcXGwgIDUgICAgfCBiIC4gJyEnXFxsXCJdCisgIDMgLT4gOCBbc3R5bGU9c29saWQgbGFiZWw9XCInPydcIl0KKyAgMyAtPiA5IFtzdHlsZT1zb2xpZCBsYWJlbD1cIichJ1wiXQorICA0IFtsYWJlbD1cIlN0YXRlIDRcXG5cXGwgIDYgZXhwOiBjIC4gJz8nXFxsICA3ICAgIHwgYyAuICc7J1xcbFwiXQorICA0IC0+IDEwIFtzdHlsZT1zb2xpZCBsYWJlbD1cIic7J1wiXQorICA0IC0+IDExIFtzdHlsZT1zb2xpZCBsYWJlbD1cIic/J1wiXQorICA1IFtsYWJlbD1cIlN0YXRlIDVcXG5cXGwgIDAgXCRhY2NlcHQ6IGV4cCBcJGVuZCAuXFxsXCJdCisgIDUgLT4gXCI1UjBcIiBbc3R5bGU9c29saWRdCisgXCI1UjBcIiBbbGFiZWw9XCJBY2NcIiwgZmlsbGNvbG9yPTEsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgNiBbbGFiZWw9XCJTdGF0ZSA2XFxuXFxsICAxIGV4cDogYSAnOycgLiAgW1wkZW5kXVxcbCAgMiAgICB8IGEgJzsnIC4gIFtcJGVuZF1cXGxcIl0KKyAgNiAtPiBcIjZSMVwiIFtzdHlsZT1zb2xpZF0KKyBcIjZSMVwiIFtsYWJlbD1cIlIxXCIsIGZpbGxjb2xvcj0zLCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCisgIDYgLT4gXCI2UjJkXCIgW2xhYmVsPVwiW1wkZW5kXVwiLCBzdHlsZT1zb2xpZF0KKyBcIjZSMmRcIiBbbGFiZWw9XCJSMlwiLCBmaWxsY29sb3I9NSwgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICA3IFtsYWJlbD1cIlN0YXRlIDdcXG5cXGwgIDMgZXhwOiBhICcuJyAuXFxsXCJdCisgIDcgLT4gXCI3UjNcIiBbc3R5bGU9c29saWRdCisgXCI3UjNcIiBbbGFiZWw9XCJSM1wiLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICA4IFtsYWJlbD1cIlN0YXRlIDhcXG5cXGwgIDQgZXhwOiBiICc/JyAuXFxsXCJdCisgIDggLT4gXCI4UjRcIiBbc3R5bGU9c29saWRdCisgXCI4UjRcIiBbbGFiZWw9XCJSNFwiLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICA5IFtsYWJlbD1cIlN0YXRlIDlcXG5cXGwgIDUgZXhwOiBiICchJyAuXFxsXCJdCisgIDkgLT4gXCI5UjVcIiBbc3R5bGU9c29saWRdCisgXCI5UjVcIiBbbGFiZWw9XCJSNVwiLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICAxMCBbbGFiZWw9XCJTdGF0ZSAxMFxcblxcbCAgNyBleHA6IGMgJzsnIC5cXGxcIl0KKyAgMTAgLT4gXCIxMFI3XCIgW3N0eWxlPXNvbGlkXQorIFwiMTBSN1wiIFtsYWJlbD1cIlI3XCIsIGZpbGxjb2xvcj0zLCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCisgIDExIFtsYWJlbD1cIlN0YXRlIDExXFxuXFxsICA2IGV4cDogYyAnPycgLlxcbFwiXQorICAxMSAtPiBcIjExUjZcIiBbc3R5bGU9c29saWRdCisgXCIxMVI2XCIgW2xhYmVsPVwiUjZcIiwgZmlsbGNvbG9yPTMsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KK30KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo0NDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzkwCisjQVRfU1RBUlRfOTEKK2F0X2ZuX2dyb3VwX2Jhbm5lciA5MSAnb3V0cHV0LmF0OjUwOCcgXAorICAiR3JhcGggd2l0aCBhIHJlZHVjdGlvbiBydWxlIGJvdGggZW5hYmxlZCBhbmQgZGlzYWJsZWQiICIiIDMKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI5MS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislJQorZXhwOiBpZmV4cCB8IG9wZXhwIHwgaW1tOworaWZleHA6ICJpZiIgZXhwICJ0aGVuIiBleHAgZWxzZWV4cDsKK2Vsc2VleHA6ICJlbHNlIiBleHAgfCA7CitvcGV4cDogZXhwICcrJyBleHA7CitpbW06ICcwJzsKK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo1MDg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtcmFsbCAtLWdyYXBoIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJvdXRwdXQuYXQ6NTA4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1yYWxsIC0tZ3JhcGggaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjUwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo1MDg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1yYWxsIC0tZ3JhcGggaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtcmFsbCAtLWdyYXBoIGlucHV0LnkiICJvdXRwdXQuYXQ6NTA4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1yYWxsIC0tZ3JhcGggaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjUwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NTA4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAib3V0cHV0LmF0OjUwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9vdXRwdXQuYXQ6NTA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjUwODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgIm91dHB1dC5hdDo1MDgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjUwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo1MDg6IGJpc29uIC1yYWxsIC0tZ3JhcGggaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIm91dHB1dC5hdDo1MDgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLXJhbGwgLS1ncmFwaCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvb3V0cHV0LmF0OjUwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL291dHB1dC5hdDo1MDg6IGdyZXAgLXYgLy8gaW5wdXQuZG90IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAib3V0cHV0LmF0OjUwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC12IC8vIGlucHV0LmRvdAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIgorZGlncmFwaCBcImlucHV0LnlcIgoreworICBub2RlIFtmb250bmFtZSA9IGNvdXJpZXIsIHNoYXBlID0gYm94LCBjb2xvcnNjaGVtZSA9IHBhaXJlZDZdCisgIGVkZ2UgW2ZvbnRuYW1lID0gY291cmllcl0KKworICAwIFtsYWJlbD1cIlN0YXRlIDBcXG5cXGwgIDAgXCRhY2NlcHQ6IC4gZXhwIFwkZW5kXFxsICAxIGV4cDogLiBpZmV4cFxcbCAgMiAgICB8IC4gb3BleHBcXGwgIDMgICAgfCAuIGltbVxcbCAgNCBpZmV4cDogLiBcXFwiaWZcXFwiIGV4cCBcXFwidGhlblxcXCIgZXhwIGVsc2VleHBcXGwgIDcgb3BleHA6IC4gZXhwICcrJyBleHBcXGwgIDggaW1tOiAuICcwJ1xcbFwiXQorICAwIC0+IDEgW3N0eWxlPXNvbGlkIGxhYmVsPVwiXFxcImlmXFxcIlwiXQorICAwIC0+IDIgW3N0eWxlPXNvbGlkIGxhYmVsPVwiJzAnXCJdCisgIDAgLT4gMyBbc3R5bGU9ZGFzaGVkIGxhYmVsPVwiZXhwXCJdCisgIDAgLT4gNCBbc3R5bGU9ZGFzaGVkIGxhYmVsPVwiaWZleHBcIl0KKyAgMCAtPiA1IFtzdHlsZT1kYXNoZWQgbGFiZWw9XCJvcGV4cFwiXQorICAwIC0+IDYgW3N0eWxlPWRhc2hlZCBsYWJlbD1cImltbVwiXQorICAxIFtsYWJlbD1cIlN0YXRlIDFcXG5cXGwgIDEgZXhwOiAuIGlmZXhwXFxsICAyICAgIHwgLiBvcGV4cFxcbCAgMyAgICB8IC4gaW1tXFxsICA0IGlmZXhwOiAuIFxcXCJpZlxcXCIgZXhwIFxcXCJ0aGVuXFxcIiBleHAgZWxzZWV4cFxcbCAgNCAgICAgIHwgXFxcImlmXFxcIiAuIGV4cCBcXFwidGhlblxcXCIgZXhwIGVsc2VleHBcXGwgIDcgb3BleHA6IC4gZXhwICcrJyBleHBcXGwgIDggaW1tOiAuICcwJ1xcbFwiXQorICAxIC0+IDEgW3N0eWxlPXNvbGlkIGxhYmVsPVwiXFxcImlmXFxcIlwiXQorICAxIC0+IDIgW3N0eWxlPXNvbGlkIGxhYmVsPVwiJzAnXCJdCisgIDEgLT4gNyBbc3R5bGU9ZGFzaGVkIGxhYmVsPVwiZXhwXCJdCisgIDEgLT4gNCBbc3R5bGU9ZGFzaGVkIGxhYmVsPVwiaWZleHBcIl0KKyAgMSAtPiA1IFtzdHlsZT1kYXNoZWQgbGFiZWw9XCJvcGV4cFwiXQorICAxIC0+IDYgW3N0eWxlPWRhc2hlZCBsYWJlbD1cImltbVwiXQorICAyIFtsYWJlbD1cIlN0YXRlIDJcXG5cXGwgIDggaW1tOiAnMCcgLlxcbFwiXQorICAyIC0+IFwiMlI4XCIgW3N0eWxlPXNvbGlkXQorIFwiMlI4XCIgW2xhYmVsPVwiUjhcIiwgZmlsbGNvbG9yPTMsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgMyBbbGFiZWw9XCJTdGF0ZSAzXFxuXFxsICAwIFwkYWNjZXB0OiBleHAgLiBcJGVuZFxcbCAgNyBvcGV4cDogZXhwIC4gJysnIGV4cFxcbFwiXQorICAzIC0+IDggW3N0eWxlPXNvbGlkIGxhYmVsPVwiXCRlbmRcIl0KKyAgMyAtPiA5IFtzdHlsZT1zb2xpZCBsYWJlbD1cIicrJ1wiXQorICA0IFtsYWJlbD1cIlN0YXRlIDRcXG5cXGwgIDEgZXhwOiBpZmV4cCAuXFxsXCJdCisgIDQgLT4gXCI0UjFcIiBbc3R5bGU9c29saWRdCisgXCI0UjFcIiBbbGFiZWw9XCJSMVwiLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICA1IFtsYWJlbD1cIlN0YXRlIDVcXG5cXGwgIDIgZXhwOiBvcGV4cCAuXFxsXCJdCisgIDUgLT4gXCI1UjJcIiBbc3R5bGU9c29saWRdCisgXCI1UjJcIiBbbGFiZWw9XCJSMlwiLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICA2IFtsYWJlbD1cIlN0YXRlIDZcXG5cXGwgIDMgZXhwOiBpbW0gLlxcbFwiXQorICA2IC0+IFwiNlIzXCIgW3N0eWxlPXNvbGlkXQorIFwiNlIzXCIgW2xhYmVsPVwiUjNcIiwgZmlsbGNvbG9yPTMsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgNyBbbGFiZWw9XCJTdGF0ZSA3XFxuXFxsICA0IGlmZXhwOiBcXFwiaWZcXFwiIGV4cCAuIFxcXCJ0aGVuXFxcIiBleHAgZWxzZWV4cFxcbCAgNyBvcGV4cDogZXhwIC4gJysnIGV4cFxcbFwiXQorICA3IC0+IDEwIFtzdHlsZT1zb2xpZCBsYWJlbD1cIlxcXCJ0aGVuXFxcIlwiXQorICA3IC0+IDkgW3N0eWxlPXNvbGlkIGxhYmVsPVwiJysnXCJdCisgIDggW2xhYmVsPVwiU3RhdGUgOFxcblxcbCAgMCBcJGFjY2VwdDogZXhwIFwkZW5kIC5cXGxcIl0KKyAgOCAtPiBcIjhSMFwiIFtzdHlsZT1zb2xpZF0KKyBcIjhSMFwiIFtsYWJlbD1cIkFjY1wiLCBmaWxsY29sb3I9MSwgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICA5IFtsYWJlbD1cIlN0YXRlIDlcXG5cXGwgIDEgZXhwOiAuIGlmZXhwXFxsICAyICAgIHwgLiBvcGV4cFxcbCAgMyAgICB8IC4gaW1tXFxsICA0IGlmZXhwOiAuIFxcXCJpZlxcXCIgZXhwIFxcXCJ0aGVuXFxcIiBleHAgZWxzZWV4cFxcbCAgNyBvcGV4cDogLiBleHAgJysnIGV4cFxcbCAgNyAgICAgIHwgZXhwICcrJyAuIGV4cFxcbCAgOCBpbW06IC4gJzAnXFxsXCJdCisgIDkgLT4gMSBbc3R5bGU9c29saWQgbGFiZWw9XCJcXFwiaWZcXFwiXCJdCisgIDkgLT4gMiBbc3R5bGU9c29saWQgbGFiZWw9XCInMCdcIl0KKyAgOSAtPiAxMSBbc3R5bGU9ZGFzaGVkIGxhYmVsPVwiZXhwXCJdCisgIDkgLT4gNCBbc3R5bGU9ZGFzaGVkIGxhYmVsPVwiaWZleHBcIl0KKyAgOSAtPiA1IFtzdHlsZT1kYXNoZWQgbGFiZWw9XCJvcGV4cFwiXQorICA5IC0+IDYgW3N0eWxlPWRhc2hlZCBsYWJlbD1cImltbVwiXQorICAxMCBbbGFiZWw9XCJTdGF0ZSAxMFxcblxcbCAgMSBleHA6IC4gaWZleHBcXGwgIDIgICAgfCAuIG9wZXhwXFxsICAzICAgIHwgLiBpbW1cXGwgIDQgaWZleHA6IC4gXFxcImlmXFxcIiBleHAgXFxcInRoZW5cXFwiIGV4cCBlbHNlZXhwXFxsICA0ICAgICAgfCBcXFwiaWZcXFwiIGV4cCBcXFwidGhlblxcXCIgLiBleHAgZWxzZWV4cFxcbCAgNyBvcGV4cDogLiBleHAgJysnIGV4cFxcbCAgOCBpbW06IC4gJzAnXFxsXCJdCisgIDEwIC0+IDEgW3N0eWxlPXNvbGlkIGxhYmVsPVwiXFxcImlmXFxcIlwiXQorICAxMCAtPiAyIFtzdHlsZT1zb2xpZCBsYWJlbD1cIicwJ1wiXQorICAxMCAtPiAxMiBbc3R5bGU9ZGFzaGVkIGxhYmVsPVwiZXhwXCJdCisgIDEwIC0+IDQgW3N0eWxlPWRhc2hlZCBsYWJlbD1cImlmZXhwXCJdCisgIDEwIC0+IDUgW3N0eWxlPWRhc2hlZCBsYWJlbD1cIm9wZXhwXCJdCisgIDEwIC0+IDYgW3N0eWxlPWRhc2hlZCBsYWJlbD1cImltbVwiXQorICAxMSBbbGFiZWw9XCJTdGF0ZSAxMVxcblxcbCAgNyBvcGV4cDogZXhwIC4gJysnIGV4cFxcbCAgNyAgICAgIHwgZXhwICcrJyBleHAgLiAgW1wkZW5kLCBcXFwidGhlblxcXCIsIFxcXCJlbHNlXFxcIiwgJysnXVxcbFwiXQorICAxMSAtPiA5IFtzdHlsZT1zb2xpZCBsYWJlbD1cIicrJ1wiXQorICAxMSAtPiBcIjExUjdkXCIgW2xhYmVsPVwiWycrJ11cIiwgc3R5bGU9c29saWRdCisgXCIxMVI3ZFwiIFtsYWJlbD1cIlI3XCIsIGZpbGxjb2xvcj01LCBzaGFwZT1kaWFtb25kLCBzdHlsZT1maWxsZWRdCisgIDExIC0+IFwiMTFSN1wiIFtzdHlsZT1zb2xpZF0KKyBcIjExUjdcIiBbbGFiZWw9XCJSN1wiLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICAxMiBbbGFiZWw9XCJTdGF0ZSAxMlxcblxcbCAgNCBpZmV4cDogXFxcImlmXFxcIiBleHAgXFxcInRoZW5cXFwiIGV4cCAuIGVsc2VleHBcXGwgIDUgZWxzZWV4cDogLiBcXFwiZWxzZVxcXCIgZXhwXFxsICA2ICAgICAgICB8IC4gIFtcJGVuZCwgXFxcInRoZW5cXFwiLCBcXFwiZWxzZVxcXCIsICcrJ11cXGwgIDcgb3BleHA6IGV4cCAuICcrJyBleHBcXGxcIl0KKyAgMTIgLT4gMTMgW3N0eWxlPXNvbGlkIGxhYmVsPVwiXFxcImVsc2VcXFwiXCJdCisgIDEyIC0+IDkgW3N0eWxlPXNvbGlkIGxhYmVsPVwiJysnXCJdCisgIDEyIC0+IDE0IFtzdHlsZT1kYXNoZWQgbGFiZWw9XCJlbHNlZXhwXCJdCisgIDEyIC0+IFwiMTJSNmRcIiBbbGFiZWw9XCJbXFxcImVsc2VcXFwiLCAnKyddXCIsIHN0eWxlPXNvbGlkXQorIFwiMTJSNmRcIiBbbGFiZWw9XCJSNlwiLCBmaWxsY29sb3I9NSwgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICAxMiAtPiBcIjEyUjZcIiBbc3R5bGU9c29saWRdCisgXCIxMlI2XCIgW2xhYmVsPVwiUjZcIiwgZmlsbGNvbG9yPTMsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KKyAgMTMgW2xhYmVsPVwiU3RhdGUgMTNcXG5cXGwgIDEgZXhwOiAuIGlmZXhwXFxsICAyICAgIHwgLiBvcGV4cFxcbCAgMyAgICB8IC4gaW1tXFxsICA0IGlmZXhwOiAuIFxcXCJpZlxcXCIgZXhwIFxcXCJ0aGVuXFxcIiBleHAgZWxzZWV4cFxcbCAgNSBlbHNlZXhwOiBcXFwiZWxzZVxcXCIgLiBleHBcXGwgIDcgb3BleHA6IC4gZXhwICcrJyBleHBcXGwgIDggaW1tOiAuICcwJ1xcbFwiXQorICAxMyAtPiAxIFtzdHlsZT1zb2xpZCBsYWJlbD1cIlxcXCJpZlxcXCJcIl0KKyAgMTMgLT4gMiBbc3R5bGU9c29saWQgbGFiZWw9XCInMCdcIl0KKyAgMTMgLT4gMTUgW3N0eWxlPWRhc2hlZCBsYWJlbD1cImV4cFwiXQorICAxMyAtPiA0IFtzdHlsZT1kYXNoZWQgbGFiZWw9XCJpZmV4cFwiXQorICAxMyAtPiA1IFtzdHlsZT1kYXNoZWQgbGFiZWw9XCJvcGV4cFwiXQorICAxMyAtPiA2IFtzdHlsZT1kYXNoZWQgbGFiZWw9XCJpbW1cIl0KKyAgMTQgW2xhYmVsPVwiU3RhdGUgMTRcXG5cXGwgIDQgaWZleHA6IFxcXCJpZlxcXCIgZXhwIFxcXCJ0aGVuXFxcIiBleHAgZWxzZWV4cCAuXFxsXCJdCisgIDE0IC0+IFwiMTRSNFwiIFtzdHlsZT1zb2xpZF0KKyBcIjE0UjRcIiBbbGFiZWw9XCJSNFwiLCBmaWxsY29sb3I9Mywgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICAxNSBbbGFiZWw9XCJTdGF0ZSAxNVxcblxcbCAgNSBlbHNlZXhwOiBcXFwiZWxzZVxcXCIgZXhwIC4gIFtcJGVuZCwgXFxcInRoZW5cXFwiLCBcXFwiZWxzZVxcXCIsICcrJ11cXGwgIDcgb3BleHA6IGV4cCAuICcrJyBleHBcXGxcIl0KKyAgMTUgLT4gOSBbc3R5bGU9c29saWQgbGFiZWw9XCInKydcIl0KKyAgMTUgLT4gXCIxNVI1ZFwiIFtsYWJlbD1cIlsnKyddXCIsIHN0eWxlPXNvbGlkXQorIFwiMTVSNWRcIiBbbGFiZWw9XCJSNVwiLCBmaWxsY29sb3I9NSwgc2hhcGU9ZGlhbW9uZCwgc3R5bGU9ZmlsbGVkXQorICAxNSAtPiBcIjE1UjVcIiBbc3R5bGU9c29saWRdCisgXCIxNVI1XCIgW2xhYmVsPVwiUjVcIiwgZmlsbGNvbG9yPTMsIHNoYXBlPWRpYW1vbmQsIHN0eWxlPWZpbGxlZF0KK30KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL291dHB1dC5hdDo1MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzkxCisjQVRfU1RBUlRfOTIKK2F0X2ZuX2dyb3VwX2Jhbm5lciA5MiAnc2tlbGV0b25zLmF0OjI0JyBcCisgICJSZWxhdGl2ZSBza2VsZXRvbiBmaWxlIG5hbWVzIiAiICAgICAgICAgICAgICAgICAgICIgNAorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjkyLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDoyNjogbWtkaXIgdG1wIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAic2tlbGV0b25zLmF0OjI2IgorKCAkYXRfY2hlY2tfdHJhY2U7IG1rZGlyIHRtcAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9za2VsZXRvbnMuYXQ6MjYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+dG1wL3NrZWwuYyA8PCdfQVRFT0YnCittNF9kaXZlcnRfcHVzaCgwKWRubAorQG91dHB1dChiNF9wYXJzZXJfZmlsZV9uYW1lQClkbmwKK2I0X3BlcmNlbnRfZGVmaW5lX2dldChbW3Rlc3RdXSkKK200X2RpdmVydF9wb3AoMCkKK19BVEVPRgorCisKK2NhdCA+c2tlbC5jIDw8J19BVEVPRicKK200X2RpdmVydF9wdXNoKDApZG5sCitAb3V0cHV0KGI0X3BhcnNlcl9maWxlX25hbWVAKWRubAorYjRfcGVyY2VudF9kZWZpbmVfZ2V0KFtbdGVzdF1dKSAtLSBMb2NhbAorbTRfZGl2ZXJ0X3BvcCgwKQorX0FURU9GCisKKworY2F0ID50bXAvaW5wdXQtZ3JhbS55IDw8J19BVEVPRicKKyVza2VsZXRvbiAiLi9za2VsLmMiCislZGVmaW5lIHRlc3QgIkhlbGxvIFdvcmxkIgorJSUKK3N0YXJ0OiA7CitfQVRFT0YKKworCitjYXQgPmlucHV0LWdyYW0ueSA8PCdfQVRFT0YnCislc2tlbGV0b24gIi4vc2tlbC5jIgorJWRlZmluZSB0ZXN0ICJIZWxsbyBXb3JsZCIKKyUlCitzdGFydDogOworX0FURU9GCisKKworY2F0ID50bXAvaW5wdXQtY21kLWxpbmUueSA8PCdfQVRFT0YnCislZGVmaW5lIHRlc3QgIkhlbGxvIFdvcmxkIgorJSUKK3N0YXJ0OiA7CitfQVRFT0YKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDo2MjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IHRtcC9pbnB1dC1ncmFtLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJza2VsZXRvbnMuYXQ6NjIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgdG1wL2lucHV0LWdyYW0ueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjYyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjYyOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCB0bXAvaW5wdXQtZ3JhbS55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIHRtcC9pbnB1dC1ncmFtLnkiICJza2VsZXRvbnMuYXQ6NjIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgdG1wL2lucHV0LWdyYW0ueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjYyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDo2MjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInNrZWxldG9ucy5hdDo2MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9za2VsZXRvbnMuYXQ6NjIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9za2VsZXRvbnMuYXQ6NjI6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJza2VsZXRvbnMuYXQ6NjIiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjYyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjYyOiBiaXNvbiB0bXAvaW5wdXQtZ3JhbS55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAic2tlbGV0b25zLmF0OjYyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIHRtcC9pbnB1dC1ncmFtLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjYyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjYzOiBjYXQgaW5wdXQtZ3JhbS50YWIuYyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInNrZWxldG9ucy5hdDo2MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgaW5wdXQtZ3JhbS50YWIuYworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIkhlbGxvIFdvcmxkCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9za2VsZXRvbnMuYXQ6NjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjY3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgaW5wdXQtZ3JhbS55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAic2tlbGV0b25zLmF0OjY3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IGlucHV0LWdyYW0ueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjY3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjY3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBpbnB1dC1ncmFtLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgaW5wdXQtZ3JhbS55IiAic2tlbGV0b25zLmF0OjY3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIGlucHV0LWdyYW0ueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjY3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDo2NzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInNrZWxldG9ucy5hdDo2NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9za2VsZXRvbnMuYXQ6NjciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9za2VsZXRvbnMuYXQ6Njc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJza2VsZXRvbnMuYXQ6NjciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjY3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjY3OiBiaXNvbiBpbnB1dC1ncmFtLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJza2VsZXRvbnMuYXQ6NjciCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gaW5wdXQtZ3JhbS55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDo2NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDo2ODogY2F0IGlucHV0LWdyYW0udGFiLmMiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJza2VsZXRvbnMuYXQ6NjgiCisoICRhdF9jaGVja190cmFjZTsgY2F0IGlucHV0LWdyYW0udGFiLmMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJIZWxsbyBXb3JsZCAtLSBMb2NhbAorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjY4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDo3MjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tc2tlbGV0b249dG1wL3NrZWwuYyB0bXAvaW5wdXQtY21kLWxpbmUueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInNrZWxldG9ucy5hdDo3MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXNrZWxldG9uPXRtcC9za2VsLmMgdG1wL2lucHV0LWNtZC1saW5lLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDo3MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDo3MjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1za2VsZXRvbj10bXAvc2tlbC5jIHRtcC9pbnB1dC1jbWQtbGluZS55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tc2tlbGV0b249dG1wL3NrZWwuYyB0bXAvaW5wdXQtY21kLWxpbmUueSIgInNrZWxldG9ucy5hdDo3MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXNrZWxldG9uPXRtcC9za2VsLmMgdG1wL2lucHV0LWNtZC1saW5lLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDo3MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9za2VsZXRvbnMuYXQ6NzI6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJza2VsZXRvbnMuYXQ6NzIiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjcyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjcyOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAic2tlbGV0b25zLmF0OjcyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDo3MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDo3MjogYmlzb24gLS1za2VsZXRvbj10bXAvc2tlbC5jIHRtcC9pbnB1dC1jbWQtbGluZS55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAic2tlbGV0b25zLmF0OjcyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC0tc2tlbGV0b249dG1wL3NrZWwuYyB0bXAvaW5wdXQtY21kLWxpbmUueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9za2VsZXRvbnMuYXQ6NzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9za2VsZXRvbnMuYXQ6NzM6IGNhdCBpbnB1dC1jbWQtbGluZS50YWIuYyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInNrZWxldG9ucy5hdDo3MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgaW5wdXQtY21kLWxpbmUudGFiLmMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJIZWxsbyBXb3JsZAorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjczIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzkyCisjQVRfU1RBUlRfOTMKK2F0X2ZuX2dyb3VwX2Jhbm5lciA5MyAnc2tlbGV0b25zLmF0Ojg0JyBcCisgICJJbnN0YWxsZWQgc2tlbGV0b24gZmlsZSBuYW1lcyIgIiAgICAgICAgICAgICAgICAgICIgNAorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjkzLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworCisKKworY2F0ID5pbnB1dC1jbWQtbGluZS55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyV7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgaW50IHl5bGV4ICh2b2lkKTsKKyV9CisKKyVlcnJvci12ZXJib3NlCisldG9rZW4gJ2EnCisKKyUlCisKK3N0YXJ0OiA7CisKKyUlCisKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CitpbnQKK3l5bGV4ICh2b2lkKQoreworICByZXR1cm4gJ2EnOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCitjYXQgPmlucHV0LWdyYW0ueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislc2tlbGV0b24gInlhY2MuYyIKKyV7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgaW50IHl5bGV4ICh2b2lkKTsKKyV9CisKKyVlcnJvci12ZXJib3NlCisldG9rZW4gJ2EnCisKKyUlCisKK3N0YXJ0OiA7CisKKyUlCisKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CitpbnQKK3l5bGV4ICh2b2lkKQoreworICByZXR1cm4gJ2EnOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDoxMjQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXNrZWxldG9uPXlhY2MuYyAtbyBpbnB1dC1jbWQtbGluZS5jIGlucHV0LWNtZC1saW5lLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJza2VsZXRvbnMuYXQ6MTI0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tc2tlbGV0b249eWFjYy5jIC1vIGlucHV0LWNtZC1saW5lLmMgaW5wdXQtY21kLWxpbmUueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjEyNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDoxMjQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tc2tlbGV0b249eWFjYy5jIC1vIGlucHV0LWNtZC1saW5lLmMgaW5wdXQtY21kLWxpbmUueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXNrZWxldG9uPXlhY2MuYyAtbyBpbnB1dC1jbWQtbGluZS5jIGlucHV0LWNtZC1saW5lLnkiICJza2VsZXRvbnMuYXQ6MTI0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tc2tlbGV0b249eWFjYy5jIC1vIGlucHV0LWNtZC1saW5lLmMgaW5wdXQtY21kLWxpbmUueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjEyNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9za2VsZXRvbnMuYXQ6MTI0OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAic2tlbGV0b25zLmF0OjEyNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9za2VsZXRvbnMuYXQ6MTI0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjEyNDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInNrZWxldG9ucy5hdDoxMjQiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjEyNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDoxMjQ6IGJpc29uIC0tc2tlbGV0b249eWFjYy5jIC1vIGlucHV0LWNtZC1saW5lLmMgaW5wdXQtY21kLWxpbmUueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInNrZWxldG9ucy5hdDoxMjQiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLS1za2VsZXRvbj15YWNjLmMgLW8gaW5wdXQtY21kLWxpbmUuYyBpbnB1dC1jbWQtbGluZS55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDoxMjQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9za2VsZXRvbnMuYXQ6MTI1OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAic2tlbGV0b25zLmF0OjEyNSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjEyNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9za2VsZXRvbnMuYXQ6MTI1OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0LWNtZC1saW5lIGlucHV0LWNtZC1saW5lLmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQtY21kLWxpbmUgaW5wdXQtY21kLWxpbmUuYyAkTElCUyIgInNrZWxldG9ucy5hdDoxMjUiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0LWNtZC1saW5lIGlucHV0LWNtZC1saW5lLmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDoxMjUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjEyNjogIFwkUFJFUEFSU0VSIC4vaW5wdXQtY21kLWxpbmUiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQtY21kLWxpbmUiICJza2VsZXRvbnMuYXQ6MTI2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQtY21kLWxpbmUKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDoxMjYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjEyNjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJza2VsZXRvbnMuYXQ6MTI2IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICdhJywgZXhwZWN0aW5nIFwkZW5kCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9za2VsZXRvbnMuYXQ6MTI2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjEzMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LWdyYW0uYyBpbnB1dC1ncmFtLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJza2VsZXRvbnMuYXQ6MTMwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LWdyYW0uYyBpbnB1dC1ncmFtLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDoxMzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9za2VsZXRvbnMuYXQ6MTMwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC1ncmFtLmMgaW5wdXQtZ3JhbS55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LWdyYW0uYyBpbnB1dC1ncmFtLnkiICJza2VsZXRvbnMuYXQ6MTMwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LWdyYW0uYyBpbnB1dC1ncmFtLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDoxMzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjEzMDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInNrZWxldG9ucy5hdDoxMzAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjEzMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDoxMzA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJza2VsZXRvbnMuYXQ6MTMwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDoxMzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9za2VsZXRvbnMuYXQ6MTMwOiBiaXNvbiAtbyBpbnB1dC1ncmFtLmMgaW5wdXQtZ3JhbS55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAic2tlbGV0b25zLmF0OjEzMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC1ncmFtLmMgaW5wdXQtZ3JhbS55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDoxMzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9za2VsZXRvbnMuYXQ6MTMxOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAic2tlbGV0b25zLmF0OjEzMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjEzMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9za2VsZXRvbnMuYXQ6MTMxOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0LWdyYW0gaW5wdXQtZ3JhbS5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0LWdyYW0gaW5wdXQtZ3JhbS5jICRMSUJTIiAic2tlbGV0b25zLmF0OjEzMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQtZ3JhbSBpbnB1dC1ncmFtLmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDoxMzEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjEzMjogIFwkUFJFUEFSU0VSIC4vaW5wdXQtZ3JhbSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dC1ncmFtIiAic2tlbGV0b25zLmF0OjEzMiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0LWdyYW0KKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDoxMzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjEzMjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJza2VsZXRvbnMuYXQ6MTMyIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICdhJywgZXhwZWN0aW5nIFwkZW5kCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9za2VsZXRvbnMuYXQ6MTMyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfOTMKKyNBVF9TVEFSVF85NAorYXRfZm5fZ3JvdXBfYmFubmVyIDk0ICdza2VsZXRvbnMuYXQ6MTQ2JyBcCisgICIlZGVmaW5lIEJvb2xlYW4gdmFyaWFibGVzOiBpbnZhbGlkIHNrZWxldG9uIGRlZmF1bHRzIiAiIiA0CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiOTQuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCitjYXQgPnNrZWwuYyA8PCdfQVRFT0YnCitiNF9wZXJjZW50X2RlZmluZV9kZWZhdWx0KFtbZm9vXV0sIFtbYm9ndXMgdmFsdWVdXSkKK2I0X3BlcmNlbnRfZGVmaW5lX2ZsYWdfaWYoW1tmb29dXSkKK19BVEVPRgorCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislc2tlbGV0b24gIi4vc2tlbC5jIgorJSUKK3N0YXJ0OiA7CitfQVRFT0YKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9za2VsZXRvbnMuYXQ6MTU5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IiAic2tlbGV0b25zLmF0OjE1OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICI8c2tlbGV0b24gZGVmYXVsdCB2YWx1ZT46IGVycm9yOiBpbnZhbGlkIHZhbHVlIGZvciAlZGVmaW5lIEJvb2xlYW4gdmFyaWFibGUgJ2ZvbycKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDoxNTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF85NAorI0FUX1NUQVJUXzk1CithdF9mbl9ncm91cF9iYW5uZXIgOTUgJ3NrZWxldG9ucy5hdDoxNzAnIFwKKyAgIkNvbXBsYWluaW5nIGR1cmluZyBtYWNybyBhcmd1bWVudCBleHBhbnNpb24iICIgICAgIiA0CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiOTUuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCitjYXQgPnNrZWwxLmMgPDwnX0FURU9GJworbTRfZGVmaW5lKFtmb293XSwgW2I0X3dhcm4oW1tmb293IGZ1YmFyXV0pXSkKK200X2RlZmluZShbZm9vd2F0XSwgW2I0X3dhcm5fYXQoW1tmb293Lnk6Mi4zXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2Zvb3cueTo1LjRdXSwgW1tmb293YXQgZnViYXJdXSldKQorbTRfZGVmaW5lKFtmb29jXSwgW2I0X2NvbXBsYWluKFtbZm9vYyBmdWJhcl1dKV0pCittNF9kZWZpbmUoW2Zvb2NhdF0sIFtiNF9jb21wbGFpbl9hdChbW2Zvb2MueToxLjFdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2Zvb2MueToxMC42XV0sIFtbZm9vY2F0IGZ1YmFyXV0pXSkKK200X2RlZmluZShbZm9vZl0sIFtiNF9mYXRhbChbW2Zvb2YgZnViYXJdXSldKQorbTRfaWYoZm9vdywgWzFdLCBbeWVzXSkKK200X2lmKGZvb3dhdCwgWzFdLCBbeWVzXSkKK200X2lmKGZvb2MsIFsxXSwgW3llc10pCittNF9pZihmb29jYXQsIFsxXSwgW3llc10pCittNF9pZihmb29mLCBbMV0sIFt5ZXNdKQorX0FURU9GCisKKworY2F0ID5pbnB1dDEueSA8PCdfQVRFT0YnCislc2tlbGV0b24gIi4vc2tlbDEuYyIKKyUlCitzdGFydDogOworX0FURU9GCisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjE5MzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dDEueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0MS55IiAic2tlbGV0b25zLmF0OjE5MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0MS55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQxLnk6IHdhcm5pbmc6IGZvb3cgZnViYXIKK2Zvb3cueToyLjMtNS4zOiB3YXJuaW5nOiBmb293YXQgZnViYXIKK2lucHV0MS55OiBlcnJvcjogZm9vYyBmdWJhcgorZm9vYy55OjEuMS0xMC41OiBlcnJvcjogZm9vY2F0IGZ1YmFyCitpbnB1dDEueTogZmF0YWwgZXJyb3I6IGZvb2YgZnViYXIKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDoxOTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5za2VsMi5jIDw8J19BVEVPRicKK200X2RlZmluZShbZm9vZmF0XSwgW2I0X2ZhdGFsX2F0KFtbZm9vZi55OjEyLjExXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2Zvb2YueToxMDAuMTIzXV0sIFtbZm9vZmF0IGZ1YmFyXV0pXSkKK200X2lmKGZvb2ZhdCwgWzFdLCBbeWVzXSkKK19BVEVPRgorCisKK2NhdCA+aW5wdXQyLnkgPDwnX0FURU9GJworJXNrZWxldG9uICIuL3NrZWwyLmMiCislJQorc3RhcnQ6IDsKK19BVEVPRgorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDoyMTM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dDIueSIgInNrZWxldG9ucy5hdDoyMTMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dDIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImZvb2YueToxMi4xMS0xMDAuMTIyOiBmYXRhbCBlcnJvcjogZm9vZmF0IGZ1YmFyCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9za2VsZXRvbnMuYXQ6MjEzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK2NhdCA+c2tlbDMuYyA8PCdfQVRFT0YnCitiNF9jb21wbGFpbl9hdChiNF9wZXJjZW50X2RlZmluZV9nZXRfbG9jKFtbYm9ndXNdXSksIFtbYmFkIHZhbHVlXV0pCitfQVRFT0YKKworCitjYXQgPmlucHV0My55IDw8J19BVEVPRicKKyVza2VsZXRvbiAiLi9za2VsMy5jIgorJSUKK3N0YXJ0OiA7CitfQVRFT0YKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9za2VsZXRvbnMuYXQ6MjI3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0My55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQzLnkiICJza2VsZXRvbnMuYXQ6MjI3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQzLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dDMueTogZmF0YWwgZXJyb3I6IGI0X3BlcmNlbnRfZGVmaW5lX2dldF9sb2M6IHVuZGVmaW5lZCAlZGVmaW5lIHZhcmlhYmxlICdib2d1cycKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDoyMjciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5za2VsNC5jIDw8J19BVEVPRicKK2I0X3dhcm5fYXQoYjRfcGVyY2VudF9kZWZpbmVfZ2V0X3N5bmNsaW5lKFtbYm9ndXNdXSksIFtbYmFkIHZhbHVlXV0pCitfQVRFT0YKKworCitjYXQgPmlucHV0NC55IDw8J19BVEVPRicKKyVza2VsZXRvbiAiLi9za2VsNC5jIgorJSUKK3N0YXJ0OiA7CitfQVRFT0YKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9za2VsZXRvbnMuYXQ6MjQxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0NC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQ0LnkiICJza2VsZXRvbnMuYXQ6MjQxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQ0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dDQueTogZmF0YWwgZXJyb3I6IGI0X3BlcmNlbnRfZGVmaW5lX2dldF9zeW5jbGluZTogdW5kZWZpbmVkICVkZWZpbmUgdmFyaWFibGUgJ2JvZ3VzJworIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjI0MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzk1CisjQVRfU1RBUlRfOTYKK2F0X2ZuX2dyb3VwX2Jhbm5lciA5NiAnc2tlbGV0b25zLmF0OjI1MicgXAorICAiRmF0YWwgZXJyb3JzIG1ha2UgTTQgZXhpdCBpbW1lZGlhdGVseSIgIiAgICAgICAgICAiIDQKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI5Ni4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2NhdCA+c2tlbDEuYyA8PCdfQVRFT0YnCitiNF9jb21wbGFpbihbW25vbi1mYXRhbCBlcnJvcl1dKQorYjRfZmF0YWwoW1tNNCBzaG91bGQgZXhpdCBpbW1lZGlhdGVseSBoZXJlXV0pCittNF9mYXRhbChbdGhpcyBzaG91bGQgbmV2ZXIgYmUgZXZhbHVhdGVkXSkKK19BVEVPRgorCisKK2NhdCA+aW5wdXQxLnkgPDwnX0FURU9GJworJXNrZWxldG9uICIuL3NrZWwxLmMiCislJQorc3RhcnQ6IDsKK19BVEVPRgorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDoyNjY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQxLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dDEueSIgInNrZWxldG9ucy5hdDoyNjYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dDEueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0MS55OiBlcnJvcjogbm9uLWZhdGFsIGVycm9yCitpbnB1dDEueTogZmF0YWwgZXJyb3I6IE00IHNob3VsZCBleGl0IGltbWVkaWF0ZWx5IGhlcmUKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDoyNjYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5za2VsMi5jIDw8J19BVEVPRicKK2I0X3dhcm4oW1ttb3JuaW5nXV0pCitiNF9mYXRhbF9hdChbW2Zvby55OjEuNV1dLCBbW2Zvby55OjEuN11dLCBbW000IHNob3VsZCBleGl0IGltbWVkaWF0ZWx5IGhlcmVdXSkKK200X2ZhdGFsKFt0aGlzIHNob3VsZCBuZXZlciBiZSBldmFsdWF0ZWRdKQorX0FURU9GCisKKworY2F0ID5pbnB1dDIueSA8PCdfQVRFT0YnCislc2tlbGV0b24gIi4vc2tlbDIuYyIKKyUlCitzdGFydDogOworX0FURU9GCisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjI4MzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dDIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0Mi55IiAic2tlbGV0b25zLmF0OjI4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0Mi55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQyLnk6IHdhcm5pbmc6IG1vcm5pbmcKK2Zvby55OjEuNS02OiBmYXRhbCBlcnJvcjogTTQgc2hvdWxkIGV4aXQgaW1tZWRpYXRlbHkgaGVyZQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjI4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzk2CisjQVRfU1RBUlRfOTcKK2F0X2ZuX2dyb3VwX2Jhbm5lciA5NyAnc2tlbGV0b25zLmF0OjMwNicgXAorICAiRmF0YWwgZXJyb3JzIGJ1dCBNNCBjb250aW51ZXMgcHJvZHVjaW5nIG91dHB1dCIgIiAiIDQKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI5Ny4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2NhdCA+Z2VuLXNrZWwucGwgPDwnX0FURU9GJwordXNlIHdhcm5pbmdzOwordXNlIHN0cmljdDsKK215ICRNNCA9ICJtNCI7CitteSAkRE5MID0gImQiLiJubCI7CitwcmludCAiJHtNNH1fZGl2ZXJ0X3B1c2goMCkkRE5MXG4iOworcHJpbnQgJ0BvdXRwdXQoQCxAKScsICJcbiI7CisocHJpbnQgImdhcmJhZ2UieDEwLCAiXG4iKSBmb3IgKDEuLjEwMDApOworcHJpbnQgIiR7TTR9X2RpdmVydF9wb3AoMClcbiI7CitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDozMTg6IFwkUEVSTCBnZW4tc2tlbC5wbCA+IHNrZWwuYyB8fCBleGl0IDc3IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkUEVSTCBnZW4tc2tlbC5wbCA+IHNrZWwuYyB8fCBleGl0IDc3IiAic2tlbGV0b25zLmF0OjMxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCBnZW4tc2tlbC5wbCA+IHNrZWwuYyB8fCBleGl0IDc3CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NrZWxldG9ucy5hdDozMTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislc2tlbGV0b24gIi4vc2tlbC5jIgorJSUKK3N0YXJ0OiA7CitfQVRFT0YKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9za2VsZXRvbnMuYXQ6MzI2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IiAic2tlbGV0b25zLmF0OjMyNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OiBmYXRhbCBlcnJvcjogdG9vIG1hbnkgYXJndW1lbnRzIGZvciBAb3V0cHV0IGRpcmVjdGl2ZSBpbiBza2VsZXRvbgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2tlbGV0b25zLmF0OjMyNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzk3CisjQVRfU1RBUlRfOTgKK2F0X2ZuX2dyb3VwX2Jhbm5lciA5OCAnc2V0cy5hdDo2NicgXAorICAiTnVsbGFibGUiICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDUKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICI5OC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKICMgQXQgc29tZSBwb2ludCwgbnVsbGFibGUgaGFkIGJlZW4gc21va2luZyBncmFzcywgYW5kIG1hbmFnZWQgdG8gc2F5OgpAQCAtMzUxMCwzMCArMjA3NDksOTEgQEAKIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAic2V0cy5hdDo4MTogYmlzb24gLS10cmFjZT1zZXRzIGlucHV0LnkiCi1lY2hvIHNldHMuYXQ6ODEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC0tdHJhY2U9c2V0cyBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAic2V0cy5hdDo4MTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zZXRzLmF0OjgxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS10cmFjZT1zZXRzIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJzZXRzLmF0OjgxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tdHJhY2U9c2V0cyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zZXRzLmF0OjgxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zZXRzLmF0OjgxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXRyYWNlPXNldHMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXRyYWNlPXNldHMgaW5wdXQueSIgInNldHMuYXQ6ODEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS10cmFjZT1zZXRzIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NldHMuYXQ6ODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc2V0cy5hdDo4MTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInNldHMuYXQ6ODEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2V0cy5hdDo4MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3NldHMuYXQ6ODE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJzZXRzLmF0OjgxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NldHMuYXQ6ODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zZXRzLmF0OjgxOiBiaXNvbiAtLXRyYWNlPXNldHMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInNldHMuYXQ6ODEiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLS10cmFjZT1zZXRzIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NldHMuYXQ6ODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiBjYXQgPmV4dHJhY3Quc2VkIDw8J19BVEVPRicKICNuCkBAIC0zNTYzLDY3ICsyMDg2Myw0MiBAQAogfQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAic2V0cy5hdDo4Mjogc2VkIC1mIGV4dHJhY3Quc2VkIHN0ZGVyciIKLWVjaG8gc2V0cy5hdDo4MiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2Vvbjsgc2VkIC1mIGV4dHJhY3Quc2VkIHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvIHN0ZG91dDo7IHRlZSBzdGRvdXQgPCRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInNldHMuYXQ6ODI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zZXRzLmF0OjgyOiBzZWQgLWYgZXh0cmFjdC5zZWQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAic2V0cy5hdDo4MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgLWYgZXh0cmFjdC5zZWQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IHRlZSBzdGRvdXQgPCIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zZXRzLmF0OjgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gInNldHMuYXQ6ODI6IG12IHN0ZG91dCBzZXRzIgotZWNobyBzZXRzLmF0OjgyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBtdiBzdGRvdXQgc2V0cyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJzZXRzLmF0OjgyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zZXRzLmF0OjgyOiBtdiBzdGRvdXQgc2V0cyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInNldHMuYXQ6ODIiCisoICRhdF9jaGVja190cmFjZTsgbXYgc3Rkb3V0IHNldHMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2V0cy5hdDo4MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJzZXRzLmF0OjEwNzogY2F0IHNldHMiCi1lY2hvIHNldHMuYXQ6MTA3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc2V0cyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvID4+JGF0X3N0ZG91dDsgZWNobyAiREVSSVZFUworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3NldHMuYXQ6ODM6IGNhdCBzZXRzIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAic2V0cy5hdDo4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc2V0cworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIkRFUklWRVMKIAlcJGFjY2VwdCBkZXJpdmVzCiAJCSAgMCAgZSBcJGVuZAogCWUgZGVyaXZlcwpAQCAtMzY0NiwzNyArMjA5MjEsMjUgQEAKIAllIGRlcml2ZXMKIAkJICAxICAnZScKIAkJICAyICAvKiBlbXB0eSAqLwotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAic2V0cy5hdDoxMDc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2V0cy5hdDo4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Ci0KLSAgMzIgKSAjIDMyLiBzZXRzLmF0OjE1MTogQnJva2VuIENsb3N1cmUKLSAgICBhdF9zZXR1cF9saW5lPSdzZXRzLmF0OjE1MScKLSAgICBhdF9kZXNjPSdCcm9rZW4gQ2xvc3VyZScKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDMyOiBCcm9rZW4gQ2xvc3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiMzIuIHNldHMuYXQ6MTUxOiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzk4CisjQVRfU1RBUlRfOTkKK2F0X2ZuX2dyb3VwX2Jhbm5lciA5OSAnc2V0cy5hdDoxNTEnIFwKKyAgIkJyb2tlbiBDbG9zdXJlIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiA1CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiOTkuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiBjYXQgPmlucHV0LnkgPDwnX0FURU9GJwpAQCAtMzY5Miw0MiArMjA5NTUsMTAyIEBACiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInNldHMuYXQ6MTY1OiBiaXNvbiAtLXRyYWNlPXNldHMgaW5wdXQueSIKLWVjaG8gc2V0cy5hdDoxNjUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC0tdHJhY2U9c2V0cyBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAic2V0cy5hdDoxNjU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc2V0cy5hdDoxNjU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXRyYWNlPXNldHMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInNldHMuYXQ6MTY1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tdHJhY2U9c2V0cyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zZXRzLmF0OjE2NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc2V0cy5hdDoxNjU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tdHJhY2U9c2V0cyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tdHJhY2U9c2V0cyBpbnB1dC55IiAic2V0cy5hdDoxNjUiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS10cmFjZT1zZXRzIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NldHMuYXQ6MTY1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3NldHMuYXQ6MTY1OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAic2V0cy5hdDoxNjUiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2V0cy5hdDoxNjUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zZXRzLmF0OjE2NTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInNldHMuYXQ6MTY1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NldHMuYXQ6MTY1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc2V0cy5hdDoxNjU6IGJpc29uIC0tdHJhY2U9c2V0cyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAic2V0cy5hdDoxNjUiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLS10cmFjZT1zZXRzIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NldHMuYXQ6MTY1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInNldHMuYXQ6MTgzOiBzZWQgLW4gJ3MvWwkgXSpcJC8vOy9eUlRDOiBGaXJzdHMgT3V0cHV0IEJFR0lOLywvXlJUQzogRmlyc3RzIE91dHB1dCBFTkQvcCcgc3RkZXJyIgotZWNobyBzZXRzLmF0OjE4MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2Vvbjsgc2VkIC1uICdzL1sJIF0qJC8vOy9eUlRDOiBGaXJzdHMgT3V0cHV0IEJFR0lOLywvXlJUQzogRmlyc3RzIE91dHB1dCBFTkQvcCcgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gPj4kYXRfc3Rkb3V0OyBlY2hvICJSVEM6IEZpcnN0cyBPdXRwdXQgQkVHSU4KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3NldHMuYXQ6MTY3OiBzZWQgLW4gJ3MvWwkgXSpcJC8vOy9eUlRDOiBGaXJzdHMgT3V0cHV0IEJFR0lOLywvXlJUQzogRmlyc3RzIE91dHB1dCBFTkQvcCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJzZWQgLW4gJ3MvWwkgXSokLy87L15SVEM6IEZpcnN0cyBPdXRwdXQgQkVHSU4vLC9eUlRDOiBGaXJzdHMgT3V0cHV0IEVORC9wJyBzdGRlcnIiICJzZXRzLmF0OjE2NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgLW4gJ3MvWwkgXSokLy87L15SVEM6IEZpcnN0cyBPdXRwdXQgQkVHSU4vLC9eUlRDOiBGaXJzdHMgT3V0cHV0IEVORC9wJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJSVEM6IEZpcnN0cyBPdXRwdXQgQkVHSU4KIAogICAgMDEyMzQ1Njc4CiAgIC4tLS0tLS0tLS0uCkBAIC0zNzQyLDM3ICsyMTA2NSwyNSBAQAogIDh8ICAgICAgICAxfAogICBcYC0tLS0tLS0tLScKIFJUQzogRmlyc3RzIE91dHB1dCBFTkQKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInNldHMuYXQ6MTgzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NldHMuYXQ6MTY3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICAzMyApICMgMzMuIHNldHMuYXQ6MTkzOiBGaXJzdHMKLSAgICBhdF9zZXR1cF9saW5lPSdzZXRzLmF0OjE5MycKLSAgICBhdF9kZXNjPSdGaXJzdHMnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiAzMzogRmlyc3RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjMzLiBzZXRzLmF0OjE5MzogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF85OQorI0FUX1NUQVJUXzEwMAorYXRfZm5fZ3JvdXBfYmFubmVyIDEwMCAnc2V0cy5hdDoxOTMnIFwKKyAgIkZpcnN0cyIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiA1CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTAwLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogY2F0ID5pbnB1dC55IDw8J19BVEVPRicKQEAgLTM3OTIsMzAgKzIxMTAzLDkxIEBACiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInNldHMuYXQ6MjExOiBiaXNvbiAtLXRyYWNlPXNldHMgaW5wdXQueSIKLWVjaG8gc2V0cy5hdDoyMTEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC0tdHJhY2U9c2V0cyBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAic2V0cy5hdDoyMTE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc2V0cy5hdDoyMTE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXRyYWNlPXNldHMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInNldHMuYXQ6MjExIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tdHJhY2U9c2V0cyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zZXRzLmF0OjIxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc2V0cy5hdDoyMTE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tdHJhY2U9c2V0cyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tdHJhY2U9c2V0cyBpbnB1dC55IiAic2V0cy5hdDoyMTEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS10cmFjZT1zZXRzIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NldHMuYXQ6MjExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3NldHMuYXQ6MjExOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAic2V0cy5hdDoyMTEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2V0cy5hdDoyMTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zZXRzLmF0OjIxMTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInNldHMuYXQ6MjExIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NldHMuYXQ6MjExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc2V0cy5hdDoyMTE6IGJpc29uIC0tdHJhY2U9c2V0cyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAic2V0cy5hdDoyMTEiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLS10cmFjZT1zZXRzIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NldHMuYXQ6MjExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogY2F0ID5leHRyYWN0LnNlZCA8PCdfQVRFT0YnCiAjbgpAQCAtMzg0NSw2NyArMjEyMTcsNDIgQEAKIH0KIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInNldHMuYXQ6MjEyOiBzZWQgLWYgZXh0cmFjdC5zZWQgc3RkZXJyIgotZWNobyBzZXRzLmF0OjIxMiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2Vvbjsgc2VkIC1mIGV4dHJhY3Quc2VkIHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvIHN0ZG91dDo7IHRlZSBzdGRvdXQgPCRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInNldHMuYXQ6MjEyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc2V0cy5hdDoyMTI6IHNlZCAtZiBleHRyYWN0LnNlZCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJzZXRzLmF0OjIxMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgLWYgZXh0cmFjdC5zZWQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IHRlZSBzdGRvdXQgPCIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zZXRzLmF0OjIxMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJzZXRzLmF0OjIxMjogbXYgc3Rkb3V0IHNldHMiCi1lY2hvIHNldHMuYXQ6MjEyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBtdiBzdGRvdXQgc2V0cyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJzZXRzLmF0OjIxMjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc2V0cy5hdDoyMTI6IG12IHN0ZG91dCBzZXRzIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAic2V0cy5hdDoyMTIiCisoICRhdF9jaGVja190cmFjZTsgbXYgc3Rkb3V0IHNldHMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2V0cy5hdDoyMTIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSRhdF90cmFjZW9mZgotZWNobyAic2V0cy5hdDoyNTI6IGNhdCBzZXRzIgotZWNobyBzZXRzLmF0OjI1MiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHNldHMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gIkRFUklWRVMKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zZXRzLmF0OjIxMzogY2F0IHNldHMiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJzZXRzLmF0OjIxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc2V0cworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIkRFUklWRVMKIAlcJGFjY2VwdCBkZXJpdmVzCiAJCSAgMCAgZXhwIFwkZW5kCiAJZXhwIGRlcml2ZXMKQEAgLTM5NDMsMzcgKzIxMjkwLDI1IEBACiAJCSAgNSAgZXhwICdeJyBleHAKIAkJICA2ICBleHAgJz0nIGV4cAogCQkgIDcgIFwiZXhwXCIKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInNldHMuYXQ6MjUyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NldHMuYXQ6MjEzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICAzNCApICMgMzQuIHNldHMuYXQ6MjY5OiBBY2NlcHQKLSAgICBhdF9zZXR1cF9saW5lPSdzZXRzLmF0OjI2OScKLSAgICBhdF9kZXNjPSdBY2NlcHQnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiAzNDogQWNjZXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjM0LiBzZXRzLmF0OjI2OTogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xMDAKKyNBVF9TVEFSVF8xMDEKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxMDEgJ3NldHMuYXQ6MjY5JyBcCisgICJBY2NlcHQiICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgNQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjEwMS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIGNhdCA+aW5wdXQueSA8PCdfQVRFT0YnCkBAIC0zOTg3LDY0ICsyMTMyMiwxMTMgQEAKIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAic2V0cy5hdDoyODE6IGJpc29uIC12IC1vIGlucHV0LmMgaW5wdXQueSIKLWVjaG8gc2V0cy5hdDoyODEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC12IC1vIGlucHV0LmMgaW5wdXQueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJzZXRzLmF0OjI4MTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zZXRzLmF0OjI4MTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC12IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInNldHMuYXQ6MjgxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC12IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2V0cy5hdDoyODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3NldHMuYXQ6MjgxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtdiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLXYgLW8gaW5wdXQuYyBpbnB1dC55IiAic2V0cy5hdDoyODEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLXYgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zZXRzLmF0OjI4MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zZXRzLmF0OjI4MTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInNldHMuYXQ6MjgxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NldHMuYXQ6MjgxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc2V0cy5hdDoyODE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJzZXRzLmF0OjI4MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zZXRzLmF0OjI4MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3NldHMuYXQ6MjgxOiBiaXNvbiAtdiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJzZXRzLmF0OjI4MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtdiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc2V0cy5hdDoyODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgR2V0IHRoZSBmaW5hbCBzdGF0ZSBpbiB0aGUgcGFyc2VyLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJzZXRzLmF0OjI4NTogc2VkIC1uICdzLy4qZGVmaW5lIFlZRklOQUwgKlxcKFswLTldWzAtOV0qXFwpL2ZpbmFsIHN0YXRlIFxcMS9wJyBpbnB1dC5jIgotZWNobyBzZXRzLmF0OjI4NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2Vvbjsgc2VkIC1uICdzLy4qZGVmaW5lIFlZRklOQUwgKlwoWzAtOV1bMC05XSpcKS9maW5hbCBzdGF0ZSBcMS9wJyBpbnB1dC5jICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gc3Rkb3V0OjsgdGVlIHN0ZG91dCA8JGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAic2V0cy5hdDoyODU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3NldHMuYXQ6Mjg0OiBzZWQgLW4gJ3MvLipkZWZpbmUgWVlGSU5BTCAqXFwoWzAtOV1bMC05XSpcXCkvZmluYWwgc3RhdGUgXFwxL3AnIGlucHV0LmMiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJzZXRzLmF0OjI4NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgLW4gJ3MvLipkZWZpbmUgWVlGSU5BTCAqXChbMC05XVswLTldKlwpL2ZpbmFsIHN0YXRlIFwxL3AnIGlucHV0LmMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgdGVlIHN0ZG91dCA8IiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NldHMuYXQ6Mjg0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogbXYgc3Rkb3V0IGV4cG91dAogCiAjIEdldCB0aGUgZmluYWwgc3RhdGUgaW4gdGhlIHJlcG9ydCwgZnJvbSB0aGUgImFjY2VwdCIgYWN0aW9uLi4KLSRhdF90cmFjZW9mZgotZWNobyAic2V0cy5hdDozMDA6IHNlZCAtbiAnCi0gICAgICAgICAgIC9ec3RhdGUgXFwoLipcXCkveworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3NldHMuYXQ6Mjg5OiBzZWQgLW4gJworICAgICAgICAgICAvXlN0YXRlIFxcKC4qXFwpL3sKIAkgICAgIHMvL2ZpbmFsIHN0YXRlIFxcMS8KIAkgICAgIHgKIAkgICB9CkBAIC00MDU0LDkgKzIxNDM4LDkgQEAKIAkgICAgIHEKIAkgICB9CiAJJyBpbnB1dC5vdXRwdXQiCi1lY2hvIHNldHMuYXQ6MzAwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBzZWQgLW4gJwotICAgICAgICAgICAvXnN0YXRlIFwoLipcKS97CithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJzZXRzLmF0OjI4OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgLW4gJworICAgICAgICAgICAvXlN0YXRlIFwoLipcKS97CiAJICAgICBzLy9maW5hbCBzdGF0ZSBcMS8KIAkgICAgIHgKIAkgICB9CkBAIC00MDY1LDU3ICsyMTQ0OSwzNCBAQAogCSAgICAgcAogCSAgICAgcQogCSAgIH0KLQknIGlucHV0Lm91dHB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAic2V0cy5hdDozMDA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgorCScgaW5wdXQub3V0cHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3NldHMuYXQ6Mjg5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotCi0gIGJhbm5lci00ICkgIyBCYW5uZXIgNC4gcmVkdWNlLmF0OjE5Ci0gICAgY2F0IDw8XF9BVEVPRgotCi1HcmFtbWFyIFJlZHVjdGlvbi4KLQotX0FURU9GCi0gICAgOzsKLQotICAzNSApICMgMzUuIHJlZHVjZS5hdDoyNjogVXNlbGVzcyBUZXJtaW5hbHMKLSAgICBhdF9zZXR1cF9saW5lPSdyZWR1Y2UuYXQ6MjYnCi0gICAgYXRfZGVzYz0nVXNlbGVzcyBUZXJtaW5hbHMnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiAzNTogVXNlbGVzcyBUZXJtaW5hbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjM1LiByZWR1Y2UuYXQ6MjY6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTAxCisjQVRfU1RBUlRfMTAyCithdF9mbl9ncm91cF9iYW5uZXIgMTAyICdyZWR1Y2UuYXQ6MjUnIFwKKyAgIlVzZWxlc3MgVGVybWluYWxzIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiA2CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTAyLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogY2F0ID5pbnB1dC55IDw8J19BVEVPRicKICV2ZXJib3NlCi0lb3V0cHV0PSJpbnB1dC5jIgorJW91dHB1dCAiaW5wdXQuYyIKIAogJXRva2VuIHVzZWxlc3MxCiAldG9rZW4gdXNlbGVzczIKQEAgLTQxMzMsNDIgKzIxNDk0LDEwMiBAQAogX0FURU9GCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJyZWR1Y2UuYXQ6NDc6IGJpc29uIGlucHV0LnkiCi1lY2hvIHJlZHVjZS5hdDo0NyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gaW5wdXQueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJyZWR1Y2UuYXQ6NDc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZHVjZS5hdDo0NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NDYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBpbnB1dC55IiAicmVkdWNlLmF0OjQ2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NDY6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWR1Y2UuYXQ6NDYiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ2OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVkdWNlLmF0OjQ2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NjogYmlzb24gaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZHVjZS5hdDo0NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJyZWR1Y2UuYXQ6NjA6IHNlZCAtbiAnL15HcmFtbWFyL3E7L15cJC8hcCcgaW5wdXQub3V0cHV0IgotZWNobyByZWR1Y2UuYXQ6NjAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IHNlZCAtbiAnL15HcmFtbWFyL3E7L14kLyFwJyBpbnB1dC5vdXRwdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gIlRlcm1pbmFscyB3aGljaCBhcmUgbm90IHVzZWQKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0ODogc2VkIC1uICcvXkdyYW1tYXIvcTsvXlwkLyFwJyBpbnB1dC5vdXRwdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgInNlZCAtbiAnL15HcmFtbWFyL3E7L14kLyFwJyBpbnB1dC5vdXRwdXQiICJyZWR1Y2UuYXQ6NDgiCisoICRhdF9jaGVja190cmFjZTsgc2VkIC1uICcvXkdyYW1tYXIvcTsvXiQvIXAnIGlucHV0Lm91dHB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIlRlcm1pbmFscyB1bnVzZWQgaW4gZ3JhbW1hcgogICAgdXNlbGVzczEKICAgIHVzZWxlc3MyCiAgICB1c2VsZXNzMwpAQCAtNDE3OCw0MiArMjE1OTksMzAgQEAKICAgIHVzZWxlc3M3CiAgICB1c2VsZXNzOAogICAgdXNlbGVzczkKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInJlZHVjZS5hdDo2MDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwotCi0gIDM2ICkgIyAzNi4gcmVkdWNlLmF0OjcwOiBVc2VsZXNzIE5vbnRlcm1pbmFscwotICAgIGF0X3NldHVwX2xpbmU9J3JlZHVjZS5hdDo3MCcKLSAgICBhdF9kZXNjPSdVc2VsZXNzIE5vbnRlcm1pbmFscycKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDM2OiBVc2VsZXNzIE5vbnRlcm1pbmFscyAgICAgICAgICAgICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiMzYuIHJlZHVjZS5hdDo3MDogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xMDIKKyNBVF9TVEFSVF8xMDMKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxMDMgJ3JlZHVjZS5hdDo2OScgXAorICAiVXNlbGVzcyBOb250ZXJtaW5hbHMiICIgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDYKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxMDMuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiBjYXQgPmlucHV0LnkgPDwnX0FURU9GJwogJXZlcmJvc2UKLSVvdXRwdXQ9ImlucHV0LmMiCislb3V0cHV0ICJpbnB1dC5jIgogCiAlbnRlcm0gdXNlbGVzczEKICVudGVybSB1c2VsZXNzMgpAQCAtNDIzMSw1MiArMjE2NDAsMjM5IEBACiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInJlZHVjZS5hdDoxMDI6IGJpc29uIGlucHV0LnkiCi1lY2hvIHJlZHVjZS5hdDoxMDIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIGlucHV0LnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyA+PiRhdF9zdGRlcnI7IGVjaG8gImlucHV0Lnk6IHdhcm5pbmc6IDkgdXNlbGVzcyBub250ZXJtaW5hbHMKLWlucHV0Lnk6NC44LTE1OiB3YXJuaW5nOiB1c2VsZXNzIG5vbnRlcm1pbmFsOiB1c2VsZXNzMQotaW5wdXQueTo1LjgtMTU6IHdhcm5pbmc6IHVzZWxlc3Mgbm9udGVybWluYWw6IHVzZWxlc3MyCi1pbnB1dC55OjYuOC0xNTogd2FybmluZzogdXNlbGVzcyBub250ZXJtaW5hbDogdXNlbGVzczMKLWlucHV0Lnk6Ny44LTE1OiB3YXJuaW5nOiB1c2VsZXNzIG5vbnRlcm1pbmFsOiB1c2VsZXNzNAotaW5wdXQueTo4LjgtMTU6IHdhcm5pbmc6IHVzZWxlc3Mgbm9udGVybWluYWw6IHVzZWxlc3M1Ci1pbnB1dC55OjkuOC0xNTogd2FybmluZzogdXNlbGVzcyBub250ZXJtaW5hbDogdXNlbGVzczYKLWlucHV0Lnk6MTAuOC0xNTogd2FybmluZzogdXNlbGVzcyBub250ZXJtaW5hbDogdXNlbGVzczcKLWlucHV0Lnk6MTEuOC0xNTogd2FybmluZzogdXNlbGVzcyBub250ZXJtaW5hbDogdXNlbGVzczgKLWlucHV0Lnk6MTIuOC0xNTogd2FybmluZzogdXNlbGVzcyBub250ZXJtaW5hbDogdXNlbGVzczkKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInJlZHVjZS5hdDoxMDI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjkwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZHVjZS5hdDo5MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBpbnB1dC55IiAicmVkdWNlLmF0OjkwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWR1Y2UuYXQ6OTAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjkwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjkwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVkdWNlLmF0OjkwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5MDogYmlzb24gaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZHVjZS5hdDo5MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueTogd2FybmluZzogOSBub250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyCitpbnB1dC55OjQuOC0xNTogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzMQoraW5wdXQueTo1LjgtMTU6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczIKK2lucHV0Lnk6Ni44LTE1OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3MzCitpbnB1dC55OjcuOC0xNTogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzNAoraW5wdXQueTo4LjgtMTU6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczUKK2lucHV0Lnk6OS44LTE1OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3M2CitpbnB1dC55OjEwLjgtMTU6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczcKK2lucHV0Lnk6MTEuOC0xNTogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzOAoraW5wdXQueToxMi44LTE1OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3M5CisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisjIERlZmluaW5nIFBPU0lYTFlfQ09SUkVDVCBjYXVzZXMgYmlzb24gdG8gY29tcGxhaW4gaWYgb3B0aW9ucyBhcmUKKyMgYWRkZWQgYWZ0ZXIgdGhlIGdyYW1tYXIgZmlsZSBuYW1lLCBzbyBza2lwIHRoZXNlIGNoZWNrcyBpbiB0aGF0CisjIGNhc2UuCitpZiB0ZXN0ICIkUE9TSVhMWV9DT1JSRUNUX0lTX0VYUE9SVEVEIiA9IGZhbHNlOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworCisgICMgVG8gYXZvaWQgZXhwYW5kaW5nIGl0IHJlcGVhdGVkbHksIHN0b3JlIHNwZWNpZmllZCBzdGRvdXQuCisgIDogPmV4cG91dAorCisgICMgUnVuIHdpdGggLVdlcnJvci4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC1XZXJyb3IiICJyZWR1Y2UuYXQ6OTAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIEJ1aWxkIGV4cGVjdGVkIHN0ZGVyciB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSAid2FybmluZ3MgYmVpbmcKKyAgIyB0cmVhdGVkIGFzIGVycm9ycyIgbWVzc2FnZS4KKyAgY2F0ID5hdC1iaXNvbi1jaGVjay13YXJuaW5ncyA8PCdfQVRFT0YnCitpbnB1dC55OiB3YXJuaW5nOiA5IG5vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXIKK2lucHV0Lnk6NC44LTE1OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3MxCitpbnB1dC55OjUuOC0xNTogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzMgoraW5wdXQueTo2LjgtMTU6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczMKK2lucHV0Lnk6Ny44LTE1OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3M0CitpbnB1dC55OjguOC0xNTogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzNQoraW5wdXQueTo5LjgtMTU6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczYKK2lucHV0Lnk6MTAuOC0xNTogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzNworaW5wdXQueToxMS44LTE1OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3M4CitpbnB1dC55OjEyLjgtMTU6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczkKK19BVEVPRgorCisgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PWBzZWQgLW4gXAorICAgICcvOiB3YXJuaW5nOiAvez07cTt9JyBhdC1iaXNvbi1jaGVjay13YXJuaW5nc2AKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2ZpcnN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19maXJzdF90bXA9YHNlZCAtbiBcCisgICAgJy9jb25mbGljdHM6IFswLTldLipyZWR1Y2UkL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdF90bXA6PTF9CisgIGlmIHRlc3QgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcCAtbHQgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0OyB0aGVuCisgICAgYXRfYmlzb25fY2hlY2tfZmlyc3Q9JGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcAorICBmaQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdCAtZ3QgMTsgdGhlbgorICAgIHNlZCAtbiAiMSxgZXhwciAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLSAxYCJwIFwKKyAgICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4gZXhwZXJyCisgIGZpCisgIGVjaG8gJ2Jpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycycgPj4gZXhwZXJyCisKKyAgIyBGaW5pc2ggYnVpbGRpbmcgZXhwZWN0ZWQgc3RkZXJyIGFuZCBjaGVjay4gIFVubGlrZSB3YXJuaW5ncywKKyAgIyBjb21wbGFpbnRzIGNhdXNlIGJpc29uIHRvIGV4aXQgZWFybHkuICBUaHVzLCB3aXRoIC1XZXJyb3IsIGJpc29uCisgICMgZG9lcyBub3QgbmVjZXNzYXJpbHkgcmVwb3J0IGFsbCB3YXJuaW5ncyB0aGF0IGl0IGRvZXMgd2l0aG91dAorICAjIC1XZXJyb3IsIGJ1dCBpdCBhdCBsZWFzdCByZXBvcnRzIG9uZS4KKyAgYXRfYmlzb25fY2hlY2tfbGFzdD1gc2VkIC1uICckPScgc3RkZXJyYAorICA6ICR7YXRfYmlzb25fY2hlY2tfbGFzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfbGFzdD1gZXhwciAkYXRfYmlzb25fY2hlY2tfbGFzdCAtIDFgCisgIHNlZCAtbiAiJGF0X2Jpc29uX2NoZWNrX2ZpcnN0LCRhdF9iaXNvbl9jaGVja19sYXN0InAgXAorICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4+IGV4cGVycgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjkwOiBzZWQgJ3MsLiovXFwoYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzXFwpXCQsXFwxLCcgXFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWR1Y2UuYXQ6OTAiCisoICRhdF9jaGVja190cmFjZTsgc2VkICdzLC4qL1woYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzXCkkLFwxLCcgXAorICAgICAgICAgICAgICBzdGRlcnIgMT4mMgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorJGF0X2RpZmYgZXhwZXJyICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBOb3cgY2hlY2sgLS13YXJuaW5ncz1lcnJvci4KKyAgY3Agc3RkZXJyIGV4cGVycgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjkwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLS13YXJuaW5ncz1lcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLS13YXJuaW5ncz1lcnJvciIgInJlZHVjZS5hdDo5MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLS13YXJuaW5ncz1lcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorJGF0X2RpZmYgZXhwZXJyICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBOb3cgY2hlY2sgLVdub25lIGFuZCAtLXdhcm5pbmdzPW5vbmUgYnkgbWFraW5nIHN1cmUgdGhhdAorICAjIC1XZXJyb3IgZG9lc24ndCBjaGFuZ2UgdGhlIGV4aXQgc3RhdHVzIHdoZW4gLVdub25lIG9yCisgICMgLS13YXJuaW5ncz1ub25lIGlzIHNwZWNpZmllZC4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtV25vbmUgLVdlcnJvciIgInJlZHVjZS5hdDo5MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLVdub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjkwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjkwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIiAicmVkdWNlLmF0OjkwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQogCi0kYXRfdHJhY2VvbgotCi0KLSRhdF90cmFjZW9mZgotZWNobyAicmVkdWNlLmF0OjExNTogc2VkIC1uICcvXkdyYW1tYXIvcTsvXlwkLyFwJyBpbnB1dC5vdXRwdXQiCi1lY2hvIHJlZHVjZS5hdDoxMTUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IHNlZCAtbiAnL15HcmFtbWFyL3E7L14kLyFwJyBpbnB1dC5vdXRwdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gIlVzZWxlc3Mgbm9udGVybWluYWxzCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEwMzogc2VkIC1uICcvXkdyYW1tYXIvcTsvXlwkLyFwJyBpbnB1dC5vdXRwdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgInNlZCAtbiAnL15HcmFtbWFyL3E7L14kLyFwJyBpbnB1dC5vdXRwdXQiICJyZWR1Y2UuYXQ6MTAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAtbiAnL15HcmFtbWFyL3E7L14kLyFwJyBpbnB1dC5vdXRwdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJOb250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyCiAgICB1c2VsZXNzMQogICAgdXNlbGVzczIKICAgIHVzZWxlc3MzCkBAIC00Mjg2LDQ0ICsyMTg4MiwzMiBAQAogICAgdXNlbGVzczcKICAgIHVzZWxlc3M4CiAgICB1c2VsZXNzOQotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAicmVkdWNlLmF0OjExNTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICAzNyApICMgMzcuIHJlZHVjZS5hdDoxMjU6IFVzZWxlc3MgUnVsZXMKLSAgICBhdF9zZXR1cF9saW5lPSdyZWR1Y2UuYXQ6MTI1JwotICAgIGF0X2Rlc2M9J1VzZWxlc3MgUnVsZXMnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiAzNzogVXNlbGVzcyBSdWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjM3LiByZWR1Y2UuYXQ6MTI1OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzEwMworI0FUX1NUQVJUXzEwNAorYXRfZm5fZ3JvdXBfYmFubmVyIDEwNCAncmVkdWNlLmF0OjEyNCcgXAorICAiVXNlbGVzcyBSdWxlcyIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDYKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxMDQuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiAKIAogY2F0ID5pbnB1dC55IDw8J19BVEVPRicKICV2ZXJib3NlCi0lb3V0cHV0PSJpbnB1dC5jIgorJW91dHB1dCAiaW5wdXQuYyIKICV0b2tlbiB1c2VmdWwKICUlCiBleHA6IHVzZWZ1bDsKQEAgLTQzMzksNjEgKzIxOTIzLDU3NSBAQAogX0FURU9GCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJyZWR1Y2UuYXQ6MTY2OiBiaXNvbiBpbnB1dC55IgotZWNobyByZWR1Y2UuYXQ6MTY2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gPj4kYXRfc3RkZXJyOyBlY2hvICJpbnB1dC55OiB3YXJuaW5nOiA5IHVzZWxlc3Mgbm9udGVybWluYWxzIGFuZCA5IHVzZWxlc3MgcnVsZXMKLWlucHV0Lnk6Ni4xLTg6IHdhcm5pbmc6IHVzZWxlc3Mgbm9udGVybWluYWw6IHVzZWxlc3MxCi1pbnB1dC55OjcuMS04OiB3YXJuaW5nOiB1c2VsZXNzIG5vbnRlcm1pbmFsOiB1c2VsZXNzMgotaW5wdXQueTo4LjEtODogd2FybmluZzogdXNlbGVzcyBub250ZXJtaW5hbDogdXNlbGVzczMKLWlucHV0Lnk6OS4xLTg6IHdhcm5pbmc6IHVzZWxlc3Mgbm9udGVybWluYWw6IHVzZWxlc3M0Ci1pbnB1dC55OjEwLjEtODogd2FybmluZzogdXNlbGVzcyBub250ZXJtaW5hbDogdXNlbGVzczUKLWlucHV0Lnk6MTEuMS04OiB3YXJuaW5nOiB1c2VsZXNzIG5vbnRlcm1pbmFsOiB1c2VsZXNzNgotaW5wdXQueToxMi4xLTg6IHdhcm5pbmc6IHVzZWxlc3Mgbm9udGVybWluYWw6IHVzZWxlc3M3Ci1pbnB1dC55OjEzLjEtODogd2FybmluZzogdXNlbGVzcyBub250ZXJtaW5hbDogdXNlbGVzczgKLWlucHV0Lnk6MTQuMS04OiB3YXJuaW5nOiB1c2VsZXNzIG5vbnRlcm1pbmFsOiB1c2VsZXNzOQotaW5wdXQueTo2LjExLTEzOiB3YXJuaW5nOiB1c2VsZXNzIHJ1bGU6IHVzZWxlc3MxOiAnMScKLWlucHV0Lnk6Ny4xMS0xMzogd2FybmluZzogdXNlbGVzcyBydWxlOiB1c2VsZXNzMjogJzInCi1pbnB1dC55OjguMTEtMTM6IHdhcm5pbmc6IHVzZWxlc3MgcnVsZTogdXNlbGVzczM6ICczJwotaW5wdXQueTo5LjExLTEzOiB3YXJuaW5nOiB1c2VsZXNzIHJ1bGU6IHVzZWxlc3M0OiAnNCcKLWlucHV0Lnk6MTAuMTEtMTM6IHdhcm5pbmc6IHVzZWxlc3MgcnVsZTogdXNlbGVzczU6ICc1JwotaW5wdXQueToxMS4xMS0xMzogd2FybmluZzogdXNlbGVzcyBydWxlOiB1c2VsZXNzNjogJzYnCi1pbnB1dC55OjEyLjExLTEzOiB3YXJuaW5nOiB1c2VsZXNzIHJ1bGU6IHVzZWxlc3M3OiAnNycKLWlucHV0Lnk6MTMuMTEtMTM6IHdhcm5pbmc6IHVzZWxlc3MgcnVsZTogdXNlbGVzczg6ICc4JwotaW5wdXQueToxNC4xMS0xMzogd2FybmluZzogdXNlbGVzcyBydWxlOiB1c2VsZXNzOTogJzknCi0iIHwgJGF0X2RpZmYgLSAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJyZWR1Y2UuYXQ6MTY2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNDU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtZmNhcmV0IGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWR1Y2UuYXQ6MTQ1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1mY2FyZXQgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE0NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE0NTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWZjYXJldCBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1mY2FyZXQgaW5wdXQueSIgInJlZHVjZS5hdDoxNDUiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWZjYXJldCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTQ1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNDU6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWR1Y2UuYXQ6MTQ1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTQ1OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVkdWNlLmF0OjE0NSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTQ1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE0NTogYmlzb24gLWZjYXJldCBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVkdWNlLmF0OjE0NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtZmNhcmV0IGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OiB3YXJuaW5nOiA5IG5vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXIKK2lucHV0Lnk6IHdhcm5pbmc6IDkgcnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyCitpbnB1dC55OjYuMS04OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3MxCisgdXNlbGVzczE6ICcxJzsKKyBeXl5eXl5eXgoraW5wdXQueTo3LjEtODogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzMgorIHVzZWxlc3MyOiAnMic7CisgXl5eXl5eXl4KK2lucHV0Lnk6OC4xLTg6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczMKKyB1c2VsZXNzMzogJzMnOworIF5eXl5eXl5eCitpbnB1dC55OjkuMS04OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3M0CisgdXNlbGVzczQ6ICc0JzsKKyBeXl5eXl5eXgoraW5wdXQueToxMC4xLTg6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczUKKyB1c2VsZXNzNTogJzUnOworIF5eXl5eXl5eCitpbnB1dC55OjExLjEtODogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzNgorIHVzZWxlc3M2OiAnNic7CisgXl5eXl5eXl4KK2lucHV0Lnk6MTIuMS04OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3M3CisgdXNlbGVzczc6ICc3JzsKKyBeXl5eXl5eXgoraW5wdXQueToxMy4xLTg6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczgKKyB1c2VsZXNzODogJzgnOworIF5eXl5eXl5eCitpbnB1dC55OjE0LjEtODogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzOQorIHVzZWxlc3M5OiAnOSc7CisgXl5eXl5eXl4KK2lucHV0Lnk6Ni4xMS0xMzogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIGdyYW1tYXIKKyB1c2VsZXNzMTogJzEnOworICAgICAgICAgICBeXl4KK2lucHV0Lnk6Ny4xMS0xMzogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIGdyYW1tYXIKKyB1c2VsZXNzMjogJzInOworICAgICAgICAgICBeXl4KK2lucHV0Lnk6OC4xMS0xMzogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIGdyYW1tYXIKKyB1c2VsZXNzMzogJzMnOworICAgICAgICAgICBeXl4KK2lucHV0Lnk6OS4xMS0xMzogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIGdyYW1tYXIKKyB1c2VsZXNzNDogJzQnOworICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTAuMTEtMTM6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyCisgdXNlbGVzczU6ICc1JzsKKyAgICAgICAgICAgXl5eCitpbnB1dC55OjExLjExLTEzOiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcgorIHVzZWxlc3M2OiAnNic7CisgICAgICAgICAgIF5eXgoraW5wdXQueToxMi4xMS0xMzogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIGdyYW1tYXIKKyB1c2VsZXNzNzogJzcnOworICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTMuMTEtMTM6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyCisgdXNlbGVzczg6ICc4JzsKKyAgICAgICAgICAgXl5eCitpbnB1dC55OjE0LjExLTEzOiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcgorIHVzZWxlc3M5OiAnOSc7CisgICAgICAgICAgIF5eXgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE0NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyMgRGVmaW5pbmcgUE9TSVhMWV9DT1JSRUNUIGNhdXNlcyBiaXNvbiB0byBjb21wbGFpbiBpZiBvcHRpb25zIGFyZQorIyBhZGRlZCBhZnRlciB0aGUgZ3JhbW1hciBmaWxlIG5hbWUsIHNvIHNraXAgdGhlc2UgY2hlY2tzIGluIHRoYXQKKyMgY2FzZS4KK2lmIHRlc3QgIiRQT1NJWExZX0NPUlJFQ1RfSVNfRVhQT1JURUQiID0gZmFsc2U7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisKKyAgIyBUbyBhdm9pZCBleHBhbmRpbmcgaXQgcmVwZWF0ZWRseSwgc3RvcmUgc3BlY2lmaWVkIHN0ZG91dC4KKyAgOiA+ZXhwb3V0CisKKyAgIyBSdW4gd2l0aCAtV2Vycm9yLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE0NTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IGlucHV0LnkgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgaW5wdXQueSAtV2Vycm9yIiAicmVkdWNlLmF0OjE0NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgaW5wdXQueSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTQ1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgQnVpbGQgZXhwZWN0ZWQgc3RkZXJyIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlICJ3YXJuaW5ncyBiZWluZworICAjIHRyZWF0ZWQgYXMgZXJyb3JzIiBtZXNzYWdlLgorICBjYXQgPmF0LWJpc29uLWNoZWNrLXdhcm5pbmdzIDw8J19BVEVPRicKK2lucHV0Lnk6IHdhcm5pbmc6IDkgbm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hcgoraW5wdXQueTogd2FybmluZzogOSBydWxlcyB1c2VsZXNzIGluIGdyYW1tYXIKK2lucHV0Lnk6Ni4xLTg6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczEKKyB1c2VsZXNzMTogJzEnOworIF5eXl5eXl5eCitpbnB1dC55OjcuMS04OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3MyCisgdXNlbGVzczI6ICcyJzsKKyBeXl5eXl5eXgoraW5wdXQueTo4LjEtODogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzMworIHVzZWxlc3MzOiAnMyc7CisgXl5eXl5eXl4KK2lucHV0Lnk6OS4xLTg6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczQKKyB1c2VsZXNzNDogJzQnOworIF5eXl5eXl5eCitpbnB1dC55OjEwLjEtODogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzNQorIHVzZWxlc3M1OiAnNSc7CisgXl5eXl5eXl4KK2lucHV0Lnk6MTEuMS04OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3M2CisgdXNlbGVzczY6ICc2JzsKKyBeXl5eXl5eXgoraW5wdXQueToxMi4xLTg6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczcKKyB1c2VsZXNzNzogJzcnOworIF5eXl5eXl5eCitpbnB1dC55OjEzLjEtODogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzOAorIHVzZWxlc3M4OiAnOCc7CisgXl5eXl5eXl4KK2lucHV0Lnk6MTQuMS04OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3M5CisgdXNlbGVzczk6ICc5JzsKKyBeXl5eXl5eXgoraW5wdXQueTo2LjExLTEzOiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcgorIHVzZWxlc3MxOiAnMSc7CisgICAgICAgICAgIF5eXgoraW5wdXQueTo3LjExLTEzOiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcgorIHVzZWxlc3MyOiAnMic7CisgICAgICAgICAgIF5eXgoraW5wdXQueTo4LjExLTEzOiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcgorIHVzZWxlc3MzOiAnMyc7CisgICAgICAgICAgIF5eXgoraW5wdXQueTo5LjExLTEzOiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcgorIHVzZWxlc3M0OiAnNCc7CisgICAgICAgICAgIF5eXgoraW5wdXQueToxMC4xMS0xMzogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIGdyYW1tYXIKKyB1c2VsZXNzNTogJzUnOworICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTEuMTEtMTM6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyCisgdXNlbGVzczY6ICc2JzsKKyAgICAgICAgICAgXl5eCitpbnB1dC55OjEyLjExLTEzOiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcgorIHVzZWxlc3M3OiAnNyc7CisgICAgICAgICAgIF5eXgoraW5wdXQueToxMy4xMS0xMzogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIGdyYW1tYXIKKyB1c2VsZXNzODogJzgnOworICAgICAgICAgICBeXl4KK2lucHV0Lnk6MTQuMTEtMTM6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyCisgdXNlbGVzczk6ICc5JzsKKyAgICAgICAgICAgXl5eCitfQVRFT0YKKworICBhdF9iaXNvbl9jaGVja19maXJzdD1gc2VkIC1uIFwKKyAgICAnLzogd2FybmluZzogL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wPWBzZWQgLW4gXAorICAgICcvY29uZmxpY3RzOiBbMC05XS4qcmVkdWNlJC97PTtxO30nIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzYAorICA6ICR7YXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wOj0xfQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdF90bXAgLWx0ICRhdF9iaXNvbl9jaGVja19maXJzdDsgdGhlbgorICAgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PSRhdF9iaXNvbl9jaGVja19maXJzdF90bXAKKyAgZmkKKyAgaWYgdGVzdCAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLWd0IDE7IHRoZW4KKyAgICBzZWQgLW4gIjEsYGV4cHIgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0IC0gMWAicCBcCisgICAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+IGV4cGVycgorICBmaQorICBlY2hvICdiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMnID4+IGV4cGVycgorCisgICMgRmluaXNoIGJ1aWxkaW5nIGV4cGVjdGVkIHN0ZGVyciBhbmQgY2hlY2suICBVbmxpa2Ugd2FybmluZ3MsCisgICMgY29tcGxhaW50cyBjYXVzZSBiaXNvbiB0byBleGl0IGVhcmx5LiAgVGh1cywgd2l0aCAtV2Vycm9yLCBiaXNvbgorICAjIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHJlcG9ydCBhbGwgd2FybmluZ3MgdGhhdCBpdCBkb2VzIHdpdGhvdXQKKyAgIyAtV2Vycm9yLCBidXQgaXQgYXQgbGVhc3QgcmVwb3J0cyBvbmUuCisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YHNlZCAtbiAnJD0nIHN0ZGVycmAKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2xhc3Q6PTF9CisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YGV4cHIgJGF0X2Jpc29uX2NoZWNrX2xhc3QgLSAxYAorICBzZWQgLW4gIiRhdF9iaXNvbl9jaGVja19maXJzdCwkYXRfYmlzb25fY2hlY2tfbGFzdCJwIFwKKyAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+PiBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNDU6IHNlZCAncywuKi9cXChiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnNcXClcJCxcXDEsJyBcXAorICAgICAgICAgICAgICBzdGRlcnIgMT4mMiIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZHVjZS5hdDoxNDUiCisoICRhdF9jaGVja190cmFjZTsgc2VkICdzLC4qL1woYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzXCkkLFwxLCcgXAorICAgICAgICAgICAgICBzdGRlcnIgMT4mMgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorJGF0X2RpZmYgZXhwZXJyICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTQ1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC0td2FybmluZ3M9ZXJyb3IuCisgIGNwIHN0ZGVyciBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNDU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IGlucHV0LnkgLS13YXJuaW5ncz1lcnJvciIgInJlZHVjZS5hdDoxNDUiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IGlucHV0LnkgLS13YXJuaW5ncz1lcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorJGF0X2RpZmYgZXhwZXJyICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTQ1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC1Xbm9uZSBhbmQgLS13YXJuaW5ncz1ub25lIGJ5IG1ha2luZyBzdXJlIHRoYXQKKyAgIyAtV2Vycm9yIGRvZXNuJ3QgY2hhbmdlIHRoZSBleGl0IHN0YXR1cyB3aGVuIC1Xbm9uZSBvcgorICAjIC0td2FybmluZ3M9bm9uZSBpcyBzcGVjaWZpZWQuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTQ1OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgaW5wdXQueSAtV25vbmUgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgaW5wdXQueSAtV25vbmUgLVdlcnJvciIgInJlZHVjZS5hdDoxNDUiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IGlucHV0LnkgLVdub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE0NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNDU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCBpbnB1dC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCBpbnB1dC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIiAicmVkdWNlLmF0OjE0NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTQ1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKIAotJGF0X3RyYWNlb24KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjIwNDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWR1Y2UuYXQ6MjA0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoyMDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MjA0OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIGlucHV0LnkiICJyZWR1Y2UuYXQ6MjA0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoyMDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjIwNDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZHVjZS5hdDoyMDQiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjIwNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoyMDQ6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWR1Y2UuYXQ6MjA0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoyMDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MjA0OiBiaXNvbiBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVkdWNlLmF0OjIwNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueTogd2FybmluZzogOSBub250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyCitpbnB1dC55OiB3YXJuaW5nOiA5IHJ1bGVzIHVzZWxlc3MgaW4gZ3JhbW1hcgoraW5wdXQueTo2LjEtODogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzMQoraW5wdXQueTo3LjEtODogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzMgoraW5wdXQueTo4LjEtODogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzMworaW5wdXQueTo5LjEtODogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzNAoraW5wdXQueToxMC4xLTg6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczUKK2lucHV0Lnk6MTEuMS04OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3M2CitpbnB1dC55OjEyLjEtODogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzNworaW5wdXQueToxMy4xLTg6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczgKK2lucHV0Lnk6MTQuMS04OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3M5CitpbnB1dC55OjYuMTEtMTM6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzMTogJzEnCitpbnB1dC55OjcuMTEtMTM6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzMjogJzInCitpbnB1dC55OjguMTEtMTM6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzMzogJzMnCitpbnB1dC55OjkuMTEtMTM6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzNDogJzQnCitpbnB1dC55OjEwLjExLTEzOiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczU6ICc1JworaW5wdXQueToxMS4xMS0xMzogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3M2OiAnNicKK2lucHV0Lnk6MTIuMTEtMTM6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzNzogJzcnCitpbnB1dC55OjEzLjExLTEzOiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczg6ICc4JworaW5wdXQueToxNC4xMS0xMzogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3M5OiAnOScKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoyMDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisjIERlZmluaW5nIFBPU0lYTFlfQ09SUkVDVCBjYXVzZXMgYmlzb24gdG8gY29tcGxhaW4gaWYgb3B0aW9ucyBhcmUKKyMgYWRkZWQgYWZ0ZXIgdGhlIGdyYW1tYXIgZmlsZSBuYW1lLCBzbyBza2lwIHRoZXNlIGNoZWNrcyBpbiB0aGF0CisjIGNhc2UuCitpZiB0ZXN0ICIkUE9TSVhMWV9DT1JSRUNUX0lTX0VYUE9SVEVEIiA9IGZhbHNlOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworCisgICMgVG8gYXZvaWQgZXhwYW5kaW5nIGl0IHJlcGVhdGVkbHksIHN0b3JlIHNwZWNpZmllZCBzdGRvdXQuCisgIDogPmV4cG91dAorCisgICMgUnVuIHdpdGggLVdlcnJvci4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoyMDQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtV2Vycm9yIiAicmVkdWNlLmF0OjIwNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjIwNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJyZWR1Y2UuYXQ6MTk5OiBzZWQgLW4gJy9eR3JhbW1hci9xOy9eXCQvIXAnIGlucHV0Lm91dHB1dCIKLWVjaG8gcmVkdWNlLmF0OjE5OSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2Vvbjsgc2VkIC1uICcvXkdyYW1tYXIvcTsvXiQvIXAnIGlucHV0Lm91dHB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvID4+JGF0X3N0ZG91dDsgZWNobyAiVXNlbGVzcyBub250ZXJtaW5hbHMKKyAgIyBCdWlsZCBleHBlY3RlZCBzdGRlcnIgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgIndhcm5pbmdzIGJlaW5nCisgICMgdHJlYXRlZCBhcyBlcnJvcnMiIG1lc3NhZ2UuCisgIGNhdCA+YXQtYmlzb24tY2hlY2std2FybmluZ3MgPDwnX0FURU9GJworaW5wdXQueTogd2FybmluZzogOSBub250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyCitpbnB1dC55OiB3YXJuaW5nOiA5IHJ1bGVzIHVzZWxlc3MgaW4gZ3JhbW1hcgoraW5wdXQueTo2LjEtODogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzMQoraW5wdXQueTo3LjEtODogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzMgoraW5wdXQueTo4LjEtODogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzMworaW5wdXQueTo5LjEtODogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzNAoraW5wdXQueToxMC4xLTg6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczUKK2lucHV0Lnk6MTEuMS04OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3M2CitpbnB1dC55OjEyLjEtODogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzNworaW5wdXQueToxMy4xLTg6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczgKK2lucHV0Lnk6MTQuMS04OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3M5CitpbnB1dC55OjYuMTEtMTM6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzMTogJzEnCitpbnB1dC55OjcuMTEtMTM6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzMjogJzInCitpbnB1dC55OjguMTEtMTM6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzMzogJzMnCitpbnB1dC55OjkuMTEtMTM6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzNDogJzQnCitpbnB1dC55OjEwLjExLTEzOiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczU6ICc1JworaW5wdXQueToxMS4xMS0xMzogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3M2OiAnNicKK2lucHV0Lnk6MTIuMTEtMTM6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyOiB1c2VsZXNzNzogJzcnCitpbnB1dC55OjEzLjExLTEzOiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcjogdXNlbGVzczg6ICc4JworaW5wdXQueToxNC4xMS0xMzogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIGdyYW1tYXI6IHVzZWxlc3M5OiAnOScKK19BVEVPRgorCisgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PWBzZWQgLW4gXAorICAgICcvOiB3YXJuaW5nOiAvez07cTt9JyBhdC1iaXNvbi1jaGVjay13YXJuaW5nc2AKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2ZpcnN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19maXJzdF90bXA9YHNlZCAtbiBcCisgICAgJy9jb25mbGljdHM6IFswLTldLipyZWR1Y2UkL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdF90bXA6PTF9CisgIGlmIHRlc3QgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcCAtbHQgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0OyB0aGVuCisgICAgYXRfYmlzb25fY2hlY2tfZmlyc3Q9JGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcAorICBmaQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdCAtZ3QgMTsgdGhlbgorICAgIHNlZCAtbiAiMSxgZXhwciAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLSAxYCJwIFwKKyAgICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4gZXhwZXJyCisgIGZpCisgIGVjaG8gJ2Jpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycycgPj4gZXhwZXJyCisKKyAgIyBGaW5pc2ggYnVpbGRpbmcgZXhwZWN0ZWQgc3RkZXJyIGFuZCBjaGVjay4gIFVubGlrZSB3YXJuaW5ncywKKyAgIyBjb21wbGFpbnRzIGNhdXNlIGJpc29uIHRvIGV4aXQgZWFybHkuICBUaHVzLCB3aXRoIC1XZXJyb3IsIGJpc29uCisgICMgZG9lcyBub3QgbmVjZXNzYXJpbHkgcmVwb3J0IGFsbCB3YXJuaW5ncyB0aGF0IGl0IGRvZXMgd2l0aG91dAorICAjIC1XZXJyb3IsIGJ1dCBpdCBhdCBsZWFzdCByZXBvcnRzIG9uZS4KKyAgYXRfYmlzb25fY2hlY2tfbGFzdD1gc2VkIC1uICckPScgc3RkZXJyYAorICA6ICR7YXRfYmlzb25fY2hlY2tfbGFzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfbGFzdD1gZXhwciAkYXRfYmlzb25fY2hlY2tfbGFzdCAtIDFgCisgIHNlZCAtbiAiJGF0X2Jpc29uX2NoZWNrX2ZpcnN0LCRhdF9iaXNvbl9jaGVja19sYXN0InAgXAorICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4+IGV4cGVycgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjIwNDogc2VkICdzLC4qL1xcKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1xcKVwkLFxcMSwnIFxcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVkdWNlLmF0OjIwNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgJ3MsLiovXChiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnNcKSQsXDEsJyBcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCiskYXRfZGlmZiBleHBlcnIgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoyMDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBOb3cgY2hlY2sgLS13YXJuaW5ncz1lcnJvci4KKyAgY3Agc3RkZXJyIGV4cGVycgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjIwNDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IiICJyZWR1Y2UuYXQ6MjA0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCiskYXRfZGlmZiBleHBlcnIgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoyMDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBOb3cgY2hlY2sgLVdub25lIGFuZCAtLXdhcm5pbmdzPW5vbmUgYnkgbWFraW5nIHN1cmUgdGhhdAorICAjIC1XZXJyb3IgZG9lc24ndCBjaGFuZ2UgdGhlIGV4aXQgc3RhdHVzIHdoZW4gLVdub25lIG9yCisgICMgLS13YXJuaW5ncz1ub25lIGlzIHNwZWNpZmllZC4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoyMDQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtV25vbmUgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLVdub25lIC1XZXJyb3IiICJyZWR1Y2UuYXQ6MjA0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtV25vbmUgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MjA0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjIwNDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvciIgInJlZHVjZS5hdDoyMDQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoyMDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjIyNzogc2VkIC1uICcvXkdyYW1tYXIvcTsvXlwkLyFwJyBpbnB1dC5vdXRwdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgInNlZCAtbiAnL15HcmFtbWFyL3E7L14kLyFwJyBpbnB1dC5vdXRwdXQiICJyZWR1Y2UuYXQ6MjI3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAtbiAnL15HcmFtbWFyL3E7L14kLyFwJyBpbnB1dC5vdXRwdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJOb250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyCiAgICB1c2VsZXNzMQogICAgdXNlbGVzczIKICAgIHVzZWxlc3MzCkBAIC00NDAzLDcgKzIyNTAxLDcgQEAKICAgIHVzZWxlc3M3CiAgICB1c2VsZXNzOAogICAgdXNlbGVzczkKLVRlcm1pbmFscyB3aGljaCBhcmUgbm90IHVzZWQKK1Rlcm1pbmFscyB1bnVzZWQgaW4gZ3JhbW1hcgogICAgJzEnCiAgICAnMicKICAgICczJwpAQCAtNDQxMyw3ICsyMjUxMSw3IEBACiAgICAnNycKICAgICc4JwogICAgJzknCi1Vc2VsZXNzIHJ1bGVzCitSdWxlcyB1c2VsZXNzIGluIGdyYW1tYXIKICAgICAyIHVzZWxlc3MxOiAnMScKICAgICAzIHVzZWxlc3MyOiAnMicKICAgICA0IHVzZWxlc3MzOiAnMycKQEAgLTQ0MjMsMzcgKzIyNTIxLDI1IEBACiAgICAgOCB1c2VsZXNzNzogJzcnCiAgICAgOSB1c2VsZXNzODogJzgnCiAgICAxMCB1c2VsZXNzOTogJzknCi0iIHwgJGF0X2RpZmYgLSAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJyZWR1Y2UuYXQ6MTk5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoyMjciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwotCi0gIDM4ICkgIyAzOC4gcmVkdWNlLmF0OjIxMjogUmVkdWNlZCBBdXRvbWF0b24KLSAgICBhdF9zZXR1cF9saW5lPSdyZWR1Y2UuYXQ6MjEyJwotICAgIGF0X2Rlc2M9J1JlZHVjZWQgQXV0b21hdG9uJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgMzg6IFJlZHVjZWQgQXV0b21hdG9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIzOC4gcmVkdWNlLmF0OjIxMjogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xMDQKKyNBVF9TVEFSVF8xMDUKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxMDUgJ3JlZHVjZS5hdDoyNzEnIFwKKyAgIlJlZHVjZWQgQXV0b21hdG9uIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiA2CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTA1LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogCkBAIC00NDY2LDcgKzIyNTUyLDcgQEAKIC8qIEEgdXNlZnVsIG9uZS4gKi8KICV0b2tlbiB1c2VmdWwKICV2ZXJib3NlCi0lb3V0cHV0PSJub3QtcmVkdWNlZC5jIgorJW91dHB1dCAibm90LXJlZHVjZWQuYyIKIAogJSUKIApAQCAtNDQ4NCw3MSArMjI1NzAsNDg0IEBACiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInJlZHVjZS5hdDoyNDg6IGJpc29uIG5vdC1yZWR1Y2VkLnkiCi1lY2hvIHJlZHVjZS5hdDoyNDggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIG5vdC1yZWR1Y2VkLnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyA+PiRhdF9zdGRlcnI7IGVjaG8gIm5vdC1yZWR1Y2VkLnk6IHdhcm5pbmc6IDIgdXNlbGVzcyBub250ZXJtaW5hbHMgYW5kIDMgdXNlbGVzcyBydWxlcwotbm90LXJlZHVjZWQueToxNC4xLTEzOiB3YXJuaW5nOiB1c2VsZXNzIG5vbnRlcm1pbmFsOiBub3RfcmVhY2hhYmxlCi1ub3QtcmVkdWNlZC55OjExLjYtMTk6IHdhcm5pbmc6IHVzZWxlc3Mgbm9udGVybWluYWw6IG5vbl9wcm9kdWN0aXZlCi1ub3QtcmVkdWNlZC55OjExLjYtNTc6IHdhcm5pbmc6IHVzZWxlc3MgcnVsZTogZXhwOiBub25fcHJvZHVjdGl2ZQotbm90LXJlZHVjZWQueToxNC4xNi01Njogd2FybmluZzogdXNlbGVzcyBydWxlOiBub3RfcmVhY2hhYmxlOiB1c2VmdWwKLW5vdC1yZWR1Y2VkLnk6MTcuMTctMTguNjM6IHdhcm5pbmc6IHVzZWxlc3MgcnVsZTogbm9uX3Byb2R1Y3RpdmU6IG5vbl9wcm9kdWN0aXZlIHVzZWxlc3NfdG9rZW4KLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInJlZHVjZS5hdDoyNDg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjMwMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1mY2FyZXQgbm90LXJlZHVjZWQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZHVjZS5hdDozMDAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLWZjYXJldCBub3QtcmVkdWNlZC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MzAwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MzAwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZmNhcmV0IG5vdC1yZWR1Y2VkLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWZjYXJldCBub3QtcmVkdWNlZC55IiAicmVkdWNlLmF0OjMwMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZmNhcmV0IG5vdC1yZWR1Y2VkLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDozMDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjMwMDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZHVjZS5hdDozMDAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjMwMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDozMDA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWR1Y2UuYXQ6MzAwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDozMDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MzAwOiBiaXNvbiAtZmNhcmV0IG5vdC1yZWR1Y2VkLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWR1Y2UuYXQ6MzAwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1mY2FyZXQgbm90LXJlZHVjZWQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gIm5vdC1yZWR1Y2VkLnk6IHdhcm5pbmc6IDIgbm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hcgorbm90LXJlZHVjZWQueTogd2FybmluZzogMyBydWxlcyB1c2VsZXNzIGluIGdyYW1tYXIKK25vdC1yZWR1Y2VkLnk6MTQuMS0xMzogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiBub3RfcmVhY2hhYmxlCisgbm90X3JlYWNoYWJsZTogdXNlZnVsICB7IC8qIEEgbm90IHJlYWNoYWJsZSBhY3Rpb24uICovIH0KKyBeXl5eXl5eXl5eXl5eCitub3QtcmVkdWNlZC55OjExLjYtMTk6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogbm9uX3Byb2R1Y3RpdmUKKyAgICB8IG5vbl9wcm9kdWN0aXZlICAgIHsgLyogQSBub24gcHJvZHVjdGl2ZSBhY3Rpb24uICovIH0KKyAgICAgIF5eXl5eXl5eXl5eXl5eCitub3QtcmVkdWNlZC55OjExLjYtNTc6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyCisgICAgfCBub25fcHJvZHVjdGl2ZSAgICB7IC8qIEEgbm9uIHByb2R1Y3RpdmUgYWN0aW9uLiAqLyB9CisgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitub3QtcmVkdWNlZC55OjE0LjE2LTU2OiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcgorIG5vdF9yZWFjaGFibGU6IHVzZWZ1bCAgeyAvKiBBIG5vdCByZWFjaGFibGUgYWN0aW9uLiAqLyB9CisgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK25vdC1yZWR1Y2VkLnk6MTcuMTctMTguNjM6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyCisgbm9uX3Byb2R1Y3RpdmU6IG5vbl9wcm9kdWN0aXZlIHVzZWxlc3NfdG9rZW4KKyAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjMwMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyMgRGVmaW5pbmcgUE9TSVhMWV9DT1JSRUNUIGNhdXNlcyBiaXNvbiB0byBjb21wbGFpbiBpZiBvcHRpb25zIGFyZQorIyBhZGRlZCBhZnRlciB0aGUgZ3JhbW1hciBmaWxlIG5hbWUsIHNvIHNraXAgdGhlc2UgY2hlY2tzIGluIHRoYXQKKyMgY2FzZS4KK2lmIHRlc3QgIiRQT1NJWExZX0NPUlJFQ1RfSVNfRVhQT1JURUQiID0gZmFsc2U7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisKKyAgIyBUbyBhdm9pZCBleHBhbmRpbmcgaXQgcmVwZWF0ZWRseSwgc3RvcmUgc3BlY2lmaWVkIHN0ZG91dC4KKyAgOiA+ZXhwb3V0CisKKyAgIyBSdW4gd2l0aCAtV2Vycm9yLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjMwMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IG5vdC1yZWR1Y2VkLnkgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgbm90LXJlZHVjZWQueSAtV2Vycm9yIiAicmVkdWNlLmF0OjMwMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgbm90LXJlZHVjZWQueSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MzAwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgQnVpbGQgZXhwZWN0ZWQgc3RkZXJyIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlICJ3YXJuaW5ncyBiZWluZworICAjIHRyZWF0ZWQgYXMgZXJyb3JzIiBtZXNzYWdlLgorICBjYXQgPmF0LWJpc29uLWNoZWNrLXdhcm5pbmdzIDw8J19BVEVPRicKK25vdC1yZWR1Y2VkLnk6IHdhcm5pbmc6IDIgbm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hcgorbm90LXJlZHVjZWQueTogd2FybmluZzogMyBydWxlcyB1c2VsZXNzIGluIGdyYW1tYXIKK25vdC1yZWR1Y2VkLnk6MTQuMS0xMzogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiBub3RfcmVhY2hhYmxlCisgbm90X3JlYWNoYWJsZTogdXNlZnVsICB7IC8qIEEgbm90IHJlYWNoYWJsZSBhY3Rpb24uICovIH0KKyBeXl5eXl5eXl5eXl5eCitub3QtcmVkdWNlZC55OjExLjYtMTk6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogbm9uX3Byb2R1Y3RpdmUKKyAgICB8IG5vbl9wcm9kdWN0aXZlICAgIHsgLyogQSBub24gcHJvZHVjdGl2ZSBhY3Rpb24uICovIH0KKyAgICAgIF5eXl5eXl5eXl5eXl5eCitub3QtcmVkdWNlZC55OjExLjYtNTc6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyCisgICAgfCBub25fcHJvZHVjdGl2ZSAgICB7IC8qIEEgbm9uIHByb2R1Y3RpdmUgYWN0aW9uLiAqLyB9CisgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitub3QtcmVkdWNlZC55OjE0LjE2LTU2OiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcgorIG5vdF9yZWFjaGFibGU6IHVzZWZ1bCAgeyAvKiBBIG5vdCByZWFjaGFibGUgYWN0aW9uLiAqLyB9CisgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK25vdC1yZWR1Y2VkLnk6MTcuMTctMTguNjM6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyCisgbm9uX3Byb2R1Y3RpdmU6IG5vbl9wcm9kdWN0aXZlIHVzZWxlc3NfdG9rZW4KKyAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorX0FURU9GCisKKyAgYXRfYmlzb25fY2hlY2tfZmlyc3Q9YHNlZCAtbiBcCisgICAgJy86IHdhcm5pbmc6IC97PTtxO30nIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzYAorICA6ICR7YXRfYmlzb25fY2hlY2tfZmlyc3Q6PTF9CisgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcD1gc2VkIC1uIFwKKyAgICAnL2NvbmZsaWN0czogWzAtOV0uKnJlZHVjZSQvez07cTt9JyBhdC1iaXNvbi1jaGVjay13YXJuaW5nc2AKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcDo9MX0KKyAgaWYgdGVzdCAkYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wIC1sdCAkYXRfYmlzb25fY2hlY2tfZmlyc3Q7IHRoZW4KKyAgICBhdF9iaXNvbl9jaGVja19maXJzdD0kYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wCisgIGZpCisgIGlmIHRlc3QgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0IC1ndCAxOyB0aGVuCisgICAgc2VkIC1uICIxLGBleHByICRhdF9iaXNvbl9jaGVja19maXJzdCAtIDFgInAgXAorICAgICAgYXQtYmlzb24tY2hlY2std2FybmluZ3MgPiBleHBlcnIKKyAgZmkKKyAgZWNobyAnYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzJyA+PiBleHBlcnIKKworICAjIEZpbmlzaCBidWlsZGluZyBleHBlY3RlZCBzdGRlcnIgYW5kIGNoZWNrLiAgVW5saWtlIHdhcm5pbmdzLAorICAjIGNvbXBsYWludHMgY2F1c2UgYmlzb24gdG8gZXhpdCBlYXJseS4gIFRodXMsIHdpdGggLVdlcnJvciwgYmlzb24KKyAgIyBkb2VzIG5vdCBuZWNlc3NhcmlseSByZXBvcnQgYWxsIHdhcm5pbmdzIHRoYXQgaXQgZG9lcyB3aXRob3V0CisgICMgLVdlcnJvciwgYnV0IGl0IGF0IGxlYXN0IHJlcG9ydHMgb25lLgorICBhdF9iaXNvbl9jaGVja19sYXN0PWBzZWQgLW4gJyQ9JyBzdGRlcnJgCisgIDogJHthdF9iaXNvbl9jaGVja19sYXN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19sYXN0PWBleHByICRhdF9iaXNvbl9jaGVja19sYXN0IC0gMWAKKyAgc2VkIC1uICIkYXRfYmlzb25fY2hlY2tfZmlyc3QsJGF0X2Jpc29uX2NoZWNrX2xhc3QicCBcCisgICAgYXQtYmlzb24tY2hlY2std2FybmluZ3MgPj4gZXhwZXJyCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MzAwOiBzZWQgJ3MsLiovXFwoYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzXFwpXCQsXFwxLCcgXFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWR1Y2UuYXQ6MzAwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAncywuKi9cKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1wpJCxcMSwnIFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjMwMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIE5vdyBjaGVjayAtLXdhcm5pbmdzPWVycm9yLgorICBjcCBzdGRlcnIgZXhwZXJyCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MzAwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgbm90LXJlZHVjZWQueSAtLXdhcm5pbmdzPWVycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCBub3QtcmVkdWNlZC55IC0td2FybmluZ3M9ZXJyb3IiICJyZWR1Y2UuYXQ6MzAwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCBub3QtcmVkdWNlZC55IC0td2FybmluZ3M9ZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjMwMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIE5vdyBjaGVjayAtV25vbmUgYW5kIC0td2FybmluZ3M9bm9uZSBieSBtYWtpbmcgc3VyZSB0aGF0CisgICMgLVdlcnJvciBkb2Vzbid0IGNoYW5nZSB0aGUgZXhpdCBzdGF0dXMgd2hlbiAtV25vbmUgb3IKKyAgIyAtLXdhcm5pbmdzPW5vbmUgaXMgc3BlY2lmaWVkLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjMwMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IG5vdC1yZWR1Y2VkLnkgLVdub25lIC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IG5vdC1yZWR1Y2VkLnkgLVdub25lIC1XZXJyb3IiICJyZWR1Y2UuYXQ6MzAwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCBub3QtcmVkdWNlZC55IC1Xbm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDozMDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MzAwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgbm90LXJlZHVjZWQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgbm90LXJlZHVjZWQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvciIgInJlZHVjZS5hdDozMDAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IG5vdC1yZWR1Y2VkLnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjMwMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCiAKLSRhdF90cmFjZW9uCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDozMjA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBub3QtcmVkdWNlZC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVkdWNlLmF0OjMyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBub3QtcmVkdWNlZC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MzIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjMyMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgbm90LXJlZHVjZWQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBub3QtcmVkdWNlZC55IiAicmVkdWNlLmF0OjMyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBub3QtcmVkdWNlZC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MzIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDozMjA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWR1Y2UuYXQ6MzIwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDozMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MzIwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVkdWNlLmF0OjMyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MzIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjMyMDogYmlzb24gbm90LXJlZHVjZWQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZHVjZS5hdDozMjAiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gbm90LXJlZHVjZWQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gIm5vdC1yZWR1Y2VkLnk6IHdhcm5pbmc6IDIgbm9udGVybWluYWxzIHVzZWxlc3MgaW4gZ3JhbW1hcgorbm90LXJlZHVjZWQueTogd2FybmluZzogMyBydWxlcyB1c2VsZXNzIGluIGdyYW1tYXIKK25vdC1yZWR1Y2VkLnk6MTQuMS0xMzogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiBub3RfcmVhY2hhYmxlCitub3QtcmVkdWNlZC55OjExLjYtMTk6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogbm9uX3Byb2R1Y3RpdmUKK25vdC1yZWR1Y2VkLnk6MTEuNi01Nzogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIGdyYW1tYXI6IGV4cDogbm9uX3Byb2R1Y3RpdmUKK25vdC1yZWR1Y2VkLnk6MTQuMTYtNTY6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyOiBub3RfcmVhY2hhYmxlOiB1c2VmdWwKK25vdC1yZWR1Y2VkLnk6MTcuMTctMTguNjM6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyOiBub25fcHJvZHVjdGl2ZTogbm9uX3Byb2R1Y3RpdmUgdXNlbGVzc190b2tlbgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjMyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyMgRGVmaW5pbmcgUE9TSVhMWV9DT1JSRUNUIGNhdXNlcyBiaXNvbiB0byBjb21wbGFpbiBpZiBvcHRpb25zIGFyZQorIyBhZGRlZCBhZnRlciB0aGUgZ3JhbW1hciBmaWxlIG5hbWUsIHNvIHNraXAgdGhlc2UgY2hlY2tzIGluIHRoYXQKKyMgY2FzZS4KK2lmIHRlc3QgIiRQT1NJWExZX0NPUlJFQ1RfSVNfRVhQT1JURUQiID0gZmFsc2U7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisKKyAgIyBUbyBhdm9pZCBleHBhbmRpbmcgaXQgcmVwZWF0ZWRseSwgc3RvcmUgc3BlY2lmaWVkIHN0ZG91dC4KKyAgOiA+ZXhwb3V0CisKKyAgIyBSdW4gd2l0aCAtV2Vycm9yLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjMyMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBub3QtcmVkdWNlZC55IC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBub3QtcmVkdWNlZC55IC1XZXJyb3IiICJyZWR1Y2UuYXQ6MzIwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gbm90LXJlZHVjZWQueSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MzIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInJlZHVjZS5hdDoyNjA6IHNlZCAtbiAnL15HcmFtbWFyL3E7L15cJC8hcCcgbm90LXJlZHVjZWQub3V0cHV0IgotZWNobyByZWR1Y2UuYXQ6MjYwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBzZWQgLW4gJy9eR3JhbW1hci9xOy9eJC8hcCcgbm90LXJlZHVjZWQub3V0cHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gPj4kYXRfc3Rkb3V0OyBlY2hvICJVc2VsZXNzIG5vbnRlcm1pbmFscworICAjIEJ1aWxkIGV4cGVjdGVkIHN0ZGVyciB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSAid2FybmluZ3MgYmVpbmcKKyAgIyB0cmVhdGVkIGFzIGVycm9ycyIgbWVzc2FnZS4KKyAgY2F0ID5hdC1iaXNvbi1jaGVjay13YXJuaW5ncyA8PCdfQVRFT0YnCitub3QtcmVkdWNlZC55OiB3YXJuaW5nOiAyIG5vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXIKK25vdC1yZWR1Y2VkLnk6IHdhcm5pbmc6IDMgcnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyCitub3QtcmVkdWNlZC55OjE0LjEtMTM6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogbm90X3JlYWNoYWJsZQorbm90LXJlZHVjZWQueToxMS42LTE5OiB3YXJuaW5nOiBub250ZXJtaW5hbCB1c2VsZXNzIGluIGdyYW1tYXI6IG5vbl9wcm9kdWN0aXZlCitub3QtcmVkdWNlZC55OjExLjYtNTc6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyOiBleHA6IG5vbl9wcm9kdWN0aXZlCitub3QtcmVkdWNlZC55OjE0LjE2LTU2OiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcjogbm90X3JlYWNoYWJsZTogdXNlZnVsCitub3QtcmVkdWNlZC55OjE3LjE3LTE4LjYzOiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcjogbm9uX3Byb2R1Y3RpdmU6IG5vbl9wcm9kdWN0aXZlIHVzZWxlc3NfdG9rZW4KK19BVEVPRgorCisgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PWBzZWQgLW4gXAorICAgICcvOiB3YXJuaW5nOiAvez07cTt9JyBhdC1iaXNvbi1jaGVjay13YXJuaW5nc2AKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2ZpcnN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19maXJzdF90bXA9YHNlZCAtbiBcCisgICAgJy9jb25mbGljdHM6IFswLTldLipyZWR1Y2UkL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdF90bXA6PTF9CisgIGlmIHRlc3QgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcCAtbHQgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0OyB0aGVuCisgICAgYXRfYmlzb25fY2hlY2tfZmlyc3Q9JGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcAorICBmaQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdCAtZ3QgMTsgdGhlbgorICAgIHNlZCAtbiAiMSxgZXhwciAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLSAxYCJwIFwKKyAgICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4gZXhwZXJyCisgIGZpCisgIGVjaG8gJ2Jpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycycgPj4gZXhwZXJyCisKKyAgIyBGaW5pc2ggYnVpbGRpbmcgZXhwZWN0ZWQgc3RkZXJyIGFuZCBjaGVjay4gIFVubGlrZSB3YXJuaW5ncywKKyAgIyBjb21wbGFpbnRzIGNhdXNlIGJpc29uIHRvIGV4aXQgZWFybHkuICBUaHVzLCB3aXRoIC1XZXJyb3IsIGJpc29uCisgICMgZG9lcyBub3QgbmVjZXNzYXJpbHkgcmVwb3J0IGFsbCB3YXJuaW5ncyB0aGF0IGl0IGRvZXMgd2l0aG91dAorICAjIC1XZXJyb3IsIGJ1dCBpdCBhdCBsZWFzdCByZXBvcnRzIG9uZS4KKyAgYXRfYmlzb25fY2hlY2tfbGFzdD1gc2VkIC1uICckPScgc3RkZXJyYAorICA6ICR7YXRfYmlzb25fY2hlY2tfbGFzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfbGFzdD1gZXhwciAkYXRfYmlzb25fY2hlY2tfbGFzdCAtIDFgCisgIHNlZCAtbiAiJGF0X2Jpc29uX2NoZWNrX2ZpcnN0LCRhdF9iaXNvbl9jaGVja19sYXN0InAgXAorICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4+IGV4cGVycgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjMyMDogc2VkICdzLC4qL1xcKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1xcKVwkLFxcMSwnIFxcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVkdWNlLmF0OjMyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgJ3MsLiovXChiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnNcKSQsXDEsJyBcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCiskYXRfZGlmZiBleHBlcnIgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDozMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBOb3cgY2hlY2sgLS13YXJuaW5ncz1lcnJvci4KKyAgY3Agc3RkZXJyIGV4cGVycgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjMyMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBub3QtcmVkdWNlZC55IC0td2FybmluZ3M9ZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBub3QtcmVkdWNlZC55IC0td2FybmluZ3M9ZXJyb3IiICJyZWR1Y2UuYXQ6MzIwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gbm90LXJlZHVjZWQueSAtLXdhcm5pbmdzPWVycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCiskYXRfZGlmZiBleHBlcnIgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDozMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBOb3cgY2hlY2sgLVdub25lIGFuZCAtLXdhcm5pbmdzPW5vbmUgYnkgbWFraW5nIHN1cmUgdGhhdAorICAjIC1XZXJyb3IgZG9lc24ndCBjaGFuZ2UgdGhlIGV4aXQgc3RhdHVzIHdoZW4gLVdub25lIG9yCisgICMgLS13YXJuaW5ncz1ub25lIGlzIHNwZWNpZmllZC4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDozMjA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gbm90LXJlZHVjZWQueSAtV25vbmUgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIG5vdC1yZWR1Y2VkLnkgLVdub25lIC1XZXJyb3IiICJyZWR1Y2UuYXQ6MzIwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gbm90LXJlZHVjZWQueSAtV25vbmUgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MzIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjMyMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBub3QtcmVkdWNlZC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gbm90LXJlZHVjZWQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvciIgInJlZHVjZS5hdDozMjAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBub3QtcmVkdWNlZC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDozMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjMzMDogc2VkIC1uICcvXkdyYW1tYXIvcTsvXlwkLyFwJyBub3QtcmVkdWNlZC5vdXRwdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgInNlZCAtbiAnL15HcmFtbWFyL3E7L14kLyFwJyBub3QtcmVkdWNlZC5vdXRwdXQiICJyZWR1Y2UuYXQ6MzMwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAtbiAnL15HcmFtbWFyL3E7L14kLyFwJyBub3QtcmVkdWNlZC5vdXRwdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJOb250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyCiAgICBub3RfcmVhY2hhYmxlCiAgICBub25fcHJvZHVjdGl2ZQotVGVybWluYWxzIHdoaWNoIGFyZSBub3QgdXNlZAorVGVybWluYWxzIHVudXNlZCBpbiBncmFtbWFyCiAgICB1c2VsZXNzX3Rva2VuCi1Vc2VsZXNzIHJ1bGVzCitSdWxlcyB1c2VsZXNzIGluIGdyYW1tYXIKICAgICAyIGV4cDogbm9uX3Byb2R1Y3RpdmUKICAgICAzIG5vdF9yZWFjaGFibGU6IHVzZWZ1bAogICAgIDQgbm9uX3Byb2R1Y3RpdmU6IG5vbl9wcm9kdWN0aXZlIHVzZWxlc3NfdG9rZW4KLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInJlZHVjZS5hdDoyNjA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjMzMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogIyBUaGUgcmVkdWNlZCBncmFtbWFyLgpAQCAtNDU1OSw3ICsyMzA1OCw3IEBACiAvKiBBIHVzZWZ1bCBvbmUuICovCiAldG9rZW4gdXNlZnVsCiAldmVyYm9zZQotJW91dHB1dD0icmVkdWNlZC5jIgorJW91dHB1dCAicmVkdWNlZC5jIgogCiAlJQogCkBAIC00NTc3LDgxICsyMzA3NiwxMjggQEAKIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAicmVkdWNlLmF0OjI4NzogYmlzb24gcmVkdWNlZC55IgotZWNobyByZWR1Y2UuYXQ6Mjg3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiByZWR1Y2VkLnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAicmVkdWNlLmF0OjI4NzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MzY3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgcmVkdWNlZC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVkdWNlLmF0OjM2NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCByZWR1Y2VkLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDozNjciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDozNjc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIHJlZHVjZWQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCByZWR1Y2VkLnkiICJyZWR1Y2UuYXQ6MzY3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIHJlZHVjZWQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjM2NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MzY3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVkdWNlLmF0OjM2NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MzY3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjM2NzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZHVjZS5hdDozNjciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjM2NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDozNjc6IGJpc29uIHJlZHVjZWQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZHVjZS5hdDozNjciCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gcmVkdWNlZC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDozNjciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgQ29tcGFyaW5nIHRoZSBwYXJzZXJzLgogY3AgcmVkdWNlZC5jIGV4cG91dAotJGF0X3RyYWNlb2ZmCi1lY2hvICJyZWR1Y2UuYXQ6MjkxOiBzZWQgJ3Mvbm90LXJlZHVjZWQvcmVkdWNlZC9nJyBub3QtcmVkdWNlZC5jIgotZWNobyByZWR1Y2UuYXQ6MjkxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBzZWQgJ3Mvbm90LXJlZHVjZWQvcmVkdWNlZC9nJyBub3QtcmVkdWNlZC5jICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJyZWR1Y2UuYXQ6MjkxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MzcxOiBzZWQgJ3Mvbm90LXJlZHVjZWQvcmVkdWNlZC9nJyBub3QtcmVkdWNlZC5jIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVkdWNlLmF0OjM3MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgJ3Mvbm90LXJlZHVjZWQvcmVkdWNlZC9nJyBub3QtcmVkdWNlZC5jCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDozNzEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwotCi0gIDM5ICkgIyAzOS4gcmVkdWNlLmF0OjMwMTogVW5kZXJpdmFibGUgUnVsZXMKLSAgICBhdF9zZXR1cF9saW5lPSdyZWR1Y2UuYXQ6MzAxJwotICAgIGF0X2Rlc2M9J1VuZGVyaXZhYmxlIFJ1bGVzJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgMzk6IFVuZGVyaXZhYmxlIFJ1bGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIzOS4gcmVkdWNlLmF0OjMwMTogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xMDUKKyNBVF9TVEFSVF8xMDYKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxMDYgJ3JlZHVjZS5hdDozODEnIFwKKyAgIlVuZGVyaXZhYmxlIFJ1bGVzIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiA2CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTA2LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogCiAKIGNhdCA+aW5wdXQueSA8PCdfQVRFT0YnCiAldmVyYm9zZQotJW91dHB1dD0iaW5wdXQuYyIKKyVvdXRwdXQgImlucHV0LmMiCiAldG9rZW4gdXNlZnVsCiAlJQogZXhwOiB1c2VmdWwgfCB1bmRlcml2YWJsZTsKQEAgLTQ2NjAsMTQ1ICsyMzIwNiw4NjQ2IEBACiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInJlZHVjZS5hdDozMjI6IGJpc29uIGlucHV0LnkiCi1lY2hvIHJlZHVjZS5hdDozMjIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIGlucHV0LnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyA+PiRhdF9zdGRlcnI7IGVjaG8gImlucHV0Lnk6IHdhcm5pbmc6IDIgdXNlbGVzcyBub250ZXJtaW5hbHMgYW5kIDMgdXNlbGVzcyBydWxlcwotaW5wdXQueTo1LjE1LTI1OiB3YXJuaW5nOiB1c2VsZXNzIG5vbnRlcm1pbmFsOiB1bmRlcml2YWJsZQotaW5wdXQueTo2LjE0LTI0OiB3YXJuaW5nOiB1c2VsZXNzIG5vbnRlcm1pbmFsOiBpbmRpcmVjdGlvbgotaW5wdXQueTo1LjE1LTI1OiB3YXJuaW5nOiB1c2VsZXNzIHJ1bGU6IGV4cDogdW5kZXJpdmFibGUKLWlucHV0Lnk6Ni4xNC0yNDogd2FybmluZzogdXNlbGVzcyBydWxlOiB1bmRlcml2YWJsZTogaW5kaXJlY3Rpb24KLWlucHV0Lnk6Ny4xNC0yNDogd2FybmluZzogdXNlbGVzcyBydWxlOiBpbmRpcmVjdGlvbjogdW5kZXJpdmFibGUKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInJlZHVjZS5hdDozMjI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjM5NTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWR1Y2UuYXQ6Mzk1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDozOTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDozOTU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgaW5wdXQueSIgInJlZHVjZS5hdDozOTUiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjM5NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6Mzk1OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVkdWNlLmF0OjM5NSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6Mzk1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjM5NTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZHVjZS5hdDozOTUiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjM5NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDozOTU6IGJpc29uIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWR1Y2UuYXQ6Mzk1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OiB3YXJuaW5nOiAyIG5vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXIKK2lucHV0Lnk6IHdhcm5pbmc6IDMgcnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyCitpbnB1dC55OjUuMTUtMjU6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdW5kZXJpdmFibGUKK2lucHV0Lnk6Ni4xNC0yNDogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiBpbmRpcmVjdGlvbgoraW5wdXQueTo1LjE1LTI1OiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcjogZXhwOiB1bmRlcml2YWJsZQoraW5wdXQueTo2LjE0LTI0OiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcjogdW5kZXJpdmFibGU6IGluZGlyZWN0aW9uCitpbnB1dC55OjcuMTQtMjQ6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyOiBpbmRpcmVjdGlvbjogdW5kZXJpdmFibGUKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDozOTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisjIERlZmluaW5nIFBPU0lYTFlfQ09SUkVDVCBjYXVzZXMgYmlzb24gdG8gY29tcGxhaW4gaWYgb3B0aW9ucyBhcmUKKyMgYWRkZWQgYWZ0ZXIgdGhlIGdyYW1tYXIgZmlsZSBuYW1lLCBzbyBza2lwIHRoZXNlIGNoZWNrcyBpbiB0aGF0CisjIGNhc2UuCitpZiB0ZXN0ICIkUE9TSVhMWV9DT1JSRUNUX0lTX0VYUE9SVEVEIiA9IGZhbHNlOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworCisgICMgVG8gYXZvaWQgZXhwYW5kaW5nIGl0IHJlcGVhdGVkbHksIHN0b3JlIHNwZWNpZmllZCBzdGRvdXQuCisgIDogPmV4cG91dAorCisgICMgUnVuIHdpdGggLVdlcnJvci4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDozOTU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtV2Vycm9yIiAicmVkdWNlLmF0OjM5NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjM5NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIEJ1aWxkIGV4cGVjdGVkIHN0ZGVyciB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSAid2FybmluZ3MgYmVpbmcKKyAgIyB0cmVhdGVkIGFzIGVycm9ycyIgbWVzc2FnZS4KKyAgY2F0ID5hdC1iaXNvbi1jaGVjay13YXJuaW5ncyA8PCdfQVRFT0YnCitpbnB1dC55OiB3YXJuaW5nOiAyIG5vbnRlcm1pbmFscyB1c2VsZXNzIGluIGdyYW1tYXIKK2lucHV0Lnk6IHdhcm5pbmc6IDMgcnVsZXMgdXNlbGVzcyBpbiBncmFtbWFyCitpbnB1dC55OjUuMTUtMjU6IHdhcm5pbmc6IG5vbnRlcm1pbmFsIHVzZWxlc3MgaW4gZ3JhbW1hcjogdW5kZXJpdmFibGUKK2lucHV0Lnk6Ni4xNC0yNDogd2FybmluZzogbm9udGVybWluYWwgdXNlbGVzcyBpbiBncmFtbWFyOiBpbmRpcmVjdGlvbgoraW5wdXQueTo1LjE1LTI1OiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcjogZXhwOiB1bmRlcml2YWJsZQoraW5wdXQueTo2LjE0LTI0OiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gZ3JhbW1hcjogdW5kZXJpdmFibGU6IGluZGlyZWN0aW9uCitpbnB1dC55OjcuMTQtMjQ6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBncmFtbWFyOiBpbmRpcmVjdGlvbjogdW5kZXJpdmFibGUKK19BVEVPRgorCisgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PWBzZWQgLW4gXAorICAgICcvOiB3YXJuaW5nOiAvez07cTt9JyBhdC1iaXNvbi1jaGVjay13YXJuaW5nc2AKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2ZpcnN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19maXJzdF90bXA9YHNlZCAtbiBcCisgICAgJy9jb25mbGljdHM6IFswLTldLipyZWR1Y2UkL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdF90bXA6PTF9CisgIGlmIHRlc3QgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcCAtbHQgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0OyB0aGVuCisgICAgYXRfYmlzb25fY2hlY2tfZmlyc3Q9JGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcAorICBmaQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdCAtZ3QgMTsgdGhlbgorICAgIHNlZCAtbiAiMSxgZXhwciAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLSAxYCJwIFwKKyAgICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4gZXhwZXJyCisgIGZpCisgIGVjaG8gJ2Jpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycycgPj4gZXhwZXJyCisKKyAgIyBGaW5pc2ggYnVpbGRpbmcgZXhwZWN0ZWQgc3RkZXJyIGFuZCBjaGVjay4gIFVubGlrZSB3YXJuaW5ncywKKyAgIyBjb21wbGFpbnRzIGNhdXNlIGJpc29uIHRvIGV4aXQgZWFybHkuICBUaHVzLCB3aXRoIC1XZXJyb3IsIGJpc29uCisgICMgZG9lcyBub3QgbmVjZXNzYXJpbHkgcmVwb3J0IGFsbCB3YXJuaW5ncyB0aGF0IGl0IGRvZXMgd2l0aG91dAorICAjIC1XZXJyb3IsIGJ1dCBpdCBhdCBsZWFzdCByZXBvcnRzIG9uZS4KKyAgYXRfYmlzb25fY2hlY2tfbGFzdD1gc2VkIC1uICckPScgc3RkZXJyYAorICA6ICR7YXRfYmlzb25fY2hlY2tfbGFzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfbGFzdD1gZXhwciAkYXRfYmlzb25fY2hlY2tfbGFzdCAtIDFgCisgIHNlZCAtbiAiJGF0X2Jpc29uX2NoZWNrX2ZpcnN0LCRhdF9iaXNvbl9jaGVja19sYXN0InAgXAorICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4+IGV4cGVycgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjM5NTogc2VkICdzLC4qL1xcKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1xcKVwkLFxcMSwnIFxcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVkdWNlLmF0OjM5NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgJ3MsLiovXChiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnNcKSQsXDEsJyBcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCiskYXRfZGlmZiBleHBlcnIgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDozOTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBOb3cgY2hlY2sgLS13YXJuaW5ncz1lcnJvci4KKyAgY3Agc3RkZXJyIGV4cGVycgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjM5NTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IiICJyZWR1Y2UuYXQ6Mzk1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCiskYXRfZGlmZiBleHBlcnIgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDozOTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBOb3cgY2hlY2sgLVdub25lIGFuZCAtLXdhcm5pbmdzPW5vbmUgYnkgbWFraW5nIHN1cmUgdGhhdAorICAjIC1XZXJyb3IgZG9lc24ndCBjaGFuZ2UgdGhlIGV4aXQgc3RhdHVzIHdoZW4gLVdub25lIG9yCisgICMgLS13YXJuaW5ncz1ub25lIGlzIHNwZWNpZmllZC4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDozOTU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtV25vbmUgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkgLVdub25lIC1XZXJyb3IiICJyZWR1Y2UuYXQ6Mzk1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtV25vbmUgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6Mzk1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjM5NTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvciIgInJlZHVjZS5hdDozOTUiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDozOTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQogCi0kYXRfdHJhY2VvbgotCi0KLSRhdF90cmFjZW9mZgotZWNobyAicmVkdWNlLmF0OjMzMjogc2VkIC1uICcvXkdyYW1tYXIvcTsvXlwkLyFwJyBpbnB1dC5vdXRwdXQiCi1lY2hvIHJlZHVjZS5hdDozMzIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IHNlZCAtbiAnL15HcmFtbWFyL3E7L14kLyFwJyBpbnB1dC5vdXRwdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gIlVzZWxlc3Mgbm9udGVybWluYWxzCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQwNTogc2VkIC1uICcvXkdyYW1tYXIvcTsvXlwkLyFwJyBpbnB1dC5vdXRwdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgInNlZCAtbiAnL15HcmFtbWFyL3E7L14kLyFwJyBpbnB1dC5vdXRwdXQiICJyZWR1Y2UuYXQ6NDA1IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAtbiAnL15HcmFtbWFyL3E7L14kLyFwJyBpbnB1dC5vdXRwdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJOb250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyCiAgICB1bmRlcml2YWJsZQogICAgaW5kaXJlY3Rpb24KLVVzZWxlc3MgcnVsZXMKK1J1bGVzIHVzZWxlc3MgaW4gZ3JhbW1hcgogICAgIDIgZXhwOiB1bmRlcml2YWJsZQogICAgIDMgdW5kZXJpdmFibGU6IGluZGlyZWN0aW9uCiAgICAgNCBpbmRpcmVjdGlvbjogdW5kZXJpdmFibGUKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInJlZHVjZS5hdDozMzI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQwNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Ci0KLSAgNDAgKSAjIDQwLiByZWR1Y2UuYXQ6MzQyOiBFbXB0eSBMYW5ndWFnZQotICAgIGF0X3NldHVwX2xpbmU9J3JlZHVjZS5hdDozNDInCi0gICAgYXRfZGVzYz0nRW1wdHkgTGFuZ3VhZ2UnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiA0MDogRW1wdHkgTGFuZ3VhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjQwLiByZWR1Y2UuYXQ6MzQyOiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzEwNgorI0FUX1NUQVJUXzEwNworYXRfZm5fZ3JvdXBfYmFubmVyIDEwNyAncmVkdWNlLmF0OjQyMycgXAorICAiRW1wdHkgTGFuZ3VhZ2UiICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDYKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxMDcuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiBjYXQgPmlucHV0LnkgPDwnX0FURU9GJwotJW91dHB1dD0iaW5wdXQuYyIKKyVvdXRwdXQgImlucHV0LmMiCiAlJQogZXhwOiBleHA7CiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInJlZHVjZS5hdDozNTM6IGJpc29uIGlucHV0LnkiCi1lY2hvIHJlZHVjZS5hdDozNTMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIGlucHV0LnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyA+PiRhdF9zdGRlcnI7IGVjaG8gImlucHV0Lnk6IHdhcm5pbmc6IDIgdXNlbGVzcyBub250ZXJtaW5hbHMgYW5kIDIgdXNlbGVzcyBydWxlcworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQzMTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSIgInJlZHVjZS5hdDo0MzEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueTogd2FybmluZzogMiBub250ZXJtaW5hbHMgdXNlbGVzcyBpbiBncmFtbWFyCitpbnB1dC55OiB3YXJuaW5nOiAyIHJ1bGVzIHVzZWxlc3MgaW4gZ3JhbW1hcgogaW5wdXQueTozLjEtMzogZmF0YWwgZXJyb3I6IHN0YXJ0IHN5bWJvbCBleHAgZG9lcyBub3QgZGVyaXZlIGFueSBzZW50ZW5jZQotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAicmVkdWNlLmF0OjM1MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NDMxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xMDcKKyNBVF9TVEFSVF8xMDgKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxMDggJ3JlZHVjZS5hdDo0NzQnIFwKKyAgIm5vICVkZWZpbmUgbHIudHlwZTogU2luZ2xlIFN0YXRlIFNwbGl0IiAiICAgICAgICAgIiA2CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTA4LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAotICBiYW5uZXItNSApICMgQmFubmVyIDUuIHN5bmNsaW5lcy5hdDoxOQotICAgIGNhdCA8PFxfQVRFT0YKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCi1Vc2VyIEFjdGlvbnMuCislY29kZSB7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgc3RhdGljIGludCB5eWxleCAodm9pZCk7Cit9CiAKKyVsZWZ0ICdhJworLy8gQ29uZmxpY3QgcmVzb2x1dGlvbiByZW5kZXJzIHN0YXRlIDEyIHVucmVhY2hhYmxlIGZvciBjYW5vbmljYWwgTFIoMSkuICBXZQorLy8ga2VlcCBpdCBzbyB0aGF0IHRoZSBwYXNlciB0YWJsZSBkaWZmIGlzIGVhc2llciB0byBjb2RlLgorJWRlZmluZSBsci5rZWVwLXVucmVhY2hhYmxlLXN0YXRlcworCislJQorCisKK1M6ICdhJyBBICdhJyAvKiBydWxlIDEgKi8KKyB8ICdiJyBBICdiJyAvKiBydWxlIDIgKi8KKyB8ICdjJyBjICAgICAvKiBydWxlIDMgKi8KKyA7CisKKy8qIEEgY29uZmxpY3Qgc2hvdWxkIGFwcGVhciBhZnRlciB0aGUgZmlyc3QgJ2EnIGluIHJ1bGVzIDQgYW5kIDUgYnV0IG9ubHkgYWZ0ZXIKKyAgIGhhdmluZyBzaGlmdGVkIHRoZSBmaXJzdCAnYScgaW4gcnVsZSAxLiAgSG93ZXZlciwgd2hlbiBMQUxSKDEpIG1lcmdpbmcgaXMKKyAgIGNob3NlbiwgdGhlIHN0YXRlIGNvbnRhaW5pbmcgdGhhdCBjb25mbGljdCBpcyByZXVzZWQgYWZ0ZXIgaGF2aW5nIHNlZW4gdGhlCisgICBmaXJzdCAnYicgaW4gcnVsZSAyIGFuZCB0aGVuIHRoZSBmaXJzdCAnYScgaW4gcnVsZXMgNCBhbmQgNS4gIEluIGJvdGggY2FzZXMsCisgICBiZWNhdXNlIG9mIHRoZSBtZXJnZWQgc3RhdGUsIGlmIHRoZSBuZXh0IHRva2VuIGlzIGFuICdhJywgdGhlICVsZWZ0IGZvcmNlcyBhCisgICByZWR1Y3Rpb24gYWN0aW9uIHdpdGggcnVsZSA1LiAgSW4gdGhlIGxhdHRlciBjYXNlLCBvbmx5IGEgc2hpZnQgaXMgYWN0dWFsbHkKKyAgIGdyYW1tYXRpY2FsbHkgY29ycmVjdC4gIFRodXMsIHRoZSBwYXJzZXIgd291bGQgcmVwb3J0IGEgc3ludGF4IGVycm9yIGZvciB0aGUKKyAgIGdyYW1tYXRpY2FsbHkgY29ycmVjdCBzZW50ZW5jZSAiYmFhYiIgYmVjYXVzZSBpdCB3b3VsZCBlbmNvdW50ZXIgYSBzeW50YXgKKyAgIGVycm9yIGFmdGVyIHRoYXQgaW5jb3JyZWN0IHJlZHVjdGlvbi4KKworICAgRGVzcGl0ZSBub3QgYmVpbmcgTEFMUigxKSwgTWVuaGlyIHZlcnNpb24gMjAwNzAzMjIgc3VmZmVycyBmcm9tIHRoaXMgcHJvYmxlbQorICAgYXMgd2VsbC4gIEl0IHVzZXMgRGF2aWQgUGFnZXIncyB3ZWFrIGNvbXBhdGliaWxpdHkgdGVzdCBmb3IgbWVyZ2luZyBzdGF0ZXMuCisgICBCaXNvbiBhbmQgTWVuaGlyIGFjY2VwdCBub24tTFIoMSkgZ3JhbW1hcnMgd2l0aCBjb25mbGljdCByZXNvbHV0aW9uLiAgUGFnZXIKKyAgIGRlc2lnbmVkIGhpcyBhbGdvcml0aG0gb25seSBmb3IgTFIoMSkgZ3JhbW1hcnMuICAqLworQTogJ2EnICdhJyAvKiBydWxlIDQgKi8KKyB8ICdhJyAgICAgLyogcnVsZSA1ICovCisgOworCisvKiBSdWxlIDMsIHJ1bGUgNiwgYW5kIHJ1bGUgNyBlbnN1cmUgdGhhdCBCaXNvbiBkb2VzIG5vdCByZXBvcnQgcnVsZSA0IGFzCisgICB1c2VsZXNzIGFmdGVyIGNvbmZsaWN0IHJlc29sdXRpb24uICBUaGlzIHByb3ZlcyB0aGF0LCBldmVuIHRob3VnaCBMQUxSKDEpCisgICBnZW5lcmF0ZXMgaW5jb3JyZWN0IHBhcnNlciB0YWJsZXMgc29tZXRpbWVzLCBCaXNvbiB3aWxsIG5vdCBuZWNlc3NhcmlseQorICAgcHJvZHVjZSBhbnkgd2FybmluZyB0byBoZWxwIHRoZSB1c2VyIHJlYWxpemUgaXQuICAqLworYzogJ2EnICdiJyAvKiBydWxlIDYgKi8KKyB8IEEgICAgICAgLyogcnVsZSA3ICovCisgOworCisKKyUlCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorc3RhdGljIGludAoreXlsZXggKHZvaWQpCit7CisgIHN0YXRpYyBpbnQgY29uc3QgaW5wdXRbXSA9IHsKKyAgICAnYicsICdhJywgJ2EnLCAnYicsIDAKKyAgfTsKKyAgc3RhdGljIGludCBjb25zdCAqaW5wdXRwID0gaW5wdXQ7CisgIHJldHVybiAqaW5wdXRwKys7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CiBfQVRFT0YKLSAgICA7OwogCi0gIDQxICkgIyA0MS4gc3luY2xpbmVzLmF0Ojk1OiBQcm9sb2d1ZSBzeW5jaCBsaW5lCi0gICAgYXRfc2V0dXBfbGluZT0nc3luY2xpbmVzLmF0Ojk1JwotICAgIGF0X2Rlc2M9J1Byb2xvZ3VlIHN5bmNoIGxpbmUnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiA0MTogUHJvbG9ndWUgc3luY2ggbGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjQxLiBzeW5jbGluZXMuYXQ6OTU6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KKworCisjIEluIHNvbWUgdmVyc2lvbnMgb2YgQXV0b2NvbmYsIEFUX0NIRUNLIGludm9rZXMgQVNfRVNDQVBFIGJlZm9yZQorIyBleHBhbmRpbmcgbWFjcm9zLCBzbyBpdCBjb3JydXB0cyBzb21lIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUKKyMgbWFjcm9zLiAgVG8gYXZvaWQgdGhpcywgZXhwYW5kIG5vdyBhbmQgcGFzcyBpdCB0aGUgcmVzdWx0IHdpdGggcHJvcGVyCisjIHN0cmluZyBxdW90YXRpb24uICBBc3N1bWUgYXJncyA3IHRocm91Z2ggMTIgZXhwYW5kIHRvIHByb3Blcmx5IHF1b3RlZAorIyBzdHJpbmdzLgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZHVjZS5hdDo0NzQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NDc0OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIgInJlZHVjZS5hdDo0NzQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZHVjZS5hdDo0NzQiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQ6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWR1Y2UuYXQ6NDc0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NDc0OiBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZHVjZS5hdDo0NzQiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NDogc2VkIC1uICcvXlN0YXRlIDBcJC8sXCRwJyBpbnB1dC5vdXRwdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgInNlZCAtbiAnL15TdGF0ZSAwJC8sJHAnIGlucHV0Lm91dHB1dCIgInJlZHVjZS5hdDo0NzQiCisoICRhdF9jaGVja190cmFjZTsgc2VkIC1uICcvXlN0YXRlIDAkLywkcCcgaW5wdXQub3V0cHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiU3RhdGUgMAorCisgICAgMCBcJGFjY2VwdDogLiBTIFwkZW5kCisgICAgMSBTOiAuICdhJyBBICdhJworICAgIDIgIHwgLiAnYicgQSAnYicKKyAgICAzICB8IC4gJ2MnIGMKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxCisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIKKyAgICAnYycgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMworCisgICAgUyAgZ28gdG8gc3RhdGUgNAorCisKK1N0YXRlIDEKKworICAgIDEgUzogJ2EnIC4gQSAnYScKKyAgICA0IEE6IC4gJ2EnICdhJworICAgIDUgIHwgLiAnYScKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1CisKKyAgICBBICBnbyB0byBzdGF0ZSA2CisKKworU3RhdGUgMgorCisgICAgMiBTOiAnYicgLiBBICdiJworICAgIDQgQTogLiAnYScgJ2EnCisgICAgNSAgfCAuICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDUKKworICAgIEEgIGdvIHRvIHN0YXRlIDcKKworCitTdGF0ZSAzCisKKyAgICAzIFM6ICdjJyAuIGMKKyAgICA0IEE6IC4gJ2EnICdhJworICAgIDUgIHwgLiAnYScKKyAgICA2IGM6IC4gJ2EnICdiJworICAgIDcgIHwgLiBBCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOAorCisgICAgQSAgZ28gdG8gc3RhdGUgOQorICAgIGMgIGdvIHRvIHN0YXRlIDEwCisKKworU3RhdGUgNAorCisgICAgMCBcJGFjY2VwdDogUyAuIFwkZW5kCisKKyAgICBcJGVuZCAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxMQorCisKK1N0YXRlIDUKKworICAgIDQgQTogJ2EnIC4gJ2EnCisgICAgNSAgfCAnYScgLiAgWydhJywgJ2InXQorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA1IChBKQorCisgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlIDUgYW5kIHRva2VuICdhJyByZXNvbHZlZCBhcyByZWR1Y2UgKCVsZWZ0ICdhJykuCisKKworU3RhdGUgNgorCisgICAgMSBTOiAnYScgQSAuICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEzCisKKworU3RhdGUgNworCisgICAgMiBTOiAnYicgQSAuICdiJworCisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE0CisKKworU3RhdGUgOAorCisgICAgNCBBOiAnYScgLiAnYScKKyAgICA1ICB8ICdhJyAuICBbXCRlbmRdCisgICAgNiBjOiAnYScgLiAnYicKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxMgorICAgICdiJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxNQorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA1IChBKQorCisKK1N0YXRlIDkKKworICAgIDcgYzogQSAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDcgKGMpCisKKworU3RhdGUgMTAKKworICAgIDMgUzogJ2MnIGMgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAzIChTKQorCisKK1N0YXRlIDExCisKKyAgICAwIFwkYWNjZXB0OiBTIFwkZW5kIC4KKworICAgIFwkZGVmYXVsdCAgYWNjZXB0CisKKworU3RhdGUgMTIKKworICAgIDQgQTogJ2EnICdhJyAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDQgKEEpCisKKworU3RhdGUgMTMKKworICAgIDEgUzogJ2EnIEEgJ2EnIC4KKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMSAoUykKKworCitTdGF0ZSAxNAorCisgICAgMiBTOiAnYicgQSAnYicgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAyIChTKQorCisKK1N0YXRlIDE1CisKKyAgICA2IGM6ICdhJyAnYicgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA2IChjKQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyMgQ2Fub25pY2FsIExSIGdlbmVyYXRlcyB2ZXJ5IGxhcmdlIHRhYmxlcywgcmVzdWx0aW5nIGluIHZlcnkgbG9uZworIyBmaWxlcyB3aXRoICNsaW5lIGRpcmVjdGl2ZXMgdGhhdCBtYXkgb3ZlcmZsb3cgd2hhdCB0aGUgc3RhbmRhcmRzCisjIChDOTAgYW5kIEMrKzk4KSBndWFyYW50ZWU6IDMyNzY3LiAgSW4gdGhhdCBjYXNlLCBHQ0MncyAtcGVkYW50aWMKKyMgd2lsbCBpc3N1ZSBhbiBlcnJvci4KKyMKKyMgVGhlcmUgaXMgbm8gIiIgYXJvdW5kIGB3Y2Agc2luY2Ugc29tZSBpbmRlbnQgdGhlIHJlc3VsdC4KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQ6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJyZWR1Y2UuYXQ6NDc0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NDc0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQ6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAicmVkdWNlLmF0OjQ3NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQ6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAicmVkdWNlLmF0OjQ3NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NDc0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQ6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVkdWNlLmF0OjQ3NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvcgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTA4CisjQVRfU1RBUlRfMTA5CithdF9mbl9ncm91cF9iYW5uZXIgMTA5ICdyZWR1Y2UuYXQ6NDc0JyBcCisgICIlZGVmaW5lIGxyLnR5cGUgbGFscjogU2luZ2xlIFN0YXRlIFNwbGl0IiAiICAgICAgICIgNgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjEwOS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislY29kZSB7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgc3RhdGljIGludCB5eWxleCAodm9pZCk7Cit9CisKKyVkZWZpbmUgbHIudHlwZSBsYWxyCislbGVmdCAnYScKKy8vIENvbmZsaWN0IHJlc29sdXRpb24gcmVuZGVycyBzdGF0ZSAxMiB1bnJlYWNoYWJsZSBmb3IgY2Fub25pY2FsIExSKDEpLiAgV2UKKy8vIGtlZXAgaXQgc28gdGhhdCB0aGUgcGFzZXIgdGFibGUgZGlmZiBpcyBlYXNpZXIgdG8gY29kZS4KKyVkZWZpbmUgbHIua2VlcC11bnJlYWNoYWJsZS1zdGF0ZXMKKworJSUKKworCitTOiAnYScgQSAnYScgLyogcnVsZSAxICovCisgfCAnYicgQSAnYicgLyogcnVsZSAyICovCisgfCAnYycgYyAgICAgLyogcnVsZSAzICovCisgOworCisvKiBBIGNvbmZsaWN0IHNob3VsZCBhcHBlYXIgYWZ0ZXIgdGhlIGZpcnN0ICdhJyBpbiBydWxlcyA0IGFuZCA1IGJ1dCBvbmx5IGFmdGVyCisgICBoYXZpbmcgc2hpZnRlZCB0aGUgZmlyc3QgJ2EnIGluIHJ1bGUgMS4gIEhvd2V2ZXIsIHdoZW4gTEFMUigxKSBtZXJnaW5nIGlzCisgICBjaG9zZW4sIHRoZSBzdGF0ZSBjb250YWluaW5nIHRoYXQgY29uZmxpY3QgaXMgcmV1c2VkIGFmdGVyIGhhdmluZyBzZWVuIHRoZQorICAgZmlyc3QgJ2InIGluIHJ1bGUgMiBhbmQgdGhlbiB0aGUgZmlyc3QgJ2EnIGluIHJ1bGVzIDQgYW5kIDUuICBJbiBib3RoIGNhc2VzLAorICAgYmVjYXVzZSBvZiB0aGUgbWVyZ2VkIHN0YXRlLCBpZiB0aGUgbmV4dCB0b2tlbiBpcyBhbiAnYScsIHRoZSAlbGVmdCBmb3JjZXMgYQorICAgcmVkdWN0aW9uIGFjdGlvbiB3aXRoIHJ1bGUgNS4gIEluIHRoZSBsYXR0ZXIgY2FzZSwgb25seSBhIHNoaWZ0IGlzIGFjdHVhbGx5CisgICBncmFtbWF0aWNhbGx5IGNvcnJlY3QuICBUaHVzLCB0aGUgcGFyc2VyIHdvdWxkIHJlcG9ydCBhIHN5bnRheCBlcnJvciBmb3IgdGhlCisgICBncmFtbWF0aWNhbGx5IGNvcnJlY3Qgc2VudGVuY2UgImJhYWIiIGJlY2F1c2UgaXQgd291bGQgZW5jb3VudGVyIGEgc3ludGF4CisgICBlcnJvciBhZnRlciB0aGF0IGluY29ycmVjdCByZWR1Y3Rpb24uCisKKyAgIERlc3BpdGUgbm90IGJlaW5nIExBTFIoMSksIE1lbmhpciB2ZXJzaW9uIDIwMDcwMzIyIHN1ZmZlcnMgZnJvbSB0aGlzIHByb2JsZW0KKyAgIGFzIHdlbGwuICBJdCB1c2VzIERhdmlkIFBhZ2VyJ3Mgd2VhayBjb21wYXRpYmlsaXR5IHRlc3QgZm9yIG1lcmdpbmcgc3RhdGVzLgorICAgQmlzb24gYW5kIE1lbmhpciBhY2NlcHQgbm9uLUxSKDEpIGdyYW1tYXJzIHdpdGggY29uZmxpY3QgcmVzb2x1dGlvbi4gIFBhZ2VyCisgICBkZXNpZ25lZCBoaXMgYWxnb3JpdGhtIG9ubHkgZm9yIExSKDEpIGdyYW1tYXJzLiAgKi8KK0E6ICdhJyAnYScgLyogcnVsZSA0ICovCisgfCAnYScgICAgIC8qIHJ1bGUgNSAqLworIDsKKworLyogUnVsZSAzLCBydWxlIDYsIGFuZCBydWxlIDcgZW5zdXJlIHRoYXQgQmlzb24gZG9lcyBub3QgcmVwb3J0IHJ1bGUgNCBhcworICAgdXNlbGVzcyBhZnRlciBjb25mbGljdCByZXNvbHV0aW9uLiAgVGhpcyBwcm92ZXMgdGhhdCwgZXZlbiB0aG91Z2ggTEFMUigxKQorICAgZ2VuZXJhdGVzIGluY29ycmVjdCBwYXJzZXIgdGFibGVzIHNvbWV0aW1lcywgQmlzb24gd2lsbCBub3QgbmVjZXNzYXJpbHkKKyAgIHByb2R1Y2UgYW55IHdhcm5pbmcgdG8gaGVscCB0aGUgdXNlciByZWFsaXplIGl0LiAgKi8KK2M6ICdhJyAnYicgLyogcnVsZSA2ICovCisgfCBBICAgICAgIC8qIHJ1bGUgNyAqLworIDsKKworCislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KK3N0YXRpYyBpbnQKK3l5bGV4ICh2b2lkKQoreworICBzdGF0aWMgaW50IGNvbnN0IGlucHV0W10gPSB7CisgICAgJ2InLCAnYScsICdhJywgJ2InLCAwCisgIH07CisgIHN0YXRpYyBpbnQgY29uc3QgKmlucHV0cCA9IGlucHV0OworICByZXR1cm4gKmlucHV0cCsrOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCisjIEluIHNvbWUgdmVyc2lvbnMgb2YgQXV0b2NvbmYsIEFUX0NIRUNLIGludm9rZXMgQVNfRVNDQVBFIGJlZm9yZQorIyBleHBhbmRpbmcgbWFjcm9zLCBzbyBpdCBjb3JydXB0cyBzb21lIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUKKyMgbWFjcm9zLiAgVG8gYXZvaWQgdGhpcywgZXhwYW5kIG5vdyBhbmQgcGFzcyBpdCB0aGUgcmVzdWx0IHdpdGggcHJvcGVyCisjIHN0cmluZyBxdW90YXRpb24uICBBc3N1bWUgYXJncyA3IHRocm91Z2ggMTIgZXhwYW5kIHRvIHByb3Blcmx5IHF1b3RlZAorIyBzdHJpbmdzLgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZHVjZS5hdDo0NzQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NDc0OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIgInJlZHVjZS5hdDo0NzQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZHVjZS5hdDo0NzQiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQ6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWR1Y2UuYXQ6NDc0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NDc0OiBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZHVjZS5hdDo0NzQiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NDogc2VkIC1uICcvXlN0YXRlIDBcJC8sXCRwJyBpbnB1dC5vdXRwdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgInNlZCAtbiAnL15TdGF0ZSAwJC8sJHAnIGlucHV0Lm91dHB1dCIgInJlZHVjZS5hdDo0NzQiCisoICRhdF9jaGVja190cmFjZTsgc2VkIC1uICcvXlN0YXRlIDAkLywkcCcgaW5wdXQub3V0cHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiU3RhdGUgMAorCisgICAgMCBcJGFjY2VwdDogLiBTIFwkZW5kCisgICAgMSBTOiAuICdhJyBBICdhJworICAgIDIgIHwgLiAnYicgQSAnYicKKyAgICAzICB8IC4gJ2MnIGMKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxCisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIKKyAgICAnYycgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMworCisgICAgUyAgZ28gdG8gc3RhdGUgNAorCisKK1N0YXRlIDEKKworICAgIDEgUzogJ2EnIC4gQSAnYScKKyAgICA0IEE6IC4gJ2EnICdhJworICAgIDUgIHwgLiAnYScKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1CisKKyAgICBBICBnbyB0byBzdGF0ZSA2CisKKworU3RhdGUgMgorCisgICAgMiBTOiAnYicgLiBBICdiJworICAgIDQgQTogLiAnYScgJ2EnCisgICAgNSAgfCAuICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDUKKworICAgIEEgIGdvIHRvIHN0YXRlIDcKKworCitTdGF0ZSAzCisKKyAgICAzIFM6ICdjJyAuIGMKKyAgICA0IEE6IC4gJ2EnICdhJworICAgIDUgIHwgLiAnYScKKyAgICA2IGM6IC4gJ2EnICdiJworICAgIDcgIHwgLiBBCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOAorCisgICAgQSAgZ28gdG8gc3RhdGUgOQorICAgIGMgIGdvIHRvIHN0YXRlIDEwCisKKworU3RhdGUgNAorCisgICAgMCBcJGFjY2VwdDogUyAuIFwkZW5kCisKKyAgICBcJGVuZCAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxMQorCisKK1N0YXRlIDUKKworICAgIDQgQTogJ2EnIC4gJ2EnCisgICAgNSAgfCAnYScgLiAgWydhJywgJ2InXQorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA1IChBKQorCisgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlIDUgYW5kIHRva2VuICdhJyByZXNvbHZlZCBhcyByZWR1Y2UgKCVsZWZ0ICdhJykuCisKKworU3RhdGUgNgorCisgICAgMSBTOiAnYScgQSAuICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEzCisKKworU3RhdGUgNworCisgICAgMiBTOiAnYicgQSAuICdiJworCisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE0CisKKworU3RhdGUgOAorCisgICAgNCBBOiAnYScgLiAnYScKKyAgICA1ICB8ICdhJyAuICBbXCRlbmRdCisgICAgNiBjOiAnYScgLiAnYicKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxMgorICAgICdiJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxNQorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA1IChBKQorCisKK1N0YXRlIDkKKworICAgIDcgYzogQSAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDcgKGMpCisKKworU3RhdGUgMTAKKworICAgIDMgUzogJ2MnIGMgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAzIChTKQorCisKK1N0YXRlIDExCisKKyAgICAwIFwkYWNjZXB0OiBTIFwkZW5kIC4KKworICAgIFwkZGVmYXVsdCAgYWNjZXB0CisKKworU3RhdGUgMTIKKworICAgIDQgQTogJ2EnICdhJyAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDQgKEEpCisKKworU3RhdGUgMTMKKworICAgIDEgUzogJ2EnIEEgJ2EnIC4KKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMSAoUykKKworCitTdGF0ZSAxNAorCisgICAgMiBTOiAnYicgQSAnYicgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAyIChTKQorCisKK1N0YXRlIDE1CisKKyAgICA2IGM6ICdhJyAnYicgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA2IChjKQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyMgQ2Fub25pY2FsIExSIGdlbmVyYXRlcyB2ZXJ5IGxhcmdlIHRhYmxlcywgcmVzdWx0aW5nIGluIHZlcnkgbG9uZworIyBmaWxlcyB3aXRoICNsaW5lIGRpcmVjdGl2ZXMgdGhhdCBtYXkgb3ZlcmZsb3cgd2hhdCB0aGUgc3RhbmRhcmRzCisjIChDOTAgYW5kIEMrKzk4KSBndWFyYW50ZWU6IDMyNzY3LiAgSW4gdGhhdCBjYXNlLCBHQ0MncyAtcGVkYW50aWMKKyMgd2lsbCBpc3N1ZSBhbiBlcnJvci4KKyMKKyMgVGhlcmUgaXMgbm8gIiIgYXJvdW5kIGB3Y2Agc2luY2Ugc29tZSBpbmRlbnQgdGhlIHJlc3VsdC4KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQ6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJyZWR1Y2UuYXQ6NDc0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NDc0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQ6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAicmVkdWNlLmF0OjQ3NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQ6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAicmVkdWNlLmF0OjQ3NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NDc0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQ6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVkdWNlLmF0OjQ3NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvcgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTA5CisjQVRfU1RBUlRfMTEwCithdF9mbl9ncm91cF9iYW5uZXIgMTEwICdyZWR1Y2UuYXQ6NDc0JyBcCisgICIlZGVmaW5lIGxyLnR5cGUgaWVscjogU2luZ2xlIFN0YXRlIFNwbGl0IiAiICAgICAgICIgNgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjExMC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislY29kZSB7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgc3RhdGljIGludCB5eWxleCAodm9pZCk7Cit9CisKKyVkZWZpbmUgbHIudHlwZSBpZWxyCislbGVmdCAnYScKKy8vIENvbmZsaWN0IHJlc29sdXRpb24gcmVuZGVycyBzdGF0ZSAxMiB1bnJlYWNoYWJsZSBmb3IgY2Fub25pY2FsIExSKDEpLiAgV2UKKy8vIGtlZXAgaXQgc28gdGhhdCB0aGUgcGFzZXIgdGFibGUgZGlmZiBpcyBlYXNpZXIgdG8gY29kZS4KKyVkZWZpbmUgbHIua2VlcC11bnJlYWNoYWJsZS1zdGF0ZXMKKworJSUKKworCitTOiAnYScgQSAnYScgLyogcnVsZSAxICovCisgfCAnYicgQSAnYicgLyogcnVsZSAyICovCisgfCAnYycgYyAgICAgLyogcnVsZSAzICovCisgOworCisvKiBBIGNvbmZsaWN0IHNob3VsZCBhcHBlYXIgYWZ0ZXIgdGhlIGZpcnN0ICdhJyBpbiBydWxlcyA0IGFuZCA1IGJ1dCBvbmx5IGFmdGVyCisgICBoYXZpbmcgc2hpZnRlZCB0aGUgZmlyc3QgJ2EnIGluIHJ1bGUgMS4gIEhvd2V2ZXIsIHdoZW4gTEFMUigxKSBtZXJnaW5nIGlzCisgICBjaG9zZW4sIHRoZSBzdGF0ZSBjb250YWluaW5nIHRoYXQgY29uZmxpY3QgaXMgcmV1c2VkIGFmdGVyIGhhdmluZyBzZWVuIHRoZQorICAgZmlyc3QgJ2InIGluIHJ1bGUgMiBhbmQgdGhlbiB0aGUgZmlyc3QgJ2EnIGluIHJ1bGVzIDQgYW5kIDUuICBJbiBib3RoIGNhc2VzLAorICAgYmVjYXVzZSBvZiB0aGUgbWVyZ2VkIHN0YXRlLCBpZiB0aGUgbmV4dCB0b2tlbiBpcyBhbiAnYScsIHRoZSAlbGVmdCBmb3JjZXMgYQorICAgcmVkdWN0aW9uIGFjdGlvbiB3aXRoIHJ1bGUgNS4gIEluIHRoZSBsYXR0ZXIgY2FzZSwgb25seSBhIHNoaWZ0IGlzIGFjdHVhbGx5CisgICBncmFtbWF0aWNhbGx5IGNvcnJlY3QuICBUaHVzLCB0aGUgcGFyc2VyIHdvdWxkIHJlcG9ydCBhIHN5bnRheCBlcnJvciBmb3IgdGhlCisgICBncmFtbWF0aWNhbGx5IGNvcnJlY3Qgc2VudGVuY2UgImJhYWIiIGJlY2F1c2UgaXQgd291bGQgZW5jb3VudGVyIGEgc3ludGF4CisgICBlcnJvciBhZnRlciB0aGF0IGluY29ycmVjdCByZWR1Y3Rpb24uCisKKyAgIERlc3BpdGUgbm90IGJlaW5nIExBTFIoMSksIE1lbmhpciB2ZXJzaW9uIDIwMDcwMzIyIHN1ZmZlcnMgZnJvbSB0aGlzIHByb2JsZW0KKyAgIGFzIHdlbGwuICBJdCB1c2VzIERhdmlkIFBhZ2VyJ3Mgd2VhayBjb21wYXRpYmlsaXR5IHRlc3QgZm9yIG1lcmdpbmcgc3RhdGVzLgorICAgQmlzb24gYW5kIE1lbmhpciBhY2NlcHQgbm9uLUxSKDEpIGdyYW1tYXJzIHdpdGggY29uZmxpY3QgcmVzb2x1dGlvbi4gIFBhZ2VyCisgICBkZXNpZ25lZCBoaXMgYWxnb3JpdGhtIG9ubHkgZm9yIExSKDEpIGdyYW1tYXJzLiAgKi8KK0E6ICdhJyAnYScgLyogcnVsZSA0ICovCisgfCAnYScgICAgIC8qIHJ1bGUgNSAqLworIDsKKworLyogUnVsZSAzLCBydWxlIDYsIGFuZCBydWxlIDcgZW5zdXJlIHRoYXQgQmlzb24gZG9lcyBub3QgcmVwb3J0IHJ1bGUgNCBhcworICAgdXNlbGVzcyBhZnRlciBjb25mbGljdCByZXNvbHV0aW9uLiAgVGhpcyBwcm92ZXMgdGhhdCwgZXZlbiB0aG91Z2ggTEFMUigxKQorICAgZ2VuZXJhdGVzIGluY29ycmVjdCBwYXJzZXIgdGFibGVzIHNvbWV0aW1lcywgQmlzb24gd2lsbCBub3QgbmVjZXNzYXJpbHkKKyAgIHByb2R1Y2UgYW55IHdhcm5pbmcgdG8gaGVscCB0aGUgdXNlciByZWFsaXplIGl0LiAgKi8KK2M6ICdhJyAnYicgLyogcnVsZSA2ICovCisgfCBBICAgICAgIC8qIHJ1bGUgNyAqLworIDsKKworCislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KK3N0YXRpYyBpbnQKK3l5bGV4ICh2b2lkKQoreworICBzdGF0aWMgaW50IGNvbnN0IGlucHV0W10gPSB7CisgICAgJ2InLCAnYScsICdhJywgJ2InLCAwCisgIH07CisgIHN0YXRpYyBpbnQgY29uc3QgKmlucHV0cCA9IGlucHV0OworICByZXR1cm4gKmlucHV0cCsrOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCisjIEluIHNvbWUgdmVyc2lvbnMgb2YgQXV0b2NvbmYsIEFUX0NIRUNLIGludm9rZXMgQVNfRVNDQVBFIGJlZm9yZQorIyBleHBhbmRpbmcgbWFjcm9zLCBzbyBpdCBjb3JydXB0cyBzb21lIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUKKyMgbWFjcm9zLiAgVG8gYXZvaWQgdGhpcywgZXhwYW5kIG5vdyBhbmQgcGFzcyBpdCB0aGUgcmVzdWx0IHdpdGggcHJvcGVyCisjIHN0cmluZyBxdW90YXRpb24uICBBc3N1bWUgYXJncyA3IHRocm91Z2ggMTIgZXhwYW5kIHRvIHByb3Blcmx5IHF1b3RlZAorIyBzdHJpbmdzLgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZHVjZS5hdDo0NzQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NDc0OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIgInJlZHVjZS5hdDo0NzQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZHVjZS5hdDo0NzQiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQ6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWR1Y2UuYXQ6NDc0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NDc0OiBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZHVjZS5hdDo0NzQiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NDogc2VkIC1uICcvXlN0YXRlIDBcJC8sXCRwJyBpbnB1dC5vdXRwdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgInNlZCAtbiAnL15TdGF0ZSAwJC8sJHAnIGlucHV0Lm91dHB1dCIgInJlZHVjZS5hdDo0NzQiCisoICRhdF9jaGVja190cmFjZTsgc2VkIC1uICcvXlN0YXRlIDAkLywkcCcgaW5wdXQub3V0cHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiU3RhdGUgMAorCisgICAgMCBcJGFjY2VwdDogLiBTIFwkZW5kCisgICAgMSBTOiAuICdhJyBBICdhJworICAgIDIgIHwgLiAnYicgQSAnYicKKyAgICAzICB8IC4gJ2MnIGMKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxCisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIKKyAgICAnYycgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMworCisgICAgUyAgZ28gdG8gc3RhdGUgNAorCisKK1N0YXRlIDEKKworICAgIDEgUzogJ2EnIC4gQSAnYScKKyAgICA0IEE6IC4gJ2EnICdhJworICAgIDUgIHwgLiAnYScKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1CisKKyAgICBBICBnbyB0byBzdGF0ZSA2CisKKworU3RhdGUgMgorCisgICAgMiBTOiAnYicgLiBBICdiJworICAgIDQgQTogLiAnYScgJ2EnCisgICAgNSAgfCAuICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE2CisKKyAgICBBICBnbyB0byBzdGF0ZSA3CisKKworU3RhdGUgMworCisgICAgMyBTOiAnYycgLiBjCisgICAgNCBBOiAuICdhJyAnYScKKyAgICA1ICB8IC4gJ2EnCisgICAgNiBjOiAuICdhJyAnYicKKyAgICA3ICB8IC4gQQorCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDgKKworICAgIEEgIGdvIHRvIHN0YXRlIDkKKyAgICBjICBnbyB0byBzdGF0ZSAxMAorCisKK1N0YXRlIDQKKworICAgIDAgXCRhY2NlcHQ6IFMgLiBcJGVuZAorCisgICAgXCRlbmQgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTEKKworCitTdGF0ZSA1CisKKyAgICA0IEE6ICdhJyAuICdhJworICAgIDUgIHwgJ2EnIC4gIFsnYSddCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDUgKEEpCisKKyAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgNSBhbmQgdG9rZW4gJ2EnIHJlc29sdmVkIGFzIHJlZHVjZSAoJWxlZnQgJ2EnKS4KKworCitTdGF0ZSA2CisKKyAgICAxIFM6ICdhJyBBIC4gJ2EnCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTMKKworCitTdGF0ZSA3CisKKyAgICAyIFM6ICdiJyBBIC4gJ2InCisKKyAgICAnYicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTQKKworCitTdGF0ZSA4CisKKyAgICA0IEE6ICdhJyAuICdhJworICAgIDUgIHwgJ2EnIC4gIFtcJGVuZF0KKyAgICA2IGM6ICdhJyAuICdiJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEyCisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE1CisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDUgKEEpCisKKworU3RhdGUgOQorCisgICAgNyBjOiBBIC4KKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgNyAoYykKKworCitTdGF0ZSAxMAorCisgICAgMyBTOiAnYycgYyAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDMgKFMpCisKKworU3RhdGUgMTEKKworICAgIDAgXCRhY2NlcHQ6IFMgXCRlbmQgLgorCisgICAgXCRkZWZhdWx0ICBhY2NlcHQKKworCitTdGF0ZSAxMgorCisgICAgNCBBOiAnYScgJ2EnIC4KKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgNCAoQSkKKworCitTdGF0ZSAxMworCisgICAgMSBTOiAnYScgQSAnYScgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAxIChTKQorCisKK1N0YXRlIDE0CisKKyAgICAyIFM6ICdiJyBBICdiJyAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDIgKFMpCisKKworU3RhdGUgMTUKKworICAgIDYgYzogJ2EnICdiJyAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDYgKGMpCisKKworU3RhdGUgMTYKKworICAgIDQgQTogJ2EnIC4gJ2EnCisgICAgNSAgfCAnYScgLiAgWydiJ10KKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxMgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA1IChBKQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyMgQ2Fub25pY2FsIExSIGdlbmVyYXRlcyB2ZXJ5IGxhcmdlIHRhYmxlcywgcmVzdWx0aW5nIGluIHZlcnkgbG9uZworIyBmaWxlcyB3aXRoICNsaW5lIGRpcmVjdGl2ZXMgdGhhdCBtYXkgb3ZlcmZsb3cgd2hhdCB0aGUgc3RhbmRhcmRzCisjIChDOTAgYW5kIEMrKzk4KSBndWFyYW50ZWU6IDMyNzY3LiAgSW4gdGhhdCBjYXNlLCBHQ0MncyAtcGVkYW50aWMKKyMgd2lsbCBpc3N1ZSBhbiBlcnJvci4KKyMKKyMgVGhlcmUgaXMgbm8gIiIgYXJvdW5kIGB3Y2Agc2luY2Ugc29tZSBpbmRlbnQgdGhlIHJlc3VsdC4KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQ6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJyZWR1Y2UuYXQ6NDc0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NDc0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQ6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAicmVkdWNlLmF0OjQ3NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQ6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAicmVkdWNlLmF0OjQ3NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NDc0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQ6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVkdWNlLmF0OjQ3NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NDc0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xMTAKKyNBVF9TVEFSVF8xMTEKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxMTEgJ3JlZHVjZS5hdDo0NzQnIFwKKyAgIiVkZWZpbmUgbHIudHlwZSBjYW5vbmljYWwtbHI6IFNpbmdsZSBTdGF0ZSBTcGxpdCIgIiIgNgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjExMS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislY29kZSB7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgc3RhdGljIGludCB5eWxleCAodm9pZCk7Cit9CisKKyVkZWZpbmUgbHIudHlwZSBjYW5vbmljYWwtbHIKKyVsZWZ0ICdhJworLy8gQ29uZmxpY3QgcmVzb2x1dGlvbiByZW5kZXJzIHN0YXRlIDEyIHVucmVhY2hhYmxlIGZvciBjYW5vbmljYWwgTFIoMSkuICBXZQorLy8ga2VlcCBpdCBzbyB0aGF0IHRoZSBwYXNlciB0YWJsZSBkaWZmIGlzIGVhc2llciB0byBjb2RlLgorJWRlZmluZSBsci5rZWVwLXVucmVhY2hhYmxlLXN0YXRlcworCislJQorCisKK1M6ICdhJyBBICdhJyAvKiBydWxlIDEgKi8KKyB8ICdiJyBBICdiJyAvKiBydWxlIDIgKi8KKyB8ICdjJyBjICAgICAvKiBydWxlIDMgKi8KKyA7CisKKy8qIEEgY29uZmxpY3Qgc2hvdWxkIGFwcGVhciBhZnRlciB0aGUgZmlyc3QgJ2EnIGluIHJ1bGVzIDQgYW5kIDUgYnV0IG9ubHkgYWZ0ZXIKKyAgIGhhdmluZyBzaGlmdGVkIHRoZSBmaXJzdCAnYScgaW4gcnVsZSAxLiAgSG93ZXZlciwgd2hlbiBMQUxSKDEpIG1lcmdpbmcgaXMKKyAgIGNob3NlbiwgdGhlIHN0YXRlIGNvbnRhaW5pbmcgdGhhdCBjb25mbGljdCBpcyByZXVzZWQgYWZ0ZXIgaGF2aW5nIHNlZW4gdGhlCisgICBmaXJzdCAnYicgaW4gcnVsZSAyIGFuZCB0aGVuIHRoZSBmaXJzdCAnYScgaW4gcnVsZXMgNCBhbmQgNS4gIEluIGJvdGggY2FzZXMsCisgICBiZWNhdXNlIG9mIHRoZSBtZXJnZWQgc3RhdGUsIGlmIHRoZSBuZXh0IHRva2VuIGlzIGFuICdhJywgdGhlICVsZWZ0IGZvcmNlcyBhCisgICByZWR1Y3Rpb24gYWN0aW9uIHdpdGggcnVsZSA1LiAgSW4gdGhlIGxhdHRlciBjYXNlLCBvbmx5IGEgc2hpZnQgaXMgYWN0dWFsbHkKKyAgIGdyYW1tYXRpY2FsbHkgY29ycmVjdC4gIFRodXMsIHRoZSBwYXJzZXIgd291bGQgcmVwb3J0IGEgc3ludGF4IGVycm9yIGZvciB0aGUKKyAgIGdyYW1tYXRpY2FsbHkgY29ycmVjdCBzZW50ZW5jZSAiYmFhYiIgYmVjYXVzZSBpdCB3b3VsZCBlbmNvdW50ZXIgYSBzeW50YXgKKyAgIGVycm9yIGFmdGVyIHRoYXQgaW5jb3JyZWN0IHJlZHVjdGlvbi4KKworICAgRGVzcGl0ZSBub3QgYmVpbmcgTEFMUigxKSwgTWVuaGlyIHZlcnNpb24gMjAwNzAzMjIgc3VmZmVycyBmcm9tIHRoaXMgcHJvYmxlbQorICAgYXMgd2VsbC4gIEl0IHVzZXMgRGF2aWQgUGFnZXIncyB3ZWFrIGNvbXBhdGliaWxpdHkgdGVzdCBmb3IgbWVyZ2luZyBzdGF0ZXMuCisgICBCaXNvbiBhbmQgTWVuaGlyIGFjY2VwdCBub24tTFIoMSkgZ3JhbW1hcnMgd2l0aCBjb25mbGljdCByZXNvbHV0aW9uLiAgUGFnZXIKKyAgIGRlc2lnbmVkIGhpcyBhbGdvcml0aG0gb25seSBmb3IgTFIoMSkgZ3JhbW1hcnMuICAqLworQTogJ2EnICdhJyAvKiBydWxlIDQgKi8KKyB8ICdhJyAgICAgLyogcnVsZSA1ICovCisgOworCisvKiBSdWxlIDMsIHJ1bGUgNiwgYW5kIHJ1bGUgNyBlbnN1cmUgdGhhdCBCaXNvbiBkb2VzIG5vdCByZXBvcnQgcnVsZSA0IGFzCisgICB1c2VsZXNzIGFmdGVyIGNvbmZsaWN0IHJlc29sdXRpb24uICBUaGlzIHByb3ZlcyB0aGF0LCBldmVuIHRob3VnaCBMQUxSKDEpCisgICBnZW5lcmF0ZXMgaW5jb3JyZWN0IHBhcnNlciB0YWJsZXMgc29tZXRpbWVzLCBCaXNvbiB3aWxsIG5vdCBuZWNlc3NhcmlseQorICAgcHJvZHVjZSBhbnkgd2FybmluZyB0byBoZWxwIHRoZSB1c2VyIHJlYWxpemUgaXQuICAqLworYzogJ2EnICdiJyAvKiBydWxlIDYgKi8KKyB8IEEgICAgICAgLyogcnVsZSA3ICovCisgOworCisKKyUlCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorc3RhdGljIGludAoreXlsZXggKHZvaWQpCit7CisgIHN0YXRpYyBpbnQgY29uc3QgaW5wdXRbXSA9IHsKKyAgICAnYicsICdhJywgJ2EnLCAnYicsIDAKKyAgfTsKKyAgc3RhdGljIGludCBjb25zdCAqaW5wdXRwID0gaW5wdXQ7CisgIHJldHVybiAqaW5wdXRwKys7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKKyMgSW4gc29tZSB2ZXJzaW9ucyBvZiBBdXRvY29uZiwgQVRfQ0hFQ0sgaW52b2tlcyBBU19FU0NBUEUgYmVmb3JlCisjIGV4cGFuZGluZyBtYWNyb3MsIHNvIGl0IGNvcnJ1cHRzIHNvbWUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZQorIyBtYWNyb3MuICBUbyBhdm9pZCB0aGlzLCBleHBhbmQgbm93IGFuZCBwYXNzIGl0IHRoZSByZXN1bHQgd2l0aCBwcm9wZXIKKyMgc3RyaW5nIHF1b3RhdGlvbi4gIEFzc3VtZSBhcmdzIDcgdGhyb3VnaCAxMiBleHBhbmQgdG8gcHJvcGVybHkgcXVvdGVkCisjIHN0cmluZ3MuCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVkdWNlLmF0OjQ3NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IiAicmVkdWNlLmF0OjQ3NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NDc0OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVkdWNlLmF0OjQ3NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NDc0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZHVjZS5hdDo0NzQiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQ6IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVkdWNlLmF0OjQ3NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NDc0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NDc0OiBzZWQgLW4gJy9eU3RhdGUgMFwkLyxcJHAnIGlucHV0Lm91dHB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAic2VkIC1uICcvXlN0YXRlIDAkLywkcCcgaW5wdXQub3V0cHV0IiAicmVkdWNlLmF0OjQ3NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgLW4gJy9eU3RhdGUgMCQvLCRwJyBpbnB1dC5vdXRwdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJTdGF0ZSAwCisKKyAgICAwIFwkYWNjZXB0OiAuIFMgXCRlbmQKKyAgICAxIFM6IC4gJ2EnIEEgJ2EnCisgICAgMiAgfCAuICdiJyBBICdiJworICAgIDMgIHwgLiAnYycgYworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEKKyAgICAnYicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMgorICAgICdjJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAzCisKKyAgICBTICBnbyB0byBzdGF0ZSA0CisKKworU3RhdGUgMQorCisgICAgMSBTOiAnYScgLiBBICdhJworICAgIDQgQTogLiAnYScgJ2EnCisgICAgNSAgfCAuICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDUKKworICAgIEEgIGdvIHRvIHN0YXRlIDYKKworCitTdGF0ZSAyCisKKyAgICAyIFM6ICdiJyAuIEEgJ2InCisgICAgNCBBOiAuICdhJyAnYScKKyAgICA1ICB8IC4gJ2EnCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTYKKworICAgIEEgIGdvIHRvIHN0YXRlIDcKKworCitTdGF0ZSAzCisKKyAgICAzIFM6ICdjJyAuIGMKKyAgICA0IEE6IC4gJ2EnICdhJworICAgIDUgIHwgLiAnYScKKyAgICA2IGM6IC4gJ2EnICdiJworICAgIDcgIHwgLiBBCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOAorCisgICAgQSAgZ28gdG8gc3RhdGUgOQorICAgIGMgIGdvIHRvIHN0YXRlIDEwCisKKworU3RhdGUgNAorCisgICAgMCBcJGFjY2VwdDogUyAuIFwkZW5kCisKKyAgICBcJGVuZCAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxMQorCisKK1N0YXRlIDUKKworICAgIDQgQTogJ2EnIC4gJ2EnCisgICAgNSAgfCAnYScgLiAgWydhJ10KKworICAgICdhJyAgcmVkdWNlIHVzaW5nIHJ1bGUgNSAoQSkKKworICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSA1IGFuZCB0b2tlbiAnYScgcmVzb2x2ZWQgYXMgcmVkdWNlICglbGVmdCAnYScpLgorCisKK1N0YXRlIDYKKworICAgIDEgUzogJ2EnIEEgLiAnYScKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxMworCisKK1N0YXRlIDcKKworICAgIDIgUzogJ2InIEEgLiAnYicKKworICAgICdiJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxNAorCisKK1N0YXRlIDgKKworICAgIDQgQTogJ2EnIC4gJ2EnCisgICAgNSAgfCAnYScgLiAgW1wkZW5kXQorICAgIDYgYzogJ2EnIC4gJ2InCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTcKKyAgICAnYicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTUKKworICAgIFwkZW5kICByZWR1Y2UgdXNpbmcgcnVsZSA1IChBKQorCisKK1N0YXRlIDkKKworICAgIDcgYzogQSAuICBbXCRlbmRdCisKKyAgICBcJGVuZCAgcmVkdWNlIHVzaW5nIHJ1bGUgNyAoYykKKworCitTdGF0ZSAxMAorCisgICAgMyBTOiAnYycgYyAuICBbXCRlbmRdCisKKyAgICBcJGVuZCAgcmVkdWNlIHVzaW5nIHJ1bGUgMyAoUykKKworCitTdGF0ZSAxMQorCisgICAgMCBcJGFjY2VwdDogUyBcJGVuZCAuCisKKyAgICBcJGRlZmF1bHQgIGFjY2VwdAorCisKK1N0YXRlIDEyCisKKyAgICA0IEE6ICdhJyAnYScgLiAgWydhJ10KKworICAgICdhJyAgcmVkdWNlIHVzaW5nIHJ1bGUgNCAoQSkKKworCitTdGF0ZSAxMworCisgICAgMSBTOiAnYScgQSAnYScgLiAgW1wkZW5kXQorCisgICAgXCRlbmQgIHJlZHVjZSB1c2luZyBydWxlIDEgKFMpCisKKworU3RhdGUgMTQKKworICAgIDIgUzogJ2InIEEgJ2InIC4gIFtcJGVuZF0KKworICAgIFwkZW5kICByZWR1Y2UgdXNpbmcgcnVsZSAyIChTKQorCisKK1N0YXRlIDE1CisKKyAgICA2IGM6ICdhJyAnYicgLiAgW1wkZW5kXQorCisgICAgXCRlbmQgIHJlZHVjZSB1c2luZyBydWxlIDYgKGMpCisKKworU3RhdGUgMTYKKworICAgIDQgQTogJ2EnIC4gJ2EnCisgICAgNSAgfCAnYScgLiAgWydiJ10KKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxOAorCisgICAgJ2InICByZWR1Y2UgdXNpbmcgcnVsZSA1IChBKQorCisKK1N0YXRlIDE3CisKKyAgICA0IEE6ICdhJyAnYScgLiAgW1wkZW5kXQorCisgICAgXCRlbmQgIHJlZHVjZSB1c2luZyBydWxlIDQgKEEpCisKKworU3RhdGUgMTgKKworICAgIDQgQTogJ2EnICdhJyAuICBbJ2InXQorCisgICAgJ2InICByZWR1Y2UgdXNpbmcgcnVsZSA0IChBKQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyMgQ2Fub25pY2FsIExSIGdlbmVyYXRlcyB2ZXJ5IGxhcmdlIHRhYmxlcywgcmVzdWx0aW5nIGluIHZlcnkgbG9uZworIyBmaWxlcyB3aXRoICNsaW5lIGRpcmVjdGl2ZXMgdGhhdCBtYXkgb3ZlcmZsb3cgd2hhdCB0aGUgc3RhbmRhcmRzCisjIChDOTAgYW5kIEMrKzk4KSBndWFyYW50ZWU6IDMyNzY3LiAgSW4gdGhhdCBjYXNlLCBHQ0MncyAtcGVkYW50aWMKKyMgd2lsbCBpc3N1ZSBhbiBlcnJvci4KKyMKKyMgVGhlcmUgaXMgbm8gIiIgYXJvdW5kIGB3Y2Agc2luY2Ugc29tZSBpbmRlbnQgdGhlIHJlc3VsdC4KK2lmIHRlc3QgMzI3NjcgLWx0IGB3YyAtbCA8IGlucHV0LmNgOyB0aGVuCisgIENGTEFHUz1gZWNobyAiICRDRkxBR1MgIiB8IHNlZCAtZSAncy8gLXBlZGFudGljIC8vJ2AKKyAgQ1hYRkxBR1M9YGVjaG8gIiAkQ1hYRkxBR1MgIiB8IHNlZCAtZSAncy8gLXBlZGFudGljIC8vJ2AKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NDogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgInJlZHVjZS5hdDo0NzQiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NDogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJyZWR1Y2UuYXQ6NDc0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NDc0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NDogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJyZWR1Y2UuYXQ6NDc0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjQ3NDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWR1Y2UuYXQ6NDc0IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo0NzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzExMQorI0FUX1NUQVJUXzExMgorYXRfZm5fZ3JvdXBfYmFubmVyIDExMiAncmVkdWNlLmF0OjcwNycgXAorICAibm8gJWRlZmluZSBsci50eXBlOiBMYW5lIFNwbGl0IiAiICAgICAgICAgICAgICAgICAiIDYKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxMTIuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWNvZGUgeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CisgIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOworfQorCislbGVmdCAnYScKKy8vIENvbmZsaWN0IHJlc29sdXRpb24gcmVuZGVycyBzdGF0ZSAxNiB1bnJlYWNoYWJsZSBmb3IgY2Fub25pY2FsIExSKDEpLiAgV2UKKy8vIGtlZXAgaXQgc28gdGhhdCB0aGUgcGFzZXIgdGFibGUgZGlmZiBpcyBlYXNpZXIgdG8gY29kZS4KKyVkZWZpbmUgbHIua2VlcC11bnJlYWNoYWJsZS1zdGF0ZXMKKworJSUKKworCisvKiBTaW1pbGFyIHRvIHRoZSBsYXN0IHRlc3QgY2FzZSBzZXQgYnV0IHR3byBzdGF0ZXMgbXVzdCBiZSBzcGxpdC4gICovCitTOiAnYScgQSAnYScgLyogcnVsZSAxICovCisgfCAnYicgQSAnYicgLyogcnVsZSAyICovCisgfCAnYycgYyAgICAgLyogcnVsZSAzICovCisgOworCitBOiAnYScgJ2EnICdhJyAvKiBydWxlIDQgKi8KKyB8ICdhJyAnYScgICAgIC8qIHJ1bGUgNSAqLworIDsKKworYzogJ2EnICdhJyAnYicgLyogcnVsZSA2ICovCisgfCBBICAgICAgICAgICAvKiBydWxlIDcgKi8KKyA7CisKKworJSUKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CitzdGF0aWMgaW50Cit5eWxleCAodm9pZCkKK3sKKyAgc3RhdGljIGludCBjb25zdCBpbnB1dFtdID0geworICAgICdiJywgJ2EnLCAnYScsICdhJywgJ2InLCAwCisgIH07CisgIHN0YXRpYyBpbnQgY29uc3QgKmlucHV0cCA9IGlucHV0OworICByZXR1cm4gKmlucHV0cCsrOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCisjIEluIHNvbWUgdmVyc2lvbnMgb2YgQXV0b2NvbmYsIEFUX0NIRUNLIGludm9rZXMgQVNfRVNDQVBFIGJlZm9yZQorIyBleHBhbmRpbmcgbWFjcm9zLCBzbyBpdCBjb3JydXB0cyBzb21lIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUKKyMgbWFjcm9zLiAgVG8gYXZvaWQgdGhpcywgZXhwYW5kIG5vdyBhbmQgcGFzcyBpdCB0aGUgcmVzdWx0IHdpdGggcHJvcGVyCisjIHN0cmluZyBxdW90YXRpb24uICBBc3N1bWUgYXJncyA3IHRocm91Z2ggMTIgZXhwYW5kIHRvIHByb3Blcmx5IHF1b3RlZAorIyBzdHJpbmdzLgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZHVjZS5hdDo3MDciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NzA3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIgInJlZHVjZS5hdDo3MDciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZHVjZS5hdDo3MDciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWR1Y2UuYXQ6NzA3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NzA3OiBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZHVjZS5hdDo3MDciCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNzogc2VkIC1uICcvXlN0YXRlIDBcJC8sXCRwJyBpbnB1dC5vdXRwdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgInNlZCAtbiAnL15TdGF0ZSAwJC8sJHAnIGlucHV0Lm91dHB1dCIgInJlZHVjZS5hdDo3MDciCisoICRhdF9jaGVja190cmFjZTsgc2VkIC1uICcvXlN0YXRlIDAkLywkcCcgaW5wdXQub3V0cHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiU3RhdGUgMAorCisgICAgMCBcJGFjY2VwdDogLiBTIFwkZW5kCisgICAgMSBTOiAuICdhJyBBICdhJworICAgIDIgIHwgLiAnYicgQSAnYicKKyAgICAzICB8IC4gJ2MnIGMKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxCisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIKKyAgICAnYycgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMworCisgICAgUyAgZ28gdG8gc3RhdGUgNAorCisKK1N0YXRlIDEKKworICAgIDEgUzogJ2EnIC4gQSAnYScKKyAgICA0IEE6IC4gJ2EnICdhJyAnYScKKyAgICA1ICB8IC4gJ2EnICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDUKKworICAgIEEgIGdvIHRvIHN0YXRlIDYKKworCitTdGF0ZSAyCisKKyAgICAyIFM6ICdiJyAuIEEgJ2InCisgICAgNCBBOiAuICdhJyAnYScgJ2EnCisgICAgNSAgfCAuICdhJyAnYScKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1CisKKyAgICBBICBnbyB0byBzdGF0ZSA3CisKKworU3RhdGUgMworCisgICAgMyBTOiAnYycgLiBjCisgICAgNCBBOiAuICdhJyAnYScgJ2EnCisgICAgNSAgfCAuICdhJyAnYScKKyAgICA2IGM6IC4gJ2EnICdhJyAnYicKKyAgICA3ICB8IC4gQQorCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDgKKworICAgIEEgIGdvIHRvIHN0YXRlIDkKKyAgICBjICBnbyB0byBzdGF0ZSAxMAorCisKK1N0YXRlIDQKKworICAgIDAgXCRhY2NlcHQ6IFMgLiBcJGVuZAorCisgICAgXCRlbmQgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTEKKworCitTdGF0ZSA1CisKKyAgICA0IEE6ICdhJyAuICdhJyAnYScKKyAgICA1ICB8ICdhJyAuICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEyCisKKworU3RhdGUgNgorCisgICAgMSBTOiAnYScgQSAuICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEzCisKKworU3RhdGUgNworCisgICAgMiBTOiAnYicgQSAuICdiJworCisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE0CisKKworU3RhdGUgOAorCisgICAgNCBBOiAnYScgLiAnYScgJ2EnCisgICAgNSAgfCAnYScgLiAnYScKKyAgICA2IGM6ICdhJyAuICdhJyAnYicKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxNQorCisKK1N0YXRlIDkKKworICAgIDcgYzogQSAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDcgKGMpCisKKworU3RhdGUgMTAKKworICAgIDMgUzogJ2MnIGMgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAzIChTKQorCisKK1N0YXRlIDExCisKKyAgICAwIFwkYWNjZXB0OiBTIFwkZW5kIC4KKworICAgIFwkZGVmYXVsdCAgYWNjZXB0CisKKworU3RhdGUgMTIKKworICAgIDQgQTogJ2EnICdhJyAuICdhJworICAgIDUgIHwgJ2EnICdhJyAuICBbJ2EnLCAnYiddCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDUgKEEpCisKKyAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgNSBhbmQgdG9rZW4gJ2EnIHJlc29sdmVkIGFzIHJlZHVjZSAoJWxlZnQgJ2EnKS4KKworCitTdGF0ZSAxMworCisgICAgMSBTOiAnYScgQSAnYScgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAxIChTKQorCisKK1N0YXRlIDE0CisKKyAgICAyIFM6ICdiJyBBICdiJyAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDIgKFMpCisKKworU3RhdGUgMTUKKworICAgIDQgQTogJ2EnICdhJyAuICdhJworICAgIDUgIHwgJ2EnICdhJyAuICBbXCRlbmRdCisgICAgNiBjOiAnYScgJ2EnIC4gJ2InCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTYKKyAgICAnYicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTcKKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgNSAoQSkKKworCitTdGF0ZSAxNgorCisgICAgNCBBOiAnYScgJ2EnICdhJyAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDQgKEEpCisKKworU3RhdGUgMTcKKworICAgIDYgYzogJ2EnICdhJyAnYicgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA2IChjKQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyMgQ2Fub25pY2FsIExSIGdlbmVyYXRlcyB2ZXJ5IGxhcmdlIHRhYmxlcywgcmVzdWx0aW5nIGluIHZlcnkgbG9uZworIyBmaWxlcyB3aXRoICNsaW5lIGRpcmVjdGl2ZXMgdGhhdCBtYXkgb3ZlcmZsb3cgd2hhdCB0aGUgc3RhbmRhcmRzCisjIChDOTAgYW5kIEMrKzk4KSBndWFyYW50ZWU6IDMyNzY3LiAgSW4gdGhhdCBjYXNlLCBHQ0MncyAtcGVkYW50aWMKKyMgd2lsbCBpc3N1ZSBhbiBlcnJvci4KKyMKKyMgVGhlcmUgaXMgbm8gIiIgYXJvdW5kIGB3Y2Agc2luY2Ugc29tZSBpbmRlbnQgdGhlIHJlc3VsdC4KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDc6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJyZWR1Y2UuYXQ6NzA3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NzA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDc6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAicmVkdWNlLmF0OjcwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDc6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAicmVkdWNlLmF0OjcwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NzA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVkdWNlLmF0OjcwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvcgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTEyCisjQVRfU1RBUlRfMTEzCithdF9mbl9ncm91cF9iYW5uZXIgMTEzICdyZWR1Y2UuYXQ6NzA3JyBcCisgICIlZGVmaW5lIGxyLnR5cGUgbGFscjogTGFuZSBTcGxpdCIgIiAgICAgICAgICAgICAgICIgNgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjExMy4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislY29kZSB7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgc3RhdGljIGludCB5eWxleCAodm9pZCk7Cit9CisKKyVkZWZpbmUgbHIudHlwZSBsYWxyCislbGVmdCAnYScKKy8vIENvbmZsaWN0IHJlc29sdXRpb24gcmVuZGVycyBzdGF0ZSAxNiB1bnJlYWNoYWJsZSBmb3IgY2Fub25pY2FsIExSKDEpLiAgV2UKKy8vIGtlZXAgaXQgc28gdGhhdCB0aGUgcGFzZXIgdGFibGUgZGlmZiBpcyBlYXNpZXIgdG8gY29kZS4KKyVkZWZpbmUgbHIua2VlcC11bnJlYWNoYWJsZS1zdGF0ZXMKKworJSUKKworCisvKiBTaW1pbGFyIHRvIHRoZSBsYXN0IHRlc3QgY2FzZSBzZXQgYnV0IHR3byBzdGF0ZXMgbXVzdCBiZSBzcGxpdC4gICovCitTOiAnYScgQSAnYScgLyogcnVsZSAxICovCisgfCAnYicgQSAnYicgLyogcnVsZSAyICovCisgfCAnYycgYyAgICAgLyogcnVsZSAzICovCisgOworCitBOiAnYScgJ2EnICdhJyAvKiBydWxlIDQgKi8KKyB8ICdhJyAnYScgICAgIC8qIHJ1bGUgNSAqLworIDsKKworYzogJ2EnICdhJyAnYicgLyogcnVsZSA2ICovCisgfCBBICAgICAgICAgICAvKiBydWxlIDcgKi8KKyA7CisKKworJSUKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CitzdGF0aWMgaW50Cit5eWxleCAodm9pZCkKK3sKKyAgc3RhdGljIGludCBjb25zdCBpbnB1dFtdID0geworICAgICdiJywgJ2EnLCAnYScsICdhJywgJ2InLCAwCisgIH07CisgIHN0YXRpYyBpbnQgY29uc3QgKmlucHV0cCA9IGlucHV0OworICByZXR1cm4gKmlucHV0cCsrOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCisjIEluIHNvbWUgdmVyc2lvbnMgb2YgQXV0b2NvbmYsIEFUX0NIRUNLIGludm9rZXMgQVNfRVNDQVBFIGJlZm9yZQorIyBleHBhbmRpbmcgbWFjcm9zLCBzbyBpdCBjb3JydXB0cyBzb21lIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUKKyMgbWFjcm9zLiAgVG8gYXZvaWQgdGhpcywgZXhwYW5kIG5vdyBhbmQgcGFzcyBpdCB0aGUgcmVzdWx0IHdpdGggcHJvcGVyCisjIHN0cmluZyBxdW90YXRpb24uICBBc3N1bWUgYXJncyA3IHRocm91Z2ggMTIgZXhwYW5kIHRvIHByb3Blcmx5IHF1b3RlZAorIyBzdHJpbmdzLgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZHVjZS5hdDo3MDciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NzA3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIgInJlZHVjZS5hdDo3MDciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZHVjZS5hdDo3MDciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWR1Y2UuYXQ6NzA3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NzA3OiBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZHVjZS5hdDo3MDciCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNzogc2VkIC1uICcvXlN0YXRlIDBcJC8sXCRwJyBpbnB1dC5vdXRwdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgInNlZCAtbiAnL15TdGF0ZSAwJC8sJHAnIGlucHV0Lm91dHB1dCIgInJlZHVjZS5hdDo3MDciCisoICRhdF9jaGVja190cmFjZTsgc2VkIC1uICcvXlN0YXRlIDAkLywkcCcgaW5wdXQub3V0cHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiU3RhdGUgMAorCisgICAgMCBcJGFjY2VwdDogLiBTIFwkZW5kCisgICAgMSBTOiAuICdhJyBBICdhJworICAgIDIgIHwgLiAnYicgQSAnYicKKyAgICAzICB8IC4gJ2MnIGMKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxCisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIKKyAgICAnYycgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMworCisgICAgUyAgZ28gdG8gc3RhdGUgNAorCisKK1N0YXRlIDEKKworICAgIDEgUzogJ2EnIC4gQSAnYScKKyAgICA0IEE6IC4gJ2EnICdhJyAnYScKKyAgICA1ICB8IC4gJ2EnICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDUKKworICAgIEEgIGdvIHRvIHN0YXRlIDYKKworCitTdGF0ZSAyCisKKyAgICAyIFM6ICdiJyAuIEEgJ2InCisgICAgNCBBOiAuICdhJyAnYScgJ2EnCisgICAgNSAgfCAuICdhJyAnYScKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1CisKKyAgICBBICBnbyB0byBzdGF0ZSA3CisKKworU3RhdGUgMworCisgICAgMyBTOiAnYycgLiBjCisgICAgNCBBOiAuICdhJyAnYScgJ2EnCisgICAgNSAgfCAuICdhJyAnYScKKyAgICA2IGM6IC4gJ2EnICdhJyAnYicKKyAgICA3ICB8IC4gQQorCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDgKKworICAgIEEgIGdvIHRvIHN0YXRlIDkKKyAgICBjICBnbyB0byBzdGF0ZSAxMAorCisKK1N0YXRlIDQKKworICAgIDAgXCRhY2NlcHQ6IFMgLiBcJGVuZAorCisgICAgXCRlbmQgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTEKKworCitTdGF0ZSA1CisKKyAgICA0IEE6ICdhJyAuICdhJyAnYScKKyAgICA1ICB8ICdhJyAuICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEyCisKKworU3RhdGUgNgorCisgICAgMSBTOiAnYScgQSAuICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEzCisKKworU3RhdGUgNworCisgICAgMiBTOiAnYicgQSAuICdiJworCisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE0CisKKworU3RhdGUgOAorCisgICAgNCBBOiAnYScgLiAnYScgJ2EnCisgICAgNSAgfCAnYScgLiAnYScKKyAgICA2IGM6ICdhJyAuICdhJyAnYicKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxNQorCisKK1N0YXRlIDkKKworICAgIDcgYzogQSAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDcgKGMpCisKKworU3RhdGUgMTAKKworICAgIDMgUzogJ2MnIGMgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAzIChTKQorCisKK1N0YXRlIDExCisKKyAgICAwIFwkYWNjZXB0OiBTIFwkZW5kIC4KKworICAgIFwkZGVmYXVsdCAgYWNjZXB0CisKKworU3RhdGUgMTIKKworICAgIDQgQTogJ2EnICdhJyAuICdhJworICAgIDUgIHwgJ2EnICdhJyAuICBbJ2EnLCAnYiddCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDUgKEEpCisKKyAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgNSBhbmQgdG9rZW4gJ2EnIHJlc29sdmVkIGFzIHJlZHVjZSAoJWxlZnQgJ2EnKS4KKworCitTdGF0ZSAxMworCisgICAgMSBTOiAnYScgQSAnYScgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAxIChTKQorCisKK1N0YXRlIDE0CisKKyAgICAyIFM6ICdiJyBBICdiJyAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDIgKFMpCisKKworU3RhdGUgMTUKKworICAgIDQgQTogJ2EnICdhJyAuICdhJworICAgIDUgIHwgJ2EnICdhJyAuICBbXCRlbmRdCisgICAgNiBjOiAnYScgJ2EnIC4gJ2InCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTYKKyAgICAnYicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTcKKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgNSAoQSkKKworCitTdGF0ZSAxNgorCisgICAgNCBBOiAnYScgJ2EnICdhJyAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDQgKEEpCisKKworU3RhdGUgMTcKKworICAgIDYgYzogJ2EnICdhJyAnYicgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA2IChjKQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyMgQ2Fub25pY2FsIExSIGdlbmVyYXRlcyB2ZXJ5IGxhcmdlIHRhYmxlcywgcmVzdWx0aW5nIGluIHZlcnkgbG9uZworIyBmaWxlcyB3aXRoICNsaW5lIGRpcmVjdGl2ZXMgdGhhdCBtYXkgb3ZlcmZsb3cgd2hhdCB0aGUgc3RhbmRhcmRzCisjIChDOTAgYW5kIEMrKzk4KSBndWFyYW50ZWU6IDMyNzY3LiAgSW4gdGhhdCBjYXNlLCBHQ0MncyAtcGVkYW50aWMKKyMgd2lsbCBpc3N1ZSBhbiBlcnJvci4KKyMKKyMgVGhlcmUgaXMgbm8gIiIgYXJvdW5kIGB3Y2Agc2luY2Ugc29tZSBpbmRlbnQgdGhlIHJlc3VsdC4KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDc6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJyZWR1Y2UuYXQ6NzA3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NzA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDc6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAicmVkdWNlLmF0OjcwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDc6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAicmVkdWNlLmF0OjcwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NzA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVkdWNlLmF0OjcwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvcgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTEzCisjQVRfU1RBUlRfMTE0CithdF9mbl9ncm91cF9iYW5uZXIgMTE0ICdyZWR1Y2UuYXQ6NzA3JyBcCisgICIlZGVmaW5lIGxyLnR5cGUgaWVscjogTGFuZSBTcGxpdCIgIiAgICAgICAgICAgICAgICIgNgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjExNC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislY29kZSB7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgc3RhdGljIGludCB5eWxleCAodm9pZCk7Cit9CisKKyVkZWZpbmUgbHIudHlwZSBpZWxyCislbGVmdCAnYScKKy8vIENvbmZsaWN0IHJlc29sdXRpb24gcmVuZGVycyBzdGF0ZSAxNiB1bnJlYWNoYWJsZSBmb3IgY2Fub25pY2FsIExSKDEpLiAgV2UKKy8vIGtlZXAgaXQgc28gdGhhdCB0aGUgcGFzZXIgdGFibGUgZGlmZiBpcyBlYXNpZXIgdG8gY29kZS4KKyVkZWZpbmUgbHIua2VlcC11bnJlYWNoYWJsZS1zdGF0ZXMKKworJSUKKworCisvKiBTaW1pbGFyIHRvIHRoZSBsYXN0IHRlc3QgY2FzZSBzZXQgYnV0IHR3byBzdGF0ZXMgbXVzdCBiZSBzcGxpdC4gICovCitTOiAnYScgQSAnYScgLyogcnVsZSAxICovCisgfCAnYicgQSAnYicgLyogcnVsZSAyICovCisgfCAnYycgYyAgICAgLyogcnVsZSAzICovCisgOworCitBOiAnYScgJ2EnICdhJyAvKiBydWxlIDQgKi8KKyB8ICdhJyAnYScgICAgIC8qIHJ1bGUgNSAqLworIDsKKworYzogJ2EnICdhJyAnYicgLyogcnVsZSA2ICovCisgfCBBICAgICAgICAgICAvKiBydWxlIDcgKi8KKyA7CisKKworJSUKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CitzdGF0aWMgaW50Cit5eWxleCAodm9pZCkKK3sKKyAgc3RhdGljIGludCBjb25zdCBpbnB1dFtdID0geworICAgICdiJywgJ2EnLCAnYScsICdhJywgJ2InLCAwCisgIH07CisgIHN0YXRpYyBpbnQgY29uc3QgKmlucHV0cCA9IGlucHV0OworICByZXR1cm4gKmlucHV0cCsrOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCisjIEluIHNvbWUgdmVyc2lvbnMgb2YgQXV0b2NvbmYsIEFUX0NIRUNLIGludm9rZXMgQVNfRVNDQVBFIGJlZm9yZQorIyBleHBhbmRpbmcgbWFjcm9zLCBzbyBpdCBjb3JydXB0cyBzb21lIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUKKyMgbWFjcm9zLiAgVG8gYXZvaWQgdGhpcywgZXhwYW5kIG5vdyBhbmQgcGFzcyBpdCB0aGUgcmVzdWx0IHdpdGggcHJvcGVyCisjIHN0cmluZyBxdW90YXRpb24uICBBc3N1bWUgYXJncyA3IHRocm91Z2ggMTIgZXhwYW5kIHRvIHByb3Blcmx5IHF1b3RlZAorIyBzdHJpbmdzLgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZHVjZS5hdDo3MDciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NzA3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIgInJlZHVjZS5hdDo3MDciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZHVjZS5hdDo3MDciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWR1Y2UuYXQ6NzA3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NzA3OiBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZHVjZS5hdDo3MDciCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNzogc2VkIC1uICcvXlN0YXRlIDBcJC8sXCRwJyBpbnB1dC5vdXRwdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgInNlZCAtbiAnL15TdGF0ZSAwJC8sJHAnIGlucHV0Lm91dHB1dCIgInJlZHVjZS5hdDo3MDciCisoICRhdF9jaGVja190cmFjZTsgc2VkIC1uICcvXlN0YXRlIDAkLywkcCcgaW5wdXQub3V0cHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiU3RhdGUgMAorCisgICAgMCBcJGFjY2VwdDogLiBTIFwkZW5kCisgICAgMSBTOiAuICdhJyBBICdhJworICAgIDIgIHwgLiAnYicgQSAnYicKKyAgICAzICB8IC4gJ2MnIGMKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxCisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIKKyAgICAnYycgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMworCisgICAgUyAgZ28gdG8gc3RhdGUgNAorCisKK1N0YXRlIDEKKworICAgIDEgUzogJ2EnIC4gQSAnYScKKyAgICA0IEE6IC4gJ2EnICdhJyAnYScKKyAgICA1ICB8IC4gJ2EnICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDUKKworICAgIEEgIGdvIHRvIHN0YXRlIDYKKworCitTdGF0ZSAyCisKKyAgICAyIFM6ICdiJyAuIEEgJ2InCisgICAgNCBBOiAuICdhJyAnYScgJ2EnCisgICAgNSAgfCAuICdhJyAnYScKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxOAorCisgICAgQSAgZ28gdG8gc3RhdGUgNworCisKK1N0YXRlIDMKKworICAgIDMgUzogJ2MnIC4gYworICAgIDQgQTogLiAnYScgJ2EnICdhJworICAgIDUgIHwgLiAnYScgJ2EnCisgICAgNiBjOiAuICdhJyAnYScgJ2InCisgICAgNyAgfCAuIEEKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4CisKKyAgICBBICBnbyB0byBzdGF0ZSA5CisgICAgYyAgZ28gdG8gc3RhdGUgMTAKKworCitTdGF0ZSA0CisKKyAgICAwIFwkYWNjZXB0OiBTIC4gXCRlbmQKKworICAgIFwkZW5kICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDExCisKKworU3RhdGUgNQorCisgICAgNCBBOiAnYScgLiAnYScgJ2EnCisgICAgNSAgfCAnYScgLiAnYScKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxMgorCisKK1N0YXRlIDYKKworICAgIDEgUzogJ2EnIEEgLiAnYScKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxMworCisKK1N0YXRlIDcKKworICAgIDIgUzogJ2InIEEgLiAnYicKKworICAgICdiJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxNAorCisKK1N0YXRlIDgKKworICAgIDQgQTogJ2EnIC4gJ2EnICdhJworICAgIDUgIHwgJ2EnIC4gJ2EnCisgICAgNiBjOiAnYScgLiAnYScgJ2InCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTUKKworCitTdGF0ZSA5CisKKyAgICA3IGM6IEEgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA3IChjKQorCisKK1N0YXRlIDEwCisKKyAgICAzIFM6ICdjJyBjIC4KKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMyAoUykKKworCitTdGF0ZSAxMQorCisgICAgMCBcJGFjY2VwdDogUyBcJGVuZCAuCisKKyAgICBcJGRlZmF1bHQgIGFjY2VwdAorCisKK1N0YXRlIDEyCisKKyAgICA0IEE6ICdhJyAnYScgLiAnYScKKyAgICA1ICB8ICdhJyAnYScgLiAgWydhJ10KKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgNSAoQSkKKworICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSA1IGFuZCB0b2tlbiAnYScgcmVzb2x2ZWQgYXMgcmVkdWNlICglbGVmdCAnYScpLgorCisKK1N0YXRlIDEzCisKKyAgICAxIFM6ICdhJyBBICdhJyAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDEgKFMpCisKKworU3RhdGUgMTQKKworICAgIDIgUzogJ2InIEEgJ2InIC4KKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMiAoUykKKworCitTdGF0ZSAxNQorCisgICAgNCBBOiAnYScgJ2EnIC4gJ2EnCisgICAgNSAgfCAnYScgJ2EnIC4gIFtcJGVuZF0KKyAgICA2IGM6ICdhJyAnYScgLiAnYicKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxNgorICAgICdiJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxNworCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA1IChBKQorCisKK1N0YXRlIDE2CisKKyAgICA0IEE6ICdhJyAnYScgJ2EnIC4KKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgNCAoQSkKKworCitTdGF0ZSAxNworCisgICAgNiBjOiAnYScgJ2EnICdiJyAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDYgKGMpCisKKworU3RhdGUgMTgKKworICAgIDQgQTogJ2EnIC4gJ2EnICdhJworICAgIDUgIHwgJ2EnIC4gJ2EnCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTkKKworCitTdGF0ZSAxOQorCisgICAgNCBBOiAnYScgJ2EnIC4gJ2EnCisgICAgNSAgfCAnYScgJ2EnIC4gIFsnYiddCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTYKKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgNSAoQSkKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisjIENhbm9uaWNhbCBMUiBnZW5lcmF0ZXMgdmVyeSBsYXJnZSB0YWJsZXMsIHJlc3VsdGluZyBpbiB2ZXJ5IGxvbmcKKyMgZmlsZXMgd2l0aCAjbGluZSBkaXJlY3RpdmVzIHRoYXQgbWF5IG92ZXJmbG93IHdoYXQgdGhlIHN0YW5kYXJkcworIyAoQzkwIGFuZCBDKys5OCkgZ3VhcmFudGVlOiAzMjc2Ny4gIEluIHRoYXQgY2FzZSwgR0NDJ3MgLXBlZGFudGljCisjIHdpbGwgaXNzdWUgYW4gZXJyb3IuCisjCisjIFRoZXJlIGlzIG5vICIiIGFyb3VuZCBgd2NgIHNpbmNlIHNvbWUgaW5kZW50IHRoZSByZXN1bHQuCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NzA3OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAicmVkdWNlLmF0OjcwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NzA3OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyIgInJlZHVjZS5hdDo3MDciCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NzA3OiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgInJlZHVjZS5hdDo3MDciCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NzA3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZHVjZS5hdDo3MDciCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTE0CisjQVRfU1RBUlRfMTE1CithdF9mbl9ncm91cF9iYW5uZXIgMTE1ICdyZWR1Y2UuYXQ6NzA3JyBcCisgICIlZGVmaW5lIGxyLnR5cGUgY2Fub25pY2FsLWxyOiBMYW5lIFNwbGl0IiAiICAgICAgICIgNgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjExNS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislY29kZSB7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgc3RhdGljIGludCB5eWxleCAodm9pZCk7Cit9CisKKyVkZWZpbmUgbHIudHlwZSBjYW5vbmljYWwtbHIKKyVsZWZ0ICdhJworLy8gQ29uZmxpY3QgcmVzb2x1dGlvbiByZW5kZXJzIHN0YXRlIDE2IHVucmVhY2hhYmxlIGZvciBjYW5vbmljYWwgTFIoMSkuICBXZQorLy8ga2VlcCBpdCBzbyB0aGF0IHRoZSBwYXNlciB0YWJsZSBkaWZmIGlzIGVhc2llciB0byBjb2RlLgorJWRlZmluZSBsci5rZWVwLXVucmVhY2hhYmxlLXN0YXRlcworCislJQorCisKKy8qIFNpbWlsYXIgdG8gdGhlIGxhc3QgdGVzdCBjYXNlIHNldCBidXQgdHdvIHN0YXRlcyBtdXN0IGJlIHNwbGl0LiAgKi8KK1M6ICdhJyBBICdhJyAvKiBydWxlIDEgKi8KKyB8ICdiJyBBICdiJyAvKiBydWxlIDIgKi8KKyB8ICdjJyBjICAgICAvKiBydWxlIDMgKi8KKyA7CisKK0E6ICdhJyAnYScgJ2EnIC8qIHJ1bGUgNCAqLworIHwgJ2EnICdhJyAgICAgLyogcnVsZSA1ICovCisgOworCitjOiAnYScgJ2EnICdiJyAvKiBydWxlIDYgKi8KKyB8IEEgICAgICAgICAgIC8qIHJ1bGUgNyAqLworIDsKKworCislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KK3N0YXRpYyBpbnQKK3l5bGV4ICh2b2lkKQoreworICBzdGF0aWMgaW50IGNvbnN0IGlucHV0W10gPSB7CisgICAgJ2InLCAnYScsICdhJywgJ2EnLCAnYicsIDAKKyAgfTsKKyAgc3RhdGljIGludCBjb25zdCAqaW5wdXRwID0gaW5wdXQ7CisgIHJldHVybiAqaW5wdXRwKys7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKKyMgSW4gc29tZSB2ZXJzaW9ucyBvZiBBdXRvY29uZiwgQVRfQ0hFQ0sgaW52b2tlcyBBU19FU0NBUEUgYmVmb3JlCisjIGV4cGFuZGluZyBtYWNyb3MsIHNvIGl0IGNvcnJ1cHRzIHNvbWUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZQorIyBtYWNyb3MuICBUbyBhdm9pZCB0aGlzLCBleHBhbmQgbm93IGFuZCBwYXNzIGl0IHRoZSByZXN1bHQgd2l0aCBwcm9wZXIKKyMgc3RyaW5nIHF1b3RhdGlvbi4gIEFzc3VtZSBhcmdzIDcgdGhyb3VnaCAxMiBleHBhbmQgdG8gcHJvcGVybHkgcXVvdGVkCisjIHN0cmluZ3MuCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVkdWNlLmF0OjcwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IiAicmVkdWNlLmF0OjcwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NzA3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVkdWNlLmF0OjcwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NzA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZHVjZS5hdDo3MDciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDc6IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVkdWNlLmF0OjcwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NzA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NzA3OiBzZWQgLW4gJy9eU3RhdGUgMFwkLyxcJHAnIGlucHV0Lm91dHB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAic2VkIC1uICcvXlN0YXRlIDAkLywkcCcgaW5wdXQub3V0cHV0IiAicmVkdWNlLmF0OjcwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgLW4gJy9eU3RhdGUgMCQvLCRwJyBpbnB1dC5vdXRwdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJTdGF0ZSAwCisKKyAgICAwIFwkYWNjZXB0OiAuIFMgXCRlbmQKKyAgICAxIFM6IC4gJ2EnIEEgJ2EnCisgICAgMiAgfCAuICdiJyBBICdiJworICAgIDMgIHwgLiAnYycgYworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEKKyAgICAnYicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMgorICAgICdjJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAzCisKKyAgICBTICBnbyB0byBzdGF0ZSA0CisKKworU3RhdGUgMQorCisgICAgMSBTOiAnYScgLiBBICdhJworICAgIDQgQTogLiAnYScgJ2EnICdhJworICAgIDUgIHwgLiAnYScgJ2EnCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNQorCisgICAgQSAgZ28gdG8gc3RhdGUgNgorCisKK1N0YXRlIDIKKworICAgIDIgUzogJ2InIC4gQSAnYicKKyAgICA0IEE6IC4gJ2EnICdhJyAnYScKKyAgICA1ICB8IC4gJ2EnICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE4CisKKyAgICBBICBnbyB0byBzdGF0ZSA3CisKKworU3RhdGUgMworCisgICAgMyBTOiAnYycgLiBjCisgICAgNCBBOiAuICdhJyAnYScgJ2EnCisgICAgNSAgfCAuICdhJyAnYScKKyAgICA2IGM6IC4gJ2EnICdhJyAnYicKKyAgICA3ICB8IC4gQQorCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDgKKworICAgIEEgIGdvIHRvIHN0YXRlIDkKKyAgICBjICBnbyB0byBzdGF0ZSAxMAorCisKK1N0YXRlIDQKKworICAgIDAgXCRhY2NlcHQ6IFMgLiBcJGVuZAorCisgICAgXCRlbmQgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTEKKworCitTdGF0ZSA1CisKKyAgICA0IEE6ICdhJyAuICdhJyAnYScKKyAgICA1ICB8ICdhJyAuICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEyCisKKworU3RhdGUgNgorCisgICAgMSBTOiAnYScgQSAuICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEzCisKKworU3RhdGUgNworCisgICAgMiBTOiAnYicgQSAuICdiJworCisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE0CisKKworU3RhdGUgOAorCisgICAgNCBBOiAnYScgLiAnYScgJ2EnCisgICAgNSAgfCAnYScgLiAnYScKKyAgICA2IGM6ICdhJyAuICdhJyAnYicKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxNQorCisKK1N0YXRlIDkKKworICAgIDcgYzogQSAuICBbXCRlbmRdCisKKyAgICBcJGVuZCAgcmVkdWNlIHVzaW5nIHJ1bGUgNyAoYykKKworCitTdGF0ZSAxMAorCisgICAgMyBTOiAnYycgYyAuICBbXCRlbmRdCisKKyAgICBcJGVuZCAgcmVkdWNlIHVzaW5nIHJ1bGUgMyAoUykKKworCitTdGF0ZSAxMQorCisgICAgMCBcJGFjY2VwdDogUyBcJGVuZCAuCisKKyAgICBcJGRlZmF1bHQgIGFjY2VwdAorCisKK1N0YXRlIDEyCisKKyAgICA0IEE6ICdhJyAnYScgLiAnYScKKyAgICA1ICB8ICdhJyAnYScgLiAgWydhJ10KKworICAgICdhJyAgcmVkdWNlIHVzaW5nIHJ1bGUgNSAoQSkKKworICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSA1IGFuZCB0b2tlbiAnYScgcmVzb2x2ZWQgYXMgcmVkdWNlICglbGVmdCAnYScpLgorCisKK1N0YXRlIDEzCisKKyAgICAxIFM6ICdhJyBBICdhJyAuICBbXCRlbmRdCisKKyAgICBcJGVuZCAgcmVkdWNlIHVzaW5nIHJ1bGUgMSAoUykKKworCitTdGF0ZSAxNAorCisgICAgMiBTOiAnYicgQSAnYicgLiAgW1wkZW5kXQorCisgICAgXCRlbmQgIHJlZHVjZSB1c2luZyBydWxlIDIgKFMpCisKKworU3RhdGUgMTUKKworICAgIDQgQTogJ2EnICdhJyAuICdhJworICAgIDUgIHwgJ2EnICdhJyAuICBbXCRlbmRdCisgICAgNiBjOiAnYScgJ2EnIC4gJ2InCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTkKKyAgICAnYicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTcKKworICAgIFwkZW5kICByZWR1Y2UgdXNpbmcgcnVsZSA1IChBKQorCisKK1N0YXRlIDE2CisKKyAgICA0IEE6ICdhJyAnYScgJ2EnIC4gIFsnYSddCisKKyAgICAnYScgIHJlZHVjZSB1c2luZyBydWxlIDQgKEEpCisKKworU3RhdGUgMTcKKworICAgIDYgYzogJ2EnICdhJyAnYicgLiAgW1wkZW5kXQorCisgICAgXCRlbmQgIHJlZHVjZSB1c2luZyBydWxlIDYgKGMpCisKKworU3RhdGUgMTgKKworICAgIDQgQTogJ2EnIC4gJ2EnICdhJworICAgIDUgIHwgJ2EnIC4gJ2EnCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMjAKKworCitTdGF0ZSAxOQorCisgICAgNCBBOiAnYScgJ2EnICdhJyAuICBbXCRlbmRdCisKKyAgICBcJGVuZCAgcmVkdWNlIHVzaW5nIHJ1bGUgNCAoQSkKKworCitTdGF0ZSAyMAorCisgICAgNCBBOiAnYScgJ2EnIC4gJ2EnCisgICAgNSAgfCAnYScgJ2EnIC4gIFsnYiddCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMjEKKworICAgICdiJyAgcmVkdWNlIHVzaW5nIHJ1bGUgNSAoQSkKKworCitTdGF0ZSAyMQorCisgICAgNCBBOiAnYScgJ2EnICdhJyAuICBbJ2InXQorCisgICAgJ2InICByZWR1Y2UgdXNpbmcgcnVsZSA0IChBKQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyMgQ2Fub25pY2FsIExSIGdlbmVyYXRlcyB2ZXJ5IGxhcmdlIHRhYmxlcywgcmVzdWx0aW5nIGluIHZlcnkgbG9uZworIyBmaWxlcyB3aXRoICNsaW5lIGRpcmVjdGl2ZXMgdGhhdCBtYXkgb3ZlcmZsb3cgd2hhdCB0aGUgc3RhbmRhcmRzCisjIChDOTAgYW5kIEMrKzk4KSBndWFyYW50ZWU6IDMyNzY3LiAgSW4gdGhhdCBjYXNlLCBHQ0MncyAtcGVkYW50aWMKKyMgd2lsbCBpc3N1ZSBhbiBlcnJvci4KKyMKKyMgVGhlcmUgaXMgbm8gIiIgYXJvdW5kIGB3Y2Agc2luY2Ugc29tZSBpbmRlbnQgdGhlIHJlc3VsdC4KK2lmIHRlc3QgMzI3NjcgLWx0IGB3YyAtbCA8IGlucHV0LmNgOyB0aGVuCisgIENGTEFHUz1gZWNobyAiICRDRkxBR1MgIiB8IHNlZCAtZSAncy8gLXBlZGFudGljIC8vJ2AKKyAgQ1hYRkxBR1M9YGVjaG8gIiAkQ1hYRkxBR1MgIiB8IHNlZCAtZSAncy8gLXBlZGFudGljIC8vJ2AKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNzogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgInJlZHVjZS5hdDo3MDciCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNzogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJyZWR1Y2UuYXQ6NzA3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6NzA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNzogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJyZWR1Y2UuYXQ6NzA3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjcwNzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWR1Y2UuYXQ6NzA3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo3MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzExNQorI0FUX1NUQVJUXzExNgorYXRfZm5fZ3JvdXBfYmFubmVyIDExNiAncmVkdWNlLmF0Ojk1MScgXAorICAibm8gJWRlZmluZSBsci50eXBlOiBDb21wbGV4IExhbmUgU3BsaXQiICIgICAgICAgICAiIDYKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxMTYuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWNvZGUgeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CisgIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOworfQorCislbGVmdCAnYScKKy8vIENvbmZsaWN0IHJlc29sdXRpb24gcmVuZGVycyBzdGF0ZSAxNiB1bnJlYWNoYWJsZSBmb3IgY2Fub25pY2FsIExSKDEpLiAgV2UKKy8vIGtlZXAgaXQgc28gdGhhdCB0aGUgcGFzZXIgdGFibGUgZGlmZiBpcyBlYXNpZXIgdG8gY29kZS4KKyVkZWZpbmUgbHIua2VlcC11bnJlYWNoYWJsZS1zdGF0ZXMKKworJSUKKworCisvKiBTaW1pbGFyIHRvIHRoZSBsYXN0IHRlc3QgY2FzZSBzZXQgYnV0IGZvcnNlZWluZyB0aGUgUy9SIGNvbmZsaWN0IGZyb20gdGhlCisgICBmaXJzdCBzdGF0ZSB0aGF0IG11c3QgYmUgc3BsaXQgaXMgYmVjb21pbmcgZGlmZmljdWx0LiAgSW1hZ2luZSBpZiBCIHdlcmUKKyAgIGV2ZW4gbW9yZSBjb21wbGV4LiAgSW1hZ2luZSBpZiBBIGhhZCBvdGhlciBSSFMncyBlbmRpbmcgaW4gb3RoZXIKKyAgIG5vbnRlcm1pbmFscy4gICovCitTOiAnYScgQSAnYScKKyB8ICdiJyBBICdiJworIHwgJ2MnIGMKKyA7CitBOiAnYScgJ2EnIEIKKyA7CitCOiAnYScKKyB8ICVwcmVjICdhJworIDsKK2M6ICdhJyAnYScgJ2InCisgfCBBCisgOworCisKKyUlCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorc3RhdGljIGludAoreXlsZXggKHZvaWQpCit7CisgIHN0YXRpYyBpbnQgY29uc3QgaW5wdXRbXSA9IHsKKyAgICAnYicsICdhJywgJ2EnLCAnYScsICdiJywgMAorICB9OworICBzdGF0aWMgaW50IGNvbnN0ICppbnB1dHAgPSBpbnB1dDsKKyAgcmV0dXJuICppbnB1dHArKzsKK30KKworaW50CittYWluICh2b2lkKQoreworICByZXR1cm4geXlwYXJzZSAoKTsKK30KK19BVEVPRgorCisKKworIyBJbiBzb21lIHZlcnNpb25zIG9mIEF1dG9jb25mLCBBVF9DSEVDSyBpbnZva2VzIEFTX0VTQ0FQRSBiZWZvcmUKKyMgZXhwYW5kaW5nIG1hY3Jvcywgc28gaXQgY29ycnVwdHMgc29tZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlCisjIG1hY3Jvcy4gIFRvIGF2b2lkIHRoaXMsIGV4cGFuZCBub3cgYW5kIHBhc3MgaXQgdGhlIHJlc3VsdCB3aXRoIHByb3BlcgorIyBzdHJpbmcgcXVvdGF0aW9uLiAgQXNzdW1lIGFyZ3MgNyB0aHJvdWdoIDEyIGV4cGFuZCB0byBwcm9wZXJseSBxdW90ZWQKKyMgc3RyaW5ncy4KKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWR1Y2UuYXQ6OTUxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiICJyZWR1Y2UuYXQ6OTUxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5NTE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWR1Y2UuYXQ6OTUxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVkdWNlLmF0Ojk1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MTogYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWR1Y2UuYXQ6OTUxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5NTE6IHNlZCAtbiAnL15TdGF0ZSAwXCQvLFwkcCcgaW5wdXQub3V0cHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJzZWQgLW4gJy9eU3RhdGUgMCQvLCRwJyBpbnB1dC5vdXRwdXQiICJyZWR1Y2UuYXQ6OTUxIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAtbiAnL15TdGF0ZSAwJC8sJHAnIGlucHV0Lm91dHB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIlN0YXRlIDAKKworICAgIDAgXCRhY2NlcHQ6IC4gUyBcJGVuZAorICAgIDEgUzogLiAnYScgQSAnYScKKyAgICAyICB8IC4gJ2InIEEgJ2InCisgICAgMyAgfCAuICdjJyBjCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMQorICAgICdiJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyCisgICAgJ2MnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDMKKworICAgIFMgIGdvIHRvIHN0YXRlIDQKKworCitTdGF0ZSAxCisKKyAgICAxIFM6ICdhJyAuIEEgJ2EnCisgICAgNCBBOiAuICdhJyAnYScgQgorCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDUKKworICAgIEEgIGdvIHRvIHN0YXRlIDYKKworCitTdGF0ZSAyCisKKyAgICAyIFM6ICdiJyAuIEEgJ2InCisgICAgNCBBOiAuICdhJyAnYScgQgorCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDUKKworICAgIEEgIGdvIHRvIHN0YXRlIDcKKworCitTdGF0ZSAzCisKKyAgICAzIFM6ICdjJyAuIGMKKyAgICA0IEE6IC4gJ2EnICdhJyBCCisgICAgNyBjOiAuICdhJyAnYScgJ2InCisgICAgOCAgfCAuIEEKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4CisKKyAgICBBICBnbyB0byBzdGF0ZSA5CisgICAgYyAgZ28gdG8gc3RhdGUgMTAKKworCitTdGF0ZSA0CisKKyAgICAwIFwkYWNjZXB0OiBTIC4gXCRlbmQKKworICAgIFwkZW5kICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDExCisKKworU3RhdGUgNQorCisgICAgNCBBOiAnYScgLiAnYScgQgorCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEyCisKKworU3RhdGUgNgorCisgICAgMSBTOiAnYScgQSAuICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEzCisKKworU3RhdGUgNworCisgICAgMiBTOiAnYicgQSAuICdiJworCisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE0CisKKworU3RhdGUgOAorCisgICAgNCBBOiAnYScgLiAnYScgQgorICAgIDcgYzogJ2EnIC4gJ2EnICdiJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE1CisKKworU3RhdGUgOQorCisgICAgOCBjOiBBIC4KKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgOCAoYykKKworCitTdGF0ZSAxMAorCisgICAgMyBTOiAnYycgYyAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDMgKFMpCisKKworU3RhdGUgMTEKKworICAgIDAgXCRhY2NlcHQ6IFMgXCRlbmQgLgorCisgICAgXCRkZWZhdWx0ICBhY2NlcHQKKworCitTdGF0ZSAxMgorCisgICAgNCBBOiAnYScgJ2EnIC4gQgorICAgIDUgQjogLiAnYScKKyAgICA2ICB8IC4gIFsnYScsICdiJ10KKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgNiAoQikKKworICAgIEIgIGdvIHRvIHN0YXRlIDE3CisKKyAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgNiBhbmQgdG9rZW4gJ2EnIHJlc29sdmVkIGFzIHJlZHVjZSAoJWxlZnQgJ2EnKS4KKworCitTdGF0ZSAxMworCisgICAgMSBTOiAnYScgQSAnYScgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAxIChTKQorCisKK1N0YXRlIDE0CisKKyAgICAyIFM6ICdiJyBBICdiJyAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDIgKFMpCisKKworU3RhdGUgMTUKKworICAgIDQgQTogJ2EnICdhJyAuIEIKKyAgICA1IEI6IC4gJ2EnCisgICAgNiAgfCAuICBbXCRlbmRdCisgICAgNyBjOiAnYScgJ2EnIC4gJ2InCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTYKKyAgICAnYicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTgKKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgNiAoQikKKworICAgIEIgIGdvIHRvIHN0YXRlIDE3CisKKworU3RhdGUgMTYKKworICAgIDUgQjogJ2EnIC4KKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgNSAoQikKKworCitTdGF0ZSAxNworCisgICAgNCBBOiAnYScgJ2EnIEIgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA0IChBKQorCisKK1N0YXRlIDE4CisKKyAgICA3IGM6ICdhJyAnYScgJ2InIC4KKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgNyAoYykKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisjIENhbm9uaWNhbCBMUiBnZW5lcmF0ZXMgdmVyeSBsYXJnZSB0YWJsZXMsIHJlc3VsdGluZyBpbiB2ZXJ5IGxvbmcKKyMgZmlsZXMgd2l0aCAjbGluZSBkaXJlY3RpdmVzIHRoYXQgbWF5IG92ZXJmbG93IHdoYXQgdGhlIHN0YW5kYXJkcworIyAoQzkwIGFuZCBDKys5OCkgZ3VhcmFudGVlOiAzMjc2Ny4gIEluIHRoYXQgY2FzZSwgR0NDJ3MgLXBlZGFudGljCisjIHdpbGwgaXNzdWUgYW4gZXJyb3IuCisjCisjIFRoZXJlIGlzIG5vICIiIGFyb3VuZCBgd2NgIHNpbmNlIHNvbWUgaW5kZW50IHRoZSByZXN1bHQuCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAicmVkdWNlLmF0Ojk1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyIgInJlZHVjZS5hdDo5NTEiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxOiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgInJlZHVjZS5hdDo5NTEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZHVjZS5hdDo5NTEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzeW50YXggZXJyb3IKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzExNgorI0FUX1NUQVJUXzExNworYXRfZm5fZ3JvdXBfYmFubmVyIDExNyAncmVkdWNlLmF0Ojk1MScgXAorICAiJWRlZmluZSBsci50eXBlIGxhbHI6IENvbXBsZXggTGFuZSBTcGxpdCIgIiAgICAgICAiIDYKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxMTcuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWNvZGUgeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CisgIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOworfQorCislZGVmaW5lIGxyLnR5cGUgbGFscgorJWxlZnQgJ2EnCisvLyBDb25mbGljdCByZXNvbHV0aW9uIHJlbmRlcnMgc3RhdGUgMTYgdW5yZWFjaGFibGUgZm9yIGNhbm9uaWNhbCBMUigxKS4gIFdlCisvLyBrZWVwIGl0IHNvIHRoYXQgdGhlIHBhc2VyIHRhYmxlIGRpZmYgaXMgZWFzaWVyIHRvIGNvZGUuCislZGVmaW5lIGxyLmtlZXAtdW5yZWFjaGFibGUtc3RhdGVzCisKKyUlCisKKworLyogU2ltaWxhciB0byB0aGUgbGFzdCB0ZXN0IGNhc2Ugc2V0IGJ1dCBmb3JzZWVpbmcgdGhlIFMvUiBjb25mbGljdCBmcm9tIHRoZQorICAgZmlyc3Qgc3RhdGUgdGhhdCBtdXN0IGJlIHNwbGl0IGlzIGJlY29taW5nIGRpZmZpY3VsdC4gIEltYWdpbmUgaWYgQiB3ZXJlCisgICBldmVuIG1vcmUgY29tcGxleC4gIEltYWdpbmUgaWYgQSBoYWQgb3RoZXIgUkhTJ3MgZW5kaW5nIGluIG90aGVyCisgICBub250ZXJtaW5hbHMuICAqLworUzogJ2EnIEEgJ2EnCisgfCAnYicgQSAnYicKKyB8ICdjJyBjCisgOworQTogJ2EnICdhJyBCCisgOworQjogJ2EnCisgfCAlcHJlYyAnYScKKyA7CitjOiAnYScgJ2EnICdiJworIHwgQQorIDsKKworCislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KK3N0YXRpYyBpbnQKK3l5bGV4ICh2b2lkKQoreworICBzdGF0aWMgaW50IGNvbnN0IGlucHV0W10gPSB7CisgICAgJ2InLCAnYScsICdhJywgJ2EnLCAnYicsIDAKKyAgfTsKKyAgc3RhdGljIGludCBjb25zdCAqaW5wdXRwID0gaW5wdXQ7CisgIHJldHVybiAqaW5wdXRwKys7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKKyMgSW4gc29tZSB2ZXJzaW9ucyBvZiBBdXRvY29uZiwgQVRfQ0hFQ0sgaW52b2tlcyBBU19FU0NBUEUgYmVmb3JlCisjIGV4cGFuZGluZyBtYWNyb3MsIHNvIGl0IGNvcnJ1cHRzIHNvbWUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZQorIyBtYWNyb3MuICBUbyBhdm9pZCB0aGlzLCBleHBhbmQgbm93IGFuZCBwYXNzIGl0IHRoZSByZXN1bHQgd2l0aCBwcm9wZXIKKyMgc3RyaW5nIHF1b3RhdGlvbi4gIEFzc3VtZSBhcmdzIDcgdGhyb3VnaCAxMiBleHBhbmQgdG8gcHJvcGVybHkgcXVvdGVkCisjIHN0cmluZ3MuCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVkdWNlLmF0Ojk1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5NTE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IiAicmVkdWNlLmF0Ojk1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVkdWNlLmF0Ojk1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZHVjZS5hdDo5NTEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5NTE6IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVkdWNlLmF0Ojk1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxOiBzZWQgLW4gJy9eU3RhdGUgMFwkLyxcJHAnIGlucHV0Lm91dHB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAic2VkIC1uICcvXlN0YXRlIDAkLywkcCcgaW5wdXQub3V0cHV0IiAicmVkdWNlLmF0Ojk1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgLW4gJy9eU3RhdGUgMCQvLCRwJyBpbnB1dC5vdXRwdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJTdGF0ZSAwCisKKyAgICAwIFwkYWNjZXB0OiAuIFMgXCRlbmQKKyAgICAxIFM6IC4gJ2EnIEEgJ2EnCisgICAgMiAgfCAuICdiJyBBICdiJworICAgIDMgIHwgLiAnYycgYworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEKKyAgICAnYicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMgorICAgICdjJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAzCisKKyAgICBTICBnbyB0byBzdGF0ZSA0CisKKworU3RhdGUgMQorCisgICAgMSBTOiAnYScgLiBBICdhJworICAgIDQgQTogLiAnYScgJ2EnIEIKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1CisKKyAgICBBICBnbyB0byBzdGF0ZSA2CisKKworU3RhdGUgMgorCisgICAgMiBTOiAnYicgLiBBICdiJworICAgIDQgQTogLiAnYScgJ2EnIEIKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1CisKKyAgICBBICBnbyB0byBzdGF0ZSA3CisKKworU3RhdGUgMworCisgICAgMyBTOiAnYycgLiBjCisgICAgNCBBOiAuICdhJyAnYScgQgorICAgIDcgYzogLiAnYScgJ2EnICdiJworICAgIDggIHwgLiBBCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOAorCisgICAgQSAgZ28gdG8gc3RhdGUgOQorICAgIGMgIGdvIHRvIHN0YXRlIDEwCisKKworU3RhdGUgNAorCisgICAgMCBcJGFjY2VwdDogUyAuIFwkZW5kCisKKyAgICBcJGVuZCAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxMQorCisKK1N0YXRlIDUKKworICAgIDQgQTogJ2EnIC4gJ2EnIEIKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxMgorCisKK1N0YXRlIDYKKworICAgIDEgUzogJ2EnIEEgLiAnYScKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxMworCisKK1N0YXRlIDcKKworICAgIDIgUzogJ2InIEEgLiAnYicKKworICAgICdiJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxNAorCisKK1N0YXRlIDgKKworICAgIDQgQTogJ2EnIC4gJ2EnIEIKKyAgICA3IGM6ICdhJyAuICdhJyAnYicKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxNQorCisKK1N0YXRlIDkKKworICAgIDggYzogQSAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDggKGMpCisKKworU3RhdGUgMTAKKworICAgIDMgUzogJ2MnIGMgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAzIChTKQorCisKK1N0YXRlIDExCisKKyAgICAwIFwkYWNjZXB0OiBTIFwkZW5kIC4KKworICAgIFwkZGVmYXVsdCAgYWNjZXB0CisKKworU3RhdGUgMTIKKworICAgIDQgQTogJ2EnICdhJyAuIEIKKyAgICA1IEI6IC4gJ2EnCisgICAgNiAgfCAuICBbJ2EnLCAnYiddCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDYgKEIpCisKKyAgICBCICBnbyB0byBzdGF0ZSAxNworCisgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlIDYgYW5kIHRva2VuICdhJyByZXNvbHZlZCBhcyByZWR1Y2UgKCVsZWZ0ICdhJykuCisKKworU3RhdGUgMTMKKworICAgIDEgUzogJ2EnIEEgJ2EnIC4KKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMSAoUykKKworCitTdGF0ZSAxNAorCisgICAgMiBTOiAnYicgQSAnYicgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAyIChTKQorCisKK1N0YXRlIDE1CisKKyAgICA0IEE6ICdhJyAnYScgLiBCCisgICAgNSBCOiAuICdhJworICAgIDYgIHwgLiAgW1wkZW5kXQorICAgIDcgYzogJ2EnICdhJyAuICdiJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE2CisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE4CisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDYgKEIpCisKKyAgICBCICBnbyB0byBzdGF0ZSAxNworCisKK1N0YXRlIDE2CisKKyAgICA1IEI6ICdhJyAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDUgKEIpCisKKworU3RhdGUgMTcKKworICAgIDQgQTogJ2EnICdhJyBCIC4KKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgNCAoQSkKKworCitTdGF0ZSAxOAorCisgICAgNyBjOiAnYScgJ2EnICdiJyAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDcgKGMpCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworIyBDYW5vbmljYWwgTFIgZ2VuZXJhdGVzIHZlcnkgbGFyZ2UgdGFibGVzLCByZXN1bHRpbmcgaW4gdmVyeSBsb25nCisjIGZpbGVzIHdpdGggI2xpbmUgZGlyZWN0aXZlcyB0aGF0IG1heSBvdmVyZmxvdyB3aGF0IHRoZSBzdGFuZGFyZHMKKyMgKEM5MCBhbmQgQysrOTgpIGd1YXJhbnRlZTogMzI3NjcuICBJbiB0aGF0IGNhc2UsIEdDQydzIC1wZWRhbnRpYworIyB3aWxsIGlzc3VlIGFuIGVycm9yLgorIworIyBUaGVyZSBpcyBubyAiIiBhcm91bmQgYHdjYCBzaW5jZSBzb21lIGluZGVudCB0aGUgcmVzdWx0LgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgInJlZHVjZS5hdDo5NTEiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJyZWR1Y2UuYXQ6OTUxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MTogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJyZWR1Y2UuYXQ6OTUxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWR1Y2UuYXQ6OTUxIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAic3ludGF4IGVycm9yCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xMTcKKyNBVF9TVEFSVF8xMTgKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxMTggJ3JlZHVjZS5hdDo5NTEnIFwKKyAgIiVkZWZpbmUgbHIudHlwZSBpZWxyOiBDb21wbGV4IExhbmUgU3BsaXQiICIgICAgICAgIiA2CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTE4LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVjb2RlIHsKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKK30KKworJWRlZmluZSBsci50eXBlIGllbHIKKyVsZWZ0ICdhJworLy8gQ29uZmxpY3QgcmVzb2x1dGlvbiByZW5kZXJzIHN0YXRlIDE2IHVucmVhY2hhYmxlIGZvciBjYW5vbmljYWwgTFIoMSkuICBXZQorLy8ga2VlcCBpdCBzbyB0aGF0IHRoZSBwYXNlciB0YWJsZSBkaWZmIGlzIGVhc2llciB0byBjb2RlLgorJWRlZmluZSBsci5rZWVwLXVucmVhY2hhYmxlLXN0YXRlcworCislJQorCisKKy8qIFNpbWlsYXIgdG8gdGhlIGxhc3QgdGVzdCBjYXNlIHNldCBidXQgZm9yc2VlaW5nIHRoZSBTL1IgY29uZmxpY3QgZnJvbSB0aGUKKyAgIGZpcnN0IHN0YXRlIHRoYXQgbXVzdCBiZSBzcGxpdCBpcyBiZWNvbWluZyBkaWZmaWN1bHQuICBJbWFnaW5lIGlmIEIgd2VyZQorICAgZXZlbiBtb3JlIGNvbXBsZXguICBJbWFnaW5lIGlmIEEgaGFkIG90aGVyIFJIUydzIGVuZGluZyBpbiBvdGhlcgorICAgbm9udGVybWluYWxzLiAgKi8KK1M6ICdhJyBBICdhJworIHwgJ2InIEEgJ2InCisgfCAnYycgYworIDsKK0E6ICdhJyAnYScgQgorIDsKK0I6ICdhJworIHwgJXByZWMgJ2EnCisgOworYzogJ2EnICdhJyAnYicKKyB8IEEKKyA7CisKKworJSUKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CitzdGF0aWMgaW50Cit5eWxleCAodm9pZCkKK3sKKyAgc3RhdGljIGludCBjb25zdCBpbnB1dFtdID0geworICAgICdiJywgJ2EnLCAnYScsICdhJywgJ2InLCAwCisgIH07CisgIHN0YXRpYyBpbnQgY29uc3QgKmlucHV0cCA9IGlucHV0OworICByZXR1cm4gKmlucHV0cCsrOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCisjIEluIHNvbWUgdmVyc2lvbnMgb2YgQXV0b2NvbmYsIEFUX0NIRUNLIGludm9rZXMgQVNfRVNDQVBFIGJlZm9yZQorIyBleHBhbmRpbmcgbWFjcm9zLCBzbyBpdCBjb3JydXB0cyBzb21lIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUKKyMgbWFjcm9zLiAgVG8gYXZvaWQgdGhpcywgZXhwYW5kIG5vdyBhbmQgcGFzcyBpdCB0aGUgcmVzdWx0IHdpdGggcHJvcGVyCisjIHN0cmluZyBxdW90YXRpb24uICBBc3N1bWUgYXJncyA3IHRocm91Z2ggMTIgZXhwYW5kIHRvIHByb3Blcmx5IHF1b3RlZAorIyBzdHJpbmdzLgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5NTE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZHVjZS5hdDo5NTEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIgInJlZHVjZS5hdDo5NTEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZHVjZS5hdDo5NTEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5NTE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWR1Y2UuYXQ6OTUxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxOiBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZHVjZS5hdDo5NTEiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MTogc2VkIC1uICcvXlN0YXRlIDBcJC8sXCRwJyBpbnB1dC5vdXRwdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgInNlZCAtbiAnL15TdGF0ZSAwJC8sJHAnIGlucHV0Lm91dHB1dCIgInJlZHVjZS5hdDo5NTEiCisoICRhdF9jaGVja190cmFjZTsgc2VkIC1uICcvXlN0YXRlIDAkLywkcCcgaW5wdXQub3V0cHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiU3RhdGUgMAorCisgICAgMCBcJGFjY2VwdDogLiBTIFwkZW5kCisgICAgMSBTOiAuICdhJyBBICdhJworICAgIDIgIHwgLiAnYicgQSAnYicKKyAgICAzICB8IC4gJ2MnIGMKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxCisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIKKyAgICAnYycgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMworCisgICAgUyAgZ28gdG8gc3RhdGUgNAorCisKK1N0YXRlIDEKKworICAgIDEgUzogJ2EnIC4gQSAnYScKKyAgICA0IEE6IC4gJ2EnICdhJyBCCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNQorCisgICAgQSAgZ28gdG8gc3RhdGUgNgorCisKK1N0YXRlIDIKKworICAgIDIgUzogJ2InIC4gQSAnYicKKyAgICA0IEE6IC4gJ2EnICdhJyBCCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTkKKworICAgIEEgIGdvIHRvIHN0YXRlIDcKKworCitTdGF0ZSAzCisKKyAgICAzIFM6ICdjJyAuIGMKKyAgICA0IEE6IC4gJ2EnICdhJyBCCisgICAgNyBjOiAuICdhJyAnYScgJ2InCisgICAgOCAgfCAuIEEKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4CisKKyAgICBBICBnbyB0byBzdGF0ZSA5CisgICAgYyAgZ28gdG8gc3RhdGUgMTAKKworCitTdGF0ZSA0CisKKyAgICAwIFwkYWNjZXB0OiBTIC4gXCRlbmQKKworICAgIFwkZW5kICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDExCisKKworU3RhdGUgNQorCisgICAgNCBBOiAnYScgLiAnYScgQgorCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEyCisKKworU3RhdGUgNgorCisgICAgMSBTOiAnYScgQSAuICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEzCisKKworU3RhdGUgNworCisgICAgMiBTOiAnYicgQSAuICdiJworCisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE0CisKKworU3RhdGUgOAorCisgICAgNCBBOiAnYScgLiAnYScgQgorICAgIDcgYzogJ2EnIC4gJ2EnICdiJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE1CisKKworU3RhdGUgOQorCisgICAgOCBjOiBBIC4KKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgOCAoYykKKworCitTdGF0ZSAxMAorCisgICAgMyBTOiAnYycgYyAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDMgKFMpCisKKworU3RhdGUgMTEKKworICAgIDAgXCRhY2NlcHQ6IFMgXCRlbmQgLgorCisgICAgXCRkZWZhdWx0ICBhY2NlcHQKKworCitTdGF0ZSAxMgorCisgICAgNCBBOiAnYScgJ2EnIC4gQgorICAgIDUgQjogLiAnYScKKyAgICA2ICB8IC4gIFsnYSddCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDYgKEIpCisKKyAgICBCICBnbyB0byBzdGF0ZSAxNworCisgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlIDYgYW5kIHRva2VuICdhJyByZXNvbHZlZCBhcyByZWR1Y2UgKCVsZWZ0ICdhJykuCisKKworU3RhdGUgMTMKKworICAgIDEgUzogJ2EnIEEgJ2EnIC4KKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMSAoUykKKworCitTdGF0ZSAxNAorCisgICAgMiBTOiAnYicgQSAnYicgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAyIChTKQorCisKK1N0YXRlIDE1CisKKyAgICA0IEE6ICdhJyAnYScgLiBCCisgICAgNSBCOiAuICdhJworICAgIDYgIHwgLiAgW1wkZW5kXQorICAgIDcgYzogJ2EnICdhJyAuICdiJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE2CisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE4CisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDYgKEIpCisKKyAgICBCICBnbyB0byBzdGF0ZSAxNworCisKK1N0YXRlIDE2CisKKyAgICA1IEI6ICdhJyAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDUgKEIpCisKKworU3RhdGUgMTcKKworICAgIDQgQTogJ2EnICdhJyBCIC4KKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgNCAoQSkKKworCitTdGF0ZSAxOAorCisgICAgNyBjOiAnYScgJ2EnICdiJyAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDcgKGMpCisKKworU3RhdGUgMTkKKworICAgIDQgQTogJ2EnIC4gJ2EnIEIKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyMAorCisKK1N0YXRlIDIwCisKKyAgICA0IEE6ICdhJyAnYScgLiBCCisgICAgNSBCOiAuICdhJworICAgIDYgIHwgLiAgWydiJ10KKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxNgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA2IChCKQorCisgICAgQiAgZ28gdG8gc3RhdGUgMTcKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisjIENhbm9uaWNhbCBMUiBnZW5lcmF0ZXMgdmVyeSBsYXJnZSB0YWJsZXMsIHJlc3VsdGluZyBpbiB2ZXJ5IGxvbmcKKyMgZmlsZXMgd2l0aCAjbGluZSBkaXJlY3RpdmVzIHRoYXQgbWF5IG92ZXJmbG93IHdoYXQgdGhlIHN0YW5kYXJkcworIyAoQzkwIGFuZCBDKys5OCkgZ3VhcmFudGVlOiAzMjc2Ny4gIEluIHRoYXQgY2FzZSwgR0NDJ3MgLXBlZGFudGljCisjIHdpbGwgaXNzdWUgYW4gZXJyb3IuCisjCisjIFRoZXJlIGlzIG5vICIiIGFyb3VuZCBgd2NgIHNpbmNlIHNvbWUgaW5kZW50IHRoZSByZXN1bHQuCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAicmVkdWNlLmF0Ojk1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyIgInJlZHVjZS5hdDo5NTEiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxOiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgInJlZHVjZS5hdDo5NTEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZHVjZS5hdDo5NTEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTE4CisjQVRfU1RBUlRfMTE5CithdF9mbl9ncm91cF9iYW5uZXIgMTE5ICdyZWR1Y2UuYXQ6OTUxJyBcCisgICIlZGVmaW5lIGxyLnR5cGUgY2Fub25pY2FsLWxyOiBDb21wbGV4IExhbmUgU3BsaXQiICIiIDYKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxMTkuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWNvZGUgeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CisgIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOworfQorCislZGVmaW5lIGxyLnR5cGUgY2Fub25pY2FsLWxyCislbGVmdCAnYScKKy8vIENvbmZsaWN0IHJlc29sdXRpb24gcmVuZGVycyBzdGF0ZSAxNiB1bnJlYWNoYWJsZSBmb3IgY2Fub25pY2FsIExSKDEpLiAgV2UKKy8vIGtlZXAgaXQgc28gdGhhdCB0aGUgcGFzZXIgdGFibGUgZGlmZiBpcyBlYXNpZXIgdG8gY29kZS4KKyVkZWZpbmUgbHIua2VlcC11bnJlYWNoYWJsZS1zdGF0ZXMKKworJSUKKworCisvKiBTaW1pbGFyIHRvIHRoZSBsYXN0IHRlc3QgY2FzZSBzZXQgYnV0IGZvcnNlZWluZyB0aGUgUy9SIGNvbmZsaWN0IGZyb20gdGhlCisgICBmaXJzdCBzdGF0ZSB0aGF0IG11c3QgYmUgc3BsaXQgaXMgYmVjb21pbmcgZGlmZmljdWx0LiAgSW1hZ2luZSBpZiBCIHdlcmUKKyAgIGV2ZW4gbW9yZSBjb21wbGV4LiAgSW1hZ2luZSBpZiBBIGhhZCBvdGhlciBSSFMncyBlbmRpbmcgaW4gb3RoZXIKKyAgIG5vbnRlcm1pbmFscy4gICovCitTOiAnYScgQSAnYScKKyB8ICdiJyBBICdiJworIHwgJ2MnIGMKKyA7CitBOiAnYScgJ2EnIEIKKyA7CitCOiAnYScKKyB8ICVwcmVjICdhJworIDsKK2M6ICdhJyAnYScgJ2InCisgfCBBCisgOworCisKKyUlCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorc3RhdGljIGludAoreXlsZXggKHZvaWQpCit7CisgIHN0YXRpYyBpbnQgY29uc3QgaW5wdXRbXSA9IHsKKyAgICAnYicsICdhJywgJ2EnLCAnYScsICdiJywgMAorICB9OworICBzdGF0aWMgaW50IGNvbnN0ICppbnB1dHAgPSBpbnB1dDsKKyAgcmV0dXJuICppbnB1dHArKzsKK30KKworaW50CittYWluICh2b2lkKQoreworICByZXR1cm4geXlwYXJzZSAoKTsKK30KK19BVEVPRgorCisKKworIyBJbiBzb21lIHZlcnNpb25zIG9mIEF1dG9jb25mLCBBVF9DSEVDSyBpbnZva2VzIEFTX0VTQ0FQRSBiZWZvcmUKKyMgZXhwYW5kaW5nIG1hY3Jvcywgc28gaXQgY29ycnVwdHMgc29tZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlCisjIG1hY3Jvcy4gIFRvIGF2b2lkIHRoaXMsIGV4cGFuZCBub3cgYW5kIHBhc3MgaXQgdGhlIHJlc3VsdCB3aXRoIHByb3BlcgorIyBzdHJpbmcgcXVvdGF0aW9uLiAgQXNzdW1lIGFyZ3MgNyB0aHJvdWdoIDEyIGV4cGFuZCB0byBwcm9wZXJseSBxdW90ZWQKKyMgc3RyaW5ncy4KKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWR1Y2UuYXQ6OTUxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiICJyZWR1Y2UuYXQ6OTUxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5NTE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWR1Y2UuYXQ6OTUxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVkdWNlLmF0Ojk1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MTogYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWR1Y2UuYXQ6OTUxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5NTE6IHNlZCAtbiAnL15TdGF0ZSAwXCQvLFwkcCcgaW5wdXQub3V0cHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJzZWQgLW4gJy9eU3RhdGUgMCQvLCRwJyBpbnB1dC5vdXRwdXQiICJyZWR1Y2UuYXQ6OTUxIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAtbiAnL15TdGF0ZSAwJC8sJHAnIGlucHV0Lm91dHB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIlN0YXRlIDAKKworICAgIDAgXCRhY2NlcHQ6IC4gUyBcJGVuZAorICAgIDEgUzogLiAnYScgQSAnYScKKyAgICAyICB8IC4gJ2InIEEgJ2InCisgICAgMyAgfCAuICdjJyBjCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMQorICAgICdiJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyCisgICAgJ2MnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDMKKworICAgIFMgIGdvIHRvIHN0YXRlIDQKKworCitTdGF0ZSAxCisKKyAgICAxIFM6ICdhJyAuIEEgJ2EnCisgICAgNCBBOiAuICdhJyAnYScgQgorCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDUKKworICAgIEEgIGdvIHRvIHN0YXRlIDYKKworCitTdGF0ZSAyCisKKyAgICAyIFM6ICdiJyAuIEEgJ2InCisgICAgNCBBOiAuICdhJyAnYScgQgorCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE5CisKKyAgICBBICBnbyB0byBzdGF0ZSA3CisKKworU3RhdGUgMworCisgICAgMyBTOiAnYycgLiBjCisgICAgNCBBOiAuICdhJyAnYScgQgorICAgIDcgYzogLiAnYScgJ2EnICdiJworICAgIDggIHwgLiBBCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOAorCisgICAgQSAgZ28gdG8gc3RhdGUgOQorICAgIGMgIGdvIHRvIHN0YXRlIDEwCisKKworU3RhdGUgNAorCisgICAgMCBcJGFjY2VwdDogUyAuIFwkZW5kCisKKyAgICBcJGVuZCAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxMQorCisKK1N0YXRlIDUKKworICAgIDQgQTogJ2EnIC4gJ2EnIEIKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxMgorCisKK1N0YXRlIDYKKworICAgIDEgUzogJ2EnIEEgLiAnYScKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxMworCisKK1N0YXRlIDcKKworICAgIDIgUzogJ2InIEEgLiAnYicKKworICAgICdiJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxNAorCisKK1N0YXRlIDgKKworICAgIDQgQTogJ2EnIC4gJ2EnIEIKKyAgICA3IGM6ICdhJyAuICdhJyAnYicKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxNQorCisKK1N0YXRlIDkKKworICAgIDggYzogQSAuICBbXCRlbmRdCisKKyAgICBcJGVuZCAgcmVkdWNlIHVzaW5nIHJ1bGUgOCAoYykKKworCitTdGF0ZSAxMAorCisgICAgMyBTOiAnYycgYyAuICBbXCRlbmRdCisKKyAgICBcJGVuZCAgcmVkdWNlIHVzaW5nIHJ1bGUgMyAoUykKKworCitTdGF0ZSAxMQorCisgICAgMCBcJGFjY2VwdDogUyBcJGVuZCAuCisKKyAgICBcJGRlZmF1bHQgIGFjY2VwdAorCisKK1N0YXRlIDEyCisKKyAgICA0IEE6ICdhJyAnYScgLiBCCisgICAgNSBCOiAuICdhJworICAgIDYgIHwgLiAgWydhJ10KKworICAgICdhJyAgcmVkdWNlIHVzaW5nIHJ1bGUgNiAoQikKKworICAgIEIgIGdvIHRvIHN0YXRlIDE3CisKKyAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgNiBhbmQgdG9rZW4gJ2EnIHJlc29sdmVkIGFzIHJlZHVjZSAoJWxlZnQgJ2EnKS4KKworCitTdGF0ZSAxMworCisgICAgMSBTOiAnYScgQSAnYScgLiAgW1wkZW5kXQorCisgICAgXCRlbmQgIHJlZHVjZSB1c2luZyBydWxlIDEgKFMpCisKKworU3RhdGUgMTQKKworICAgIDIgUzogJ2InIEEgJ2InIC4gIFtcJGVuZF0KKworICAgIFwkZW5kICByZWR1Y2UgdXNpbmcgcnVsZSAyIChTKQorCisKK1N0YXRlIDE1CisKKyAgICA0IEE6ICdhJyAnYScgLiBCCisgICAgNSBCOiAuICdhJworICAgIDYgIHwgLiAgW1wkZW5kXQorICAgIDcgYzogJ2EnICdhJyAuICdiJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIwCisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE4CisKKyAgICBcJGVuZCAgcmVkdWNlIHVzaW5nIHJ1bGUgNiAoQikKKworICAgIEIgIGdvIHRvIHN0YXRlIDIxCisKKworU3RhdGUgMTYKKworICAgIDUgQjogJ2EnIC4gIFsnYSddCisKKyAgICAnYScgIHJlZHVjZSB1c2luZyBydWxlIDUgKEIpCisKKworU3RhdGUgMTcKKworICAgIDQgQTogJ2EnICdhJyBCIC4gIFsnYSddCisKKyAgICAnYScgIHJlZHVjZSB1c2luZyBydWxlIDQgKEEpCisKKworU3RhdGUgMTgKKworICAgIDcgYzogJ2EnICdhJyAnYicgLiAgW1wkZW5kXQorCisgICAgXCRlbmQgIHJlZHVjZSB1c2luZyBydWxlIDcgKGMpCisKKworU3RhdGUgMTkKKworICAgIDQgQTogJ2EnIC4gJ2EnIEIKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyMgorCisKK1N0YXRlIDIwCisKKyAgICA1IEI6ICdhJyAuICBbXCRlbmRdCisKKyAgICBcJGVuZCAgcmVkdWNlIHVzaW5nIHJ1bGUgNSAoQikKKworCitTdGF0ZSAyMQorCisgICAgNCBBOiAnYScgJ2EnIEIgLiAgW1wkZW5kXQorCisgICAgXCRlbmQgIHJlZHVjZSB1c2luZyBydWxlIDQgKEEpCisKKworU3RhdGUgMjIKKworICAgIDQgQTogJ2EnICdhJyAuIEIKKyAgICA1IEI6IC4gJ2EnCisgICAgNiAgfCAuICBbJ2InXQorCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIzCisKKyAgICAnYicgIHJlZHVjZSB1c2luZyBydWxlIDYgKEIpCisKKyAgICBCICBnbyB0byBzdGF0ZSAyNAorCisKK1N0YXRlIDIzCisKKyAgICA1IEI6ICdhJyAuICBbJ2InXQorCisgICAgJ2InICByZWR1Y2UgdXNpbmcgcnVsZSA1IChCKQorCisKK1N0YXRlIDI0CisKKyAgICA0IEE6ICdhJyAnYScgQiAuICBbJ2InXQorCisgICAgJ2InICByZWR1Y2UgdXNpbmcgcnVsZSA0IChBKQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyMgQ2Fub25pY2FsIExSIGdlbmVyYXRlcyB2ZXJ5IGxhcmdlIHRhYmxlcywgcmVzdWx0aW5nIGluIHZlcnkgbG9uZworIyBmaWxlcyB3aXRoICNsaW5lIGRpcmVjdGl2ZXMgdGhhdCBtYXkgb3ZlcmZsb3cgd2hhdCB0aGUgc3RhbmRhcmRzCisjIChDOTAgYW5kIEMrKzk4KSBndWFyYW50ZWU6IDMyNzY3LiAgSW4gdGhhdCBjYXNlLCBHQ0MncyAtcGVkYW50aWMKKyMgd2lsbCBpc3N1ZSBhbiBlcnJvci4KKyMKKyMgVGhlcmUgaXMgbm8gIiIgYXJvdW5kIGB3Y2Agc2luY2Ugc29tZSBpbmRlbnQgdGhlIHJlc3VsdC4KK2lmIHRlc3QgMzI3NjcgLWx0IGB3YyAtbCA8IGlucHV0LmNgOyB0aGVuCisgIENGTEFHUz1gZWNobyAiICRDRkxBR1MgIiB8IHNlZCAtZSAncy8gLXBlZGFudGljIC8vJ2AKKyAgQ1hYRkxBR1M9YGVjaG8gIiAkQ1hYRkxBR1MgIiB8IHNlZCAtZSAncy8gLXBlZGFudGljIC8vJ2AKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgInJlZHVjZS5hdDo5NTEiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJyZWR1Y2UuYXQ6OTUxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6OTUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MTogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJyZWR1Y2UuYXQ6OTUxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0Ojk1MTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWR1Y2UuYXQ6OTUxIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDo5NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzExOQorI0FUX1NUQVJUXzEyMAorYXRfZm5fZ3JvdXBfYmFubmVyIDEyMCAncmVkdWNlLmF0OjEyMjAnIFwKKyAgIm5vICVkZWZpbmUgbHIudHlwZTogU3BsaXQgRHVyaW5nIEFkZGVkIExvb2thaGVhZCBQcm9wYWdhdGlvbiIgIiIgNgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjEyMC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislY29kZSB7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgc3RhdGljIGludCB5eWxleCAodm9pZCk7Cit9CisKKyVkZWZpbmUgbHIua2VlcC11bnJlYWNoYWJsZS1zdGF0ZXMKKworJSUKKworCisvKiBUaGUgcGFydGlhbCBzdGF0ZSBjaGFydCBkaWFncmFtIGJlbG93IGlzIGZvciBMQUxSKDEpLiAgU3RhdGUgMCBpcyB0aGUgc3RhcnQKKyAgIHN0YXRlLiAgU3RhdGVzIGFyZSBpdGVyYXRlZCBmb3Igc3VjY2Vzc29yIGNvbnN0cnVjdGlvbiBpbiBudW1lcmljYWwgb3JkZXIuCisgICBUcmFuc2l0aW9ucyBhcmUgZG93bndhcmRzLgorCisgICBTdGF0ZSAxMyBoYXMgYSBSL1IgY29uZmxpY3QgdGhhdCBjYW5ub3QgYmUgcHJlZGljdGVkIGJ5IEJpc29uJ3MgTFIoMSkKKyAgIGFsZ29yaXRobSB1c2luZyBhbm5vdGF0aW9ucyBhbG9uZS4gIFRoYXQgaXMsIHdoZW4gc3RhdGUgMTEncyBzdWNjZXNzb3Igb24KKyAgICdkJyBpcyBtZXJnZWQgd2l0aCBzdGF0ZSA1ICh3aGljaCBpcyBvcmlnaW5hbGx5IGp1c3Qgc3RhdGUgMSdzIHN1Y2Nlc3NvciBvbgorICAgJ2QnKSwgc3RhdGUgNSdzIHN1Y2Nlc3NvciBvbiAnZScgbXVzdCB0aGVuIGJlIGNoYW5nZWQgYmVjYXVzZSB0aGUgcmVzdWx0aW5nCisgICBsb29rYWhlYWRzIHRoYXQgcHJvcGFnYXRlIHRvIGl0IG5vdyBtYWtlIGl0IGluY29tcGF0aWJsZSB3aXRoIHN0YXRlIDgncworICAgc3VjY2Vzc29yIG9uICdlJy4gIEluIG90aGVyIHdvcmRzLCBzdGF0ZSAxMyBtdXN0IGJlIHNwbGl0IHRvIGF2b2lkIHRoZQorICAgY29uZmxpY3QuCisKKyAgICAgICAgICAwCisgICAgICAgIC8gfCBcCisgICAgIGEgLyBjfCAgXCBiCisgICAgICAxICAgMyAgIDIKKyAgICAgIHwgICB8ICAgfAorICAgICBkfCAgIHxjICB8IGQKKyAgICAgIHwgIDExICAgfAorICAgICAgfCAgIHwgICB8CisgICAgICAgXCAvZCAgIHwKKyAgICAgICAgNSAgICAgOAorICAgICAgICAgXCAgICB8CisgICAgICAgIGUgXCAgLyBlCisgICAgICAgICAgIDEzCisgICAgICAgICAgIFIvUgorCisgICBUaGlzIGdyYW1tYXIgaXMgZGVzaWduZWQgY2FyZWZ1bGx5IHRvIG1ha2Ugc3VyZSB0aGF0LCBkZXNwaXRlIEJpc29uJ3MgTFIoMSkKKyAgIGFsZ29yaXRobSdzIGJyZWFkLWZpcnN0IGl0ZXJhdGlvbiBvZiB0cmFuc2l0aW9ucyB0byByZWNvbnN0cnVjdCBzdGF0ZXMsCisgICBzdGF0ZSAxMSdzIHN1Y2Nlc3NvcnMgYXJlIGNvbnN0cnVjdGVkIGFmdGVyIHN0YXRlIDUncyBhbmQgc3RhdGUgOCdzLgorICAgT3RoZXJ3aXNlIChmb3IgZXhhbXBsZSwgaWYgeW91IHJlbW92ZSB0aGUgZmlyc3QgJ2MnIGluIGVhY2ggb2YgcnVsZXMgNiBhbmQKKyAgIDcpLCBzdGF0ZSA1J3Mgc3VjY2Vzc29yIG9uICdlJyB3b3VsZCBuZXZlciBiZSBtZXJnZWQgd2l0aCBzdGF0ZSA4J3MsIHNvIHRoZQorICAgc3BsaXQgb2YgdGhlIHJlc3VsdGluZyBzdGF0ZSAxMyB3b3VsZCBuZXZlciBuZWVkIHRvIGJlIHBlcmZvcm1lZC4gICovCitTOiAnYScgQSAnZicKKyB8ICdhJyBCCisgfCAnYicgQSAnZicKKyB8ICdiJyBCICdnJworIHwgJ2InICdkJworIHwgJ2MnICdjJyBBICdnJworIHwgJ2MnICdjJyBCCisgOworQTogJ2QnICdlJyA7CitCOiAnZCcgJ2UnIDsKKworCislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KK3N0YXRpYyBpbnQKK3l5bGV4ICh2b2lkKQoreworICBzdGF0aWMgaW50IGNvbnN0IGlucHV0W10gPSB7CisgICAgJ2InLCAnZCcsICdlJywgJ2cnLCAwCisgIH07CisgIHN0YXRpYyBpbnQgY29uc3QgKmlucHV0cCA9IGlucHV0OworICByZXR1cm4gKmlucHV0cCsrOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCisjIEluIHNvbWUgdmVyc2lvbnMgb2YgQXV0b2NvbmYsIEFUX0NIRUNLIGludm9rZXMgQVNfRVNDQVBFIGJlZm9yZQorIyBleHBhbmRpbmcgbWFjcm9zLCBzbyBpdCBjb3JydXB0cyBzb21lIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUKKyMgbWFjcm9zLiAgVG8gYXZvaWQgdGhpcywgZXhwYW5kIG5vdyBhbmQgcGFzcyBpdCB0aGUgcmVzdWx0IHdpdGggcHJvcGVyCisjIHN0cmluZyBxdW90YXRpb24uICBBc3N1bWUgYXJncyA3IHRocm91Z2ggMTIgZXhwYW5kIHRvIHByb3Blcmx5IHF1b3RlZAorIyBzdHJpbmdzLgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxMjIwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxMjIwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVkdWNlLmF0OjEyMjAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMDogYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6IGNvbmZsaWN0czogMSByZWR1Y2UvcmVkdWNlCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjA6IHNlZCAtbiAnL15TdGF0ZSAwXCQvLFwkcCcgaW5wdXQub3V0cHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJzZWQgLW4gJy9eU3RhdGUgMCQvLCRwJyBpbnB1dC5vdXRwdXQiICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgLW4gJy9eU3RhdGUgMCQvLCRwJyBpbnB1dC5vdXRwdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJTdGF0ZSAwCisKKyAgICAwIFwkYWNjZXB0OiAuIFMgXCRlbmQKKyAgICAxIFM6IC4gJ2EnIEEgJ2YnCisgICAgMiAgfCAuICdhJyBCCisgICAgMyAgfCAuICdiJyBBICdmJworICAgIDQgIHwgLiAnYicgQiAnZycKKyAgICA1ICB8IC4gJ2InICdkJworICAgIDYgIHwgLiAnYycgJ2MnIEEgJ2cnCisgICAgNyAgfCAuICdjJyAnYycgQgorCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEKKyAgICAnYicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMgorICAgICdjJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAzCisKKyAgICBTICBnbyB0byBzdGF0ZSA0CisKKworU3RhdGUgMQorCisgICAgMSBTOiAnYScgLiBBICdmJworICAgIDIgIHwgJ2EnIC4gQgorICAgIDggQTogLiAnZCcgJ2UnCisgICAgOSBCOiAuICdkJyAnZScKKworICAgICdkJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1CisKKyAgICBBICBnbyB0byBzdGF0ZSA2CisgICAgQiAgZ28gdG8gc3RhdGUgNworCisKK1N0YXRlIDIKKworICAgIDMgUzogJ2InIC4gQSAnZicKKyAgICA0ICB8ICdiJyAuIEIgJ2cnCisgICAgNSAgfCAnYicgLiAnZCcKKyAgICA4IEE6IC4gJ2QnICdlJworICAgIDkgQjogLiAnZCcgJ2UnCisKKyAgICAnZCcgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOAorCisgICAgQSAgZ28gdG8gc3RhdGUgOQorICAgIEIgIGdvIHRvIHN0YXRlIDEwCisKKworU3RhdGUgMworCisgICAgNiBTOiAnYycgLiAnYycgQSAnZycKKyAgICA3ICB8ICdjJyAuICdjJyBCCisKKyAgICAnYycgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTEKKworCitTdGF0ZSA0CisKKyAgICAwIFwkYWNjZXB0OiBTIC4gXCRlbmQKKworICAgIFwkZW5kICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEyCisKKworU3RhdGUgNQorCisgICAgOCBBOiAnZCcgLiAnZScKKyAgICA5IEI6ICdkJyAuICdlJworCisgICAgJ2UnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEzCisKKworU3RhdGUgNgorCisgICAgMSBTOiAnYScgQSAuICdmJworCisgICAgJ2YnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE0CisKKworU3RhdGUgNworCisgICAgMiBTOiAnYScgQiAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDIgKFMpCisKKworU3RhdGUgOAorCisgICAgNSBTOiAnYicgJ2QnIC4gIFtcJGVuZF0KKyAgICA4IEE6ICdkJyAuICdlJworICAgIDkgQjogJ2QnIC4gJ2UnCisKKyAgICAnZScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTMKKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgNSAoUykKKworCitTdGF0ZSA5CisKKyAgICAzIFM6ICdiJyBBIC4gJ2YnCisKKyAgICAnZicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTUKKworCitTdGF0ZSAxMAorCisgICAgNCBTOiAnYicgQiAuICdnJworCisgICAgJ2cnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE2CisKKworU3RhdGUgMTEKKworICAgIDYgUzogJ2MnICdjJyAuIEEgJ2cnCisgICAgNyAgfCAnYycgJ2MnIC4gQgorICAgIDggQTogLiAnZCcgJ2UnCisgICAgOSBCOiAuICdkJyAnZScKKworICAgICdkJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1CisKKyAgICBBICBnbyB0byBzdGF0ZSAxNworICAgIEIgIGdvIHRvIHN0YXRlIDE4CisKKworU3RhdGUgMTIKKworICAgIDAgXCRhY2NlcHQ6IFMgXCRlbmQgLgorCisgICAgXCRkZWZhdWx0ICBhY2NlcHQKKworCitTdGF0ZSAxMworCisgICAgOCBBOiAnZCcgJ2UnIC4gIFsnZicsICdnJ10KKyAgICA5IEI6ICdkJyAnZScgLiAgW1wkZW5kLCAnZyddCisKKyAgICBcJGVuZCAgICAgIHJlZHVjZSB1c2luZyBydWxlIDkgKEIpCisgICAgJ2cnICAgICAgIHJlZHVjZSB1c2luZyBydWxlIDggKEEpCisgICAgJ2cnICAgICAgIFtyZWR1Y2UgdXNpbmcgcnVsZSA5IChCKV0KKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDggKEEpCisKKworU3RhdGUgMTQKKworICAgIDEgUzogJ2EnIEEgJ2YnIC4KKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMSAoUykKKworCitTdGF0ZSAxNQorCisgICAgMyBTOiAnYicgQSAnZicgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAzIChTKQorCisKK1N0YXRlIDE2CisKKyAgICA0IFM6ICdiJyBCICdnJyAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDQgKFMpCisKKworU3RhdGUgMTcKKworICAgIDYgUzogJ2MnICdjJyBBIC4gJ2cnCisKKyAgICAnZycgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTkKKworCitTdGF0ZSAxOAorCisgICAgNyBTOiAnYycgJ2MnIEIgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA3IChTKQorCisKK1N0YXRlIDE5CisKKyAgICA2IFM6ICdjJyAnYycgQSAnZycgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA2IChTKQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisjIENhbm9uaWNhbCBMUiBnZW5lcmF0ZXMgdmVyeSBsYXJnZSB0YWJsZXMsIHJlc3VsdGluZyBpbiB2ZXJ5IGxvbmcKKyMgZmlsZXMgd2l0aCAjbGluZSBkaXJlY3RpdmVzIHRoYXQgbWF5IG92ZXJmbG93IHdoYXQgdGhlIHN0YW5kYXJkcworIyAoQzkwIGFuZCBDKys5OCkgZ3VhcmFudGVlOiAzMjc2Ny4gIEluIHRoYXQgY2FzZSwgR0NDJ3MgLXBlZGFudGljCisjIHdpbGwgaXNzdWUgYW4gZXJyb3IuCisjCisjIFRoZXJlIGlzIG5vICIiIGFyb3VuZCBgd2NgIHNpbmNlIHNvbWUgaW5kZW50IHRoZSByZXN1bHQuCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMDogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgInJlZHVjZS5hdDoxMjIwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMDogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMDogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvcgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzEyMAorI0FUX1NUQVJUXzEyMQorYXRfZm5fZ3JvdXBfYmFubmVyIDEyMSAncmVkdWNlLmF0OjEyMjAnIFwKKyAgIiVkZWZpbmUgbHIudHlwZSBsYWxyOiBTcGxpdCBEdXJpbmcgQWRkZWQgTG9va2FoZWFkIFByb3BhZ2F0aW9uIiAiIiA2CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTIxLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVjb2RlIHsKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKK30KKworJWRlZmluZSBsci50eXBlIGxhbHIKKyVkZWZpbmUgbHIua2VlcC11bnJlYWNoYWJsZS1zdGF0ZXMKKworJSUKKworCisvKiBUaGUgcGFydGlhbCBzdGF0ZSBjaGFydCBkaWFncmFtIGJlbG93IGlzIGZvciBMQUxSKDEpLiAgU3RhdGUgMCBpcyB0aGUgc3RhcnQKKyAgIHN0YXRlLiAgU3RhdGVzIGFyZSBpdGVyYXRlZCBmb3Igc3VjY2Vzc29yIGNvbnN0cnVjdGlvbiBpbiBudW1lcmljYWwgb3JkZXIuCisgICBUcmFuc2l0aW9ucyBhcmUgZG93bndhcmRzLgorCisgICBTdGF0ZSAxMyBoYXMgYSBSL1IgY29uZmxpY3QgdGhhdCBjYW5ub3QgYmUgcHJlZGljdGVkIGJ5IEJpc29uJ3MgTFIoMSkKKyAgIGFsZ29yaXRobSB1c2luZyBhbm5vdGF0aW9ucyBhbG9uZS4gIFRoYXQgaXMsIHdoZW4gc3RhdGUgMTEncyBzdWNjZXNzb3Igb24KKyAgICdkJyBpcyBtZXJnZWQgd2l0aCBzdGF0ZSA1ICh3aGljaCBpcyBvcmlnaW5hbGx5IGp1c3Qgc3RhdGUgMSdzIHN1Y2Nlc3NvciBvbgorICAgJ2QnKSwgc3RhdGUgNSdzIHN1Y2Nlc3NvciBvbiAnZScgbXVzdCB0aGVuIGJlIGNoYW5nZWQgYmVjYXVzZSB0aGUgcmVzdWx0aW5nCisgICBsb29rYWhlYWRzIHRoYXQgcHJvcGFnYXRlIHRvIGl0IG5vdyBtYWtlIGl0IGluY29tcGF0aWJsZSB3aXRoIHN0YXRlIDgncworICAgc3VjY2Vzc29yIG9uICdlJy4gIEluIG90aGVyIHdvcmRzLCBzdGF0ZSAxMyBtdXN0IGJlIHNwbGl0IHRvIGF2b2lkIHRoZQorICAgY29uZmxpY3QuCisKKyAgICAgICAgICAwCisgICAgICAgIC8gfCBcCisgICAgIGEgLyBjfCAgXCBiCisgICAgICAxICAgMyAgIDIKKyAgICAgIHwgICB8ICAgfAorICAgICBkfCAgIHxjICB8IGQKKyAgICAgIHwgIDExICAgfAorICAgICAgfCAgIHwgICB8CisgICAgICAgXCAvZCAgIHwKKyAgICAgICAgNSAgICAgOAorICAgICAgICAgXCAgICB8CisgICAgICAgIGUgXCAgLyBlCisgICAgICAgICAgIDEzCisgICAgICAgICAgIFIvUgorCisgICBUaGlzIGdyYW1tYXIgaXMgZGVzaWduZWQgY2FyZWZ1bGx5IHRvIG1ha2Ugc3VyZSB0aGF0LCBkZXNwaXRlIEJpc29uJ3MgTFIoMSkKKyAgIGFsZ29yaXRobSdzIGJyZWFkLWZpcnN0IGl0ZXJhdGlvbiBvZiB0cmFuc2l0aW9ucyB0byByZWNvbnN0cnVjdCBzdGF0ZXMsCisgICBzdGF0ZSAxMSdzIHN1Y2Nlc3NvcnMgYXJlIGNvbnN0cnVjdGVkIGFmdGVyIHN0YXRlIDUncyBhbmQgc3RhdGUgOCdzLgorICAgT3RoZXJ3aXNlIChmb3IgZXhhbXBsZSwgaWYgeW91IHJlbW92ZSB0aGUgZmlyc3QgJ2MnIGluIGVhY2ggb2YgcnVsZXMgNiBhbmQKKyAgIDcpLCBzdGF0ZSA1J3Mgc3VjY2Vzc29yIG9uICdlJyB3b3VsZCBuZXZlciBiZSBtZXJnZWQgd2l0aCBzdGF0ZSA4J3MsIHNvIHRoZQorICAgc3BsaXQgb2YgdGhlIHJlc3VsdGluZyBzdGF0ZSAxMyB3b3VsZCBuZXZlciBuZWVkIHRvIGJlIHBlcmZvcm1lZC4gICovCitTOiAnYScgQSAnZicKKyB8ICdhJyBCCisgfCAnYicgQSAnZicKKyB8ICdiJyBCICdnJworIHwgJ2InICdkJworIHwgJ2MnICdjJyBBICdnJworIHwgJ2MnICdjJyBCCisgOworQTogJ2QnICdlJyA7CitCOiAnZCcgJ2UnIDsKKworCislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KK3N0YXRpYyBpbnQKK3l5bGV4ICh2b2lkKQoreworICBzdGF0aWMgaW50IGNvbnN0IGlucHV0W10gPSB7CisgICAgJ2InLCAnZCcsICdlJywgJ2cnLCAwCisgIH07CisgIHN0YXRpYyBpbnQgY29uc3QgKmlucHV0cCA9IGlucHV0OworICByZXR1cm4gKmlucHV0cCsrOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCisjIEluIHNvbWUgdmVyc2lvbnMgb2YgQXV0b2NvbmYsIEFUX0NIRUNLIGludm9rZXMgQVNfRVNDQVBFIGJlZm9yZQorIyBleHBhbmRpbmcgbWFjcm9zLCBzbyBpdCBjb3JydXB0cyBzb21lIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUKKyMgbWFjcm9zLiAgVG8gYXZvaWQgdGhpcywgZXhwYW5kIG5vdyBhbmQgcGFzcyBpdCB0aGUgcmVzdWx0IHdpdGggcHJvcGVyCisjIHN0cmluZyBxdW90YXRpb24uICBBc3N1bWUgYXJncyA3IHRocm91Z2ggMTIgZXhwYW5kIHRvIHByb3Blcmx5IHF1b3RlZAorIyBzdHJpbmdzLgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxMjIwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxMjIwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVkdWNlLmF0OjEyMjAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMDogYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6IGNvbmZsaWN0czogMSByZWR1Y2UvcmVkdWNlCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjA6IHNlZCAtbiAnL15TdGF0ZSAwXCQvLFwkcCcgaW5wdXQub3V0cHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJzZWQgLW4gJy9eU3RhdGUgMCQvLCRwJyBpbnB1dC5vdXRwdXQiICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgLW4gJy9eU3RhdGUgMCQvLCRwJyBpbnB1dC5vdXRwdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJTdGF0ZSAwCisKKyAgICAwIFwkYWNjZXB0OiAuIFMgXCRlbmQKKyAgICAxIFM6IC4gJ2EnIEEgJ2YnCisgICAgMiAgfCAuICdhJyBCCisgICAgMyAgfCAuICdiJyBBICdmJworICAgIDQgIHwgLiAnYicgQiAnZycKKyAgICA1ICB8IC4gJ2InICdkJworICAgIDYgIHwgLiAnYycgJ2MnIEEgJ2cnCisgICAgNyAgfCAuICdjJyAnYycgQgorCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEKKyAgICAnYicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMgorICAgICdjJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAzCisKKyAgICBTICBnbyB0byBzdGF0ZSA0CisKKworU3RhdGUgMQorCisgICAgMSBTOiAnYScgLiBBICdmJworICAgIDIgIHwgJ2EnIC4gQgorICAgIDggQTogLiAnZCcgJ2UnCisgICAgOSBCOiAuICdkJyAnZScKKworICAgICdkJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1CisKKyAgICBBICBnbyB0byBzdGF0ZSA2CisgICAgQiAgZ28gdG8gc3RhdGUgNworCisKK1N0YXRlIDIKKworICAgIDMgUzogJ2InIC4gQSAnZicKKyAgICA0ICB8ICdiJyAuIEIgJ2cnCisgICAgNSAgfCAnYicgLiAnZCcKKyAgICA4IEE6IC4gJ2QnICdlJworICAgIDkgQjogLiAnZCcgJ2UnCisKKyAgICAnZCcgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOAorCisgICAgQSAgZ28gdG8gc3RhdGUgOQorICAgIEIgIGdvIHRvIHN0YXRlIDEwCisKKworU3RhdGUgMworCisgICAgNiBTOiAnYycgLiAnYycgQSAnZycKKyAgICA3ICB8ICdjJyAuICdjJyBCCisKKyAgICAnYycgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTEKKworCitTdGF0ZSA0CisKKyAgICAwIFwkYWNjZXB0OiBTIC4gXCRlbmQKKworICAgIFwkZW5kICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEyCisKKworU3RhdGUgNQorCisgICAgOCBBOiAnZCcgLiAnZScKKyAgICA5IEI6ICdkJyAuICdlJworCisgICAgJ2UnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEzCisKKworU3RhdGUgNgorCisgICAgMSBTOiAnYScgQSAuICdmJworCisgICAgJ2YnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE0CisKKworU3RhdGUgNworCisgICAgMiBTOiAnYScgQiAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDIgKFMpCisKKworU3RhdGUgOAorCisgICAgNSBTOiAnYicgJ2QnIC4gIFtcJGVuZF0KKyAgICA4IEE6ICdkJyAuICdlJworICAgIDkgQjogJ2QnIC4gJ2UnCisKKyAgICAnZScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTMKKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgNSAoUykKKworCitTdGF0ZSA5CisKKyAgICAzIFM6ICdiJyBBIC4gJ2YnCisKKyAgICAnZicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTUKKworCitTdGF0ZSAxMAorCisgICAgNCBTOiAnYicgQiAuICdnJworCisgICAgJ2cnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE2CisKKworU3RhdGUgMTEKKworICAgIDYgUzogJ2MnICdjJyAuIEEgJ2cnCisgICAgNyAgfCAnYycgJ2MnIC4gQgorICAgIDggQTogLiAnZCcgJ2UnCisgICAgOSBCOiAuICdkJyAnZScKKworICAgICdkJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1CisKKyAgICBBICBnbyB0byBzdGF0ZSAxNworICAgIEIgIGdvIHRvIHN0YXRlIDE4CisKKworU3RhdGUgMTIKKworICAgIDAgXCRhY2NlcHQ6IFMgXCRlbmQgLgorCisgICAgXCRkZWZhdWx0ICBhY2NlcHQKKworCitTdGF0ZSAxMworCisgICAgOCBBOiAnZCcgJ2UnIC4gIFsnZicsICdnJ10KKyAgICA5IEI6ICdkJyAnZScgLiAgW1wkZW5kLCAnZyddCisKKyAgICBcJGVuZCAgICAgIHJlZHVjZSB1c2luZyBydWxlIDkgKEIpCisgICAgJ2cnICAgICAgIHJlZHVjZSB1c2luZyBydWxlIDggKEEpCisgICAgJ2cnICAgICAgIFtyZWR1Y2UgdXNpbmcgcnVsZSA5IChCKV0KKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDggKEEpCisKKworU3RhdGUgMTQKKworICAgIDEgUzogJ2EnIEEgJ2YnIC4KKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMSAoUykKKworCitTdGF0ZSAxNQorCisgICAgMyBTOiAnYicgQSAnZicgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAzIChTKQorCisKK1N0YXRlIDE2CisKKyAgICA0IFM6ICdiJyBCICdnJyAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDQgKFMpCisKKworU3RhdGUgMTcKKworICAgIDYgUzogJ2MnICdjJyBBIC4gJ2cnCisKKyAgICAnZycgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTkKKworCitTdGF0ZSAxOAorCisgICAgNyBTOiAnYycgJ2MnIEIgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA3IChTKQorCisKK1N0YXRlIDE5CisKKyAgICA2IFM6ICdjJyAnYycgQSAnZycgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA2IChTKQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisjIENhbm9uaWNhbCBMUiBnZW5lcmF0ZXMgdmVyeSBsYXJnZSB0YWJsZXMsIHJlc3VsdGluZyBpbiB2ZXJ5IGxvbmcKKyMgZmlsZXMgd2l0aCAjbGluZSBkaXJlY3RpdmVzIHRoYXQgbWF5IG92ZXJmbG93IHdoYXQgdGhlIHN0YW5kYXJkcworIyAoQzkwIGFuZCBDKys5OCkgZ3VhcmFudGVlOiAzMjc2Ny4gIEluIHRoYXQgY2FzZSwgR0NDJ3MgLXBlZGFudGljCisjIHdpbGwgaXNzdWUgYW4gZXJyb3IuCisjCisjIFRoZXJlIGlzIG5vICIiIGFyb3VuZCBgd2NgIHNpbmNlIHNvbWUgaW5kZW50IHRoZSByZXN1bHQuCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMDogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgInJlZHVjZS5hdDoxMjIwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMDogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMDogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvcgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzEyMQorI0FUX1NUQVJUXzEyMgorYXRfZm5fZ3JvdXBfYmFubmVyIDEyMiAncmVkdWNlLmF0OjEyMjAnIFwKKyAgIiVkZWZpbmUgbHIudHlwZSBpZWxyOiBTcGxpdCBEdXJpbmcgQWRkZWQgTG9va2FoZWFkIFByb3BhZ2F0aW9uIiAiIiA2CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTIyLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVjb2RlIHsKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKK30KKworJWRlZmluZSBsci50eXBlIGllbHIKKyVkZWZpbmUgbHIua2VlcC11bnJlYWNoYWJsZS1zdGF0ZXMKKworJSUKKworCisvKiBUaGUgcGFydGlhbCBzdGF0ZSBjaGFydCBkaWFncmFtIGJlbG93IGlzIGZvciBMQUxSKDEpLiAgU3RhdGUgMCBpcyB0aGUgc3RhcnQKKyAgIHN0YXRlLiAgU3RhdGVzIGFyZSBpdGVyYXRlZCBmb3Igc3VjY2Vzc29yIGNvbnN0cnVjdGlvbiBpbiBudW1lcmljYWwgb3JkZXIuCisgICBUcmFuc2l0aW9ucyBhcmUgZG93bndhcmRzLgorCisgICBTdGF0ZSAxMyBoYXMgYSBSL1IgY29uZmxpY3QgdGhhdCBjYW5ub3QgYmUgcHJlZGljdGVkIGJ5IEJpc29uJ3MgTFIoMSkKKyAgIGFsZ29yaXRobSB1c2luZyBhbm5vdGF0aW9ucyBhbG9uZS4gIFRoYXQgaXMsIHdoZW4gc3RhdGUgMTEncyBzdWNjZXNzb3Igb24KKyAgICdkJyBpcyBtZXJnZWQgd2l0aCBzdGF0ZSA1ICh3aGljaCBpcyBvcmlnaW5hbGx5IGp1c3Qgc3RhdGUgMSdzIHN1Y2Nlc3NvciBvbgorICAgJ2QnKSwgc3RhdGUgNSdzIHN1Y2Nlc3NvciBvbiAnZScgbXVzdCB0aGVuIGJlIGNoYW5nZWQgYmVjYXVzZSB0aGUgcmVzdWx0aW5nCisgICBsb29rYWhlYWRzIHRoYXQgcHJvcGFnYXRlIHRvIGl0IG5vdyBtYWtlIGl0IGluY29tcGF0aWJsZSB3aXRoIHN0YXRlIDgncworICAgc3VjY2Vzc29yIG9uICdlJy4gIEluIG90aGVyIHdvcmRzLCBzdGF0ZSAxMyBtdXN0IGJlIHNwbGl0IHRvIGF2b2lkIHRoZQorICAgY29uZmxpY3QuCisKKyAgICAgICAgICAwCisgICAgICAgIC8gfCBcCisgICAgIGEgLyBjfCAgXCBiCisgICAgICAxICAgMyAgIDIKKyAgICAgIHwgICB8ICAgfAorICAgICBkfCAgIHxjICB8IGQKKyAgICAgIHwgIDExICAgfAorICAgICAgfCAgIHwgICB8CisgICAgICAgXCAvZCAgIHwKKyAgICAgICAgNSAgICAgOAorICAgICAgICAgXCAgICB8CisgICAgICAgIGUgXCAgLyBlCisgICAgICAgICAgIDEzCisgICAgICAgICAgIFIvUgorCisgICBUaGlzIGdyYW1tYXIgaXMgZGVzaWduZWQgY2FyZWZ1bGx5IHRvIG1ha2Ugc3VyZSB0aGF0LCBkZXNwaXRlIEJpc29uJ3MgTFIoMSkKKyAgIGFsZ29yaXRobSdzIGJyZWFkLWZpcnN0IGl0ZXJhdGlvbiBvZiB0cmFuc2l0aW9ucyB0byByZWNvbnN0cnVjdCBzdGF0ZXMsCisgICBzdGF0ZSAxMSdzIHN1Y2Nlc3NvcnMgYXJlIGNvbnN0cnVjdGVkIGFmdGVyIHN0YXRlIDUncyBhbmQgc3RhdGUgOCdzLgorICAgT3RoZXJ3aXNlIChmb3IgZXhhbXBsZSwgaWYgeW91IHJlbW92ZSB0aGUgZmlyc3QgJ2MnIGluIGVhY2ggb2YgcnVsZXMgNiBhbmQKKyAgIDcpLCBzdGF0ZSA1J3Mgc3VjY2Vzc29yIG9uICdlJyB3b3VsZCBuZXZlciBiZSBtZXJnZWQgd2l0aCBzdGF0ZSA4J3MsIHNvIHRoZQorICAgc3BsaXQgb2YgdGhlIHJlc3VsdGluZyBzdGF0ZSAxMyB3b3VsZCBuZXZlciBuZWVkIHRvIGJlIHBlcmZvcm1lZC4gICovCitTOiAnYScgQSAnZicKKyB8ICdhJyBCCisgfCAnYicgQSAnZicKKyB8ICdiJyBCICdnJworIHwgJ2InICdkJworIHwgJ2MnICdjJyBBICdnJworIHwgJ2MnICdjJyBCCisgOworQTogJ2QnICdlJyA7CitCOiAnZCcgJ2UnIDsKKworCislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KK3N0YXRpYyBpbnQKK3l5bGV4ICh2b2lkKQoreworICBzdGF0aWMgaW50IGNvbnN0IGlucHV0W10gPSB7CisgICAgJ2InLCAnZCcsICdlJywgJ2cnLCAwCisgIH07CisgIHN0YXRpYyBpbnQgY29uc3QgKmlucHV0cCA9IGlucHV0OworICByZXR1cm4gKmlucHV0cCsrOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCisjIEluIHNvbWUgdmVyc2lvbnMgb2YgQXV0b2NvbmYsIEFUX0NIRUNLIGludm9rZXMgQVNfRVNDQVBFIGJlZm9yZQorIyBleHBhbmRpbmcgbWFjcm9zLCBzbyBpdCBjb3JydXB0cyBzb21lIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUKKyMgbWFjcm9zLiAgVG8gYXZvaWQgdGhpcywgZXhwYW5kIG5vdyBhbmQgcGFzcyBpdCB0aGUgcmVzdWx0IHdpdGggcHJvcGVyCisjIHN0cmluZyBxdW90YXRpb24uICBBc3N1bWUgYXJncyA3IHRocm91Z2ggMTIgZXhwYW5kIHRvIHByb3Blcmx5IHF1b3RlZAorIyBzdHJpbmdzLgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxMjIwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxMjIwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVkdWNlLmF0OjEyMjAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMDogYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjA6IHNlZCAtbiAnL15TdGF0ZSAwXCQvLFwkcCcgaW5wdXQub3V0cHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJzZWQgLW4gJy9eU3RhdGUgMCQvLCRwJyBpbnB1dC5vdXRwdXQiICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgLW4gJy9eU3RhdGUgMCQvLCRwJyBpbnB1dC5vdXRwdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJTdGF0ZSAwCisKKyAgICAwIFwkYWNjZXB0OiAuIFMgXCRlbmQKKyAgICAxIFM6IC4gJ2EnIEEgJ2YnCisgICAgMiAgfCAuICdhJyBCCisgICAgMyAgfCAuICdiJyBBICdmJworICAgIDQgIHwgLiAnYicgQiAnZycKKyAgICA1ICB8IC4gJ2InICdkJworICAgIDYgIHwgLiAnYycgJ2MnIEEgJ2cnCisgICAgNyAgfCAuICdjJyAnYycgQgorCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEKKyAgICAnYicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMgorICAgICdjJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAzCisKKyAgICBTICBnbyB0byBzdGF0ZSA0CisKKworU3RhdGUgMQorCisgICAgMSBTOiAnYScgLiBBICdmJworICAgIDIgIHwgJ2EnIC4gQgorICAgIDggQTogLiAnZCcgJ2UnCisgICAgOSBCOiAuICdkJyAnZScKKworICAgICdkJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1CisKKyAgICBBICBnbyB0byBzdGF0ZSA2CisgICAgQiAgZ28gdG8gc3RhdGUgNworCisKK1N0YXRlIDIKKworICAgIDMgUzogJ2InIC4gQSAnZicKKyAgICA0ICB8ICdiJyAuIEIgJ2cnCisgICAgNSAgfCAnYicgLiAnZCcKKyAgICA4IEE6IC4gJ2QnICdlJworICAgIDkgQjogLiAnZCcgJ2UnCisKKyAgICAnZCcgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOAorCisgICAgQSAgZ28gdG8gc3RhdGUgOQorICAgIEIgIGdvIHRvIHN0YXRlIDEwCisKKworU3RhdGUgMworCisgICAgNiBTOiAnYycgLiAnYycgQSAnZycKKyAgICA3ICB8ICdjJyAuICdjJyBCCisKKyAgICAnYycgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTEKKworCitTdGF0ZSA0CisKKyAgICAwIFwkYWNjZXB0OiBTIC4gXCRlbmQKKworICAgIFwkZW5kICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEyCisKKworU3RhdGUgNQorCisgICAgOCBBOiAnZCcgLiAnZScKKyAgICA5IEI6ICdkJyAuICdlJworCisgICAgJ2UnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIwCisKKworU3RhdGUgNgorCisgICAgMSBTOiAnYScgQSAuICdmJworCisgICAgJ2YnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE0CisKKworU3RhdGUgNworCisgICAgMiBTOiAnYScgQiAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDIgKFMpCisKKworU3RhdGUgOAorCisgICAgNSBTOiAnYicgJ2QnIC4gIFtcJGVuZF0KKyAgICA4IEE6ICdkJyAuICdlJworICAgIDkgQjogJ2QnIC4gJ2UnCisKKyAgICAnZScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTMKKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgNSAoUykKKworCitTdGF0ZSA5CisKKyAgICAzIFM6ICdiJyBBIC4gJ2YnCisKKyAgICAnZicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTUKKworCitTdGF0ZSAxMAorCisgICAgNCBTOiAnYicgQiAuICdnJworCisgICAgJ2cnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE2CisKKworU3RhdGUgMTEKKworICAgIDYgUzogJ2MnICdjJyAuIEEgJ2cnCisgICAgNyAgfCAnYycgJ2MnIC4gQgorICAgIDggQTogLiAnZCcgJ2UnCisgICAgOSBCOiAuICdkJyAnZScKKworICAgICdkJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1CisKKyAgICBBICBnbyB0byBzdGF0ZSAxNworICAgIEIgIGdvIHRvIHN0YXRlIDE4CisKKworU3RhdGUgMTIKKworICAgIDAgXCRhY2NlcHQ6IFMgXCRlbmQgLgorCisgICAgXCRkZWZhdWx0ICBhY2NlcHQKKworCitTdGF0ZSAxMworCisgICAgOCBBOiAnZCcgJ2UnIC4gIFsnZiddCisgICAgOSBCOiAnZCcgJ2UnIC4gIFsnZyddCisKKyAgICAnZycgICAgICAgcmVkdWNlIHVzaW5nIHJ1bGUgOSAoQikKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDggKEEpCisKKworU3RhdGUgMTQKKworICAgIDEgUzogJ2EnIEEgJ2YnIC4KKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMSAoUykKKworCitTdGF0ZSAxNQorCisgICAgMyBTOiAnYicgQSAnZicgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAzIChTKQorCisKK1N0YXRlIDE2CisKKyAgICA0IFM6ICdiJyBCICdnJyAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDQgKFMpCisKKworU3RhdGUgMTcKKworICAgIDYgUzogJ2MnICdjJyBBIC4gJ2cnCisKKyAgICAnZycgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTkKKworCitTdGF0ZSAxOAorCisgICAgNyBTOiAnYycgJ2MnIEIgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA3IChTKQorCisKK1N0YXRlIDE5CisKKyAgICA2IFM6ICdjJyAnYycgQSAnZycgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA2IChTKQorCisKK1N0YXRlIDIwCisKKyAgICA4IEE6ICdkJyAnZScgLiAgWydmJywgJ2cnXQorICAgIDkgQjogJ2QnICdlJyAuICBbXCRlbmRdCisKKyAgICBcJGVuZCAgICAgIHJlZHVjZSB1c2luZyBydWxlIDkgKEIpCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA4IChBKQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisjIENhbm9uaWNhbCBMUiBnZW5lcmF0ZXMgdmVyeSBsYXJnZSB0YWJsZXMsIHJlc3VsdGluZyBpbiB2ZXJ5IGxvbmcKKyMgZmlsZXMgd2l0aCAjbGluZSBkaXJlY3RpdmVzIHRoYXQgbWF5IG92ZXJmbG93IHdoYXQgdGhlIHN0YW5kYXJkcworIyAoQzkwIGFuZCBDKys5OCkgZ3VhcmFudGVlOiAzMjc2Ny4gIEluIHRoYXQgY2FzZSwgR0NDJ3MgLXBlZGFudGljCisjIHdpbGwgaXNzdWUgYW4gZXJyb3IuCisjCisjIFRoZXJlIGlzIG5vICIiIGFyb3VuZCBgd2NgIHNpbmNlIHNvbWUgaW5kZW50IHRoZSByZXN1bHQuCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMDogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgInJlZHVjZS5hdDoxMjIwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMDogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMDogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTIyCisjQVRfU1RBUlRfMTIzCithdF9mbl9ncm91cF9iYW5uZXIgMTIzICdyZWR1Y2UuYXQ6MTIyMCcgXAorICAiJWRlZmluZSBsci50eXBlIGNhbm9uaWNhbC1scjogU3BsaXQgRHVyaW5nIEFkZGVkIExvb2thaGVhZCBQcm9wYWdhdGlvbiIgIiIgNgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjEyMy4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislY29kZSB7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgc3RhdGljIGludCB5eWxleCAodm9pZCk7Cit9CisKKyVkZWZpbmUgbHIudHlwZSBjYW5vbmljYWwtbHIKKyVkZWZpbmUgbHIua2VlcC11bnJlYWNoYWJsZS1zdGF0ZXMKKworJSUKKworCisvKiBUaGUgcGFydGlhbCBzdGF0ZSBjaGFydCBkaWFncmFtIGJlbG93IGlzIGZvciBMQUxSKDEpLiAgU3RhdGUgMCBpcyB0aGUgc3RhcnQKKyAgIHN0YXRlLiAgU3RhdGVzIGFyZSBpdGVyYXRlZCBmb3Igc3VjY2Vzc29yIGNvbnN0cnVjdGlvbiBpbiBudW1lcmljYWwgb3JkZXIuCisgICBUcmFuc2l0aW9ucyBhcmUgZG93bndhcmRzLgorCisgICBTdGF0ZSAxMyBoYXMgYSBSL1IgY29uZmxpY3QgdGhhdCBjYW5ub3QgYmUgcHJlZGljdGVkIGJ5IEJpc29uJ3MgTFIoMSkKKyAgIGFsZ29yaXRobSB1c2luZyBhbm5vdGF0aW9ucyBhbG9uZS4gIFRoYXQgaXMsIHdoZW4gc3RhdGUgMTEncyBzdWNjZXNzb3Igb24KKyAgICdkJyBpcyBtZXJnZWQgd2l0aCBzdGF0ZSA1ICh3aGljaCBpcyBvcmlnaW5hbGx5IGp1c3Qgc3RhdGUgMSdzIHN1Y2Nlc3NvciBvbgorICAgJ2QnKSwgc3RhdGUgNSdzIHN1Y2Nlc3NvciBvbiAnZScgbXVzdCB0aGVuIGJlIGNoYW5nZWQgYmVjYXVzZSB0aGUgcmVzdWx0aW5nCisgICBsb29rYWhlYWRzIHRoYXQgcHJvcGFnYXRlIHRvIGl0IG5vdyBtYWtlIGl0IGluY29tcGF0aWJsZSB3aXRoIHN0YXRlIDgncworICAgc3VjY2Vzc29yIG9uICdlJy4gIEluIG90aGVyIHdvcmRzLCBzdGF0ZSAxMyBtdXN0IGJlIHNwbGl0IHRvIGF2b2lkIHRoZQorICAgY29uZmxpY3QuCisKKyAgICAgICAgICAwCisgICAgICAgIC8gfCBcCisgICAgIGEgLyBjfCAgXCBiCisgICAgICAxICAgMyAgIDIKKyAgICAgIHwgICB8ICAgfAorICAgICBkfCAgIHxjICB8IGQKKyAgICAgIHwgIDExICAgfAorICAgICAgfCAgIHwgICB8CisgICAgICAgXCAvZCAgIHwKKyAgICAgICAgNSAgICAgOAorICAgICAgICAgXCAgICB8CisgICAgICAgIGUgXCAgLyBlCisgICAgICAgICAgIDEzCisgICAgICAgICAgIFIvUgorCisgICBUaGlzIGdyYW1tYXIgaXMgZGVzaWduZWQgY2FyZWZ1bGx5IHRvIG1ha2Ugc3VyZSB0aGF0LCBkZXNwaXRlIEJpc29uJ3MgTFIoMSkKKyAgIGFsZ29yaXRobSdzIGJyZWFkLWZpcnN0IGl0ZXJhdGlvbiBvZiB0cmFuc2l0aW9ucyB0byByZWNvbnN0cnVjdCBzdGF0ZXMsCisgICBzdGF0ZSAxMSdzIHN1Y2Nlc3NvcnMgYXJlIGNvbnN0cnVjdGVkIGFmdGVyIHN0YXRlIDUncyBhbmQgc3RhdGUgOCdzLgorICAgT3RoZXJ3aXNlIChmb3IgZXhhbXBsZSwgaWYgeW91IHJlbW92ZSB0aGUgZmlyc3QgJ2MnIGluIGVhY2ggb2YgcnVsZXMgNiBhbmQKKyAgIDcpLCBzdGF0ZSA1J3Mgc3VjY2Vzc29yIG9uICdlJyB3b3VsZCBuZXZlciBiZSBtZXJnZWQgd2l0aCBzdGF0ZSA4J3MsIHNvIHRoZQorICAgc3BsaXQgb2YgdGhlIHJlc3VsdGluZyBzdGF0ZSAxMyB3b3VsZCBuZXZlciBuZWVkIHRvIGJlIHBlcmZvcm1lZC4gICovCitTOiAnYScgQSAnZicKKyB8ICdhJyBCCisgfCAnYicgQSAnZicKKyB8ICdiJyBCICdnJworIHwgJ2InICdkJworIHwgJ2MnICdjJyBBICdnJworIHwgJ2MnICdjJyBCCisgOworQTogJ2QnICdlJyA7CitCOiAnZCcgJ2UnIDsKKworCislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KK3N0YXRpYyBpbnQKK3l5bGV4ICh2b2lkKQoreworICBzdGF0aWMgaW50IGNvbnN0IGlucHV0W10gPSB7CisgICAgJ2InLCAnZCcsICdlJywgJ2cnLCAwCisgIH07CisgIHN0YXRpYyBpbnQgY29uc3QgKmlucHV0cCA9IGlucHV0OworICByZXR1cm4gKmlucHV0cCsrOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCisjIEluIHNvbWUgdmVyc2lvbnMgb2YgQXV0b2NvbmYsIEFUX0NIRUNLIGludm9rZXMgQVNfRVNDQVBFIGJlZm9yZQorIyBleHBhbmRpbmcgbWFjcm9zLCBzbyBpdCBjb3JydXB0cyBzb21lIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUKKyMgbWFjcm9zLiAgVG8gYXZvaWQgdGhpcywgZXhwYW5kIG5vdyBhbmQgcGFzcyBpdCB0aGUgcmVzdWx0IHdpdGggcHJvcGVyCisjIHN0cmluZyBxdW90YXRpb24uICBBc3N1bWUgYXJncyA3IHRocm91Z2ggMTIgZXhwYW5kIHRvIHByb3Blcmx5IHF1b3RlZAorIyBzdHJpbmdzLgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxMjIwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxMjIwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVkdWNlLmF0OjEyMjAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMDogYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjA6IHNlZCAtbiAnL15TdGF0ZSAwXCQvLFwkcCcgaW5wdXQub3V0cHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJzZWQgLW4gJy9eU3RhdGUgMCQvLCRwJyBpbnB1dC5vdXRwdXQiICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgLW4gJy9eU3RhdGUgMCQvLCRwJyBpbnB1dC5vdXRwdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJTdGF0ZSAwCisKKyAgICAwIFwkYWNjZXB0OiAuIFMgXCRlbmQKKyAgICAxIFM6IC4gJ2EnIEEgJ2YnCisgICAgMiAgfCAuICdhJyBCCisgICAgMyAgfCAuICdiJyBBICdmJworICAgIDQgIHwgLiAnYicgQiAnZycKKyAgICA1ICB8IC4gJ2InICdkJworICAgIDYgIHwgLiAnYycgJ2MnIEEgJ2cnCisgICAgNyAgfCAuICdjJyAnYycgQgorCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEKKyAgICAnYicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMgorICAgICdjJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAzCisKKyAgICBTICBnbyB0byBzdGF0ZSA0CisKKworU3RhdGUgMQorCisgICAgMSBTOiAnYScgLiBBICdmJworICAgIDIgIHwgJ2EnIC4gQgorICAgIDggQTogLiAnZCcgJ2UnCisgICAgOSBCOiAuICdkJyAnZScKKworICAgICdkJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1CisKKyAgICBBICBnbyB0byBzdGF0ZSA2CisgICAgQiAgZ28gdG8gc3RhdGUgNworCisKK1N0YXRlIDIKKworICAgIDMgUzogJ2InIC4gQSAnZicKKyAgICA0ICB8ICdiJyAuIEIgJ2cnCisgICAgNSAgfCAnYicgLiAnZCcKKyAgICA4IEE6IC4gJ2QnICdlJworICAgIDkgQjogLiAnZCcgJ2UnCisKKyAgICAnZCcgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOAorCisgICAgQSAgZ28gdG8gc3RhdGUgOQorICAgIEIgIGdvIHRvIHN0YXRlIDEwCisKKworU3RhdGUgMworCisgICAgNiBTOiAnYycgLiAnYycgQSAnZycKKyAgICA3ICB8ICdjJyAuICdjJyBCCisKKyAgICAnYycgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTEKKworCitTdGF0ZSA0CisKKyAgICAwIFwkYWNjZXB0OiBTIC4gXCRlbmQKKworICAgIFwkZW5kICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEyCisKKworU3RhdGUgNQorCisgICAgOCBBOiAnZCcgLiAnZScKKyAgICA5IEI6ICdkJyAuICdlJworCisgICAgJ2UnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEzCisKKworU3RhdGUgNgorCisgICAgMSBTOiAnYScgQSAuICdmJworCisgICAgJ2YnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE0CisKKworU3RhdGUgNworCisgICAgMiBTOiAnYScgQiAuICBbXCRlbmRdCisKKyAgICBcJGVuZCAgcmVkdWNlIHVzaW5nIHJ1bGUgMiAoUykKKworCitTdGF0ZSA4CisKKyAgICA1IFM6ICdiJyAnZCcgLiAgW1wkZW5kXQorICAgIDggQTogJ2QnIC4gJ2UnCisgICAgOSBCOiAnZCcgLiAnZScKKworICAgICdlJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyMAorCisgICAgXCRlbmQgIHJlZHVjZSB1c2luZyBydWxlIDUgKFMpCisKKworU3RhdGUgOQorCisgICAgMyBTOiAnYicgQSAuICdmJworCisgICAgJ2YnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE1CisKKworU3RhdGUgMTAKKworICAgIDQgUzogJ2InIEIgLiAnZycKKworICAgICdnJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxNgorCisKK1N0YXRlIDExCisKKyAgICA2IFM6ICdjJyAnYycgLiBBICdnJworICAgIDcgIHwgJ2MnICdjJyAuIEIKKyAgICA4IEE6IC4gJ2QnICdlJworICAgIDkgQjogLiAnZCcgJ2UnCisKKyAgICAnZCcgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMjEKKworICAgIEEgIGdvIHRvIHN0YXRlIDE3CisgICAgQiAgZ28gdG8gc3RhdGUgMTgKKworCitTdGF0ZSAxMgorCisgICAgMCBcJGFjY2VwdDogUyBcJGVuZCAuCisKKyAgICBcJGRlZmF1bHQgIGFjY2VwdAorCisKK1N0YXRlIDEzCisKKyAgICA4IEE6ICdkJyAnZScgLiAgWydmJ10KKyAgICA5IEI6ICdkJyAnZScgLiAgW1wkZW5kXQorCisgICAgXCRlbmQgIHJlZHVjZSB1c2luZyBydWxlIDkgKEIpCisgICAgJ2YnICAgcmVkdWNlIHVzaW5nIHJ1bGUgOCAoQSkKKworCitTdGF0ZSAxNAorCisgICAgMSBTOiAnYScgQSAnZicgLiAgW1wkZW5kXQorCisgICAgXCRlbmQgIHJlZHVjZSB1c2luZyBydWxlIDEgKFMpCisKKworU3RhdGUgMTUKKworICAgIDMgUzogJ2InIEEgJ2YnIC4gIFtcJGVuZF0KKworICAgIFwkZW5kICByZWR1Y2UgdXNpbmcgcnVsZSAzIChTKQorCisKK1N0YXRlIDE2CisKKyAgICA0IFM6ICdiJyBCICdnJyAuICBbXCRlbmRdCisKKyAgICBcJGVuZCAgcmVkdWNlIHVzaW5nIHJ1bGUgNCAoUykKKworCitTdGF0ZSAxNworCisgICAgNiBTOiAnYycgJ2MnIEEgLiAnZycKKworICAgICdnJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxOQorCisKK1N0YXRlIDE4CisKKyAgICA3IFM6ICdjJyAnYycgQiAuICBbXCRlbmRdCisKKyAgICBcJGVuZCAgcmVkdWNlIHVzaW5nIHJ1bGUgNyAoUykKKworCitTdGF0ZSAxOQorCisgICAgNiBTOiAnYycgJ2MnIEEgJ2cnIC4gIFtcJGVuZF0KKworICAgIFwkZW5kICByZWR1Y2UgdXNpbmcgcnVsZSA2IChTKQorCisKK1N0YXRlIDIwCisKKyAgICA4IEE6ICdkJyAnZScgLiAgWydmJ10KKyAgICA5IEI6ICdkJyAnZScgLiAgWydnJ10KKworICAgICdmJyAgcmVkdWNlIHVzaW5nIHJ1bGUgOCAoQSkKKyAgICAnZycgIHJlZHVjZSB1c2luZyBydWxlIDkgKEIpCisKKworU3RhdGUgMjEKKworICAgIDggQTogJ2QnIC4gJ2UnCisgICAgOSBCOiAnZCcgLiAnZScKKworICAgICdlJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyMgorCisKK1N0YXRlIDIyCisKKyAgICA4IEE6ICdkJyAnZScgLiAgWydnJ10KKyAgICA5IEI6ICdkJyAnZScgLiAgW1wkZW5kXQorCisgICAgXCRlbmQgIHJlZHVjZSB1c2luZyBydWxlIDkgKEIpCisgICAgJ2cnICAgcmVkdWNlIHVzaW5nIHJ1bGUgOCAoQSkKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxMjIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworIyBDYW5vbmljYWwgTFIgZ2VuZXJhdGVzIHZlcnkgbGFyZ2UgdGFibGVzLCByZXN1bHRpbmcgaW4gdmVyeSBsb25nCisjIGZpbGVzIHdpdGggI2xpbmUgZGlyZWN0aXZlcyB0aGF0IG1heSBvdmVyZmxvdyB3aGF0IHRoZSBzdGFuZGFyZHMKKyMgKEM5MCBhbmQgQysrOTgpIGd1YXJhbnRlZTogMzI3NjcuICBJbiB0aGF0IGNhc2UsIEdDQydzIC1wZWRhbnRpYworIyB3aWxsIGlzc3VlIGFuIGVycm9yLgorIworIyBUaGVyZSBpcyBubyAiIiBhcm91bmQgYHdjYCBzaW5jZSBzb21lIGluZGVudCB0aGUgcmVzdWx0LgoraWYgdGVzdCAzMjc2NyAtbHQgYHdjIC1sIDwgaW5wdXQuY2A7IHRoZW4KKyAgQ0ZMQUdTPWBlY2hvICIgJENGTEFHUyAiIHwgc2VkIC1lICdzLyAtcGVkYW50aWMgLy8nYAorICBDWFhGTEFHUz1gZWNobyAiICRDWFhGTEFHUyAiIHwgc2VkIC1lICdzLyAtcGVkYW50aWMgLy8nYAorZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMDogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgInJlZHVjZS5hdDoxMjIwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMDogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjEyMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMDogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWR1Y2UuYXQ6MTIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTIyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTIzCisjQVRfU1RBUlRfMTI0CithdF9mbl9ncm91cF9iYW5uZXIgMTI0ICdyZWR1Y2UuYXQ6MTU1MCcgXAorICAibm8gJWRlZmluZSBsci5kZWZhdWx0LXJlZHVjdGlvbnMiICIgICAgICAgICAgICAgICAiIDYKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxMjQuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWNvZGUgeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CisgIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOworfQorCisKKworJSUKKworCisvKiBUaGUgc3RhcnQgc3RhdGUgaXMgY29uc2lzdGVudCBhbmQgaGFzIGEgc2hpZnQgb24gJ2EnIGFuZCBubyByZWR1Y3Rpb25zLgorICAgQWZ0ZXIgcHVzaGluZyB0aGUgYiBiZWxvdywgZW50ZXIgYW4gaW5jb25zaXN0ZW50IHN0YXRlIHRoYXQgaGFzIGEgc2hpZnQgYW5kCisgICBvbmUgcmVkdWN0aW9uIHdpdGggb25lIGxvb2thaGVhZC4gICovCitzdGFydDoKKyAgICBhIGIKKyAgfCBhIGIgJ2EnCisgIHwgYSBjICdiJworICA7CisKKy8qIEFmdGVyIHNoaWZ0aW5nIHRoaXMgJ2EnLCBlbnRlciBhIGNvbnNpc3RlbnQgc3RhdGUgdGhhdCBoYXMgbm8gc2hpZnQgYW5kIDEKKyAgIHJlZHVjdGlvbiB3aXRoIG11bHRpcGxlIGxvb2thaGVhZHMuICAqLworYTogJ2EnIDsKKworLyogQWZ0ZXIgdGhlIHByZXZpb3VzIHJlZHVjdGlvbiwgZW50ZXIgYW4gaW5jb25zaXN0ZW50IHN0YXRlIHRoYXQgaGFzIG5vIHNoaWZ0CisgICBhbmQgbXVsdGlwbGUgcmVkdWN0aW9ucy4gIFRoZSBmaXJzdCByZWR1Y3Rpb24gaGFzIG1vcmUgbG9va2FoZWFkcyB0aGFuIHRoZQorICAgc2Vjb25kLCBzbyB0aGUgZmlyc3Qgc2hvdWxkIGFsd2F5cyBiZSBwcmVmZXJyZWQgYXMgdGhlIGRlZmF1bHQgcmVkdWN0aW9uIGlmCisgICBlbmFibGVkLiAgVGhlIHNlY29uZCByZWR1Y3Rpb24gaGFzIG9uZSBsb29rYWhlYWQuICAqLworYjogOworYzogOworCisKKyUlCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorc3RhdGljIGludAoreXlsZXggKHZvaWQpCit7CisgIHN0YXRpYyBpbnQgY29uc3QgaW5wdXRbXSA9IHsKKyAgICAnYScsICdhJywgMAorICB9OworICBzdGF0aWMgaW50IGNvbnN0ICppbnB1dHAgPSBpbnB1dDsKKyAgcmV0dXJuICppbnB1dHArKzsKK30KKworaW50CittYWluICh2b2lkKQoreworICByZXR1cm4geXlwYXJzZSAoKTsKK30KK19BVEVPRgorCisKKworIyBJbiBzb21lIHZlcnNpb25zIG9mIEF1dG9jb25mLCBBVF9DSEVDSyBpbnZva2VzIEFTX0VTQ0FQRSBiZWZvcmUKKyMgZXhwYW5kaW5nIG1hY3Jvcywgc28gaXQgY29ycnVwdHMgc29tZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlCisjIG1hY3Jvcy4gIFRvIGF2b2lkIHRoaXMsIGV4cGFuZCBub3cgYW5kIHBhc3MgaXQgdGhlIHJlc3VsdCB3aXRoIHByb3BlcgorIyBzdHJpbmcgcXVvdGF0aW9uLiAgQXNzdW1lIGFyZ3MgNyB0aHJvdWdoIDEyIGV4cGFuZCB0byBwcm9wZXJseSBxdW90ZWQKKyMgc3RyaW5ncy4KKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTU1MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVkdWNlLmF0OjE1NTAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNTUwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IiAicmVkdWNlLmF0OjE1NTAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNTUwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNTUwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVkdWNlLmF0OjE1NTAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTU1MDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZHVjZS5hdDoxNTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNTUwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTA6IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVkdWNlLmF0OjE1NTAiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNTUwOiBzZWQgLW4gJy9eU3RhdGUgMFwkLyxcJHAnIGlucHV0Lm91dHB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAic2VkIC1uICcvXlN0YXRlIDAkLywkcCcgaW5wdXQub3V0cHV0IiAicmVkdWNlLmF0OjE1NTAiCisoICRhdF9jaGVja190cmFjZTsgc2VkIC1uICcvXlN0YXRlIDAkLywkcCcgaW5wdXQub3V0cHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiU3RhdGUgMAorCisgICAgMCBcJGFjY2VwdDogLiBzdGFydCBcJGVuZAorICAgIDEgc3RhcnQ6IC4gYSBiCisgICAgMiAgICAgIHwgLiBhIGIgJ2EnCisgICAgMyAgICAgIHwgLiBhIGMgJ2InCisgICAgNCBhOiAuICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEKKworICAgIHN0YXJ0ICBnbyB0byBzdGF0ZSAyCisgICAgYSAgICAgIGdvIHRvIHN0YXRlIDMKKworCitTdGF0ZSAxCisKKyAgICA0IGE6ICdhJyAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDQgKGEpCisKKworU3RhdGUgMgorCisgICAgMCBcJGFjY2VwdDogc3RhcnQgLiBcJGVuZAorCisgICAgXCRlbmQgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNAorCisKK1N0YXRlIDMKKworICAgIDEgc3RhcnQ6IGEgLiBiCisgICAgMiAgICAgIHwgYSAuIGIgJ2EnCisgICAgMyAgICAgIHwgYSAuIGMgJ2InCisgICAgNSBiOiAuICBbXCRlbmQsICdhJ10KKyAgICA2IGM6IC4gIFsnYiddCisKKyAgICAnYicgICAgICAgcmVkdWNlIHVzaW5nIHJ1bGUgNiAoYykKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDUgKGIpCisKKyAgICBiICBnbyB0byBzdGF0ZSA1CisgICAgYyAgZ28gdG8gc3RhdGUgNgorCisKK1N0YXRlIDQKKworICAgIDAgXCRhY2NlcHQ6IHN0YXJ0IFwkZW5kIC4KKworICAgIFwkZGVmYXVsdCAgYWNjZXB0CisKKworU3RhdGUgNQorCisgICAgMSBzdGFydDogYSBiIC4gIFtcJGVuZF0KKyAgICAyICAgICAgfCBhIGIgLiAnYScKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA3CisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDEgKHN0YXJ0KQorCisKK1N0YXRlIDYKKworICAgIDMgc3RhcnQ6IGEgYyAuICdiJworCisgICAgJ2InICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDgKKworCitTdGF0ZSA3CisKKyAgICAyIHN0YXJ0OiBhIGIgJ2EnIC4KKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMiAoc3RhcnQpCisKKworU3RhdGUgOAorCisgICAgMyBzdGFydDogYSBjICdiJyAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDMgKHN0YXJ0KQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisjIENhbm9uaWNhbCBMUiBnZW5lcmF0ZXMgdmVyeSBsYXJnZSB0YWJsZXMsIHJlc3VsdGluZyBpbiB2ZXJ5IGxvbmcKKyMgZmlsZXMgd2l0aCAjbGluZSBkaXJlY3RpdmVzIHRoYXQgbWF5IG92ZXJmbG93IHdoYXQgdGhlIHN0YW5kYXJkcworIyAoQzkwIGFuZCBDKys5OCkgZ3VhcmFudGVlOiAzMjc2Ny4gIEluIHRoYXQgY2FzZSwgR0NDJ3MgLXBlZGFudGljCisjIHdpbGwgaXNzdWUgYW4gZXJyb3IuCisjCisjIFRoZXJlIGlzIG5vICIiIGFyb3VuZCBgd2NgIHNpbmNlIHNvbWUgaW5kZW50IHRoZSByZXN1bHQuCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTU1MDogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgInJlZHVjZS5hdDoxNTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTU1MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTU1MDogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJyZWR1Y2UuYXQ6MTU1MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTU1MDogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJyZWR1Y2UuYXQ6MTU1MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTU1MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTU1MDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWR1Y2UuYXQ6MTU1MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTU1MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTI0CisjQVRfU1RBUlRfMTI1CithdF9mbl9ncm91cF9iYW5uZXIgMTI1ICdyZWR1Y2UuYXQ6MTU1MCcgXAorICAiJWRlZmluZSBsci5kZWZhdWx0LXJlZHVjdGlvbnMgbW9zdCIgIiAgICAgICAgICAgICAiIDYKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxMjUuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWNvZGUgeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CisgIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOworfQorCislZGVmaW5lIGxyLmRlZmF1bHQtcmVkdWN0aW9ucyBtb3N0CisKKyUlCisKKworLyogVGhlIHN0YXJ0IHN0YXRlIGlzIGNvbnNpc3RlbnQgYW5kIGhhcyBhIHNoaWZ0IG9uICdhJyBhbmQgbm8gcmVkdWN0aW9ucy4KKyAgIEFmdGVyIHB1c2hpbmcgdGhlIGIgYmVsb3csIGVudGVyIGFuIGluY29uc2lzdGVudCBzdGF0ZSB0aGF0IGhhcyBhIHNoaWZ0IGFuZAorICAgb25lIHJlZHVjdGlvbiB3aXRoIG9uZSBsb29rYWhlYWQuICAqLworc3RhcnQ6CisgICAgYSBiCisgIHwgYSBiICdhJworICB8IGEgYyAnYicKKyAgOworCisvKiBBZnRlciBzaGlmdGluZyB0aGlzICdhJywgZW50ZXIgYSBjb25zaXN0ZW50IHN0YXRlIHRoYXQgaGFzIG5vIHNoaWZ0IGFuZCAxCisgICByZWR1Y3Rpb24gd2l0aCBtdWx0aXBsZSBsb29rYWhlYWRzLiAgKi8KK2E6ICdhJyA7CisKKy8qIEFmdGVyIHRoZSBwcmV2aW91cyByZWR1Y3Rpb24sIGVudGVyIGFuIGluY29uc2lzdGVudCBzdGF0ZSB0aGF0IGhhcyBubyBzaGlmdAorICAgYW5kIG11bHRpcGxlIHJlZHVjdGlvbnMuICBUaGUgZmlyc3QgcmVkdWN0aW9uIGhhcyBtb3JlIGxvb2thaGVhZHMgdGhhbiB0aGUKKyAgIHNlY29uZCwgc28gdGhlIGZpcnN0IHNob3VsZCBhbHdheXMgYmUgcHJlZmVycmVkIGFzIHRoZSBkZWZhdWx0IHJlZHVjdGlvbiBpZgorICAgZW5hYmxlZC4gIFRoZSBzZWNvbmQgcmVkdWN0aW9uIGhhcyBvbmUgbG9va2FoZWFkLiAgKi8KK2I6IDsKK2M6IDsKKworCislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KK3N0YXRpYyBpbnQKK3l5bGV4ICh2b2lkKQoreworICBzdGF0aWMgaW50IGNvbnN0IGlucHV0W10gPSB7CisgICAgJ2EnLCAnYScsIDAKKyAgfTsKKyAgc3RhdGljIGludCBjb25zdCAqaW5wdXRwID0gaW5wdXQ7CisgIHJldHVybiAqaW5wdXRwKys7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKKyMgSW4gc29tZSB2ZXJzaW9ucyBvZiBBdXRvY29uZiwgQVRfQ0hFQ0sgaW52b2tlcyBBU19FU0NBUEUgYmVmb3JlCisjIGV4cGFuZGluZyBtYWNyb3MsIHNvIGl0IGNvcnJ1cHRzIHNvbWUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZQorIyBtYWNyb3MuICBUbyBhdm9pZCB0aGlzLCBleHBhbmQgbm93IGFuZCBwYXNzIGl0IHRoZSByZXN1bHQgd2l0aCBwcm9wZXIKKyMgc3RyaW5nIHF1b3RhdGlvbi4gIEFzc3VtZSBhcmdzIDcgdGhyb3VnaCAxMiBleHBhbmQgdG8gcHJvcGVybHkgcXVvdGVkCisjIHN0cmluZ3MuCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZHVjZS5hdDoxNTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTU1MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNTUwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIgInJlZHVjZS5hdDoxNTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTU1MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTU1MDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZHVjZS5hdDoxNTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNTUwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWR1Y2UuYXQ6MTU1MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTU1MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNTUwOiBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZHVjZS5hdDoxNTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNTUwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTU1MDogc2VkIC1uICcvXlN0YXRlIDBcJC8sXCRwJyBpbnB1dC5vdXRwdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgInNlZCAtbiAnL15TdGF0ZSAwJC8sJHAnIGlucHV0Lm91dHB1dCIgInJlZHVjZS5hdDoxNTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAtbiAnL15TdGF0ZSAwJC8sJHAnIGlucHV0Lm91dHB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIlN0YXRlIDAKKworICAgIDAgXCRhY2NlcHQ6IC4gc3RhcnQgXCRlbmQKKyAgICAxIHN0YXJ0OiAuIGEgYgorICAgIDIgICAgICB8IC4gYSBiICdhJworICAgIDMgICAgICB8IC4gYSBjICdiJworICAgIDQgYTogLiAnYScKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxCisKKyAgICBzdGFydCAgZ28gdG8gc3RhdGUgMgorICAgIGEgICAgICBnbyB0byBzdGF0ZSAzCisKKworU3RhdGUgMQorCisgICAgNCBhOiAnYScgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA0IChhKQorCisKK1N0YXRlIDIKKworICAgIDAgXCRhY2NlcHQ6IHN0YXJ0IC4gXCRlbmQKKworICAgIFwkZW5kICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDQKKworCitTdGF0ZSAzCisKKyAgICAxIHN0YXJ0OiBhIC4gYgorICAgIDIgICAgICB8IGEgLiBiICdhJworICAgIDMgICAgICB8IGEgLiBjICdiJworICAgIDUgYjogLiAgW1wkZW5kLCAnYSddCisgICAgNiBjOiAuICBbJ2InXQorCisgICAgJ2InICAgICAgIHJlZHVjZSB1c2luZyBydWxlIDYgKGMpCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA1IChiKQorCisgICAgYiAgZ28gdG8gc3RhdGUgNQorICAgIGMgIGdvIHRvIHN0YXRlIDYKKworCitTdGF0ZSA0CisKKyAgICAwIFwkYWNjZXB0OiBzdGFydCBcJGVuZCAuCisKKyAgICBcJGRlZmF1bHQgIGFjY2VwdAorCisKK1N0YXRlIDUKKworICAgIDEgc3RhcnQ6IGEgYiAuICBbXCRlbmRdCisgICAgMiAgICAgIHwgYSBiIC4gJ2EnCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNworCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAxIChzdGFydCkKKworCitTdGF0ZSA2CisKKyAgICAzIHN0YXJ0OiBhIGMgLiAnYicKKworICAgICdiJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4CisKKworU3RhdGUgNworCisgICAgMiBzdGFydDogYSBiICdhJyAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDIgKHN0YXJ0KQorCisKK1N0YXRlIDgKKworICAgIDMgc3RhcnQ6IGEgYyAnYicgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAzIChzdGFydCkKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNTUwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworIyBDYW5vbmljYWwgTFIgZ2VuZXJhdGVzIHZlcnkgbGFyZ2UgdGFibGVzLCByZXN1bHRpbmcgaW4gdmVyeSBsb25nCisjIGZpbGVzIHdpdGggI2xpbmUgZGlyZWN0aXZlcyB0aGF0IG1heSBvdmVyZmxvdyB3aGF0IHRoZSBzdGFuZGFyZHMKKyMgKEM5MCBhbmQgQysrOTgpIGd1YXJhbnRlZTogMzI3NjcuICBJbiB0aGF0IGNhc2UsIEdDQydzIC1wZWRhbnRpYworIyB3aWxsIGlzc3VlIGFuIGVycm9yLgorIworIyBUaGVyZSBpcyBubyAiIiBhcm91bmQgYHdjYCBzaW5jZSBzb21lIGluZGVudCB0aGUgcmVzdWx0LgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTA6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJyZWR1Y2UuYXQ6MTU1MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTA6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAicmVkdWNlLmF0OjE1NTAiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNTUwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTA6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAicmVkdWNlLmF0OjE1NTAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVkdWNlLmF0OjE1NTAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzEyNQorI0FUX1NUQVJUXzEyNgorYXRfZm5fZ3JvdXBfYmFubmVyIDEyNiAncmVkdWNlLmF0OjE1NTAnIFwKKyAgIiVkZWZpbmUgbHIuZGVmYXVsdC1yZWR1Y3Rpb25zIGNvbnNpc3RlbnQiICIgICAgICAgIiA2CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTI2LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVjb2RlIHsKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKK30KKworJWRlZmluZSBsci5kZWZhdWx0LXJlZHVjdGlvbnMgY29uc2lzdGVudAorCislJQorCisKKy8qIFRoZSBzdGFydCBzdGF0ZSBpcyBjb25zaXN0ZW50IGFuZCBoYXMgYSBzaGlmdCBvbiAnYScgYW5kIG5vIHJlZHVjdGlvbnMuCisgICBBZnRlciBwdXNoaW5nIHRoZSBiIGJlbG93LCBlbnRlciBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgdGhhdCBoYXMgYSBzaGlmdCBhbmQKKyAgIG9uZSByZWR1Y3Rpb24gd2l0aCBvbmUgbG9va2FoZWFkLiAgKi8KK3N0YXJ0OgorICAgIGEgYgorICB8IGEgYiAnYScKKyAgfCBhIGMgJ2InCisgIDsKKworLyogQWZ0ZXIgc2hpZnRpbmcgdGhpcyAnYScsIGVudGVyIGEgY29uc2lzdGVudCBzdGF0ZSB0aGF0IGhhcyBubyBzaGlmdCBhbmQgMQorICAgcmVkdWN0aW9uIHdpdGggbXVsdGlwbGUgbG9va2FoZWFkcy4gICovCithOiAnYScgOworCisvKiBBZnRlciB0aGUgcHJldmlvdXMgcmVkdWN0aW9uLCBlbnRlciBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgdGhhdCBoYXMgbm8gc2hpZnQKKyAgIGFuZCBtdWx0aXBsZSByZWR1Y3Rpb25zLiAgVGhlIGZpcnN0IHJlZHVjdGlvbiBoYXMgbW9yZSBsb29rYWhlYWRzIHRoYW4gdGhlCisgICBzZWNvbmQsIHNvIHRoZSBmaXJzdCBzaG91bGQgYWx3YXlzIGJlIHByZWZlcnJlZCBhcyB0aGUgZGVmYXVsdCByZWR1Y3Rpb24gaWYKKyAgIGVuYWJsZWQuICBUaGUgc2Vjb25kIHJlZHVjdGlvbiBoYXMgb25lIGxvb2thaGVhZC4gICovCitiOiA7CitjOiA7CisKKworJSUKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CitzdGF0aWMgaW50Cit5eWxleCAodm9pZCkKK3sKKyAgc3RhdGljIGludCBjb25zdCBpbnB1dFtdID0geworICAgICdhJywgJ2EnLCAwCisgIH07CisgIHN0YXRpYyBpbnQgY29uc3QgKmlucHV0cCA9IGlucHV0OworICByZXR1cm4gKmlucHV0cCsrOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCisjIEluIHNvbWUgdmVyc2lvbnMgb2YgQXV0b2NvbmYsIEFUX0NIRUNLIGludm9rZXMgQVNfRVNDQVBFIGJlZm9yZQorIyBleHBhbmRpbmcgbWFjcm9zLCBzbyBpdCBjb3JydXB0cyBzb21lIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUKKyMgbWFjcm9zLiAgVG8gYXZvaWQgdGhpcywgZXhwYW5kIG5vdyBhbmQgcGFzcyBpdCB0aGUgcmVzdWx0IHdpdGggcHJvcGVyCisjIHN0cmluZyBxdW90YXRpb24uICBBc3N1bWUgYXJncyA3IHRocm91Z2ggMTIgZXhwYW5kIHRvIHByb3Blcmx5IHF1b3RlZAorIyBzdHJpbmdzLgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNTUwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWR1Y2UuYXQ6MTU1MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTU1MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiICJyZWR1Y2UuYXQ6MTU1MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWR1Y2UuYXQ6MTU1MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTU1MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNTUwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVkdWNlLmF0OjE1NTAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTU1MDogYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWR1Y2UuYXQ6MTU1MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTU1MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTA6IHNlZCAtbiAnL15TdGF0ZSAwXCQvLFwkcCcgaW5wdXQub3V0cHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJzZWQgLW4gJy9eU3RhdGUgMCQvLCRwJyBpbnB1dC5vdXRwdXQiICJyZWR1Y2UuYXQ6MTU1MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgLW4gJy9eU3RhdGUgMCQvLCRwJyBpbnB1dC5vdXRwdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJTdGF0ZSAwCisKKyAgICAwIFwkYWNjZXB0OiAuIHN0YXJ0IFwkZW5kCisgICAgMSBzdGFydDogLiBhIGIKKyAgICAyICAgICAgfCAuIGEgYiAnYScKKyAgICAzICAgICAgfCAuIGEgYyAnYicKKyAgICA0IGE6IC4gJ2EnCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMQorCisgICAgc3RhcnQgIGdvIHRvIHN0YXRlIDIKKyAgICBhICAgICAgZ28gdG8gc3RhdGUgMworCisKK1N0YXRlIDEKKworICAgIDQgYTogJ2EnIC4KKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgNCAoYSkKKworCitTdGF0ZSAyCisKKyAgICAwIFwkYWNjZXB0OiBzdGFydCAuIFwkZW5kCisKKyAgICBcJGVuZCAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA0CisKKworU3RhdGUgMworCisgICAgMSBzdGFydDogYSAuIGIKKyAgICAyICAgICAgfCBhIC4gYiAnYScKKyAgICAzICAgICAgfCBhIC4gYyAnYicKKyAgICA1IGI6IC4gIFtcJGVuZCwgJ2EnXQorICAgIDYgYzogLiAgWydiJ10KKworICAgIFwkZW5kICByZWR1Y2UgdXNpbmcgcnVsZSA1IChiKQorICAgICdhJyAgIHJlZHVjZSB1c2luZyBydWxlIDUgKGIpCisgICAgJ2InICAgcmVkdWNlIHVzaW5nIHJ1bGUgNiAoYykKKworICAgIGIgIGdvIHRvIHN0YXRlIDUKKyAgICBjICBnbyB0byBzdGF0ZSA2CisKKworU3RhdGUgNAorCisgICAgMCBcJGFjY2VwdDogc3RhcnQgXCRlbmQgLgorCisgICAgXCRkZWZhdWx0ICBhY2NlcHQKKworCitTdGF0ZSA1CisKKyAgICAxIHN0YXJ0OiBhIGIgLiAgW1wkZW5kXQorICAgIDIgICAgICB8IGEgYiAuICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDcKKworICAgIFwkZW5kICByZWR1Y2UgdXNpbmcgcnVsZSAxIChzdGFydCkKKworCitTdGF0ZSA2CisKKyAgICAzIHN0YXJ0OiBhIGMgLiAnYicKKworICAgICdiJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4CisKKworU3RhdGUgNworCisgICAgMiBzdGFydDogYSBiICdhJyAuCisKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDIgKHN0YXJ0KQorCisKK1N0YXRlIDgKKworICAgIDMgc3RhcnQ6IGEgYyAnYicgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAzIChzdGFydCkKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNTUwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworIyBDYW5vbmljYWwgTFIgZ2VuZXJhdGVzIHZlcnkgbGFyZ2UgdGFibGVzLCByZXN1bHRpbmcgaW4gdmVyeSBsb25nCisjIGZpbGVzIHdpdGggI2xpbmUgZGlyZWN0aXZlcyB0aGF0IG1heSBvdmVyZmxvdyB3aGF0IHRoZSBzdGFuZGFyZHMKKyMgKEM5MCBhbmQgQysrOTgpIGd1YXJhbnRlZTogMzI3NjcuICBJbiB0aGF0IGNhc2UsIEdDQydzIC1wZWRhbnRpYworIyB3aWxsIGlzc3VlIGFuIGVycm9yLgorIworIyBUaGVyZSBpcyBubyAiIiBhcm91bmQgYHdjYCBzaW5jZSBzb21lIGluZGVudCB0aGUgcmVzdWx0LgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTA6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJyZWR1Y2UuYXQ6MTU1MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTA6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAicmVkdWNlLmF0OjE1NTAiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNTUwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTA6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAicmVkdWNlLmF0OjE1NTAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVkdWNlLmF0OjE1NTAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzEyNgorI0FUX1NUQVJUXzEyNworYXRfZm5fZ3JvdXBfYmFubmVyIDEyNyAncmVkdWNlLmF0OjE1NTAnIFwKKyAgIiVkZWZpbmUgbHIuZGVmYXVsdC1yZWR1Y3Rpb25zIGFjY2VwdGluZyIgIiAgICAgICAgIiA2CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTI3LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVjb2RlIHsKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKK30KKworJWRlZmluZSBsci5kZWZhdWx0LXJlZHVjdGlvbnMgYWNjZXB0aW5nCisKKyUlCisKKworLyogVGhlIHN0YXJ0IHN0YXRlIGlzIGNvbnNpc3RlbnQgYW5kIGhhcyBhIHNoaWZ0IG9uICdhJyBhbmQgbm8gcmVkdWN0aW9ucy4KKyAgIEFmdGVyIHB1c2hpbmcgdGhlIGIgYmVsb3csIGVudGVyIGFuIGluY29uc2lzdGVudCBzdGF0ZSB0aGF0IGhhcyBhIHNoaWZ0IGFuZAorICAgb25lIHJlZHVjdGlvbiB3aXRoIG9uZSBsb29rYWhlYWQuICAqLworc3RhcnQ6CisgICAgYSBiCisgIHwgYSBiICdhJworICB8IGEgYyAnYicKKyAgOworCisvKiBBZnRlciBzaGlmdGluZyB0aGlzICdhJywgZW50ZXIgYSBjb25zaXN0ZW50IHN0YXRlIHRoYXQgaGFzIG5vIHNoaWZ0IGFuZCAxCisgICByZWR1Y3Rpb24gd2l0aCBtdWx0aXBsZSBsb29rYWhlYWRzLiAgKi8KK2E6ICdhJyA7CisKKy8qIEFmdGVyIHRoZSBwcmV2aW91cyByZWR1Y3Rpb24sIGVudGVyIGFuIGluY29uc2lzdGVudCBzdGF0ZSB0aGF0IGhhcyBubyBzaGlmdAorICAgYW5kIG11bHRpcGxlIHJlZHVjdGlvbnMuICBUaGUgZmlyc3QgcmVkdWN0aW9uIGhhcyBtb3JlIGxvb2thaGVhZHMgdGhhbiB0aGUKKyAgIHNlY29uZCwgc28gdGhlIGZpcnN0IHNob3VsZCBhbHdheXMgYmUgcHJlZmVycmVkIGFzIHRoZSBkZWZhdWx0IHJlZHVjdGlvbiBpZgorICAgZW5hYmxlZC4gIFRoZSBzZWNvbmQgcmVkdWN0aW9uIGhhcyBvbmUgbG9va2FoZWFkLiAgKi8KK2I6IDsKK2M6IDsKKworCislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KK3N0YXRpYyBpbnQKK3l5bGV4ICh2b2lkKQoreworICBzdGF0aWMgaW50IGNvbnN0IGlucHV0W10gPSB7CisgICAgJ2EnLCAnYScsIDAKKyAgfTsKKyAgc3RhdGljIGludCBjb25zdCAqaW5wdXRwID0gaW5wdXQ7CisgIHJldHVybiAqaW5wdXRwKys7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKKyMgSW4gc29tZSB2ZXJzaW9ucyBvZiBBdXRvY29uZiwgQVRfQ0hFQ0sgaW52b2tlcyBBU19FU0NBUEUgYmVmb3JlCisjIGV4cGFuZGluZyBtYWNyb3MsIHNvIGl0IGNvcnJ1cHRzIHNvbWUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZQorIyBtYWNyb3MuICBUbyBhdm9pZCB0aGlzLCBleHBhbmQgbm93IGFuZCBwYXNzIGl0IHRoZSByZXN1bHQgd2l0aCBwcm9wZXIKKyMgc3RyaW5nIHF1b3RhdGlvbi4gIEFzc3VtZSBhcmdzIDcgdGhyb3VnaCAxMiBleHBhbmQgdG8gcHJvcGVybHkgcXVvdGVkCisjIHN0cmluZ3MuCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZHVjZS5hdDoxNTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTU1MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNTUwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIgInJlZHVjZS5hdDoxNTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTU1MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTU1MDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZHVjZS5hdDoxNTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNTUwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVkdWNlLmF0OjE1NTA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWR1Y2UuYXQ6MTU1MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTU1MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNTUwOiBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZHVjZS5hdDoxNTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNTUwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTU1MDogc2VkIC1uICcvXlN0YXRlIDBcJC8sXCRwJyBpbnB1dC5vdXRwdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgInNlZCAtbiAnL15TdGF0ZSAwJC8sJHAnIGlucHV0Lm91dHB1dCIgInJlZHVjZS5hdDoxNTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAtbiAnL15TdGF0ZSAwJC8sJHAnIGlucHV0Lm91dHB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIlN0YXRlIDAKKworICAgIDAgXCRhY2NlcHQ6IC4gc3RhcnQgXCRlbmQKKyAgICAxIHN0YXJ0OiAuIGEgYgorICAgIDIgICAgICB8IC4gYSBiICdhJworICAgIDMgICAgICB8IC4gYSBjICdiJworICAgIDQgYTogLiAnYScKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxCisKKyAgICBzdGFydCAgZ28gdG8gc3RhdGUgMgorICAgIGEgICAgICBnbyB0byBzdGF0ZSAzCisKKworU3RhdGUgMQorCisgICAgNCBhOiAnYScgLiAgW1wkZW5kLCAnYScsICdiJ10KKworICAgIFwkZW5kICByZWR1Y2UgdXNpbmcgcnVsZSA0IChhKQorICAgICdhJyAgIHJlZHVjZSB1c2luZyBydWxlIDQgKGEpCisgICAgJ2InICAgcmVkdWNlIHVzaW5nIHJ1bGUgNCAoYSkKKworCitTdGF0ZSAyCisKKyAgICAwIFwkYWNjZXB0OiBzdGFydCAuIFwkZW5kCisKKyAgICBcJGVuZCAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA0CisKKworU3RhdGUgMworCisgICAgMSBzdGFydDogYSAuIGIKKyAgICAyICAgICAgfCBhIC4gYiAnYScKKyAgICAzICAgICAgfCBhIC4gYyAnYicKKyAgICA1IGI6IC4gIFtcJGVuZCwgJ2EnXQorICAgIDYgYzogLiAgWydiJ10KKworICAgIFwkZW5kICByZWR1Y2UgdXNpbmcgcnVsZSA1IChiKQorICAgICdhJyAgIHJlZHVjZSB1c2luZyBydWxlIDUgKGIpCisgICAgJ2InICAgcmVkdWNlIHVzaW5nIHJ1bGUgNiAoYykKKworICAgIGIgIGdvIHRvIHN0YXRlIDUKKyAgICBjICBnbyB0byBzdGF0ZSA2CisKKworU3RhdGUgNAorCisgICAgMCBcJGFjY2VwdDogc3RhcnQgXCRlbmQgLgorCisgICAgXCRkZWZhdWx0ICBhY2NlcHQKKworCitTdGF0ZSA1CisKKyAgICAxIHN0YXJ0OiBhIGIgLiAgW1wkZW5kXQorICAgIDIgICAgICB8IGEgYiAuICdhJworCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDcKKworICAgIFwkZW5kICByZWR1Y2UgdXNpbmcgcnVsZSAxIChzdGFydCkKKworCitTdGF0ZSA2CisKKyAgICAzIHN0YXJ0OiBhIGMgLiAnYicKKworICAgICdiJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4CisKKworU3RhdGUgNworCisgICAgMiBzdGFydDogYSBiICdhJyAuICBbXCRlbmRdCisKKyAgICBcJGVuZCAgcmVkdWNlIHVzaW5nIHJ1bGUgMiAoc3RhcnQpCisKKworU3RhdGUgOAorCisgICAgMyBzdGFydDogYSBjICdiJyAuICBbXCRlbmRdCisKKyAgICBcJGVuZCAgcmVkdWNlIHVzaW5nIHJ1bGUgMyAoc3RhcnQpCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTU1MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyMgQ2Fub25pY2FsIExSIGdlbmVyYXRlcyB2ZXJ5IGxhcmdlIHRhYmxlcywgcmVzdWx0aW5nIGluIHZlcnkgbG9uZworIyBmaWxlcyB3aXRoICNsaW5lIGRpcmVjdGl2ZXMgdGhhdCBtYXkgb3ZlcmZsb3cgd2hhdCB0aGUgc3RhbmRhcmRzCisjIChDOTAgYW5kIEMrKzk4KSBndWFyYW50ZWU6IDMyNzY3LiAgSW4gdGhhdCBjYXNlLCBHQ0MncyAtcGVkYW50aWMKKyMgd2lsbCBpc3N1ZSBhbiBlcnJvci4KKyMKKyMgVGhlcmUgaXMgbm8gIiIgYXJvdW5kIGB3Y2Agc2luY2Ugc29tZSBpbmRlbnQgdGhlIHJlc3VsdC4KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNTUwOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAicmVkdWNlLmF0OjE1NTAiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNTUwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNTUwOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyIgInJlZHVjZS5hdDoxNTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWR1Y2UuYXQ6MTU1MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNTUwOiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgInJlZHVjZS5hdDoxNTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNTUwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNTUwOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZHVjZS5hdDoxNTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZHVjZS5hdDoxNTUwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xMjcKKyNBVF9TVEFSVF8xMjgKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxMjggJ3N5bmNsaW5lcy5hdDoxNTAnIFwKKyAgIlByb2xvZ3VlIHN5bmNsaW5lIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiA3CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTI4LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogIyBJdCBzZWVtcyBpbXBvc3NpYmxlIHRvIGZpbmQgYSBnZW5lcmljIHNjaGVtZSB0byBjaGVjayB0aGUgbG9jYXRpb24KQEAgLTQ4MjAsMzIgKzMxODY3LDI4IEBACiAKIGNhdCA+c3luY2xpbmUuYyA8PCdfQVRFT0YnCiAjZXJyb3IgIjEiCitpbnQgaTsgLyogYXZvaWRzIC1wZWRhbnRpYyB3YXJuaW5nIGFib3V0IGFuIGVtcHR5IHRyYW5zbGF0aW9uIHVuaXQuICovCiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInN5bmNsaW5lcy5hdDo5NTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIC1jIHN5bmNsaW5lLmMiCi1lY2hvIHN5bmNsaW5lcy5hdDo5NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTIC1jIHN5bmNsaW5lLmMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgICopOzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MTUwOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgLWMgc3luY2xpbmUuYyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTIC1jIHN5bmNsaW5lLmMiICJzeW5jbGluZXMuYXQ6MTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyBzeW5jbGluZS5jCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc2tpcCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoxNTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCiAKLSRhdF90cmFjZW9uCi0KKyMgVHJhbnNmb3JtIHN0ZGVyciBpbnRvIHNvbWV0aGluZyBsaWtlIHRoaXM6CisjCisjICAgaW5wdXQueTo0OiAjZXJyb3IgIjQiCisjCiAjIEluIGNhc2UgR0NDIGRpc3BsYXlzIGNvbHVtbiBpbmZvcm1hdGlvbiwgc3RyaXAgaXQgZG93bi4KICMKICMgICBpbnB1dC55OjQ6MjogI2Vycm9yICI0IiAgICBvcgpAQCAtNDg1NCwxMTYgKzMxODk3LDIyNyBAQAogIyA9PgogIyAgIGlucHV0Lnk6NDogI2Vycm9yICI0IgogIwotJGF0X3RyYWNlb2ZmCi1lY2hvICJzeW5jbGluZXMuYXQ6OTU6IHNlZCAtZSAncy9eXFwoW146XSo6W146Ll0qXFwpWy46XVteOl0qOlxcKC4qXFwpXCQvXFwxOlxcMi8nIC1lICdzL15cXChbXjpdKjpbXjpdKjpcXClbXiNdKlxcKCAjZXJyb3JcXCkvXFwxXFwyLycgc3RkZXJyIgotZWNobyBzeW5jbGluZXMuYXQ6OTUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IHNlZCAtZSAncy9eXChbXjpdKjpbXjouXSpcKVsuOl1bXjpdKjpcKC4qXCkkL1wxOlwyLycgLWUgJ3MvXlwoW146XSo6W146XSo6XClbXiNdKlwoICNlcnJvclwpL1wxXDIvJyBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyBzdGRvdXQ6OyB0ZWUgc3Rkb3V0IDwkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJzeW5jbGluZXMuYXQ6OTU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyMgSXQgbWF5IGFsc28gaXNzdWUgbW9yZSBjb250ZXh0IGluZm9ybWF0aW9uOgorIworIyAgIGlucHV0Lnk6IEluIGZ1bmN0aW9uICd5eXBhcnNlJzoKKyMgICBpbnB1dC55Ojg6ICNlcnJvciAiOCIKKyMgPT4KKyMgICBpbnB1dC55OjQ6ICNlcnJvciAiOCIKKyMKKyMgVGhlIG1lc3NhZ2UgbWF5IGluY2x1ZGUgYSBjYXJldC1lcnJvciAoaW5kZW50ZWQgYnkgR0NDIDQuOCwKKyMgbm90IGJ5IGNsYW5nIDMuMik6CisjCisjICAgaW5wdXQueToxOjI6IGVycm9yOiAjZXJyb3IgIjEiCisjICAgICNlcnJvciAiMSIKKyMgICAgIF4KKyMKKyMgUG9zc2libHkgZGlzdGNjIGFkZHMgaXRzIGJpdHMuCisjCisjICAgZGlzdGNjWzMzMTg3XSBFUlJPUjogY29tcGlsZSAobnVsbCkgb24gbG9jYWxob3N0IGZhaWxlZAorIyAgIHN5bmNsaW5lLmM6MToyOiBlcnJvcjogI2Vycm9yICIxIgorIyAgIGRpc3RjY1szMzE4NV0gRVJST1I6IGNvbXBpbGUgc3luY2xpbmUuYyBvbiBsb2NhbGhvc3QgZmFpbGVkCisjCisjIG9yIGV2ZW4KKyMKKyMgICBkaXN0Y2NbMzU4ODJdIChkY2NfY29ubmVjdF9ieV9uYW1lKSBFUlJPUjogZmFpbGVkIHRvIGxvb2sgdXAgaG9zdCAiY2hyaXNpbWFjIjogVW5rbm93biBob3N0CisjICAgZGlzdGNjWzM1ODgyXSBXYXJuaW5nOiBmYWlsZWQgdG8gZGlzdHJpYnV0ZSBpbnB1dC5jIHRvIGNocmlzaW1hYy80LCBydW5uaW5nIGxvY2FsbHkgaW5zdGVhZAorIworIyBUaGUgY29tcGlsZXIgbWlnaHQgZW5kIGJ5IHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgaXNzdWVkIChDbGFuZyAzLjIpOgorIworIyAgICBzeW5jbGluZS5jOjE6MjogZXJyb3I6ICIxIgorIyAgICAjZXJyb3IgIjEiCisjICAgICBeCisjICAgIDEgZXJyb3IgZ2VuZXJhdGVkLgorIworIyBXaGVuIGMrKyBpcyB1c2VkIHRvIGNvbXBpbGVyIEMsIHdlIG1pZ2h0IGhhdmUgbW9yZSBtZXNzYWdlcyAoQ2xhbmcgMy4yKToKKyMKKyMgICAgY2xhbmc6IHdhcm5pbmc6IHRyZWF0aW5nICdjJyBpbnB1dCBhcyAnYysrJyB3aGVuIGluIEMrKyBtb2RlLCB0aGlzIGJlaGF2aW9yIGlzIGRlcHJlY2F0ZWQKIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoxNTA6IFwkUEVSTCAtcCAtMDc3NyAtIHN0ZGVyciA8PFxcRU9GCisgICMgMS4gUmVtb3ZlIHVzZWxlc3MgbGluZXMuCiAKLSRhdF90cmFjZW9uCisgICMgZGlzdGNjIGNsdXR0ZXIuCisgIHMvXmRpc3RjY1xcW1xcZCtcXF0gLipcXG4vL2dtOworICAjIGMgdnMuIGMrKy4KKyAgcy9eY2xhbmc6IHdhcm5pbmc6IHRyZWF0aW5nICdjJyBpbnB1dCBhcyAnY1xcK1xcKycuKlxcbi8vZ207CisgICMgRnVuY3Rpb24gY29udGV4dC4KKyAgcy9eW146XSo6IEluIGZ1bmN0aW9uICdbXiddKyc6XFxuLy9nbTsKKyAgIyBDYXJldCBlcnJvci4KKyAgcy9eICojZXJyb3IuKlxcbiAqXFxeXFxuLy9nbTsKKyAgIyBOdW1iZXIgb2YgZXJyb3JzLgorICBzL14xIGVycm9yIGdlbmVyYXRlZFxcLlxcbi8vZ207CisKKyAgIyAyLiBOb3JtYWxpemUgdGhlIGxpbmVzIHdlIGtlcHQuCisKKyAgIyBSZW1vdmUgY29sdW1uLgorICBzL14oW146XSs6XFxkKylbLjpdW146XSs6KC4rKVwkL1wkMTpcJDIvZ207CisgICMgTWFwIGFsbCBjb21iaW5hdGlvbnMgb2YgXCJlcnJvcjogXCIgYW5kIFwiI2Vycm9yOiBcIiB0byBcIiNlcnJvciBcIi4KKyAgcy9eKFteOl0rOlxcZCspOiggfCNlcnJvcnxlcnJvcnw6KSsvXCQxOiAjZXJyb3IgL2dtOworRU9GCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJzeW5jbGluZXMuYXQ6MTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1wIC0wNzc3IC0gc3RkZXJyIDw8XEVPRgorICAjIDEuIFJlbW92ZSB1c2VsZXNzIGxpbmVzLgorCisgICMgZGlzdGNjIGNsdXR0ZXIuCisgIHMvXmRpc3RjY1xbXGQrXF0gLipcbi8vZ207CisgICMgYyB2cy4gYysrLgorICBzL15jbGFuZzogd2FybmluZzogdHJlYXRpbmcgJ2MnIGlucHV0IGFzICdjXCtcKycuKlxuLy9nbTsKKyAgIyBGdW5jdGlvbiBjb250ZXh0LgorICBzL15bXjpdKjogSW4gZnVuY3Rpb24gJ1teJ10rJzpcbi8vZ207CisgICMgQ2FyZXQgZXJyb3IuCisgIHMvXiAqI2Vycm9yLipcbiAqXF5cbi8vZ207CisgICMgTnVtYmVyIG9mIGVycm9ycy4KKyAgcy9eMSBlcnJvciBnZW5lcmF0ZWRcLlxuLy9nbTsKKworICAjIDIuIE5vcm1hbGl6ZSB0aGUgbGluZXMgd2Uga2VwdC4KKworICAjIFJlbW92ZSBjb2x1bW4uCisgIHMvXihbXjpdKzpcZCspWy46XVteOl0rOiguKykkLyQxOiQyL2dtOworICAjIE1hcCBhbGwgY29tYmluYXRpb25zIG9mICJlcnJvcjogIiBhbmQgIiNlcnJvcjogIiB0byAiI2Vycm9yICIuCisgIHMvXihbXjpdKzpcZCspOiggfCNlcnJvcnxlcnJvcnw6KSsvJDE6ICNlcnJvciAvZ207CitFT0YKKworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyB0ZWUgc3Rkb3V0IDwiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjE1MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJzeW5jbGluZXMuYXQ6OTU6IHRlc3QgXCJcYGNhdCBzdGRvdXRcYFwiID0gJ3N5bmNsaW5lLmM6MTogI2Vycm9yIFwiMVwiJyB8fCBleGl0IDc3IgotZWNobyBzeW5jbGluZXMuYXQ6OTUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IHRlc3QgImBjYXQgc3Rkb3V0YCIgPSAnc3luY2xpbmUuYzoxOiAjZXJyb3IgIjEiJyB8fCBleGl0IDc3ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInN5bmNsaW5lcy5hdDo5NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjE1MDogdGVzdCBcIlxgY2F0IHN0ZG91dFxgXCIgPSAnc3luY2xpbmUuYzoxOiAjZXJyb3IgXCIxXCInIHx8IGV4aXQgNzciCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJzeW5jbGluZXMuYXQ6MTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHRlc3QgImBjYXQgc3Rkb3V0YCIgPSAnc3luY2xpbmUuYzoxOiAjZXJyb3IgIjEiJyB8fCBleGl0IDc3CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoxNTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQueSA8PCdfQVRFT0YnCiAlewogI2Vycm9yICIyIgotdm9pZCB5eWVycm9yIChjb25zdCBjaGFyICpzKTsKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CiBpbnQgeXlsZXggKHZvaWQpOwogJX0KICUlCiBleHA6ICcwJzsKKyUlCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJzeW5jbGluZXMuYXQ6OTU6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKLWVjaG8gc3luY2xpbmVzLmF0Ojk1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAic3luY2xpbmVzLmF0Ojk1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoxNTA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJzeW5jbGluZXMuYXQ6MTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjE1MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjE1MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgInN5bmNsaW5lcy5hdDoxNTAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MTUwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoxNTA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJzeW5jbGluZXMuYXQ6MTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoxNTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MTUwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAic3luY2xpbmVzLmF0OjE1MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MTUwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjE1MDogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAic3luY2xpbmVzLmF0OjE1MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjE1MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSRhdF90cmFjZW9mZgotZWNobyAic3luY2xpbmVzLmF0Ojk1OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgLWMgaW5wdXQuYyIKLWVjaG8gc3luY2xpbmVzLmF0Ojk1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgaW5wdXQuYyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgKik7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoxNTA6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyAtYyBpbnB1dC5jIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgaW5wdXQuYyIgInN5bmNsaW5lcy5hdDoxNTAiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTIC1jIGlucHV0LmMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19za2lwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjE1MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKIAotJGF0X3RyYWNlb24KLQorIyBUcmFuc2Zvcm0gc3RkZXJyIGludG8gc29tZXRoaW5nIGxpa2UgdGhpczoKKyMKKyMgICBpbnB1dC55OjQ6ICNlcnJvciAiNCIKKyMKICMgSW4gY2FzZSBHQ0MgZGlzcGxheXMgY29sdW1uIGluZm9ybWF0aW9uLCBzdHJpcCBpdCBkb3duLgogIwogIyAgIGlucHV0Lnk6NDoyOiAjZXJyb3IgIjQiICAgIG9yCkBAIC00OTcyLDcyICszMjEyNiwxMjYgQEAKICMgPT4KICMgICBpbnB1dC55OjQ6ICNlcnJvciAiNCIKICMKLSRhdF90cmFjZW9mZgotZWNobyAic3luY2xpbmVzLmF0Ojk1OiBzZWQgLWUgJ3MvXlxcKFteOl0qOlteOi5dKlxcKVsuOl1bXjpdKjpcXCguKlxcKVwkL1xcMTpcXDIvJyAtZSAncy9eXFwoW146XSo6W146XSo6XFwpW14jXSpcXCggI2Vycm9yXFwpL1xcMVxcMi8nIHN0ZGVyciIKLWVjaG8gc3luY2xpbmVzLmF0Ojk1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBzZWQgLWUgJ3MvXlwoW146XSo6W146Ll0qXClbLjpdW146XSo6XCguKlwpJC9cMTpcMi8nIC1lICdzL15cKFteOl0qOlteOl0qOlwpW14jXSpcKCAjZXJyb3JcKS9cMVwyLycgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gc3Rkb3V0OjsgdGVlIHN0ZG91dCA8JGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAic3luY2xpbmVzLmF0Ojk1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisjIEl0IG1heSBhbHNvIGlzc3VlIG1vcmUgY29udGV4dCBpbmZvcm1hdGlvbjoKKyMKKyMgICBpbnB1dC55OiBJbiBmdW5jdGlvbiAneXlwYXJzZSc6CisjICAgaW5wdXQueTo4OiAjZXJyb3IgIjgiCisjID0+CisjICAgaW5wdXQueTo0OiAjZXJyb3IgIjgiCisjCisjIFRoZSBtZXNzYWdlIG1heSBpbmNsdWRlIGEgY2FyZXQtZXJyb3IgKGluZGVudGVkIGJ5IEdDQyA0LjgsCisjIG5vdCBieSBjbGFuZyAzLjIpOgorIworIyAgIGlucHV0Lnk6MToyOiBlcnJvcjogI2Vycm9yICIxIgorIyAgICAjZXJyb3IgIjEiCisjICAgICBeCisjCisjIFBvc3NpYmx5IGRpc3RjYyBhZGRzIGl0cyBiaXRzLgorIworIyAgIGRpc3RjY1szMzE4N10gRVJST1I6IGNvbXBpbGUgKG51bGwpIG9uIGxvY2FsaG9zdCBmYWlsZWQKKyMgICBzeW5jbGluZS5jOjE6MjogZXJyb3I6ICNlcnJvciAiMSIKKyMgICBkaXN0Y2NbMzMxODVdIEVSUk9SOiBjb21waWxlIHN5bmNsaW5lLmMgb24gbG9jYWxob3N0IGZhaWxlZAorIworIyBvciBldmVuCisjCisjICAgZGlzdGNjWzM1ODgyXSAoZGNjX2Nvbm5lY3RfYnlfbmFtZSkgRVJST1I6IGZhaWxlZCB0byBsb29rIHVwIGhvc3QgImNocmlzaW1hYyI6IFVua25vd24gaG9zdAorIyAgIGRpc3RjY1szNTg4Ml0gV2FybmluZzogZmFpbGVkIHRvIGRpc3RyaWJ1dGUgaW5wdXQuYyB0byBjaHJpc2ltYWMvNCwgcnVubmluZyBsb2NhbGx5IGluc3RlYWQKKyMKKyMgVGhlIGNvbXBpbGVyIG1pZ2h0IGVuZCBieSB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIGlzc3VlZCAoQ2xhbmcgMy4yKToKKyMKKyMgICAgc3luY2xpbmUuYzoxOjI6IGVycm9yOiAiMSIKKyMgICAgI2Vycm9yICIxIgorIyAgICAgXgorIyAgICAxIGVycm9yIGdlbmVyYXRlZC4KKyMKKyMgV2hlbiBjKysgaXMgdXNlZCB0byBjb21waWxlciBDLCB3ZSBtaWdodCBoYXZlIG1vcmUgbWVzc2FnZXMgKENsYW5nIDMuMik6CisjCisjICAgIGNsYW5nOiB3YXJuaW5nOiB0cmVhdGluZyAnYycgaW5wdXQgYXMgJ2MrKycgd2hlbiBpbiBDKysgbW9kZSwgdGhpcyBiZWhhdmlvciBpcyBkZXByZWNhdGVkCiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MTUwOiBcJFBFUkwgLXAgLTA3NzcgLSBzdGRlcnIgPDxcXEVPRgorICAjIDEuIFJlbW92ZSB1c2VsZXNzIGxpbmVzLgogCi0kYXRfdHJhY2VvbgorICAjIGRpc3RjYyBjbHV0dGVyLgorICBzL15kaXN0Y2NcXFtcXGQrXFxdIC4qXFxuLy9nbTsKKyAgIyBjIHZzLiBjKysuCisgIHMvXmNsYW5nOiB3YXJuaW5nOiB0cmVhdGluZyAnYycgaW5wdXQgYXMgJ2NcXCtcXCsnLipcXG4vL2dtOworICAjIEZ1bmN0aW9uIGNvbnRleHQuCisgIHMvXlteOl0qOiBJbiBmdW5jdGlvbiAnW14nXSsnOlxcbi8vZ207CisgICMgQ2FyZXQgZXJyb3IuCisgIHMvXiAqI2Vycm9yLipcXG4gKlxcXlxcbi8vZ207CisgICMgTnVtYmVyIG9mIGVycm9ycy4KKyAgcy9eMSBlcnJvciBnZW5lcmF0ZWRcXC5cXG4vL2dtOworCisgICMgMi4gTm9ybWFsaXplIHRoZSBsaW5lcyB3ZSBrZXB0LgorCisgICMgUmVtb3ZlIGNvbHVtbi4KKyAgcy9eKFteOl0rOlxcZCspWy46XVteOl0rOiguKylcJC9cJDE6XCQyL2dtOworICAjIE1hcCBhbGwgY29tYmluYXRpb25zIG9mIFwiZXJyb3I6IFwiIGFuZCBcIiNlcnJvcjogXCIgdG8gXCIjZXJyb3IgXCIuCisgIHMvXihbXjpdKzpcXGQrKTooIHwjZXJyb3J8ZXJyb3J8OikrL1wkMTogI2Vycm9yIC9nbTsKK0VPRgorIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAic3luY2xpbmVzLmF0OjE1MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtcCAtMDc3NyAtIHN0ZGVyciA8PFxFT0YKKyAgIyAxLiBSZW1vdmUgdXNlbGVzcyBsaW5lcy4KKworICAjIGRpc3RjYyBjbHV0dGVyLgorICBzL15kaXN0Y2NcW1xkK1xdIC4qXG4vL2dtOworICAjIGMgdnMuIGMrKy4KKyAgcy9eY2xhbmc6IHdhcm5pbmc6IHRyZWF0aW5nICdjJyBpbnB1dCBhcyAnY1wrXCsnLipcbi8vZ207CisgICMgRnVuY3Rpb24gY29udGV4dC4KKyAgcy9eW146XSo6IEluIGZ1bmN0aW9uICdbXiddKyc6XG4vL2dtOworICAjIENhcmV0IGVycm9yLgorICBzL14gKiNlcnJvci4qXG4gKlxeXG4vL2dtOworICAjIE51bWJlciBvZiBlcnJvcnMuCisgIHMvXjEgZXJyb3IgZ2VuZXJhdGVkXC5cbi8vZ207CisKKyAgIyAyLiBOb3JtYWxpemUgdGhlIGxpbmVzIHdlIGtlcHQuCisKKyAgIyBSZW1vdmUgY29sdW1uLgorICBzL14oW146XSs6XGQrKVsuOl1bXjpdKzooLispJC8kMTokMi9nbTsKKyAgIyBNYXAgYWxsIGNvbWJpbmF0aW9ucyBvZiAiZXJyb3I6ICIgYW5kICIjZXJyb3I6ICIgdG8gIiNlcnJvciAiLgorICBzL14oW146XSs6XGQrKTooIHwjZXJyb3J8ZXJyb3J8OikrLyQxOiAjZXJyb3IgL2dtOworRU9GCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgdGVlIHN0ZG91dCA8IiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoxNTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSRhdF90cmFjZW9mZgotZWNobyAic3luY2xpbmVzLmF0Ojk1OiBjYXQgc3Rkb3V0IgotZWNobyBzeW5jbGluZXMuYXQ6OTUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRvdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gImlucHV0Lnk6MjogI2Vycm9yIFwiMlwiCi0iIHwgJGF0X2RpZmYgLSAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJzeW5jbGluZXMuYXQ6OTU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MTUwOiBjYXQgc3Rkb3V0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAic3luY2xpbmVzLmF0OjE1MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3Rkb3V0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiaW5wdXQueToyOiAjZXJyb3IgXCIyXCIKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoxNTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCiAKLSRhdF90cmFjZW9uCi0KLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwotCi0gIDQyICkgIyA0Mi4gc3luY2xpbmVzLmF0OjExNTogJXVuaW9uIHN5bmNoIGxpbmUKLSAgICBhdF9zZXR1cF9saW5lPSdzeW5jbGluZXMuYXQ6MTE1JwotICAgIGF0X2Rlc2M9JyV1bmlvbiBzeW5jaCBsaW5lJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgNDI6ICV1bmlvbiBzeW5jaCBsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICI0Mi4gc3luY2xpbmVzLmF0OjExNTogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xMjgKKyNBVF9TVEFSVF8xMjkKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxMjkgJ3N5bmNsaW5lcy5hdDoxNjgnIFwKKyAgIiV1bmlvbiBzeW5jbGluZSIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiA3CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTI5LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogIyBJdCBzZWVtcyBpbXBvc3NpYmxlIHRvIGZpbmQgYSBnZW5lcmljIHNjaGVtZSB0byBjaGVjayB0aGUgbG9jYXRpb24KQEAgLTUwNTksMzIgKzMyMjY3LDI4IEBACiAKIGNhdCA+c3luY2xpbmUuYyA8PCdfQVRFT0YnCiAjZXJyb3IgIjEiCitpbnQgaTsgLyogYXZvaWRzIC1wZWRhbnRpYyB3YXJuaW5nIGFib3V0IGFuIGVtcHR5IHRyYW5zbGF0aW9uIHVuaXQuICovCiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInN5bmNsaW5lcy5hdDoxMTU6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyAtYyBzeW5jbGluZS5jIgotZWNobyBzeW5jbGluZXMuYXQ6MTE1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgc3luY2xpbmUuYyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgKik7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoxNjg6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyAtYyBzeW5jbGluZS5jIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgc3luY2xpbmUuYyIgInN5bmNsaW5lcy5hdDoxNjgiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTIC1jIHN5bmNsaW5lLmMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19za2lwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjE2OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKIAotJGF0X3RyYWNlb24KLQorIyBUcmFuc2Zvcm0gc3RkZXJyIGludG8gc29tZXRoaW5nIGxpa2UgdGhpczoKKyMKKyMgICBpbnB1dC55OjQ6ICNlcnJvciAiNCIKKyMKICMgSW4gY2FzZSBHQ0MgZGlzcGxheXMgY29sdW1uIGluZm9ybWF0aW9uLCBzdHJpcCBpdCBkb3duLgogIwogIyAgIGlucHV0Lnk6NDoyOiAjZXJyb3IgIjQiICAgIG9yCkBAIC01MDkzLDU2ICszMjI5NywxMTAgQEAKICMgPT4KICMgICBpbnB1dC55OjQ6ICNlcnJvciAiNCIKICMKLSRhdF90cmFjZW9mZgotZWNobyAic3luY2xpbmVzLmF0OjExNTogc2VkIC1lICdzL15cXChbXjpdKjpbXjouXSpcXClbLjpdW146XSo6XFwoLipcXClcJC9cXDE6XFwyLycgLWUgJ3MvXlxcKFteOl0qOlteOl0qOlxcKVteI10qXFwoICNlcnJvclxcKS9cXDFcXDIvJyBzdGRlcnIiCi1lY2hvIHN5bmNsaW5lcy5hdDoxMTUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IHNlZCAtZSAncy9eXChbXjpdKjpbXjouXSpcKVsuOl1bXjpdKjpcKC4qXCkkL1wxOlwyLycgLWUgJ3MvXlwoW146XSo6W146XSo6XClbXiNdKlwoICNlcnJvclwpL1wxXDIvJyBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyBzdGRvdXQ6OyB0ZWUgc3Rkb3V0IDwkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJzeW5jbGluZXMuYXQ6MTE1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisjIEl0IG1heSBhbHNvIGlzc3VlIG1vcmUgY29udGV4dCBpbmZvcm1hdGlvbjoKKyMKKyMgICBpbnB1dC55OiBJbiBmdW5jdGlvbiAneXlwYXJzZSc6CisjICAgaW5wdXQueTo4OiAjZXJyb3IgIjgiCisjID0+CisjICAgaW5wdXQueTo0OiAjZXJyb3IgIjgiCisjCisjIFRoZSBtZXNzYWdlIG1heSBpbmNsdWRlIGEgY2FyZXQtZXJyb3IgKGluZGVudGVkIGJ5IEdDQyA0LjgsCisjIG5vdCBieSBjbGFuZyAzLjIpOgorIworIyAgIGlucHV0Lnk6MToyOiBlcnJvcjogI2Vycm9yICIxIgorIyAgICAjZXJyb3IgIjEiCisjICAgICBeCisjCisjIFBvc3NpYmx5IGRpc3RjYyBhZGRzIGl0cyBiaXRzLgorIworIyAgIGRpc3RjY1szMzE4N10gRVJST1I6IGNvbXBpbGUgKG51bGwpIG9uIGxvY2FsaG9zdCBmYWlsZWQKKyMgICBzeW5jbGluZS5jOjE6MjogZXJyb3I6ICNlcnJvciAiMSIKKyMgICBkaXN0Y2NbMzMxODVdIEVSUk9SOiBjb21waWxlIHN5bmNsaW5lLmMgb24gbG9jYWxob3N0IGZhaWxlZAorIworIyBvciBldmVuCisjCisjICAgZGlzdGNjWzM1ODgyXSAoZGNjX2Nvbm5lY3RfYnlfbmFtZSkgRVJST1I6IGZhaWxlZCB0byBsb29rIHVwIGhvc3QgImNocmlzaW1hYyI6IFVua25vd24gaG9zdAorIyAgIGRpc3RjY1szNTg4Ml0gV2FybmluZzogZmFpbGVkIHRvIGRpc3RyaWJ1dGUgaW5wdXQuYyB0byBjaHJpc2ltYWMvNCwgcnVubmluZyBsb2NhbGx5IGluc3RlYWQKKyMKKyMgVGhlIGNvbXBpbGVyIG1pZ2h0IGVuZCBieSB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIGlzc3VlZCAoQ2xhbmcgMy4yKToKKyMKKyMgICAgc3luY2xpbmUuYzoxOjI6IGVycm9yOiAiMSIKKyMgICAgI2Vycm9yICIxIgorIyAgICAgXgorIyAgICAxIGVycm9yIGdlbmVyYXRlZC4KKyMKKyMgV2hlbiBjKysgaXMgdXNlZCB0byBjb21waWxlciBDLCB3ZSBtaWdodCBoYXZlIG1vcmUgbWVzc2FnZXMgKENsYW5nIDMuMik6CisjCisjICAgIGNsYW5nOiB3YXJuaW5nOiB0cmVhdGluZyAnYycgaW5wdXQgYXMgJ2MrKycgd2hlbiBpbiBDKysgbW9kZSwgdGhpcyBiZWhhdmlvciBpcyBkZXByZWNhdGVkCiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MTY4OiBcJFBFUkwgLXAgLTA3NzcgLSBzdGRlcnIgPDxcXEVPRgorICAjIDEuIFJlbW92ZSB1c2VsZXNzIGxpbmVzLgogCi0kYXRfdHJhY2VvbgorICAjIGRpc3RjYyBjbHV0dGVyLgorICBzL15kaXN0Y2NcXFtcXGQrXFxdIC4qXFxuLy9nbTsKKyAgIyBjIHZzLiBjKysuCisgIHMvXmNsYW5nOiB3YXJuaW5nOiB0cmVhdGluZyAnYycgaW5wdXQgYXMgJ2NcXCtcXCsnLipcXG4vL2dtOworICAjIEZ1bmN0aW9uIGNvbnRleHQuCisgIHMvXlteOl0qOiBJbiBmdW5jdGlvbiAnW14nXSsnOlxcbi8vZ207CisgICMgQ2FyZXQgZXJyb3IuCisgIHMvXiAqI2Vycm9yLipcXG4gKlxcXlxcbi8vZ207CisgICMgTnVtYmVyIG9mIGVycm9ycy4KKyAgcy9eMSBlcnJvciBnZW5lcmF0ZWRcXC5cXG4vL2dtOworCisgICMgMi4gTm9ybWFsaXplIHRoZSBsaW5lcyB3ZSBrZXB0LgorCisgICMgUmVtb3ZlIGNvbHVtbi4KKyAgcy9eKFteOl0rOlxcZCspWy46XVteOl0rOiguKylcJC9cJDE6XCQyL2dtOworICAjIE1hcCBhbGwgY29tYmluYXRpb25zIG9mIFwiZXJyb3I6IFwiIGFuZCBcIiNlcnJvcjogXCIgdG8gXCIjZXJyb3IgXCIuCisgIHMvXihbXjpdKzpcXGQrKTooIHwjZXJyb3J8ZXJyb3J8OikrL1wkMTogI2Vycm9yIC9nbTsKK0VPRgorIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAic3luY2xpbmVzLmF0OjE2OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtcCAtMDc3NyAtIHN0ZGVyciA8PFxFT0YKKyAgIyAxLiBSZW1vdmUgdXNlbGVzcyBsaW5lcy4KKworICAjIGRpc3RjYyBjbHV0dGVyLgorICBzL15kaXN0Y2NcW1xkK1xdIC4qXG4vL2dtOworICAjIGMgdnMuIGMrKy4KKyAgcy9eY2xhbmc6IHdhcm5pbmc6IHRyZWF0aW5nICdjJyBpbnB1dCBhcyAnY1wrXCsnLipcbi8vZ207CisgICMgRnVuY3Rpb24gY29udGV4dC4KKyAgcy9eW146XSo6IEluIGZ1bmN0aW9uICdbXiddKyc6XG4vL2dtOworICAjIENhcmV0IGVycm9yLgorICBzL14gKiNlcnJvci4qXG4gKlxeXG4vL2dtOworICAjIE51bWJlciBvZiBlcnJvcnMuCisgIHMvXjEgZXJyb3IgZ2VuZXJhdGVkXC5cbi8vZ207CisKKyAgIyAyLiBOb3JtYWxpemUgdGhlIGxpbmVzIHdlIGtlcHQuCisKKyAgIyBSZW1vdmUgY29sdW1uLgorICBzL14oW146XSs6XGQrKVsuOl1bXjpdKzooLispJC8kMTokMi9nbTsKKyAgIyBNYXAgYWxsIGNvbWJpbmF0aW9ucyBvZiAiZXJyb3I6ICIgYW5kICIjZXJyb3I6ICIgdG8gIiNlcnJvciAiLgorICBzL14oW146XSs6XGQrKTooIHwjZXJyb3J8ZXJyb3J8OikrLyQxOiAjZXJyb3IgL2dtOworRU9GCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgdGVlIHN0ZG91dCA8IiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoxNjgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSRhdF90cmFjZW9mZgotZWNobyAic3luY2xpbmVzLmF0OjExNTogdGVzdCBcIlxgY2F0IHN0ZG91dFxgXCIgPSAnc3luY2xpbmUuYzoxOiAjZXJyb3IgXCIxXCInIHx8IGV4aXQgNzciCi1lY2hvIHN5bmNsaW5lcy5hdDoxMTUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IHRlc3QgImBjYXQgc3Rkb3V0YCIgPSAnc3luY2xpbmUuYzoxOiAjZXJyb3IgIjEiJyB8fCBleGl0IDc3ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInN5bmNsaW5lcy5hdDoxMTU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoxNjg6IHRlc3QgXCJcYGNhdCBzdGRvdXRcYFwiID0gJ3N5bmNsaW5lLmM6MTogI2Vycm9yIFwiMVwiJyB8fCBleGl0IDc3IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAic3luY2xpbmVzLmF0OjE2OCIKKyggJGF0X2NoZWNrX3RyYWNlOyB0ZXN0ICJgY2F0IHN0ZG91dGAiID0gJ3N5bmNsaW5lLmM6MTogI2Vycm9yICIxIicgfHwgZXhpdCA3NworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MTY4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0LnkgPDwnX0FURU9GJwpAQCAtNTE1MSw2MSArMzI0MDksMTE4IEBACiAgIGNoYXIgZHVtbXk7CiB9CiAlewotdm9pZCB5eWVycm9yIChjb25zdCBjaGFyICpzKTsKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CiBpbnQgeXlsZXggKHZvaWQpOwogJX0KICUlCiBleHA6ICcwJzsKKyUlCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJzeW5jbGluZXMuYXQ6MTE1OiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCi1lY2hvIHN5bmNsaW5lcy5hdDoxMTUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJzeW5jbGluZXMuYXQ6MTE1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoxNjg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJzeW5jbGluZXMuYXQ6MTY4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjE2OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjE2ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgInN5bmNsaW5lcy5hdDoxNjgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MTY4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoxNjg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJzeW5jbGluZXMuYXQ6MTY4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoxNjgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MTY4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAic3luY2xpbmVzLmF0OjE2OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MTY4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjE2ODogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAic3luY2xpbmVzLmF0OjE2OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjE2OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSRhdF90cmFjZW9mZgotZWNobyAic3luY2xpbmVzLmF0OjExNTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIC1jIGlucHV0LmMiCi1lY2hvIHN5bmNsaW5lcy5hdDoxMTUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyBpbnB1dC5jICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAqKTs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjE2ODogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIC1jIGlucHV0LmMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyBpbnB1dC5jIiAic3luY2xpbmVzLmF0OjE2OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgaW5wdXQuYworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3NraXAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MTY4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQogCi0kYXRfdHJhY2VvbgotCisjIFRyYW5zZm9ybSBzdGRlcnIgaW50byBzb21ldGhpbmcgbGlrZSB0aGlzOgorIworIyAgIGlucHV0Lnk6NDogI2Vycm9yICI0IgorIwogIyBJbiBjYXNlIEdDQyBkaXNwbGF5cyBjb2x1bW4gaW5mb3JtYXRpb24sIHN0cmlwIGl0IGRvd24uCiAjCiAjICAgaW5wdXQueTo0OjI6ICNlcnJvciAiNCIgICAgb3IKQEAgLTUyMTQsNzIgKzMyNTI5LDEyNiBAQAogIyA9PgogIyAgIGlucHV0Lnk6NDogI2Vycm9yICI0IgogIwotJGF0X3RyYWNlb2ZmCi1lY2hvICJzeW5jbGluZXMuYXQ6MTE1OiBzZWQgLWUgJ3MvXlxcKFteOl0qOlteOi5dKlxcKVsuOl1bXjpdKjpcXCguKlxcKVwkL1xcMTpcXDIvJyAtZSAncy9eXFwoW146XSo6W146XSo6XFwpW14jXSpcXCggI2Vycm9yXFwpL1xcMVxcMi8nIHN0ZGVyciIKLWVjaG8gc3luY2xpbmVzLmF0OjExNSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2Vvbjsgc2VkIC1lICdzL15cKFteOl0qOlteOi5dKlwpWy46XVteOl0qOlwoLipcKSQvXDE6XDIvJyAtZSAncy9eXChbXjpdKjpbXjpdKjpcKVteI10qXCggI2Vycm9yXCkvXDFcMi8nIHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvIHN0ZG91dDo7IHRlZSBzdGRvdXQgPCRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInN5bmNsaW5lcy5hdDoxMTU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyMgSXQgbWF5IGFsc28gaXNzdWUgbW9yZSBjb250ZXh0IGluZm9ybWF0aW9uOgorIworIyAgIGlucHV0Lnk6IEluIGZ1bmN0aW9uICd5eXBhcnNlJzoKKyMgICBpbnB1dC55Ojg6ICNlcnJvciAiOCIKKyMgPT4KKyMgICBpbnB1dC55OjQ6ICNlcnJvciAiOCIKKyMKKyMgVGhlIG1lc3NhZ2UgbWF5IGluY2x1ZGUgYSBjYXJldC1lcnJvciAoaW5kZW50ZWQgYnkgR0NDIDQuOCwKKyMgbm90IGJ5IGNsYW5nIDMuMik6CisjCisjICAgaW5wdXQueToxOjI6IGVycm9yOiAjZXJyb3IgIjEiCisjICAgICNlcnJvciAiMSIKKyMgICAgIF4KKyMKKyMgUG9zc2libHkgZGlzdGNjIGFkZHMgaXRzIGJpdHMuCisjCisjICAgZGlzdGNjWzMzMTg3XSBFUlJPUjogY29tcGlsZSAobnVsbCkgb24gbG9jYWxob3N0IGZhaWxlZAorIyAgIHN5bmNsaW5lLmM6MToyOiBlcnJvcjogI2Vycm9yICIxIgorIyAgIGRpc3RjY1szMzE4NV0gRVJST1I6IGNvbXBpbGUgc3luY2xpbmUuYyBvbiBsb2NhbGhvc3QgZmFpbGVkCisjCisjIG9yIGV2ZW4KKyMKKyMgICBkaXN0Y2NbMzU4ODJdIChkY2NfY29ubmVjdF9ieV9uYW1lKSBFUlJPUjogZmFpbGVkIHRvIGxvb2sgdXAgaG9zdCAiY2hyaXNpbWFjIjogVW5rbm93biBob3N0CisjICAgZGlzdGNjWzM1ODgyXSBXYXJuaW5nOiBmYWlsZWQgdG8gZGlzdHJpYnV0ZSBpbnB1dC5jIHRvIGNocmlzaW1hYy80LCBydW5uaW5nIGxvY2FsbHkgaW5zdGVhZAorIworIyBUaGUgY29tcGlsZXIgbWlnaHQgZW5kIGJ5IHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgaXNzdWVkIChDbGFuZyAzLjIpOgorIworIyAgICBzeW5jbGluZS5jOjE6MjogZXJyb3I6ICIxIgorIyAgICAjZXJyb3IgIjEiCisjICAgICBeCisjICAgIDEgZXJyb3IgZ2VuZXJhdGVkLgorIworIyBXaGVuIGMrKyBpcyB1c2VkIHRvIGNvbXBpbGVyIEMsIHdlIG1pZ2h0IGhhdmUgbW9yZSBtZXNzYWdlcyAoQ2xhbmcgMy4yKToKKyMKKyMgICAgY2xhbmc6IHdhcm5pbmc6IHRyZWF0aW5nICdjJyBpbnB1dCBhcyAnYysrJyB3aGVuIGluIEMrKyBtb2RlLCB0aGlzIGJlaGF2aW9yIGlzIGRlcHJlY2F0ZWQKIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoxNjg6IFwkUEVSTCAtcCAtMDc3NyAtIHN0ZGVyciA8PFxcRU9GCisgICMgMS4gUmVtb3ZlIHVzZWxlc3MgbGluZXMuCiAKLSRhdF90cmFjZW9uCisgICMgZGlzdGNjIGNsdXR0ZXIuCisgIHMvXmRpc3RjY1xcW1xcZCtcXF0gLipcXG4vL2dtOworICAjIGMgdnMuIGMrKy4KKyAgcy9eY2xhbmc6IHdhcm5pbmc6IHRyZWF0aW5nICdjJyBpbnB1dCBhcyAnY1xcK1xcKycuKlxcbi8vZ207CisgICMgRnVuY3Rpb24gY29udGV4dC4KKyAgcy9eW146XSo6IEluIGZ1bmN0aW9uICdbXiddKyc6XFxuLy9nbTsKKyAgIyBDYXJldCBlcnJvci4KKyAgcy9eICojZXJyb3IuKlxcbiAqXFxeXFxuLy9nbTsKKyAgIyBOdW1iZXIgb2YgZXJyb3JzLgorICBzL14xIGVycm9yIGdlbmVyYXRlZFxcLlxcbi8vZ207CisKKyAgIyAyLiBOb3JtYWxpemUgdGhlIGxpbmVzIHdlIGtlcHQuCisKKyAgIyBSZW1vdmUgY29sdW1uLgorICBzL14oW146XSs6XFxkKylbLjpdW146XSs6KC4rKVwkL1wkMTpcJDIvZ207CisgICMgTWFwIGFsbCBjb21iaW5hdGlvbnMgb2YgXCJlcnJvcjogXCIgYW5kIFwiI2Vycm9yOiBcIiB0byBcIiNlcnJvciBcIi4KKyAgcy9eKFteOl0rOlxcZCspOiggfCNlcnJvcnxlcnJvcnw6KSsvXCQxOiAjZXJyb3IgL2dtOworRU9GCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJzeW5jbGluZXMuYXQ6MTY4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1wIC0wNzc3IC0gc3RkZXJyIDw8XEVPRgorICAjIDEuIFJlbW92ZSB1c2VsZXNzIGxpbmVzLgorCisgICMgZGlzdGNjIGNsdXR0ZXIuCisgIHMvXmRpc3RjY1xbXGQrXF0gLipcbi8vZ207CisgICMgYyB2cy4gYysrLgorICBzL15jbGFuZzogd2FybmluZzogdHJlYXRpbmcgJ2MnIGlucHV0IGFzICdjXCtcKycuKlxuLy9nbTsKKyAgIyBGdW5jdGlvbiBjb250ZXh0LgorICBzL15bXjpdKjogSW4gZnVuY3Rpb24gJ1teJ10rJzpcbi8vZ207CisgICMgQ2FyZXQgZXJyb3IuCisgIHMvXiAqI2Vycm9yLipcbiAqXF5cbi8vZ207CisgICMgTnVtYmVyIG9mIGVycm9ycy4KKyAgcy9eMSBlcnJvciBnZW5lcmF0ZWRcLlxuLy9nbTsKKworICAjIDIuIE5vcm1hbGl6ZSB0aGUgbGluZXMgd2Uga2VwdC4KKworICAjIFJlbW92ZSBjb2x1bW4uCisgIHMvXihbXjpdKzpcZCspWy46XVteOl0rOiguKykkLyQxOiQyL2dtOworICAjIE1hcCBhbGwgY29tYmluYXRpb25zIG9mICJlcnJvcjogIiBhbmQgIiNlcnJvcjogIiB0byAiI2Vycm9yICIuCisgIHMvXihbXjpdKzpcZCspOiggfCNlcnJvcnxlcnJvcnw6KSsvJDE6ICNlcnJvciAvZ207CitFT0YKKworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyB0ZWUgc3Rkb3V0IDwiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjE2OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJzeW5jbGluZXMuYXQ6MTE1OiBjYXQgc3Rkb3V0IgotZWNobyBzeW5jbGluZXMuYXQ6MTE1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3Rkb3V0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gPj4kYXRfc3Rkb3V0OyBlY2hvICJpbnB1dC55OjI6ICNlcnJvciBcIjJcIgotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAic3luY2xpbmVzLmF0OjExNTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoxNjg6IGNhdCBzdGRvdXQiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJzeW5jbGluZXMuYXQ6MTY4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRvdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJpbnB1dC55OjI6ICNlcnJvciBcIjJcIgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjE2OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKIAotJGF0X3RyYWNlb24KLQotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Ci0KLSAgNDMgKSAjIDQzLiBzeW5jbGluZXMuYXQ6MTM4OiBQb3N0cHJvbG9ndWUgc3luY2ggbGluZQotICAgIGF0X3NldHVwX2xpbmU9J3N5bmNsaW5lcy5hdDoxMzgnCi0gICAgYXRfZGVzYz0nUG9zdHByb2xvZ3VlIHN5bmNoIGxpbmUnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiA0MzogUG9zdHByb2xvZ3VlIHN5bmNoIGxpbmUgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjQzLiBzeW5jbGluZXMuYXQ6MTM4OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzEyOQorI0FUX1NUQVJUXzEzMAorYXRfZm5fZ3JvdXBfYmFubmVyIDEzMCAnc3luY2xpbmVzLmF0OjE4OScgXAorICAiUG9zdHByb2xvZ3VlIHN5bmNsaW5lIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAiIDcKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxMzAuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiAjIEl0IHNlZW1zIGltcG9zc2libGUgdG8gZmluZCBhIGdlbmVyaWMgc2NoZW1lIHRvIGNoZWNrIHRoZSBsb2NhdGlvbgpAQCAtNTMwMSwzMiArMzI2NzAsMjggQEAKIAogY2F0ID5zeW5jbGluZS5jIDw8J19BVEVPRicKICNlcnJvciAiMSIKK2ludCBpOyAvKiBhdm9pZHMgLXBlZGFudGljIHdhcm5pbmcgYWJvdXQgYW4gZW1wdHkgdHJhbnNsYXRpb24gdW5pdC4gKi8KIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAic3luY2xpbmVzLmF0OjEzODogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIC1jIHN5bmNsaW5lLmMiCi1lY2hvIHN5bmNsaW5lcy5hdDoxMzggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyBzeW5jbGluZS5jICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAqKTs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjE4OTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIC1jIHN5bmNsaW5lLmMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyBzeW5jbGluZS5jIiAic3luY2xpbmVzLmF0OjE4OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgc3luY2xpbmUuYworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3NraXAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MTg5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQogCi0kYXRfdHJhY2VvbgotCisjIFRyYW5zZm9ybSBzdGRlcnIgaW50byBzb21ldGhpbmcgbGlrZSB0aGlzOgorIworIyAgIGlucHV0Lnk6NDogI2Vycm9yICI0IgorIwogIyBJbiBjYXNlIEdDQyBkaXNwbGF5cyBjb2x1bW4gaW5mb3JtYXRpb24sIHN0cmlwIGl0IGRvd24uCiAjCiAjICAgaW5wdXQueTo0OjI6ICNlcnJvciAiNCIgICAgb3IKQEAgLTUzMzUsNjEgKzMyNzAwLDExNSBAQAogIyA9PgogIyAgIGlucHV0Lnk6NDogI2Vycm9yICI0IgogIwotJGF0X3RyYWNlb2ZmCi1lY2hvICJzeW5jbGluZXMuYXQ6MTM4OiBzZWQgLWUgJ3MvXlxcKFteOl0qOlteOi5dKlxcKVsuOl1bXjpdKjpcXCguKlxcKVwkL1xcMTpcXDIvJyAtZSAncy9eXFwoW146XSo6W146XSo6XFwpW14jXSpcXCggI2Vycm9yXFwpL1xcMVxcMi8nIHN0ZGVyciIKLWVjaG8gc3luY2xpbmVzLmF0OjEzOCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2Vvbjsgc2VkIC1lICdzL15cKFteOl0qOlteOi5dKlwpWy46XVteOl0qOlwoLipcKSQvXDE6XDIvJyAtZSAncy9eXChbXjpdKjpbXjpdKjpcKVteI10qXCggI2Vycm9yXCkvXDFcMi8nIHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvIHN0ZG91dDo7IHRlZSBzdGRvdXQgPCRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInN5bmNsaW5lcy5hdDoxMzg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyMgSXQgbWF5IGFsc28gaXNzdWUgbW9yZSBjb250ZXh0IGluZm9ybWF0aW9uOgorIworIyAgIGlucHV0Lnk6IEluIGZ1bmN0aW9uICd5eXBhcnNlJzoKKyMgICBpbnB1dC55Ojg6ICNlcnJvciAiOCIKKyMgPT4KKyMgICBpbnB1dC55OjQ6ICNlcnJvciAiOCIKKyMKKyMgVGhlIG1lc3NhZ2UgbWF5IGluY2x1ZGUgYSBjYXJldC1lcnJvciAoaW5kZW50ZWQgYnkgR0NDIDQuOCwKKyMgbm90IGJ5IGNsYW5nIDMuMik6CisjCisjICAgaW5wdXQueToxOjI6IGVycm9yOiAjZXJyb3IgIjEiCisjICAgICNlcnJvciAiMSIKKyMgICAgIF4KKyMKKyMgUG9zc2libHkgZGlzdGNjIGFkZHMgaXRzIGJpdHMuCisjCisjICAgZGlzdGNjWzMzMTg3XSBFUlJPUjogY29tcGlsZSAobnVsbCkgb24gbG9jYWxob3N0IGZhaWxlZAorIyAgIHN5bmNsaW5lLmM6MToyOiBlcnJvcjogI2Vycm9yICIxIgorIyAgIGRpc3RjY1szMzE4NV0gRVJST1I6IGNvbXBpbGUgc3luY2xpbmUuYyBvbiBsb2NhbGhvc3QgZmFpbGVkCisjCisjIG9yIGV2ZW4KKyMKKyMgICBkaXN0Y2NbMzU4ODJdIChkY2NfY29ubmVjdF9ieV9uYW1lKSBFUlJPUjogZmFpbGVkIHRvIGxvb2sgdXAgaG9zdCAiY2hyaXNpbWFjIjogVW5rbm93biBob3N0CisjICAgZGlzdGNjWzM1ODgyXSBXYXJuaW5nOiBmYWlsZWQgdG8gZGlzdHJpYnV0ZSBpbnB1dC5jIHRvIGNocmlzaW1hYy80LCBydW5uaW5nIGxvY2FsbHkgaW5zdGVhZAorIworIyBUaGUgY29tcGlsZXIgbWlnaHQgZW5kIGJ5IHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgaXNzdWVkIChDbGFuZyAzLjIpOgorIworIyAgICBzeW5jbGluZS5jOjE6MjogZXJyb3I6ICIxIgorIyAgICAjZXJyb3IgIjEiCisjICAgICBeCisjICAgIDEgZXJyb3IgZ2VuZXJhdGVkLgorIworIyBXaGVuIGMrKyBpcyB1c2VkIHRvIGNvbXBpbGVyIEMsIHdlIG1pZ2h0IGhhdmUgbW9yZSBtZXNzYWdlcyAoQ2xhbmcgMy4yKToKKyMKKyMgICAgY2xhbmc6IHdhcm5pbmc6IHRyZWF0aW5nICdjJyBpbnB1dCBhcyAnYysrJyB3aGVuIGluIEMrKyBtb2RlLCB0aGlzIGJlaGF2aW9yIGlzIGRlcHJlY2F0ZWQKIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoxODk6IFwkUEVSTCAtcCAtMDc3NyAtIHN0ZGVyciA8PFxcRU9GCisgICMgMS4gUmVtb3ZlIHVzZWxlc3MgbGluZXMuCiAKLSRhdF90cmFjZW9uCisgICMgZGlzdGNjIGNsdXR0ZXIuCisgIHMvXmRpc3RjY1xcW1xcZCtcXF0gLipcXG4vL2dtOworICAjIGMgdnMuIGMrKy4KKyAgcy9eY2xhbmc6IHdhcm5pbmc6IHRyZWF0aW5nICdjJyBpbnB1dCBhcyAnY1xcK1xcKycuKlxcbi8vZ207CisgICMgRnVuY3Rpb24gY29udGV4dC4KKyAgcy9eW146XSo6IEluIGZ1bmN0aW9uICdbXiddKyc6XFxuLy9nbTsKKyAgIyBDYXJldCBlcnJvci4KKyAgcy9eICojZXJyb3IuKlxcbiAqXFxeXFxuLy9nbTsKKyAgIyBOdW1iZXIgb2YgZXJyb3JzLgorICBzL14xIGVycm9yIGdlbmVyYXRlZFxcLlxcbi8vZ207CisKKyAgIyAyLiBOb3JtYWxpemUgdGhlIGxpbmVzIHdlIGtlcHQuCisKKyAgIyBSZW1vdmUgY29sdW1uLgorICBzL14oW146XSs6XFxkKylbLjpdW146XSs6KC4rKVwkL1wkMTpcJDIvZ207CisgICMgTWFwIGFsbCBjb21iaW5hdGlvbnMgb2YgXCJlcnJvcjogXCIgYW5kIFwiI2Vycm9yOiBcIiB0byBcIiNlcnJvciBcIi4KKyAgcy9eKFteOl0rOlxcZCspOiggfCNlcnJvcnxlcnJvcnw6KSsvXCQxOiAjZXJyb3IgL2dtOworRU9GCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJzeW5jbGluZXMuYXQ6MTg5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1wIC0wNzc3IC0gc3RkZXJyIDw8XEVPRgorICAjIDEuIFJlbW92ZSB1c2VsZXNzIGxpbmVzLgorCisgICMgZGlzdGNjIGNsdXR0ZXIuCisgIHMvXmRpc3RjY1xbXGQrXF0gLipcbi8vZ207CisgICMgYyB2cy4gYysrLgorICBzL15jbGFuZzogd2FybmluZzogdHJlYXRpbmcgJ2MnIGlucHV0IGFzICdjXCtcKycuKlxuLy9nbTsKKyAgIyBGdW5jdGlvbiBjb250ZXh0LgorICBzL15bXjpdKjogSW4gZnVuY3Rpb24gJ1teJ10rJzpcbi8vZ207CisgICMgQ2FyZXQgZXJyb3IuCisgIHMvXiAqI2Vycm9yLipcbiAqXF5cbi8vZ207CisgICMgTnVtYmVyIG9mIGVycm9ycy4KKyAgcy9eMSBlcnJvciBnZW5lcmF0ZWRcLlxuLy9nbTsKKworICAjIDIuIE5vcm1hbGl6ZSB0aGUgbGluZXMgd2Uga2VwdC4KKworICAjIFJlbW92ZSBjb2x1bW4uCisgIHMvXihbXjpdKzpcZCspWy46XVteOl0rOiguKykkLyQxOiQyL2dtOworICAjIE1hcCBhbGwgY29tYmluYXRpb25zIG9mICJlcnJvcjogIiBhbmQgIiNlcnJvcjogIiB0byAiI2Vycm9yICIuCisgIHMvXihbXjpdKzpcZCspOiggfCNlcnJvcnxlcnJvcnw6KSsvJDE6ICNlcnJvciAvZ207CitFT0YKKworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyB0ZWUgc3Rkb3V0IDwiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjE4OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJzeW5jbGluZXMuYXQ6MTM4OiB0ZXN0IFwiXGBjYXQgc3Rkb3V0XGBcIiA9ICdzeW5jbGluZS5jOjE6ICNlcnJvciBcIjFcIicgfHwgZXhpdCA3NyIKLWVjaG8gc3luY2xpbmVzLmF0OjEzOCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgdGVzdCAiYGNhdCBzdGRvdXRgIiA9ICdzeW5jbGluZS5jOjE6ICNlcnJvciAiMSInIHx8IGV4aXQgNzcgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAic3luY2xpbmVzLmF0OjEzODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjE4OTogdGVzdCBcIlxgY2F0IHN0ZG91dFxgXCIgPSAnc3luY2xpbmUuYzoxOiAjZXJyb3IgXCIxXCInIHx8IGV4aXQgNzciCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJzeW5jbGluZXMuYXQ6MTg5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHRlc3QgImBjYXQgc3Rkb3V0YCIgPSAnc3luY2xpbmUuYzoxOiAjZXJyb3IgIjEiJyB8fCBleGl0IDc3CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoxODkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQueSA8PCdfQVRFT0YnCiAlewotdm9pZCB5eWVycm9yIChjb25zdCBjaGFyICpzKTsKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CiBpbnQgeXlsZXggKHZvaWQpOwogJX0KICV1bmlvbgpAQCAtNTQwMSw1NiArMzI4MjAsMTEzIEBACiAlfQogJSUKIGV4cDogJzAnOworJSUKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInN5bmNsaW5lcy5hdDoxMzg6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKLWVjaG8gc3luY2xpbmVzLmF0OjEzOCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInN5bmNsaW5lcy5hdDoxMzg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjE4OTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInN5bmNsaW5lcy5hdDoxODkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MTg5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MTg5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IiAic3luY2xpbmVzLmF0OjE4OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoxODkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjE4OTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInN5bmNsaW5lcy5hdDoxODkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjE4OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoxODk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJzeW5jbGluZXMuYXQ6MTg5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoxODkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MTg5OiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJzeW5jbGluZXMuYXQ6MTg5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MTg5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJzeW5jbGluZXMuYXQ6MTM4OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgLWMgaW5wdXQuYyIKLWVjaG8gc3luY2xpbmVzLmF0OjEzOCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTIC1jIGlucHV0LmMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgICopOzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MTg5OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgLWMgaW5wdXQuYyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTIC1jIGlucHV0LmMiICJzeW5jbGluZXMuYXQ6MTg5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyBpbnB1dC5jCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc2tpcCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoxODkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCiAKLSRhdF90cmFjZW9uCi0KKyMgVHJhbnNmb3JtIHN0ZGVyciBpbnRvIHNvbWV0aGluZyBsaWtlIHRoaXM6CisjCisjICAgaW5wdXQueTo0OiAjZXJyb3IgIjQiCisjCiAjIEluIGNhc2UgR0NDIGRpc3BsYXlzIGNvbHVtbiBpbmZvcm1hdGlvbiwgc3RyaXAgaXQgZG93bi4KICMKICMgICBpbnB1dC55OjQ6MjogI2Vycm9yICI0IiAgICBvcgpAQCAtNTQ1OSw3MiArMzI5MzUsMTI2IEBACiAjID0+CiAjICAgaW5wdXQueTo0OiAjZXJyb3IgIjQiCiAjCi0kYXRfdHJhY2VvZmYKLWVjaG8gInN5bmNsaW5lcy5hdDoxMzg6IHNlZCAtZSAncy9eXFwoW146XSo6W146Ll0qXFwpWy46XVteOl0qOlxcKC4qXFwpXCQvXFwxOlxcMi8nIC1lICdzL15cXChbXjpdKjpbXjpdKjpcXClbXiNdKlxcKCAjZXJyb3JcXCkvXFwxXFwyLycgc3RkZXJyIgotZWNobyBzeW5jbGluZXMuYXQ6MTM4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBzZWQgLWUgJ3MvXlwoW146XSo6W146Ll0qXClbLjpdW146XSo6XCguKlwpJC9cMTpcMi8nIC1lICdzL15cKFteOl0qOlteOl0qOlwpW14jXSpcKCAjZXJyb3JcKS9cMVwyLycgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gc3Rkb3V0OjsgdGVlIHN0ZG91dCA8JGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAic3luY2xpbmVzLmF0OjEzODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgorIyBJdCBtYXkgYWxzbyBpc3N1ZSBtb3JlIGNvbnRleHQgaW5mb3JtYXRpb246CisjCisjICAgaW5wdXQueTogSW4gZnVuY3Rpb24gJ3l5cGFyc2UnOgorIyAgIGlucHV0Lnk6ODogI2Vycm9yICI4IgorIyA9PgorIyAgIGlucHV0Lnk6NDogI2Vycm9yICI4IgorIworIyBUaGUgbWVzc2FnZSBtYXkgaW5jbHVkZSBhIGNhcmV0LWVycm9yIChpbmRlbnRlZCBieSBHQ0MgNC44LAorIyBub3QgYnkgY2xhbmcgMy4yKToKKyMKKyMgICBpbnB1dC55OjE6MjogZXJyb3I6ICNlcnJvciAiMSIKKyMgICAgI2Vycm9yICIxIgorIyAgICAgXgorIworIyBQb3NzaWJseSBkaXN0Y2MgYWRkcyBpdHMgYml0cy4KKyMKKyMgICBkaXN0Y2NbMzMxODddIEVSUk9SOiBjb21waWxlIChudWxsKSBvbiBsb2NhbGhvc3QgZmFpbGVkCisjICAgc3luY2xpbmUuYzoxOjI6IGVycm9yOiAjZXJyb3IgIjEiCisjICAgZGlzdGNjWzMzMTg1XSBFUlJPUjogY29tcGlsZSBzeW5jbGluZS5jIG9uIGxvY2FsaG9zdCBmYWlsZWQKKyMKKyMgb3IgZXZlbgorIworIyAgIGRpc3RjY1szNTg4Ml0gKGRjY19jb25uZWN0X2J5X25hbWUpIEVSUk9SOiBmYWlsZWQgdG8gbG9vayB1cCBob3N0ICJjaHJpc2ltYWMiOiBVbmtub3duIGhvc3QKKyMgICBkaXN0Y2NbMzU4ODJdIFdhcm5pbmc6IGZhaWxlZCB0byBkaXN0cmlidXRlIGlucHV0LmMgdG8gY2hyaXNpbWFjLzQsIHJ1bm5pbmcgbG9jYWxseSBpbnN0ZWFkCisjCisjIFRoZSBjb21waWxlciBtaWdodCBlbmQgYnkgdGhlIG51bWJlciBvZiBtZXNzYWdlcyBpc3N1ZWQgKENsYW5nIDMuMik6CisjCisjICAgIHN5bmNsaW5lLmM6MToyOiBlcnJvcjogIjEiCisjICAgICNlcnJvciAiMSIKKyMgICAgIF4KKyMgICAgMSBlcnJvciBnZW5lcmF0ZWQuCisjCisjIFdoZW4gYysrIGlzIHVzZWQgdG8gY29tcGlsZXIgQywgd2UgbWlnaHQgaGF2ZSBtb3JlIG1lc3NhZ2VzIChDbGFuZyAzLjIpOgorIworIyAgICBjbGFuZzogd2FybmluZzogdHJlYXRpbmcgJ2MnIGlucHV0IGFzICdjKysnIHdoZW4gaW4gQysrIG1vZGUsIHRoaXMgYmVoYXZpb3IgaXMgZGVwcmVjYXRlZAogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjE4OTogXCRQRVJMIC1wIC0wNzc3IC0gc3RkZXJyIDw8XFxFT0YKKyAgIyAxLiBSZW1vdmUgdXNlbGVzcyBsaW5lcy4KIAotJGF0X3RyYWNlb24KKyAgIyBkaXN0Y2MgY2x1dHRlci4KKyAgcy9eZGlzdGNjXFxbXFxkK1xcXSAuKlxcbi8vZ207CisgICMgYyB2cy4gYysrLgorICBzL15jbGFuZzogd2FybmluZzogdHJlYXRpbmcgJ2MnIGlucHV0IGFzICdjXFwrXFwrJy4qXFxuLy9nbTsKKyAgIyBGdW5jdGlvbiBjb250ZXh0LgorICBzL15bXjpdKjogSW4gZnVuY3Rpb24gJ1teJ10rJzpcXG4vL2dtOworICAjIENhcmV0IGVycm9yLgorICBzL14gKiNlcnJvci4qXFxuICpcXF5cXG4vL2dtOworICAjIE51bWJlciBvZiBlcnJvcnMuCisgIHMvXjEgZXJyb3IgZ2VuZXJhdGVkXFwuXFxuLy9nbTsKKworICAjIDIuIE5vcm1hbGl6ZSB0aGUgbGluZXMgd2Uga2VwdC4KKworICAjIFJlbW92ZSBjb2x1bW4uCisgIHMvXihbXjpdKzpcXGQrKVsuOl1bXjpdKzooLispXCQvXCQxOlwkMi9nbTsKKyAgIyBNYXAgYWxsIGNvbWJpbmF0aW9ucyBvZiBcImVycm9yOiBcIiBhbmQgXCIjZXJyb3I6IFwiIHRvIFwiI2Vycm9yIFwiLgorICBzL14oW146XSs6XFxkKyk6KCB8I2Vycm9yfGVycm9yfDopKy9cJDE6ICNlcnJvciAvZ207CitFT0YKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInN5bmNsaW5lcy5hdDoxODkiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLXAgLTA3NzcgLSBzdGRlcnIgPDxcRU9GCisgICMgMS4gUmVtb3ZlIHVzZWxlc3MgbGluZXMuCisKKyAgIyBkaXN0Y2MgY2x1dHRlci4KKyAgcy9eZGlzdGNjXFtcZCtcXSAuKlxuLy9nbTsKKyAgIyBjIHZzLiBjKysuCisgIHMvXmNsYW5nOiB3YXJuaW5nOiB0cmVhdGluZyAnYycgaW5wdXQgYXMgJ2NcK1wrJy4qXG4vL2dtOworICAjIEZ1bmN0aW9uIGNvbnRleHQuCisgIHMvXlteOl0qOiBJbiBmdW5jdGlvbiAnW14nXSsnOlxuLy9nbTsKKyAgIyBDYXJldCBlcnJvci4KKyAgcy9eICojZXJyb3IuKlxuICpcXlxuLy9nbTsKKyAgIyBOdW1iZXIgb2YgZXJyb3JzLgorICBzL14xIGVycm9yIGdlbmVyYXRlZFwuXG4vL2dtOworCisgICMgMi4gTm9ybWFsaXplIHRoZSBsaW5lcyB3ZSBrZXB0LgorCisgICMgUmVtb3ZlIGNvbHVtbi4KKyAgcy9eKFteOl0rOlxkKylbLjpdW146XSs6KC4rKSQvJDE6JDIvZ207CisgICMgTWFwIGFsbCBjb21iaW5hdGlvbnMgb2YgImVycm9yOiAiIGFuZCAiI2Vycm9yOiAiIHRvICIjZXJyb3IgIi4KKyAgcy9eKFteOl0rOlxkKyk6KCB8I2Vycm9yfGVycm9yfDopKy8kMTogI2Vycm9yIC9nbTsKK0VPRgorCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IHRlZSBzdGRvdXQgPCIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MTg5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInN5bmNsaW5lcy5hdDoxMzg6IGNhdCBzdGRvdXQiCi1lY2hvIHN5bmNsaW5lcy5hdDoxMzggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRvdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gImlucHV0Lnk6MTA6ICNlcnJvciBcIjEwXCIKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInN5bmNsaW5lcy5hdDoxMzg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MTg5OiBjYXQgc3Rkb3V0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAic3luY2xpbmVzLmF0OjE4OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3Rkb3V0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiaW5wdXQueToxMDogI2Vycm9yIFwiMTBcIgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjE4OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKIAotJGF0X3RyYWNlb24KLQotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Ci0KLSAgNDQgKSAjIDQ0LiBzeW5jbGluZXMuYXQ6MTU3OiBBY3Rpb24gc3luY2ggbGluZQotICAgIGF0X3NldHVwX2xpbmU9J3N5bmNsaW5lcy5hdDoxNTcnCi0gICAgYXRfZGVzYz0nQWN0aW9uIHN5bmNoIGxpbmUnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiA0NDogQWN0aW9uIHN5bmNoIGxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjQ0LiBzeW5jbGluZXMuYXQ6MTU3OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzEzMAorI0FUX1NUQVJUXzEzMQorYXRfZm5fZ3JvdXBfYmFubmVyIDEzMSAnc3luY2xpbmVzLmF0OjIxMycgXAorICAiQWN0aW9uIHN5bmNsaW5lIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDcKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxMzEuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiAjIEl0IHNlZW1zIGltcG9zc2libGUgdG8gZmluZCBhIGdlbmVyaWMgc2NoZW1lIHRvIGNoZWNrIHRoZSBsb2NhdGlvbgpAQCAtNTU0NiwzMiArMzMwNzYsMjggQEAKIAogY2F0ID5zeW5jbGluZS5jIDw8J19BVEVPRicKICNlcnJvciAiMSIKK2ludCBpOyAvKiBhdm9pZHMgLXBlZGFudGljIHdhcm5pbmcgYWJvdXQgYW4gZW1wdHkgdHJhbnNsYXRpb24gdW5pdC4gKi8KIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAic3luY2xpbmVzLmF0OjE1NzogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIC1jIHN5bmNsaW5lLmMiCi1lY2hvIHN5bmNsaW5lcy5hdDoxNTcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyBzeW5jbGluZS5jICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAqKTs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjIxMzogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIC1jIHN5bmNsaW5lLmMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyBzeW5jbGluZS5jIiAic3luY2xpbmVzLmF0OjIxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgc3luY2xpbmUuYworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3NraXAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjEzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQogCi0kYXRfdHJhY2VvbgotCisjIFRyYW5zZm9ybSBzdGRlcnIgaW50byBzb21ldGhpbmcgbGlrZSB0aGlzOgorIworIyAgIGlucHV0Lnk6NDogI2Vycm9yICI0IgorIwogIyBJbiBjYXNlIEdDQyBkaXNwbGF5cyBjb2x1bW4gaW5mb3JtYXRpb24sIHN0cmlwIGl0IGRvd24uCiAjCiAjICAgaW5wdXQueTo0OjI6ICNlcnJvciAiNCIgICAgb3IKQEAgLTU1ODAsNjEgKzMzMTA2LDExNSBAQAogIyA9PgogIyAgIGlucHV0Lnk6NDogI2Vycm9yICI0IgogIwotJGF0X3RyYWNlb2ZmCi1lY2hvICJzeW5jbGluZXMuYXQ6MTU3OiBzZWQgLWUgJ3MvXlxcKFteOl0qOlteOi5dKlxcKVsuOl1bXjpdKjpcXCguKlxcKVwkL1xcMTpcXDIvJyAtZSAncy9eXFwoW146XSo6W146XSo6XFwpW14jXSpcXCggI2Vycm9yXFwpL1xcMVxcMi8nIHN0ZGVyciIKLWVjaG8gc3luY2xpbmVzLmF0OjE1NyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2Vvbjsgc2VkIC1lICdzL15cKFteOl0qOlteOi5dKlwpWy46XVteOl0qOlwoLipcKSQvXDE6XDIvJyAtZSAncy9eXChbXjpdKjpbXjpdKjpcKVteI10qXCggI2Vycm9yXCkvXDFcMi8nIHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvIHN0ZG91dDo7IHRlZSBzdGRvdXQgPCRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInN5bmNsaW5lcy5hdDoxNTc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyMgSXQgbWF5IGFsc28gaXNzdWUgbW9yZSBjb250ZXh0IGluZm9ybWF0aW9uOgorIworIyAgIGlucHV0Lnk6IEluIGZ1bmN0aW9uICd5eXBhcnNlJzoKKyMgICBpbnB1dC55Ojg6ICNlcnJvciAiOCIKKyMgPT4KKyMgICBpbnB1dC55OjQ6ICNlcnJvciAiOCIKKyMKKyMgVGhlIG1lc3NhZ2UgbWF5IGluY2x1ZGUgYSBjYXJldC1lcnJvciAoaW5kZW50ZWQgYnkgR0NDIDQuOCwKKyMgbm90IGJ5IGNsYW5nIDMuMik6CisjCisjICAgaW5wdXQueToxOjI6IGVycm9yOiAjZXJyb3IgIjEiCisjICAgICNlcnJvciAiMSIKKyMgICAgIF4KKyMKKyMgUG9zc2libHkgZGlzdGNjIGFkZHMgaXRzIGJpdHMuCisjCisjICAgZGlzdGNjWzMzMTg3XSBFUlJPUjogY29tcGlsZSAobnVsbCkgb24gbG9jYWxob3N0IGZhaWxlZAorIyAgIHN5bmNsaW5lLmM6MToyOiBlcnJvcjogI2Vycm9yICIxIgorIyAgIGRpc3RjY1szMzE4NV0gRVJST1I6IGNvbXBpbGUgc3luY2xpbmUuYyBvbiBsb2NhbGhvc3QgZmFpbGVkCisjCisjIG9yIGV2ZW4KKyMKKyMgICBkaXN0Y2NbMzU4ODJdIChkY2NfY29ubmVjdF9ieV9uYW1lKSBFUlJPUjogZmFpbGVkIHRvIGxvb2sgdXAgaG9zdCAiY2hyaXNpbWFjIjogVW5rbm93biBob3N0CisjICAgZGlzdGNjWzM1ODgyXSBXYXJuaW5nOiBmYWlsZWQgdG8gZGlzdHJpYnV0ZSBpbnB1dC5jIHRvIGNocmlzaW1hYy80LCBydW5uaW5nIGxvY2FsbHkgaW5zdGVhZAorIworIyBUaGUgY29tcGlsZXIgbWlnaHQgZW5kIGJ5IHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgaXNzdWVkIChDbGFuZyAzLjIpOgorIworIyAgICBzeW5jbGluZS5jOjE6MjogZXJyb3I6ICIxIgorIyAgICAjZXJyb3IgIjEiCisjICAgICBeCisjICAgIDEgZXJyb3IgZ2VuZXJhdGVkLgorIworIyBXaGVuIGMrKyBpcyB1c2VkIHRvIGNvbXBpbGVyIEMsIHdlIG1pZ2h0IGhhdmUgbW9yZSBtZXNzYWdlcyAoQ2xhbmcgMy4yKToKKyMKKyMgICAgY2xhbmc6IHdhcm5pbmc6IHRyZWF0aW5nICdjJyBpbnB1dCBhcyAnYysrJyB3aGVuIGluIEMrKyBtb2RlLCB0aGlzIGJlaGF2aW9yIGlzIGRlcHJlY2F0ZWQKIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyMTM6IFwkUEVSTCAtcCAtMDc3NyAtIHN0ZGVyciA8PFxcRU9GCisgICMgMS4gUmVtb3ZlIHVzZWxlc3MgbGluZXMuCiAKLSRhdF90cmFjZW9uCisgICMgZGlzdGNjIGNsdXR0ZXIuCisgIHMvXmRpc3RjY1xcW1xcZCtcXF0gLipcXG4vL2dtOworICAjIGMgdnMuIGMrKy4KKyAgcy9eY2xhbmc6IHdhcm5pbmc6IHRyZWF0aW5nICdjJyBpbnB1dCBhcyAnY1xcK1xcKycuKlxcbi8vZ207CisgICMgRnVuY3Rpb24gY29udGV4dC4KKyAgcy9eW146XSo6IEluIGZ1bmN0aW9uICdbXiddKyc6XFxuLy9nbTsKKyAgIyBDYXJldCBlcnJvci4KKyAgcy9eICojZXJyb3IuKlxcbiAqXFxeXFxuLy9nbTsKKyAgIyBOdW1iZXIgb2YgZXJyb3JzLgorICBzL14xIGVycm9yIGdlbmVyYXRlZFxcLlxcbi8vZ207CisKKyAgIyAyLiBOb3JtYWxpemUgdGhlIGxpbmVzIHdlIGtlcHQuCisKKyAgIyBSZW1vdmUgY29sdW1uLgorICBzL14oW146XSs6XFxkKylbLjpdW146XSs6KC4rKVwkL1wkMTpcJDIvZ207CisgICMgTWFwIGFsbCBjb21iaW5hdGlvbnMgb2YgXCJlcnJvcjogXCIgYW5kIFwiI2Vycm9yOiBcIiB0byBcIiNlcnJvciBcIi4KKyAgcy9eKFteOl0rOlxcZCspOiggfCNlcnJvcnxlcnJvcnw6KSsvXCQxOiAjZXJyb3IgL2dtOworRU9GCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJzeW5jbGluZXMuYXQ6MjEzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1wIC0wNzc3IC0gc3RkZXJyIDw8XEVPRgorICAjIDEuIFJlbW92ZSB1c2VsZXNzIGxpbmVzLgorCisgICMgZGlzdGNjIGNsdXR0ZXIuCisgIHMvXmRpc3RjY1xbXGQrXF0gLipcbi8vZ207CisgICMgYyB2cy4gYysrLgorICBzL15jbGFuZzogd2FybmluZzogdHJlYXRpbmcgJ2MnIGlucHV0IGFzICdjXCtcKycuKlxuLy9nbTsKKyAgIyBGdW5jdGlvbiBjb250ZXh0LgorICBzL15bXjpdKjogSW4gZnVuY3Rpb24gJ1teJ10rJzpcbi8vZ207CisgICMgQ2FyZXQgZXJyb3IuCisgIHMvXiAqI2Vycm9yLipcbiAqXF5cbi8vZ207CisgICMgTnVtYmVyIG9mIGVycm9ycy4KKyAgcy9eMSBlcnJvciBnZW5lcmF0ZWRcLlxuLy9nbTsKKworICAjIDIuIE5vcm1hbGl6ZSB0aGUgbGluZXMgd2Uga2VwdC4KKworICAjIFJlbW92ZSBjb2x1bW4uCisgIHMvXihbXjpdKzpcZCspWy46XVteOl0rOiguKykkLyQxOiQyL2dtOworICAjIE1hcCBhbGwgY29tYmluYXRpb25zIG9mICJlcnJvcjogIiBhbmQgIiNlcnJvcjogIiB0byAiI2Vycm9yICIuCisgIHMvXihbXjpdKzpcZCspOiggfCNlcnJvcnxlcnJvcnw6KSsvJDE6ICNlcnJvciAvZ207CitFT0YKKworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyB0ZWUgc3Rkb3V0IDwiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjIxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJzeW5jbGluZXMuYXQ6MTU3OiB0ZXN0IFwiXGBjYXQgc3Rkb3V0XGBcIiA9ICdzeW5jbGluZS5jOjE6ICNlcnJvciBcIjFcIicgfHwgZXhpdCA3NyIKLWVjaG8gc3luY2xpbmVzLmF0OjE1NyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgdGVzdCAiYGNhdCBzdGRvdXRgIiA9ICdzeW5jbGluZS5jOjE6ICNlcnJvciAiMSInIHx8IGV4aXQgNzcgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAic3luY2xpbmVzLmF0OjE1NzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjIxMzogdGVzdCBcIlxgY2F0IHN0ZG91dFxgXCIgPSAnc3luY2xpbmUuYzoxOiAjZXJyb3IgXCIxXCInIHx8IGV4aXQgNzciCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJzeW5jbGluZXMuYXQ6MjEzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHRlc3QgImBjYXQgc3Rkb3V0YCIgPSAnc3luY2xpbmUuYzoxOiAjZXJyb3IgIjEiJyB8fCBleGl0IDc3CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyMTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQueSA8PCdfQVRFT0YnCiAlewotdm9pZCB5eWVycm9yIChjb25zdCBjaGFyICpzKTsKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CiBpbnQgeXlsZXggKHZvaWQpOwogJX0KICUlCkBAIC01NjQ0LDU0ICszMzIyNCwxMTAgQEAKIH07CiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJzeW5jbGluZXMuYXQ6MTU3OiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCi1lY2hvIHN5bmNsaW5lcy5hdDoxNTcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJzeW5jbGluZXMuYXQ6MTU3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyMTM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJzeW5jbGluZXMuYXQ6MjEzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjIxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjIxMzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgInN5bmNsaW5lcy5hdDoyMTMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjEzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyMTM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJzeW5jbGluZXMuYXQ6MjEzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyMTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjEzOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAic3luY2xpbmVzLmF0OjIxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjEzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjIxMzogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAic3luY2xpbmVzLmF0OjIxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjIxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSRhdF90cmFjZW9mZgotZWNobyAic3luY2xpbmVzLmF0OjE1NzogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIC1jIGlucHV0LmMiCi1lY2hvIHN5bmNsaW5lcy5hdDoxNTcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyBpbnB1dC5jICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAqKTs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjIxMzogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIC1jIGlucHV0LmMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyBpbnB1dC5jIiAic3luY2xpbmVzLmF0OjIxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgaW5wdXQuYworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3NraXAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjEzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQogCi0kYXRfdHJhY2VvbgotCisjIFRyYW5zZm9ybSBzdGRlcnIgaW50byBzb21ldGhpbmcgbGlrZSB0aGlzOgorIworIyAgIGlucHV0Lnk6NDogI2Vycm9yICI0IgorIwogIyBJbiBjYXNlIEdDQyBkaXNwbGF5cyBjb2x1bW4gaW5mb3JtYXRpb24sIHN0cmlwIGl0IGRvd24uCiAjCiAjICAgaW5wdXQueTo0OjI6ICNlcnJvciAiNCIgICAgb3IKQEAgLTU3MDAsNzIgKzMzMzM2LDEyNiBAQAogIyA9PgogIyAgIGlucHV0Lnk6NDogI2Vycm9yICI0IgogIwotJGF0X3RyYWNlb2ZmCi1lY2hvICJzeW5jbGluZXMuYXQ6MTU3OiBzZWQgLWUgJ3MvXlxcKFteOl0qOlteOi5dKlxcKVsuOl1bXjpdKjpcXCguKlxcKVwkL1xcMTpcXDIvJyAtZSAncy9eXFwoW146XSo6W146XSo6XFwpW14jXSpcXCggI2Vycm9yXFwpL1xcMVxcMi8nIHN0ZGVyciIKLWVjaG8gc3luY2xpbmVzLmF0OjE1NyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2Vvbjsgc2VkIC1lICdzL15cKFteOl0qOlteOi5dKlwpWy46XVteOl0qOlwoLipcKSQvXDE6XDIvJyAtZSAncy9eXChbXjpdKjpbXjpdKjpcKVteI10qXCggI2Vycm9yXCkvXDFcMi8nIHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvIHN0ZG91dDo7IHRlZSBzdGRvdXQgPCRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInN5bmNsaW5lcy5hdDoxNTc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyMgSXQgbWF5IGFsc28gaXNzdWUgbW9yZSBjb250ZXh0IGluZm9ybWF0aW9uOgorIworIyAgIGlucHV0Lnk6IEluIGZ1bmN0aW9uICd5eXBhcnNlJzoKKyMgICBpbnB1dC55Ojg6ICNlcnJvciAiOCIKKyMgPT4KKyMgICBpbnB1dC55OjQ6ICNlcnJvciAiOCIKKyMKKyMgVGhlIG1lc3NhZ2UgbWF5IGluY2x1ZGUgYSBjYXJldC1lcnJvciAoaW5kZW50ZWQgYnkgR0NDIDQuOCwKKyMgbm90IGJ5IGNsYW5nIDMuMik6CisjCisjICAgaW5wdXQueToxOjI6IGVycm9yOiAjZXJyb3IgIjEiCisjICAgICNlcnJvciAiMSIKKyMgICAgIF4KKyMKKyMgUG9zc2libHkgZGlzdGNjIGFkZHMgaXRzIGJpdHMuCisjCisjICAgZGlzdGNjWzMzMTg3XSBFUlJPUjogY29tcGlsZSAobnVsbCkgb24gbG9jYWxob3N0IGZhaWxlZAorIyAgIHN5bmNsaW5lLmM6MToyOiBlcnJvcjogI2Vycm9yICIxIgorIyAgIGRpc3RjY1szMzE4NV0gRVJST1I6IGNvbXBpbGUgc3luY2xpbmUuYyBvbiBsb2NhbGhvc3QgZmFpbGVkCisjCisjIG9yIGV2ZW4KKyMKKyMgICBkaXN0Y2NbMzU4ODJdIChkY2NfY29ubmVjdF9ieV9uYW1lKSBFUlJPUjogZmFpbGVkIHRvIGxvb2sgdXAgaG9zdCAiY2hyaXNpbWFjIjogVW5rbm93biBob3N0CisjICAgZGlzdGNjWzM1ODgyXSBXYXJuaW5nOiBmYWlsZWQgdG8gZGlzdHJpYnV0ZSBpbnB1dC5jIHRvIGNocmlzaW1hYy80LCBydW5uaW5nIGxvY2FsbHkgaW5zdGVhZAorIworIyBUaGUgY29tcGlsZXIgbWlnaHQgZW5kIGJ5IHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgaXNzdWVkIChDbGFuZyAzLjIpOgorIworIyAgICBzeW5jbGluZS5jOjE6MjogZXJyb3I6ICIxIgorIyAgICAjZXJyb3IgIjEiCisjICAgICBeCisjICAgIDEgZXJyb3IgZ2VuZXJhdGVkLgorIworIyBXaGVuIGMrKyBpcyB1c2VkIHRvIGNvbXBpbGVyIEMsIHdlIG1pZ2h0IGhhdmUgbW9yZSBtZXNzYWdlcyAoQ2xhbmcgMy4yKToKKyMKKyMgICAgY2xhbmc6IHdhcm5pbmc6IHRyZWF0aW5nICdjJyBpbnB1dCBhcyAnYysrJyB3aGVuIGluIEMrKyBtb2RlLCB0aGlzIGJlaGF2aW9yIGlzIGRlcHJlY2F0ZWQKIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyMTM6IFwkUEVSTCAtcCAtMDc3NyAtIHN0ZGVyciA8PFxcRU9GCisgICMgMS4gUmVtb3ZlIHVzZWxlc3MgbGluZXMuCiAKLSRhdF90cmFjZW9uCisgICMgZGlzdGNjIGNsdXR0ZXIuCisgIHMvXmRpc3RjY1xcW1xcZCtcXF0gLipcXG4vL2dtOworICAjIGMgdnMuIGMrKy4KKyAgcy9eY2xhbmc6IHdhcm5pbmc6IHRyZWF0aW5nICdjJyBpbnB1dCBhcyAnY1xcK1xcKycuKlxcbi8vZ207CisgICMgRnVuY3Rpb24gY29udGV4dC4KKyAgcy9eW146XSo6IEluIGZ1bmN0aW9uICdbXiddKyc6XFxuLy9nbTsKKyAgIyBDYXJldCBlcnJvci4KKyAgcy9eICojZXJyb3IuKlxcbiAqXFxeXFxuLy9nbTsKKyAgIyBOdW1iZXIgb2YgZXJyb3JzLgorICBzL14xIGVycm9yIGdlbmVyYXRlZFxcLlxcbi8vZ207CisKKyAgIyAyLiBOb3JtYWxpemUgdGhlIGxpbmVzIHdlIGtlcHQuCisKKyAgIyBSZW1vdmUgY29sdW1uLgorICBzL14oW146XSs6XFxkKylbLjpdW146XSs6KC4rKVwkL1wkMTpcJDIvZ207CisgICMgTWFwIGFsbCBjb21iaW5hdGlvbnMgb2YgXCJlcnJvcjogXCIgYW5kIFwiI2Vycm9yOiBcIiB0byBcIiNlcnJvciBcIi4KKyAgcy9eKFteOl0rOlxcZCspOiggfCNlcnJvcnxlcnJvcnw6KSsvXCQxOiAjZXJyb3IgL2dtOworRU9GCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJzeW5jbGluZXMuYXQ6MjEzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1wIC0wNzc3IC0gc3RkZXJyIDw8XEVPRgorICAjIDEuIFJlbW92ZSB1c2VsZXNzIGxpbmVzLgorCisgICMgZGlzdGNjIGNsdXR0ZXIuCisgIHMvXmRpc3RjY1xbXGQrXF0gLipcbi8vZ207CisgICMgYyB2cy4gYysrLgorICBzL15jbGFuZzogd2FybmluZzogdHJlYXRpbmcgJ2MnIGlucHV0IGFzICdjXCtcKycuKlxuLy9nbTsKKyAgIyBGdW5jdGlvbiBjb250ZXh0LgorICBzL15bXjpdKjogSW4gZnVuY3Rpb24gJ1teJ10rJzpcbi8vZ207CisgICMgQ2FyZXQgZXJyb3IuCisgIHMvXiAqI2Vycm9yLipcbiAqXF5cbi8vZ207CisgICMgTnVtYmVyIG9mIGVycm9ycy4KKyAgcy9eMSBlcnJvciBnZW5lcmF0ZWRcLlxuLy9nbTsKKworICAjIDIuIE5vcm1hbGl6ZSB0aGUgbGluZXMgd2Uga2VwdC4KKworICAjIFJlbW92ZSBjb2x1bW4uCisgIHMvXihbXjpdKzpcZCspWy46XVteOl0rOiguKykkLyQxOiQyL2dtOworICAjIE1hcCBhbGwgY29tYmluYXRpb25zIG9mICJlcnJvcjogIiBhbmQgIiNlcnJvcjogIiB0byAiI2Vycm9yICIuCisgIHMvXihbXjpdKzpcZCspOiggfCNlcnJvcnxlcnJvcnw6KSsvJDE6ICNlcnJvciAvZ207CitFT0YKKworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyB0ZWUgc3Rkb3V0IDwiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjIxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJzeW5jbGluZXMuYXQ6MTU3OiBjYXQgc3Rkb3V0IgotZWNobyBzeW5jbGluZXMuYXQ6MTU3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3Rkb3V0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gPj4kYXRfc3Rkb3V0OyBlY2hvICJpbnB1dC55Ojg6ICNlcnJvciBcIjhcIgotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAic3luY2xpbmVzLmF0OjE1NzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyMTM6IGNhdCBzdGRvdXQiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJzeW5jbGluZXMuYXQ6MjEzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRvdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJpbnB1dC55Ojg6ICNlcnJvciBcIjhcIgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjIxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKIAotJGF0X3RyYWNlb24KLQotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Ci0KLSAgNDUgKSAjIDQ1LiBzeW5jbGluZXMuYXQ6MTc1OiBFcGlsb2d1ZSBzeW5jaCBsaW5lCi0gICAgYXRfc2V0dXBfbGluZT0nc3luY2xpbmVzLmF0OjE3NScKLSAgICBhdF9kZXNjPSdFcGlsb2d1ZSBzeW5jaCBsaW5lJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgNDU6IEVwaWxvZ3VlIHN5bmNoIGxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICI0NS4gc3luY2xpbmVzLmF0OjE3NTogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xMzEKKyNBVF9TVEFSVF8xMzIKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxMzIgJ3N5bmNsaW5lcy5hdDoyMzInIFwKKyAgIkVwaWxvZ3VlIHN5bmNsaW5lIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiA3CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTMyLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogIyBJdCBzZWVtcyBpbXBvc3NpYmxlIHRvIGZpbmQgYSBnZW5lcmljIHNjaGVtZSB0byBjaGVjayB0aGUgbG9jYXRpb24KQEAgLTU3ODcsMzIgKzMzNDc3LDI4IEBACiAKIGNhdCA+c3luY2xpbmUuYyA8PCdfQVRFT0YnCiAjZXJyb3IgIjEiCitpbnQgaTsgLyogYXZvaWRzIC1wZWRhbnRpYyB3YXJuaW5nIGFib3V0IGFuIGVtcHR5IHRyYW5zbGF0aW9uIHVuaXQuICovCiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInN5bmNsaW5lcy5hdDoxNzU6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyAtYyBzeW5jbGluZS5jIgotZWNobyBzeW5jbGluZXMuYXQ6MTc1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgc3luY2xpbmUuYyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgKik7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyMzI6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyAtYyBzeW5jbGluZS5jIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgc3luY2xpbmUuYyIgInN5bmNsaW5lcy5hdDoyMzIiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTIC1jIHN5bmNsaW5lLmMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19za2lwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjIzMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKIAotJGF0X3RyYWNlb24KLQorIyBUcmFuc2Zvcm0gc3RkZXJyIGludG8gc29tZXRoaW5nIGxpa2UgdGhpczoKKyMKKyMgICBpbnB1dC55OjQ6ICNlcnJvciAiNCIKKyMKICMgSW4gY2FzZSBHQ0MgZGlzcGxheXMgY29sdW1uIGluZm9ybWF0aW9uLCBzdHJpcCBpdCBkb3duLgogIwogIyAgIGlucHV0Lnk6NDoyOiAjZXJyb3IgIjQiICAgIG9yCkBAIC01ODIxLDYxICszMzUwNywxMTUgQEAKICMgPT4KICMgICBpbnB1dC55OjQ6ICNlcnJvciAiNCIKICMKLSRhdF90cmFjZW9mZgotZWNobyAic3luY2xpbmVzLmF0OjE3NTogc2VkIC1lICdzL15cXChbXjpdKjpbXjouXSpcXClbLjpdW146XSo6XFwoLipcXClcJC9cXDE6XFwyLycgLWUgJ3MvXlxcKFteOl0qOlteOl0qOlxcKVteI10qXFwoICNlcnJvclxcKS9cXDFcXDIvJyBzdGRlcnIiCi1lY2hvIHN5bmNsaW5lcy5hdDoxNzUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IHNlZCAtZSAncy9eXChbXjpdKjpbXjouXSpcKVsuOl1bXjpdKjpcKC4qXCkkL1wxOlwyLycgLWUgJ3MvXlwoW146XSo6W146XSo6XClbXiNdKlwoICNlcnJvclwpL1wxXDIvJyBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyBzdGRvdXQ6OyB0ZWUgc3Rkb3V0IDwkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJzeW5jbGluZXMuYXQ6MTc1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisjIEl0IG1heSBhbHNvIGlzc3VlIG1vcmUgY29udGV4dCBpbmZvcm1hdGlvbjoKKyMKKyMgICBpbnB1dC55OiBJbiBmdW5jdGlvbiAneXlwYXJzZSc6CisjICAgaW5wdXQueTo4OiAjZXJyb3IgIjgiCisjID0+CisjICAgaW5wdXQueTo0OiAjZXJyb3IgIjgiCisjCisjIFRoZSBtZXNzYWdlIG1heSBpbmNsdWRlIGEgY2FyZXQtZXJyb3IgKGluZGVudGVkIGJ5IEdDQyA0LjgsCisjIG5vdCBieSBjbGFuZyAzLjIpOgorIworIyAgIGlucHV0Lnk6MToyOiBlcnJvcjogI2Vycm9yICIxIgorIyAgICAjZXJyb3IgIjEiCisjICAgICBeCisjCisjIFBvc3NpYmx5IGRpc3RjYyBhZGRzIGl0cyBiaXRzLgorIworIyAgIGRpc3RjY1szMzE4N10gRVJST1I6IGNvbXBpbGUgKG51bGwpIG9uIGxvY2FsaG9zdCBmYWlsZWQKKyMgICBzeW5jbGluZS5jOjE6MjogZXJyb3I6ICNlcnJvciAiMSIKKyMgICBkaXN0Y2NbMzMxODVdIEVSUk9SOiBjb21waWxlIHN5bmNsaW5lLmMgb24gbG9jYWxob3N0IGZhaWxlZAorIworIyBvciBldmVuCisjCisjICAgZGlzdGNjWzM1ODgyXSAoZGNjX2Nvbm5lY3RfYnlfbmFtZSkgRVJST1I6IGZhaWxlZCB0byBsb29rIHVwIGhvc3QgImNocmlzaW1hYyI6IFVua25vd24gaG9zdAorIyAgIGRpc3RjY1szNTg4Ml0gV2FybmluZzogZmFpbGVkIHRvIGRpc3RyaWJ1dGUgaW5wdXQuYyB0byBjaHJpc2ltYWMvNCwgcnVubmluZyBsb2NhbGx5IGluc3RlYWQKKyMKKyMgVGhlIGNvbXBpbGVyIG1pZ2h0IGVuZCBieSB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIGlzc3VlZCAoQ2xhbmcgMy4yKToKKyMKKyMgICAgc3luY2xpbmUuYzoxOjI6IGVycm9yOiAiMSIKKyMgICAgI2Vycm9yICIxIgorIyAgICAgXgorIyAgICAxIGVycm9yIGdlbmVyYXRlZC4KKyMKKyMgV2hlbiBjKysgaXMgdXNlZCB0byBjb21waWxlciBDLCB3ZSBtaWdodCBoYXZlIG1vcmUgbWVzc2FnZXMgKENsYW5nIDMuMik6CisjCisjICAgIGNsYW5nOiB3YXJuaW5nOiB0cmVhdGluZyAnYycgaW5wdXQgYXMgJ2MrKycgd2hlbiBpbiBDKysgbW9kZSwgdGhpcyBiZWhhdmlvciBpcyBkZXByZWNhdGVkCiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjMyOiBcJFBFUkwgLXAgLTA3NzcgLSBzdGRlcnIgPDxcXEVPRgorICAjIDEuIFJlbW92ZSB1c2VsZXNzIGxpbmVzLgogCi0kYXRfdHJhY2VvbgorICAjIGRpc3RjYyBjbHV0dGVyLgorICBzL15kaXN0Y2NcXFtcXGQrXFxdIC4qXFxuLy9nbTsKKyAgIyBjIHZzLiBjKysuCisgIHMvXmNsYW5nOiB3YXJuaW5nOiB0cmVhdGluZyAnYycgaW5wdXQgYXMgJ2NcXCtcXCsnLipcXG4vL2dtOworICAjIEZ1bmN0aW9uIGNvbnRleHQuCisgIHMvXlteOl0qOiBJbiBmdW5jdGlvbiAnW14nXSsnOlxcbi8vZ207CisgICMgQ2FyZXQgZXJyb3IuCisgIHMvXiAqI2Vycm9yLipcXG4gKlxcXlxcbi8vZ207CisgICMgTnVtYmVyIG9mIGVycm9ycy4KKyAgcy9eMSBlcnJvciBnZW5lcmF0ZWRcXC5cXG4vL2dtOworCisgICMgMi4gTm9ybWFsaXplIHRoZSBsaW5lcyB3ZSBrZXB0LgorCisgICMgUmVtb3ZlIGNvbHVtbi4KKyAgcy9eKFteOl0rOlxcZCspWy46XVteOl0rOiguKylcJC9cJDE6XCQyL2dtOworICAjIE1hcCBhbGwgY29tYmluYXRpb25zIG9mIFwiZXJyb3I6IFwiIGFuZCBcIiNlcnJvcjogXCIgdG8gXCIjZXJyb3IgXCIuCisgIHMvXihbXjpdKzpcXGQrKTooIHwjZXJyb3J8ZXJyb3J8OikrL1wkMTogI2Vycm9yIC9nbTsKK0VPRgorIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAic3luY2xpbmVzLmF0OjIzMiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtcCAtMDc3NyAtIHN0ZGVyciA8PFxFT0YKKyAgIyAxLiBSZW1vdmUgdXNlbGVzcyBsaW5lcy4KKworICAjIGRpc3RjYyBjbHV0dGVyLgorICBzL15kaXN0Y2NcW1xkK1xdIC4qXG4vL2dtOworICAjIGMgdnMuIGMrKy4KKyAgcy9eY2xhbmc6IHdhcm5pbmc6IHRyZWF0aW5nICdjJyBpbnB1dCBhcyAnY1wrXCsnLipcbi8vZ207CisgICMgRnVuY3Rpb24gY29udGV4dC4KKyAgcy9eW146XSo6IEluIGZ1bmN0aW9uICdbXiddKyc6XG4vL2dtOworICAjIENhcmV0IGVycm9yLgorICBzL14gKiNlcnJvci4qXG4gKlxeXG4vL2dtOworICAjIE51bWJlciBvZiBlcnJvcnMuCisgIHMvXjEgZXJyb3IgZ2VuZXJhdGVkXC5cbi8vZ207CisKKyAgIyAyLiBOb3JtYWxpemUgdGhlIGxpbmVzIHdlIGtlcHQuCisKKyAgIyBSZW1vdmUgY29sdW1uLgorICBzL14oW146XSs6XGQrKVsuOl1bXjpdKzooLispJC8kMTokMi9nbTsKKyAgIyBNYXAgYWxsIGNvbWJpbmF0aW9ucyBvZiAiZXJyb3I6ICIgYW5kICIjZXJyb3I6ICIgdG8gIiNlcnJvciAiLgorICBzL14oW146XSs6XGQrKTooIHwjZXJyb3J8ZXJyb3J8OikrLyQxOiAjZXJyb3IgL2dtOworRU9GCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgdGVlIHN0ZG91dCA8IiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyMzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSRhdF90cmFjZW9mZgotZWNobyAic3luY2xpbmVzLmF0OjE3NTogdGVzdCBcIlxgY2F0IHN0ZG91dFxgXCIgPSAnc3luY2xpbmUuYzoxOiAjZXJyb3IgXCIxXCInIHx8IGV4aXQgNzciCi1lY2hvIHN5bmNsaW5lcy5hdDoxNzUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IHRlc3QgImBjYXQgc3Rkb3V0YCIgPSAnc3luY2xpbmUuYzoxOiAjZXJyb3IgIjEiJyB8fCBleGl0IDc3ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInN5bmNsaW5lcy5hdDoxNzU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyMzI6IHRlc3QgXCJcYGNhdCBzdGRvdXRcYFwiID0gJ3N5bmNsaW5lLmM6MTogI2Vycm9yIFwiMVwiJyB8fCBleGl0IDc3IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAic3luY2xpbmVzLmF0OjIzMiIKKyggJGF0X2NoZWNrX3RyYWNlOyB0ZXN0ICJgY2F0IHN0ZG91dGAiID0gJ3N5bmNsaW5lLmM6MTogI2Vycm9yICIxIicgfHwgZXhpdCA3NworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjMyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0LnkgPDwnX0FURU9GJwogJXsKLXZvaWQgeXllcnJvciAoY29uc3QgY2hhciAqcyk7Cit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOwogaW50IHl5bGV4ICh2b2lkKTsKICV9CiAlJQpAQCAtNTg4NCw1NCArMzM2MjQsMTEwIEBACiAjZXJyb3IgIjgiCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJzeW5jbGluZXMuYXQ6MTc1OiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCi1lY2hvIHN5bmNsaW5lcy5hdDoxNzUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJzeW5jbGluZXMuYXQ6MTc1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyMzI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJzeW5jbGluZXMuYXQ6MjMyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjIzMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjIzMjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgInN5bmNsaW5lcy5hdDoyMzIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjMyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyMzI6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJzeW5jbGluZXMuYXQ6MjMyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyMzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjMyOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAic3luY2xpbmVzLmF0OjIzMiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjMyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjIzMjogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAic3luY2xpbmVzLmF0OjIzMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjIzMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSRhdF90cmFjZW9mZgotZWNobyAic3luY2xpbmVzLmF0OjE3NTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIC1jIGlucHV0LmMiCi1lY2hvIHN5bmNsaW5lcy5hdDoxNzUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyBpbnB1dC5jICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAqKTs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjIzMjogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIC1jIGlucHV0LmMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyBpbnB1dC5jIiAic3luY2xpbmVzLmF0OjIzMiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgaW5wdXQuYworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3NraXAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjMyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQogCi0kYXRfdHJhY2VvbgotCisjIFRyYW5zZm9ybSBzdGRlcnIgaW50byBzb21ldGhpbmcgbGlrZSB0aGlzOgorIworIyAgIGlucHV0Lnk6NDogI2Vycm9yICI0IgorIwogIyBJbiBjYXNlIEdDQyBkaXNwbGF5cyBjb2x1bW4gaW5mb3JtYXRpb24sIHN0cmlwIGl0IGRvd24uCiAjCiAjICAgaW5wdXQueTo0OjI6ICNlcnJvciAiNCIgICAgb3IKQEAgLTU5NDAsMTg5ICszMzczNiwxMTA5IEBACiAjID0+CiAjICAgaW5wdXQueTo0OiAjZXJyb3IgIjQiCiAjCi0kYXRfdHJhY2VvZmYKLWVjaG8gInN5bmNsaW5lcy5hdDoxNzU6IHNlZCAtZSAncy9eXFwoW146XSo6W146Ll0qXFwpWy46XVteOl0qOlxcKC4qXFwpXCQvXFwxOlxcMi8nIC1lICdzL15cXChbXjpdKjpbXjpdKjpcXClbXiNdKlxcKCAjZXJyb3JcXCkvXFwxXFwyLycgc3RkZXJyIgotZWNobyBzeW5jbGluZXMuYXQ6MTc1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBzZWQgLWUgJ3MvXlwoW146XSo6W146Ll0qXClbLjpdW146XSo6XCguKlwpJC9cMTpcMi8nIC1lICdzL15cKFteOl0qOlteOl0qOlwpW14jXSpcKCAjZXJyb3JcKS9cMVwyLycgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gc3Rkb3V0OjsgdGVlIHN0ZG91dCA8JGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAic3luY2xpbmVzLmF0OjE3NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgorIyBJdCBtYXkgYWxzbyBpc3N1ZSBtb3JlIGNvbnRleHQgaW5mb3JtYXRpb246CisjCisjICAgaW5wdXQueTogSW4gZnVuY3Rpb24gJ3l5cGFyc2UnOgorIyAgIGlucHV0Lnk6ODogI2Vycm9yICI4IgorIyA9PgorIyAgIGlucHV0Lnk6NDogI2Vycm9yICI4IgorIworIyBUaGUgbWVzc2FnZSBtYXkgaW5jbHVkZSBhIGNhcmV0LWVycm9yIChpbmRlbnRlZCBieSBHQ0MgNC44LAorIyBub3QgYnkgY2xhbmcgMy4yKToKKyMKKyMgICBpbnB1dC55OjE6MjogZXJyb3I6ICNlcnJvciAiMSIKKyMgICAgI2Vycm9yICIxIgorIyAgICAgXgorIworIyBQb3NzaWJseSBkaXN0Y2MgYWRkcyBpdHMgYml0cy4KKyMKKyMgICBkaXN0Y2NbMzMxODddIEVSUk9SOiBjb21waWxlIChudWxsKSBvbiBsb2NhbGhvc3QgZmFpbGVkCisjICAgc3luY2xpbmUuYzoxOjI6IGVycm9yOiAjZXJyb3IgIjEiCisjICAgZGlzdGNjWzMzMTg1XSBFUlJPUjogY29tcGlsZSBzeW5jbGluZS5jIG9uIGxvY2FsaG9zdCBmYWlsZWQKKyMKKyMgb3IgZXZlbgorIworIyAgIGRpc3RjY1szNTg4Ml0gKGRjY19jb25uZWN0X2J5X25hbWUpIEVSUk9SOiBmYWlsZWQgdG8gbG9vayB1cCBob3N0ICJjaHJpc2ltYWMiOiBVbmtub3duIGhvc3QKKyMgICBkaXN0Y2NbMzU4ODJdIFdhcm5pbmc6IGZhaWxlZCB0byBkaXN0cmlidXRlIGlucHV0LmMgdG8gY2hyaXNpbWFjLzQsIHJ1bm5pbmcgbG9jYWxseSBpbnN0ZWFkCisjCisjIFRoZSBjb21waWxlciBtaWdodCBlbmQgYnkgdGhlIG51bWJlciBvZiBtZXNzYWdlcyBpc3N1ZWQgKENsYW5nIDMuMik6CisjCisjICAgIHN5bmNsaW5lLmM6MToyOiBlcnJvcjogIjEiCisjICAgICNlcnJvciAiMSIKKyMgICAgIF4KKyMgICAgMSBlcnJvciBnZW5lcmF0ZWQuCisjCisjIFdoZW4gYysrIGlzIHVzZWQgdG8gY29tcGlsZXIgQywgd2UgbWlnaHQgaGF2ZSBtb3JlIG1lc3NhZ2VzIChDbGFuZyAzLjIpOgorIworIyAgICBjbGFuZzogd2FybmluZzogdHJlYXRpbmcgJ2MnIGlucHV0IGFzICdjKysnIHdoZW4gaW4gQysrIG1vZGUsIHRoaXMgYmVoYXZpb3IgaXMgZGVwcmVjYXRlZAogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjIzMjogXCRQRVJMIC1wIC0wNzc3IC0gc3RkZXJyIDw8XFxFT0YKKyAgIyAxLiBSZW1vdmUgdXNlbGVzcyBsaW5lcy4KIAotJGF0X3RyYWNlb24KKyAgIyBkaXN0Y2MgY2x1dHRlci4KKyAgcy9eZGlzdGNjXFxbXFxkK1xcXSAuKlxcbi8vZ207CisgICMgYyB2cy4gYysrLgorICBzL15jbGFuZzogd2FybmluZzogdHJlYXRpbmcgJ2MnIGlucHV0IGFzICdjXFwrXFwrJy4qXFxuLy9nbTsKKyAgIyBGdW5jdGlvbiBjb250ZXh0LgorICBzL15bXjpdKjogSW4gZnVuY3Rpb24gJ1teJ10rJzpcXG4vL2dtOworICAjIENhcmV0IGVycm9yLgorICBzL14gKiNlcnJvci4qXFxuICpcXF5cXG4vL2dtOworICAjIE51bWJlciBvZiBlcnJvcnMuCisgIHMvXjEgZXJyb3IgZ2VuZXJhdGVkXFwuXFxuLy9nbTsKKworICAjIDIuIE5vcm1hbGl6ZSB0aGUgbGluZXMgd2Uga2VwdC4KKworICAjIFJlbW92ZSBjb2x1bW4uCisgIHMvXihbXjpdKzpcXGQrKVsuOl1bXjpdKzooLispXCQvXCQxOlwkMi9nbTsKKyAgIyBNYXAgYWxsIGNvbWJpbmF0aW9ucyBvZiBcImVycm9yOiBcIiBhbmQgXCIjZXJyb3I6IFwiIHRvIFwiI2Vycm9yIFwiLgorICBzL14oW146XSs6XFxkKyk6KCB8I2Vycm9yfGVycm9yfDopKy9cJDE6ICNlcnJvciAvZ207CitFT0YKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInN5bmNsaW5lcy5hdDoyMzIiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLXAgLTA3NzcgLSBzdGRlcnIgPDxcRU9GCisgICMgMS4gUmVtb3ZlIHVzZWxlc3MgbGluZXMuCisKKyAgIyBkaXN0Y2MgY2x1dHRlci4KKyAgcy9eZGlzdGNjXFtcZCtcXSAuKlxuLy9nbTsKKyAgIyBjIHZzLiBjKysuCisgIHMvXmNsYW5nOiB3YXJuaW5nOiB0cmVhdGluZyAnYycgaW5wdXQgYXMgJ2NcK1wrJy4qXG4vL2dtOworICAjIEZ1bmN0aW9uIGNvbnRleHQuCisgIHMvXlteOl0qOiBJbiBmdW5jdGlvbiAnW14nXSsnOlxuLy9nbTsKKyAgIyBDYXJldCBlcnJvci4KKyAgcy9eICojZXJyb3IuKlxuICpcXlxuLy9nbTsKKyAgIyBOdW1iZXIgb2YgZXJyb3JzLgorICBzL14xIGVycm9yIGdlbmVyYXRlZFwuXG4vL2dtOworCisgICMgMi4gTm9ybWFsaXplIHRoZSBsaW5lcyB3ZSBrZXB0LgorCisgICMgUmVtb3ZlIGNvbHVtbi4KKyAgcy9eKFteOl0rOlxkKylbLjpdW146XSs6KC4rKSQvJDE6JDIvZ207CisgICMgTWFwIGFsbCBjb21iaW5hdGlvbnMgb2YgImVycm9yOiAiIGFuZCAiI2Vycm9yOiAiIHRvICIjZXJyb3IgIi4KKyAgcy9eKFteOl0rOlxkKyk6KCB8I2Vycm9yfGVycm9yfDopKy8kMTogI2Vycm9yIC9nbTsKK0VPRgorCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IHRlZSBzdGRvdXQgPCIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjMyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInN5bmNsaW5lcy5hdDoxNzU6IGNhdCBzdGRvdXQiCi1lY2hvIHN5bmNsaW5lcy5hdDoxNzUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRvdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gImlucHV0Lnk6ODogI2Vycm9yIFwiOFwiCi0iIHwgJGF0X2RpZmYgLSAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJzeW5jbGluZXMuYXQ6MTc1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KLQotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Cit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjIzMjogY2F0IHN0ZG91dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInN5bmNsaW5lcy5hdDoyMzIiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZG91dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gImlucHV0Lnk6ODogI2Vycm9yIFwiOFwiCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjMyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0gIGJhbm5lci02ICkgIyBCYW5uZXIgNi4gaGVhZGVycy5hdDoxOQotICAgIGNhdCA8PFxfQVRFT0YKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTMyCisjQVRfU1RBUlRfMTMzCithdF9mbl9ncm91cF9iYW5uZXIgMTMzICdzeW5jbGluZXMuYXQ6MjQ5JyBcCisgICIlY29kZSB0b3Agc3luY2xpbmUiICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgNworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjEzMy4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCi1QYXJzZXIgSGVhZGVycy4KIAorIyBJdCBzZWVtcyBpbXBvc3NpYmxlIHRvIGZpbmQgYSBnZW5lcmljIHNjaGVtZSB0byBjaGVjayB0aGUgbG9jYXRpb24KKyMgb2YgYW4gZXJyb3IuICBFdmVuIHJlcXVpcmluZyBHQ0MgaXMgbm90IHN1ZmZpY2llbnQsIHNpbmNlIGZvciBpbnN0YW5jZQorIyB0aGUgdmVyc2lvbiBtb2RpZmllZCBieSBBcHBsZToKKyMKKyMgfCBSZWFkaW5nIHNwZWNzIGZyb20gL3Vzci9saWJleGVjL2djYy9kYXJ3aW4vcHBjLzIuOTUuMi9zcGVjcworIyB8IEFwcGxlIENvbXB1dGVyLCBJbmMuIHZlcnNpb24gZ2NjLTkzNC4zLCBiYXNlZCBvbiBnY2MgdmVyc2lvbiAyLjk1LjIKKyMgfCAxOTk5MTAyNCAocmVsZWFzZSkgY29uZmlndXJlOjIxMjQ6ICQ/ID0gMAorIworIyBpbnN0ZWFkIG9mOgorIworIyB8IGlucHV0Lnk6MjogI2Vycm9yICIyIgorIworIyBpdCByZXBvcnRzOgorIworIyB8IGlucHV0Lnk6MjogIjIiCisjIHwgY3BwLXByZWNvbXA6IHdhcm5pbmc6IGVycm9ycyBkdXJpbmcgc21hcnQgcHJlcHJvY2Vzc2luZywgcmV0cnlpbmcgaW4gYmFzaWMgbW9kZQorCitjYXQgPnN5bmNsaW5lLmMgPDwnX0FURU9GJworI2Vycm9yICIxIgoraW50IGk7IC8qIGF2b2lkcyAtcGVkYW50aWMgd2FybmluZyBhYm91dCBhbiBlbXB0eSB0cmFuc2xhdGlvbiB1bml0LiAqLwogX0FURU9GCi0gICAgOzsKIAotICA0NiApICMgNDYuIGhlYWRlcnMuYXQ6Mjc6ICV1bmlvbiBhbmQgLS1kZWZpbmVzCi0gICAgYXRfc2V0dXBfbGluZT0naGVhZGVycy5hdDoyNycKLSAgICBhdF9kZXNjPScldW5pb24gYW5kIC0tZGVmaW5lcycKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDQ2OiAldW5pb24gYW5kIC0tZGVmaW5lcyAgICAgICAgICAgICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiNDYuIGhlYWRlcnMuYXQ6Mjc6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyNDk6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyAtYyBzeW5jbGluZS5jIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgc3luY2xpbmUuYyIgInN5bmNsaW5lcy5hdDoyNDkiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTIC1jIHN5bmNsaW5lLmMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19za2lwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjI0OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBUcmFuc2Zvcm0gc3RkZXJyIGludG8gc29tZXRoaW5nIGxpa2UgdGhpczoKKyMKKyMgICBpbnB1dC55OjQ6ICNlcnJvciAiNCIKKyMKKyMgSW4gY2FzZSBHQ0MgZGlzcGxheXMgY29sdW1uIGluZm9ybWF0aW9uLCBzdHJpcCBpdCBkb3duLgorIworIyAgIGlucHV0Lnk6NDoyOiAjZXJyb3IgIjQiICAgIG9yCisjICAgaW5wdXQueTo0LjI6ICNlcnJvciAiNCIgICAgb3IKKyMgICBpbnB1dC55OjQ6MjogZXJyb3I6ICNlcnJvciAiNCIKKyMgPT4KKyMgICBpbnB1dC55OjQ6ICNlcnJvciAiNCIKKyMKKyMgSXQgbWF5IGFsc28gaXNzdWUgbW9yZSBjb250ZXh0IGluZm9ybWF0aW9uOgorIworIyAgIGlucHV0Lnk6IEluIGZ1bmN0aW9uICd5eXBhcnNlJzoKKyMgICBpbnB1dC55Ojg6ICNlcnJvciAiOCIKKyMgPT4KKyMgICBpbnB1dC55OjQ6ICNlcnJvciAiOCIKKyMKKyMgVGhlIG1lc3NhZ2UgbWF5IGluY2x1ZGUgYSBjYXJldC1lcnJvciAoaW5kZW50ZWQgYnkgR0NDIDQuOCwKKyMgbm90IGJ5IGNsYW5nIDMuMik6CisjCisjICAgaW5wdXQueToxOjI6IGVycm9yOiAjZXJyb3IgIjEiCisjICAgICNlcnJvciAiMSIKKyMgICAgIF4KKyMKKyMgUG9zc2libHkgZGlzdGNjIGFkZHMgaXRzIGJpdHMuCisjCisjICAgZGlzdGNjWzMzMTg3XSBFUlJPUjogY29tcGlsZSAobnVsbCkgb24gbG9jYWxob3N0IGZhaWxlZAorIyAgIHN5bmNsaW5lLmM6MToyOiBlcnJvcjogI2Vycm9yICIxIgorIyAgIGRpc3RjY1szMzE4NV0gRVJST1I6IGNvbXBpbGUgc3luY2xpbmUuYyBvbiBsb2NhbGhvc3QgZmFpbGVkCisjCisjIG9yIGV2ZW4KKyMKKyMgICBkaXN0Y2NbMzU4ODJdIChkY2NfY29ubmVjdF9ieV9uYW1lKSBFUlJPUjogZmFpbGVkIHRvIGxvb2sgdXAgaG9zdCAiY2hyaXNpbWFjIjogVW5rbm93biBob3N0CisjICAgZGlzdGNjWzM1ODgyXSBXYXJuaW5nOiBmYWlsZWQgdG8gZGlzdHJpYnV0ZSBpbnB1dC5jIHRvIGNocmlzaW1hYy80LCBydW5uaW5nIGxvY2FsbHkgaW5zdGVhZAorIworIyBUaGUgY29tcGlsZXIgbWlnaHQgZW5kIGJ5IHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgaXNzdWVkIChDbGFuZyAzLjIpOgorIworIyAgICBzeW5jbGluZS5jOjE6MjogZXJyb3I6ICIxIgorIyAgICAjZXJyb3IgIjEiCisjICAgICBeCisjICAgIDEgZXJyb3IgZ2VuZXJhdGVkLgorIworIyBXaGVuIGMrKyBpcyB1c2VkIHRvIGNvbXBpbGVyIEMsIHdlIG1pZ2h0IGhhdmUgbW9yZSBtZXNzYWdlcyAoQ2xhbmcgMy4yKToKKyMKKyMgICAgY2xhbmc6IHdhcm5pbmc6IHRyZWF0aW5nICdjJyBpbnB1dCBhcyAnYysrJyB3aGVuIGluIEMrKyBtb2RlLCB0aGlzIGJlaGF2aW9yIGlzIGRlcHJlY2F0ZWQKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyNDk6IFwkUEVSTCAtcCAtMDc3NyAtIHN0ZGVyciA8PFxcRU9GCisgICMgMS4gUmVtb3ZlIHVzZWxlc3MgbGluZXMuCisKKyAgIyBkaXN0Y2MgY2x1dHRlci4KKyAgcy9eZGlzdGNjXFxbXFxkK1xcXSAuKlxcbi8vZ207CisgICMgYyB2cy4gYysrLgorICBzL15jbGFuZzogd2FybmluZzogdHJlYXRpbmcgJ2MnIGlucHV0IGFzICdjXFwrXFwrJy4qXFxuLy9nbTsKKyAgIyBGdW5jdGlvbiBjb250ZXh0LgorICBzL15bXjpdKjogSW4gZnVuY3Rpb24gJ1teJ10rJzpcXG4vL2dtOworICAjIENhcmV0IGVycm9yLgorICBzL14gKiNlcnJvci4qXFxuICpcXF5cXG4vL2dtOworICAjIE51bWJlciBvZiBlcnJvcnMuCisgIHMvXjEgZXJyb3IgZ2VuZXJhdGVkXFwuXFxuLy9nbTsKKworICAjIDIuIE5vcm1hbGl6ZSB0aGUgbGluZXMgd2Uga2VwdC4KKworICAjIFJlbW92ZSBjb2x1bW4uCisgIHMvXihbXjpdKzpcXGQrKVsuOl1bXjpdKzooLispXCQvXCQxOlwkMi9nbTsKKyAgIyBNYXAgYWxsIGNvbWJpbmF0aW9ucyBvZiBcImVycm9yOiBcIiBhbmQgXCIjZXJyb3I6IFwiIHRvIFwiI2Vycm9yIFwiLgorICBzL14oW146XSs6XFxkKyk6KCB8I2Vycm9yfGVycm9yfDopKy9cJDE6ICNlcnJvciAvZ207CitFT0YKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInN5bmNsaW5lcy5hdDoyNDkiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLXAgLTA3NzcgLSBzdGRlcnIgPDxcRU9GCisgICMgMS4gUmVtb3ZlIHVzZWxlc3MgbGluZXMuCisKKyAgIyBkaXN0Y2MgY2x1dHRlci4KKyAgcy9eZGlzdGNjXFtcZCtcXSAuKlxuLy9nbTsKKyAgIyBjIHZzLiBjKysuCisgIHMvXmNsYW5nOiB3YXJuaW5nOiB0cmVhdGluZyAnYycgaW5wdXQgYXMgJ2NcK1wrJy4qXG4vL2dtOworICAjIEZ1bmN0aW9uIGNvbnRleHQuCisgIHMvXlteOl0qOiBJbiBmdW5jdGlvbiAnW14nXSsnOlxuLy9nbTsKKyAgIyBDYXJldCBlcnJvci4KKyAgcy9eICojZXJyb3IuKlxuICpcXlxuLy9nbTsKKyAgIyBOdW1iZXIgb2YgZXJyb3JzLgorICBzL14xIGVycm9yIGdlbmVyYXRlZFwuXG4vL2dtOworCisgICMgMi4gTm9ybWFsaXplIHRoZSBsaW5lcyB3ZSBrZXB0LgorCisgICMgUmVtb3ZlIGNvbHVtbi4KKyAgcy9eKFteOl0rOlxkKylbLjpdW146XSs6KC4rKSQvJDE6JDIvZ207CisgICMgTWFwIGFsbCBjb21iaW5hdGlvbnMgb2YgImVycm9yOiAiIGFuZCAiI2Vycm9yOiAiIHRvICIjZXJyb3IgIi4KKyAgcy9eKFteOl0rOlxkKyk6KCB8I2Vycm9yfGVycm9yfDopKy8kMTogI2Vycm9yIC9nbTsKK0VPRgorCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IHRlZSBzdGRvdXQgPCIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjQ5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjI0OTogdGVzdCBcIlxgY2F0IHN0ZG91dFxgXCIgPSAnc3luY2xpbmUuYzoxOiAjZXJyb3IgXCIxXCInIHx8IGV4aXQgNzciCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJzeW5jbGluZXMuYXQ6MjQ5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHRlc3QgImBjYXQgc3Rkb3V0YCIgPSAnc3luY2xpbmUuYzoxOiAjZXJyb3IgIjEiJyB8fCBleGl0IDc3CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyNDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQueSA8PCdfQVRFT0YnCi0ldW5pb24KLXsKLSAgaW50ICAgaW50ZWdlcjsKLSAgY2hhciAqc3RyaW5nIDsKKyVjb2RlIHRvcCB7CisjZXJyb3IgIjIiCiB9Cislewordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKK2ludCB5eWxleCAodm9pZCk7CislfQogJSUKLWV4cDoge307CitleHA6ICcwJzsKKyUlCitfQVRFT0YKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjQ5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAic3luY2xpbmVzLmF0OjI0OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyNDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjQ5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IiAic3luY2xpbmVzLmF0OjI0OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyNDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjI0OTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInN5bmNsaW5lcy5hdDoyNDkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjI0OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyNDk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJzeW5jbGluZXMuYXQ6MjQ5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyNDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjQ5OiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJzeW5jbGluZXMuYXQ6MjQ5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjQ5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjI0OTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIC1jIGlucHV0LmMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyBpbnB1dC5jIiAic3luY2xpbmVzLmF0OjI0OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgaW5wdXQuYworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3NraXAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjQ5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIFRyYW5zZm9ybSBzdGRlcnIgaW50byBzb21ldGhpbmcgbGlrZSB0aGlzOgorIworIyAgIGlucHV0Lnk6NDogI2Vycm9yICI0IgorIworIyBJbiBjYXNlIEdDQyBkaXNwbGF5cyBjb2x1bW4gaW5mb3JtYXRpb24sIHN0cmlwIGl0IGRvd24uCisjCisjICAgaW5wdXQueTo0OjI6ICNlcnJvciAiNCIgICAgb3IKKyMgICBpbnB1dC55OjQuMjogI2Vycm9yICI0IiAgICBvcgorIyAgIGlucHV0Lnk6NDoyOiBlcnJvcjogI2Vycm9yICI0IgorIyA9PgorIyAgIGlucHV0Lnk6NDogI2Vycm9yICI0IgorIworIyBJdCBtYXkgYWxzbyBpc3N1ZSBtb3JlIGNvbnRleHQgaW5mb3JtYXRpb246CisjCisjICAgaW5wdXQueTogSW4gZnVuY3Rpb24gJ3l5cGFyc2UnOgorIyAgIGlucHV0Lnk6ODogI2Vycm9yICI4IgorIyA9PgorIyAgIGlucHV0Lnk6NDogI2Vycm9yICI4IgorIworIyBUaGUgbWVzc2FnZSBtYXkgaW5jbHVkZSBhIGNhcmV0LWVycm9yIChpbmRlbnRlZCBieSBHQ0MgNC44LAorIyBub3QgYnkgY2xhbmcgMy4yKToKKyMKKyMgICBpbnB1dC55OjE6MjogZXJyb3I6ICNlcnJvciAiMSIKKyMgICAgI2Vycm9yICIxIgorIyAgICAgXgorIworIyBQb3NzaWJseSBkaXN0Y2MgYWRkcyBpdHMgYml0cy4KKyMKKyMgICBkaXN0Y2NbMzMxODddIEVSUk9SOiBjb21waWxlIChudWxsKSBvbiBsb2NhbGhvc3QgZmFpbGVkCisjICAgc3luY2xpbmUuYzoxOjI6IGVycm9yOiAjZXJyb3IgIjEiCisjICAgZGlzdGNjWzMzMTg1XSBFUlJPUjogY29tcGlsZSBzeW5jbGluZS5jIG9uIGxvY2FsaG9zdCBmYWlsZWQKKyMKKyMgb3IgZXZlbgorIworIyAgIGRpc3RjY1szNTg4Ml0gKGRjY19jb25uZWN0X2J5X25hbWUpIEVSUk9SOiBmYWlsZWQgdG8gbG9vayB1cCBob3N0ICJjaHJpc2ltYWMiOiBVbmtub3duIGhvc3QKKyMgICBkaXN0Y2NbMzU4ODJdIFdhcm5pbmc6IGZhaWxlZCB0byBkaXN0cmlidXRlIGlucHV0LmMgdG8gY2hyaXNpbWFjLzQsIHJ1bm5pbmcgbG9jYWxseSBpbnN0ZWFkCisjCisjIFRoZSBjb21waWxlciBtaWdodCBlbmQgYnkgdGhlIG51bWJlciBvZiBtZXNzYWdlcyBpc3N1ZWQgKENsYW5nIDMuMik6CisjCisjICAgIHN5bmNsaW5lLmM6MToyOiBlcnJvcjogIjEiCisjICAgICNlcnJvciAiMSIKKyMgICAgIF4KKyMgICAgMSBlcnJvciBnZW5lcmF0ZWQuCisjCisjIFdoZW4gYysrIGlzIHVzZWQgdG8gY29tcGlsZXIgQywgd2UgbWlnaHQgaGF2ZSBtb3JlIG1lc3NhZ2VzIChDbGFuZyAzLjIpOgorIworIyAgICBjbGFuZzogd2FybmluZzogdHJlYXRpbmcgJ2MnIGlucHV0IGFzICdjKysnIHdoZW4gaW4gQysrIG1vZGUsIHRoaXMgYmVoYXZpb3IgaXMgZGVwcmVjYXRlZAorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjI0OTogXCRQRVJMIC1wIC0wNzc3IC0gc3RkZXJyIDw8XFxFT0YKKyAgIyAxLiBSZW1vdmUgdXNlbGVzcyBsaW5lcy4KKworICAjIGRpc3RjYyBjbHV0dGVyLgorICBzL15kaXN0Y2NcXFtcXGQrXFxdIC4qXFxuLy9nbTsKKyAgIyBjIHZzLiBjKysuCisgIHMvXmNsYW5nOiB3YXJuaW5nOiB0cmVhdGluZyAnYycgaW5wdXQgYXMgJ2NcXCtcXCsnLipcXG4vL2dtOworICAjIEZ1bmN0aW9uIGNvbnRleHQuCisgIHMvXlteOl0qOiBJbiBmdW5jdGlvbiAnW14nXSsnOlxcbi8vZ207CisgICMgQ2FyZXQgZXJyb3IuCisgIHMvXiAqI2Vycm9yLipcXG4gKlxcXlxcbi8vZ207CisgICMgTnVtYmVyIG9mIGVycm9ycy4KKyAgcy9eMSBlcnJvciBnZW5lcmF0ZWRcXC5cXG4vL2dtOworCisgICMgMi4gTm9ybWFsaXplIHRoZSBsaW5lcyB3ZSBrZXB0LgorCisgICMgUmVtb3ZlIGNvbHVtbi4KKyAgcy9eKFteOl0rOlxcZCspWy46XVteOl0rOiguKylcJC9cJDE6XCQyL2dtOworICAjIE1hcCBhbGwgY29tYmluYXRpb25zIG9mIFwiZXJyb3I6IFwiIGFuZCBcIiNlcnJvcjogXCIgdG8gXCIjZXJyb3IgXCIuCisgIHMvXihbXjpdKzpcXGQrKTooIHwjZXJyb3J8ZXJyb3J8OikrL1wkMTogI2Vycm9yIC9nbTsKK0VPRgorIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAic3luY2xpbmVzLmF0OjI0OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtcCAtMDc3NyAtIHN0ZGVyciA8PFxFT0YKKyAgIyAxLiBSZW1vdmUgdXNlbGVzcyBsaW5lcy4KKworICAjIGRpc3RjYyBjbHV0dGVyLgorICBzL15kaXN0Y2NcW1xkK1xdIC4qXG4vL2dtOworICAjIGMgdnMuIGMrKy4KKyAgcy9eY2xhbmc6IHdhcm5pbmc6IHRyZWF0aW5nICdjJyBpbnB1dCBhcyAnY1wrXCsnLipcbi8vZ207CisgICMgRnVuY3Rpb24gY29udGV4dC4KKyAgcy9eW146XSo6IEluIGZ1bmN0aW9uICdbXiddKyc6XG4vL2dtOworICAjIENhcmV0IGVycm9yLgorICBzL14gKiNlcnJvci4qXG4gKlxeXG4vL2dtOworICAjIE51bWJlciBvZiBlcnJvcnMuCisgIHMvXjEgZXJyb3IgZ2VuZXJhdGVkXC5cbi8vZ207CisKKyAgIyAyLiBOb3JtYWxpemUgdGhlIGxpbmVzIHdlIGtlcHQuCisKKyAgIyBSZW1vdmUgY29sdW1uLgorICBzL14oW146XSs6XGQrKVsuOl1bXjpdKzooLispJC8kMTokMi9nbTsKKyAgIyBNYXAgYWxsIGNvbWJpbmF0aW9ucyBvZiAiZXJyb3I6ICIgYW5kICIjZXJyb3I6ICIgdG8gIiNlcnJvciAiLgorICBzL14oW146XSs6XGQrKTooIHwjZXJyb3J8ZXJyb3J8OikrLyQxOiAjZXJyb3IgL2dtOworRU9GCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgdGVlIHN0ZG91dCA8IiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyNDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjQ5OiBjYXQgc3Rkb3V0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAic3luY2xpbmVzLmF0OjI0OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3Rkb3V0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiaW5wdXQueToyOiAjZXJyb3IgXCIyXCIKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyNDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTMzCisjQVRfU1RBUlRfMTM0CithdF9mbl9ncm91cF9iYW5uZXIgMTM0ICdzeW5jbGluZXMuYXQ6MjkwJyBcCisgICIlbm8tbGluZXMiICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgNworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjEzNC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVza2VsZXRvbiAieWFjYy5jIiAlZGVmaW5lcworJXsKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CitpbnQgeXlsZXggKHZvaWQpOworJX0KKyUlCitleHA6ICcwJwogX0FURU9GCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJoZWFkZXJzLmF0OjM5OiBiaXNvbiAtLWRlZmluZXMgaW5wdXQueSIKLWVjaG8gaGVhZGVycy5hdDozOSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLS1kZWZpbmVzIGlucHV0LnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiaGVhZGVycy5hdDozOTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjkwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1uby1saW5lcyAtbyBpbnB1dC5jIC1kIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJzeW5jbGluZXMuYXQ6MjkwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tbm8tbGluZXMgLW8gaW5wdXQuYyAtZCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjkwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjkwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLW5vLWxpbmVzIC1vIGlucHV0LmMgLWQgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLW5vLWxpbmVzIC1vIGlucHV0LmMgLWQgaW5wdXQueSIgInN5bmNsaW5lcy5hdDoyOTAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1uby1saW5lcyAtbyBpbnB1dC5jIC1kIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyOTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjI5MDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInN5bmNsaW5lcy5hdDoyOTAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjI5MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyOTA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJzeW5jbGluZXMuYXQ6MjkwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyOTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjkwOiBiaXNvbiAtLW5vLWxpbmVzIC1vIGlucHV0LmMgLWQgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInN5bmNsaW5lcy5hdDoyOTAiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLS1uby1saW5lcyAtbyBpbnB1dC5jIC1kIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjI5MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Cit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjI5MDogZ3JlcCAnI2xpbmUnICouYyAqLmgiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJzeW5jbGluZXMuYXQ6MjkwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJyNsaW5lJyAqLmMgKi5oCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyOTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIDQ3ICkgIyA0Ny4gaGVhZGVycy5hdDo3NzogSW52YWxpZCBDUFAgZ3VhcmRzOiBpbnB1dC9pbnB1dAotICAgIGF0X3NldHVwX2xpbmU9J2hlYWRlcnMuYXQ6NzcnCi0gICAgYXRfZGVzYz0nSW52YWxpZCBDUFAgZ3VhcmRzOiBpbnB1dC9pbnB1dCcKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDQ3OiBJbnZhbGlkIENQUCBndWFyZHM6IGlucHV0L2lucHV0ICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiNDcuIGhlYWRlcnMuYXQ6Nzc6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzEzNAorI0FUX1NUQVJUXzEzNQorYXRfZm5fZ3JvdXBfYmFubmVyIDEzNSAnc3luY2xpbmVzLmF0OjI5MScgXAorICAiJW5vLWxpbmVzIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDcKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxMzUuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislc2tlbGV0b24gImdsci5jIiAlZGVmaW5lcworJXsKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CitpbnQgeXlsZXggKHZvaWQpOworJX0KKyUlCitleHA6ICcwJworX0FURU9GCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjkxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1uby1saW5lcyAtbyBpbnB1dC5jIC1kIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJzeW5jbGluZXMuYXQ6MjkxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tbm8tbGluZXMgLW8gaW5wdXQuYyAtZCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjkxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjI5MTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1uby1saW5lcyAtbyBpbnB1dC5jIC1kIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1uby1saW5lcyAtbyBpbnB1dC5jIC1kIGlucHV0LnkiICJzeW5jbGluZXMuYXQ6MjkxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tbm8tbGluZXMgLW8gaW5wdXQuYyAtZCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjkxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyOTE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJzeW5jbGluZXMuYXQ6MjkxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyOTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjkxOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAic3luY2xpbmVzLmF0OjI5MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjkxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjI5MTogYmlzb24gLS1uby1saW5lcyAtbyBpbnB1dC5jIC1kIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJzeW5jbGluZXMuYXQ6MjkxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC0tbm8tbGluZXMgLW8gaW5wdXQuYyAtZCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyOTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjkxOiBncmVwICcjbGluZScgKi5jICouaCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInN5bmNsaW5lcy5hdDoyOTEiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnI2xpbmUnICouYyAqLmgKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjI5MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzEzNQorI0FUX1NUQVJUXzEzNgorYXRfZm5fZ3JvdXBfYmFubmVyIDEzNiAnc3luY2xpbmVzLmF0OjI5MicgXAorICAiJW5vLWxpbmVzIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDcKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxMzYuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislc2tlbGV0b24gImxhbHIxLmNjIiAlZGVmaW5lcworJXsKKworaW50IHl5bGV4ICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCk7CislfQorJSUKK2V4cDogJzAnCitfQVRFT0YKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyOTI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLW5vLWxpbmVzIC1vIGlucHV0LmNjIC1kIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJzeW5jbGluZXMuYXQ6MjkyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tbm8tbGluZXMgLW8gaW5wdXQuY2MgLWQgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjI5MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyOTI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tbm8tbGluZXMgLW8gaW5wdXQuY2MgLWQgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLW5vLWxpbmVzIC1vIGlucHV0LmNjIC1kIGlucHV0LnkiICJzeW5jbGluZXMuYXQ6MjkyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tbm8tbGluZXMgLW8gaW5wdXQuY2MgLWQgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjI5MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjkyOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAic3luY2xpbmVzLmF0OjI5MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjkyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjI5MjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInN5bmNsaW5lcy5hdDoyOTIiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjI5MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyOTI6IGJpc29uIC0tbm8tbGluZXMgLW8gaW5wdXQuY2MgLWQgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInN5bmNsaW5lcy5hdDoyOTIiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLS1uby1saW5lcyAtbyBpbnB1dC5jYyAtZCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyOTIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjkyOiBncmVwICcjbGluZScgKi5jYyAqLmhoIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAic3luY2xpbmVzLmF0OjI5MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwICcjbGluZScgKi5jYyAqLmhoCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyOTIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xMzYKKyNBVF9TVEFSVF8xMzcKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxMzcgJ3N5bmNsaW5lcy5hdDoyOTMnIFwKKyAgIiVuby1saW5lcyIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiA3CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTM3LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJXNrZWxldG9uICJnbHIuY2MiICVkZWZpbmVzCisleworCitpbnQgeXlsZXggKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwKTsKKyV9CislJQorZXhwOiAnMCcKK19BVEVPRgorCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjI5MzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tbm8tbGluZXMgLW8gaW5wdXQuY2MgLWQgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInN5bmNsaW5lcy5hdDoyOTMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1uby1saW5lcyAtbyBpbnB1dC5jYyAtZCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjkzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjI5MzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1uby1saW5lcyAtbyBpbnB1dC5jYyAtZCBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tbm8tbGluZXMgLW8gaW5wdXQuY2MgLWQgaW5wdXQueSIgInN5bmNsaW5lcy5hdDoyOTMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1uby1saW5lcyAtbyBpbnB1dC5jYyAtZCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjkzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyOTM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJzeW5jbGluZXMuYXQ6MjkzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyOTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjkzOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAic3luY2xpbmVzLmF0OjI5MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9zeW5jbGluZXMuYXQ6MjkzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjI5MzogYmlzb24gLS1uby1saW5lcyAtbyBpbnB1dC5jYyAtZCBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAic3luY2xpbmVzLmF0OjI5MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtLW5vLWxpbmVzIC1vIGlucHV0LmNjIC1kIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjI5MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3N5bmNsaW5lcy5hdDoyOTM6IGdyZXAgJyNsaW5lJyAqLmNjICouaGgiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJzeW5jbGluZXMuYXQ6MjkzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJyNsaW5lJyAqLmNjICouaGgKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvc3luY2xpbmVzLmF0OjI5MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzEzNworI0FUX1NUQVJUXzEzOAorYXRfZm5fZ3JvdXBfYmFubmVyIDEzOCAnaGVhZGVycy5hdDo1NycgXAorICAiSW52YWxpZCBDUFAgZ3VhcmRzOiAgLS1kZWZpbmVzPWlucHV0L2lucHV0LmgiICIgICAiIDgKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxMzguICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiAjIFBvc3NpYmx5IGNyZWF0ZSBpbm5lciBkaXJlY3Rvcmllcy4KLWRpcm5hbWU9YChkaXJuYW1lIGlucHV0L2lucHV0KSAyPi9kZXYvbnVsbCB8fAorZGlybmFtZT1gJGFzX2Rpcm5hbWUgLS0gaW5wdXQvaW5wdXQgfHwKICRhc19leHByIFhpbnB1dC9pbnB1dCA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAogCSBYaW5wdXQvaW5wdXQgOiAnWFwoLy9cKVteL10nIFx8IFwKIAkgWGlucHV0L2lucHV0IDogJ1hcKC8vXCkkJyBcfCBcCi0JIFhpbnB1dC9pbnB1dCA6ICdYXCgvXCknIFx8IFwKLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFhpbnB1dC9pbnB1dCB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKLXsgaWYgJGFzX21rZGlyX3A7IHRoZW4KLSAgICBta2RpciAtcCAkZGlybmFtZQotICBlbHNlCi0gICAgYXNfZGlyPSRkaXJuYW1lCi0gICAgYXNfZGlycz0KLSAgICB3aGlsZSB0ZXN0ICEgLWQgIiRhc19kaXIiOyBkbwotICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKLSAgICAgIGFzX2Rpcj1gKGRpcm5hbWUgIiRhc19kaXIiKSAyPi9kZXYvbnVsbCB8fAotJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgiJGFzX2RpciIgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KLSAgCSAgcy8uKi8uLzsgcSdgCi0gICAgZG9uZQotICAgIHRlc3QgISAtbiAiJGFzX2RpcnMiIHx8IG1rZGlyICRhc19kaXJzCi0gIGZpIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRkaXJuYW1lIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRkaXJuYW1lIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9Ci0KKwkgWGlucHV0L2lucHV0IDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWGlucHV0L2lucHV0IHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorYXNfZGlyPSRkaXJuYW1lOyBhc19mbl9ta2Rpcl9wCiAKIGNhdCA+aW5wdXQvaW5wdXQueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKIAogJXsKICNpbmNsdWRlIDxpbnB1dC9pbnB1dC5oPgotdm9pZCB5eWVycm9yIChjb25zdCBjaGFyICopOwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKIGludCB5eWxleCAodm9pZCk7CiAlfQogJSUKQEAgLTYxMzMsMTI3ICszNDg0OSwxNzQgQEAKIAogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiaGVhZGVycy5hdDo3NzogYmlzb24gLS1kZWZpbmVzPWlucHV0L2lucHV0LmggLS1vdXRwdXQ9eS50YWIuYyBpbnB1dC9pbnB1dC55IgotZWNobyBoZWFkZXJzLmF0Ojc3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtLWRlZmluZXM9aW5wdXQvaW5wdXQuaCAtLW91dHB1dD15LnRhYi5jIGlucHV0L2lucHV0LnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiaGVhZGVycy5hdDo3NzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjU3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1kZWZpbmVzPWlucHV0L2lucHV0LmggLS1vdXRwdXQ9aW5wdXQvaW5wdXQuYyBpbnB1dC9pbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiaGVhZGVycy5hdDo1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLWRlZmluZXM9aW5wdXQvaW5wdXQuaCAtLW91dHB1dD1pbnB1dC9pbnB1dC5jIGlucHV0L2lucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6NTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6NTc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tZGVmaW5lcz1pbnB1dC9pbnB1dC5oIC0tb3V0cHV0PWlucHV0L2lucHV0LmMgaW5wdXQvaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLWRlZmluZXM9aW5wdXQvaW5wdXQuaCAtLW91dHB1dD1pbnB1dC9pbnB1dC5jIGlucHV0L2lucHV0LnkiICJoZWFkZXJzLmF0OjU3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tZGVmaW5lcz1pbnB1dC9pbnB1dC5oIC0tb3V0cHV0PWlucHV0L2lucHV0LmMgaW5wdXQvaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDo1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjU3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaGVhZGVycy5hdDo1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDo1NzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImhlYWRlcnMuYXQ6NTciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDo1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6NTc6IGJpc29uIC0tZGVmaW5lcz1pbnB1dC9pbnB1dC5oIC0tb3V0cHV0PWlucHV0L2lucHV0LmMgaW5wdXQvaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImhlYWRlcnMuYXQ6NTciCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLS1kZWZpbmVzPWlucHV0L2lucHV0LmggLS1vdXRwdXQ9aW5wdXQvaW5wdXQuYyBpbnB1dC9pbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6NTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiaGVhZGVycy5hdDo3NzogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIC1vIHkudGFiLm8gLUkuIC1jIHkudGFiLmMiCi1lY2hvIGhlYWRlcnMuYXQ6NzcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtbyB5LnRhYi5vIC1JLiAtYyB5LnRhYi5jICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImhlYWRlcnMuYXQ6Nzc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6NTc6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJoZWFkZXJzLmF0OjU3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjU3OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgLWMgLW8gaW5wdXQvaW5wdXQubyAtSS4gLWMgaW5wdXQvaW5wdXQuYyAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyAtbyBpbnB1dC9pbnB1dC5vIC1JLiAtYyBpbnB1dC9pbnB1dC5jICIgImhlYWRlcnMuYXQ6NTciCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTIC1jIC1vIGlucHV0L2lucHV0Lm8gLUkuIC1jIGlucHV0L2lucHV0LmMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6NTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwogCi0gIDQ4ICkgIyA0OC4gaGVhZGVycy5hdDo3ODogSW52YWxpZCBDUFAgZ3VhcmRzOiA5Zm9vCi0gICAgYXRfc2V0dXBfbGluZT0naGVhZGVycy5hdDo3OCcKLSAgICBhdF9kZXNjPSdJbnZhbGlkIENQUCBndWFyZHM6IDlmb28nCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiA0ODogSW52YWxpZCBDUFAgZ3VhcmRzOiA5Zm9vICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjQ4LiBoZWFkZXJzLmF0Ojc4OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzEzOAorI0FUX1NUQVJUXzEzOQorYXRfZm5fZ3JvdXBfYmFubmVyIDEzOSAnaGVhZGVycy5hdDo1OCcgXAorICAiSW52YWxpZCBDUFAgZ3VhcmRzOiAgLS1kZWZpbmVzPTlmb28uaCIgIiAgICAgICAgICAiIDgKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxMzkuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiAjIFBvc3NpYmx5IGNyZWF0ZSBpbm5lciBkaXJlY3Rvcmllcy4KLWRpcm5hbWU9YChkaXJuYW1lIDlmb28pIDI+L2Rldi9udWxsIHx8CitkaXJuYW1lPWAkYXNfZGlybmFtZSAtLSA5Zm9vIHx8CiAkYXNfZXhwciBYOWZvbyA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAogCSBYOWZvbyA6ICdYXCgvL1wpW14vXScgXHwgXAogCSBYOWZvbyA6ICdYXCgvL1wpJCcgXHwgXAotCSBYOWZvbyA6ICdYXCgvXCknIFx8IFwKLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFg5Zm9vIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIHMvLiovLi87IHEnYAoteyBpZiAkYXNfbWtkaXJfcDsgdGhlbgotICAgIG1rZGlyIC1wICRkaXJuYW1lCi0gIGVsc2UKLSAgICBhc19kaXI9JGRpcm5hbWUKLSAgICBhc19kaXJzPQotICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCi0gICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgotICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8Ci0kYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAotCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkYXNfZGlyIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKLSAgICBkb25lCi0gICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKLSAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGRpcm5hbWUiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGRpcm5hbWUiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KLQorCSBYOWZvbyA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFg5Zm9vIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorYXNfZGlyPSRkaXJuYW1lOyBhc19mbl9ta2Rpcl9wCiAKIGNhdCA+OWZvby55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKwogCiAlewogI2luY2x1ZGUgPDlmb28uaD4KLXZvaWQgeXllcnJvciAoY29uc3QgY2hhciAqKTsKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CiBpbnQgeXlsZXggKHZvaWQpOwogJX0KICUlCkBAIC02MjY0LDg4ICszNTAyNyw1MDMgQEAKIAogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiaGVhZGVycy5hdDo3ODogYmlzb24gLS1kZWZpbmVzPTlmb28uaCAtLW91dHB1dD15LnRhYi5jIDlmb28ueSIKLWVjaG8gaGVhZGVycy5hdDo3OCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLS1kZWZpbmVzPTlmb28uaCAtLW91dHB1dD15LnRhYi5jIDlmb28ueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJoZWFkZXJzLmF0Ojc4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6NTg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLWRlZmluZXM9OWZvby5oIC0tb3V0cHV0PTlmb28uYyA5Zm9vLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJoZWFkZXJzLmF0OjU4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tZGVmaW5lcz05Zm9vLmggLS1vdXRwdXQ9OWZvby5jIDlmb28ueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDo1OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDo1ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1kZWZpbmVzPTlmb28uaCAtLW91dHB1dD05Zm9vLmMgOWZvby55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tZGVmaW5lcz05Zm9vLmggLS1vdXRwdXQ9OWZvby5jIDlmb28ueSIgImhlYWRlcnMuYXQ6NTgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1kZWZpbmVzPTlmb28uaCAtLW91dHB1dD05Zm9vLmMgOWZvby55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjU4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6NTg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJoZWFkZXJzLmF0OjU4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6NTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjU4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaGVhZGVycy5hdDo1OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjU4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDo1ODogYmlzb24gLS1kZWZpbmVzPTlmb28uaCAtLW91dHB1dD05Zm9vLmMgOWZvby55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiaGVhZGVycy5hdDo1OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtLWRlZmluZXM9OWZvby5oIC0tb3V0cHV0PTlmb28uYyA5Zm9vLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDo1OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJoZWFkZXJzLmF0Ojc4OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgLW8geS50YWIubyAtSS4gLWMgeS50YWIuYyIKLWVjaG8gaGVhZGVycy5hdDo3OCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTIC1vIHkudGFiLm8gLUkuIC1jIHkudGFiLmMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiaGVhZGVycy5hdDo3ODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjU4OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiaGVhZGVycy5hdDo1OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDo1OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjU4OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgLWMgLW8gOWZvby5vIC1JLiAtYyA5Zm9vLmMgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgLW8gOWZvby5vIC1JLiAtYyA5Zm9vLmMgIiAiaGVhZGVycy5hdDo1OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgLW8gOWZvby5vIC1JLiAtYyA5Zm9vLmMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6NTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xMzkKKyNBVF9TVEFSVF8xNDAKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxNDAgJ2hlYWRlcnMuYXQ6NTknIFwKKyAgIkludmFsaWQgQ1BQIGd1YXJkczogJWdsci1wYXJzZXIgLS1kZWZpbmVzPWlucHV0L2lucHV0LmgiICIiIDgKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxNDAuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisjIFBvc3NpYmx5IGNyZWF0ZSBpbm5lciBkaXJlY3Rvcmllcy4KK2Rpcm5hbWU9YCRhc19kaXJuYW1lIC0tIGlucHV0L2lucHV0IHx8CiskYXNfZXhwciBYaW5wdXQvaW5wdXQgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWGlucHV0L2lucHV0IDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFhpbnB1dC9pbnB1dCA6ICdYXCgvL1wpJCcgXHwgXAorCSBYaW5wdXQvaW5wdXQgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYaW5wdXQvaW5wdXQgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCithc19kaXI9JGRpcm5hbWU7IGFzX2ZuX21rZGlyX3AKKworY2F0ID5pbnB1dC9pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVnbHItcGFyc2VyCisleworI2luY2x1ZGUgPGlucHV0L2lucHV0Lmg+Cit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworaW50IHl5bGV4ICh2b2lkKTsKKyV9CislJQorZHVtbXk6OworJSUKKyNpbmNsdWRlIDxpbnB1dC9pbnB1dC5oPgorX0FURU9GCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6NTk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLWRlZmluZXM9aW5wdXQvaW5wdXQuaCAtLW91dHB1dD1pbnB1dC9pbnB1dC5jIGlucHV0L2lucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJoZWFkZXJzLmF0OjU5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tZGVmaW5lcz1pbnB1dC9pbnB1dC5oIC0tb3V0cHV0PWlucHV0L2lucHV0LmMgaW5wdXQvaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDo1OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6NTk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tZGVmaW5lcz1pbnB1dC9pbnB1dC5oIC0tb3V0cHV0PWlucHV0L2lucHV0LmMgaW5wdXQvaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLWRlZmluZXM9aW5wdXQvaW5wdXQuaCAtLW91dHB1dD1pbnB1dC9pbnB1dC5jIGlucHV0L2lucHV0LnkiICJoZWFkZXJzLmF0OjU5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tZGVmaW5lcz1pbnB1dC9pbnB1dC5oIC0tb3V0cHV0PWlucHV0L2lucHV0LmMgaW5wdXQvaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDo1OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjU5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaGVhZGVycy5hdDo1OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjU5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDo1OTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImhlYWRlcnMuYXQ6NTkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDo1OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6NTk6IGJpc29uIC0tZGVmaW5lcz1pbnB1dC9pbnB1dC5oIC0tb3V0cHV0PWlucHV0L2lucHV0LmMgaW5wdXQvaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImhlYWRlcnMuYXQ6NTkiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLS1kZWZpbmVzPWlucHV0L2lucHV0LmggLS1vdXRwdXQ9aW5wdXQvaW5wdXQuYyBpbnB1dC9pbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6NTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwogCi0gIDQ5ICkgIyA0OS4gaGVhZGVycy5hdDo4NzogZXhwb3J0IFlZTFRZUEUKLSAgICBhdF9zZXR1cF9saW5lPSdoZWFkZXJzLmF0Ojg3JwotICAgIGF0X2Rlc2M9J2V4cG9ydCBZWUxUWVBFJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgNDk6IGV4cG9ydCBZWUxUWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICI0OS4gaGVhZGVycy5hdDo4NzogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6NTk6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJoZWFkZXJzLmF0OjU5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjU5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6NTk6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyAtYyAtbyBpbnB1dC9pbnB1dC5vIC1JLiAtYyBpbnB1dC9pbnB1dC5jICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTIC1jIC1vIGlucHV0L2lucHV0Lm8gLUkuIC1jIGlucHV0L2lucHV0LmMgIiAiaGVhZGVycy5hdDo1OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgLW8gaW5wdXQvaW5wdXQubyAtSS4gLWMgaW5wdXQvaW5wdXQuYworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDo1OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzE0MAorI0FUX1NUQVJUXzE0MQorYXRfZm5fZ3JvdXBfYmFubmVyIDE0MSAnaGVhZGVycy5hdDo2MCcgXAorICAiSW52YWxpZCBDUFAgZ3VhcmRzOiAlZ2xyLXBhcnNlciAtLWRlZmluZXM9OWZvby5oIiAiIiA4CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTQxLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworIyBQb3NzaWJseSBjcmVhdGUgaW5uZXIgZGlyZWN0b3JpZXMuCitkaXJuYW1lPWAkYXNfZGlybmFtZSAtLSA5Zm9vIHx8CiskYXNfZXhwciBYOWZvbyA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYOWZvbyA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYOWZvbyA6ICdYXCgvL1wpJCcgXHwgXAorCSBYOWZvbyA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFg5Zm9vIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorYXNfZGlyPSRkaXJuYW1lOyBhc19mbl9ta2Rpcl9wCisKK2NhdCA+OWZvby55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVnbHItcGFyc2VyCisleworI2luY2x1ZGUgPDlmb28uaD4KK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CitpbnQgeXlsZXggKHZvaWQpOworJX0KKyUlCitkdW1teTo7CislJQorI2luY2x1ZGUgPDlmb28uaD4KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjYwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1kZWZpbmVzPTlmb28uaCAtLW91dHB1dD05Zm9vLmMgOWZvby55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiaGVhZGVycy5hdDo2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLWRlZmluZXM9OWZvby5oIC0tb3V0cHV0PTlmb28uYyA5Zm9vLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6NjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjYwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLWRlZmluZXM9OWZvby5oIC0tb3V0cHV0PTlmb28uYyA5Zm9vLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1kZWZpbmVzPTlmb28uaCAtLW91dHB1dD05Zm9vLmMgOWZvby55IiAiaGVhZGVycy5hdDo2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLWRlZmluZXM9OWZvby5oIC0tb3V0cHV0PTlmb28uYyA5Zm9vLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6NjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDo2MDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImhlYWRlcnMuYXQ6NjAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDo2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6NjA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJoZWFkZXJzLmF0OjYwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6NjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjYwOiBiaXNvbiAtLWRlZmluZXM9OWZvby5oIC0tb3V0cHV0PTlmb28uYyA5Zm9vLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJoZWFkZXJzLmF0OjYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC0tZGVmaW5lcz05Zm9vLmggLS1vdXRwdXQ9OWZvby5jIDlmb28ueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjYwOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiaGVhZGVycy5hdDo2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDo2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjYwOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgLWMgLW8gOWZvby5vIC1JLiAtYyA5Zm9vLmMgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgLW8gOWZvby5vIC1JLiAtYyA5Zm9vLmMgIiAiaGVhZGVycy5hdDo2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgLW8gOWZvby5vIC1JLiAtYyA5Zm9vLmMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6NjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xNDEKKyNBVF9TVEFSVF8xNDIKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxNDIgJ2hlYWRlcnMuYXQ6NjknIFwKKyAgImV4cG9ydCBZWUxUWVBFIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiA4CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTQyLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogY2F0ID5pbnB1dC55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogJWxvY2F0aW9ucwogCi0lbmFtZS1wcmVmaXg9Im15XyIKKyVuYW1lLXByZWZpeCAibXlfIgogJXsKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtNjM2OSwzMCArMzU1NDcsOTEgQEAKIAogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiaGVhZGVycy5hdDoxMTQ6IGJpc29uIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiCi1lY2hvIGhlYWRlcnMuYXQ6MTE0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImhlYWRlcnMuYXQ6MTE0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6OTY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiaGVhZGVycy5hdDo5NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0Ojk2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0Ojk2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiICJoZWFkZXJzLmF0Ojk2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6OTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDo5NjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImhlYWRlcnMuYXQ6OTYiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDo5NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6OTY6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJoZWFkZXJzLmF0Ojk2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6OTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0Ojk2OiBiaXNvbiAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiaGVhZGVycy5hdDo5NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6OTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgWVlMVFlQRSBzaG91bGQgYmUgZGVmaW5lZCwgYW5kIE1ZX0xMT0MgZGVjbGFyZWQuCkBAIC02NDEyLDEzMCArMzU2NTEsMjAwNiBAQAogCiAjIExpbmsgYW5kIGV4ZWN1dGUsIGp1c3QgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgZmluZSAoYW5kIGluCiAjIHBhcnRpY3VsYXIsIHRoYXQgTVlfTExPQyBpcyBpbmRlZWQgZGVmaW5lZCBzb21ld2hlcmUpLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJoZWFkZXJzLmF0OjEzMjogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIC1vIGNhbGxlci5vIC1jIGNhbGxlci5jIgotZWNobyBoZWFkZXJzLmF0OjEzMiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTIC1vIGNhbGxlci5vIC1jIGNhbGxlci5jICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImhlYWRlcnMuYXQ6MTMyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoxMTQ6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJoZWFkZXJzLmF0OjExNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoxMTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoxMTQ6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyAtYyAtbyBjYWxsZXIubyBjYWxsZXIuYyAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyAtbyBjYWxsZXIubyBjYWxsZXIuYyAiICJoZWFkZXJzLmF0OjExNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgLW8gY2FsbGVyLm8gY2FsbGVyLmMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MTE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjExNTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImhlYWRlcnMuYXQ6MTE1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjExNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9mZgotZWNobyAiaGVhZGVycy5hdDoxMzM6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyAtbyBpbnB1dC5vIC1jIGlucHV0LmMiCi1lY2hvIGhlYWRlcnMuYXQ6MTMzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLW8gaW5wdXQubyAtYyBpbnB1dC5jICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImhlYWRlcnMuYXQ6MTMzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoxMTU6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyAtYyAtbyBpbnB1dC5vIGlucHV0LmMgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgLW8gaW5wdXQubyBpbnB1dC5jICIgImhlYWRlcnMuYXQ6MTE1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyAtbyBpbnB1dC5vIGlucHV0LmMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MTE1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MTE2OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiaGVhZGVycy5hdDoxMTYiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MTE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjExNjogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxsZXIgY2FsbGVyLm8gaW5wdXQubyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxsZXIgY2FsbGVyLm8gaW5wdXQubyAkTElCUyIgImhlYWRlcnMuYXQ6MTE2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxsZXIgY2FsbGVyLm8gaW5wdXQubyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoxMTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImhlYWRlcnMuYXQ6MTM0OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGxlciBjYWxsZXIubyBpbnB1dC5vIFwkTElCUyIKLWVjaG8gaGVhZGVycy5hdDoxMzQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxsZXIgY2FsbGVyLm8gaW5wdXQubyAkTElCUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJoZWFkZXJzLmF0OjEzNDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MTE3OiAgXCRQUkVQQVJTRVIgLi9jYWxsZXIiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsbGVyIiAiaGVhZGVycy5hdDoxMTciCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxsZXIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MTE3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gImhlYWRlcnMuYXQ6MTM1OiBcJFBSRVBBUlNFUiAuL2NhbGxlciIKLWVjaG8gaGVhZGVycy5hdDoxMzUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxsZXIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiaGVhZGVycy5hdDoxMzU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MTE3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImhlYWRlcnMuYXQ6MTE3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MTE3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xNDIKKyNBVF9TVEFSVF8xNDMKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxNDMgJ2hlYWRlcnMuYXQ6MTI1JyBcCisgICJTZXZlcmFsIHBhcnNlcnMiICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgOAorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjE0My4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKLSAgYmFubmVyLTcgKSAjIEJhbm5lciA3LiBhY3Rpb25zLmF0OjE5Ci0gICAgY2F0IDw8XF9BVEVPRgorIyBBVF9URVNUKFtQUkVGSVhdLCBbRElSRUNUSVZFU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgR2VuZXJhdGUgYW5kIGNvbXBpbGUgdG8gKi5vLiAgTWFrZSBzdXJlIHRoZXJlIGlzIG5vIChhbGxvd2VkKSBZWSoKKyMgbm9yIHl5KiBpZGVudGlmaWVycyBpbiB0aGUgaGVhZGVyLiAgQ2hlY2sgdGhhdCBoZWFkZXJzIGFyZQorIyBzZWxmLWNvbnRhaW5lZCwgYW5kIGNhbiBiZSBjb21waWxlZCBieSBhIEMrKyBjb21waWxlci4KKyMgQVRfVEVTVAogCi1Vc2VyIEFjdGlvbnMuCitjYXQgPm1haW4uY2MgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYwogCisvLyBJZiB3ZSBhcmUgY29tcGlsaW5nIHdpdGggQ0M9JENYWCwgdGhlbiBkbyBub3QgbG9hZCB0aGUgQyBoZWFkZXJzCisvLyBpbnNpZGUgZXh0ZXJuICJDIiwgc2luY2UgdGhleSB3ZXJlIF9ub3RfIGNvbXBpbGVkIHRoaXMgd2F5LgorI2lmICEgQ0NfSVNfQ1hYCitleHRlcm4gIkMiCit7CisjZW5kaWYKKyAgI2luY2x1ZGUgIngxLmgiCisgICNpbmNsdWRlICJ4Mi5oIgorICAjaW5jbHVkZSAieDMuaCIKKyAgI2luY2x1ZGUgIng0LmgiCisgICNpbmNsdWRlICJ4Ni5oIgorICAjaW5jbHVkZSAieDcuaCIKKyAgI2luY2x1ZGUgIng4LmgiCisjaWYgISBDQ19JU19DWFgKK30KKyNlbmRpZgorI2luY2x1ZGUgIng1LmhoIgorLy8jaW5jbHVkZSAieDYuaGgiCisKKyNkZWZpbmUgUlVOKFMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpbnQgcmVzID0gUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAocmVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0ZDo6Y2VyciA8PCAjUyI6ICIgPDwgcmVzIDw8IHN0ZDo6ZW5kbDsgIFwKKyAgfSB3aGlsZSAoZmFsc2UpCisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgUlVOKHgxX3BhcnNlKCkpOworICBSVU4oeDJfcGFyc2UoKSk7CisgIFJVTih4M19wYXJzZSgpKTsKKyAgUlVOKHg0X3BhcnNlKCkpOworICB4NV86OnBhcnNlciBwNTsKKyAgUlVOKHA1LnBhcnNlKCkpOworICBSVU4oeDZfcGFyc2UoKSk7CisgIFJVTih4N19wYXJzZSgpKTsKKyAgUlVOKHg4X3BhcnNlKCkpOworLy8gIHg2Xzo6cGFyc2VyIHA2OworLy8gIFJVTihwNi5wYXJzZSgpKTsKKyAgcmV0dXJuIDA7Cit9CiBfQVRFT0YKLSAgICA7OworIyBtYWluLmNjCiAKLSAgNTAgKSAjIDUwLiBhY3Rpb25zLmF0OjI1OiBNaWQtcnVsZSBhY3Rpb25zCi0gICAgYXRfc2V0dXBfbGluZT0nYWN0aW9ucy5hdDoyNScKLSAgICBhdF9kZXNjPSdNaWQtcnVsZSBhY3Rpb25zJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgNTA6IE1pZC1ydWxlIGFjdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICI1MC4gYWN0aW9ucy5hdDoyNTogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgorCitjYXQgPngxLnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWRlZmluZSBhcGkucHJlZml4ICJ4MV8iCisKKyVlcnJvci12ZXJib3NlCisldW5pb24KK3sKKyAgaW50IGludGVnZXI7Cit9CisleworI2luY2x1ZGUgPHN0ZGlvLmg+CisgIHN0YXRpYyB2b2lkIHgxX2Vycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgc3RhdGljIGludCB4MV9sZXggKHZvaWQpOworJX0KKyUlCitleHA6CisgICd4JyAnMScgeyBwcmludGYgKCJ4MVxuIik7IH0KK3wgJ3gnICcyJyB7IHByaW50ZiAoIngyXG4iKTsgfQorfCAneCcgJzMnIHsgcHJpbnRmICgieDNcbiIpOyB9Cit8ICd4JyAnNCcgeyBwcmludGYgKCJ4NFxuIik7IH0KK3wgJ3gnICc1JyB7IHByaW50ZiAoIng1XG4iKTsgfQorfCAneCcgJzYnIHsgcHJpbnRmICgieDZcbiIpOyB9Cit8ICd4JyAnNycgeyBwcmludGYgKCJ4N1xuIik7IH0KK3wgJ3gnICc4JyB7IHByaW50ZiAoIng4XG4iKTsgfQorOworCislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB4MV9lcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitzdGF0aWMKK2ludCB4MV9sZXggKHZvaWQpCit7CisgIHN0YXRpYyBjaGFyIGNvbnN0IGlucHV0W10gPSAieDEiOworICBzdGF0aWMgc2l6ZV90IHRva251bSA9IDA7CisgIGludCByZXM7CisgIDsKKyAgYXNzZXJ0ICh0b2tudW0gPCBzaXplb2YgaW5wdXQgLyBzaXplb2YgaW5wdXRbMF0pOworICByZXMgPSBpbnB1dFt0b2tudW0rK107CisgIDsKKyAgcmV0dXJuIHJlczsKK30KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIxODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1kIC1vIHgxLmMgeDEueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImhlYWRlcnMuYXQ6MjE4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1kIC1vIHgxLmMgeDEueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIxODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWQgLW8geDEuYyB4MS55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kIC1vIHgxLmMgeDEueSIgImhlYWRlcnMuYXQ6MjE4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kIC1vIHgxLmMgeDEueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMTg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJoZWFkZXJzLmF0OjIxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjE4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaGVhZGVycy5hdDoyMTgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIxODogYmlzb24gLWQgLW8geDEuYyB4MS55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiaGVhZGVycy5hdDoyMTgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLWQgLW8geDEuYyB4MS55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIxODogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImhlYWRlcnMuYXQ6MjE4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIxODogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIC1jIC1vIHgxLm8geDEuYyAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyAtbyB4MS5vIHgxLmMgIiAiaGVhZGVycy5hdDoyMTgiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTIC1jIC1vIHgxLm8geDEuYworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMTg6IGVjaG8gXCJ4MVwiID4+ZXhwb3V0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiaGVhZGVycy5hdDoyMTgiCisoICRhdF9jaGVja190cmFjZTsgZWNobyAieDEiID4+ZXhwb3V0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCitjYXQgPngyLnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWRlZmluZSBhcGkucHJlZml4ICJ4Ml8iCislbG9jYXRpb25zICVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKyV1bmlvbgoreworICBpbnQgaW50ZWdlcjsKK30KKyV7CisjaW5jbHVkZSA8c3RkaW8uaD4KKyAgc3RhdGljIHZvaWQgeDJfZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworICBzdGF0aWMgaW50IHgyX2xleCAodm9pZCk7CislfQorJSUKK2V4cDoKKyAgJ3gnICcxJyB7IHByaW50ZiAoIngxXG4iKTsgfQorfCAneCcgJzInIHsgcHJpbnRmICgieDJcbiIpOyB9Cit8ICd4JyAnMycgeyBwcmludGYgKCJ4M1xuIik7IH0KK3wgJ3gnICc0JyB7IHByaW50ZiAoIng0XG4iKTsgfQorfCAneCcgJzUnIHsgcHJpbnRmICgieDVcbiIpOyB9Cit8ICd4JyAnNicgeyBwcmludGYgKCJ4NlxuIik7IH0KK3wgJ3gnICc3JyB7IHByaW50ZiAoIng3XG4iKTsgfQorfCAneCcgJzgnIHsgcHJpbnRmICgieDhcbiIpOyB9Cis7CisKKyUlCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHgyX2Vycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBZWV9MT0NBVElPTl9QUklOVCAoc3RkZXJyLCAoeDJfbGxvYykpOworICBmcHJpbnRmIChzdGRlcnIsICI6ICIpOworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKyNpbmNsdWRlIDxhc3NlcnQuaD4KK3N0YXRpYworaW50IHgyX2xleCAodm9pZCkKK3sKKyAgc3RhdGljIGNoYXIgY29uc3QgaW5wdXRbXSA9ICJ4MiI7CisgIHN0YXRpYyBzaXplX3QgdG9rbnVtID0gMDsKKyAgaW50IHJlczsKKyAgOworICBhc3NlcnQgKHRva251bSA8IHNpemVvZiBpbnB1dCAvIHNpemVvZiBpbnB1dFswXSk7CisgIHJlcyA9IGlucHV0W3Rva251bSsrXTsKKyAgOworICAoeDJfbGxvYykuZmlyc3RfbGluZSA9ICh4Ml9sbG9jKS5sYXN0X2xpbmUgPSAxOworICAoeDJfbGxvYykuZmlyc3RfY29sdW1uID0gKHgyX2xsb2MpLmxhc3RfY29sdW1uID0gdG9rbnVtOworICByZXR1cm4gcmVzOworfQorX0FURU9GCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjE5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLWQgLW8geDIuYyB4Mi55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiaGVhZGVycy5hdDoyMTkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLWQgLW8geDIuYyB4Mi55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjE5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZCAtbyB4Mi5jIHgyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWQgLW8geDIuYyB4Mi55IiAiaGVhZGVycy5hdDoyMTkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWQgLW8geDIuYyB4Mi55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIxOTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImhlYWRlcnMuYXQ6MjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMTk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJoZWFkZXJzLmF0OjIxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjE5OiBiaXNvbiAtZCAtbyB4Mi5jIHgyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJoZWFkZXJzLmF0OjIxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtZCAtbyB4Mi5jIHgyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjE5OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiaGVhZGVycy5hdDoyMTkiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjE5OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgLWMgLW8geDIubyB4Mi5jICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTIC1jIC1vIHgyLm8geDIuYyAiICJoZWFkZXJzLmF0OjIxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgLW8geDIubyB4Mi5jCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIxOTogZWNobyBcIngyXCIgPj5leHBvdXQiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJoZWFkZXJzLmF0OjIxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBlY2hvICJ4MiIgPj5leHBvdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisKK2NhdCA+eDMueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislZGVmaW5lIGFwaS5wcmVmaXggIngzXyIKKyVnbHItcGFyc2VyCislZXJyb3ItdmVyYm9zZQorJXVuaW9uCit7CisgIGludCBpbnRlZ2VyOworfQorJXsKKyNpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZCB4M19lcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CisgIHN0YXRpYyBpbnQgeDNfbGV4ICh2b2lkKTsKKyV9CislJQorZXhwOgorICAneCcgJzEnIHsgcHJpbnRmICgieDFcbiIpOyB9Cit8ICd4JyAnMicgeyBwcmludGYgKCJ4MlxuIik7IH0KK3wgJ3gnICczJyB7IHByaW50ZiAoIngzXG4iKTsgfQorfCAneCcgJzQnIHsgcHJpbnRmICgieDRcbiIpOyB9Cit8ICd4JyAnNScgeyBwcmludGYgKCJ4NVxuIik7IH0KK3wgJ3gnICc2JyB7IHByaW50ZiAoIng2XG4iKTsgfQorfCAneCcgJzcnIHsgcHJpbnRmICgieDdcbiIpOyB9Cit8ICd4JyAnOCcgeyBwcmludGYgKCJ4OFxuIik7IH0KKzsKKworJSUKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeDNfZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorI2luY2x1ZGUgPGFzc2VydC5oPgorc3RhdGljCitpbnQgeDNfbGV4ICh2b2lkKQoreworICBzdGF0aWMgY2hhciBjb25zdCBpbnB1dFtdID0gIngzIjsKKyAgc3RhdGljIHNpemVfdCB0b2tudW0gPSAwOworICBpbnQgcmVzOworICA7CisgIGFzc2VydCAodG9rbnVtIDwgc2l6ZW9mIGlucHV0IC8gc2l6ZW9mIGlucHV0WzBdKTsKKyAgcmVzID0gaW5wdXRbdG9rbnVtKytdOworICA7CisgIHJldHVybiByZXM7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtZCAtbyB4My5jIHgzLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJoZWFkZXJzLmF0OjIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtZCAtbyB4My5jIHgzLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kIC1vIHgzLmMgeDMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZCAtbyB4My5jIHgzLnkiICJoZWFkZXJzLmF0OjIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZCAtbyB4My5jIHgzLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjIwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaGVhZGVycy5hdDoyMjAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyMDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImhlYWRlcnMuYXQ6MjIwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjA6IGJpc29uIC1kIC1vIHgzLmMgeDMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImhlYWRlcnMuYXQ6MjIwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1kIC1vIHgzLmMgeDMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjA6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJoZWFkZXJzLmF0OjIyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjA6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyAtYyAtbyB4My5vIHgzLmMgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgLW8geDMubyB4My5jICIgImhlYWRlcnMuYXQ6MjIwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyAtbyB4My5vIHgzLmMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjIwOiBlY2hvIFwieDNcIiA+PmV4cG91dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImhlYWRlcnMuYXQ6MjIwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGVjaG8gIngzIiA+PmV4cG91dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworY2F0ID54NC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVkZWZpbmUgYXBpLnByZWZpeCAieDRfIgorJWxvY2F0aW9ucyAlZGVidWcgJWdsci1wYXJzZXIKKyVlcnJvci12ZXJib3NlCisldW5pb24KK3sKKyAgaW50IGludGVnZXI7Cit9CisleworI2luY2x1ZGUgPHN0ZGlvLmg+CisgIHN0YXRpYyB2b2lkIHg0X2Vycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgc3RhdGljIGludCB4NF9sZXggKHZvaWQpOworJX0KKyUlCitleHA6CisgICd4JyAnMScgeyBwcmludGYgKCJ4MVxuIik7IH0KK3wgJ3gnICcyJyB7IHByaW50ZiAoIngyXG4iKTsgfQorfCAneCcgJzMnIHsgcHJpbnRmICgieDNcbiIpOyB9Cit8ICd4JyAnNCcgeyBwcmludGYgKCJ4NFxuIik7IH0KK3wgJ3gnICc1JyB7IHByaW50ZiAoIng1XG4iKTsgfQorfCAneCcgJzYnIHsgcHJpbnRmICgieDZcbiIpOyB9Cit8ICd4JyAnNycgeyBwcmludGYgKCJ4N1xuIik7IH0KK3wgJ3gnICc4JyB7IHByaW50ZiAoIng4XG4iKTsgfQorOworCislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB4NF9lcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgWVlfTE9DQVRJT05fUFJJTlQgKHN0ZGVyciwgKHg0X2xsb2MpKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiOiAiKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitzdGF0aWMKK2ludCB4NF9sZXggKHZvaWQpCit7CisgIHN0YXRpYyBjaGFyIGNvbnN0IGlucHV0W10gPSAieDQiOworICBzdGF0aWMgc2l6ZV90IHRva251bSA9IDA7CisgIGludCByZXM7CisgIDsKKyAgYXNzZXJ0ICh0b2tudW0gPCBzaXplb2YgaW5wdXQgLyBzaXplb2YgaW5wdXRbMF0pOworICByZXMgPSBpbnB1dFt0b2tudW0rK107CisgIDsKKyAgKHg0X2xsb2MpLmZpcnN0X2xpbmUgPSAoeDRfbGxvYykubGFzdF9saW5lID0gMTsKKyAgKHg0X2xsb2MpLmZpcnN0X2NvbHVtbiA9ICh4NF9sbG9jKS5sYXN0X2NvbHVtbiA9IHRva251bTsKKyAgcmV0dXJuIHJlczsKK30KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyMTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1kIC1vIHg0LmMgeDQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImhlYWRlcnMuYXQ6MjIxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1kIC1vIHg0LmMgeDQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyMTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWQgLW8geDQuYyB4NC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kIC1vIHg0LmMgeDQueSIgImhlYWRlcnMuYXQ6MjIxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kIC1vIHg0LmMgeDQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJoZWFkZXJzLmF0OjIyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjIxOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaGVhZGVycy5hdDoyMjEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyMTogYmlzb24gLWQgLW8geDQuYyB4NC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiaGVhZGVycy5hdDoyMjEiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLWQgLW8geDQuYyB4NC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyMTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImhlYWRlcnMuYXQ6MjIxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyMTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIC1jIC1vIHg0Lm8geDQuYyAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyAtbyB4NC5vIHg0LmMgIiAiaGVhZGVycy5hdDoyMjEiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTIC1jIC1vIHg0Lm8geDQuYworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjE6IGVjaG8gXCJ4NFwiID4+ZXhwb3V0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiaGVhZGVycy5hdDoyMjEiCisoICRhdF9jaGVja190cmFjZTsgZWNobyAieDQiID4+ZXhwb3V0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCitjYXQgPng1LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWRlZmluZSBhcGkucHJlZml4ICJ4NV8iCislbG9jYXRpb25zICVkZWJ1ZyAlbGFuZ3VhZ2UgImMrKyIKKyVlcnJvci12ZXJib3NlCisldW5pb24KK3sKKyAgaW50IGludGVnZXI7Cit9CisleworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyAgc3RhdGljIGludCB4NV9sZXggKHg1Xzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgeDVfOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKTsKKyV9CislJQorZXhwOgorICAneCcgJzEnIHsgcHJpbnRmICgieDFcbiIpOyB9Cit8ICd4JyAnMicgeyBwcmludGYgKCJ4MlxuIik7IH0KK3wgJ3gnICczJyB7IHByaW50ZiAoIngzXG4iKTsgfQorfCAneCcgJzQnIHsgcHJpbnRmICgieDRcbiIpOyB9Cit8ICd4JyAnNScgeyBwcmludGYgKCJ4NVxuIik7IH0KK3wgJ3gnICc2JyB7IHByaW50ZiAoIng2XG4iKTsgfQorfCAneCcgJzcnIHsgcHJpbnRmICgieDdcbiIpOyB9Cit8ICd4JyAnOCcgeyBwcmludGYgKCJ4OFxuIik7IH0KKzsKKworJSUKKy8qIEEgQysrIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCit2b2lkCit4NV86OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGxvY2F0aW9uX3R5cGUmIGwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtKQoreworICAodm9pZCkgbDsKKyAgc3RkOjpjZXJyIDw8IGwgPDwgIjogIiA8PCBtIDw8IHN0ZDo6ZW5kbDsKK30KKyNpbmNsdWRlIDxhc3NlcnQuaD4KK3N0YXRpYworaW50IHg1X2xleCAoeDVfOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCB4NV86OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApCit7CisgIHN0YXRpYyBjaGFyIGNvbnN0IGlucHV0W10gPSAieDUiOworICBzdGF0aWMgc2l6ZV90IHRva251bSA9IDA7CisgIGludCByZXM7CisgICh2b2lkKSBsdmFscDsodm9pZCkgbGxvY3A7CisgIGFzc2VydCAodG9rbnVtIDwgc2l6ZW9mIGlucHV0IC8gc2l6ZW9mIGlucHV0WzBdKTsKKyAgcmVzID0gaW5wdXRbdG9rbnVtKytdOworICA7CisgICgqbGxvY3ApLmJlZ2luLmxpbmUgPSAoKmxsb2NwKS5lbmQubGluZSA9IDE7CisgICgqbGxvY3ApLmJlZ2luLmNvbHVtbiA9ICgqbGxvY3ApLmVuZC5jb2x1bW4gPSB0b2tudW07CisgIHJldHVybiByZXM7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtZCAtbyB4NS5jYyB4NS55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiaGVhZGVycy5hdDoyMjIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLWQgLW8geDUuY2MgeDUueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyMjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWQgLW8geDUuY2MgeDUueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZCAtbyB4NS5jYyB4NS55IiAiaGVhZGVycy5hdDoyMjIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWQgLW8geDUuY2MgeDUueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjI6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJoZWFkZXJzLmF0OjIyMiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjIyOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaGVhZGVycy5hdDoyMjIiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyMjogYmlzb24gLWQgLW8geDUuY2MgeDUueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImhlYWRlcnMuYXQ6MjIyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1kIC1vIHg1LmNjIHg1LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjI6IFwkQklTT05fQ1hYX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ1hYX1dPUktTIiAiaGVhZGVycy5hdDoyMjIiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NYWF9XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjI6IFwkQ1hYIFwkQ1hYRkxBR1MgXCRDUFBGTEFHUyAtYyAtbyB4NS5vIHg1LmNjICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTIC1jIC1vIHg1Lm8geDUuY2MgIiAiaGVhZGVycy5hdDoyMjIiCisoICRhdF9jaGVja190cmFjZTsgJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTIC1jIC1vIHg1Lm8geDUuY2MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjIyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjIyOiBlY2hvIFwieDVcIiA+PmV4cG91dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImhlYWRlcnMuYXQ6MjIyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGVjaG8gIng1IiA+PmV4cG91dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworY2F0ID54Ni55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVkZWZpbmUgYXBpLnByZWZpeCAieDZfIgorJWRlZmluZSBhcGkucHVyZQorJWVycm9yLXZlcmJvc2UKKyV1bmlvbgoreworICBpbnQgaW50ZWdlcjsKK30KKyV7CisjaW5jbHVkZSA8c3RkaW8uaD4KKyAgc3RhdGljIHZvaWQgeDZfZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworICBzdGF0aWMgaW50IHg2X2xleCAoWDZfU1RZUEUgKmx2YWxwKTsKKyV9CislJQorZXhwOgorICAneCcgJzEnIHsgcHJpbnRmICgieDFcbiIpOyB9Cit8ICd4JyAnMicgeyBwcmludGYgKCJ4MlxuIik7IH0KK3wgJ3gnICczJyB7IHByaW50ZiAoIngzXG4iKTsgfQorfCAneCcgJzQnIHsgcHJpbnRmICgieDRcbiIpOyB9Cit8ICd4JyAnNScgeyBwcmludGYgKCJ4NVxuIik7IH0KK3wgJ3gnICc2JyB7IHByaW50ZiAoIng2XG4iKTsgfQorfCAneCcgJzcnIHsgcHJpbnRmICgieDdcbiIpOyB9Cit8ICd4JyAnOCcgeyBwcmludGYgKCJ4OFxuIik7IH0KKzsKKworJSUKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeDZfZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorI2luY2x1ZGUgPGFzc2VydC5oPgorc3RhdGljCitpbnQgeDZfbGV4IChYNl9TVFlQRSAqbHZhbHApCit7CisgIHN0YXRpYyBjaGFyIGNvbnN0IGlucHV0W10gPSAieDYiOworICBzdGF0aWMgc2l6ZV90IHRva251bSA9IDA7CisgIGludCByZXM7CisgICh2b2lkKSBsdmFscDs7CisgIGFzc2VydCAodG9rbnVtIDwgc2l6ZW9mIGlucHV0IC8gc2l6ZW9mIGlucHV0WzBdKTsKKyAgcmVzID0gaW5wdXRbdG9rbnVtKytdOworICA7CisgIHJldHVybiByZXM7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtZCAtbyB4Ni5jIHg2LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJoZWFkZXJzLmF0OjIyMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtZCAtbyB4Ni5jIHg2LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjIzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kIC1vIHg2LmMgeDYueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZCAtbyB4Ni5jIHg2LnkiICJoZWFkZXJzLmF0OjIyMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZCAtbyB4Ni5jIHg2LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjIzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjIzOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaGVhZGVycy5hdDoyMjMiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyMzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImhlYWRlcnMuYXQ6MjIzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjIzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjM6IGJpc29uIC1kIC1vIHg2LmMgeDYueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImhlYWRlcnMuYXQ6MjIzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1kIC1vIHg2LmMgeDYueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjM6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJoZWFkZXJzLmF0OjIyMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjM6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyAtYyAtbyB4Ni5vIHg2LmMgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgLW8geDYubyB4Ni5jICIgImhlYWRlcnMuYXQ6MjIzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyAtbyB4Ni5vIHg2LmMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjIzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjIzOiBlY2hvIFwieDZcIiA+PmV4cG91dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImhlYWRlcnMuYXQ6MjIzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGVjaG8gIng2IiA+PmV4cG91dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworY2F0ID54Ny55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVkZWZpbmUgYXBpLnByZWZpeCAieDdfIgorJWRlZmluZSBhcGkucHVzaC1wdWxsIGJvdGgKKyVlcnJvci12ZXJib3NlCisldW5pb24KK3sKKyAgaW50IGludGVnZXI7Cit9CisleworI2luY2x1ZGUgPHN0ZGlvLmg+CisgIHN0YXRpYyB2b2lkIHg3X2Vycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgc3RhdGljIGludCB4N19sZXggKHZvaWQpOworJX0KKyUlCitleHA6CisgICd4JyAnMScgeyBwcmludGYgKCJ4MVxuIik7IH0KK3wgJ3gnICcyJyB7IHByaW50ZiAoIngyXG4iKTsgfQorfCAneCcgJzMnIHsgcHJpbnRmICgieDNcbiIpOyB9Cit8ICd4JyAnNCcgeyBwcmludGYgKCJ4NFxuIik7IH0KK3wgJ3gnICc1JyB7IHByaW50ZiAoIng1XG4iKTsgfQorfCAneCcgJzYnIHsgcHJpbnRmICgieDZcbiIpOyB9Cit8ICd4JyAnNycgeyBwcmludGYgKCJ4N1xuIik7IH0KK3wgJ3gnICc4JyB7IHByaW50ZiAoIng4XG4iKTsgfQorOworCislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB4N19lcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitzdGF0aWMKK2ludCB4N19sZXggKHZvaWQpCit7CisgIHN0YXRpYyBjaGFyIGNvbnN0IGlucHV0W10gPSAieDciOworICBzdGF0aWMgc2l6ZV90IHRva251bSA9IDA7CisgIGludCByZXM7CisgIDsKKyAgYXNzZXJ0ICh0b2tudW0gPCBzaXplb2YgaW5wdXQgLyBzaXplb2YgaW5wdXRbMF0pOworICByZXMgPSBpbnB1dFt0b2tudW0rK107CisgIDsKKyAgcmV0dXJuIHJlczsKK30KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyNDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1kIC1vIHg3LmMgeDcueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImhlYWRlcnMuYXQ6MjI0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1kIC1vIHg3LmMgeDcueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyNDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWQgLW8geDcuYyB4Ny55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kIC1vIHg3LmMgeDcueSIgImhlYWRlcnMuYXQ6MjI0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kIC1vIHg3LmMgeDcueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjQ6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJoZWFkZXJzLmF0OjIyNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjI0OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaGVhZGVycy5hdDoyMjQiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyNDogYmlzb24gLWQgLW8geDcuYyB4Ny55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiaGVhZGVycy5hdDoyMjQiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLWQgLW8geDcuYyB4Ny55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjI0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyNDogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImhlYWRlcnMuYXQ6MjI0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyNDogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIC1jIC1vIHg3Lm8geDcuYyAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyAtbyB4Ny5vIHg3LmMgIiAiaGVhZGVycy5hdDoyMjQiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTIC1jIC1vIHg3Lm8geDcuYworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjQ6IGVjaG8gXCJ4N1wiID4+ZXhwb3V0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiaGVhZGVycy5hdDoyMjQiCisoICRhdF9jaGVja190cmFjZTsgZWNobyAieDciID4+ZXhwb3V0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjI0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCitjYXQgPng4LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWRlZmluZSBhcGkucHJlZml4ICJ4OF8iCislZGVmaW5lIGFwaS5wdXJlICVkZWZpbmUgYXBpLnB1c2gtcHVsbCBib3RoCislZXJyb3ItdmVyYm9zZQorJXVuaW9uCit7CisgIGludCBpbnRlZ2VyOworfQorJXsKKyNpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZCB4OF9lcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CisgIHN0YXRpYyBpbnQgeDhfbGV4IChYOF9TVFlQRSAqbHZhbHApOworJX0KKyUlCitleHA6CisgICd4JyAnMScgeyBwcmludGYgKCJ4MVxuIik7IH0KK3wgJ3gnICcyJyB7IHByaW50ZiAoIngyXG4iKTsgfQorfCAneCcgJzMnIHsgcHJpbnRmICgieDNcbiIpOyB9Cit8ICd4JyAnNCcgeyBwcmludGYgKCJ4NFxuIik7IH0KK3wgJ3gnICc1JyB7IHByaW50ZiAoIng1XG4iKTsgfQorfCAneCcgJzYnIHsgcHJpbnRmICgieDZcbiIpOyB9Cit8ICd4JyAnNycgeyBwcmludGYgKCJ4N1xuIik7IH0KK3wgJ3gnICc4JyB7IHByaW50ZiAoIng4XG4iKTsgfQorOworCislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB4OF9lcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitzdGF0aWMKK2ludCB4OF9sZXggKFg4X1NUWVBFICpsdmFscCkKK3sKKyAgc3RhdGljIGNoYXIgY29uc3QgaW5wdXRbXSA9ICJ4OCI7CisgIHN0YXRpYyBzaXplX3QgdG9rbnVtID0gMDsKKyAgaW50IHJlczsKKyAgKHZvaWQpIGx2YWxwOzsKKyAgYXNzZXJ0ICh0b2tudW0gPCBzaXplb2YgaW5wdXQgLyBzaXplb2YgaW5wdXRbMF0pOworICByZXMgPSBpbnB1dFt0b2tudW0rK107CisgIDsKKyAgcmV0dXJuIHJlczsKK30KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyNTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1kIC1vIHg4LmMgeDgueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImhlYWRlcnMuYXQ6MjI1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1kIC1vIHg4LmMgeDgueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyNTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWQgLW8geDguYyB4OC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kIC1vIHg4LmMgeDgueSIgImhlYWRlcnMuYXQ6MjI1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kIC1vIHg4LmMgeDgueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjU6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJoZWFkZXJzLmF0OjIyNSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjI1OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiaGVhZGVycy5hdDoyMjUiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyNTogYmlzb24gLWQgLW8geDguYyB4OC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiaGVhZGVycy5hdDoyMjUiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLWQgLW8geDguYyB4OC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjI1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyNTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImhlYWRlcnMuYXQ6MjI1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIyNTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIC1jIC1vIHg4Lm8geDguYyAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyAtbyB4OC5vIHg4LmMgIiAiaGVhZGVycy5hdDoyMjUiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTIC1jIC1vIHg4Lm8geDguYworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyMjU6IGVjaG8gXCJ4OFwiID4+ZXhwb3V0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiaGVhZGVycy5hdDoyMjUiCisoICRhdF9jaGVja190cmFjZTsgZWNobyAieDgiID4+ZXhwb3V0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjI1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworI0FUX1RFU1QoW3g1XSwgWyVsb2NhdGlvbnMgJWxhbmd1YWdlICJjKysiICVnbHItcGFyc2VyXSkKKworIyBDaGVjayB0aGVyZSBpcyBubyAneXknIGxlZnQuCisjIEMrKyBvdXRwdXQgcmVsaWVzIG9uIG5hbWVzcGFjZXMgYW5kIHN0aWxsIHVzZXMgeXkgYSBsb3QuCisjCisjIENoZWNrIHRoZXJlIGlzIG5vICdZWScgbGVmdC4KKyMgSWdub3JlIGNvbW1lbnRzLCBZWUNoYXIgKHRlbXBsYXRlIHBhcmFtZXRlciksIFlZUEFSU0VfUEFSQU0KKyMgKG9ic29sZXRlKSwgWVlQVVNIX01PUkUoX0RFRklORUQpPyAgKGNvbnN0YW50IGRlZmluaXRpb24pLAorIyBZWV9cdytfSU5DTFVERUQgKGhlYWRlciBndWFyZHMpLgorIworIyBZWURFQlVHIChub3QgcmVuYW1lZCkgY2FuIGJlIHJlYWQsIGJ1dCBub3QgY2hhbmdlZC4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjIzNzogXCRQRVJMIC1uIC0wNzc3IC1lICcKKyAgc3svXFwqLio/XFwqL317fWdzOworICBzey8vLip9e31nOworICBze1xcYihZWUNoYXIKKyAgICAgIHxZWVBBUlNFX1BBUkFNCisgICAgICB8WVlQVVNIX01PUkUoX0RFRklORUQpPworICAgICAgfFlZX1xcdytfSU5DTFVERUQKKyAgICAgIHxZWV9OVUxMCisgICAgICB8KGRlZmluZWR8aWYpXFwgWVlERUJVRworICAgICAgKVxcYn17fWd4OworICB3aGlsZSAoL14oLipZWS4qKVwkL2dtKQorICB7CisgICAgcHJpbnQgXCJcJEFSR1Y6IGludmFsaWQgZXhwb3J0ZWQgWVk6IFwkMVxcblwiOworICB9CisgIGlmIChcJEFSR1YgPX4gL1xcLmhcJC8pCisgIHsKKyAgICB3aGlsZSAoL14oLip5eS4qKVwkL2dtKQorICAgIHsKKyAgICAgIHByaW50IFwiXCRBUkdWOiBpbnZhbGlkIGV4cG9ydGVkIHl5OiBcJDFcXG5cIjsKKyAgICB9CisgIH0KKycgLS0gKi5oaCAqLmgiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJoZWFkZXJzLmF0OjIzNyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbiAtMDc3NyAtZSAnCisgIHN7L1wqLio/XCovfXt9Z3M7CisgIHN7Ly8uKn17fWc7CisgIHN7XGIoWVlDaGFyCisgICAgICB8WVlQQVJTRV9QQVJBTQorICAgICAgfFlZUFVTSF9NT1JFKF9ERUZJTkVEKT8KKyAgICAgIHxZWV9cdytfSU5DTFVERUQKKyAgICAgIHxZWV9OVUxMCisgICAgICB8KGRlZmluZWR8aWYpXCBZWURFQlVHCisgICAgICApXGJ9e31neDsKKyAgd2hpbGUgKC9eKC4qWVkuKikkL2dtKQorICB7CisgICAgcHJpbnQgIiRBUkdWOiBpbnZhbGlkIGV4cG9ydGVkIFlZOiAkMVxuIjsKKyAgfQorICBpZiAoJEFSR1YgPX4gL1wuaCQvKQorICB7CisgICAgd2hpbGUgKC9eKC4qeXkuKikkL2dtKQorICAgIHsKKyAgICAgIHByaW50ICIkQVJHVjogaW52YWxpZCBleHBvcnRlZCB5eTogJDFcbiI7CisgICAgfQorICB9CisnIC0tICouaGggKi5oCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6MjM3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIENoZWNrIHRoYXQgdGhlIGhlYWRlcnMgYXJlIHNlbGYtY29udGFpbmVkLCBhbmQgcHJvdGVjdGVkIGFnYWluc3QKKyMgbXVsdGlwbGUgaW5jbHVzaW9ucy4gIFdoaWxlIGF0IGl0LCBjaGVjayB0aGV5IGFyZSBzYW5lIGZvciBDKysuCitmb3IgaCBpbiAqLmggKi5oaAorZG8KKyAgIyBObyBzaGVsbCBleHBhbnNpb24gd2l0aCBBVF9EQVRBLgorICBjYXQgPiRoLmNjIDw8RU9GCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCisKKyNpbmNsdWRlICIkaCIKKyNpbmNsdWRlICIkaCIKK0VPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyNzA6IFwkQklTT05fQ1hYX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ1hYX1dPUktTIiAiaGVhZGVycy5hdDoyNzAiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NYWF9XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyNzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyNzA6IFwkQ1hYIFwkQ1hYRkxBR1MgXCRDUFBGTEFHUyAtYyAtbyBcJGgubyBcJGguY2MgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgLWMgLW8gJGgubyAkaC5jYyAiICJoZWFkZXJzLmF0OjI3MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgLWMgLW8gJGgubyAkaC5jYworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyNzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCitkb25lCisKKyMgRG8gdGhpcyBsYXRlLCBzbyB0aGF0IG90aGVyIGNoZWNrcyBoYXZlIGJlZW4gcGVyZm9ybWVkLgorY2F0ID5jLWFuZC1jeHguaCA8PCdfQVRFT0YnCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorICBpbnQgZm9ydHl0d28gKHZvaWQpOworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK19BVEVPRgorCitjYXQgPmMtb25seS5jIDw8J19BVEVPRicKKyNpbmNsdWRlICJjLWFuZC1jeHguaCIKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuIGZvcnR5dHdvICgpID09IDQyID8gMCA6IDE7Cit9CitfQVRFT0YKKworY2F0ID5jeHgtb25seS5jYyA8PCdfQVRFT0YnCisjaW5jbHVkZSAiYy1hbmQtY3h4LmgiCitpbnQgZm9ydHl0d28gKCkKK3sKKyAgcmV0dXJuIDQyOworfQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjI3NDogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImhlYWRlcnMuYXQ6Mjc0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjI3NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjI3NDogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIC1jIC1vIGMtb25seS5vIGMtb25seS5jICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTIC1jIC1vIGMtb25seS5vIGMtb25seS5jICIgImhlYWRlcnMuYXQ6Mjc0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyAtbyBjLW9ubHkubyBjLW9ubHkuYworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyNzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjI3NDogXCRCSVNPTl9DWFhfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DWFhfV09SS1MiICJoZWFkZXJzLmF0OjI3NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ1hYX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjI3NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjI3NDogXCRDWFggXCRDWFhGTEFHUyBcJENQUEZMQUdTIC1jIC1vIGN4eC1vbmx5Lm8gY3h4LW9ubHkuY2MgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgLWMgLW8gY3h4LW9ubHkubyBjeHgtb25seS5jYyAiICJoZWFkZXJzLmF0OjI3NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgLWMgLW8gY3h4LW9ubHkubyBjeHgtb25seS5jYworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyNzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyNzQ6IFwkQ1hYIFwkQ1hYRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgYy1vbmx5Lm8gY3h4LW9ubHkubyAtbyBjLWFuZC1jeHggfHwKKyAgICAgICAgICBleGl0IDc3IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiaGVhZGVycy5hdDoyNzQiCisoICRhdF9jaGVja190cmFjZTsgJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGMtb25seS5vIGN4eC1vbmx5Lm8gLW8gYy1hbmQtY3h4IHx8CisgICAgICAgICAgZXhpdCA3NworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19za2lwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyNzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyNzQ6ICBcJFBSRVBBUlNFUiAuL2MtYW5kLWN4eCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jLWFuZC1jeHgiICJoZWFkZXJzLmF0OjI3NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2MtYW5kLWN4eAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyNzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyNzQ6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiaGVhZGVycy5hdDoyNzQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvaGVhZGVycy5hdDoyNzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjI3NjogXCRCSVNPTl9DWFhfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DWFhfV09SS1MiICJoZWFkZXJzLmF0OjI3NiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ1hYX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjI3NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9oZWFkZXJzLmF0OjI3NjogXCRDWFggXCRDWFhGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBwYXJzZXIgeFsxLThdLm8gLURDQ19JU19DWFg9XCRDQ19JU19DWFggbWFpbi5jYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBwYXJzZXIgeFsxLThdLm8gLURDQ19JU19DWFg9JENDX0lTX0NYWCBtYWluLmNjICRMSUJTIiAiaGVhZGVycy5hdDoyNzYiCisoICRhdF9jaGVja190cmFjZTsgJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIHBhcnNlciB4WzEtOF0ubyAtRENDX0lTX0NYWD0kQ0NfSVNfQ1hYIG1haW4uY2MgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6Mjc2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6Mjc3OiAgXCRQUkVQQVJTRVIgLi9wYXJzZXIiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vcGFyc2VyIiAiaGVhZGVycy5hdDoyNzciCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9wYXJzZXIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6Mjc3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6Mjc3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImhlYWRlcnMuYXQ6Mjc3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2hlYWRlcnMuYXQ6Mjc3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzE0MworI0FUX1NUQVJUXzE0NAorYXRfZm5fZ3JvdXBfYmFubmVyIDE0NCAnYWN0aW9ucy5hdDoyNCcgXAorICAiTWlkLXJ1bGUgYWN0aW9ucyIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDkKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxNDQuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiAjIEJpc29uIG9uY2UgZm9yZ290IHRoZSBtaWQtcnVsZSBhY3Rpb25zLiAgSXQgd2FzIGJlY2F1c2UgdGhlIGFjdGlvbgpAQCAtNjU0MywyNCArMzc2NTgsMjEgQEAKICMgaW5zdGVhZCBvZiBiZWluZyBhdHRhY2hlZCB0byB0aGUgZW1wdHkgcnVsZSBkZWRpY2F0ZWQgdG8gdGhpcwogIyBhY3Rpb24uCiAKKwogY2F0ID5pbnB1dC55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogJWVycm9yLXZlcmJvc2UKICVkZWJ1ZwogJXsKLSMgaW5jbHVkZSA8c3RkaW8uaD4KLSMgaW5jbHVkZSA8c3RkbGliLmg+Ci0gIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKGNvbnN0IGNoYXIgKm1zZyk7Ci0gIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOworc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CitzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKICV9CiAlJQogZXhwOiAgICAgeyBwdXRjaGFyICgnMCcpOyB9CkBAIC02NTc2LDE5ICszNzY4OCwyNiBAQAogICAgICAgICAgeyBwdXRjaGFyICgnXG4nKTsgfQogICAgOwogJSUKLXN0YXRpYyBpbnQKLXl5bGV4ICh2b2lkKQotewotICBzdGF0aWMgY29uc3QgY2hhciAqaW5wdXQgPSAiMTIzNDU2Nzg5IjsKLSAgcmV0dXJuICppbnB1dCsrOwotfQotCi1zdGF0aWMgdm9pZAoteXllcnJvciAoY29uc3QgY2hhciAqbXNnKQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQogewogICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKIH0KLQorI2luY2x1ZGUgPGFzc2VydC5oPgorc3RhdGljCitpbnQgeXlsZXggKHZvaWQpCit7CisgIHN0YXRpYyBjaGFyIGNvbnN0IGlucHV0W10gPSAiMTIzNDU2Nzg5IjsKKyAgc3RhdGljIHNpemVfdCB0b2tudW0gPSAwOworICBpbnQgcmVzOworICA7CisgIGFzc2VydCAodG9rbnVtIDwgc2l6ZW9mIGlucHV0IC8gc2l6ZW9mIGlucHV0WzBdKTsKKyAgcmVzID0gaW5wdXRbdG9rbnVtKytdOworICA7CisgIHJldHVybiByZXM7Cit9CiBpbnQKIG1haW4gKHZvaWQpCiB7CkBAIC02NTk4LDExNyArMzc3MTcsMjk4MiBAQAogCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJhY3Rpb25zLmF0Ojc1OiBiaXNvbiAtZCAtdiAtbyBpbnB1dC5jIGlucHV0LnkiCi1lY2hvIGFjdGlvbnMuYXQ6NzUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1kIC12IC1vIGlucHV0LmMgaW5wdXQueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJhY3Rpb25zLmF0Ojc1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjYzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLWQgLXYgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiYWN0aW9ucy5hdDo2MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtZCAtdiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjYzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZCAtdiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWQgLXYgLW8gaW5wdXQuYyBpbnB1dC55IiAiYWN0aW9ucy5hdDo2MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZCAtdiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo2MzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6NjMiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo2MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NjM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0OjYzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKLQotJGF0X3RyYWNlb24KLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJhY3Rpb25zLmF0Ojc2OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgotZWNobyBhY3Rpb25zLmF0Ojc2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJhY3Rpb25zLmF0Ojc2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJhY3Rpb25zLmF0Ojc5OiBcJFBSRVBBUlNFUiAuL2lucHV0IgotZWNobyBhY3Rpb25zLmF0Ojc5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gIjAxMjM0NTY3ODkKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImFjdGlvbnMuYXQ6Nzk6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NjM6IGJpc29uIC1kIC12IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6NjMiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLWQgLXYgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NjQ6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJhY3Rpb25zLmF0OjY0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjY0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICA1MSApICMgNTEuIGFjdGlvbnMuYXQ6OTE6IEV4b3RpYyBEb2xsYXJzCi0gICAgYXRfc2V0dXBfbGluZT0nYWN0aW9ucy5hdDo5MScKLSAgICBhdF9kZXNjPSdFeG90aWMgRG9sbGFycycKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDUxOiBFeG90aWMgRG9sbGFycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiNTEuIGFjdGlvbnMuYXQ6OTE6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjY0OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyIgImFjdGlvbnMuYXQ6NjQiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NjQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo2NTogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJhY3Rpb25zLmF0OjY1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMDEyMzQ1Njc4OQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo2NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjY1OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6NjUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo2NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzE0NAorI0FUX1NUQVJUXzE0NQorYXRfZm5fZ3JvdXBfYmFubmVyIDE0NSAnYWN0aW9ucy5hdDoxMzMnIFwKKyAgIkluaXRpYWwgbG9jYXRpb246IHlhY2MuYyAiICIgICAgICAgICAgICAgICAgICAgICAgIiA5CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTQ1LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKIAogCiBjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWRlZmluZXMgLyogRklYTUU6IFJlcXVpcmVkIGJ5IGxhbHIxLmNjIGluIEJpc29uIDIuNi4gKi8KKyVsb2NhdGlvbnMKKyVkZWJ1ZworJXNrZWxldG9uICJ5YWNjLmMiCisKKworJWNvZGUKK3sKKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyMgaW5jbHVkZSA8c3RkbGliLmg+IC8qIGdldGVudiAqLworc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CitzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKK30KKyUlCitleHA6IHsgWVlfTE9DQVRJT05fUFJJTlQoc3RkZXJyLCBAJCk7IGZwdXRjICgnXG4nLCBzdGRlcnIpOyB9CislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBZWV9MT0NBVElPTl9QUklOVCAoc3RkZXJyLCAoeXlsbG9jKSk7CisgIGZwcmludGYgKHN0ZGVyciwgIjogIik7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorCitpbnQgeXlsZXggKHZvaWQpCit7CisgIHJldHVybiAneCc7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgeXlkZWJ1ZyA9ICEhZ2V0ZW52KCJZWURFQlVHIik7CisgIHJldHVybiAhIXl5cGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJhY3Rpb25zLmF0OjEzMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTMzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiICJhY3Rpb25zLmF0OjEzMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTMzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTMzOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYWN0aW9ucy5hdDoxMzMiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzMzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6MTMzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTMzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzM6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6MTMzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTMzOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiYWN0aW9ucy5hdDoxMzMiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTMzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTMzOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyIgImFjdGlvbnMuYXQ6MTMzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTMzOiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgImFjdGlvbnMuYXQ6MTMzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTMzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTMzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6MTMzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiMS4xCisxLjE6IHN5bnRheCBlcnJvcgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xNDUKKyNBVF9TVEFSVF8xNDYKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxNDYgJ2FjdGlvbnMuYXQ6MTM0JyBcCisgICJJbml0aWFsIGxvY2F0aW9uOiB5YWNjLmMgJWRlZmluZSBhcGkucHVyZSBmdWxsIiAiICIgOQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjE0Ni4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVkZWZpbmVzIC8qIEZJWE1FOiBSZXF1aXJlZCBieSBsYWxyMS5jYyBpbiBCaXNvbiAyLjYuICovCislbG9jYXRpb25zCislZGVidWcKKyVza2VsZXRvbiAieWFjYy5jIgorJWRlZmluZSBhcGkucHVyZSBmdWxsCisKKyVjb2RlCit7CisjIGluY2x1ZGUgPHN0ZGlvLmg+CisjIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBnZXRlbnYgKi8KK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKFlZTFRZUEUgY29uc3QgKiBjb25zdCBsbG9jcCwgIGNvbnN0IGNoYXIgKm1zZyk7CitzdGF0aWMgaW50IHl5bGV4IChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApOworfQorJSUKK2V4cDogeyBZWV9MT0NBVElPTl9QUklOVChzdGRlcnIsIEAkKTsgZnB1dGMgKCdcbicsIHN0ZGVycik7IH0KKyUlCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKFlZTFRZUEUgY29uc3QgKiBjb25zdCBsbG9jcCwgIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgWVlfTE9DQVRJT05fUFJJTlQgKHN0ZGVyciwgKCpsbG9jcCkpOworICBmcHJpbnRmIChzdGRlcnIsICI6ICIpOworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKworaW50IHl5bGV4IChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApCit7CisgIFlZVVNFKGx2YWxwKTsKKyAgWVlVU0UobGxvY3ApOworICByZXR1cm4gJ3gnOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHl5ZGVidWcgPSAhIWdldGVudigiWVlERUJVRyIpOworICByZXR1cm4gISF5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM0OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiYWN0aW9ucy5hdDoxMzQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM0OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IiAiYWN0aW9ucy5hdDoxMzQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzNDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6MTM0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzQ6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0OjEzNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM0OiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0OjEzNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzNDogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImFjdGlvbnMuYXQ6MTM0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzNDogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJhY3Rpb25zLmF0OjEzNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzNDogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJhY3Rpb25zLmF0OjEzNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzNDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0OjEzNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gIjEuMQorMS4xOiBzeW50YXggZXJyb3IKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTQ2CisjQVRfU1RBUlRfMTQ3CithdF9mbl9ncm91cF9iYW5uZXIgMTQ3ICdhY3Rpb25zLmF0OjEzNScgXAorICAiSW5pdGlhbCBsb2NhdGlvbjogeWFjYy5jICVkZWZpbmUgYXBpLnB1cmUgJXBhcnNlLXBhcmFtIHsgaW50IHggfSIgIiIgOQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjE0Ny4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVkZWZpbmVzIC8qIEZJWE1FOiBSZXF1aXJlZCBieSBsYWxyMS5jYyBpbiBCaXNvbiAyLjYuICovCislbG9jYXRpb25zCislZGVidWcKKyVza2VsZXRvbiAieWFjYy5jIgorJWRlZmluZSBhcGkucHVyZSAlcGFyc2UtcGFyYW0geyBpbnQgeCB9CisKKyVjb2RlCit7CisjIGluY2x1ZGUgPHN0ZGlvLmg+CisjIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBnZXRlbnYgKi8KK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKFlZTFRZUEUgY29uc3QgKiBjb25zdCBsbG9jcCwgaW50IHgsICBjb25zdCBjaGFyICptc2cpOworc3RhdGljIGludCB5eWxleCAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKTsKK30KKyUlCitleHA6IHsgWVlfTE9DQVRJT05fUFJJTlQoc3RkZXJyLCBAJCk7IGZwdXRjICgnXG4nLCBzdGRlcnIpOyB9CislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yIChZWUxUWVBFIGNvbnN0ICogY29uc3QgbGxvY3AsIGludCB4LCAgY29uc3QgY2hhciAqbXNnKQoreworICBZWVVTRSh4KTsKKyAgWVlfTE9DQVRJT05fUFJJTlQgKHN0ZGVyciwgKCpsbG9jcCkpOworICBmcHJpbnRmIChzdGRlcnIsICI6ICIpOworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKworaW50IHl5bGV4IChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApCit7CisgIFlZVVNFKGx2YWxwKTsKKyAgWVlVU0UobGxvY3ApOworICByZXR1cm4gJ3gnOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHl5ZGVidWcgPSAhIWdldGVudigiWVlERUJVRyIpOworICByZXR1cm4gISF5eXBhcnNlICgwKTsKK30KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzNTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImFjdGlvbnMuYXQ6MTM1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzNTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgImFjdGlvbnMuYXQ6MTM1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzU6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0OjEzNSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM1OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYWN0aW9ucy5hdDoxMzUiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzNTogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDoxMzUiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzU6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJhY3Rpb25zLmF0OjEzNSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzU6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAiYWN0aW9ucy5hdDoxMzUiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzU6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAiYWN0aW9ucy5hdDoxMzUiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDoxMzUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICIxLjEKKzEuMTogc3ludGF4IGVycm9yCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzE0NworI0FUX1NUQVJUXzE0OAorYXRfZm5fZ3JvdXBfYmFubmVyIDE0OCAnYWN0aW9ucy5hdDoxMzYnIFwKKyAgIkluaXRpYWwgbG9jYXRpb246IHlhY2MuYyAlZGVmaW5lIGFwaS5wdXNoLXB1bGwgYm90aCIgIiIgOQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjE0OC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVkZWZpbmVzIC8qIEZJWE1FOiBSZXF1aXJlZCBieSBsYWxyMS5jYyBpbiBCaXNvbiAyLjYuICovCislbG9jYXRpb25zCislZGVidWcKKyVza2VsZXRvbiAieWFjYy5jIgorJWRlZmluZSBhcGkucHVzaC1wdWxsIGJvdGgKKworJWNvZGUKK3sKKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyMgaW5jbHVkZSA8c3RkbGliLmg+IC8qIGdldGVudiAqLworc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CitzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKK30KKyUlCitleHA6IHsgWVlfTE9DQVRJT05fUFJJTlQoc3RkZXJyLCBAJCk7IGZwdXRjICgnXG4nLCBzdGRlcnIpOyB9CislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBZWV9MT0NBVElPTl9QUklOVCAoc3RkZXJyLCAoeXlsbG9jKSk7CisgIGZwcmludGYgKHN0ZGVyciwgIjogIik7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorCitpbnQgeXlsZXggKHZvaWQpCit7CisgIHJldHVybiAneCc7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgeXlkZWJ1ZyA9ICEhZ2V0ZW52KCJZWURFQlVHIik7CisgIHJldHVybiAhIXl5cGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJhY3Rpb25zLmF0OjEzNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiICJhY3Rpb25zLmF0OjEzNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM2OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYWN0aW9ucy5hdDoxMzYiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzNjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6MTM2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzY6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6MTM2IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM2OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiYWN0aW9ucy5hdDoxMzYiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM2OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyIgImFjdGlvbnMuYXQ6MTM2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM2OiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgImFjdGlvbnMuYXQ6MTM2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM2OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6MTM2IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiMS4xCisxLjE6IHN5bnRheCBlcnJvcgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xNDgKKyNBVF9TVEFSVF8xNDkKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxNDkgJ2FjdGlvbnMuYXQ6MTM3JyBcCisgICJJbml0aWFsIGxvY2F0aW9uOiB5YWNjLmMgJWRlZmluZSBhcGkucHVzaC1wdWxsIGJvdGggJWRlZmluZSBhcGkucHVyZSBmdWxsIiAiIiA5CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTQ5LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWRlZmluZXMgLyogRklYTUU6IFJlcXVpcmVkIGJ5IGxhbHIxLmNjIGluIEJpc29uIDIuNi4gKi8KKyVsb2NhdGlvbnMKKyVkZWJ1ZworJXNrZWxldG9uICJ5YWNjLmMiCislZGVmaW5lIGFwaS5wdXNoLXB1bGwgYm90aCAlZGVmaW5lIGFwaS5wdXJlIGZ1bGwKKworJWNvZGUKK3sKKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyMgaW5jbHVkZSA8c3RkbGliLmg+IC8qIGdldGVudiAqLworc3RhdGljIHZvaWQgeXllcnJvciAoWVlMVFlQRSBjb25zdCAqIGNvbnN0IGxsb2NwLCAgY29uc3QgY2hhciAqbXNnKTsKK3N0YXRpYyBpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCk7Cit9CislJQorZXhwOiB7IFlZX0xPQ0FUSU9OX1BSSU5UKHN0ZGVyciwgQCQpOyBmcHV0YyAoJ1xuJywgc3RkZXJyKTsgfQorJSUKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoWVlMVFlQRSBjb25zdCAqIGNvbnN0IGxsb2NwLCAgY29uc3QgY2hhciAqbXNnKQoreworICBZWV9MT0NBVElPTl9QUklOVCAoc3RkZXJyLCAoKmxsb2NwKSk7CisgIGZwcmludGYgKHN0ZGVyciwgIjogIik7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorCitpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCkKK3sKKyAgWVlVU0UobHZhbHApOworICBZWVVTRShsbG9jcCk7CisgIHJldHVybiAneCc7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgeXlkZWJ1ZyA9ICEhZ2V0ZW52KCJZWURFQlVHIik7CisgIHJldHVybiAhIXl5cGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJhY3Rpb25zLmF0OjEzNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiICJhY3Rpb25zLmF0OjEzNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYWN0aW9ucy5hdDoxMzciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzNzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6MTM3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzc6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6MTM3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM3OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiYWN0aW9ucy5hdDoxMzciCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM3OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyIgImFjdGlvbnMuYXQ6MTM3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM3OiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgImFjdGlvbnMuYXQ6MTM3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6MTM3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiMS4xCisxLjE6IHN5bnRheCBlcnJvcgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xNDkKKyNBVF9TVEFSVF8xNTAKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxNTAgJ2FjdGlvbnMuYXQ6MTM4JyBcCisgICJJbml0aWFsIGxvY2F0aW9uOiBnbHIuYyAiICIgICAgICAgICAgICAgICAgICAgICAgICIgOQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjE1MC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVkZWZpbmVzIC8qIEZJWE1FOiBSZXF1aXJlZCBieSBsYWxyMS5jYyBpbiBCaXNvbiAyLjYuICovCislbG9jYXRpb25zCislZGVidWcKKyVza2VsZXRvbiAiZ2xyLmMiCisKKworJWNvZGUKK3sKKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyMgaW5jbHVkZSA8c3RkbGliLmg+IC8qIGdldGVudiAqLworc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CitzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKK30KKyUlCitleHA6IHsgWVlfTE9DQVRJT05fUFJJTlQoc3RkZXJyLCBAJCk7IGZwdXRjICgnXG4nLCBzdGRlcnIpOyB9CislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBZWV9MT0NBVElPTl9QUklOVCAoc3RkZXJyLCAoeXlsbG9jKSk7CisgIGZwcmludGYgKHN0ZGVyciwgIjogIik7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorCitpbnQgeXlsZXggKHZvaWQpCit7CisgIHJldHVybiAneCc7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgeXlkZWJ1ZyA9ICEhZ2V0ZW52KCJZWURFQlVHIik7CisgIHJldHVybiAhIXl5cGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJhY3Rpb25zLmF0OjEzOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiICJhY3Rpb25zLmF0OjEzOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYWN0aW9ucy5hdDoxMzgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6MTM4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzg6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6MTM4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM4OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiYWN0aW9ucy5hdDoxMzgiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM4OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyIgImFjdGlvbnMuYXQ6MTM4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM4OiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgImFjdGlvbnMuYXQ6MTM4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6MTM4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiMS4xCisxLjE6IHN5bnRheCBlcnJvcgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xNTAKKyNBVF9TVEFSVF8xNTEKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxNTEgJ2FjdGlvbnMuYXQ6MTM5JyBcCisgICJJbml0aWFsIGxvY2F0aW9uOiBnbHIuYyAlZGVmaW5lIGFwaS5wdXJlIiAiICAgICAgICIgOQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjE1MS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVkZWZpbmVzIC8qIEZJWE1FOiBSZXF1aXJlZCBieSBsYWxyMS5jYyBpbiBCaXNvbiAyLjYuICovCislbG9jYXRpb25zCislZGVidWcKKyVza2VsZXRvbiAiZ2xyLmMiCislZGVmaW5lIGFwaS5wdXJlCisKKyVjb2RlCit7CisjIGluY2x1ZGUgPHN0ZGlvLmg+CisjIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBnZXRlbnYgKi8KK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKFlZTFRZUEUgY29uc3QgKiBjb25zdCBsbG9jcCwgIGNvbnN0IGNoYXIgKm1zZyk7CitzdGF0aWMgaW50IHl5bGV4IChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApOworfQorJSUKK2V4cDogeyBZWV9MT0NBVElPTl9QUklOVChzdGRlcnIsIEAkKTsgZnB1dGMgKCdcbicsIHN0ZGVycik7IH0KKyUlCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKFlZTFRZUEUgY29uc3QgKiBjb25zdCBsbG9jcCwgIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgWVlfTE9DQVRJT05fUFJJTlQgKHN0ZGVyciwgKCpsbG9jcCkpOworICBmcHJpbnRmIChzdGRlcnIsICI6ICIpOworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKworaW50IHl5bGV4IChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApCit7CisgIFlZVVNFKGx2YWxwKTsKKyAgWVlVU0UobGxvY3ApOworICByZXR1cm4gJ3gnOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHl5ZGVidWcgPSAhIWdldGVudigiWVlERUJVRyIpOworICByZXR1cm4gISF5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiYWN0aW9ucy5hdDoxMzkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IiAiYWN0aW9ucy5hdDoxMzkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzOTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6MTM5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0OjEzOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM5OiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0OjEzOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzOTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImFjdGlvbnMuYXQ6MTM5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzOTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJhY3Rpb25zLmF0OjEzOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzOTogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJhY3Rpb25zLmF0OjEzOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzOTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0OjEzOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gIjEuMQorMS4xOiBzeW50YXggZXJyb3IKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTM5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTUxCisjQVRfU1RBUlRfMTUyCithdF9mbl9ncm91cF9iYW5uZXIgMTUyICdhY3Rpb25zLmF0OjE0MCcgXAorICAiSW5pdGlhbCBsb2NhdGlvbjogbGFscjEuY2MgIiAiICAgICAgICAgICAgICAgICAgICAiIDkKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxNTIuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislZGVmaW5lcyAvKiBGSVhNRTogUmVxdWlyZWQgYnkgbGFscjEuY2MgaW4gQmlzb24gMi42LiAqLworJWxvY2F0aW9ucworJWRlYnVnCislc2tlbGV0b24gImxhbHIxLmNjIgorCisKKyVjb2RlCit7CisjIGluY2x1ZGUgPHN0ZGlvLmg+CisjIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBnZXRlbnYgKi8KKworc3RhdGljIGludCB5eWxleCAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKTsKK30KKyUlCitleHA6IHsgc3RkOjpjZXJyIDw8IEAkIDw8IHN0ZDo6ZW5kbDsgfQorJSUKKy8qIEEgQysrIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCit2b2lkCit5eTo6cGFyc2VyOjplcnJvciAoY29uc3QgbG9jYXRpb25fdHlwZSYgbCwgY29uc3Qgc3RkOjpzdHJpbmcmIG0pCit7CisgICh2b2lkKSBsOworICBzdGQ6OmNlcnIgPDwgbCA8PCAiOiAiIDw8IG0gPDwgc3RkOjplbmRsOworfQorCitpbnQgeXlsZXggKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCB5eTo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCkKK3sKKyAgWVlVU0UobHZhbHApOworICBZWVVTRShsbG9jcCk7CisgIHJldHVybiAneCc7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgeXk6OnBhcnNlciBwOworICBwLnNldF9kZWJ1Z19sZXZlbCAoISFnZXRlbnYoIllZREVCVUciKSk7CisgIHJldHVybiBwLnBhcnNlICgpOworfQorX0FURU9GCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTQwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuY2MgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImFjdGlvbnMuYXQ6MTQwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNDA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuY2MgaW5wdXQueSIgImFjdGlvbnMuYXQ6MTQwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTQwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYWN0aW9ucy5hdDoxNDAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6MTQwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNDA6IGJpc29uIC1vIGlucHV0LmNjIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0OjE0MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MDogXCRCSVNPTl9DWFhfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DWFhfV09SS1MiICJhY3Rpb25zLmF0OjE0MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ1hYX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MDogXCRDWFggXCRDWFhGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyAkTElCUyIgImFjdGlvbnMuYXQ6MTQwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MDogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJhY3Rpb25zLmF0OjE0MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0OjE0MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gIjEuMQorMS4xOiBzeW50YXggZXJyb3IKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTUyCisjQVRfU1RBUlRfMTUzCithdF9mbl9ncm91cF9iYW5uZXIgMTUzICdhY3Rpb25zLmF0OjE0MScgXAorICAiSW5pdGlhbCBsb2NhdGlvbjogZ2xyLmNjICIgIiAgICAgICAgICAgICAgICAgICAgICAiIDkKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxNTMuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislZGVmaW5lcyAvKiBGSVhNRTogUmVxdWlyZWQgYnkgbGFscjEuY2MgaW4gQmlzb24gMi42LiAqLworJWxvY2F0aW9ucworJWRlYnVnCislc2tlbGV0b24gImdsci5jYyIKKworCislY29kZQoreworIyBpbmNsdWRlIDxzdGRpby5oPgorIyBpbmNsdWRlIDxzdGRsaWIuaD4gLyogZ2V0ZW52ICovCisKK3N0YXRpYyBpbnQgeXlsZXggKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCB5eTo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCk7Cit9CislJQorZXhwOiB7IHN0ZDo6Y2VyciA8PCBAJCA8PCBzdGQ6OmVuZGw7IH0KKyUlCisvKiBBIEMrKyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLwordm9pZAoreXk6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGxvY2F0aW9uX3R5cGUmIGwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtKQoreworICAodm9pZCkgbDsKKyAgc3RkOjpjZXJyIDw8IGwgPDwgIjogIiA8PCBtIDw8IHN0ZDo6ZW5kbDsKK30KKworaW50IHl5bGV4ICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgeXk6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApCit7CisgIFlZVVNFKGx2YWxwKTsKKyAgWVlVU0UobGxvY3ApOworICByZXR1cm4gJ3gnOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHl5OjpwYXJzZXIgcDsKKyAgcC5zZXRfZGVidWdfbGV2ZWwgKCEhZ2V0ZW52KCJZWURFQlVHIikpOworICByZXR1cm4gcC5wYXJzZSAoKTsKK30KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmNjIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJhY3Rpb25zLmF0OjE0MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTQxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkiICJhY3Rpb25zLmF0OjE0MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6MTQxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTQxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNDE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0OjE0MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTQxOiBiaXNvbiAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDoxNDEiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuY2MgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNDE6IFwkQklTT05fQ1hYX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ1hYX1dPUktTIiAiYWN0aW9ucy5hdDoxNDEiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NYWF9XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNDE6IFwkQ1hYIFwkQ1hYRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuY2MgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuY2MgJExJQlMiICJhY3Rpb25zLmF0OjE0MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuY2MgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTQxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNDE6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAiYWN0aW9ucy5hdDoxNDEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNDE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDoxNDEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICIxLjEKKzEuMTogc3ludGF4IGVycm9yCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzE1MworI0FUX1NUQVJUXzE1NAorYXRfZm5fZ3JvdXBfYmFubmVyIDE1NCAnYWN0aW9ucy5hdDoxNTAnIFwKKyAgIkluaXRpYWwgbG9jYXRpb246IHlhY2MuYyAlZGVmaW5lIGFwaS5wdXJlIGZ1bGwiICIgIiA5CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTU0LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWRlZmluZXMgLyogRklYTUU6IFJlcXVpcmVkIGJ5IGxhbHIxLmNjIGluIEJpc29uIDIuNi4gKi8KKyVsb2NhdGlvbnMKKyVkZWJ1ZworJXNrZWxldG9uICJ5YWNjLmMiCislZGVmaW5lIGFwaS5wdXJlIGZ1bGwKICV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCisjIGRlZmluZSBZWUxUWVBFIGludAorIyBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoU3RyZWFtLCBMb2MpICAgICAgXAorICAgKHZvaWQpIChMb2MpCisjIGRlZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pICAgIFwKKyAgKEN1cnJlbnQpID0gKChSaHMpW04gPyAxIDogMF0pCiAlfQogCislY29kZQoreworIyBpbmNsdWRlIDxzdGRpby5oPgorIyBpbmNsdWRlIDxzdGRsaWIuaD4gLyogZ2V0ZW52ICovCitzdGF0aWMgdm9pZCB5eWVycm9yIChZWUxUWVBFIGNvbnN0ICogY29uc3QgbGxvY3AsICBjb25zdCBjaGFyICptc2cpOworc3RhdGljIGludCB5eWxleCAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKTsKK30KKyUlCitleHA6IHsgWVlfTE9DQVRJT05fUFJJTlQoc3RkZXJyLCBAJCk7IGZwdXRjICgnXG4nLCBzdGRlcnIpOyB9CislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yIChZWUxUWVBFIGNvbnN0ICogY29uc3QgbGxvY3AsICBjb25zdCBjaGFyICptc2cpCit7CisgIFlZX0xPQ0FUSU9OX1BSSU5UIChzdGRlcnIsICgqbGxvY3ApKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiOiAiKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisKK2ludCB5eWxleCAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKQoreworICBZWVVTRShsdmFscCk7CisgIFlZVVNFKGxsb2NwKTsKKyAgcmV0dXJuICd4JzsKK30KKworaW50CittYWluICh2b2lkKQoreworICB5eWRlYnVnID0gISFnZXRlbnYoIllZREVCVUciKTsKKyAgcmV0dXJuICEheXlwYXJzZSAoKTsKK30KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImFjdGlvbnMuYXQ6MTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgImFjdGlvbnMuYXQ6MTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0OjE1MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYWN0aW9ucy5hdDoxNTAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MDogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDoxNTAiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTA6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJhY3Rpb25zLmF0OjE1MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTA6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAiYWN0aW9ucy5hdDoxNTAiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTA6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAiYWN0aW9ucy5hdDoxNTAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDoxNTAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICIKKzogc3ludGF4IGVycm9yCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzE1NAorI0FUX1NUQVJUXzE1NQorYXRfZm5fZ3JvdXBfYmFubmVyIDE1NSAnYWN0aW9ucy5hdDoxNjEnIFwKKyAgIkluaXRpYWwgbG9jYXRpb246IHlhY2MuYyAlZGVmaW5lIGFwaS5wdXJlIGZ1bGwiICIgIiA5CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTU1LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWRlZmluZXMgLyogRklYTUU6IFJlcXVpcmVkIGJ5IGxhbHIxLmNjIGluIEJpc29uIDIuNi4gKi8KKyVsb2NhdGlvbnMKKyVkZWJ1ZworJXNrZWxldG9uICJ5YWNjLmMiCislZGVmaW5lIGFwaS5wdXJlIGZ1bGwKKyV7CisjIGRlZmluZSBZWUxUWVBFIGludAorIyBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoU3RyZWFtLCBMb2MpICAgICAgXAorICAgIGZwcmludGYgKChTdHJlYW0pLCAiJWQiLCAoTG9jKSkKKyMgZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikgICAgXAorICAoQ3VycmVudCkgPSAoKFJocylbTiA/IDEgOiAwXSkKKyV9CisKKyVjb2RlCit7CisjIGluY2x1ZGUgPHN0ZGlvLmg+CisjIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBnZXRlbnYgKi8KK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKFlZTFRZUEUgY29uc3QgKiBjb25zdCBsbG9jcCwgIGNvbnN0IGNoYXIgKm1zZyk7CitzdGF0aWMgaW50IHl5bGV4IChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApOworfQorJSUKK2V4cDogeyBZWV9MT0NBVElPTl9QUklOVChzdGRlcnIsIEAkKTsgZnB1dGMgKCdcbicsIHN0ZGVycik7IH0KKyUlCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKFlZTFRZUEUgY29uc3QgKiBjb25zdCBsbG9jcCwgIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgWVlfTE9DQVRJT05fUFJJTlQgKHN0ZGVyciwgKCpsbG9jcCkpOworICBmcHJpbnRmIChzdGRlcnIsICI6ICIpOworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKworaW50IHl5bGV4IChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApCit7CisgIFlZVVNFKGx2YWxwKTsKKyAgWVlVU0UobGxvY3ApOworICByZXR1cm4gJ3gnOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHl5ZGVidWcgPSAhIWdldGVudigiWVlERUJVRyIpOworICByZXR1cm4gISF5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTYxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiYWN0aW9ucy5hdDoxNjEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE2MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTYxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IiAiYWN0aW9ucy5hdDoxNjEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE2MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE2MTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6MTYxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTYxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNjE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0OjE2MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE2MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTYxOiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0OjE2MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE2MTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImFjdGlvbnMuYXQ6MTYxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE2MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE2MTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJhY3Rpb25zLmF0OjE2MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE2MTogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJhY3Rpb25zLmF0OjE2MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE2MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE2MTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0OjE2MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gIjAKKzA6IHN5bnRheCBlcnJvcgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xNTUKKyNBVF9TVEFSVF8xNTYKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxNTYgJ2FjdGlvbnMuYXQ6MjQ0JyBcCisgICJMb2NhdGlvbiBwcmludDogeWFjYy5jICIgIiAgICAgICAgICAgICAgICAgICAgICAgICIgOQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjE1Ni4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVkZWZpbmVzIC8qIEZJWE1FOiBSZXF1aXJlZCBieSBsYWxyMS5jYyBpbiBCaXNvbiAyLjYuICovCislbG9jYXRpb25zCislZGVidWcKKyVza2VsZXRvbiAieWFjYy5jIgorCisKKyVjb2RlCit7CisjIGluY2x1ZGUgPHN0ZGlvLmg+CisjIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBnZXRlbnYgKi8KK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworc3RhdGljIGludCB5eWxleCAodm9pZCk7Cit9CislJQorZXhwOjsKKyUlCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIFlZX0xPQ0FUSU9OX1BSSU5UIChzdGRlcnIsICh5eWxsb2MpKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiOiAiKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitzdGF0aWMKK2ludCB5eWxleCAodm9pZCkKK3sKKyAgc3RhdGljIGNoYXIgY29uc3QgaW5wdXRbXSA9ICIiOworICBzdGF0aWMgc2l6ZV90IHRva251bSA9IDA7CisgIGludCByZXM7CisgIDsKKyAgYXNzZXJ0ICh0b2tudW0gPCBzaXplb2YgaW5wdXQgLyBzaXplb2YgaW5wdXRbMF0pOworICByZXMgPSBpbnB1dFt0b2tudW0rK107CisgIDsKKyAgKHl5bGxvYykuZmlyc3RfbGluZSA9ICh5eWxsb2MpLmxhc3RfbGluZSA9IDE7CisgICh5eWxsb2MpLmZpcnN0X2NvbHVtbiA9ICh5eWxsb2MpLmxhc3RfY29sdW1uID0gdG9rbnVtOworICByZXR1cm4gcmVzOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisjZGVmaW5lIFRFU1QoTDEsIEMxLCBMMiwgQzIpICAgICAgICAgIFwKKyAgKHl5bGxvYykuZmlyc3RfbGluZSA9IEwxOyAgICAgICAgICAgXAorICAoeXlsbG9jKS5maXJzdF9jb2x1bW4gPSBDMTsgICAgICAgICBcCisgICh5eWxsb2MpLmxhc3RfbGluZSA9IEwyOyAgICAgICAgICAgIFwKKyAgKHl5bGxvYykubGFzdF9jb2x1bW4gPSBDMjsgICAgICAgICAgXAorICBZWV9MT0NBVElPTl9QUklOVChzdGRvdXQsICh5eWxsb2MpKTtcCisgIHB1dGNoYXIgKCdcbicpOworCisgIFRFU1QoMSwgMSwgMSwgMSk7CisgIFRFU1QoMiwgMSwgMiwgMTApOworICBURVNUKDMsIDEsIDQsIDEpOworICBURVNUKDUsIDEsIDYsIDEwKTsKKworICBURVNUKDcsIDIsIDAsIDIpOworICBURVNUKDgsIDAsIDgsIDApOworICByZXR1cm4gMDsKK30KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjI0NDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImFjdGlvbnMuYXQ6MjQ0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoyNDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjI0NDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgImFjdGlvbnMuYXQ6MjQ0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoyNDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoyNDQ6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0OjI0NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjI0NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MjQ0OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYWN0aW9ucy5hdDoyNDQiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoyNDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjI0NDogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDoyNDQiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MjQ0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoyNDQ6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJhY3Rpb25zLmF0OjI0NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoyNDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoyNDQ6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAiYWN0aW9ucy5hdDoyNDQiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MjQ0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoyNDQ6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAiYWN0aW9ucy5hdDoyNDQiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxLjEKKzIuMS05CiszLjEtNC4wCis1LjEtNi45Cis3LjIKKzguMAorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoyNDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoyNDQ6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDoyNDQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoyNDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xNTYKKyNBVF9TVEFSVF8xNTcKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxNTcgJ2FjdGlvbnMuYXQ6MjQ1JyBcCisgICJMb2NhdGlvbiBwcmludDogZ2xyLmMgIiAiICAgICAgICAgICAgICAgICAgICAgICAgICIgOQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjE1Ny4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVkZWZpbmVzIC8qIEZJWE1FOiBSZXF1aXJlZCBieSBsYWxyMS5jYyBpbiBCaXNvbiAyLjYuICovCislbG9jYXRpb25zCislZGVidWcKKyVza2VsZXRvbiAiZ2xyLmMiCisKKworJWNvZGUKK3sKKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyMgaW5jbHVkZSA8c3RkbGliLmg+IC8qIGdldGVudiAqLworc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CitzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKK30KKyUlCitleHA6OworJSUKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgWVlfTE9DQVRJT05fUFJJTlQgKHN0ZGVyciwgKHl5bGxvYykpOworICBmcHJpbnRmIChzdGRlcnIsICI6ICIpOworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKyNpbmNsdWRlIDxhc3NlcnQuaD4KK3N0YXRpYworaW50IHl5bGV4ICh2b2lkKQoreworICBzdGF0aWMgY2hhciBjb25zdCBpbnB1dFtdID0gIiI7CisgIHN0YXRpYyBzaXplX3QgdG9rbnVtID0gMDsKKyAgaW50IHJlczsKKyAgOworICBhc3NlcnQgKHRva251bSA8IHNpemVvZiBpbnB1dCAvIHNpemVvZiBpbnB1dFswXSk7CisgIHJlcyA9IGlucHV0W3Rva251bSsrXTsKKyAgOworICAoeXlsbG9jKS5maXJzdF9saW5lID0gKHl5bGxvYykubGFzdF9saW5lID0gMTsKKyAgKHl5bGxvYykuZmlyc3RfY29sdW1uID0gKHl5bGxvYykubGFzdF9jb2x1bW4gPSB0b2tudW07CisgIHJldHVybiByZXM7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyNkZWZpbmUgVEVTVChMMSwgQzEsIEwyLCBDMikgICAgICAgICAgXAorICAoeXlsbG9jKS5maXJzdF9saW5lID0gTDE7ICAgICAgICAgICBcCisgICh5eWxsb2MpLmZpcnN0X2NvbHVtbiA9IEMxOyAgICAgICAgIFwKKyAgKHl5bGxvYykubGFzdF9saW5lID0gTDI7ICAgICAgICAgICAgXAorICAoeXlsbG9jKS5sYXN0X2NvbHVtbiA9IEMyOyAgICAgICAgICBcCisgIFlZX0xPQ0FUSU9OX1BSSU5UKHN0ZG91dCwgKHl5bGxvYykpO1wKKyAgcHV0Y2hhciAoJ1xuJyk7CisKKyAgVEVTVCgxLCAxLCAxLCAxKTsKKyAgVEVTVCgyLCAxLCAyLCAxMCk7CisgIFRFU1QoMywgMSwgNCwgMSk7CisgIFRFU1QoNSwgMSwgNiwgMTApOworCisgIFRFU1QoNywgMiwgMCwgMik7CisgIFRFU1QoOCwgMCwgOCwgMCk7CisgIHJldHVybiAwOworfQorX0FURU9GCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MjQ1OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiYWN0aW9ucy5hdDoyNDUiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjI0NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MjQ1OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IiAiYWN0aW9ucy5hdDoyNDUiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjI0NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjI0NTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6MjQ1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MjQ1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoyNDU6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0OjI0NSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjI0NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MjQ1OiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0OjI0NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoyNDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjI0NTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImFjdGlvbnMuYXQ6MjQ1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjI0NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjI0NTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJhY3Rpb25zLmF0OjI0NSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoyNDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjI0NTogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJhY3Rpb25zLmF0OjI0NSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEuMQorMi4xLTkKKzMuMS00LjAKKzUuMS02LjkKKzcuMgorOC4wCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjI0NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjI0NTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0OjI0NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjI0NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzE1NworI0FUX1NUQVJUXzE1OAorYXRfZm5fZ3JvdXBfYmFubmVyIDE1OCAnYWN0aW9ucy5hdDoyNTcnIFwKKyAgIkV4b3RpYyBEb2xsYXJzIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiA5CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTU4LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKwogJWVycm9yLXZlcmJvc2UKICVkZWJ1ZwogJXsKLSMgaW5jbHVkZSA8c3RkaW8uaD4KLSMgaW5jbHVkZSA8c3RkbGliLmg+Ci0gIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKGNvbnN0IGNoYXIgKm1zZyk7Ci0gIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOworc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CitzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKICMgZGVmaW5lIFVTRShWYXIpCiAlfQogCkBAIC02NzM5LDE4ICs0MDcyMywyNiBAQAogOwogCiAlJQotc3RhdGljIGludAoteXlsZXggKHZvaWQpCi17Ci0gIHJldHVybiBFT0Y7Ci19Ci0KLXN0YXRpYyB2b2lkCi15eWVycm9yIChjb25zdCBjaGFyICptc2cpCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCiB7CiAgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOwogfQotCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitzdGF0aWMKK2ludCB5eWxleCAodm9pZCkKK3sKKyAgc3RhdGljIGNoYXIgY29uc3QgaW5wdXRbXSA9ICIiOworICBzdGF0aWMgc2l6ZV90IHRva251bSA9IDA7CisgIGludCByZXM7CisgIDsKKyAgYXNzZXJ0ICh0b2tudW0gPCBzaXplb2YgaW5wdXQgLyBzaXplb2YgaW5wdXRbMF0pOworICByZXMgPSBpbnB1dFt0b2tudW0rK107CisgIDsKKyAgcmV0dXJuIHJlczsKK30KIGludAogbWFpbiAodm9pZCkKIHsKQEAgLTY3NjAsOTcgKzQwNzUyLDM2MSBAQAogCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJhY3Rpb25zLmF0OjE1MDogYmlzb24gLWQgLXYgLW8gaW5wdXQuYyBpbnB1dC55IgotZWNobyBhY3Rpb25zLmF0OjE1MCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLWQgLXYgLW8gaW5wdXQuYyBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImFjdGlvbnMuYXQ6MTUwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MzA1OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLWQgLXYgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiYWN0aW9ucy5hdDozMDUiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLWQgLXYgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjMwNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDozMDU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1kIC12IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZCAtdiAtbyBpbnB1dC5jIGlucHV0LnkiICJhY3Rpb25zLmF0OjMwNSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZCAtdiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MzA1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MzA1OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYWN0aW9ucy5hdDozMDUiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDozMDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjMwNTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6MzA1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MzA1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDozMDU6IGJpc29uIC1kIC12IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6MzA1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1kIC12IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjMwNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSRhdF90cmFjZW9mZgotZWNobyAiYWN0aW9ucy5hdDoxNTE6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCi1lY2hvIGFjdGlvbnMuYXQ6MTUxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJhY3Rpb25zLmF0OjE1MTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MzA2OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiYWN0aW9ucy5hdDozMDYiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MzA2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDozMDY6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAiYWN0aW9ucy5hdDozMDYiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MzA2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MzA3OiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgImFjdGlvbnMuYXQ6MzA3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMTUKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MzA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MzA3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6MzA3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MzA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTWFrZSBzdXJlIHRoYXQgZmllbGRzIGFmdGVyICRuIG9yICQtbiBhcmUgcGFyc2VkIGNvcnJlY3RseS4gIEF0IG9uZQorIyBwb2ludCB3aGlsZSBpbXBsZW1lbnRpbmcgZGFzaGVzIGluIHN5bWJvbCBuYW1lcywgd2Ugd2VyZSBkcm9wcGluZworIyBmaWVsZHMgYWZ0ZXIgJC1uLgorY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKworJXsKKyNpbmNsdWRlIDxzdGRpby5oPgorc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CitzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKKyAgdHlwZWRlZiBzdHJ1Y3QgeyBpbnQgdmFsOyB9IHN0eXBlOworIyBkZWZpbmUgWVlTVFlQRSBzdHlwZQorJX0KKworJSUKK3N0YXJ0OiBvbmUgdHdvIHsgJCQudmFsID0gJDEudmFsICsgJDIudmFsOyB9IHN1bSA7CitvbmU6IHsgJCQudmFsID0gMTsgfSA7Cit0d286IHsgJCQudmFsID0gMjsgfSA7CitzdW06IHsgcHJpbnRmICgiJWRcbiIsICQwLnZhbCArICQtMS52YWwgKyAkLTIudmFsKTsgfSA7CisKKyUlCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorI2luY2x1ZGUgPGFzc2VydC5oPgorc3RhdGljCitpbnQgeXlsZXggKHZvaWQpCit7CisgIHN0YXRpYyBjaGFyIGNvbnN0IGlucHV0W10gPSAiIjsKKyAgc3RhdGljIHNpemVfdCB0b2tudW0gPSAwOworICBpbnQgcmVzOworICA7CisgIGFzc2VydCAodG9rbnVtIDwgc2l6ZW9mIGlucHV0IC8gc2l6ZW9mIGlucHV0WzBdKTsKKyAgcmVzID0gaW5wdXRbdG9rbnVtKytdOworICA7CisgIHJldHVybiByZXM7Cit9CitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MzQwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiYWN0aW9ucy5hdDozNDAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjM0MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MzQwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IiAiYWN0aW9ucy5hdDozNDAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjM0MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjM0MDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6MzQwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MzQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDozNDA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0OjM0MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjM0MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gImFjdGlvbnMuYXQ6MTU0OiBcJFBSRVBBUlNFUiAuL2lucHV0IgotZWNobyBhY3Rpb25zLmF0OjE1NCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2lucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gPj4kYXRfc3Rkb3V0OyBlY2hvICIxNQotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiYWN0aW9ucy5hdDoxNTQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MzQwOiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0OjM0MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDozNDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OworICAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MzQwOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiYWN0aW9ucy5hdDozNDAiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MzQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICA1MiApICMgNTIuIGFjdGlvbnMuYXQ6NTI3OiBQcmludGVycyBhbmQgRGVzdHJ1Y3RvcnMgOgotICAgIGF0X3NldHVwX2xpbmU9J2FjdGlvbnMuYXQ6NTI3JwotICAgIGF0X2Rlc2M9J1ByaW50ZXJzIGFuZCBEZXN0cnVjdG9ycyA6ICcKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDUyOiBQcmludGVycyBhbmQgRGVzdHJ1Y3RvcnMgOiAgICAgICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiNTIuIGFjdGlvbnMuYXQ6NTI3OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDozNDA6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAiYWN0aW9ucy5hdDozNDAiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MzQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDozNDE6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAiYWN0aW9ucy5hdDozNDEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICI2CisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjM0MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjM0MTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0OjM0MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjM0MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTU4CisjQVRfU1RBUlRfMTU5CithdF9mbl9ncm91cF9iYW5uZXIgMTU5ICdhY3Rpb25zLmF0Ojc1MScgXAorICAiUHJpbnRlcnMgYW5kIERlc3RydWN0b3JzIiAiICAgICAgICAgICAgICAgICAgICAgICAiIDkKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxNTkuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiAKQEAgLTY4NTksNTYgKzQxMTE1LDI5IEBACiAjIEJlIHN1cmUgdG8gcGFzcyBhbGwgdGhlICVkaXJlY3RpdmVzIHRvIHRoaXMgbWFjcm8gdG8gaGF2ZSBjb3JyZWN0CiAjIGhlbHBpbmcgbWFjcm9zLiAgU28gZG9uJ3QgcHV0IGFueSBkaXJlY3RseSBpbiB0aGUgQmlzb24gZmlsZS4KIAotCi0KLQotIyBVc2luZyB5YWNjLmM/Ci0KLQotCi0KLQotCi0KLSMgeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWYgJWxvY2F0aW9uICYgJXB1cmUgJiAoJWdsciBvciAlcGFyc2UtcGFyYW0pLgotCi0jIHl5ZXJyb3IgYWx3YXlzIHNlZXMgdGhlIGxvY2F0aW9ucyAod2hlbiBhY3RpdmF0ZWQpLCBleGNlcHQgaWYKLSMgeWFjYyAmIHB1cmUgJiAhcGFyYW0uCi0KLQotIyBUaGUgaW50ZXJmYWNlIGlzIHB1cmU6IGVpdGhlciBiZWNhdXNlICVwdXJlLXBhcnNlciwgb3IgYmVjYXVzZSB3ZQotIyBhcmUgdXNpbmcgdGhlIEMrKyBwYXJzZXJzLgotCi0KLQotCi0KLQotCi0KLQotCi0KIGNhdCA+aW5wdXQueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKLSV7CislY29kZSByZXF1aXJlcyB7CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxhc3NlcnQuaD4KIAogI2RlZmluZSBZWUlOSVRERVBUSCAxMAogI2RlZmluZSBZWU1BWERFUFRIIDEwCiAjZGVmaW5lIFJBTkdFKExvY2F0aW9uKSAoTG9jYXRpb24pLmZpcnN0X2xpbmUsIChMb2NhdGlvbikubGFzdF9saW5lCi0lfQorCisvKiBEaXNwbGF5IHRoZSBzeW1ib2wgdHlwZSBTeW1ib2wuICAqLworI2RlZmluZSBWKFN5bWJvbCwgVmFsdWUsIExvY2F0aW9uLCBTZXApIFwKKyAgIGZwcmludGYgKHN0ZGVyciwgI1N5bWJvbCAiICglZEAlZC0lZCkiIFNlcCwgVmFsdWUsIFJBTkdFKExvY2F0aW9uKSkKK30KIAogJWVycm9yLXZlcmJvc2UKICVkZWJ1ZwpAQCAtNjkxNywxNSArNDExNDYsMTUgQEAKIAogCiAKLQotJXsKKyVjb2RlIHsKIAogc3RhdGljIGludCB5eWxleCAodm9pZCk7Ci1zdGF0aWMgdm9pZCB5eWVycm9yIChjb25zdCBjaGFyICptc2cpOwotJX0KK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworfQogCiAKIAorLyogRklYTUU6IFRoaXMgJXByaW50ZXIgaXNuJ3QgYWN0dWFsbHkgdGVzdGVkLiAgKi8KICVwcmludGVyCiAgIHsKICAgICBmcHJpbnRmICh5eW91dHB1dCwgIiVkIiwgJCQpOwpAQCAtNjkzMywyNSArNDExNjIsMzAgQEAKICAgaW5wdXQgbGluZSB0aGluZyAneCcgJ3knCiAKICVkZXN0cnVjdG9yCi0gIHsgcHJpbnRmICgiRnJlZWluZyBudGVybSBpbnB1dCAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KKyAgeyBmcHJpbnRmIChzdGRlcnIsICJGcmVlaW5nIG50ZXJtIGlucHV0ICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQogICBpbnB1dAogCiAlZGVzdHJ1Y3RvcgotICB7IHByaW50ZiAoIkZyZWVpbmcgbnRlcm0gbGluZSAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KKyAgeyBmcHJpbnRmIChzdGRlcnIsICJGcmVlaW5nIG50ZXJtIGxpbmUgKCVkQCVkLSVkKVxuIiwgJCQsIFJBTkdFIChAJCkpOyB9CiAgIGxpbmUKIAogJWRlc3RydWN0b3IKLSAgeyBwcmludGYgKCJGcmVlaW5nIG50ZXJtIHRoaW5nICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQorICB7IGZwcmludGYgKHN0ZGVyciwgIkZyZWVpbmcgbnRlcm0gdGhpbmcgKCVkQCVkLSVkKVxuIiwgJCQsIFJBTkdFIChAJCkpOyB9CiAgIHRoaW5nCiAKICVkZXN0cnVjdG9yCi0gIHsgcHJpbnRmICgiRnJlZWluZyB0b2tlbiAneCcgKCVkQCVkLSVkKVxuIiwgJCQsIFJBTkdFIChAJCkpOyB9CisgIHsgZnByaW50ZiAoc3RkZXJyLCAiRnJlZWluZyB0b2tlbiAneCcgKCVkQCVkLSVkKVxuIiwgJCQsIFJBTkdFIChAJCkpOyB9CiAgICd4JwogCiAlZGVzdHJ1Y3RvcgotICB7IHByaW50ZiAoIkZyZWVpbmcgdG9rZW4gJ3knICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQorICB7IGZwcmludGYgKHN0ZGVyciwgIkZyZWVpbmcgdG9rZW4gJ3knICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQogICAneScKIAorJXRva2VuIEVORCAwCislZGVzdHJ1Y3RvcgorICB7IGZwcmludGYgKHN0ZGVyciwgIkZyZWVpbmcgdG9rZW4gRU5EICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQorICBFTkQKKwogJSUKIC8qCiAgICBUaGlzIGdyYW1tYXIgaXMgbWFkZSB0byBleGVyY2lzZSBlcnJvciByZWNvdmVyeS4KQEAgLTY5NjQsMTQgKzQxMTk4LDE1IEBACiAgIC8qIE5vdGhpbmcuICovCiAgICAgewogICAgICAgJCQgPSAwOwotICAgICAgcHJpbnRmICgiaW5wdXQgKCVkQCVkLSVkKTogLyogTm90aGluZyAqL1xuIiwgJCQsIFJBTkdFIChAJCkpOworICAgICAgVihpbnB1dCwgJCQsIEAkLCAiOiAvKiBOb3RoaW5nICovXG4iKTsKICAgICB9CiB8IGxpbmUgaW5wdXQgLyogUmlnaHQgcmVjdXJzaXZlIHRvIGxvYWQgdGhlIHN0YWNrIHNvIHRoYXQgcG9wcGluZyBhdAotCQlFT0YgY2FuCWJlIGV4ZXJjaXNlZC4gICovCisgICAgICAgICAgICAgICAgRU5EIGNhbiBiZSBleGVyY2lzZWQuICAqLwogICAgIHsKICAgICAgICQkID0gMjsKLSAgICAgIHByaW50ZiAoImlucHV0ICglZEAlZC0lZCk6IGxpbmUgKCVkQCVkLSVkKSBpbnB1dCAoJWRAJWQtJWQpXG4iLAotCSAgICAgICQkLCBSQU5HRSAoQCQpLCAkMSwgUkFOR0UgKEAxKSwgJDIsIFJBTkdFIChAMikpOworICAgICAgVihpbnB1dCwgJCQsIEAkLCAiOiAiKTsKKyAgICAgIFYobGluZSwgICQxLCBAMSwgIiAiKTsKKyAgICAgIFYoaW5wdXQsICQyLCBAMiwgIlxuIik7CiAgICAgfQogOwogCkBAIC02OTc5LDI4ICs0MTIxNCwzNiBAQAogICB0aGluZyB0aGluZyB0aGluZyAnOycKICAgICB7CiAgICAgICAkJCA9ICQxOwotICAgICAgcHJpbnRmICgibGluZSAoJWRAJWQtJWQpOiB0aGluZyAoJWRAJWQtJWQpIHRoaW5nICglZEAlZC0lZCkgdGhpbmcgKCVkQCVkLSVkKSAnOycgKCVkQCVkLSVkKVxuIiwKLSAgICAgICAgICAgICAgJCQsIFJBTkdFIChAJCksICQxLCBSQU5HRSAoQDEpLCAkMiwgUkFOR0UgKEAyKSwKLSAgICAgICAgICAgICAgJDMsIFJBTkdFIChAMyksICQ0LCBSQU5HRSAoQDQpKTsKKyAgICAgIFYobGluZSwgICQkLCBAJCwgIjogIik7CisgICAgICBWKHRoaW5nLCAkMSwgQDEsICIgIik7CisgICAgICBWKHRoaW5nLCAkMiwgQDIsICIgIik7CisgICAgICBWKHRoaW5nLCAkMywgQDMsICIgIik7CisgICAgICBWKDssICAgICAkNCwgQDQsICJcbiIpOwogICAgIH0KIHwgJygnIHRoaW5nIHRoaW5nICcpJwogICAgIHsKICAgICAgICQkID0gJDE7Ci0gICAgICBwcmludGYgKCJsaW5lICglZEAlZC0lZCk6ICcoJyAoJWRAJWQtJWQpIHRoaW5nICglZEAlZC0lZCkgdGhpbmcgKCVkQCVkLSVkKSAnKScgKCVkQCVkLSVkKVxuIiwKLSAgICAgICAgICAgICAgJCQsIFJBTkdFIChAJCksICQxLCBSQU5HRSAoQDEpLCAkMiwgUkFOR0UgKEAyKSwKLSAgICAgICAgICAgICAgJDMsIFJBTkdFIChAMyksICQ0LCBSQU5HRSAoQDQpKTsKKyAgICAgIFYobGluZSwgICQkLCBAJCwgIjogIik7CisgICAgICBWKCcoJywgICAkMSwgQDEsICIgIik7CisgICAgICBWKHRoaW5nLCAkMiwgQDIsICIgIik7CisgICAgICBWKHRoaW5nLCAkMywgQDMsICIgIik7CisgICAgICBWKCcpJywgICAkNCwgQDQsICJcbiIpOwogICAgIH0KIHwgJygnIHRoaW5nICcpJwogICAgIHsKICAgICAgICQkID0gJDE7Ci0gICAgICBwcmludGYgKCJsaW5lICglZEAlZC0lZCk6ICcoJyAoJWRAJWQtJWQpIHRoaW5nICglZEAlZC0lZCkgJyknICglZEAlZC0lZClcbiIsCi0gICAgICAgICAgICAgICQkLCBSQU5HRSAoQCQpLCAkMSwgUkFOR0UgKEAxKSwgJDIsIFJBTkdFIChAMiksICQzLCBSQU5HRSAoQDMpKTsKKyAgICAgIFYobGluZSwgICQkLCBAJCwgIjogIik7CisgICAgICBWKCcoJywgICAkMSwgQDEsICIgIik7CisgICAgICBWKHRoaW5nLCAkMiwgQDIsICIgIik7CisgICAgICBWKCcpJywgICAkMywgQDMsICJcbiIpOwogICAgIH0KIHwgJygnIGVycm9yICcpJwogICAgIHsKICAgICAgICQkID0gLTE7Ci0gICAgICBwcmludGYgKCJsaW5lICglZEAlZC0lZCk6ICcoJyAoJWRAJWQtJWQpIGVycm9yIChAJWQtJWQpICcpJyAoJWRAJWQtJWQpXG4iLAotICAgICAgICAgICAgICAkJCwgUkFOR0UgKEAkKSwgJDEsIFJBTkdFIChAMSksIFJBTkdFIChAMiksICQzLCBSQU5HRSAoQDMpKTsKKyAgICAgIFYobGluZSwgICQkLCBAJCwgIjogIik7CisgICAgICBWKCcoJywgICAkMSwgQDEsICIgIik7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJlcnJvciAoQCVkLSVkKSAiLCBSQU5HRSAoQDIpKTsKKyAgICAgIFYoJyknLCAgICQzLCBAMywgIlxuIik7CiAgICAgfQogOwogCkBAIC03MDA4LDM4ICs0MTI1MSw0MiBAQAogICAneCcKICAgICB7CiAgICAgICAkJCA9ICQxOwotICAgICAgcHJpbnRmICgidGhpbmcgKCVkQCVkLSVkKTogJ3gnICglZEAlZC0lZClcbiIsCi0gICAgICAgICAgICAgICQkLCBSQU5HRSAoQCQpLCAkMSwgUkFOR0UgKEAxKSk7CisgICAgICBWKHRoaW5nLCAkJCwgQCQsICI6ICIpOworICAgICAgVigneCcsICAgJDEsIEAxLCAiXG4iKTsKICAgICB9CiA7CiAlJQogLyogQWxpYXMgdG8gQVJHVlsxXS4gKi8KLWNvbnN0IGNoYXIgKnNvdXJjZSA9IDA7Citjb25zdCBjaGFyICpzb3VyY2UgPSBZWV9OVUxMOwogCi1zdGF0aWMgaW50Ci15eWxleCAodm9pZCkKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgWVlfTE9DQVRJT05fUFJJTlQgKHN0ZGVyciwgKHl5bGxvYykpOworICBmcHJpbnRmIChzdGRlcnIsICI6ICIpOworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKworc3RhdGljCitpbnQgeXlsZXggKHZvaWQpCiB7CiAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgY291bnRlciA9IDA7CiAKICAgaW50IGMgPSAoeXlsdmFsKSA9IGNvdW50ZXIrKzsKICAgLyogQXMgaW4gQkFTSUMsIGxpbmUgbnVtYmVycyBnbyBmcm9tIDEwIHRvIDEwLiAgKi8KLSAoeXlsbG9jKS5maXJzdF9saW5lID0gKHl5bGxvYykuZmlyc3RfY29sdW1uID0gMTAgKiBjOworICAoeXlsbG9jKS5maXJzdF9saW5lID0gKHl5bGxvYykuZmlyc3RfY29sdW1uID0gMTAgKiBjOwogICAoeXlsbG9jKS5sYXN0X2xpbmUgPSAoeXlsbG9jKS5sYXN0X2NvbHVtbiA9ICh5eWxsb2MpLmZpcnN0X2xpbmUgKyA5OwotCi0KKyAgYXNzZXJ0ICgwIDw9IGMgJiYgYyA8PSBzdHJsZW4gKHNvdXJjZSkpOwogICBpZiAoc291cmNlW2NdKQotICAgIHByaW50ZiAoInNlbmRpbmc6ICclYyciLCBzb3VyY2VbY10pOworICAgIGZwcmludGYgKHN0ZGVyciwgInNlbmRpbmc6ICclYyciLCBzb3VyY2VbY10pOwogICBlbHNlCi0gICAgcHJpbnRmICgic2VuZGluZzogRU9GIik7Ci0gIHByaW50ZiAoIiAoJWRAJWQtJWQpXG4iLCBjLCBSQU5HRSAoKHl5bGxvYykpKTsKKyAgICBmcHJpbnRmIChzdGRlcnIsICJzZW5kaW5nOiBFTkQiKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiICglZEAlZC0lZClcbiIsIGMsIFJBTkdFICgoeXlsbG9jKSkpOwogICByZXR1cm4gc291cmNlW2NdOwogfQogCi1zdGF0aWMgdm9pZAoteXllcnJvciAoY29uc3QgY2hhciAqbXNnKQotewotICBwcmludGYgKCIlZC0lZDogJXNcbiIsIFJBTkdFICh5eWxsb2MpLCBtc2cpOwotfQogCiBpbnQKIG1haW4gKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pCkBAIC03MDUxLDkgKzQxMjk4LDkgQEAKICAgc3RhdHVzID0geXlwYXJzZSAoKTsKICAgc3dpdGNoIChzdGF0dXMpCiAgICAgewotICAgICAgY2FzZSAwOiBwcmludGYgKCJTdWNjZXNzZnVsIHBhcnNlLlxuIik7IGJyZWFrOwotICAgICAgY2FzZSAxOiBwcmludGYgKCJQYXJzaW5nIEZBSUxFRC5cbiIpOyBicmVhazsKLSAgICAgIGRlZmF1bHQ6IHByaW50ZiAoIlBhcnNpbmcgRkFJTEVEIChzdGF0dXMgJWQpLlxuIiwgc3RhdHVzKTsgYnJlYWs7CisgICAgICBjYXNlIDA6IGZwcmludGYgKHN0ZGVyciwgIlN1Y2Nlc3NmdWwgcGFyc2UuXG4iKTsgYnJlYWs7CisgICAgICBjYXNlIDE6IGZwcmludGYgKHN0ZGVyciwgIlBhcnNpbmcgRkFJTEVELlxuIik7IGJyZWFrOworICAgICAgZGVmYXVsdDogZnByaW50ZiAoc3RkZXJyLCAiUGFyc2luZyBGQUlMRUQgKHN0YXR1cyAlZCkuXG4iLCBzdGF0dXMpOyBicmVhazsKICAgICB9CiAgIHJldHVybiBzdGF0dXM7CiB9CkBAIC03MDYxLDU1ICs0MTMwOCwxMTggQEAKIAogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiYWN0aW9ucy5hdDo1Mjc6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKLWVjaG8gYWN0aW9ucy5hdDo1MjcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJhY3Rpb25zLmF0OjUyNzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1MTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImFjdGlvbnMuYXQ6NzUxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzUxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IiAiYWN0aW9ucy5hdDo3NTEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1MTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6NzUxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0Ojc1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzUxOiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0Ojc1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCi0gICAkYXRfdHJhY2VvZmYKLWVjaG8gImFjdGlvbnMuYXQ6NTI3OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgotZWNobyBhY3Rpb25zLmF0OjUyNyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiYWN0aW9ucy5hdDo1Mjc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1MTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImFjdGlvbnMuYXQ6NzUxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1MTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJhY3Rpb25zLmF0Ojc1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKIApAQCAtNzExOCw0MCArNDE0MjgsNDQgQEAKICMgSS5lLiwgZXBzaWxvbi1yZWR1Y3Rpb25zLCBhcyBpbiAiKHgpIiB3aGljaCBlbmRzIGJ5IHJlZHVjaW5nCiAjIGFuIGVtcHR5ICJsaW5lIiBudGVybS4KICMgRklYTUU6IFRoaXMgbG9jYXRpb24gaXMgbm90IHNhdGlzZnlpbmcuICBEZXBlbmQgb24gdGhlIGxvb2thaGVhZD8KLSRhdF90cmFjZW9mZgotZWNobyAiYWN0aW9ucy5hdDo1Mjc6IFwkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KSciCi1lY2hvIGFjdGlvbnMuYXQ6NTI3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KScgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gInNlbmRpbmc6ICcoJyAoMEAwLTkpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTE6ICBcJFBSRVBBUlNFUiAuL2lucHV0ICcoeCknIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0ICcoeCknIiAiYWN0aW9ucy5hdDo3NTEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCAnKHgpJworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDo3NTEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzZW5kaW5nOiAnKCcgKDBAMC05KQogc2VuZGluZzogJ3gnICgxQDEwLTE5KQogdGhpbmcgKDFAMTAtMTkpOiAneCcgKDFAMTAtMTkpCiBzZW5kaW5nOiAnKScgKDJAMjAtMjkpCiBsaW5lICgwQDAtMjkpOiAnKCcgKDBAMC05KSB0aGluZyAoMUAxMC0xOSkgJyknICgyQDIwLTI5KQotc2VuZGluZzogRU9GICgzQDMwLTM5KQorc2VuZGluZzogRU5EICgzQDMwLTM5KQogaW5wdXQgKDBAMjktMjkpOiAvKiBOb3RoaW5nICovCiBpbnB1dCAoMkAwLTI5KTogbGluZSAoMEAwLTI5KSBpbnB1dCAoMEAyOS0yOSkKK0ZyZWVpbmcgdG9rZW4gRU5EICgzQDMwLTM5KQogRnJlZWluZyBudGVybSBpbnB1dCAoMkAwLTI5KQogU3VjY2Vzc2Z1bCBwYXJzZS4KLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImFjdGlvbnMuYXQ6NTI3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KIAogCiAKQEAgLTcxNTksNDEgKzQxNDczLDQ1IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyAnKHkpJyBpcyBhbiBlcnJvciwgYnV0IGNhbiBiZSByZWNvdmVyZWQgZnJvbS4gIEJ1dCB3aGF0J3MgdGhlIGxvY2F0aW9uCiAjIG9mIHRoZSBlcnJvciBpdHNlbGYgKCd5JyksIGFuZCBvZiB0aGUgcmVzdWx0aW5nIHJlZHVjdGlvbiAoJyhlcnJvciknKS4KLSRhdF90cmFjZW9mZgotZWNobyAiYWN0aW9ucy5hdDo1Mjc6IFwkUFJFUEFSU0VSIC4vaW5wdXQgJyh5KSciCi1lY2hvIGFjdGlvbnMuYXQ6NTI3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vaW5wdXQgJyh5KScgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gInNlbmRpbmc6ICcoJyAoMEAwLTkpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTE6ICBcJFBSRVBBUlNFUiAuL2lucHV0ICcoeSknIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0ICcoeSknIiAiYWN0aW9ucy5hdDo3NTEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCAnKHkpJworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDo3NTEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzZW5kaW5nOiAnKCcgKDBAMC05KQogc2VuZGluZzogJ3knICgxQDEwLTE5KQotMTAtMTk6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAneScsIGV4cGVjdGluZyAneCcKKzEwLjEwLTE5LjE4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ3knLCBleHBlY3RpbmcgJ3gnCiBGcmVlaW5nIHRva2VuICd5JyAoMUAxMC0xOSkKIHNlbmRpbmc6ICcpJyAoMkAyMC0yOSkKIGxpbmUgKC0xQDAtMjkpOiAnKCcgKDBAMC05KSBlcnJvciAoQDEwLTE5KSAnKScgKDJAMjAtMjkpCi1zZW5kaW5nOiBFT0YgKDNAMzAtMzkpCitzZW5kaW5nOiBFTkQgKDNAMzAtMzkpCiBpbnB1dCAoMEAyOS0yOSk6IC8qIE5vdGhpbmcgKi8KIGlucHV0ICgyQDAtMjkpOiBsaW5lICgtMUAwLTI5KSBpbnB1dCAoMEAyOS0yOSkKK0ZyZWVpbmcgdG9rZW4gRU5EICgzQDMwLTM5KQogRnJlZWluZyBudGVybSBpbnB1dCAoMkAwLTI5KQogU3VjY2Vzc2Z1bCBwYXJzZS4KLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImFjdGlvbnMuYXQ6NTI3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KIAogCiAKQEAgLTcyMTEsMjIgKzQxNTI5LDMzIEBACiAjICAgICAnKCcsICd4JywgJyknLAogIyAgICAgJygnLCAneCcsICcpJywKICMgICAgICd5JwotJGF0X3RyYWNlb2ZmCi1lY2hvICJhY3Rpb25zLmF0OjUyNzogXCRQUkVQQVJTRVIgLi9pbnB1dCAnKHh4eHh4KSh4KSh4KXknIgotZWNobyBhY3Rpb25zLmF0OjUyNyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2lucHV0ICcoeHh4eHgpKHgpKHgpeScgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gInNlbmRpbmc6ICcoJyAoMEAwLTkpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTE6ICBcJFBSRVBBUlNFUiAuL2lucHV0ICcoeHh4eHgpKHgpKHgpeSciCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQgJyh4eHh4eCkoeCkoeCl5JyIgImFjdGlvbnMuYXQ6NzUxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQgJyh4eHh4eCkoeCkoeCl5JworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDo3NTEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzZW5kaW5nOiAnKCcgKDBAMC05KQogc2VuZGluZzogJ3gnICgxQDEwLTE5KQogdGhpbmcgKDFAMTAtMTkpOiAneCcgKDFAMTAtMTkpCiBzZW5kaW5nOiAneCcgKDJAMjAtMjkpCiB0aGluZyAoMkAyMC0yOSk6ICd4JyAoMkAyMC0yOSkKIHNlbmRpbmc6ICd4JyAoM0AzMC0zOSkKLTMwLTM5OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ3gnLCBleHBlY3RpbmcgJyknCiszMC4zMC0zOS4zODogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICd4JywgZXhwZWN0aW5nICcpJwogRnJlZWluZyBudGVybSB0aGluZyAoMkAyMC0yOSkKIEZyZWVpbmcgbnRlcm0gdGhpbmcgKDFAMTAtMTkpCiBGcmVlaW5nIHRva2VuICd4JyAoM0AzMC0zOSkKQEAgLTcyNTEsMjUgKzQxNTgwLDc2IEBACiBpbnB1dCAoMkAxMDAtMTI5KTogbGluZSAoMTBAMTAwLTEyOSkgaW5wdXQgKDBAMTI5LTEyOSkKIGlucHV0ICgyQDcwLTEyOSk6IGxpbmUgKDdANzAtOTkpIGlucHV0ICgyQDEwMC0xMjkpCiBpbnB1dCAoMkAwLTEyOSk6IGxpbmUgKC0xQDAtNjkpIGlucHV0ICgyQDcwLTEyOSkKLTEzMC0xMzk6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAneScsIGV4cGVjdGluZyBcJGVuZAorMTMwLjEzMC0xMzkuMTM4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ3knLCBleHBlY3RpbmcgRU5ECiBGcmVlaW5nIG50ZXJtIGlucHV0ICgyQDAtMTI5KQogRnJlZWluZyB0b2tlbiAneScgKDEzQDEzMC0xMzkpCiBQYXJzaW5nIEZBSUxFRC4KLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImFjdGlvbnMuYXQ6NTI3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKIAotJGF0X3RyYWNlb24KKworCisjIFN5bnRheCBlcnJvciBjYXVnaHQgYnkgdGhlIHBhcnNlciB3aGVyZSBsb29rYWhlYWQgPSBFTkQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTG9hZCB0aGUgc3RhY2sgYW5kIHByb3Zva2UgYW4gZXJyb3IgdGhhdCBjYW5ub3QgYmUgY2F1Z2h0IGJ5IHRoZQorIyBncmFtbWFyLCB0byBjaGVjayB0aGF0IHRoZSBzdGFjayBpcyBjbGVhcmVkLiAgQW5kIG1ha2Ugc3VyZSB0aGUKKyMgbG9va2FoZWFkIGlzIGZyZWVkLgorIworIyAgICAgJygnLCAneCcsICcpJywKKyMgICAgICcoJywgJ3gnLCAnKScsCisjICAgICAneCcKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1MTogIFwkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KSh4KXgnIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0ICcoeCkoeCl4JyIgImFjdGlvbnMuYXQ6NzUxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KSh4KXgnCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1MTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0Ojc1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInNlbmRpbmc6ICcoJyAoMEAwLTkpCitzZW5kaW5nOiAneCcgKDFAMTAtMTkpCit0aGluZyAoMUAxMC0xOSk6ICd4JyAoMUAxMC0xOSkKK3NlbmRpbmc6ICcpJyAoMkAyMC0yOSkKK2xpbmUgKDBAMC0yOSk6ICcoJyAoMEAwLTkpIHRoaW5nICgxQDEwLTE5KSAnKScgKDJAMjAtMjkpCitzZW5kaW5nOiAnKCcgKDNAMzAtMzkpCitzZW5kaW5nOiAneCcgKDRANDAtNDkpCit0aGluZyAoNEA0MC00OSk6ICd4JyAoNEA0MC00OSkKK3NlbmRpbmc6ICcpJyAoNUA1MC01OSkKK2xpbmUgKDNAMzAtNTkpOiAnKCcgKDNAMzAtMzkpIHRoaW5nICg0QDQwLTQ5KSAnKScgKDVANTAtNTkpCitzZW5kaW5nOiAneCcgKDZANjAtNjkpCit0aGluZyAoNkA2MC02OSk6ICd4JyAoNkA2MC02OSkKK3NlbmRpbmc6IEVORCAoN0A3MC03OSkKKzcwLjcwLTc5Ljc4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgRU5ELCBleHBlY3RpbmcgJ3gnCitGcmVlaW5nIG50ZXJtIHRoaW5nICg2QDYwLTY5KQorRnJlZWluZyBudGVybSBsaW5lICgzQDMwLTU5KQorRnJlZWluZyBudGVybSBsaW5lICgwQDAtMjkpCitGcmVlaW5nIHRva2VuIEVORCAoN0A3MC03OSkKK1BhcnNpbmcgRkFJTEVELgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKIAogCiAjIENoZWNrIGRlc3RydWN0aW9uIHVwb24gc3RhY2sgb3ZlcmZsb3cKQEAgLTcyNzcsMTYgKzQxNjU3LDI3IEBACiAjIFVwb24gc3RhY2sgb3ZlcmZsb3csIGFsbCBzeW1ib2xzIG9uIHRoZSBzdGFjayBzaG91bGQgYmUgZGVzdHJveWVkLgogIyBPbmx5IGNoZWNrIGZvciB5YWNjLmMuCiAKLSRhdF90cmFjZW9mZgotZWNobyAiYWN0aW9ucy5hdDo1Mjc6IFwkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KSh4KSh4KSh4KSh4KSh4KSh4KSciCi1lY2hvIGFjdGlvbnMuYXQ6NTI3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KSh4KSh4KSh4KSh4KSh4KSh4KScgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gInNlbmRpbmc6ICcoJyAoMEAwLTkpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTE6ICBcJFBSRVBBUlNFUiAuL2lucHV0ICcoeCkoeCkoeCkoeCkoeCkoeCkoeCknIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0ICcoeCkoeCkoeCkoeCkoeCkoeCkoeCknIiAiYWN0aW9ucy5hdDo3NTEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCAnKHgpKHgpKHgpKHgpKHgpKHgpKHgpJworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAyICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDo3NTEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzZW5kaW5nOiAnKCcgKDBAMC05KQogc2VuZGluZzogJ3gnICgxQDEwLTE5KQogdGhpbmcgKDFAMTAtMTkpOiAneCcgKDFAMTAtMTkpCiBzZW5kaW5nOiAnKScgKDJAMjAtMjkpCkBAIC03MzIwLDcgKzQxNzExLDcgQEAKIHNlbmRpbmc6ICd4JyAoMTlAMTkwLTE5OSkKIHRoaW5nICgxOUAxOTAtMTk5KTogJ3gnICgxOUAxOTAtMTk5KQogc2VuZGluZzogJyknICgyMEAyMDAtMjA5KQotMjAwLTIwOTogbWVtb3J5IGV4aGF1c3RlZAorMjAwLjIwMC0yMDkuMjA4OiBtZW1vcnkgZXhoYXVzdGVkCiBGcmVlaW5nIG50ZXJtIHRoaW5nICgxOUAxOTAtMTk5KQogRnJlZWluZyBudGVybSBsaW5lICgxNUAxNTAtMTc5KQogRnJlZWluZyBudGVybSBsaW5lICgxMkAxMjAtMTQ5KQpAQCAtNzMyOSw0MCArNDE3MjAsMzEgQEAKIEZyZWVpbmcgbnRlcm0gbGluZSAoM0AzMC01OSkKIEZyZWVpbmcgbnRlcm0gbGluZSAoMEAwLTI5KQogUGFyc2luZyBGQUlMRUQgKHN0YXR1cyAyKS4KLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMikgOzsKLSAgICopIGVjaG8gImFjdGlvbnMuYXQ6NTI3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDIiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKIAotICA1MyApICMgNTMuIGFjdGlvbnMuYXQ6NTI4OiBQcmludGVycyBhbmQgRGVzdHJ1Y3RvcnMgd2l0aCB1bmlvbjoKLSAgICBhdF9zZXR1cF9saW5lPSdhY3Rpb25zLmF0OjUyOCcKLSAgICBhdF9kZXNjPSdQcmludGVycyBhbmQgRGVzdHJ1Y3RvcnMgd2l0aCB1bmlvbjogJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgNTM6IFByaW50ZXJzIGFuZCBEZXN0cnVjdG9ycyB3aXRoIHVuaW9uOiAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICI1My4gYWN0aW9ucy5hdDo1Mjg6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xNTkKKyNBVF9TVEFSVF8xNjAKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxNjAgJ2FjdGlvbnMuYXQ6NzUyJyBcCisgICJQcmludGVycyBhbmQgRGVzdHJ1Y3RvcnMgd2l0aCB1bmlvbiIgIiAgICAgICAgICAgICIgOQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjE2MC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIApAQCAtNzM3MSw1NiArNDE3NTMsMjkgQEAKICMgQmUgc3VyZSB0byBwYXNzIGFsbCB0aGUgJWRpcmVjdGl2ZXMgdG8gdGhpcyBtYWNybyB0byBoYXZlIGNvcnJlY3QKICMgaGVscGluZyBtYWNyb3MuICBTbyBkb24ndCBwdXQgYW55IGRpcmVjdGx5IGluIHRoZSBCaXNvbiBmaWxlLgogCi0KLQotCi0jIFVzaW5nIHlhY2MuYz8KLQotCi0KLQotCi0KLQotIyB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZiAlbG9jYXRpb24gJiAlcHVyZSAmICglZ2xyIG9yICVwYXJzZS1wYXJhbSkuCi0KLSMgeXllcnJvciBhbHdheXMgc2VlcyB0aGUgbG9jYXRpb25zICh3aGVuIGFjdGl2YXRlZCksIGV4Y2VwdCBpZgotIyB5YWNjICYgcHVyZSAmICFwYXJhbS4KLQotCi0jIFRoZSBpbnRlcmZhY2UgaXMgcHVyZTogZWl0aGVyIGJlY2F1c2UgJXB1cmUtcGFyc2VyLCBvciBiZWNhdXNlIHdlCi0jIGFyZSB1c2luZyB0aGUgQysrIHBhcnNlcnMuCi0KLQotCi0KLQotCi0KLQotCi0KLQogY2F0ID5pbnB1dC55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAotJXsKKyVjb2RlIHJlcXVpcmVzIHsKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGFzc2VydC5oPgogCiAjZGVmaW5lIFlZSU5JVERFUFRIIDEwCiAjZGVmaW5lIFlZTUFYREVQVEggMTAKICNkZWZpbmUgUkFOR0UoTG9jYXRpb24pIChMb2NhdGlvbikuZmlyc3RfbGluZSwgKExvY2F0aW9uKS5sYXN0X2xpbmUKLSV9CisKKy8qIERpc3BsYXkgdGhlIHN5bWJvbCB0eXBlIFN5bWJvbC4gICovCisjZGVmaW5lIFYoU3ltYm9sLCBWYWx1ZSwgTG9jYXRpb24sIFNlcCkgXAorICAgZnByaW50ZiAoc3RkZXJyLCAjU3ltYm9sICIgKCVkQCVkLSVkKSIgU2VwLCBWYWx1ZSwgUkFOR0UoTG9jYXRpb24pKQorfQogCiAlZXJyb3ItdmVyYm9zZQogJWRlYnVnCkBAIC03NDMyLDE1ICs0MTc4NywxNSBAQAogICBpbnQgaXZhbDsKIH0KIAotCi0leworJWNvZGUgcHJvdmlkZXMgewogCiBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKLXN0YXRpYyB2b2lkIHl5ZXJyb3IgKGNvbnN0IGNoYXIgKm1zZyk7Ci0lfQorc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7Cit9CiAKLSV0eXBlIDxpdmFsPiAnKCcgJ3gnICd5JyAnKScgJzsnIHRoaW5nIGxpbmUgaW5wdXQKKyV0eXBlIDxpdmFsPiAnKCcgJ3gnICd5JyAnKScgJzsnIHRoaW5nIGxpbmUgaW5wdXQgRU5ECiAKKy8qIEZJWE1FOiBUaGlzICVwcmludGVyIGlzbid0IGFjdHVhbGx5IHRlc3RlZC4gICovCiAlcHJpbnRlcgogICB7CiAgICAgZnByaW50ZiAoeXlvdXRwdXQsICIlZCIsICQkKTsKQEAgLTc0NDgsMjUgKzQxODAzLDMwIEBACiAgIGlucHV0IGxpbmUgdGhpbmcgJ3gnICd5JwogCiAlZGVzdHJ1Y3RvcgotICB7IHByaW50ZiAoIkZyZWVpbmcgbnRlcm0gaW5wdXQgKCVkQCVkLSVkKVxuIiwgJCQsIFJBTkdFIChAJCkpOyB9CisgIHsgZnByaW50ZiAoc3RkZXJyLCAiRnJlZWluZyBudGVybSBpbnB1dCAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KICAgaW5wdXQKIAogJWRlc3RydWN0b3IKLSAgeyBwcmludGYgKCJGcmVlaW5nIG50ZXJtIGxpbmUgKCVkQCVkLSVkKVxuIiwgJCQsIFJBTkdFIChAJCkpOyB9CisgIHsgZnByaW50ZiAoc3RkZXJyLCAiRnJlZWluZyBudGVybSBsaW5lICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQogICBsaW5lCiAKICVkZXN0cnVjdG9yCi0gIHsgcHJpbnRmICgiRnJlZWluZyBudGVybSB0aGluZyAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KKyAgeyBmcHJpbnRmIChzdGRlcnIsICJGcmVlaW5nIG50ZXJtIHRoaW5nICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQogICB0aGluZwogCiAlZGVzdHJ1Y3RvcgotICB7IHByaW50ZiAoIkZyZWVpbmcgdG9rZW4gJ3gnICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQorICB7IGZwcmludGYgKHN0ZGVyciwgIkZyZWVpbmcgdG9rZW4gJ3gnICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQogICAneCcKIAogJWRlc3RydWN0b3IKLSAgeyBwcmludGYgKCJGcmVlaW5nIHRva2VuICd5JyAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KKyAgeyBmcHJpbnRmIChzdGRlcnIsICJGcmVlaW5nIHRva2VuICd5JyAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KICAgJ3knCiAKKyV0b2tlbiBFTkQgMAorJWRlc3RydWN0b3IKKyAgeyBmcHJpbnRmIChzdGRlcnIsICJGcmVlaW5nIHRva2VuIEVORCAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KKyAgRU5ECisKICUlCiAvKgogICAgVGhpcyBncmFtbWFyIGlzIG1hZGUgdG8gZXhlcmNpc2UgZXJyb3IgcmVjb3ZlcnkuCkBAIC03NDc5LDE0ICs0MTgzOSwxNSBAQAogICAvKiBOb3RoaW5nLiAqLwogICAgIHsKICAgICAgICQkID0gMDsKLSAgICAgIHByaW50ZiAoImlucHV0ICglZEAlZC0lZCk6IC8qIE5vdGhpbmcgKi9cbiIsICQkLCBSQU5HRSAoQCQpKTsKKyAgICAgIFYoaW5wdXQsICQkLCBAJCwgIjogLyogTm90aGluZyAqL1xuIik7CiAgICAgfQogfCBsaW5lIGlucHV0IC8qIFJpZ2h0IHJlY3Vyc2l2ZSB0byBsb2FkIHRoZSBzdGFjayBzbyB0aGF0IHBvcHBpbmcgYXQKLQkJRU9GIGNhbgliZSBleGVyY2lzZWQuICAqLworICAgICAgICAgICAgICAgIEVORCBjYW4gYmUgZXhlcmNpc2VkLiAgKi8KICAgICB7CiAgICAgICAkJCA9IDI7Ci0gICAgICBwcmludGYgKCJpbnB1dCAoJWRAJWQtJWQpOiBsaW5lICglZEAlZC0lZCkgaW5wdXQgKCVkQCVkLSVkKVxuIiwKLQkgICAgICAkJCwgUkFOR0UgKEAkKSwgJDEsIFJBTkdFIChAMSksICQyLCBSQU5HRSAoQDIpKTsKKyAgICAgIFYoaW5wdXQsICQkLCBAJCwgIjogIik7CisgICAgICBWKGxpbmUsICAkMSwgQDEsICIgIik7CisgICAgICBWKGlucHV0LCAkMiwgQDIsICJcbiIpOwogICAgIH0KIDsKIApAQCAtNzQ5NCwyOCArNDE4NTUsMzYgQEAKICAgdGhpbmcgdGhpbmcgdGhpbmcgJzsnCiAgICAgewogICAgICAgJCQgPSAkMTsKLSAgICAgIHByaW50ZiAoImxpbmUgKCVkQCVkLSVkKTogdGhpbmcgKCVkQCVkLSVkKSB0aGluZyAoJWRAJWQtJWQpIHRoaW5nICglZEAlZC0lZCkgJzsnICglZEAlZC0lZClcbiIsCi0gICAgICAgICAgICAgICQkLCBSQU5HRSAoQCQpLCAkMSwgUkFOR0UgKEAxKSwgJDIsIFJBTkdFIChAMiksCi0gICAgICAgICAgICAgICQzLCBSQU5HRSAoQDMpLCAkNCwgUkFOR0UgKEA0KSk7CisgICAgICBWKGxpbmUsICAkJCwgQCQsICI6ICIpOworICAgICAgVih0aGluZywgJDEsIEAxLCAiICIpOworICAgICAgVih0aGluZywgJDIsIEAyLCAiICIpOworICAgICAgVih0aGluZywgJDMsIEAzLCAiICIpOworICAgICAgVig7LCAgICAgJDQsIEA0LCAiXG4iKTsKICAgICB9CiB8ICcoJyB0aGluZyB0aGluZyAnKScKICAgICB7CiAgICAgICAkJCA9ICQxOwotICAgICAgcHJpbnRmICgibGluZSAoJWRAJWQtJWQpOiAnKCcgKCVkQCVkLSVkKSB0aGluZyAoJWRAJWQtJWQpIHRoaW5nICglZEAlZC0lZCkgJyknICglZEAlZC0lZClcbiIsCi0gICAgICAgICAgICAgICQkLCBSQU5HRSAoQCQpLCAkMSwgUkFOR0UgKEAxKSwgJDIsIFJBTkdFIChAMiksCi0gICAgICAgICAgICAgICQzLCBSQU5HRSAoQDMpLCAkNCwgUkFOR0UgKEA0KSk7CisgICAgICBWKGxpbmUsICAkJCwgQCQsICI6ICIpOworICAgICAgVignKCcsICAgJDEsIEAxLCAiICIpOworICAgICAgVih0aGluZywgJDIsIEAyLCAiICIpOworICAgICAgVih0aGluZywgJDMsIEAzLCAiICIpOworICAgICAgVignKScsICAgJDQsIEA0LCAiXG4iKTsKICAgICB9CiB8ICcoJyB0aGluZyAnKScKICAgICB7CiAgICAgICAkJCA9ICQxOwotICAgICAgcHJpbnRmICgibGluZSAoJWRAJWQtJWQpOiAnKCcgKCVkQCVkLSVkKSB0aGluZyAoJWRAJWQtJWQpICcpJyAoJWRAJWQtJWQpXG4iLAotICAgICAgICAgICAgICAkJCwgUkFOR0UgKEAkKSwgJDEsIFJBTkdFIChAMSksICQyLCBSQU5HRSAoQDIpLCAkMywgUkFOR0UgKEAzKSk7CisgICAgICBWKGxpbmUsICAkJCwgQCQsICI6ICIpOworICAgICAgVignKCcsICAgJDEsIEAxLCAiICIpOworICAgICAgVih0aGluZywgJDIsIEAyLCAiICIpOworICAgICAgVignKScsICAgJDMsIEAzLCAiXG4iKTsKICAgICB9CiB8ICcoJyBlcnJvciAnKScKICAgICB7CiAgICAgICAkJCA9IC0xOwotICAgICAgcHJpbnRmICgibGluZSAoJWRAJWQtJWQpOiAnKCcgKCVkQCVkLSVkKSBlcnJvciAoQCVkLSVkKSAnKScgKCVkQCVkLSVkKVxuIiwKLSAgICAgICAgICAgICAgJCQsIFJBTkdFIChAJCksICQxLCBSQU5HRSAoQDEpLCBSQU5HRSAoQDIpLCAkMywgUkFOR0UgKEAzKSk7CisgICAgICBWKGxpbmUsICAkJCwgQCQsICI6ICIpOworICAgICAgVignKCcsICAgJDEsIEAxLCAiICIpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiZXJyb3IgKEAlZC0lZCkgIiwgUkFOR0UgKEAyKSk7CisgICAgICBWKCcpJywgICAkMywgQDMsICJcbiIpOwogICAgIH0KIDsKIApAQCAtNzUyMywzOCArNDE4OTIsNDIgQEAKICAgJ3gnCiAgICAgewogICAgICAgJCQgPSAkMTsKLSAgICAgIHByaW50ZiAoInRoaW5nICglZEAlZC0lZCk6ICd4JyAoJWRAJWQtJWQpXG4iLAotICAgICAgICAgICAgICAkJCwgUkFOR0UgKEAkKSwgJDEsIFJBTkdFIChAMSkpOworICAgICAgVih0aGluZywgJCQsIEAkLCAiOiAiKTsKKyAgICAgIFYoJ3gnLCAgICQxLCBAMSwgIlxuIik7CiAgICAgfQogOwogJSUKIC8qIEFsaWFzIHRvIEFSR1ZbMV0uICovCi1jb25zdCBjaGFyICpzb3VyY2UgPSAwOworY29uc3QgY2hhciAqc291cmNlID0gWVlfTlVMTDsKIAotc3RhdGljIGludAoteXlsZXggKHZvaWQpCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIFlZX0xPQ0FUSU9OX1BSSU5UIChzdGRlcnIsICh5eWxsb2MpKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiOiAiKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisKK3N0YXRpYworaW50IHl5bGV4ICh2b2lkKQogewogICBzdGF0aWMgdW5zaWduZWQgaW50IGNvdW50ZXIgPSAwOwogCiAgIGludCBjID0gKHl5bHZhbCkuaXZhbCA9IGNvdW50ZXIrKzsKICAgLyogQXMgaW4gQkFTSUMsIGxpbmUgbnVtYmVycyBnbyBmcm9tIDEwIHRvIDEwLiAgKi8KLSAoeXlsbG9jKS5maXJzdF9saW5lID0gKHl5bGxvYykuZmlyc3RfY29sdW1uID0gMTAgKiBjOworICAoeXlsbG9jKS5maXJzdF9saW5lID0gKHl5bGxvYykuZmlyc3RfY29sdW1uID0gMTAgKiBjOwogICAoeXlsbG9jKS5sYXN0X2xpbmUgPSAoeXlsbG9jKS5sYXN0X2NvbHVtbiA9ICh5eWxsb2MpLmZpcnN0X2xpbmUgKyA5OwotCi0KKyAgYXNzZXJ0ICgwIDw9IGMgJiYgYyA8PSBzdHJsZW4gKHNvdXJjZSkpOwogICBpZiAoc291cmNlW2NdKQotICAgIHByaW50ZiAoInNlbmRpbmc6ICclYyciLCBzb3VyY2VbY10pOworICAgIGZwcmludGYgKHN0ZGVyciwgInNlbmRpbmc6ICclYyciLCBzb3VyY2VbY10pOwogICBlbHNlCi0gICAgcHJpbnRmICgic2VuZGluZzogRU9GIik7Ci0gIHByaW50ZiAoIiAoJWRAJWQtJWQpXG4iLCBjLCBSQU5HRSAoKHl5bGxvYykpKTsKKyAgICBmcHJpbnRmIChzdGRlcnIsICJzZW5kaW5nOiBFTkQiKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiICglZEAlZC0lZClcbiIsIGMsIFJBTkdFICgoeXlsbG9jKSkpOwogICByZXR1cm4gc291cmNlW2NdOwogfQogCi1zdGF0aWMgdm9pZAoteXllcnJvciAoY29uc3QgY2hhciAqbXNnKQotewotICBwcmludGYgKCIlZC0lZDogJXNcbiIsIFJBTkdFICh5eWxsb2MpLCBtc2cpOwotfQogCiBpbnQKIG1haW4gKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pCkBAIC03NTY2LDkgKzQxOTM5LDkgQEAKICAgc3RhdHVzID0geXlwYXJzZSAoKTsKICAgc3dpdGNoIChzdGF0dXMpCiAgICAgewotICAgICAgY2FzZSAwOiBwcmludGYgKCJTdWNjZXNzZnVsIHBhcnNlLlxuIik7IGJyZWFrOwotICAgICAgY2FzZSAxOiBwcmludGYgKCJQYXJzaW5nIEZBSUxFRC5cbiIpOyBicmVhazsKLSAgICAgIGRlZmF1bHQ6IHByaW50ZiAoIlBhcnNpbmcgRkFJTEVEIChzdGF0dXMgJWQpLlxuIiwgc3RhdHVzKTsgYnJlYWs7CisgICAgICBjYXNlIDA6IGZwcmludGYgKHN0ZGVyciwgIlN1Y2Nlc3NmdWwgcGFyc2UuXG4iKTsgYnJlYWs7CisgICAgICBjYXNlIDE6IGZwcmludGYgKHN0ZGVyciwgIlBhcnNpbmcgRkFJTEVELlxuIik7IGJyZWFrOworICAgICAgZGVmYXVsdDogZnByaW50ZiAoc3RkZXJyLCAiUGFyc2luZyBGQUlMRUQgKHN0YXR1cyAlZCkuXG4iLCBzdGF0dXMpOyBicmVhazsKICAgICB9CiAgIHJldHVybiBzdGF0dXM7CiB9CkBAIC03NTc2LDU1ICs0MTk0OSwxMTggQEAKIAogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiYWN0aW9ucy5hdDo1Mjg6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKLWVjaG8gYWN0aW9ucy5hdDo1MjggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJhY3Rpb25zLmF0OjUyODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1MjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImFjdGlvbnMuYXQ6NzUyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzUyOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IiAiYWN0aW9ucy5hdDo3NTIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1MjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6NzUyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzUyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTI6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0Ojc1MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzUyOiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0Ojc1MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCi0gICAkYXRfdHJhY2VvZmYKLWVjaG8gImFjdGlvbnMuYXQ6NTI4OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgotZWNobyBhY3Rpb25zLmF0OjUyOCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiYWN0aW9ucy5hdDo1Mjg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1MjogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImFjdGlvbnMuYXQ6NzUyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1MjogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJhY3Rpb25zLmF0Ojc1MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKIApAQCAtNzYzMyw0MCArNDIwNjksNDQgQEAKICMgSS5lLiwgZXBzaWxvbi1yZWR1Y3Rpb25zLCBhcyBpbiAiKHgpIiB3aGljaCBlbmRzIGJ5IHJlZHVjaW5nCiAjIGFuIGVtcHR5ICJsaW5lIiBudGVybS4KICMgRklYTUU6IFRoaXMgbG9jYXRpb24gaXMgbm90IHNhdGlzZnlpbmcuICBEZXBlbmQgb24gdGhlIGxvb2thaGVhZD8KLSRhdF90cmFjZW9mZgotZWNobyAiYWN0aW9ucy5hdDo1Mjg6IFwkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KSciCi1lY2hvIGFjdGlvbnMuYXQ6NTI4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KScgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gInNlbmRpbmc6ICcoJyAoMEAwLTkpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTI6ICBcJFBSRVBBUlNFUiAuL2lucHV0ICcoeCknIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0ICcoeCknIiAiYWN0aW9ucy5hdDo3NTIiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCAnKHgpJworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDo3NTIiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzZW5kaW5nOiAnKCcgKDBAMC05KQogc2VuZGluZzogJ3gnICgxQDEwLTE5KQogdGhpbmcgKDFAMTAtMTkpOiAneCcgKDFAMTAtMTkpCiBzZW5kaW5nOiAnKScgKDJAMjAtMjkpCiBsaW5lICgwQDAtMjkpOiAnKCcgKDBAMC05KSB0aGluZyAoMUAxMC0xOSkgJyknICgyQDIwLTI5KQotc2VuZGluZzogRU9GICgzQDMwLTM5KQorc2VuZGluZzogRU5EICgzQDMwLTM5KQogaW5wdXQgKDBAMjktMjkpOiAvKiBOb3RoaW5nICovCiBpbnB1dCAoMkAwLTI5KTogbGluZSAoMEAwLTI5KSBpbnB1dCAoMEAyOS0yOSkKK0ZyZWVpbmcgdG9rZW4gRU5EICgzQDMwLTM5KQogRnJlZWluZyBudGVybSBpbnB1dCAoMkAwLTI5KQogU3VjY2Vzc2Z1bCBwYXJzZS4KLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImFjdGlvbnMuYXQ6NTI4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KIAogCiAKQEAgLTc2NzQsNDEgKzQyMTE0LDQ1IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyAnKHkpJyBpcyBhbiBlcnJvciwgYnV0IGNhbiBiZSByZWNvdmVyZWQgZnJvbS4gIEJ1dCB3aGF0J3MgdGhlIGxvY2F0aW9uCiAjIG9mIHRoZSBlcnJvciBpdHNlbGYgKCd5JyksIGFuZCBvZiB0aGUgcmVzdWx0aW5nIHJlZHVjdGlvbiAoJyhlcnJvciknKS4KLSRhdF90cmFjZW9mZgotZWNobyAiYWN0aW9ucy5hdDo1Mjg6IFwkUFJFUEFSU0VSIC4vaW5wdXQgJyh5KSciCi1lY2hvIGFjdGlvbnMuYXQ6NTI4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vaW5wdXQgJyh5KScgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gInNlbmRpbmc6ICcoJyAoMEAwLTkpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTI6ICBcJFBSRVBBUlNFUiAuL2lucHV0ICcoeSknIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0ICcoeSknIiAiYWN0aW9ucy5hdDo3NTIiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCAnKHkpJworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDo3NTIiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzZW5kaW5nOiAnKCcgKDBAMC05KQogc2VuZGluZzogJ3knICgxQDEwLTE5KQotMTAtMTk6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAneScsIGV4cGVjdGluZyAneCcKKzEwLjEwLTE5LjE4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ3knLCBleHBlY3RpbmcgJ3gnCiBGcmVlaW5nIHRva2VuICd5JyAoMUAxMC0xOSkKIHNlbmRpbmc6ICcpJyAoMkAyMC0yOSkKIGxpbmUgKC0xQDAtMjkpOiAnKCcgKDBAMC05KSBlcnJvciAoQDEwLTE5KSAnKScgKDJAMjAtMjkpCi1zZW5kaW5nOiBFT0YgKDNAMzAtMzkpCitzZW5kaW5nOiBFTkQgKDNAMzAtMzkpCiBpbnB1dCAoMEAyOS0yOSk6IC8qIE5vdGhpbmcgKi8KIGlucHV0ICgyQDAtMjkpOiBsaW5lICgtMUAwLTI5KSBpbnB1dCAoMEAyOS0yOSkKK0ZyZWVpbmcgdG9rZW4gRU5EICgzQDMwLTM5KQogRnJlZWluZyBudGVybSBpbnB1dCAoMkAwLTI5KQogU3VjY2Vzc2Z1bCBwYXJzZS4KLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImFjdGlvbnMuYXQ6NTI4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KIAogCiAKQEAgLTc3MjYsMjIgKzQyMTcwLDMzIEBACiAjICAgICAnKCcsICd4JywgJyknLAogIyAgICAgJygnLCAneCcsICcpJywKICMgICAgICd5JwotJGF0X3RyYWNlb2ZmCi1lY2hvICJhY3Rpb25zLmF0OjUyODogXCRQUkVQQVJTRVIgLi9pbnB1dCAnKHh4eHh4KSh4KSh4KXknIgotZWNobyBhY3Rpb25zLmF0OjUyOCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2lucHV0ICcoeHh4eHgpKHgpKHgpeScgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gInNlbmRpbmc6ICcoJyAoMEAwLTkpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTI6ICBcJFBSRVBBUlNFUiAuL2lucHV0ICcoeHh4eHgpKHgpKHgpeSciCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQgJyh4eHh4eCkoeCkoeCl5JyIgImFjdGlvbnMuYXQ6NzUyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQgJyh4eHh4eCkoeCkoeCl5JworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDo3NTIiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzZW5kaW5nOiAnKCcgKDBAMC05KQogc2VuZGluZzogJ3gnICgxQDEwLTE5KQogdGhpbmcgKDFAMTAtMTkpOiAneCcgKDFAMTAtMTkpCiBzZW5kaW5nOiAneCcgKDJAMjAtMjkpCiB0aGluZyAoMkAyMC0yOSk6ICd4JyAoMkAyMC0yOSkKIHNlbmRpbmc6ICd4JyAoM0AzMC0zOSkKLTMwLTM5OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ3gnLCBleHBlY3RpbmcgJyknCiszMC4zMC0zOS4zODogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICd4JywgZXhwZWN0aW5nICcpJwogRnJlZWluZyBudGVybSB0aGluZyAoMkAyMC0yOSkKIEZyZWVpbmcgbnRlcm0gdGhpbmcgKDFAMTAtMTkpCiBGcmVlaW5nIHRva2VuICd4JyAoM0AzMC0zOSkKQEAgLTc3NjYsMjUgKzQyMjIxLDc2IEBACiBpbnB1dCAoMkAxMDAtMTI5KTogbGluZSAoMTBAMTAwLTEyOSkgaW5wdXQgKDBAMTI5LTEyOSkKIGlucHV0ICgyQDcwLTEyOSk6IGxpbmUgKDdANzAtOTkpIGlucHV0ICgyQDEwMC0xMjkpCiBpbnB1dCAoMkAwLTEyOSk6IGxpbmUgKC0xQDAtNjkpIGlucHV0ICgyQDcwLTEyOSkKLTEzMC0xMzk6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAneScsIGV4cGVjdGluZyBcJGVuZAorMTMwLjEzMC0xMzkuMTM4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ3knLCBleHBlY3RpbmcgRU5ECiBGcmVlaW5nIG50ZXJtIGlucHV0ICgyQDAtMTI5KQogRnJlZWluZyB0b2tlbiAneScgKDEzQDEzMC0xMzkpCiBQYXJzaW5nIEZBSUxFRC4KLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImFjdGlvbnMuYXQ6NTI4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKIAotJGF0X3RyYWNlb24KKworCisjIFN5bnRheCBlcnJvciBjYXVnaHQgYnkgdGhlIHBhcnNlciB3aGVyZSBsb29rYWhlYWQgPSBFTkQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTG9hZCB0aGUgc3RhY2sgYW5kIHByb3Zva2UgYW4gZXJyb3IgdGhhdCBjYW5ub3QgYmUgY2F1Z2h0IGJ5IHRoZQorIyBncmFtbWFyLCB0byBjaGVjayB0aGF0IHRoZSBzdGFjayBpcyBjbGVhcmVkLiAgQW5kIG1ha2Ugc3VyZSB0aGUKKyMgbG9va2FoZWFkIGlzIGZyZWVkLgorIworIyAgICAgJygnLCAneCcsICcpJywKKyMgICAgICcoJywgJ3gnLCAnKScsCisjICAgICAneCcKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1MjogIFwkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KSh4KXgnIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0ICcoeCkoeCl4JyIgImFjdGlvbnMuYXQ6NzUyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KSh4KXgnCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1Mjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0Ojc1MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInNlbmRpbmc6ICcoJyAoMEAwLTkpCitzZW5kaW5nOiAneCcgKDFAMTAtMTkpCit0aGluZyAoMUAxMC0xOSk6ICd4JyAoMUAxMC0xOSkKK3NlbmRpbmc6ICcpJyAoMkAyMC0yOSkKK2xpbmUgKDBAMC0yOSk6ICcoJyAoMEAwLTkpIHRoaW5nICgxQDEwLTE5KSAnKScgKDJAMjAtMjkpCitzZW5kaW5nOiAnKCcgKDNAMzAtMzkpCitzZW5kaW5nOiAneCcgKDRANDAtNDkpCit0aGluZyAoNEA0MC00OSk6ICd4JyAoNEA0MC00OSkKK3NlbmRpbmc6ICcpJyAoNUA1MC01OSkKK2xpbmUgKDNAMzAtNTkpOiAnKCcgKDNAMzAtMzkpIHRoaW5nICg0QDQwLTQ5KSAnKScgKDVANTAtNTkpCitzZW5kaW5nOiAneCcgKDZANjAtNjkpCit0aGluZyAoNkA2MC02OSk6ICd4JyAoNkA2MC02OSkKK3NlbmRpbmc6IEVORCAoN0A3MC03OSkKKzcwLjcwLTc5Ljc4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgRU5ELCBleHBlY3RpbmcgJ3gnCitGcmVlaW5nIG50ZXJtIHRoaW5nICg2QDYwLTY5KQorRnJlZWluZyBudGVybSBsaW5lICgzQDMwLTU5KQorRnJlZWluZyBudGVybSBsaW5lICgwQDAtMjkpCitGcmVlaW5nIHRva2VuIEVORCAoN0A3MC03OSkKK1BhcnNpbmcgRkFJTEVELgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKIAogCiAjIENoZWNrIGRlc3RydWN0aW9uIHVwb24gc3RhY2sgb3ZlcmZsb3cKQEAgLTc3OTIsMTYgKzQyMjk4LDI3IEBACiAjIFVwb24gc3RhY2sgb3ZlcmZsb3csIGFsbCBzeW1ib2xzIG9uIHRoZSBzdGFjayBzaG91bGQgYmUgZGVzdHJveWVkLgogIyBPbmx5IGNoZWNrIGZvciB5YWNjLmMuCiAKLSRhdF90cmFjZW9mZgotZWNobyAiYWN0aW9ucy5hdDo1Mjg6IFwkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KSh4KSh4KSh4KSh4KSh4KSh4KSciCi1lY2hvIGFjdGlvbnMuYXQ6NTI4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KSh4KSh4KSh4KSh4KSh4KSh4KScgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gInNlbmRpbmc6ICcoJyAoMEAwLTkpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTI6ICBcJFBSRVBBUlNFUiAuL2lucHV0ICcoeCkoeCkoeCkoeCkoeCkoeCkoeCknIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0ICcoeCkoeCkoeCkoeCkoeCkoeCkoeCknIiAiYWN0aW9ucy5hdDo3NTIiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCAnKHgpKHgpKHgpKHgpKHgpKHgpKHgpJworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAyICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDo3NTIiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzZW5kaW5nOiAnKCcgKDBAMC05KQogc2VuZGluZzogJ3gnICgxQDEwLTE5KQogdGhpbmcgKDFAMTAtMTkpOiAneCcgKDFAMTAtMTkpCiBzZW5kaW5nOiAnKScgKDJAMjAtMjkpCkBAIC03ODM1LDcgKzQyMzUyLDcgQEAKIHNlbmRpbmc6ICd4JyAoMTlAMTkwLTE5OSkKIHRoaW5nICgxOUAxOTAtMTk5KTogJ3gnICgxOUAxOTAtMTk5KQogc2VuZGluZzogJyknICgyMEAyMDAtMjA5KQotMjAwLTIwOTogbWVtb3J5IGV4aGF1c3RlZAorMjAwLjIwMC0yMDkuMjA4OiBtZW1vcnkgZXhoYXVzdGVkCiBGcmVlaW5nIG50ZXJtIHRoaW5nICgxOUAxOTAtMTk5KQogRnJlZWluZyBudGVybSBsaW5lICgxNUAxNTAtMTc5KQogRnJlZWluZyBudGVybSBsaW5lICgxMkAxMjAtMTQ5KQpAQCAtNzg0NCw0MCArNDIzNjEsMzEgQEAKIEZyZWVpbmcgbnRlcm0gbGluZSAoM0AzMC01OSkKIEZyZWVpbmcgbnRlcm0gbGluZSAoMEAwLTI5KQogUGFyc2luZyBGQUlMRUQgKHN0YXR1cyAyKS4KLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMikgOzsKLSAgICopIGVjaG8gImFjdGlvbnMuYXQ6NTI4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDIiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzUyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKIAotICA1NCApICMgNTQuIGFjdGlvbnMuYXQ6NTMzOiBQcmludGVycyBhbmQgRGVzdHJ1Y3RvcnMgOiAlZGVmaW5lcyAlc2tlbGV0b24gImxhbHIxLmNjIgotICAgIGF0X3NldHVwX2xpbmU9J2FjdGlvbnMuYXQ6NTMzJwotICAgIGF0X2Rlc2M9J1ByaW50ZXJzIGFuZCBEZXN0cnVjdG9ycyA6ICVkZWZpbmVzICVza2VsZXRvbiAibGFscjEuY2MiJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgNTQ6IFByaW50ZXJzIGFuZCBEZXN0cnVjdG9ycyA6ICVkZWZpbmVzICVza2VsZXRvbiAibGFscjEuY2MiJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjU0LiBhY3Rpb25zLmF0OjUzMzogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgorCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzE2MAorI0FUX1NUQVJUXzE2MQorYXRfZm5fZ3JvdXBfYmFubmVyIDE2MSAnYWN0aW9ucy5hdDo3NTQnIFwKKyAgIlByaW50ZXJzIGFuZCBEZXN0cnVjdG9yczogJWRlZmluZXMgJXNrZWxldG9uIFwibGFscjEuY2NcIiIgIiIgOQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjE2MS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIApAQCAtNzg4Niw1NiArNDIzOTQsMjkgQEAKICMgQmUgc3VyZSB0byBwYXNzIGFsbCB0aGUgJWRpcmVjdGl2ZXMgdG8gdGhpcyBtYWNybyB0byBoYXZlIGNvcnJlY3QKICMgaGVscGluZyBtYWNyb3MuICBTbyBkb24ndCBwdXQgYW55IGRpcmVjdGx5IGluIHRoZSBCaXNvbiBmaWxlLgogCi0KLQotCi0jIFVzaW5nIHlhY2MuYz8KLQotCi0KLQotCi0KLQotIyB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZiAlbG9jYXRpb24gJiAlcHVyZSAmICglZ2xyIG9yICVwYXJzZS1wYXJhbSkuCi0KLSMgeXllcnJvciBhbHdheXMgc2VlcyB0aGUgbG9jYXRpb25zICh3aGVuIGFjdGl2YXRlZCksIGV4Y2VwdCBpZgotIyB5YWNjICYgcHVyZSAmICFwYXJhbS4KLQotCi0jIFRoZSBpbnRlcmZhY2UgaXMgcHVyZTogZWl0aGVyIGJlY2F1c2UgJXB1cmUtcGFyc2VyLCBvciBiZWNhdXNlIHdlCi0jIGFyZSB1c2luZyB0aGUgQysrIHBhcnNlcnMuCi0KLQotCi0KLQotCi0KLQotCi0KLQogY2F0ID5pbnB1dC55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAotJXsKKyVjb2RlIHJlcXVpcmVzIHsKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGFzc2VydC5oPgogCiAjZGVmaW5lIFlZSU5JVERFUFRIIDEwCiAjZGVmaW5lIFlZTUFYREVQVEggMTAKICNkZWZpbmUgUkFOR0UoTG9jYXRpb24pIChMb2NhdGlvbikuYmVnaW4ubGluZSwgKExvY2F0aW9uKS5lbmQubGluZQotJX0KKworLyogRGlzcGxheSB0aGUgc3ltYm9sIHR5cGUgU3ltYm9sLiAgKi8KKyNkZWZpbmUgVihTeW1ib2wsIFZhbHVlLCBMb2NhdGlvbiwgU2VwKSBcCisgICBmcHJpbnRmIChzdGRlcnIsICNTeW1ib2wgIiAoJWRAJWQtJWQpIiBTZXAsIFZhbHVlLCBSQU5HRShMb2NhdGlvbikpCit9CiAKICVlcnJvci12ZXJib3NlCiAlZGVidWcKQEAgLTc5NDMsMTcgKzQyNDI0LDE2IEBACiAlbG9jYXRpb25zCiAlZGVmaW5lcyAlc2tlbGV0b24gImxhbHIxLmNjIgogCi0lZGVmaW5lICJnbG9iYWxfdG9rZW5zX2FuZF95eXN0eXBlIgotCi0leworJWRlZmluZSBnbG9iYWxfdG9rZW5zX2FuZF95eXN0eXBlCislY29kZSB7CiB0eXBlZGVmIHl5Ojpsb2NhdGlvbiBZWUxUWVBFOwotICAgICAgICAgICAgICAgICNkZWZpbmUgWVlTVFlQRSBpbnQKLXN0YXRpYyBpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCk7CitzdGF0aWMgaW50IHl5bGV4ICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgeXk6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApOwogCi0lfQorfQogCiAKIAorLyogRklYTUU6IFRoaXMgJXByaW50ZXIgaXNuJ3QgYWN0dWFsbHkgdGVzdGVkLiAgKi8KICVwcmludGVyCiAgIHsKICAgICBkZWJ1Z19zdHJlYW0gKCkgPDwgJCQ7OwpAQCAtNzk2MSwyNSArNDI0NDEsMzAgQEAKICAgaW5wdXQgbGluZSB0aGluZyAneCcgJ3knCiAKICVkZXN0cnVjdG9yCi0gIHsgcHJpbnRmICgiRnJlZWluZyBudGVybSBpbnB1dCAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KKyAgeyBmcHJpbnRmIChzdGRlcnIsICJGcmVlaW5nIG50ZXJtIGlucHV0ICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQogICBpbnB1dAogCiAlZGVzdHJ1Y3RvcgotICB7IHByaW50ZiAoIkZyZWVpbmcgbnRlcm0gbGluZSAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KKyAgeyBmcHJpbnRmIChzdGRlcnIsICJGcmVlaW5nIG50ZXJtIGxpbmUgKCVkQCVkLSVkKVxuIiwgJCQsIFJBTkdFIChAJCkpOyB9CiAgIGxpbmUKIAogJWRlc3RydWN0b3IKLSAgeyBwcmludGYgKCJGcmVlaW5nIG50ZXJtIHRoaW5nICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQorICB7IGZwcmludGYgKHN0ZGVyciwgIkZyZWVpbmcgbnRlcm0gdGhpbmcgKCVkQCVkLSVkKVxuIiwgJCQsIFJBTkdFIChAJCkpOyB9CiAgIHRoaW5nCiAKICVkZXN0cnVjdG9yCi0gIHsgcHJpbnRmICgiRnJlZWluZyB0b2tlbiAneCcgKCVkQCVkLSVkKVxuIiwgJCQsIFJBTkdFIChAJCkpOyB9CisgIHsgZnByaW50ZiAoc3RkZXJyLCAiRnJlZWluZyB0b2tlbiAneCcgKCVkQCVkLSVkKVxuIiwgJCQsIFJBTkdFIChAJCkpOyB9CiAgICd4JwogCiAlZGVzdHJ1Y3RvcgotICB7IHByaW50ZiAoIkZyZWVpbmcgdG9rZW4gJ3knICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQorICB7IGZwcmludGYgKHN0ZGVyciwgIkZyZWVpbmcgdG9rZW4gJ3knICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQogICAneScKIAorJXRva2VuIEVORCAwCislZGVzdHJ1Y3RvcgorICB7IGZwcmludGYgKHN0ZGVyciwgIkZyZWVpbmcgdG9rZW4gRU5EICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQorICBFTkQKKwogJSUKIC8qCiAgICBUaGlzIGdyYW1tYXIgaXMgbWFkZSB0byBleGVyY2lzZSBlcnJvciByZWNvdmVyeS4KQEAgLTc5OTIsMTQgKzQyNDc3LDE1IEBACiAgIC8qIE5vdGhpbmcuICovCiAgICAgewogICAgICAgJCQgPSAwOwotICAgICAgcHJpbnRmICgiaW5wdXQgKCVkQCVkLSVkKTogLyogTm90aGluZyAqL1xuIiwgJCQsIFJBTkdFIChAJCkpOworICAgICAgVihpbnB1dCwgJCQsIEAkLCAiOiAvKiBOb3RoaW5nICovXG4iKTsKICAgICB9CiB8IGxpbmUgaW5wdXQgLyogUmlnaHQgcmVjdXJzaXZlIHRvIGxvYWQgdGhlIHN0YWNrIHNvIHRoYXQgcG9wcGluZyBhdAotCQlFT0YgY2FuCWJlIGV4ZXJjaXNlZC4gICovCisgICAgICAgICAgICAgICAgRU5EIGNhbiBiZSBleGVyY2lzZWQuICAqLwogICAgIHsKICAgICAgICQkID0gMjsKLSAgICAgIHByaW50ZiAoImlucHV0ICglZEAlZC0lZCk6IGxpbmUgKCVkQCVkLSVkKSBpbnB1dCAoJWRAJWQtJWQpXG4iLAotCSAgICAgICQkLCBSQU5HRSAoQCQpLCAkMSwgUkFOR0UgKEAxKSwgJDIsIFJBTkdFIChAMikpOworICAgICAgVihpbnB1dCwgJCQsIEAkLCAiOiAiKTsKKyAgICAgIFYobGluZSwgICQxLCBAMSwgIiAiKTsKKyAgICAgIFYoaW5wdXQsICQyLCBAMiwgIlxuIik7CiAgICAgfQogOwogCkBAIC04MDA3LDI4ICs0MjQ5MywzNiBAQAogICB0aGluZyB0aGluZyB0aGluZyAnOycKICAgICB7CiAgICAgICAkJCA9ICQxOwotICAgICAgcHJpbnRmICgibGluZSAoJWRAJWQtJWQpOiB0aGluZyAoJWRAJWQtJWQpIHRoaW5nICglZEAlZC0lZCkgdGhpbmcgKCVkQCVkLSVkKSAnOycgKCVkQCVkLSVkKVxuIiwKLSAgICAgICAgICAgICAgJCQsIFJBTkdFIChAJCksICQxLCBSQU5HRSAoQDEpLCAkMiwgUkFOR0UgKEAyKSwKLSAgICAgICAgICAgICAgJDMsIFJBTkdFIChAMyksICQ0LCBSQU5HRSAoQDQpKTsKKyAgICAgIFYobGluZSwgICQkLCBAJCwgIjogIik7CisgICAgICBWKHRoaW5nLCAkMSwgQDEsICIgIik7CisgICAgICBWKHRoaW5nLCAkMiwgQDIsICIgIik7CisgICAgICBWKHRoaW5nLCAkMywgQDMsICIgIik7CisgICAgICBWKDssICAgICAkNCwgQDQsICJcbiIpOwogICAgIH0KIHwgJygnIHRoaW5nIHRoaW5nICcpJwogICAgIHsKICAgICAgICQkID0gJDE7Ci0gICAgICBwcmludGYgKCJsaW5lICglZEAlZC0lZCk6ICcoJyAoJWRAJWQtJWQpIHRoaW5nICglZEAlZC0lZCkgdGhpbmcgKCVkQCVkLSVkKSAnKScgKCVkQCVkLSVkKVxuIiwKLSAgICAgICAgICAgICAgJCQsIFJBTkdFIChAJCksICQxLCBSQU5HRSAoQDEpLCAkMiwgUkFOR0UgKEAyKSwKLSAgICAgICAgICAgICAgJDMsIFJBTkdFIChAMyksICQ0LCBSQU5HRSAoQDQpKTsKKyAgICAgIFYobGluZSwgICQkLCBAJCwgIjogIik7CisgICAgICBWKCcoJywgICAkMSwgQDEsICIgIik7CisgICAgICBWKHRoaW5nLCAkMiwgQDIsICIgIik7CisgICAgICBWKHRoaW5nLCAkMywgQDMsICIgIik7CisgICAgICBWKCcpJywgICAkNCwgQDQsICJcbiIpOwogICAgIH0KIHwgJygnIHRoaW5nICcpJwogICAgIHsKICAgICAgICQkID0gJDE7Ci0gICAgICBwcmludGYgKCJsaW5lICglZEAlZC0lZCk6ICcoJyAoJWRAJWQtJWQpIHRoaW5nICglZEAlZC0lZCkgJyknICglZEAlZC0lZClcbiIsCi0gICAgICAgICAgICAgICQkLCBSQU5HRSAoQCQpLCAkMSwgUkFOR0UgKEAxKSwgJDIsIFJBTkdFIChAMiksICQzLCBSQU5HRSAoQDMpKTsKKyAgICAgIFYobGluZSwgICQkLCBAJCwgIjogIik7CisgICAgICBWKCcoJywgICAkMSwgQDEsICIgIik7CisgICAgICBWKHRoaW5nLCAkMiwgQDIsICIgIik7CisgICAgICBWKCcpJywgICAkMywgQDMsICJcbiIpOwogICAgIH0KIHwgJygnIGVycm9yICcpJwogICAgIHsKICAgICAgICQkID0gLTE7Ci0gICAgICBwcmludGYgKCJsaW5lICglZEAlZC0lZCk6ICcoJyAoJWRAJWQtJWQpIGVycm9yIChAJWQtJWQpICcpJyAoJWRAJWQtJWQpXG4iLAotICAgICAgICAgICAgICAkJCwgUkFOR0UgKEAkKSwgJDEsIFJBTkdFIChAMSksIFJBTkdFIChAMiksICQzLCBSQU5HRSAoQDMpKTsKKyAgICAgIFYobGluZSwgICQkLCBAJCwgIjogIik7CisgICAgICBWKCcoJywgICAkMSwgQDEsICIgIik7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJlcnJvciAoQCVkLSVkKSAiLCBSQU5HRSAoQDIpKTsKKyAgICAgIFYoJyknLCAgICQzLCBAMywgIlxuIik7CiAgICAgfQogOwogCkBAIC04MDM2LDQwICs0MjUzMCwzOSBAQAogICAneCcKICAgICB7CiAgICAgICAkJCA9ICQxOwotICAgICAgcHJpbnRmICgidGhpbmcgKCVkQCVkLSVkKTogJ3gnICglZEAlZC0lZClcbiIsCi0gICAgICAgICAgICAgICQkLCBSQU5HRSAoQCQpLCAkMSwgUkFOR0UgKEAxKSk7CisgICAgICBWKHRoaW5nLCAkJCwgQCQsICI6ICIpOworICAgICAgVigneCcsICAgJDEsIEAxLCAiXG4iKTsKICAgICB9CiA7CiAlJQogLyogQWxpYXMgdG8gQVJHVlsxXS4gKi8KLWNvbnN0IGNoYXIgKnNvdXJjZSA9IDA7Citjb25zdCBjaGFyICpzb3VyY2UgPSBZWV9OVUxMOwogCi1zdGF0aWMgaW50Ci15eWxleCAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKQorLyogQSBDKysgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3ZvaWQKK3l5OjpwYXJzZXI6OmVycm9yIChjb25zdCBsb2NhdGlvbl90eXBlJiBsLCBjb25zdCBzdGQ6OnN0cmluZyYgbSkKK3sKKyAgKHZvaWQpIGw7CisgIHN0ZDo6Y2VyciA8PCBsIDw8ICI6ICIgPDwgbSA8PCBzdGQ6OmVuZGw7Cit9CisKK3N0YXRpYworaW50IHl5bGV4ICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgeXk6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApCiB7CiAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgY291bnRlciA9IDA7CiAKICAgaW50IGMgPSAoKmx2YWxwKSA9IGNvdW50ZXIrKzsKICAgLyogQXMgaW4gQkFTSUMsIGxpbmUgbnVtYmVycyBnbyBmcm9tIDEwIHRvIDEwLiAgKi8KLSAoKmxsb2NwKS5iZWdpbi5saW5lID0gKCpsbG9jcCkuYmVnaW4uY29sdW1uID0gMTAgKiBjOworICAoKmxsb2NwKS5iZWdpbi5saW5lID0gKCpsbG9jcCkuYmVnaW4uY29sdW1uID0gMTAgKiBjOwogICAoKmxsb2NwKS5lbmQubGluZSA9ICgqbGxvY3ApLmVuZC5jb2x1bW4gPSAoKmxsb2NwKS5iZWdpbi5saW5lICsgOTsKLQotCisgIGFzc2VydCAoMCA8PSBjICYmIGMgPD0gc3RybGVuIChzb3VyY2UpKTsKICAgaWYgKHNvdXJjZVtjXSkKLSAgICBwcmludGYgKCJzZW5kaW5nOiAnJWMnIiwgc291cmNlW2NdKTsKKyAgICBmcHJpbnRmIChzdGRlcnIsICJzZW5kaW5nOiAnJWMnIiwgc291cmNlW2NdKTsKICAgZWxzZQotICAgIHByaW50ZiAoInNlbmRpbmc6IEVPRiIpOwotICBwcmludGYgKCIgKCVkQCVkLSVkKVxuIiwgYywgUkFOR0UgKCgqbGxvY3ApKSk7CisgICAgZnByaW50ZiAoc3RkZXJyLCAic2VuZGluZzogRU5EIik7CisgIGZwcmludGYgKHN0ZGVyciwgIiAoJWRAJWQtJWQpXG4iLCBjLCBSQU5HRSAoKCpsbG9jcCkpKTsKICAgcmV0dXJuIHNvdXJjZVtjXTsKIH0KLQotLyogQSBDKysgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAqLwotdm9pZAoteXk6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGxvY2F0aW9uJiBsLCBjb25zdCBzdGQ6OnN0cmluZyYgbSkKLXsKLSAgcHJpbnRmICgiJWQtJWQ6ICVzXG4iLCBSQU5HRSAobCksIG0uY19zdHIoKSk7Ci19Ci0KIHN0YXRpYyBib29sIHl5ZGVidWc7CiBpbnQKIHl5cGFyc2UgKCkKQEAgLTgwOTAsOSArNDI1ODMsOSBAQAogICBzdGF0dXMgPSB5eXBhcnNlICgpOwogICBzd2l0Y2ggKHN0YXR1cykKICAgICB7Ci0gICAgICBjYXNlIDA6IHByaW50ZiAoIlN1Y2Nlc3NmdWwgcGFyc2UuXG4iKTsgYnJlYWs7Ci0gICAgICBjYXNlIDE6IHByaW50ZiAoIlBhcnNpbmcgRkFJTEVELlxuIik7IGJyZWFrOwotICAgICAgZGVmYXVsdDogcHJpbnRmICgiUGFyc2luZyBGQUlMRUQgKHN0YXR1cyAlZCkuXG4iLCBzdGF0dXMpOyBicmVhazsKKyAgICAgIGNhc2UgMDogZnByaW50ZiAoc3RkZXJyLCAiU3VjY2Vzc2Z1bCBwYXJzZS5cbiIpOyBicmVhazsKKyAgICAgIGNhc2UgMTogZnByaW50ZiAoc3RkZXJyLCAiUGFyc2luZyBGQUlMRUQuXG4iKTsgYnJlYWs7CisgICAgICBkZWZhdWx0OiBmcHJpbnRmIChzdGRlcnIsICJQYXJzaW5nIEZBSUxFRCAoc3RhdHVzICVkKS5cbiIsIHN0YXR1cyk7IGJyZWFrOwogICAgIH0KICAgcmV0dXJuIHN0YXR1czsKIH0KQEAgLTgxMDAsODEgKzQyNTkzLDExOSBAQAogCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJhY3Rpb25zLmF0OjUzMzogYmlzb24gLW8gaW5wdXQuY2MgaW5wdXQueSIKLWVjaG8gYWN0aW9ucy5hdDo1MzMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGlucHV0LmNjIGlucHV0LnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiYWN0aW9ucy5hdDo1MzM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiYWN0aW9ucy5hdDo3NTQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuY2MgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzU0OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkiICJhY3Rpb25zLmF0Ojc1NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6NzU0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzU0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTQ6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0Ojc1NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzU0OiBiaXNvbiAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDo3NTQiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuY2MgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJhY3Rpb25zLmF0OjUzMzogXCRCSVNPTl9DWFhfV09SS1MiCi1lY2hvIGFjdGlvbnMuYXQ6NTMzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQklTT05fQ1hYX1dPUktTICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImFjdGlvbnMuYXQ6NTMzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NDogXCRCSVNPTl9DWFhfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DWFhfV09SS1MiICJhY3Rpb25zLmF0Ojc1NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ1hYX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTQ6IFwkQ1hYIFwkQ1hYRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuY2MgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuY2MgJExJQlMiICJhY3Rpb25zLmF0Ojc1NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuY2MgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzU0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJhY3Rpb25zLmF0OjUzMzogXCRDWFggXCRDWFhGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyBcJExJQlMiCi1lY2hvIGFjdGlvbnMuYXQ6NTMzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuY2MgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiYWN0aW9ucy5hdDo1MzM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgogCiAKIApAQCAtODE4Myw0MCArNDI3MTQsNDQgQEAKICMgSS5lLiwgZXBzaWxvbi1yZWR1Y3Rpb25zLCBhcyBpbiAiKHgpIiB3aGljaCBlbmRzIGJ5IHJlZHVjaW5nCiAjIGFuIGVtcHR5ICJsaW5lIiBudGVybS4KICMgRklYTUU6IFRoaXMgbG9jYXRpb24gaXMgbm90IHNhdGlzZnlpbmcuICBEZXBlbmQgb24gdGhlIGxvb2thaGVhZD8KLSRhdF90cmFjZW9mZgotZWNobyAiYWN0aW9ucy5hdDo1MzM6IFwkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KSciCi1lY2hvIGFjdGlvbnMuYXQ6NTMzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KScgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gInNlbmRpbmc6ICcoJyAoMEAwLTkpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTQ6ICBcJFBSRVBBUlNFUiAuL2lucHV0ICcoeCknIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0ICcoeCknIiAiYWN0aW9ucy5hdDo3NTQiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCAnKHgpJworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTQ6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDo3NTQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzZW5kaW5nOiAnKCcgKDBAMC05KQogc2VuZGluZzogJ3gnICgxQDEwLTE5KQogdGhpbmcgKDFAMTAtMTkpOiAneCcgKDFAMTAtMTkpCiBzZW5kaW5nOiAnKScgKDJAMjAtMjkpCiBsaW5lICgwQDAtMjkpOiAnKCcgKDBAMC05KSB0aGluZyAoMUAxMC0xOSkgJyknICgyQDIwLTI5KQotc2VuZGluZzogRU9GICgzQDMwLTM5KQorc2VuZGluZzogRU5EICgzQDMwLTM5KQogaW5wdXQgKDBAMjktMjkpOiAvKiBOb3RoaW5nICovCiBpbnB1dCAoMkAwLTI5KTogbGluZSAoMEAwLTI5KSBpbnB1dCAoMEAyOS0yOSkKK0ZyZWVpbmcgdG9rZW4gRU5EICgzQDMwLTM5KQogRnJlZWluZyBudGVybSBpbnB1dCAoMkAwLTI5KQogU3VjY2Vzc2Z1bCBwYXJzZS4KLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImFjdGlvbnMuYXQ6NTMzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KIAogCiAKQEAgLTgyMjQsNDEgKzQyNzU5LDQ1IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyAnKHkpJyBpcyBhbiBlcnJvciwgYnV0IGNhbiBiZSByZWNvdmVyZWQgZnJvbS4gIEJ1dCB3aGF0J3MgdGhlIGxvY2F0aW9uCiAjIG9mIHRoZSBlcnJvciBpdHNlbGYgKCd5JyksIGFuZCBvZiB0aGUgcmVzdWx0aW5nIHJlZHVjdGlvbiAoJyhlcnJvciknKS4KLSRhdF90cmFjZW9mZgotZWNobyAiYWN0aW9ucy5hdDo1MzM6IFwkUFJFUEFSU0VSIC4vaW5wdXQgJyh5KSciCi1lY2hvIGFjdGlvbnMuYXQ6NTMzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vaW5wdXQgJyh5KScgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gInNlbmRpbmc6ICcoJyAoMEAwLTkpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTQ6ICBcJFBSRVBBUlNFUiAuL2lucHV0ICcoeSknIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0ICcoeSknIiAiYWN0aW9ucy5hdDo3NTQiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCAnKHkpJworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTQ6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDo3NTQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzZW5kaW5nOiAnKCcgKDBAMC05KQogc2VuZGluZzogJ3knICgxQDEwLTE5KQotMTAtMTk6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAneScsIGV4cGVjdGluZyAneCcKKzEwLjEwLTE5LjE4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ3knLCBleHBlY3RpbmcgJ3gnCiBGcmVlaW5nIHRva2VuICd5JyAoMUAxMC0xOSkKIHNlbmRpbmc6ICcpJyAoMkAyMC0yOSkKIGxpbmUgKC0xQDAtMjkpOiAnKCcgKDBAMC05KSBlcnJvciAoQDEwLTE5KSAnKScgKDJAMjAtMjkpCi1zZW5kaW5nOiBFT0YgKDNAMzAtMzkpCitzZW5kaW5nOiBFTkQgKDNAMzAtMzkpCiBpbnB1dCAoMEAyOS0yOSk6IC8qIE5vdGhpbmcgKi8KIGlucHV0ICgyQDAtMjkpOiBsaW5lICgtMUAwLTI5KSBpbnB1dCAoMEAyOS0yOSkKK0ZyZWVpbmcgdG9rZW4gRU5EICgzQDMwLTM5KQogRnJlZWluZyBudGVybSBpbnB1dCAoMkAwLTI5KQogU3VjY2Vzc2Z1bCBwYXJzZS4KLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImFjdGlvbnMuYXQ6NTMzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KIAogCiAKQEAgLTgyNzYsMjIgKzQyODE1LDMzIEBACiAjICAgICAnKCcsICd4JywgJyknLAogIyAgICAgJygnLCAneCcsICcpJywKICMgICAgICd5JwotJGF0X3RyYWNlb2ZmCi1lY2hvICJhY3Rpb25zLmF0OjUzMzogXCRQUkVQQVJTRVIgLi9pbnB1dCAnKHh4eHh4KSh4KSh4KXknIgotZWNobyBhY3Rpb25zLmF0OjUzMyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2lucHV0ICcoeHh4eHgpKHgpKHgpeScgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gInNlbmRpbmc6ICcoJyAoMEAwLTkpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTQ6ICBcJFBSRVBBUlNFUiAuL2lucHV0ICcoeHh4eHgpKHgpKHgpeSciCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQgJyh4eHh4eCkoeCkoeCl5JyIgImFjdGlvbnMuYXQ6NzU0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQgJyh4eHh4eCkoeCkoeCl5JworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTQ6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDo3NTQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzZW5kaW5nOiAnKCcgKDBAMC05KQogc2VuZGluZzogJ3gnICgxQDEwLTE5KQogdGhpbmcgKDFAMTAtMTkpOiAneCcgKDFAMTAtMTkpCiBzZW5kaW5nOiAneCcgKDJAMjAtMjkpCiB0aGluZyAoMkAyMC0yOSk6ICd4JyAoMkAyMC0yOSkKIHNlbmRpbmc6ICd4JyAoM0AzMC0zOSkKLTMwLTM5OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ3gnLCBleHBlY3RpbmcgJyknCiszMC4zMC0zOS4zODogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICd4JywgZXhwZWN0aW5nICcpJwogRnJlZWluZyBudGVybSB0aGluZyAoMkAyMC0yOSkKIEZyZWVpbmcgbnRlcm0gdGhpbmcgKDFAMTAtMTkpCiBGcmVlaW5nIHRva2VuICd4JyAoM0AzMC0zOSkKQEAgLTgzMTYsMjUgKzQyODY2LDc2IEBACiBpbnB1dCAoMkAxMDAtMTI5KTogbGluZSAoMTBAMTAwLTEyOSkgaW5wdXQgKDBAMTI5LTEyOSkKIGlucHV0ICgyQDcwLTEyOSk6IGxpbmUgKDdANzAtOTkpIGlucHV0ICgyQDEwMC0xMjkpCiBpbnB1dCAoMkAwLTEyOSk6IGxpbmUgKC0xQDAtNjkpIGlucHV0ICgyQDcwLTEyOSkKLTEzMC0xMzk6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAneScsIGV4cGVjdGluZyBcJGVuZAorMTMwLjEzMC0xMzkuMTM4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ3knLCBleHBlY3RpbmcgRU5ECiBGcmVlaW5nIG50ZXJtIGlucHV0ICgyQDAtMTI5KQogRnJlZWluZyB0b2tlbiAneScgKDEzQDEzMC0xMzkpCiBQYXJzaW5nIEZBSUxFRC4KLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImFjdGlvbnMuYXQ6NTMzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKIAotJGF0X3RyYWNlb24KKworCisjIFN5bnRheCBlcnJvciBjYXVnaHQgYnkgdGhlIHBhcnNlciB3aGVyZSBsb29rYWhlYWQgPSBFTkQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTG9hZCB0aGUgc3RhY2sgYW5kIHByb3Zva2UgYW4gZXJyb3IgdGhhdCBjYW5ub3QgYmUgY2F1Z2h0IGJ5IHRoZQorIyBncmFtbWFyLCB0byBjaGVjayB0aGF0IHRoZSBzdGFjayBpcyBjbGVhcmVkLiAgQW5kIG1ha2Ugc3VyZSB0aGUKKyMgbG9va2FoZWFkIGlzIGZyZWVkLgorIworIyAgICAgJygnLCAneCcsICcpJywKKyMgICAgICcoJywgJ3gnLCAnKScsCisjICAgICAneCcKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NDogIFwkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KSh4KXgnIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0ICcoeCkoeCl4JyIgImFjdGlvbnMuYXQ6NzU0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KSh4KXgnCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0Ojc1NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInNlbmRpbmc6ICcoJyAoMEAwLTkpCitzZW5kaW5nOiAneCcgKDFAMTAtMTkpCit0aGluZyAoMUAxMC0xOSk6ICd4JyAoMUAxMC0xOSkKK3NlbmRpbmc6ICcpJyAoMkAyMC0yOSkKK2xpbmUgKDBAMC0yOSk6ICcoJyAoMEAwLTkpIHRoaW5nICgxQDEwLTE5KSAnKScgKDJAMjAtMjkpCitzZW5kaW5nOiAnKCcgKDNAMzAtMzkpCitzZW5kaW5nOiAneCcgKDRANDAtNDkpCit0aGluZyAoNEA0MC00OSk6ICd4JyAoNEA0MC00OSkKK3NlbmRpbmc6ICcpJyAoNUA1MC01OSkKK2xpbmUgKDNAMzAtNTkpOiAnKCcgKDNAMzAtMzkpIHRoaW5nICg0QDQwLTQ5KSAnKScgKDVANTAtNTkpCitzZW5kaW5nOiAneCcgKDZANjAtNjkpCit0aGluZyAoNkA2MC02OSk6ICd4JyAoNkA2MC02OSkKK3NlbmRpbmc6IEVORCAoN0A3MC03OSkKKzcwLjcwLTc5Ljc4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgRU5ELCBleHBlY3RpbmcgJ3gnCitGcmVlaW5nIG50ZXJtIHRoaW5nICg2QDYwLTY5KQorRnJlZWluZyBudGVybSBsaW5lICgzQDMwLTU5KQorRnJlZWluZyBudGVybSBsaW5lICgwQDAtMjkpCitGcmVlaW5nIHRva2VuIEVORCAoN0A3MC03OSkKK1BhcnNpbmcgRkFJTEVELgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKIAogCiAjIENoZWNrIGRlc3RydWN0aW9uIHVwb24gc3RhY2sgb3ZlcmZsb3cKQEAgLTgzNDUsMjAgKzQyOTQ2LDE5IEBACiAKIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKIAotICA1NSApICMgNTUuIGFjdGlvbnMuYXQ6NTM0OiBQcmludGVycyBhbmQgRGVzdHJ1Y3RvcnMgd2l0aCB1bmlvbjogJWRlZmluZXMgJXNrZWxldG9uICJsYWxyMS5jYyIKLSAgICBhdF9zZXR1cF9saW5lPSdhY3Rpb25zLmF0OjUzNCcKLSAgICBhdF9kZXNjPSdQcmludGVycyBhbmQgRGVzdHJ1Y3RvcnMgd2l0aCB1bmlvbjogJWRlZmluZXMgJXNrZWxldG9uICJsYWxyMS5jYyInCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiA1NTogUHJpbnRlcnMgYW5kIERlc3RydWN0b3JzIHdpdGggdW5pb246ICVkZWZpbmVzICVza2VsZXRvbiAibGFscjEuY2MiJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjU1LiBhY3Rpb25zLmF0OjUzNDogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xNjEKKyNBVF9TVEFSVF8xNjIKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxNjIgJ2FjdGlvbnMuYXQ6NzU1JyBcCisgICJQcmludGVycyBhbmQgRGVzdHJ1Y3RvcnMgd2l0aCB1bmlvbjogJWRlZmluZXMgJXNrZWxldG9uIFwibGFscjEuY2NcIiIgIiIgOQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjE2Mi4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIApAQCAtODM2Nyw1NiArNDI5NjcsMjkgQEAKICMgQmUgc3VyZSB0byBwYXNzIGFsbCB0aGUgJWRpcmVjdGl2ZXMgdG8gdGhpcyBtYWNybyB0byBoYXZlIGNvcnJlY3QKICMgaGVscGluZyBtYWNyb3MuICBTbyBkb24ndCBwdXQgYW55IGRpcmVjdGx5IGluIHRoZSBCaXNvbiBmaWxlLgogCi0KLQotCi0jIFVzaW5nIHlhY2MuYz8KLQotCi0KLQotCi0KLQotIyB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZiAlbG9jYXRpb24gJiAlcHVyZSAmICglZ2xyIG9yICVwYXJzZS1wYXJhbSkuCi0KLSMgeXllcnJvciBhbHdheXMgc2VlcyB0aGUgbG9jYXRpb25zICh3aGVuIGFjdGl2YXRlZCksIGV4Y2VwdCBpZgotIyB5YWNjICYgcHVyZSAmICFwYXJhbS4KLQotCi0jIFRoZSBpbnRlcmZhY2UgaXMgcHVyZTogZWl0aGVyIGJlY2F1c2UgJXB1cmUtcGFyc2VyLCBvciBiZWNhdXNlIHdlCi0jIGFyZSB1c2luZyB0aGUgQysrIHBhcnNlcnMuCi0KLQotCi0KLQotCi0KLQotCi0KLQogY2F0ID5pbnB1dC55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAotJXsKKyVjb2RlIHJlcXVpcmVzIHsKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGFzc2VydC5oPgogCiAjZGVmaW5lIFlZSU5JVERFUFRIIDEwCiAjZGVmaW5lIFlZTUFYREVQVEggMTAKICNkZWZpbmUgUkFOR0UoTG9jYXRpb24pIChMb2NhdGlvbikuYmVnaW4ubGluZSwgKExvY2F0aW9uKS5lbmQubGluZQotJX0KKworLyogRGlzcGxheSB0aGUgc3ltYm9sIHR5cGUgU3ltYm9sLiAgKi8KKyNkZWZpbmUgVihTeW1ib2wsIFZhbHVlLCBMb2NhdGlvbiwgU2VwKSBcCisgICBmcHJpbnRmIChzdGRlcnIsICNTeW1ib2wgIiAoJWRAJWQtJWQpIiBTZXAsIFZhbHVlLCBSQU5HRShMb2NhdGlvbikpCit9CiAKICVlcnJvci12ZXJib3NlCiAlZGVidWcKQEAgLTg0MjcsMTcgKzQzMDAwLDE2IEBACiB7CiAgIGludCBpdmFsOwogfQotJWRlZmluZSAiZ2xvYmFsX3Rva2Vuc19hbmRfeXlzdHlwZSIKLQotJXsKKyVkZWZpbmUgZ2xvYmFsX3Rva2Vuc19hbmRfeXlzdHlwZQorJWNvZGUgcHJvdmlkZXMgewogdHlwZWRlZiB5eTo6bG9jYXRpb24gWVlMVFlQRTsKK3N0YXRpYyBpbnQgeXlsZXggKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCB5eTo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCk7CiAKLXN0YXRpYyBpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCk7Cit9CiAKLSV9CisldHlwZSA8aXZhbD4gJygnICd4JyAneScgJyknICc7JyB0aGluZyBsaW5lIGlucHV0IEVORAogCi0ldHlwZSA8aXZhbD4gJygnICd4JyAneScgJyknICc7JyB0aGluZyBsaW5lIGlucHV0Ci0KKy8qIEZJWE1FOiBUaGlzICVwcmludGVyIGlzbid0IGFjdHVhbGx5IHRlc3RlZC4gICovCiAlcHJpbnRlcgogICB7CiAgICAgZGVidWdfc3RyZWFtICgpIDw8ICQkOzsKQEAgLTg0NDUsMjUgKzQzMDE3LDMwIEBACiAgIGlucHV0IGxpbmUgdGhpbmcgJ3gnICd5JwogCiAlZGVzdHJ1Y3RvcgotICB7IHByaW50ZiAoIkZyZWVpbmcgbnRlcm0gaW5wdXQgKCVkQCVkLSVkKVxuIiwgJCQsIFJBTkdFIChAJCkpOyB9CisgIHsgZnByaW50ZiAoc3RkZXJyLCAiRnJlZWluZyBudGVybSBpbnB1dCAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KICAgaW5wdXQKIAogJWRlc3RydWN0b3IKLSAgeyBwcmludGYgKCJGcmVlaW5nIG50ZXJtIGxpbmUgKCVkQCVkLSVkKVxuIiwgJCQsIFJBTkdFIChAJCkpOyB9CisgIHsgZnByaW50ZiAoc3RkZXJyLCAiRnJlZWluZyBudGVybSBsaW5lICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQogICBsaW5lCiAKICVkZXN0cnVjdG9yCi0gIHsgcHJpbnRmICgiRnJlZWluZyBudGVybSB0aGluZyAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KKyAgeyBmcHJpbnRmIChzdGRlcnIsICJGcmVlaW5nIG50ZXJtIHRoaW5nICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQogICB0aGluZwogCiAlZGVzdHJ1Y3RvcgotICB7IHByaW50ZiAoIkZyZWVpbmcgdG9rZW4gJ3gnICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQorICB7IGZwcmludGYgKHN0ZGVyciwgIkZyZWVpbmcgdG9rZW4gJ3gnICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQogICAneCcKIAogJWRlc3RydWN0b3IKLSAgeyBwcmludGYgKCJGcmVlaW5nIHRva2VuICd5JyAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KKyAgeyBmcHJpbnRmIChzdGRlcnIsICJGcmVlaW5nIHRva2VuICd5JyAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KICAgJ3knCiAKKyV0b2tlbiBFTkQgMAorJWRlc3RydWN0b3IKKyAgeyBmcHJpbnRmIChzdGRlcnIsICJGcmVlaW5nIHRva2VuIEVORCAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KKyAgRU5ECisKICUlCiAvKgogICAgVGhpcyBncmFtbWFyIGlzIG1hZGUgdG8gZXhlcmNpc2UgZXJyb3IgcmVjb3ZlcnkuCkBAIC04NDc2LDE0ICs0MzA1MywxNSBAQAogICAvKiBOb3RoaW5nLiAqLwogICAgIHsKICAgICAgICQkID0gMDsKLSAgICAgIHByaW50ZiAoImlucHV0ICglZEAlZC0lZCk6IC8qIE5vdGhpbmcgKi9cbiIsICQkLCBSQU5HRSAoQCQpKTsKKyAgICAgIFYoaW5wdXQsICQkLCBAJCwgIjogLyogTm90aGluZyAqL1xuIik7CiAgICAgfQogfCBsaW5lIGlucHV0IC8qIFJpZ2h0IHJlY3Vyc2l2ZSB0byBsb2FkIHRoZSBzdGFjayBzbyB0aGF0IHBvcHBpbmcgYXQKLQkJRU9GIGNhbgliZSBleGVyY2lzZWQuICAqLworICAgICAgICAgICAgICAgIEVORCBjYW4gYmUgZXhlcmNpc2VkLiAgKi8KICAgICB7CiAgICAgICAkJCA9IDI7Ci0gICAgICBwcmludGYgKCJpbnB1dCAoJWRAJWQtJWQpOiBsaW5lICglZEAlZC0lZCkgaW5wdXQgKCVkQCVkLSVkKVxuIiwKLQkgICAgICAkJCwgUkFOR0UgKEAkKSwgJDEsIFJBTkdFIChAMSksICQyLCBSQU5HRSAoQDIpKTsKKyAgICAgIFYoaW5wdXQsICQkLCBAJCwgIjogIik7CisgICAgICBWKGxpbmUsICAkMSwgQDEsICIgIik7CisgICAgICBWKGlucHV0LCAkMiwgQDIsICJcbiIpOwogICAgIH0KIDsKIApAQCAtODQ5MSwyOCArNDMwNjksMzYgQEAKICAgdGhpbmcgdGhpbmcgdGhpbmcgJzsnCiAgICAgewogICAgICAgJCQgPSAkMTsKLSAgICAgIHByaW50ZiAoImxpbmUgKCVkQCVkLSVkKTogdGhpbmcgKCVkQCVkLSVkKSB0aGluZyAoJWRAJWQtJWQpIHRoaW5nICglZEAlZC0lZCkgJzsnICglZEAlZC0lZClcbiIsCi0gICAgICAgICAgICAgICQkLCBSQU5HRSAoQCQpLCAkMSwgUkFOR0UgKEAxKSwgJDIsIFJBTkdFIChAMiksCi0gICAgICAgICAgICAgICQzLCBSQU5HRSAoQDMpLCAkNCwgUkFOR0UgKEA0KSk7CisgICAgICBWKGxpbmUsICAkJCwgQCQsICI6ICIpOworICAgICAgVih0aGluZywgJDEsIEAxLCAiICIpOworICAgICAgVih0aGluZywgJDIsIEAyLCAiICIpOworICAgICAgVih0aGluZywgJDMsIEAzLCAiICIpOworICAgICAgVig7LCAgICAgJDQsIEA0LCAiXG4iKTsKICAgICB9CiB8ICcoJyB0aGluZyB0aGluZyAnKScKICAgICB7CiAgICAgICAkJCA9ICQxOwotICAgICAgcHJpbnRmICgibGluZSAoJWRAJWQtJWQpOiAnKCcgKCVkQCVkLSVkKSB0aGluZyAoJWRAJWQtJWQpIHRoaW5nICglZEAlZC0lZCkgJyknICglZEAlZC0lZClcbiIsCi0gICAgICAgICAgICAgICQkLCBSQU5HRSAoQCQpLCAkMSwgUkFOR0UgKEAxKSwgJDIsIFJBTkdFIChAMiksCi0gICAgICAgICAgICAgICQzLCBSQU5HRSAoQDMpLCAkNCwgUkFOR0UgKEA0KSk7CisgICAgICBWKGxpbmUsICAkJCwgQCQsICI6ICIpOworICAgICAgVignKCcsICAgJDEsIEAxLCAiICIpOworICAgICAgVih0aGluZywgJDIsIEAyLCAiICIpOworICAgICAgVih0aGluZywgJDMsIEAzLCAiICIpOworICAgICAgVignKScsICAgJDQsIEA0LCAiXG4iKTsKICAgICB9CiB8ICcoJyB0aGluZyAnKScKICAgICB7CiAgICAgICAkJCA9ICQxOwotICAgICAgcHJpbnRmICgibGluZSAoJWRAJWQtJWQpOiAnKCcgKCVkQCVkLSVkKSB0aGluZyAoJWRAJWQtJWQpICcpJyAoJWRAJWQtJWQpXG4iLAotICAgICAgICAgICAgICAkJCwgUkFOR0UgKEAkKSwgJDEsIFJBTkdFIChAMSksICQyLCBSQU5HRSAoQDIpLCAkMywgUkFOR0UgKEAzKSk7CisgICAgICBWKGxpbmUsICAkJCwgQCQsICI6ICIpOworICAgICAgVignKCcsICAgJDEsIEAxLCAiICIpOworICAgICAgVih0aGluZywgJDIsIEAyLCAiICIpOworICAgICAgVignKScsICAgJDMsIEAzLCAiXG4iKTsKICAgICB9CiB8ICcoJyBlcnJvciAnKScKICAgICB7CiAgICAgICAkJCA9IC0xOwotICAgICAgcHJpbnRmICgibGluZSAoJWRAJWQtJWQpOiAnKCcgKCVkQCVkLSVkKSBlcnJvciAoQCVkLSVkKSAnKScgKCVkQCVkLSVkKVxuIiwKLSAgICAgICAgICAgICAgJCQsIFJBTkdFIChAJCksICQxLCBSQU5HRSAoQDEpLCBSQU5HRSAoQDIpLCAkMywgUkFOR0UgKEAzKSk7CisgICAgICBWKGxpbmUsICAkJCwgQCQsICI6ICIpOworICAgICAgVignKCcsICAgJDEsIEAxLCAiICIpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiZXJyb3IgKEAlZC0lZCkgIiwgUkFOR0UgKEAyKSk7CisgICAgICBWKCcpJywgICAkMywgQDMsICJcbiIpOwogICAgIH0KIDsKIApAQCAtODUyMCw0MCArNDMxMDYsMzkgQEAKICAgJ3gnCiAgICAgewogICAgICAgJCQgPSAkMTsKLSAgICAgIHByaW50ZiAoInRoaW5nICglZEAlZC0lZCk6ICd4JyAoJWRAJWQtJWQpXG4iLAotICAgICAgICAgICAgICAkJCwgUkFOR0UgKEAkKSwgJDEsIFJBTkdFIChAMSkpOworICAgICAgVih0aGluZywgJCQsIEAkLCAiOiAiKTsKKyAgICAgIFYoJ3gnLCAgICQxLCBAMSwgIlxuIik7CiAgICAgfQogOwogJSUKIC8qIEFsaWFzIHRvIEFSR1ZbMV0uICovCi1jb25zdCBjaGFyICpzb3VyY2UgPSAwOworY29uc3QgY2hhciAqc291cmNlID0gWVlfTlVMTDsKIAotc3RhdGljIGludAoteXlsZXggKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCkKKy8qIEEgQysrIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCit2b2lkCit5eTo6cGFyc2VyOjplcnJvciAoY29uc3QgbG9jYXRpb25fdHlwZSYgbCwgY29uc3Qgc3RkOjpzdHJpbmcmIG0pCit7CisgICh2b2lkKSBsOworICBzdGQ6OmNlcnIgPDwgbCA8PCAiOiAiIDw8IG0gPDwgc3RkOjplbmRsOworfQorCitzdGF0aWMKK2ludCB5eWxleCAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKQogewogICBzdGF0aWMgdW5zaWduZWQgaW50IGNvdW50ZXIgPSAwOwogCiAgIGludCBjID0gKCpsdmFscCkuaXZhbCA9IGNvdW50ZXIrKzsKICAgLyogQXMgaW4gQkFTSUMsIGxpbmUgbnVtYmVycyBnbyBmcm9tIDEwIHRvIDEwLiAgKi8KLSAoKmxsb2NwKS5iZWdpbi5saW5lID0gKCpsbG9jcCkuYmVnaW4uY29sdW1uID0gMTAgKiBjOworICAoKmxsb2NwKS5iZWdpbi5saW5lID0gKCpsbG9jcCkuYmVnaW4uY29sdW1uID0gMTAgKiBjOwogICAoKmxsb2NwKS5lbmQubGluZSA9ICgqbGxvY3ApLmVuZC5jb2x1bW4gPSAoKmxsb2NwKS5iZWdpbi5saW5lICsgOTsKLQotCisgIGFzc2VydCAoMCA8PSBjICYmIGMgPD0gc3RybGVuIChzb3VyY2UpKTsKICAgaWYgKHNvdXJjZVtjXSkKLSAgICBwcmludGYgKCJzZW5kaW5nOiAnJWMnIiwgc291cmNlW2NdKTsKKyAgICBmcHJpbnRmIChzdGRlcnIsICJzZW5kaW5nOiAnJWMnIiwgc291cmNlW2NdKTsKICAgZWxzZQotICAgIHByaW50ZiAoInNlbmRpbmc6IEVPRiIpOwotICBwcmludGYgKCIgKCVkQCVkLSVkKVxuIiwgYywgUkFOR0UgKCgqbGxvY3ApKSk7CisgICAgZnByaW50ZiAoc3RkZXJyLCAic2VuZGluZzogRU5EIik7CisgIGZwcmludGYgKHN0ZGVyciwgIiAoJWRAJWQtJWQpXG4iLCBjLCBSQU5HRSAoKCpsbG9jcCkpKTsKICAgcmV0dXJuIHNvdXJjZVtjXTsKIH0KLQotLyogQSBDKysgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAqLwotdm9pZAoteXk6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGxvY2F0aW9uJiBsLCBjb25zdCBzdGQ6OnN0cmluZyYgbSkKLXsKLSAgcHJpbnRmICgiJWQtJWQ6ICVzXG4iLCBSQU5HRSAobCksIG0uY19zdHIoKSk7Ci19Ci0KIHN0YXRpYyBib29sIHl5ZGVidWc7CiBpbnQKIHl5cGFyc2UgKCkKQEAgLTg1NzQsOSArNDMxNTksOSBAQAogICBzdGF0dXMgPSB5eXBhcnNlICgpOwogICBzd2l0Y2ggKHN0YXR1cykKICAgICB7Ci0gICAgICBjYXNlIDA6IHByaW50ZiAoIlN1Y2Nlc3NmdWwgcGFyc2UuXG4iKTsgYnJlYWs7Ci0gICAgICBjYXNlIDE6IHByaW50ZiAoIlBhcnNpbmcgRkFJTEVELlxuIik7IGJyZWFrOwotICAgICAgZGVmYXVsdDogcHJpbnRmICgiUGFyc2luZyBGQUlMRUQgKHN0YXR1cyAlZCkuXG4iLCBzdGF0dXMpOyBicmVhazsKKyAgICAgIGNhc2UgMDogZnByaW50ZiAoc3RkZXJyLCAiU3VjY2Vzc2Z1bCBwYXJzZS5cbiIpOyBicmVhazsKKyAgICAgIGNhc2UgMTogZnByaW50ZiAoc3RkZXJyLCAiUGFyc2luZyBGQUlMRUQuXG4iKTsgYnJlYWs7CisgICAgICBkZWZhdWx0OiBmcHJpbnRmIChzdGRlcnIsICJQYXJzaW5nIEZBSUxFRCAoc3RhdHVzICVkKS5cbiIsIHN0YXR1cyk7IGJyZWFrOwogICAgIH0KICAgcmV0dXJuIHN0YXR1czsKIH0KQEAgLTg1ODQsODEgKzQzMTY5LDExOSBAQAogCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJhY3Rpb25zLmF0OjUzNDogYmlzb24gLW8gaW5wdXQuY2MgaW5wdXQueSIKLWVjaG8gYWN0aW9ucy5hdDo1MzQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGlucHV0LmNjIGlucHV0LnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiYWN0aW9ucy5hdDo1MzQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiYWN0aW9ucy5hdDo3NTUiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuY2MgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzU1OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkiICJhY3Rpb25zLmF0Ojc1NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6NzU1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzU1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTU6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0Ojc1NSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzU1OiBiaXNvbiAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDo3NTUiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuY2MgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJhY3Rpb25zLmF0OjUzNDogXCRCSVNPTl9DWFhfV09SS1MiCi1lY2hvIGFjdGlvbnMuYXQ6NTM0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQklTT05fQ1hYX1dPUktTICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImFjdGlvbnMuYXQ6NTM0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NTogXCRCSVNPTl9DWFhfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DWFhfV09SS1MiICJhY3Rpb25zLmF0Ojc1NSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ1hYX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTU6IFwkQ1hYIFwkQ1hYRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuY2MgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuY2MgJExJQlMiICJhY3Rpb25zLmF0Ojc1NSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuY2MgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzU1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJhY3Rpb25zLmF0OjUzNDogXCRDWFggXCRDWFhGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyBcJExJQlMiCi1lY2hvIGFjdGlvbnMuYXQ6NTM0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuY2MgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiYWN0aW9ucy5hdDo1MzQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgogCiAKIApAQCAtODY2Nyw0MCArNDMyOTAsNDQgQEAKICMgSS5lLiwgZXBzaWxvbi1yZWR1Y3Rpb25zLCBhcyBpbiAiKHgpIiB3aGljaCBlbmRzIGJ5IHJlZHVjaW5nCiAjIGFuIGVtcHR5ICJsaW5lIiBudGVybS4KICMgRklYTUU6IFRoaXMgbG9jYXRpb24gaXMgbm90IHNhdGlzZnlpbmcuICBEZXBlbmQgb24gdGhlIGxvb2thaGVhZD8KLSRhdF90cmFjZW9mZgotZWNobyAiYWN0aW9ucy5hdDo1MzQ6IFwkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KSciCi1lY2hvIGFjdGlvbnMuYXQ6NTM0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KScgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gInNlbmRpbmc6ICcoJyAoMEAwLTkpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTU6ICBcJFBSRVBBUlNFUiAuL2lucHV0ICcoeCknIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0ICcoeCknIiAiYWN0aW9ucy5hdDo3NTUiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCAnKHgpJworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDo3NTUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzZW5kaW5nOiAnKCcgKDBAMC05KQogc2VuZGluZzogJ3gnICgxQDEwLTE5KQogdGhpbmcgKDFAMTAtMTkpOiAneCcgKDFAMTAtMTkpCiBzZW5kaW5nOiAnKScgKDJAMjAtMjkpCiBsaW5lICgwQDAtMjkpOiAnKCcgKDBAMC05KSB0aGluZyAoMUAxMC0xOSkgJyknICgyQDIwLTI5KQotc2VuZGluZzogRU9GICgzQDMwLTM5KQorc2VuZGluZzogRU5EICgzQDMwLTM5KQogaW5wdXQgKDBAMjktMjkpOiAvKiBOb3RoaW5nICovCiBpbnB1dCAoMkAwLTI5KTogbGluZSAoMEAwLTI5KSBpbnB1dCAoMEAyOS0yOSkKK0ZyZWVpbmcgdG9rZW4gRU5EICgzQDMwLTM5KQogRnJlZWluZyBudGVybSBpbnB1dCAoMkAwLTI5KQogU3VjY2Vzc2Z1bCBwYXJzZS4KLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImFjdGlvbnMuYXQ6NTM0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KIAogCiAKQEAgLTg3MDgsNDEgKzQzMzM1LDQ1IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyAnKHkpJyBpcyBhbiBlcnJvciwgYnV0IGNhbiBiZSByZWNvdmVyZWQgZnJvbS4gIEJ1dCB3aGF0J3MgdGhlIGxvY2F0aW9uCiAjIG9mIHRoZSBlcnJvciBpdHNlbGYgKCd5JyksIGFuZCBvZiB0aGUgcmVzdWx0aW5nIHJlZHVjdGlvbiAoJyhlcnJvciknKS4KLSRhdF90cmFjZW9mZgotZWNobyAiYWN0aW9ucy5hdDo1MzQ6IFwkUFJFUEFSU0VSIC4vaW5wdXQgJyh5KSciCi1lY2hvIGFjdGlvbnMuYXQ6NTM0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vaW5wdXQgJyh5KScgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gInNlbmRpbmc6ICcoJyAoMEAwLTkpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTU6ICBcJFBSRVBBUlNFUiAuL2lucHV0ICcoeSknIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0ICcoeSknIiAiYWN0aW9ucy5hdDo3NTUiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCAnKHkpJworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDo3NTUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzZW5kaW5nOiAnKCcgKDBAMC05KQogc2VuZGluZzogJ3knICgxQDEwLTE5KQotMTAtMTk6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAneScsIGV4cGVjdGluZyAneCcKKzEwLjEwLTE5LjE4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ3knLCBleHBlY3RpbmcgJ3gnCiBGcmVlaW5nIHRva2VuICd5JyAoMUAxMC0xOSkKIHNlbmRpbmc6ICcpJyAoMkAyMC0yOSkKIGxpbmUgKC0xQDAtMjkpOiAnKCcgKDBAMC05KSBlcnJvciAoQDEwLTE5KSAnKScgKDJAMjAtMjkpCi1zZW5kaW5nOiBFT0YgKDNAMzAtMzkpCitzZW5kaW5nOiBFTkQgKDNAMzAtMzkpCiBpbnB1dCAoMEAyOS0yOSk6IC8qIE5vdGhpbmcgKi8KIGlucHV0ICgyQDAtMjkpOiBsaW5lICgtMUAwLTI5KSBpbnB1dCAoMEAyOS0yOSkKK0ZyZWVpbmcgdG9rZW4gRU5EICgzQDMwLTM5KQogRnJlZWluZyBudGVybSBpbnB1dCAoMkAwLTI5KQogU3VjY2Vzc2Z1bCBwYXJzZS4KLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImFjdGlvbnMuYXQ6NTM0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KIAogCiAKQEAgLTg3NjAsMjIgKzQzMzkxLDMzIEBACiAjICAgICAnKCcsICd4JywgJyknLAogIyAgICAgJygnLCAneCcsICcpJywKICMgICAgICd5JwotJGF0X3RyYWNlb2ZmCi1lY2hvICJhY3Rpb25zLmF0OjUzNDogXCRQUkVQQVJTRVIgLi9pbnB1dCAnKHh4eHh4KSh4KSh4KXknIgotZWNobyBhY3Rpb25zLmF0OjUzNCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2lucHV0ICcoeHh4eHgpKHgpKHgpeScgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gInNlbmRpbmc6ICcoJyAoMEAwLTkpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTU6ICBcJFBSRVBBUlNFUiAuL2lucHV0ICcoeHh4eHgpKHgpKHgpeSciCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQgJyh4eHh4eCkoeCkoeCl5JyIgImFjdGlvbnMuYXQ6NzU1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQgJyh4eHh4eCkoeCkoeCl5JworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDo3NTUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzZW5kaW5nOiAnKCcgKDBAMC05KQogc2VuZGluZzogJ3gnICgxQDEwLTE5KQogdGhpbmcgKDFAMTAtMTkpOiAneCcgKDFAMTAtMTkpCiBzZW5kaW5nOiAneCcgKDJAMjAtMjkpCiB0aGluZyAoMkAyMC0yOSk6ICd4JyAoMkAyMC0yOSkKIHNlbmRpbmc6ICd4JyAoM0AzMC0zOSkKLTMwLTM5OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ3gnLCBleHBlY3RpbmcgJyknCiszMC4zMC0zOS4zODogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICd4JywgZXhwZWN0aW5nICcpJwogRnJlZWluZyBudGVybSB0aGluZyAoMkAyMC0yOSkKIEZyZWVpbmcgbnRlcm0gdGhpbmcgKDFAMTAtMTkpCiBGcmVlaW5nIHRva2VuICd4JyAoM0AzMC0zOSkKQEAgLTg4MDAsMjUgKzQzNDQyLDc2IEBACiBpbnB1dCAoMkAxMDAtMTI5KTogbGluZSAoMTBAMTAwLTEyOSkgaW5wdXQgKDBAMTI5LTEyOSkKIGlucHV0ICgyQDcwLTEyOSk6IGxpbmUgKDdANzAtOTkpIGlucHV0ICgyQDEwMC0xMjkpCiBpbnB1dCAoMkAwLTEyOSk6IGxpbmUgKC0xQDAtNjkpIGlucHV0ICgyQDcwLTEyOSkKLTEzMC0xMzk6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAneScsIGV4cGVjdGluZyBcJGVuZAorMTMwLjEzMC0xMzkuMTM4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ3knLCBleHBlY3RpbmcgRU5ECiBGcmVlaW5nIG50ZXJtIGlucHV0ICgyQDAtMTI5KQogRnJlZWluZyB0b2tlbiAneScgKDEzQDEzMC0xMzkpCiBQYXJzaW5nIEZBSUxFRC4KLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImFjdGlvbnMuYXQ6NTM0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKIAotJGF0X3RyYWNlb24KKworCisjIFN5bnRheCBlcnJvciBjYXVnaHQgYnkgdGhlIHBhcnNlciB3aGVyZSBsb29rYWhlYWQgPSBFTkQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTG9hZCB0aGUgc3RhY2sgYW5kIHByb3Zva2UgYW4gZXJyb3IgdGhhdCBjYW5ub3QgYmUgY2F1Z2h0IGJ5IHRoZQorIyBncmFtbWFyLCB0byBjaGVjayB0aGF0IHRoZSBzdGFjayBpcyBjbGVhcmVkLiAgQW5kIG1ha2Ugc3VyZSB0aGUKKyMgbG9va2FoZWFkIGlzIGZyZWVkLgorIworIyAgICAgJygnLCAneCcsICcpJywKKyMgICAgICcoJywgJ3gnLCAnKScsCisjICAgICAneCcKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NTogIFwkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KSh4KXgnIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0ICcoeCkoeCl4JyIgImFjdGlvbnMuYXQ6NzU1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KSh4KXgnCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0Ojc1NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInNlbmRpbmc6ICcoJyAoMEAwLTkpCitzZW5kaW5nOiAneCcgKDFAMTAtMTkpCit0aGluZyAoMUAxMC0xOSk6ICd4JyAoMUAxMC0xOSkKK3NlbmRpbmc6ICcpJyAoMkAyMC0yOSkKK2xpbmUgKDBAMC0yOSk6ICcoJyAoMEAwLTkpIHRoaW5nICgxQDEwLTE5KSAnKScgKDJAMjAtMjkpCitzZW5kaW5nOiAnKCcgKDNAMzAtMzkpCitzZW5kaW5nOiAneCcgKDRANDAtNDkpCit0aGluZyAoNEA0MC00OSk6ICd4JyAoNEA0MC00OSkKK3NlbmRpbmc6ICcpJyAoNUA1MC01OSkKK2xpbmUgKDNAMzAtNTkpOiAnKCcgKDNAMzAtMzkpIHRoaW5nICg0QDQwLTQ5KSAnKScgKDVANTAtNTkpCitzZW5kaW5nOiAneCcgKDZANjAtNjkpCit0aGluZyAoNkA2MC02OSk6ICd4JyAoNkA2MC02OSkKK3NlbmRpbmc6IEVORCAoN0A3MC03OSkKKzcwLjcwLTc5Ljc4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgRU5ELCBleHBlY3RpbmcgJ3gnCitGcmVlaW5nIG50ZXJtIHRoaW5nICg2QDYwLTY5KQorRnJlZWluZyBudGVybSBsaW5lICgzQDMwLTU5KQorRnJlZWluZyBudGVybSBsaW5lICgwQDAtMjkpCitGcmVlaW5nIHRva2VuIEVORCAoN0A3MC03OSkKK1BhcnNpbmcgRkFJTEVELgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKIAogCiAjIENoZWNrIGRlc3RydWN0aW9uIHVwb24gc3RhY2sgb3ZlcmZsb3cKQEAgLTg4MjksMjAgKzQzNTIyLDE5IEBACiAKIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKIAotICA1NiApICMgNTYuIGFjdGlvbnMuYXQ6NTM2OiBQcmludGVycyBhbmQgRGVzdHJ1Y3RvcnMgOiAlZ2xyLXBhcnNlcgotICAgIGF0X3NldHVwX2xpbmU9J2FjdGlvbnMuYXQ6NTM2JwotICAgIGF0X2Rlc2M9J1ByaW50ZXJzIGFuZCBEZXN0cnVjdG9ycyA6ICVnbHItcGFyc2VyJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgNTY6IFByaW50ZXJzIGFuZCBEZXN0cnVjdG9ycyA6ICVnbHItcGFyc2VyICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICI1Ni4gYWN0aW9ucy5hdDo1MzY6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTYyCisjQVRfU1RBUlRfMTYzCithdF9mbl9ncm91cF9iYW5uZXIgMTYzICdhY3Rpb25zLmF0Ojc1NycgXAorICAiUHJpbnRlcnMgYW5kIERlc3RydWN0b3JzOiAlZ2xyLXBhcnNlciIgIiAgICAgICAgICAiIDkKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxNjMuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiAKQEAgLTg4NTEsNTYgKzQzNTQzLDI5IEBACiAjIEJlIHN1cmUgdG8gcGFzcyBhbGwgdGhlICVkaXJlY3RpdmVzIHRvIHRoaXMgbWFjcm8gdG8gaGF2ZSBjb3JyZWN0CiAjIGhlbHBpbmcgbWFjcm9zLiAgU28gZG9uJ3QgcHV0IGFueSBkaXJlY3RseSBpbiB0aGUgQmlzb24gZmlsZS4KIAotCi0KLQotIyBVc2luZyB5YWNjLmM/Ci0KLQotCi0KLQotCi0KLSMgeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWYgJWxvY2F0aW9uICYgJXB1cmUgJiAoJWdsciBvciAlcGFyc2UtcGFyYW0pLgotCi0jIHl5ZXJyb3IgYWx3YXlzIHNlZXMgdGhlIGxvY2F0aW9ucyAod2hlbiBhY3RpdmF0ZWQpLCBleGNlcHQgaWYKLSMgeWFjYyAmIHB1cmUgJiAhcGFyYW0uCi0KLQotIyBUaGUgaW50ZXJmYWNlIGlzIHB1cmU6IGVpdGhlciBiZWNhdXNlICVwdXJlLXBhcnNlciwgb3IgYmVjYXVzZSB3ZQotIyBhcmUgdXNpbmcgdGhlIEMrKyBwYXJzZXJzLgotCi0KLQotCi0KLQotCi0KLQotCi0KIGNhdCA+aW5wdXQueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKLSV7CislY29kZSByZXF1aXJlcyB7CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxhc3NlcnQuaD4KIAogI2RlZmluZSBZWUlOSVRERVBUSCAxMAogI2RlZmluZSBZWU1BWERFUFRIIDEwCiAjZGVmaW5lIFJBTkdFKExvY2F0aW9uKSAoTG9jYXRpb24pLmZpcnN0X2xpbmUsIChMb2NhdGlvbikubGFzdF9saW5lCi0lfQorCisvKiBEaXNwbGF5IHRoZSBzeW1ib2wgdHlwZSBTeW1ib2wuICAqLworI2RlZmluZSBWKFN5bWJvbCwgVmFsdWUsIExvY2F0aW9uLCBTZXApIFwKKyAgIGZwcmludGYgKHN0ZGVyciwgI1N5bWJvbCAiICglZEAlZC0lZCkiIFNlcCwgVmFsdWUsIFJBTkdFKExvY2F0aW9uKSkKK30KIAogJWVycm9yLXZlcmJvc2UKICVkZWJ1ZwpAQCAtODkwOSwxNSArNDM1NzQsMTUgQEAKICVnbHItcGFyc2VyCiAKIAotCi0leworJWNvZGUgewogCiBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKLXN0YXRpYyB2b2lkIHl5ZXJyb3IgKGNvbnN0IGNoYXIgKm1zZyk7Ci0lfQorc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7Cit9CiAKIAogCisvKiBGSVhNRTogVGhpcyAlcHJpbnRlciBpc24ndCBhY3R1YWxseSB0ZXN0ZWQuICAqLwogJXByaW50ZXIKICAgewogICAgIGZwcmludGYgKHl5b3V0cHV0LCAiJWQiLCAkJCk7CkBAIC04OTI1LDI1ICs0MzU5MCwzMCBAQAogICBpbnB1dCBsaW5lIHRoaW5nICd4JyAneScKIAogJWRlc3RydWN0b3IKLSAgeyBwcmludGYgKCJGcmVlaW5nIG50ZXJtIGlucHV0ICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQorICB7IGZwcmludGYgKHN0ZGVyciwgIkZyZWVpbmcgbnRlcm0gaW5wdXQgKCVkQCVkLSVkKVxuIiwgJCQsIFJBTkdFIChAJCkpOyB9CiAgIGlucHV0CiAKICVkZXN0cnVjdG9yCi0gIHsgcHJpbnRmICgiRnJlZWluZyBudGVybSBsaW5lICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQorICB7IGZwcmludGYgKHN0ZGVyciwgIkZyZWVpbmcgbnRlcm0gbGluZSAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KICAgbGluZQogCiAlZGVzdHJ1Y3RvcgotICB7IHByaW50ZiAoIkZyZWVpbmcgbnRlcm0gdGhpbmcgKCVkQCVkLSVkKVxuIiwgJCQsIFJBTkdFIChAJCkpOyB9CisgIHsgZnByaW50ZiAoc3RkZXJyLCAiRnJlZWluZyBudGVybSB0aGluZyAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KICAgdGhpbmcKIAogJWRlc3RydWN0b3IKLSAgeyBwcmludGYgKCJGcmVlaW5nIHRva2VuICd4JyAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KKyAgeyBmcHJpbnRmIChzdGRlcnIsICJGcmVlaW5nIHRva2VuICd4JyAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KICAgJ3gnCiAKICVkZXN0cnVjdG9yCi0gIHsgcHJpbnRmICgiRnJlZWluZyB0b2tlbiAneScgKCVkQCVkLSVkKVxuIiwgJCQsIFJBTkdFIChAJCkpOyB9CisgIHsgZnByaW50ZiAoc3RkZXJyLCAiRnJlZWluZyB0b2tlbiAneScgKCVkQCVkLSVkKVxuIiwgJCQsIFJBTkdFIChAJCkpOyB9CiAgICd5JwogCisldG9rZW4gRU5EIDAKKyVkZXN0cnVjdG9yCisgIHsgZnByaW50ZiAoc3RkZXJyLCAiRnJlZWluZyB0b2tlbiBFTkQgKCVkQCVkLSVkKVxuIiwgJCQsIFJBTkdFIChAJCkpOyB9CisgIEVORAorCiAlJQogLyoKICAgIFRoaXMgZ3JhbW1hciBpcyBtYWRlIHRvIGV4ZXJjaXNlIGVycm9yIHJlY292ZXJ5LgpAQCAtODk1NiwxNCArNDM2MjYsMTUgQEAKICAgLyogTm90aGluZy4gKi8KICAgICB7CiAgICAgICAkJCA9IDA7Ci0gICAgICBwcmludGYgKCJpbnB1dCAoJWRAJWQtJWQpOiAvKiBOb3RoaW5nICovXG4iLCAkJCwgUkFOR0UgKEAkKSk7CisgICAgICBWKGlucHV0LCAkJCwgQCQsICI6IC8qIE5vdGhpbmcgKi9cbiIpOwogICAgIH0KIHwgbGluZSBpbnB1dCAvKiBSaWdodCByZWN1cnNpdmUgdG8gbG9hZCB0aGUgc3RhY2sgc28gdGhhdCBwb3BwaW5nIGF0Ci0JCUVPRiBjYW4JYmUgZXhlcmNpc2VkLiAgKi8KKyAgICAgICAgICAgICAgICBFTkQgY2FuIGJlIGV4ZXJjaXNlZC4gICovCiAgICAgewogICAgICAgJCQgPSAyOwotICAgICAgcHJpbnRmICgiaW5wdXQgKCVkQCVkLSVkKTogbGluZSAoJWRAJWQtJWQpIGlucHV0ICglZEAlZC0lZClcbiIsCi0JICAgICAgJCQsIFJBTkdFIChAJCksICQxLCBSQU5HRSAoQDEpLCAkMiwgUkFOR0UgKEAyKSk7CisgICAgICBWKGlucHV0LCAkJCwgQCQsICI6ICIpOworICAgICAgVihsaW5lLCAgJDEsIEAxLCAiICIpOworICAgICAgVihpbnB1dCwgJDIsIEAyLCAiXG4iKTsKICAgICB9CiA7CiAKQEAgLTg5NzEsMjggKzQzNjQyLDM2IEBACiAgIHRoaW5nIHRoaW5nIHRoaW5nICc7JwogICAgIHsKICAgICAgICQkID0gJDE7Ci0gICAgICBwcmludGYgKCJsaW5lICglZEAlZC0lZCk6IHRoaW5nICglZEAlZC0lZCkgdGhpbmcgKCVkQCVkLSVkKSB0aGluZyAoJWRAJWQtJWQpICc7JyAoJWRAJWQtJWQpXG4iLAotICAgICAgICAgICAgICAkJCwgUkFOR0UgKEAkKSwgJDEsIFJBTkdFIChAMSksICQyLCBSQU5HRSAoQDIpLAotICAgICAgICAgICAgICAkMywgUkFOR0UgKEAzKSwgJDQsIFJBTkdFIChANCkpOworICAgICAgVihsaW5lLCAgJCQsIEAkLCAiOiAiKTsKKyAgICAgIFYodGhpbmcsICQxLCBAMSwgIiAiKTsKKyAgICAgIFYodGhpbmcsICQyLCBAMiwgIiAiKTsKKyAgICAgIFYodGhpbmcsICQzLCBAMywgIiAiKTsKKyAgICAgIFYoOywgICAgICQ0LCBANCwgIlxuIik7CiAgICAgfQogfCAnKCcgdGhpbmcgdGhpbmcgJyknCiAgICAgewogICAgICAgJCQgPSAkMTsKLSAgICAgIHByaW50ZiAoImxpbmUgKCVkQCVkLSVkKTogJygnICglZEAlZC0lZCkgdGhpbmcgKCVkQCVkLSVkKSB0aGluZyAoJWRAJWQtJWQpICcpJyAoJWRAJWQtJWQpXG4iLAotICAgICAgICAgICAgICAkJCwgUkFOR0UgKEAkKSwgJDEsIFJBTkdFIChAMSksICQyLCBSQU5HRSAoQDIpLAotICAgICAgICAgICAgICAkMywgUkFOR0UgKEAzKSwgJDQsIFJBTkdFIChANCkpOworICAgICAgVihsaW5lLCAgJCQsIEAkLCAiOiAiKTsKKyAgICAgIFYoJygnLCAgICQxLCBAMSwgIiAiKTsKKyAgICAgIFYodGhpbmcsICQyLCBAMiwgIiAiKTsKKyAgICAgIFYodGhpbmcsICQzLCBAMywgIiAiKTsKKyAgICAgIFYoJyknLCAgICQ0LCBANCwgIlxuIik7CiAgICAgfQogfCAnKCcgdGhpbmcgJyknCiAgICAgewogICAgICAgJCQgPSAkMTsKLSAgICAgIHByaW50ZiAoImxpbmUgKCVkQCVkLSVkKTogJygnICglZEAlZC0lZCkgdGhpbmcgKCVkQCVkLSVkKSAnKScgKCVkQCVkLSVkKVxuIiwKLSAgICAgICAgICAgICAgJCQsIFJBTkdFIChAJCksICQxLCBSQU5HRSAoQDEpLCAkMiwgUkFOR0UgKEAyKSwgJDMsIFJBTkdFIChAMykpOworICAgICAgVihsaW5lLCAgJCQsIEAkLCAiOiAiKTsKKyAgICAgIFYoJygnLCAgICQxLCBAMSwgIiAiKTsKKyAgICAgIFYodGhpbmcsICQyLCBAMiwgIiAiKTsKKyAgICAgIFYoJyknLCAgICQzLCBAMywgIlxuIik7CiAgICAgfQogfCAnKCcgZXJyb3IgJyknCiAgICAgewogICAgICAgJCQgPSAtMTsKLSAgICAgIHByaW50ZiAoImxpbmUgKCVkQCVkLSVkKTogJygnICglZEAlZC0lZCkgZXJyb3IgKEAlZC0lZCkgJyknICglZEAlZC0lZClcbiIsCi0gICAgICAgICAgICAgICQkLCBSQU5HRSAoQCQpLCAkMSwgUkFOR0UgKEAxKSwgUkFOR0UgKEAyKSwgJDMsIFJBTkdFIChAMykpOworICAgICAgVihsaW5lLCAgJCQsIEAkLCAiOiAiKTsKKyAgICAgIFYoJygnLCAgICQxLCBAMSwgIiAiKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImVycm9yIChAJWQtJWQpICIsIFJBTkdFIChAMikpOworICAgICAgVignKScsICAgJDMsIEAzLCAiXG4iKTsKICAgICB9CiA7CiAKQEAgLTkwMDAsMzggKzQzNjc5LDQyIEBACiAgICd4JwogICAgIHsKICAgICAgICQkID0gJDE7Ci0gICAgICBwcmludGYgKCJ0aGluZyAoJWRAJWQtJWQpOiAneCcgKCVkQCVkLSVkKVxuIiwKLSAgICAgICAgICAgICAgJCQsIFJBTkdFIChAJCksICQxLCBSQU5HRSAoQDEpKTsKKyAgICAgIFYodGhpbmcsICQkLCBAJCwgIjogIik7CisgICAgICBWKCd4JywgICAkMSwgQDEsICJcbiIpOwogICAgIH0KIDsKICUlCiAvKiBBbGlhcyB0byBBUkdWWzFdLiAqLwotY29uc3QgY2hhciAqc291cmNlID0gMDsKK2NvbnN0IGNoYXIgKnNvdXJjZSA9IFlZX05VTEw7CiAKLXN0YXRpYyBpbnQKLXl5bGV4ICh2b2lkKQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBZWV9MT0NBVElPTl9QUklOVCAoc3RkZXJyLCAoeXlsbG9jKSk7CisgIGZwcmludGYgKHN0ZGVyciwgIjogIik7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorCitzdGF0aWMKK2ludCB5eWxleCAodm9pZCkKIHsKICAgc3RhdGljIHVuc2lnbmVkIGludCBjb3VudGVyID0gMDsKIAogICBpbnQgYyA9ICh5eWx2YWwpID0gY291bnRlcisrOwogICAvKiBBcyBpbiBCQVNJQywgbGluZSBudW1iZXJzIGdvIGZyb20gMTAgdG8gMTAuICAqLwotICh5eWxsb2MpLmZpcnN0X2xpbmUgPSAoeXlsbG9jKS5maXJzdF9jb2x1bW4gPSAxMCAqIGM7CisgICh5eWxsb2MpLmZpcnN0X2xpbmUgPSAoeXlsbG9jKS5maXJzdF9jb2x1bW4gPSAxMCAqIGM7CiAgICh5eWxsb2MpLmxhc3RfbGluZSA9ICh5eWxsb2MpLmxhc3RfY29sdW1uID0gKHl5bGxvYykuZmlyc3RfbGluZSArIDk7Ci0KLQorICBhc3NlcnQgKDAgPD0gYyAmJiBjIDw9IHN0cmxlbiAoc291cmNlKSk7CiAgIGlmIChzb3VyY2VbY10pCi0gICAgcHJpbnRmICgic2VuZGluZzogJyVjJyIsIHNvdXJjZVtjXSk7CisgICAgZnByaW50ZiAoc3RkZXJyLCAic2VuZGluZzogJyVjJyIsIHNvdXJjZVtjXSk7CiAgIGVsc2UKLSAgICBwcmludGYgKCJzZW5kaW5nOiBFT0YiKTsKLSAgcHJpbnRmICgiICglZEAlZC0lZClcbiIsIGMsIFJBTkdFICgoeXlsbG9jKSkpOworICAgIGZwcmludGYgKHN0ZGVyciwgInNlbmRpbmc6IEVORCIpOworICBmcHJpbnRmIChzdGRlcnIsICIgKCVkQCVkLSVkKVxuIiwgYywgUkFOR0UgKCh5eWxsb2MpKSk7CiAgIHJldHVybiBzb3VyY2VbY107CiB9CiAKLXN0YXRpYyB2b2lkCi15eWVycm9yIChjb25zdCBjaGFyICptc2cpCi17Ci0gIHByaW50ZiAoIiVkLSVkOiAlc1xuIiwgUkFOR0UgKHl5bGxvYyksIG1zZyk7Ci19CiAKIGludAogbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKQEAgLTkwNDMsOSArNDM3MjYsOSBAQAogICBzdGF0dXMgPSB5eXBhcnNlICgpOwogICBzd2l0Y2ggKHN0YXR1cykKICAgICB7Ci0gICAgICBjYXNlIDA6IHByaW50ZiAoIlN1Y2Nlc3NmdWwgcGFyc2UuXG4iKTsgYnJlYWs7Ci0gICAgICBjYXNlIDE6IHByaW50ZiAoIlBhcnNpbmcgRkFJTEVELlxuIik7IGJyZWFrOwotICAgICAgZGVmYXVsdDogcHJpbnRmICgiUGFyc2luZyBGQUlMRUQgKHN0YXR1cyAlZCkuXG4iLCBzdGF0dXMpOyBicmVhazsKKyAgICAgIGNhc2UgMDogZnByaW50ZiAoc3RkZXJyLCAiU3VjY2Vzc2Z1bCBwYXJzZS5cbiIpOyBicmVhazsKKyAgICAgIGNhc2UgMTogZnByaW50ZiAoc3RkZXJyLCAiUGFyc2luZyBGQUlMRUQuXG4iKTsgYnJlYWs7CisgICAgICBkZWZhdWx0OiBmcHJpbnRmIChzdGRlcnIsICJQYXJzaW5nIEZBSUxFRCAoc3RhdHVzICVkKS5cbiIsIHN0YXR1cyk7IGJyZWFrOwogICAgIH0KICAgcmV0dXJuIHN0YXR1czsKIH0KQEAgLTkwNTMsNTUgKzQzNzM2LDExOCBAQAogCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJhY3Rpb25zLmF0OjUzNjogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgotZWNobyBhY3Rpb25zLmF0OjUzNiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImFjdGlvbnMuYXQ6NTM2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzU3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiYWN0aW9ucy5hdDo3NTciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiICJhY3Rpb25zLmF0Ojc1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzU3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYWN0aW9ucy5hdDo3NTciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6NzU3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTc6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6NzU3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSAgICRhdF90cmFjZW9mZgotZWNobyAiYWN0aW9ucy5hdDo1MzY6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCi1lY2hvIGFjdGlvbnMuYXQ6NTM2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJhY3Rpb25zLmF0OjUzNjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgorICAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzU3OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiYWN0aW9ucy5hdDo3NTciCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzU3OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyIgImFjdGlvbnMuYXQ6NzU3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogCkBAIC05MTEwLDQwICs0Mzg1Niw0NCBAQAogIyBJLmUuLCBlcHNpbG9uLXJlZHVjdGlvbnMsIGFzIGluICIoeCkiIHdoaWNoIGVuZHMgYnkgcmVkdWNpbmcKICMgYW4gZW1wdHkgImxpbmUiIG50ZXJtLgogIyBGSVhNRTogVGhpcyBsb2NhdGlvbiBpcyBub3Qgc2F0aXNmeWluZy4gIERlcGVuZCBvbiB0aGUgbG9va2FoZWFkPwotJGF0X3RyYWNlb2ZmCi1lY2hvICJhY3Rpb25zLmF0OjUzNjogXCRQUkVQQVJTRVIgLi9pbnB1dCAnKHgpJyIKLWVjaG8gYWN0aW9ucy5hdDo1MzYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9pbnB1dCAnKHgpJyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvID4+JGF0X3N0ZG91dDsgZWNobyAic2VuZGluZzogJygnICgwQDAtOSkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NzogIFwkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KSciCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KSciICJhY3Rpb25zLmF0Ojc1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0ICcoeCknCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1Nzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0Ojc1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInNlbmRpbmc6ICcoJyAoMEAwLTkpCiBzZW5kaW5nOiAneCcgKDFAMTAtMTkpCiB0aGluZyAoMUAxMC0xOSk6ICd4JyAoMUAxMC0xOSkKIHNlbmRpbmc6ICcpJyAoMkAyMC0yOSkKIGxpbmUgKDBAMC0yOSk6ICcoJyAoMEAwLTkpIHRoaW5nICgxQDEwLTE5KSAnKScgKDJAMjAtMjkpCi1zZW5kaW5nOiBFT0YgKDNAMzAtMzkpCitzZW5kaW5nOiBFTkQgKDNAMzAtMzkpCiBpbnB1dCAoMEAyOS0yOSk6IC8qIE5vdGhpbmcgKi8KIGlucHV0ICgyQDAtMjkpOiBsaW5lICgwQDAtMjkpIGlucHV0ICgwQDI5LTI5KQorRnJlZWluZyB0b2tlbiBFTkQgKDNAMzAtMzkpCiBGcmVlaW5nIG50ZXJtIGlucHV0ICgyQDAtMjkpCiBTdWNjZXNzZnVsIHBhcnNlLgotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiYWN0aW9ucy5hdDo1MzY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgogCiAKIApAQCAtOTE1MSw0MSArNDM5MDEsNDUgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjICcoeSknIGlzIGFuIGVycm9yLCBidXQgY2FuIGJlIHJlY292ZXJlZCBmcm9tLiAgQnV0IHdoYXQncyB0aGUgbG9jYXRpb24KICMgb2YgdGhlIGVycm9yIGl0c2VsZiAoJ3knKSwgYW5kIG9mIHRoZSByZXN1bHRpbmcgcmVkdWN0aW9uICgnKGVycm9yKScpLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJhY3Rpb25zLmF0OjUzNjogXCRQUkVQQVJTRVIgLi9pbnB1dCAnKHkpJyIKLWVjaG8gYWN0aW9ucy5hdDo1MzYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9pbnB1dCAnKHkpJyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvID4+JGF0X3N0ZG91dDsgZWNobyAic2VuZGluZzogJygnICgwQDAtOSkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NzogIFwkUFJFUEFSU0VSIC4vaW5wdXQgJyh5KSciCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQgJyh5KSciICJhY3Rpb25zLmF0Ojc1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0ICcoeSknCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1Nzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0Ojc1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInNlbmRpbmc6ICcoJyAoMEAwLTkpCiBzZW5kaW5nOiAneScgKDFAMTAtMTkpCi0xMC0xOTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICd5JywgZXhwZWN0aW5nICd4JworMTAuMTAtMTkuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAneScsIGV4cGVjdGluZyAneCcKIEZyZWVpbmcgdG9rZW4gJ3knICgxQDEwLTE5KQogc2VuZGluZzogJyknICgyQDIwLTI5KQogbGluZSAoLTFAMC0yOSk6ICcoJyAoMEAwLTkpIGVycm9yIChAMTAtMTkpICcpJyAoMkAyMC0yOSkKLXNlbmRpbmc6IEVPRiAoM0AzMC0zOSkKK3NlbmRpbmc6IEVORCAoM0AzMC0zOSkKIGlucHV0ICgwQDI5LTI5KTogLyogTm90aGluZyAqLwogaW5wdXQgKDJAMC0yOSk6IGxpbmUgKC0xQDAtMjkpIGlucHV0ICgwQDI5LTI5KQorRnJlZWluZyB0b2tlbiBFTkQgKDNAMzAtMzkpCiBGcmVlaW5nIG50ZXJtIGlucHV0ICgyQDAtMjkpCiBTdWNjZXNzZnVsIHBhcnNlLgotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiYWN0aW9ucy5hdDo1MzY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgogCiAKIApAQCAtOTIwMywyMiArNDM5NTcsMzMgQEAKICMgICAgICcoJywgJ3gnLCAnKScsCiAjICAgICAnKCcsICd4JywgJyknLAogIyAgICAgJ3knCi0kYXRfdHJhY2VvZmYKLWVjaG8gImFjdGlvbnMuYXQ6NTM2OiBcJFBSRVBBUlNFUiAuL2lucHV0ICcoeHh4eHgpKHgpKHgpeSciCi1lY2hvIGFjdGlvbnMuYXQ6NTM2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vaW5wdXQgJyh4eHh4eCkoeCkoeCl5JyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvID4+JGF0X3N0ZG91dDsgZWNobyAic2VuZGluZzogJygnICgwQDAtOSkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NzogIFwkUFJFUEFSU0VSIC4vaW5wdXQgJyh4eHh4eCkoeCkoeCl5JyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCAnKHh4eHh4KSh4KSh4KXknIiAiYWN0aW9ucy5hdDo3NTciCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCAnKHh4eHh4KSh4KSh4KXknCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1Nzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0Ojc1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInNlbmRpbmc6ICcoJyAoMEAwLTkpCiBzZW5kaW5nOiAneCcgKDFAMTAtMTkpCiB0aGluZyAoMUAxMC0xOSk6ICd4JyAoMUAxMC0xOSkKIHNlbmRpbmc6ICd4JyAoMkAyMC0yOSkKIHRoaW5nICgyQDIwLTI5KTogJ3gnICgyQDIwLTI5KQogc2VuZGluZzogJ3gnICgzQDMwLTM5KQotMzAtMzk6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAneCcsIGV4cGVjdGluZyAnKScKKzMwLjMwLTM5LjM4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ3gnLCBleHBlY3RpbmcgJyknCiBGcmVlaW5nIG50ZXJtIHRoaW5nICgyQDIwLTI5KQogRnJlZWluZyBudGVybSB0aGluZyAoMUAxMC0xOSkKIEZyZWVpbmcgdG9rZW4gJ3gnICgzQDMwLTM5KQpAQCAtOTI0MywyNSArNDQwMDgsNzYgQEAKIGlucHV0ICgyQDEwMC0xMjkpOiBsaW5lICgxMEAxMDAtMTI5KSBpbnB1dCAoMEAxMjktMTI5KQogaW5wdXQgKDJANzAtMTI5KTogbGluZSAoN0A3MC05OSkgaW5wdXQgKDJAMTAwLTEyOSkKIGlucHV0ICgyQDAtMTI5KTogbGluZSAoLTFAMC02OSkgaW5wdXQgKDJANzAtMTI5KQotMTMwLTEzOTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICd5JywgZXhwZWN0aW5nIFwkZW5kCisxMzAuMTMwLTEzOS4xMzg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAneScsIGV4cGVjdGluZyBFTkQKIEZyZWVpbmcgbnRlcm0gaW5wdXQgKDJAMC0xMjkpCiBGcmVlaW5nIHRva2VuICd5JyAoMTNAMTMwLTEzOSkKIFBhcnNpbmcgRkFJTEVELgotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiYWN0aW9ucy5hdDo1MzY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQogCi0kYXRfdHJhY2VvbgorCisKKyMgU3ludGF4IGVycm9yIGNhdWdodCBieSB0aGUgcGFyc2VyIHdoZXJlIGxvb2thaGVhZCA9IEVORAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMb2FkIHRoZSBzdGFjayBhbmQgcHJvdm9rZSBhbiBlcnJvciB0aGF0IGNhbm5vdCBiZSBjYXVnaHQgYnkgdGhlCisjIGdyYW1tYXIsIHRvIGNoZWNrIHRoYXQgdGhlIHN0YWNrIGlzIGNsZWFyZWQuICBBbmQgbWFrZSBzdXJlIHRoZQorIyBsb29rYWhlYWQgaXMgZnJlZWQuCisjCisjICAgICAnKCcsICd4JywgJyknLAorIyAgICAgJygnLCAneCcsICcpJywKKyMgICAgICd4JworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzU3OiAgXCRQUkVQQVJTRVIgLi9pbnB1dCAnKHgpKHgpeCciCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KSh4KXgnIiAiYWN0aW9ucy5hdDo3NTciCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCAnKHgpKHgpeCcKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzU3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6NzU3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAic2VuZGluZzogJygnICgwQDAtOSkKK3NlbmRpbmc6ICd4JyAoMUAxMC0xOSkKK3RoaW5nICgxQDEwLTE5KTogJ3gnICgxQDEwLTE5KQorc2VuZGluZzogJyknICgyQDIwLTI5KQorbGluZSAoMEAwLTI5KTogJygnICgwQDAtOSkgdGhpbmcgKDFAMTAtMTkpICcpJyAoMkAyMC0yOSkKK3NlbmRpbmc6ICcoJyAoM0AzMC0zOSkKK3NlbmRpbmc6ICd4JyAoNEA0MC00OSkKK3RoaW5nICg0QDQwLTQ5KTogJ3gnICg0QDQwLTQ5KQorc2VuZGluZzogJyknICg1QDUwLTU5KQorbGluZSAoM0AzMC01OSk6ICcoJyAoM0AzMC0zOSkgdGhpbmcgKDRANDAtNDkpICcpJyAoNUA1MC01OSkKK3NlbmRpbmc6ICd4JyAoNkA2MC02OSkKK3RoaW5nICg2QDYwLTY5KTogJ3gnICg2QDYwLTY5KQorc2VuZGluZzogRU5EICg3QDcwLTc5KQorNzAuNzAtNzkuNzg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBFTkQsIGV4cGVjdGluZyAneCcKK0ZyZWVpbmcgbnRlcm0gdGhpbmcgKDZANjAtNjkpCitGcmVlaW5nIG50ZXJtIGxpbmUgKDNAMzAtNTkpCitGcmVlaW5nIG50ZXJtIGxpbmUgKDBAMC0yOSkKK0ZyZWVpbmcgdG9rZW4gRU5EICg3QDcwLTc5KQorUGFyc2luZyBGQUlMRUQuCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKwogCiAKICMgQ2hlY2sgZGVzdHJ1Y3Rpb24gdXBvbiBzdGFjayBvdmVyZmxvdwpAQCAtOTI3MiwyMCArNDQwODgsMTkgQEAKIAogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwogCi0gIDU3ICkgIyA1Ny4gYWN0aW9ucy5hdDo1Mzc6IFByaW50ZXJzIGFuZCBEZXN0cnVjdG9ycyB3aXRoIHVuaW9uOiAlZ2xyLXBhcnNlcgotICAgIGF0X3NldHVwX2xpbmU9J2FjdGlvbnMuYXQ6NTM3JwotICAgIGF0X2Rlc2M9J1ByaW50ZXJzIGFuZCBEZXN0cnVjdG9ycyB3aXRoIHVuaW9uOiAlZ2xyLXBhcnNlcicKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDU3OiBQcmludGVycyBhbmQgRGVzdHJ1Y3RvcnMgd2l0aCB1bmlvbjogJWdsci1wYXJzZXIkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiNTcuIGFjdGlvbnMuYXQ6NTM3OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzE2MworI0FUX1NUQVJUXzE2NAorYXRfZm5fZ3JvdXBfYmFubmVyIDE2NCAnYWN0aW9ucy5hdDo3NTgnIFwKKyAgIlByaW50ZXJzIGFuZCBEZXN0cnVjdG9ycyB3aXRoIHVuaW9uOiAlZ2xyLXBhcnNlciIgIiIgOQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjE2NC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIApAQCAtOTI5NCw1NiArNDQxMDksMjkgQEAKICMgQmUgc3VyZSB0byBwYXNzIGFsbCB0aGUgJWRpcmVjdGl2ZXMgdG8gdGhpcyBtYWNybyB0byBoYXZlIGNvcnJlY3QKICMgaGVscGluZyBtYWNyb3MuICBTbyBkb24ndCBwdXQgYW55IGRpcmVjdGx5IGluIHRoZSBCaXNvbiBmaWxlLgogCi0KLQotCi0jIFVzaW5nIHlhY2MuYz8KLQotCi0KLQotCi0KLQotIyB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZiAlbG9jYXRpb24gJiAlcHVyZSAmICglZ2xyIG9yICVwYXJzZS1wYXJhbSkuCi0KLSMgeXllcnJvciBhbHdheXMgc2VlcyB0aGUgbG9jYXRpb25zICh3aGVuIGFjdGl2YXRlZCksIGV4Y2VwdCBpZgotIyB5YWNjICYgcHVyZSAmICFwYXJhbS4KLQotCi0jIFRoZSBpbnRlcmZhY2UgaXMgcHVyZTogZWl0aGVyIGJlY2F1c2UgJXB1cmUtcGFyc2VyLCBvciBiZWNhdXNlIHdlCi0jIGFyZSB1c2luZyB0aGUgQysrIHBhcnNlcnMuCi0KLQotCi0KLQotCi0KLQotCi0KLQogY2F0ID5pbnB1dC55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAotJXsKKyVjb2RlIHJlcXVpcmVzIHsKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGFzc2VydC5oPgogCiAjZGVmaW5lIFlZSU5JVERFUFRIIDEwCiAjZGVmaW5lIFlZTUFYREVQVEggMTAKICNkZWZpbmUgUkFOR0UoTG9jYXRpb24pIChMb2NhdGlvbikuZmlyc3RfbGluZSwgKExvY2F0aW9uKS5sYXN0X2xpbmUKLSV9CisKKy8qIERpc3BsYXkgdGhlIHN5bWJvbCB0eXBlIFN5bWJvbC4gICovCisjZGVmaW5lIFYoU3ltYm9sLCBWYWx1ZSwgTG9jYXRpb24sIFNlcCkgXAorICAgZnByaW50ZiAoc3RkZXJyLCAjU3ltYm9sICIgKCVkQCVkLSVkKSIgU2VwLCBWYWx1ZSwgUkFOR0UoTG9jYXRpb24pKQorfQogCiAlZXJyb3ItdmVyYm9zZQogJWRlYnVnCkBAIC05MzU1LDE1ICs0NDE0MywxNSBAQAogICBpbnQgaXZhbDsKIH0KIAotCi0leworJWNvZGUgcHJvdmlkZXMgewogCiBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKLXN0YXRpYyB2b2lkIHl5ZXJyb3IgKGNvbnN0IGNoYXIgKm1zZyk7Ci0lfQorc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7Cit9CiAKLSV0eXBlIDxpdmFsPiAnKCcgJ3gnICd5JyAnKScgJzsnIHRoaW5nIGxpbmUgaW5wdXQKKyV0eXBlIDxpdmFsPiAnKCcgJ3gnICd5JyAnKScgJzsnIHRoaW5nIGxpbmUgaW5wdXQgRU5ECiAKKy8qIEZJWE1FOiBUaGlzICVwcmludGVyIGlzbid0IGFjdHVhbGx5IHRlc3RlZC4gICovCiAlcHJpbnRlcgogICB7CiAgICAgZnByaW50ZiAoeXlvdXRwdXQsICIlZCIsICQkKTsKQEAgLTkzNzEsMjUgKzQ0MTU5LDMwIEBACiAgIGlucHV0IGxpbmUgdGhpbmcgJ3gnICd5JwogCiAlZGVzdHJ1Y3RvcgotICB7IHByaW50ZiAoIkZyZWVpbmcgbnRlcm0gaW5wdXQgKCVkQCVkLSVkKVxuIiwgJCQsIFJBTkdFIChAJCkpOyB9CisgIHsgZnByaW50ZiAoc3RkZXJyLCAiRnJlZWluZyBudGVybSBpbnB1dCAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KICAgaW5wdXQKIAogJWRlc3RydWN0b3IKLSAgeyBwcmludGYgKCJGcmVlaW5nIG50ZXJtIGxpbmUgKCVkQCVkLSVkKVxuIiwgJCQsIFJBTkdFIChAJCkpOyB9CisgIHsgZnByaW50ZiAoc3RkZXJyLCAiRnJlZWluZyBudGVybSBsaW5lICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQogICBsaW5lCiAKICVkZXN0cnVjdG9yCi0gIHsgcHJpbnRmICgiRnJlZWluZyBudGVybSB0aGluZyAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KKyAgeyBmcHJpbnRmIChzdGRlcnIsICJGcmVlaW5nIG50ZXJtIHRoaW5nICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQogICB0aGluZwogCiAlZGVzdHJ1Y3RvcgotICB7IHByaW50ZiAoIkZyZWVpbmcgdG9rZW4gJ3gnICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQorICB7IGZwcmludGYgKHN0ZGVyciwgIkZyZWVpbmcgdG9rZW4gJ3gnICglZEAlZC0lZClcbiIsICQkLCBSQU5HRSAoQCQpKTsgfQogICAneCcKIAogJWRlc3RydWN0b3IKLSAgeyBwcmludGYgKCJGcmVlaW5nIHRva2VuICd5JyAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KKyAgeyBmcHJpbnRmIChzdGRlcnIsICJGcmVlaW5nIHRva2VuICd5JyAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KICAgJ3knCiAKKyV0b2tlbiBFTkQgMAorJWRlc3RydWN0b3IKKyAgeyBmcHJpbnRmIChzdGRlcnIsICJGcmVlaW5nIHRva2VuIEVORCAoJWRAJWQtJWQpXG4iLCAkJCwgUkFOR0UgKEAkKSk7IH0KKyAgRU5ECisKICUlCiAvKgogICAgVGhpcyBncmFtbWFyIGlzIG1hZGUgdG8gZXhlcmNpc2UgZXJyb3IgcmVjb3ZlcnkuCkBAIC05NDAyLDE0ICs0NDE5NSwxNSBAQAogICAvKiBOb3RoaW5nLiAqLwogICAgIHsKICAgICAgICQkID0gMDsKLSAgICAgIHByaW50ZiAoImlucHV0ICglZEAlZC0lZCk6IC8qIE5vdGhpbmcgKi9cbiIsICQkLCBSQU5HRSAoQCQpKTsKKyAgICAgIFYoaW5wdXQsICQkLCBAJCwgIjogLyogTm90aGluZyAqL1xuIik7CiAgICAgfQogfCBsaW5lIGlucHV0IC8qIFJpZ2h0IHJlY3Vyc2l2ZSB0byBsb2FkIHRoZSBzdGFjayBzbyB0aGF0IHBvcHBpbmcgYXQKLQkJRU9GIGNhbgliZSBleGVyY2lzZWQuICAqLworICAgICAgICAgICAgICAgIEVORCBjYW4gYmUgZXhlcmNpc2VkLiAgKi8KICAgICB7CiAgICAgICAkJCA9IDI7Ci0gICAgICBwcmludGYgKCJpbnB1dCAoJWRAJWQtJWQpOiBsaW5lICglZEAlZC0lZCkgaW5wdXQgKCVkQCVkLSVkKVxuIiwKLQkgICAgICAkJCwgUkFOR0UgKEAkKSwgJDEsIFJBTkdFIChAMSksICQyLCBSQU5HRSAoQDIpKTsKKyAgICAgIFYoaW5wdXQsICQkLCBAJCwgIjogIik7CisgICAgICBWKGxpbmUsICAkMSwgQDEsICIgIik7CisgICAgICBWKGlucHV0LCAkMiwgQDIsICJcbiIpOwogICAgIH0KIDsKIApAQCAtOTQxNywyOCArNDQyMTEsMzYgQEAKICAgdGhpbmcgdGhpbmcgdGhpbmcgJzsnCiAgICAgewogICAgICAgJCQgPSAkMTsKLSAgICAgIHByaW50ZiAoImxpbmUgKCVkQCVkLSVkKTogdGhpbmcgKCVkQCVkLSVkKSB0aGluZyAoJWRAJWQtJWQpIHRoaW5nICglZEAlZC0lZCkgJzsnICglZEAlZC0lZClcbiIsCi0gICAgICAgICAgICAgICQkLCBSQU5HRSAoQCQpLCAkMSwgUkFOR0UgKEAxKSwgJDIsIFJBTkdFIChAMiksCi0gICAgICAgICAgICAgICQzLCBSQU5HRSAoQDMpLCAkNCwgUkFOR0UgKEA0KSk7CisgICAgICBWKGxpbmUsICAkJCwgQCQsICI6ICIpOworICAgICAgVih0aGluZywgJDEsIEAxLCAiICIpOworICAgICAgVih0aGluZywgJDIsIEAyLCAiICIpOworICAgICAgVih0aGluZywgJDMsIEAzLCAiICIpOworICAgICAgVig7LCAgICAgJDQsIEA0LCAiXG4iKTsKICAgICB9CiB8ICcoJyB0aGluZyB0aGluZyAnKScKICAgICB7CiAgICAgICAkJCA9ICQxOwotICAgICAgcHJpbnRmICgibGluZSAoJWRAJWQtJWQpOiAnKCcgKCVkQCVkLSVkKSB0aGluZyAoJWRAJWQtJWQpIHRoaW5nICglZEAlZC0lZCkgJyknICglZEAlZC0lZClcbiIsCi0gICAgICAgICAgICAgICQkLCBSQU5HRSAoQCQpLCAkMSwgUkFOR0UgKEAxKSwgJDIsIFJBTkdFIChAMiksCi0gICAgICAgICAgICAgICQzLCBSQU5HRSAoQDMpLCAkNCwgUkFOR0UgKEA0KSk7CisgICAgICBWKGxpbmUsICAkJCwgQCQsICI6ICIpOworICAgICAgVignKCcsICAgJDEsIEAxLCAiICIpOworICAgICAgVih0aGluZywgJDIsIEAyLCAiICIpOworICAgICAgVih0aGluZywgJDMsIEAzLCAiICIpOworICAgICAgVignKScsICAgJDQsIEA0LCAiXG4iKTsKICAgICB9CiB8ICcoJyB0aGluZyAnKScKICAgICB7CiAgICAgICAkJCA9ICQxOwotICAgICAgcHJpbnRmICgibGluZSAoJWRAJWQtJWQpOiAnKCcgKCVkQCVkLSVkKSB0aGluZyAoJWRAJWQtJWQpICcpJyAoJWRAJWQtJWQpXG4iLAotICAgICAgICAgICAgICAkJCwgUkFOR0UgKEAkKSwgJDEsIFJBTkdFIChAMSksICQyLCBSQU5HRSAoQDIpLCAkMywgUkFOR0UgKEAzKSk7CisgICAgICBWKGxpbmUsICAkJCwgQCQsICI6ICIpOworICAgICAgVignKCcsICAgJDEsIEAxLCAiICIpOworICAgICAgVih0aGluZywgJDIsIEAyLCAiICIpOworICAgICAgVignKScsICAgJDMsIEAzLCAiXG4iKTsKICAgICB9CiB8ICcoJyBlcnJvciAnKScKICAgICB7CiAgICAgICAkJCA9IC0xOwotICAgICAgcHJpbnRmICgibGluZSAoJWRAJWQtJWQpOiAnKCcgKCVkQCVkLSVkKSBlcnJvciAoQCVkLSVkKSAnKScgKCVkQCVkLSVkKVxuIiwKLSAgICAgICAgICAgICAgJCQsIFJBTkdFIChAJCksICQxLCBSQU5HRSAoQDEpLCBSQU5HRSAoQDIpLCAkMywgUkFOR0UgKEAzKSk7CisgICAgICBWKGxpbmUsICAkJCwgQCQsICI6ICIpOworICAgICAgVignKCcsICAgJDEsIEAxLCAiICIpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiZXJyb3IgKEAlZC0lZCkgIiwgUkFOR0UgKEAyKSk7CisgICAgICBWKCcpJywgICAkMywgQDMsICJcbiIpOwogICAgIH0KIDsKIApAQCAtOTQ0NiwzOCArNDQyNDgsNDIgQEAKICAgJ3gnCiAgICAgewogICAgICAgJCQgPSAkMTsKLSAgICAgIHByaW50ZiAoInRoaW5nICglZEAlZC0lZCk6ICd4JyAoJWRAJWQtJWQpXG4iLAotICAgICAgICAgICAgICAkJCwgUkFOR0UgKEAkKSwgJDEsIFJBTkdFIChAMSkpOworICAgICAgVih0aGluZywgJCQsIEAkLCAiOiAiKTsKKyAgICAgIFYoJ3gnLCAgICQxLCBAMSwgIlxuIik7CiAgICAgfQogOwogJSUKIC8qIEFsaWFzIHRvIEFSR1ZbMV0uICovCi1jb25zdCBjaGFyICpzb3VyY2UgPSAwOworY29uc3QgY2hhciAqc291cmNlID0gWVlfTlVMTDsKIAotc3RhdGljIGludAoteXlsZXggKHZvaWQpCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIFlZX0xPQ0FUSU9OX1BSSU5UIChzdGRlcnIsICh5eWxsb2MpKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiOiAiKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisKK3N0YXRpYworaW50IHl5bGV4ICh2b2lkKQogewogICBzdGF0aWMgdW5zaWduZWQgaW50IGNvdW50ZXIgPSAwOwogCiAgIGludCBjID0gKHl5bHZhbCkuaXZhbCA9IGNvdW50ZXIrKzsKICAgLyogQXMgaW4gQkFTSUMsIGxpbmUgbnVtYmVycyBnbyBmcm9tIDEwIHRvIDEwLiAgKi8KLSAoeXlsbG9jKS5maXJzdF9saW5lID0gKHl5bGxvYykuZmlyc3RfY29sdW1uID0gMTAgKiBjOworICAoeXlsbG9jKS5maXJzdF9saW5lID0gKHl5bGxvYykuZmlyc3RfY29sdW1uID0gMTAgKiBjOwogICAoeXlsbG9jKS5sYXN0X2xpbmUgPSAoeXlsbG9jKS5sYXN0X2NvbHVtbiA9ICh5eWxsb2MpLmZpcnN0X2xpbmUgKyA5OwotCi0KKyAgYXNzZXJ0ICgwIDw9IGMgJiYgYyA8PSBzdHJsZW4gKHNvdXJjZSkpOwogICBpZiAoc291cmNlW2NdKQotICAgIHByaW50ZiAoInNlbmRpbmc6ICclYyciLCBzb3VyY2VbY10pOworICAgIGZwcmludGYgKHN0ZGVyciwgInNlbmRpbmc6ICclYyciLCBzb3VyY2VbY10pOwogICBlbHNlCi0gICAgcHJpbnRmICgic2VuZGluZzogRU9GIik7Ci0gIHByaW50ZiAoIiAoJWRAJWQtJWQpXG4iLCBjLCBSQU5HRSAoKHl5bGxvYykpKTsKKyAgICBmcHJpbnRmIChzdGRlcnIsICJzZW5kaW5nOiBFTkQiKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiICglZEAlZC0lZClcbiIsIGMsIFJBTkdFICgoeXlsbG9jKSkpOwogICByZXR1cm4gc291cmNlW2NdOwogfQogCi1zdGF0aWMgdm9pZAoteXllcnJvciAoY29uc3QgY2hhciAqbXNnKQotewotICBwcmludGYgKCIlZC0lZDogJXNcbiIsIFJBTkdFICh5eWxsb2MpLCBtc2cpOwotfQogCiBpbnQKIG1haW4gKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pCkBAIC05NDg5LDkgKzQ0Mjk1LDkgQEAKICAgc3RhdHVzID0geXlwYXJzZSAoKTsKICAgc3dpdGNoIChzdGF0dXMpCiAgICAgewotICAgICAgY2FzZSAwOiBwcmludGYgKCJTdWNjZXNzZnVsIHBhcnNlLlxuIik7IGJyZWFrOwotICAgICAgY2FzZSAxOiBwcmludGYgKCJQYXJzaW5nIEZBSUxFRC5cbiIpOyBicmVhazsKLSAgICAgIGRlZmF1bHQ6IHByaW50ZiAoIlBhcnNpbmcgRkFJTEVEIChzdGF0dXMgJWQpLlxuIiwgc3RhdHVzKTsgYnJlYWs7CisgICAgICBjYXNlIDA6IGZwcmludGYgKHN0ZGVyciwgIlN1Y2Nlc3NmdWwgcGFyc2UuXG4iKTsgYnJlYWs7CisgICAgICBjYXNlIDE6IGZwcmludGYgKHN0ZGVyciwgIlBhcnNpbmcgRkFJTEVELlxuIik7IGJyZWFrOworICAgICAgZGVmYXVsdDogZnByaW50ZiAoc3RkZXJyLCAiUGFyc2luZyBGQUlMRUQgKHN0YXR1cyAlZCkuXG4iLCBzdGF0dXMpOyBicmVhazsKICAgICB9CiAgIHJldHVybiBzdGF0dXM7CiB9CkBAIC05NDk5LDU1ICs0NDMwNSwxMTggQEAKIAogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiYWN0aW9ucy5hdDo1Mzc6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKLWVjaG8gYWN0aW9ucy5hdDo1MzcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJhY3Rpb25zLmF0OjUzNzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImFjdGlvbnMuYXQ6NzU4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzU4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IiAiYWN0aW9ucy5hdDo3NTgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6NzU4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzU4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0Ojc1OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6NzU4OiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0Ojc1OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCi0gICAkYXRfdHJhY2VvZmYKLWVjaG8gImFjdGlvbnMuYXQ6NTM3OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgotZWNobyBhY3Rpb25zLmF0OjUzNyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiYWN0aW9ucy5hdDo1Mzc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1ODogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImFjdGlvbnMuYXQ6NzU4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1ODogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJhY3Rpb25zLmF0Ojc1OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKIApAQCAtOTU1Niw0MCArNDQ0MjUsNDQgQEAKICMgSS5lLiwgZXBzaWxvbi1yZWR1Y3Rpb25zLCBhcyBpbiAiKHgpIiB3aGljaCBlbmRzIGJ5IHJlZHVjaW5nCiAjIGFuIGVtcHR5ICJsaW5lIiBudGVybS4KICMgRklYTUU6IFRoaXMgbG9jYXRpb24gaXMgbm90IHNhdGlzZnlpbmcuICBEZXBlbmQgb24gdGhlIGxvb2thaGVhZD8KLSRhdF90cmFjZW9mZgotZWNobyAiYWN0aW9ucy5hdDo1Mzc6IFwkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KSciCi1lY2hvIGFjdGlvbnMuYXQ6NTM3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KScgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gInNlbmRpbmc6ICcoJyAoMEAwLTkpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTg6ICBcJFBSRVBBUlNFUiAuL2lucHV0ICcoeCknIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0ICcoeCknIiAiYWN0aW9ucy5hdDo3NTgiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCAnKHgpJworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDo3NTgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzZW5kaW5nOiAnKCcgKDBAMC05KQogc2VuZGluZzogJ3gnICgxQDEwLTE5KQogdGhpbmcgKDFAMTAtMTkpOiAneCcgKDFAMTAtMTkpCiBzZW5kaW5nOiAnKScgKDJAMjAtMjkpCiBsaW5lICgwQDAtMjkpOiAnKCcgKDBAMC05KSB0aGluZyAoMUAxMC0xOSkgJyknICgyQDIwLTI5KQotc2VuZGluZzogRU9GICgzQDMwLTM5KQorc2VuZGluZzogRU5EICgzQDMwLTM5KQogaW5wdXQgKDBAMjktMjkpOiAvKiBOb3RoaW5nICovCiBpbnB1dCAoMkAwLTI5KTogbGluZSAoMEAwLTI5KSBpbnB1dCAoMEAyOS0yOSkKK0ZyZWVpbmcgdG9rZW4gRU5EICgzQDMwLTM5KQogRnJlZWluZyBudGVybSBpbnB1dCAoMkAwLTI5KQogU3VjY2Vzc2Z1bCBwYXJzZS4KLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImFjdGlvbnMuYXQ6NTM3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KIAogCiAKQEAgLTk1OTcsNDEgKzQ0NDcwLDQ1IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyAnKHkpJyBpcyBhbiBlcnJvciwgYnV0IGNhbiBiZSByZWNvdmVyZWQgZnJvbS4gIEJ1dCB3aGF0J3MgdGhlIGxvY2F0aW9uCiAjIG9mIHRoZSBlcnJvciBpdHNlbGYgKCd5JyksIGFuZCBvZiB0aGUgcmVzdWx0aW5nIHJlZHVjdGlvbiAoJyhlcnJvciknKS4KLSRhdF90cmFjZW9mZgotZWNobyAiYWN0aW9ucy5hdDo1Mzc6IFwkUFJFUEFSU0VSIC4vaW5wdXQgJyh5KSciCi1lY2hvIGFjdGlvbnMuYXQ6NTM3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vaW5wdXQgJyh5KScgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gInNlbmRpbmc6ICcoJyAoMEAwLTkpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTg6ICBcJFBSRVBBUlNFUiAuL2lucHV0ICcoeSknIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0ICcoeSknIiAiYWN0aW9ucy5hdDo3NTgiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCAnKHkpJworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDo3NTgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzZW5kaW5nOiAnKCcgKDBAMC05KQogc2VuZGluZzogJ3knICgxQDEwLTE5KQotMTAtMTk6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAneScsIGV4cGVjdGluZyAneCcKKzEwLjEwLTE5LjE4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ3knLCBleHBlY3RpbmcgJ3gnCiBGcmVlaW5nIHRva2VuICd5JyAoMUAxMC0xOSkKIHNlbmRpbmc6ICcpJyAoMkAyMC0yOSkKIGxpbmUgKC0xQDAtMjkpOiAnKCcgKDBAMC05KSBlcnJvciAoQDEwLTE5KSAnKScgKDJAMjAtMjkpCi1zZW5kaW5nOiBFT0YgKDNAMzAtMzkpCitzZW5kaW5nOiBFTkQgKDNAMzAtMzkpCiBpbnB1dCAoMEAyOS0yOSk6IC8qIE5vdGhpbmcgKi8KIGlucHV0ICgyQDAtMjkpOiBsaW5lICgtMUAwLTI5KSBpbnB1dCAoMEAyOS0yOSkKK0ZyZWVpbmcgdG9rZW4gRU5EICgzQDMwLTM5KQogRnJlZWluZyBudGVybSBpbnB1dCAoMkAwLTI5KQogU3VjY2Vzc2Z1bCBwYXJzZS4KLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImFjdGlvbnMuYXQ6NTM3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KIAogCiAKQEAgLTk2NDksMjIgKzQ0NTI2LDMzIEBACiAjICAgICAnKCcsICd4JywgJyknLAogIyAgICAgJygnLCAneCcsICcpJywKICMgICAgICd5JwotJGF0X3RyYWNlb2ZmCi1lY2hvICJhY3Rpb25zLmF0OjUzNzogXCRQUkVQQVJTRVIgLi9pbnB1dCAnKHh4eHh4KSh4KSh4KXknIgotZWNobyBhY3Rpb25zLmF0OjUzNyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2lucHV0ICcoeHh4eHgpKHgpKHgpeScgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gInNlbmRpbmc6ICcoJyAoMEAwLTkpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTg6ICBcJFBSRVBBUlNFUiAuL2lucHV0ICcoeHh4eHgpKHgpKHgpeSciCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQgJyh4eHh4eCkoeCkoeCl5JyIgImFjdGlvbnMuYXQ6NzU4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQgJyh4eHh4eCkoeCkoeCl5JworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDo3NTgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzZW5kaW5nOiAnKCcgKDBAMC05KQogc2VuZGluZzogJ3gnICgxQDEwLTE5KQogdGhpbmcgKDFAMTAtMTkpOiAneCcgKDFAMTAtMTkpCiBzZW5kaW5nOiAneCcgKDJAMjAtMjkpCiB0aGluZyAoMkAyMC0yOSk6ICd4JyAoMkAyMC0yOSkKIHNlbmRpbmc6ICd4JyAoM0AzMC0zOSkKLTMwLTM5OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ3gnLCBleHBlY3RpbmcgJyknCiszMC4zMC0zOS4zODogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICd4JywgZXhwZWN0aW5nICcpJwogRnJlZWluZyBudGVybSB0aGluZyAoMkAyMC0yOSkKIEZyZWVpbmcgbnRlcm0gdGhpbmcgKDFAMTAtMTkpCiBGcmVlaW5nIHRva2VuICd4JyAoM0AzMC0zOSkKQEAgLTk2ODksMjUgKzQ0NTc3LDc2IEBACiBpbnB1dCAoMkAxMDAtMTI5KTogbGluZSAoMTBAMTAwLTEyOSkgaW5wdXQgKDBAMTI5LTEyOSkKIGlucHV0ICgyQDcwLTEyOSk6IGxpbmUgKDdANzAtOTkpIGlucHV0ICgyQDEwMC0xMjkpCiBpbnB1dCAoMkAwLTEyOSk6IGxpbmUgKC0xQDAtNjkpIGlucHV0ICgyQDcwLTEyOSkKLTEzMC0xMzk6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAneScsIGV4cGVjdGluZyBcJGVuZAorMTMwLjEzMC0xMzkuMTM4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ3knLCBleHBlY3RpbmcgRU5ECiBGcmVlaW5nIG50ZXJtIGlucHV0ICgyQDAtMTI5KQogRnJlZWluZyB0b2tlbiAneScgKDEzQDEzMC0xMzkpCiBQYXJzaW5nIEZBSUxFRC4KLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImFjdGlvbnMuYXQ6NTM3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKIAotJGF0X3RyYWNlb24KKworCisjIFN5bnRheCBlcnJvciBjYXVnaHQgYnkgdGhlIHBhcnNlciB3aGVyZSBsb29rYWhlYWQgPSBFTkQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTG9hZCB0aGUgc3RhY2sgYW5kIHByb3Zva2UgYW4gZXJyb3IgdGhhdCBjYW5ub3QgYmUgY2F1Z2h0IGJ5IHRoZQorIyBncmFtbWFyLCB0byBjaGVjayB0aGF0IHRoZSBzdGFjayBpcyBjbGVhcmVkLiAgQW5kIG1ha2Ugc3VyZSB0aGUKKyMgbG9va2FoZWFkIGlzIGZyZWVkLgorIworIyAgICAgJygnLCAneCcsICcpJywKKyMgICAgICcoJywgJ3gnLCAnKScsCisjICAgICAneCcKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1ODogIFwkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KSh4KXgnIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0ICcoeCkoeCl4JyIgImFjdGlvbnMuYXQ6NzU4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQgJyh4KSh4KXgnCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0Ojc1ODogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0Ojc1OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInNlbmRpbmc6ICcoJyAoMEAwLTkpCitzZW5kaW5nOiAneCcgKDFAMTAtMTkpCit0aGluZyAoMUAxMC0xOSk6ICd4JyAoMUAxMC0xOSkKK3NlbmRpbmc6ICcpJyAoMkAyMC0yOSkKK2xpbmUgKDBAMC0yOSk6ICcoJyAoMEAwLTkpIHRoaW5nICgxQDEwLTE5KSAnKScgKDJAMjAtMjkpCitzZW5kaW5nOiAnKCcgKDNAMzAtMzkpCitzZW5kaW5nOiAneCcgKDRANDAtNDkpCit0aGluZyAoNEA0MC00OSk6ICd4JyAoNEA0MC00OSkKK3NlbmRpbmc6ICcpJyAoNUA1MC01OSkKK2xpbmUgKDNAMzAtNTkpOiAnKCcgKDNAMzAtMzkpIHRoaW5nICg0QDQwLTQ5KSAnKScgKDVANTAtNTkpCitzZW5kaW5nOiAneCcgKDZANjAtNjkpCit0aGluZyAoNkA2MC02OSk6ICd4JyAoNkA2MC02OSkKK3NlbmRpbmc6IEVORCAoN0A3MC03OSkKKzcwLjcwLTc5Ljc4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgRU5ELCBleHBlY3RpbmcgJ3gnCitGcmVlaW5nIG50ZXJtIHRoaW5nICg2QDYwLTY5KQorRnJlZWluZyBudGVybSBsaW5lICgzQDMwLTU5KQorRnJlZWluZyBudGVybSBsaW5lICgwQDAtMjkpCitGcmVlaW5nIHRva2VuIEVORCAoN0A3MC03OSkKK1BhcnNpbmcgRkFJTEVELgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo3NTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKIAogCiAjIENoZWNrIGRlc3RydWN0aW9uIHVwb24gc3RhY2sgb3ZlcmZsb3cKQEAgLTk3MTgsMjkgKzQ0NjU3LDQ3MDAgQEAKIAogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzE2NAorI0FUX1NUQVJUXzE2NQorYXRfZm5fZ3JvdXBfYmFubmVyIDE2NSAnYWN0aW9ucy5hdDo3NjknIFwKKyAgIkRlZmF1bHQgdGFnbGVzcyAlcHJpbnRlciBhbmQgJWRlc3RydWN0b3IiICIgICAgICAgIiA5CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTY1LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAotICBiYW5uZXItOCApICMgQmFubmVyIDguIGNvbmZsaWN0cy5hdDoyMAotICAgIGNhdCA8PFxfQVRFT0YKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCi1Db25mbGljdHMuCislZXJyb3ItdmVyYm9zZQorJWRlYnVnCislbG9jYXRpb25zCiAKKyV7CisjIGluY2x1ZGUgPHN0ZGlvLmg+CisjIGluY2x1ZGUgPHN0ZGxpYi5oPgorc3RhdGljIGludCB5eWxleCAodm9pZCk7CitzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyMgZGVmaW5lIFVTRShTWU0pCislfQorCislcHJpbnRlciB7CisgIGZwcmludGYgKHl5b3V0cHV0LCAiPCo+IHByaW50ZXIgc2hvdWxkIG5vdCBiZSBjYWxsZWQuXG4iKTsKK30gPCo+CisKKyVwcmludGVyIHsKKyAgZnByaW50ZiAoeXlvdXRwdXQsICI8PiBwcmludGVyIGZvciAnJWMnIEAgJWQiLCAkJCwgQCQuZmlyc3RfY29sdW1uKTsKK30gPD4KKyVkZXN0cnVjdG9yIHsKKyAgZnByaW50ZiAoc3Rkb3V0LCAiPD4gZGVzdHJ1Y3RvciBmb3IgJyVjJyBAICVkLlxuIiwgJCQsIEAkLmZpcnN0X2NvbHVtbik7Cit9IDw+CisKKyVwcmludGVyIHsKKyAgZnByaW50ZiAoeXlvdXRwdXQsICInYicvJ2MnIHByaW50ZXIgZm9yICclYycgQCAlZCIsICQkLCBAJC5maXJzdF9jb2x1bW4pOworfSAnYicgJ2MnCislZGVzdHJ1Y3RvciB7CisgIGZwcmludGYgKHN0ZG91dCwgIidiJy8nYycgZGVzdHJ1Y3RvciBmb3IgJyVjJyBAICVkLlxuIiwgJCQsIEAkLmZpcnN0X2NvbHVtbik7Cit9ICdiJyAnYycKKworJWRlc3RydWN0b3IgeworICBmcHJpbnRmICh5eW91dHB1dCwgIjwqPiBkZXN0cnVjdG9yIHNob3VsZCBub3QgYmUgY2FsbGVkLlxuIik7Cit9IDwqPgorCislJQorCitzdGFydDogJ2EnICdiJyAnYycgJ2QnICdlJyB7ICQkID0gJ1MnOyBVU0UoKCQxLCAkMiwgJDMsICQ0LCAkNSkpOyB9IDsKKworJSUKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgWVlfTE9DQVRJT05fUFJJTlQgKHN0ZGVyciwgKHl5bGxvYykpOworICBmcHJpbnRmIChzdGRlcnIsICI6ICIpOworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKyNpbmNsdWRlIDxhc3NlcnQuaD4KK3N0YXRpYworaW50IHl5bGV4ICh2b2lkKQoreworICBzdGF0aWMgY2hhciBjb25zdCBpbnB1dFtdID0gImFiY2QiOworICBzdGF0aWMgc2l6ZV90IHRva251bSA9IDA7CisgIGludCByZXM7CisgIDsKKyAgYXNzZXJ0ICh0b2tudW0gPCBzaXplb2YgaW5wdXQgLyBzaXplb2YgaW5wdXRbMF0pOworICByZXMgPSBpbnB1dFt0b2tudW0rK107CisgIHl5bHZhbCA9IHJlczsKKyAgKHl5bGxvYykuZmlyc3RfbGluZSA9ICh5eWxsb2MpLmxhc3RfbGluZSA9IDE7CisgICh5eWxsb2MpLmZpcnN0X2NvbHVtbiA9ICh5eWxsb2MpLmxhc3RfY29sdW1uID0gdG9rbnVtOworICByZXR1cm4gcmVzOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHl5ZGVidWcgPSAxOworICByZXR1cm4geXlwYXJzZSAoKTsKK30KIF9BVEVPRgotICAgIDs7CiAKLSAgNTggKSAjIDU4LiBjb25mbGljdHMuYXQ6MzI6IFMvUiBpbiBpbml0aWFsCi0gICAgYXRfc2V0dXBfbGluZT0nY29uZmxpY3RzLmF0OjMyJwotICAgIGF0X2Rlc2M9J1MvUiBpbiBpbml0aWFsJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgNTg6IFMvUiBpbiBpbml0aWFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICI1OC4gY29uZmxpY3RzLmF0OjMyOiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjgyMjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImFjdGlvbnMuYXQ6ODIyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo4MjIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjgyMjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgImFjdGlvbnMuYXQ6ODIyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo4MjIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo4MjI6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0OjgyMiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjgyMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6ODIyOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYWN0aW9ucy5hdDo4MjIiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo4MjIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjgyMjogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDo4MjIiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6ODIyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo4MjM6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJhY3Rpb25zLmF0OjgyMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo4MjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo4MjM6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAiYWN0aW9ucy5hdDo4MjMiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6ODIzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6ODI0OiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgImFjdGlvbnMuYXQ6ODI0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiPD4gZGVzdHJ1Y3RvciBmb3IgJ2QnIEAgNC4KKydiJy8nYycgZGVzdHJ1Y3RvciBmb3IgJ2MnIEAgMy4KKydiJy8nYycgZGVzdHJ1Y3RvciBmb3IgJ2InIEAgMi4KKzw+IGRlc3RydWN0b3IgZm9yICdhJyBAIDEuCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjgyNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjgyNDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0OjgyNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gIlN0YXJ0aW5nIHBhcnNlCitFbnRlcmluZyBzdGF0ZSAwCitSZWFkaW5nIGEgdG9rZW46IE5leHQgdG9rZW4gaXMgdG9rZW4gJ2EnICgxLjE6IDw+IHByaW50ZXIgZm9yICdhJyBAIDEpCitTaGlmdGluZyB0b2tlbiAnYScgKDEuMTogPD4gcHJpbnRlciBmb3IgJ2EnIEAgMSkKK0VudGVyaW5nIHN0YXRlIDEKK1JlYWRpbmcgYSB0b2tlbjogTmV4dCB0b2tlbiBpcyB0b2tlbiAnYicgKDEuMjogJ2InLydjJyBwcmludGVyIGZvciAnYicgQCAyKQorU2hpZnRpbmcgdG9rZW4gJ2InICgxLjI6ICdiJy8nYycgcHJpbnRlciBmb3IgJ2InIEAgMikKK0VudGVyaW5nIHN0YXRlIDMKK1JlYWRpbmcgYSB0b2tlbjogTmV4dCB0b2tlbiBpcyB0b2tlbiAnYycgKDEuMzogJ2InLydjJyBwcmludGVyIGZvciAnYycgQCAzKQorU2hpZnRpbmcgdG9rZW4gJ2MnICgxLjM6ICdiJy8nYycgcHJpbnRlciBmb3IgJ2MnIEAgMykKK0VudGVyaW5nIHN0YXRlIDUKK1JlYWRpbmcgYSB0b2tlbjogTmV4dCB0b2tlbiBpcyB0b2tlbiAnZCcgKDEuNDogPD4gcHJpbnRlciBmb3IgJ2QnIEAgNCkKK1NoaWZ0aW5nIHRva2VuICdkJyAoMS40OiA8PiBwcmludGVyIGZvciAnZCcgQCA0KQorRW50ZXJpbmcgc3RhdGUgNgorUmVhZGluZyBhIHRva2VuOiBOb3cgYXQgZW5kIG9mIGlucHV0LgorMS41OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgXCRlbmQsIGV4cGVjdGluZyAnZScKK0Vycm9yOiBwb3BwaW5nIHRva2VuICdkJyAoMS40OiA8PiBwcmludGVyIGZvciAnZCcgQCA0KQorU3RhY2sgbm93IDAgMSAzIDUKK0Vycm9yOiBwb3BwaW5nIHRva2VuICdjJyAoMS4zOiAnYicvJ2MnIHByaW50ZXIgZm9yICdjJyBAIDMpCitTdGFjayBub3cgMCAxIDMKK0Vycm9yOiBwb3BwaW5nIHRva2VuICdiJyAoMS4yOiAnYicvJ2MnIHByaW50ZXIgZm9yICdiJyBAIDIpCitTdGFjayBub3cgMCAxCitFcnJvcjogcG9wcGluZyB0b2tlbiAnYScgKDEuMTogPD4gcHJpbnRlciBmb3IgJ2EnIEAgMSkKK1N0YWNrIG5vdyAwCitDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCB0b2tlbiBcJGVuZCAoMS41OiApCitTdGFjayBub3cgMAorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo4MjQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzE2NQorI0FUX1NUQVJUXzE2NgorYXRfZm5fZ3JvdXBfYmFubmVyIDE2NiAnYWN0aW9ucy5hdDo4NjcnIFwKKyAgIkRlZmF1bHQgdGFnZ2VkIGFuZCBwZXItdHlwZSAlcHJpbnRlciBhbmQgJWRlc3RydWN0b3IiICIiIDkKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxNjYuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWVycm9yLXZlcmJvc2UKKyVkZWJ1ZworCisleworIyBpbmNsdWRlIDxzdGRpby5oPgorIyBpbmNsdWRlIDxzdGRsaWIuaD4KK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworc3RhdGljIGludCB5eWxleCAodm9pZCk7CisjIGRlZmluZSBVU0UoU1lNKQorJX0KKworJXByaW50ZXIgeworICBmcHJpbnRmICh5eW91dHB1dCwgIjw+IHByaW50ZXIgc2hvdWxkIG5vdCBiZSBjYWxsZWQuXG4iKTsKK30gPD4KKworJXVuaW9uIHsgaW50IGZpZWxkMDsgaW50IGZpZWxkMTsgaW50IGZpZWxkMjsgfQorJXR5cGUgPGZpZWxkMD4gc3RhcnQgJ2EnICdnJworJXR5cGUgPGZpZWxkMT4gJ2UnCisldHlwZSA8ZmllbGQyPiAnZicKKyVwcmludGVyIHsKKyAgZnByaW50ZiAoeXlvdXRwdXQsICI8Kj4vPGZpZWxkMj4vZSBwcmludGVyIik7Cit9IDwqPiAnZScgPGZpZWxkMj4KKyVkZXN0cnVjdG9yIHsKKyAgZnByaW50ZiAoc3Rkb3V0LCAiPCo+LzxmaWVsZDI+L2UgZGVzdHJ1Y3Rvci5cbiIpOworfSA8Kj4gJ2UnIDxmaWVsZDI+CisKKyV0eXBlIDxmaWVsZDE+ICdiJworJXByaW50ZXIgeyBmcHJpbnRmICh5eW91dHB1dCwgIjxmaWVsZDE+IHByaW50ZXIiKTsgfSA8ZmllbGQxPgorJWRlc3RydWN0b3IgeyBmcHJpbnRmIChzdGRvdXQsICI8ZmllbGQxPiBkZXN0cnVjdG9yLlxuIik7IH0gPGZpZWxkMT4KKworJXR5cGUgPGZpZWxkMD4gJ2MnCislcHJpbnRlciB7IGZwcmludGYgKHl5b3V0cHV0LCAiJ2MnIHByaW50ZXIiKTsgfSAnYycKKyVkZXN0cnVjdG9yIHsgZnByaW50ZiAoc3Rkb3V0LCAiJ2MnIGRlc3RydWN0b3IuXG4iKTsgfSAnYycKKworJXR5cGUgPGZpZWxkMT4gJ2QnCislcHJpbnRlciB7IGZwcmludGYgKHl5b3V0cHV0LCAiJ2QnIHByaW50ZXIiKTsgfSAnZCcKKyVkZXN0cnVjdG9yIHsgZnByaW50ZiAoc3Rkb3V0LCAiJ2QnIGRlc3RydWN0b3IuXG4iKTsgfSAnZCcKKworJWRlc3RydWN0b3IgeworICBmcHJpbnRmICh5eW91dHB1dCwgIjw+IGRlc3RydWN0b3Igc2hvdWxkIG5vdCBiZSBjYWxsZWQuXG4iKTsKK30gPD4KKworJSUKKworc3RhcnQ6CisgICdhJyAnYicgJ2MnICdkJyAnZScgJ2YnICdnJworICAgIHsKKyAgICAgIFVTRSgoJDEsICQyLCAkMywgJDQsICQ1LCAkNiwgJDcpKTsKKyAgICAgICQkID0gJ1MnOworICAgIH0KKyAgOworCislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKyNpbmNsdWRlIDxhc3NlcnQuaD4KK3N0YXRpYworaW50IHl5bGV4ICh2b2lkKQoreworICBzdGF0aWMgY2hhciBjb25zdCBpbnB1dFtdID0gImFiY2RlZiI7CisgIHN0YXRpYyBzaXplX3QgdG9rbnVtID0gMDsKKyAgaW50IHJlczsKKyAgOworICBhc3NlcnQgKHRva251bSA8IHNpemVvZiBpbnB1dCAvIHNpemVvZiBpbnB1dFswXSk7CisgIHJlcyA9IGlucHV0W3Rva251bSsrXTsKKyAgOworICByZXR1cm4gcmVzOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHl5ZGVidWcgPSAxOworICByZXR1cm4geXlwYXJzZSAoKTsKK30KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjkzNDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImFjdGlvbnMuYXQ6OTM0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo5MzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjkzNDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgImFjdGlvbnMuYXQ6OTM0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo5MzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo5MzQ6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0OjkzNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjkzNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6OTM0OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYWN0aW9ucy5hdDo5MzQiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo5MzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjkzNDogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDo5MzQiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6OTM0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo5MzU6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJhY3Rpb25zLmF0OjkzNSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo5MzUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo5MzU6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAiYWN0aW9ucy5hdDo5MzUiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6OTM1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6OTM2OiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgImFjdGlvbnMuYXQ6OTM2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiPCo+LzxmaWVsZDI+L2UgZGVzdHJ1Y3Rvci4KKzwqPi88ZmllbGQyPi9lIGRlc3RydWN0b3IuCisnZCcgZGVzdHJ1Y3Rvci4KKydjJyBkZXN0cnVjdG9yLgorPGZpZWxkMT4gZGVzdHJ1Y3Rvci4KKzwqPi88ZmllbGQyPi9lIGRlc3RydWN0b3IuCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjkzNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjkzNjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0OjkzNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gIlN0YXJ0aW5nIHBhcnNlCitFbnRlcmluZyBzdGF0ZSAwCitSZWFkaW5nIGEgdG9rZW46IE5leHQgdG9rZW4gaXMgdG9rZW4gJ2EnICg8Kj4vPGZpZWxkMj4vZSBwcmludGVyKQorU2hpZnRpbmcgdG9rZW4gJ2EnICg8Kj4vPGZpZWxkMj4vZSBwcmludGVyKQorRW50ZXJpbmcgc3RhdGUgMQorUmVhZGluZyBhIHRva2VuOiBOZXh0IHRva2VuIGlzIHRva2VuICdiJyAoPGZpZWxkMT4gcHJpbnRlcikKK1NoaWZ0aW5nIHRva2VuICdiJyAoPGZpZWxkMT4gcHJpbnRlcikKK0VudGVyaW5nIHN0YXRlIDMKK1JlYWRpbmcgYSB0b2tlbjogTmV4dCB0b2tlbiBpcyB0b2tlbiAnYycgKCdjJyBwcmludGVyKQorU2hpZnRpbmcgdG9rZW4gJ2MnICgnYycgcHJpbnRlcikKK0VudGVyaW5nIHN0YXRlIDUKK1JlYWRpbmcgYSB0b2tlbjogTmV4dCB0b2tlbiBpcyB0b2tlbiAnZCcgKCdkJyBwcmludGVyKQorU2hpZnRpbmcgdG9rZW4gJ2QnICgnZCcgcHJpbnRlcikKK0VudGVyaW5nIHN0YXRlIDYKK1JlYWRpbmcgYSB0b2tlbjogTmV4dCB0b2tlbiBpcyB0b2tlbiAnZScgKDwqPi88ZmllbGQyPi9lIHByaW50ZXIpCitTaGlmdGluZyB0b2tlbiAnZScgKDwqPi88ZmllbGQyPi9lIHByaW50ZXIpCitFbnRlcmluZyBzdGF0ZSA3CitSZWFkaW5nIGEgdG9rZW46IE5leHQgdG9rZW4gaXMgdG9rZW4gJ2YnICg8Kj4vPGZpZWxkMj4vZSBwcmludGVyKQorU2hpZnRpbmcgdG9rZW4gJ2YnICg8Kj4vPGZpZWxkMj4vZSBwcmludGVyKQorRW50ZXJpbmcgc3RhdGUgOAorUmVhZGluZyBhIHRva2VuOiBOb3cgYXQgZW5kIG9mIGlucHV0Lgorc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIFwkZW5kLCBleHBlY3RpbmcgJ2cnCitFcnJvcjogcG9wcGluZyB0b2tlbiAnZicgKDwqPi88ZmllbGQyPi9lIHByaW50ZXIpCitTdGFjayBub3cgMCAxIDMgNSA2IDcKK0Vycm9yOiBwb3BwaW5nIHRva2VuICdlJyAoPCo+LzxmaWVsZDI+L2UgcHJpbnRlcikKK1N0YWNrIG5vdyAwIDEgMyA1IDYKK0Vycm9yOiBwb3BwaW5nIHRva2VuICdkJyAoJ2QnIHByaW50ZXIpCitTdGFjayBub3cgMCAxIDMgNQorRXJyb3I6IHBvcHBpbmcgdG9rZW4gJ2MnICgnYycgcHJpbnRlcikKK1N0YWNrIG5vdyAwIDEgMworRXJyb3I6IHBvcHBpbmcgdG9rZW4gJ2InICg8ZmllbGQxPiBwcmludGVyKQorU3RhY2sgbm93IDAgMQorRXJyb3I6IHBvcHBpbmcgdG9rZW4gJ2EnICg8Kj4vPGZpZWxkMj4vZSBwcmludGVyKQorU3RhY2sgbm93IDAKK0NsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIHRva2VuIFwkZW5kICgpCitTdGFjayBub3cgMAorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDo5MzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzE2NgorI0FUX1NUQVJUXzE2NworYXRfZm5fZ3JvdXBfYmFubmVyIDE2NyAnYWN0aW9ucy5hdDo5OTEnIFwKKyAgIkRlZmF1bHQgJXByaW50ZXIgYW5kICVkZXN0cnVjdG9yIGZvciB1c2VyLWRlZmluZWQgZW5kIHRva2VuIiAiIiA5CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTY3LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworIyBfQVRfQ0hFQ0tfREVGQVVMVF9QUklOVEVSX0FORF9ERVNUUlVDVE9SX0ZPUl9FTkRfVE9LRU4oVFlQRUQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisKKworCitjYXQgPmlucHV0MC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVlcnJvci12ZXJib3NlCislZGVidWcKKyVsb2NhdGlvbnMKKworJXsKKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyMgaW5jbHVkZSA8c3RkbGliLmg+CitzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKK3N0YXRpYyBpbnQgeXlsZXggKHZvaWQpOworIyBkZWZpbmUgVVNFKFNZTSkKKyV9CisKKyVkZXN0cnVjdG9yIHsKKyAgZnByaW50ZiAoeXlvdXRwdXQsICI8Kj4gZGVzdHJ1Y3RvciBzaG91bGQgbm90IGJlIGNhbGxlZC5cbiIpOworfSA8Kj4KKworJXRva2VuIEVORCAwCislcHJpbnRlciB7CisgIGZwcmludGYgKHl5b3V0cHV0LCAiPD4gZm9yICclYycgQCAlZCIsICQkLCBAJC5maXJzdF9jb2x1bW4pOworfSA8PgorJWRlc3RydWN0b3IgeworICBmcHJpbnRmIChzdGRvdXQsICI8PiBmb3IgJyVjJyBAICVkLlxuIiwgJCQsIEAkLmZpcnN0X2NvbHVtbik7Cit9IDw+CisKKyVwcmludGVyIHsKKyAgZnByaW50ZiAoeXlvdXRwdXQsICI8Kj4gcHJpbnRlciBzaG91bGQgbm90IGJlIGNhbGxlZC5cbiIpOworfSA8Kj4KKworCisKKworJSUKKworc3RhcnQ6IHsgJCQgPSAnUyc7IH0gOworCislJQorCitzdGF0aWMgaW50Cit5eWxleCAodm9pZCkKK3sKKyAgc3RhdGljIGludCBjYWxsZWQ7CisgIGlmIChjYWxsZWQrKykKKyAgICBhYm9ydCAoKTsKKyAgeXlsdmFsID0gJ0UnOworICB5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGxvYy5sYXN0X2xpbmUgPSAxOworICB5eWxsb2MuZmlyc3RfY29sdW1uID0geXlsbG9jLmxhc3RfY29sdW1uID0gMTsKKyAgcmV0dXJuIDA7Cit9CisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIFlZX0xPQ0FUSU9OX1BSSU5UIChzdGRlcnIsICh5eWxsb2MpKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiOiAiKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgeXlkZWJ1ZyA9IDE7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMDg3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQwLmMgaW5wdXQwLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJhY3Rpb25zLmF0OjEwODciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQwLmMgaW5wdXQwLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTA4NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTA4NzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQwLmMgaW5wdXQwLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQwLmMgaW5wdXQwLnkiICJhY3Rpb25zLmF0OjEwODciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQwLmMgaW5wdXQwLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTA4NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEwODc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0OjEwODciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMDg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMDg3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYWN0aW9ucy5hdDoxMDg3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTA4NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTA4NzogYmlzb24gLW8gaW5wdXQwLmMgaW5wdXQwLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0OjEwODciCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQwLmMgaW5wdXQwLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMDg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMDg3OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiYWN0aW9ucy5hdDoxMDg3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEwODciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMDg3OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0MCBpbnB1dDAuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dDAgaW5wdXQwLmMgJExJQlMiICJhY3Rpb25zLmF0OjEwODciCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0MCBpbnB1dDAuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMDg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTA4NzogIFwkUFJFUEFSU0VSIC4vaW5wdXQwIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0MCIgImFjdGlvbnMuYXQ6MTA4NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0MAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICI8PiBmb3IgJ0UnIEAgMS4KKzw+IGZvciAnUycgQCAxLgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMDg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTA4Nzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0OjEwODciCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJTdGFydGluZyBwYXJzZQorRW50ZXJpbmcgc3RhdGUgMAorUmVkdWNpbmcgc3RhY2sgYnkgcnVsZSAxIChsaW5lIDQyKToKKy0+IFwkXCQgPSBudGVybSBzdGFydCAoMS4xOiA8PiBmb3IgJ1MnIEAgMSkKK1N0YWNrIG5vdyAwCitFbnRlcmluZyBzdGF0ZSAxCitSZWFkaW5nIGEgdG9rZW46IE5vdyBhdCBlbmQgb2YgaW5wdXQuCitTaGlmdGluZyB0b2tlbiBFTkQgKDEuMTogPD4gZm9yICdFJyBAIDEpCitFbnRlcmluZyBzdGF0ZSAyCitTdGFjayBub3cgMCAxIDIKK0NsZWFudXA6IHBvcHBpbmcgdG9rZW4gRU5EICgxLjE6IDw+IGZvciAnRScgQCAxKQorQ2xlYW51cDogcG9wcGluZyBudGVybSBzdGFydCAoMS4xOiA8PiBmb3IgJ1MnIEAgMSkKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTA4NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworCisKKworCitjYXQgPmlucHV0MS55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVlcnJvci12ZXJib3NlCislZGVidWcKKyVsb2NhdGlvbnMKKworJXsKKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyMgaW5jbHVkZSA8c3RkbGliLmg+CitzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKK3N0YXRpYyBpbnQgeXlsZXggKHZvaWQpOworIyBkZWZpbmUgVVNFKFNZTSkKKyV9CisKKyVkZXN0cnVjdG9yIHsKKyAgZnByaW50ZiAoeXlvdXRwdXQsICI8PiBkZXN0cnVjdG9yIHNob3VsZCBub3QgYmUgY2FsbGVkLlxuIik7Cit9IDw+CisKKyV0b2tlbiBFTkQgMAorJXByaW50ZXIgeworICBmcHJpbnRmICh5eW91dHB1dCwgIjwqPiBmb3IgJyVjJyBAICVkIiwgJCQsIEAkLmZpcnN0X2NvbHVtbik7Cit9IDwqPgorJWRlc3RydWN0b3IgeworICBmcHJpbnRmIChzdGRvdXQsICI8Kj4gZm9yICclYycgQCAlZC5cbiIsICQkLCBAJC5maXJzdF9jb2x1bW4pOworfSA8Kj4KKworJXByaW50ZXIgeworICBmcHJpbnRmICh5eW91dHB1dCwgIjw+IHByaW50ZXIgc2hvdWxkIG5vdCBiZSBjYWxsZWQuXG4iKTsKK30gPD4KKworJXVuaW9uIHsgY2hhciB0YWc7IH0KKyV0eXBlIDx0YWc+IHN0YXJ0IEVORAorCislJQorCitzdGFydDogeyAkJCA9ICdTJzsgfSA7CisKKyUlCisKK3N0YXRpYyBpbnQKK3l5bGV4ICh2b2lkKQoreworICBzdGF0aWMgaW50IGNhbGxlZDsKKyAgaWYgKGNhbGxlZCsrKQorICAgIGFib3J0ICgpOworICB5eWx2YWwudGFnID0gJ0UnOworICB5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGxvYy5sYXN0X2xpbmUgPSAxOworICB5eWxsb2MuZmlyc3RfY29sdW1uID0geXlsbG9jLmxhc3RfY29sdW1uID0gMTsKKyAgcmV0dXJuIDA7Cit9CisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIFlZX0xPQ0FUSU9OX1BSSU5UIChzdGRlcnIsICh5eWxsb2MpKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiOiAiKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgeXlkZWJ1ZyA9IDE7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMDg4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQxLmMgaW5wdXQxLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJhY3Rpb25zLmF0OjEwODgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQxLmMgaW5wdXQxLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTA4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTA4ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQxLmMgaW5wdXQxLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQxLmMgaW5wdXQxLnkiICJhY3Rpb25zLmF0OjEwODgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQxLmMgaW5wdXQxLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTA4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEwODg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0OjEwODgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMDg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMDg4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYWN0aW9ucy5hdDoxMDg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTA4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTA4ODogYmlzb24gLW8gaW5wdXQxLmMgaW5wdXQxLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0OjEwODgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQxLmMgaW5wdXQxLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMDg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMDg4OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiYWN0aW9ucy5hdDoxMDg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEwODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMDg4OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0MSBpbnB1dDEuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dDEgaW5wdXQxLmMgJExJQlMiICJhY3Rpb25zLmF0OjEwODgiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0MSBpbnB1dDEuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMDg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTA4ODogIFwkUFJFUEFSU0VSIC4vaW5wdXQxIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0MSIgImFjdGlvbnMuYXQ6MTA4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0MQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICI8Kj4gZm9yICdFJyBAIDEuCis8Kj4gZm9yICdTJyBAIDEuCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEwODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMDg4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6MTA4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gIlN0YXJ0aW5nIHBhcnNlCitFbnRlcmluZyBzdGF0ZSAwCitSZWR1Y2luZyBzdGFjayBieSBydWxlIDEgKGxpbmUgNDIpOgorLT4gXCRcJCA9IG50ZXJtIHN0YXJ0ICgxLjE6IDwqPiBmb3IgJ1MnIEAgMSkKK1N0YWNrIG5vdyAwCitFbnRlcmluZyBzdGF0ZSAxCitSZWFkaW5nIGEgdG9rZW46IE5vdyBhdCBlbmQgb2YgaW5wdXQuCitTaGlmdGluZyB0b2tlbiBFTkQgKDEuMTogPCo+IGZvciAnRScgQCAxKQorRW50ZXJpbmcgc3RhdGUgMgorU3RhY2sgbm93IDAgMSAyCitDbGVhbnVwOiBwb3BwaW5nIHRva2VuIEVORCAoMS4xOiA8Kj4gZm9yICdFJyBAIDEpCitDbGVhbnVwOiBwb3BwaW5nIG50ZXJtIHN0YXJ0ICgxLjE6IDwqPiBmb3IgJ1MnIEAgMSkKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTA4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTY3CisjQVRfU1RBUlRfMTY4CithdF9mbl9ncm91cF9iYW5uZXIgMTY4ICdhY3Rpb25zLmF0OjEwOTgnIFwKKyAgIkRlZmF1bHQgJXByaW50ZXIgYW5kICVkZXN0cnVjdG9yIGFyZSBub3QgZm9yIGVycm9yIG9yIFwkdW5kZWZpbmVkIiAiIiA5CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTY4LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworIyBJZiBCaXNvbiB3ZXJlIHRvIGFwcGx5IHRoZSBkZWZhdWx0ICVwcmludGVyIGFuZCAlZGVzdHJ1Y3RvciB0byB0aGUgZXJyb3IKKyMgdG9rZW4gb3IgdG8gJHVuZGVmaW5lZDoKKyMgICAtIEZvciB0aGUgZXJyb3IgdG9rZW46CisjICAgICAtIEl0IHdvdWxkIGdlbmVyYXRlIHdhcm5pbmdzIGZvciB1bnVzZWQgJG4uCisjICAgICAtIEl0IHdvdWxkIGludm9rZSB0aGUgJXByaW50ZXIgYW5kICVkZXN0cnVjdG9yIG9uIHRoZSBlcnJvciB0b2tlbidzCisjICAgICAgIHNlbWFudGljIHZhbHVlLCB3aGljaCB3b3VsZCBiZSBpbml0aWFsaXplZCBmcm9tIHRoZSBsb29rYWhlYWQsIHdoaWNoCisjICAgICAgIHdvdWxkIGJlIGRlc3Ryb3llZCBzZXBhcmF0ZWx5LgorIyAgIC0gRm9yICR1bmRlZmluZWQsIHdobyBrbm93cyB3aGF0IHRoZSBzZW1hbnRpYyB2YWx1ZSB3b3VsZCBiZS4KKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVkZWJ1ZworCisleworIyBpbmNsdWRlIDxzdGRpby5oPgorIyBpbmNsdWRlIDxzdGRsaWIuaD4KK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworc3RhdGljIGludCB5eWxleCAodm9pZCk7CisjIGRlZmluZSBVU0UoU1lNKQorJX0KKworJXByaW50ZXIgeworICBmcHJpbnRmICh5eW91dHB1dCwgIiclYyciLCAkJCk7Cit9IDw+IDwqPgorJWRlc3RydWN0b3IgeworICBmcHJpbnRmIChzdGRlcnIsICJERVNUUk9ZICclYydcbiIsICQkKTsKK30gPD4gPCo+CisKKyUlCisKK3N0YXJ0OgorICB7ICQkID0gJ1MnOyB9CisgIC8qIEluIG9yZGVyIHRvIHJldmVhbCB0aGUgcHJvYmxlbXMgdGhhdCB0aGlzIGJ1ZyBjYXVzZWQgZHVyaW5nIHBhcnNpbmcsIGFkZAorICAgKiAkMiB0byBVU0UuICAqLworICB8ICdhJyBlcnJvciAnYicgJ2MnIHsgVVNFKCgkMSwgJDMsICQ0KSk7ICQkID0gJ1MnOyB9CisgIDsKKworJSUKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitzdGF0aWMKK2ludCB5eWxleCAodm9pZCkKK3sKKyAgc3RhdGljIGNoYXIgY29uc3QgaW5wdXRbXSA9ICJhYmQiOworICBzdGF0aWMgc2l6ZV90IHRva251bSA9IDA7CisgIGludCByZXM7CisgIDsKKyAgYXNzZXJ0ICh0b2tudW0gPCBzaXplb2YgaW5wdXQgLyBzaXplb2YgaW5wdXRbMF0pOworICByZXMgPSBpbnB1dFt0b2tudW0rK107CisgIHl5bHZhbCA9IHJlczsKKyAgcmV0dXJuIHJlczsKK30KK2ludAorbWFpbiAodm9pZCkKK3sKKyAgeXlkZWJ1ZyA9IDE7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMTQ4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiYWN0aW9ucy5hdDoxMTQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMTQ4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMTQ4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IiAiYWN0aW9ucy5hdDoxMTQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMTQ4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTE0ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6MTE0OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjExNDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjExNDg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0OjExNDgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMTQ4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMTQ4OiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0OjExNDgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTE0OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTE0OTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImFjdGlvbnMuYXQ6MTE0OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMTQ5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTE0OTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJhY3Rpb25zLmF0OjExNDkiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTE0OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjExNTA6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAiYWN0aW9ucy5hdDoxMTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTE1MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjExNTA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDoxMTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiU3RhcnRpbmcgcGFyc2UKK0VudGVyaW5nIHN0YXRlIDAKK1JlYWRpbmcgYSB0b2tlbjogTmV4dCB0b2tlbiBpcyB0b2tlbiAnYScgKCdhJykKK1NoaWZ0aW5nIHRva2VuICdhJyAoJ2EnKQorRW50ZXJpbmcgc3RhdGUgMQorUmVhZGluZyBhIHRva2VuOiBOZXh0IHRva2VuIGlzIHRva2VuICdiJyAoJ2InKQorc3ludGF4IGVycm9yCitTaGlmdGluZyB0b2tlbiBlcnJvciAoKQorRW50ZXJpbmcgc3RhdGUgMworTmV4dCB0b2tlbiBpcyB0b2tlbiAnYicgKCdiJykKK1NoaWZ0aW5nIHRva2VuICdiJyAoJ2InKQorRW50ZXJpbmcgc3RhdGUgNQorUmVhZGluZyBhIHRva2VuOiBOZXh0IHRva2VuIGlzIHRva2VuIFwkdW5kZWZpbmVkICgpCitFcnJvcjogcG9wcGluZyB0b2tlbiAnYicgKCdiJykKK0RFU1RST1kgJ2InCitTdGFjayBub3cgMCAxIDMKK0Vycm9yOiBwb3BwaW5nIHRva2VuIGVycm9yICgpCitTdGFjayBub3cgMCAxCitTaGlmdGluZyB0b2tlbiBlcnJvciAoKQorRW50ZXJpbmcgc3RhdGUgMworTmV4dCB0b2tlbiBpcyB0b2tlbiBcJHVuZGVmaW5lZCAoKQorRXJyb3I6IGRpc2NhcmRpbmcgdG9rZW4gXCR1bmRlZmluZWQgKCkKK0Vycm9yOiBwb3BwaW5nIHRva2VuIGVycm9yICgpCitTdGFjayBub3cgMCAxCitTaGlmdGluZyB0b2tlbiBlcnJvciAoKQorRW50ZXJpbmcgc3RhdGUgMworUmVhZGluZyBhIHRva2VuOiBOb3cgYXQgZW5kIG9mIGlucHV0LgorQ2xlYW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQgdG9rZW4gXCRlbmQgKCkKK1N0YWNrIG5vdyAwIDEgMworQ2xlYW51cDogcG9wcGluZyB0b2tlbiBlcnJvciAoKQorQ2xlYW51cDogcG9wcGluZyB0b2tlbiAnYScgKCdhJykKK0RFU1RST1kgJ2EnCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjExNTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xNjgKKyNBVF9TVEFSVF8xNjkKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxNjkgJ2FjdGlvbnMuYXQ6MTE5MycgXAorICAiRGVmYXVsdCAlcHJpbnRlciBhbmQgJWRlc3RydWN0b3IgYXJlIG5vdCBmb3IgXCRhY2NlcHQiICIiIDkKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxNjkuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisjIElmIFlZU1RZUEUgaXMgYSB1bmlvbiBhbmQgQmlzb24gd2VyZSB0byBhcHBseSB0aGUgZGVmYXVsdCAlcHJpbnRlciBhbmQKKyMgJWRlc3RydWN0b3IgdG8gJGFjY2VwdDoKKyMgICAtIFRoZSAlcHJpbnRlciBhbmQgJWRlc3RydWN0b3IgY29kZSBnZW5lcmF0ZWQgZm9yICRhY2NlcHQgd291bGQgYWx3YXlzIGJlCisjICAgICBkZWFkIGNvZGUgYmVjYXVzZSAkYWNjZXB0IGlzIGN1cnJlbnRseSBuZXZlciBzaGlmdGVkIG9udG8gdGhlIHN0YWNrLgorIyAgIC0gJCQgZm9yICRhY2NlcHQgd291bGQgYWx3YXlzIGJlIG9mIHR5cGUgWVlTVFlQRSBiZWNhdXNlIGl0J3Mgbm90IHBvc3NpYmxlCisjICAgICB0byBkZWNsYXJlIGAldHlwZSA8ZmllbGQ+ICRhY2NlcHQnLiAgKEFsc28gdHJ1ZSBmb3IgJHVuZGVmaW5lZC4pCisjICAgLSBUaHVzLCB0aGUgY29tcGlsZXIgbWlnaHQgY29tcGxhaW4gdGhhdCB0aGUgdXNlciBjb2RlIGFzc3VtZXMgdGhlIHdyb25nCisjICAgICB0eXBlIGZvciAkJCBzaW5jZSB0aGUgY29kZSBtaWdodCBhc3N1bWUgdGhlIHR5cGUgYXNzb2NpYXRlZCB3aXRoIGEKKyMgICAgIHNwZWNpZmljIHVuaW9uIGZpZWxkLCB3aGljaCBpcyBlc3BlY2lhbGx5IHJlYXNvbmFibGUgaW4gQysrIHNpbmNlIHRoYXQKKyMgICAgIHR5cGUgbWF5IGJlIGEgYmFzZSB0eXBlLiAgVGhpcyB0ZXN0IGNhc2UgY2hlY2tzIGZvciB0aGlzIHByb2JsZW0uICAoQWxzbworIyAgICAgdHJ1ZSBmb3IgJHVuZGVmaW5lZCBhbmQgdGhlIGVycm9yIHRva2VuLCBzbyB0aGVyZSBhcmUgdGhyZWUgd2FybmluZ3MgZm9yCisjICAgICAlcHJpbnRlciBhbmQgdGhyZWUgZm9yICVkZXN0cnVjdG9yLikKKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWRlYnVnIC8qIFNvIHRoYXQgJXByaW50ZXIgaXMgYWN0dWFsbHkgY29tcGlsZWQuICAqLworCisleworIyBpbmNsdWRlIDxzdGRpby5oPgorIyBpbmNsdWRlIDxzdGRsaWIuaD4KK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworc3RhdGljIGludCB5eWxleCAodm9pZCk7CisjIGRlZmluZSBVU0UoU1lNKQorJX0KKworJXByaW50ZXIgeworICBjaGFyIGNociA9ICQkOworICBmcHJpbnRmICh5eW91dHB1dCwgIiclYyciLCBjaHIpOworfSA8PiA8Kj4KKyVkZXN0cnVjdG9yIHsKKyAgY2hhciBjaHIgPSAkJDsKKyAgZnByaW50ZiAoc3RkZXJyLCAiREVTVFJPWSAnJWMnXG4iLCBjaHIpOworfSA8PiA8Kj4KKworJXVuaW9uIHsgY2hhciBjaHI7IH0KKyV0eXBlIDxjaHI+IHN0YXJ0CisKKyUlCisKK3N0YXJ0OiB7IFVTRSgkJCk7IH0gOworCislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKyNpbmNsdWRlIDxhc3NlcnQuaD4KK3N0YXRpYworaW50IHl5bGV4ICh2b2lkKQoreworICBzdGF0aWMgY2hhciBjb25zdCBpbnB1dFtdID0gIiI7CisgIHN0YXRpYyBzaXplX3QgdG9rbnVtID0gMDsKKyAgaW50IHJlczsKKyAgOworICBhc3NlcnQgKHRva251bSA8IHNpemVvZiBpbnB1dCAvIHNpemVvZiBpbnB1dFswXSk7CisgIHJlcyA9IGlucHV0W3Rva251bSsrXTsKKyAgOworICByZXR1cm4gcmVzOworfQoraW50CittYWluICh2b2lkKQoreworICByZXR1cm4geXlwYXJzZSAoKTsKK30KK19BVEVPRgorCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTI0NzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImFjdGlvbnMuYXQ6MTI0NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTI0NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTI0NzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgImFjdGlvbnMuYXQ6MTI0NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTI0NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEyNDc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0OjEyNDciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMjQ3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMjQ3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYWN0aW9ucy5hdDoxMjQ3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTI0NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTI0NzogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDoxMjQ3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEyNDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEyNDg6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJhY3Rpb25zLmF0OjEyNDgiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTI0OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEyNDg6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAiYWN0aW9ucy5hdDoxMjQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEyNDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTY5CisjQVRfU1RBUlRfMTcwCithdF9mbl9ncm91cF9iYW5uZXIgMTcwICdhY3Rpb25zLmF0OjEyNTgnIFwKKyAgIkRlZmF1bHQgJXByaW50ZXIgYW5kICVkZXN0cnVjdG9yIGZvciBtaWQtcnVsZSB2YWx1ZXMiICIiIDkKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxNzAuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislZGVidWcgLyogU28gdGhhdCAlcHJpbnRlciBpcyBhY3R1YWxseSBjb21waWxlZC4gICovCisKKyV7CisjIGluY2x1ZGUgPHN0ZGlvLmg+CisjIGluY2x1ZGUgPHN0ZGxpYi5oPgorc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CitzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKKyMgZGVmaW5lIFVTRShTWU0pCisjIGRlZmluZSBZWUxUWVBFIGludAorIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKSAodm9pZCkoUmhzKQorIyBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKQorJX0KKworJXByaW50ZXIgeyBmcHJpbnRmICh5eW91dHB1dCwgIiVkIiwgQCQpOyB9IDw+CislZGVzdHJ1Y3RvciB7IGZwcmludGYgKHN0ZGVyciwgIkRFU1RST1kgJWRcbiIsIEAkKTsgfSA8PgorJXByaW50ZXIgeyBmcHJpbnRmICh5eW91dHB1dCwgIjwqPiBwcmludGVyIHNob3VsZCBub3QgYmUgY2FsbGVkIik7IH0gPCo+CislZGVzdHJ1Y3RvciB7IGZwcmludGYgKHl5b3V0cHV0LCAiPCo+IGRlc3RydWN0b3Igc2hvdWxkIG5vdCBiZSBjYWxsZWQiKTsgfSA8Kj4KKworJSUKKworc3RhcnQ6CisgIHsgICAgICAgICAgIEAkID0gMTsgfSAvLyBOb3Qgc2V0IG9yIHVzZWQuCisgIHsgVVNFICgkJCk7IEAkID0gMjsgfSAvLyBCb3RoIHNldCBhbmQgdXNlZC4KKyAgeyBVU0UgKCQkKTsgQCQgPSAzOyB9IC8vIE9ubHkgc2V0LgorICB7ICAgICAgICAgICBAJCA9IDQ7IH0gLy8gT25seSB1c2VkLgorICAnYycKKyAgeyBVU0UgKCgkJCwgJDIsICQ0LCAkNSkpOyBAJCA9IDA7IH0KKyAgOworCislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKyNpbmNsdWRlIDxhc3NlcnQuaD4KK3N0YXRpYworaW50IHl5bGV4ICh2b2lkKQoreworICBzdGF0aWMgY2hhciBjb25zdCBpbnB1dFtdID0gIiI7CisgIHN0YXRpYyBzaXplX3QgdG9rbnVtID0gMDsKKyAgaW50IHJlczsKKyAgOworICBhc3NlcnQgKHRva251bSA8IHNpemVvZiBpbnB1dCAvIHNpemVvZiBpbnB1dFswXSk7CisgIHJlcyA9IGlucHV0W3Rva251bSsrXTsKKyAgOworICByZXR1cm4gcmVzOworfQoraW50CittYWluICh2b2lkKQoreworICB5eWRlYnVnID0gMTsKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzMDM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJhY3Rpb25zLmF0OjEzMDMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzMDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzMDM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiICJhY3Rpb25zLmF0OjEzMDMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzMDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzAzOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYWN0aW9ucy5hdDoxMzAzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTMwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTMwMzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6MTMwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzMDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzMDM6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6MTMwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OjMzLjMtMjM6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiBcJFwkCitpbnB1dC55OjMyLjMtMjM6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQzCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzMDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisjIERlZmluaW5nIFBPU0lYTFlfQ09SUkVDVCBjYXVzZXMgYmlzb24gdG8gY29tcGxhaW4gaWYgb3B0aW9ucyBhcmUKKyMgYWRkZWQgYWZ0ZXIgdGhlIGdyYW1tYXIgZmlsZSBuYW1lLCBzbyBza2lwIHRoZXNlIGNoZWNrcyBpbiB0aGF0CisjIGNhc2UuCitpZiB0ZXN0ICIkUE9TSVhMWV9DT1JSRUNUX0lTX0VYUE9SVEVEIiA9IGZhbHNlOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworCisgICMgVG8gYXZvaWQgZXhwYW5kaW5nIGl0IHJlcGVhdGVkbHksIHN0b3JlIHNwZWNpZmllZCBzdGRvdXQuCisgIDogPmV4cG91dAorCisgICMgUnVuIHdpdGggLVdlcnJvci4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTMwMzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSAtV2Vycm9yIiAiYWN0aW9ucy5hdDoxMzAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTMwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIEJ1aWxkIGV4cGVjdGVkIHN0ZGVyciB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSAid2FybmluZ3MgYmVpbmcKKyAgIyB0cmVhdGVkIGFzIGVycm9ycyIgbWVzc2FnZS4KKyAgY2F0ID5hdC1iaXNvbi1jaGVjay13YXJuaW5ncyA8PCdfQVRFT0YnCitpbnB1dC55OjMzLjMtMjM6IHdhcm5pbmc6IHVuc2V0IHZhbHVlOiAkJAoraW5wdXQueTozMi4zLTIzOiB3YXJuaW5nOiB1bnVzZWQgdmFsdWU6ICQzCitfQVRFT0YKKworICBhdF9iaXNvbl9jaGVja19maXJzdD1gc2VkIC1uIFwKKyAgICAnLzogd2FybmluZzogL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wPWBzZWQgLW4gXAorICAgICcvY29uZmxpY3RzOiBbMC05XS4qcmVkdWNlJC97PTtxO30nIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzYAorICA6ICR7YXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wOj0xfQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdF90bXAgLWx0ICRhdF9iaXNvbl9jaGVja19maXJzdDsgdGhlbgorICAgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PSRhdF9iaXNvbl9jaGVja19maXJzdF90bXAKKyAgZmkKKyAgaWYgdGVzdCAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLWd0IDE7IHRoZW4KKyAgICBzZWQgLW4gIjEsYGV4cHIgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0IC0gMWAicCBcCisgICAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+IGV4cGVycgorICBmaQorICBlY2hvICdiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMnID4+IGV4cGVycgorCisgICMgRmluaXNoIGJ1aWxkaW5nIGV4cGVjdGVkIHN0ZGVyciBhbmQgY2hlY2suICBVbmxpa2Ugd2FybmluZ3MsCisgICMgY29tcGxhaW50cyBjYXVzZSBiaXNvbiB0byBleGl0IGVhcmx5LiAgVGh1cywgd2l0aCAtV2Vycm9yLCBiaXNvbgorICAjIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHJlcG9ydCBhbGwgd2FybmluZ3MgdGhhdCBpdCBkb2VzIHdpdGhvdXQKKyAgIyAtV2Vycm9yLCBidXQgaXQgYXQgbGVhc3QgcmVwb3J0cyBvbmUuCisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YHNlZCAtbiAnJD0nIHN0ZGVycmAKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2xhc3Q6PTF9CisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YGV4cHIgJGF0X2Jpc29uX2NoZWNrX2xhc3QgLSAxYAorICBzZWQgLW4gIiRhdF9iaXNvbl9jaGVja19maXJzdCwkYXRfYmlzb25fY2hlY2tfbGFzdCJwIFwKKyAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+PiBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTMwMzogc2VkICdzLC4qL1xcKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1xcKVwkLFxcMSwnIFxcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiYWN0aW9ucy5hdDoxMzAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAncywuKi9cKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1wpJCxcMSwnIFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC0td2FybmluZ3M9ZXJyb3IuCisgIGNwIHN0ZGVyciBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTMwMzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1lcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yIiAiYWN0aW9ucy5hdDoxMzAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC1Xbm9uZSBhbmQgLS13YXJuaW5ncz1ub25lIGJ5IG1ha2luZyBzdXJlIHRoYXQKKyAgIyAtV2Vycm9yIGRvZXNuJ3QgY2hhbmdlIHRoZSBleGl0IHN0YXR1cyB3aGVuIC1Xbm9uZSBvcgorICAjIC0td2FybmluZ3M9bm9uZSBpcyBzcGVjaWZpZWQuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzMDM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIiAiYWN0aW9ucy5hdDoxMzAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTMwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTMwMzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiICJhY3Rpb25zLmF0OjEzMDMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzMDg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtZmNhcmV0IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImFjdGlvbnMuYXQ6MTMwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtZmNhcmV0IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzA4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZmNhcmV0IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZmNhcmV0IC1vIGlucHV0LmMgaW5wdXQueSIgImFjdGlvbnMuYXQ6MTMwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtZmNhcmV0IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTMwODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6MTMwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzMDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzMDg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0OjEzMDgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzA4OiBiaXNvbiAtZmNhcmV0IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6MTMwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtZmNhcmV0IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6MzMuMy0yMzogd2FybmluZzogdW5zZXQgdmFsdWU6IFwkXCQKKyAgIHsgICAgICAgICAgIEBcJCA9IDQ7IH0gLy8gT25seSB1c2VkLgorICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjMyLjMtMjM6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogXCQzCisgICB7IFVTRSAoXCRcJCk7IEBcJCA9IDM7IH0gLy8gT25seSBzZXQuCisgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl4KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTMwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyMgRGVmaW5pbmcgUE9TSVhMWV9DT1JSRUNUIGNhdXNlcyBiaXNvbiB0byBjb21wbGFpbiBpZiBvcHRpb25zIGFyZQorIyBhZGRlZCBhZnRlciB0aGUgZ3JhbW1hciBmaWxlIG5hbWUsIHNvIHNraXAgdGhlc2UgY2hlY2tzIGluIHRoYXQKKyMgY2FzZS4KK2lmIHRlc3QgIiRQT1NJWExZX0NPUlJFQ1RfSVNfRVhQT1JURUQiID0gZmFsc2U7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisKKyAgIyBUbyBhdm9pZCBleHBhbmRpbmcgaXQgcmVwZWF0ZWRseSwgc3RvcmUgc3BlY2lmaWVkIHN0ZG91dC4KKyAgOiA+ZXhwb3V0CisKKyAgIyBSdW4gd2l0aCAtV2Vycm9yLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzA4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgLW8gaW5wdXQuYyBpbnB1dC55IC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IC1vIGlucHV0LmMgaW5wdXQueSAtV2Vycm9yIiAiYWN0aW9ucy5hdDoxMzA4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnkgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgQnVpbGQgZXhwZWN0ZWQgc3RkZXJyIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlICJ3YXJuaW5ncyBiZWluZworICAjIHRyZWF0ZWQgYXMgZXJyb3JzIiBtZXNzYWdlLgorICBjYXQgPmF0LWJpc29uLWNoZWNrLXdhcm5pbmdzIDw8J19BVEVPRicKK2lucHV0Lnk6MzMuMy0yMzogd2FybmluZzogdW5zZXQgdmFsdWU6ICQkCisgICB7ICAgICAgICAgICBAJCA9IDQ7IH0gLy8gT25seSB1c2VkLgorICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitpbnB1dC55OjMyLjMtMjM6IHdhcm5pbmc6IHVudXNlZCB2YWx1ZTogJDMKKyAgIHsgVVNFICgkJCk7IEAkID0gMzsgfSAvLyBPbmx5IHNldC4KKyAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXgorX0FURU9GCisKKyAgYXRfYmlzb25fY2hlY2tfZmlyc3Q9YHNlZCAtbiBcCisgICAgJy86IHdhcm5pbmc6IC97PTtxO30nIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzYAorICA6ICR7YXRfYmlzb25fY2hlY2tfZmlyc3Q6PTF9CisgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcD1gc2VkIC1uIFwKKyAgICAnL2NvbmZsaWN0czogWzAtOV0uKnJlZHVjZSQvez07cTt9JyBhdC1iaXNvbi1jaGVjay13YXJuaW5nc2AKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcDo9MX0KKyAgaWYgdGVzdCAkYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wIC1sdCAkYXRfYmlzb25fY2hlY2tfZmlyc3Q7IHRoZW4KKyAgICBhdF9iaXNvbl9jaGVja19maXJzdD0kYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wCisgIGZpCisgIGlmIHRlc3QgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0IC1ndCAxOyB0aGVuCisgICAgc2VkIC1uICIxLGBleHByICRhdF9iaXNvbl9jaGVja19maXJzdCAtIDFgInAgXAorICAgICAgYXQtYmlzb24tY2hlY2std2FybmluZ3MgPiBleHBlcnIKKyAgZmkKKyAgZWNobyAnYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzJyA+PiBleHBlcnIKKworICAjIEZpbmlzaCBidWlsZGluZyBleHBlY3RlZCBzdGRlcnIgYW5kIGNoZWNrLiAgVW5saWtlIHdhcm5pbmdzLAorICAjIGNvbXBsYWludHMgY2F1c2UgYmlzb24gdG8gZXhpdCBlYXJseS4gIFRodXMsIHdpdGggLVdlcnJvciwgYmlzb24KKyAgIyBkb2VzIG5vdCBuZWNlc3NhcmlseSByZXBvcnQgYWxsIHdhcm5pbmdzIHRoYXQgaXQgZG9lcyB3aXRob3V0CisgICMgLVdlcnJvciwgYnV0IGl0IGF0IGxlYXN0IHJlcG9ydHMgb25lLgorICBhdF9iaXNvbl9jaGVja19sYXN0PWBzZWQgLW4gJyQ9JyBzdGRlcnJgCisgIDogJHthdF9iaXNvbl9jaGVja19sYXN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19sYXN0PWBleHByICRhdF9iaXNvbl9jaGVja19sYXN0IC0gMWAKKyAgc2VkIC1uICIkYXRfYmlzb25fY2hlY2tfZmlyc3QsJGF0X2Jpc29uX2NoZWNrX2xhc3QicCBcCisgICAgYXQtYmlzb24tY2hlY2std2FybmluZ3MgPj4gZXhwZXJyCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzMDg6IHNlZCAncywuKi9cXChiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnNcXClcJCxcXDEsJyBcXAorICAgICAgICAgICAgICBzdGRlcnIgMT4mMiIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImFjdGlvbnMuYXQ6MTMwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgJ3MsLiovXChiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnNcKSQsXDEsJyBcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCiskYXRfZGlmZiBleHBlcnIgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTMwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIE5vdyBjaGVjayAtLXdhcm5pbmdzPWVycm9yLgorICBjcCBzdGRlcnIgZXhwZXJyCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzMDg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1lcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgLW8gaW5wdXQuYyBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IiICJhY3Rpb25zLmF0OjEzMDgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IC1vIGlucHV0LmMgaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCiskYXRfZGlmZiBleHBlcnIgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTMwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIE5vdyBjaGVjayAtV25vbmUgYW5kIC0td2FybmluZ3M9bm9uZSBieSBtYWtpbmcgc3VyZSB0aGF0CisgICMgLVdlcnJvciBkb2Vzbid0IGNoYW5nZSB0aGUgZXhpdCBzdGF0dXMgd2hlbiAtV25vbmUgb3IKKyAgIyAtLXdhcm5pbmdzPW5vbmUgaXMgc3BlY2lmaWVkLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzA4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgLW8gaW5wdXQuYyBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnkgLVdub25lIC1XZXJyb3IiICJhY3Rpb25zLmF0OjEzMDgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IC1vIGlucHV0LmMgaW5wdXQueSAtV25vbmUgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzMDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzMDg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IC1vIGlucHV0LmMgaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvciIgImFjdGlvbnMuYXQ6MTMwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgLW8gaW5wdXQuYyBpbnB1dC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTMwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzMTc6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJhY3Rpb25zLmF0OjEzMTciCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTMxNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzMTc6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAiYWN0aW9ucy5hdDoxMzE3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzMTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzE4OiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgImFjdGlvbnMuYXQ6MTMxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjEzMTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxMzE4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6MTMxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gIlN0YXJ0aW5nIHBhcnNlCitFbnRlcmluZyBzdGF0ZSAwCitSZWR1Y2luZyBzdGFjayBieSBydWxlIDEgKGxpbmUgMzApOgorLT4gXCRcJCA9IG50ZXJtIFwkQDEgKDogKQorU3RhY2sgbm93IDAKK0VudGVyaW5nIHN0YXRlIDIKK1JlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgMiAobGluZSAzMSk6CistPiBcJFwkID0gbnRlcm0gQDIgKDogMikKK1N0YWNrIG5vdyAwIDIKK0VudGVyaW5nIHN0YXRlIDQKK1JlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgMyAobGluZSAzMik6CistPiBcJFwkID0gbnRlcm0gQDMgKDogMykKK1N0YWNrIG5vdyAwIDIgNAorRW50ZXJpbmcgc3RhdGUgNQorUmVkdWNpbmcgc3RhY2sgYnkgcnVsZSA0IChsaW5lIDMzKToKKy0+IFwkXCQgPSBudGVybSBANCAoOiA0KQorU3RhY2sgbm93IDAgMiA0IDUKK0VudGVyaW5nIHN0YXRlIDYKK1JlYWRpbmcgYSB0b2tlbjogTm93IGF0IGVuZCBvZiBpbnB1dC4KK3N5bnRheCBlcnJvcgorRXJyb3I6IHBvcHBpbmcgbnRlcm0gQDQgKDogNCkKK0RFU1RST1kgNAorU3RhY2sgbm93IDAgMiA0IDUKK0Vycm9yOiBwb3BwaW5nIG50ZXJtIEAzICg6IDMpCitERVNUUk9ZIDMKK1N0YWNrIG5vdyAwIDIgNAorRXJyb3I6IHBvcHBpbmcgbnRlcm0gQDIgKDogMikKK0RFU1RST1kgMgorU3RhY2sgbm93IDAgMgorRXJyb3I6IHBvcHBpbmcgbnRlcm0gXCRAMSAoOiApCitTdGFjayBub3cgMAorQ2xlYW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQgdG9rZW4gXCRlbmQgKDogKQorU3RhY2sgbm93IDAKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTMxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzE3MAorI0FUX1NUQVJUXzE3MQorYXRfZm5fZ3JvdXBfYmFubmVyIDE3MSAnYWN0aW9ucy5hdDoxNDA2JyBcCisgICJAXCQgaW4gJWluaXRpYWwtYWN0aW9uIGltcGxpZXMgJWxvY2F0aW9ucyIgIiAgICAgICAiIDkKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxNzEuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWNvZGUgeworICAjaW5jbHVkZSA8c3RkaW8uaD4KK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworc3RhdGljIGludCB5eWxleCAodm9pZCk7Cit9CisKKyVkZWJ1ZworCislaW5pdGlhbC1hY3Rpb24geworICBmcHJpbnRmIChzdGRlcnIsICIlZFxuIiwgQCQuZmlyc3RfbGluZSk7Cit9CisKKyUlCisKK3N0YXJ0OiAgOworCislJQorCitzdGF0aWMgaW50Cit5eWxleCAodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTQwNjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImFjdGlvbnMuYXQ6MTQwNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTQwNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTQwNjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgImFjdGlvbnMuYXQ6MTQwNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTQwNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MDY6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0OjE0MDYiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNDA2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNDA2OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYWN0aW9ucy5hdDoxNDA2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTQwNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTQwNjogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDoxNDA2IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MDYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MDY6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJhY3Rpb25zLmF0OjE0MDYiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTQwNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MDY6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAiYWN0aW9ucy5hdDoxNDA2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MDYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTcxCisjQVRfU1RBUlRfMTcyCithdF9mbl9ncm91cF9iYW5uZXIgMTcyICdhY3Rpb25zLmF0OjE0MDcnIFwKKyAgIkBcJCBpbiAlZGVzdHJ1Y3RvciBpbXBsaWVzICVsb2NhdGlvbnMiICIgICAgICAgICAgICIgOQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjE3Mi4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislY29kZSB7CisgICNpbmNsdWRlIDxzdGRpby5oPgorc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CitzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKK30KKworJWRlYnVnCisKKyVkZXN0cnVjdG9yIHsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJWRcbiIsIEAkLmZpcnN0X2xpbmUpOworfSBzdGFydAorCislJQorCitzdGFydDogIDsKKworJSUKKworc3RhdGljIGludAoreXlsZXggKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQoraW50CittYWluICh2b2lkKQoreworICByZXR1cm4geXlwYXJzZSAoKTsKK30KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MDc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJhY3Rpb25zLmF0OjE0MDciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MDc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiICJhY3Rpb25zLmF0OjE0MDciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNDA3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYWN0aW9ucy5hdDoxNDA3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTQwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTQwNzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6MTQwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MDc6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6MTQwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNDA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNDA3OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiYWN0aW9ucy5hdDoxNDA3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNDA3OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyIgImFjdGlvbnMuYXQ6MTQwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNDA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzE3MgorI0FUX1NUQVJUXzE3MworYXRfZm5fZ3JvdXBfYmFubmVyIDE3MyAnYWN0aW9ucy5hdDoxNDA4JyBcCisgICJAXCQgaW4gJXByaW50ZXIgaW1wbGllcyAlbG9jYXRpb25zIiAiICAgICAgICAgICAgICAiIDkKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxNzMuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWNvZGUgeworICAjaW5jbHVkZSA8c3RkaW8uaD4KK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworc3RhdGljIGludCB5eWxleCAodm9pZCk7Cit9CisKKyVkZWJ1ZworCislcHJpbnRlciB7CisgIGZwcmludGYgKHN0ZGVyciwgIiVkXG4iLCBAJC5maXJzdF9saW5lKTsKK30gc3RhcnQKKworJSUKKworc3RhcnQ6ICA7CisKKyUlCisKK3N0YXRpYyBpbnQKK3l5bGV4ICh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNDA4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiYWN0aW9ucy5hdDoxNDA4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNDA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNDA4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IiAiYWN0aW9ucy5hdDoxNDA4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNDA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTQwODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6MTQwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE0MDg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0OjE0MDgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNDA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNDA4OiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0OjE0MDgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTQwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTQwODogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImFjdGlvbnMuYXQ6MTQwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNDA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTQwODogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJhY3Rpb25zLmF0OjE0MDgiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTQwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xNzMKKyNBVF9TVEFSVF8xNzQKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxNzQgJ2FjdGlvbnMuYXQ6MTUyOScgXAorICAiUXVhbGlmaWVkIFwkXCQgaW4gYWN0aW9uczogeWFjYy5jIiAiICAgICAgICAgICAgICAgICIgOQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjE3NC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJXNrZWxldG9uICJ5YWNjLmMiCislZGVmaW5lcyAgIC8vIEZJWE1FOiBNYW5kYXRlZCBieSBsYWxyMS5jYyBpbiBCaXNvbiAyLjYuCislbG9jYXRpb25zIC8vIEZJWE1FOiBNYW5kYXRlZCBieSBsYWxyMS5jYyBpbiBCaXNvbiAyLjYuCislZGVidWcKKyVjb2RlIHJlcXVpcmVzCit7CisgIHR5cGVkZWYgc3RydWN0IHNlbV90eXBlCisgIHsKKyAgICBpbnQgaXZhbDsKKyAgICBmbG9hdCBmdmFsOworICB9IHNlbV90eXBlOworCisjIGRlZmluZSBZWVNUWVBFIHNlbV90eXBlCisKKworIyBpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZAorICByZXBvcnQgKEZJTEUqIHl5bywgaW50IGl2YWwsIGZsb2F0IGZ2YWwpCisgIHsKKyAgICBmcHJpbnRmICh5eW8sICJpdmFsOiAlZCwgZnZhbDogJTEuMWYiLCBpdmFsLCBmdmFsKTsKKyAgfQorCit9CisKKyVjb2RlCit7CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKK30KKworJXRva2VuIFVOVFlQRUQKKyV0b2tlbiA8aXZhbD4gSU5UCisldHlwZSA8ZnZhbD4gZmxvYXQKKyVwcmludGVyIHsgcmVwb3J0ICh5eW8sICQkLCAgICAgICAkPGZ2YWw+JCk7IH0gPGl2YWw+OworJXByaW50ZXIgeyByZXBvcnQgKHl5bywgJDxpdmFsPiQsICQkICAgICAgKTsgfSA8ZnZhbD47CislcHJpbnRlciB7IHJlcG9ydCAoeXlvLCAkPGl2YWw+JCwgJDxmdmFsPiQpOyB9IDw+OworCislaW5pdGlhbC1hY3Rpb24KK3sKKyAgJDxpdmFsPiQgPSA0MjsKKyAgJDxmdmFsPiQgPSA0LjI7Cit9CisKKyUlCitmbG9hdDogVU5UWVBFRCBJTlQKK3sKKyAgJCQgICAgICAgPSAkPGZ2YWw+MSArICQ8ZnZhbD4yOworICAkPGl2YWw+JCA9ICQ8aXZhbD4xICsgJDI7Cit9OworJSUKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgWVlfTE9DQVRJT05fUFJJTlQgKHN0ZGVyciwgKHl5bGxvYykpOworICBmcHJpbnRmIChzdGRlcnIsICI6ICIpOworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKyNpbmNsdWRlIDxhc3NlcnQuaD4KK3N0YXRpYworaW50IHl5bGV4ICh2b2lkKQoreworICBzdGF0aWMgaW50IGNvbnN0IGlucHV0W10gPSB7VU5UWVBFRCwgSU5ULCBFT0Z9OworICBzdGF0aWMgc2l6ZV90IHRva251bSA9IDA7CisgIGludCByZXM7CisgIDsKKyAgYXNzZXJ0ICh0b2tudW0gPCBzaXplb2YgaW5wdXQgLyBzaXplb2YgaW5wdXRbMF0pOworICByZXMgPSBpbnB1dFt0b2tudW0rK107CisgICh5eWx2YWwpLml2YWwgPSB0b2tudW0gKiAxMDsgKHl5bHZhbCkuZnZhbCA9IHRva251bSAvIDEwLjA7OworICAoeXlsbG9jKS5maXJzdF9saW5lID0gKHl5bGxvYykubGFzdF9saW5lID0gMTsKKyAgKHl5bGxvYykuZmlyc3RfY29sdW1uID0gKHl5bGxvYykubGFzdF9jb2x1bW4gPSB0b2tudW07CisgIHJldHVybiByZXM7Cit9CitpbnQKK21haW4gKHZvaWQpCit7CisgIHl5ZGVidWcgPSAxOworICByZXR1cm4geXlwYXJzZSAoKTsKK30KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1Mjk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJhY3Rpb25zLmF0OjE1MjkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1Mjk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiICJhY3Rpb25zLmF0OjE1MjkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTI5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYWN0aW9ucy5hdDoxNTI5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUyOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUyOTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6MTUyOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1Mjk6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6MTUyOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTI5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTI5OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiYWN0aW9ucy5hdDoxNTI5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTI5OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyIgImFjdGlvbnMuYXQ6MTUyOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTI5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTI5OiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgImFjdGlvbnMuYXQ6MTUyOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTI5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6MTUyOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTI5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIERvbid0IGJlIHRvbyBwaWNreSBvbiB0aGUgdHJhY2VzLCBHTFIgaXMgbm90IGV4YWN0bHkgdGhlIHNhbWUuICBLZWVwCisjIG9ubHkgdGhlIGxpbmVzIGZyb20gdGhlIHByaW50ZXIuCisjCisjIERvbid0IGNhcmUgYWJvdXQgbG9jYXRpb25zLiAgRklYTUU6IHJlbW92ZSB0aGVpciByZW1vdmFsIHdoZW4gQmlzb24KKyMgc3VwcG9ydHMgQysrIHdpdGhvdXQgbG9jYXRpb25zLgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUyOTogc2VkIC1uZSAncy8oWy0wLTkuXSo6IC8oLzsvaXZhbDovcCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDoxNTI5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAtbmUgJ3MvKFstMC05Ll0qOiAvKC87L2l2YWw6L3AnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIlJlYWRpbmcgYSB0b2tlbjogTmV4dCB0b2tlbiBpcyB0b2tlbiBVTlRZUEVEIChpdmFsOiAxMCwgZnZhbDogMC4xKQorU2hpZnRpbmcgdG9rZW4gVU5UWVBFRCAoaXZhbDogMTAsIGZ2YWw6IDAuMSkKK1JlYWRpbmcgYSB0b2tlbjogTmV4dCB0b2tlbiBpcyB0b2tlbiBJTlQgKGl2YWw6IDIwLCBmdmFsOiAwLjIpCitTaGlmdGluZyB0b2tlbiBJTlQgKGl2YWw6IDIwLCBmdmFsOiAwLjIpCisgICBcJDEgPSB0b2tlbiBVTlRZUEVEIChpdmFsOiAxMCwgZnZhbDogMC4xKQorICAgXCQyID0gdG9rZW4gSU5UIChpdmFsOiAyMCwgZnZhbDogMC4yKQorLT4gXCRcJCA9IG50ZXJtIGZsb2F0IChpdmFsOiAzMCwgZnZhbDogMC4zKQorQ2xlYW51cDogcG9wcGluZyBudGVybSBmbG9hdCAoaXZhbDogMzAsIGZ2YWw6IDAuMykKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUyOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTc0CisjQVRfU1RBUlRfMTc1CithdF9mbl9ncm91cF9iYW5uZXIgMTc1ICdhY3Rpb25zLmF0OjE1MzAnIFwKKyAgIlF1YWxpZmllZCBcJFwkIGluIGFjdGlvbnM6IGdsci5jIiAiICAgICAgICAgICAgICAgICAiIDkKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxNzUuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVza2VsZXRvbiAiZ2xyLmMiCislZGVmaW5lcyAgIC8vIEZJWE1FOiBNYW5kYXRlZCBieSBsYWxyMS5jYyBpbiBCaXNvbiAyLjYuCislbG9jYXRpb25zIC8vIEZJWE1FOiBNYW5kYXRlZCBieSBsYWxyMS5jYyBpbiBCaXNvbiAyLjYuCislZGVidWcKKyVjb2RlIHJlcXVpcmVzCit7CisgIHR5cGVkZWYgc3RydWN0IHNlbV90eXBlCisgIHsKKyAgICBpbnQgaXZhbDsKKyAgICBmbG9hdCBmdmFsOworICB9IHNlbV90eXBlOworCisjIGRlZmluZSBZWVNUWVBFIHNlbV90eXBlCisKKworIyBpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZAorICByZXBvcnQgKEZJTEUqIHl5bywgaW50IGl2YWwsIGZsb2F0IGZ2YWwpCisgIHsKKyAgICBmcHJpbnRmICh5eW8sICJpdmFsOiAlZCwgZnZhbDogJTEuMWYiLCBpdmFsLCBmdmFsKTsKKyAgfQorCit9CisKKyVjb2RlCit7CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKK30KKworJXRva2VuIFVOVFlQRUQKKyV0b2tlbiA8aXZhbD4gSU5UCisldHlwZSA8ZnZhbD4gZmxvYXQKKyVwcmludGVyIHsgcmVwb3J0ICh5eW8sICQkLCAgICAgICAkPGZ2YWw+JCk7IH0gPGl2YWw+OworJXByaW50ZXIgeyByZXBvcnQgKHl5bywgJDxpdmFsPiQsICQkICAgICAgKTsgfSA8ZnZhbD47CislcHJpbnRlciB7IHJlcG9ydCAoeXlvLCAkPGl2YWw+JCwgJDxmdmFsPiQpOyB9IDw+OworCislaW5pdGlhbC1hY3Rpb24KK3sKKyAgJDxpdmFsPiQgPSA0MjsKKyAgJDxmdmFsPiQgPSA0LjI7Cit9CisKKyUlCitmbG9hdDogVU5UWVBFRCBJTlQKK3sKKyAgJCQgICAgICAgPSAkPGZ2YWw+MSArICQ8ZnZhbD4yOworICAkPGl2YWw+JCA9ICQ8aXZhbD4xICsgJDI7Cit9OworJSUKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgWVlfTE9DQVRJT05fUFJJTlQgKHN0ZGVyciwgKHl5bGxvYykpOworICBmcHJpbnRmIChzdGRlcnIsICI6ICIpOworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKyNpbmNsdWRlIDxhc3NlcnQuaD4KK3N0YXRpYworaW50IHl5bGV4ICh2b2lkKQoreworICBzdGF0aWMgaW50IGNvbnN0IGlucHV0W10gPSB7VU5UWVBFRCwgSU5ULCBFT0Z9OworICBzdGF0aWMgc2l6ZV90IHRva251bSA9IDA7CisgIGludCByZXM7CisgIDsKKyAgYXNzZXJ0ICh0b2tudW0gPCBzaXplb2YgaW5wdXQgLyBzaXplb2YgaW5wdXRbMF0pOworICByZXMgPSBpbnB1dFt0b2tudW0rK107CisgICh5eWx2YWwpLml2YWwgPSB0b2tudW0gKiAxMDsgKHl5bHZhbCkuZnZhbCA9IHRva251bSAvIDEwLjA7OworICAoeXlsbG9jKS5maXJzdF9saW5lID0gKHl5bGxvYykubGFzdF9saW5lID0gMTsKKyAgKHl5bGxvYykuZmlyc3RfY29sdW1uID0gKHl5bGxvYykubGFzdF9jb2x1bW4gPSB0b2tudW07CisgIHJldHVybiByZXM7Cit9CitpbnQKK21haW4gKHZvaWQpCit7CisgIHl5ZGVidWcgPSAxOworICByZXR1cm4geXlwYXJzZSAoKTsKK30KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MzA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJhY3Rpb25zLmF0OjE1MzAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MzA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiICJhY3Rpb25zLmF0OjE1MzAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTMwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYWN0aW9ucy5hdDoxNTMwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUzMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUzMDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6MTUzMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MzA6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6MTUzMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTMwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTMwOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiYWN0aW9ucy5hdDoxNTMwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTMwOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyIgImFjdGlvbnMuYXQ6MTUzMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTMwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTMwOiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgImFjdGlvbnMuYXQ6MTUzMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTMwOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6MTUzMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTMwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIERvbid0IGJlIHRvbyBwaWNreSBvbiB0aGUgdHJhY2VzLCBHTFIgaXMgbm90IGV4YWN0bHkgdGhlIHNhbWUuICBLZWVwCisjIG9ubHkgdGhlIGxpbmVzIGZyb20gdGhlIHByaW50ZXIuCisjCisjIERvbid0IGNhcmUgYWJvdXQgbG9jYXRpb25zLiAgRklYTUU6IHJlbW92ZSB0aGVpciByZW1vdmFsIHdoZW4gQmlzb24KKyMgc3VwcG9ydHMgQysrIHdpdGhvdXQgbG9jYXRpb25zLgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUzMDogc2VkIC1uZSAncy8oWy0wLTkuXSo6IC8oLzsvaXZhbDovcCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDoxNTMwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAtbmUgJ3MvKFstMC05Ll0qOiAvKC87L2l2YWw6L3AnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIlJlYWRpbmcgYSB0b2tlbjogTmV4dCB0b2tlbiBpcyB0b2tlbiBVTlRZUEVEIChpdmFsOiAxMCwgZnZhbDogMC4xKQorU2hpZnRpbmcgdG9rZW4gVU5UWVBFRCAoaXZhbDogMTAsIGZ2YWw6IDAuMSkKK1JlYWRpbmcgYSB0b2tlbjogTmV4dCB0b2tlbiBpcyB0b2tlbiBJTlQgKGl2YWw6IDIwLCBmdmFsOiAwLjIpCitTaGlmdGluZyB0b2tlbiBJTlQgKGl2YWw6IDIwLCBmdmFsOiAwLjIpCisgICBcJDEgPSB0b2tlbiBVTlRZUEVEIChpdmFsOiAxMCwgZnZhbDogMC4xKQorICAgXCQyID0gdG9rZW4gSU5UIChpdmFsOiAyMCwgZnZhbDogMC4yKQorLT4gXCRcJCA9IG50ZXJtIGZsb2F0IChpdmFsOiAzMCwgZnZhbDogMC4zKQorQ2xlYW51cDogcG9wcGluZyBudGVybSBmbG9hdCAoaXZhbDogMzAsIGZ2YWw6IDAuMykKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUzMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTc1CisjQVRfU1RBUlRfMTc2CithdF9mbl9ncm91cF9iYW5uZXIgMTc2ICdhY3Rpb25zLmF0OjE1MzEnIFwKKyAgIlF1YWxpZmllZCBcJFwkIGluIGFjdGlvbnM6IGxhbHIxLmNjIiAiICAgICAgICAgICAgICAiIDkKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxNzYuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVza2VsZXRvbiAibGFscjEuY2MiCislZGVmaW5lcyAgIC8vIEZJWE1FOiBNYW5kYXRlZCBieSBsYWxyMS5jYyBpbiBCaXNvbiAyLjYuCislbG9jYXRpb25zIC8vIEZJWE1FOiBNYW5kYXRlZCBieSBsYWxyMS5jYyBpbiBCaXNvbiAyLjYuCislZGVidWcKKyVjb2RlIHJlcXVpcmVzCit7CisgIHR5cGVkZWYgc3RydWN0IHNlbV90eXBlCisgIHsKKyAgICBpbnQgaXZhbDsKKyAgICBmbG9hdCBmdmFsOworICB9IHNlbV90eXBlOworCisjIGRlZmluZSBZWVNUWVBFIHNlbV90eXBlCisKKworIyBpbmNsdWRlIDxpb3N0cmVhbT4KKyAgc3RhdGljIHZvaWQKKyAgcmVwb3J0IChzdGQ6Om9zdHJlYW0mIHl5bywgaW50IGl2YWwsIGZsb2F0IGZ2YWwpCisgIHsKKyAgICB5eW8gPDwgIml2YWw6ICIgPDwgaXZhbCA8PCAiLCBmdmFsOiAiIDw8ICBmdmFsOworICB9CisKK30KKworJWNvZGUKK3sKKworICBzdGF0aWMgaW50IHl5bGV4ICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgeXk6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApOworfQorCisldG9rZW4gVU5UWVBFRAorJXRva2VuIDxpdmFsPiBJTlQKKyV0eXBlIDxmdmFsPiBmbG9hdAorJXByaW50ZXIgeyByZXBvcnQgKHl5bywgJCQsICAgICAgICQ8ZnZhbD4kKTsgfSA8aXZhbD47CislcHJpbnRlciB7IHJlcG9ydCAoeXlvLCAkPGl2YWw+JCwgJCQgICAgICApOyB9IDxmdmFsPjsKKyVwcmludGVyIHsgcmVwb3J0ICh5eW8sICQ8aXZhbD4kLCAkPGZ2YWw+JCk7IH0gPD47CisKKyVpbml0aWFsLWFjdGlvbgoreworICAkPGl2YWw+JCA9IDQyOworICAkPGZ2YWw+JCA9IDQuMjsKK30KKworJSUKK2Zsb2F0OiBVTlRZUEVEIElOVAoreworICAkJCAgICAgICA9ICQ8ZnZhbD4xICsgJDxmdmFsPjI7CisgICQ8aXZhbD4kID0gJDxpdmFsPjEgKyAkMjsKK307CislJQorLyogQSBDKysgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3ZvaWQKK3l5OjpwYXJzZXI6OmVycm9yIChjb25zdCBsb2NhdGlvbl90eXBlJiBsLCBjb25zdCBzdGQ6OnN0cmluZyYgbSkKK3sKKyAgKHZvaWQpIGw7CisgIHN0ZDo6Y2VyciA8PCBsIDw8ICI6ICIgPDwgbSA8PCBzdGQ6OmVuZGw7Cit9CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitzdGF0aWMKK2ludCB5eWxleCAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKQoreworICBzdGF0aWMgaW50IGNvbnN0IGlucHV0W10gPSB7eXk6OnBhcnNlcjo6dG9rZW46OlVOVFlQRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5eTo6cGFyc2VyOjp0b2tlbjo6SU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVPRn07CisgIHN0YXRpYyBzaXplX3QgdG9rbnVtID0gMDsKKyAgaW50IHJlczsKKyAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKKyAgYXNzZXJ0ICh0b2tudW0gPCBzaXplb2YgaW5wdXQgLyBzaXplb2YgaW5wdXRbMF0pOworICByZXMgPSBpbnB1dFt0b2tudW0rK107CisgICgqbHZhbHApLml2YWwgPSB0b2tudW0gKiAxMDsgKCpsdmFscCkuZnZhbCA9IHRva251bSAvIDEwLjA7OworICAoKmxsb2NwKS5iZWdpbi5saW5lID0gKCpsbG9jcCkuZW5kLmxpbmUgPSAxOworICAoKmxsb2NwKS5iZWdpbi5jb2x1bW4gPSAoKmxsb2NwKS5lbmQuY29sdW1uID0gdG9rbnVtOworICByZXR1cm4gcmVzOworfQoraW50CittYWluICh2b2lkKQoreworICB5eTo6cGFyc2VyIHA7CisgIHAuc2V0X2RlYnVnX2xldmVsKDEpOworICByZXR1cm4gcC5wYXJzZSAoKTsKK30KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MzE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiYWN0aW9ucy5hdDoxNTMxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUzMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUzMTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuY2MgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jYyBpbnB1dC55IiAiYWN0aW9ucy5hdDoxNTMxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUzMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MzE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0OjE1MzEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTMxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTMxOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYWN0aW9ucy5hdDoxNTMxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUzMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUzMTogYmlzb24gLW8gaW5wdXQuY2MgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6MTUzMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUzMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTMxOiBcJEJJU09OX0NYWF9XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NYWF9XT1JLUyIgImFjdGlvbnMuYXQ6MTUzMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ1hYX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MzEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTMxOiBcJENYWCBcJENYWEZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmNjIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmNjICRMSUJTIiAiYWN0aW9ucy5hdDoxNTMxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTMxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTMxOiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgImFjdGlvbnMuYXQ6MTUzMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MzEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTMxOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6MTUzMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTMxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIERvbid0IGJlIHRvbyBwaWNreSBvbiB0aGUgdHJhY2VzLCBHTFIgaXMgbm90IGV4YWN0bHkgdGhlIHNhbWUuICBLZWVwCisjIG9ubHkgdGhlIGxpbmVzIGZyb20gdGhlIHByaW50ZXIuCisjCisjIERvbid0IGNhcmUgYWJvdXQgbG9jYXRpb25zLiAgRklYTUU6IHJlbW92ZSB0aGVpciByZW1vdmFsIHdoZW4gQmlzb24KKyMgc3VwcG9ydHMgQysrIHdpdGhvdXQgbG9jYXRpb25zLgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUzMTogc2VkIC1uZSAncy8oWy0wLTkuXSo6IC8oLzsvaXZhbDovcCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDoxNTMxIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAtbmUgJ3MvKFstMC05Ll0qOiAvKC87L2l2YWw6L3AnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIlJlYWRpbmcgYSB0b2tlbjogTmV4dCB0b2tlbiBpcyB0b2tlbiBVTlRZUEVEIChpdmFsOiAxMCwgZnZhbDogMC4xKQorU2hpZnRpbmcgdG9rZW4gVU5UWVBFRCAoaXZhbDogMTAsIGZ2YWw6IDAuMSkKK1JlYWRpbmcgYSB0b2tlbjogTmV4dCB0b2tlbiBpcyB0b2tlbiBJTlQgKGl2YWw6IDIwLCBmdmFsOiAwLjIpCitTaGlmdGluZyB0b2tlbiBJTlQgKGl2YWw6IDIwLCBmdmFsOiAwLjIpCisgICBcJDEgPSB0b2tlbiBVTlRZUEVEIChpdmFsOiAxMCwgZnZhbDogMC4xKQorICAgXCQyID0gdG9rZW4gSU5UIChpdmFsOiAyMCwgZnZhbDogMC4yKQorLT4gXCRcJCA9IG50ZXJtIGZsb2F0IChpdmFsOiAzMCwgZnZhbDogMC4zKQorQ2xlYW51cDogcG9wcGluZyBudGVybSBmbG9hdCAoaXZhbDogMzAsIGZ2YWw6IDAuMykKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUzMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTc2CisjQVRfU1RBUlRfMTc3CithdF9mbl9ncm91cF9iYW5uZXIgMTc3ICdhY3Rpb25zLmF0OjE1MzInIFwKKyAgIlF1YWxpZmllZCBcJFwkIGluIGFjdGlvbnM6IGdsci5jYyIgIiAgICAgICAgICAgICAgICAiIDkKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxNzcuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVza2VsZXRvbiAiZ2xyLmNjIgorJWRlZmluZXMgICAvLyBGSVhNRTogTWFuZGF0ZWQgYnkgbGFscjEuY2MgaW4gQmlzb24gMi42LgorJWxvY2F0aW9ucyAvLyBGSVhNRTogTWFuZGF0ZWQgYnkgbGFscjEuY2MgaW4gQmlzb24gMi42LgorJWRlYnVnCislY29kZSByZXF1aXJlcworeworICB0eXBlZGVmIHN0cnVjdCBzZW1fdHlwZQorICB7CisgICAgaW50IGl2YWw7CisgICAgZmxvYXQgZnZhbDsKKyAgfSBzZW1fdHlwZTsKKworIyBkZWZpbmUgWVlTVFlQRSBzZW1fdHlwZQorCisKKyMgaW5jbHVkZSA8aW9zdHJlYW0+CisgIHN0YXRpYyB2b2lkCisgIHJlcG9ydCAoc3RkOjpvc3RyZWFtJiB5eW8sIGludCBpdmFsLCBmbG9hdCBmdmFsKQorICB7CisgICAgeXlvIDw8ICJpdmFsOiAiIDw8IGl2YWwgPDwgIiwgZnZhbDogIiA8PCAgZnZhbDsKKyAgfQorCit9CisKKyVjb2RlCit7CisKKyAgc3RhdGljIGludCB5eWxleCAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKTsKK30KKworJXRva2VuIFVOVFlQRUQKKyV0b2tlbiA8aXZhbD4gSU5UCisldHlwZSA8ZnZhbD4gZmxvYXQKKyVwcmludGVyIHsgcmVwb3J0ICh5eW8sICQkLCAgICAgICAkPGZ2YWw+JCk7IH0gPGl2YWw+OworJXByaW50ZXIgeyByZXBvcnQgKHl5bywgJDxpdmFsPiQsICQkICAgICAgKTsgfSA8ZnZhbD47CislcHJpbnRlciB7IHJlcG9ydCAoeXlvLCAkPGl2YWw+JCwgJDxmdmFsPiQpOyB9IDw+OworCislaW5pdGlhbC1hY3Rpb24KK3sKKyAgJDxpdmFsPiQgPSA0MjsKKyAgJDxmdmFsPiQgPSA0LjI7Cit9CisKKyUlCitmbG9hdDogVU5UWVBFRCBJTlQKK3sKKyAgJCQgICAgICAgPSAkPGZ2YWw+MSArICQ8ZnZhbD4yOworICAkPGl2YWw+JCA9ICQ8aXZhbD4xICsgJDI7Cit9OworJSUKKy8qIEEgQysrIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCit2b2lkCit5eTo6cGFyc2VyOjplcnJvciAoY29uc3QgbG9jYXRpb25fdHlwZSYgbCwgY29uc3Qgc3RkOjpzdHJpbmcmIG0pCit7CisgICh2b2lkKSBsOworICBzdGQ6OmNlcnIgPDwgbCA8PCAiOiAiIDw8IG0gPDwgc3RkOjplbmRsOworfQorI2luY2x1ZGUgPGFzc2VydC5oPgorc3RhdGljCitpbnQgeXlsZXggKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCB5eTo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCkKK3sKKyAgc3RhdGljIGludCBjb25zdCBpbnB1dFtdID0ge3l5OjpwYXJzZXI6OnRva2VuOjpVTlRZUEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXk6OnBhcnNlcjo6dG9rZW46OklOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFT0Z9OworICBzdGF0aWMgc2l6ZV90IHRva251bSA9IDA7CisgIGludCByZXM7CisgICh2b2lkKSBsdmFscDsodm9pZCkgbGxvY3A7CisgIGFzc2VydCAodG9rbnVtIDwgc2l6ZW9mIGlucHV0IC8gc2l6ZW9mIGlucHV0WzBdKTsKKyAgcmVzID0gaW5wdXRbdG9rbnVtKytdOworICAoKmx2YWxwKS5pdmFsID0gdG9rbnVtICogMTA7ICgqbHZhbHApLmZ2YWwgPSB0b2tudW0gLyAxMC4wOzsKKyAgKCpsbG9jcCkuYmVnaW4ubGluZSA9ICgqbGxvY3ApLmVuZC5saW5lID0gMTsKKyAgKCpsbG9jcCkuYmVnaW4uY29sdW1uID0gKCpsbG9jcCkuZW5kLmNvbHVtbiA9IHRva251bTsKKyAgcmV0dXJuIHJlczsKK30KK2ludAorbWFpbiAodm9pZCkKK3sKKyAgeXk6OnBhcnNlciBwOworICBwLnNldF9kZWJ1Z19sZXZlbCgxKTsKKyAgcmV0dXJuIHAucGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTMyOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuY2MgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImFjdGlvbnMuYXQ6MTUzMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MzI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuY2MgaW5wdXQueSIgImFjdGlvbnMuYXQ6MTUzMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTMyOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYWN0aW9ucy5hdDoxNTMyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUzMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUzMjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6MTUzMiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MzI6IGJpc29uIC1vIGlucHV0LmNjIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0OjE1MzIiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuY2MgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUzMjogXCRCSVNPTl9DWFhfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DWFhfV09SS1MiICJhY3Rpb25zLmF0OjE1MzIiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NYWF9XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTMyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUzMjogXCRDWFggXCRDWFhGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyAkTElCUyIgImFjdGlvbnMuYXQ6MTUzMiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuY2MgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUzMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUzMjogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJhY3Rpb25zLmF0OjE1MzIiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTMyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUzMjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0OjE1MzIiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTUzMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBEb24ndCBiZSB0b28gcGlja3kgb24gdGhlIHRyYWNlcywgR0xSIGlzIG5vdCBleGFjdGx5IHRoZSBzYW1lLiAgS2VlcAorIyBvbmx5IHRoZSBsaW5lcyBmcm9tIHRoZSBwcmludGVyLgorIworIyBEb24ndCBjYXJlIGFib3V0IGxvY2F0aW9ucy4gIEZJWE1FOiByZW1vdmUgdGhlaXIgcmVtb3ZhbCB3aGVuIEJpc29uCisjIHN1cHBvcnRzIEMrKyB3aXRob3V0IGxvY2F0aW9ucy4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MzI6IHNlZCAtbmUgJ3MvKFstMC05Ll0qOiAvKC87L2l2YWw6L3AnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6MTUzMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgLW5lICdzLyhbLTAtOS5dKjogLygvOy9pdmFsOi9wJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJSZWFkaW5nIGEgdG9rZW46IE5leHQgdG9rZW4gaXMgdG9rZW4gVU5UWVBFRCAoaXZhbDogMTAsIGZ2YWw6IDAuMSkKK1NoaWZ0aW5nIHRva2VuIFVOVFlQRUQgKGl2YWw6IDEwLCBmdmFsOiAwLjEpCitSZWFkaW5nIGEgdG9rZW46IE5leHQgdG9rZW4gaXMgdG9rZW4gSU5UIChpdmFsOiAyMCwgZnZhbDogMC4yKQorU2hpZnRpbmcgdG9rZW4gSU5UIChpdmFsOiAyMCwgZnZhbDogMC4yKQorICAgXCQxID0gdG9rZW4gVU5UWVBFRCAoaXZhbDogMTAsIGZ2YWw6IDAuMSkKKyAgIFwkMiA9IHRva2VuIElOVCAoaXZhbDogMjAsIGZ2YWw6IDAuMikKKy0+IFwkXCQgPSBudGVybSBmbG9hdCAoaXZhbDogMzAsIGZ2YWw6IDAuMykKK0NsZWFudXA6IHBvcHBpbmcgbnRlcm0gZmxvYXQgKGl2YWw6IDMwLCBmdmFsOiAwLjMpCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1MzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzE3NworI0FUX1NUQVJUXzE3OAorYXRfZm5fZ3JvdXBfYmFubmVyIDE3OCAnYWN0aW9ucy5hdDoxNTQwJyBcCisgICJGaXggdXNlciBhY3Rpb25zIHdpdGhvdXQgYSB0cmFpbGluZyBzZW1pY29sb24iICIgICIgOQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjE3OC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKyMgVGhpcyBmZWF0dXJlIGlzIHVuZG9jdW1lbnRlZCwgYnV0IHdlIGFjY2lkZW50YWxseSBicm9rZSBpdCBpbiAyLjNhLAorIyBhbmQgdGhlcmUgd2FzIGEgY29tcGxhaW50IGF0OgorIyA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1iaXNvbi8yMDA4LTExL21zZzAwMDAxLmh0bWw+LgorCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJSUKK3N0YXJ0OiB0ZXN0MiB0ZXN0MSB0ZXN0MCB0ZXN0YzsKKwordGVzdDIKKzogJ2EnIHsgc2VtaTsJCQkvKiBURVNUOk46MiAqLyB9Cit8ICdiJyB7IGlmICgwKSB7bm9fc2VtaX0JLyogVEVTVDpOOjIgKi8gfQorfCAnYycgeyBpZiAoMCkge3NlbWk7fQkJLyogVEVTVDpOOjIgKi8gfQorfCAnZCcgeyBzZW1pOyAgIG5vX3NlbWkJCS8qIFRFU1Q6WToyICovIH0KK3wgJ2UnIHsgc2VtaSgpOyBub19zZW1pKCkJLyogVEVTVDpZOjIgKi8gfQorfCAnZicgeyBzZW1pW107IG5vX3NlbWlbXQkvKiBURVNUOlk6MiAqLyB9Cit8ICdnJyB7IHNlbWkrKzsgbm9fc2VtaSsrCS8qIFRFU1Q6WToyICovIH0KK3wgJ2gnIHsge25vX3NlbWl9IG5vX3NlbWkJLyogVEVTVDpZOjIgKi8gfQorfCAnaScgeyB7c2VtaTt9ICAgbm9fc2VtaQkvKiBURVNUOlk6MiAqLyB9Cis7Cit0ZXN0MQorICA6ICdhJyB7IHNlbWk7CQkJLy8gVEVTVDpOOjEgOworfSB8ICdiJyB7IGlmICgwKSB7bm9fc2VtaX0JLy8gVEVTVDpOOjEgOworfSB8ICdjJyB7IGlmICgwKSB7c2VtaTt9CS8vIFRFU1Q6TjoxIDsKK30gfCAnZCcgeyBzZW1pOyAgIG5vX3NlbWkJLy8gVEVTVDpZOjEgOworfSB8ICdlJyB7IHNlbWkoKTsgbm9fc2VtaSgpCS8vIFRFU1Q6WToxIDsKK30gfCAnZicgeyBzZW1pW107IG5vX3NlbWlbXQkvLyBURVNUOlk6MSA7Cit9IHwgJ2cnIHsgc2VtaSsrOyBub19zZW1pKysJLy8gVEVTVDpZOjEgOworfSB8ICdoJyB7IHtub19zZW1pfSBub19zZW1pCS8vIFRFU1Q6WToxIDsKK30gfCAnaScgeyB7c2VtaTt9ICAgbm9fc2VtaQkvLyBURVNUOlk6MSA7Cit9IDsKK3Rlc3QwCisgIDogJ2EnIHsgc2VtaTsJCQkvLyBURVNUOk46MSB7fQorfSB8ICdiJyB7IGlmICgwKSB7bm9fc2VtaX0JLy8gVEVTVDpOOjEge30KK30gfCAnYycgeyBpZiAoMCkge3NlbWk7fQkvLyBURVNUOk46MSB7fQorfSB8ICdkJyB7IHNlbWk7ICAgbm9fc2VtaQkvLyBURVNUOlk6MSB7fQorfSB8ICdlJyB7IHNlbWkoKTsgbm9fc2VtaSgpCS8vIFRFU1Q6WToxIHt9Cit9IHwgJ2YnIHsgc2VtaVtdOyBub19zZW1pW10JLy8gVEVTVDpZOjEge30KK30gfCAnZycgeyBzZW1pKys7IG5vX3NlbWkrKwkvLyBURVNUOlk6MSB7fQorfSB8ICdoJyB7IHtub19zZW1pfSBub19zZW1pCS8vIFRFU1Q6WToxIHt9Cit9IHwgJ2knIHsge3NlbWk7fSAgIG5vX3NlbWkJLy8gVEVTVDpZOjEge30KK30gOworCit0ZXN0YworOiAnYScgeworI2RlZmluZSBURVNUX01BQ1JPX04gXAorW10iYnJva2VuXCIgJCBAICQkIEAkIFtdO1wKK3N0cmluZzsifQorfCAnYicgeworbm9fc2VtaQorI2RlZmluZSBURVNUX01BQ1JPX04gXAorW10iYnJva2VuXCIgJCBAICQkIEAkIFtdO1wKK3N0cmluZzsifQorX0FURU9GCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTU5NzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImFjdGlvbnMuYXQ6MTU5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTU5NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTU5NzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgImFjdGlvbnMuYXQ6MTU5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTU5NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1OTc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0OjE1OTciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTk3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYWN0aW9ucy5hdDoxNTk3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTU5NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTU5NzogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDoxNTk3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6OC40ODogd2FybmluZzogYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUKK2lucHV0Lnk6OC40ODogICAgIGZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JworaW5wdXQueTo5LjQ4OiB3YXJuaW5nOiBhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZQoraW5wdXQueTo5LjQ4OiAgICAgZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnCitpbnB1dC55OjEwLjQ4OiB3YXJuaW5nOiBhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZQoraW5wdXQueToxMC40ODogICAgIGZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JworaW5wdXQueToxMS40ODogd2FybmluZzogYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUKK2lucHV0Lnk6MTEuNDg6ICAgICBmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24gd2lsbCBub3QgYWRkIHRoZSAnOycKK2lucHV0Lnk6MTIuNDg6IHdhcm5pbmc6IGEgJzsnIG1pZ2h0IGJlIG5lZWRlZCBhdCB0aGUgZW5kIG9mIGFjdGlvbiBjb2RlCitpbnB1dC55OjEyLjQ4OiAgICAgZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnCitpbnB1dC55OjEzLjQ4OiB3YXJuaW5nOiBhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZQoraW5wdXQueToxMy40ODogICAgIGZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JworaW5wdXQueToyMC4xOiB3YXJuaW5nOiBhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZQoraW5wdXQueToyMC4xOiAgICAgZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnCitpbnB1dC55OjIxLjE6IHdhcm5pbmc6IGEgJzsnIG1pZ2h0IGJlIG5lZWRlZCBhdCB0aGUgZW5kIG9mIGFjdGlvbiBjb2RlCitpbnB1dC55OjIxLjE6ICAgICBmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24gd2lsbCBub3QgYWRkIHRoZSAnOycKK2lucHV0Lnk6MjIuMTogd2FybmluZzogYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUKK2lucHV0Lnk6MjIuMTogICAgIGZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JworaW5wdXQueToyMy4xOiB3YXJuaW5nOiBhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZQoraW5wdXQueToyMy4xOiAgICAgZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnCitpbnB1dC55OjI0LjE6IHdhcm5pbmc6IGEgJzsnIG1pZ2h0IGJlIG5lZWRlZCBhdCB0aGUgZW5kIG9mIGFjdGlvbiBjb2RlCitpbnB1dC55OjI0LjE6ICAgICBmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24gd2lsbCBub3QgYWRkIHRoZSAnOycKK2lucHV0Lnk6MjUuMTogd2FybmluZzogYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUKK2lucHV0Lnk6MjUuMTogICAgIGZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JworaW5wdXQueTozMS4xOiB3YXJuaW5nOiBhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZQoraW5wdXQueTozMS4xOiAgICAgZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnCitpbnB1dC55OjMyLjE6IHdhcm5pbmc6IGEgJzsnIG1pZ2h0IGJlIG5lZWRlZCBhdCB0aGUgZW5kIG9mIGFjdGlvbiBjb2RlCitpbnB1dC55OjMyLjE6ICAgICBmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24gd2lsbCBub3QgYWRkIHRoZSAnOycKK2lucHV0Lnk6MzMuMTogd2FybmluZzogYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUKK2lucHV0Lnk6MzMuMTogICAgIGZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JworaW5wdXQueTozNC4xOiB3YXJuaW5nOiBhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZQoraW5wdXQueTozNC4xOiAgICAgZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnCitpbnB1dC55OjM1LjE6IHdhcm5pbmc6IGEgJzsnIG1pZ2h0IGJlIG5lZWRlZCBhdCB0aGUgZW5kIG9mIGFjdGlvbiBjb2RlCitpbnB1dC55OjM1LjE6ICAgICBmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24gd2lsbCBub3QgYWRkIHRoZSAnOycKK2lucHV0Lnk6MzYuMTogd2FybmluZzogYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUKK2lucHV0Lnk6MzYuMTogICAgIGZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JworIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworIyBEZWZpbmluZyBQT1NJWExZX0NPUlJFQ1QgY2F1c2VzIGJpc29uIHRvIGNvbXBsYWluIGlmIG9wdGlvbnMgYXJlCisjIGFkZGVkIGFmdGVyIHRoZSBncmFtbWFyIGZpbGUgbmFtZSwgc28gc2tpcCB0aGVzZSBjaGVja3MgaW4gdGhhdAorIyBjYXNlLgoraWYgdGVzdCAiJFBPU0lYTFlfQ09SUkVDVF9JU19FWFBPUlRFRCIgPSBmYWxzZTsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKworICAjIFRvIGF2b2lkIGV4cGFuZGluZyBpdCByZXBlYXRlZGx5LCBzdG9yZSBzcGVjaWZpZWQgc3Rkb3V0LgorICA6ID5leHBvdXQKKworICAjIFJ1biB3aXRoIC1XZXJyb3IuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1OTc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLVdlcnJvciIgImFjdGlvbnMuYXQ6MTU5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBCdWlsZCBleHBlY3RlZCBzdGRlcnIgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgIndhcm5pbmdzIGJlaW5nCisgICMgdHJlYXRlZCBhcyBlcnJvcnMiIG1lc3NhZ2UuCisgIGNhdCA+YXQtYmlzb24tY2hlY2std2FybmluZ3MgPDwnX0FURU9GJworaW5wdXQueTo4LjQ4OiB3YXJuaW5nOiBhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZQoraW5wdXQueTo4LjQ4OiAgICAgZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnCitpbnB1dC55OjkuNDg6IHdhcm5pbmc6IGEgJzsnIG1pZ2h0IGJlIG5lZWRlZCBhdCB0aGUgZW5kIG9mIGFjdGlvbiBjb2RlCitpbnB1dC55OjkuNDg6ICAgICBmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24gd2lsbCBub3QgYWRkIHRoZSAnOycKK2lucHV0Lnk6MTAuNDg6IHdhcm5pbmc6IGEgJzsnIG1pZ2h0IGJlIG5lZWRlZCBhdCB0aGUgZW5kIG9mIGFjdGlvbiBjb2RlCitpbnB1dC55OjEwLjQ4OiAgICAgZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnCitpbnB1dC55OjExLjQ4OiB3YXJuaW5nOiBhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZQoraW5wdXQueToxMS40ODogICAgIGZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JworaW5wdXQueToxMi40ODogd2FybmluZzogYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUKK2lucHV0Lnk6MTIuNDg6ICAgICBmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24gd2lsbCBub3QgYWRkIHRoZSAnOycKK2lucHV0Lnk6MTMuNDg6IHdhcm5pbmc6IGEgJzsnIG1pZ2h0IGJlIG5lZWRlZCBhdCB0aGUgZW5kIG9mIGFjdGlvbiBjb2RlCitpbnB1dC55OjEzLjQ4OiAgICAgZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnCitpbnB1dC55OjIwLjE6IHdhcm5pbmc6IGEgJzsnIG1pZ2h0IGJlIG5lZWRlZCBhdCB0aGUgZW5kIG9mIGFjdGlvbiBjb2RlCitpbnB1dC55OjIwLjE6ICAgICBmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24gd2lsbCBub3QgYWRkIHRoZSAnOycKK2lucHV0Lnk6MjEuMTogd2FybmluZzogYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUKK2lucHV0Lnk6MjEuMTogICAgIGZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JworaW5wdXQueToyMi4xOiB3YXJuaW5nOiBhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZQoraW5wdXQueToyMi4xOiAgICAgZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnCitpbnB1dC55OjIzLjE6IHdhcm5pbmc6IGEgJzsnIG1pZ2h0IGJlIG5lZWRlZCBhdCB0aGUgZW5kIG9mIGFjdGlvbiBjb2RlCitpbnB1dC55OjIzLjE6ICAgICBmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24gd2lsbCBub3QgYWRkIHRoZSAnOycKK2lucHV0Lnk6MjQuMTogd2FybmluZzogYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUKK2lucHV0Lnk6MjQuMTogICAgIGZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JworaW5wdXQueToyNS4xOiB3YXJuaW5nOiBhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZQoraW5wdXQueToyNS4xOiAgICAgZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnCitpbnB1dC55OjMxLjE6IHdhcm5pbmc6IGEgJzsnIG1pZ2h0IGJlIG5lZWRlZCBhdCB0aGUgZW5kIG9mIGFjdGlvbiBjb2RlCitpbnB1dC55OjMxLjE6ICAgICBmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24gd2lsbCBub3QgYWRkIHRoZSAnOycKK2lucHV0Lnk6MzIuMTogd2FybmluZzogYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUKK2lucHV0Lnk6MzIuMTogICAgIGZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JworaW5wdXQueTozMy4xOiB3YXJuaW5nOiBhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZQoraW5wdXQueTozMy4xOiAgICAgZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnCitpbnB1dC55OjM0LjE6IHdhcm5pbmc6IGEgJzsnIG1pZ2h0IGJlIG5lZWRlZCBhdCB0aGUgZW5kIG9mIGFjdGlvbiBjb2RlCitpbnB1dC55OjM0LjE6ICAgICBmdXR1cmUgdmVyc2lvbnMgb2YgQmlzb24gd2lsbCBub3QgYWRkIHRoZSAnOycKK2lucHV0Lnk6MzUuMTogd2FybmluZzogYSAnOycgbWlnaHQgYmUgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYWN0aW9uIGNvZGUKK2lucHV0Lnk6MzUuMTogICAgIGZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXNvbiB3aWxsIG5vdCBhZGQgdGhlICc7JworaW5wdXQueTozNi4xOiB3YXJuaW5nOiBhICc7JyBtaWdodCBiZSBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhY3Rpb24gY29kZQoraW5wdXQueTozNi4xOiAgICAgZnV0dXJlIHZlcnNpb25zIG9mIEJpc29uIHdpbGwgbm90IGFkZCB0aGUgJzsnCitfQVRFT0YKKworICBhdF9iaXNvbl9jaGVja19maXJzdD1gc2VkIC1uIFwKKyAgICAnLzogd2FybmluZzogL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wPWBzZWQgLW4gXAorICAgICcvY29uZmxpY3RzOiBbMC05XS4qcmVkdWNlJC97PTtxO30nIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzYAorICA6ICR7YXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wOj0xfQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdF90bXAgLWx0ICRhdF9iaXNvbl9jaGVja19maXJzdDsgdGhlbgorICAgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PSRhdF9iaXNvbl9jaGVja19maXJzdF90bXAKKyAgZmkKKyAgaWYgdGVzdCAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLWd0IDE7IHRoZW4KKyAgICBzZWQgLW4gIjEsYGV4cHIgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0IC0gMWAicCBcCisgICAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+IGV4cGVycgorICBmaQorICBlY2hvICdiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMnID4+IGV4cGVycgorCisgICMgRmluaXNoIGJ1aWxkaW5nIGV4cGVjdGVkIHN0ZGVyciBhbmQgY2hlY2suICBVbmxpa2Ugd2FybmluZ3MsCisgICMgY29tcGxhaW50cyBjYXVzZSBiaXNvbiB0byBleGl0IGVhcmx5LiAgVGh1cywgd2l0aCAtV2Vycm9yLCBiaXNvbgorICAjIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHJlcG9ydCBhbGwgd2FybmluZ3MgdGhhdCBpdCBkb2VzIHdpdGhvdXQKKyAgIyAtV2Vycm9yLCBidXQgaXQgYXQgbGVhc3QgcmVwb3J0cyBvbmUuCisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YHNlZCAtbiAnJD0nIHN0ZGVycmAKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2xhc3Q6PTF9CisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YGV4cHIgJGF0X2Jpc29uX2NoZWNrX2xhc3QgLSAxYAorICBzZWQgLW4gIiRhdF9iaXNvbl9jaGVja19maXJzdCwkYXRfYmlzb25fY2hlY2tfbGFzdCJwIFwKKyAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+PiBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTU5Nzogc2VkICdzLC4qL1xcKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1xcKVwkLFxcMSwnIFxcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiYWN0aW9ucy5hdDoxNTk3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAncywuKi9cKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1wpJCxcMSwnIFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC0td2FybmluZ3M9ZXJyb3IuCisgIGNwIHN0ZGVyciBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTU5NzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1lcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yIiAiYWN0aW9ucy5hdDoxNTk3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC1Xbm9uZSBhbmQgLS13YXJuaW5ncz1ub25lIGJ5IG1ha2luZyBzdXJlIHRoYXQKKyAgIyAtV2Vycm9yIGRvZXNuJ3QgY2hhbmdlIHRoZSBleGl0IHN0YXR1cyB3aGVuIC1Xbm9uZSBvcgorICAjIC0td2FybmluZ3M9bm9uZSBpcyBzcGVjaWZpZWQuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE1OTc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIiAiYWN0aW9ucy5hdDoxNTk3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTU5NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTU5NzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiICJhY3Rpb25zLmF0OjE1OTciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNTk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTYzNjogXCRQRVJMIC0wNzc3IC1uZSAnCitteSBcJGNvdW50ID0gMDsKK3N7L1xcKiBURVNUOk46MiBcXCovIFxcfVwkfXsgKytcJGNvdW50OyBcIlwiIH1nZW07CitwcmludGYgXCJcJGNvdW50XFxuXCI7JyBpbnB1dC5jIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiYWN0aW9ucy5hdDoxNjM2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC0wNzc3IC1uZSAnCitteSAkY291bnQgPSAwOworc3svXCogVEVTVDpOOjIgXCovIFx9JH17ICsrJGNvdW50OyAiIiB9Z2VtOworcHJpbnRmICIkY291bnRcbiI7JyBpbnB1dC5jCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMworIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNjM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTYzNzogXCRQRVJMIC0wNzc3IC1uZSAnCitteSBcJGNvdW50ID0gMDsKK3N7L1xcKiBURVNUOlk6MiBcXCovIDtcXH1cJH17ICsrXCRjb3VudDsgXCJcIiB9Z2VtOworcHJpbnRmIFwiXCRjb3VudFxcblwiOycgaW5wdXQuYyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImFjdGlvbnMuYXQ6MTYzNyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtMDc3NyAtbmUgJworbXkgJGNvdW50ID0gMDsKK3N7L1wqIFRFU1Q6WToyIFwqLyA7XH0kfXsgKyskY291bnQ7ICIiIH1nZW07CitwcmludGYgIiRjb3VudFxuIjsnIGlucHV0LmMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICI2CisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE2MzciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNjM4OiBcJFBFUkwgLTA3NzcgLW5lICcKK215IFwkY291bnQgPSAwOworc3svLyBURVNUOk46MSBbO3t9XSpcXG5cXH1cJH17ICsrXCRjb3VudDsgXCJcIiB9Z2VtOworcHJpbnRmIFwiXCRjb3VudFxcblwiOycgaW5wdXQuYyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImFjdGlvbnMuYXQ6MTYzOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtMDc3NyAtbmUgJworbXkgJGNvdW50ID0gMDsKK3N7Ly8gVEVTVDpOOjEgWzt7fV0qXG5cfSR9eyArKyRjb3VudDsgIiIgfWdlbTsKK3ByaW50ZiAiJGNvdW50XG4iOycgaW5wdXQuYworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjYKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTYzOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE2Mzk6IFwkUEVSTCAtMDc3NyAtbmUgJworbXkgXCRjb3VudCA9IDA7Citzey8vIFRFU1Q6WToxIFs7e31dKlxcbjtcXH1cJH17ICsrXCRjb3VudDsgXCJcIiB9Z2VtOworcHJpbnRmIFwiXCRjb3VudFxcblwiOycgaW5wdXQuYyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImFjdGlvbnMuYXQ6MTYzOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtMDc3NyAtbmUgJworbXkgJGNvdW50ID0gMDsKK3N7Ly8gVEVTVDpZOjEgWzt7fV0qXG47XH0kfXsgKyskY291bnQ7ICIiIH1nZW07CitwcmludGYgIiRjb3VudFxuIjsnIGlucHV0LmMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxMgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNjM5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTY0MDogXCRQRVJMIC0wNzc3IC1uZSAnCitteSBcJGNvdW50ID0gMDsKK3N7I2RlZmluZSBURVNUX01BQ1JPX04gXFxcXFxcblxcW1xcXVwiYnJva2VuXFxcXFwiIFxcXCQgXFxAIFxcXCRcXFwkIFxcQFxcXCQgXFxbXFxdO1xcXFxcXG5zdHJpbmc7XCJcXH19eyArK1wkY291bnQ7IFwiXCIgfWdlbTsKK3ByaW50ZiBcIlwkY291bnRcXG5cIjsnIGlucHV0LmMiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJhY3Rpb25zLmF0OjE2NDAiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLTA3NzcgLW5lICcKK215ICRjb3VudCA9IDA7CitzeyNkZWZpbmUgVEVTVF9NQUNST19OIFxcXG5cW1xdImJyb2tlblxcIiBcJCBcQCBcJFwkIFxAXCQgXFtcXTtcXFxuc3RyaW5nOyJcfX17ICsrJGNvdW50OyAiIiB9Z2VtOworcHJpbnRmICIkY291bnRcbiI7JyBpbnB1dC5jCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNjQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzE3OAorI0FUX1NUQVJUXzE3OQorYXRfZm5fZ3JvdXBfYmFubmVyIDE3OSAnYWN0aW9ucy5hdDoxNjQ5JyBcCisgICJEZXN0cm95aW5nIGxvb2thaGVhZCBhc3NpZ25lZCBieSBzZW1hbnRpYyBhY3Rpb24iICIiIDkKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxNzkuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisKKyVjb2RlIHsKKyAgI2luY2x1ZGUgPGFzc2VydC5oPgorICAjaW5jbHVkZSA8c3RkaW8uaD4KK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworc3RhdGljIGludCB5eWxleCAodm9pZCk7CisgICNkZWZpbmUgVVNFKFZhcikKK30KKworJWRlc3RydWN0b3IgeyBmcHJpbnRmIChzdGRlcnIsICInYScgZGVzdHJ1Y3RvclxuIik7IH0gJ2EnCislZGVzdHJ1Y3RvciB7IGZwcmludGYgKHN0ZGVyciwgIidiJyBkZXN0cnVjdG9yXG4iKTsgfSAnYicKKworJSUKKworLy8gSW4gYSBwcmV2aW91cyB2ZXJzaW9uIG9mIEJpc29uLCB5eWNoYXIgYXNzaWduZWQgYnkgdGhlIHNlbWFudGljCisvLyBhY3Rpb24gYmVsb3cgd2FzIG5vdCB0cmFuc2xhdGVkIGludG8geXl0b2tlbiBiZWZvcmUgdGhlIGxvb2thaGVhZCB3YXMKKy8vIGRpc2NhcmRlZCBhbmQgdGh1cyBiZWZvcmUgaXRzIGRlc3RydWN0b3IgKHNlbGVjdGVkIGFjY29yZGluZyB0bworLy8geXl0b2tlbikgd2FzIGNhbGxlZCBpbiBvcmRlciB0byByZXR1cm4gZnJvbSB5eXBhcnNlLiAgVGhpcyB3b3VsZAorLy8gaGFwcGVuIGV2ZW4gaWYgWVlBQ0NFUFQgd2FzIHBlcmZvcm1lZCBpbiBhIGxhdGVyIHNlbWFudGljIGFjdGlvbiBhcworLy8gbG9uZyBhcyBvbmx5IGNvbnNpc3RlbnQgc3RhdGVzIHdpdGggZGVmYXVsdCByZWR1Y3Rpb25zIHdlcmUgdmlzaXRlZAorLy8gaW4gYmV0d2Vlbi4gIEhvd2V2ZXIsIHdlIGxlYXZlIFlZQUNDRVBUIGluIHRoZSBzYW1lIHNlbWFudGljIGFjdGlvbgorLy8gZm9yIHRoaXMgdGVzdCBpbiBvcmRlciB0byBzaG93IHRoYXQgc2tlbGV0b25zIGNhbm5vdCBzaW1wbHkgdHJhbnNsYXRlCisvLyBpbW1lZGlhdGVseSBhZnRlciBldmVyeSBzZW1hbnRpYyBhY3Rpb24gYmVjYXVzZSBhIHNlbWFudGljIGFjdGlvbgorLy8gdGhhdCBoYXMgc2V0IHl5Y2hhciBtaWdodCBub3QgYWx3YXlzIHJldHVybiBub3JtYWxseS4gIEluc3RlYWQsCisvLyBza2VsZXRvbnMgbXVzdCB0cmFuc2xhdGUgYmVmb3JlIGV2ZXJ5IHVzZSBvZiB5eXRva2VuLgorc3RhcnQ6ICdhJyBhY2NlcHQgeyBVU0UoJDEpOyB9IDsKK2FjY2VwdDogLyplbXB0eSovIHsKKyAgYXNzZXJ0ICh5eWNoYXIgPT0gWVlFTVBUWSk7CisgIHl5Y2hhciA9ICdiJzsKKyAgWVlBQ0NFUFQ7Cit9IDsKKworJSUKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitzdGF0aWMKK2ludCB5eWxleCAodm9pZCkKK3sKKyAgc3RhdGljIGNoYXIgY29uc3QgaW5wdXRbXSA9ICJhIjsKKyAgc3RhdGljIHNpemVfdCB0b2tudW0gPSAwOworICBpbnQgcmVzOworICA7CisgIGFzc2VydCAodG9rbnVtIDwgc2l6ZW9mIGlucHV0IC8gc2l6ZW9mIGlucHV0WzBdKTsKKyAgcmVzID0gaW5wdXRbdG9rbnVtKytdOworICA7CisgIHJldHVybiByZXM7Cit9CitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTY5NTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImFjdGlvbnMuYXQ6MTY5NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTY5NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTY5NTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgImFjdGlvbnMuYXQ6MTY5NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTY5NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE2OTU6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJhY3Rpb25zLmF0OjE2OTUiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNjk1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNjk1OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYWN0aW9ucy5hdDoxNjk1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTY5NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTY5NTogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYWN0aW9ucy5hdDoxNjk1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE2OTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE2OTY6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJhY3Rpb25zLmF0OjE2OTYiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTY5NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE2OTY6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAiYWN0aW9ucy5hdDoxNjk2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE2OTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNjk3OiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgImFjdGlvbnMuYXQ6MTY5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE2OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNjk3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6MTY5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gIidiJyBkZXN0cnVjdG9yCisnYScgZGVzdHJ1Y3RvcgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNjk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTc5CisjQVRfU1RBUlRfMTgwCithdF9mbl9ncm91cF9iYW5uZXIgMTgwICdhY3Rpb25zLmF0OjE3MDgnIFwKKyAgIllZQkFDS1VQIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiA5CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTgwLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisKKyVlcnJvci12ZXJib3NlCislZGVidWcKKyVwdXJlLXBhcnNlcgorJWNvZGUgeworIyBpbmNsdWRlIDxzdGRpby5oPgorIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyAgc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CisgIHN0YXRpYyBpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWxwKTsKK30KKyUlCitpbnB1dDoKKyAgZXhwIGV4cCB7fQorOworCitleHA6CisgICdhJyAgICAgeyBwcmludGYgKCJhOiAlZFxuIiwgJDEpOyB9Cit8ICdiJyAgICAgeyBZWUJBQ0tVUCgnYScsIDEyMyk7IH0KK3wgJ2MnICdkJyB7IFlZQkFDS1VQKCdhJywgNDU2KTsgfQorOworCislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKyNpbmNsdWRlIDxhc3NlcnQuaD4KK3N0YXRpYworaW50IHl5bGV4IChZWVNUWVBFICpsdmFscCkKK3sKKyAgc3RhdGljIGNoYXIgY29uc3QgaW5wdXRbXSA9ICJiY2QiOworICBzdGF0aWMgc2l6ZV90IHRva251bSA9IDA7CisgIGludCByZXM7CisgICh2b2lkKSBsdmFscDs7CisgIGFzc2VydCAodG9rbnVtIDwgc2l6ZW9mIGlucHV0IC8gc2l6ZW9mIGlucHV0WzBdKTsKKyAgcmVzID0gaW5wdXRbdG9rbnVtKytdOworICAqbHZhbHAgPSAodG9rbnVtICsgMSkgKiAxMDsKKyAgcmV0dXJuIHJlczsKK30KKworaW50CittYWluICh2b2lkKQoreworICB5eWRlYnVnID0gISFnZXRlbnYoIllZREVCVUciKTsKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE3NDk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJhY3Rpb25zLmF0OjE3NDkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE3NDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE3NDk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiICJhY3Rpb25zLmF0OjE3NDkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE3NDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNzQ5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYWN0aW9ucy5hdDoxNzQ5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTc0OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTc0OTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImFjdGlvbnMuYXQ6MTc0OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE3NDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE3NDk6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImFjdGlvbnMuYXQ6MTc0OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNzQ5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNzUwOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiYWN0aW9ucy5hdDoxNzUwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9hY3Rpb25zLmF0OjE3NTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNzUwOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyIgImFjdGlvbnMuYXQ6MTc1MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNzUwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTc1MTogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJhY3Rpb25zLmF0OjE3NTEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJhOiAxMjMKK2E6IDQ1NgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNzUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2FjdGlvbnMuYXQ6MTc1MTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJhY3Rpb25zLmF0OjE3NTEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYWN0aW9ucy5hdDoxNzUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTgwCisjQVRfU1RBUlRfMTgxCithdF9mbl9ncm91cF9iYW5uZXIgMTgxICdjb25mbGljdHMuYXQ6MzEnIFwKKyAgIlMvUiBpbiBpbml0aWFsIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAxMAorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjE4MS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIGNhdCA+aW5wdXQueSA8PCdfQVRFT0YnCkBAIC05NzUxLDgzICs0OTM2MSw0NzAgQEAKIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY29uZmxpY3RzLmF0OjQzOiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCi1lY2hvIGNvbmZsaWN0cy5hdDo0MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gPj4kYXRfc3RkZXJyOyBlY2hvICJpbnB1dC55OjQuOTogd2FybmluZzogcnVsZSBuZXZlciByZWR1Y2VkIGJlY2F1c2Ugb2YgY29uZmxpY3RzOiBlOiAvKiBlbXB0eSAqLwotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY29uZmxpY3RzLmF0OjQzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNvbmZsaWN0cy5hdDo0MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IiAiY29uZmxpY3RzLmF0OjQwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNvbmZsaWN0cy5hdDo0MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6NDAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQwOiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjb25mbGljdHMuYXQ6NDAiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueTo0Ljk6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0czogZTogLyogZW1wdHkgKi8KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyMgRGVmaW5pbmcgUE9TSVhMWV9DT1JSRUNUIGNhdXNlcyBiaXNvbiB0byBjb21wbGFpbiBpZiBvcHRpb25zIGFyZQorIyBhZGRlZCBhZnRlciB0aGUgZ3JhbW1hciBmaWxlIG5hbWUsIHNvIHNraXAgdGhlc2UgY2hlY2tzIGluIHRoYXQKKyMgY2FzZS4KK2lmIHRlc3QgIiRQT1NJWExZX0NPUlJFQ1RfSVNfRVhQT1JURUQiID0gZmFsc2U7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisKKyAgIyBUbyBhdm9pZCBleHBhbmRpbmcgaXQgcmVwZWF0ZWRseSwgc3RvcmUgc3BlY2lmaWVkIHN0ZG91dC4KKyAgOiA+ZXhwb3V0CisKKyAgIyBSdW4gd2l0aCAtV2Vycm9yLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IC1XZXJyb3IiICJjb25mbGljdHMuYXQ6NDAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgQnVpbGQgZXhwZWN0ZWQgc3RkZXJyIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlICJ3YXJuaW5ncyBiZWluZworICAjIHRyZWF0ZWQgYXMgZXJyb3JzIiBtZXNzYWdlLgorICBjYXQgPmF0LWJpc29uLWNoZWNrLXdhcm5pbmdzIDw8J19BVEVPRicKK2lucHV0Lnk6NC45OiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHM6IGU6IC8qIGVtcHR5ICovCitfQVRFT0YKKworICBhdF9iaXNvbl9jaGVja19maXJzdD1gc2VkIC1uIFwKKyAgICAnLzogd2FybmluZzogL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wPWBzZWQgLW4gXAorICAgICcvY29uZmxpY3RzOiBbMC05XS4qcmVkdWNlJC97PTtxO30nIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzYAorICA6ICR7YXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wOj0xfQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdF90bXAgLWx0ICRhdF9iaXNvbl9jaGVja19maXJzdDsgdGhlbgorICAgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PSRhdF9iaXNvbl9jaGVja19maXJzdF90bXAKKyAgZmkKKyAgaWYgdGVzdCAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLWd0IDE7IHRoZW4KKyAgICBzZWQgLW4gIjEsYGV4cHIgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0IC0gMWAicCBcCisgICAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+IGV4cGVycgorICBmaQorICBlY2hvICdiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMnID4+IGV4cGVycgorCisgICMgRmluaXNoIGJ1aWxkaW5nIGV4cGVjdGVkIHN0ZGVyciBhbmQgY2hlY2suICBVbmxpa2Ugd2FybmluZ3MsCisgICMgY29tcGxhaW50cyBjYXVzZSBiaXNvbiB0byBleGl0IGVhcmx5LiAgVGh1cywgd2l0aCAtV2Vycm9yLCBiaXNvbgorICAjIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHJlcG9ydCBhbGwgd2FybmluZ3MgdGhhdCBpdCBkb2VzIHdpdGhvdXQKKyAgIyAtV2Vycm9yLCBidXQgaXQgYXQgbGVhc3QgcmVwb3J0cyBvbmUuCisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YHNlZCAtbiAnJD0nIHN0ZGVycmAKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2xhc3Q6PTF9CisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YGV4cHIgJGF0X2Jpc29uX2NoZWNrX2xhc3QgLSAxYAorICBzZWQgLW4gIiRhdF9iaXNvbl9jaGVja19maXJzdCwkYXRfYmlzb25fY2hlY2tfbGFzdCJwIFwKKyAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+PiBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MDogc2VkICdzLC4qL1xcKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1xcKVwkLFxcMSwnIFxcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY29uZmxpY3RzLmF0OjQwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAncywuKi9cKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1wpJCxcMSwnIFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC0td2FybmluZ3M9ZXJyb3IuCisgIGNwIHN0ZGVyciBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1lcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yIiAiY29uZmxpY3RzLmF0OjQwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC1Xbm9uZSBhbmQgLS13YXJuaW5ncz1ub25lIGJ5IG1ha2luZyBzdXJlIHRoYXQKKyAgIyAtV2Vycm9yIGRvZXNuJ3QgY2hhbmdlIHRoZSBleGl0IHN0YXR1cyB3aGVuIC1Xbm9uZSBvcgorICAjIC0td2FybmluZ3M9bm9uZSBpcyBzcGVjaWZpZWQuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIiAiY29uZmxpY3RzLmF0OjQwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiICJjb25mbGljdHMuYXQ6NDAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKIAotJGF0X3RyYWNlb24KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQ0OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjb25mbGljdHMuYXQ6NDQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0NDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnkiICJjb25mbGljdHMuYXQ6NDQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDQ6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6NDQiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQ0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQ0OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjQ0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0NDogYmlzb24gLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjb25mbGljdHMuYXQ6NDQiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OjQuOTogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzCisgZTogJ2UnIHwgLyogTm90aGluZy4gKi87CisgICAgICAgICBeCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisjIERlZmluaW5nIFBPU0lYTFlfQ09SUkVDVCBjYXVzZXMgYmlzb24gdG8gY29tcGxhaW4gaWYgb3B0aW9ucyBhcmUKKyMgYWRkZWQgYWZ0ZXIgdGhlIGdyYW1tYXIgZmlsZSBuYW1lLCBzbyBza2lwIHRoZXNlIGNoZWNrcyBpbiB0aGF0CisjIGNhc2UuCitpZiB0ZXN0ICIkUE9TSVhMWV9DT1JSRUNUX0lTX0VYUE9SVEVEIiA9IGZhbHNlOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworCisgICMgVG8gYXZvaWQgZXhwYW5kaW5nIGl0IHJlcGVhdGVkbHksIHN0b3JlIHNwZWNpZmllZCBzdGRvdXQuCisgIDogPmV4cG91dAorCisgICMgUnVuIHdpdGggLVdlcnJvci4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0NDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IC1vIGlucHV0LmMgaW5wdXQueSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnkgLVdlcnJvciIgImNvbmZsaWN0cy5hdDo0NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgLW8gaW5wdXQuYyBpbnB1dC55IC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7CisgICMgQnVpbGQgZXhwZWN0ZWQgc3RkZXJyIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlICJ3YXJuaW5ncyBiZWluZworICAjIHRyZWF0ZWQgYXMgZXJyb3JzIiBtZXNzYWdlLgorICBjYXQgPmF0LWJpc29uLWNoZWNrLXdhcm5pbmdzIDw8J19BVEVPRicKK2lucHV0Lnk6NC45OiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHMKKyBlOiAnZScgfCAvKiBOb3RoaW5nLiAqLzsKKyAgICAgICAgIF4KK19BVEVPRgogCi0gIDU5ICkgIyA1OS4gY29uZmxpY3RzLmF0OjUyOiAlbm9uYXNzb2MgYW5kIGVvZgotICAgIGF0X3NldHVwX2xpbmU9J2NvbmZsaWN0cy5hdDo1MicKLSAgICBhdF9kZXNjPSclbm9uYXNzb2MgYW5kIGVvZicKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDU5OiAlbm9uYXNzb2MgYW5kIGVvZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiNTkuIGNvbmZsaWN0cy5hdDo1MjogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgorICBhdF9iaXNvbl9jaGVja19maXJzdD1gc2VkIC1uIFwKKyAgICAnLzogd2FybmluZzogL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wPWBzZWQgLW4gXAorICAgICcvY29uZmxpY3RzOiBbMC05XS4qcmVkdWNlJC97PTtxO30nIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzYAorICA6ICR7YXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wOj0xfQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdF90bXAgLWx0ICRhdF9iaXNvbl9jaGVja19maXJzdDsgdGhlbgorICAgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PSRhdF9iaXNvbl9jaGVja19maXJzdF90bXAKKyAgZmkKKyAgaWYgdGVzdCAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLWd0IDE7IHRoZW4KKyAgICBzZWQgLW4gIjEsYGV4cHIgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0IC0gMWAicCBcCisgICAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+IGV4cGVycgorICBmaQorICBlY2hvICdiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMnID4+IGV4cGVycgorCisgICMgRmluaXNoIGJ1aWxkaW5nIGV4cGVjdGVkIHN0ZGVyciBhbmQgY2hlY2suICBVbmxpa2Ugd2FybmluZ3MsCisgICMgY29tcGxhaW50cyBjYXVzZSBiaXNvbiB0byBleGl0IGVhcmx5LiAgVGh1cywgd2l0aCAtV2Vycm9yLCBiaXNvbgorICAjIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHJlcG9ydCBhbGwgd2FybmluZ3MgdGhhdCBpdCBkb2VzIHdpdGhvdXQKKyAgIyAtV2Vycm9yLCBidXQgaXQgYXQgbGVhc3QgcmVwb3J0cyBvbmUuCisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YHNlZCAtbiAnJD0nIHN0ZGVycmAKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2xhc3Q6PTF9CisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YGV4cHIgJGF0X2Jpc29uX2NoZWNrX2xhc3QgLSAxYAorICBzZWQgLW4gIiRhdF9iaXNvbl9jaGVja19maXJzdCwkYXRfYmlzb25fY2hlY2tfbGFzdCJwIFwKKyAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+PiBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0NDogc2VkICdzLC4qL1xcKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1xcKVwkLFxcMSwnIFxcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY29uZmxpY3RzLmF0OjQ0IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAncywuKi9cKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1wpJCxcMSwnIFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQ0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC0td2FybmluZ3M9ZXJyb3IuCisgIGNwIHN0ZGVyciBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0NDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IC1vIGlucHV0LmMgaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1lcnJvciIgImNvbmZsaWN0cy5hdDo0NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgLW8gaW5wdXQuYyBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQ0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC1Xbm9uZSBhbmQgLS13YXJuaW5ncz1ub25lIGJ5IG1ha2luZyBzdXJlIHRoYXQKKyAgIyAtV2Vycm9yIGRvZXNuJ3QgY2hhbmdlIHRoZSBleGl0IHN0YXR1cyB3aGVuIC1Xbm9uZSBvcgorICAjIC0td2FybmluZ3M9bm9uZSBpcyBzcGVjaWZpZWQuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnkgLVdub25lIC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IC1vIGlucHV0LmMgaW5wdXQueSAtV25vbmUgLVdlcnJvciIgImNvbmZsaWN0cy5hdDo0NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgLW8gaW5wdXQuYyBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0NDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IC1vIGlucHV0LmMgaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgLW8gaW5wdXQuYyBpbnB1dC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIiAiY29uZmxpY3RzLmF0OjQ0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQ0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xODEKKyNBVF9TVEFSVF8xODIKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxODIgJ2NvbmZsaWN0cy5hdDo1NycgXAorICAiJW5vbmFzc29jIGFuZCBlb2YiICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDEwCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTgyLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKIAogCiBjYXQgPmlucHV0LnkgPDwnX0FURU9GJwotJXsKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotICAvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KLSMgdW5kZWYgbWFsbG9jCi0jIHVuZGVmIG1lbWNtcAotIyB1bmRlZiByZWFsbG9jCi0jZW5kaWYKLSV9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCiAKICV7CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KIAogI2RlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKGNvbnN0IGNoYXIgKm1zZykKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKIHsKICAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7CiB9Ci0KIC8qIFRoZSBjdXJyZW50IGFyZ3VtZW50LiAqLwotc3RhdGljIGNvbnN0IGNoYXIgKmlucHV0ID0gTlVMTDsKK3N0YXRpYyBjb25zdCBjaGFyICppbnB1dDsKIAogc3RhdGljIGludAogeXlsZXggKHZvaWQpCiB7Ci0gIC8qIE5vIHRva2VuIHN0YW5kcyBmb3IgZW5kIG9mIGZpbGUuICovCi0gIGlmIChpbnB1dCAmJiAqaW5wdXQpCi0gICAgcmV0dXJuICppbnB1dCsrOwotICBlbHNlCi0gICAgcmV0dXJuIDA7CisgIHN0YXRpYyBzaXplX3QgdG9rbnVtOworICBhc3NlcnQgKHRva251bSA8PSBzdHJsZW4gKGlucHV0KSk7CisgIHJldHVybiBpbnB1dFt0b2tudW0rK107CiB9CiAKICV9CkBAIC05ODQzLDIxNCArNDk4NDAsNTg4OCBAQAogaW50CiBtYWluIChpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKQogewotICBpZiAoYXJnYyA+IDEpCi0gICAgaW5wdXQgPSBhcmd2WzFdOworICBpbnB1dCA9IGFyZ2MgPD0gMSA/ICIiIDogYXJndlsxXTsKICAgcmV0dXJuIHl5cGFyc2UgKCk7CiB9CiBfQVRFT0YKIAogCiAKLSMgU3BlY2lmeSB0aGUgb3V0cHV0IGZpbGVzIHRvIGF2b2lkIHByb2JsZW1zIG9uIGRpZmZlcmVudCBmaWxlIHN5c3RlbXMuCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNvbmZsaWN0cy5hdDoxMDA6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKLWVjaG8gY29uZmxpY3RzLmF0OjEwMCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNvbmZsaWN0cy5hdDoxMDA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisKKworIyBFeHBlY3RlZCB0b2tlbiBsaXN0IGlzIG1pc3NpbmcuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY29uZmxpY3RzLmF0OjEyMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTIzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyMzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAgLW8gaW5wdXQuYyBpbnB1dC55IiAiY29uZmxpY3RzLmF0OjEyMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTIzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6MTIzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTIzOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjEyMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTIzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyMzogYmlzb24gIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDoxMjMiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTIzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjb25mbGljdHMuYXQ6MTAxOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgotZWNobyBjb25mbGljdHMuYXQ6MTAxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjb25mbGljdHMuYXQ6MTAxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyMzogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImNvbmZsaWN0cy5hdDoxMjMiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTIzOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyIgImNvbmZsaWN0cy5hdDoxMjMiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyMzogIFwkUFJFUEFSU0VSIC4vaW5wdXQgJzA8MCciCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQgJzA8MCciICJjb25mbGljdHMuYXQ6MTIzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQgJzA8MCcKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyMzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjb25mbGljdHMuYXQ6MTIzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTIzOiAgXCRQUkVQQVJTRVIgLi9pbnB1dCAnMDwwPDAnIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0ICcwPDA8MCciICJjb25mbGljdHMuYXQ6MTIzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQgJzA8MDwwJworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTIzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDoxMjMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJzwnCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTIzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTIzOiAgXCRQUkVQQVJTRVIgLi9pbnB1dCAnMD4wJyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCAnMD4wJyIgImNvbmZsaWN0cy5hdDoxMjMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCAnMD4wJworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTIzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDoxMjMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjM6ICBcJFBSRVBBUlNFUiAuL2lucHV0ICcwPjA+MCciCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQgJzA+MD4wJyIgImNvbmZsaWN0cy5hdDoxMjMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCAnMD4wPjAnCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTIzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjEyMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPicKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjM6ICBcJFBSRVBBUlNFUiAuL2lucHV0ICcwPDA+MCciCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQgJzA8MD4wJyIgImNvbmZsaWN0cy5hdDoxMjMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCAnMDwwPjAnCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTIzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjEyMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPicKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisKKyMgV2UgbXVzdCBkaXNhYmxlIGRlZmF1bHQgcmVkdWN0aW9ucyBpbiBpbmNvbnNpc3RlbnQgc3RhdGVzIGluIG9yZGVyIHRvCisjIGhhdmUgYW4gZXhwbGljaXQgbGlzdCBvZiBhbGwgZXhwZWN0ZWQgdG9rZW5zLgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTI3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLURsci5kZWZhdWx0LXJlZHVjdGlvbnM9Y29uc2lzdGVudCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjb25mbGljdHMuYXQ6MTI3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1EbHIuZGVmYXVsdC1yZWR1Y3Rpb25zPWNvbnNpc3RlbnQgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTI3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyNzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLURsci5kZWZhdWx0LXJlZHVjdGlvbnM9Y29uc2lzdGVudCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLURsci5kZWZhdWx0LXJlZHVjdGlvbnM9Y29uc2lzdGVudCAtbyBpbnB1dC5jIGlucHV0LnkiICJjb25mbGljdHMuYXQ6MTI3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1EbHIuZGVmYXVsdC1yZWR1Y3Rpb25zPWNvbnNpc3RlbnQgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTI3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6MTI3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTI3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjEyNyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTI3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyNzogYmlzb24gLURsci5kZWZhdWx0LXJlZHVjdGlvbnM9Y29uc2lzdGVudCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjb25mbGljdHMuYXQ6MTI3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1EbHIuZGVmYXVsdC1yZWR1Y3Rpb25zPWNvbnNpc3RlbnQgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY29uZmxpY3RzLmF0OjEwMzogXCRQUkVQQVJTRVIgLi9pbnB1dCAnMDwwJyIKLWVjaG8gY29uZmxpY3RzLmF0OjEwMyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2lucHV0ICcwPDAnICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNvbmZsaWN0cy5hdDoxMDM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTI3OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiY29uZmxpY3RzLmF0OjEyNyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjc6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAiY29uZmxpY3RzLmF0OjEyNyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTI3OiAgXCRQUkVQQVJTRVIgLi9pbnB1dCAnMDwwJyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCAnMDwwJyIgImNvbmZsaWN0cy5hdDoxMjciCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCAnMDwwJworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTI3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDoxMjciCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjc6ICBcJFBSRVBBUlNFUiAuL2lucHV0ICcwPDA8MCciCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQgJzA8MDwwJyIgImNvbmZsaWN0cy5hdDoxMjciCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCAnMDwwPDAnCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTI3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjEyNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPCcsIGV4cGVjdGluZyBcJGVuZAorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyNzogIFwkUFJFUEFSU0VSIC4vaW5wdXQgJzA+MCciCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQgJzA+MCciICJjb25mbGljdHMuYXQ6MTI3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQgJzA+MCcKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyNzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjb25mbGljdHMuYXQ6MTI3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTI3OiAgXCRQUkVQQVJTRVIgLi9pbnB1dCAnMD4wPjAnIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0ICcwPjA+MCciICJjb25mbGljdHMuYXQ6MTI3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQgJzA+MD4wJworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTI3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDoxMjciCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz4nLCBleHBlY3RpbmcgXCRlbmQKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjc6ICBcJFBSRVBBUlNFUiAuL2lucHV0ICcwPDA+MCciCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQgJzA8MD4wJyIgImNvbmZsaWN0cy5hdDoxMjciCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCAnMDwwPjAnCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTI3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjEyNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPicsIGV4cGVjdGluZyBcJGVuZAorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworIyBsci5kZWZhdWx0LXJlZHVjdGlvbnM9Y29uc2lzdGVudCBoYXBwZW5zIHRvIHdvcmsgZm9yIHRoaXMgdGVzdCBjYXNlLgorIyBIb3dldmVyLCBmb3Igb3RoZXIgZ3JhbW1hcnMsIGxvb2thaGVhZCBzZXRzIGNhbiBiZSBtZXJnZWQgZm9yCisjIGRpZmZlcmVudCBsZWZ0IGNvbnRleHRzLCBzbyBpdCBpcyBzdGlsbCBwb3NzaWJsZSB0byBoYXZlIGFuIGluY29ycmVjdAorIyBleHBlY3RlZCBsaXN0LiAgQ2Fub25pY2FsIExSIGlzIGFsbW9zdCBhIGdlbmVyYWwgc29sdXRpb24gKHRoYXQgaXMsIGl0CisjIGNhbiBmYWlsIG9ubHkgd2hlbiAlbm9uYXNzb2MgaXMgdXNlZCksIHNvIG1ha2Ugc3VyZSBpdCBnaXZlcyB0aGUgc2FtZQorIyByZXN1bHQgYXMgYWJvdmUuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMzY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtRGxyLnR5cGU9Y2Fub25pY2FsLWxyIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNvbmZsaWN0cy5hdDoxMzYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLURsci50eXBlPWNhbm9uaWNhbC1sciAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTM2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtRGxyLnR5cGU9Y2Fub25pY2FsLWxyIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtRGxyLnR5cGU9Y2Fub25pY2FsLWxyIC1vIGlucHV0LmMgaW5wdXQueSIgImNvbmZsaWN0cy5hdDoxMzYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLURsci50eXBlPWNhbm9uaWNhbC1sciAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEzNjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNvbmZsaWN0cy5hdDoxMzYiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEzNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMzY6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6MTM2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTM2OiBiaXNvbiAtRGxyLnR5cGU9Y2Fub25pY2FsLWxyIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDoxMzYiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLURsci50eXBlPWNhbm9uaWNhbC1sciAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEzNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSMgRklYTUU6IFRoaXMgaXMgYW4gYWN0dWFsIGJ1ZywgYnV0IGEgbmV3IG9uZSwgaW4gdGhlIHNlbnNlIHRoYXQKLSMgbm8gb25lIGhhcyBldmVyIHNwb3R0ZWQgaXQhICBUaGUgbWVzc2FnZXMgYXJlICp3cm9uZyo6IHRoZXJlIHNob3VsZAotIyBiZSBub3RoaW5nIHRoZXJlLCBpdCBzaG91bGQgYmUgZXhwZWN0ZWQgZW9mLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJjb25mbGljdHMuYXQ6MTA5OiBcJFBSRVBBUlNFUiAuL2lucHV0ICcwPDA8MCciCi1lY2hvIGNvbmZsaWN0cy5hdDoxMDkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9pbnB1dCAnMDwwPDAnICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gPj4kYXRfc3RkZXJyOyBlY2hvICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJzwnLCBleHBlY3RpbmcgJzwnIG9yICc+JwotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY29uZmxpY3RzLmF0OjEwOTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMzY6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJjb25mbGljdHMuYXQ6MTM2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEzNjogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJjb25mbGljdHMuYXQ6MTM2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMzY6ICBcJFBSRVBBUlNFUiAuL2lucHV0ICcwPDAnIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0ICcwPDAnIiAiY29uZmxpY3RzLmF0OjEzNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0ICcwPDAnCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMzY6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjEzNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEzNjogIFwkUFJFUEFSU0VSIC4vaW5wdXQgJzA8MDwwJyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCAnMDwwPDAnIiAiY29uZmxpY3RzLmF0OjEzNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0ICcwPDA8MCcKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEzNjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjb25mbGljdHMuYXQ6MTM2IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc8JywgZXhwZWN0aW5nIFwkZW5kCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTM2OiAgXCRQUkVQQVJTRVIgLi9pbnB1dCAnMD4wJyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCAnMD4wJyIgImNvbmZsaWN0cy5hdDoxMzYiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCAnMD4wJworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEzNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTM2OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDoxMzYiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEzNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMzY6ICBcJFBSRVBBUlNFUiAuL2lucHV0ICcwPjA+MCciCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQgJzA+MD4wJyIgImNvbmZsaWN0cy5hdDoxMzYiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCAnMD4wPjAnCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMzY6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjEzNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPicsIGV4cGVjdGluZyBcJGVuZAorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEzNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEzNjogIFwkUFJFUEFSU0VSIC4vaW5wdXQgJzA8MD4wJyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCAnMDwwPjAnIiAiY29uZmxpY3RzLmF0OjEzNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0ICcwPDA+MCcKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEzNjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjb25mbGljdHMuYXQ6MTM2IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc+JywgZXhwZWN0aW5nIFwkZW5kCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCisjIHBhcnNlLmxhYz1mdWxsIGlzIGEgY29tcGxldGVseSBnZW5lcmFsIHNvbHV0aW9uIHRoYXQgZG9lcyBub3QgcmVxdWlyZQorIyBhbnkgb2YgdGhlIGFib3ZlIHNhY3JpZmljZXMuICBPZiBjb3Vyc2UsIGl0IGRvZXMgbm90IGV4dGVuZCB0aGUKKyMgbGFuZ3VhZ2UtcmVjb2duaXRpb24gcG93ZXIgb2YgTEFMUiB0byAoSUUpTFIsIGJ1dCBpdCBkb2VzIGVuc3VyZSB0aGF0CisjIHRoZSByZXBvcnRlZCBsaXN0IG9mIGV4cGVjdGVkIHRva2VucyBtYXRjaGVzIHdoYXQgdGhlIGdpdmVuIHBhcnNlcgorIyB3b3VsZCBoYXZlIGFjY2VwdGVkIGluIHBsYWNlIG9mIHRoZSB1bmV4cGVjdGVkIHRva2VuLgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTQzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLURwYXJzZS5sYWM9ZnVsbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjb25mbGljdHMuYXQ6MTQzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1EcGFyc2UubGFjPWZ1bGwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTQzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0MzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLURwYXJzZS5sYWM9ZnVsbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLURwYXJzZS5sYWM9ZnVsbCAtbyBpbnB1dC5jIGlucHV0LnkiICJjb25mbGljdHMuYXQ6MTQzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1EcGFyc2UubGFjPWZ1bGwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTQzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6MTQzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTQzOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjE0MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTQzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0MzogYmlzb24gLURwYXJzZS5sYWM9ZnVsbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjb25mbGljdHMuYXQ6MTQzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1EcGFyc2UubGFjPWZ1bGwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY29uZmxpY3RzLmF0OjExMTogXCRQUkVQQVJTRVIgLi9pbnB1dCAnMD4wJyIKLWVjaG8gY29uZmxpY3RzLmF0OjExMSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2lucHV0ICcwPjAnICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNvbmZsaWN0cy5hdDoxMTE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTQzOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiY29uZmxpY3RzLmF0OjE0MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDM6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAiY29uZmxpY3RzLmF0OjE0MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTQzOiAgXCRQUkVQQVJTRVIgLi9pbnB1dCAnMDwwJyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCAnMDwwJyIgImNvbmZsaWN0cy5hdDoxNDMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCAnMDwwJworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTQzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDoxNDMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDM6ICBcJFBSRVBBUlNFUiAuL2lucHV0ICcwPDA8MCciCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQgJzA8MDwwJyIgImNvbmZsaWN0cy5hdDoxNDMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCAnMDwwPDAnCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTQzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjE0MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPCcsIGV4cGVjdGluZyBcJGVuZAorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0MzogIFwkUFJFUEFSU0VSIC4vaW5wdXQgJzA+MCciCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQgJzA+MCciICJjb25mbGljdHMuYXQ6MTQzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQgJzA+MCcKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0Mzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjb25mbGljdHMuYXQ6MTQzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTQzOiAgXCRQUkVQQVJTRVIgLi9pbnB1dCAnMD4wPjAnIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0ICcwPjA+MCciICJjb25mbGljdHMuYXQ6MTQzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQgJzA+MD4wJworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTQzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDoxNDMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz4nLCBleHBlY3RpbmcgXCRlbmQKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDM6ICBcJFBSRVBBUlNFUiAuL2lucHV0ICcwPDA+MCciCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQgJzA8MD4wJyIgImNvbmZsaWN0cy5hdDoxNDMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCAnMDwwPjAnCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTQzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjE0MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPicsIGV4cGVjdGluZyBcJGVuZAorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTgyCisjQVRfU1RBUlRfMTgzCithdF9mbl9ncm91cF9iYW5uZXIgMTgzICdjb25mbGljdHMuYXQ6MTU1JyBcCisgICIlZXJyb3ItdmVyYm9zZSBhbmQgY29uc2lzdGVudCBlcnJvcnMiICIgICAgICAgICAgICIgMTAKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxODMuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisKKworCisKKworCisjIFVuZm9ydHVuYXRlbHksIG5vIGV4cGVjdGVkIHRva2VucyBhcmUgcmVwb3J0ZWQgZXZlbiB0aG91Z2ggJ2InIGNhbiBiZQorIyBhY2NlcHRlZC4gIE5ldmVydGhlbGVzcywgdGhlIG1haW4gcG9pbnQgb2YgdGhpcyB0ZXN0IGlzIHRvIG1ha2Ugc3VyZQorIyB0aGF0IGF0IGxlYXN0IHRoZSB1bmV4cGVjdGVkIHRva2VuIGlzIHJlcG9ydGVkLiAgSW4gYSBwcmV2aW91cyB2ZXJzaW9uCisjIG9mIEJpc29uLCBpdCB3YXNuJ3QgcmVwb3J0ZWQgYmVjYXVzZSB0aGUgZXJyb3IgaXMgZGV0ZWN0ZWQgaW4gYQorIyBjb25zaXN0ZW50IHN0YXRlIHdpdGggYW4gZXJyb3IgYWN0aW9uLCBhbmQgdGhhdCBjYXNlIGFsd2F5cyB0cmlnZ2VyZWQKKyMgdGhlIHNpbXBsZSAic3ludGF4IGVycm9yIiBtZXNzYWdlLgorIworIyBUaGUgcG9pbnQgaXNuJ3QgdG8gdGVzdCBJRUxSIGhlcmUsIGJ1dCBzdGF0ZSBtZXJnaW5nIGhhcHBlbnMgdG8KKyMgY29tcGxpY2F0ZSB0aGlzIGV4YW1wbGUuCisKKworCisKKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworCisKKyVjb2RlIHsKKyAgI2luY2x1ZGUgPGFzc2VydC5oPgorICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CisgIGludCB5eWxleCAoWVlTVFlQRSAqbHZhbHApOworICAjZGVmaW5lIFVTRShWYXIpCit9CisKKyVkZWZpbmUgYXBpLnB1cmUKKworJWRlZmluZSBsci50eXBlIGllbHIKKworJWVycm9yLXZlcmJvc2UKKworJSUKKworJW5vbmFzc29jICdhJzsKKworc3RhcnQ6IGNvbnNpc3RlbnQtZXJyb3Itb24tYS1hICdhJyA7CisKK2NvbnNpc3RlbnQtZXJyb3Itb24tYS1hOgorICAgICdhJyBkZWZhdWx0LXJlZHVjdGlvbgorICB8ICdhJyBkZWZhdWx0LXJlZHVjdGlvbiAnYScKKyAgfCAnYScgc2hpZnQKKyAgOworCitkZWZhdWx0LXJlZHVjdGlvbjogLyplbXB0eSovIDsKK3NoaWZ0OiAnYicgOworCisvLyBQcm92aWRlIGFub3RoZXIgY29udGV4dCBpbiB3aGljaCBhbGwgcnVsZXMgYXJlIHVzZWZ1bCBzbyB0aGF0IHRoaXMKKy8vIHRlc3QgY2FzZSBsb29rcyBhIGxpdHRsZSBtb3JlIHJlYWxpc3RpYy4KK3N0YXJ0OiAnYicgY29uc2lzdGVudC1lcnJvci1vbi1hLWEgJ2MnIDsKKworCislJQorCisvKi0tLS0tLS0tLgorfCB5eWxleC4gIHwKK2AtLS0tLS0tLSovCisKK2ludCB5eWxleCAoWVlTVFlQRSAqbHZhbHApCit7CisgIHN0YXRpYyBjaGFyIGNvbnN0ICppbnB1dCA9ICJhIjsKKyAgKmx2YWxwID0gMTsKKyAgcmV0dXJuICppbnB1dCsrOworfQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKworCisvKi0tLS0tLS0uCit8IG1haW4uICB8CitgLS0tLS0tLSovCisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjI5OTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNvbmZsaWN0cy5hdDoyOTkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6Mjk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjI5OTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgImNvbmZsaWN0cy5hdDoyOTkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6Mjk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoyOTk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6Mjk5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoyOTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6Mjk5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjI5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6Mjk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjI5OTogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjI5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjI5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY29uZmxpY3RzLmF0OjExNDogXCRQUkVQQVJTRVIgLi9pbnB1dCAnMD4wPjAnIgotZWNobyBjb25mbGljdHMuYXQ6MTE0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vaW5wdXQgJzA+MD4wJyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvID4+JGF0X3N0ZGVycjsgZWNobyAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc+JywgZXhwZWN0aW5nICc8JyBvciAnPicKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNvbmZsaWN0cy5hdDoxMTQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6Mjk5OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiY29uZmxpY3RzLmF0OjI5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjI5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoyOTk6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAiY29uZmxpY3RzLmF0OjI5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjI5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoyOTk6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAiY29uZmxpY3RzLmF0OjI5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6Mjk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoyOTk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjI5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBcJGVuZAorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjI5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworCisKKworCisKKworCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKworCislY29kZSB7CisgICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworICBpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWxwKTsKKyAgI2RlZmluZSBVU0UoVmFyKQorfQorCislZGVmaW5lIGFwaS5wdXJlCisKKyVkZWZpbmUgbHIudHlwZSBpZWxyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVnbHItcGFyc2VyCisKKyVlcnJvci12ZXJib3NlCisKKyUlCisKKyVub25hc3NvYyAnYSc7CisKK3N0YXJ0OiBjb25zaXN0ZW50LWVycm9yLW9uLWEtYSAnYScgOworCitjb25zaXN0ZW50LWVycm9yLW9uLWEtYToKKyAgICAnYScgZGVmYXVsdC1yZWR1Y3Rpb24KKyAgfCAnYScgZGVmYXVsdC1yZWR1Y3Rpb24gJ2EnCisgIHwgJ2EnIHNoaWZ0CisgIDsKKworZGVmYXVsdC1yZWR1Y3Rpb246IC8qZW1wdHkqLyA7CitzaGlmdDogJ2InIDsKKworLy8gUHJvdmlkZSBhbm90aGVyIGNvbnRleHQgaW4gd2hpY2ggYWxsIHJ1bGVzIGFyZSB1c2VmdWwgc28gdGhhdCB0aGlzCisvLyB0ZXN0IGNhc2UgbG9va3MgYSBsaXR0bGUgbW9yZSByZWFsaXN0aWMuCitzdGFydDogJ2InIGNvbnNpc3RlbnQtZXJyb3Itb24tYS1hICdjJyA7CisKKworJSUKKworLyotLS0tLS0tLS4KK3wgeXlsZXguICB8CitgLS0tLS0tLS0qLworCitpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWxwKQoreworICBzdGF0aWMgY2hhciBjb25zdCAqaW5wdXQgPSAiYSI7CisgICpsdmFscCA9IDE7CisgIHJldHVybiAqaW5wdXQrKzsKK30KKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisKKworLyotLS0tLS0tLgorfCBtYWluLiAgfAorYC0tLS0tLS0qLworCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMDM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjb25mbGljdHMuYXQ6MzAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMDM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiICJjb25mbGljdHMuYXQ6MzAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzAzOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjMwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMwMzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNvbmZsaWN0cy5hdDozMDMiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMDM6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDozMDMiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY29uZmxpY3RzLmF0OjExODogXCRQUkVQQVJTRVIgLi9pbnB1dCAnMDwwPjAnIgotZWNobyBjb25mbGljdHMuYXQ6MTE4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vaW5wdXQgJzA8MD4wJyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvID4+JGF0X3N0ZGVycjsgZWNobyAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc+JywgZXhwZWN0aW5nICc8JyBvciAnPicKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNvbmZsaWN0cy5hdDoxMTg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzAzOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiY29uZmxpY3RzLmF0OjMwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMDM6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAiY29uZmxpY3RzLmF0OjMwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMDM6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAiY29uZmxpY3RzLmF0OjMwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMDM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjMwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBcJGVuZAorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworCisKKworCisKKworCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKworCislY29kZSB7CisgICNpbmNsdWRlIDxjYXNzZXJ0PgorICAjaW5jbHVkZSA8c3RyaW5nPgorICBpbnQgeXlsZXggKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwKTsKKyAgI2RlZmluZSBVU0UoVmFyKQorfQorCislZGVmaW5lcworCislZGVmaW5lIGxyLnR5cGUgaWVscgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlbGFuZ3VhZ2UgImMrKyIKKworJWVycm9yLXZlcmJvc2UKKworJSUKKworJW5vbmFzc29jICdhJzsKKworc3RhcnQ6IGNvbnNpc3RlbnQtZXJyb3Itb24tYS1hICdhJyA7CisKK2NvbnNpc3RlbnQtZXJyb3Itb24tYS1hOgorICAgICdhJyBkZWZhdWx0LXJlZHVjdGlvbgorICB8ICdhJyBkZWZhdWx0LXJlZHVjdGlvbiAnYScKKyAgfCAnYScgc2hpZnQKKyAgOworCitkZWZhdWx0LXJlZHVjdGlvbjogLyplbXB0eSovIDsKK3NoaWZ0OiAnYicgOworCisvLyBQcm92aWRlIGFub3RoZXIgY29udGV4dCBpbiB3aGljaCBhbGwgcnVsZXMgYXJlIHVzZWZ1bCBzbyB0aGF0IHRoaXMKKy8vIHRlc3QgY2FzZSBsb29rcyBhIGxpdHRsZSBtb3JlIHJlYWxpc3RpYy4KK3N0YXJ0OiAnYicgY29uc2lzdGVudC1lcnJvci1vbi1hLWEgJ2MnIDsKKworCislJQorCisvKi0tLS0tLS0tLgorfCB5eWxleC4gIHwKK2AtLS0tLS0tLSovCisKK2ludCB5eWxleCAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHApCit7CisgIHN0YXRpYyBjaGFyIGNvbnN0ICppbnB1dCA9ICJhIjsKKyAgKmx2YWxwID0gMTsKKyAgcmV0dXJuICppbnB1dCsrOworfQorLyogQSBDKysgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3ZvaWQKK3l5OjpwYXJzZXI6OmVycm9yIChjb25zdCBsb2NhdGlvbl90eXBlJiBsLCBjb25zdCBzdGQ6OnN0cmluZyYgbSkKK3sKKyAgKHZvaWQpIGw7CisgIHN0ZDo6Y2VyciA8PCBtIDw8IHN0ZDo6ZW5kbDsKK30KKworCisvKi0tLS0tLS0uCit8IG1haW4uICB8CitgLS0tLS0tLSovCisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgeXk6OnBhcnNlciBwYXJzZXI7CisgIHJldHVybiBwYXJzZXIucGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMwODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmNjIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjb25mbGljdHMuYXQ6MzA4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzA4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkiICJjb25mbGljdHMuYXQ6MzA4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMwODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNvbmZsaWN0cy5hdDozMDgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMDg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6MzA4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzA4OiBiaXNvbiAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjMwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwogCi0gIDYwICkgIyA2MC4gY29uZmxpY3RzLmF0OjEyODogVW5yZXNvbHZlZCBTUiBDb25mbGljdHMKLSAgICBhdF9zZXR1cF9saW5lPSdjb25mbGljdHMuYXQ6MTI4JwotICAgIGF0X2Rlc2M9J1VucmVzb2x2ZWQgU1IgQ29uZmxpY3RzJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgNjA6IFVucmVzb2x2ZWQgU1IgQ29uZmxpY3RzICAgICAgICAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICI2MC4gY29uZmxpY3RzLmF0OjEyODogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMDg6IFwkQklTT05fQ1hYX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ1hYX1dPUktTIiAiY29uZmxpY3RzLmF0OjMwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ1hYX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMDg6IFwkQ1hYIFwkQ1hYRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuY2MgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuY2MgJExJQlMiICJjb25mbGljdHMuYXQ6MzA4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMDg6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAiY29uZmxpY3RzLmF0OjMwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMDg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjMwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBcJGVuZAorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworCisKKworCisKKworCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKworCislY29kZSBpbXBvcnRzIHsKKyAgaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Cit9CisKKyVkZWZpbmUgbHIudHlwZSBpZWxyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVsYW5ndWFnZSAiamF2YSIKKworJWVycm9yLXZlcmJvc2UKKworJSUKKworJW5vbmFzc29jICdhJzsKKworc3RhcnQ6IGNvbnNpc3RlbnQtZXJyb3Itb24tYS1hICdhJyA7CisKK2NvbnNpc3RlbnQtZXJyb3Itb24tYS1hOgorICAgICdhJyBkZWZhdWx0LXJlZHVjdGlvbgorICB8ICdhJyBkZWZhdWx0LXJlZHVjdGlvbiAnYScKKyAgfCAnYScgc2hpZnQKKyAgOworCitkZWZhdWx0LXJlZHVjdGlvbjogLyplbXB0eSovIDsKK3NoaWZ0OiAnYicgOworCisvLyBQcm92aWRlIGFub3RoZXIgY29udGV4dCBpbiB3aGljaCBhbGwgcnVsZXMgYXJlIHVzZWZ1bCBzbyB0aGF0IHRoaXMKKy8vIHRlc3QgY2FzZSBsb29rcyBhIGxpdHRsZSBtb3JlIHJlYWxpc3RpYy4KK3N0YXJ0OiAnYicgY29uc2lzdGVudC1lcnJvci1vbi1hLWEgJ2MnIDsKKworCislY29kZSBsZXhlciB7CisKKy8qLS0tLS0tLS0uCit8IHl5bGV4LiAgfAorYC0tLS0tLS0tKi8KKworcHVibGljIFN0cmluZyBpbnB1dCA9ICJhIjsKK3B1YmxpYyBpbnQgaW5kZXggPSAwOworcHVibGljIGludCB5eWxleCAoKQoreworICBpZiAoaW5kZXggPCBpbnB1dC5sZW5ndGggKCkpCisgICAgcmV0dXJuIGlucHV0LmNoYXJBdCAoaW5kZXgrKyk7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KK3B1YmxpYyBPYmplY3QgZ2V0TFZhbCAoKQoreworICByZXR1cm4gbmV3IEludGVnZXIoMSk7Cit9CisKKyAgcHVibGljIHZvaWQgeXllcnJvciAoU3RyaW5nIHMpCisgIHsKKyAgICBTeXN0ZW0uZXJyLnByaW50bG4gKHMpOworICB9CisKK307CisKKyUlCisKKy8qLS0tLS0tLS4KK3wgbWFpbi4gIHwKK2AtLS0tLS0tKi8KKworY2xhc3MgaW5wdXQKK3sKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZyBhcmdzW10pIHRocm93cyBJT0V4Y2VwdGlvbgorICB7CisgICAgWVlQYXJzZXIgcCA9IG5ldyBZWVBhcnNlciAoKTsKKyAgICBwLnBhcnNlICgpOworICB9Cit9CitfQVRFT0YKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMTM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5qYXZhIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjb25mbGljdHMuYXQ6MzEzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmphdmEgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMTM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmphdmEgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5qYXZhIGlucHV0LnkiICJjb25mbGljdHMuYXQ6MzEzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmphdmEgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzEzOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjMxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzEzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMxMzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNvbmZsaWN0cy5hdDozMTMiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMTM6IGJpc29uIC1vIGlucHV0LmphdmEgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDozMTMiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuamF2YSBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworJGFzX2VjaG8gImNvbmZsaWN0cy5hdDozMTMiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBQyIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzEzIgorJGFzX2VjaG8gImNvbmZsaWN0cy5hdDozMTMiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMTMiCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMxMzogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBpbnB1dC5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggaW5wdXQuamF2YSIgImNvbmZsaWN0cy5hdDozMTMiCisoICRhdF9jaGVja190cmFjZTsgJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIGlucHV0LmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzEzOiAgXCRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBpbnB1dCIgImNvbmZsaWN0cy5hdDozMTMiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisKKworCisKKyMgRXZlbiBjYW5vbmljYWwgTFIgZG9lc24ndCBmb3Jlc2VlIHRoZSBlcnJvciBmb3IgJ2EnIQorCisKKworCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKworCislY29kZSB7CisgICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworICBpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWxwKTsKKyAgI2RlZmluZSBVU0UoVmFyKQorfQorCislZGVmaW5lIGFwaS5wdXJlCisKKyVkZWZpbmUgbHIudHlwZSBpZWxyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVkZWZpbmUgbHIuZGVmYXVsdC1yZWR1Y3Rpb25zIGNvbnNpc3RlbnQKKworJWVycm9yLXZlcmJvc2UKKworJSUKKworJW5vbmFzc29jICdhJzsKKworc3RhcnQ6IGNvbnNpc3RlbnQtZXJyb3Itb24tYS1hICdhJyA7CisKK2NvbnNpc3RlbnQtZXJyb3Itb24tYS1hOgorICAgICdhJyBkZWZhdWx0LXJlZHVjdGlvbgorICB8ICdhJyBkZWZhdWx0LXJlZHVjdGlvbiAnYScKKyAgfCAnYScgc2hpZnQKKyAgOworCitkZWZhdWx0LXJlZHVjdGlvbjogLyplbXB0eSovIDsKK3NoaWZ0OiAnYicgOworCisvLyBQcm92aWRlIGFub3RoZXIgY29udGV4dCBpbiB3aGljaCBhbGwgcnVsZXMgYXJlIHVzZWZ1bCBzbyB0aGF0IHRoaXMKKy8vIHRlc3QgY2FzZSBsb29rcyBhIGxpdHRsZSBtb3JlIHJlYWxpc3RpYy4KK3N0YXJ0OiAnYicgY29uc2lzdGVudC1lcnJvci1vbi1hLWEgJ2MnIDsKKworCislJQorCisvKi0tLS0tLS0tLgorfCB5eWxleC4gIHwKK2AtLS0tLS0tLSovCisKK2ludCB5eWxleCAoWVlTVFlQRSAqbHZhbHApCit7CisgIHN0YXRpYyBjaGFyIGNvbnN0ICppbnB1dCA9ICJhIjsKKyAgKmx2YWxwID0gMTsKKyAgcmV0dXJuICppbnB1dCsrOworfQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKworCisvKi0tLS0tLS0uCit8IG1haW4uICB8CitgLS0tLS0tLSovCisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMyMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNvbmZsaWN0cy5hdDozMjAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMyMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgImNvbmZsaWN0cy5hdDozMjAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMjA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6MzIwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzIwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjMyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMyMDogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjMyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMjA6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJjb25mbGljdHMuYXQ6MzIwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMjA6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAiY29uZmxpY3RzLmF0OjMyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMjA6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAiY29uZmxpY3RzLmF0OjMyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMjA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjMyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBcJGVuZCwgZXhwZWN0aW5nICdhJyBvciAnYicKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisKKworCisKKworCisKKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisKKworJWNvZGUgeworICAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgICNpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgaW50IHl5bGV4IChZWVNUWVBFICpsdmFscCk7CisgICNkZWZpbmUgVVNFKFZhcikKK30KKworJWRlZmluZSBhcGkucHVyZQorCislZGVmaW5lIGxyLnR5cGUgaWVscgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlZGVmaW5lIGxyLmRlZmF1bHQtcmVkdWN0aW9ucyBhY2NlcHRpbmcKKworJWVycm9yLXZlcmJvc2UKKworJSUKKworJW5vbmFzc29jICdhJzsKKworc3RhcnQ6IGNvbnNpc3RlbnQtZXJyb3Itb24tYS1hICdhJyA7CisKK2NvbnNpc3RlbnQtZXJyb3Itb24tYS1hOgorICAgICdhJyBkZWZhdWx0LXJlZHVjdGlvbgorICB8ICdhJyBkZWZhdWx0LXJlZHVjdGlvbiAnYScKKyAgfCAnYScgc2hpZnQKKyAgOworCitkZWZhdWx0LXJlZHVjdGlvbjogLyplbXB0eSovIDsKK3NoaWZ0OiAnYicgOworCisvLyBQcm92aWRlIGFub3RoZXIgY29udGV4dCBpbiB3aGljaCBhbGwgcnVsZXMgYXJlIHVzZWZ1bCBzbyB0aGF0IHRoaXMKKy8vIHRlc3QgY2FzZSBsb29rcyBhIGxpdHRsZSBtb3JlIHJlYWxpc3RpYy4KK3N0YXJ0OiAnYicgY29uc2lzdGVudC1lcnJvci1vbi1hLWEgJ2MnIDsKKworCislJQorCisvKi0tLS0tLS0tLgorfCB5eWxleC4gIHwKK2AtLS0tLS0tLSovCisKK2ludCB5eWxleCAoWVlTVFlQRSAqbHZhbHApCit7CisgIHN0YXRpYyBjaGFyIGNvbnN0ICppbnB1dCA9ICJhIjsKKyAgKmx2YWxwID0gMTsKKyAgcmV0dXJuICppbnB1dCsrOworfQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKworCisvKi0tLS0tLS0uCit8IG1haW4uICB8CitgLS0tLS0tLSovCisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMyNTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNvbmZsaWN0cy5hdDozMjUiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzI1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMyNTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgImNvbmZsaWN0cy5hdDozMjUiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzI1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMjU6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6MzI1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMjUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzI1OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjMyNSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzI1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMyNTogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjMyNSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMyNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMjU6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJjb25mbGljdHMuYXQ6MzI1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzI1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMjU6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAiY29uZmxpY3RzLmF0OjMyNSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMyNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMjU6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAiY29uZmxpY3RzLmF0OjMyNSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzI1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMjU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjMyNSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBcJGVuZCwgZXhwZWN0aW5nICdhJyBvciAnYicKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMjUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisKKworCisKKworCisKKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisKKworJWNvZGUgeworICAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgICNpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgaW50IHl5bGV4IChZWVNUWVBFICpsdmFscCk7CisgICNkZWZpbmUgVVNFKFZhcikKK30KKworJWRlZmluZSBhcGkucHVyZQorCislZGVmaW5lIGxyLnR5cGUgY2Fub25pY2FsLWxyCisKKyVlcnJvci12ZXJib3NlCisKKyUlCisKKyVub25hc3NvYyAnYSc7CisKK3N0YXJ0OiBjb25zaXN0ZW50LWVycm9yLW9uLWEtYSAnYScgOworCitjb25zaXN0ZW50LWVycm9yLW9uLWEtYToKKyAgICAnYScgZGVmYXVsdC1yZWR1Y3Rpb24KKyAgfCAnYScgZGVmYXVsdC1yZWR1Y3Rpb24gJ2EnCisgIHwgJ2EnIHNoaWZ0CisgIDsKKworZGVmYXVsdC1yZWR1Y3Rpb246IC8qZW1wdHkqLyA7CitzaGlmdDogJ2InIDsKKworLy8gUHJvdmlkZSBhbm90aGVyIGNvbnRleHQgaW4gd2hpY2ggYWxsIHJ1bGVzIGFyZSB1c2VmdWwgc28gdGhhdCB0aGlzCisvLyB0ZXN0IGNhc2UgbG9va3MgYSBsaXR0bGUgbW9yZSByZWFsaXN0aWMuCitzdGFydDogJ2InIGNvbnNpc3RlbnQtZXJyb3Itb24tYS1hICdjJyA7CisKKworJSUKKworLyotLS0tLS0tLS4KK3wgeXlsZXguICB8CitgLS0tLS0tLS0qLworCitpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWxwKQoreworICBzdGF0aWMgY2hhciBjb25zdCAqaW5wdXQgPSAiYSI7CisgICpsdmFscCA9IDE7CisgIHJldHVybiAqaW5wdXQrKzsKK30KKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisKKworLyotLS0tLS0tLgorfCBtYWluLiAgfAorYC0tLS0tLS0qLworCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMzA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjb25mbGljdHMuYXQ6MzMwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMzMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMzA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiICJjb25mbGljdHMuYXQ6MzMwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMzMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzMwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjMzMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzMwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMzMDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNvbmZsaWN0cy5hdDozMzAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMzMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMzA6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDozMzAiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzMwOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiY29uZmxpY3RzLmF0OjMzMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMzMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzMwOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyIgImNvbmZsaWN0cy5hdDozMzAiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzMwOiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgImNvbmZsaWN0cy5hdDozMzAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMzMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzMwOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDozMzAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgXCRlbmQsIGV4cGVjdGluZyAnYScgb3IgJ2InCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzMwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCisKKworCisKKyMgT25seSBMQUMgZ2V0cyBpdCByaWdodC4KKworCisKKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisKKworJWNvZGUgeworICAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgICNpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgaW50IHl5bGV4IChZWVNUWVBFICpsdmFscCk7CisgICNkZWZpbmUgVVNFKFZhcikKK30KKworJWRlZmluZSBhcGkucHVyZQorCislZGVmaW5lIGxyLnR5cGUgY2Fub25pY2FsLWxyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVkZWZpbmUgcGFyc2UubGFjIGZ1bGwKKworJWVycm9yLXZlcmJvc2UKKworJSUKKworJW5vbmFzc29jICdhJzsKKworc3RhcnQ6IGNvbnNpc3RlbnQtZXJyb3Itb24tYS1hICdhJyA7CisKK2NvbnNpc3RlbnQtZXJyb3Itb24tYS1hOgorICAgICdhJyBkZWZhdWx0LXJlZHVjdGlvbgorICB8ICdhJyBkZWZhdWx0LXJlZHVjdGlvbiAnYScKKyAgfCAnYScgc2hpZnQKKyAgOworCitkZWZhdWx0LXJlZHVjdGlvbjogLyplbXB0eSovIDsKK3NoaWZ0OiAnYicgOworCisvLyBQcm92aWRlIGFub3RoZXIgY29udGV4dCBpbiB3aGljaCBhbGwgcnVsZXMgYXJlIHVzZWZ1bCBzbyB0aGF0IHRoaXMKKy8vIHRlc3QgY2FzZSBsb29rcyBhIGxpdHRsZSBtb3JlIHJlYWxpc3RpYy4KK3N0YXJ0OiAnYicgY29uc2lzdGVudC1lcnJvci1vbi1hLWEgJ2MnIDsKKworCislJQorCisvKi0tLS0tLS0tLgorfCB5eWxleC4gIHwKK2AtLS0tLS0tLSovCisKK2ludCB5eWxleCAoWVlTVFlQRSAqbHZhbHApCit7CisgIHN0YXRpYyBjaGFyIGNvbnN0ICppbnB1dCA9ICJhIjsKKyAgKmx2YWxwID0gMTsKKyAgcmV0dXJuICppbnB1dCsrOworfQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKworCisvKi0tLS0tLS0uCit8IG1haW4uICB8CitgLS0tLS0tLSovCisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMzNjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNvbmZsaWN0cy5hdDozMzYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMzNjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgImNvbmZsaWN0cy5hdDozMzYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMzY6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6MzM2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzM2OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjMzNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMzNjogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjMzNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMzNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMzY6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJjb25mbGljdHMuYXQ6MzM2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMzY6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAiY29uZmxpY3RzLmF0OjMzNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMzNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMzY6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAiY29uZmxpY3RzLmF0OjMzNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozMzY6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjMzNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBcJGVuZCwgZXhwZWN0aW5nICdiJworIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjMzNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworCisKKworCisKKworCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKworCislY29kZSB7CisgICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworICBpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWxwKTsKKyAgI2RlZmluZSBVU0UoVmFyKQorfQorCislZGVmaW5lIGFwaS5wdXJlCisKKyVkZWZpbmUgbHIudHlwZSBpZWxyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVkZWZpbmUgcGFyc2UubGFjIGZ1bGwKKworJWVycm9yLXZlcmJvc2UKKworJSUKKworJW5vbmFzc29jICdhJzsKKworc3RhcnQ6IGNvbnNpc3RlbnQtZXJyb3Itb24tYS1hICdhJyA7CisKK2NvbnNpc3RlbnQtZXJyb3Itb24tYS1hOgorICAgICdhJyBkZWZhdWx0LXJlZHVjdGlvbgorICB8ICdhJyBkZWZhdWx0LXJlZHVjdGlvbiAnYScKKyAgfCAnYScgc2hpZnQKKyAgOworCitkZWZhdWx0LXJlZHVjdGlvbjogLyplbXB0eSovIDsKK3NoaWZ0OiAnYicgOworCisvLyBQcm92aWRlIGFub3RoZXIgY29udGV4dCBpbiB3aGljaCBhbGwgcnVsZXMgYXJlIHVzZWZ1bCBzbyB0aGF0IHRoaXMKKy8vIHRlc3QgY2FzZSBsb29rcyBhIGxpdHRsZSBtb3JlIHJlYWxpc3RpYy4KK3N0YXJ0OiAnYicgY29uc2lzdGVudC1lcnJvci1vbi1hLWEgJ2MnIDsKKworCislJQorCisvKi0tLS0tLS0tLgorfCB5eWxleC4gIHwKK2AtLS0tLS0tLSovCisKK2ludCB5eWxleCAoWVlTVFlQRSAqbHZhbHApCit7CisgIHN0YXRpYyBjaGFyIGNvbnN0ICppbnB1dCA9ICJhIjsKKyAgKmx2YWxwID0gMTsKKyAgcmV0dXJuICppbnB1dCsrOworfQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKworCisvKi0tLS0tLS0uCit8IG1haW4uICB8CitgLS0tLS0tLSovCisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjM0MTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNvbmZsaWN0cy5hdDozNDEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzQxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjM0MTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgImNvbmZsaWN0cy5hdDozNDEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzQxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozNDE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6MzQxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozNDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzQxOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjM0MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzQxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjM0MTogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjM0MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjM0MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozNDE6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJjb25mbGljdHMuYXQ6MzQxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzQxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozNDE6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAiY29uZmxpY3RzLmF0OjM0MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjM0MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozNDE6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAiY29uZmxpY3RzLmF0OjM0MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MzQxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozNDE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjM0MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBcJGVuZCwgZXhwZWN0aW5nICdiJworIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjM0MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworCisKKyVjb2RlIHsKKyAgI2luY2x1ZGUgPGFzc2VydC5oPgorICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CisgIGludCB5eWxleCAoWVlTVFlQRSAqbHZhbHApOworICAjZGVmaW5lIFVTRShWYXIpCit9CisKKyVkZWZpbmUgYXBpLnB1cmUKKworCisKKyVlcnJvci12ZXJib3NlCisKKyUlCisKKyVub25hc3NvYyAnYSc7CisKKy8vIElmICQkID0gMCBoZXJlLCB0aGVuIHdlIGtub3cgdGhhdCB0aGUgJ2EnIGRlc3RydWN0b3IgaXMgYmVpbmcgaW52b2tlZAorLy8gaW5jb3JyZWN0bHkgZm9yIHRoZSAnYicgc2V0IGluIHRoZSBzZW1hbnRpYyBhY3Rpb24gYmVsb3cuICBBbGwgJ2EnCisvLyB0b2tlbnMgYXJlIHJldHVybmVkIGJ5IHl5bGV4LCB3aGljaCBzZXRzICQkID0gMS4KKyVkZXN0cnVjdG9yIHsKKyAgaWYgKCEkJCkKKyAgICBmcHJpbnRmIChzdGRlcnIsICJXcm9uZyBkZXN0cnVjdG9yLlxuIik7Cit9ICdhJzsKKworLy8gUmF0aGVyIHRoYW4gZGVwZW5kIG9uIGFuIGluY29uc2lzdGVudCBzdGF0ZSB0byBpbmR1Y2UgcmVhZGluZyBhCisvLyBsb29rYWhlYWQgYXMgaW4gdGhlIHByZXZpb3VzIGdyYW1tYXIsIGp1c3QgYXNzaWduIHRoZSBsb29rYWhlYWQgaW4gYQorLy8gc2VtYW50aWMgYWN0aW9uLiAgVGhhdCBsb29rYWhlYWQgaXNuJ3QgbmVlZGVkIGJlZm9yZSBlaXRoZXIgZXJyb3IKKy8vIGFjdGlvbiBpcyBlbmNvdW50ZXJlZC4gIEluIGEgcHJldmlvdXMgdmVyc2lvbiBvZiBCaXNvbiwgdGhpcyB3YXMgYQorLy8gcHJvYmxlbSBhcyBpdCBtZWFudCB5eWNoYXIgd2FzIG5vdCB0cmFuc2xhdGVkIGludG8geXl0b2tlbiBiZWZvcmUKKy8vIGVpdGhlciBlcnJvciBhY3Rpb24uICBUaGUgc2Vjb25kIGVycm9yIGFjdGlvbiB0aHVzIGludm9rZWQgYQorLy8gZGVzdHJ1Y3RvciB0aGF0IGl0IHNlbGVjdGVkIGFjY29yZGluZyB0byB0aGUgaW5jb3JyZWN0IHl5dG9rZW4uICBUaGUKKy8vIGZpcnN0IGVycm9yIGFjdGlvbiB3b3VsZCBoYXZlIHJlcG9ydGVkIGFuIGluY29ycmVjdCB1bmV4cGVjdGVkIHRva2VuCisvLyBleGNlcHQgdGhhdCwgZHVlIHRvIHRoZSBidWcgZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBncmFtbWFyLCB0aGUKKy8vIHVuZXhwZWN0ZWQgdG9rZW4gd2FzIG5vdCByZXBvcnRlZCBhdCBhbGwuCitzdGFydDogZXJyb3ItcmVkdWNlIGNvbnNpc3RlbnQtZXJyb3IgJ2EnIHsgVVNFICgkMyk7IH0gOworCitlcnJvci1yZWR1Y2U6CisgICdhJyAnYScgY29uc2lzdGVudC1yZWR1Y3Rpb24gY29uc2lzdGVudC1lcnJvciAnYScKKyAgeyBVU0UgKCgkMSwgJDIsICQ1KSk7IH0KK3wgJ2EnIGVycm9yCisgIHsgVVNFICgkMSk7IH0KKzsKKworY29uc2lzdGVudC1yZWR1Y3Rpb246IC8qZW1wdHkqLyB7CisgIGFzc2VydCAoeXljaGFyID09IFlZRU1QVFkpOworICB5eWx2YWwgPSAwOworICB5eWNoYXIgPSAnYic7Cit9IDsKKworY29uc2lzdGVudC1lcnJvcjoKKyAgJ2EnIHsgVVNFICgkMSk7IH0KK3wgLyplbXB0eSovICVwcmVjICdhJworOworCisvLyBQcm92aWRlIGFub3RoZXIgY29udGV4dCBpbiB3aGljaCBhbGwgcnVsZXMgYXJlIHVzZWZ1bCBzbyB0aGF0IHRoaXMKKy8vIHRlc3QgY2FzZSBsb29rcyBhIGxpdHRsZSBtb3JlIHJlYWxpc3RpYy4KK3N0YXJ0OiAnYicgY29uc2lzdGVudC1lcnJvciAnYicgOworCisKKyUlCisKKy8qLS0tLS0tLS0uCit8IHl5bGV4LiAgfAorYC0tLS0tLS0tKi8KKworaW50IHl5bGV4IChZWVNUWVBFICpsdmFscCkKK3sKKyAgc3RhdGljIGNoYXIgY29uc3QgKmlucHV0ID0gImFhIjsKKyAgKmx2YWxwID0gMTsKKyAgcmV0dXJuICppbnB1dCsrOworfQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKworCisvKi0tLS0tLS0uCit8IG1haW4uICB8CitgLS0tLS0tLSovCisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjM5NzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNvbmZsaWN0cy5hdDozOTciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6Mzk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjM5NzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgImNvbmZsaWN0cy5hdDozOTciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6Mzk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozOTc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6Mzk3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozOTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6Mzk3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjM5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6Mzk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjM5NzogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjM5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjM5NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozOTc6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJjb25mbGljdHMuYXQ6Mzk3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6Mzk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozOTc6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAiY29uZmxpY3RzLmF0OjM5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjM5NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozOTc6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAiY29uZmxpY3RzLmF0OjM5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6Mzk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozOTc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjM5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnYicKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDozOTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisKKworCisKKworCisKKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisKKworJWNvZGUgeworICAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgICNpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgaW50IHl5bGV4IChZWVNUWVBFICpsdmFscCk7CisgICNkZWZpbmUgVVNFKFZhcikKK30KKworJWRlZmluZSBhcGkucHVyZQorCislZ2xyLXBhcnNlcgorCislZXJyb3ItdmVyYm9zZQorCislJQorCislbm9uYXNzb2MgJ2EnOworCisvLyBJZiAkJCA9IDAgaGVyZSwgdGhlbiB3ZSBrbm93IHRoYXQgdGhlICdhJyBkZXN0cnVjdG9yIGlzIGJlaW5nIGludm9rZWQKKy8vIGluY29ycmVjdGx5IGZvciB0aGUgJ2InIHNldCBpbiB0aGUgc2VtYW50aWMgYWN0aW9uIGJlbG93LiAgQWxsICdhJworLy8gdG9rZW5zIGFyZSByZXR1cm5lZCBieSB5eWxleCwgd2hpY2ggc2V0cyAkJCA9IDEuCislZGVzdHJ1Y3RvciB7CisgIGlmICghJCQpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiV3JvbmcgZGVzdHJ1Y3Rvci5cbiIpOworfSAnYSc7CisKKy8vIFJhdGhlciB0aGFuIGRlcGVuZCBvbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgdG8gaW5kdWNlIHJlYWRpbmcgYQorLy8gbG9va2FoZWFkIGFzIGluIHRoZSBwcmV2aW91cyBncmFtbWFyLCBqdXN0IGFzc2lnbiB0aGUgbG9va2FoZWFkIGluIGEKKy8vIHNlbWFudGljIGFjdGlvbi4gIFRoYXQgbG9va2FoZWFkIGlzbid0IG5lZWRlZCBiZWZvcmUgZWl0aGVyIGVycm9yCisvLyBhY3Rpb24gaXMgZW5jb3VudGVyZWQuICBJbiBhIHByZXZpb3VzIHZlcnNpb24gb2YgQmlzb24sIHRoaXMgd2FzIGEKKy8vIHByb2JsZW0gYXMgaXQgbWVhbnQgeXljaGFyIHdhcyBub3QgdHJhbnNsYXRlZCBpbnRvIHl5dG9rZW4gYmVmb3JlCisvLyBlaXRoZXIgZXJyb3IgYWN0aW9uLiAgVGhlIHNlY29uZCBlcnJvciBhY3Rpb24gdGh1cyBpbnZva2VkIGEKKy8vIGRlc3RydWN0b3IgdGhhdCBpdCBzZWxlY3RlZCBhY2NvcmRpbmcgdG8gdGhlIGluY29ycmVjdCB5eXRva2VuLiAgVGhlCisvLyBmaXJzdCBlcnJvciBhY3Rpb24gd291bGQgaGF2ZSByZXBvcnRlZCBhbiBpbmNvcnJlY3QgdW5leHBlY3RlZCB0b2tlbgorLy8gZXhjZXB0IHRoYXQsIGR1ZSB0byB0aGUgYnVnIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgZ3JhbW1hciwgdGhlCisvLyB1bmV4cGVjdGVkIHRva2VuIHdhcyBub3QgcmVwb3J0ZWQgYXQgYWxsLgorc3RhcnQ6IGVycm9yLXJlZHVjZSBjb25zaXN0ZW50LWVycm9yICdhJyB7IFVTRSAoJDMpOyB9IDsKKworZXJyb3ItcmVkdWNlOgorICAnYScgJ2EnIGNvbnNpc3RlbnQtcmVkdWN0aW9uIGNvbnNpc3RlbnQtZXJyb3IgJ2EnCisgIHsgVVNFICgoJDEsICQyLCAkNSkpOyB9Cit8ICdhJyBlcnJvcgorICB7IFVTRSAoJDEpOyB9Cis7CisKK2NvbnNpc3RlbnQtcmVkdWN0aW9uOiAvKmVtcHR5Ki8geworICBhc3NlcnQgKHl5Y2hhciA9PSBZWUVNUFRZKTsKKyAgeXlsdmFsID0gMDsKKyAgeXljaGFyID0gJ2InOworfSA7CisKK2NvbnNpc3RlbnQtZXJyb3I6CisgICdhJyB7IFVTRSAoJDEpOyB9Cit8IC8qZW1wdHkqLyAlcHJlYyAnYScKKzsKKworLy8gUHJvdmlkZSBhbm90aGVyIGNvbnRleHQgaW4gd2hpY2ggYWxsIHJ1bGVzIGFyZSB1c2VmdWwgc28gdGhhdCB0aGlzCisvLyB0ZXN0IGNhc2UgbG9va3MgYSBsaXR0bGUgbW9yZSByZWFsaXN0aWMuCitzdGFydDogJ2InIGNvbnNpc3RlbnQtZXJyb3IgJ2InIDsKKworCislJQorCisvKi0tLS0tLS0tLgorfCB5eWxleC4gIHwKK2AtLS0tLS0tLSovCisKK2ludCB5eWxleCAoWVlTVFlQRSAqbHZhbHApCit7CisgIHN0YXRpYyBjaGFyIGNvbnN0ICppbnB1dCA9ICJhYSI7CisgICpsdmFscCA9IDE7CisgIHJldHVybiAqaW5wdXQrKzsKK30KKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisKKworLyotLS0tLS0tLgorfCBtYWluLiAgfAorYC0tLS0tLS0qLworCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MDE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjb25mbGljdHMuYXQ6NDAxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQwMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MDE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiICJjb25mbGljdHMuYXQ6NDAxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQwMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDAxOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjQwMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDAxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQwMTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNvbmZsaWN0cy5hdDo0MDEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQwMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MDE6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDo0MDEiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDAxOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiY29uZmxpY3RzLmF0OjQwMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQwMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDAxOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyIgImNvbmZsaWN0cy5hdDo0MDEiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDAxOiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgImNvbmZsaWN0cy5hdDo0MDEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQwMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDAxOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDo0MDEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ2InCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDAxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCisKKworCisKKworCisKKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworCisKKyVjb2RlIHsKKyAgI2luY2x1ZGUgPGNhc3NlcnQ+CisgICNpbmNsdWRlIDxzdHJpbmc+CisgIGludCB5eWxleCAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHApOworICAjZGVmaW5lIFVTRShWYXIpCit9CisKKyVkZWZpbmVzCisKKyVsYW5ndWFnZSAiYysrIgorCislZXJyb3ItdmVyYm9zZQorCislJQorCislbm9uYXNzb2MgJ2EnOworCisvLyBJZiAkJCA9IDAgaGVyZSwgdGhlbiB3ZSBrbm93IHRoYXQgdGhlICdhJyBkZXN0cnVjdG9yIGlzIGJlaW5nIGludm9rZWQKKy8vIGluY29ycmVjdGx5IGZvciB0aGUgJ2InIHNldCBpbiB0aGUgc2VtYW50aWMgYWN0aW9uIGJlbG93LiAgQWxsICdhJworLy8gdG9rZW5zIGFyZSByZXR1cm5lZCBieSB5eWxleCwgd2hpY2ggc2V0cyAkJCA9IDEuCislZGVzdHJ1Y3RvciB7CisgIGlmICghJCQpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiV3JvbmcgZGVzdHJ1Y3Rvci5cbiIpOworfSAnYSc7CisKKy8vIFJhdGhlciB0aGFuIGRlcGVuZCBvbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgdG8gaW5kdWNlIHJlYWRpbmcgYQorLy8gbG9va2FoZWFkIGFzIGluIHRoZSBwcmV2aW91cyBncmFtbWFyLCBqdXN0IGFzc2lnbiB0aGUgbG9va2FoZWFkIGluIGEKKy8vIHNlbWFudGljIGFjdGlvbi4gIFRoYXQgbG9va2FoZWFkIGlzbid0IG5lZWRlZCBiZWZvcmUgZWl0aGVyIGVycm9yCisvLyBhY3Rpb24gaXMgZW5jb3VudGVyZWQuICBJbiBhIHByZXZpb3VzIHZlcnNpb24gb2YgQmlzb24sIHRoaXMgd2FzIGEKKy8vIHByb2JsZW0gYXMgaXQgbWVhbnQgeXljaGFyIHdhcyBub3QgdHJhbnNsYXRlZCBpbnRvIHl5dG9rZW4gYmVmb3JlCisvLyBlaXRoZXIgZXJyb3IgYWN0aW9uLiAgVGhlIHNlY29uZCBlcnJvciBhY3Rpb24gdGh1cyBpbnZva2VkIGEKKy8vIGRlc3RydWN0b3IgdGhhdCBpdCBzZWxlY3RlZCBhY2NvcmRpbmcgdG8gdGhlIGluY29ycmVjdCB5eXRva2VuLiAgVGhlCisvLyBmaXJzdCBlcnJvciBhY3Rpb24gd291bGQgaGF2ZSByZXBvcnRlZCBhbiBpbmNvcnJlY3QgdW5leHBlY3RlZCB0b2tlbgorLy8gZXhjZXB0IHRoYXQsIGR1ZSB0byB0aGUgYnVnIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgZ3JhbW1hciwgdGhlCisvLyB1bmV4cGVjdGVkIHRva2VuIHdhcyBub3QgcmVwb3J0ZWQgYXQgYWxsLgorc3RhcnQ6IGVycm9yLXJlZHVjZSBjb25zaXN0ZW50LWVycm9yICdhJyB7IFVTRSAoJDMpOyB9IDsKKworZXJyb3ItcmVkdWNlOgorICAnYScgJ2EnIGNvbnNpc3RlbnQtcmVkdWN0aW9uIGNvbnNpc3RlbnQtZXJyb3IgJ2EnCisgIHsgVVNFICgoJDEsICQyLCAkNSkpOyB9Cit8ICdhJyBlcnJvcgorICB7IFVTRSAoJDEpOyB9Cis7CisKK2NvbnNpc3RlbnQtcmVkdWN0aW9uOiAvKmVtcHR5Ki8geworICBhc3NlcnQgKHl5Y2hhciA9PSB5eWVtcHR5Xyk7CisgIHl5bHZhbCA9IDA7CisgIHl5Y2hhciA9ICdiJzsKK30gOworCitjb25zaXN0ZW50LWVycm9yOgorICAnYScgeyBVU0UgKCQxKTsgfQorfCAvKmVtcHR5Ki8gJXByZWMgJ2EnCis7CisKKy8vIFByb3ZpZGUgYW5vdGhlciBjb250ZXh0IGluIHdoaWNoIGFsbCBydWxlcyBhcmUgdXNlZnVsIHNvIHRoYXQgdGhpcworLy8gdGVzdCBjYXNlIGxvb2tzIGEgbGl0dGxlIG1vcmUgcmVhbGlzdGljLgorc3RhcnQ6ICdiJyBjb25zaXN0ZW50LWVycm9yICdiJyA7CisKKworJSUKKworLyotLS0tLS0tLS4KK3wgeXlsZXguICB8CitgLS0tLS0tLS0qLworCitpbnQgeXlsZXggKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwKQoreworICBzdGF0aWMgY2hhciBjb25zdCAqaW5wdXQgPSAiYWEiOworICAqbHZhbHAgPSAxOworICByZXR1cm4gKmlucHV0Kys7Cit9CisvKiBBIEMrKyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLwordm9pZAoreXk6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGxvY2F0aW9uX3R5cGUmIGwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtKQoreworICAodm9pZCkgbDsKKyAgc3RkOjpjZXJyIDw8IG0gPDwgc3RkOjplbmRsOworfQorCisKKy8qLS0tLS0tLS4KK3wgbWFpbi4gIHwKK2AtLS0tLS0tKi8KKworaW50CittYWluICh2b2lkKQoreworICB5eTo6cGFyc2VyIHBhcnNlcjsKKyAgcmV0dXJuIHBhcnNlci5wYXJzZSAoKTsKK30KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDA1OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuY2MgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNvbmZsaWN0cy5hdDo0MDUiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuY2MgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQwNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MDU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuY2MgaW5wdXQueSIgImNvbmZsaWN0cy5hdDo0MDUiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuY2MgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQwNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDA1OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjQwNSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDA1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQwNTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNvbmZsaWN0cy5hdDo0MDUiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQwNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MDU6IGJpc29uIC1vIGlucHV0LmNjIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjb25mbGljdHMuYXQ6NDA1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQwNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQwNTogXCRCSVNPTl9DWFhfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DWFhfV09SS1MiICJjb25mbGljdHMuYXQ6NDA1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DWFhfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQwNTogXCRDWFggXCRDWFhGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyAkTElCUyIgImNvbmZsaWN0cy5hdDo0MDUiCisoICRhdF9jaGVja190cmFjZTsgJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmNjICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDA1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQwNTogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJjb25mbGljdHMuYXQ6NDA1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQwNTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjb25mbGljdHMuYXQ6NDA1IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICdiJworIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQwNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworCisKKworIyBObyBKYXZhIHRlc3QgYmVjYXVzZSB5eWNoYXIgY2Fubm90IGJlIG1hbmlwdWxhdGVkIGJ5IHVzZXJzLgorCisKKworCisKKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworCisKKyVjb2RlIHsKKyAgI2luY2x1ZGUgPGFzc2VydC5oPgorICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CisgIGludCB5eWxleCAoWVlTVFlQRSAqbHZhbHApOworICAjZGVmaW5lIFVTRShWYXIpCit9CisKKyVkZWZpbmUgYXBpLnB1cmUKKworJWRlZmluZSBsci5kZWZhdWx0LXJlZHVjdGlvbnMgY29uc2lzdGVudAorCislZXJyb3ItdmVyYm9zZQorCislJQorCislbm9uYXNzb2MgJ2EnOworCisvLyBJZiAkJCA9IDAgaGVyZSwgdGhlbiB3ZSBrbm93IHRoYXQgdGhlICdhJyBkZXN0cnVjdG9yIGlzIGJlaW5nIGludm9rZWQKKy8vIGluY29ycmVjdGx5IGZvciB0aGUgJ2InIHNldCBpbiB0aGUgc2VtYW50aWMgYWN0aW9uIGJlbG93LiAgQWxsICdhJworLy8gdG9rZW5zIGFyZSByZXR1cm5lZCBieSB5eWxleCwgd2hpY2ggc2V0cyAkJCA9IDEuCislZGVzdHJ1Y3RvciB7CisgIGlmICghJCQpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiV3JvbmcgZGVzdHJ1Y3Rvci5cbiIpOworfSAnYSc7CisKKy8vIFJhdGhlciB0aGFuIGRlcGVuZCBvbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgdG8gaW5kdWNlIHJlYWRpbmcgYQorLy8gbG9va2FoZWFkIGFzIGluIHRoZSBwcmV2aW91cyBncmFtbWFyLCBqdXN0IGFzc2lnbiB0aGUgbG9va2FoZWFkIGluIGEKKy8vIHNlbWFudGljIGFjdGlvbi4gIFRoYXQgbG9va2FoZWFkIGlzbid0IG5lZWRlZCBiZWZvcmUgZWl0aGVyIGVycm9yCisvLyBhY3Rpb24gaXMgZW5jb3VudGVyZWQuICBJbiBhIHByZXZpb3VzIHZlcnNpb24gb2YgQmlzb24sIHRoaXMgd2FzIGEKKy8vIHByb2JsZW0gYXMgaXQgbWVhbnQgeXljaGFyIHdhcyBub3QgdHJhbnNsYXRlZCBpbnRvIHl5dG9rZW4gYmVmb3JlCisvLyBlaXRoZXIgZXJyb3IgYWN0aW9uLiAgVGhlIHNlY29uZCBlcnJvciBhY3Rpb24gdGh1cyBpbnZva2VkIGEKKy8vIGRlc3RydWN0b3IgdGhhdCBpdCBzZWxlY3RlZCBhY2NvcmRpbmcgdG8gdGhlIGluY29ycmVjdCB5eXRva2VuLiAgVGhlCisvLyBmaXJzdCBlcnJvciBhY3Rpb24gd291bGQgaGF2ZSByZXBvcnRlZCBhbiBpbmNvcnJlY3QgdW5leHBlY3RlZCB0b2tlbgorLy8gZXhjZXB0IHRoYXQsIGR1ZSB0byB0aGUgYnVnIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgZ3JhbW1hciwgdGhlCisvLyB1bmV4cGVjdGVkIHRva2VuIHdhcyBub3QgcmVwb3J0ZWQgYXQgYWxsLgorc3RhcnQ6IGVycm9yLXJlZHVjZSBjb25zaXN0ZW50LWVycm9yICdhJyB7IFVTRSAoJDMpOyB9IDsKKworZXJyb3ItcmVkdWNlOgorICAnYScgJ2EnIGNvbnNpc3RlbnQtcmVkdWN0aW9uIGNvbnNpc3RlbnQtZXJyb3IgJ2EnCisgIHsgVVNFICgoJDEsICQyLCAkNSkpOyB9Cit8ICdhJyBlcnJvcgorICB7IFVTRSAoJDEpOyB9Cis7CisKK2NvbnNpc3RlbnQtcmVkdWN0aW9uOiAvKmVtcHR5Ki8geworICBhc3NlcnQgKHl5Y2hhciA9PSBZWUVNUFRZKTsKKyAgeXlsdmFsID0gMDsKKyAgeXljaGFyID0gJ2InOworfSA7CisKK2NvbnNpc3RlbnQtZXJyb3I6CisgICdhJyB7IFVTRSAoJDEpOyB9Cit8IC8qZW1wdHkqLyAlcHJlYyAnYScKKzsKKworLy8gUHJvdmlkZSBhbm90aGVyIGNvbnRleHQgaW4gd2hpY2ggYWxsIHJ1bGVzIGFyZSB1c2VmdWwgc28gdGhhdCB0aGlzCisvLyB0ZXN0IGNhc2UgbG9va3MgYSBsaXR0bGUgbW9yZSByZWFsaXN0aWMuCitzdGFydDogJ2InIGNvbnNpc3RlbnQtZXJyb3IgJ2InIDsKKworCislJQorCisvKi0tLS0tLS0tLgorfCB5eWxleC4gIHwKK2AtLS0tLS0tLSovCisKK2ludCB5eWxleCAoWVlTVFlQRSAqbHZhbHApCit7CisgIHN0YXRpYyBjaGFyIGNvbnN0ICppbnB1dCA9ICJhYSI7CisgICpsdmFscCA9IDE7CisgIHJldHVybiAqaW5wdXQrKzsKK30KKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisKKworLyotLS0tLS0tLgorfCBtYWluLiAgfAorYC0tLS0tLS0qLworCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MTE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjb25mbGljdHMuYXQ6NDExIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MTE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiICJjb25mbGljdHMuYXQ6NDExIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDExOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjQxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQxMTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNvbmZsaWN0cy5hdDo0MTEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MTE6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDo0MTEiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDExOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiY29uZmxpY3RzLmF0OjQxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDExOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyIgImNvbmZsaWN0cy5hdDo0MTEiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDExOiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgImNvbmZsaWN0cy5hdDo0MTEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDExOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDo0MTEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ2InCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCisKKworCisKKyMgQ2Fub25pY2FsIExSIGRvZXNuJ3QgZm9yZXNlZSB0aGUgZXJyb3IgZm9yICdhJyEKKworCisKKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisKKworJWNvZGUgeworICAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgICNpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgaW50IHl5bGV4IChZWVNUWVBFICpsdmFscCk7CisgICNkZWZpbmUgVVNFKFZhcikKK30KKworJWRlZmluZSBhcGkucHVyZQorCislZGVmaW5lIGxyLmRlZmF1bHQtcmVkdWN0aW9ucyBhY2NlcHRpbmcKKworJWVycm9yLXZlcmJvc2UKKworJSUKKworJW5vbmFzc29jICdhJzsKKworLy8gSWYgJCQgPSAwIGhlcmUsIHRoZW4gd2Uga25vdyB0aGF0IHRoZSAnYScgZGVzdHJ1Y3RvciBpcyBiZWluZyBpbnZva2VkCisvLyBpbmNvcnJlY3RseSBmb3IgdGhlICdiJyBzZXQgaW4gdGhlIHNlbWFudGljIGFjdGlvbiBiZWxvdy4gIEFsbCAnYScKKy8vIHRva2VucyBhcmUgcmV0dXJuZWQgYnkgeXlsZXgsIHdoaWNoIHNldHMgJCQgPSAxLgorJWRlc3RydWN0b3IgeworICBpZiAoISQkKQorICAgIGZwcmludGYgKHN0ZGVyciwgIldyb25nIGRlc3RydWN0b3IuXG4iKTsKK30gJ2EnOworCisvLyBSYXRoZXIgdGhhbiBkZXBlbmQgb24gYW4gaW5jb25zaXN0ZW50IHN0YXRlIHRvIGluZHVjZSByZWFkaW5nIGEKKy8vIGxvb2thaGVhZCBhcyBpbiB0aGUgcHJldmlvdXMgZ3JhbW1hciwganVzdCBhc3NpZ24gdGhlIGxvb2thaGVhZCBpbiBhCisvLyBzZW1hbnRpYyBhY3Rpb24uICBUaGF0IGxvb2thaGVhZCBpc24ndCBuZWVkZWQgYmVmb3JlIGVpdGhlciBlcnJvcgorLy8gYWN0aW9uIGlzIGVuY291bnRlcmVkLiAgSW4gYSBwcmV2aW91cyB2ZXJzaW9uIG9mIEJpc29uLCB0aGlzIHdhcyBhCisvLyBwcm9ibGVtIGFzIGl0IG1lYW50IHl5Y2hhciB3YXMgbm90IHRyYW5zbGF0ZWQgaW50byB5eXRva2VuIGJlZm9yZQorLy8gZWl0aGVyIGVycm9yIGFjdGlvbi4gIFRoZSBzZWNvbmQgZXJyb3IgYWN0aW9uIHRodXMgaW52b2tlZCBhCisvLyBkZXN0cnVjdG9yIHRoYXQgaXQgc2VsZWN0ZWQgYWNjb3JkaW5nIHRvIHRoZSBpbmNvcnJlY3QgeXl0b2tlbi4gIFRoZQorLy8gZmlyc3QgZXJyb3IgYWN0aW9uIHdvdWxkIGhhdmUgcmVwb3J0ZWQgYW4gaW5jb3JyZWN0IHVuZXhwZWN0ZWQgdG9rZW4KKy8vIGV4Y2VwdCB0aGF0LCBkdWUgdG8gdGhlIGJ1ZyBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIGdyYW1tYXIsIHRoZQorLy8gdW5leHBlY3RlZCB0b2tlbiB3YXMgbm90IHJlcG9ydGVkIGF0IGFsbC4KK3N0YXJ0OiBlcnJvci1yZWR1Y2UgY29uc2lzdGVudC1lcnJvciAnYScgeyBVU0UgKCQzKTsgfSA7CisKK2Vycm9yLXJlZHVjZToKKyAgJ2EnICdhJyBjb25zaXN0ZW50LXJlZHVjdGlvbiBjb25zaXN0ZW50LWVycm9yICdhJworICB7IFVTRSAoKCQxLCAkMiwgJDUpKTsgfQorfCAnYScgZXJyb3IKKyAgeyBVU0UgKCQxKTsgfQorOworCitjb25zaXN0ZW50LXJlZHVjdGlvbjogLyplbXB0eSovIHsKKyAgYXNzZXJ0ICh5eWNoYXIgPT0gWVlFTVBUWSk7CisgIHl5bHZhbCA9IDA7CisgIHl5Y2hhciA9ICdiJzsKK30gOworCitjb25zaXN0ZW50LWVycm9yOgorICAnYScgeyBVU0UgKCQxKTsgfQorfCAvKmVtcHR5Ki8gJXByZWMgJ2EnCis7CisKKy8vIFByb3ZpZGUgYW5vdGhlciBjb250ZXh0IGluIHdoaWNoIGFsbCBydWxlcyBhcmUgdXNlZnVsIHNvIHRoYXQgdGhpcworLy8gdGVzdCBjYXNlIGxvb2tzIGEgbGl0dGxlIG1vcmUgcmVhbGlzdGljLgorc3RhcnQ6ICdiJyBjb25zaXN0ZW50LWVycm9yICdiJyA7CisKKworJSUKKworLyotLS0tLS0tLS4KK3wgeXlsZXguICB8CitgLS0tLS0tLS0qLworCitpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWxwKQoreworICBzdGF0aWMgY2hhciBjb25zdCAqaW5wdXQgPSAiYWEiOworICAqbHZhbHAgPSAxOworICByZXR1cm4gKmlucHV0Kys7Cit9CisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorCisKKy8qLS0tLS0tLS4KK3wgbWFpbi4gIHwKK2AtLS0tLS0tKi8KKworaW50CittYWluICh2b2lkKQoreworICByZXR1cm4geXlwYXJzZSAoKTsKK30KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDE3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY29uZmxpY3RzLmF0OjQxNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDE3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IiAiY29uZmxpY3RzLmF0OjQxNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQxNzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNvbmZsaWN0cy5hdDo0MTciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQxNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MTc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6NDE3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDE3OiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjb25mbGljdHMuYXQ6NDE3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDE3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQxNzogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImNvbmZsaWN0cy5hdDo0MTciCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQxNzogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJjb25mbGljdHMuYXQ6NDE3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDE3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQxNzogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJjb25mbGljdHMuYXQ6NDE3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQxNzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjb25mbGljdHMuYXQ6NDE3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIFwkZW5kLCBleHBlY3RpbmcgJ2EnCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDE3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCisKKworCisKKworCisKKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworCisKKyVjb2RlIHsKKyAgI2luY2x1ZGUgPGFzc2VydC5oPgorICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CisgIGludCB5eWxleCAoWVlTVFlQRSAqbHZhbHApOworICAjZGVmaW5lIFVTRShWYXIpCit9CisKKyVkZWZpbmUgYXBpLnB1cmUKKworJWRlZmluZSBsci50eXBlIGNhbm9uaWNhbC1scgorCislZXJyb3ItdmVyYm9zZQorCislJQorCislbm9uYXNzb2MgJ2EnOworCisvLyBJZiAkJCA9IDAgaGVyZSwgdGhlbiB3ZSBrbm93IHRoYXQgdGhlICdhJyBkZXN0cnVjdG9yIGlzIGJlaW5nIGludm9rZWQKKy8vIGluY29ycmVjdGx5IGZvciB0aGUgJ2InIHNldCBpbiB0aGUgc2VtYW50aWMgYWN0aW9uIGJlbG93LiAgQWxsICdhJworLy8gdG9rZW5zIGFyZSByZXR1cm5lZCBieSB5eWxleCwgd2hpY2ggc2V0cyAkJCA9IDEuCislZGVzdHJ1Y3RvciB7CisgIGlmICghJCQpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiV3JvbmcgZGVzdHJ1Y3Rvci5cbiIpOworfSAnYSc7CisKKy8vIFJhdGhlciB0aGFuIGRlcGVuZCBvbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgdG8gaW5kdWNlIHJlYWRpbmcgYQorLy8gbG9va2FoZWFkIGFzIGluIHRoZSBwcmV2aW91cyBncmFtbWFyLCBqdXN0IGFzc2lnbiB0aGUgbG9va2FoZWFkIGluIGEKKy8vIHNlbWFudGljIGFjdGlvbi4gIFRoYXQgbG9va2FoZWFkIGlzbid0IG5lZWRlZCBiZWZvcmUgZWl0aGVyIGVycm9yCisvLyBhY3Rpb24gaXMgZW5jb3VudGVyZWQuICBJbiBhIHByZXZpb3VzIHZlcnNpb24gb2YgQmlzb24sIHRoaXMgd2FzIGEKKy8vIHByb2JsZW0gYXMgaXQgbWVhbnQgeXljaGFyIHdhcyBub3QgdHJhbnNsYXRlZCBpbnRvIHl5dG9rZW4gYmVmb3JlCisvLyBlaXRoZXIgZXJyb3IgYWN0aW9uLiAgVGhlIHNlY29uZCBlcnJvciBhY3Rpb24gdGh1cyBpbnZva2VkIGEKKy8vIGRlc3RydWN0b3IgdGhhdCBpdCBzZWxlY3RlZCBhY2NvcmRpbmcgdG8gdGhlIGluY29ycmVjdCB5eXRva2VuLiAgVGhlCisvLyBmaXJzdCBlcnJvciBhY3Rpb24gd291bGQgaGF2ZSByZXBvcnRlZCBhbiBpbmNvcnJlY3QgdW5leHBlY3RlZCB0b2tlbgorLy8gZXhjZXB0IHRoYXQsIGR1ZSB0byB0aGUgYnVnIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgZ3JhbW1hciwgdGhlCisvLyB1bmV4cGVjdGVkIHRva2VuIHdhcyBub3QgcmVwb3J0ZWQgYXQgYWxsLgorc3RhcnQ6IGVycm9yLXJlZHVjZSBjb25zaXN0ZW50LWVycm9yICdhJyB7IFVTRSAoJDMpOyB9IDsKKworZXJyb3ItcmVkdWNlOgorICAnYScgJ2EnIGNvbnNpc3RlbnQtcmVkdWN0aW9uIGNvbnNpc3RlbnQtZXJyb3IgJ2EnCisgIHsgVVNFICgoJDEsICQyLCAkNSkpOyB9Cit8ICdhJyBlcnJvcgorICB7IFVTRSAoJDEpOyB9Cis7CisKK2NvbnNpc3RlbnQtcmVkdWN0aW9uOiAvKmVtcHR5Ki8geworICBhc3NlcnQgKHl5Y2hhciA9PSBZWUVNUFRZKTsKKyAgeXlsdmFsID0gMDsKKyAgeXljaGFyID0gJ2InOworfSA7CisKK2NvbnNpc3RlbnQtZXJyb3I6CisgICdhJyB7IFVTRSAoJDEpOyB9Cit8IC8qZW1wdHkqLyAlcHJlYyAnYScKKzsKKworLy8gUHJvdmlkZSBhbm90aGVyIGNvbnRleHQgaW4gd2hpY2ggYWxsIHJ1bGVzIGFyZSB1c2VmdWwgc28gdGhhdCB0aGlzCisvLyB0ZXN0IGNhc2UgbG9va3MgYSBsaXR0bGUgbW9yZSByZWFsaXN0aWMuCitzdGFydDogJ2InIGNvbnNpc3RlbnQtZXJyb3IgJ2InIDsKKworCislJQorCisvKi0tLS0tLS0tLgorfCB5eWxleC4gIHwKK2AtLS0tLS0tLSovCisKK2ludCB5eWxleCAoWVlTVFlQRSAqbHZhbHApCit7CisgIHN0YXRpYyBjaGFyIGNvbnN0ICppbnB1dCA9ICJhYSI7CisgICpsdmFscCA9IDE7CisgIHJldHVybiAqaW5wdXQrKzsKK30KKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisKKworLyotLS0tLS0tLgorfCBtYWluLiAgfAorYC0tLS0tLS0qLworCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MjE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjb25mbGljdHMuYXQ6NDIxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MjE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiICJjb25mbGljdHMuYXQ6NDIxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDIxOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjQyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQyMTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNvbmZsaWN0cy5hdDo0MjEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MjE6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDo0MjEiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDIxOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiY29uZmxpY3RzLmF0OjQyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDIxOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyIgImNvbmZsaWN0cy5hdDo0MjEiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDIxOiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgImNvbmZsaWN0cy5hdDo0MjEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDIxOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDo0MjEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgXCRlbmQsIGV4cGVjdGluZyAnYScKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisKKworCisKKworCisKKworCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKworCislY29kZSB7CisgICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworICBpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWxwKTsKKyAgI2RlZmluZSBVU0UoVmFyKQorfQorCislZGVmaW5lIGFwaS5wdXJlCisKKyVkZWZpbmUgcGFyc2UubGFjIGZ1bGwKKworJWVycm9yLXZlcmJvc2UKKworJSUKKworJW5vbmFzc29jICdhJzsKKworLy8gSWYgJCQgPSAwIGhlcmUsIHRoZW4gd2Uga25vdyB0aGF0IHRoZSAnYScgZGVzdHJ1Y3RvciBpcyBiZWluZyBpbnZva2VkCisvLyBpbmNvcnJlY3RseSBmb3IgdGhlICdiJyBzZXQgaW4gdGhlIHNlbWFudGljIGFjdGlvbiBiZWxvdy4gIEFsbCAnYScKKy8vIHRva2VucyBhcmUgcmV0dXJuZWQgYnkgeXlsZXgsIHdoaWNoIHNldHMgJCQgPSAxLgorJWRlc3RydWN0b3IgeworICBpZiAoISQkKQorICAgIGZwcmludGYgKHN0ZGVyciwgIldyb25nIGRlc3RydWN0b3IuXG4iKTsKK30gJ2EnOworCisvLyBSYXRoZXIgdGhhbiBkZXBlbmQgb24gYW4gaW5jb25zaXN0ZW50IHN0YXRlIHRvIGluZHVjZSByZWFkaW5nIGEKKy8vIGxvb2thaGVhZCBhcyBpbiB0aGUgcHJldmlvdXMgZ3JhbW1hciwganVzdCBhc3NpZ24gdGhlIGxvb2thaGVhZCBpbiBhCisvLyBzZW1hbnRpYyBhY3Rpb24uICBUaGF0IGxvb2thaGVhZCBpc24ndCBuZWVkZWQgYmVmb3JlIGVpdGhlciBlcnJvcgorLy8gYWN0aW9uIGlzIGVuY291bnRlcmVkLiAgSW4gYSBwcmV2aW91cyB2ZXJzaW9uIG9mIEJpc29uLCB0aGlzIHdhcyBhCisvLyBwcm9ibGVtIGFzIGl0IG1lYW50IHl5Y2hhciB3YXMgbm90IHRyYW5zbGF0ZWQgaW50byB5eXRva2VuIGJlZm9yZQorLy8gZWl0aGVyIGVycm9yIGFjdGlvbi4gIFRoZSBzZWNvbmQgZXJyb3IgYWN0aW9uIHRodXMgaW52b2tlZCBhCisvLyBkZXN0cnVjdG9yIHRoYXQgaXQgc2VsZWN0ZWQgYWNjb3JkaW5nIHRvIHRoZSBpbmNvcnJlY3QgeXl0b2tlbi4gIFRoZQorLy8gZmlyc3QgZXJyb3IgYWN0aW9uIHdvdWxkIGhhdmUgcmVwb3J0ZWQgYW4gaW5jb3JyZWN0IHVuZXhwZWN0ZWQgdG9rZW4KKy8vIGV4Y2VwdCB0aGF0LCBkdWUgdG8gdGhlIGJ1ZyBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIGdyYW1tYXIsIHRoZQorLy8gdW5leHBlY3RlZCB0b2tlbiB3YXMgbm90IHJlcG9ydGVkIGF0IGFsbC4KK3N0YXJ0OiBlcnJvci1yZWR1Y2UgY29uc2lzdGVudC1lcnJvciAnYScgeyBVU0UgKCQzKTsgfSA7CisKK2Vycm9yLXJlZHVjZToKKyAgJ2EnICdhJyBjb25zaXN0ZW50LXJlZHVjdGlvbiBjb25zaXN0ZW50LWVycm9yICdhJworICB7IFVTRSAoKCQxLCAkMiwgJDUpKTsgfQorfCAnYScgZXJyb3IKKyAgeyBVU0UgKCQxKTsgfQorOworCitjb25zaXN0ZW50LXJlZHVjdGlvbjogLyplbXB0eSovIHsKKyAgYXNzZXJ0ICh5eWNoYXIgPT0gWVlFTVBUWSk7CisgIHl5bHZhbCA9IDA7CisgIHl5Y2hhciA9ICdiJzsKK30gOworCitjb25zaXN0ZW50LWVycm9yOgorICAnYScgeyBVU0UgKCQxKTsgfQorfCAvKmVtcHR5Ki8gJXByZWMgJ2EnCis7CisKKy8vIFByb3ZpZGUgYW5vdGhlciBjb250ZXh0IGluIHdoaWNoIGFsbCBydWxlcyBhcmUgdXNlZnVsIHNvIHRoYXQgdGhpcworLy8gdGVzdCBjYXNlIGxvb2tzIGEgbGl0dGxlIG1vcmUgcmVhbGlzdGljLgorc3RhcnQ6ICdiJyBjb25zaXN0ZW50LWVycm9yICdiJyA7CisKKworJSUKKworLyotLS0tLS0tLS4KK3wgeXlsZXguICB8CitgLS0tLS0tLS0qLworCitpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWxwKQoreworICBzdGF0aWMgY2hhciBjb25zdCAqaW5wdXQgPSAiYWEiOworICAqbHZhbHAgPSAxOworICByZXR1cm4gKmlucHV0Kys7Cit9CisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorCisKKy8qLS0tLS0tLS4KK3wgbWFpbi4gIHwKK2AtLS0tLS0tKi8KKworaW50CittYWluICh2b2lkKQoreworICByZXR1cm4geXlwYXJzZSAoKTsKK30KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDI2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY29uZmxpY3RzLmF0OjQyNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MjYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDI2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IiAiY29uZmxpY3RzLmF0OjQyNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MjYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQyNjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNvbmZsaWN0cy5hdDo0MjYiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQyNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MjY6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6NDI2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MjYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDI2OiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjb25mbGljdHMuYXQ6NDI2IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDI2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQyNjogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImNvbmZsaWN0cy5hdDo0MjYiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MjYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQyNjogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJjb25mbGljdHMuYXQ6NDI2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDI2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQyNjogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJjb25mbGljdHMuYXQ6NDI2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MjYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQyNjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjb25mbGljdHMuYXQ6NDI2IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICdiJworIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQyNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworCisKKworCisKKworCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKworCislY29kZSB7CisgICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworICBpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWxwKTsKKyAgI2RlZmluZSBVU0UoVmFyKQorfQorCislZGVmaW5lIGFwaS5wdXJlCisKKyVkZWZpbmUgcGFyc2UubGFjIGZ1bGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJWRlZmluZSBsci5kZWZhdWx0LXJlZHVjdGlvbnMgYWNjZXB0aW5nCisKKyVlcnJvci12ZXJib3NlCisKKyUlCisKKyVub25hc3NvYyAnYSc7CisKKy8vIElmICQkID0gMCBoZXJlLCB0aGVuIHdlIGtub3cgdGhhdCB0aGUgJ2EnIGRlc3RydWN0b3IgaXMgYmVpbmcgaW52b2tlZAorLy8gaW5jb3JyZWN0bHkgZm9yIHRoZSAnYicgc2V0IGluIHRoZSBzZW1hbnRpYyBhY3Rpb24gYmVsb3cuICBBbGwgJ2EnCisvLyB0b2tlbnMgYXJlIHJldHVybmVkIGJ5IHl5bGV4LCB3aGljaCBzZXRzICQkID0gMS4KKyVkZXN0cnVjdG9yIHsKKyAgaWYgKCEkJCkKKyAgICBmcHJpbnRmIChzdGRlcnIsICJXcm9uZyBkZXN0cnVjdG9yLlxuIik7Cit9ICdhJzsKKworLy8gUmF0aGVyIHRoYW4gZGVwZW5kIG9uIGFuIGluY29uc2lzdGVudCBzdGF0ZSB0byBpbmR1Y2UgcmVhZGluZyBhCisvLyBsb29rYWhlYWQgYXMgaW4gdGhlIHByZXZpb3VzIGdyYW1tYXIsIGp1c3QgYXNzaWduIHRoZSBsb29rYWhlYWQgaW4gYQorLy8gc2VtYW50aWMgYWN0aW9uLiAgVGhhdCBsb29rYWhlYWQgaXNuJ3QgbmVlZGVkIGJlZm9yZSBlaXRoZXIgZXJyb3IKKy8vIGFjdGlvbiBpcyBlbmNvdW50ZXJlZC4gIEluIGEgcHJldmlvdXMgdmVyc2lvbiBvZiBCaXNvbiwgdGhpcyB3YXMgYQorLy8gcHJvYmxlbSBhcyBpdCBtZWFudCB5eWNoYXIgd2FzIG5vdCB0cmFuc2xhdGVkIGludG8geXl0b2tlbiBiZWZvcmUKKy8vIGVpdGhlciBlcnJvciBhY3Rpb24uICBUaGUgc2Vjb25kIGVycm9yIGFjdGlvbiB0aHVzIGludm9rZWQgYQorLy8gZGVzdHJ1Y3RvciB0aGF0IGl0IHNlbGVjdGVkIGFjY29yZGluZyB0byB0aGUgaW5jb3JyZWN0IHl5dG9rZW4uICBUaGUKKy8vIGZpcnN0IGVycm9yIGFjdGlvbiB3b3VsZCBoYXZlIHJlcG9ydGVkIGFuIGluY29ycmVjdCB1bmV4cGVjdGVkIHRva2VuCisvLyBleGNlcHQgdGhhdCwgZHVlIHRvIHRoZSBidWcgZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBncmFtbWFyLCB0aGUKKy8vIHVuZXhwZWN0ZWQgdG9rZW4gd2FzIG5vdCByZXBvcnRlZCBhdCBhbGwuCitzdGFydDogZXJyb3ItcmVkdWNlIGNvbnNpc3RlbnQtZXJyb3IgJ2EnIHsgVVNFICgkMyk7IH0gOworCitlcnJvci1yZWR1Y2U6CisgICdhJyAnYScgY29uc2lzdGVudC1yZWR1Y3Rpb24gY29uc2lzdGVudC1lcnJvciAnYScKKyAgeyBVU0UgKCgkMSwgJDIsICQ1KSk7IH0KK3wgJ2EnIGVycm9yCisgIHsgVVNFICgkMSk7IH0KKzsKKworY29uc2lzdGVudC1yZWR1Y3Rpb246IC8qZW1wdHkqLyB7CisgIGFzc2VydCAoeXljaGFyID09IFlZRU1QVFkpOworICB5eWx2YWwgPSAwOworICB5eWNoYXIgPSAnYic7Cit9IDsKKworY29uc2lzdGVudC1lcnJvcjoKKyAgJ2EnIHsgVVNFICgkMSk7IH0KK3wgLyplbXB0eSovICVwcmVjICdhJworOworCisvLyBQcm92aWRlIGFub3RoZXIgY29udGV4dCBpbiB3aGljaCBhbGwgcnVsZXMgYXJlIHVzZWZ1bCBzbyB0aGF0IHRoaXMKKy8vIHRlc3QgY2FzZSBsb29rcyBhIGxpdHRsZSBtb3JlIHJlYWxpc3RpYy4KK3N0YXJ0OiAnYicgY29uc2lzdGVudC1lcnJvciAnYicgOworCisKKyUlCisKKy8qLS0tLS0tLS0uCit8IHl5bGV4LiAgfAorYC0tLS0tLS0tKi8KKworaW50IHl5bGV4IChZWVNUWVBFICpsdmFscCkKK3sKKyAgc3RhdGljIGNoYXIgY29uc3QgKmlucHV0ID0gImFhIjsKKyAgKmx2YWxwID0gMTsKKyAgcmV0dXJuICppbnB1dCsrOworfQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKworCisvKi0tLS0tLS0uCit8IG1haW4uICB8CitgLS0tLS0tLSovCisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQzMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNvbmZsaWN0cy5hdDo0MzAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDMwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQzMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgImNvbmZsaWN0cy5hdDo0MzAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDMwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MzA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6NDMwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDMwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjQzMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDMwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQzMDogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjQzMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQzMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MzA6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJjb25mbGljdHMuYXQ6NDMwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDMwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MzA6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAiY29uZmxpY3RzLmF0OjQzMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQzMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MzA6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAiY29uZmxpY3RzLmF0OjQzMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NDMwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo0MzA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjQzMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBcJGVuZAorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjQzMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworCisKKworCisKKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xODMKKyNBVF9TVEFSVF8xODQKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxODQgJ2NvbmZsaWN0cy5hdDo0NTYnIFwKKyAgIkxBQzogJW5vbmFzc29jIHJlcXVpcmVzIHNwbGl0dGluZyBjYW5vbmljYWwgTFIgc3RhdGVzIiAiIiAxMAorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjE4NC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislY29kZSB7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgc3RhdGljIGludCB5eWxleCAodm9pZCk7Cit9CisKKyVlcnJvci12ZXJib3NlCislbm9uYXNzb2MgJ2EnCisKKyUlCisKK3N0YXJ0OgorICAnYScgcHJvYmxlbSAnYScgLy8gRmlyc3QgY29udGV4dC4KK3wgJ2InIHByb2JsZW0gJ2InIC8vIFNlY29uZCBjb250ZXh0LgorfCAnYycgcmVkdWNlLW5vbmFzc29jIC8vIEp1c3QgbWFrZXMgcmVkdWNlLW5vbmFzc29jIHVzZWZ1bC4KKzsKKworcHJvYmxlbToKKyAgbG9vayByZWR1Y2Utbm9uYXNzb2MKK3wgbG9vayAnYScKK3wgbG9vayAnYicKKzsKKworLy8gRm9yIHRoZSBzdGF0ZSByZWFjaGVkIGFmdGVyIHNoaWZ0aW5nIHRoZSAnYScgaW4gdGhlc2UgcHJvZHVjdGlvbnMsCisvLyBsb29rYWhlYWQgc2V0cyBhcmUgdGhlIHNhbWUgaW4gYm90aCB0aGUgZmlyc3QgYW5kIHNlY29uZCBjb250ZXh0cy4KKy8vIFRodXMsIGNhbm9uaWNhbCBMUiByZXVzZXMgdGhlIHNhbWUgc3RhdGUgZm9yIGJvdGggY29udGV4dHMuICBIb3dldmVyLAorLy8gdGhlIGxvb2thaGVhZCAnYScgZm9yIHRoZSByZWR1Y3Rpb24gImxvb2s6ICdhJyIgbGF0ZXIgYmVjb21lcyBhbgorLy8gZXJyb3IgYWN0aW9uIG9ubHkgaW4gdGhlIGZpcnN0IGNvbnRleHQuICBJbiBvcmRlciB0byBpbW1lZGlhdGVseQorLy8gZGV0ZWN0IHRoZSBzeW50YXggZXJyb3Igb24gJ2EnIGhlcmUgZm9yIG9ubHkgdGhlIGZpcnN0IGNvbnRleHQsIHRoaXMKKy8vIGNhbm9uaWNhbCBMUiBzdGF0ZSB3b3VsZCBoYXZlIHRvIGJlIHNwbGl0IGludG8gdHdvIHN0YXRlcywgYW5kIHRoZQorLy8gJ2EnIGxvb2thaGVhZCB3b3VsZCBoYXZlIHRvIGJlIHJlbW92ZWQgZnJvbSBvbmx5IG9uZSBvZiB0aGUgc3RhdGVzLgorbG9vazoKKyAgJ2EnIC8vIFJlZHVjdGlvbiBsb29rYWhlYWQgc2V0IGlzIGFsd2F5cyBbJ2EnLCAnYiddLgorfCAnYScgJ2InCit8ICdhJyAnYycgLy8gJ2MnIGlzIGZvcmdvdHRlbiBhcyBhbiBleHBlY3RlZCB0b2tlbi4KKzsKKworcmVkdWNlLW5vbmFzc29jOiAlcHJlYyAnYSc7CisKKyUlCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorI2luY2x1ZGUgPGFzc2VydC5oPgorc3RhdGljCitpbnQgeXlsZXggKHZvaWQpCit7CisgIHN0YXRpYyBjaGFyIGNvbnN0IGlucHV0W10gPSAiYWFhIjsKKyAgc3RhdGljIHNpemVfdCB0b2tudW0gPSAwOworICBpbnQgcmVzOworICA7CisgIGFzc2VydCAodG9rbnVtIDwgc2l6ZW9mIGlucHV0IC8gc2l6ZW9mIGlucHV0WzBdKTsKKyAgcmVzID0gaW5wdXRbdG9rbnVtKytdOworICA7CisgIHJldHVybiByZXM7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKKworIyBTaG93IGNhbm9uaWNhbCBMUidzIGZhaWx1cmUuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1MTE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtRGxyLnR5cGU9Y2Fub25pY2FsLWxyIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNvbmZsaWN0cy5hdDo1MTEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLURsci50eXBlPWNhbm9uaWNhbC1sciAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NTExOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtRGxyLnR5cGU9Y2Fub25pY2FsLWxyIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtRGxyLnR5cGU9Y2Fub25pY2FsLWxyIC1vIGlucHV0LmMgaW5wdXQueSIgImNvbmZsaWN0cy5hdDo1MTEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLURsci50eXBlPWNhbm9uaWNhbC1sciAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjUxMTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNvbmZsaWN0cy5hdDo1MTEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjUxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1MTE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6NTExIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NTExOiBiaXNvbiAtRGxyLnR5cGU9Y2Fub25pY2FsLWxyIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDo1MTEiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLURsci50eXBlPWNhbm9uaWNhbC1sciAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OiBjb25mbGljdHM6IDIgc2hpZnQvcmVkdWNlCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NTExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjUxNTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImNvbmZsaWN0cy5hdDo1MTUiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1MTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjUxNTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJjb25mbGljdHMuYXQ6NTE1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NTE1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1MTY6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAiY29uZmxpY3RzLmF0OjUxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NTE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1MTY6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjUxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnYScsIGV4cGVjdGluZyAnYicKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBJdCdzIGNvcnJlY3RlZCBieSBMQUMuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1MjE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtRGxyLnR5cGU9Y2Fub25pY2FsLWxyIC1EcGFyc2UubGFjPWZ1bGwgXFwKKyAgICAgICAgICAgICAgICAgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY29uZmxpY3RzLmF0OjUyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtRGxyLnR5cGU9Y2Fub25pY2FsLWxyIC1EcGFyc2UubGFjPWZ1bGwgXAorICAgICAgICAgICAgICAgICAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NTIxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtRGxyLnR5cGU9Y2Fub25pY2FsLWxyIC1EcGFyc2UubGFjPWZ1bGwgXFwKKyAgICAgICAgICAgICAgICAgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY29uZmxpY3RzLmF0OjUyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtRGxyLnR5cGU9Y2Fub25pY2FsLWxyIC1EcGFyc2UubGFjPWZ1bGwgXAorICAgICAgICAgICAgICAgICAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjUyMTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNvbmZsaWN0cy5hdDo1MjEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjUyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1MjE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6NTIxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NTIxOiBiaXNvbiAtRGxyLnR5cGU9Y2Fub25pY2FsLWxyIC1EcGFyc2UubGFjPWZ1bGwgXFwKKyAgICAgICAgICAgICAgICAgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY29uZmxpY3RzLmF0OjUyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtRGxyLnR5cGU9Y2Fub25pY2FsLWxyIC1EcGFyc2UubGFjPWZ1bGwgXAorICAgICAgICAgICAgICAgICAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OiBjb25mbGljdHM6IDIgc2hpZnQvcmVkdWNlCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NTIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjUyNTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImNvbmZsaWN0cy5hdDo1MjUiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1MjUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjUyNTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJjb25mbGljdHMuYXQ6NTI1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NTI1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1MjY6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAiY29uZmxpY3RzLmF0OjUyNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NTI2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1MjY6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjUyNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnYScsIGV4cGVjdGluZyAnYicgb3IgJ2MnCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NTI2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgSUVMUiBpcyBzdWZmaWNpZW50IHdoZW4gTEFDIGlzIHVzZWQuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1MzE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtRGxyLnR5cGU9aWVsciAtRHBhcnNlLmxhYz1mdWxsIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNvbmZsaWN0cy5hdDo1MzEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLURsci50eXBlPWllbHIgLURwYXJzZS5sYWM9ZnVsbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1MzEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NTMxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtRGxyLnR5cGU9aWVsciAtRHBhcnNlLmxhYz1mdWxsIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtRGxyLnR5cGU9aWVsciAtRHBhcnNlLmxhYz1mdWxsIC1vIGlucHV0LmMgaW5wdXQueSIgImNvbmZsaWN0cy5hdDo1MzEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLURsci50eXBlPWllbHIgLURwYXJzZS5sYWM9ZnVsbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1MzEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjUzMTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNvbmZsaWN0cy5hdDo1MzEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjUzMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1MzE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6NTMxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1MzEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NTMxOiBiaXNvbiAtRGxyLnR5cGU9aWVsciAtRHBhcnNlLmxhYz1mdWxsIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDo1MzEiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLURsci50eXBlPWllbHIgLURwYXJzZS5sYWM9ZnVsbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OiBjb25mbGljdHM6IDIgc2hpZnQvcmVkdWNlCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NTMxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjUzNTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImNvbmZsaWN0cy5hdDo1MzUiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1MzUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjUzNTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJjb25mbGljdHMuYXQ6NTM1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NTM1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1MzY6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAiY29uZmxpY3RzLmF0OjUzNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NTM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1MzY6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjUzNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnYScsIGV4cGVjdGluZyAnYicgb3IgJ2MnCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NTM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTg0CisjQVRfU1RBUlRfMTg1CithdF9mbl9ncm91cF9iYW5uZXIgMTg1ICdjb25mbGljdHMuYXQ6NTQ2JyBcCisgICJVbnJlc29sdmVkIFNSIENvbmZsaWN0cyIgIiAgICAgICAgICAgICAgICAgICAgICAgICIgMTAKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxODUuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiAKQEAgLTEwMDYyLDQ0ICs1NTczMywxMDUgQEAKIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY29uZmxpY3RzLmF0OjE0MDogYmlzb24gLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueSIKLWVjaG8gY29uZmxpY3RzLmF0OjE0MCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvID4+JGF0X3N0ZGVycjsgZWNobyAiaW5wdXQueTogY29uZmxpY3RzOiAxIHNoaWZ0L3JlZHVjZQotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY29uZmxpY3RzLmF0OjE0MDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NTU2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNvbmZsaWN0cy5hdDo1NTYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjU1NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjU1NjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIC0tcmVwb3J0PWFsbCBpbnB1dC55IiAiY29uZmxpY3RzLmF0OjU1NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIC0tcmVwb3J0PWFsbCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NTU2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1NTY6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6NTU2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1NTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NTU2OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjU1NiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NTU2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjU1NjogYmlzb24gLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDo1NTYiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6IGNvbmZsaWN0czogMSBzaGlmdC9yZWR1Y2UKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1NTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgQ2hlY2sgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXBvcnQuCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNvbmZsaWN0cy5hdDoyMjU6IGNhdCBpbnB1dC5vdXRwdXQiCi1lY2hvIGNvbmZsaWN0cy5hdDoyMjUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBpbnB1dC5vdXRwdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gIlN0YXRlIDUgY29uZmxpY3RzOiAxIHNoaWZ0L3JlZHVjZQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1NjE6IGNhdCBpbnB1dC5vdXRwdXQiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjb25mbGljdHMuYXQ6NTYxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBpbnB1dC5vdXRwdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJTdGF0ZSA1IGNvbmZsaWN0czogMSBzaGlmdC9yZWR1Y2UKIAogCiBHcmFtbWFyCkBAIC0xMDEyNiw3ICs1NTg1OCw3IEBACiAgICAgb24gbGVmdDogMSAyLCBvbiByaWdodDogMCAxCiAKIAotc3RhdGUgMAorU3RhdGUgMAogCiAgICAgMCBcJGFjY2VwdDogLiBleHAgXCRlbmQKICAgICAxIGV4cDogLiBleHAgT1AgZXhwCkBAIC0xMDEzNywxNCArNTU4NjksMTQgQEAKICAgICBleHAgIGdvIHRvIHN0YXRlIDIKIAogCi1zdGF0ZSAxCitTdGF0ZSAxCiAKICAgICAyIGV4cDogTlVNIC4KIAogICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMiAoZXhwKQogCiAKLXN0YXRlIDIKK1N0YXRlIDIKIAogICAgIDAgXCRhY2NlcHQ6IGV4cCAuIFwkZW5kCiAgICAgMSBleHA6IGV4cCAuIE9QIGV4cApAQCAtMTAxNTMsMTQgKzU1ODg1LDE0IEBACiAgICAgT1AgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA0CiAKIAotc3RhdGUgMworU3RhdGUgMwogCiAgICAgMCBcJGFjY2VwdDogZXhwIFwkZW5kIC4KIAogICAgIFwkZGVmYXVsdCAgYWNjZXB0CiAKIAotc3RhdGUgNAorU3RhdGUgNAogCiAgICAgMSBleHA6IC4gZXhwIE9QIGV4cAogICAgIDEgICAgfCBleHAgT1AgLiBleHAKQEAgLTEwMTcxLDQ2ICs1NTkwMywzNCBAQAogICAgIGV4cCAgZ28gdG8gc3RhdGUgNQogCiAKLXN0YXRlIDUKK1N0YXRlIDUKIAotICAgIDEgZXhwOiBleHAgLiBPUCBleHAgIFtcJGVuZCwgT1BdCisgICAgMSBleHA6IGV4cCAuIE9QIGV4cAogICAgIDEgICAgfCBleHAgT1AgZXhwIC4gIFtcJGVuZCwgT1BdCiAKICAgICBPUCAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA0CiAKICAgICBPUCAgICAgICAgW3JlZHVjZSB1c2luZyBydWxlIDEgKGV4cCldCiAgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAxIChleHApCi0iIHwgJGF0X2RpZmYgLSAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjb25mbGljdHMuYXQ6MjI1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo1NjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwotCi0gIDYxICkgIyA2MS4gY29uZmxpY3RzLmF0OjIzNTogUmVzb2x2ZWQgU1IgQ29uZmxpY3RzCi0gICAgYXRfc2V0dXBfbGluZT0nY29uZmxpY3RzLmF0OjIzNScKLSAgICBhdF9kZXNjPSdSZXNvbHZlZCBTUiBDb25mbGljdHMnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiA2MTogUmVzb2x2ZWQgU1IgQ29uZmxpY3RzICAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjYxLiBjb25mbGljdHMuYXQ6MjM1OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzE4NQorI0FUX1NUQVJUXzE4NgorYXRfZm5fZ3JvdXBfYmFubmVyIDE4NiAnY29uZmxpY3RzLmF0OjY1MycgXAorICAiUmVzb2x2ZWQgU1IgQ29uZmxpY3RzIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAiIDEwCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTg2LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogCkBAIC0xMDIyMyw0MyArNTU5NDMsMTAzIEBACiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNvbmZsaWN0cy5hdDoyNDY6IGJpc29uIC1vIGlucHV0LmMgLS1yZXBvcnQ9YWxsIGlucHV0LnkiCi1lY2hvIGNvbmZsaWN0cy5hdDoyNDYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGlucHV0LmMgLS1yZXBvcnQ9YWxsIGlucHV0LnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY29uZmxpY3RzLmF0OjI0NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NjY0OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNvbmZsaWN0cy5hdDo2NjQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjY2NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjY2NDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIC0tcmVwb3J0PWFsbCBpbnB1dC55IiAiY29uZmxpY3RzLmF0OjY2NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIC0tcmVwb3J0PWFsbCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NjY0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo2NjQ6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6NjY0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo2NjQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NjY0OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjY2NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NjY0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjY2NDogYmlzb24gLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDo2NjQiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NjY0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIENoZWNrIHRoZSBjb250ZW50cyBvZiB0aGUgcmVwb3J0LgotJGF0X3RyYWNlb2ZmCi1lY2hvICJjb25mbGljdHMuYXQ6MzI3OiBjYXQgaW5wdXQub3V0cHV0IgotZWNobyBjb25mbGljdHMuYXQ6MzI3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgaW5wdXQub3V0cHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gPj4kYXRfc3Rkb3V0OyBlY2hvICJHcmFtbWFyCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjY2NzogY2F0IGlucHV0Lm91dHB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDo2NjciCisoICRhdF9jaGVja190cmFjZTsgY2F0IGlucHV0Lm91dHB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIkdyYW1tYXIKIAogICAgIDAgXCRhY2NlcHQ6IGV4cCBcJGVuZAogCkBAIC0xMDI4Myw3ICs1NjA2Myw3IEBACiAgICAgb24gbGVmdDogMSAyLCBvbiByaWdodDogMCAxCiAKIAotc3RhdGUgMAorU3RhdGUgMAogCiAgICAgMCBcJGFjY2VwdDogLiBleHAgXCRlbmQKICAgICAxIGV4cDogLiBleHAgT1AgZXhwCkBAIC0xMDI5NCwxNCArNTYwNzQsMTQgQEAKICAgICBleHAgIGdvIHRvIHN0YXRlIDIKIAogCi1zdGF0ZSAxCitTdGF0ZSAxCiAKICAgICAyIGV4cDogTlVNIC4KIAogICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMiAoZXhwKQogCiAKLXN0YXRlIDIKK1N0YXRlIDIKIAogICAgIDAgXCRhY2NlcHQ6IGV4cCAuIFwkZW5kCiAgICAgMSBleHA6IGV4cCAuIE9QIGV4cApAQCAtMTAzMTAsMTQgKzU2MDkwLDE0IEBACiAgICAgT1AgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA0CiAKIAotc3RhdGUgMworU3RhdGUgMwogCiAgICAgMCBcJGFjY2VwdDogZXhwIFwkZW5kIC4KIAogICAgIFwkZGVmYXVsdCAgYWNjZXB0CiAKIAotc3RhdGUgNAorU3RhdGUgNAogCiAgICAgMSBleHA6IC4gZXhwIE9QIGV4cAogICAgIDEgICAgfCBleHAgT1AgLiBleHAKQEAgLTEwMzI4LDQ1ICs1NjEwOCwzMyBAQAogICAgIGV4cCAgZ28gdG8gc3RhdGUgNQogCiAKLXN0YXRlIDUKK1N0YXRlIDUKIAotICAgIDEgZXhwOiBleHAgLiBPUCBleHAgIFtcJGVuZCwgT1BdCisgICAgMSBleHA6IGV4cCAuIE9QIGV4cAogICAgIDEgICAgfCBleHAgT1AgZXhwIC4gIFtcJGVuZCwgT1BdCiAKICAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDEgKGV4cCkKIAogICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAxIGFuZCB0b2tlbiBPUCByZXNvbHZlZCBhcyByZWR1Y2UgKCVsZWZ0IE9QKS4KLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNvbmZsaWN0cy5hdDozMjc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjY2NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Ci0KLSAgNjIgKSAjIDYyLiBjb25mbGljdHMuYXQ6MzU3OiBEZWZhdWx0ZWQgQ29uZmxpY3RlZCBSZWR1Y3Rpb24KLSAgICBhdF9zZXR1cF9saW5lPSdjb25mbGljdHMuYXQ6MzU3JwotICAgIGF0X2Rlc2M9J0RlZmF1bHRlZCBDb25mbGljdGVkIFJlZHVjdGlvbicKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDYyOiBEZWZhdWx0ZWQgQ29uZmxpY3RlZCBSZWR1Y3Rpb24gICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiNjIuIGNvbmZsaWN0cy5hdDozNTc6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTg2CisjQVRfU1RBUlRfMTg3CithdF9mbl9ncm91cF9iYW5uZXIgMTg3ICdjb25mbGljdHMuYXQ6Nzc1JyBcCisgICJEZWZhdWx0ZWQgQ29uZmxpY3RlZCBSZWR1Y3Rpb24iICIgICAgICAgICAgICAgICAgICIgMTAKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxODcuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiAKQEAgLTEwMzc5LDQ1ICs1NjE0NywyMjQgQEAKIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY29uZmxpY3RzLmF0OjM3MTogYmlzb24gLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueSIKLWVjaG8gY29uZmxpY3RzLmF0OjM3MSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvID4+JGF0X3N0ZGVycjsgZWNobyAiaW5wdXQueTogY29uZmxpY3RzOiAxIHJlZHVjZS9yZWR1Y2UKLWlucHV0Lnk6NC42LTg6IHdhcm5pbmc6IHJ1bGUgbmV2ZXIgcmVkdWNlZCBiZWNhdXNlIG9mIGNvbmZsaWN0czogaWQ6ICcwJwotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY29uZmxpY3RzLmF0OjM3MTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6Nzg2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNvbmZsaWN0cy5hdDo3ODYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0Ojc4NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0Ojc4NjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIC0tcmVwb3J0PWFsbCBpbnB1dC55IiAiY29uZmxpY3RzLmF0Ojc4NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIC0tcmVwb3J0PWFsbCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6Nzg2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo3ODY6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6Nzg2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo3ODYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6Nzg2OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0Ojc4NiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6Nzg2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0Ojc4NjogYmlzb24gLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDo3ODYiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6IGNvbmZsaWN0czogMSByZWR1Y2UvcmVkdWNlCitpbnB1dC55OjQuNi04OiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHM6IGlkOiAnMCcKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo3ODYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisjIERlZmluaW5nIFBPU0lYTFlfQ09SUkVDVCBjYXVzZXMgYmlzb24gdG8gY29tcGxhaW4gaWYgb3B0aW9ucyBhcmUKKyMgYWRkZWQgYWZ0ZXIgdGhlIGdyYW1tYXIgZmlsZSBuYW1lLCBzbyBza2lwIHRoZXNlIGNoZWNrcyBpbiB0aGF0CisjIGNhc2UuCitpZiB0ZXN0ICIkUE9TSVhMWV9DT1JSRUNUX0lTX0VYUE9SVEVEIiA9IGZhbHNlOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworCisgICMgVG8gYXZvaWQgZXhwYW5kaW5nIGl0IHJlcGVhdGVkbHksIHN0b3JlIHNwZWNpZmllZCBzdGRvdXQuCisgIDogPmV4cG91dAorCisgICMgUnVuIHdpdGggLVdlcnJvci4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo3ODY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueSAtV2Vycm9yIiAiY29uZmxpY3RzLmF0Ojc4NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIGlucHV0LmMgLS1yZXBvcnQ9YWxsIGlucHV0LnkgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0Ojc4NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIEJ1aWxkIGV4cGVjdGVkIHN0ZGVyciB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSAid2FybmluZ3MgYmVpbmcKKyAgIyB0cmVhdGVkIGFzIGVycm9ycyIgbWVzc2FnZS4KKyAgY2F0ID5hdC1iaXNvbi1jaGVjay13YXJuaW5ncyA8PCdfQVRFT0YnCitpbnB1dC55OiBjb25mbGljdHM6IDEgcmVkdWNlL3JlZHVjZQoraW5wdXQueTo0LjYtODogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzOiBpZDogJzAnCitfQVRFT0YKKworICBhdF9iaXNvbl9jaGVja19maXJzdD1gc2VkIC1uIFwKKyAgICAnLzogd2FybmluZzogL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wPWBzZWQgLW4gXAorICAgICcvY29uZmxpY3RzOiBbMC05XS4qcmVkdWNlJC97PTtxO30nIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzYAorICA6ICR7YXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wOj0xfQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdF90bXAgLWx0ICRhdF9iaXNvbl9jaGVja19maXJzdDsgdGhlbgorICAgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PSRhdF9iaXNvbl9jaGVja19maXJzdF90bXAKKyAgZmkKKyAgaWYgdGVzdCAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLWd0IDE7IHRoZW4KKyAgICBzZWQgLW4gIjEsYGV4cHIgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0IC0gMWAicCBcCisgICAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+IGV4cGVycgorICBmaQorICBlY2hvICdiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMnID4+IGV4cGVycgorCisgICMgRmluaXNoIGJ1aWxkaW5nIGV4cGVjdGVkIHN0ZGVyciBhbmQgY2hlY2suICBVbmxpa2Ugd2FybmluZ3MsCisgICMgY29tcGxhaW50cyBjYXVzZSBiaXNvbiB0byBleGl0IGVhcmx5LiAgVGh1cywgd2l0aCAtV2Vycm9yLCBiaXNvbgorICAjIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHJlcG9ydCBhbGwgd2FybmluZ3MgdGhhdCBpdCBkb2VzIHdpdGhvdXQKKyAgIyAtV2Vycm9yLCBidXQgaXQgYXQgbGVhc3QgcmVwb3J0cyBvbmUuCisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YHNlZCAtbiAnJD0nIHN0ZGVycmAKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2xhc3Q6PTF9CisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YGV4cHIgJGF0X2Jpc29uX2NoZWNrX2xhc3QgLSAxYAorICBzZWQgLW4gIiRhdF9iaXNvbl9jaGVja19maXJzdCwkYXRfYmlzb25fY2hlY2tfbGFzdCJwIFwKKyAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+PiBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo3ODY6IHNlZCAncywuKi9cXChiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnNcXClcJCxcXDEsJyBcXAorICAgICAgICAgICAgICBzdGRlcnIgMT4mMiIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNvbmZsaWN0cy5hdDo3ODYiCisoICRhdF9jaGVja190cmFjZTsgc2VkICdzLC4qL1woYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzXCkkLFwxLCcgXAorICAgICAgICAgICAgICBzdGRlcnIgMT4mMgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorJGF0X2RpZmYgZXhwZXJyICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6Nzg2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC0td2FybmluZ3M9ZXJyb3IuCisgIGNwIHN0ZGVyciBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo3ODY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yIiAiY29uZmxpY3RzLmF0Ojc4NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIGlucHV0LmMgLS1yZXBvcnQ9YWxsIGlucHV0LnkgLS13YXJuaW5ncz1lcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorJGF0X2RpZmYgZXhwZXJyICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6Nzg2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC1Xbm9uZSBhbmQgLS13YXJuaW5ncz1ub25lIGJ5IG1ha2luZyBzdXJlIHRoYXQKKyAgIyAtV2Vycm9yIGRvZXNuJ3QgY2hhbmdlIHRoZSBleGl0IHN0YXR1cyB3aGVuIC1Xbm9uZSBvcgorICAjIC0td2FybmluZ3M9bm9uZSBpcyBzcGVjaWZpZWQuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6Nzg2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIGlucHV0LmMgLS1yZXBvcnQ9YWxsIGlucHV0LnkgLVdub25lIC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIC0tcmVwb3J0PWFsbCBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIiAiY29uZmxpY3RzLmF0Ojc4NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIGlucHV0LmMgLS1yZXBvcnQ9YWxsIGlucHV0LnkgLVdub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0Ojc4NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo3ODY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIGlucHV0LmMgLS1yZXBvcnQ9YWxsIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiICJjb25mbGljdHMuYXQ6Nzg2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyAtLXJlcG9ydD1hbGwgaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6Nzg2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKIAotJGF0X3RyYWNlb24KLQotCiAjIENoZWNrIHRoZSBjb250ZW50cyBvZiB0aGUgcmVwb3J0LgotJGF0X3RyYWNlb2ZmCi1lY2hvICJjb25mbGljdHMuYXQ6NDY1OiBjYXQgaW5wdXQub3V0cHV0IgotZWNobyBjb25mbGljdHMuYXQ6NDY1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgaW5wdXQub3V0cHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gPj4kYXRfc3Rkb3V0OyBlY2hvICJSdWxlcyBuZXZlciByZWR1Y2VkCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0Ojc5MjogY2F0IGlucHV0Lm91dHB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDo3OTIiCisoICRhdF9jaGVja190cmFjZTsgY2F0IGlucHV0Lm91dHB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIlJ1bGVzIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHMKIAogICAgIDQgaWQ6ICcwJwogCkBAIC0xMDQ1Niw3ICs1NjQwMyw3IEBACiAgICAgb24gbGVmdDogNCwgb24gcmlnaHQ6IDIKIAogCi1zdGF0ZSAwCitTdGF0ZSAwCiAKICAgICAwIFwkYWNjZXB0OiAuIGV4cCBcJGVuZAogICAgIDEgZXhwOiAuIG51bQpAQCAtMTA0NzEsNyArNTY0MTgsNyBAQAogICAgIGlkICAgZ28gdG8gc3RhdGUgNAogCiAKLXN0YXRlIDEKK1N0YXRlIDEKIAogICAgIDMgbnVtOiAnMCcgLiAgW1wkZW5kXQogICAgIDQgaWQ6ICcwJyAuICBbXCRlbmRdCkBAIC0xMDQ4MSw2MyArNTY0MjgsNTEgQEAKICAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDMgKG51bSkKIAogCi1zdGF0ZSAyCitTdGF0ZSAyCiAKICAgICAwIFwkYWNjZXB0OiBleHAgLiBcJGVuZAogCiAgICAgXCRlbmQgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNQogCiAKLXN0YXRlIDMKK1N0YXRlIDMKIAogICAgIDEgZXhwOiBudW0gLgogCiAgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAxIChleHApCiAKIAotc3RhdGUgNAorU3RhdGUgNAogCiAgICAgMiBleHA6IGlkIC4KIAogICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMiAoZXhwKQogCiAKLXN0YXRlIDUKK1N0YXRlIDUKIAogICAgIDAgXCRhY2NlcHQ6IGV4cCBcJGVuZCAuCiAKICAgICBcJGRlZmF1bHQgIGFjY2VwdAotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY29uZmxpY3RzLmF0OjQ2NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6NzkyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICA2MyApICMgNjMuIGNvbmZsaWN0cy5hdDo0NzY6ICVleHBlY3Qgbm90IGVub3VnaAotICAgIGF0X3NldHVwX2xpbmU9J2NvbmZsaWN0cy5hdDo0NzYnCi0gICAgYXRfZGVzYz0nJWV4cGVjdCBub3QgZW5vdWdoJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgNjM6ICVleHBlY3Qgbm90IGVub3VnaCAgICAgICAgICAgICAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICI2My4gY29uZmxpY3RzLmF0OjQ3NjogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xODcKKyNBVF9TVEFSVF8xODgKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxODggJ2NvbmZsaWN0cy5hdDo4OTQnIFwKKyAgIiVleHBlY3Qgbm90IGVub3VnaCIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAxMAorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjE4OC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIGNhdCA+aW5wdXQueSA8PCdfQVRFT0YnCkBAIC0xMDU0OCw0NyArNTY0ODMsMzYgQEAKIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY29uZmxpY3RzLmF0OjQ4ODogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgotZWNobyBjb25mbGljdHMuYXQ6NDg4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyA+PiRhdF9zdGRlcnI7IGVjaG8gImlucHV0Lnk6IGNvbmZsaWN0czogMSBzaGlmdC9yZWR1Y2UKLWlucHV0Lnk6IGV4cGVjdGVkIDAgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cwotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY29uZmxpY3RzLmF0OjQ4ODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjkwMzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiICJjb25mbGljdHMuYXQ6OTAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueTogY29uZmxpY3RzOiAxIHNoaWZ0L3JlZHVjZQoraW5wdXQueTogZXJyb3I6IGV4cGVjdGVkIDAgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cworIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjkwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwotCi0gIDY0ICkgIyA2NC4gY29uZmxpY3RzLmF0OjQ5NjogJWV4cGVjdCByaWdodAotICAgIGF0X3NldHVwX2xpbmU9J2NvbmZsaWN0cy5hdDo0OTYnCi0gICAgYXRfZGVzYz0nJWV4cGVjdCByaWdodCcKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDY0OiAlZXhwZWN0IHJpZ2h0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiNjQuIGNvbmZsaWN0cy5hdDo0OTY6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTg4CisjQVRfU1RBUlRfMTg5CithdF9mbl9ncm91cF9iYW5uZXIgMTg5ICdjb25mbGljdHMuYXQ6OTE0JyBcCisgICIlZXhwZWN0IHJpZ2h0IiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgMTAKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxODkuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiBjYXQgPmlucHV0LnkgPDwnX0FURU9GJwpAQCAtMTA1OTksNDUgKzU2NTIzLDEwNCBAQAogX0FURU9GCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjb25mbGljdHMuYXQ6NTA1OiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCi1lY2hvIGNvbmZsaWN0cy5hdDo1MDUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjb25mbGljdHMuYXQ6NTA1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo5MjM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjb25mbGljdHMuYXQ6OTIzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjkyMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjkyMzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgImNvbmZsaWN0cy5hdDo5MjMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6OTIzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo5MjM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6OTIzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo5MjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6OTIzOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjkyMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6OTIzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjkyMzogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY29uZmxpY3RzLmF0OjkyMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjkyMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwotCi0gIDY1ICkgIyA2NS4gY29uZmxpY3RzLmF0OjUxMzogJWV4cGVjdCB0b28gbXVjaAotICAgIGF0X3NldHVwX2xpbmU9J2NvbmZsaWN0cy5hdDo1MTMnCi0gICAgYXRfZGVzYz0nJWV4cGVjdCB0b28gbXVjaCcKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDY1OiAlZXhwZWN0IHRvbyBtdWNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiNjUuIGNvbmZsaWN0cy5hdDo1MTM6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTg5CisjQVRfU1RBUlRfMTkwCithdF9mbl9ncm91cF9iYW5uZXIgMTkwICdjb25mbGljdHMuYXQ6OTMxJyBcCisgICIlZXhwZWN0IHRvbyBtdWNoIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgMTAKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxOTAuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiBjYXQgPmlucHV0LnkgPDwnX0FURU9GJwpAQCAtMTA2NDgsNDcgKzU2NjMxLDM2IEBACiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNvbmZsaWN0cy5hdDo1MjU6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKLWVjaG8gY29uZmxpY3RzLmF0OjUyNSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gPj4kYXRfc3RkZXJyOyBlY2hvICJpbnB1dC55OiBjb25mbGljdHM6IDEgc2hpZnQvcmVkdWNlCi1pbnB1dC55OiBleHBlY3RlZCAyIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNvbmZsaWN0cy5hdDo1MjU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo5NDA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IiAiY29uZmxpY3RzLmF0Ojk0MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6IGNvbmZsaWN0czogMSBzaGlmdC9yZWR1Y2UKK2lucHV0Lnk6IGVycm9yOiBleHBlY3RlZCAyIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo5NDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICA2NiApICMgNjYuIGNvbmZsaWN0cy5hdDo1MzM6ICVleHBlY3Qgd2l0aCByZWR1Y2UgY29uZmxpY3RzCi0gICAgYXRfc2V0dXBfbGluZT0nY29uZmxpY3RzLmF0OjUzMycKLSAgICBhdF9kZXNjPSclZXhwZWN0IHdpdGggcmVkdWNlIGNvbmZsaWN0cycKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDY2OiAlZXhwZWN0IHdpdGggcmVkdWNlIGNvbmZsaWN0cyAgICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiNjYuIGNvbmZsaWN0cy5hdDo1MzM6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTkwCisjQVRfU1RBUlRfMTkxCithdF9mbl9ncm91cF9iYW5uZXIgMTkxICdjb25mbGljdHMuYXQ6OTUxJyBcCisgICIlZXhwZWN0IHdpdGggcmVkdWNlIGNvbmZsaWN0cyIgIiAgICAgICAgICAgICAgICAgICIgMTAKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIxOTEuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiBjYXQgPmlucHV0LnkgPDwnX0FURU9GJwpAQCAtMTA2OTksNDcgKzU2NjcxLDE0NCBAQAogX0FURU9GCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjb25mbGljdHMuYXQ6NTQ1OiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCi1lY2hvIGNvbmZsaWN0cy5hdDo1NDUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvID4+JGF0X3N0ZGVycjsgZWNobyAiaW5wdXQueTogY29uZmxpY3RzOiAxIHJlZHVjZS9yZWR1Y2UKLWlucHV0Lnk6IGV4cGVjdGVkIDAgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNvbmZsaWN0cy5hdDo1NDU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0Ojk2MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiICJjb25mbGljdHMuYXQ6OTYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueTogY29uZmxpY3RzOiAxIHJlZHVjZS9yZWR1Y2UKK2lucHV0Lnk6IGVycm9yOiBleHBlY3RlZCAwIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3RzCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6OTYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzE5MQorI0FUX1NUQVJUXzE5MgorYXRfZm5fZ3JvdXBfYmFubmVyIDE5MiAnY29uZmxpY3RzLmF0Ojk3MScgXAorICAiJXByZWMgd2l0aCB1c2VyIHN0cmluZyIgIiAgICAgICAgICAgICAgICAgICAgICAgICAiIDEwCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTkyLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyUlCitleHA6CisgICJmb28iICVwcmVjICJmb28iCis7CitfQVRFT0YKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo5ODA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjb25mbGljdHMuYXQ6OTgwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0Ojk4MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo5ODA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiICJjb25mbGljdHMuYXQ6OTgwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0Ojk4MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6OTgwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0Ojk4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6OTgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0Ojk4MDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNvbmZsaWN0cy5hdDo5ODAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0Ojk4MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo5ODA6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDo5ODAiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDo5ODAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICA2NyApICMgNjcuIGNvbmZsaWN0cy5hdDo1NTM6ICVuby1kZWZhdWx0LXByZWMgd2l0aG91dCAlcHJlYwotICAgIGF0X3NldHVwX2xpbmU9J2NvbmZsaWN0cy5hdDo1NTMnCi0gICAgYXRfZGVzYz0nJW5vLWRlZmF1bHQtcHJlYyB3aXRob3V0ICVwcmVjJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgNjc6ICVuby1kZWZhdWx0LXByZWMgd2l0aG91dCAlcHJlYyAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICI2Ny4gY29uZmxpY3RzLmF0OjU1MzogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8xOTIKKyNBVF9TVEFSVF8xOTMKK2F0X2ZuX2dyb3VwX2Jhbm5lciAxOTMgJ2NvbmZsaWN0cy5hdDo5ODgnIFwKKyAgIiVuby1kZWZhdWx0LXByZWMgd2l0aG91dCAlcHJlYyIgIiAgICAgICAgICAgICAgICAgIiAxMAorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjE5My4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIGNhdCA+aW5wdXQueSA8PCdfQVRFT0YnCkBAIC0xMDc1Nyw0NiArNTY4MjYsMTA2IEBACiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNvbmZsaWN0cy5hdDo1NzE6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKLWVjaG8gY29uZmxpY3RzLmF0OjU3MSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gPj4kYXRfc3RkZXJyOyBlY2hvICJpbnB1dC55OiBjb25mbGljdHM6IDQgc2hpZnQvcmVkdWNlCi0iIHwgJGF0X2RpZmYgLSAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjb25mbGljdHMuYXQ6NTcxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMDA0OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY29uZmxpY3RzLmF0OjEwMDQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTAwNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEwMDQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiICJjb25mbGljdHMuYXQ6MTAwNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMDA0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMDA0OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjEwMDQiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEwMDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTAwNDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNvbmZsaWN0cy5hdDoxMDA0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMDA0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEwMDQ6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDoxMDA0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6IGNvbmZsaWN0czogNCBzaGlmdC9yZWR1Y2UKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMDA0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Ci0KLSAgNjggKSAjIDY4LiBjb25mbGljdHMuYXQ6NTc5OiAlbm8tZGVmYXVsdC1wcmVjIHdpdGggJXByZWMKLSAgICBhdF9zZXR1cF9saW5lPSdjb25mbGljdHMuYXQ6NTc5JwotICAgIGF0X2Rlc2M9JyVuby1kZWZhdWx0LXByZWMgd2l0aCAlcHJlYycKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDY4OiAlbm8tZGVmYXVsdC1wcmVjIHdpdGggJXByZWMgICAgICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiNjguIGNvbmZsaWN0cy5hdDo1Nzk6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTkzCisjQVRfU1RBUlRfMTk0CithdF9mbl9ncm91cF9iYW5uZXIgMTk0ICdjb25mbGljdHMuYXQ6MTAxNCcgXAorICAiJW5vLWRlZmF1bHQtcHJlYyB3aXRoICVwcmVjIiAiICAgICAgICAgICAgICAgICAgICAiIDEwCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTk0LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogY2F0ID5pbnB1dC55IDw8J19BVEVPRicKQEAgLTEwODE0LDQ1ICs1Njk0MywxMDQgQEAKIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY29uZmxpY3RzLmF0OjU5NTogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgotZWNobyBjb25mbGljdHMuYXQ6NTk1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY29uZmxpY3RzLmF0OjU5NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTAzMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNvbmZsaWN0cy5hdDoxMDMwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEwMzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMDMwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IiAiY29uZmxpY3RzLmF0OjEwMzAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTAzMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTAzMDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNvbmZsaWN0cy5hdDoxMDMwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMDMwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEwMzA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6MTAzMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTAzMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMDMwOiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjb25mbGljdHMuYXQ6MTAzMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEwMzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICA2OSApICMgNjkuIGNvbmZsaWN0cy5hdDo2MDM6ICVkZWZhdWx0LXByZWMKLSAgICBhdF9zZXR1cF9saW5lPSdjb25mbGljdHMuYXQ6NjAzJwotICAgIGF0X2Rlc2M9JyVkZWZhdWx0LXByZWMnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiA2OTogJWRlZmF1bHQtcHJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjY5LiBjb25mbGljdHMuYXQ6NjAzOiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzE5NAorI0FUX1NUQVJUXzE5NQorYXRfZm5fZ3JvdXBfYmFubmVyIDE5NSAnY29uZmxpY3RzLmF0OjEwMzgnIFwKKyAgIiVkZWZhdWx0LXByZWMiICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAxMAorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjE5NS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIGNhdCA+aW5wdXQueSA8PCdfQVRFT0YnCkBAIC0xMDg3MCw4MCArNTcwNTgsMTY3MiBAQAogX0FURU9GCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjb25mbGljdHMuYXQ6NjE5OiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCi1lY2hvIGNvbmZsaWN0cy5hdDo2MTkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjb25mbGljdHMuYXQ6NjE5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMDU0OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY29uZmxpY3RzLmF0OjEwNTQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTA1NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEwNTQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiICJjb25mbGljdHMuYXQ6MTA1NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMDU0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMDU0OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjEwNTQiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEwNTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTA1NDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNvbmZsaWN0cy5hdDoxMDU0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMDU0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCi0KLSRhdF90cmFjZW9uCi0KLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMDU0OiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjb25mbGljdHMuYXQ6MTA1NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEwNTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgYmFubmVyLTkgKSAjIEJhbm5lciA5LiBjYWxjLmF0OjU0MQotICAgIGNhdCA8PFxfQVRFT0YKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTk1CisjQVRfU1RBUlRfMTk2CithdF9mbl9ncm91cF9iYW5uZXIgMTk2ICdjb25mbGljdHMuYXQ6MTA2MicgXAorICAiVW5yZWFjaGFibGUgU3RhdGVzIEFmdGVyIENvbmZsaWN0IFJlc29sdXRpb24iICIgICAiIDEwCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTk2LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKLVNpbXBsZSBMQUxSKDEpIENhbGN1bGF0b3IuCisKKyMgSWYgY29uZmxpY3QgcmVzb2x1dGlvbiBtYWtlcyBzdGF0ZXMgdW5yZWFjaGFibGUsIHJlbW92ZSB0aG9zZSBzdGF0ZXMsIHJlcG9ydAorIyBydWxlcyB0aGF0IGFyZSB0aGVuIHVudXNlZCwgYW5kIGRvbid0IHJlcG9ydCBjb25mbGljdHMgaW4gdGhvc2Ugc3RhdGVzLiAgVGVzdAorIyB3aGF0IGhhcHBlbnMgd2hlbiBhIG5vbnRlcm1pbmFsIGJlY29tZXMgdXNlbGVzcyBhcyBhIHJlc3VsdCBvZiBzdGF0ZSByZW1vdmFsCisjIHNpbmNlIHRoYXQgY2F1c2VzIGxhbHIubydzIGdvdG8gbWFwIHRvIGJlIHJld3JpdHRlbi4KKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVvdXRwdXQgImlucHV0LmMiCislbGVmdCAnYScKKworJSUKKworc3RhcnQ6IHJlc29sdmVkX2NvbmZsaWN0ICdhJyByZXBvcnRlZF9jb25mbGljdHMgJ2EnIDsKKworLyogUy9SIGNvbmZsaWN0IHJlc29sdmVkIGFzIHJlZHVjZSwgc28gdGhlIHN0YXRlIHdpdGggaXRlbQorICogKHJlc29sdmVkX2NvbmZsaWN0OiAnYScgLiB1bnJlYWNoYWJsZTEpIGFuZCBhbGwgaXQgdHJhbnNpdGlvbiBzdWNjZXNzb3JzIGFyZQorICogdW5yZWFjaGFibGUsIGFuZCB0aGUgYXNzb2NpYXRlZCBwcm9kdWN0aW9uIGlzIHVzZWxlc3MuICAqLworcmVzb2x2ZWRfY29uZmxpY3Q6CisgICAgJ2EnIHVucmVhY2hhYmxlMQorICB8ICVwcmVjICdhJworICA7CisKKy8qIFMvUiBjb25mbGljdCB0aGF0IG5lZWQgbm90IGJlIHJlcG9ydGVkIHNpbmNlIGl0IGlzIHVucmVhY2hhYmxlIGJlY2F1c2Ugb2YKKyAqIHRoZSBwcmV2aW91cyBjb25mbGljdCByZXNvbHV0aW9uLiAgTm9udGVybWluYWwgdW5yZWFjaGFibGUxIGFuZCBhbGwgaXRzCisgKiBwcm9kdWN0aW9ucyBhcmUgdXNlbGVzcy4gICovCit1bnJlYWNoYWJsZTE6CisgICAgJ2EnIHVucmVhY2hhYmxlMgorICB8CisgIDsKKworLyogTGlrZXdpc2UgZm9yIGEgUi9SIGNvbmZsaWN0IGFuZCBub250ZXJtaW5hbCB1bnJlYWNoYWJsZTIuICAqLwordW5yZWFjaGFibGUyOiB8IDsKKworLyogTWFrZSBzdXJlIHJlbWFpbmluZyBTL1IgYW5kIFIvUiBjb25mbGljdHMgYXJlIHN0aWxsIHJlcG9ydGVkIGNvcnJlY3RseSBldmVuCisgKiB3aGVuIHRoZWlyIHN0YXRlcyBhcmUgcmVudW1iZXJlZCBkdWUgdG8gc3RhdGUgcmVtb3ZhbC4gICovCityZXBvcnRlZF9jb25mbGljdHM6CisgICAgJ2EnCisgIHwgJ2EnCisgIHwKKyAgOwogCiBfQVRFT0YKLSAgICA7OwogCi0gIDcwICkgIyA3MC4gY2FsYy5hdDo1NTA6IENhbGN1bGF0b3IKLSAgICBhdF9zZXR1cF9saW5lPSdjYWxjLmF0OjU1MCcKLSAgICBhdF9kZXNjPSdDYWxjdWxhdG9yICcKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDcwOiBDYWxjdWxhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiNzAuIGNhbGMuYXQ6NTUwOiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjExMDY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNvbmZsaWN0cy5hdDoxMTA2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tcmVwb3J0PWFsbCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTEwNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMTA2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgaW5wdXQueSIgImNvbmZsaWN0cy5hdDoxMTA2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tcmVwb3J0PWFsbCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTEwNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTEwNjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNvbmZsaWN0cy5hdDoxMTA2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMTA2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjExMDY6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6MTEwNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTEwNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMTA2OiBiaXNvbiAtLXJlcG9ydD1hbGwgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDoxMTA2IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC0tcmVwb3J0PWFsbCBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueTogY29uZmxpY3RzOiAxIHNoaWZ0L3JlZHVjZSwgMSByZWR1Y2UvcmVkdWNlCitpbnB1dC55OjEyLjUtMjA6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0czogcmVzb2x2ZWRfY29uZmxpY3Q6ICdhJyB1bnJlYWNoYWJsZTEKK2lucHV0Lnk6MjAuNS0yMDogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzOiB1bnJlYWNoYWJsZTE6ICdhJyB1bnJlYWNoYWJsZTIKK2lucHV0Lnk6MjEuNDogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzOiB1bnJlYWNoYWJsZTE6IC8qIGVtcHR5ICovCitpbnB1dC55OjI1LjEzOiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHM6IHVucmVhY2hhYmxlMjogLyogZW1wdHkgKi8KK2lucHV0Lnk6MjUuMTY6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0czogdW5yZWFjaGFibGUyOiAvKiBlbXB0eSAqLworaW5wdXQueTozMS41LTc6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0czogcmVwb3J0ZWRfY29uZmxpY3RzOiAnYScKK2lucHV0Lnk6MzIuNDogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzOiByZXBvcnRlZF9jb25mbGljdHM6IC8qIGVtcHR5ICovCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTEwNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyMgRGVmaW5pbmcgUE9TSVhMWV9DT1JSRUNUIGNhdXNlcyBiaXNvbiB0byBjb21wbGFpbiBpZiBvcHRpb25zIGFyZQorIyBhZGRlZCBhZnRlciB0aGUgZ3JhbW1hciBmaWxlIG5hbWUsIHNvIHNraXAgdGhlc2UgY2hlY2tzIGluIHRoYXQKKyMgY2FzZS4KK2lmIHRlc3QgIiRQT1NJWExZX0NPUlJFQ1RfSVNfRVhQT1JURUQiID0gZmFsc2U7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisKKyAgIyBUbyBhdm9pZCBleHBhbmRpbmcgaXQgcmVwZWF0ZWRseSwgc3RvcmUgc3BlY2lmaWVkIHN0ZG91dC4KKyAgOiA+ZXhwb3V0CisKKyAgIyBSdW4gd2l0aCAtV2Vycm9yLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjExMDY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIGlucHV0LnkgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCBpbnB1dC55IC1XZXJyb3IiICJjb25mbGljdHMuYXQ6MTEwNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCBpbnB1dC55IC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMTA2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgQnVpbGQgZXhwZWN0ZWQgc3RkZXJyIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlICJ3YXJuaW5ncyBiZWluZworICAjIHRyZWF0ZWQgYXMgZXJyb3JzIiBtZXNzYWdlLgorICBjYXQgPmF0LWJpc29uLWNoZWNrLXdhcm5pbmdzIDw8J19BVEVPRicKK2lucHV0Lnk6IGNvbmZsaWN0czogMSBzaGlmdC9yZWR1Y2UsIDEgcmVkdWNlL3JlZHVjZQoraW5wdXQueToxMi41LTIwOiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHM6IHJlc29sdmVkX2NvbmZsaWN0OiAnYScgdW5yZWFjaGFibGUxCitpbnB1dC55OjIwLjUtMjA6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0czogdW5yZWFjaGFibGUxOiAnYScgdW5yZWFjaGFibGUyCitpbnB1dC55OjIxLjQ6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0czogdW5yZWFjaGFibGUxOiAvKiBlbXB0eSAqLworaW5wdXQueToyNS4xMzogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzOiB1bnJlYWNoYWJsZTI6IC8qIGVtcHR5ICovCitpbnB1dC55OjI1LjE2OiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHM6IHVucmVhY2hhYmxlMjogLyogZW1wdHkgKi8KK2lucHV0Lnk6MzEuNS03OiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHM6IHJlcG9ydGVkX2NvbmZsaWN0czogJ2EnCitpbnB1dC55OjMyLjQ6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0czogcmVwb3J0ZWRfY29uZmxpY3RzOiAvKiBlbXB0eSAqLworX0FURU9GCisKKyAgYXRfYmlzb25fY2hlY2tfZmlyc3Q9YHNlZCAtbiBcCisgICAgJy86IHdhcm5pbmc6IC97PTtxO30nIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzYAorICA6ICR7YXRfYmlzb25fY2hlY2tfZmlyc3Q6PTF9CisgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcD1gc2VkIC1uIFwKKyAgICAnL2NvbmZsaWN0czogWzAtOV0uKnJlZHVjZSQvez07cTt9JyBhdC1iaXNvbi1jaGVjay13YXJuaW5nc2AKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcDo9MX0KKyAgaWYgdGVzdCAkYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wIC1sdCAkYXRfYmlzb25fY2hlY2tfZmlyc3Q7IHRoZW4KKyAgICBhdF9iaXNvbl9jaGVja19maXJzdD0kYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wCisgIGZpCisgIGlmIHRlc3QgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0IC1ndCAxOyB0aGVuCisgICAgc2VkIC1uICIxLGBleHByICRhdF9iaXNvbl9jaGVja19maXJzdCAtIDFgInAgXAorICAgICAgYXQtYmlzb24tY2hlY2std2FybmluZ3MgPiBleHBlcnIKKyAgZmkKKyAgZWNobyAnYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzJyA+PiBleHBlcnIKKworICAjIEZpbmlzaCBidWlsZGluZyBleHBlY3RlZCBzdGRlcnIgYW5kIGNoZWNrLiAgVW5saWtlIHdhcm5pbmdzLAorICAjIGNvbXBsYWludHMgY2F1c2UgYmlzb24gdG8gZXhpdCBlYXJseS4gIFRodXMsIHdpdGggLVdlcnJvciwgYmlzb24KKyAgIyBkb2VzIG5vdCBuZWNlc3NhcmlseSByZXBvcnQgYWxsIHdhcm5pbmdzIHRoYXQgaXQgZG9lcyB3aXRob3V0CisgICMgLVdlcnJvciwgYnV0IGl0IGF0IGxlYXN0IHJlcG9ydHMgb25lLgorICBhdF9iaXNvbl9jaGVja19sYXN0PWBzZWQgLW4gJyQ9JyBzdGRlcnJgCisgIDogJHthdF9iaXNvbl9jaGVja19sYXN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19sYXN0PWBleHByICRhdF9iaXNvbl9jaGVja19sYXN0IC0gMWAKKyAgc2VkIC1uICIkYXRfYmlzb25fY2hlY2tfZmlyc3QsJGF0X2Jpc29uX2NoZWNrX2xhc3QicCBcCisgICAgYXQtYmlzb24tY2hlY2std2FybmluZ3MgPj4gZXhwZXJyCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTEwNjogc2VkICdzLC4qL1xcKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1xcKVwkLFxcMSwnIFxcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY29uZmxpY3RzLmF0OjExMDYiCisoICRhdF9jaGVja190cmFjZTsgc2VkICdzLC4qL1woYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzXCkkLFwxLCcgXAorICAgICAgICAgICAgICBzdGRlcnIgMT4mMgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorJGF0X2RpZmYgZXhwZXJyICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTEwNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIE5vdyBjaGVjayAtLXdhcm5pbmdzPWVycm9yLgorICBjcCBzdGRlcnIgZXhwZXJyCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTEwNjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIGlucHV0LnkgLS13YXJuaW5ncz1lcnJvciIgImNvbmZsaWN0cy5hdDoxMTA2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIGlucHV0LnkgLS13YXJuaW5ncz1lcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorJGF0X2RpZmYgZXhwZXJyICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTEwNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIE5vdyBjaGVjayAtV25vbmUgYW5kIC0td2FybmluZ3M9bm9uZSBieSBtYWtpbmcgc3VyZSB0aGF0CisgICMgLVdlcnJvciBkb2Vzbid0IGNoYW5nZSB0aGUgZXhpdCBzdGF0dXMgd2hlbiAtV25vbmUgb3IKKyAgIyAtLXdhcm5pbmdzPW5vbmUgaXMgc3BlY2lmaWVkLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjExMDY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIGlucHV0LnkgLVdub25lIC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgaW5wdXQueSAtV25vbmUgLVdlcnJvciIgImNvbmZsaWN0cy5hdDoxMTA2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIGlucHV0LnkgLVdub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjExMDYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTEwNjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCBpbnB1dC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIiAiY29uZmxpY3RzLmF0OjExMDYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTEwNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTExNzogY2F0IGlucHV0Lm91dHB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDoxMTE3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBpbnB1dC5vdXRwdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJSdWxlcyB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzCisKKyAgICAyIHJlc29sdmVkX2NvbmZsaWN0OiAnYScgdW5yZWFjaGFibGUxCisKKyAgICA0IHVucmVhY2hhYmxlMTogJ2EnIHVucmVhY2hhYmxlMgorICAgIDUgICAgICAgICAgICAgfCAvKiBlbXB0eSAqLworCisgICAgNiB1bnJlYWNoYWJsZTI6IC8qIGVtcHR5ICovCisgICAgNyAgICAgICAgICAgICB8IC8qIGVtcHR5ICovCisKKyAgICA5IHJlcG9ydGVkX2NvbmZsaWN0czogJ2EnCisgICAxMCAgICAgICAgICAgICAgICAgICB8IC8qIGVtcHR5ICovCisKKworU3RhdGUgNCBjb25mbGljdHM6IDEgc2hpZnQvcmVkdWNlCitTdGF0ZSA1IGNvbmZsaWN0czogMSByZWR1Y2UvcmVkdWNlCisKKworR3JhbW1hcgorCisgICAgMCBcJGFjY2VwdDogc3RhcnQgXCRlbmQKKworICAgIDEgc3RhcnQ6IHJlc29sdmVkX2NvbmZsaWN0ICdhJyByZXBvcnRlZF9jb25mbGljdHMgJ2EnCisKKyAgICAyIHJlc29sdmVkX2NvbmZsaWN0OiAnYScgdW5yZWFjaGFibGUxCisgICAgMyAgICAgICAgICAgICAgICAgIHwgLyogZW1wdHkgKi8KKworICAgIDQgdW5yZWFjaGFibGUxOiAnYScgdW5yZWFjaGFibGUyCisgICAgNSAgICAgICAgICAgICB8IC8qIGVtcHR5ICovCisKKyAgICA2IHVucmVhY2hhYmxlMjogLyogZW1wdHkgKi8KKyAgICA3ICAgICAgICAgICAgIHwgLyogZW1wdHkgKi8KKworICAgIDggcmVwb3J0ZWRfY29uZmxpY3RzOiAnYScKKyAgICA5ICAgICAgICAgICAgICAgICAgIHwgJ2EnCisgICAxMCAgICAgICAgICAgICAgICAgICB8IC8qIGVtcHR5ICovCisKKworVGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyCisKK1wkZW5kICgwKSAwCisnYScgKDk3KSAxIDIgNCA4IDkKK2Vycm9yICgyNTYpCisKKworTm9udGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyCisKK1wkYWNjZXB0ICg0KQorICAgIG9uIGxlZnQ6IDAKK3N0YXJ0ICg1KQorICAgIG9uIGxlZnQ6IDEsIG9uIHJpZ2h0OiAwCityZXNvbHZlZF9jb25mbGljdCAoNikKKyAgICBvbiBsZWZ0OiAyIDMsIG9uIHJpZ2h0OiAxCit1bnJlYWNoYWJsZTEgKDcpCisgICAgb24gbGVmdDogNCA1LCBvbiByaWdodDogMgordW5yZWFjaGFibGUyICg4KQorICAgIG9uIGxlZnQ6IDYgNywgb24gcmlnaHQ6IDQKK3JlcG9ydGVkX2NvbmZsaWN0cyAoOSkKKyAgICBvbiBsZWZ0OiA4IDkgMTAsIG9uIHJpZ2h0OiAxCisKKworU3RhdGUgMAorCisgICAgMCBcJGFjY2VwdDogLiBzdGFydCBcJGVuZAorICAgIDEgc3RhcnQ6IC4gcmVzb2x2ZWRfY29uZmxpY3QgJ2EnIHJlcG9ydGVkX2NvbmZsaWN0cyAnYScKKyAgICAyIHJlc29sdmVkX2NvbmZsaWN0OiAuICdhJyB1bnJlYWNoYWJsZTEKKyAgICAzICAgICAgICAgICAgICAgICAgfCAuICBbJ2EnXQorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAzIChyZXNvbHZlZF9jb25mbGljdCkKKworICAgIHN0YXJ0ICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxCisgICAgcmVzb2x2ZWRfY29uZmxpY3QgIGdvIHRvIHN0YXRlIDIKKworICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAzIGFuZCB0b2tlbiAnYScgcmVzb2x2ZWQgYXMgcmVkdWNlICglbGVmdCAnYScpLgorCisKK1N0YXRlIDEKKworICAgIDAgXCRhY2NlcHQ6IHN0YXJ0IC4gXCRlbmQKKworICAgIFwkZW5kICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDMKKworCitTdGF0ZSAyCisKKyAgICAxIHN0YXJ0OiByZXNvbHZlZF9jb25mbGljdCAuICdhJyByZXBvcnRlZF9jb25mbGljdHMgJ2EnCisKKyAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNAorCisKK1N0YXRlIDMKKworICAgIDAgXCRhY2NlcHQ6IHN0YXJ0IFwkZW5kIC4KKworICAgIFwkZGVmYXVsdCAgYWNjZXB0CisKKworU3RhdGUgNAorCisgICAgMSBzdGFydDogcmVzb2x2ZWRfY29uZmxpY3QgJ2EnIC4gcmVwb3J0ZWRfY29uZmxpY3RzICdhJworICAgIDggcmVwb3J0ZWRfY29uZmxpY3RzOiAuICdhJworICAgIDkgICAgICAgICAgICAgICAgICAgfCAuICdhJworICAgMTAgICAgICAgICAgICAgICAgICAgfCAuICBbJ2EnXQorCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDUKKworICAgICdhJyAgW3JlZHVjZSB1c2luZyBydWxlIDEwIChyZXBvcnRlZF9jb25mbGljdHMpXQorCisgICAgcmVwb3J0ZWRfY29uZmxpY3RzICBnbyB0byBzdGF0ZSA2CisKKworU3RhdGUgNQorCisgICAgOCByZXBvcnRlZF9jb25mbGljdHM6ICdhJyAuICBbJ2EnXQorICAgIDkgICAgICAgICAgICAgICAgICAgfCAnYScgLiAgWydhJ10KKworICAgICdhJyAgICAgICByZWR1Y2UgdXNpbmcgcnVsZSA4IChyZXBvcnRlZF9jb25mbGljdHMpCisgICAgJ2EnICAgICAgIFtyZWR1Y2UgdXNpbmcgcnVsZSA5IChyZXBvcnRlZF9jb25mbGljdHMpXQorICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgOCAocmVwb3J0ZWRfY29uZmxpY3RzKQorCisKK1N0YXRlIDYKKworICAgIDEgc3RhcnQ6IHJlc29sdmVkX2NvbmZsaWN0ICdhJyByZXBvcnRlZF9jb25mbGljdHMgLiAnYScKKworICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA3CisKKworU3RhdGUgNworCisgICAgMSBzdGFydDogcmVzb2x2ZWRfY29uZmxpY3QgJ2EnIHJlcG9ydGVkX2NvbmZsaWN0cyAnYScgLgorCisgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAxIChzdGFydCkKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMTE3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0LWtlZXAueSA8PCdfQVRFT0YnCislZGVmaW5lIGxyLmtlZXAtdW5yZWFjaGFibGUtc3RhdGVzCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjU2OiBjYXQgaW5wdXQueSA+PiBpbnB1dC1rZWVwLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjb25mbGljdHMuYXQ6MTI1NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgaW5wdXQueSA+PiBpbnB1dC1rZWVwLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyNTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyNTg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBpbnB1dC1rZWVwLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjb25mbGljdHMuYXQ6MTI1OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBpbnB1dC1rZWVwLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjU4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyNTg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIGlucHV0LWtlZXAueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBpbnB1dC1rZWVwLnkiICJjb25mbGljdHMuYXQ6MTI1OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBpbnB1dC1rZWVwLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjU4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjU4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjEyNTgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyNTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTI1ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNvbmZsaWN0cy5hdDoxMjU4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjU4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyNTg6IGJpc29uIGlucHV0LWtlZXAueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDoxMjU4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIGlucHV0LWtlZXAueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0LWtlZXAueTogY29uZmxpY3RzOiAyIHNoaWZ0L3JlZHVjZSwgMiByZWR1Y2UvcmVkdWNlCitpbnB1dC1rZWVwLnk6MjIuNDogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzOiB1bnJlYWNoYWJsZTE6IC8qIGVtcHR5ICovCitpbnB1dC1rZWVwLnk6MjYuMTY6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0czogdW5yZWFjaGFibGUyOiAvKiBlbXB0eSAqLworaW5wdXQta2VlcC55OjMyLjUtNzogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzOiByZXBvcnRlZF9jb25mbGljdHM6ICdhJworaW5wdXQta2VlcC55OjMzLjQ6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0czogcmVwb3J0ZWRfY29uZmxpY3RzOiAvKiBlbXB0eSAqLworIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyNTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisjIERlZmluaW5nIFBPU0lYTFlfQ09SUkVDVCBjYXVzZXMgYmlzb24gdG8gY29tcGxhaW4gaWYgb3B0aW9ucyBhcmUKKyMgYWRkZWQgYWZ0ZXIgdGhlIGdyYW1tYXIgZmlsZSBuYW1lLCBzbyBza2lwIHRoZXNlIGNoZWNrcyBpbiB0aGF0CisjIGNhc2UuCitpZiB0ZXN0ICIkUE9TSVhMWV9DT1JSRUNUX0lTX0VYUE9SVEVEIiA9IGZhbHNlOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworCisgICMgVG8gYXZvaWQgZXhwYW5kaW5nIGl0IHJlcGVhdGVkbHksIHN0b3JlIHNwZWNpZmllZCBzdGRvdXQuCisgIDogPmV4cG91dAorCisgICMgUnVuIHdpdGggLVdlcnJvci4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjU4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LWtlZXAueSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQta2VlcC55IC1XZXJyb3IiICJjb25mbGljdHMuYXQ6MTI1OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LWtlZXAueSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTI1OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIEJ1aWxkIGV4cGVjdGVkIHN0ZGVyciB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSAid2FybmluZ3MgYmVpbmcKKyAgIyB0cmVhdGVkIGFzIGVycm9ycyIgbWVzc2FnZS4KKyAgY2F0ID5hdC1iaXNvbi1jaGVjay13YXJuaW5ncyA8PCdfQVRFT0YnCitpbnB1dC1rZWVwLnk6IGNvbmZsaWN0czogMiBzaGlmdC9yZWR1Y2UsIDIgcmVkdWNlL3JlZHVjZQoraW5wdXQta2VlcC55OjIyLjQ6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0czogdW5yZWFjaGFibGUxOiAvKiBlbXB0eSAqLworaW5wdXQta2VlcC55OjI2LjE2OiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHM6IHVucmVhY2hhYmxlMjogLyogZW1wdHkgKi8KK2lucHV0LWtlZXAueTozMi41LTc6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0czogcmVwb3J0ZWRfY29uZmxpY3RzOiAnYScKK2lucHV0LWtlZXAueTozMy40OiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHM6IHJlcG9ydGVkX2NvbmZsaWN0czogLyogZW1wdHkgKi8KK19BVEVPRgorCisgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PWBzZWQgLW4gXAorICAgICcvOiB3YXJuaW5nOiAvez07cTt9JyBhdC1iaXNvbi1jaGVjay13YXJuaW5nc2AKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2ZpcnN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19maXJzdF90bXA9YHNlZCAtbiBcCisgICAgJy9jb25mbGljdHM6IFswLTldLipyZWR1Y2UkL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdF90bXA6PTF9CisgIGlmIHRlc3QgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcCAtbHQgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0OyB0aGVuCisgICAgYXRfYmlzb25fY2hlY2tfZmlyc3Q9JGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcAorICBmaQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdCAtZ3QgMTsgdGhlbgorICAgIHNlZCAtbiAiMSxgZXhwciAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLSAxYCJwIFwKKyAgICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4gZXhwZXJyCisgIGZpCisgIGVjaG8gJ2Jpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycycgPj4gZXhwZXJyCisKKyAgIyBGaW5pc2ggYnVpbGRpbmcgZXhwZWN0ZWQgc3RkZXJyIGFuZCBjaGVjay4gIFVubGlrZSB3YXJuaW5ncywKKyAgIyBjb21wbGFpbnRzIGNhdXNlIGJpc29uIHRvIGV4aXQgZWFybHkuICBUaHVzLCB3aXRoIC1XZXJyb3IsIGJpc29uCisgICMgZG9lcyBub3QgbmVjZXNzYXJpbHkgcmVwb3J0IGFsbCB3YXJuaW5ncyB0aGF0IGl0IGRvZXMgd2l0aG91dAorICAjIC1XZXJyb3IsIGJ1dCBpdCBhdCBsZWFzdCByZXBvcnRzIG9uZS4KKyAgYXRfYmlzb25fY2hlY2tfbGFzdD1gc2VkIC1uICckPScgc3RkZXJyYAorICA6ICR7YXRfYmlzb25fY2hlY2tfbGFzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfbGFzdD1gZXhwciAkYXRfYmlzb25fY2hlY2tfbGFzdCAtIDFgCisgIHNlZCAtbiAiJGF0X2Jpc29uX2NoZWNrX2ZpcnN0LCRhdF9iaXNvbl9jaGVja19sYXN0InAgXAorICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4+IGV4cGVycgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyNTg6IHNlZCAncywuKi9cXChiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnNcXClcJCxcXDEsJyBcXAorICAgICAgICAgICAgICBzdGRlcnIgMT4mMiIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNvbmZsaWN0cy5hdDoxMjU4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAncywuKi9cKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1wpJCxcMSwnIFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyNTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBOb3cgY2hlY2sgLS13YXJuaW5ncz1lcnJvci4KKyAgY3Agc3RkZXJyIGV4cGVycgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyNTg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQta2VlcC55IC0td2FybmluZ3M9ZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC1rZWVwLnkgLS13YXJuaW5ncz1lcnJvciIgImNvbmZsaWN0cy5hdDoxMjU4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQta2VlcC55IC0td2FybmluZ3M9ZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyNTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBOb3cgY2hlY2sgLVdub25lIGFuZCAtLXdhcm5pbmdzPW5vbmUgYnkgbWFraW5nIHN1cmUgdGhhdAorICAjIC1XZXJyb3IgZG9lc24ndCBjaGFuZ2UgdGhlIGV4aXQgc3RhdHVzIHdoZW4gLVdub25lIG9yCisgICMgLS13YXJuaW5ncz1ub25lIGlzIHNwZWNpZmllZC4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjU4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LWtlZXAueSAtV25vbmUgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LWtlZXAueSAtV25vbmUgLVdlcnJvciIgImNvbmZsaWN0cy5hdDoxMjU4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQta2VlcC55IC1Xbm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjU4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyNTg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQta2VlcC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQta2VlcC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIiAiY29uZmxpY3RzLmF0OjEyNTgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC1rZWVwLnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyNTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQorCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzE5NgorI0FUX1NUQVJUXzE5NworYXRfZm5fZ3JvdXBfYmFubmVyIDE5NyAnY29uZmxpY3RzLmF0OjEyNzMnIFwKKyAgIlNvbHZlZCBjb25mbGljdHMgcmVwb3J0IGZvciBtdWx0aXBsZSByZWR1Y3Rpb25zIGluIGEgc3RhdGUiICIiIDEwCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTk3LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworIyBVc2VkIHRvIGxvc2UgZWFybGllciBzb2x2ZWQgY29uZmxpY3QgbWVzc2FnZXMgZXZlbiB3aXRoaW4gYSBzaW5nbGUgUy9SL1IuCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislbGVmdCAnYScKKyVyaWdodCAnYicKKyVyaWdodCAnYycKKyVyaWdodCAnZCcKKyUlCitzdGFydDoKKyAgICAnYScKKyAgfCBlbXB0eV9hICdhJworICB8ICdiJworICB8IGVtcHR5X2IgJ2InCisgIHwgJ2MnCisgIHwgZW1wdHlfYzEgJ2MnCisgIHwgZW1wdHlfYzIgJ2MnCisgIHwgZW1wdHlfYzMgJ2MnCisgIDsKK2VtcHR5X2E6ICVwcmVjICdhJyA7CitlbXB0eV9iOiAlcHJlYyAnYicgOworZW1wdHlfYzE6ICVwcmVjICdjJyA7CitlbXB0eV9jMjogJXByZWMgJ2MnIDsKK2VtcHR5X2MzOiAlcHJlYyAnZCcgOworX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyOTk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY29uZmxpY3RzLmF0OjEyOTkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1yZXBvcnQ9YWxsIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyOTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTI5OTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLW8gaW5wdXQuYyBpbnB1dC55IiAiY29uZmxpY3RzLmF0OjEyOTkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyOTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyOTk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6MTI5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTI5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMjk5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjEyOTkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEyOTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTI5OTogYmlzb24gLS1yZXBvcnQ9YWxsIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDoxMjk5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC0tcmVwb3J0PWFsbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTI5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMzAwOiBjYXQgaW5wdXQub3V0cHV0IHwgc2VkIC1uICcvXlN0YXRlIDBcJC8sL15TdGF0ZSAxXCQvcCciCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2Egc2hlbGwgcGlwZWxpbmUnICJjb25mbGljdHMuYXQ6MTMwMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgaW5wdXQub3V0cHV0IHwgc2VkIC1uICcvXlN0YXRlIDAkLywvXlN0YXRlIDEkL3AnCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiU3RhdGUgMAorCisgICAgMCBcJGFjY2VwdDogLiBzdGFydCBcJGVuZAorICAgIDEgc3RhcnQ6IC4gJ2EnCisgICAgMiAgICAgIHwgLiBlbXB0eV9hICdhJworICAgIDMgICAgICB8IC4gJ2InCisgICAgNCAgICAgIHwgLiBlbXB0eV9iICdiJworICAgIDUgICAgICB8IC4gJ2MnCisgICAgNiAgICAgIHwgLiBlbXB0eV9jMSAnYycKKyAgICA3ICAgICAgfCAuIGVtcHR5X2MyICdjJworICAgIDggICAgICB8IC4gZW1wdHlfYzMgJ2MnCisgICAgOSBlbXB0eV9hOiAuICBbJ2EnXQorICAgMTAgZW1wdHlfYjogLiAgW10KKyAgIDExIGVtcHR5X2MxOiAuICBbXQorICAgMTIgZW1wdHlfYzI6IC4gIFtdCisgICAxMyBlbXB0eV9jMzogLiAgWydjJ10KKworICAgICdiJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxCisKKyAgICAnYycgICAgICAgcmVkdWNlIHVzaW5nIHJ1bGUgMTMgKGVtcHR5X2MzKQorICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgOSAoZW1wdHlfYSkKKworICAgIHN0YXJ0ICAgICBnbyB0byBzdGF0ZSAyCisgICAgZW1wdHlfYSAgIGdvIHRvIHN0YXRlIDMKKyAgICBlbXB0eV9iICAgZ28gdG8gc3RhdGUgNAorICAgIGVtcHR5X2MxICBnbyB0byBzdGF0ZSA1CisgICAgZW1wdHlfYzIgIGdvIHRvIHN0YXRlIDYKKyAgICBlbXB0eV9jMyAgZ28gdG8gc3RhdGUgNworCisgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlIDkgYW5kIHRva2VuICdhJyByZXNvbHZlZCBhcyByZWR1Y2UgKCVsZWZ0ICdhJykuCisgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlIDEwIGFuZCB0b2tlbiAnYicgcmVzb2x2ZWQgYXMgc2hpZnQgKCVyaWdodCAnYicpLgorICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAxMSBhbmQgdG9rZW4gJ2MnIHJlc29sdmVkIGFzIHNoaWZ0ICglcmlnaHQgJ2MnKS4KKyAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgMTIgYW5kIHRva2VuICdjJyByZXNvbHZlZCBhcyBzaGlmdCAoJXJpZ2h0ICdjJykuCisgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlIDEzIGFuZCB0b2tlbiAnYycgcmVzb2x2ZWQgYXMgcmVkdWNlICgnYycgPCAnZCcpLgorCisKK1N0YXRlIDEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMzAwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzE5NworI0FUX1NUQVJUXzE5OAorYXRfZm5fZ3JvdXBfYmFubmVyIDE5OCAnY29uZmxpY3RzLmF0OjEzNTMnIFwKKyAgIiVub25hc3NvYyBlcnJvciBhY3Rpb25zIGZvciBtdWx0aXBsZSByZWR1Y3Rpb25zIGluIGEgc3RhdGUiICIiIDEwCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTk4LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVub25hc3NvYyAnYScgJ2InICdjJworJSUKK3N0YXJ0OgorICAgICdhJworICB8IGVtcHR5X2EgJ2EnCisgIHwgJ2InCisgIHwgZW1wdHlfYiAnYicKKyAgfCAnYycKKyAgfCBlbXB0eV9jMSAnYycKKyAgfCBlbXB0eV9jMiAnYycKKyAgfCBlbXB0eV9jMyAnYycKKyAgOworZW1wdHlfYTogJXByZWMgJ2EnIDsKK2VtcHR5X2I6ICVwcmVjICdiJyA7CitlbXB0eV9jMTogJXByZWMgJ2MnIDsKK2VtcHR5X2MyOiAlcHJlYyAnYycgOworZW1wdHlfYzM6ICVwcmVjICdjJyA7CitfQVRFT0YKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMzc1OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1yZXBvcnQ9YWxsIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNvbmZsaWN0cy5hdDoxMzc1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tcmVwb3J0PWFsbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMzc1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEzNzU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tcmVwb3J0PWFsbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC1vIGlucHV0LmMgaW5wdXQueSIgImNvbmZsaWN0cy5hdDoxMzc1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tcmVwb3J0PWFsbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMzc1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMzc1OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjEzNzUiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEzNzUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTM3NTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNvbmZsaWN0cy5hdDoxMzc1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxMzc1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEzNzU6IGJpc29uIC0tcmVwb3J0PWFsbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjb25mbGljdHMuYXQ6MTM3NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtLXJlcG9ydD1hbGwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjEzNzUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTM3NjogY2F0IGlucHV0Lm91dHB1dCB8IHNlZCAtbiAnL15TdGF0ZSAwXCQvLC9eU3RhdGUgMVwkL3AnIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIHNoZWxsIHBpcGVsaW5lJyAiY29uZmxpY3RzLmF0OjEzNzYiCisoICRhdF9jaGVja190cmFjZTsgY2F0IGlucHV0Lm91dHB1dCB8IHNlZCAtbiAnL15TdGF0ZSAwJC8sL15TdGF0ZSAxJC9wJworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIlN0YXRlIDAKKworICAgIDAgXCRhY2NlcHQ6IC4gc3RhcnQgXCRlbmQKKyAgICAxIHN0YXJ0OiAuICdhJworICAgIDIgICAgICB8IC4gZW1wdHlfYSAnYScKKyAgICAzICAgICAgfCAuICdiJworICAgIDQgICAgICB8IC4gZW1wdHlfYiAnYicKKyAgICA1ICAgICAgfCAuICdjJworICAgIDYgICAgICB8IC4gZW1wdHlfYzEgJ2MnCisgICAgNyAgICAgIHwgLiBlbXB0eV9jMiAnYycKKyAgICA4ICAgICAgfCAuIGVtcHR5X2MzICdjJworICAgIDkgZW1wdHlfYTogLiAgW10KKyAgIDEwIGVtcHR5X2I6IC4gIFtdCisgICAxMSBlbXB0eV9jMTogLiAgW10KKyAgIDEyIGVtcHR5X2MyOiAuICBbJ2MnXQorICAgMTMgZW1wdHlfYzM6IC4gIFsnYyddCisKKyAgICAnYScgIGVycm9yIChub25hc3NvY2lhdGl2ZSkKKyAgICAnYicgIGVycm9yIChub25hc3NvY2lhdGl2ZSkKKyAgICAnYycgIGVycm9yIChub25hc3NvY2lhdGl2ZSkKKworICAgICdjJyAgW3JlZHVjZSB1c2luZyBydWxlIDEyIChlbXB0eV9jMildCisgICAgJ2MnICBbcmVkdWNlIHVzaW5nIHJ1bGUgMTMgKGVtcHR5X2MzKV0KKworICAgIHN0YXJ0ICAgICBnbyB0byBzdGF0ZSAxCisgICAgZW1wdHlfYSAgIGdvIHRvIHN0YXRlIDIKKyAgICBlbXB0eV9iICAgZ28gdG8gc3RhdGUgMworICAgIGVtcHR5X2MxICBnbyB0byBzdGF0ZSA0CisgICAgZW1wdHlfYzIgIGdvIHRvIHN0YXRlIDUKKyAgICBlbXB0eV9jMyAgZ28gdG8gc3RhdGUgNgorCisgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlIDkgYW5kIHRva2VuICdhJyByZXNvbHZlZCBhcyBhbiBlcnJvciAoJW5vbmFzc29jICdhJykuCisgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlIDEwIGFuZCB0b2tlbiAnYicgcmVzb2x2ZWQgYXMgYW4gZXJyb3IgKCVub25hc3NvYyAnYicpLgorICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAxMSBhbmQgdG9rZW4gJ2MnIHJlc29sdmVkIGFzIGFuIGVycm9yICglbm9uYXNzb2MgJ2MnKS4KKworCitTdGF0ZSAxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTM3NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMTk4CisjQVRfU1RBUlRfMTk5CithdF9mbl9ncm91cF9iYW5uZXIgMTk5ICdjb25mbGljdHMuYXQ6MTQyMicgXAorICAiLVcgdmVyc3VzICVleHBlY3QgYW5kICVleHBlY3QtcnIiICIgICAgICAgICAgICAgICAiIDEwCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMTk5LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworY2F0ID5zci1yci55IDw8J19BVEVPRicKKyVnbHItcGFyc2VyCislJQorc3RhcnQ6ICdhJyB8IEEgJ2EnIHwgQiAnYScgOworQTogOworQjogOworX0FURU9GCisKK2NhdCA+c3IueSA8PCdfQVRFT0YnCislZ2xyLXBhcnNlcgorJSUKK3N0YXJ0OiAnYScgfCBBICdhJyA7CitBOiA7CitfQVRFT0YKKworY2F0ID5yci55IDw8J19BVEVPRicKKyVnbHItcGFyc2VyCislJQorc3RhcnQ6IEEgfCBCIDsKK0E6IDsKK0I6IDsKK19BVEVPRgorCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0NDU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBzci1yci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY29uZmxpY3RzLmF0OjE0NDUiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3Qgc3ItcnIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0NDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTQ0NTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgc3ItcnIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBzci1yci55IiAiY29uZmxpY3RzLmF0OjE0NDUiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgc3ItcnIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0NDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0NDU6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6MTQ0NSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTQ0NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDQ1OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjE0NDUiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0NDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTQ0NTogYmlzb24gc3ItcnIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNvbmZsaWN0cy5hdDoxNDQ1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIHNyLXJyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzci1yci55OiBjb25mbGljdHM6IDEgc2hpZnQvcmVkdWNlLCAxIHJlZHVjZS9yZWR1Y2UKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDQ1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDQ4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLVduby1jb25mbGljdHMtc3Igc3ItcnIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNvbmZsaWN0cy5hdDoxNDQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1Xbm8tY29uZmxpY3RzLXNyIHNyLXJyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDQ4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0NDg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1Xbm8tY29uZmxpY3RzLXNyIHNyLXJyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLVduby1jb25mbGljdHMtc3Igc3ItcnIueSIgImNvbmZsaWN0cy5hdDoxNDQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1Xbm8tY29uZmxpY3RzLXNyIHNyLXJyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDQ4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDQ4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjE0NDgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0NDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTQ0ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNvbmZsaWN0cy5hdDoxNDQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDQ4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0NDg6IGJpc29uIC1Xbm8tY29uZmxpY3RzLXNyIHNyLXJyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjb25mbGljdHMuYXQ6MTQ0OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtV25vLWNvbmZsaWN0cy1zciBzci1yci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAic3ItcnIueTogY29uZmxpY3RzOiAxIHJlZHVjZS9yZWR1Y2UKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDQ4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDUxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLVduby1jb25mbGljdHMtcnIgc3ItcnIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNvbmZsaWN0cy5hdDoxNDUxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1Xbm8tY29uZmxpY3RzLXJyIHNyLXJyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0NTE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1Xbm8tY29uZmxpY3RzLXJyIHNyLXJyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLVduby1jb25mbGljdHMtcnIgc3ItcnIueSIgImNvbmZsaWN0cy5hdDoxNDUxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1Xbm8tY29uZmxpY3RzLXJyIHNyLXJyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDUxOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjE0NTEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTQ1MTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNvbmZsaWN0cy5hdDoxNDUxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0NTE6IGJpc29uIC1Xbm8tY29uZmxpY3RzLXJyIHNyLXJyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjb25mbGljdHMuYXQ6MTQ1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtV25vLWNvbmZsaWN0cy1yciBzci1yci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAic3ItcnIueTogY29uZmxpY3RzOiAxIHNoaWZ0L3JlZHVjZQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAorZm9yIGdyYW0gaW4gc3ItcnIgc3IgcnI7IGRvCisgIGZvciBzcl9leHBfaSBpbiAnJyAwIDEgMjsgZG8KKyAgICBmb3IgcnJfZXhwX2kgaW4gJycgMCAxIDI7IGRvCisgICAgICB0ZXN0IC16ICIkc3JfZXhwX2kiICYmIHRlc3QgLXogIiRycl9leHBfaSIgJiYgY29udGludWUKKworICAgICAgIyBCdWlsZCBncmFtbWFyIGZpbGUuCisgICAgICBzcl9leHA9MAorICAgICAgcnJfZXhwPTAKKyAgICAgIGZpbGU9JGdyYW0KKyAgICAgIGRpcmVjdGl2ZXM9CisgICAgICBpZiB0ZXN0IC1uICIkc3JfZXhwX2kiOyB0aGVuCisgICAgICAgIHNyX2V4cD0kc3JfZXhwX2kKKyAgICAgICAgZmlsZT0kZmlsZS1leHBlY3QtJHNyX2V4cAorICAgICAgICBkaXJlY3RpdmVzPSIlZXhwZWN0ICRzcl9leHAiCisgICAgICBmaQorICAgICAgaWYgdGVzdCAtbiAiJHJyX2V4cF9pIjsgdGhlbgorICAgICAgICBycl9leHA9JHJyX2V4cF9pCisgICAgICAgIGZpbGU9JGZpbGUtZXhwZWN0LXJyLSRycl9leHAKKyAgICAgICAgZGlyZWN0aXZlcz0iJGRpcmVjdGl2ZXMgJWV4cGVjdC1yciAkcnJfZXhwIgorICAgICAgZmkKKyAgICAgIGZpbGU9JGZpbGUueQorICAgICAgZWNobyAiJGRpcmVjdGl2ZXMiID4gJGZpbGUKKyAgICAgIGNhdCAkZ3JhbS55ID4+ICRmaWxlCisKKyAgICAgICMgQ291bnQgYWN0dWFsIGNvbmZsaWN0cy4KKyAgICAgIGNvbmZsaWN0cz0KKyAgICAgIHNyX2NvdW50PTAKKyAgICAgIHJyX2NvdW50PTAKKyAgICAgIGlmIHRlc3QgJGdyYW0gPSBzciB8fCB0ZXN0ICRncmFtID0gc3ItcnI7IHRoZW4KKyAgICAgICAgY29uZmxpY3RzPSIxIHNoaWZ0L3JlZHVjZSIKKyAgICAgICAgc3JfY291bnQ9MQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgJGdyYW0gPSByciB8fCB0ZXN0ICRncmFtID0gc3ItcnI7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAtbiAiJGNvbmZsaWN0cyI7IHRoZW4KKyAgICAgICAgICBjb25mbGljdHM9IiRjb25mbGljdHMsICIKKyAgICAgICAgZmkKKyAgICAgICAgY29uZmxpY3RzPSIke2NvbmZsaWN0c30xIHJlZHVjZS9yZWR1Y2UiCisgICAgICAgIHJyX2NvdW50PTEKKyAgICAgIGZpCisKKyAgICAgICMgUnVuIHRlc3RzLgorICAgICAgaWYgdGVzdCAkc3JfY291bnQgLWVxICRzcl9leHAgJiYgdGVzdCAkcnJfY291bnQgLWVxICRycl9leHA7IHRoZW4KKyAgICAgICAgaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTQ5NzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1Xbm9uZSBcJGZpbGUiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjb25mbGljdHMuYXQ6MTQ5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtV25vbmUgJGZpbGUKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0OTc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1Xbm9uZSBcJGZpbGUiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLVdub25lICRmaWxlIiAiY29uZmxpY3RzLmF0OjE0OTciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLVdub25lICRmaWxlCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTQ5NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTQ5NzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNvbmZsaWN0cy5hdDoxNDk3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0OTc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjb25mbGljdHMuYXQ6MTQ5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTQ5NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDk3OiBiaXNvbiAtV25vbmUgXCRmaWxlIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJiaXNvbiAtV25vbmUgJGZpbGUiICJjb25mbGljdHMuYXQ6MTQ5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtV25vbmUgJGZpbGUKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgICAgICAgaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTQ5ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1XZXJyb3IgXCRmaWxlIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY29uZmxpY3RzLmF0OjE0OTgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLVdlcnJvciAkZmlsZQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0OTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTQ5ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLVdlcnJvciBcJGZpbGUiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLVdlcnJvciAkZmlsZSIgImNvbmZsaWN0cy5hdDoxNDk4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1XZXJyb3IgJGZpbGUKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDk4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDk4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY29uZmxpY3RzLmF0OjE0OTgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0OTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTQ5ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNvbmZsaWN0cy5hdDoxNDk4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNDk4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE0OTg6IGJpc29uIC1XZXJyb3IgXCRmaWxlIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJiaXNvbiAtV2Vycm9yICRmaWxlIiAiY29uZmxpY3RzLmF0OjE0OTgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLVdlcnJvciAkZmlsZQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTQ5OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAgICAgZWxzZQorICAgICAgICBlY2hvICIkZmlsZTogY29uZmxpY3RzOiAkY29uZmxpY3RzIiA+IGV4cGVycgorICAgICAgICBpZiB0ZXN0ICRzcl9jb3VudCAtbmUgJHNyX2V4cDsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgJHNyX2V4cCAtbmUgMTsgdGhlbiBzPXM7IGVsc2Ugcz0gOyBmaQorICAgICAgICAgIGVjaG8gIiRmaWxlOiBlcnJvcjogZXhwZWN0ZWQgJHNyX2V4cCBzaGlmdC9yZWR1Y2UgY29uZmxpY3QkcyIgPj4gZXhwZXJyCisgICAgICAgIGZpCisgICAgICAgIGlmIHRlc3QgJHJyX2NvdW50IC1uZSAkcnJfZXhwOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAkcnJfZXhwIC1uZSAxOyB0aGVuIHM9czsgZWxzZSBzPSA7IGZpCisgICAgICAgICAgZWNobyAiJGZpbGU6IGVycm9yOiBleHBlY3RlZCAkcnJfZXhwIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3QkcyIgPj4gZXhwZXJyCisgICAgICAgIGZpCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTUwOTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtV25vbmUgXCRmaWxlIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLVdub25lICRmaWxlIiAiY29uZmxpY3RzLmF0OjE1MDkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtV25vbmUgJGZpbGUKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY29uZmxpY3RzLmF0OjE1MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NvbmZsaWN0cy5hdDoxNTEwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1XZXJyb3IgXCRmaWxlIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLVdlcnJvciAkZmlsZSIgImNvbmZsaWN0cy5hdDoxNTEwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLVdlcnJvciAkZmlsZQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorJGF0X2RpZmYgZXhwZXJyICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jb25mbGljdHMuYXQ6MTUxMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotIyBVc2luZyB5YWNjLmM/CisgICAgICBmaQorICAgIGRvbmUKKyAgZG9uZQorZG9uZQogCi0KLQotCi0KLQotCi0jIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmICVsb2NhdGlvbiAmICVwdXJlICYgKCVnbHIgb3IgJXBhcnNlLXBhcmFtKS4KLQotIyB5eWVycm9yIGFsd2F5cyBzZWVzIHRoZSBsb2NhdGlvbnMgKHdoZW4gYWN0aXZhdGVkKSwgZXhjZXB0IGlmCi0jIHlhY2MgJiBwdXJlICYgIXBhcmFtLgotCi0KLSMgVGhlIGludGVyZmFjZSBpcyBwdXJlOiBlaXRoZXIgYmVjYXVzZSAlcHVyZS1wYXJzZXIsIG9yIGJlY2F1c2Ugd2UKLSMgYXJlIHVzaW5nIHRoZSBDKysgcGFyc2Vycy4KLQotCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzE5OQorI0FUX1NUQVJUXzIwMAorYXRfZm5fZ3JvdXBfYmFubmVyIDIwMCAnY2FsYy5hdDo1OTcnIFwKKyAgIkNhbGN1bGF0b3IgIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAxMQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjIwMC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIApAQCAtMTA5NTUsNTkgKzU4NzM1LDUyIEBACiAKIAogY2F0ID5jYWxjLnkgPDwnX0FURU9GJwotJXsKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotICAvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KLSMgdW5kZWYgbWFsbG9jCi0jIHVuZGVmIG1lbWNtcAotIyB1bmRlZiByZWFsbG9jCi0jZW5kaWYKLSV9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCiAvKiBJbmZpeCBub3RhdGlvbiBjYWxjdWxhdG9yLS1jYWxjICovCiAKIAotJXsKLSNpbmNsdWRlIDxzdGRpby5oPgorJWNvZGUgcmVxdWlyZXMKK3sKIAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2lmIEhBVkVfVU5JU1REX0gKLSMgaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZWxzZQotIyB1bmRlZiBhbGFybQotIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KLSNlbmRpZgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jZGVmaW5lIFVTRShWYXIpCi0KLS8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCi10eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKLQotc3RhdGljIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOwotc3RhdGljIGludCBnbG9iYWxfY291bnQgPSAwOwotJX0KKyAgLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KKyAgdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Cit9CiAKIC8qIEV4ZXJjaXNlICV1bmlvbi4gKi8KICV1bmlvbgogewogICBzZW1hbnRpY192YWx1ZSBpdmFsOwogfTsKKyVwcmludGVyIHsgZnByaW50ZiAoeXlvdXRwdXQsICIlZCIsICQkKTsgfSA8aXZhbD47CiAKLSV7CislY29kZSBwcm92aWRlcworeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgLyogVGhlIGlucHV0LiAgKi8KKyAgZXh0ZXJuIEZJTEUgKmlucHV0OworICBleHRlcm4gc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdDsKKyAgZXh0ZXJuIGludCBnbG9iYWxfY291bnQ7Cit9CisKKyVjb2RlCit7CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZGVmaW5lIFVTRShWYXIpCisKK0ZJTEUgKmlucHV0Owogc3RhdGljIGludCBwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCk7Ci0vKiB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZjoKLSAgIC0gJWxvY2F0aW9uICYgJXB1cmUgJiAlZ2xyCi0gICAtICVsb2NhdGlvbiAmICVwdXJlICYgJXlhY2MgJiAlcGFyc2UtcGFyYW0uICovCi1zdGF0aWMgdm9pZCB5eWVycm9yICgKIAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcwotICAgICAgICAgICAgICAgICAgICAgKTsKLXN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOwotc3RhdGljIGludCBnZXRfY2hhciAodm9pZCk7Ci1zdGF0aWMgdm9pZCB1bmdldF9jaGFyICggaW50IGMpOwotJX0KK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworaW50IHl5bGV4ICh2b2lkKTsKK30KIAogCiAKQEAgLTExMDE2LDcgKzU4Nzg5LDcgQEAKICV0b2tlbiA8aXZhbD4gTlVNICJudW1iZXIiCiAldHlwZSAgPGl2YWw+IGV4cAogCi0lbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24JICAgICAgICovCislbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24gICAgICAgICAgICAqLwogJWxlZnQgJy0nICcrJwogJWxlZnQgJyonICcvJwogJWxlZnQgTkVHICAgICAvKiBuZWdhdGlvbi0tdW5hcnkgbWludXMgKi8KQEAgLTExMDQ5LDI1ICs1ODgyMiwzNiBAQAogfCAnLScgZXhwICAlcHJlYyBORUcgeyAkJCA9IC0kMjsgICAgICAgICAgICB9CiB8IGV4cCAnXicgZXhwICAgICAgICB7ICQkID0gcG93ZXIgKCQxLCAkMyk7IH0KIHwgJygnIGV4cCAnKScgICAgICAgIHsgJCQgPSAkMjsgICAgICAgICAgICAgfQotfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7ICAgICAgICAgICB9Cit8ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgeXllcnJvazsgIH0KIHwgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQogfCAnLScgZXJyb3IgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9CiA7CiAlJQotLyogVGhlIGlucHV0LiAgKi8KLXN0YXRpYyBGSUxFICppbnB1dDsKIAotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKAotCi0gICAgICAgICBjb25zdCBjaGFyICpzKQorc3RhdGljIGludAorcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpCiB7Ci0KLQotICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgcyk7CisgIGludCByZXMgPSAxOworICBhc3NlcnQgKDAgPD0gZXhwb25lbnQpOworICBmb3IgKC8qIE5pZW50ZSAqLzsgZXhwb25lbnQ7IC0tZXhwb25lbnQpCisgICAgcmVzICo9IGJhc2U7CisgIHJldHVybiByZXM7CiB9CiAKIAorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKyNpbmNsdWRlIDxjdHlwZS5oPgorCitpbnQgeXlsZXggKHZvaWQpOworc3RhdGljIGludCBnZXRfY2hhciAodm9pZCk7CitzdGF0aWMgdm9pZCB1bmdldF9jaGFyICggaW50IGMpOworCiAKIHN0YXRpYyBpbnQKIGdldF9jaGFyICh2b2lkKQpAQCAtMTEwNzgsNyArNTg4NjIsNiBAQAogICByZXR1cm4gcmVzOwogfQogCi0KIHN0YXRpYyB2b2lkCiB1bmdldF9jaGFyICggaW50IGMpCiB7CkBAIC0xMTExMywzMiArNTg4OTYsMjEgQEAKIH0KIAogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCBMZXhpY2FsIGFuYWx5emVyIHJldHVybnMgYW4gaW50ZWdlciBvbiB0aGUgc3RhY2sgYW5kIHRoZSB0b2tlbiB8CiB8IE5VTSwgb3IgdGhlIEFTQ0lJIGNoYXJhY3RlciByZWFkIGlmIG5vdCBhIG51bWJlci4gIFNraXBzIGFsbCAgIHwKIHwgYmxhbmtzIGFuZCB0YWJzLCByZXR1cm5zIDAgZm9yIEVPRi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQKLXl5bGV4ICh2b2lkKQoraW50IHl5bGV4ICh2b2lkKQogewotICBzdGF0aWMgaW50IGluaXQgPSAxOwogICBpbnQgYzsKLQotICBpZiAoaW5pdCkKLSAgICB7Ci0gICAgICBpbml0ID0gMDsKLQotICAgIH0KLQotCi0KLSAgLyogU2tpcCB3aGl0ZSBzcGFjZS4gICovCi0gIHdoaWxlICgoYyA9IGdldF9jaGFyICgpKSA9PSAnICcgfHwgYyA9PSAnXHQnKQorICAvKiBTa2lwIGN1cnJlbnQgdG9rZW4sIHRoZW4gd2hpdGUgc3BhY2VzLiAgKi8KKyAgZG8KICAgICB7CiAKICAgICB9CisgIHdoaWxlICgoYyA9IGdldF9jaGFyICgpKSA9PSAnICcgfHwgYyA9PSAnXHQnKTsKIAogICAvKiBwcm9jZXNzIG51bWJlcnMgICAqLwogICBpZiAoYyA9PSAnLicgfHwgaXNkaWdpdCAoYykpCkBAIC0xMTE1NiwxOCArNTg5MjgsMjAgQEAKICAgcmV0dXJuIGM7CiB9CiAKLXN0YXRpYyBpbnQKLXBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQotewotICBpbnQgcmVzID0gMTsKLSAgaWYgKGV4cG9uZW50IDwgMCkKLSAgICBleGl0ICgzKTsKLSAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQotICAgIHJlcyAqPSBiYXNlOwotICByZXR1cm4gcmVzOwotfQorI2luY2x1ZGUgPGFzc2VydC5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxzZQorIyB1bmRlZiBhbGFybQorIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KKyNlbmRpZgogCiAKKworc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7CitpbnQgZ2xvYmFsX2NvdW50ID0gMDsKKworLyogQSBDIG1haW4gZnVuY3Rpb24uICAqLwogaW50CiBtYWluIChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CkBAIC0xMTE5MywxMCArNTg5NjcsMTAgQEAKIAogCiAgIHN0YXR1cyA9IHl5cGFyc2UgKCk7Ci0gIGlmIChnbG9iYWxfcmVzdWx0ICE9IHJlc3VsdCkKLSAgICBhYm9ydCAoKTsKLSAgaWYgKGdsb2JhbF9jb3VudCAhPSBjb3VudCkKLSAgICBhYm9ydCAoKTsKKyAgaWYgKGZjbG9zZSAoaW5wdXQpKQorICAgIHBlcnJvciAoImZjbG9zZSIpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOwogICByZXR1cm4gc3RhdHVzOwogfQogX0FURU9GCkBAIC0xMTIwNSw1NSArNTg5NzksMTUxIEBACiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTUwOiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgotZWNobyBjYWxjLmF0OjU1MCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gY2FsYy5jIGNhbGMueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1MDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NTk3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueSIgImNhbGMuYXQ6NTk3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo1OTciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5NzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NTk3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTc6IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjU5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAotICAgJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MDogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBcJExJQlMiCi1lY2hvIGNhbGMuYXQ6NTUwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5NzogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImNhbGMuYXQ6NTk3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5NzogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUyIgImNhbGMuYXQ6NTk3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTc6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5jCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjU5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5jCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCiAKIAogIyBUZXN0IHRoZSBwcmlvcml0aWVzLgpAQCAtMTEyNzMsNjIgKzU5MTQzLDY2IEBACiAoMl4yKV4zID0gNjQKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTUwOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTUwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTc6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NTk3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo1OTciCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAKICMgU29tZSBzeW50YXggZXJyb3JzLgogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0wIDAKKzEgMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTA6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NTAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5NzogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo1OTciCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5Nzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjU5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMTEzMzksMTggKzU5MjEzLDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0xMTM2MCw2MCArNTkyMzYsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5NzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NTk3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMS8vMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTA6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NTAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5NzogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo1OTciCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5Nzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjU5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMTE0MjQsMTggKzU5MjkwLDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0xMTQ0NSw2MCArNTkzMTMsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5NzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NTk3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogZXJyb3IKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTUwOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTUwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTc6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NTk3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo1OTciCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTExNTA5LDE4ICs1OTM2NywyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0xMTUzMCw2MCArNTkzOTAsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5NzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NTk3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMSA9IDIgPSAzCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MDogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU1MCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1MDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk3OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjU5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NTk3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0xMTU5NCwxOCArNTk0NDQsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworMS43OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTExNjE1LDMwICs1OTQ2NywxOCBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTUwOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU1MCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk3OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo1OTciCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCkBAIC0xMTY0NiwzMCArNTk0ODYsMzIgQEAKICsxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MDogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU1MCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1MDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk3OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjU5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NTk3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0xMTY4MCwxOCArNTk1MjIsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTIuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTExNzAxLDU3ICs1OTU0NSw0NyBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTUwOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU1MCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk3OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo1OTciCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MDogXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKLWVjaG8gY2FsYy5hdDo1NTAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTc6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo1OTciCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo1OTciCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTExNzYyLDE4ICs1OTU5NiwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMTE3ODMsMzAgKzU5NjE5LDE4IEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTA6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTUwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1MDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTc6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjU5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKQEAgLTExODIxLDggKzU5NjQ1LDggQEAKICMKICMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCiAjCi0jIC0gY2hlY2sgdGhlIGxvb2stYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCi0jICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZQorIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCiAjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKICMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCiAjCkBAIC0xMTgzMCwzMCArNTk2NTQsMzIgQEAKICgpICsgKDEgKyAxICsgMSArKSArICgqICogKikgKyAoMSAqIDIgKiAqKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTUwOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTUwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTc6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NTk3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo1OTciCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTExODY0LDIxICs1OTY5MCwyMyBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjE3OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjIyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjQwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKIGNhbGM6IGVycm9yOiA0NDQ0ICE9IDEKIF9BVEVPRgogCkBAIC0xMTg4OSw2MyArNTk3MTcsNTMgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5NzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NTk3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAogIyBUaGUgc2FtZSwgYnV0IHRoaXMgdGltZSBleGVyY2lzaW5nIGV4cGxpY2l0bHkgdHJpZ2dlcmVkIHN5bnRheCBlcnJvcnMuCi0jIFBPU0lYIHNheXMgdGhlIGxvb2stYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCisjIFBPU0lYIHNheXMgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotKCEpICsgKDAgMCkgPSAxCisoISkgKyAoMSAyKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTUwOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTUwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTc6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NTk3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo1OTciCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTExOTU2LDE4ICs1OTc3NCwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS45OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCiBfQVRFT0YKIApAQCAtMTE5NzgsNjAgKzU5Nzk4LDUwIEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTA6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTUwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1MDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTc6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjU5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLSgtICopICsgKDAgMCkgPSAxCisoLSAqKSArICgxIDIpID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTA6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NTAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5NzogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo1OTciCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5Nzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjU5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMTIwNDIsMTkgKzU5ODUyLDIxIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogY2FsYzogZXJyb3I6IDIyMjIgIT0gMQogX0FURU9GCiAKQEAgLTEyMDY1LDk0ICs1OTg3NywxMTcgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTc6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjU5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQogCi0kYXRfdHJhY2VvbgorCisjIENoZWNrIHRoYXQgeXllcnJvayB3b3JrcyBwcm9wZXJseTogc2Vjb25kIGVycm9yIGlzIG5vdCByZXBvcnRlZCwKKyMgdGhpcmQgYW5kIGZvdXJ0aCBhcmUuICBQYXJzZSBzdGF0dXMgaXMgc3VjY2VzZnVsbC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCogKikgKyAoKikgKyAoKikKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTc6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NTk3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo1OTciCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE2OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KK3NlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk3OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo1OTciCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICA3MSApICMgNzEuIGNhbGMuYXQ6NTUyOiBDYWxjdWxhdG9yICVkZWZpbmVzCi0gICAgYXRfc2V0dXBfbGluZT0nY2FsYy5hdDo1NTInCi0gICAgYXRfZGVzYz0nQ2FsY3VsYXRvciAlZGVmaW5lcycKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDcxOiBDYWxjdWxhdG9yICVkZWZpbmVzICAgICAgICAgICAgICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiNzEuIGNhbGMuYXQ6NTUyOiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCi0KLQotCi0KLQotCi0KLQotIyBVc2luZyB5YWNjLmM/Ci0KLQotCi0KLQotCi0KLSMgeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWYgJWxvY2F0aW9uICYgJXB1cmUgJiAoJWdsciBvciAlcGFyc2UtcGFyYW0pLgotCi0jIHl5ZXJyb3IgYWx3YXlzIHNlZXMgdGhlIGxvY2F0aW9ucyAod2hlbiBhY3RpdmF0ZWQpLCBleGNlcHQgaWYKLSMgeWFjYyAmIHB1cmUgJiAhcGFyYW0uCi0KLQotIyBUaGUgaW50ZXJmYWNlIGlzIHB1cmU6IGVpdGhlciBiZWNhdXNlICVwdXJlLXBhcnNlciwgb3IgYmVjYXVzZSB3ZQotIyBhcmUgdXNpbmcgdGhlIEMrKyBwYXJzZXJzLgotCi0KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjAwCisjQVRfU1RBUlRfMjAxCithdF9mbl9ncm91cF9iYW5uZXIgMjAxICdjYWxjLmF0OjU5OScgXAorICAiQ2FsY3VsYXRvciAlZGVmaW5lcyIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDExCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjAxLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogCkBAIC0xMjE2NCw1OSArNTk5OTksNTIgQEAKIAogCiBjYXQgPmNhbGMueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKIC8qIEluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3ItLWNhbGMgKi8KICVkZWZpbmVzCiAKLSV7Ci0jaW5jbHVkZSA8c3RkaW8uaD4KKyVjb2RlIHJlcXVpcmVzCit7CiAKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpZiBIQVZFX1VOSVNURF9ICi0jIGluY2x1ZGUgPHVuaXN0ZC5oPgotI2Vsc2UKLSMgdW5kZWYgYWxhcm0KLSMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCi0jZW5kaWYKLSNpbmNsdWRlIDxjdHlwZS5oPgotI2RlZmluZSBVU0UoVmFyKQotCi0vKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLwotdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Ci0KLXN0YXRpYyBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKLXN0YXRpYyBpbnQgZ2xvYmFsX2NvdW50ID0gMDsKLSV9CisgIC8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCisgIHR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOworfQogCiAvKiBFeGVyY2lzZSAldW5pb24uICovCiAldW5pb24KIHsKICAgc2VtYW50aWNfdmFsdWUgaXZhbDsKIH07CislcHJpbnRlciB7IGZwcmludGYgKHl5b3V0cHV0LCAiJWQiLCAkJCk7IH0gPGl2YWw+OwogCi0leworJWNvZGUgcHJvdmlkZXMKK3sKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIC8qIFRoZSBpbnB1dC4gICovCisgIGV4dGVybiBGSUxFICppbnB1dDsKKyAgZXh0ZXJuIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQ7CisgIGV4dGVybiBpbnQgZ2xvYmFsX2NvdW50OworfQorCislY29kZQoreworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2RlZmluZSBVU0UoVmFyKQorCitGSUxFICppbnB1dDsKIHN0YXRpYyBpbnQgcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpOwotLyogeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWY6Ci0gICAtICVsb2NhdGlvbiAmICVwdXJlICYgJWdscgotICAgLSAlbG9jYXRpb24gJiAlcHVyZSAmICV5YWNjICYgJXBhcnNlLXBhcmFtLiAqLwotc3RhdGljIHZvaWQgeXllcnJvciAoCiAKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMKLSAgICAgICAgICAgICAgICAgICAgICk7Ci1zdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKLXN0YXRpYyBpbnQgZ2V0X2NoYXIgKHZvaWQpOwotc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoIGludCBjKTsKLSV9CitzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKK2ludCB5eWxleCAodm9pZCk7Cit9CiAKIAogCkBAIC0xMjIyNSw3ICs2MDA1Myw3IEBACiAldG9rZW4gPGl2YWw+IE5VTSAibnVtYmVyIgogJXR5cGUgIDxpdmFsPiBleHAKIAotJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uCSAgICAgICAqLworJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uICAgICAgICAgICAgKi8KICVsZWZ0ICctJyAnKycKICVsZWZ0ICcqJyAnLycKICVsZWZ0IE5FRyAgICAgLyogbmVnYXRpb24tLXVuYXJ5IG1pbnVzICovCkBAIC0xMjI1OCwyNSArNjAwODYsNDkgQEAKIHwgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSAtJDI7ICAgICAgICAgICAgfQogfCBleHAgJ14nIGV4cCAgICAgICAgeyAkJCA9IHBvd2VyICgkMSwgJDMpOyB9CiB8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgIH0KLXwgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyAgICAgICAgICAgfQorfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7IHl5ZXJyb2s7ICB9CiB8ICchJyAgICAgICAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KIHwgJy0nIGVycm9yICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQogOwogJSUKLS8qIFRoZSBpbnB1dC4gICovCi1zdGF0aWMgRklMRSAqaW5wdXQ7CiAKLXN0YXRpYyB2b2lkCi15eWVycm9yICgKLQotICAgICAgICAgY29uc3QgY2hhciAqcykKK3N0YXRpYyBpbnQKK3Bvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQogewotCi0KLSAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIHMpOworICBpbnQgcmVzID0gMTsKKyAgYXNzZXJ0ICgwIDw9IGV4cG9uZW50KTsKKyAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQorICAgIHJlcyAqPSBiYXNlOworICByZXR1cm4gcmVzOwogfQogCiAKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CitfQVRFT0YKKworCisKK2NhdCA+Y2FsYy1sZXguYyA8PCdfQVRFT0YnCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCisKKyNpbmNsdWRlICJjYWxjLmgiCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCitpbnQgeXlsZXggKHZvaWQpOworc3RhdGljIGludCBnZXRfY2hhciAodm9pZCk7CitzdGF0aWMgdm9pZCB1bmdldF9jaGFyICggaW50IGMpOworCiAKIHN0YXRpYyBpbnQKIGdldF9jaGFyICh2b2lkKQpAQCAtMTIyODcsNyArNjAxMzksNiBAQAogICByZXR1cm4gcmVzOwogfQogCi0KIHN0YXRpYyB2b2lkCiB1bmdldF9jaGFyICggaW50IGMpCiB7CkBAIC0xMjMyMiwzMiArNjAxNzMsMjEgQEAKIH0KIAogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCBMZXhpY2FsIGFuYWx5emVyIHJldHVybnMgYW4gaW50ZWdlciBvbiB0aGUgc3RhY2sgYW5kIHRoZSB0b2tlbiB8CiB8IE5VTSwgb3IgdGhlIEFTQ0lJIGNoYXJhY3RlciByZWFkIGlmIG5vdCBhIG51bWJlci4gIFNraXBzIGFsbCAgIHwKIHwgYmxhbmtzIGFuZCB0YWJzLCByZXR1cm5zIDAgZm9yIEVPRi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQKLXl5bGV4ICh2b2lkKQoraW50IHl5bGV4ICh2b2lkKQogewotICBzdGF0aWMgaW50IGluaXQgPSAxOwogICBpbnQgYzsKLQotICBpZiAoaW5pdCkKLSAgICB7Ci0gICAgICBpbml0ID0gMDsKLQotICAgIH0KLQotCi0KLSAgLyogU2tpcCB3aGl0ZSBzcGFjZS4gICovCi0gIHdoaWxlICgoYyA9IGdldF9jaGFyICgpKSA9PSAnICcgfHwgYyA9PSAnXHQnKQorICAvKiBTa2lwIGN1cnJlbnQgdG9rZW4sIHRoZW4gd2hpdGUgc3BhY2VzLiAgKi8KKyAgZG8KICAgICB7CiAKICAgICB9CisgIHdoaWxlICgoYyA9IGdldF9jaGFyICgpKSA9PSAnICcgfHwgYyA9PSAnXHQnKTsKIAogICAvKiBwcm9jZXNzIG51bWJlcnMgICAqLwogICBpZiAoYyA9PSAnLicgfHwgaXNkaWdpdCAoYykpCkBAIC0xMjM2NCwxOSArNjAyMDQsMzIgQEAKICAgLyogUmV0dXJuIHNpbmdsZSBjaGFycy4gKi8KICAgcmV0dXJuIGM7CiB9Ci0KLXN0YXRpYyBpbnQKLXBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQotewotICBpbnQgcmVzID0gMTsKLSAgaWYgKGV4cG9uZW50IDwgMCkKLSAgICBleGl0ICgzKTsKLSAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQotICAgIHJlcyAqPSBiYXNlOwotICByZXR1cm4gcmVzOwotfQorX0FURU9GCiAKIAorY2F0ID5jYWxjLW1haW4uYyA8PCdfQVRFT0YnCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCisKKyNpbmNsdWRlICJjYWxjLmgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2Vsc2UKKyMgdW5kZWYgYWxhcm0KKyMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCisjZW5kaWYKKworCisKK3NlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOworaW50IGdsb2JhbF9jb3VudCA9IDA7CisKKy8qIEEgQyBtYWluIGZ1bmN0aW9uLiAgKi8KIGludAogbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewpAQCAtMTI0MDIsMTAgKzYwMjU1LDEwIEBACiAKIAogICBzdGF0dXMgPSB5eXBhcnNlICgpOwotICBpZiAoZ2xvYmFsX3Jlc3VsdCAhPSByZXN1bHQpCi0gICAgYWJvcnQgKCk7Ci0gIGlmIChnbG9iYWxfY291bnQgIT0gY291bnQpCi0gICAgYWJvcnQgKCk7CisgIGlmIChmY2xvc2UgKGlucHV0KSkKKyAgICBwZXJyb3IgKCJmY2xvc2UiKTsKKyAgYXNzZXJ0IChnbG9iYWxfcmVzdWx0ID09IHJlc3VsdCk7CisgIGFzc2VydCAoZ2xvYmFsX2NvdW50ID09IGNvdW50KTsKICAgcmV0dXJuIHN0YXR1czsKIH0KIF9BVEVPRgpAQCAtMTI0MTQsNTUgKzYwMjY3LDE3OCBAQAogCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MjogYmlzb24gLW8gY2FsYy5jIGNhbGMueSIKLWVjaG8gY2FsYy5hdDo1NTIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo1OTkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5OTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55IiAiY2FsYy5hdDo1OTkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjU5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo1OTkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5OTogYmlzb24gLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NTk5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCi0gICAkYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTUyOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jIFwkTElCUyIKLWVjaG8gY2FsYy5hdDo1NTIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1MjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgorICAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk5OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiY2FsYy5hdDo1OTkiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk5OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jIGNhbGMtbGV4LmMgY2FsYy1tYWluLmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgY2FsYy1sZXguYyBjYWxjLW1haW4uYyAkTElCUyIgImNhbGMuYXQ6NTk5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBjYWxjLWxleC5jIGNhbGMtbWFpbi5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5OTogXCRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCBcIlwkLjoge1wkX31cXG5cIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCBcJC4gPT0gMSkgJiYgL15cXHMqXCQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciBcIm1haW50XCIuCisgICAgICAgICMgfHwgL1xcc1wkLworICAgICAgICApJyBjYWxjLmMKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NTk5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmMKKworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5OTogXCRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCBcIlwkLjoge1wkX31cXG5cIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCBcJC4gPT0gMSkgJiYgL15cXHMqXCQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciBcIm1haW50XCIuCisgICAgICAgICMgfHwgL1xcc1wkLworICAgICAgICApJyBjYWxjLmgKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NTk5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmgKKworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogIyBUZXN0IHRoZSBwcmlvcml0aWVzLgpAQCAtMTI0ODIsNjIgKzYwNDU4LDY2IEBACiAoMl4yKV4zID0gNjQKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTUyOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTUyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NTk5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo1OTkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAKICMgU29tZSBzeW50YXggZXJyb3JzLgogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0wIDAKKzEgMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTI6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NTIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5OTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo1OTkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5OTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjU5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMTI1NDgsMTggKzYwNTI4LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0xMjU2OSw2MCArNjA1NTEsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5OTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NTk5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMS8vMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTI6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NTIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5OTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo1OTkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5OTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjU5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMTI2MzMsMTggKzYwNjA1LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0xMjY1NCw2MCArNjA2MjgsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5OTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NTk5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogZXJyb3IKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTUyOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTUyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NTk5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo1OTkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTEyNzE4LDE4ICs2MDY4MiwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0xMjczOSw2MCArNjA3MDUsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5OTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NTk5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMSA9IDIgPSAzCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MjogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU1MiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1MjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjU5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NTk5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0xMjgwMywxOCArNjA3NTksMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworMS43OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTEyODI0LDMwICs2MDc4MiwxOCBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTUyOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU1MiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo1OTkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCkBAIC0xMjg1NSwzMCArNjA4MDEsMzIgQEAKICsxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MjogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU1MiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1MjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjU5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NTk5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0xMjg4OSwxOCArNjA4MzcsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTIuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTEyOTEwLDU3ICs2MDg2MCw0NyBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTUyOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU1MiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo1OTkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MjogXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKLWVjaG8gY2FsYy5hdDo1NTIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo1OTkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo1OTkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTEyOTcxLDE4ICs2MDkxMSwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMTI5OTIsMzAgKzYwOTM0LDE4IEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTI6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTUyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1MjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjU5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKQEAgLTEzMDMwLDggKzYwOTYwLDggQEAKICMKICMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCiAjCi0jIC0gY2hlY2sgdGhlIGxvb2stYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCi0jICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZQorIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCiAjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKICMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCiAjCkBAIC0xMzAzOSwzMCArNjA5NjksMzIgQEAKICgpICsgKDEgKyAxICsgMSArKSArICgqICogKikgKyAoMSAqIDIgKiAqKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTUyOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTUyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NTk5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo1OTkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTEzMDczLDIxICs2MTAwNSwyMyBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjE3OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjIyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjQwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKIGNhbGM6IGVycm9yOiA0NDQ0ICE9IDEKIF9BVEVPRgogCkBAIC0xMzA5OCw2MyArNjEwMzIsNTMgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5OTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NTk5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAogIyBUaGUgc2FtZSwgYnV0IHRoaXMgdGltZSBleGVyY2lzaW5nIGV4cGxpY2l0bHkgdHJpZ2dlcmVkIHN5bnRheCBlcnJvcnMuCi0jIFBPU0lYIHNheXMgdGhlIGxvb2stYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCisjIFBPU0lYIHNheXMgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotKCEpICsgKDAgMCkgPSAxCisoISkgKyAoMSAyKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTUyOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTUyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NTk5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo1OTkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTEzMTY1LDE4ICs2MTA4OSwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS45OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCiBfQVRFT0YKIApAQCAtMTMxODcsNjAgKzYxMTEzLDUwIEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTI6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTUyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1MjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjU5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLSgtICopICsgKDAgMCkgPSAxCisoLSAqKSArICgxIDIpID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTI6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NTIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5OTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo1OTkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5OTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjU5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMTMyNTEsMTkgKzYxMTY3LDIxIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogY2FsYzogZXJyb3I6IDIyMjIgIT0gMQogX0FURU9GCiAKQEAgLTEzMjc0LDk0ICs2MTE5MiwxMTcgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjU5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQogCi0kYXRfdHJhY2VvbgorCisjIENoZWNrIHRoYXQgeXllcnJvayB3b3JrcyBwcm9wZXJseTogc2Vjb25kIGVycm9yIGlzIG5vdCByZXBvcnRlZCwKKyMgdGhpcmQgYW5kIGZvdXJ0aCBhcmUuICBQYXJzZSBzdGF0dXMgaXMgc3VjY2VzZnVsbC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCogKikgKyAoKikgKyAoKikKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NTk5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo1OTk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo1OTkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE2OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KK3NlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NTk5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo1OTkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjU5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICA3MiApICMgNzIuIGNhbGMuYXQ6NTUzOiBDYWxjdWxhdG9yICVsb2NhdGlvbnMKLSAgICBhdF9zZXR1cF9saW5lPSdjYWxjLmF0OjU1MycKLSAgICBhdF9kZXNjPSdDYWxjdWxhdG9yICVsb2NhdGlvbnMnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiA3MjogQ2FsY3VsYXRvciAlbG9jYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjcyLiBjYWxjLmF0OjU1MzogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgotCi0KLQotCi0KLQotCi0KLSMgVXNpbmcgeWFjYy5jPwotCi0KLQotCi0KLQotCi0jIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmICVsb2NhdGlvbiAmICVwdXJlICYgKCVnbHIgb3IgJXBhcnNlLXBhcmFtKS4KLQotIyB5eWVycm9yIGFsd2F5cyBzZWVzIHRoZSBsb2NhdGlvbnMgKHdoZW4gYWN0aXZhdGVkKSwgZXhjZXB0IGlmCi0jIHlhY2MgJiBwdXJlICYgIXBhcmFtLgotCi0KLSMgVGhlIGludGVyZmFjZSBpcyBwdXJlOiBlaXRoZXIgYmVjYXVzZSAlcHVyZS1wYXJzZXIsIG9yIGJlY2F1c2Ugd2UKLSMgYXJlIHVzaW5nIHRoZSBDKysgcGFyc2Vycy4KLQotCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzIwMQorI0FUX1NUQVJUXzIwMgorYXRfZm5fZ3JvdXBfYmFubmVyIDIwMiAnY2FsYy5hdDo2MDAnIFwKKyAgIkNhbGN1bGF0b3IgJWxvY2F0aW9ucyIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIiAxMQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjIwMi4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIApAQCAtMTMzNzMsNTkgKzYxMzE0LDUyIEBACiAKIAogY2F0ID5jYWxjLnkgPDwnX0FURU9GJwotJXsKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotICAvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KLSMgdW5kZWYgbWFsbG9jCi0jIHVuZGVmIG1lbWNtcAotIyB1bmRlZiByZWFsbG9jCi0jZW5kaWYKLSV9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCiAvKiBJbmZpeCBub3RhdGlvbiBjYWxjdWxhdG9yLS1jYWxjICovCiAlbG9jYXRpb25zCiAKLSV7Ci0jaW5jbHVkZSA8c3RkaW8uaD4KKyVjb2RlIHJlcXVpcmVzCit7CiAKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpZiBIQVZFX1VOSVNURF9ICi0jIGluY2x1ZGUgPHVuaXN0ZC5oPgotI2Vsc2UKLSMgdW5kZWYgYWxhcm0KLSMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCi0jZW5kaWYKLSNpbmNsdWRlIDxjdHlwZS5oPgotI2RlZmluZSBVU0UoVmFyKQotCi0vKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLwotdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Ci0KLXN0YXRpYyBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKLXN0YXRpYyBpbnQgZ2xvYmFsX2NvdW50ID0gMDsKLSV9CisgIC8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCisgIHR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOworfQogCiAvKiBFeGVyY2lzZSAldW5pb24uICovCiAldW5pb24KIHsKICAgc2VtYW50aWNfdmFsdWUgaXZhbDsKIH07CislcHJpbnRlciB7IGZwcmludGYgKHl5b3V0cHV0LCAiJWQiLCAkJCk7IH0gPGl2YWw+OwogCi0leworJWNvZGUgcHJvdmlkZXMKK3sKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIC8qIFRoZSBpbnB1dC4gICovCisgIGV4dGVybiBGSUxFICppbnB1dDsKKyAgZXh0ZXJuIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQ7CisgIGV4dGVybiBpbnQgZ2xvYmFsX2NvdW50OworfQorCislY29kZQoreworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2RlZmluZSBVU0UoVmFyKQorCitGSUxFICppbnB1dDsKIHN0YXRpYyBpbnQgcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpOwotLyogeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWY6Ci0gICAtICVsb2NhdGlvbiAmICVwdXJlICYgJWdscgotICAgLSAlbG9jYXRpb24gJiAlcHVyZSAmICV5YWNjICYgJXBhcnNlLXBhcmFtLiAqLwotc3RhdGljIHZvaWQgeXllcnJvciAoCiAKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMKLSAgICAgICAgICAgICAgICAgICAgICk7Ci1zdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKLXN0YXRpYyBpbnQgZ2V0X2NoYXIgKHZvaWQpOwotc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoIGludCBjKTsKLSV9CitzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKK2ludCB5eWxleCAodm9pZCk7Cit9CiAKIAogCkBAIC0xMzQzNCw3ICs2MTM2OCw3IEBACiAldG9rZW4gPGl2YWw+IE5VTSAibnVtYmVyIgogJXR5cGUgIDxpdmFsPiBleHAKIAotJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uCSAgICAgICAqLworJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uICAgICAgICAgICAgKi8KICVsZWZ0ICctJyAnKycKICVsZWZ0ICcqJyAnLycKICVsZWZ0IE5FRyAgICAgLyogbmVnYXRpb24tLXVuYXJ5IG1pbnVzICovCkBAIC0xMzQ2NywzNCArNjE0MDEsMzggQEAKIHwgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSAtJDI7ICAgICAgICAgICAgfQogfCBleHAgJ14nIGV4cCAgICAgICAgeyAkJCA9IHBvd2VyICgkMSwgJDMpOyB9CiB8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgIH0KLXwgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyAgICAgICAgICAgfQorfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7IHl5ZXJyb2s7ICB9CiB8ICchJyAgICAgICAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KIHwgJy0nIGVycm9yICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQogOwogJSUKLS8qIFRoZSBpbnB1dC4gICovCi1zdGF0aWMgRklMRSAqaW5wdXQ7CiAKLXN0YXRpYyB2b2lkCi15eWVycm9yICgKLQotICAgICAgICAgY29uc3QgY2hhciAqcykKK3N0YXRpYyBpbnQKK3Bvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQogewotCi0KLSAgZnByaW50ZiAoc3RkZXJyLCAiJWQuJWQiLAotICAgICAgICAgICAoeXlsbG9jKS5maXJzdF9saW5lLCAoeXlsbG9jKS5maXJzdF9jb2x1bW4pOwotICBpZiAoKHl5bGxvYykuZmlyc3RfbGluZSAhPSAoeXlsbG9jKS5sYXN0X2xpbmUpCi0gICAgZnByaW50ZiAoc3RkZXJyLCAiLSVkLiVkIiwKLQkgICAgICh5eWxsb2MpLmxhc3RfbGluZSwgICh5eWxsb2MpLmxhc3RfY29sdW1uIC0gMSk7Ci0gIGVsc2UgaWYgKCh5eWxsb2MpLmZpcnN0X2NvbHVtbiAhPSAoeXlsbG9jKS5sYXN0X2NvbHVtbiAtIDEpCi0gICAgZnByaW50ZiAoc3RkZXJyLCAiLSVkIiwKLQkgICAgICh5eWxsb2MpLmxhc3RfY29sdW1uIC0gMSk7Ci0gIGZwcmludGYgKHN0ZGVyciwgIjogIik7Ci0gIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBzKTsKKyAgaW50IHJlcyA9IDE7CisgIGFzc2VydCAoMCA8PSBleHBvbmVudCk7CisgIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKKyAgICByZXMgKj0gYmFzZTsKKyAgcmV0dXJuIHJlczsKIH0KIAogCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIFlZX0xPQ0FUSU9OX1BSSU5UIChzdGRlcnIsICh5eWxsb2MpKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiOiAiKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworaW50IHl5bGV4ICh2b2lkKTsKK3N0YXRpYyBpbnQgZ2V0X2NoYXIgKHZvaWQpOworc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoIGludCBjKTsKKwogCiBzdGF0aWMgWVlMVFlQRSBsYXN0X3l5bGxvYzsKIApAQCAtMTM1MDgsNyArNjE0NDYsNyBAQAogICBpZiAocmVzID09ICdcbicpCiAgICAgewogICAgICAgKHl5bGxvYykubGFzdF9saW5lKys7Ci0gICAgICAoeXlsbG9jKS5sYXN0X2NvbHVtbiA9IDA7CisgICAgICAoeXlsbG9jKS5sYXN0X2NvbHVtbiA9IDE7CiAgICAgfQogICBlbHNlCiAgICAgKHl5bGxvYykubGFzdF9jb2x1bW4rKzsKQEAgLTEzNTE2LDcgKzYxNDU0LDYgQEAKICAgcmV0dXJuIHJlczsKIH0KIAotCiBzdGF0aWMgdm9pZAogdW5nZXRfY2hhciAoIGludCBjKQogewpAQCAtMTM1NTQsNDAgKzYxNDkxLDIzIEBACiB9CiAKIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgTGV4aWNhbCBhbmFseXplciByZXR1cm5zIGFuIGludGVnZXIgb24gdGhlIHN0YWNrIGFuZCB0aGUgdG9rZW4gfAogfCBOVU0sIG9yIHRoZSBBU0NJSSBjaGFyYWN0ZXIgcmVhZCBpZiBub3QgYSBudW1iZXIuICBTa2lwcyBhbGwgICB8CiB8IGJsYW5rcyBhbmQgdGFicywgcmV0dXJucyAwIGZvciBFT0YuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50Ci15eWxleCAodm9pZCkKK2ludCB5eWxleCAodm9pZCkKIHsKLSAgc3RhdGljIGludCBpbml0ID0gMTsKICAgaW50IGM7Ci0KLSAgaWYgKGluaXQpCi0gICAgewotICAgICAgaW5pdCA9IDA7Ci0KLSAgICAgICh5eWxsb2MpLmxhc3RfY29sdW1uID0gMDsKLSAgICAgICh5eWxsb2MpLmxhc3RfbGluZSA9IDE7Ci0KLSAgICB9Ci0KLQotICh5eWxsb2MpLmZpcnN0X2NvbHVtbiA9ICh5eWxsb2MpLmxhc3RfY29sdW1uOwotICAoeXlsbG9jKS5maXJzdF9saW5lICAgPSAoeXlsbG9jKS5sYXN0X2xpbmU7Ci0KLQotICAvKiBTa2lwIHdoaXRlIHNwYWNlLiAgKi8KLSAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKCkpID09ICcgJyB8fCBjID09ICdcdCcpCisgIC8qIFNraXAgY3VycmVudCB0b2tlbiwgdGhlbiB3aGl0ZSBzcGFjZXMuICAqLworICBkbwogICAgIHsKICAgICAgKHl5bGxvYykuZmlyc3RfY29sdW1uID0gKHl5bGxvYykubGFzdF9jb2x1bW47CiAgICAgICAoeXlsbG9jKS5maXJzdF9saW5lICAgPSAoeXlsbG9jKS5sYXN0X2xpbmU7CiAKICAgICB9CisgIHdoaWxlICgoYyA9IGdldF9jaGFyICgpKSA9PSAnICcgfHwgYyA9PSAnXHQnKTsKIAogICAvKiBwcm9jZXNzIG51bWJlcnMgICAqLwogICBpZiAoYyA9PSAnLicgfHwgaXNkaWdpdCAoYykpCkBAIC0xMzYwNSwxOCArNjE1MjUsMjAgQEAKICAgcmV0dXJuIGM7CiB9CiAKLXN0YXRpYyBpbnQKLXBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQotewotICBpbnQgcmVzID0gMTsKLSAgaWYgKGV4cG9uZW50IDwgMCkKLSAgICBleGl0ICgzKTsKLSAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQotICAgIHJlcyAqPSBiYXNlOwotICByZXR1cm4gcmVzOwotfQorI2luY2x1ZGUgPGFzc2VydC5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxzZQorIyB1bmRlZiBhbGFybQorIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KKyNlbmRpZgogCiAKKworc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7CitpbnQgZ2xvYmFsX2NvdW50ID0gMDsKKworLyogQSBDIG1haW4gZnVuY3Rpb24uICAqLwogaW50CiBtYWluIChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CkBAIC0xMzY0MiwxMCArNjE1NjQsMTAgQEAKIAogCiAgIHN0YXR1cyA9IHl5cGFyc2UgKCk7Ci0gIGlmIChnbG9iYWxfcmVzdWx0ICE9IHJlc3VsdCkKLSAgICBhYm9ydCAoKTsKLSAgaWYgKGdsb2JhbF9jb3VudCAhPSBjb3VudCkKLSAgICBhYm9ydCAoKTsKKyAgaWYgKGZjbG9zZSAoaW5wdXQpKQorICAgIHBlcnJvciAoImZjbG9zZSIpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOwogICByZXR1cm4gc3RhdHVzOwogfQogX0FURU9GCkBAIC0xMzY1NCw1NSArNjE1NzYsMTUxIEBACiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTUzOiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgotZWNobyBjYWxjLmF0OjU1MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gY2FsYy5jIGNhbGMueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjAwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueSIgImNhbGMuYXQ6NjAwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2MDAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjAwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDA6IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAotICAgJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MzogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBcJExJQlMiCi1lY2hvIGNhbGMuYXQ6NTUzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMDogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImNhbGMuYXQ6NjAwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMDogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUyIgImNhbGMuYXQ6NjAwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDA6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5jCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjYwMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5jCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCiAKIAogIyBUZXN0IHRoZSBwcmlvcml0aWVzLgpAQCAtMTM3MjIsNjIgKzYxNzQwLDY2IEBACiAoMl4yKV4zID0gNjQKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTUzOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTUzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDA6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjAwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAKICMgU29tZSBzeW50YXggZXJyb3JzLgogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0wIDAKKzEgMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTM6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NTMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MDAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMTM3ODgsMTggKzYxODEwLDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0xMzgwOCw2MCArNjE4MzIsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MzogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjAwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMS8vMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTM6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NTMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MDAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMTM4NzIsMTggKzYxODg2LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0xMzg5Miw2MCArNjE5MDgsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MzogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjAwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogZXJyb3IKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTUzOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTUzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDA6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjAwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTEzOTU2LDE4ICs2MTk2MiwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0xMzk3Niw2MCArNjE5ODQsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MzogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjAwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMSA9IDIgPSAzCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MzogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU1MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAwOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYwMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAwOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjAwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0xNDA0MCwxOCArNjIwMzgsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworMS43OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTE0MDYwLDMwICs2MjA2MCwxOCBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTUzOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU1MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCkBAIC0xNDA5MSwzMCArNjIwNzksMzIgQEAKICsxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MzogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU1MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAwOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYwMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAwOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjAwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0xNDEyNSwxOCArNjIxMTUsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTIuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTE0MTQ1LDU3ICs2MjEzNyw0NyBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTUzOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU1MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MzogXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKLWVjaG8gY2FsYy5hdDo1NTMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDA6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo2MDAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTE0MjA2LDE4ICs2MjE4OCwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMTQyMjYsMzAgKzYyMjEwLDE4IEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTM6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTUzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKQEAgLTE0MjY0LDggKzYyMjM2LDggQEAKICMKICMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCiAjCi0jIC0gY2hlY2sgdGhlIGxvb2stYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCi0jICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZQorIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCiAjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKICMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCiAjCkBAIC0xNDI3MywzMCArNjIyNDUsMzIgQEAKICgpICsgKDEgKyAxICsgMSArKSArICgqICogKikgKyAoMSAqIDIgKiAqKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTUzOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTUzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDA6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjAwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTE0MzA3LDIxICs2MjI4MSwyMyBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjE3OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjIyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjQwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKIGNhbGM6IGVycm9yOiA0NDQ0ICE9IDEKIF9BVEVPRgogCkBAIC0xNDMzMSw2MyArNjIzMDcsNTMgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MzogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjAwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAogIyBUaGUgc2FtZSwgYnV0IHRoaXMgdGltZSBleGVyY2lzaW5nIGV4cGxpY2l0bHkgdHJpZ2dlcmVkIHN5bnRheCBlcnJvcnMuCi0jIFBPU0lYIHNheXMgdGhlIGxvb2stYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCisjIFBPU0lYIHNheXMgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotKCEpICsgKDAgMCkgPSAxCisoISkgKyAoMSAyKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTUzOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTUzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDA6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjAwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTE0Mzk4LDE4ICs2MjM2NCwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS45OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCiBfQVRFT0YKIApAQCAtMTQ0MTksNjAgKzYyMzg3LDUwIEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTM6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTUzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLSgtICopICsgKDAgMCkgPSAxCisoLSAqKSArICgxIDIpID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTM6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NTMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MDAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMTQ0ODMsMTkgKzYyNDQxLDIxIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogY2FsYzogZXJyb3I6IDIyMjIgIT0gMQogX0FURU9GCiAKQEAgLTE0NTA1LDk0ICs2MjQ2NSwxMTYgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1MzogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTUzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQogCi0kYXRfdHJhY2VvbgorCisjIENoZWNrIHRoYXQgeXllcnJvayB3b3JrcyBwcm9wZXJseTogc2Vjb25kIGVycm9yIGlzIG5vdCByZXBvcnRlZCwKKyMgdGhpcmQgYW5kIGZvdXJ0aCBhcmUuICBQYXJzZSBzdGF0dXMgaXMgc3VjY2VzZnVsbC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCogKikgKyAoKikgKyAoKikKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDA6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjAwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE2OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICA3MyApICMgNzMuIGNhbGMuYXQ6NTU0OiBDYWxjdWxhdG9yICVuYW1lLXByZWZpeD0iY2FsYyIKLSAgICBhdF9zZXR1cF9saW5lPSdjYWxjLmF0OjU1NCcKLSAgICBhdF9kZXNjPSdDYWxjdWxhdG9yICVuYW1lLXByZWZpeD0iY2FsYyInCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiA3MzogQ2FsY3VsYXRvciAlbmFtZS1wcmVmaXg9ImNhbGMiICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjczLiBjYWxjLmF0OjU1NDogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgotCi0KLQotCi0KLQotCi0KLSMgVXNpbmcgeWFjYy5jPwotCi0KLQotCi0KLQotCi0jIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmICVsb2NhdGlvbiAmICVwdXJlICYgKCVnbHIgb3IgJXBhcnNlLXBhcmFtKS4KLQotIyB5eWVycm9yIGFsd2F5cyBzZWVzIHRoZSBsb2NhdGlvbnMgKHdoZW4gYWN0aXZhdGVkKSwgZXhjZXB0IGlmCi0jIHlhY2MgJiBwdXJlICYgIXBhcmFtLgotCi0KLSMgVGhlIGludGVyZmFjZSBpcyBwdXJlOiBlaXRoZXIgYmVjYXVzZSAlcHVyZS1wYXJzZXIsIG9yIGJlY2F1c2Ugd2UKLSMgYXJlIHVzaW5nIHRoZSBDKysgcGFyc2Vycy4KLQotCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzIwMgorI0FUX1NUQVJUXzIwMworYXRfZm5fZ3JvdXBfYmFubmVyIDIwMyAnY2FsYy5hdDo2MDInIFwKKyAgIkNhbGN1bGF0b3IgJW5hbWUtcHJlZml4PVwiY2FsY1wiIiAiICAgICAgICAgICAgICAgICAiIDExCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjAzLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogCkBAIC0xNDYwNCw1OSArNjI1ODYsNTIgQEAKIAogCiBjYXQgPmNhbGMueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKIC8qIEluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3ItLWNhbGMgKi8KICVuYW1lLXByZWZpeD0iY2FsYyIKIAotJXsKLSNpbmNsdWRlIDxzdGRpby5oPgorJWNvZGUgcmVxdWlyZXMKK3sKIAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2lmIEhBVkVfVU5JU1REX0gKLSMgaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZWxzZQotIyB1bmRlZiBhbGFybQotIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KLSNlbmRpZgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jZGVmaW5lIFVTRShWYXIpCi0KLS8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCi10eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKLQotc3RhdGljIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOwotc3RhdGljIGludCBnbG9iYWxfY291bnQgPSAwOwotJX0KKyAgLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KKyAgdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Cit9CiAKIC8qIEV4ZXJjaXNlICV1bmlvbi4gKi8KICV1bmlvbgogewogICBzZW1hbnRpY192YWx1ZSBpdmFsOwogfTsKKyVwcmludGVyIHsgZnByaW50ZiAoeXlvdXRwdXQsICIlZCIsICQkKTsgfSA8aXZhbD47CiAKLSV7CislY29kZSBwcm92aWRlcworeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgLyogVGhlIGlucHV0LiAgKi8KKyAgZXh0ZXJuIEZJTEUgKmlucHV0OworICBleHRlcm4gc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdDsKKyAgZXh0ZXJuIGludCBnbG9iYWxfY291bnQ7Cit9CisKKyVjb2RlCit7CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZGVmaW5lIFVTRShWYXIpCisKK0ZJTEUgKmlucHV0Owogc3RhdGljIGludCBwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCk7Ci0vKiB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZjoKLSAgIC0gJWxvY2F0aW9uICYgJXB1cmUgJiAlZ2xyCi0gICAtICVsb2NhdGlvbiAmICVwdXJlICYgJXlhY2MgJiAlcGFyc2UtcGFyYW0uICovCi1zdGF0aWMgdm9pZCB5eWVycm9yICgKIAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcwotICAgICAgICAgICAgICAgICAgICAgKTsKLXN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOwotc3RhdGljIGludCBnZXRfY2hhciAodm9pZCk7Ci1zdGF0aWMgdm9pZCB1bmdldF9jaGFyICggaW50IGMpOwotJX0KK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworaW50IHl5bGV4ICh2b2lkKTsKK30KIAogCiAKQEAgLTE0NjY1LDcgKzYyNjQwLDcgQEAKICV0b2tlbiA8aXZhbD4gTlVNICJudW1iZXIiCiAldHlwZSAgPGl2YWw+IGV4cAogCi0lbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24JICAgICAgICovCislbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24gICAgICAgICAgICAqLwogJWxlZnQgJy0nICcrJwogJWxlZnQgJyonICcvJwogJWxlZnQgTkVHICAgICAvKiBuZWdhdGlvbi0tdW5hcnkgbWludXMgKi8KQEAgLTE0Njk4LDI1ICs2MjY3MywzNiBAQAogfCAnLScgZXhwICAlcHJlYyBORUcgeyAkJCA9IC0kMjsgICAgICAgICAgICB9CiB8IGV4cCAnXicgZXhwICAgICAgICB7ICQkID0gcG93ZXIgKCQxLCAkMyk7IH0KIHwgJygnIGV4cCAnKScgICAgICAgIHsgJCQgPSAkMjsgICAgICAgICAgICAgfQotfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7ICAgICAgICAgICB9Cit8ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgeXllcnJvazsgIH0KIHwgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQogfCAnLScgZXJyb3IgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9CiA7CiAlJQotLyogVGhlIGlucHV0LiAgKi8KLXN0YXRpYyBGSUxFICppbnB1dDsKIAotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKAotCi0gICAgICAgICBjb25zdCBjaGFyICpzKQorc3RhdGljIGludAorcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpCiB7Ci0KLQotICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgcyk7CisgIGludCByZXMgPSAxOworICBhc3NlcnQgKDAgPD0gZXhwb25lbnQpOworICBmb3IgKC8qIE5pZW50ZSAqLzsgZXhwb25lbnQ7IC0tZXhwb25lbnQpCisgICAgcmVzICo9IGJhc2U7CisgIHJldHVybiByZXM7CiB9CiAKIAorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKyNpbmNsdWRlIDxjdHlwZS5oPgorCitpbnQgeXlsZXggKHZvaWQpOworc3RhdGljIGludCBnZXRfY2hhciAodm9pZCk7CitzdGF0aWMgdm9pZCB1bmdldF9jaGFyICggaW50IGMpOworCiAKIHN0YXRpYyBpbnQKIGdldF9jaGFyICh2b2lkKQpAQCAtMTQ3MjcsNyArNjI3MTMsNiBAQAogICByZXR1cm4gcmVzOwogfQogCi0KIHN0YXRpYyB2b2lkCiB1bmdldF9jaGFyICggaW50IGMpCiB7CkBAIC0xNDc2MiwzMiArNjI3NDcsMjEgQEAKIH0KIAogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCBMZXhpY2FsIGFuYWx5emVyIHJldHVybnMgYW4gaW50ZWdlciBvbiB0aGUgc3RhY2sgYW5kIHRoZSB0b2tlbiB8CiB8IE5VTSwgb3IgdGhlIEFTQ0lJIGNoYXJhY3RlciByZWFkIGlmIG5vdCBhIG51bWJlci4gIFNraXBzIGFsbCAgIHwKIHwgYmxhbmtzIGFuZCB0YWJzLCByZXR1cm5zIDAgZm9yIEVPRi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQKLXl5bGV4ICh2b2lkKQoraW50IHl5bGV4ICh2b2lkKQogewotICBzdGF0aWMgaW50IGluaXQgPSAxOwogICBpbnQgYzsKLQotICBpZiAoaW5pdCkKLSAgICB7Ci0gICAgICBpbml0ID0gMDsKLQotICAgIH0KLQotCi0KLSAgLyogU2tpcCB3aGl0ZSBzcGFjZS4gICovCi0gIHdoaWxlICgoYyA9IGdldF9jaGFyICgpKSA9PSAnICcgfHwgYyA9PSAnXHQnKQorICAvKiBTa2lwIGN1cnJlbnQgdG9rZW4sIHRoZW4gd2hpdGUgc3BhY2VzLiAgKi8KKyAgZG8KICAgICB7CiAKICAgICB9CisgIHdoaWxlICgoYyA9IGdldF9jaGFyICgpKSA9PSAnICcgfHwgYyA9PSAnXHQnKTsKIAogICAvKiBwcm9jZXNzIG51bWJlcnMgICAqLwogICBpZiAoYyA9PSAnLicgfHwgaXNkaWdpdCAoYykpCkBAIC0xNDgwNSwxOCArNjI3NzksMjAgQEAKICAgcmV0dXJuIGM7CiB9CiAKLXN0YXRpYyBpbnQKLXBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQotewotICBpbnQgcmVzID0gMTsKLSAgaWYgKGV4cG9uZW50IDwgMCkKLSAgICBleGl0ICgzKTsKLSAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQotICAgIHJlcyAqPSBiYXNlOwotICByZXR1cm4gcmVzOwotfQorI2luY2x1ZGUgPGFzc2VydC5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxzZQorIyB1bmRlZiBhbGFybQorIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KKyNlbmRpZgogCiAKKworc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7CitpbnQgZ2xvYmFsX2NvdW50ID0gMDsKKworLyogQSBDIG1haW4gZnVuY3Rpb24uICAqLwogaW50CiBtYWluIChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CkBAIC0xNDg0MiwxMCArNjI4MTgsMTAgQEAKIAogCiAgIHN0YXR1cyA9IHl5cGFyc2UgKCk7Ci0gIGlmIChnbG9iYWxfcmVzdWx0ICE9IHJlc3VsdCkKLSAgICBhYm9ydCAoKTsKLSAgaWYgKGdsb2JhbF9jb3VudCAhPSBjb3VudCkKLSAgICBhYm9ydCAoKTsKKyAgaWYgKGZjbG9zZSAoaW5wdXQpKQorICAgIHBlcnJvciAoImZjbG9zZSIpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOwogICByZXR1cm4gc3RhdHVzOwogfQogX0FURU9GCkBAIC0xNDg1NCw1NSArNjI4MzAsMTUxIEBACiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU0OiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgotZWNobyBjYWxjLmF0OjU1NCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gY2FsYy5jIGNhbGMueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAyOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjAyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueSIgImNhbGMuYXQ6NjAyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAyOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2MDIiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjAyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDI6IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAotICAgJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NDogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBcJExJQlMiCi1lY2hvIGNhbGMuYXQ6NTU0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMjogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImNhbGMuYXQ6NjAyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMjogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUyIgImNhbGMuYXQ6NjAyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDI6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5jCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjYwMiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5jCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCiAKIAogIyBUZXN0IHRoZSBwcmlvcml0aWVzLgpAQCAtMTQ5MjIsNjIgKzYyOTk0LDY2IEBACiAoMl4yKV4zID0gNjQKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU0OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTU0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDI6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjAyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDIiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAKICMgU29tZSBzeW50YXggZXJyb3JzLgogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0wIDAKKzEgMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTQ6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NTQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMjogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MDIiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMTQ5ODgsMTggKzYzMDY0LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0xNTAwOSw2MCArNjMwODcsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMjogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjAyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMS8vMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTQ6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NTQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMjogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MDIiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMTUwNzMsMTggKzYzMTQxLDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0xNTA5NCw2MCArNjMxNjQsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMjogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjAyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogZXJyb3IKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU0OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTU0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDI6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjAyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDIiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTE1MTU4LDE4ICs2MzIxOCwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0xNTE3OSw2MCArNjMyNDEsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMjogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjAyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMSA9IDIgPSAzCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NDogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU1NCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAyOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYwMiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAyOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjAyIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0xNTI0MywxOCArNjMyOTUsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworMS43OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTE1MjY0LDMwICs2MzMxOCwxOCBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU0OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU1NCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAyOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDIiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCkBAIC0xNTI5NSwzMCArNjMzMzcsMzIgQEAKICsxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NDogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU1NCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAyOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYwMiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAyOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjAyIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0xNTMyOSwxOCArNjMzNzMsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTIuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTE1MzUwLDU3ICs2MzM5Niw0NyBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU0OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU1NCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAyOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDIiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NDogXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKLWVjaG8gY2FsYy5hdDo1NTQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDI6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo2MDIiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDIiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTE1NDExLDE4ICs2MzQ0NywyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMTU0MzIsMzAgKzYzNDcwLDE4IEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTQ6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTU0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDI6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKQEAgLTE1NDcwLDggKzYzNDk2LDggQEAKICMKICMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCiAjCi0jIC0gY2hlY2sgdGhlIGxvb2stYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCi0jICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZQorIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCiAjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKICMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCiAjCkBAIC0xNTQ3OSwzMCArNjM1MDUsMzIgQEAKICgpICsgKDEgKyAxICsgMSArKSArICgqICogKikgKyAoMSAqIDIgKiAqKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU0OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTU0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDI6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjAyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDIiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTE1NTEzLDIxICs2MzU0MSwyMyBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjE3OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjIyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjQwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKIGNhbGM6IGVycm9yOiA0NDQ0ICE9IDEKIF9BVEVPRgogCkBAIC0xNTUzOCw2MyArNjM1NjgsNTMgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMjogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjAyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAogIyBUaGUgc2FtZSwgYnV0IHRoaXMgdGltZSBleGVyY2lzaW5nIGV4cGxpY2l0bHkgdHJpZ2dlcmVkIHN5bnRheCBlcnJvcnMuCi0jIFBPU0lYIHNheXMgdGhlIGxvb2stYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCisjIFBPU0lYIHNheXMgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotKCEpICsgKDAgMCkgPSAxCisoISkgKyAoMSAyKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU0OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTU0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDI6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjAyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDIiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTE1NjA1LDE4ICs2MzYyNSwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS45OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCiBfQVRFT0YKIApAQCAtMTU2MjcsNjAgKzYzNjQ5LDUwIEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTQ6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTU0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDI6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLSgtICopICsgKDAgMCkgPSAxCisoLSAqKSArICgxIDIpID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTQ6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NTQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMjogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MDIiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMTU2OTEsMTkgKzYzNzAzLDIxIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogY2FsYzogZXJyb3I6IDIyMjIgIT0gMQogX0FURU9GCiAKQEAgLTE1NzE0LDk0ICs2MzcyOCwxMTcgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDI6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQogCi0kYXRfdHJhY2VvbgorCisjIENoZWNrIHRoYXQgeXllcnJvayB3b3JrcyBwcm9wZXJseTogc2Vjb25kIGVycm9yIGlzIG5vdCByZXBvcnRlZCwKKyMgdGhpcmQgYW5kIGZvdXJ0aCBhcmUuICBQYXJzZSBzdGF0dXMgaXMgc3VjY2VzZnVsbC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCogKikgKyAoKikgKyAoKikKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDI6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjAyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDIiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE2OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KK3NlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAyOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDIiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICA3NCApICMgNzQuIGNhbGMuYXQ6NTU1OiBDYWxjdWxhdG9yICV2ZXJib3NlCi0gICAgYXRfc2V0dXBfbGluZT0nY2FsYy5hdDo1NTUnCi0gICAgYXRfZGVzYz0nQ2FsY3VsYXRvciAldmVyYm9zZScKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDc0OiBDYWxjdWxhdG9yICV2ZXJib3NlICAgICAgICAgICAgICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiNzQuIGNhbGMuYXQ6NTU1OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCi0KLQotCi0KLQotCi0KLQotIyBVc2luZyB5YWNjLmM/Ci0KLQotCi0KLQotCi0KLSMgeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWYgJWxvY2F0aW9uICYgJXB1cmUgJiAoJWdsciBvciAlcGFyc2UtcGFyYW0pLgotCi0jIHl5ZXJyb3IgYWx3YXlzIHNlZXMgdGhlIGxvY2F0aW9ucyAod2hlbiBhY3RpdmF0ZWQpLCBleGNlcHQgaWYKLSMgeWFjYyAmIHB1cmUgJiAhcGFyYW0uCi0KLQotIyBUaGUgaW50ZXJmYWNlIGlzIHB1cmU6IGVpdGhlciBiZWNhdXNlICVwdXJlLXBhcnNlciwgb3IgYmVjYXVzZSB3ZQotIyBhcmUgdXNpbmcgdGhlIEMrKyBwYXJzZXJzLgotCi0KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjAzCisjQVRfU1RBUlRfMjA0CithdF9mbl9ncm91cF9iYW5uZXIgMjA0ICdjYWxjLmF0OjYwMycgXAorICAiQ2FsY3VsYXRvciAldmVyYm9zZSIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDExCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjA0LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogCkBAIC0xNTgxMyw1OSArNjM4NTAsNTIgQEAKIAogCiBjYXQgPmNhbGMueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKIC8qIEluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3ItLWNhbGMgKi8KICV2ZXJib3NlCiAKLSV7Ci0jaW5jbHVkZSA8c3RkaW8uaD4KKyVjb2RlIHJlcXVpcmVzCit7CiAKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpZiBIQVZFX1VOSVNURF9ICi0jIGluY2x1ZGUgPHVuaXN0ZC5oPgotI2Vsc2UKLSMgdW5kZWYgYWxhcm0KLSMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCi0jZW5kaWYKLSNpbmNsdWRlIDxjdHlwZS5oPgotI2RlZmluZSBVU0UoVmFyKQotCi0vKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLwotdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Ci0KLXN0YXRpYyBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKLXN0YXRpYyBpbnQgZ2xvYmFsX2NvdW50ID0gMDsKLSV9CisgIC8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCisgIHR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOworfQogCiAvKiBFeGVyY2lzZSAldW5pb24uICovCiAldW5pb24KIHsKICAgc2VtYW50aWNfdmFsdWUgaXZhbDsKIH07CislcHJpbnRlciB7IGZwcmludGYgKHl5b3V0cHV0LCAiJWQiLCAkJCk7IH0gPGl2YWw+OwogCi0leworJWNvZGUgcHJvdmlkZXMKK3sKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIC8qIFRoZSBpbnB1dC4gICovCisgIGV4dGVybiBGSUxFICppbnB1dDsKKyAgZXh0ZXJuIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQ7CisgIGV4dGVybiBpbnQgZ2xvYmFsX2NvdW50OworfQorCislY29kZQoreworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2RlZmluZSBVU0UoVmFyKQorCitGSUxFICppbnB1dDsKIHN0YXRpYyBpbnQgcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpOwotLyogeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWY6Ci0gICAtICVsb2NhdGlvbiAmICVwdXJlICYgJWdscgotICAgLSAlbG9jYXRpb24gJiAlcHVyZSAmICV5YWNjICYgJXBhcnNlLXBhcmFtLiAqLwotc3RhdGljIHZvaWQgeXllcnJvciAoCiAKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMKLSAgICAgICAgICAgICAgICAgICAgICk7Ci1zdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKLXN0YXRpYyBpbnQgZ2V0X2NoYXIgKHZvaWQpOwotc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoIGludCBjKTsKLSV9CitzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKK2ludCB5eWxleCAodm9pZCk7Cit9CiAKIAogCkBAIC0xNTg3NCw3ICs2MzkwNCw3IEBACiAldG9rZW4gPGl2YWw+IE5VTSAibnVtYmVyIgogJXR5cGUgIDxpdmFsPiBleHAKIAotJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uCSAgICAgICAqLworJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uICAgICAgICAgICAgKi8KICVsZWZ0ICctJyAnKycKICVsZWZ0ICcqJyAnLycKICVsZWZ0IE5FRyAgICAgLyogbmVnYXRpb24tLXVuYXJ5IG1pbnVzICovCkBAIC0xNTkwNywyNSArNjM5MzcsMzYgQEAKIHwgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSAtJDI7ICAgICAgICAgICAgfQogfCBleHAgJ14nIGV4cCAgICAgICAgeyAkJCA9IHBvd2VyICgkMSwgJDMpOyB9CiB8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgIH0KLXwgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyAgICAgICAgICAgfQorfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7IHl5ZXJyb2s7ICB9CiB8ICchJyAgICAgICAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KIHwgJy0nIGVycm9yICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQogOwogJSUKLS8qIFRoZSBpbnB1dC4gICovCi1zdGF0aWMgRklMRSAqaW5wdXQ7CiAKLXN0YXRpYyB2b2lkCi15eWVycm9yICgKLQotICAgICAgICAgY29uc3QgY2hhciAqcykKK3N0YXRpYyBpbnQKK3Bvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQogewotCi0KLSAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIHMpOworICBpbnQgcmVzID0gMTsKKyAgYXNzZXJ0ICgwIDw9IGV4cG9uZW50KTsKKyAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQorICAgIHJlcyAqPSBiYXNlOworICByZXR1cm4gcmVzOwogfQogCiAKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworaW50IHl5bGV4ICh2b2lkKTsKK3N0YXRpYyBpbnQgZ2V0X2NoYXIgKHZvaWQpOworc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoIGludCBjKTsKKwogCiBzdGF0aWMgaW50CiBnZXRfY2hhciAodm9pZCkKQEAgLTE1OTM2LDcgKzYzOTc3LDYgQEAKICAgcmV0dXJuIHJlczsKIH0KIAotCiBzdGF0aWMgdm9pZAogdW5nZXRfY2hhciAoIGludCBjKQogewpAQCAtMTU5NzEsMzIgKzY0MDExLDIxIEBACiB9CiAKIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgTGV4aWNhbCBhbmFseXplciByZXR1cm5zIGFuIGludGVnZXIgb24gdGhlIHN0YWNrIGFuZCB0aGUgdG9rZW4gfAogfCBOVU0sIG9yIHRoZSBBU0NJSSBjaGFyYWN0ZXIgcmVhZCBpZiBub3QgYSBudW1iZXIuICBTa2lwcyBhbGwgICB8CiB8IGJsYW5rcyBhbmQgdGFicywgcmV0dXJucyAwIGZvciBFT0YuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50Ci15eWxleCAodm9pZCkKK2ludCB5eWxleCAodm9pZCkKIHsKLSAgc3RhdGljIGludCBpbml0ID0gMTsKICAgaW50IGM7Ci0KLSAgaWYgKGluaXQpCi0gICAgewotICAgICAgaW5pdCA9IDA7Ci0KLSAgICB9Ci0KLQotCi0gIC8qIFNraXAgd2hpdGUgc3BhY2UuICAqLwotICB3aGlsZSAoKGMgPSBnZXRfY2hhciAoKSkgPT0gJyAnIHx8IGMgPT0gJ1x0JykKKyAgLyogU2tpcCBjdXJyZW50IHRva2VuLCB0aGVuIHdoaXRlIHNwYWNlcy4gICovCisgIGRvCiAgICAgewogCiAgICAgfQorICB3aGlsZSAoKGMgPSBnZXRfY2hhciAoKSkgPT0gJyAnIHx8IGMgPT0gJ1x0Jyk7CiAKICAgLyogcHJvY2VzcyBudW1iZXJzICAgKi8KICAgaWYgKGMgPT0gJy4nIHx8IGlzZGlnaXQgKGMpKQpAQCAtMTYwMTQsMTggKzY0MDQzLDIwIEBACiAgIHJldHVybiBjOwogfQogCi1zdGF0aWMgaW50Ci1wb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKLXsKLSAgaW50IHJlcyA9IDE7Ci0gIGlmIChleHBvbmVudCA8IDApCi0gICAgZXhpdCAoMyk7Ci0gIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKLSAgICByZXMgKj0gYmFzZTsKLSAgcmV0dXJuIHJlczsKLX0KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2Vsc2UKKyMgdW5kZWYgYWxhcm0KKyMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCisjZW5kaWYKIAogCisKK3NlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOworaW50IGdsb2JhbF9jb3VudCA9IDA7CisKKy8qIEEgQyBtYWluIGZ1bmN0aW9uLiAgKi8KIGludAogbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewpAQCAtMTYwNTEsMTAgKzY0MDgyLDEwIEBACiAKIAogICBzdGF0dXMgPSB5eXBhcnNlICgpOwotICBpZiAoZ2xvYmFsX3Jlc3VsdCAhPSByZXN1bHQpCi0gICAgYWJvcnQgKCk7Ci0gIGlmIChnbG9iYWxfY291bnQgIT0gY291bnQpCi0gICAgYWJvcnQgKCk7CisgIGlmIChmY2xvc2UgKGlucHV0KSkKKyAgICBwZXJyb3IgKCJmY2xvc2UiKTsKKyAgYXNzZXJ0IChnbG9iYWxfcmVzdWx0ID09IHJlc3VsdCk7CisgIGFzc2VydCAoZ2xvYmFsX2NvdW50ID09IGNvdW50KTsKICAgcmV0dXJuIHN0YXR1czsKIH0KIF9BVEVPRgpAQCAtMTYwNjMsNTUgKzY0MDk0LDE1MSBAQAogCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NTogYmlzb24gLW8gY2FsYy5jIGNhbGMueSIKLWVjaG8gY2FsYy5hdDo1NTUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjYwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiICJjYWxjLmF0OjYwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjAzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjYwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzOiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDMiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSAgICRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTU6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgXCRMSUJTIgotZWNobyBjYWxjLmF0OjU1NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jICRMSUJTICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisgICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDM6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJjYWxjLmF0OjYwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDM6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgJExJQlMiICJjYWxjLmF0OjYwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzOiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuYworIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2MDMiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuYworCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKwogCiAKICMgVGVzdCB0aGUgcHJpb3JpdGllcy4KQEAgLTE2MTMxLDYyICs2NDI1OCw2NiBAQAogKDJeMileMyA9IDY0CiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU1NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogCiAjIFNvbWUgc3ludGF4IGVycm9ycy4KIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotMCAwCisxIDIKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU1OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTU1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDM6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjAzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTE2MTk3LDE4ICs2NDMyOCwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMTYyMTgsNjAgKzY0MzUxLDUwIEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTU6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTU1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDM6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKIDEvLzIKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU1OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTU1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDM6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjAzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTE2MjgyLDE4ICs2NDQwNSwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJy8nLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMTYzMDMsNjAgKzY0NDI4LDUwIEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTU6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTU1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDM6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKIGVycm9yCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU1NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0xNjM2NywxOCArNjQ0ODIsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICR1bmRlZmluZWQKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICR1bmRlZmluZWQKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMTYzODgsNjAgKzY0NTA1LDUwIEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTU6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTU1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDM6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKIDEgPSAyID0gMwogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTU6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NTUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMzogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MDMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMTY0NTIsMTggKzY0NTU5LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjY6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPScKKzEuNzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0xNjQ3MywzMCArNjQ1ODIsMTggQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwpAQCAtMTY1MDQsMzAgKzY0NjAxLDMyIEBACiArMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTU6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NTUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMzogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MDMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMTY1MzgsMTggKzY0NjM3LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0yLjA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKycKKzIuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0xNjU1OSw1NyArNjQ2NjAsNDcgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKICMgRXhlcmNpc2UgZXJyb3IgbWVzc2FnZXMgd2l0aCBFT0Y6IHdvcmsgb24gYW4gZW1wdHkgZmlsZS4KLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTU6IFwkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiCi1lY2hvIGNhbGMuYXQ6NTU1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzOiAgXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIgImNhbGMuYXQ6NjAzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0xNjYyMCwxOCArNjQ3MTEsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTE2NjQxLDMwICs2NDczNCwxOCBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU1OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU1NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDMiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCkBAIC0xNjY3OSw4ICs2NDc2MCw4IEBACiAjCiAjIC0gdGVzdCB0aGUgYWN0aW9uIGFzc29jaWF0ZWQgdG8gYGVycm9yJwogIwotIyAtIGNoZWNrIHRoZSBsb29rLWFoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAotIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2stYWhlYWQgY2F1c2luZyB0aGUKKyMgLSBjaGVjayB0aGUgbG9va2FoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAorIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZQogIyAgIGZpcnN0IGVycm9yIGlzICIpIiwgd2hpY2ggaXMgbmVlZGVkIHRvIHJlY292ZXIgZnJvbSB0aGUgZXJyb3IgYW5kCiAjICAgcHJvZHVjZSB0aGUgIjAiIHRoYXQgdHJpZ2dlcnMgdGhlICIwICE9IDEiIGVycm9yLgogIwpAQCAtMTY2ODgsMzAgKzY0NzY5LDMyIEBACiAoKSArICgxICsgMSArIDEgKykgKyAoKiAqICopICsgKDEgKiAyICogKikgPSAxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU1NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0xNjcyMiwyMSArNjQ4MDUsMjMgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwotMS4xNzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwotMS4yMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwotMS40MDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjIzOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjQxOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCiBjYWxjOiBlcnJvcjogNDQ0NCAhPSAxCiBfQVRFT0YKIApAQCAtMTY3NDcsNjMgKzY0ODMyLDUzIEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTU6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTU1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDM6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKICMgVGhlIHNhbWUsIGJ1dCB0aGlzIHRpbWUgZXhlcmNpc2luZyBleHBsaWNpdGx5IHRyaWdnZXJlZCBzeW50YXggZXJyb3JzLgotIyBQT1NJWCBzYXlzIHRoZSBsb29rLWFoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgorIyBQT1NJWCBzYXlzIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLSghKSArICgwIDApID0gMQorKCEpICsgKDEgMikgPSAxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU1NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0xNjgxNCwxOCArNjQ4ODksMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuOTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS4xMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogY2FsYzogZXJyb3I6IDIyMjIgIT0gMQogX0FURU9GCiAKQEAgLTE2ODM2LDYwICs2NDkxMyw1MCBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU1OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU1NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDMiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0oLSAqKSArICgwIDApID0gMQorKC0gKikgKyAoMSAyKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU1OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTU1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDM6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjAzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTE2OTAwLDE5ICs2NDk2NywyMSBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjExOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjQ6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKIGNhbGM6IGVycm9yOiAyMjIyICE9IDEKIF9BVEVPRgogCkBAIC0xNjkyMyw5NCArNjQ5OTIsMTE3IEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTU6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTU1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDMiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKIAotJGF0X3RyYWNlb24KKworIyBDaGVjayB0aGF0IHl5ZXJyb2sgd29ya3MgcHJvcGVybHk6IHNlY29uZCBlcnJvciBpcyBub3QgcmVwb3J0ZWQsCisjIHRoaXJkIGFuZCBmb3VydGggYXJlLiAgUGFyc2Ugc3RhdHVzIGlzIHN1Y2Nlc2Z1bGwuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygqICopICsgKCopICsgKCopCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjAzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCitzZWQgJ3MvXlstMC05Ll0qOiAvLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwMzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAogCiAKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Ci0KLSAgNzUgKSAjIDc1LiBjYWxjLmF0OjU1NjogQ2FsY3VsYXRvciAleWFjYwotICAgIGF0X3NldHVwX2xpbmU9J2NhbGMuYXQ6NTU2JwotICAgIGF0X2Rlc2M9J0NhbGN1bGF0b3IgJXlhY2MnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiA3NTogQ2FsY3VsYXRvciAleWFjYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjc1LiBjYWxjLmF0OjU1NjogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgotCi0KLQotCi0KLQotCi0KLSMgVXNpbmcgeWFjYy5jPwotCi0KLQotCi0KLQotCi0jIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmICVsb2NhdGlvbiAmICVwdXJlICYgKCVnbHIgb3IgJXBhcnNlLXBhcmFtKS4KLQotIyB5eWVycm9yIGFsd2F5cyBzZWVzIHRoZSBsb2NhdGlvbnMgKHdoZW4gYWN0aXZhdGVkKSwgZXhjZXB0IGlmCi0jIHlhY2MgJiBwdXJlICYgIXBhcmFtLgotCi0KLSMgVGhlIGludGVyZmFjZSBpcyBwdXJlOiBlaXRoZXIgYmVjYXVzZSAlcHVyZS1wYXJzZXIsIG9yIGJlY2F1c2Ugd2UKLSMgYXJlIHVzaW5nIHRoZSBDKysgcGFyc2Vycy4KLQotCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzIwNAorI0FUX1NUQVJUXzIwNQorYXRfZm5fZ3JvdXBfYmFubmVyIDIwNSAnY2FsYy5hdDo2MDQnIFwKKyAgIkNhbGN1bGF0b3IgJXlhY2MiICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAxMQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjIwNS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIApAQCAtMTcwMjIsNTkgKzY1MTE0LDUyIEBACiAKIAogY2F0ID5jYWxjLnkgPDwnX0FURU9GJwotJXsKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotICAvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KLSMgdW5kZWYgbWFsbG9jCi0jIHVuZGVmIG1lbWNtcAotIyB1bmRlZiByZWFsbG9jCi0jZW5kaWYKLSV9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCiAvKiBJbmZpeCBub3RhdGlvbiBjYWxjdWxhdG9yLS1jYWxjICovCiAleWFjYwogCi0lewotI2luY2x1ZGUgPHN0ZGlvLmg+CislY29kZSByZXF1aXJlcworewogCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaWYgSEFWRV9VTklTVERfSAotIyBpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbHNlCi0jIHVuZGVmIGFsYXJtCi0jIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLwotI2VuZGlmCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNkZWZpbmUgVVNFKFZhcikKLQotLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KLXR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOwotCi1zdGF0aWMgc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7Ci1zdGF0aWMgaW50IGdsb2JhbF9jb3VudCA9IDA7Ci0lfQorICAvKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLworICB0eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKK30KIAogLyogRXhlcmNpc2UgJXVuaW9uLiAqLwogJXVuaW9uCiB7CiAgIHNlbWFudGljX3ZhbHVlIGl2YWw7CiB9OworJXByaW50ZXIgeyBmcHJpbnRmICh5eW91dHB1dCwgIiVkIiwgJCQpOyB9IDxpdmFsPjsKIAotJXsKKyVjb2RlIHByb3ZpZGVzCit7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICAvKiBUaGUgaW5wdXQuICAqLworICBleHRlcm4gRklMRSAqaW5wdXQ7CisgIGV4dGVybiBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0OworICBleHRlcm4gaW50IGdsb2JhbF9jb3VudDsKK30KKworJWNvZGUKK3sKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNkZWZpbmUgVVNFKFZhcikKKworRklMRSAqaW5wdXQ7CiBzdGF0aWMgaW50IHBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KTsKLS8qIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmOgotICAgLSAlbG9jYXRpb24gJiAlcHVyZSAmICVnbHIKLSAgIC0gJWxvY2F0aW9uICYgJXB1cmUgJiAleWFjYyAmICVwYXJzZS1wYXJhbS4gKi8KLXN0YXRpYyB2b2lkIHl5ZXJyb3IgKAogCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzCi0gICAgICAgICAgICAgICAgICAgICApOwotc3RhdGljIGludCB5eWxleCAodm9pZCk7Ci1zdGF0aWMgaW50IGdldF9jaGFyICh2b2lkKTsKLXN0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKCBpbnQgYyk7Ci0lfQorc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CitpbnQgeXlsZXggKHZvaWQpOworfQogCiAKIApAQCAtMTcwODMsNyArNjUxNjgsNyBAQAogJXRva2VuIDxpdmFsPiBOVU0gIm51bWJlciIKICV0eXBlICA8aXZhbD4gZXhwCiAKLSVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbgkgICAgICAgKi8KKyVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbiAgICAgICAgICAgICovCiAlbGVmdCAnLScgJysnCiAlbGVmdCAnKicgJy8nCiAlbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLwpAQCAtMTcxMTYsMjUgKzY1MjAxLDM2IEBACiB8ICctJyBleHAgICVwcmVjIE5FRyB7ICQkID0gLSQyOyAgICAgICAgICAgIH0KIHwgZXhwICdeJyBleHAgICAgICAgIHsgJCQgPSBwb3dlciAoJDEsICQzKTsgfQogfCAnKCcgZXhwICcpJyAgICAgICAgeyAkJCA9ICQyOyAgICAgICAgICAgICB9Ci18ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgICAgICAgICAgIH0KK3wgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyB5eWVycm9rOyAgfQogfCAnIScgICAgICAgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9CiB8ICctJyBlcnJvciAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KIDsKICUlCi0vKiBUaGUgaW5wdXQuICAqLwotc3RhdGljIEZJTEUgKmlucHV0OwogCi1zdGF0aWMgdm9pZAoteXllcnJvciAoCi0KLSAgICAgICAgIGNvbnN0IGNoYXIgKnMpCitzdGF0aWMgaW50Citwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKIHsKLQotCi0gIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBzKTsKKyAgaW50IHJlcyA9IDE7CisgIGFzc2VydCAoMCA8PSBleHBvbmVudCk7CisgIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKKyAgICByZXMgKj0gYmFzZTsKKyAgcmV0dXJuIHJlczsKIH0KIAogCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorI2luY2x1ZGUgPGN0eXBlLmg+CisKK2ludCB5eWxleCAodm9pZCk7CitzdGF0aWMgaW50IGdldF9jaGFyICh2b2lkKTsKK3N0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKCBpbnQgYyk7CisKIAogc3RhdGljIGludAogZ2V0X2NoYXIgKHZvaWQpCkBAIC0xNzE0NSw3ICs2NTI0MSw2IEBACiAgIHJldHVybiByZXM7CiB9CiAKLQogc3RhdGljIHZvaWQKIHVuZ2V0X2NoYXIgKCBpbnQgYykKIHsKQEAgLTE3MTgwLDMyICs2NTI3NSwyMSBAQAogfQogCiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IExleGljYWwgYW5hbHl6ZXIgcmV0dXJucyBhbiBpbnRlZ2VyIG9uIHRoZSBzdGFjayBhbmQgdGhlIHRva2VuIHwKIHwgTlVNLCBvciB0aGUgQVNDSUkgY2hhcmFjdGVyIHJlYWQgaWYgbm90IGEgbnVtYmVyLiAgU2tpcHMgYWxsICAgfAogfCBibGFua3MgYW5kIHRhYnMsIHJldHVybnMgMCBmb3IgRU9GLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludAoteXlsZXggKHZvaWQpCitpbnQgeXlsZXggKHZvaWQpCiB7Ci0gIHN0YXRpYyBpbnQgaW5pdCA9IDE7CiAgIGludCBjOwotCi0gIGlmIChpbml0KQotICAgIHsKLSAgICAgIGluaXQgPSAwOwotCi0gICAgfQotCi0KLQotICAvKiBTa2lwIHdoaXRlIHNwYWNlLiAgKi8KLSAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKCkpID09ICcgJyB8fCBjID09ICdcdCcpCisgIC8qIFNraXAgY3VycmVudCB0b2tlbiwgdGhlbiB3aGl0ZSBzcGFjZXMuICAqLworICBkbwogICAgIHsKIAogICAgIH0KKyAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKCkpID09ICcgJyB8fCBjID09ICdcdCcpOwogCiAgIC8qIHByb2Nlc3MgbnVtYmVycyAgICovCiAgIGlmIChjID09ICcuJyB8fCBpc2RpZ2l0IChjKSkKQEAgLTE3MjIzLDE4ICs2NTMwNywyMCBAQAogICByZXR1cm4gYzsKIH0KIAotc3RhdGljIGludAotcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpCi17Ci0gIGludCByZXMgPSAxOwotICBpZiAoZXhwb25lbnQgPCAwKQotICAgIGV4aXQgKDMpOwotICBmb3IgKC8qIE5pZW50ZSAqLzsgZXhwb25lbnQ7IC0tZXhwb25lbnQpCi0gICAgcmVzICo9IGJhc2U7Ci0gIHJldHVybiByZXM7Ci19CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjIHVuZGVmIGFsYXJtCisjIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLworI2VuZGlmCiAKIAorCitzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKK2ludCBnbG9iYWxfY291bnQgPSAwOworCisvKiBBIEMgbWFpbiBmdW5jdGlvbi4gICovCiBpbnQKIG1haW4gKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKQEAgLTE3MjYwLDEwICs2NTM0NiwxMCBAQAogCiAKICAgc3RhdHVzID0geXlwYXJzZSAoKTsKLSAgaWYgKGdsb2JhbF9yZXN1bHQgIT0gcmVzdWx0KQotICAgIGFib3J0ICgpOwotICBpZiAoZ2xvYmFsX2NvdW50ICE9IGNvdW50KQotICAgIGFib3J0ICgpOworICBpZiAoZmNsb3NlIChpbnB1dCkpCisgICAgcGVycm9yICgiZmNsb3NlIik7CisgIGFzc2VydCAoZ2xvYmFsX3Jlc3VsdCA9PSByZXN1bHQpOworICBhc3NlcnQgKGdsb2JhbF9jb3VudCA9PSBjb3VudCk7CiAgIHJldHVybiBzdGF0dXM7CiB9CiBfQVRFT0YKQEAgLTE3MjcyLDU1ICs2NTM1OCwxNTEgQEAKIAogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTY6IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkiCi1lY2hvIGNhbGMuYXQ6NTU2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtbyBjYWxjLmMgY2FsYy55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2MDQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55IiAiY2FsYy5hdDo2MDQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDQ6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjYwNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA0OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2MDQiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNDogYmlzb24gLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCi0gICAkYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU2OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jIFwkTElCUyIKLWVjaG8gY2FsYy5hdDo1NTYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgorICAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA0OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiY2FsYy5hdDo2MDQiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA0OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jICRMSUJTIiAiY2FsYy5hdDo2MDQiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNDogXCRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCBcIlwkLjoge1wkX31cXG5cIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCBcJC4gPT0gMSkgJiYgL15cXHMqXCQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciBcIm1haW50XCIuCisgICAgICAgICMgfHwgL1xcc1wkLworICAgICAgICApJyBjYWxjLmMKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjA0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmMKKworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKIAogCiAjIFRlc3QgdGhlIHByaW9yaXRpZXMuCkBAIC0xNzM0MCw2MiArNjU1MjIsNjYgQEAKICgyXjIpXjMgPSA2NAogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTY6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NTYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MDQiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKIAogIyBTb21lIHN5bnRheCBlcnJvcnMuCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLTAgMAorMSAyCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NjogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU1NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA0OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYwNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA0OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA0IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0xNzQwNiwxOCArNjU1OTIsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTE3NDI3LDYwICs2NTYxNSw1MCBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU2OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU1NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA0OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDQiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiAxLy8yCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NjogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU1NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA0OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYwNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA0OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA0IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0xNzQ5MSwxOCArNjU2NjksMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJy8nLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTE3NTEyLDYwICs2NTY5Miw1MCBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU2OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU1NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA0OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDQiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiBlcnJvcgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTY6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NTYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MDQiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMTc1NzYsMTggKzY1NzQ2LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkCisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTE3NTk3LDYwICs2NTc2OSw1MCBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU2OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU1NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA0OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDQiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiAxID0gMiA9IDMKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU2OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTU2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDQ6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjA0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDQ6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTE3NjYxLDE4ICs2NTgyMywyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS42OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCisxLjc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPScKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMTc2ODIsMzAgKzY1ODQ2LDE4IEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTY6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTU2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDQ6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKQEAgLTE3NzEzLDMwICs2NTg2NSwzMiBAQAogKzEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU2OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTU2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDQ6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjA0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDQ6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTE3NzQ3LDE4ICs2NTkwMSwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMi4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCisyLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKycKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMTc3NjgsNTcgKzY1OTI0LDQ3IEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTY6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTU2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDQ6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAjIEV4ZXJjaXNlIGVycm9yIG1lc3NhZ2VzIHdpdGggRU9GOiB3b3JrIG9uIGFuIGVtcHR5IGZpbGUuCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU2OiBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgotZWNobyBjYWxjLmF0OjU1NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNDogIFwkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiICJjYWxjLmF0OjYwNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMTc4MjksMTggKzY1OTc1LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0xNzg1MCwzMCArNjU5OTgsMTggQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIApAQCAtMTc4ODgsOCArNjYwMjQsOCBAQAogIwogIyAtIHRlc3QgdGhlIGFjdGlvbiBhc3NvY2lhdGVkIHRvIGBlcnJvcicKICMKLSMgLSBjaGVjayB0aGUgbG9vay1haGVhZCB0aGF0IHRyaWdnZXJzIGFuIGVycm9yIGlzIG5vdCBkaXNjYXJkZWQKLSMgICB3aGVuIHdlIGVudGVyIGVycm9yIHJlY292ZXJ5LiAgQmVsb3csIHRoZSBsb29rLWFoZWFkIGNhdXNpbmcgdGhlCisjIC0gY2hlY2sgdGhlIGxvb2thaGVhZCB0aGF0IHRyaWdnZXJzIGFuIGVycm9yIGlzIG5vdCBkaXNjYXJkZWQKKyMgICB3aGVuIHdlIGVudGVyIGVycm9yIHJlY292ZXJ5LiAgQmVsb3csIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUKICMgICBmaXJzdCBlcnJvciBpcyAiKSIsIHdoaWNoIGlzIG5lZWRlZCB0byByZWNvdmVyIGZyb20gdGhlIGVycm9yIGFuZAogIyAgIHByb2R1Y2UgdGhlICIwIiB0aGF0IHRyaWdnZXJzIHRoZSAiMCAhPSAxIiBlcnJvci4KICMKQEAgLTE3ODk3LDMwICs2NjAzMywzMiBAQAogKCkgKyAoMSArIDEgKyAxICspICsgKCogKiAqKSArICgxICogMiAqICopID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTY6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NTYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MDQiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMTc5MzEsMjEgKzY2MDY5LDIzIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuNDA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xODogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4yMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS40MTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogY2FsYzogZXJyb3I6IDQ0NDQgIT0gMQogX0FURU9GCiAKQEAgLTE3OTU2LDYzICs2NjA5Niw1MyBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU2OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU1NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA0OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDQiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAjIFRoZSBzYW1lLCBidXQgdGhpcyB0aW1lIGV4ZXJjaXNpbmcgZXhwbGljaXRseSB0cmlnZ2VyZWQgc3ludGF4IGVycm9ycy4KLSMgUE9TSVggc2F5cyB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KKyMgUE9TSVggc2F5cyB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0oISkgKyAoMCAwKSA9IDEKKyghKSArICgxIDIpID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTY6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NTYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MDQiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMTgwMjMsMTggKzY2MTUzLDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjk6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKIGNhbGM6IGVycm9yOiAyMjIyICE9IDEKIF9BVEVPRgogCkBAIC0xODA0NSw2MCArNjYxNzcsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotKC0gKikgKyAoMCAwKSA9IDEKKygtICopICsgKDEgMikgPSAxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NjogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU1NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA0OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYwNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA0OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA0IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0xODEwOSwxOSArNjYyMzEsMjEgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwotMS4xMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS40OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCiBfQVRFT0YKIApAQCAtMTgxMzIsOTQgKzY2MjU2LDExNyBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU2OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU1NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCiAKLSRhdF90cmFjZW9uCisKKyMgQ2hlY2sgdGhhdCB5eWVycm9rIHdvcmtzIHByb3Blcmx5OiBzZWNvbmQgZXJyb3IgaXMgbm90IHJlcG9ydGVkLAorIyB0aGlyZCBhbmQgZm91cnRoIGFyZS4gIFBhcnNlIHN0YXR1cyBpcyBzdWNjZXNmdWxsLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoKiAqKSArICgqKSArICgqKQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MDQiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTY6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDQ6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKIAogCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwotCi0gIDc2ICkgIyA3Ni4gY2FsYy5hdDo1NTc6IENhbGN1bGF0b3IgJWVycm9yLXZlcmJvc2UKLSAgICBhdF9zZXR1cF9saW5lPSdjYWxjLmF0OjU1NycKLSAgICBhdF9kZXNjPSdDYWxjdWxhdG9yICVlcnJvci12ZXJib3NlJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgNzY6IENhbGN1bGF0b3IgJWVycm9yLXZlcmJvc2UgICAgICAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICI3Ni4gY2FsYy5hdDo1NTc6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KLQotCi0KLQotCi0KLQotCi0jIFVzaW5nIHlhY2MuYz8KLQotCi0KLQotCi0KLQotIyB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZiAlbG9jYXRpb24gJiAlcHVyZSAmICglZ2xyIG9yICVwYXJzZS1wYXJhbSkuCi0KLSMgeXllcnJvciBhbHdheXMgc2VlcyB0aGUgbG9jYXRpb25zICh3aGVuIGFjdGl2YXRlZCksIGV4Y2VwdCBpZgotIyB5YWNjICYgcHVyZSAmICFwYXJhbS4KLQotCi0jIFRoZSBpbnRlcmZhY2UgaXMgcHVyZTogZWl0aGVyIGJlY2F1c2UgJXB1cmUtcGFyc2VyLCBvciBiZWNhdXNlIHdlCi0jIGFyZSB1c2luZyB0aGUgQysrIHBhcnNlcnMuCi0KLQorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yMDUKKyNBVF9TVEFSVF8yMDYKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyMDYgJ2NhbGMuYXQ6NjA1JyBcCisgICJDYWxjdWxhdG9yICVlcnJvci12ZXJib3NlIiAiICAgICAgICAgICAgICAgICAgICAgICIgMTEKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyMDYuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiAKQEAgLTE4MjMxLDU5ICs2NjM3OCw1MiBAQAogCiAKIGNhdCA+Y2FsYy55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogLyogSW5maXggbm90YXRpb24gY2FsY3VsYXRvci0tY2FsYyAqLwogJWVycm9yLXZlcmJvc2UKIAotJXsKLSNpbmNsdWRlIDxzdGRpby5oPgorJWNvZGUgcmVxdWlyZXMKK3sKIAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2lmIEhBVkVfVU5JU1REX0gKLSMgaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZWxzZQotIyB1bmRlZiBhbGFybQotIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KLSNlbmRpZgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jZGVmaW5lIFVTRShWYXIpCi0KLS8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCi10eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKLQotc3RhdGljIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOwotc3RhdGljIGludCBnbG9iYWxfY291bnQgPSAwOwotJX0KKyAgLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KKyAgdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Cit9CiAKIC8qIEV4ZXJjaXNlICV1bmlvbi4gKi8KICV1bmlvbgogewogICBzZW1hbnRpY192YWx1ZSBpdmFsOwogfTsKKyVwcmludGVyIHsgZnByaW50ZiAoeXlvdXRwdXQsICIlZCIsICQkKTsgfSA8aXZhbD47CiAKLSV7CislY29kZSBwcm92aWRlcworeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgLyogVGhlIGlucHV0LiAgKi8KKyAgZXh0ZXJuIEZJTEUgKmlucHV0OworICBleHRlcm4gc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdDsKKyAgZXh0ZXJuIGludCBnbG9iYWxfY291bnQ7Cit9CisKKyVjb2RlCit7CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZGVmaW5lIFVTRShWYXIpCisKK0ZJTEUgKmlucHV0Owogc3RhdGljIGludCBwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCk7Ci0vKiB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZjoKLSAgIC0gJWxvY2F0aW9uICYgJXB1cmUgJiAlZ2xyCi0gICAtICVsb2NhdGlvbiAmICVwdXJlICYgJXlhY2MgJiAlcGFyc2UtcGFyYW0uICovCi1zdGF0aWMgdm9pZCB5eWVycm9yICgKIAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcwotICAgICAgICAgICAgICAgICAgICAgKTsKLXN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOwotc3RhdGljIGludCBnZXRfY2hhciAodm9pZCk7Ci1zdGF0aWMgdm9pZCB1bmdldF9jaGFyICggaW50IGMpOwotJX0KK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworaW50IHl5bGV4ICh2b2lkKTsKK30KIAogCiAKQEAgLTE4MjkyLDcgKzY2NDMyLDcgQEAKICV0b2tlbiA8aXZhbD4gTlVNICJudW1iZXIiCiAldHlwZSAgPGl2YWw+IGV4cAogCi0lbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24JICAgICAgICovCislbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24gICAgICAgICAgICAqLwogJWxlZnQgJy0nICcrJwogJWxlZnQgJyonICcvJwogJWxlZnQgTkVHICAgICAvKiBuZWdhdGlvbi0tdW5hcnkgbWludXMgKi8KQEAgLTE4MzI1LDI1ICs2NjQ2NSwzNiBAQAogfCAnLScgZXhwICAlcHJlYyBORUcgeyAkJCA9IC0kMjsgICAgICAgICAgICB9CiB8IGV4cCAnXicgZXhwICAgICAgICB7ICQkID0gcG93ZXIgKCQxLCAkMyk7IH0KIHwgJygnIGV4cCAnKScgICAgICAgIHsgJCQgPSAkMjsgICAgICAgICAgICAgfQotfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7ICAgICAgICAgICB9Cit8ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgeXllcnJvazsgIH0KIHwgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQogfCAnLScgZXJyb3IgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9CiA7CiAlJQotLyogVGhlIGlucHV0LiAgKi8KLXN0YXRpYyBGSUxFICppbnB1dDsKIAotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKAotCi0gICAgICAgICBjb25zdCBjaGFyICpzKQorc3RhdGljIGludAorcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpCiB7Ci0KLQotICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgcyk7CisgIGludCByZXMgPSAxOworICBhc3NlcnQgKDAgPD0gZXhwb25lbnQpOworICBmb3IgKC8qIE5pZW50ZSAqLzsgZXhwb25lbnQ7IC0tZXhwb25lbnQpCisgICAgcmVzICo9IGJhc2U7CisgIHJldHVybiByZXM7CiB9CiAKIAorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKyNpbmNsdWRlIDxjdHlwZS5oPgorCitpbnQgeXlsZXggKHZvaWQpOworc3RhdGljIGludCBnZXRfY2hhciAodm9pZCk7CitzdGF0aWMgdm9pZCB1bmdldF9jaGFyICggaW50IGMpOworCiAKIHN0YXRpYyBpbnQKIGdldF9jaGFyICh2b2lkKQpAQCAtMTgzNTQsNyArNjY1MDUsNiBAQAogICByZXR1cm4gcmVzOwogfQogCi0KIHN0YXRpYyB2b2lkCiB1bmdldF9jaGFyICggaW50IGMpCiB7CkBAIC0xODM4OSwzMiArNjY1MzksMjEgQEAKIH0KIAogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCBMZXhpY2FsIGFuYWx5emVyIHJldHVybnMgYW4gaW50ZWdlciBvbiB0aGUgc3RhY2sgYW5kIHRoZSB0b2tlbiB8CiB8IE5VTSwgb3IgdGhlIEFTQ0lJIGNoYXJhY3RlciByZWFkIGlmIG5vdCBhIG51bWJlci4gIFNraXBzIGFsbCAgIHwKIHwgYmxhbmtzIGFuZCB0YWJzLCByZXR1cm5zIDAgZm9yIEVPRi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQKLXl5bGV4ICh2b2lkKQoraW50IHl5bGV4ICh2b2lkKQogewotICBzdGF0aWMgaW50IGluaXQgPSAxOwogICBpbnQgYzsKLQotICBpZiAoaW5pdCkKLSAgICB7Ci0gICAgICBpbml0ID0gMDsKLQotICAgIH0KLQotCi0KLSAgLyogU2tpcCB3aGl0ZSBzcGFjZS4gICovCi0gIHdoaWxlICgoYyA9IGdldF9jaGFyICgpKSA9PSAnICcgfHwgYyA9PSAnXHQnKQorICAvKiBTa2lwIGN1cnJlbnQgdG9rZW4sIHRoZW4gd2hpdGUgc3BhY2VzLiAgKi8KKyAgZG8KICAgICB7CiAKICAgICB9CisgIHdoaWxlICgoYyA9IGdldF9jaGFyICgpKSA9PSAnICcgfHwgYyA9PSAnXHQnKTsKIAogICAvKiBwcm9jZXNzIG51bWJlcnMgICAqLwogICBpZiAoYyA9PSAnLicgfHwgaXNkaWdpdCAoYykpCkBAIC0xODQzMiwxOCArNjY1NzEsMjAgQEAKICAgcmV0dXJuIGM7CiB9CiAKLXN0YXRpYyBpbnQKLXBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQotewotICBpbnQgcmVzID0gMTsKLSAgaWYgKGV4cG9uZW50IDwgMCkKLSAgICBleGl0ICgzKTsKLSAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQotICAgIHJlcyAqPSBiYXNlOwotICByZXR1cm4gcmVzOwotfQorI2luY2x1ZGUgPGFzc2VydC5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxzZQorIyB1bmRlZiBhbGFybQorIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KKyNlbmRpZgogCiAKKworc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7CitpbnQgZ2xvYmFsX2NvdW50ID0gMDsKKworLyogQSBDIG1haW4gZnVuY3Rpb24uICAqLwogaW50CiBtYWluIChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CkBAIC0xODQ2OSwxMCArNjY2MTAsMTAgQEAKIAogCiAgIHN0YXR1cyA9IHl5cGFyc2UgKCk7Ci0gIGlmIChnbG9iYWxfcmVzdWx0ICE9IHJlc3VsdCkKLSAgICBhYm9ydCAoKTsKLSAgaWYgKGdsb2JhbF9jb3VudCAhPSBjb3VudCkKLSAgICBhYm9ydCAoKTsKKyAgaWYgKGZjbG9zZSAoaW5wdXQpKQorICAgIHBlcnJvciAoImZjbG9zZSIpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOwogICByZXR1cm4gc3RhdHVzOwogfQogX0FURU9GCkBAIC0xODQ4MSw1NSArNjY2MjIsMTUxIEBACiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU3OiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgotZWNobyBjYWxjLmF0OjU1NyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gY2FsYy5jIGNhbGMueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA1OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjA1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueSIgImNhbGMuYXQ6NjA1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA1OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2MDUiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjA1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDU6IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwNSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAotICAgJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NzogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBcJExJQlMiCi1lY2hvIGNhbGMuYXQ6NTU3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImNhbGMuYXQ6NjA1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUyIgImNhbGMuYXQ6NjA1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDU6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5jCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjYwNSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5jCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCiAKIAogIyBUZXN0IHRoZSBwcmlvcml0aWVzLgpAQCAtMTg1NDksNjIgKzY2Nzg2LDY2IEBACiAoMl4yKV4zID0gNjQKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU3OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTU3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDU6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjA1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAKICMgU29tZSBzeW50YXggZXJyb3JzLgogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0wIDAKKzEgMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTc6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NTcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MDUiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwNSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMTg2MTUsMTggKzY2ODU2LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0xODYzNSw2MCArNjY4NzgsNTAgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTc6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTU3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDU6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwNSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKIDEvLzIKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU3OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTU3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDU6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjA1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTE4Njk5LDE4ICs2NjkzMiwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJy8nLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMTg3MTksNjAgKzY2OTU0LDUwIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU3OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU1NyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA1OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDUiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiBlcnJvcgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTc6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NTcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MDUiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwNSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMTg3ODMsMTggKzY3MDA4LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkCisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTE4ODAzLDYwICs2NzAzMCw1MCBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NzogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMSA9IDIgPSAzCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NzogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU1NyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA1OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYwNSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA1OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA1IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0xODg2NywxOCArNjcwODQsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworMS43OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTE4ODg3LDMwICs2NzEwNiwxOCBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NzogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwpAQCAtMTg5MTgsMzAgKzY3MTI1LDMyIEBACiArMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTc6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NTcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MDUiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwNSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMTg5NTIsMTggKzY3MTYxLDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0yLjA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKycKKzIuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0xODk3Miw1NyArNjcxODMsNDcgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTc6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTU3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDU6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwNSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAjIEV4ZXJjaXNlIGVycm9yIG1lc3NhZ2VzIHdpdGggRU9GOiB3b3JrIG9uIGFuIGVtcHR5IGZpbGUuCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU3OiBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgotZWNobyBjYWxjLmF0OjU1NyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNTogIFwkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiICJjYWxjLmF0OjYwNSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwNSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMTkwMzMsMTggKzY3MjM0LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0xOTA1MywzMCArNjcyNTYsMTggQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTc6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTU3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDU6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwNSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKQEAgLTE5MDkxLDggKzY3MjgyLDggQEAKICMKICMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCiAjCi0jIC0gY2hlY2sgdGhlIGxvb2stYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCi0jICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZQorIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCiAjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKICMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCiAjCkBAIC0xOTEwMCwzMCArNjcyOTEsMzIgQEAKICgpICsgKDEgKyAxICsgMSArKSArICgqICogKikgKyAoMSAqIDIgKiAqKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU3OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTU3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDU6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjA1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTE5MTM0LDIxICs2NzMyNywyMyBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjE3OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjIyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjQwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKIGNhbGM6IGVycm9yOiA0NDQ0ICE9IDEKIF9BVEVPRgogCkBAIC0xOTE1OCw2MyArNjczNTMsNTMgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTc6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTU3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDU6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwNSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKICMgVGhlIHNhbWUsIGJ1dCB0aGlzIHRpbWUgZXhlcmNpc2luZyBleHBsaWNpdGx5IHRyaWdnZXJlZCBzeW50YXggZXJyb3JzLgotIyBQT1NJWCBzYXlzIHRoZSBsb29rLWFoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgorIyBQT1NJWCBzYXlzIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLSghKSArICgwIDApID0gMQorKCEpICsgKDEgMikgPSAxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NzogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU1NyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA1OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYwNSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA1OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA1IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0xOTIyNSwxOCArNjc0MTAsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuOTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS4xMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogY2FsYzogZXJyb3I6IDIyMjIgIT0gMQogX0FURU9GCiAKQEAgLTE5MjQ2LDYwICs2NzQzMyw1MCBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NzogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotKC0gKikgKyAoMCAwKSA9IDEKKygtICopICsgKDEgMikgPSAxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NzogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU1NyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1NzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA1OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYwNSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA1OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA1IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0xOTMxMCwxOSArNjc0ODcsMjEgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwotMS4xMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS40OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCiBfQVRFT0YKIApAQCAtMTkzMzIsOTQgKzY3NTExLDExNiBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1NzogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDU6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwNSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQogCi0kYXRfdHJhY2VvbgorCisjIENoZWNrIHRoYXQgeXllcnJvayB3b3JrcyBwcm9wZXJseTogc2Vjb25kIGVycm9yIGlzIG5vdCByZXBvcnRlZCwKKyMgdGhpcmQgYW5kIGZvdXJ0aCBhcmUuICBQYXJzZSBzdGF0dXMgaXMgc3VjY2VzZnVsbC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCogKikgKyAoKikgKyAoKikKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDU6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjA1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE2OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KK3NlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA1OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDUiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICA3NyApICMgNzcuIGNhbGMuYXQ6NTU5OiBDYWxjdWxhdG9yICVwdXJlLXBhcnNlciAlbG9jYXRpb25zCi0gICAgYXRfc2V0dXBfbGluZT0nY2FsYy5hdDo1NTknCi0gICAgYXRfZGVzYz0nQ2FsY3VsYXRvciAlcHVyZS1wYXJzZXIgJWxvY2F0aW9ucycKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDc3OiBDYWxjdWxhdG9yICVwdXJlLXBhcnNlciAlbG9jYXRpb25zICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiNzcuIGNhbGMuYXQ6NTU5OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCi0KLQotCi0KLQotCi0KLQotIyBVc2luZyB5YWNjLmM/Ci0KLQotCi0KLQotCi0KLSMgeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWYgJWxvY2F0aW9uICYgJXB1cmUgJiAoJWdsciBvciAlcGFyc2UtcGFyYW0pLgotCi0jIHl5ZXJyb3IgYWx3YXlzIHNlZXMgdGhlIGxvY2F0aW9ucyAod2hlbiBhY3RpdmF0ZWQpLCBleGNlcHQgaWYKLSMgeWFjYyAmIHB1cmUgJiAhcGFyYW0uCi0KLQotIyBUaGUgaW50ZXJmYWNlIGlzIHB1cmU6IGVpdGhlciBiZWNhdXNlICVwdXJlLXBhcnNlciwgb3IgYmVjYXVzZSB3ZQotIyBhcmUgdXNpbmcgdGhlIEMrKyBwYXJzZXJzLgotCi0KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjA2CisjQVRfU1RBUlRfMjA3CithdF9mbl9ncm91cF9iYW5uZXIgMjA3ICdjYWxjLmF0OjYwNycgXAorICAiQ2FsY3VsYXRvciAlZGVmaW5lIGFwaS5wdXJlIGZ1bGwgJWxvY2F0aW9ucyIgIiAgICAiIDExCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjA3LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogCkBAIC0xOTQzMSw1OSArNjc2MzIsNTIgQEAKIAogCiBjYXQgPmNhbGMueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKIC8qIEluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3ItLWNhbGMgKi8KLSVwdXJlLXBhcnNlciAlbG9jYXRpb25zCislZGVmaW5lIGFwaS5wdXJlIGZ1bGwgJWxvY2F0aW9ucwogCi0lewotI2luY2x1ZGUgPHN0ZGlvLmg+CislY29kZSByZXF1aXJlcworewogCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaWYgSEFWRV9VTklTVERfSAotIyBpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbHNlCi0jIHVuZGVmIGFsYXJtCi0jIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLwotI2VuZGlmCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNkZWZpbmUgVVNFKFZhcikKLQotLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KLXR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOwotCi1zdGF0aWMgc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7Ci1zdGF0aWMgaW50IGdsb2JhbF9jb3VudCA9IDA7Ci0lfQorICAvKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLworICB0eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKK30KIAogLyogRXhlcmNpc2UgJXVuaW9uLiAqLwogJXVuaW9uCiB7CiAgIHNlbWFudGljX3ZhbHVlIGl2YWw7CiB9OworJXByaW50ZXIgeyBmcHJpbnRmICh5eW91dHB1dCwgIiVkIiwgJCQpOyB9IDxpdmFsPjsKIAotJXsKKyVjb2RlIHByb3ZpZGVzCit7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICAvKiBUaGUgaW5wdXQuICAqLworICBleHRlcm4gRklMRSAqaW5wdXQ7CisgIGV4dGVybiBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0OworICBleHRlcm4gaW50IGdsb2JhbF9jb3VudDsKK30KKworJWNvZGUKK3sKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNkZWZpbmUgVVNFKFZhcikKKworRklMRSAqaW5wdXQ7CiBzdGF0aWMgaW50IHBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KTsKLS8qIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmOgotICAgLSAlbG9jYXRpb24gJiAlcHVyZSAmICVnbHIKLSAgIC0gJWxvY2F0aW9uICYgJXB1cmUgJiAleWFjYyAmICVwYXJzZS1wYXJhbS4gKi8KLXN0YXRpYyB2b2lkIHl5ZXJyb3IgKAogCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzCi0gICAgICAgICAgICAgICAgICAgICApOwotc3RhdGljIGludCB5eWxleCAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKTsKLXN0YXRpYyBpbnQgZ2V0X2NoYXIgKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCk7Ci1zdGF0aWMgdm9pZCB1bmdldF9jaGFyIChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3AsICBpbnQgYyk7Ci0lfQorc3RhdGljIHZvaWQgeXllcnJvciAoWVlMVFlQRSBjb25zdCAqIGNvbnN0IGxsb2NwLCAgY29uc3QgY2hhciAqbXNnKTsKK2ludCB5eWxleCAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKTsKK30KIAogCiAKQEAgLTE5NDkyLDcgKzY3Njg2LDcgQEAKICV0b2tlbiA8aXZhbD4gTlVNICJudW1iZXIiCiAldHlwZSAgPGl2YWw+IGV4cAogCi0lbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24JICAgICAgICovCislbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24gICAgICAgICAgICAqLwogJWxlZnQgJy0nICcrJwogJWxlZnQgJyonICcvJwogJWxlZnQgTkVHICAgICAvKiBuZWdhdGlvbi0tdW5hcnkgbWludXMgKi8KQEAgLTE5NTI1LDI1ICs2NzcxOSwzOCBAQAogfCAnLScgZXhwICAlcHJlYyBORUcgeyAkJCA9IC0kMjsgICAgICAgICAgICB9CiB8IGV4cCAnXicgZXhwICAgICAgICB7ICQkID0gcG93ZXIgKCQxLCAkMyk7IH0KIHwgJygnIGV4cCAnKScgICAgICAgIHsgJCQgPSAkMjsgICAgICAgICAgICAgfQotfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7ICAgICAgICAgICB9Cit8ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgeXllcnJvazsgIH0KIHwgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQogfCAnLScgZXJyb3IgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9CiA7CiAlJQotLyogVGhlIGlucHV0LiAgKi8KLXN0YXRpYyBGSUxFICppbnB1dDsKIAotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKAotCi0gICAgICAgICBjb25zdCBjaGFyICpzKQorc3RhdGljIGludAorcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpCiB7Ci0KLQotICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgcyk7CisgIGludCByZXMgPSAxOworICBhc3NlcnQgKDAgPD0gZXhwb25lbnQpOworICBmb3IgKC8qIE5pZW50ZSAqLzsgZXhwb25lbnQ7IC0tZXhwb25lbnQpCisgICAgcmVzICo9IGJhc2U7CisgIHJldHVybiByZXM7CiB9CiAKIAorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yIChZWUxUWVBFIGNvbnN0ICogY29uc3QgbGxvY3AsICBjb25zdCBjaGFyICptc2cpCit7CisgIFlZX0xPQ0FUSU9OX1BSSU5UIChzdGRlcnIsICgqbGxvY3ApKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiOiAiKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworaW50IHl5bGV4IChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApOworc3RhdGljIGludCBnZXRfY2hhciAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKTsKK3N0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCwgIGludCBjKTsKKwogCiBzdGF0aWMgWVlMVFlQRSBsYXN0X3l5bGxvYzsKIApAQCAtMTk1NTcsNyArNjc3NjQsNyBAQAogICBpZiAocmVzID09ICdcbicpCiAgICAgewogICAgICAgKCpsbG9jcCkubGFzdF9saW5lKys7Ci0gICAgICAoKmxsb2NwKS5sYXN0X2NvbHVtbiA9IDA7CisgICAgICAoKmxsb2NwKS5sYXN0X2NvbHVtbiA9IDE7CiAgICAgfQogICBlbHNlCiAgICAgKCpsbG9jcCkubGFzdF9jb2x1bW4rKzsKQEAgLTE5NTY1LDcgKzY3NzcyLDYgQEAKICAgcmV0dXJuIHJlczsKIH0KIAotCiBzdGF0aWMgdm9pZAogdW5nZXRfY2hhciAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwLCAgaW50IGMpCiB7CkBAIC0xOTYwMyw0MCArNjc4MDksMjMgQEAKIH0KIAogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCBMZXhpY2FsIGFuYWx5emVyIHJldHVybnMgYW4gaW50ZWdlciBvbiB0aGUgc3RhY2sgYW5kIHRoZSB0b2tlbiB8CiB8IE5VTSwgb3IgdGhlIEFTQ0lJIGNoYXJhY3RlciByZWFkIGlmIG5vdCBhIG51bWJlci4gIFNraXBzIGFsbCAgIHwKIHwgYmxhbmtzIGFuZCB0YWJzLCByZXR1cm5zIDAgZm9yIEVPRi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQKLXl5bGV4IChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApCitpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCkKIHsKLSAgc3RhdGljIGludCBpbml0ID0gMTsKICAgaW50IGM7Ci0KLSAgaWYgKGluaXQpCi0gICAgewotICAgICAgaW5pdCA9IDA7Ci0KLSAgICAgICgqbGxvY3ApLmxhc3RfY29sdW1uID0gMDsKLSAgICAgICgqbGxvY3ApLmxhc3RfbGluZSA9IDE7Ci0KLSAgICB9Ci0KLQotICgqbGxvY3ApLmZpcnN0X2NvbHVtbiA9ICgqbGxvY3ApLmxhc3RfY29sdW1uOwotICAoKmxsb2NwKS5maXJzdF9saW5lICAgPSAoKmxsb2NwKS5sYXN0X2xpbmU7Ci0KLQotICAvKiBTa2lwIHdoaXRlIHNwYWNlLiAgKi8KLSAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCkpID09ICcgJyB8fCBjID09ICdcdCcpCisgIC8qIFNraXAgY3VycmVudCB0b2tlbiwgdGhlbiB3aGl0ZSBzcGFjZXMuICAqLworICBkbwogICAgIHsKICAgICAgKCpsbG9jcCkuZmlyc3RfY29sdW1uID0gKCpsbG9jcCkubGFzdF9jb2x1bW47CiAgICAgICAoKmxsb2NwKS5maXJzdF9saW5lICAgPSAoKmxsb2NwKS5sYXN0X2xpbmU7CiAKICAgICB9CisgIHdoaWxlICgoYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApKSA9PSAnICcgfHwgYyA9PSAnXHQnKTsKIAogICAvKiBwcm9jZXNzIG51bWJlcnMgICAqLwogICBpZiAoYyA9PSAnLicgfHwgaXNkaWdpdCAoYykpCkBAIC0xOTY1NCwxOCArNjc4NDMsMjAgQEAKICAgcmV0dXJuIGM7CiB9CiAKLXN0YXRpYyBpbnQKLXBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQotewotICBpbnQgcmVzID0gMTsKLSAgaWYgKGV4cG9uZW50IDwgMCkKLSAgICBleGl0ICgzKTsKLSAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQotICAgIHJlcyAqPSBiYXNlOwotICByZXR1cm4gcmVzOwotfQorI2luY2x1ZGUgPGFzc2VydC5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxzZQorIyB1bmRlZiBhbGFybQorIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KKyNlbmRpZgogCiAKKworc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7CitpbnQgZ2xvYmFsX2NvdW50ID0gMDsKKworLyogQSBDIG1haW4gZnVuY3Rpb24uICAqLwogaW50CiBtYWluIChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CkBAIC0xOTY5MSwxMCArNjc4ODIsMTAgQEAKIAogCiAgIHN0YXR1cyA9IHl5cGFyc2UgKCk7Ci0gIGlmIChnbG9iYWxfcmVzdWx0ICE9IHJlc3VsdCkKLSAgICBhYm9ydCAoKTsKLSAgaWYgKGdsb2JhbF9jb3VudCAhPSBjb3VudCkKLSAgICBhYm9ydCAoKTsKKyAgaWYgKGZjbG9zZSAoaW5wdXQpKQorICAgIHBlcnJvciAoImZjbG9zZSIpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOwogICByZXR1cm4gc3RhdHVzOwogfQogX0FURU9GCkBAIC0xOTcwMyw1NSArNjc4OTQsMTUxIEBACiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU5OiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgotZWNobyBjYWxjLmF0OjU1OSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gY2FsYy5jIGNhbGMueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1OTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjA3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueSIgImNhbGMuYXQ6NjA3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2MDciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjA3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDc6IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAotICAgJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1OTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBcJExJQlMiCi1lY2hvIGNhbGMuYXQ6NTU5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTk6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNzogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImNhbGMuYXQ6NjA3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNzogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUyIgImNhbGMuYXQ6NjA3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDc6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5jCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjYwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5jCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCiAKIAogIyBUZXN0IHRoZSBwcmlvcml0aWVzLgpAQCAtMTk3NzEsNjIgKzY4MDU4LDY2IEBACiAoMl4yKV4zID0gNjQKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU5OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTU5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDc6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjA3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDciCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAKICMgU29tZSBzeW50YXggZXJyb3JzLgogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0wIDAKKzEgMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTk6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NTkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTk6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNzogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MDciCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMTk4MzcsODEgKzY4MTI4LDcyIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCi1zZWQgJ3MvXlstMC05Ll0qOiAvLycgZXhwb3V0ID5hdC1leHBvdXQKLW12IGF0LWV4cG91dCBleHBvdXQKKwogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1OTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMS8vMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTk6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NTkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTk6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNzogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MDciCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMTk5MjIsODEgKzY4MjA0LDcyIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCi1zZWQgJ3MvXlstMC05Ll0qOiAvLycgZXhwb3V0ID5hdC1leHBvdXQKLW12IGF0LWV4cG91dCBleHBvdXQKKwogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1OTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogZXJyb3IKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU5OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTU5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDc6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjA3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDciCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTIwMDA3LDgxICs2ODI4MCw3MiBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCi1zZWQgJ3MvXlstMC05Ll0qOiAvLycgZXhwb3V0ID5hdC1leHBvdXQKLW12IGF0LWV4cG91dCBleHBvdXQKKwogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1OTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMSA9IDIgPSAzCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1OTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU1OSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1OTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0yMDA5Miw1MSArNjgzNTYsNDAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworMS43OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KLXNlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAotbXYgYXQtZXhwb3V0IGV4cG91dAorCiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU5OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU1OSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTk6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDciCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCkBAIC0yMDE0NCwzMCArNjgzOTcsMzIgQEAKICsxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1OTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU1OSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1OTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0yMDE3OCw3OCArNjg0MzMsNjkgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTIuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KLXNlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAotbXYgYXQtZXhwb3V0IGV4cG91dAorCiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU5OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU1OSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NTk6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDciCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1OTogXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKLWVjaG8gY2FsYy5hdDo1NTkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDc6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo2MDciCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDciCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTIwMjYwLDUxICs2ODUwNiw0MCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgotc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0Ci1tdiBhdC1leHBvdXQgZXhwb3V0CisKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTk6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTU5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1OTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDc6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKQEAgLTIwMzE5LDggKzY4NTU0LDggQEAKICMKICMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCiAjCi0jIC0gY2hlY2sgdGhlIGxvb2stYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCi0jICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZQorIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCiAjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKICMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCiAjCkBAIC0yMDMyOCwzMCArNjg1NjMsMzIgQEAKICgpICsgKDEgKyAxICsgMSArKSArICgqICogKikgKyAoMSAqIDIgKiAqKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTU5OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTU5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDc6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjA3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDciCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTIwMzYyLDg4ICs2ODU5OSw3OSBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjE3OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjIyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjQwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKIGNhbGM6IGVycm9yOiA0NDQ0ICE9IDEKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgotc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0Ci1tdiBhdC1leHBvdXQgZXhwb3V0CisKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTk6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTU5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1OTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDc6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKICMgVGhlIHNhbWUsIGJ1dCB0aGlzIHRpbWUgZXhlcmNpc2luZyBleHBsaWNpdGx5IHRyaWdnZXJlZCBzeW50YXggZXJyb3JzLgotIyBQT1NJWCBzYXlzIHRoZSBsb29rLWFoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgorIyBQT1NJWCBzYXlzIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLSghKSArICgwIDApID0gMQorKCEpICsgKDEgMikgPSAxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1OTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU1OSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1OTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0yMDQ1NCw4MiArNjg2ODIsNzMgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuOTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS4xMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogY2FsYzogZXJyb3I6IDIyMjIgIT0gMQogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCi1zZWQgJ3MvXlstMC05Ll0qOiAvLycgZXhwb3V0ID5hdC1leHBvdXQKLW12IGF0LWV4cG91dCBleHBvdXQKKwogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1OTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NTkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTU5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotKC0gKikgKyAoMCAwKSA9IDEKKygtICopICsgKDEgMikgPSAxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU1OTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU1OSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1OTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0yMDU0MCwxMTcgKzY4NzU5LDE0MCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjExOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjQ6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKIGNhbGM6IGVycm9yOiAyMjIyICE9IDEKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgotc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0Ci1tdiBhdC1leHBvdXQgZXhwb3V0CisKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NTk6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTU5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU1OTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDciCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKIAotJGF0X3RyYWNlb24KKworIyBDaGVjayB0aGF0IHl5ZXJyb2sgd29ya3MgcHJvcGVybHk6IHNlY29uZCBlcnJvciBpcyBub3QgcmVwb3J0ZWQsCisjIHRoaXJkIGFuZCBmb3VydGggYXJlLiAgUGFyc2Ugc3RhdHVzIGlzIHN1Y2Nlc2Z1bGwuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygqICopICsgKCopICsgKCopCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwNzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAogCiAKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Ci0KLSAgNzggKSAjIDc4LiBjYWxjLmF0OjU2MDogQ2FsY3VsYXRvciAlZXJyb3ItdmVyYm9zZSAlbG9jYXRpb25zCi0gICAgYXRfc2V0dXBfbGluZT0nY2FsYy5hdDo1NjAnCi0gICAgYXRfZGVzYz0nQ2FsY3VsYXRvciAlZXJyb3ItdmVyYm9zZSAlbG9jYXRpb25zJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgNzg6IENhbGN1bGF0b3IgJWVycm9yLXZlcmJvc2UgJWxvY2F0aW9ucyAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICI3OC4gY2FsYy5hdDo1NjA6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KLQotCi0KLQotCi0KLQotCi0jIFVzaW5nIHlhY2MuYz8KLQotCi0KLQotCi0KLQotIyB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZiAlbG9jYXRpb24gJiAlcHVyZSAmICglZ2xyIG9yICVwYXJzZS1wYXJhbSkuCi0KLSMgeXllcnJvciBhbHdheXMgc2VlcyB0aGUgbG9jYXRpb25zICh3aGVuIGFjdGl2YXRlZCksIGV4Y2VwdCBpZgotIyB5YWNjICYgcHVyZSAmICFwYXJhbS4KLQotCi0jIFRoZSBpbnRlcmZhY2UgaXMgcHVyZTogZWl0aGVyIGJlY2F1c2UgJXB1cmUtcGFyc2VyLCBvciBiZWNhdXNlIHdlCi0jIGFyZSB1c2luZyB0aGUgQysrIHBhcnNlcnMuCi0KLQorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yMDcKKyNBVF9TVEFSVF8yMDgKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyMDggJ2NhbGMuYXQ6NjA4JyBcCisgICJDYWxjdWxhdG9yICVkZWZpbmUgYXBpLnB1c2gtcHVsbCBib3RoICVkZWZpbmUgYXBpLnB1cmUgZnVsbCAlbG9jYXRpb25zIiAiIiAxMQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjIwOC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIApAQCAtMjA2NjIsNTkgKzY4OTA0LDEzMjQgQEAKIAogCiBjYXQgPmNhbGMueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKy8qIEluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3ItLWNhbGMgKi8KKyVkZWZpbmUgYXBpLnB1c2gtcHVsbCBib3RoICVkZWZpbmUgYXBpLnB1cmUgZnVsbCAlbG9jYXRpb25zCisKKyVjb2RlIHJlcXVpcmVzCit7CisKKyAgLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KKyAgdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Cit9CisKKy8qIEV4ZXJjaXNlICV1bmlvbi4gKi8KKyV1bmlvbgoreworICBzZW1hbnRpY192YWx1ZSBpdmFsOworfTsKKyVwcmludGVyIHsgZnByaW50ZiAoeXlvdXRwdXQsICIlZCIsICQkKTsgfSA8aXZhbD47CisKKyVjb2RlIHByb3ZpZGVzCit7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICAvKiBUaGUgaW5wdXQuICAqLworICBleHRlcm4gRklMRSAqaW5wdXQ7CisgIGV4dGVybiBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0OworICBleHRlcm4gaW50IGdsb2JhbF9jb3VudDsKK30KKworJWNvZGUKK3sKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNkZWZpbmUgVVNFKFZhcikKKworRklMRSAqaW5wdXQ7CitzdGF0aWMgaW50IHBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KTsKKworc3RhdGljIHZvaWQgeXllcnJvciAoWVlMVFlQRSBjb25zdCAqIGNvbnN0IGxsb2NwLCAgY29uc3QgY2hhciAqbXNnKTsKK2ludCB5eWxleCAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKTsKK30KKworCisKKy8qIEJpc29uIERlY2xhcmF0aW9ucyAqLworJXRva2VuIENBTENfRU9GIDAgImVuZCBvZiBpbnB1dCIKKyV0b2tlbiA8aXZhbD4gTlVNICJudW1iZXIiCisldHlwZSAgPGl2YWw+IGV4cAorCislbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24gICAgICAgICAgICAqLworJWxlZnQgJy0nICcrJworJWxlZnQgJyonICcvJworJWxlZnQgTkVHICAgICAvKiBuZWdhdGlvbi0tdW5hcnkgbWludXMgKi8KKyVyaWdodCAnXicgICAgLyogZXhwb25lbnRpYXRpb24gICAgICAgICovCisKKy8qIEdyYW1tYXIgZm9sbG93cyAqLworJSUKK2lucHV0OgorICBsaW5lCit8IGlucHV0IGxpbmUgICAgICAgICB7ICB9Cis7CisKK2xpbmU6CisgICdcbicKK3wgZXhwICdcbicgICAgICAgICAgIHsgVVNFICgkMSk7IH0KKzsKKworZXhwOgorICBOVU0gICAgICAgICAgICAgICAgeyAkJCA9ICQxOyAgICAgICAgICAgICB9Cit8IGV4cCAnPScgZXhwCisgIHsKKyAgICBpZiAoJDEgIT0gJDMpCisgICAgICBmcHJpbnRmIChzdGRlcnIsICJjYWxjOiBlcnJvcjogJWQgIT0gJWRcbiIsICQxLCAkMyk7CisgICAgJCQgPSAkMTsKKyAgfQorfCBleHAgJysnIGV4cCAgICAgICAgeyAkJCA9ICQxICsgJDM7ICAgICAgICB9Cit8IGV4cCAnLScgZXhwICAgICAgICB7ICQkID0gJDEgLSAkMzsgICAgICAgIH0KK3wgZXhwICcqJyBleHAgICAgICAgIHsgJCQgPSAkMSAqICQzOyAgICAgICAgfQorfCBleHAgJy8nIGV4cCAgICAgICAgeyAkJCA9ICQxIC8gJDM7ICAgICAgICB9Cit8ICctJyBleHAgICVwcmVjIE5FRyB7ICQkID0gLSQyOyAgICAgICAgICAgIH0KK3wgZXhwICdeJyBleHAgICAgICAgIHsgJCQgPSBwb3dlciAoJDEsICQzKTsgfQorfCAnKCcgZXhwICcpJyAgICAgICAgeyAkJCA9ICQyOyAgICAgICAgICAgICB9Cit8ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgeXllcnJvazsgIH0KK3wgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQorfCAnLScgZXJyb3IgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9Cis7CislJQorCitzdGF0aWMgaW50Citwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKK3sKKyAgaW50IHJlcyA9IDE7CisgIGFzc2VydCAoMCA8PSBleHBvbmVudCk7CisgIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKKyAgICByZXMgKj0gYmFzZTsKKyAgcmV0dXJuIHJlczsKK30KKworCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKFlZTFRZUEUgY29uc3QgKiBjb25zdCBsbG9jcCwgIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgWVlfTE9DQVRJT05fUFJJTlQgKHN0ZGVyciwgKCpsbG9jcCkpOworICBmcHJpbnRmIChzdGRlcnIsICI6ICIpOworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKyNpbmNsdWRlIDxjdHlwZS5oPgorCitpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCk7CitzdGF0aWMgaW50IGdldF9jaGFyIChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApOworc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwLCAgaW50IGMpOworCisKK3N0YXRpYyBZWUxUWVBFIGxhc3RfeXlsbG9jOworCitzdGF0aWMgaW50CitnZXRfY2hhciAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKQoreworICBpbnQgcmVzID0gZ2V0YyAoaW5wdXQpOworICAodm9pZCkgbHZhbHA7KHZvaWQpIGxsb2NwOworCisgIGxhc3RfeXlsbG9jID0gKCpsbG9jcCk7CisgIGlmIChyZXMgPT0gJ1xuJykKKyAgICB7CisgICAgICAoKmxsb2NwKS5sYXN0X2xpbmUrKzsKKyAgICAgICgqbGxvY3ApLmxhc3RfY29sdW1uID0gMTsKKyAgICB9CisgIGVsc2UKKyAgICAoKmxsb2NwKS5sYXN0X2NvbHVtbisrOworCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkCit1bmdldF9jaGFyIChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3AsICBpbnQgYykKK3sKKyAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKKworICAvKiBXcm9uZyB3aGVuIEMgPT0gYFxuJy4gKi8KKyAgKCpsbG9jcCkgPSBsYXN0X3l5bGxvYzsKKworICB1bmdldGMgKGMsIGlucHV0KTsKK30KKworc3RhdGljIGludAorcmVhZF9zaWduZWRfaW50ZWdlciAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKQoreworICBpbnQgYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApOworICBpbnQgc2lnbiA9IDE7CisgIGludCBuID0gMDsKKworICAodm9pZCkgbHZhbHA7KHZvaWQpIGxsb2NwOworICBpZiAoYyA9PSAnLScpCisgICAgeworICAgICAgYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApOworICAgICAgc2lnbiA9IC0xOworICAgIH0KKworICB3aGlsZSAoaXNkaWdpdCAoYykpCisgICAgeworICAgICAgbiA9IDEwICogbiArIChjIC0gJzAnKTsKKyAgICAgIGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKTsKKyAgICB9CisKKyAgdW5nZXRfY2hhciAobHZhbHAsIGxsb2NwLCAgYyk7CisKKyAgcmV0dXJuIHNpZ24gKiBuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBMZXhpY2FsIGFuYWx5emVyIHJldHVybnMgYW4gaW50ZWdlciBvbiB0aGUgc3RhY2sgYW5kIHRoZSB0b2tlbiB8Cit8IE5VTSwgb3IgdGhlIEFTQ0lJIGNoYXJhY3RlciByZWFkIGlmIG5vdCBhIG51bWJlci4gIFNraXBzIGFsbCAgIHwKK3wgYmxhbmtzIGFuZCB0YWJzLCByZXR1cm5zIDAgZm9yIEVPRi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2ludCB5eWxleCAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKQoreworICBpbnQgYzsKKyAgLyogU2tpcCBjdXJyZW50IHRva2VuLCB0aGVuIHdoaXRlIHNwYWNlcy4gICovCisgIGRvCisgICAgeworICAgICAoKmxsb2NwKS5maXJzdF9jb2x1bW4gPSAoKmxsb2NwKS5sYXN0X2NvbHVtbjsKKyAgICAgICgqbGxvY3ApLmZpcnN0X2xpbmUgICA9ICgqbGxvY3ApLmxhc3RfbGluZTsKKworICAgIH0KKyAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCkpID09ICcgJyB8fCBjID09ICdcdCcpOworCisgIC8qIHByb2Nlc3MgbnVtYmVycyAgICovCisgIGlmIChjID09ICcuJyB8fCBpc2RpZ2l0IChjKSkKKyAgICB7CisgICAgICB1bmdldF9jaGFyIChsdmFscCwgbGxvY3AsICBjKTsKKyAgICAgICgqbHZhbHApLml2YWwgPSByZWFkX3NpZ25lZF9pbnRlZ2VyIChsdmFscCwgbGxvY3ApOworICAgICAgcmV0dXJuIE5VTTsKKyAgICB9CisKKyAgLyogUmV0dXJuIGVuZC1vZi1maWxlLiAgKi8KKyAgaWYgKGMgPT0gRU9GKQorICAgIHJldHVybiBDQUxDX0VPRjsKKworICAvKiBSZXR1cm4gc2luZ2xlIGNoYXJzLiAqLworICByZXR1cm4gYzsKK30KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxzZQorIyB1bmRlZiBhbGFybQorIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KICNlbmRpZgotJX0KKworCisKK3NlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOworaW50IGdsb2JhbF9jb3VudCA9IDA7CisKKy8qIEEgQyBtYWluIGZ1bmN0aW9uLiAgKi8KK2ludAorbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworICBzZW1hbnRpY192YWx1ZSByZXN1bHQgPSAwOworICBpbnQgY291bnQgPSAwOworICBpbnQgc3RhdHVzOworCisgIC8qIFRoaXMgdXNlZCB0byBiZSBhbGFybSAoMTApLCBidXQgdGhhdCBpc24ndCBlbm91Z2ggdGltZSBmb3IKKyAgICAgYSBKdWx5IDE5OTUgdmludGFnZSBERUMgQWxwaGFzdGF0aW9uIDIwMCA0LzEwMCBzeXN0ZW0sCisgICAgIGFjY29yZGluZyB0byBOZWxzb24gSC4gRi4gQmVlYmUuICAxMDAgc2Vjb25kcyBpcyBlbm91Z2guICAqLworICBhbGFybSAoMTAwKTsKKworICBpZiAoYXJnYyA9PSAyKQorICAgIGlucHV0ID0gZm9wZW4gKGFyZ3ZbMV0sICJyIik7CisgIGVsc2UKKyAgICBpbnB1dCA9IHN0ZGluOworCisgIGlmICghaW5wdXQpCisgICAgeworICAgICAgcGVycm9yIChhcmd2WzFdKTsKKyAgICAgIHJldHVybiAzOworICAgIH0KKworCisgIHN0YXR1cyA9IHl5cGFyc2UgKCk7CisgIGlmIChmY2xvc2UgKGlucHV0KSkKKyAgICBwZXJyb3IgKCJmY2xvc2UiKTsKKyAgYXNzZXJ0IChnbG9iYWxfcmVzdWx0ID09IHJlc3VsdCk7CisgIGFzc2VydCAoZ2xvYmFsX2NvdW50ID09IGNvdW50KTsKKyAgcmV0dXJuIHN0YXR1czsKK30KK19BVEVPRgorCisKKworCisKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2MDgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55IiAiY2FsYy5hdDo2MDgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjYwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2MDgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwODogYmlzb24gLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwODogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImNhbGMuYXQ6NjA4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwODogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUyIgImNhbGMuYXQ6NjA4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwODogXCRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCBcIlwkLjoge1wkX31cXG5cIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCBcJC4gPT0gMSkgJiYgL15cXHMqXCQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciBcIm1haW50XCIuCisgICAgICAgICMgfHwgL1xcc1wkLworICAgICAgICApJyBjYWxjLmMKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjA4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmMKKworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIFRlc3QgdGhlIHByaW9yaXRpZXMuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEgKyAyICogMyA9IDcKKzEgKyAyICogLTMgPSAtNQorCistMV4yID0gLTEKKygtMSleMiA9IDEKKworLS0tMSA9IC0xCisKKzEgLSAyIC0gMyA9IC00CisxIC0gKDIgLSAzKSA9IDIKKworMl4yXjMgPSAyNTYKKygyXjIpXjMgPSA2NAorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwODogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MDgiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwODogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisjIFNvbWUgc3ludGF4IGVycm9ycy4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMSAyCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwODogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMS8vMgorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwODogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MDgiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwODogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDg6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKK2Vycm9yCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICR1bmRlZmluZWQKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDg6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEgPSAyID0gMworX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwODogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MDgiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwODogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDg6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKworKzEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjA4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA4OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDgiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIgImNhbGMuYXQ6NjA4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwODogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBFeGVyY2lzZSB0aGUgZXJyb3IgdG9rZW46IHdpdGhvdXQgaXQsIHdlIGRpZSBhdCB0aGUgZmlyc3QgZXJyb3IsCisjIGhlbmNlIGJlIHN1cmUgdG8KKyMKKyMgLSBoYXZlIHNldmVyYWwgZXJyb3JzIHdoaWNoIGV4ZXJjaXNlIGRpZmZlcmVudCBzaGlmdC9kaXNjYXJkaW5ncworIyAgIC0gKCk6IG5vdGhpbmcgdG8gcG9wLCBub3RoaW5nIHRvIGRpc2NhcmQKKyMgICAtICgxICsgMSArIDEgKyk6IGEgbG90IHRvIHBvcCwgbm90aGluZyB0byBkaXNjYXJkCisjICAgLSAoKiAqICopOiBub3RoaW5nIHRvIHBvcCwgYSBsb3QgdG8gZGlzY2FyZAorIyAgIC0gKDEgKyAyICogKik6IHNvbWUgdG8gcG9wIGFuZCBkaXNjYXJkCisjCisjIC0gdGVzdCB0aGUgYWN0aW9uIGFzc29jaWF0ZWQgdG8gYGVycm9yJworIworIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCisjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKKyMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCisjCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygpICsgKDEgKyAxICsgMSArKSArICgqICogKikgKyAoMSAqIDIgKiAqKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjA4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjIzOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjQxOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitjYWxjOiBlcnJvcjogNDQ0NCAhPSAxCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA4OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDgiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIFRoZSBzYW1lLCBidXQgdGhpcyB0aW1lIGV4ZXJjaXNpbmcgZXhwbGljaXRseSB0cmlnZ2VyZWQgc3ludGF4IGVycm9ycy4KKyMgUE9TSVggc2F5cyB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoISkgKyAoMSAyKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjA4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4xMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorY2FsYzogZXJyb3I6IDIyMjIgIT0gMQorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwODogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKC0gKikgKyAoMSAyKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjA4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS40OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCitjYWxjOiBlcnJvcjogMjIyMiAhPSAxCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA4OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDgiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIENoZWNrIHRoYXQgeXllcnJvayB3b3JrcyBwcm9wZXJseTogc2Vjb25kIGVycm9yIGlzIG5vdCByZXBvcnRlZCwKKyMgdGhpcmQgYW5kIGZvdXJ0aCBhcmUuICBQYXJzZSBzdGF0dXMgaXMgc3VjY2VzZnVsbC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCogKikgKyAoKikgKyAoKikKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjA4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE2OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA4OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDgiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yMDgKKyNBVF9TVEFSVF8yMDkKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyMDkgJ2NhbGMuYXQ6NjA5JyBcCisgICJDYWxjdWxhdG9yICVlcnJvci12ZXJib3NlICVsb2NhdGlvbnMiICIgICAgICAgICAgICIgMTEKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyMDkuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisKKworCisKKworCisKKworY2F0ID5jYWxjLnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogLyogSW5maXggbm90YXRpb24gY2FsY3VsYXRvci0tY2FsYyAqLwogJWVycm9yLXZlcmJvc2UgJWxvY2F0aW9ucwogCi0lewotI2luY2x1ZGUgPHN0ZGlvLmg+CislY29kZSByZXF1aXJlcworewogCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaWYgSEFWRV9VTklTVERfSAotIyBpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbHNlCi0jIHVuZGVmIGFsYXJtCi0jIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLwotI2VuZGlmCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNkZWZpbmUgVVNFKFZhcikKLQotLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KLXR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOwotCi1zdGF0aWMgc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7Ci1zdGF0aWMgaW50IGdsb2JhbF9jb3VudCA9IDA7Ci0lfQorICAvKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLworICB0eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKK30KIAogLyogRXhlcmNpc2UgJXVuaW9uLiAqLwogJXVuaW9uCiB7CiAgIHNlbWFudGljX3ZhbHVlIGl2YWw7CiB9OworJXByaW50ZXIgeyBmcHJpbnRmICh5eW91dHB1dCwgIiVkIiwgJCQpOyB9IDxpdmFsPjsKIAotJXsKKyVjb2RlIHByb3ZpZGVzCit7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICAvKiBUaGUgaW5wdXQuICAqLworICBleHRlcm4gRklMRSAqaW5wdXQ7CisgIGV4dGVybiBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0OworICBleHRlcm4gaW50IGdsb2JhbF9jb3VudDsKK30KKworJWNvZGUKK3sKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNkZWZpbmUgVVNFKFZhcikKKworRklMRSAqaW5wdXQ7CiBzdGF0aWMgaW50IHBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KTsKLS8qIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmOgotICAgLSAlbG9jYXRpb24gJiAlcHVyZSAmICVnbHIKLSAgIC0gJWxvY2F0aW9uICYgJXB1cmUgJiAleWFjYyAmICVwYXJzZS1wYXJhbS4gKi8KLXN0YXRpYyB2b2lkIHl5ZXJyb3IgKAogCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzCi0gICAgICAgICAgICAgICAgICAgICApOwotc3RhdGljIGludCB5eWxleCAodm9pZCk7Ci1zdGF0aWMgaW50IGdldF9jaGFyICh2b2lkKTsKLXN0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKCBpbnQgYyk7Ci0lfQorc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CitpbnQgeXlsZXggKHZvaWQpOworfQogCiAKIApAQCAtMjA3MjMsNyArNzAyMzAsNyBAQAogJXRva2VuIDxpdmFsPiBOVU0gIm51bWJlciIKICV0eXBlICA8aXZhbD4gZXhwCiAKLSVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbgkgICAgICAgKi8KKyVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbiAgICAgICAgICAgICovCiAlbGVmdCAnLScgJysnCiAlbGVmdCAnKicgJy8nCiAlbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLwpAQCAtMjA3NTYsMzQgKzcwMjYzLDM4IEBACiB8ICctJyBleHAgICVwcmVjIE5FRyB7ICQkID0gLSQyOyAgICAgICAgICAgIH0KIHwgZXhwICdeJyBleHAgICAgICAgIHsgJCQgPSBwb3dlciAoJDEsICQzKTsgfQogfCAnKCcgZXhwICcpJyAgICAgICAgeyAkJCA9ICQyOyAgICAgICAgICAgICB9Ci18ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgICAgICAgICAgIH0KK3wgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyB5eWVycm9rOyAgfQogfCAnIScgICAgICAgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9CiB8ICctJyBlcnJvciAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KIDsKICUlCi0vKiBUaGUgaW5wdXQuICAqLwotc3RhdGljIEZJTEUgKmlucHV0OwogCi1zdGF0aWMgdm9pZAoteXllcnJvciAoCi0KLSAgICAgICAgIGNvbnN0IGNoYXIgKnMpCitzdGF0aWMgaW50Citwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKIHsKLQotCi0gIGZwcmludGYgKHN0ZGVyciwgIiVkLiVkIiwKLSAgICAgICAgICAgKHl5bGxvYykuZmlyc3RfbGluZSwgKHl5bGxvYykuZmlyc3RfY29sdW1uKTsKLSAgaWYgKCh5eWxsb2MpLmZpcnN0X2xpbmUgIT0gKHl5bGxvYykubGFzdF9saW5lKQotICAgIGZwcmludGYgKHN0ZGVyciwgIi0lZC4lZCIsCi0JICAgICAoeXlsbG9jKS5sYXN0X2xpbmUsICAoeXlsbG9jKS5sYXN0X2NvbHVtbiAtIDEpOwotICBlbHNlIGlmICgoeXlsbG9jKS5maXJzdF9jb2x1bW4gIT0gKHl5bGxvYykubGFzdF9jb2x1bW4gLSAxKQotICAgIGZwcmludGYgKHN0ZGVyciwgIi0lZCIsCi0JICAgICAoeXlsbG9jKS5sYXN0X2NvbHVtbiAtIDEpOwotICBmcHJpbnRmIChzdGRlcnIsICI6ICIpOwotICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgcyk7CisgIGludCByZXMgPSAxOworICBhc3NlcnQgKDAgPD0gZXhwb25lbnQpOworICBmb3IgKC8qIE5pZW50ZSAqLzsgZXhwb25lbnQ7IC0tZXhwb25lbnQpCisgICAgcmVzICo9IGJhc2U7CisgIHJldHVybiByZXM7CiB9CiAKIAorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBZWV9MT0NBVElPTl9QUklOVCAoc3RkZXJyLCAoeXlsbG9jKSk7CisgIGZwcmludGYgKHN0ZGVyciwgIjogIik7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorI2luY2x1ZGUgPGN0eXBlLmg+CisKK2ludCB5eWxleCAodm9pZCk7CitzdGF0aWMgaW50IGdldF9jaGFyICh2b2lkKTsKK3N0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKCBpbnQgYyk7CisKIAogc3RhdGljIFlZTFRZUEUgbGFzdF95eWxsb2M7CiAKQEAgLTIwNzk3LDcgKzcwMzA4LDcgQEAKICAgaWYgKHJlcyA9PSAnXG4nKQogICAgIHsKICAgICAgICh5eWxsb2MpLmxhc3RfbGluZSsrOwotICAgICAgKHl5bGxvYykubGFzdF9jb2x1bW4gPSAwOworICAgICAgKHl5bGxvYykubGFzdF9jb2x1bW4gPSAxOwogICAgIH0KICAgZWxzZQogICAgICh5eWxsb2MpLmxhc3RfY29sdW1uKys7CkBAIC0yMDgwNSw3ICs3MDMxNiw2IEBACiAgIHJldHVybiByZXM7CiB9CiAKLQogc3RhdGljIHZvaWQKIHVuZ2V0X2NoYXIgKCBpbnQgYykKIHsKQEAgLTIwODQzLDQwICs3MDM1MywyMyBAQAogfQogCiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IExleGljYWwgYW5hbHl6ZXIgcmV0dXJucyBhbiBpbnRlZ2VyIG9uIHRoZSBzdGFjayBhbmQgdGhlIHRva2VuIHwKIHwgTlVNLCBvciB0aGUgQVNDSUkgY2hhcmFjdGVyIHJlYWQgaWYgbm90IGEgbnVtYmVyLiAgU2tpcHMgYWxsICAgfAogfCBibGFua3MgYW5kIHRhYnMsIHJldHVybnMgMCBmb3IgRU9GLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludAoteXlsZXggKHZvaWQpCitpbnQgeXlsZXggKHZvaWQpCiB7Ci0gIHN0YXRpYyBpbnQgaW5pdCA9IDE7CiAgIGludCBjOwotCi0gIGlmIChpbml0KQotICAgIHsKLSAgICAgIGluaXQgPSAwOwotCi0gICAgICAoeXlsbG9jKS5sYXN0X2NvbHVtbiA9IDA7Ci0gICAgICAoeXlsbG9jKS5sYXN0X2xpbmUgPSAxOwotCi0gICAgfQotCi0KLSAoeXlsbG9jKS5maXJzdF9jb2x1bW4gPSAoeXlsbG9jKS5sYXN0X2NvbHVtbjsKLSAgKHl5bGxvYykuZmlyc3RfbGluZSAgID0gKHl5bGxvYykubGFzdF9saW5lOwotCi0KLSAgLyogU2tpcCB3aGl0ZSBzcGFjZS4gICovCi0gIHdoaWxlICgoYyA9IGdldF9jaGFyICgpKSA9PSAnICcgfHwgYyA9PSAnXHQnKQorICAvKiBTa2lwIGN1cnJlbnQgdG9rZW4sIHRoZW4gd2hpdGUgc3BhY2VzLiAgKi8KKyAgZG8KICAgICB7CiAgICAgICh5eWxsb2MpLmZpcnN0X2NvbHVtbiA9ICh5eWxsb2MpLmxhc3RfY29sdW1uOwogICAgICAgKHl5bGxvYykuZmlyc3RfbGluZSAgID0gKHl5bGxvYykubGFzdF9saW5lOwogCiAgICAgfQorICB3aGlsZSAoKGMgPSBnZXRfY2hhciAoKSkgPT0gJyAnIHx8IGMgPT0gJ1x0Jyk7CiAKICAgLyogcHJvY2VzcyBudW1iZXJzICAgKi8KICAgaWYgKGMgPT0gJy4nIHx8IGlzZGlnaXQgKGMpKQpAQCAtMjA4OTQsMTggKzcwMzg3LDIwIEBACiAgIHJldHVybiBjOwogfQogCi1zdGF0aWMgaW50Ci1wb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKLXsKLSAgaW50IHJlcyA9IDE7Ci0gIGlmIChleHBvbmVudCA8IDApCi0gICAgZXhpdCAoMyk7Ci0gIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKLSAgICByZXMgKj0gYmFzZTsKLSAgcmV0dXJuIHJlczsKLX0KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2Vsc2UKKyMgdW5kZWYgYWxhcm0KKyMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCisjZW5kaWYKIAogCisKK3NlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOworaW50IGdsb2JhbF9jb3VudCA9IDA7CisKKy8qIEEgQyBtYWluIGZ1bmN0aW9uLiAgKi8KIGludAogbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewpAQCAtMjA5MzEsMTAgKzcwNDI2LDEwIEBACiAKIAogICBzdGF0dXMgPSB5eXBhcnNlICgpOwotICBpZiAoZ2xvYmFsX3Jlc3VsdCAhPSByZXN1bHQpCi0gICAgYWJvcnQgKCk7Ci0gIGlmIChnbG9iYWxfY291bnQgIT0gY291bnQpCi0gICAgYWJvcnQgKCk7CisgIGlmIChmY2xvc2UgKGlucHV0KSkKKyAgICBwZXJyb3IgKCJmY2xvc2UiKTsKKyAgYXNzZXJ0IChnbG9iYWxfcmVzdWx0ID09IHJlc3VsdCk7CisgIGFzc2VydCAoZ2xvYmFsX2NvdW50ID09IGNvdW50KTsKICAgcmV0dXJuIHN0YXR1czsKIH0KIF9BVEVPRgpAQCAtMjA5NDMsNTUgKzcwNDM4LDE1MSBAQAogCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2MDogYmlzb24gLW8gY2FsYy5jIGNhbGMueSIKLWVjaG8gY2FsYy5hdDo1NjAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjYwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiICJjYWxjLmF0OjYwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjA5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjYwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5OiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDkiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSAgICRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NjA6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgXCRMSUJTIgotZWNobyBjYWxjLmF0OjU2MCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jICRMSUJTICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTYwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisgICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDk6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJjYWxjLmF0OjYwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDk6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgJExJQlMiICJjYWxjLmF0OjYwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5OiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuYworIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2MDkiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuYworCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKwogCiAKICMgVGVzdCB0aGUgcHJpb3JpdGllcy4KQEAgLTIxMDExLDYyICs3MDYwMiw2NiBAQAogKDJeMileMyA9IDY0CiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2MDogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU2MCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2MDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogCiAjIFNvbWUgc3ludGF4IGVycm9ycy4KIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotMCAwCisxIDIKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTYwOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTYwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTYwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjA5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTIxMDc3LDE4ICs3MDY3MiwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMjEwOTYsNjAgKzcwNjkzLDUwIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTYwOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU2MCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiAxLy8yCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2MDogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU2MCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2MDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0yMTE2MCwxOCArNzA3NDcsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJy8nLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTIxMTc5LDYwICs3MDc2OCw1MCBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2MDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NjAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTYwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogZXJyb3IKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTYwOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTYwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTYwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjA5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTIxMjQzLDE4ICs3MDgyMiwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0yMTI2Miw2MCArNzA4NDMsNTAgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NjA6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTYwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2MDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKIDEgPSAyID0gMwogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NjA6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NjAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MDkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMjEzMjYsMTggKzcwODk3LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjY6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPScKKzEuNzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0yMTM0NSwzMCArNzA5MTgsMTggQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NjA6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTYwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2MDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKQEAgLTIxMzc2LDMwICs3MDkzNywzMiBAQAogKzEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTYwOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTYwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTYwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjA5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTIxNDEwLDE4ICs3MDk3MywyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMi4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCisyLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKycKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMjE0MjksNTcgKzcwOTk0LDQ3IEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTYwOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU2MCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2MDogXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKLWVjaG8gY2FsYy5hdDo1NjAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTYwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo2MDkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTIxNDkwLDE4ICs3MTA0NSwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMjE1MDksMzAgKzcxMDY2LDE4IEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTYwOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU2MCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCkBAIC0yMTU0Nyw4ICs3MTA5Miw4IEBACiAjCiAjIC0gdGVzdCB0aGUgYWN0aW9uIGFzc29jaWF0ZWQgdG8gYGVycm9yJwogIwotIyAtIGNoZWNrIHRoZSBsb29rLWFoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAotIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2stYWhlYWQgY2F1c2luZyB0aGUKKyMgLSBjaGVjayB0aGUgbG9va2FoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAorIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZQogIyAgIGZpcnN0IGVycm9yIGlzICIpIiwgd2hpY2ggaXMgbmVlZGVkIHRvIHJlY292ZXIgZnJvbSB0aGUgZXJyb3IgYW5kCiAjICAgcHJvZHVjZSB0aGUgIjAiIHRoYXQgdHJpZ2dlcnMgdGhlICIwICE9IDEiIGVycm9yLgogIwpAQCAtMjE1NTYsMzAgKzcxMTAxLDMyIEBACiAoKSArICgxICsgMSArIDEgKykgKyAoKiAqICopICsgKDEgKiAyICogKikgPSAxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2MDogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU2MCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2MDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0yMTU5MCwyMSArNzExMzcsMjMgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwotMS4xNzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwotMS4yMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwotMS40MDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjIzOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjQxOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCiBjYWxjOiBlcnJvcjogNDQ0NCAhPSAxCiBfQVRFT0YKIApAQCAtMjE2MTMsNjMgKzcxMTYyLDUzIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTYwOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU2MCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAjIFRoZSBzYW1lLCBidXQgdGhpcyB0aW1lIGV4ZXJjaXNpbmcgZXhwbGljaXRseSB0cmlnZ2VyZWQgc3ludGF4IGVycm9ycy4KLSMgUE9TSVggc2F5cyB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KKyMgUE9TSVggc2F5cyB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0oISkgKyAoMCAwKSA9IDEKKyghKSArICgxIDIpID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NjA6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NjAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MDkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMjE2ODAsMTggKzcxMjE5LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjk6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKIGNhbGM6IGVycm9yOiAyMjIyICE9IDEKIF9BVEVPRgogCkBAIC0yMTcwMCw2MCArNzEyNDEsNTAgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NjA6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTYwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2MDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLSgtICopICsgKDAgMCkgPSAxCisoLSAqKSArICgxIDIpID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NjA6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NjAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MDkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMjE3NjQsMTkgKzcxMjk1LDIxIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogY2FsYzogZXJyb3I6IDIyMjIgIT0gMQogX0FURU9GCiAKQEAgLTIxNzg1LDk0ICs3MTMxOCwxMTUgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NjA6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTYwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2MDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MDkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKIAotJGF0X3RyYWNlb24KKworIyBDaGVjayB0aGF0IHl5ZXJyb2sgd29ya3MgcHJvcGVybHk6IHNlY29uZCBlcnJvciBpcyBub3QgcmVwb3J0ZWQsCisjIHRoaXJkIGFuZCBmb3VydGggYXJlLiAgUGFyc2Ugc3RhdHVzIGlzIHN1Y2Nlc2Z1bGwuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygqICopICsgKCopICsgKCopCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjA5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYwOTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjA5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAogCiAKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Ci0KLSAgNzkgKSAjIDc5LiBjYWxjLmF0OjU2MjogQ2FsY3VsYXRvciAlZXJyb3ItdmVyYm9zZSAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MKLSAgICBhdF9zZXR1cF9saW5lPSdjYWxjLmF0OjU2MicKLSAgICBhdF9kZXNjPSdDYWxjdWxhdG9yICVlcnJvci12ZXJib3NlICVsb2NhdGlvbnMgJWRlZmluZXMgJW5hbWUtcHJlZml4PSJjYWxjIiAldmVyYm9zZSAleWFjYycKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDc5OiBDYWxjdWxhdG9yICVlcnJvci12ZXJib3NlICVsb2NhdGlvbnMgJWRlZmluZXMgJW5hbWUtcHJlZml4PSJjYWxjIiAldmVyYm9zZSAleWFjYyRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICI3OS4gY2FsYy5hdDo1NjI6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KLQotCi0KLQotCi0KLQotCi0jIFVzaW5nIHlhY2MuYz8KLQotCi0KLQotCi0KLQotIyB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZiAlbG9jYXRpb24gJiAlcHVyZSAmICglZ2xyIG9yICVwYXJzZS1wYXJhbSkuCi0KLSMgeXllcnJvciBhbHdheXMgc2VlcyB0aGUgbG9jYXRpb25zICh3aGVuIGFjdGl2YXRlZCksIGV4Y2VwdCBpZgotIyB5YWNjICYgcHVyZSAmICFwYXJhbS4KLQotCi0jIFRoZSBpbnRlcmZhY2UgaXMgcHVyZTogZWl0aGVyIGJlY2F1c2UgJXB1cmUtcGFyc2VyLCBvciBiZWNhdXNlIHdlCi0jIGFyZSB1c2luZyB0aGUgQysrIHBhcnNlcnMuCi0KLQorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yMDkKKyNBVF9TVEFSVF8yMTAKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyMTAgJ2NhbGMuYXQ6NjExJyBcCisgICJDYWxjdWxhdG9yICVlcnJvci12ZXJib3NlICVsb2NhdGlvbnMgJWRlZmluZXMgJW5hbWUtcHJlZml4IFwiY2FsY1wiICV2ZXJib3NlICV5YWNjIiAiIiAxMQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjIxMC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIApAQCAtMjE4ODQsNTkgKzcxNDM4LDUyIEBACiAKIAogY2F0ID5jYWxjLnkgPDwnX0FURU9GJwotJXsKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotICAvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KLSMgdW5kZWYgbWFsbG9jCi0jIHVuZGVmIG1lbWNtcAotIyB1bmRlZiByZWFsbG9jCi0jZW5kaWYKLSV9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCiAvKiBJbmZpeCBub3RhdGlvbiBjYWxjdWxhdG9yLS1jYWxjICovCi0lZXJyb3ItdmVyYm9zZSAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MKKyVlcnJvci12ZXJib3NlICVsb2NhdGlvbnMgJWRlZmluZXMgJW5hbWUtcHJlZml4ICJjYWxjIiAldmVyYm9zZSAleWFjYwogCi0lewotI2luY2x1ZGUgPHN0ZGlvLmg+CislY29kZSByZXF1aXJlcworewogCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaWYgSEFWRV9VTklTVERfSAotIyBpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbHNlCi0jIHVuZGVmIGFsYXJtCi0jIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLwotI2VuZGlmCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNkZWZpbmUgVVNFKFZhcikKLQotLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KLXR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOwotCi1zdGF0aWMgc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7Ci1zdGF0aWMgaW50IGdsb2JhbF9jb3VudCA9IDA7Ci0lfQorICAvKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLworICB0eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKK30KIAogLyogRXhlcmNpc2UgJXVuaW9uLiAqLwogJXVuaW9uCiB7CiAgIHNlbWFudGljX3ZhbHVlIGl2YWw7CiB9OworJXByaW50ZXIgeyBmcHJpbnRmICh5eW91dHB1dCwgIiVkIiwgJCQpOyB9IDxpdmFsPjsKIAotJXsKKyVjb2RlIHByb3ZpZGVzCit7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICAvKiBUaGUgaW5wdXQuICAqLworICBleHRlcm4gRklMRSAqaW5wdXQ7CisgIGV4dGVybiBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0OworICBleHRlcm4gaW50IGdsb2JhbF9jb3VudDsKK30KKworJWNvZGUKK3sKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNkZWZpbmUgVVNFKFZhcikKKworRklMRSAqaW5wdXQ7CiBzdGF0aWMgaW50IHBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KTsKLS8qIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmOgotICAgLSAlbG9jYXRpb24gJiAlcHVyZSAmICVnbHIKLSAgIC0gJWxvY2F0aW9uICYgJXB1cmUgJiAleWFjYyAmICVwYXJzZS1wYXJhbS4gKi8KLXN0YXRpYyB2b2lkIHl5ZXJyb3IgKAogCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzCi0gICAgICAgICAgICAgICAgICAgICApOwotc3RhdGljIGludCB5eWxleCAodm9pZCk7Ci1zdGF0aWMgaW50IGdldF9jaGFyICh2b2lkKTsKLXN0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKCBpbnQgYyk7Ci0lfQorc3RhdGljIHZvaWQgY2FsY2Vycm9yICggY29uc3QgY2hhciAqbXNnKTsKK2ludCBjYWxjbGV4ICh2b2lkKTsKK30KIAogCiAKQEAgLTIxOTQ1LDcgKzcxNDkyLDcgQEAKICV0b2tlbiA8aXZhbD4gTlVNICJudW1iZXIiCiAldHlwZSAgPGl2YWw+IGV4cAogCi0lbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24JICAgICAgICovCislbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24gICAgICAgICAgICAqLwogJWxlZnQgJy0nICcrJwogJWxlZnQgJyonICcvJwogJWxlZnQgTkVHICAgICAvKiBuZWdhdGlvbi0tdW5hcnkgbWludXMgKi8KQEAgLTIxOTc4LDM0ICs3MTUyNSw1MSBAQAogfCAnLScgZXhwICAlcHJlYyBORUcgeyAkJCA9IC0kMjsgICAgICAgICAgICB9CiB8IGV4cCAnXicgZXhwICAgICAgICB7ICQkID0gcG93ZXIgKCQxLCAkMyk7IH0KIHwgJygnIGV4cCAnKScgICAgICAgIHsgJCQgPSAkMjsgICAgICAgICAgICAgfQotfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7ICAgICAgICAgICB9Cit8ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgeXllcnJvazsgIH0KIHwgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQogfCAnLScgZXJyb3IgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9CiA7CiAlJQotLyogVGhlIGlucHV0LiAgKi8KLXN0YXRpYyBGSUxFICppbnB1dDsKIAotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKAotCi0gICAgICAgICBjb25zdCBjaGFyICpzKQorc3RhdGljIGludAorcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpCiB7Ci0KLQotICBmcHJpbnRmIChzdGRlcnIsICIlZC4lZCIsCi0gICAgICAgICAgICh5eWxsb2MpLmZpcnN0X2xpbmUsICh5eWxsb2MpLmZpcnN0X2NvbHVtbik7Ci0gIGlmICgoeXlsbG9jKS5maXJzdF9saW5lICE9ICh5eWxsb2MpLmxhc3RfbGluZSkKLSAgICBmcHJpbnRmIChzdGRlcnIsICItJWQuJWQiLAotCSAgICAgKHl5bGxvYykubGFzdF9saW5lLCAgKHl5bGxvYykubGFzdF9jb2x1bW4gLSAxKTsKLSAgZWxzZSBpZiAoKHl5bGxvYykuZmlyc3RfY29sdW1uICE9ICh5eWxsb2MpLmxhc3RfY29sdW1uIC0gMSkKLSAgICBmcHJpbnRmIChzdGRlcnIsICItJWQiLAotCSAgICAgKHl5bGxvYykubGFzdF9jb2x1bW4gLSAxKTsKLSAgZnByaW50ZiAoc3RkZXJyLCAiOiAiKTsKLSAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIHMpOworICBpbnQgcmVzID0gMTsKKyAgYXNzZXJ0ICgwIDw9IGV4cG9uZW50KTsKKyAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQorICAgIHJlcyAqPSBiYXNlOworICByZXR1cm4gcmVzOwogfQogCiAKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgY2FsY2Vycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBZWV9MT0NBVElPTl9QUklOVCAoc3RkZXJyLCAoY2FsY2xsb2MpKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiOiAiKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CitfQVRFT0YKKworCisKK2NhdCA+Y2FsYy1sZXguYyA8PCdfQVRFT0YnCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCisKKyNpbmNsdWRlICJjYWxjLmgiCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCitpbnQgY2FsY2xleCAodm9pZCk7CitzdGF0aWMgaW50IGdldF9jaGFyICh2b2lkKTsKK3N0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKCBpbnQgYyk7CisKIAogc3RhdGljIFlZTFRZUEUgbGFzdF95eWxsb2M7CiAKQEAgLTIyMDE1LDI2ICs3MTU3OSwyNSBAQAogICBpbnQgcmVzID0gZ2V0YyAoaW5wdXQpOwogICA7CiAKLSAgbGFzdF95eWxsb2MgPSAoeXlsbG9jKTsKKyAgbGFzdF95eWxsb2MgPSAoY2FsY2xsb2MpOwogICBpZiAocmVzID09ICdcbicpCiAgICAgewotICAgICAgKHl5bGxvYykubGFzdF9saW5lKys7Ci0gICAgICAoeXlsbG9jKS5sYXN0X2NvbHVtbiA9IDA7CisgICAgICAoY2FsY2xsb2MpLmxhc3RfbGluZSsrOworICAgICAgKGNhbGNsbG9jKS5sYXN0X2NvbHVtbiA9IDE7CiAgICAgfQogICBlbHNlCi0gICAgKHl5bGxvYykubGFzdF9jb2x1bW4rKzsKKyAgICAoY2FsY2xsb2MpLmxhc3RfY29sdW1uKys7CiAKICAgcmV0dXJuIHJlczsKIH0KIAotCiBzdGF0aWMgdm9pZAogdW5nZXRfY2hhciAoIGludCBjKQogewogICA7CiAKICAgLyogV3Jvbmcgd2hlbiBDID09IGBcbicuICovCi0gICh5eWxsb2MpID0gbGFzdF95eWxsb2M7CisgIChjYWxjbGxvYykgPSBsYXN0X3l5bGxvYzsKIAogICB1bmdldGMgKGMsIGlucHV0KTsKIH0KQEAgLTIyMDY1LDQ2ICs3MTYyOCwyOSBAQAogfQogCiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IExleGljYWwgYW5hbHl6ZXIgcmV0dXJucyBhbiBpbnRlZ2VyIG9uIHRoZSBzdGFjayBhbmQgdGhlIHRva2VuIHwKIHwgTlVNLCBvciB0aGUgQVNDSUkgY2hhcmFjdGVyIHJlYWQgaWYgbm90IGEgbnVtYmVyLiAgU2tpcHMgYWxsICAgfAogfCBibGFua3MgYW5kIHRhYnMsIHJldHVybnMgMCBmb3IgRU9GLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludAoteXlsZXggKHZvaWQpCitpbnQgY2FsY2xleCAodm9pZCkKIHsKLSAgc3RhdGljIGludCBpbml0ID0gMTsKICAgaW50IGM7Ci0KLSAgaWYgKGluaXQpCisgIC8qIFNraXAgY3VycmVudCB0b2tlbiwgdGhlbiB3aGl0ZSBzcGFjZXMuICAqLworICBkbwogICAgIHsKLSAgICAgIGluaXQgPSAwOwotCi0gICAgICAoeXlsbG9jKS5sYXN0X2NvbHVtbiA9IDA7Ci0gICAgICAoeXlsbG9jKS5sYXN0X2xpbmUgPSAxOworICAgICAoY2FsY2xsb2MpLmZpcnN0X2NvbHVtbiA9IChjYWxjbGxvYykubGFzdF9jb2x1bW47CisgICAgICAoY2FsY2xsb2MpLmZpcnN0X2xpbmUgICA9IChjYWxjbGxvYykubGFzdF9saW5lOwogCiAgICAgfQotCi0KLSAoeXlsbG9jKS5maXJzdF9jb2x1bW4gPSAoeXlsbG9jKS5sYXN0X2NvbHVtbjsKLSAgKHl5bGxvYykuZmlyc3RfbGluZSAgID0gKHl5bGxvYykubGFzdF9saW5lOwotCi0KLSAgLyogU2tpcCB3aGl0ZSBzcGFjZS4gICovCi0gIHdoaWxlICgoYyA9IGdldF9jaGFyICgpKSA9PSAnICcgfHwgYyA9PSAnXHQnKQotICAgIHsKLSAgICAgKHl5bGxvYykuZmlyc3RfY29sdW1uID0gKHl5bGxvYykubGFzdF9jb2x1bW47Ci0gICAgICAoeXlsbG9jKS5maXJzdF9saW5lICAgPSAoeXlsbG9jKS5sYXN0X2xpbmU7Ci0KLSAgICB9CisgIHdoaWxlICgoYyA9IGdldF9jaGFyICgpKSA9PSAnICcgfHwgYyA9PSAnXHQnKTsKIAogICAvKiBwcm9jZXNzIG51bWJlcnMgICAqLwogICBpZiAoYyA9PSAnLicgfHwgaXNkaWdpdCAoYykpCiAgICAgewogICAgICAgdW5nZXRfY2hhciAoIGMpOwotICAgICAgKHl5bHZhbCkuaXZhbCA9IHJlYWRfc2lnbmVkX2ludGVnZXIgKCk7CisgICAgICAoY2FsY2x2YWwpLml2YWwgPSByZWFkX3NpZ25lZF9pbnRlZ2VyICgpOwogICAgICAgcmV0dXJuIE5VTTsKICAgICB9CiAKQEAgLTIyMTE1LDE5ICs3MTY2MSwzMiBAQAogICAvKiBSZXR1cm4gc2luZ2xlIGNoYXJzLiAqLwogICByZXR1cm4gYzsKIH0KLQotc3RhdGljIGludAotcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpCi17Ci0gIGludCByZXMgPSAxOwotICBpZiAoZXhwb25lbnQgPCAwKQotICAgIGV4aXQgKDMpOwotICBmb3IgKC8qIE5pZW50ZSAqLzsgZXhwb25lbnQ7IC0tZXhwb25lbnQpCi0gICAgcmVzICo9IGJhc2U7Ci0gIHJldHVybiByZXM7Ci19CitfQVRFT0YKIAogCitjYXQgPmNhbGMtbWFpbi5jIDw8J19BVEVPRicKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKKworI2luY2x1ZGUgImNhbGMuaCIKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxzZQorIyB1bmRlZiBhbGFybQorIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KKyNlbmRpZgorCisKKworc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7CitpbnQgZ2xvYmFsX2NvdW50ID0gMDsKKworLyogQSBDIG1haW4gZnVuY3Rpb24uICAqLwogaW50CiBtYWluIChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CkBAIC0yMjE1MiwxMSArNzE3MTEsMTEgQEAKICAgICB9CiAKIAotICBzdGF0dXMgPSB5eXBhcnNlICgpOwotICBpZiAoZ2xvYmFsX3Jlc3VsdCAhPSByZXN1bHQpCi0gICAgYWJvcnQgKCk7Ci0gIGlmIChnbG9iYWxfY291bnQgIT0gY291bnQpCi0gICAgYWJvcnQgKCk7CisgIHN0YXR1cyA9IGNhbGNwYXJzZSAoKTsKKyAgaWYgKGZjbG9zZSAoaW5wdXQpKQorICAgIHBlcnJvciAoImZjbG9zZSIpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOwogICByZXR1cm4gc3RhdHVzOwogfQogX0FURU9GCkBAIC0yMjE2NSw1NSArNzE3MjQsMTc4IEBACiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTYyOiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgotZWNobyBjYWxjLmF0OjU2MiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gY2FsYy5jIGNhbGMueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2MjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjYxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiICJjYWxjLmF0OjYxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjExIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjYxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExOiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTEiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSAgICRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NjI6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgXCRMSUJTIgotZWNobyBjYWxjLmF0OjU2MiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jICRMSUJTICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTYyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisgICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTE6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJjYWxjLmF0OjYxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTE6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgY2FsYy1sZXguYyBjYWxjLW1haW4uYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBjYWxjLWxleC5jIGNhbGMtbWFpbi5jICRMSUJTIiAiY2FsYy5hdDo2MTEiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jIGNhbGMtbGV4LmMgY2FsYy1tYWluLmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExOiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuYworIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2MTEiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuYworCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExOiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuaAorIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2MTEiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuaAorCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAjIFRlc3QgdGhlIHByaW9yaXRpZXMuCkBAIC0yMjIzMyw2MiArNzE5MTUsNjYgQEAKICgyXjIpXjMgPSA2NAogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NjI6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NjIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MTEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKIAogIyBTb21lIHN5bnRheCBlcnJvcnMuCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLTAgMAorMSAyCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2MjogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU2MiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2MjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjExIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0yMjI5OSwxOCArNzE5ODUsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTIyMzE4LDYwICs3MjAwNiw1MCBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2MjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NjIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTYyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjExIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMS8vMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NjI6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NjIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MTEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMjIzODIsMTggKzcyMDYwLDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0yMjQwMSw2MCArNzIwODEsNTAgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NjI6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTYyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2MjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTE6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKIGVycm9yCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2MjogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU2MiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2MjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjExIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0yMjQ2NSwxOCArNzIxMzUsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICR1bmRlZmluZWQKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICR1bmRlZmluZWQKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMjI0ODQsNjAgKzcyMTU2LDUwIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTYyOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU2MiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTEiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiAxID0gMiA9IDMKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTYyOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTYyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTYyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTE6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjExIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTIyNTQ4LDE4ICs3MjIxMCwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS42OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCisxLjc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPScKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMjI1NjcsMzAgKzcyMjMxLDE4IEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTYyOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU2MiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTEiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCkBAIC0yMjU5OCwzMCArNzIyNTAsMzIgQEAKICsxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2MjogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU2MiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2MjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjExIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0yMjYzMiwxOCArNzIyODYsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTIuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTIyNjUxLDU3ICs3MjMwNyw0NyBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2MjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NjIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTYyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjExIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKICMgRXhlcmNpc2UgZXJyb3IgbWVzc2FnZXMgd2l0aCBFT0Y6IHdvcmsgb24gYW4gZW1wdHkgZmlsZS4KLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NjI6IFwkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiCi1lY2hvIGNhbGMuYXQ6NTYyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2MjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExOiAgXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIgImNhbGMuYXQ6NjExIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjExIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0yMjcxMiwxOCArNzIzNTgsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTIyNzMxLDMwICs3MjM3OSwxOCBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2MjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NjIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTYyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjExIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIApAQCAtMjI3NjksOCArNzI0MDUsOCBAQAogIwogIyAtIHRlc3QgdGhlIGFjdGlvbiBhc3NvY2lhdGVkIHRvIGBlcnJvcicKICMKLSMgLSBjaGVjayB0aGUgbG9vay1haGVhZCB0aGF0IHRyaWdnZXJzIGFuIGVycm9yIGlzIG5vdCBkaXNjYXJkZWQKLSMgICB3aGVuIHdlIGVudGVyIGVycm9yIHJlY292ZXJ5LiAgQmVsb3csIHRoZSBsb29rLWFoZWFkIGNhdXNpbmcgdGhlCisjIC0gY2hlY2sgdGhlIGxvb2thaGVhZCB0aGF0IHRyaWdnZXJzIGFuIGVycm9yIGlzIG5vdCBkaXNjYXJkZWQKKyMgICB3aGVuIHdlIGVudGVyIGVycm9yIHJlY292ZXJ5LiAgQmVsb3csIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUKICMgICBmaXJzdCBlcnJvciBpcyAiKSIsIHdoaWNoIGlzIG5lZWRlZCB0byByZWNvdmVyIGZyb20gdGhlIGVycm9yIGFuZAogIyAgIHByb2R1Y2UgdGhlICIwIiB0aGF0IHRyaWdnZXJzIHRoZSAiMCAhPSAxIiBlcnJvci4KICMKQEAgLTIyNzc4LDMwICs3MjQxNCwzMiBAQAogKCkgKyAoMSArIDEgKyAxICspICsgKCogKiAqKSArICgxICogMiAqICopID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NjI6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NjIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MTEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMjI4MTIsMjEgKzcyNDUwLDIzIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuNDA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xODogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4yMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS40MTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogY2FsYzogZXJyb3I6IDQ0NDQgIT0gMQogX0FURU9GCiAKQEAgLTIyODM1LDYzICs3MjQ3NSw1MyBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2MjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NjIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTYyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjExIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAogIyBUaGUgc2FtZSwgYnV0IHRoaXMgdGltZSBleGVyY2lzaW5nIGV4cGxpY2l0bHkgdHJpZ2dlcmVkIHN5bnRheCBlcnJvcnMuCi0jIFBPU0lYIHNheXMgdGhlIGxvb2stYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCisjIFBPU0lYIHNheXMgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotKCEpICsgKDAgMCkgPSAxCisoISkgKyAoMSAyKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTYyOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTYyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTYyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTE6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjExIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTIyOTAyLDE4ICs3MjUzMiwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS45OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCiBfQVRFT0YKIApAQCAtMjI5MjIsNjAgKzcyNTU0LDUwIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTYyOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU2MiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTEiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0oLSAqKSArICgwIDApID0gMQorKC0gKikgKyAoMSAyKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTYyOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTYyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTYyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTE6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjExIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTIyOTg2LDE5ICs3MjYwOCwyMSBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjExOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjQ6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKIGNhbGM6IGVycm9yOiAyMjIyICE9IDEKIF9BVEVPRgogCkBAIC0yMzAwNyw5NCArNzI2MzEsMTE1IEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTYyOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU2MiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjExIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCiAKLSRhdF90cmFjZW9uCisKKyMgQ2hlY2sgdGhhdCB5eWVycm9rIHdvcmtzIHByb3Blcmx5OiBzZWNvbmQgZXJyb3IgaXMgbm90IHJlcG9ydGVkLAorIyB0aGlyZCBhbmQgZm91cnRoIGFyZS4gIFBhcnNlIHN0YXR1cyBpcyBzdWNjZXNmdWxsLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoKiAqKSArICgqKSArICgqKQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MTEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTY6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTE6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKIAogCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwotCi0gIDgwICkgIyA4MC4gY2FsYy5hdDo1NjQ6IENhbGN1bGF0b3IgJWRlYnVnCi0gICAgYXRfc2V0dXBfbGluZT0nY2FsYy5hdDo1NjQnCi0gICAgYXRfZGVzYz0nQ2FsY3VsYXRvciAlZGVidWcnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiA4MDogQ2FsY3VsYXRvciAlZGVidWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjgwLiBjYWxjLmF0OjU2NDogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgotCi0KLQotCi0KLQotCi0KLSMgVXNpbmcgeWFjYy5jPwotCi0KLQotCi0KLQotCi0jIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmICVsb2NhdGlvbiAmICVwdXJlICYgKCVnbHIgb3IgJXBhcnNlLXBhcmFtKS4KLQotIyB5eWVycm9yIGFsd2F5cyBzZWVzIHRoZSBsb2NhdGlvbnMgKHdoZW4gYWN0aXZhdGVkKSwgZXhjZXB0IGlmCi0jIHlhY2MgJiBwdXJlICYgIXBhcmFtLgotCi0KLSMgVGhlIGludGVyZmFjZSBpcyBwdXJlOiBlaXRoZXIgYmVjYXVzZSAlcHVyZS1wYXJzZXIsIG9yIGJlY2F1c2Ugd2UKLSMgYXJlIHVzaW5nIHRoZSBDKysgcGFyc2Vycy4KLQotCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzIxMAorI0FUX1NUQVJUXzIxMQorYXRfZm5fZ3JvdXBfYmFubmVyIDIxMSAnY2FsYy5hdDo2MTInIFwKKyAgIkNhbGN1bGF0b3IgJWVycm9yLXZlcmJvc2UgJWxvY2F0aW9ucyAlZGVmaW5lcyAlZGVmaW5lIGFwaS5wcmVmaXggXCJjYWxjXCIgJXZlcmJvc2UgJXlhY2MiICIiIDExCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjExLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogCkBAIC0yMzEwNiw1OSArNzI3NTEsMTM2NSBAQAogCiAKIGNhdCA+Y2FsYy55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworLyogSW5maXggbm90YXRpb24gY2FsY3VsYXRvci0tY2FsYyAqLworJWVycm9yLXZlcmJvc2UgJWxvY2F0aW9ucyAlZGVmaW5lcyAlZGVmaW5lIGFwaS5wcmVmaXggImNhbGMiICV2ZXJib3NlICV5YWNjCisKKyVjb2RlIHJlcXVpcmVzCit7CisKKyAgLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KKyAgdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Cit9CisKKy8qIEV4ZXJjaXNlICV1bmlvbi4gKi8KKyV1bmlvbgoreworICBzZW1hbnRpY192YWx1ZSBpdmFsOworfTsKKyVwcmludGVyIHsgZnByaW50ZiAoeXlvdXRwdXQsICIlZCIsICQkKTsgfSA8aXZhbD47CisKKyVjb2RlIHByb3ZpZGVzCit7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICAvKiBUaGUgaW5wdXQuICAqLworICBleHRlcm4gRklMRSAqaW5wdXQ7CisgIGV4dGVybiBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0OworICBleHRlcm4gaW50IGdsb2JhbF9jb3VudDsKK30KKworJWNvZGUKK3sKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNkZWZpbmUgVVNFKFZhcikKKworRklMRSAqaW5wdXQ7CitzdGF0aWMgaW50IHBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KTsKKworc3RhdGljIHZvaWQgY2FsY2Vycm9yICggY29uc3QgY2hhciAqbXNnKTsKK2ludCBjYWxjbGV4ICh2b2lkKTsKK30KKworCisKKy8qIEJpc29uIERlY2xhcmF0aW9ucyAqLworJXRva2VuIENBTENfRU9GIDAgImVuZCBvZiBpbnB1dCIKKyV0b2tlbiA8aXZhbD4gTlVNICJudW1iZXIiCisldHlwZSAgPGl2YWw+IGV4cAorCislbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24gICAgICAgICAgICAqLworJWxlZnQgJy0nICcrJworJWxlZnQgJyonICcvJworJWxlZnQgTkVHICAgICAvKiBuZWdhdGlvbi0tdW5hcnkgbWludXMgKi8KKyVyaWdodCAnXicgICAgLyogZXhwb25lbnRpYXRpb24gICAgICAgICovCisKKy8qIEdyYW1tYXIgZm9sbG93cyAqLworJSUKK2lucHV0OgorICBsaW5lCit8IGlucHV0IGxpbmUgICAgICAgICB7ICB9Cis7CisKK2xpbmU6CisgICdcbicKK3wgZXhwICdcbicgICAgICAgICAgIHsgVVNFICgkMSk7IH0KKzsKKworZXhwOgorICBOVU0gICAgICAgICAgICAgICAgeyAkJCA9ICQxOyAgICAgICAgICAgICB9Cit8IGV4cCAnPScgZXhwCisgIHsKKyAgICBpZiAoJDEgIT0gJDMpCisgICAgICBmcHJpbnRmIChzdGRlcnIsICJjYWxjOiBlcnJvcjogJWQgIT0gJWRcbiIsICQxLCAkMyk7CisgICAgJCQgPSAkMTsKKyAgfQorfCBleHAgJysnIGV4cCAgICAgICAgeyAkJCA9ICQxICsgJDM7ICAgICAgICB9Cit8IGV4cCAnLScgZXhwICAgICAgICB7ICQkID0gJDEgLSAkMzsgICAgICAgIH0KK3wgZXhwICcqJyBleHAgICAgICAgIHsgJCQgPSAkMSAqICQzOyAgICAgICAgfQorfCBleHAgJy8nIGV4cCAgICAgICAgeyAkJCA9ICQxIC8gJDM7ICAgICAgICB9Cit8ICctJyBleHAgICVwcmVjIE5FRyB7ICQkID0gLSQyOyAgICAgICAgICAgIH0KK3wgZXhwICdeJyBleHAgICAgICAgIHsgJCQgPSBwb3dlciAoJDEsICQzKTsgfQorfCAnKCcgZXhwICcpJyAgICAgICAgeyAkJCA9ICQyOyAgICAgICAgICAgICB9Cit8ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgeXllcnJvazsgIH0KK3wgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQorfCAnLScgZXJyb3IgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9Cis7CislJQorCitzdGF0aWMgaW50Citwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKK3sKKyAgaW50IHJlcyA9IDE7CisgIGFzc2VydCAoMCA8PSBleHBvbmVudCk7CisgIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKKyAgICByZXMgKj0gYmFzZTsKKyAgcmV0dXJuIHJlczsKK30KKworCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIGNhbGNlcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgWVlfTE9DQVRJT05fUFJJTlQgKHN0ZGVyciwgKGNhbGNsbG9jKSk7CisgIGZwcmludGYgKHN0ZGVyciwgIjogIik7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorX0FURU9GCisKKworCitjYXQgPmNhbGMtbGV4LmMgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworCisjaW5jbHVkZSAiY2FsYy5oIgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworaW50IGNhbGNsZXggKHZvaWQpOworc3RhdGljIGludCBnZXRfY2hhciAodm9pZCk7CitzdGF0aWMgdm9pZCB1bmdldF9jaGFyICggaW50IGMpOworCisKK3N0YXRpYyBDQUxDTFRZUEUgbGFzdF95eWxsb2M7CisKK3N0YXRpYyBpbnQKK2dldF9jaGFyICh2b2lkKQoreworICBpbnQgcmVzID0gZ2V0YyAoaW5wdXQpOworICA7CisKKyAgbGFzdF95eWxsb2MgPSAoY2FsY2xsb2MpOworICBpZiAocmVzID09ICdcbicpCisgICAgeworICAgICAgKGNhbGNsbG9jKS5sYXN0X2xpbmUrKzsKKyAgICAgIChjYWxjbGxvYykubGFzdF9jb2x1bW4gPSAxOworICAgIH0KKyAgZWxzZQorICAgIChjYWxjbGxvYykubGFzdF9jb2x1bW4rKzsKKworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZAordW5nZXRfY2hhciAoIGludCBjKQoreworICA7CisKKyAgLyogV3Jvbmcgd2hlbiBDID09IGBcbicuICovCisgIChjYWxjbGxvYykgPSBsYXN0X3l5bGxvYzsKKworICB1bmdldGMgKGMsIGlucHV0KTsKK30KKworc3RhdGljIGludAorcmVhZF9zaWduZWRfaW50ZWdlciAodm9pZCkKK3sKKyAgaW50IGMgPSBnZXRfY2hhciAoKTsKKyAgaW50IHNpZ24gPSAxOworICBpbnQgbiA9IDA7CisKKyAgOworICBpZiAoYyA9PSAnLScpCisgICAgeworICAgICAgYyA9IGdldF9jaGFyICgpOworICAgICAgc2lnbiA9IC0xOworICAgIH0KKworICB3aGlsZSAoaXNkaWdpdCAoYykpCisgICAgeworICAgICAgbiA9IDEwICogbiArIChjIC0gJzAnKTsKKyAgICAgIGMgPSBnZXRfY2hhciAoKTsKKyAgICB9CisKKyAgdW5nZXRfY2hhciAoIGMpOworCisgIHJldHVybiBzaWduICogbjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgTGV4aWNhbCBhbmFseXplciByZXR1cm5zIGFuIGludGVnZXIgb24gdGhlIHN0YWNrIGFuZCB0aGUgdG9rZW4gfAorfCBOVU0sIG9yIHRoZSBBU0NJSSBjaGFyYWN0ZXIgcmVhZCBpZiBub3QgYSBudW1iZXIuICBTa2lwcyBhbGwgICB8Cit8IGJsYW5rcyBhbmQgdGFicywgcmV0dXJucyAwIGZvciBFT0YuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitpbnQgY2FsY2xleCAodm9pZCkKK3sKKyAgaW50IGM7CisgIC8qIFNraXAgY3VycmVudCB0b2tlbiwgdGhlbiB3aGl0ZSBzcGFjZXMuICAqLworICBkbworICAgIHsKKyAgICAgKGNhbGNsbG9jKS5maXJzdF9jb2x1bW4gPSAoY2FsY2xsb2MpLmxhc3RfY29sdW1uOworICAgICAgKGNhbGNsbG9jKS5maXJzdF9saW5lICAgPSAoY2FsY2xsb2MpLmxhc3RfbGluZTsKKworICAgIH0KKyAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKCkpID09ICcgJyB8fCBjID09ICdcdCcpOworCisgIC8qIHByb2Nlc3MgbnVtYmVycyAgICovCisgIGlmIChjID09ICcuJyB8fCBpc2RpZ2l0IChjKSkKKyAgICB7CisgICAgICB1bmdldF9jaGFyICggYyk7CisgICAgICAoY2FsY2x2YWwpLml2YWwgPSByZWFkX3NpZ25lZF9pbnRlZ2VyICgpOworICAgICAgcmV0dXJuIE5VTTsKKyAgICB9CisKKyAgLyogUmV0dXJuIGVuZC1vZi1maWxlLiAgKi8KKyAgaWYgKGMgPT0gRU9GKQorICAgIHJldHVybiBDQUxDX0VPRjsKKworICAvKiBSZXR1cm4gc2luZ2xlIGNoYXJzLiAqLworICByZXR1cm4gYzsKK30KK19BVEVPRgorCisKK2NhdCA+Y2FsYy1tYWluLmMgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworCisjaW5jbHVkZSAiY2FsYy5oIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjIHVuZGVmIGFsYXJtCisjIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLwogI2VuZGlmCi0lfQorCisKKworc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7CitpbnQgZ2xvYmFsX2NvdW50ID0gMDsKKworLyogQSBDIG1haW4gZnVuY3Rpb24uICAqLworaW50CittYWluIChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisgIHNlbWFudGljX3ZhbHVlIHJlc3VsdCA9IDA7CisgIGludCBjb3VudCA9IDA7CisgIGludCBzdGF0dXM7CisKKyAgLyogVGhpcyB1c2VkIHRvIGJlIGFsYXJtICgxMCksIGJ1dCB0aGF0IGlzbid0IGVub3VnaCB0aW1lIGZvcgorICAgICBhIEp1bHkgMTk5NSB2aW50YWdlIERFQyBBbHBoYXN0YXRpb24gMjAwIDQvMTAwIHN5c3RlbSwKKyAgICAgYWNjb3JkaW5nIHRvIE5lbHNvbiBILiBGLiBCZWViZS4gIDEwMCBzZWNvbmRzIGlzIGVub3VnaC4gICovCisgIGFsYXJtICgxMDApOworCisgIGlmIChhcmdjID09IDIpCisgICAgaW5wdXQgPSBmb3BlbiAoYXJndlsxXSwgInIiKTsKKyAgZWxzZQorICAgIGlucHV0ID0gc3RkaW47CisKKyAgaWYgKCFpbnB1dCkKKyAgICB7CisgICAgICBwZXJyb3IgKGFyZ3ZbMV0pOworICAgICAgcmV0dXJuIDM7CisgICAgfQorCisKKyAgc3RhdHVzID0gY2FsY3BhcnNlICgpOworICBpZiAoZmNsb3NlIChpbnB1dCkpCisgICAgcGVycm9yICgiZmNsb3NlIik7CisgIGFzc2VydCAoZ2xvYmFsX3Jlc3VsdCA9PSByZXN1bHQpOworICBhc3NlcnQgKGdsb2JhbF9jb3VudCA9PSBjb3VudCk7CisgIHJldHVybiBzdGF0dXM7Cit9CitfQVRFT0YKKworCisKKworCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjYxMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiICJjYWxjLmF0OjYxMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjEyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTI6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjYxMiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyOiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTIiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiY2FsYy5hdDo2MTIiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jIGNhbGMtbGV4LmMgY2FsYy1tYWluLmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgY2FsYy1sZXguYyBjYWxjLW1haW4uYyAkTElCUyIgImNhbGMuYXQ6NjEyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBjYWxjLWxleC5jIGNhbGMtbWFpbi5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyOiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuYworIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2MTIiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuYworCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyOiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuaAorIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2MTIiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuaAorCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIFRlc3QgdGhlIHByaW9yaXRpZXMuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEgKyAyICogMyA9IDcKKzEgKyAyICogLTMgPSAtNQorCistMV4yID0gLTEKKygtMSleMiA9IDEKKworLS0tMSA9IC0xCisKKzEgLSAyIC0gMyA9IC00CisxIC0gKDIgLSAzKSA9IDIKKworMl4yXjMgPSAyNTYKKygyXjIpXjMgPSA2NAorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMjogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MTIiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisjIFNvbWUgc3ludGF4IGVycm9ycy4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMSAyCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYxMiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjEyIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMjogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjEyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMS8vMgorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMjogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MTIiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTI6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKK2Vycm9yCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYxMiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjEyIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICR1bmRlZmluZWQKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTI6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEgPSAyID0gMworX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMjogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MTIiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTI6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKworKzEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTI6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjEyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTIiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTIiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyOiAgXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIgImNhbGMuYXQ6NjEyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjEyIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMjogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjEyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBFeGVyY2lzZSB0aGUgZXJyb3IgdG9rZW46IHdpdGhvdXQgaXQsIHdlIGRpZSBhdCB0aGUgZmlyc3QgZXJyb3IsCisjIGhlbmNlIGJlIHN1cmUgdG8KKyMKKyMgLSBoYXZlIHNldmVyYWwgZXJyb3JzIHdoaWNoIGV4ZXJjaXNlIGRpZmZlcmVudCBzaGlmdC9kaXNjYXJkaW5ncworIyAgIC0gKCk6IG5vdGhpbmcgdG8gcG9wLCBub3RoaW5nIHRvIGRpc2NhcmQKKyMgICAtICgxICsgMSArIDEgKyk6IGEgbG90IHRvIHBvcCwgbm90aGluZyB0byBkaXNjYXJkCisjICAgLSAoKiAqICopOiBub3RoaW5nIHRvIHBvcCwgYSBsb3QgdG8gZGlzY2FyZAorIyAgIC0gKDEgKyAyICogKik6IHNvbWUgdG8gcG9wIGFuZCBkaXNjYXJkCisjCisjIC0gdGVzdCB0aGUgYWN0aW9uIGFzc29jaWF0ZWQgdG8gYGVycm9yJworIworIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCisjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKKyMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCisjCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygpICsgKDEgKyAxICsgMSArKSArICgqICogKikgKyAoMSAqIDIgKiAqKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTI6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjEyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTIiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjIzOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjQxOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitjYWxjOiBlcnJvcjogNDQ0NCAhPSAxCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTIiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIFRoZSBzYW1lLCBidXQgdGhpcyB0aW1lIGV4ZXJjaXNpbmcgZXhwbGljaXRseSB0cmlnZ2VyZWQgc3ludGF4IGVycm9ycy4KKyMgUE9TSVggc2F5cyB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoISkgKyAoMSAyKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTI6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjEyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTIiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4xMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorY2FsYzogZXJyb3I6IDIyMjIgIT0gMQorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMjogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjEyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKC0gKikgKyAoMSAyKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTI6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjEyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTIiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS40OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCitjYWxjOiBlcnJvcjogMjIyMiAhPSAxCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTIiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIENoZWNrIHRoYXQgeXllcnJvayB3b3JrcyBwcm9wZXJseTogc2Vjb25kIGVycm9yIGlzIG5vdCByZXBvcnRlZCwKKyMgdGhpcmQgYW5kIGZvdXJ0aCBhcmUuICBQYXJzZSBzdGF0dXMgaXMgc3VjY2VzZnVsbC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCogKikgKyAoKikgKyAoKikKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTI6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjEyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTIiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE2OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjEyOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTIiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yMTEKKyNBVF9TVEFSVF8yMTIKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyMTIgJ2NhbGMuYXQ6NjE0JyBcCisgICJDYWxjdWxhdG9yICVkZWJ1ZyIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgMTEKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyMTIuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisKKworCisKKworCisKKworY2F0ID5jYWxjLnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogLyogSW5maXggbm90YXRpb24gY2FsY3VsYXRvci0tY2FsYyAqLwogJWRlYnVnCiAKLSV7Ci0jaW5jbHVkZSA8c3RkaW8uaD4KKyVjb2RlIHJlcXVpcmVzCit7CiAKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpZiBIQVZFX1VOSVNURF9ICi0jIGluY2x1ZGUgPHVuaXN0ZC5oPgotI2Vsc2UKLSMgdW5kZWYgYWxhcm0KLSMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCi0jZW5kaWYKLSNpbmNsdWRlIDxjdHlwZS5oPgotI2RlZmluZSBVU0UoVmFyKQotCi0vKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLwotdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Ci0KLXN0YXRpYyBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKLXN0YXRpYyBpbnQgZ2xvYmFsX2NvdW50ID0gMDsKLSV9CisgIC8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCisgIHR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOworfQogCiAvKiBFeGVyY2lzZSAldW5pb24uICovCiAldW5pb24KIHsKICAgc2VtYW50aWNfdmFsdWUgaXZhbDsKIH07CislcHJpbnRlciB7IGZwcmludGYgKHl5b3V0cHV0LCAiJWQiLCAkJCk7IH0gPGl2YWw+OwogCi0leworJWNvZGUgcHJvdmlkZXMKK3sKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIC8qIFRoZSBpbnB1dC4gICovCisgIGV4dGVybiBGSUxFICppbnB1dDsKKyAgZXh0ZXJuIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQ7CisgIGV4dGVybiBpbnQgZ2xvYmFsX2NvdW50OworfQorCislY29kZQoreworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2RlZmluZSBVU0UoVmFyKQorCitGSUxFICppbnB1dDsKIHN0YXRpYyBpbnQgcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpOwotLyogeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWY6Ci0gICAtICVsb2NhdGlvbiAmICVwdXJlICYgJWdscgotICAgLSAlbG9jYXRpb24gJiAlcHVyZSAmICV5YWNjICYgJXBhcnNlLXBhcmFtLiAqLwotc3RhdGljIHZvaWQgeXllcnJvciAoCiAKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMKLSAgICAgICAgICAgICAgICAgICAgICk7Ci1zdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKLXN0YXRpYyBpbnQgZ2V0X2NoYXIgKHZvaWQpOwotc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoIGludCBjKTsKLSV9CitzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKK2ludCB5eWxleCAodm9pZCk7Cit9CiAKIAogCkBAIC0yMzE2Nyw3ICs3NDExOCw3IEBACiAldG9rZW4gPGl2YWw+IE5VTSAibnVtYmVyIgogJXR5cGUgIDxpdmFsPiBleHAKIAotJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uCSAgICAgICAqLworJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uICAgICAgICAgICAgKi8KICVsZWZ0ICctJyAnKycKICVsZWZ0ICcqJyAnLycKICVsZWZ0IE5FRyAgICAgLyogbmVnYXRpb24tLXVuYXJ5IG1pbnVzICovCkBAIC0yMzIwMCwyNSArNzQxNTEsMzYgQEAKIHwgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSAtJDI7ICAgICAgICAgICAgfQogfCBleHAgJ14nIGV4cCAgICAgICAgeyAkJCA9IHBvd2VyICgkMSwgJDMpOyB9CiB8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgIH0KLXwgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyAgICAgICAgICAgfQorfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7IHl5ZXJyb2s7ICB9CiB8ICchJyAgICAgICAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KIHwgJy0nIGVycm9yICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQogOwogJSUKLS8qIFRoZSBpbnB1dC4gICovCi1zdGF0aWMgRklMRSAqaW5wdXQ7CiAKLXN0YXRpYyB2b2lkCi15eWVycm9yICgKLQotICAgICAgICAgY29uc3QgY2hhciAqcykKK3N0YXRpYyBpbnQKK3Bvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQogewotCi0KLSAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIHMpOworICBpbnQgcmVzID0gMTsKKyAgYXNzZXJ0ICgwIDw9IGV4cG9uZW50KTsKKyAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQorICAgIHJlcyAqPSBiYXNlOworICByZXR1cm4gcmVzOwogfQogCiAKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworaW50IHl5bGV4ICh2b2lkKTsKK3N0YXRpYyBpbnQgZ2V0X2NoYXIgKHZvaWQpOworc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoIGludCBjKTsKKwogCiBzdGF0aWMgaW50CiBnZXRfY2hhciAodm9pZCkKQEAgLTIzMjI5LDcgKzc0MTkxLDYgQEAKICAgcmV0dXJuIHJlczsKIH0KIAotCiBzdGF0aWMgdm9pZAogdW5nZXRfY2hhciAoIGludCBjKQogewpAQCAtMjMyNjQsMzIgKzc0MjI1LDIxIEBACiB9CiAKIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgTGV4aWNhbCBhbmFseXplciByZXR1cm5zIGFuIGludGVnZXIgb24gdGhlIHN0YWNrIGFuZCB0aGUgdG9rZW4gfAogfCBOVU0sIG9yIHRoZSBBU0NJSSBjaGFyYWN0ZXIgcmVhZCBpZiBub3QgYSBudW1iZXIuICBTa2lwcyBhbGwgICB8CiB8IGJsYW5rcyBhbmQgdGFicywgcmV0dXJucyAwIGZvciBFT0YuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50Ci15eWxleCAodm9pZCkKK2ludCB5eWxleCAodm9pZCkKIHsKLSAgc3RhdGljIGludCBpbml0ID0gMTsKICAgaW50IGM7Ci0KLSAgaWYgKGluaXQpCi0gICAgewotICAgICAgaW5pdCA9IDA7Ci0KLSAgICB9Ci0KLQotCi0gIC8qIFNraXAgd2hpdGUgc3BhY2UuICAqLwotICB3aGlsZSAoKGMgPSBnZXRfY2hhciAoKSkgPT0gJyAnIHx8IGMgPT0gJ1x0JykKKyAgLyogU2tpcCBjdXJyZW50IHRva2VuLCB0aGVuIHdoaXRlIHNwYWNlcy4gICovCisgIGRvCiAgICAgewogCiAgICAgfQorICB3aGlsZSAoKGMgPSBnZXRfY2hhciAoKSkgPT0gJyAnIHx8IGMgPT0gJ1x0Jyk7CiAKICAgLyogcHJvY2VzcyBudW1iZXJzICAgKi8KICAgaWYgKGMgPT0gJy4nIHx8IGlzZGlnaXQgKGMpKQpAQCAtMjMzMDcsMTggKzc0MjU3LDIwIEBACiAgIHJldHVybiBjOwogfQogCi1zdGF0aWMgaW50Ci1wb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKLXsKLSAgaW50IHJlcyA9IDE7Ci0gIGlmIChleHBvbmVudCA8IDApCi0gICAgZXhpdCAoMyk7Ci0gIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKLSAgICByZXMgKj0gYmFzZTsKLSAgcmV0dXJuIHJlczsKLX0KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2Vsc2UKKyMgdW5kZWYgYWxhcm0KKyMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCisjZW5kaWYKIAogCisKK3NlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOworaW50IGdsb2JhbF9jb3VudCA9IDA7CisKKy8qIEEgQyBtYWluIGZ1bmN0aW9uLiAgKi8KIGludAogbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewpAQCAtMjMzNDQsMTAgKzc0Mjk2LDEwIEBACiAKICAgeXlkZWJ1ZyA9IDE7CiAgIHN0YXR1cyA9IHl5cGFyc2UgKCk7Ci0gIGlmIChnbG9iYWxfcmVzdWx0ICE9IHJlc3VsdCkKLSAgICBhYm9ydCAoKTsKLSAgaWYgKGdsb2JhbF9jb3VudCAhPSBjb3VudCkKLSAgICBhYm9ydCAoKTsKKyAgaWYgKGZjbG9zZSAoaW5wdXQpKQorICAgIHBlcnJvciAoImZjbG9zZSIpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOwogICByZXR1cm4gc3RhdHVzOwogfQogX0FURU9GCkBAIC0yMzM1Niw1NSArNzQzMDgsMTUxIEBACiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY0OiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgotZWNobyBjYWxjLmF0OjU2NCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gY2FsYy5jIGNhbGMueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2NDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE0OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjE0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueSIgImNhbGMuYXQ6NjE0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE0OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2MTQiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjE0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQ6IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAotICAgJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2NDogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBcJExJQlMiCi1lY2hvIGNhbGMuYXQ6NTY0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNDogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImNhbGMuYXQ6NjE0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNDogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUyIgImNhbGMuYXQ6NjE0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQ6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5jCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjYxNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5jCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCiAKIAogIyBUZXN0IHRoZSBwcmlvcml0aWVzLgpAQCAtMjM0MjQsNjIgKzc0NDcyLDY2IEBACiAoMl4yKV4zID0gNjQKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY0OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTY0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQ6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjE0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQ6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAKICMgU29tZSBzeW50YXggZXJyb3JzLgogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0wIDAKKzEgMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NjQ6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NjQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MTQiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMjM0OTAsMTggKzc0NTQyLDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0yMzUxMSw2MCArNzQ1NjUsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2NDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NjQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMS8vMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NjQ6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NjQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MTQiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMjM1NzUsMTggKzc0NjE5LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0yMzU5Niw2MCArNzQ2NDIsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2NDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NjQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogZXJyb3IKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY0OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTY0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQ6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjE0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQ6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTIzNjYwLDE4ICs3NDY5NiwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0yMzY4MSw2MCArNzQ3MTksNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2NDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NjQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMSA9IDIgPSAzCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2NDogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU2NCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2NDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE0OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYxNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE0OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE0IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0yMzc0NSwxOCArNzQ3NzMsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworMS43OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTIzNzY2LDMwICs3NDc5NiwxOCBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY0OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU2NCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE0OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTQiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCkBAIC0yMzc5NywzMCArNzQ4MTUsMzIgQEAKICsxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2NDogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU2NCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2NDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE0OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYxNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE0OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE0IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0yMzgzMSwxOCArNzQ4NTEsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTIuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTIzODUyLDU3ICs3NDg3NCw0NyBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY0OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU2NCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE0OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTQiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2NDogXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKLWVjaG8gY2FsYy5hdDo1NjQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQ6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo2MTQiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQ6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTIzOTEzLDE4ICs3NDkyNSwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMjM5MzQsMzAgKzc0OTQ4LDE4IEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NjQ6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTY0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2NDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQ6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKQEAgLTIzOTcyLDggKzc0OTc0LDggQEAKICMKICMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCiAjCi0jIC0gY2hlY2sgdGhlIGxvb2stYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCi0jICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZQorIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCiAjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKICMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCiAjCkBAIC0yMzk4MSwzMCArNzQ5ODMsMzIgQEAKICgpICsgKDEgKyAxICsgMSArKSArICgqICogKikgKyAoMSAqIDIgKiAqKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY0OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTY0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQ6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjE0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQ6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTI0MDE1LDIxICs3NTAxOSwyMyBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjE3OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjIyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjQwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKIGNhbGM6IGVycm9yOiA0NDQ0ICE9IDEKIF9BVEVPRgogCkBAIC0yNDA0MCw2MyArNzUwNDYsNTMgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2NDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NjQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAogIyBUaGUgc2FtZSwgYnV0IHRoaXMgdGltZSBleGVyY2lzaW5nIGV4cGxpY2l0bHkgdHJpZ2dlcmVkIHN5bnRheCBlcnJvcnMuCi0jIFBPU0lYIHNheXMgdGhlIGxvb2stYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCisjIFBPU0lYIHNheXMgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotKCEpICsgKDAgMCkgPSAxCisoISkgKyAoMSAyKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY0OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTY0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQ6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjE0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQ6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTI0MTA3LDE4ICs3NTEwMywyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS45OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCiBfQVRFT0YKIApAQCAtMjQxMjksNjAgKzc1MTI3LDUwIEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NjQ6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTY0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2NDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQ6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLSgtICopICsgKDAgMCkgPSAxCisoLSAqKSArICgxIDIpID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NjQ6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NjQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MTQiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMjQxOTMsMTkgKzc1MTgxLDIxIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogY2FsYzogZXJyb3I6IDIyMjIgIT0gMQogX0FURU9GCiAKQEAgLTI0MjE2LDk0ICs3NTIwNiwxMTcgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2NDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NjQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQ6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQogCi0kYXRfdHJhY2VvbgorCisjIENoZWNrIHRoYXQgeXllcnJvayB3b3JrcyBwcm9wZXJseTogc2Vjb25kIGVycm9yIGlzIG5vdCByZXBvcnRlZCwKKyMgdGhpcmQgYW5kIGZvdXJ0aCBhcmUuICBQYXJzZSBzdGF0dXMgaXMgc3VjY2VzZnVsbC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCogKikgKyAoKikgKyAoKikKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQ6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjE0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTQ6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE2OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KK3NlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE0OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTQiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICA4MSApICMgODEuIGNhbGMuYXQ6NTY1OiBDYWxjdWxhdG9yICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MKLSAgICBhdF9zZXR1cF9saW5lPSdjYWxjLmF0OjU2NScKLSAgICBhdF9kZXNjPSdDYWxjdWxhdG9yICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiA4MTogQ2FsY3VsYXRvciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjgxLiBjYWxjLmF0OjU2NTogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgotCi0KLQotCi0KLQotCi0KLSMgVXNpbmcgeWFjYy5jPwotCi0KLQotCi0KLQotCi0jIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmICVsb2NhdGlvbiAmICVwdXJlICYgKCVnbHIgb3IgJXBhcnNlLXBhcmFtKS4KLQotIyB5eWVycm9yIGFsd2F5cyBzZWVzIHRoZSBsb2NhdGlvbnMgKHdoZW4gYWN0aXZhdGVkKSwgZXhjZXB0IGlmCi0jIHlhY2MgJiBwdXJlICYgIXBhcmFtLgotCi0KLSMgVGhlIGludGVyZmFjZSBpcyBwdXJlOiBlaXRoZXIgYmVjYXVzZSAlcHVyZS1wYXJzZXIsIG9yIGJlY2F1c2Ugd2UKLSMgYXJlIHVzaW5nIHRoZSBDKysgcGFyc2Vycy4KLQotCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzIxMgorI0FUX1NUQVJUXzIxMworYXRfZm5fZ3JvdXBfYmFubmVyIDIxMyAnY2FsYy5hdDo2MTUnIFwKKyAgIkNhbGN1bGF0b3IgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVsb2NhdGlvbnMgJWRlZmluZXMgJW5hbWUtcHJlZml4IFwiY2FsY1wiICV2ZXJib3NlICV5YWNjIiAiIiAxMQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjIxMy4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIApAQCAtMjQzMTUsNTkgKzc1MzI4LDUyIEBACiAKIAogY2F0ID5jYWxjLnkgPDwnX0FURU9GJwotJXsKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotICAvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KLSMgdW5kZWYgbWFsbG9jCi0jIHVuZGVmIG1lbWNtcAotIyB1bmRlZiByZWFsbG9jCi0jZW5kaWYKLSV9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCiAvKiBJbmZpeCBub3RhdGlvbiBjYWxjdWxhdG9yLS1jYWxjICovCi0lZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjCislZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXggImNhbGMiICV2ZXJib3NlICV5YWNjCiAKLSV7Ci0jaW5jbHVkZSA8c3RkaW8uaD4KKyVjb2RlIHJlcXVpcmVzCit7CiAKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpZiBIQVZFX1VOSVNURF9ICi0jIGluY2x1ZGUgPHVuaXN0ZC5oPgotI2Vsc2UKLSMgdW5kZWYgYWxhcm0KLSMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCi0jZW5kaWYKLSNpbmNsdWRlIDxjdHlwZS5oPgotI2RlZmluZSBVU0UoVmFyKQotCi0vKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLwotdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Ci0KLXN0YXRpYyBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKLXN0YXRpYyBpbnQgZ2xvYmFsX2NvdW50ID0gMDsKLSV9CisgIC8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCisgIHR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOworfQogCiAvKiBFeGVyY2lzZSAldW5pb24uICovCiAldW5pb24KIHsKICAgc2VtYW50aWNfdmFsdWUgaXZhbDsKIH07CislcHJpbnRlciB7IGZwcmludGYgKHl5b3V0cHV0LCAiJWQiLCAkJCk7IH0gPGl2YWw+OwogCi0leworJWNvZGUgcHJvdmlkZXMKK3sKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIC8qIFRoZSBpbnB1dC4gICovCisgIGV4dGVybiBGSUxFICppbnB1dDsKKyAgZXh0ZXJuIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQ7CisgIGV4dGVybiBpbnQgZ2xvYmFsX2NvdW50OworfQorCislY29kZQoreworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2RlZmluZSBVU0UoVmFyKQorCitGSUxFICppbnB1dDsKIHN0YXRpYyBpbnQgcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpOwotLyogeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWY6Ci0gICAtICVsb2NhdGlvbiAmICVwdXJlICYgJWdscgotICAgLSAlbG9jYXRpb24gJiAlcHVyZSAmICV5YWNjICYgJXBhcnNlLXBhcmFtLiAqLwotc3RhdGljIHZvaWQgeXllcnJvciAoCiAKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMKLSAgICAgICAgICAgICAgICAgICAgICk7Ci1zdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKLXN0YXRpYyBpbnQgZ2V0X2NoYXIgKHZvaWQpOwotc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoIGludCBjKTsKLSV9CitzdGF0aWMgdm9pZCBjYWxjZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworaW50IGNhbGNsZXggKHZvaWQpOworfQogCiAKIApAQCAtMjQzNzYsNyArNzUzODIsNyBAQAogJXRva2VuIDxpdmFsPiBOVU0gIm51bWJlciIKICV0eXBlICA8aXZhbD4gZXhwCiAKLSVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbgkgICAgICAgKi8KKyVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbiAgICAgICAgICAgICovCiAlbGVmdCAnLScgJysnCiAlbGVmdCAnKicgJy8nCiAlbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLwpAQCAtMjQ0MDksMzQgKzc1NDE1LDUxIEBACiB8ICctJyBleHAgICVwcmVjIE5FRyB7ICQkID0gLSQyOyAgICAgICAgICAgIH0KIHwgZXhwICdeJyBleHAgICAgICAgIHsgJCQgPSBwb3dlciAoJDEsICQzKTsgfQogfCAnKCcgZXhwICcpJyAgICAgICAgeyAkJCA9ICQyOyAgICAgICAgICAgICB9Ci18ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgICAgICAgICAgIH0KK3wgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyB5eWVycm9rOyAgfQogfCAnIScgICAgICAgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9CiB8ICctJyBlcnJvciAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KIDsKICUlCi0vKiBUaGUgaW5wdXQuICAqLwotc3RhdGljIEZJTEUgKmlucHV0OwogCi1zdGF0aWMgdm9pZAoteXllcnJvciAoCi0KLSAgICAgICAgIGNvbnN0IGNoYXIgKnMpCitzdGF0aWMgaW50Citwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKIHsKLQotCi0gIGZwcmludGYgKHN0ZGVyciwgIiVkLiVkIiwKLSAgICAgICAgICAgKHl5bGxvYykuZmlyc3RfbGluZSwgKHl5bGxvYykuZmlyc3RfY29sdW1uKTsKLSAgaWYgKCh5eWxsb2MpLmZpcnN0X2xpbmUgIT0gKHl5bGxvYykubGFzdF9saW5lKQotICAgIGZwcmludGYgKHN0ZGVyciwgIi0lZC4lZCIsCi0JICAgICAoeXlsbG9jKS5sYXN0X2xpbmUsICAoeXlsbG9jKS5sYXN0X2NvbHVtbiAtIDEpOwotICBlbHNlIGlmICgoeXlsbG9jKS5maXJzdF9jb2x1bW4gIT0gKHl5bGxvYykubGFzdF9jb2x1bW4gLSAxKQotICAgIGZwcmludGYgKHN0ZGVyciwgIi0lZCIsCi0JICAgICAoeXlsbG9jKS5sYXN0X2NvbHVtbiAtIDEpOwotICBmcHJpbnRmIChzdGRlcnIsICI6ICIpOwotICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgcyk7CisgIGludCByZXMgPSAxOworICBhc3NlcnQgKDAgPD0gZXhwb25lbnQpOworICBmb3IgKC8qIE5pZW50ZSAqLzsgZXhwb25lbnQ7IC0tZXhwb25lbnQpCisgICAgcmVzICo9IGJhc2U7CisgIHJldHVybiByZXM7CiB9CiAKIAorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCBjYWxjZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIFlZX0xPQ0FUSU9OX1BSSU5UIChzdGRlcnIsIChjYWxjbGxvYykpOworICBmcHJpbnRmIChzdGRlcnIsICI6ICIpOworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KK19BVEVPRgorCisKKworY2F0ID5jYWxjLWxleC5jIDw8J19BVEVPRicKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKKworI2luY2x1ZGUgImNhbGMuaCIKKworI2luY2x1ZGUgPGN0eXBlLmg+CisKK2ludCBjYWxjbGV4ICh2b2lkKTsKK3N0YXRpYyBpbnQgZ2V0X2NoYXIgKHZvaWQpOworc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoIGludCBjKTsKKwogCiBzdGF0aWMgWVlMVFlQRSBsYXN0X3l5bGxvYzsKIApAQCAtMjQ0NDYsMjYgKzc1NDY5LDI1IEBACiAgIGludCByZXMgPSBnZXRjIChpbnB1dCk7CiAgIDsKIAotICBsYXN0X3l5bGxvYyA9ICh5eWxsb2MpOworICBsYXN0X3l5bGxvYyA9IChjYWxjbGxvYyk7CiAgIGlmIChyZXMgPT0gJ1xuJykKICAgICB7Ci0gICAgICAoeXlsbG9jKS5sYXN0X2xpbmUrKzsKLSAgICAgICh5eWxsb2MpLmxhc3RfY29sdW1uID0gMDsKKyAgICAgIChjYWxjbGxvYykubGFzdF9saW5lKys7CisgICAgICAoY2FsY2xsb2MpLmxhc3RfY29sdW1uID0gMTsKICAgICB9CiAgIGVsc2UKLSAgICAoeXlsbG9jKS5sYXN0X2NvbHVtbisrOworICAgIChjYWxjbGxvYykubGFzdF9jb2x1bW4rKzsKIAogICByZXR1cm4gcmVzOwogfQogCi0KIHN0YXRpYyB2b2lkCiB1bmdldF9jaGFyICggaW50IGMpCiB7CiAgIDsKIAogICAvKiBXcm9uZyB3aGVuIEMgPT0gYFxuJy4gKi8KLSAgKHl5bGxvYykgPSBsYXN0X3l5bGxvYzsKKyAgKGNhbGNsbG9jKSA9IGxhc3RfeXlsbG9jOwogCiAgIHVuZ2V0YyAoYywgaW5wdXQpOwogfQpAQCAtMjQ0OTYsNDYgKzc1NTE4LDI5IEBACiB9CiAKIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgTGV4aWNhbCBhbmFseXplciByZXR1cm5zIGFuIGludGVnZXIgb24gdGhlIHN0YWNrIGFuZCB0aGUgdG9rZW4gfAogfCBOVU0sIG9yIHRoZSBBU0NJSSBjaGFyYWN0ZXIgcmVhZCBpZiBub3QgYSBudW1iZXIuICBTa2lwcyBhbGwgICB8CiB8IGJsYW5rcyBhbmQgdGFicywgcmV0dXJucyAwIGZvciBFT0YuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50Ci15eWxleCAodm9pZCkKK2ludCBjYWxjbGV4ICh2b2lkKQogewotICBzdGF0aWMgaW50IGluaXQgPSAxOwogICBpbnQgYzsKLQotICBpZiAoaW5pdCkKKyAgLyogU2tpcCBjdXJyZW50IHRva2VuLCB0aGVuIHdoaXRlIHNwYWNlcy4gICovCisgIGRvCiAgICAgewotICAgICAgaW5pdCA9IDA7Ci0KLSAgICAgICh5eWxsb2MpLmxhc3RfY29sdW1uID0gMDsKLSAgICAgICh5eWxsb2MpLmxhc3RfbGluZSA9IDE7CisgICAgIChjYWxjbGxvYykuZmlyc3RfY29sdW1uID0gKGNhbGNsbG9jKS5sYXN0X2NvbHVtbjsKKyAgICAgIChjYWxjbGxvYykuZmlyc3RfbGluZSAgID0gKGNhbGNsbG9jKS5sYXN0X2xpbmU7CiAKICAgICB9Ci0KLQotICh5eWxsb2MpLmZpcnN0X2NvbHVtbiA9ICh5eWxsb2MpLmxhc3RfY29sdW1uOwotICAoeXlsbG9jKS5maXJzdF9saW5lICAgPSAoeXlsbG9jKS5sYXN0X2xpbmU7Ci0KLQotICAvKiBTa2lwIHdoaXRlIHNwYWNlLiAgKi8KLSAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKCkpID09ICcgJyB8fCBjID09ICdcdCcpCi0gICAgewotICAgICAoeXlsbG9jKS5maXJzdF9jb2x1bW4gPSAoeXlsbG9jKS5sYXN0X2NvbHVtbjsKLSAgICAgICh5eWxsb2MpLmZpcnN0X2xpbmUgICA9ICh5eWxsb2MpLmxhc3RfbGluZTsKLQotICAgIH0KKyAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKCkpID09ICcgJyB8fCBjID09ICdcdCcpOwogCiAgIC8qIHByb2Nlc3MgbnVtYmVycyAgICovCiAgIGlmIChjID09ICcuJyB8fCBpc2RpZ2l0IChjKSkKICAgICB7CiAgICAgICB1bmdldF9jaGFyICggYyk7Ci0gICAgICAoeXlsdmFsKS5pdmFsID0gcmVhZF9zaWduZWRfaW50ZWdlciAoKTsKKyAgICAgIChjYWxjbHZhbCkuaXZhbCA9IHJlYWRfc2lnbmVkX2ludGVnZXIgKCk7CiAgICAgICByZXR1cm4gTlVNOwogICAgIH0KIApAQCAtMjQ1NDYsMTkgKzc1NTUxLDMyIEBACiAgIC8qIFJldHVybiBzaW5nbGUgY2hhcnMuICovCiAgIHJldHVybiBjOwogfQotCi1zdGF0aWMgaW50Ci1wb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKLXsKLSAgaW50IHJlcyA9IDE7Ci0gIGlmIChleHBvbmVudCA8IDApCi0gICAgZXhpdCAoMyk7Ci0gIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKLSAgICByZXMgKj0gYmFzZTsKLSAgcmV0dXJuIHJlczsKLX0KK19BVEVPRgogCiAKK2NhdCA+Y2FsYy1tYWluLmMgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworCisjaW5jbHVkZSAiY2FsYy5oIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjIHVuZGVmIGFsYXJtCisjIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLworI2VuZGlmCisKKworCitzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKK2ludCBnbG9iYWxfY291bnQgPSAwOworCisvKiBBIEMgbWFpbiBmdW5jdGlvbi4gICovCiBpbnQKIG1haW4gKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKQEAgLTI0NTgyLDEyICs3NTYwMCwxMiBAQAogICAgICAgcmV0dXJuIDM7CiAgICAgfQogCi0gIHl5ZGVidWcgPSAxOwotICBzdGF0dXMgPSB5eXBhcnNlICgpOwotICBpZiAoZ2xvYmFsX3Jlc3VsdCAhPSByZXN1bHQpCi0gICAgYWJvcnQgKCk7Ci0gIGlmIChnbG9iYWxfY291bnQgIT0gY291bnQpCi0gICAgYWJvcnQgKCk7CisgIGNhbGNkZWJ1ZyA9IDE7CisgIHN0YXR1cyA9IGNhbGNwYXJzZSAoKTsKKyAgaWYgKGZjbG9zZSAoaW5wdXQpKQorICAgIHBlcnJvciAoImZjbG9zZSIpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOwogICByZXR1cm4gc3RhdHVzOwogfQogX0FURU9GCkBAIC0yNDU5Niw1NSArNzU2MTQsMTc4IEBACiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY1OiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgotZWNobyBjYWxjLmF0OjU2NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gY2FsYy5jIGNhbGMueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjYxNSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiICJjYWxjLmF0OjYxNSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjE1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTU6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjYxNSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1OiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTUiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSAgICRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NjU6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgXCRMSUJTIgotZWNobyBjYWxjLmF0OjU2NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jICRMSUJTICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisgICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTU6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJjYWxjLmF0OjYxNSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTU6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgY2FsYy1sZXguYyBjYWxjLW1haW4uYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBjYWxjLWxleC5jIGNhbGMtbWFpbi5jICRMSUJTIiAiY2FsYy5hdDo2MTUiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jIGNhbGMtbGV4LmMgY2FsYy1tYWluLmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1OiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuYworIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2MTUiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuYworCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1OiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuaAorIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2MTUiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuaAorCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAjIFRlc3QgdGhlIHByaW9yaXRpZXMuCkBAIC0yNDY2NCw2MiArNzU4MDUsNjYgQEAKICgyXjIpXjMgPSA2NAogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NjU6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NjUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MTUiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxNSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKIAogIyBTb21lIHN5bnRheCBlcnJvcnMuCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLTAgMAorMSAyCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2NTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU2NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYxNSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE1IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0yNDczMCwxOCArNzU4NzUsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTI0NzQ5LDYwICs3NTg5Niw1MCBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2NTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NjUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMS8vMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NjU6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NjUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MTUiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxNSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMjQ4MTMsMTggKzc1OTUwLDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0yNDgzMiw2MCArNzU5NzEsNTAgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NjU6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTY1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTU6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxNSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKIGVycm9yCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2NTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU2NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYxNSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE1IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0yNDg5NiwxOCArNzYwMjUsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICR1bmRlZmluZWQKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICR1bmRlZmluZWQKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMjQ5MTUsNjAgKzc2MDQ2LDUwIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY1OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU2NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTUiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiAxID0gMiA9IDMKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY1OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTY1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTU6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjE1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTI0OTc5LDE4ICs3NjEwMCwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS42OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCisxLjc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPScKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMjQ5OTgsMzAgKzc2MTIxLDE4IEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY1OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU2NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTUiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCkBAIC0yNTAyOSwzMCArNzYxNDAsMzIgQEAKICsxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2NTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU2NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYxNSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE1IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0yNTA2MywxOCArNzYxNzYsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTIuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTI1MDgyLDU3ICs3NjE5Nyw0NyBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2NTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NjUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKICMgRXhlcmNpc2UgZXJyb3IgbWVzc2FnZXMgd2l0aCBFT0Y6IHdvcmsgb24gYW4gZW1wdHkgZmlsZS4KLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NjU6IFwkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiCi1lY2hvIGNhbGMuYXQ6NTY1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1OiAgXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIgImNhbGMuYXQ6NjE1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE1IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0yNTE0MywxOCArNzYyNDgsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTI1MTYyLDMwICs3NjI2OSwxOCBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2NTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NjUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIApAQCAtMjUyMDAsOCArNzYyOTUsOCBAQAogIwogIyAtIHRlc3QgdGhlIGFjdGlvbiBhc3NvY2lhdGVkIHRvIGBlcnJvcicKICMKLSMgLSBjaGVjayB0aGUgbG9vay1haGVhZCB0aGF0IHRyaWdnZXJzIGFuIGVycm9yIGlzIG5vdCBkaXNjYXJkZWQKLSMgICB3aGVuIHdlIGVudGVyIGVycm9yIHJlY292ZXJ5LiAgQmVsb3csIHRoZSBsb29rLWFoZWFkIGNhdXNpbmcgdGhlCisjIC0gY2hlY2sgdGhlIGxvb2thaGVhZCB0aGF0IHRyaWdnZXJzIGFuIGVycm9yIGlzIG5vdCBkaXNjYXJkZWQKKyMgICB3aGVuIHdlIGVudGVyIGVycm9yIHJlY292ZXJ5LiAgQmVsb3csIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUKICMgICBmaXJzdCBlcnJvciBpcyAiKSIsIHdoaWNoIGlzIG5lZWRlZCB0byByZWNvdmVyIGZyb20gdGhlIGVycm9yIGFuZAogIyAgIHByb2R1Y2UgdGhlICIwIiB0aGF0IHRyaWdnZXJzIHRoZSAiMCAhPSAxIiBlcnJvci4KICMKQEAgLTI1MjA5LDMwICs3NjMwNCwzMiBAQAogKCkgKyAoMSArIDEgKyAxICspICsgKCogKiAqKSArICgxICogMiAqICopID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1NjU6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NjUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MTUiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxNSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMjUyNDMsMjEgKzc2MzQwLDIzIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuNDA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xODogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4yMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS40MTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogY2FsYzogZXJyb3I6IDQ0NDQgIT0gMQogX0FURU9GCiAKQEAgLTI1MjY2LDYzICs3NjM2NSw1MyBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2NTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NjUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAogIyBUaGUgc2FtZSwgYnV0IHRoaXMgdGltZSBleGVyY2lzaW5nIGV4cGxpY2l0bHkgdHJpZ2dlcmVkIHN5bnRheCBlcnJvcnMuCi0jIFBPU0lYIHNheXMgdGhlIGxvb2stYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCisjIFBPU0lYIHNheXMgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotKCEpICsgKDAgMCkgPSAxCisoISkgKyAoMSAyKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY1OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTY1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTU6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjE1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTI1MzMzLDE4ICs3NjQyMiwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS45OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCiBfQVRFT0YKIApAQCAtMjUzNTMsNjAgKzc2NDQ0LDUwIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY1OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU2NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTUiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0oLSAqKSArICgwIDApID0gMQorKC0gKikgKyAoMSAyKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY1OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTY1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTU6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjE1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTI1NDE3LDE5ICs3NjQ5OCwyMSBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjExOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjQ6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKIGNhbGM6IGVycm9yOiAyMjIyICE9IDEKIF9BVEVPRgogCkBAIC0yNTQzOCw5NCArNzY1MjEsMTE1IEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY1OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU2NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1NjU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCiAKLSRhdF90cmFjZW9uCisKKyMgQ2hlY2sgdGhhdCB5eWVycm9rIHdvcmtzIHByb3Blcmx5OiBzZWNvbmQgZXJyb3IgaXMgbm90IHJlcG9ydGVkLAorIyB0aGlyZCBhbmQgZm91cnRoIGFyZS4gIFBhcnNlIHN0YXR1cyBpcyBzdWNjZXNmdWxsLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoKiAqKSArICgqKSArICgqKQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MTUiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxNSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTY6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTU6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxNSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKIAogCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwotCi0gIDgyICkgIyA4Mi4gY2FsYy5hdDo1Njc6IENhbGN1bGF0b3IgJXB1cmUtcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MKLSAgICBhdF9zZXR1cF9saW5lPSdjYWxjLmF0OjU2NycKLSAgICBhdF9kZXNjPSdDYWxjdWxhdG9yICVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgODI6IENhbGN1bGF0b3IgJXB1cmUtcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiODIuIGNhbGMuYXQ6NTY3OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCi0KLQotCi0KLQotCi0KLQotIyBVc2luZyB5YWNjLmM/Ci0KLQotCi0KLQotCi0KLSMgeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWYgJWxvY2F0aW9uICYgJXB1cmUgJiAoJWdsciBvciAlcGFyc2UtcGFyYW0pLgotCi0jIHl5ZXJyb3IgYWx3YXlzIHNlZXMgdGhlIGxvY2F0aW9ucyAod2hlbiBhY3RpdmF0ZWQpLCBleGNlcHQgaWYKLSMgeWFjYyAmIHB1cmUgJiAhcGFyYW0uCi0KLQotIyBUaGUgaW50ZXJmYWNlIGlzIHB1cmU6IGVpdGhlciBiZWNhdXNlICVwdXJlLXBhcnNlciwgb3IgYmVjYXVzZSB3ZQotIyBhcmUgdXNpbmcgdGhlIEMrKyBwYXJzZXJzLgotCi0KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjEzCisjQVRfU1RBUlRfMjE0CithdF9mbl9ncm91cF9iYW5uZXIgMjE0ICdjYWxjLmF0OjYxNicgXAorICAiQ2FsY3VsYXRvciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlZGVmaW5lIGFwaS5wcmVmaXggXCJjYWxjXCIgJXZlcmJvc2UgJXlhY2MiICIiIDExCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjE0LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogCkBAIC0yNTUzNyw1OSArNzY2NDEsNTIgQEAKIAogCiBjYXQgPmNhbGMueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKIC8qIEluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3ItLWNhbGMgKi8KLSVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjCislZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlZGVmaW5lIGFwaS5wcmVmaXggImNhbGMiICV2ZXJib3NlICV5YWNjCiAKLSV7Ci0jaW5jbHVkZSA8c3RkaW8uaD4KKyVjb2RlIHJlcXVpcmVzCit7CiAKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpZiBIQVZFX1VOSVNURF9ICi0jIGluY2x1ZGUgPHVuaXN0ZC5oPgotI2Vsc2UKLSMgdW5kZWYgYWxhcm0KLSMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCi0jZW5kaWYKLSNpbmNsdWRlIDxjdHlwZS5oPgotI2RlZmluZSBVU0UoVmFyKQotCi0vKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLwotdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Ci0KLXN0YXRpYyBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKLXN0YXRpYyBpbnQgZ2xvYmFsX2NvdW50ID0gMDsKLSV9CisgIC8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCisgIHR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOworfQogCiAvKiBFeGVyY2lzZSAldW5pb24uICovCiAldW5pb24KIHsKICAgc2VtYW50aWNfdmFsdWUgaXZhbDsKIH07CislcHJpbnRlciB7IGZwcmludGYgKHl5b3V0cHV0LCAiJWQiLCAkJCk7IH0gPGl2YWw+OwogCi0leworJWNvZGUgcHJvdmlkZXMKK3sKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIC8qIFRoZSBpbnB1dC4gICovCisgIGV4dGVybiBGSUxFICppbnB1dDsKKyAgZXh0ZXJuIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQ7CisgIGV4dGVybiBpbnQgZ2xvYmFsX2NvdW50OworfQorCislY29kZQoreworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2RlZmluZSBVU0UoVmFyKQorCitGSUxFICppbnB1dDsKIHN0YXRpYyBpbnQgcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpOwotLyogeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWY6Ci0gICAtICVsb2NhdGlvbiAmICVwdXJlICYgJWdscgotICAgLSAlbG9jYXRpb24gJiAlcHVyZSAmICV5YWNjICYgJXBhcnNlLXBhcmFtLiAqLwotc3RhdGljIHZvaWQgeXllcnJvciAoCiAKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMKLSAgICAgICAgICAgICAgICAgICAgICk7Ci1zdGF0aWMgaW50IHl5bGV4IChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApOwotc3RhdGljIGludCBnZXRfY2hhciAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKTsKLXN0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCwgIGludCBjKTsKLSV9CitzdGF0aWMgdm9pZCBjYWxjZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworaW50IGNhbGNsZXggKHZvaWQpOworfQogCiAKIApAQCAtMjU1OTgsNyArNzY2OTUsNyBAQAogJXRva2VuIDxpdmFsPiBOVU0gIm51bWJlciIKICV0eXBlICA8aXZhbD4gZXhwCiAKLSVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbgkgICAgICAgKi8KKyVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbiAgICAgICAgICAgICovCiAlbGVmdCAnLScgJysnCiAlbGVmdCAnKicgJy8nCiAlbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLwpAQCAtMjU2MzEsMjUgKzc2NzI4LDEzNjQgQEAKIHwgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSAtJDI7ICAgICAgICAgICAgfQogfCBleHAgJ14nIGV4cCAgICAgICAgeyAkJCA9IHBvd2VyICgkMSwgJDMpOyB9CiB8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgIH0KLXwgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyAgICAgICAgICAgfQorfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7IHl5ZXJyb2s7ICB9CiB8ICchJyAgICAgICAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KIHwgJy0nIGVycm9yICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQogOwogJSUKLS8qIFRoZSBpbnB1dC4gICovCi1zdGF0aWMgRklMRSAqaW5wdXQ7CiAKLXN0YXRpYyB2b2lkCi15eWVycm9yICgKLQotICAgICAgICAgY29uc3QgY2hhciAqcykKK3N0YXRpYyBpbnQKK3Bvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQogewotCi0KLSAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIHMpOworICBpbnQgcmVzID0gMTsKKyAgYXNzZXJ0ICgwIDw9IGV4cG9uZW50KTsKKyAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQorICAgIHJlcyAqPSBiYXNlOworICByZXR1cm4gcmVzOwogfQogCiAKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgY2FsY2Vycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBZWV9MT0NBVElPTl9QUklOVCAoc3RkZXJyLCAoY2FsY2xsb2MpKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiOiAiKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CitfQVRFT0YKKworCisKK2NhdCA+Y2FsYy1sZXguYyA8PCdfQVRFT0YnCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCisKKyNpbmNsdWRlICJjYWxjLmgiCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCitpbnQgY2FsY2xleCAodm9pZCk7CitzdGF0aWMgaW50IGdldF9jaGFyICh2b2lkKTsKK3N0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKCBpbnQgYyk7CisKKworc3RhdGljIENBTENMVFlQRSBsYXN0X3l5bGxvYzsKKworc3RhdGljIGludAorZ2V0X2NoYXIgKHZvaWQpCit7CisgIGludCByZXMgPSBnZXRjIChpbnB1dCk7CisgIDsKKworICBsYXN0X3l5bGxvYyA9IChjYWxjbGxvYyk7CisgIGlmIChyZXMgPT0gJ1xuJykKKyAgICB7CisgICAgICAoY2FsY2xsb2MpLmxhc3RfbGluZSsrOworICAgICAgKGNhbGNsbG9jKS5sYXN0X2NvbHVtbiA9IDE7CisgICAgfQorICBlbHNlCisgICAgKGNhbGNsbG9jKS5sYXN0X2NvbHVtbisrOworCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkCit1bmdldF9jaGFyICggaW50IGMpCit7CisgIDsKKworICAvKiBXcm9uZyB3aGVuIEMgPT0gYFxuJy4gKi8KKyAgKGNhbGNsbG9jKSA9IGxhc3RfeXlsbG9jOworCisgIHVuZ2V0YyAoYywgaW5wdXQpOworfQorCitzdGF0aWMgaW50CityZWFkX3NpZ25lZF9pbnRlZ2VyICh2b2lkKQoreworICBpbnQgYyA9IGdldF9jaGFyICgpOworICBpbnQgc2lnbiA9IDE7CisgIGludCBuID0gMDsKKworICA7CisgIGlmIChjID09ICctJykKKyAgICB7CisgICAgICBjID0gZ2V0X2NoYXIgKCk7CisgICAgICBzaWduID0gLTE7CisgICAgfQorCisgIHdoaWxlIChpc2RpZ2l0IChjKSkKKyAgICB7CisgICAgICBuID0gMTAgKiBuICsgKGMgLSAnMCcpOworICAgICAgYyA9IGdldF9jaGFyICgpOworICAgIH0KKworICB1bmdldF9jaGFyICggYyk7CisKKyAgcmV0dXJuIHNpZ24gKiBuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBMZXhpY2FsIGFuYWx5emVyIHJldHVybnMgYW4gaW50ZWdlciBvbiB0aGUgc3RhY2sgYW5kIHRoZSB0b2tlbiB8Cit8IE5VTSwgb3IgdGhlIEFTQ0lJIGNoYXJhY3RlciByZWFkIGlmIG5vdCBhIG51bWJlci4gIFNraXBzIGFsbCAgIHwKK3wgYmxhbmtzIGFuZCB0YWJzLCByZXR1cm5zIDAgZm9yIEVPRi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2ludCBjYWxjbGV4ICh2b2lkKQoreworICBpbnQgYzsKKyAgLyogU2tpcCBjdXJyZW50IHRva2VuLCB0aGVuIHdoaXRlIHNwYWNlcy4gICovCisgIGRvCisgICAgeworICAgICAoY2FsY2xsb2MpLmZpcnN0X2NvbHVtbiA9IChjYWxjbGxvYykubGFzdF9jb2x1bW47CisgICAgICAoY2FsY2xsb2MpLmZpcnN0X2xpbmUgICA9IChjYWxjbGxvYykubGFzdF9saW5lOworCisgICAgfQorICB3aGlsZSAoKGMgPSBnZXRfY2hhciAoKSkgPT0gJyAnIHx8IGMgPT0gJ1x0Jyk7CisKKyAgLyogcHJvY2VzcyBudW1iZXJzICAgKi8KKyAgaWYgKGMgPT0gJy4nIHx8IGlzZGlnaXQgKGMpKQorICAgIHsKKyAgICAgIHVuZ2V0X2NoYXIgKCBjKTsKKyAgICAgIChjYWxjbHZhbCkuaXZhbCA9IHJlYWRfc2lnbmVkX2ludGVnZXIgKCk7CisgICAgICByZXR1cm4gTlVNOworICAgIH0KKworICAvKiBSZXR1cm4gZW5kLW9mLWZpbGUuICAqLworICBpZiAoYyA9PSBFT0YpCisgICAgcmV0dXJuIENBTENfRU9GOworCisgIC8qIFJldHVybiBzaW5nbGUgY2hhcnMuICovCisgIHJldHVybiBjOworfQorX0FURU9GCisKKworY2F0ID5jYWxjLW1haW4uYyA8PCdfQVRFT0YnCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCisKKyNpbmNsdWRlICJjYWxjLmgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2Vsc2UKKyMgdW5kZWYgYWxhcm0KKyMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCisjZW5kaWYKKworCisKK3NlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOworaW50IGdsb2JhbF9jb3VudCA9IDA7CisKKy8qIEEgQyBtYWluIGZ1bmN0aW9uLiAgKi8KK2ludAorbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworICBzZW1hbnRpY192YWx1ZSByZXN1bHQgPSAwOworICBpbnQgY291bnQgPSAwOworICBpbnQgc3RhdHVzOworCisgIC8qIFRoaXMgdXNlZCB0byBiZSBhbGFybSAoMTApLCBidXQgdGhhdCBpc24ndCBlbm91Z2ggdGltZSBmb3IKKyAgICAgYSBKdWx5IDE5OTUgdmludGFnZSBERUMgQWxwaGFzdGF0aW9uIDIwMCA0LzEwMCBzeXN0ZW0sCisgICAgIGFjY29yZGluZyB0byBOZWxzb24gSC4gRi4gQmVlYmUuICAxMDAgc2Vjb25kcyBpcyBlbm91Z2guICAqLworICBhbGFybSAoMTAwKTsKKworICBpZiAoYXJnYyA9PSAyKQorICAgIGlucHV0ID0gZm9wZW4gKGFyZ3ZbMV0sICJyIik7CisgIGVsc2UKKyAgICBpbnB1dCA9IHN0ZGluOworCisgIGlmICghaW5wdXQpCisgICAgeworICAgICAgcGVycm9yIChhcmd2WzFdKTsKKyAgICAgIHJldHVybiAzOworICAgIH0KKworICBjYWxjZGVidWcgPSAxOworICBzdGF0dXMgPSBjYWxjcGFyc2UgKCk7CisgIGlmIChmY2xvc2UgKGlucHV0KSkKKyAgICBwZXJyb3IgKCJmY2xvc2UiKTsKKyAgYXNzZXJ0IChnbG9iYWxfcmVzdWx0ID09IHJlc3VsdCk7CisgIGFzc2VydCAoZ2xvYmFsX2NvdW50ID09IGNvdW50KTsKKyAgcmV0dXJuIHN0YXR1czsKK30KK19BVEVPRgorCisKKworCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjE2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueSIgImNhbGMuYXQ6NjE2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE2OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2MTYiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjE2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTY6IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTY6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJjYWxjLmF0OjYxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTY6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgY2FsYy1sZXguYyBjYWxjLW1haW4uYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBjYWxjLWxleC5jIGNhbGMtbWFpbi5jICRMSUJTIiAiY2FsYy5hdDo2MTYiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jIGNhbGMtbGV4LmMgY2FsYy1tYWluLmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTY6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5jCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjYxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5jCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTY6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5oCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjYxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5oCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgVGVzdCB0aGUgcHJpb3JpdGllcy4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMSArIDIgKiAzID0gNworMSArIDIgKiAtMyA9IC01CisKKy0xXjIgPSAtMQorKC0xKV4yID0gMQorCistLS0xID0gLTEKKworMSAtIDIgLSAzID0gLTQKKzEgLSAoMiAtIDMpID0gMgorCisyXjJeMyA9IDI1NgorKDJeMileMyA9IDY0CitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE2OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE2OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE2IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyMgU29tZSBzeW50YXggZXJyb3JzLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxIDIKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTY6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjE2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTY6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTYiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE2OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTYiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxLy8yCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE2OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE2OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE2IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNjogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE2IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworZXJyb3IKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTY6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjE2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTY6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTYiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNjogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE2IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMSA9IDIgPSAzCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE2OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE2OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE2IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuNzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNjogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE2IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworCisrMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNjogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MTYiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisyLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKycKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTY6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIEV4ZXJjaXNlIGVycm9yIG1lc3NhZ2VzIHdpdGggRU9GOiB3b3JrIG9uIGFuIGVtcHR5IGZpbGUuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTY6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo2MTYiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTY6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTYiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE2OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTYiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIEV4ZXJjaXNlIHRoZSBlcnJvciB0b2tlbjogd2l0aG91dCBpdCwgd2UgZGllIGF0IHRoZSBmaXJzdCBlcnJvciwKKyMgaGVuY2UgYmUgc3VyZSB0bworIworIyAtIGhhdmUgc2V2ZXJhbCBlcnJvcnMgd2hpY2ggZXhlcmNpc2UgZGlmZmVyZW50IHNoaWZ0L2Rpc2NhcmRpbmdzCisjICAgLSAoKTogbm90aGluZyB0byBwb3AsIG5vdGhpbmcgdG8gZGlzY2FyZAorIyAgIC0gKDEgKyAxICsgMSArKTogYSBsb3QgdG8gcG9wLCBub3RoaW5nIHRvIGRpc2NhcmQKKyMgICAtICgqICogKik6IG5vdGhpbmcgdG8gcG9wLCBhIGxvdCB0byBkaXNjYXJkCisjICAgLSAoMSArIDIgKiAqKTogc29tZSB0byBwb3AgYW5kIGRpc2NhcmQKKyMKKyMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCisjCisjIC0gY2hlY2sgdGhlIGxvb2thaGVhZCB0aGF0IHRyaWdnZXJzIGFuIGVycm9yIGlzIG5vdCBkaXNjYXJkZWQKKyMgICB3aGVuIHdlIGVudGVyIGVycm9yIHJlY292ZXJ5LiAgQmVsb3csIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUKKyMgICBmaXJzdCBlcnJvciBpcyAiKSIsIHdoaWNoIGlzIG5lZWRlZCB0byByZWNvdmVyIGZyb20gdGhlIGVycm9yIGFuZAorIyAgIHByb2R1Y2UgdGhlICIwIiB0aGF0IHRyaWdnZXJzIHRoZSAiMCAhPSAxIiBlcnJvci4KKyMKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCkgKyAoMSArIDEgKyAxICspICsgKCogKiAqKSArICgxICogMiAqICopID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNjogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MTYiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK2NhbGM6IGVycm9yOiA0NDQ0ICE9IDEKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTY6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgVGhlIHNhbWUsIGJ1dCB0aGlzIHRpbWUgZXhlcmNpc2luZyBleHBsaWNpdGx5IHRyaWdnZXJlZCBzeW50YXggZXJyb3JzLgorIyBQT1NJWCBzYXlzIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKyghKSArICgxIDIpID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNjogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MTYiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCitjYWxjOiBlcnJvcjogMjIyMiAhPSAxCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE2OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTYiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoLSAqKSArICgxIDIpID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNjogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MTYiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjQ6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKK2NhbGM6IGVycm9yOiAyMjIyICE9IDEKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTY6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgQ2hlY2sgdGhhdCB5eWVycm9rIHdvcmtzIHByb3Blcmx5OiBzZWNvbmQgZXJyb3IgaXMgbm90IHJlcG9ydGVkLAorIyB0aGlyZCBhbmQgZm91cnRoIGFyZS4gIFBhcnNlIHN0YXR1cyBpcyBzdWNjZXNmdWxsLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoKiAqKSArICgqKSArICgqKQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNjogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MTYiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxNjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTY6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTY6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzIxNAorI0FUX1NUQVJUXzIxNQorYXRfZm5fZ3JvdXBfYmFubmVyIDIxNSAnY2FsYy5hdDo2MTgnIFwKKyAgIkNhbGN1bGF0b3IgJWRlZmluZSBhcGkucHVyZSBmdWxsICV2ZXJib3NlICVkZWJ1ZyAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeCBcImNhbGNcIiAldmVyYm9zZSAleWFjYyIgIiIgMTEKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyMTUuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisKKworCisKKworCisKKworY2F0ID5jYWxjLnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworLyogSW5maXggbm90YXRpb24gY2FsY3VsYXRvci0tY2FsYyAqLworJWRlZmluZSBhcGkucHVyZSBmdWxsICV2ZXJib3NlICVkZWJ1ZyAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeCAiY2FsYyIgJXZlcmJvc2UgJXlhY2MKKworJWNvZGUgcmVxdWlyZXMKK3sKKworICAvKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLworICB0eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKK30KKworLyogRXhlcmNpc2UgJXVuaW9uLiAqLworJXVuaW9uCit7CisgIHNlbWFudGljX3ZhbHVlIGl2YWw7Cit9OworJXByaW50ZXIgeyBmcHJpbnRmICh5eW91dHB1dCwgIiVkIiwgJCQpOyB9IDxpdmFsPjsKKworJWNvZGUgcHJvdmlkZXMKK3sKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIC8qIFRoZSBpbnB1dC4gICovCisgIGV4dGVybiBGSUxFICppbnB1dDsKKyAgZXh0ZXJuIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQ7CisgIGV4dGVybiBpbnQgZ2xvYmFsX2NvdW50OworfQorCislY29kZQoreworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2RlZmluZSBVU0UoVmFyKQorCitGSUxFICppbnB1dDsKK3N0YXRpYyBpbnQgcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpOworCitzdGF0aWMgdm9pZCBjYWxjZXJyb3IgKFlZTFRZUEUgY29uc3QgKiBjb25zdCBsbG9jcCwgIGNvbnN0IGNoYXIgKm1zZyk7CitpbnQgY2FsY2xleCAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKTsKK30KKworCisKKy8qIEJpc29uIERlY2xhcmF0aW9ucyAqLworJXRva2VuIENBTENfRU9GIDAgImVuZCBvZiBpbnB1dCIKKyV0b2tlbiA8aXZhbD4gTlVNICJudW1iZXIiCisldHlwZSAgPGl2YWw+IGV4cAorCislbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24gICAgICAgICAgICAqLworJWxlZnQgJy0nICcrJworJWxlZnQgJyonICcvJworJWxlZnQgTkVHICAgICAvKiBuZWdhdGlvbi0tdW5hcnkgbWludXMgKi8KKyVyaWdodCAnXicgICAgLyogZXhwb25lbnRpYXRpb24gICAgICAgICovCisKKy8qIEdyYW1tYXIgZm9sbG93cyAqLworJSUKK2lucHV0OgorICBsaW5lCit8IGlucHV0IGxpbmUgICAgICAgICB7ICB9Cis7CisKK2xpbmU6CisgICdcbicKK3wgZXhwICdcbicgICAgICAgICAgIHsgVVNFICgkMSk7IH0KKzsKKworZXhwOgorICBOVU0gICAgICAgICAgICAgICAgeyAkJCA9ICQxOyAgICAgICAgICAgICB9Cit8IGV4cCAnPScgZXhwCisgIHsKKyAgICBpZiAoJDEgIT0gJDMpCisgICAgICBmcHJpbnRmIChzdGRlcnIsICJjYWxjOiBlcnJvcjogJWQgIT0gJWRcbiIsICQxLCAkMyk7CisgICAgJCQgPSAkMTsKKyAgfQorfCBleHAgJysnIGV4cCAgICAgICAgeyAkJCA9ICQxICsgJDM7ICAgICAgICB9Cit8IGV4cCAnLScgZXhwICAgICAgICB7ICQkID0gJDEgLSAkMzsgICAgICAgIH0KK3wgZXhwICcqJyBleHAgICAgICAgIHsgJCQgPSAkMSAqICQzOyAgICAgICAgfQorfCBleHAgJy8nIGV4cCAgICAgICAgeyAkJCA9ICQxIC8gJDM7ICAgICAgICB9Cit8ICctJyBleHAgICVwcmVjIE5FRyB7ICQkID0gLSQyOyAgICAgICAgICAgIH0KK3wgZXhwICdeJyBleHAgICAgICAgIHsgJCQgPSBwb3dlciAoJDEsICQzKTsgfQorfCAnKCcgZXhwICcpJyAgICAgICAgeyAkJCA9ICQyOyAgICAgICAgICAgICB9Cit8ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgeXllcnJvazsgIH0KK3wgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQorfCAnLScgZXJyb3IgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9Cis7CislJQorCitzdGF0aWMgaW50Citwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKK3sKKyAgaW50IHJlcyA9IDE7CisgIGFzc2VydCAoMCA8PSBleHBvbmVudCk7CisgIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKKyAgICByZXMgKj0gYmFzZTsKKyAgcmV0dXJuIHJlczsKK30KKworCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIGNhbGNlcnJvciAoWVlMVFlQRSBjb25zdCAqIGNvbnN0IGxsb2NwLCAgY29uc3QgY2hhciAqbXNnKQoreworICBZWV9MT0NBVElPTl9QUklOVCAoc3RkZXJyLCAoKmxsb2NwKSk7CisgIGZwcmludGYgKHN0ZGVyciwgIjogIik7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorX0FURU9GCisKKworCitjYXQgPmNhbGMtbGV4LmMgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworCisjaW5jbHVkZSAiY2FsYy5oIgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworaW50IGNhbGNsZXggKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCk7CitzdGF0aWMgaW50IGdldF9jaGFyIChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApOworc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwLCAgaW50IGMpOworCiAKIHN0YXRpYyBZWUxUWVBFIGxhc3RfeXlsbG9jOwogCkBAIC0yNTY2Myw3ICs3ODA5OSw3IEBACiAgIGlmIChyZXMgPT0gJ1xuJykKICAgICB7CiAgICAgICAoKmxsb2NwKS5sYXN0X2xpbmUrKzsKLSAgICAgICgqbGxvY3ApLmxhc3RfY29sdW1uID0gMDsKKyAgICAgICgqbGxvY3ApLmxhc3RfY29sdW1uID0gMTsKICAgICB9CiAgIGVsc2UKICAgICAoKmxsb2NwKS5sYXN0X2NvbHVtbisrOwpAQCAtMjU2NzEsNyArNzgxMDcsNiBAQAogICByZXR1cm4gcmVzOwogfQogCi0KIHN0YXRpYyB2b2lkCiB1bmdldF9jaGFyIChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3AsICBpbnQgYykKIHsKQEAgLTI1NzA5LDQwICs3ODE0NCwyMyBAQAogfQogCiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IExleGljYWwgYW5hbHl6ZXIgcmV0dXJucyBhbiBpbnRlZ2VyIG9uIHRoZSBzdGFjayBhbmQgdGhlIHRva2VuIHwKIHwgTlVNLCBvciB0aGUgQVNDSUkgY2hhcmFjdGVyIHJlYWQgaWYgbm90IGEgbnVtYmVyLiAgU2tpcHMgYWxsICAgfAogfCBibGFua3MgYW5kIHRhYnMsIHJldHVybnMgMCBmb3IgRU9GLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludAoteXlsZXggKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCkKK2ludCBjYWxjbGV4IChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApCiB7Ci0gIHN0YXRpYyBpbnQgaW5pdCA9IDE7CiAgIGludCBjOwotCi0gIGlmIChpbml0KQotICAgIHsKLSAgICAgIGluaXQgPSAwOwotCi0gICAgICAoKmxsb2NwKS5sYXN0X2NvbHVtbiA9IDA7Ci0gICAgICAoKmxsb2NwKS5sYXN0X2xpbmUgPSAxOwotCi0gICAgfQotCi0KLSAoKmxsb2NwKS5maXJzdF9jb2x1bW4gPSAoKmxsb2NwKS5sYXN0X2NvbHVtbjsKLSAgKCpsbG9jcCkuZmlyc3RfbGluZSAgID0gKCpsbG9jcCkubGFzdF9saW5lOwotCi0KLSAgLyogU2tpcCB3aGl0ZSBzcGFjZS4gICovCi0gIHdoaWxlICgoYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApKSA9PSAnICcgfHwgYyA9PSAnXHQnKQorICAvKiBTa2lwIGN1cnJlbnQgdG9rZW4sIHRoZW4gd2hpdGUgc3BhY2VzLiAgKi8KKyAgZG8KICAgICB7CiAgICAgICgqbGxvY3ApLmZpcnN0X2NvbHVtbiA9ICgqbGxvY3ApLmxhc3RfY29sdW1uOwogICAgICAgKCpsbG9jcCkuZmlyc3RfbGluZSAgID0gKCpsbG9jcCkubGFzdF9saW5lOwogCiAgICAgfQorICB3aGlsZSAoKGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKSkgPT0gJyAnIHx8IGMgPT0gJ1x0Jyk7CiAKICAgLyogcHJvY2VzcyBudW1iZXJzICAgKi8KICAgaWYgKGMgPT0gJy4nIHx8IGlzZGlnaXQgKGMpKQpAQCAtMjU3NTksMTkgKzc4MTc3LDMyIEBACiAgIC8qIFJldHVybiBzaW5nbGUgY2hhcnMuICovCiAgIHJldHVybiBjOwogfQotCi1zdGF0aWMgaW50Ci1wb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKLXsKLSAgaW50IHJlcyA9IDE7Ci0gIGlmIChleHBvbmVudCA8IDApCi0gICAgZXhpdCAoMyk7Ci0gIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKLSAgICByZXMgKj0gYmFzZTsKLSAgcmV0dXJuIHJlczsKLX0KK19BVEVPRgogCiAKK2NhdCA+Y2FsYy1tYWluLmMgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworCisjaW5jbHVkZSAiY2FsYy5oIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjIHVuZGVmIGFsYXJtCisjIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLworI2VuZGlmCisKKworCitzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKK2ludCBnbG9iYWxfY291bnQgPSAwOworCisvKiBBIEMgbWFpbiBmdW5jdGlvbi4gICovCiBpbnQKIG1haW4gKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKQEAgLTI1Nzk1LDEyICs3ODIyNiwxMiBAQAogICAgICAgcmV0dXJuIDM7CiAgICAgfQogCi0gIHl5ZGVidWcgPSAxOwotICBzdGF0dXMgPSB5eXBhcnNlICgpOwotICBpZiAoZ2xvYmFsX3Jlc3VsdCAhPSByZXN1bHQpCi0gICAgYWJvcnQgKCk7Ci0gIGlmIChnbG9iYWxfY291bnQgIT0gY291bnQpCi0gICAgYWJvcnQgKCk7CisgIGNhbGNkZWJ1ZyA9IDE7CisgIHN0YXR1cyA9IGNhbGNwYXJzZSAoKTsKKyAgaWYgKGZjbG9zZSAoaW5wdXQpKQorICAgIHBlcnJvciAoImZjbG9zZSIpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOwogICByZXR1cm4gc3RhdHVzOwogfQogX0FURU9GCkBAIC0yNTgwOSw1NSArNzgyNDAsMTc4IEBACiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY3OiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgotZWNobyBjYWxjLmF0OjU2NyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gY2FsYy5jIGNhbGMueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2NzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjYxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiICJjYWxjLmF0OjYxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjE4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjYxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE4OiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSAgICRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1Njc6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgXCRMSUJTIgotZWNobyBjYWxjLmF0OjU2NyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jICRMSUJTICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisgICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTg6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJjYWxjLmF0OjYxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTg6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgY2FsYy1sZXguYyBjYWxjLW1haW4uYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBjYWxjLWxleC5jIGNhbGMtbWFpbi5jICRMSUJTIiAiY2FsYy5hdDo2MTgiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jIGNhbGMtbGV4LmMgY2FsYy1tYWluLmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE4OiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuYworIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2MTgiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuYworCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE4OiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuaAorIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2MTgiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuaAorCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAjIFRlc3QgdGhlIHByaW9yaXRpZXMuCkBAIC0yNTg3Nyw2MiArNzg0MzEsNjYgQEAKICgyXjIpXjMgPSA2NAogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1Njc6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NjcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1Njc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxODogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MTgiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxODogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKIAogIyBTb21lIHN5bnRheCBlcnJvcnMuCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLTAgMAorMSAyCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2NzogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU2NyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2NzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0yNTk0Myw4MCArNzg1MDEsNzIgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KLXNlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAotbXYgYXQtZXhwb3V0IGV4cG91dAorCiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgotCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1Njc6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTY3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2NzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTg6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKIDEvLzIKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY3OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTY3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjE4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTI2MDI3LDgwICs3ODU3Nyw3MiBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJy8nLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgotc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0Ci1tdiBhdC1leHBvdXQgZXhwb3V0CisKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCi0KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2NzogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NjcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxODogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogZXJyb3IKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY3OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTY3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjE4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTI2MTExLDgwICs3ODY1Myw3MiBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCi1zZWQgJ3MvXlstMC05Ll0qOiAvLycgZXhwb3V0ID5hdC1leHBvdXQKLW12IGF0LWV4cG91dCBleHBvdXQKKwogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KLQorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY3OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU2NyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1Njc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE4OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTgiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiAxID0gMiA9IDMKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY3OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTY3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjE4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTI2MTk1LDUwICs3ODcyOSw0MCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS42OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCisxLjc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPScKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgotc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0Ci1tdiBhdC1leHBvdXQgZXhwb3V0CisKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCi0KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2NzogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NjcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxODogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwpAQCAtMjYyNDYsMzAgKzc4NzcwLDMyIEBACiArMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1Njc6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NjcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1Njc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxODogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MTgiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxODogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMjYyODAsNzcgKzc4ODA2LDY5IEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0yLjA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKycKKzIuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCi1zZWQgJ3MvXlstMC05Ll0qOiAvLycgZXhwb3V0ID5hdC1leHBvdXQKLW12IGF0LWV4cG91dCBleHBvdXQKKwogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KLQorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY3OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU2NyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1Njc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE4OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTgiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2NzogXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKLWVjaG8gY2FsYy5hdDo1NjcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo2MTgiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTI2MzYxLDUwICs3ODg3OSw0MCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgotc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0Ci1tdiBhdC1leHBvdXQgZXhwb3V0CisKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCi0KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2NzogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NjcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxODogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIApAQCAtMjY0MTksOCArNzg5MjcsOCBAQAogIwogIyAtIHRlc3QgdGhlIGFjdGlvbiBhc3NvY2lhdGVkIHRvIGBlcnJvcicKICMKLSMgLSBjaGVjayB0aGUgbG9vay1haGVhZCB0aGF0IHRyaWdnZXJzIGFuIGVycm9yIGlzIG5vdCBkaXNjYXJkZWQKLSMgICB3aGVuIHdlIGVudGVyIGVycm9yIHJlY292ZXJ5LiAgQmVsb3csIHRoZSBsb29rLWFoZWFkIGNhdXNpbmcgdGhlCisjIC0gY2hlY2sgdGhlIGxvb2thaGVhZCB0aGF0IHRyaWdnZXJzIGFuIGVycm9yIGlzIG5vdCBkaXNjYXJkZWQKKyMgICB3aGVuIHdlIGVudGVyIGVycm9yIHJlY292ZXJ5LiAgQmVsb3csIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUKICMgICBmaXJzdCBlcnJvciBpcyAiKSIsIHdoaWNoIGlzIG5lZWRlZCB0byByZWNvdmVyIGZyb20gdGhlIGVycm9yIGFuZAogIyAgIHByb2R1Y2UgdGhlICIwIiB0aGF0IHRyaWdnZXJzIHRoZSAiMCAhPSAxIiBlcnJvci4KICMKQEAgLTI2NDI4LDMwICs3ODkzNiwzMiBAQAogKCkgKyAoMSArIDEgKyAxICspICsgKCogKiAqKSArICgxICogMiAqICopID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1Njc6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NjcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1Njc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxODogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MTgiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxODogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMjY0NjIsODcgKzc4OTcyLDc5IEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuNDA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xODogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4yMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS40MTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogY2FsYzogZXJyb3I6IDQ0NDQgIT0gMQogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCi1zZWQgJ3MvXlstMC05Ll0qOiAvLycgZXhwb3V0ID5hdC1leHBvdXQKLW12IGF0LWV4cG91dCBleHBvdXQKKwogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KLQorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY3OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU2NyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1Njc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE4OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTgiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAjIFRoZSBzYW1lLCBidXQgdGhpcyB0aW1lIGV4ZXJjaXNpbmcgZXhwbGljaXRseSB0cmlnZ2VyZWQgc3ludGF4IGVycm9ycy4KLSMgUE9TSVggc2F5cyB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KKyMgUE9TSVggc2F5cyB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0oISkgKyAoMCAwKSA9IDEKKyghKSArICgxIDIpID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1Njc6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NjcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1Njc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxODogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MTgiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxODogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMjY1NTMsODEgKzc5MDU1LDczIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjk6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKIGNhbGM6IGVycm9yOiAyMjIyICE9IDEKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgotc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0Ci1tdiBhdC1leHBvdXQgZXhwb3V0CisKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCi0KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2NzogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NjcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxODogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotKC0gKikgKyAoMCAwKSA9IDEKKygtICopICsgKDEgMikgPSAxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2NzogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU2NyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2NzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0yNjYzOCwxMTYgKzc5MTMyLDE0MCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjExOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjQ6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKIGNhbGM6IGVycm9yOiAyMjIyICE9IDEKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgotc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0Ci1tdiBhdC1leHBvdXQgZXhwb3V0CisKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCi0KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2NzogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NjcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTg6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQogCi0kYXRfdHJhY2VvbgorCisjIENoZWNrIHRoYXQgeXllcnJvayB3b3JrcyBwcm9wZXJseTogc2Vjb25kIGVycm9yIGlzIG5vdCByZXBvcnRlZCwKKyMgdGhpcmQgYW5kIGZvdXJ0aCBhcmUuICBQYXJzZSBzdGF0dXMgaXMgc3VjY2VzZnVsbC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCogKikgKyAoKikgKyAoKikKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjE4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE2OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE4OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTgiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICA4MyApICMgODMuIGNhbGMuYXQ6NTY5OiBDYWxjdWxhdG9yICVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjICVwYXJzZS1wYXJhbSB7c2VtYW50aWNfdmFsdWUgKnJlc3VsdH0gJXBhcnNlLXBhcmFtIHtpbnQgKmNvdW50fQotICAgIGF0X3NldHVwX2xpbmU9J2NhbGMuYXQ6NTY5JwotICAgIGF0X2Rlc2M9J0NhbGN1bGF0b3IgJXB1cmUtcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MgJXBhcnNlLXBhcmFtIHtzZW1hbnRpY192YWx1ZSAqcmVzdWx0fSAlcGFyc2UtcGFyYW0ge2ludCAqY291bnR9JwotICAgICRhdF9xdWlldCAkRUNIT19OICIgODM6IENhbGN1bGF0b3IgJXB1cmUtcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MgJXBhcnNlLXBhcmFtIHtzZW1hbnRpY192YWx1ZSAqcmVzdWx0fSAlcGFyc2UtcGFyYW0ge2ludCAqY291bnR9JEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjgzLiBjYWxjLmF0OjU2OTogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgotCi0KLQotCi0KLQotCi0KLSMgVXNpbmcgeWFjYy5jPwotCi0KLQotCi0KLQotCi0jIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmICVsb2NhdGlvbiAmICVwdXJlICYgKCVnbHIgb3IgJXBhcnNlLXBhcmFtKS4KLQotIyB5eWVycm9yIGFsd2F5cyBzZWVzIHRoZSBsb2NhdGlvbnMgKHdoZW4gYWN0aXZhdGVkKSwgZXhjZXB0IGlmCi0jIHlhY2MgJiBwdXJlICYgIXBhcmFtLgotCi0KLSMgVGhlIGludGVyZmFjZSBpcyBwdXJlOiBlaXRoZXIgYmVjYXVzZSAlcHVyZS1wYXJzZXIsIG9yIGJlY2F1c2Ugd2UKLSMgYXJlIHVzaW5nIHRoZSBDKysgcGFyc2Vycy4KLQotCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzIxNQorI0FUX1NUQVJUXzIxNgorYXRfZm5fZ3JvdXBfYmFubmVyIDIxNiAnY2FsYy5hdDo2MTknIFwKKyAgIkNhbGN1bGF0b3IgJWRlZmluZSBhcGkucHVzaC1wdWxsIGJvdGggJWRlZmluZSBhcGkucHVyZSBmdWxsICV2ZXJib3NlICVkZWJ1ZyAlbG9jYXRpb25zICVkZWZpbmVzICVkZWZpbmUgYXBpLnByZWZpeCBcImNhbGNcIiAldmVyYm9zZSAleWFjYyIgIiIgMTEKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyMTYuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiAKQEAgLTI2NzU5LDU5ICs3OTI3Nyw1MiBAQAogCiAKIGNhdCA+Y2FsYy55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogLyogSW5maXggbm90YXRpb24gY2FsY3VsYXRvci0tY2FsYyAqLwotJXB1cmUtcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MgJXBhcnNlLXBhcmFtIHtzZW1hbnRpY192YWx1ZSAqcmVzdWx0fSAlcGFyc2UtcGFyYW0ge2ludCAqY291bnR9CislZGVmaW5lIGFwaS5wdXNoLXB1bGwgYm90aCAlZGVmaW5lIGFwaS5wdXJlIGZ1bGwgJXZlcmJvc2UgJWRlYnVnICVsb2NhdGlvbnMgJWRlZmluZXMgJWRlZmluZSBhcGkucHJlZml4ICJjYWxjIiAldmVyYm9zZSAleWFjYwogCi0lewotI2luY2x1ZGUgPHN0ZGlvLmg+CislY29kZSByZXF1aXJlcworewogCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaWYgSEFWRV9VTklTVERfSAotIyBpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbHNlCi0jIHVuZGVmIGFsYXJtCi0jIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLwotI2VuZGlmCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNkZWZpbmUgVVNFKFZhcikKLQotLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KLXR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOwotCi1zdGF0aWMgc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7Ci1zdGF0aWMgaW50IGdsb2JhbF9jb3VudCA9IDA7Ci0lfQorICAvKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLworICB0eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKK30KIAogLyogRXhlcmNpc2UgJXVuaW9uLiAqLwogJXVuaW9uCiB7CiAgIHNlbWFudGljX3ZhbHVlIGl2YWw7CiB9OworJXByaW50ZXIgeyBmcHJpbnRmICh5eW91dHB1dCwgIiVkIiwgJCQpOyB9IDxpdmFsPjsKIAotJXsKKyVjb2RlIHByb3ZpZGVzCit7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICAvKiBUaGUgaW5wdXQuICAqLworICBleHRlcm4gRklMRSAqaW5wdXQ7CisgIGV4dGVybiBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0OworICBleHRlcm4gaW50IGdsb2JhbF9jb3VudDsKK30KKworJWNvZGUKK3sKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNkZWZpbmUgVVNFKFZhcikKKworRklMRSAqaW5wdXQ7CiBzdGF0aWMgaW50IHBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KTsKLS8qIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmOgotICAgLSAlbG9jYXRpb24gJiAlcHVyZSAmICVnbHIKLSAgIC0gJWxvY2F0aW9uICYgJXB1cmUgJiAleWFjYyAmICVwYXJzZS1wYXJhbS4gKi8KLXN0YXRpYyB2b2lkIHl5ZXJyb3IgKFlZTFRZUEUgKmxsb2NwLAotICAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNfdmFsdWUgKnJlc3VsdCwgaW50ICpjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMKLSAgICAgICAgICAgICAgICAgICAgICk7Ci1zdGF0aWMgaW50IHl5bGV4IChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApOwotc3RhdGljIGludCBnZXRfY2hhciAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKTsKLXN0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCwgIGludCBjKTsKLSV9CisKK3N0YXRpYyB2b2lkIGNhbGNlcnJvciAoQ0FMQ0xUWVBFIGNvbnN0ICogY29uc3QgbGxvY3AsICBjb25zdCBjaGFyICptc2cpOworaW50IGNhbGNsZXggKENBTENTVFlQRSAqbHZhbHAsIENBTENMVFlQRSAqbGxvY3ApOworfQogCiAKIApAQCAtMjY4MjAsNyArNzkzMzEsMTMzMCBAQAogJXRva2VuIDxpdmFsPiBOVU0gIm51bWJlciIKICV0eXBlICA8aXZhbD4gZXhwCiAKLSVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbgkgICAgICAgKi8KKyVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbiAgICAgICAgICAgICovCislbGVmdCAnLScgJysnCislbGVmdCAnKicgJy8nCislbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLworJXJpZ2h0ICdeJyAgICAvKiBleHBvbmVudGlhdGlvbiAgICAgICAgKi8KKworLyogR3JhbW1hciBmb2xsb3dzICovCislJQoraW5wdXQ6CisgIGxpbmUKK3wgaW5wdXQgbGluZSAgICAgICAgIHsgIH0KKzsKKworbGluZToKKyAgJ1xuJworfCBleHAgJ1xuJyAgICAgICAgICAgeyBVU0UgKCQxKTsgfQorOworCitleHA6CisgIE5VTSAgICAgICAgICAgICAgICB7ICQkID0gJDE7ICAgICAgICAgICAgIH0KK3wgZXhwICc9JyBleHAKKyAgeworICAgIGlmICgkMSAhPSAkMykKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImNhbGM6IGVycm9yOiAlZCAhPSAlZFxuIiwgJDEsICQzKTsKKyAgICAkJCA9ICQxOworICB9Cit8IGV4cCAnKycgZXhwICAgICAgICB7ICQkID0gJDEgKyAkMzsgICAgICAgIH0KK3wgZXhwICctJyBleHAgICAgICAgIHsgJCQgPSAkMSAtICQzOyAgICAgICAgfQorfCBleHAgJyonIGV4cCAgICAgICAgeyAkJCA9ICQxICogJDM7ICAgICAgICB9Cit8IGV4cCAnLycgZXhwICAgICAgICB7ICQkID0gJDEgLyAkMzsgICAgICAgIH0KK3wgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSAtJDI7ICAgICAgICAgICAgfQorfCBleHAgJ14nIGV4cCAgICAgICAgeyAkJCA9IHBvd2VyICgkMSwgJDMpOyB9Cit8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgIH0KK3wgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyB5eWVycm9rOyAgfQorfCAnIScgICAgICAgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9Cit8ICctJyBlcnJvciAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KKzsKKyUlCisKK3N0YXRpYyBpbnQKK3Bvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQoreworICBpbnQgcmVzID0gMTsKKyAgYXNzZXJ0ICgwIDw9IGV4cG9uZW50KTsKKyAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQorICAgIHJlcyAqPSBiYXNlOworICByZXR1cm4gcmVzOworfQorCisKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgY2FsY2Vycm9yIChDQUxDTFRZUEUgY29uc3QgKiBjb25zdCBsbG9jcCwgIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgWVlfTE9DQVRJT05fUFJJTlQgKHN0ZGVyciwgKCpsbG9jcCkpOworICBmcHJpbnRmIChzdGRlcnIsICI6ICIpOworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KK19BVEVPRgorCisKKworY2F0ID5jYWxjLWxleC5jIDw8J19BVEVPRicKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKKworI2luY2x1ZGUgImNhbGMuaCIKKworI2luY2x1ZGUgPGN0eXBlLmg+CisKK2ludCBjYWxjbGV4IChDQUxDU1RZUEUgKmx2YWxwLCBDQUxDTFRZUEUgKmxsb2NwKTsKK3N0YXRpYyBpbnQgZ2V0X2NoYXIgKENBTENTVFlQRSAqbHZhbHAsIENBTENMVFlQRSAqbGxvY3ApOworc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoQ0FMQ1NUWVBFICpsdmFscCwgQ0FMQ0xUWVBFICpsbG9jcCwgIGludCBjKTsKKworCitzdGF0aWMgQ0FMQ0xUWVBFIGxhc3RfeXlsbG9jOworCitzdGF0aWMgaW50CitnZXRfY2hhciAoQ0FMQ1NUWVBFICpsdmFscCwgQ0FMQ0xUWVBFICpsbG9jcCkKK3sKKyAgaW50IHJlcyA9IGdldGMgKGlucHV0KTsKKyAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKKworICBsYXN0X3l5bGxvYyA9ICgqbGxvY3ApOworICBpZiAocmVzID09ICdcbicpCisgICAgeworICAgICAgKCpsbG9jcCkubGFzdF9saW5lKys7CisgICAgICAoKmxsb2NwKS5sYXN0X2NvbHVtbiA9IDE7CisgICAgfQorICBlbHNlCisgICAgKCpsbG9jcCkubGFzdF9jb2x1bW4rKzsKKworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZAordW5nZXRfY2hhciAoQ0FMQ1NUWVBFICpsdmFscCwgQ0FMQ0xUWVBFICpsbG9jcCwgIGludCBjKQoreworICAodm9pZCkgbHZhbHA7KHZvaWQpIGxsb2NwOworCisgIC8qIFdyb25nIHdoZW4gQyA9PSBgXG4nLiAqLworICAoKmxsb2NwKSA9IGxhc3RfeXlsbG9jOworCisgIHVuZ2V0YyAoYywgaW5wdXQpOworfQorCitzdGF0aWMgaW50CityZWFkX3NpZ25lZF9pbnRlZ2VyIChDQUxDU1RZUEUgKmx2YWxwLCBDQUxDTFRZUEUgKmxsb2NwKQoreworICBpbnQgYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApOworICBpbnQgc2lnbiA9IDE7CisgIGludCBuID0gMDsKKworICAodm9pZCkgbHZhbHA7KHZvaWQpIGxsb2NwOworICBpZiAoYyA9PSAnLScpCisgICAgeworICAgICAgYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApOworICAgICAgc2lnbiA9IC0xOworICAgIH0KKworICB3aGlsZSAoaXNkaWdpdCAoYykpCisgICAgeworICAgICAgbiA9IDEwICogbiArIChjIC0gJzAnKTsKKyAgICAgIGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKTsKKyAgICB9CisKKyAgdW5nZXRfY2hhciAobHZhbHAsIGxsb2NwLCAgYyk7CisKKyAgcmV0dXJuIHNpZ24gKiBuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBMZXhpY2FsIGFuYWx5emVyIHJldHVybnMgYW4gaW50ZWdlciBvbiB0aGUgc3RhY2sgYW5kIHRoZSB0b2tlbiB8Cit8IE5VTSwgb3IgdGhlIEFTQ0lJIGNoYXJhY3RlciByZWFkIGlmIG5vdCBhIG51bWJlci4gIFNraXBzIGFsbCAgIHwKK3wgYmxhbmtzIGFuZCB0YWJzLCByZXR1cm5zIDAgZm9yIEVPRi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2ludCBjYWxjbGV4IChDQUxDU1RZUEUgKmx2YWxwLCBDQUxDTFRZUEUgKmxsb2NwKQoreworICBpbnQgYzsKKyAgLyogU2tpcCBjdXJyZW50IHRva2VuLCB0aGVuIHdoaXRlIHNwYWNlcy4gICovCisgIGRvCisgICAgeworICAgICAoKmxsb2NwKS5maXJzdF9jb2x1bW4gPSAoKmxsb2NwKS5sYXN0X2NvbHVtbjsKKyAgICAgICgqbGxvY3ApLmZpcnN0X2xpbmUgICA9ICgqbGxvY3ApLmxhc3RfbGluZTsKKworICAgIH0KKyAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCkpID09ICcgJyB8fCBjID09ICdcdCcpOworCisgIC8qIHByb2Nlc3MgbnVtYmVycyAgICovCisgIGlmIChjID09ICcuJyB8fCBpc2RpZ2l0IChjKSkKKyAgICB7CisgICAgICB1bmdldF9jaGFyIChsdmFscCwgbGxvY3AsICBjKTsKKyAgICAgICgqbHZhbHApLml2YWwgPSByZWFkX3NpZ25lZF9pbnRlZ2VyIChsdmFscCwgbGxvY3ApOworICAgICAgcmV0dXJuIE5VTTsKKyAgICB9CisKKyAgLyogUmV0dXJuIGVuZC1vZi1maWxlLiAgKi8KKyAgaWYgKGMgPT0gRU9GKQorICAgIHJldHVybiBDQUxDX0VPRjsKKworICAvKiBSZXR1cm4gc2luZ2xlIGNoYXJzLiAqLworICByZXR1cm4gYzsKK30KK19BVEVPRgorCisKK2NhdCA+Y2FsYy1tYWluLmMgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworCisjaW5jbHVkZSAiY2FsYy5oIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjIHVuZGVmIGFsYXJtCisjIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLworI2VuZGlmCisKKworCitzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKK2ludCBnbG9iYWxfY291bnQgPSAwOworCisvKiBBIEMgbWFpbiBmdW5jdGlvbi4gICovCitpbnQKK21haW4gKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKyAgc2VtYW50aWNfdmFsdWUgcmVzdWx0ID0gMDsKKyAgaW50IGNvdW50ID0gMDsKKyAgaW50IHN0YXR1czsKKworICAvKiBUaGlzIHVzZWQgdG8gYmUgYWxhcm0gKDEwKSwgYnV0IHRoYXQgaXNuJ3QgZW5vdWdoIHRpbWUgZm9yCisgICAgIGEgSnVseSAxOTk1IHZpbnRhZ2UgREVDIEFscGhhc3RhdGlvbiAyMDAgNC8xMDAgc3lzdGVtLAorICAgICBhY2NvcmRpbmcgdG8gTmVsc29uIEguIEYuIEJlZWJlLiAgMTAwIHNlY29uZHMgaXMgZW5vdWdoLiAgKi8KKyAgYWxhcm0gKDEwMCk7CisKKyAgaWYgKGFyZ2MgPT0gMikKKyAgICBpbnB1dCA9IGZvcGVuIChhcmd2WzFdLCAiciIpOworICBlbHNlCisgICAgaW5wdXQgPSBzdGRpbjsKKworICBpZiAoIWlucHV0KQorICAgIHsKKyAgICAgIHBlcnJvciAoYXJndlsxXSk7CisgICAgICByZXR1cm4gMzsKKyAgICB9CisKKyAgY2FsY2RlYnVnID0gMTsKKyAgc3RhdHVzID0gY2FsY3BhcnNlICgpOworICBpZiAoZmNsb3NlIChpbnB1dCkpCisgICAgcGVycm9yICgiZmNsb3NlIik7CisgIGFzc2VydCAoZ2xvYmFsX3Jlc3VsdCA9PSByZXN1bHQpOworICBhc3NlcnQgKGdsb2JhbF9jb3VudCA9PSBjb3VudCk7CisgIHJldHVybiBzdGF0dXM7Cit9CitfQVRFT0YKKworCisKKworCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjYxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiICJjYWxjLmF0OjYxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjYxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5OiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTkiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiY2FsYy5hdDo2MTkiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jIGNhbGMtbGV4LmMgY2FsYy1tYWluLmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgY2FsYy1sZXguYyBjYWxjLW1haW4uYyAkTElCUyIgImNhbGMuYXQ6NjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBjYWxjLWxleC5jIGNhbGMtbWFpbi5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5OiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuYworIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2MTkiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuYworCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5OiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuaAorIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2MTkiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuaAorCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIFRlc3QgdGhlIHByaW9yaXRpZXMuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEgKyAyICogMyA9IDcKKzEgKyAyICogLTMgPSAtNQorCistMV4yID0gLTEKKygtMSleMiA9IDEKKworLS0tMSA9IC0xCisKKzEgLSAyIC0gMyA9IC00CisxIC0gKDIgLSAzKSA9IDIKKworMl4yXjMgPSAyNTYKKygyXjIpXjMgPSA2NAorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MTkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisjIFNvbWUgc3ludGF4IGVycm9ycy4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMSAyCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMS8vMgorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MTkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKK2Vycm9yCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICR1bmRlZmluZWQKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEgPSAyID0gMworX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MTkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKworKzEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIgImNhbGMuYXQ6NjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBFeGVyY2lzZSB0aGUgZXJyb3IgdG9rZW46IHdpdGhvdXQgaXQsIHdlIGRpZSBhdCB0aGUgZmlyc3QgZXJyb3IsCisjIGhlbmNlIGJlIHN1cmUgdG8KKyMKKyMgLSBoYXZlIHNldmVyYWwgZXJyb3JzIHdoaWNoIGV4ZXJjaXNlIGRpZmZlcmVudCBzaGlmdC9kaXNjYXJkaW5ncworIyAgIC0gKCk6IG5vdGhpbmcgdG8gcG9wLCBub3RoaW5nIHRvIGRpc2NhcmQKKyMgICAtICgxICsgMSArIDEgKyk6IGEgbG90IHRvIHBvcCwgbm90aGluZyB0byBkaXNjYXJkCisjICAgLSAoKiAqICopOiBub3RoaW5nIHRvIHBvcCwgYSBsb3QgdG8gZGlzY2FyZAorIyAgIC0gKDEgKyAyICogKik6IHNvbWUgdG8gcG9wIGFuZCBkaXNjYXJkCisjCisjIC0gdGVzdCB0aGUgYWN0aW9uIGFzc29jaWF0ZWQgdG8gYGVycm9yJworIworIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCisjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKKyMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCisjCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygpICsgKDEgKyAxICsgMSArKSArICgqICogKikgKyAoMSAqIDIgKiAqKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjIzOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjQxOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitjYWxjOiBlcnJvcjogNDQ0NCAhPSAxCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIFRoZSBzYW1lLCBidXQgdGhpcyB0aW1lIGV4ZXJjaXNpbmcgZXhwbGljaXRseSB0cmlnZ2VyZWQgc3ludGF4IGVycm9ycy4KKyMgUE9TSVggc2F5cyB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoISkgKyAoMSAyKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4xMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorY2FsYzogZXJyb3I6IDIyMjIgIT0gMQorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKC0gKikgKyAoMSAyKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS40OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCitjYWxjOiBlcnJvcjogMjIyMiAhPSAxCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIENoZWNrIHRoYXQgeXllcnJvayB3b3JrcyBwcm9wZXJseTogc2Vjb25kIGVycm9yIGlzIG5vdCByZXBvcnRlZCwKKyMgdGhpcmQgYW5kIGZvdXJ0aCBhcmUuICBQYXJzZSBzdGF0dXMgaXMgc3VjY2VzZnVsbC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCogKikgKyAoKikgKyAoKikKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjE5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MTk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE2OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjE5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MTkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yMTYKKyNBVF9TVEFSVF8yMTcKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyMTcgJ2NhbGMuYXQ6NjIxJyBcCisgICJDYWxjdWxhdG9yICVkZWZpbmUgYXBpLnB1cmUgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVsb2NhdGlvbnMgJWRlZmluZXMgJWRlZmluZSBhcGkucHJlZml4IFwiY2FsY1wiICV2ZXJib3NlICV5YWNjICVwYXJzZS1wYXJhbSB7c2VtYW50aWNfdmFsdWUgKnJlc3VsdH0gJXBhcnNlLXBhcmFtIHtpbnQgKmNvdW50fSIgIiIgMTEKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyMTcuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisKKworCisKKworCisKKworY2F0ID5jYWxjLnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworLyogSW5maXggbm90YXRpb24gY2FsY3VsYXRvci0tY2FsYyAqLworJWRlZmluZSBhcGkucHVyZSAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlZGVmaW5lIGFwaS5wcmVmaXggImNhbGMiICV2ZXJib3NlICV5YWNjICVwYXJzZS1wYXJhbSB7c2VtYW50aWNfdmFsdWUgKnJlc3VsdH0gJXBhcnNlLXBhcmFtIHtpbnQgKmNvdW50fQorCislY29kZSByZXF1aXJlcworeworCisgIC8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCisgIHR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOworfQorCisvKiBFeGVyY2lzZSAldW5pb24uICovCisldW5pb24KK3sKKyAgc2VtYW50aWNfdmFsdWUgaXZhbDsKK307CislcHJpbnRlciB7IGZwcmludGYgKHl5b3V0cHV0LCAiJWQiLCAkJCk7IH0gPGl2YWw+OworCislY29kZSBwcm92aWRlcworeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgLyogVGhlIGlucHV0LiAgKi8KKyAgZXh0ZXJuIEZJTEUgKmlucHV0OworICBleHRlcm4gc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdDsKKyAgZXh0ZXJuIGludCBnbG9iYWxfY291bnQ7Cit9CisKKyVjb2RlCit7CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZGVmaW5lIFVTRShWYXIpCisKK0ZJTEUgKmlucHV0Oworc3RhdGljIGludCBwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCk7CisKK3N0YXRpYyB2b2lkIGNhbGNlcnJvciAoQ0FMQ0xUWVBFIGNvbnN0ICogY29uc3QgbGxvY3AsIHNlbWFudGljX3ZhbHVlICpyZXN1bHQsIGludCAqY291bnQsICBjb25zdCBjaGFyICptc2cpOworaW50IGNhbGNsZXggKENBTENTVFlQRSAqbHZhbHAsIENBTENMVFlQRSAqbGxvY3ApOworfQorCisKKworLyogQmlzb24gRGVjbGFyYXRpb25zICovCisldG9rZW4gQ0FMQ19FT0YgMCAiZW5kIG9mIGlucHV0IgorJXRva2VuIDxpdmFsPiBOVU0gIm51bWJlciIKKyV0eXBlICA8aXZhbD4gZXhwCisKKyVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbiAgICAgICAgICAgICovCiAlbGVmdCAnLScgJysnCiAlbGVmdCAnKicgJy8nCiAlbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLwpAQCAtMjY4NTMsMzkgKzgwNjg3LDU4IEBACiB8ICctJyBleHAgICVwcmVjIE5FRyB7ICQkID0gLSQyOyAgICAgICAgICAgIH0KIHwgZXhwICdeJyBleHAgICAgICAgIHsgJCQgPSBwb3dlciAoJDEsICQzKTsgfQogfCAnKCcgZXhwICcpJyAgICAgICAgeyAkJCA9ICQyOyAgICAgICAgICAgICB9Ci18ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgICAgICAgICAgIH0KK3wgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyB5eWVycm9rOyAgfQogfCAnIScgICAgICAgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9CiB8ICctJyBlcnJvciAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KIDsKICUlCi0vKiBUaGUgaW5wdXQuICAqLwotc3RhdGljIEZJTEUgKmlucHV0OwogCi1zdGF0aWMgdm9pZAoteXllcnJvciAoWVlMVFlQRSAqbGxvY3AsCi0gICAgICAgICBzZW1hbnRpY192YWx1ZSAqcmVzdWx0LCBpbnQgKmNvdW50LAotICAgICAgICAgY29uc3QgY2hhciAqcykKK3N0YXRpYyBpbnQKK3Bvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQogewotKHZvaWQpIHJlc3VsdDsgKHZvaWQpIGNvdW50OwotCi0gIGZwcmludGYgKHN0ZGVyciwgIiVkLiVkIiwKLSAgICAgICAgICAgKCpsbG9jcCkuZmlyc3RfbGluZSwgKCpsbG9jcCkuZmlyc3RfY29sdW1uKTsKLSAgaWYgKCgqbGxvY3ApLmZpcnN0X2xpbmUgIT0gKCpsbG9jcCkubGFzdF9saW5lKQotICAgIGZwcmludGYgKHN0ZGVyciwgIi0lZC4lZCIsCi0JICAgICAoKmxsb2NwKS5sYXN0X2xpbmUsICAoKmxsb2NwKS5sYXN0X2NvbHVtbiAtIDEpOwotICBlbHNlIGlmICgoKmxsb2NwKS5maXJzdF9jb2x1bW4gIT0gKCpsbG9jcCkubGFzdF9jb2x1bW4gLSAxKQotICAgIGZwcmludGYgKHN0ZGVyciwgIi0lZCIsCi0JICAgICAoKmxsb2NwKS5sYXN0X2NvbHVtbiAtIDEpOwotICBmcHJpbnRmIChzdGRlcnIsICI6ICIpOwotICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgcyk7CisgIGludCByZXMgPSAxOworICBhc3NlcnQgKDAgPD0gZXhwb25lbnQpOworICBmb3IgKC8qIE5pZW50ZSAqLzsgZXhwb25lbnQ7IC0tZXhwb25lbnQpCisgICAgcmVzICo9IGJhc2U7CisgIHJldHVybiByZXM7CiB9CiAKIAorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCBjYWxjZXJyb3IgKENBTENMVFlQRSBjb25zdCAqIGNvbnN0IGxsb2NwLCBzZW1hbnRpY192YWx1ZSAqcmVzdWx0LCBpbnQgKmNvdW50LCAgY29uc3QgY2hhciAqbXNnKQoreworICBZWVVTRShyZXN1bHQpOworICBZWVVTRShjb3VudCk7CisgIFlZX0xPQ0FUSU9OX1BSSU5UIChzdGRlcnIsICgqbGxvY3ApKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiOiAiKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CitfQVRFT0YKIAotc3RhdGljIFlZTFRZUEUgbGFzdF95eWxsb2M7CisKKworY2F0ID5jYWxjLWxleC5jIDw8J19BVEVPRicKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKKworI2luY2x1ZGUgImNhbGMuaCIKKworI2luY2x1ZGUgPGN0eXBlLmg+CisKK2ludCBjYWxjbGV4IChDQUxDU1RZUEUgKmx2YWxwLCBDQUxDTFRZUEUgKmxsb2NwKTsKK3N0YXRpYyBpbnQgZ2V0X2NoYXIgKENBTENTVFlQRSAqbHZhbHAsIENBTENMVFlQRSAqbGxvY3ApOworc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoQ0FMQ1NUWVBFICpsdmFscCwgQ0FMQ0xUWVBFICpsbG9jcCwgIGludCBjKTsKKworCitzdGF0aWMgQ0FMQ0xUWVBFIGxhc3RfeXlsbG9jOwogCiBzdGF0aWMgaW50Ci1nZXRfY2hhciAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKQorZ2V0X2NoYXIgKENBTENTVFlQRSAqbHZhbHAsIENBTENMVFlQRSAqbGxvY3ApCiB7CiAgIGludCByZXMgPSBnZXRjIChpbnB1dCk7CiAgICh2b2lkKSBsdmFscDsodm9pZCkgbGxvY3A7CkBAIC0yNjg5NCw3ICs4MDc0Nyw3IEBACiAgIGlmIChyZXMgPT0gJ1xuJykKICAgICB7CiAgICAgICAoKmxsb2NwKS5sYXN0X2xpbmUrKzsKLSAgICAgICgqbGxvY3ApLmxhc3RfY29sdW1uID0gMDsKKyAgICAgICgqbGxvY3ApLmxhc3RfY29sdW1uID0gMTsKICAgICB9CiAgIGVsc2UKICAgICAoKmxsb2NwKS5sYXN0X2NvbHVtbisrOwpAQCAtMjY5MDIsOSArODA3NTUsOCBAQAogICByZXR1cm4gcmVzOwogfQogCi0KIHN0YXRpYyB2b2lkCi11bmdldF9jaGFyIChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3AsICBpbnQgYykKK3VuZ2V0X2NoYXIgKENBTENTVFlQRSAqbHZhbHAsIENBTENMVFlQRSAqbGxvY3AsICBpbnQgYykKIHsKICAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKIApAQCAtMjY5MTUsNyArODA3NjcsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1yZWFkX3NpZ25lZF9pbnRlZ2VyIChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApCityZWFkX3NpZ25lZF9pbnRlZ2VyIChDQUxDU1RZUEUgKmx2YWxwLCBDQUxDTFRZUEUgKmxsb2NwKQogewogICBpbnQgYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApOwogICBpbnQgc2lnbiA9IDE7CkBAIC0yNjk0MCw0MCArODA3OTIsMjMgQEAKIH0KIAogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCBMZXhpY2FsIGFuYWx5emVyIHJldHVybnMgYW4gaW50ZWdlciBvbiB0aGUgc3RhY2sgYW5kIHRoZSB0b2tlbiB8CiB8IE5VTSwgb3IgdGhlIEFTQ0lJIGNoYXJhY3RlciByZWFkIGlmIG5vdCBhIG51bWJlci4gIFNraXBzIGFsbCAgIHwKIHwgYmxhbmtzIGFuZCB0YWJzLCByZXR1cm5zIDAgZm9yIEVPRi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQKLXl5bGV4IChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApCitpbnQgY2FsY2xleCAoQ0FMQ1NUWVBFICpsdmFscCwgQ0FMQ0xUWVBFICpsbG9jcCkKIHsKLSAgc3RhdGljIGludCBpbml0ID0gMTsKICAgaW50IGM7Ci0KLSAgaWYgKGluaXQpCi0gICAgewotICAgICAgaW5pdCA9IDA7Ci0KLSAgICAgICgqbGxvY3ApLmxhc3RfY29sdW1uID0gMDsKLSAgICAgICgqbGxvY3ApLmxhc3RfbGluZSA9IDE7Ci0KLSAgICB9Ci0KLQotICgqbGxvY3ApLmZpcnN0X2NvbHVtbiA9ICgqbGxvY3ApLmxhc3RfY29sdW1uOwotICAoKmxsb2NwKS5maXJzdF9saW5lICAgPSAoKmxsb2NwKS5sYXN0X2xpbmU7Ci0KLQotICAvKiBTa2lwIHdoaXRlIHNwYWNlLiAgKi8KLSAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCkpID09ICcgJyB8fCBjID09ICdcdCcpCisgIC8qIFNraXAgY3VycmVudCB0b2tlbiwgdGhlbiB3aGl0ZSBzcGFjZXMuICAqLworICBkbwogICAgIHsKICAgICAgKCpsbG9jcCkuZmlyc3RfY29sdW1uID0gKCpsbG9jcCkubGFzdF9jb2x1bW47CiAgICAgICAoKmxsb2NwKS5maXJzdF9saW5lICAgPSAoKmxsb2NwKS5sYXN0X2xpbmU7CiAKICAgICB9CisgIHdoaWxlICgoYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApKSA9PSAnICcgfHwgYyA9PSAnXHQnKTsKIAogICAvKiBwcm9jZXNzIG51bWJlcnMgICAqLwogICBpZiAoYyA9PSAnLicgfHwgaXNkaWdpdCAoYykpCkBAIC0yNjk5MCwxOSArODA4MjUsMzIgQEAKICAgLyogUmV0dXJuIHNpbmdsZSBjaGFycy4gKi8KICAgcmV0dXJuIGM7CiB9Ci0KLXN0YXRpYyBpbnQKLXBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQotewotICBpbnQgcmVzID0gMTsKLSAgaWYgKGV4cG9uZW50IDwgMCkKLSAgICBleGl0ICgzKTsKLSAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQotICAgIHJlcyAqPSBiYXNlOwotICByZXR1cm4gcmVzOwotfQorX0FURU9GCiAKIAorY2F0ID5jYWxjLW1haW4uYyA8PCdfQVRFT0YnCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCisKKyNpbmNsdWRlICJjYWxjLmgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2Vsc2UKKyMgdW5kZWYgYWxhcm0KKyMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCisjZW5kaWYKKworCisKK3NlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOworaW50IGdsb2JhbF9jb3VudCA9IDA7CisKKy8qIEEgQyBtYWluIGZ1bmN0aW9uLiAgKi8KIGludAogbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewpAQCAtMjcwMjYsMTIgKzgwODc0LDEyIEBACiAgICAgICByZXR1cm4gMzsKICAgICB9CiAKLSAgeXlkZWJ1ZyA9IDE7Ci0gIHN0YXR1cyA9IHl5cGFyc2UgKCZyZXN1bHQsICZjb3VudCk7Ci0gIGlmIChnbG9iYWxfcmVzdWx0ICE9IHJlc3VsdCkKLSAgICBhYm9ydCAoKTsKLSAgaWYgKGdsb2JhbF9jb3VudCAhPSBjb3VudCkKLSAgICBhYm9ydCAoKTsKKyAgY2FsY2RlYnVnID0gMTsKKyAgc3RhdHVzID0gY2FsY3BhcnNlICgmcmVzdWx0LCAmY291bnQpOworICBpZiAoZmNsb3NlIChpbnB1dCkpCisgICAgcGVycm9yICgiZmNsb3NlIik7CisgIGFzc2VydCAoZ2xvYmFsX3Jlc3VsdCA9PSByZXN1bHQpOworICBhc3NlcnQgKGdsb2JhbF9jb3VudCA9PSBjb3VudCk7CiAgIHJldHVybiBzdGF0dXM7CiB9CiBfQVRFT0YKQEAgLTI3MDQwLDU1ICs4MDg4OCwxNzggQEAKIAogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1Njk6IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkiCi1lY2hvIGNhbGMuYXQ6NTY5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtbyBjYWxjLmMgY2FsYy55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjIxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueSIgImNhbGMuYXQ6NjIxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2MjEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYyMTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjIxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjE6IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAotICAgJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2OTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBcJExJQlMiCi1lY2hvIGNhbGMuYXQ6NTY5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1Njk6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYyMTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImNhbGMuYXQ6NjIxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYyMTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBjYWxjLWxleC5jIGNhbGMtbWFpbi5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jIGNhbGMtbGV4LmMgY2FsYy1tYWluLmMgJExJQlMiICJjYWxjLmF0OjYyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgY2FsYy1sZXguYyBjYWxjLW1haW4uYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjE6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5jCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjYyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5jCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjE6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5oCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjYyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5oCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKICMgVGVzdCB0aGUgcHJpb3JpdGllcy4KQEAgLTI3MTA4LDYyICs4MTA3OSw2NiBAQAogKDJeMileMyA9IDY0CiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2OTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU2OSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2OTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjIxIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogCiAjIFNvbWUgc3ludGF4IGVycm9ycy4KIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotMCAwCisxIDIKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY5OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTY5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjE6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjIxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MjEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTI3MTc0LDE4ICs4MTE0OSwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMjcxOTMsNjAgKzgxMTcwLDUwIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY5OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU2OSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1Njk6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MjEiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiAxLy8yCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2OTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU2OSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2OTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjIxIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0yNzI1NywxOCArODEyMjQsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJy8nLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTI3Mjc2LDYwICs4MTI0NSw1MCBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2OTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1NjkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYyMTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjIxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogZXJyb3IKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY5OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTY5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjE6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjIxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MjEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTI3MzQwLDE4ICs4MTI5OSwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0yNzM1OSw2MCArODEzMjAsNTAgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1Njk6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTY5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2OTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjE6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKIDEgPSAyID0gMwogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1Njk6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NjkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1Njk6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYyMTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MjEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYyMTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMjc0MjMsMTggKzgxMzc0LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjY6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPScKKzEuNzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0yNzQ0MiwzMCArODEzOTUsMTggQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1Njk6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTY5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2OTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjE6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKQEAgLTI3NDczLDMwICs4MTQxNCwzMiBAQAogKzEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY5OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTY5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjE6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjIxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MjEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTI3NTA3LDE4ICs4MTQ1MCwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMi4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCisyLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKycKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMjc1MjYsNTcgKzgxNDcxLDQ3IEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY5OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU2OSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1Njk6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MjEiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2OTogXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKLWVjaG8gY2FsYy5hdDo1NjkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTY5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjE6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo2MjEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MjEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTI3NTg3LDE4ICs4MTUyMiwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMjc2MDYsMzAgKzgxNTQzLDE4IEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY5OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU2OSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1Njk6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MjEiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCkBAIC0yNzY0NCw4ICs4MTU2OSw4IEBACiAjCiAjIC0gdGVzdCB0aGUgYWN0aW9uIGFzc29jaWF0ZWQgdG8gYGVycm9yJwogIwotIyAtIGNoZWNrIHRoZSBsb29rLWFoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAotIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2stYWhlYWQgY2F1c2luZyB0aGUKKyMgLSBjaGVjayB0aGUgbG9va2FoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAorIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZQogIyAgIGZpcnN0IGVycm9yIGlzICIpIiwgd2hpY2ggaXMgbmVlZGVkIHRvIHJlY292ZXIgZnJvbSB0aGUgZXJyb3IgYW5kCiAjICAgcHJvZHVjZSB0aGUgIjAiIHRoYXQgdHJpZ2dlcnMgdGhlICIwICE9IDEiIGVycm9yLgogIwpAQCAtMjc2NTMsMzAgKzgxNTc4LDMyIEBACiAoKSArICgxICsgMSArIDEgKykgKyAoKiAqICopICsgKDEgKiAyICogKikgPSAxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU2OTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU2OSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2OTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjIxIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0yNzY4NywyMSArODE2MTQsMjMgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwotMS4xNzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwotMS4yMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwotMS40MDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjIzOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjQxOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCiBjYWxjOiBlcnJvcjogNDQ0NCAhPSAxCiBfQVRFT0YKIApAQCAtMjc3MTAsNjMgKzgxNjM5LDUzIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY5OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU2OSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1Njk6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MjEiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAjIFRoZSBzYW1lLCBidXQgdGhpcyB0aW1lIGV4ZXJjaXNpbmcgZXhwbGljaXRseSB0cmlnZ2VyZWQgc3ludGF4IGVycm9ycy4KLSMgUE9TSVggc2F5cyB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KKyMgUE9TSVggc2F5cyB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0oISkgKyAoMCAwKSA9IDEKKyghKSArICgxIDIpID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1Njk6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NjkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1Njk6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYyMTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MjEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYyMTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMjc3NzcsMTggKzgxNjk2LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjk6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKIGNhbGM6IGVycm9yOiAyMjIyICE9IDEKIF9BVEVPRgogCkBAIC0yNzc5Nyw2MCArODE3MTgsNTAgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1Njk6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTY5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU2OTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjE6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLSgtICopICsgKDAgMCkgPSAxCisoLSAqKSArICgxIDIpID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1Njk6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1NjkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1Njk6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYyMTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MjEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYyMTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMjc4NjEsMTkgKzgxNzcyLDIxIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogY2FsYzogZXJyb3I6IDIyMjIgIT0gMQogX0FURU9GCiAKQEAgLTI3ODgyLDEwMyArODE3OTUsMTE1IEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTY5OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU2OSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1Njk6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MjEiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotCi0gIGJhbm5lci0xMCApICMgQmFubmVyIDEwLiBjYWxjLmF0OjU3NgotICAgIGNhdCA8PFxfQVRFT0YKLQotU2ltcGxlIEdMUiBDYWxjdWxhdG9yLgotCisjIENoZWNrIHRoYXQgeXllcnJvayB3b3JrcyBwcm9wZXJseTogc2Vjb25kIGVycm9yIGlzIG5vdCByZXBvcnRlZCwKKyMgdGhpcmQgYW5kIGZvdXJ0aCBhcmUuICBQYXJzZSBzdGF0dXMgaXMgc3VjY2VzZnVsbC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCogKikgKyAoKikgKyAoKikKIF9BVEVPRgotICAgIDs7CiAKLSAgODQgKSAjIDg0LiBjYWxjLmF0OjU4NjogQ2FsY3VsYXRvciAlZ2xyLXBhcnNlcgotICAgIGF0X3NldHVwX2xpbmU9J2NhbGMuYXQ6NTg2JwotICAgIGF0X2Rlc2M9J0NhbGN1bGF0b3IgJWdsci1wYXJzZXIgJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgODQ6IENhbGN1bGF0b3IgJWdsci1wYXJzZXIgICAgICAgICAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICI4NC4gY2FsYy5hdDo1ODY6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYyMTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MjEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYyMTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTY6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2MjE6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKIAogCi0KLQotCi0jIFVzaW5nIHlhY2MuYz8KLQotCi0KLQotCi0KLQotIyB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZiAlbG9jYXRpb24gJiAlcHVyZSAmICglZ2xyIG9yICVwYXJzZS1wYXJhbSkuCi0KLSMgeXllcnJvciBhbHdheXMgc2VlcyB0aGUgbG9jYXRpb25zICh3aGVuIGFjdGl2YXRlZCksIGV4Y2VwdCBpZgotIyB5YWNjICYgcHVyZSAmICFwYXJhbS4KLQotCi0jIFRoZSBpbnRlcmZhY2UgaXMgcHVyZTogZWl0aGVyIGJlY2F1c2UgJXB1cmUtcGFyc2VyLCBvciBiZWNhdXNlIHdlCi0jIGFyZSB1c2luZyB0aGUgQysrIHBhcnNlcnMuCi0KLQorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yMTcKKyNBVF9TVEFSVF8yMTgKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyMTggJ2NhbGMuYXQ6NjM4JyBcCisgICJDYWxjdWxhdG9yICVnbHItcGFyc2VyICIgIiAgICAgICAgICAgICAgICAgICAgICAgICIgMTIKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyMTguICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiAKQEAgLTI3OTkwLDU5ICs4MTkxNSw1MiBAQAogCiAKIGNhdCA+Y2FsYy55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogLyogSW5maXggbm90YXRpb24gY2FsY3VsYXRvci0tY2FsYyAqLwogJWdsci1wYXJzZXIKIAotJXsKLSNpbmNsdWRlIDxzdGRpby5oPgorJWNvZGUgcmVxdWlyZXMKK3sKIAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2lmIEhBVkVfVU5JU1REX0gKLSMgaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZWxzZQotIyB1bmRlZiBhbGFybQotIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KLSNlbmRpZgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jZGVmaW5lIFVTRShWYXIpCi0KLS8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCi10eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKLQotc3RhdGljIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOwotc3RhdGljIGludCBnbG9iYWxfY291bnQgPSAwOwotJX0KKyAgLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KKyAgdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Cit9CiAKIC8qIEV4ZXJjaXNlICV1bmlvbi4gKi8KICV1bmlvbgogewogICBzZW1hbnRpY192YWx1ZSBpdmFsOwogfTsKKyVwcmludGVyIHsgZnByaW50ZiAoeXlvdXRwdXQsICIlZCIsICQkKTsgfSA8aXZhbD47CiAKLSV7CislY29kZSBwcm92aWRlcworeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgLyogVGhlIGlucHV0LiAgKi8KKyAgZXh0ZXJuIEZJTEUgKmlucHV0OworICBleHRlcm4gc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdDsKKyAgZXh0ZXJuIGludCBnbG9iYWxfY291bnQ7Cit9CisKKyVjb2RlCit7CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZGVmaW5lIFVTRShWYXIpCisKK0ZJTEUgKmlucHV0Owogc3RhdGljIGludCBwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCk7Ci0vKiB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZjoKLSAgIC0gJWxvY2F0aW9uICYgJXB1cmUgJiAlZ2xyCi0gICAtICVsb2NhdGlvbiAmICVwdXJlICYgJXlhY2MgJiAlcGFyc2UtcGFyYW0uICovCi1zdGF0aWMgdm9pZCB5eWVycm9yICgKIAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcwotICAgICAgICAgICAgICAgICAgICAgKTsKLXN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOwotc3RhdGljIGludCBnZXRfY2hhciAodm9pZCk7Ci1zdGF0aWMgdm9pZCB1bmdldF9jaGFyICggaW50IGMpOwotJX0KK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworaW50IHl5bGV4ICh2b2lkKTsKK30KIAogCiAKQEAgLTI4MDUxLDcgKzgxOTY5LDcgQEAKICV0b2tlbiA8aXZhbD4gTlVNICJudW1iZXIiCiAldHlwZSAgPGl2YWw+IGV4cAogCi0lbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24JICAgICAgICovCislbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24gICAgICAgICAgICAqLwogJWxlZnQgJy0nICcrJwogJWxlZnQgJyonICcvJwogJWxlZnQgTkVHICAgICAvKiBuZWdhdGlvbi0tdW5hcnkgbWludXMgKi8KQEAgLTI4MDg0LDI1ICs4MjAwMiwzNiBAQAogfCAnLScgZXhwICAlcHJlYyBORUcgeyAkJCA9IC0kMjsgICAgICAgICAgICB9CiB8IGV4cCAnXicgZXhwICAgICAgICB7ICQkID0gcG93ZXIgKCQxLCAkMyk7IH0KIHwgJygnIGV4cCAnKScgICAgICAgIHsgJCQgPSAkMjsgICAgICAgICAgICAgfQotfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7ICAgICAgICAgICB9Cit8ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgeXllcnJvazsgIH0KIHwgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQogfCAnLScgZXJyb3IgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9CiA7CiAlJQotLyogVGhlIGlucHV0LiAgKi8KLXN0YXRpYyBGSUxFICppbnB1dDsKIAotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKAotCi0gICAgICAgICBjb25zdCBjaGFyICpzKQorc3RhdGljIGludAorcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpCiB7Ci0KLQotICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgcyk7CisgIGludCByZXMgPSAxOworICBhc3NlcnQgKDAgPD0gZXhwb25lbnQpOworICBmb3IgKC8qIE5pZW50ZSAqLzsgZXhwb25lbnQ7IC0tZXhwb25lbnQpCisgICAgcmVzICo9IGJhc2U7CisgIHJldHVybiByZXM7CiB9CiAKIAorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKyNpbmNsdWRlIDxjdHlwZS5oPgorCitpbnQgeXlsZXggKHZvaWQpOworc3RhdGljIGludCBnZXRfY2hhciAodm9pZCk7CitzdGF0aWMgdm9pZCB1bmdldF9jaGFyICggaW50IGMpOworCiAKIHN0YXRpYyBpbnQKIGdldF9jaGFyICh2b2lkKQpAQCAtMjgxMTMsNyArODIwNDIsNiBAQAogICByZXR1cm4gcmVzOwogfQogCi0KIHN0YXRpYyB2b2lkCiB1bmdldF9jaGFyICggaW50IGMpCiB7CkBAIC0yODE0OCwzMiArODIwNzYsMjEgQEAKIH0KIAogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCBMZXhpY2FsIGFuYWx5emVyIHJldHVybnMgYW4gaW50ZWdlciBvbiB0aGUgc3RhY2sgYW5kIHRoZSB0b2tlbiB8CiB8IE5VTSwgb3IgdGhlIEFTQ0lJIGNoYXJhY3RlciByZWFkIGlmIG5vdCBhIG51bWJlci4gIFNraXBzIGFsbCAgIHwKIHwgYmxhbmtzIGFuZCB0YWJzLCByZXR1cm5zIDAgZm9yIEVPRi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQKLXl5bGV4ICh2b2lkKQoraW50IHl5bGV4ICh2b2lkKQogewotICBzdGF0aWMgaW50IGluaXQgPSAxOwogICBpbnQgYzsKLQotICBpZiAoaW5pdCkKLSAgICB7Ci0gICAgICBpbml0ID0gMDsKLQotICAgIH0KLQotCi0KLSAgLyogU2tpcCB3aGl0ZSBzcGFjZS4gICovCi0gIHdoaWxlICgoYyA9IGdldF9jaGFyICgpKSA9PSAnICcgfHwgYyA9PSAnXHQnKQorICAvKiBTa2lwIGN1cnJlbnQgdG9rZW4sIHRoZW4gd2hpdGUgc3BhY2VzLiAgKi8KKyAgZG8KICAgICB7CiAKICAgICB9CisgIHdoaWxlICgoYyA9IGdldF9jaGFyICgpKSA9PSAnICcgfHwgYyA9PSAnXHQnKTsKIAogICAvKiBwcm9jZXNzIG51bWJlcnMgICAqLwogICBpZiAoYyA9PSAnLicgfHwgaXNkaWdpdCAoYykpCkBAIC0yODE5MSwxOCArODIxMDgsMjAgQEAKICAgcmV0dXJuIGM7CiB9CiAKLXN0YXRpYyBpbnQKLXBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQotewotICBpbnQgcmVzID0gMTsKLSAgaWYgKGV4cG9uZW50IDwgMCkKLSAgICBleGl0ICgzKTsKLSAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQotICAgIHJlcyAqPSBiYXNlOwotICByZXR1cm4gcmVzOwotfQorI2luY2x1ZGUgPGFzc2VydC5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxzZQorIyB1bmRlZiBhbGFybQorIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KKyNlbmRpZgogCiAKKworc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7CitpbnQgZ2xvYmFsX2NvdW50ID0gMDsKKworLyogQSBDIG1haW4gZnVuY3Rpb24uICAqLwogaW50CiBtYWluIChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CkBAIC0yODIyOCwxMCArODIxNDcsMTAgQEAKIAogCiAgIHN0YXR1cyA9IHl5cGFyc2UgKCk7Ci0gIGlmIChnbG9iYWxfcmVzdWx0ICE9IHJlc3VsdCkKLSAgICBhYm9ydCAoKTsKLSAgaWYgKGdsb2JhbF9jb3VudCAhPSBjb3VudCkKLSAgICBhYm9ydCAoKTsKKyAgaWYgKGZjbG9zZSAoaW5wdXQpKQorICAgIHBlcnJvciAoImZjbG9zZSIpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOwogICByZXR1cm4gc3RhdHVzOwogfQogX0FURU9GCkBAIC0yODI0MCw1NSArODIxNTksMTUxIEBACiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTg2OiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgotZWNobyBjYWxjLmF0OjU4NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gY2FsYy5jIGNhbGMueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU4NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjM4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjM4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Mzg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueSIgImNhbGMuYXQ6NjM4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjM4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2MzgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYzODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjM4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Mzg6IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYzOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAotICAgJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4NjogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBcJExJQlMiCi1lY2hvIGNhbGMuYXQ6NTg2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1ODY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYzODogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImNhbGMuYXQ6NjM4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYzOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYzODogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUyIgImNhbGMuYXQ6NjM4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Mzg6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5jCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjYzOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5jCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCiAKIAogIyBUZXN0IHRoZSBwcmlvcml0aWVzLgpAQCAtMjgzMDgsNjIgKzgyMzIzLDY2IEBACiAoMl4yKV4zID0gNjQKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTg2OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTg2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Mzg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjM4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Mzg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MzgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAKICMgU29tZSBzeW50YXggZXJyb3JzLgogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0wIDAKKzEgMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1ODY6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1ODYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1ODY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYzODogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MzgiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYzOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYzODogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYzOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMjgzNzQsMTggKzgyMzkzLDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0yODM5NSw2MCArODI0MTYsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4NjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1ODYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYzODogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjM4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMS8vMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1ODY6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1ODYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1ODY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYzODogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MzgiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYzOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYzODogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYzOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMjg0NTksMTggKzgyNDcwLDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0yODQ4MCw2MCArODI0OTMsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4NjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1ODYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYzODogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjM4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogZXJyb3IKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTg2OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTg2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Mzg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjM4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Mzg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MzgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTI4NTQ0LDE4ICs4MjU0NywyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0yODU2NSw2MCArODI1NzAsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4NjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1ODYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYzODogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjM4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMSA9IDIgPSAzCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4NjogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU4NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU4NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjM4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYzOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjM4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjM4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYzOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0yODYyOSwxOCArODI2MjQsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworMS43OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTI4NjUwLDMwICs4MjY0NywxOCBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTg2OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU4NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1ODY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjM4OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MzgiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYzOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCkBAIC0yODY4MSwzMCArODI2NjYsMzIgQEAKICsxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4NjogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU4NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU4NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjM4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjYzOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjM4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjM4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYzOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0yODcxNSwxOCArODI3MDIsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTIuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTI4NzM2LDU3ICs4MjcyNSw0NyBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTg2OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU4NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1ODY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjM4OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MzgiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYzOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4NjogXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKLWVjaG8gY2FsYy5hdDo1ODYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Mzg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo2MzgiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Mzg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MzgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTI4Nzk3LDE4ICs4Mjc3NiwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMjg4MTgsMzAgKzgyNzk5LDE4IEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1ODY6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTg2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU4NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Mzg6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYzOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKQEAgLTI4ODU2LDggKzgyODI1LDggQEAKICMKICMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCiAjCi0jIC0gY2hlY2sgdGhlIGxvb2stYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCi0jICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZQorIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCiAjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKICMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCiAjCkBAIC0yODg2NSwzMCArODI4MzQsMzIgQEAKICgpICsgKDEgKyAxICsgMSArKSArICgqICogKikgKyAoMSAqIDIgKiAqKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTg2OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTg2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Mzg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjM4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Mzg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MzgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTI4ODk5LDIxICs4Mjg3MCwyMyBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjE3OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjIyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjQwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKIGNhbGM6IGVycm9yOiA0NDQ0ICE9IDEKIF9BVEVPRgogCkBAIC0yODkyNCw2MyArODI4OTcsNTMgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4NjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1ODYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYzODogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjM4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAogIyBUaGUgc2FtZSwgYnV0IHRoaXMgdGltZSBleGVyY2lzaW5nIGV4cGxpY2l0bHkgdHJpZ2dlcmVkIHN5bnRheCBlcnJvcnMuCi0jIFBPU0lYIHNheXMgdGhlIGxvb2stYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCisjIFBPU0lYIHNheXMgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotKCEpICsgKDAgMCkgPSAxCisoISkgKyAoMSAyKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTg2OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTg2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Mzg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjM4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Mzg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MzgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTI4OTkxLDE4ICs4Mjk1NCwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS45OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCiBfQVRFT0YKIApAQCAtMjkwMTMsNjAgKzgyOTc4LDUwIEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1ODY6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTg2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU4NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Mzg6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYzOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLSgtICopICsgKDAgMCkgPSAxCisoLSAqKSArICgxIDIpID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1ODY6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1ODYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1ODY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYzODogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2MzgiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYzOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYzODogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYzOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMjkwNzcsMTkgKzgzMDMyLDIxIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogY2FsYzogZXJyb3I6IDIyMjIgIT0gMQogX0FURU9GCiAKQEAgLTI5MTAwLDk0ICs4MzA1NywxMTcgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4NjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1ODYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Mzg6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjYzOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQogCi0kYXRfdHJhY2VvbgorCisjIENoZWNrIHRoYXQgeXllcnJvayB3b3JrcyBwcm9wZXJseTogc2Vjb25kIGVycm9yIGlzIG5vdCByZXBvcnRlZCwKKyMgdGhpcmQgYW5kIGZvdXJ0aCBhcmUuICBQYXJzZSBzdGF0dXMgaXMgc3VjY2VzZnVsbC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCogKikgKyAoKikgKyAoKikKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Mzg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjM4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2MzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Mzg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MzgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE2OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KK3NlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjM4OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2MzgiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjYzOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICA4NSApICMgODUuIGNhbGMuYXQ6NTg4OiBDYWxjdWxhdG9yICVnbHItcGFyc2VyICVkZWZpbmVzCi0gICAgYXRfc2V0dXBfbGluZT0nY2FsYy5hdDo1ODgnCi0gICAgYXRfZGVzYz0nQ2FsY3VsYXRvciAlZ2xyLXBhcnNlciAlZGVmaW5lcycKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDg1OiBDYWxjdWxhdG9yICVnbHItcGFyc2VyICVkZWZpbmVzICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiODUuIGNhbGMuYXQ6NTg4OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCi0KLQotCi0KLQotCi0KLQotIyBVc2luZyB5YWNjLmM/Ci0KLQotCi0KLQotCi0KLSMgeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWYgJWxvY2F0aW9uICYgJXB1cmUgJiAoJWdsciBvciAlcGFyc2UtcGFyYW0pLgotCi0jIHl5ZXJyb3IgYWx3YXlzIHNlZXMgdGhlIGxvY2F0aW9ucyAod2hlbiBhY3RpdmF0ZWQpLCBleGNlcHQgaWYKLSMgeWFjYyAmIHB1cmUgJiAhcGFyYW0uCi0KLQotIyBUaGUgaW50ZXJmYWNlIGlzIHB1cmU6IGVpdGhlciBiZWNhdXNlICVwdXJlLXBhcnNlciwgb3IgYmVjYXVzZSB3ZQotIyBhcmUgdXNpbmcgdGhlIEMrKyBwYXJzZXJzLgotCi0KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjE4CisjQVRfU1RBUlRfMjE5CithdF9mbl9ncm91cF9iYW5uZXIgMjE5ICdjYWxjLmF0OjY0MCcgXAorICAiQ2FsY3VsYXRvciAlZ2xyLXBhcnNlciAlZGVmaW5lcyIgIiAgICAgICAgICAgICAgICAiIDEyCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjE5LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogCkBAIC0yOTE5OSw1OSArODMxNzksNTIgQEAKIAogCiBjYXQgPmNhbGMueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKIC8qIEluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3ItLWNhbGMgKi8KICVnbHItcGFyc2VyICVkZWZpbmVzCiAKLSV7Ci0jaW5jbHVkZSA8c3RkaW8uaD4KKyVjb2RlIHJlcXVpcmVzCit7CiAKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpZiBIQVZFX1VOSVNURF9ICi0jIGluY2x1ZGUgPHVuaXN0ZC5oPgotI2Vsc2UKLSMgdW5kZWYgYWxhcm0KLSMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCi0jZW5kaWYKLSNpbmNsdWRlIDxjdHlwZS5oPgotI2RlZmluZSBVU0UoVmFyKQotCi0vKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLwotdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Ci0KLXN0YXRpYyBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKLXN0YXRpYyBpbnQgZ2xvYmFsX2NvdW50ID0gMDsKLSV9CisgIC8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCisgIHR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOworfQogCiAvKiBFeGVyY2lzZSAldW5pb24uICovCiAldW5pb24KIHsKICAgc2VtYW50aWNfdmFsdWUgaXZhbDsKIH07CislcHJpbnRlciB7IGZwcmludGYgKHl5b3V0cHV0LCAiJWQiLCAkJCk7IH0gPGl2YWw+OwogCi0leworJWNvZGUgcHJvdmlkZXMKK3sKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIC8qIFRoZSBpbnB1dC4gICovCisgIGV4dGVybiBGSUxFICppbnB1dDsKKyAgZXh0ZXJuIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQ7CisgIGV4dGVybiBpbnQgZ2xvYmFsX2NvdW50OworfQorCislY29kZQoreworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2RlZmluZSBVU0UoVmFyKQorCitGSUxFICppbnB1dDsKIHN0YXRpYyBpbnQgcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpOwotLyogeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWY6Ci0gICAtICVsb2NhdGlvbiAmICVwdXJlICYgJWdscgotICAgLSAlbG9jYXRpb24gJiAlcHVyZSAmICV5YWNjICYgJXBhcnNlLXBhcmFtLiAqLwotc3RhdGljIHZvaWQgeXllcnJvciAoCiAKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMKLSAgICAgICAgICAgICAgICAgICAgICk7Ci1zdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKLXN0YXRpYyBpbnQgZ2V0X2NoYXIgKHZvaWQpOwotc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoIGludCBjKTsKLSV9CitzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKK2ludCB5eWxleCAodm9pZCk7Cit9CiAKIAogCkBAIC0yOTI2MCw3ICs4MzIzMyw3IEBACiAldG9rZW4gPGl2YWw+IE5VTSAibnVtYmVyIgogJXR5cGUgIDxpdmFsPiBleHAKIAotJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uCSAgICAgICAqLworJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uICAgICAgICAgICAgKi8KICVsZWZ0ICctJyAnKycKICVsZWZ0ICcqJyAnLycKICVsZWZ0IE5FRyAgICAgLyogbmVnYXRpb24tLXVuYXJ5IG1pbnVzICovCkBAIC0yOTI5MywyNSArODMyNjYsNDkgQEAKIHwgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSAtJDI7ICAgICAgICAgICAgfQogfCBleHAgJ14nIGV4cCAgICAgICAgeyAkJCA9IHBvd2VyICgkMSwgJDMpOyB9CiB8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgIH0KLXwgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyAgICAgICAgICAgfQorfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7IHl5ZXJyb2s7ICB9CiB8ICchJyAgICAgICAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KIHwgJy0nIGVycm9yICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQogOwogJSUKLS8qIFRoZSBpbnB1dC4gICovCi1zdGF0aWMgRklMRSAqaW5wdXQ7CiAKLXN0YXRpYyB2b2lkCi15eWVycm9yICgKLQotICAgICAgICAgY29uc3QgY2hhciAqcykKK3N0YXRpYyBpbnQKK3Bvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQogewotCi0KLSAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIHMpOworICBpbnQgcmVzID0gMTsKKyAgYXNzZXJ0ICgwIDw9IGV4cG9uZW50KTsKKyAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQorICAgIHJlcyAqPSBiYXNlOworICByZXR1cm4gcmVzOwogfQogCiAKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CitfQVRFT0YKKworCisKK2NhdCA+Y2FsYy1sZXguYyA8PCdfQVRFT0YnCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCisKKyNpbmNsdWRlICJjYWxjLmgiCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCitpbnQgeXlsZXggKHZvaWQpOworc3RhdGljIGludCBnZXRfY2hhciAodm9pZCk7CitzdGF0aWMgdm9pZCB1bmdldF9jaGFyICggaW50IGMpOworCiAKIHN0YXRpYyBpbnQKIGdldF9jaGFyICh2b2lkKQpAQCAtMjkzMjIsNyArODMzMTksNiBAQAogICByZXR1cm4gcmVzOwogfQogCi0KIHN0YXRpYyB2b2lkCiB1bmdldF9jaGFyICggaW50IGMpCiB7CkBAIC0yOTM1NywzMiArODMzNTMsMjEgQEAKIH0KIAogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCBMZXhpY2FsIGFuYWx5emVyIHJldHVybnMgYW4gaW50ZWdlciBvbiB0aGUgc3RhY2sgYW5kIHRoZSB0b2tlbiB8CiB8IE5VTSwgb3IgdGhlIEFTQ0lJIGNoYXJhY3RlciByZWFkIGlmIG5vdCBhIG51bWJlci4gIFNraXBzIGFsbCAgIHwKIHwgYmxhbmtzIGFuZCB0YWJzLCByZXR1cm5zIDAgZm9yIEVPRi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQKLXl5bGV4ICh2b2lkKQoraW50IHl5bGV4ICh2b2lkKQogewotICBzdGF0aWMgaW50IGluaXQgPSAxOwogICBpbnQgYzsKLQotICBpZiAoaW5pdCkKLSAgICB7Ci0gICAgICBpbml0ID0gMDsKLQotICAgIH0KLQotCi0KLSAgLyogU2tpcCB3aGl0ZSBzcGFjZS4gICovCi0gIHdoaWxlICgoYyA9IGdldF9jaGFyICgpKSA9PSAnICcgfHwgYyA9PSAnXHQnKQorICAvKiBTa2lwIGN1cnJlbnQgdG9rZW4sIHRoZW4gd2hpdGUgc3BhY2VzLiAgKi8KKyAgZG8KICAgICB7CiAKICAgICB9CisgIHdoaWxlICgoYyA9IGdldF9jaGFyICgpKSA9PSAnICcgfHwgYyA9PSAnXHQnKTsKIAogICAvKiBwcm9jZXNzIG51bWJlcnMgICAqLwogICBpZiAoYyA9PSAnLicgfHwgaXNkaWdpdCAoYykpCkBAIC0yOTM5OSwxOSArODMzODQsMzIgQEAKICAgLyogUmV0dXJuIHNpbmdsZSBjaGFycy4gKi8KICAgcmV0dXJuIGM7CiB9Ci0KLXN0YXRpYyBpbnQKLXBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQotewotICBpbnQgcmVzID0gMTsKLSAgaWYgKGV4cG9uZW50IDwgMCkKLSAgICBleGl0ICgzKTsKLSAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQotICAgIHJlcyAqPSBiYXNlOwotICByZXR1cm4gcmVzOwotfQorX0FURU9GCiAKIAorY2F0ID5jYWxjLW1haW4uYyA8PCdfQVRFT0YnCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCisKKyNpbmNsdWRlICJjYWxjLmgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2Vsc2UKKyMgdW5kZWYgYWxhcm0KKyMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCisjZW5kaWYKKworCisKK3NlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOworaW50IGdsb2JhbF9jb3VudCA9IDA7CisKKy8qIEEgQyBtYWluIGZ1bmN0aW9uLiAgKi8KIGludAogbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewpAQCAtMjk0MzcsMTAgKzgzNDM1LDEwIEBACiAKIAogICBzdGF0dXMgPSB5eXBhcnNlICgpOwotICBpZiAoZ2xvYmFsX3Jlc3VsdCAhPSByZXN1bHQpCi0gICAgYWJvcnQgKCk7Ci0gIGlmIChnbG9iYWxfY291bnQgIT0gY291bnQpCi0gICAgYWJvcnQgKCk7CisgIGlmIChmY2xvc2UgKGlucHV0KSkKKyAgICBwZXJyb3IgKCJmY2xvc2UiKTsKKyAgYXNzZXJ0IChnbG9iYWxfcmVzdWx0ID09IHJlc3VsdCk7CisgIGFzc2VydCAoZ2xvYmFsX2NvdW50ID09IGNvdW50KTsKICAgcmV0dXJuIHN0YXR1czsKIH0KIF9BVEVPRgpAQCAtMjk0NDksNTUgKzgzNDQ3LDE3OCBAQAogCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4ODogYmlzb24gLW8gY2FsYy5jIGNhbGMueSIKLWVjaG8gY2FsYy5hdDo1ODggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1ODg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2NDAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55IiAiY2FsYy5hdDo2NDAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjY0MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2NDAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MDogYmlzb24gLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCi0gICAkYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTg4OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jIFwkTElCUyIKLWVjaG8gY2FsYy5hdDo1ODggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU4ODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgorICAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQwOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiY2FsYy5hdDo2NDAiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQwOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jIGNhbGMtbGV4LmMgY2FsYy1tYWluLmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgY2FsYy1sZXguYyBjYWxjLW1haW4uYyAkTElCUyIgImNhbGMuYXQ6NjQwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBjYWxjLWxleC5jIGNhbGMtbWFpbi5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MDogXCRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCBcIlwkLjoge1wkX31cXG5cIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCBcJC4gPT0gMSkgJiYgL15cXHMqXCQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciBcIm1haW50XCIuCisgICAgICAgICMgfHwgL1xcc1wkLworICAgICAgICApJyBjYWxjLmMKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjQwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmMKKworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MDogXCRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCBcIlwkLjoge1wkX31cXG5cIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCBcJC4gPT0gMSkgJiYgL15cXHMqXCQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciBcIm1haW50XCIuCisgICAgICAgICMgfHwgL1xcc1wkLworICAgICAgICApJyBjYWxjLmgKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjQwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmgKKworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogIyBUZXN0IHRoZSBwcmlvcml0aWVzLgpAQCAtMjk1MTcsNjIgKzgzNjM4LDY2IEBACiAoMl4yKV4zID0gNjQKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTg4OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTg4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDA6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAKICMgU29tZSBzeW50YXggZXJyb3JzLgogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0wIDAKKzEgMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1ODg6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1ODggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1ODg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMjk1ODMsMTggKzgzNzA4LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0yOTYwNCw2MCArODM3MzEsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4ODogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1ODggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMS8vMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1ODg6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1ODggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1ODg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMjk2NjgsMTggKzgzNzg1LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0yOTY4OSw2MCArODM4MDgsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4ODogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1ODggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogZXJyb3IKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTg4OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTg4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDA6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTI5NzUzLDE4ICs4Mzg2MiwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0yOTc3NCw2MCArODM4ODUsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4ODogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1ODggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMSA9IDIgPSAzCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4ODogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU4OCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU4ODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQwOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY0MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQwOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0yOTgzOCwxOCArODM5MzksMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworMS43OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTI5ODU5LDMwICs4Mzk2MiwxOCBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTg4OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU4OCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1ODg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCkBAIC0yOTg5MCwzMCArODM5ODEsMzIgQEAKICsxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4ODogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU4OCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU4ODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQwOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY0MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQwOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0yOTkyNCwxOCArODQwMTcsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTIuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTI5OTQ1LDU3ICs4NDA0MCw0NyBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTg4OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU4OCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1ODg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4ODogXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKLWVjaG8gY2FsYy5hdDo1ODggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDA6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo2NDAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTMwMDA2LDE4ICs4NDA5MSwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMzAwMjcsMzAgKzg0MTE0LDE4IEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1ODg6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTg4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU4ODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKQEAgLTMwMDY1LDggKzg0MTQwLDggQEAKICMKICMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCiAjCi0jIC0gY2hlY2sgdGhlIGxvb2stYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCi0jICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZQorIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCiAjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKICMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCiAjCkBAIC0zMDA3NCwzMCArODQxNDksMzIgQEAKICgpICsgKDEgKyAxICsgMSArKSArICgqICogKikgKyAoMSAqIDIgKiAqKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTg4OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTg4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDA6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTMwMTA4LDIxICs4NDE4NSwyMyBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjE3OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjIyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjQwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKIGNhbGM6IGVycm9yOiA0NDQ0ICE9IDEKIF9BVEVPRgogCkBAIC0zMDEzMyw2MyArODQyMTIsNTMgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4ODogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1ODggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAogIyBUaGUgc2FtZSwgYnV0IHRoaXMgdGltZSBleGVyY2lzaW5nIGV4cGxpY2l0bHkgdHJpZ2dlcmVkIHN5bnRheCBlcnJvcnMuCi0jIFBPU0lYIHNheXMgdGhlIGxvb2stYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCisjIFBPU0lYIHNheXMgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotKCEpICsgKDAgMCkgPSAxCisoISkgKyAoMSAyKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTg4OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTg4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDA6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTMwMjAwLDE4ICs4NDI2OSwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS45OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCiBfQVRFT0YKIApAQCAtMzAyMjIsNjAgKzg0MjkzLDUwIEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1ODg6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTg4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU4ODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLSgtICopICsgKDAgMCkgPSAxCisoLSAqKSArICgxIDIpID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1ODg6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1ODggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1ODg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMzAyODYsMTkgKzg0MzQ3LDIxIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogY2FsYzogZXJyb3I6IDIyMjIgIT0gMQogX0FURU9GCiAKQEAgLTMwMzA5LDk0ICs4NDM3MiwxMTcgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4ODogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1ODggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQogCi0kYXRfdHJhY2VvbgorCisjIENoZWNrIHRoYXQgeXllcnJvayB3b3JrcyBwcm9wZXJseTogc2Vjb25kIGVycm9yIGlzIG5vdCByZXBvcnRlZCwKKyMgdGhpcmQgYW5kIGZvdXJ0aCBhcmUuICBQYXJzZSBzdGF0dXMgaXMgc3VjY2VzZnVsbC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCogKikgKyAoKikgKyAoKikKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDA6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE2OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KK3NlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICA4NiApICMgODYuIGNhbGMuYXQ6NTg5OiBDYWxjdWxhdG9yICVnbHItcGFyc2VyICVsb2NhdGlvbnMKLSAgICBhdF9zZXR1cF9saW5lPSdjYWxjLmF0OjU4OScKLSAgICBhdF9kZXNjPSdDYWxjdWxhdG9yICVnbHItcGFyc2VyICVsb2NhdGlvbnMnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiA4NjogQ2FsY3VsYXRvciAlZ2xyLXBhcnNlciAlbG9jYXRpb25zICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjg2LiBjYWxjLmF0OjU4OTogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgotCi0KLQotCi0KLQotCi0KLSMgVXNpbmcgeWFjYy5jPwotCi0KLQotCi0KLQotCi0jIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmICVsb2NhdGlvbiAmICVwdXJlICYgKCVnbHIgb3IgJXBhcnNlLXBhcmFtKS4KLQotIyB5eWVycm9yIGFsd2F5cyBzZWVzIHRoZSBsb2NhdGlvbnMgKHdoZW4gYWN0aXZhdGVkKSwgZXhjZXB0IGlmCi0jIHlhY2MgJiBwdXJlICYgIXBhcmFtLgotCi0KLSMgVGhlIGludGVyZmFjZSBpcyBwdXJlOiBlaXRoZXIgYmVjYXVzZSAlcHVyZS1wYXJzZXIsIG9yIGJlY2F1c2Ugd2UKLSMgYXJlIHVzaW5nIHRoZSBDKysgcGFyc2Vycy4KLQotCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzIxOQorI0FUX1NUQVJUXzIyMAorYXRfZm5fZ3JvdXBfYmFubmVyIDIyMCAnY2FsYy5hdDo2NDEnIFwKKyAgIkNhbGN1bGF0b3IgJWdsci1wYXJzZXIgJWxvY2F0aW9ucyIgIiAgICAgICAgICAgICAgIiAxMgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjIyMC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIApAQCAtMzA0MDgsNTkgKzg0NDk0LDUyIEBACiAKIAogY2F0ID5jYWxjLnkgPDwnX0FURU9GJwotJXsKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotICAvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KLSMgdW5kZWYgbWFsbG9jCi0jIHVuZGVmIG1lbWNtcAotIyB1bmRlZiByZWFsbG9jCi0jZW5kaWYKLSV9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCiAvKiBJbmZpeCBub3RhdGlvbiBjYWxjdWxhdG9yLS1jYWxjICovCiAlZ2xyLXBhcnNlciAlbG9jYXRpb25zCiAKLSV7Ci0jaW5jbHVkZSA8c3RkaW8uaD4KKyVjb2RlIHJlcXVpcmVzCit7CiAKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpZiBIQVZFX1VOSVNURF9ICi0jIGluY2x1ZGUgPHVuaXN0ZC5oPgotI2Vsc2UKLSMgdW5kZWYgYWxhcm0KLSMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCi0jZW5kaWYKLSNpbmNsdWRlIDxjdHlwZS5oPgotI2RlZmluZSBVU0UoVmFyKQotCi0vKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLwotdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Ci0KLXN0YXRpYyBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKLXN0YXRpYyBpbnQgZ2xvYmFsX2NvdW50ID0gMDsKLSV9CisgIC8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCisgIHR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOworfQogCiAvKiBFeGVyY2lzZSAldW5pb24uICovCiAldW5pb24KIHsKICAgc2VtYW50aWNfdmFsdWUgaXZhbDsKIH07CislcHJpbnRlciB7IGZwcmludGYgKHl5b3V0cHV0LCAiJWQiLCAkJCk7IH0gPGl2YWw+OwogCi0leworJWNvZGUgcHJvdmlkZXMKK3sKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIC8qIFRoZSBpbnB1dC4gICovCisgIGV4dGVybiBGSUxFICppbnB1dDsKKyAgZXh0ZXJuIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQ7CisgIGV4dGVybiBpbnQgZ2xvYmFsX2NvdW50OworfQorCislY29kZQoreworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2RlZmluZSBVU0UoVmFyKQorCitGSUxFICppbnB1dDsKIHN0YXRpYyBpbnQgcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpOwotLyogeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWY6Ci0gICAtICVsb2NhdGlvbiAmICVwdXJlICYgJWdscgotICAgLSAlbG9jYXRpb24gJiAlcHVyZSAmICV5YWNjICYgJXBhcnNlLXBhcmFtLiAqLwotc3RhdGljIHZvaWQgeXllcnJvciAoCiAKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMKLSAgICAgICAgICAgICAgICAgICAgICk7Ci1zdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKLXN0YXRpYyBpbnQgZ2V0X2NoYXIgKHZvaWQpOwotc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoIGludCBjKTsKLSV9CitzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKK2ludCB5eWxleCAodm9pZCk7Cit9CiAKIAogCkBAIC0zMDQ2OSw3ICs4NDU0OCw3IEBACiAldG9rZW4gPGl2YWw+IE5VTSAibnVtYmVyIgogJXR5cGUgIDxpdmFsPiBleHAKIAotJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uCSAgICAgICAqLworJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uICAgICAgICAgICAgKi8KICVsZWZ0ICctJyAnKycKICVsZWZ0ICcqJyAnLycKICVsZWZ0IE5FRyAgICAgLyogbmVnYXRpb24tLXVuYXJ5IG1pbnVzICovCkBAIC0zMDUwMiwzNCArODQ1ODEsMzggQEAKIHwgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSAtJDI7ICAgICAgICAgICAgfQogfCBleHAgJ14nIGV4cCAgICAgICAgeyAkJCA9IHBvd2VyICgkMSwgJDMpOyB9CiB8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgIH0KLXwgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyAgICAgICAgICAgfQorfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7IHl5ZXJyb2s7ICB9CiB8ICchJyAgICAgICAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KIHwgJy0nIGVycm9yICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQogOwogJSUKLS8qIFRoZSBpbnB1dC4gICovCi1zdGF0aWMgRklMRSAqaW5wdXQ7CiAKLXN0YXRpYyB2b2lkCi15eWVycm9yICgKLQotICAgICAgICAgY29uc3QgY2hhciAqcykKK3N0YXRpYyBpbnQKK3Bvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQogewotCi0KLSAgZnByaW50ZiAoc3RkZXJyLCAiJWQuJWQiLAotICAgICAgICAgICAoeXlsbG9jKS5maXJzdF9saW5lLCAoeXlsbG9jKS5maXJzdF9jb2x1bW4pOwotICBpZiAoKHl5bGxvYykuZmlyc3RfbGluZSAhPSAoeXlsbG9jKS5sYXN0X2xpbmUpCi0gICAgZnByaW50ZiAoc3RkZXJyLCAiLSVkLiVkIiwKLQkgICAgICh5eWxsb2MpLmxhc3RfbGluZSwgICh5eWxsb2MpLmxhc3RfY29sdW1uIC0gMSk7Ci0gIGVsc2UgaWYgKCh5eWxsb2MpLmZpcnN0X2NvbHVtbiAhPSAoeXlsbG9jKS5sYXN0X2NvbHVtbiAtIDEpCi0gICAgZnByaW50ZiAoc3RkZXJyLCAiLSVkIiwKLQkgICAgICh5eWxsb2MpLmxhc3RfY29sdW1uIC0gMSk7Ci0gIGZwcmludGYgKHN0ZGVyciwgIjogIik7Ci0gIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBzKTsKKyAgaW50IHJlcyA9IDE7CisgIGFzc2VydCAoMCA8PSBleHBvbmVudCk7CisgIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKKyAgICByZXMgKj0gYmFzZTsKKyAgcmV0dXJuIHJlczsKIH0KIAogCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIFlZX0xPQ0FUSU9OX1BSSU5UIChzdGRlcnIsICh5eWxsb2MpKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiOiAiKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworaW50IHl5bGV4ICh2b2lkKTsKK3N0YXRpYyBpbnQgZ2V0X2NoYXIgKHZvaWQpOworc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoIGludCBjKTsKKwogCiBzdGF0aWMgWVlMVFlQRSBsYXN0X3l5bGxvYzsKIApAQCAtMzA1NDMsNyArODQ2MjYsNyBAQAogICBpZiAocmVzID09ICdcbicpCiAgICAgewogICAgICAgKHl5bGxvYykubGFzdF9saW5lKys7Ci0gICAgICAoeXlsbG9jKS5sYXN0X2NvbHVtbiA9IDA7CisgICAgICAoeXlsbG9jKS5sYXN0X2NvbHVtbiA9IDE7CiAgICAgfQogICBlbHNlCiAgICAgKHl5bGxvYykubGFzdF9jb2x1bW4rKzsKQEAgLTMwNTUxLDcgKzg0NjM0LDYgQEAKICAgcmV0dXJuIHJlczsKIH0KIAotCiBzdGF0aWMgdm9pZAogdW5nZXRfY2hhciAoIGludCBjKQogewpAQCAtMzA1ODksNDAgKzg0NjcxLDIzIEBACiB9CiAKIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgTGV4aWNhbCBhbmFseXplciByZXR1cm5zIGFuIGludGVnZXIgb24gdGhlIHN0YWNrIGFuZCB0aGUgdG9rZW4gfAogfCBOVU0sIG9yIHRoZSBBU0NJSSBjaGFyYWN0ZXIgcmVhZCBpZiBub3QgYSBudW1iZXIuICBTa2lwcyBhbGwgICB8CiB8IGJsYW5rcyBhbmQgdGFicywgcmV0dXJucyAwIGZvciBFT0YuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50Ci15eWxleCAodm9pZCkKK2ludCB5eWxleCAodm9pZCkKIHsKLSAgc3RhdGljIGludCBpbml0ID0gMTsKICAgaW50IGM7Ci0KLSAgaWYgKGluaXQpCi0gICAgewotICAgICAgaW5pdCA9IDA7Ci0KLSAgICAgICh5eWxsb2MpLmxhc3RfY29sdW1uID0gMDsKLSAgICAgICh5eWxsb2MpLmxhc3RfbGluZSA9IDE7Ci0KLSAgICB9Ci0KLQotICh5eWxsb2MpLmZpcnN0X2NvbHVtbiA9ICh5eWxsb2MpLmxhc3RfY29sdW1uOwotICAoeXlsbG9jKS5maXJzdF9saW5lICAgPSAoeXlsbG9jKS5sYXN0X2xpbmU7Ci0KLQotICAvKiBTa2lwIHdoaXRlIHNwYWNlLiAgKi8KLSAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKCkpID09ICcgJyB8fCBjID09ICdcdCcpCisgIC8qIFNraXAgY3VycmVudCB0b2tlbiwgdGhlbiB3aGl0ZSBzcGFjZXMuICAqLworICBkbwogICAgIHsKICAgICAgKHl5bGxvYykuZmlyc3RfY29sdW1uID0gKHl5bGxvYykubGFzdF9jb2x1bW47CiAgICAgICAoeXlsbG9jKS5maXJzdF9saW5lICAgPSAoeXlsbG9jKS5sYXN0X2xpbmU7CiAKICAgICB9CisgIHdoaWxlICgoYyA9IGdldF9jaGFyICgpKSA9PSAnICcgfHwgYyA9PSAnXHQnKTsKIAogICAvKiBwcm9jZXNzIG51bWJlcnMgICAqLwogICBpZiAoYyA9PSAnLicgfHwgaXNkaWdpdCAoYykpCkBAIC0zMDY0MCwxOCArODQ3MDUsMjAgQEAKICAgcmV0dXJuIGM7CiB9CiAKLXN0YXRpYyBpbnQKLXBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQotewotICBpbnQgcmVzID0gMTsKLSAgaWYgKGV4cG9uZW50IDwgMCkKLSAgICBleGl0ICgzKTsKLSAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQotICAgIHJlcyAqPSBiYXNlOwotICByZXR1cm4gcmVzOwotfQorI2luY2x1ZGUgPGFzc2VydC5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxzZQorIyB1bmRlZiBhbGFybQorIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KKyNlbmRpZgogCiAKKworc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7CitpbnQgZ2xvYmFsX2NvdW50ID0gMDsKKworLyogQSBDIG1haW4gZnVuY3Rpb24uICAqLwogaW50CiBtYWluIChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CkBAIC0zMDY3NywxMCArODQ3NDQsMTAgQEAKIAogCiAgIHN0YXR1cyA9IHl5cGFyc2UgKCk7Ci0gIGlmIChnbG9iYWxfcmVzdWx0ICE9IHJlc3VsdCkKLSAgICBhYm9ydCAoKTsKLSAgaWYgKGdsb2JhbF9jb3VudCAhPSBjb3VudCkKLSAgICBhYm9ydCAoKTsKKyAgaWYgKGZjbG9zZSAoaW5wdXQpKQorICAgIHBlcnJvciAoImZjbG9zZSIpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOwogICByZXR1cm4gc3RhdHVzOwogfQogX0FURU9GCkBAIC0zMDY4OSw1NSArODQ3NTYsMTUxIEBACiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTg5OiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgotZWNobyBjYWxjLmF0OjU4OSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gY2FsYy5jIGNhbGMueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU4OTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjQxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueSIgImNhbGMuYXQ6NjQxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQxOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2NDEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjQxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDE6IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAotICAgJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4OTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBcJExJQlMiCi1lY2hvIGNhbGMuYXQ6NTg5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1ODk6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImNhbGMuYXQ6NjQxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUyIgImNhbGMuYXQ6NjQxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDE6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5jCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjY0MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5jCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCiAKIAogIyBUZXN0IHRoZSBwcmlvcml0aWVzLgpAQCAtMzA3NTcsNjIgKzg0OTIwLDY2IEBACiAoMl4yKV4zID0gNjQKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTg5OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTg5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDE6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAKICMgU29tZSBzeW50YXggZXJyb3JzLgogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0wIDAKKzEgMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1ODk6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1ODkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1ODk6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMzA4MjMsMTggKzg0OTkwLDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0zMDg0Myw2MCArODUwMTIsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4OTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1ODkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMS8vMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1ODk6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1ODkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1ODk6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMzA5MDcsMTggKzg1MDY2LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0zMDkyNyw2MCArODUwODgsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4OTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1ODkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogZXJyb3IKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTg5OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTg5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDE6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTMwOTkxLDE4ICs4NTE0MiwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0zMTAxMSw2MCArODUxNjQsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4OTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1ODkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMSA9IDIgPSAzCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4OTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU4OSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU4OTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQxOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY0MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQxOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQxIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0zMTA3NSwxOCArODUyMTgsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworMS43OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTMxMDk1LDMwICs4NTI0MCwxOCBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTg5OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU4OSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1ODk6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQxOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDEiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCkBAIC0zMTEyNiwzMCArODUyNTksMzIgQEAKICsxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4OTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU4OSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU4OTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQxOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY0MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQxOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQxIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0zMTE2MCwxOCArODUyOTUsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTIuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTMxMTgwLDU3ICs4NTMxNyw0NyBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTg5OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU4OSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1ODk6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQxOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDEiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4OTogXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKLWVjaG8gY2FsYy5hdDo1ODkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDE6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo2NDEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTMxMjQxLDE4ICs4NTM2OCwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMzEyNjEsMzAgKzg1MzkwLDE4IEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1ODk6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTg5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU4OTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDE6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKQEAgLTMxMjk5LDggKzg1NDE2LDggQEAKICMKICMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCiAjCi0jIC0gY2hlY2sgdGhlIGxvb2stYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCi0jICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZQorIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCiAjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKICMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCiAjCkBAIC0zMTMwOCwzMCArODU0MjUsMzIgQEAKICgpICsgKDEgKyAxICsgMSArKSArICgqICogKikgKyAoMSAqIDIgKiAqKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTg5OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTg5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDE6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTMxMzQyLDIxICs4NTQ2MSwyMyBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjE3OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjIyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjQwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKIGNhbGM6IGVycm9yOiA0NDQ0ICE9IDEKIF9BVEVPRgogCkBAIC0zMTM2Niw2MyArODU0ODcsNTMgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4OTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1ODkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAogIyBUaGUgc2FtZSwgYnV0IHRoaXMgdGltZSBleGVyY2lzaW5nIGV4cGxpY2l0bHkgdHJpZ2dlcmVkIHN5bnRheCBlcnJvcnMuCi0jIFBPU0lYIHNheXMgdGhlIGxvb2stYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCisjIFBPU0lYIHNheXMgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotKCEpICsgKDAgMCkgPSAxCisoISkgKyAoMSAyKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTg5OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTg5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDE6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTMxNDMzLDE4ICs4NTU0NCwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS45OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCiBfQVRFT0YKIApAQCAtMzE0NTQsNjAgKzg1NTY3LDUwIEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1ODk6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTg5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU4OTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDE6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLSgtICopICsgKDAgMCkgPSAxCisoLSAqKSArICgxIDIpID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1ODk6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1ODkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1ODk6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMzE1MTgsMTkgKzg1NjIxLDIxIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogY2FsYzogZXJyb3I6IDIyMjIgIT0gMQogX0FURU9GCiAKQEAgLTMxNTQwLDk0ICs4NTY0NSwxMTYgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU4OTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1ODkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTg5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDE6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQogCi0kYXRfdHJhY2VvbgorCisjIENoZWNrIHRoYXQgeXllcnJvayB3b3JrcyBwcm9wZXJseTogc2Vjb25kIGVycm9yIGlzIG5vdCByZXBvcnRlZCwKKyMgdGhpcmQgYW5kIGZvdXJ0aCBhcmUuICBQYXJzZSBzdGF0dXMgaXMgc3VjY2VzZnVsbC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCogKikgKyAoKikgKyAoKikKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDE6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE2OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQxOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDEiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICA4NyApICMgODcuIGNhbGMuYXQ6NTkwOiBDYWxjdWxhdG9yICVnbHItcGFyc2VyICVuYW1lLXByZWZpeD0iY2FsYyIKLSAgICBhdF9zZXR1cF9saW5lPSdjYWxjLmF0OjU5MCcKLSAgICBhdF9kZXNjPSdDYWxjdWxhdG9yICVnbHItcGFyc2VyICVuYW1lLXByZWZpeD0iY2FsYyInCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiA4NzogQ2FsY3VsYXRvciAlZ2xyLXBhcnNlciAlbmFtZS1wcmVmaXg9ImNhbGMiICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjg3LiBjYWxjLmF0OjU5MDogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgotCi0KLQotCi0KLQotCi0KLSMgVXNpbmcgeWFjYy5jPwotCi0KLQotCi0KLQotCi0jIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmICVsb2NhdGlvbiAmICVwdXJlICYgKCVnbHIgb3IgJXBhcnNlLXBhcmFtKS4KLQotIyB5eWVycm9yIGFsd2F5cyBzZWVzIHRoZSBsb2NhdGlvbnMgKHdoZW4gYWN0aXZhdGVkKSwgZXhjZXB0IGlmCi0jIHlhY2MgJiBwdXJlICYgIXBhcmFtLgotCi0KLSMgVGhlIGludGVyZmFjZSBpcyBwdXJlOiBlaXRoZXIgYmVjYXVzZSAlcHVyZS1wYXJzZXIsIG9yIGJlY2F1c2Ugd2UKLSMgYXJlIHVzaW5nIHRoZSBDKysgcGFyc2Vycy4KLQotCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzIyMAorI0FUX1NUQVJUXzIyMQorYXRfZm5fZ3JvdXBfYmFubmVyIDIyMSAnY2FsYy5hdDo2NDInIFwKKyAgIkNhbGN1bGF0b3IgJWdsci1wYXJzZXIgJW5hbWUtcHJlZml4IFwiY2FsY1wiIiAiICAgICAiIDEyCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjIxLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogCkBAIC0zMTYzOSw1OSArODU3NjYsNTIgQEAKIAogCiBjYXQgPmNhbGMueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKIC8qIEluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3ItLWNhbGMgKi8KLSVnbHItcGFyc2VyICVuYW1lLXByZWZpeD0iY2FsYyIKKyVnbHItcGFyc2VyICVuYW1lLXByZWZpeCAiY2FsYyIKIAotJXsKLSNpbmNsdWRlIDxzdGRpby5oPgorJWNvZGUgcmVxdWlyZXMKK3sKIAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2lmIEhBVkVfVU5JU1REX0gKLSMgaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZWxzZQotIyB1bmRlZiBhbGFybQotIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KLSNlbmRpZgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jZGVmaW5lIFVTRShWYXIpCi0KLS8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCi10eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKLQotc3RhdGljIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOwotc3RhdGljIGludCBnbG9iYWxfY291bnQgPSAwOwotJX0KKyAgLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KKyAgdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Cit9CiAKIC8qIEV4ZXJjaXNlICV1bmlvbi4gKi8KICV1bmlvbgogewogICBzZW1hbnRpY192YWx1ZSBpdmFsOwogfTsKKyVwcmludGVyIHsgZnByaW50ZiAoeXlvdXRwdXQsICIlZCIsICQkKTsgfSA8aXZhbD47CiAKLSV7CislY29kZSBwcm92aWRlcworeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgLyogVGhlIGlucHV0LiAgKi8KKyAgZXh0ZXJuIEZJTEUgKmlucHV0OworICBleHRlcm4gc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdDsKKyAgZXh0ZXJuIGludCBnbG9iYWxfY291bnQ7Cit9CisKKyVjb2RlCit7CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZGVmaW5lIFVTRShWYXIpCisKK0ZJTEUgKmlucHV0Owogc3RhdGljIGludCBwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCk7Ci0vKiB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZjoKLSAgIC0gJWxvY2F0aW9uICYgJXB1cmUgJiAlZ2xyCi0gICAtICVsb2NhdGlvbiAmICVwdXJlICYgJXlhY2MgJiAlcGFyc2UtcGFyYW0uICovCi1zdGF0aWMgdm9pZCB5eWVycm9yICgKIAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcwotICAgICAgICAgICAgICAgICAgICAgKTsKLXN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOwotc3RhdGljIGludCBnZXRfY2hhciAodm9pZCk7Ci1zdGF0aWMgdm9pZCB1bmdldF9jaGFyICggaW50IGMpOwotJX0KK3N0YXRpYyB2b2lkIGNhbGNlcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CitpbnQgY2FsY2xleCAodm9pZCk7Cit9CiAKIAogCkBAIC0zMTcwMCw3ICs4NTgyMCw3IEBACiAldG9rZW4gPGl2YWw+IE5VTSAibnVtYmVyIgogJXR5cGUgIDxpdmFsPiBleHAKIAotJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uCSAgICAgICAqLworJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uICAgICAgICAgICAgKi8KICVsZWZ0ICctJyAnKycKICVsZWZ0ICcqJyAnLycKICVsZWZ0IE5FRyAgICAgLyogbmVnYXRpb24tLXVuYXJ5IG1pbnVzICovCkBAIC0zMTczMywyNSArODU4NTMsMzYgQEAKIHwgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSAtJDI7ICAgICAgICAgICAgfQogfCBleHAgJ14nIGV4cCAgICAgICAgeyAkJCA9IHBvd2VyICgkMSwgJDMpOyB9CiB8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgIH0KLXwgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyAgICAgICAgICAgfQorfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7IHl5ZXJyb2s7ICB9CiB8ICchJyAgICAgICAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KIHwgJy0nIGVycm9yICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQogOwogJSUKLS8qIFRoZSBpbnB1dC4gICovCi1zdGF0aWMgRklMRSAqaW5wdXQ7CiAKLXN0YXRpYyB2b2lkCi15eWVycm9yICgKLQotICAgICAgICAgY29uc3QgY2hhciAqcykKK3N0YXRpYyBpbnQKK3Bvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQogewotCi0KLSAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIHMpOworICBpbnQgcmVzID0gMTsKKyAgYXNzZXJ0ICgwIDw9IGV4cG9uZW50KTsKKyAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQorICAgIHJlcyAqPSBiYXNlOworICByZXR1cm4gcmVzOwogfQogCiAKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgY2FsY2Vycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKyNpbmNsdWRlIDxjdHlwZS5oPgorCitpbnQgY2FsY2xleCAodm9pZCk7CitzdGF0aWMgaW50IGdldF9jaGFyICh2b2lkKTsKK3N0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKCBpbnQgYyk7CisKIAogc3RhdGljIGludAogZ2V0X2NoYXIgKHZvaWQpCkBAIC0zMTc2Miw3ICs4NTg5Myw2IEBACiAgIHJldHVybiByZXM7CiB9CiAKLQogc3RhdGljIHZvaWQKIHVuZ2V0X2NoYXIgKCBpbnQgYykKIHsKQEAgLTMxNzk3LDM4ICs4NTkyNywyNyBAQAogfQogCiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IExleGljYWwgYW5hbHl6ZXIgcmV0dXJucyBhbiBpbnRlZ2VyIG9uIHRoZSBzdGFjayBhbmQgdGhlIHRva2VuIHwKIHwgTlVNLCBvciB0aGUgQVNDSUkgY2hhcmFjdGVyIHJlYWQgaWYgbm90IGEgbnVtYmVyLiAgU2tpcHMgYWxsICAgfAogfCBibGFua3MgYW5kIHRhYnMsIHJldHVybnMgMCBmb3IgRU9GLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludAoteXlsZXggKHZvaWQpCitpbnQgY2FsY2xleCAodm9pZCkKIHsKLSAgc3RhdGljIGludCBpbml0ID0gMTsKICAgaW50IGM7Ci0KLSAgaWYgKGluaXQpCi0gICAgewotICAgICAgaW5pdCA9IDA7Ci0KLSAgICB9Ci0KLQotCi0gIC8qIFNraXAgd2hpdGUgc3BhY2UuICAqLwotICB3aGlsZSAoKGMgPSBnZXRfY2hhciAoKSkgPT0gJyAnIHx8IGMgPT0gJ1x0JykKKyAgLyogU2tpcCBjdXJyZW50IHRva2VuLCB0aGVuIHdoaXRlIHNwYWNlcy4gICovCisgIGRvCiAgICAgewogCiAgICAgfQorICB3aGlsZSAoKGMgPSBnZXRfY2hhciAoKSkgPT0gJyAnIHx8IGMgPT0gJ1x0Jyk7CiAKICAgLyogcHJvY2VzcyBudW1iZXJzICAgKi8KICAgaWYgKGMgPT0gJy4nIHx8IGlzZGlnaXQgKGMpKQogICAgIHsKICAgICAgIHVuZ2V0X2NoYXIgKCBjKTsKLSAgICAgICh5eWx2YWwpLml2YWwgPSByZWFkX3NpZ25lZF9pbnRlZ2VyICgpOworICAgICAgKGNhbGNsdmFsKS5pdmFsID0gcmVhZF9zaWduZWRfaW50ZWdlciAoKTsKICAgICAgIHJldHVybiBOVU07CiAgICAgfQogCkBAIC0zMTg0MCwxOCArODU5NTksMjAgQEAKICAgcmV0dXJuIGM7CiB9CiAKLXN0YXRpYyBpbnQKLXBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQotewotICBpbnQgcmVzID0gMTsKLSAgaWYgKGV4cG9uZW50IDwgMCkKLSAgICBleGl0ICgzKTsKLSAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQotICAgIHJlcyAqPSBiYXNlOwotICByZXR1cm4gcmVzOwotfQorI2luY2x1ZGUgPGFzc2VydC5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxzZQorIyB1bmRlZiBhbGFybQorIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KKyNlbmRpZgogCiAKKworc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7CitpbnQgZ2xvYmFsX2NvdW50ID0gMDsKKworLyogQSBDIG1haW4gZnVuY3Rpb24uICAqLwogaW50CiBtYWluIChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CkBAIC0zMTg3NiwxMSArODU5OTcsMTEgQEAKICAgICB9CiAKIAotICBzdGF0dXMgPSB5eXBhcnNlICgpOwotICBpZiAoZ2xvYmFsX3Jlc3VsdCAhPSByZXN1bHQpCi0gICAgYWJvcnQgKCk7Ci0gIGlmIChnbG9iYWxfY291bnQgIT0gY291bnQpCi0gICAgYWJvcnQgKCk7CisgIHN0YXR1cyA9IGNhbGNwYXJzZSAoKTsKKyAgaWYgKGZjbG9zZSAoaW5wdXQpKQorICAgIHBlcnJvciAoImZjbG9zZSIpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOwogICByZXR1cm4gc3RhdHVzOwogfQogX0FURU9GCkBAIC0zMTg4OSw1NSArODYwMTAsMTUxIEBACiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkwOiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgotZWNobyBjYWxjLmF0OjU5MCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gY2FsYy5jIGNhbGMueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5MDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQyOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjQyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueSIgImNhbGMuYXQ6NjQyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQyOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2NDIiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjQyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDI6IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAotICAgJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MDogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBcJExJQlMiCi1lY2hvIGNhbGMuYXQ6NTkwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MjogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImNhbGMuYXQ6NjQyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MjogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUyIgImNhbGMuYXQ6NjQyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDI6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5jCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjY0MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5jCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCiAKIAogIyBUZXN0IHRoZSBwcmlvcml0aWVzLgpAQCAtMzE5NTcsNjIgKzg2MTc0LDY2IEBACiAoMl4yKV4zID0gNjQKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkwOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTkwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDI6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDIiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAKICMgU29tZSBzeW50YXggZXJyb3JzLgogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0wIDAKKzEgMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTA6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1OTAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MjogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDIiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0Mjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMzIwMjMsMTggKzg2MjQ0LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0zMjA0NCw2MCArODYyNjcsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1OTAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MjogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMS8vMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTA6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1OTAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MjogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDIiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0Mjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMzIxMDgsMTggKzg2MzIxLDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0zMjEyOSw2MCArODYzNDQsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1OTAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MjogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogZXJyb3IKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkwOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTkwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDI6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDIiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTMyMTkzLDE4ICs4NjM5OCwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0zMjIxNCw2MCArODY0MjEsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1OTAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MjogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMSA9IDIgPSAzCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MDogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU5MCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5MDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQyOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY0MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQyOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQyIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0zMjI3OCwxOCArODY0NzUsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworMS43OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTMyMjk5LDMwICs4NjQ5OCwxOCBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkwOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU5MCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQyOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDIiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCkBAIC0zMjMzMCwzMCArODY1MTcsMzIgQEAKICsxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MDogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU5MCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5MDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQyOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY0MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQyOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQyIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0zMjM2NCwxOCArODY1NTMsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTIuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTMyMzg1LDU3ICs4NjU3Niw0NyBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkwOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU5MCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQyOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDIiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MDogXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKLWVjaG8gY2FsYy5hdDo1OTAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDI6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo2NDIiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDIiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTMyNDQ2LDE4ICs4NjYyNywyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMzI0NjcsMzAgKzg2NjUwLDE4IEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTA6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTkwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5MDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDI6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKQEAgLTMyNTA1LDggKzg2Njc2LDggQEAKICMKICMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCiAjCi0jIC0gY2hlY2sgdGhlIGxvb2stYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCi0jICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZQorIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCiAjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKICMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCiAjCkBAIC0zMjUxNCwzMCArODY2ODUsMzIgQEAKICgpICsgKDEgKyAxICsgMSArKSArICgqICogKikgKyAoMSAqIDIgKiAqKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkwOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTkwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDI6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDIiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTMyNTQ4LDIxICs4NjcyMSwyMyBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjE3OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjIyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjQwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKIGNhbGM6IGVycm9yOiA0NDQ0ICE9IDEKIF9BVEVPRgogCkBAIC0zMjU3Myw2MyArODY3NDgsNTMgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1OTAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MjogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAogIyBUaGUgc2FtZSwgYnV0IHRoaXMgdGltZSBleGVyY2lzaW5nIGV4cGxpY2l0bHkgdHJpZ2dlcmVkIHN5bnRheCBlcnJvcnMuCi0jIFBPU0lYIHNheXMgdGhlIGxvb2stYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCisjIFBPU0lYIHNheXMgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotKCEpICsgKDAgMCkgPSAxCisoISkgKyAoMSAyKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkwOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTkwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDI6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDIiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTMyNjQwLDE4ICs4NjgwNSwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS45OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCiBfQVRFT0YKIApAQCAtMzI2NjIsNjAgKzg2ODI5LDUwIEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTA6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTkwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5MDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDI6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLSgtICopICsgKDAgMCkgPSAxCisoLSAqKSArICgxIDIpID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTA6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1OTAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MjogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDIiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0Mjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMzI3MjYsMTkgKzg2ODgzLDIxIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogY2FsYzogZXJyb3I6IDIyMjIgIT0gMQogX0FURU9GCiAKQEAgLTMyNzQ5LDk0ICs4NjkwOCwxMTcgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1OTAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDI6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQogCi0kYXRfdHJhY2VvbgorCisjIENoZWNrIHRoYXQgeXllcnJvayB3b3JrcyBwcm9wZXJseTogc2Vjb25kIGVycm9yIGlzIG5vdCByZXBvcnRlZCwKKyMgdGhpcmQgYW5kIGZvdXJ0aCBhcmUuICBQYXJzZSBzdGF0dXMgaXMgc3VjY2VzZnVsbC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCogKikgKyAoKikgKyAoKikKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDI6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDIiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE2OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KK3NlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQyOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDIiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICA4OCApICMgODguIGNhbGMuYXQ6NTkxOiBDYWxjdWxhdG9yICVnbHItcGFyc2VyICV2ZXJib3NlCi0gICAgYXRfc2V0dXBfbGluZT0nY2FsYy5hdDo1OTEnCi0gICAgYXRfZGVzYz0nQ2FsY3VsYXRvciAlZ2xyLXBhcnNlciAldmVyYm9zZScKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDg4OiBDYWxjdWxhdG9yICVnbHItcGFyc2VyICV2ZXJib3NlICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiODguIGNhbGMuYXQ6NTkxOiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCi0KLQotCi0KLQotCi0KLQotIyBVc2luZyB5YWNjLmM/Ci0KLQotCi0KLQotCi0KLSMgeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWYgJWxvY2F0aW9uICYgJXB1cmUgJiAoJWdsciBvciAlcGFyc2UtcGFyYW0pLgotCi0jIHl5ZXJyb3IgYWx3YXlzIHNlZXMgdGhlIGxvY2F0aW9ucyAod2hlbiBhY3RpdmF0ZWQpLCBleGNlcHQgaWYKLSMgeWFjYyAmIHB1cmUgJiAhcGFyYW0uCi0KLQotIyBUaGUgaW50ZXJmYWNlIGlzIHB1cmU6IGVpdGhlciBiZWNhdXNlICVwdXJlLXBhcnNlciwgb3IgYmVjYXVzZSB3ZQotIyBhcmUgdXNpbmcgdGhlIEMrKyBwYXJzZXJzLgotCi0KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjIxCisjQVRfU1RBUlRfMjIyCithdF9mbl9ncm91cF9iYW5uZXIgMjIyICdjYWxjLmF0OjY0MycgXAorICAiQ2FsY3VsYXRvciAlZ2xyLXBhcnNlciAlZGVmaW5lIGFwaS5wcmVmaXggXCJjYWxjXCIiICIiIDEyCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjIyLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogCkBAIC0zMjg0OCw1OSArODcwMzAsMTMxNiBAQAogCiAKIGNhdCA+Y2FsYy55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworLyogSW5maXggbm90YXRpb24gY2FsY3VsYXRvci0tY2FsYyAqLworJWdsci1wYXJzZXIgJWRlZmluZSBhcGkucHJlZml4ICJjYWxjIgorCislY29kZSByZXF1aXJlcworeworCisgIC8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCisgIHR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOworfQorCisvKiBFeGVyY2lzZSAldW5pb24uICovCisldW5pb24KK3sKKyAgc2VtYW50aWNfdmFsdWUgaXZhbDsKK307CislcHJpbnRlciB7IGZwcmludGYgKHl5b3V0cHV0LCAiJWQiLCAkJCk7IH0gPGl2YWw+OworCislY29kZSBwcm92aWRlcworeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgLyogVGhlIGlucHV0LiAgKi8KKyAgZXh0ZXJuIEZJTEUgKmlucHV0OworICBleHRlcm4gc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdDsKKyAgZXh0ZXJuIGludCBnbG9iYWxfY291bnQ7Cit9CisKKyVjb2RlCit7CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZGVmaW5lIFVTRShWYXIpCisKK0ZJTEUgKmlucHV0Oworc3RhdGljIGludCBwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCk7CisKK3N0YXRpYyB2b2lkIGNhbGNlcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CitpbnQgY2FsY2xleCAodm9pZCk7Cit9CisKKworCisvKiBCaXNvbiBEZWNsYXJhdGlvbnMgKi8KKyV0b2tlbiBDQUxDX0VPRiAwICJlbmQgb2YgaW5wdXQiCisldG9rZW4gPGl2YWw+IE5VTSAibnVtYmVyIgorJXR5cGUgIDxpdmFsPiBleHAKKworJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uICAgICAgICAgICAgKi8KKyVsZWZ0ICctJyAnKycKKyVsZWZ0ICcqJyAnLycKKyVsZWZ0IE5FRyAgICAgLyogbmVnYXRpb24tLXVuYXJ5IG1pbnVzICovCislcmlnaHQgJ14nICAgIC8qIGV4cG9uZW50aWF0aW9uICAgICAgICAqLworCisvKiBHcmFtbWFyIGZvbGxvd3MgKi8KKyUlCitpbnB1dDoKKyAgbGluZQorfCBpbnB1dCBsaW5lICAgICAgICAgeyAgfQorOworCitsaW5lOgorICAnXG4nCit8IGV4cCAnXG4nICAgICAgICAgICB7IFVTRSAoJDEpOyB9Cis7CisKK2V4cDoKKyAgTlVNICAgICAgICAgICAgICAgIHsgJCQgPSAkMTsgICAgICAgICAgICAgfQorfCBleHAgJz0nIGV4cAorICB7CisgICAgaWYgKCQxICE9ICQzKQorICAgICAgZnByaW50ZiAoc3RkZXJyLCAiY2FsYzogZXJyb3I6ICVkICE9ICVkXG4iLCAkMSwgJDMpOworICAgICQkID0gJDE7CisgIH0KK3wgZXhwICcrJyBleHAgICAgICAgIHsgJCQgPSAkMSArICQzOyAgICAgICAgfQorfCBleHAgJy0nIGV4cCAgICAgICAgeyAkJCA9ICQxIC0gJDM7ICAgICAgICB9Cit8IGV4cCAnKicgZXhwICAgICAgICB7ICQkID0gJDEgKiAkMzsgICAgICAgIH0KK3wgZXhwICcvJyBleHAgICAgICAgIHsgJCQgPSAkMSAvICQzOyAgICAgICAgfQorfCAnLScgZXhwICAlcHJlYyBORUcgeyAkJCA9IC0kMjsgICAgICAgICAgICB9Cit8IGV4cCAnXicgZXhwICAgICAgICB7ICQkID0gcG93ZXIgKCQxLCAkMyk7IH0KK3wgJygnIGV4cCAnKScgICAgICAgIHsgJCQgPSAkMjsgICAgICAgICAgICAgfQorfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7IHl5ZXJyb2s7ICB9Cit8ICchJyAgICAgICAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KK3wgJy0nIGVycm9yICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQorOworJSUKKworc3RhdGljIGludAorcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpCit7CisgIGludCByZXMgPSAxOworICBhc3NlcnQgKDAgPD0gZXhwb25lbnQpOworICBmb3IgKC8qIE5pZW50ZSAqLzsgZXhwb25lbnQ7IC0tZXhwb25lbnQpCisgICAgcmVzICo9IGJhc2U7CisgIHJldHVybiByZXM7Cit9CisKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCBjYWxjZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorI2luY2x1ZGUgPGN0eXBlLmg+CisKK2ludCBjYWxjbGV4ICh2b2lkKTsKK3N0YXRpYyBpbnQgZ2V0X2NoYXIgKHZvaWQpOworc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoIGludCBjKTsKKworCitzdGF0aWMgaW50CitnZXRfY2hhciAodm9pZCkKK3sKKyAgaW50IHJlcyA9IGdldGMgKGlucHV0KTsKKyAgOworCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkCit1bmdldF9jaGFyICggaW50IGMpCit7CisgIDsKKworICB1bmdldGMgKGMsIGlucHV0KTsKK30KKworc3RhdGljIGludAorcmVhZF9zaWduZWRfaW50ZWdlciAodm9pZCkKK3sKKyAgaW50IGMgPSBnZXRfY2hhciAoKTsKKyAgaW50IHNpZ24gPSAxOworICBpbnQgbiA9IDA7CisKKyAgOworICBpZiAoYyA9PSAnLScpCisgICAgeworICAgICAgYyA9IGdldF9jaGFyICgpOworICAgICAgc2lnbiA9IC0xOworICAgIH0KKworICB3aGlsZSAoaXNkaWdpdCAoYykpCisgICAgeworICAgICAgbiA9IDEwICogbiArIChjIC0gJzAnKTsKKyAgICAgIGMgPSBnZXRfY2hhciAoKTsKKyAgICB9CisKKyAgdW5nZXRfY2hhciAoIGMpOworCisgIHJldHVybiBzaWduICogbjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgTGV4aWNhbCBhbmFseXplciByZXR1cm5zIGFuIGludGVnZXIgb24gdGhlIHN0YWNrIGFuZCB0aGUgdG9rZW4gfAorfCBOVU0sIG9yIHRoZSBBU0NJSSBjaGFyYWN0ZXIgcmVhZCBpZiBub3QgYSBudW1iZXIuICBTa2lwcyBhbGwgICB8Cit8IGJsYW5rcyBhbmQgdGFicywgcmV0dXJucyAwIGZvciBFT0YuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitpbnQgY2FsY2xleCAodm9pZCkKK3sKKyAgaW50IGM7CisgIC8qIFNraXAgY3VycmVudCB0b2tlbiwgdGhlbiB3aGl0ZSBzcGFjZXMuICAqLworICBkbworICAgIHsKKworICAgIH0KKyAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKCkpID09ICcgJyB8fCBjID09ICdcdCcpOworCisgIC8qIHByb2Nlc3MgbnVtYmVycyAgICovCisgIGlmIChjID09ICcuJyB8fCBpc2RpZ2l0IChjKSkKKyAgICB7CisgICAgICB1bmdldF9jaGFyICggYyk7CisgICAgICAoY2FsY2x2YWwpLml2YWwgPSByZWFkX3NpZ25lZF9pbnRlZ2VyICgpOworICAgICAgcmV0dXJuIE5VTTsKKyAgICB9CisKKyAgLyogUmV0dXJuIGVuZC1vZi1maWxlLiAgKi8KKyAgaWYgKGMgPT0gRU9GKQorICAgIHJldHVybiBDQUxDX0VPRjsKKworICAvKiBSZXR1cm4gc2luZ2xlIGNoYXJzLiAqLworICByZXR1cm4gYzsKK30KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxzZQorIyB1bmRlZiBhbGFybQorIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KICNlbmRpZgotJX0KKworCisKK3NlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOworaW50IGdsb2JhbF9jb3VudCA9IDA7CisKKy8qIEEgQyBtYWluIGZ1bmN0aW9uLiAgKi8KK2ludAorbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworICBzZW1hbnRpY192YWx1ZSByZXN1bHQgPSAwOworICBpbnQgY291bnQgPSAwOworICBpbnQgc3RhdHVzOworCisgIC8qIFRoaXMgdXNlZCB0byBiZSBhbGFybSAoMTApLCBidXQgdGhhdCBpc24ndCBlbm91Z2ggdGltZSBmb3IKKyAgICAgYSBKdWx5IDE5OTUgdmludGFnZSBERUMgQWxwaGFzdGF0aW9uIDIwMCA0LzEwMCBzeXN0ZW0sCisgICAgIGFjY29yZGluZyB0byBOZWxzb24gSC4gRi4gQmVlYmUuICAxMDAgc2Vjb25kcyBpcyBlbm91Z2guICAqLworICBhbGFybSAoMTAwKTsKKworICBpZiAoYXJnYyA9PSAyKQorICAgIGlucHV0ID0gZm9wZW4gKGFyZ3ZbMV0sICJyIik7CisgIGVsc2UKKyAgICBpbnB1dCA9IHN0ZGluOworCisgIGlmICghaW5wdXQpCisgICAgeworICAgICAgcGVycm9yIChhcmd2WzFdKTsKKyAgICAgIHJldHVybiAzOworICAgIH0KKworCisgIHN0YXR1cyA9IGNhbGNwYXJzZSAoKTsKKyAgaWYgKGZjbG9zZSAoaW5wdXQpKQorICAgIHBlcnJvciAoImZjbG9zZSIpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOworICByZXR1cm4gc3RhdHVzOworfQorX0FURU9GCisKKworCisKKworCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjY0MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiICJjYWxjLmF0OjY0MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjQzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjY0MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzOiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDMiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiY2FsYy5hdDo2NDMiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jICRMSUJTIiAiY2FsYy5hdDo2NDMiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzOiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuYworIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2NDMiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuYworCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgVGVzdCB0aGUgcHJpb3JpdGllcy4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMSArIDIgKiAzID0gNworMSArIDIgKiAtMyA9IC01CisKKy0xXjIgPSAtMQorKC0xKV4yID0gMQorCistLS0xID0gLTEKKworMSAtIDIgLSAzID0gLTQKKzEgLSAoMiAtIDMpID0gMgorCisyXjJeMyA9IDI1NgorKDJeMileMyA9IDY0CitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY0MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyMgU29tZSBzeW50YXggZXJyb3JzLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxIDIKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDM6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KK3NlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDMiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxLy8yCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY0MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCitzZWQgJ3MvXlstMC05Ll0qOiAvLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworZXJyb3IKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDM6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCitzZWQgJ3MvXlstMC05Ll0qOiAvLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMSA9IDIgPSAzCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY0MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuNzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCitzZWQgJ3MvXlstMC05Ll0qOiAvLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworCisrMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MzogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0Mzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisyLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKycKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDM6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIEV4ZXJjaXNlIGVycm9yIG1lc3NhZ2VzIHdpdGggRU9GOiB3b3JrIG9uIGFuIGVtcHR5IGZpbGUuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDM6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo2NDMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KK3NlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDMiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIEV4ZXJjaXNlIHRoZSBlcnJvciB0b2tlbjogd2l0aG91dCBpdCwgd2UgZGllIGF0IHRoZSBmaXJzdCBlcnJvciwKKyMgaGVuY2UgYmUgc3VyZSB0bworIworIyAtIGhhdmUgc2V2ZXJhbCBlcnJvcnMgd2hpY2ggZXhlcmNpc2UgZGlmZmVyZW50IHNoaWZ0L2Rpc2NhcmRpbmdzCisjICAgLSAoKTogbm90aGluZyB0byBwb3AsIG5vdGhpbmcgdG8gZGlzY2FyZAorIyAgIC0gKDEgKyAxICsgMSArKTogYSBsb3QgdG8gcG9wLCBub3RoaW5nIHRvIGRpc2NhcmQKKyMgICAtICgqICogKik6IG5vdGhpbmcgdG8gcG9wLCBhIGxvdCB0byBkaXNjYXJkCisjICAgLSAoMSArIDIgKiAqKTogc29tZSB0byBwb3AgYW5kIGRpc2NhcmQKKyMKKyMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCisjCisjIC0gY2hlY2sgdGhlIGxvb2thaGVhZCB0aGF0IHRyaWdnZXJzIGFuIGVycm9yIGlzIG5vdCBkaXNjYXJkZWQKKyMgICB3aGVuIHdlIGVudGVyIGVycm9yIHJlY292ZXJ5LiAgQmVsb3csIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUKKyMgICBmaXJzdCBlcnJvciBpcyAiKSIsIHdoaWNoIGlzIG5lZWRlZCB0byByZWNvdmVyIGZyb20gdGhlIGVycm9yIGFuZAorIyAgIHByb2R1Y2UgdGhlICIwIiB0aGF0IHRyaWdnZXJzIHRoZSAiMCAhPSAxIiBlcnJvci4KKyMKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCkgKyAoMSArIDEgKyAxICspICsgKCogKiAqKSArICgxICogMiAqICopID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MzogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0Mzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK2NhbGM6IGVycm9yOiA0NDQ0ICE9IDEKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDM6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgVGhlIHNhbWUsIGJ1dCB0aGlzIHRpbWUgZXhlcmNpc2luZyBleHBsaWNpdGx5IHRyaWdnZXJlZCBzeW50YXggZXJyb3JzLgorIyBQT1NJWCBzYXlzIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKyghKSArICgxIDIpID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MzogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0Mzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCitjYWxjOiBlcnJvcjogMjIyMiAhPSAxCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KK3NlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDMiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoLSAqKSArICgxIDIpID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MzogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0Mzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjQ6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKK2NhbGM6IGVycm9yOiAyMjIyICE9IDEKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDM6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgQ2hlY2sgdGhhdCB5eWVycm9rIHdvcmtzIHByb3Blcmx5OiBzZWNvbmQgZXJyb3IgaXMgbm90IHJlcG9ydGVkLAorIyB0aGlyZCBhbmQgZm91cnRoIGFyZS4gIFBhcnNlIHN0YXR1cyBpcyBzdWNjZXNmdWxsLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoKiAqKSArICgqKSArICgqKQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MzogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0Mzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTY6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDM6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzIyMgorI0FUX1NUQVJUXzIyMworYXRfZm5fZ3JvdXBfYmFubmVyIDIyMyAnY2FsYy5hdDo2NDQnIFwKKyAgIkNhbGN1bGF0b3IgJWdsci1wYXJzZXIgJXZlcmJvc2UiICIgICAgICAgICAgICAgICAgIiAxMgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjIyMy4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworCisKKworCisKKworCitjYXQgPmNhbGMueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCiAvKiBJbmZpeCBub3RhdGlvbiBjYWxjdWxhdG9yLS1jYWxjICovCiAlZ2xyLXBhcnNlciAldmVyYm9zZQogCi0lewotI2luY2x1ZGUgPHN0ZGlvLmg+CislY29kZSByZXF1aXJlcworewogCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaWYgSEFWRV9VTklTVERfSAotIyBpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbHNlCi0jIHVuZGVmIGFsYXJtCi0jIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLwotI2VuZGlmCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNkZWZpbmUgVVNFKFZhcikKLQotLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KLXR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOwotCi1zdGF0aWMgc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7Ci1zdGF0aWMgaW50IGdsb2JhbF9jb3VudCA9IDA7Ci0lfQorICAvKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLworICB0eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKK30KIAogLyogRXhlcmNpc2UgJXVuaW9uLiAqLwogJXVuaW9uCiB7CiAgIHNlbWFudGljX3ZhbHVlIGl2YWw7CiB9OworJXByaW50ZXIgeyBmcHJpbnRmICh5eW91dHB1dCwgIiVkIiwgJCQpOyB9IDxpdmFsPjsKIAotJXsKKyVjb2RlIHByb3ZpZGVzCit7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICAvKiBUaGUgaW5wdXQuICAqLworICBleHRlcm4gRklMRSAqaW5wdXQ7CisgIGV4dGVybiBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0OworICBleHRlcm4gaW50IGdsb2JhbF9jb3VudDsKK30KKworJWNvZGUKK3sKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNkZWZpbmUgVVNFKFZhcikKKworRklMRSAqaW5wdXQ7CiBzdGF0aWMgaW50IHBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KTsKLS8qIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmOgotICAgLSAlbG9jYXRpb24gJiAlcHVyZSAmICVnbHIKLSAgIC0gJWxvY2F0aW9uICYgJXB1cmUgJiAleWFjYyAmICVwYXJzZS1wYXJhbS4gKi8KLXN0YXRpYyB2b2lkIHl5ZXJyb3IgKAogCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzCi0gICAgICAgICAgICAgICAgICAgICApOwotc3RhdGljIGludCB5eWxleCAodm9pZCk7Ci1zdGF0aWMgaW50IGdldF9jaGFyICh2b2lkKTsKLXN0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKCBpbnQgYyk7Ci0lfQorc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CitpbnQgeXlsZXggKHZvaWQpOworfQogCiAKIApAQCAtMzI5MDksNyArODgzNDgsNyBAQAogJXRva2VuIDxpdmFsPiBOVU0gIm51bWJlciIKICV0eXBlICA8aXZhbD4gZXhwCiAKLSVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbgkgICAgICAgKi8KKyVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbiAgICAgICAgICAgICovCiAlbGVmdCAnLScgJysnCiAlbGVmdCAnKicgJy8nCiAlbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLwpAQCAtMzI5NDIsMjUgKzg4MzgxLDM2IEBACiB8ICctJyBleHAgICVwcmVjIE5FRyB7ICQkID0gLSQyOyAgICAgICAgICAgIH0KIHwgZXhwICdeJyBleHAgICAgICAgIHsgJCQgPSBwb3dlciAoJDEsICQzKTsgfQogfCAnKCcgZXhwICcpJyAgICAgICAgeyAkJCA9ICQyOyAgICAgICAgICAgICB9Ci18ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgICAgICAgICAgIH0KK3wgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyB5eWVycm9rOyAgfQogfCAnIScgICAgICAgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9CiB8ICctJyBlcnJvciAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KIDsKICUlCi0vKiBUaGUgaW5wdXQuICAqLwotc3RhdGljIEZJTEUgKmlucHV0OwogCi1zdGF0aWMgdm9pZAoteXllcnJvciAoCi0KLSAgICAgICAgIGNvbnN0IGNoYXIgKnMpCitzdGF0aWMgaW50Citwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKIHsKLQotCi0gIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBzKTsKKyAgaW50IHJlcyA9IDE7CisgIGFzc2VydCAoMCA8PSBleHBvbmVudCk7CisgIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKKyAgICByZXMgKj0gYmFzZTsKKyAgcmV0dXJuIHJlczsKIH0KIAogCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorI2luY2x1ZGUgPGN0eXBlLmg+CisKK2ludCB5eWxleCAodm9pZCk7CitzdGF0aWMgaW50IGdldF9jaGFyICh2b2lkKTsKK3N0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKCBpbnQgYyk7CisKIAogc3RhdGljIGludAogZ2V0X2NoYXIgKHZvaWQpCkBAIC0zMjk3MSw3ICs4ODQyMSw2IEBACiAgIHJldHVybiByZXM7CiB9CiAKLQogc3RhdGljIHZvaWQKIHVuZ2V0X2NoYXIgKCBpbnQgYykKIHsKQEAgLTMzMDA2LDMyICs4ODQ1NSwyMSBAQAogfQogCiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IExleGljYWwgYW5hbHl6ZXIgcmV0dXJucyBhbiBpbnRlZ2VyIG9uIHRoZSBzdGFjayBhbmQgdGhlIHRva2VuIHwKIHwgTlVNLCBvciB0aGUgQVNDSUkgY2hhcmFjdGVyIHJlYWQgaWYgbm90IGEgbnVtYmVyLiAgU2tpcHMgYWxsICAgfAogfCBibGFua3MgYW5kIHRhYnMsIHJldHVybnMgMCBmb3IgRU9GLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludAoteXlsZXggKHZvaWQpCitpbnQgeXlsZXggKHZvaWQpCiB7Ci0gIHN0YXRpYyBpbnQgaW5pdCA9IDE7CiAgIGludCBjOwotCi0gIGlmIChpbml0KQotICAgIHsKLSAgICAgIGluaXQgPSAwOwotCi0gICAgfQotCi0KLQotICAvKiBTa2lwIHdoaXRlIHNwYWNlLiAgKi8KLSAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKCkpID09ICcgJyB8fCBjID09ICdcdCcpCisgIC8qIFNraXAgY3VycmVudCB0b2tlbiwgdGhlbiB3aGl0ZSBzcGFjZXMuICAqLworICBkbwogICAgIHsKIAogICAgIH0KKyAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKCkpID09ICcgJyB8fCBjID09ICdcdCcpOwogCiAgIC8qIHByb2Nlc3MgbnVtYmVycyAgICovCiAgIGlmIChjID09ICcuJyB8fCBpc2RpZ2l0IChjKSkKQEAgLTMzMDQ5LDE4ICs4ODQ4NywyMCBAQAogICByZXR1cm4gYzsKIH0KIAotc3RhdGljIGludAotcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpCi17Ci0gIGludCByZXMgPSAxOwotICBpZiAoZXhwb25lbnQgPCAwKQotICAgIGV4aXQgKDMpOwotICBmb3IgKC8qIE5pZW50ZSAqLzsgZXhwb25lbnQ7IC0tZXhwb25lbnQpCi0gICAgcmVzICo9IGJhc2U7Ci0gIHJldHVybiByZXM7Ci19CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjIHVuZGVmIGFsYXJtCisjIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLworI2VuZGlmCiAKIAorCitzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKK2ludCBnbG9iYWxfY291bnQgPSAwOworCisvKiBBIEMgbWFpbiBmdW5jdGlvbi4gICovCiBpbnQKIG1haW4gKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKQEAgLTMzMDg2LDEwICs4ODUyNiwxMCBAQAogCiAKICAgc3RhdHVzID0geXlwYXJzZSAoKTsKLSAgaWYgKGdsb2JhbF9yZXN1bHQgIT0gcmVzdWx0KQotICAgIGFib3J0ICgpOwotICBpZiAoZ2xvYmFsX2NvdW50ICE9IGNvdW50KQotICAgIGFib3J0ICgpOworICBpZiAoZmNsb3NlIChpbnB1dCkpCisgICAgcGVycm9yICgiZmNsb3NlIik7CisgIGFzc2VydCAoZ2xvYmFsX3Jlc3VsdCA9PSByZXN1bHQpOworICBhc3NlcnQgKGdsb2JhbF9jb3VudCA9PSBjb3VudCk7CiAgIHJldHVybiBzdGF0dXM7CiB9CiBfQVRFT0YKQEAgLTMzMDk4LDU1ICs4ODUzOCwxNTEgQEAKIAogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTE6IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkiCi1lY2hvIGNhbGMuYXQ6NTkxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtbyBjYWxjLmMgY2FsYy55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2NDQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55IiAiY2FsYy5hdDo2NDQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDQ6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjY0NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ0OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2NDQiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NDogYmlzb24gLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCi0gICAkYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkxOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jIFwkTElCUyIKLWVjaG8gY2FsYy5hdDo1OTEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5MTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgorICAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ0OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiY2FsYy5hdDo2NDQiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ0OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jICRMSUJTIiAiY2FsYy5hdDo2NDQiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NDogXCRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCBcIlwkLjoge1wkX31cXG5cIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCBcJC4gPT0gMSkgJiYgL15cXHMqXCQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciBcIm1haW50XCIuCisgICAgICAgICMgfHwgL1xcc1wkLworICAgICAgICApJyBjYWxjLmMKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjQ0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmMKKworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKIAogCiAjIFRlc3QgdGhlIHByaW9yaXRpZXMuCkBAIC0zMzE2Niw2MiArODg3MDIsNjYgQEAKICgyXjIpXjMgPSA2NAogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTE6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1OTEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDQiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKIAogIyBTb21lIHN5bnRheCBlcnJvcnMuCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLTAgMAorMSAyCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU5MSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5MTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ0OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY0NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ0OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ0IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0zMzIzMiwxOCArODg3NzIsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTMzMjUzLDYwICs4ODc5NSw1MCBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkxOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU5MSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ0OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDQiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiAxLy8yCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU5MSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5MTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ0OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY0NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ0OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ0IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0zMzMxNywxOCArODg4NDksMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJy8nLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTMzMzM4LDYwICs4ODg3Miw1MCBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkxOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU5MSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ0OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDQiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiBlcnJvcgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTE6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1OTEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDQiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMzM0MDIsMTggKzg4OTI2LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkCisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTMzNDIzLDYwICs4ODk0OSw1MCBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkxOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU5MSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ0OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDQiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiAxID0gMiA9IDMKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkxOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTkxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDQ6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQ0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDQ6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTMzNDg3LDE4ICs4OTAwMywyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS42OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCisxLjc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPScKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMzM1MDgsMzAgKzg5MDI2LDE4IEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTE6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTkxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5MTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDQ6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKQEAgLTMzNTM5LDMwICs4OTA0NSwzMiBAQAogKzEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkxOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTkxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDQ6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQ0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDQ6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTMzNTczLDE4ICs4OTA4MSwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMi4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCisyLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKycKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMzM1OTQsNTcgKzg5MTA0LDQ3IEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTE6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTkxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5MTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDQ6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAjIEV4ZXJjaXNlIGVycm9yIG1lc3NhZ2VzIHdpdGggRU9GOiB3b3JrIG9uIGFuIGVtcHR5IGZpbGUuCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkxOiBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgotZWNobyBjYWxjLmF0OjU5MSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NDogIFwkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiICJjYWxjLmF0OjY0NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMzM2NTUsMTggKzg5MTU1LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0zMzY3NiwzMCArODkxNzgsMTggQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1OTEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIApAQCAtMzM3MTQsOCArODkyMDQsOCBAQAogIwogIyAtIHRlc3QgdGhlIGFjdGlvbiBhc3NvY2lhdGVkIHRvIGBlcnJvcicKICMKLSMgLSBjaGVjayB0aGUgbG9vay1haGVhZCB0aGF0IHRyaWdnZXJzIGFuIGVycm9yIGlzIG5vdCBkaXNjYXJkZWQKLSMgICB3aGVuIHdlIGVudGVyIGVycm9yIHJlY292ZXJ5LiAgQmVsb3csIHRoZSBsb29rLWFoZWFkIGNhdXNpbmcgdGhlCisjIC0gY2hlY2sgdGhlIGxvb2thaGVhZCB0aGF0IHRyaWdnZXJzIGFuIGVycm9yIGlzIG5vdCBkaXNjYXJkZWQKKyMgICB3aGVuIHdlIGVudGVyIGVycm9yIHJlY292ZXJ5LiAgQmVsb3csIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUKICMgICBmaXJzdCBlcnJvciBpcyAiKSIsIHdoaWNoIGlzIG5lZWRlZCB0byByZWNvdmVyIGZyb20gdGhlIGVycm9yIGFuZAogIyAgIHByb2R1Y2UgdGhlICIwIiB0aGF0IHRyaWdnZXJzIHRoZSAiMCAhPSAxIiBlcnJvci4KICMKQEAgLTMzNzIzLDMwICs4OTIxMywzMiBAQAogKCkgKyAoMSArIDEgKyAxICspICsgKCogKiAqKSArICgxICogMiAqICopID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTE6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1OTEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDQiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMzM3NTcsMjEgKzg5MjQ5LDIzIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuNDA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xODogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4yMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS40MTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogY2FsYzogZXJyb3I6IDQ0NDQgIT0gMQogX0FURU9GCiAKQEAgLTMzNzgyLDYzICs4OTI3Niw1MyBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkxOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU5MSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ0OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDQiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAjIFRoZSBzYW1lLCBidXQgdGhpcyB0aW1lIGV4ZXJjaXNpbmcgZXhwbGljaXRseSB0cmlnZ2VyZWQgc3ludGF4IGVycm9ycy4KLSMgUE9TSVggc2F5cyB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KKyMgUE9TSVggc2F5cyB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0oISkgKyAoMCAwKSA9IDEKKyghKSArICgxIDIpID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTE6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1OTEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDQiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMzM4NDksMTggKzg5MzMzLDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjk6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKIGNhbGM6IGVycm9yOiAyMjIyICE9IDEKIF9BVEVPRgogCkBAIC0zMzg3MSw2MCArODkzNTcsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1OTEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotKC0gKikgKyAoMCAwKSA9IDEKKygtICopICsgKDEgMikgPSAxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU5MSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5MTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ0OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY0NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ0OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ0IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0zMzkzNSwxOSArODk0MTEsMjEgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwotMS4xMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS40OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCiBfQVRFT0YKIApAQCAtMzM5NTgsOTQgKzg5NDM2LDExNyBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkxOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU5MSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCiAKLSRhdF90cmFjZW9uCisKKyMgQ2hlY2sgdGhhdCB5eWVycm9rIHdvcmtzIHByb3Blcmx5OiBzZWNvbmQgZXJyb3IgaXMgbm90IHJlcG9ydGVkLAorIyB0aGlyZCBhbmQgZm91cnRoIGFyZS4gIFBhcnNlIHN0YXR1cyBpcyBzdWNjZXNmdWxsLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoKiAqKSArICgqKSArICgqKQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDQiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTY6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDQ6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKIAogCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwotCi0gIDg5ICkgIyA4OS4gY2FsYy5hdDo1OTI6IENhbGN1bGF0b3IgJWdsci1wYXJzZXIgJXlhY2MKLSAgICBhdF9zZXR1cF9saW5lPSdjYWxjLmF0OjU5MicKLSAgICBhdF9kZXNjPSdDYWxjdWxhdG9yICVnbHItcGFyc2VyICV5YWNjJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgODk6IENhbGN1bGF0b3IgJWdsci1wYXJzZXIgJXlhY2MgICAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICI4OS4gY2FsYy5hdDo1OTI6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KLQotCi0KLQotCi0KLQotCi0jIFVzaW5nIHlhY2MuYz8KLQotCi0KLQotCi0KLQotIyB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZiAlbG9jYXRpb24gJiAlcHVyZSAmICglZ2xyIG9yICVwYXJzZS1wYXJhbSkuCi0KLSMgeXllcnJvciBhbHdheXMgc2VlcyB0aGUgbG9jYXRpb25zICh3aGVuIGFjdGl2YXRlZCksIGV4Y2VwdCBpZgotIyB5YWNjICYgcHVyZSAmICFwYXJhbS4KLQotCi0jIFRoZSBpbnRlcmZhY2UgaXMgcHVyZTogZWl0aGVyIGJlY2F1c2UgJXB1cmUtcGFyc2VyLCBvciBiZWNhdXNlIHdlCi0jIGFyZSB1c2luZyB0aGUgQysrIHBhcnNlcnMuCi0KLQorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yMjMKKyNBVF9TVEFSVF8yMjQKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyMjQgJ2NhbGMuYXQ6NjQ1JyBcCisgICJDYWxjdWxhdG9yICVnbHItcGFyc2VyICV5YWNjIiAiICAgICAgICAgICAgICAgICAgICIgMTIKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyMjQuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiAKQEAgLTM0MDU3LDU5ICs4OTU1OCw1MiBAQAogCiAKIGNhdCA+Y2FsYy55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogLyogSW5maXggbm90YXRpb24gY2FsY3VsYXRvci0tY2FsYyAqLwogJWdsci1wYXJzZXIgJXlhY2MKIAotJXsKLSNpbmNsdWRlIDxzdGRpby5oPgorJWNvZGUgcmVxdWlyZXMKK3sKIAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2lmIEhBVkVfVU5JU1REX0gKLSMgaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZWxzZQotIyB1bmRlZiBhbGFybQotIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KLSNlbmRpZgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jZGVmaW5lIFVTRShWYXIpCi0KLS8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCi10eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKLQotc3RhdGljIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOwotc3RhdGljIGludCBnbG9iYWxfY291bnQgPSAwOwotJX0KKyAgLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KKyAgdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Cit9CiAKIC8qIEV4ZXJjaXNlICV1bmlvbi4gKi8KICV1bmlvbgogewogICBzZW1hbnRpY192YWx1ZSBpdmFsOwogfTsKKyVwcmludGVyIHsgZnByaW50ZiAoeXlvdXRwdXQsICIlZCIsICQkKTsgfSA8aXZhbD47CiAKLSV7CislY29kZSBwcm92aWRlcworeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgLyogVGhlIGlucHV0LiAgKi8KKyAgZXh0ZXJuIEZJTEUgKmlucHV0OworICBleHRlcm4gc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdDsKKyAgZXh0ZXJuIGludCBnbG9iYWxfY291bnQ7Cit9CisKKyVjb2RlCit7CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZGVmaW5lIFVTRShWYXIpCisKK0ZJTEUgKmlucHV0Owogc3RhdGljIGludCBwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCk7Ci0vKiB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZjoKLSAgIC0gJWxvY2F0aW9uICYgJXB1cmUgJiAlZ2xyCi0gICAtICVsb2NhdGlvbiAmICVwdXJlICYgJXlhY2MgJiAlcGFyc2UtcGFyYW0uICovCi1zdGF0aWMgdm9pZCB5eWVycm9yICgKIAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcwotICAgICAgICAgICAgICAgICAgICAgKTsKLXN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOwotc3RhdGljIGludCBnZXRfY2hhciAodm9pZCk7Ci1zdGF0aWMgdm9pZCB1bmdldF9jaGFyICggaW50IGMpOwotJX0KK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworaW50IHl5bGV4ICh2b2lkKTsKK30KIAogCiAKQEAgLTM0MTE4LDcgKzg5NjEyLDcgQEAKICV0b2tlbiA8aXZhbD4gTlVNICJudW1iZXIiCiAldHlwZSAgPGl2YWw+IGV4cAogCi0lbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24JICAgICAgICovCislbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24gICAgICAgICAgICAqLwogJWxlZnQgJy0nICcrJwogJWxlZnQgJyonICcvJwogJWxlZnQgTkVHICAgICAvKiBuZWdhdGlvbi0tdW5hcnkgbWludXMgKi8KQEAgLTM0MTUxLDI1ICs4OTY0NSwzNiBAQAogfCAnLScgZXhwICAlcHJlYyBORUcgeyAkJCA9IC0kMjsgICAgICAgICAgICB9CiB8IGV4cCAnXicgZXhwICAgICAgICB7ICQkID0gcG93ZXIgKCQxLCAkMyk7IH0KIHwgJygnIGV4cCAnKScgICAgICAgIHsgJCQgPSAkMjsgICAgICAgICAgICAgfQotfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7ICAgICAgICAgICB9Cit8ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgeXllcnJvazsgIH0KIHwgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQogfCAnLScgZXJyb3IgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9CiA7CiAlJQotLyogVGhlIGlucHV0LiAgKi8KLXN0YXRpYyBGSUxFICppbnB1dDsKIAotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKAotCi0gICAgICAgICBjb25zdCBjaGFyICpzKQorc3RhdGljIGludAorcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpCiB7Ci0KLQotICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgcyk7CisgIGludCByZXMgPSAxOworICBhc3NlcnQgKDAgPD0gZXhwb25lbnQpOworICBmb3IgKC8qIE5pZW50ZSAqLzsgZXhwb25lbnQ7IC0tZXhwb25lbnQpCisgICAgcmVzICo9IGJhc2U7CisgIHJldHVybiByZXM7CiB9CiAKIAorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKyNpbmNsdWRlIDxjdHlwZS5oPgorCitpbnQgeXlsZXggKHZvaWQpOworc3RhdGljIGludCBnZXRfY2hhciAodm9pZCk7CitzdGF0aWMgdm9pZCB1bmdldF9jaGFyICggaW50IGMpOworCiAKIHN0YXRpYyBpbnQKIGdldF9jaGFyICh2b2lkKQpAQCAtMzQxODAsNyArODk2ODUsNiBAQAogICByZXR1cm4gcmVzOwogfQogCi0KIHN0YXRpYyB2b2lkCiB1bmdldF9jaGFyICggaW50IGMpCiB7CkBAIC0zNDIxNSwzMiArODk3MTksMjEgQEAKIH0KIAogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCBMZXhpY2FsIGFuYWx5emVyIHJldHVybnMgYW4gaW50ZWdlciBvbiB0aGUgc3RhY2sgYW5kIHRoZSB0b2tlbiB8CiB8IE5VTSwgb3IgdGhlIEFTQ0lJIGNoYXJhY3RlciByZWFkIGlmIG5vdCBhIG51bWJlci4gIFNraXBzIGFsbCAgIHwKIHwgYmxhbmtzIGFuZCB0YWJzLCByZXR1cm5zIDAgZm9yIEVPRi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQKLXl5bGV4ICh2b2lkKQoraW50IHl5bGV4ICh2b2lkKQogewotICBzdGF0aWMgaW50IGluaXQgPSAxOwogICBpbnQgYzsKLQotICBpZiAoaW5pdCkKLSAgICB7Ci0gICAgICBpbml0ID0gMDsKLQotICAgIH0KLQotCi0KLSAgLyogU2tpcCB3aGl0ZSBzcGFjZS4gICovCi0gIHdoaWxlICgoYyA9IGdldF9jaGFyICgpKSA9PSAnICcgfHwgYyA9PSAnXHQnKQorICAvKiBTa2lwIGN1cnJlbnQgdG9rZW4sIHRoZW4gd2hpdGUgc3BhY2VzLiAgKi8KKyAgZG8KICAgICB7CiAKICAgICB9CisgIHdoaWxlICgoYyA9IGdldF9jaGFyICgpKSA9PSAnICcgfHwgYyA9PSAnXHQnKTsKIAogICAvKiBwcm9jZXNzIG51bWJlcnMgICAqLwogICBpZiAoYyA9PSAnLicgfHwgaXNkaWdpdCAoYykpCkBAIC0zNDI1OCwxOCArODk3NTEsMjAgQEAKICAgcmV0dXJuIGM7CiB9CiAKLXN0YXRpYyBpbnQKLXBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQotewotICBpbnQgcmVzID0gMTsKLSAgaWYgKGV4cG9uZW50IDwgMCkKLSAgICBleGl0ICgzKTsKLSAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQotICAgIHJlcyAqPSBiYXNlOwotICByZXR1cm4gcmVzOwotfQorI2luY2x1ZGUgPGFzc2VydC5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxzZQorIyB1bmRlZiBhbGFybQorIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KKyNlbmRpZgogCiAKKworc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7CitpbnQgZ2xvYmFsX2NvdW50ID0gMDsKKworLyogQSBDIG1haW4gZnVuY3Rpb24uICAqLwogaW50CiBtYWluIChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CkBAIC0zNDI5NSwxMCArODk3OTAsMTAgQEAKIAogCiAgIHN0YXR1cyA9IHl5cGFyc2UgKCk7Ci0gIGlmIChnbG9iYWxfcmVzdWx0ICE9IHJlc3VsdCkKLSAgICBhYm9ydCAoKTsKLSAgaWYgKGdsb2JhbF9jb3VudCAhPSBjb3VudCkKLSAgICBhYm9ydCAoKTsKKyAgaWYgKGZjbG9zZSAoaW5wdXQpKQorICAgIHBlcnJvciAoImZjbG9zZSIpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOwogICByZXR1cm4gc3RhdHVzOwogfQogX0FURU9GCkBAIC0zNDMwNyw1NSArODk4MDIsMTUxIEBACiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkyOiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgotZWNobyBjYWxjLmF0OjU5MiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gY2FsYy5jIGNhbGMueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5MjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ1OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjQ1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueSIgImNhbGMuYXQ6NjQ1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ1OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2NDUiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjQ1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDU6IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAotICAgJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MjogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBcJExJQlMiCi1lY2hvIGNhbGMuYXQ6NTkyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImNhbGMuYXQ6NjQ1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUyIgImNhbGMuYXQ6NjQ1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDU6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5jCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjY0NSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5jCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCiAKIAogIyBUZXN0IHRoZSBwcmlvcml0aWVzLgpAQCAtMzQzNzUsNjIgKzg5OTY2LDY2IEBACiAoMl4yKV4zID0gNjQKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkyOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTkyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDU6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQ1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAKICMgU29tZSBzeW50YXggZXJyb3JzLgogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0wIDAKKzEgMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTI6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1OTIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDUiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMzQ0NDEsMTggKzkwMDM2LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0zNDQ2Miw2MCArOTAwNTksNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1OTIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMS8vMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTI6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1OTIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDUiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMzQ1MjYsMTggKzkwMTEzLDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0zNDU0Nyw2MCArOTAxMzYsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1OTIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogZXJyb3IKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkyOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTkyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDU6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQ1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTM0NjExLDE4ICs5MDE5MCwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0zNDYzMiw2MCArOTAyMTMsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1OTIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMSA9IDIgPSAzCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MjogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU5MiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5MjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ1OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY0NSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ1OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ1IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0zNDY5NiwxOCArOTAyNjcsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworMS43OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTM0NzE3LDMwICs5MDI5MCwxOCBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkyOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU5MiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ1OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDUiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCkBAIC0zNDc0OCwzMCArOTAzMDksMzIgQEAKICsxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MjogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU5MiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5MjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ1OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY0NSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ1OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ1IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0zNDc4MiwxOCArOTAzNDUsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTIuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTM0ODAzLDU3ICs5MDM2OCw0NyBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkyOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU5MiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ1OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDUiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MjogXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKLWVjaG8gY2FsYy5hdDo1OTIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDU6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo2NDUiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTM0ODY0LDE4ICs5MDQxOSwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMzQ4ODUsMzAgKzkwNDQyLDE4IEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTI6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTkyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5MjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDU6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKQEAgLTM0OTIzLDggKzkwNDY4LDggQEAKICMKICMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCiAjCi0jIC0gY2hlY2sgdGhlIGxvb2stYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCi0jICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZQorIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCiAjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKICMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCiAjCkBAIC0zNDkzMiwzMCArOTA0NzcsMzIgQEAKICgpICsgKDEgKyAxICsgMSArKSArICgqICogKikgKyAoMSAqIDIgKiAqKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkyOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTkyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDU6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQ1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTM0OTY2LDIxICs5MDUxMywyMyBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjE3OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjIyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjQwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKIGNhbGM6IGVycm9yOiA0NDQ0ICE9IDEKIF9BVEVPRgogCkBAIC0zNDk5MSw2MyArOTA1NDAsNTMgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1OTIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAogIyBUaGUgc2FtZSwgYnV0IHRoaXMgdGltZSBleGVyY2lzaW5nIGV4cGxpY2l0bHkgdHJpZ2dlcmVkIHN5bnRheCBlcnJvcnMuCi0jIFBPU0lYIHNheXMgdGhlIGxvb2stYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCisjIFBPU0lYIHNheXMgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotKCEpICsgKDAgMCkgPSAxCisoISkgKyAoMSAyKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkyOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTkyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDU6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQ1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTM1MDU4LDE4ICs5MDU5NywyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS45OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCiBfQVRFT0YKIApAQCAtMzUwODAsNjAgKzkwNjIxLDUwIEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTI6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTkyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5MjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDU6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLSgtICopICsgKDAgMCkgPSAxCisoLSAqKSArICgxIDIpID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTI6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1OTIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDUiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMzUxNDQsMTkgKzkwNjc1LDIxIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogY2FsYzogZXJyb3I6IDIyMjIgIT0gMQogX0FURU9GCiAKQEAgLTM1MTY3LDk0ICs5MDcwMCwxMTcgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1OTIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDU6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQogCi0kYXRfdHJhY2VvbgorCisjIENoZWNrIHRoYXQgeXllcnJvayB3b3JrcyBwcm9wZXJseTogc2Vjb25kIGVycm9yIGlzIG5vdCByZXBvcnRlZCwKKyMgdGhpcmQgYW5kIGZvdXJ0aCBhcmUuICBQYXJzZSBzdGF0dXMgaXMgc3VjY2VzZnVsbC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCogKikgKyAoKikgKyAoKikKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDU6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQ1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE2OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KK3NlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ1OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDUiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICA5MCApICMgOTAuIGNhbGMuYXQ6NTkzOiBDYWxjdWxhdG9yICVnbHItcGFyc2VyICVlcnJvci12ZXJib3NlCi0gICAgYXRfc2V0dXBfbGluZT0nY2FsYy5hdDo1OTMnCi0gICAgYXRfZGVzYz0nQ2FsY3VsYXRvciAlZ2xyLXBhcnNlciAlZXJyb3ItdmVyYm9zZScKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDkwOiBDYWxjdWxhdG9yICVnbHItcGFyc2VyICVlcnJvci12ZXJib3NlICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiOTAuIGNhbGMuYXQ6NTkzOiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCi0KLQotCi0KLQotCi0KLQotIyBVc2luZyB5YWNjLmM/Ci0KLQotCi0KLQotCi0KLSMgeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWYgJWxvY2F0aW9uICYgJXB1cmUgJiAoJWdsciBvciAlcGFyc2UtcGFyYW0pLgotCi0jIHl5ZXJyb3IgYWx3YXlzIHNlZXMgdGhlIGxvY2F0aW9ucyAod2hlbiBhY3RpdmF0ZWQpLCBleGNlcHQgaWYKLSMgeWFjYyAmIHB1cmUgJiAhcGFyYW0uCi0KLQotIyBUaGUgaW50ZXJmYWNlIGlzIHB1cmU6IGVpdGhlciBiZWNhdXNlICVwdXJlLXBhcnNlciwgb3IgYmVjYXVzZSB3ZQotIyBhcmUgdXNpbmcgdGhlIEMrKyBwYXJzZXJzLgotCi0KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjI0CisjQVRfU1RBUlRfMjI1CithdF9mbl9ncm91cF9iYW5uZXIgMjI1ICdjYWxjLmF0OjY0NicgXAorICAiQ2FsY3VsYXRvciAlZ2xyLXBhcnNlciAlZXJyb3ItdmVyYm9zZSIgIiAgICAgICAgICAiIDEyCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjI1LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogCkBAIC0zNTI2Niw1OSArOTA4MjIsNTIgQEAKIAogCiBjYXQgPmNhbGMueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKIC8qIEluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3ItLWNhbGMgKi8KICVnbHItcGFyc2VyICVlcnJvci12ZXJib3NlCiAKLSV7Ci0jaW5jbHVkZSA8c3RkaW8uaD4KKyVjb2RlIHJlcXVpcmVzCit7CiAKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpZiBIQVZFX1VOSVNURF9ICi0jIGluY2x1ZGUgPHVuaXN0ZC5oPgotI2Vsc2UKLSMgdW5kZWYgYWxhcm0KLSMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCi0jZW5kaWYKLSNpbmNsdWRlIDxjdHlwZS5oPgotI2RlZmluZSBVU0UoVmFyKQotCi0vKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLwotdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Ci0KLXN0YXRpYyBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKLXN0YXRpYyBpbnQgZ2xvYmFsX2NvdW50ID0gMDsKLSV9CisgIC8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCisgIHR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOworfQogCiAvKiBFeGVyY2lzZSAldW5pb24uICovCiAldW5pb24KIHsKICAgc2VtYW50aWNfdmFsdWUgaXZhbDsKIH07CislcHJpbnRlciB7IGZwcmludGYgKHl5b3V0cHV0LCAiJWQiLCAkJCk7IH0gPGl2YWw+OwogCi0leworJWNvZGUgcHJvdmlkZXMKK3sKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIC8qIFRoZSBpbnB1dC4gICovCisgIGV4dGVybiBGSUxFICppbnB1dDsKKyAgZXh0ZXJuIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQ7CisgIGV4dGVybiBpbnQgZ2xvYmFsX2NvdW50OworfQorCislY29kZQoreworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2RlZmluZSBVU0UoVmFyKQorCitGSUxFICppbnB1dDsKIHN0YXRpYyBpbnQgcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpOwotLyogeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWY6Ci0gICAtICVsb2NhdGlvbiAmICVwdXJlICYgJWdscgotICAgLSAlbG9jYXRpb24gJiAlcHVyZSAmICV5YWNjICYgJXBhcnNlLXBhcmFtLiAqLwotc3RhdGljIHZvaWQgeXllcnJvciAoCiAKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMKLSAgICAgICAgICAgICAgICAgICAgICk7Ci1zdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKLXN0YXRpYyBpbnQgZ2V0X2NoYXIgKHZvaWQpOwotc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoIGludCBjKTsKLSV9CitzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKK2ludCB5eWxleCAodm9pZCk7Cit9CiAKIAogCkBAIC0zNTMyNyw3ICs5MDg3Niw3IEBACiAldG9rZW4gPGl2YWw+IE5VTSAibnVtYmVyIgogJXR5cGUgIDxpdmFsPiBleHAKIAotJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uCSAgICAgICAqLworJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uICAgICAgICAgICAgKi8KICVsZWZ0ICctJyAnKycKICVsZWZ0ICcqJyAnLycKICVsZWZ0IE5FRyAgICAgLyogbmVnYXRpb24tLXVuYXJ5IG1pbnVzICovCkBAIC0zNTM2MCwyNSArOTA5MDksMzYgQEAKIHwgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSAtJDI7ICAgICAgICAgICAgfQogfCBleHAgJ14nIGV4cCAgICAgICAgeyAkJCA9IHBvd2VyICgkMSwgJDMpOyB9CiB8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgIH0KLXwgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyAgICAgICAgICAgfQorfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7IHl5ZXJyb2s7ICB9CiB8ICchJyAgICAgICAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KIHwgJy0nIGVycm9yICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQogOwogJSUKLS8qIFRoZSBpbnB1dC4gICovCi1zdGF0aWMgRklMRSAqaW5wdXQ7CiAKLXN0YXRpYyB2b2lkCi15eWVycm9yICgKLQotICAgICAgICAgY29uc3QgY2hhciAqcykKK3N0YXRpYyBpbnQKK3Bvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQogewotCi0KLSAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIHMpOworICBpbnQgcmVzID0gMTsKKyAgYXNzZXJ0ICgwIDw9IGV4cG9uZW50KTsKKyAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQorICAgIHJlcyAqPSBiYXNlOworICByZXR1cm4gcmVzOwogfQogCiAKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworaW50IHl5bGV4ICh2b2lkKTsKK3N0YXRpYyBpbnQgZ2V0X2NoYXIgKHZvaWQpOworc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoIGludCBjKTsKKwogCiBzdGF0aWMgaW50CiBnZXRfY2hhciAodm9pZCkKQEAgLTM1Mzg5LDcgKzkwOTQ5LDYgQEAKICAgcmV0dXJuIHJlczsKIH0KIAotCiBzdGF0aWMgdm9pZAogdW5nZXRfY2hhciAoIGludCBjKQogewpAQCAtMzU0MjQsMzIgKzkwOTgzLDIxIEBACiB9CiAKIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgTGV4aWNhbCBhbmFseXplciByZXR1cm5zIGFuIGludGVnZXIgb24gdGhlIHN0YWNrIGFuZCB0aGUgdG9rZW4gfAogfCBOVU0sIG9yIHRoZSBBU0NJSSBjaGFyYWN0ZXIgcmVhZCBpZiBub3QgYSBudW1iZXIuICBTa2lwcyBhbGwgICB8CiB8IGJsYW5rcyBhbmQgdGFicywgcmV0dXJucyAwIGZvciBFT0YuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50Ci15eWxleCAodm9pZCkKK2ludCB5eWxleCAodm9pZCkKIHsKLSAgc3RhdGljIGludCBpbml0ID0gMTsKICAgaW50IGM7Ci0KLSAgaWYgKGluaXQpCi0gICAgewotICAgICAgaW5pdCA9IDA7Ci0KLSAgICB9Ci0KLQotCi0gIC8qIFNraXAgd2hpdGUgc3BhY2UuICAqLwotICB3aGlsZSAoKGMgPSBnZXRfY2hhciAoKSkgPT0gJyAnIHx8IGMgPT0gJ1x0JykKKyAgLyogU2tpcCBjdXJyZW50IHRva2VuLCB0aGVuIHdoaXRlIHNwYWNlcy4gICovCisgIGRvCiAgICAgewogCiAgICAgfQorICB3aGlsZSAoKGMgPSBnZXRfY2hhciAoKSkgPT0gJyAnIHx8IGMgPT0gJ1x0Jyk7CiAKICAgLyogcHJvY2VzcyBudW1iZXJzICAgKi8KICAgaWYgKGMgPT0gJy4nIHx8IGlzZGlnaXQgKGMpKQpAQCAtMzU0NjcsMTggKzkxMDE1LDIwIEBACiAgIHJldHVybiBjOwogfQogCi1zdGF0aWMgaW50Ci1wb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKLXsKLSAgaW50IHJlcyA9IDE7Ci0gIGlmIChleHBvbmVudCA8IDApCi0gICAgZXhpdCAoMyk7Ci0gIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKLSAgICByZXMgKj0gYmFzZTsKLSAgcmV0dXJuIHJlczsKLX0KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2Vsc2UKKyMgdW5kZWYgYWxhcm0KKyMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCisjZW5kaWYKIAogCisKK3NlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOworaW50IGdsb2JhbF9jb3VudCA9IDA7CisKKy8qIEEgQyBtYWluIGZ1bmN0aW9uLiAgKi8KIGludAogbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewpAQCAtMzU1MDQsMTAgKzkxMDU0LDEwIEBACiAKIAogICBzdGF0dXMgPSB5eXBhcnNlICgpOwotICBpZiAoZ2xvYmFsX3Jlc3VsdCAhPSByZXN1bHQpCi0gICAgYWJvcnQgKCk7Ci0gIGlmIChnbG9iYWxfY291bnQgIT0gY291bnQpCi0gICAgYWJvcnQgKCk7CisgIGlmIChmY2xvc2UgKGlucHV0KSkKKyAgICBwZXJyb3IgKCJmY2xvc2UiKTsKKyAgYXNzZXJ0IChnbG9iYWxfcmVzdWx0ID09IHJlc3VsdCk7CisgIGFzc2VydCAoZ2xvYmFsX2NvdW50ID09IGNvdW50KTsKICAgcmV0dXJuIHN0YXR1czsKIH0KIF9BVEVPRgpAQCAtMzU1MTYsNTUgKzkxMDY2LDE1MSBAQAogCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MzogYmlzb24gLW8gY2FsYy5jIGNhbGMueSIKLWVjaG8gY2FsYy5hdDo1OTMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjY0NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiICJjYWxjLmF0OjY0NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjQ2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDY6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjY0NiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2OiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDYiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSAgICRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTM6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgXCRMSUJTIgotZWNobyBjYWxjLmF0OjU5MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jICRMSUJTICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisgICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDY6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJjYWxjLmF0OjY0NiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDY6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgJExJQlMiICJjYWxjLmF0OjY0NiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2OiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuYworIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2NDYiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuYworCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKwogCiAKICMgVGVzdCB0aGUgcHJpb3JpdGllcy4KQEAgLTM1NTg0LDYyICs5MTIzMCw2NiBAQAogKDJeMileMyA9IDY0CiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MzogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU5MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY0NiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ2IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogCiAjIFNvbWUgc3ludGF4IGVycm9ycy4KIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotMCAwCisxIDIKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkzOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTkzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDY6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQ2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDY6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDYiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTM1NjUwLDE4ICs5MTMwMCwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMzU2NzAsNjAgKzkxMzIyLDUwIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkzOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU5MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDYiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiAxLy8yCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MzogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU5MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY0NiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ2IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0zNTczNCwxOCArOTEzNzYsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJy8nLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTM1NzU0LDYwICs5MTM5OCw1MCBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MzogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1OTMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NjogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ2IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogZXJyb3IKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkzOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTkzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDY6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQ2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDY6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDYiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTM1ODE4LDE4ICs5MTQ1MiwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0zNTgzOCw2MCArOTE0NzQsNTAgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTM6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTkzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDY6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKIDEgPSAyID0gMwogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTM6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1OTMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NjogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDYiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0Njogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMzU5MDIsMTggKzkxNTI4LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjY6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPScKKzEuNzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0zNTkyMiwzMCArOTE1NTAsMTggQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTM6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTkzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDY6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKQEAgLTM1OTUzLDMwICs5MTU2OSwzMiBAQAogKzEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkzOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTkzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDY6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQ2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDY6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDYiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTM1OTg3LDE4ICs5MTYwNSwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMi4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCisyLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKycKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMzYwMDcsNTcgKzkxNjI3LDQ3IEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkzOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU5MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDYiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MzogXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKLWVjaG8gY2FsYy5hdDo1OTMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTkzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDY6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo2NDYiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDY6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDYiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTM2MDY4LDE4ICs5MTY3OCwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMzYwODgsMzAgKzkxNzAwLDE4IEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkzOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU5MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDYiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCkBAIC0zNjEyNiw4ICs5MTcyNiw4IEBACiAjCiAjIC0gdGVzdCB0aGUgYWN0aW9uIGFzc29jaWF0ZWQgdG8gYGVycm9yJwogIwotIyAtIGNoZWNrIHRoZSBsb29rLWFoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAotIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2stYWhlYWQgY2F1c2luZyB0aGUKKyMgLSBjaGVjayB0aGUgbG9va2FoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAorIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZQogIyAgIGZpcnN0IGVycm9yIGlzICIpIiwgd2hpY2ggaXMgbmVlZGVkIHRvIHJlY292ZXIgZnJvbSB0aGUgZXJyb3IgYW5kCiAjICAgcHJvZHVjZSB0aGUgIjAiIHRoYXQgdHJpZ2dlcnMgdGhlICIwICE9IDEiIGVycm9yLgogIwpAQCAtMzYxMzUsMzAgKzkxNzM1LDMyIEBACiAoKSArICgxICsgMSArIDEgKykgKyAoKiAqICopICsgKDEgKiAyICogKikgPSAxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5MzogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU5MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY0NiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ2IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0zNjE2OSwyMSArOTE3NzEsMjMgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwotMS4xNzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwotMS4yMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwotMS40MDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjIzOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjQxOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCiBjYWxjOiBlcnJvcjogNDQ0NCAhPSAxCiBfQVRFT0YKIApAQCAtMzYxOTMsNjMgKzkxNzk3LDUzIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTkzOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU5MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDYiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAjIFRoZSBzYW1lLCBidXQgdGhpcyB0aW1lIGV4ZXJjaXNpbmcgZXhwbGljaXRseSB0cmlnZ2VyZWQgc3ludGF4IGVycm9ycy4KLSMgUE9TSVggc2F5cyB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KKyMgUE9TSVggc2F5cyB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0oISkgKyAoMCAwKSA9IDEKKyghKSArICgxIDIpID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTM6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1OTMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NjogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDYiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0Njogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMzYyNjAsMTggKzkxODU0LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjk6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKIGNhbGM6IGVycm9yOiAyMjIyICE9IDEKIF9BVEVPRgogCkBAIC0zNjI4MSw2MCArOTE4NzcsNTAgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTM6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTkzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDY6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLSgtICopICsgKDAgMCkgPSAxCisoLSAqKSArICgxIDIpID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTM6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1OTMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NjogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDYiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0Njogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMzYzNDUsMTkgKzkxOTMxLDIxIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogY2FsYzogZXJyb3I6IDIyMjIgIT0gMQogX0FURU9GCiAKQEAgLTM2MzY3LDk0ICs5MTk1NSwxMTYgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTM6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTkzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDYiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKIAotJGF0X3RyYWNlb24KKworIyBDaGVjayB0aGF0IHl5ZXJyb2sgd29ya3MgcHJvcGVybHk6IHNlY29uZCBlcnJvciBpcyBub3QgcmVwb3J0ZWQsCisjIHRoaXJkIGFuZCBmb3VydGggYXJlLiAgUGFyc2Ugc3RhdHVzIGlzIHN1Y2Nlc2Z1bGwuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygqICopICsgKCopICsgKCopCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY0NiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ2OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ2IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCitzZWQgJ3MvXlstMC05Ll0qOiAvLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0NjogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ2IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAogCiAKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Ci0KLSAgOTEgKSAjIDkxLiBjYWxjLmF0OjU5NTogQ2FsY3VsYXRvciAlZ2xyLXBhcnNlciAlcHVyZS1wYXJzZXIgJWxvY2F0aW9ucwotICAgIGF0X3NldHVwX2xpbmU9J2NhbGMuYXQ6NTk1JwotICAgIGF0X2Rlc2M9J0NhbGN1bGF0b3IgJWdsci1wYXJzZXIgJXB1cmUtcGFyc2VyICVsb2NhdGlvbnMnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiA5MTogQ2FsY3VsYXRvciAlZ2xyLXBhcnNlciAlcHVyZS1wYXJzZXIgJWxvY2F0aW9ucyRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICI5MS4gY2FsYy5hdDo1OTU6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KLQotCi0KLQotCi0KLQotCi0jIFVzaW5nIHlhY2MuYz8KLQotCi0KLQotCi0KLQotIyB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZiAlbG9jYXRpb24gJiAlcHVyZSAmICglZ2xyIG9yICVwYXJzZS1wYXJhbSkuCi0KLSMgeXllcnJvciBhbHdheXMgc2VlcyB0aGUgbG9jYXRpb25zICh3aGVuIGFjdGl2YXRlZCksIGV4Y2VwdCBpZgotIyB5YWNjICYgcHVyZSAmICFwYXJhbS4KLQotCi0jIFRoZSBpbnRlcmZhY2UgaXMgcHVyZTogZWl0aGVyIGJlY2F1c2UgJXB1cmUtcGFyc2VyLCBvciBiZWNhdXNlIHdlCi0jIGFyZSB1c2luZyB0aGUgQysrIHBhcnNlcnMuCi0KLQorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yMjUKKyNBVF9TVEFSVF8yMjYKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyMjYgJ2NhbGMuYXQ6NjQ4JyBcCisgICJDYWxjdWxhdG9yICVnbHItcGFyc2VyICVkZWZpbmUgYXBpLnB1cmUgJWxvY2F0aW9ucyIgIiIgMTIKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyMjYuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiAKQEAgLTM2NDY2LDU5ICs5MjA3Niw1MiBAQAogCiAKIGNhdCA+Y2FsYy55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogLyogSW5maXggbm90YXRpb24gY2FsY3VsYXRvci0tY2FsYyAqLwotJWdsci1wYXJzZXIgJXB1cmUtcGFyc2VyICVsb2NhdGlvbnMKKyVnbHItcGFyc2VyICVkZWZpbmUgYXBpLnB1cmUgJWxvY2F0aW9ucwogCi0lewotI2luY2x1ZGUgPHN0ZGlvLmg+CislY29kZSByZXF1aXJlcworewogCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaWYgSEFWRV9VTklTVERfSAotIyBpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbHNlCi0jIHVuZGVmIGFsYXJtCi0jIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLwotI2VuZGlmCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNkZWZpbmUgVVNFKFZhcikKLQotLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KLXR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOwotCi1zdGF0aWMgc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7Ci1zdGF0aWMgaW50IGdsb2JhbF9jb3VudCA9IDA7Ci0lfQorICAvKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLworICB0eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKK30KIAogLyogRXhlcmNpc2UgJXVuaW9uLiAqLwogJXVuaW9uCiB7CiAgIHNlbWFudGljX3ZhbHVlIGl2YWw7CiB9OworJXByaW50ZXIgeyBmcHJpbnRmICh5eW91dHB1dCwgIiVkIiwgJCQpOyB9IDxpdmFsPjsKIAotJXsKKyVjb2RlIHByb3ZpZGVzCit7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICAvKiBUaGUgaW5wdXQuICAqLworICBleHRlcm4gRklMRSAqaW5wdXQ7CisgIGV4dGVybiBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0OworICBleHRlcm4gaW50IGdsb2JhbF9jb3VudDsKK30KKworJWNvZGUKK3sKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNkZWZpbmUgVVNFKFZhcikKKworRklMRSAqaW5wdXQ7CiBzdGF0aWMgaW50IHBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KTsKLS8qIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmOgotICAgLSAlbG9jYXRpb24gJiAlcHVyZSAmICVnbHIKLSAgIC0gJWxvY2F0aW9uICYgJXB1cmUgJiAleWFjYyAmICVwYXJzZS1wYXJhbS4gKi8KLXN0YXRpYyB2b2lkIHl5ZXJyb3IgKFlZTFRZUEUgKmxsb2NwLAogCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzCi0gICAgICAgICAgICAgICAgICAgICApOwotc3RhdGljIGludCB5eWxleCAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKTsKLXN0YXRpYyBpbnQgZ2V0X2NoYXIgKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCk7Ci1zdGF0aWMgdm9pZCB1bmdldF9jaGFyIChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3AsICBpbnQgYyk7Ci0lfQorc3RhdGljIHZvaWQgeXllcnJvciAoWVlMVFlQRSBjb25zdCAqIGNvbnN0IGxsb2NwLCAgY29uc3QgY2hhciAqbXNnKTsKK2ludCB5eWxleCAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKTsKK30KIAogCiAKQEAgLTM2NTI3LDcgKzkyMTMwLDcgQEAKICV0b2tlbiA8aXZhbD4gTlVNICJudW1iZXIiCiAldHlwZSAgPGl2YWw+IGV4cAogCi0lbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24JICAgICAgICovCislbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24gICAgICAgICAgICAqLwogJWxlZnQgJy0nICcrJwogJWxlZnQgJyonICcvJwogJWxlZnQgTkVHICAgICAvKiBuZWdhdGlvbi0tdW5hcnkgbWludXMgKi8KQEAgLTM2NTYwLDM0ICs5MjE2MywzOCBAQAogfCAnLScgZXhwICAlcHJlYyBORUcgeyAkJCA9IC0kMjsgICAgICAgICAgICB9CiB8IGV4cCAnXicgZXhwICAgICAgICB7ICQkID0gcG93ZXIgKCQxLCAkMyk7IH0KIHwgJygnIGV4cCAnKScgICAgICAgIHsgJCQgPSAkMjsgICAgICAgICAgICAgfQotfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7ICAgICAgICAgICB9Cit8ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgeXllcnJvazsgIH0KIHwgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQogfCAnLScgZXJyb3IgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9CiA7CiAlJQotLyogVGhlIGlucHV0LiAgKi8KLXN0YXRpYyBGSUxFICppbnB1dDsKIAotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKFlZTFRZUEUgKmxsb2NwLAotCi0gICAgICAgICBjb25zdCBjaGFyICpzKQorc3RhdGljIGludAorcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpCiB7Ci0KLQotICBmcHJpbnRmIChzdGRlcnIsICIlZC4lZCIsCi0gICAgICAgICAgICgqbGxvY3ApLmZpcnN0X2xpbmUsICgqbGxvY3ApLmZpcnN0X2NvbHVtbik7Ci0gIGlmICgoKmxsb2NwKS5maXJzdF9saW5lICE9ICgqbGxvY3ApLmxhc3RfbGluZSkKLSAgICBmcHJpbnRmIChzdGRlcnIsICItJWQuJWQiLAotCSAgICAgKCpsbG9jcCkubGFzdF9saW5lLCAgKCpsbG9jcCkubGFzdF9jb2x1bW4gLSAxKTsKLSAgZWxzZSBpZiAoKCpsbG9jcCkuZmlyc3RfY29sdW1uICE9ICgqbGxvY3ApLmxhc3RfY29sdW1uIC0gMSkKLSAgICBmcHJpbnRmIChzdGRlcnIsICItJWQiLAotCSAgICAgKCpsbG9jcCkubGFzdF9jb2x1bW4gLSAxKTsKLSAgZnByaW50ZiAoc3RkZXJyLCAiOiAiKTsKLSAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIHMpOworICBpbnQgcmVzID0gMTsKKyAgYXNzZXJ0ICgwIDw9IGV4cG9uZW50KTsKKyAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQorICAgIHJlcyAqPSBiYXNlOworICByZXR1cm4gcmVzOwogfQogCiAKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoWVlMVFlQRSBjb25zdCAqIGNvbnN0IGxsb2NwLCAgY29uc3QgY2hhciAqbXNnKQoreworICBZWV9MT0NBVElPTl9QUklOVCAoc3RkZXJyLCAoKmxsb2NwKSk7CisgIGZwcmludGYgKHN0ZGVyciwgIjogIik7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorI2luY2x1ZGUgPGN0eXBlLmg+CisKK2ludCB5eWxleCAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKTsKK3N0YXRpYyBpbnQgZ2V0X2NoYXIgKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCk7CitzdGF0aWMgdm9pZCB1bmdldF9jaGFyIChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3AsICBpbnQgYyk7CisKIAogc3RhdGljIFlZTFRZUEUgbGFzdF95eWxsb2M7CiAKQEAgLTM2NjAxLDcgKzkyMjA4LDcgQEAKICAgaWYgKHJlcyA9PSAnXG4nKQogICAgIHsKICAgICAgICgqbGxvY3ApLmxhc3RfbGluZSsrOwotICAgICAgKCpsbG9jcCkubGFzdF9jb2x1bW4gPSAwOworICAgICAgKCpsbG9jcCkubGFzdF9jb2x1bW4gPSAxOwogICAgIH0KICAgZWxzZQogICAgICgqbGxvY3ApLmxhc3RfY29sdW1uKys7CkBAIC0zNjYwOSw3ICs5MjIxNiw2IEBACiAgIHJldHVybiByZXM7CiB9CiAKLQogc3RhdGljIHZvaWQKIHVuZ2V0X2NoYXIgKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCwgIGludCBjKQogewpAQCAtMzY2NDcsNDAgKzkyMjUzLDIzIEBACiB9CiAKIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgTGV4aWNhbCBhbmFseXplciByZXR1cm5zIGFuIGludGVnZXIgb24gdGhlIHN0YWNrIGFuZCB0aGUgdG9rZW4gfAogfCBOVU0sIG9yIHRoZSBBU0NJSSBjaGFyYWN0ZXIgcmVhZCBpZiBub3QgYSBudW1iZXIuICBTa2lwcyBhbGwgICB8CiB8IGJsYW5rcyBhbmQgdGFicywgcmV0dXJucyAwIGZvciBFT0YuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50Ci15eWxleCAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKQoraW50IHl5bGV4IChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApCiB7Ci0gIHN0YXRpYyBpbnQgaW5pdCA9IDE7CiAgIGludCBjOwotCi0gIGlmIChpbml0KQotICAgIHsKLSAgICAgIGluaXQgPSAwOwotCi0gICAgICAoKmxsb2NwKS5sYXN0X2NvbHVtbiA9IDA7Ci0gICAgICAoKmxsb2NwKS5sYXN0X2xpbmUgPSAxOwotCi0gICAgfQotCi0KLSAoKmxsb2NwKS5maXJzdF9jb2x1bW4gPSAoKmxsb2NwKS5sYXN0X2NvbHVtbjsKLSAgKCpsbG9jcCkuZmlyc3RfbGluZSAgID0gKCpsbG9jcCkubGFzdF9saW5lOwotCi0KLSAgLyogU2tpcCB3aGl0ZSBzcGFjZS4gICovCi0gIHdoaWxlICgoYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApKSA9PSAnICcgfHwgYyA9PSAnXHQnKQorICAvKiBTa2lwIGN1cnJlbnQgdG9rZW4sIHRoZW4gd2hpdGUgc3BhY2VzLiAgKi8KKyAgZG8KICAgICB7CiAgICAgICgqbGxvY3ApLmZpcnN0X2NvbHVtbiA9ICgqbGxvY3ApLmxhc3RfY29sdW1uOwogICAgICAgKCpsbG9jcCkuZmlyc3RfbGluZSAgID0gKCpsbG9jcCkubGFzdF9saW5lOwogCiAgICAgfQorICB3aGlsZSAoKGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKSkgPT0gJyAnIHx8IGMgPT0gJ1x0Jyk7CiAKICAgLyogcHJvY2VzcyBudW1iZXJzICAgKi8KICAgaWYgKGMgPT0gJy4nIHx8IGlzZGlnaXQgKGMpKQpAQCAtMzY2OTgsMTggKzkyMjg3LDIwIEBACiAgIHJldHVybiBjOwogfQogCi1zdGF0aWMgaW50Ci1wb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKLXsKLSAgaW50IHJlcyA9IDE7Ci0gIGlmIChleHBvbmVudCA8IDApCi0gICAgZXhpdCAoMyk7Ci0gIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKLSAgICByZXMgKj0gYmFzZTsKLSAgcmV0dXJuIHJlczsKLX0KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2Vsc2UKKyMgdW5kZWYgYWxhcm0KKyMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCisjZW5kaWYKIAogCisKK3NlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOworaW50IGdsb2JhbF9jb3VudCA9IDA7CisKKy8qIEEgQyBtYWluIGZ1bmN0aW9uLiAgKi8KIGludAogbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewpAQCAtMzY3MzUsMTAgKzkyMzI2LDEwIEBACiAKIAogICBzdGF0dXMgPSB5eXBhcnNlICgpOwotICBpZiAoZ2xvYmFsX3Jlc3VsdCAhPSByZXN1bHQpCi0gICAgYWJvcnQgKCk7Ci0gIGlmIChnbG9iYWxfY291bnQgIT0gY291bnQpCi0gICAgYWJvcnQgKCk7CisgIGlmIChmY2xvc2UgKGlucHV0KSkKKyAgICBwZXJyb3IgKCJmY2xvc2UiKTsKKyAgYXNzZXJ0IChnbG9iYWxfcmVzdWx0ID09IHJlc3VsdCk7CisgIGFzc2VydCAoZ2xvYmFsX2NvdW50ID09IGNvdW50KTsKICAgcmV0dXJuIHN0YXR1czsKIH0KIF9BVEVPRgpAQCAtMzY3NDcsNTUgKzkyMzM4LDE1MSBAQAogCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5NTogYmlzb24gLW8gY2FsYy5jIGNhbGMueSIKLWVjaG8gY2FsYy5hdDo1OTUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjY0OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiICJjYWxjLmF0OjY0OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjY0OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4OiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSAgICRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTU6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgXCRMSUJTIgotZWNobyBjYWxjLmF0OjU5NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jICRMSUJTICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTk1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisgICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDg6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJjYWxjLmF0OjY0OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDg6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgJExJQlMiICJjYWxjLmF0OjY0OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4OiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuYworIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2NDgiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuYworCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKwogCiAKICMgVGVzdCB0aGUgcHJpb3JpdGllcy4KQEAgLTM2ODE1LDYyICs5MjUwMiw2NiBAQAogKDJeMileMyA9IDY0CiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5NTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU5NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY0OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogCiAjIFNvbWUgc3ludGF4IGVycm9ycy4KIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotMCAwCisxIDIKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTk1OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTk1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTk1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTM2ODgxLDE4ICs5MjU3MiwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMzY5MDEsNjAgKzkyNTk0LDUwIEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTU6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTk1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDg6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKIDEvLzIKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTk1OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTk1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTk1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTM2OTY1LDE4ICs5MjY0OCwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJy8nLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMzY5ODUsNjAgKzkyNjcwLDUwIEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTU6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTk1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDg6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKIGVycm9yCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5NTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU5NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY0OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0zNzA0OSwxOCArOTI3MjQsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICR1bmRlZmluZWQKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICR1bmRlZmluZWQKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMzcwNjksNjAgKzkyNzQ2LDUwIEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTU6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTk1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDg6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKIDEgPSAyID0gMwogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTU6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1OTUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0ODogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDgiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0ODogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMzcxMzMsMTggKzkyODAwLDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjY6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPScKKzEuNzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0zNzE1MywzMCArOTI4MjIsMTggQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5NTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1OTUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTk1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0ODogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwpAQCAtMzcxODQsMzAgKzkyODQxLDMyIEBACiArMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTU6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1OTUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0ODogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDgiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0ODogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMzcyMTgsMTggKzkyODc3LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0yLjA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKycKKzIuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0zNzIzOCw1NyArOTI4OTksNDcgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5NTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1OTUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTk1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0ODogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKICMgRXhlcmNpc2UgZXJyb3IgbWVzc2FnZXMgd2l0aCBFT0Y6IHdvcmsgb24gYW4gZW1wdHkgZmlsZS4KLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTU6IFwkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiCi1lY2hvIGNhbGMuYXQ6NTk1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIgImNhbGMuYXQ6NjQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0zNzI5OSwxOCArOTI5NTAsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTM3MzE5LDMwICs5Mjk3MiwxOCBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTk1OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU5NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDgiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCkBAIC0zNzM1Nyw4ICs5Mjk5OCw4IEBACiAjCiAjIC0gdGVzdCB0aGUgYWN0aW9uIGFzc29jaWF0ZWQgdG8gYGVycm9yJwogIwotIyAtIGNoZWNrIHRoZSBsb29rLWFoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAotIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2stYWhlYWQgY2F1c2luZyB0aGUKKyMgLSBjaGVjayB0aGUgbG9va2FoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAorIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZQogIyAgIGZpcnN0IGVycm9yIGlzICIpIiwgd2hpY2ggaXMgbmVlZGVkIHRvIHJlY292ZXIgZnJvbSB0aGUgZXJyb3IgYW5kCiAjICAgcHJvZHVjZSB0aGUgIjAiIHRoYXQgdHJpZ2dlcnMgdGhlICIwICE9IDEiIGVycm9yLgogIwpAQCAtMzczNjYsMzAgKzkzMDA3LDMyIEBACiAoKSArICgxICsgMSArIDEgKykgKyAoKiAqICopICsgKDEgKiAyICogKikgPSAxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5NTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU5NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY0OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0zNzQwMCwyMSArOTMwNDMsMjMgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwotMS4xNzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwotMS4yMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwotMS40MDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjIzOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjQxOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCiBjYWxjOiBlcnJvcjogNDQ0NCAhPSAxCiBfQVRFT0YKIApAQCAtMzc0MjQsNjMgKzkzMDY5LDUzIEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTU6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTk1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDg6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKICMgVGhlIHNhbWUsIGJ1dCB0aGlzIHRpbWUgZXhlcmNpc2luZyBleHBsaWNpdGx5IHRyaWdnZXJlZCBzeW50YXggZXJyb3JzLgotIyBQT1NJWCBzYXlzIHRoZSBsb29rLWFoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgorIyBQT1NJWCBzYXlzIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLSghKSArICgwIDApID0gMQorKCEpICsgKDEgMikgPSAxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5NTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU5NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY0OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0zNzQ5MSwxOCArOTMxMjYsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuOTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS4xMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogY2FsYzogZXJyb3I6IDIyMjIgIT0gMQogX0FURU9GCiAKQEAgLTM3NTEyLDYwICs5MzE0OSw1MCBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTk1OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU5NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDgiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0oLSAqKSArICgwIDApID0gMQorKC0gKikgKyAoMSAyKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTk1OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTk1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTk1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTM3NTc2LDE5ICs5MzIwMywyMSBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjExOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjQ6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKIGNhbGM6IGVycm9yOiAyMjIyICE9IDEKIF9BVEVPRgogCkBAIC0zNzU5OCw5NCArOTMyMjcsMTE2IEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTU6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTk1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDgiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKIAotJGF0X3RyYWNlb24KKworIyBDaGVjayB0aGF0IHl5ZXJyb2sgd29ya3MgcHJvcGVybHk6IHNlY29uZCBlcnJvciBpcyBub3QgcmVwb3J0ZWQsCisjIHRoaXJkIGFuZCBmb3VydGggYXJlLiAgUGFyc2Ugc3RhdHVzIGlzIHN1Y2Nlc2Z1bGwuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygqICopICsgKCopICsgKCopCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY0OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0ODogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAogCiAKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Ci0KLSAgOTIgKSAjIDkyLiBjYWxjLmF0OjU5NjogQ2FsY3VsYXRvciAlZ2xyLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlbG9jYXRpb25zCi0gICAgYXRfc2V0dXBfbGluZT0nY2FsYy5hdDo1OTYnCi0gICAgYXRfZGVzYz0nQ2FsY3VsYXRvciAlZ2xyLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlbG9jYXRpb25zJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgOTI6IENhbGN1bGF0b3IgJWdsci1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWxvY2F0aW9ucyRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICI5Mi4gY2FsYy5hdDo1OTY6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KLQotCi0KLQotCi0KLQotCi0jIFVzaW5nIHlhY2MuYz8KLQotCi0KLQotCi0KLQotIyB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZiAlbG9jYXRpb24gJiAlcHVyZSAmICglZ2xyIG9yICVwYXJzZS1wYXJhbSkuCi0KLSMgeXllcnJvciBhbHdheXMgc2VlcyB0aGUgbG9jYXRpb25zICh3aGVuIGFjdGl2YXRlZCksIGV4Y2VwdCBpZgotIyB5YWNjICYgcHVyZSAmICFwYXJhbS4KLQotCi0jIFRoZSBpbnRlcmZhY2UgaXMgcHVyZTogZWl0aGVyIGJlY2F1c2UgJXB1cmUtcGFyc2VyLCBvciBiZWNhdXNlIHdlCi0jIGFyZSB1c2luZyB0aGUgQysrIHBhcnNlcnMuCi0KLQorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yMjYKKyNBVF9TVEFSVF8yMjcKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyMjcgJ2NhbGMuYXQ6NjQ5JyBcCisgICJDYWxjdWxhdG9yICVnbHItcGFyc2VyICVlcnJvci12ZXJib3NlICVsb2NhdGlvbnMiICIiIDEyCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjI3LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogCkBAIC0zNzY5Nyw1OSArOTMzNDgsNTIgQEAKIAogCiBjYXQgPmNhbGMueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKIC8qIEluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3ItLWNhbGMgKi8KICVnbHItcGFyc2VyICVlcnJvci12ZXJib3NlICVsb2NhdGlvbnMKIAotJXsKLSNpbmNsdWRlIDxzdGRpby5oPgorJWNvZGUgcmVxdWlyZXMKK3sKIAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2lmIEhBVkVfVU5JU1REX0gKLSMgaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZWxzZQotIyB1bmRlZiBhbGFybQotIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KLSNlbmRpZgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jZGVmaW5lIFVTRShWYXIpCi0KLS8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCi10eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKLQotc3RhdGljIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOwotc3RhdGljIGludCBnbG9iYWxfY291bnQgPSAwOwotJX0KKyAgLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KKyAgdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Cit9CiAKIC8qIEV4ZXJjaXNlICV1bmlvbi4gKi8KICV1bmlvbgogewogICBzZW1hbnRpY192YWx1ZSBpdmFsOwogfTsKKyVwcmludGVyIHsgZnByaW50ZiAoeXlvdXRwdXQsICIlZCIsICQkKTsgfSA8aXZhbD47CiAKLSV7CislY29kZSBwcm92aWRlcworeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgLyogVGhlIGlucHV0LiAgKi8KKyAgZXh0ZXJuIEZJTEUgKmlucHV0OworICBleHRlcm4gc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdDsKKyAgZXh0ZXJuIGludCBnbG9iYWxfY291bnQ7Cit9CisKKyVjb2RlCit7CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZGVmaW5lIFVTRShWYXIpCisKK0ZJTEUgKmlucHV0Owogc3RhdGljIGludCBwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCk7Ci0vKiB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZjoKLSAgIC0gJWxvY2F0aW9uICYgJXB1cmUgJiAlZ2xyCi0gICAtICVsb2NhdGlvbiAmICVwdXJlICYgJXlhY2MgJiAlcGFyc2UtcGFyYW0uICovCi1zdGF0aWMgdm9pZCB5eWVycm9yICgKIAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcwotICAgICAgICAgICAgICAgICAgICAgKTsKLXN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOwotc3RhdGljIGludCBnZXRfY2hhciAodm9pZCk7Ci1zdGF0aWMgdm9pZCB1bmdldF9jaGFyICggaW50IGMpOwotJX0KK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworaW50IHl5bGV4ICh2b2lkKTsKK30KIAogCiAKQEAgLTM3NzU4LDcgKzkzNDAyLDcgQEAKICV0b2tlbiA8aXZhbD4gTlVNICJudW1iZXIiCiAldHlwZSAgPGl2YWw+IGV4cAogCi0lbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24JICAgICAgICovCislbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24gICAgICAgICAgICAqLwogJWxlZnQgJy0nICcrJwogJWxlZnQgJyonICcvJwogJWxlZnQgTkVHICAgICAvKiBuZWdhdGlvbi0tdW5hcnkgbWludXMgKi8KQEAgLTM3NzkxLDM0ICs5MzQzNSwzOCBAQAogfCAnLScgZXhwICAlcHJlYyBORUcgeyAkJCA9IC0kMjsgICAgICAgICAgICB9CiB8IGV4cCAnXicgZXhwICAgICAgICB7ICQkID0gcG93ZXIgKCQxLCAkMyk7IH0KIHwgJygnIGV4cCAnKScgICAgICAgIHsgJCQgPSAkMjsgICAgICAgICAgICAgfQotfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7ICAgICAgICAgICB9Cit8ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgeXllcnJvazsgIH0KIHwgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQogfCAnLScgZXJyb3IgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9CiA7CiAlJQotLyogVGhlIGlucHV0LiAgKi8KLXN0YXRpYyBGSUxFICppbnB1dDsKIAotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKAotCi0gICAgICAgICBjb25zdCBjaGFyICpzKQorc3RhdGljIGludAorcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpCiB7Ci0KLQotICBmcHJpbnRmIChzdGRlcnIsICIlZC4lZCIsCi0gICAgICAgICAgICh5eWxsb2MpLmZpcnN0X2xpbmUsICh5eWxsb2MpLmZpcnN0X2NvbHVtbik7Ci0gIGlmICgoeXlsbG9jKS5maXJzdF9saW5lICE9ICh5eWxsb2MpLmxhc3RfbGluZSkKLSAgICBmcHJpbnRmIChzdGRlcnIsICItJWQuJWQiLAotCSAgICAgKHl5bGxvYykubGFzdF9saW5lLCAgKHl5bGxvYykubGFzdF9jb2x1bW4gLSAxKTsKLSAgZWxzZSBpZiAoKHl5bGxvYykuZmlyc3RfY29sdW1uICE9ICh5eWxsb2MpLmxhc3RfY29sdW1uIC0gMSkKLSAgICBmcHJpbnRmIChzdGRlcnIsICItJWQiLAotCSAgICAgKHl5bGxvYykubGFzdF9jb2x1bW4gLSAxKTsKLSAgZnByaW50ZiAoc3RkZXJyLCAiOiAiKTsKLSAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIHMpOworICBpbnQgcmVzID0gMTsKKyAgYXNzZXJ0ICgwIDw9IGV4cG9uZW50KTsKKyAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQorICAgIHJlcyAqPSBiYXNlOworICByZXR1cm4gcmVzOwogfQogCiAKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgWVlfTE9DQVRJT05fUFJJTlQgKHN0ZGVyciwgKHl5bGxvYykpOworICBmcHJpbnRmIChzdGRlcnIsICI6ICIpOworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKyNpbmNsdWRlIDxjdHlwZS5oPgorCitpbnQgeXlsZXggKHZvaWQpOworc3RhdGljIGludCBnZXRfY2hhciAodm9pZCk7CitzdGF0aWMgdm9pZCB1bmdldF9jaGFyICggaW50IGMpOworCiAKIHN0YXRpYyBZWUxUWVBFIGxhc3RfeXlsbG9jOwogCkBAIC0zNzgzMiw3ICs5MzQ4MCw3IEBACiAgIGlmIChyZXMgPT0gJ1xuJykKICAgICB7CiAgICAgICAoeXlsbG9jKS5sYXN0X2xpbmUrKzsKLSAgICAgICh5eWxsb2MpLmxhc3RfY29sdW1uID0gMDsKKyAgICAgICh5eWxsb2MpLmxhc3RfY29sdW1uID0gMTsKICAgICB9CiAgIGVsc2UKICAgICAoeXlsbG9jKS5sYXN0X2NvbHVtbisrOwpAQCAtMzc4NDAsNyArOTM0ODgsNiBAQAogICByZXR1cm4gcmVzOwogfQogCi0KIHN0YXRpYyB2b2lkCiB1bmdldF9jaGFyICggaW50IGMpCiB7CkBAIC0zNzg3OCw0MCArOTM1MjUsMjMgQEAKIH0KIAogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCBMZXhpY2FsIGFuYWx5emVyIHJldHVybnMgYW4gaW50ZWdlciBvbiB0aGUgc3RhY2sgYW5kIHRoZSB0b2tlbiB8CiB8IE5VTSwgb3IgdGhlIEFTQ0lJIGNoYXJhY3RlciByZWFkIGlmIG5vdCBhIG51bWJlci4gIFNraXBzIGFsbCAgIHwKIHwgYmxhbmtzIGFuZCB0YWJzLCByZXR1cm5zIDAgZm9yIEVPRi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQKLXl5bGV4ICh2b2lkKQoraW50IHl5bGV4ICh2b2lkKQogewotICBzdGF0aWMgaW50IGluaXQgPSAxOwogICBpbnQgYzsKLQotICBpZiAoaW5pdCkKLSAgICB7Ci0gICAgICBpbml0ID0gMDsKLQotICAgICAgKHl5bGxvYykubGFzdF9jb2x1bW4gPSAwOwotICAgICAgKHl5bGxvYykubGFzdF9saW5lID0gMTsKLQotICAgIH0KLQotCi0gKHl5bGxvYykuZmlyc3RfY29sdW1uID0gKHl5bGxvYykubGFzdF9jb2x1bW47Ci0gICh5eWxsb2MpLmZpcnN0X2xpbmUgICA9ICh5eWxsb2MpLmxhc3RfbGluZTsKLQotCi0gIC8qIFNraXAgd2hpdGUgc3BhY2UuICAqLwotICB3aGlsZSAoKGMgPSBnZXRfY2hhciAoKSkgPT0gJyAnIHx8IGMgPT0gJ1x0JykKKyAgLyogU2tpcCBjdXJyZW50IHRva2VuLCB0aGVuIHdoaXRlIHNwYWNlcy4gICovCisgIGRvCiAgICAgewogICAgICAoeXlsbG9jKS5maXJzdF9jb2x1bW4gPSAoeXlsbG9jKS5sYXN0X2NvbHVtbjsKICAgICAgICh5eWxsb2MpLmZpcnN0X2xpbmUgICA9ICh5eWxsb2MpLmxhc3RfbGluZTsKIAogICAgIH0KKyAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKCkpID09ICcgJyB8fCBjID09ICdcdCcpOwogCiAgIC8qIHByb2Nlc3MgbnVtYmVycyAgICovCiAgIGlmIChjID09ICcuJyB8fCBpc2RpZ2l0IChjKSkKQEAgLTM3OTI5LDE4ICs5MzU1OSwyMCBAQAogICByZXR1cm4gYzsKIH0KIAotc3RhdGljIGludAotcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpCi17Ci0gIGludCByZXMgPSAxOwotICBpZiAoZXhwb25lbnQgPCAwKQotICAgIGV4aXQgKDMpOwotICBmb3IgKC8qIE5pZW50ZSAqLzsgZXhwb25lbnQ7IC0tZXhwb25lbnQpCi0gICAgcmVzICo9IGJhc2U7Ci0gIHJldHVybiByZXM7Ci19CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjIHVuZGVmIGFsYXJtCisjIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLworI2VuZGlmCiAKIAorCitzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKK2ludCBnbG9iYWxfY291bnQgPSAwOworCisvKiBBIEMgbWFpbiBmdW5jdGlvbi4gICovCiBpbnQKIG1haW4gKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKQEAgLTM3OTY2LDEwICs5MzU5OCwxMCBAQAogCiAKICAgc3RhdHVzID0geXlwYXJzZSAoKTsKLSAgaWYgKGdsb2JhbF9yZXN1bHQgIT0gcmVzdWx0KQotICAgIGFib3J0ICgpOwotICBpZiAoZ2xvYmFsX2NvdW50ICE9IGNvdW50KQotICAgIGFib3J0ICgpOworICBpZiAoZmNsb3NlIChpbnB1dCkpCisgICAgcGVycm9yICgiZmNsb3NlIik7CisgIGFzc2VydCAoZ2xvYmFsX3Jlc3VsdCA9PSByZXN1bHQpOworICBhc3NlcnQgKGdsb2JhbF9jb3VudCA9PSBjb3VudCk7CiAgIHJldHVybiBzdGF0dXM7CiB9CiBfQVRFT0YKQEAgLTM3OTc4LDU1ICs5MzYxMCwxNTEgQEAKIAogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTY6IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkiCi1lY2hvIGNhbGMuYXQ6NTk2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtbyBjYWxjLmMgY2FsYy55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTk2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2NDkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55IiAiY2FsYy5hdDo2NDkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjY0OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2NDkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OTogYmlzb24gLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCi0gICAkYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTk2OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jIFwkTElCUyIKLWVjaG8gY2FsYy5hdDo1OTYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgorICAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ5OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiY2FsYy5hdDo2NDkiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ5OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jICRMSUJTIiAiY2FsYy5hdDo2NDkiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OTogXCRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCBcIlwkLjoge1wkX31cXG5cIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCBcJC4gPT0gMSkgJiYgL15cXHMqXCQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciBcIm1haW50XCIuCisgICAgICAgICMgfHwgL1xcc1wkLworICAgICAgICApJyBjYWxjLmMKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjQ5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmMKKworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKIAogCiAjIFRlc3QgdGhlIHByaW9yaXRpZXMuCkBAIC0zODA0Niw2MiArOTM3NzQsNjYgQEAKICgyXjIpXjMgPSA2NAogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTY6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1OTYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKIAogIyBTb21lIHN5bnRheCBlcnJvcnMuCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLTAgMAorMSAyCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5NjogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU5NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY0OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0zODExMiwxOCArOTM4NDQsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTM4MTMxLDYwICs5Mzg2NSw1MCBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5NjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1OTYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTk2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMS8vMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTY6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1OTYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMzgxOTUsMTggKzkzOTE5LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0zODIxNCw2MCArOTM5NDAsNTAgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTY6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTk2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKIGVycm9yCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5NjogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU5NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY0OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0zODI3OCwxOCArOTM5OTQsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICR1bmRlZmluZWQKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICR1bmRlZmluZWQKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMzgyOTcsNjAgKzk0MDE1LDUwIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTk2OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU5NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiAxID0gMiA9IDMKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTk2OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTk2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTk2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQ5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTM4MzYxLDE4ICs5NDA2OSwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS42OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCisxLjc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPScKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMzgzODAsMzAgKzk0MDkwLDE4IEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTk2OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU5NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCkBAIC0zODQxMSwzMCArOTQxMDksMzIgQEAKICsxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5NjogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU5NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY0OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0zODQ0NSwxOCArOTQxNDUsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTIuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTM4NDY0LDU3ICs5NDE2Niw0NyBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5NjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1OTYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTk2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKICMgRXhlcmNpc2UgZXJyb3IgbWVzc2FnZXMgd2l0aCBFT0Y6IHdvcmsgb24gYW4gZW1wdHkgZmlsZS4KLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTY6IFwkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiCi1lY2hvIGNhbGMuYXQ6NTk2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIgImNhbGMuYXQ6NjQ5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0zODUyNSwxOCArOTQyMTcsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTM4NTQ0LDMwICs5NDIzOCwxOCBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5NjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1OTYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTk2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIApAQCAtMzg1ODIsOCArOTQyNjQsOCBAQAogIwogIyAtIHRlc3QgdGhlIGFjdGlvbiBhc3NvY2lhdGVkIHRvIGBlcnJvcicKICMKLSMgLSBjaGVjayB0aGUgbG9vay1haGVhZCB0aGF0IHRyaWdnZXJzIGFuIGVycm9yIGlzIG5vdCBkaXNjYXJkZWQKLSMgICB3aGVuIHdlIGVudGVyIGVycm9yIHJlY292ZXJ5LiAgQmVsb3csIHRoZSBsb29rLWFoZWFkIGNhdXNpbmcgdGhlCisjIC0gY2hlY2sgdGhlIGxvb2thaGVhZCB0aGF0IHRyaWdnZXJzIGFuIGVycm9yIGlzIG5vdCBkaXNjYXJkZWQKKyMgICB3aGVuIHdlIGVudGVyIGVycm9yIHJlY292ZXJ5LiAgQmVsb3csIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUKICMgICBmaXJzdCBlcnJvciBpcyAiKSIsIHdoaWNoIGlzIG5lZWRlZCB0byByZWNvdmVyIGZyb20gdGhlIGVycm9yIGFuZAogIyAgIHByb2R1Y2UgdGhlICIwIiB0aGF0IHRyaWdnZXJzIHRoZSAiMCAhPSAxIiBlcnJvci4KICMKQEAgLTM4NTkxLDMwICs5NDI3MywzMiBAQAogKCkgKyAoMSArIDEgKyAxICspICsgKCogKiAqKSArICgxICogMiAqICopID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTY6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1OTYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMzg2MjUsMjEgKzk0MzA5LDIzIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuNDA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xODogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4yMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS40MTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogY2FsYzogZXJyb3I6IDQ0NDQgIT0gMQogX0FURU9GCiAKQEAgLTM4NjQ4LDYzICs5NDMzNCw1MyBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5NjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1OTYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTk2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAogIyBUaGUgc2FtZSwgYnV0IHRoaXMgdGltZSBleGVyY2lzaW5nIGV4cGxpY2l0bHkgdHJpZ2dlcmVkIHN5bnRheCBlcnJvcnMuCi0jIFBPU0lYIHNheXMgdGhlIGxvb2stYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCisjIFBPU0lYIHNheXMgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotKCEpICsgKDAgMCkgPSAxCisoISkgKyAoMSAyKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTk2OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTk2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTk2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQ5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTM4NzE1LDE4ICs5NDM5MSwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS45OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCiBfQVRFT0YKIApAQCAtMzg3MzUsNjAgKzk0NDEzLDUwIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTk2OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU5NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0oLSAqKSArICgwIDApID0gMQorKC0gKikgKyAoMSAyKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTk2OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTk2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTk2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjQ5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NDkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTM4Nzk5LDE5ICs5NDQ2NywyMSBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjExOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjQ6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKIGNhbGM6IGVycm9yOiAyMjIyICE9IDEKIF9BVEVPRgogCkBAIC0zODgyMCw5NCArOTQ0OTAsMTE1IEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTk2OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU5NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjQ5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCiAKLSRhdF90cmFjZW9uCisKKyMgQ2hlY2sgdGhhdCB5eWVycm9rIHdvcmtzIHByb3Blcmx5OiBzZWNvbmQgZXJyb3IgaXMgbm90IHJlcG9ydGVkLAorIyB0aGlyZCBhbmQgZm91cnRoIGFyZS4gIFBhcnNlIHN0YXR1cyBpcyBzdWNjZXNmdWxsLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoKiAqKSArICgqKSArICgqKQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NDkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY0OTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTY6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NDk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY0OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjQ5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKIAogCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwotCi0gIDkzICkgIyA5My4gY2FsYy5hdDo1OTg6IENhbGN1bGF0b3IgJWdsci1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjCi0gICAgYXRfc2V0dXBfbGluZT0nY2FsYy5hdDo1OTgnCi0gICAgYXRfZGVzYz0nQ2FsY3VsYXRvciAlZ2xyLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiA5MzogQ2FsY3VsYXRvciAlZ2xyLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiOTMuIGNhbGMuYXQ6NTk4OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCi0KLQotCi0KLQotCi0KLQotIyBVc2luZyB5YWNjLmM/Ci0KLQotCi0KLQotCi0KLSMgeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWYgJWxvY2F0aW9uICYgJXB1cmUgJiAoJWdsciBvciAlcGFyc2UtcGFyYW0pLgotCi0jIHl5ZXJyb3IgYWx3YXlzIHNlZXMgdGhlIGxvY2F0aW9ucyAod2hlbiBhY3RpdmF0ZWQpLCBleGNlcHQgaWYKLSMgeWFjYyAmIHB1cmUgJiAhcGFyYW0uCi0KLQotIyBUaGUgaW50ZXJmYWNlIGlzIHB1cmU6IGVpdGhlciBiZWNhdXNlICVwdXJlLXBhcnNlciwgb3IgYmVjYXVzZSB3ZQotIyBhcmUgdXNpbmcgdGhlIEMrKyBwYXJzZXJzLgotCi0KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjI3CisjQVRfU1RBUlRfMjI4CithdF9mbl9ncm91cF9iYW5uZXIgMjI4ICdjYWxjLmF0OjY1MScgXAorICAiQ2FsY3VsYXRvciAlZ2xyLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeCBcImNhbGNcIiAldmVyYm9zZSAleWFjYyIgIiIgMTIKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyMjguICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiAKQEAgLTM4OTE5LDU5ICs5NDYxMCw1MiBAQAogCiAKIGNhdCA+Y2FsYy55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogLyogSW5maXggbm90YXRpb24gY2FsY3VsYXRvci0tY2FsYyAqLwotJWdsci1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjCislZ2xyLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeCAiY2FsYyIgJXZlcmJvc2UgJXlhY2MKIAotJXsKLSNpbmNsdWRlIDxzdGRpby5oPgorJWNvZGUgcmVxdWlyZXMKK3sKIAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2lmIEhBVkVfVU5JU1REX0gKLSMgaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZWxzZQotIyB1bmRlZiBhbGFybQotIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KLSNlbmRpZgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jZGVmaW5lIFVTRShWYXIpCi0KLS8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCi10eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKLQotc3RhdGljIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOwotc3RhdGljIGludCBnbG9iYWxfY291bnQgPSAwOwotJX0KKyAgLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KKyAgdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Cit9CiAKIC8qIEV4ZXJjaXNlICV1bmlvbi4gKi8KICV1bmlvbgogewogICBzZW1hbnRpY192YWx1ZSBpdmFsOwogfTsKKyVwcmludGVyIHsgZnByaW50ZiAoeXlvdXRwdXQsICIlZCIsICQkKTsgfSA8aXZhbD47CiAKLSV7CislY29kZSBwcm92aWRlcworeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgLyogVGhlIGlucHV0LiAgKi8KKyAgZXh0ZXJuIEZJTEUgKmlucHV0OworICBleHRlcm4gc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdDsKKyAgZXh0ZXJuIGludCBnbG9iYWxfY291bnQ7Cit9CisKKyVjb2RlCit7CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZGVmaW5lIFVTRShWYXIpCisKK0ZJTEUgKmlucHV0Owogc3RhdGljIGludCBwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCk7Ci0vKiB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZjoKLSAgIC0gJWxvY2F0aW9uICYgJXB1cmUgJiAlZ2xyCi0gICAtICVsb2NhdGlvbiAmICVwdXJlICYgJXlhY2MgJiAlcGFyc2UtcGFyYW0uICovCi1zdGF0aWMgdm9pZCB5eWVycm9yICgKIAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcwotICAgICAgICAgICAgICAgICAgICAgKTsKLXN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOwotc3RhdGljIGludCBnZXRfY2hhciAodm9pZCk7Ci1zdGF0aWMgdm9pZCB1bmdldF9jaGFyICggaW50IGMpOwotJX0KK3N0YXRpYyB2b2lkIGNhbGNlcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CitpbnQgY2FsY2xleCAodm9pZCk7Cit9CiAKIAogCkBAIC0zODk4MCw3ICs5NDY2NCw3IEBACiAldG9rZW4gPGl2YWw+IE5VTSAibnVtYmVyIgogJXR5cGUgIDxpdmFsPiBleHAKIAotJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uCSAgICAgICAqLworJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uICAgICAgICAgICAgKi8KICVsZWZ0ICctJyAnKycKICVsZWZ0ICcqJyAnLycKICVsZWZ0IE5FRyAgICAgLyogbmVnYXRpb24tLXVuYXJ5IG1pbnVzICovCkBAIC0zOTAxMywzNCArOTQ2OTcsNTEgQEAKIHwgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSAtJDI7ICAgICAgICAgICAgfQogfCBleHAgJ14nIGV4cCAgICAgICAgeyAkJCA9IHBvd2VyICgkMSwgJDMpOyB9CiB8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgIH0KLXwgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyAgICAgICAgICAgfQorfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7IHl5ZXJyb2s7ICB9CiB8ICchJyAgICAgICAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KIHwgJy0nIGVycm9yICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQogOwogJSUKLS8qIFRoZSBpbnB1dC4gICovCi1zdGF0aWMgRklMRSAqaW5wdXQ7CiAKLXN0YXRpYyB2b2lkCi15eWVycm9yICgKLQotICAgICAgICAgY29uc3QgY2hhciAqcykKK3N0YXRpYyBpbnQKK3Bvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQogewotCi0KLSAgZnByaW50ZiAoc3RkZXJyLCAiJWQuJWQiLAotICAgICAgICAgICAoeXlsbG9jKS5maXJzdF9saW5lLCAoeXlsbG9jKS5maXJzdF9jb2x1bW4pOwotICBpZiAoKHl5bGxvYykuZmlyc3RfbGluZSAhPSAoeXlsbG9jKS5sYXN0X2xpbmUpCi0gICAgZnByaW50ZiAoc3RkZXJyLCAiLSVkLiVkIiwKLQkgICAgICh5eWxsb2MpLmxhc3RfbGluZSwgICh5eWxsb2MpLmxhc3RfY29sdW1uIC0gMSk7Ci0gIGVsc2UgaWYgKCh5eWxsb2MpLmZpcnN0X2NvbHVtbiAhPSAoeXlsbG9jKS5sYXN0X2NvbHVtbiAtIDEpCi0gICAgZnByaW50ZiAoc3RkZXJyLCAiLSVkIiwKLQkgICAgICh5eWxsb2MpLmxhc3RfY29sdW1uIC0gMSk7Ci0gIGZwcmludGYgKHN0ZGVyciwgIjogIik7Ci0gIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBzKTsKKyAgaW50IHJlcyA9IDE7CisgIGFzc2VydCAoMCA8PSBleHBvbmVudCk7CisgIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKKyAgICByZXMgKj0gYmFzZTsKKyAgcmV0dXJuIHJlczsKIH0KIAogCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIGNhbGNlcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgWVlfTE9DQVRJT05fUFJJTlQgKHN0ZGVyciwgKGNhbGNsbG9jKSk7CisgIGZwcmludGYgKHN0ZGVyciwgIjogIik7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorX0FURU9GCisKKworCitjYXQgPmNhbGMtbGV4LmMgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworCisjaW5jbHVkZSAiY2FsYy5oIgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworaW50IGNhbGNsZXggKHZvaWQpOworc3RhdGljIGludCBnZXRfY2hhciAodm9pZCk7CitzdGF0aWMgdm9pZCB1bmdldF9jaGFyICggaW50IGMpOworCiAKIHN0YXRpYyBZWUxUWVBFIGxhc3RfeXlsbG9jOwogCkBAIC0zOTA1MCwyNiArOTQ3NTEsMjUgQEAKICAgaW50IHJlcyA9IGdldGMgKGlucHV0KTsKICAgOwogCi0gIGxhc3RfeXlsbG9jID0gKHl5bGxvYyk7CisgIGxhc3RfeXlsbG9jID0gKGNhbGNsbG9jKTsKICAgaWYgKHJlcyA9PSAnXG4nKQogICAgIHsKLSAgICAgICh5eWxsb2MpLmxhc3RfbGluZSsrOwotICAgICAgKHl5bGxvYykubGFzdF9jb2x1bW4gPSAwOworICAgICAgKGNhbGNsbG9jKS5sYXN0X2xpbmUrKzsKKyAgICAgIChjYWxjbGxvYykubGFzdF9jb2x1bW4gPSAxOwogICAgIH0KICAgZWxzZQotICAgICh5eWxsb2MpLmxhc3RfY29sdW1uKys7CisgICAgKGNhbGNsbG9jKS5sYXN0X2NvbHVtbisrOwogCiAgIHJldHVybiByZXM7CiB9CiAKLQogc3RhdGljIHZvaWQKIHVuZ2V0X2NoYXIgKCBpbnQgYykKIHsKICAgOwogCiAgIC8qIFdyb25nIHdoZW4gQyA9PSBgXG4nLiAqLwotICAoeXlsbG9jKSA9IGxhc3RfeXlsbG9jOworICAoY2FsY2xsb2MpID0gbGFzdF95eWxsb2M7CiAKICAgdW5nZXRjIChjLCBpbnB1dCk7CiB9CkBAIC0zOTEwMCw0NiArOTQ4MDAsMjkgQEAKIH0KIAogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCBMZXhpY2FsIGFuYWx5emVyIHJldHVybnMgYW4gaW50ZWdlciBvbiB0aGUgc3RhY2sgYW5kIHRoZSB0b2tlbiB8CiB8IE5VTSwgb3IgdGhlIEFTQ0lJIGNoYXJhY3RlciByZWFkIGlmIG5vdCBhIG51bWJlci4gIFNraXBzIGFsbCAgIHwKIHwgYmxhbmtzIGFuZCB0YWJzLCByZXR1cm5zIDAgZm9yIEVPRi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQKLXl5bGV4ICh2b2lkKQoraW50IGNhbGNsZXggKHZvaWQpCiB7Ci0gIHN0YXRpYyBpbnQgaW5pdCA9IDE7CiAgIGludCBjOwotCi0gIGlmIChpbml0KQorICAvKiBTa2lwIGN1cnJlbnQgdG9rZW4sIHRoZW4gd2hpdGUgc3BhY2VzLiAgKi8KKyAgZG8KICAgICB7Ci0gICAgICBpbml0ID0gMDsKLQotICAgICAgKHl5bGxvYykubGFzdF9jb2x1bW4gPSAwOwotICAgICAgKHl5bGxvYykubGFzdF9saW5lID0gMTsKKyAgICAgKGNhbGNsbG9jKS5maXJzdF9jb2x1bW4gPSAoY2FsY2xsb2MpLmxhc3RfY29sdW1uOworICAgICAgKGNhbGNsbG9jKS5maXJzdF9saW5lICAgPSAoY2FsY2xsb2MpLmxhc3RfbGluZTsKIAogICAgIH0KLQotCi0gKHl5bGxvYykuZmlyc3RfY29sdW1uID0gKHl5bGxvYykubGFzdF9jb2x1bW47Ci0gICh5eWxsb2MpLmZpcnN0X2xpbmUgICA9ICh5eWxsb2MpLmxhc3RfbGluZTsKLQotCi0gIC8qIFNraXAgd2hpdGUgc3BhY2UuICAqLwotICB3aGlsZSAoKGMgPSBnZXRfY2hhciAoKSkgPT0gJyAnIHx8IGMgPT0gJ1x0JykKLSAgICB7Ci0gICAgICh5eWxsb2MpLmZpcnN0X2NvbHVtbiA9ICh5eWxsb2MpLmxhc3RfY29sdW1uOwotICAgICAgKHl5bGxvYykuZmlyc3RfbGluZSAgID0gKHl5bGxvYykubGFzdF9saW5lOwotCi0gICAgfQorICB3aGlsZSAoKGMgPSBnZXRfY2hhciAoKSkgPT0gJyAnIHx8IGMgPT0gJ1x0Jyk7CiAKICAgLyogcHJvY2VzcyBudW1iZXJzICAgKi8KICAgaWYgKGMgPT0gJy4nIHx8IGlzZGlnaXQgKGMpKQogICAgIHsKICAgICAgIHVuZ2V0X2NoYXIgKCBjKTsKLSAgICAgICh5eWx2YWwpLml2YWwgPSByZWFkX3NpZ25lZF9pbnRlZ2VyICgpOworICAgICAgKGNhbGNsdmFsKS5pdmFsID0gcmVhZF9zaWduZWRfaW50ZWdlciAoKTsKICAgICAgIHJldHVybiBOVU07CiAgICAgfQogCkBAIC0zOTE1MCwxOSArOTQ4MzMsMzIgQEAKICAgLyogUmV0dXJuIHNpbmdsZSBjaGFycy4gKi8KICAgcmV0dXJuIGM7CiB9Ci0KLXN0YXRpYyBpbnQKLXBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQotewotICBpbnQgcmVzID0gMTsKLSAgaWYgKGV4cG9uZW50IDwgMCkKLSAgICBleGl0ICgzKTsKLSAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQotICAgIHJlcyAqPSBiYXNlOwotICByZXR1cm4gcmVzOwotfQorX0FURU9GCiAKIAorY2F0ID5jYWxjLW1haW4uYyA8PCdfQVRFT0YnCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCisKKyNpbmNsdWRlICJjYWxjLmgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2Vsc2UKKyMgdW5kZWYgYWxhcm0KKyMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCisjZW5kaWYKKworCisKK3NlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOworaW50IGdsb2JhbF9jb3VudCA9IDA7CisKKy8qIEEgQyBtYWluIGZ1bmN0aW9uLiAgKi8KIGludAogbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewpAQCAtMzkxODcsMTEgKzk0ODgzLDExIEBACiAgICAgfQogCiAKLSAgc3RhdHVzID0geXlwYXJzZSAoKTsKLSAgaWYgKGdsb2JhbF9yZXN1bHQgIT0gcmVzdWx0KQotICAgIGFib3J0ICgpOwotICBpZiAoZ2xvYmFsX2NvdW50ICE9IGNvdW50KQotICAgIGFib3J0ICgpOworICBzdGF0dXMgPSBjYWxjcGFyc2UgKCk7CisgIGlmIChmY2xvc2UgKGlucHV0KSkKKyAgICBwZXJyb3IgKCJmY2xvc2UiKTsKKyAgYXNzZXJ0IChnbG9iYWxfcmVzdWx0ID09IHJlc3VsdCk7CisgIGFzc2VydCAoZ2xvYmFsX2NvdW50ID09IGNvdW50KTsKICAgcmV0dXJuIHN0YXR1czsKIH0KIF9BVEVPRgpAQCAtMzkyMDAsNTUgKzk0ODk2LDE3OCBAQAogCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5ODogYmlzb24gLW8gY2FsYy5jIGNhbGMueSIKLWVjaG8gY2FsYy5hdDo1OTggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2NTEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55IiAiY2FsYy5hdDo2NTEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjY1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUxOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2NTEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MTogYmlzb24gLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjUxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCi0gICAkYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTk4OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jIFwkTElCUyIKLWVjaG8gY2FsYy5hdDo1OTggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5ODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgorICAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUxOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiY2FsYy5hdDo2NTEiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUxOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jIGNhbGMtbGV4LmMgY2FsYy1tYWluLmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgY2FsYy1sZXguYyBjYWxjLW1haW4uYyAkTElCUyIgImNhbGMuYXQ6NjUxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBjYWxjLWxleC5jIGNhbGMtbWFpbi5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MTogXCRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCBcIlwkLjoge1wkX31cXG5cIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCBcJC4gPT0gMSkgJiYgL15cXHMqXCQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciBcIm1haW50XCIuCisgICAgICAgICMgfHwgL1xcc1wkLworICAgICAgICApJyBjYWxjLmMKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjUxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmMKKworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MTogXCRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCBcIlwkLjoge1wkX31cXG5cIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCBcJC4gPT0gMSkgJiYgL15cXHMqXCQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciBcIm1haW50XCIuCisgICAgICAgICMgfHwgL1xcc1wkLworICAgICAgICApJyBjYWxjLmgKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjUxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmgKKworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogIyBUZXN0IHRoZSBwcmlvcml0aWVzLgpAQCAtMzkyNjgsNjIgKzk1MDg3LDY2IEBACiAoMl4yKV4zID0gNjQKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTk4OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTk4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTk4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTE6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjUxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAKICMgU29tZSBzeW50YXggZXJyb3JzLgogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0wIDAKKzEgMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTg6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1OTggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NTEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMzkzMzQsMTggKzk1MTU3LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0zOTM1Myw2MCArOTUxNzgsNTAgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTg6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTk4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5ODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTE6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKIDEvLzIKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTk4OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTk4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTk4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTE6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjUxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTM5NDE3LDE4ICs5NTIzMiwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJy8nLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtMzk0MzYsNjAgKzk1MjUzLDUwIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTk4OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjU5OCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUxOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTEiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiBlcnJvcgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTg6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1OTggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NTEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMzk1MDAsMTggKzk1MzA3LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkCisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTM5NTE5LDYwICs5NTMyOCw1MCBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5ODogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1OTggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTk4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjUxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMSA9IDIgPSAzCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5ODogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU5OCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5ODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUxOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUxOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjUxIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0zOTU4MywxOCArOTUzODIsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworMS43OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTM5NjAyLDMwICs5NTQwMywxOCBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5ODogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1OTggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTk4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjUxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwpAQCAtMzk2MzMsMzAgKzk1NDIyLDMyIEBACiArMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTg6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo1OTggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NTEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMzk2NjcsMTggKzk1NDU4LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0yLjA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKycKKzIuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0zOTY4Niw1NyArOTU0NzksNDcgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTg6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTk4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5ODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTE6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAjIEV4ZXJjaXNlIGVycm9yIG1lc3NhZ2VzIHdpdGggRU9GOiB3b3JrIG9uIGFuIGVtcHR5IGZpbGUuCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTk4OiBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgotZWNobyBjYWxjLmF0OjU5OCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo1OTg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MTogIFwkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiICJjYWxjLmF0OjY1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtMzk3NDcsMTggKzk1NTMwLDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC0zOTc2NiwzMCArOTU1NTEsMTggQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTg6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTk4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5ODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTE6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKQEAgLTM5ODA0LDggKzk1NTc3LDggQEAKICMKICMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCiAjCi0jIC0gY2hlY2sgdGhlIGxvb2stYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCi0jICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZQorIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCiAjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKICMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCiAjCkBAIC0zOTgxMywzMCArOTU1ODYsMzIgQEAKICgpICsgKDEgKyAxICsgMSArKSArICgqICogKikgKyAoMSAqIDIgKiAqKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NTk4OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NTk4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTk4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTE6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjUxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTM5ODQ3LDIxICs5NTYyMiwyMyBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjE3OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjIyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjQwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKIGNhbGM6IGVycm9yOiA0NDQ0ICE9IDEKIF9BVEVPRgogCkBAIC0zOTg3MCw2MyArOTU2NDcsNTMgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo1OTg6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NTk4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5ODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTE6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKICMgVGhlIHNhbWUsIGJ1dCB0aGlzIHRpbWUgZXhlcmNpc2luZyBleHBsaWNpdGx5IHRyaWdnZXJlZCBzeW50YXggZXJyb3JzLgotIyBQT1NJWCBzYXlzIHRoZSBsb29rLWFoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgorIyBQT1NJWCBzYXlzIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLSghKSArICgwIDApID0gMQorKCEpICsgKDEgMikgPSAxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5ODogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU5OCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5ODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUxOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUxOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjUxIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC0zOTkzNywxOCArOTU3MDQsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuOTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS4xMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogY2FsYzogZXJyb3I6IDIyMjIgIT0gMQogX0FURU9GCiAKQEAgLTM5OTU3LDYwICs5NTcyNiw1MCBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5ODogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1OTggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTk4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjUxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotKC0gKikgKyAoMCAwKSA9IDEKKygtICopICsgKDEgMikgPSAxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5ODogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjU5OCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjU5ODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUxOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUxOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjUxIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC00MDAyMSwxOSArOTU3ODAsMjEgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwotMS4xMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS40OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCiBfQVRFT0YKIApAQCAtNDAwNDIsOTQgKzk1ODAzLDExNSBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjU5ODogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo1OTggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NTk4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTE6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQogCi0kYXRfdHJhY2VvbgorCisjIENoZWNrIHRoYXQgeXllcnJvayB3b3JrcyBwcm9wZXJseTogc2Vjb25kIGVycm9yIGlzIG5vdCByZXBvcnRlZCwKKyMgdGhpcmQgYW5kIGZvdXJ0aCBhcmUuICBQYXJzZSBzdGF0dXMgaXMgc3VjY2VzZnVsbC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCogKikgKyAoKikgKyAoKikKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTE6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjUxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE2OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUxOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTEiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICA5NCApICMgOTQuIGNhbGMuYXQ6NjAwOiBDYWxjdWxhdG9yICVnbHItcGFyc2VyICVkZWJ1ZwotICAgIGF0X3NldHVwX2xpbmU9J2NhbGMuYXQ6NjAwJwotICAgIGF0X2Rlc2M9J0NhbGN1bGF0b3IgJWdsci1wYXJzZXIgJWRlYnVnJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgOTQ6IENhbGN1bGF0b3IgJWdsci1wYXJzZXIgJWRlYnVnICAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICI5NC4gY2FsYy5hdDo2MDA6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KLQotCi0KLQotCi0KLQotCi0jIFVzaW5nIHlhY2MuYz8KLQotCi0KLQotCi0KLQotIyB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZiAlbG9jYXRpb24gJiAlcHVyZSAmICglZ2xyIG9yICVwYXJzZS1wYXJhbSkuCi0KLSMgeXllcnJvciBhbHdheXMgc2VlcyB0aGUgbG9jYXRpb25zICh3aGVuIGFjdGl2YXRlZCksIGV4Y2VwdCBpZgotIyB5YWNjICYgcHVyZSAmICFwYXJhbS4KLQotCi0jIFRoZSBpbnRlcmZhY2UgaXMgcHVyZTogZWl0aGVyIGJlY2F1c2UgJXB1cmUtcGFyc2VyLCBvciBiZWNhdXNlIHdlCi0jIGFyZSB1c2luZyB0aGUgQysrIHBhcnNlcnMuCi0KLQorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yMjgKKyNBVF9TVEFSVF8yMjkKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyMjkgJ2NhbGMuYXQ6NjUzJyBcCisgICJDYWxjdWxhdG9yICVnbHItcGFyc2VyICVkZWJ1ZyIgIiAgICAgICAgICAgICAgICAgICIgMTIKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyMjkuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiAKQEAgLTQwMTQxLDU5ICs5NTkyMyw1MiBAQAogCiAKIGNhdCA+Y2FsYy55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogLyogSW5maXggbm90YXRpb24gY2FsY3VsYXRvci0tY2FsYyAqLwogJWdsci1wYXJzZXIgJWRlYnVnCiAKLSV7Ci0jaW5jbHVkZSA8c3RkaW8uaD4KKyVjb2RlIHJlcXVpcmVzCit7CiAKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpZiBIQVZFX1VOSVNURF9ICi0jIGluY2x1ZGUgPHVuaXN0ZC5oPgotI2Vsc2UKLSMgdW5kZWYgYWxhcm0KLSMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCi0jZW5kaWYKLSNpbmNsdWRlIDxjdHlwZS5oPgotI2RlZmluZSBVU0UoVmFyKQotCi0vKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLwotdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Ci0KLXN0YXRpYyBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKLXN0YXRpYyBpbnQgZ2xvYmFsX2NvdW50ID0gMDsKLSV9CisgIC8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCisgIHR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOworfQogCiAvKiBFeGVyY2lzZSAldW5pb24uICovCiAldW5pb24KIHsKICAgc2VtYW50aWNfdmFsdWUgaXZhbDsKIH07CislcHJpbnRlciB7IGZwcmludGYgKHl5b3V0cHV0LCAiJWQiLCAkJCk7IH0gPGl2YWw+OwogCi0leworJWNvZGUgcHJvdmlkZXMKK3sKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIC8qIFRoZSBpbnB1dC4gICovCisgIGV4dGVybiBGSUxFICppbnB1dDsKKyAgZXh0ZXJuIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQ7CisgIGV4dGVybiBpbnQgZ2xvYmFsX2NvdW50OworfQorCislY29kZQoreworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2RlZmluZSBVU0UoVmFyKQorCitGSUxFICppbnB1dDsKIHN0YXRpYyBpbnQgcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpOwotLyogeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWY6Ci0gICAtICVsb2NhdGlvbiAmICVwdXJlICYgJWdscgotICAgLSAlbG9jYXRpb24gJiAlcHVyZSAmICV5YWNjICYgJXBhcnNlLXBhcmFtLiAqLwotc3RhdGljIHZvaWQgeXllcnJvciAoCiAKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMKLSAgICAgICAgICAgICAgICAgICAgICk7Ci1zdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKLXN0YXRpYyBpbnQgZ2V0X2NoYXIgKHZvaWQpOwotc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoIGludCBjKTsKLSV9CitzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKK2ludCB5eWxleCAodm9pZCk7Cit9CiAKIAogCkBAIC00MDIwMiw3ICs5NTk3Nyw3IEBACiAldG9rZW4gPGl2YWw+IE5VTSAibnVtYmVyIgogJXR5cGUgIDxpdmFsPiBleHAKIAotJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uCSAgICAgICAqLworJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uICAgICAgICAgICAgKi8KICVsZWZ0ICctJyAnKycKICVsZWZ0ICcqJyAnLycKICVsZWZ0IE5FRyAgICAgLyogbmVnYXRpb24tLXVuYXJ5IG1pbnVzICovCkBAIC00MDIzNSwyNSArOTYwMTAsMzYgQEAKIHwgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSAtJDI7ICAgICAgICAgICAgfQogfCBleHAgJ14nIGV4cCAgICAgICAgeyAkJCA9IHBvd2VyICgkMSwgJDMpOyB9CiB8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgIH0KLXwgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyAgICAgICAgICAgfQorfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7IHl5ZXJyb2s7ICB9CiB8ICchJyAgICAgICAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KIHwgJy0nIGVycm9yICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQogOwogJSUKLS8qIFRoZSBpbnB1dC4gICovCi1zdGF0aWMgRklMRSAqaW5wdXQ7CiAKLXN0YXRpYyB2b2lkCi15eWVycm9yICgKLQotICAgICAgICAgY29uc3QgY2hhciAqcykKK3N0YXRpYyBpbnQKK3Bvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQogewotCi0KLSAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIHMpOworICBpbnQgcmVzID0gMTsKKyAgYXNzZXJ0ICgwIDw9IGV4cG9uZW50KTsKKyAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQorICAgIHJlcyAqPSBiYXNlOworICByZXR1cm4gcmVzOwogfQogCiAKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworaW50IHl5bGV4ICh2b2lkKTsKK3N0YXRpYyBpbnQgZ2V0X2NoYXIgKHZvaWQpOworc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoIGludCBjKTsKKwogCiBzdGF0aWMgaW50CiBnZXRfY2hhciAodm9pZCkKQEAgLTQwMjY0LDcgKzk2MDUwLDYgQEAKICAgcmV0dXJuIHJlczsKIH0KIAotCiBzdGF0aWMgdm9pZAogdW5nZXRfY2hhciAoIGludCBjKQogewpAQCAtNDAyOTksMzIgKzk2MDg0LDIxIEBACiB9CiAKIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgTGV4aWNhbCBhbmFseXplciByZXR1cm5zIGFuIGludGVnZXIgb24gdGhlIHN0YWNrIGFuZCB0aGUgdG9rZW4gfAogfCBOVU0sIG9yIHRoZSBBU0NJSSBjaGFyYWN0ZXIgcmVhZCBpZiBub3QgYSBudW1iZXIuICBTa2lwcyBhbGwgICB8CiB8IGJsYW5rcyBhbmQgdGFicywgcmV0dXJucyAwIGZvciBFT0YuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50Ci15eWxleCAodm9pZCkKK2ludCB5eWxleCAodm9pZCkKIHsKLSAgc3RhdGljIGludCBpbml0ID0gMTsKICAgaW50IGM7Ci0KLSAgaWYgKGluaXQpCi0gICAgewotICAgICAgaW5pdCA9IDA7Ci0KLSAgICB9Ci0KLQotCi0gIC8qIFNraXAgd2hpdGUgc3BhY2UuICAqLwotICB3aGlsZSAoKGMgPSBnZXRfY2hhciAoKSkgPT0gJyAnIHx8IGMgPT0gJ1x0JykKKyAgLyogU2tpcCBjdXJyZW50IHRva2VuLCB0aGVuIHdoaXRlIHNwYWNlcy4gICovCisgIGRvCiAgICAgewogCiAgICAgfQorICB3aGlsZSAoKGMgPSBnZXRfY2hhciAoKSkgPT0gJyAnIHx8IGMgPT0gJ1x0Jyk7CiAKICAgLyogcHJvY2VzcyBudW1iZXJzICAgKi8KICAgaWYgKGMgPT0gJy4nIHx8IGlzZGlnaXQgKGMpKQpAQCAtNDAzNDIsMTggKzk2MTE2LDIwIEBACiAgIHJldHVybiBjOwogfQogCi1zdGF0aWMgaW50Ci1wb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKLXsKLSAgaW50IHJlcyA9IDE7Ci0gIGlmIChleHBvbmVudCA8IDApCi0gICAgZXhpdCAoMyk7Ci0gIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKLSAgICByZXMgKj0gYmFzZTsKLSAgcmV0dXJuIHJlczsKLX0KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2Vsc2UKKyMgdW5kZWYgYWxhcm0KKyMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCisjZW5kaWYKIAogCisKK3NlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOworaW50IGdsb2JhbF9jb3VudCA9IDA7CisKKy8qIEEgQyBtYWluIGZ1bmN0aW9uLiAgKi8KIGludAogbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewpAQCAtNDAzNzksMTAgKzk2MTU1LDEwIEBACiAKICAgeXlkZWJ1ZyA9IDE7CiAgIHN0YXR1cyA9IHl5cGFyc2UgKCk7Ci0gIGlmIChnbG9iYWxfcmVzdWx0ICE9IHJlc3VsdCkKLSAgICBhYm9ydCAoKTsKLSAgaWYgKGdsb2JhbF9jb3VudCAhPSBjb3VudCkKLSAgICBhYm9ydCAoKTsKKyAgaWYgKGZjbG9zZSAoaW5wdXQpKQorICAgIHBlcnJvciAoImZjbG9zZSIpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOwogICByZXR1cm4gc3RhdHVzOwogfQogX0FURU9GCkBAIC00MDM5MSw1NSArOTYxNjcsMTUxIEBACiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjAwOiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgotZWNobyBjYWxjLmF0OjYwMCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gY2FsYy5jIGNhbGMueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwMDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjUzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueSIgImNhbGMuYXQ6NjUzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUzOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2NTMiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjUzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTM6IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAotICAgJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwMDogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBcJExJQlMiCi1lY2hvIGNhbGMuYXQ6NjAwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MzogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImNhbGMuYXQ6NjUzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MzogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUyIgImNhbGMuYXQ6NjUzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTM6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5jCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjY1MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5jCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCiAKIAogIyBUZXN0IHRoZSBwcmlvcml0aWVzLgpAQCAtNDA0NTksNjIgKzk2MzMxLDY2IEBACiAoMl4yKV4zID0gNjQKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjAwOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjAwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjAwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTM6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjUzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAKICMgU29tZSBzeW50YXggZXJyb3JzLgogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0wIDAKKzEgMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MDA6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MDAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MzogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NTMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1Mzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNDA1MjUsMTggKzk2NDAxLDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC00MDU0Niw2MCArOTY0MjQsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwMDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2MDAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjAwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjUzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMS8vMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MDA6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MDAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MzogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NTMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1Mzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNDA2MTAsMTggKzk2NDc4LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC00MDYzMSw2MCArOTY1MDEsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwMDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2MDAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjAwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjUzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogZXJyb3IKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjAwOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjAwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjAwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTM6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjUzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTQwNjk1LDE4ICs5NjU1NSwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC00MDcxNiw2MCArOTY1NzgsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwMDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2MDAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjAwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjUzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMSA9IDIgPSAzCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwMDogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYwMCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwMDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUzOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY1MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjUzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC00MDc4MCwxOCArOTY2MzIsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworMS43OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTQwODAxLDMwICs5NjY1NSwxOCBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjAwOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYwMCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUzOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTMiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCkBAIC00MDgzMiwzMCArOTY2NzQsMzIgQEAKICsxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwMDogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYwMCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwMDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUzOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY1MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjUzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC00MDg2NiwxOCArOTY3MTAsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTIuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTQwODg3LDU3ICs5NjczMyw0NyBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjAwOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYwMCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUzOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTMiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwMDogXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKLWVjaG8gY2FsYy5hdDo2MDAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjAwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTM6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo2NTMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTQwOTQ4LDE4ICs5Njc4NCwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtNDA5NjksMzAgKzk2ODA3LDE4IEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MDA6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjAwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwMDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTM6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKQEAgLTQxMDA3LDggKzk2ODMzLDggQEAKICMKICMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCiAjCi0jIC0gY2hlY2sgdGhlIGxvb2stYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCi0jICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZQorIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCiAjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKICMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCiAjCkBAIC00MTAxNiwzMCArOTY4NDIsMzIgQEAKICgpICsgKDEgKyAxICsgMSArKSArICgqICogKikgKyAoMSAqIDIgKiAqKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjAwOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjAwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjAwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTM6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjUzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTQxMDUwLDIxICs5Njg3OCwyMyBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjE3OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjIyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjQwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKIGNhbGM6IGVycm9yOiA0NDQ0ICE9IDEKIF9BVEVPRgogCkBAIC00MTA3NSw2MyArOTY5MDUsNTMgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwMDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2MDAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjAwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjUzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAogIyBUaGUgc2FtZSwgYnV0IHRoaXMgdGltZSBleGVyY2lzaW5nIGV4cGxpY2l0bHkgdHJpZ2dlcmVkIHN5bnRheCBlcnJvcnMuCi0jIFBPU0lYIHNheXMgdGhlIGxvb2stYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCisjIFBPU0lYIHNheXMgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotKCEpICsgKDAgMCkgPSAxCisoISkgKyAoMSAyKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjAwOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjAwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjAwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTM6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjUzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTQxMTQyLDE4ICs5Njk2MiwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS45OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCiBfQVRFT0YKIApAQCAtNDExNjQsNjAgKzk2OTg2LDUwIEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MDA6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjAwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwMDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTM6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLSgtICopICsgKDAgMCkgPSAxCisoLSAqKSArICgxIDIpID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MDA6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MDAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MzogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NTMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1Mzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNDEyMjgsMTkgKzk3MDQwLDIxIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogY2FsYzogZXJyb3I6IDIyMjIgIT0gMQogX0FURU9GCiAKQEAgLTQxMjUxLDk0ICs5NzA2NSwxMTcgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwMDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2MDAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjAwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTM6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQogCi0kYXRfdHJhY2VvbgorCisjIENoZWNrIHRoYXQgeXllcnJvayB3b3JrcyBwcm9wZXJseTogc2Vjb25kIGVycm9yIGlzIG5vdCByZXBvcnRlZCwKKyMgdGhpcmQgYW5kIGZvdXJ0aCBhcmUuICBQYXJzZSBzdGF0dXMgaXMgc3VjY2VzZnVsbC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCogKikgKyAoKikgKyAoKikKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTM6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjUzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE2OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KK3NlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjUzOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTMiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICA5NSApICMgOTUuIGNhbGMuYXQ6NjAxOiBDYWxjdWxhdG9yICVnbHItcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MKLSAgICBhdF9zZXR1cF9saW5lPSdjYWxjLmF0OjYwMScKLSAgICBhdF9kZXNjPSdDYWxjdWxhdG9yICVnbHItcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiA5NTogQ2FsY3VsYXRvciAlZ2xyLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjk1LiBjYWxjLmF0OjYwMTogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgotCi0KLQotCi0KLQotCi0KLSMgVXNpbmcgeWFjYy5jPwotCi0KLQotCi0KLQotCi0jIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmICVsb2NhdGlvbiAmICVwdXJlICYgKCVnbHIgb3IgJXBhcnNlLXBhcmFtKS4KLQotIyB5eWVycm9yIGFsd2F5cyBzZWVzIHRoZSBsb2NhdGlvbnMgKHdoZW4gYWN0aXZhdGVkKSwgZXhjZXB0IGlmCi0jIHlhY2MgJiBwdXJlICYgIXBhcmFtLgotCi0KLSMgVGhlIGludGVyZmFjZSBpcyBwdXJlOiBlaXRoZXIgYmVjYXVzZSAlcHVyZS1wYXJzZXIsIG9yIGJlY2F1c2Ugd2UKLSMgYXJlIHVzaW5nIHRoZSBDKysgcGFyc2Vycy4KLQotCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzIyOQorI0FUX1NUQVJUXzIzMAorYXRfZm5fZ3JvdXBfYmFubmVyIDIzMCAnY2FsYy5hdDo2NTQnIFwKKyAgIkNhbGN1bGF0b3IgJWdsci1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVsb2NhdGlvbnMgJWRlZmluZXMgJW5hbWUtcHJlZml4IFwiY2FsY1wiICV2ZXJib3NlICV5YWNjIiAiIiAxMgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjIzMC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIApAQCAtNDEzNTAsNTkgKzk3MTg3LDUyIEBACiAKIAogY2F0ID5jYWxjLnkgPDwnX0FURU9GJwotJXsKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotICAvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KLSMgdW5kZWYgbWFsbG9jCi0jIHVuZGVmIG1lbWNtcAotIyB1bmRlZiByZWFsbG9jCi0jZW5kaWYKLSV9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCiAvKiBJbmZpeCBub3RhdGlvbiBjYWxjdWxhdG9yLS1jYWxjICovCi0lZ2xyLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjCislZ2xyLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXggImNhbGMiICV2ZXJib3NlICV5YWNjCiAKLSV7Ci0jaW5jbHVkZSA8c3RkaW8uaD4KKyVjb2RlIHJlcXVpcmVzCit7CiAKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpZiBIQVZFX1VOSVNURF9ICi0jIGluY2x1ZGUgPHVuaXN0ZC5oPgotI2Vsc2UKLSMgdW5kZWYgYWxhcm0KLSMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCi0jZW5kaWYKLSNpbmNsdWRlIDxjdHlwZS5oPgotI2RlZmluZSBVU0UoVmFyKQotCi0vKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLwotdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Ci0KLXN0YXRpYyBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKLXN0YXRpYyBpbnQgZ2xvYmFsX2NvdW50ID0gMDsKLSV9CisgIC8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCisgIHR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOworfQogCiAvKiBFeGVyY2lzZSAldW5pb24uICovCiAldW5pb24KIHsKICAgc2VtYW50aWNfdmFsdWUgaXZhbDsKIH07CislcHJpbnRlciB7IGZwcmludGYgKHl5b3V0cHV0LCAiJWQiLCAkJCk7IH0gPGl2YWw+OwogCi0leworJWNvZGUgcHJvdmlkZXMKK3sKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIC8qIFRoZSBpbnB1dC4gICovCisgIGV4dGVybiBGSUxFICppbnB1dDsKKyAgZXh0ZXJuIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQ7CisgIGV4dGVybiBpbnQgZ2xvYmFsX2NvdW50OworfQorCislY29kZQoreworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2RlZmluZSBVU0UoVmFyKQorCitGSUxFICppbnB1dDsKIHN0YXRpYyBpbnQgcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpOwotLyogeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWY6Ci0gICAtICVsb2NhdGlvbiAmICVwdXJlICYgJWdscgotICAgLSAlbG9jYXRpb24gJiAlcHVyZSAmICV5YWNjICYgJXBhcnNlLXBhcmFtLiAqLwotc3RhdGljIHZvaWQgeXllcnJvciAoCiAKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMKLSAgICAgICAgICAgICAgICAgICAgICk7Ci1zdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKLXN0YXRpYyBpbnQgZ2V0X2NoYXIgKHZvaWQpOwotc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoIGludCBjKTsKLSV9CitzdGF0aWMgdm9pZCBjYWxjZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworaW50IGNhbGNsZXggKHZvaWQpOworfQogCiAKIApAQCAtNDE0MTEsNyArOTcyNDEsNyBAQAogJXRva2VuIDxpdmFsPiBOVU0gIm51bWJlciIKICV0eXBlICA8aXZhbD4gZXhwCiAKLSVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbgkgICAgICAgKi8KKyVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbiAgICAgICAgICAgICovCiAlbGVmdCAnLScgJysnCiAlbGVmdCAnKicgJy8nCiAlbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLwpAQCAtNDE0NDQsMzQgKzk3Mjc0LDUxIEBACiB8ICctJyBleHAgICVwcmVjIE5FRyB7ICQkID0gLSQyOyAgICAgICAgICAgIH0KIHwgZXhwICdeJyBleHAgICAgICAgIHsgJCQgPSBwb3dlciAoJDEsICQzKTsgfQogfCAnKCcgZXhwICcpJyAgICAgICAgeyAkJCA9ICQyOyAgICAgICAgICAgICB9Ci18ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgICAgICAgICAgIH0KK3wgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyB5eWVycm9rOyAgfQogfCAnIScgICAgICAgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9CiB8ICctJyBlcnJvciAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KIDsKICUlCi0vKiBUaGUgaW5wdXQuICAqLwotc3RhdGljIEZJTEUgKmlucHV0OwogCi1zdGF0aWMgdm9pZAoteXllcnJvciAoCi0KLSAgICAgICAgIGNvbnN0IGNoYXIgKnMpCitzdGF0aWMgaW50Citwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKIHsKLQotCi0gIGZwcmludGYgKHN0ZGVyciwgIiVkLiVkIiwKLSAgICAgICAgICAgKHl5bGxvYykuZmlyc3RfbGluZSwgKHl5bGxvYykuZmlyc3RfY29sdW1uKTsKLSAgaWYgKCh5eWxsb2MpLmZpcnN0X2xpbmUgIT0gKHl5bGxvYykubGFzdF9saW5lKQotICAgIGZwcmludGYgKHN0ZGVyciwgIi0lZC4lZCIsCi0JICAgICAoeXlsbG9jKS5sYXN0X2xpbmUsICAoeXlsbG9jKS5sYXN0X2NvbHVtbiAtIDEpOwotICBlbHNlIGlmICgoeXlsbG9jKS5maXJzdF9jb2x1bW4gIT0gKHl5bGxvYykubGFzdF9jb2x1bW4gLSAxKQotICAgIGZwcmludGYgKHN0ZGVyciwgIi0lZCIsCi0JICAgICAoeXlsbG9jKS5sYXN0X2NvbHVtbiAtIDEpOwotICBmcHJpbnRmIChzdGRlcnIsICI6ICIpOwotICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgcyk7CisgIGludCByZXMgPSAxOworICBhc3NlcnQgKDAgPD0gZXhwb25lbnQpOworICBmb3IgKC8qIE5pZW50ZSAqLzsgZXhwb25lbnQ7IC0tZXhwb25lbnQpCisgICAgcmVzICo9IGJhc2U7CisgIHJldHVybiByZXM7CiB9CiAKIAorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCBjYWxjZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIFlZX0xPQ0FUSU9OX1BSSU5UIChzdGRlcnIsIChjYWxjbGxvYykpOworICBmcHJpbnRmIChzdGRlcnIsICI6ICIpOworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KK19BVEVPRgorCisKKworY2F0ID5jYWxjLWxleC5jIDw8J19BVEVPRicKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKKworI2luY2x1ZGUgImNhbGMuaCIKKworI2luY2x1ZGUgPGN0eXBlLmg+CisKK2ludCBjYWxjbGV4ICh2b2lkKTsKK3N0YXRpYyBpbnQgZ2V0X2NoYXIgKHZvaWQpOworc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoIGludCBjKTsKKwogCiBzdGF0aWMgWVlMVFlQRSBsYXN0X3l5bGxvYzsKIApAQCAtNDE0ODEsMjYgKzk3MzI4LDI1IEBACiAgIGludCByZXMgPSBnZXRjIChpbnB1dCk7CiAgIDsKIAotICBsYXN0X3l5bGxvYyA9ICh5eWxsb2MpOworICBsYXN0X3l5bGxvYyA9IChjYWxjbGxvYyk7CiAgIGlmIChyZXMgPT0gJ1xuJykKICAgICB7Ci0gICAgICAoeXlsbG9jKS5sYXN0X2xpbmUrKzsKLSAgICAgICh5eWxsb2MpLmxhc3RfY29sdW1uID0gMDsKKyAgICAgIChjYWxjbGxvYykubGFzdF9saW5lKys7CisgICAgICAoY2FsY2xsb2MpLmxhc3RfY29sdW1uID0gMTsKICAgICB9CiAgIGVsc2UKLSAgICAoeXlsbG9jKS5sYXN0X2NvbHVtbisrOworICAgIChjYWxjbGxvYykubGFzdF9jb2x1bW4rKzsKIAogICByZXR1cm4gcmVzOwogfQogCi0KIHN0YXRpYyB2b2lkCiB1bmdldF9jaGFyICggaW50IGMpCiB7CiAgIDsKIAogICAvKiBXcm9uZyB3aGVuIEMgPT0gYFxuJy4gKi8KLSAgKHl5bGxvYykgPSBsYXN0X3l5bGxvYzsKKyAgKGNhbGNsbG9jKSA9IGxhc3RfeXlsbG9jOwogCiAgIHVuZ2V0YyAoYywgaW5wdXQpOwogfQpAQCAtNDE1MzEsNDYgKzk3Mzc3LDI5IEBACiB9CiAKIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgTGV4aWNhbCBhbmFseXplciByZXR1cm5zIGFuIGludGVnZXIgb24gdGhlIHN0YWNrIGFuZCB0aGUgdG9rZW4gfAogfCBOVU0sIG9yIHRoZSBBU0NJSSBjaGFyYWN0ZXIgcmVhZCBpZiBub3QgYSBudW1iZXIuICBTa2lwcyBhbGwgICB8CiB8IGJsYW5rcyBhbmQgdGFicywgcmV0dXJucyAwIGZvciBFT0YuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50Ci15eWxleCAodm9pZCkKK2ludCBjYWxjbGV4ICh2b2lkKQogewotICBzdGF0aWMgaW50IGluaXQgPSAxOwogICBpbnQgYzsKLQotICBpZiAoaW5pdCkKKyAgLyogU2tpcCBjdXJyZW50IHRva2VuLCB0aGVuIHdoaXRlIHNwYWNlcy4gICovCisgIGRvCiAgICAgewotICAgICAgaW5pdCA9IDA7Ci0KLSAgICAgICh5eWxsb2MpLmxhc3RfY29sdW1uID0gMDsKLSAgICAgICh5eWxsb2MpLmxhc3RfbGluZSA9IDE7CisgICAgIChjYWxjbGxvYykuZmlyc3RfY29sdW1uID0gKGNhbGNsbG9jKS5sYXN0X2NvbHVtbjsKKyAgICAgIChjYWxjbGxvYykuZmlyc3RfbGluZSAgID0gKGNhbGNsbG9jKS5sYXN0X2xpbmU7CiAKICAgICB9Ci0KLQotICh5eWxsb2MpLmZpcnN0X2NvbHVtbiA9ICh5eWxsb2MpLmxhc3RfY29sdW1uOwotICAoeXlsbG9jKS5maXJzdF9saW5lICAgPSAoeXlsbG9jKS5sYXN0X2xpbmU7Ci0KLQotICAvKiBTa2lwIHdoaXRlIHNwYWNlLiAgKi8KLSAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKCkpID09ICcgJyB8fCBjID09ICdcdCcpCi0gICAgewotICAgICAoeXlsbG9jKS5maXJzdF9jb2x1bW4gPSAoeXlsbG9jKS5sYXN0X2NvbHVtbjsKLSAgICAgICh5eWxsb2MpLmZpcnN0X2xpbmUgICA9ICh5eWxsb2MpLmxhc3RfbGluZTsKLQotICAgIH0KKyAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKCkpID09ICcgJyB8fCBjID09ICdcdCcpOwogCiAgIC8qIHByb2Nlc3MgbnVtYmVycyAgICovCiAgIGlmIChjID09ICcuJyB8fCBpc2RpZ2l0IChjKSkKICAgICB7CiAgICAgICB1bmdldF9jaGFyICggYyk7Ci0gICAgICAoeXlsdmFsKS5pdmFsID0gcmVhZF9zaWduZWRfaW50ZWdlciAoKTsKKyAgICAgIChjYWxjbHZhbCkuaXZhbCA9IHJlYWRfc2lnbmVkX2ludGVnZXIgKCk7CiAgICAgICByZXR1cm4gTlVNOwogICAgIH0KIApAQCAtNDE1ODEsMTkgKzk3NDEwLDMyIEBACiAgIC8qIFJldHVybiBzaW5nbGUgY2hhcnMuICovCiAgIHJldHVybiBjOwogfQotCi1zdGF0aWMgaW50Ci1wb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKLXsKLSAgaW50IHJlcyA9IDE7Ci0gIGlmIChleHBvbmVudCA8IDApCi0gICAgZXhpdCAoMyk7Ci0gIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKLSAgICByZXMgKj0gYmFzZTsKLSAgcmV0dXJuIHJlczsKLX0KK19BVEVPRgogCiAKK2NhdCA+Y2FsYy1tYWluLmMgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworCisjaW5jbHVkZSAiY2FsYy5oIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjIHVuZGVmIGFsYXJtCisjIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLworI2VuZGlmCisKKworCitzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKK2ludCBnbG9iYWxfY291bnQgPSAwOworCisvKiBBIEMgbWFpbiBmdW5jdGlvbi4gICovCiBpbnQKIG1haW4gKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKQEAgLTQxNjE3LDEyICs5NzQ1OSwxMiBAQAogICAgICAgcmV0dXJuIDM7CiAgICAgfQogCi0gIHl5ZGVidWcgPSAxOwotICBzdGF0dXMgPSB5eXBhcnNlICgpOwotICBpZiAoZ2xvYmFsX3Jlc3VsdCAhPSByZXN1bHQpCi0gICAgYWJvcnQgKCk7Ci0gIGlmIChnbG9iYWxfY291bnQgIT0gY291bnQpCi0gICAgYWJvcnQgKCk7CisgIGNhbGNkZWJ1ZyA9IDE7CisgIHN0YXR1cyA9IGNhbGNwYXJzZSAoKTsKKyAgaWYgKGZjbG9zZSAoaW5wdXQpKQorICAgIHBlcnJvciAoImZjbG9zZSIpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOwogICByZXR1cm4gc3RhdHVzOwogfQogX0FURU9GCkBAIC00MTYzMSw1NSArOTc0NzMsMTc4IEBACiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjAxOiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgotZWNobyBjYWxjLmF0OjYwMSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gY2FsYy5jIGNhbGMueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwMTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjY1NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiICJjYWxjLmF0OjY1NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjU0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTQ6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjY1NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0OiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTQiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSAgICRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MDE6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgXCRMSUJTIgotZWNobyBjYWxjLmF0OjYwMSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jICRMSUJTICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjAxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisgICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTQ6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJjYWxjLmF0OjY1NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTQ6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgY2FsYy1sZXguYyBjYWxjLW1haW4uYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBjYWxjLWxleC5jIGNhbGMtbWFpbi5jICRMSUJTIiAiY2FsYy5hdDo2NTQiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jIGNhbGMtbGV4LmMgY2FsYy1tYWluLmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0OiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuYworIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2NTQiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuYworCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0OiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuaAorIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2NTQiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuaAorCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAjIFRlc3QgdGhlIHByaW9yaXRpZXMuCkBAIC00MTY5OSw2MiArOTc2NjQsNjYgQEAKICgyXjIpXjMgPSA2NAogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MDE6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MDEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NTQiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKIAogIyBTb21lIHN5bnRheCBlcnJvcnMuCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLTAgMAorMSAyCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwMTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYwMSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwMTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY1NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU0IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC00MTc2NSwxOCArOTc3MzQsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTQxNzg0LDYwICs5Nzc1NSw1MCBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwMTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2MDEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjAxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMS8vMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MDE6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MDEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NTQiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNDE4NDgsMTggKzk3ODA5LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC00MTg2Nyw2MCArOTc4MzAsNTAgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MDE6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjAxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwMTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTQ6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKIGVycm9yCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwMTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYwMSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwMTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY1NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU0IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC00MTkzMSwxOCArOTc4ODQsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICR1bmRlZmluZWQKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICR1bmRlZmluZWQKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtNDE5NTAsNjAgKzk3OTA1LDUwIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjAxOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYwMSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTQiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiAxID0gMiA9IDMKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjAxOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjAxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjAxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTQ6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjU0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTQ6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTQyMDE0LDE4ICs5Nzk1OSwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS42OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCisxLjc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPScKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtNDIwMzMsMzAgKzk3OTgwLDE4IEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjAxOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYwMSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTQiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCkBAIC00MjA2NCwzMCArOTc5OTksMzIgQEAKICsxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwMTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYwMSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwMTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY1NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU0IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC00MjA5OCwxOCArOTgwMzUsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTIuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTQyMTE3LDU3ICs5ODA1Niw0NyBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwMTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2MDEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjAxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKICMgRXhlcmNpc2UgZXJyb3IgbWVzc2FnZXMgd2l0aCBFT0Y6IHdvcmsgb24gYW4gZW1wdHkgZmlsZS4KLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MDE6IFwkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiCi1lY2hvIGNhbGMuYXQ6NjAxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwMTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0OiAgXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIgImNhbGMuYXQ6NjU0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU0IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC00MjE3OCwxOCArOTgxMDcsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTQyMTk3LDMwICs5ODEyOCwxOCBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwMTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2MDEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjAxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIApAQCAtNDIyMzUsOCArOTgxNTQsOCBAQAogIwogIyAtIHRlc3QgdGhlIGFjdGlvbiBhc3NvY2lhdGVkIHRvIGBlcnJvcicKICMKLSMgLSBjaGVjayB0aGUgbG9vay1haGVhZCB0aGF0IHRyaWdnZXJzIGFuIGVycm9yIGlzIG5vdCBkaXNjYXJkZWQKLSMgICB3aGVuIHdlIGVudGVyIGVycm9yIHJlY292ZXJ5LiAgQmVsb3csIHRoZSBsb29rLWFoZWFkIGNhdXNpbmcgdGhlCisjIC0gY2hlY2sgdGhlIGxvb2thaGVhZCB0aGF0IHRyaWdnZXJzIGFuIGVycm9yIGlzIG5vdCBkaXNjYXJkZWQKKyMgICB3aGVuIHdlIGVudGVyIGVycm9yIHJlY292ZXJ5LiAgQmVsb3csIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUKICMgICBmaXJzdCBlcnJvciBpcyAiKSIsIHdoaWNoIGlzIG5lZWRlZCB0byByZWNvdmVyIGZyb20gdGhlIGVycm9yIGFuZAogIyAgIHByb2R1Y2UgdGhlICIwIiB0aGF0IHRyaWdnZXJzIHRoZSAiMCAhPSAxIiBlcnJvci4KICMKQEAgLTQyMjQ0LDMwICs5ODE2MywzMiBAQAogKCkgKyAoMSArIDEgKyAxICspICsgKCogKiAqKSArICgxICogMiAqICopID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MDE6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MDEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NTQiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNDIyNzgsMjEgKzk4MTk5LDIzIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuNDA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xODogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4yMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS40MTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogY2FsYzogZXJyb3I6IDQ0NDQgIT0gMQogX0FURU9GCiAKQEAgLTQyMzAxLDYzICs5ODIyNCw1MyBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwMTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2MDEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjAxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAogIyBUaGUgc2FtZSwgYnV0IHRoaXMgdGltZSBleGVyY2lzaW5nIGV4cGxpY2l0bHkgdHJpZ2dlcmVkIHN5bnRheCBlcnJvcnMuCi0jIFBPU0lYIHNheXMgdGhlIGxvb2stYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCisjIFBPU0lYIHNheXMgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotKCEpICsgKDAgMCkgPSAxCisoISkgKyAoMSAyKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjAxOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjAxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjAxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTQ6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjU0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTQ6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTQyMzY4LDE4ICs5ODI4MSwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS45OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCiBfQVRFT0YKIApAQCAtNDIzODgsNjAgKzk4MzAzLDUwIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjAxOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYwMSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTQiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0oLSAqKSArICgwIDApID0gMQorKC0gKikgKyAoMSAyKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjAxOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjAxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjAxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTQ6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjU0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTQ6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTQyNDUyLDE5ICs5ODM1NywyMSBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjExOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjQ6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKIGNhbGM6IGVycm9yOiAyMjIyICE9IDEKIF9BVEVPRgogCkBAIC00MjQ3Myw5NCArOTgzODAsMTE1IEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjAxOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYwMSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCiAKLSRhdF90cmFjZW9uCisKKyMgQ2hlY2sgdGhhdCB5eWVycm9rIHdvcmtzIHByb3Blcmx5OiBzZWNvbmQgZXJyb3IgaXMgbm90IHJlcG9ydGVkLAorIyB0aGlyZCBhbmQgZm91cnRoIGFyZS4gIFBhcnNlIHN0YXR1cyBpcyBzdWNjZXNmdWxsLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoKiAqKSArICgqKSArICgqKQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NTQiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTY6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTQ6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKIAogCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwotCi0gIDk2ICkgIyA5Ni4gY2FsYy5hdDo2MDM6IENhbGN1bGF0b3IgJWdsci1wYXJzZXIgJXB1cmUtcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MKLSAgICBhdF9zZXR1cF9saW5lPSdjYWxjLmF0OjYwMycKLSAgICBhdF9kZXNjPSdDYWxjdWxhdG9yICVnbHItcGFyc2VyICVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjJwotICAgICRhdF9xdWlldCAkRUNIT19OICIgOTY6IENhbGN1bGF0b3IgJWdsci1wYXJzZXIgJXB1cmUtcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiOTYuIGNhbGMuYXQ6NjAzOiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCi0KLQotCi0KLQotCi0KLQotIyBVc2luZyB5YWNjLmM/Ci0KLQotCi0KLQotCi0KLSMgeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWYgJWxvY2F0aW9uICYgJXB1cmUgJiAoJWdsciBvciAlcGFyc2UtcGFyYW0pLgotCi0jIHl5ZXJyb3IgYWx3YXlzIHNlZXMgdGhlIGxvY2F0aW9ucyAod2hlbiBhY3RpdmF0ZWQpLCBleGNlcHQgaWYKLSMgeWFjYyAmIHB1cmUgJiAhcGFyYW0uCi0KLQotIyBUaGUgaW50ZXJmYWNlIGlzIHB1cmU6IGVpdGhlciBiZWNhdXNlICVwdXJlLXBhcnNlciwgb3IgYmVjYXVzZSB3ZQotIyBhcmUgdXNpbmcgdGhlIEMrKyBwYXJzZXJzLgotCi0KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjMwCisjQVRfU1RBUlRfMjMxCithdF9mbl9ncm91cF9iYW5uZXIgMjMxICdjYWxjLmF0OjY1NScgXAorICAiQ2FsY3VsYXRvciAlZ2xyLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlZGVmaW5lIGFwaS5wcmVmaXggXCJjYWxjXCIgJXZlcmJvc2UgJXlhY2MiICIiIDEyCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjMxLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogCkBAIC00MjU3Miw1OSArOTg1MDAsNTIgQEAKIAogCiBjYXQgPmNhbGMueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKIC8qIEluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3ItLWNhbGMgKi8KLSVnbHItcGFyc2VyICVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjCislZ2xyLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlZGVmaW5lIGFwaS5wcmVmaXggImNhbGMiICV2ZXJib3NlICV5YWNjCiAKLSV7Ci0jaW5jbHVkZSA8c3RkaW8uaD4KKyVjb2RlIHJlcXVpcmVzCit7CiAKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpZiBIQVZFX1VOSVNURF9ICi0jIGluY2x1ZGUgPHVuaXN0ZC5oPgotI2Vsc2UKLSMgdW5kZWYgYWxhcm0KLSMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCi0jZW5kaWYKLSNpbmNsdWRlIDxjdHlwZS5oPgotI2RlZmluZSBVU0UoVmFyKQotCi0vKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLwotdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Ci0KLXN0YXRpYyBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKLXN0YXRpYyBpbnQgZ2xvYmFsX2NvdW50ID0gMDsKLSV9CisgIC8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCisgIHR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOworfQogCiAvKiBFeGVyY2lzZSAldW5pb24uICovCiAldW5pb24KIHsKICAgc2VtYW50aWNfdmFsdWUgaXZhbDsKIH07CislcHJpbnRlciB7IGZwcmludGYgKHl5b3V0cHV0LCAiJWQiLCAkJCk7IH0gPGl2YWw+OwogCi0leworJWNvZGUgcHJvdmlkZXMKK3sKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIC8qIFRoZSBpbnB1dC4gICovCisgIGV4dGVybiBGSUxFICppbnB1dDsKKyAgZXh0ZXJuIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQ7CisgIGV4dGVybiBpbnQgZ2xvYmFsX2NvdW50OworfQorCislY29kZQoreworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2RlZmluZSBVU0UoVmFyKQorCitGSUxFICppbnB1dDsKIHN0YXRpYyBpbnQgcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpOwotLyogeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWY6Ci0gICAtICVsb2NhdGlvbiAmICVwdXJlICYgJWdscgotICAgLSAlbG9jYXRpb24gJiAlcHVyZSAmICV5YWNjICYgJXBhcnNlLXBhcmFtLiAqLwotc3RhdGljIHZvaWQgeXllcnJvciAoWVlMVFlQRSAqbGxvY3AsCiAKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMKLSAgICAgICAgICAgICAgICAgICAgICk7Ci1zdGF0aWMgaW50IHl5bGV4IChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApOwotc3RhdGljIGludCBnZXRfY2hhciAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKTsKLXN0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCwgIGludCBjKTsKLSV9CitzdGF0aWMgdm9pZCBjYWxjZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworaW50IGNhbGNsZXggKHZvaWQpOworfQogCiAKIApAQCAtNDI2MzMsNyArOTg1NTQsNyBAQAogJXRva2VuIDxpdmFsPiBOVU0gIm51bWJlciIKICV0eXBlICA8aXZhbD4gZXhwCiAKLSVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbgkgICAgICAgKi8KKyVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbiAgICAgICAgICAgICovCiAlbGVmdCAnLScgJysnCiAlbGVmdCAnKicgJy8nCiAlbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLwpAQCAtNDI2NjYsMzQgKzk4NTg3LDEzNjQgQEAKIHwgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSAtJDI7ICAgICAgICAgICAgfQogfCBleHAgJ14nIGV4cCAgICAgICAgeyAkJCA9IHBvd2VyICgkMSwgJDMpOyB9CiB8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgIH0KLXwgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyAgICAgICAgICAgfQorfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7IHl5ZXJyb2s7ICB9CiB8ICchJyAgICAgICAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KIHwgJy0nIGVycm9yICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQogOwogJSUKLS8qIFRoZSBpbnB1dC4gICovCi1zdGF0aWMgRklMRSAqaW5wdXQ7CiAKLXN0YXRpYyB2b2lkCi15eWVycm9yIChZWUxUWVBFICpsbG9jcCwKLQotICAgICAgICAgY29uc3QgY2hhciAqcykKK3N0YXRpYyBpbnQKK3Bvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQogewotCi0KLSAgZnByaW50ZiAoc3RkZXJyLCAiJWQuJWQiLAotICAgICAgICAgICAoKmxsb2NwKS5maXJzdF9saW5lLCAoKmxsb2NwKS5maXJzdF9jb2x1bW4pOwotICBpZiAoKCpsbG9jcCkuZmlyc3RfbGluZSAhPSAoKmxsb2NwKS5sYXN0X2xpbmUpCi0gICAgZnByaW50ZiAoc3RkZXJyLCAiLSVkLiVkIiwKLQkgICAgICgqbGxvY3ApLmxhc3RfbGluZSwgICgqbGxvY3ApLmxhc3RfY29sdW1uIC0gMSk7Ci0gIGVsc2UgaWYgKCgqbGxvY3ApLmZpcnN0X2NvbHVtbiAhPSAoKmxsb2NwKS5sYXN0X2NvbHVtbiAtIDEpCi0gICAgZnByaW50ZiAoc3RkZXJyLCAiLSVkIiwKLQkgICAgICgqbGxvY3ApLmxhc3RfY29sdW1uIC0gMSk7Ci0gIGZwcmludGYgKHN0ZGVyciwgIjogIik7Ci0gIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBzKTsKKyAgaW50IHJlcyA9IDE7CisgIGFzc2VydCAoMCA8PSBleHBvbmVudCk7CisgIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKKyAgICByZXMgKj0gYmFzZTsKKyAgcmV0dXJuIHJlczsKIH0KIAogCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIGNhbGNlcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgWVlfTE9DQVRJT05fUFJJTlQgKHN0ZGVyciwgKGNhbGNsbG9jKSk7CisgIGZwcmludGYgKHN0ZGVyciwgIjogIik7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorX0FURU9GCisKKworCitjYXQgPmNhbGMtbGV4LmMgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworCisjaW5jbHVkZSAiY2FsYy5oIgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworaW50IGNhbGNsZXggKHZvaWQpOworc3RhdGljIGludCBnZXRfY2hhciAodm9pZCk7CitzdGF0aWMgdm9pZCB1bmdldF9jaGFyICggaW50IGMpOworCisKK3N0YXRpYyBDQUxDTFRZUEUgbGFzdF95eWxsb2M7CisKK3N0YXRpYyBpbnQKK2dldF9jaGFyICh2b2lkKQoreworICBpbnQgcmVzID0gZ2V0YyAoaW5wdXQpOworICA7CisKKyAgbGFzdF95eWxsb2MgPSAoY2FsY2xsb2MpOworICBpZiAocmVzID09ICdcbicpCisgICAgeworICAgICAgKGNhbGNsbG9jKS5sYXN0X2xpbmUrKzsKKyAgICAgIChjYWxjbGxvYykubGFzdF9jb2x1bW4gPSAxOworICAgIH0KKyAgZWxzZQorICAgIChjYWxjbGxvYykubGFzdF9jb2x1bW4rKzsKKworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZAordW5nZXRfY2hhciAoIGludCBjKQoreworICA7CisKKyAgLyogV3Jvbmcgd2hlbiBDID09IGBcbicuICovCisgIChjYWxjbGxvYykgPSBsYXN0X3l5bGxvYzsKKworICB1bmdldGMgKGMsIGlucHV0KTsKK30KKworc3RhdGljIGludAorcmVhZF9zaWduZWRfaW50ZWdlciAodm9pZCkKK3sKKyAgaW50IGMgPSBnZXRfY2hhciAoKTsKKyAgaW50IHNpZ24gPSAxOworICBpbnQgbiA9IDA7CisKKyAgOworICBpZiAoYyA9PSAnLScpCisgICAgeworICAgICAgYyA9IGdldF9jaGFyICgpOworICAgICAgc2lnbiA9IC0xOworICAgIH0KKworICB3aGlsZSAoaXNkaWdpdCAoYykpCisgICAgeworICAgICAgbiA9IDEwICogbiArIChjIC0gJzAnKTsKKyAgICAgIGMgPSBnZXRfY2hhciAoKTsKKyAgICB9CisKKyAgdW5nZXRfY2hhciAoIGMpOworCisgIHJldHVybiBzaWduICogbjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgTGV4aWNhbCBhbmFseXplciByZXR1cm5zIGFuIGludGVnZXIgb24gdGhlIHN0YWNrIGFuZCB0aGUgdG9rZW4gfAorfCBOVU0sIG9yIHRoZSBBU0NJSSBjaGFyYWN0ZXIgcmVhZCBpZiBub3QgYSBudW1iZXIuICBTa2lwcyBhbGwgICB8Cit8IGJsYW5rcyBhbmQgdGFicywgcmV0dXJucyAwIGZvciBFT0YuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitpbnQgY2FsY2xleCAodm9pZCkKK3sKKyAgaW50IGM7CisgIC8qIFNraXAgY3VycmVudCB0b2tlbiwgdGhlbiB3aGl0ZSBzcGFjZXMuICAqLworICBkbworICAgIHsKKyAgICAgKGNhbGNsbG9jKS5maXJzdF9jb2x1bW4gPSAoY2FsY2xsb2MpLmxhc3RfY29sdW1uOworICAgICAgKGNhbGNsbG9jKS5maXJzdF9saW5lICAgPSAoY2FsY2xsb2MpLmxhc3RfbGluZTsKKworICAgIH0KKyAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKCkpID09ICcgJyB8fCBjID09ICdcdCcpOworCisgIC8qIHByb2Nlc3MgbnVtYmVycyAgICovCisgIGlmIChjID09ICcuJyB8fCBpc2RpZ2l0IChjKSkKKyAgICB7CisgICAgICB1bmdldF9jaGFyICggYyk7CisgICAgICAoY2FsY2x2YWwpLml2YWwgPSByZWFkX3NpZ25lZF9pbnRlZ2VyICgpOworICAgICAgcmV0dXJuIE5VTTsKKyAgICB9CisKKyAgLyogUmV0dXJuIGVuZC1vZi1maWxlLiAgKi8KKyAgaWYgKGMgPT0gRU9GKQorICAgIHJldHVybiBDQUxDX0VPRjsKKworICAvKiBSZXR1cm4gc2luZ2xlIGNoYXJzLiAqLworICByZXR1cm4gYzsKK30KK19BVEVPRgorCisKK2NhdCA+Y2FsYy1tYWluLmMgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworCisjaW5jbHVkZSAiY2FsYy5oIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjIHVuZGVmIGFsYXJtCisjIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLworI2VuZGlmCisKKworCitzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKK2ludCBnbG9iYWxfY291bnQgPSAwOworCisvKiBBIEMgbWFpbiBmdW5jdGlvbi4gICovCitpbnQKK21haW4gKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKyAgc2VtYW50aWNfdmFsdWUgcmVzdWx0ID0gMDsKKyAgaW50IGNvdW50ID0gMDsKKyAgaW50IHN0YXR1czsKKworICAvKiBUaGlzIHVzZWQgdG8gYmUgYWxhcm0gKDEwKSwgYnV0IHRoYXQgaXNuJ3QgZW5vdWdoIHRpbWUgZm9yCisgICAgIGEgSnVseSAxOTk1IHZpbnRhZ2UgREVDIEFscGhhc3RhdGlvbiAyMDAgNC8xMDAgc3lzdGVtLAorICAgICBhY2NvcmRpbmcgdG8gTmVsc29uIEguIEYuIEJlZWJlLiAgMTAwIHNlY29uZHMgaXMgZW5vdWdoLiAgKi8KKyAgYWxhcm0gKDEwMCk7CisKKyAgaWYgKGFyZ2MgPT0gMikKKyAgICBpbnB1dCA9IGZvcGVuIChhcmd2WzFdLCAiciIpOworICBlbHNlCisgICAgaW5wdXQgPSBzdGRpbjsKKworICBpZiAoIWlucHV0KQorICAgIHsKKyAgICAgIHBlcnJvciAoYXJndlsxXSk7CisgICAgICByZXR1cm4gMzsKKyAgICB9CisKKyAgY2FsY2RlYnVnID0gMTsKKyAgc3RhdHVzID0gY2FsY3BhcnNlICgpOworICBpZiAoZmNsb3NlIChpbnB1dCkpCisgICAgcGVycm9yICgiZmNsb3NlIik7CisgIGFzc2VydCAoZ2xvYmFsX3Jlc3VsdCA9PSByZXN1bHQpOworICBhc3NlcnQgKGdsb2JhbF9jb3VudCA9PSBjb3VudCk7CisgIHJldHVybiBzdGF0dXM7Cit9CitfQVRFT0YKKworCisKKworCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjY1NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiICJjYWxjLmF0OjY1NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjU1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTU6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjY1NSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1OiBiaXNvbiAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTUiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiY2FsYy5hdDo2NTUiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jIGNhbGMtbGV4LmMgY2FsYy1tYWluLmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgY2FsYy1sZXguYyBjYWxjLW1haW4uYyAkTElCUyIgImNhbGMuYXQ6NjU1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBjYWxjLWxleC5jIGNhbGMtbWFpbi5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1OiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuYworIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2NTUiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuYworCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1OiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuaAorIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2NTUiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuaAorCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIFRlc3QgdGhlIHByaW9yaXRpZXMuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEgKyAyICogMyA9IDcKKzEgKyAyICogLTMgPSAtNQorCistMV4yID0gLTEKKygtMSleMiA9IDEKKworLS0tMSA9IC0xCisKKzEgLSAyIC0gMyA9IC00CisxIC0gKDIgLSAzKSA9IDIKKworMl4yXjMgPSAyNTYKKygyXjIpXjMgPSA2NAorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NTUiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisjIFNvbWUgc3ludGF4IGVycm9ycy4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMSAyCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY1NSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU1IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMS8vMgorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NTUiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTU6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKK2Vycm9yCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY1NSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU1IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICR1bmRlZmluZWQKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTU6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEgPSAyID0gMworX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NTUiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTU6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKworKzEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTU6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjU1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTUiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1OiAgXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIgImNhbGMuYXQ6NjU1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU1IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBFeGVyY2lzZSB0aGUgZXJyb3IgdG9rZW46IHdpdGhvdXQgaXQsIHdlIGRpZSBhdCB0aGUgZmlyc3QgZXJyb3IsCisjIGhlbmNlIGJlIHN1cmUgdG8KKyMKKyMgLSBoYXZlIHNldmVyYWwgZXJyb3JzIHdoaWNoIGV4ZXJjaXNlIGRpZmZlcmVudCBzaGlmdC9kaXNjYXJkaW5ncworIyAgIC0gKCk6IG5vdGhpbmcgdG8gcG9wLCBub3RoaW5nIHRvIGRpc2NhcmQKKyMgICAtICgxICsgMSArIDEgKyk6IGEgbG90IHRvIHBvcCwgbm90aGluZyB0byBkaXNjYXJkCisjICAgLSAoKiAqICopOiBub3RoaW5nIHRvIHBvcCwgYSBsb3QgdG8gZGlzY2FyZAorIyAgIC0gKDEgKyAyICogKik6IHNvbWUgdG8gcG9wIGFuZCBkaXNjYXJkCisjCisjIC0gdGVzdCB0aGUgYWN0aW9uIGFzc29jaWF0ZWQgdG8gYGVycm9yJworIworIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCisjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKKyMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCisjCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygpICsgKDEgKyAxICsgMSArKSArICgqICogKikgKyAoMSAqIDIgKiAqKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTU6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjU1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjIzOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjQxOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitjYWxjOiBlcnJvcjogNDQ0NCAhPSAxCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTUiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIFRoZSBzYW1lLCBidXQgdGhpcyB0aW1lIGV4ZXJjaXNpbmcgZXhwbGljaXRseSB0cmlnZ2VyZWQgc3ludGF4IGVycm9ycy4KKyMgUE9TSVggc2F5cyB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoISkgKyAoMSAyKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTU6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjU1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4xMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorY2FsYzogZXJyb3I6IDIyMjIgIT0gMQorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKC0gKikgKyAoMSAyKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTU6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjU1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS40OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCitjYWxjOiBlcnJvcjogMjIyMiAhPSAxCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTUiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIENoZWNrIHRoYXQgeXllcnJvayB3b3JrcyBwcm9wZXJseTogc2Vjb25kIGVycm9yIGlzIG5vdCByZXBvcnRlZCwKKyMgdGhpcmQgYW5kIGZvdXJ0aCBhcmUuICBQYXJzZSBzdGF0dXMgaXMgc3VjY2VzZnVsbC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCogKikgKyAoKikgKyAoKikKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTU6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjU1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE2OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU1OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTUiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yMzEKKyNBVF9TVEFSVF8yMzIKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyMzIgJ2NhbGMuYXQ6NjU3JyBcCisgICJDYWxjdWxhdG9yICVnbHItcGFyc2VyICVkZWZpbmUgYXBpLnB1cmUgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVsb2NhdGlvbnMgJWRlZmluZXMgJW5hbWUtcHJlZml4IFwiY2FsY1wiICV2ZXJib3NlICV5YWNjIiAiIiAxMgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjIzMi4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworCisKKworCisKKworCitjYXQgPmNhbGMueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisvKiBJbmZpeCBub3RhdGlvbiBjYWxjdWxhdG9yLS1jYWxjICovCislZ2xyLXBhcnNlciAlZGVmaW5lIGFwaS5wdXJlICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbG9jYXRpb25zICVkZWZpbmVzICVuYW1lLXByZWZpeCAiY2FsYyIgJXZlcmJvc2UgJXlhY2MKKworJWNvZGUgcmVxdWlyZXMKK3sKKworICAvKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLworICB0eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKK30KKworLyogRXhlcmNpc2UgJXVuaW9uLiAqLworJXVuaW9uCit7CisgIHNlbWFudGljX3ZhbHVlIGl2YWw7Cit9OworJXByaW50ZXIgeyBmcHJpbnRmICh5eW91dHB1dCwgIiVkIiwgJCQpOyB9IDxpdmFsPjsKKworJWNvZGUgcHJvdmlkZXMKK3sKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIC8qIFRoZSBpbnB1dC4gICovCisgIGV4dGVybiBGSUxFICppbnB1dDsKKyAgZXh0ZXJuIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQ7CisgIGV4dGVybiBpbnQgZ2xvYmFsX2NvdW50OworfQorCislY29kZQoreworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2RlZmluZSBVU0UoVmFyKQorCitGSUxFICppbnB1dDsKK3N0YXRpYyBpbnQgcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpOworCitzdGF0aWMgdm9pZCBjYWxjZXJyb3IgKFlZTFRZUEUgY29uc3QgKiBjb25zdCBsbG9jcCwgIGNvbnN0IGNoYXIgKm1zZyk7CitpbnQgY2FsY2xleCAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKTsKK30KKworCisKKy8qIEJpc29uIERlY2xhcmF0aW9ucyAqLworJXRva2VuIENBTENfRU9GIDAgImVuZCBvZiBpbnB1dCIKKyV0b2tlbiA8aXZhbD4gTlVNICJudW1iZXIiCisldHlwZSAgPGl2YWw+IGV4cAorCislbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24gICAgICAgICAgICAqLworJWxlZnQgJy0nICcrJworJWxlZnQgJyonICcvJworJWxlZnQgTkVHICAgICAvKiBuZWdhdGlvbi0tdW5hcnkgbWludXMgKi8KKyVyaWdodCAnXicgICAgLyogZXhwb25lbnRpYXRpb24gICAgICAgICovCisKKy8qIEdyYW1tYXIgZm9sbG93cyAqLworJSUKK2lucHV0OgorICBsaW5lCit8IGlucHV0IGxpbmUgICAgICAgICB7ICB9Cis7CisKK2xpbmU6CisgICdcbicKK3wgZXhwICdcbicgICAgICAgICAgIHsgVVNFICgkMSk7IH0KKzsKKworZXhwOgorICBOVU0gICAgICAgICAgICAgICAgeyAkJCA9ICQxOyAgICAgICAgICAgICB9Cit8IGV4cCAnPScgZXhwCisgIHsKKyAgICBpZiAoJDEgIT0gJDMpCisgICAgICBmcHJpbnRmIChzdGRlcnIsICJjYWxjOiBlcnJvcjogJWQgIT0gJWRcbiIsICQxLCAkMyk7CisgICAgJCQgPSAkMTsKKyAgfQorfCBleHAgJysnIGV4cCAgICAgICAgeyAkJCA9ICQxICsgJDM7ICAgICAgICB9Cit8IGV4cCAnLScgZXhwICAgICAgICB7ICQkID0gJDEgLSAkMzsgICAgICAgIH0KK3wgZXhwICcqJyBleHAgICAgICAgIHsgJCQgPSAkMSAqICQzOyAgICAgICAgfQorfCBleHAgJy8nIGV4cCAgICAgICAgeyAkJCA9ICQxIC8gJDM7ICAgICAgICB9Cit8ICctJyBleHAgICVwcmVjIE5FRyB7ICQkID0gLSQyOyAgICAgICAgICAgIH0KK3wgZXhwICdeJyBleHAgICAgICAgIHsgJCQgPSBwb3dlciAoJDEsICQzKTsgfQorfCAnKCcgZXhwICcpJyAgICAgICAgeyAkJCA9ICQyOyAgICAgICAgICAgICB9Cit8ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgeXllcnJvazsgIH0KK3wgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQorfCAnLScgZXJyb3IgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9Cis7CislJQorCitzdGF0aWMgaW50Citwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKK3sKKyAgaW50IHJlcyA9IDE7CisgIGFzc2VydCAoMCA8PSBleHBvbmVudCk7CisgIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKKyAgICByZXMgKj0gYmFzZTsKKyAgcmV0dXJuIHJlczsKK30KKworCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIGNhbGNlcnJvciAoWVlMVFlQRSBjb25zdCAqIGNvbnN0IGxsb2NwLCAgY29uc3QgY2hhciAqbXNnKQoreworICBZWV9MT0NBVElPTl9QUklOVCAoc3RkZXJyLCAoKmxsb2NwKSk7CisgIGZwcmludGYgKHN0ZGVyciwgIjogIik7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorX0FURU9GCisKKworCitjYXQgPmNhbGMtbGV4LmMgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworCisjaW5jbHVkZSAiY2FsYy5oIgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworaW50IGNhbGNsZXggKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCk7CitzdGF0aWMgaW50IGdldF9jaGFyIChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApOworc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwLCAgaW50IGMpOworCiAKIHN0YXRpYyBZWUxUWVBFIGxhc3RfeXlsbG9jOwogCkBAIC00MjcwNyw3ICs5OTk1OCw3IEBACiAgIGlmIChyZXMgPT0gJ1xuJykKICAgICB7CiAgICAgICAoKmxsb2NwKS5sYXN0X2xpbmUrKzsKLSAgICAgICgqbGxvY3ApLmxhc3RfY29sdW1uID0gMDsKKyAgICAgICgqbGxvY3ApLmxhc3RfY29sdW1uID0gMTsKICAgICB9CiAgIGVsc2UKICAgICAoKmxsb2NwKS5sYXN0X2NvbHVtbisrOwpAQCAtNDI3MTUsNyArOTk5NjYsNiBAQAogICByZXR1cm4gcmVzOwogfQogCi0KIHN0YXRpYyB2b2lkCiB1bmdldF9jaGFyIChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3AsICBpbnQgYykKIHsKQEAgLTQyNzUzLDQwICsxMDAwMDMsMjMgQEAKIH0KIAogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCBMZXhpY2FsIGFuYWx5emVyIHJldHVybnMgYW4gaW50ZWdlciBvbiB0aGUgc3RhY2sgYW5kIHRoZSB0b2tlbiB8CiB8IE5VTSwgb3IgdGhlIEFTQ0lJIGNoYXJhY3RlciByZWFkIGlmIG5vdCBhIG51bWJlci4gIFNraXBzIGFsbCAgIHwKIHwgYmxhbmtzIGFuZCB0YWJzLCByZXR1cm5zIDAgZm9yIEVPRi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQKLXl5bGV4IChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApCitpbnQgY2FsY2xleCAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKQogewotICBzdGF0aWMgaW50IGluaXQgPSAxOwogICBpbnQgYzsKLQotICBpZiAoaW5pdCkKLSAgICB7Ci0gICAgICBpbml0ID0gMDsKLQotICAgICAgKCpsbG9jcCkubGFzdF9jb2x1bW4gPSAwOwotICAgICAgKCpsbG9jcCkubGFzdF9saW5lID0gMTsKLQotICAgIH0KLQotCi0gKCpsbG9jcCkuZmlyc3RfY29sdW1uID0gKCpsbG9jcCkubGFzdF9jb2x1bW47Ci0gICgqbGxvY3ApLmZpcnN0X2xpbmUgICA9ICgqbGxvY3ApLmxhc3RfbGluZTsKLQotCi0gIC8qIFNraXAgd2hpdGUgc3BhY2UuICAqLwotICB3aGlsZSAoKGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKSkgPT0gJyAnIHx8IGMgPT0gJ1x0JykKKyAgLyogU2tpcCBjdXJyZW50IHRva2VuLCB0aGVuIHdoaXRlIHNwYWNlcy4gICovCisgIGRvCiAgICAgewogICAgICAoKmxsb2NwKS5maXJzdF9jb2x1bW4gPSAoKmxsb2NwKS5sYXN0X2NvbHVtbjsKICAgICAgICgqbGxvY3ApLmZpcnN0X2xpbmUgICA9ICgqbGxvY3ApLmxhc3RfbGluZTsKIAogICAgIH0KKyAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCkpID09ICcgJyB8fCBjID09ICdcdCcpOwogCiAgIC8qIHByb2Nlc3MgbnVtYmVycyAgICovCiAgIGlmIChjID09ICcuJyB8fCBpc2RpZ2l0IChjKSkKQEAgLTQyODAzLDE5ICsxMDAwMzYsMzIgQEAKICAgLyogUmV0dXJuIHNpbmdsZSBjaGFycy4gKi8KICAgcmV0dXJuIGM7CiB9Ci0KLXN0YXRpYyBpbnQKLXBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQotewotICBpbnQgcmVzID0gMTsKLSAgaWYgKGV4cG9uZW50IDwgMCkKLSAgICBleGl0ICgzKTsKLSAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQotICAgIHJlcyAqPSBiYXNlOwotICByZXR1cm4gcmVzOwotfQorX0FURU9GCiAKIAorY2F0ID5jYWxjLW1haW4uYyA8PCdfQVRFT0YnCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCisKKyNpbmNsdWRlICJjYWxjLmgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2Vsc2UKKyMgdW5kZWYgYWxhcm0KKyMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCisjZW5kaWYKKworCisKK3NlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOworaW50IGdsb2JhbF9jb3VudCA9IDA7CisKKy8qIEEgQyBtYWluIGZ1bmN0aW9uLiAgKi8KIGludAogbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewpAQCAtNDI4MzksMTIgKzEwMDA4NSwxMiBAQAogICAgICAgcmV0dXJuIDM7CiAgICAgfQogCi0gIHl5ZGVidWcgPSAxOwotICBzdGF0dXMgPSB5eXBhcnNlICgpOwotICBpZiAoZ2xvYmFsX3Jlc3VsdCAhPSByZXN1bHQpCi0gICAgYWJvcnQgKCk7Ci0gIGlmIChnbG9iYWxfY291bnQgIT0gY291bnQpCi0gICAgYWJvcnQgKCk7CisgIGNhbGNkZWJ1ZyA9IDE7CisgIHN0YXR1cyA9IGNhbGNwYXJzZSAoKTsKKyAgaWYgKGZjbG9zZSAoaW5wdXQpKQorICAgIHBlcnJvciAoImZjbG9zZSIpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOwogICByZXR1cm4gc3RhdHVzOwogfQogX0FURU9GCkBAIC00Mjg1Myw1NSArMTAwMDk5LDE3OCBAQAogCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwMzogYmlzb24gLW8gY2FsYy5jIGNhbGMueSIKLWVjaG8gY2FsYy5hdDo2MDMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmMgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2NTciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmMgY2FsYy55IiAiY2FsYy5hdDo2NTciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjY1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2NTciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NzogYmlzb24gLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCi0gICAkYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjAzOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jIFwkTElCUyIKLWVjaG8gY2FsYy5hdDo2MDMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyAkTElCUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwMzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgorICAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiY2FsYy5hdDo2NTciCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jIGNhbGMtbGV4LmMgY2FsYy1tYWluLmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgY2FsYy1sZXguYyBjYWxjLW1haW4uYyAkTElCUyIgImNhbGMuYXQ6NjU3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBjYWxjLWxleC5jIGNhbGMtbWFpbi5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NzogXCRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCBcIlwkLjoge1wkX31cXG5cIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCBcJC4gPT0gMSkgJiYgL15cXHMqXCQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciBcIm1haW50XCIuCisgICAgICAgICMgfHwgL1xcc1wkLworICAgICAgICApJyBjYWxjLmMKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjU3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmMKKworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NzogXCRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCBcIlwkLjoge1wkX31cXG5cIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCBcJC4gPT0gMSkgJiYgL15cXHMqXCQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciBcIm1haW50XCIuCisgICAgICAgICMgfHwgL1xcc1wkLworICAgICAgICApJyBjYWxjLmgKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjU3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmgKKworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogIyBUZXN0IHRoZSBwcmlvcml0aWVzLgpAQCAtNDI5MjEsNjIgKzEwMDI5MCw2NiBAQAogKDJeMileMyA9IDY0CiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwMzogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYwMyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwMzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogCiAjIFNvbWUgc3ludGF4IGVycm9ycy4KIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotMCAwCisxIDIKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjAzOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjAzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjAzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTc6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjU3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTciCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTQyOTg3LDE4ICsxMDAzNjAsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTQzMDA2LDYwICsxMDAzODEsNTAgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MDM6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjAzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwMzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTc6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKIDEvLzIKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjAzOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjAzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjAzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTc6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjU3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTciCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTQzMDcwLDE4ICsxMDA0MzUsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJy8nLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTQzMDg5LDYwICsxMDA0NTYsNTAgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MDM6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjAzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwMzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTc6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKIGVycm9yCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwMzogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYwMyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwMzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC00MzE1MywxOCArMTAwNTEwLDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkCisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTQzMTcyLDYwICsxMDA1MzEsNTAgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MDM6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjAzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwMzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTc6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKIDEgPSAyID0gMwogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MDM6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MDMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NzogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NTciCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1Nzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNDMyMzYsMTggKzEwMDU4NSwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS42OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCisxLjc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPScKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtNDMyNTUsMzAgKzEwMDYwNiwxOCBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwMzogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2MDMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjAzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwpAQCAtNDMyODYsMzAgKzEwMDYyNSwzMiBAQAogKzEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjAzOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjAzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjAzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTc6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjU3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTciCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTQzMzIwLDE4ICsxMDA2NjEsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTIuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTQzMzM5LDU3ICsxMDA2ODIsNDcgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MDM6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjAzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwMzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTc6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAjIEV4ZXJjaXNlIGVycm9yIG1lc3NhZ2VzIHdpdGggRU9GOiB3b3JrIG9uIGFuIGVtcHR5IGZpbGUuCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjAzOiBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgotZWNobyBjYWxjLmF0OjYwMyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NzogIFwkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiICJjYWxjLmF0OjY1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1Nzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNDM0MDAsMTggKzEwMDczMywyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtNDM0MTksMzAgKzEwMDc1NCwxOCBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwMzogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2MDMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjAzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIApAQCAtNDM0NTcsOCArMTAwNzgwLDggQEAKICMKICMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCiAjCi0jIC0gY2hlY2sgdGhlIGxvb2stYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCi0jICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZQorIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCiAjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKICMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCiAjCkBAIC00MzQ2NiwzMCArMTAwNzg5LDMyIEBACiAoKSArICgxICsgMSArIDEgKykgKyAoKiAqICopICsgKDEgKiAyICogKikgPSAxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwMzogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYwMyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwMzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC00MzUwMCwyMSArMTAwODI1LDIzIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuNDA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xODogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4yMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS40MTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogY2FsYzogZXJyb3I6IDQ0NDQgIT0gMQogX0FURU9GCiAKQEAgLTQzNTIzLDYzICsxMDA4NTAsNTMgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MDM6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjAzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwMzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTc6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKICMgVGhlIHNhbWUsIGJ1dCB0aGlzIHRpbWUgZXhlcmNpc2luZyBleHBsaWNpdGx5IHRyaWdnZXJlZCBzeW50YXggZXJyb3JzLgotIyBQT1NJWCBzYXlzIHRoZSBsb29rLWFoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgorIyBQT1NJWCBzYXlzIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLSghKSArICgwIDApID0gMQorKCEpICsgKDEgMikgPSAxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwMzogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYwMyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwMzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC00MzU5MCwxOCArMTAwOTA3LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjk6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKIGNhbGM6IGVycm9yOiAyMjIyICE9IDEKIF9BVEVPRgogCkBAIC00MzYxMCw2MCArMTAwOTI5LDUwIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjAzOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYwMyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTciCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0oLSAqKSArICgwIDApID0gMQorKC0gKikgKyAoMSAyKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjAzOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjAzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjAzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTc6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjU3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTciCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTQzNjc0LDE5ICsxMDA5ODMsMjEgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwotMS4xMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS40OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCiBfQVRFT0YKIApAQCAtNDM2OTUsOTQgKzEwMTAwNiwxMTUgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MDM6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjAzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwMzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTciCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKIAotJGF0X3RyYWNlb24KKworIyBDaGVjayB0aGF0IHl5ZXJyb2sgd29ya3MgcHJvcGVybHk6IHNlY29uZCBlcnJvciBpcyBub3QgcmVwb3J0ZWQsCisjIHRoaXJkIGFuZCBmb3VydGggYXJlLiAgUGFyc2Ugc3RhdHVzIGlzIHN1Y2Nlc2Z1bGwuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygqICopICsgKCopICsgKCopCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1NzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAogCiAKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Ci0KLSAgOTcgKSAjIDk3LiBjYWxjLmF0OjYwNTogQ2FsY3VsYXRvciAlZ2xyLXBhcnNlciAlcHVyZS1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVsb2NhdGlvbnMgJWRlZmluZXMgJW5hbWUtcHJlZml4PSJjYWxjIiAldmVyYm9zZSAleWFjYyAlcGFyc2UtcGFyYW0ge3NlbWFudGljX3ZhbHVlICpyZXN1bHR9ICVwYXJzZS1wYXJhbSB7aW50ICpjb3VudH0KLSAgICBhdF9zZXR1cF9saW5lPSdjYWxjLmF0OjYwNScKLSAgICBhdF9kZXNjPSdDYWxjdWxhdG9yICVnbHItcGFyc2VyICVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjICVwYXJzZS1wYXJhbSB7c2VtYW50aWNfdmFsdWUgKnJlc3VsdH0gJXBhcnNlLXBhcmFtIHtpbnQgKmNvdW50fScKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDk3OiBDYWxjdWxhdG9yICVnbHItcGFyc2VyICVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjICVwYXJzZS1wYXJhbSB7c2VtYW50aWNfdmFsdWUgKnJlc3VsdH0gJXBhcnNlLXBhcmFtIHtpbnQgKmNvdW50fSRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICI5Ny4gY2FsYy5hdDo2MDU6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KLQotCi0KLQotCi0KLQotCi0jIFVzaW5nIHlhY2MuYz8KLQotCi0KLQotCi0KLQotIyB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZiAlbG9jYXRpb24gJiAlcHVyZSAmICglZ2xyIG9yICVwYXJzZS1wYXJhbSkuCi0KLSMgeXllcnJvciBhbHdheXMgc2VlcyB0aGUgbG9jYXRpb25zICh3aGVuIGFjdGl2YXRlZCksIGV4Y2VwdCBpZgotIyB5YWNjICYgcHVyZSAmICFwYXJhbS4KLQotCi0jIFRoZSBpbnRlcmZhY2UgaXMgcHVyZTogZWl0aGVyIGJlY2F1c2UgJXB1cmUtcGFyc2VyLCBvciBiZWNhdXNlIHdlCi0jIGFyZSB1c2luZyB0aGUgQysrIHBhcnNlcnMuCi0KLQorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yMzIKKyNBVF9TVEFSVF8yMzMKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyMzMgJ2NhbGMuYXQ6NjU5JyBcCisgICJDYWxjdWxhdG9yICVnbHItcGFyc2VyICVkZWZpbmUgYXBpLnB1cmUgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVsb2NhdGlvbnMgJWRlZmluZXMgJW5hbWUtcHJlZml4IFwiY2FsY1wiICV2ZXJib3NlICV5YWNjICVwYXJzZS1wYXJhbSB7c2VtYW50aWNfdmFsdWUgKnJlc3VsdH0gJXBhcnNlLXBhcmFtIHtpbnQgKmNvdW50fSIgIiIgMTIKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyMzMuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiAKQEAgLTQzNzk0LDU5ICsxMDExMjYsNTIgQEAKIAogCiBjYXQgPmNhbGMueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKIC8qIEluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3ItLWNhbGMgKi8KLSVnbHItcGFyc2VyICVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjICVwYXJzZS1wYXJhbSB7c2VtYW50aWNfdmFsdWUgKnJlc3VsdH0gJXBhcnNlLXBhcmFtIHtpbnQgKmNvdW50fQorJWdsci1wYXJzZXIgJWRlZmluZSBhcGkucHVyZSAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlbmFtZS1wcmVmaXggImNhbGMiICV2ZXJib3NlICV5YWNjICVwYXJzZS1wYXJhbSB7c2VtYW50aWNfdmFsdWUgKnJlc3VsdH0gJXBhcnNlLXBhcmFtIHtpbnQgKmNvdW50fQogCi0lewotI2luY2x1ZGUgPHN0ZGlvLmg+CislY29kZSByZXF1aXJlcworewogCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaWYgSEFWRV9VTklTVERfSAotIyBpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbHNlCi0jIHVuZGVmIGFsYXJtCi0jIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLwotI2VuZGlmCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNkZWZpbmUgVVNFKFZhcikKLQotLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KLXR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOwotCi1zdGF0aWMgc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7Ci1zdGF0aWMgaW50IGdsb2JhbF9jb3VudCA9IDA7Ci0lfQorICAvKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLworICB0eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKK30KIAogLyogRXhlcmNpc2UgJXVuaW9uLiAqLwogJXVuaW9uCiB7CiAgIHNlbWFudGljX3ZhbHVlIGl2YWw7CiB9OworJXByaW50ZXIgeyBmcHJpbnRmICh5eW91dHB1dCwgIiVkIiwgJCQpOyB9IDxpdmFsPjsKIAotJXsKKyVjb2RlIHByb3ZpZGVzCit7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICAvKiBUaGUgaW5wdXQuICAqLworICBleHRlcm4gRklMRSAqaW5wdXQ7CisgIGV4dGVybiBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0OworICBleHRlcm4gaW50IGdsb2JhbF9jb3VudDsKK30KKworJWNvZGUKK3sKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNkZWZpbmUgVVNFKFZhcikKKworRklMRSAqaW5wdXQ7CiBzdGF0aWMgaW50IHBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KTsKLS8qIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmOgotICAgLSAlbG9jYXRpb24gJiAlcHVyZSAmICVnbHIKLSAgIC0gJWxvY2F0aW9uICYgJXB1cmUgJiAleWFjYyAmICVwYXJzZS1wYXJhbS4gKi8KLXN0YXRpYyB2b2lkIHl5ZXJyb3IgKFlZTFRZUEUgKmxsb2NwLAotICAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNfdmFsdWUgKnJlc3VsdCwgaW50ICpjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMKLSAgICAgICAgICAgICAgICAgICAgICk7Ci1zdGF0aWMgaW50IHl5bGV4IChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApOwotc3RhdGljIGludCBnZXRfY2hhciAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKTsKLXN0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCwgIGludCBjKTsKLSV9CisKK3N0YXRpYyB2b2lkIGNhbGNlcnJvciAoWVlMVFlQRSBjb25zdCAqIGNvbnN0IGxsb2NwLCBzZW1hbnRpY192YWx1ZSAqcmVzdWx0LCBpbnQgKmNvdW50LCAgY29uc3QgY2hhciAqbXNnKTsKK2ludCBjYWxjbGV4IChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApOworfQogCiAKIApAQCAtNDM4NTUsNyArMTAxMTgwLDcgQEAKICV0b2tlbiA8aXZhbD4gTlVNICJudW1iZXIiCiAldHlwZSAgPGl2YWw+IGV4cAogCi0lbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24JICAgICAgICovCislbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24gICAgICAgICAgICAqLwogJWxlZnQgJy0nICcrJwogJWxlZnQgJyonICcvJwogJWxlZnQgTkVHICAgICAvKiBuZWdhdGlvbi0tdW5hcnkgbWludXMgKi8KQEAgLTQzODg4LDM0ICsxMDEyMTMsNTMgQEAKIHwgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSAtJDI7ICAgICAgICAgICAgfQogfCBleHAgJ14nIGV4cCAgICAgICAgeyAkJCA9IHBvd2VyICgkMSwgJDMpOyB9CiB8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgIH0KLXwgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyAgICAgICAgICAgfQorfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7IHl5ZXJyb2s7ICB9CiB8ICchJyAgICAgICAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KIHwgJy0nIGVycm9yICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQogOwogJSUKLS8qIFRoZSBpbnB1dC4gICovCi1zdGF0aWMgRklMRSAqaW5wdXQ7CiAKLXN0YXRpYyB2b2lkCi15eWVycm9yIChZWUxUWVBFICpsbG9jcCwKLSAgICAgICAgIHNlbWFudGljX3ZhbHVlICpyZXN1bHQsIGludCAqY291bnQsCi0gICAgICAgICBjb25zdCBjaGFyICpzKQorc3RhdGljIGludAorcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpCiB7Ci0odm9pZCkgcmVzdWx0OyAodm9pZCkgY291bnQ7Ci0KLSAgZnByaW50ZiAoc3RkZXJyLCAiJWQuJWQiLAotICAgICAgICAgICAoKmxsb2NwKS5maXJzdF9saW5lLCAoKmxsb2NwKS5maXJzdF9jb2x1bW4pOwotICBpZiAoKCpsbG9jcCkuZmlyc3RfbGluZSAhPSAoKmxsb2NwKS5sYXN0X2xpbmUpCi0gICAgZnByaW50ZiAoc3RkZXJyLCAiLSVkLiVkIiwKLQkgICAgICgqbGxvY3ApLmxhc3RfbGluZSwgICgqbGxvY3ApLmxhc3RfY29sdW1uIC0gMSk7Ci0gIGVsc2UgaWYgKCgqbGxvY3ApLmZpcnN0X2NvbHVtbiAhPSAoKmxsb2NwKS5sYXN0X2NvbHVtbiAtIDEpCi0gICAgZnByaW50ZiAoc3RkZXJyLCAiLSVkIiwKLQkgICAgICgqbGxvY3ApLmxhc3RfY29sdW1uIC0gMSk7Ci0gIGZwcmludGYgKHN0ZGVyciwgIjogIik7Ci0gIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBzKTsKKyAgaW50IHJlcyA9IDE7CisgIGFzc2VydCAoMCA8PSBleHBvbmVudCk7CisgIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKKyAgICByZXMgKj0gYmFzZTsKKyAgcmV0dXJuIHJlczsKIH0KIAogCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIGNhbGNlcnJvciAoWVlMVFlQRSBjb25zdCAqIGNvbnN0IGxsb2NwLCBzZW1hbnRpY192YWx1ZSAqcmVzdWx0LCBpbnQgKmNvdW50LCAgY29uc3QgY2hhciAqbXNnKQoreworICBZWVVTRShyZXN1bHQpOworICBZWVVTRShjb3VudCk7CisgIFlZX0xPQ0FUSU9OX1BSSU5UIChzdGRlcnIsICgqbGxvY3ApKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiOiAiKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CitfQVRFT0YKKworCisKK2NhdCA+Y2FsYy1sZXguYyA8PCdfQVRFT0YnCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCisKKyNpbmNsdWRlICJjYWxjLmgiCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCitpbnQgY2FsY2xleCAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKTsKK3N0YXRpYyBpbnQgZ2V0X2NoYXIgKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCk7CitzdGF0aWMgdm9pZCB1bmdldF9jaGFyIChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3AsICBpbnQgYyk7CisKIAogc3RhdGljIFlZTFRZUEUgbGFzdF95eWxsb2M7CiAKQEAgLTQzOTI5LDcgKzEwMTI3Myw3IEBACiAgIGlmIChyZXMgPT0gJ1xuJykKICAgICB7CiAgICAgICAoKmxsb2NwKS5sYXN0X2xpbmUrKzsKLSAgICAgICgqbGxvY3ApLmxhc3RfY29sdW1uID0gMDsKKyAgICAgICgqbGxvY3ApLmxhc3RfY29sdW1uID0gMTsKICAgICB9CiAgIGVsc2UKICAgICAoKmxsb2NwKS5sYXN0X2NvbHVtbisrOwpAQCAtNDM5MzcsNyArMTAxMjgxLDYgQEAKICAgcmV0dXJuIHJlczsKIH0KIAotCiBzdGF0aWMgdm9pZAogdW5nZXRfY2hhciAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwLCAgaW50IGMpCiB7CkBAIC00Mzk3NSw0MCArMTAxMzE4LDIzIEBACiB9CiAKIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgTGV4aWNhbCBhbmFseXplciByZXR1cm5zIGFuIGludGVnZXIgb24gdGhlIHN0YWNrIGFuZCB0aGUgdG9rZW4gfAogfCBOVU0sIG9yIHRoZSBBU0NJSSBjaGFyYWN0ZXIgcmVhZCBpZiBub3QgYSBudW1iZXIuICBTa2lwcyBhbGwgICB8CiB8IGJsYW5rcyBhbmQgdGFicywgcmV0dXJucyAwIGZvciBFT0YuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50Ci15eWxleCAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKQoraW50IGNhbGNsZXggKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCkKIHsKLSAgc3RhdGljIGludCBpbml0ID0gMTsKICAgaW50IGM7Ci0KLSAgaWYgKGluaXQpCi0gICAgewotICAgICAgaW5pdCA9IDA7Ci0KLSAgICAgICgqbGxvY3ApLmxhc3RfY29sdW1uID0gMDsKLSAgICAgICgqbGxvY3ApLmxhc3RfbGluZSA9IDE7Ci0KLSAgICB9Ci0KLQotICgqbGxvY3ApLmZpcnN0X2NvbHVtbiA9ICgqbGxvY3ApLmxhc3RfY29sdW1uOwotICAoKmxsb2NwKS5maXJzdF9saW5lICAgPSAoKmxsb2NwKS5sYXN0X2xpbmU7Ci0KLQotICAvKiBTa2lwIHdoaXRlIHNwYWNlLiAgKi8KLSAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCkpID09ICcgJyB8fCBjID09ICdcdCcpCisgIC8qIFNraXAgY3VycmVudCB0b2tlbiwgdGhlbiB3aGl0ZSBzcGFjZXMuICAqLworICBkbwogICAgIHsKICAgICAgKCpsbG9jcCkuZmlyc3RfY29sdW1uID0gKCpsbG9jcCkubGFzdF9jb2x1bW47CiAgICAgICAoKmxsb2NwKS5maXJzdF9saW5lICAgPSAoKmxsb2NwKS5sYXN0X2xpbmU7CiAKICAgICB9CisgIHdoaWxlICgoYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApKSA9PSAnICcgfHwgYyA9PSAnXHQnKTsKIAogICAvKiBwcm9jZXNzIG51bWJlcnMgICAqLwogICBpZiAoYyA9PSAnLicgfHwgaXNkaWdpdCAoYykpCkBAIC00NDAyNSwxOSArMTAxMzUxLDMyIEBACiAgIC8qIFJldHVybiBzaW5nbGUgY2hhcnMuICovCiAgIHJldHVybiBjOwogfQotCi1zdGF0aWMgaW50Ci1wb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKLXsKLSAgaW50IHJlcyA9IDE7Ci0gIGlmIChleHBvbmVudCA8IDApCi0gICAgZXhpdCAoMyk7Ci0gIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKLSAgICByZXMgKj0gYmFzZTsKLSAgcmV0dXJuIHJlczsKLX0KK19BVEVPRgogCiAKK2NhdCA+Y2FsYy1tYWluLmMgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworCisjaW5jbHVkZSAiY2FsYy5oIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjIHVuZGVmIGFsYXJtCisjIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLworI2VuZGlmCisKKworCitzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKK2ludCBnbG9iYWxfY291bnQgPSAwOworCisvKiBBIEMgbWFpbiBmdW5jdGlvbi4gICovCiBpbnQKIG1haW4gKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKQEAgLTQ0MDYxLDEyICsxMDE0MDAsMTIgQEAKICAgICAgIHJldHVybiAzOwogICAgIH0KIAotICB5eWRlYnVnID0gMTsKLSAgc3RhdHVzID0geXlwYXJzZSAoJnJlc3VsdCwgJmNvdW50KTsKLSAgaWYgKGdsb2JhbF9yZXN1bHQgIT0gcmVzdWx0KQotICAgIGFib3J0ICgpOwotICBpZiAoZ2xvYmFsX2NvdW50ICE9IGNvdW50KQotICAgIGFib3J0ICgpOworICBjYWxjZGVidWcgPSAxOworICBzdGF0dXMgPSBjYWxjcGFyc2UgKCZyZXN1bHQsICZjb3VudCk7CisgIGlmIChmY2xvc2UgKGlucHV0KSkKKyAgICBwZXJyb3IgKCJmY2xvc2UiKTsKKyAgYXNzZXJ0IChnbG9iYWxfcmVzdWx0ID09IHJlc3VsdCk7CisgIGFzc2VydCAoZ2xvYmFsX2NvdW50ID09IGNvdW50KTsKICAgcmV0dXJuIHN0YXR1czsKIH0KIF9BVEVPRgpAQCAtNDQwNzUsNTUgKzEwMTQxNCwxNzggQEAKIAogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MDU6IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkiCi1lY2hvIGNhbGMuYXQ6NjA1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtbyBjYWxjLmMgY2FsYy55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjA1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjU5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueSIgImNhbGMuYXQ6NjU5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2NTkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjU5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTk6IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAotICAgJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwNTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBcJExJQlMiCi1lY2hvIGNhbGMuYXQ6NjA1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImNhbGMuYXQ6NjU5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBjYWxjLWxleC5jIGNhbGMtbWFpbi5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jIGNhbGMtbGV4LmMgY2FsYy1tYWluLmMgJExJQlMiICJjYWxjLmF0OjY1OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgY2FsYy1sZXguYyBjYWxjLW1haW4uYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTk6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5jCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjY1OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5jCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTk6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5oCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjY1OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5oCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKICMgVGVzdCB0aGUgcHJpb3JpdGllcy4KQEAgLTQ0MTQzLDYyICsxMDE2MDUsNjYgQEAKICgyXjIpXjMgPSA2NAogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MDU6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MDUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NTkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKIAogIyBTb21lIHN5bnRheCBlcnJvcnMuCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLTAgMAorMSAyCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwNTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYwNSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwNTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY1OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC00NDIwOSwxOCArMTAxNjc1LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC00NDIyOCw2MCArMTAxNjk2LDUwIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjA1OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYwNSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiAxLy8yCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwNTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYwNSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwNTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY1OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC00NDI5MiwxOCArMTAxNzUwLDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC00NDMxMSw2MCArMTAxNzcxLDUwIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjA1OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYwNSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiBlcnJvcgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MDU6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MDUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NTkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNDQzNzUsMTggKzEwMTgyNSwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC00NDM5NCw2MCArMTAxODQ2LDUwIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjA1OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYwNSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiAxID0gMiA9IDMKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjA1OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjA1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjA1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjU5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTQ0NDU4LDE4ICsxMDE5MDAsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworMS43OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTQ0NDc3LDMwICsxMDE5MjEsMTggQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MDU6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjA1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwNTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKQEAgLTQ0NTA4LDMwICsxMDE5NDAsMzIgQEAKICsxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwNTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYwNSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwNTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY1OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC00NDU0MiwxOCArMTAxOTc2LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0yLjA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKycKKzIuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC00NDU2MSw1NyArMTAxOTk3LDQ3IEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjA1OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYwNSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwNTogXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKLWVjaG8gY2FsYy5hdDo2MDUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjA1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo2NTkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTQ0NjIyLDE4ICsxMDIwNDgsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTQ0NjQxLDMwICsxMDIwNjksMTggQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MDU6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjA1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwNTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKQEAgLTQ0Njc5LDggKzEwMjA5NSw4IEBACiAjCiAjIC0gdGVzdCB0aGUgYWN0aW9uIGFzc29jaWF0ZWQgdG8gYGVycm9yJwogIwotIyAtIGNoZWNrIHRoZSBsb29rLWFoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAotIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2stYWhlYWQgY2F1c2luZyB0aGUKKyMgLSBjaGVjayB0aGUgbG9va2FoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAorIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZQogIyAgIGZpcnN0IGVycm9yIGlzICIpIiwgd2hpY2ggaXMgbmVlZGVkIHRvIHJlY292ZXIgZnJvbSB0aGUgZXJyb3IgYW5kCiAjICAgcHJvZHVjZSB0aGUgIjAiIHRoYXQgdHJpZ2dlcnMgdGhlICIwICE9IDEiIGVycm9yLgogIwpAQCAtNDQ2ODgsMzAgKzEwMjEwNCwzMiBAQAogKCkgKyAoMSArIDEgKyAxICspICsgKCogKiAqKSArICgxICogMiAqICopID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MDU6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MDUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NTkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNDQ3MjIsMjEgKzEwMjE0MCwyMyBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjE3OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjIyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjQwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKIGNhbGM6IGVycm9yOiA0NDQ0ICE9IDEKIF9BVEVPRgogCkBAIC00NDc0NSw2MyArMTAyMTY1LDUzIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjA1OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYwNSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NTkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAjIFRoZSBzYW1lLCBidXQgdGhpcyB0aW1lIGV4ZXJjaXNpbmcgZXhwbGljaXRseSB0cmlnZ2VyZWQgc3ludGF4IGVycm9ycy4KLSMgUE9TSVggc2F5cyB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KKyMgUE9TSVggc2F5cyB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0oISkgKyAoMCAwKSA9IDEKKyghKSArICgxIDIpID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MDU6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MDUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MDU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NTkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY1OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNDQ4MTIsMTggKzEwMjIyMiwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS45OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCiBfQVRFT0YKIApAQCAtNDQ4MzIsNjAgKzEwMjI0NCw1MCBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwNTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2MDUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjA1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotKC0gKikgKyAoMCAwKSA9IDEKKygtICopICsgKDEgMikgPSAxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwNTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYwNSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYwNTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY1OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC00NDg5NiwxOSArMTAyMjk4LDIxIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogY2FsYzogZXJyb3I6IDIyMjIgIT0gMQogX0FURU9GCiAKQEAgLTQ0OTE3LDEwMyArMTAyMzIxLDExNSBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYwNTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2MDUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjA1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Ci0KLQotICBiYW5uZXItMTEgKSAjIEJhbm5lciAxMS4gY2FsYy5hdDo2MTIKLSAgICBjYXQgPDxcX0FURU9GCi0KLVNpbXBsZSBMQUxSKDEpIEMrKyBDYWxjdWxhdG9yLgotCisjIENoZWNrIHRoYXQgeXllcnJvayB3b3JrcyBwcm9wZXJseTogc2Vjb25kIGVycm9yIGlzIG5vdCByZXBvcnRlZCwKKyMgdGhpcmQgYW5kIGZvdXJ0aCBhcmUuICBQYXJzZSBzdGF0dXMgaXMgc3VjY2VzZnVsbC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCogKikgKyAoKikgKyAoKikKIF9BVEVPRgotICAgIDs7CiAKLSAgOTggKSAjIDk4LiBjYWxjLmF0OjYyMTogQ2FsY3VsYXRvciAlc2tlbGV0b24gImxhbHIxLmNjIiAlZGVmaW5lcyAlbG9jYXRpb25zCi0gICAgYXRfc2V0dXBfbGluZT0nY2FsYy5hdDo2MjEnCi0gICAgYXRfZGVzYz0nQ2FsY3VsYXRvciAlc2tlbGV0b24gImxhbHIxLmNjIiAlZGVmaW5lcyAlbG9jYXRpb25zICcKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiIDk4OiBDYWxjdWxhdG9yICVza2VsZXRvbiAibGFscjEuY2MiICVkZWZpbmVzICVsb2NhdGlvbnMgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjk4LiBjYWxjLmF0OjYyMTogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY1OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjU5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY1OTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjU5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAogCiAKLQotCi0KLSMgVXNpbmcgeWFjYy5jPwotCi0KLQotCi0KLQotCi0jIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmICVsb2NhdGlvbiAmICVwdXJlICYgKCVnbHIgb3IgJXBhcnNlLXBhcmFtKS4KLQotIyB5eWVycm9yIGFsd2F5cyBzZWVzIHRoZSBsb2NhdGlvbnMgKHdoZW4gYWN0aXZhdGVkKSwgZXhjZXB0IGlmCi0jIHlhY2MgJiBwdXJlICYgIXBhcmFtLgotCi0KLSMgVGhlIGludGVyZmFjZSBpcyBwdXJlOiBlaXRoZXIgYmVjYXVzZSAlcHVyZS1wYXJzZXIsIG9yIGJlY2F1c2Ugd2UKLSMgYXJlIHVzaW5nIHRoZSBDKysgcGFyc2Vycy4KLQotCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzIzMworI0FUX1NUQVJUXzIzNAorYXRfZm5fZ3JvdXBfYmFubmVyIDIzNCAnY2FsYy5hdDo2NjAnIFwKKyAgIkNhbGN1bGF0b3IgJWdsci1wYXJzZXIgJWRlZmluZSBhcGkucHVyZSAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlZGVmaW5lIGFwaS5wcmVmaXggXCJjYWxjXCIgJXZlcmJvc2UgJXlhY2MgJXBhcnNlLXBhcmFtIHtzZW1hbnRpY192YWx1ZSAqcmVzdWx0fSAlcGFyc2UtcGFyYW0ge2ludCAqY291bnR9IiAiIiAxMgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjIzNC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIApAQCAtNDUwMjUsNzcgKzEwMjQ0MSwxMzc2IEBACiAKIAogY2F0ID5jYWxjLnkgPDwnX0FURU9GJwotJXsKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotICAvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KLSMgdW5kZWYgbWFsbG9jCi0jIHVuZGVmIG1lbWNtcAotIyB1bmRlZiByZWFsbG9jCi0jZW5kaWYKLSV9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCiAvKiBJbmZpeCBub3RhdGlvbiBjYWxjdWxhdG9yLS1jYWxjICovCi0lc2tlbGV0b24gImxhbHIxLmNjIiAlZGVmaW5lcyAlbG9jYXRpb25zCi0lZGVmaW5lICJnbG9iYWxfdG9rZW5zX2FuZF95eXN0eXBlIgotJXsKLSNpbmNsdWRlIDxzdGRpby5oPgorJWdsci1wYXJzZXIgJWRlZmluZSBhcGkucHVyZSAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWxvY2F0aW9ucyAlZGVmaW5lcyAlZGVmaW5lIGFwaS5wcmVmaXggImNhbGMiICV2ZXJib3NlICV5YWNjICVwYXJzZS1wYXJhbSB7c2VtYW50aWNfdmFsdWUgKnJlc3VsdH0gJXBhcnNlLXBhcmFtIHtpbnQgKmNvdW50fQogCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaWYgSEFWRV9VTklTVERfSAotIyBpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbHNlCi0jIHVuZGVmIGFsYXJtCi0jIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLwotI2VuZGlmCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNkZWZpbmUgVVNFKFZhcikKKyVjb2RlIHJlcXVpcmVzCit7CiAKLS8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCi10eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKLQotc3RhdGljIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOwotc3RhdGljIGludCBnbG9iYWxfY291bnQgPSAwOwotJX0KKyAgLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KKyAgdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Cit9CiAKIC8qIEV4ZXJjaXNlICV1bmlvbi4gKi8KICV1bmlvbgogewogICBzZW1hbnRpY192YWx1ZSBpdmFsOwogfTsKKyVwcmludGVyIHsgZnByaW50ZiAoeXlvdXRwdXQsICIlZCIsICQkKTsgfSA8aXZhbD47CiAKLSV7Ci1zdGF0aWMgaW50IHBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KTsKLSNpZm5kZWYgWVlMVFlQRQotIyBkZWZpbmUgWVlMVFlQRSB5eTo6bG9jYXRpb24KLSNlbmRpZgotI2RlZmluZSBmaXJzdF9saW5lICAgYmVnaW4ubGluZQotI2RlZmluZSBmaXJzdF9jb2x1bW4gYmVnaW4uY29sdW1uCi0jZGVmaW5lIGxhc3RfbGluZSAgICBlbmQubGluZQotI2RlZmluZSBsYXN0X2NvbHVtbiAgZW5kLmNvbHVtbgotCi1zdGF0aWMgaW50IHl5bGV4IChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApOwotc3RhdGljIGludCBnZXRfY2hhciAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKTsKLXN0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCwgIGludCBjKTsKLSV9Ci0KLS8qIFRoZSBsYWxyMS5jYyBza2VsZXRvbiwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGRlZmluZXMKLSAgIGEgY29uc3RydWN0b3IgZm9yIHBvc2l0aW9uIHRoYXQgaW5pdGlhbGl6ZXMgdGhlIGZpbGVuYW1lLiAgVGhlCi0gICBnbHIuY2Mgc2tlbGV0b24gZG9lcyBub3QgKGFuZCBpbiBmYWN0IGNhbm5vdDogbG9jYXRpb24vcG9zaXRpb24KLSAgIGFyZSBzdG9yZWQgaW4gYSB1bmlvbiwgZnJvbSB3aGljaCBvYmplY3RzIHdpdGggY29uc3RydWN0b3JzIGFyZQotICAgZXhjbHVkZWQgaW4gQysrLiAqLwotJWluaXRpYWwtYWN0aW9uIHsKLSAgQCQuaW5pdGlhbGl6ZSAoMCk7CislY29kZSBwcm92aWRlcworeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgLyogVGhlIGlucHV0LiAgKi8KKyAgZXh0ZXJuIEZJTEUgKmlucHV0OworICBleHRlcm4gc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdDsKKyAgZXh0ZXJuIGludCBnbG9iYWxfY291bnQ7CiB9CiAKKyVjb2RlCit7CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZGVmaW5lIFVTRShWYXIpCisKK0ZJTEUgKmlucHV0Oworc3RhdGljIGludCBwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCk7CisKK3N0YXRpYyB2b2lkIGNhbGNlcnJvciAoQ0FMQ0xUWVBFIGNvbnN0ICogY29uc3QgbGxvY3AsIHNlbWFudGljX3ZhbHVlICpyZXN1bHQsIGludCAqY291bnQsICBjb25zdCBjaGFyICptc2cpOworaW50IGNhbGNsZXggKENBTENTVFlQRSAqbHZhbHAsIENBTENMVFlQRSAqbGxvY3ApOworfQorCisKIAogLyogQmlzb24gRGVjbGFyYXRpb25zICovCiAldG9rZW4gQ0FMQ19FT0YgMCAiZW5kIG9mIGlucHV0IgogJXRva2VuIDxpdmFsPiBOVU0gIm51bWJlciIKICV0eXBlICA8aXZhbD4gZXhwCiAKLSVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbgkgICAgICAgKi8KKyVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbiAgICAgICAgICAgICovCislbGVmdCAnLScgJysnCislbGVmdCAnKicgJy8nCislbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLworJXJpZ2h0ICdeJyAgICAvKiBleHBvbmVudGlhdGlvbiAgICAgICAgKi8KKworLyogR3JhbW1hciBmb2xsb3dzICovCislJQoraW5wdXQ6CisgIGxpbmUKK3wgaW5wdXQgbGluZSAgICAgICAgIHsgKysqY291bnQ7ICsrZ2xvYmFsX2NvdW50OyB9Cis7CisKK2xpbmU6CisgICdcbicKK3wgZXhwICdcbicgICAgICAgICAgIHsgKnJlc3VsdCA9IGdsb2JhbF9yZXN1bHQgPSAkMTsgfQorOworCitleHA6CisgIE5VTSAgICAgICAgICAgICAgICB7ICQkID0gJDE7ICAgICAgICAgICAgIH0KK3wgZXhwICc9JyBleHAKKyAgeworICAgIGlmICgkMSAhPSAkMykKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImNhbGM6IGVycm9yOiAlZCAhPSAlZFxuIiwgJDEsICQzKTsKKyAgICAkJCA9ICQxOworICB9Cit8IGV4cCAnKycgZXhwICAgICAgICB7ICQkID0gJDEgKyAkMzsgICAgICAgIH0KK3wgZXhwICctJyBleHAgICAgICAgIHsgJCQgPSAkMSAtICQzOyAgICAgICAgfQorfCBleHAgJyonIGV4cCAgICAgICAgeyAkJCA9ICQxICogJDM7ICAgICAgICB9Cit8IGV4cCAnLycgZXhwICAgICAgICB7ICQkID0gJDEgLyAkMzsgICAgICAgIH0KK3wgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSAtJDI7ICAgICAgICAgICAgfQorfCBleHAgJ14nIGV4cCAgICAgICAgeyAkJCA9IHBvd2VyICgkMSwgJDMpOyB9Cit8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgIH0KK3wgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyB5eWVycm9rOyAgfQorfCAnIScgICAgICAgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9Cit8ICctJyBlcnJvciAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KKzsKKyUlCisKK3N0YXRpYyBpbnQKK3Bvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQoreworICBpbnQgcmVzID0gMTsKKyAgYXNzZXJ0ICgwIDw9IGV4cG9uZW50KTsKKyAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQorICAgIHJlcyAqPSBiYXNlOworICByZXR1cm4gcmVzOworfQorCisKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgY2FsY2Vycm9yIChDQUxDTFRZUEUgY29uc3QgKiBjb25zdCBsbG9jcCwgc2VtYW50aWNfdmFsdWUgKnJlc3VsdCwgaW50ICpjb3VudCwgIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgWVlVU0UocmVzdWx0KTsKKyAgWVlVU0UoY291bnQpOworICBZWV9MT0NBVElPTl9QUklOVCAoc3RkZXJyLCAoKmxsb2NwKSk7CisgIGZwcmludGYgKHN0ZGVyciwgIjogIik7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorX0FURU9GCisKKworCitjYXQgPmNhbGMtbGV4LmMgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworCisjaW5jbHVkZSAiY2FsYy5oIgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworaW50IGNhbGNsZXggKENBTENTVFlQRSAqbHZhbHAsIENBTENMVFlQRSAqbGxvY3ApOworc3RhdGljIGludCBnZXRfY2hhciAoQ0FMQ1NUWVBFICpsdmFscCwgQ0FMQ0xUWVBFICpsbG9jcCk7CitzdGF0aWMgdm9pZCB1bmdldF9jaGFyIChDQUxDU1RZUEUgKmx2YWxwLCBDQUxDTFRZUEUgKmxsb2NwLCAgaW50IGMpOworCisKK3N0YXRpYyBDQUxDTFRZUEUgbGFzdF95eWxsb2M7CisKK3N0YXRpYyBpbnQKK2dldF9jaGFyIChDQUxDU1RZUEUgKmx2YWxwLCBDQUxDTFRZUEUgKmxsb2NwKQoreworICBpbnQgcmVzID0gZ2V0YyAoaW5wdXQpOworICAodm9pZCkgbHZhbHA7KHZvaWQpIGxsb2NwOworCisgIGxhc3RfeXlsbG9jID0gKCpsbG9jcCk7CisgIGlmIChyZXMgPT0gJ1xuJykKKyAgICB7CisgICAgICAoKmxsb2NwKS5sYXN0X2xpbmUrKzsKKyAgICAgICgqbGxvY3ApLmxhc3RfY29sdW1uID0gMTsKKyAgICB9CisgIGVsc2UKKyAgICAoKmxsb2NwKS5sYXN0X2NvbHVtbisrOworCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkCit1bmdldF9jaGFyIChDQUxDU1RZUEUgKmx2YWxwLCBDQUxDTFRZUEUgKmxsb2NwLCAgaW50IGMpCit7CisgICh2b2lkKSBsdmFscDsodm9pZCkgbGxvY3A7CisKKyAgLyogV3Jvbmcgd2hlbiBDID09IGBcbicuICovCisgICgqbGxvY3ApID0gbGFzdF95eWxsb2M7CisKKyAgdW5nZXRjIChjLCBpbnB1dCk7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRfc2lnbmVkX2ludGVnZXIgKENBTENTVFlQRSAqbHZhbHAsIENBTENMVFlQRSAqbGxvY3ApCit7CisgIGludCBjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCk7CisgIGludCBzaWduID0gMTsKKyAgaW50IG4gPSAwOworCisgICh2b2lkKSBsdmFscDsodm9pZCkgbGxvY3A7CisgIGlmIChjID09ICctJykKKyAgICB7CisgICAgICBjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCk7CisgICAgICBzaWduID0gLTE7CisgICAgfQorCisgIHdoaWxlIChpc2RpZ2l0IChjKSkKKyAgICB7CisgICAgICBuID0gMTAgKiBuICsgKGMgLSAnMCcpOworICAgICAgYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApOworICAgIH0KKworICB1bmdldF9jaGFyIChsdmFscCwgbGxvY3AsICBjKTsKKworICByZXR1cm4gc2lnbiAqIG47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IExleGljYWwgYW5hbHl6ZXIgcmV0dXJucyBhbiBpbnRlZ2VyIG9uIHRoZSBzdGFjayBhbmQgdGhlIHRva2VuIHwKK3wgTlVNLCBvciB0aGUgQVNDSUkgY2hhcmFjdGVyIHJlYWQgaWYgbm90IGEgbnVtYmVyLiAgU2tpcHMgYWxsICAgfAorfCBibGFua3MgYW5kIHRhYnMsIHJldHVybnMgMCBmb3IgRU9GLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworaW50IGNhbGNsZXggKENBTENTVFlQRSAqbHZhbHAsIENBTENMVFlQRSAqbGxvY3ApCit7CisgIGludCBjOworICAvKiBTa2lwIGN1cnJlbnQgdG9rZW4sIHRoZW4gd2hpdGUgc3BhY2VzLiAgKi8KKyAgZG8KKyAgICB7CisgICAgICgqbGxvY3ApLmZpcnN0X2NvbHVtbiA9ICgqbGxvY3ApLmxhc3RfY29sdW1uOworICAgICAgKCpsbG9jcCkuZmlyc3RfbGluZSAgID0gKCpsbG9jcCkubGFzdF9saW5lOworCisgICAgfQorICB3aGlsZSAoKGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKSkgPT0gJyAnIHx8IGMgPT0gJ1x0Jyk7CisKKyAgLyogcHJvY2VzcyBudW1iZXJzICAgKi8KKyAgaWYgKGMgPT0gJy4nIHx8IGlzZGlnaXQgKGMpKQorICAgIHsKKyAgICAgIHVuZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCwgIGMpOworICAgICAgKCpsdmFscCkuaXZhbCA9IHJlYWRfc2lnbmVkX2ludGVnZXIgKGx2YWxwLCBsbG9jcCk7CisgICAgICByZXR1cm4gTlVNOworICAgIH0KKworICAvKiBSZXR1cm4gZW5kLW9mLWZpbGUuICAqLworICBpZiAoYyA9PSBFT0YpCisgICAgcmV0dXJuIENBTENfRU9GOworCisgIC8qIFJldHVybiBzaW5nbGUgY2hhcnMuICovCisgIHJldHVybiBjOworfQorX0FURU9GCisKKworY2F0ID5jYWxjLW1haW4uYyA8PCdfQVRFT0YnCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCisKKyNpbmNsdWRlICJjYWxjLmgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2Vsc2UKKyMgdW5kZWYgYWxhcm0KKyMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCisjZW5kaWYKKworCisKK3NlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOworaW50IGdsb2JhbF9jb3VudCA9IDA7CisKKy8qIEEgQyBtYWluIGZ1bmN0aW9uLiAgKi8KK2ludAorbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworICBzZW1hbnRpY192YWx1ZSByZXN1bHQgPSAwOworICBpbnQgY291bnQgPSAwOworICBpbnQgc3RhdHVzOworCisgIC8qIFRoaXMgdXNlZCB0byBiZSBhbGFybSAoMTApLCBidXQgdGhhdCBpc24ndCBlbm91Z2ggdGltZSBmb3IKKyAgICAgYSBKdWx5IDE5OTUgdmludGFnZSBERUMgQWxwaGFzdGF0aW9uIDIwMCA0LzEwMCBzeXN0ZW0sCisgICAgIGFjY29yZGluZyB0byBOZWxzb24gSC4gRi4gQmVlYmUuICAxMDAgc2Vjb25kcyBpcyBlbm91Z2guICAqLworICBhbGFybSAoMTAwKTsKKworICBpZiAoYXJnYyA9PSAyKQorICAgIGlucHV0ID0gZm9wZW4gKGFyZ3ZbMV0sICJyIik7CisgIGVsc2UKKyAgICBpbnB1dCA9IHN0ZGluOworCisgIGlmICghaW5wdXQpCisgICAgeworICAgICAgcGVycm9yIChhcmd2WzFdKTsKKyAgICAgIHJldHVybiAzOworICAgIH0KKworICBjYWxjZGVidWcgPSAxOworICBzdGF0dXMgPSBjYWxjcGFyc2UgKCZyZXN1bHQsICZjb3VudCk7CisgIGlmIChmY2xvc2UgKGlucHV0KSkKKyAgICBwZXJyb3IgKCJmY2xvc2UiKTsKKyAgYXNzZXJ0IChnbG9iYWxfcmVzdWx0ID09IHJlc3VsdCk7CisgIGFzc2VydCAoZ2xvYmFsX2NvdW50ID09IGNvdW50KTsKKyAgcmV0dXJuIHN0YXR1czsKK30KK19BVEVPRgorCisKKworCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjYwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jIGNhbGMueSIgImNhbGMuYXQ6NjYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjYwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2NjAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY2MDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjYwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjA6IGJpc29uIC1vIGNhbGMuYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBjYWxjLmMgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjA6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJjYWxjLmF0OjY2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjA6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmMgY2FsYy1sZXguYyBjYWxjLW1haW4uYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuYyBjYWxjLWxleC5jIGNhbGMtbWFpbi5jICRMSUJTIiAiY2FsYy5hdDo2NjAiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jIGNhbGMtbGV4LmMgY2FsYy1tYWluLmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjA6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5jCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjY2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5jCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjA6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5oCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjY2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5oCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgVGVzdCB0aGUgcHJpb3JpdGllcy4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMSArIDIgKiAzID0gNworMSArIDIgKiAtMyA9IC01CisKKy0xXjIgPSAtMQorKC0xKV4yID0gMQorCistLS0xID0gLTEKKworMSAtIDIgLSAzID0gLTQKKzEgLSAoMiAtIDMpID0gMgorCisyXjJeMyA9IDI1NgorKDJeMileMyA9IDY0CitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjYwOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjYwOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyMgU29tZSBzeW50YXggZXJyb3JzLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxIDIKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjA6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjYwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NjAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjYwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NjAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxLy8yCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjYwOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjYwOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY2MDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworZXJyb3IKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjA6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjYwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NjAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY2MDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMSA9IDIgPSAzCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjYwOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjYwOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuNzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY2MDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworCisrMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY2MDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NjAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY2MDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisyLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKycKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIEV4ZXJjaXNlIGVycm9yIG1lc3NhZ2VzIHdpdGggRU9GOiB3b3JrIG9uIGFuIGVtcHR5IGZpbGUuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjA6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo2NjAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NjAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjYwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NjAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIEV4ZXJjaXNlIHRoZSBlcnJvciB0b2tlbjogd2l0aG91dCBpdCwgd2UgZGllIGF0IHRoZSBmaXJzdCBlcnJvciwKKyMgaGVuY2UgYmUgc3VyZSB0bworIworIyAtIGhhdmUgc2V2ZXJhbCBlcnJvcnMgd2hpY2ggZXhlcmNpc2UgZGlmZmVyZW50IHNoaWZ0L2Rpc2NhcmRpbmdzCisjICAgLSAoKTogbm90aGluZyB0byBwb3AsIG5vdGhpbmcgdG8gZGlzY2FyZAorIyAgIC0gKDEgKyAxICsgMSArKTogYSBsb3QgdG8gcG9wLCBub3RoaW5nIHRvIGRpc2NhcmQKKyMgICAtICgqICogKik6IG5vdGhpbmcgdG8gcG9wLCBhIGxvdCB0byBkaXNjYXJkCisjICAgLSAoMSArIDIgKiAqKTogc29tZSB0byBwb3AgYW5kIGRpc2NhcmQKKyMKKyMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCisjCisjIC0gY2hlY2sgdGhlIGxvb2thaGVhZCB0aGF0IHRyaWdnZXJzIGFuIGVycm9yIGlzIG5vdCBkaXNjYXJkZWQKKyMgICB3aGVuIHdlIGVudGVyIGVycm9yIHJlY292ZXJ5LiAgQmVsb3csIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUKKyMgICBmaXJzdCBlcnJvciBpcyAiKSIsIHdoaWNoIGlzIG5lZWRlZCB0byByZWNvdmVyIGZyb20gdGhlIGVycm9yIGFuZAorIyAgIHByb2R1Y2UgdGhlICIwIiB0aGF0IHRyaWdnZXJzIHRoZSAiMCAhPSAxIiBlcnJvci4KKyMKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCkgKyAoMSArIDEgKyAxICspICsgKCogKiAqKSArICgxICogMiAqICopID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY2MDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NjAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY2MDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK2NhbGM6IGVycm9yOiA0NDQ0ICE9IDEKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgVGhlIHNhbWUsIGJ1dCB0aGlzIHRpbWUgZXhlcmNpc2luZyBleHBsaWNpdGx5IHRyaWdnZXJlZCBzeW50YXggZXJyb3JzLgorIyBQT1NJWCBzYXlzIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKyghKSArICgxIDIpID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY2MDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NjAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY2MDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCitjYWxjOiBlcnJvcjogMjIyMiAhPSAxCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjYwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NjAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoLSAqKSArICgxIDIpID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY2MDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NjAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY2MDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjQ6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKK2NhbGM6IGVycm9yOiAyMjIyICE9IDEKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgQ2hlY2sgdGhhdCB5eWVycm9rIHdvcmtzIHByb3Blcmx5OiBzZWNvbmQgZXJyb3IgaXMgbm90IHJlcG9ydGVkLAorIyB0aGlyZCBhbmQgZm91cnRoIGFyZS4gIFBhcnNlIHN0YXR1cyBpcyBzdWNjZXNmdWxsLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoKiAqKSArICgqKSArICgqKQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY2MDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NjAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY2MDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTY6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NjA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzIzNAorI0FUX1NUQVJUXzIzNQorYXRfZm5fZ3JvdXBfYmFubmVyIDIzNSAnY2FsYy5hdDo2NzAnIFwKKyAgIkNhbGN1bGF0b3IgJXNrZWxldG9uIFwibGFscjEuY2NcIiAlZGVmaW5lcyAlbG9jYXRpb25zIiAiIiAxMworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjIzNS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworCisKKworCisKKworCitjYXQgPmNhbGMueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisvKiBJbmZpeCBub3RhdGlvbiBjYWxjdWxhdG9yLS1jYWxjICovCislc2tlbGV0b24gImxhbHIxLmNjIiAlZGVmaW5lcyAlbG9jYXRpb25zCislZGVmaW5lIGdsb2JhbF90b2tlbnNfYW5kX3l5c3R5cGUKKyVjb2RlIHJlcXVpcmVzCit7CisKKyAgLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KKyAgdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Cit9CisKKy8qIEV4ZXJjaXNlICV1bmlvbi4gKi8KKyV1bmlvbgoreworICBzZW1hbnRpY192YWx1ZSBpdmFsOworfTsKKyVwcmludGVyIHsgeXlvdXRwdXQgPDwgJCQ7IH0gPGl2YWw+OworCislY29kZSBwcm92aWRlcworeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgLyogVGhlIGlucHV0LiAgKi8KKyAgZXh0ZXJuIEZJTEUgKmlucHV0OworICBleHRlcm4gc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdDsKKyAgZXh0ZXJuIGludCBnbG9iYWxfY291bnQ7Cit9CisKKyVjb2RlCit7CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZGVmaW5lIFVTRShWYXIpCisKK0ZJTEUgKmlucHV0Oworc3RhdGljIGludCBwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCk7CisKKworaW50IHl5bGV4ICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgeXk6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApOworfQorCisKKworLyogQmlzb24gRGVjbGFyYXRpb25zICovCisldG9rZW4gQ0FMQ19FT0YgMCAiZW5kIG9mIGlucHV0IgorJXRva2VuIDxpdmFsPiBOVU0gIm51bWJlciIKKyV0eXBlICA8aXZhbD4gZXhwCisKKyVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbiAgICAgICAgICAgICovCiAlbGVmdCAnLScgJysnCiAlbGVmdCAnKicgJy8nCiAlbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLwpAQCAtNDUxMjgsMTU0ICsxMDM4NDMsMTc3IEBACiB8ICctJyBleHAgICVwcmVjIE5FRyB7ICQkID0gLSQyOyAgICAgICAgICAgIH0KIHwgZXhwICdeJyBleHAgICAgICAgIHsgJCQgPSBwb3dlciAoJDEsICQzKTsgfQogfCAnKCcgZXhwICcpJyAgICAgICAgeyAkJCA9ICQyOyAgICAgICAgICAgICB9Ci18ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgICAgICAgICAgIH0KK3wgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyB5eWVycm9rOyAgfQogfCAnIScgICAgICAgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9CiB8ICctJyBlcnJvciAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KIDsKICUlCi0vKiBUaGUgaW5wdXQuICAqLwotc3RhdGljIEZJTEUgKmlucHV0OworCitzdGF0aWMgaW50Citwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKK3sKKyAgaW50IHJlcyA9IDE7CisgIGFzc2VydCAoMCA8PSBleHBvbmVudCk7CisgIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKKyAgICByZXMgKj0gYmFzZTsKKyAgcmV0dXJuIHJlczsKK30KKwogCiAvKiBBIEMrKyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLwogdm9pZAoteXk6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGxvY2F0aW9uJiBsLCBjb25zdCBzdGQ6OnN0cmluZyYgbSkKK3l5OjpwYXJzZXI6OmVycm9yIChjb25zdCBsb2NhdGlvbl90eXBlJiBsLCBjb25zdCBzdGQ6OnN0cmluZyYgbSkKIHsKICAgKHZvaWQpIGw7CiAgIHN0ZDo6Y2VyciA8PCBsIDw8ICI6ICIgPDwgbSA8PCBzdGQ6OmVuZGw7CiB9CitfQVRFT0YKIAorCisKK2NhdCA+Y2FsYy1sZXguY2MgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworCisjaW5jbHVkZSAiY2FsYy5oaCIKKworI2luY2x1ZGUgPGN0eXBlLmg+CisKK2ludCB5eWxleCAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKTsKK3N0YXRpYyBpbnQgZ2V0X2NoYXIgKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCB5eTo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCk7CitzdGF0aWMgdm9pZCB1bmdldF9jaGFyICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgeXk6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3AsICBpbnQgYyk7CisKKworc3RhdGljIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgbGFzdF95eWxsb2M7CisKK3N0YXRpYyBpbnQKK2dldF9jaGFyICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgeXk6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApCit7CisgIGludCByZXMgPSBnZXRjIChpbnB1dCk7CisgICh2b2lkKSBsdmFscDsodm9pZCkgbGxvY3A7CisKKyAgbGFzdF95eWxsb2MgPSAoKmxsb2NwKTsKKyAgaWYgKHJlcyA9PSAnXG4nKQorICAgIHsKKyAgICAgICgqbGxvY3ApLmVuZC5saW5lKys7CisgICAgICAoKmxsb2NwKS5lbmQuY29sdW1uID0gMTsKKyAgICB9CisgIGVsc2UKKyAgICAoKmxsb2NwKS5lbmQuY29sdW1uKys7CisKKyAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQKK3VuZ2V0X2NoYXIgKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCB5eTo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCwgIGludCBjKQoreworICAodm9pZCkgbHZhbHA7KHZvaWQpIGxsb2NwOworCisgIC8qIFdyb25nIHdoZW4gQyA9PSBgXG4nLiAqLworICAoKmxsb2NwKSA9IGxhc3RfeXlsbG9jOworCisgIHVuZ2V0YyAoYywgaW5wdXQpOworfQorCitzdGF0aWMgaW50CityZWFkX3NpZ25lZF9pbnRlZ2VyICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgeXk6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApCit7CisgIGludCBjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCk7CisgIGludCBzaWduID0gMTsKKyAgaW50IG4gPSAwOworCisgICh2b2lkKSBsdmFscDsodm9pZCkgbGxvY3A7CisgIGlmIChjID09ICctJykKKyAgICB7CisgICAgICBjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCk7CisgICAgICBzaWduID0gLTE7CisgICAgfQorCisgIHdoaWxlIChpc2RpZ2l0IChjKSkKKyAgICB7CisgICAgICBuID0gMTAgKiBuICsgKGMgLSAnMCcpOworICAgICAgYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApOworICAgIH0KKworICB1bmdldF9jaGFyIChsdmFscCwgbGxvY3AsICBjKTsKKworICByZXR1cm4gc2lnbiAqIG47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IExleGljYWwgYW5hbHl6ZXIgcmV0dXJucyBhbiBpbnRlZ2VyIG9uIHRoZSBzdGFjayBhbmQgdGhlIHRva2VuIHwKK3wgTlVNLCBvciB0aGUgQVNDSUkgY2hhcmFjdGVyIHJlYWQgaWYgbm90IGEgbnVtYmVyLiAgU2tpcHMgYWxsICAgfAorfCBibGFua3MgYW5kIHRhYnMsIHJldHVybnMgMCBmb3IgRU9GLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworaW50IHl5bGV4ICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgeXk6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApCit7CisgIGludCBjOworICAvKiBTa2lwIGN1cnJlbnQgdG9rZW4sIHRoZW4gd2hpdGUgc3BhY2VzLiAgKi8KKyAgZG8KKyAgICB7CisgICAgICgqbGxvY3ApLmJlZ2luLmNvbHVtbiA9ICgqbGxvY3ApLmVuZC5jb2x1bW47CisgICAgICAoKmxsb2NwKS5iZWdpbi5saW5lICAgPSAoKmxsb2NwKS5lbmQubGluZTsKKworICAgIH0KKyAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCkpID09ICcgJyB8fCBjID09ICdcdCcpOworCisgIC8qIHByb2Nlc3MgbnVtYmVycyAgICovCisgIGlmIChjID09ICcuJyB8fCBpc2RpZ2l0IChjKSkKKyAgICB7CisgICAgICB1bmdldF9jaGFyIChsdmFscCwgbGxvY3AsICBjKTsKKyAgICAgICgqbHZhbHApLml2YWwgPSByZWFkX3NpZ25lZF9pbnRlZ2VyIChsdmFscCwgbGxvY3ApOworICAgICAgcmV0dXJuIE5VTTsKKyAgICB9CisKKyAgLyogUmV0dXJuIGVuZC1vZi1maWxlLiAgKi8KKyAgaWYgKGMgPT0gRU9GKQorICAgIHJldHVybiBDQUxDX0VPRjsKKworICAvKiBSZXR1cm4gc2luZ2xlIGNoYXJzLiAqLworICByZXR1cm4gYzsKK30KK19BVEVPRgorCisKK2NhdCA+Y2FsYy1tYWluLmNjIDw8J19BVEVPRicKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKKworI2luY2x1ZGUgImNhbGMuaGgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2Vsc2UKKyMgdW5kZWYgYWxhcm0KKyMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCisjZW5kaWYKKworCisvKiBBIEMrKyB5eXBhcnNlIHRoYXQgc2ltdWxhdGVzIHRoZSBDIHNpZ25hdHVyZS4gICovCiBpbnQKIHl5cGFyc2UgKCkKIHsKICAgeXk6OnBhcnNlciBwYXJzZXI7Ci0gIHBhcnNlci5zZXRfZGVidWdfbGV2ZWwgKCEhWVlERUJVRyk7CisjaWYgWVlERUJVRworICBwYXJzZXIuc2V0X2RlYnVnX2xldmVsICgxKTsKKyNlbmRpZgogICByZXR1cm4gcGFyc2VyLnBhcnNlICgpOwogfQogCiAKK3NlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOworaW50IGdsb2JhbF9jb3VudCA9IDA7CiAKLQotc3RhdGljIFlZTFRZUEUgbGFzdF95eWxsb2M7Ci0KLXN0YXRpYyBpbnQKLWdldF9jaGFyIChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApCi17Ci0gIGludCByZXMgPSBnZXRjIChpbnB1dCk7Ci0gICh2b2lkKSBsdmFscDsodm9pZCkgbGxvY3A7Ci0KLSAgbGFzdF95eWxsb2MgPSAoKmxsb2NwKTsKLSAgaWYgKHJlcyA9PSAnXG4nKQotICAgIHsKLSAgICAgICgqbGxvY3ApLmxhc3RfbGluZSsrOwotICAgICAgKCpsbG9jcCkubGFzdF9jb2x1bW4gPSAwOwotICAgIH0KLSAgZWxzZQotICAgICgqbGxvY3ApLmxhc3RfY29sdW1uKys7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotCi1zdGF0aWMgdm9pZAotdW5nZXRfY2hhciAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwLCAgaW50IGMpCi17Ci0gICh2b2lkKSBsdmFscDsodm9pZCkgbGxvY3A7Ci0KLSAgLyogV3Jvbmcgd2hlbiBDID09IGBcbicuICovCi0gICgqbGxvY3ApID0gbGFzdF95eWxsb2M7Ci0KLSAgdW5nZXRjIChjLCBpbnB1dCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXJlYWRfc2lnbmVkX2ludGVnZXIgKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCkKLXsKLSAgaW50IGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKTsKLSAgaW50IHNpZ24gPSAxOwotICBpbnQgbiA9IDA7Ci0KLSAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKLSAgaWYgKGMgPT0gJy0nKQotICAgIHsKLSAgICAgIGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKTsKLSAgICAgIHNpZ24gPSAtMTsKLSAgICB9Ci0KLSAgd2hpbGUgKGlzZGlnaXQgKGMpKQotICAgIHsKLSAgICAgIG4gPSAxMCAqIG4gKyAoYyAtICcwJyk7Ci0gICAgICBjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCk7Ci0gICAgfQotCi0gIHVuZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCwgIGMpOwotCi0gIHJldHVybiBzaWduICogbjsKLX0KLQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBMZXhpY2FsIGFuYWx5emVyIHJldHVybnMgYW4gaW50ZWdlciBvbiB0aGUgc3RhY2sgYW5kIHRoZSB0b2tlbiB8Ci18IE5VTSwgb3IgdGhlIEFTQ0lJIGNoYXJhY3RlciByZWFkIGlmIG5vdCBhIG51bWJlci4gIFNraXBzIGFsbCAgIHwKLXwgYmxhbmtzIGFuZCB0YWJzLCByZXR1cm5zIDAgZm9yIEVPRi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbnQKLXl5bGV4IChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApCi17Ci0gIHN0YXRpYyBpbnQgaW5pdCA9IDE7Ci0gIGludCBjOwotCi0gIGlmIChpbml0KQotICAgIHsKLSAgICAgIGluaXQgPSAwOwotCi0gICAgICAoKmxsb2NwKS5sYXN0X2NvbHVtbiA9IDA7Ci0gICAgICAoKmxsb2NwKS5sYXN0X2xpbmUgPSAxOwotCi0gICAgfQotCi0KLSAoKmxsb2NwKS5maXJzdF9jb2x1bW4gPSAoKmxsb2NwKS5sYXN0X2NvbHVtbjsKLSAgKCpsbG9jcCkuZmlyc3RfbGluZSAgID0gKCpsbG9jcCkubGFzdF9saW5lOwotCi0KLSAgLyogU2tpcCB3aGl0ZSBzcGFjZS4gICovCi0gIHdoaWxlICgoYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApKSA9PSAnICcgfHwgYyA9PSAnXHQnKQotICAgIHsKLSAgICAgKCpsbG9jcCkuZmlyc3RfY29sdW1uID0gKCpsbG9jcCkubGFzdF9jb2x1bW47Ci0gICAgICAoKmxsb2NwKS5maXJzdF9saW5lICAgPSAoKmxsb2NwKS5sYXN0X2xpbmU7Ci0KLSAgICB9Ci0KLSAgLyogcHJvY2VzcyBudW1iZXJzICAgKi8KLSAgaWYgKGMgPT0gJy4nIHx8IGlzZGlnaXQgKGMpKQotICAgIHsKLSAgICAgIHVuZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCwgIGMpOwotICAgICAgKCpsdmFscCkuaXZhbCA9IHJlYWRfc2lnbmVkX2ludGVnZXIgKGx2YWxwLCBsbG9jcCk7Ci0gICAgICByZXR1cm4gTlVNOwotICAgIH0KLQotICAvKiBSZXR1cm4gZW5kLW9mLWZpbGUuICAqLwotICBpZiAoYyA9PSBFT0YpCi0gICAgcmV0dXJuIENBTENfRU9GOwotCi0gIC8qIFJldHVybiBzaW5nbGUgY2hhcnMuICovCi0gIHJldHVybiBjOwotfQotCi1zdGF0aWMgaW50Ci1wb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKLXsKLSAgaW50IHJlcyA9IDE7Ci0gIGlmIChleHBvbmVudCA8IDApCi0gICAgZXhpdCAoMyk7Ci0gIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKLSAgICByZXMgKj0gYmFzZTsKLSAgcmV0dXJuIHJlczsKLX0KLQotCisvKiBBIEMgbWFpbiBmdW5jdGlvbi4gICovCiBpbnQKIG1haW4gKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKQEAgLTQ1MzAxLDEwICsxMDQwMzksMTAgQEAKIAogCiAgIHN0YXR1cyA9IHl5cGFyc2UgKCk7Ci0gIGlmIChnbG9iYWxfcmVzdWx0ICE9IHJlc3VsdCkKLSAgICBhYm9ydCAoKTsKLSAgaWYgKGdsb2JhbF9jb3VudCAhPSBjb3VudCkKLSAgICBhYm9ydCAoKTsKKyAgaWYgKGZjbG9zZSAoaW5wdXQpKQorICAgIHBlcnJvciAoImZjbG9zZSIpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOwogICByZXR1cm4gc3RhdHVzOwogfQogX0FURU9GCkBAIC00NTMxMyw4MSArMTA0MDUxLDE3OSBAQAogCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyMTogYmlzb24gLW8gY2FsYy5jYyBjYWxjLnkiCi1lY2hvIGNhbGMuYXQ6NjIxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtbyBjYWxjLmNjIGNhbGMueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyMTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuY2MgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2NzAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuY2MgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuY2MgY2FsYy55IiAiY2FsYy5hdDo2NzAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2NzAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3MDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjcwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzA6IGJpc29uIC1vIGNhbGMuY2MgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NzAiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gY2FsYy5jYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjE6IFwkQklTT05fQ1hYX1dPUktTIgotZWNobyBjYWxjLmF0OjYyMSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJEJJU09OX0NYWF9XT1JLUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyMTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzA6IFwkQklTT05fQ1hYX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ1hYX1dPUktTIiAiY2FsYy5hdDo2NzAiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NYWF9XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwOiBcJENYWCBcJENYWEZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jYyBjYWxjLWxleC5jYyBjYWxjLW1haW4uY2MgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmNjIGNhbGMtbGV4LmNjIGNhbGMtbWFpbi5jYyAkTElCUyIgImNhbGMuYXQ6NjcwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuY2MgY2FsYy1sZXguY2MgY2FsYy1tYWluLmNjICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjE6IFwkQ1hYIFwkQ1hYRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmNjIFwkTElCUyIKLWVjaG8gY2FsYy5hdDo2MjEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuY2MgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwOiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuY2MKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjcwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmNjCiAKLSRhdF90cmFjZW9uCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwOiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuaGgKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjcwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmhoCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKICMgVGVzdCB0aGUgcHJpb3JpdGllcy4KQEAgLTQ1NDA3LDYyICsxMDQyNDMsNjYgQEAKICgyXjIpXjMgPSA2NAogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjE6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MjEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3MDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NzAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3MDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY3MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKIAogIyBTb21lIHN5bnRheCBlcnJvcnMuCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLTAgMAorMSAyCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyMTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYyMSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyMTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY3MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjcwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC00NTQ3MywxOCArMTA0MzEzLDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC00NTQ5Myw2MCArMTA0MzM1LDUwIEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjE6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjIxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyMTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY3MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKIDEvLzIKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjIxOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjIxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjIxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzA6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjcwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NzAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTQ1NTU3LDE4ICsxMDQzODksMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJy8nLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTQ1NTc3LDYwICsxMDQ0MTEsNTAgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyMTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2MjEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjIxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3MDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjcwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogZXJyb3IKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjIxOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjIxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjIxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzA6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjcwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NzAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTQ1NjQxLDE4ICsxMDQ0NjUsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICR1bmRlZmluZWQKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICR1bmRlZmluZWQKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtNDU2NjEsNjAgKzEwNDQ4Nyw1MCBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjIxOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYyMSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NzAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiAxID0gMiA9IDMKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjIxOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjIxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjIxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzA6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjcwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NzAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTQ1NzI1LDE4ICsxMDQ1NDEsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworMS43OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTQ1NzQ1LDMwICsxMDQ1NjMsMTggQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyMTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2MjEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjIxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3MDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjcwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwpAQCAtNDU3NzYsMzAgKzEwNDU4MiwzMiBAQAogKzEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjIxOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjIxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjIxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzA6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjcwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NzAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTQ1ODEwLDE4ICsxMDQ2MTgsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTIuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTQ1ODMwLDU3ICsxMDQ2NDAsNDcgQEAKIHNlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAogbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyMTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2MjEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjIxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3MDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjcwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKICMgRXhlcmNpc2UgZXJyb3IgbWVzc2FnZXMgd2l0aCBFT0Y6IHdvcmsgb24gYW4gZW1wdHkgZmlsZS4KLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjE6IFwkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiCi1lY2hvIGNhbGMuYXQ6NjIxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyMTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwOiAgXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIgImNhbGMuYXQ6NjcwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjcwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC00NTg5MSwxOCArMTA0NjkxLDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC00NTkxMSwzMCArMTA0NzEzLDE4IEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjE6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjIxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyMTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY3MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKQEAgLTQ1OTQ5LDggKzEwNDczOSw4IEBACiAjCiAjIC0gdGVzdCB0aGUgYWN0aW9uIGFzc29jaWF0ZWQgdG8gYGVycm9yJwogIwotIyAtIGNoZWNrIHRoZSBsb29rLWFoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAotIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2stYWhlYWQgY2F1c2luZyB0aGUKKyMgLSBjaGVjayB0aGUgbG9va2FoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAorIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZQogIyAgIGZpcnN0IGVycm9yIGlzICIpIiwgd2hpY2ggaXMgbmVlZGVkIHRvIHJlY292ZXIgZnJvbSB0aGUgZXJyb3IgYW5kCiAjICAgcHJvZHVjZSB0aGUgIjAiIHRoYXQgdHJpZ2dlcnMgdGhlICIwICE9IDEiIGVycm9yLgogIwpAQCAtNDU5NTgsMzAgKzEwNDc0OCwzMiBAQAogKCkgKyAoMSArIDEgKyAxICspICsgKCogKiAqKSArICgxICogMiAqICopID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjE6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MjEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3MDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NzAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3MDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY3MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNDU5OTIsMjEgKzEwNDc4NCwyMyBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjE3OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjIyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjQwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKIGNhbGM6IGVycm9yOiA0NDQ0ICE9IDEKIF9BVEVPRgogCkBAIC00NjAxNiw2MyArMTA0ODEwLDUzIEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjE6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjIxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyMTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY3MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKICMgVGhlIHNhbWUsIGJ1dCB0aGlzIHRpbWUgZXhlcmNpc2luZyBleHBsaWNpdGx5IHRyaWdnZXJlZCBzeW50YXggZXJyb3JzLgotIyBQT1NJWCBzYXlzIHRoZSBsb29rLWFoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgorIyBQT1NJWCBzYXlzIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLSghKSArICgwIDApID0gMQorKCEpICsgKDEgMikgPSAxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyMTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYyMSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyMTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY3MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjcwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC00NjA4MywxOCArMTA0ODY3LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjk6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKIGNhbGM6IGVycm9yOiAyMjIyICE9IDEKIF9BVEVPRgogCkBAIC00NjEwNCw2MCArMTA0ODkwLDUwIEBACiBzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKIG12IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjE6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjIxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyMTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY3MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLSgtICopICsgKDAgMCkgPSAxCisoLSAqKSArICgxIDIpID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjE6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MjEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3MDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NzAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3MDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY3MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNDYxNjgsMTkgKzEwNDk0NCwyMSBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjExOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjQ6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKIGNhbGM6IGVycm9yOiAyMjIyICE9IDEKIF9BVEVPRgogCkBAIC00NjE5MCw5NCArMTA0OTY4LDExNiBAQAogc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CiBtdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjIxOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYyMSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3MDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjcwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCiAKLSRhdF90cmFjZW9uCisKKyMgQ2hlY2sgdGhhdCB5eWVycm9rIHdvcmtzIHByb3Blcmx5OiBzZWNvbmQgZXJyb3IgaXMgbm90IHJlcG9ydGVkLAorIyB0aGlyZCBhbmQgZm91cnRoIGFyZS4gIFBhcnNlIHN0YXR1cyBpcyBzdWNjZXNmdWxsLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoKiAqKSArICgqKSArICgqKQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3MDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NzAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3MDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY3MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTY6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY3MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjcwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKIAogCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwotCi0gIDk5ICkgIyA5OS4gY2FsYy5hdDo2MjI6IENhbGN1bGF0b3IgJXNrZWxldG9uICJsYWxyMS5jYyIgJWRlZmluZXMgJWxvY2F0aW9ucyAlZXJyb3ItdmVyYm9zZSAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjCi0gICAgYXRfc2V0dXBfbGluZT0nY2FsYy5hdDo2MjInCi0gICAgYXRfZGVzYz0nQ2FsY3VsYXRvciAlc2tlbGV0b24gImxhbHIxLmNjIiAlZGVmaW5lcyAlbG9jYXRpb25zICVlcnJvci12ZXJib3NlICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIiA5OTogQ2FsY3VsYXRvciAlc2tlbGV0b24gImxhbHIxLmNjIiAlZGVmaW5lcyAlbG9jYXRpb25zICVlcnJvci12ZXJib3NlICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiOTkuIGNhbGMuYXQ6NjIyOiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCi0KLQotCi0KLQotCi0KLQotIyBVc2luZyB5YWNjLmM/Ci0KLQotCi0KLQotCi0KLSMgeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWYgJWxvY2F0aW9uICYgJXB1cmUgJiAoJWdsciBvciAlcGFyc2UtcGFyYW0pLgotCi0jIHl5ZXJyb3IgYWx3YXlzIHNlZXMgdGhlIGxvY2F0aW9ucyAod2hlbiBhY3RpdmF0ZWQpLCBleGNlcHQgaWYKLSMgeWFjYyAmIHB1cmUgJiAhcGFyYW0uCi0KLQotIyBUaGUgaW50ZXJmYWNlIGlzIHB1cmU6IGVpdGhlciBiZWNhdXNlICVwdXJlLXBhcnNlciwgb3IgYmVjYXVzZSB3ZQotIyBhcmUgdXNpbmcgdGhlIEMrKyBwYXJzZXJzLgotCi0KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjM1CisjQVRfU1RBUlRfMjM2CithdF9mbl9ncm91cF9iYW5uZXIgMjM2ICdjYWxjLmF0OjY3OScgXAorICAiQ2FsY3VsYXRvciAlbGFuZ3VhZ2UgXCJDKytcIiAlZGVmaW5lcyAlbG9jYXRpb25zICIgIiIgMTMKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyMzYuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiAKQEAgLTQ2Mjg5LDc3ICsxMDUwODksNjEgQEAKIAogCiBjYXQgPmNhbGMueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKIC8qIEluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3ItLWNhbGMgKi8KLSVza2VsZXRvbiAibGFscjEuY2MiICVkZWZpbmVzICVsb2NhdGlvbnMgJWVycm9yLXZlcmJvc2UgJW5hbWUtcHJlZml4PSJjYWxjIiAldmVyYm9zZSAleWFjYwotJWRlZmluZSAiZ2xvYmFsX3Rva2Vuc19hbmRfeXlzdHlwZSIKLSV7Ci0jaW5jbHVkZSA8c3RkaW8uaD4KKyVsYW5ndWFnZSAiQysrIiAlZGVmaW5lcyAlbG9jYXRpb25zCislZGVmaW5lIGdsb2JhbF90b2tlbnNfYW5kX3l5c3R5cGUKKyVjb2RlIHJlcXVpcmVzCit7CiAKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpZiBIQVZFX1VOSVNURF9ICi0jIGluY2x1ZGUgPHVuaXN0ZC5oPgotI2Vsc2UKLSMgdW5kZWYgYWxhcm0KLSMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCi0jZW5kaWYKLSNpbmNsdWRlIDxjdHlwZS5oPgotI2RlZmluZSBVU0UoVmFyKQotCi0vKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLwotdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Ci0KLXN0YXRpYyBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKLXN0YXRpYyBpbnQgZ2xvYmFsX2NvdW50ID0gMDsKLSV9CisgIC8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCisgIHR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOworfQogCiAvKiBFeGVyY2lzZSAldW5pb24uICovCiAldW5pb24KIHsKICAgc2VtYW50aWNfdmFsdWUgaXZhbDsKIH07CislcHJpbnRlciB7IHl5b3V0cHV0IDw8ICQkOyB9IDxpdmFsPjsKIAotJXsKLXN0YXRpYyBpbnQgcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpOwotI2lmbmRlZiBZWUxUWVBFCi0jIGRlZmluZSBZWUxUWVBFIGNhbGM6OmxvY2F0aW9uCi0jZW5kaWYKLSNkZWZpbmUgZmlyc3RfbGluZSAgIGJlZ2luLmxpbmUKLSNkZWZpbmUgZmlyc3RfY29sdW1uIGJlZ2luLmNvbHVtbgotI2RlZmluZSBsYXN0X2xpbmUgICAgZW5kLmxpbmUKLSNkZWZpbmUgbGFzdF9jb2x1bW4gIGVuZC5jb2x1bW4KLQotc3RhdGljIGludCB5eWxleCAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKTsKLXN0YXRpYyBpbnQgZ2V0X2NoYXIgKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCk7Ci1zdGF0aWMgdm9pZCB1bmdldF9jaGFyIChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3AsICBpbnQgYyk7Ci0lfQotCi0vKiBUaGUgbGFscjEuY2Mgc2tlbGV0b24sIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBkZWZpbmVzCi0gICBhIGNvbnN0cnVjdG9yIGZvciBwb3NpdGlvbiB0aGF0IGluaXRpYWxpemVzIHRoZSBmaWxlbmFtZS4gIFRoZQotICAgZ2xyLmNjIHNrZWxldG9uIGRvZXMgbm90IChhbmQgaW4gZmFjdCBjYW5ub3Q6IGxvY2F0aW9uL3Bvc2l0aW9uCi0gICBhcmUgc3RvcmVkIGluIGEgdW5pb24sIGZyb20gd2hpY2ggb2JqZWN0cyB3aXRoIGNvbnN0cnVjdG9ycyBhcmUKLSAgIGV4Y2x1ZGVkIGluIEMrKy4gKi8KLSVpbml0aWFsLWFjdGlvbiB7Ci0gIEAkLmluaXRpYWxpemUgKDApOworJWNvZGUgcHJvdmlkZXMKK3sKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIC8qIFRoZSBpbnB1dC4gICovCisgIGV4dGVybiBGSUxFICppbnB1dDsKKyAgZXh0ZXJuIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQ7CisgIGV4dGVybiBpbnQgZ2xvYmFsX2NvdW50OwogfQogCislY29kZQoreworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2RlZmluZSBVU0UoVmFyKQorCitGSUxFICppbnB1dDsKK3N0YXRpYyBpbnQgcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpOworCisKK2ludCB5eWxleCAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKTsKK30KKworCiAKIC8qIEJpc29uIERlY2xhcmF0aW9ucyAqLwogJXRva2VuIENBTENfRU9GIDAgImVuZCBvZiBpbnB1dCIKICV0b2tlbiA8aXZhbD4gTlVNICJudW1iZXIiCiAldHlwZSAgPGl2YWw+IGV4cAogCi0lbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24JICAgICAgICovCislbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24gICAgICAgICAgICAqLwogJWxlZnQgJy0nICcrJwogJWxlZnQgJyonICcvJwogJWxlZnQgTkVHICAgICAvKiBuZWdhdGlvbi0tdW5hcnkgbWludXMgKi8KQEAgLTQ2MzkyLDM3ICsxMDUxNzYsNTQgQEAKIHwgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSAtJDI7ICAgICAgICAgICAgfQogfCBleHAgJ14nIGV4cCAgICAgICAgeyAkJCA9IHBvd2VyICgkMSwgJDMpOyB9CiB8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgIH0KLXwgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyAgICAgICAgICAgfQorfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7IHl5ZXJyb2s7ICB9CiB8ICchJyAgICAgICAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KIHwgJy0nIGVycm9yICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQogOwogJSUKLS8qIFRoZSBpbnB1dC4gICovCi1zdGF0aWMgRklMRSAqaW5wdXQ7CisKK3N0YXRpYyBpbnQKK3Bvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQoreworICBpbnQgcmVzID0gMTsKKyAgYXNzZXJ0ICgwIDw9IGV4cG9uZW50KTsKKyAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQorICAgIHJlcyAqPSBiYXNlOworICByZXR1cm4gcmVzOworfQorCiAKIC8qIEEgQysrIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCiB2b2lkCi1jYWxjOjpwYXJzZXI6OmVycm9yIChjb25zdCBsb2NhdGlvbiYgbCwgY29uc3Qgc3RkOjpzdHJpbmcmIG0pCit5eTo6cGFyc2VyOjplcnJvciAoY29uc3QgbG9jYXRpb25fdHlwZSYgbCwgY29uc3Qgc3RkOjpzdHJpbmcmIG0pCiB7CiAgICh2b2lkKSBsOwogICBzdGQ6OmNlcnIgPDwgbCA8PCAiOiAiIDw8IG0gPDwgc3RkOjplbmRsOwogfQotCi1pbnQKLXl5cGFyc2UgKCkKLXsKLSAgY2FsYzo6cGFyc2VyIHBhcnNlcjsKLSAgcGFyc2VyLnNldF9kZWJ1Z19sZXZlbCAoISFZWURFQlVHKTsKLSAgcmV0dXJuIHBhcnNlci5wYXJzZSAoKTsKLX0KK19BVEVPRgogCiAKIAorY2F0ID5jYWxjLWxleC5jYyA8PCdfQVRFT0YnCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCiAKLXN0YXRpYyBZWUxUWVBFIGxhc3RfeXlsbG9jOworI2luY2x1ZGUgImNhbGMuaGgiCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCitpbnQgeXlsZXggKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCB5eTo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCk7CitzdGF0aWMgaW50IGdldF9jaGFyICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgeXk6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApOworc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwLCAgaW50IGMpOworCisKK3N0YXRpYyB5eTo6cGFyc2VyOjpsb2NhdGlvbl90eXBlIGxhc3RfeXlsbG9jOwogCiBzdGF0aWMgaW50Ci1nZXRfY2hhciAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKQorZ2V0X2NoYXIgKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCB5eTo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCkKIHsKICAgaW50IHJlcyA9IGdldGMgKGlucHV0KTsKICAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKQEAgLTQ2NDMwLDE4ICsxMDUyMzEsMTcgQEAKICAgbGFzdF95eWxsb2MgPSAoKmxsb2NwKTsKICAgaWYgKHJlcyA9PSAnXG4nKQogICAgIHsKLSAgICAgICgqbGxvY3ApLmxhc3RfbGluZSsrOwotICAgICAgKCpsbG9jcCkubGFzdF9jb2x1bW4gPSAwOworICAgICAgKCpsbG9jcCkuZW5kLmxpbmUrKzsKKyAgICAgICgqbGxvY3ApLmVuZC5jb2x1bW4gPSAxOwogICAgIH0KICAgZWxzZQotICAgICgqbGxvY3ApLmxhc3RfY29sdW1uKys7CisgICAgKCpsbG9jcCkuZW5kLmNvbHVtbisrOwogCiAgIHJldHVybiByZXM7CiB9CiAKLQogc3RhdGljIHZvaWQKLXVuZ2V0X2NoYXIgKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCwgIGludCBjKQordW5nZXRfY2hhciAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwLCAgaW50IGMpCiB7CiAgICh2b2lkKSBsdmFscDsodm9pZCkgbGxvY3A7CiAKQEAgLTQ2NDUyLDcgKzEwNTI1Miw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLXJlYWRfc2lnbmVkX2ludGVnZXIgKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCkKK3JlYWRfc2lnbmVkX2ludGVnZXIgKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCB5eTo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCkKIHsKICAgaW50IGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKTsKICAgaW50IHNpZ24gPSAxOwpAQCAtNDY0NzcsNDAgKzEwNTI3NywyMyBAQAogfQogCiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IExleGljYWwgYW5hbHl6ZXIgcmV0dXJucyBhbiBpbnRlZ2VyIG9uIHRoZSBzdGFjayBhbmQgdGhlIHRva2VuIHwKIHwgTlVNLCBvciB0aGUgQVNDSUkgY2hhcmFjdGVyIHJlYWQgaWYgbm90IGEgbnVtYmVyLiAgU2tpcHMgYWxsICAgfAogfCBibGFua3MgYW5kIHRhYnMsIHJldHVybnMgMCBmb3IgRU9GLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludAoteXlsZXggKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCkKK2ludCB5eWxleCAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKQogewotICBzdGF0aWMgaW50IGluaXQgPSAxOwogICBpbnQgYzsKLQotICBpZiAoaW5pdCkKKyAgLyogU2tpcCBjdXJyZW50IHRva2VuLCB0aGVuIHdoaXRlIHNwYWNlcy4gICovCisgIGRvCiAgICAgewotICAgICAgaW5pdCA9IDA7Ci0KLSAgICAgICgqbGxvY3ApLmxhc3RfY29sdW1uID0gMDsKLSAgICAgICgqbGxvY3ApLmxhc3RfbGluZSA9IDE7CisgICAgICgqbGxvY3ApLmJlZ2luLmNvbHVtbiA9ICgqbGxvY3ApLmVuZC5jb2x1bW47CisgICAgICAoKmxsb2NwKS5iZWdpbi5saW5lICAgPSAoKmxsb2NwKS5lbmQubGluZTsKIAogICAgIH0KLQotCi0gKCpsbG9jcCkuZmlyc3RfY29sdW1uID0gKCpsbG9jcCkubGFzdF9jb2x1bW47Ci0gICgqbGxvY3ApLmZpcnN0X2xpbmUgICA9ICgqbGxvY3ApLmxhc3RfbGluZTsKLQotCi0gIC8qIFNraXAgd2hpdGUgc3BhY2UuICAqLwotICB3aGlsZSAoKGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKSkgPT0gJyAnIHx8IGMgPT0gJ1x0JykKLSAgICB7Ci0gICAgICgqbGxvY3ApLmZpcnN0X2NvbHVtbiA9ICgqbGxvY3ApLmxhc3RfY29sdW1uOwotICAgICAgKCpsbG9jcCkuZmlyc3RfbGluZSAgID0gKCpsbG9jcCkubGFzdF9saW5lOwotCi0gICAgfQorICB3aGlsZSAoKGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKSkgPT0gJyAnIHx8IGMgPT0gJ1x0Jyk7CiAKICAgLyogcHJvY2VzcyBudW1iZXJzICAgKi8KICAgaWYgKGMgPT0gJy4nIHx8IGlzZGlnaXQgKGMpKQpAQCAtNDY1MjcsMTkgKzEwNTMxMCw0MyBAQAogICAvKiBSZXR1cm4gc2luZ2xlIGNoYXJzLiAqLwogICByZXR1cm4gYzsKIH0KK19BVEVPRgogCi1zdGF0aWMgaW50Ci1wb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKKworY2F0ID5jYWxjLW1haW4uY2MgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworCisjaW5jbHVkZSAiY2FsYy5oaCIKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxzZQorIyB1bmRlZiBhbGFybQorIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KKyNlbmRpZgorCisKKy8qIEEgQysrIHl5cGFyc2UgdGhhdCBzaW11bGF0ZXMgdGhlIEMgc2lnbmF0dXJlLiAgKi8KK2ludAoreXlwYXJzZSAoKQogewotICBpbnQgcmVzID0gMTsKLSAgaWYgKGV4cG9uZW50IDwgMCkKLSAgICBleGl0ICgzKTsKLSAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQotICAgIHJlcyAqPSBiYXNlOwotICByZXR1cm4gcmVzOworICB5eTo6cGFyc2VyIHBhcnNlcjsKKyNpZiBZWURFQlVHCisgIHBhcnNlci5zZXRfZGVidWdfbGV2ZWwgKDEpOworI2VuZGlmCisgIHJldHVybiBwYXJzZXIucGFyc2UgKCk7CiB9CiAKIAorc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7CitpbnQgZ2xvYmFsX2NvdW50ID0gMDsKKworLyogQSBDIG1haW4gZnVuY3Rpb24uICAqLwogaW50CiBtYWluIChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CkBAIC00NjU2NSwxMCArMTA1MzcyLDEwIEBACiAKIAogICBzdGF0dXMgPSB5eXBhcnNlICgpOwotICBpZiAoZ2xvYmFsX3Jlc3VsdCAhPSByZXN1bHQpCi0gICAgYWJvcnQgKCk7Ci0gIGlmIChnbG9iYWxfY291bnQgIT0gY291bnQpCi0gICAgYWJvcnQgKCk7CisgIGlmIChmY2xvc2UgKGlucHV0KSkKKyAgICBwZXJyb3IgKCJmY2xvc2UiKTsKKyAgYXNzZXJ0IChnbG9iYWxfcmVzdWx0ID09IHJlc3VsdCk7CisgIGFzc2VydCAoZ2xvYmFsX2NvdW50ID09IGNvdW50KTsKICAgcmV0dXJuIHN0YXR1czsKIH0KIF9BVEVPRgpAQCAtNDY1NzcsODEgKzEwNTM4NCwxNzkgQEAKIAogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjI6IGJpc29uIC1vIGNhbGMuY2MgY2FsYy55IgotZWNobyBjYWxjLmF0OjYyMiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gY2FsYy5jYyBjYWxjLnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Nzk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmNjIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6Njc5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuY2MgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njc5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmNjIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmNjIGNhbGMueSIgImNhbGMuYXQ6Njc5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuY2MgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6Njc5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Nzk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjY3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njc5OiBiaXNvbiAtbyBjYWxjLmNjIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njc5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGNhbGMuY2MgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjIyOiBcJEJJU09OX0NYWF9XT1JLUyIKLWVjaG8gY2FsYy5hdDo2MjIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRCSVNPTl9DWFhfV09SS1MgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njc5OiBcJEJJU09OX0NYWF9XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NYWF9XT1JLUyIgImNhbGMuYXQ6Njc5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DWFhfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OTogXCRDWFggXCRDWFhGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuY2MgY2FsYy1sZXguY2MgY2FsYy1tYWluLmNjIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jYyBjYWxjLWxleC5jYyBjYWxjLW1haW4uY2MgJExJQlMiICJjYWxjLmF0OjY3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmNjIGNhbGMtbGV4LmNjIGNhbGMtbWFpbi5jYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjIyOiBcJENYWCBcJENYWEZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jYyBcJExJQlMiCi1lY2hvIGNhbGMuYXQ6NjIyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmNjICRMSUJTICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjIyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OTogXCRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCBcIlwkLjoge1wkX31cXG5cIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCBcJC4gPT0gMSkgJiYgL15cXHMqXCQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciBcIm1haW50XCIuCisgICAgICAgICMgfHwgL1xcc1wkLworICAgICAgICApJyBjYWxjLmNjCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjY3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5jYwogCi0kYXRfdHJhY2VvbgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OTogXCRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCBcIlwkLjoge1wkX31cXG5cIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCBcJC4gPT0gMSkgJiYgL15cXHMqXCQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciBcIm1haW50XCIuCisgICAgICAgICMgfHwgL1xcc1wkLworICAgICAgICApJyBjYWxjLmhoCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjY3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5oaAorCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAjIFRlc3QgdGhlIHByaW9yaXRpZXMuCkBAIC00NjY3MSw2MiArMTA1NTc2LDY2IEBACiAoMl4yKV4zID0gNjQKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjIyOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjIyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjIyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Nzk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6Njc5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Nzk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NzkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAKICMgU29tZSBzeW50YXggZXJyb3JzLgogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0wIDAKKzEgMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjI6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MjIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NzkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNDY3MzcsNzkgKzEwNTY0Niw3MiBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgogCiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgotCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjI6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjIyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyMjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Nzk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKIDEvLzIKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjIyOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjIyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjIyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Nzk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6Njc5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Nzk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NzkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTQ2ODIwLDc5ICsxMDU3MjIsNzIgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJy8nLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KIAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KLQorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjIyOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYyMiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njc5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NzkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiBlcnJvcgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjI6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MjIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NzkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNDY5MDMsNzkgKzEwNTc5OCw3MiBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCiAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCi0KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyMjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2MjIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjIyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njc5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMSA9IDIgPSAzCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyMjogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYyMiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyMjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njc5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njc5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njc5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC00Njk4Niw0OSArMTA1ODc0LDQwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjY6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPScKKzEuNzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCiAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCi0KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyMjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2MjIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjIyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njc5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwpAQCAtNDcwMzYsMzAgKzEwNTkxNSwzMiBAQAogKzEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjIyOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjIyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjIyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Nzk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6Njc5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Nzk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NzkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTQ3MDcwLDc2ICsxMDU5NTEsNjkgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTIuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KIAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KLQorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjIyOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYyMiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njc5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NzkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyMjogXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKLWVjaG8gY2FsYy5hdDo2MjIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjIyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Nzk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo2NzkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Nzk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NzkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTQ3MTUwLDQ5ICsxMDYwMjQsNDAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KIAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KLQorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjIyOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYyMiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njc5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NzkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCkBAIC00NzIwNyw4ICsxMDYwNzIsOCBAQAogIwogIyAtIHRlc3QgdGhlIGFjdGlvbiBhc3NvY2lhdGVkIHRvIGBlcnJvcicKICMKLSMgLSBjaGVjayB0aGUgbG9vay1haGVhZCB0aGF0IHRyaWdnZXJzIGFuIGVycm9yIGlzIG5vdCBkaXNjYXJkZWQKLSMgICB3aGVuIHdlIGVudGVyIGVycm9yIHJlY292ZXJ5LiAgQmVsb3csIHRoZSBsb29rLWFoZWFkIGNhdXNpbmcgdGhlCisjIC0gY2hlY2sgdGhlIGxvb2thaGVhZCB0aGF0IHRyaWdnZXJzIGFuIGVycm9yIGlzIG5vdCBkaXNjYXJkZWQKKyMgICB3aGVuIHdlIGVudGVyIGVycm9yIHJlY292ZXJ5LiAgQmVsb3csIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUKICMgICBmaXJzdCBlcnJvciBpcyAiKSIsIHdoaWNoIGlzIG5lZWRlZCB0byByZWNvdmVyIGZyb20gdGhlIGVycm9yIGFuZAogIyAgIHByb2R1Y2UgdGhlICIwIiB0aGF0IHRyaWdnZXJzIHRoZSAiMCAhPSAxIiBlcnJvci4KICMKQEAgLTQ3MjE2LDMwICsxMDYwODEsMzIgQEAKICgpICsgKDEgKyAxICsgMSArKSArICgqICogKikgKyAoMSAqIDIgKiAqKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjIyOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjIyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjIyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Nzk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6Njc5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Nzk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NzkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTQ3MjUwLDg2ICsxMDYxMTcsNzkgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwotMS4xNzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwotMS4yMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwotMS40MDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjIzOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjQxOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCiBjYWxjOiBlcnJvcjogNDQ0NCAhPSAxCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KIAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KLQorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjIyOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYyMiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njc5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NzkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAjIFRoZSBzYW1lLCBidXQgdGhpcyB0aW1lIGV4ZXJjaXNpbmcgZXhwbGljaXRseSB0cmlnZ2VyZWQgc3ludGF4IGVycm9ycy4KLSMgUE9TSVggc2F5cyB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KKyMgUE9TSVggc2F5cyB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0oISkgKyAoMCAwKSA9IDEKKyghKSArICgxIDIpID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjI6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MjIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2NzkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNDczNDAsODAgKzEwNjIwMCw3MyBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS45OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KIAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KLQorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjIyOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYyMiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njc5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NzkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0oLSAqKSArICgwIDApID0gMQorKC0gKikgKyAoMSAyKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjIyOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjIyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjIyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Nzk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6Njc5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2Nzk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NzkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTQ3NDI0LDExNSArMTA2Mjc3LDE0MCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjExOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjQ6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKIGNhbGM6IGVycm9yOiAyMjIyICE9IDEKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgogCiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgotCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjI6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjIyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyMjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njc5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2NzkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKIAotJGF0X3RyYWNlb24KKworIyBDaGVjayB0aGF0IHl5ZXJyb2sgd29ya3MgcHJvcGVybHk6IHNlY29uZCBlcnJvciBpcyBub3QgcmVwb3J0ZWQsCisjIHRoaXJkIGFuZCBmb3VydGggYXJlLiAgUGFyc2Ugc3RhdHVzIGlzIHN1Y2Nlc2Z1bGwuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygqICopICsgKCopICsgKCopCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njc5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njc5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njc5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY3OTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njc5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAogCiAKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Ci0KLSAgMTAwICkgIyAxMDAuIGNhbGMuYXQ6NjI0OiBDYWxjdWxhdG9yICVza2VsZXRvbiAibGFscjEuY2MiICVkZWZpbmVzICVsb2NhdGlvbnMgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MKLSAgICBhdF9zZXR1cF9saW5lPSdjYWxjLmF0OjYyNCcKLSAgICBhdF9kZXNjPSdDYWxjdWxhdG9yICVza2VsZXRvbiAibGFscjEuY2MiICVkZWZpbmVzICVsb2NhdGlvbnMgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjEwMDogQ2FsY3VsYXRvciAlc2tlbGV0b24gImxhbHIxLmNjIiAlZGVmaW5lcyAlbG9jYXRpb25zICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjEwMC4gY2FsYy5hdDo2MjQ6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KLQotCi0KLQotCi0KLQotCi0jIFVzaW5nIHlhY2MuYz8KLQotCi0KLQotCi0KLQotIyB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZiAlbG9jYXRpb24gJiAlcHVyZSAmICglZ2xyIG9yICVwYXJzZS1wYXJhbSkuCi0KLSMgeXllcnJvciBhbHdheXMgc2VlcyB0aGUgbG9jYXRpb25zICh3aGVuIGFjdGl2YXRlZCksIGV4Y2VwdCBpZgotIyB5YWNjICYgcHVyZSAmICFwYXJhbS4KLQotCi0jIFRoZSBpbnRlcmZhY2UgaXMgcHVyZTogZWl0aGVyIGJlY2F1c2UgJXB1cmUtcGFyc2VyLCBvciBiZWNhdXNlIHdlCi0jIGFyZSB1c2luZyB0aGUgQysrIHBhcnNlcnMuCi0KLQorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yMzYKKyNBVF9TVEFSVF8yMzcKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyMzcgJ2NhbGMuYXQ6NjgwJyBcCisgICJDYWxjdWxhdG9yICVsYW5ndWFnZSBcIkMrK1wiICVkZWZpbmVzICVsb2NhdGlvbnMgJWRlZmluZSBhcGkubG9jYXRpb24udHlwZSBTcGFuIiAiIiAxMworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjIzNy4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIApAQCAtNDc1NDQsNzcgKzEwNjQyMiw5MyBAQAogCiAKIGNhdCA+Y2FsYy55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogLyogSW5maXggbm90YXRpb24gY2FsY3VsYXRvci0tY2FsYyAqLwotJXNrZWxldG9uICJsYWxyMS5jYyIgJWRlZmluZXMgJWxvY2F0aW9ucyAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJW5hbWUtcHJlZml4PSJjYWxjIiAldmVyYm9zZSAleWFjYwotJWRlZmluZSAiZ2xvYmFsX3Rva2Vuc19hbmRfeXlzdHlwZSIKLSV7Ci0jaW5jbHVkZSA8c3RkaW8uaD4KKyVsYW5ndWFnZSAiQysrIiAlZGVmaW5lcyAlbG9jYXRpb25zICVkZWZpbmUgYXBpLmxvY2F0aW9uLnR5cGUgU3BhbgorJWRlZmluZSBnbG9iYWxfdG9rZW5zX2FuZF95eXN0eXBlCislY29kZSByZXF1aXJlcworewogCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaWYgSEFWRV9VTklTVERfSAotIyBpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbHNlCi0jIHVuZGVmIGFsYXJtCi0jIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLwotI2VuZGlmCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNkZWZpbmUgVVNFKFZhcikKKyMgaW5jbHVkZSA8aW9zdHJlYW0+CisgIHN0cnVjdCBQb2ludAorICB7CisgICAgaW50IGw7CisgICAgaW50IGM7CisgIH07CiAKLS8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCi10eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKKyAgc3RydWN0IFNwYW4KKyAgeworICAgIFBvaW50IGZpcnN0OworICAgIFBvaW50IGxhc3Q7CisgIH07CiAKLXN0YXRpYyBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKLXN0YXRpYyBpbnQgZ2xvYmFsX2NvdW50ID0gMDsKLSV9CisjIGRlZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKE4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChDdXJyZW50KS5maXJzdCA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0OyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChDdXJyZW50KS5sYXN0ICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3Q7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChDdXJyZW50KS5maXJzdCA9IChDdXJyZW50KS5sYXN0ID0gWVlSSFNMT0MgKFJocywgMCkubGFzdDsgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHdoaWxlIChmYWxzZSkKKworCisgIC8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCisgIHR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOworfQogCiAvKiBFeGVyY2lzZSAldW5pb24uICovCiAldW5pb24KIHsKICAgc2VtYW50aWNfdmFsdWUgaXZhbDsKIH07CislcHJpbnRlciB7IHl5b3V0cHV0IDw8ICQkOyB9IDxpdmFsPjsKIAotJXsKLXN0YXRpYyBpbnQgcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpOwotI2lmbmRlZiBZWUxUWVBFCi0jIGRlZmluZSBZWUxUWVBFIGNhbGM6OmxvY2F0aW9uCi0jZW5kaWYKLSNkZWZpbmUgZmlyc3RfbGluZSAgIGJlZ2luLmxpbmUKLSNkZWZpbmUgZmlyc3RfY29sdW1uIGJlZ2luLmNvbHVtbgotI2RlZmluZSBsYXN0X2xpbmUgICAgZW5kLmxpbmUKLSNkZWZpbmUgbGFzdF9jb2x1bW4gIGVuZC5jb2x1bW4KLQotc3RhdGljIGludCB5eWxleCAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKTsKLXN0YXRpYyBpbnQgZ2V0X2NoYXIgKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCk7Ci1zdGF0aWMgdm9pZCB1bmdldF9jaGFyIChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3AsICBpbnQgYyk7Ci0lfQotCi0vKiBUaGUgbGFscjEuY2Mgc2tlbGV0b24sIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBkZWZpbmVzCi0gICBhIGNvbnN0cnVjdG9yIGZvciBwb3NpdGlvbiB0aGF0IGluaXRpYWxpemVzIHRoZSBmaWxlbmFtZS4gIFRoZQotICAgZ2xyLmNjIHNrZWxldG9uIGRvZXMgbm90IChhbmQgaW4gZmFjdCBjYW5ub3Q6IGxvY2F0aW9uL3Bvc2l0aW9uCi0gICBhcmUgc3RvcmVkIGluIGEgdW5pb24sIGZyb20gd2hpY2ggb2JqZWN0cyB3aXRoIGNvbnN0cnVjdG9ycyBhcmUKLSAgIGV4Y2x1ZGVkIGluIEMrKy4gKi8KLSVpbml0aWFsLWFjdGlvbiB7Ci0gIEAkLmluaXRpYWxpemUgKDApOworJWNvZGUgcHJvdmlkZXMKK3sKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIC8qIFRoZSBpbnB1dC4gICovCisgIGV4dGVybiBGSUxFICppbnB1dDsKKyAgZXh0ZXJuIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQ7CisgIGV4dGVybiBpbnQgZ2xvYmFsX2NvdW50OwogfQogCislY29kZQoreworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2RlZmluZSBVU0UoVmFyKQorCitGSUxFICppbnB1dDsKK3N0YXRpYyBpbnQgcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpOworCisKK2ludCB5eWxleCAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKTsKK30KKworCislaW5pdGlhbC1hY3Rpb24KK3sKKyAgQCQuZmlyc3QubCA9IEAkLmZpcnN0LmMgPSAxOworICBAJC5sYXN0ID0gQCQuZmlyc3Q7Cit9CiAKIC8qIEJpc29uIERlY2xhcmF0aW9ucyAqLwogJXRva2VuIENBTENfRU9GIDAgImVuZCBvZiBpbnB1dCIKICV0b2tlbiA8aXZhbD4gTlVNICJudW1iZXIiCiAldHlwZSAgPGl2YWw+IGV4cAogCi0lbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24JICAgICAgICovCislbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24gICAgICAgICAgICAqLwogJWxlZnQgJy0nICcrJwogJWxlZnQgJyonICcvJwogJWxlZnQgTkVHICAgICAvKiBuZWdhdGlvbi0tdW5hcnkgbWludXMgKi8KQEAgLTQ3NjQ3LDM3ICsxMDY1NDEsNjUgQEAKIHwgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSAtJDI7ICAgICAgICAgICAgfQogfCBleHAgJ14nIGV4cCAgICAgICAgeyAkJCA9IHBvd2VyICgkMSwgJDMpOyB9CiB8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgIH0KLXwgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyAgICAgICAgICAgfQorfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7IHl5ZXJyb2s7ICB9CiB8ICchJyAgICAgICAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KIHwgJy0nIGVycm9yICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQogOwogJSUKLS8qIFRoZSBpbnB1dC4gICovCi1zdGF0aWMgRklMRSAqaW5wdXQ7CisKK3N0YXRpYyBpbnQKK3Bvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQoreworICBpbnQgcmVzID0gMTsKKyAgYXNzZXJ0ICgwIDw9IGV4cG9uZW50KTsKKyAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQorICAgIHJlcyAqPSBiYXNlOworICByZXR1cm4gcmVzOworfQorCisKKyAgc3RkOjpvc3RyZWFtJgorICBvcGVyYXRvcjw8IChzdGQ6Om9zdHJlYW0mIG8sIGNvbnN0IFNwYW4mIHMpCisgIHsKKyAgICBvIDw8IHMuZmlyc3QubCA8PCAnLicgPDwgcy5maXJzdC5jOworICAgIGlmIChzLmZpcnN0LmwgIT0gcy5sYXN0LmwpCisgICAgICBvIDw8ICctJyA8PCBzLmxhc3QubCA8PCAnLicgPDwgcy5sYXN0LmMgLSAxOworICAgIGVsc2UgaWYgKHMuZmlyc3QuYyAhPSBzLmxhc3QuYyAtIDEpCisgICAgICBvIDw8ICctJyA8PCBzLmxhc3QuYyAtIDE7CisgICAgcmV0dXJuIG87CisgIH0KIAogLyogQSBDKysgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KIHZvaWQKLWNhbGM6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGxvY2F0aW9uJiBsLCBjb25zdCBzdGQ6OnN0cmluZyYgbSkKK3l5OjpwYXJzZXI6OmVycm9yIChjb25zdCBsb2NhdGlvbl90eXBlJiBsLCBjb25zdCBzdGQ6OnN0cmluZyYgbSkKIHsKICAgKHZvaWQpIGw7CiAgIHN0ZDo6Y2VyciA8PCBsIDw8ICI6ICIgPDwgbSA8PCBzdGQ6OmVuZGw7CiB9Ci0KLWludAoteXlwYXJzZSAoKQotewotICBjYWxjOjpwYXJzZXIgcGFyc2VyOwotICBwYXJzZXIuc2V0X2RlYnVnX2xldmVsICghIVlZREVCVUcpOwotICByZXR1cm4gcGFyc2VyLnBhcnNlICgpOwotfQorX0FURU9GCiAKIAogCitjYXQgPmNhbGMtbGV4LmNjIDw8J19BVEVPRicKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKIAotc3RhdGljIFlZTFRZUEUgbGFzdF95eWxsb2M7CisjaW5jbHVkZSAiY2FsYy5oaCIKKworI2luY2x1ZGUgPGN0eXBlLmg+CisKK2ludCB5eWxleCAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKTsKK3N0YXRpYyBpbnQgZ2V0X2NoYXIgKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCB5eTo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCk7CitzdGF0aWMgdm9pZCB1bmdldF9jaGFyICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgeXk6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3AsICBpbnQgYyk7CisKKworc3RhdGljIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgbGFzdF95eWxsb2M7CiAKIHN0YXRpYyBpbnQKLWdldF9jaGFyIChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApCitnZXRfY2hhciAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKQogewogICBpbnQgcmVzID0gZ2V0YyAoaW5wdXQpOwogICAodm9pZCkgbHZhbHA7KHZvaWQpIGxsb2NwOwpAQCAtNDc2ODUsMTggKzEwNjYwNywxNyBAQAogICBsYXN0X3l5bGxvYyA9ICgqbGxvY3ApOwogICBpZiAocmVzID09ICdcbicpCiAgICAgewotICAgICAgKCpsbG9jcCkubGFzdF9saW5lKys7Ci0gICAgICAoKmxsb2NwKS5sYXN0X2NvbHVtbiA9IDA7CisgICAgICAoKmxsb2NwKS5sYXN0LmwrKzsKKyAgICAgICgqbGxvY3ApLmxhc3QuYyA9IDE7CiAgICAgfQogICBlbHNlCi0gICAgKCpsbG9jcCkubGFzdF9jb2x1bW4rKzsKKyAgICAoKmxsb2NwKS5sYXN0LmMrKzsKIAogICByZXR1cm4gcmVzOwogfQogCi0KIHN0YXRpYyB2b2lkCi11bmdldF9jaGFyIChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3AsICBpbnQgYykKK3VuZ2V0X2NoYXIgKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCB5eTo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCwgIGludCBjKQogewogICAodm9pZCkgbHZhbHA7KHZvaWQpIGxsb2NwOwogCkBAIC00NzcwNyw3ICsxMDY2MjgsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1yZWFkX3NpZ25lZF9pbnRlZ2VyIChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApCityZWFkX3NpZ25lZF9pbnRlZ2VyICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgeXk6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApCiB7CiAgIGludCBjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCk7CiAgIGludCBzaWduID0gMTsKQEAgLTQ3NzMyLDQwICsxMDY2NTMsMjMgQEAKIH0KIAogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCBMZXhpY2FsIGFuYWx5emVyIHJldHVybnMgYW4gaW50ZWdlciBvbiB0aGUgc3RhY2sgYW5kIHRoZSB0b2tlbiB8CiB8IE5VTSwgb3IgdGhlIEFTQ0lJIGNoYXJhY3RlciByZWFkIGlmIG5vdCBhIG51bWJlci4gIFNraXBzIGFsbCAgIHwKIHwgYmxhbmtzIGFuZCB0YWJzLCByZXR1cm5zIDAgZm9yIEVPRi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQKLXl5bGV4IChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApCitpbnQgeXlsZXggKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCB5eTo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCkKIHsKLSAgc3RhdGljIGludCBpbml0ID0gMTsKICAgaW50IGM7Ci0KLSAgaWYgKGluaXQpCisgIC8qIFNraXAgY3VycmVudCB0b2tlbiwgdGhlbiB3aGl0ZSBzcGFjZXMuICAqLworICBkbwogICAgIHsKLSAgICAgIGluaXQgPSAwOwotCi0gICAgICAoKmxsb2NwKS5sYXN0X2NvbHVtbiA9IDA7Ci0gICAgICAoKmxsb2NwKS5sYXN0X2xpbmUgPSAxOworICAgICAoKmxsb2NwKS5maXJzdC5jID0gKCpsbG9jcCkubGFzdC5jOworICAgICAgKCpsbG9jcCkuZmlyc3QubCAgID0gKCpsbG9jcCkubGFzdC5sOwogCiAgICAgfQotCi0KLSAoKmxsb2NwKS5maXJzdF9jb2x1bW4gPSAoKmxsb2NwKS5sYXN0X2NvbHVtbjsKLSAgKCpsbG9jcCkuZmlyc3RfbGluZSAgID0gKCpsbG9jcCkubGFzdF9saW5lOwotCi0KLSAgLyogU2tpcCB3aGl0ZSBzcGFjZS4gICovCi0gIHdoaWxlICgoYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApKSA9PSAnICcgfHwgYyA9PSAnXHQnKQotICAgIHsKLSAgICAgKCpsbG9jcCkuZmlyc3RfY29sdW1uID0gKCpsbG9jcCkubGFzdF9jb2x1bW47Ci0gICAgICAoKmxsb2NwKS5maXJzdF9saW5lICAgPSAoKmxsb2NwKS5sYXN0X2xpbmU7Ci0KLSAgICB9CisgIHdoaWxlICgoYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApKSA9PSAnICcgfHwgYyA9PSAnXHQnKTsKIAogICAvKiBwcm9jZXNzIG51bWJlcnMgICAqLwogICBpZiAoYyA9PSAnLicgfHwgaXNkaWdpdCAoYykpCkBAIC00Nzc4MiwxOSArMTA2Njg2LDQzIEBACiAgIC8qIFJldHVybiBzaW5nbGUgY2hhcnMuICovCiAgIHJldHVybiBjOwogfQorX0FURU9GCiAKLXN0YXRpYyBpbnQKLXBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQorCitjYXQgPmNhbGMtbWFpbi5jYyA8PCdfQVRFT0YnCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCisKKyNpbmNsdWRlICJjYWxjLmhoIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjIHVuZGVmIGFsYXJtCisjIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLworI2VuZGlmCisKKworLyogQSBDKysgeXlwYXJzZSB0aGF0IHNpbXVsYXRlcyB0aGUgQyBzaWduYXR1cmUuICAqLworaW50Cit5eXBhcnNlICgpCiB7Ci0gIGludCByZXMgPSAxOwotICBpZiAoZXhwb25lbnQgPCAwKQotICAgIGV4aXQgKDMpOwotICBmb3IgKC8qIE5pZW50ZSAqLzsgZXhwb25lbnQ7IC0tZXhwb25lbnQpCi0gICAgcmVzICo9IGJhc2U7Ci0gIHJldHVybiByZXM7CisgIHl5OjpwYXJzZXIgcGFyc2VyOworI2lmIFlZREVCVUcKKyAgcGFyc2VyLnNldF9kZWJ1Z19sZXZlbCAoMSk7CisjZW5kaWYKKyAgcmV0dXJuIHBhcnNlci5wYXJzZSAoKTsKIH0KIAogCitzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKK2ludCBnbG9iYWxfY291bnQgPSAwOworCisvKiBBIEMgbWFpbiBmdW5jdGlvbi4gICovCiBpbnQKIG1haW4gKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKQEAgLTQ3ODIwLDEwICsxMDY3NDgsMTAgQEAKIAogCiAgIHN0YXR1cyA9IHl5cGFyc2UgKCk7Ci0gIGlmIChnbG9iYWxfcmVzdWx0ICE9IHJlc3VsdCkKLSAgICBhYm9ydCAoKTsKLSAgaWYgKGdsb2JhbF9jb3VudCAhPSBjb3VudCkKLSAgICBhYm9ydCAoKTsKKyAgaWYgKGZjbG9zZSAoaW5wdXQpKQorICAgIHBlcnJvciAoImZjbG9zZSIpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOwogICByZXR1cm4gc3RhdHVzOwogfQogX0FURU9GCkBAIC00NzgzMiw4MSArMTA2NzYwLDE3OSBAQAogCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyNDogYmlzb24gLW8gY2FsYy5jYyBjYWxjLnkiCi1lY2hvIGNhbGMuYXQ6NjI0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtbyBjYWxjLmNjIGNhbGMueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyNDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuY2MgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2ODAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuY2MgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuY2MgY2FsYy55IiAiY2FsYy5hdDo2ODAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2ODAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjgwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODA6IGJpc29uIC1vIGNhbGMuY2MgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODAiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gY2FsYy5jYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjQ6IFwkQklTT05fQ1hYX1dPUktTIgotZWNobyBjYWxjLmF0OjYyNCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJEJJU09OX0NYWF9XT1JLUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyNDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODA6IFwkQklTT05fQ1hYX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ1hYX1dPUktTIiAiY2FsYy5hdDo2ODAiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NYWF9XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwOiBcJENYWCBcJENYWEZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jYyBjYWxjLWxleC5jYyBjYWxjLW1haW4uY2MgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmNjIGNhbGMtbGV4LmNjIGNhbGMtbWFpbi5jYyAkTElCUyIgImNhbGMuYXQ6NjgwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuY2MgY2FsYy1sZXguY2MgY2FsYy1tYWluLmNjICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjQ6IFwkQ1hYIFwkQ1hYRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmNjIFwkTElCUyIKLWVjaG8gY2FsYy5hdDo2MjQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuY2MgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwOiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuY2MKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjgwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmNjCiAKLSRhdF90cmFjZW9uCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwOiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuaGgKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjgwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmhoCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKICMgVGVzdCB0aGUgcHJpb3JpdGllcy4KQEAgLTQ3OTI2LDYyICsxMDY5NTIsNjYgQEAKICgyXjIpXjMgPSA2NAogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjQ6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MjQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2ODAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKIAogIyBTb21lIHN5bnRheCBlcnJvcnMuCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLTAgMAorMSAyCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyNDogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYyNCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyNDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjgwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC00Nzk5Miw3OSArMTA3MDIyLDcyIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCiAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCi0KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyNDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2MjQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjI0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjgwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwogMS8vMgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjQ6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MjQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2ODAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNDgwNzUsNzkgKzEwNzA5OCw3MiBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJy8nLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgogCiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgotCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjQ6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjI0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyNDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKIGVycm9yCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyNDogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYyNCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyNDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjgwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC00ODE1OCw3OSArMTA3MTc0LDcyIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkCisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KIAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KLQorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjI0OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYyNCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiAxID0gMiA9IDMKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjI0OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjI0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjI0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODA6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjgwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTQ4MjQxLDQ5ICsxMDcyNTAsNDAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworMS43OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KIAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KLQorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjI0OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYyNCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCkBAIC00ODI5MSwzMCArMTA3MjkxLDMyIEBACiArMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjQ6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MjQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2ODAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNDgzMjUsNzYgKzEwNzMyNyw2OSBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMi4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCisyLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKycKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgogCiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgotCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjQ6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjI0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyNDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAjIEV4ZXJjaXNlIGVycm9yIG1lc3NhZ2VzIHdpdGggRU9GOiB3b3JrIG9uIGFuIGVtcHR5IGZpbGUuCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjI0OiBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgotZWNobyBjYWxjLmF0OjYyNCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MDogIFwkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiICJjYWxjLmF0OjY4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNDg0MDUsNDkgKzEwNzQwMCw0MCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgogCiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgotCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjQ6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjI0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyNDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKQEAgLTQ4NDYyLDggKzEwNzQ0OCw4IEBACiAjCiAjIC0gdGVzdCB0aGUgYWN0aW9uIGFzc29jaWF0ZWQgdG8gYGVycm9yJwogIwotIyAtIGNoZWNrIHRoZSBsb29rLWFoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAotIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2stYWhlYWQgY2F1c2luZyB0aGUKKyMgLSBjaGVjayB0aGUgbG9va2FoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAorIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZQogIyAgIGZpcnN0IGVycm9yIGlzICIpIiwgd2hpY2ggaXMgbmVlZGVkIHRvIHJlY292ZXIgZnJvbSB0aGUgZXJyb3IgYW5kCiAjICAgcHJvZHVjZSB0aGUgIjAiIHRoYXQgdHJpZ2dlcnMgdGhlICIwICE9IDEiIGVycm9yLgogIwpAQCAtNDg0NzEsMzAgKzEwNzQ1NywzMiBAQAogKCkgKyAoMSArIDEgKyAxICspICsgKCogKiAqKSArICgxICogMiAqICopID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjQ6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MjQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2ODAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNDg1MDUsODYgKzEwNzQ5Myw3OSBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjE3OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjIyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjQwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKIGNhbGM6IGVycm9yOiA0NDQ0ICE9IDEKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgogCiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgotCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjQ6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjI0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyNDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKICMgVGhlIHNhbWUsIGJ1dCB0aGlzIHRpbWUgZXhlcmNpc2luZyBleHBsaWNpdGx5IHRyaWdnZXJlZCBzeW50YXggZXJyb3JzLgotIyBQT1NJWCBzYXlzIHRoZSBsb29rLWFoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgorIyBQT1NJWCBzYXlzIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLSghKSArICgwIDApID0gMQorKCEpICsgKDEgMikgPSAxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyNDogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYyNCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyNDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjgwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC00ODU5NSw4MCArMTA3NTc2LDczIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjk6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKIGNhbGM6IGVycm9yOiAyMjIyICE9IDEKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgogCiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgotCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjQ6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjI0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyNDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLSgtICopICsgKDAgMCkgPSAxCisoLSAqKSArICgxIDIpID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjQ6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MjQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2ODAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNDg2NzksMTE1ICsxMDc2NTMsMTQwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogY2FsYzogZXJyb3I6IDIyMjIgIT0gMQogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCiAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCi0KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyNDogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2MjQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjI0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQogCi0kYXRfdHJhY2VvbgorCisjIENoZWNrIHRoYXQgeXllcnJvayB3b3JrcyBwcm9wZXJseTogc2Vjb25kIGVycm9yIGlzIG5vdCByZXBvcnRlZCwKKyMgdGhpcmQgYW5kIGZvdXJ0aCBhcmUuICBQYXJzZSBzdGF0dXMgaXMgc3VjY2VzZnVsbC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCogKikgKyAoKikgKyAoKikKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODA6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjgwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE2OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICAxMDEgKSAjIDEwMS4gY2FsYy5hdDo2MjY6IENhbGN1bGF0b3IgJXNrZWxldG9uICJsYWxyMS5jYyIgJWRlZmluZXMgJWxvY2F0aW9ucyAlcHVyZS1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MKLSAgICBhdF9zZXR1cF9saW5lPSdjYWxjLmF0OjYyNicKLSAgICBhdF9kZXNjPSdDYWxjdWxhdG9yICVza2VsZXRvbiAibGFscjEuY2MiICVkZWZpbmVzICVsb2NhdGlvbnMgJXB1cmUtcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjJwotICAgICRhdF9xdWlldCAkRUNIT19OICIxMDE6IENhbGN1bGF0b3IgJXNrZWxldG9uICJsYWxyMS5jYyIgJWRlZmluZXMgJWxvY2F0aW9ucyAlcHVyZS1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiMTAxLiBjYWxjLmF0OjYyNjogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgotCi0KLQotCi0KLQotCi0KLSMgVXNpbmcgeWFjYy5jPwotCi0KLQotCi0KLQotCi0jIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmICVsb2NhdGlvbiAmICVwdXJlICYgKCVnbHIgb3IgJXBhcnNlLXBhcmFtKS4KLQotIyB5eWVycm9yIGFsd2F5cyBzZWVzIHRoZSBsb2NhdGlvbnMgKHdoZW4gYWN0aXZhdGVkKSwgZXhjZXB0IGlmCi0jIHlhY2MgJiBwdXJlICYgIXBhcmFtLgotCi0KLSMgVGhlIGludGVyZmFjZSBpcyBwdXJlOiBlaXRoZXIgYmVjYXVzZSAlcHVyZS1wYXJzZXIsIG9yIGJlY2F1c2Ugd2UKLSMgYXJlIHVzaW5nIHRoZSBDKysgcGFyc2Vycy4KLQotCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzIzNworI0FUX1NUQVJUXzIzOAorYXRfZm5fZ3JvdXBfYmFubmVyIDIzOCAnY2FsYy5hdDo2ODEnIFwKKyAgIkNhbGN1bGF0b3IgJWxhbmd1YWdlIFwiQysrXCIgJWRlZmluZXMgJWxvY2F0aW9ucyAlZXJyb3ItdmVyYm9zZSAlbmFtZS1wcmVmaXggXCJjYWxjXCIgJXZlcmJvc2UgJXlhY2MiICIiIDEzCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjM4LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogCkBAIC00ODc5OSw3NyArMTA3Nzk4LDYxIEBACiAKIAogY2F0ID5jYWxjLnkgPDwnX0FURU9GJwotJXsKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotICAvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KLSMgdW5kZWYgbWFsbG9jCi0jIHVuZGVmIG1lbWNtcAotIyB1bmRlZiByZWFsbG9jCi0jZW5kaWYKLSV9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCiAvKiBJbmZpeCBub3RhdGlvbiBjYWxjdWxhdG9yLS1jYWxjICovCi0lc2tlbGV0b24gImxhbHIxLmNjIiAlZGVmaW5lcyAlbG9jYXRpb25zICVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJW5hbWUtcHJlZml4PSJjYWxjIiAldmVyYm9zZSAleWFjYwotJWRlZmluZSAiZ2xvYmFsX3Rva2Vuc19hbmRfeXlzdHlwZSIKLSV7Ci0jaW5jbHVkZSA8c3RkaW8uaD4KKyVsYW5ndWFnZSAiQysrIiAlZGVmaW5lcyAlbG9jYXRpb25zICVlcnJvci12ZXJib3NlICVuYW1lLXByZWZpeCAiY2FsYyIgJXZlcmJvc2UgJXlhY2MKKyVkZWZpbmUgZ2xvYmFsX3Rva2Vuc19hbmRfeXlzdHlwZQorJWNvZGUgcmVxdWlyZXMKK3sKIAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2lmIEhBVkVfVU5JU1REX0gKLSMgaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZWxzZQotIyB1bmRlZiBhbGFybQotIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KLSNlbmRpZgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jZGVmaW5lIFVTRShWYXIpCi0KLS8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCi10eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKLQotc3RhdGljIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOwotc3RhdGljIGludCBnbG9iYWxfY291bnQgPSAwOwotJX0KKyAgLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KKyAgdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Cit9CiAKIC8qIEV4ZXJjaXNlICV1bmlvbi4gKi8KICV1bmlvbgogewogICBzZW1hbnRpY192YWx1ZSBpdmFsOwogfTsKKyVwcmludGVyIHsgeXlvdXRwdXQgPDwgJCQ7IH0gPGl2YWw+OwogCi0lewotc3RhdGljIGludCBwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCk7Ci0jaWZuZGVmIFlZTFRZUEUKLSMgZGVmaW5lIFlZTFRZUEUgY2FsYzo6bG9jYXRpb24KLSNlbmRpZgotI2RlZmluZSBmaXJzdF9saW5lICAgYmVnaW4ubGluZQotI2RlZmluZSBmaXJzdF9jb2x1bW4gYmVnaW4uY29sdW1uCi0jZGVmaW5lIGxhc3RfbGluZSAgICBlbmQubGluZQotI2RlZmluZSBsYXN0X2NvbHVtbiAgZW5kLmNvbHVtbgotCi1zdGF0aWMgaW50IHl5bGV4IChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApOwotc3RhdGljIGludCBnZXRfY2hhciAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKTsKLXN0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCwgIGludCBjKTsKLSV9Ci0KLS8qIFRoZSBsYWxyMS5jYyBza2VsZXRvbiwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGRlZmluZXMKLSAgIGEgY29uc3RydWN0b3IgZm9yIHBvc2l0aW9uIHRoYXQgaW5pdGlhbGl6ZXMgdGhlIGZpbGVuYW1lLiAgVGhlCi0gICBnbHIuY2Mgc2tlbGV0b24gZG9lcyBub3QgKGFuZCBpbiBmYWN0IGNhbm5vdDogbG9jYXRpb24vcG9zaXRpb24KLSAgIGFyZSBzdG9yZWQgaW4gYSB1bmlvbiwgZnJvbSB3aGljaCBvYmplY3RzIHdpdGggY29uc3RydWN0b3JzIGFyZQotICAgZXhjbHVkZWQgaW4gQysrLiAqLwotJWluaXRpYWwtYWN0aW9uIHsKLSAgQCQuaW5pdGlhbGl6ZSAoMCk7CislY29kZSBwcm92aWRlcworeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgLyogVGhlIGlucHV0LiAgKi8KKyAgZXh0ZXJuIEZJTEUgKmlucHV0OworICBleHRlcm4gc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdDsKKyAgZXh0ZXJuIGludCBnbG9iYWxfY291bnQ7CiB9CiAKKyVjb2RlCit7CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZGVmaW5lIFVTRShWYXIpCisKK0ZJTEUgKmlucHV0Oworc3RhdGljIGludCBwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCk7CisKKworaW50IGNhbGNsZXggKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApOworfQorCisKIAogLyogQmlzb24gRGVjbGFyYXRpb25zICovCiAldG9rZW4gQ0FMQ19FT0YgMCAiZW5kIG9mIGlucHV0IgogJXRva2VuIDxpdmFsPiBOVU0gIm51bWJlciIKICV0eXBlICA8aXZhbD4gZXhwCiAKLSVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbgkgICAgICAgKi8KKyVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbiAgICAgICAgICAgICovCiAlbGVmdCAnLScgJysnCiAlbGVmdCAnKicgJy8nCiAlbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLwpAQCAtNDg5MDIsMzcgKzEwNzg4NSw1NCBAQAogfCAnLScgZXhwICAlcHJlYyBORUcgeyAkJCA9IC0kMjsgICAgICAgICAgICB9CiB8IGV4cCAnXicgZXhwICAgICAgICB7ICQkID0gcG93ZXIgKCQxLCAkMyk7IH0KIHwgJygnIGV4cCAnKScgICAgICAgIHsgJCQgPSAkMjsgICAgICAgICAgICAgfQotfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7ICAgICAgICAgICB9Cit8ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgeXllcnJvazsgIH0KIHwgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQogfCAnLScgZXJyb3IgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9CiA7CiAlJQotLyogVGhlIGlucHV0LiAgKi8KLXN0YXRpYyBGSUxFICppbnB1dDsKKworc3RhdGljIGludAorcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpCit7CisgIGludCByZXMgPSAxOworICBhc3NlcnQgKDAgPD0gZXhwb25lbnQpOworICBmb3IgKC8qIE5pZW50ZSAqLzsgZXhwb25lbnQ7IC0tZXhwb25lbnQpCisgICAgcmVzICo9IGJhc2U7CisgIHJldHVybiByZXM7Cit9CisKIAogLyogQSBDKysgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KIHZvaWQKLWNhbGM6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGxvY2F0aW9uJiBsLCBjb25zdCBzdGQ6OnN0cmluZyYgbSkKK2NhbGM6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGxvY2F0aW9uX3R5cGUmIGwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtKQogewogICAodm9pZCkgbDsKICAgc3RkOjpjZXJyIDw8IGwgPDwgIjogIiA8PCBtIDw8IHN0ZDo6ZW5kbDsKIH0KLQotaW50Ci15eXBhcnNlICgpCi17Ci0gIGNhbGM6OnBhcnNlciBwYXJzZXI7Ci0gIHBhcnNlci5zZXRfZGVidWdfbGV2ZWwgKCEhWVlERUJVRyk7Ci0gIHJldHVybiBwYXJzZXIucGFyc2UgKCk7Ci19CitfQVRFT0YKIAogCiAKK2NhdCA+Y2FsYy1sZXguY2MgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYwogCi1zdGF0aWMgWVlMVFlQRSBsYXN0X3l5bGxvYzsKKyNpbmNsdWRlICJjYWxjLmhoIgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworaW50IGNhbGNsZXggKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApOworc3RhdGljIGludCBnZXRfY2hhciAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCk7CitzdGF0aWMgdm9pZCB1bmdldF9jaGFyIChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwLCAgaW50IGMpOworCisKK3N0YXRpYyBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgbGFzdF95eWxsb2M7CiAKIHN0YXRpYyBpbnQKLWdldF9jaGFyIChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApCitnZXRfY2hhciAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCkKIHsKICAgaW50IHJlcyA9IGdldGMgKGlucHV0KTsKICAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKQEAgLTQ4OTQwLDE4ICsxMDc5NDAsMTcgQEAKICAgbGFzdF95eWxsb2MgPSAoKmxsb2NwKTsKICAgaWYgKHJlcyA9PSAnXG4nKQogICAgIHsKLSAgICAgICgqbGxvY3ApLmxhc3RfbGluZSsrOwotICAgICAgKCpsbG9jcCkubGFzdF9jb2x1bW4gPSAwOworICAgICAgKCpsbG9jcCkuZW5kLmxpbmUrKzsKKyAgICAgICgqbGxvY3ApLmVuZC5jb2x1bW4gPSAxOwogICAgIH0KICAgZWxzZQotICAgICgqbGxvY3ApLmxhc3RfY29sdW1uKys7CisgICAgKCpsbG9jcCkuZW5kLmNvbHVtbisrOwogCiAgIHJldHVybiByZXM7CiB9CiAKLQogc3RhdGljIHZvaWQKLXVuZ2V0X2NoYXIgKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCwgIGludCBjKQordW5nZXRfY2hhciAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCwgIGludCBjKQogewogICAodm9pZCkgbHZhbHA7KHZvaWQpIGxsb2NwOwogCkBAIC00ODk2Miw3ICsxMDc5NjEsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1yZWFkX3NpZ25lZF9pbnRlZ2VyIChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApCityZWFkX3NpZ25lZF9pbnRlZ2VyIChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKQogewogICBpbnQgYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApOwogICBpbnQgc2lnbiA9IDE7CkBAIC00ODk4Nyw0MCArMTA3OTg2LDIzIEBACiB9CiAKIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgTGV4aWNhbCBhbmFseXplciByZXR1cm5zIGFuIGludGVnZXIgb24gdGhlIHN0YWNrIGFuZCB0aGUgdG9rZW4gfAogfCBOVU0sIG9yIHRoZSBBU0NJSSBjaGFyYWN0ZXIgcmVhZCBpZiBub3QgYSBudW1iZXIuICBTa2lwcyBhbGwgICB8CiB8IGJsYW5rcyBhbmQgdGFicywgcmV0dXJucyAwIGZvciBFT0YuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50Ci15eWxleCAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKQoraW50IGNhbGNsZXggKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApCiB7Ci0gIHN0YXRpYyBpbnQgaW5pdCA9IDE7CiAgIGludCBjOwotCi0gIGlmIChpbml0KQorICAvKiBTa2lwIGN1cnJlbnQgdG9rZW4sIHRoZW4gd2hpdGUgc3BhY2VzLiAgKi8KKyAgZG8KICAgICB7Ci0gICAgICBpbml0ID0gMDsKLQotICAgICAgKCpsbG9jcCkubGFzdF9jb2x1bW4gPSAwOwotICAgICAgKCpsbG9jcCkubGFzdF9saW5lID0gMTsKKyAgICAgKCpsbG9jcCkuYmVnaW4uY29sdW1uID0gKCpsbG9jcCkuZW5kLmNvbHVtbjsKKyAgICAgICgqbGxvY3ApLmJlZ2luLmxpbmUgICA9ICgqbGxvY3ApLmVuZC5saW5lOwogCiAgICAgfQotCi0KLSAoKmxsb2NwKS5maXJzdF9jb2x1bW4gPSAoKmxsb2NwKS5sYXN0X2NvbHVtbjsKLSAgKCpsbG9jcCkuZmlyc3RfbGluZSAgID0gKCpsbG9jcCkubGFzdF9saW5lOwotCi0KLSAgLyogU2tpcCB3aGl0ZSBzcGFjZS4gICovCi0gIHdoaWxlICgoYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApKSA9PSAnICcgfHwgYyA9PSAnXHQnKQotICAgIHsKLSAgICAgKCpsbG9jcCkuZmlyc3RfY29sdW1uID0gKCpsbG9jcCkubGFzdF9jb2x1bW47Ci0gICAgICAoKmxsb2NwKS5maXJzdF9saW5lICAgPSAoKmxsb2NwKS5sYXN0X2xpbmU7Ci0KLSAgICB9CisgIHdoaWxlICgoYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApKSA9PSAnICcgfHwgYyA9PSAnXHQnKTsKIAogICAvKiBwcm9jZXNzIG51bWJlcnMgICAqLwogICBpZiAoYyA9PSAnLicgfHwgaXNkaWdpdCAoYykpCkBAIC00OTAzNywxOSArMTA4MDE5LDQzIEBACiAgIC8qIFJldHVybiBzaW5nbGUgY2hhcnMuICovCiAgIHJldHVybiBjOwogfQorX0FURU9GCiAKLXN0YXRpYyBpbnQKLXBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQorCitjYXQgPmNhbGMtbWFpbi5jYyA8PCdfQVRFT0YnCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCisKKyNpbmNsdWRlICJjYWxjLmhoIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjIHVuZGVmIGFsYXJtCisjIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLworI2VuZGlmCisKKworLyogQSBDKysgY2FsY3BhcnNlIHRoYXQgc2ltdWxhdGVzIHRoZSBDIHNpZ25hdHVyZS4gICovCitpbnQKK2NhbGNwYXJzZSAoKQogewotICBpbnQgcmVzID0gMTsKLSAgaWYgKGV4cG9uZW50IDwgMCkKLSAgICBleGl0ICgzKTsKLSAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQotICAgIHJlcyAqPSBiYXNlOwotICByZXR1cm4gcmVzOworICBjYWxjOjpwYXJzZXIgcGFyc2VyOworI2lmIFlZREVCVUcKKyAgcGFyc2VyLnNldF9kZWJ1Z19sZXZlbCAoMSk7CisjZW5kaWYKKyAgcmV0dXJuIHBhcnNlci5wYXJzZSAoKTsKIH0KIAogCitzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKK2ludCBnbG9iYWxfY291bnQgPSAwOworCisvKiBBIEMgbWFpbiBmdW5jdGlvbi4gICovCiBpbnQKIG1haW4gKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKQEAgLTQ5MDc0LDExICsxMDgwODAsMTEgQEAKICAgICB9CiAKIAotICBzdGF0dXMgPSB5eXBhcnNlICgpOwotICBpZiAoZ2xvYmFsX3Jlc3VsdCAhPSByZXN1bHQpCi0gICAgYWJvcnQgKCk7Ci0gIGlmIChnbG9iYWxfY291bnQgIT0gY291bnQpCi0gICAgYWJvcnQgKCk7CisgIHN0YXR1cyA9IGNhbGNwYXJzZSAoKTsKKyAgaWYgKGZjbG9zZSAoaW5wdXQpKQorICAgIHBlcnJvciAoImZjbG9zZSIpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOwogICByZXR1cm4gc3RhdHVzOwogfQogX0FURU9GCkBAIC00OTA4Nyw4MSArMTA4MDkzLDE3OSBAQAogCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyNjogYmlzb24gLW8gY2FsYy5jYyBjYWxjLnkiCi1lY2hvIGNhbGMuYXQ6NjI2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtbyBjYWxjLmNjIGNhbGMueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyNjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuY2MgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2ODEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuY2MgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuY2MgY2FsYy55IiAiY2FsYy5hdDo2ODEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2ODEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjgxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODE6IGJpc29uIC1vIGNhbGMuY2MgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODEiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gY2FsYy5jYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjY6IFwkQklTT05fQ1hYX1dPUktTIgotZWNobyBjYWxjLmF0OjYyNiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJEJJU09OX0NYWF9XT1JLUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyNjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODE6IFwkQklTT05fQ1hYX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ1hYX1dPUktTIiAiY2FsYy5hdDo2ODEiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NYWF9XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxOiBcJENYWCBcJENYWEZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jYyBjYWxjLWxleC5jYyBjYWxjLW1haW4uY2MgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmNjIGNhbGMtbGV4LmNjIGNhbGMtbWFpbi5jYyAkTElCUyIgImNhbGMuYXQ6NjgxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuY2MgY2FsYy1sZXguY2MgY2FsYy1tYWluLmNjICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjY6IFwkQ1hYIFwkQ1hYRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmNjIFwkTElCUyIKLWVjaG8gY2FsYy5hdDo2MjYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuY2MgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxOiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuY2MKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjgxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmNjCiAKLSRhdF90cmFjZW9uCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxOiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuaGgKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjgxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmhoCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKICMgVGVzdCB0aGUgcHJpb3JpdGllcy4KQEAgLTQ5MTgxLDYyICsxMDgyODUsNjYgQEAKICgyXjIpXjMgPSA2NAogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjY6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MjYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2ODEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKIAogIyBTb21lIHN5bnRheCBlcnJvcnMuCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLTAgMAorMSAyCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyNjogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYyNiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyNjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY4MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjgxIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC00OTI0NywxOCArMTA4MzU1LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC00OTI2Niw2MCArMTA4Mzc2LDUwIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjI2OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYyNiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODEiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiAxLy8yCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyNjogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYyNiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyNjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY4MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjgxIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC00OTMzMCwxOCArMTA4NDMwLDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC00OTM0OSw2MCArMTA4NDUxLDUwIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjI2OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYyNiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODEiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiBlcnJvcgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjY6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MjYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2ODEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNDk0MTMsMTggKzEwODUwNSwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC00OTQzMiw2MCArMTA4NTI2LDUwIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjI2OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYyNiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODEiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiAxID0gMiA9IDMKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjI2OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjI2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjI2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODE6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjgxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTQ5NDk2LDE4ICsxMDg1ODAsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworMS43OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTQ5NTE1LDMwICsxMDg2MDEsMTggQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjY6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjI2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyNjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODE6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKQEAgLTQ5NTQ2LDMwICsxMDg2MjAsMzIgQEAKICsxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyNjogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYyNiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyNjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY4MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjgxIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC00OTU4MCwxOCArMTA4NjU2LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0yLjA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKycKKzIuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC00OTU5OSw1NyArMTA4Njc3LDQ3IEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjI2OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYyNiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODEiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyNjogXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKLWVjaG8gY2FsYy5hdDo2MjYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjI2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODE6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo2ODEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTQ5NjYwLDE4ICsxMDg3MjgsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTQ5Njc5LDMwICsxMDg3NDksMTggQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjY6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjI2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyNjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODE6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKQEAgLTQ5NzE3LDggKzEwODc3NSw4IEBACiAjCiAjIC0gdGVzdCB0aGUgYWN0aW9uIGFzc29jaWF0ZWQgdG8gYGVycm9yJwogIwotIyAtIGNoZWNrIHRoZSBsb29rLWFoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAotIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2stYWhlYWQgY2F1c2luZyB0aGUKKyMgLSBjaGVjayB0aGUgbG9va2FoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAorIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZQogIyAgIGZpcnN0IGVycm9yIGlzICIpIiwgd2hpY2ggaXMgbmVlZGVkIHRvIHJlY292ZXIgZnJvbSB0aGUgZXJyb3IgYW5kCiAjICAgcHJvZHVjZSB0aGUgIjAiIHRoYXQgdHJpZ2dlcnMgdGhlICIwICE9IDEiIGVycm9yLgogIwpAQCAtNDk3MjYsMzAgKzEwODc4NCwzMiBAQAogKCkgKyAoMSArIDEgKyAxICspICsgKCogKiAqKSArICgxICogMiAqICopID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjY6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MjYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2ODEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNDk3NjAsMjEgKzEwODgyMCwyMyBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjE3OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjIyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjQwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKIGNhbGM6IGVycm9yOiA0NDQ0ICE9IDEKIF9BVEVPRgogCkBAIC00OTc4Myw2MyArMTA4ODQ1LDUzIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjI2OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYyNiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODEiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAjIFRoZSBzYW1lLCBidXQgdGhpcyB0aW1lIGV4ZXJjaXNpbmcgZXhwbGljaXRseSB0cmlnZ2VyZWQgc3ludGF4IGVycm9ycy4KLSMgUE9TSVggc2F5cyB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KKyMgUE9TSVggc2F5cyB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0oISkgKyAoMCAwKSA9IDEKKyghKSArICgxIDIpID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2MjY6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MjYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2ODEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNDk4NTAsMTggKzEwODkwMiwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS45OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCiBfQVRFT0YKIApAQCAtNDk4NzAsNjAgKzEwODkyNCw1MCBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyNjogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2MjYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjI2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjgxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotKC0gKikgKyAoMCAwKSA9IDEKKygtICopICsgKDEgMikgPSAxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyNjogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYyNiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyNjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY4MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjgxIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC00OTkzNCwxOSArMTA4OTc4LDIxIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogY2FsYzogZXJyb3I6IDIyMjIgIT0gMQogX0FURU9GCiAKQEAgLTQ5OTU1LDk0ICsxMDkwMDEsMTE1IEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjI2OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYyNiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2MjY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjgxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCiAKLSRhdF90cmFjZW9uCisKKyMgQ2hlY2sgdGhhdCB5eWVycm9rIHdvcmtzIHByb3Blcmx5OiBzZWNvbmQgZXJyb3IgaXMgbm90IHJlcG9ydGVkLAorIyB0aGlyZCBhbmQgZm91cnRoIGFyZS4gIFBhcnNlIHN0YXR1cyBpcyBzdWNjZXNmdWxsLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoKiAqKSArICgqKSArICgqKQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2ODEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTY6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODE6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKIAogCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwotCi0gIDEwMiApICMgMTAyLiBjYWxjLmF0OjYyODogQ2FsY3VsYXRvciAlc2tlbGV0b24gImxhbHIxLmNjIiAlZGVmaW5lcyAlbG9jYXRpb25zICVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJW5hbWUtcHJlZml4PSJjYWxjIiAldmVyYm9zZSAleWFjYyAlcGFyc2UtcGFyYW0ge3NlbWFudGljX3ZhbHVlICpyZXN1bHR9ICVwYXJzZS1wYXJhbSB7aW50ICpjb3VudH0KLSAgICBhdF9zZXR1cF9saW5lPSdjYWxjLmF0OjYyOCcKLSAgICBhdF9kZXNjPSdDYWxjdWxhdG9yICVza2VsZXRvbiAibGFscjEuY2MiICVkZWZpbmVzICVsb2NhdGlvbnMgJXB1cmUtcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjICVwYXJzZS1wYXJhbSB7c2VtYW50aWNfdmFsdWUgKnJlc3VsdH0gJXBhcnNlLXBhcmFtIHtpbnQgKmNvdW50fScKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiMTAyOiBDYWxjdWxhdG9yICVza2VsZXRvbiAibGFscjEuY2MiICVkZWZpbmVzICVsb2NhdGlvbnMgJXB1cmUtcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjICVwYXJzZS1wYXJhbSB7c2VtYW50aWNfdmFsdWUgKnJlc3VsdH0gJXBhcnNlLXBhcmFtIHtpbnQgKmNvdW50fSRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIxMDIuIGNhbGMuYXQ6NjI4OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCi0KLQotCi0KLQotCi0KLQotIyBVc2luZyB5YWNjLmM/Ci0KLQotCi0KLQotCi0KLSMgeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWYgJWxvY2F0aW9uICYgJXB1cmUgJiAoJWdsciBvciAlcGFyc2UtcGFyYW0pLgotCi0jIHl5ZXJyb3IgYWx3YXlzIHNlZXMgdGhlIGxvY2F0aW9ucyAod2hlbiBhY3RpdmF0ZWQpLCBleGNlcHQgaWYKLSMgeWFjYyAmIHB1cmUgJiAhcGFyYW0uCi0KLQotIyBUaGUgaW50ZXJmYWNlIGlzIHB1cmU6IGVpdGhlciBiZWNhdXNlICVwdXJlLXBhcnNlciwgb3IgYmVjYXVzZSB3ZQotIyBhcmUgdXNpbmcgdGhlIEMrKyBwYXJzZXJzLgotCi0KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjM4CisjQVRfU1RBUlRfMjM5CithdF9mbl9ncm91cF9iYW5uZXIgMjM5ICdjYWxjLmF0OjY4MicgXAorICAiQ2FsY3VsYXRvciAlbGFuZ3VhZ2UgXCJDKytcIiAlZGVmaW5lcyAlbG9jYXRpb25zICVlcnJvci12ZXJib3NlICVkZWZpbmUgYXBpLnByZWZpeCBcImNhbGNcIiAldmVyYm9zZSAleWFjYyIgIiIgMTMKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyMzkuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiAKQEAgLTUwMDU0LDc3ICsxMDkxMjEsNDAzMCBAQAogCiAKIGNhdCA+Y2FsYy55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogLyogSW5maXggbm90YXRpb24gY2FsY3VsYXRvci0tY2FsYyAqLwotJXNrZWxldG9uICJsYWxyMS5jYyIgJWRlZmluZXMgJWxvY2F0aW9ucyAlcHVyZS1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MgJXBhcnNlLXBhcmFtIHtzZW1hbnRpY192YWx1ZSAqcmVzdWx0fSAlcGFyc2UtcGFyYW0ge2ludCAqY291bnR9Ci0lZGVmaW5lICJnbG9iYWxfdG9rZW5zX2FuZF95eXN0eXBlIgotJXsKLSNpbmNsdWRlIDxzdGRpby5oPgorJWxhbmd1YWdlICJDKysiICVkZWZpbmVzICVsb2NhdGlvbnMgJWVycm9yLXZlcmJvc2UgJWRlZmluZSBhcGkucHJlZml4ICJjYWxjIiAldmVyYm9zZSAleWFjYworJWRlZmluZSBnbG9iYWxfdG9rZW5zX2FuZF95eXN0eXBlCislY29kZSByZXF1aXJlcworewogCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaWYgSEFWRV9VTklTVERfSAotIyBpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbHNlCi0jIHVuZGVmIGFsYXJtCi0jIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLwotI2VuZGlmCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNkZWZpbmUgVVNFKFZhcikKLQotLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KLXR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOwotCi1zdGF0aWMgc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7Ci1zdGF0aWMgaW50IGdsb2JhbF9jb3VudCA9IDA7Ci0lfQorICAvKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLworICB0eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKK30KIAogLyogRXhlcmNpc2UgJXVuaW9uLiAqLwogJXVuaW9uCiB7CiAgIHNlbWFudGljX3ZhbHVlIGl2YWw7CiB9OworJXByaW50ZXIgeyB5eW91dHB1dCA8PCAkJDsgfSA8aXZhbD47CiAKLSV7Ci1zdGF0aWMgaW50IHBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KTsKLSNpZm5kZWYgWVlMVFlQRQotIyBkZWZpbmUgWVlMVFlQRSBjYWxjOjpsb2NhdGlvbgotI2VuZGlmCi0jZGVmaW5lIGZpcnN0X2xpbmUgICBiZWdpbi5saW5lCi0jZGVmaW5lIGZpcnN0X2NvbHVtbiBiZWdpbi5jb2x1bW4KLSNkZWZpbmUgbGFzdF9saW5lICAgIGVuZC5saW5lCi0jZGVmaW5lIGxhc3RfY29sdW1uICBlbmQuY29sdW1uCi0KLXN0YXRpYyBpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCk7Ci1zdGF0aWMgaW50IGdldF9jaGFyIChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApOwotc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwLCAgaW50IGMpOwotJX0KLQotLyogVGhlIGxhbHIxLmNjIHNrZWxldG9uLCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZGVmaW5lcwotICAgYSBjb25zdHJ1Y3RvciBmb3IgcG9zaXRpb24gdGhhdCBpbml0aWFsaXplcyB0aGUgZmlsZW5hbWUuICBUaGUKLSAgIGdsci5jYyBza2VsZXRvbiBkb2VzIG5vdCAoYW5kIGluIGZhY3QgY2Fubm90OiBsb2NhdGlvbi9wb3NpdGlvbgotICAgYXJlIHN0b3JlZCBpbiBhIHVuaW9uLCBmcm9tIHdoaWNoIG9iamVjdHMgd2l0aCBjb25zdHJ1Y3RvcnMgYXJlCi0gICBleGNsdWRlZCBpbiBDKysuICovCi0laW5pdGlhbC1hY3Rpb24gewotICBAJC5pbml0aWFsaXplICgwKTsKKyVjb2RlIHByb3ZpZGVzCit7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICAvKiBUaGUgaW5wdXQuICAqLworICBleHRlcm4gRklMRSAqaW5wdXQ7CisgIGV4dGVybiBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0OworICBleHRlcm4gaW50IGdsb2JhbF9jb3VudDsKIH0KIAorJWNvZGUKK3sKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNkZWZpbmUgVVNFKFZhcikKKworRklMRSAqaW5wdXQ7CitzdGF0aWMgaW50IHBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KTsKKworCitpbnQgY2FsY2xleCAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCk7Cit9CisKKwogCiAvKiBCaXNvbiBEZWNsYXJhdGlvbnMgKi8KICV0b2tlbiBDQUxDX0VPRiAwICJlbmQgb2YgaW5wdXQiCiAldG9rZW4gPGl2YWw+IE5VTSAibnVtYmVyIgogJXR5cGUgIDxpdmFsPiBleHAKIAotJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uCSAgICAgICAqLworJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uICAgICAgICAgICAgKi8KKyVsZWZ0ICctJyAnKycKKyVsZWZ0ICcqJyAnLycKKyVsZWZ0IE5FRyAgICAgLyogbmVnYXRpb24tLXVuYXJ5IG1pbnVzICovCislcmlnaHQgJ14nICAgIC8qIGV4cG9uZW50aWF0aW9uICAgICAgICAqLworCisvKiBHcmFtbWFyIGZvbGxvd3MgKi8KKyUlCitpbnB1dDoKKyAgbGluZQorfCBpbnB1dCBsaW5lICAgICAgICAgeyAgfQorOworCitsaW5lOgorICAnXG4nCit8IGV4cCAnXG4nICAgICAgICAgICB7IFVTRSAoJDEpOyB9Cis7CisKK2V4cDoKKyAgTlVNICAgICAgICAgICAgICAgIHsgJCQgPSAkMTsgICAgICAgICAgICAgfQorfCBleHAgJz0nIGV4cAorICB7CisgICAgaWYgKCQxICE9ICQzKQorICAgICAgZnByaW50ZiAoc3RkZXJyLCAiY2FsYzogZXJyb3I6ICVkICE9ICVkXG4iLCAkMSwgJDMpOworICAgICQkID0gJDE7CisgIH0KK3wgZXhwICcrJyBleHAgICAgICAgIHsgJCQgPSAkMSArICQzOyAgICAgICAgfQorfCBleHAgJy0nIGV4cCAgICAgICAgeyAkJCA9ICQxIC0gJDM7ICAgICAgICB9Cit8IGV4cCAnKicgZXhwICAgICAgICB7ICQkID0gJDEgKiAkMzsgICAgICAgIH0KK3wgZXhwICcvJyBleHAgICAgICAgIHsgJCQgPSAkMSAvICQzOyAgICAgICAgfQorfCAnLScgZXhwICAlcHJlYyBORUcgeyAkJCA9IC0kMjsgICAgICAgICAgICB9Cit8IGV4cCAnXicgZXhwICAgICAgICB7ICQkID0gcG93ZXIgKCQxLCAkMyk7IH0KK3wgJygnIGV4cCAnKScgICAgICAgIHsgJCQgPSAkMjsgICAgICAgICAgICAgfQorfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7IHl5ZXJyb2s7ICB9Cit8ICchJyAgICAgICAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KK3wgJy0nIGVycm9yICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQorOworJSUKKworc3RhdGljIGludAorcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpCit7CisgIGludCByZXMgPSAxOworICBhc3NlcnQgKDAgPD0gZXhwb25lbnQpOworICBmb3IgKC8qIE5pZW50ZSAqLzsgZXhwb25lbnQ7IC0tZXhwb25lbnQpCisgICAgcmVzICo9IGJhc2U7CisgIHJldHVybiByZXM7Cit9CisKKworLyogQSBDKysgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3ZvaWQKK2NhbGM6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGxvY2F0aW9uX3R5cGUmIGwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtKQoreworICAodm9pZCkgbDsKKyAgc3RkOjpjZXJyIDw8IGwgPDwgIjogIiA8PCBtIDw8IHN0ZDo6ZW5kbDsKK30KK19BVEVPRgorCisKKworY2F0ID5jYWxjLWxleC5jYyA8PCdfQVRFT0YnCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCisKKyNpbmNsdWRlICJjYWxjLmhoIgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworaW50IGNhbGNsZXggKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApOworc3RhdGljIGludCBnZXRfY2hhciAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCk7CitzdGF0aWMgdm9pZCB1bmdldF9jaGFyIChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwLCAgaW50IGMpOworCisKK3N0YXRpYyBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgbGFzdF95eWxsb2M7CisKK3N0YXRpYyBpbnQKK2dldF9jaGFyIChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKQoreworICBpbnQgcmVzID0gZ2V0YyAoaW5wdXQpOworICAodm9pZCkgbHZhbHA7KHZvaWQpIGxsb2NwOworCisgIGxhc3RfeXlsbG9jID0gKCpsbG9jcCk7CisgIGlmIChyZXMgPT0gJ1xuJykKKyAgICB7CisgICAgICAoKmxsb2NwKS5lbmQubGluZSsrOworICAgICAgKCpsbG9jcCkuZW5kLmNvbHVtbiA9IDE7CisgICAgfQorICBlbHNlCisgICAgKCpsbG9jcCkuZW5kLmNvbHVtbisrOworCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkCit1bmdldF9jaGFyIChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwLCAgaW50IGMpCit7CisgICh2b2lkKSBsdmFscDsodm9pZCkgbGxvY3A7CisKKyAgLyogV3Jvbmcgd2hlbiBDID09IGBcbicuICovCisgICgqbGxvY3ApID0gbGFzdF95eWxsb2M7CisKKyAgdW5nZXRjIChjLCBpbnB1dCk7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRfc2lnbmVkX2ludGVnZXIgKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApCit7CisgIGludCBjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCk7CisgIGludCBzaWduID0gMTsKKyAgaW50IG4gPSAwOworCisgICh2b2lkKSBsdmFscDsodm9pZCkgbGxvY3A7CisgIGlmIChjID09ICctJykKKyAgICB7CisgICAgICBjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCk7CisgICAgICBzaWduID0gLTE7CisgICAgfQorCisgIHdoaWxlIChpc2RpZ2l0IChjKSkKKyAgICB7CisgICAgICBuID0gMTAgKiBuICsgKGMgLSAnMCcpOworICAgICAgYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApOworICAgIH0KKworICB1bmdldF9jaGFyIChsdmFscCwgbGxvY3AsICBjKTsKKworICByZXR1cm4gc2lnbiAqIG47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IExleGljYWwgYW5hbHl6ZXIgcmV0dXJucyBhbiBpbnRlZ2VyIG9uIHRoZSBzdGFjayBhbmQgdGhlIHRva2VuIHwKK3wgTlVNLCBvciB0aGUgQVNDSUkgY2hhcmFjdGVyIHJlYWQgaWYgbm90IGEgbnVtYmVyLiAgU2tpcHMgYWxsICAgfAorfCBibGFua3MgYW5kIHRhYnMsIHJldHVybnMgMCBmb3IgRU9GLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworaW50IGNhbGNsZXggKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApCit7CisgIGludCBjOworICAvKiBTa2lwIGN1cnJlbnQgdG9rZW4sIHRoZW4gd2hpdGUgc3BhY2VzLiAgKi8KKyAgZG8KKyAgICB7CisgICAgICgqbGxvY3ApLmJlZ2luLmNvbHVtbiA9ICgqbGxvY3ApLmVuZC5jb2x1bW47CisgICAgICAoKmxsb2NwKS5iZWdpbi5saW5lICAgPSAoKmxsb2NwKS5lbmQubGluZTsKKworICAgIH0KKyAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCkpID09ICcgJyB8fCBjID09ICdcdCcpOworCisgIC8qIHByb2Nlc3MgbnVtYmVycyAgICovCisgIGlmIChjID09ICcuJyB8fCBpc2RpZ2l0IChjKSkKKyAgICB7CisgICAgICB1bmdldF9jaGFyIChsdmFscCwgbGxvY3AsICBjKTsKKyAgICAgICgqbHZhbHApLml2YWwgPSByZWFkX3NpZ25lZF9pbnRlZ2VyIChsdmFscCwgbGxvY3ApOworICAgICAgcmV0dXJuIE5VTTsKKyAgICB9CisKKyAgLyogUmV0dXJuIGVuZC1vZi1maWxlLiAgKi8KKyAgaWYgKGMgPT0gRU9GKQorICAgIHJldHVybiBDQUxDX0VPRjsKKworICAvKiBSZXR1cm4gc2luZ2xlIGNoYXJzLiAqLworICByZXR1cm4gYzsKK30KK19BVEVPRgorCisKK2NhdCA+Y2FsYy1tYWluLmNjIDw8J19BVEVPRicKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKKworI2luY2x1ZGUgImNhbGMuaGgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2Vsc2UKKyMgdW5kZWYgYWxhcm0KKyMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCisjZW5kaWYKKworCisvKiBBIEMrKyBjYWxjcGFyc2UgdGhhdCBzaW11bGF0ZXMgdGhlIEMgc2lnbmF0dXJlLiAgKi8KK2ludAorY2FsY3BhcnNlICgpCit7CisgIGNhbGM6OnBhcnNlciBwYXJzZXI7CisjaWYgQ0FMQ0RFQlVHCisgIHBhcnNlci5zZXRfZGVidWdfbGV2ZWwgKDEpOworI2VuZGlmCisgIHJldHVybiBwYXJzZXIucGFyc2UgKCk7Cit9CisKKworc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7CitpbnQgZ2xvYmFsX2NvdW50ID0gMDsKKworLyogQSBDIG1haW4gZnVuY3Rpb24uICAqLworaW50CittYWluIChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisgIHNlbWFudGljX3ZhbHVlIHJlc3VsdCA9IDA7CisgIGludCBjb3VudCA9IDA7CisgIGludCBzdGF0dXM7CisKKyAgLyogVGhpcyB1c2VkIHRvIGJlIGFsYXJtICgxMCksIGJ1dCB0aGF0IGlzbid0IGVub3VnaCB0aW1lIGZvcgorICAgICBhIEp1bHkgMTk5NSB2aW50YWdlIERFQyBBbHBoYXN0YXRpb24gMjAwIDQvMTAwIHN5c3RlbSwKKyAgICAgYWNjb3JkaW5nIHRvIE5lbHNvbiBILiBGLiBCZWViZS4gIDEwMCBzZWNvbmRzIGlzIGVub3VnaC4gICovCisgIGFsYXJtICgxMDApOworCisgIGlmIChhcmdjID09IDIpCisgICAgaW5wdXQgPSBmb3BlbiAoYXJndlsxXSwgInIiKTsKKyAgZWxzZQorICAgIGlucHV0ID0gc3RkaW47CisKKyAgaWYgKCFpbnB1dCkKKyAgICB7CisgICAgICBwZXJyb3IgKGFyZ3ZbMV0pOworICAgICAgcmV0dXJuIDM7CisgICAgfQorCisKKyAgc3RhdHVzID0gY2FsY3BhcnNlICgpOworICBpZiAoZmNsb3NlIChpbnB1dCkpCisgICAgcGVycm9yICgiZmNsb3NlIik7CisgIGFzc2VydCAoZ2xvYmFsX3Jlc3VsdCA9PSByZXN1bHQpOworICBhc3NlcnQgKGdsb2JhbF9jb3VudCA9PSBjb3VudCk7CisgIHJldHVybiBzdGF0dXM7Cit9CitfQVRFT0YKKworCisKKworCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuY2MgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2ODIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuY2MgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuY2MgY2FsYy55IiAiY2FsYy5hdDo2ODIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2ODIiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NjgyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODI6IGJpc29uIC1vIGNhbGMuY2MgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODIiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gY2FsYy5jYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyOiBcJEJJU09OX0NYWF9XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NYWF9XT1JLUyIgImNhbGMuYXQ6NjgyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DWFhfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyOiBcJENYWCBcJENYWEZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jYyBjYWxjLWxleC5jYyBjYWxjLW1haW4uY2MgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmNjIGNhbGMtbGV4LmNjIGNhbGMtbWFpbi5jYyAkTElCUyIgImNhbGMuYXQ6NjgyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuY2MgY2FsYy1sZXguY2MgY2FsYy1tYWluLmNjICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyOiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuY2MKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NjgyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmNjCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODI6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5oaAorIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2ODIiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuaGgKKworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBUZXN0IHRoZSBwcmlvcml0aWVzLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxICsgMiAqIDMgPSA3CisxICsgMiAqIC0zID0gLTUKKworLTFeMiA9IC0xCisoLTEpXjIgPSAxCisKKy0tLTEgPSAtMQorCisxIC0gMiAtIDMgPSAtNAorMSAtICgyIC0gMykgPSAyCisKKzJeMl4zID0gMjU2CisoMl4yKV4zID0gNjQKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODI6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjgyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODIiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworIyBTb21lIHN5bnRheCBlcnJvcnMuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEgMgorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MjogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2ODIiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4Mjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODI6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEvLzIKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODI6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjgyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODIiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJy8nLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODIiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCitlcnJvcgorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MjogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2ODIiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4Mjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODIiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxID0gMiA9IDMKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODI6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjgyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODIiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS43OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODIiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisKKysxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY4MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjgyIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzIuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MjogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjgyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgRXhlcmNpc2UgZXJyb3IgbWVzc2FnZXMgd2l0aCBFT0Y6IHdvcmsgb24gYW4gZW1wdHkgZmlsZS4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MjogIFwkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiICJjYWxjLmF0OjY4MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4Mjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODI6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgRXhlcmNpc2UgdGhlIGVycm9yIHRva2VuOiB3aXRob3V0IGl0LCB3ZSBkaWUgYXQgdGhlIGZpcnN0IGVycm9yLAorIyBoZW5jZSBiZSBzdXJlIHRvCisjCisjIC0gaGF2ZSBzZXZlcmFsIGVycm9ycyB3aGljaCBleGVyY2lzZSBkaWZmZXJlbnQgc2hpZnQvZGlzY2FyZGluZ3MKKyMgICAtICgpOiBub3RoaW5nIHRvIHBvcCwgbm90aGluZyB0byBkaXNjYXJkCisjICAgLSAoMSArIDEgKyAxICspOiBhIGxvdCB0byBwb3AsIG5vdGhpbmcgdG8gZGlzY2FyZAorIyAgIC0gKCogKiAqKTogbm90aGluZyB0byBwb3AsIGEgbG90IHRvIGRpc2NhcmQKKyMgICAtICgxICsgMiAqICopOiBzb21lIHRvIHBvcCBhbmQgZGlzY2FyZAorIworIyAtIHRlc3QgdGhlIGFjdGlvbiBhc3NvY2lhdGVkIHRvIGBlcnJvcicKKyMKKyMgLSBjaGVjayB0aGUgbG9va2FoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAorIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZQorIyAgIGZpcnN0IGVycm9yIGlzICIpIiwgd2hpY2ggaXMgbmVlZGVkIHRvIHJlY292ZXIgZnJvbSB0aGUgZXJyb3IgYW5kCisjICAgcHJvZHVjZSB0aGUgIjAiIHRoYXQgdHJpZ2dlcnMgdGhlICIwICE9IDEiIGVycm9yLgorIworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoKSArICgxICsgMSArIDEgKykgKyAoKiAqICopICsgKDEgKiAyICogKikgPSAxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY4MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjgyIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xODogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4yMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS40MTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworY2FsYzogZXJyb3I6IDQ0NDQgIT0gMQorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MjogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjgyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBUaGUgc2FtZSwgYnV0IHRoaXMgdGltZSBleGVyY2lzaW5nIGV4cGxpY2l0bHkgdHJpZ2dlcmVkIHN5bnRheCBlcnJvcnMuCisjIFBPU0lYIHNheXMgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCEpICsgKDEgMikgPSAxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY4MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjgyIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKK2NhbGM6IGVycm9yOiAyMjIyICE9IDEKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODI6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygtICopICsgKDEgMikgPSAxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY4MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjgyIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorY2FsYzogZXJyb3I6IDIyMjIgIT0gMQorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MjogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjgyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBDaGVjayB0aGF0IHl5ZXJyb2sgd29ya3MgcHJvcGVybHk6IHNlY29uZCBlcnJvciBpcyBub3QgcmVwb3J0ZWQsCisjIHRoaXJkIGFuZCBmb3VydGggYXJlLiAgUGFyc2Ugc3RhdHVzIGlzIHN1Y2Nlc2Z1bGwuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygqICopICsgKCopICsgKCopCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY4MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgyOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjgyIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MjogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjgyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjM5CisjQVRfU1RBUlRfMjQwCithdF9mbl9ncm91cF9iYW5uZXIgMjQwICdjYWxjLmF0OjY4MycgXAorICAiQ2FsY3VsYXRvciAlbGFuZ3VhZ2UgXCJDKytcIiAlZGVmaW5lcyAlbG9jYXRpb25zICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbmFtZS1wcmVmaXggXCJjYWxjXCIgJXZlcmJvc2UgJXlhY2MiICIiIDEzCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjQwLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworCisKKworCisKKworCisKK2NhdCA+Y2FsYy55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKy8qIEluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3ItLWNhbGMgKi8KKyVsYW5ndWFnZSAiQysrIiAlZGVmaW5lcyAlbG9jYXRpb25zICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbmFtZS1wcmVmaXggImNhbGMiICV2ZXJib3NlICV5YWNjCislZGVmaW5lIGdsb2JhbF90b2tlbnNfYW5kX3l5c3R5cGUKKyVjb2RlIHJlcXVpcmVzCit7CisKKyAgLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KKyAgdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Cit9CisKKy8qIEV4ZXJjaXNlICV1bmlvbi4gKi8KKyV1bmlvbgoreworICBzZW1hbnRpY192YWx1ZSBpdmFsOworfTsKKyVwcmludGVyIHsgeXlvdXRwdXQgPDwgJCQ7IH0gPGl2YWw+OworCislY29kZSBwcm92aWRlcworeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgLyogVGhlIGlucHV0LiAgKi8KKyAgZXh0ZXJuIEZJTEUgKmlucHV0OworICBleHRlcm4gc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdDsKKyAgZXh0ZXJuIGludCBnbG9iYWxfY291bnQ7Cit9CisKKyVjb2RlCit7CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZGVmaW5lIFVTRShWYXIpCisKK0ZJTEUgKmlucHV0Oworc3RhdGljIGludCBwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCk7CisKKworaW50IGNhbGNsZXggKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApOworfQorCisKKworLyogQmlzb24gRGVjbGFyYXRpb25zICovCisldG9rZW4gQ0FMQ19FT0YgMCAiZW5kIG9mIGlucHV0IgorJXRva2VuIDxpdmFsPiBOVU0gIm51bWJlciIKKyV0eXBlICA8aXZhbD4gZXhwCisKKyVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbiAgICAgICAgICAgICovCislbGVmdCAnLScgJysnCislbGVmdCAnKicgJy8nCislbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLworJXJpZ2h0ICdeJyAgICAvKiBleHBvbmVudGlhdGlvbiAgICAgICAgKi8KKworLyogR3JhbW1hciBmb2xsb3dzICovCislJQoraW5wdXQ6CisgIGxpbmUKK3wgaW5wdXQgbGluZSAgICAgICAgIHsgIH0KKzsKKworbGluZToKKyAgJ1xuJworfCBleHAgJ1xuJyAgICAgICAgICAgeyBVU0UgKCQxKTsgfQorOworCitleHA6CisgIE5VTSAgICAgICAgICAgICAgICB7ICQkID0gJDE7ICAgICAgICAgICAgIH0KK3wgZXhwICc9JyBleHAKKyAgeworICAgIGlmICgkMSAhPSAkMykKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImNhbGM6IGVycm9yOiAlZCAhPSAlZFxuIiwgJDEsICQzKTsKKyAgICAkJCA9ICQxOworICB9Cit8IGV4cCAnKycgZXhwICAgICAgICB7ICQkID0gJDEgKyAkMzsgICAgICAgIH0KK3wgZXhwICctJyBleHAgICAgICAgIHsgJCQgPSAkMSAtICQzOyAgICAgICAgfQorfCBleHAgJyonIGV4cCAgICAgICAgeyAkJCA9ICQxICogJDM7ICAgICAgICB9Cit8IGV4cCAnLycgZXhwICAgICAgICB7ICQkID0gJDEgLyAkMzsgICAgICAgIH0KK3wgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSAtJDI7ICAgICAgICAgICAgfQorfCBleHAgJ14nIGV4cCAgICAgICAgeyAkJCA9IHBvd2VyICgkMSwgJDMpOyB9Cit8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgIH0KK3wgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyB5eWVycm9rOyAgfQorfCAnIScgICAgICAgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9Cit8ICctJyBlcnJvciAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KKzsKKyUlCisKK3N0YXRpYyBpbnQKK3Bvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQoreworICBpbnQgcmVzID0gMTsKKyAgYXNzZXJ0ICgwIDw9IGV4cG9uZW50KTsKKyAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQorICAgIHJlcyAqPSBiYXNlOworICByZXR1cm4gcmVzOworfQorCisKKy8qIEEgQysrIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCit2b2lkCitjYWxjOjpwYXJzZXI6OmVycm9yIChjb25zdCBsb2NhdGlvbl90eXBlJiBsLCBjb25zdCBzdGQ6OnN0cmluZyYgbSkKK3sKKyAgKHZvaWQpIGw7CisgIHN0ZDo6Y2VyciA8PCBsIDw8ICI6ICIgPDwgbSA8PCBzdGQ6OmVuZGw7Cit9CitfQVRFT0YKKworCisKK2NhdCA+Y2FsYy1sZXguY2MgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworCisjaW5jbHVkZSAiY2FsYy5oaCIKKworI2luY2x1ZGUgPGN0eXBlLmg+CisKK2ludCBjYWxjbGV4IChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKTsKK3N0YXRpYyBpbnQgZ2V0X2NoYXIgKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApOworc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCwgIGludCBjKTsKKworCitzdGF0aWMgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlIGxhc3RfeXlsbG9jOworCitzdGF0aWMgaW50CitnZXRfY2hhciAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCkKK3sKKyAgaW50IHJlcyA9IGdldGMgKGlucHV0KTsKKyAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKKworICBsYXN0X3l5bGxvYyA9ICgqbGxvY3ApOworICBpZiAocmVzID09ICdcbicpCisgICAgeworICAgICAgKCpsbG9jcCkuZW5kLmxpbmUrKzsKKyAgICAgICgqbGxvY3ApLmVuZC5jb2x1bW4gPSAxOworICAgIH0KKyAgZWxzZQorICAgICgqbGxvY3ApLmVuZC5jb2x1bW4rKzsKKworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZAordW5nZXRfY2hhciAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCwgIGludCBjKQoreworICAodm9pZCkgbHZhbHA7KHZvaWQpIGxsb2NwOworCisgIC8qIFdyb25nIHdoZW4gQyA9PSBgXG4nLiAqLworICAoKmxsb2NwKSA9IGxhc3RfeXlsbG9jOworCisgIHVuZ2V0YyAoYywgaW5wdXQpOworfQorCitzdGF0aWMgaW50CityZWFkX3NpZ25lZF9pbnRlZ2VyIChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKQoreworICBpbnQgYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApOworICBpbnQgc2lnbiA9IDE7CisgIGludCBuID0gMDsKKworICAodm9pZCkgbHZhbHA7KHZvaWQpIGxsb2NwOworICBpZiAoYyA9PSAnLScpCisgICAgeworICAgICAgYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApOworICAgICAgc2lnbiA9IC0xOworICAgIH0KKworICB3aGlsZSAoaXNkaWdpdCAoYykpCisgICAgeworICAgICAgbiA9IDEwICogbiArIChjIC0gJzAnKTsKKyAgICAgIGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKTsKKyAgICB9CisKKyAgdW5nZXRfY2hhciAobHZhbHAsIGxsb2NwLCAgYyk7CisKKyAgcmV0dXJuIHNpZ24gKiBuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBMZXhpY2FsIGFuYWx5emVyIHJldHVybnMgYW4gaW50ZWdlciBvbiB0aGUgc3RhY2sgYW5kIHRoZSB0b2tlbiB8Cit8IE5VTSwgb3IgdGhlIEFTQ0lJIGNoYXJhY3RlciByZWFkIGlmIG5vdCBhIG51bWJlci4gIFNraXBzIGFsbCAgIHwKK3wgYmxhbmtzIGFuZCB0YWJzLCByZXR1cm5zIDAgZm9yIEVPRi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2ludCBjYWxjbGV4IChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKQoreworICBpbnQgYzsKKyAgLyogU2tpcCBjdXJyZW50IHRva2VuLCB0aGVuIHdoaXRlIHNwYWNlcy4gICovCisgIGRvCisgICAgeworICAgICAoKmxsb2NwKS5iZWdpbi5jb2x1bW4gPSAoKmxsb2NwKS5lbmQuY29sdW1uOworICAgICAgKCpsbG9jcCkuYmVnaW4ubGluZSAgID0gKCpsbG9jcCkuZW5kLmxpbmU7CisKKyAgICB9CisgIHdoaWxlICgoYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApKSA9PSAnICcgfHwgYyA9PSAnXHQnKTsKKworICAvKiBwcm9jZXNzIG51bWJlcnMgICAqLworICBpZiAoYyA9PSAnLicgfHwgaXNkaWdpdCAoYykpCisgICAgeworICAgICAgdW5nZXRfY2hhciAobHZhbHAsIGxsb2NwLCAgYyk7CisgICAgICAoKmx2YWxwKS5pdmFsID0gcmVhZF9zaWduZWRfaW50ZWdlciAobHZhbHAsIGxsb2NwKTsKKyAgICAgIHJldHVybiBOVU07CisgICAgfQorCisgIC8qIFJldHVybiBlbmQtb2YtZmlsZS4gICovCisgIGlmIChjID09IEVPRikKKyAgICByZXR1cm4gQ0FMQ19FT0Y7CisKKyAgLyogUmV0dXJuIHNpbmdsZSBjaGFycy4gKi8KKyAgcmV0dXJuIGM7Cit9CitfQVRFT0YKKworCitjYXQgPmNhbGMtbWFpbi5jYyA8PCdfQVRFT0YnCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCisKKyNpbmNsdWRlICJjYWxjLmhoIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjIHVuZGVmIGFsYXJtCisjIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLworI2VuZGlmCisKKworLyogQSBDKysgY2FsY3BhcnNlIHRoYXQgc2ltdWxhdGVzIHRoZSBDIHNpZ25hdHVyZS4gICovCitpbnQKK2NhbGNwYXJzZSAoKQoreworICBjYWxjOjpwYXJzZXIgcGFyc2VyOworI2lmIFlZREVCVUcKKyAgcGFyc2VyLnNldF9kZWJ1Z19sZXZlbCAoMSk7CisjZW5kaWYKKyAgcmV0dXJuIHBhcnNlci5wYXJzZSAoKTsKK30KKworCitzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKK2ludCBnbG9iYWxfY291bnQgPSAwOworCisvKiBBIEMgbWFpbiBmdW5jdGlvbi4gICovCitpbnQKK21haW4gKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKyAgc2VtYW50aWNfdmFsdWUgcmVzdWx0ID0gMDsKKyAgaW50IGNvdW50ID0gMDsKKyAgaW50IHN0YXR1czsKKworICAvKiBUaGlzIHVzZWQgdG8gYmUgYWxhcm0gKDEwKSwgYnV0IHRoYXQgaXNuJ3QgZW5vdWdoIHRpbWUgZm9yCisgICAgIGEgSnVseSAxOTk1IHZpbnRhZ2UgREVDIEFscGhhc3RhdGlvbiAyMDAgNC8xMDAgc3lzdGVtLAorICAgICBhY2NvcmRpbmcgdG8gTmVsc29uIEguIEYuIEJlZWJlLiAgMTAwIHNlY29uZHMgaXMgZW5vdWdoLiAgKi8KKyAgYWxhcm0gKDEwMCk7CisKKyAgaWYgKGFyZ2MgPT0gMikKKyAgICBpbnB1dCA9IGZvcGVuIChhcmd2WzFdLCAiciIpOworICBlbHNlCisgICAgaW5wdXQgPSBzdGRpbjsKKworICBpZiAoIWlucHV0KQorICAgIHsKKyAgICAgIHBlcnJvciAoYXJndlsxXSk7CisgICAgICByZXR1cm4gMzsKKyAgICB9CisKKworICBzdGF0dXMgPSBjYWxjcGFyc2UgKCk7CisgIGlmIChmY2xvc2UgKGlucHV0KSkKKyAgICBwZXJyb3IgKCJmY2xvc2UiKTsKKyAgYXNzZXJ0IChnbG9iYWxfcmVzdWx0ID09IHJlc3VsdCk7CisgIGFzc2VydCAoZ2xvYmFsX2NvdW50ID09IGNvdW50KTsKKyAgcmV0dXJuIHN0YXR1czsKK30KK19BVEVPRgorCisKKworCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjY4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmNjIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jYyBjYWxjLnkiICJjYWxjLmF0OjY4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmNjIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjY4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgzOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2ODMiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MzogYmlzb24gLW8gY2FsYy5jYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBjYWxjLmNjIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODM6IFwkQklTT05fQ1hYX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ1hYX1dPUktTIiAiY2FsYy5hdDo2ODMiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NYWF9XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODM6IFwkQ1hYIFwkQ1hYRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmNjIGNhbGMtbGV4LmNjIGNhbGMtbWFpbi5jYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuY2MgY2FsYy1sZXguY2MgY2FsYy1tYWluLmNjICRMSUJTIiAiY2FsYy5hdDo2ODMiCisoICRhdF9jaGVja190cmFjZTsgJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jYyBjYWxjLWxleC5jYyBjYWxjLW1haW4uY2MgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODM6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5jYworIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2ODMiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuY2MKKworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MzogXCRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCBcIlwkLjoge1wkX31cXG5cIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCBcJC4gPT0gMSkgJiYgL15cXHMqXCQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciBcIm1haW50XCIuCisgICAgICAgICMgfHwgL1xcc1wkLworICAgICAgICApJyBjYWxjLmhoCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjY4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5oaAorCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIFRlc3QgdGhlIHByaW9yaXRpZXMuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEgKyAyICogMyA9IDcKKzEgKyAyICogLTMgPSAtNQorCistMV4yID0gLTEKKygtMSleMiA9IDEKKworLS0tMSA9IC0xCisKKzEgLSAyIC0gMyA9IC00CisxIC0gKDIgLSAzKSA9IDIKKworMl4yXjMgPSAyNTYKKygyXjIpXjMgPSA2NAorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MzogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2ODMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4Mzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisjIFNvbWUgc3ludGF4IGVycm9ycy4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMSAyCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgzOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjgzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjgzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMS8vMgorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MzogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2ODMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4Mzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODM6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKK2Vycm9yCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgzOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjgzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICR1bmRlZmluZWQKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODM6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEgPSAyID0gMworX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MzogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2ODMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4Mzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODM6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKworKzEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODM6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjgzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgzOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODMiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgzOiAgXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIgImNhbGMuYXQ6NjgzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjgzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjgzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBFeGVyY2lzZSB0aGUgZXJyb3IgdG9rZW46IHdpdGhvdXQgaXQsIHdlIGRpZSBhdCB0aGUgZmlyc3QgZXJyb3IsCisjIGhlbmNlIGJlIHN1cmUgdG8KKyMKKyMgLSBoYXZlIHNldmVyYWwgZXJyb3JzIHdoaWNoIGV4ZXJjaXNlIGRpZmZlcmVudCBzaGlmdC9kaXNjYXJkaW5ncworIyAgIC0gKCk6IG5vdGhpbmcgdG8gcG9wLCBub3RoaW5nIHRvIGRpc2NhcmQKKyMgICAtICgxICsgMSArIDEgKyk6IGEgbG90IHRvIHBvcCwgbm90aGluZyB0byBkaXNjYXJkCisjICAgLSAoKiAqICopOiBub3RoaW5nIHRvIHBvcCwgYSBsb3QgdG8gZGlzY2FyZAorIyAgIC0gKDEgKyAyICogKik6IHNvbWUgdG8gcG9wIGFuZCBkaXNjYXJkCisjCisjIC0gdGVzdCB0aGUgYWN0aW9uIGFzc29jaWF0ZWQgdG8gYGVycm9yJworIworIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCisjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKKyMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCisjCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygpICsgKDEgKyAxICsgMSArKSArICgqICogKikgKyAoMSAqIDIgKiAqKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODM6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjgzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjIzOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjQxOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitjYWxjOiBlcnJvcjogNDQ0NCAhPSAxCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgzOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODMiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIFRoZSBzYW1lLCBidXQgdGhpcyB0aW1lIGV4ZXJjaXNpbmcgZXhwbGljaXRseSB0cmlnZ2VyZWQgc3ludGF4IGVycm9ycy4KKyMgUE9TSVggc2F5cyB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoISkgKyAoMSAyKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODM6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjgzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4xMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorY2FsYzogZXJyb3I6IDIyMjIgIT0gMQorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NjgzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKC0gKikgKyAoMSAyKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODM6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjgzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS40OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCitjYWxjOiBlcnJvcjogMjIyMiAhPSAxCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgzOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODMiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIENoZWNrIHRoYXQgeXllcnJvayB3b3JrcyBwcm9wZXJseTogc2Vjb25kIGVycm9yIGlzIG5vdCByZXBvcnRlZCwKKyMgdGhpcmQgYW5kIGZvdXJ0aCBhcmUuICBQYXJzZSBzdGF0dXMgaXMgc3VjY2VzZnVsbC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCogKikgKyAoKikgKyAoKikKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODM6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NjgzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE2OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NjgzOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODMiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yNDAKKyNBVF9TVEFSVF8yNDEKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyNDEgJ2NhbGMuYXQ6Njg1JyBcCisgICJDYWxjdWxhdG9yICVsYW5ndWFnZSBcIkMrK1wiICVkZWZpbmVzICVsb2NhdGlvbnMgJXB1cmUtcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlZGVmaW5lIGFwaS5wcmVmaXggXCJjYWxjXCIgJXZlcmJvc2UgJXlhY2MiICIiIDEzCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjQxLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworCisKKworCisKKworCisKK2NhdCA+Y2FsYy55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKy8qIEluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3ItLWNhbGMgKi8KKyVsYW5ndWFnZSAiQysrIiAlZGVmaW5lcyAlbG9jYXRpb25zICVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWRlZmluZSBhcGkucHJlZml4ICJjYWxjIiAldmVyYm9zZSAleWFjYworJWRlZmluZSBnbG9iYWxfdG9rZW5zX2FuZF95eXN0eXBlCislY29kZSByZXF1aXJlcworeworCisgIC8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCisgIHR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOworfQorCisvKiBFeGVyY2lzZSAldW5pb24uICovCisldW5pb24KK3sKKyAgc2VtYW50aWNfdmFsdWUgaXZhbDsKK307CislcHJpbnRlciB7IHl5b3V0cHV0IDw8ICQkOyB9IDxpdmFsPjsKKworJWNvZGUgcHJvdmlkZXMKK3sKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIC8qIFRoZSBpbnB1dC4gICovCisgIGV4dGVybiBGSUxFICppbnB1dDsKKyAgZXh0ZXJuIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQ7CisgIGV4dGVybiBpbnQgZ2xvYmFsX2NvdW50OworfQorCislY29kZQoreworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2RlZmluZSBVU0UoVmFyKQorCitGSUxFICppbnB1dDsKK3N0YXRpYyBpbnQgcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpOworCisKK2ludCBjYWxjbGV4IChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKTsKK30KKworCisKKy8qIEJpc29uIERlY2xhcmF0aW9ucyAqLworJXRva2VuIENBTENfRU9GIDAgImVuZCBvZiBpbnB1dCIKKyV0b2tlbiA8aXZhbD4gTlVNICJudW1iZXIiCisldHlwZSAgPGl2YWw+IGV4cAorCislbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24gICAgICAgICAgICAqLworJWxlZnQgJy0nICcrJworJWxlZnQgJyonICcvJworJWxlZnQgTkVHICAgICAvKiBuZWdhdGlvbi0tdW5hcnkgbWludXMgKi8KKyVyaWdodCAnXicgICAgLyogZXhwb25lbnRpYXRpb24gICAgICAgICovCisKKy8qIEdyYW1tYXIgZm9sbG93cyAqLworJSUKK2lucHV0OgorICBsaW5lCit8IGlucHV0IGxpbmUgICAgICAgICB7ICB9Cis7CisKK2xpbmU6CisgICdcbicKK3wgZXhwICdcbicgICAgICAgICAgIHsgVVNFICgkMSk7IH0KKzsKKworZXhwOgorICBOVU0gICAgICAgICAgICAgICAgeyAkJCA9ICQxOyAgICAgICAgICAgICB9Cit8IGV4cCAnPScgZXhwCisgIHsKKyAgICBpZiAoJDEgIT0gJDMpCisgICAgICBmcHJpbnRmIChzdGRlcnIsICJjYWxjOiBlcnJvcjogJWQgIT0gJWRcbiIsICQxLCAkMyk7CisgICAgJCQgPSAkMTsKKyAgfQorfCBleHAgJysnIGV4cCAgICAgICAgeyAkJCA9ICQxICsgJDM7ICAgICAgICB9Cit8IGV4cCAnLScgZXhwICAgICAgICB7ICQkID0gJDEgLSAkMzsgICAgICAgIH0KK3wgZXhwICcqJyBleHAgICAgICAgIHsgJCQgPSAkMSAqICQzOyAgICAgICAgfQorfCBleHAgJy8nIGV4cCAgICAgICAgeyAkJCA9ICQxIC8gJDM7ICAgICAgICB9Cit8ICctJyBleHAgICVwcmVjIE5FRyB7ICQkID0gLSQyOyAgICAgICAgICAgIH0KK3wgZXhwICdeJyBleHAgICAgICAgIHsgJCQgPSBwb3dlciAoJDEsICQzKTsgfQorfCAnKCcgZXhwICcpJyAgICAgICAgeyAkJCA9ICQyOyAgICAgICAgICAgICB9Cit8ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgeXllcnJvazsgIH0KK3wgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQorfCAnLScgZXJyb3IgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9Cis7CislJQorCitzdGF0aWMgaW50Citwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKK3sKKyAgaW50IHJlcyA9IDE7CisgIGFzc2VydCAoMCA8PSBleHBvbmVudCk7CisgIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKKyAgICByZXMgKj0gYmFzZTsKKyAgcmV0dXJuIHJlczsKK30KKworCisvKiBBIEMrKyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLwordm9pZAorY2FsYzo6cGFyc2VyOjplcnJvciAoY29uc3QgbG9jYXRpb25fdHlwZSYgbCwgY29uc3Qgc3RkOjpzdHJpbmcmIG0pCit7CisgICh2b2lkKSBsOworICBzdGQ6OmNlcnIgPDwgbCA8PCAiOiAiIDw8IG0gPDwgc3RkOjplbmRsOworfQorX0FURU9GCisKKworCitjYXQgPmNhbGMtbGV4LmNjIDw8J19BVEVPRicKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKKworI2luY2x1ZGUgImNhbGMuaGgiCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCitpbnQgY2FsY2xleCAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCk7CitzdGF0aWMgaW50IGdldF9jaGFyIChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKTsKK3N0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3AsICBpbnQgYyk7CisKKworc3RhdGljIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSBsYXN0X3l5bGxvYzsKKworc3RhdGljIGludAorZ2V0X2NoYXIgKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApCit7CisgIGludCByZXMgPSBnZXRjIChpbnB1dCk7CisgICh2b2lkKSBsdmFscDsodm9pZCkgbGxvY3A7CisKKyAgbGFzdF95eWxsb2MgPSAoKmxsb2NwKTsKKyAgaWYgKHJlcyA9PSAnXG4nKQorICAgIHsKKyAgICAgICgqbGxvY3ApLmVuZC5saW5lKys7CisgICAgICAoKmxsb2NwKS5lbmQuY29sdW1uID0gMTsKKyAgICB9CisgIGVsc2UKKyAgICAoKmxsb2NwKS5lbmQuY29sdW1uKys7CisKKyAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQKK3VuZ2V0X2NoYXIgKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3AsICBpbnQgYykKK3sKKyAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKKworICAvKiBXcm9uZyB3aGVuIEMgPT0gYFxuJy4gKi8KKyAgKCpsbG9jcCkgPSBsYXN0X3l5bGxvYzsKKworICB1bmdldGMgKGMsIGlucHV0KTsKK30KKworc3RhdGljIGludAorcmVhZF9zaWduZWRfaW50ZWdlciAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCkKK3sKKyAgaW50IGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKTsKKyAgaW50IHNpZ24gPSAxOworICBpbnQgbiA9IDA7CisKKyAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKKyAgaWYgKGMgPT0gJy0nKQorICAgIHsKKyAgICAgIGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKTsKKyAgICAgIHNpZ24gPSAtMTsKKyAgICB9CisKKyAgd2hpbGUgKGlzZGlnaXQgKGMpKQorICAgIHsKKyAgICAgIG4gPSAxMCAqIG4gKyAoYyAtICcwJyk7CisgICAgICBjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCk7CisgICAgfQorCisgIHVuZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCwgIGMpOworCisgIHJldHVybiBzaWduICogbjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgTGV4aWNhbCBhbmFseXplciByZXR1cm5zIGFuIGludGVnZXIgb24gdGhlIHN0YWNrIGFuZCB0aGUgdG9rZW4gfAorfCBOVU0sIG9yIHRoZSBBU0NJSSBjaGFyYWN0ZXIgcmVhZCBpZiBub3QgYSBudW1iZXIuICBTa2lwcyBhbGwgICB8Cit8IGJsYW5rcyBhbmQgdGFicywgcmV0dXJucyAwIGZvciBFT0YuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitpbnQgY2FsY2xleCAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCkKK3sKKyAgaW50IGM7CisgIC8qIFNraXAgY3VycmVudCB0b2tlbiwgdGhlbiB3aGl0ZSBzcGFjZXMuICAqLworICBkbworICAgIHsKKyAgICAgKCpsbG9jcCkuYmVnaW4uY29sdW1uID0gKCpsbG9jcCkuZW5kLmNvbHVtbjsKKyAgICAgICgqbGxvY3ApLmJlZ2luLmxpbmUgICA9ICgqbGxvY3ApLmVuZC5saW5lOworCisgICAgfQorICB3aGlsZSAoKGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKSkgPT0gJyAnIHx8IGMgPT0gJ1x0Jyk7CisKKyAgLyogcHJvY2VzcyBudW1iZXJzICAgKi8KKyAgaWYgKGMgPT0gJy4nIHx8IGlzZGlnaXQgKGMpKQorICAgIHsKKyAgICAgIHVuZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCwgIGMpOworICAgICAgKCpsdmFscCkuaXZhbCA9IHJlYWRfc2lnbmVkX2ludGVnZXIgKGx2YWxwLCBsbG9jcCk7CisgICAgICByZXR1cm4gTlVNOworICAgIH0KKworICAvKiBSZXR1cm4gZW5kLW9mLWZpbGUuICAqLworICBpZiAoYyA9PSBFT0YpCisgICAgcmV0dXJuIENBTENfRU9GOworCisgIC8qIFJldHVybiBzaW5nbGUgY2hhcnMuICovCisgIHJldHVybiBjOworfQorX0FURU9GCisKKworY2F0ID5jYWxjLW1haW4uY2MgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworCisjaW5jbHVkZSAiY2FsYy5oaCIKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxzZQorIyB1bmRlZiBhbGFybQorIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KKyNlbmRpZgorCisKKy8qIEEgQysrIGNhbGNwYXJzZSB0aGF0IHNpbXVsYXRlcyB0aGUgQyBzaWduYXR1cmUuICAqLworaW50CitjYWxjcGFyc2UgKCkKK3sKKyAgY2FsYzo6cGFyc2VyIHBhcnNlcjsKKyNpZiBDQUxDREVCVUcKKyAgcGFyc2VyLnNldF9kZWJ1Z19sZXZlbCAoMSk7CisjZW5kaWYKKyAgcmV0dXJuIHBhcnNlci5wYXJzZSAoKTsKK30KKworCitzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKK2ludCBnbG9iYWxfY291bnQgPSAwOworCisvKiBBIEMgbWFpbiBmdW5jdGlvbi4gICovCitpbnQKK21haW4gKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKyAgc2VtYW50aWNfdmFsdWUgcmVzdWx0ID0gMDsKKyAgaW50IGNvdW50ID0gMDsKKyAgaW50IHN0YXR1czsKKworICAvKiBUaGlzIHVzZWQgdG8gYmUgYWxhcm0gKDEwKSwgYnV0IHRoYXQgaXNuJ3QgZW5vdWdoIHRpbWUgZm9yCisgICAgIGEgSnVseSAxOTk1IHZpbnRhZ2UgREVDIEFscGhhc3RhdGlvbiAyMDAgNC8xMDAgc3lzdGVtLAorICAgICBhY2NvcmRpbmcgdG8gTmVsc29uIEguIEYuIEJlZWJlLiAgMTAwIHNlY29uZHMgaXMgZW5vdWdoLiAgKi8KKyAgYWxhcm0gKDEwMCk7CisKKyAgaWYgKGFyZ2MgPT0gMikKKyAgICBpbnB1dCA9IGZvcGVuIChhcmd2WzFdLCAiciIpOworICBlbHNlCisgICAgaW5wdXQgPSBzdGRpbjsKKworICBpZiAoIWlucHV0KQorICAgIHsKKyAgICAgIHBlcnJvciAoYXJndlsxXSk7CisgICAgICByZXR1cm4gMzsKKyAgICB9CisKKworICBzdGF0dXMgPSBjYWxjcGFyc2UgKCk7CisgIGlmIChmY2xvc2UgKGlucHV0KSkKKyAgICBwZXJyb3IgKCJmY2xvc2UiKTsKKyAgYXNzZXJ0IChnbG9iYWxfcmVzdWx0ID09IHJlc3VsdCk7CisgIGFzc2VydCAoZ2xvYmFsX2NvdW50ID09IGNvdW50KTsKKyAgcmV0dXJuIHN0YXR1czsKK30KK19BVEVPRgorCisKKworCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg1OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjY4NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmNjIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jYyBjYWxjLnkiICJjYWxjLmF0OjY4NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmNjIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODU6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjY4NSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg1OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2ODUiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NTogYmlzb24gLW8gY2FsYy5jYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBjYWxjLmNjIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODU6IFwkQklTT05fQ1hYX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ1hYX1dPUktTIiAiY2FsYy5hdDo2ODUiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NYWF9XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODU6IFwkQ1hYIFwkQ1hYRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmNjIGNhbGMtbGV4LmNjIGNhbGMtbWFpbi5jYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuY2MgY2FsYy1sZXguY2MgY2FsYy1tYWluLmNjICRMSUJTIiAiY2FsYy5hdDo2ODUiCisoICRhdF9jaGVja190cmFjZTsgJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jYyBjYWxjLWxleC5jYyBjYWxjLW1haW4uY2MgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODU6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5jYworIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2ODUiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuY2MKKworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NTogXCRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCBcIlwkLjoge1wkX31cXG5cIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCBcJC4gPT0gMSkgJiYgL15cXHMqXCQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciBcIm1haW50XCIuCisgICAgICAgICMgfHwgL1xcc1wkLworICAgICAgICApJyBjYWxjLmhoCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjY4NSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5oaAorCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIFRlc3QgdGhlIHByaW9yaXRpZXMuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEgKyAyICogMyA9IDcKKzEgKyAyICogLTMgPSAtNQorCistMV4yID0gLTEKKygtMSleMiA9IDEKKworLS0tMSA9IC0xCisKKzEgLSAyIC0gMyA9IC00CisxIC0gKDIgLSAzKSA9IDIKKworMl4yXjMgPSAyNTYKKygyXjIpXjMgPSA2NAorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2ODUiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisjIFNvbWUgc3ludGF4IGVycm9ycy4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMSAyCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg1OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY4NSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg1OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njg1IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njg1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMS8vMgorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2ODUiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODU6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKK2Vycm9yCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg1OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY4NSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg1OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njg1IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICR1bmRlZmluZWQKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODU6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEgPSAyID0gMworX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2ODUiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODU6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKworKzEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODU6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6Njg1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg1OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODUiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg1OiAgXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIgImNhbGMuYXQ6Njg1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg1OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njg1IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njg1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBFeGVyY2lzZSB0aGUgZXJyb3IgdG9rZW46IHdpdGhvdXQgaXQsIHdlIGRpZSBhdCB0aGUgZmlyc3QgZXJyb3IsCisjIGhlbmNlIGJlIHN1cmUgdG8KKyMKKyMgLSBoYXZlIHNldmVyYWwgZXJyb3JzIHdoaWNoIGV4ZXJjaXNlIGRpZmZlcmVudCBzaGlmdC9kaXNjYXJkaW5ncworIyAgIC0gKCk6IG5vdGhpbmcgdG8gcG9wLCBub3RoaW5nIHRvIGRpc2NhcmQKKyMgICAtICgxICsgMSArIDEgKyk6IGEgbG90IHRvIHBvcCwgbm90aGluZyB0byBkaXNjYXJkCisjICAgLSAoKiAqICopOiBub3RoaW5nIHRvIHBvcCwgYSBsb3QgdG8gZGlzY2FyZAorIyAgIC0gKDEgKyAyICogKik6IHNvbWUgdG8gcG9wIGFuZCBkaXNjYXJkCisjCisjIC0gdGVzdCB0aGUgYWN0aW9uIGFzc29jaWF0ZWQgdG8gYGVycm9yJworIworIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCisjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKKyMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCisjCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygpICsgKDEgKyAxICsgMSArKSArICgqICogKikgKyAoMSAqIDIgKiAqKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODU6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6Njg1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjIzOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjQxOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitjYWxjOiBlcnJvcjogNDQ0NCAhPSAxCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg1OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODUiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIFRoZSBzYW1lLCBidXQgdGhpcyB0aW1lIGV4ZXJjaXNpbmcgZXhwbGljaXRseSB0cmlnZ2VyZWQgc3ludGF4IGVycm9ycy4KKyMgUE9TSVggc2F5cyB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoISkgKyAoMSAyKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODU6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6Njg1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4xMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorY2FsYzogZXJyb3I6IDIyMjIgIT0gMQorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njg1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKC0gKikgKyAoMSAyKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODU6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6Njg1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS40OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCitjYWxjOiBlcnJvcjogMjIyMiAhPSAxCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg1OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODUiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIENoZWNrIHRoYXQgeXllcnJvayB3b3JrcyBwcm9wZXJseTogc2Vjb25kIGVycm9yIGlzIG5vdCByZXBvcnRlZCwKKyMgdGhpcmQgYW5kIGZvdXJ0aCBhcmUuICBQYXJzZSBzdGF0dXMgaXMgc3VjY2VzZnVsbC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCogKikgKyAoKikgKyAoKikKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODU6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6Njg1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE2OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg1OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODUiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yNDEKKyNBVF9TVEFSVF8yNDIKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyNDIgJ2NhbGMuYXQ6Njg3JyBcCisgICJDYWxjdWxhdG9yICVsYW5ndWFnZSBcIkMrK1wiICVkZWZpbmVzICVsb2NhdGlvbnMgJXB1cmUtcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbmFtZS1wcmVmaXggXCJjYWxjXCIgJXZlcmJvc2UgJXlhY2MgJXBhcnNlLXBhcmFtIHtzZW1hbnRpY192YWx1ZSAqcmVzdWx0fSAlcGFyc2UtcGFyYW0ge2ludCAqY291bnR9IiAiIiAxMworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI0Mi4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworCisKKworCisKKworCitjYXQgPmNhbGMueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisvKiBJbmZpeCBub3RhdGlvbiBjYWxjdWxhdG9yLS1jYWxjICovCislbGFuZ3VhZ2UgIkMrKyIgJWRlZmluZXMgJWxvY2F0aW9ucyAlcHVyZS1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVuYW1lLXByZWZpeCAiY2FsYyIgJXZlcmJvc2UgJXlhY2MgJXBhcnNlLXBhcmFtIHtzZW1hbnRpY192YWx1ZSAqcmVzdWx0fSAlcGFyc2UtcGFyYW0ge2ludCAqY291bnR9CislZGVmaW5lIGdsb2JhbF90b2tlbnNfYW5kX3l5c3R5cGUKKyVjb2RlIHJlcXVpcmVzCit7CisKKyAgLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KKyAgdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Cit9CisKKy8qIEV4ZXJjaXNlICV1bmlvbi4gKi8KKyV1bmlvbgoreworICBzZW1hbnRpY192YWx1ZSBpdmFsOworfTsKKyVwcmludGVyIHsgeXlvdXRwdXQgPDwgJCQ7IH0gPGl2YWw+OworCislY29kZSBwcm92aWRlcworeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgLyogVGhlIGlucHV0LiAgKi8KKyAgZXh0ZXJuIEZJTEUgKmlucHV0OworICBleHRlcm4gc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdDsKKyAgZXh0ZXJuIGludCBnbG9iYWxfY291bnQ7Cit9CisKKyVjb2RlCit7CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZGVmaW5lIFVTRShWYXIpCisKK0ZJTEUgKmlucHV0Oworc3RhdGljIGludCBwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCk7CisKKworaW50IGNhbGNsZXggKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApOworfQorCisKKworLyogQmlzb24gRGVjbGFyYXRpb25zICovCisldG9rZW4gQ0FMQ19FT0YgMCAiZW5kIG9mIGlucHV0IgorJXRva2VuIDxpdmFsPiBOVU0gIm51bWJlciIKKyV0eXBlICA8aXZhbD4gZXhwCisKKyVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbiAgICAgICAgICAgICovCiAlbGVmdCAnLScgJysnCiAlbGVmdCAnKicgJy8nCiAlbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLwpAQCAtNTAxNTcsMTU0ICsxMTMxNzcsMTc3IEBACiB8ICctJyBleHAgICVwcmVjIE5FRyB7ICQkID0gLSQyOyAgICAgICAgICAgIH0KIHwgZXhwICdeJyBleHAgICAgICAgIHsgJCQgPSBwb3dlciAoJDEsICQzKTsgfQogfCAnKCcgZXhwICcpJyAgICAgICAgeyAkJCA9ICQyOyAgICAgICAgICAgICB9Ci18ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgICAgICAgICAgIH0KK3wgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyB5eWVycm9rOyAgfQogfCAnIScgICAgICAgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9CiB8ICctJyBlcnJvciAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KIDsKICUlCi0vKiBUaGUgaW5wdXQuICAqLwotc3RhdGljIEZJTEUgKmlucHV0OworCitzdGF0aWMgaW50Citwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKK3sKKyAgaW50IHJlcyA9IDE7CisgIGFzc2VydCAoMCA8PSBleHBvbmVudCk7CisgIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKKyAgICByZXMgKj0gYmFzZTsKKyAgcmV0dXJuIHJlczsKK30KKwogCiAvKiBBIEMrKyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLwogdm9pZAotY2FsYzo6cGFyc2VyOjplcnJvciAoY29uc3QgbG9jYXRpb24mIGwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtKQorY2FsYzo6cGFyc2VyOjplcnJvciAoY29uc3QgbG9jYXRpb25fdHlwZSYgbCwgY29uc3Qgc3RkOjpzdHJpbmcmIG0pCiB7CiAgICh2b2lkKSBsOwogICBzdGQ6OmNlcnIgPDwgbCA8PCAiOiAiIDw8IG0gPDwgc3RkOjplbmRsOwogfQorX0FURU9GCiAKKworCitjYXQgPmNhbGMtbGV4LmNjIDw8J19BVEVPRicKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKKworI2luY2x1ZGUgImNhbGMuaGgiCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCitpbnQgY2FsY2xleCAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCk7CitzdGF0aWMgaW50IGdldF9jaGFyIChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKTsKK3N0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3AsICBpbnQgYyk7CisKKworc3RhdGljIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSBsYXN0X3l5bGxvYzsKKworc3RhdGljIGludAorZ2V0X2NoYXIgKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApCit7CisgIGludCByZXMgPSBnZXRjIChpbnB1dCk7CisgICh2b2lkKSBsdmFscDsodm9pZCkgbGxvY3A7CisKKyAgbGFzdF95eWxsb2MgPSAoKmxsb2NwKTsKKyAgaWYgKHJlcyA9PSAnXG4nKQorICAgIHsKKyAgICAgICgqbGxvY3ApLmVuZC5saW5lKys7CisgICAgICAoKmxsb2NwKS5lbmQuY29sdW1uID0gMTsKKyAgICB9CisgIGVsc2UKKyAgICAoKmxsb2NwKS5lbmQuY29sdW1uKys7CisKKyAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQKK3VuZ2V0X2NoYXIgKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3AsICBpbnQgYykKK3sKKyAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKKworICAvKiBXcm9uZyB3aGVuIEMgPT0gYFxuJy4gKi8KKyAgKCpsbG9jcCkgPSBsYXN0X3l5bGxvYzsKKworICB1bmdldGMgKGMsIGlucHV0KTsKK30KKworc3RhdGljIGludAorcmVhZF9zaWduZWRfaW50ZWdlciAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCkKK3sKKyAgaW50IGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKTsKKyAgaW50IHNpZ24gPSAxOworICBpbnQgbiA9IDA7CisKKyAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKKyAgaWYgKGMgPT0gJy0nKQorICAgIHsKKyAgICAgIGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKTsKKyAgICAgIHNpZ24gPSAtMTsKKyAgICB9CisKKyAgd2hpbGUgKGlzZGlnaXQgKGMpKQorICAgIHsKKyAgICAgIG4gPSAxMCAqIG4gKyAoYyAtICcwJyk7CisgICAgICBjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCk7CisgICAgfQorCisgIHVuZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCwgIGMpOworCisgIHJldHVybiBzaWduICogbjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgTGV4aWNhbCBhbmFseXplciByZXR1cm5zIGFuIGludGVnZXIgb24gdGhlIHN0YWNrIGFuZCB0aGUgdG9rZW4gfAorfCBOVU0sIG9yIHRoZSBBU0NJSSBjaGFyYWN0ZXIgcmVhZCBpZiBub3QgYSBudW1iZXIuICBTa2lwcyBhbGwgICB8Cit8IGJsYW5rcyBhbmQgdGFicywgcmV0dXJucyAwIGZvciBFT0YuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitpbnQgY2FsY2xleCAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCkKK3sKKyAgaW50IGM7CisgIC8qIFNraXAgY3VycmVudCB0b2tlbiwgdGhlbiB3aGl0ZSBzcGFjZXMuICAqLworICBkbworICAgIHsKKyAgICAgKCpsbG9jcCkuYmVnaW4uY29sdW1uID0gKCpsbG9jcCkuZW5kLmNvbHVtbjsKKyAgICAgICgqbGxvY3ApLmJlZ2luLmxpbmUgICA9ICgqbGxvY3ApLmVuZC5saW5lOworCisgICAgfQorICB3aGlsZSAoKGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKSkgPT0gJyAnIHx8IGMgPT0gJ1x0Jyk7CisKKyAgLyogcHJvY2VzcyBudW1iZXJzICAgKi8KKyAgaWYgKGMgPT0gJy4nIHx8IGlzZGlnaXQgKGMpKQorICAgIHsKKyAgICAgIHVuZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCwgIGMpOworICAgICAgKCpsdmFscCkuaXZhbCA9IHJlYWRfc2lnbmVkX2ludGVnZXIgKGx2YWxwLCBsbG9jcCk7CisgICAgICByZXR1cm4gTlVNOworICAgIH0KKworICAvKiBSZXR1cm4gZW5kLW9mLWZpbGUuICAqLworICBpZiAoYyA9PSBFT0YpCisgICAgcmV0dXJuIENBTENfRU9GOworCisgIC8qIFJldHVybiBzaW5nbGUgY2hhcnMuICovCisgIHJldHVybiBjOworfQorX0FURU9GCisKKworY2F0ID5jYWxjLW1haW4uY2MgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworCisjaW5jbHVkZSAiY2FsYy5oaCIKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxzZQorIyB1bmRlZiBhbGFybQorIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KKyNlbmRpZgorCisKKy8qIEEgQysrIGNhbGNwYXJzZSB0aGF0IHNpbXVsYXRlcyB0aGUgQyBzaWduYXR1cmUuICAqLwogaW50Ci15eXBhcnNlIChzZW1hbnRpY192YWx1ZSAqcmVzdWx0LCBpbnQgKmNvdW50KQorY2FsY3BhcnNlIChzZW1hbnRpY192YWx1ZSAqcmVzdWx0LCBpbnQgKmNvdW50KQogewogICBjYWxjOjpwYXJzZXIgcGFyc2VyIChyZXN1bHQsIGNvdW50KTsKLSAgcGFyc2VyLnNldF9kZWJ1Z19sZXZlbCAoISFZWURFQlVHKTsKKyNpZiBZWURFQlVHCisgIHBhcnNlci5zZXRfZGVidWdfbGV2ZWwgKDEpOworI2VuZGlmCiAgIHJldHVybiBwYXJzZXIucGFyc2UgKCk7CiB9CiAKIAorc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7CitpbnQgZ2xvYmFsX2NvdW50ID0gMDsKIAotCi1zdGF0aWMgWVlMVFlQRSBsYXN0X3l5bGxvYzsKLQotc3RhdGljIGludAotZ2V0X2NoYXIgKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCkKLXsKLSAgaW50IHJlcyA9IGdldGMgKGlucHV0KTsKLSAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKLQotICBsYXN0X3l5bGxvYyA9ICgqbGxvY3ApOwotICBpZiAocmVzID09ICdcbicpCi0gICAgewotICAgICAgKCpsbG9jcCkubGFzdF9saW5lKys7Ci0gICAgICAoKmxsb2NwKS5sYXN0X2NvbHVtbiA9IDA7Ci0gICAgfQotICBlbHNlCi0gICAgKCpsbG9jcCkubGFzdF9jb2x1bW4rKzsKLQotICByZXR1cm4gcmVzOwotfQotCi0KLXN0YXRpYyB2b2lkCi11bmdldF9jaGFyIChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3AsICBpbnQgYykKLXsKLSAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKLQotICAvKiBXcm9uZyB3aGVuIEMgPT0gYFxuJy4gKi8KLSAgKCpsbG9jcCkgPSBsYXN0X3l5bGxvYzsKLQotICB1bmdldGMgKGMsIGlucHV0KTsKLX0KLQotc3RhdGljIGludAotcmVhZF9zaWduZWRfaW50ZWdlciAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKQotewotICBpbnQgYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApOwotICBpbnQgc2lnbiA9IDE7Ci0gIGludCBuID0gMDsKLQotICAodm9pZCkgbHZhbHA7KHZvaWQpIGxsb2NwOwotICBpZiAoYyA9PSAnLScpCi0gICAgewotICAgICAgYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApOwotICAgICAgc2lnbiA9IC0xOwotICAgIH0KLQotICB3aGlsZSAoaXNkaWdpdCAoYykpCi0gICAgewotICAgICAgbiA9IDEwICogbiArIChjIC0gJzAnKTsKLSAgICAgIGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKTsKLSAgICB9Ci0KLSAgdW5nZXRfY2hhciAobHZhbHAsIGxsb2NwLCAgYyk7Ci0KLSAgcmV0dXJuIHNpZ24gKiBuOwotfQotCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IExleGljYWwgYW5hbHl6ZXIgcmV0dXJucyBhbiBpbnRlZ2VyIG9uIHRoZSBzdGFjayBhbmQgdGhlIHRva2VuIHwKLXwgTlVNLCBvciB0aGUgQVNDSUkgY2hhcmFjdGVyIHJlYWQgaWYgbm90IGEgbnVtYmVyLiAgU2tpcHMgYWxsICAgfAotfCBibGFua3MgYW5kIHRhYnMsIHJldHVybnMgMCBmb3IgRU9GLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGludAoteXlsZXggKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCkKLXsKLSAgc3RhdGljIGludCBpbml0ID0gMTsKLSAgaW50IGM7Ci0KLSAgaWYgKGluaXQpCi0gICAgewotICAgICAgaW5pdCA9IDA7Ci0KLSAgICAgICgqbGxvY3ApLmxhc3RfY29sdW1uID0gMDsKLSAgICAgICgqbGxvY3ApLmxhc3RfbGluZSA9IDE7Ci0KLSAgICB9Ci0KLQotICgqbGxvY3ApLmZpcnN0X2NvbHVtbiA9ICgqbGxvY3ApLmxhc3RfY29sdW1uOwotICAoKmxsb2NwKS5maXJzdF9saW5lICAgPSAoKmxsb2NwKS5sYXN0X2xpbmU7Ci0KLQotICAvKiBTa2lwIHdoaXRlIHNwYWNlLiAgKi8KLSAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCkpID09ICcgJyB8fCBjID09ICdcdCcpCi0gICAgewotICAgICAoKmxsb2NwKS5maXJzdF9jb2x1bW4gPSAoKmxsb2NwKS5sYXN0X2NvbHVtbjsKLSAgICAgICgqbGxvY3ApLmZpcnN0X2xpbmUgICA9ICgqbGxvY3ApLmxhc3RfbGluZTsKLQotICAgIH0KLQotICAvKiBwcm9jZXNzIG51bWJlcnMgICAqLwotICBpZiAoYyA9PSAnLicgfHwgaXNkaWdpdCAoYykpCi0gICAgewotICAgICAgdW5nZXRfY2hhciAobHZhbHAsIGxsb2NwLCAgYyk7Ci0gICAgICAoKmx2YWxwKS5pdmFsID0gcmVhZF9zaWduZWRfaW50ZWdlciAobHZhbHAsIGxsb2NwKTsKLSAgICAgIHJldHVybiBOVU07Ci0gICAgfQotCi0gIC8qIFJldHVybiBlbmQtb2YtZmlsZS4gICovCi0gIGlmIChjID09IEVPRikKLSAgICByZXR1cm4gQ0FMQ19FT0Y7Ci0KLSAgLyogUmV0dXJuIHNpbmdsZSBjaGFycy4gKi8KLSAgcmV0dXJuIGM7Ci19Ci0KLXN0YXRpYyBpbnQKLXBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQotewotICBpbnQgcmVzID0gMTsKLSAgaWYgKGV4cG9uZW50IDwgMCkKLSAgICBleGl0ICgzKTsKLSAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQotICAgIHJlcyAqPSBiYXNlOwotICByZXR1cm4gcmVzOwotfQotCi0KKy8qIEEgQyBtYWluIGZ1bmN0aW9uLiAgKi8KIGludAogbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewpAQCAtNTAzMjksMTEgKzExMzM3MiwxMSBAQAogICAgIH0KIAogCi0gIHN0YXR1cyA9IHl5cGFyc2UgKCZyZXN1bHQsICZjb3VudCk7Ci0gIGlmIChnbG9iYWxfcmVzdWx0ICE9IHJlc3VsdCkKLSAgICBhYm9ydCAoKTsKLSAgaWYgKGdsb2JhbF9jb3VudCAhPSBjb3VudCkKLSAgICBhYm9ydCAoKTsKKyAgc3RhdHVzID0gY2FsY3BhcnNlICgmcmVzdWx0LCAmY291bnQpOworICBpZiAoZmNsb3NlIChpbnB1dCkpCisgICAgcGVycm9yICgiZmNsb3NlIik7CisgIGFzc2VydCAoZ2xvYmFsX3Jlc3VsdCA9PSByZXN1bHQpOworICBhc3NlcnQgKGdsb2JhbF9jb3VudCA9PSBjb3VudCk7CiAgIHJldHVybiBzdGF0dXM7CiB9CiBfQVRFT0YKQEAgLTUwMzQyLDgxICsxMTMzODUsMTc5IEBACiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjI4OiBiaXNvbiAtbyBjYWxjLmNjIGNhbGMueSIKLWVjaG8gY2FsYy5hdDo2MjggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGNhbGMuY2MgY2FsYy55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjI4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjY4NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmNjIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jYyBjYWxjLnkiICJjYWxjLmF0OjY4NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmNjIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjY4NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2ODciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NzogYmlzb24gLW8gY2FsYy5jYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBjYWxjLmNjIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyODogXCRCSVNPTl9DWFhfV09SS1MiCi1lY2hvIGNhbGMuYXQ6NjI4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQklTT05fQ1hYX1dPUktTICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjI4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NzogXCRCSVNPTl9DWFhfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DWFhfV09SS1MiICJjYWxjLmF0OjY4NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ1hYX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODc6IFwkQ1hYIFwkQ1hYRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmNjIGNhbGMtbGV4LmNjIGNhbGMtbWFpbi5jYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuY2MgY2FsYy1sZXguY2MgY2FsYy1tYWluLmNjICRMSUJTIiAiY2FsYy5hdDo2ODciCisoICRhdF9jaGVja190cmFjZTsgJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jYyBjYWxjLWxleC5jYyBjYWxjLW1haW4uY2MgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyODogXCRDWFggXCRDWFhGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuY2MgXCRMSUJTIgotZWNobyBjYWxjLmF0OjYyOCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jYyAkTElCUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODc6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5jYworIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2ODciCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuY2MKIAotJGF0X3RyYWNlb24KKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODc6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5oaAorIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2ODciCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuaGgKKworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogIyBUZXN0IHRoZSBwcmlvcml0aWVzLgpAQCAtNTA0MzYsNjIgKzExMzU3Nyw2NiBAQAogKDJeMileMyA9IDY0CiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyODogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYyOCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY4NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njg3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogCiAjIFNvbWUgc3ludGF4IGVycm9ycy4KIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotMCAwCisxIDIKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjI4OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjI4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjI4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODc6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6Njg3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODciCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTUwNTAyLDE4ICsxMTM2NDcsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTUwNTIxLDYwICsxMTM2NjgsNTAgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2Mjg6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjI4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODc6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKIDEvLzIKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjI4OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjI4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjI4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODc6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6Njg3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODciCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTUwNTg1LDE4ICsxMTM3MjIsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJy8nLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTUwNjA0LDYwICsxMTM3NDMsNTAgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2Mjg6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjI4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODc6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKIGVycm9yCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyODogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYyOCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY4NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njg3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC01MDY2OCwxOCArMTEzNzk3LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkCisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTUwNjg3LDYwICsxMTM4MTgsNTAgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2Mjg6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjI4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODc6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKIDEgPSAyID0gMwogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2Mjg6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2MjggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2Mjg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NzogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2ODciCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4Nzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNTA3NTEsMTggKzExMzg3MiwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS42OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCisxLjc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPScKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtNTA3NzAsMzAgKzExMzg5MywxOCBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyODogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2MjggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjI4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njg3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwpAQCAtNTA4MDEsMzAgKzExMzkxMiwzMiBAQAogKzEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjI4OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjI4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjI4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODc6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6Njg3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODciCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTUwODM1LDE4ICsxMTM5NDgsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTIuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTUwODU0LDU3ICsxMTM5NjksNDcgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2Mjg6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjI4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODc6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAjIEV4ZXJjaXNlIGVycm9yIG1lc3NhZ2VzIHdpdGggRU9GOiB3b3JrIG9uIGFuIGVtcHR5IGZpbGUuCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjI4OiBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgotZWNobyBjYWxjLmF0OjYyOCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2Mjg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NzogIFwkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiICJjYWxjLmF0OjY4NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4Nzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNTA5MTUsMTggKzExNDAyMCwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKIF9BVEVPRgogCiAjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgpAQCAtNTA5MzQsMzAgKzExNDA0MSwxOCBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyODogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2MjggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjI4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njg3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIApAQCAtNTA5NzIsOCArMTE0MDY3LDggQEAKICMKICMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCiAjCi0jIC0gY2hlY2sgdGhlIGxvb2stYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCi0jICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZQorIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCiAjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKICMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCiAjCkBAIC01MDk4MSwzMCArMTE0MDc2LDMyIEBACiAoKSArICgxICsgMSArIDEgKykgKyAoKiAqICopICsgKDEgKiAyICogKikgPSAxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyODogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYyOCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY4NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njg3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC01MTAxNSwyMSArMTE0MTEyLDIzIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuNDA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xODogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4yMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS40MTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogY2FsYzogZXJyb3I6IDQ0NDQgIT0gMQogX0FURU9GCiAKQEAgLTUxMDM4LDYzICsxMTQxMzcsNTMgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2Mjg6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjI4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODc6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKICMgVGhlIHNhbWUsIGJ1dCB0aGlzIHRpbWUgZXhlcmNpc2luZyBleHBsaWNpdGx5IHRyaWdnZXJlZCBzeW50YXggZXJyb3JzLgotIyBQT1NJWCBzYXlzIHRoZSBsb29rLWFoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgorIyBQT1NJWCBzYXlzIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLSghKSArICgwIDApID0gMQorKCEpICsgKDEgMikgPSAxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjYyODogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjYyOCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjYyODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY4NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njg3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC01MTEwNSwxOCArMTE0MTk0LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjk6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKIGNhbGM6IGVycm9yOiAyMjIyICE9IDEKIF9BVEVPRgogCkBAIC01MTEyNSw2MCArMTE0MjE2LDUwIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjI4OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYyOCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2Mjg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODciCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0oLSAqKSArICgwIDApID0gMQorKC0gKikgKyAoMSAyKSA9IDEKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjI4OiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjI4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjI4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODc6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6Njg3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODciCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTUxMTg5LDE5ICsxMTQyNzAsMjEgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwotMS4xMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS40OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCiBfQVRFT0YKIApAQCAtNTEyMTAsMTAzICsxMTQyOTMsMTE1IEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjI4OiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjYyOCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2Mjg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODciCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotCi0gIGJhbm5lci0xMiApICMgQmFubmVyIDEyLiBjYWxjLmF0OjYzNgotICAgIGNhdCA8PFxfQVRFT0YKLQotU2ltcGxlIEdMUiBDKysgQ2FsY3VsYXRvci4KLQorIyBDaGVjayB0aGF0IHl5ZXJyb2sgd29ya3MgcHJvcGVybHk6IHNlY29uZCBlcnJvciBpcyBub3QgcmVwb3J0ZWQsCisjIHRoaXJkIGFuZCBmb3VydGggYXJlLiAgUGFyc2Ugc3RhdHVzIGlzIHN1Y2Nlc2Z1bGwuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygqICopICsgKCopICsgKCopCiBfQVRFT0YKLSAgICA7OwogCi0gIDEwMyApICMgMTAzLiBjYWxjLmF0OjY1MTogQ2FsY3VsYXRvciAlc2tlbGV0b24gImdsci5jYyIgJWRlZmluZXMgJWxvY2F0aW9ucyAlcHVyZS1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MKLSAgICBhdF9zZXR1cF9saW5lPSdjYWxjLmF0OjY1MScKLSAgICBhdF9kZXNjPSdDYWxjdWxhdG9yICVza2VsZXRvbiAiZ2xyLmNjIiAlZGVmaW5lcyAlbG9jYXRpb25zICVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJW5hbWUtcHJlZml4PSJjYWxjIiAldmVyYm9zZSAleWFjYycKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiMTAzOiBDYWxjdWxhdG9yICVza2VsZXRvbiAiZ2xyLmNjIiAlZGVmaW5lcyAlbG9jYXRpb25zICVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJW5hbWUtcHJlZml4PSJjYWxjIiAldmVyYm9zZSAleWFjYyRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIxMDMuIGNhbGMuYXQ6NjUxOiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODc6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6Njg3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODciCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE2OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg3OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODciCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAKIAotCi0KLQotIyBVc2luZyB5YWNjLmM/Ci0KLQotCi0KLQotCi0KLSMgeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWYgJWxvY2F0aW9uICYgJXB1cmUgJiAoJWdsciBvciAlcGFyc2UtcGFyYW0pLgotCi0jIHl5ZXJyb3IgYWx3YXlzIHNlZXMgdGhlIGxvY2F0aW9ucyAod2hlbiBhY3RpdmF0ZWQpLCBleGNlcHQgaWYKLSMgeWFjYyAmIHB1cmUgJiAhcGFyYW0uCi0KLQotIyBUaGUgaW50ZXJmYWNlIGlzIHB1cmU6IGVpdGhlciBiZWNhdXNlICVwdXJlLXBhcnNlciwgb3IgYmVjYXVzZSB3ZQotIyBhcmUgdXNpbmcgdGhlIEMrKyBwYXJzZXJzLgotCi0KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjQyCisjQVRfU1RBUlRfMjQzCithdF9mbl9ncm91cF9iYW5uZXIgMjQzICdjYWxjLmF0OjY4OCcgXAorICAiQ2FsY3VsYXRvciAlbGFuZ3VhZ2UgXCJDKytcIiAlZGVmaW5lcyAlbG9jYXRpb25zICVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWRlZmluZSBhcGkucHJlZml4IFwiY2FsY1wiICV2ZXJib3NlICV5YWNjICVwYXJzZS1wYXJhbSB7c2VtYW50aWNfdmFsdWUgKnJlc3VsdH0gJXBhcnNlLXBhcmFtIHtpbnQgKmNvdW50fSIgIiIgMTMKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyNDMuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiAKQEAgLTUxMzE4LDEzMzIgKzExNDQxMyw2MSBAQAogCiAKIGNhdCA+Y2FsYy55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogLyogSW5maXggbm90YXRpb24gY2FsY3VsYXRvci0tY2FsYyAqLwotJXNrZWxldG9uICJnbHIuY2MiICVkZWZpbmVzICVsb2NhdGlvbnMgJXB1cmUtcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjCi0lZGVmaW5lICJnbG9iYWxfdG9rZW5zX2FuZF95eXN0eXBlIgotJXsKLSNpbmNsdWRlIDxzdGRpby5oPgorJWxhbmd1YWdlICJDKysiICVkZWZpbmVzICVsb2NhdGlvbnMgJXB1cmUtcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlZGVmaW5lIGFwaS5wcmVmaXggImNhbGMiICV2ZXJib3NlICV5YWNjICVwYXJzZS1wYXJhbSB7c2VtYW50aWNfdmFsdWUgKnJlc3VsdH0gJXBhcnNlLXBhcmFtIHtpbnQgKmNvdW50fQorJWRlZmluZSBnbG9iYWxfdG9rZW5zX2FuZF95eXN0eXBlCislY29kZSByZXF1aXJlcworewogCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaWYgSEFWRV9VTklTVERfSAotIyBpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbHNlCi0jIHVuZGVmIGFsYXJtCi0jIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLwotI2VuZGlmCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNkZWZpbmUgVVNFKFZhcikKLQotLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KLXR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOwotCi1zdGF0aWMgc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7Ci1zdGF0aWMgaW50IGdsb2JhbF9jb3VudCA9IDA7Ci0lfQorICAvKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLworICB0eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKK30KIAogLyogRXhlcmNpc2UgJXVuaW9uLiAqLwogJXVuaW9uCiB7CiAgIHNlbWFudGljX3ZhbHVlIGl2YWw7CiB9OworJXByaW50ZXIgeyB5eW91dHB1dCA8PCAkJDsgfSA8aXZhbD47CiAKLSV7Ci1zdGF0aWMgaW50IHBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KTsKLSNpZm5kZWYgWVlMVFlQRQotIyBkZWZpbmUgWVlMVFlQRSBjYWxjOjpsb2NhdGlvbgotI2VuZGlmCi0jZGVmaW5lIGZpcnN0X2xpbmUgICBiZWdpbi5saW5lCi0jZGVmaW5lIGZpcnN0X2NvbHVtbiBiZWdpbi5jb2x1bW4KLSNkZWZpbmUgbGFzdF9saW5lICAgIGVuZC5saW5lCi0jZGVmaW5lIGxhc3RfY29sdW1uICBlbmQuY29sdW1uCi0KLXN0YXRpYyBpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCk7Ci1zdGF0aWMgaW50IGdldF9jaGFyIChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApOwotc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwLCAgaW50IGMpOwotJX0KLQotLyogVGhlIGxhbHIxLmNjIHNrZWxldG9uLCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZGVmaW5lcwotICAgYSBjb25zdHJ1Y3RvciBmb3IgcG9zaXRpb24gdGhhdCBpbml0aWFsaXplcyB0aGUgZmlsZW5hbWUuICBUaGUKLSAgIGdsci5jYyBza2VsZXRvbiBkb2VzIG5vdCAoYW5kIGluIGZhY3QgY2Fubm90OiBsb2NhdGlvbi9wb3NpdGlvbgotICAgYXJlIHN0b3JlZCBpbiBhIHVuaW9uLCBmcm9tIHdoaWNoIG9iamVjdHMgd2l0aCBjb25zdHJ1Y3RvcnMgYXJlCi0gICBleGNsdWRlZCBpbiBDKysuICovCi0laW5pdGlhbC1hY3Rpb24gewotICBAJC5pbml0aWFsaXplICgwKTsKKyVjb2RlIHByb3ZpZGVzCit7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICAvKiBUaGUgaW5wdXQuICAqLworICBleHRlcm4gRklMRSAqaW5wdXQ7CisgIGV4dGVybiBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0OworICBleHRlcm4gaW50IGdsb2JhbF9jb3VudDsKIH0KIAorJWNvZGUKK3sKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNkZWZpbmUgVVNFKFZhcikKKworRklMRSAqaW5wdXQ7CitzdGF0aWMgaW50IHBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KTsKKworCitpbnQgY2FsY2xleCAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCk7Cit9CisKKwogCiAvKiBCaXNvbiBEZWNsYXJhdGlvbnMgKi8KICV0b2tlbiBDQUxDX0VPRiAwICJlbmQgb2YgaW5wdXQiCiAldG9rZW4gPGl2YWw+IE5VTSAibnVtYmVyIgogJXR5cGUgIDxpdmFsPiBleHAKIAotJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uCSAgICAgICAqLwotJWxlZnQgJy0nICcrJwotJWxlZnQgJyonICcvJwotJWxlZnQgTkVHICAgICAvKiBuZWdhdGlvbi0tdW5hcnkgbWludXMgKi8KLSVyaWdodCAnXicgICAgLyogZXhwb25lbnRpYXRpb24gICAgICAgICovCi0KLS8qIEdyYW1tYXIgZm9sbG93cyAqLwotJSUKLWlucHV0OgotICBsaW5lCi18IGlucHV0IGxpbmUgICAgICAgICB7ICB9Ci07Ci0KLWxpbmU6Ci0gICdcbicKLXwgZXhwICdcbicgICAgICAgICAgIHsgVVNFICgkMSk7IH0KLTsKLQotZXhwOgotICBOVU0gICAgICAgICAgICAgICAgeyAkJCA9ICQxOyAgICAgICAgICAgICB9Ci18IGV4cCAnPScgZXhwCi0gIHsKLSAgICBpZiAoJDEgIT0gJDMpCi0gICAgICBmcHJpbnRmIChzdGRlcnIsICJjYWxjOiBlcnJvcjogJWQgIT0gJWRcbiIsICQxLCAkMyk7Ci0gICAgJCQgPSAkMTsKLSAgfQotfCBleHAgJysnIGV4cCAgICAgICAgeyAkJCA9ICQxICsgJDM7ICAgICAgICB9Ci18IGV4cCAnLScgZXhwICAgICAgICB7ICQkID0gJDEgLSAkMzsgICAgICAgIH0KLXwgZXhwICcqJyBleHAgICAgICAgIHsgJCQgPSAkMSAqICQzOyAgICAgICAgfQotfCBleHAgJy8nIGV4cCAgICAgICAgeyAkJCA9ICQxIC8gJDM7ICAgICAgICB9Ci18ICctJyBleHAgICVwcmVjIE5FRyB7ICQkID0gLSQyOyAgICAgICAgICAgIH0KLXwgZXhwICdeJyBleHAgICAgICAgIHsgJCQgPSBwb3dlciAoJDEsICQzKTsgfQotfCAnKCcgZXhwICcpJyAgICAgICAgeyAkJCA9ICQyOyAgICAgICAgICAgICB9Ci18ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgICAgICAgICAgIH0KLXwgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQotfCAnLScgZXJyb3IgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9Ci07Ci0lJQotLyogVGhlIGlucHV0LiAgKi8KLXN0YXRpYyBGSUxFICppbnB1dDsKLQotLyogQSBDKysgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KLXZvaWQKLWNhbGM6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGxvY2F0aW9uJiBsLCBjb25zdCBzdGQ6OnN0cmluZyYgbSkKLXsKLSAgKHZvaWQpIGw7Ci0gIHN0ZDo6Y2VyciA8PCBsIDw8ICI6ICIgPDwgbSA8PCBzdGQ6OmVuZGw7Ci19Ci0KLWludAoteXlwYXJzZSAoKQotewotICBjYWxjOjpwYXJzZXIgcGFyc2VyOwotICBwYXJzZXIuc2V0X2RlYnVnX2xldmVsICghIVlZREVCVUcpOwotICByZXR1cm4gcGFyc2VyLnBhcnNlICgpOwotfQotCi0KLQotCi1zdGF0aWMgWVlMVFlQRSBsYXN0X3l5bGxvYzsKLQotc3RhdGljIGludAotZ2V0X2NoYXIgKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCkKLXsKLSAgaW50IHJlcyA9IGdldGMgKGlucHV0KTsKLSAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKLQotICBsYXN0X3l5bGxvYyA9ICgqbGxvY3ApOwotICBpZiAocmVzID09ICdcbicpCi0gICAgewotICAgICAgKCpsbG9jcCkubGFzdF9saW5lKys7Ci0gICAgICAoKmxsb2NwKS5sYXN0X2NvbHVtbiA9IDA7Ci0gICAgfQotICBlbHNlCi0gICAgKCpsbG9jcCkubGFzdF9jb2x1bW4rKzsKLQotICByZXR1cm4gcmVzOwotfQotCi0KLXN0YXRpYyB2b2lkCi11bmdldF9jaGFyIChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3AsICBpbnQgYykKLXsKLSAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKLQotICAvKiBXcm9uZyB3aGVuIEMgPT0gYFxuJy4gKi8KLSAgKCpsbG9jcCkgPSBsYXN0X3l5bGxvYzsKLQotICB1bmdldGMgKGMsIGlucHV0KTsKLX0KLQotc3RhdGljIGludAotcmVhZF9zaWduZWRfaW50ZWdlciAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKQotewotICBpbnQgYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApOwotICBpbnQgc2lnbiA9IDE7Ci0gIGludCBuID0gMDsKLQotICAodm9pZCkgbHZhbHA7KHZvaWQpIGxsb2NwOwotICBpZiAoYyA9PSAnLScpCi0gICAgewotICAgICAgYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApOwotICAgICAgc2lnbiA9IC0xOwotICAgIH0KLQotICB3aGlsZSAoaXNkaWdpdCAoYykpCi0gICAgewotICAgICAgbiA9IDEwICogbiArIChjIC0gJzAnKTsKLSAgICAgIGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKTsKLSAgICB9Ci0KLSAgdW5nZXRfY2hhciAobHZhbHAsIGxsb2NwLCAgYyk7Ci0KLSAgcmV0dXJuIHNpZ24gKiBuOwotfQotCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IExleGljYWwgYW5hbHl6ZXIgcmV0dXJucyBhbiBpbnRlZ2VyIG9uIHRoZSBzdGFjayBhbmQgdGhlIHRva2VuIHwKLXwgTlVNLCBvciB0aGUgQVNDSUkgY2hhcmFjdGVyIHJlYWQgaWYgbm90IGEgbnVtYmVyLiAgU2tpcHMgYWxsICAgfAotfCBibGFua3MgYW5kIHRhYnMsIHJldHVybnMgMCBmb3IgRU9GLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGludAoteXlsZXggKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCkKLXsKLSAgc3RhdGljIGludCBpbml0ID0gMTsKLSAgaW50IGM7Ci0KLSAgaWYgKGluaXQpCi0gICAgewotICAgICAgaW5pdCA9IDA7Ci0KLSAgICAgICgqbGxvY3ApLmxhc3RfY29sdW1uID0gMDsKLSAgICAgICgqbGxvY3ApLmxhc3RfbGluZSA9IDE7Ci0KLSAgICB9Ci0KLQotICgqbGxvY3ApLmZpcnN0X2NvbHVtbiA9ICgqbGxvY3ApLmxhc3RfY29sdW1uOwotICAoKmxsb2NwKS5maXJzdF9saW5lICAgPSAoKmxsb2NwKS5sYXN0X2xpbmU7Ci0KLQotICAvKiBTa2lwIHdoaXRlIHNwYWNlLiAgKi8KLSAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCkpID09ICcgJyB8fCBjID09ICdcdCcpCi0gICAgewotICAgICAoKmxsb2NwKS5maXJzdF9jb2x1bW4gPSAoKmxsb2NwKS5sYXN0X2NvbHVtbjsKLSAgICAgICgqbGxvY3ApLmZpcnN0X2xpbmUgICA9ICgqbGxvY3ApLmxhc3RfbGluZTsKLQotICAgIH0KLQotICAvKiBwcm9jZXNzIG51bWJlcnMgICAqLwotICBpZiAoYyA9PSAnLicgfHwgaXNkaWdpdCAoYykpCi0gICAgewotICAgICAgdW5nZXRfY2hhciAobHZhbHAsIGxsb2NwLCAgYyk7Ci0gICAgICAoKmx2YWxwKS5pdmFsID0gcmVhZF9zaWduZWRfaW50ZWdlciAobHZhbHAsIGxsb2NwKTsKLSAgICAgIHJldHVybiBOVU07Ci0gICAgfQotCi0gIC8qIFJldHVybiBlbmQtb2YtZmlsZS4gICovCi0gIGlmIChjID09IEVPRikKLSAgICByZXR1cm4gQ0FMQ19FT0Y7Ci0KLSAgLyogUmV0dXJuIHNpbmdsZSBjaGFycy4gKi8KLSAgcmV0dXJuIGM7Ci19Ci0KLXN0YXRpYyBpbnQKLXBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQotewotICBpbnQgcmVzID0gMTsKLSAgaWYgKGV4cG9uZW50IDwgMCkKLSAgICBleGl0ICgzKTsKLSAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQotICAgIHJlcyAqPSBiYXNlOwotICByZXR1cm4gcmVzOwotfQotCi0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQotewotICBzZW1hbnRpY192YWx1ZSByZXN1bHQgPSAwOwotICBpbnQgY291bnQgPSAwOwotICBpbnQgc3RhdHVzOwotCi0gIC8qIFRoaXMgdXNlZCB0byBiZSBhbGFybSAoMTApLCBidXQgdGhhdCBpc24ndCBlbm91Z2ggdGltZSBmb3IKLSAgICAgYSBKdWx5IDE5OTUgdmludGFnZSBERUMgQWxwaGFzdGF0aW9uIDIwMCA0LzEwMCBzeXN0ZW0sCi0gICAgIGFjY29yZGluZyB0byBOZWxzb24gSC4gRi4gQmVlYmUuICAxMDAgc2Vjb25kcyBpcyBlbm91Z2guICAqLwotICBhbGFybSAoMTAwKTsKLQotICBpZiAoYXJnYyA9PSAyKQotICAgIGlucHV0ID0gZm9wZW4gKGFyZ3ZbMV0sICJyIik7Ci0gIGVsc2UKLSAgICBpbnB1dCA9IHN0ZGluOwotCi0gIGlmICghaW5wdXQpCi0gICAgewotICAgICAgcGVycm9yIChhcmd2WzFdKTsKLSAgICAgIHJldHVybiAzOwotICAgIH0KLQotCi0gIHN0YXR1cyA9IHl5cGFyc2UgKCk7Ci0gIGlmIChnbG9iYWxfcmVzdWx0ICE9IHJlc3VsdCkKLSAgICBhYm9ydCAoKTsKLSAgaWYgKGdsb2JhbF9jb3VudCAhPSBjb3VudCkKLSAgICBhYm9ydCAoKTsKLSAgcmV0dXJuIHN0YXR1czsKLX0KLV9BVEVPRgotCi0KLQotCi0KLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2NTE6IGJpc29uIC1vIGNhbGMuY2MgY2FsYy55IgotZWNobyBjYWxjLmF0OjY1MSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gY2FsYy5jYyBjYWxjLnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2NTE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0KLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2NTE6IFwkQklTT05fQ1hYX1dPUktTIgotZWNobyBjYWxjLmF0OjY1MSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJEJJU09OX0NYWF9XT1JLUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjY1MTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCi0KLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2NTE6IFwkQ1hYIFwkQ1hYRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmNjIFwkTElCUyIKLWVjaG8gY2FsYy5hdDo2NTEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuY2MgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2NTE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0KLSMgVGVzdCB0aGUgcHJpb3JpdGllcy4KLWNhdCA+aW5wdXQgPDwnX0FURU9GJwotMSArIDIgKiAzID0gNwotMSArIDIgKiAtMyA9IC01Ci0KLS0xXjIgPSAtMQotKC0xKV4yID0gMQotCi0tLS0xID0gLTEKLQotMSAtIDIgLSAzID0gLTQKLTEgLSAoMiAtIDMpID0gMgotCi0yXjJeMyA9IDI1NgotKDJeMileMyA9IDY0Ci1fQVRFT0YKLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjY1MTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjY1MSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjY1MTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCi0KLQotCi0jIFNvbWUgc3ludGF4IGVycm9ycy4KLWNhdCA+aW5wdXQgPDwnX0FURU9GJwotMCAwCi1fQVRFT0YKLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjY1MTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjY1MSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjY1MTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCi0KLQotIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCi0jIG9wdGlvbnMuCi0jIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCi1zZWQgJy9eU3RhcnRpbmcvZAotL15FbnRlcmluZy9kCi0vXlN0YWNrL2QKLS9eUmVhZGluZy9kCi0vXlJlZHVjaW5nL2QKLS9eU2hpZnRpbmcvZAotL15zdGF0ZS9kCi0vXkNsZWFudXA6L2QKLS9eRXJyb3I6L2QKLS9eTmV4dC9kCi0vXkRpc2NhcmRpbmcvZAotLyBcJFswLTkkXSogPSAvZAotL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCi1tdiBhdC1zdGRlcnIgc3RkZXJyCi0jIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCi1jYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKLV9BVEVPRgotCi0jIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgotCi0jIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgotCi0jIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjUxOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjY1MSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2NTE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0KLWNhdCA+aW5wdXQgPDwnX0FURU9GJwotMS8vMgotX0FURU9GCi0KLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2NTE6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2NTEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2NTE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0KLSMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQotIyBvcHRpb25zLgotIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgotc2VkICcvXlN0YXJ0aW5nL2QKLS9eRW50ZXJpbmcvZAotL15TdGFjay9kCi0vXlJlYWRpbmcvZAotL15SZWR1Y2luZy9kCi0vXlNoaWZ0aW5nL2QKLS9ec3RhdGUvZAotL15DbGVhbnVwOi9kCi0vXkVycm9yOi9kCi0vXk5leHQvZAotL15EaXNjYXJkaW5nL2QKLS8gXCRbMC05JF0qID0gL2QKLS9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgotbXYgYXQtc3RkZXJyIHN0ZGVycgotIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgotY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJy8nLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi1fQVRFT0YKLQotIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KLQotIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KLQotIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjY1MTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2NTEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjUxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KLQotCi1jYXQgPmlucHV0IDw8J19BVEVPRicKLWVycm9yCi1fQVRFT0YKLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjY1MTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjY1MSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjY1MTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCi0KLQotIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCi0jIG9wdGlvbnMuCi0jIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCi1zZWQgJy9eU3RhcnRpbmcvZAotL15FbnRlcmluZy9kCi0vXlN0YWNrL2QKLS9eUmVhZGluZy9kCi0vXlJlZHVjaW5nL2QKLS9eU2hpZnRpbmcvZAotL15zdGF0ZS9kCi0vXkNsZWFudXA6L2QKLS9eRXJyb3I6L2QKLS9eTmV4dC9kCi0vXkRpc2NhcmRpbmcvZAotLyBcJFswLTkkXSogPSAvZAotL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCi1tdiBhdC1zdGRlcnIgc3RkZXJyCi0jIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCi1jYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkCi1fQVRFT0YKLQotIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KLQotIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KLQotIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjY1MTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2NTEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjUxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KLQotCi1jYXQgPmlucHV0IDw8J19BVEVPRicKLTEgPSAyID0gMwotX0FURU9GCi0KLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2NTE6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2NTEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2NTE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0KLSMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQotIyBvcHRpb25zLgotIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgotc2VkICcvXlN0YXJ0aW5nL2QKLS9eRW50ZXJpbmcvZAotL15TdGFjay9kCi0vXlJlYWRpbmcvZAotL15SZWR1Y2luZy9kCi0vXlNoaWZ0aW5nL2QKLS9ec3RhdGUvZAotL15DbGVhbnVwOi9kCi0vXkVycm9yOi9kCi0vXk5leHQvZAotL15EaXNjYXJkaW5nL2QKLS8gXCRbMC05JF0qID0gL2QKLS9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgotbXYgYXQtc3RkZXJyIHN0ZGVycgotIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgotY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS42OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCi1fQVRFT0YKLQotIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KLQotIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KLQotIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjY1MTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2NTEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjUxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KLQotCi1jYXQgPmlucHV0IDw8J19BVEVPRicKLQotKzEKLV9BVEVPRgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjUxOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjUxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjUxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KLQotCi0jIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKLSMgb3B0aW9ucy4KLSMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KLXNlZCAnL15TdGFydGluZy9kCi0vXkVudGVyaW5nL2QKLS9eU3RhY2svZAotL15SZWFkaW5nL2QKLS9eUmVkdWNpbmcvZAotL15TaGlmdGluZy9kCi0vXnN0YXRlL2QKLS9eQ2xlYW51cDovZAotL15FcnJvcjovZAotL15OZXh0L2QKLS9eRGlzY2FyZGluZy9kCi0vIFwkWzAtOSRdKiA9IC9kCi0vXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKLW12IGF0LXN0ZGVyciBzdGRlcnIKLSMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KLWNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTIuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJwotX0FURU9GCi0KLSMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCi0KLSMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCi0KLSMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2NTE6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjUxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjY1MTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCi0KLQotIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjY1MTogXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKLWVjaG8gY2FsYy5hdDo2NTEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjUxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KLQotCi0jIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKLSMgb3B0aW9ucy4KLSMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KLXNlZCAnL15TdGFydGluZy9kCi0vXkVudGVyaW5nL2QKLS9eU3RhY2svZAotL15SZWFkaW5nL2QKLS9eUmVkdWNpbmcvZAotL15TaGlmdGluZy9kCi0vXnN0YXRlL2QKLS9eQ2xlYW51cDovZAotL15FcnJvcjovZAotL15OZXh0L2QKLS9eRGlzY2FyZGluZy9kCi0vIFwkWzAtOSRdKiA9IC9kCi0vXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKLW12IGF0LXN0ZGVyciBzdGRlcnIKLSMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KLWNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAotX0FURU9GCi0KLSMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCi0KLSMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCi0KLSMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2NTE6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjUxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjY1MTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCi0KLQotCi0jIEV4ZXJjaXNlIHRoZSBlcnJvciB0b2tlbjogd2l0aG91dCBpdCwgd2UgZGllIGF0IHRoZSBmaXJzdCBlcnJvciwKLSMgaGVuY2UgYmUgc3VyZSB0bwotIwotIyAtIGhhdmUgc2V2ZXJhbCBlcnJvcnMgd2hpY2ggZXhlcmNpc2UgZGlmZmVyZW50IHNoaWZ0L2Rpc2NhcmRpbmdzCi0jICAgLSAoKTogbm90aGluZyB0byBwb3AsIG5vdGhpbmcgdG8gZGlzY2FyZAotIyAgIC0gKDEgKyAxICsgMSArKTogYSBsb3QgdG8gcG9wLCBub3RoaW5nIHRvIGRpc2NhcmQKLSMgICAtICgqICogKik6IG5vdGhpbmcgdG8gcG9wLCBhIGxvdCB0byBkaXNjYXJkCi0jICAgLSAoMSArIDIgKiAqKTogc29tZSB0byBwb3AgYW5kIGRpc2NhcmQKLSMKLSMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCi0jCi0jIC0gY2hlY2sgdGhlIGxvb2stYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCi0jICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZQotIyAgIGZpcnN0IGVycm9yIGlzICIpIiwgd2hpY2ggaXMgbmVlZGVkIHRvIHJlY292ZXIgZnJvbSB0aGUgZXJyb3IgYW5kCi0jICAgcHJvZHVjZSB0aGUgIjAiIHRoYXQgdHJpZ2dlcnMgdGhlICIwICE9IDEiIGVycm9yLgotIwotY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0oKSArICgxICsgMSArIDEgKykgKyAoKiAqICopICsgKDEgKiAyICogKikgPSAxCi1fQVRFT0YKLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjY1MTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjY1MSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjY1MTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCi0KLQotIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCi0jIG9wdGlvbnMuCi0jIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCi1zZWQgJy9eU3RhcnRpbmcvZAotL15FbnRlcmluZy9kCi0vXlN0YWNrL2QKLS9eUmVhZGluZy9kCi0vXlJlZHVjaW5nL2QKLS9eU2hpZnRpbmcvZAotL15zdGF0ZS9kCi0vXkNsZWFudXA6L2QKLS9eRXJyb3I6L2QKLS9eTmV4dC9kCi0vXkRpc2NhcmRpbmcvZAotLyBcJFswLTkkXSogPSAvZAotL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCi1tdiBhdC1zdGRlcnIgc3RkZXJyCi0jIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCi1jYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuNDA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLWNhbGM6IGVycm9yOiA0NDQ0ICE9IDEKLV9BVEVPRgotCi0jIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgotCi0jIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgotCi0jIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjUxOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjY1MSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2NTE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0KLQotIyBUaGUgc2FtZSwgYnV0IHRoaXMgdGltZSBleGVyY2lzaW5nIGV4cGxpY2l0bHkgdHJpZ2dlcmVkIHN5bnRheCBlcnJvcnMuCi0jIFBPU0lYIHNheXMgdGhlIGxvb2stYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCi1jYXQgPmlucHV0IDw8J19BVEVPRicKLSghKSArICgwIDApID0gMQotX0FURU9GCi0KLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2NTE6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2NTEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2NTE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0KLSMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQotIyBvcHRpb25zLgotIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgotc2VkICcvXlN0YXJ0aW5nL2QKLS9eRW50ZXJpbmcvZAotL15TdGFjay9kCi0vXlJlYWRpbmcvZAotL15SZWR1Y2luZy9kCi0vXlNoaWZ0aW5nL2QKLS9ec3RhdGUvZAotL15DbGVhbnVwOi9kCi0vXkVycm9yOi9kCi0vXk5leHQvZAotL15EaXNjYXJkaW5nL2QKLS8gXCRbMC05JF0qID0gL2QKLS9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgotbXYgYXQtc3RkZXJyIHN0ZGVycgotIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgotY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS45OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCi1jYWxjOiBlcnJvcjogMjIyMiAhPSAxCi1fQVRFT0YKLQotIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KLQotIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KLQotIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjY1MTogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2NTEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjUxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KLQotCi1jYXQgPmlucHV0IDw8J19BVEVPRicKLSgtICopICsgKDAgMCkgPSAxCi1fQVRFT0YKLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjY1MTogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjY1MSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjY1MTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCi0KLQotIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCi0jIG9wdGlvbnMuCi0jIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCi1zZWQgJy9eU3RhcnRpbmcvZAotL15FbnRlcmluZy9kCi0vXlN0YWNrL2QKLS9eUmVhZGluZy9kCi0vXlJlZHVjaW5nL2QKLS9eU2hpZnRpbmcvZAotL15zdGF0ZS9kCi0vXkNsZWFudXA6L2QKLS9eRXJyb3I6L2QKLS9eTmV4dC9kCi0vXkRpc2NhcmRpbmcvZAotLyBcJFswLTkkXSogPSAvZAotL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCi1tdiBhdC1zdGRlcnIgc3RkZXJyCi0jIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCi1jYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKLWNhbGM6IGVycm9yOiAyMjIyICE9IDEKLV9BVEVPRgotCi0jIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgotCi0jIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgotCi0jIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjUxOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjY1MSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2NTE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Ci0KLSAgMTA0ICkgIyAxMDQuIGNhbGMuYXQ6NjUzOiBDYWxjdWxhdG9yICVza2VsZXRvbiAiZ2xyLmNjIiAlZGVmaW5lcyAlbG9jYXRpb25zICVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJW5hbWUtcHJlZml4PSJjYWxjIiAldmVyYm9zZSAleWFjYyAlcGFyc2UtcGFyYW0ge3NlbWFudGljX3ZhbHVlICpyZXN1bHR9ICVwYXJzZS1wYXJhbSB7aW50ICpjb3VudH0KLSAgICBhdF9zZXR1cF9saW5lPSdjYWxjLmF0OjY1MycKLSAgICBhdF9kZXNjPSdDYWxjdWxhdG9yICVza2VsZXRvbiAiZ2xyLmNjIiAlZGVmaW5lcyAlbG9jYXRpb25zICVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJW5hbWUtcHJlZml4PSJjYWxjIiAldmVyYm9zZSAleWFjYyAlcGFyc2UtcGFyYW0ge3NlbWFudGljX3ZhbHVlICpyZXN1bHR9ICVwYXJzZS1wYXJhbSB7aW50ICpjb3VudH0nCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjEwNDogQ2FsY3VsYXRvciAlc2tlbGV0b24gImdsci5jYyIgJWRlZmluZXMgJWxvY2F0aW9ucyAlcHVyZS1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVuYW1lLXByZWZpeD0iY2FsYyIgJXZlcmJvc2UgJXlhY2MgJXBhcnNlLXBhcmFtIHtzZW1hbnRpY192YWx1ZSAqcmVzdWx0fSAlcGFyc2UtcGFyYW0ge2ludCAqY291bnR9JEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjEwNC4gY2FsYy5hdDo2NTM6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KLQotCi0KLQotCi0KLQotCi0jIFVzaW5nIHlhY2MuYz8KLQotCi0KLQotCi0KLQotIyB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZiAlbG9jYXRpb24gJiAlcHVyZSAmICglZ2xyIG9yICVwYXJzZS1wYXJhbSkuCi0KLSMgeXllcnJvciBhbHdheXMgc2VlcyB0aGUgbG9jYXRpb25zICh3aGVuIGFjdGl2YXRlZCksIGV4Y2VwdCBpZgotIyB5YWNjICYgcHVyZSAmICFwYXJhbS4KLQotCi0jIFRoZSBpbnRlcmZhY2UgaXMgcHVyZTogZWl0aGVyIGJlY2F1c2UgJXB1cmUtcGFyc2VyLCBvciBiZWNhdXNlIHdlCi0jIGFyZSB1c2luZyB0aGUgQysrIHBhcnNlcnMuCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi1jYXQgPmNhbGMueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KLQotLyogSW5maXggbm90YXRpb24gY2FsY3VsYXRvci0tY2FsYyAqLwotJXNrZWxldG9uICJnbHIuY2MiICVkZWZpbmVzICVsb2NhdGlvbnMgJXB1cmUtcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlbmFtZS1wcmVmaXg9ImNhbGMiICV2ZXJib3NlICV5YWNjICVwYXJzZS1wYXJhbSB7c2VtYW50aWNfdmFsdWUgKnJlc3VsdH0gJXBhcnNlLXBhcmFtIHtpbnQgKmNvdW50fQotJWRlZmluZSAiZ2xvYmFsX3Rva2Vuc19hbmRfeXlzdHlwZSIKLSV7Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2lmIEhBVkVfVU5JU1REX0gKLSMgaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZWxzZQotIyB1bmRlZiBhbGFybQotIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KLSNlbmRpZgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jZGVmaW5lIFVTRShWYXIpCi0KLS8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCi10eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKLQotc3RhdGljIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOwotc3RhdGljIGludCBnbG9iYWxfY291bnQgPSAwOwotJX0KLQotLyogRXhlcmNpc2UgJXVuaW9uLiAqLwotJXVuaW9uCi17Ci0gIHNlbWFudGljX3ZhbHVlIGl2YWw7Ci19OwotCi0lewotc3RhdGljIGludCBwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCk7Ci0jaWZuZGVmIFlZTFRZUEUKLSMgZGVmaW5lIFlZTFRZUEUgY2FsYzo6bG9jYXRpb24KLSNlbmRpZgotI2RlZmluZSBmaXJzdF9saW5lICAgYmVnaW4ubGluZQotI2RlZmluZSBmaXJzdF9jb2x1bW4gYmVnaW4uY29sdW1uCi0jZGVmaW5lIGxhc3RfbGluZSAgICBlbmQubGluZQotI2RlZmluZSBsYXN0X2NvbHVtbiAgZW5kLmNvbHVtbgotCi1zdGF0aWMgaW50IHl5bGV4IChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApOwotc3RhdGljIGludCBnZXRfY2hhciAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKTsKLXN0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCwgIGludCBjKTsKLSV9Ci0KLS8qIFRoZSBsYWxyMS5jYyBza2VsZXRvbiwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGRlZmluZXMKLSAgIGEgY29uc3RydWN0b3IgZm9yIHBvc2l0aW9uIHRoYXQgaW5pdGlhbGl6ZXMgdGhlIGZpbGVuYW1lLiAgVGhlCi0gICBnbHIuY2Mgc2tlbGV0b24gZG9lcyBub3QgKGFuZCBpbiBmYWN0IGNhbm5vdDogbG9jYXRpb24vcG9zaXRpb24KLSAgIGFyZSBzdG9yZWQgaW4gYSB1bmlvbiwgZnJvbSB3aGljaCBvYmplY3RzIHdpdGggY29uc3RydWN0b3JzIGFyZQotICAgZXhjbHVkZWQgaW4gQysrLiAqLwotJWluaXRpYWwtYWN0aW9uIHsKLSAgQCQuaW5pdGlhbGl6ZSAoMCk7Ci19Ci0KLQotLyogQmlzb24gRGVjbGFyYXRpb25zICovCi0ldG9rZW4gQ0FMQ19FT0YgMCAiZW5kIG9mIGlucHV0IgotJXRva2VuIDxpdmFsPiBOVU0gIm51bWJlciIKLSV0eXBlICA8aXZhbD4gZXhwCi0KLSVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbgkgICAgICAgKi8KKyVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbiAgICAgICAgICAgICovCiAlbGVmdCAnLScgJysnCiAlbGVmdCAnKicgJy8nCiAlbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLwpAQCAtNTI2NzYsMzcgKzExNDUwMCw1NCBAQAogfCAnLScgZXhwICAlcHJlYyBORUcgeyAkJCA9IC0kMjsgICAgICAgICAgICB9CiB8IGV4cCAnXicgZXhwICAgICAgICB7ICQkID0gcG93ZXIgKCQxLCAkMyk7IH0KIHwgJygnIGV4cCAnKScgICAgICAgIHsgJCQgPSAkMjsgICAgICAgICAgICAgfQotfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7ICAgICAgICAgICB9Cit8ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgeXllcnJvazsgIH0KIHwgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQogfCAnLScgZXJyb3IgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9CiA7CiAlJQotLyogVGhlIGlucHV0LiAgKi8KLXN0YXRpYyBGSUxFICppbnB1dDsKKworc3RhdGljIGludAorcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpCit7CisgIGludCByZXMgPSAxOworICBhc3NlcnQgKDAgPD0gZXhwb25lbnQpOworICBmb3IgKC8qIE5pZW50ZSAqLzsgZXhwb25lbnQ7IC0tZXhwb25lbnQpCisgICAgcmVzICo9IGJhc2U7CisgIHJldHVybiByZXM7Cit9CisKIAogLyogQSBDKysgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KIHZvaWQKLWNhbGM6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGxvY2F0aW9uJiBsLCBjb25zdCBzdGQ6OnN0cmluZyYgbSkKK2NhbGM6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGxvY2F0aW9uX3R5cGUmIGwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtKQogewogICAodm9pZCkgbDsKICAgc3RkOjpjZXJyIDw8IGwgPDwgIjogIiA8PCBtIDw8IHN0ZDo6ZW5kbDsKIH0KLQotaW50Ci15eXBhcnNlIChzZW1hbnRpY192YWx1ZSAqcmVzdWx0LCBpbnQgKmNvdW50KQotewotICBjYWxjOjpwYXJzZXIgcGFyc2VyIChyZXN1bHQsIGNvdW50KTsKLSAgcGFyc2VyLnNldF9kZWJ1Z19sZXZlbCAoISFZWURFQlVHKTsKLSAgcmV0dXJuIHBhcnNlci5wYXJzZSAoKTsKLX0KK19BVEVPRgogCiAKIAorY2F0ID5jYWxjLWxleC5jYyA8PCdfQVRFT0YnCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCiAKLXN0YXRpYyBZWUxUWVBFIGxhc3RfeXlsbG9jOworI2luY2x1ZGUgImNhbGMuaGgiCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCitpbnQgY2FsY2xleCAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCk7CitzdGF0aWMgaW50IGdldF9jaGFyIChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKTsKK3N0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3AsICBpbnQgYyk7CisKKworc3RhdGljIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSBsYXN0X3l5bGxvYzsKIAogc3RhdGljIGludAotZ2V0X2NoYXIgKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCkKK2dldF9jaGFyIChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKQogewogICBpbnQgcmVzID0gZ2V0YyAoaW5wdXQpOwogICAodm9pZCkgbHZhbHA7KHZvaWQpIGxsb2NwOwpAQCAtNTI3MTQsMTggKzExNDU1NSwxNyBAQAogICBsYXN0X3l5bGxvYyA9ICgqbGxvY3ApOwogICBpZiAocmVzID09ICdcbicpCiAgICAgewotICAgICAgKCpsbG9jcCkubGFzdF9saW5lKys7Ci0gICAgICAoKmxsb2NwKS5sYXN0X2NvbHVtbiA9IDA7CisgICAgICAoKmxsb2NwKS5lbmQubGluZSsrOworICAgICAgKCpsbG9jcCkuZW5kLmNvbHVtbiA9IDE7CiAgICAgfQogICBlbHNlCi0gICAgKCpsbG9jcCkubGFzdF9jb2x1bW4rKzsKKyAgICAoKmxsb2NwKS5lbmQuY29sdW1uKys7CiAKICAgcmV0dXJuIHJlczsKIH0KIAotCiBzdGF0aWMgdm9pZAotdW5nZXRfY2hhciAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwLCAgaW50IGMpCit1bmdldF9jaGFyIChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwLCAgaW50IGMpCiB7CiAgICh2b2lkKSBsdmFscDsodm9pZCkgbGxvY3A7CiAKQEAgLTUyNzM2LDcgKzExNDU3Niw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLXJlYWRfc2lnbmVkX2ludGVnZXIgKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCkKK3JlYWRfc2lnbmVkX2ludGVnZXIgKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApCiB7CiAgIGludCBjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCk7CiAgIGludCBzaWduID0gMTsKQEAgLTUyNzYxLDQwICsxMTQ2MDEsMjMgQEAKIH0KIAogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCBMZXhpY2FsIGFuYWx5emVyIHJldHVybnMgYW4gaW50ZWdlciBvbiB0aGUgc3RhY2sgYW5kIHRoZSB0b2tlbiB8CiB8IE5VTSwgb3IgdGhlIEFTQ0lJIGNoYXJhY3RlciByZWFkIGlmIG5vdCBhIG51bWJlci4gIFNraXBzIGFsbCAgIHwKIHwgYmxhbmtzIGFuZCB0YWJzLCByZXR1cm5zIDAgZm9yIEVPRi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQKLXl5bGV4IChZWVNUWVBFICpsdmFscCwgWVlMVFlQRSAqbGxvY3ApCitpbnQgY2FsY2xleCAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCkKIHsKLSAgc3RhdGljIGludCBpbml0ID0gMTsKICAgaW50IGM7Ci0KLSAgaWYgKGluaXQpCisgIC8qIFNraXAgY3VycmVudCB0b2tlbiwgdGhlbiB3aGl0ZSBzcGFjZXMuICAqLworICBkbwogICAgIHsKLSAgICAgIGluaXQgPSAwOwotCi0gICAgICAoKmxsb2NwKS5sYXN0X2NvbHVtbiA9IDA7Ci0gICAgICAoKmxsb2NwKS5sYXN0X2xpbmUgPSAxOworICAgICAoKmxsb2NwKS5iZWdpbi5jb2x1bW4gPSAoKmxsb2NwKS5lbmQuY29sdW1uOworICAgICAgKCpsbG9jcCkuYmVnaW4ubGluZSAgID0gKCpsbG9jcCkuZW5kLmxpbmU7CiAKICAgICB9Ci0KLQotICgqbGxvY3ApLmZpcnN0X2NvbHVtbiA9ICgqbGxvY3ApLmxhc3RfY29sdW1uOwotICAoKmxsb2NwKS5maXJzdF9saW5lICAgPSAoKmxsb2NwKS5sYXN0X2xpbmU7Ci0KLQotICAvKiBTa2lwIHdoaXRlIHNwYWNlLiAgKi8KLSAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCkpID09ICcgJyB8fCBjID09ICdcdCcpCi0gICAgewotICAgICAoKmxsb2NwKS5maXJzdF9jb2x1bW4gPSAoKmxsb2NwKS5sYXN0X2NvbHVtbjsKLSAgICAgICgqbGxvY3ApLmZpcnN0X2xpbmUgICA9ICgqbGxvY3ApLmxhc3RfbGluZTsKLQotICAgIH0KKyAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCkpID09ICcgJyB8fCBjID09ICdcdCcpOwogCiAgIC8qIHByb2Nlc3MgbnVtYmVycyAgICovCiAgIGlmIChjID09ICcuJyB8fCBpc2RpZ2l0IChjKSkKQEAgLTUyODExLDE5ICsxMTQ2MzQsNDMgQEAKICAgLyogUmV0dXJuIHNpbmdsZSBjaGFycy4gKi8KICAgcmV0dXJuIGM7CiB9CitfQVRFT0YKIAotc3RhdGljIGludAotcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpCisKK2NhdCA+Y2FsYy1tYWluLmNjIDw8J19BVEVPRicKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKKworI2luY2x1ZGUgImNhbGMuaGgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2Vsc2UKKyMgdW5kZWYgYWxhcm0KKyMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCisjZW5kaWYKKworCisvKiBBIEMrKyBjYWxjcGFyc2UgdGhhdCBzaW11bGF0ZXMgdGhlIEMgc2lnbmF0dXJlLiAgKi8KK2ludAorY2FsY3BhcnNlIChzZW1hbnRpY192YWx1ZSAqcmVzdWx0LCBpbnQgKmNvdW50KQogewotICBpbnQgcmVzID0gMTsKLSAgaWYgKGV4cG9uZW50IDwgMCkKLSAgICBleGl0ICgzKTsKLSAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQotICAgIHJlcyAqPSBiYXNlOwotICByZXR1cm4gcmVzOworICBjYWxjOjpwYXJzZXIgcGFyc2VyIChyZXN1bHQsIGNvdW50KTsKKyNpZiBDQUxDREVCVUcKKyAgcGFyc2VyLnNldF9kZWJ1Z19sZXZlbCAoMSk7CisjZW5kaWYKKyAgcmV0dXJuIHBhcnNlci5wYXJzZSAoKTsKIH0KIAogCitzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKK2ludCBnbG9iYWxfY291bnQgPSAwOworCisvKiBBIEMgbWFpbiBmdW5jdGlvbi4gICovCiBpbnQKIG1haW4gKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKQEAgLTUyODQ4LDExICsxMTQ2OTUsMTEgQEAKICAgICB9CiAKIAotICBzdGF0dXMgPSB5eXBhcnNlICgmcmVzdWx0LCAmY291bnQpOwotICBpZiAoZ2xvYmFsX3Jlc3VsdCAhPSByZXN1bHQpCi0gICAgYWJvcnQgKCk7Ci0gIGlmIChnbG9iYWxfY291bnQgIT0gY291bnQpCi0gICAgYWJvcnQgKCk7CisgIHN0YXR1cyA9IGNhbGNwYXJzZSAoJnJlc3VsdCwgJmNvdW50KTsKKyAgaWYgKGZjbG9zZSAoaW5wdXQpKQorICAgIHBlcnJvciAoImZjbG9zZSIpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOwogICByZXR1cm4gc3RhdHVzOwogfQogX0FURU9GCkBAIC01Mjg2MSw4MSArMTE0NzA4LDE3OSBAQAogCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjY1MzogYmlzb24gLW8gY2FsYy5jYyBjYWxjLnkiCi1lY2hvIGNhbGMuYXQ6NjUzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtbyBjYWxjLmNjIGNhbGMueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjY1MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuY2MgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuY2MgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuY2MgY2FsYy55IiAiY2FsYy5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODg6IGJpc29uIC1vIGNhbGMuY2MgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gY2FsYy5jYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2NTM6IFwkQklTT05fQ1hYX1dPUktTIgotZWNobyBjYWxjLmF0OjY1MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJEJJU09OX0NYWF9XT1JLUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjY1MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODg6IFwkQklTT05fQ1hYX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ1hYX1dPUktTIiAiY2FsYy5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NYWF9XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4OiBcJENYWCBcJENYWEZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jYyBjYWxjLWxleC5jYyBjYWxjLW1haW4uY2MgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmNjIGNhbGMtbGV4LmNjIGNhbGMtbWFpbi5jYyAkTElCUyIgImNhbGMuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuY2MgY2FsYy1sZXguY2MgY2FsYy1tYWluLmNjICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2NTM6IFwkQ1hYIFwkQ1hYRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmNjIFwkTElCUyIKLWVjaG8gY2FsYy5hdDo2NTMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuY2MgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2NTM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4OiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuY2MKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmNjCiAKLSRhdF90cmFjZW9uCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4OiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuaGgKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmhoCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKICMgVGVzdCB0aGUgcHJpb3JpdGllcy4KQEAgLTUyOTU1LDYyICsxMTQ5MDAsNjYgQEAKICgyXjIpXjMgPSA2NAogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2NTM6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2NTMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2NTM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4ODogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4ODogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKIAogIyBTb21lIHN5bnRheCBlcnJvcnMuCiBjYXQgPmlucHV0IDw8J19BVEVPRicKLTAgMAorMSAyCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjY1MzogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjY1MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjY1MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC01MzAyMSwxOCArMTE0OTcwLDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC01MzA0MCw2MCArMTE0OTkxLDUwIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjUzOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjY1MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2NTM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiAxLy8yCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjY1MzogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjY1MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjY1MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC01MzEwNCwxOCArMTE1MDQ1LDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC01MzEyMyw2MCArMTE1MDY2LDUwIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjUzOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjY1MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2NTM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiBlcnJvcgogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2NTM6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2NTMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2NTM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4ODogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4ODogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNTMxODcsMTggKzExNTEyMCwyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4wOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC01MzIwNiw2MCArMTE1MTQxLDUwIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjUzOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjY1MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2NTM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiAxID0gMiA9IDMKIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjUzOiBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCi1lY2hvIGNhbGMuYXQ6NjUzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjUzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTUzMjcwLDE4ICsxMTUxOTUsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworMS43OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTUzMjg5LDMwICsxMTUyMTYsMTggQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2NTM6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjUzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjY1MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODg6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiBjYXQgPmlucHV0IDw8J19BVEVPRicKQEAgLTUzMzIwLDMwICsxMTUyMzUsMzIgQEAKICsxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjY1MzogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjY1MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjY1MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC01MzM1NCwxOCArMTE1MjcxLDIwIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0yLjA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKycKKzIuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJwogX0FURU9GCiAKICMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCkBAIC01MzM3Myw1NyArMTE1MjkyLDQ3IEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjUzOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjY1MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2NTM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjY1MzogXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKLWVjaG8gY2FsYy5hdDo2NTMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjUzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKQEAgLTUzNDM0LDE4ICsxMTUzNDMsMjAgQEAKIC9eU3RhY2svZAogL15SZWFkaW5nL2QKIC9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAogL15TaGlmdGluZy9kCiAvXnN0YXRlL2QKIC9eQ2xlYW51cDovZAogL15FcnJvcjovZAogL15OZXh0L2QKKy9eTm93L2QKIC9eRGlzY2FyZGluZy9kCiAvIFwkWzAtOSRdKiA9IC9kCiAvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKIG12IGF0LXN0ZGVyciBzdGRlcnIKICMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KIGNhdCA+ZXhwb3V0IDw8J19BVEVPRicKLTEuMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAorMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CiBfQVRFT0YKIAogIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KQEAgLTUzNDUzLDMwICsxMTUzNjQsMTggQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2NTM6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjUzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjY1MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODg6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKQEAgLTUzNDkxLDggKzExNTM5MCw4IEBACiAjCiAjIC0gdGVzdCB0aGUgYWN0aW9uIGFzc29jaWF0ZWQgdG8gYGVycm9yJwogIwotIyAtIGNoZWNrIHRoZSBsb29rLWFoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAotIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2stYWhlYWQgY2F1c2luZyB0aGUKKyMgLSBjaGVjayB0aGUgbG9va2FoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAorIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZQogIyAgIGZpcnN0IGVycm9yIGlzICIpIiwgd2hpY2ggaXMgbmVlZGVkIHRvIHJlY292ZXIgZnJvbSB0aGUgZXJyb3IgYW5kCiAjICAgcHJvZHVjZSB0aGUgIjAiIHRoYXQgdHJpZ2dlcnMgdGhlICIwICE9IDEiIGVycm9yLgogIwpAQCAtNTM1MDAsMzAgKzExNTM5OSwzMiBAQAogKCkgKyAoMSArIDEgKyAxICspICsgKCogKiAqKSArICgxICogMiAqICopID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2NTM6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2NTMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2NTM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4ODogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4ODogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNTM1MzQsMjEgKzExNTQzNSwyMyBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjE3OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjIyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCi0xLjQwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKIGNhbGM6IGVycm9yOiA0NDQ0ICE9IDEKIF9BVEVPRgogCkBAIC01MzU1Nyw2MyArMTE1NDYwLDUzIEBACiAjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgogCiAjIDUuIENoZWNrCi0kYXRfdHJhY2VvZmYKLWVjaG8gImNhbGMuYXQ6NjUzOiBjYXQgc3RkZXJyIgotZWNobyBjYWxjLmF0OjY1MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHN0ZGVyciApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiBleHBvdXQgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2NTM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAjIFRoZSBzYW1lLCBidXQgdGhpcyB0aW1lIGV4ZXJjaXNpbmcgZXhwbGljaXRseSB0cmlnZ2VyZWQgc3ludGF4IGVycm9ycy4KLSMgUE9TSVggc2F5cyB0aGUgbG9vay1haGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KKyMgUE9TSVggc2F5cyB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgogY2F0ID5pbnB1dCA8PCdfQVRFT0YnCi0oISkgKyAoMCAwKSA9IDEKKyghKSArICgxIDIpID0gMQogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2NTM6IFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKLWVjaG8gY2FsYy5hdDo2NTMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8JGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY2FsYy5hdDo2NTM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4ODogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4ODogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKICMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQpAQCAtNTM2MjQsMTggKzExNTUxNywyMCBAQAogL15TdGFjay9kCiAvXlJlYWRpbmcvZAogL15SZWR1Y2luZy9kCisvXlJldHVybi9kCiAvXlNoaWZ0aW5nL2QKIC9ec3RhdGUvZAogL15DbGVhbnVwOi9kCiAvXkVycm9yOi9kCiAvXk5leHQvZAorL15Ob3cvZAogL15EaXNjYXJkaW5nL2QKIC8gXCRbMC05JF0qID0gL2QKIC9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgogbXYgYXQtc3RkZXJyIHN0ZGVycgogIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgogY2F0ID5leHBvdXQgPDwnX0FURU9GJwotMS45OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCiBfQVRFT0YKIApAQCAtNTM2NDQsNjAgKzExNTUzOSw1MCBAQAogIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KIAogIyA1LiBDaGVjawotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjY1MzogY2F0IHN0ZGVyciIKLWVjaG8gY2FsYy5hdDo2NTMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBzdGRlcnIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgZXhwb3V0ICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImNhbGMuYXQ6NjUzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4ODogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIGNhdCA+aW5wdXQgPDwnX0FURU9GJwotKC0gKikgKyAoMCAwKSA9IDEKKygtICopICsgKDEgMikgPSAxCiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjYWxjLmF0OjY1MzogXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgotZWNobyBjYWxjLmF0OjY1MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjY1MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKIAogIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCkBAIC01MzcwOCwxOSArMTE1NTkzLDIxIEBACiAvXlN0YWNrL2QKIC9eUmVhZGluZy9kCiAvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKIC9eU2hpZnRpbmcvZAogL15zdGF0ZS9kCiAvXkNsZWFudXA6L2QKIC9eRXJyb3I6L2QKIC9eTmV4dC9kCisvXk5vdy9kCiAvXkRpc2NhcmRpbmcvZAogLyBcJFswLTkkXSogPSAvZAogL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCiBtdiBhdC1zdGRlcnIgc3RkZXJyCiAjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCiBjYXQgPmV4cG91dCA8PCdfQVRFT0YnCi0xLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKLTEuMTE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgogY2FsYzogZXJyb3I6IDIyMjIgIT0gMQogX0FURU9GCiAKQEAgLTUzNzI5LDgzICsxMTU2MTYsMTM0MzUgQEAKICMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCiAKICMgNS4gQ2hlY2sKLSRhdF90cmFjZW9mZgotZWNobyAiY2FsYy5hdDo2NTM6IGNhdCBzdGRlcnIiCi1lY2hvIGNhbGMuYXQ6NjUzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgc3RkZXJyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmIGV4cG91dCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjYWxjLmF0OjY1MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODg6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwotCi0KLSAgYmFubmVyLTEzICkgIyBCYW5uZXIgMTMuIHRvcnR1cmUuYXQ6MTkKLSAgICBjYXQgPDxcX0FURU9GCi0KLVRvcnR1cmUgVGVzdHMuCi0KKyMgQ2hlY2sgdGhhdCB5eWVycm9rIHdvcmtzIHByb3Blcmx5OiBzZWNvbmQgZXJyb3IgaXMgbm90IHJlcG9ydGVkLAorIyB0aGlyZCBhbmQgZm91cnRoIGFyZS4gIFBhcnNlIHN0YXR1cyBpcyBzdWNjZXNmdWxsLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoKiAqKSArICgqKSArICgqKQogX0FURU9GCi0gICAgOzsKIAotICAxMDUgKSAjIDEwNS4gdG9ydHVyZS5hdDoxNDA6IEJpZyB0cmlhbmdsZQotICAgIGF0X3NldHVwX2xpbmU9J3RvcnR1cmUuYXQ6MTQwJwotICAgIGF0X2Rlc2M9J0JpZyB0cmlhbmdsZScKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiMTA1OiBCaWcgdHJpYW5nbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiMTA1LiB0b3J0dXJlLmF0OjE0MDogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njg4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY4ODogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjQzCisjQVRfU1RBUlRfMjQ0CithdF9mbl9ncm91cF9iYW5uZXIgMjQ0ICdjYWxjLmF0OjY5OScgXAorICAiQ2FsY3VsYXRvciAlc2tlbGV0b24gXCJnbHIuY2NcIiAlZGVmaW5lcyAlbG9jYXRpb25zIiAiIiAxNAorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI0NC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworCisKKworCisKKworCitjYXQgPmNhbGMueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisvKiBJbmZpeCBub3RhdGlvbiBjYWxjdWxhdG9yLS1jYWxjICovCislc2tlbGV0b24gImdsci5jYyIgJWRlZmluZXMgJWxvY2F0aW9ucworJWRlZmluZSBnbG9iYWxfdG9rZW5zX2FuZF95eXN0eXBlCislY29kZSByZXF1aXJlcworeworCisgIC8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCisgIHR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOworfQorCisvKiBFeGVyY2lzZSAldW5pb24uICovCisldW5pb24KK3sKKyAgc2VtYW50aWNfdmFsdWUgaXZhbDsKK307CislcHJpbnRlciB7IHl5b3V0cHV0IDw8ICQkOyB9IDxpdmFsPjsKKworJWNvZGUgcHJvdmlkZXMKK3sKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIC8qIFRoZSBpbnB1dC4gICovCisgIGV4dGVybiBGSUxFICppbnB1dDsKKyAgZXh0ZXJuIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQ7CisgIGV4dGVybiBpbnQgZ2xvYmFsX2NvdW50OworfQorCislY29kZQoreworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2RlZmluZSBVU0UoVmFyKQorCitGSUxFICppbnB1dDsKK3N0YXRpYyBpbnQgcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpOworCisKK2ludCB5eWxleCAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKTsKK30KKworCisKKy8qIEJpc29uIERlY2xhcmF0aW9ucyAqLworJXRva2VuIENBTENfRU9GIDAgImVuZCBvZiBpbnB1dCIKKyV0b2tlbiA8aXZhbD4gTlVNICJudW1iZXIiCisldHlwZSAgPGl2YWw+IGV4cAorCislbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24gICAgICAgICAgICAqLworJWxlZnQgJy0nICcrJworJWxlZnQgJyonICcvJworJWxlZnQgTkVHICAgICAvKiBuZWdhdGlvbi0tdW5hcnkgbWludXMgKi8KKyVyaWdodCAnXicgICAgLyogZXhwb25lbnRpYXRpb24gICAgICAgICovCisKKy8qIEdyYW1tYXIgZm9sbG93cyAqLworJSUKK2lucHV0OgorICBsaW5lCit8IGlucHV0IGxpbmUgICAgICAgICB7ICB9Cis7CisKK2xpbmU6CisgICdcbicKK3wgZXhwICdcbicgICAgICAgICAgIHsgVVNFICgkMSk7IH0KKzsKKworZXhwOgorICBOVU0gICAgICAgICAgICAgICAgeyAkJCA9ICQxOyAgICAgICAgICAgICB9Cit8IGV4cCAnPScgZXhwCisgIHsKKyAgICBpZiAoJDEgIT0gJDMpCisgICAgICBmcHJpbnRmIChzdGRlcnIsICJjYWxjOiBlcnJvcjogJWQgIT0gJWRcbiIsICQxLCAkMyk7CisgICAgJCQgPSAkMTsKKyAgfQorfCBleHAgJysnIGV4cCAgICAgICAgeyAkJCA9ICQxICsgJDM7ICAgICAgICB9Cit8IGV4cCAnLScgZXhwICAgICAgICB7ICQkID0gJDEgLSAkMzsgICAgICAgIH0KK3wgZXhwICcqJyBleHAgICAgICAgIHsgJCQgPSAkMSAqICQzOyAgICAgICAgfQorfCBleHAgJy8nIGV4cCAgICAgICAgeyAkJCA9ICQxIC8gJDM7ICAgICAgICB9Cit8ICctJyBleHAgICVwcmVjIE5FRyB7ICQkID0gLSQyOyAgICAgICAgICAgIH0KK3wgZXhwICdeJyBleHAgICAgICAgIHsgJCQgPSBwb3dlciAoJDEsICQzKTsgfQorfCAnKCcgZXhwICcpJyAgICAgICAgeyAkJCA9ICQyOyAgICAgICAgICAgICB9Cit8ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgeXllcnJvazsgIH0KK3wgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQorfCAnLScgZXJyb3IgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9Cis7CislJQorCitzdGF0aWMgaW50Citwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKK3sKKyAgaW50IHJlcyA9IDE7CisgIGFzc2VydCAoMCA8PSBleHBvbmVudCk7CisgIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKKyAgICByZXMgKj0gYmFzZTsKKyAgcmV0dXJuIHJlczsKK30KKworCisvKiBBIEMrKyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLwordm9pZAoreXk6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGxvY2F0aW9uX3R5cGUmIGwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtKQoreworICAodm9pZCkgbDsKKyAgc3RkOjpjZXJyIDw8IGwgPDwgIjogIiA8PCBtIDw8IHN0ZDo6ZW5kbDsKK30KK19BVEVPRgorCisKKworY2F0ID5jYWxjLWxleC5jYyA8PCdfQVRFT0YnCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCisKKyNpbmNsdWRlICJjYWxjLmhoIgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworaW50IHl5bGV4ICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgeXk6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApOworc3RhdGljIGludCBnZXRfY2hhciAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKTsKK3N0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCB5eTo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCwgIGludCBjKTsKKworCitzdGF0aWMgeXk6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSBsYXN0X3l5bGxvYzsKKworc3RhdGljIGludAorZ2V0X2NoYXIgKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCB5eTo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCkKK3sKKyAgaW50IHJlcyA9IGdldGMgKGlucHV0KTsKKyAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKKworICBsYXN0X3l5bGxvYyA9ICgqbGxvY3ApOworICBpZiAocmVzID09ICdcbicpCisgICAgeworICAgICAgKCpsbG9jcCkuZW5kLmxpbmUrKzsKKyAgICAgICgqbGxvY3ApLmVuZC5jb2x1bW4gPSAxOworICAgIH0KKyAgZWxzZQorICAgICgqbGxvY3ApLmVuZC5jb2x1bW4rKzsKKworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZAordW5nZXRfY2hhciAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwLCAgaW50IGMpCit7CisgICh2b2lkKSBsdmFscDsodm9pZCkgbGxvY3A7CisKKyAgLyogV3Jvbmcgd2hlbiBDID09IGBcbicuICovCisgICgqbGxvY3ApID0gbGFzdF95eWxsb2M7CisKKyAgdW5nZXRjIChjLCBpbnB1dCk7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRfc2lnbmVkX2ludGVnZXIgKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCB5eTo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCkKK3sKKyAgaW50IGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKTsKKyAgaW50IHNpZ24gPSAxOworICBpbnQgbiA9IDA7CisKKyAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKKyAgaWYgKGMgPT0gJy0nKQorICAgIHsKKyAgICAgIGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKTsKKyAgICAgIHNpZ24gPSAtMTsKKyAgICB9CisKKyAgd2hpbGUgKGlzZGlnaXQgKGMpKQorICAgIHsKKyAgICAgIG4gPSAxMCAqIG4gKyAoYyAtICcwJyk7CisgICAgICBjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCk7CisgICAgfQorCisgIHVuZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCwgIGMpOworCisgIHJldHVybiBzaWduICogbjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgTGV4aWNhbCBhbmFseXplciByZXR1cm5zIGFuIGludGVnZXIgb24gdGhlIHN0YWNrIGFuZCB0aGUgdG9rZW4gfAorfCBOVU0sIG9yIHRoZSBBU0NJSSBjaGFyYWN0ZXIgcmVhZCBpZiBub3QgYSBudW1iZXIuICBTa2lwcyBhbGwgICB8Cit8IGJsYW5rcyBhbmQgdGFicywgcmV0dXJucyAwIGZvciBFT0YuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitpbnQgeXlsZXggKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCB5eTo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCkKK3sKKyAgaW50IGM7CisgIC8qIFNraXAgY3VycmVudCB0b2tlbiwgdGhlbiB3aGl0ZSBzcGFjZXMuICAqLworICBkbworICAgIHsKKyAgICAgKCpsbG9jcCkuYmVnaW4uY29sdW1uID0gKCpsbG9jcCkuZW5kLmNvbHVtbjsKKyAgICAgICgqbGxvY3ApLmJlZ2luLmxpbmUgICA9ICgqbGxvY3ApLmVuZC5saW5lOworCisgICAgfQorICB3aGlsZSAoKGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKSkgPT0gJyAnIHx8IGMgPT0gJ1x0Jyk7CisKKyAgLyogcHJvY2VzcyBudW1iZXJzICAgKi8KKyAgaWYgKGMgPT0gJy4nIHx8IGlzZGlnaXQgKGMpKQorICAgIHsKKyAgICAgIHVuZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCwgIGMpOworICAgICAgKCpsdmFscCkuaXZhbCA9IHJlYWRfc2lnbmVkX2ludGVnZXIgKGx2YWxwLCBsbG9jcCk7CisgICAgICByZXR1cm4gTlVNOworICAgIH0KKworICAvKiBSZXR1cm4gZW5kLW9mLWZpbGUuICAqLworICBpZiAoYyA9PSBFT0YpCisgICAgcmV0dXJuIENBTENfRU9GOworCisgIC8qIFJldHVybiBzaW5nbGUgY2hhcnMuICovCisgIHJldHVybiBjOworfQorX0FURU9GCisKKworY2F0ID5jYWxjLW1haW4uY2MgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworCisjaW5jbHVkZSAiY2FsYy5oaCIKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxzZQorIyB1bmRlZiBhbGFybQorIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KKyNlbmRpZgorCisKKy8qIEEgQysrIHl5cGFyc2UgdGhhdCBzaW11bGF0ZXMgdGhlIEMgc2lnbmF0dXJlLiAgKi8KK2ludAoreXlwYXJzZSAoKQoreworICB5eTo6cGFyc2VyIHBhcnNlcjsKKyNpZiBZWURFQlVHCisgIHBhcnNlci5zZXRfZGVidWdfbGV2ZWwgKDEpOworI2VuZGlmCisgIHJldHVybiBwYXJzZXIucGFyc2UgKCk7Cit9CisKKworc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7CitpbnQgZ2xvYmFsX2NvdW50ID0gMDsKKworLyogQSBDIG1haW4gZnVuY3Rpb24uICAqLworaW50CittYWluIChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisgIHNlbWFudGljX3ZhbHVlIHJlc3VsdCA9IDA7CisgIGludCBjb3VudCA9IDA7CisgIGludCBzdGF0dXM7CisKKyAgLyogVGhpcyB1c2VkIHRvIGJlIGFsYXJtICgxMCksIGJ1dCB0aGF0IGlzbid0IGVub3VnaCB0aW1lIGZvcgorICAgICBhIEp1bHkgMTk5NSB2aW50YWdlIERFQyBBbHBoYXN0YXRpb24gMjAwIDQvMTAwIHN5c3RlbSwKKyAgICAgYWNjb3JkaW5nIHRvIE5lbHNvbiBILiBGLiBCZWViZS4gIDEwMCBzZWNvbmRzIGlzIGVub3VnaC4gICovCisgIGFsYXJtICgxMDApOworCisgIGlmIChhcmdjID09IDIpCisgICAgaW5wdXQgPSBmb3BlbiAoYXJndlsxXSwgInIiKTsKKyAgZWxzZQorICAgIGlucHV0ID0gc3RkaW47CisKKyAgaWYgKCFpbnB1dCkKKyAgICB7CisgICAgICBwZXJyb3IgKGFyZ3ZbMV0pOworICAgICAgcmV0dXJuIDM7CisgICAgfQorCisKKyAgc3RhdHVzID0geXlwYXJzZSAoKTsKKyAgaWYgKGZjbG9zZSAoaW5wdXQpKQorICAgIHBlcnJvciAoImZjbG9zZSIpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOworICByZXR1cm4gc3RhdHVzOworfQorX0FURU9GCisKKworCisKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2OTk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmNjIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6Njk5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuY2MgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njk5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmNjIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmNjIGNhbGMueSIgImNhbGMuYXQ6Njk5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuY2MgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6Njk5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2OTk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjY5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njk5OiBiaXNvbiAtbyBjYWxjLmNjIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njk5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGNhbGMuY2MgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OTogXCRCSVNPTl9DWFhfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DWFhfV09SS1MiICJjYWxjLmF0OjY5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ1hYX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OTogXCRDWFggXCRDWFhGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuY2MgY2FsYy1sZXguY2MgY2FsYy1tYWluLmNjIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jYyBjYWxjLWxleC5jYyBjYWxjLW1haW4uY2MgJExJQlMiICJjYWxjLmF0OjY5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmNjIGNhbGMtbGV4LmNjIGNhbGMtbWFpbi5jYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OTogXCRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCBcIlwkLjoge1wkX31cXG5cIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCBcJC4gPT0gMSkgJiYgL15cXHMqXCQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciBcIm1haW50XCIuCisgICAgICAgICMgfHwgL1xcc1wkLworICAgICAgICApJyBjYWxjLmNjCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjY5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5jYworCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njk5OiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuaGgKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6Njk5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmhoCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgVGVzdCB0aGUgcHJpb3JpdGllcy4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMSArIDIgKiAzID0gNworMSArIDIgKiAtMyA9IC01CisKKy0xXjIgPSAtMQorKC0xKV4yID0gMQorCistLS0xID0gLTEKKworMSAtIDIgLSAzID0gLTQKKzEgLSAoMiAtIDMpID0gMgorCisyXjJeMyA9IDI1NgorKDJeMileMyA9IDY0CitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njk5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njk5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njk5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyMgU29tZSBzeW50YXggZXJyb3JzLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxIDIKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2OTk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6Njk5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2OTk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2OTkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njk5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2OTkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxLy8yCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njk5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njk5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njk5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njk5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworZXJyb3IKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2OTk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6Njk5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2OTk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2OTkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njk5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMSA9IDIgPSAzCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njk5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjY5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njk5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njk5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuNzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6Njk5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworCisrMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2OTkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisyLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKycKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2OTk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIEV4ZXJjaXNlIGVycm9yIG1lc3NhZ2VzIHdpdGggRU9GOiB3b3JrIG9uIGFuIGVtcHR5IGZpbGUuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2OTk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo2OTkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2OTk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2OTkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njk5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2OTkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIEV4ZXJjaXNlIHRoZSBlcnJvciB0b2tlbjogd2l0aG91dCBpdCwgd2UgZGllIGF0IHRoZSBmaXJzdCBlcnJvciwKKyMgaGVuY2UgYmUgc3VyZSB0bworIworIyAtIGhhdmUgc2V2ZXJhbCBlcnJvcnMgd2hpY2ggZXhlcmNpc2UgZGlmZmVyZW50IHNoaWZ0L2Rpc2NhcmRpbmdzCisjICAgLSAoKTogbm90aGluZyB0byBwb3AsIG5vdGhpbmcgdG8gZGlzY2FyZAorIyAgIC0gKDEgKyAxICsgMSArKTogYSBsb3QgdG8gcG9wLCBub3RoaW5nIHRvIGRpc2NhcmQKKyMgICAtICgqICogKik6IG5vdGhpbmcgdG8gcG9wLCBhIGxvdCB0byBkaXNjYXJkCisjICAgLSAoMSArIDIgKiAqKTogc29tZSB0byBwb3AgYW5kIGRpc2NhcmQKKyMKKyMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCisjCisjIC0gY2hlY2sgdGhlIGxvb2thaGVhZCB0aGF0IHRyaWdnZXJzIGFuIGVycm9yIGlzIG5vdCBkaXNjYXJkZWQKKyMgICB3aGVuIHdlIGVudGVyIGVycm9yIHJlY292ZXJ5LiAgQmVsb3csIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUKKyMgICBmaXJzdCBlcnJvciBpcyAiKSIsIHdoaWNoIGlzIG5lZWRlZCB0byByZWNvdmVyIGZyb20gdGhlIGVycm9yIGFuZAorIyAgIHByb2R1Y2UgdGhlICIwIiB0aGF0IHRyaWdnZXJzIHRoZSAiMCAhPSAxIiBlcnJvci4KKyMKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCkgKyAoMSArIDEgKyAxICspICsgKCogKiAqKSArICgxICogMiAqICopID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2OTkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK2NhbGM6IGVycm9yOiA0NDQ0ICE9IDEKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2OTk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgVGhlIHNhbWUsIGJ1dCB0aGlzIHRpbWUgZXhlcmNpc2luZyBleHBsaWNpdGx5IHRyaWdnZXJlZCBzeW50YXggZXJyb3JzLgorIyBQT1NJWCBzYXlzIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKyghKSArICgxIDIpID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2OTkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCitjYWxjOiBlcnJvcjogMjIyMiAhPSAxCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njk5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo2OTkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoLSAqKSArICgxIDIpID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2OTkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjQ6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKK2NhbGM6IGVycm9yOiAyMjIyICE9IDEKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2OTk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgQ2hlY2sgdGhhdCB5eWVycm9rIHdvcmtzIHByb3Blcmx5OiBzZWNvbmQgZXJyb3IgaXMgbm90IHJlcG9ydGVkLAorIyB0aGlyZCBhbmQgZm91cnRoIGFyZS4gIFBhcnNlIHN0YXR1cyBpcyBzdWNjZXNmdWxsLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoKiAqKSArICgqKSArICgqKQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo2OTkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjY5OTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo2OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTY6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo2OTk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjY5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6Njk5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzI0NAorI0FUX1NUQVJUXzI0NQorYXRfZm5fZ3JvdXBfYmFubmVyIDI0NSAnY2FsYy5hdDo3MDgnIFwKKyAgIkNhbGN1bGF0b3IgJWxhbmd1YWdlIFwiQysrXCIgJWdsci1wYXJzZXIgJWRlZmluZXMgJWxvY2F0aW9ucyAiICIiIDE0CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjQ1LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworCisKKworCisKKworCisKK2NhdCA+Y2FsYy55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKy8qIEluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3ItLWNhbGMgKi8KKyVsYW5ndWFnZSAiQysrIiAlZ2xyLXBhcnNlciAlZGVmaW5lcyAlbG9jYXRpb25zCislZGVmaW5lIGdsb2JhbF90b2tlbnNfYW5kX3l5c3R5cGUKKyVjb2RlIHJlcXVpcmVzCit7CisKKyAgLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KKyAgdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Cit9CisKKy8qIEV4ZXJjaXNlICV1bmlvbi4gKi8KKyV1bmlvbgoreworICBzZW1hbnRpY192YWx1ZSBpdmFsOworfTsKKyVwcmludGVyIHsgeXlvdXRwdXQgPDwgJCQ7IH0gPGl2YWw+OworCislY29kZSBwcm92aWRlcworeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgLyogVGhlIGlucHV0LiAgKi8KKyAgZXh0ZXJuIEZJTEUgKmlucHV0OworICBleHRlcm4gc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdDsKKyAgZXh0ZXJuIGludCBnbG9iYWxfY291bnQ7Cit9CisKKyVjb2RlCit7CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZGVmaW5lIFVTRShWYXIpCisKK0ZJTEUgKmlucHV0Oworc3RhdGljIGludCBwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCk7CisKKworaW50IHl5bGV4ICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgeXk6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApOworfQorCisKKworLyogQmlzb24gRGVjbGFyYXRpb25zICovCisldG9rZW4gQ0FMQ19FT0YgMCAiZW5kIG9mIGlucHV0IgorJXRva2VuIDxpdmFsPiBOVU0gIm51bWJlciIKKyV0eXBlICA8aXZhbD4gZXhwCisKKyVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbiAgICAgICAgICAgICovCislbGVmdCAnLScgJysnCislbGVmdCAnKicgJy8nCislbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLworJXJpZ2h0ICdeJyAgICAvKiBleHBvbmVudGlhdGlvbiAgICAgICAgKi8KKworLyogR3JhbW1hciBmb2xsb3dzICovCislJQoraW5wdXQ6CisgIGxpbmUKK3wgaW5wdXQgbGluZSAgICAgICAgIHsgIH0KKzsKKworbGluZToKKyAgJ1xuJworfCBleHAgJ1xuJyAgICAgICAgICAgeyBVU0UgKCQxKTsgfQorOworCitleHA6CisgIE5VTSAgICAgICAgICAgICAgICB7ICQkID0gJDE7ICAgICAgICAgICAgIH0KK3wgZXhwICc9JyBleHAKKyAgeworICAgIGlmICgkMSAhPSAkMykKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImNhbGM6IGVycm9yOiAlZCAhPSAlZFxuIiwgJDEsICQzKTsKKyAgICAkJCA9ICQxOworICB9Cit8IGV4cCAnKycgZXhwICAgICAgICB7ICQkID0gJDEgKyAkMzsgICAgICAgIH0KK3wgZXhwICctJyBleHAgICAgICAgIHsgJCQgPSAkMSAtICQzOyAgICAgICAgfQorfCBleHAgJyonIGV4cCAgICAgICAgeyAkJCA9ICQxICogJDM7ICAgICAgICB9Cit8IGV4cCAnLycgZXhwICAgICAgICB7ICQkID0gJDEgLyAkMzsgICAgICAgIH0KK3wgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSAtJDI7ICAgICAgICAgICAgfQorfCBleHAgJ14nIGV4cCAgICAgICAgeyAkJCA9IHBvd2VyICgkMSwgJDMpOyB9Cit8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgIH0KK3wgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyB5eWVycm9rOyAgfQorfCAnIScgICAgICAgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9Cit8ICctJyBlcnJvciAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KKzsKKyUlCisKK3N0YXRpYyBpbnQKK3Bvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQoreworICBpbnQgcmVzID0gMTsKKyAgYXNzZXJ0ICgwIDw9IGV4cG9uZW50KTsKKyAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQorICAgIHJlcyAqPSBiYXNlOworICByZXR1cm4gcmVzOworfQorCisKKy8qIEEgQysrIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCit2b2lkCit5eTo6cGFyc2VyOjplcnJvciAoY29uc3QgbG9jYXRpb25fdHlwZSYgbCwgY29uc3Qgc3RkOjpzdHJpbmcmIG0pCit7CisgICh2b2lkKSBsOworICBzdGQ6OmNlcnIgPDwgbCA8PCAiOiAiIDw8IG0gPDwgc3RkOjplbmRsOworfQorX0FURU9GCisKKworCitjYXQgPmNhbGMtbGV4LmNjIDw8J19BVEVPRicKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKKworI2luY2x1ZGUgImNhbGMuaGgiCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCitpbnQgeXlsZXggKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCB5eTo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCk7CitzdGF0aWMgaW50IGdldF9jaGFyICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgeXk6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApOworc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwLCAgaW50IGMpOworCisKK3N0YXRpYyB5eTo6cGFyc2VyOjpsb2NhdGlvbl90eXBlIGxhc3RfeXlsbG9jOworCitzdGF0aWMgaW50CitnZXRfY2hhciAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKQoreworICBpbnQgcmVzID0gZ2V0YyAoaW5wdXQpOworICAodm9pZCkgbHZhbHA7KHZvaWQpIGxsb2NwOworCisgIGxhc3RfeXlsbG9jID0gKCpsbG9jcCk7CisgIGlmIChyZXMgPT0gJ1xuJykKKyAgICB7CisgICAgICAoKmxsb2NwKS5lbmQubGluZSsrOworICAgICAgKCpsbG9jcCkuZW5kLmNvbHVtbiA9IDE7CisgICAgfQorICBlbHNlCisgICAgKCpsbG9jcCkuZW5kLmNvbHVtbisrOworCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkCit1bmdldF9jaGFyICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgeXk6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3AsICBpbnQgYykKK3sKKyAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKKworICAvKiBXcm9uZyB3aGVuIEMgPT0gYFxuJy4gKi8KKyAgKCpsbG9jcCkgPSBsYXN0X3l5bGxvYzsKKworICB1bmdldGMgKGMsIGlucHV0KTsKK30KKworc3RhdGljIGludAorcmVhZF9zaWduZWRfaW50ZWdlciAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKQoreworICBpbnQgYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApOworICBpbnQgc2lnbiA9IDE7CisgIGludCBuID0gMDsKKworICAodm9pZCkgbHZhbHA7KHZvaWQpIGxsb2NwOworICBpZiAoYyA9PSAnLScpCisgICAgeworICAgICAgYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApOworICAgICAgc2lnbiA9IC0xOworICAgIH0KKworICB3aGlsZSAoaXNkaWdpdCAoYykpCisgICAgeworICAgICAgbiA9IDEwICogbiArIChjIC0gJzAnKTsKKyAgICAgIGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKTsKKyAgICB9CisKKyAgdW5nZXRfY2hhciAobHZhbHAsIGxsb2NwLCAgYyk7CisKKyAgcmV0dXJuIHNpZ24gKiBuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBMZXhpY2FsIGFuYWx5emVyIHJldHVybnMgYW4gaW50ZWdlciBvbiB0aGUgc3RhY2sgYW5kIHRoZSB0b2tlbiB8Cit8IE5VTSwgb3IgdGhlIEFTQ0lJIGNoYXJhY3RlciByZWFkIGlmIG5vdCBhIG51bWJlci4gIFNraXBzIGFsbCAgIHwKK3wgYmxhbmtzIGFuZCB0YWJzLCByZXR1cm5zIDAgZm9yIEVPRi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2ludCB5eWxleCAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKQoreworICBpbnQgYzsKKyAgLyogU2tpcCBjdXJyZW50IHRva2VuLCB0aGVuIHdoaXRlIHNwYWNlcy4gICovCisgIGRvCisgICAgeworICAgICAoKmxsb2NwKS5iZWdpbi5jb2x1bW4gPSAoKmxsb2NwKS5lbmQuY29sdW1uOworICAgICAgKCpsbG9jcCkuYmVnaW4ubGluZSAgID0gKCpsbG9jcCkuZW5kLmxpbmU7CisKKyAgICB9CisgIHdoaWxlICgoYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApKSA9PSAnICcgfHwgYyA9PSAnXHQnKTsKKworICAvKiBwcm9jZXNzIG51bWJlcnMgICAqLworICBpZiAoYyA9PSAnLicgfHwgaXNkaWdpdCAoYykpCisgICAgeworICAgICAgdW5nZXRfY2hhciAobHZhbHAsIGxsb2NwLCAgYyk7CisgICAgICAoKmx2YWxwKS5pdmFsID0gcmVhZF9zaWduZWRfaW50ZWdlciAobHZhbHAsIGxsb2NwKTsKKyAgICAgIHJldHVybiBOVU07CisgICAgfQorCisgIC8qIFJldHVybiBlbmQtb2YtZmlsZS4gICovCisgIGlmIChjID09IEVPRikKKyAgICByZXR1cm4gQ0FMQ19FT0Y7CisKKyAgLyogUmV0dXJuIHNpbmdsZSBjaGFycy4gKi8KKyAgcmV0dXJuIGM7Cit9CitfQVRFT0YKKworCitjYXQgPmNhbGMtbWFpbi5jYyA8PCdfQVRFT0YnCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCisKKyNpbmNsdWRlICJjYWxjLmhoIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjIHVuZGVmIGFsYXJtCisjIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLworI2VuZGlmCisKKworLyogQSBDKysgeXlwYXJzZSB0aGF0IHNpbXVsYXRlcyB0aGUgQyBzaWduYXR1cmUuICAqLworaW50Cit5eXBhcnNlICgpCit7CisgIHl5OjpwYXJzZXIgcGFyc2VyOworI2lmIFlZREVCVUcKKyAgcGFyc2VyLnNldF9kZWJ1Z19sZXZlbCAoMSk7CisjZW5kaWYKKyAgcmV0dXJuIHBhcnNlci5wYXJzZSAoKTsKK30KKworCitzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKK2ludCBnbG9iYWxfY291bnQgPSAwOworCisvKiBBIEMgbWFpbiBmdW5jdGlvbi4gICovCitpbnQKK21haW4gKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKyAgc2VtYW50aWNfdmFsdWUgcmVzdWx0ID0gMDsKKyAgaW50IGNvdW50ID0gMDsKKyAgaW50IHN0YXR1czsKKworICAvKiBUaGlzIHVzZWQgdG8gYmUgYWxhcm0gKDEwKSwgYnV0IHRoYXQgaXNuJ3QgZW5vdWdoIHRpbWUgZm9yCisgICAgIGEgSnVseSAxOTk1IHZpbnRhZ2UgREVDIEFscGhhc3RhdGlvbiAyMDAgNC8xMDAgc3lzdGVtLAorICAgICBhY2NvcmRpbmcgdG8gTmVsc29uIEguIEYuIEJlZWJlLiAgMTAwIHNlY29uZHMgaXMgZW5vdWdoLiAgKi8KKyAgYWxhcm0gKDEwMCk7CisKKyAgaWYgKGFyZ2MgPT0gMikKKyAgICBpbnB1dCA9IGZvcGVuIChhcmd2WzFdLCAiciIpOworICBlbHNlCisgICAgaW5wdXQgPSBzdGRpbjsKKworICBpZiAoIWlucHV0KQorICAgIHsKKyAgICAgIHBlcnJvciAoYXJndlsxXSk7CisgICAgICByZXR1cm4gMzsKKyAgICB9CisKKworICBzdGF0dXMgPSB5eXBhcnNlICgpOworICBpZiAoZmNsb3NlIChpbnB1dCkpCisgICAgcGVycm9yICgiZmNsb3NlIik7CisgIGFzc2VydCAoZ2xvYmFsX3Jlc3VsdCA9PSByZXN1bHQpOworICBhc3NlcnQgKGdsb2JhbF9jb3VudCA9PSBjb3VudCk7CisgIHJldHVybiBzdGF0dXM7Cit9CitfQVRFT0YKKworCisKKworCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuY2MgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo3MDgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuY2MgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuY2MgY2FsYy55IiAiY2FsYy5hdDo3MDgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo3MDgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NzA4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDg6IGJpc29uIC1vIGNhbGMuY2MgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MDgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gY2FsYy5jYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4OiBcJEJJU09OX0NYWF9XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NYWF9XT1JLUyIgImNhbGMuYXQ6NzA4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DWFhfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4OiBcJENYWCBcJENYWEZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jYyBjYWxjLWxleC5jYyBjYWxjLW1haW4uY2MgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmNjIGNhbGMtbGV4LmNjIGNhbGMtbWFpbi5jYyAkTElCUyIgImNhbGMuYXQ6NzA4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuY2MgY2FsYy1sZXguY2MgY2FsYy1tYWluLmNjICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4OiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuY2MKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NzA4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmNjCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDg6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5oaAorIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo3MDgiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuaGgKKworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBUZXN0IHRoZSBwcmlvcml0aWVzLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxICsgMiAqIDMgPSA3CisxICsgMiAqIC0zID0gLTUKKworLTFeMiA9IC0xCisoLTEpXjIgPSAxCisKKy0tLTEgPSAtMQorCisxIC0gMiAtIDMgPSAtNAorMSAtICgyIC0gMykgPSAyCisKKzJeMl4zID0gMjU2CisoMl4yKV4zID0gNjQKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzA4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MDgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworIyBTb21lIHN5bnRheCBlcnJvcnMuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEgMgorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwODogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MDgiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwODogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDg6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEvLzIKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzA4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MDgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJy8nLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MDgiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCitlcnJvcgorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwODogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MDgiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwODogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MDgiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxID0gMiA9IDMKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzA4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MDgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS43OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MDgiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisKKysxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzA4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzIuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwODogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzA4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgRXhlcmNpc2UgZXJyb3IgbWVzc2FnZXMgd2l0aCBFT0Y6IHdvcmsgb24gYW4gZW1wdHkgZmlsZS4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwODogIFwkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiICJjYWxjLmF0OjcwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwODogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDg6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgRXhlcmNpc2UgdGhlIGVycm9yIHRva2VuOiB3aXRob3V0IGl0LCB3ZSBkaWUgYXQgdGhlIGZpcnN0IGVycm9yLAorIyBoZW5jZSBiZSBzdXJlIHRvCisjCisjIC0gaGF2ZSBzZXZlcmFsIGVycm9ycyB3aGljaCBleGVyY2lzZSBkaWZmZXJlbnQgc2hpZnQvZGlzY2FyZGluZ3MKKyMgICAtICgpOiBub3RoaW5nIHRvIHBvcCwgbm90aGluZyB0byBkaXNjYXJkCisjICAgLSAoMSArIDEgKyAxICspOiBhIGxvdCB0byBwb3AsIG5vdGhpbmcgdG8gZGlzY2FyZAorIyAgIC0gKCogKiAqKTogbm90aGluZyB0byBwb3AsIGEgbG90IHRvIGRpc2NhcmQKKyMgICAtICgxICsgMiAqICopOiBzb21lIHRvIHBvcCBhbmQgZGlzY2FyZAorIworIyAtIHRlc3QgdGhlIGFjdGlvbiBhc3NvY2lhdGVkIHRvIGBlcnJvcicKKyMKKyMgLSBjaGVjayB0aGUgbG9va2FoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAorIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZQorIyAgIGZpcnN0IGVycm9yIGlzICIpIiwgd2hpY2ggaXMgbmVlZGVkIHRvIHJlY292ZXIgZnJvbSB0aGUgZXJyb3IgYW5kCisjICAgcHJvZHVjZSB0aGUgIjAiIHRoYXQgdHJpZ2dlcnMgdGhlICIwICE9IDEiIGVycm9yLgorIworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoKSArICgxICsgMSArIDEgKykgKyAoKiAqICopICsgKDEgKiAyICogKikgPSAxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzA4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xODogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4yMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS40MTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworY2FsYzogZXJyb3I6IDQ0NDQgIT0gMQorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwODogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzA4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBUaGUgc2FtZSwgYnV0IHRoaXMgdGltZSBleGVyY2lzaW5nIGV4cGxpY2l0bHkgdHJpZ2dlcmVkIHN5bnRheCBlcnJvcnMuCisjIFBPU0lYIHNheXMgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCEpICsgKDEgMikgPSAxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzA4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKK2NhbGM6IGVycm9yOiAyMjIyICE9IDEKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDg6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygtICopICsgKDEgMikgPSAxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzA4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorY2FsYzogZXJyb3I6IDIyMjIgIT0gMQorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwODogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzA4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBDaGVjayB0aGF0IHl5ZXJyb2sgd29ya3MgcHJvcGVybHk6IHNlY29uZCBlcnJvciBpcyBub3QgcmVwb3J0ZWQsCisjIHRoaXJkIGFuZCBmb3VydGggYXJlLiAgUGFyc2Ugc3RhdHVzIGlzIHN1Y2Nlc2Z1bGwuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygqICopICsgKCopICsgKCopCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzA4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwODogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzA4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjQ1CisjQVRfU1RBUlRfMjQ2CithdF9mbl9ncm91cF9iYW5uZXIgMjQ2ICdjYWxjLmF0OjcwOScgXAorICAiQ2FsY3VsYXRvciAlbGFuZ3VhZ2UgXCJDKytcIiAlZ2xyLXBhcnNlciAlZGVmaW5lcyAlbG9jYXRpb25zICVkZWZpbmUgYXBpLmxvY2F0aW9uLnR5cGUgU3BhbiIgIiIgMTQKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyNDYuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisKKworCisKKworCisKKworY2F0ID5jYWxjLnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworLyogSW5maXggbm90YXRpb24gY2FsY3VsYXRvci0tY2FsYyAqLworJWxhbmd1YWdlICJDKysiICVnbHItcGFyc2VyICVkZWZpbmVzICVsb2NhdGlvbnMgJWRlZmluZSBhcGkubG9jYXRpb24udHlwZSBTcGFuCislZGVmaW5lIGdsb2JhbF90b2tlbnNfYW5kX3l5c3R5cGUKKyVjb2RlIHJlcXVpcmVzCit7CisKKyMgaW5jbHVkZSA8aW9zdHJlYW0+CisgIHN0cnVjdCBQb2ludAorICB7CisgICAgaW50IGw7CisgICAgaW50IGM7CisgIH07CisKKyAgc3RydWN0IFNwYW4KKyAgeworICAgIFBvaW50IGZpcnN0OworICAgIFBvaW50IGxhc3Q7CisgIH07CisKKyMgZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKEN1cnJlbnQpLmZpcnN0ID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3Q7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKEN1cnJlbnQpLmxhc3QgID0gWVlSSFNMT0MgKFJocywgTikubGFzdDsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKEN1cnJlbnQpLmZpcnN0ID0gKEN1cnJlbnQpLmxhc3QgPSBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0OyAgICAgIFwKKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgd2hpbGUgKGZhbHNlKQorCisKKyAgLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KKyAgdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Cit9CisKKy8qIEV4ZXJjaXNlICV1bmlvbi4gKi8KKyV1bmlvbgoreworICBzZW1hbnRpY192YWx1ZSBpdmFsOworfTsKKyVwcmludGVyIHsgeXlvdXRwdXQgPDwgJCQ7IH0gPGl2YWw+OworCislY29kZSBwcm92aWRlcworeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgLyogVGhlIGlucHV0LiAgKi8KKyAgZXh0ZXJuIEZJTEUgKmlucHV0OworICBleHRlcm4gc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdDsKKyAgZXh0ZXJuIGludCBnbG9iYWxfY291bnQ7Cit9CisKKyVjb2RlCit7CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZGVmaW5lIFVTRShWYXIpCisKK0ZJTEUgKmlucHV0Oworc3RhdGljIGludCBwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCk7CisKKworaW50IHl5bGV4ICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgeXk6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApOworfQorCisKKyVpbml0aWFsLWFjdGlvbgoreworICBAJC5maXJzdC5sID0gQCQuZmlyc3QuYyA9IDE7CisgIEAkLmxhc3QgPSBAJC5maXJzdDsKK30KKworLyogQmlzb24gRGVjbGFyYXRpb25zICovCisldG9rZW4gQ0FMQ19FT0YgMCAiZW5kIG9mIGlucHV0IgorJXRva2VuIDxpdmFsPiBOVU0gIm51bWJlciIKKyV0eXBlICA8aXZhbD4gZXhwCisKKyVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbiAgICAgICAgICAgICovCislbGVmdCAnLScgJysnCislbGVmdCAnKicgJy8nCislbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLworJXJpZ2h0ICdeJyAgICAvKiBleHBvbmVudGlhdGlvbiAgICAgICAgKi8KKworLyogR3JhbW1hciBmb2xsb3dzICovCislJQoraW5wdXQ6CisgIGxpbmUKK3wgaW5wdXQgbGluZSAgICAgICAgIHsgIH0KKzsKKworbGluZToKKyAgJ1xuJworfCBleHAgJ1xuJyAgICAgICAgICAgeyBVU0UgKCQxKTsgfQorOworCitleHA6CisgIE5VTSAgICAgICAgICAgICAgICB7ICQkID0gJDE7ICAgICAgICAgICAgIH0KK3wgZXhwICc9JyBleHAKKyAgeworICAgIGlmICgkMSAhPSAkMykKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImNhbGM6IGVycm9yOiAlZCAhPSAlZFxuIiwgJDEsICQzKTsKKyAgICAkJCA9ICQxOworICB9Cit8IGV4cCAnKycgZXhwICAgICAgICB7ICQkID0gJDEgKyAkMzsgICAgICAgIH0KK3wgZXhwICctJyBleHAgICAgICAgIHsgJCQgPSAkMSAtICQzOyAgICAgICAgfQorfCBleHAgJyonIGV4cCAgICAgICAgeyAkJCA9ICQxICogJDM7ICAgICAgICB9Cit8IGV4cCAnLycgZXhwICAgICAgICB7ICQkID0gJDEgLyAkMzsgICAgICAgIH0KK3wgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSAtJDI7ICAgICAgICAgICAgfQorfCBleHAgJ14nIGV4cCAgICAgICAgeyAkJCA9IHBvd2VyICgkMSwgJDMpOyB9Cit8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgIH0KK3wgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyB5eWVycm9rOyAgfQorfCAnIScgICAgICAgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9Cit8ICctJyBlcnJvciAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KKzsKKyUlCisKK3N0YXRpYyBpbnQKK3Bvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQoreworICBpbnQgcmVzID0gMTsKKyAgYXNzZXJ0ICgwIDw9IGV4cG9uZW50KTsKKyAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQorICAgIHJlcyAqPSBiYXNlOworICByZXR1cm4gcmVzOworfQorCisKKyAgc3RkOjpvc3RyZWFtJgorICBvcGVyYXRvcjw8IChzdGQ6Om9zdHJlYW0mIG8sIGNvbnN0IFNwYW4mIHMpCisgIHsKKyAgICBvIDw8IHMuZmlyc3QubCA8PCAnLicgPDwgcy5maXJzdC5jOworICAgIGlmIChzLmZpcnN0LmwgIT0gcy5sYXN0LmwpCisgICAgICBvIDw8ICctJyA8PCBzLmxhc3QubCA8PCAnLicgPDwgcy5sYXN0LmMgLSAxOworICAgIGVsc2UgaWYgKHMuZmlyc3QuYyAhPSBzLmxhc3QuYyAtIDEpCisgICAgICBvIDw8ICctJyA8PCBzLmxhc3QuYyAtIDE7CisgICAgcmV0dXJuIG87CisgIH0KKworLyogQSBDKysgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3ZvaWQKK3l5OjpwYXJzZXI6OmVycm9yIChjb25zdCBsb2NhdGlvbl90eXBlJiBsLCBjb25zdCBzdGQ6OnN0cmluZyYgbSkKK3sKKyAgKHZvaWQpIGw7CisgIHN0ZDo6Y2VyciA8PCBsIDw8ICI6ICIgPDwgbSA8PCBzdGQ6OmVuZGw7Cit9CitfQVRFT0YKKworCisKK2NhdCA+Y2FsYy1sZXguY2MgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworCisjaW5jbHVkZSAiY2FsYy5oaCIKKworI2luY2x1ZGUgPGN0eXBlLmg+CisKK2ludCB5eWxleCAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKTsKK3N0YXRpYyBpbnQgZ2V0X2NoYXIgKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCB5eTo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCk7CitzdGF0aWMgdm9pZCB1bmdldF9jaGFyICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgeXk6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3AsICBpbnQgYyk7CisKKworc3RhdGljIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgbGFzdF95eWxsb2M7CisKK3N0YXRpYyBpbnQKK2dldF9jaGFyICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgeXk6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApCit7CisgIGludCByZXMgPSBnZXRjIChpbnB1dCk7CisgICh2b2lkKSBsdmFscDsodm9pZCkgbGxvY3A7CisKKyAgbGFzdF95eWxsb2MgPSAoKmxsb2NwKTsKKyAgaWYgKHJlcyA9PSAnXG4nKQorICAgIHsKKyAgICAgICgqbGxvY3ApLmxhc3QubCsrOworICAgICAgKCpsbG9jcCkubGFzdC5jID0gMTsKKyAgICB9CisgIGVsc2UKKyAgICAoKmxsb2NwKS5sYXN0LmMrKzsKKworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZAordW5nZXRfY2hhciAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwLCAgaW50IGMpCit7CisgICh2b2lkKSBsdmFscDsodm9pZCkgbGxvY3A7CisKKyAgLyogV3Jvbmcgd2hlbiBDID09IGBcbicuICovCisgICgqbGxvY3ApID0gbGFzdF95eWxsb2M7CisKKyAgdW5nZXRjIChjLCBpbnB1dCk7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRfc2lnbmVkX2ludGVnZXIgKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCB5eTo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCkKK3sKKyAgaW50IGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKTsKKyAgaW50IHNpZ24gPSAxOworICBpbnQgbiA9IDA7CisKKyAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKKyAgaWYgKGMgPT0gJy0nKQorICAgIHsKKyAgICAgIGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKTsKKyAgICAgIHNpZ24gPSAtMTsKKyAgICB9CisKKyAgd2hpbGUgKGlzZGlnaXQgKGMpKQorICAgIHsKKyAgICAgIG4gPSAxMCAqIG4gKyAoYyAtICcwJyk7CisgICAgICBjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCk7CisgICAgfQorCisgIHVuZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCwgIGMpOworCisgIHJldHVybiBzaWduICogbjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgTGV4aWNhbCBhbmFseXplciByZXR1cm5zIGFuIGludGVnZXIgb24gdGhlIHN0YWNrIGFuZCB0aGUgdG9rZW4gfAorfCBOVU0sIG9yIHRoZSBBU0NJSSBjaGFyYWN0ZXIgcmVhZCBpZiBub3QgYSBudW1iZXIuICBTa2lwcyBhbGwgICB8Cit8IGJsYW5rcyBhbmQgdGFicywgcmV0dXJucyAwIGZvciBFT0YuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitpbnQgeXlsZXggKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCB5eTo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCkKK3sKKyAgaW50IGM7CisgIC8qIFNraXAgY3VycmVudCB0b2tlbiwgdGhlbiB3aGl0ZSBzcGFjZXMuICAqLworICBkbworICAgIHsKKyAgICAgKCpsbG9jcCkuZmlyc3QuYyA9ICgqbGxvY3ApLmxhc3QuYzsKKyAgICAgICgqbGxvY3ApLmZpcnN0LmwgICA9ICgqbGxvY3ApLmxhc3QubDsKKworICAgIH0KKyAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCkpID09ICcgJyB8fCBjID09ICdcdCcpOworCisgIC8qIHByb2Nlc3MgbnVtYmVycyAgICovCisgIGlmIChjID09ICcuJyB8fCBpc2RpZ2l0IChjKSkKKyAgICB7CisgICAgICB1bmdldF9jaGFyIChsdmFscCwgbGxvY3AsICBjKTsKKyAgICAgICgqbHZhbHApLml2YWwgPSByZWFkX3NpZ25lZF9pbnRlZ2VyIChsdmFscCwgbGxvY3ApOworICAgICAgcmV0dXJuIE5VTTsKKyAgICB9CisKKyAgLyogUmV0dXJuIGVuZC1vZi1maWxlLiAgKi8KKyAgaWYgKGMgPT0gRU9GKQorICAgIHJldHVybiBDQUxDX0VPRjsKKworICAvKiBSZXR1cm4gc2luZ2xlIGNoYXJzLiAqLworICByZXR1cm4gYzsKK30KK19BVEVPRgorCisKK2NhdCA+Y2FsYy1tYWluLmNjIDw8J19BVEVPRicKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKKworI2luY2x1ZGUgImNhbGMuaGgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2Vsc2UKKyMgdW5kZWYgYWxhcm0KKyMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCisjZW5kaWYKKworCisvKiBBIEMrKyB5eXBhcnNlIHRoYXQgc2ltdWxhdGVzIHRoZSBDIHNpZ25hdHVyZS4gICovCitpbnQKK3l5cGFyc2UgKCkKK3sKKyAgeXk6OnBhcnNlciBwYXJzZXI7CisjaWYgWVlERUJVRworICBwYXJzZXIuc2V0X2RlYnVnX2xldmVsICgxKTsKKyNlbmRpZgorICByZXR1cm4gcGFyc2VyLnBhcnNlICgpOworfQorCisKK3NlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOworaW50IGdsb2JhbF9jb3VudCA9IDA7CisKKy8qIEEgQyBtYWluIGZ1bmN0aW9uLiAgKi8KK2ludAorbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworICBzZW1hbnRpY192YWx1ZSByZXN1bHQgPSAwOworICBpbnQgY291bnQgPSAwOworICBpbnQgc3RhdHVzOworCisgIC8qIFRoaXMgdXNlZCB0byBiZSBhbGFybSAoMTApLCBidXQgdGhhdCBpc24ndCBlbm91Z2ggdGltZSBmb3IKKyAgICAgYSBKdWx5IDE5OTUgdmludGFnZSBERUMgQWxwaGFzdGF0aW9uIDIwMCA0LzEwMCBzeXN0ZW0sCisgICAgIGFjY29yZGluZyB0byBOZWxzb24gSC4gRi4gQmVlYmUuICAxMDAgc2Vjb25kcyBpcyBlbm91Z2guICAqLworICBhbGFybSAoMTAwKTsKKworICBpZiAoYXJnYyA9PSAyKQorICAgIGlucHV0ID0gZm9wZW4gKGFyZ3ZbMV0sICJyIik7CisgIGVsc2UKKyAgICBpbnB1dCA9IHN0ZGluOworCisgIGlmICghaW5wdXQpCisgICAgeworICAgICAgcGVycm9yIChhcmd2WzFdKTsKKyAgICAgIHJldHVybiAzOworICAgIH0KKworCisgIHN0YXR1cyA9IHl5cGFyc2UgKCk7CisgIGlmIChmY2xvc2UgKGlucHV0KSkKKyAgICBwZXJyb3IgKCJmY2xvc2UiKTsKKyAgYXNzZXJ0IChnbG9iYWxfcmVzdWx0ID09IHJlc3VsdCk7CisgIGFzc2VydCAoZ2xvYmFsX2NvdW50ID09IGNvdW50KTsKKyAgcmV0dXJuIHN0YXR1czsKK30KK19BVEVPRgorCisKKworCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjcwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmNjIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jYyBjYWxjLnkiICJjYWxjLmF0OjcwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmNjIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjcwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo3MDkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOTogYmlzb24gLW8gY2FsYy5jYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBjYWxjLmNjIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDk6IFwkQklTT05fQ1hYX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ1hYX1dPUktTIiAiY2FsYy5hdDo3MDkiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NYWF9XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDk6IFwkQ1hYIFwkQ1hYRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmNjIGNhbGMtbGV4LmNjIGNhbGMtbWFpbi5jYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuY2MgY2FsYy1sZXguY2MgY2FsYy1tYWluLmNjICRMSUJTIiAiY2FsYy5hdDo3MDkiCisoICRhdF9jaGVja190cmFjZTsgJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jYyBjYWxjLWxleC5jYyBjYWxjLW1haW4uY2MgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDk6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5jYworIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo3MDkiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuY2MKKworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOTogXCRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCBcIlwkLjoge1wkX31cXG5cIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCBcJC4gPT0gMSkgJiYgL15cXHMqXCQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciBcIm1haW50XCIuCisgICAgICAgICMgfHwgL1xcc1wkLworICAgICAgICApJyBjYWxjLmhoCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjcwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5oaAorCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIFRlc3QgdGhlIHByaW9yaXRpZXMuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEgKyAyICogMyA9IDcKKzEgKyAyICogLTMgPSAtNQorCistMV4yID0gLTEKKygtMSleMiA9IDEKKworLS0tMSA9IC0xCisKKzEgLSAyIC0gMyA9IC00CisxIC0gKDIgLSAzKSA9IDIKKworMl4yXjMgPSAyNTYKKygyXjIpXjMgPSA2NAorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MDkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisjIFNvbWUgc3ludGF4IGVycm9ycy4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMSAyCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzA5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzA5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMS8vMgorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MDkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKK2Vycm9yCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzA5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICR1bmRlZmluZWQKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEgPSAyID0gMworX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MDkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKworKzEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzA5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MDkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MDkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIgImNhbGMuYXQ6NzA5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzA5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzA5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBFeGVyY2lzZSB0aGUgZXJyb3IgdG9rZW46IHdpdGhvdXQgaXQsIHdlIGRpZSBhdCB0aGUgZmlyc3QgZXJyb3IsCisjIGhlbmNlIGJlIHN1cmUgdG8KKyMKKyMgLSBoYXZlIHNldmVyYWwgZXJyb3JzIHdoaWNoIGV4ZXJjaXNlIGRpZmZlcmVudCBzaGlmdC9kaXNjYXJkaW5ncworIyAgIC0gKCk6IG5vdGhpbmcgdG8gcG9wLCBub3RoaW5nIHRvIGRpc2NhcmQKKyMgICAtICgxICsgMSArIDEgKyk6IGEgbG90IHRvIHBvcCwgbm90aGluZyB0byBkaXNjYXJkCisjICAgLSAoKiAqICopOiBub3RoaW5nIHRvIHBvcCwgYSBsb3QgdG8gZGlzY2FyZAorIyAgIC0gKDEgKyAyICogKik6IHNvbWUgdG8gcG9wIGFuZCBkaXNjYXJkCisjCisjIC0gdGVzdCB0aGUgYWN0aW9uIGFzc29jaWF0ZWQgdG8gYGVycm9yJworIworIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCisjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKKyMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCisjCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygpICsgKDEgKyAxICsgMSArKSArICgqICogKikgKyAoMSAqIDIgKiAqKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzA5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MDkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjIzOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjQxOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitjYWxjOiBlcnJvcjogNDQ0NCAhPSAxCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MDkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIFRoZSBzYW1lLCBidXQgdGhpcyB0aW1lIGV4ZXJjaXNpbmcgZXhwbGljaXRseSB0cmlnZ2VyZWQgc3ludGF4IGVycm9ycy4KKyMgUE9TSVggc2F5cyB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoISkgKyAoMSAyKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzA5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MDkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4xMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorY2FsYzogZXJyb3I6IDIyMjIgIT0gMQorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzA5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKC0gKikgKyAoMSAyKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzA5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MDkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS40OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCitjYWxjOiBlcnJvcjogMjIyMiAhPSAxCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MDkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIENoZWNrIHRoYXQgeXllcnJvayB3b3JrcyBwcm9wZXJseTogc2Vjb25kIGVycm9yIGlzIG5vdCByZXBvcnRlZCwKKyMgdGhpcmQgYW5kIGZvdXJ0aCBhcmUuICBQYXJzZSBzdGF0dXMgaXMgc3VjY2VzZnVsbC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCogKikgKyAoKikgKyAoKikKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzA5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MDk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MDkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE2OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzA5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MDkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yNDYKKyNBVF9TVEFSVF8yNDcKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyNDcgJ2NhbGMuYXQ6NzEwJyBcCisgICJDYWxjdWxhdG9yICVsYW5ndWFnZSBcIkMrK1wiICVnbHItcGFyc2VyICVkZWZpbmVzICVsb2NhdGlvbnMgJWVycm9yLXZlcmJvc2UgJW5hbWUtcHJlZml4IFwiY2FsY1wiICV2ZXJib3NlICV5YWNjIiAiIiAxNAorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI0Ny4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworCisKKworCisKKworCitjYXQgPmNhbGMueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisvKiBJbmZpeCBub3RhdGlvbiBjYWxjdWxhdG9yLS1jYWxjICovCislbGFuZ3VhZ2UgIkMrKyIgJWdsci1wYXJzZXIgJWRlZmluZXMgJWxvY2F0aW9ucyAlZXJyb3ItdmVyYm9zZSAlbmFtZS1wcmVmaXggImNhbGMiICV2ZXJib3NlICV5YWNjCislZGVmaW5lIGdsb2JhbF90b2tlbnNfYW5kX3l5c3R5cGUKKyVjb2RlIHJlcXVpcmVzCit7CisKKyAgLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KKyAgdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Cit9CisKKy8qIEV4ZXJjaXNlICV1bmlvbi4gKi8KKyV1bmlvbgoreworICBzZW1hbnRpY192YWx1ZSBpdmFsOworfTsKKyVwcmludGVyIHsgeXlvdXRwdXQgPDwgJCQ7IH0gPGl2YWw+OworCislY29kZSBwcm92aWRlcworeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgLyogVGhlIGlucHV0LiAgKi8KKyAgZXh0ZXJuIEZJTEUgKmlucHV0OworICBleHRlcm4gc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdDsKKyAgZXh0ZXJuIGludCBnbG9iYWxfY291bnQ7Cit9CisKKyVjb2RlCit7CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZGVmaW5lIFVTRShWYXIpCisKK0ZJTEUgKmlucHV0Oworc3RhdGljIGludCBwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCk7CisKKworaW50IGNhbGNsZXggKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApOworfQorCisKKworLyogQmlzb24gRGVjbGFyYXRpb25zICovCisldG9rZW4gQ0FMQ19FT0YgMCAiZW5kIG9mIGlucHV0IgorJXRva2VuIDxpdmFsPiBOVU0gIm51bWJlciIKKyV0eXBlICA8aXZhbD4gZXhwCisKKyVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbiAgICAgICAgICAgICovCislbGVmdCAnLScgJysnCislbGVmdCAnKicgJy8nCislbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLworJXJpZ2h0ICdeJyAgICAvKiBleHBvbmVudGlhdGlvbiAgICAgICAgKi8KKworLyogR3JhbW1hciBmb2xsb3dzICovCislJQoraW5wdXQ6CisgIGxpbmUKK3wgaW5wdXQgbGluZSAgICAgICAgIHsgIH0KKzsKKworbGluZToKKyAgJ1xuJworfCBleHAgJ1xuJyAgICAgICAgICAgeyBVU0UgKCQxKTsgfQorOworCitleHA6CisgIE5VTSAgICAgICAgICAgICAgICB7ICQkID0gJDE7ICAgICAgICAgICAgIH0KK3wgZXhwICc9JyBleHAKKyAgeworICAgIGlmICgkMSAhPSAkMykKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImNhbGM6IGVycm9yOiAlZCAhPSAlZFxuIiwgJDEsICQzKTsKKyAgICAkJCA9ICQxOworICB9Cit8IGV4cCAnKycgZXhwICAgICAgICB7ICQkID0gJDEgKyAkMzsgICAgICAgIH0KK3wgZXhwICctJyBleHAgICAgICAgIHsgJCQgPSAkMSAtICQzOyAgICAgICAgfQorfCBleHAgJyonIGV4cCAgICAgICAgeyAkJCA9ICQxICogJDM7ICAgICAgICB9Cit8IGV4cCAnLycgZXhwICAgICAgICB7ICQkID0gJDEgLyAkMzsgICAgICAgIH0KK3wgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSAtJDI7ICAgICAgICAgICAgfQorfCBleHAgJ14nIGV4cCAgICAgICAgeyAkJCA9IHBvd2VyICgkMSwgJDMpOyB9Cit8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgIH0KK3wgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyB5eWVycm9rOyAgfQorfCAnIScgICAgICAgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9Cit8ICctJyBlcnJvciAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KKzsKKyUlCisKK3N0YXRpYyBpbnQKK3Bvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQoreworICBpbnQgcmVzID0gMTsKKyAgYXNzZXJ0ICgwIDw9IGV4cG9uZW50KTsKKyAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQorICAgIHJlcyAqPSBiYXNlOworICByZXR1cm4gcmVzOworfQorCisKKy8qIEEgQysrIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCit2b2lkCitjYWxjOjpwYXJzZXI6OmVycm9yIChjb25zdCBsb2NhdGlvbl90eXBlJiBsLCBjb25zdCBzdGQ6OnN0cmluZyYgbSkKK3sKKyAgKHZvaWQpIGw7CisgIHN0ZDo6Y2VyciA8PCBsIDw8ICI6ICIgPDwgbSA8PCBzdGQ6OmVuZGw7Cit9CitfQVRFT0YKKworCisKK2NhdCA+Y2FsYy1sZXguY2MgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworCisjaW5jbHVkZSAiY2FsYy5oaCIKKworI2luY2x1ZGUgPGN0eXBlLmg+CisKK2ludCBjYWxjbGV4IChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKTsKK3N0YXRpYyBpbnQgZ2V0X2NoYXIgKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApOworc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCwgIGludCBjKTsKKworCitzdGF0aWMgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlIGxhc3RfeXlsbG9jOworCitzdGF0aWMgaW50CitnZXRfY2hhciAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCkKK3sKKyAgaW50IHJlcyA9IGdldGMgKGlucHV0KTsKKyAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKKworICBsYXN0X3l5bGxvYyA9ICgqbGxvY3ApOworICBpZiAocmVzID09ICdcbicpCisgICAgeworICAgICAgKCpsbG9jcCkuZW5kLmxpbmUrKzsKKyAgICAgICgqbGxvY3ApLmVuZC5jb2x1bW4gPSAxOworICAgIH0KKyAgZWxzZQorICAgICgqbGxvY3ApLmVuZC5jb2x1bW4rKzsKKworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZAordW5nZXRfY2hhciAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCwgIGludCBjKQoreworICAodm9pZCkgbHZhbHA7KHZvaWQpIGxsb2NwOworCisgIC8qIFdyb25nIHdoZW4gQyA9PSBgXG4nLiAqLworICAoKmxsb2NwKSA9IGxhc3RfeXlsbG9jOworCisgIHVuZ2V0YyAoYywgaW5wdXQpOworfQorCitzdGF0aWMgaW50CityZWFkX3NpZ25lZF9pbnRlZ2VyIChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKQoreworICBpbnQgYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApOworICBpbnQgc2lnbiA9IDE7CisgIGludCBuID0gMDsKKworICAodm9pZCkgbHZhbHA7KHZvaWQpIGxsb2NwOworICBpZiAoYyA9PSAnLScpCisgICAgeworICAgICAgYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApOworICAgICAgc2lnbiA9IC0xOworICAgIH0KKworICB3aGlsZSAoaXNkaWdpdCAoYykpCisgICAgeworICAgICAgbiA9IDEwICogbiArIChjIC0gJzAnKTsKKyAgICAgIGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKTsKKyAgICB9CisKKyAgdW5nZXRfY2hhciAobHZhbHAsIGxsb2NwLCAgYyk7CisKKyAgcmV0dXJuIHNpZ24gKiBuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBMZXhpY2FsIGFuYWx5emVyIHJldHVybnMgYW4gaW50ZWdlciBvbiB0aGUgc3RhY2sgYW5kIHRoZSB0b2tlbiB8Cit8IE5VTSwgb3IgdGhlIEFTQ0lJIGNoYXJhY3RlciByZWFkIGlmIG5vdCBhIG51bWJlci4gIFNraXBzIGFsbCAgIHwKK3wgYmxhbmtzIGFuZCB0YWJzLCByZXR1cm5zIDAgZm9yIEVPRi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2ludCBjYWxjbGV4IChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKQoreworICBpbnQgYzsKKyAgLyogU2tpcCBjdXJyZW50IHRva2VuLCB0aGVuIHdoaXRlIHNwYWNlcy4gICovCisgIGRvCisgICAgeworICAgICAoKmxsb2NwKS5iZWdpbi5jb2x1bW4gPSAoKmxsb2NwKS5lbmQuY29sdW1uOworICAgICAgKCpsbG9jcCkuYmVnaW4ubGluZSAgID0gKCpsbG9jcCkuZW5kLmxpbmU7CisKKyAgICB9CisgIHdoaWxlICgoYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApKSA9PSAnICcgfHwgYyA9PSAnXHQnKTsKKworICAvKiBwcm9jZXNzIG51bWJlcnMgICAqLworICBpZiAoYyA9PSAnLicgfHwgaXNkaWdpdCAoYykpCisgICAgeworICAgICAgdW5nZXRfY2hhciAobHZhbHAsIGxsb2NwLCAgYyk7CisgICAgICAoKmx2YWxwKS5pdmFsID0gcmVhZF9zaWduZWRfaW50ZWdlciAobHZhbHAsIGxsb2NwKTsKKyAgICAgIHJldHVybiBOVU07CisgICAgfQorCisgIC8qIFJldHVybiBlbmQtb2YtZmlsZS4gICovCisgIGlmIChjID09IEVPRikKKyAgICByZXR1cm4gQ0FMQ19FT0Y7CisKKyAgLyogUmV0dXJuIHNpbmdsZSBjaGFycy4gKi8KKyAgcmV0dXJuIGM7Cit9CitfQVRFT0YKKworCitjYXQgPmNhbGMtbWFpbi5jYyA8PCdfQVRFT0YnCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCisKKyNpbmNsdWRlICJjYWxjLmhoIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjIHVuZGVmIGFsYXJtCisjIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLworI2VuZGlmCisKKworLyogQSBDKysgY2FsY3BhcnNlIHRoYXQgc2ltdWxhdGVzIHRoZSBDIHNpZ25hdHVyZS4gICovCitpbnQKK2NhbGNwYXJzZSAoKQoreworICBjYWxjOjpwYXJzZXIgcGFyc2VyOworI2lmIFlZREVCVUcKKyAgcGFyc2VyLnNldF9kZWJ1Z19sZXZlbCAoMSk7CisjZW5kaWYKKyAgcmV0dXJuIHBhcnNlci5wYXJzZSAoKTsKK30KKworCitzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0ID0gMDsKK2ludCBnbG9iYWxfY291bnQgPSAwOworCisvKiBBIEMgbWFpbiBmdW5jdGlvbi4gICovCitpbnQKK21haW4gKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKyAgc2VtYW50aWNfdmFsdWUgcmVzdWx0ID0gMDsKKyAgaW50IGNvdW50ID0gMDsKKyAgaW50IHN0YXR1czsKKworICAvKiBUaGlzIHVzZWQgdG8gYmUgYWxhcm0gKDEwKSwgYnV0IHRoYXQgaXNuJ3QgZW5vdWdoIHRpbWUgZm9yCisgICAgIGEgSnVseSAxOTk1IHZpbnRhZ2UgREVDIEFscGhhc3RhdGlvbiAyMDAgNC8xMDAgc3lzdGVtLAorICAgICBhY2NvcmRpbmcgdG8gTmVsc29uIEguIEYuIEJlZWJlLiAgMTAwIHNlY29uZHMgaXMgZW5vdWdoLiAgKi8KKyAgYWxhcm0gKDEwMCk7CisKKyAgaWYgKGFyZ2MgPT0gMikKKyAgICBpbnB1dCA9IGZvcGVuIChhcmd2WzFdLCAiciIpOworICBlbHNlCisgICAgaW5wdXQgPSBzdGRpbjsKKworICBpZiAoIWlucHV0KQorICAgIHsKKyAgICAgIHBlcnJvciAoYXJndlsxXSk7CisgICAgICByZXR1cm4gMzsKKyAgICB9CisKKworICBzdGF0dXMgPSBjYWxjcGFyc2UgKCk7CisgIGlmIChmY2xvc2UgKGlucHV0KSkKKyAgICBwZXJyb3IgKCJmY2xvc2UiKTsKKyAgYXNzZXJ0IChnbG9iYWxfcmVzdWx0ID09IHJlc3VsdCk7CisgIGFzc2VydCAoZ2xvYmFsX2NvdW50ID09IGNvdW50KTsKKyAgcmV0dXJuIHN0YXR1czsKK30KK19BVEVPRgorCisKKworCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjcxMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmNjIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jYyBjYWxjLnkiICJjYWxjLmF0OjcxMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmNjIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjcxMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo3MTAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMDogYmlzb24gLW8gY2FsYy5jYyBjYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBjYWxjLmNjIGNhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTA6IFwkQklTT05fQ1hYX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ1hYX1dPUktTIiAiY2FsYy5hdDo3MTAiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NYWF9XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTA6IFwkQ1hYIFwkQ1hYRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gY2FsYyBjYWxjLmNjIGNhbGMtbGV4LmNjIGNhbGMtbWFpbi5jYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuY2MgY2FsYy1sZXguY2MgY2FsYy1tYWluLmNjICRMSUJTIiAiY2FsYy5hdDo3MTAiCisoICRhdF9jaGVja190cmFjZTsgJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jYyBjYWxjLWxleC5jYyBjYWxjLW1haW4uY2MgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTA6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5jYworIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo3MTAiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuY2MKKworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMDogXCRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCBcIlwkLjoge1wkX31cXG5cIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCBcJC4gPT0gMSkgJiYgL15cXHMqXCQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciBcIm1haW50XCIuCisgICAgICAgICMgfHwgL1xcc1wkLworICAgICAgICApJyBjYWxjLmhoCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjcxMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5oaAorCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIFRlc3QgdGhlIHByaW9yaXRpZXMuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEgKyAyICogMyA9IDcKKzEgKyAyICogLTMgPSAtNQorCistMV4yID0gLTEKKygtMSleMiA9IDEKKworLS0tMSA9IC0xCisKKzEgLSAyIC0gMyA9IC00CisxIC0gKDIgLSAzKSA9IDIKKworMl4yXjMgPSAyNTYKKygyXjIpXjMgPSA2NAorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisjIFNvbWUgc3ludGF4IGVycm9ycy4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMSAyCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEwOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcxMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEwOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzEwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzEwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMS8vMgorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKK2Vycm9yCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEwOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcxMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEwOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzEwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICR1bmRlZmluZWQKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEgPSAyID0gMworX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKworKzEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTA6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzEwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEwOiAgXCRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbCIgImNhbGMuYXQ6NzEwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEwOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzEwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzEwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBFeGVyY2lzZSB0aGUgZXJyb3IgdG9rZW46IHdpdGhvdXQgaXQsIHdlIGRpZSBhdCB0aGUgZmlyc3QgZXJyb3IsCisjIGhlbmNlIGJlIHN1cmUgdG8KKyMKKyMgLSBoYXZlIHNldmVyYWwgZXJyb3JzIHdoaWNoIGV4ZXJjaXNlIGRpZmZlcmVudCBzaGlmdC9kaXNjYXJkaW5ncworIyAgIC0gKCk6IG5vdGhpbmcgdG8gcG9wLCBub3RoaW5nIHRvIGRpc2NhcmQKKyMgICAtICgxICsgMSArIDEgKyk6IGEgbG90IHRvIHBvcCwgbm90aGluZyB0byBkaXNjYXJkCisjICAgLSAoKiAqICopOiBub3RoaW5nIHRvIHBvcCwgYSBsb3QgdG8gZGlzY2FyZAorIyAgIC0gKDEgKyAyICogKik6IHNvbWUgdG8gcG9wIGFuZCBkaXNjYXJkCisjCisjIC0gdGVzdCB0aGUgYWN0aW9uIGFzc29jaWF0ZWQgdG8gYGVycm9yJworIworIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCisjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKKyMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCisjCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygpICsgKDEgKyAxICsgMSArKSArICgqICogKikgKyAoMSAqIDIgKiAqKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTA6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzEwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE4OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjIzOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjQxOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitjYWxjOiBlcnJvcjogNDQ0NCAhPSAxCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIFRoZSBzYW1lLCBidXQgdGhpcyB0aW1lIGV4ZXJjaXNpbmcgZXhwbGljaXRseSB0cmlnZ2VyZWQgc3ludGF4IGVycm9ycy4KKyMgUE9TSVggc2F5cyB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoISkgKyAoMSAyKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTA6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzEwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4xMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorY2FsYzogZXJyb3I6IDIyMjIgIT0gMQorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzEwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKC0gKikgKyAoMSAyKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTA6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzEwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS40OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEyOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCitjYWxjOiBlcnJvcjogMjIyMiAhPSAxCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIENoZWNrIHRoYXQgeXllcnJvayB3b3JrcyBwcm9wZXJseTogc2Vjb25kIGVycm9yIGlzIG5vdCByZXBvcnRlZCwKKyMgdGhpcmQgYW5kIGZvdXJ0aCBhcmUuICBQYXJzZSBzdGF0dXMgaXMgc3VjY2VzZnVsbC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCogKikgKyAoKikgKyAoKikKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTA6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzEwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTA6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE2OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yNDcKKyNBVF9TVEFSVF8yNDgKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyNDggJ2NhbGMuYXQ6NzExJyBcCisgICJDYWxjdWxhdG9yICVsYW5ndWFnZSBcIkMrK1wiICVnbHItcGFyc2VyICVkZWZpbmVzICVsb2NhdGlvbnMgJWVycm9yLXZlcmJvc2UgJWRlZmluZSBhcGkucHJlZml4IFwiY2FsY1wiICV2ZXJib3NlICV5YWNjIiAiIiAxNAorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI0OC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworCisKKworCisKKworCitjYXQgPmNhbGMueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisvKiBJbmZpeCBub3RhdGlvbiBjYWxjdWxhdG9yLS1jYWxjICovCislbGFuZ3VhZ2UgIkMrKyIgJWdsci1wYXJzZXIgJWRlZmluZXMgJWxvY2F0aW9ucyAlZXJyb3ItdmVyYm9zZSAlZGVmaW5lIGFwaS5wcmVmaXggImNhbGMiICV2ZXJib3NlICV5YWNjCislZGVmaW5lIGdsb2JhbF90b2tlbnNfYW5kX3l5c3R5cGUKKyVjb2RlIHJlcXVpcmVzCit7CisKKyAgLyogRXhlcmNpc2UgcHJlLXByb2xvZ3VlIGRlcGVuZGVuY3kgdG8gJXVuaW9uLiAgKi8KKyAgdHlwZWRlZiBpbnQgc2VtYW50aWNfdmFsdWU7Cit9CisKKy8qIEV4ZXJjaXNlICV1bmlvbi4gKi8KKyV1bmlvbgoreworICBzZW1hbnRpY192YWx1ZSBpdmFsOworfTsKKyVwcmludGVyIHsgeXlvdXRwdXQgPDwgJCQ7IH0gPGl2YWw+OworCislY29kZSBwcm92aWRlcworeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgLyogVGhlIGlucHV0LiAgKi8KKyAgZXh0ZXJuIEZJTEUgKmlucHV0OworICBleHRlcm4gc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdDsKKyAgZXh0ZXJuIGludCBnbG9iYWxfY291bnQ7Cit9CisKKyVjb2RlCit7CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZGVmaW5lIFVTRShWYXIpCisKK0ZJTEUgKmlucHV0Oworc3RhdGljIGludCBwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCk7CisKKworaW50IGNhbGNsZXggKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApOworfQorCisKKworLyogQmlzb24gRGVjbGFyYXRpb25zICovCisldG9rZW4gQ0FMQ19FT0YgMCAiZW5kIG9mIGlucHV0IgorJXRva2VuIDxpdmFsPiBOVU0gIm51bWJlciIKKyV0eXBlICA8aXZhbD4gZXhwCisKKyVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbiAgICAgICAgICAgICovCislbGVmdCAnLScgJysnCislbGVmdCAnKicgJy8nCislbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLworJXJpZ2h0ICdeJyAgICAvKiBleHBvbmVudGlhdGlvbiAgICAgICAgKi8KKworLyogR3JhbW1hciBmb2xsb3dzICovCislJQoraW5wdXQ6CisgIGxpbmUKK3wgaW5wdXQgbGluZSAgICAgICAgIHsgIH0KKzsKKworbGluZToKKyAgJ1xuJworfCBleHAgJ1xuJyAgICAgICAgICAgeyBVU0UgKCQxKTsgfQorOworCitleHA6CisgIE5VTSAgICAgICAgICAgICAgICB7ICQkID0gJDE7ICAgICAgICAgICAgIH0KK3wgZXhwICc9JyBleHAKKyAgeworICAgIGlmICgkMSAhPSAkMykKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImNhbGM6IGVycm9yOiAlZCAhPSAlZFxuIiwgJDEsICQzKTsKKyAgICAkJCA9ICQxOworICB9Cit8IGV4cCAnKycgZXhwICAgICAgICB7ICQkID0gJDEgKyAkMzsgICAgICAgIH0KK3wgZXhwICctJyBleHAgICAgICAgIHsgJCQgPSAkMSAtICQzOyAgICAgICAgfQorfCBleHAgJyonIGV4cCAgICAgICAgeyAkJCA9ICQxICogJDM7ICAgICAgICB9Cit8IGV4cCAnLycgZXhwICAgICAgICB7ICQkID0gJDEgLyAkMzsgICAgICAgIH0KK3wgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSAtJDI7ICAgICAgICAgICAgfQorfCBleHAgJ14nIGV4cCAgICAgICAgeyAkJCA9IHBvd2VyICgkMSwgJDMpOyB9Cit8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgIH0KK3wgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSAxMTExOyB5eWVycm9rOyAgfQorfCAnIScgICAgICAgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9Cit8ICctJyBlcnJvciAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KKzsKKyUlCisKK3N0YXRpYyBpbnQKK3Bvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KQoreworICBpbnQgcmVzID0gMTsKKyAgYXNzZXJ0ICgwIDw9IGV4cG9uZW50KTsKKyAgZm9yICgvKiBOaWVudGUgKi87IGV4cG9uZW50OyAtLWV4cG9uZW50KQorICAgIHJlcyAqPSBiYXNlOworICByZXR1cm4gcmVzOworfQorCisKKy8qIEEgQysrIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCit2b2lkCitjYWxjOjpwYXJzZXI6OmVycm9yIChjb25zdCBsb2NhdGlvbl90eXBlJiBsLCBjb25zdCBzdGQ6OnN0cmluZyYgbSkKK3sKKyAgKHZvaWQpIGw7CisgIHN0ZDo6Y2VyciA8PCBsIDw8ICI6ICIgPDwgbSA8PCBzdGQ6OmVuZGw7Cit9CitfQVRFT0YKKworCisKK2NhdCA+Y2FsYy1sZXguY2MgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworCisjaW5jbHVkZSAiY2FsYy5oaCIKKworI2luY2x1ZGUgPGN0eXBlLmg+CisKK2ludCBjYWxjbGV4IChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKTsKK3N0YXRpYyBpbnQgZ2V0X2NoYXIgKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApOworc3RhdGljIHZvaWQgdW5nZXRfY2hhciAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCwgIGludCBjKTsKKworCitzdGF0aWMgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlIGxhc3RfeXlsbG9jOworCitzdGF0aWMgaW50CitnZXRfY2hhciAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCkKK3sKKyAgaW50IHJlcyA9IGdldGMgKGlucHV0KTsKKyAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKKworICBsYXN0X3l5bGxvYyA9ICgqbGxvY3ApOworICBpZiAocmVzID09ICdcbicpCisgICAgeworICAgICAgKCpsbG9jcCkuZW5kLmxpbmUrKzsKKyAgICAgICgqbGxvY3ApLmVuZC5jb2x1bW4gPSAxOworICAgIH0KKyAgZWxzZQorICAgICgqbGxvY3ApLmVuZC5jb2x1bW4rKzsKKworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZAordW5nZXRfY2hhciAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCwgIGludCBjKQoreworICAodm9pZCkgbHZhbHA7KHZvaWQpIGxsb2NwOworCisgIC8qIFdyb25nIHdoZW4gQyA9PSBgXG4nLiAqLworICAoKmxsb2NwKSA9IGxhc3RfeXlsbG9jOworCisgIHVuZ2V0YyAoYywgaW5wdXQpOworfQorCitzdGF0aWMgaW50CityZWFkX3NpZ25lZF9pbnRlZ2VyIChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKQoreworICBpbnQgYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApOworICBpbnQgc2lnbiA9IDE7CisgIGludCBuID0gMDsKKworICAodm9pZCkgbHZhbHA7KHZvaWQpIGxsb2NwOworICBpZiAoYyA9PSAnLScpCisgICAgeworICAgICAgYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApOworICAgICAgc2lnbiA9IC0xOworICAgIH0KKworICB3aGlsZSAoaXNkaWdpdCAoYykpCisgICAgeworICAgICAgbiA9IDEwICogbiArIChjIC0gJzAnKTsKKyAgICAgIGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKTsKKyAgICB9CisKKyAgdW5nZXRfY2hhciAobHZhbHAsIGxsb2NwLCAgYyk7CisKKyAgcmV0dXJuIHNpZ24gKiBuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBMZXhpY2FsIGFuYWx5emVyIHJldHVybnMgYW4gaW50ZWdlciBvbiB0aGUgc3RhY2sgYW5kIHRoZSB0b2tlbiB8Cit8IE5VTSwgb3IgdGhlIEFTQ0lJIGNoYXJhY3RlciByZWFkIGlmIG5vdCBhIG51bWJlci4gIFNraXBzIGFsbCAgIHwKK3wgYmxhbmtzIGFuZCB0YWJzLCByZXR1cm5zIDAgZm9yIEVPRi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2ludCBjYWxjbGV4IChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKQoreworICBpbnQgYzsKKyAgLyogU2tpcCBjdXJyZW50IHRva2VuLCB0aGVuIHdoaXRlIHNwYWNlcy4gICovCisgIGRvCisgICAgeworICAgICAoKmxsb2NwKS5iZWdpbi5jb2x1bW4gPSAoKmxsb2NwKS5lbmQuY29sdW1uOworICAgICAgKCpsbG9jcCkuYmVnaW4ubGluZSAgID0gKCpsbG9jcCkuZW5kLmxpbmU7CisKKyAgICB9CisgIHdoaWxlICgoYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApKSA9PSAnICcgfHwgYyA9PSAnXHQnKTsKKworICAvKiBwcm9jZXNzIG51bWJlcnMgICAqLworICBpZiAoYyA9PSAnLicgfHwgaXNkaWdpdCAoYykpCisgICAgeworICAgICAgdW5nZXRfY2hhciAobHZhbHAsIGxsb2NwLCAgYyk7CisgICAgICAoKmx2YWxwKS5pdmFsID0gcmVhZF9zaWduZWRfaW50ZWdlciAobHZhbHAsIGxsb2NwKTsKKyAgICAgIHJldHVybiBOVU07CisgICAgfQorCisgIC8qIFJldHVybiBlbmQtb2YtZmlsZS4gICovCisgIGlmIChjID09IEVPRikKKyAgICByZXR1cm4gQ0FMQ19FT0Y7CisKKyAgLyogUmV0dXJuIHNpbmdsZSBjaGFycy4gKi8KKyAgcmV0dXJuIGM7Cit9CitfQVRFT0YKKworCitjYXQgPmNhbGMtbWFpbi5jYyA8PCdfQVRFT0YnCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCisKKyNpbmNsdWRlICJjYWxjLmhoIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjIHVuZGVmIGFsYXJtCisjIGRlZmluZSBhbGFybShzZWNvbmRzKSAvKiBlbXB0eSAqLworI2VuZGlmCisKKworLyogQSBDKysgY2FsY3BhcnNlIHRoYXQgc2ltdWxhdGVzIHRoZSBDIHNpZ25hdHVyZS4gICovCitpbnQKK2NhbGNwYXJzZSAoKQoreworICBjYWxjOjpwYXJzZXIgcGFyc2VyOworI2lmIENBTENERUJVRworICBwYXJzZXIuc2V0X2RlYnVnX2xldmVsICgxKTsKKyNlbmRpZgorICByZXR1cm4gcGFyc2VyLnBhcnNlICgpOworfQorCisKK3NlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOworaW50IGdsb2JhbF9jb3VudCA9IDA7CisKKy8qIEEgQyBtYWluIGZ1bmN0aW9uLiAgKi8KK2ludAorbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworICBzZW1hbnRpY192YWx1ZSByZXN1bHQgPSAwOworICBpbnQgY291bnQgPSAwOworICBpbnQgc3RhdHVzOworCisgIC8qIFRoaXMgdXNlZCB0byBiZSBhbGFybSAoMTApLCBidXQgdGhhdCBpc24ndCBlbm91Z2ggdGltZSBmb3IKKyAgICAgYSBKdWx5IDE5OTUgdmludGFnZSBERUMgQWxwaGFzdGF0aW9uIDIwMCA0LzEwMCBzeXN0ZW0sCisgICAgIGFjY29yZGluZyB0byBOZWxzb24gSC4gRi4gQmVlYmUuICAxMDAgc2Vjb25kcyBpcyBlbm91Z2guICAqLworICBhbGFybSAoMTAwKTsKKworICBpZiAoYXJnYyA9PSAyKQorICAgIGlucHV0ID0gZm9wZW4gKGFyZ3ZbMV0sICJyIik7CisgIGVsc2UKKyAgICBpbnB1dCA9IHN0ZGluOworCisgIGlmICghaW5wdXQpCisgICAgeworICAgICAgcGVycm9yIChhcmd2WzFdKTsKKyAgICAgIHJldHVybiAzOworICAgIH0KKworCisgIHN0YXR1cyA9IGNhbGNwYXJzZSAoKTsKKyAgaWYgKGZjbG9zZSAoaW5wdXQpKQorICAgIHBlcnJvciAoImZjbG9zZSIpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOworICByZXR1cm4gc3RhdHVzOworfQorX0FURU9GCisKKworCisKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmNjIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NzExIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuY2MgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzExOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmNjIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmNjIGNhbGMueSIgImNhbGMuYXQ6NzExIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuY2MgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NzExIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjcxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzExOiBiaXNvbiAtbyBjYWxjLmNjIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzExIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGNhbGMuY2MgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMTogXCRCSVNPTl9DWFhfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DWFhfV09SS1MiICJjYWxjLmF0OjcxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ1hYX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMTogXCRDWFggXCRDWFhGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuY2MgY2FsYy1sZXguY2MgY2FsYy1tYWluLmNjIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jYyBjYWxjLWxleC5jYyBjYWxjLW1haW4uY2MgJExJQlMiICJjYWxjLmF0OjcxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmNjIGNhbGMtbGV4LmNjIGNhbGMtbWFpbi5jYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMTogXCRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCBcIlwkLjoge1wkX31cXG5cIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCBcJC4gPT0gMSkgJiYgL15cXHMqXCQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciBcIm1haW50XCIuCisgICAgICAgICMgfHwgL1xcc1wkLworICAgICAgICApJyBjYWxjLmNjCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjcxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5jYworCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzExOiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuaGgKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NzExIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmhoCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgVGVzdCB0aGUgcHJpb3JpdGllcy4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMSArIDIgKiAzID0gNworMSArIDIgKiAtMyA9IC01CisKKy0xXjIgPSAtMQorKC0xKV4yID0gMQorCistLS0xID0gLTEKKworMSAtIDIgLSAzID0gLTQKKzEgLSAoMiAtIDMpID0gMgorCisyXjJeMyA9IDI1NgorKDJeMileMyA9IDY0CitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzExOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzExOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzExIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyMgU29tZSBzeW50YXggZXJyb3JzLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxIDIKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTE6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzExIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzExOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTEiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxLy8yCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzExOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzExOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzExIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzExIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworZXJyb3IKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTE6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzExIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzExIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMSA9IDIgPSAzCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzExOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzExOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzExIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuNzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzExIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworCisrMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisyLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKycKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTE6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIEV4ZXJjaXNlIGVycm9yIG1lc3NhZ2VzIHdpdGggRU9GOiB3b3JrIG9uIGFuIGVtcHR5IGZpbGUuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTE6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo3MTEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzExOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTEiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIEV4ZXJjaXNlIHRoZSBlcnJvciB0b2tlbjogd2l0aG91dCBpdCwgd2UgZGllIGF0IHRoZSBmaXJzdCBlcnJvciwKKyMgaGVuY2UgYmUgc3VyZSB0bworIworIyAtIGhhdmUgc2V2ZXJhbCBlcnJvcnMgd2hpY2ggZXhlcmNpc2UgZGlmZmVyZW50IHNoaWZ0L2Rpc2NhcmRpbmdzCisjICAgLSAoKTogbm90aGluZyB0byBwb3AsIG5vdGhpbmcgdG8gZGlzY2FyZAorIyAgIC0gKDEgKyAxICsgMSArKTogYSBsb3QgdG8gcG9wLCBub3RoaW5nIHRvIGRpc2NhcmQKKyMgICAtICgqICogKik6IG5vdGhpbmcgdG8gcG9wLCBhIGxvdCB0byBkaXNjYXJkCisjICAgLSAoMSArIDIgKiAqKTogc29tZSB0byBwb3AgYW5kIGRpc2NhcmQKKyMKKyMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCisjCisjIC0gY2hlY2sgdGhlIGxvb2thaGVhZCB0aGF0IHRyaWdnZXJzIGFuIGVycm9yIGlzIG5vdCBkaXNjYXJkZWQKKyMgICB3aGVuIHdlIGVudGVyIGVycm9yIHJlY292ZXJ5LiAgQmVsb3csIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUKKyMgICBmaXJzdCBlcnJvciBpcyAiKSIsIHdoaWNoIGlzIG5lZWRlZCB0byByZWNvdmVyIGZyb20gdGhlIGVycm9yIGFuZAorIyAgIHByb2R1Y2UgdGhlICIwIiB0aGF0IHRyaWdnZXJzIHRoZSAiMCAhPSAxIiBlcnJvci4KKyMKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCkgKyAoMSArIDEgKyAxICspICsgKCogKiAqKSArICgxICogMiAqICopID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK2NhbGM6IGVycm9yOiA0NDQ0ICE9IDEKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTE6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgVGhlIHNhbWUsIGJ1dCB0aGlzIHRpbWUgZXhlcmNpc2luZyBleHBsaWNpdGx5IHRyaWdnZXJlZCBzeW50YXggZXJyb3JzLgorIyBQT1NJWCBzYXlzIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKyghKSArICgxIDIpID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCitjYWxjOiBlcnJvcjogMjIyMiAhPSAxCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzExOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTEiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoLSAqKSArICgxIDIpID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjQ6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKK2NhbGM6IGVycm9yOiAyMjIyICE9IDEKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTE6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgQ2hlY2sgdGhhdCB5eWVycm9rIHdvcmtzIHByb3Blcmx5OiBzZWNvbmQgZXJyb3IgaXMgbm90IHJlcG9ydGVkLAorIyB0aGlyZCBhbmQgZm91cnRoIGFyZS4gIFBhcnNlIHN0YXR1cyBpcyBzdWNjZXNmdWxsLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoKiAqKSArICgqKSArICgqKQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTY6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTE6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzI0OAorI0FUX1NUQVJUXzI0OQorYXRfZm5fZ3JvdXBfYmFubmVyIDI0OSAnY2FsYy5hdDo3MTMnIFwKKyAgIkNhbGN1bGF0b3IgJWxhbmd1YWdlIFwiQysrXCIgJWdsci1wYXJzZXIgJWRlZmluZXMgJWxvY2F0aW9ucyAlZGVidWciICIiIDE0CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjQ5LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworCisKKworCisKKworCisKK2NhdCA+Y2FsYy55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKy8qIEluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3ItLWNhbGMgKi8KKyVsYW5ndWFnZSAiQysrIiAlZ2xyLXBhcnNlciAlZGVmaW5lcyAlbG9jYXRpb25zICVkZWJ1ZworJWRlZmluZSBnbG9iYWxfdG9rZW5zX2FuZF95eXN0eXBlCislY29kZSByZXF1aXJlcworeworCisgIC8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCisgIHR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOworfQorCisvKiBFeGVyY2lzZSAldW5pb24uICovCisldW5pb24KK3sKKyAgc2VtYW50aWNfdmFsdWUgaXZhbDsKK307CislcHJpbnRlciB7IHl5b3V0cHV0IDw8ICQkOyB9IDxpdmFsPjsKKworJWNvZGUgcHJvdmlkZXMKK3sKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIC8qIFRoZSBpbnB1dC4gICovCisgIGV4dGVybiBGSUxFICppbnB1dDsKKyAgZXh0ZXJuIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQ7CisgIGV4dGVybiBpbnQgZ2xvYmFsX2NvdW50OworfQorCislY29kZQoreworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2RlZmluZSBVU0UoVmFyKQorCitGSUxFICppbnB1dDsKK3N0YXRpYyBpbnQgcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpOworCisKK2ludCB5eWxleCAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKTsKK30KKworCisKKy8qIEJpc29uIERlY2xhcmF0aW9ucyAqLworJXRva2VuIENBTENfRU9GIDAgImVuZCBvZiBpbnB1dCIKKyV0b2tlbiA8aXZhbD4gTlVNICJudW1iZXIiCisldHlwZSAgPGl2YWw+IGV4cAorCislbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24gICAgICAgICAgICAqLworJWxlZnQgJy0nICcrJworJWxlZnQgJyonICcvJworJWxlZnQgTkVHICAgICAvKiBuZWdhdGlvbi0tdW5hcnkgbWludXMgKi8KKyVyaWdodCAnXicgICAgLyogZXhwb25lbnRpYXRpb24gICAgICAgICovCisKKy8qIEdyYW1tYXIgZm9sbG93cyAqLworJSUKK2lucHV0OgorICBsaW5lCit8IGlucHV0IGxpbmUgICAgICAgICB7ICB9Cis7CisKK2xpbmU6CisgICdcbicKK3wgZXhwICdcbicgICAgICAgICAgIHsgVVNFICgkMSk7IH0KKzsKKworZXhwOgorICBOVU0gICAgICAgICAgICAgICAgeyAkJCA9ICQxOyAgICAgICAgICAgICB9Cit8IGV4cCAnPScgZXhwCisgIHsKKyAgICBpZiAoJDEgIT0gJDMpCisgICAgICBmcHJpbnRmIChzdGRlcnIsICJjYWxjOiBlcnJvcjogJWQgIT0gJWRcbiIsICQxLCAkMyk7CisgICAgJCQgPSAkMTsKKyAgfQorfCBleHAgJysnIGV4cCAgICAgICAgeyAkJCA9ICQxICsgJDM7ICAgICAgICB9Cit8IGV4cCAnLScgZXhwICAgICAgICB7ICQkID0gJDEgLSAkMzsgICAgICAgIH0KK3wgZXhwICcqJyBleHAgICAgICAgIHsgJCQgPSAkMSAqICQzOyAgICAgICAgfQorfCBleHAgJy8nIGV4cCAgICAgICAgeyAkJCA9ICQxIC8gJDM7ICAgICAgICB9Cit8ICctJyBleHAgICVwcmVjIE5FRyB7ICQkID0gLSQyOyAgICAgICAgICAgIH0KK3wgZXhwICdeJyBleHAgICAgICAgIHsgJCQgPSBwb3dlciAoJDEsICQzKTsgfQorfCAnKCcgZXhwICcpJyAgICAgICAgeyAkJCA9ICQyOyAgICAgICAgICAgICB9Cit8ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgeXllcnJvazsgIH0KK3wgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQorfCAnLScgZXJyb3IgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9Cis7CislJQorCitzdGF0aWMgaW50Citwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKK3sKKyAgaW50IHJlcyA9IDE7CisgIGFzc2VydCAoMCA8PSBleHBvbmVudCk7CisgIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKKyAgICByZXMgKj0gYmFzZTsKKyAgcmV0dXJuIHJlczsKK30KKworCisvKiBBIEMrKyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLwordm9pZAoreXk6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGxvY2F0aW9uX3R5cGUmIGwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtKQoreworICAodm9pZCkgbDsKKyAgc3RkOjpjZXJyIDw8IGwgPDwgIjogIiA8PCBtIDw8IHN0ZDo6ZW5kbDsKK30KK19BVEVPRgorCisKKworY2F0ID5jYWxjLWxleC5jYyA8PCdfQVRFT0YnCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCisKKyNpbmNsdWRlICJjYWxjLmhoIgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworaW50IHl5bGV4ICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgeXk6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApOworc3RhdGljIGludCBnZXRfY2hhciAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKTsKK3N0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCB5eTo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCwgIGludCBjKTsKKworCitzdGF0aWMgeXk6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSBsYXN0X3l5bGxvYzsKKworc3RhdGljIGludAorZ2V0X2NoYXIgKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCB5eTo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCkKK3sKKyAgaW50IHJlcyA9IGdldGMgKGlucHV0KTsKKyAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKKworICBsYXN0X3l5bGxvYyA9ICgqbGxvY3ApOworICBpZiAocmVzID09ICdcbicpCisgICAgeworICAgICAgKCpsbG9jcCkuZW5kLmxpbmUrKzsKKyAgICAgICgqbGxvY3ApLmVuZC5jb2x1bW4gPSAxOworICAgIH0KKyAgZWxzZQorICAgICgqbGxvY3ApLmVuZC5jb2x1bW4rKzsKKworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZAordW5nZXRfY2hhciAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIHl5OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwLCAgaW50IGMpCit7CisgICh2b2lkKSBsdmFscDsodm9pZCkgbGxvY3A7CisKKyAgLyogV3Jvbmcgd2hlbiBDID09IGBcbicuICovCisgICgqbGxvY3ApID0gbGFzdF95eWxsb2M7CisKKyAgdW5nZXRjIChjLCBpbnB1dCk7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRfc2lnbmVkX2ludGVnZXIgKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCB5eTo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCkKK3sKKyAgaW50IGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKTsKKyAgaW50IHNpZ24gPSAxOworICBpbnQgbiA9IDA7CisKKyAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKKyAgaWYgKGMgPT0gJy0nKQorICAgIHsKKyAgICAgIGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKTsKKyAgICAgIHNpZ24gPSAtMTsKKyAgICB9CisKKyAgd2hpbGUgKGlzZGlnaXQgKGMpKQorICAgIHsKKyAgICAgIG4gPSAxMCAqIG4gKyAoYyAtICcwJyk7CisgICAgICBjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCk7CisgICAgfQorCisgIHVuZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCwgIGMpOworCisgIHJldHVybiBzaWduICogbjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgTGV4aWNhbCBhbmFseXplciByZXR1cm5zIGFuIGludGVnZXIgb24gdGhlIHN0YWNrIGFuZCB0aGUgdG9rZW4gfAorfCBOVU0sIG9yIHRoZSBBU0NJSSBjaGFyYWN0ZXIgcmVhZCBpZiBub3QgYSBudW1iZXIuICBTa2lwcyBhbGwgICB8Cit8IGJsYW5rcyBhbmQgdGFicywgcmV0dXJucyAwIGZvciBFT0YuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitpbnQgeXlsZXggKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCB5eTo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCkKK3sKKyAgaW50IGM7CisgIC8qIFNraXAgY3VycmVudCB0b2tlbiwgdGhlbiB3aGl0ZSBzcGFjZXMuICAqLworICBkbworICAgIHsKKyAgICAgKCpsbG9jcCkuYmVnaW4uY29sdW1uID0gKCpsbG9jcCkuZW5kLmNvbHVtbjsKKyAgICAgICgqbGxvY3ApLmJlZ2luLmxpbmUgICA9ICgqbGxvY3ApLmVuZC5saW5lOworCisgICAgfQorICB3aGlsZSAoKGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKSkgPT0gJyAnIHx8IGMgPT0gJ1x0Jyk7CisKKyAgLyogcHJvY2VzcyBudW1iZXJzICAgKi8KKyAgaWYgKGMgPT0gJy4nIHx8IGlzZGlnaXQgKGMpKQorICAgIHsKKyAgICAgIHVuZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCwgIGMpOworICAgICAgKCpsdmFscCkuaXZhbCA9IHJlYWRfc2lnbmVkX2ludGVnZXIgKGx2YWxwLCBsbG9jcCk7CisgICAgICByZXR1cm4gTlVNOworICAgIH0KKworICAvKiBSZXR1cm4gZW5kLW9mLWZpbGUuICAqLworICBpZiAoYyA9PSBFT0YpCisgICAgcmV0dXJuIENBTENfRU9GOworCisgIC8qIFJldHVybiBzaW5nbGUgY2hhcnMuICovCisgIHJldHVybiBjOworfQorX0FURU9GCisKKworY2F0ID5jYWxjLW1haW4uY2MgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworCisjaW5jbHVkZSAiY2FsYy5oaCIKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxzZQorIyB1bmRlZiBhbGFybQorIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KKyNlbmRpZgorCisKKy8qIEEgQysrIHl5cGFyc2UgdGhhdCBzaW11bGF0ZXMgdGhlIEMgc2lnbmF0dXJlLiAgKi8KK2ludAoreXlwYXJzZSAoKQoreworICB5eTo6cGFyc2VyIHBhcnNlcjsKKyNpZiBZWURFQlVHCisgIHBhcnNlci5zZXRfZGVidWdfbGV2ZWwgKDEpOworI2VuZGlmCisgIHJldHVybiBwYXJzZXIucGFyc2UgKCk7Cit9CisKKworc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7CitpbnQgZ2xvYmFsX2NvdW50ID0gMDsKKworLyogQSBDIG1haW4gZnVuY3Rpb24uICAqLworaW50CittYWluIChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisgIHNlbWFudGljX3ZhbHVlIHJlc3VsdCA9IDA7CisgIGludCBjb3VudCA9IDA7CisgIGludCBzdGF0dXM7CisKKyAgLyogVGhpcyB1c2VkIHRvIGJlIGFsYXJtICgxMCksIGJ1dCB0aGF0IGlzbid0IGVub3VnaCB0aW1lIGZvcgorICAgICBhIEp1bHkgMTk5NSB2aW50YWdlIERFQyBBbHBoYXN0YXRpb24gMjAwIDQvMTAwIHN5c3RlbSwKKyAgICAgYWNjb3JkaW5nIHRvIE5lbHNvbiBILiBGLiBCZWViZS4gIDEwMCBzZWNvbmRzIGlzIGVub3VnaC4gICovCisgIGFsYXJtICgxMDApOworCisgIGlmIChhcmdjID09IDIpCisgICAgaW5wdXQgPSBmb3BlbiAoYXJndlsxXSwgInIiKTsKKyAgZWxzZQorICAgIGlucHV0ID0gc3RkaW47CisKKyAgaWYgKCFpbnB1dCkKKyAgICB7CisgICAgICBwZXJyb3IgKGFyZ3ZbMV0pOworICAgICAgcmV0dXJuIDM7CisgICAgfQorCisKKyAgc3RhdHVzID0geXlwYXJzZSAoKTsKKyAgaWYgKGZjbG9zZSAoaW5wdXQpKQorICAgIHBlcnJvciAoImZjbG9zZSIpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOworICByZXR1cm4gc3RhdHVzOworfQorX0FURU9GCisKKworCisKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmNjIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NzEzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuY2MgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmNjIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmNjIGNhbGMueSIgImNhbGMuYXQ6NzEzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuY2MgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NzEzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjcxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEzOiBiaXNvbiAtbyBjYWxjLmNjIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzEzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGNhbGMuY2MgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMzogXCRCSVNPTl9DWFhfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DWFhfV09SS1MiICJjYWxjLmF0OjcxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ1hYX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMzogXCRDWFggXCRDWFhGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuY2MgY2FsYy1sZXguY2MgY2FsYy1tYWluLmNjIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jYyBjYWxjLWxleC5jYyBjYWxjLW1haW4uY2MgJExJQlMiICJjYWxjLmF0OjcxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmNjIGNhbGMtbGV4LmNjIGNhbGMtbWFpbi5jYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMzogXCRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCBcIlwkLjoge1wkX31cXG5cIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCBcJC4gPT0gMSkgJiYgL15cXHMqXCQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciBcIm1haW50XCIuCisgICAgICAgICMgfHwgL1xcc1wkLworICAgICAgICApJyBjYWxjLmNjCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjcxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5jYworCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEzOiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuaGgKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NzEzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmhoCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgVGVzdCB0aGUgcHJpb3JpdGllcy4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMSArIDIgKiAzID0gNworMSArIDIgKiAtMyA9IC01CisKKy0xXjIgPSAtMQorKC0xKV4yID0gMQorCistLS0xID0gLTEKKworMSAtIDIgLSAzID0gLTQKKzEgLSAoMiAtIDMpID0gMgorCisyXjJeMyA9IDI1NgorKDJeMileMyA9IDY0CitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEzOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzEzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyMgU29tZSBzeW50YXggZXJyb3JzLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxIDIKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTM6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzEzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEzOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTMiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxLy8yCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEzOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzEzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzEzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworZXJyb3IKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTM6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzEzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzEzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMSA9IDIgPSAzCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEzOiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzEzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuNzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMzogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzEzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworCisrMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMzogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisyLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKycKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTM6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIEV4ZXJjaXNlIGVycm9yIG1lc3NhZ2VzIHdpdGggRU9GOiB3b3JrIG9uIGFuIGVtcHR5IGZpbGUuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTM6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo3MTMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEzOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTMiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIEV4ZXJjaXNlIHRoZSBlcnJvciB0b2tlbjogd2l0aG91dCBpdCwgd2UgZGllIGF0IHRoZSBmaXJzdCBlcnJvciwKKyMgaGVuY2UgYmUgc3VyZSB0bworIworIyAtIGhhdmUgc2V2ZXJhbCBlcnJvcnMgd2hpY2ggZXhlcmNpc2UgZGlmZmVyZW50IHNoaWZ0L2Rpc2NhcmRpbmdzCisjICAgLSAoKTogbm90aGluZyB0byBwb3AsIG5vdGhpbmcgdG8gZGlzY2FyZAorIyAgIC0gKDEgKyAxICsgMSArKTogYSBsb3QgdG8gcG9wLCBub3RoaW5nIHRvIGRpc2NhcmQKKyMgICAtICgqICogKik6IG5vdGhpbmcgdG8gcG9wLCBhIGxvdCB0byBkaXNjYXJkCisjICAgLSAoMSArIDIgKiAqKTogc29tZSB0byBwb3AgYW5kIGRpc2NhcmQKKyMKKyMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCisjCisjIC0gY2hlY2sgdGhlIGxvb2thaGVhZCB0aGF0IHRyaWdnZXJzIGFuIGVycm9yIGlzIG5vdCBkaXNjYXJkZWQKKyMgICB3aGVuIHdlIGVudGVyIGVycm9yIHJlY292ZXJ5LiAgQmVsb3csIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUKKyMgICBmaXJzdCBlcnJvciBpcyAiKSIsIHdoaWNoIGlzIG5lZWRlZCB0byByZWNvdmVyIGZyb20gdGhlIGVycm9yIGFuZAorIyAgIHByb2R1Y2UgdGhlICIwIiB0aGF0IHRyaWdnZXJzIHRoZSAiMCAhPSAxIiBlcnJvci4KKyMKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCkgKyAoMSArIDEgKyAxICspICsgKCogKiAqKSArICgxICogMiAqICopID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMzogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK2NhbGM6IGVycm9yOiA0NDQ0ICE9IDEKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTM6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgVGhlIHNhbWUsIGJ1dCB0aGlzIHRpbWUgZXhlcmNpc2luZyBleHBsaWNpdGx5IHRyaWdnZXJlZCBzeW50YXggZXJyb3JzLgorIyBQT1NJWCBzYXlzIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKyghKSArICgxIDIpID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMzogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCitjYWxjOiBlcnJvcjogMjIyMiAhPSAxCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEzOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTMiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoLSAqKSArICgxIDIpID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMzogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjQ6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKK2NhbGM6IGVycm9yOiAyMjIyICE9IDEKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTM6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgQ2hlY2sgdGhhdCB5eWVycm9rIHdvcmtzIHByb3Blcmx5OiBzZWNvbmQgZXJyb3IgaXMgbm90IHJlcG9ydGVkLAorIyB0aGlyZCBhbmQgZm91cnRoIGFyZS4gIFBhcnNlIHN0YXR1cyBpcyBzdWNjZXNmdWxsLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoKiAqKSArICgqKSArICgqKQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMzogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxMzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTY6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTM6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzEzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzI0OQorI0FUX1NUQVJUXzI1MAorYXRfZm5fZ3JvdXBfYmFubmVyIDI1MCAnY2FsYy5hdDo3MTQnIFwKKyAgIkNhbGN1bGF0b3IgJWxhbmd1YWdlIFwiQysrXCIgJWdsci1wYXJzZXIgJWRlZmluZXMgJWxvY2F0aW9ucyAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJW5hbWUtcHJlZml4IFwiY2FsY1wiICV2ZXJib3NlICV5YWNjIiAiIiAxNAorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI1MC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworCisKKworCisKKworCitjYXQgPmNhbGMueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisvKiBJbmZpeCBub3RhdGlvbiBjYWxjdWxhdG9yLS1jYWxjICovCislbGFuZ3VhZ2UgIkMrKyIgJWdsci1wYXJzZXIgJWRlZmluZXMgJWxvY2F0aW9ucyAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJW5hbWUtcHJlZml4ICJjYWxjIiAldmVyYm9zZSAleWFjYworJWRlZmluZSBnbG9iYWxfdG9rZW5zX2FuZF95eXN0eXBlCislY29kZSByZXF1aXJlcworeworCisgIC8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCisgIHR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOworfQorCisvKiBFeGVyY2lzZSAldW5pb24uICovCisldW5pb24KK3sKKyAgc2VtYW50aWNfdmFsdWUgaXZhbDsKK307CislcHJpbnRlciB7IHl5b3V0cHV0IDw8ICQkOyB9IDxpdmFsPjsKKworJWNvZGUgcHJvdmlkZXMKK3sKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIC8qIFRoZSBpbnB1dC4gICovCisgIGV4dGVybiBGSUxFICppbnB1dDsKKyAgZXh0ZXJuIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQ7CisgIGV4dGVybiBpbnQgZ2xvYmFsX2NvdW50OworfQorCislY29kZQoreworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2RlZmluZSBVU0UoVmFyKQorCitGSUxFICppbnB1dDsKK3N0YXRpYyBpbnQgcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpOworCisKK2ludCBjYWxjbGV4IChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKTsKK30KKworCisKKy8qIEJpc29uIERlY2xhcmF0aW9ucyAqLworJXRva2VuIENBTENfRU9GIDAgImVuZCBvZiBpbnB1dCIKKyV0b2tlbiA8aXZhbD4gTlVNICJudW1iZXIiCisldHlwZSAgPGl2YWw+IGV4cAorCislbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24gICAgICAgICAgICAqLworJWxlZnQgJy0nICcrJworJWxlZnQgJyonICcvJworJWxlZnQgTkVHICAgICAvKiBuZWdhdGlvbi0tdW5hcnkgbWludXMgKi8KKyVyaWdodCAnXicgICAgLyogZXhwb25lbnRpYXRpb24gICAgICAgICovCisKKy8qIEdyYW1tYXIgZm9sbG93cyAqLworJSUKK2lucHV0OgorICBsaW5lCit8IGlucHV0IGxpbmUgICAgICAgICB7ICB9Cis7CisKK2xpbmU6CisgICdcbicKK3wgZXhwICdcbicgICAgICAgICAgIHsgVVNFICgkMSk7IH0KKzsKKworZXhwOgorICBOVU0gICAgICAgICAgICAgICAgeyAkJCA9ICQxOyAgICAgICAgICAgICB9Cit8IGV4cCAnPScgZXhwCisgIHsKKyAgICBpZiAoJDEgIT0gJDMpCisgICAgICBmcHJpbnRmIChzdGRlcnIsICJjYWxjOiBlcnJvcjogJWQgIT0gJWRcbiIsICQxLCAkMyk7CisgICAgJCQgPSAkMTsKKyAgfQorfCBleHAgJysnIGV4cCAgICAgICAgeyAkJCA9ICQxICsgJDM7ICAgICAgICB9Cit8IGV4cCAnLScgZXhwICAgICAgICB7ICQkID0gJDEgLSAkMzsgICAgICAgIH0KK3wgZXhwICcqJyBleHAgICAgICAgIHsgJCQgPSAkMSAqICQzOyAgICAgICAgfQorfCBleHAgJy8nIGV4cCAgICAgICAgeyAkJCA9ICQxIC8gJDM7ICAgICAgICB9Cit8ICctJyBleHAgICVwcmVjIE5FRyB7ICQkID0gLSQyOyAgICAgICAgICAgIH0KK3wgZXhwICdeJyBleHAgICAgICAgIHsgJCQgPSBwb3dlciAoJDEsICQzKTsgfQorfCAnKCcgZXhwICcpJyAgICAgICAgeyAkJCA9ICQyOyAgICAgICAgICAgICB9Cit8ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgeXllcnJvazsgIH0KK3wgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQorfCAnLScgZXJyb3IgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9Cis7CislJQorCitzdGF0aWMgaW50Citwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKK3sKKyAgaW50IHJlcyA9IDE7CisgIGFzc2VydCAoMCA8PSBleHBvbmVudCk7CisgIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKKyAgICByZXMgKj0gYmFzZTsKKyAgcmV0dXJuIHJlczsKK30KKworCisvKiBBIEMrKyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLwordm9pZAorY2FsYzo6cGFyc2VyOjplcnJvciAoY29uc3QgbG9jYXRpb25fdHlwZSYgbCwgY29uc3Qgc3RkOjpzdHJpbmcmIG0pCit7CisgICh2b2lkKSBsOworICBzdGQ6OmNlcnIgPDwgbCA8PCAiOiAiIDw8IG0gPDwgc3RkOjplbmRsOworfQorX0FURU9GCisKKworCitjYXQgPmNhbGMtbGV4LmNjIDw8J19BVEVPRicKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKKworI2luY2x1ZGUgImNhbGMuaGgiCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCitpbnQgY2FsY2xleCAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCk7CitzdGF0aWMgaW50IGdldF9jaGFyIChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKTsKK3N0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3AsICBpbnQgYyk7CisKKworc3RhdGljIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSBsYXN0X3l5bGxvYzsKKworc3RhdGljIGludAorZ2V0X2NoYXIgKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApCit7CisgIGludCByZXMgPSBnZXRjIChpbnB1dCk7CisgICh2b2lkKSBsdmFscDsodm9pZCkgbGxvY3A7CisKKyAgbGFzdF95eWxsb2MgPSAoKmxsb2NwKTsKKyAgaWYgKHJlcyA9PSAnXG4nKQorICAgIHsKKyAgICAgICgqbGxvY3ApLmVuZC5saW5lKys7CisgICAgICAoKmxsb2NwKS5lbmQuY29sdW1uID0gMTsKKyAgICB9CisgIGVsc2UKKyAgICAoKmxsb2NwKS5lbmQuY29sdW1uKys7CisKKyAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQKK3VuZ2V0X2NoYXIgKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3AsICBpbnQgYykKK3sKKyAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKKworICAvKiBXcm9uZyB3aGVuIEMgPT0gYFxuJy4gKi8KKyAgKCpsbG9jcCkgPSBsYXN0X3l5bGxvYzsKKworICB1bmdldGMgKGMsIGlucHV0KTsKK30KKworc3RhdGljIGludAorcmVhZF9zaWduZWRfaW50ZWdlciAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCkKK3sKKyAgaW50IGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKTsKKyAgaW50IHNpZ24gPSAxOworICBpbnQgbiA9IDA7CisKKyAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKKyAgaWYgKGMgPT0gJy0nKQorICAgIHsKKyAgICAgIGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKTsKKyAgICAgIHNpZ24gPSAtMTsKKyAgICB9CisKKyAgd2hpbGUgKGlzZGlnaXQgKGMpKQorICAgIHsKKyAgICAgIG4gPSAxMCAqIG4gKyAoYyAtICcwJyk7CisgICAgICBjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCk7CisgICAgfQorCisgIHVuZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCwgIGMpOworCisgIHJldHVybiBzaWduICogbjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgTGV4aWNhbCBhbmFseXplciByZXR1cm5zIGFuIGludGVnZXIgb24gdGhlIHN0YWNrIGFuZCB0aGUgdG9rZW4gfAorfCBOVU0sIG9yIHRoZSBBU0NJSSBjaGFyYWN0ZXIgcmVhZCBpZiBub3QgYSBudW1iZXIuICBTa2lwcyBhbGwgICB8Cit8IGJsYW5rcyBhbmQgdGFicywgcmV0dXJucyAwIGZvciBFT0YuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitpbnQgY2FsY2xleCAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCkKK3sKKyAgaW50IGM7CisgIC8qIFNraXAgY3VycmVudCB0b2tlbiwgdGhlbiB3aGl0ZSBzcGFjZXMuICAqLworICBkbworICAgIHsKKyAgICAgKCpsbG9jcCkuYmVnaW4uY29sdW1uID0gKCpsbG9jcCkuZW5kLmNvbHVtbjsKKyAgICAgICgqbGxvY3ApLmJlZ2luLmxpbmUgICA9ICgqbGxvY3ApLmVuZC5saW5lOworCisgICAgfQorICB3aGlsZSAoKGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKSkgPT0gJyAnIHx8IGMgPT0gJ1x0Jyk7CisKKyAgLyogcHJvY2VzcyBudW1iZXJzICAgKi8KKyAgaWYgKGMgPT0gJy4nIHx8IGlzZGlnaXQgKGMpKQorICAgIHsKKyAgICAgIHVuZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCwgIGMpOworICAgICAgKCpsdmFscCkuaXZhbCA9IHJlYWRfc2lnbmVkX2ludGVnZXIgKGx2YWxwLCBsbG9jcCk7CisgICAgICByZXR1cm4gTlVNOworICAgIH0KKworICAvKiBSZXR1cm4gZW5kLW9mLWZpbGUuICAqLworICBpZiAoYyA9PSBFT0YpCisgICAgcmV0dXJuIENBTENfRU9GOworCisgIC8qIFJldHVybiBzaW5nbGUgY2hhcnMuICovCisgIHJldHVybiBjOworfQorX0FURU9GCisKKworY2F0ID5jYWxjLW1haW4uY2MgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworCisjaW5jbHVkZSAiY2FsYy5oaCIKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxzZQorIyB1bmRlZiBhbGFybQorIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KKyNlbmRpZgorCisKKy8qIEEgQysrIGNhbGNwYXJzZSB0aGF0IHNpbXVsYXRlcyB0aGUgQyBzaWduYXR1cmUuICAqLworaW50CitjYWxjcGFyc2UgKCkKK3sKKyAgY2FsYzo6cGFyc2VyIHBhcnNlcjsKKyNpZiBZWURFQlVHCisgIHBhcnNlci5zZXRfZGVidWdfbGV2ZWwgKDEpOworI2VuZGlmCisgIHJldHVybiBwYXJzZXIucGFyc2UgKCk7Cit9CisKKworc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7CitpbnQgZ2xvYmFsX2NvdW50ID0gMDsKKworLyogQSBDIG1haW4gZnVuY3Rpb24uICAqLworaW50CittYWluIChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisgIHNlbWFudGljX3ZhbHVlIHJlc3VsdCA9IDA7CisgIGludCBjb3VudCA9IDA7CisgIGludCBzdGF0dXM7CisKKyAgLyogVGhpcyB1c2VkIHRvIGJlIGFsYXJtICgxMCksIGJ1dCB0aGF0IGlzbid0IGVub3VnaCB0aW1lIGZvcgorICAgICBhIEp1bHkgMTk5NSB2aW50YWdlIERFQyBBbHBoYXN0YXRpb24gMjAwIDQvMTAwIHN5c3RlbSwKKyAgICAgYWNjb3JkaW5nIHRvIE5lbHNvbiBILiBGLiBCZWViZS4gIDEwMCBzZWNvbmRzIGlzIGVub3VnaC4gICovCisgIGFsYXJtICgxMDApOworCisgIGlmIChhcmdjID09IDIpCisgICAgaW5wdXQgPSBmb3BlbiAoYXJndlsxXSwgInIiKTsKKyAgZWxzZQorICAgIGlucHV0ID0gc3RkaW47CisKKyAgaWYgKCFpbnB1dCkKKyAgICB7CisgICAgICBwZXJyb3IgKGFyZ3ZbMV0pOworICAgICAgcmV0dXJuIDM7CisgICAgfQorCisKKyAgc3RhdHVzID0gY2FsY3BhcnNlICgpOworICBpZiAoZmNsb3NlIChpbnB1dCkpCisgICAgcGVycm9yICgiZmNsb3NlIik7CisgIGFzc2VydCAoZ2xvYmFsX3Jlc3VsdCA9PSByZXN1bHQpOworICBhc3NlcnQgKGdsb2JhbF9jb3VudCA9PSBjb3VudCk7CisgIHJldHVybiBzdGF0dXM7Cit9CitfQVRFT0YKKworCisKKworCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuY2MgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo3MTQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuY2MgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuY2MgY2FsYy55IiAiY2FsYy5hdDo3MTQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo3MTQiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NzE0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTQ6IGJpc29uIC1vIGNhbGMuY2MgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTQiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gY2FsYy5jYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0OiBcJEJJU09OX0NYWF9XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NYWF9XT1JLUyIgImNhbGMuYXQ6NzE0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DWFhfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0OiBcJENYWCBcJENYWEZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jYyBjYWxjLWxleC5jYyBjYWxjLW1haW4uY2MgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmNjIGNhbGMtbGV4LmNjIGNhbGMtbWFpbi5jYyAkTElCUyIgImNhbGMuYXQ6NzE0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuY2MgY2FsYy1sZXguY2MgY2FsYy1tYWluLmNjICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0OiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuY2MKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NzE0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmNjCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTQ6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5oaAorIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo3MTQiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuaGgKKworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBUZXN0IHRoZSBwcmlvcml0aWVzLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxICsgMiAqIDMgPSA3CisxICsgMiAqIC0zID0gLTUKKworLTFeMiA9IC0xCisoLTEpXjIgPSAxCisKKy0tLTEgPSAtMQorCisxIC0gMiAtIDMgPSAtNAorMSAtICgyIC0gMykgPSAyCisKKzJeMl4zID0gMjU2CisoMl4yKV4zID0gNjQKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTQ6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzE0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTQ6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworIyBTb21lIHN5bnRheCBlcnJvcnMuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEgMgorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTQiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTQ6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEvLzIKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTQ6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzE0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTQ6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJy8nLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTQiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCitlcnJvcgorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNDogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTQiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTQiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxID0gMiA9IDMKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTQ6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzE0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTQ6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS43OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTQiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisKKysxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcxNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE0IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzIuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgRXhlcmNpc2UgZXJyb3IgbWVzc2FnZXMgd2l0aCBFT0Y6IHdvcmsgb24gYW4gZW1wdHkgZmlsZS4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNDogIFwkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiICJjYWxjLmF0OjcxNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTQ6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgRXhlcmNpc2UgdGhlIGVycm9yIHRva2VuOiB3aXRob3V0IGl0LCB3ZSBkaWUgYXQgdGhlIGZpcnN0IGVycm9yLAorIyBoZW5jZSBiZSBzdXJlIHRvCisjCisjIC0gaGF2ZSBzZXZlcmFsIGVycm9ycyB3aGljaCBleGVyY2lzZSBkaWZmZXJlbnQgc2hpZnQvZGlzY2FyZGluZ3MKKyMgICAtICgpOiBub3RoaW5nIHRvIHBvcCwgbm90aGluZyB0byBkaXNjYXJkCisjICAgLSAoMSArIDEgKyAxICspOiBhIGxvdCB0byBwb3AsIG5vdGhpbmcgdG8gZGlzY2FyZAorIyAgIC0gKCogKiAqKTogbm90aGluZyB0byBwb3AsIGEgbG90IHRvIGRpc2NhcmQKKyMgICAtICgxICsgMiAqICopOiBzb21lIHRvIHBvcCBhbmQgZGlzY2FyZAorIworIyAtIHRlc3QgdGhlIGFjdGlvbiBhc3NvY2lhdGVkIHRvIGBlcnJvcicKKyMKKyMgLSBjaGVjayB0aGUgbG9va2FoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAorIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZQorIyAgIGZpcnN0IGVycm9yIGlzICIpIiwgd2hpY2ggaXMgbmVlZGVkIHRvIHJlY292ZXIgZnJvbSB0aGUgZXJyb3IgYW5kCisjICAgcHJvZHVjZSB0aGUgIjAiIHRoYXQgdHJpZ2dlcnMgdGhlICIwICE9IDEiIGVycm9yLgorIworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoKSArICgxICsgMSArIDEgKykgKyAoKiAqICopICsgKDEgKiAyICogKikgPSAxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcxNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE0IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xODogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4yMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS40MTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworY2FsYzogZXJyb3I6IDQ0NDQgIT0gMQorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBUaGUgc2FtZSwgYnV0IHRoaXMgdGltZSBleGVyY2lzaW5nIGV4cGxpY2l0bHkgdHJpZ2dlcmVkIHN5bnRheCBlcnJvcnMuCisjIFBPU0lYIHNheXMgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCEpICsgKDEgMikgPSAxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcxNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE0IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKK2NhbGM6IGVycm9yOiAyMjIyICE9IDEKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTQ6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygtICopICsgKDEgMikgPSAxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcxNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE0IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorY2FsYzogZXJyb3I6IDIyMjIgIT0gMQorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBDaGVjayB0aGF0IHl5ZXJyb2sgd29ya3MgcHJvcGVybHk6IHNlY29uZCBlcnJvciBpcyBub3QgcmVwb3J0ZWQsCisjIHRoaXJkIGFuZCBmb3VydGggYXJlLiAgUGFyc2Ugc3RhdHVzIGlzIHN1Y2Nlc2Z1bGwuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygqICopICsgKCopICsgKCopCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcxNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE0OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE0IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjUwCisjQVRfU1RBUlRfMjUxCithdF9mbl9ncm91cF9iYW5uZXIgMjUxICdjYWxjLmF0OjcxNicgXAorICAiQ2FsY3VsYXRvciAlbGFuZ3VhZ2UgXCJDKytcIiAlZ2xyLXBhcnNlciAlZGVmaW5lcyAlbG9jYXRpb25zICVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJW5hbWUtcHJlZml4IFwiY2FsY1wiICV2ZXJib3NlICV5YWNjIiAiIiAxNAorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI1MS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworCisKKworCisKKworCitjYXQgPmNhbGMueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisvKiBJbmZpeCBub3RhdGlvbiBjYWxjdWxhdG9yLS1jYWxjICovCislbGFuZ3VhZ2UgIkMrKyIgJWdsci1wYXJzZXIgJWRlZmluZXMgJWxvY2F0aW9ucyAlcHVyZS1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVuYW1lLXByZWZpeCAiY2FsYyIgJXZlcmJvc2UgJXlhY2MKKyVkZWZpbmUgZ2xvYmFsX3Rva2Vuc19hbmRfeXlzdHlwZQorJWNvZGUgcmVxdWlyZXMKK3sKKworICAvKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLworICB0eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKK30KKworLyogRXhlcmNpc2UgJXVuaW9uLiAqLworJXVuaW9uCit7CisgIHNlbWFudGljX3ZhbHVlIGl2YWw7Cit9OworJXByaW50ZXIgeyB5eW91dHB1dCA8PCAkJDsgfSA8aXZhbD47CisKKyVjb2RlIHByb3ZpZGVzCit7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICAvKiBUaGUgaW5wdXQuICAqLworICBleHRlcm4gRklMRSAqaW5wdXQ7CisgIGV4dGVybiBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0OworICBleHRlcm4gaW50IGdsb2JhbF9jb3VudDsKK30KKworJWNvZGUKK3sKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNkZWZpbmUgVVNFKFZhcikKKworRklMRSAqaW5wdXQ7CitzdGF0aWMgaW50IHBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KTsKKworCitpbnQgY2FsY2xleCAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCk7Cit9CisKKworCisvKiBCaXNvbiBEZWNsYXJhdGlvbnMgKi8KKyV0b2tlbiBDQUxDX0VPRiAwICJlbmQgb2YgaW5wdXQiCisldG9rZW4gPGl2YWw+IE5VTSAibnVtYmVyIgorJXR5cGUgIDxpdmFsPiBleHAKKworJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uICAgICAgICAgICAgKi8KKyVsZWZ0ICctJyAnKycKKyVsZWZ0ICcqJyAnLycKKyVsZWZ0IE5FRyAgICAgLyogbmVnYXRpb24tLXVuYXJ5IG1pbnVzICovCislcmlnaHQgJ14nICAgIC8qIGV4cG9uZW50aWF0aW9uICAgICAgICAqLworCisvKiBHcmFtbWFyIGZvbGxvd3MgKi8KKyUlCitpbnB1dDoKKyAgbGluZQorfCBpbnB1dCBsaW5lICAgICAgICAgeyAgfQorOworCitsaW5lOgorICAnXG4nCit8IGV4cCAnXG4nICAgICAgICAgICB7IFVTRSAoJDEpOyB9Cis7CisKK2V4cDoKKyAgTlVNICAgICAgICAgICAgICAgIHsgJCQgPSAkMTsgICAgICAgICAgICAgfQorfCBleHAgJz0nIGV4cAorICB7CisgICAgaWYgKCQxICE9ICQzKQorICAgICAgZnByaW50ZiAoc3RkZXJyLCAiY2FsYzogZXJyb3I6ICVkICE9ICVkXG4iLCAkMSwgJDMpOworICAgICQkID0gJDE7CisgIH0KK3wgZXhwICcrJyBleHAgICAgICAgIHsgJCQgPSAkMSArICQzOyAgICAgICAgfQorfCBleHAgJy0nIGV4cCAgICAgICAgeyAkJCA9ICQxIC0gJDM7ICAgICAgICB9Cit8IGV4cCAnKicgZXhwICAgICAgICB7ICQkID0gJDEgKiAkMzsgICAgICAgIH0KK3wgZXhwICcvJyBleHAgICAgICAgIHsgJCQgPSAkMSAvICQzOyAgICAgICAgfQorfCAnLScgZXhwICAlcHJlYyBORUcgeyAkJCA9IC0kMjsgICAgICAgICAgICB9Cit8IGV4cCAnXicgZXhwICAgICAgICB7ICQkID0gcG93ZXIgKCQxLCAkMyk7IH0KK3wgJygnIGV4cCAnKScgICAgICAgIHsgJCQgPSAkMjsgICAgICAgICAgICAgfQorfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7IHl5ZXJyb2s7ICB9Cit8ICchJyAgICAgICAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KK3wgJy0nIGVycm9yICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQorOworJSUKKworc3RhdGljIGludAorcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpCit7CisgIGludCByZXMgPSAxOworICBhc3NlcnQgKDAgPD0gZXhwb25lbnQpOworICBmb3IgKC8qIE5pZW50ZSAqLzsgZXhwb25lbnQ7IC0tZXhwb25lbnQpCisgICAgcmVzICo9IGJhc2U7CisgIHJldHVybiByZXM7Cit9CisKKworLyogQSBDKysgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3ZvaWQKK2NhbGM6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGxvY2F0aW9uX3R5cGUmIGwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtKQoreworICAodm9pZCkgbDsKKyAgc3RkOjpjZXJyIDw8IGwgPDwgIjogIiA8PCBtIDw8IHN0ZDo6ZW5kbDsKK30KK19BVEVPRgorCisKKworY2F0ID5jYWxjLWxleC5jYyA8PCdfQVRFT0YnCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCisKKyNpbmNsdWRlICJjYWxjLmhoIgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworaW50IGNhbGNsZXggKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApOworc3RhdGljIGludCBnZXRfY2hhciAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCk7CitzdGF0aWMgdm9pZCB1bmdldF9jaGFyIChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwLCAgaW50IGMpOworCisKK3N0YXRpYyBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgbGFzdF95eWxsb2M7CisKK3N0YXRpYyBpbnQKK2dldF9jaGFyIChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKQoreworICBpbnQgcmVzID0gZ2V0YyAoaW5wdXQpOworICAodm9pZCkgbHZhbHA7KHZvaWQpIGxsb2NwOworCisgIGxhc3RfeXlsbG9jID0gKCpsbG9jcCk7CisgIGlmIChyZXMgPT0gJ1xuJykKKyAgICB7CisgICAgICAoKmxsb2NwKS5lbmQubGluZSsrOworICAgICAgKCpsbG9jcCkuZW5kLmNvbHVtbiA9IDE7CisgICAgfQorICBlbHNlCisgICAgKCpsbG9jcCkuZW5kLmNvbHVtbisrOworCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkCit1bmdldF9jaGFyIChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwLCAgaW50IGMpCit7CisgICh2b2lkKSBsdmFscDsodm9pZCkgbGxvY3A7CisKKyAgLyogV3Jvbmcgd2hlbiBDID09IGBcbicuICovCisgICgqbGxvY3ApID0gbGFzdF95eWxsb2M7CisKKyAgdW5nZXRjIChjLCBpbnB1dCk7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRfc2lnbmVkX2ludGVnZXIgKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApCit7CisgIGludCBjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCk7CisgIGludCBzaWduID0gMTsKKyAgaW50IG4gPSAwOworCisgICh2b2lkKSBsdmFscDsodm9pZCkgbGxvY3A7CisgIGlmIChjID09ICctJykKKyAgICB7CisgICAgICBjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCk7CisgICAgICBzaWduID0gLTE7CisgICAgfQorCisgIHdoaWxlIChpc2RpZ2l0IChjKSkKKyAgICB7CisgICAgICBuID0gMTAgKiBuICsgKGMgLSAnMCcpOworICAgICAgYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApOworICAgIH0KKworICB1bmdldF9jaGFyIChsdmFscCwgbGxvY3AsICBjKTsKKworICByZXR1cm4gc2lnbiAqIG47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IExleGljYWwgYW5hbHl6ZXIgcmV0dXJucyBhbiBpbnRlZ2VyIG9uIHRoZSBzdGFjayBhbmQgdGhlIHRva2VuIHwKK3wgTlVNLCBvciB0aGUgQVNDSUkgY2hhcmFjdGVyIHJlYWQgaWYgbm90IGEgbnVtYmVyLiAgU2tpcHMgYWxsICAgfAorfCBibGFua3MgYW5kIHRhYnMsIHJldHVybnMgMCBmb3IgRU9GLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworaW50IGNhbGNsZXggKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApCit7CisgIGludCBjOworICAvKiBTa2lwIGN1cnJlbnQgdG9rZW4sIHRoZW4gd2hpdGUgc3BhY2VzLiAgKi8KKyAgZG8KKyAgICB7CisgICAgICgqbGxvY3ApLmJlZ2luLmNvbHVtbiA9ICgqbGxvY3ApLmVuZC5jb2x1bW47CisgICAgICAoKmxsb2NwKS5iZWdpbi5saW5lICAgPSAoKmxsb2NwKS5lbmQubGluZTsKKworICAgIH0KKyAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCkpID09ICcgJyB8fCBjID09ICdcdCcpOworCisgIC8qIHByb2Nlc3MgbnVtYmVycyAgICovCisgIGlmIChjID09ICcuJyB8fCBpc2RpZ2l0IChjKSkKKyAgICB7CisgICAgICB1bmdldF9jaGFyIChsdmFscCwgbGxvY3AsICBjKTsKKyAgICAgICgqbHZhbHApLml2YWwgPSByZWFkX3NpZ25lZF9pbnRlZ2VyIChsdmFscCwgbGxvY3ApOworICAgICAgcmV0dXJuIE5VTTsKKyAgICB9CisKKyAgLyogUmV0dXJuIGVuZC1vZi1maWxlLiAgKi8KKyAgaWYgKGMgPT0gRU9GKQorICAgIHJldHVybiBDQUxDX0VPRjsKKworICAvKiBSZXR1cm4gc2luZ2xlIGNoYXJzLiAqLworICByZXR1cm4gYzsKK30KK19BVEVPRgorCisKK2NhdCA+Y2FsYy1tYWluLmNjIDw8J19BVEVPRicKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKKworI2luY2x1ZGUgImNhbGMuaGgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2Vsc2UKKyMgdW5kZWYgYWxhcm0KKyMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCisjZW5kaWYKKworCisvKiBBIEMrKyBjYWxjcGFyc2UgdGhhdCBzaW11bGF0ZXMgdGhlIEMgc2lnbmF0dXJlLiAgKi8KK2ludAorY2FsY3BhcnNlICgpCit7CisgIGNhbGM6OnBhcnNlciBwYXJzZXI7CisjaWYgWVlERUJVRworICBwYXJzZXIuc2V0X2RlYnVnX2xldmVsICgxKTsKKyNlbmRpZgorICByZXR1cm4gcGFyc2VyLnBhcnNlICgpOworfQorCisKK3NlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOworaW50IGdsb2JhbF9jb3VudCA9IDA7CisKKy8qIEEgQyBtYWluIGZ1bmN0aW9uLiAgKi8KK2ludAorbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworICBzZW1hbnRpY192YWx1ZSByZXN1bHQgPSAwOworICBpbnQgY291bnQgPSAwOworICBpbnQgc3RhdHVzOworCisgIC8qIFRoaXMgdXNlZCB0byBiZSBhbGFybSAoMTApLCBidXQgdGhhdCBpc24ndCBlbm91Z2ggdGltZSBmb3IKKyAgICAgYSBKdWx5IDE5OTUgdmludGFnZSBERUMgQWxwaGFzdGF0aW9uIDIwMCA0LzEwMCBzeXN0ZW0sCisgICAgIGFjY29yZGluZyB0byBOZWxzb24gSC4gRi4gQmVlYmUuICAxMDAgc2Vjb25kcyBpcyBlbm91Z2guICAqLworICBhbGFybSAoMTAwKTsKKworICBpZiAoYXJnYyA9PSAyKQorICAgIGlucHV0ID0gZm9wZW4gKGFyZ3ZbMV0sICJyIik7CisgIGVsc2UKKyAgICBpbnB1dCA9IHN0ZGluOworCisgIGlmICghaW5wdXQpCisgICAgeworICAgICAgcGVycm9yIChhcmd2WzFdKTsKKyAgICAgIHJldHVybiAzOworICAgIH0KKworCisgIHN0YXR1cyA9IGNhbGNwYXJzZSAoKTsKKyAgaWYgKGZjbG9zZSAoaW5wdXQpKQorICAgIHBlcnJvciAoImZjbG9zZSIpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOworICByZXR1cm4gc3RhdHVzOworfQorX0FURU9GCisKKworCisKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmNjIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NzE2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuY2MgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmNjIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmNjIGNhbGMueSIgImNhbGMuYXQ6NzE2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuY2MgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NzE2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTY6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjcxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE2OiBiaXNvbiAtbyBjYWxjLmNjIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE2IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGNhbGMuY2MgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNjogXCRCSVNPTl9DWFhfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DWFhfV09SS1MiICJjYWxjLmF0OjcxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ1hYX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNjogXCRDWFggXCRDWFhGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuY2MgY2FsYy1sZXguY2MgY2FsYy1tYWluLmNjIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jYyBjYWxjLWxleC5jYyBjYWxjLW1haW4uY2MgJExJQlMiICJjYWxjLmF0OjcxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmNjIGNhbGMtbGV4LmNjIGNhbGMtbWFpbi5jYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNjogXCRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCBcIlwkLjoge1wkX31cXG5cIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCBcJC4gPT0gMSkgJiYgL15cXHMqXCQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciBcIm1haW50XCIuCisgICAgICAgICMgfHwgL1xcc1wkLworICAgICAgICApJyBjYWxjLmNjCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjcxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5jYworCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE2OiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuaGgKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NzE2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmhoCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgVGVzdCB0aGUgcHJpb3JpdGllcy4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMSArIDIgKiAzID0gNworMSArIDIgKiAtMyA9IC01CisKKy0xXjIgPSAtMQorKC0xKV4yID0gMQorCistLS0xID0gLTEKKworMSAtIDIgLSAzID0gLTQKKzEgLSAoMiAtIDMpID0gMgorCisyXjJeMyA9IDI1NgorKDJeMileMyA9IDY0CitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE2OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE2OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE2IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyMgU29tZSBzeW50YXggZXJyb3JzLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxIDIKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTY6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzE2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTY6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTYiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE2OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTYiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxLy8yCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE2OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE2OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE2IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNjogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE2IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworZXJyb3IKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTY6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzE2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTY6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTYiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNjogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE2IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMSA9IDIgPSAzCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE2OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE2OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE2IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuNzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNjogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE2IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworCisrMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNjogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTYiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisyLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKycKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTY6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIEV4ZXJjaXNlIGVycm9yIG1lc3NhZ2VzIHdpdGggRU9GOiB3b3JrIG9uIGFuIGVtcHR5IGZpbGUuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTY6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo3MTYiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTY6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTYiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE2OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTYiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIEV4ZXJjaXNlIHRoZSBlcnJvciB0b2tlbjogd2l0aG91dCBpdCwgd2UgZGllIGF0IHRoZSBmaXJzdCBlcnJvciwKKyMgaGVuY2UgYmUgc3VyZSB0bworIworIyAtIGhhdmUgc2V2ZXJhbCBlcnJvcnMgd2hpY2ggZXhlcmNpc2UgZGlmZmVyZW50IHNoaWZ0L2Rpc2NhcmRpbmdzCisjICAgLSAoKTogbm90aGluZyB0byBwb3AsIG5vdGhpbmcgdG8gZGlzY2FyZAorIyAgIC0gKDEgKyAxICsgMSArKTogYSBsb3QgdG8gcG9wLCBub3RoaW5nIHRvIGRpc2NhcmQKKyMgICAtICgqICogKik6IG5vdGhpbmcgdG8gcG9wLCBhIGxvdCB0byBkaXNjYXJkCisjICAgLSAoMSArIDIgKiAqKTogc29tZSB0byBwb3AgYW5kIGRpc2NhcmQKKyMKKyMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCisjCisjIC0gY2hlY2sgdGhlIGxvb2thaGVhZCB0aGF0IHRyaWdnZXJzIGFuIGVycm9yIGlzIG5vdCBkaXNjYXJkZWQKKyMgICB3aGVuIHdlIGVudGVyIGVycm9yIHJlY292ZXJ5LiAgQmVsb3csIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUKKyMgICBmaXJzdCBlcnJvciBpcyAiKSIsIHdoaWNoIGlzIG5lZWRlZCB0byByZWNvdmVyIGZyb20gdGhlIGVycm9yIGFuZAorIyAgIHByb2R1Y2UgdGhlICIwIiB0aGF0IHRyaWdnZXJzIHRoZSAiMCAhPSAxIiBlcnJvci4KKyMKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCkgKyAoMSArIDEgKyAxICspICsgKCogKiAqKSArICgxICogMiAqICopID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNjogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTYiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK2NhbGM6IGVycm9yOiA0NDQ0ICE9IDEKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTY6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgVGhlIHNhbWUsIGJ1dCB0aGlzIHRpbWUgZXhlcmNpc2luZyBleHBsaWNpdGx5IHRyaWdnZXJlZCBzeW50YXggZXJyb3JzLgorIyBQT1NJWCBzYXlzIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKyghKSArICgxIDIpID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNjogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTYiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCitjYWxjOiBlcnJvcjogMjIyMiAhPSAxCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE2OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTYiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoLSAqKSArICgxIDIpID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNjogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTYiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjQ6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKK2NhbGM6IGVycm9yOiAyMjIyICE9IDEKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTY6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgQ2hlY2sgdGhhdCB5eWVycm9rIHdvcmtzIHByb3Blcmx5OiBzZWNvbmQgZXJyb3IgaXMgbm90IHJlcG9ydGVkLAorIyB0aGlyZCBhbmQgZm91cnRoIGFyZS4gIFBhcnNlIHN0YXR1cyBpcyBzdWNjZXNmdWxsLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoKiAqKSArICgqKSArICgqKQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNjogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTYiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxNjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTY6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTY6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzI1MQorI0FUX1NUQVJUXzI1MgorYXRfZm5fZ3JvdXBfYmFubmVyIDI1MiAnY2FsYy5hdDo3MTgnIFwKKyAgIkNhbGN1bGF0b3IgJWxhbmd1YWdlIFwiQysrXCIgJWdsci1wYXJzZXIgJWRlZmluZXMgJWxvY2F0aW9ucyAlcHVyZS1wYXJzZXIgJWVycm9yLXZlcmJvc2UgJWRlYnVnICVuYW1lLXByZWZpeCBcImNhbGNcIiAldmVyYm9zZSAleWFjYyAlcGFyc2UtcGFyYW0ge3NlbWFudGljX3ZhbHVlICpyZXN1bHR9ICVwYXJzZS1wYXJhbSB7aW50ICpjb3VudH0iICIiIDE0CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjUyLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworCisKKworCisKKworCisKK2NhdCA+Y2FsYy55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKy8qIEluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3ItLWNhbGMgKi8KKyVsYW5ndWFnZSAiQysrIiAlZ2xyLXBhcnNlciAlZGVmaW5lcyAlbG9jYXRpb25zICVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJW5hbWUtcHJlZml4ICJjYWxjIiAldmVyYm9zZSAleWFjYyAlcGFyc2UtcGFyYW0ge3NlbWFudGljX3ZhbHVlICpyZXN1bHR9ICVwYXJzZS1wYXJhbSB7aW50ICpjb3VudH0KKyVkZWZpbmUgZ2xvYmFsX3Rva2Vuc19hbmRfeXlzdHlwZQorJWNvZGUgcmVxdWlyZXMKK3sKKworICAvKiBFeGVyY2lzZSBwcmUtcHJvbG9ndWUgZGVwZW5kZW5jeSB0byAldW5pb24uICAqLworICB0eXBlZGVmIGludCBzZW1hbnRpY192YWx1ZTsKK30KKworLyogRXhlcmNpc2UgJXVuaW9uLiAqLworJXVuaW9uCit7CisgIHNlbWFudGljX3ZhbHVlIGl2YWw7Cit9OworJXByaW50ZXIgeyB5eW91dHB1dCA8PCAkJDsgfSA8aXZhbD47CisKKyVjb2RlIHByb3ZpZGVzCit7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICAvKiBUaGUgaW5wdXQuICAqLworICBleHRlcm4gRklMRSAqaW5wdXQ7CisgIGV4dGVybiBzZW1hbnRpY192YWx1ZSBnbG9iYWxfcmVzdWx0OworICBleHRlcm4gaW50IGdsb2JhbF9jb3VudDsKK30KKworJWNvZGUKK3sKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNkZWZpbmUgVVNFKFZhcikKKworRklMRSAqaW5wdXQ7CitzdGF0aWMgaW50IHBvd2VyIChpbnQgYmFzZSwgaW50IGV4cG9uZW50KTsKKworCitpbnQgY2FsY2xleCAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCk7Cit9CisKKworCisvKiBCaXNvbiBEZWNsYXJhdGlvbnMgKi8KKyV0b2tlbiBDQUxDX0VPRiAwICJlbmQgb2YgaW5wdXQiCisldG9rZW4gPGl2YWw+IE5VTSAibnVtYmVyIgorJXR5cGUgIDxpdmFsPiBleHAKKworJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uICAgICAgICAgICAgKi8KKyVsZWZ0ICctJyAnKycKKyVsZWZ0ICcqJyAnLycKKyVsZWZ0IE5FRyAgICAgLyogbmVnYXRpb24tLXVuYXJ5IG1pbnVzICovCislcmlnaHQgJ14nICAgIC8qIGV4cG9uZW50aWF0aW9uICAgICAgICAqLworCisvKiBHcmFtbWFyIGZvbGxvd3MgKi8KKyUlCitpbnB1dDoKKyAgbGluZQorfCBpbnB1dCBsaW5lICAgICAgICAgeyArKypjb3VudDsgKytnbG9iYWxfY291bnQ7IH0KKzsKKworbGluZToKKyAgJ1xuJworfCBleHAgJ1xuJyAgICAgICAgICAgeyAqcmVzdWx0ID0gZ2xvYmFsX3Jlc3VsdCA9ICQxOyB9Cis7CisKK2V4cDoKKyAgTlVNICAgICAgICAgICAgICAgIHsgJCQgPSAkMTsgICAgICAgICAgICAgfQorfCBleHAgJz0nIGV4cAorICB7CisgICAgaWYgKCQxICE9ICQzKQorICAgICAgZnByaW50ZiAoc3RkZXJyLCAiY2FsYzogZXJyb3I6ICVkICE9ICVkXG4iLCAkMSwgJDMpOworICAgICQkID0gJDE7CisgIH0KK3wgZXhwICcrJyBleHAgICAgICAgIHsgJCQgPSAkMSArICQzOyAgICAgICAgfQorfCBleHAgJy0nIGV4cCAgICAgICAgeyAkJCA9ICQxIC0gJDM7ICAgICAgICB9Cit8IGV4cCAnKicgZXhwICAgICAgICB7ICQkID0gJDEgKiAkMzsgICAgICAgIH0KK3wgZXhwICcvJyBleHAgICAgICAgIHsgJCQgPSAkMSAvICQzOyAgICAgICAgfQorfCAnLScgZXhwICAlcHJlYyBORUcgeyAkJCA9IC0kMjsgICAgICAgICAgICB9Cit8IGV4cCAnXicgZXhwICAgICAgICB7ICQkID0gcG93ZXIgKCQxLCAkMyk7IH0KK3wgJygnIGV4cCAnKScgICAgICAgIHsgJCQgPSAkMjsgICAgICAgICAgICAgfQorfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IDExMTE7IHl5ZXJyb2s7ICB9Cit8ICchJyAgICAgICAgICAgICAgICB7ICQkID0gMDsgWVlFUlJPUjsgICAgIH0KK3wgJy0nIGVycm9yICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQorOworJSUKKworc3RhdGljIGludAorcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpCit7CisgIGludCByZXMgPSAxOworICBhc3NlcnQgKDAgPD0gZXhwb25lbnQpOworICBmb3IgKC8qIE5pZW50ZSAqLzsgZXhwb25lbnQ7IC0tZXhwb25lbnQpCisgICAgcmVzICo9IGJhc2U7CisgIHJldHVybiByZXM7Cit9CisKKworLyogQSBDKysgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3ZvaWQKK2NhbGM6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGxvY2F0aW9uX3R5cGUmIGwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtKQoreworICAodm9pZCkgbDsKKyAgc3RkOjpjZXJyIDw8IGwgPDwgIjogIiA8PCBtIDw8IHN0ZDo6ZW5kbDsKK30KK19BVEVPRgorCisKKworY2F0ID5jYWxjLWxleC5jYyA8PCdfQVRFT0YnCisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCisKKyNpbmNsdWRlICJjYWxjLmhoIgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworaW50IGNhbGNsZXggKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApOworc3RhdGljIGludCBnZXRfY2hhciAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCk7CitzdGF0aWMgdm9pZCB1bmdldF9jaGFyIChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwLCAgaW50IGMpOworCisKK3N0YXRpYyBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgbGFzdF95eWxsb2M7CisKK3N0YXRpYyBpbnQKK2dldF9jaGFyIChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKQoreworICBpbnQgcmVzID0gZ2V0YyAoaW5wdXQpOworICAodm9pZCkgbHZhbHA7KHZvaWQpIGxsb2NwOworCisgIGxhc3RfeXlsbG9jID0gKCpsbG9jcCk7CisgIGlmIChyZXMgPT0gJ1xuJykKKyAgICB7CisgICAgICAoKmxsb2NwKS5lbmQubGluZSsrOworICAgICAgKCpsbG9jcCkuZW5kLmNvbHVtbiA9IDE7CisgICAgfQorICBlbHNlCisgICAgKCpsbG9jcCkuZW5kLmNvbHVtbisrOworCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkCit1bmdldF9jaGFyIChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwLCAgaW50IGMpCit7CisgICh2b2lkKSBsdmFscDsodm9pZCkgbGxvY3A7CisKKyAgLyogV3Jvbmcgd2hlbiBDID09IGBcbicuICovCisgICgqbGxvY3ApID0gbGFzdF95eWxsb2M7CisKKyAgdW5nZXRjIChjLCBpbnB1dCk7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRfc2lnbmVkX2ludGVnZXIgKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApCit7CisgIGludCBjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCk7CisgIGludCBzaWduID0gMTsKKyAgaW50IG4gPSAwOworCisgICh2b2lkKSBsdmFscDsodm9pZCkgbGxvY3A7CisgIGlmIChjID09ICctJykKKyAgICB7CisgICAgICBjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCk7CisgICAgICBzaWduID0gLTE7CisgICAgfQorCisgIHdoaWxlIChpc2RpZ2l0IChjKSkKKyAgICB7CisgICAgICBuID0gMTAgKiBuICsgKGMgLSAnMCcpOworICAgICAgYyA9IGdldF9jaGFyIChsdmFscCwgbGxvY3ApOworICAgIH0KKworICB1bmdldF9jaGFyIChsdmFscCwgbGxvY3AsICBjKTsKKworICByZXR1cm4gc2lnbiAqIG47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IExleGljYWwgYW5hbHl6ZXIgcmV0dXJucyBhbiBpbnRlZ2VyIG9uIHRoZSBzdGFjayBhbmQgdGhlIHRva2VuIHwKK3wgTlVNLCBvciB0aGUgQVNDSUkgY2hhcmFjdGVyIHJlYWQgaWYgbm90IGEgbnVtYmVyLiAgU2tpcHMgYWxsICAgfAorfCBibGFua3MgYW5kIHRhYnMsIHJldHVybnMgMCBmb3IgRU9GLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworaW50IGNhbGNsZXggKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApCit7CisgIGludCBjOworICAvKiBTa2lwIGN1cnJlbnQgdG9rZW4sIHRoZW4gd2hpdGUgc3BhY2VzLiAgKi8KKyAgZG8KKyAgICB7CisgICAgICgqbGxvY3ApLmJlZ2luLmNvbHVtbiA9ICgqbGxvY3ApLmVuZC5jb2x1bW47CisgICAgICAoKmxsb2NwKS5iZWdpbi5saW5lICAgPSAoKmxsb2NwKS5lbmQubGluZTsKKworICAgIH0KKyAgd2hpbGUgKChjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCkpID09ICcgJyB8fCBjID09ICdcdCcpOworCisgIC8qIHByb2Nlc3MgbnVtYmVycyAgICovCisgIGlmIChjID09ICcuJyB8fCBpc2RpZ2l0IChjKSkKKyAgICB7CisgICAgICB1bmdldF9jaGFyIChsdmFscCwgbGxvY3AsICBjKTsKKyAgICAgICgqbHZhbHApLml2YWwgPSByZWFkX3NpZ25lZF9pbnRlZ2VyIChsdmFscCwgbGxvY3ApOworICAgICAgcmV0dXJuIE5VTTsKKyAgICB9CisKKyAgLyogUmV0dXJuIGVuZC1vZi1maWxlLiAgKi8KKyAgaWYgKGMgPT0gRU9GKQorICAgIHJldHVybiBDQUxDX0VPRjsKKworICAvKiBSZXR1cm4gc2luZ2xlIGNoYXJzLiAqLworICByZXR1cm4gYzsKK30KK19BVEVPRgorCisKK2NhdCA+Y2FsYy1tYWluLmNjIDw8J19BVEVPRicKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKKworI2luY2x1ZGUgImNhbGMuaGgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2Vsc2UKKyMgdW5kZWYgYWxhcm0KKyMgZGVmaW5lIGFsYXJtKHNlY29uZHMpIC8qIGVtcHR5ICovCisjZW5kaWYKKworCisvKiBBIEMrKyBjYWxjcGFyc2UgdGhhdCBzaW11bGF0ZXMgdGhlIEMgc2lnbmF0dXJlLiAgKi8KK2ludAorY2FsY3BhcnNlIChzZW1hbnRpY192YWx1ZSAqcmVzdWx0LCBpbnQgKmNvdW50KQoreworICBjYWxjOjpwYXJzZXIgcGFyc2VyIChyZXN1bHQsIGNvdW50KTsKKyNpZiBZWURFQlVHCisgIHBhcnNlci5zZXRfZGVidWdfbGV2ZWwgKDEpOworI2VuZGlmCisgIHJldHVybiBwYXJzZXIucGFyc2UgKCk7Cit9CisKKworc2VtYW50aWNfdmFsdWUgZ2xvYmFsX3Jlc3VsdCA9IDA7CitpbnQgZ2xvYmFsX2NvdW50ID0gMDsKKworLyogQSBDIG1haW4gZnVuY3Rpb24uICAqLworaW50CittYWluIChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisgIHNlbWFudGljX3ZhbHVlIHJlc3VsdCA9IDA7CisgIGludCBjb3VudCA9IDA7CisgIGludCBzdGF0dXM7CisKKyAgLyogVGhpcyB1c2VkIHRvIGJlIGFsYXJtICgxMCksIGJ1dCB0aGF0IGlzbid0IGVub3VnaCB0aW1lIGZvcgorICAgICBhIEp1bHkgMTk5NSB2aW50YWdlIERFQyBBbHBoYXN0YXRpb24gMjAwIDQvMTAwIHN5c3RlbSwKKyAgICAgYWNjb3JkaW5nIHRvIE5lbHNvbiBILiBGLiBCZWViZS4gIDEwMCBzZWNvbmRzIGlzIGVub3VnaC4gICovCisgIGFsYXJtICgxMDApOworCisgIGlmIChhcmdjID09IDIpCisgICAgaW5wdXQgPSBmb3BlbiAoYXJndlsxXSwgInIiKTsKKyAgZWxzZQorICAgIGlucHV0ID0gc3RkaW47CisKKyAgaWYgKCFpbnB1dCkKKyAgICB7CisgICAgICBwZXJyb3IgKGFyZ3ZbMV0pOworICAgICAgcmV0dXJuIDM7CisgICAgfQorCisKKyAgc3RhdHVzID0gY2FsY3BhcnNlICgmcmVzdWx0LCAmY291bnQpOworICBpZiAoZmNsb3NlIChpbnB1dCkpCisgICAgcGVycm9yICgiZmNsb3NlIik7CisgIGFzc2VydCAoZ2xvYmFsX3Jlc3VsdCA9PSByZXN1bHQpOworICBhc3NlcnQgKGdsb2JhbF9jb3VudCA9PSBjb3VudCk7CisgIHJldHVybiBzdGF0dXM7Cit9CitfQVRFT0YKKworCisKKworCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuY2MgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo3MTgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gY2FsYy5jYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuY2MgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuY2MgY2FsYy55IiAiY2FsYy5hdDo3MTgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gY2FsYy5jYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY2FsYy5hdDo3MTgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NzE4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTg6IGJpc29uIC1vIGNhbGMuY2MgY2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gY2FsYy5jYyBjYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4OiBcJEJJU09OX0NYWF9XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NYWF9XT1JLUyIgImNhbGMuYXQ6NzE4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DWFhfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4OiBcJENYWCBcJENYWEZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGNhbGMgY2FsYy5jYyBjYWxjLWxleC5jYyBjYWxjLW1haW4uY2MgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmNjIGNhbGMtbGV4LmNjIGNhbGMtbWFpbi5jYyAkTElCUyIgImNhbGMuYXQ6NzE4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBjYWxjIGNhbGMuY2MgY2FsYy1sZXguY2MgY2FsYy1tYWluLmNjICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4OiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuY2MKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NzE4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmNjCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTg6IFwkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgXCJcJC46IHtcJF99XFxuXCIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgXCQuID09IDEpICYmIC9eXFxzKlwkLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgXCJtYWludFwiLgorICAgICAgICAjIHx8IC9cXHNcJC8KKyAgICAgICAgKScgY2FsYy5oaAorIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY2FsYy5hdDo3MTgiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50ICIkLjogeyRffVxuIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCAkLiA9PSAxKSAmJiAvXlxzKiQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciAibWFpbnQiLgorICAgICAgICAjIHx8IC9ccyQvCisgICAgICAgICknIGNhbGMuaGgKKworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBUZXN0IHRoZSBwcmlvcml0aWVzLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxICsgMiAqIDMgPSA3CisxICsgMiAqIC0zID0gLTUKKworLTFeMiA9IC0xCisoLTEpXjIgPSAxCisKKy0tLTEgPSAtMQorCisxIC0gMiAtIDMgPSAtNAorMSAtICgyIC0gMykgPSAyCisKKzJeMl4zID0gMjU2CisoMl4yKV4zID0gNjQKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzE4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworIyBTb21lIHN5bnRheCBlcnJvcnMuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEgMgorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxODogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTgiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxODogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTg6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEvLzIKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzE4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJy8nLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTgiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCitlcnJvcgorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxODogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTgiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxODogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTgiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxID0gMiA9IDMKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTg6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzE4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS43OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTgiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisKKysxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzIuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxODogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgRXhlcmNpc2UgZXJyb3IgbWVzc2FnZXMgd2l0aCBFT0Y6IHdvcmsgb24gYW4gZW1wdHkgZmlsZS4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxODogIFwkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyAvZGV2L251bGwiICJjYWxjLmF0OjcxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxODogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTg6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgRXhlcmNpc2UgdGhlIGVycm9yIHRva2VuOiB3aXRob3V0IGl0LCB3ZSBkaWUgYXQgdGhlIGZpcnN0IGVycm9yLAorIyBoZW5jZSBiZSBzdXJlIHRvCisjCisjIC0gaGF2ZSBzZXZlcmFsIGVycm9ycyB3aGljaCBleGVyY2lzZSBkaWZmZXJlbnQgc2hpZnQvZGlzY2FyZGluZ3MKKyMgICAtICgpOiBub3RoaW5nIHRvIHBvcCwgbm90aGluZyB0byBkaXNjYXJkCisjICAgLSAoMSArIDEgKyAxICspOiBhIGxvdCB0byBwb3AsIG5vdGhpbmcgdG8gZGlzY2FyZAorIyAgIC0gKCogKiAqKTogbm90aGluZyB0byBwb3AsIGEgbG90IHRvIGRpc2NhcmQKKyMgICAtICgxICsgMiAqICopOiBzb21lIHRvIHBvcCBhbmQgZGlzY2FyZAorIworIyAtIHRlc3QgdGhlIGFjdGlvbiBhc3NvY2lhdGVkIHRvIGBlcnJvcicKKyMKKyMgLSBjaGVjayB0aGUgbG9va2FoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAorIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZQorIyAgIGZpcnN0IGVycm9yIGlzICIpIiwgd2hpY2ggaXMgbmVlZGVkIHRvIHJlY292ZXIgZnJvbSB0aGUgZXJyb3IgYW5kCisjICAgcHJvZHVjZSB0aGUgIjAiIHRoYXQgdHJpZ2dlcnMgdGhlICIwICE9IDEiIGVycm9yLgorIworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoKSArICgxICsgMSArIDEgKykgKyAoKiAqICopICsgKDEgKiAyICogKikgPSAxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xODogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4yMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS40MTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworY2FsYzogZXJyb3I6IDQ0NDQgIT0gMQorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxODogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBUaGUgc2FtZSwgYnV0IHRoaXMgdGltZSBleGVyY2lzaW5nIGV4cGxpY2l0bHkgdHJpZ2dlcmVkIHN5bnRheCBlcnJvcnMuCisjIFBPU0lYIHNheXMgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCEpICsgKDEgMikgPSAxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKK2NhbGM6IGVycm9yOiAyMjIyICE9IDEKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTg6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygtICopICsgKDEgMikgPSAxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorY2FsYzogZXJyb3I6IDIyMjIgIT0gMQorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxODogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBDaGVjayB0aGF0IHl5ZXJyb2sgd29ya3MgcHJvcGVybHk6IHNlY29uZCBlcnJvciBpcyBub3QgcmVwb3J0ZWQsCisjIHRoaXJkIGFuZCBmb3VydGggYXJlLiAgUGFyc2Ugc3RhdHVzIGlzIHN1Y2Nlc2Z1bGwuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygqICopICsgKCopICsgKCopCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xNjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxODogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjUyCisjQVRfU1RBUlRfMjUzCithdF9mbl9ncm91cF9iYW5uZXIgMjUzICdjYWxjLmF0OjcxOScgXAorICAiQ2FsY3VsYXRvciAlbGFuZ3VhZ2UgXCJDKytcIiAlZ2xyLXBhcnNlciAlZGVmaW5lcyAlbG9jYXRpb25zICVwdXJlLXBhcnNlciAlZXJyb3ItdmVyYm9zZSAlZGVidWcgJWRlZmluZSBhcGkucHJlZml4IFwiY2FsY1wiICV2ZXJib3NlICV5YWNjICVwYXJzZS1wYXJhbSB7c2VtYW50aWNfdmFsdWUgKnJlc3VsdH0gJXBhcnNlLXBhcmFtIHtpbnQgKmNvdW50fSIgIiIgMTQKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyNTMuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisKKworCisKKworCisKKworY2F0ID5jYWxjLnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworLyogSW5maXggbm90YXRpb24gY2FsY3VsYXRvci0tY2FsYyAqLworJWxhbmd1YWdlICJDKysiICVnbHItcGFyc2VyICVkZWZpbmVzICVsb2NhdGlvbnMgJXB1cmUtcGFyc2VyICVlcnJvci12ZXJib3NlICVkZWJ1ZyAlZGVmaW5lIGFwaS5wcmVmaXggImNhbGMiICV2ZXJib3NlICV5YWNjICVwYXJzZS1wYXJhbSB7c2VtYW50aWNfdmFsdWUgKnJlc3VsdH0gJXBhcnNlLXBhcmFtIHtpbnQgKmNvdW50fQorJWRlZmluZSBnbG9iYWxfdG9rZW5zX2FuZF95eXN0eXBlCislY29kZSByZXF1aXJlcworeworCisgIC8qIEV4ZXJjaXNlIHByZS1wcm9sb2d1ZSBkZXBlbmRlbmN5IHRvICV1bmlvbi4gICovCisgIHR5cGVkZWYgaW50IHNlbWFudGljX3ZhbHVlOworfQorCisvKiBFeGVyY2lzZSAldW5pb24uICovCisldW5pb24KK3sKKyAgc2VtYW50aWNfdmFsdWUgaXZhbDsKK307CislcHJpbnRlciB7IHl5b3V0cHV0IDw8ICQkOyB9IDxpdmFsPjsKKworJWNvZGUgcHJvdmlkZXMKK3sKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIC8qIFRoZSBpbnB1dC4gICovCisgIGV4dGVybiBGSUxFICppbnB1dDsKKyAgZXh0ZXJuIHNlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQ7CisgIGV4dGVybiBpbnQgZ2xvYmFsX2NvdW50OworfQorCislY29kZQoreworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2RlZmluZSBVU0UoVmFyKQorCitGSUxFICppbnB1dDsKK3N0YXRpYyBpbnQgcG93ZXIgKGludCBiYXNlLCBpbnQgZXhwb25lbnQpOworCisKK2ludCBjYWxjbGV4IChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKTsKK30KKworCisKKy8qIEJpc29uIERlY2xhcmF0aW9ucyAqLworJXRva2VuIENBTENfRU9GIDAgImVuZCBvZiBpbnB1dCIKKyV0b2tlbiA8aXZhbD4gTlVNICJudW1iZXIiCisldHlwZSAgPGl2YWw+IGV4cAorCislbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24gICAgICAgICAgICAqLworJWxlZnQgJy0nICcrJworJWxlZnQgJyonICcvJworJWxlZnQgTkVHICAgICAvKiBuZWdhdGlvbi0tdW5hcnkgbWludXMgKi8KKyVyaWdodCAnXicgICAgLyogZXhwb25lbnRpYXRpb24gICAgICAgICovCisKKy8qIEdyYW1tYXIgZm9sbG93cyAqLworJSUKK2lucHV0OgorICBsaW5lCit8IGlucHV0IGxpbmUgICAgICAgICB7ICsrKmNvdW50OyArK2dsb2JhbF9jb3VudDsgfQorOworCitsaW5lOgorICAnXG4nCit8IGV4cCAnXG4nICAgICAgICAgICB7ICpyZXN1bHQgPSBnbG9iYWxfcmVzdWx0ID0gJDE7IH0KKzsKKworZXhwOgorICBOVU0gICAgICAgICAgICAgICAgeyAkJCA9ICQxOyAgICAgICAgICAgICB9Cit8IGV4cCAnPScgZXhwCisgIHsKKyAgICBpZiAoJDEgIT0gJDMpCisgICAgICBmcHJpbnRmIChzdGRlcnIsICJjYWxjOiBlcnJvcjogJWQgIT0gJWRcbiIsICQxLCAkMyk7CisgICAgJCQgPSAkMTsKKyAgfQorfCBleHAgJysnIGV4cCAgICAgICAgeyAkJCA9ICQxICsgJDM7ICAgICAgICB9Cit8IGV4cCAnLScgZXhwICAgICAgICB7ICQkID0gJDEgLSAkMzsgICAgICAgIH0KK3wgZXhwICcqJyBleHAgICAgICAgIHsgJCQgPSAkMSAqICQzOyAgICAgICAgfQorfCBleHAgJy8nIGV4cCAgICAgICAgeyAkJCA9ICQxIC8gJDM7ICAgICAgICB9Cit8ICctJyBleHAgICVwcmVjIE5FRyB7ICQkID0gLSQyOyAgICAgICAgICAgIH0KK3wgZXhwICdeJyBleHAgICAgICAgIHsgJCQgPSBwb3dlciAoJDEsICQzKTsgfQorfCAnKCcgZXhwICcpJyAgICAgICAgeyAkJCA9ICQyOyAgICAgICAgICAgICB9Cit8ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gMTExMTsgeXllcnJvazsgIH0KK3wgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSAwOyBZWUVSUk9SOyAgICAgfQorfCAnLScgZXJyb3IgICAgICAgICAgeyAkJCA9IDA7IFlZRVJST1I7ICAgICB9Cis7CislJQorCitzdGF0aWMgaW50Citwb3dlciAoaW50IGJhc2UsIGludCBleHBvbmVudCkKK3sKKyAgaW50IHJlcyA9IDE7CisgIGFzc2VydCAoMCA8PSBleHBvbmVudCk7CisgIGZvciAoLyogTmllbnRlICovOyBleHBvbmVudDsgLS1leHBvbmVudCkKKyAgICByZXMgKj0gYmFzZTsKKyAgcmV0dXJuIHJlczsKK30KKworCisvKiBBIEMrKyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLwordm9pZAorY2FsYzo6cGFyc2VyOjplcnJvciAoY29uc3QgbG9jYXRpb25fdHlwZSYgbCwgY29uc3Qgc3RkOjpzdHJpbmcmIG0pCit7CisgICh2b2lkKSBsOworICBzdGQ6OmNlcnIgPDwgbCA8PCAiOiAiIDw8IG0gPDwgc3RkOjplbmRsOworfQorX0FURU9GCisKKworCitjYXQgPmNhbGMtbGV4LmNjIDw8J19BVEVPRicKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKKworI2luY2x1ZGUgImNhbGMuaGgiCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCitpbnQgY2FsY2xleCAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCk7CitzdGF0aWMgaW50IGdldF9jaGFyIChjYWxjOjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwLCBjYWxjOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgKmxsb2NwKTsKK3N0YXRpYyB2b2lkIHVuZ2V0X2NoYXIgKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3AsICBpbnQgYyk7CisKKworc3RhdGljIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSBsYXN0X3l5bGxvYzsKKworc3RhdGljIGludAorZ2V0X2NoYXIgKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApCit7CisgIGludCByZXMgPSBnZXRjIChpbnB1dCk7CisgICh2b2lkKSBsdmFscDsodm9pZCkgbGxvY3A7CisKKyAgbGFzdF95eWxsb2MgPSAoKmxsb2NwKTsKKyAgaWYgKHJlcyA9PSAnXG4nKQorICAgIHsKKyAgICAgICgqbGxvY3ApLmVuZC5saW5lKys7CisgICAgICAoKmxsb2NwKS5lbmQuY29sdW1uID0gMTsKKyAgICB9CisgIGVsc2UKKyAgICAoKmxsb2NwKS5lbmQuY29sdW1uKys7CisKKyAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQKK3VuZ2V0X2NoYXIgKGNhbGM6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHAsIGNhbGM6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3AsICBpbnQgYykKK3sKKyAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKKworICAvKiBXcm9uZyB3aGVuIEMgPT0gYFxuJy4gKi8KKyAgKCpsbG9jcCkgPSBsYXN0X3l5bGxvYzsKKworICB1bmdldGMgKGMsIGlucHV0KTsKK30KKworc3RhdGljIGludAorcmVhZF9zaWduZWRfaW50ZWdlciAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCkKK3sKKyAgaW50IGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKTsKKyAgaW50IHNpZ24gPSAxOworICBpbnQgbiA9IDA7CisKKyAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKKyAgaWYgKGMgPT0gJy0nKQorICAgIHsKKyAgICAgIGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKTsKKyAgICAgIHNpZ24gPSAtMTsKKyAgICB9CisKKyAgd2hpbGUgKGlzZGlnaXQgKGMpKQorICAgIHsKKyAgICAgIG4gPSAxMCAqIG4gKyAoYyAtICcwJyk7CisgICAgICBjID0gZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCk7CisgICAgfQorCisgIHVuZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCwgIGMpOworCisgIHJldHVybiBzaWduICogbjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgTGV4aWNhbCBhbmFseXplciByZXR1cm5zIGFuIGludGVnZXIgb24gdGhlIHN0YWNrIGFuZCB0aGUgdG9rZW4gfAorfCBOVU0sIG9yIHRoZSBBU0NJSSBjaGFyYWN0ZXIgcmVhZCBpZiBub3QgYSBudW1iZXIuICBTa2lwcyBhbGwgICB8Cit8IGJsYW5rcyBhbmQgdGFicywgcmV0dXJucyAwIGZvciBFT0YuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitpbnQgY2FsY2xleCAoY2FsYzo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgY2FsYzo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICpsbG9jcCkKK3sKKyAgaW50IGM7CisgIC8qIFNraXAgY3VycmVudCB0b2tlbiwgdGhlbiB3aGl0ZSBzcGFjZXMuICAqLworICBkbworICAgIHsKKyAgICAgKCpsbG9jcCkuYmVnaW4uY29sdW1uID0gKCpsbG9jcCkuZW5kLmNvbHVtbjsKKyAgICAgICgqbGxvY3ApLmJlZ2luLmxpbmUgICA9ICgqbGxvY3ApLmVuZC5saW5lOworCisgICAgfQorICB3aGlsZSAoKGMgPSBnZXRfY2hhciAobHZhbHAsIGxsb2NwKSkgPT0gJyAnIHx8IGMgPT0gJ1x0Jyk7CisKKyAgLyogcHJvY2VzcyBudW1iZXJzICAgKi8KKyAgaWYgKGMgPT0gJy4nIHx8IGlzZGlnaXQgKGMpKQorICAgIHsKKyAgICAgIHVuZ2V0X2NoYXIgKGx2YWxwLCBsbG9jcCwgIGMpOworICAgICAgKCpsdmFscCkuaXZhbCA9IHJlYWRfc2lnbmVkX2ludGVnZXIgKGx2YWxwLCBsbG9jcCk7CisgICAgICByZXR1cm4gTlVNOworICAgIH0KKworICAvKiBSZXR1cm4gZW5kLW9mLWZpbGUuICAqLworICBpZiAoYyA9PSBFT0YpCisgICAgcmV0dXJuIENBTENfRU9GOworCisgIC8qIFJldHVybiBzaW5nbGUgY2hhcnMuICovCisgIHJldHVybiBjOworfQorX0FURU9GCisKKworY2F0ID5jYWxjLW1haW4uY2MgPDwnX0FURU9GJworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworCisjaW5jbHVkZSAiY2FsYy5oaCIKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxzZQorIyB1bmRlZiBhbGFybQorIyBkZWZpbmUgYWxhcm0oc2Vjb25kcykgLyogZW1wdHkgKi8KKyNlbmRpZgorCisKKy8qIEEgQysrIGNhbGNwYXJzZSB0aGF0IHNpbXVsYXRlcyB0aGUgQyBzaWduYXR1cmUuICAqLworaW50CitjYWxjcGFyc2UgKHNlbWFudGljX3ZhbHVlICpyZXN1bHQsIGludCAqY291bnQpCit7CisgIGNhbGM6OnBhcnNlciBwYXJzZXIgKHJlc3VsdCwgY291bnQpOworI2lmIENBTENERUJVRworICBwYXJzZXIuc2V0X2RlYnVnX2xldmVsICgxKTsKKyNlbmRpZgorICByZXR1cm4gcGFyc2VyLnBhcnNlICgpOworfQorCisKK3NlbWFudGljX3ZhbHVlIGdsb2JhbF9yZXN1bHQgPSAwOworaW50IGdsb2JhbF9jb3VudCA9IDA7CisKKy8qIEEgQyBtYWluIGZ1bmN0aW9uLiAgKi8KK2ludAorbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworICBzZW1hbnRpY192YWx1ZSByZXN1bHQgPSAwOworICBpbnQgY291bnQgPSAwOworICBpbnQgc3RhdHVzOworCisgIC8qIFRoaXMgdXNlZCB0byBiZSBhbGFybSAoMTApLCBidXQgdGhhdCBpc24ndCBlbm91Z2ggdGltZSBmb3IKKyAgICAgYSBKdWx5IDE5OTUgdmludGFnZSBERUMgQWxwaGFzdGF0aW9uIDIwMCA0LzEwMCBzeXN0ZW0sCisgICAgIGFjY29yZGluZyB0byBOZWxzb24gSC4gRi4gQmVlYmUuICAxMDAgc2Vjb25kcyBpcyBlbm91Z2guICAqLworICBhbGFybSAoMTAwKTsKKworICBpZiAoYXJnYyA9PSAyKQorICAgIGlucHV0ID0gZm9wZW4gKGFyZ3ZbMV0sICJyIik7CisgIGVsc2UKKyAgICBpbnB1dCA9IHN0ZGluOworCisgIGlmICghaW5wdXQpCisgICAgeworICAgICAgcGVycm9yIChhcmd2WzFdKTsKKyAgICAgIHJldHVybiAzOworICAgIH0KKworCisgIHN0YXR1cyA9IGNhbGNwYXJzZSAoJnJlc3VsdCwgJmNvdW50KTsKKyAgaWYgKGZjbG9zZSAoaW5wdXQpKQorICAgIHBlcnJvciAoImZjbG9zZSIpOworICBhc3NlcnQgKGdsb2JhbF9yZXN1bHQgPT0gcmVzdWx0KTsKKyAgYXNzZXJ0IChnbG9iYWxfY291bnQgPT0gY291bnQpOworICByZXR1cm4gc3RhdHVzOworfQorX0FURU9GCisKKworCisKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBjYWxjLmNjIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NzE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGNhbGMuY2MgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmNjIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBjYWxjLmNjIGNhbGMueSIgImNhbGMuYXQ6NzE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGNhbGMuY2MgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImNhbGMuYXQ6NzE5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjYWxjLmF0OjcxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE5OiBiaXNvbiAtbyBjYWxjLmNjIGNhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGNhbGMuY2MgY2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOTogXCRCSVNPTl9DWFhfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DWFhfV09SS1MiICJjYWxjLmF0OjcxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ1hYX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOTogXCRDWFggXCRDWFhGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBjYWxjIGNhbGMuY2MgY2FsYy1sZXguY2MgY2FsYy1tYWluLmNjIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGNhbGMgY2FsYy5jYyBjYWxjLWxleC5jYyBjYWxjLW1haW4uY2MgJExJQlMiICJjYWxjLmF0OjcxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gY2FsYyBjYWxjLmNjIGNhbGMtbGV4LmNjIGNhbGMtbWFpbi5jYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOTogXCRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCBcIlwkLjoge1wkX31cXG5cIgorICAgIGlmICgjIE5vIHN0YXJ0aW5nL2VuZGluZyBlbXB0eSBsaW5lcy4KKyAgICAgICAgKGVvZiB8fCBcJC4gPT0gMSkgJiYgL15cXHMqXCQvCisgICAgICAgICMgTm8gdHJhaWxpbmcgc3BhY2UuICBGSVhNRTogbm90IHJlYWR5IGZvciBcIm1haW50XCIuCisgICAgICAgICMgfHwgL1xcc1wkLworICAgICAgICApJyBjYWxjLmNjCisiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjYWxjLmF0OjcxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtbmUgJworICBjaG9tcDsKKyAgcHJpbnQgIiQuOiB7JF99XG4iCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8ICQuID09IDEpICYmIC9eXHMqJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yICJtYWludCIuCisgICAgICAgICMgfHwgL1xzJC8KKyAgICAgICAgKScgY2FsYy5jYworCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE5OiBcJFBFUkwgLW5lICcKKyAgY2hvbXA7CisgIHByaW50IFwiXCQuOiB7XCRffVxcblwiCisgICAgaWYgKCMgTm8gc3RhcnRpbmcvZW5kaW5nIGVtcHR5IGxpbmVzLgorICAgICAgICAoZW9mIHx8IFwkLiA9PSAxKSAmJiAvXlxccypcJC8KKyAgICAgICAgIyBObyB0cmFpbGluZyBzcGFjZS4gIEZJWE1FOiBub3QgcmVhZHkgZm9yIFwibWFpbnRcIi4KKyAgICAgICAgIyB8fCAvXFxzXCQvCisgICAgICAgICknIGNhbGMuaGgKKyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImNhbGMuYXQ6NzE5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC1uZSAnCisgIGNob21wOworICBwcmludCAiJC46IHskX31cbiIKKyAgICBpZiAoIyBObyBzdGFydGluZy9lbmRpbmcgZW1wdHkgbGluZXMuCisgICAgICAgIChlb2YgfHwgJC4gPT0gMSkgJiYgL15ccyokLworICAgICAgICAjIE5vIHRyYWlsaW5nIHNwYWNlLiAgRklYTUU6IG5vdCByZWFkeSBmb3IgIm1haW50Ii4KKyAgICAgICAgIyB8fCAvXHMkLworICAgICAgICApJyBjYWxjLmhoCisKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgVGVzdCB0aGUgcHJpb3JpdGllcy4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMSArIDIgKiAzID0gNworMSArIDIgKiAtMyA9IC01CisKKy0xXjIgPSAtMQorKC0xKV4yID0gMQorCistLS0xID0gLTEKKworMSAtIDIgLSAzID0gLTQKKzEgLSAoMiAtIDMpID0gMgorCisyXjJeMyA9IDI1NgorKDJeMileMyA9IDY0CitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyMgU29tZSBzeW50YXggZXJyb3JzLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxIDIKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzE5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxLy8yCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworZXJyb3IKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIgImNhbGMuYXQ6NzE5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMSA9IDIgPSAzCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE5OiAgXCRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQiICJjYWxjLmF0OjcxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2NhbGMgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gUmVtb3ZlIHRoZSB0cmFjZXMgZnJvbSBvYnNlcnZlZC4KK3NlZCAnL15TdGFydGluZy9kCisvXkVudGVyaW5nL2QKKy9eU3RhY2svZAorL15SZWFkaW5nL2QKKy9eUmVkdWNpbmcvZAorL15SZXR1cm4vZAorL15TaGlmdGluZy9kCisvXnN0YXRlL2QKKy9eQ2xlYW51cDovZAorL15FcnJvcjovZAorL15OZXh0L2QKKy9eTm93L2QKKy9eRGlzY2FyZGluZy9kCisvIFwkWzAtOSRdKiA9IC9kCisvXnl5ZGVzdHJ1Y3RvcjovZCcgc3RkZXJyID5hdC1zdGRlcnIKK212IGF0LXN0ZGVyciBzdGRlcnIKKyMgMi4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuNzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworX0FURU9GCisKKyMgMy4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgNC4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNS4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImNhbGMuYXQ6NzE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworCisrMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisyLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKycKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIEV4ZXJjaXNlIGVycm9yIG1lc3NhZ2VzIHdpdGggRU9GOiB3b3JrIG9uIGFuIGVtcHR5IGZpbGUuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTk6ICBcJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2NhbGMgL2Rldi9udWxsIiAiY2FsYy5hdDo3MTkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBSZW1vdmUgdGhlIHRyYWNlcyBmcm9tIG9ic2VydmVkLgorc2VkICcvXlN0YXJ0aW5nL2QKKy9eRW50ZXJpbmcvZAorL15TdGFjay9kCisvXlJlYWRpbmcvZAorL15SZWR1Y2luZy9kCisvXlJldHVybi9kCisvXlNoaWZ0aW5nL2QKKy9ec3RhdGUvZAorL15DbGVhbnVwOi9kCisvXkVycm9yOi9kCisvXk5leHQvZAorL15Ob3cvZAorL15EaXNjYXJkaW5nL2QKKy8gXCRbMC05JF0qID0gL2QKKy9eeXlkZXN0cnVjdG9yOi9kJyBzdGRlcnIgPmF0LXN0ZGVycgorbXYgYXQtc3RkZXJyIHN0ZGVycgorIyAyLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIEV4ZXJjaXNlIHRoZSBlcnJvciB0b2tlbjogd2l0aG91dCBpdCwgd2UgZGllIGF0IHRoZSBmaXJzdCBlcnJvciwKKyMgaGVuY2UgYmUgc3VyZSB0bworIworIyAtIGhhdmUgc2V2ZXJhbCBlcnJvcnMgd2hpY2ggZXhlcmNpc2UgZGlmZmVyZW50IHNoaWZ0L2Rpc2NhcmRpbmdzCisjICAgLSAoKTogbm90aGluZyB0byBwb3AsIG5vdGhpbmcgdG8gZGlzY2FyZAorIyAgIC0gKDEgKyAxICsgMSArKTogYSBsb3QgdG8gcG9wLCBub3RoaW5nIHRvIGRpc2NhcmQKKyMgICAtICgqICogKik6IG5vdGhpbmcgdG8gcG9wLCBhIGxvdCB0byBkaXNjYXJkCisjICAgLSAoMSArIDIgKiAqKTogc29tZSB0byBwb3AgYW5kIGRpc2NhcmQKKyMKKyMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCisjCisjIC0gY2hlY2sgdGhlIGxvb2thaGVhZCB0aGF0IHRyaWdnZXJzIGFuIGVycm9yIGlzIG5vdCBkaXNjYXJkZWQKKyMgICB3aGVuIHdlIGVudGVyIGVycm9yIHJlY292ZXJ5LiAgQmVsb3csIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUKKyMgICBmaXJzdCBlcnJvciBpcyAiKSIsIHdoaWNoIGlzIG5lZWRlZCB0byByZWNvdmVyIGZyb20gdGhlIGVycm9yIGFuZAorIyAgIHByb2R1Y2UgdGhlICIwIiB0aGF0IHRyaWdnZXJzIHRoZSAiMCAhPSAxIiBlcnJvci4KKyMKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCkgKyAoMSArIDEgKyAxICspICsgKCogKiAqKSArICgxICogMiAqICopID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuNDE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK2NhbGM6IGVycm9yOiA0NDQ0ICE9IDEKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgVGhlIHNhbWUsIGJ1dCB0aGlzIHRpbWUgZXhlcmNpc2luZyBleHBsaWNpdGx5IHRyaWdnZXJlZCBzeW50YXggZXJyb3JzLgorIyBQT1NJWCBzYXlzIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKyghKSArICgxIDIpID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjEwOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCitjYWxjOiBlcnJvcjogMjIyMiAhPSAxCitfQVRFT0YKKworIyAzLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyA0LiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA1LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY2FsYy5hdDo3MTkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoLSAqKSArICgxIDIpID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjQ6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKK2NhbGM6IGVycm9yOiAyMjIyICE9IDEKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgQ2hlY2sgdGhhdCB5eWVycm9rIHdvcmtzIHByb3Blcmx5OiBzZWNvbmQgZXJyb3IgaXMgbm90IHJlcG9ydGVkLAorIyB0aGlyZCBhbmQgZm91cnRoIGFyZS4gIFBhcnNlIHN0YXR1cyBpcyBzdWNjZXNmdWxsLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoKiAqKSArICgqKSArICgqKQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOTogIFwkUFJFUEFSU0VSIC4vY2FsYyBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0IiAiY2FsYy5hdDo3MTkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9jYWxjIGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jYWxjLmF0OjcxOTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIFJlbW92ZSB0aGUgdHJhY2VzIGZyb20gb2JzZXJ2ZWQuCitzZWQgJy9eU3RhcnRpbmcvZAorL15FbnRlcmluZy9kCisvXlN0YWNrL2QKKy9eUmVhZGluZy9kCisvXlJlZHVjaW5nL2QKKy9eUmV0dXJuL2QKKy9eU2hpZnRpbmcvZAorL15zdGF0ZS9kCisvXkNsZWFudXA6L2QKKy9eRXJyb3I6L2QKKy9eTmV4dC9kCisvXk5vdy9kCisvXkRpc2NhcmRpbmcvZAorLyBcJFswLTkkXSogPSAvZAorL155eWRlc3RydWN0b3I6L2QnIHN0ZGVyciA+YXQtc3RkZXJyCittdiBhdC1zdGRlcnIgc3RkZXJyCisjIDIuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTA6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTY6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDMuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDQuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDUuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY2FsYy5hdDo3MTk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjYWxjLmF0OjcxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2NhbGMuYXQ6NzE5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzI1MworI0FUX1NUQVJUXzI1NAorYXRfZm5fZ3JvdXBfYmFubmVyIDI1NCAndG9ydHVyZS5hdDoxMzcnIFwKKyAgIkJpZyB0cmlhbmdsZSIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAxNQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI1NC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKICMgSSBoYXZlIGJlZW4gYWJsZSB0byBnbyB1cCB0byAyMDAwIG9uIG15IG1hY2hpbmUuCiAjIEkgdHJpZWQgMzAwMCwgYSAyOU1iIGdyYW1tYXIgZmlsZSwgYnV0IHRoZW4gbXkgc3lzdGVtIGtpbGxlZCBiaXNvbi4KICMgV2l0aCA1MDAgYW5kIHRoZSBuZXcgcGFyc2VyLCB3aGljaCBjb25zdW1lIGZhciB0b28gbXVjaCBtZW1vcnksCiAjIGl0IGdldHMga2lsbGVkIHRvby4gIE9mIGNvdXJzZSB0aGUgcGFyc2VyIGlzIHRvIGJlIGNsZWFuZWQuCisKIGNhdCA+Z2VuZ3JhbS5wbCA8PCdfQVRFT0YnCiAjISAvdXNyL2Jpbi9wZXJsIC13CiAKQEAgLTUzODEzLDI0ICsxMjkwNTIsMjMgQEAKIG15ICRtYXggPSAkQVJHVlswXSB8fCAxMDsKIAogcHJpbnQgPDxFT0Y7Ci0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKICVlcnJvci12ZXJib3NlCiAlZGVidWcKICV7CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KLQorI2luY2x1ZGUgPGFzc2VydC5oPgorI2RlZmluZSBNQVggJG1heAogc3RhdGljIGludCB5eWxleCAodm9pZCk7Ci1zdGF0aWMgdm9pZCB5eWVycm9yIChjb25zdCBjaGFyICptc2cpOworc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CiAlfQogJXVuaW9uCiB7CkBAIC01Mzg0OSw4ICsxMjkwODcsOCBAQAogcHJpbnQgPDxFT0Y7CiAlJQogaW5wdXQ6Ci0gIGV4cCAgICAgICAgeyBpZiAoXCQxICE9IDApIGFib3J0ICgpOyBcJFwkID0gXCQxOyB9Ci18IGlucHV0IGV4cCAgeyBpZiAoXCQyICE9IFwkMSArIDEpIGFib3J0ICgpOyBcJFwkID0gXCQyOyB9CisgIGV4cCAgICAgICAgeyBhc3NlcnQgKFwkMSA9PSAwKTsgXCRcJCA9IFwkMTsgfQorfCBpbnB1dCBleHAgIHsgYXNzZXJ0IChcJDIgPT0gXCQxICsgMSk7IFwkXCQgPSBcJDI7IH0KIDsKIAogZXhwOgpAQCAtNTM4NjgsMTQgKzEyOTEwNiwyMSBAQAogICB9OwogcHJpbnQgIjtcbiI7CiAKLXByaW50IDw8RU9GOworcHJpbnQgPDxcRU9GOwogJSUKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CiBzdGF0aWMgaW50CiB5eWxleCAodm9pZCkKIHsKICAgc3RhdGljIGludCBpbm5lciA9IDE7CiAgIHN0YXRpYyBpbnQgb3V0ZXIgPSAwOwotICBpZiAob3V0ZXIgPiAkbWF4KQorICBpZiAob3V0ZXIgPiBNQVgpCiAgICAgcmV0dXJuIDA7CiAgIGVsc2UgaWYgKGlubmVyID4gb3V0ZXIpCiAgICAgewpAQCAtNTM4ODUsMTMgKzEyOTEzMCw2IEBACiAgICAgfQogICByZXR1cm4gaW5uZXIrKzsKIH0KLQotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKGNvbnN0IGNoYXIgKm1zZykKLXsKLSAgZnByaW50ZiAoc3RkZXJyLCAiJXNcXG4iLCBtc2cpOwotfQotCiBpbnQKIG1haW4gKHZvaWQpCiB7CkBAIC01MzkwMiwxMjMgKzEyOTE0MCwxMDIgQEAKIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAidG9ydHVyZS5hdDoxNDY6IHBlcmwgLXcgLi9nZW5ncmFtLnBsIDIwMCB8fCBleGl0IDc3IgotZWNobyB0b3J0dXJlLmF0OjE0NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgcGVybCAtdyAuL2dlbmdyYW0ucGwgMjAwIHx8IGV4aXQgNzcgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyBzdGRvdXQ6OyB0ZWUgc3Rkb3V0IDwkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJ0b3J0dXJlLmF0OjE0NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDoxNDM6IFwkUEVSTCAtdyAuL2dlbmdyYW0ucGwgMjAwIHx8IGV4aXQgNzciCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRQRVJMIC13IC4vZ2VuZ3JhbS5wbCAyMDAgfHwgZXhpdCA3NyIgInRvcnR1cmUuYXQ6MTQzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC13IC4vZ2VuZ3JhbS5wbCAyMDAgfHwgZXhpdCA3NworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyB0ZWUgc3Rkb3V0IDwiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDoxNDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiBtdiBzdGRvdXQgaW5wdXQueQogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInRvcnR1cmUuYXQ6MTQ3OiBiaXNvbiAtdiAtbyBpbnB1dC5jIGlucHV0LnkiCi1lY2hvIHRvcnR1cmUuYXQ6MTQ3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtdiAtbyBpbnB1dC5jIGlucHV0LnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAidG9ydHVyZS5hdDoxNDc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gInRvcnR1cmUuYXQ6MTQ4OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgotZWNobyB0b3J0dXJlLmF0OjE0OCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAidG9ydHVyZS5hdDoxNDg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gInRvcnR1cmUuYXQ6MTQ5OiBcJFBSRVBBUlNFUiAuL2lucHV0IgotZWNobyB0b3J0dXJlLmF0OjE0OSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2lucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInRvcnR1cmUuYXQ6MTQ5OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjE0NDogYmlzb24gLXYgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAidG9ydHVyZS5hdDoxNDQiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLXYgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6MTQ0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjE0NTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgInRvcnR1cmUuYXQ6MTQ1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjE0NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgMTA2ICkgIyAxMDYuIHRvcnR1cmUuYXQ6MjMyOiBCaWcgaG9yaXpvbnRhbAotICAgIGF0X3NldHVwX2xpbmU9J3RvcnR1cmUuYXQ6MjMyJwotICAgIGF0X2Rlc2M9J0JpZyBob3Jpem9udGFsJwotICAgICRhdF9xdWlldCAkRUNIT19OICIxMDY6IEJpZyBob3Jpem9udGFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIxMDYuIHRvcnR1cmUuYXQ6MjMyOiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDoxNDU6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAidG9ydHVyZS5hdDoxNDUiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6MTQ1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6MTQ2OiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgInRvcnR1cmUuYXQ6MTQ2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6MTQ2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6MTQ2OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInRvcnR1cmUuYXQ6MTQ2IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6MTQ2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjU0CisjQVRfU1RBUlRfMjU1CithdF9mbl9ncm91cF9iYW5uZXIgMjU1ICd0b3J0dXJlLmF0OjIyNycgXAorICAiQmlnIGhvcml6b250YWwiICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDE1CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjU1LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogIyBJIGhhdmUgYmVlbiBhYmxlIHRvIGdvIHVwIHRvIDEwMDAwIG9uIG15IG1hY2hpbmUsIGJ1dCBJIGhhZCB0bwpAQCAtNTQwMzMsNiArMTI5MjUwLDcgQEAKICMgZ2NjIC1XYWxsIGlucHV0LnRhYi5jIC1vIGlucHV0ICAgNS44MXMgdXNlciAwLjIwcyBzeXMgMTAwJSBjcHUgICAgIDYuMDEgdG90YWwKICMgLi9pbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wMHMgdXNlciAwLjAxcyBzeXMgMTA4JSBjcHUgICAgIDAuMDEgdG90YWwKICMKKwogY2F0ID5nZW5ncmFtLnBsIDw8J19BVEVPRicKICMhIC91c3IvYmluL3BlcmwgLXcKIApAQCAtNTQwNDAsMjQgKzEyOTI1OCwyMiBAQAogbXkgJG1heCA9ICRBUkdWWzBdIHx8IDEwOwogCiBwcmludCA8PEVPRjsKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogJWVycm9yLXZlcmJvc2UKICVkZWJ1ZwogJXsKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgotCisjZGVmaW5lIE1BWCAkbWF4CiBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKLXN0YXRpYyB2b2lkIHl5ZXJyb3IgKGNvbnN0IGNoYXIgKm1zZyk7CitzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKICV9CiAKICV0b2tlbgpAQCAtNTQwNzgsMjIgKzEyOTI5NCwyNCBAQAogCShtYXAgeyAiXCIkX1wiIiB9ICgxIC4uICRtYXgpKSwgIjsiKSwKICAgIlxuIjsKIAotcHJpbnQgPDxFT0Y7CitwcmludCA8PFxFT0Y7CiAlJQorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KIHN0YXRpYyBpbnQKIHl5bGV4ICh2b2lkKQogewogICBzdGF0aWMgaW50IGNvdW50ZXIgPSAxOwotICBpZiAoY291bnRlciA+ICRtYXgpCi0gICAgcmV0dXJuIDA7Ci0gIGVsc2UKLSAgcmV0dXJuIGNvdW50ZXIrKzsKLX0KLQotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKGNvbnN0IGNoYXIgKm1zZykKLXsKLSAgZnByaW50ZiAoc3RkZXJyLCAiJXNcXG4iLCBtc2cpOworICBpZiAoY291bnRlciA8PSBNQVgpCisgICAgcmV0dXJuIGNvdW50ZXIrKzsKKyAgYXNzZXJ0IChjb3VudGVyKysgPT0gTUFYICsgMSk7CisgIHJldHVybiAwOwogfQogCiBpbnQKQEAgLTU0MTA2LDE1OSArMTI5MzI0LDEyNyBAQAogX0FURU9GCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJ0b3J0dXJlLmF0OjI0NjogcGVybCAtdyAuL2dlbmdyYW0ucGwgMTAwMCB8fCBleGl0IDc3IgotZWNobyB0b3J0dXJlLmF0OjI0NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgcGVybCAtdyAuL2dlbmdyYW0ucGwgMTAwMCB8fCBleGl0IDc3ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gc3Rkb3V0OjsgdGVlIHN0ZG91dCA8JGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAidG9ydHVyZS5hdDoyNDY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6MjQxOiBcJFBFUkwgLXcgLi9nZW5ncmFtLnBsIDEwMDAgfHwgZXhpdCA3NyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFBFUkwgLXcgLi9nZW5ncmFtLnBsIDEwMDAgfHwgZXhpdCA3NyIgInRvcnR1cmUuYXQ6MjQxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC13IC4vZ2VuZ3JhbS5wbCAxMDAwIHx8IGV4aXQgNzcKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgdGVlIHN0ZG91dCA8IiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6MjQxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogbXYgc3Rkb3V0IGlucHV0LnkKIAogCisKICMgR05VIG00IHJlcXVpcmVzIGFib3V0IDcwIE1pQiBmb3IgdGhpcyB0ZXN0IG9uIGEgMzItYml0IGhvc3QuCiAjIEFzayBmb3IgMjAwIE1pQiwgd2hpY2ggc2hvdWxkIGJlIHBsZW50eSBldmVuIG9uIGEgNjQtYml0IGhvc3QuCiBkYXRhX2xpbWl0PWAodWxpbWl0IC1TIC1kKSAyPi9kZXYvbnVsbGAKIGNhc2UgJGRhdGFfbGltaXQgaW4KIFswLTldKikKICAgaWYgdGVzdCAiJGRhdGFfbGltaXQiIC1sdCAyMDQwMDA7IHRoZW4KLSAgICAkYXRfdHJhY2VvZmYKLWVjaG8gInRvcnR1cmUuYXQ6MjUwOiB1bGltaXQgLVMgLWQgMjA0MDAwIHx8IGV4aXQgNzciCi1lY2hvIHRvcnR1cmUuYXQ6MjUwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyB1bGltaXQgLVMgLWQgMjA0MDAwIHx8IGV4aXQgNzcgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAidG9ydHVyZS5hdDoyNTA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgorICAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjI0NTogdWxpbWl0IC1TIC1kIDIwNDAwMCB8fCBleGl0IDc3IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAidG9ydHVyZS5hdDoyNDUiCisoICRhdF9jaGVja190cmFjZTsgdWxpbWl0IC1TIC1kIDIwNDAwMCB8fCBleGl0IDc3CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6MjQ1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogICAgIHVsaW1pdCAtUyAtZCAyMDQwMDAKICAgZmkKIGVzYWMKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJ0b3J0dXJlLmF0OjI1MjogYmlzb24gLXYgLW8gaW5wdXQuYyBpbnB1dC55IgotZWNobyB0b3J0dXJlLmF0OjI1MiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLXYgLW8gaW5wdXQuYyBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInRvcnR1cmUuYXQ6MjUyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJ0b3J0dXJlLmF0OjI1MzogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKLWVjaG8gdG9ydHVyZS5hdDoyNTMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInRvcnR1cmUuYXQ6MjUzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJ0b3J0dXJlLmF0OjI1NDogXCRQUkVQQVJTRVIgLi9pbnB1dCIKLWVjaG8gdG9ydHVyZS5hdDoyNTQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9pbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJ0b3J0dXJlLmF0OjI1NDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDoyNDc6IGJpc29uIC12IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInRvcnR1cmUuYXQ6MjQ3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC12IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjI0NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Cit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDoyNDg6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJ0b3J0dXJlLmF0OjI0OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDoyNDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIDEwNyApICMgMTA3LiB0b3J0dXJlLmF0OjM2ODogTWFueSBsb29rLWFoZWFkIHRva2VucwotICAgIGF0X3NldHVwX2xpbmU9J3RvcnR1cmUuYXQ6MzY4JwotICAgIGF0X2Rlc2M9J01hbnkgbG9vay1haGVhZCB0b2tlbnMnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjEwNzogTWFueSBsb29rLWFoZWFkIHRva2VucyAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjEwNy4gdG9ydHVyZS5hdDozNjg6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjI0ODogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJ0b3J0dXJlLmF0OjI0OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDoyNDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDoyNDk6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAidG9ydHVyZS5hdDoyNDkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDoyNDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDoyNDk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAidG9ydHVyZS5hdDoyNDkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDoyNDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yNTUKKyNBVF9TVEFSVF8yNTYKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyNTYgJ3RvcnR1cmUuYXQ6MzY0JyBcCisgICJNYW55IGxvb2thaGVhZCB0b2tlbnMiICIgICAgICAgICAgICAgICAgICAgICAgICAgICIgMTUKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyNTYuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKwogCiAKIGNhdCA+Z2VuZ3JhbS5wbCA8PCdfQVRFT0YnCkBAIC01NDI3MiwxMiArMTI5NDU4LDE4IEBACiAlZXJyb3ItdmVyYm9zZQogJWRlYnVnCiAleworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworCiAjIGluY2x1ZGUgPHN0ZGlvLmg+CiAjIGluY2x1ZGUgPHN0ZGxpYi5oPgogIyBpbmNsdWRlIDxhc3NlcnQuaD4KLQorIyBkZWZpbmUgTUFYICRtYXgKIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOwotc3RhdGljIHZvaWQgeXllcnJvciAoY29uc3QgY2hhciAqbXNnKTsKK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOwogJX0KICV1bmlvbgogewpAQCAtNTQzMjIsMTUgKzEyOTUxNCwyNSBAQAogICAgIHByaW50ICJuJGNvdW50OiB0b2tlbiB7IFwkXCQgPSAkY291bnQ7IH07XG4iOwogICB9OwogCi1wcmludCA8PEVPRjsKK3ByaW50IDw8XEVPRjsKICUlCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQogc3RhdGljIGludAogeXlsZXggKHZvaWQpCiB7CiAgIHN0YXRpYyBpbnQgcmV0dXJuX3Rva2VuID0gMTsKICAgc3RhdGljIGludCBjb3VudGVyID0gMTsKLSAgaWYgKGNvdW50ZXIgPiAkbWF4KQotICAgIHJldHVybiAwOworICBpZiAoY291bnRlciA+IE1BWCkKKyAgICB7CisgICAgICBhc3NlcnQgKGNvdW50ZXIrKyA9PSBNQVggKyAxKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KICAgaWYgKHJldHVybl90b2tlbikKICAgICB7CiAgICAgICByZXR1cm5fdG9rZW4gPSAwOwpAQCAtNTQzNDAsMTIgKzEyOTU0Miw2IEBACiAgIHJldHVybiBjb3VudGVyKys7CiB9CiAKLXN0YXRpYyB2b2lkCi15eWVycm9yIChjb25zdCBjaGFyICptc2cpCi17Ci0gIGZwcmludGYgKHN0ZGVyciwgIiVzXFxuIiwgbXNnKTsKLX0KLQogaW50CiBtYWluICh2b2lkKQogewpAQCAtNTQzNTYsMTY0ICsxMjk1NTIsMjE0IEBACiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInRvcnR1cmUuYXQ6MzcwOiBwZXJsIC13IC4vZ2VuZ3JhbS5wbCAxMDAwIHx8IGV4aXQgNzciCi1lY2hvIHRvcnR1cmUuYXQ6MzcwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBwZXJsIC13IC4vZ2VuZ3JhbS5wbCAxMDAwIHx8IGV4aXQgNzcgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyBzdGRvdXQ6OyB0ZWUgc3Rkb3V0IDwkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJ0b3J0dXJlLmF0OjM3MDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDozNjY6IFwkUEVSTCAtdyAuL2dlbmdyYW0ucGwgMTAwMCB8fCBleGl0IDc3IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkUEVSTCAtdyAuL2dlbmdyYW0ucGwgMTAwMCB8fCBleGl0IDc3IiAidG9ydHVyZS5hdDozNjYiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLXcgLi9nZW5ncmFtLnBsIDEwMDAgfHwgZXhpdCA3NworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyB0ZWUgc3Rkb3V0IDwiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDozNjYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiBtdiBzdGRvdXQgaW5wdXQueQogCiAKKwogIyBHTlUgbTQgcmVxdWlyZXMgYWJvdXQgNzAgTWlCIGZvciB0aGlzIHRlc3Qgb24gYSAzMi1iaXQgaG9zdC4KICMgQXNrIGZvciAyMDAgTWlCLCB3aGljaCBzaG91bGQgYmUgcGxlbnR5IGV2ZW4gb24gYSA2NC1iaXQgaG9zdC4KIGRhdGFfbGltaXQ9YCh1bGltaXQgLVMgLWQpIDI+L2Rldi9udWxsYAogY2FzZSAkZGF0YV9saW1pdCBpbgogWzAtOV0qKQogICBpZiB0ZXN0ICIkZGF0YV9saW1pdCIgLWx0IDIwNDAwMDsgdGhlbgotICAgICRhdF90cmFjZW9mZgotZWNobyAidG9ydHVyZS5hdDozNzQ6IHVsaW1pdCAtUyAtZCAyMDQwMDAgfHwgZXhpdCA3NyIKLWVjaG8gdG9ydHVyZS5hdDozNzQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IHVsaW1pdCAtUyAtZCAyMDQwMDAgfHwgZXhpdCA3NyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJ0b3J0dXJlLmF0OjM3NDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCisgICAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6MzcwOiB1bGltaXQgLVMgLWQgMjA0MDAwIHx8IGV4aXQgNzciCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJ0b3J0dXJlLmF0OjM3MCIKKyggJGF0X2NoZWNrX3RyYWNlOyB1bGltaXQgLVMgLWQgMjA0MDAwIHx8IGV4aXQgNzcKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDozNzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAgICAgdWxpbWl0IC1TIC1kIDIwNDAwMAogICBmaQogZXNhYwogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInRvcnR1cmUuYXQ6Mzc2OiBiaXNvbiAtdiAtbyBpbnB1dC5jIGlucHV0LnkiCi1lY2hvIHRvcnR1cmUuYXQ6Mzc2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtdiAtbyBpbnB1dC5jIGlucHV0LnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAidG9ydHVyZS5hdDozNzY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDozNzI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtdiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJ0b3J0dXJlLmF0OjM3MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtdiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6MzcyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjM3MjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLXYgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC12IC1vIGlucHV0LmMgaW5wdXQueSIgInRvcnR1cmUuYXQ6MzcyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC12IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDozNzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDozNzI6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJ0b3J0dXJlLmF0OjM3MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjM3MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6MzcyOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAidG9ydHVyZS5hdDozNzIiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDozNzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKLQotJGF0X3RyYWNlb24KLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJ0b3J0dXJlLmF0OjM3NzogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKLWVjaG8gdG9ydHVyZS5hdDozNzcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInRvcnR1cmUuYXQ6Mzc3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJ0b3J0dXJlLmF0OjM3ODogXCRQUkVQQVJTRVIgLi9pbnB1dCIKLWVjaG8gdG9ydHVyZS5hdDozNzggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9pbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJ0b3J0dXJlLmF0OjM3ODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDozNzI6IGJpc29uIC12IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInRvcnR1cmUuYXQ6MzcyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC12IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjM3MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Cit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDozNzM6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJ0b3J0dXJlLmF0OjM3MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDozNzMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIDEwOCApICMgMTA4LiB0b3J0dXJlLmF0OjQ0NTogRXhwbG9kaW5nIHRoZSBTdGFjayBTaXplIHdpdGggQWxsb2NhCi0gICAgYXRfc2V0dXBfbGluZT0ndG9ydHVyZS5hdDo0NDUnCi0gICAgYXRfZGVzYz0nRXhwbG9kaW5nIHRoZSBTdGFjayBTaXplIHdpdGggQWxsb2NhJwotICAgICRhdF9xdWlldCAkRUNIT19OICIxMDg6IEV4cGxvZGluZyB0aGUgU3RhY2sgU2l6ZSB3aXRoIEFsbG9jYSAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIxMDguIHRvcnR1cmUuYXQ6NDQ1OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDozNzM6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAidG9ydHVyZS5hdDozNzMiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6MzczIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6Mzc0OiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgInRvcnR1cmUuYXQ6Mzc0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6Mzc0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6Mzc0OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInRvcnR1cmUuYXQ6Mzc0IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6Mzc0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjU2CisjQVRfU1RBUlRfMjU3CithdF9mbl9ncm91cF9iYW5uZXIgMjU3ICd0b3J0dXJlLmF0OjQ2NicgXAorICAiRXhwbG9kaW5nIHRoZSBTdGFjayBTaXplIHdpdGggQWxsb2NhIiAiICAgICAgICAgICAiIDE1CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjU3LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworCiAKIAogIyBBIGdyYW1tYXIgb2YgcGFyZW5zIGdyb3dpbmcgdGhlIHN0YWNrIHRoYW5rcyB0byByaWdodCByZWN1cnNpb24uCiAjIGV4cDoKIGNhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCiAlewogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CkBAIC01NDUyNiwxOTYgKzEyOTc3Miw1OTEgQEAKICNlbmRpZgogCiAgIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOwotICBzdGF0aWMgdm9pZCB5eWVycm9yIChjb25zdCBjaGFyICptc2cpOworICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKICV9CisKICVlcnJvci12ZXJib3NlCiAlZGVidWcKICV0b2tlbiBXQUlUX0ZPUl9FT0YKICUlCiBleHA6IFdBSVRfRk9SX0VPRiBleHAgfCA7CiAlJQotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKGNvbnN0IGNoYXIgKm1zZykKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKIHsKICAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7CiB9Ci0KKyNpbmNsdWRlIDxhc3NlcnQuaD4KIHN0YXRpYyBpbnQKIHl5bGV4ICh2b2lkKQogeworICBhc3NlcnQgKDAgPD0geXlsdmFsKTsKICAgaWYgKHl5bHZhbC0tKQogICAgIHJldHVybiBXQUlUX0ZPUl9FT0Y7CiAgIGVsc2UKICAgICByZXR1cm4gRU9GOwogfQogCisvKiBSZXR1cm4gYXJndlsxXSBhcyBhbiBpbnQuICovCitzdGF0aWMgaW50CitnZXRfYXJncyAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworICBpbnQgcmVzOworICBjaGFyICplbmRwOworICBhc3NlcnQgKGFyZ2MgPT0gMik7CisgIHJlcyA9IHN0cnRvbCAoYXJndlsxXSwgJmVuZHAsIDEwKTsKKyAgYXNzZXJ0IChhcmd2WzFdICE9IGVuZHApOworICBhc3NlcnQgKDAgPD0gcmVzKTsKKyAgYXNzZXJ0IChyZXMgPD0gSU5UX01BWCk7CisgIGFzc2VydCAoZXJybm8gIT0gRVJBTkdFKTsKKyAgcmV0dXJuIHJlczsKK30KKwogaW50CiBtYWluIChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7Ci0gIGNoYXIgKmVuZHA7Ci0gIGlmIChhcmdjICE9IDIpCi0gICAgYWJvcnQgKCk7Ci0gIHl5bHZhbCA9IHN0cnRvbCAoYXJndlsxXSwgJmVuZHAsIDEwKTsKLSAgaWYgKCEgKGFyZ3ZbMV0gIT0gZW5kcAotCSAmJiAwIDw9IHl5bHZhbCAmJiB5eWx2YWwgPD0gSU5UX01BWAotCSAmJiBlcnJubyAhPSBFUkFOR0UpKQotICAgIGFib3J0ICgpOworICBZWVNUWVBFIHl5bHZhbF9pbml0ID0gZ2V0X2FyZ3MgKGFyZ2MsIGFyZ3YpOworICBpbnQgc3RhdHVzID0gMDsKKyAgaW50IGNvdW50OwogICB5eWRlYnVnID0gMTsKLSAgcmV0dXJuIHl5cGFyc2UgKCk7CisgIGZvciAoY291bnQgPSAwOyBjb3VudCA8IDI7ICsrY291bnQpCisgICAgeworICAgICAgaW50IG5ld19zdGF0dXM7CisgICAgICB5eWx2YWwgPSB5eWx2YWxfaW5pdDsKKyAgICAgIG5ld19zdGF0dXMgPSB5eXBhcnNlICgpOworICAgICAgaWYgKGNvdW50ID09IDApCisgICAgICAgIHN0YXR1cyA9IG5ld19zdGF0dXM7CisgICAgICBlbHNlCisgICAgICAgIGFzc2VydCAobmV3X3N0YXR1cyA9PSBzdGF0dXMpOworICAgIH0KKyAgcmV0dXJuIHN0YXR1czsKIH0KIF9BVEVPRgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInRvcnR1cmUuYXQ6NDUyOiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCi1lY2hvIHRvcnR1cmUuYXQ6NDUyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAidG9ydHVyZS5hdDo0NTI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo0NzU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJ0b3J0dXJlLmF0OjQ3NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NDc1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo0NzU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiICJ0b3J0dXJlLmF0OjQ3NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NDc1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NDc1OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAidG9ydHVyZS5hdDo0NzUiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo0NzUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjQ3NTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInRvcnR1cmUuYXQ6NDc1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NDc1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo0NzU6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInRvcnR1cmUuYXQ6NDc1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjQ3NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSRhdF90cmFjZW9mZgotZWNobyAidG9ydHVyZS5hdDo0NTI6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCi1lY2hvIHRvcnR1cmUuYXQ6NDUyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJ0b3J0dXJlLmF0OjQ1MjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NDc1OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAidG9ydHVyZS5hdDo0NzUiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NDc1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NDc1OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyIgInRvcnR1cmUuYXQ6NDc1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjQ3NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCiAjIEJlbG93IHRoZSBsaW1pdCBvZiAyMDAuCi0kYXRfdHJhY2VvZmYKLWVjaG8gInRvcnR1cmUuYXQ6NDU1OiBcJFBSRVBBUlNFUiAuL2lucHV0IDIwIgotZWNobyB0b3J0dXJlLmF0OjQ1NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2lucHV0IDIwICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInRvcnR1cmUuYXQ6NDU1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo0Nzg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sb2ctZmQ9MVwiIFwkUFJFUEFSU0VSIC4vaW5wdXQgMjAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxvZy1mZD0xXCIgJFBSRVBBUlNFUiAuL2lucHV0IDIwIiAidG9ydHVyZS5hdDo0NzgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sb2ctZmQ9MSIgJFBSRVBBUlNFUiAuL2lucHV0IDIwCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjQ3OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjQ3ODogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJ0b3J0dXJlLmF0OjQ3OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NDc4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogIyBUd28gZW5sYXJnZW1lbnRzOiAyICogMiAqIDIwMC4KLSRhdF90cmFjZW9mZgotZWNobyAidG9ydHVyZS5hdDo0NTc6IFwkUFJFUEFSU0VSIC4vaW5wdXQgOTAwIgotZWNobyB0b3J0dXJlLmF0OjQ1NyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL2lucHV0IDkwMCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJ0b3J0dXJlLmF0OjQ1NzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NDgxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbG9nLWZkPTFcIiBcJFBSRVBBUlNFUiAuL2lucHV0IDkwMCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbG9nLWZkPTFcIiAkUFJFUEFSU0VSIC4vaW5wdXQgOTAwIiAidG9ydHVyZS5hdDo0ODEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sb2ctZmQ9MSIgJFBSRVBBUlNFUiAuL2lucHV0IDkwMAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo0ODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo0ODE6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAidG9ydHVyZS5hdDo0ODEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjQ4MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKICMgRmFpbHM6IGJleW9uZCB0aGUgbGltaXQgb2YgMTAsMDAwICh3aGljaCB3ZSBkb24ndCByZWFjaCBhbnl3YXkgc2luY2Ugd2UKICMgbXVsdGlwbHkgYnkgdHdvIHN0YXJ0aW5nIGF0IDIwMCA9PiA1MTIwIGlzIHRoZSBsYXN0IHBvc3NpYmxlKS4KLSRhdF90cmFjZW9mZgotZWNobyAidG9ydHVyZS5hdDo0NjA6IFwkUFJFUEFSU0VSIC4vaW5wdXQgMTAwMDAiCi1lY2hvIHRvcnR1cmUuYXQ6NDYwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vaW5wdXQgMTAwMDAgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAyKSA7OwotICAgKikgZWNobyAidG9ydHVyZS5hdDo0NjA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMiIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjQ4NTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxvZy1mZD0xXCIgXCRQUkVQQVJTRVIgLi9pbnB1dCAxMDAwMCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbG9nLWZkPTFcIiAkUFJFUEFSU0VSIC4vaW5wdXQgMTAwMDAiICJ0b3J0dXJlLmF0OjQ4NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxvZy1mZD0xIiAkUFJFUEFSU0VSIC4vaW5wdXQgMTAwMDAKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMiAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NDg1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo0ODU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAidG9ydHVyZS5hdDo0ODUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjQ4NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIFRoZSBwdXNoIHBhcnNlciBjYW4ndCB1c2UgYWxsb2NhIHNpbmNlIHRoZSBzdGFja3MgY2FuJ3QgYmUgbG9jYWxzLiAgVGhpcyB0ZXN0CisjIGp1c3QgaGVscHMgZ3VhcmFudGVlIHdlIGRvbid0IGxldCB0aGUgWVlTVEFDS19VU0VfQUxMT0NBIGZlYXR1cmUgYWZmZWN0CisjIHB1c2ggcGFyc2Vycy4KKworIyBBIGdyYW1tYXIgb2YgcGFyZW5zIGdyb3dpbmcgdGhlIHN0YWNrIHRoYW5rcyB0byByaWdodCByZWN1cnNpb24uCisjIGV4cDoKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisleworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2lmIChkZWZpbmVkIF9fR05VQ19fIHx8IGRlZmluZWQgX19CVUlMVElOX1ZBX0FSR19JTkNSIFwKKyAgICAgfHwgZGVmaW5lZCBfQUlYIHx8IGRlZmluZWQgX01TQ19WRVIgfHwgZGVmaW5lZCBfQUxMT0NBX0gpCisjIGRlZmluZSBZWVNUQUNLX1VTRV9BTExPQ0EgMQorI2VuZGlmCisKKyAgc3RhdGljIGludCB5eWxleCAodm9pZCk7CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworJX0KKyVkZWZpbmUgYXBpLnB1c2gtcHVsbCBib3RoCisKKyVlcnJvci12ZXJib3NlCislZGVidWcKKyV0b2tlbiBXQUlUX0ZPUl9FT0YKKyUlCitleHA6IFdBSVRfRk9SX0VPRiBleHAgfCA7CislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKyNpbmNsdWRlIDxhc3NlcnQuaD4KK3N0YXRpYyBpbnQKK3l5bGV4ICh2b2lkKQoreworICBhc3NlcnQgKDAgPD0geXlsdmFsKTsKKyAgaWYgKHl5bHZhbC0tKQorICAgIHJldHVybiBXQUlUX0ZPUl9FT0Y7CisgIGVsc2UKKyAgICByZXR1cm4gRU9GOworfQorCisvKiBSZXR1cm4gYXJndlsxXSBhcyBhbiBpbnQuICovCitzdGF0aWMgaW50CitnZXRfYXJncyAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworICBpbnQgcmVzOworICBjaGFyICplbmRwOworICBhc3NlcnQgKGFyZ2MgPT0gMik7CisgIHJlcyA9IHN0cnRvbCAoYXJndlsxXSwgJmVuZHAsIDEwKTsKKyAgYXNzZXJ0IChhcmd2WzFdICE9IGVuZHApOworICBhc3NlcnQgKDAgPD0gcmVzKTsKKyAgYXNzZXJ0IChyZXMgPD0gSU5UX01BWCk7CisgIGFzc2VydCAoZXJybm8gIT0gRVJBTkdFKTsKKyAgcmV0dXJuIHJlczsKK30KKworaW50CittYWluIChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisgIFlZU1RZUEUgeXlsdmFsX2luaXQgPSBnZXRfYXJncyAoYXJnYywgYXJndik7CisgIGludCBzdGF0dXMgPSAwOworICBpbnQgY291bnQ7CisgIHl5cHN0YXRlICpwcyA9IHl5cHN0YXRlX25ldyAoKTsKKyAgeXlkZWJ1ZyA9IDE7CisgIGZvciAoY291bnQgPSAwOyBjb3VudCA8IDI7ICsrY291bnQpCisgICAgeworICAgICAgaW50IG5ld19zdGF0dXM7CisgICAgICB5eWx2YWwgPSB5eWx2YWxfaW5pdDsKKyAgICAgIG5ld19zdGF0dXMgPSB5eXB1bGxfcGFyc2UgKHBzKTsKKyAgICAgIGlmIChjb3VudCA9PSAwKQorICAgICAgICBzdGF0dXMgPSBuZXdfc3RhdHVzOworICAgICAgZWxzZQorICAgICAgICBhc3NlcnQgKG5ld19zdGF0dXMgPT0gc3RhdHVzKTsKKyAgICB9CisgIHl5cHN0YXRlX2RlbGV0ZSAocHMpOworICByZXR1cm4gc3RhdHVzOworfQorX0FURU9GCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NDkxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAidG9ydHVyZS5hdDo0OTEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjQ5MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NDkxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IiAidG9ydHVyZS5hdDo0OTEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjQ5MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjQ5MTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInRvcnR1cmUuYXQ6NDkxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NDkxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo0OTE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJ0b3J0dXJlLmF0OjQ5MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjQ5MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NDkxOiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJ0b3J0dXJlLmF0OjQ5MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo0OTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NDkxOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAidG9ydHVyZS5hdDo0OTEiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NDkxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICAxMDkgKSAjIDEwOS4gdG9ydHVyZS5hdDo0NzE6IEV4cGxvZGluZyB0aGUgU3RhY2sgU2l6ZSB3aXRoIE1hbGxvYwotICAgIGF0X3NldHVwX2xpbmU9J3RvcnR1cmUuYXQ6NDcxJwotICAgIGF0X2Rlc2M9J0V4cGxvZGluZyB0aGUgU3RhY2sgU2l6ZSB3aXRoIE1hbGxvYycKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiMTA5OiBFeHBsb2RpbmcgdGhlIFN0YWNrIFNpemUgd2l0aCBNYWxsb2MgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiMTA5LiB0b3J0dXJlLmF0OjQ3MTogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NDkxOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyIgInRvcnR1cmUuYXQ6NDkxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjQ5MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NDk0OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbG9nLWZkPTFcIiBcJFBSRVBBUlNFUiAuL2lucHV0IDIwIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sb2ctZmQ9MVwiICRQUkVQQVJTRVIgLi9pbnB1dCAyMCIgInRvcnR1cmUuYXQ6NDk0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbG9nLWZkPTEiICRQUkVQQVJTRVIgLi9pbnB1dCAyMAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo0OTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo0OTQ6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAidG9ydHVyZS5hdDo0OTQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjQ5NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NDk2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbG9nLWZkPTFcIiBcJFBSRVBBUlNFUiAuL2lucHV0IDkwMCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbG9nLWZkPTFcIiAkUFJFUEFSU0VSIC4vaW5wdXQgOTAwIiAidG9ydHVyZS5hdDo0OTYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sb2ctZmQ9MSIgJFBSRVBBUlNFUiAuL2lucHV0IDkwMAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo0OTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo0OTY6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAidG9ydHVyZS5hdDo0OTYiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjQ5NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NDk4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbG9nLWZkPTFcIiBcJFBSRVBBUlNFUiAuL2lucHV0IDEwMDAwIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sb2ctZmQ9MVwiICRQUkVQQVJTRVIgLi9pbnB1dCAxMDAwMCIgInRvcnR1cmUuYXQ6NDk4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbG9nLWZkPTEiICRQUkVQQVJTRVIgLi9pbnB1dCAxMDAwMAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAyICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo0OTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo0OTg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAidG9ydHVyZS5hdDo0OTgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjQ5OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yNTcKKyNBVF9TVEFSVF8yNTgKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyNTggJ3RvcnR1cmUuYXQ6NTEyJyBcCisgICJFeHBsb2RpbmcgdGhlIFN0YWNrIFNpemUgd2l0aCBNYWxsb2MiICIgICAgICAgICAgICIgMTUKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyNTguICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisKIAogCiAjIEEgZ3JhbW1hciBvZiBwYXJlbnMgZ3Jvd2luZyB0aGUgc3RhY2sgdGhhbmtzIHRvIHJpZ2h0IHJlY3Vyc2lvbi4KICMgZXhwOgogY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKICV7CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTU0NzIzLDIxMSArMTMwMzY0LDU4NiBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2RlZmluZSBZWVNUQUNLX1VTRV9BTExPQ0EgMAogICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKLSAgc3RhdGljIHZvaWQgeXllcnJvciAoY29uc3QgY2hhciAqbXNnKTsKKyAgc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CiAlfQorCiAlZXJyb3ItdmVyYm9zZQogJWRlYnVnCiAldG9rZW4gV0FJVF9GT1JfRU9GCiAlJQogZXhwOiBXQUlUX0ZPUl9FT0YgZXhwIHwgOwogJSUKLXN0YXRpYyB2b2lkCi15eWVycm9yIChjb25zdCBjaGFyICptc2cpCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCiB7CiAgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOwogfQotCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CiBzdGF0aWMgaW50CiB5eWxleCAodm9pZCkKIHsKKyAgYXNzZXJ0ICgwIDw9IHl5bHZhbCk7CiAgIGlmICh5eWx2YWwtLSkKICAgICByZXR1cm4gV0FJVF9GT1JfRU9GOwogICBlbHNlCiAgICAgcmV0dXJuIEVPRjsKIH0KIAorLyogUmV0dXJuIGFyZ3ZbMV0gYXMgYW4gaW50LiAqLworc3RhdGljIGludAorZ2V0X2FyZ3MgKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKyAgaW50IHJlczsKKyAgY2hhciAqZW5kcDsKKyAgYXNzZXJ0IChhcmdjID09IDIpOworICByZXMgPSBzdHJ0b2wgKGFyZ3ZbMV0sICZlbmRwLCAxMCk7CisgIGFzc2VydCAoYXJndlsxXSAhPSBlbmRwKTsKKyAgYXNzZXJ0ICgwIDw9IHJlcyk7CisgIGFzc2VydCAocmVzIDw9IElOVF9NQVgpOworICBhc3NlcnQgKGVycm5vICE9IEVSQU5HRSk7CisgIHJldHVybiByZXM7Cit9CisKIGludAogbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewotICBjaGFyICplbmRwOwotICBpZiAoYXJnYyAhPSAyKQotICAgIGFib3J0ICgpOwotICB5eWx2YWwgPSBzdHJ0b2wgKGFyZ3ZbMV0sICZlbmRwLCAxMCk7Ci0gIGlmICghIChhcmd2WzFdICE9IGVuZHAKLQkgJiYgMCA8PSB5eWx2YWwgJiYgeXlsdmFsIDw9IElOVF9NQVgKLQkgJiYgZXJybm8gIT0gRVJBTkdFKSkKLSAgICBhYm9ydCAoKTsKKyAgWVlTVFlQRSB5eWx2YWxfaW5pdCA9IGdldF9hcmdzIChhcmdjLCBhcmd2KTsKKyAgaW50IHN0YXR1cyA9IDA7CisgIGludCBjb3VudDsKICAgeXlkZWJ1ZyA9IDE7Ci0gIHJldHVybiB5eXBhcnNlICgpOworICBmb3IgKGNvdW50ID0gMDsgY291bnQgPCAyOyArK2NvdW50KQorICAgIHsKKyAgICAgIGludCBuZXdfc3RhdHVzOworICAgICAgeXlsdmFsID0geXlsdmFsX2luaXQ7CisgICAgICBuZXdfc3RhdHVzID0geXlwYXJzZSAoKTsKKyAgICAgIGlmIChjb3VudCA9PSAwKQorICAgICAgICBzdGF0dXMgPSBuZXdfc3RhdHVzOworICAgICAgZWxzZQorICAgICAgICBhc3NlcnQgKG5ld19zdGF0dXMgPT0gc3RhdHVzKTsKKyAgICB9CisgIHJldHVybiBzdGF0dXM7CiB9CiBfQVRFT0YKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJ0b3J0dXJlLmF0OjQ3MzogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgotZWNobyB0b3J0dXJlLmF0OjQ3MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInRvcnR1cmUuYXQ6NDczOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NTE2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAidG9ydHVyZS5hdDo1MTYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjUxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NTE2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IiAidG9ydHVyZS5hdDo1MTYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjUxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjUxNjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInRvcnR1cmUuYXQ6NTE2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NTE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo1MTY6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJ0b3J0dXJlLmF0OjUxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjUxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NTE2OiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJ0b3J0dXJlLmF0OjUxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo1MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInRvcnR1cmUuYXQ6NDczOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgotZWNobyB0b3J0dXJlLmF0OjQ3MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAidG9ydHVyZS5hdDo0NzM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjUxNjogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgInRvcnR1cmUuYXQ6NTE2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjUxNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjUxNjogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJ0b3J0dXJlLmF0OjUxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo1MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAogIyBCZWxvdyB0aGUgbGltaXQgb2YgMjAwLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJ0b3J0dXJlLmF0OjQ3NjogXCRQUkVQQVJTRVIgLi9pbnB1dCAyMCIKLWVjaG8gdG9ydHVyZS5hdDo0NzYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9pbnB1dCAyMCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJ0b3J0dXJlLmF0OjQ3NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NTE5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbG9nLWZkPTFcIiBcJFBSRVBBUlNFUiAuL2lucHV0IDIwIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sb2ctZmQ9MVwiICRQUkVQQVJTRVIgLi9pbnB1dCAyMCIgInRvcnR1cmUuYXQ6NTE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbG9nLWZkPTEiICRQUkVQQVJTRVIgLi9pbnB1dCAyMAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo1MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo1MTk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAidG9ydHVyZS5hdDo1MTkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjUxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKICMgVHdvIGVubGFyZ2VtZW50czogMiAqIDIgKiAyMDAuCi0kYXRfdHJhY2VvZmYKLWVjaG8gInRvcnR1cmUuYXQ6NDc4OiBcJFBSRVBBUlNFUiAuL2lucHV0IDkwMCIKLWVjaG8gdG9ydHVyZS5hdDo0NzggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9pbnB1dCA5MDAgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAidG9ydHVyZS5hdDo0Nzg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjUyMjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxvZy1mZD0xXCIgXCRQUkVQQVJTRVIgLi9pbnB1dCA5MDAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxvZy1mZD0xXCIgJFBSRVBBUlNFUiAuL2lucHV0IDkwMCIgInRvcnR1cmUuYXQ6NTIyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbG9nLWZkPTEiICRQUkVQQVJTRVIgLi9pbnB1dCA5MDAKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NTIyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NTIyOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInRvcnR1cmUuYXQ6NTIyIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo1MjIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAjIEZhaWxzOiBiZXlvbmQgdGhlIGxpbWl0IG9mIDEwLDAwMCAod2hpY2ggd2UgZG9uJ3QgcmVhY2ggYW55d2F5IHNpbmNlIHdlCiAjIG11bHRpcGx5IGJ5IHR3byBzdGFydGluZyBhdCAyMDAgPT4gNTEyMCBpcyB0aGUgcG9zc2libGUpLgotJGF0X3RyYWNlb2ZmCi1lY2hvICJ0b3J0dXJlLmF0OjQ4MTogXCRQUkVQQVJTRVIgLi9pbnB1dCAxMDAwMCIKLWVjaG8gdG9ydHVyZS5hdDo0ODEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9pbnB1dCAxMDAwMCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDIpIDs7Ci0gICAqKSBlY2hvICJ0b3J0dXJlLmF0OjQ4MTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAyIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NTI2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbG9nLWZkPTFcIiBcJFBSRVBBUlNFUiAuL2lucHV0IDEwMDAwIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sb2ctZmQ9MVwiICRQUkVQQVJTRVIgLi9pbnB1dCAxMDAwMCIgInRvcnR1cmUuYXQ6NTI2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbG9nLWZkPTEiICRQUkVQQVJTRVIgLi9pbnB1dCAxMDAwMAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAyICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo1MjYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo1MjY6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAidG9ydHVyZS5hdDo1MjYiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjUyNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7CiAKIAotICBiYW5uZXItMTQgKSAjIEJhbm5lciAxNC4gZXhpc3RpbmcuYXQ6MjEKLSAgICBjYXQgPDxcX0FURU9GCisjIEEgZ3JhbW1hciBvZiBwYXJlbnMgZ3Jvd2luZyB0aGUgc3RhY2sgdGhhbmtzIHRvIHJpZ2h0IHJlY3Vyc2lvbi4KKyMgZXhwOgorY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKLUV4aXN0aW5nIEdyYW1tYXJzLgorJXsKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjZGVmaW5lIFlZU1RBQ0tfVVNFX0FMTE9DQSAwCisgIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOworICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyV9CislZGVmaW5lIGFwaS5wdXNoLXB1bGwgYm90aAogCislZXJyb3ItdmVyYm9zZQorJWRlYnVnCisldG9rZW4gV0FJVF9GT1JfRU9GCislJQorZXhwOiBXQUlUX0ZPUl9FT0YgZXhwIHwgOworJSUKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitzdGF0aWMgaW50Cit5eWxleCAodm9pZCkKK3sKKyAgYXNzZXJ0ICgwIDw9IHl5bHZhbCk7CisgIGlmICh5eWx2YWwtLSkKKyAgICByZXR1cm4gV0FJVF9GT1JfRU9GOworICBlbHNlCisgICAgcmV0dXJuIEVPRjsKK30KKworLyogUmV0dXJuIGFyZ3ZbMV0gYXMgYW4gaW50LiAqLworc3RhdGljIGludAorZ2V0X2FyZ3MgKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKyAgaW50IHJlczsKKyAgY2hhciAqZW5kcDsKKyAgYXNzZXJ0IChhcmdjID09IDIpOworICByZXMgPSBzdHJ0b2wgKGFyZ3ZbMV0sICZlbmRwLCAxMCk7CisgIGFzc2VydCAoYXJndlsxXSAhPSBlbmRwKTsKKyAgYXNzZXJ0ICgwIDw9IHJlcyk7CisgIGFzc2VydCAocmVzIDw9IElOVF9NQVgpOworICBhc3NlcnQgKGVycm5vICE9IEVSQU5HRSk7CisgIHJldHVybiByZXM7Cit9CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworICBZWVNUWVBFIHl5bHZhbF9pbml0ID0gZ2V0X2FyZ3MgKGFyZ2MsIGFyZ3YpOworICBpbnQgc3RhdHVzID0gMDsKKyAgaW50IGNvdW50OworICB5eXBzdGF0ZSAqcHMgPSB5eXBzdGF0ZV9uZXcgKCk7CisgIHl5ZGVidWcgPSAxOworICBmb3IgKGNvdW50ID0gMDsgY291bnQgPCAyOyArK2NvdW50KQorICAgIHsKKyAgICAgIGludCBuZXdfc3RhdHVzOworICAgICAgeXlsdmFsID0geXlsdmFsX2luaXQ7CisgICAgICBuZXdfc3RhdHVzID0geXlwdWxsX3BhcnNlIChwcyk7CisgICAgICBpZiAoY291bnQgPT0gMCkKKyAgICAgICAgc3RhdHVzID0gbmV3X3N0YXR1czsKKyAgICAgIGVsc2UKKyAgICAgICAgYXNzZXJ0IChuZXdfc3RhdHVzID09IHN0YXR1cyk7CisgICAgfQorICB5eXBzdGF0ZV9kZWxldGUgKHBzKTsKKyAgcmV0dXJuIHN0YXR1czsKK30KIF9BVEVPRgotICAgIDs7Ci0KLSAgMTEwICkgIyAxMTAuIGV4aXN0aW5nLmF0OjI2OiBHTlUgQVdLIEdyYW1tYXIKLSAgICBhdF9zZXR1cF9saW5lPSdleGlzdGluZy5hdDoyNicKLSAgICBhdF9kZXNjPSdHTlUgQVdLIEdyYW1tYXInCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjExMDogR05VIEFXSyBHcmFtbWFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjExMC4gZXhpc3RpbmcuYXQ6MjY6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KIAogCi0jIFdlIGhhdmUgYmVlbiBjYXJlZnVsIHRvIHN0cmlwIGFsbCB0aGUgYWN0aW9ucyBleGNlcHRzIHRoZQotIyBtaWQtcnVsZSBhY3Rpb25zLiAgV2UgcmVseSBvbiAlZXhwZWN0IHRvIGNoZWNrIHRoYXQgdGhlcmUgYXJlCi0jIGluZGVlZCA2NSBTUiBjb25mbGljdHMuCi0jCi0jIEJpc29uIHdhcyBvbmNlIHdyb25nLCBkdWUgdG8gYW4gaW5jb3JyZWN0IGNvbXB1dGF0aW9uIG9mIG51bGxhYmxlLgotIyBJdCByZXBvcnRlZCA0ODUgU1IgY29uZmxpY3RzIQorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NTI5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAidG9ydHVyZS5hdDo1MjkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjUyOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NTI5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IiAidG9ydHVyZS5hdDo1MjkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjUyOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjUyOTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInRvcnR1cmUuYXQ6NTI5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NTI5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo1Mjk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJ0b3J0dXJlLmF0OjUyOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjUyOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NTI5OiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJ0b3J0dXJlLmF0OjUyOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo1MjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjUyOTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgInRvcnR1cmUuYXQ6NTI5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjUyOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjUyOTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJ0b3J0dXJlLmF0OjUyOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo1MjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjUzMjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxvZy1mZD0xXCIgXCRQUkVQQVJTRVIgLi9pbnB1dCAyMCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbG9nLWZkPTFcIiAkUFJFUEFSU0VSIC4vaW5wdXQgMjAiICJ0b3J0dXJlLmF0OjUzMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxvZy1mZD0xIiAkUFJFUEFSU0VSIC4vaW5wdXQgMjAKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NTMyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NTMyOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInRvcnR1cmUuYXQ6NTMyIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo1MzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjUzNDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxvZy1mZD0xXCIgXCRQUkVQQVJTRVIgLi9pbnB1dCA5MDAiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxvZy1mZD0xXCIgJFBSRVBBUlNFUiAuL2lucHV0IDkwMCIgInRvcnR1cmUuYXQ6NTM0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbG9nLWZkPTEiICRQUkVQQVJTRVIgLi9pbnB1dCA5MDAKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NTM0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NTM0OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInRvcnR1cmUuYXQ6NTM0IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo1MzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci90b3J0dXJlLmF0OjUzNjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxvZy1mZD0xXCIgXCRQUkVQQVJTRVIgLi9pbnB1dCAxMDAwMCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbG9nLWZkPTFcIiAkUFJFUEFSU0VSIC4vaW5wdXQgMTAwMDAiICJ0b3J0dXJlLmF0OjUzNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxvZy1mZD0xIiAkUFJFUEFSU0VSIC4vaW5wdXQgMTAwMDAKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMiAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NTM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3RvcnR1cmUuYXQ6NTM2OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInRvcnR1cmUuYXQ6NTM2IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvdG9ydHVyZS5hdDo1MzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjU4CisjQVRfU1RBUlRfMjU5CithdF9mbl9ncm91cF9iYW5uZXIgMjU5ICdleGlzdGluZy5hdDo3OScgXAorICAiR05VIEFXSyAzLjEuMCBHcmFtbWFyOiBMQUxSKDEpIiAiICAgICAgICAgICAgICAgICAiIDE2CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjU5LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKIAogY2F0ID5pbnB1dC55IDw8J19BVEVPRicKLSVleHBlY3QgNjUKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVjb2RlIHsKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKK30KKworJWRlZmluZSBsci50eXBlIGxhbHIKKyVlcnJvci12ZXJib3NlCiAKICV0b2tlbiBGVU5DX0NBTEwgTkFNRSBSRUdFWFAKICV0b2tlbiBFUlJPUgpAQCAtNTQ5NjIsOCArMTMwOTc4LDExIEBACiAlbGVmdCBJTkNSRU1FTlQgREVDUkVNRU5UCiAlbGVmdCAnJCcKICVsZWZ0ICcoJyAnKScKKworCiAlJQogCisKIHN0YXJ0CiAJOiBvcHRfbmxzIHByb2dyYW0gb3B0X25scwogCTsKQEAgLTU1MjQxLDYyICsxMzEyNjAsMTg0MSBAQAogY29tbWEJOiAnLCcgb3B0X25scwogCTsKIAorCiAlJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KK3N0YXRpYyBpbnQKK3l5bGV4ICh2b2lkKQoreworICBzdGF0aWMgaW50IGNvbnN0IGlucHV0W10gPSB7CisgICAgTEVYX0dFVExJTkUsICckJywgJyEnLCBZTlVNQkVSLCAnKicsIFlOVU1CRVIsICc7JywgMAorICB9OworICBzdGF0aWMgaW50IGNvbnN0ICppbnB1dHAgPSBpbnB1dDsKKyAgcmV0dXJuICppbnB1dHArKzsKK30KKworaW50CittYWluICh2b2lkKQoreworICByZXR1cm4geXlwYXJzZSAoKTsKK30KIF9BVEVPRgogCiAKLSMgUGFzcyBwbGVudHkgb2Ygb3B0aW9ucywgdG8gZXhlcmNpc2UgcGxlbnR5IG9mIGNvZGUsIGV2ZW4gaWYgd2UKLSMgZG9uJ3QgYWN0dWFsbHkgY2hlY2sgdGhlIG91dHB1dC4gIEJ1dCBTRUdWIGlzIHdhdGNoaW5nIHVzLCBhbmQKLSMgc28gbWlnaHQgZG8gZG1hbGxvYy4KLSRhdF90cmFjZW9mZgotZWNobyAiZXhpc3RpbmcuYXQ6MzU2OiBiaXNvbiAtLXZlcmJvc2UgLS1kZWZpbmVzIGlucHV0LnkiCi1lY2hvIGV4aXN0aW5nLmF0OjM1NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLS12ZXJib3NlIC0tZGVmaW5lcyBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImV4aXN0aW5nLmF0OjM1NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKyMgSW4gc29tZSB2ZXJzaW9ucyBvZiBBdXRvY29uZiwgQVRfQ0hFQ0sgaW52b2tlcyBBU19FU0NBUEUgYmVmb3JlCisjIGV4cGFuZGluZyBtYWNyb3MsIHNvIGl0IGNvcnJ1cHRzIHNvbWUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZQorIyBtYWNyb3MuICBUbyBhdm9pZCB0aGlzLCBleHBhbmQgbm93IGFuZCBwYXNzIGl0IHRoZSByZXN1bHQgd2l0aCBwcm9wZXIKKyMgc3RyaW5nIHF1b3RhdGlvbi4gIEFzc3VtZSBhcmdzIDcgdGhyb3VnaCAxMiBleHBhbmQgdG8gcHJvcGVybHkgcXVvdGVkCisjIHN0cmluZ3MuCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6Nzk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImV4aXN0aW5nLmF0Ojc5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIgImV4aXN0aW5nLmF0Ojc5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImV4aXN0aW5nLmF0Ojc5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6Nzk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJleGlzdGluZy5hdDo3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc5OiBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImV4aXN0aW5nLmF0Ojc5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueTogY29uZmxpY3RzOiA2NSBzaGlmdC9yZWR1Y2UKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKIAotICAxMTEgKSAjIDExMS4gZXhpc3RpbmcuYXQ6MzY0OiBHTlUgQ2ltIEdyYW1tYXIKLSAgICBhdF9zZXR1cF9saW5lPSdleGlzdGluZy5hdDozNjQnCi0gICAgYXRfZGVzYz0nR05VIENpbSBHcmFtbWFyJwotICAgICRhdF9xdWlldCAkRUNIT19OICIxMTE6IEdOVSBDaW0gR3JhbW1hciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIxMTEuIGV4aXN0aW5nLmF0OjM2NDogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc5OiBzZWQgLW4gJ3MvXlN0YXRlIC8vcCcgaW5wdXQub3V0cHV0IHwgdGFpbCAtMSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBzaGVsbCBwaXBlbGluZScgImV4aXN0aW5nLmF0Ojc5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAtbiAncy9eU3RhdGUgLy9wJyBpbnB1dC5vdXRwdXQgfCB0YWlsIC0xCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMzE5CisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotIyBHTlUgQ2ltLCB0aGUgR05VIFNpbXVsYSA4NyBDb21waWxlci4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OTogZGlmZiAtdSAvZGV2L251bGwgL2Rldi9udWxsIHx8IGV4aXQgNzciCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJleGlzdGluZy5hdDo3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBkaWZmIC11IC9kZXYvbnVsbCAvZGV2L251bGwgfHwgZXhpdCA3NworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotIyBCaXNvbiB3YXMgb25jZSB3cm9uZywgZHVlIHRvIGFuIGluY29ycmVjdCBjb21wdXRhdGlvbiBvZiB0aGUgUlIgY29uZmxpY3RzLgotIyBJdCByZXBvcnRlZCA4MCBTUiAmJiA5OSBSUiBjb25mbGljdHMgaW5zdGVhZCBvZiA3OC8xMCEhIQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6Nzk6IHNlZCAncy9eJWRlZmluZSBsci50eXBlIC4qXCQvLycgaW5wdXQueSA+IGlucHV0LWxhbHIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAic2VkICdzL14lZGVmaW5lIGxyLnR5cGUgLiokLy8nIGlucHV0LnkgPiBpbnB1dC1sYWxyLnkiICJleGlzdGluZy5hdDo3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgJ3MvXiVkZWZpbmUgbHIudHlwZSAuKiQvLycgaW5wdXQueSA+IGlucHV0LWxhbHIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6Nzk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgaW5wdXQtbGFsci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiZXhpc3RpbmcuYXQ6NzkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1yZXBvcnQ9YWxsIGlucHV0LWxhbHIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIGlucHV0LWxhbHIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgaW5wdXQtbGFsci55IiAiZXhpc3RpbmcuYXQ6NzkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIGlucHV0LWxhbHIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6Nzk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJleGlzdGluZy5hdDo3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiZXhpc3RpbmcuYXQ6NzkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OTogYmlzb24gLS1yZXBvcnQ9YWxsIGlucHV0LWxhbHIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImV4aXN0aW5nLmF0Ojc5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC0tcmVwb3J0PWFsbCBpbnB1dC1sYWxyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6Nzk6IGRpZmYgLXUgaW5wdXQtbGFsci5vdXRwdXQgaW5wdXQub3V0cHV0IFxcCisgICAgICAgICAgIHwgc2VkIC1uICcvXkBALyxcJHAnIHwgc2VkICdzL14gXCQvLyciCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJleGlzdGluZy5hdDo3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBkaWZmIC11IGlucHV0LWxhbHIub3V0cHV0IGlucHV0Lm91dHB1dCBcCisgICAgICAgICAgIHwgc2VkIC1uICcvXkBALywkcCcgfCBzZWQgJ3MvXiAkLy8nCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIENhbm9uaWNhbCBMUiBnZW5lcmF0ZXMgdmVyeSBsYXJnZSB0YWJsZXMsIHJlc3VsdGluZyBpbiB2ZXJ5IGxvbmcKKyMgZmlsZXMgd2l0aCAjbGluZSBkaXJlY3RpdmVzIHRoYXQgbWF5IG92ZXJmbG93IHdoYXQgdGhlIHN0YW5kYXJkcworIyAoQzkwIGFuZCBDKys5OCkgZ3VhcmFudGVlOiAzMjc2Ny4gIEluIHRoYXQgY2FzZSwgR0NDJ3MgLXBlZGFudGljCisjIHdpbGwgaXNzdWUgYW4gZXJyb3IuCisjCisjIFRoZXJlIGlzIG5vICIiIGFyb3VuZCBgd2NgIHNpbmNlIHNvbWUgaW5kZW50IHRoZSByZXN1bHQuCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImV4aXN0aW5nLmF0Ojc5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJleGlzdGluZy5hdDo3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OTogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJleGlzdGluZy5hdDo3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJleGlzdGluZy5hdDo3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBORVdMSU5FIG9yICd7JyBvciAnOycKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yNTkKKyNBVF9TVEFSVF8yNjAKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyNjAgJ2V4aXN0aW5nLmF0Ojc5JyBcCisgICJHTlUgQVdLIDMuMS4wIEdyYW1tYXI6IElFTFIoMSkiICIgICAgICAgICAgICAgICAgICIgMTYKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyNjAuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKwogCiBjYXQgPmlucHV0LnkgPDwnX0FURU9GJwotJXVuaW9uIHt9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislY29kZSB7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgc3RhdGljIGludCB5eWxleCAodm9pZCk7Cit9CisKKyVkZWZpbmUgbHIudHlwZSBpZWxyCislZXJyb3ItdmVyYm9zZQorCisldG9rZW4gRlVOQ19DQUxMIE5BTUUgUkVHRVhQCisldG9rZW4gRVJST1IKKyV0b2tlbiBZTlVNQkVSIFlTVFJJTkcKKyV0b2tlbiBSRUxPUCBBUFBFTkRfT1AKKyV0b2tlbiBBU1NJR05PUCBNQVRDSE9QIE5FV0xJTkUgQ09OQ0FUX09QCisldG9rZW4gTEVYX0JFR0lOIExFWF9FTkQgTEVYX0lGIExFWF9FTFNFIExFWF9SRVRVUk4gTEVYX0RFTEVURQorJXRva2VuIExFWF9XSElMRSBMRVhfRE8gTEVYX0ZPUiBMRVhfQlJFQUsgTEVYX0NPTlRJTlVFCisldG9rZW4gTEVYX1BSSU5UIExFWF9QUklOVEYgTEVYX05FWFQgTEVYX0VYSVQgTEVYX0ZVTkNUSU9OCisldG9rZW4gTEVYX0dFVExJTkUgTEVYX05FWFRGSUxFCisldG9rZW4gTEVYX0lOCisldG9rZW4gTEVYX0FORCBMRVhfT1IgSU5DUkVNRU5UIERFQ1JFTUVOVAorJXRva2VuIExFWF9CVUlMVElOIExFWF9MRU5HVEgKKworLyogTG93ZXN0IHRvIGhpZ2hlc3QgKi8KKyVyaWdodCBBU1NJR05PUAorJXJpZ2h0ICc/JyAnOicKKyVsZWZ0IExFWF9PUgorJWxlZnQgTEVYX0FORAorJWxlZnQgTEVYX0dFVExJTkUKKyVub25hc3NvYyBMRVhfSU4KKyVsZWZ0IEZVTkNfQ0FMTCBMRVhfQlVJTFRJTiBMRVhfTEVOR1RICislbm9uYXNzb2MgJywnCislbm9uYXNzb2MgTUFUQ0hPUAorJW5vbmFzc29jIFJFTE9QICc8JyAnPicgJ3wnIEFQUEVORF9PUCBUV09XQVlJTworJWxlZnQgQ09OQ0FUX09QCislbGVmdCBZU1RSSU5HIFlOVU1CRVIKKyVsZWZ0ICcrJyAnLScKKyVsZWZ0ICcqJyAnLycgJyUnCislcmlnaHQgJyEnIFVOQVJZCislcmlnaHQgJ14nCislbGVmdCBJTkNSRU1FTlQgREVDUkVNRU5UCislbGVmdCAnJCcKKyVsZWZ0ICcoJyAnKScKKworCislJQorCisKK3N0YXJ0CisJOiBvcHRfbmxzIHByb2dyYW0gb3B0X25scworCTsKKworcHJvZ3JhbQorCTogcnVsZQorCXwgcHJvZ3JhbSBydWxlCisJfCBlcnJvcgorCXwgcHJvZ3JhbSBlcnJvcgorCXwgLyogZW1wdHkgKi8KKwk7CisKK3J1bGUKKwk6IExFWF9CRUdJTiB7fSBhY3Rpb24KKwl8IExFWF9FTkQge30gICBhY3Rpb24KKwl8IExFWF9CRUdJTiBzdGF0ZW1lbnRfdGVybQorCXwgTEVYX0VORCBzdGF0ZW1lbnRfdGVybQorCXwgcGF0dGVybiBhY3Rpb24KKwl8IGFjdGlvbgorCXwgcGF0dGVybiBzdGF0ZW1lbnRfdGVybQorCXwgZnVuY3Rpb25fcHJvbG9ndWUgZnVuY3Rpb25fYm9keQorCTsKKworZnVuY19uYW1lCisJOiBOQU1FCisJfCBGVU5DX0NBTEwKKwl8IGxleF9idWlsdGluCisJOworCitsZXhfYnVpbHRpbgorCTogTEVYX0JVSUxUSU4KKwl8IExFWF9MRU5HVEgKKwk7CisKK2Z1bmN0aW9uX3Byb2xvZ3VlCisJOiBMRVhfRlVOQ1RJT04ge30gZnVuY19uYW1lICcoJyBvcHRfcGFyYW1fbGlzdCByX3BhcmVuIG9wdF9ubHMKKwk7CisKK2Z1bmN0aW9uX2JvZHkKKwk6IGxfYnJhY2Ugc3RhdGVtZW50cyByX2JyYWNlIG9wdF9zZW1pIG9wdF9ubHMKKwl8IGxfYnJhY2Ugcl9icmFjZSBvcHRfc2VtaSBvcHRfbmxzCisJOworCitwYXR0ZXJuCisJOiBleHAKKwl8IGV4cCAnLCcgZXhwCisJOworCityZWdleHAKKwkvKgorCSAqIEluIHRoaXMgcnVsZSwgd2FudF9yZWdleHAgdGVsbHMgeXlsZXggdGhhdCB0aGUgbmV4dCB0aGluZworCSAqIGlzIGEgcmVnZXhwIHNvIGl0IHNob3VsZCByZWFkIHVwIHRvIHRoZSBjbG9zaW5nIHNsYXNoLgorCSAqLworCTogJy8nIHt9IFJFR0VYUCAnLycKKwk7CisKK2FjdGlvbgorCTogbF9icmFjZSBzdGF0ZW1lbnRzIHJfYnJhY2Ugb3B0X3NlbWkgb3B0X25scworCXwgbF9icmFjZSByX2JyYWNlIG9wdF9zZW1pIG9wdF9ubHMKKwk7CisKK3N0YXRlbWVudHMKKwk6IHN0YXRlbWVudAorCXwgc3RhdGVtZW50cyBzdGF0ZW1lbnQKKwl8IGVycm9yCisJfCBzdGF0ZW1lbnRzIGVycm9yCisJOworCitzdGF0ZW1lbnRfdGVybQorCTogbmxzCisJfCBzZW1pIG9wdF9ubHMKKwk7CisKK3N0YXRlbWVudAorCTogc2VtaSBvcHRfbmxzCisJfCBsX2JyYWNlIHJfYnJhY2UKKwl8IGxfYnJhY2Ugc3RhdGVtZW50cyByX2JyYWNlCisJfCBpZl9zdGF0ZW1lbnQKKwl8IExFWF9XSElMRSAnKCcgZXhwIHJfcGFyZW4gb3B0X25scyBzdGF0ZW1lbnQKKwl8IExFWF9ETyBvcHRfbmxzIHN0YXRlbWVudCBMRVhfV0hJTEUgJygnIGV4cCByX3BhcmVuIG9wdF9ubHMKKwl8IExFWF9GT1IgJygnIE5BTUUgTEVYX0lOIE5BTUUgcl9wYXJlbiBvcHRfbmxzIHN0YXRlbWVudAorCXwgTEVYX0ZPUiAnKCcgb3B0X2V4cCBzZW1pIG9wdF9ubHMgZXhwIHNlbWkgb3B0X25scyBvcHRfZXhwIHJfcGFyZW4gb3B0X25scyBzdGF0ZW1lbnQKKwl8IExFWF9GT1IgJygnIG9wdF9leHAgc2VtaSBvcHRfbmxzIHNlbWkgb3B0X25scyBvcHRfZXhwIHJfcGFyZW4gb3B0X25scyBzdGF0ZW1lbnQKKwl8IExFWF9CUkVBSyBzdGF0ZW1lbnRfdGVybQorCXwgTEVYX0NPTlRJTlVFIHN0YXRlbWVudF90ZXJtCisJfCBwcmludCAnKCcgZXhwcmVzc2lvbl9saXN0IHJfcGFyZW4gb3V0cHV0X3JlZGlyIHN0YXRlbWVudF90ZXJtCisJfCBwcmludCBvcHRfcmV4cHJlc3Npb25fbGlzdCBvdXRwdXRfcmVkaXIgc3RhdGVtZW50X3Rlcm0KKwl8IExFWF9ORVhUIHN0YXRlbWVudF90ZXJtCisJfCBMRVhfTkVYVEZJTEUgc3RhdGVtZW50X3Rlcm0KKwl8IExFWF9FWElUIG9wdF9leHAgc3RhdGVtZW50X3Rlcm0KKwl8IExFWF9SRVRVUk4ge30gb3B0X2V4cCBzdGF0ZW1lbnRfdGVybQorCXwgTEVYX0RFTEVURSBOQU1FICdbJyBleHByZXNzaW9uX2xpc3QgJ10nIHN0YXRlbWVudF90ZXJtCisJfCBMRVhfREVMRVRFIE5BTUUgIHN0YXRlbWVudF90ZXJtCisJfCBleHAgc3RhdGVtZW50X3Rlcm0KKwk7CisKK3ByaW50CisJOiBMRVhfUFJJTlQKKwl8IExFWF9QUklOVEYKKwk7CisKK2lmX3N0YXRlbWVudAorCTogTEVYX0lGICcoJyBleHAgcl9wYXJlbiBvcHRfbmxzIHN0YXRlbWVudAorCXwgTEVYX0lGICcoJyBleHAgcl9wYXJlbiBvcHRfbmxzIHN0YXRlbWVudAorCSAgICAgTEVYX0VMU0Ugb3B0X25scyBzdGF0ZW1lbnQKKwk7CisKK25scworCTogTkVXTElORQorCXwgbmxzIE5FV0xJTkUKKwk7CisKK29wdF9ubHMKKwk6IC8qIGVtcHR5ICovCisJfCBubHMKKwk7CisKK2lucHV0X3JlZGlyCisJOiAvKiBlbXB0eSAqLworCXwgJzwnIHNpbXBfZXhwCisJOworCitvdXRwdXRfcmVkaXIKKwk6IC8qIGVtcHR5ICovCisJfCAnPicgZXhwCisJfCBBUFBFTkRfT1AgZXhwCisJfCAnfCcgZXhwCisJfCBUV09XQVlJTyBleHAKKwk7CisKK29wdF9wYXJhbV9saXN0CisJOiAvKiBlbXB0eSAqLworCXwgcGFyYW1fbGlzdAorCTsKKworcGFyYW1fbGlzdAorCTogTkFNRQorCXwgcGFyYW1fbGlzdCBjb21tYSBOQU1FCisJfCBlcnJvcgorCXwgcGFyYW1fbGlzdCBlcnJvcgorCXwgcGFyYW1fbGlzdCBjb21tYSBlcnJvcgorCTsKKworLyogb3B0aW9uYWwgZXhwcmVzc2lvbiwgYXMgaW4gZm9yIGxvb3AgKi8KK29wdF9leHAKKwk6IC8qIGVtcHR5ICovCisJfCBleHAKKwk7CisKK29wdF9yZXhwcmVzc2lvbl9saXN0CisJOiAvKiBlbXB0eSAqLworCXwgcmV4cHJlc3Npb25fbGlzdAorCTsKKworcmV4cHJlc3Npb25fbGlzdAorCTogcmV4cAorCXwgcmV4cHJlc3Npb25fbGlzdCBjb21tYSByZXhwCisJfCBlcnJvcgorCXwgcmV4cHJlc3Npb25fbGlzdCBlcnJvcgorCXwgcmV4cHJlc3Npb25fbGlzdCBlcnJvciByZXhwCisJfCByZXhwcmVzc2lvbl9saXN0IGNvbW1hIGVycm9yCisJOworCitvcHRfZXhwcmVzc2lvbl9saXN0CisJOiAvKiBlbXB0eSAqLworCXwgZXhwcmVzc2lvbl9saXN0CisJOworCitleHByZXNzaW9uX2xpc3QKKwk6IGV4cAorCXwgZXhwcmVzc2lvbl9saXN0IGNvbW1hIGV4cAorCXwgZXJyb3IKKwl8IGV4cHJlc3Npb25fbGlzdCBlcnJvcgorCXwgZXhwcmVzc2lvbl9saXN0IGVycm9yIGV4cAorCXwgZXhwcmVzc2lvbl9saXN0IGNvbW1hIGVycm9yCisJOworCisvKiBFeHByZXNzaW9ucywgbm90IGluY2x1ZGluZyB0aGUgY29tbWEgb3BlcmF0b3IuICAqLworZXhwCTogdmFyaWFibGUgQVNTSUdOT1Age30gZXhwCisJfCAnKCcgZXhwcmVzc2lvbl9saXN0IHJfcGFyZW4gTEVYX0lOIE5BTUUKKwl8IGV4cCAnfCcgTEVYX0dFVExJTkUgb3B0X3ZhcmlhYmxlCisJfCBleHAgVFdPV0FZSU8gTEVYX0dFVExJTkUgb3B0X3ZhcmlhYmxlCisJfCBMRVhfR0VUTElORSBvcHRfdmFyaWFibGUgaW5wdXRfcmVkaXIKKwl8IGV4cCBMRVhfQU5EIGV4cAorCXwgZXhwIExFWF9PUiBleHAKKwl8IGV4cCBNQVRDSE9QIGV4cAorCXwgcmVnZXhwCisJfCAnIScgcmVnZXhwICVwcmVjIFVOQVJZCisJfCBleHAgTEVYX0lOIE5BTUUKKwl8IGV4cCBSRUxPUCBleHAKKwl8IGV4cCAnPCcgZXhwCisJfCBleHAgJz4nIGV4cAorCXwgZXhwICc/JyBleHAgJzonIGV4cAorCXwgc2ltcF9leHAKKwl8IGV4cCBzaW1wX2V4cCAlcHJlYyBDT05DQVRfT1AKKwk7CisKK3JleHAKKwk6IHZhcmlhYmxlIEFTU0lHTk9QIHt9IHJleHAKKwl8IHJleHAgTEVYX0FORCByZXhwCisJfCByZXhwIExFWF9PUiByZXhwCisJfCBMRVhfR0VUTElORSBvcHRfdmFyaWFibGUgaW5wdXRfcmVkaXIKKwl8IHJlZ2V4cAorCXwgJyEnIHJlZ2V4cCAlcHJlYyBVTkFSWQorCXwgcmV4cCBNQVRDSE9QIHJleHAKKwl8IHJleHAgTEVYX0lOIE5BTUUKKwl8IHJleHAgUkVMT1AgcmV4cAorCXwgcmV4cCAnPycgcmV4cCAnOicgcmV4cAorCXwgc2ltcF9leHAKKwl8IHJleHAgc2ltcF9leHAgJXByZWMgQ09OQ0FUX09QCisJOworCitzaW1wX2V4cAorCTogbm9uX3Bvc3Rfc2ltcF9leHAKKwkvKiBCaW5hcnkgb3BlcmF0b3JzIGluIG9yZGVyIG9mIGRlY3JlYXNpbmcgcHJlY2VkZW5jZS4gICovCisJfCBzaW1wX2V4cCAnXicgc2ltcF9leHAKKwl8IHNpbXBfZXhwICcqJyBzaW1wX2V4cAorCXwgc2ltcF9leHAgJy8nIHNpbXBfZXhwCisJfCBzaW1wX2V4cCAnJScgc2ltcF9leHAKKwl8IHNpbXBfZXhwICcrJyBzaW1wX2V4cAorCXwgc2ltcF9leHAgJy0nIHNpbXBfZXhwCisJfCB2YXJpYWJsZSBJTkNSRU1FTlQKKwl8IHZhcmlhYmxlIERFQ1JFTUVOVAorCTsKKworbm9uX3Bvc3Rfc2ltcF9leHAKKwk6ICchJyBzaW1wX2V4cCAlcHJlYyBVTkFSWQorCXwgJygnIGV4cCByX3BhcmVuCisJfCBMRVhfQlVJTFRJTgorCSAgJygnIG9wdF9leHByZXNzaW9uX2xpc3Qgcl9wYXJlbgorCXwgTEVYX0xFTkdUSCAnKCcgb3B0X2V4cHJlc3Npb25fbGlzdCByX3BhcmVuCisJfCBMRVhfTEVOR1RICisJfCBGVU5DX0NBTEwgJygnIG9wdF9leHByZXNzaW9uX2xpc3Qgcl9wYXJlbgorCXwgdmFyaWFibGUKKwl8IElOQ1JFTUVOVCB2YXJpYWJsZQorCXwgREVDUkVNRU5UIHZhcmlhYmxlCisJfCBZTlVNQkVSCisJfCBZU1RSSU5HCisJfCAnLScgc2ltcF9leHAgICAgJXByZWMgVU5BUlkKKwl8ICcrJyBzaW1wX2V4cCAgICAlcHJlYyBVTkFSWQorCTsKKworb3B0X3ZhcmlhYmxlCisJOiAvKiBlbXB0eSAqLworCXwgdmFyaWFibGUKKwk7CisKK3ZhcmlhYmxlCisJOiBOQU1FCisJfCBOQU1FICdbJyBleHByZXNzaW9uX2xpc3QgJ10nCisJfCAnJCcgbm9uX3Bvc3Rfc2ltcF9leHAKKwk7CisKK2xfYnJhY2UKKwk6ICd7JyBvcHRfbmxzCisJOworCityX2JyYWNlCisJOiAnfScgb3B0X25scworCTsKKworcl9wYXJlbgorCTogJyknCisJOworCitvcHRfc2VtaQorCTogLyogZW1wdHkgKi8KKwl8IHNlbWkKKwk7CisKK3NlbWkKKwk6ICc7JworCTsKKworY29tbWEJOiAnLCcgb3B0X25scworCTsKKworCislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KK3N0YXRpYyBpbnQKK3l5bGV4ICh2b2lkKQoreworICBzdGF0aWMgaW50IGNvbnN0IGlucHV0W10gPSB7CisgICAgTEVYX0dFVExJTkUsICckJywgJyEnLCBZTlVNQkVSLCAnKicsIFlOVU1CRVIsICc7JywgMAorICB9OworICBzdGF0aWMgaW50IGNvbnN0ICppbnB1dHAgPSBpbnB1dDsKKyAgcmV0dXJuICppbnB1dHArKzsKK30KKworaW50CittYWluICh2b2lkKQoreworICByZXR1cm4geXlwYXJzZSAoKTsKK30KK19BVEVPRgorCisKKworIyBJbiBzb21lIHZlcnNpb25zIG9mIEF1dG9jb25mLCBBVF9DSEVDSyBpbnZva2VzIEFTX0VTQ0FQRSBiZWZvcmUKKyMgZXhwYW5kaW5nIG1hY3Jvcywgc28gaXQgY29ycnVwdHMgc29tZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlCisjIG1hY3Jvcy4gIFRvIGF2b2lkIHRoaXMsIGV4cGFuZCBub3cgYW5kIHBhc3MgaXQgdGhlIHJlc3VsdCB3aXRoIHByb3BlcgorIyBzdHJpbmcgcXVvdGF0aW9uLiAgQXNzdW1lIGFyZ3MgNyB0aHJvdWdoIDEyIGV4cGFuZCB0byBwcm9wZXJseSBxdW90ZWQKKyMgc3RyaW5ncy4KKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiZXhpc3RpbmcuYXQ6NzkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6Nzk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IiAiZXhpc3RpbmcuYXQ6NzkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiZXhpc3RpbmcuYXQ6NzkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImV4aXN0aW5nLmF0Ojc5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6Nzk6IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiZXhpc3RpbmcuYXQ6NzkiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OiBjb25mbGljdHM6IDY1IHNoaWZ0L3JlZHVjZQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc5OiBzZWQgLW4gJ3MvXlN0YXRlIC8vcCcgaW5wdXQub3V0cHV0IHwgdGFpbCAtMSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBzaGVsbCBwaXBlbGluZScgImV4aXN0aW5nLmF0Ojc5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAtbiAncy9eU3RhdGUgLy9wJyBpbnB1dC5vdXRwdXQgfCB0YWlsIC0xCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMzI4CisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc5OiBkaWZmIC11IC9kZXYvbnVsbCAvZGV2L251bGwgfHwgZXhpdCA3NyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImV4aXN0aW5nLmF0Ojc5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGRpZmYgLXUgL2Rldi9udWxsIC9kZXYvbnVsbCB8fCBleGl0IDc3CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OTogc2VkICdzL14lZGVmaW5lIGxyLnR5cGUgLipcJC8vJyBpbnB1dC55ID4gaW5wdXQtbGFsci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJzZWQgJ3MvXiVkZWZpbmUgbHIudHlwZSAuKiQvLycgaW5wdXQueSA+IGlucHV0LWxhbHIueSIgImV4aXN0aW5nLmF0Ojc5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAncy9eJWRlZmluZSBsci50eXBlIC4qJC8vJyBpbnB1dC55ID4gaW5wdXQtbGFsci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tcmVwb3J0PWFsbCBpbnB1dC1sYWxyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJleGlzdGluZy5hdDo3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgaW5wdXQtbGFsci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgaW5wdXQtbGFsci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tcmVwb3J0PWFsbCBpbnB1dC1sYWxyLnkiICJleGlzdGluZy5hdDo3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgaW5wdXQtbGFsci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImV4aXN0aW5nLmF0Ojc5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6Nzk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJleGlzdGluZy5hdDo3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc5OiBiaXNvbiAtLXJlcG9ydD1hbGwgaW5wdXQtbGFsci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiZXhpc3RpbmcuYXQ6NzkiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLS1yZXBvcnQ9YWxsIGlucHV0LWxhbHIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OTogZGlmZiAtdSBpbnB1dC1sYWxyLm91dHB1dCBpbnB1dC5vdXRwdXQgXFwKKyAgICAgICAgICAgfCBzZWQgLW4gJy9eQEAvLFwkcCcgfCBzZWQgJ3MvXiBcJC8vJyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImV4aXN0aW5nLmF0Ojc5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGRpZmYgLXUgaW5wdXQtbGFsci5vdXRwdXQgaW5wdXQub3V0cHV0IFwKKyAgICAgICAgICAgfCBzZWQgLW4gJy9eQEAvLCRwJyB8IHNlZCAncy9eICQvLycKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJAQCAtNzEyLDcgKzcxMiw3IEBACisgICAxNTYgICAgICAgICB8IC4gJ1wkJyBub25fcG9zdF9zaW1wX2V4cAorCisgICAgIE5BTUUgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOQorLSAgICAnXCQnICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyNAorKyAgICAnXCQnICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAzMjAKKworICAgICBOQU1FICAgICAgW3JlZHVjZSB1c2luZyBydWxlIDE1MiAob3B0X3ZhcmlhYmxlKV0KKyAgICAgJ1wkJyAgICAgICBbcmVkdWNlIHVzaW5nIHJ1bGUgMTUyIChvcHRfdmFyaWFibGUpXQorQEAgLTUzNzksNyArNTM3OSw3IEBACisgICAxNTYgICAgICAgICB8IC4gJ1wkJyBub25fcG9zdF9zaW1wX2V4cAorCisgICAgIE5BTUUgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOQorLSAgICAnXCQnICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyNAorKyAgICAnXCQnICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAzMjAKKworICAgICBOQU1FICAgICAgW3JlZHVjZSB1c2luZyBydWxlIDE1MiAob3B0X3ZhcmlhYmxlKV0KKyAgICAgJ1wkJyAgICAgICBbcmVkdWNlIHVzaW5nIHJ1bGUgMTUyIChvcHRfdmFyaWFibGUpXQorQEAgLTUzOTksNyArNTM5OSw3IEBACisgICAxNTYgICAgICAgICB8IC4gJ1wkJyBub25fcG9zdF9zaW1wX2V4cAorCisgICAgIE5BTUUgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOQorLSAgICAnXCQnICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyNAorKyAgICAnXCQnICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAzMjAKKworICAgICBOQU1FICAgICAgW3JlZHVjZSB1c2luZyBydWxlIDE1MiAob3B0X3ZhcmlhYmxlKV0KKyAgICAgJ1wkJyAgICAgICBbcmVkdWNlIHVzaW5nIHJ1bGUgMTUyIChvcHRfdmFyaWFibGUpXQorQEAgLTYyMTQsNyArNjIxNCw3IEBACisgICAxNTYgICAgICAgICB8IC4gJ1wkJyBub25fcG9zdF9zaW1wX2V4cAorCisgICAgIE5BTUUgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOQorLSAgICAnXCQnICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyNAorKyAgICAnXCQnICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAzMjAKKworICAgICBOQU1FICAgICAgW3JlZHVjZSB1c2luZyBydWxlIDE1MiAob3B0X3ZhcmlhYmxlKV0KKyAgICAgJ1wkJyAgICAgICBbcmVkdWNlIHVzaW5nIHJ1bGUgMTUyIChvcHRfdmFyaWFibGUpXQorQEAgLTExMDk5LDMgKzExMDk5LDI3NCBAQAorICAgIDQ1IHN0YXRlbWVudDogTEVYX0ZPUiAnKCcgb3B0X2V4cCBzZW1pIG9wdF9ubHMgZXhwIHNlbWkgb3B0X25scyBvcHRfZXhwIHJfcGFyZW4gb3B0X25scyBzdGF0ZW1lbnQgLgorCisgICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgNDUgKHN0YXRlbWVudCkKKysKKysKKytTdGF0ZSAzMjAKKysKKysgIDEzOSBub25fcG9zdF9zaW1wX2V4cDogLiAnIScgc2ltcF9leHAKKysgIDE0MCAgICAgICAgICAgICAgICAgIHwgLiAnKCcgZXhwIHJfcGFyZW4KKysgIDE0MSAgICAgICAgICAgICAgICAgIHwgLiBMRVhfQlVJTFRJTiAnKCcgb3B0X2V4cHJlc3Npb25fbGlzdCByX3BhcmVuCisrICAxNDIgICAgICAgICAgICAgICAgICB8IC4gTEVYX0xFTkdUSCAnKCcgb3B0X2V4cHJlc3Npb25fbGlzdCByX3BhcmVuCisrICAxNDMgICAgICAgICAgICAgICAgICB8IC4gTEVYX0xFTkdUSAorKyAgMTQ0ICAgICAgICAgICAgICAgICAgfCAuIEZVTkNfQ0FMTCAnKCcgb3B0X2V4cHJlc3Npb25fbGlzdCByX3BhcmVuCisrICAxNDUgICAgICAgICAgICAgICAgICB8IC4gdmFyaWFibGUKKysgIDE0NiAgICAgICAgICAgICAgICAgIHwgLiBJTkNSRU1FTlQgdmFyaWFibGUKKysgIDE0NyAgICAgICAgICAgICAgICAgIHwgLiBERUNSRU1FTlQgdmFyaWFibGUKKysgIDE0OCAgICAgICAgICAgICAgICAgIHwgLiBZTlVNQkVSCisrICAxNDkgICAgICAgICAgICAgICAgICB8IC4gWVNUUklORworKyAgMTUwICAgICAgICAgICAgICAgICAgfCAuICctJyBzaW1wX2V4cAorKyAgMTUxICAgICAgICAgICAgICAgICAgfCAuICcrJyBzaW1wX2V4cAorKyAgMTU0IHZhcmlhYmxlOiAuIE5BTUUKKysgIDE1NSAgICAgICAgIHwgLiBOQU1FICdbJyBleHByZXNzaW9uX2xpc3QgJ10nCisrICAxNTYgICAgICAgICB8IC4gJ1wkJyBub25fcG9zdF9zaW1wX2V4cAorKyAgMTU2ICAgICAgICAgfCAnXCQnIC4gbm9uX3Bvc3Rfc2ltcF9leHAKKysKKysgICAgRlVOQ19DQUxMICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOAorKyAgICBOQU1FICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5CisrICAgIFlOVU1CRVIgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEwCisrICAgIFlTVFJJTkcgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDExCisrICAgIElOQ1JFTUVOVCAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDMyMQorKyAgICBERUNSRU1FTlQgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAzMjIKKysgICAgTEVYX0JVSUxUSU4gIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTgKKysgICAgTEVYX0xFTkdUSCAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTkKKysgICAgJysnICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMzIzCisrICAgICctJyAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDMyNAorKyAgICAnIScgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAzMjUKKysgICAgJ1wkJyAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDMyMAorKyAgICAnKCcgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1NQorKworKyAgICBub25fcG9zdF9zaW1wX2V4cCAgZ28gdG8gc3RhdGUgNjIKKysgICAgdmFyaWFibGUgICAgICAgICAgIGdvIHRvIHN0YXRlIDYzCisrCisrCisrU3RhdGUgMzIxCisrCisrICAxNDYgbm9uX3Bvc3Rfc2ltcF9leHA6IElOQ1JFTUVOVCAuIHZhcmlhYmxlCisrICAxNTQgdmFyaWFibGU6IC4gTkFNRQorKyAgMTU1ICAgICAgICAgfCAuIE5BTUUgJ1snIGV4cHJlc3Npb25fbGlzdCAnXScKKysgIDE1NiAgICAgICAgIHwgLiAnXCQnIG5vbl9wb3N0X3NpbXBfZXhwCisrCisrICAgIE5BTUUgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOQorKyAgICAnXCQnICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAzMjAKKysKKysgICAgdmFyaWFibGUgIGdvIHRvIHN0YXRlIDUwCisrCisrCisrU3RhdGUgMzIyCisrCisrICAxNDcgbm9uX3Bvc3Rfc2ltcF9leHA6IERFQ1JFTUVOVCAuIHZhcmlhYmxlCisrICAxNTQgdmFyaWFibGU6IC4gTkFNRQorKyAgMTU1ICAgICAgICAgfCAuIE5BTUUgJ1snIGV4cHJlc3Npb25fbGlzdCAnXScKKysgIDE1NiAgICAgICAgIHwgLiAnXCQnIG5vbl9wb3N0X3NpbXBfZXhwCisrCisrICAgIE5BTUUgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOQorKyAgICAnXCQnICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAzMjAKKysKKysgICAgdmFyaWFibGUgIGdvIHRvIHN0YXRlIDUxCisrCisrCisrU3RhdGUgMzIzCisrCisrICAxMzAgc2ltcF9leHA6IC4gbm9uX3Bvc3Rfc2ltcF9leHAKKysgIDEzMSAgICAgICAgIHwgLiBzaW1wX2V4cCAnXicgc2ltcF9leHAKKysgIDEzMiAgICAgICAgIHwgLiBzaW1wX2V4cCAnKicgc2ltcF9leHAKKysgIDEzMyAgICAgICAgIHwgLiBzaW1wX2V4cCAnLycgc2ltcF9leHAKKysgIDEzNCAgICAgICAgIHwgLiBzaW1wX2V4cCAnJScgc2ltcF9leHAKKysgIDEzNSAgICAgICAgIHwgLiBzaW1wX2V4cCAnKycgc2ltcF9leHAKKysgIDEzNiAgICAgICAgIHwgLiBzaW1wX2V4cCAnLScgc2ltcF9leHAKKysgIDEzNyAgICAgICAgIHwgLiB2YXJpYWJsZSBJTkNSRU1FTlQKKysgIDEzOCAgICAgICAgIHwgLiB2YXJpYWJsZSBERUNSRU1FTlQKKysgIDEzOSBub25fcG9zdF9zaW1wX2V4cDogLiAnIScgc2ltcF9leHAKKysgIDE0MCAgICAgICAgICAgICAgICAgIHwgLiAnKCcgZXhwIHJfcGFyZW4KKysgIDE0MSAgICAgICAgICAgICAgICAgIHwgLiBMRVhfQlVJTFRJTiAnKCcgb3B0X2V4cHJlc3Npb25fbGlzdCByX3BhcmVuCisrICAxNDIgICAgICAgICAgICAgICAgICB8IC4gTEVYX0xFTkdUSCAnKCcgb3B0X2V4cHJlc3Npb25fbGlzdCByX3BhcmVuCisrICAxNDMgICAgICAgICAgICAgICAgICB8IC4gTEVYX0xFTkdUSAorKyAgMTQ0ICAgICAgICAgICAgICAgICAgfCAuIEZVTkNfQ0FMTCAnKCcgb3B0X2V4cHJlc3Npb25fbGlzdCByX3BhcmVuCisrICAxNDUgICAgICAgICAgICAgICAgICB8IC4gdmFyaWFibGUKKysgIDE0NiAgICAgICAgICAgICAgICAgIHwgLiBJTkNSRU1FTlQgdmFyaWFibGUKKysgIDE0NyAgICAgICAgICAgICAgICAgIHwgLiBERUNSRU1FTlQgdmFyaWFibGUKKysgIDE0OCAgICAgICAgICAgICAgICAgIHwgLiBZTlVNQkVSCisrICAxNDkgICAgICAgICAgICAgICAgICB8IC4gWVNUUklORworKyAgMTUwICAgICAgICAgICAgICAgICAgfCAuICctJyBzaW1wX2V4cAorKyAgMTUxICAgICAgICAgICAgICAgICAgfCAuICcrJyBzaW1wX2V4cAorKyAgMTUxICAgICAgICAgICAgICAgICAgfCAnKycgLiBzaW1wX2V4cAorKyAgMTU0IHZhcmlhYmxlOiAuIE5BTUUKKysgIDE1NSAgICAgICAgIHwgLiBOQU1FICdbJyBleHByZXNzaW9uX2xpc3QgJ10nCisrICAxNTYgICAgICAgICB8IC4gJ1wkJyBub25fcG9zdF9zaW1wX2V4cAorKworKyAgICBGVU5DX0NBTEwgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4CisrICAgIE5BTUUgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDkKKysgICAgWU5VTUJFUiAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTAKKysgICAgWVNUUklORyAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTEKKysgICAgSU5DUkVNRU5UICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTYKKysgICAgREVDUkVNRU5UICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTcKKysgICAgTEVYX0JVSUxUSU4gIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTgKKysgICAgTEVYX0xFTkdUSCAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTkKKysgICAgJysnICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMjAKKysgICAgJy0nICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMjEKKysgICAgJyEnICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNTQKKysgICAgJ1wkJyAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDI0CisrICAgICcoJyAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDU1CisrCisrICAgIHNpbXBfZXhwICAgICAgICAgICBnbyB0byBzdGF0ZSAzMjYKKysgICAgbm9uX3Bvc3Rfc2ltcF9leHAgIGdvIHRvIHN0YXRlIDM1CisrICAgIHZhcmlhYmxlICAgICAgICAgICBnbyB0byBzdGF0ZSA1NworKworKworK1N0YXRlIDMyNAorKworKyAgMTMwIHNpbXBfZXhwOiAuIG5vbl9wb3N0X3NpbXBfZXhwCisrICAxMzEgICAgICAgICB8IC4gc2ltcF9leHAgJ14nIHNpbXBfZXhwCisrICAxMzIgICAgICAgICB8IC4gc2ltcF9leHAgJyonIHNpbXBfZXhwCisrICAxMzMgICAgICAgICB8IC4gc2ltcF9leHAgJy8nIHNpbXBfZXhwCisrICAxMzQgICAgICAgICB8IC4gc2ltcF9leHAgJyUnIHNpbXBfZXhwCisrICAxMzUgICAgICAgICB8IC4gc2ltcF9leHAgJysnIHNpbXBfZXhwCisrICAxMzYgICAgICAgICB8IC4gc2ltcF9leHAgJy0nIHNpbXBfZXhwCisrICAxMzcgICAgICAgICB8IC4gdmFyaWFibGUgSU5DUkVNRU5UCisrICAxMzggICAgICAgICB8IC4gdmFyaWFibGUgREVDUkVNRU5UCisrICAxMzkgbm9uX3Bvc3Rfc2ltcF9leHA6IC4gJyEnIHNpbXBfZXhwCisrICAxNDAgICAgICAgICAgICAgICAgICB8IC4gJygnIGV4cCByX3BhcmVuCisrICAxNDEgICAgICAgICAgICAgICAgICB8IC4gTEVYX0JVSUxUSU4gJygnIG9wdF9leHByZXNzaW9uX2xpc3Qgcl9wYXJlbgorKyAgMTQyICAgICAgICAgICAgICAgICAgfCAuIExFWF9MRU5HVEggJygnIG9wdF9leHByZXNzaW9uX2xpc3Qgcl9wYXJlbgorKyAgMTQzICAgICAgICAgICAgICAgICAgfCAuIExFWF9MRU5HVEgKKysgIDE0NCAgICAgICAgICAgICAgICAgIHwgLiBGVU5DX0NBTEwgJygnIG9wdF9leHByZXNzaW9uX2xpc3Qgcl9wYXJlbgorKyAgMTQ1ICAgICAgICAgICAgICAgICAgfCAuIHZhcmlhYmxlCisrICAxNDYgICAgICAgICAgICAgICAgICB8IC4gSU5DUkVNRU5UIHZhcmlhYmxlCisrICAxNDcgICAgICAgICAgICAgICAgICB8IC4gREVDUkVNRU5UIHZhcmlhYmxlCisrICAxNDggICAgICAgICAgICAgICAgICB8IC4gWU5VTUJFUgorKyAgMTQ5ICAgICAgICAgICAgICAgICAgfCAuIFlTVFJJTkcKKysgIDE1MCAgICAgICAgICAgICAgICAgIHwgLiAnLScgc2ltcF9leHAKKysgIDE1MCAgICAgICAgICAgICAgICAgIHwgJy0nIC4gc2ltcF9leHAKKysgIDE1MSAgICAgICAgICAgICAgICAgIHwgLiAnKycgc2ltcF9leHAKKysgIDE1NCB2YXJpYWJsZTogLiBOQU1FCisrICAxNTUgICAgICAgICB8IC4gTkFNRSAnWycgZXhwcmVzc2lvbl9saXN0ICddJworKyAgMTU2ICAgICAgICAgfCAuICdcJCcgbm9uX3Bvc3Rfc2ltcF9leHAKKysKKysgICAgRlVOQ19DQUxMICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOAorKyAgICBOQU1FICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5CisrICAgIFlOVU1CRVIgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDEwCisrICAgIFlTVFJJTkcgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDExCisrICAgIElOQ1JFTUVOVCAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE2CisrICAgIERFQ1JFTUVOVCAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE3CisrICAgIExFWF9CVUlMVElOICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE4CisrICAgIExFWF9MRU5HVEggICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDE5CisrICAgICcrJyAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIwCisrICAgICctJyAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIxCisrICAgICchJyAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDU0CisrICAgICdcJCcgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyNAorKyAgICAnKCcgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1NQorKworKyAgICBzaW1wX2V4cCAgICAgICAgICAgZ28gdG8gc3RhdGUgMzI3CisrICAgIG5vbl9wb3N0X3NpbXBfZXhwICBnbyB0byBzdGF0ZSAzNQorKyAgICB2YXJpYWJsZSAgICAgICAgICAgZ28gdG8gc3RhdGUgNTcKKysKKysKKytTdGF0ZSAzMjUKKysKKysgIDEzMCBzaW1wX2V4cDogLiBub25fcG9zdF9zaW1wX2V4cAorKyAgMTMxICAgICAgICAgfCAuIHNpbXBfZXhwICdeJyBzaW1wX2V4cAorKyAgMTMyICAgICAgICAgfCAuIHNpbXBfZXhwICcqJyBzaW1wX2V4cAorKyAgMTMzICAgICAgICAgfCAuIHNpbXBfZXhwICcvJyBzaW1wX2V4cAorKyAgMTM0ICAgICAgICAgfCAuIHNpbXBfZXhwICclJyBzaW1wX2V4cAorKyAgMTM1ICAgICAgICAgfCAuIHNpbXBfZXhwICcrJyBzaW1wX2V4cAorKyAgMTM2ICAgICAgICAgfCAuIHNpbXBfZXhwICctJyBzaW1wX2V4cAorKyAgMTM3ICAgICAgICAgfCAuIHZhcmlhYmxlIElOQ1JFTUVOVAorKyAgMTM4ICAgICAgICAgfCAuIHZhcmlhYmxlIERFQ1JFTUVOVAorKyAgMTM5IG5vbl9wb3N0X3NpbXBfZXhwOiAuICchJyBzaW1wX2V4cAorKyAgMTM5ICAgICAgICAgICAgICAgICAgfCAnIScgLiBzaW1wX2V4cAorKyAgMTQwICAgICAgICAgICAgICAgICAgfCAuICcoJyBleHAgcl9wYXJlbgorKyAgMTQxICAgICAgICAgICAgICAgICAgfCAuIExFWF9CVUlMVElOICcoJyBvcHRfZXhwcmVzc2lvbl9saXN0IHJfcGFyZW4KKysgIDE0MiAgICAgICAgICAgICAgICAgIHwgLiBMRVhfTEVOR1RIICcoJyBvcHRfZXhwcmVzc2lvbl9saXN0IHJfcGFyZW4KKysgIDE0MyAgICAgICAgICAgICAgICAgIHwgLiBMRVhfTEVOR1RICisrICAxNDQgICAgICAgICAgICAgICAgICB8IC4gRlVOQ19DQUxMICcoJyBvcHRfZXhwcmVzc2lvbl9saXN0IHJfcGFyZW4KKysgIDE0NSAgICAgICAgICAgICAgICAgIHwgLiB2YXJpYWJsZQorKyAgMTQ2ICAgICAgICAgICAgICAgICAgfCAuIElOQ1JFTUVOVCB2YXJpYWJsZQorKyAgMTQ3ICAgICAgICAgICAgICAgICAgfCAuIERFQ1JFTUVOVCB2YXJpYWJsZQorKyAgMTQ4ICAgICAgICAgICAgICAgICAgfCAuIFlOVU1CRVIKKysgIDE0OSAgICAgICAgICAgICAgICAgIHwgLiBZU1RSSU5HCisrICAxNTAgICAgICAgICAgICAgICAgICB8IC4gJy0nIHNpbXBfZXhwCisrICAxNTEgICAgICAgICAgICAgICAgICB8IC4gJysnIHNpbXBfZXhwCisrICAxNTQgdmFyaWFibGU6IC4gTkFNRQorKyAgMTU1ICAgICAgICAgfCAuIE5BTUUgJ1snIGV4cHJlc3Npb25fbGlzdCAnXScKKysgIDE1NiAgICAgICAgIHwgLiAnXCQnIG5vbl9wb3N0X3NpbXBfZXhwCisrCisrICAgIEZVTkNfQ0FMTCAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDgKKysgICAgTkFNRSAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOQorKyAgICBZTlVNQkVSICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxMAorKyAgICBZU1RSSU5HICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxMQorKyAgICBJTkNSRU1FTlQgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxNgorKyAgICBERUNSRU1FTlQgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxNworKyAgICBMRVhfQlVJTFRJTiAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxOAorKyAgICBMRVhfTEVOR1RIICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxOQorKyAgICAnKycgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyMAorKyAgICAnLScgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyMQorKyAgICAnIScgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1NAorKyAgICAnXCQnICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMjQKKysgICAgJygnICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNTUKKysKKysgICAgc2ltcF9leHAgICAgICAgICAgIGdvIHRvIHN0YXRlIDMyOAorKyAgICBub25fcG9zdF9zaW1wX2V4cCAgZ28gdG8gc3RhdGUgMzUKKysgICAgdmFyaWFibGUgICAgICAgICAgIGdvIHRvIHN0YXRlIDU3CisrCisrCisrU3RhdGUgMzI2CisrCisrICAxMzEgc2ltcF9leHA6IHNpbXBfZXhwIC4gJ14nIHNpbXBfZXhwCisrICAxMzIgICAgICAgICB8IHNpbXBfZXhwIC4gJyonIHNpbXBfZXhwCisrICAxMzMgICAgICAgICB8IHNpbXBfZXhwIC4gJy8nIHNpbXBfZXhwCisrICAxMzQgICAgICAgICB8IHNpbXBfZXhwIC4gJyUnIHNpbXBfZXhwCisrICAxMzUgICAgICAgICB8IHNpbXBfZXhwIC4gJysnIHNpbXBfZXhwCisrICAxMzYgICAgICAgICB8IHNpbXBfZXhwIC4gJy0nIHNpbXBfZXhwCisrICAxNTEgbm9uX3Bvc3Rfc2ltcF9leHA6ICcrJyBzaW1wX2V4cCAuICBbZXJyb3IsIEZVTkNfQ0FMTCwgTkFNRSwgWU5VTUJFUiwgWVNUUklORywgUkVMT1AsIEFQUEVORF9PUCwgTUFUQ0hPUCwgTkVXTElORSwgTEVYX0lOLCBMRVhfQU5ELCBMRVhfT1IsIElOQ1JFTUVOVCwgREVDUkVNRU5ULCBMRVhfQlVJTFRJTiwgTEVYX0xFTkdUSCwgJz8nLCAnOicsICcsJywgJzwnLCAnPicsICd8JywgVFdPV0FZSU8sICcrJywgJy0nLCAnIScsICdcJCcsICcoJywgJyknLCAnXScsICd7JywgJzsnXQorKworKyAgICAnKicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgODkKKysgICAgJy8nICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDkwCisrICAgICclJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5MQorKyAgICAnXicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTIKKysKKysgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAxNTEgKG5vbl9wb3N0X3NpbXBfZXhwKQorKworKyAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgMTUxIGFuZCB0b2tlbiAnKycgcmVzb2x2ZWQgYXMgcmVkdWNlICgnKycgPCBVTkFSWSkuCisrICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAxNTEgYW5kIHRva2VuICctJyByZXNvbHZlZCBhcyByZWR1Y2UgKCctJyA8IFVOQVJZKS4KKysKKysKKytTdGF0ZSAzMjcKKysKKysgIDEzMSBzaW1wX2V4cDogc2ltcF9leHAgLiAnXicgc2ltcF9leHAKKysgIDEzMiAgICAgICAgIHwgc2ltcF9leHAgLiAnKicgc2ltcF9leHAKKysgIDEzMyAgICAgICAgIHwgc2ltcF9leHAgLiAnLycgc2ltcF9leHAKKysgIDEzNCAgICAgICAgIHwgc2ltcF9leHAgLiAnJScgc2ltcF9leHAKKysgIDEzNSAgICAgICAgIHwgc2ltcF9leHAgLiAnKycgc2ltcF9leHAKKysgIDEzNiAgICAgICAgIHwgc2ltcF9leHAgLiAnLScgc2ltcF9leHAKKysgIDE1MCBub25fcG9zdF9zaW1wX2V4cDogJy0nIHNpbXBfZXhwIC4gIFtlcnJvciwgRlVOQ19DQUxMLCBOQU1FLCBZTlVNQkVSLCBZU1RSSU5HLCBSRUxPUCwgQVBQRU5EX09QLCBNQVRDSE9QLCBORVdMSU5FLCBMRVhfSU4sIExFWF9BTkQsIExFWF9PUiwgSU5DUkVNRU5ULCBERUNSRU1FTlQsIExFWF9CVUlMVElOLCBMRVhfTEVOR1RILCAnPycsICc6JywgJywnLCAnPCcsICc+JywgJ3wnLCBUV09XQVlJTywgJysnLCAnLScsICchJywgJ1wkJywgJygnLCAnKScsICddJywgJ3snLCAnOyddCisrCisrICAgICcqJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4OQorKyAgICAnLycgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTAKKysgICAgJyUnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDkxCisrICAgICdeJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5MgorKworKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDE1MCAobm9uX3Bvc3Rfc2ltcF9leHApCisrCisrICAgIENvbmZsaWN0IGJldHdlZW4gcnVsZSAxNTAgYW5kIHRva2VuICcrJyByZXNvbHZlZCBhcyByZWR1Y2UgKCcrJyA8IFVOQVJZKS4KKysgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlIDE1MCBhbmQgdG9rZW4gJy0nIHJlc29sdmVkIGFzIHJlZHVjZSAoJy0nIDwgVU5BUlkpLgorKworKworK1N0YXRlIDMyOAorKworKyAgMTMxIHNpbXBfZXhwOiBzaW1wX2V4cCAuICdeJyBzaW1wX2V4cAorKyAgMTMyICAgICAgICAgfCBzaW1wX2V4cCAuICcqJyBzaW1wX2V4cAorKyAgMTMzICAgICAgICAgfCBzaW1wX2V4cCAuICcvJyBzaW1wX2V4cAorKyAgMTM0ICAgICAgICAgfCBzaW1wX2V4cCAuICclJyBzaW1wX2V4cAorKyAgMTM1ICAgICAgICAgfCBzaW1wX2V4cCAuICcrJyBzaW1wX2V4cAorKyAgMTM2ICAgICAgICAgfCBzaW1wX2V4cCAuICctJyBzaW1wX2V4cAorKyAgMTM5IG5vbl9wb3N0X3NpbXBfZXhwOiAnIScgc2ltcF9leHAgLiAgW2Vycm9yLCBGVU5DX0NBTEwsIE5BTUUsIFlOVU1CRVIsIFlTVFJJTkcsIFJFTE9QLCBBUFBFTkRfT1AsIE1BVENIT1AsIE5FV0xJTkUsIExFWF9JTiwgTEVYX0FORCwgTEVYX09SLCBJTkNSRU1FTlQsIERFQ1JFTUVOVCwgTEVYX0JVSUxUSU4sIExFWF9MRU5HVEgsICc/JywgJzonLCAnLCcsICc8JywgJz4nLCAnfCcsIFRXT1dBWUlPLCAnKycsICctJywgJyEnLCAnXCQnLCAnKCcsICcpJywgJ10nLCAneycsICc7J10KKysKKysgICAgJyonICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDg5CisrICAgICcvJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5MAorKyAgICAnJScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTEKKysgICAgJ14nICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDkyCisrCisrICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMTM5IChub25fcG9zdF9zaW1wX2V4cCkKKysKKysgICAgQ29uZmxpY3QgYmV0d2VlbiBydWxlIDEzOSBhbmQgdG9rZW4gJysnIHJlc29sdmVkIGFzIHJlZHVjZSAoJysnIDwgVU5BUlkpLgorKyAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgMTM5IGFuZCB0b2tlbiAnLScgcmVzb2x2ZWQgYXMgcmVkdWNlICgnLScgPCBVTkFSWSkuCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBDYW5vbmljYWwgTFIgZ2VuZXJhdGVzIHZlcnkgbGFyZ2UgdGFibGVzLCByZXN1bHRpbmcgaW4gdmVyeSBsb25nCisjIGZpbGVzIHdpdGggI2xpbmUgZGlyZWN0aXZlcyB0aGF0IG1heSBvdmVyZmxvdyB3aGF0IHRoZSBzdGFuZGFyZHMKKyMgKEM5MCBhbmQgQysrOTgpIGd1YXJhbnRlZTogMzI3NjcuICBJbiB0aGF0IGNhc2UsIEdDQydzIC1wZWRhbnRpYworIyB3aWxsIGlzc3VlIGFuIGVycm9yLgorIworIyBUaGVyZSBpcyBubyAiIiBhcm91bmQgYHdjYCBzaW5jZSBzb21lIGluZGVudCB0aGUgcmVzdWx0LgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6Nzk6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJleGlzdGluZy5hdDo3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6Nzk6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAiZXhpc3RpbmcuYXQ6NzkiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6Nzk6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAiZXhpc3RpbmcuYXQ6NzkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6Nzk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiZXhpc3RpbmcuYXQ6NzkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzI2MAorI0FUX1NUQVJUXzI2MQorYXRfZm5fZ3JvdXBfYmFubmVyIDI2MSAnZXhpc3RpbmcuYXQ6NzknIFwKKyAgIkdOVSBBV0sgMy4xLjAgR3JhbW1hcjogQ2Fub25pY2FsIExSKDEpIiAiICAgICAgICAgIiAxNgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI2MS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislY29kZSB7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgc3RhdGljIGludCB5eWxleCAodm9pZCk7Cit9CisKKyVkZWZpbmUgbHIudHlwZSBjYW5vbmljYWwtbHIKKyVlcnJvci12ZXJib3NlCisKKyV0b2tlbiBGVU5DX0NBTEwgTkFNRSBSRUdFWFAKKyV0b2tlbiBFUlJPUgorJXRva2VuIFlOVU1CRVIgWVNUUklORworJXRva2VuIFJFTE9QIEFQUEVORF9PUAorJXRva2VuIEFTU0lHTk9QIE1BVENIT1AgTkVXTElORSBDT05DQVRfT1AKKyV0b2tlbiBMRVhfQkVHSU4gTEVYX0VORCBMRVhfSUYgTEVYX0VMU0UgTEVYX1JFVFVSTiBMRVhfREVMRVRFCisldG9rZW4gTEVYX1dISUxFIExFWF9ETyBMRVhfRk9SIExFWF9CUkVBSyBMRVhfQ09OVElOVUUKKyV0b2tlbiBMRVhfUFJJTlQgTEVYX1BSSU5URiBMRVhfTkVYVCBMRVhfRVhJVCBMRVhfRlVOQ1RJT04KKyV0b2tlbiBMRVhfR0VUTElORSBMRVhfTkVYVEZJTEUKKyV0b2tlbiBMRVhfSU4KKyV0b2tlbiBMRVhfQU5EIExFWF9PUiBJTkNSRU1FTlQgREVDUkVNRU5UCisldG9rZW4gTEVYX0JVSUxUSU4gTEVYX0xFTkdUSAorCisvKiBMb3dlc3QgdG8gaGlnaGVzdCAqLworJXJpZ2h0IEFTU0lHTk9QCislcmlnaHQgJz8nICc6JworJWxlZnQgTEVYX09SCislbGVmdCBMRVhfQU5ECislbGVmdCBMRVhfR0VUTElORQorJW5vbmFzc29jIExFWF9JTgorJWxlZnQgRlVOQ19DQUxMIExFWF9CVUlMVElOIExFWF9MRU5HVEgKKyVub25hc3NvYyAnLCcKKyVub25hc3NvYyBNQVRDSE9QCislbm9uYXNzb2MgUkVMT1AgJzwnICc+JyAnfCcgQVBQRU5EX09QIFRXT1dBWUlPCislbGVmdCBDT05DQVRfT1AKKyVsZWZ0IFlTVFJJTkcgWU5VTUJFUgorJWxlZnQgJysnICctJworJWxlZnQgJyonICcvJyAnJScKKyVyaWdodCAnIScgVU5BUlkKKyVyaWdodCAnXicKKyVsZWZ0IElOQ1JFTUVOVCBERUNSRU1FTlQKKyVsZWZ0ICckJworJWxlZnQgJygnICcpJworCisKKyUlCisKKworc3RhcnQKKwk6IG9wdF9ubHMgcHJvZ3JhbSBvcHRfbmxzCisJOworCitwcm9ncmFtCisJOiBydWxlCisJfCBwcm9ncmFtIHJ1bGUKKwl8IGVycm9yCisJfCBwcm9ncmFtIGVycm9yCisJfCAvKiBlbXB0eSAqLworCTsKKworcnVsZQorCTogTEVYX0JFR0lOIHt9IGFjdGlvbgorCXwgTEVYX0VORCB7fSAgIGFjdGlvbgorCXwgTEVYX0JFR0lOIHN0YXRlbWVudF90ZXJtCisJfCBMRVhfRU5EIHN0YXRlbWVudF90ZXJtCisJfCBwYXR0ZXJuIGFjdGlvbgorCXwgYWN0aW9uCisJfCBwYXR0ZXJuIHN0YXRlbWVudF90ZXJtCisJfCBmdW5jdGlvbl9wcm9sb2d1ZSBmdW5jdGlvbl9ib2R5CisJOworCitmdW5jX25hbWUKKwk6IE5BTUUKKwl8IEZVTkNfQ0FMTAorCXwgbGV4X2J1aWx0aW4KKwk7CisKK2xleF9idWlsdGluCisJOiBMRVhfQlVJTFRJTgorCXwgTEVYX0xFTkdUSAorCTsKKworZnVuY3Rpb25fcHJvbG9ndWUKKwk6IExFWF9GVU5DVElPTiB7fSBmdW5jX25hbWUgJygnIG9wdF9wYXJhbV9saXN0IHJfcGFyZW4gb3B0X25scworCTsKKworZnVuY3Rpb25fYm9keQorCTogbF9icmFjZSBzdGF0ZW1lbnRzIHJfYnJhY2Ugb3B0X3NlbWkgb3B0X25scworCXwgbF9icmFjZSByX2JyYWNlIG9wdF9zZW1pIG9wdF9ubHMKKwk7CisKK3BhdHRlcm4KKwk6IGV4cAorCXwgZXhwICcsJyBleHAKKwk7CisKK3JlZ2V4cAorCS8qCisJICogSW4gdGhpcyBydWxlLCB3YW50X3JlZ2V4cCB0ZWxscyB5eWxleCB0aGF0IHRoZSBuZXh0IHRoaW5nCisJICogaXMgYSByZWdleHAgc28gaXQgc2hvdWxkIHJlYWQgdXAgdG8gdGhlIGNsb3Npbmcgc2xhc2guCisJICovCisJOiAnLycge30gUkVHRVhQICcvJworCTsKKworYWN0aW9uCisJOiBsX2JyYWNlIHN0YXRlbWVudHMgcl9icmFjZSBvcHRfc2VtaSBvcHRfbmxzCisJfCBsX2JyYWNlIHJfYnJhY2Ugb3B0X3NlbWkgb3B0X25scworCTsKKworc3RhdGVtZW50cworCTogc3RhdGVtZW50CisJfCBzdGF0ZW1lbnRzIHN0YXRlbWVudAorCXwgZXJyb3IKKwl8IHN0YXRlbWVudHMgZXJyb3IKKwk7CisKK3N0YXRlbWVudF90ZXJtCisJOiBubHMKKwl8IHNlbWkgb3B0X25scworCTsKKworc3RhdGVtZW50CisJOiBzZW1pIG9wdF9ubHMKKwl8IGxfYnJhY2Ugcl9icmFjZQorCXwgbF9icmFjZSBzdGF0ZW1lbnRzIHJfYnJhY2UKKwl8IGlmX3N0YXRlbWVudAorCXwgTEVYX1dISUxFICcoJyBleHAgcl9wYXJlbiBvcHRfbmxzIHN0YXRlbWVudAorCXwgTEVYX0RPIG9wdF9ubHMgc3RhdGVtZW50IExFWF9XSElMRSAnKCcgZXhwIHJfcGFyZW4gb3B0X25scworCXwgTEVYX0ZPUiAnKCcgTkFNRSBMRVhfSU4gTkFNRSByX3BhcmVuIG9wdF9ubHMgc3RhdGVtZW50CisJfCBMRVhfRk9SICcoJyBvcHRfZXhwIHNlbWkgb3B0X25scyBleHAgc2VtaSBvcHRfbmxzIG9wdF9leHAgcl9wYXJlbiBvcHRfbmxzIHN0YXRlbWVudAorCXwgTEVYX0ZPUiAnKCcgb3B0X2V4cCBzZW1pIG9wdF9ubHMgc2VtaSBvcHRfbmxzIG9wdF9leHAgcl9wYXJlbiBvcHRfbmxzIHN0YXRlbWVudAorCXwgTEVYX0JSRUFLIHN0YXRlbWVudF90ZXJtCisJfCBMRVhfQ09OVElOVUUgc3RhdGVtZW50X3Rlcm0KKwl8IHByaW50ICcoJyBleHByZXNzaW9uX2xpc3Qgcl9wYXJlbiBvdXRwdXRfcmVkaXIgc3RhdGVtZW50X3Rlcm0KKwl8IHByaW50IG9wdF9yZXhwcmVzc2lvbl9saXN0IG91dHB1dF9yZWRpciBzdGF0ZW1lbnRfdGVybQorCXwgTEVYX05FWFQgc3RhdGVtZW50X3Rlcm0KKwl8IExFWF9ORVhURklMRSBzdGF0ZW1lbnRfdGVybQorCXwgTEVYX0VYSVQgb3B0X2V4cCBzdGF0ZW1lbnRfdGVybQorCXwgTEVYX1JFVFVSTiB7fSBvcHRfZXhwIHN0YXRlbWVudF90ZXJtCisJfCBMRVhfREVMRVRFIE5BTUUgJ1snIGV4cHJlc3Npb25fbGlzdCAnXScgc3RhdGVtZW50X3Rlcm0KKwl8IExFWF9ERUxFVEUgTkFNRSAgc3RhdGVtZW50X3Rlcm0KKwl8IGV4cCBzdGF0ZW1lbnRfdGVybQorCTsKKworcHJpbnQKKwk6IExFWF9QUklOVAorCXwgTEVYX1BSSU5URgorCTsKKworaWZfc3RhdGVtZW50CisJOiBMRVhfSUYgJygnIGV4cCByX3BhcmVuIG9wdF9ubHMgc3RhdGVtZW50CisJfCBMRVhfSUYgJygnIGV4cCByX3BhcmVuIG9wdF9ubHMgc3RhdGVtZW50CisJICAgICBMRVhfRUxTRSBvcHRfbmxzIHN0YXRlbWVudAorCTsKKworbmxzCisJOiBORVdMSU5FCisJfCBubHMgTkVXTElORQorCTsKKworb3B0X25scworCTogLyogZW1wdHkgKi8KKwl8IG5scworCTsKKworaW5wdXRfcmVkaXIKKwk6IC8qIGVtcHR5ICovCisJfCAnPCcgc2ltcF9leHAKKwk7CisKK291dHB1dF9yZWRpcgorCTogLyogZW1wdHkgKi8KKwl8ICc+JyBleHAKKwl8IEFQUEVORF9PUCBleHAKKwl8ICd8JyBleHAKKwl8IFRXT1dBWUlPIGV4cAorCTsKKworb3B0X3BhcmFtX2xpc3QKKwk6IC8qIGVtcHR5ICovCisJfCBwYXJhbV9saXN0CisJOworCitwYXJhbV9saXN0CisJOiBOQU1FCisJfCBwYXJhbV9saXN0IGNvbW1hIE5BTUUKKwl8IGVycm9yCisJfCBwYXJhbV9saXN0IGVycm9yCisJfCBwYXJhbV9saXN0IGNvbW1hIGVycm9yCisJOworCisvKiBvcHRpb25hbCBleHByZXNzaW9uLCBhcyBpbiBmb3IgbG9vcCAqLworb3B0X2V4cAorCTogLyogZW1wdHkgKi8KKwl8IGV4cAorCTsKKworb3B0X3JleHByZXNzaW9uX2xpc3QKKwk6IC8qIGVtcHR5ICovCisJfCByZXhwcmVzc2lvbl9saXN0CisJOworCityZXhwcmVzc2lvbl9saXN0CisJOiByZXhwCisJfCByZXhwcmVzc2lvbl9saXN0IGNvbW1hIHJleHAKKwl8IGVycm9yCisJfCByZXhwcmVzc2lvbl9saXN0IGVycm9yCisJfCByZXhwcmVzc2lvbl9saXN0IGVycm9yIHJleHAKKwl8IHJleHByZXNzaW9uX2xpc3QgY29tbWEgZXJyb3IKKwk7CisKK29wdF9leHByZXNzaW9uX2xpc3QKKwk6IC8qIGVtcHR5ICovCisJfCBleHByZXNzaW9uX2xpc3QKKwk7CisKK2V4cHJlc3Npb25fbGlzdAorCTogZXhwCisJfCBleHByZXNzaW9uX2xpc3QgY29tbWEgZXhwCisJfCBlcnJvcgorCXwgZXhwcmVzc2lvbl9saXN0IGVycm9yCisJfCBleHByZXNzaW9uX2xpc3QgZXJyb3IgZXhwCisJfCBleHByZXNzaW9uX2xpc3QgY29tbWEgZXJyb3IKKwk7CisKKy8qIEV4cHJlc3Npb25zLCBub3QgaW5jbHVkaW5nIHRoZSBjb21tYSBvcGVyYXRvci4gICovCitleHAJOiB2YXJpYWJsZSBBU1NJR05PUCB7fSBleHAKKwl8ICcoJyBleHByZXNzaW9uX2xpc3Qgcl9wYXJlbiBMRVhfSU4gTkFNRQorCXwgZXhwICd8JyBMRVhfR0VUTElORSBvcHRfdmFyaWFibGUKKwl8IGV4cCBUV09XQVlJTyBMRVhfR0VUTElORSBvcHRfdmFyaWFibGUKKwl8IExFWF9HRVRMSU5FIG9wdF92YXJpYWJsZSBpbnB1dF9yZWRpcgorCXwgZXhwIExFWF9BTkQgZXhwCisJfCBleHAgTEVYX09SIGV4cAorCXwgZXhwIE1BVENIT1AgZXhwCisJfCByZWdleHAKKwl8ICchJyByZWdleHAgJXByZWMgVU5BUlkKKwl8IGV4cCBMRVhfSU4gTkFNRQorCXwgZXhwIFJFTE9QIGV4cAorCXwgZXhwICc8JyBleHAKKwl8IGV4cCAnPicgZXhwCisJfCBleHAgJz8nIGV4cCAnOicgZXhwCisJfCBzaW1wX2V4cAorCXwgZXhwIHNpbXBfZXhwICVwcmVjIENPTkNBVF9PUAorCTsKKworcmV4cAorCTogdmFyaWFibGUgQVNTSUdOT1Age30gcmV4cAorCXwgcmV4cCBMRVhfQU5EIHJleHAKKwl8IHJleHAgTEVYX09SIHJleHAKKwl8IExFWF9HRVRMSU5FIG9wdF92YXJpYWJsZSBpbnB1dF9yZWRpcgorCXwgcmVnZXhwCisJfCAnIScgcmVnZXhwICVwcmVjIFVOQVJZCisJfCByZXhwIE1BVENIT1AgcmV4cAorCXwgcmV4cCBMRVhfSU4gTkFNRQorCXwgcmV4cCBSRUxPUCByZXhwCisJfCByZXhwICc/JyByZXhwICc6JyByZXhwCisJfCBzaW1wX2V4cAorCXwgcmV4cCBzaW1wX2V4cCAlcHJlYyBDT05DQVRfT1AKKwk7CisKK3NpbXBfZXhwCisJOiBub25fcG9zdF9zaW1wX2V4cAorCS8qIEJpbmFyeSBvcGVyYXRvcnMgaW4gb3JkZXIgb2YgZGVjcmVhc2luZyBwcmVjZWRlbmNlLiAgKi8KKwl8IHNpbXBfZXhwICdeJyBzaW1wX2V4cAorCXwgc2ltcF9leHAgJyonIHNpbXBfZXhwCisJfCBzaW1wX2V4cCAnLycgc2ltcF9leHAKKwl8IHNpbXBfZXhwICclJyBzaW1wX2V4cAorCXwgc2ltcF9leHAgJysnIHNpbXBfZXhwCisJfCBzaW1wX2V4cCAnLScgc2ltcF9leHAKKwl8IHZhcmlhYmxlIElOQ1JFTUVOVAorCXwgdmFyaWFibGUgREVDUkVNRU5UCisJOworCitub25fcG9zdF9zaW1wX2V4cAorCTogJyEnIHNpbXBfZXhwICVwcmVjIFVOQVJZCisJfCAnKCcgZXhwIHJfcGFyZW4KKwl8IExFWF9CVUlMVElOCisJICAnKCcgb3B0X2V4cHJlc3Npb25fbGlzdCByX3BhcmVuCisJfCBMRVhfTEVOR1RIICcoJyBvcHRfZXhwcmVzc2lvbl9saXN0IHJfcGFyZW4KKwl8IExFWF9MRU5HVEgKKwl8IEZVTkNfQ0FMTCAnKCcgb3B0X2V4cHJlc3Npb25fbGlzdCByX3BhcmVuCisJfCB2YXJpYWJsZQorCXwgSU5DUkVNRU5UIHZhcmlhYmxlCisJfCBERUNSRU1FTlQgdmFyaWFibGUKKwl8IFlOVU1CRVIKKwl8IFlTVFJJTkcKKwl8ICctJyBzaW1wX2V4cCAgICAlcHJlYyBVTkFSWQorCXwgJysnIHNpbXBfZXhwICAgICVwcmVjIFVOQVJZCisJOworCitvcHRfdmFyaWFibGUKKwk6IC8qIGVtcHR5ICovCisJfCB2YXJpYWJsZQorCTsKKwordmFyaWFibGUKKwk6IE5BTUUKKwl8IE5BTUUgJ1snIGV4cHJlc3Npb25fbGlzdCAnXScKKwl8ICckJyBub25fcG9zdF9zaW1wX2V4cAorCTsKKworbF9icmFjZQorCTogJ3snIG9wdF9ubHMKKwk7CisKK3JfYnJhY2UKKwk6ICd9JyBvcHRfbmxzCisJOworCityX3BhcmVuCisJOiAnKScKKwk7CisKK29wdF9zZW1pCisJOiAvKiBlbXB0eSAqLworCXwgc2VtaQorCTsKKworc2VtaQorCTogJzsnCisJOworCitjb21tYQk6ICcsJyBvcHRfbmxzCisJOworCisKKyUlCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorc3RhdGljIGludAoreXlsZXggKHZvaWQpCit7CisgIHN0YXRpYyBpbnQgY29uc3QgaW5wdXRbXSA9IHsKKyAgICBMRVhfR0VUTElORSwgJyQnLCAnIScsIFlOVU1CRVIsICcqJywgWU5VTUJFUiwgJzsnLCAwCisgIH07CisgIHN0YXRpYyBpbnQgY29uc3QgKmlucHV0cCA9IGlucHV0OworICByZXR1cm4gKmlucHV0cCsrOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCisjIEluIHNvbWUgdmVyc2lvbnMgb2YgQXV0b2NvbmYsIEFUX0NIRUNLIGludm9rZXMgQVNfRVNDQVBFIGJlZm9yZQorIyBleHBhbmRpbmcgbWFjcm9zLCBzbyBpdCBjb3JydXB0cyBzb21lIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUKKyMgbWFjcm9zLiAgVG8gYXZvaWQgdGhpcywgZXhwYW5kIG5vdyBhbmQgcGFzcyBpdCB0aGUgcmVzdWx0IHdpdGggcHJvcGVyCisjIHN0cmluZyBxdW90YXRpb24uICBBc3N1bWUgYXJncyA3IHRocm91Z2ggMTIgZXhwYW5kIHRvIHByb3Blcmx5IHF1b3RlZAorIyBzdHJpbmdzLgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6Nzk6IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiZXhpc3RpbmcuYXQ6NzkiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OiBjb25mbGljdHM6IDI2NSBzaGlmdC9yZWR1Y2UKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OTogc2VkIC1uICdzL15TdGF0ZSAvL3AnIGlucHV0Lm91dHB1dCB8IHRhaWwgLTEiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2Egc2hlbGwgcGlwZWxpbmUnICJleGlzdGluZy5hdDo3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgLW4gJ3MvXlN0YXRlIC8vcCcgaW5wdXQub3V0cHV0IHwgdGFpbCAtMQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjIzNTgKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworIyBDYW5vbmljYWwgTFIgZ2VuZXJhdGVzIHZlcnkgbGFyZ2UgdGFibGVzLCByZXN1bHRpbmcgaW4gdmVyeSBsb25nCisjIGZpbGVzIHdpdGggI2xpbmUgZGlyZWN0aXZlcyB0aGF0IG1heSBvdmVyZmxvdyB3aGF0IHRoZSBzdGFuZGFyZHMKKyMgKEM5MCBhbmQgQysrOTgpIGd1YXJhbnRlZTogMzI3NjcuICBJbiB0aGF0IGNhc2UsIEdDQydzIC1wZWRhbnRpYworIyB3aWxsIGlzc3VlIGFuIGVycm9yLgorIworIyBUaGVyZSBpcyBubyAiIiBhcm91bmQgYHdjYCBzaW5jZSBzb21lIGluZGVudCB0aGUgcmVzdWx0LgoraWYgdGVzdCAzMjc2NyAtbHQgYHdjIC1sIDwgaW5wdXQuY2A7IHRoZW4KKyAgQ0ZMQUdTPWBlY2hvICIgJENGTEFHUyAiIHwgc2VkIC1lICdzLyAtcGVkYW50aWMgLy8nYAorICBDWFhGTEFHUz1gZWNobyAiICRDWFhGTEFHUyAiIHwgc2VkIC1lICdzLyAtcGVkYW50aWMgLy8nYAorZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImV4aXN0aW5nLmF0Ojc5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJleGlzdGluZy5hdDo3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OTogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJleGlzdGluZy5hdDo3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJleGlzdGluZy5hdDo3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjYxCisjQVRfU1RBUlRfMjYyCithdF9mbl9ncm91cF9iYW5uZXIgMjYyICdleGlzdGluZy5hdDo3ODMnIFwKKyAgIkdOVSBDaW0gR3JhbW1hcjogTEFMUigxKSIgIiAgICAgICAgICAgICAgICAgICAgICAgIiAxNgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI2Mi4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislY29kZSB7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgc3RhdGljIGludCB5eWxleCAodm9pZCk7Cit9CisKKyVkZWZpbmUgbHIudHlwZSBsYWxyCiAKICV0b2tlbgogCUhBQ1RJVkFURSBIQUZURVIgLypIQU5EKi8gSEFSUkFZIEhBVApAQCAtNTUzNTcsNyArMTMzMTU1LDExIEBACiAlbGVmdCAgIEhET1QKIAogJXN0YXJ0ICBNQUlOX01PRFVMRQorCisKICUlCisKKwogLyogR1JBTUFUSUtLIEZPUiBQUk9HUkFNIE1PRFVMRVMgKi8KIE1BSU5fTU9EVUxFICAgICA6ICAgICAgIHt9CiAJCQlNT0RVTFMKQEAgLTU1ODc2LDUwICsxMzM2NzgsMjgyIEBACiAJCQlIUEFSRVhQU0VQQVJBVE9SCiAJCQlBUkdVTUVOVF9MSVNUCiAJCTsKKworCiAlJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KK3N0YXRpYyBpbnQKK3l5bGV4ICh2b2lkKQoreworICBzdGF0aWMgaW50IGNvbnN0IGlucHV0W10gPSB7CisgICAgMAorICB9OworICBzdGF0aWMgaW50IGNvbnN0ICppbnB1dHAgPSBpbnB1dDsKKyAgcmV0dXJuICppbnB1dHArKzsKK30KKworaW50CittYWluICh2b2lkKQoreworICByZXR1cm4geXlwYXJzZSAoKTsKK30KIF9BVEVPRgogCiAKLSMgUGFzcyBwbGVudHkgb2Ygb3B0aW9ucywgdG8gZXhlcmNpc2UgcGxlbnR5IG9mIGNvZGUsIGV2ZW4gaWYgd2UKLSMgZG9uJ3QgYWN0dWFsbHkgY2hlY2sgdGhlIG91dHB1dC4gIEJ1dCBTRUdWIGlzIHdhdGNoaW5nIHVzLCBhbmQKLSMgc28gbWlnaHQgZG8gZG1hbGxvYy4KLSRhdF90cmFjZW9mZgotZWNobyAiZXhpc3RpbmcuYXQ6OTYwOiBiaXNvbiAtLXZlcmJvc2UgLS1kZWZpbmVzIGlucHV0LnkiCi1lY2hvIGV4aXN0aW5nLmF0Ojk2MCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLS12ZXJib3NlIC0tZGVmaW5lcyBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gPj4kYXRfc3RkZXJyOyBlY2hvICJpbnB1dC55OiBjb25mbGljdHM6IDc4IHNoaWZ0L3JlZHVjZSwgMTAgcmVkdWNlL3JlZHVjZQotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiZXhpc3RpbmcuYXQ6OTYwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorIyBJbiBzb21lIHZlcnNpb25zIG9mIEF1dG9jb25mLCBBVF9DSEVDSyBpbnZva2VzIEFTX0VTQ0FQRSBiZWZvcmUKKyMgZXhwYW5kaW5nIG1hY3Jvcywgc28gaXQgY29ycnVwdHMgc29tZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlCisjIG1hY3Jvcy4gIFRvIGF2b2lkIHRoaXMsIGV4cGFuZCBub3cgYW5kIHBhc3MgaXQgdGhlIHJlc3VsdCB3aXRoIHByb3BlcgorIyBzdHJpbmcgcXVvdGF0aW9uLiAgQXNzdW1lIGFyZ3MgNyB0aHJvdWdoIDEyIGV4cGFuZCB0byBwcm9wZXJseSBxdW90ZWQKKyMgc3RyaW5ncy4KKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImV4aXN0aW5nLmF0Ojc4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzgzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIgImV4aXN0aW5nLmF0Ojc4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImV4aXN0aW5nLmF0Ojc4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJleGlzdGluZy5hdDo3ODMiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzgzOiBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImV4aXN0aW5nLmF0Ojc4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6IGNvbmZsaWN0czogNzggc2hpZnQvcmVkdWNlLCAxMCByZWR1Y2UvcmVkdWNlCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiZXhpc3RpbmcuYXQ6OTcyOiBncmVwICdeU3RhdGUuKmNvbmZsaWN0czonIGlucHV0Lm91dHB1dCIKLWVjaG8gZXhpc3RpbmcuYXQ6OTcyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBncmVwICdeU3RhdGUuKmNvbmZsaWN0czonIGlucHV0Lm91dHB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvID4+JGF0X3N0ZG91dDsgZWNobyAiU3RhdGUgNjQgY29uZmxpY3RzOiAxNCBzaGlmdC9yZWR1Y2UKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4Mzogc2VkIC1uICdzL15TdGF0ZSAvL3AnIGlucHV0Lm91dHB1dCB8IHRhaWwgLTEiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2Egc2hlbGwgcGlwZWxpbmUnICJleGlzdGluZy5hdDo3ODMiCisoICRhdF9jaGVja190cmFjZTsgc2VkIC1uICdzL15TdGF0ZSAvL3AnIGlucHV0Lm91dHB1dCB8IHRhaWwgLTEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICI0NDIKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MzogZGlmZiAtdSAvZGV2L251bGwgL2Rldi9udWxsIHx8IGV4aXQgNzciCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJleGlzdGluZy5hdDo3ODMiCisoICRhdF9jaGVja190cmFjZTsgZGlmZiAtdSAvZGV2L251bGwgL2Rldi9udWxsIHx8IGV4aXQgNzcKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODM6IHNlZCAncy9eJWRlZmluZSBsci50eXBlIC4qXCQvLycgaW5wdXQueSA+IGlucHV0LWxhbHIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAic2VkICdzL14lZGVmaW5lIGxyLnR5cGUgLiokLy8nIGlucHV0LnkgPiBpbnB1dC1sYWxyLnkiICJleGlzdGluZy5hdDo3ODMiCisoICRhdF9jaGVja190cmFjZTsgc2VkICdzL14lZGVmaW5lIGxyLnR5cGUgLiokLy8nIGlucHV0LnkgPiBpbnB1dC1sYWxyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgaW5wdXQtbGFsci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiZXhpc3RpbmcuYXQ6NzgzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tcmVwb3J0PWFsbCBpbnB1dC1sYWxyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIGlucHV0LWxhbHIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgaW5wdXQtbGFsci55IiAiZXhpc3RpbmcuYXQ6NzgzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tcmVwb3J0PWFsbCBpbnB1dC1sYWxyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJleGlzdGluZy5hdDo3ODMiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzgzOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiZXhpc3RpbmcuYXQ6NzgzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MzogYmlzb24gLS1yZXBvcnQ9YWxsIGlucHV0LWxhbHIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImV4aXN0aW5nLmF0Ojc4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtLXJlcG9ydD1hbGwgaW5wdXQtbGFsci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODM6IGRpZmYgLXUgaW5wdXQtbGFsci5vdXRwdXQgaW5wdXQub3V0cHV0IFxcCisgICAgICAgICAgIHwgc2VkIC1uICcvXkBALyxcJHAnIHwgc2VkICdzL14gXCQvLyciCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJleGlzdGluZy5hdDo3ODMiCisoICRhdF9jaGVja190cmFjZTsgZGlmZiAtdSBpbnB1dC1sYWxyLm91dHB1dCBpbnB1dC5vdXRwdXQgXAorICAgICAgICAgICB8IHNlZCAtbiAnL15AQC8sJHAnIHwgc2VkICdzL14gJC8vJworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MzogZ3JlcCAnXlN0YXRlLipjb25mbGljdHM6JyBpbnB1dC5vdXRwdXQiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJleGlzdGluZy5hdDo3ODMiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnXlN0YXRlLipjb25mbGljdHM6JyBpbnB1dC5vdXRwdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJTdGF0ZSA2NCBjb25mbGljdHM6IDE0IHNoaWZ0L3JlZHVjZQogU3RhdGUgMTY0IGNvbmZsaWN0czogMSBzaGlmdC9yZWR1Y2UKIFN0YXRlIDIwMSBjb25mbGljdHM6IDMzIHNoaWZ0L3JlZHVjZSwgNCByZWR1Y2UvcmVkdWNlCiBTdGF0ZSAyMDYgY29uZmxpY3RzOiAxIHNoaWZ0L3JlZHVjZQpAQCAtNTU5MjgsNDUgKzEzMzk2MiwxODIzIEBACiBTdGF0ZSAzNTYgY29uZmxpY3RzOiAxIHNoaWZ0L3JlZHVjZQogU3RhdGUgMzYwIGNvbmZsaWN0czogOSBzaGlmdC9yZWR1Y2UsIDIgcmVkdWNlL3JlZHVjZQogU3RhdGUgNDI3IGNvbmZsaWN0czogOSBzaGlmdC9yZWR1Y2UsIDIgcmVkdWNlL3JlZHVjZQotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiZXhpc3RpbmcuYXQ6OTcyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7CisjIENhbm9uaWNhbCBMUiBnZW5lcmF0ZXMgdmVyeSBsYXJnZSB0YWJsZXMsIHJlc3VsdGluZyBpbiB2ZXJ5IGxvbmcKKyMgZmlsZXMgd2l0aCAjbGluZSBkaXJlY3RpdmVzIHRoYXQgbWF5IG92ZXJmbG93IHdoYXQgdGhlIHN0YW5kYXJkcworIyAoQzkwIGFuZCBDKys5OCkgZ3VhcmFudGVlOiAzMjc2Ny4gIEluIHRoYXQgY2FzZSwgR0NDJ3MgLXBlZGFudGljCisjIHdpbGwgaXNzdWUgYW4gZXJyb3IuCisjCisjIFRoZXJlIGlzIG5vICIiIGFyb3VuZCBgd2NgIHNpbmNlIHNvbWUgaW5kZW50IHRoZSByZXN1bHQuCiAKLSAgMTEyICkgIyAxMTIuIGV4aXN0aW5nLmF0Ojk4MDogR05VIHBpYyBHcmFtbWFyCi0gICAgYXRfc2V0dXBfbGluZT0nZXhpc3RpbmcuYXQ6OTgwJwotICAgIGF0X2Rlc2M9J0dOVSBwaWMgR3JhbW1hcicKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiMTEyOiBHTlUgcGljIEdyYW1tYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiMTEyLiBleGlzdGluZy5hdDo5ODA6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODM6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJleGlzdGluZy5hdDo3ODMiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODM6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAiZXhpc3RpbmcuYXQ6NzgzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSMgR05VIHBpYywgcGFydCBvZiBncm9mZi4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODM6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAiZXhpc3RpbmcuYXQ6NzgzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSMgQmlzb24gb25jZSByZXBvcnRlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIHRoYXQgaXQgc2hvdWxkbid0IGhhdmUuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzgzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImV4aXN0aW5nLmF0Ojc4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzI2MgorI0FUX1NUQVJUXzI2MworYXRfZm5fZ3JvdXBfYmFubmVyIDI2MyAnZXhpc3RpbmcuYXQ6NzgzJyBcCisgICJHTlUgQ2ltIEdyYW1tYXI6IElFTFIoMSkiICIgICAgICAgICAgICAgICAgICAgICAgICIgMTYKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyNjMuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKwogCiBjYXQgPmlucHV0LnkgPDwnX0FURU9GJwotJXVuaW9uIHt9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislY29kZSB7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgc3RhdGljIGludCB5eWxleCAodm9pZCk7Cit9CisKKyVkZWZpbmUgbHIudHlwZSBpZWxyCisKKyV0b2tlbgorCUhBQ1RJVkFURSBIQUZURVIgLypIQU5EKi8gSEFSUkFZIEhBVAorCUhCRUZPUkUgSEJFR0lOIEhCT09MRUFOCisJSENIQVJBQ1RFUiBIQ0xBU1MgLypIQ09NTUVOVCovIEhDT05DCisJSERFTEFZIEhETworCUhFTFNFIEhFTkQgSEVRIC8qSEVRViovIEhFWFRFUk5BTAorCUhGT1IKKwlIR0UgSEdPIEhHT1RPIEhHVAorCUhISURERU4KKwlISUYgLypISU1QKi8gSElOIEhJTk5FUiBISU5TUEVDVCBISU5URUdFUiBISVMKKwlITEFCRUwgSExFIEhMT05HIEhMVAorCUhOQU1FIEhORSBITkVXIEhOT05FIC8qSE5PVCovIEhOT1RFWFQKKwkvKkhPUiovIEhPVEhFUldJU0UKKwlIUFJJT1IgSFBST0NFRFVSRSBIUFJPVEVDVEVECisJSFFVQQorCUhSRUFDVElWQVRFIEhSRUFMIEhSRUYKKwlIU0hPUlQgSFNURVAgSFNXSVRDSAorCUhURVhUIEhUSEVOIEhUSElTIEhUTworCUhVTlRJTAorCUhWQUxVRSBIVkFSIEhWSVJUVUFMCisJSFdIRU4gSFdISUxFCisKKwlIQVNTSUdOVkFMVUUgSEFTU0lHTlJFRgorCS8qSERPVCovIEhQQVJFWFBTRVBBUkFUT1IgSExBQkVMU0VQQVJBVE9SIEhTVEFURU1FTlRTRVBBUkFUT1IKKwlIQkVHUEFSIEhFTkRQQVIKKwlIRVFSIEhORVIKKwlIQUREIEhTVUIgSE1VTCBIRElWIEhJTlRESVYgSEVYUAorCUhET1RET1RET1QKKworJXRva2VuIEhJREVOVElGSUVSCisldG9rZW4gSEJPT0xFQU5LT05TVCBISU5URUdFUktPTlNUIEhDSEFSQUNURVJLT05TVAorJXRva2VuIEhSRUFMS09OU1QKKyV0b2tlbiBIVEVYVEtPTlNUCisKKworJXJpZ2h0IEhBU1NJR04KKyVsZWZ0ICAgSE9SRUxTRQorJWxlZnQgICBIQU5EVEhFTgorJWxlZnQgICBIRVFWCislbGVmdCAgIEhJTVAKKyVsZWZ0ICAgSE9SCislbGVmdCAgIEhBTkQKKworJWxlZnQgICBITk9UCisKKyVsZWZ0IEhWQUxSRUxPUEVSQVRPUiBIUkVGUkVMT1BFUkFUT1IgSE9CSlJFTE9QRVJBVE9SCisKKyVsZWZ0CUhDT05DCisKKyVsZWZ0IEhURVJNT1BFUkFUT1IKKyVsZWZ0IFVORUFSCislbGVmdCBIRkFDVE9ST1BFUkFUT1IKKyVsZWZ0ICAgICAgICAgSFBSSU1BUllPUEVSQVRPUgorCislbGVmdCAgIEhRVUEKKworJWxlZnQgICBIRE9UCisKKyVzdGFydCAgTUFJTl9NT0RVTEUKKworCislJQorCisKKy8qIEdSQU1BVElLSyBGT1IgUFJPR1JBTSBNT0RVTEVTICovCitNQUlOX01PRFVMRSAgICAgOiAgICAgICB7fQorCQkJTU9EVUxTCisJCXwJZXJyb3IgSFNUQVRFTUVOVFNFUEFSQVRPUiBNQkVFX0RFQ0xTVE1TCisJCTsKK0VYVF9ERUNMQVJBVElPTgk6CUhFWFRFUk5BTAorCQkJTUJFRV9UWVBFCisJCQlIUFJPQ0VEVVJFCisJCQkJe30KKwkJCUVYVF9MSVNUCisJCXwKKwkJCUhFWFRFUk5BTAorCQkJSElERU5USUZJRVIKKwkJCUhQUk9DRURVUkUKKwkJCQl7fQorCQkJSElERU5USUZJRVIge30KKwkJCUVYVEVSTkFMX0tJTkRfSVRFTQorCQl8CUhFWFRFUk5BTAorCQkJSENMQVNTCisJCQkJe30KKwkJCUVYVF9MSVNUCisKKwkJOworRVhURVJOQUxfS0lORF9JVEVNOglFWFRfSURFTlQKKwkJCUhPQkpSRUxPUEVSQVRPUgorCQkJCXt9CisJCQlNQkVFX1RZUEUgSFBST0NFRFVSRQorCQkJSElERU5USUZJRVIKKwkJCQl7fQorCQkJSEVBRElORyBFTVBUWV9CTE9DSworCQkJCXt9CisvKgkJfAorCQkJRVhUX0lERU5UCisJCQkJe30KKwkJCU1CRUVfUkVTVF9FWFRfTElTVAorCQk7CitNQkVFX1JFU1RfRVhUX0xJU1Q6CS8qIEVNUFRZCisJCXwJSFBBUkVYUFNFUEFSQVRPUiBFWFRfS0lORF9MSVNUCisJCTsKK0VYVF9LSU5EX0xJU1QJOglFWFRfS0lORF9JVEVNCisJCXwJRVhUX0tJTkRfTElTVCBIUEFSRVhQU0VQQVJBVE9SIEVYVF9LSU5EX0lURU0KKwkJOworRVhUX0tJTkRfSVRFTQk6CUhJREVOVElGSUVSCisJCQlFWFRfSURFTlQKKwkJCQl7fSovCisJCTsKK0VNUFRZX0JMT0NLCToJLypFTVBUKi8KKwkJfAlIQkVHSU4gSEVORAorCQk7CitFWFRfTElTVAk6CUVYVF9JVEVNCisJCXwJRVhUX0xJU1QgSFBBUkVYUFNFUEFSQVRPUiBFWFRfSVRFTQorCQk7CitFWFRfSVRFTQk6CUhJREVOVElGSUVSCisJCQlFWFRfSURFTlQKKwkJOworRVhUX0lERU5UCToJLyogRU1QVFkgKi8KKwkJfAlIVkFMUkVMT1BFUkFUT1Ige30KKwkJCUhURVhUS09OU1QKKwkJOworLyogR1JBTUFUSUtLIEZPUiBUWVBFUiAqLworTk9fVFlQRSAgICAgICAgIDogICAgICAgLypFTVBUKi8KKwkJOworTUJFRV9UWVBFICAgICAgIDogICAgICAgTk9fVFlQRQorCQl8ICAgICAgIFRZUEUKKwkJOworVFlQRSAgICAgICAgICAgIDogICAgICAgSFJFRiBIQkVHUEFSCisJCQlISURFTlRJRklFUgorCQkJCXt9CisJCQlIRU5EUEFSCisJCXwgICAgICAgSFRFWFQKKwkJfCAgICAgICBIQk9PTEVBTgorCQl8ICAgICAgIEhDSEFSQUNURVIKKwkJfCAgICAgICBIU0hPUlQgSElOVEVHRVIKKwkJfCAgICAgICBISU5URUdFUgorCQl8ICAgICAgIEhSRUFMCisJCXwgICAgICAgSExPTkcgSFJFQUwKKwkJOworCisvKiBHUkFNQVRJS0sgRk9SIERFTCBBViBTRVROSU5HRVIgKi8KK01CRUVfRUxTRV9QQVJUICA6ICAgICAgIC8qRU1QVCovCisvKgkJfAlIRUxTRQorCQkJSElGCisJCQlFWFBSRVNTSU9OCisJCQlIVEhFTiAgIHt9CisJCQlCTE9DSyAgIHt9CisJCQlNQkVFX0VMU0VfUEFSVCAgICAgICAgICB7fSovCisJCXwgICAgICAgSEVMU0UgICB7fQorCQkJQkxPQ0sKKwkJOworRk9SX0xJU1QgICAgICAgIDogICAgICAgRk9SX0xJU1RfRUxFTUVOVAorCQl8ICAgICAgIEZPUl9MSVNUX0VMRU1FTlQKKwkJCUhQQVJFWFBTRVBBUkFUT1IKKwkJCUZPUl9MSVNUCisJCTsKK0ZPUl9MSVNUX0VMRU1FTlQ6ICAgICAgIEVYUFJFU1NJT04KKwkJCU1CRUVfRl9MX0VMX1JfUFQKKwkJOworTUJFRV9GX0xfRUxfUl9QVDogICAgICAgLypFTVBUKi8KKwkJfCAgICAgICBIV0hJTEUKKwkJCUVYUFJFU1NJT04KKwkJfCAgICAgICBIU1RFUAorCQkJRVhQUkVTU0lPTgorCQkJSFVOVElMCisJCQlFWFBSRVNTSU9OCisJCTsKK0dPVE8gICAgICAgICAgICA6ICAgICAgIEhHTworCQkJSFRPCisJCXwgICAgICAgSEdPVE8KKwkJOworQ09OTl9TVEFURV9SX1BUIDogICAgICAgV0hFTl9DTEFVU0VfTElTVAorCQl8ICAgICAgIEhETyAgIHt9CisJCQlCTE9DSworCQk7CitXSEVOX0NMQVVTRV9MSVNUOiAgICAgICBIV0hFTgorCQkJSElERU5USUZJRVIKKwkJCUhETyAgICB7fQorCQkJQkxPQ0sKKwkJfCAgICAgICBXSEVOX0NMQVVTRV9MSVNUCisJCQlIV0hFTgorCQkJSElERU5USUZJRVIKKwkJCUhETyAgICB7fQorCQkJQkxPQ0sKKwkJOworTUJFRV9PVFdJX0NMQVVTIDogICAgICAgLypFTVBUKi8KKwkJfCAgICAgICBIT1RIRVJXSVNFIHt9CisKKwkJCUJMT0NLCisJCTsKK0FDVElWQVRPUgk6CUhBQ1RJVkFURQorCQl8CUhSRUFDVElWQVRFCisJCTsKK1NDSEVEVUxFCToJLypFTVBUKi8KKwkJfAlBVERFTEFZIEVYUFJFU1NJT04Je30KKwkJCVBSSU9SCisJCXwJQkVGT1JFQUZURVIJCXt9CisJCQlFWFBSRVNTSU9OCisJCTsKK0FUREVMQVkJCToJSEFUCisJCXwJSERFTEFZCisJCTsKK0JFRk9SRUFGVEVSCToJSEJFRk9SRQorCQl8CUhBRlRFUgorCQk7CitQUklPUgkJOgkvKkVNUFQqLworCQl8CUhQUklPUgorCQk7CisvKiBHUkFNQVRJS0sgRk9SIFNFVE5JTkdFUiBPRyBERUtMQVJBU0pPTkVSICovCitNT0RVTFNUQVRFTUVOVCAgOiAgICAgICBIV0hJTEUKKwkJCUVYUFJFU1NJT04KKwkJCUhETyAgICAge30KKwkJCUJMT0NLCisJCXwgICAgICAgSElGCisJCQlFWFBSRVNTSU9OCisJCQlIVEhFTiAgIHt9CisJCQlCTE9DSyAgIHt9CisJCQlNQkVFX0VMU0VfUEFSVAorCQl8ICAgICAgIEhGT1IKKwkJCUhJREVOVElGSUVSCisJCQlIQVNTSUdOIHt9CisJCQlGT1JfTElTVAorCQkJSERPICAgICB7fQorCQkJQkxPQ0sKKwkJfCAgICAgICBHT1RPCisJCQlFWFBSRVNTSU9OCisJCXwgICAgICAgSElOU1BFQ1QKKwkJCUVYUFJFU1NJT04gICAgICAgICAgICAgIHt9CisJCQlDT05OX1NUQVRFX1JfUFQKKwkJCQl7fQorCQkJTUJFRV9PVFdJX0NMQVVTCisJCXwgICAgICAgSElOTkVSCisJCXwgICAgICAgSElERU5USUZJRVIKKwkJCUhMQUJFTFNFUEFSQVRPUgorCQkJCXt9CisJCQlERUNMU1RBVEVNRU5UCisJCXwgICAgICAgRVhQUkVTU0lPTl9TSU1QCisJCQlIQkVHSU4KKwkJCQl7fQorCQkJSU1QT1JUX1NQRUNfTU9EVUxFCisJCQkJe30KKwkJCU1CRUVfREVDTFNUTVMKKwkJCUhFTkQKKwkJfAlFWFBSRVNTSU9OX1NJTVAgSEJFR0lOIGVycm9yIEhTVEFURU1FTlRTRVBBUkFUT1IKKwkJCU1CRUVfREVDTFNUTVMgSEVORAorCQl8CUVYUFJFU1NJT05fU0lNUCBIQkVHSU4gZXJyb3IgSEVORAorCQl8ICAgICAgIEVYUFJFU1NJT05fU0lNUAorCQl8CUFDVElWQVRPUiBFWFBSRVNTSU9OIFNDSEVEVUxFCisJCXwgICAgICAgSEJFR0lOCisJCQkJe30KKwkJCU1CRUVfREVDTFNUTVMKKwkJCUhFTkQKKwkJfCAgICAgICBNQkVFX1RZUEUgSFBST0NFRFVSRQorCQkJSElERU5USUZJRVIKKwkJCQl7fQorCQkJSEVBRElORyBCTE9DSworCQl8ICAgICAgIEhJREVOVElGSUVSCisJCQlIQ0xBU1MKKwkJCU5PX1RZUEUKKwkJCQl7fQorCQkJSU1QT1JUX1NQRUNfTU9EVUxFCisJCQlISURFTlRJRklFUgorCQkJCXt9CisJCQlIRUFESU5HCisJCQlCTE9DSworCQl8ICAgICAgIEhDTEFTUworCQkJTk9fVFlQRQorCQkJSElERU5USUZJRVIKKwkJCQl7fQorCQkJSEVBRElORworCQkJQkxPQ0sKKwkJfCAgICAgICBFWFRfREVDTEFSQVRJT04KKwkJfCAgICAgICAvKkVNUFQqLworCQk7CitJTVBPUlRfU1BFQ19NT0RVTEU6CisJCTsKK0RFQ0xTVEFURU1FTlQJOglNT0RVTFNUQVRFTUVOVAorCQl8ICAgICAgIFRZUEUKKwkJCUhJREVOVElGSUVSCisJCQlNQkVFX0NPTlNUQU5UCisJCQlIUEFSRVhQU0VQQVJBVE9SCisJCQkJe30KKwkJCUlERU5USUZJRVJfTElTVEMKKwkJfCAgICAgICBUWVBFCisJCQlISURFTlRJRklFUgorCQkJTUJFRV9DT05TVEFOVAorCQl8ICAgICAgIE1CRUVfVFlQRQorCQkJSEFSUkFZICB7fQorCQkJQVJSX1NFR01FTlRfTElTVAorCQl8ICAgICAgIEhTV0lUQ0gKKwkJCUhJREVOVElGSUVSCisJCQlIQVNTSUdOIHt9CisJCQlTV0lUQ0hfTElTVAorCQk7CitCTE9DSyAgICAgICAgICAgOiAgICAgICBERUNMU1RBVEVNRU5UCisJCXwgICAgICAgSEJFR0lOIE1CRUVfREVDTFNUTVMgSEVORAorCQl8CUhCRUdJTiBlcnJvciBIU1RBVEVNRU5UU0VQQVJBVE9SIE1CRUVfREVDTFNUTVMgSEVORAorCQl8CUhCRUdJTiBlcnJvciBIRU5ECisJCTsKK01CRUVfREVDTFNUTVMgICA6ICAgICAgIE1CRUVfREVDTFNUTVNVCisJCTsKK01CRUVfREVDTFNUTVNVICA6ICAgICAgIERFQ0xTVEFURU1FTlQKKwkJfCAgICAgICBNQkVFX0RFQ0xTVE1TVQorCQkJSFNUQVRFTUVOVFNFUEFSQVRPUgorCQkJREVDTFNUQVRFTUVOVAorCQk7CitNT0RVTFMJCToJTU9EVUxTVEFURU1FTlQKKwkJfAlNT0RVTFMgSFNUQVRFTUVOVFNFUEFSQVRPUiBNT0RVTFNUQVRFTUVOVAorCQk7CisvKiBHUkFNQVRJS0sgRk9SIERFTCBBViBERUtMQVJBU0pPTkVSICovCitBUlJfU0VHTUVOVF9MSVNUOiAgICAgICBBUlJfU0VHTUVOVAorCQl8ICAgICAgIEFSUl9TRUdNRU5UX0xJU1QKKwkJCUhQQVJFWFBTRVBBUkFUT1IKKwkJCUFSUl9TRUdNRU5UCisJCTsKK0FSUl9TRUdNRU5UCTogICAgICAgQVJSQVlfU0VHTUVOVAorCQkJSEJFR1BBUgorCQkJQkFVTkRfUEFJUl9MSVNUIEhFTkRQQVIKKwkJOworQVJSQVlfU0VHTUVOVCAgIDogICAgICAgQVJSQVlfU0VHTUVOVF9FTCAgICAgICAge30KKworCQl8ICAgICAgIEFSUkFZX1NFR01FTlRfRUwKKwkJCUhQQVJFWFBTRVBBUkFUT1IKKwkJCUFSUkFZX1NFR01FTlQKKwkJOworQVJSQVlfU0VHTUVOVF9FTDogICAgICAgSElERU5USUZJRVIKKwkJOworQkFVTkRfUEFJUl9MSVNUIDogICAgICAgQkFVTkRfUEFJUgorCQl8ICAgICAgIEJBVU5EX1BBSVIKKwkJCUhQQVJFWFBTRVBBUkFUT1IKKwkJCUJBVU5EX1BBSVJfTElTVAorCQk7CitCQVVORF9QQUlSICAgICAgOiAgICAgICBFWFBSRVNTSU9OCisJCQlITEFCRUxTRVBBUkFUT1IKKwkJCUVYUFJFU1NJT04KKwkJOworU1dJVENIX0xJU1QgICAgIDogICAgICAgRVhQUkVTU0lPTgorCQl8ICAgICAgIEVYUFJFU1NJT04KKwkJCUhQQVJFWFBTRVBBUkFUT1IKKwkJCVNXSVRDSF9MSVNUCisJCTsKK0hFQURJTkcgICAgICAgICA6ICAgICAgIE1CRUVfRk1BTF9QQVJfUCBIU1RBVEVNRU5UU0VQQVJBVE9SIHt9CisJCQlNQkVFX01PREVfUEFSVCAge30KKwkJCU1CRUVfU1BFQ19QQVJUICB7fQorCQkJTUJFRV9QUk9UX1BBUlQgIHt9CisJCQlNQkVFX1ZJUlRfUEFSVAorCQk7CitNQkVFX0ZNQUxfUEFSX1AgOiAgICAgICAvKkVNUFQqLworCQl8ICAgICAgIEZNQUxfUEFSX1BBUlQKKwkJOworRk1BTF9QQVJfUEFSVCAgIDogICAgICAgSEJFR1BBUiBOT19UWVBFCisJCQlNQkVFX0xJU1RWIEhFTkRQQVIKKwkJOworTUJFRV9MSVNUViAgICAgIDogICAgICAgLypFTVBUKi8KKwkJfCAgICAgICBMSVNUVgorCQk7CitMSVNUViAgICAgICAgICAgOiAgICAgICBISURFTlRJRklFUgorCQl8CUZQUF9DQVRFRyBIRE9URE9URE9UCisJCXwgICAgICAgSElERU5USUZJRVIgICAgIHt9CisJCQlIUEFSRVhQU0VQQVJBVE9SIExJU1RWCisJCXwgICAgICAgRlBQX1NQRUMKKwkJfCAgICAgICBGUFBfU1BFQworCQkJSFBBUkVYUFNFUEFSQVRPUiBMSVNUVgorCQk7CitGUFBfSEVBRElORyAgICAgOiAgICAgICBIQkVHUEFSIE5PX1RZUEUKKwkJCUZQUF9NQkVFX0xJU1RWIEhFTkRQQVIKKwkJOworRlBQX01CRUVfTElTVFYgIDogICAgICAgLypFTVBUKi8KKwkJfCAgICAgICBGUFBfTElTVFYKKwkJOworRlBQX0xJU1RWICAgICAgIDoJRlBQX0NBVEVHIEhET1RET1RET1QKKwkJfCAgICAgICBGUFBfU1BFQworCQl8ICAgICAgIEZQUF9TUEVDCisJCQlIUEFSRVhQU0VQQVJBVE9SIExJU1RWCisJCTsKK0ZQUF9TUEVDICAgICAgICA6ICAgICAgIEZQUF9DQVRFRyBTUEVDSUZJRVIgSElERU5USUZJRVIKKwkJfAlGUFBfQ0FURUcgRlBQX1BST0NfREVDTF9JTl9TUEVDCisJCTsKK0ZQUF9DQVRFRyAgICAgICA6ICAgICAgIEhOQU1FIEhMQUJFTFNFUEFSQVRPUgorCQl8ICAgICAgIEhWQUxVRSBITEFCRUxTRVBBUkFUT1IKKwkJfCAgICAgICBIVkFSIEhMQUJFTFNFUEFSQVRPUgorCQl8ICAgICAgIC8qRU1QVCovCisJCTsKK0ZQUF9QUk9DX0RFQ0xfSU5fU1BFQzoJTUJFRV9UWVBFIEhQUk9DRURVUkUKKwkJCUhJREVOVElGSUVSCisJCQkJCXt9CisJCQlGUFBfSEVBRElORyB7fSB7IC8qIFllcywgdHdvICJmaW5hbCIgYWN0aW9ucy4gKi8gfQorCQk7CitJREVOVElGSUVSX0xJU1RWOiAgICAgICBISURFTlRJRklFUgorCQl8CUhET1RET1RET1QKKwkJfCAgICAgICBISURFTlRJRklFUiAgICAge30KKwkJCUhQQVJFWFBTRVBBUkFUT1IgSURFTlRJRklFUl9MSVNUVgorCQk7CitNQkVFX01PREVfUEFSVCAgOiAgICAgICAvKkVNUFQqLworCQl8ICAgICAgIE1PREVfUEFSVAorCQk7CitNT0RFX1BBUlQgICAgICAgOiAgICAgICBOQU1FX1BBUlQKKwkJfCAgICAgICBWQUxVRV9QQVJUCisJCXwgICAgICAgVkFSX1BBUlQKKwkJfCAgICAgICBOQU1FX1BBUlQgVkFMVUVfUEFSVAorCQl8ICAgICAgIFZBTFVFX1BBUlQgTkFNRV9QQVJUCisJCXwgICAgICAgTkFNRV9QQVJUIFZBUl9QQVJUCisJCXwgICAgICAgVkFSX1BBUlQgTkFNRV9QQVJUCisJCXwgICAgICAgVkFMVUVfUEFSVCBWQVJfUEFSVAorCQl8ICAgICAgIFZBUl9QQVJUIFZBTFVFX1BBUlQKKwkJfCAgICAgICBWQVJfUEFSVCBOQU1FX1BBUlQgVkFMVUVfUEFSVAorCQl8ICAgICAgIE5BTUVfUEFSVCBWQVJfUEFSVCBWQUxVRV9QQVJUCisJCXwgICAgICAgTkFNRV9QQVJUIFZBTFVFX1BBUlQgVkFSX1BBUlQKKwkJfCAgICAgICBWQVJfUEFSVCBWQUxVRV9QQVJUIE5BTUVfUEFSVAorCQl8ICAgICAgIFZBTFVFX1BBUlQgVkFSX1BBUlQgTkFNRV9QQVJUCisJCXwgICAgICAgVkFMVUVfUEFSVCBOQU1FX1BBUlQgVkFSX1BBUlQKKwkJOworTkFNRV9QQVJUICAgICAgIDogICAgICAgSE5BTUUgICAgICAgICAgIHt9CisJCQlJREVOVElGSUVSX0xJU1RWCisJCQlIU1RBVEVNRU5UU0VQQVJBVE9SCisJCTsKK1ZBUl9QQVJUICAgICAgICA6ICAgICAgIEhWQVIgICAgICAgICAgICB7fQorCQkJSURFTlRJRklFUl9MSVNUVgorCQkJSFNUQVRFTUVOVFNFUEFSQVRPUgorCQk7CitWQUxVRV9QQVJUICAgICAgOiAgICAgICBIVkFMVUUgICAgICAgICAge30KKwkJCUlERU5USUZJRVJfTElTVFYgSFNUQVRFTUVOVFNFUEFSQVRPUgorCQk7CitNQkVFX1NQRUNfUEFSVCAgOiAgICAgICAvKkVNUFQqLworCQl8ICAgICAgIFNQRUNfUEFSVAorCQk7CitTUEVDX1BBUlQgICAgICAgOiAgICAgICBPTkVfU1BFQworCQl8ICAgICAgIFNQRUNfUEFSVCBPTkVfU1BFQworCQk7CitPTkVfU1BFQwk6CVNQRUNJRklFUiBJREVOVElGSUVSX0xJU1QgSFNUQVRFTUVOVFNFUEFSQVRPUgorCQl8CU5PX1RZUEUgSFBST0NFRFVSRSBISURFTlRJRklFUiBIT0JKUkVMT1BFUkFUT1IKKwkJCSAge30KKwkJCVBST0NfREVDTF9JTl9TUEVDIEhTVEFURU1FTlRTRVBBUkFUT1IKKwkJfCAgICAgICBGUFBfUFJPQ19ERUNMX0lOX1NQRUMgSFNUQVRFTUVOVFNFUEFSQVRPUgorCQl8ICAgICAgIE1CRUVfVFlQRSBIUFJPQ0VEVVJFIEhJREVOVElGSUVSIEhTVEFURU1FTlRTRVBBUkFUT1IKKwkJfCAgICAgICBNQkVFX1RZUEUgSFBST0NFRFVSRSBISURFTlRJRklFUiBIUEFSRVhQU0VQQVJBVE9SCisJCQlJREVOVElGSUVSX0xJU1QgSFNUQVRFTUVOVFNFUEFSQVRPUgorCQk7CitTUEVDSUZJRVIgICAgICAgOiAgICAgICBUWVBFCisJCXwgICAgICAgTUJFRV9UWVBFCisJCQlIQVJSQVkKKwkJfCAgICAgICBITEFCRUwKKwkJfCAgICAgICBIU1dJVENICisJCTsKK1BST0NfREVDTF9JTl9TUEVDOglNQkVFX1RZUEUgSFBST0NFRFVSRQorCQkJSElERU5USUZJRVIKKwkJCQkJe30KKwkJCUhFQURJTkcKKwkJCQkJe30KKwkJCU1CRUVfQkVHSU5fRU5ECisJCTsKK01CRUVfQkVHSU5fRU5ECToJLyogRU1QVFkgKi8KKwkJfAlIQkVHSU4gSEVORAorCQk7CitNQkVFX1BST1RfUEFSVCAgOiAgICAgICAvKkVNUFQqLworCQl8ICAgICAgIFBST1RFQ1RJT05fUEFSVAorCQk7CitQUk9URUNUSU9OX1BBUlQgOiAgICAgICBQUk9UX1NQRUNJRklFUiBJREVOVElGSUVSX0xJU1QKKwkJCUhTVEFURU1FTlRTRVBBUkFUT1IKKwkJfCAgICAgICBQUk9URUNUSU9OX1BBUlQgIFBST1RfU1BFQ0lGSUVSCisJCQlJREVOVElGSUVSX0xJU1QgSFNUQVRFTUVOVFNFUEFSQVRPUgorCQk7CitQUk9UX1NQRUNJRklFUiAgOiAgICAgICBISElEREVOCisJCXwgICAgICAgSFBST1RFQ1RFRAorCQl8ICAgICAgIEhISURERU4KKwkJCUhQUk9URUNURUQKKwkJfCAgICAgICBIUFJPVEVDVEVECisJCQlISElEREVOCisJCTsKK01CRUVfVklSVF9QQVJUICA6ICAgICAgIC8qRU1QVCovCisJCXwgICAgICAgVklSVFVBTF9QQVJUCisJCTsKK1ZJUlRVQUxfUEFSVCAgICA6ICAgICAgIEhWSVJUVUFMCisJCQlITEFCRUxTRVBBUkFUT1IKKwkJCU1CRUVfU1BFQ19QQVJUCisJCTsKK0lERU5USUZJRVJfTElTVCA6ICAgICAgIEhJREVOVElGSUVSCisJCXwgICAgICAgSURFTlRJRklFUl9MSVNUIEhQQVJFWFBTRVBBUkFUT1IKKwkJCUhJREVOVElGSUVSCisJCTsKK0lERU5USUZJRVJfTElTVEM6ICAgICAgIEhJREVOVElGSUVSCisJCQlNQkVFX0NPTlNUQU5UCisJCXwgICAgICAgSURFTlRJRklFUl9MSVNUQyBIUEFSRVhQU0VQQVJBVE9SCisJCQlISURFTlRJRklFUgorCQkJTUJFRV9DT05TVEFOVAorCQk7CitNQkVFX0NPTlNUQU5UCToJLyogRU1QVFkgKi8KKwkJfAlIVkFMUkVMT1BFUkFUT1IKKwkJCQl7fQorCQkJRVhQUkVTU0lPTgorCQk7CisKKy8qIEdSQU1BVElLSyBGT1IgVVRUUllLSyAqLworRVhQUkVTU0lPTiAgICAgIDogICAgICAgRVhQUkVTU0lPTl9TSU1QCisJCXwgICAgICAgSElGCisJCQlFWFBSRVNTSU9OCisJCQlIVEhFTgorCQkJRVhQUkVTU0lPTgorCQkJSEVMU0UKKwkJCUVYUFJFU1NJT04KKwkJOworRVhQUkVTU0lPTl9TSU1QIDoJRVhQUkVTU0lPTl9TSU1QCisJCQlIQVNTSUdOCisJCQlFWFBSRVNTSU9OCisJCXwKKworCQkJRVhQUkVTU0lPTl9TSU1QCisJCQlIQ09OQworCQkJRVhQUkVTU0lPTl9TSU1QCisJCXwgICAgICAgRVhQUkVTU0lPTl9TSU1QIEhPUgorCQkJSEVMU0UKKwkJCUVYUFJFU1NJT05fU0lNUAorCQkJJXByZWMgSE9SRUxTRQorCQl8ICAgICAgIEVYUFJFU1NJT05fU0lNUCBIQU5ECisJCQlIVEhFTgorCQkJRVhQUkVTU0lPTl9TSU1QCisJCQklcHJlYyBIQU5EVEhFTgorCQl8ICAgICAgIEVYUFJFU1NJT05fU0lNUAorCQkJSEVRViBFWFBSRVNTSU9OX1NJTVAKKwkJfCAgICAgICBFWFBSRVNTSU9OX1NJTVAKKwkJCUhJTVAgRVhQUkVTU0lPTl9TSU1QCisJCXwgICAgICAgRVhQUkVTU0lPTl9TSU1QCisJCQlIT1IgRVhQUkVTU0lPTl9TSU1QCisJCXwgICAgICAgRVhQUkVTU0lPTl9TSU1QCisJCQlIQU5EIEVYUFJFU1NJT05fU0lNUAorCQl8ICAgICAgIEhOT1QgRVhQUkVTU0lPTl9TSU1QCisJCXwgICAgICAgRVhQUkVTU0lPTl9TSU1QCisJCQlIVkFMUkVMT1BFUkFUT1IKKwkJCUVYUFJFU1NJT05fU0lNUAorCQl8ICAgICAgIEVYUFJFU1NJT05fU0lNUAorCQkJSFJFRlJFTE9QRVJBVE9SCisJCQlFWFBSRVNTSU9OX1NJTVAKKwkJfCAgICAgICBFWFBSRVNTSU9OX1NJTVAKKwkJCUhPQkpSRUxPUEVSQVRPUgorCQkJRVhQUkVTU0lPTl9TSU1QCisJCXwgICAgICAgSFRFUk1PUEVSQVRPUgorCQkJRVhQUkVTU0lPTl9TSU1QICVwcmVjIFVORUFSCisJCXwgICAgICAgRVhQUkVTU0lPTl9TSU1QCisJCQlIVEVSTU9QRVJBVE9SCisJCQlFWFBSRVNTSU9OX1NJTVAKKwkJfCAgICAgICBFWFBSRVNTSU9OX1NJTVAKKwkJCUhGQUNUT1JPUEVSQVRPUgorCQkJRVhQUkVTU0lPTl9TSU1QCisJCXwgICAgICAgRVhQUkVTU0lPTl9TSU1QCisJCQlIUFJJTUFSWU9QRVJBVE9SCisJCQlFWFBSRVNTSU9OX1NJTVAKKwkJfCAgICAgICBIQkVHUEFSCisJCQlFWFBSRVNTSU9OIEhFTkRQQVIKKwkJfCAgICAgICBIVEVYVEtPTlNUCisJCXwgICAgICAgSENIQVJBQ1RFUktPTlNUCisJCXwgICAgICAgSFJFQUxLT05TVAorCQl8ICAgICAgIEhJTlRFR0VSS09OU1QKKwkJfCAgICAgICBIQk9PTEVBTktPTlNUCisJCXwgICAgICAgSE5PTkUKKwkJfCAgICAgICBISURFTlRJRklFUgorCQkJCXt9CisJCQlNQkVFX0FSR19SX1BUCisJCXwgICAgICAgSFRISVMgSElERU5USUZJRVIKKwkJfCAgICAgICBITkVXCisJCQlISURFTlRJRklFUgorCQkJQVJHX1JfUFQKKwkJfCAgICAgICBFWFBSRVNTSU9OX1NJTVAKKwkJCUhET1QKKwkJCUVYUFJFU1NJT05fU0lNUAorCQl8ICAgICAgIEVYUFJFU1NJT05fU0lNUAorCQkJSFFVQSBISURFTlRJRklFUgorCQk7CitBUkdfUl9QVCAgICAgICAgOiAgICAgICAvKkVNUFRZKi8KKwkJfCAgICAgICBIQkVHUEFSCisJCQlBUkdVTUVOVF9MSVNUIEhFTkRQQVIKKwkJOworTUJFRV9BUkdfUl9QVCAgIDogICAgICAgLypFTVBUWSovCisJCXwgICAgICAgSEJFR1BBUgorCQkJQVJHVU1FTlRfTElTVCBIRU5EUEFSCisJCTsKK0FSR1VNRU5UX0xJU1QgICA6ICAgICAgIEVYUFJFU1NJT04KKwkJfCAgICAgICBFWFBSRVNTSU9OCisJCQlIUEFSRVhQU0VQQVJBVE9SCisJCQlBUkdVTUVOVF9MSVNUCisJCTsKKworCislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KK3N0YXRpYyBpbnQKK3l5bGV4ICh2b2lkKQoreworICBzdGF0aWMgaW50IGNvbnN0IGlucHV0W10gPSB7CisgICAgMAorICB9OworICBzdGF0aWMgaW50IGNvbnN0ICppbnB1dHAgPSBpbnB1dDsKKyAgcmV0dXJuICppbnB1dHArKzsKK30KKworaW50CittYWluICh2b2lkKQoreworICByZXR1cm4geXlwYXJzZSAoKTsKK30KK19BVEVPRgorCisKKworIyBJbiBzb21lIHZlcnNpb25zIG9mIEF1dG9jb25mLCBBVF9DSEVDSyBpbnZva2VzIEFTX0VTQ0FQRSBiZWZvcmUKKyMgZXhwYW5kaW5nIG1hY3Jvcywgc28gaXQgY29ycnVwdHMgc29tZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlCisjIG1hY3Jvcy4gIFRvIGF2b2lkIHRoaXMsIGV4cGFuZCBub3cgYW5kIHBhc3MgaXQgdGhlIHJlc3VsdCB3aXRoIHByb3BlcgorIyBzdHJpbmcgcXVvdGF0aW9uLiAgQXNzdW1lIGFyZ3MgNyB0aHJvdWdoIDEyIGV4cGFuZCB0byBwcm9wZXJseSBxdW90ZWQKKyMgc3RyaW5ncy4KKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImV4aXN0aW5nLmF0Ojc4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzgzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIgImV4aXN0aW5nLmF0Ojc4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImV4aXN0aW5nLmF0Ojc4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJleGlzdGluZy5hdDo3ODMiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzgzOiBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImV4aXN0aW5nLmF0Ojc4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6IGNvbmZsaWN0czogNzggc2hpZnQvcmVkdWNlLCAxMCByZWR1Y2UvcmVkdWNlCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4Mzogc2VkIC1uICdzL15TdGF0ZSAvL3AnIGlucHV0Lm91dHB1dCB8IHRhaWwgLTEiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2Egc2hlbGwgcGlwZWxpbmUnICJleGlzdGluZy5hdDo3ODMiCisoICRhdF9jaGVja190cmFjZTsgc2VkIC1uICdzL15TdGF0ZSAvL3AnIGlucHV0Lm91dHB1dCB8IHRhaWwgLTEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICI0NDIKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MzogZGlmZiAtdSAvZGV2L251bGwgL2Rldi9udWxsIHx8IGV4aXQgNzciCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJleGlzdGluZy5hdDo3ODMiCisoICRhdF9jaGVja190cmFjZTsgZGlmZiAtdSAvZGV2L251bGwgL2Rldi9udWxsIHx8IGV4aXQgNzcKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODM6IHNlZCAncy9eJWRlZmluZSBsci50eXBlIC4qXCQvLycgaW5wdXQueSA+IGlucHV0LWxhbHIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAic2VkICdzL14lZGVmaW5lIGxyLnR5cGUgLiokLy8nIGlucHV0LnkgPiBpbnB1dC1sYWxyLnkiICJleGlzdGluZy5hdDo3ODMiCisoICRhdF9jaGVja190cmFjZTsgc2VkICdzL14lZGVmaW5lIGxyLnR5cGUgLiokLy8nIGlucHV0LnkgPiBpbnB1dC1sYWxyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgaW5wdXQtbGFsci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiZXhpc3RpbmcuYXQ6NzgzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tcmVwb3J0PWFsbCBpbnB1dC1sYWxyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIGlucHV0LWxhbHIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgaW5wdXQtbGFsci55IiAiZXhpc3RpbmcuYXQ6NzgzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tcmVwb3J0PWFsbCBpbnB1dC1sYWxyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJleGlzdGluZy5hdDo3ODMiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzgzOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiZXhpc3RpbmcuYXQ6NzgzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MzogYmlzb24gLS1yZXBvcnQ9YWxsIGlucHV0LWxhbHIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImV4aXN0aW5nLmF0Ojc4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtLXJlcG9ydD1hbGwgaW5wdXQtbGFsci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODM6IGRpZmYgLXUgaW5wdXQtbGFsci5vdXRwdXQgaW5wdXQub3V0cHV0IFxcCisgICAgICAgICAgIHwgc2VkIC1uICcvXkBALyxcJHAnIHwgc2VkICdzL14gXCQvLyciCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJleGlzdGluZy5hdDo3ODMiCisoICRhdF9jaGVja190cmFjZTsgZGlmZiAtdSBpbnB1dC1sYWxyLm91dHB1dCBpbnB1dC5vdXRwdXQgXAorICAgICAgICAgICB8IHNlZCAtbiAnL15AQC8sJHAnIHwgc2VkICdzL14gJC8vJworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MzogZ3JlcCAnXlN0YXRlLipjb25mbGljdHM6JyBpbnB1dC5vdXRwdXQiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJleGlzdGluZy5hdDo3ODMiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnXlN0YXRlLipjb25mbGljdHM6JyBpbnB1dC5vdXRwdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJTdGF0ZSA2NCBjb25mbGljdHM6IDE0IHNoaWZ0L3JlZHVjZQorU3RhdGUgMTY0IGNvbmZsaWN0czogMSBzaGlmdC9yZWR1Y2UKK1N0YXRlIDIwMSBjb25mbGljdHM6IDMzIHNoaWZ0L3JlZHVjZSwgNCByZWR1Y2UvcmVkdWNlCitTdGF0ZSAyMDYgY29uZmxpY3RzOiAxIHNoaWZ0L3JlZHVjZQorU3RhdGUgMjQwIGNvbmZsaWN0czogMSBzaGlmdC9yZWR1Y2UKK1N0YXRlIDMzNSBjb25mbGljdHM6IDkgc2hpZnQvcmVkdWNlLCAyIHJlZHVjZS9yZWR1Y2UKK1N0YXRlIDM1NiBjb25mbGljdHM6IDEgc2hpZnQvcmVkdWNlCitTdGF0ZSAzNjAgY29uZmxpY3RzOiA5IHNoaWZ0L3JlZHVjZSwgMiByZWR1Y2UvcmVkdWNlCitTdGF0ZSA0MjcgY29uZmxpY3RzOiA5IHNoaWZ0L3JlZHVjZSwgMiByZWR1Y2UvcmVkdWNlCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgQ2Fub25pY2FsIExSIGdlbmVyYXRlcyB2ZXJ5IGxhcmdlIHRhYmxlcywgcmVzdWx0aW5nIGluIHZlcnkgbG9uZworIyBmaWxlcyB3aXRoICNsaW5lIGRpcmVjdGl2ZXMgdGhhdCBtYXkgb3ZlcmZsb3cgd2hhdCB0aGUgc3RhbmRhcmRzCisjIChDOTAgYW5kIEMrKzk4KSBndWFyYW50ZWU6IDMyNzY3LiAgSW4gdGhhdCBjYXNlLCBHQ0MncyAtcGVkYW50aWMKKyMgd2lsbCBpc3N1ZSBhbiBlcnJvci4KKyMKKyMgVGhlcmUgaXMgbm8gIiIgYXJvdW5kIGB3Y2Agc2luY2Ugc29tZSBpbmRlbnQgdGhlIHJlc3VsdC4KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MzogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImV4aXN0aW5nLmF0Ojc4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MzogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJleGlzdGluZy5hdDo3ODMiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MzogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJleGlzdGluZy5hdDo3ODMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4Mzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJleGlzdGluZy5hdDo3ODMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yNjMKKyNBVF9TVEFSVF8yNjQKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyNjQgJ2V4aXN0aW5nLmF0Ojc4MycgXAorICAiR05VIENpbSBHcmFtbWFyOiBDYW5vbmljYWwgTFIoMSkiICIgICAgICAgICAgICAgICAiIDE2CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjY0LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVjb2RlIHsKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKK30KKworJWRlZmluZSBsci50eXBlIGNhbm9uaWNhbC1scgorCisldG9rZW4KKwlIQUNUSVZBVEUgSEFGVEVSIC8qSEFORCovIEhBUlJBWSBIQVQKKwlIQkVGT1JFIEhCRUdJTiBIQk9PTEVBTgorCUhDSEFSQUNURVIgSENMQVNTIC8qSENPTU1FTlQqLyBIQ09OQworCUhERUxBWSBIRE8KKwlIRUxTRSBIRU5EIEhFUSAvKkhFUVYqLyBIRVhURVJOQUwKKwlIRk9SCisJSEdFIEhHTyBIR09UTyBIR1QKKwlISElEREVOCisJSElGIC8qSElNUCovIEhJTiBISU5ORVIgSElOU1BFQ1QgSElOVEVHRVIgSElTCisJSExBQkVMIEhMRSBITE9ORyBITFQKKwlITkFNRSBITkUgSE5FVyBITk9ORSAvKkhOT1QqLyBITk9URVhUCisJLypIT1IqLyBIT1RIRVJXSVNFCisJSFBSSU9SIEhQUk9DRURVUkUgSFBST1RFQ1RFRAorCUhRVUEKKwlIUkVBQ1RJVkFURSBIUkVBTCBIUkVGCisJSFNIT1JUIEhTVEVQIEhTV0lUQ0gKKwlIVEVYVCBIVEhFTiBIVEhJUyBIVE8KKwlIVU5USUwKKwlIVkFMVUUgSFZBUiBIVklSVFVBTAorCUhXSEVOIEhXSElMRQorCisJSEFTU0lHTlZBTFVFIEhBU1NJR05SRUYKKwkvKkhET1QqLyBIUEFSRVhQU0VQQVJBVE9SIEhMQUJFTFNFUEFSQVRPUiBIU1RBVEVNRU5UU0VQQVJBVE9SCisJSEJFR1BBUiBIRU5EUEFSCisJSEVRUiBITkVSCisJSEFERCBIU1VCIEhNVUwgSERJViBISU5URElWIEhFWFAKKwlIRE9URE9URE9UCisKKyV0b2tlbiBISURFTlRJRklFUgorJXRva2VuIEhCT09MRUFOS09OU1QgSElOVEVHRVJLT05TVCBIQ0hBUkFDVEVSS09OU1QKKyV0b2tlbiBIUkVBTEtPTlNUCisldG9rZW4gSFRFWFRLT05TVAorCisKKyVyaWdodCBIQVNTSUdOCislbGVmdCAgIEhPUkVMU0UKKyVsZWZ0ICAgSEFORFRIRU4KKyVsZWZ0ICAgSEVRVgorJWxlZnQgICBISU1QCislbGVmdCAgIEhPUgorJWxlZnQgICBIQU5ECisKKyVsZWZ0ICAgSE5PVAorCislbGVmdCBIVkFMUkVMT1BFUkFUT1IgSFJFRlJFTE9QRVJBVE9SIEhPQkpSRUxPUEVSQVRPUgorCislbGVmdAlIQ09OQworCislbGVmdCBIVEVSTU9QRVJBVE9SCislbGVmdCBVTkVBUgorJWxlZnQgSEZBQ1RPUk9QRVJBVE9SCislbGVmdCAgICAgICAgIEhQUklNQVJZT1BFUkFUT1IKKworJWxlZnQgICBIUVVBCisKKyVsZWZ0ICAgSERPVAorCislc3RhcnQgIE1BSU5fTU9EVUxFCisKKworJSUKKworCisvKiBHUkFNQVRJS0sgRk9SIFBST0dSQU0gTU9EVUxFUyAqLworTUFJTl9NT0RVTEUgICAgIDogICAgICAge30KKwkJCU1PRFVMUworCQl8CWVycm9yIEhTVEFURU1FTlRTRVBBUkFUT1IgTUJFRV9ERUNMU1RNUworCQk7CitFWFRfREVDTEFSQVRJT04JOglIRVhURVJOQUwKKwkJCU1CRUVfVFlQRQorCQkJSFBST0NFRFVSRQorCQkJCXt9CisJCQlFWFRfTElTVAorCQl8CisJCQlIRVhURVJOQUwKKwkJCUhJREVOVElGSUVSCisJCQlIUFJPQ0VEVVJFCisJCQkJe30KKwkJCUhJREVOVElGSUVSIHt9CisJCQlFWFRFUk5BTF9LSU5EX0lURU0KKwkJfAlIRVhURVJOQUwKKwkJCUhDTEFTUworCQkJCXt9CisJCQlFWFRfTElTVAorCisJCTsKK0VYVEVSTkFMX0tJTkRfSVRFTToJRVhUX0lERU5UCisJCQlIT0JKUkVMT1BFUkFUT1IKKwkJCQl7fQorCQkJTUJFRV9UWVBFIEhQUk9DRURVUkUKKwkJCUhJREVOVElGSUVSCisJCQkJe30KKwkJCUhFQURJTkcgRU1QVFlfQkxPQ0sKKwkJCQl7fQorLyoJCXwKKwkJCUVYVF9JREVOVAorCQkJCXt9CisJCQlNQkVFX1JFU1RfRVhUX0xJU1QKKwkJOworTUJFRV9SRVNUX0VYVF9MSVNUOgkvKiBFTVBUWQorCQl8CUhQQVJFWFBTRVBBUkFUT1IgRVhUX0tJTkRfTElTVAorCQk7CitFWFRfS0lORF9MSVNUCToJRVhUX0tJTkRfSVRFTQorCQl8CUVYVF9LSU5EX0xJU1QgSFBBUkVYUFNFUEFSQVRPUiBFWFRfS0lORF9JVEVNCisJCTsKK0VYVF9LSU5EX0lURU0JOglISURFTlRJRklFUgorCQkJRVhUX0lERU5UCisJCQkJe30qLworCQk7CitFTVBUWV9CTE9DSwk6CS8qRU1QVCovCisJCXwJSEJFR0lOIEhFTkQKKwkJOworRVhUX0xJU1QJOglFWFRfSVRFTQorCQl8CUVYVF9MSVNUIEhQQVJFWFBTRVBBUkFUT1IgRVhUX0lURU0KKwkJOworRVhUX0lURU0JOglISURFTlRJRklFUgorCQkJRVhUX0lERU5UCisJCTsKK0VYVF9JREVOVAk6CS8qIEVNUFRZICovCisJCXwJSFZBTFJFTE9QRVJBVE9SIHt9CisJCQlIVEVYVEtPTlNUCisJCTsKKy8qIEdSQU1BVElLSyBGT1IgVFlQRVIgKi8KK05PX1RZUEUgICAgICAgICA6ICAgICAgIC8qRU1QVCovCisJCTsKK01CRUVfVFlQRSAgICAgICA6ICAgICAgIE5PX1RZUEUKKwkJfCAgICAgICBUWVBFCisJCTsKK1RZUEUgICAgICAgICAgICA6ICAgICAgIEhSRUYgSEJFR1BBUgorCQkJSElERU5USUZJRVIKKwkJCQl7fQorCQkJSEVORFBBUgorCQl8ICAgICAgIEhURVhUCisJCXwgICAgICAgSEJPT0xFQU4KKwkJfCAgICAgICBIQ0hBUkFDVEVSCisJCXwgICAgICAgSFNIT1JUIEhJTlRFR0VSCisJCXwgICAgICAgSElOVEVHRVIKKwkJfCAgICAgICBIUkVBTAorCQl8ICAgICAgIEhMT05HIEhSRUFMCisJCTsKKworLyogR1JBTUFUSUtLIEZPUiBERUwgQVYgU0VUTklOR0VSICovCitNQkVFX0VMU0VfUEFSVCAgOiAgICAgICAvKkVNUFQqLworLyoJCXwJSEVMU0UKKwkJCUhJRgorCQkJRVhQUkVTU0lPTgorCQkJSFRIRU4gICB7fQorCQkJQkxPQ0sgICB7fQorCQkJTUJFRV9FTFNFX1BBUlQgICAgICAgICAge30qLworCQl8ICAgICAgIEhFTFNFICAge30KKwkJCUJMT0NLCisJCTsKK0ZPUl9MSVNUICAgICAgICA6ICAgICAgIEZPUl9MSVNUX0VMRU1FTlQKKwkJfCAgICAgICBGT1JfTElTVF9FTEVNRU5UCisJCQlIUEFSRVhQU0VQQVJBVE9SCisJCQlGT1JfTElTVAorCQk7CitGT1JfTElTVF9FTEVNRU5UOiAgICAgICBFWFBSRVNTSU9OCisJCQlNQkVFX0ZfTF9FTF9SX1BUCisJCTsKK01CRUVfRl9MX0VMX1JfUFQ6ICAgICAgIC8qRU1QVCovCisJCXwgICAgICAgSFdISUxFCisJCQlFWFBSRVNTSU9OCisJCXwgICAgICAgSFNURVAKKwkJCUVYUFJFU1NJT04KKwkJCUhVTlRJTAorCQkJRVhQUkVTU0lPTgorCQk7CitHT1RPICAgICAgICAgICAgOiAgICAgICBIR08KKwkJCUhUTworCQl8ICAgICAgIEhHT1RPCisJCTsKK0NPTk5fU1RBVEVfUl9QVCA6ICAgICAgIFdIRU5fQ0xBVVNFX0xJU1QKKwkJfCAgICAgICBIRE8gICB7fQorCQkJQkxPQ0sKKwkJOworV0hFTl9DTEFVU0VfTElTVDogICAgICAgSFdIRU4KKwkJCUhJREVOVElGSUVSCisJCQlIRE8gICAge30KKwkJCUJMT0NLCisJCXwgICAgICAgV0hFTl9DTEFVU0VfTElTVAorCQkJSFdIRU4KKwkJCUhJREVOVElGSUVSCisJCQlIRE8gICAge30KKwkJCUJMT0NLCisJCTsKK01CRUVfT1RXSV9DTEFVUyA6ICAgICAgIC8qRU1QVCovCisJCXwgICAgICAgSE9USEVSV0lTRSB7fQorCisJCQlCTE9DSworCQk7CitBQ1RJVkFUT1IJOglIQUNUSVZBVEUKKwkJfAlIUkVBQ1RJVkFURQorCQk7CitTQ0hFRFVMRQk6CS8qRU1QVCovCisJCXwJQVRERUxBWSBFWFBSRVNTSU9OCXt9CisJCQlQUklPUgorCQl8CUJFRk9SRUFGVEVSCQl7fQorCQkJRVhQUkVTU0lPTgorCQk7CitBVERFTEFZCQk6CUhBVAorCQl8CUhERUxBWQorCQk7CitCRUZPUkVBRlRFUgk6CUhCRUZPUkUKKwkJfAlIQUZURVIKKwkJOworUFJJT1IJCToJLypFTVBUKi8KKwkJfAlIUFJJT1IKKwkJOworLyogR1JBTUFUSUtLIEZPUiBTRVROSU5HRVIgT0cgREVLTEFSQVNKT05FUiAqLworTU9EVUxTVEFURU1FTlQgIDogICAgICAgSFdISUxFCisJCQlFWFBSRVNTSU9OCisJCQlIRE8gICAgIHt9CisJCQlCTE9DSworCQl8ICAgICAgIEhJRgorCQkJRVhQUkVTU0lPTgorCQkJSFRIRU4gICB7fQorCQkJQkxPQ0sgICB7fQorCQkJTUJFRV9FTFNFX1BBUlQKKwkJfCAgICAgICBIRk9SCisJCQlISURFTlRJRklFUgorCQkJSEFTU0lHTiB7fQorCQkJRk9SX0xJU1QKKwkJCUhETyAgICAge30KKwkJCUJMT0NLCisJCXwgICAgICAgR09UTworCQkJRVhQUkVTU0lPTgorCQl8ICAgICAgIEhJTlNQRUNUCisJCQlFWFBSRVNTSU9OICAgICAgICAgICAgICB7fQorCQkJQ09OTl9TVEFURV9SX1BUCisJCQkJe30KKwkJCU1CRUVfT1RXSV9DTEFVUworCQl8ICAgICAgIEhJTk5FUgorCQl8ICAgICAgIEhJREVOVElGSUVSCisJCQlITEFCRUxTRVBBUkFUT1IKKwkJCQl7fQorCQkJREVDTFNUQVRFTUVOVAorCQl8ICAgICAgIEVYUFJFU1NJT05fU0lNUAorCQkJSEJFR0lOCisJCQkJe30KKwkJCUlNUE9SVF9TUEVDX01PRFVMRQorCQkJCXt9CisJCQlNQkVFX0RFQ0xTVE1TCisJCQlIRU5ECisJCXwJRVhQUkVTU0lPTl9TSU1QIEhCRUdJTiBlcnJvciBIU1RBVEVNRU5UU0VQQVJBVE9SCisJCQlNQkVFX0RFQ0xTVE1TIEhFTkQKKwkJfAlFWFBSRVNTSU9OX1NJTVAgSEJFR0lOIGVycm9yIEhFTkQKKwkJfCAgICAgICBFWFBSRVNTSU9OX1NJTVAKKwkJfAlBQ1RJVkFUT1IgRVhQUkVTU0lPTiBTQ0hFRFVMRQorCQl8ICAgICAgIEhCRUdJTgorCQkJCXt9CisJCQlNQkVFX0RFQ0xTVE1TCisJCQlIRU5ECisJCXwgICAgICAgTUJFRV9UWVBFIEhQUk9DRURVUkUKKwkJCUhJREVOVElGSUVSCisJCQkJe30KKwkJCUhFQURJTkcgQkxPQ0sKKwkJfCAgICAgICBISURFTlRJRklFUgorCQkJSENMQVNTCisJCQlOT19UWVBFCisJCQkJe30KKwkJCUlNUE9SVF9TUEVDX01PRFVMRQorCQkJSElERU5USUZJRVIKKwkJCQl7fQorCQkJSEVBRElORworCQkJQkxPQ0sKKwkJfCAgICAgICBIQ0xBU1MKKwkJCU5PX1RZUEUKKwkJCUhJREVOVElGSUVSCisJCQkJe30KKwkJCUhFQURJTkcKKwkJCUJMT0NLCisJCXwgICAgICAgRVhUX0RFQ0xBUkFUSU9OCisJCXwgICAgICAgLypFTVBUKi8KKwkJOworSU1QT1JUX1NQRUNfTU9EVUxFOgorCQk7CitERUNMU1RBVEVNRU5UCToJTU9EVUxTVEFURU1FTlQKKwkJfCAgICAgICBUWVBFCisJCQlISURFTlRJRklFUgorCQkJTUJFRV9DT05TVEFOVAorCQkJSFBBUkVYUFNFUEFSQVRPUgorCQkJCXt9CisJCQlJREVOVElGSUVSX0xJU1RDCisJCXwgICAgICAgVFlQRQorCQkJSElERU5USUZJRVIKKwkJCU1CRUVfQ09OU1RBTlQKKwkJfCAgICAgICBNQkVFX1RZUEUKKwkJCUhBUlJBWSAge30KKwkJCUFSUl9TRUdNRU5UX0xJU1QKKwkJfCAgICAgICBIU1dJVENICisJCQlISURFTlRJRklFUgorCQkJSEFTU0lHTiB7fQorCQkJU1dJVENIX0xJU1QKKwkJOworQkxPQ0sgICAgICAgICAgIDogICAgICAgREVDTFNUQVRFTUVOVAorCQl8ICAgICAgIEhCRUdJTiBNQkVFX0RFQ0xTVE1TIEhFTkQKKwkJfAlIQkVHSU4gZXJyb3IgSFNUQVRFTUVOVFNFUEFSQVRPUiBNQkVFX0RFQ0xTVE1TIEhFTkQKKwkJfAlIQkVHSU4gZXJyb3IgSEVORAorCQk7CitNQkVFX0RFQ0xTVE1TICAgOiAgICAgICBNQkVFX0RFQ0xTVE1TVQorCQk7CitNQkVFX0RFQ0xTVE1TVSAgOiAgICAgICBERUNMU1RBVEVNRU5UCisJCXwgICAgICAgTUJFRV9ERUNMU1RNU1UKKwkJCUhTVEFURU1FTlRTRVBBUkFUT1IKKwkJCURFQ0xTVEFURU1FTlQKKwkJOworTU9EVUxTCQk6CU1PRFVMU1RBVEVNRU5UCisJCXwJTU9EVUxTIEhTVEFURU1FTlRTRVBBUkFUT1IgTU9EVUxTVEFURU1FTlQKKwkJOworLyogR1JBTUFUSUtLIEZPUiBERUwgQVYgREVLTEFSQVNKT05FUiAqLworQVJSX1NFR01FTlRfTElTVDogICAgICAgQVJSX1NFR01FTlQKKwkJfCAgICAgICBBUlJfU0VHTUVOVF9MSVNUCisJCQlIUEFSRVhQU0VQQVJBVE9SCisJCQlBUlJfU0VHTUVOVAorCQk7CitBUlJfU0VHTUVOVAk6ICAgICAgIEFSUkFZX1NFR01FTlQKKwkJCUhCRUdQQVIKKwkJCUJBVU5EX1BBSVJfTElTVCBIRU5EUEFSCisJCTsKK0FSUkFZX1NFR01FTlQgICA6ICAgICAgIEFSUkFZX1NFR01FTlRfRUwgICAgICAgIHt9CisKKwkJfCAgICAgICBBUlJBWV9TRUdNRU5UX0VMCisJCQlIUEFSRVhQU0VQQVJBVE9SCisJCQlBUlJBWV9TRUdNRU5UCisJCTsKK0FSUkFZX1NFR01FTlRfRUw6ICAgICAgIEhJREVOVElGSUVSCisJCTsKK0JBVU5EX1BBSVJfTElTVCA6ICAgICAgIEJBVU5EX1BBSVIKKwkJfCAgICAgICBCQVVORF9QQUlSCisJCQlIUEFSRVhQU0VQQVJBVE9SCisJCQlCQVVORF9QQUlSX0xJU1QKKwkJOworQkFVTkRfUEFJUiAgICAgIDogICAgICAgRVhQUkVTU0lPTgorCQkJSExBQkVMU0VQQVJBVE9SCisJCQlFWFBSRVNTSU9OCisJCTsKK1NXSVRDSF9MSVNUICAgICA6ICAgICAgIEVYUFJFU1NJT04KKwkJfCAgICAgICBFWFBSRVNTSU9OCisJCQlIUEFSRVhQU0VQQVJBVE9SCisJCQlTV0lUQ0hfTElTVAorCQk7CitIRUFESU5HICAgICAgICAgOiAgICAgICBNQkVFX0ZNQUxfUEFSX1AgSFNUQVRFTUVOVFNFUEFSQVRPUiB7fQorCQkJTUJFRV9NT0RFX1BBUlQgIHt9CisJCQlNQkVFX1NQRUNfUEFSVCAge30KKwkJCU1CRUVfUFJPVF9QQVJUICB7fQorCQkJTUJFRV9WSVJUX1BBUlQKKwkJOworTUJFRV9GTUFMX1BBUl9QIDogICAgICAgLypFTVBUKi8KKwkJfCAgICAgICBGTUFMX1BBUl9QQVJUCisJCTsKK0ZNQUxfUEFSX1BBUlQgICA6ICAgICAgIEhCRUdQQVIgTk9fVFlQRQorCQkJTUJFRV9MSVNUViBIRU5EUEFSCisJCTsKK01CRUVfTElTVFYgICAgICA6ICAgICAgIC8qRU1QVCovCisJCXwgICAgICAgTElTVFYKKwkJOworTElTVFYgICAgICAgICAgIDogICAgICAgSElERU5USUZJRVIKKwkJfAlGUFBfQ0FURUcgSERPVERPVERPVAorCQl8ICAgICAgIEhJREVOVElGSUVSICAgICB7fQorCQkJSFBBUkVYUFNFUEFSQVRPUiBMSVNUVgorCQl8ICAgICAgIEZQUF9TUEVDCisJCXwgICAgICAgRlBQX1NQRUMKKwkJCUhQQVJFWFBTRVBBUkFUT1IgTElTVFYKKwkJOworRlBQX0hFQURJTkcgICAgIDogICAgICAgSEJFR1BBUiBOT19UWVBFCisJCQlGUFBfTUJFRV9MSVNUViBIRU5EUEFSCisJCTsKK0ZQUF9NQkVFX0xJU1RWICA6ICAgICAgIC8qRU1QVCovCisJCXwgICAgICAgRlBQX0xJU1RWCisJCTsKK0ZQUF9MSVNUViAgICAgICA6CUZQUF9DQVRFRyBIRE9URE9URE9UCisJCXwgICAgICAgRlBQX1NQRUMKKwkJfCAgICAgICBGUFBfU1BFQworCQkJSFBBUkVYUFNFUEFSQVRPUiBMSVNUVgorCQk7CitGUFBfU1BFQyAgICAgICAgOiAgICAgICBGUFBfQ0FURUcgU1BFQ0lGSUVSIEhJREVOVElGSUVSCisJCXwJRlBQX0NBVEVHIEZQUF9QUk9DX0RFQ0xfSU5fU1BFQworCQk7CitGUFBfQ0FURUcgICAgICAgOiAgICAgICBITkFNRSBITEFCRUxTRVBBUkFUT1IKKwkJfCAgICAgICBIVkFMVUUgSExBQkVMU0VQQVJBVE9SCisJCXwgICAgICAgSFZBUiBITEFCRUxTRVBBUkFUT1IKKwkJfCAgICAgICAvKkVNUFQqLworCQk7CitGUFBfUFJPQ19ERUNMX0lOX1NQRUM6CU1CRUVfVFlQRSBIUFJPQ0VEVVJFCisJCQlISURFTlRJRklFUgorCQkJCQl7fQorCQkJRlBQX0hFQURJTkcge30geyAvKiBZZXMsIHR3byAiZmluYWwiIGFjdGlvbnMuICovIH0KKwkJOworSURFTlRJRklFUl9MSVNUVjogICAgICAgSElERU5USUZJRVIKKwkJfAlIRE9URE9URE9UCisJCXwgICAgICAgSElERU5USUZJRVIgICAgIHt9CisJCQlIUEFSRVhQU0VQQVJBVE9SIElERU5USUZJRVJfTElTVFYKKwkJOworTUJFRV9NT0RFX1BBUlQgIDogICAgICAgLypFTVBUKi8KKwkJfCAgICAgICBNT0RFX1BBUlQKKwkJOworTU9ERV9QQVJUICAgICAgIDogICAgICAgTkFNRV9QQVJUCisJCXwgICAgICAgVkFMVUVfUEFSVAorCQl8ICAgICAgIFZBUl9QQVJUCisJCXwgICAgICAgTkFNRV9QQVJUIFZBTFVFX1BBUlQKKwkJfCAgICAgICBWQUxVRV9QQVJUIE5BTUVfUEFSVAorCQl8ICAgICAgIE5BTUVfUEFSVCBWQVJfUEFSVAorCQl8ICAgICAgIFZBUl9QQVJUIE5BTUVfUEFSVAorCQl8ICAgICAgIFZBTFVFX1BBUlQgVkFSX1BBUlQKKwkJfCAgICAgICBWQVJfUEFSVCBWQUxVRV9QQVJUCisJCXwgICAgICAgVkFSX1BBUlQgTkFNRV9QQVJUIFZBTFVFX1BBUlQKKwkJfCAgICAgICBOQU1FX1BBUlQgVkFSX1BBUlQgVkFMVUVfUEFSVAorCQl8ICAgICAgIE5BTUVfUEFSVCBWQUxVRV9QQVJUIFZBUl9QQVJUCisJCXwgICAgICAgVkFSX1BBUlQgVkFMVUVfUEFSVCBOQU1FX1BBUlQKKwkJfCAgICAgICBWQUxVRV9QQVJUIFZBUl9QQVJUIE5BTUVfUEFSVAorCQl8ICAgICAgIFZBTFVFX1BBUlQgTkFNRV9QQVJUIFZBUl9QQVJUCisJCTsKK05BTUVfUEFSVCAgICAgICA6ICAgICAgIEhOQU1FICAgICAgICAgICB7fQorCQkJSURFTlRJRklFUl9MSVNUVgorCQkJSFNUQVRFTUVOVFNFUEFSQVRPUgorCQk7CitWQVJfUEFSVCAgICAgICAgOiAgICAgICBIVkFSICAgICAgICAgICAge30KKwkJCUlERU5USUZJRVJfTElTVFYKKwkJCUhTVEFURU1FTlRTRVBBUkFUT1IKKwkJOworVkFMVUVfUEFSVCAgICAgIDogICAgICAgSFZBTFVFICAgICAgICAgIHt9CisJCQlJREVOVElGSUVSX0xJU1RWIEhTVEFURU1FTlRTRVBBUkFUT1IKKwkJOworTUJFRV9TUEVDX1BBUlQgIDogICAgICAgLypFTVBUKi8KKwkJfCAgICAgICBTUEVDX1BBUlQKKwkJOworU1BFQ19QQVJUICAgICAgIDogICAgICAgT05FX1NQRUMKKwkJfCAgICAgICBTUEVDX1BBUlQgT05FX1NQRUMKKwkJOworT05FX1NQRUMJOglTUEVDSUZJRVIgSURFTlRJRklFUl9MSVNUIEhTVEFURU1FTlRTRVBBUkFUT1IKKwkJfAlOT19UWVBFIEhQUk9DRURVUkUgSElERU5USUZJRVIgSE9CSlJFTE9QRVJBVE9SCisJCQkgIHt9CisJCQlQUk9DX0RFQ0xfSU5fU1BFQyBIU1RBVEVNRU5UU0VQQVJBVE9SCisJCXwgICAgICAgRlBQX1BST0NfREVDTF9JTl9TUEVDIEhTVEFURU1FTlRTRVBBUkFUT1IKKwkJfCAgICAgICBNQkVFX1RZUEUgSFBST0NFRFVSRSBISURFTlRJRklFUiBIU1RBVEVNRU5UU0VQQVJBVE9SCisJCXwgICAgICAgTUJFRV9UWVBFIEhQUk9DRURVUkUgSElERU5USUZJRVIgSFBBUkVYUFNFUEFSQVRPUgorCQkJSURFTlRJRklFUl9MSVNUIEhTVEFURU1FTlRTRVBBUkFUT1IKKwkJOworU1BFQ0lGSUVSICAgICAgIDogICAgICAgVFlQRQorCQl8ICAgICAgIE1CRUVfVFlQRQorCQkJSEFSUkFZCisJCXwgICAgICAgSExBQkVMCisJCXwgICAgICAgSFNXSVRDSAorCQk7CitQUk9DX0RFQ0xfSU5fU1BFQzoJTUJFRV9UWVBFIEhQUk9DRURVUkUKKwkJCUhJREVOVElGSUVSCisJCQkJCXt9CisJCQlIRUFESU5HCisJCQkJCXt9CisJCQlNQkVFX0JFR0lOX0VORAorCQk7CitNQkVFX0JFR0lOX0VORAk6CS8qIEVNUFRZICovCisJCXwJSEJFR0lOIEhFTkQKKwkJOworTUJFRV9QUk9UX1BBUlQgIDogICAgICAgLypFTVBUKi8KKwkJfCAgICAgICBQUk9URUNUSU9OX1BBUlQKKwkJOworUFJPVEVDVElPTl9QQVJUIDogICAgICAgUFJPVF9TUEVDSUZJRVIgSURFTlRJRklFUl9MSVNUCisJCQlIU1RBVEVNRU5UU0VQQVJBVE9SCisJCXwgICAgICAgUFJPVEVDVElPTl9QQVJUICBQUk9UX1NQRUNJRklFUgorCQkJSURFTlRJRklFUl9MSVNUIEhTVEFURU1FTlRTRVBBUkFUT1IKKwkJOworUFJPVF9TUEVDSUZJRVIgIDogICAgICAgSEhJRERFTgorCQl8ICAgICAgIEhQUk9URUNURUQKKwkJfCAgICAgICBISElEREVOCisJCQlIUFJPVEVDVEVECisJCXwgICAgICAgSFBST1RFQ1RFRAorCQkJSEhJRERFTgorCQk7CitNQkVFX1ZJUlRfUEFSVCAgOiAgICAgICAvKkVNUFQqLworCQl8ICAgICAgIFZJUlRVQUxfUEFSVAorCQk7CitWSVJUVUFMX1BBUlQgICAgOiAgICAgICBIVklSVFVBTAorCQkJSExBQkVMU0VQQVJBVE9SCisJCQlNQkVFX1NQRUNfUEFSVAorCQk7CitJREVOVElGSUVSX0xJU1QgOiAgICAgICBISURFTlRJRklFUgorCQl8ICAgICAgIElERU5USUZJRVJfTElTVCBIUEFSRVhQU0VQQVJBVE9SCisJCQlISURFTlRJRklFUgorCQk7CitJREVOVElGSUVSX0xJU1RDOiAgICAgICBISURFTlRJRklFUgorCQkJTUJFRV9DT05TVEFOVAorCQl8ICAgICAgIElERU5USUZJRVJfTElTVEMgSFBBUkVYUFNFUEFSQVRPUgorCQkJSElERU5USUZJRVIKKwkJCU1CRUVfQ09OU1RBTlQKKwkJOworTUJFRV9DT05TVEFOVAk6CS8qIEVNUFRZICovCisJCXwJSFZBTFJFTE9QRVJBVE9SCisJCQkJe30KKwkJCUVYUFJFU1NJT04KKwkJOworCisvKiBHUkFNQVRJS0sgRk9SIFVUVFJZS0sgKi8KK0VYUFJFU1NJT04gICAgICA6ICAgICAgIEVYUFJFU1NJT05fU0lNUAorCQl8ICAgICAgIEhJRgorCQkJRVhQUkVTU0lPTgorCQkJSFRIRU4KKwkJCUVYUFJFU1NJT04KKwkJCUhFTFNFCisJCQlFWFBSRVNTSU9OCisJCTsKK0VYUFJFU1NJT05fU0lNUCA6CUVYUFJFU1NJT05fU0lNUAorCQkJSEFTU0lHTgorCQkJRVhQUkVTU0lPTgorCQl8CisKKwkJCUVYUFJFU1NJT05fU0lNUAorCQkJSENPTkMKKwkJCUVYUFJFU1NJT05fU0lNUAorCQl8ICAgICAgIEVYUFJFU1NJT05fU0lNUCBIT1IKKwkJCUhFTFNFCisJCQlFWFBSRVNTSU9OX1NJTVAKKwkJCSVwcmVjIEhPUkVMU0UKKwkJfCAgICAgICBFWFBSRVNTSU9OX1NJTVAgSEFORAorCQkJSFRIRU4KKwkJCUVYUFJFU1NJT05fU0lNUAorCQkJJXByZWMgSEFORFRIRU4KKwkJfCAgICAgICBFWFBSRVNTSU9OX1NJTVAKKwkJCUhFUVYgRVhQUkVTU0lPTl9TSU1QCisJCXwgICAgICAgRVhQUkVTU0lPTl9TSU1QCisJCQlISU1QIEVYUFJFU1NJT05fU0lNUAorCQl8ICAgICAgIEVYUFJFU1NJT05fU0lNUAorCQkJSE9SIEVYUFJFU1NJT05fU0lNUAorCQl8ICAgICAgIEVYUFJFU1NJT05fU0lNUAorCQkJSEFORCBFWFBSRVNTSU9OX1NJTVAKKwkJfCAgICAgICBITk9UIEVYUFJFU1NJT05fU0lNUAorCQl8ICAgICAgIEVYUFJFU1NJT05fU0lNUAorCQkJSFZBTFJFTE9QRVJBVE9SCisJCQlFWFBSRVNTSU9OX1NJTVAKKwkJfCAgICAgICBFWFBSRVNTSU9OX1NJTVAKKwkJCUhSRUZSRUxPUEVSQVRPUgorCQkJRVhQUkVTU0lPTl9TSU1QCisJCXwgICAgICAgRVhQUkVTU0lPTl9TSU1QCisJCQlIT0JKUkVMT1BFUkFUT1IKKwkJCUVYUFJFU1NJT05fU0lNUAorCQl8ICAgICAgIEhURVJNT1BFUkFUT1IKKwkJCUVYUFJFU1NJT05fU0lNUCAlcHJlYyBVTkVBUgorCQl8ICAgICAgIEVYUFJFU1NJT05fU0lNUAorCQkJSFRFUk1PUEVSQVRPUgorCQkJRVhQUkVTU0lPTl9TSU1QCisJCXwgICAgICAgRVhQUkVTU0lPTl9TSU1QCisJCQlIRkFDVE9ST1BFUkFUT1IKKwkJCUVYUFJFU1NJT05fU0lNUAorCQl8ICAgICAgIEVYUFJFU1NJT05fU0lNUAorCQkJSFBSSU1BUllPUEVSQVRPUgorCQkJRVhQUkVTU0lPTl9TSU1QCisJCXwgICAgICAgSEJFR1BBUgorCQkJRVhQUkVTU0lPTiBIRU5EUEFSCisJCXwgICAgICAgSFRFWFRLT05TVAorCQl8ICAgICAgIEhDSEFSQUNURVJLT05TVAorCQl8ICAgICAgIEhSRUFMS09OU1QKKwkJfCAgICAgICBISU5URUdFUktPTlNUCisJCXwgICAgICAgSEJPT0xFQU5LT05TVAorCQl8ICAgICAgIEhOT05FCisJCXwgICAgICAgSElERU5USUZJRVIKKwkJCQl7fQorCQkJTUJFRV9BUkdfUl9QVAorCQl8ICAgICAgIEhUSElTIEhJREVOVElGSUVSCisJCXwgICAgICAgSE5FVworCQkJSElERU5USUZJRVIKKwkJCUFSR19SX1BUCisJCXwgICAgICAgRVhQUkVTU0lPTl9TSU1QCisJCQlIRE9UCisJCQlFWFBSRVNTSU9OX1NJTVAKKwkJfCAgICAgICBFWFBSRVNTSU9OX1NJTVAKKwkJCUhRVUEgSElERU5USUZJRVIKKwkJOworQVJHX1JfUFQgICAgICAgIDogICAgICAgLypFTVBUWSovCisJCXwgICAgICAgSEJFR1BBUgorCQkJQVJHVU1FTlRfTElTVCBIRU5EUEFSCisJCTsKK01CRUVfQVJHX1JfUFQgICA6ICAgICAgIC8qRU1QVFkqLworCQl8ICAgICAgIEhCRUdQQVIKKwkJCUFSR1VNRU5UX0xJU1QgSEVORFBBUgorCQk7CitBUkdVTUVOVF9MSVNUICAgOiAgICAgICBFWFBSRVNTSU9OCisJCXwgICAgICAgRVhQUkVTU0lPTgorCQkJSFBBUkVYUFNFUEFSQVRPUgorCQkJQVJHVU1FTlRfTElTVAorCQk7CisKKworJSUKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CitzdGF0aWMgaW50Cit5eWxleCAodm9pZCkKK3sKKyAgc3RhdGljIGludCBjb25zdCBpbnB1dFtdID0geworICAgIDAKKyAgfTsKKyAgc3RhdGljIGludCBjb25zdCAqaW5wdXRwID0gaW5wdXQ7CisgIHJldHVybiAqaW5wdXRwKys7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKKyMgSW4gc29tZSB2ZXJzaW9ucyBvZiBBdXRvY29uZiwgQVRfQ0hFQ0sgaW52b2tlcyBBU19FU0NBUEUgYmVmb3JlCisjIGV4cGFuZGluZyBtYWNyb3MsIHNvIGl0IGNvcnJ1cHRzIHNvbWUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZQorIyBtYWNyb3MuICBUbyBhdm9pZCB0aGlzLCBleHBhbmQgbm93IGFuZCBwYXNzIGl0IHRoZSByZXN1bHQgd2l0aCBwcm9wZXIKKyMgc3RyaW5nIHF1b3RhdGlvbi4gIEFzc3VtZSBhcmdzIDcgdGhyb3VnaCAxMiBleHBhbmQgdG8gcHJvcGVybHkgcXVvdGVkCisjIHN0cmluZ3MuCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODM6IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiZXhpc3RpbmcuYXQ6NzgzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueTogY29uZmxpY3RzOiAxODc2IHNoaWZ0L3JlZHVjZSwgMTQ0IHJlZHVjZS9yZWR1Y2UKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzgzOiBzZWQgLW4gJ3MvXlN0YXRlIC8vcCcgaW5wdXQub3V0cHV0IHwgdGFpbCAtMSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBzaGVsbCBwaXBlbGluZScgImV4aXN0aW5nLmF0Ojc4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgLW4gJ3MvXlN0YXRlIC8vcCcgaW5wdXQub3V0cHV0IHwgdGFpbCAtMQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEwNDI1CisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDo3ODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisjIENhbm9uaWNhbCBMUiBnZW5lcmF0ZXMgdmVyeSBsYXJnZSB0YWJsZXMsIHJlc3VsdGluZyBpbiB2ZXJ5IGxvbmcKKyMgZmlsZXMgd2l0aCAjbGluZSBkaXJlY3RpdmVzIHRoYXQgbWF5IG92ZXJmbG93IHdoYXQgdGhlIHN0YW5kYXJkcworIyAoQzkwIGFuZCBDKys5OCkgZ3VhcmFudGVlOiAzMjc2Ny4gIEluIHRoYXQgY2FzZSwgR0NDJ3MgLXBlZGFudGljCisjIHdpbGwgaXNzdWUgYW4gZXJyb3IuCisjCisjIFRoZXJlIGlzIG5vICIiIGFyb3VuZCBgd2NgIHNpbmNlIHNvbWUgaW5kZW50IHRoZSByZXN1bHQuCitpZiB0ZXN0IDMyNzY3IC1sdCBgd2MgLWwgPCBpbnB1dC5jYDsgdGhlbgorICBDRkxBR1M9YGVjaG8gIiAkQ0ZMQUdTICIgfCBzZWQgLWUgJ3MvIC1wZWRhbnRpYyAvLydgCisgIENYWEZMQUdTPWBlY2hvICIgJENYWEZMQUdTICIgfCBzZWQgLWUgJ3MvIC1wZWRhbnRpYyAvLydgCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MzogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImV4aXN0aW5nLmF0Ojc4MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MzogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJleGlzdGluZy5hdDo3ODMiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4MzogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJleGlzdGluZy5hdDo3ODMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0Ojc4Mzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJleGlzdGluZy5hdDo3ODMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6NzgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yNjQKKyNBVF9TVEFSVF8yNjUKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyNjUgJ2V4aXN0aW5nLmF0OjE0MDMnIFwKKyAgIkdOVSBwaWMgKEdyb2ZmIDEuMTguMSkgR3JhbW1hcjogTEFMUigxKSIgIiAgICAgICAgIiAxNgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI2NS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislY29kZSB7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgc3RhdGljIGludCB5eWxleCAodm9pZCk7Cit9CisKKyVkZWZpbmUgbHIudHlwZSBsYWxyCislZXJyb3ItdmVyYm9zZQogCiAldG9rZW4gTEFCRUwKICV0b2tlbiBWQVJJQUJMRQpAQCAtNTYwNDYsNyArMTM1ODU4LDcgQEAKICV0b2tlbiBSQU5ECiAldG9rZW4gU1JBTkQKICV0b2tlbiBDT1BZCi0ldG9rZW4gVEhSVQorJXRva2VuIFRIUk9VR0gKICV0b2tlbiBUT1AKICV0b2tlbiBCT1RUT00KICV0b2tlbiBVUFBFUgpAQCAtNTYxMzMsOCArMTM1OTQ1LDEwIEBACiAlcmlnaHQgJyEnCiAlcmlnaHQgJ14nCiAKKwogJSUKIAorCiB0b3A6CiAJb3B0aW9uYWxfc2VwYXJhdG9yCiAJfCBlbGVtZW50X2xpc3QKQEAgLTU2MTczLDEyICsxMzU5ODcsMTIgQEAKIAkJe30KIAkgIERFTElNSVRFRAogCXwgQ09QWSBURVhUCi0JfCBDT1BZIFRFWFQgVEhSVQorCXwgQ09QWSBURVhUIFRIUk9VR0gKIAkJe30KIAkgIERFTElNSVRFRAogCQl7fQogCSAgdW50aWwKLQl8IENPUFkgVEhSVQorCXwgQ09QWSBUSFJPVUdICiAJCXt9CiAJICBERUxJTUlURUQKIAkJe30KQEAgLTU2MjUwLDcgKzEzNjA2NCw3IEBACiAJfCBMQUJFTCAnOicgb3B0aW9uYWxfc2VwYXJhdG9yIGVsZW1lbnQKIAl8IExBQkVMICc6JyBvcHRpb25hbF9zZXBhcmF0b3IgcG9zaXRpb25fbm90X3BsYWNlCiAJfCBMQUJFTCAnOicgb3B0aW9uYWxfc2VwYXJhdG9yIHBsYWNlCi0JfCAne30nCisJfCAneycge30gZWxlbWVudF9saXN0ICd9JwogCQl7fQogCSAgb3B0aW9uYWxfZWxlbWVudAogCXwgcGxhY2VsZXNzX2VsZW1lbnQKQEAgLTU2NDk3LDc2ICsxMzYzMTEsMzQ1MiBAQAogCXwgZXhwciBPUk9SIGV4cHIKIAl8ICchJyBleHByCiAJOworCisKKyUlCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorc3RhdGljIGludAoreXlsZXggKHZvaWQpCit7CisgIHN0YXRpYyBpbnQgY29uc3QgaW5wdXRbXSA9IHsKKyAgICBWQVJJQUJMRSwgJz0nLCBMQUJFTCwgTEVGVCwgRE9UX1gsIDAKKyAgfTsKKyAgc3RhdGljIGludCBjb25zdCAqaW5wdXRwID0gaW5wdXQ7CisgIHJldHVybiAqaW5wdXRwKys7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CiBfQVRFT0YKIAogCi0jIFBhc3MgcGxlbnR5IG9mIG9wdGlvbnMsIHRvIGV4ZXJjaXNlIHBsZW50eSBvZiBjb2RlLCBldmVuIGlmIHdlCi0jIGRvbid0IGFjdHVhbGx5IGNoZWNrIHRoZSBvdXRwdXQuICBCdXQgU0VHViBpcyB3YXRjaGluZyB1cywgYW5kCi0jIHNvIG1pZ2h0IGRvIGRtYWxsb2MuCi0kYXRfdHJhY2VvZmYKLWVjaG8gImV4aXN0aW5nLmF0OjE1MjM6IGJpc29uIC0tdmVyYm9zZSAtLWRlZmluZXMgaW5wdXQueSIKLWVjaG8gZXhpc3RpbmcuYXQ6MTUyMyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLS12ZXJib3NlIC0tZGVmaW5lcyBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImV4aXN0aW5nLmF0OjE1MjM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisjIEluIHNvbWUgdmVyc2lvbnMgb2YgQXV0b2NvbmYsIEFUX0NIRUNLIGludm9rZXMgQVNfRVNDQVBFIGJlZm9yZQorIyBleHBhbmRpbmcgbWFjcm9zLCBzbyBpdCBjb3JydXB0cyBzb21lIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUKKyMgbWFjcm9zLiAgVG8gYXZvaWQgdGhpcywgZXhwYW5kIG5vdyBhbmQgcGFzcyBpdCB0aGUgcmVzdWx0IHdpdGggcHJvcGVyCisjIHN0cmluZyBxdW90YXRpb24uICBBc3N1bWUgYXJncyA3IHRocm91Z2ggMTIgZXhwYW5kIHRvIHByb3Blcmx5IHF1b3RlZAorIyBzdHJpbmdzLgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImV4aXN0aW5nLmF0OjE0MDMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIgImV4aXN0aW5nLmF0OjE0MDMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImV4aXN0aW5nLmF0OjE0MDMiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJleGlzdGluZy5hdDoxNDAzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzOiBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImV4aXN0aW5nLmF0OjE0MDMiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OjQ3MC4xMS00ODogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzOiBwYXRoOiBPUkRJTkFMIExBU1Qgb2JqZWN0X3R5cGUgcmVsYXRpdmVfcGF0aAorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyMgRGVmaW5pbmcgUE9TSVhMWV9DT1JSRUNUIGNhdXNlcyBiaXNvbiB0byBjb21wbGFpbiBpZiBvcHRpb25zIGFyZQorIyBhZGRlZCBhZnRlciB0aGUgZ3JhbW1hciBmaWxlIG5hbWUsIHNvIHNraXAgdGhlc2UgY2hlY2tzIGluIHRoYXQKKyMgY2FzZS4KK2lmIHRlc3QgIiRQT1NJWExZX0NPUlJFQ1RfSVNfRVhQT1JURUQiID0gZmFsc2U7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisKKyAgIyBUbyBhdm9pZCBleHBhbmRpbmcgaXQgcmVwZWF0ZWRseSwgc3RvcmUgc3BlY2lmaWVkIHN0ZG91dC4KKyAgOiA+ZXhwb3V0CisKKyAgIyBSdW4gd2l0aCAtV2Vycm9yLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkgLVdlcnJvciIgImV4aXN0aW5nLmF0OjE0MDMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgQnVpbGQgZXhwZWN0ZWQgc3RkZXJyIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlICJ3YXJuaW5ncyBiZWluZworICAjIHRyZWF0ZWQgYXMgZXJyb3JzIiBtZXNzYWdlLgorICBjYXQgPmF0LWJpc29uLWNoZWNrLXdhcm5pbmdzIDw8J19BVEVPRicKK2lucHV0Lnk6NDcwLjExLTQ4OiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHM6IHBhdGg6IE9SRElOQUwgTEFTVCBvYmplY3RfdHlwZSByZWxhdGl2ZV9wYXRoCitfQVRFT0YKKworICBhdF9iaXNvbl9jaGVja19maXJzdD1gc2VkIC1uIFwKKyAgICAnLzogd2FybmluZzogL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wPWBzZWQgLW4gXAorICAgICcvY29uZmxpY3RzOiBbMC05XS4qcmVkdWNlJC97PTtxO30nIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzYAorICA6ICR7YXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wOj0xfQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdF90bXAgLWx0ICRhdF9iaXNvbl9jaGVja19maXJzdDsgdGhlbgorICAgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PSRhdF9iaXNvbl9jaGVja19maXJzdF90bXAKKyAgZmkKKyAgaWYgdGVzdCAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLWd0IDE7IHRoZW4KKyAgICBzZWQgLW4gIjEsYGV4cHIgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0IC0gMWAicCBcCisgICAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+IGV4cGVycgorICBmaQorICBlY2hvICdiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMnID4+IGV4cGVycgorCisgICMgRmluaXNoIGJ1aWxkaW5nIGV4cGVjdGVkIHN0ZGVyciBhbmQgY2hlY2suICBVbmxpa2Ugd2FybmluZ3MsCisgICMgY29tcGxhaW50cyBjYXVzZSBiaXNvbiB0byBleGl0IGVhcmx5LiAgVGh1cywgd2l0aCAtV2Vycm9yLCBiaXNvbgorICAjIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHJlcG9ydCBhbGwgd2FybmluZ3MgdGhhdCBpdCBkb2VzIHdpdGhvdXQKKyAgIyAtV2Vycm9yLCBidXQgaXQgYXQgbGVhc3QgcmVwb3J0cyBvbmUuCisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YHNlZCAtbiAnJD0nIHN0ZGVycmAKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2xhc3Q6PTF9CisgIGF0X2Jpc29uX2NoZWNrX2xhc3Q9YGV4cHIgJGF0X2Jpc29uX2NoZWNrX2xhc3QgLSAxYAorICBzZWQgLW4gIiRhdF9iaXNvbl9jaGVja19maXJzdCwkYXRfYmlzb25fY2hlY2tfbGFzdCJwIFwKKyAgICBhdC1iaXNvbi1jaGVjay13YXJuaW5ncyA+PiBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDM6IHNlZCAncywuKi9cXChiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnNcXClcJCxcXDEsJyBcXAorICAgICAgICAgICAgICBzdGRlcnIgMT4mMiIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImV4aXN0aW5nLmF0OjE0MDMiCisoICRhdF9jaGVja190cmFjZTsgc2VkICdzLC4qL1woYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzXCkkLFwxLCcgXAorICAgICAgICAgICAgICBzdGRlcnIgMT4mMgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorJGF0X2RpZmYgZXhwZXJyICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC0td2FybmluZ3M9ZXJyb3IuCisgIGNwIHN0ZGVyciBleHBlcnIKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1lcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IiICJleGlzdGluZy5hdDoxNDAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1lcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorJGF0X2RpZmYgZXhwZXJyICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgTm93IGNoZWNrIC1Xbm9uZSBhbmQgLS13YXJuaW5ncz1ub25lIGJ5IG1ha2luZyBzdXJlIHRoYXQKKyAgIyAtV2Vycm9yIGRvZXNuJ3QgY2hhbmdlIHRoZSBleGl0IHN0YXR1cyB3aGVuIC1Xbm9uZSBvcgorICAjIC0td2FybmluZ3M9bm9uZSBpcyBzcGVjaWZpZWQuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkgLVdub25lIC1XZXJyb3IiICJleGlzdGluZy5hdDoxNDAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkgLVdub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvciIgImV4aXN0aW5nLmF0OjE0MDMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKIAotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzOiBzZWQgLW4gJ3MvXlN0YXRlIC8vcCcgaW5wdXQub3V0cHV0IHwgdGFpbCAtMSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBzaGVsbCBwaXBlbGluZScgImV4aXN0aW5nLmF0OjE0MDMiCisoICRhdF9jaGVja190cmFjZTsgc2VkIC1uICdzL15TdGF0ZSAvL3AnIGlucHV0Lm91dHB1dCB8IHRhaWwgLTEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICI0MjIKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDM6IGRpZmYgLXUgL2Rldi9udWxsIC9kZXYvbnVsbCB8fCBleGl0IDc3IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiZXhpc3RpbmcuYXQ6MTQwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBkaWZmIC11IC9kZXYvbnVsbCAvZGV2L251bGwgfHwgZXhpdCA3NworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgYmFubmVyLTE1ICkgIyBCYW5uZXIgMTUuIHJlZ3Jlc3Npb24uYXQ6MjEKLSAgICBjYXQgPDxcX0FURU9GCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMzogc2VkICdzL14lZGVmaW5lIGxyLnR5cGUgLipcJC8vJyBpbnB1dC55ID4gaW5wdXQtbGFsci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJzZWQgJ3MvXiVkZWZpbmUgbHIudHlwZSAuKiQvLycgaW5wdXQueSA+IGlucHV0LWxhbHIueSIgImV4aXN0aW5nLmF0OjE0MDMiCisoICRhdF9jaGVja190cmFjZTsgc2VkICdzL14lZGVmaW5lIGxyLnR5cGUgLiokLy8nIGlucHV0LnkgPiBpbnB1dC1sYWxyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLVJlZ3Jlc3Npb24gdGVzdHMuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgaW5wdXQtbGFsci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiZXhpc3RpbmcuYXQ6MTQwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgaW5wdXQtbGFsci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotX0FURU9GCi0gICAgOzsKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tcmVwb3J0PWFsbCBpbnB1dC1sYWxyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIGlucHV0LWxhbHIueSIgImV4aXN0aW5nLmF0OjE0MDMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIGlucHV0LWxhbHIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgMTEzICkgIyAxMTMuIHJlZ3Jlc3Npb24uYXQ6Mjg6IFRyaXZpYWwgZ3JhbW1hcnMKLSAgICBhdF9zZXR1cF9saW5lPSdyZWdyZXNzaW9uLmF0OjI4JwotICAgIGF0X2Rlc2M9J1RyaXZpYWwgZ3JhbW1hcnMnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjExMzogVHJpdmlhbCBncmFtbWFycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjExMy4gcmVncmVzc2lvbi5hdDoyODogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgorICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJleGlzdGluZy5hdDoxNDAzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiZXhpc3RpbmcuYXQ6MTQwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMzogYmlzb24gLS1yZXBvcnQ9YWxsIGlucHV0LWxhbHIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImV4aXN0aW5nLmF0OjE0MDMiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLS1yZXBvcnQ9YWxsIGlucHV0LWxhbHIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDM6IGRpZmYgLXUgaW5wdXQtbGFsci5vdXRwdXQgaW5wdXQub3V0cHV0IFxcCisgICAgICAgICAgIHwgc2VkIC1uICcvXkBALyxcJHAnIHwgc2VkICdzL14gXCQvLyciCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJleGlzdGluZy5hdDoxNDAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGRpZmYgLXUgaW5wdXQtbGFsci5vdXRwdXQgaW5wdXQub3V0cHV0IFwKKyAgICAgICAgICAgfCBzZWQgLW4gJy9eQEAvLCRwJyB8IHNlZCAncy9eICQvLycKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBDYW5vbmljYWwgTFIgZ2VuZXJhdGVzIHZlcnkgbGFyZ2UgdGFibGVzLCByZXN1bHRpbmcgaW4gdmVyeSBsb25nCisjIGZpbGVzIHdpdGggI2xpbmUgZGlyZWN0aXZlcyB0aGF0IG1heSBvdmVyZmxvdyB3aGF0IHRoZSBzdGFuZGFyZHMKKyMgKEM5MCBhbmQgQysrOTgpIGd1YXJhbnRlZTogMzI3NjcuICBJbiB0aGF0IGNhc2UsIEdDQydzIC1wZWRhbnRpYworIyB3aWxsIGlzc3VlIGFuIGVycm9yLgorIworIyBUaGVyZSBpcyBubyAiIiBhcm91bmQgYHdjYCBzaW5jZSBzb21lIGluZGVudCB0aGUgcmVzdWx0LgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMzogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImV4aXN0aW5nLmF0OjE0MDMiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMzogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJleGlzdGluZy5hdDoxNDAzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMzogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJleGlzdGluZy5hdDoxNDAzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJleGlzdGluZy5hdDoxNDAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIExFRlQKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzI2NQorI0FUX1NUQVJUXzI2NgorYXRfZm5fZ3JvdXBfYmFubmVyIDI2NiAnZXhpc3RpbmcuYXQ6MTQwMycgXAorICAiR05VIHBpYyAoR3JvZmYgMS4xOC4xKSBHcmFtbWFyOiBJRUxSKDEpIiAiICAgICAgICAiIDE2CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjY2LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogY2F0ID5pbnB1dC55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWNvZGUgeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CisgIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOworfQorCislZGVmaW5lIGxyLnR5cGUgaWVscgorJWVycm9yLXZlcmJvc2UKKworJXRva2VuIExBQkVMCisldG9rZW4gVkFSSUFCTEUKKyV0b2tlbiBOVU1CRVIKKyV0b2tlbiBURVhUCisldG9rZW4gQ09NTUFORF9MSU5FCisldG9rZW4gREVMSU1JVEVECisldG9rZW4gT1JESU5BTAorJXRva2VuIFRICisldG9rZW4gTEVGVF9BUlJPV19IRUFECisldG9rZW4gUklHSFRfQVJST1dfSEVBRAorJXRva2VuIERPVUJMRV9BUlJPV19IRUFECisldG9rZW4gTEFTVAorJXRva2VuIFVQCisldG9rZW4gRE9XTgorJXRva2VuIExFRlQKKyV0b2tlbiBSSUdIVAorJXRva2VuIEJPWAorJXRva2VuIENJUkNMRQorJXRva2VuIEVMTElQU0UKKyV0b2tlbiBBUkMKKyV0b2tlbiBMSU5FCisldG9rZW4gQVJST1cKKyV0b2tlbiBNT1ZFCisldG9rZW4gU1BMSU5FCisldG9rZW4gSEVJR0hUCisldG9rZW4gUkFESVVTCisldG9rZW4gV0lEVEgKKyV0b2tlbiBESUFNRVRFUgorJXRva2VuIEZST00KKyV0b2tlbiBUTworJXRva2VuIEFUCisldG9rZW4gV0lUSAorJXRva2VuIEJZCisldG9rZW4gVEhFTgorJXRva2VuIFNPTElECisldG9rZW4gRE9UVEVECisldG9rZW4gREFTSEVECisldG9rZW4gQ0hPUAorJXRva2VuIFNBTUUKKyV0b2tlbiBJTlZJU0lCTEUKKyV0b2tlbiBMSlVTVAorJXRva2VuIFJKVVNUCisldG9rZW4gQUJPVkUKKyV0b2tlbiBCRUxPVworJXRva2VuIE9GCisldG9rZW4gVEhFCisldG9rZW4gV0FZCisldG9rZW4gQkVUV0VFTgorJXRva2VuIEFORAorJXRva2VuIEhFUkUKKyV0b2tlbiBET1RfTgorJXRva2VuIERPVF9FCisldG9rZW4gRE9UX1cKKyV0b2tlbiBET1RfUworJXRva2VuIERPVF9ORQorJXRva2VuIERPVF9TRQorJXRva2VuIERPVF9OVworJXRva2VuIERPVF9TVworJXRva2VuIERPVF9DCisldG9rZW4gRE9UX1NUQVJUCisldG9rZW4gRE9UX0VORAorJXRva2VuIERPVF9YCisldG9rZW4gRE9UX1kKKyV0b2tlbiBET1RfSFQKKyV0b2tlbiBET1RfV0lECisldG9rZW4gRE9UX1JBRAorJXRva2VuIFNJTgorJXRva2VuIENPUworJXRva2VuIEFUQU4yCisldG9rZW4gTE9HCisldG9rZW4gRVhQCisldG9rZW4gU1FSVAorJXRva2VuIEtfTUFYCisldG9rZW4gS19NSU4KKyV0b2tlbiBJTlQKKyV0b2tlbiBSQU5ECisldG9rZW4gU1JBTkQKKyV0b2tlbiBDT1BZCisldG9rZW4gVEhST1VHSAorJXRva2VuIFRPUAorJXRva2VuIEJPVFRPTQorJXRva2VuIFVQUEVSCisldG9rZW4gTE9XRVIKKyV0b2tlbiBTSAorJXRva2VuIFBSSU5UCisldG9rZW4gQ1cKKyV0b2tlbiBDQ1cKKyV0b2tlbiBGT1IKKyV0b2tlbiBETworJXRva2VuIElGCisldG9rZW4gRUxTRQorJXRva2VuIEFOREFORAorJXRva2VuIE9ST1IKKyV0b2tlbiBOT1RFUVVBTAorJXRva2VuIEVRVUFMRVFVQUwKKyV0b2tlbiBMRVNTRVFVQUwKKyV0b2tlbiBHUkVBVEVSRVFVQUwKKyV0b2tlbiBMRUZUX0NPUk5FUgorJXRva2VuIFJJR0hUX0NPUk5FUgorJXRva2VuIE5PUlRICisldG9rZW4gU09VVEgKKyV0b2tlbiBFQVNUCisldG9rZW4gV0VTVAorJXRva2VuIENFTlRFUgorJXRva2VuIEVORAorJXRva2VuIFNUQVJUCisldG9rZW4gUkVTRVQKKyV0b2tlbiBVTlRJTAorJXRva2VuIFBMT1QKKyV0b2tlbiBUSElDS05FU1MKKyV0b2tlbiBGSUxMCisldG9rZW4gQ09MT1JFRAorJXRva2VuIE9VVExJTkVECisldG9rZW4gU0hBREVECisldG9rZW4gQUxJR05FRAorJXRva2VuIFNQUklOVEYKKyV0b2tlbiBDT01NQU5ECisKKyVsZWZ0ICcuJworCisvKiB0aGlzIGVuc3VyZXMgdGhhdCBwbG90IDE3ICIlZyIgcGFyc2VzIGFzIChwbG90IDE3ICIlZyIpICovCislbGVmdCBQTE9UCislbGVmdCBURVhUIFNQUklOVEYKKworLyogZ2l2ZSB0ZXh0IGFkanVzdG1lbnRzIGhpZ2hlciBwcmVjZWRlbmNlIHRoYW4gVEVYVCwgc28gdGhhdAorYm94ICJmb28iIGFib3ZlIGxqdXN0ID09IGJveCAoImZvbyIgYWJvdmUgbGp1c3QpCisqLworCislbGVmdCBMSlVTVCBSSlVTVCBBQk9WRSBCRUxPVworCislbGVmdCBMRUZUIFJJR0hUCisvKiBHaXZlIGF0dHJpYnV0ZXMgdGhhdCB0YWtlIGFuIG9wdGlvbmFsIGV4cHJlc3Npb24gYSBoaWdoZXIKK3ByZWNlZGVuY2UgdGhhbiBsZWZ0IGFuZCByaWdodCwgc28gdGhhdCBlZyBgbGluZSBjaG9wIGxlZnQnCitwYXJzZXMgcHJvcGVybHkuICovCislbGVmdCBDSE9QIFNPTElEIERBU0hFRCBET1RURUQgVVAgRE9XTiBGSUxMIENPTE9SRUQgT1VUTElORUQKKyVsZWZ0IExBQkVMCisKKyVsZWZ0IFZBUklBQkxFIE5VTUJFUiAnKCcgU0lOIENPUyBBVEFOMiBMT0cgRVhQIFNRUlQgS19NQVggS19NSU4gSU5UIFJBTkQgU1JBTkQgTEFTVAorJWxlZnQgT1JESU5BTCBIRVJFICdgJworCislbGVmdCBCT1ggQ0lSQ0xFIEVMTElQU0UgQVJDIExJTkUgQVJST1cgU1BMSU5FICdbJyAvKiBdICovCisKKy8qIHRoZXNlIG5lZWQgdG8gYmUgbG93ZXIgdGhhbiAnLScgKi8KKyVsZWZ0IEhFSUdIVCBSQURJVVMgV0lEVEggRElBTUVURVIgRlJPTSBUTyBBVCBUSElDS05FU1MKKworLyogdGhlc2UgbXVzdCBoYXZlIGhpZ2hlciBwcmVjZWRlbmNlIHRoYW4gQ0hPUCBzbyB0aGF0IGBsYWJlbCAlcHJlYyBDSE9QJword29ya3MgKi8KKyVsZWZ0IERPVF9OIERPVF9FIERPVF9XIERPVF9TIERPVF9ORSBET1RfU0UgRE9UX05XIERPVF9TVyBET1RfQworJWxlZnQgRE9UX1NUQVJUIERPVF9FTkQgVE9QIEJPVFRPTSBMRUZUX0NPUk5FUiBSSUdIVF9DT1JORVIKKyVsZWZ0IFVQUEVSIExPV0VSIE5PUlRIIFNPVVRIIEVBU1QgV0VTVCBDRU5URVIgU1RBUlQgRU5ECisKKyVsZWZ0ICcsJworJWxlZnQgT1JPUgorJWxlZnQgQU5EQU5ECislbGVmdCBFUVVBTEVRVUFMIE5PVEVRVUFMCislbGVmdCAnPCcgJz4nIExFU1NFUVVBTCBHUkVBVEVSRVFVQUwKKworJWxlZnQgQkVUV0VFTiBPRgorJWxlZnQgQU5ECisKKyVsZWZ0ICcrJyAnLScKKyVsZWZ0ICcqJyAnLycgJyUnCislcmlnaHQgJyEnCislcmlnaHQgJ14nCisKKworJSUKKworCit0b3A6CisJb3B0aW9uYWxfc2VwYXJhdG9yCisJfCBlbGVtZW50X2xpc3QKKwk7CisKK2VsZW1lbnRfbGlzdDoKKwlvcHRpb25hbF9zZXBhcmF0b3IgbWlkZGxlX2VsZW1lbnRfbGlzdCBvcHRpb25hbF9zZXBhcmF0b3IKKwk7CisKK21pZGRsZV9lbGVtZW50X2xpc3Q6CisJZWxlbWVudAorCXwgbWlkZGxlX2VsZW1lbnRfbGlzdCBzZXBhcmF0b3IgZWxlbWVudAorCTsKKworb3B0aW9uYWxfc2VwYXJhdG9yOgorCS8qIGVtcHR5ICovCisJfCBzZXBhcmF0b3IKKwk7CisKK3NlcGFyYXRvcjoKKwknOycKKwl8IHNlcGFyYXRvciAnOycKKwk7CisKK3BsYWNlbGVzc19lbGVtZW50OgorCVZBUklBQkxFICc9JyBhbnlfZXhwcgorCXwgVkFSSUFCTEUgJzonICc9JyBhbnlfZXhwcgorCXwgVVAKKwl8IERPV04KKwl8IExFRlQKKwl8IFJJR0hUCisJfCBDT01NQU5EX0xJTkUKKwl8IENPTU1BTkQgcHJpbnRfYXJncworCXwgUFJJTlQgcHJpbnRfYXJncworCXwgU0gKKwkJe30KKwkgIERFTElNSVRFRAorCXwgQ09QWSBURVhUCisJfCBDT1BZIFRFWFQgVEhST1VHSAorCQl7fQorCSAgREVMSU1JVEVECisJCXt9CisJICB1bnRpbAorCXwgQ09QWSBUSFJPVUdICisJCXt9CisJICBERUxJTUlURUQKKwkJe30KKwkgIHVudGlsCisJfCBGT1IgVkFSSUFCTEUgJz0nIGV4cHIgVE8gZXhwciBvcHRpb25hbF9ieSBETworCQl7fQorCSAgREVMSU1JVEVECisJfCBzaW1wbGVfaWYKKwl8IHNpbXBsZV9pZiBFTFNFCisJCXt9CisJICBERUxJTUlURUQKKwl8IHJlc2V0X3ZhcmlhYmxlcworCXwgUkVTRVQKKwk7CisKK3Jlc2V0X3ZhcmlhYmxlczoKKwlSRVNFVCBWQVJJQUJMRQorCXwgcmVzZXRfdmFyaWFibGVzIFZBUklBQkxFCisJfCByZXNldF92YXJpYWJsZXMgJywnIFZBUklBQkxFCisJOworCitwcmludF9hcmdzOgorCXByaW50X2FyZworCXwgcHJpbnRfYXJncyBwcmludF9hcmcKKwk7CisKK3ByaW50X2FyZzoKKwlleHByCQkJCQkJCSVwcmVjICcsJworCXwgdGV4dAorCXwgcG9zaXRpb24JCQkJCQklcHJlYyAnLCcKKwk7CisKK3NpbXBsZV9pZjoKKwlJRiBhbnlfZXhwciBUSEVOCisJCXt9CisJREVMSU1JVEVECisJOworCit1bnRpbDoKKwkvKiBlbXB0eSAqLworCXwgVU5USUwgVEVYVAorCTsKKworYW55X2V4cHI6CisJZXhwcgorCXwgdGV4dF9leHByCisJOworCit0ZXh0X2V4cHI6CisJdGV4dCBFUVVBTEVRVUFMIHRleHQKKwl8IHRleHQgTk9URVFVQUwgdGV4dAorCXwgdGV4dF9leHByIEFOREFORCB0ZXh0X2V4cHIKKwl8IHRleHRfZXhwciBBTkRBTkQgZXhwcgorCXwgZXhwciBBTkRBTkQgdGV4dF9leHByCisJfCB0ZXh0X2V4cHIgT1JPUiB0ZXh0X2V4cHIKKwl8IHRleHRfZXhwciBPUk9SIGV4cHIKKwl8IGV4cHIgT1JPUiB0ZXh0X2V4cHIKKwl8ICchJyB0ZXh0X2V4cHIKKwk7CisKK29wdGlvbmFsX2J5OgorCS8qIGVtcHR5ICovCisJfCBCWSBleHByCisJfCBCWSAnKicgZXhwcgorCTsKKworZWxlbWVudDoKKwlvYmplY3Rfc3BlYworCXwgTEFCRUwgJzonIG9wdGlvbmFsX3NlcGFyYXRvciBlbGVtZW50CisJfCBMQUJFTCAnOicgb3B0aW9uYWxfc2VwYXJhdG9yIHBvc2l0aW9uX25vdF9wbGFjZQorCXwgTEFCRUwgJzonIG9wdGlvbmFsX3NlcGFyYXRvciBwbGFjZQorCXwgJ3snIHt9IGVsZW1lbnRfbGlzdCAnfScKKwkJe30KKwkgIG9wdGlvbmFsX2VsZW1lbnQKKwl8IHBsYWNlbGVzc19lbGVtZW50CisJOworCitvcHRpb25hbF9lbGVtZW50OgorCS8qIGVtcHR5ICovCisJfCBlbGVtZW50CisJOworCitvYmplY3Rfc3BlYzoKKwlCT1gKKwl8IENJUkNMRQorCXwgRUxMSVBTRQorCXwgQVJDCisJfCBMSU5FCisJfCBBUlJPVworCXwgTU9WRQorCXwgU1BMSU5FCisJfCB0ZXh0CQkJCQkJCSVwcmVjIFRFWFQKKwl8IFBMT1QgZXhwcgorCXwgUExPVCBleHByIHRleHQKKwl8ICdbJworCQl7fQorCSAgZWxlbWVudF9saXN0ICddJworCXwgb2JqZWN0X3NwZWMgSEVJR0hUIGV4cHIKKwl8IG9iamVjdF9zcGVjIFJBRElVUyBleHByCisJfCBvYmplY3Rfc3BlYyBXSURUSCBleHByCisJfCBvYmplY3Rfc3BlYyBESUFNRVRFUiBleHByCisJfCBvYmplY3Rfc3BlYyBleHByCQkJCQklcHJlYyBIRUlHSFQKKwl8IG9iamVjdF9zcGVjIFVQCisJfCBvYmplY3Rfc3BlYyBVUCBleHByCisJfCBvYmplY3Rfc3BlYyBET1dOCisJfCBvYmplY3Rfc3BlYyBET1dOIGV4cHIKKwl8IG9iamVjdF9zcGVjIFJJR0hUCisJfCBvYmplY3Rfc3BlYyBSSUdIVCBleHByCisJfCBvYmplY3Rfc3BlYyBMRUZUCisJfCBvYmplY3Rfc3BlYyBMRUZUIGV4cHIKKwl8IG9iamVjdF9zcGVjIEZST00gcG9zaXRpb24KKwl8IG9iamVjdF9zcGVjIFRPIHBvc2l0aW9uCisJfCBvYmplY3Rfc3BlYyBBVCBwb3NpdGlvbgorCXwgb2JqZWN0X3NwZWMgV0lUSCBwYXRoCisJfCBvYmplY3Rfc3BlYyBXSVRIIHBvc2l0aW9uCQkJCSVwcmVjICcsJworCXwgb2JqZWN0X3NwZWMgQlkgZXhwcl9wYWlyCisJfCBvYmplY3Rfc3BlYyBUSEVOCisJfCBvYmplY3Rfc3BlYyBTT0xJRAorCXwgb2JqZWN0X3NwZWMgRE9UVEVECisJfCBvYmplY3Rfc3BlYyBET1RURUQgZXhwcgorCXwgb2JqZWN0X3NwZWMgREFTSEVECisJfCBvYmplY3Rfc3BlYyBEQVNIRUQgZXhwcgorCXwgb2JqZWN0X3NwZWMgRklMTAorCXwgb2JqZWN0X3NwZWMgRklMTCBleHByCisJfCBvYmplY3Rfc3BlYyBTSEFERUQgdGV4dAorCXwgb2JqZWN0X3NwZWMgQ09MT1JFRCB0ZXh0CisJfCBvYmplY3Rfc3BlYyBPVVRMSU5FRCB0ZXh0CisJfCBvYmplY3Rfc3BlYyBDSE9QCisJfCBvYmplY3Rfc3BlYyBDSE9QIGV4cHIKKwl8IG9iamVjdF9zcGVjIFNBTUUKKwl8IG9iamVjdF9zcGVjIElOVklTSUJMRQorCXwgb2JqZWN0X3NwZWMgTEVGVF9BUlJPV19IRUFECisJfCBvYmplY3Rfc3BlYyBSSUdIVF9BUlJPV19IRUFECisJfCBvYmplY3Rfc3BlYyBET1VCTEVfQVJST1dfSEVBRAorCXwgb2JqZWN0X3NwZWMgQ1cKKwl8IG9iamVjdF9zcGVjIENDVworCXwgb2JqZWN0X3NwZWMgdGV4dAkJCQkJJXByZWMgVEVYVAorCXwgb2JqZWN0X3NwZWMgTEpVU1QKKwl8IG9iamVjdF9zcGVjIFJKVVNUCisJfCBvYmplY3Rfc3BlYyBBQk9WRQorCXwgb2JqZWN0X3NwZWMgQkVMT1cKKwl8IG9iamVjdF9zcGVjIFRISUNLTkVTUyBleHByCisJfCBvYmplY3Rfc3BlYyBBTElHTkVECisJOworCit0ZXh0OgorCVRFWFQKKwl8IFNQUklOVEYgJygnIFRFWFQgc3ByaW50Zl9hcmdzICcpJworCTsKKworc3ByaW50Zl9hcmdzOgorCS8qIGVtcHR5ICovCisJfCBzcHJpbnRmX2FyZ3MgJywnIGV4cHIKKwk7CisKK3Bvc2l0aW9uOgorCXBvc2l0aW9uX25vdF9wbGFjZQorCXwgcGxhY2UKKwk7CisKK3Bvc2l0aW9uX25vdF9wbGFjZToKKwlleHByX3BhaXIKKwl8IHBvc2l0aW9uICcrJyBleHByX3BhaXIKKwl8IHBvc2l0aW9uICctJyBleHByX3BhaXIKKwl8ICcoJyBwb3NpdGlvbiAnLCcgcG9zaXRpb24gJyknCisJfCBleHByIGJldHdlZW4gcG9zaXRpb24gQU5EIHBvc2l0aW9uCisJfCBleHByICc8JyBwb3NpdGlvbiAnLCcgcG9zaXRpb24gJz4nCisJOworCitiZXR3ZWVuOgorCUJFVFdFRU4KKwl8IE9GIFRIRSBXQVkgQkVUV0VFTgorCTsKKworZXhwcl9wYWlyOgorCWV4cHIgJywnIGV4cHIKKwl8ICcoJyBleHByX3BhaXIgJyknCisJOworCitwbGFjZToKKwkvKiBsaW5lIGF0IEEgbGVmdCA9PSBsaW5lIChhdCBBKSBsZWZ0ICovCisJbGFiZWwJCQkJCQkJJXByZWMgQ0hPUAorCXwgbGFiZWwgY29ybmVyCisJfCBjb3JuZXIgbGFiZWwKKwl8IGNvcm5lciBPRiBsYWJlbAorCXwgSEVSRQorCTsKKworbGFiZWw6CisJTEFCRUwKKwl8IG50aF9wcmltaXRpdmUKKwl8IGxhYmVsICcuJyBMQUJFTAorCTsKKworb3JkaW5hbDoKKwlPUkRJTkFMCisJfCAnYCcgYW55X2V4cHIgVEgKKwk7CisKK29wdGlvbmFsX29yZGluYWxfbGFzdDoKKwlMQVNUCisJfCBvcmRpbmFsIExBU1QKKwk7CisKK250aF9wcmltaXRpdmU6CisJb3JkaW5hbCBvYmplY3RfdHlwZQorCXwgb3B0aW9uYWxfb3JkaW5hbF9sYXN0IG9iamVjdF90eXBlCisJOworCitvYmplY3RfdHlwZToKKwlCT1gKKwl8IENJUkNMRQorCXwgRUxMSVBTRQorCXwgQVJDCisJfCBMSU5FCisJfCBBUlJPVworCXwgU1BMSU5FCisJfCAnWycgJ10nCisJfCBURVhUCisJOworCitsYWJlbF9wYXRoOgorCScuJyBMQUJFTAorCXwgbGFiZWxfcGF0aCAnLicgTEFCRUwKKwk7CisKK3JlbGF0aXZlX3BhdGg6CisJY29ybmVyCQkJCQkJCSVwcmVjIENIT1AKKwkvKiBnaXZlIHRoaXMgYSBsb3dlciBwcmVjZWRlbmNlIHRoYW4gTEVGVCBhbmQgUklHSFQgc28gdGhhdAorCSAgIFtBOiBib3hdIHdpdGggLkEgbGVmdCA9PSBbQTogYm94XSB3aXRoICguQSBsZWZ0KSAqLworCXwgbGFiZWxfcGF0aAkJCQkJCSVwcmVjIFRFWFQKKwl8IGxhYmVsX3BhdGggY29ybmVyCisJOworCitwYXRoOgorCXJlbGF0aXZlX3BhdGgKKwl8ICcoJyByZWxhdGl2ZV9wYXRoICcsJyByZWxhdGl2ZV9wYXRoICcpJworCQl7fQorCS8qIFRoZSByZXN0IG9mIHRoZXNlIHJ1bGVzIGFyZSBhIGNvbXBhdGliaWxpdHkgc29wLiAqLworCXwgT1JESU5BTCBMQVNUIG9iamVjdF90eXBlIHJlbGF0aXZlX3BhdGgKKwl8IExBU1Qgb2JqZWN0X3R5cGUgcmVsYXRpdmVfcGF0aAorCXwgT1JESU5BTCBvYmplY3RfdHlwZSByZWxhdGl2ZV9wYXRoCisJfCBMQUJFTCByZWxhdGl2ZV9wYXRoCisJOworCitjb3JuZXI6CisJRE9UX04KKwl8IERPVF9FCisJfCBET1RfVworCXwgRE9UX1MKKwl8IERPVF9ORQorCXwgRE9UX1NFCisJfCBET1RfTlcKKwl8IERPVF9TVworCXwgRE9UX0MKKwl8IERPVF9TVEFSVAorCXwgRE9UX0VORAorCXwgVE9QCisJfCBCT1RUT00KKwl8IExFRlQKKwl8IFJJR0hUCisJfCBVUFBFUiBMRUZUCisJfCBMT1dFUiBMRUZUCisJfCBVUFBFUiBSSUdIVAorCXwgTE9XRVIgUklHSFQKKwl8IExFRlRfQ09STkVSCisJfCBSSUdIVF9DT1JORVIKKwl8IFVQUEVSIExFRlRfQ09STkVSCisJfCBMT1dFUiBMRUZUX0NPUk5FUgorCXwgVVBQRVIgUklHSFRfQ09STkVSCisJfCBMT1dFUiBSSUdIVF9DT1JORVIKKwl8IE5PUlRICisJfCBTT1VUSAorCXwgRUFTVAorCXwgV0VTVAorCXwgQ0VOVEVSCisJfCBTVEFSVAorCXwgRU5ECisJOworCitleHByOgorCVZBUklBQkxFCisJfCBOVU1CRVIKKwl8IHBsYWNlIERPVF9YCisJfCBwbGFjZSBET1RfWQorCXwgcGxhY2UgRE9UX0hUCisJfCBwbGFjZSBET1RfV0lECisJfCBwbGFjZSBET1RfUkFECisJfCBleHByICcrJyBleHByCisJfCBleHByICctJyBleHByCisJfCBleHByICcqJyBleHByCisJfCBleHByICcvJyBleHByCisJfCBleHByICclJyBleHByCisJfCBleHByICdeJyBleHByCisJfCAnLScgZXhwcgkJCQkJCSVwcmVjICchJworCXwgJygnIGFueV9leHByICcpJworCXwgU0lOICcoJyBhbnlfZXhwciAnKScKKwl8IENPUyAnKCcgYW55X2V4cHIgJyknCisJfCBBVEFOMiAnKCcgYW55X2V4cHIgJywnIGFueV9leHByICcpJworCXwgTE9HICcoJyBhbnlfZXhwciAnKScKKwl8IEVYUCAnKCcgYW55X2V4cHIgJyknCisJfCBTUVJUICcoJyBhbnlfZXhwciAnKScKKwl8IEtfTUFYICcoJyBhbnlfZXhwciAnLCcgYW55X2V4cHIgJyknCisJfCBLX01JTiAnKCcgYW55X2V4cHIgJywnIGFueV9leHByICcpJworCXwgSU5UICcoJyBhbnlfZXhwciAnKScKKwl8IFJBTkQgJygnIGFueV9leHByICcpJworCXwgUkFORCAnKCcgJyknCisJfCBTUkFORCAnKCcgYW55X2V4cHIgJyknCisJfCBleHByICc8JyBleHByCisJfCBleHByIExFU1NFUVVBTCBleHByCisJfCBleHByICc+JyBleHByCisJfCBleHByIEdSRUFURVJFUVVBTCBleHByCisJfCBleHByIEVRVUFMRVFVQUwgZXhwcgorCXwgZXhwciBOT1RFUVVBTCBleHByCisJfCBleHByIEFOREFORCBleHByCisJfCBleHByIE9ST1IgZXhwcgorCXwgJyEnIGV4cHIKKwk7CisKKworJSUKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CitzdGF0aWMgaW50Cit5eWxleCAodm9pZCkKK3sKKyAgc3RhdGljIGludCBjb25zdCBpbnB1dFtdID0geworICAgIFZBUklBQkxFLCAnPScsIExBQkVMLCBMRUZULCBET1RfWCwgMAorICB9OworICBzdGF0aWMgaW50IGNvbnN0ICppbnB1dHAgPSBpbnB1dDsKKyAgcmV0dXJuICppbnB1dHArKzsKK30KKworaW50CittYWluICh2b2lkKQoreworICByZXR1cm4geXlwYXJzZSAoKTsKK30KK19BVEVPRgorCisKKworIyBJbiBzb21lIHZlcnNpb25zIG9mIEF1dG9jb25mLCBBVF9DSEVDSyBpbnZva2VzIEFTX0VTQ0FQRSBiZWZvcmUKKyMgZXhwYW5kaW5nIG1hY3Jvcywgc28gaXQgY29ycnVwdHMgc29tZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlCisjIG1hY3Jvcy4gIFRvIGF2b2lkIHRoaXMsIGV4cGFuZCBub3cgYW5kIHBhc3MgaXQgdGhlIHJlc3VsdCB3aXRoIHByb3BlcgorIyBzdHJpbmcgcXVvdGF0aW9uLiAgQXNzdW1lIGFyZ3MgNyB0aHJvdWdoIDEyIGV4cGFuZCB0byBwcm9wZXJseSBxdW90ZWQKKyMgc3RyaW5ncy4KKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJleGlzdGluZy5hdDoxNDAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiICJleGlzdGluZy5hdDoxNDAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJleGlzdGluZy5hdDoxNDAzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiZXhpc3RpbmcuYXQ6MTQwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMzogYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJleGlzdGluZy5hdDoxNDAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueTo0NzAuMTEtNDg6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0czogcGF0aDogT1JESU5BTCBMQVNUIG9iamVjdF90eXBlIHJlbGF0aXZlX3BhdGgKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisjIERlZmluaW5nIFBPU0lYTFlfQ09SUkVDVCBjYXVzZXMgYmlzb24gdG8gY29tcGxhaW4gaWYgb3B0aW9ucyBhcmUKKyMgYWRkZWQgYWZ0ZXIgdGhlIGdyYW1tYXIgZmlsZSBuYW1lLCBzbyBza2lwIHRoZXNlIGNoZWNrcyBpbiB0aGF0CisjIGNhc2UuCitpZiB0ZXN0ICIkUE9TSVhMWV9DT1JSRUNUX0lTX0VYUE9SVEVEIiA9IGZhbHNlOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworCisgICMgVG8gYXZvaWQgZXhwYW5kaW5nIGl0IHJlcGVhdGVkbHksIHN0b3JlIHNwZWNpZmllZCBzdGRvdXQuCisgIDogPmV4cG91dAorCisgICMgUnVuIHdpdGggLVdlcnJvci4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IC1XZXJyb3IiICJleGlzdGluZy5hdDoxNDAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIEJ1aWxkIGV4cGVjdGVkIHN0ZGVyciB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSAid2FybmluZ3MgYmVpbmcKKyAgIyB0cmVhdGVkIGFzIGVycm9ycyIgbWVzc2FnZS4KKyAgY2F0ID5hdC1iaXNvbi1jaGVjay13YXJuaW5ncyA8PCdfQVRFT0YnCitpbnB1dC55OjQ3MC4xMS00ODogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzOiBwYXRoOiBPUkRJTkFMIExBU1Qgb2JqZWN0X3R5cGUgcmVsYXRpdmVfcGF0aAorX0FURU9GCisKKyAgYXRfYmlzb25fY2hlY2tfZmlyc3Q9YHNlZCAtbiBcCisgICAgJy86IHdhcm5pbmc6IC97PTtxO30nIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzYAorICA6ICR7YXRfYmlzb25fY2hlY2tfZmlyc3Q6PTF9CisgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcD1gc2VkIC1uIFwKKyAgICAnL2NvbmZsaWN0czogWzAtOV0uKnJlZHVjZSQvez07cTt9JyBhdC1iaXNvbi1jaGVjay13YXJuaW5nc2AKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcDo9MX0KKyAgaWYgdGVzdCAkYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wIC1sdCAkYXRfYmlzb25fY2hlY2tfZmlyc3Q7IHRoZW4KKyAgICBhdF9iaXNvbl9jaGVja19maXJzdD0kYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wCisgIGZpCisgIGlmIHRlc3QgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0IC1ndCAxOyB0aGVuCisgICAgc2VkIC1uICIxLGBleHByICRhdF9iaXNvbl9jaGVja19maXJzdCAtIDFgInAgXAorICAgICAgYXQtYmlzb24tY2hlY2std2FybmluZ3MgPiBleHBlcnIKKyAgZmkKKyAgZWNobyAnYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzJyA+PiBleHBlcnIKKworICAjIEZpbmlzaCBidWlsZGluZyBleHBlY3RlZCBzdGRlcnIgYW5kIGNoZWNrLiAgVW5saWtlIHdhcm5pbmdzLAorICAjIGNvbXBsYWludHMgY2F1c2UgYmlzb24gdG8gZXhpdCBlYXJseS4gIFRodXMsIHdpdGggLVdlcnJvciwgYmlzb24KKyAgIyBkb2VzIG5vdCBuZWNlc3NhcmlseSByZXBvcnQgYWxsIHdhcm5pbmdzIHRoYXQgaXQgZG9lcyB3aXRob3V0CisgICMgLVdlcnJvciwgYnV0IGl0IGF0IGxlYXN0IHJlcG9ydHMgb25lLgorICBhdF9iaXNvbl9jaGVja19sYXN0PWBzZWQgLW4gJyQ9JyBzdGRlcnJgCisgIDogJHthdF9iaXNvbl9jaGVja19sYXN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19sYXN0PWBleHByICRhdF9iaXNvbl9jaGVja19sYXN0IC0gMWAKKyAgc2VkIC1uICIkYXRfYmlzb25fY2hlY2tfZmlyc3QsJGF0X2Jpc29uX2NoZWNrX2xhc3QicCBcCisgICAgYXQtYmlzb24tY2hlY2std2FybmluZ3MgPj4gZXhwZXJyCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzOiBzZWQgJ3MsLiovXFwoYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzXFwpXCQsXFwxLCcgXFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJleGlzdGluZy5hdDoxNDAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAncywuKi9cKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1wpJCxcMSwnIFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIE5vdyBjaGVjayAtLXdhcm5pbmdzPWVycm9yLgorICBjcCBzdGRlcnIgZXhwZXJyCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yIiAiZXhpc3RpbmcuYXQ6MTQwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIE5vdyBjaGVjayAtV25vbmUgYW5kIC0td2FybmluZ3M9bm9uZSBieSBtYWtpbmcgc3VyZSB0aGF0CisgICMgLVdlcnJvciBkb2Vzbid0IGNoYW5nZSB0aGUgZXhpdCBzdGF0dXMgd2hlbiAtV25vbmUgb3IKKyAgIyAtLXdhcm5pbmdzPW5vbmUgaXMgc3BlY2lmaWVkLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSAtV25vbmUgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIiAiZXhpc3RpbmcuYXQ6MTQwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiICJleGlzdGluZy5hdDoxNDAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzOiBzZWQgLW4gJ3MvXlN0YXRlIC8vcCcgaW5wdXQub3V0cHV0IHwgdGFpbCAtMSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBzaGVsbCBwaXBlbGluZScgImV4aXN0aW5nLmF0OjE0MDMiCisoICRhdF9jaGVja190cmFjZTsgc2VkIC1uICdzL15TdGF0ZSAvL3AnIGlucHV0Lm91dHB1dCB8IHRhaWwgLTEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICI0MjcKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzOiBkaWZmIC11IC9kZXYvbnVsbCAvZGV2L251bGwgfHwgZXhpdCA3NyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImV4aXN0aW5nLmF0OjE0MDMiCisoICRhdF9jaGVja190cmFjZTsgZGlmZiAtdSAvZGV2L251bGwgL2Rldi9udWxsIHx8IGV4aXQgNzcKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMzogc2VkICdzL14lZGVmaW5lIGxyLnR5cGUgLipcJC8vJyBpbnB1dC55ID4gaW5wdXQtbGFsci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJzZWQgJ3MvXiVkZWZpbmUgbHIudHlwZSAuKiQvLycgaW5wdXQueSA+IGlucHV0LWxhbHIueSIgImV4aXN0aW5nLmF0OjE0MDMiCisoICRhdF9jaGVja190cmFjZTsgc2VkICdzL14lZGVmaW5lIGxyLnR5cGUgLiokLy8nIGlucHV0LnkgPiBpbnB1dC1sYWxyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tcmVwb3J0PWFsbCBpbnB1dC1sYWxyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJleGlzdGluZy5hdDoxNDAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC0tcmVwb3J0PWFsbCBpbnB1dC1sYWxyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgaW5wdXQtbGFsci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tcmVwb3J0PWFsbCBpbnB1dC1sYWxyLnkiICJleGlzdGluZy5hdDoxNDAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC0tcmVwb3J0PWFsbCBpbnB1dC1sYWxyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImV4aXN0aW5nLmF0OjE0MDMiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJleGlzdGluZy5hdDoxNDAzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzOiBiaXNvbiAtLXJlcG9ydD1hbGwgaW5wdXQtbGFsci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiZXhpc3RpbmcuYXQ6MTQwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtLXJlcG9ydD1hbGwgaW5wdXQtbGFsci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMzogZGlmZiAtdSBpbnB1dC1sYWxyLm91dHB1dCBpbnB1dC5vdXRwdXQgXFwKKyAgICAgICAgICAgfCBzZWQgLW4gJy9eQEAvLFwkcCcgfCBzZWQgJ3MvXiBcJC8vJyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImV4aXN0aW5nLmF0OjE0MDMiCisoICRhdF9jaGVja190cmFjZTsgZGlmZiAtdSBpbnB1dC1sYWxyLm91dHB1dCBpbnB1dC5vdXRwdXQgXAorICAgICAgICAgICB8IHNlZCAtbiAnL15AQC8sJHAnIHwgc2VkICdzL14gJC8vJworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIkBAIC0xMjIzLDcgKzEyMjMsNyBAQAorICAgICB0ZXh0X2V4cHIgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMgorICAgICB0ZXh0ICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTEzNzcsNyArMTM3Nyw3IEBACisgICAgICchJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5NAorCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMTg1NCw3ICsxODU0LDcgQEAKKworICAgICB0ZXh0ICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDE2MgorICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTIwNDcsNyArMjA0Nyw3IEBACisgICAgIHRleHRfZXhwciAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEyCisgICAgIHRleHQgICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEzCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMjU3MSw3ICsyNTcxLDcgQEAKKyAgICAgcG9zaXRpb25fbm90X3BsYWNlICAgICBnbyB0byBzdGF0ZSA5OQorICAgICBleHByX3BhaXIgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDE5MQorICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMQorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTI3MzIsNyArMjczMiw3IEBACisgICAgIHRleHRfZXhwciAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEyCisgICAgIHRleHQgICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEzCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMjg3NSw3ICsyODc1LDcgQEAKKyAgICAgJyEnICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDk0CisKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC0zMDE4LDcgKzMwMTgsNyBAQAorICAgICAnIScgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTQKKworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTMyNTYsNyArMzI1Niw3IEBACisKKyBTdGF0ZSAxMDIKKworLSAgMTQ2IHBsYWNlOiBsYWJlbCAuICBbXCRlbmQsIExBQkVMLCBWQVJJQUJMRSwgTlVNQkVSLCBURVhULCBPUkRJTkFMLCBMRUZUX0FSUk9XX0hFQUQsIFJJR0hUX0FSUk9XX0hFQUQsIERPVUJMRV9BUlJPV19IRUFELCBMQVNULCBVUCwgRE9XTiwgTEVGVCwgUklHSFQsIEhFSUdIVCwgUkFESVVTLCBXSURUSCwgRElBTUVURVIsIEZST00sIFRPLCBBVCwgV0lUSCwgQlksIFRIRU4sIFNPTElELCBET1RURUQsIERBU0hFRCwgQ0hPUCwgU0FNRSwgSU5WSVNJQkxFLCBMSlVTVCwgUkpVU1QsIEFCT1ZFLCBCRUxPVywgQU5ELCBIRVJFLCBET1RfWCwgRE9UX1ksIERPVF9IVCwgRE9UX1dJRCwgRE9UX1JBRCwgU0lOLCBDT1MsIEFUQU4yLCBMT0csIEVYUCwgU1FSVCwgS19NQVgsIEtfTUlOLCBJTlQsIFJBTkQsIFNSQU5ELCBDVywgQ0NXLCBUSElDS05FU1MsIEZJTEwsIENPTE9SRUQsIE9VVExJTkVELCBTSEFERUQsIEFMSUdORUQsIFNQUklOVEYsICcoJywgJ1xgJywgJywnLCAnPicsICcrJywgJy0nLCAnIScsICc7JywgJ30nLCAnXScsICcpJ10KKysgIDE0NiBwbGFjZTogbGFiZWwgLiAgW1wkZW5kLCBMQUJFTCwgVkFSSUFCTEUsIE5VTUJFUiwgVEVYVCwgT1JESU5BTCwgTEVGVF9BUlJPV19IRUFELCBSSUdIVF9BUlJPV19IRUFELCBET1VCTEVfQVJST1dfSEVBRCwgTEFTVCwgVVAsIERPV04sIExFRlQsIFJJR0hULCBIRUlHSFQsIFJBRElVUywgV0lEVEgsIERJQU1FVEVSLCBGUk9NLCBUTywgQVQsIFdJVEgsIEJZLCBUSEVOLCBTT0xJRCwgRE9UVEVELCBEQVNIRUQsIENIT1AsIFNBTUUsIElOVklTSUJMRSwgTEpVU1QsIFJKVVNULCBBQk9WRSwgQkVMT1csIEhFUkUsIERPVF9YLCBET1RfWSwgRE9UX0hULCBET1RfV0lELCBET1RfUkFELCBTSU4sIENPUywgQVRBTjIsIExPRywgRVhQLCBTUVJULCBLX01BWCwgS19NSU4sIElOVCwgUkFORCwgU1JBTkQsIENXLCBDQ1csIFRISUNLTkVTUywgRklMTCwgQ09MT1JFRCwgT1VUTElORUQsIFNIQURFRCwgQUxJR05FRCwgU1BSSU5URiwgJygnLCAnXGAnLCAnKycsICctJywgJyEnLCAnOycsICd9JywgJ10nXQorICAgMTQ3ICAgICAgfCBsYWJlbCAuIGNvcm5lcgorICAgMTUzIGxhYmVsOiBsYWJlbCAuICcuJyBMQUJFTAorICAgMTgwIGNvcm5lcjogLiBET1RfTgorQEAgLTM2NDUsNyArMzY0NSw3IEBACisgICAgIHRleHRfZXhwciAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEyCisgICAgIHRleHQgICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEzCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMzgwNCw3ICszODA0LDcgQEAKKyAgICAgdGV4dF9leHByICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAyMzkKKyAgICAgdGV4dCAgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTMKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC00NDgxLDcgKzQ0ODEsNyBAQAorICAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDg5IChvYmplY3Rfc3BlYykKKworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTQ2NzMsNyArNDY3Myw3IEBACisgICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgOTEgKG9iamVjdF9zcGVjKQorCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtNDg2Nyw3ICs0ODY3LDcgQEAKKyAgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA5NSAob2JqZWN0X3NwZWMpCisKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC01MDY1LDcgKzUwNjUsNyBAQAorICAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDkzIChvYmplY3Rfc3BlYykKKworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTUyNjAsNyArNTI2MCw3IEBACisgICAgICchJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5NAorCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtNTQwMyw3ICs1NDAzLDcgQEAKKyAgICAgJyEnICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDk0CisKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC01NTQ2LDcgKzU1NDYsNyBAQAorICAgICAnIScgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTQKKworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTU2ODksNyArNTY4OSw3IEBACisgICAgICchJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5NAorCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtNjQ3NSw3ICs2NDc1LDcgQEAKKworICAgICBleHByX3BhaXIgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDI4MAorICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTY2MzMsNyArNjYzMyw3IEBACisgICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMTA1IChvYmplY3Rfc3BlYykKKworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTY4MjUsNyArNjgyNSw3IEBACisgICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMTA3IChvYmplY3Rfc3BlYykKKworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTcwMTcsNyArNzAxNyw3IEBACisgICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMTE0IChvYmplY3Rfc3BlYykKKworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTcyNjQsNyArNzI2NCw3IEBACisgICAgICchJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5NAorCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtNzQwOCw3ICs3NDA4LDcgQEAKKyAgICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAxMDkgKG9iamVjdF9zcGVjKQorCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtNzgxOSwxMiArNzgxOSwxMiBAQAorICAgICBwb3NpdGlvbl9ub3RfcGxhY2UgICAgIGdvIHRvIHN0YXRlIDI5NgorICAgICBleHByX3BhaXIgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMAorICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDI5NworLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorICAgICBjb3JuZXIgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNgorLSAgICBleHByICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDI2NgorKyAgICBleHByICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyNAorCisKKyBTdGF0ZSAxNjUKK0BAIC03OTg3LDcgKzc5ODcsNyBAQAorICAgICB0ZXh0X2V4cHIgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMgorICAgICB0ZXh0ICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTgxNzIsNyArODE3Miw3IEBACisgICAgIHRleHRfZXhwciAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEyCisgICAgIHRleHQgICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEzCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtODMzMyw3ICs4MzMzLDcgQEAKKyAgICAgdGV4dF9leHByICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTIKKyAgICAgdGV4dCAgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTMKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC04NDk0LDcgKzg0OTQsNyBAQAorICAgICB0ZXh0X2V4cHIgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMgorICAgICB0ZXh0ICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTg2NTUsNyArODY1NSw3IEBACisgICAgIHRleHRfZXhwciAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEyCisgICAgIHRleHQgICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEzCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtODgxNiw3ICs4ODE2LDcgQEAKKyAgICAgdGV4dF9leHByICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTIKKyAgICAgdGV4dCAgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTMKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC04OTc3LDcgKzg5NzcsNyBAQAorICAgICB0ZXh0X2V4cHIgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMgorICAgICB0ZXh0ICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTkxMzgsNyArOTEzOCw3IEBACisgICAgIHRleHRfZXhwciAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEyCisgICAgIHRleHQgICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEzCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtOTI5OSw3ICs5Mjk5LDcgQEAKKyAgICAgdGV4dF9leHByICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTIKKyAgICAgdGV4dCAgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTMKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC05NDYwLDcgKzk0NjAsNyBAQAorICAgICB0ZXh0X2V4cHIgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMgorICAgICB0ZXh0ICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTk2MjMsNyArOTYyMyw3IEBACisgICAgIHRleHRfZXhwciAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEyCisgICAgIHRleHQgICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEzCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtOTc4NCw3ICs5Nzg0LDcgQEAKKyAgICAgdGV4dF9leHByICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTIKKyAgICAgdGV4dCAgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTMKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC05OTIxLDcgKzk5MjEsNyBAQAorCisgICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgNDcgKGFueV9leHByKQorCistICAgIGJldHdlZW4gIGdvIHRvIHN0YXRlIDIzNworKyAgICBiZXR3ZWVuICBnbyB0byBzdGF0ZSA0MjUKKworCisgU3RhdGUgMTkzCitAQCAtMTAxNTIsNyArMTAxNTIsNyBAQAorCisgICAgIGV4cHJfcGFpciAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMzE3CisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMTAyOTgsNyArMTAyOTgsNyBAQAorCisgICAgIGV4cHJfcGFpciAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMzE4CisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMTA2MjIsNyArMTA2MjIsNyBAQAorICAgICAnIScgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTQKKworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTEwNzY1LDcgKzEwNzY1LDcgQEAKKyAgICAgJyEnICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDk0CisKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC0xMDkwOCw3ICsxMDkwOCw3IEBACisgICAgICchJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5NAorCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMTEwNTEsNyArMTEwNTEsNyBAQAorICAgICAnIScgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTQKKworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTExMTk0LDcgKzExMTk0LDcgQEAKKyAgICAgJyEnICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDk0CisKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC0xMTMzNyw3ICsxMTMzNyw3IEBACisgICAgICchJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5NAorCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMTE0ODAsNyArMTE0ODAsNyBAQAorICAgICAnIScgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTQKKworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTExNjM3LDcgKzExNjM3LDcgQEAKKyAgICAgcG9zaXRpb25fbm90X3BsYWNlICAgICBnbyB0byBzdGF0ZSA5OQorICAgICBleHByX3BhaXIgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMAorICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMQorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTExNzgwLDcgKzExNzgwLDcgQEAKKyAgICAgJyEnICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDk0CisKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC0xMTkyMyw3ICsxMTkyMyw3IEBACisgICAgICchJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5NAorCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMTIwNjYsNyArMTIwNjYsNyBAQAorICAgICAnIScgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTQKKworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTEyMjA5LDcgKzEyMjA5LDcgQEAKKyAgICAgJyEnICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDk0CisKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC0xMjM1Miw3ICsxMjM1Miw3IEBACisgICAgICchJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5NAorCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMTI0OTUsNyArMTI0OTUsNyBAQAorICAgICAnIScgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTQKKworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTEyNjM4LDcgKzEyNjM4LDcgQEAKKyAgICAgJyEnICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDk0CisKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC0xMjc5NCwxMiArMTI3OTQsMTIgQEAKKyAgICAgcG9zaXRpb25fbm90X3BsYWNlICAgICBnbyB0byBzdGF0ZSA5OQorICAgICBleHByX3BhaXIgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMAorICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMQorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorICAgICBjb3JuZXIgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNgorLSAgICBleHByICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDI2NgorKyAgICBleHByICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyNAorCisKKyBTdGF0ZSAyMzgKK0BAIC0xMjkzNyw3ICsxMjkzNyw3IEBACisgICAgICchJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5NAorCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMTMxNjAsNyArMTMxNjAsNyBAQAorICAgICB0ZXh0X2V4cHIgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDM0MgorICAgICB0ZXh0ICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTEzMzE5LDcgKzEzMzE5LDcgQEAKKyAgICAgdGV4dF9leHByICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAzNDQKKyAgICAgdGV4dCAgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTMKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC0xMzUwMiw3ICsxMzUwMiw3IEBACisgICAgIHRleHRfZXhwciAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMzQ4CisgICAgIHRleHQgICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEzCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMTM2NjEsNyArMTM2NjEsNyBAQAorICAgICB0ZXh0X2V4cHIgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDM1MAorICAgICB0ZXh0ICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTEzODA0LDcgKzEzODA0LDcgQEAKKyAgICAgJyEnICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDk0CisKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC0xNDc0Nyw3ICsxNDc0Nyw3IEBACisgICAgIHBvc2l0aW9uX25vdF9wbGFjZSAgICAgZ28gdG8gc3RhdGUgOTkKKyAgICAgZXhwcl9wYWlyICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxOTEKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDEKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC0xNTA3NCw3ICsxNTA3NCw3IEBACisgICAgIHRleHQgICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEzCisgICAgIGV4cHJfcGFpciAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMzY1CisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMTU2OTMsMTIgKzE1NjkzLDEyIEBACisgICAgIHBvc2l0aW9uX25vdF9wbGFjZSAgICAgZ28gdG8gc3RhdGUgOTkKKyAgICAgZXhwcl9wYWlyICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDAKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDEKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKKyAgICAgY29ybmVyICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDYKKy0gICAgZXhwciAgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAyNjYKKysgICAgZXhwciAgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjQKKworCisgU3RhdGUgMzE1CitAQCAtMTYxMjQsNyArMTYxMjQsNyBAQAorCisgICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMjM5IChleHByKQorCistICAgIGJldHdlZW4gIGdvIHRvIHN0YXRlIDIzNworKyAgICBiZXR3ZWVuICBnbyB0byBzdGF0ZSA0MjUKKworICAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgMjM5IGFuZCB0b2tlbiBPRiByZXNvbHZlZCBhcyBzaGlmdCAoJzwnIDwgT0YpLgorICAgICBDb25mbGljdCBiZXR3ZWVuIHJ1bGUgMjM5IGFuZCB0b2tlbiBCRVRXRUVOIHJlc29sdmVkIGFzIHNoaWZ0ICgnPCcgPCBCRVRXRUVOKS4KK0BAIC0xNzIzNCw3ICsxNzIzNCw3IEBACisgICAgIHRleHRfZXhwciAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEyCisgICAgIHRleHQgICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTEzCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMTc0MTYsNyArMTc0MTYsNyBAQAorICAgICB0ZXh0X2V4cHIgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMgorICAgICB0ZXh0ICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExMworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTE3NTc3LDcgKzE3NTc3LDcgQEAKKyAgICAgdGV4dF9leHByICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTIKKyAgICAgdGV4dCAgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTMKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC0xNzc3MiwxMiArMTc3NzIsMTIgQEAKKyAgICAgcG9zaXRpb25fbm90X3BsYWNlICAgICBnbyB0byBzdGF0ZSA5OQorICAgICBleHByX3BhaXIgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMAorICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMQorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorICAgICBjb3JuZXIgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNgorLSAgICBleHByICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDI2NgorKyAgICBleHByICAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyNAorCisKKyBTdGF0ZSAzODMKK0BAIC0xODA3MSw3ICsxODA3MSw3IEBACisgICAgICchJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5NAorCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMTgyMjEsNyArMTgyMjEsNyBAQAorICAgICAnIScgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTQKKworICAgICBwbGFjZSAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDExNAorLSAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMgorKyAgICBsYWJlbCAgICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQyMworICAgICBvcmRpbmFsICAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDEwMworICAgICBvcHRpb25hbF9vcmRpbmFsX2xhc3QgIGdvIHRvIHN0YXRlIDEwNAorICAgICBudGhfcHJpbWl0aXZlICAgICAgICAgIGdvIHRvIHN0YXRlIDEwNQorQEAgLTE4ODMwLDcgKzE4ODMwLDcgQEAKKyAgICAgJyEnICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDk0CisKKyAgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMTQKKy0gICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDIKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKyAgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKyAgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKyAgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKK0BAIC0xODk4Nyw3ICsxODk4Nyw3IEBACisgICAgICchJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5NAorCisgICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTE0CistICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAyCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisgICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisgICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisgICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CitAQCAtMTkwODksMyArMTkwODksNDQwIEBACisgICAgMjkgcGxhY2VsZXNzX2VsZW1lbnQ6IEZPUiBWQVJJQUJMRSAnPScgZXhwciBUTyBleHByIG9wdGlvbmFsX2J5IERPIFwkQDYgREVMSU1JVEVEIC4KKworICAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDI5IChwbGFjZWxlc3NfZWxlbWVudCkKKysKKysKKytTdGF0ZSA0MjMKKysKKysgIDE0NiBwbGFjZTogbGFiZWwgLiAgW1wkZW5kLCBBTkQsIERPVF9YLCBET1RfWSwgRE9UX0hULCBET1RfV0lELCBET1RfUkFELCAnLCcsICc+JywgJysnLCAnLScsICc7JywgJ30nLCAnXScsICcpJ10KKysgIDE0NyAgICAgIHwgbGFiZWwgLiBjb3JuZXIKKysgIDE1MyBsYWJlbDogbGFiZWwgLiAnLicgTEFCRUwKKysgIDE4MCBjb3JuZXI6IC4gRE9UX04KKysgIDE4MSAgICAgICB8IC4gRE9UX0UKKysgIDE4MiAgICAgICB8IC4gRE9UX1cKKysgIDE4MyAgICAgICB8IC4gRE9UX1MKKysgIDE4NCAgICAgICB8IC4gRE9UX05FCisrICAxODUgICAgICAgfCAuIERPVF9TRQorKyAgMTg2ICAgICAgIHwgLiBET1RfTlcKKysgIDE4NyAgICAgICB8IC4gRE9UX1NXCisrICAxODggICAgICAgfCAuIERPVF9DCisrICAxODkgICAgICAgfCAuIERPVF9TVEFSVAorKyAgMTkwICAgICAgIHwgLiBET1RfRU5ECisrICAxOTEgICAgICAgfCAuIFRPUAorKyAgMTkyICAgICAgIHwgLiBCT1RUT00KKysgIDE5MyAgICAgICB8IC4gTEVGVAorKyAgMTk0ICAgICAgIHwgLiBSSUdIVAorKyAgMTk1ICAgICAgIHwgLiBVUFBFUiBMRUZUCisrICAxOTYgICAgICAgfCAuIExPV0VSIExFRlQKKysgIDE5NyAgICAgICB8IC4gVVBQRVIgUklHSFQKKysgIDE5OCAgICAgICB8IC4gTE9XRVIgUklHSFQKKysgIDE5OSAgICAgICB8IC4gTEVGVF9DT1JORVIKKysgIDIwMCAgICAgICB8IC4gUklHSFRfQ09STkVSCisrICAyMDEgICAgICAgfCAuIFVQUEVSIExFRlRfQ09STkVSCisrICAyMDIgICAgICAgfCAuIExPV0VSIExFRlRfQ09STkVSCisrICAyMDMgICAgICAgfCAuIFVQUEVSIFJJR0hUX0NPUk5FUgorKyAgMjA0ICAgICAgIHwgLiBMT1dFUiBSSUdIVF9DT1JORVIKKysgIDIwNSAgICAgICB8IC4gTk9SVEgKKysgIDIwNiAgICAgICB8IC4gU09VVEgKKysgIDIwNyAgICAgICB8IC4gRUFTVAorKyAgMjA4ICAgICAgIHwgLiBXRVNUCisrICAyMDkgICAgICAgfCAuIENFTlRFUgorKyAgMjEwICAgICAgIHwgLiBTVEFSVAorKyAgMjExICAgICAgIHwgLiBFTkQKKysKKysgICAgTEVGVCAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDUzCisrICAgIFJJR0hUICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1NAorKyAgICBET1RfTiAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNTYKKysgICAgRE9UX0UgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDU3CisrICAgIERPVF9XICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1OAorKyAgICBET1RfUyAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNTkKKysgICAgRE9UX05FICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDYwCisrICAgIERPVF9TRSAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA2MQorKyAgICBET1RfTlcgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNjIKKysgICAgRE9UX1NXICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDYzCisrICAgIERPVF9DICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA2NAorKyAgICBET1RfU1RBUlQgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNjUKKysgICAgRE9UX0VORCAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDY2CisrICAgIFRPUCAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA3OAorKyAgICBCT1RUT00gICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNzkKKysgICAgVVBQRVIgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDgwCisrICAgIExPV0VSICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4MQorKyAgICBMRUZUX0NPUk5FUiAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgODIKKysgICAgUklHSFRfQ09STkVSICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDgzCisrICAgIE5PUlRIICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4NAorKyAgICBTT1VUSCAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgODUKKysgICAgRUFTVCAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDg2CisrICAgIFdFU1QgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4NworKyAgICBDRU5URVIgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgODgKKysgICAgRU5EICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDg5CisrICAgIFNUQVJUICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5MAorKyAgICAnLicgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMjA0CisrCisrICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMTQ2IChwbGFjZSkKKysKKysgICAgY29ybmVyICBnbyB0byBzdGF0ZSAyMDUKKysKKysKKytTdGF0ZSA0MjQKKysKKysgIDE0MCBwb3NpdGlvbl9ub3RfcGxhY2U6IGV4cHIgLiBiZXR3ZWVuIHBvc2l0aW9uIEFORCBwb3NpdGlvbgorKyAgMTQxICAgICAgICAgICAgICAgICAgIHwgZXhwciAuICc8JyBwb3NpdGlvbiAnLCcgcG9zaXRpb24gJz4nCisrICAxNDIgYmV0d2VlbjogLiBCRVRXRUVOCisrICAxNDMgICAgICAgIHwgLiBPRiBUSEUgV0FZIEJFVFdFRU4KKysgIDE0NCBleHByX3BhaXI6IGV4cHIgLiAnLCcgZXhwcgorKyAgMjE5IGV4cHI6IGV4cHIgLiAnKycgZXhwcgorKyAgMjIwICAgICB8IGV4cHIgLiAnLScgZXhwcgorKyAgMjIxICAgICB8IGV4cHIgLiAnKicgZXhwcgorKyAgMjIyICAgICB8IGV4cHIgLiAnLycgZXhwcgorKyAgMjIzICAgICB8IGV4cHIgLiAnJScgZXhwcgorKyAgMjI0ICAgICB8IGV4cHIgLiAnXicgZXhwcgorKyAgMjM5ICAgICB8IGV4cHIgLiAnPCcgZXhwcgorKyAgMjQwICAgICB8IGV4cHIgLiBMRVNTRVFVQUwgZXhwcgorKyAgMjQxICAgICB8IGV4cHIgLiAnPicgZXhwcgorKyAgMjQyICAgICB8IGV4cHIgLiBHUkVBVEVSRVFVQUwgZXhwcgorKyAgMjQzICAgICB8IGV4cHIgLiBFUVVBTEVRVUFMIGV4cHIKKysgIDI0NCAgICAgfCBleHByIC4gTk9URVFVQUwgZXhwcgorKyAgMjQ1ICAgICB8IGV4cHIgLiBBTkRBTkQgZXhwcgorKyAgMjQ2ICAgICB8IGV4cHIgLiBPUk9SIGV4cHIKKysKKysgICAgT0YgICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIyMAorKyAgICBCRVRXRUVOICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMjIxCisrICAgIEFOREFORCAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyMjIKKysgICAgT1JPUiAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIyMworKyAgICBOT1RFUVVBTCAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMjI0CisrICAgIEVRVUFMRVFVQUwgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyMjUKKysgICAgTEVTU0VRVUFMICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIyNgorKyAgICBHUkVBVEVSRVFVQUwgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMjI3CisrICAgICcsJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyMjgKKysgICAgJzwnICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIyOQorKyAgICAnPicgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMjMwCisrICAgICcrJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyMzEKKysgICAgJy0nICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIzMgorKyAgICAnKicgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMjMzCisrICAgICcvJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAyMzQKKysgICAgJyUnICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDIzNQorKyAgICAnXicgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMjM2CisrCisrICAgIGJldHdlZW4gIGdvIHRvIHN0YXRlIDQyNQorKworKworK1N0YXRlIDQyNQorKworKyAgMTM0IHBvc2l0aW9uOiAuIHBvc2l0aW9uX25vdF9wbGFjZQorKyAgMTM1ICAgICAgICAgfCAuIHBsYWNlCisrICAxMzYgcG9zaXRpb25fbm90X3BsYWNlOiAuIGV4cHJfcGFpcgorKyAgMTM3ICAgICAgICAgICAgICAgICAgIHwgLiBwb3NpdGlvbiAnKycgZXhwcl9wYWlyCisrICAxMzggICAgICAgICAgICAgICAgICAgfCAuIHBvc2l0aW9uICctJyBleHByX3BhaXIKKysgIDEzOSAgICAgICAgICAgICAgICAgICB8IC4gJygnIHBvc2l0aW9uICcsJyBwb3NpdGlvbiAnKScKKysgIDE0MCAgICAgICAgICAgICAgICAgICB8IC4gZXhwciBiZXR3ZWVuIHBvc2l0aW9uIEFORCBwb3NpdGlvbgorKyAgMTQwICAgICAgICAgICAgICAgICAgIHwgZXhwciBiZXR3ZWVuIC4gcG9zaXRpb24gQU5EIHBvc2l0aW9uCisrICAxNDEgICAgICAgICAgICAgICAgICAgfCAuIGV4cHIgJzwnIHBvc2l0aW9uICcsJyBwb3NpdGlvbiAnPicKKysgIDE0NCBleHByX3BhaXI6IC4gZXhwciAnLCcgZXhwcgorKyAgMTQ1ICAgICAgICAgIHwgLiAnKCcgZXhwcl9wYWlyICcpJworKyAgMTQ2IHBsYWNlOiAuIGxhYmVsCisrICAxNDcgICAgICB8IC4gbGFiZWwgY29ybmVyCisrICAxNDggICAgICB8IC4gY29ybmVyIGxhYmVsCisrICAxNDkgICAgICB8IC4gY29ybmVyIE9GIGxhYmVsCisrICAxNTAgICAgICB8IC4gSEVSRQorKyAgMTUxIGxhYmVsOiAuIExBQkVMCisrICAxNTIgICAgICB8IC4gbnRoX3ByaW1pdGl2ZQorKyAgMTUzICAgICAgfCAuIGxhYmVsICcuJyBMQUJFTAorKyAgMTU0IG9yZGluYWw6IC4gT1JESU5BTAorKyAgMTU1ICAgICAgICB8IC4gJ1xgJyBhbnlfZXhwciBUSAorKyAgMTU2IG9wdGlvbmFsX29yZGluYWxfbGFzdDogLiBMQVNUCisrICAxNTcgICAgICAgICAgICAgICAgICAgICAgfCAuIG9yZGluYWwgTEFTVAorKyAgMTU4IG50aF9wcmltaXRpdmU6IC4gb3JkaW5hbCBvYmplY3RfdHlwZQorKyAgMTU5ICAgICAgICAgICAgICB8IC4gb3B0aW9uYWxfb3JkaW5hbF9sYXN0IG9iamVjdF90eXBlCisrICAxODAgY29ybmVyOiAuIERPVF9OCisrICAxODEgICAgICAgfCAuIERPVF9FCisrICAxODIgICAgICAgfCAuIERPVF9XCisrICAxODMgICAgICAgfCAuIERPVF9TCisrICAxODQgICAgICAgfCAuIERPVF9ORQorKyAgMTg1ICAgICAgIHwgLiBET1RfU0UKKysgIDE4NiAgICAgICB8IC4gRE9UX05XCisrICAxODcgICAgICAgfCAuIERPVF9TVworKyAgMTg4ICAgICAgIHwgLiBET1RfQworKyAgMTg5ICAgICAgIHwgLiBET1RfU1RBUlQKKysgIDE5MCAgICAgICB8IC4gRE9UX0VORAorKyAgMTkxICAgICAgIHwgLiBUT1AKKysgIDE5MiAgICAgICB8IC4gQk9UVE9NCisrICAxOTMgICAgICAgfCAuIExFRlQKKysgIDE5NCAgICAgICB8IC4gUklHSFQKKysgIDE5NSAgICAgICB8IC4gVVBQRVIgTEVGVAorKyAgMTk2ICAgICAgIHwgLiBMT1dFUiBMRUZUCisrICAxOTcgICAgICAgfCAuIFVQUEVSIFJJR0hUCisrICAxOTggICAgICAgfCAuIExPV0VSIFJJR0hUCisrICAxOTkgICAgICAgfCAuIExFRlRfQ09STkVSCisrICAyMDAgICAgICAgfCAuIFJJR0hUX0NPUk5FUgorKyAgMjAxICAgICAgIHwgLiBVUFBFUiBMRUZUX0NPUk5FUgorKyAgMjAyICAgICAgIHwgLiBMT1dFUiBMRUZUX0NPUk5FUgorKyAgMjAzICAgICAgIHwgLiBVUFBFUiBSSUdIVF9DT1JORVIKKysgIDIwNCAgICAgICB8IC4gTE9XRVIgUklHSFRfQ09STkVSCisrICAyMDUgICAgICAgfCAuIE5PUlRICisrICAyMDYgICAgICAgfCAuIFNPVVRICisrICAyMDcgICAgICAgfCAuIEVBU1QKKysgIDIwOCAgICAgICB8IC4gV0VTVAorKyAgMjA5ICAgICAgIHwgLiBDRU5URVIKKysgIDIxMCAgICAgICB8IC4gU1RBUlQKKysgIDIxMSAgICAgICB8IC4gRU5ECisrICAyMTIgZXhwcjogLiBWQVJJQUJMRQorKyAgMjEzICAgICB8IC4gTlVNQkVSCisrICAyMTQgICAgIHwgLiBwbGFjZSBET1RfWAorKyAgMjE1ICAgICB8IC4gcGxhY2UgRE9UX1kKKysgIDIxNiAgICAgfCAuIHBsYWNlIERPVF9IVAorKyAgMjE3ICAgICB8IC4gcGxhY2UgRE9UX1dJRAorKyAgMjE4ICAgICB8IC4gcGxhY2UgRE9UX1JBRAorKyAgMjE5ICAgICB8IC4gZXhwciAnKycgZXhwcgorKyAgMjIwICAgICB8IC4gZXhwciAnLScgZXhwcgorKyAgMjIxICAgICB8IC4gZXhwciAnKicgZXhwcgorKyAgMjIyICAgICB8IC4gZXhwciAnLycgZXhwcgorKyAgMjIzICAgICB8IC4gZXhwciAnJScgZXhwcgorKyAgMjI0ICAgICB8IC4gZXhwciAnXicgZXhwcgorKyAgMjI1ICAgICB8IC4gJy0nIGV4cHIKKysgIDIyNiAgICAgfCAuICcoJyBhbnlfZXhwciAnKScKKysgIDIyNyAgICAgfCAuIFNJTiAnKCcgYW55X2V4cHIgJyknCisrICAyMjggICAgIHwgLiBDT1MgJygnIGFueV9leHByICcpJworKyAgMjI5ICAgICB8IC4gQVRBTjIgJygnIGFueV9leHByICcsJyBhbnlfZXhwciAnKScKKysgIDIzMCAgICAgfCAuIExPRyAnKCcgYW55X2V4cHIgJyknCisrICAyMzEgICAgIHwgLiBFWFAgJygnIGFueV9leHByICcpJworKyAgMjMyICAgICB8IC4gU1FSVCAnKCcgYW55X2V4cHIgJyknCisrICAyMzMgICAgIHwgLiBLX01BWCAnKCcgYW55X2V4cHIgJywnIGFueV9leHByICcpJworKyAgMjM0ICAgICB8IC4gS19NSU4gJygnIGFueV9leHByICcsJyBhbnlfZXhwciAnKScKKysgIDIzNSAgICAgfCAuIElOVCAnKCcgYW55X2V4cHIgJyknCisrICAyMzYgICAgIHwgLiBSQU5EICcoJyBhbnlfZXhwciAnKScKKysgIDIzNyAgICAgfCAuIFJBTkQgJygnICcpJworKyAgMjM4ICAgICB8IC4gU1JBTkQgJygnIGFueV9leHByICcpJworKyAgMjM5ICAgICB8IC4gZXhwciAnPCcgZXhwcgorKyAgMjQwICAgICB8IC4gZXhwciBMRVNTRVFVQUwgZXhwcgorKyAgMjQxICAgICB8IC4gZXhwciAnPicgZXhwcgorKyAgMjQyICAgICB8IC4gZXhwciBHUkVBVEVSRVFVQUwgZXhwcgorKyAgMjQzICAgICB8IC4gZXhwciBFUVVBTEVRVUFMIGV4cHIKKysgIDI0NCAgICAgfCAuIGV4cHIgTk9URVFVQUwgZXhwcgorKyAgMjQ1ICAgICB8IC4gZXhwciBBTkRBTkQgZXhwcgorKyAgMjQ2ICAgICB8IC4gZXhwciBPUk9SIGV4cHIKKysgIDI0NyAgICAgfCAuICchJyBleHByCisrCisrICAgIExBQkVMICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA0OAorKyAgICBWQVJJQUJMRSAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNDkKKysgICAgTlVNQkVSICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDUwCisrICAgIE9SRElOQUwgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1MQorKyAgICBMQVNUICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNTIKKysgICAgTEVGVCAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDUzCisrICAgIFJJR0hUICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1NAorKyAgICBIRVJFICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNTUKKysgICAgRE9UX04gICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDU2CisrICAgIERPVF9FICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1NworKyAgICBET1RfVyAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNTgKKysgICAgRE9UX1MgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDU5CisrICAgIERPVF9ORSAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA2MAorKyAgICBET1RfU0UgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNjEKKysgICAgRE9UX05XICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDYyCisrICAgIERPVF9TVyAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA2MworKyAgICBET1RfQyAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNjQKKysgICAgRE9UX1NUQVJUICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDY1CisrICAgIERPVF9FTkQgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA2NgorKyAgICBTSU4gICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNjcKKysgICAgQ09TICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDY4CisrICAgIEFUQU4yICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA2OQorKyAgICBMT0cgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNzAKKysgICAgRVhQICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDcxCisrICAgIFNRUlQgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA3MgorKyAgICBLX01BWCAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNzMKKysgICAgS19NSU4gICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDc0CisrICAgIElOVCAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA3NQorKyAgICBSQU5EICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNzYKKysgICAgU1JBTkQgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDc3CisrICAgIFRPUCAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA3OAorKyAgICBCT1RUT00gICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNzkKKysgICAgVVBQRVIgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDgwCisrICAgIExPV0VSICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4MQorKyAgICBMRUZUX0NPUk5FUiAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgODIKKysgICAgUklHSFRfQ09STkVSICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDgzCisrICAgIE5PUlRIICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4NAorKyAgICBTT1VUSCAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgODUKKysgICAgRUFTVCAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDg2CisrICAgIFdFU1QgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4NworKyAgICBDRU5URVIgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgODgKKysgICAgRU5EICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDg5CisrICAgIFNUQVJUICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5MAorKyAgICAnKCcgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTEKKysgICAgJ1xgJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5MgorKyAgICAnLScgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTMKKysgICAgJyEnICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDk0CisrCisrICAgIHBvc2l0aW9uICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDI2CisrICAgIHBvc2l0aW9uX25vdF9wbGFjZSAgICAgZ28gdG8gc3RhdGUgOTkKKysgICAgZXhwcl9wYWlyICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDAKKysgICAgcGxhY2UgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDEKKysgICAgbGFiZWwgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjMKKysgICAgb3JkaW5hbCAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDMKKysgICAgb3B0aW9uYWxfb3JkaW5hbF9sYXN0ICBnbyB0byBzdGF0ZSAxMDQKKysgICAgbnRoX3ByaW1pdGl2ZSAgICAgICAgICBnbyB0byBzdGF0ZSAxMDUKKysgICAgY29ybmVyICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSAxMDYKKysgICAgZXhwciAgICAgICAgICAgICAgICAgICBnbyB0byBzdGF0ZSA0MjQKKysKKysKKytTdGF0ZSA0MjYKKysKKysgIDEzNyBwb3NpdGlvbl9ub3RfcGxhY2U6IHBvc2l0aW9uIC4gJysnIGV4cHJfcGFpcgorKyAgMTM4ICAgICAgICAgICAgICAgICAgIHwgcG9zaXRpb24gLiAnLScgZXhwcl9wYWlyCisrICAxNDAgICAgICAgICAgICAgICAgICAgfCBleHByIGJldHdlZW4gcG9zaXRpb24gLiBBTkQgcG9zaXRpb24KKysKKysgICAgQU5EICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDQyNworKyAgICAnKycgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMTk3CisrICAgICctJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxOTgKKysKKysKKytTdGF0ZSA0MjcKKysKKysgIDEzNCBwb3NpdGlvbjogLiBwb3NpdGlvbl9ub3RfcGxhY2UKKysgIDEzNSAgICAgICAgIHwgLiBwbGFjZQorKyAgMTM2IHBvc2l0aW9uX25vdF9wbGFjZTogLiBleHByX3BhaXIKKysgIDEzNyAgICAgICAgICAgICAgICAgICB8IC4gcG9zaXRpb24gJysnIGV4cHJfcGFpcgorKyAgMTM4ICAgICAgICAgICAgICAgICAgIHwgLiBwb3NpdGlvbiAnLScgZXhwcl9wYWlyCisrICAxMzkgICAgICAgICAgICAgICAgICAgfCAuICcoJyBwb3NpdGlvbiAnLCcgcG9zaXRpb24gJyknCisrICAxNDAgICAgICAgICAgICAgICAgICAgfCAuIGV4cHIgYmV0d2VlbiBwb3NpdGlvbiBBTkQgcG9zaXRpb24KKysgIDE0MCAgICAgICAgICAgICAgICAgICB8IGV4cHIgYmV0d2VlbiBwb3NpdGlvbiBBTkQgLiBwb3NpdGlvbgorKyAgMTQxICAgICAgICAgICAgICAgICAgIHwgLiBleHByICc8JyBwb3NpdGlvbiAnLCcgcG9zaXRpb24gJz4nCisrICAxNDQgZXhwcl9wYWlyOiAuIGV4cHIgJywnIGV4cHIKKysgIDE0NSAgICAgICAgICB8IC4gJygnIGV4cHJfcGFpciAnKScKKysgIDE0NiBwbGFjZTogLiBsYWJlbAorKyAgMTQ3ICAgICAgfCAuIGxhYmVsIGNvcm5lcgorKyAgMTQ4ICAgICAgfCAuIGNvcm5lciBsYWJlbAorKyAgMTQ5ICAgICAgfCAuIGNvcm5lciBPRiBsYWJlbAorKyAgMTUwICAgICAgfCAuIEhFUkUKKysgIDE1MSBsYWJlbDogLiBMQUJFTAorKyAgMTUyICAgICAgfCAuIG50aF9wcmltaXRpdmUKKysgIDE1MyAgICAgIHwgLiBsYWJlbCAnLicgTEFCRUwKKysgIDE1NCBvcmRpbmFsOiAuIE9SRElOQUwKKysgIDE1NSAgICAgICAgfCAuICdcYCcgYW55X2V4cHIgVEgKKysgIDE1NiBvcHRpb25hbF9vcmRpbmFsX2xhc3Q6IC4gTEFTVAorKyAgMTU3ICAgICAgICAgICAgICAgICAgICAgIHwgLiBvcmRpbmFsIExBU1QKKysgIDE1OCBudGhfcHJpbWl0aXZlOiAuIG9yZGluYWwgb2JqZWN0X3R5cGUKKysgIDE1OSAgICAgICAgICAgICAgfCAuIG9wdGlvbmFsX29yZGluYWxfbGFzdCBvYmplY3RfdHlwZQorKyAgMTgwIGNvcm5lcjogLiBET1RfTgorKyAgMTgxICAgICAgIHwgLiBET1RfRQorKyAgMTgyICAgICAgIHwgLiBET1RfVworKyAgMTgzICAgICAgIHwgLiBET1RfUworKyAgMTg0ICAgICAgIHwgLiBET1RfTkUKKysgIDE4NSAgICAgICB8IC4gRE9UX1NFCisrICAxODYgICAgICAgfCAuIERPVF9OVworKyAgMTg3ICAgICAgIHwgLiBET1RfU1cKKysgIDE4OCAgICAgICB8IC4gRE9UX0MKKysgIDE4OSAgICAgICB8IC4gRE9UX1NUQVJUCisrICAxOTAgICAgICAgfCAuIERPVF9FTkQKKysgIDE5MSAgICAgICB8IC4gVE9QCisrICAxOTIgICAgICAgfCAuIEJPVFRPTQorKyAgMTkzICAgICAgIHwgLiBMRUZUCisrICAxOTQgICAgICAgfCAuIFJJR0hUCisrICAxOTUgICAgICAgfCAuIFVQUEVSIExFRlQKKysgIDE5NiAgICAgICB8IC4gTE9XRVIgTEVGVAorKyAgMTk3ICAgICAgIHwgLiBVUFBFUiBSSUdIVAorKyAgMTk4ICAgICAgIHwgLiBMT1dFUiBSSUdIVAorKyAgMTk5ICAgICAgIHwgLiBMRUZUX0NPUk5FUgorKyAgMjAwICAgICAgIHwgLiBSSUdIVF9DT1JORVIKKysgIDIwMSAgICAgICB8IC4gVVBQRVIgTEVGVF9DT1JORVIKKysgIDIwMiAgICAgICB8IC4gTE9XRVIgTEVGVF9DT1JORVIKKysgIDIwMyAgICAgICB8IC4gVVBQRVIgUklHSFRfQ09STkVSCisrICAyMDQgICAgICAgfCAuIExPV0VSIFJJR0hUX0NPUk5FUgorKyAgMjA1ICAgICAgIHwgLiBOT1JUSAorKyAgMjA2ICAgICAgIHwgLiBTT1VUSAorKyAgMjA3ICAgICAgIHwgLiBFQVNUCisrICAyMDggICAgICAgfCAuIFdFU1QKKysgIDIwOSAgICAgICB8IC4gQ0VOVEVSCisrICAyMTAgICAgICAgfCAuIFNUQVJUCisrICAyMTEgICAgICAgfCAuIEVORAorKyAgMjEyIGV4cHI6IC4gVkFSSUFCTEUKKysgIDIxMyAgICAgfCAuIE5VTUJFUgorKyAgMjE0ICAgICB8IC4gcGxhY2UgRE9UX1gKKysgIDIxNSAgICAgfCAuIHBsYWNlIERPVF9ZCisrICAyMTYgICAgIHwgLiBwbGFjZSBET1RfSFQKKysgIDIxNyAgICAgfCAuIHBsYWNlIERPVF9XSUQKKysgIDIxOCAgICAgfCAuIHBsYWNlIERPVF9SQUQKKysgIDIxOSAgICAgfCAuIGV4cHIgJysnIGV4cHIKKysgIDIyMCAgICAgfCAuIGV4cHIgJy0nIGV4cHIKKysgIDIyMSAgICAgfCAuIGV4cHIgJyonIGV4cHIKKysgIDIyMiAgICAgfCAuIGV4cHIgJy8nIGV4cHIKKysgIDIyMyAgICAgfCAuIGV4cHIgJyUnIGV4cHIKKysgIDIyNCAgICAgfCAuIGV4cHIgJ14nIGV4cHIKKysgIDIyNSAgICAgfCAuICctJyBleHByCisrICAyMjYgICAgIHwgLiAnKCcgYW55X2V4cHIgJyknCisrICAyMjcgICAgIHwgLiBTSU4gJygnIGFueV9leHByICcpJworKyAgMjI4ICAgICB8IC4gQ09TICcoJyBhbnlfZXhwciAnKScKKysgIDIyOSAgICAgfCAuIEFUQU4yICcoJyBhbnlfZXhwciAnLCcgYW55X2V4cHIgJyknCisrICAyMzAgICAgIHwgLiBMT0cgJygnIGFueV9leHByICcpJworKyAgMjMxICAgICB8IC4gRVhQICcoJyBhbnlfZXhwciAnKScKKysgIDIzMiAgICAgfCAuIFNRUlQgJygnIGFueV9leHByICcpJworKyAgMjMzICAgICB8IC4gS19NQVggJygnIGFueV9leHByICcsJyBhbnlfZXhwciAnKScKKysgIDIzNCAgICAgfCAuIEtfTUlOICcoJyBhbnlfZXhwciAnLCcgYW55X2V4cHIgJyknCisrICAyMzUgICAgIHwgLiBJTlQgJygnIGFueV9leHByICcpJworKyAgMjM2ICAgICB8IC4gUkFORCAnKCcgYW55X2V4cHIgJyknCisrICAyMzcgICAgIHwgLiBSQU5EICcoJyAnKScKKysgIDIzOCAgICAgfCAuIFNSQU5EICcoJyBhbnlfZXhwciAnKScKKysgIDIzOSAgICAgfCAuIGV4cHIgJzwnIGV4cHIKKysgIDI0MCAgICAgfCAuIGV4cHIgTEVTU0VRVUFMIGV4cHIKKysgIDI0MSAgICAgfCAuIGV4cHIgJz4nIGV4cHIKKysgIDI0MiAgICAgfCAuIGV4cHIgR1JFQVRFUkVRVUFMIGV4cHIKKysgIDI0MyAgICAgfCAuIGV4cHIgRVFVQUxFUVVBTCBleHByCisrICAyNDQgICAgIHwgLiBleHByIE5PVEVRVUFMIGV4cHIKKysgIDI0NSAgICAgfCAuIGV4cHIgQU5EQU5EIGV4cHIKKysgIDI0NiAgICAgfCAuIGV4cHIgT1JPUiBleHByCisrICAyNDcgICAgIHwgLiAnIScgZXhwcgorKworKyAgICBMQUJFTCAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNDgKKysgICAgVkFSSUFCTEUgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDQ5CisrICAgIE5VTUJFUiAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1MAorKyAgICBPUkRJTkFMICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNTEKKysgICAgTEFTVCAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDUyCisrICAgIExFRlQgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1MworKyAgICBSSUdIVCAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNTQKKysgICAgSEVSRSAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDU1CisrICAgIERPVF9OICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1NgorKyAgICBET1RfRSAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNTcKKysgICAgRE9UX1cgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDU4CisrICAgIERPVF9TICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA1OQorKyAgICBET1RfTkUgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNjAKKysgICAgRE9UX1NFICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDYxCisrICAgIERPVF9OVyAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA2MgorKyAgICBET1RfU1cgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNjMKKysgICAgRE9UX0MgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDY0CisrICAgIERPVF9TVEFSVCAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA2NQorKyAgICBET1RfRU5EICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNjYKKysgICAgU0lOICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDY3CisrICAgIENPUyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA2OAorKyAgICBBVEFOMiAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNjkKKysgICAgTE9HICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDcwCisrICAgIEVYUCAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA3MQorKyAgICBTUVJUICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNzIKKysgICAgS19NQVggICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDczCisrICAgIEtfTUlOICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA3NAorKyAgICBJTlQgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNzUKKysgICAgUkFORCAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDc2CisrICAgIFNSQU5EICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA3NworKyAgICBUT1AgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNzgKKysgICAgQk9UVE9NICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDc5CisrICAgIFVQUEVSICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4MAorKyAgICBMT1dFUiAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgODEKKysgICAgTEVGVF9DT1JORVIgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDgyCisrICAgIFJJR0hUX0NPUk5FUiAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4MworKyAgICBOT1JUSCAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgODQKKysgICAgU09VVEggICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDg1CisrICAgIEVBU1QgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4NgorKyAgICBXRVNUICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgODcKKysgICAgQ0VOVEVSICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDg4CisrICAgIEVORCAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4OQorKyAgICBTVEFSVCAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTAKKysgICAgJygnICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDkxCisrICAgICdcYCcgICAgICAgICAgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgOTIKKysgICAgJy0nICAgICAgICAgICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDkzCisrICAgICchJyAgICAgICAgICAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5NAorKworKyAgICBwb3NpdGlvbiAgICAgICAgICAgICAgIGdvIHRvIHN0YXRlIDQwMgorKyAgICBwb3NpdGlvbl9ub3RfcGxhY2UgICAgIGdvIHRvIHN0YXRlIDk5CisrICAgIGV4cHJfcGFpciAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAwCisrICAgIHBsYWNlICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAxCisrICAgIGxhYmVsICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDIzCisrICAgIG9yZGluYWwgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTAzCisrICAgIG9wdGlvbmFsX29yZGluYWxfbGFzdCAgZ28gdG8gc3RhdGUgMTA0CisrICAgIG50aF9wcmltaXRpdmUgICAgICAgICAgZ28gdG8gc3RhdGUgMTA1CisrICAgIGNvcm5lciAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgMTA2CisrICAgIGV4cHIgICAgICAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNDI0CisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIENhbm9uaWNhbCBMUiBnZW5lcmF0ZXMgdmVyeSBsYXJnZSB0YWJsZXMsIHJlc3VsdGluZyBpbiB2ZXJ5IGxvbmcKKyMgZmlsZXMgd2l0aCAjbGluZSBkaXJlY3RpdmVzIHRoYXQgbWF5IG92ZXJmbG93IHdoYXQgdGhlIHN0YW5kYXJkcworIyAoQzkwIGFuZCBDKys5OCkgZ3VhcmFudGVlOiAzMjc2Ny4gIEluIHRoYXQgY2FzZSwgR0NDJ3MgLXBlZGFudGljCisjIHdpbGwgaXNzdWUgYW4gZXJyb3IuCisjCisjIFRoZXJlIGlzIG5vICIiIGFyb3VuZCBgd2NgIHNpbmNlIHNvbWUgaW5kZW50IHRoZSByZXN1bHQuCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiZXhpc3RpbmcuYXQ6MTQwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyIgImV4aXN0aW5nLmF0OjE0MDMiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzOiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgImV4aXN0aW5nLmF0OjE0MDMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImV4aXN0aW5nLmF0OjE0MDMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjY2CisjQVRfU1RBUlRfMjY3CithdF9mbl9ncm91cF9iYW5uZXIgMjY3ICdleGlzdGluZy5hdDoxNDAzJyBcCisgICJHTlUgcGljIChHcm9mZiAxLjE4LjEpIEdyYW1tYXI6IENhbm9uaWNhbCBMUigxKSIgIiIgMTYKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyNjcuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWNvZGUgeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CisgIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOworfQorCislZGVmaW5lIGxyLnR5cGUgY2Fub25pY2FsLWxyCislZXJyb3ItdmVyYm9zZQorCisldG9rZW4gTEFCRUwKKyV0b2tlbiBWQVJJQUJMRQorJXRva2VuIE5VTUJFUgorJXRva2VuIFRFWFQKKyV0b2tlbiBDT01NQU5EX0xJTkUKKyV0b2tlbiBERUxJTUlURUQKKyV0b2tlbiBPUkRJTkFMCisldG9rZW4gVEgKKyV0b2tlbiBMRUZUX0FSUk9XX0hFQUQKKyV0b2tlbiBSSUdIVF9BUlJPV19IRUFECisldG9rZW4gRE9VQkxFX0FSUk9XX0hFQUQKKyV0b2tlbiBMQVNUCisldG9rZW4gVVAKKyV0b2tlbiBET1dOCisldG9rZW4gTEVGVAorJXRva2VuIFJJR0hUCisldG9rZW4gQk9YCisldG9rZW4gQ0lSQ0xFCisldG9rZW4gRUxMSVBTRQorJXRva2VuIEFSQworJXRva2VuIExJTkUKKyV0b2tlbiBBUlJPVworJXRva2VuIE1PVkUKKyV0b2tlbiBTUExJTkUKKyV0b2tlbiBIRUlHSFQKKyV0b2tlbiBSQURJVVMKKyV0b2tlbiBXSURUSAorJXRva2VuIERJQU1FVEVSCisldG9rZW4gRlJPTQorJXRva2VuIFRPCisldG9rZW4gQVQKKyV0b2tlbiBXSVRICisldG9rZW4gQlkKKyV0b2tlbiBUSEVOCisldG9rZW4gU09MSUQKKyV0b2tlbiBET1RURUQKKyV0b2tlbiBEQVNIRUQKKyV0b2tlbiBDSE9QCisldG9rZW4gU0FNRQorJXRva2VuIElOVklTSUJMRQorJXRva2VuIExKVVNUCisldG9rZW4gUkpVU1QKKyV0b2tlbiBBQk9WRQorJXRva2VuIEJFTE9XCisldG9rZW4gT0YKKyV0b2tlbiBUSEUKKyV0b2tlbiBXQVkKKyV0b2tlbiBCRVRXRUVOCisldG9rZW4gQU5ECisldG9rZW4gSEVSRQorJXRva2VuIERPVF9OCisldG9rZW4gRE9UX0UKKyV0b2tlbiBET1RfVworJXRva2VuIERPVF9TCisldG9rZW4gRE9UX05FCisldG9rZW4gRE9UX1NFCisldG9rZW4gRE9UX05XCisldG9rZW4gRE9UX1NXCisldG9rZW4gRE9UX0MKKyV0b2tlbiBET1RfU1RBUlQKKyV0b2tlbiBET1RfRU5ECisldG9rZW4gRE9UX1gKKyV0b2tlbiBET1RfWQorJXRva2VuIERPVF9IVAorJXRva2VuIERPVF9XSUQKKyV0b2tlbiBET1RfUkFECisldG9rZW4gU0lOCisldG9rZW4gQ09TCisldG9rZW4gQVRBTjIKKyV0b2tlbiBMT0cKKyV0b2tlbiBFWFAKKyV0b2tlbiBTUVJUCisldG9rZW4gS19NQVgKKyV0b2tlbiBLX01JTgorJXRva2VuIElOVAorJXRva2VuIFJBTkQKKyV0b2tlbiBTUkFORAorJXRva2VuIENPUFkKKyV0b2tlbiBUSFJPVUdICisldG9rZW4gVE9QCisldG9rZW4gQk9UVE9NCisldG9rZW4gVVBQRVIKKyV0b2tlbiBMT1dFUgorJXRva2VuIFNICisldG9rZW4gUFJJTlQKKyV0b2tlbiBDVworJXRva2VuIENDVworJXRva2VuIEZPUgorJXRva2VuIERPCisldG9rZW4gSUYKKyV0b2tlbiBFTFNFCisldG9rZW4gQU5EQU5ECisldG9rZW4gT1JPUgorJXRva2VuIE5PVEVRVUFMCisldG9rZW4gRVFVQUxFUVVBTAorJXRva2VuIExFU1NFUVVBTAorJXRva2VuIEdSRUFURVJFUVVBTAorJXRva2VuIExFRlRfQ09STkVSCisldG9rZW4gUklHSFRfQ09STkVSCisldG9rZW4gTk9SVEgKKyV0b2tlbiBTT1VUSAorJXRva2VuIEVBU1QKKyV0b2tlbiBXRVNUCisldG9rZW4gQ0VOVEVSCisldG9rZW4gRU5ECisldG9rZW4gU1RBUlQKKyV0b2tlbiBSRVNFVAorJXRva2VuIFVOVElMCisldG9rZW4gUExPVAorJXRva2VuIFRISUNLTkVTUworJXRva2VuIEZJTEwKKyV0b2tlbiBDT0xPUkVECisldG9rZW4gT1VUTElORUQKKyV0b2tlbiBTSEFERUQKKyV0b2tlbiBBTElHTkVECisldG9rZW4gU1BSSU5URgorJXRva2VuIENPTU1BTkQKKworJWxlZnQgJy4nCisKKy8qIHRoaXMgZW5zdXJlcyB0aGF0IHBsb3QgMTcgIiVnIiBwYXJzZXMgYXMgKHBsb3QgMTcgIiVnIikgKi8KKyVsZWZ0IFBMT1QKKyVsZWZ0IFRFWFQgU1BSSU5URgorCisvKiBnaXZlIHRleHQgYWRqdXN0bWVudHMgaGlnaGVyIHByZWNlZGVuY2UgdGhhbiBURVhULCBzbyB0aGF0Citib3ggImZvbyIgYWJvdmUgbGp1c3QgPT0gYm94ICgiZm9vIiBhYm92ZSBsanVzdCkKKyovCisKKyVsZWZ0IExKVVNUIFJKVVNUIEFCT1ZFIEJFTE9XCisKKyVsZWZ0IExFRlQgUklHSFQKKy8qIEdpdmUgYXR0cmlidXRlcyB0aGF0IHRha2UgYW4gb3B0aW9uYWwgZXhwcmVzc2lvbiBhIGhpZ2hlcgorcHJlY2VkZW5jZSB0aGFuIGxlZnQgYW5kIHJpZ2h0LCBzbyB0aGF0IGVnIGBsaW5lIGNob3AgbGVmdCcKK3BhcnNlcyBwcm9wZXJseS4gKi8KKyVsZWZ0IENIT1AgU09MSUQgREFTSEVEIERPVFRFRCBVUCBET1dOIEZJTEwgQ09MT1JFRCBPVVRMSU5FRAorJWxlZnQgTEFCRUwKKworJWxlZnQgVkFSSUFCTEUgTlVNQkVSICcoJyBTSU4gQ09TIEFUQU4yIExPRyBFWFAgU1FSVCBLX01BWCBLX01JTiBJTlQgUkFORCBTUkFORCBMQVNUCislbGVmdCBPUkRJTkFMIEhFUkUgJ2AnCisKKyVsZWZ0IEJPWCBDSVJDTEUgRUxMSVBTRSBBUkMgTElORSBBUlJPVyBTUExJTkUgJ1snIC8qIF0gKi8KKworLyogdGhlc2UgbmVlZCB0byBiZSBsb3dlciB0aGFuICctJyAqLworJWxlZnQgSEVJR0hUIFJBRElVUyBXSURUSCBESUFNRVRFUiBGUk9NIFRPIEFUIFRISUNLTkVTUworCisvKiB0aGVzZSBtdXN0IGhhdmUgaGlnaGVyIHByZWNlZGVuY2UgdGhhbiBDSE9QIHNvIHRoYXQgYGxhYmVsICVwcmVjIENIT1AnCit3b3JrcyAqLworJWxlZnQgRE9UX04gRE9UX0UgRE9UX1cgRE9UX1MgRE9UX05FIERPVF9TRSBET1RfTlcgRE9UX1NXIERPVF9DCislbGVmdCBET1RfU1RBUlQgRE9UX0VORCBUT1AgQk9UVE9NIExFRlRfQ09STkVSIFJJR0hUX0NPUk5FUgorJWxlZnQgVVBQRVIgTE9XRVIgTk9SVEggU09VVEggRUFTVCBXRVNUIENFTlRFUiBTVEFSVCBFTkQKKworJWxlZnQgJywnCislbGVmdCBPUk9SCislbGVmdCBBTkRBTkQKKyVsZWZ0IEVRVUFMRVFVQUwgTk9URVFVQUwKKyVsZWZ0ICc8JyAnPicgTEVTU0VRVUFMIEdSRUFURVJFUVVBTAorCislbGVmdCBCRVRXRUVOIE9GCislbGVmdCBBTkQKKworJWxlZnQgJysnICctJworJWxlZnQgJyonICcvJyAnJScKKyVyaWdodCAnIScKKyVyaWdodCAnXicKKworCislJQorCisKK3RvcDoKKwlvcHRpb25hbF9zZXBhcmF0b3IKKwl8IGVsZW1lbnRfbGlzdAorCTsKKworZWxlbWVudF9saXN0OgorCW9wdGlvbmFsX3NlcGFyYXRvciBtaWRkbGVfZWxlbWVudF9saXN0IG9wdGlvbmFsX3NlcGFyYXRvcgorCTsKKworbWlkZGxlX2VsZW1lbnRfbGlzdDoKKwllbGVtZW50CisJfCBtaWRkbGVfZWxlbWVudF9saXN0IHNlcGFyYXRvciBlbGVtZW50CisJOworCitvcHRpb25hbF9zZXBhcmF0b3I6CisJLyogZW1wdHkgKi8KKwl8IHNlcGFyYXRvcgorCTsKKworc2VwYXJhdG9yOgorCSc7JworCXwgc2VwYXJhdG9yICc7JworCTsKKworcGxhY2VsZXNzX2VsZW1lbnQ6CisJVkFSSUFCTEUgJz0nIGFueV9leHByCisJfCBWQVJJQUJMRSAnOicgJz0nIGFueV9leHByCisJfCBVUAorCXwgRE9XTgorCXwgTEVGVAorCXwgUklHSFQKKwl8IENPTU1BTkRfTElORQorCXwgQ09NTUFORCBwcmludF9hcmdzCisJfCBQUklOVCBwcmludF9hcmdzCisJfCBTSAorCQl7fQorCSAgREVMSU1JVEVECisJfCBDT1BZIFRFWFQKKwl8IENPUFkgVEVYVCBUSFJPVUdICisJCXt9CisJICBERUxJTUlURUQKKwkJe30KKwkgIHVudGlsCisJfCBDT1BZIFRIUk9VR0gKKwkJe30KKwkgIERFTElNSVRFRAorCQl7fQorCSAgdW50aWwKKwl8IEZPUiBWQVJJQUJMRSAnPScgZXhwciBUTyBleHByIG9wdGlvbmFsX2J5IERPCisJCXt9CisJICBERUxJTUlURUQKKwl8IHNpbXBsZV9pZgorCXwgc2ltcGxlX2lmIEVMU0UKKwkJe30KKwkgIERFTElNSVRFRAorCXwgcmVzZXRfdmFyaWFibGVzCisJfCBSRVNFVAorCTsKKworcmVzZXRfdmFyaWFibGVzOgorCVJFU0VUIFZBUklBQkxFCisJfCByZXNldF92YXJpYWJsZXMgVkFSSUFCTEUKKwl8IHJlc2V0X3ZhcmlhYmxlcyAnLCcgVkFSSUFCTEUKKwk7CisKK3ByaW50X2FyZ3M6CisJcHJpbnRfYXJnCisJfCBwcmludF9hcmdzIHByaW50X2FyZworCTsKKworcHJpbnRfYXJnOgorCWV4cHIJCQkJCQkJJXByZWMgJywnCisJfCB0ZXh0CisJfCBwb3NpdGlvbgkJCQkJCSVwcmVjICcsJworCTsKKworc2ltcGxlX2lmOgorCUlGIGFueV9leHByIFRIRU4KKwkJe30KKwlERUxJTUlURUQKKwk7CisKK3VudGlsOgorCS8qIGVtcHR5ICovCisJfCBVTlRJTCBURVhUCisJOworCithbnlfZXhwcjoKKwlleHByCisJfCB0ZXh0X2V4cHIKKwk7CisKK3RleHRfZXhwcjoKKwl0ZXh0IEVRVUFMRVFVQUwgdGV4dAorCXwgdGV4dCBOT1RFUVVBTCB0ZXh0CisJfCB0ZXh0X2V4cHIgQU5EQU5EIHRleHRfZXhwcgorCXwgdGV4dF9leHByIEFOREFORCBleHByCisJfCBleHByIEFOREFORCB0ZXh0X2V4cHIKKwl8IHRleHRfZXhwciBPUk9SIHRleHRfZXhwcgorCXwgdGV4dF9leHByIE9ST1IgZXhwcgorCXwgZXhwciBPUk9SIHRleHRfZXhwcgorCXwgJyEnIHRleHRfZXhwcgorCTsKKworb3B0aW9uYWxfYnk6CisJLyogZW1wdHkgKi8KKwl8IEJZIGV4cHIKKwl8IEJZICcqJyBleHByCisJOworCitlbGVtZW50OgorCW9iamVjdF9zcGVjCisJfCBMQUJFTCAnOicgb3B0aW9uYWxfc2VwYXJhdG9yIGVsZW1lbnQKKwl8IExBQkVMICc6JyBvcHRpb25hbF9zZXBhcmF0b3IgcG9zaXRpb25fbm90X3BsYWNlCisJfCBMQUJFTCAnOicgb3B0aW9uYWxfc2VwYXJhdG9yIHBsYWNlCisJfCAneycge30gZWxlbWVudF9saXN0ICd9JworCQl7fQorCSAgb3B0aW9uYWxfZWxlbWVudAorCXwgcGxhY2VsZXNzX2VsZW1lbnQKKwk7CisKK29wdGlvbmFsX2VsZW1lbnQ6CisJLyogZW1wdHkgKi8KKwl8IGVsZW1lbnQKKwk7CisKK29iamVjdF9zcGVjOgorCUJPWAorCXwgQ0lSQ0xFCisJfCBFTExJUFNFCisJfCBBUkMKKwl8IExJTkUKKwl8IEFSUk9XCisJfCBNT1ZFCisJfCBTUExJTkUKKwl8IHRleHQJCQkJCQkJJXByZWMgVEVYVAorCXwgUExPVCBleHByCisJfCBQTE9UIGV4cHIgdGV4dAorCXwgJ1snCisJCXt9CisJICBlbGVtZW50X2xpc3QgJ10nCisJfCBvYmplY3Rfc3BlYyBIRUlHSFQgZXhwcgorCXwgb2JqZWN0X3NwZWMgUkFESVVTIGV4cHIKKwl8IG9iamVjdF9zcGVjIFdJRFRIIGV4cHIKKwl8IG9iamVjdF9zcGVjIERJQU1FVEVSIGV4cHIKKwl8IG9iamVjdF9zcGVjIGV4cHIJCQkJCSVwcmVjIEhFSUdIVAorCXwgb2JqZWN0X3NwZWMgVVAKKwl8IG9iamVjdF9zcGVjIFVQIGV4cHIKKwl8IG9iamVjdF9zcGVjIERPV04KKwl8IG9iamVjdF9zcGVjIERPV04gZXhwcgorCXwgb2JqZWN0X3NwZWMgUklHSFQKKwl8IG9iamVjdF9zcGVjIFJJR0hUIGV4cHIKKwl8IG9iamVjdF9zcGVjIExFRlQKKwl8IG9iamVjdF9zcGVjIExFRlQgZXhwcgorCXwgb2JqZWN0X3NwZWMgRlJPTSBwb3NpdGlvbgorCXwgb2JqZWN0X3NwZWMgVE8gcG9zaXRpb24KKwl8IG9iamVjdF9zcGVjIEFUIHBvc2l0aW9uCisJfCBvYmplY3Rfc3BlYyBXSVRIIHBhdGgKKwl8IG9iamVjdF9zcGVjIFdJVEggcG9zaXRpb24JCQkJJXByZWMgJywnCisJfCBvYmplY3Rfc3BlYyBCWSBleHByX3BhaXIKKwl8IG9iamVjdF9zcGVjIFRIRU4KKwl8IG9iamVjdF9zcGVjIFNPTElECisJfCBvYmplY3Rfc3BlYyBET1RURUQKKwl8IG9iamVjdF9zcGVjIERPVFRFRCBleHByCisJfCBvYmplY3Rfc3BlYyBEQVNIRUQKKwl8IG9iamVjdF9zcGVjIERBU0hFRCBleHByCisJfCBvYmplY3Rfc3BlYyBGSUxMCisJfCBvYmplY3Rfc3BlYyBGSUxMIGV4cHIKKwl8IG9iamVjdF9zcGVjIFNIQURFRCB0ZXh0CisJfCBvYmplY3Rfc3BlYyBDT0xPUkVEIHRleHQKKwl8IG9iamVjdF9zcGVjIE9VVExJTkVEIHRleHQKKwl8IG9iamVjdF9zcGVjIENIT1AKKwl8IG9iamVjdF9zcGVjIENIT1AgZXhwcgorCXwgb2JqZWN0X3NwZWMgU0FNRQorCXwgb2JqZWN0X3NwZWMgSU5WSVNJQkxFCisJfCBvYmplY3Rfc3BlYyBMRUZUX0FSUk9XX0hFQUQKKwl8IG9iamVjdF9zcGVjIFJJR0hUX0FSUk9XX0hFQUQKKwl8IG9iamVjdF9zcGVjIERPVUJMRV9BUlJPV19IRUFECisJfCBvYmplY3Rfc3BlYyBDVworCXwgb2JqZWN0X3NwZWMgQ0NXCisJfCBvYmplY3Rfc3BlYyB0ZXh0CQkJCQklcHJlYyBURVhUCisJfCBvYmplY3Rfc3BlYyBMSlVTVAorCXwgb2JqZWN0X3NwZWMgUkpVU1QKKwl8IG9iamVjdF9zcGVjIEFCT1ZFCisJfCBvYmplY3Rfc3BlYyBCRUxPVworCXwgb2JqZWN0X3NwZWMgVEhJQ0tORVNTIGV4cHIKKwl8IG9iamVjdF9zcGVjIEFMSUdORUQKKwk7CisKK3RleHQ6CisJVEVYVAorCXwgU1BSSU5URiAnKCcgVEVYVCBzcHJpbnRmX2FyZ3MgJyknCisJOworCitzcHJpbnRmX2FyZ3M6CisJLyogZW1wdHkgKi8KKwl8IHNwcmludGZfYXJncyAnLCcgZXhwcgorCTsKKworcG9zaXRpb246CisJcG9zaXRpb25fbm90X3BsYWNlCisJfCBwbGFjZQorCTsKKworcG9zaXRpb25fbm90X3BsYWNlOgorCWV4cHJfcGFpcgorCXwgcG9zaXRpb24gJysnIGV4cHJfcGFpcgorCXwgcG9zaXRpb24gJy0nIGV4cHJfcGFpcgorCXwgJygnIHBvc2l0aW9uICcsJyBwb3NpdGlvbiAnKScKKwl8IGV4cHIgYmV0d2VlbiBwb3NpdGlvbiBBTkQgcG9zaXRpb24KKwl8IGV4cHIgJzwnIHBvc2l0aW9uICcsJyBwb3NpdGlvbiAnPicKKwk7CisKK2JldHdlZW46CisJQkVUV0VFTgorCXwgT0YgVEhFIFdBWSBCRVRXRUVOCisJOworCitleHByX3BhaXI6CisJZXhwciAnLCcgZXhwcgorCXwgJygnIGV4cHJfcGFpciAnKScKKwk7CisKK3BsYWNlOgorCS8qIGxpbmUgYXQgQSBsZWZ0ID09IGxpbmUgKGF0IEEpIGxlZnQgKi8KKwlsYWJlbAkJCQkJCQklcHJlYyBDSE9QCisJfCBsYWJlbCBjb3JuZXIKKwl8IGNvcm5lciBsYWJlbAorCXwgY29ybmVyIE9GIGxhYmVsCisJfCBIRVJFCisJOworCitsYWJlbDoKKwlMQUJFTAorCXwgbnRoX3ByaW1pdGl2ZQorCXwgbGFiZWwgJy4nIExBQkVMCisJOworCitvcmRpbmFsOgorCU9SRElOQUwKKwl8ICdgJyBhbnlfZXhwciBUSAorCTsKKworb3B0aW9uYWxfb3JkaW5hbF9sYXN0OgorCUxBU1QKKwl8IG9yZGluYWwgTEFTVAorCTsKKworbnRoX3ByaW1pdGl2ZToKKwlvcmRpbmFsIG9iamVjdF90eXBlCisJfCBvcHRpb25hbF9vcmRpbmFsX2xhc3Qgb2JqZWN0X3R5cGUKKwk7CisKK29iamVjdF90eXBlOgorCUJPWAorCXwgQ0lSQ0xFCisJfCBFTExJUFNFCisJfCBBUkMKKwl8IExJTkUKKwl8IEFSUk9XCisJfCBTUExJTkUKKwl8ICdbJyAnXScKKwl8IFRFWFQKKwk7CisKK2xhYmVsX3BhdGg6CisJJy4nIExBQkVMCisJfCBsYWJlbF9wYXRoICcuJyBMQUJFTAorCTsKKworcmVsYXRpdmVfcGF0aDoKKwljb3JuZXIJCQkJCQkJJXByZWMgQ0hPUAorCS8qIGdpdmUgdGhpcyBhIGxvd2VyIHByZWNlZGVuY2UgdGhhbiBMRUZUIGFuZCBSSUdIVCBzbyB0aGF0CisJICAgW0E6IGJveF0gd2l0aCAuQSBsZWZ0ID09IFtBOiBib3hdIHdpdGggKC5BIGxlZnQpICovCisJfCBsYWJlbF9wYXRoCQkJCQkJJXByZWMgVEVYVAorCXwgbGFiZWxfcGF0aCBjb3JuZXIKKwk7CisKK3BhdGg6CisJcmVsYXRpdmVfcGF0aAorCXwgJygnIHJlbGF0aXZlX3BhdGggJywnIHJlbGF0aXZlX3BhdGggJyknCisJCXt9CisJLyogVGhlIHJlc3Qgb2YgdGhlc2UgcnVsZXMgYXJlIGEgY29tcGF0aWJpbGl0eSBzb3AuICovCisJfCBPUkRJTkFMIExBU1Qgb2JqZWN0X3R5cGUgcmVsYXRpdmVfcGF0aAorCXwgTEFTVCBvYmplY3RfdHlwZSByZWxhdGl2ZV9wYXRoCisJfCBPUkRJTkFMIG9iamVjdF90eXBlIHJlbGF0aXZlX3BhdGgKKwl8IExBQkVMIHJlbGF0aXZlX3BhdGgKKwk7CisKK2Nvcm5lcjoKKwlET1RfTgorCXwgRE9UX0UKKwl8IERPVF9XCisJfCBET1RfUworCXwgRE9UX05FCisJfCBET1RfU0UKKwl8IERPVF9OVworCXwgRE9UX1NXCisJfCBET1RfQworCXwgRE9UX1NUQVJUCisJfCBET1RfRU5ECisJfCBUT1AKKwl8IEJPVFRPTQorCXwgTEVGVAorCXwgUklHSFQKKwl8IFVQUEVSIExFRlQKKwl8IExPV0VSIExFRlQKKwl8IFVQUEVSIFJJR0hUCisJfCBMT1dFUiBSSUdIVAorCXwgTEVGVF9DT1JORVIKKwl8IFJJR0hUX0NPUk5FUgorCXwgVVBQRVIgTEVGVF9DT1JORVIKKwl8IExPV0VSIExFRlRfQ09STkVSCisJfCBVUFBFUiBSSUdIVF9DT1JORVIKKwl8IExPV0VSIFJJR0hUX0NPUk5FUgorCXwgTk9SVEgKKwl8IFNPVVRICisJfCBFQVNUCisJfCBXRVNUCisJfCBDRU5URVIKKwl8IFNUQVJUCisJfCBFTkQKKwk7CisKK2V4cHI6CisJVkFSSUFCTEUKKwl8IE5VTUJFUgorCXwgcGxhY2UgRE9UX1gKKwl8IHBsYWNlIERPVF9ZCisJfCBwbGFjZSBET1RfSFQKKwl8IHBsYWNlIERPVF9XSUQKKwl8IHBsYWNlIERPVF9SQUQKKwl8IGV4cHIgJysnIGV4cHIKKwl8IGV4cHIgJy0nIGV4cHIKKwl8IGV4cHIgJyonIGV4cHIKKwl8IGV4cHIgJy8nIGV4cHIKKwl8IGV4cHIgJyUnIGV4cHIKKwl8IGV4cHIgJ14nIGV4cHIKKwl8ICctJyBleHByCQkJCQkJJXByZWMgJyEnCisJfCAnKCcgYW55X2V4cHIgJyknCisJfCBTSU4gJygnIGFueV9leHByICcpJworCXwgQ09TICcoJyBhbnlfZXhwciAnKScKKwl8IEFUQU4yICcoJyBhbnlfZXhwciAnLCcgYW55X2V4cHIgJyknCisJfCBMT0cgJygnIGFueV9leHByICcpJworCXwgRVhQICcoJyBhbnlfZXhwciAnKScKKwl8IFNRUlQgJygnIGFueV9leHByICcpJworCXwgS19NQVggJygnIGFueV9leHByICcsJyBhbnlfZXhwciAnKScKKwl8IEtfTUlOICcoJyBhbnlfZXhwciAnLCcgYW55X2V4cHIgJyknCisJfCBJTlQgJygnIGFueV9leHByICcpJworCXwgUkFORCAnKCcgYW55X2V4cHIgJyknCisJfCBSQU5EICcoJyAnKScKKwl8IFNSQU5EICcoJyBhbnlfZXhwciAnKScKKwl8IGV4cHIgJzwnIGV4cHIKKwl8IGV4cHIgTEVTU0VRVUFMIGV4cHIKKwl8IGV4cHIgJz4nIGV4cHIKKwl8IGV4cHIgR1JFQVRFUkVRVUFMIGV4cHIKKwl8IGV4cHIgRVFVQUxFUVVBTCBleHByCisJfCBleHByIE5PVEVRVUFMIGV4cHIKKwl8IGV4cHIgQU5EQU5EIGV4cHIKKwl8IGV4cHIgT1JPUiBleHByCisJfCAnIScgZXhwcgorCTsKKworCislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KK3N0YXRpYyBpbnQKK3l5bGV4ICh2b2lkKQoreworICBzdGF0aWMgaW50IGNvbnN0IGlucHV0W10gPSB7CisgICAgVkFSSUFCTEUsICc9JywgTEFCRUwsIExFRlQsIERPVF9YLCAwCisgIH07CisgIHN0YXRpYyBpbnQgY29uc3QgKmlucHV0cCA9IGlucHV0OworICByZXR1cm4gKmlucHV0cCsrOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCisjIEluIHNvbWUgdmVyc2lvbnMgb2YgQXV0b2NvbmYsIEFUX0NIRUNLIGludm9rZXMgQVNfRVNDQVBFIGJlZm9yZQorIyBleHBhbmRpbmcgbWFjcm9zLCBzbyBpdCBjb3JydXB0cyBzb21lIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUKKyMgbWFjcm9zLiAgVG8gYXZvaWQgdGhpcywgZXhwYW5kIG5vdyBhbmQgcGFzcyBpdCB0aGUgcmVzdWx0IHdpdGggcHJvcGVyCisjIHN0cmluZyBxdW90YXRpb24uICBBc3N1bWUgYXJncyA3IHRocm91Z2ggMTIgZXhwYW5kIHRvIHByb3Blcmx5IHF1b3RlZAorIyBzdHJpbmdzLgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMzogYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJleGlzdGluZy5hdDoxNDAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueTo0NzAuMTEtNDg6IHdhcm5pbmc6IHJ1bGUgdXNlbGVzcyBpbiBwYXJzZXIgZHVlIHRvIGNvbmZsaWN0czogcGF0aDogT1JESU5BTCBMQVNUIG9iamVjdF90eXBlIHJlbGF0aXZlX3BhdGgKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisjIERlZmluaW5nIFBPU0lYTFlfQ09SUkVDVCBjYXVzZXMgYmlzb24gdG8gY29tcGxhaW4gaWYgb3B0aW9ucyBhcmUKKyMgYWRkZWQgYWZ0ZXIgdGhlIGdyYW1tYXIgZmlsZSBuYW1lLCBzbyBza2lwIHRoZXNlIGNoZWNrcyBpbiB0aGF0CisjIGNhc2UuCitpZiB0ZXN0ICIkUE9TSVhMWV9DT1JSRUNUX0lTX0VYUE9SVEVEIiA9IGZhbHNlOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworCisgICMgVG8gYXZvaWQgZXhwYW5kaW5nIGl0IHJlcGVhdGVkbHksIHN0b3JlIHNwZWNpZmllZCBzdGRvdXQuCisgIDogPmV4cG91dAorCisgICMgUnVuIHdpdGggLVdlcnJvci4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IC1XZXJyb3IiICJleGlzdGluZy5hdDoxNDAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIEJ1aWxkIGV4cGVjdGVkIHN0ZGVyciB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSAid2FybmluZ3MgYmVpbmcKKyAgIyB0cmVhdGVkIGFzIGVycm9ycyIgbWVzc2FnZS4KKyAgY2F0ID5hdC1iaXNvbi1jaGVjay13YXJuaW5ncyA8PCdfQVRFT0YnCitpbnB1dC55OjQ3MC4xMS00ODogd2FybmluZzogcnVsZSB1c2VsZXNzIGluIHBhcnNlciBkdWUgdG8gY29uZmxpY3RzOiBwYXRoOiBPUkRJTkFMIExBU1Qgb2JqZWN0X3R5cGUgcmVsYXRpdmVfcGF0aAorX0FURU9GCisKKyAgYXRfYmlzb25fY2hlY2tfZmlyc3Q9YHNlZCAtbiBcCisgICAgJy86IHdhcm5pbmc6IC97PTtxO30nIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzYAorICA6ICR7YXRfYmlzb25fY2hlY2tfZmlyc3Q6PTF9CisgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcD1gc2VkIC1uIFwKKyAgICAnL2NvbmZsaWN0czogWzAtOV0uKnJlZHVjZSQvez07cTt9JyBhdC1iaXNvbi1jaGVjay13YXJuaW5nc2AKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcDo9MX0KKyAgaWYgdGVzdCAkYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wIC1sdCAkYXRfYmlzb25fY2hlY2tfZmlyc3Q7IHRoZW4KKyAgICBhdF9iaXNvbl9jaGVja19maXJzdD0kYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wCisgIGZpCisgIGlmIHRlc3QgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0IC1ndCAxOyB0aGVuCisgICAgc2VkIC1uICIxLGBleHByICRhdF9iaXNvbl9jaGVja19maXJzdCAtIDFgInAgXAorICAgICAgYXQtYmlzb24tY2hlY2std2FybmluZ3MgPiBleHBlcnIKKyAgZmkKKyAgZWNobyAnYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzJyA+PiBleHBlcnIKKworICAjIEZpbmlzaCBidWlsZGluZyBleHBlY3RlZCBzdGRlcnIgYW5kIGNoZWNrLiAgVW5saWtlIHdhcm5pbmdzLAorICAjIGNvbXBsYWludHMgY2F1c2UgYmlzb24gdG8gZXhpdCBlYXJseS4gIFRodXMsIHdpdGggLVdlcnJvciwgYmlzb24KKyAgIyBkb2VzIG5vdCBuZWNlc3NhcmlseSByZXBvcnQgYWxsIHdhcm5pbmdzIHRoYXQgaXQgZG9lcyB3aXRob3V0CisgICMgLVdlcnJvciwgYnV0IGl0IGF0IGxlYXN0IHJlcG9ydHMgb25lLgorICBhdF9iaXNvbl9jaGVja19sYXN0PWBzZWQgLW4gJyQ9JyBzdGRlcnJgCisgIDogJHthdF9iaXNvbl9jaGVja19sYXN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19sYXN0PWBleHByICRhdF9iaXNvbl9jaGVja19sYXN0IC0gMWAKKyAgc2VkIC1uICIkYXRfYmlzb25fY2hlY2tfZmlyc3QsJGF0X2Jpc29uX2NoZWNrX2xhc3QicCBcCisgICAgYXQtYmlzb24tY2hlY2std2FybmluZ3MgPj4gZXhwZXJyCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzOiBzZWQgJ3MsLiovXFwoYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzXFwpXCQsXFwxLCcgXFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJleGlzdGluZy5hdDoxNDAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAncywuKi9cKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1wpJCxcMSwnIFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIE5vdyBjaGVjayAtLXdhcm5pbmdzPWVycm9yLgorICBjcCBzdGRlcnIgZXhwZXJyCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yIiAiZXhpc3RpbmcuYXQ6MTQwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIE5vdyBjaGVjayAtV25vbmUgYW5kIC0td2FybmluZ3M9bm9uZSBieSBtYWtpbmcgc3VyZSB0aGF0CisgICMgLVdlcnJvciBkb2Vzbid0IGNoYW5nZSB0aGUgZXhpdCBzdGF0dXMgd2hlbiAtV25vbmUgb3IKKyAgIyAtLXdhcm5pbmdzPW5vbmUgaXMgc3BlY2lmaWVkLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1kZWZpbmVzIC1vIGlucHV0LmMgaW5wdXQueSAtV25vbmUgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIiAiZXhpc3RpbmcuYXQ6MTQwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLWRlZmluZXMgLW8gaW5wdXQuYyBpbnB1dC55IC0td2FybmluZ3M9bm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiICJleGlzdGluZy5hdDoxNDAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tZGVmaW5lcyAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzOiBzZWQgLW4gJ3MvXlN0YXRlIC8vcCcgaW5wdXQub3V0cHV0IHwgdGFpbCAtMSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBzaGVsbCBwaXBlbGluZScgImV4aXN0aW5nLmF0OjE0MDMiCisoICRhdF9jaGVja190cmFjZTsgc2VkIC1uICdzL15TdGF0ZSAvL3AnIGlucHV0Lm91dHB1dCB8IHRhaWwgLTEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICI0ODMzCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworIyBDYW5vbmljYWwgTFIgZ2VuZXJhdGVzIHZlcnkgbGFyZ2UgdGFibGVzLCByZXN1bHRpbmcgaW4gdmVyeSBsb25nCisjIGZpbGVzIHdpdGggI2xpbmUgZGlyZWN0aXZlcyB0aGF0IG1heSBvdmVyZmxvdyB3aGF0IHRoZSBzdGFuZGFyZHMKKyMgKEM5MCBhbmQgQysrOTgpIGd1YXJhbnRlZTogMzI3NjcuICBJbiB0aGF0IGNhc2UsIEdDQydzIC1wZWRhbnRpYworIyB3aWxsIGlzc3VlIGFuIGVycm9yLgorIworIyBUaGVyZSBpcyBubyAiIiBhcm91bmQgYHdjYCBzaW5jZSBzb21lIGluZGVudCB0aGUgcmVzdWx0LgoraWYgdGVzdCAzMjc2NyAtbHQgYHdjIC1sIDwgaW5wdXQuY2A7IHRoZW4KKyAgQ0ZMQUdTPWBlY2hvICIgJENGTEFHUyAiIHwgc2VkIC1lICdzLyAtcGVkYW50aWMgLy8nYAorICBDWFhGTEFHUz1gZWNobyAiICRDWFhGTEFHUyAiIHwgc2VkIC1lICdzLyAtcGVkYW50aWMgLy8nYAorZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiZXhpc3RpbmcuYXQ6MTQwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyIgImV4aXN0aW5nLmF0OjE0MDMiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2V4aXN0aW5nLmF0OjE0MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzOiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgImV4aXN0aW5nLmF0OjE0MDMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9leGlzdGluZy5hdDoxNDAzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImV4aXN0aW5nLmF0OjE0MDMiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZXhpc3RpbmcuYXQ6MTQwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjY3CisjQVRfU1RBUlRfMjY4CithdF9mbl9ncm91cF9iYW5uZXIgMjY4ICdyZWdyZXNzaW9uLmF0OjI1JyBcCisgICJUcml2aWFsIGdyYW1tYXJzIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgMTcKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyNjguICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCiAlewotdm9pZCB5eWVycm9yIChjaGFyIGNvbnN0ICopOwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKIGludCB5eWxleCAodm9pZCk7CiAjZGVmaW5lIFlZU1RZUEUgaW50ICoKICV9CkBAIC01NjU4MCwxMTQgKzEzOTc3MCwzMjggQEAKIAogCiAKLSRhdF90cmFjZW9mZgotZWNobyAicmVncmVzc2lvbi5hdDo0NDogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgotZWNobyByZWdyZXNzaW9uLmF0OjQ0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAicmVncmVzc2lvbi5hdDo0NDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0MzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZ3Jlc3Npb24uYXQ6NDMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjQzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0MzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgInJlZ3Jlc3Npb24uYXQ6NDMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjQzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NDM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjQzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjQzOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVncmVzc2lvbi5hdDo0MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjQzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0MzogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVncmVzc2lvbi5hdDo0MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSRhdF90cmFjZW9mZgotZWNobyAicmVncmVzc2lvbi5hdDo0NTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIC1vIGlucHV0Lm8gLWMgaW5wdXQuYyIKLWVjaG8gcmVncmVzc2lvbi5hdDo0NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTIC1vIGlucHV0Lm8gLWMgaW5wdXQuYyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJyZWdyZXNzaW9uLmF0OjQ1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0NDogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgInJlZ3Jlc3Npb24uYXQ6NDQiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjQ0OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgLWMgLW8gaW5wdXQubyBpbnB1dC5jICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTIC1jIC1vIGlucHV0Lm8gaW5wdXQuYyAiICJyZWdyZXNzaW9uLmF0OjQ0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyAtbyBpbnB1dC5vIGlucHV0LmMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0NTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgInJlZ3Jlc3Npb24uYXQ6NDUiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0NTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIC1jIC1vIGlucHV0Lm8gLURZWURFQlVHIC1jIGlucHV0LmMgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgLW8gaW5wdXQubyAtRFlZREVCVUcgLWMgaW5wdXQuYyAiICJyZWdyZXNzaW9uLmF0OjQ1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyAtbyBpbnB1dC5vIC1EWVlERUJVRyAtYyBpbnB1dC5jCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjQ1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzI2OAorI0FUX1NUQVJUXzI2OQorYXRfZm5fZ3JvdXBfYmFubmVyIDI2OSAncmVncmVzc2lvbi5hdDo1NScgXAorICAiWVlTVFlQRSB0eXBlZGVmIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDE3CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjY5LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJXsKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CitpbnQgeXlsZXggKHZvaWQpOwordHlwZWRlZiB1bmlvbiB7IGNoYXIgY29uc3QgKnZhbDsgfSBZWVNUWVBFOworJX0KKworJXR5cGUgPHZhbD4gcHJvZ3JhbQorCislJQorCitwcm9ncmFtOiB7ICQkID0gIiI7IH07CitfQVRFT0YKKworCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjczOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVncmVzc2lvbi5hdDo3MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NzMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjczOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IiAicmVncmVzc2lvbi5hdDo3MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NzMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo3MzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZ3Jlc3Npb24uYXQ6NzMiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo3MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NzM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjczIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NzMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKLQotJGF0X3RyYWNlb24KLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJyZWdyZXNzaW9uLmF0OjQ2OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgLW8gaW5wdXQubyAtRFlZREVCVUcgLWMgaW5wdXQuYyIKLWVjaG8gcmVncmVzc2lvbi5hdDo0NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTIC1vIGlucHV0Lm8gLURZWURFQlVHIC1jIGlucHV0LmMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAicmVncmVzc2lvbi5hdDo0NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo3MzogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVncmVzc2lvbi5hdDo3MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo3MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Cit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo3NDogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgInJlZ3Jlc3Npb24uYXQ6NzQiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIDExNCApICMgMTE0LiByZWdyZXNzaW9uLmF0OjU3OiBFYXJseSB0b2tlbiBkZWZpbml0aW9ucwotICAgIGF0X3NldHVwX2xpbmU9J3JlZ3Jlc3Npb24uYXQ6NTcnCi0gICAgYXRfZGVzYz0nRWFybHkgdG9rZW4gZGVmaW5pdGlvbnMnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjExNDogRWFybHkgdG9rZW4gZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjExNC4gcmVncmVzc2lvbi5hdDo1NzogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NzQ6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyAtYyAtbyBpbnB1dC5vIGlucHV0LmMgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgLW8gaW5wdXQubyBpbnB1dC5jICIgInJlZ3Jlc3Npb24uYXQ6NzQiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTIC1jIC1vIGlucHV0Lm8gaW5wdXQuYworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo3NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yNjkKKyNBVF9TVEFSVF8yNzAKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyNzAgJ3JlZ3Jlc3Npb24uYXQ6ODUnIFwKKyAgIkVhcmx5IHRva2VuIGRlZmluaXRpb25zIHdpdGggLS15YWNjIiAiICAgICAgICAgICAgIiAxNworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI3MC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKICMgRm91bmQgaW4gR0NKOiB0aGV5IGV4cGVjdCB0aGUgdG9rZW5zIHRvIGJlIGRlZmluZWQgYmVmb3JlIHRoZSB1c2VyCiAjIHByb2xvZ3VlLCBzbyB0aGF0IHRoZXkgY2FuIHVzZSB0aGUgdG9rZW4gZGVmaW5pdGlvbnMgaW4gaXQuCiAKKwogY2F0ID5pbnB1dC55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogJXsKLXZvaWQgeXllcnJvciAoY29uc3QgY2hhciAqcyk7Cit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOwogaW50IHl5bGV4ICh2b2lkKTsKICV9CiAKQEAgLTU2NzA4LDc1ICsxNDAxMTIsMzA1IEBACiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInJlZ3Jlc3Npb24uYXQ6ODM6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKLWVjaG8gcmVncmVzc2lvbi5hdDo4MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInJlZ3Jlc3Npb24uYXQ6ODM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTEzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLXkgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVncmVzc2lvbi5hdDoxMTMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLXkgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjExMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTEzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAteSAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLXkgLW8gaW5wdXQuYyBpbnB1dC55IiAicmVncmVzc2lvbi5hdDoxMTMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLXkgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjExMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjExMzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZ3Jlc3Npb24uYXQ6MTEzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTEzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMTM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjExMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjExMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gInJlZ3Jlc3Npb24uYXQ6ODQ6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyAtbyBpbnB1dC5vIC1jIGlucHV0LmMiCi1lY2hvIHJlZ3Jlc3Npb24uYXQ6ODQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtbyBpbnB1dC5vIC1jIGlucHV0LmMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAicmVncmVzc2lvbi5hdDo4NDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMTM6IGJpc29uIC15IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZ3Jlc3Npb24uYXQ6MTEzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC15IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjExMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Cit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMTQ6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJyZWdyZXNzaW9uLmF0OjExNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIDExNSApICMgMTE1LiByZWdyZXNzaW9uLmF0Ojk1OiBCcmFjZXMgcGFyc2luZwotICAgIGF0X3NldHVwX2xpbmU9J3JlZ3Jlc3Npb24uYXQ6OTUnCi0gICAgYXRfZGVzYz0nQnJhY2VzIHBhcnNpbmcnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjExNTogQnJhY2VzIHBhcnNpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjExNS4gcmVncmVzc2lvbi5hdDo5NTogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTE0OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgLWMgLW8gaW5wdXQubyBpbnB1dC5jICIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTIC1jIC1vIGlucHV0Lm8gaW5wdXQuYyAiICJyZWdyZXNzaW9uLmF0OjExNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgLW8gaW5wdXQubyBpbnB1dC5jCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjExNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yNzAKKyNBVF9TVEFSVF8yNzEKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyNzEgJ3JlZ3Jlc3Npb24uYXQ6MTI1JyBcCisgICJFYXJseSB0b2tlbiBkZWZpbml0aW9ucyB3aXRob3V0IC0teWFjYyIgIiAgICAgICAgICIgMTcKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyNzEuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisjIEZvdW5kIGluIEdDSjogdGhleSBleHBlY3QgdGhlIHRva2VucyB0byBiZSBkZWZpbmVkIGJlZm9yZSB0aGUgdXNlcgorIyBwcm9sb2d1ZSwgc28gdGhhdCB0aGV5IGNhbiB1c2UgdGhlIHRva2VuIGRlZmluaXRpb25zIGluIGl0LgogCiAKIGNhdCA+aW5wdXQueSA8PCdfQVRFT0YnCi0vKiBCaXNvbiB1c2VkIHRvIHN3YWxsb3cgdGhlIGNoYXJhY3RlciBhZnRlciBgfScuICovCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisleworI2luY2x1ZGUgPHN0ZGlvLmg+Cit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworaW50IHl5bGV4ICh2b2lkKTsKK3ZvaWQgcHJpbnRfbXlfdG9rZW4gKHZvaWQpOworJX0KKworJXVuaW9uCit7CisgIGludCB2YWw7Cit9OworJXsKK3ZvaWQKK3ByaW50X215X3Rva2VuICh2b2lkKQoreworICBlbnVtIHl5dG9rZW50eXBlIG15X3Rva2VuID0gTVlfVE9LRU47CisgIHByaW50ZiAoIiVkXG4iLCBteV90b2tlbik7Cit9CislfQorJXRva2VuIE1ZX1RPS0VOCislJQorZXhwOiBNWV9UT0tFTjsKKyUlCitfQVRFT0YKKworCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZ3Jlc3Npb24uYXQ6MTU4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgInJlZ3Jlc3Npb24uYXQ6MTU4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjE1OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTU4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVncmVzc2lvbi5hdDoxNTgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1ODogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVncmVzc2lvbi5hdDoxNTgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTU4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTk6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJyZWdyZXNzaW9uLmF0OjE1OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTk6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyAtYyAtbyBpbnB1dC5vIGlucHV0LmMgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgLW8gaW5wdXQubyBpbnB1dC5jICIgInJlZ3Jlc3Npb24uYXQ6MTU5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyAtbyBpbnB1dC5vIGlucHV0LmMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTU5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzI3MQorI0FUX1NUQVJUXzI3MgorYXRfZm5fZ3JvdXBfYmFubmVyIDI3MiAncmVncmVzc2lvbi5hdDoxNzAnIFwKKyAgIkJyYWNlcyBwYXJzaW5nIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAxNworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI3Mi4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKy8qIEJpc29uIHVzZWQgdG8gc3dhbGxvdyB0aGUgY2hhcmFjdGVyIGFmdGVyICd9Jy4gKi8KIAogJSUKIGV4cDogeyB0ZXN0cyA9IHt7e3t7e3t7e3t9fX19fX19fX19OyB9OwpAQCAtNTY3ODQsNzYgKzE0MDQxOCwxMjUgQEAKIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAicmVncmVzc2lvbi5hdDoxMDU6IGJpc29uIC12IC1vIGlucHV0LmMgaW5wdXQueSIKLWVjaG8gcmVncmVzc2lvbi5hdDoxMDUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC12IC1vIGlucHV0LmMgaW5wdXQueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJyZWdyZXNzaW9uLmF0OjEwNTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxODI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtdiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWdyZXNzaW9uLmF0OjE4MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtdiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxODI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC12IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtdiAtbyBpbnB1dC5jIGlucHV0LnkiICJyZWdyZXNzaW9uLmF0OjE4MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtdiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTgyOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVncmVzc2lvbi5hdDoxODIiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxODIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE4MjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZ3Jlc3Npb24uYXQ6MTgyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxODI6IGJpc29uIC12IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZ3Jlc3Npb24uYXQ6MTgyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC12IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE4MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJyZWdyZXNzaW9uLmF0OjEwNzogZ3JlcCAndGVzdHMgPSB7e3t7e3t7e3t7fX19fX19fX19fTsnIGlucHV0LmMiCi1lY2hvIHJlZ3Jlc3Npb24uYXQ6MTA3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBncmVwICd0ZXN0cyA9IHt7e3t7e3t7e3t9fX19fX19fX19OycgaW5wdXQuYyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJyZWdyZXNzaW9uLmF0OjEwNzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxODQ6IGdyZXAgJ3Rlc3RzID0ge3t7e3t7e3t7e319fX19fX19fX07JyBpbnB1dC5jIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVncmVzc2lvbi5hdDoxODQiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAndGVzdHMgPSB7e3t7e3t7e3t7fX19fX19fX19fTsnIGlucHV0LmMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE4NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7CisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzI3MgorI0FUX1NUQVJUXzI3MworYXRfZm5fZ3JvdXBfYmFubmVyIDI3MyAncmVncmVzc2lvbi5hdDoxOTQnIFwKKyAgIkR1cGxpY2F0ZSBzdHJpbmciICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAxNworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI3My4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCi0gIDExNiApICMgMTE2LiByZWdyZXNzaW9uLmF0OjExNzogRHVwbGljYXRlIHN0cmluZwotICAgIGF0X3NldHVwX2xpbmU9J3JlZ3Jlc3Npb24uYXQ6MTE3JwotICAgIGF0X2Rlc2M9J0R1cGxpY2F0ZSBzdHJpbmcnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjExNjogRHVwbGljYXRlIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjExNi4gcmVncmVzc2lvbi5hdDoxMTc6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KIAogCiBjYXQgPmlucHV0LnkgPDwnX0FURU9GJwotLyogYEJpc29uIC12JyB1c2VkIHRvIGR1bXAgY29yZSB3aGVuIHR3byB0b2tlbnMgYXJlIGRlZmluZWQgd2l0aCB0aGUgc2FtZQorLyogJ0Jpc29uIC12JyB1c2VkIHRvIGR1bXAgY29yZSB3aGVuIHR3byB0b2tlbnMgYXJlIGRlZmluZWQgd2l0aCB0aGUgc2FtZQogICAgc3RyaW5nLCBhcyBMRSBhbmQgR0UgYmVsb3cuICovCiAKICV0b2tlbiBOVU0KQEAgLTU2ODY2LDQ4ICsxNDA1NDksMjI3IEBACiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInJlZ3Jlc3Npb24uYXQ6MTM0OiBiaXNvbiAtdiAtbyBpbnB1dC5jIGlucHV0LnkiCi1lY2hvIHJlZ3Jlc3Npb24uYXQ6MTM0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtdiAtbyBpbnB1dC5jIGlucHV0LnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyA+PiRhdF9zdGRlcnI7IGVjaG8gImlucHV0Lnk6Ni44LTE0OiB3YXJuaW5nOiBzeW1ib2wgXGBcIjw9XCInIHVzZWQgbW9yZSB0aGFuIG9uY2UgYXMgYSBsaXRlcmFsIHN0cmluZwotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAicmVncmVzc2lvbi5hdDoxMzQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MjExOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLXYgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVncmVzc2lvbi5hdDoyMTEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLXYgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjIxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MjExOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtdiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLXYgLW8gaW5wdXQuYyBpbnB1dC55IiAicmVncmVzc2lvbi5hdDoyMTEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLXYgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjIxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjIxMTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZ3Jlc3Npb24uYXQ6MjExIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MjExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoyMTE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjIxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjIxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MjExOiBiaXNvbiAtdiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWdyZXNzaW9uLmF0OjIxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtdiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OjYuOC0xNDogd2FybmluZzogc3ltYm9sIFwiPD1cIiB1c2VkIG1vcmUgdGhhbiBvbmNlIGFzIGEgbGl0ZXJhbCBzdHJpbmcKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MjExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworIyBEZWZpbmluZyBQT1NJWExZX0NPUlJFQ1QgY2F1c2VzIGJpc29uIHRvIGNvbXBsYWluIGlmIG9wdGlvbnMgYXJlCisjIGFkZGVkIGFmdGVyIHRoZSBncmFtbWFyIGZpbGUgbmFtZSwgc28gc2tpcCB0aGVzZSBjaGVja3MgaW4gdGhhdAorIyBjYXNlLgoraWYgdGVzdCAiJFBPU0lYTFlfQ09SUkVDVF9JU19FWFBPUlRFRCIgPSBmYWxzZTsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKworICAjIFRvIGF2b2lkIGV4cGFuZGluZyBpdCByZXBlYXRlZGx5LCBzdG9yZSBzcGVjaWZpZWQgc3Rkb3V0LgorICA6ID5leHBvdXQKKworICAjIFJ1biB3aXRoIC1XZXJyb3IuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjIxMTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtdiAtbyBpbnB1dC5jIGlucHV0LnkgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC12IC1vIGlucHV0LmMgaW5wdXQueSAtV2Vycm9yIiAicmVncmVzc2lvbi5hdDoyMTEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtdiAtbyBpbnB1dC5jIGlucHV0LnkgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoyMTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBCdWlsZCBleHBlY3RlZCBzdGRlcnIgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgIndhcm5pbmdzIGJlaW5nCisgICMgdHJlYXRlZCBhcyBlcnJvcnMiIG1lc3NhZ2UuCisgIGNhdCA+YXQtYmlzb24tY2hlY2std2FybmluZ3MgPDwnX0FURU9GJworaW5wdXQueTo2LjgtMTQ6IHdhcm5pbmc6IHN5bWJvbCAiPD0iIHVzZWQgbW9yZSB0aGFuIG9uY2UgYXMgYSBsaXRlcmFsIHN0cmluZworX0FURU9GCisKKyAgYXRfYmlzb25fY2hlY2tfZmlyc3Q9YHNlZCAtbiBcCisgICAgJy86IHdhcm5pbmc6IC97PTtxO30nIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzYAorICA6ICR7YXRfYmlzb25fY2hlY2tfZmlyc3Q6PTF9CisgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcD1gc2VkIC1uIFwKKyAgICAnL2NvbmZsaWN0czogWzAtOV0uKnJlZHVjZSQvez07cTt9JyBhdC1iaXNvbi1jaGVjay13YXJuaW5nc2AKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcDo9MX0KKyAgaWYgdGVzdCAkYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wIC1sdCAkYXRfYmlzb25fY2hlY2tfZmlyc3Q7IHRoZW4KKyAgICBhdF9iaXNvbl9jaGVja19maXJzdD0kYXRfYmlzb25fY2hlY2tfZmlyc3RfdG1wCisgIGZpCisgIGlmIHRlc3QgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0IC1ndCAxOyB0aGVuCisgICAgc2VkIC1uICIxLGBleHByICRhdF9iaXNvbl9jaGVja19maXJzdCAtIDFgInAgXAorICAgICAgYXQtYmlzb24tY2hlY2std2FybmluZ3MgPiBleHBlcnIKKyAgZmkKKyAgZWNobyAnYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzJyA+PiBleHBlcnIKKworICAjIEZpbmlzaCBidWlsZGluZyBleHBlY3RlZCBzdGRlcnIgYW5kIGNoZWNrLiAgVW5saWtlIHdhcm5pbmdzLAorICAjIGNvbXBsYWludHMgY2F1c2UgYmlzb24gdG8gZXhpdCBlYXJseS4gIFRodXMsIHdpdGggLVdlcnJvciwgYmlzb24KKyAgIyBkb2VzIG5vdCBuZWNlc3NhcmlseSByZXBvcnQgYWxsIHdhcm5pbmdzIHRoYXQgaXQgZG9lcyB3aXRob3V0CisgICMgLVdlcnJvciwgYnV0IGl0IGF0IGxlYXN0IHJlcG9ydHMgb25lLgorICBhdF9iaXNvbl9jaGVja19sYXN0PWBzZWQgLW4gJyQ9JyBzdGRlcnJgCisgIDogJHthdF9iaXNvbl9jaGVja19sYXN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19sYXN0PWBleHByICRhdF9iaXNvbl9jaGVja19sYXN0IC0gMWAKKyAgc2VkIC1uICIkYXRfYmlzb25fY2hlY2tfZmlyc3QsJGF0X2Jpc29uX2NoZWNrX2xhc3QicCBcCisgICAgYXQtYmlzb24tY2hlY2std2FybmluZ3MgPj4gZXhwZXJyCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjIxMTogc2VkICdzLC4qL1xcKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1xcKVwkLFxcMSwnIFxcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVncmVzc2lvbi5hdDoyMTEiCisoICRhdF9jaGVja190cmFjZTsgc2VkICdzLC4qL1woYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzXCkkLFwxLCcgXAorICAgICAgICAgICAgICBzdGRlcnIgMT4mMgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorJGF0X2RpZmYgZXhwZXJyICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjIxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIE5vdyBjaGVjayAtLXdhcm5pbmdzPWVycm9yLgorICBjcCBzdGRlcnIgZXhwZXJyCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjIxMTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtdiAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1lcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC12IC1vIGlucHV0LmMgaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yIiAicmVncmVzc2lvbi5hdDoyMTEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtdiAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1lcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorJGF0X2RpZmYgZXhwZXJyICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjIxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIE5vdyBjaGVjayAtV25vbmUgYW5kIC0td2FybmluZ3M9bm9uZSBieSBtYWtpbmcgc3VyZSB0aGF0CisgICMgLVdlcnJvciBkb2Vzbid0IGNoYW5nZSB0aGUgZXhpdCBzdGF0dXMgd2hlbiAtV25vbmUgb3IKKyAgIyAtLXdhcm5pbmdzPW5vbmUgaXMgc3BlY2lmaWVkLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoyMTE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLXYgLW8gaW5wdXQuYyBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLXYgLW8gaW5wdXQuYyBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIiAicmVncmVzc2lvbi5hdDoyMTEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtdiAtbyBpbnB1dC5jIGlucHV0LnkgLVdub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoyMTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjIxMTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtdiAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtdiAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiICJyZWdyZXNzaW9uLmF0OjIxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC12IC1vIGlucHV0LmMgaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjIxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCiAKLSRhdF90cmFjZW9uCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzI3MworI0FUX1NUQVJUXzI3NAorYXRfZm5fZ3JvdXBfYmFubmVyIDI3NCAncmVncmVzc2lvbi5hdDoyMjInIFwKKyAgIlJ1bGUgTGluZSBOdW1iZXJzIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAxNworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI3NC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwotCi0gIDExNyApICMgMTE3LiByZWdyZXNzaW9uLmF0OjE0MzogUnVsZSBMaW5lIE51bWJlcnMKLSAgICBhdF9zZXR1cF9saW5lPSdyZWdyZXNzaW9uLmF0OjE0MycKLSAgICBhdF9kZXNjPSdSdWxlIExpbmUgTnVtYmVycycKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiMTE3OiBSdWxlIExpbmUgTnVtYmVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiMTE3LiByZWdyZXNzaW9uLmF0OjE0MzogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgotCiAKIAogCkBAIC01Njk0Miw1MyArMTQwODA0LDExNCBAQAogX0FURU9GCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJyZWdyZXNzaW9uLmF0OjE3NzogYmlzb24gLW8gaW5wdXQuYyAtdiBpbnB1dC55IgotZWNobyByZWdyZXNzaW9uLmF0OjE3NyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gaW5wdXQuYyAtdiBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInJlZ3Jlc3Npb24uYXQ6MTc3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjI1ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgLXYgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZ3Jlc3Npb24uYXQ6MjU4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgLXYgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoyNTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjI1ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyAtdiBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgLXYgaW5wdXQueSIgInJlZ3Jlc3Npb24uYXQ6MjU4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgLXYgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoyNTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoyNTg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjI1OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjI1OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MjU4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVncmVzc2lvbi5hdDoyNTgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoyNTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjI1ODogYmlzb24gLW8gaW5wdXQuYyAtdiBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVncmVzc2lvbi5hdDoyNTgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuYyAtdiBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MjU4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAogCiAjIENoZWNrIHRoZSBjb250ZW50cyBvZiB0aGUgcmVwb3J0LgotJGF0X3RyYWNlb2ZmCi1lY2hvICJyZWdyZXNzaW9uLmF0OjI3NjogY2F0IGlucHV0Lm91dHB1dCIKLWVjaG8gcmVncmVzc2lvbi5hdDoyNzYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGNhdCBpbnB1dC5vdXRwdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gIkdyYW1tYXIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjI2MTogY2F0IGlucHV0Lm91dHB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZ3Jlc3Npb24uYXQ6MjYxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBpbnB1dC5vdXRwdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJHcmFtbWFyCiAKICAgICAwIFwkYWNjZXB0OiBleHByIFwkZW5kCiAKLSAgICAxIEAxOiAvKiBlbXB0eSAqLworICAgIDEgXCRAMTogLyogZW1wdHkgKi8KIAotICAgIDIgZXhwcjogJ2EnIEAxICdiJworICAgIDIgZXhwcjogJ2EnIFwkQDEgJ2InCiAKLSAgICAzIEAyOiAvKiBlbXB0eSAqLworICAgIDMgXCRAMjogLyogZW1wdHkgKi8KIAotICAgIDQgZXhwcjogQDIgJ2MnCisgICAgNCBleHByOiBcJEAyICdjJwogCiAKIFRlcm1pbmFscywgd2l0aCBydWxlcyB3aGVyZSB0aGV5IGFwcGVhcgpAQCAtNTcwMDYsMTA0ICsxNDA5MjksOTIgQEAKICAgICBvbiBsZWZ0OiAwCiBleHByICg3KQogICAgIG9uIGxlZnQ6IDIgNCwgb24gcmlnaHQ6IDAKLUAxICg4KQorXCRAMSAoOCkKICAgICBvbiBsZWZ0OiAxLCBvbiByaWdodDogMgotQDIgKDkpCitcJEAyICg5KQogICAgIG9uIGxlZnQ6IDMsIG9uIHJpZ2h0OiA0CiAKIAotc3RhdGUgMAorU3RhdGUgMAogCiAgICAgMCBcJGFjY2VwdDogLiBleHByIFwkZW5kCiAKICAgICAnYScgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgMQogCi0gICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSAzIChAMikKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDMgKFwkQDIpCiAKICAgICBleHByICBnbyB0byBzdGF0ZSAyCi0gICAgQDIgICAgZ28gdG8gc3RhdGUgMworICAgIFwkQDIgICBnbyB0byBzdGF0ZSAzCiAKIAotc3RhdGUgMQorU3RhdGUgMQogCi0gICAgMiBleHByOiAnYScgLiBAMSAnYicKKyAgICAyIGV4cHI6ICdhJyAuIFwkQDEgJ2InCiAKLSAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDEgKEAxKQorICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMSAoXCRAMSkKIAotICAgIEAxICBnbyB0byBzdGF0ZSA0CisgICAgXCRAMSAgZ28gdG8gc3RhdGUgNAogCiAKLXN0YXRlIDIKK1N0YXRlIDIKIAogICAgIDAgXCRhY2NlcHQ6IGV4cHIgLiBcJGVuZAogCiAgICAgXCRlbmQgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNQogCiAKLXN0YXRlIDMKK1N0YXRlIDMKIAotICAgIDQgZXhwcjogQDIgLiAnYycKKyAgICA0IGV4cHI6IFwkQDIgLiAnYycKIAogICAgICdjJyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA2CiAKIAotc3RhdGUgNAorU3RhdGUgNAogCi0gICAgMiBleHByOiAnYScgQDEgLiAnYicKKyAgICAyIGV4cHI6ICdhJyBcJEAxIC4gJ2InCiAKICAgICAnYicgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNwogCiAKLXN0YXRlIDUKK1N0YXRlIDUKIAogICAgIDAgXCRhY2NlcHQ6IGV4cHIgXCRlbmQgLgogCiAgICAgXCRkZWZhdWx0ICBhY2NlcHQKIAogCi1zdGF0ZSA2CitTdGF0ZSA2CiAKLSAgICA0IGV4cHI6IEAyICdjJyAuCisgICAgNCBleHByOiBcJEAyICdjJyAuCiAKICAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDQgKGV4cHIpCiAKIAotc3RhdGUgNworU3RhdGUgNwogCi0gICAgMiBleHByOiAnYScgQDEgJ2InIC4KKyAgICAyIGV4cHI6ICdhJyBcJEAxICdiJyAuCiAKICAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDIgKGV4cHIpCi0iIHwgJGF0X2RpZmYgLSAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJyZWdyZXNzaW9uLmF0OjI3NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjI2MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Ci0KLSAgMTE4ICkgIyAxMTguIHJlZ3Jlc3Npb24uYXQ6Mjg3OiBNaXhpbmcgJXRva2VuIHN0eWxlcwotICAgIGF0X3NldHVwX2xpbmU9J3JlZ3Jlc3Npb24uYXQ6Mjg3JwotICAgIGF0X2Rlc2M9J01peGluZyAldG9rZW4gc3R5bGVzJwotICAgICRhdF9xdWlldCAkRUNIT19OICIxMTg6IE1peGluZyAldG9rZW4gc3R5bGVzICAgICAgICAgICAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIxMTguIHJlZ3Jlc3Npb24uYXQ6Mjg3OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzI3NAorI0FUX1NUQVJUXzI3NQorYXRfZm5fZ3JvdXBfYmFubmVyIDI3NSAncmVncmVzc2lvbi5hdDozNjgnIFwKKyAgIk1peGluZyAldG9rZW4gc3R5bGVzIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAxNworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI3NS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKICMgVGFrZW4gZnJvbSB0aGUgZG9jdW1lbnRhdGlvbi4KQEAgLTU3MTE3LDQ2ICsxNDEwMjgsMTA1IEBACiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInJlZ3Jlc3Npb24uYXQ6Mjk5OiBiaXNvbiAtdiAtbyBpbnB1dC5jIGlucHV0LnkiCi1lY2hvIHJlZ3Jlc3Npb24uYXQ6Mjk5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtdiAtbyBpbnB1dC5jIGlucHV0LnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAicmVncmVzc2lvbi5hdDoyOTk6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDozODA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtdiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWdyZXNzaW9uLmF0OjM4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtdiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MzgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjM4MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLXYgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC12IC1vIGlucHV0LmMgaW5wdXQueSIgInJlZ3Jlc3Npb24uYXQ6MzgwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC12IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDozODAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDozODA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjM4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjM4MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MzgwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVncmVzc2lvbi5hdDozODAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDozODAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjM4MDogYmlzb24gLXYgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVncmVzc2lvbi5hdDozODAiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLXYgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MzgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKIAotICAxMTkgKSAjIDExOS4gcmVncmVzc2lvbi5hdDozMTA6IEludmFsaWQgaW5wdXRzCi0gICAgYXRfc2V0dXBfbGluZT0ncmVncmVzc2lvbi5hdDozMTAnCi0gICAgYXRfZGVzYz0nSW52YWxpZCBpbnB1dHMnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjExOTogSW52YWxpZCBpbnB1dHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjExOS4gcmVncmVzc2lvbi5hdDozMTA6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjc1CisjQVRfU1RBUlRfMjc2CithdF9mbl9ncm91cF9iYW5uZXIgMjc2ICdyZWdyZXNzaW9uLmF0OjM5MScgXAorICAiSW52YWxpZCBpbnB1dHMiICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDE3CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjc2LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogY2F0ID5pbnB1dC55IDw8J19BVEVPRicKQEAgLTU3MTcwLDU0ICsxNDExNDAsNDQgQEAKIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAicmVncmVzc2lvbi5hdDozMzE6IGJpc29uIGlucHV0LnkiCi1lY2hvIHJlZ3Jlc3Npb24uYXQ6MzMxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gPj4kYXRfc3RkZXJyOyBlY2hvICJpbnB1dC55OjIuMTogaW52YWxpZCBjaGFyYWN0ZXI6IFxgPycKLWlucHV0Lnk6My4xNDogaW52YWxpZCBjaGFyYWN0ZXI6IFxgfScKLWlucHV0Lnk6NC4xOiBpbnZhbGlkIGNoYXJhY3RlcjogXGAlJwotaW5wdXQueTo0LjI6IGludmFsaWQgY2hhcmFjdGVyOiBcYCYnCi1pbnB1dC55OjUuMS0xNzogaW52YWxpZCBkaXJlY3RpdmU6IFxgJWEtZG9lcy1ub3QtZXhpc3QnCi1pbnB1dC55OjYuMTogaW52YWxpZCBjaGFyYWN0ZXI6IFxgJScKLWlucHV0Lnk6Ni4yOiBpbnZhbGlkIGNoYXJhY3RlcjogXGAtJwotaW5wdXQueTo3LjEtOC4wOiBtaXNzaW5nIFxgJX0nIGF0IGVuZCBvZiBmaWxlCi0iIHwgJGF0X2RpZmYgLSAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJyZWdyZXNzaW9uLmF0OjMzMTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0MDM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkiICJyZWdyZXNzaW9uLmF0OjQwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OjIuMTogZXJyb3I6IGludmFsaWQgY2hhcmFjdGVyOiAnPycKK2lucHV0Lnk6My4xNDogZXJyb3I6IGludmFsaWQgY2hhcmFjdGVyOiAnfScKK2lucHV0Lnk6NC4xOiBlcnJvcjogaW52YWxpZCBjaGFyYWN0ZXI6ICclJworaW5wdXQueTo0LjI6IGVycm9yOiBpbnZhbGlkIGNoYXJhY3RlcjogJyYnCitpbnB1dC55OjUuMS0xNzogZXJyb3I6IGludmFsaWQgZGlyZWN0aXZlOiAnJWEtZG9lcy1ub3QtZXhpc3QnCitpbnB1dC55OjYuMTogZXJyb3I6IGludmFsaWQgY2hhcmFjdGVyOiAnJScKK2lucHV0Lnk6Ni4yOiBlcnJvcjogaW52YWxpZCBjaGFyYWN0ZXI6ICctJworaW5wdXQueTo3LjEtOC4wOiBlcnJvcjogbWlzc2luZyAnJX0nIGF0IGVuZCBvZiBmaWxlCitpbnB1dC55OjcuMS04LjA6IGVycm9yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXsuLi4lfQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwogCi0gIDEyMCApICMgMTIwLiByZWdyZXNzaW9uLmF0OjMzNjogSW52YWxpZCBpbnB1dHMgd2l0aCB7fQotICAgIGF0X3NldHVwX2xpbmU9J3JlZ3Jlc3Npb24uYXQ6MzM2JwotICAgIGF0X2Rlc2M9J0ludmFsaWQgaW5wdXRzIHdpdGgge30nCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjEyMDogSW52YWxpZCBpbnB1dHMgd2l0aCB7fSAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjEyMC4gcmVncmVzc2lvbi5hdDozMzY6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjc2CisjQVRfU1RBUlRfMjc3CithdF9mbl9ncm91cF9iYW5uZXIgMjc3ICdyZWdyZXNzaW9uLmF0OjQxOCcgXAorICAiSW52YWxpZCBpbnB1dHMgd2l0aCB7fSIgIiAgICAgICAgICAgICAgICAgICAgICAgICAiIDE3CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjc3LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogY2F0ID5pbnB1dC55IDw8J19BVEVPRicKQEAgLTU3MjMxLDY3ICsxNDExOTEsNTQgQEAKIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAicmVncmVzc2lvbi5hdDozNTI6IGJpc29uIGlucHV0LnkiCi1lY2hvIHJlZ3Jlc3Npb24uYXQ6MzUyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gPj4kYXRfc3RkZXJyOyBlY2hvICJpbnB1dC55OjMuMTogbWlzc2luZyBcYHsnIGluIFwiJWRlc3RydWN0b3Igey4uLn1cIgotaW5wdXQueTo0LjE6IG1pc3NpbmcgXGB7JyBpbiBcIiVpbml0aWFsLWFjdGlvbiB7Li4ufVwiCi1pbnB1dC55OjQuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVpbml0aWFsLWFjdGlvbiB7Li4ufSwgZXhwZWN0aW5nIHN0cmluZyBvciBpZGVudGlmaWVyCi0iIHwgJGF0X2RpZmYgLSAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJyZWdyZXNzaW9uLmF0OjM1MjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0MzA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkiICJyZWdyZXNzaW9uLmF0OjQzMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OjMuMS0xNTogZXJyb3I6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlaW5pdGlhbC1hY3Rpb24sIGV4cGVjdGluZyB7Li4ufQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0MzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwogCi0gIDEyMSApICMgMTIxLiByZWdyZXNzaW9uLmF0OjM2MzogVG9rZW4gZGVmaW5pdGlvbnMKLSAgICBhdF9zZXR1cF9saW5lPSdyZWdyZXNzaW9uLmF0OjM2MycKLSAgICBhdF9kZXNjPSdUb2tlbiBkZWZpbml0aW9ucycKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiMTIxOiBUb2tlbiBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiMTIxLiByZWdyZXNzaW9uLmF0OjM2MzogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yNzcKKyNBVF9TVEFSVF8yNzgKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyNzggJ3JlZ3Jlc3Npb24uYXQ6NDQzJyBcCisgICJUb2tlbiBkZWZpbml0aW9ucyIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgMTcKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyNzguICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCi0jIEJpc29uIG1hbmFnZWQsIHdoZW4gZmVkIHdpdGggYCV0b2tlbiAnZicgImYiJyB0byAjZGVmaW5lICdmJyEKKworIyBCaXNvbiBtYW5hZ2VkLCB3aGVuIGZlZCB3aXRoICcldG9rZW4gJ2YnICJmIicgdG8gI2RlZmluZSAnZichCiBjYXQgPmlucHV0LnkgPDwnX0FURU9GJwotJXsKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotICAvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KLSMgdW5kZWYgbWFsbG9jCi0jIHVuZGVmIG1lbWNtcAotIyB1bmRlZiByZWFsbG9jCi0jZW5kaWYKLSV9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCiAleworI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+Ci12b2lkIHl5ZXJyb3IgKGNvbnN0IGNoYXIgKnMpOwotaW50IHl5bGV4ICh2b2lkKTsKK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworc3RhdGljIGludCB5eWxleCAodm9pZCk7CiAlfQogJWVycm9yLXZlcmJvc2UKICV0b2tlbiBNWUVPRiAwICJlbmQgb2YgZmlsZSIKQEAgLTU3MzAwLDE5ICsxNDEyNDcsMjkgQEAKICV0b2tlbiBDX1RPS0VOICdjJwogJXRva2VuICdkJyBEX1RPS0VOCiAldG9rZW4gU1BFQ0lBTCAiXFxcJ1w/XCJcYVxiXGZcblxyXHRcdlwwMDFcMjAxXHgwMDFceDAwMDA4MT8/ISIKKyV0b2tlbiBTUEVDSUFMICJcXFwnXD9cIlxhXGJcZlxuXHJcdFx2XDAwMVwyMDFceDAwMVx4MDAwMDgxPz8hIgogJSUKIGV4cDogImEiICJcXFwnXD9cIlxhXGJcZlxuXHJcdFx2XDAwMVwyMDFceDAwMVx4MDAwMDgxPz8hIjsKICUlCi12b2lkCi15eWVycm9yIChjaGFyIGNvbnN0ICpzKQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQogewotICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgcyk7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOwogfQotCi1pbnQKLXl5bGV4ICh2b2lkKQorI2luY2x1ZGUgPGFzc2VydC5oPgorc3RhdGljCitpbnQgeXlsZXggKHZvaWQpCiB7Ci0gIHJldHVybiBTUEVDSUFMOworICBzdGF0aWMgaW50IGNvbnN0IGlucHV0W10gPSB7IFNQRUNJQUwgfTsKKyAgc3RhdGljIHNpemVfdCB0b2tudW0gPSAwOworICBpbnQgcmVzOworICA7CisgIGFzc2VydCAodG9rbnVtIDwgc2l6ZW9mIGlucHV0IC8gc2l6ZW9mIGlucHV0WzBdKTsKKyAgcmVzID0gaW5wdXRbdG9rbnVtKytdOworICA7CisgIHJldHVybiByZXM7CiB9CiAKIGludApAQCAtNTczMjQsMTkxICsxNDEyODEsNjU5IEBACiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInJlZ3Jlc3Npb24uYXQ6NDAxOiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCi1lY2hvIHJlZ3Jlc3Npb24uYXQ6NDAxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAicmVncmVzc2lvbi5hdDo0MDE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisjIENoZWNraW5nIHRoZSB3YXJuaW5nIG1lc3NhZ2UgZ3VhcmFudGVlcyB0aGF0IHRoZSB0cmlncmFwaCAiPz8hIiBpc24ndAorIyB1bm5lY2Vzc2FyaWx5IGVzY2FwZWQgaGVyZSBldmVuIHRob3VnaCBpdCB3b3VsZCBuZWVkIHRvIGJlIGlmIGVuY29kZWQgaW4gYQorIyBDLXN0cmluZyBsaXRlcmFsLiAgQWxzbyBub3RpY2UgdGhhdCB1bm5lY2Vzc2FyeSBlc2NhcGluZywgc3VjaCBhcyAiXD8iLCBmcm9tCisjIHRoZSB1c2VyIHNwZWNpZmljYXRpb24gaXMgZWxpbWluYXRlZC4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0ODA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWdyZXNzaW9uLmF0OjQ4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NDgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0ODA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiICJyZWdyZXNzaW9uLmF0OjQ4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NDgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NDgwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVncmVzc2lvbi5hdDo0ODAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0ODAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjQ4MDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZ3Jlc3Npb24uYXQ6NDgwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NDgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0ODA6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZ3Jlc3Npb24uYXQ6NDgwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6MjIuOC0xNDogd2FybmluZzogc3ltYm9sIFNQRUNJQUwgcmVkZWNsYXJlZAoraW5wdXQueToyMi44LTYzOiB3YXJuaW5nOiBzeW1ib2wgXCJcXFxcJz9cXFwiXFxhXFxiXFxmXFxuXFxyXFx0XFx2XFwwMDFcXDIwMVxcMDAxXFwyMDE/PyFcIiB1c2VkIG1vcmUgdGhhbiBvbmNlIGFzIGEgbGl0ZXJhbCBzdHJpbmcKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NDgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KKyMgRGVmaW5pbmcgUE9TSVhMWV9DT1JSRUNUIGNhdXNlcyBiaXNvbiB0byBjb21wbGFpbiBpZiBvcHRpb25zIGFyZQorIyBhZGRlZCBhZnRlciB0aGUgZ3JhbW1hciBmaWxlIG5hbWUsIHNvIHNraXAgdGhlc2UgY2hlY2tzIGluIHRoYXQKKyMgY2FzZS4KK2lmIHRlc3QgIiRQT1NJWExZX0NPUlJFQ1RfSVNfRVhQT1JURUQiID0gZmFsc2U7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCiAKLSRhdF90cmFjZW9mZgotZWNobyAicmVncmVzc2lvbi5hdDo0MDI6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCi1lY2hvIHJlZ3Jlc3Npb24uYXQ6NDAyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJyZWdyZXNzaW9uLmF0OjQwMjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgorICAjIFRvIGF2b2lkIGV4cGFuZGluZyBpdCByZXBlYXRlZGx5LCBzdG9yZSBzcGVjaWZpZWQgc3Rkb3V0LgorICA6ID5leHBvdXQKIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQorICAjIFJ1biB3aXRoIC1XZXJyb3IuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjQ4MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSAtV2Vycm9yIiAicmVncmVzc2lvbi5hdDo0ODAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0ODAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCi1jYXQgPmV4cGVyciA8PCdfQVRFT0YnCi1zeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgIlxcJz9cIlxhXGJcZlxuXHJcdFx2XDAwMVwyMDFcMDAxXDIwMT9cPyEiLCBleHBlY3RpbmcgYQorICAjIEJ1aWxkIGV4cGVjdGVkIHN0ZGVyciB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSAid2FybmluZ3MgYmVpbmcKKyAgIyB0cmVhdGVkIGFzIGVycm9ycyIgbWVzc2FnZS4KKyAgY2F0ID5hdC1iaXNvbi1jaGVjay13YXJuaW5ncyA8PCdfQVRFT0YnCitpbnB1dC55OjIyLjgtMTQ6IHdhcm5pbmc6IHN5bWJvbCBTUEVDSUFMIHJlZGVjbGFyZWQKK2lucHV0Lnk6MjIuOC02Mzogd2FybmluZzogc3ltYm9sICJcXCc/XCJcYVxiXGZcblxyXHRcdlwwMDFcMjAxXDAwMVwyMDE/PyEiIHVzZWQgbW9yZSB0aGFuIG9uY2UgYXMgYSBsaXRlcmFsIHN0cmluZwogX0FURU9GCiAKLSRhdF90cmFjZW9mZgotZWNobyAicmVncmVzc2lvbi5hdDo0MDY6IFwkUFJFUEFSU0VSIC4vaW5wdXQiCi1lY2hvIHJlZ3Jlc3Npb24uYXQ6NDA2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgZXhwZXJyICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gInJlZ3Jlc3Npb24uYXQ6NDA2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PWBzZWQgLW4gXAorICAgICcvOiB3YXJuaW5nOiAvez07cTt9JyBhdC1iaXNvbi1jaGVjay13YXJuaW5nc2AKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2ZpcnN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19maXJzdF90bXA9YHNlZCAtbiBcCisgICAgJy9jb25mbGljdHM6IFswLTldLipyZWR1Y2UkL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdF90bXA6PTF9CisgIGlmIHRlc3QgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcCAtbHQgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0OyB0aGVuCisgICAgYXRfYmlzb25fY2hlY2tfZmlyc3Q9JGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcAorICBmaQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdCAtZ3QgMTsgdGhlbgorICAgIHNlZCAtbiAiMSxgZXhwciAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLSAxYCJwIFwKKyAgICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4gZXhwZXJyCisgIGZpCisgIGVjaG8gJ2Jpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycycgPj4gZXhwZXJyCiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICAjIEZpbmlzaCBidWlsZGluZyBleHBlY3RlZCBzdGRlcnIgYW5kIGNoZWNrLiAgVW5saWtlIHdhcm5pbmdzLAorICAjIGNvbXBsYWludHMgY2F1c2UgYmlzb24gdG8gZXhpdCBlYXJseS4gIFRodXMsIHdpdGggLVdlcnJvciwgYmlzb24KKyAgIyBkb2VzIG5vdCBuZWNlc3NhcmlseSByZXBvcnQgYWxsIHdhcm5pbmdzIHRoYXQgaXQgZG9lcyB3aXRob3V0CisgICMgLVdlcnJvciwgYnV0IGl0IGF0IGxlYXN0IHJlcG9ydHMgb25lLgorICBhdF9iaXNvbl9jaGVja19sYXN0PWBzZWQgLW4gJyQ9JyBzdGRlcnJgCisgIDogJHthdF9iaXNvbl9jaGVja19sYXN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19sYXN0PWBleHByICRhdF9iaXNvbl9jaGVja19sYXN0IC0gMWAKKyAgc2VkIC1uICIkYXRfYmlzb25fY2hlY2tfZmlyc3QsJGF0X2Jpc29uX2NoZWNrX2xhc3QicCBcCisgICAgYXQtYmlzb24tY2hlY2std2FybmluZ3MgPj4gZXhwZXJyCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjQ4MDogc2VkICdzLC4qL1xcKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1xcKVwkLFxcMSwnIFxcCisgICAgICAgICAgICAgIHN0ZGVyciAxPiYyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVncmVzc2lvbi5hdDo0ODAiCisoICRhdF9jaGVja190cmFjZTsgc2VkICdzLC4qL1woYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzXCkkLFwxLCcgXAorICAgICAgICAgICAgICBzdGRlcnIgMT4mMgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorJGF0X2RpZmYgZXhwZXJyICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjQ4MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIE5vdyBjaGVjayAtLXdhcm5pbmdzPWVycm9yLgorICBjcCBzdGRlcnIgZXhwZXJyCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjQ4MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1lcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yIiAicmVncmVzc2lvbi5hdDo0ODAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1lcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorJGF0X2RpZmYgZXhwZXJyICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjQ4MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAjIE5vdyBjaGVjayAtV25vbmUgYW5kIC0td2FybmluZ3M9bm9uZSBieSBtYWtpbmcgc3VyZSB0aGF0CisgICMgLVdlcnJvciBkb2Vzbid0IGNoYW5nZSB0aGUgZXhpdCBzdGF0dXMgd2hlbiAtV25vbmUgb3IKKyAgIyAtLXdhcm5pbmdzPW5vbmUgaXMgc3BlY2lmaWVkLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0ODA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIiAicmVncmVzc2lvbi5hdDo0ODAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLVdub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0ODAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjQ4MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiICJyZWdyZXNzaW9uLmF0OjQ4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjQ4MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NDg0OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWdyZXNzaW9uLmF0OjQ4NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtZmNhcmV0IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0ODQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0ODQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1mY2FyZXQgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1mY2FyZXQgLW8gaW5wdXQuYyBpbnB1dC55IiAicmVncmVzc2lvbi5hdDo0ODQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NDg0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7CisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0ODQ6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjQ4NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjQ4NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgMTIyICkgIyAxMjIuIHJlZ3Jlc3Npb24uYXQ6NDE2OiBDaGFyYWN0ZXJzIEVzY2FwZXMKLSAgICBhdF9zZXR1cF9saW5lPSdyZWdyZXNzaW9uLmF0OjQxNicKLSAgICBhdF9kZXNjPSdDaGFyYWN0ZXJzIEVzY2FwZXMnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjEyMjogQ2hhcmFjdGVycyBFc2NhcGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjEyMi4gcmVncmVzc2lvbi5hdDo0MTY6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NDg0OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVncmVzc2lvbi5hdDo0ODQiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0ODQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjQ4NDogYmlzb24gLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWdyZXNzaW9uLmF0OjQ4NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtZmNhcmV0IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6MjIuOC0xNDogd2FybmluZzogc3ltYm9sIFNQRUNJQUwgcmVkZWNsYXJlZAorICV0b2tlbiBTUEVDSUFMIFwiXFxcXFxcJ1xcP1xcXCJcXGFcXGJcXGZcXG5cXHJcXHRcXHZcXDAwMVxcMjAxXFx4MDAxXFx4MDAwMDgxPz8hXCIKKyAgICAgICAgXl5eXl5eXgoraW5wdXQueToyMi44LTYzOiB3YXJuaW5nOiBzeW1ib2wgXCJcXFxcJz9cXFwiXFxhXFxiXFxmXFxuXFxyXFx0XFx2XFwwMDFcXDIwMVxcMDAxXFwyMDE/PyFcIiB1c2VkIG1vcmUgdGhhbiBvbmNlIGFzIGEgbGl0ZXJhbCBzdHJpbmcKKyAldG9rZW4gU1BFQ0lBTCBcIlxcXFxcXCdcXD9cXFwiXFxhXFxiXFxmXFxuXFxyXFx0XFx2XFwwMDFcXDIwMVxceDAwMVxceDAwMDA4MT8/IVwiCisgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjQ4NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyMgRGVmaW5pbmcgUE9TSVhMWV9DT1JSRUNUIGNhdXNlcyBiaXNvbiB0byBjb21wbGFpbiBpZiBvcHRpb25zIGFyZQorIyBhZGRlZCBhZnRlciB0aGUgZ3JhbW1hciBmaWxlIG5hbWUsIHNvIHNraXAgdGhlc2UgY2hlY2tzIGluIHRoYXQKKyMgY2FzZS4KK2lmIHRlc3QgIiRQT1NJWExZX0NPUlJFQ1RfSVNfRVhQT1JURUQiID0gZmFsc2U7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisKKyAgIyBUbyBhdm9pZCBleHBhbmRpbmcgaXQgcmVwZWF0ZWRseSwgc3RvcmUgc3BlY2lmaWVkIHN0ZG91dC4KKyAgOiA+ZXhwb3V0CisKKyAgIyBSdW4gd2l0aCAtV2Vycm9yLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0ODQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnkgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgLW8gaW5wdXQuYyBpbnB1dC55IC1XZXJyb3IiICJyZWdyZXNzaW9uLmF0OjQ4NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgLW8gaW5wdXQuYyBpbnB1dC55IC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NDg0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisgICMgQnVpbGQgZXhwZWN0ZWQgc3RkZXJyIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlICJ3YXJuaW5ncyBiZWluZworICAjIHRyZWF0ZWQgYXMgZXJyb3JzIiBtZXNzYWdlLgorICBjYXQgPmF0LWJpc29uLWNoZWNrLXdhcm5pbmdzIDw8J19BVEVPRicKK2lucHV0Lnk6MjIuOC0xNDogd2FybmluZzogc3ltYm9sIFNQRUNJQUwgcmVkZWNsYXJlZAorICV0b2tlbiBTUEVDSUFMICJcXFwnXD9cIlxhXGJcZlxuXHJcdFx2XDAwMVwyMDFceDAwMVx4MDAwMDgxPz8hIgorICAgICAgICBeXl5eXl5eCitpbnB1dC55OjIyLjgtNjM6IHdhcm5pbmc6IHN5bWJvbCAiXFwnP1wiXGFcYlxmXG5cclx0XHZcMDAxXDIwMVwwMDFcMjAxPz8hIiB1c2VkIG1vcmUgdGhhbiBvbmNlIGFzIGEgbGl0ZXJhbCBzdHJpbmcKKyAldG9rZW4gU1BFQ0lBTCAiXFxcJ1w/XCJcYVxiXGZcblxyXHRcdlwwMDFcMjAxXHgwMDFceDAwMDA4MT8/ISIKKyAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK19BVEVPRgorCisgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PWBzZWQgLW4gXAorICAgICcvOiB3YXJuaW5nOiAvez07cTt9JyBhdC1iaXNvbi1jaGVjay13YXJuaW5nc2AKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2ZpcnN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19maXJzdF90bXA9YHNlZCAtbiBcCisgICAgJy9jb25mbGljdHM6IFswLTldLipyZWR1Y2UkL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdF90bXA6PTF9CisgIGlmIHRlc3QgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcCAtbHQgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0OyB0aGVuCisgICAgYXRfYmlzb25fY2hlY2tfZmlyc3Q9JGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcAorICBmaQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdCAtZ3QgMTsgdGhlbgorICAgIHNlZCAtbiAiMSxgZXhwciAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLSAxYCJwIFwKKyAgICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4gZXhwZXJyCisgIGZpCisgIGVjaG8gJ2Jpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycycgPj4gZXhwZXJyCisKKyAgIyBGaW5pc2ggYnVpbGRpbmcgZXhwZWN0ZWQgc3RkZXJyIGFuZCBjaGVjay4gIFVubGlrZSB3YXJuaW5ncywKKyAgIyBjb21wbGFpbnRzIGNhdXNlIGJpc29uIHRvIGV4aXQgZWFybHkuICBUaHVzLCB3aXRoIC1XZXJyb3IsIGJpc29uCisgICMgZG9lcyBub3QgbmVjZXNzYXJpbHkgcmVwb3J0IGFsbCB3YXJuaW5ncyB0aGF0IGl0IGRvZXMgd2l0aG91dAorICAjIC1XZXJyb3IsIGJ1dCBpdCBhdCBsZWFzdCByZXBvcnRzIG9uZS4KKyAgYXRfYmlzb25fY2hlY2tfbGFzdD1gc2VkIC1uICckPScgc3RkZXJyYAorICA6ICR7YXRfYmlzb25fY2hlY2tfbGFzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfbGFzdD1gZXhwciAkYXRfYmlzb25fY2hlY2tfbGFzdCAtIDFgCisgIHNlZCAtbiAiJGF0X2Jpc29uX2NoZWNrX2ZpcnN0LCRhdF9iaXNvbl9jaGVja19sYXN0InAgXAorICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4+IGV4cGVycgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0ODQ6IHNlZCAncywuKi9cXChiaXNvbjogd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnNcXClcJCxcXDEsJyBcXAorICAgICAgICAgICAgICBzdGRlcnIgMT4mMiIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZ3Jlc3Npb24uYXQ6NDg0IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCAncywuKi9cKGJpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9yc1wpJCxcMSwnIFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0ODQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBOb3cgY2hlY2sgLS13YXJuaW5ncz1lcnJvci4KKyAgY3Agc3RkZXJyIGV4cGVycgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0ODQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1lcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgLW8gaW5wdXQuYyBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IiICJyZWdyZXNzaW9uLmF0OjQ4NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgLW8gaW5wdXQuYyBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKKyRhdF9kaWZmIGV4cGVyciAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0ODQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBOb3cgY2hlY2sgLVdub25lIGFuZCAtLXdhcm5pbmdzPW5vbmUgYnkgbWFraW5nIHN1cmUgdGhhdAorICAjIC1XZXJyb3IgZG9lc24ndCBjaGFuZ2UgdGhlIGV4aXQgc3RhdHVzIHdoZW4gLVdub25lIG9yCisgICMgLS13YXJuaW5ncz1ub25lIGlzIHNwZWNpZmllZC4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NDg0OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgLW8gaW5wdXQuYyBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnkgLVdub25lIC1XZXJyb3IiICJyZWdyZXNzaW9uLmF0OjQ4NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1mY2FyZXQgLW8gaW5wdXQuYyBpbnB1dC55IC1Xbm9uZSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NDg0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0ODQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtZmNhcmV0IC1vIGlucHV0LmMgaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvciIgInJlZ3Jlc3Npb24uYXQ6NDg0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLWZjYXJldCAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1ub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo0ODQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NDkyOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAicmVncmVzc2lvbi5hdDo0OTIiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NDkyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NDkyOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyIgInJlZ3Jlc3Npb24uYXQ6NDkyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjQ5MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBDaGVja2luZyB0aGUgZXJyb3IgbWVzc2FnZSBoZXJlIGd1YXJhbnRlZXMgdGhhdCB5eXRuYW1lLCB3aGljaCBkb2VzIGNvbnRhaW4KKyMgQy1zdHJpbmcgbGl0ZXJhbHMsIGRvZXMgaGF2ZSB0aGUgdHJpZ3JhcGggZXNjYXBlZCBjb3JyZWN0bHkuICBUaHVzLCB0aGUKKyMgc3ltYm9sIG5hbWUgcmVwb3J0ZWQgYnkgdGhlIHBhcnNlciBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIHRoYXQgcmVwb3J0ZWQgYnkKKyMgQmlzb24gaXRzZWxmLgorY2F0ID5leHBlcnIgPDwnX0FURU9GJworc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICJcXCc/XCJcYVxiXGZcblxyXHRcdlwwMDFcMjAxXDAwMVwyMDE/PyEiLCBleHBlY3RpbmcgYQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjUwMTogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJyZWdyZXNzaW9uLmF0OjUwMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjUwMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjUwMTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWdyZXNzaW9uLmF0OjUwMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorJGF0X2RpZmYgZXhwZXJyICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjUwMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yNzgKKyNBVF9TVEFSVF8yNzkKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyNzkgJ3JlZ3Jlc3Npb24uYXQ6NTExJyBcCisgICJDaGFyYWN0ZXJzIEVzY2FwZXMiICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgMTcKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyNzkuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKwogCiAKIGNhdCA+aW5wdXQueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKICV7Ci12b2lkIHl5ZXJyb3IgKGNvbnN0IGNoYXIgKnMpOwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKIGludCB5eWxleCAodm9pZCk7CiAlfQogJSUKIGV4cDoKICAgJ1wnJyAiXCciCiB8ICdcIicgIlwiIgotfCAnIicgICInIgorfCAnIicgICInIiAvKiBQYWNpZnkgZm9udC1sb2NrLW1vZGU6ICIuICovCiA7CiBfQVRFT0YKIAogCi0jIFBhY2lmeSBmb250LWxvY2stbW9kZTogIgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInJlZ3Jlc3Npb24uYXQ6NDMyOiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCi1lY2hvIHJlZ3Jlc3Npb24uYXQ6NDMyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAicmVncmVzc2lvbi5hdDo0MzI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo1Mjk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWdyZXNzaW9uLmF0OjUyOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NTI5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo1Mjk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiICJyZWdyZXNzaW9uLmF0OjUyOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NTI5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NTI5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVncmVzc2lvbi5hdDo1MjkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo1MjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjUyOTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZ3Jlc3Npb24uYXQ6NTI5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NTI5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo1Mjk6IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZ3Jlc3Npb24uYXQ6NTI5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjUyOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSRhdF90cmFjZW9mZgotZWNobyAicmVncmVzc2lvbi5hdDo0MzM6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyAtbyBpbnB1dC5vIC1jIGlucHV0LmMiCi1lY2hvIHJlZ3Jlc3Npb24uYXQ6NDMzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLW8gaW5wdXQubyAtYyBpbnB1dC5jICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInJlZ3Jlc3Npb24uYXQ6NDMzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo1MzA6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJyZWdyZXNzaW9uLmF0OjUzMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo1MzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo1MzA6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyAtYyAtbyBpbnB1dC5vIGlucHV0LmMgIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgLWMgLW8gaW5wdXQubyBpbnB1dC5jICIgInJlZ3Jlc3Npb24uYXQ6NTMwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAtYyAtbyBpbnB1dC5vIGlucHV0LmMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NTMwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KLQotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Ci0KLSAgMTIzICkgIyAxMjMuIHJlZ3Jlc3Npb24uYXQ6NDQ3OiBXZWIyYyBSZXBvcnQKLSAgICBhdF9zZXR1cF9saW5lPSdyZWdyZXNzaW9uLmF0OjQ0NycKLSAgICBhdF9kZXNjPSdXZWIyYyBSZXBvcnQnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjEyMzogV2ViMmMgUmVwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjEyMy4gcmVncmVzc2lvbi5hdDo0NDc6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjc5CisjQVRfU1RBUlRfMjgwCithdF9mbl9ncm91cF9iYW5uZXIgMjgwICdyZWdyZXNzaW9uLmF0OjU0NCcgXAorICAiV2ViMmMgUmVwb3J0IiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDE3CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjgwLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogCkBAIC01NzUzNSw0MSArMTQxOTYwLDEwMSBAQAogX0FURU9GCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJyZWdyZXNzaW9uLmF0OjQ3MjogYmlzb24gLXYgaW5wdXQueSIKLWVjaG8gcmVncmVzc2lvbi5hdDo0NzIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC12IGlucHV0LnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAicmVncmVzc2lvbi5hdDo0NzI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo1Njk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtdiBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVncmVzc2lvbi5hdDo1NjkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLXYgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo1NjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NTY5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtdiBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC12IGlucHV0LnkiICJyZWdyZXNzaW9uLmF0OjU2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtdiBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjU2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjU2OTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZ3Jlc3Npb24uYXQ6NTY5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NTY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo1Njk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjU2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjU2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NTY5OiBiaXNvbiAtdiBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVncmVzc2lvbi5hdDo1NjkiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLXYgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjU2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSRhdF90cmFjZW9mZgotZWNobyAicmVncmVzc2lvbi5hdDo1OTc6IGNhdCBpbnB1dC5vdXRwdXQiCi1lY2hvIHJlZ3Jlc3Npb24uYXQ6NTk3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBjYXQgaW5wdXQub3V0cHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gPj4kYXRfc3Rkb3V0OyBlY2hvICJHcmFtbWFyCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo1NzA6IGNhdCBpbnB1dC5vdXRwdXQiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWdyZXNzaW9uLmF0OjU3MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgaW5wdXQub3V0cHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiR3JhbW1hcgogCiAgICAgMCBcJGFjY2VwdDogQ09OU1RfREVDX1BBUlQgXCRlbmQKIApAQCAtNTc1NzgsOSArMTQyMDYzLDkgQEAKICAgICAyIENPTlNUX0RFQ19MSVNUOiBDT05TVF9ERUMKICAgICAzICAgICAgICAgICAgICAgfCBDT05TVF9ERUNfTElTVCBDT05TVF9ERUMKIAotICAgIDQgQDE6IC8qIGVtcHR5ICovCisgICAgNCBcJEAxOiAvKiBlbXB0eSAqLwogCi0gICAgNSBDT05TVF9ERUM6IEAxIHVuZGVmX2lkX3RvayAnPScgY29uc3RfaWRfdG9rICc7JworICAgIDUgQ09OU1RfREVDOiBcJEAxIHVuZGVmX2lkX3RvayAnPScgY29uc3RfaWRfdG9rICc7JwogCiAKIFRlcm1pbmFscywgd2l0aCBydWxlcyB3aGVyZSB0aGV5IGFwcGVhcgpAQCAtNTc2MDMsMTI2ICsxNDIwODgsMTE0IEBACiAgICAgb24gbGVmdDogMiAzLCBvbiByaWdodDogMSAzCiBDT05TVF9ERUMgKDEwKQogICAgIG9uIGxlZnQ6IDUsIG9uIHJpZ2h0OiAyIDMKLUAxICgxMSkKK1wkQDEgKDExKQogICAgIG9uIGxlZnQ6IDQsIG9uIHJpZ2h0OiA1CiAKIAotc3RhdGUgMAorU3RhdGUgMAogCiAgICAgMCBcJGFjY2VwdDogLiBDT05TVF9ERUNfUEFSVCBcJGVuZAogCi0gICAgXCRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVsZSA0IChAMSkKKyAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDQgKFwkQDEpCiAKICAgICBDT05TVF9ERUNfUEFSVCAgZ28gdG8gc3RhdGUgMQogICAgIENPTlNUX0RFQ19MSVNUICBnbyB0byBzdGF0ZSAyCiAgICAgQ09OU1RfREVDICAgICAgIGdvIHRvIHN0YXRlIDMKLSAgICBAMSAgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNAorICAgIFwkQDEgICAgICAgICAgICAgZ28gdG8gc3RhdGUgNAogCiAKLXN0YXRlIDEKK1N0YXRlIDEKIAogICAgIDAgXCRhY2NlcHQ6IENPTlNUX0RFQ19QQVJUIC4gXCRlbmQKIAogICAgIFwkZW5kICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDUKIAogCi1zdGF0ZSAyCitTdGF0ZSAyCiAKICAgICAxIENPTlNUX0RFQ19QQVJUOiBDT05TVF9ERUNfTElTVCAuCiAgICAgMyBDT05TVF9ERUNfTElTVDogQ09OU1RfREVDX0xJU1QgLiBDT05TVF9ERUMKIAotICAgIHVuZGVmX2lkX3RvayAgcmVkdWNlIHVzaW5nIHJ1bGUgNCAoQDEpCisgICAgdW5kZWZfaWRfdG9rICByZWR1Y2UgdXNpbmcgcnVsZSA0IChcJEAxKQogICAgIFwkZGVmYXVsdCAgICAgIHJlZHVjZSB1c2luZyBydWxlIDEgKENPTlNUX0RFQ19QQVJUKQogCiAgICAgQ09OU1RfREVDICBnbyB0byBzdGF0ZSA2Ci0gICAgQDEgICAgICAgICBnbyB0byBzdGF0ZSA0CisgICAgXCRAMSAgICAgICAgZ28gdG8gc3RhdGUgNAogCiAKLXN0YXRlIDMKK1N0YXRlIDMKIAogICAgIDIgQ09OU1RfREVDX0xJU1Q6IENPTlNUX0RFQyAuCiAKICAgICBcJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDIgKENPTlNUX0RFQ19MSVNUKQogCiAKLXN0YXRlIDQKK1N0YXRlIDQKIAotICAgIDUgQ09OU1RfREVDOiBAMSAuIHVuZGVmX2lkX3RvayAnPScgY29uc3RfaWRfdG9rICc7JworICAgIDUgQ09OU1RfREVDOiBcJEAxIC4gdW5kZWZfaWRfdG9rICc9JyBjb25zdF9pZF90b2sgJzsnCiAKICAgICB1bmRlZl9pZF90b2sgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNwogCiAKLXN0YXRlIDUKK1N0YXRlIDUKIAogICAgIDAgXCRhY2NlcHQ6IENPTlNUX0RFQ19QQVJUIFwkZW5kIC4KIAogICAgIFwkZGVmYXVsdCAgYWNjZXB0CiAKIAotc3RhdGUgNgorU3RhdGUgNgogCiAgICAgMyBDT05TVF9ERUNfTElTVDogQ09OU1RfREVDX0xJU1QgQ09OU1RfREVDIC4KIAogICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMyAoQ09OU1RfREVDX0xJU1QpCiAKIAotc3RhdGUgNworU3RhdGUgNwogCi0gICAgNSBDT05TVF9ERUM6IEAxIHVuZGVmX2lkX3RvayAuICc9JyBjb25zdF9pZF90b2sgJzsnCisgICAgNSBDT05TVF9ERUM6IFwkQDEgdW5kZWZfaWRfdG9rIC4gJz0nIGNvbnN0X2lkX3RvayAnOycKIAogICAgICc9JyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA4CiAKIAotc3RhdGUgOAorU3RhdGUgOAogCi0gICAgNSBDT05TVF9ERUM6IEAxIHVuZGVmX2lkX3RvayAnPScgLiBjb25zdF9pZF90b2sgJzsnCisgICAgNSBDT05TVF9ERUM6IFwkQDEgdW5kZWZfaWRfdG9rICc9JyAuIGNvbnN0X2lkX3RvayAnOycKIAogICAgIGNvbnN0X2lkX3RvayAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSA5CiAKIAotc3RhdGUgOQorU3RhdGUgOQogCi0gICAgNSBDT05TVF9ERUM6IEAxIHVuZGVmX2lkX3RvayAnPScgY29uc3RfaWRfdG9rIC4gJzsnCisgICAgNSBDT05TVF9ERUM6IFwkQDEgdW5kZWZfaWRfdG9rICc9JyBjb25zdF9pZF90b2sgLiAnOycKIAogICAgICc7JyAgc2hpZnQsIGFuZCBnbyB0byBzdGF0ZSAxMAogCiAKLXN0YXRlIDEwCitTdGF0ZSAxMAogCi0gICAgNSBDT05TVF9ERUM6IEAxIHVuZGVmX2lkX3RvayAnPScgY29uc3RfaWRfdG9rICc7JyAuCisgICAgNSBDT05TVF9ERUM6IFwkQDEgdW5kZWZfaWRfdG9rICc9JyBjb25zdF9pZF90b2sgJzsnIC4KIAogICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgNSAoQ09OU1RfREVDKQotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAicmVncmVzc2lvbi5hdDo1OTc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo1NzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwotCi0gIDEyNCApICMgMTI0LiByZWdyZXNzaW9uLmF0OjYyNDogV2ViMmMgQWN0aW9ucwotICAgIGF0X3NldHVwX2xpbmU9J3JlZ3Jlc3Npb24uYXQ6NjI0JwotICAgIGF0X2Rlc2M9J1dlYjJjIEFjdGlvbnMnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjEyNDogV2ViMmMgQWN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjEyNC4gcmVncmVzc2lvbi5hdDo2MjQ6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjgwCisjQVRfU1RBUlRfMjgxCithdF9mbl9ncm91cF9iYW5uZXIgMjgxICdyZWdyZXNzaW9uLmF0OjcyMScgXAorICAiV2ViMmMgQWN0aW9ucyIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDE3CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjgxLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogCkBAIC01NzczNyw0NiArMTQyMjEwLDEwNSBAQAogX0FURU9GCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJyZWdyZXNzaW9uLmF0OjYzNzogYmlzb24gLXYgLW8gaW5wdXQuYyBpbnB1dC55IgotZWNobyByZWdyZXNzaW9uLmF0OjYzNyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLXYgLW8gaW5wdXQuYyBpbnB1dC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInJlZ3Jlc3Npb24uYXQ6NjM3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NzM0OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLXYgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVncmVzc2lvbi5hdDo3MzQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLXYgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjczNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo3MzQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC12IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtdiAtbyBpbnB1dC5jIGlucHV0LnkiICJyZWdyZXNzaW9uLmF0OjczNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtdiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NzM0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NzM0OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVncmVzc2lvbi5hdDo3MzQiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo3MzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjczNDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZ3Jlc3Npb24uYXQ6NzM0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NzM0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo3MzQ6IGJpc29uIC12IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZ3Jlc3Npb24uYXQ6NzM0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC12IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjczNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotIyBDaGVjayBvbmx5IHRoZSB0YWJsZXMuICBXZSBkb24ndCB1c2UgLS1uby1wYXJzZXIsIGJlY2F1c2UgaXQgaXMKLSMgc3RpbGwgdG8gYmUgaW1wbGVtZW50ZWQgaW4gdGhlIGV4cGVyaW1lbnRhbCBicmFuY2ggb2YgQmlzb24uCisKKyMgQ2hlY2sgb25seSB0aGUgdGFibGVzLgogc2VkIC1uICdzLyAgKiQvLzsvXnN0YXRpYyBjb25zdC4qXFtcXSA9LywvXn0vcCcgaW5wdXQuYyA+dGFibGVzLmMKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJyZWdyZXNzaW9uLmF0OjczNTogY2F0IHRhYmxlcy5jIgotZWNobyByZWdyZXNzaW9uLmF0OjczNSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgY2F0IHRhYmxlcy5jICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gPj4kYXRfc3Rkb3V0OyBlY2hvICJzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dHJhbnNsYXRlW10gPQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6NzM5OiBjYXQgdGFibGVzLmMiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWdyZXNzaW9uLmF0OjczOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgdGFibGVzLmMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dHJhbnNsYXRlW10gPQogewogICAgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCiAgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKQEAgLTU3ODIyLDcgKzE0MjM1NCw3IEBACiBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KIHsKICAgXCJcJGVuZFwiLCBcImVycm9yXCIsIFwiXCR1bmRlZmluZWRcIiwgXCJcXFwiaWZcXFwiXCIsIFwiXFxcImNvbnN0XFxcIlwiLCBcIlxcXCJ0aGVuXFxcIlwiLAotICBcIlxcXCJlbHNlXFxcIlwiLCBcIlwkYWNjZXB0XCIsIFwic3RhdGVtZW50XCIsIFwic3RydWN0X3N0YXRcIiwgXCJpZlwiLCBcImVsc2VcIiwgMAorICBcIlxcXCJlbHNlXFxcIlwiLCBcIlwkYWNjZXB0XCIsIFwic3RhdGVtZW50XCIsIFwic3RydWN0X3N0YXRcIiwgXCJpZlwiLCBcImVsc2VcIiwgWVlfTlVMTAogfTsKIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10gPQogewpAQCAtNTc4NjcsODUgKzE0MjM5OSw0MSBAQAogICAgICAgIDAsICAgICAzLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgNCwgICAgIDAsICAgICA2LCAgICAxMSwgICAgIDUsCiAgICAgICAgOCwgICAgIDgKIH07Ci0iIHwgJGF0X2RpZmYgLSAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJyZWdyZXNzaW9uLmF0OjczNTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjczOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Ci0KLSAgMTI1ICkgIyAxMjUuIHJlZ3Jlc3Npb24uYXQ6ODY2OiBEYW5jZXIKLSAgICBhdF9zZXR1cF9saW5lPSdyZWdyZXNzaW9uLmF0Ojg2NicKLSAgICBhdF9kZXNjPSdEYW5jZXIgJwotICAgICRhdF9xdWlldCAkRUNIT19OICIxMjU6IERhbmNlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIxMjUuIHJlZ3Jlc3Npb24uYXQ6ODY2OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCi0KLQotCi0KLQotIyBVc2luZyB5YWNjLmM/Ci0KLQotCi0KLQotCi0KLSMgeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWYgJWxvY2F0aW9uICYgJXB1cmUgJiAoJWdsciBvciAlcGFyc2UtcGFyYW0pLgotCi0jIHl5ZXJyb3IgYWx3YXlzIHNlZXMgdGhlIGxvY2F0aW9ucyAod2hlbiBhY3RpdmF0ZWQpLCBleGNlcHQgaWYKLSMgeWFjYyAmIHB1cmUgJiAhcGFyYW0uCi0KLQotIyBUaGUgaW50ZXJmYWNlIGlzIHB1cmU6IGVpdGhlciBiZWNhdXNlICVwdXJlLXBhcnNlciwgb3IgYmVjYXVzZSB3ZQotIyBhcmUgdXNpbmcgdGhlIEMrKyBwYXJzZXJzLgotCi0KLQotCi0KLQotCi0KLQorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yODEKKyNBVF9TVEFSVF8yODIKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyODIgJ3JlZ3Jlc3Npb24uYXQ6OTM2JyBcCisgICJEYW5jZXIgIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgMTcKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyODIuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiBjYXQgPmRhbmNlci55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAotJXsKLXN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci1zdGF0aWMgdm9pZCB5eWVycm9yIChjb25zdCBjaGFyICopOwotJX0KKyVjb2RlIHByb3ZpZGVzCit7CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKK30KIAogJXRva2VuIEFSUk9XIElOVkFMSUQgTlVNQkVSIFNUUklORyBEQVRBCiAlZGVmaW5lcwpAQCAtNTc5OTAsMjMgKzE0MjQ3OCwyNyBAQAogICAgfCBJTlZBTElECiAgICA7CiAlJQotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKGNvbnN0IGNoYXIgKnMpCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCiB7Ci0gIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBzKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitzdGF0aWMKK2ludCB5eWxleCAodm9pZCkKK3sKKyAgc3RhdGljIGNoYXIgY29uc3QgaW5wdXRbXSA9ICI6IjsKKyAgc3RhdGljIHNpemVfdCB0b2tudW0gPSAwOworICBpbnQgcmVzOworICA7CisgIGFzc2VydCAodG9rbnVtIDwgc2l6ZW9mIGlucHV0IC8gc2l6ZW9mIGlucHV0WzBdKTsKKyAgcmVzID0gaW5wdXRbdG9rbnVtKytdOworICA7CisgIHJldHVybiByZXM7CiB9CiAKLXN0YXRpYyBpbnQKLXl5bGV4ICh2b2lkKQotewotICBzdGF0aWMgaW50IHRva251bSA9IDA7Ci0gIHN0YXRpYyBpbnQgdG9rZW5zW10gPQotICAgIHsKLSAgICAgICc6JywgLTEKLSAgICB9OwotCi0gIHJldHVybiB0b2tlbnNbdG9rbnVtKytdOwotfQogCiBpbnQKIG1haW4gKHZvaWQpCkBAIC01ODAxNywxOTAgKzE0MjUwOSwxNzcgQEAKIAogCiAKLSRhdF90cmFjZW9mZgotZWNobyAicmVncmVzc2lvbi5hdDo4NjY6IGJpc29uIC1vIGRhbmNlci5jIGRhbmNlci55IgotZWNobyByZWdyZXNzaW9uLmF0Ojg2NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gZGFuY2VyLmMgZGFuY2VyLnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAicmVncmVzc2lvbi5hdDo4NjY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo5MzY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBkYW5jZXIuYyBkYW5jZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZ3Jlc3Npb24uYXQ6OTM2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGRhbmNlci5jIGRhbmNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjkzNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo5MzY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGRhbmNlci5jIGRhbmNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGRhbmNlci5jIGRhbmNlci55IiAicmVncmVzc2lvbi5hdDo5MzYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZGFuY2VyLmMgZGFuY2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6OTM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6OTM2OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVncmVzc2lvbi5hdDo5MzYiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo5MzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjkzNjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZ3Jlc3Npb24uYXQ6OTM2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6OTM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo5MzY6IGJpc29uIC1vIGRhbmNlci5jIGRhbmNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVncmVzc2lvbi5hdDo5MzYiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gZGFuY2VyLmMgZGFuY2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo5MzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInJlZ3Jlc3Npb24uYXQ6ODY2OiBiaXNvbiAtbyBkYW5jZXIuYyBkYW5jZXIueSIKLWVjaG8gcmVncmVzc2lvbi5hdDo4NjYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGRhbmNlci5jIGRhbmNlci55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInJlZ3Jlc3Npb24uYXQ6ODY2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisgICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo5MzY6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJyZWdyZXNzaW9uLmF0OjkzNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo5MzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo5MzY6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gZGFuY2VyIGRhbmNlci5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGRhbmNlciBkYW5jZXIuYyAkTElCUyIgInJlZ3Jlc3Npb24uYXQ6OTM2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBkYW5jZXIgZGFuY2VyLmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6OTM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAotICAgJGF0X3RyYWNlb2ZmCi1lY2hvICJyZWdyZXNzaW9uLmF0Ojg2NjogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBkYW5jZXIgZGFuY2VyLmMgXCRMSUJTIgotZWNobyByZWdyZXNzaW9uLmF0Ojg2NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGRhbmNlciBkYW5jZXIuYyAkTElCUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJyZWdyZXNzaW9uLmF0Ojg2NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6OTM2OiAgXCRQUkVQQVJTRVIgLi9kYW5jZXIiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vZGFuY2VyIiAicmVncmVzc2lvbi5hdDo5MzYiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9kYW5jZXIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6OTM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gInJlZ3Jlc3Npb24uYXQ6ODY2OiBcJFBSRVBBUlNFUiAuL2RhbmNlciIKLWVjaG8gcmVncmVzc2lvbi5hdDo4NjYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9kYW5jZXIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyA+PiRhdF9zdGRlcnI7IGVjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnOicKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gInJlZ3Jlc3Npb24uYXQ6ODY2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjkzNjogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWdyZXNzaW9uLmF0OjkzNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnOicKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6OTM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Ci0KLSAgMTI2ICkgIyAxMjYuIHJlZ3Jlc3Npb24uYXQ6ODY3OiBEYW5jZXIgJWdsci1wYXJzZXIKLSAgICBhdF9zZXR1cF9saW5lPSdyZWdyZXNzaW9uLmF0Ojg2NycKLSAgICBhdF9kZXNjPSdEYW5jZXIgJWdsci1wYXJzZXInCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjEyNjogRGFuY2VyICVnbHItcGFyc2VyICAgICAgICAgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjEyNi4gcmVncmVzc2lvbi5hdDo4Njc6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KLQotCi0KLQotCi0jIFVzaW5nIHlhY2MuYz8KLQotCi0KLQotCi0KLQotIyB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZiAlbG9jYXRpb24gJiAlcHVyZSAmICglZ2xyIG9yICVwYXJzZS1wYXJhbSkuCi0KLSMgeXllcnJvciBhbHdheXMgc2VlcyB0aGUgbG9jYXRpb25zICh3aGVuIGFjdGl2YXRlZCksIGV4Y2VwdCBpZgotIyB5YWNjICYgcHVyZSAmICFwYXJhbS4KLQotCi0jIFRoZSBpbnRlcmZhY2UgaXMgcHVyZTogZWl0aGVyIGJlY2F1c2UgJXB1cmUtcGFyc2VyLCBvciBiZWNhdXNlIHdlCi0jIGFyZSB1c2luZyB0aGUgQysrIHBhcnNlcnMuCi0KLQotCi0KLQotCi0KLQotCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzI4MgorI0FUX1NUQVJUXzI4MworYXRfZm5fZ3JvdXBfYmFubmVyIDI4MyAncmVncmVzc2lvbi5hdDo5MzcnIFwKKyAgIkRhbmNlciAlZ2xyLXBhcnNlciIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAxNworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI4My4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIGNhdCA+ZGFuY2VyLnkgPDwnX0FURU9GJwotJXsKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotICAvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KLSMgdW5kZWYgbWFsbG9jCi0jIHVuZGVmIG1lbWNtcAotIyB1bmRlZiByZWFsbG9jCi0jZW5kaWYKLSV9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCi0lewotc3RhdGljIGludCB5eWxleCAodm9pZCk7Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLXN0YXRpYyB2b2lkIHl5ZXJyb3IgKGNvbnN0IGNoYXIgKik7Ci0lfQorJWNvZGUgcHJvdmlkZXMKK3sKKyAgc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CisgIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOworfQogJWdsci1wYXJzZXIKICV0b2tlbiBBUlJPVyBJTlZBTElEIE5VTUJFUiBTVFJJTkcgREFUQQogJWRlZmluZXMKQEAgLTU4MjQ1LDIzICsxNDI3MjQsMjcgQEAKICAgIHwgSU5WQUxJRAogICAgOwogJSUKLXN0YXRpYyB2b2lkCi15eWVycm9yIChjb25zdCBjaGFyICpzKQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQogewotICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgcyk7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorI2luY2x1ZGUgPGFzc2VydC5oPgorc3RhdGljCitpbnQgeXlsZXggKHZvaWQpCit7CisgIHN0YXRpYyBjaGFyIGNvbnN0IGlucHV0W10gPSAiOiI7CisgIHN0YXRpYyBzaXplX3QgdG9rbnVtID0gMDsKKyAgaW50IHJlczsKKyAgOworICBhc3NlcnQgKHRva251bSA8IHNpemVvZiBpbnB1dCAvIHNpemVvZiBpbnB1dFswXSk7CisgIHJlcyA9IGlucHV0W3Rva251bSsrXTsKKyAgOworICByZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgaW50Ci15eWxleCAodm9pZCkKLXsKLSAgc3RhdGljIGludCB0b2tudW0gPSAwOwotICBzdGF0aWMgaW50IHRva2Vuc1tdID0KLSAgICB7Ci0gICAgICAnOicsIC0xCi0gICAgfTsKLQotICByZXR1cm4gdG9rZW5zW3Rva251bSsrXTsKLX0KIAogaW50CiBtYWluICh2b2lkKQpAQCAtNTgyNzIsMTg5ICsxNDI3NTUsMTc3IEBACiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInJlZ3Jlc3Npb24uYXQ6ODY3OiBiaXNvbiAtbyBkYW5jZXIuYyBkYW5jZXIueSIKLWVjaG8gcmVncmVzc2lvbi5hdDo4NjcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGRhbmNlci5jIGRhbmNlci55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInJlZ3Jlc3Npb24uYXQ6ODY3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6OTM3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gZGFuY2VyLmMgZGFuY2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWdyZXNzaW9uLmF0OjkzNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBkYW5jZXIuYyBkYW5jZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo5MzciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6OTM3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBkYW5jZXIuYyBkYW5jZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBkYW5jZXIuYyBkYW5jZXIueSIgInJlZ3Jlc3Npb24uYXQ6OTM3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGRhbmNlci5jIGRhbmNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjkzNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjkzNzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZ3Jlc3Npb24uYXQ6OTM3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6OTM3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo5Mzc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjkzNyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjkzNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6OTM3OiBiaXNvbiAtbyBkYW5jZXIuYyBkYW5jZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZ3Jlc3Npb24uYXQ6OTM3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGRhbmNlci5jIGRhbmNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6OTM3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJyZWdyZXNzaW9uLmF0Ojg2NzogYmlzb24gLW8gZGFuY2VyLmMgZGFuY2VyLnkiCi1lY2hvIHJlZ3Jlc3Npb24uYXQ6ODY3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtbyBkYW5jZXIuYyBkYW5jZXIueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJyZWdyZXNzaW9uLmF0Ojg2NzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgorICAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6OTM3OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAicmVncmVzc2lvbi5hdDo5MzciCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6OTM3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6OTM3OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGRhbmNlciBkYW5jZXIuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBkYW5jZXIgZGFuY2VyLmMgJExJQlMiICJyZWdyZXNzaW9uLmF0OjkzNyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gZGFuY2VyIGRhbmNlci5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjkzNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSAgICRhdF90cmFjZW9mZgotZWNobyAicmVncmVzc2lvbi5hdDo4Njc6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gZGFuY2VyIGRhbmNlci5jIFwkTElCUyIKLWVjaG8gcmVncmVzc2lvbi5hdDo4NjcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBkYW5jZXIgZGFuY2VyLmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAicmVncmVzc2lvbi5hdDo4Njc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjkzNzogIFwkUFJFUEFSU0VSIC4vZGFuY2VyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2RhbmNlciIgInJlZ3Jlc3Npb24uYXQ6OTM3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vZGFuY2VyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjkzNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJyZWdyZXNzaW9uLmF0Ojg2NzogXCRQUkVQQVJTRVIgLi9kYW5jZXIiCi1lY2hvIHJlZ3Jlc3Npb24uYXQ6ODY3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vZGFuY2VyICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gPj4kYXRfc3RkZXJyOyBlY2hvICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJzonCi0iIHwgJGF0X2RpZmYgLSAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDEpIDs7Ci0gICAqKSBlY2hvICJyZWdyZXNzaW9uLmF0Ojg2NzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAxIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo5Mzc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVncmVzc2lvbi5hdDo5MzciCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJzonCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjkzNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwotCi0gIDEyNyApICMgMTI3LiByZWdyZXNzaW9uLmF0Ojg2ODogRGFuY2VyICVza2VsZXRvbiAibGFscjEuY2MiCi0gICAgYXRfc2V0dXBfbGluZT0ncmVncmVzc2lvbi5hdDo4NjgnCi0gICAgYXRfZGVzYz0nRGFuY2VyICVza2VsZXRvbiAibGFscjEuY2MiJwotICAgICRhdF9xdWlldCAkRUNIT19OICIxMjc6IERhbmNlciAlc2tlbGV0b24gImxhbHIxLmNjIiAgICAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIxMjcuIHJlZ3Jlc3Npb24uYXQ6ODY4OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCi0KLQotCi0KLQotIyBVc2luZyB5YWNjLmM/Ci0KLQotCi0KLQotCi0KLSMgeXllcnJvciByZWNlaXZlcyB0aGUgbG9jYXRpb24gaWYgJWxvY2F0aW9uICYgJXB1cmUgJiAoJWdsciBvciAlcGFyc2UtcGFyYW0pLgotCi0jIHl5ZXJyb3IgYWx3YXlzIHNlZXMgdGhlIGxvY2F0aW9ucyAod2hlbiBhY3RpdmF0ZWQpLCBleGNlcHQgaWYKLSMgeWFjYyAmIHB1cmUgJiAhcGFyYW0uCi0KLQotIyBUaGUgaW50ZXJmYWNlIGlzIHB1cmU6IGVpdGhlciBiZWNhdXNlICVwdXJlLXBhcnNlciwgb3IgYmVjYXVzZSB3ZQotIyBhcmUgdXNpbmcgdGhlIEMrKyBwYXJzZXJzLgotCi0KLQotCi0KLQotCi0KLQorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yODMKKyNBVF9TVEFSVF8yODQKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyODQgJ3JlZ3Jlc3Npb24uYXQ6OTM4JyBcCisgICJEYW5jZXIgJXNrZWxldG9uIFwibGFscjEuY2NcIiIgIiAgICAgICAgICAgICAgICAgICAgIiAxNworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI4NC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIGNhdCA+ZGFuY2VyLnkgPDwnX0FURU9GJwotJXsKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotICAvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KLSMgdW5kZWYgbWFsbG9jCi0jIHVuZGVmIG1lbWNtcAotIyB1bmRlZiByZWFsbG9jCi0jZW5kaWYKLSV9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCi0lewotc3RhdGljIGludCB5eWxleCAoaW50ICopOworJWNvZGUgcHJvdmlkZXMKK3sKIAotJX0KKyAgc3RhdGljIGludCB5eWxleCAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHApOworfQogJXNrZWxldG9uICJsYWxyMS5jYyIKICV0b2tlbiBBUlJPVyBJTlZBTElEIE5VTUJFUiBTVFJJTkcgREFUQQogJWRlZmluZXMKQEAgLTU4NDk5LDM0ICsxNDI5NzAsMzcgQEAKICAgIHwgSU5WQUxJRAogICAgOwogJSUKLS8qIEEgQysrIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gKi8KKy8qIEEgQysrIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCiB2b2lkCi15eTo6cGFyc2VyOjplcnJvciAoY29uc3QgbG9jYXRpb24mLCBjb25zdCBzdGQ6OnN0cmluZyYgbSkKK3l5OjpwYXJzZXI6OmVycm9yIChjb25zdCBsb2NhdGlvbl90eXBlJiBsLCBjb25zdCBzdGQ6OnN0cmluZyYgbSkKIHsKKyAgKHZvaWQpIGw7CiAgIHN0ZDo6Y2VyciA8PCBtIDw8IHN0ZDo6ZW5kbDsKIH0KLQorI2luY2x1ZGUgPGFzc2VydC5oPgorc3RhdGljCitpbnQgeXlsZXggKHl5OjpwYXJzZXI6OnNlbWFudGljX3R5cGUgKmx2YWxwKQoreworICBzdGF0aWMgY2hhciBjb25zdCBpbnB1dFtdID0gIjoiOworICBzdGF0aWMgc2l6ZV90IHRva251bSA9IDA7CisgIGludCByZXM7CisgICh2b2lkKSBsdmFscDs7CisgIGFzc2VydCAodG9rbnVtIDwgc2l6ZW9mIGlucHV0IC8gc2l6ZW9mIGlucHV0WzBdKTsKKyAgcmVzID0gaW5wdXRbdG9rbnVtKytdOworICA7CisgIHJldHVybiByZXM7Cit9CiBpbnQKIHl5cGFyc2UgKCkKIHsKICAgeXk6OnBhcnNlciBwYXJzZXI7Ci0gIHBhcnNlci5zZXRfZGVidWdfbGV2ZWwgKCEhWVlERUJVRyk7CisjaWYgWVlERUJVRworICBwYXJzZXIuc2V0X2RlYnVnX2xldmVsIChZWURFQlVHKTsKKyNlbmRpZgogICByZXR1cm4gcGFyc2VyLnBhcnNlICgpOwogfQogCiAKLXN0YXRpYyBpbnQKLXl5bGV4IChpbnQgKmx2YWwpCi17Ci0gIHN0YXRpYyBpbnQgdG9rbnVtID0gMDsKLSAgc3RhdGljIGludCB0b2tlbnNbXSA9Ci0gICAgewotICAgICAgJzonLCAtMQotICAgIH07Ci0gICpsdmFsID0gMDsgLyogUGFjaWZ5IEdDQy4gICovCi0gIHJldHVybiB0b2tlbnNbdG9rbnVtKytdOwotfQotCiBpbnQKIG1haW4gKHZvaWQpCiB7CkBAIC01ODUzNiwyMTUgKzE0MzAxMCwxNzggQEAKIAogCiAKLSRhdF90cmFjZW9mZgotZWNobyAicmVncmVzc2lvbi5hdDo4Njg6IGJpc29uIC1vIGRhbmNlci5jIGRhbmNlci55IgotZWNobyByZWdyZXNzaW9uLmF0Ojg2OCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gZGFuY2VyLmMgZGFuY2VyLnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAicmVncmVzc2lvbi5hdDo4Njg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo5Mzg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBkYW5jZXIuY2MgZGFuY2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWdyZXNzaW9uLmF0OjkzOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBkYW5jZXIuY2MgZGFuY2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6OTM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjkzODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZGFuY2VyLmNjIGRhbmNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGRhbmNlci5jYyBkYW5jZXIueSIgInJlZ3Jlc3Npb24uYXQ6OTM4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGRhbmNlci5jYyBkYW5jZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo5MzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo5Mzg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjkzOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjkzOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6OTM4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVncmVzc2lvbi5hdDo5MzgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo5MzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKLQotJGF0X3RyYWNlb24KLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJyZWdyZXNzaW9uLmF0Ojg2ODogYmlzb24gLW8gZGFuY2VyLmNjIGRhbmNlci55IgotZWNobyByZWdyZXNzaW9uLmF0Ojg2OCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gZGFuY2VyLmNjIGRhbmNlci55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gInJlZ3Jlc3Npb24uYXQ6ODY4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KLQotCi0kYXRfdHJhY2VvZmYKLWVjaG8gInJlZ3Jlc3Npb24uYXQ6ODY4OiBcJEJJU09OX0NYWF9XT1JLUyIKLWVjaG8gcmVncmVzc2lvbi5hdDo4NjggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRCSVNPTl9DWFhfV09SS1MgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAicmVncmVzc2lvbi5hdDo4Njg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gInJlZ3Jlc3Npb24uYXQ6ODY4OiBcJENYWCBcJENYWEZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGRhbmNlciBkYW5jZXIuY2MgXCRMSUJTIgotZWNobyByZWdyZXNzaW9uLmF0Ojg2OCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGRhbmNlciBkYW5jZXIuY2MgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAicmVncmVzc2lvbi5hdDo4Njg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gInJlZ3Jlc3Npb24uYXQ6ODY4OiBcJFBSRVBBUlNFUiAuL2RhbmNlciIKLWVjaG8gcmVncmVzc2lvbi5hdDo4NjggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi9kYW5jZXIgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyA+PiRhdF9zdGRlcnI7IGVjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnOicKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMSkgOzsKLSAgICopIGVjaG8gInJlZ3Jlc3Npb24uYXQ6ODY4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDEiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjkzODogYmlzb24gLW8gZGFuY2VyLmNjIGRhbmNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVncmVzc2lvbi5hdDo5MzgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gZGFuY2VyLmNjIGRhbmNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6OTM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjkzODogXCRCSVNPTl9DWFhfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DWFhfV09SS1MiICJyZWdyZXNzaW9uLmF0OjkzOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ1hYX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjkzOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjkzODogXCRDWFggXCRDWFhGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBkYW5jZXIgZGFuY2VyLmNjIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGRhbmNlciBkYW5jZXIuY2MgJExJQlMiICJyZWdyZXNzaW9uLmF0OjkzOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gZGFuY2VyIGRhbmNlci5jYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDo5MzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjkzODogIFwkUFJFUEFSU0VSIC4vZGFuY2VyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2RhbmNlciIgInJlZ3Jlc3Npb24uYXQ6OTM4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vZGFuY2VyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjkzOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjkzODogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWdyZXNzaW9uLmF0OjkzOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnOicKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6OTM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Ci0KLSAgMTI4ICkgIyAxMjguIHJlZ3Jlc3Npb24uYXQ6OTYzOiBFeHBlY3RpbmcgdHdvIHRva2VucwotICAgIGF0X3NldHVwX2xpbmU9J3JlZ3Jlc3Npb24uYXQ6OTYzJwotICAgIGF0X2Rlc2M9J0V4cGVjdGluZyB0d28gdG9rZW5zICcKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiMTI4OiBFeHBlY3RpbmcgdHdvIHRva2VucyAgICAgICAgICAgICAgICAgICAgICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiMTI4LiByZWdyZXNzaW9uLmF0Ojk2MzogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgotCi0KLQotCi0KLSMgVXNpbmcgeWFjYy5jPwotCi0KLQotCi0KLQotCi0jIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmICVsb2NhdGlvbiAmICVwdXJlICYgKCVnbHIgb3IgJXBhcnNlLXBhcmFtKS4KLQotIyB5eWVycm9yIGFsd2F5cyBzZWVzIHRoZSBsb2NhdGlvbnMgKHdoZW4gYWN0aXZhdGVkKSwgZXhjZXB0IGlmCi0jIHlhY2MgJiBwdXJlICYgIXBhcmFtLgotCi0KLSMgVGhlIGludGVyZmFjZSBpcyBwdXJlOiBlaXRoZXIgYmVjYXVzZSAlcHVyZS1wYXJzZXIsIG9yIGJlY2F1c2Ugd2UKLSMgYXJlIHVzaW5nIHRoZSBDKysgcGFyc2Vycy4KLQotCi0KLQotCi0KLQotCi0KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjg0CisjQVRfU1RBUlRfMjg1CithdF9mbl9ncm91cF9iYW5uZXIgMjg1ICdyZWdyZXNzaW9uLmF0OjEwMjAnIFwKKyAgIkV4cGVjdGluZyB0d28gdG9rZW5zICIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIiAxNworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI4NS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIGNhdCA+ZXhwZWN0Mi55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogJXsKIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOwogI2luY2x1ZGUgPHN0ZGlvLmg+Ci1zdGF0aWMgdm9pZCB5eWVycm9yIChjb25zdCBjaGFyICopOworI2luY2x1ZGUgPHN0ZGxpYi5oPgorc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CiAlfQogCiAlZGVmaW5lcwpAQCAtNTg3NjEsMjEgKzE0MzE5OCwyNiBAQAogdDogQSB8IEI7CiAKICUlCi1zdGF0aWMgdm9pZAoteXllcnJvciAoY29uc3QgY2hhciAqcykKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKIHsKLSAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIHMpOworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKIH0KIAorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CiBzdGF0aWMgaW50CiB5eWxleCAodm9pZCkKIHsKLSAgc3RhdGljIGludCB0b2tudW0gPSAwOwotICBzdGF0aWMgaW50IHRva2Vuc1tdID0KKyAgc3RhdGljIGludCBjb25zdCB0b2tlbnNbXSA9CiAgICAgewogICAgICAgMTAwMCwgJysnLCAnKycsIC0xCiAgICAgfTsKKyAgc3RhdGljIHNpemVfdCB0b2tudW07CiAKKyAgYXNzZXJ0ICh0b2tudW0gPCBzaXplb2YgdG9rZW5zIC8gc2l6ZW9mICp0b2tlbnMpOwogICByZXR1cm4gdG9rZW5zW3Rva251bSsrXTsKIH0KIApAQCAtNTg3ODgsMTg5ICsxNDMyMzAsMTc3IEBACiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInJlZ3Jlc3Npb24uYXQ6OTYzOiBiaXNvbiAtbyBleHBlY3QyLmMgZXhwZWN0Mi55IgotZWNobyByZWdyZXNzaW9uLmF0Ojk2MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gZXhwZWN0Mi5jIGV4cGVjdDIueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJyZWdyZXNzaW9uLmF0Ojk2MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEwMjA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBleHBlY3QyLmMgZXhwZWN0Mi55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVncmVzc2lvbi5hdDoxMDIwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGV4cGVjdDIuYyBleHBlY3QyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTAyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMDIwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBleHBlY3QyLmMgZXhwZWN0Mi55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGV4cGVjdDIuYyBleHBlY3QyLnkiICJyZWdyZXNzaW9uLmF0OjEwMjAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZXhwZWN0Mi5jIGV4cGVjdDIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMDIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTAyMDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZ3Jlc3Npb24uYXQ6MTAyMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEwMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEwMjA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjEwMjAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMDIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMDIwOiBiaXNvbiAtbyBleHBlY3QyLmMgZXhwZWN0Mi55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVncmVzc2lvbi5hdDoxMDIwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGV4cGVjdDIuYyBleHBlY3QyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMDIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJyZWdyZXNzaW9uLmF0Ojk2MzogYmlzb24gLW8gZXhwZWN0Mi5jIGV4cGVjdDIueSIKLWVjaG8gcmVncmVzc2lvbi5hdDo5NjMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGV4cGVjdDIuYyBleHBlY3QyLnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAicmVncmVzc2lvbi5hdDo5NjM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEwMjA6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJyZWdyZXNzaW9uLmF0OjEwMjAiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTAyMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEwMjA6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gZXhwZWN0MiBleHBlY3QyLmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gZXhwZWN0MiBleHBlY3QyLmMgJExJQlMiICJyZWdyZXNzaW9uLmF0OjEwMjAiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGV4cGVjdDIgZXhwZWN0Mi5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEwMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCi0gICAkYXRfdHJhY2VvZmYKLWVjaG8gInJlZ3Jlc3Npb24uYXQ6OTYzOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGV4cGVjdDIgZXhwZWN0Mi5jIFwkTElCUyIKLWVjaG8gcmVncmVzc2lvbi5hdDo5NjMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBleHBlY3QyIGV4cGVjdDIuYyAkTElCUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJyZWdyZXNzaW9uLmF0Ojk2MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTAyMDogIFwkUFJFUEFSU0VSIC4vZXhwZWN0MiIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9leHBlY3QyIiAicmVncmVzc2lvbi5hdDoxMDIwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vZXhwZWN0MgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMDIwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gInJlZ3Jlc3Npb24uYXQ6OTYzOiBcJFBSRVBBUlNFUiAuL2V4cGVjdDIiCi1lY2hvIHJlZ3Jlc3Npb24uYXQ6OTYzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vZXhwZWN0MiApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvID4+JGF0X3N0ZGVycjsgZWNobyAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJywgZXhwZWN0aW5nIEEgb3IgQgotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAicmVncmVzc2lvbi5hdDo5NjM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTAyMDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWdyZXNzaW9uLmF0OjEwMjAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnLCBleHBlY3RpbmcgQSBvciBCCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEwMjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICAxMjkgKSAjIDEyOS4gcmVncmVzc2lvbi5hdDo5NjQ6IEV4cGVjdGluZyB0d28gdG9rZW5zICVnbHItcGFyc2VyCi0gICAgYXRfc2V0dXBfbGluZT0ncmVncmVzc2lvbi5hdDo5NjQnCi0gICAgYXRfZGVzYz0nRXhwZWN0aW5nIHR3byB0b2tlbnMgJWdsci1wYXJzZXInCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjEyOTogRXhwZWN0aW5nIHR3byB0b2tlbnMgJWdsci1wYXJzZXIgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjEyOS4gcmVncmVzc2lvbi5hdDo5NjQ6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KLQotCi0KLQotCi0jIFVzaW5nIHlhY2MuYz8KLQotCi0KLQotCi0KLQotIyB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZiAlbG9jYXRpb24gJiAlcHVyZSAmICglZ2xyIG9yICVwYXJzZS1wYXJhbSkuCi0KLSMgeXllcnJvciBhbHdheXMgc2VlcyB0aGUgbG9jYXRpb25zICh3aGVuIGFjdGl2YXRlZCksIGV4Y2VwdCBpZgotIyB5YWNjICYgcHVyZSAmICFwYXJhbS4KLQotCi0jIFRoZSBpbnRlcmZhY2UgaXMgcHVyZTogZWl0aGVyIGJlY2F1c2UgJXB1cmUtcGFyc2VyLCBvciBiZWNhdXNlIHdlCi0jIGFyZSB1c2luZyB0aGUgQysrIHBhcnNlcnMuCi0KLQotCi0KLQotCi0KLQotCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzI4NQorI0FUX1NUQVJUXzI4NgorYXRfZm5fZ3JvdXBfYmFubmVyIDI4NiAncmVncmVzc2lvbi5hdDoxMDIxJyBcCisgICJFeHBlY3RpbmcgdHdvIHRva2VucyAlZ2xyLXBhcnNlciIgIiAgICAgICAgICAgICAgICIgMTcKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyODYuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiBjYXQgPmV4cGVjdDIueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKICV7CiBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKICNpbmNsdWRlIDxzdGRpby5oPgotc3RhdGljIHZvaWQgeXllcnJvciAoY29uc3QgY2hhciAqKTsKKyNpbmNsdWRlIDxzdGRsaWIuaD4KK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOwogJX0KICVnbHItcGFyc2VyCiAlZGVmaW5lcwpAQCAtNTg5ODcsMjEgKzE0MzQxNywyNiBAQAogdDogQSB8IEI7CiAKICUlCi1zdGF0aWMgdm9pZAoteXllcnJvciAoY29uc3QgY2hhciAqcykKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKIHsKLSAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIHMpOworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKIH0KIAorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CiBzdGF0aWMgaW50CiB5eWxleCAodm9pZCkKIHsKLSAgc3RhdGljIGludCB0b2tudW0gPSAwOwotICBzdGF0aWMgaW50IHRva2Vuc1tdID0KKyAgc3RhdGljIGludCBjb25zdCB0b2tlbnNbXSA9CiAgICAgewogICAgICAgMTAwMCwgJysnLCAnKycsIC0xCiAgICAgfTsKKyAgc3RhdGljIHNpemVfdCB0b2tudW07CiAKKyAgYXNzZXJ0ICh0b2tudW0gPCBzaXplb2YgdG9rZW5zIC8gc2l6ZW9mICp0b2tlbnMpOwogICByZXR1cm4gdG9rZW5zW3Rva251bSsrXTsKIH0KIApAQCAtNTkwMTQsMTg0ICsxNDM0NDksMTcxIEBACiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gInJlZ3Jlc3Npb24uYXQ6OTY0OiBiaXNvbiAtbyBleHBlY3QyLmMgZXhwZWN0Mi55IgotZWNobyByZWdyZXNzaW9uLmF0Ojk2NCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gZXhwZWN0Mi5jIGV4cGVjdDIueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJyZWdyZXNzaW9uLmF0Ojk2NDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEwMjE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBleHBlY3QyLmMgZXhwZWN0Mi55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVncmVzc2lvbi5hdDoxMDIxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGV4cGVjdDIuYyBleHBlY3QyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTAyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMDIxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBleHBlY3QyLmMgZXhwZWN0Mi55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGV4cGVjdDIuYyBleHBlY3QyLnkiICJyZWdyZXNzaW9uLmF0OjEwMjEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZXhwZWN0Mi5jIGV4cGVjdDIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMDIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTAyMTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZ3Jlc3Npb24uYXQ6MTAyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEwMjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEwMjE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjEwMjEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMDIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMDIxOiBiaXNvbiAtbyBleHBlY3QyLmMgZXhwZWN0Mi55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVncmVzc2lvbi5hdDoxMDIxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGV4cGVjdDIuYyBleHBlY3QyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMDIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJyZWdyZXNzaW9uLmF0Ojk2NDogYmlzb24gLW8gZXhwZWN0Mi5jIGV4cGVjdDIueSIKLWVjaG8gcmVncmVzc2lvbi5hdDo5NjQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGV4cGVjdDIuYyBleHBlY3QyLnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAicmVncmVzc2lvbi5hdDo5NjQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEwMjE6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJyZWdyZXNzaW9uLmF0OjEwMjEiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTAyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEwMjE6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gZXhwZWN0MiBleHBlY3QyLmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gZXhwZWN0MiBleHBlY3QyLmMgJExJQlMiICJyZWdyZXNzaW9uLmF0OjEwMjEiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGV4cGVjdDIgZXhwZWN0Mi5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEwMjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCi0gICAkYXRfdHJhY2VvZmYKLWVjaG8gInJlZ3Jlc3Npb24uYXQ6OTY0OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGV4cGVjdDIgZXhwZWN0Mi5jIFwkTElCUyIKLWVjaG8gcmVncmVzc2lvbi5hdDo5NjQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBleHBlY3QyIGV4cGVjdDIuYyAkTElCUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJyZWdyZXNzaW9uLmF0Ojk2NDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTAyMTogIFwkUFJFUEFSU0VSIC4vZXhwZWN0MiIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9leHBlY3QyIiAicmVncmVzc2lvbi5hdDoxMDIxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vZXhwZWN0MgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMDIxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gInJlZ3Jlc3Npb24uYXQ6OTY0OiBcJFBSRVBBUlNFUiAuL2V4cGVjdDIiCi1lY2hvIHJlZ3Jlc3Npb24uYXQ6OTY0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vZXhwZWN0MiApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvID4+JGF0X3N0ZGVycjsgZWNobyAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJywgZXhwZWN0aW5nIEEgb3IgQgotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAicmVncmVzc2lvbi5hdDo5NjQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTAyMTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWdyZXNzaW9uLmF0OjEwMjEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnLCBleHBlY3RpbmcgQSBvciBCCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEwMjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICAxMzAgKSAjIDEzMC4gcmVncmVzc2lvbi5hdDo5NjU6IEV4cGVjdGluZyB0d28gdG9rZW5zICVza2VsZXRvbiAibGFscjEuY2MiCi0gICAgYXRfc2V0dXBfbGluZT0ncmVncmVzc2lvbi5hdDo5NjUnCi0gICAgYXRfZGVzYz0nRXhwZWN0aW5nIHR3byB0b2tlbnMgJXNrZWxldG9uICJsYWxyMS5jYyInCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjEzMDogRXhwZWN0aW5nIHR3byB0b2tlbnMgJXNrZWxldG9uICJsYWxyMS5jYyIgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjEzMC4gcmVncmVzc2lvbi5hdDo5NjU6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KLQotCi0KLQotCi0jIFVzaW5nIHlhY2MuYz8KLQotCi0KLQotCi0KLQotIyB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZiAlbG9jYXRpb24gJiAlcHVyZSAmICglZ2xyIG9yICVwYXJzZS1wYXJhbSkuCi0KLSMgeXllcnJvciBhbHdheXMgc2VlcyB0aGUgbG9jYXRpb25zICh3aGVuIGFjdGl2YXRlZCksIGV4Y2VwdCBpZgotIyB5YWNjICYgcHVyZSAmICFwYXJhbS4KLQotCi0jIFRoZSBpbnRlcmZhY2UgaXMgcHVyZTogZWl0aGVyIGJlY2F1c2UgJXB1cmUtcGFyc2VyLCBvciBiZWNhdXNlIHdlCi0jIGFyZSB1c2luZyB0aGUgQysrIHBhcnNlcnMuCi0KLQotCi0KLQotCi0KLQotCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzI4NgorI0FUX1NUQVJUXzI4NworYXRfZm5fZ3JvdXBfYmFubmVyIDI4NyAncmVncmVzc2lvbi5hdDoxMDIyJyBcCisgICJFeHBlY3RpbmcgdHdvIHRva2VucyAlc2tlbGV0b24gXCJsYWxyMS5jY1wiIiAiICAgICAgIiAxNworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI4Ny4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIGNhdCA+ZXhwZWN0Mi55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogJXsKIHN0YXRpYyBpbnQgeXlsZXggKGludCAqKTsKQEAgLTU5MjEyLDEzICsxNDM2MzQsMTMgQEAKIHQ6IEEgfCBCOwogCiAlJQotLyogQSBDKysgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAqLworLyogQSBDKysgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KIHZvaWQKLXl5OjpwYXJzZXI6OmVycm9yIChjb25zdCBsb2NhdGlvbiYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtKQoreXk6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGxvY2F0aW9uX3R5cGUmIGwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtKQogeworICAodm9pZCkgbDsKICAgc3RkOjpjZXJyIDw8IG0gPDwgc3RkOjplbmRsOwogfQotCiBpbnQKIHl5cGFyc2UgKCkKIHsKQEAgLTU5MjI3LDE1ICsxNDM2NDksMTcgQEAKIH0KIAogCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CiBzdGF0aWMgaW50CiB5eWxleCAoaW50ICpsdmFsKQogewotICBzdGF0aWMgaW50IHRva251bSA9IDA7Ci0gIHN0YXRpYyBpbnQgdG9rZW5zW10gPQorICBzdGF0aWMgaW50IGNvbnN0IHRva2Vuc1tdID0KICAgICB7CiAgICAgICAxMDAwLCAnKycsICcrJywgLTEKICAgICB9OworICBzdGF0aWMgc2l6ZV90IHRva251bTsKICAgKmx2YWwgPSAwOyAvKiBQYWNpZnkgR0NDLiAgKi8KKyAgYXNzZXJ0ICh0b2tudW0gPCBzaXplb2YgdG9rZW5zIC8gc2l6ZW9mICp0b2tlbnMpOwogICByZXR1cm4gdG9rZW5zW3Rva251bSsrXTsKIH0KIApAQCAtNTkyNDgsMTc3ICsxNDM2NzIsNDI5NyBAQAogCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJyZWdyZXNzaW9uLmF0Ojk2NTogYmlzb24gLW8gZXhwZWN0Mi5jIGV4cGVjdDIueSIKLWVjaG8gcmVncmVzc2lvbi5hdDo5NjUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGV4cGVjdDIuYyBleHBlY3QyLnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAicmVncmVzc2lvbi5hdDo5NjU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMDIyOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gZXhwZWN0Mi5jYyBleHBlY3QyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWdyZXNzaW9uLmF0OjEwMjIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gZXhwZWN0Mi5jYyBleHBlY3QyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTAyMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMDIyOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBleHBlY3QyLmNjIGV4cGVjdDIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBleHBlY3QyLmNjIGV4cGVjdDIueSIgInJlZ3Jlc3Npb24uYXQ6MTAyMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBleHBlY3QyLmNjIGV4cGVjdDIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMDIyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTAyMjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZ3Jlc3Npb24uYXQ6MTAyMiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEwMjIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEwMjI6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjEwMjIiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMDIyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCi0KLSRhdF90cmFjZW9uCi0KLSRhdF90cmFjZW9mZgotZWNobyAicmVncmVzc2lvbi5hdDo5NjU6IGJpc29uIC1vIGV4cGVjdDIuY2MgZXhwZWN0Mi55IgotZWNobyByZWdyZXNzaW9uLmF0Ojk2NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gZXhwZWN0Mi5jYyBleHBlY3QyLnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAicmVncmVzc2lvbi5hdDo5NjU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0KLSRhdF90cmFjZW9mZgotZWNobyAicmVncmVzc2lvbi5hdDo5NjU6IFwkQklTT05fQ1hYX1dPUktTIgotZWNobyByZWdyZXNzaW9uLmF0Ojk2NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJEJJU09OX0NYWF9XT1JLUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJyZWdyZXNzaW9uLmF0Ojk2NTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCi0KLSRhdF90cmFjZW9mZgotZWNobyAicmVncmVzc2lvbi5hdDo5NjU6IFwkQ1hYIFwkQ1hYRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gZXhwZWN0MiBleHBlY3QyLmNjIFwkTElCUyIKLWVjaG8gcmVncmVzc2lvbi5hdDo5NjUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBleHBlY3QyIGV4cGVjdDIuY2MgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAicmVncmVzc2lvbi5hdDo5NjU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gInJlZ3Jlc3Npb24uYXQ6OTY1OiBcJFBSRVBBUlNFUiAuL2V4cGVjdDIiCi1lY2hvIHJlZ3Jlc3Npb24uYXQ6OTY1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vZXhwZWN0MiApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvID4+JGF0X3N0ZGVycjsgZWNobyAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJywgZXhwZWN0aW5nIEEgb3IgQgotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAxKSA7OwotICAgKikgZWNobyAicmVncmVzc2lvbi5hdDo5NjU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMSIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTAyMjogYmlzb24gLW8gZXhwZWN0Mi5jYyBleHBlY3QyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWdyZXNzaW9uLmF0OjEwMjIiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gZXhwZWN0Mi5jYyBleHBlY3QyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMDIyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEwMjI6IFwkQklTT05fQ1hYX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ1hYX1dPUktTIiAicmVncmVzc2lvbi5hdDoxMDIyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DWFhfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTAyMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEwMjI6IFwkQ1hYIFwkQ1hYRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gZXhwZWN0MiBleHBlY3QyLmNjIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGV4cGVjdDIgZXhwZWN0Mi5jYyAkTElCUyIgInJlZ3Jlc3Npb24uYXQ6MTAyMiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gZXhwZWN0MiBleHBlY3QyLmNjICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEwMjIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEwMjI6ICBcJFBSRVBBUlNFUiAuL2V4cGVjdDIiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vZXhwZWN0MiIgInJlZ3Jlc3Npb24uYXQ6MTAyMiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2V4cGVjdDIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTAyMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEwMjI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVncmVzc2lvbi5hdDoxMDIyIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJywgZXhwZWN0aW5nIEEgb3IgQgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMDIyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjg3CisjQVRfU1RBUlRfMjg4CithdF9mbl9ncm91cF9iYW5uZXIgMjg4ICdyZWdyZXNzaW9uLmF0OjEwMzAnIFwKKyAgIkJyYWNlZCBjb2RlIGluIGRlY2xhcmF0aW9uIGluIHJ1bGVzIHNlY3Rpb24iICIgICAgIiAxNworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI4OC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKKyMgQmlzb24gb25jZSBtaXN0b29rIGJyYWNlZCBjb2RlIGluIGEgZGVjbGFyYXRpb24gaW4gdGhlIHJ1bGVzIHNlY3Rpb24gdG8gYmUgYQorIyBydWxlIGFjdGlvbi4KIAorY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKKyV7CisjaW5jbHVkZSA8c3RkaW8uaD4KK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworc3RhdGljIGludCB5eWxleCAodm9pZCk7CislfQogCislZXJyb3ItdmVyYm9zZQogCislJQogCitzdGFydDoKKyAgeworICAgIHByaW50ZiAoIkJpc29uIHdvdWxkIG9uY2UgY29udmVydCB0aGlzIGFjdGlvbiB0byBhIG1pZHJ1bGUgYmVjYXVzZSBvZiB0aGUiCisJICAgICIgc3Vic2VxdWVudCBicmFjZWQgY29kZS5cbiIpOworICB9CisgIDsKIAorJWRlc3RydWN0b3IgeyBmcHJpbnRmIChzdGRlcnIsICJERVNUUlVDVE9SXG4iKTsgfSAnYSc7CislcHJpbnRlciB7IGZwcmludGYgKHl5b3V0cHV0LCAiUFJJTlRFUiIpOyB9ICdhJzsKIAorJSUKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitzdGF0aWMKK2ludCB5eWxleCAodm9pZCkKK3sKKyAgc3RhdGljIGNoYXIgY29uc3QgaW5wdXRbXSA9ICJhIjsKKyAgc3RhdGljIHNpemVfdCB0b2tudW0gPSAwOworICBpbnQgcmVzOworICA7CisgIGFzc2VydCAodG9rbnVtIDwgc2l6ZW9mIGlucHV0IC8gc2l6ZW9mIGlucHV0WzBdKTsKKyAgcmVzID0gaW5wdXRbdG9rbnVtKytdOworICA7CisgIHJldHVybiByZXM7Cit9CiAKLQotCi0KLQotCi0KLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwotCi0KLSAgYmFubmVyLTE2ICkgIyBCYW5uZXIgMTYuIGMrKy5hdDoxOQotICAgIGNhdCA8PFxfQVRFT0YKLQotQysrIEZlYXR1cmVzLgotCitpbnQKK21haW4gKHZvaWQpCit7CisgIHl5ZGVidWcgPSAxOworICByZXR1cm4gIXl5cGFyc2UgKCk7Cit9CiBfQVRFT0YKLSAgICA7OwogCi0gIDEzMSApICMgMTMxLiBjKysuYXQ6MTAyOiBEb3h5Z2VuIFB1YmxpYyBEb2N1bWVudGF0aW9uCi0gICAgYXRfc2V0dXBfbGluZT0nYysrLmF0OjEwMicKLSAgICBhdF9kZXNjPSdEb3h5Z2VuIFB1YmxpYyBEb2N1bWVudGF0aW9uJwotICAgICRhdF9xdWlldCAkRUNIT19OICIxMzE6IERveHlnZW4gUHVibGljIERvY3VtZW50YXRpb24gICAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIxMzEuIGMrKy5hdDoxMDI6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMDY5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLXQgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVncmVzc2lvbi5hdDoxMDY5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC10IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMDY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMDY5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLXQgLW8gaW5wdXQuYyBpbnB1dC55IiAicmVncmVzc2lvbi5hdDoxMDY5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC10IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMDY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTA2OTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZ3Jlc3Npb24uYXQ6MTA2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEwNjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEwNjk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjEwNjkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMDY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMDY5OiBiaXNvbiAtdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWdyZXNzaW9uLmF0OjEwNjkiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLXQgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTA2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTA3MDogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgInJlZ3Jlc3Npb24uYXQ6MTA3MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMDcwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTA3MDogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJyZWdyZXNzaW9uLmF0OjEwNzAiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTA3MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEwNzE6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAicmVncmVzc2lvbi5hdDoxMDcxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiQmlzb24gd291bGQgb25jZSBjb252ZXJ0IHRoaXMgYWN0aW9uIHRvIGEgbWlkcnVsZSBiZWNhdXNlIG9mIHRoZSBzdWJzZXF1ZW50IGJyYWNlZCBjb2RlLgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMDcxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTA3MTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWdyZXNzaW9uLmF0OjEwNzEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJTdGFydGluZyBwYXJzZQorRW50ZXJpbmcgc3RhdGUgMAorUmVkdWNpbmcgc3RhY2sgYnkgcnVsZSAxIChsaW5lIDIwKToKKy0+IFwkXCQgPSBudGVybSBzdGFydCAoKQorU3RhY2sgbm93IDAKK0VudGVyaW5nIHN0YXRlIDEKK1JlYWRpbmcgYSB0b2tlbjogTmV4dCB0b2tlbiBpcyB0b2tlbiAnYScgKFBSSU5URVIpCitzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ2EnLCBleHBlY3RpbmcgXCRlbmQKK0Vycm9yOiBwb3BwaW5nIG50ZXJtIHN0YXJ0ICgpCitTdGFjayBub3cgMAorQ2xlYW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQgdG9rZW4gJ2EnIChQUklOVEVSKQorREVTVFJVQ1RPUgorU3RhY2sgbm93IDAKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTA3MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzI4OAorI0FUX1NUQVJUXzI4OQorYXRfZm5fZ3JvdXBfYmFubmVyIDI4OSAncmVncmVzc2lvbi5hdDoxMDk3JyBcCisgICJTdHJpbmcgYWxpYXMgZGVjbGFyZWQgYWZ0ZXIgdXNlIiAiICAgICAgICAgICAgICAgICIgMTcKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyODkuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisjIEJpc29uIG9uY2UgaW5jb3JyZWN0bHkgYXNzZXJ0ZWQgdGhhdCB0aGUgc3ltYm9sIG51bWJlciBmb3IgZWl0aGVyIGEgdG9rZW4gb3IKKyMgaXRzIGFsaWFzIHdhcyB0aGUgaGlnaGVzdCBzeW1ib2wgbnVtYmVyIHNvIGZhciBhdCB0aGUgcG9pbnQgb2YgdGhlIGFsaWFzCisjIGRlY2xhcmF0aW9uLiAgVGhhdCB3YXMgdHJ1ZSB1bmxlc3MgdGhlIGRlY2xhcmF0aW9uIGFwcGVhcmVkIGFmdGVyIHRoZWlyIGZpcnN0CisjIHVzZXMgYW5kIG90aGVyIHRva2VucyBhcHBlYXJlZCBpbiBiZXR3ZWVuLgorCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJSUKK3N0YXJ0OiAnYScgIkEiICdiJzsKKyV0b2tlbiAnYScgIkEiOworX0FURU9GCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjExMTA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWdyZXNzaW9uLmF0OjExMTAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLXQgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjExMTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjExMTA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC10IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtdCAtbyBpbnB1dC5jIGlucHV0LnkiICJyZWdyZXNzaW9uLmF0OjExMTAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLXQgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjExMTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMTEwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVncmVzc2lvbi5hdDoxMTEwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTExMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTExMDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZ3Jlc3Npb24uYXQ6MTExMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjExMTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjExMTA6IGJpc29uIC10IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZ3Jlc3Npb24uYXQ6MTExMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtdCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMTEwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjg5CisjQVRfU1RBUlRfMjkwCithdF9mbl9ncm91cF9iYW5uZXIgMjkwICdyZWdyZXNzaW9uLmF0OjExMjAnIFwKKyAgIkV4dHJhIGxvb2thaGVhZCBzZXRzIGluIHJlcG9ydCIgIiAgICAgICAgICAgICAgICAgIiAxNworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI5MC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKyMgQmlzb24gcHJpbnRzIGVhY2ggcmVkdWN0aW9uJ3MgbG9va2FoZWFkIHNldCBvbmx5IG5leHQgdG8gdGhlIGFzc29jaWF0ZWQKKyMgc3RhdGUncyBvbmUgaXRlbSB0aGF0ICgxKSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNhbWUgcnVsZSBhcyB0aGUgcmVkdWN0aW9uCisjIGFuZCAoMikgaGFzIGl0cyBkb3QgYXQgdGhlIGVuZCBvZiBpdHMgUkhTLiAgUHJldmlvdXNseSwgQmlzb24gYWxzbworIyBlcnJvbmVvdXNseSBwcmludGVkIHRoZSBsb29rYWhlYWQgc2V0IG5leHQgdG8gYWxsIG9mIHRoZSBzdGF0ZSdzIG90aGVyIGl0ZW1zCisjIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FtZSBydWxlLiAgVGhpcyBidWcgYWZmZWN0ZWQgb25seSB0aGUgJy5vdXRwdXQnIGZpbGUgYW5kCisjIG5vdCB0aGUgZ2VuZXJhdGVkIHBhcnNlciBzb3VyY2UgY29kZS4KKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyUlCitzdGFydDogYSB8ICdhJyBhICdhJyA7CithOiAnYScgOworX0FURU9GCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjExMzU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZ3Jlc3Npb24uYXQ6MTEzNSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtLXJlcG9ydD1hbGwgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMTM1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMTM1OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgaW5wdXQueSIgInJlZ3Jlc3Npb24uYXQ6MTEzNSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtLXJlcG9ydD1hbGwgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMTM1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTEzNTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZ3Jlc3Npb24uYXQ6MTEzNSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjExMzUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjExMzU6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjExMzUiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMTM1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMTM1OiBiaXNvbiAtLXJlcG9ydD1hbGwgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZ3Jlc3Npb24uYXQ6MTEzNSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtLXJlcG9ydD1hbGwgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjExMzUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjExMzY6IHNlZCAtbiAnL15TdGF0ZSAxXCQvLC9eU3RhdGUgMlwkL3AnIGlucHV0Lm91dHB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAic2VkIC1uICcvXlN0YXRlIDEkLywvXlN0YXRlIDIkL3AnIGlucHV0Lm91dHB1dCIgInJlZ3Jlc3Npb24uYXQ6MTEzNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgLW4gJy9eU3RhdGUgMSQvLC9eU3RhdGUgMiQvcCcgaW5wdXQub3V0cHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiU3RhdGUgMQorCisgICAgMiBzdGFydDogJ2EnIC4gYSAnYScKKyAgICAzIGE6IC4gJ2EnCisgICAgMyAgfCAnYScgLiAgW1wkZW5kXQorCisgICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDQKKworICAgIFwkZGVmYXVsdCAgcmVkdWNlIHVzaW5nIHJ1bGUgMyAoYSkKKworICAgIGEgIGdvIHRvIHN0YXRlIDUKKworCitTdGF0ZSAyCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjExMzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjkwCisjQVRfU1RBUlRfMjkxCithdF9mbl9ncm91cF9iYW5uZXIgMjkxICdyZWdyZXNzaW9uLmF0OjExNjEnIFwKKyAgIlRva2VuIG51bWJlciBpbiBwcmVjZWRlbmNlIGRlY2xhcmF0aW9uIiAiICAgICAgICAgIiAxNworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI5MS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKyMgUE9TSVggc2F5cyB0b2tlbiBudW1iZXJzIGNhbiBiZSBkZWNsYXJlZCBpbiAlbGVmdCwgJXJpZ2h0LCBhbmQgJW5vbmFzc29jLCBidXQKKyMgd2UgbG9zdCB0aGlzIGluIEJpc29uIDEuNTAuCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisleworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CisgIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOworJX0KKworJWVycm9yLXZlcmJvc2UKKyVyaWdodCBFTkQgMAorJWxlZnQgVEsxIDEgVEsyIDIgInRvayBhbGlhcyIgMworCislJQorCitzdGFydDoKKyAgICBUSzEgc3JfY29uZmxpY3QgInRvayBhbGlhcyIKKyAgfCBzdGFydCAlcHJlYyBFTkQKKyAgOworc3JfY29uZmxpY3Q6CisgIFRLMgorICB8IFRLMiAidG9rIGFsaWFzIgorICA7CisKKyUlCisKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitzdGF0aWMKK2ludCB5eWxleCAodm9pZCkKK3sKKyAgc3RhdGljIGludCBjb25zdCBpbnB1dFtdID0geyAxLCAyLCAzLCAwIH07CisgIHN0YXRpYyBzaXplX3QgdG9rbnVtID0gMDsKKyAgaW50IHJlczsKKyAgOworICBhc3NlcnQgKHRva251bSA8IHNpemVvZiBpbnB1dCAvIHNpemVvZiBpbnB1dFswXSk7CisgIHJlcyA9IGlucHV0W3Rva251bSsrXTsKKyAgOworICByZXR1cm4gcmVzOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMjAxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVncmVzc2lvbi5hdDoxMjAxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMjAxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMjAxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IiAicmVncmVzc2lvbi5hdDoxMjAxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMjAxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTIwMTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZ3Jlc3Npb24uYXQ6MTIwMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEyMDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEyMDE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjEyMDEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMjAxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMjAxOiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWdyZXNzaW9uLmF0OjEyMDEiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueToyMy41LTE5OiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHM6IHN0YXJ0OiBzdGFydAoraW5wdXQueToyNy41LTE5OiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHM6IHNyX2NvbmZsaWN0OiBUSzIgXCJ0b2sgYWxpYXNcIgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMjAxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworIyBEZWZpbmluZyBQT1NJWExZX0NPUlJFQ1QgY2F1c2VzIGJpc29uIHRvIGNvbXBsYWluIGlmIG9wdGlvbnMgYXJlCisjIGFkZGVkIGFmdGVyIHRoZSBncmFtbWFyIGZpbGUgbmFtZSwgc28gc2tpcCB0aGVzZSBjaGVja3MgaW4gdGhhdAorIyBjYXNlLgoraWYgdGVzdCAiJFBPU0lYTFlfQ09SUkVDVF9JU19FWFBPUlRFRCIgPSBmYWxzZTsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKworICAjIFRvIGF2b2lkIGV4cGFuZGluZyBpdCByZXBlYXRlZGx5LCBzdG9yZSBzcGVjaWZpZWQgc3Rkb3V0LgorICA6ID5leHBvdXQKKworICAjIFJ1biB3aXRoIC1XZXJyb3IuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEyMDE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLVdlcnJvciIgInJlZ3Jlc3Npb24uYXQ6MTIwMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSAtV2Vycm9yCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEyMDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBCdWlsZCBleHBlY3RlZCBzdGRlcnIgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgIndhcm5pbmdzIGJlaW5nCisgICMgdHJlYXRlZCBhcyBlcnJvcnMiIG1lc3NhZ2UuCisgIGNhdCA+YXQtYmlzb24tY2hlY2std2FybmluZ3MgPDwnX0FURU9GJworaW5wdXQueToyMy41LTE5OiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHM6IHN0YXJ0OiBzdGFydAoraW5wdXQueToyNy41LTE5OiB3YXJuaW5nOiBydWxlIHVzZWxlc3MgaW4gcGFyc2VyIGR1ZSB0byBjb25mbGljdHM6IHNyX2NvbmZsaWN0OiBUSzIgInRvayBhbGlhcyIKK19BVEVPRgorCisgIGF0X2Jpc29uX2NoZWNrX2ZpcnN0PWBzZWQgLW4gXAorICAgICcvOiB3YXJuaW5nOiAvez07cTt9JyBhdC1iaXNvbi1jaGVjay13YXJuaW5nc2AKKyAgOiAke2F0X2Jpc29uX2NoZWNrX2ZpcnN0Oj0xfQorICBhdF9iaXNvbl9jaGVja19maXJzdF90bXA9YHNlZCAtbiBcCisgICAgJy9jb25mbGljdHM6IFswLTldLipyZWR1Y2UkL3s9O3E7fScgYXQtYmlzb24tY2hlY2std2FybmluZ3NgCisgIDogJHthdF9iaXNvbl9jaGVja19maXJzdF90bXA6PTF9CisgIGlmIHRlc3QgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcCAtbHQgJGF0X2Jpc29uX2NoZWNrX2ZpcnN0OyB0aGVuCisgICAgYXRfYmlzb25fY2hlY2tfZmlyc3Q9JGF0X2Jpc29uX2NoZWNrX2ZpcnN0X3RtcAorICBmaQorICBpZiB0ZXN0ICRhdF9iaXNvbl9jaGVja19maXJzdCAtZ3QgMTsgdGhlbgorICAgIHNlZCAtbiAiMSxgZXhwciAkYXRfYmlzb25fY2hlY2tfZmlyc3QgLSAxYCJwIFwKKyAgICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4gZXhwZXJyCisgIGZpCisgIGVjaG8gJ2Jpc29uOiB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycycgPj4gZXhwZXJyCisKKyAgIyBGaW5pc2ggYnVpbGRpbmcgZXhwZWN0ZWQgc3RkZXJyIGFuZCBjaGVjay4gIFVubGlrZSB3YXJuaW5ncywKKyAgIyBjb21wbGFpbnRzIGNhdXNlIGJpc29uIHRvIGV4aXQgZWFybHkuICBUaHVzLCB3aXRoIC1XZXJyb3IsIGJpc29uCisgICMgZG9lcyBub3QgbmVjZXNzYXJpbHkgcmVwb3J0IGFsbCB3YXJuaW5ncyB0aGF0IGl0IGRvZXMgd2l0aG91dAorICAjIC1XZXJyb3IsIGJ1dCBpdCBhdCBsZWFzdCByZXBvcnRzIG9uZS4KKyAgYXRfYmlzb25fY2hlY2tfbGFzdD1gc2VkIC1uICckPScgc3RkZXJyYAorICA6ICR7YXRfYmlzb25fY2hlY2tfbGFzdDo9MX0KKyAgYXRfYmlzb25fY2hlY2tfbGFzdD1gZXhwciAkYXRfYmlzb25fY2hlY2tfbGFzdCAtIDFgCisgIHNlZCAtbiAiJGF0X2Jpc29uX2NoZWNrX2ZpcnN0LCRhdF9iaXNvbl9jaGVja19sYXN0InAgXAorICAgIGF0LWJpc29uLWNoZWNrLXdhcm5pbmdzID4+IGV4cGVycgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMjAxOiBzZWQgJ3MsLiovXFwoYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzXFwpXCQsXFwxLCcgXFwKKyAgICAgICAgICAgICAgc3RkZXJyIDE+JjIiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWdyZXNzaW9uLmF0OjEyMDEiCisoICRhdF9jaGVja190cmFjZTsgc2VkICdzLC4qL1woYmlzb246IHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzXCkkLFwxLCcgXAorICAgICAgICAgICAgICBzdGRlcnIgMT4mMgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorJGF0X2RpZmYgZXhwZXJyICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEyMDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBOb3cgY2hlY2sgLS13YXJuaW5ncz1lcnJvci4KKyAgY3Agc3RkZXJyIGV4cGVycgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMjAxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSAtLXdhcm5pbmdzPWVycm9yIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IC0td2FybmluZ3M9ZXJyb3IiICJyZWdyZXNzaW9uLmF0OjEyMDEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLS13YXJuaW5ncz1lcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorJGF0X2RpZmYgZXhwZXJyICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEyMDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIyBOb3cgY2hlY2sgLVdub25lIGFuZCAtLXdhcm5pbmdzPW5vbmUgYnkgbWFraW5nIHN1cmUgdGhhdAorICAjIC1XZXJyb3IgZG9lc24ndCBjaGFuZ2UgdGhlIGV4aXQgc3RhdHVzIHdoZW4gLVdub25lIG9yCisgICMgLS13YXJuaW5ncz1ub25lIGlzIHNwZWNpZmllZC4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTIwMTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLVdub25lIC1XZXJyb3IiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLVdub25lIC1XZXJyb3IiICJyZWdyZXNzaW9uLmF0OjEyMDEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkgLVdub25lIC1XZXJyb3IKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMjAxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMjAxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvciIgInJlZ3Jlc3Npb24uYXQ6MTIwMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueSAtLXdhcm5pbmdzPW5vbmUgLVdlcnJvcgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEyMDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTIwNTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgInJlZ3Jlc3Npb24uYXQ6MTIwNSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMjA1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTIwNTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJyZWdyZXNzaW9uLmF0OjEyMDUiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTIwNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEyMDY6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAicmVncmVzc2lvbi5hdDoxMjA2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTIwNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEyMDY6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVncmVzc2lvbi5hdDoxMjA2IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTIwNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzI5MQorI0FUX1NUQVJUXzI5MgorYXRfZm5fZ3JvdXBfYmFubmVyIDI5MiAncmVncmVzc2lvbi5hdDoxMjE5JyBcCisgICJwYXJzZS1ncmFtLnk6IExBTFIgPSBJRUxSIiAiICAgICAgICAgICAgICAgICAgICAgICIgMTcKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyOTIuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisjIEF2b2lkIGRpZmZlcmVuY2VzIGluIHN5bmNsaW5lcyBieSB0ZWxsaW5nIGJpc29uIHRoYXQgdGhlIG91dHB1dCBmaWxlcworIyBoYXZlIHRoZSBzYW1lIG5hbWUuCitjcCAkYWJzX3RvcF9zcmNkaXIvc3JjL3BhcnNlLWdyYW0ueSBpbnB1dC55CitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTIyNDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgLURsci50eXBlPWxhbHIgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZ3Jlc3Npb24uYXQ6MTIyNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIC1EbHIudHlwZT1sYWxyIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTIyNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTIyNDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyAtRGxyLnR5cGU9bGFsciBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgLURsci50eXBlPWxhbHIgaW5wdXQueSIgInJlZ3Jlc3Npb24uYXQ6MTIyNCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIC1EbHIudHlwZT1sYWxyIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTIyNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEyMjQ6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjEyMjQiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMjI0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMjI0OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVncmVzc2lvbi5hdDoxMjI0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTIyNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTIyNDogYmlzb24gLW8gaW5wdXQuYyAtRGxyLnR5cGU9bGFsciBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVncmVzc2lvbi5hdDoxMjI0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmMgLURsci50eXBlPWxhbHIgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEyMjQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK212IGlucHV0LmMgbGFsci5jCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMjI3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyAtRGxyLnR5cGU9aWVsciBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVncmVzc2lvbi5hdDoxMjI3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgLURsci50eXBlPWllbHIgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMjI3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZSAgXAorImxhbHIuYyIKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTIyNzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyAtRGxyLnR5cGU9aWVsciBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgLURsci50eXBlPWllbHIgaW5wdXQueSIgInJlZ3Jlc3Npb24uYXQ6MTIyNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIC1EbHIudHlwZT1pZWxyIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTIyNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUgIFwKKyJsYWxyLmMiCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMjI3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVncmVzc2lvbi5hdDoxMjI3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTIyNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUgIFwKKyJsYWxyLmMiCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEyMjc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjEyMjciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMjI3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZSAgXAorImxhbHIuYyIKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTIyNzogYmlzb24gLW8gaW5wdXQuYyAtRGxyLnR5cGU9aWVsciBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVncmVzc2lvbi5hdDoxMjI3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmMgLURsci50eXBlPWllbHIgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEyMjciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlICBcCisibGFsci5jIgorJGF0X3RyYWNlb247IH0KKworCittdiBpbnB1dC5jIGllbHIuYworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMjMwOiBkaWZmIGxhbHIuYyBpZWxyLmMiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWdyZXNzaW9uLmF0OjEyMzAiCisoICRhdF9jaGVja190cmFjZTsgZGlmZiBsYWxyLmMgaWVsci5jCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTIzMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUgIFwKKyJsYWxyLmMiIFwKKyJpZWxyLmMiCiskYXRfdHJhY2VvbjsgfQorCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjkyCisjQVRfU1RBUlRfMjkzCithdF9mbl9ncm91cF9iYW5uZXIgMjkzICdyZWdyZXNzaW9uLmF0OjEyNDAnIFwKKyAgIiVlcnJvci12ZXJib3NlIGFuZCBZWVNUQUNLX1VTRV9BTExPQ0EiICIgICAgICAgICAgIiAxNworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI5My4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVjb2RlIHsKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKKyAgI2RlZmluZSBZWVNUQUNLX1VTRV9BTExPQ0EgMQorfQorCislZXJyb3ItdmVyYm9zZQorCislJQorCitzdGFydDogY2hlY2sgc3ludGF4X2Vycm9yIHN5bnRheF9lcnJvciA7CisKK2NoZWNrOgoreworICBpZiAoMTI4IDwgc2l6ZW9mIHl5bXNnYnVmKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwKKyAgICAgICAgICAgICAgICJUaGUgaW5pdGlhbCBzaXplIG9mIHl5bXNnYnVmIGluIHl5cGFyc2UgaGFzIGluY3JlYXNlZFxuIgorICAgICAgICAgICAgICAgInNpbmNlIHRoaXMgdGVzdCBncm91cCB3YXMgbGFzdCB1cGRhdGVkLiAgQXMgYSByZXN1bHQsXG4iCisgICAgICAgICAgICAgICAidGhpcyB0ZXN0IGdyb3VwIG1heSBubyBsb25nZXIgbWFuYWdlIHRvIGluZHVjZSBhXG4iCisgICAgICAgICAgICAgICAicmVhbGxvY2F0aW9uIG9mIHRoZSBzeW50YXggZXJyb3IgbWVzc2FnZSBidWZmZXIuXG4iCisgICAgICAgICAgICAgICAiVGhpcyB0ZXN0IGdyb3VwIG11c3QgYmUgYWRqdXN0ZWQgdG8gcHJvZHVjZSBhIGxvbmdlclxuIgorICAgICAgICAgICAgICAgImVycm9yIG1lc3NhZ2UuXG4iKTsKKyAgICAgIFlZQUJPUlQ7CisgICAgfQorfQorOworCisvLyBJbmR1Y2UgYSBzeW50YXggZXJyb3IgbWVzc2FnZSB3aG9zZSB0b3RhbCBsZW5ndGggaXMgbW9yZSB0aGFuCisvLyBzaXplb2YgeXltc2didWYgaW4geXlwYXJzZS4gIEVhY2ggdG9rZW4gaGVyZSBpcyA2NCBieXRlcy4KK3N5bnRheF9lcnJvcjoKKyAgIjEyMzQ1Njc4OTExMjM0NTY3ODkyMTIzNDU2Nzg5MzEyMzQ1Njc4OTQxMjM0NTY3ODk1MTIzNDU2Nzg5NjEyM0EiCit8ICIxMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OTMxMjM0NTY3ODk0MTIzNDU2Nzg5NTEyMzQ1Njc4OTYxMjNCIgorfCBlcnJvciAnYScgJ2InICdjJworOworCislJQorCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorLyogSW5kdWNlIHR3byBzeW50YXggZXJyb3IgbWVzc2FnZXMgKHdoaWNoIHJlcXVpcmVzIGZ1bGwgZXJyb3IKKyAgIHJlY292ZXJ5IGJ5IHNoaWZ0aW5nIDMgdG9rZW5zKSBpbiBvcmRlciB0byBkZXRlY3QgYW55IGxvc3Mgb2YgdGhlCisgICByZWFsbG9jYXRlZCBidWZmZXIuICAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorc3RhdGljCitpbnQgeXlsZXggKHZvaWQpCit7CisgIHN0YXRpYyBjaGFyIGNvbnN0IGlucHV0W10gPSAiYWJjIjsKKyAgc3RhdGljIHNpemVfdCB0b2tudW0gPSAwOworICBpbnQgcmVzOworICA7CisgIGFzc2VydCAodG9rbnVtIDwgc2l6ZW9mIGlucHV0IC8gc2l6ZW9mIGlucHV0WzBdKTsKKyAgcmVzID0gaW5wdXRbdG9rbnVtKytdOworICA7CisgIHJldHVybiByZXM7Cit9CitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMjk2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVncmVzc2lvbi5hdDoxMjk2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMjk2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMjk2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IiAicmVncmVzc2lvbi5hdDoxMjk2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMjk2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTI5NjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZ3Jlc3Npb24uYXQ6MTI5NiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEyOTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEyOTY6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjEyOTYiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMjk2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMjk2OiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWdyZXNzaW9uLmF0OjEyOTYiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTI5NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTI5NzogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgInJlZ3Jlc3Npb24uYXQ6MTI5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxMjk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTI5NzogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJyZWdyZXNzaW9uLmF0OjEyOTciCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTI5NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEyOTg6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAicmVncmVzc2lvbi5hdDoxMjk4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTI5OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEyOTg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVncmVzc2lvbi5hdDoxMjk4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICdhJywgZXhwZWN0aW5nIDEyMzQ1Njc4OTExMjM0NTY3ODkyMTIzNDU2Nzg5MzEyMzQ1Njc4OTQxMjM0NTY3ODk1MTIzNDU2Nzg5NjEyM0Egb3IgMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkzMTIzNDU2Nzg5NDEyMzQ1Njc4OTUxMjM0NTY3ODk2MTIzQgorc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIFwkZW5kLCBleHBlY3RpbmcgMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkzMTIzNDU2Nzg5NDEyMzQ1Njc4OTUxMjM0NTY3ODk2MTIzQSBvciAxMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OTMxMjM0NTY3ODk0MTIzNDU2Nzg5NTEyMzQ1Njc4OTYxMjNCCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjEyOTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yOTMKKyNBVF9TVEFSVF8yOTQKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyOTQgJ3JlZ3Jlc3Npb24uYXQ6MTMxOScgXAorICAiJWVycm9yLXZlcmJvc2Ugb3ZlcmZsb3ciICIgICAgICAgICAgICAgICAgICAgICAgICAiIDE3CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjk0LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVjb2RlIHsKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKKworICAvKiBUaGlzIHByZXZlbnRzIHRoaXMgdGVzdCBjYXNlIGZyb20gaGF2aW5nIHRvIGluZHVjZSBlcnJvciBtZXNzYWdlcworICAgICBsYXJnZSBlbm91Z2ggdG8gb3ZlcmZsb3cgc2l6ZV90LiAgKi8KKyAgI2RlZmluZSBZWVNJWkVfVCB1bnNpZ25lZCBjaGFyCisKKyAgLyogQnJpbmcgaW4gbWFsbG9jIGFuZCBzZXQgRVhJVF9TVUNDRVNTIHNvIHlhY2MuYyBkb2Vzbid0IHRyeSB0bworICAgICBwcm92aWRlIGEgbWFsbG9jIHByb3RvdHlwZSB1c2luZyBvdXIgWVlTSVpFX1QuICAqLworICAjaW5jbHVkZSA8c3RkbGliLmg+CisgICNpZm5kZWYgRVhJVF9TVUNDRVNTCisgICMgZGVmaW5lIEVYSVRfU1VDQ0VTUyAwCisgICNlbmRpZgorCisgIC8qIE1heCBkZXB0aCBpcyB1c3VhbGx5IG11Y2ggc21hbGxlciB0aGFuIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSwgYW5kCisgICAgIHdlIGRvbid0IHdhbnQgZ2NjIHRvIHdhcm4gZXZlcnl3aGVyZSB0aGlzIGNvbnN0YW50IHdvdWxkIGJlIHRvbyBiaWcKKyAgICAgdG8gbWFrZSBzZW5zZSBmb3Igb3VyIFlZU0laRV9ULiAgKi8KKyAgI2RlZmluZSBZWU1BWERFUFRIIDEwMAorfQorCislZXJyb3ItdmVyYm9zZQorCislJQorCitzdGFydDogc3ludGF4X2Vycm9yMSBjaGVjayBzeW50YXhfZXJyb3IyIDsKKworLy8gSW5kdWNlIGEgc3ludGF4IGVycm9yIG1lc3NhZ2Ugd2hvc2UgdG90YWwgbGVuZ3RoIGNhdXNlcyB5eW1zZyBpbgorLy8geXlwYXJzZSB0byBiZSByZWFsbG9jYXRlZCB0byBzaXplIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSwgd2hpY2gKKy8vIHNob3VsZCBiZSAyNTUuICBFYWNoIHRva2VuIGhlcmUgaXMgNjQgYnl0ZXMuCitzeW50YXhfZXJyb3IxOgorICAiMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkzMTIzNDU2Nzg5NDEyMzQ1Njc4OTUxMjM0NTY3ODk2MTIzQSIKK3wgIjEyMzQ1Njc4OTExMjM0NTY3ODkyMTIzNDU2Nzg5MzEyMzQ1Njc4OTQxMjM0NTY3ODk1MTIzNDU2Nzg5NjEyM0IiCit8ICIxMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OTMxMjM0NTY3ODk0MTIzNDU2Nzg5NTEyMzQ1Njc4OTYxMjNDIgorfCBlcnJvciAnYScgJ2InICdjJworOworCitjaGVjazoKK3sKKyAgaWYgKHl5bXNnX2FsbG9jICE9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQorICAgICAgfHwgWVlTVEFDS19BTExPQ19NQVhJTVVNICE9IFlZU0laRV9NQVhJTVVNCisgICAgICB8fCBZWVNJWkVfTUFYSU1VTSAhPSAyNTUpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLAorICAgICAgICAgICAgICAgIlRoZSBhc3N1bXB0aW9ucyBvZiB0aGlzIHRlc3QgZ3JvdXAgYXJlIG5vIGxvbmdlclxuIgorICAgICAgICAgICAgICAgInZhbGlkLCBzbyBpdCBtYXkgbm8gbG9uZ2VyIGNhdGNoIHRoZSBlcnJvciBpdCB3YXNcbiIKKyAgICAgICAgICAgICAgICJkZXNpZ25lZCB0byBjYXRjaC4gIFNwZWNpZmljYWxseSwgdGhlIGZvbGxvd2luZ1xuIgorICAgICAgICAgICAgICAgInZhbHVlcyBzaG91bGQgYWxsIGJlIDI1NTpcblxuIik7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICIgIHl5bXNnX2FsbG9jID0gJWRcbiIsIHl5bXNnX2FsbG9jKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgWVlTVEFDS19BTExPQ19NQVhJTVVNID0gJWRcbiIsCisgICAgICAgICAgICAgICBZWVNUQUNLX0FMTE9DX01BWElNVU0pOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICBZWVNJWkVfTUFYSU1VTSA9ICVkXG4iLCBZWVNJWkVfTUFYSU1VTSk7CisgICAgICBZWUFCT1JUOworICAgIH0KK30KKzsKKworLy8gTm93IG92ZXJmbG93Lgorc3ludGF4X2Vycm9yMjoKKyAgIjEyMzQ1Njc4OTExMjM0NTY3ODkyMTIzNDU2Nzg5MzEyMzQ1Njc4OTQxMjM0NTY3ODk1MTIzNDU2Nzg5NjEyM0EiCit8ICIxMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OTMxMjM0NTY3ODk0MTIzNDU2Nzg5NTEyMzQ1Njc4OTYxMjNCIgorfCAiMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkzMTIzNDU2Nzg5NDEyMzQ1Njc4OTUxMjM0NTY3ODk2MTIzQyIKK3wgIjEyMzQ1Njc4OTExMjM0NTY3ODkyMTIzNDU2Nzg5MzEyMzQ1Njc4OTQxMjM0NTY3ODk1MTIzNDU2Nzg5NjEyM0QiCit8ICIxMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OTMxMjM0NTY3ODk0MTIzNDU2Nzg5NTEyMzQ1Njc4OTYxMjNFIgorOworCislJQorCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorLyogSW5kdWNlIHR3byBzeW50YXggZXJyb3IgbWVzc2FnZXMgKHdoaWNoIHJlcXVpcmVzIGZ1bGwgZXJyb3IKKyAgIHJlY292ZXJ5IGJ5IHNoaWZ0aW5nIDMgdG9rZW5zKS4gICovCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitzdGF0aWMKK2ludCB5eWxleCAodm9pZCkKK3sKKyAgc3RhdGljIGNoYXIgY29uc3QgaW5wdXRbXSA9ICJhYmMiOworICBzdGF0aWMgc2l6ZV90IHRva251bSA9IDA7CisgIGludCByZXM7CisgIDsKKyAgYXNzZXJ0ICh0b2tudW0gPCBzaXplb2YgaW5wdXQgLyBzaXplb2YgaW5wdXRbMF0pOworICByZXMgPSBpbnB1dFt0b2tudW0rK107CisgIDsKKyAgcmV0dXJuIHJlczsKK30KK2ludAorbWFpbiAodm9pZCkKK3sKKyAgLyogUHVzaCBwYXJzZXJzIHRocm93IGF3YXkgdGhlIG1lc3NhZ2UgYnVmZmVyIGJldHdlZW4gdG9rZW5zLCBzbyBza2lwCisgICAgIHRoaXMgdGVzdCB1bmRlciBtYWludGFpbmVyLXB1c2gtY2hlY2suICAqLworICBpZiAoWVlQVVNIKQorICAgIHJldHVybiA3NzsKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNDA2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVncmVzc2lvbi5hdDoxNDA2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNDA2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNDA2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IiAicmVncmVzc2lvbi5hdDoxNDA2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNDA2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTQwNjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZ3Jlc3Npb24uYXQ6MTQwNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE0MDYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE0MDY6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjE0MDYiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNDA2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNDA2OiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWdyZXNzaW9uLmF0OjE0MDYiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTQwNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIGdjYyB3YXJucyBhYm91dCB0YXV0b2xvZ2llcyBhbmQgZmFsbGFjaWVzIGludm9sdmluZyBjb21wYXJpc29ucyBmb3IKKyMgdW5zaWduZWQgY2hhci4gIEhvd2V2ZXIsIGl0IGRvZXNuJ3QgcHJvZHVjZSB0aGVzZSBzYW1lIHdhcm5pbmdzIGZvcgorIyBzaXplX3QgYW5kIG1hbnkgb3RoZXIgdHlwZXMgd2hlbiB0aGUgd2FybmluZ3Mgd291bGQgc2VlbSB0byBtYWtlIGp1c3QKKyMgYXMgbXVjaCBzZW5zZS4gIFdlIGlnbm9yZSB0aGUgd2FybmluZ3MuCitDRkxBR1M9IiROT19XRVJST1JfQ0ZMQUdTIgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTQxMzogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgInJlZ3Jlc3Npb24uYXQ6MTQxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNDEzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTQxMzogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJyZWdyZXNzaW9uLmF0OjE0MTMiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTQxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTQxNTogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJyZWdyZXNzaW9uLmF0OjE0MTUiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAyICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNDE1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTQxNTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWdyZXNzaW9uLmF0OjE0MTUiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ2EnLCBleHBlY3RpbmcgMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkzMTIzNDU2Nzg5NDEyMzQ1Njc4OTUxMjM0NTY3ODk2MTIzQSBvciAxMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OTMxMjM0NTY3ODk0MTIzNDU2Nzg5NTEyMzQ1Njc4OTYxMjNCIG9yIDEyMzQ1Njc4OTExMjM0NTY3ODkyMTIzNDU2Nzg5MzEyMzQ1Njc4OTQxMjM0NTY3ODk1MTIzNDU2Nzg5NjEyM0MKK3N5bnRheCBlcnJvcgorbWVtb3J5IGV4aGF1c3RlZAorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNDE1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjk0CisjQVRfU1RBUlRfMjk1CithdF9mbl9ncm91cF9iYW5uZXIgMjk1ICdyZWdyZXNzaW9uLmF0OjE0MjknIFwKKyAgIkxBQzogRXhwbG9yYXRvcnkgc3RhY2siICIgICAgICAgICAgICAgICAgICAgICAgICAgIiAxNworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI5NS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworCisKKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislY29kZSB7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgaW50IHl5bGV4ICh2b2lkKTsKK30KKworJWRlZmluZSBhcGkucHVzaC1wdWxsIHB1bGwKKyVlcnJvci12ZXJib3NlCisldG9rZW4gJ2MnCisKKyUlCisKKy8vIGRlZmF1bHQgcmVkdWN0aW9ucyBpbiBpbmNvbnNpc3RlbnQgc3RhdGVzCisvLyB2ICAgdiB2ICAgdiB2IHYgdiAgIHYgdiB2IHYgdiB2IHYKK1M6IEEgQiBBIEEgQiBBIEEgQSBBIEIgQSBBIEEgQSBBIEEgQSBCIEMgQyBBIEEgQSBBIEEgQSBBIEEgQSBBIEEgQSBCIDsKKy8vICAgICAgIF4gICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKy8vIExBQyByZWFsbG9jcworCitBOiAnYScgfCAvKmVtcHR5Ki8geyBwcmludGYgKCJpbmNvbnNpc3RlbnQgZGVmYXVsdCByZWR1Y3Rpb25cbiIpOyB9IDsKK0I6ICdiJyA7CitDOiAvKmVtcHR5Ki8geyBwcmludGYgKCJjb25zaXN0ZW50IGRlZmF1bHQgcmVkdWN0aW9uXG4iKTsgfSA7CisKKyUlCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQoraW50Cit5eWxleCAodm9pZCkKK3sKKyAgc3RhdGljIGNoYXIgY29uc3QgKmlucHV0ID0gImJiYmJjIjsKKyAgcmV0dXJuICppbnB1dCsrOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHl5ZGVidWcgPSAxOworICByZXR1cm4geXlwYXJzZSAoKTsKK30KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MDg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtRHBhcnNlLmxhYz1mdWxsIC1EcGFyc2UubGFjLmVzLWNhcGFjaXR5LWluaXRpYWw9MSBcXAorICAgICAgICAgICAgICAgICAtRHBhcnNlLmxhYy5tZW1vcnktdHJhY2U9ZnVsbCBcXAorICAgICAgICAgICAgICAgICAtdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWdyZXNzaW9uLmF0OjE1MDgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLURwYXJzZS5sYWM9ZnVsbCAtRHBhcnNlLmxhYy5lcy1jYXBhY2l0eS1pbml0aWFsPTEgXAorICAgICAgICAgICAgICAgICAtRHBhcnNlLmxhYy5tZW1vcnktdHJhY2U9ZnVsbCBcCisgICAgICAgICAgICAgICAgIC10IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTA4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtRHBhcnNlLmxhYz1mdWxsIC1EcGFyc2UubGFjLmVzLWNhcGFjaXR5LWluaXRpYWw9MSBcXAorICAgICAgICAgICAgICAgICAtRHBhcnNlLmxhYy5tZW1vcnktdHJhY2U9ZnVsbCBcXAorICAgICAgICAgICAgICAgICAtdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWdyZXNzaW9uLmF0OjE1MDgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLURwYXJzZS5sYWM9ZnVsbCAtRHBhcnNlLmxhYy5lcy1jYXBhY2l0eS1pbml0aWFsPTEgXAorICAgICAgICAgICAgICAgICAtRHBhcnNlLmxhYy5tZW1vcnktdHJhY2U9ZnVsbCBcCisgICAgICAgICAgICAgICAgIC10IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUwODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZ3Jlc3Npb24uYXQ6MTUwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MDg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjE1MDgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTA4OiBiaXNvbiAtRHBhcnNlLmxhYz1mdWxsIC1EcGFyc2UubGFjLmVzLWNhcGFjaXR5LWluaXRpYWw9MSBcXAorICAgICAgICAgICAgICAgICAtRHBhcnNlLmxhYy5tZW1vcnktdHJhY2U9ZnVsbCBcXAorICAgICAgICAgICAgICAgICAtdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWdyZXNzaW9uLmF0OjE1MDgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLURwYXJzZS5sYWM9ZnVsbCAtRHBhcnNlLmxhYy5lcy1jYXBhY2l0eS1pbml0aWFsPTEgXAorICAgICAgICAgICAgICAgICAtRHBhcnNlLmxhYy5tZW1vcnktdHJhY2U9ZnVsbCBcCisgICAgICAgICAgICAgICAgIC10IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6IGNvbmZsaWN0czogMjEgc2hpZnQvcmVkdWNlCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MDg6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJyZWdyZXNzaW9uLmF0OjE1MDgiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MDg6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAicmVncmVzc2lvbi5hdDoxNTA4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTA4OiAgXCRQUkVQQVJTRVIgLi9pbnB1dCA+IHN0ZG91dC50eHQgMj4gc3RkZXJyLnR4dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCA+IHN0ZG91dC50eHQgMj4gc3RkZXJyLnR4dCIgInJlZ3Jlc3Npb24uYXQ6MTUwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0ID4gc3Rkb3V0LnR4dCAyPiBzdGRlcnIudHh0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTA4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZ3Jlc3Npb24uYXQ6MTUwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBNYWtlIHN1cmUgc3ludGF4IGVycm9yIGRvZXNuJ3QgZm9yZ2V0IHRoYXQgJ2EnIGlzIGV4cGVjdGVkLiAgSXQgd291bGQKKyMgYmUgZm9yZ290dGVuIHdpdGhvdXQgbG9va2FoZWFkIGNvcnJlY3Rpb24uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTA4OiBncmVwICdzeW50YXggZXJyb3IsJyBzdGRlcnIudHh0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVncmVzc2lvbi5hdDoxNTA4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ3N5bnRheCBlcnJvciwnIHN0ZGVyci50eHQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ2MnLCBleHBlY3RpbmcgJ2EnIG9yICdiJworIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIENoZWNrIG51bWJlciBvZiBkZWZhdWx0IHJlZHVjdGlvbnMgaW4gaW5jb25zaXN0ZW50IHN0YXRlcyB0byBiZSBzdXJlCisjIHN5bnRheCBlcnJvciBpcyBkZXRlY3RlZCBiZWZvcmUgdW5uZWNlc3NhcnkgcmVkdWN0aW9ucyBhcmUgcGVyZm9ybWVkLgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUwODogXCRQRVJMIC0wNzc3IC1uZSAncHJpbnQgcy9pbmNvbnNpc3RlbnQgZGVmYXVsdCByZWR1Y3Rpb24vL2c7JyBcXAorICAgICAgICAgICA8IHN0ZG91dC50eHQgfHwgZXhpdCA3NyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZ3Jlc3Npb24uYXQ6MTUwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtMDc3NyAtbmUgJ3ByaW50IHMvaW5jb25zaXN0ZW50IGRlZmF1bHQgcmVkdWN0aW9uLy9nOycgXAorICAgICAgICAgICA8IHN0ZG91dC50eHQgfHwgZXhpdCA3NworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjE0IiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIENoZWNrIG51bWJlciBvZiBkZWZhdWx0IHJlZHVjdGlvbnMgaW4gY29uc2lzdGVudCBzdGF0ZXMgdG8gYmUgc3VyZQorIyBpdCBpcyBwZXJmb3JtZWQgYmVmb3JlIHRoZSBzeW50YXggZXJyb3IgaXMgZGV0ZWN0ZWQuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTA4OiBcJFBFUkwgLTA3NzcgLW5lICdwcmludCBzL1xcYmNvbnNpc3RlbnQgZGVmYXVsdCByZWR1Y3Rpb24vL2c7JyBcXAorICAgICAgICAgICA8IHN0ZG91dC50eHQgfHwgZXhpdCA3NyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZ3Jlc3Npb24uYXQ6MTUwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtMDc3NyAtbmUgJ3ByaW50IHMvXGJjb25zaXN0ZW50IGRlZmF1bHQgcmVkdWN0aW9uLy9nOycgXAorICAgICAgICAgICA8IHN0ZG91dC50eHQgfHwgZXhpdCA3NworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjIiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgQ2hlY2sgbnVtYmVyIG9mIHJlYWxsb2NzIHRvIGJlIHN1cmUgcmVhbGxvY2F0ZWQgbWVtb3J5IGlzbid0IHNvbWVob3cKKyMgbG9zdCBiZXR3ZWVuIExBQyBpbnZvY2F0aW9ucy4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MDg6IFwkUEVSTCAtMDc3NyAtbmUgJ3ByaW50IHMvXFwocmVhbGxvYy8vZzsnIDwgc3RkZXJyLnR4dCBcXAorICAgICAgICAgICB8fCBleGl0IDc3IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVncmVzc2lvbi5hdDoxNTA4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC0wNzc3IC1uZSAncHJpbnQgcy9cKHJlYWxsb2MvL2c7JyA8IHN0ZGVyci50eHQgXAorICAgICAgICAgICB8fCBleGl0IDc3CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVjb2RlIHsKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworICBpbnQgeXlsZXggKFlZU1RZUEUgKik7Cit9CisKKyVkZWZpbmUgYXBpLnB1c2gtcHVsbCBwdWxsICVkZWZpbmUgYXBpLnB1cmUKKyVlcnJvci12ZXJib3NlCisldG9rZW4gJ2MnCisKKyUlCisKKy8vIGRlZmF1bHQgcmVkdWN0aW9ucyBpbiBpbmNvbnNpc3RlbnQgc3RhdGVzCisvLyB2ICAgdiB2ICAgdiB2IHYgdiAgIHYgdiB2IHYgdiB2IHYKK1M6IEEgQiBBIEEgQiBBIEEgQSBBIEIgQSBBIEEgQSBBIEEgQSBCIEMgQyBBIEEgQSBBIEEgQSBBIEEgQSBBIEEgQSBCIDsKKy8vICAgICAgIF4gICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKy8vIExBQyByZWFsbG9jcworCitBOiAnYScgfCAvKmVtcHR5Ki8geyBwcmludGYgKCJpbmNvbnNpc3RlbnQgZGVmYXVsdCByZWR1Y3Rpb25cbiIpOyB9IDsKK0I6ICdiJyA7CitDOiAvKmVtcHR5Ki8geyBwcmludGYgKCJjb25zaXN0ZW50IGRlZmF1bHQgcmVkdWN0aW9uXG4iKTsgfSA7CisKKyUlCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQoraW50Cit5eWxleCAoWVlTVFlQRSAqdikKK3sKKyAgc3RhdGljIGNoYXIgY29uc3QgKmlucHV0ID0gImJiYmJjIjsKKyAgKnYgPSAwOworICByZXR1cm4gKmlucHV0Kys7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgeXlkZWJ1ZyA9IDE7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUwOTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1EcGFyc2UubGFjPWZ1bGwgLURwYXJzZS5sYWMuZXMtY2FwYWNpdHktaW5pdGlhbD0xIFxcCisgICAgICAgICAgICAgICAgIC1EcGFyc2UubGFjLm1lbW9yeS10cmFjZT1mdWxsIFxcCisgICAgICAgICAgICAgICAgIC10IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZ3Jlc3Npb24uYXQ6MTUwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtRHBhcnNlLmxhYz1mdWxsIC1EcGFyc2UubGFjLmVzLWNhcGFjaXR5LWluaXRpYWw9MSBcCisgICAgICAgICAgICAgICAgIC1EcGFyc2UubGFjLm1lbW9yeS10cmFjZT1mdWxsIFwKKyAgICAgICAgICAgICAgICAgLXQgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MDk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1EcGFyc2UubGFjPWZ1bGwgLURwYXJzZS5sYWMuZXMtY2FwYWNpdHktaW5pdGlhbD0xIFxcCisgICAgICAgICAgICAgICAgIC1EcGFyc2UubGFjLm1lbW9yeS10cmFjZT1mdWxsIFxcCisgICAgICAgICAgICAgICAgIC10IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZ3Jlc3Npb24uYXQ6MTUwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtRHBhcnNlLmxhYz1mdWxsIC1EcGFyc2UubGFjLmVzLWNhcGFjaXR5LWluaXRpYWw9MSBcCisgICAgICAgICAgICAgICAgIC1EcGFyc2UubGFjLm1lbW9yeS10cmFjZT1mdWxsIFwKKyAgICAgICAgICAgICAgICAgLXQgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTA5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVncmVzc2lvbi5hdDoxNTA5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUwOTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZ3Jlc3Npb24uYXQ6MTUwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MDk6IGJpc29uIC1EcGFyc2UubGFjPWZ1bGwgLURwYXJzZS5sYWMuZXMtY2FwYWNpdHktaW5pdGlhbD0xIFxcCisgICAgICAgICAgICAgICAgIC1EcGFyc2UubGFjLm1lbW9yeS10cmFjZT1mdWxsIFxcCisgICAgICAgICAgICAgICAgIC10IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZ3Jlc3Npb24uYXQ6MTUwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtRHBhcnNlLmxhYz1mdWxsIC1EcGFyc2UubGFjLmVzLWNhcGFjaXR5LWluaXRpYWw9MSBcCisgICAgICAgICAgICAgICAgIC1EcGFyc2UubGFjLm1lbW9yeS10cmFjZT1mdWxsIFwKKyAgICAgICAgICAgICAgICAgLXQgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueTogY29uZmxpY3RzOiAyMSBzaGlmdC9yZWR1Y2UKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUwOTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgInJlZ3Jlc3Npb24uYXQ6MTUwOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUwOTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJyZWdyZXNzaW9uLmF0OjE1MDkiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MDk6ICBcJFBSRVBBUlNFUiAuL2lucHV0ID4gc3Rkb3V0LnR4dCAyPiBzdGRlcnIudHh0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0ID4gc3Rkb3V0LnR4dCAyPiBzdGRlcnIudHh0IiAicmVncmVzc2lvbi5hdDoxNTA5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQgPiBzdGRvdXQudHh0IDI+IHN0ZGVyci50eHQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MDk6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVncmVzc2lvbi5hdDoxNTA5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIE1ha2Ugc3VyZSBzeW50YXggZXJyb3IgZG9lc24ndCBmb3JnZXQgdGhhdCAnYScgaXMgZXhwZWN0ZWQuICBJdCB3b3VsZAorIyBiZSBmb3Jnb3R0ZW4gd2l0aG91dCBsb29rYWhlYWQgY29ycmVjdGlvbi4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MDk6IGdyZXAgJ3N5bnRheCBlcnJvciwnIHN0ZGVyci50eHQiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWdyZXNzaW9uLmF0OjE1MDkiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnc3ludGF4IGVycm9yLCcgc3RkZXJyLnR4dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnYycsIGV4cGVjdGluZyAnYScgb3IgJ2InCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgQ2hlY2sgbnVtYmVyIG9mIGRlZmF1bHQgcmVkdWN0aW9ucyBpbiBpbmNvbnNpc3RlbnQgc3RhdGVzIHRvIGJlIHN1cmUKKyMgc3ludGF4IGVycm9yIGlzIGRldGVjdGVkIGJlZm9yZSB1bm5lY2Vzc2FyeSByZWR1Y3Rpb25zIGFyZSBwZXJmb3JtZWQuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTA5OiBcJFBFUkwgLTA3NzcgLW5lICdwcmludCBzL2luY29uc2lzdGVudCBkZWZhdWx0IHJlZHVjdGlvbi8vZzsnIFxcCisgICAgICAgICAgIDwgc3Rkb3V0LnR4dCB8fCBleGl0IDc3IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVncmVzc2lvbi5hdDoxNTA5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC0wNzc3IC1uZSAncHJpbnQgcy9pbmNvbnNpc3RlbnQgZGVmYXVsdCByZWR1Y3Rpb24vL2c7JyBcCisgICAgICAgICAgIDwgc3Rkb3V0LnR4dCB8fCBleGl0IDc3CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMTQiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgQ2hlY2sgbnVtYmVyIG9mIGRlZmF1bHQgcmVkdWN0aW9ucyBpbiBjb25zaXN0ZW50IHN0YXRlcyB0byBiZSBzdXJlCisjIGl0IGlzIHBlcmZvcm1lZCBiZWZvcmUgdGhlIHN5bnRheCBlcnJvciBpcyBkZXRlY3RlZC4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MDk6IFwkUEVSTCAtMDc3NyAtbmUgJ3ByaW50IHMvXFxiY29uc2lzdGVudCBkZWZhdWx0IHJlZHVjdGlvbi8vZzsnIFxcCisgICAgICAgICAgIDwgc3Rkb3V0LnR4dCB8fCBleGl0IDc3IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVncmVzc2lvbi5hdDoxNTA5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC0wNzc3IC1uZSAncHJpbnQgcy9cYmNvbnNpc3RlbnQgZGVmYXVsdCByZWR1Y3Rpb24vL2c7JyBcCisgICAgICAgICAgIDwgc3Rkb3V0LnR4dCB8fCBleGl0IDc3CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMiIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBDaGVjayBudW1iZXIgb2YgcmVhbGxvY3MgdG8gYmUgc3VyZSByZWFsbG9jYXRlZCBtZW1vcnkgaXNuJ3Qgc29tZWhvdworIyBsb3N0IGJldHdlZW4gTEFDIGludm9jYXRpb25zLgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUwOTogXCRQRVJMIC0wNzc3IC1uZSAncHJpbnQgcy9cXChyZWFsbG9jLy9nOycgPCBzdGRlcnIudHh0IFxcCisgICAgICAgICAgIHx8IGV4aXQgNzciCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWdyZXNzaW9uLmF0OjE1MDkiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLTA3NzcgLW5lICdwcmludCBzL1wocmVhbGxvYy8vZzsnIDwgc3RkZXJyLnR4dCBcCisgICAgICAgICAgIHx8IGV4aXQgNzcKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIzIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCisKKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWNvZGUgeworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CisgIGludCB5eWxleCAodm9pZCk7Cit9CisKKyVkZWZpbmUgYXBpLnB1c2gtcHVsbCBib3RoCislZXJyb3ItdmVyYm9zZQorJXRva2VuICdjJworCislJQorCisvLyBkZWZhdWx0IHJlZHVjdGlvbnMgaW4gaW5jb25zaXN0ZW50IHN0YXRlcworLy8gdiAgIHYgdiAgIHYgdiB2IHYgICB2IHYgdiB2IHYgdiB2CitTOiBBIEIgQSBBIEIgQSBBIEEgQSBCIEEgQSBBIEEgQSBBIEEgQiBDIEMgQSBBIEEgQSBBIEEgQSBBIEEgQSBBIEEgQiA7CisvLyAgICAgICBeICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisvLyBMQUMgcmVhbGxvY3MKKworQTogJ2EnIHwgLyplbXB0eSovIHsgcHJpbnRmICgiaW5jb25zaXN0ZW50IGRlZmF1bHQgcmVkdWN0aW9uXG4iKTsgfSA7CitCOiAnYicgOworQzogLyplbXB0eSovIHsgcHJpbnRmICgiY29uc2lzdGVudCBkZWZhdWx0IHJlZHVjdGlvblxuIik7IH0gOworCislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KK2ludAoreXlsZXggKHZvaWQpCit7CisgIHN0YXRpYyBjaGFyIGNvbnN0ICppbnB1dCA9ICJiYmJiYyI7CisgIHJldHVybiAqaW5wdXQrKzsKK30KKworaW50CittYWluICh2b2lkKQoreworICB5eWRlYnVnID0gMTsKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTEwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLURwYXJzZS5sYWM9ZnVsbCAtRHBhcnNlLmxhYy5lcy1jYXBhY2l0eS1pbml0aWFsPTEgXFwKKyAgICAgICAgICAgICAgICAgLURwYXJzZS5sYWMubWVtb3J5LXRyYWNlPWZ1bGwgXFwKKyAgICAgICAgICAgICAgICAgLXQgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVncmVzc2lvbi5hdDoxNTEwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1EcGFyc2UubGFjPWZ1bGwgLURwYXJzZS5sYWMuZXMtY2FwYWNpdHktaW5pdGlhbD0xIFwKKyAgICAgICAgICAgICAgICAgLURwYXJzZS5sYWMubWVtb3J5LXRyYWNlPWZ1bGwgXAorICAgICAgICAgICAgICAgICAtdCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUxMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUxMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLURwYXJzZS5sYWM9ZnVsbCAtRHBhcnNlLmxhYy5lcy1jYXBhY2l0eS1pbml0aWFsPTEgXFwKKyAgICAgICAgICAgICAgICAgLURwYXJzZS5sYWMubWVtb3J5LXRyYWNlPWZ1bGwgXFwKKyAgICAgICAgICAgICAgICAgLXQgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVncmVzc2lvbi5hdDoxNTEwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1EcGFyc2UubGFjPWZ1bGwgLURwYXJzZS5sYWMuZXMtY2FwYWNpdHktaW5pdGlhbD0xIFwKKyAgICAgICAgICAgICAgICAgLURwYXJzZS5sYWMubWVtb3J5LXRyYWNlPWZ1bGwgXAorICAgICAgICAgICAgICAgICAtdCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUxMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MTA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjE1MTAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTEwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTEwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVncmVzc2lvbi5hdDoxNTEwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUxMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUxMDogYmlzb24gLURwYXJzZS5sYWM9ZnVsbCAtRHBhcnNlLmxhYy5lcy1jYXBhY2l0eS1pbml0aWFsPTEgXFwKKyAgICAgICAgICAgICAgICAgLURwYXJzZS5sYWMubWVtb3J5LXRyYWNlPWZ1bGwgXFwKKyAgICAgICAgICAgICAgICAgLXQgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVncmVzc2lvbi5hdDoxNTEwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1EcGFyc2UubGFjPWZ1bGwgLURwYXJzZS5sYWMuZXMtY2FwYWNpdHktaW5pdGlhbD0xIFwKKyAgICAgICAgICAgICAgICAgLURwYXJzZS5sYWMubWVtb3J5LXRyYWNlPWZ1bGwgXAorICAgICAgICAgICAgICAgICAtdCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OiBjb25mbGljdHM6IDIxIHNoaWZ0L3JlZHVjZQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTEwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTEwOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAicmVncmVzc2lvbi5hdDoxNTEwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTEwOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyIgInJlZ3Jlc3Npb24uYXQ6MTUxMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTEwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUxMDogIFwkUFJFUEFSU0VSIC4vaW5wdXQgPiBzdGRvdXQudHh0IDI+IHN0ZGVyci50eHQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQgPiBzdGRvdXQudHh0IDI+IHN0ZGVyci50eHQiICJyZWdyZXNzaW9uLmF0OjE1MTAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCA+IHN0ZG91dC50eHQgMj4gc3RkZXJyLnR4dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTEwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUxMDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWdyZXNzaW9uLmF0OjE1MTAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTEwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgTWFrZSBzdXJlIHN5bnRheCBlcnJvciBkb2Vzbid0IGZvcmdldCB0aGF0ICdhJyBpcyBleHBlY3RlZC4gIEl0IHdvdWxkCisjIGJlIGZvcmdvdHRlbiB3aXRob3V0IGxvb2thaGVhZCBjb3JyZWN0aW9uLgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUxMDogZ3JlcCAnc3ludGF4IGVycm9yLCcgc3RkZXJyLnR4dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZ3Jlc3Npb24uYXQ6MTUxMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwICdzeW50YXggZXJyb3IsJyBzdGRlcnIudHh0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICdjJywgZXhwZWN0aW5nICdhJyBvciAnYicKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUxMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBDaGVjayBudW1iZXIgb2YgZGVmYXVsdCByZWR1Y3Rpb25zIGluIGluY29uc2lzdGVudCBzdGF0ZXMgdG8gYmUgc3VyZQorIyBzeW50YXggZXJyb3IgaXMgZGV0ZWN0ZWQgYmVmb3JlIHVubmVjZXNzYXJ5IHJlZHVjdGlvbnMgYXJlIHBlcmZvcm1lZC4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MTA6IFwkUEVSTCAtMDc3NyAtbmUgJ3ByaW50IHMvaW5jb25zaXN0ZW50IGRlZmF1bHQgcmVkdWN0aW9uLy9nOycgXFwKKyAgICAgICAgICAgPCBzdGRvdXQudHh0IHx8IGV4aXQgNzciCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWdyZXNzaW9uLmF0OjE1MTAiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLTA3NzcgLW5lICdwcmludCBzL2luY29uc2lzdGVudCBkZWZhdWx0IHJlZHVjdGlvbi8vZzsnIFwKKyAgICAgICAgICAgPCBzdGRvdXQudHh0IHx8IGV4aXQgNzcKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxNCIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUxMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBDaGVjayBudW1iZXIgb2YgZGVmYXVsdCByZWR1Y3Rpb25zIGluIGNvbnNpc3RlbnQgc3RhdGVzIHRvIGJlIHN1cmUKKyMgaXQgaXMgcGVyZm9ybWVkIGJlZm9yZSB0aGUgc3ludGF4IGVycm9yIGlzIGRldGVjdGVkLgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUxMDogXCRQRVJMIC0wNzc3IC1uZSAncHJpbnQgcy9cXGJjb25zaXN0ZW50IGRlZmF1bHQgcmVkdWN0aW9uLy9nOycgXFwKKyAgICAgICAgICAgPCBzdGRvdXQudHh0IHx8IGV4aXQgNzciCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWdyZXNzaW9uLmF0OjE1MTAiCisoICRhdF9jaGVja190cmFjZTsgJFBFUkwgLTA3NzcgLW5lICdwcmludCBzL1xiY29uc2lzdGVudCBkZWZhdWx0IHJlZHVjdGlvbi8vZzsnIFwKKyAgICAgICAgICAgPCBzdGRvdXQudHh0IHx8IGV4aXQgNzcKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIyIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTEwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIENoZWNrIG51bWJlciBvZiByZWFsbG9jcyB0byBiZSBzdXJlIHJlYWxsb2NhdGVkIG1lbW9yeSBpc24ndCBzb21laG93CisjIGxvc3QgYmV0d2VlbiBMQUMgaW52b2NhdGlvbnMuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTEwOiBcJFBFUkwgLTA3NzcgLW5lICdwcmludCBzL1xcKHJlYWxsb2MvL2c7JyA8IHN0ZGVyci50eHQgXFwKKyAgICAgICAgICAgfHwgZXhpdCA3NyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZ3Jlc3Npb24uYXQ6MTUxMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtMDc3NyAtbmUgJ3ByaW50IHMvXChyZWFsbG9jLy9nOycgPCBzdGRlcnIudHh0IFwKKyAgICAgICAgICAgfHwgZXhpdCA3NworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjMiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisKKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislY29kZSB7CisgICNpbmNsdWRlIDxzdGRpby5oPgorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgaW50IHl5bGV4IChZWVNUWVBFICopOworfQorCislZGVmaW5lIGFwaS5wdXNoLXB1bGwgYm90aCAlZGVmaW5lIGFwaS5wdXJlCislZXJyb3ItdmVyYm9zZQorJXRva2VuICdjJworCislJQorCisvLyBkZWZhdWx0IHJlZHVjdGlvbnMgaW4gaW5jb25zaXN0ZW50IHN0YXRlcworLy8gdiAgIHYgdiAgIHYgdiB2IHYgICB2IHYgdiB2IHYgdiB2CitTOiBBIEIgQSBBIEIgQSBBIEEgQSBCIEEgQSBBIEEgQSBBIEEgQiBDIEMgQSBBIEEgQSBBIEEgQSBBIEEgQSBBIEEgQiA7CisvLyAgICAgICBeICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisvLyBMQUMgcmVhbGxvY3MKKworQTogJ2EnIHwgLyplbXB0eSovIHsgcHJpbnRmICgiaW5jb25zaXN0ZW50IGRlZmF1bHQgcmVkdWN0aW9uXG4iKTsgfSA7CitCOiAnYicgOworQzogLyplbXB0eSovIHsgcHJpbnRmICgiY29uc2lzdGVudCBkZWZhdWx0IHJlZHVjdGlvblxuIik7IH0gOworCislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KK2ludAoreXlsZXggKFlZU1RZUEUgKnYpCit7CisgIHN0YXRpYyBjaGFyIGNvbnN0ICppbnB1dCA9ICJiYmJiYyI7CisgICp2ID0gMDsKKyAgcmV0dXJuICppbnB1dCsrOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHl5ZGVidWcgPSAxOworICByZXR1cm4geXlwYXJzZSAoKTsKK30KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MTE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtRHBhcnNlLmxhYz1mdWxsIC1EcGFyc2UubGFjLmVzLWNhcGFjaXR5LWluaXRpYWw9MSBcXAorICAgICAgICAgICAgICAgICAtRHBhcnNlLmxhYy5tZW1vcnktdHJhY2U9ZnVsbCBcXAorICAgICAgICAgICAgICAgICAtdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWdyZXNzaW9uLmF0OjE1MTEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLURwYXJzZS5sYWM9ZnVsbCAtRHBhcnNlLmxhYy5lcy1jYXBhY2l0eS1pbml0aWFsPTEgXAorICAgICAgICAgICAgICAgICAtRHBhcnNlLmxhYy5tZW1vcnktdHJhY2U9ZnVsbCBcCisgICAgICAgICAgICAgICAgIC10IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTExOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtRHBhcnNlLmxhYz1mdWxsIC1EcGFyc2UubGFjLmVzLWNhcGFjaXR5LWluaXRpYWw9MSBcXAorICAgICAgICAgICAgICAgICAtRHBhcnNlLmxhYy5tZW1vcnktdHJhY2U9ZnVsbCBcXAorICAgICAgICAgICAgICAgICAtdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWdyZXNzaW9uLmF0OjE1MTEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLURwYXJzZS5sYWM9ZnVsbCAtRHBhcnNlLmxhYy5lcy1jYXBhY2l0eS1pbml0aWFsPTEgXAorICAgICAgICAgICAgICAgICAtRHBhcnNlLmxhYy5tZW1vcnktdHJhY2U9ZnVsbCBcCisgICAgICAgICAgICAgICAgIC10IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUxMTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZ3Jlc3Npb24uYXQ6MTUxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MTE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjE1MTEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTExOiBiaXNvbiAtRHBhcnNlLmxhYz1mdWxsIC1EcGFyc2UubGFjLmVzLWNhcGFjaXR5LWluaXRpYWw9MSBcXAorICAgICAgICAgICAgICAgICAtRHBhcnNlLmxhYy5tZW1vcnktdHJhY2U9ZnVsbCBcXAorICAgICAgICAgICAgICAgICAtdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWdyZXNzaW9uLmF0OjE1MTEiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLURwYXJzZS5sYWM9ZnVsbCAtRHBhcnNlLmxhYy5lcy1jYXBhY2l0eS1pbml0aWFsPTEgXAorICAgICAgICAgICAgICAgICAtRHBhcnNlLmxhYy5tZW1vcnktdHJhY2U9ZnVsbCBcCisgICAgICAgICAgICAgICAgIC10IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6IGNvbmZsaWN0czogMjEgc2hpZnQvcmVkdWNlCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MTE6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJyZWdyZXNzaW9uLmF0OjE1MTEiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MTE6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAicmVncmVzc2lvbi5hdDoxNTExIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTExOiAgXCRQUkVQQVJTRVIgLi9pbnB1dCA+IHN0ZG91dC50eHQgMj4gc3RkZXJyLnR4dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCA+IHN0ZG91dC50eHQgMj4gc3RkZXJyLnR4dCIgInJlZ3Jlc3Npb24uYXQ6MTUxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0ID4gc3Rkb3V0LnR4dCAyPiBzdGRlcnIudHh0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTExOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZ3Jlc3Npb24uYXQ6MTUxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBNYWtlIHN1cmUgc3ludGF4IGVycm9yIGRvZXNuJ3QgZm9yZ2V0IHRoYXQgJ2EnIGlzIGV4cGVjdGVkLiAgSXQgd291bGQKKyMgYmUgZm9yZ290dGVuIHdpdGhvdXQgbG9va2FoZWFkIGNvcnJlY3Rpb24uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTExOiBncmVwICdzeW50YXggZXJyb3IsJyBzdGRlcnIudHh0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVncmVzc2lvbi5hdDoxNTExIgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ3N5bnRheCBlcnJvciwnIHN0ZGVyci50eHQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJ2MnLCBleHBlY3RpbmcgJ2EnIG9yICdiJworIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIENoZWNrIG51bWJlciBvZiBkZWZhdWx0IHJlZHVjdGlvbnMgaW4gaW5jb25zaXN0ZW50IHN0YXRlcyB0byBiZSBzdXJlCisjIHN5bnRheCBlcnJvciBpcyBkZXRlY3RlZCBiZWZvcmUgdW5uZWNlc3NhcnkgcmVkdWN0aW9ucyBhcmUgcGVyZm9ybWVkLgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUxMTogXCRQRVJMIC0wNzc3IC1uZSAncHJpbnQgcy9pbmNvbnNpc3RlbnQgZGVmYXVsdCByZWR1Y3Rpb24vL2c7JyBcXAorICAgICAgICAgICA8IHN0ZG91dC50eHQgfHwgZXhpdCA3NyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZ3Jlc3Npb24uYXQ6MTUxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtMDc3NyAtbmUgJ3ByaW50IHMvaW5jb25zaXN0ZW50IGRlZmF1bHQgcmVkdWN0aW9uLy9nOycgXAorICAgICAgICAgICA8IHN0ZG91dC50eHQgfHwgZXhpdCA3NworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjE0IiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTExIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIENoZWNrIG51bWJlciBvZiBkZWZhdWx0IHJlZHVjdGlvbnMgaW4gY29uc2lzdGVudCBzdGF0ZXMgdG8gYmUgc3VyZQorIyBpdCBpcyBwZXJmb3JtZWQgYmVmb3JlIHRoZSBzeW50YXggZXJyb3IgaXMgZGV0ZWN0ZWQuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTExOiBcJFBFUkwgLTA3NzcgLW5lICdwcmludCBzL1xcYmNvbnNpc3RlbnQgZGVmYXVsdCByZWR1Y3Rpb24vL2c7JyBcXAorICAgICAgICAgICA8IHN0ZG91dC50eHQgfHwgZXhpdCA3NyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZ3Jlc3Npb24uYXQ6MTUxMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkUEVSTCAtMDc3NyAtbmUgJ3ByaW50IHMvXGJjb25zaXN0ZW50IGRlZmF1bHQgcmVkdWN0aW9uLy9nOycgXAorICAgICAgICAgICA8IHN0ZG91dC50eHQgfHwgZXhpdCA3NworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjIiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgQ2hlY2sgbnVtYmVyIG9mIHJlYWxsb2NzIHRvIGJlIHN1cmUgcmVhbGxvY2F0ZWQgbWVtb3J5IGlzbid0IHNvbWVob3cKKyMgbG9zdCBiZXR3ZWVuIExBQyBpbnZvY2F0aW9ucy4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1MTE6IFwkUEVSTCAtMDc3NyAtbmUgJ3ByaW50IHMvXFwocmVhbGxvYy8vZzsnIDwgc3RkZXJyLnR4dCBcXAorICAgICAgICAgICB8fCBleGl0IDc3IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVncmVzc2lvbi5hdDoxNTExIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRQRVJMIC0wNzc3IC1uZSAncHJpbnQgcy9cKHJlYWxsb2MvL2c7JyA8IHN0ZGVyci50eHQgXAorICAgICAgICAgICB8fCBleGl0IDc3CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTUxMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjk1CisjQVRfU1RBUlRfMjk2CithdF9mbl9ncm91cF9iYW5uZXIgMjk2ICdyZWdyZXNzaW9uLmF0OjE1MjMnIFwKKyAgIkxBQzogTWVtb3J5IGV4aGF1c3Rpb24iICIgICAgICAgICAgICAgICAgICAgICAgICAgIiAxNworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjI5Ni4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworCisjIENoZWNrIGZvciBtZW1vcnkgZXhoYXVzdGlvbiBkdXJpbmcgcGFyc2luZy4KKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVjb2RlIHsKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKKyAgI2RlZmluZSBZWU1BWERFUFRIIDgKK30KKworJWVycm9yLXZlcmJvc2UKKworJSUKKworUzogQSBBIEEgQSBBIEEgQSBBIEEgOworQTogLyplbXB0eSovIHwgJ2EnIDsKKworJSUKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitzdGF0aWMKK2ludCB5eWxleCAodm9pZCkKK3sKKyAgc3RhdGljIGNoYXIgY29uc3QgaW5wdXRbXSA9ICIiOworICBzdGF0aWMgc2l6ZV90IHRva251bSA9IDA7CisgIGludCByZXM7CisgIDsKKyAgYXNzZXJ0ICh0b2tudW0gPCBzaXplb2YgaW5wdXQgLyBzaXplb2YgaW5wdXRbMF0pOworICByZXMgPSBpbnB1dFt0b2tudW0rK107CisgIDsKKyAgcmV0dXJuIHJlczsKK30KK2ludAorbWFpbiAodm9pZCkKK3sKKyAgeXlkZWJ1ZyA9IDE7CisgIHJldHVybiB5eXBhcnNlICgpOworfQorX0FURU9GCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTU2MjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1EcGFyc2UubGFjPWZ1bGwgLURwYXJzZS5sYWMuZXMtY2FwYWNpdHktaW5pdGlhbD0xIFxcCisgICAgICAgICAgICAgICAgIC10IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZ3Jlc3Npb24uYXQ6MTU2MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtRHBhcnNlLmxhYz1mdWxsIC1EcGFyc2UubGFjLmVzLWNhcGFjaXR5LWluaXRpYWw9MSBcCisgICAgICAgICAgICAgICAgIC10IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTYyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTYyOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtRHBhcnNlLmxhYz1mdWxsIC1EcGFyc2UubGFjLmVzLWNhcGFjaXR5LWluaXRpYWw9MSBcXAorICAgICAgICAgICAgICAgICAtdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWdyZXNzaW9uLmF0OjE1NjIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLURwYXJzZS5sYWM9ZnVsbCAtRHBhcnNlLmxhYy5lcy1jYXBhY2l0eS1pbml0aWFsPTEgXAorICAgICAgICAgICAgICAgICAtdCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTU2MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1NjI6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjE1NjIiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTYyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTYyOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVncmVzc2lvbi5hdDoxNTYyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTU2MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTU2MjogYmlzb24gLURwYXJzZS5sYWM9ZnVsbCAtRHBhcnNlLmxhYy5lcy1jYXBhY2l0eS1pbml0aWFsPTEgXFwKKyAgICAgICAgICAgICAgICAgLXQgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVncmVzc2lvbi5hdDoxNTYyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1EcGFyc2UubGFjPWZ1bGwgLURwYXJzZS5sYWMuZXMtY2FwYWNpdHktaW5pdGlhbD0xIFwKKyAgICAgICAgICAgICAgICAgLXQgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiaW5wdXQueTogY29uZmxpY3RzOiA4IHNoaWZ0L3JlZHVjZQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTYyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTYyOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAicmVncmVzc2lvbi5hdDoxNTYyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1NjIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTYyOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUyIgInJlZ3Jlc3Npb24uYXQ6MTU2MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTYyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1NjM6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAicmVncmVzc2lvbi5hdDoxNTYzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMiAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTU2MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1NjM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVncmVzc2lvbi5hdDoxNTYzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiU3RhcnRpbmcgcGFyc2UKK0VudGVyaW5nIHN0YXRlIDAKK1JlYWRpbmcgYSB0b2tlbjogTm93IGF0IGVuZCBvZiBpbnB1dC4KK0xBQzogaW5pdGlhbCBjb250ZXh0IGVzdGFibGlzaGVkIGZvciBcJGVuZAorTEFDOiBjaGVja2luZyBsb29rYWhlYWQgXCRlbmQ6IFIyIEczIFIyIEc1IFIyIEc2IFIyIEc3IFIyIEc4IFIyIEc5IFIyIEcxMCBSMiBHMTEgUjIgKG1heCBzaXplIGV4Y2VlZGVkKQorbWVtb3J5IGV4aGF1c3RlZAorQ2xlYW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQgdG9rZW4gXCRlbmQgKCkKK1N0YWNrIG5vdyAwCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1NjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBJbmR1Y2UgYW4gaW1tZWRpYXRlIHN5bnRheCBlcnJvciB3aXRoIGFuIHVuZGVmaW5lZCB0b2tlbiwgYW5kIGNoZWNrCisjIGZvciBtZW1vcnkgZXhoYXVzdGlvbiB3aGlsZSBidWlsZGluZyBzeW50YXggZXJyb3IgbWVzc2FnZS4KKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVjb2RlIHsKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKKyAgI2RlZmluZSBZWU1BWERFUFRIIDgKK30KKworJWVycm9yLXZlcmJvc2UKKworJSUKKworUzogQSBBIEEgQSBBIEEgQSBBIEEgOworQTogLyplbXB0eSovIHwgJ2EnIDsKKworJSUKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitzdGF0aWMKK2ludCB5eWxleCAodm9pZCkKK3sKKyAgc3RhdGljIGNoYXIgY29uc3QgaW5wdXRbXSA9ICJ6IjsKKyAgc3RhdGljIHNpemVfdCB0b2tudW0gPSAwOworICBpbnQgcmVzOworICA7CisgIGFzc2VydCAodG9rbnVtIDwgc2l6ZW9mIGlucHV0IC8gc2l6ZW9mIGlucHV0WzBdKTsKKyAgcmVzID0gaW5wdXRbdG9rbnVtKytdOworICA7CisgIHJldHVybiByZXM7Cit9CitpbnQKK21haW4gKHZvaWQpCit7CisgIHl5ZGVidWcgPSAxOworICByZXR1cm4geXlwYXJzZSAoKTsKK30KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1NzY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtRHBhcnNlLmxhYz1mdWxsIC1EcGFyc2UubGFjLmVzLWNhcGFjaXR5LWluaXRpYWw9MSBcXAorICAgICAgICAgICAgICAgICAtdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJyZWdyZXNzaW9uLmF0OjE1NzYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLURwYXJzZS5sYWM9ZnVsbCAtRHBhcnNlLmxhYy5lcy1jYXBhY2l0eS1pbml0aWFsPTEgXAorICAgICAgICAgICAgICAgICAtdCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTU3NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTU3NjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLURwYXJzZS5sYWM9ZnVsbCAtRHBhcnNlLmxhYy5lcy1jYXBhY2l0eS1pbml0aWFsPTEgXFwKKyAgICAgICAgICAgICAgICAgLXQgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVncmVzc2lvbi5hdDoxNTc2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1EcGFyc2UubGFjPWZ1bGwgLURwYXJzZS5sYWMuZXMtY2FwYWNpdHktaW5pdGlhbD0xIFwKKyAgICAgICAgICAgICAgICAgLXQgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1NzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTc2OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVncmVzc2lvbi5hdDoxNTc2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTU3NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTU3NjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZ3Jlc3Npb24uYXQ6MTU3NiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1NzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1NzY6IGJpc29uIC1EcGFyc2UubGFjPWZ1bGwgLURwYXJzZS5sYWMuZXMtY2FwYWNpdHktaW5pdGlhbD0xIFxcCisgICAgICAgICAgICAgICAgIC10IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZ3Jlc3Npb24uYXQ6MTU3NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtRHBhcnNlLmxhYz1mdWxsIC1EcGFyc2UubGFjLmVzLWNhcGFjaXR5LWluaXRpYWw9MSBcCisgICAgICAgICAgICAgICAgIC10IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6IGNvbmZsaWN0czogOCBzaGlmdC9yZWR1Y2UKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTU3NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTU3NjogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgInJlZ3Jlc3Npb24uYXQ6MTU3NiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTc2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTU3NjogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJyZWdyZXNzaW9uLmF0OjE1NzYiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTU3NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTc3OiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgInJlZ3Jlc3Npb24uYXQ6MTU3NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDIgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE1NzciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNTc3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZ3Jlc3Npb24uYXQ6MTU3NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gIlN0YXJ0aW5nIHBhcnNlCitFbnRlcmluZyBzdGF0ZSAwCitSZWFkaW5nIGEgdG9rZW46IE5leHQgdG9rZW4gaXMgdG9rZW4gXCR1bmRlZmluZWQgKCkKK0xBQzogaW5pdGlhbCBjb250ZXh0IGVzdGFibGlzaGVkIGZvciBcJHVuZGVmaW5lZAorTEFDOiBjaGVja2luZyBsb29rYWhlYWQgXCR1bmRlZmluZWQ6IEFsd2F5cyBFcnIKK0NvbnN0cnVjdGluZyBzeW50YXggZXJyb3IgbWVzc2FnZQorTEFDOiBjaGVja2luZyBsb29rYWhlYWQgXCRlbmQ6IFIyIEczIFIyIEc1IFIyIEc2IFIyIEc3IFIyIEc4IFIyIEc5IFIyIEcxMCBSMiBHMTEgUjIgKG1heCBzaXplIGV4Y2VlZGVkKQorc3ludGF4IGVycm9yCittZW1vcnkgZXhoYXVzdGVkCitDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCB0b2tlbiBcJHVuZGVmaW5lZCAoKQorU3RhY2sgbm93IDAKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTU3NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yOTYKKyNBVF9TVEFSVF8yOTcKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyOTcgJ3JlZ3Jlc3Npb24uYXQ6MTY2NCcgXAorICAiTGV4IGFuZCBwYXJzZSBwYXJhbXM6IHlhY2MuYyIgIiAgICAgICAgICAgICAgICAgICAiIDE3CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjk3LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworCisKKyMjIEZJWE1FOiBJbXByb3ZlIHBhcnNpbmcgb2YgcGFyc2UtcGFyYW0gYW5kIHVzZSB0aGUgZ2VuZXJhdGVkCisjIyB5eWVycm9yLgorY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVkZWZpbmVzCislbG9jYXRpb25zCislc2tlbGV0b24gInlhY2MuYyIKKyV1bmlvbiB7IGludCBpdmFsOyB9CislcGFyc2UtcGFyYW0geyBpbnQgeCB9CisvLyBTcGFjZXMsIHRhYnMsIGFuZCBuZXcgbGluZXMuCislcGFyc2UtcGFyYW0geyAKKwkgaW50IHkJIAorICAgICAgICAgCisgCit9CisKKyV7CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworICBzdGF0aWMgdm9pZCB5eWVycm9yIChpbnQgeCwgaW50IHksICBjb25zdCBjaGFyICptc2cpOworICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKKyV9CisKKyUlCitleHA6ICdhJyB7IGZwcmludGYgKHN0ZG91dCwgIng6ICVkLCB5OiAlZFxuIiwgeCwgeSk7IH07CislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yIChpbnQgeCwgaW50IHksICBjb25zdCBjaGFyICptc2cpCit7CisgIFlZVVNFKHgpOworICBZWVVTRSh5KTsKKyAgWVlfTE9DQVRJT05fUFJJTlQgKHN0ZGVyciwgKHl5bGxvYykpOworICBmcHJpbnRmIChzdGRlcnIsICI6ICIpOworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKyNpbmNsdWRlIDxhc3NlcnQuaD4KK3N0YXRpYworaW50IHl5bGV4ICh2b2lkKQoreworICBzdGF0aWMgY2hhciBjb25zdCBpbnB1dFtdID0gImEiOworICBzdGF0aWMgc2l6ZV90IHRva251bSA9IDA7CisgIGludCByZXM7CisgIDsKKyAgYXNzZXJ0ICh0b2tudW0gPCBzaXplb2YgaW5wdXQgLyBzaXplb2YgaW5wdXRbMF0pOworICByZXMgPSBpbnB1dFt0b2tudW0rK107CisgIDsKKyAgKHl5bGxvYykuZmlyc3RfbGluZSA9ICh5eWxsb2MpLmxhc3RfbGluZSA9IDE7CisgICh5eWxsb2MpLmZpcnN0X2NvbHVtbiA9ICh5eWxsb2MpLmxhc3RfY29sdW1uID0gdG9rbnVtOworICByZXR1cm4gcmVzOworfQorCisKKworaW50CittYWluICh2b2lkKQoreworICByZXR1cm4gISF5eXBhcnNlKDEsIDIpOworfQorX0FURU9GCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInJlZ3Jlc3Npb24uYXQ6MTY2NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgInJlZ3Jlc3Npb24uYXQ6MTY2NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE2NjQ6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjE2NjQiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNjY0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNjY0OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVncmVzc2lvbi5hdDoxNjY0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NDogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVncmVzc2lvbi5hdDoxNjY0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE2NjQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE2NjQ6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJyZWdyZXNzaW9uLmF0OjE2NjQiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE2NjQ6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAicmVncmVzc2lvbi5hdDoxNjY0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE2NjQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE2NjQ6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAicmVncmVzc2lvbi5hdDoxNjY0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAieDogMSwgeTogMgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNjY0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWdyZXNzaW9uLmF0OjE2NjQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNjY0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8yOTcKKyNBVF9TVEFSVF8yOTgKK2F0X2ZuX2dyb3VwX2Jhbm5lciAyOTggJ3JlZ3Jlc3Npb24uYXQ6MTY2NScgXAorICAiTGV4IGFuZCBwYXJzZSBwYXJhbXM6IGdsci5jIiAiICAgICAgICAgICAgICAgICAgICAiIDE3CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMjk4LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworCisKKyMjIEZJWE1FOiBJbXByb3ZlIHBhcnNpbmcgb2YgcGFyc2UtcGFyYW0gYW5kIHVzZSB0aGUgZ2VuZXJhdGVkCisjIyB5eWVycm9yLgorY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVkZWZpbmVzCislbG9jYXRpb25zCislc2tlbGV0b24gImdsci5jIgorJXVuaW9uIHsgaW50IGl2YWw7IH0KKyVwYXJzZS1wYXJhbSB7IGludCB4IH0KKy8vIFNwYWNlcywgdGFicywgYW5kIG5ldyBsaW5lcy4KKyVwYXJzZS1wYXJhbSB7IAorCSBpbnQgeQkgCisgICAgICAgICAKKyAKK30KKworJXsKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKGludCB4LCBpbnQgeSwgIGNvbnN0IGNoYXIgKm1zZyk7CisgIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOworJX0KKworJSUKK2V4cDogJ2EnIHsgZnByaW50ZiAoc3Rkb3V0LCAieDogJWQsIHk6ICVkXG4iLCB4LCB5KTsgfTsKKyUlCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKGludCB4LCBpbnQgeSwgIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgWVlVU0UoeCk7CisgIFlZVVNFKHkpOworICBZWV9MT0NBVElPTl9QUklOVCAoc3RkZXJyLCAoeXlsbG9jKSk7CisgIGZwcmludGYgKHN0ZGVyciwgIjogIik7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorI2luY2x1ZGUgPGFzc2VydC5oPgorc3RhdGljCitpbnQgeXlsZXggKHZvaWQpCit7CisgIHN0YXRpYyBjaGFyIGNvbnN0IGlucHV0W10gPSAiYSI7CisgIHN0YXRpYyBzaXplX3QgdG9rbnVtID0gMDsKKyAgaW50IHJlczsKKyAgOworICBhc3NlcnQgKHRva251bSA8IHNpemVvZiBpbnB1dCAvIHNpemVvZiBpbnB1dFswXSk7CisgIHJlcyA9IGlucHV0W3Rva251bSsrXTsKKyAgOworICAoeXlsbG9jKS5maXJzdF9saW5lID0gKHl5bGxvYykubGFzdF9saW5lID0gMTsKKyAgKHl5bGxvYykuZmlyc3RfY29sdW1uID0gKHl5bGxvYykubGFzdF9jb2x1bW4gPSB0b2tudW07CisgIHJldHVybiByZXM7Cit9CisKKworCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJldHVybiAhIXl5cGFyc2UoMSwgMik7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNjY1OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVncmVzc2lvbi5hdDoxNjY1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNjY1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNjY1OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IiAicmVncmVzc2lvbi5hdDoxNjY1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNjY1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInJlZ3Jlc3Npb24uYXQ6MTY2NSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE2NjUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE2NjU6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjE2NjUiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNjY1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNjY1OiBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJyZWdyZXNzaW9uLmF0OjE2NjUiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgInJlZ3Jlc3Npb24uYXQ6MTY2NSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNjY1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJyZWdyZXNzaW9uLmF0OjE2NjUiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NTogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJyZWdyZXNzaW9uLmF0OjE2NjUiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJ4OiAxLCB5OiAyCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE2NjUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNjY1OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZ3Jlc3Npb24uYXQ6MTY2NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE2NjUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzI5OAorI0FUX1NUQVJUXzI5OQorYXRfZm5fZ3JvdXBfYmFubmVyIDI5OSAncmVncmVzc2lvbi5hdDoxNjY2JyBcCisgICJMZXggYW5kIHBhcnNlIHBhcmFtczogbGFscjEuY2MiICIgICAgICAgICAgICAgICAgICIgMTcKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIyOTkuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisKKworIyMgRklYTUU6IEltcHJvdmUgcGFyc2luZyBvZiBwYXJzZS1wYXJhbSBhbmQgdXNlIHRoZSBnZW5lcmF0ZWQKKyMjIHl5ZXJyb3IuCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWRlZmluZXMKKyVsb2NhdGlvbnMKKyVza2VsZXRvbiAibGFscjEuY2MiCisldW5pb24geyBpbnQgaXZhbDsgfQorJXBhcnNlLXBhcmFtIHsgaW50IHggfQorLy8gU3BhY2VzLCB0YWJzLCBhbmQgbmV3IGxpbmVzLgorJXBhcnNlLXBhcmFtIHsgCisJIGludCB5CSAKKyAgICAgICAgIAorIAorfQorCisleworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKworICBzdGF0aWMgaW50IHl5bGV4ICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgeXk6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApOworJX0KKworJSUKK2V4cDogJ2EnIHsgZnByaW50ZiAoc3Rkb3V0LCAieDogJWQsIHk6ICVkXG4iLCB4LCB5KTsgfTsKKyUlCisvKiBBIEMrKyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLwordm9pZAoreXk6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGxvY2F0aW9uX3R5cGUmIGwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtKQoreworICAodm9pZCkgbDsKKyAgc3RkOjpjZXJyIDw8IGwgPDwgIjogIiA8PCBtIDw8IHN0ZDo6ZW5kbDsKK30KKyNpbmNsdWRlIDxhc3NlcnQuaD4KK3N0YXRpYworaW50IHl5bGV4ICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgeXk6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApCit7CisgIHN0YXRpYyBjaGFyIGNvbnN0IGlucHV0W10gPSAiYSI7CisgIHN0YXRpYyBzaXplX3QgdG9rbnVtID0gMDsKKyAgaW50IHJlczsKKyAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKKyAgYXNzZXJ0ICh0b2tudW0gPCBzaXplb2YgaW5wdXQgLyBzaXplb2YgaW5wdXRbMF0pOworICByZXMgPSBpbnB1dFt0b2tudW0rK107CisgIDsKKyAgKCpsbG9jcCkuYmVnaW4ubGluZSA9ICgqbGxvY3ApLmVuZC5saW5lID0gMTsKKyAgKCpsbG9jcCkuYmVnaW4uY29sdW1uID0gKCpsbG9jcCkuZW5kLmNvbHVtbiA9IHRva251bTsKKyAgcmV0dXJuIHJlczsKK30KKworaW50Cit5eXBhcnNlIChpbnQgeCwgaW50IHkpCit7CisgIHl5OjpwYXJzZXIgcGFyc2VyKHgsIHkpOworICByZXR1cm4gcGFyc2VyLnBhcnNlICgpOworfQorCisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuICEheXlwYXJzZSgxLCAyKTsKK30KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE2NjY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVncmVzc2lvbi5hdDoxNjY2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuY2MgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jYyBpbnB1dC55IiAicmVncmVzc2lvbi5hdDoxNjY2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE2NjY6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjE2NjYiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNjY2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNjY2OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVncmVzc2lvbi5hdDoxNjY2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NjogYmlzb24gLW8gaW5wdXQuY2MgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZ3Jlc3Npb24uYXQ6MTY2NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNjY2OiBcJEJJU09OX0NYWF9XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NYWF9XT1JLUyIgInJlZ3Jlc3Npb24uYXQ6MTY2NiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ1hYX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE2NjYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNjY2OiBcJENYWCBcJENYWEZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmNjIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmNjICRMSUJTIiAicmVncmVzc2lvbi5hdDoxNjY2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNjY2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNjY2OiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgInJlZ3Jlc3Npb24uYXQ6MTY2NiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIng6IDEsIHk6IDIKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE2NjY6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVncmVzc2lvbi5hdDoxNjY2IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMjk5CisjQVRfU1RBUlRfMzAwCithdF9mbl9ncm91cF9iYW5uZXIgMzAwICdyZWdyZXNzaW9uLmF0OjE2NjcnIFwKKyAgIkxleCBhbmQgcGFyc2UgcGFyYW1zOiBnbHIuY2MiICIgICAgICAgICAgICAgICAgICAgIiAxNworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjMwMC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworCisjIyBGSVhNRTogSW1wcm92ZSBwYXJzaW5nIG9mIHBhcnNlLXBhcmFtIGFuZCB1c2UgdGhlIGdlbmVyYXRlZAorIyMgeXllcnJvci4KK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislZGVmaW5lcworJWxvY2F0aW9ucworJXNrZWxldG9uICJnbHIuY2MiCisldW5pb24geyBpbnQgaXZhbDsgfQorJXBhcnNlLXBhcmFtIHsgaW50IHggfQorLy8gU3BhY2VzLCB0YWJzLCBhbmQgbmV3IGxpbmVzLgorJXBhcnNlLXBhcmFtIHsgCisJIGludCB5CSAKKyAgICAgICAgIAorIAorfQorCisleworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKworICBzdGF0aWMgaW50IHl5bGV4ICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgeXk6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApOworJX0KKworJSUKK2V4cDogJ2EnIHsgZnByaW50ZiAoc3Rkb3V0LCAieDogJWQsIHk6ICVkXG4iLCB4LCB5KTsgfTsKKyUlCisvKiBBIEMrKyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLwordm9pZAoreXk6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGxvY2F0aW9uX3R5cGUmIGwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtKQoreworICAodm9pZCkgbDsKKyAgc3RkOjpjZXJyIDw8IGwgPDwgIjogIiA8PCBtIDw8IHN0ZDo6ZW5kbDsKK30KKyNpbmNsdWRlIDxhc3NlcnQuaD4KK3N0YXRpYworaW50IHl5bGV4ICh5eTo6cGFyc2VyOjpzZW1hbnRpY190eXBlICpsdmFscCwgeXk6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAqbGxvY3ApCit7CisgIHN0YXRpYyBjaGFyIGNvbnN0IGlucHV0W10gPSAiYSI7CisgIHN0YXRpYyBzaXplX3QgdG9rbnVtID0gMDsKKyAgaW50IHJlczsKKyAgKHZvaWQpIGx2YWxwOyh2b2lkKSBsbG9jcDsKKyAgYXNzZXJ0ICh0b2tudW0gPCBzaXplb2YgaW5wdXQgLyBzaXplb2YgaW5wdXRbMF0pOworICByZXMgPSBpbnB1dFt0b2tudW0rK107CisgIDsKKyAgKCpsbG9jcCkuYmVnaW4ubGluZSA9ICgqbGxvY3ApLmVuZC5saW5lID0gMTsKKyAgKCpsbG9jcCkuYmVnaW4uY29sdW1uID0gKCpsbG9jcCkuZW5kLmNvbHVtbiA9IHRva251bTsKKyAgcmV0dXJuIHJlczsKK30KKworaW50Cit5eXBhcnNlIChpbnQgeCwgaW50IHkpCit7CisgIHl5OjpwYXJzZXIgcGFyc2VyKHgsIHkpOworICByZXR1cm4gcGFyc2VyLnBhcnNlICgpOworfQorCisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuICEheXlwYXJzZSgxLCAyKTsKK30KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE2Njc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicmVncmVzc2lvbi5hdDoxNjY3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuY2MgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jYyBpbnB1dC55IiAicmVncmVzc2lvbi5hdDoxNjY3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE2Njc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJyZWdyZXNzaW9uLmF0OjE2NjciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNjY3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNjY3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicmVncmVzc2lvbi5hdDoxNjY3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NzogYmlzb24gLW8gaW5wdXQuY2MgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInJlZ3Jlc3Npb24uYXQ6MTY2NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNjY3OiBcJEJJU09OX0NYWF9XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NYWF9XT1JLUyIgInJlZ3Jlc3Npb24uYXQ6MTY2NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ1hYX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE2NjciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNjY3OiBcJENYWCBcJENYWEZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmNjIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmNjICRMSUJTIiAicmVncmVzc2lvbi5hdDoxNjY3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNjY3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcmVncmVzc2lvbi5hdDoxNjY3OiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgInJlZ3Jlc3Npb24uYXQ6MTY2NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIng6IDEsIHk6IDIKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9yZWdyZXNzaW9uLmF0OjE2Njc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicmVncmVzc2lvbi5hdDoxNjY3IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3JlZ3Jlc3Npb24uYXQ6MTY2NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMzAwCisjQVRfU1RBUlRfMzAxCithdF9mbl9ncm91cF9iYW5uZXIgMzAxICdjKysuYXQ6MTAxJyBcCisgICJEb3h5Z2VuIFB1YmxpYyBEb2N1bWVudGF0aW9uIiAiICAgICAgICAgICAgICAgICAgICIgMTgKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIzMDEuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKwogCiAKIGNhdCA+aW5wdXQueXkgPDwnX0FURU9GJwpAQCAtNTk0MjksMzcgKzE0Nzk3MywxMDEgQEAKICUlCiBleHA6OwogJSUKLXl5OjpwYXJzZXI6OmVycm9yIChjb25zdCBsb2NhdGlvbiYgbCwgY29uc3Qgc3RkOjpzdHJpbmcmIG0pCisvKiBBIEMrKyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLwordm9pZAoreXk6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGxvY2F0aW9uX3R5cGUmIGwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtKQogewotICBzdGQ6OmNlcnIgPDwgbCA8PCBzIDw8IHN0ZDo6ZW5kbDsKKyAgKHZvaWQpIGw7CisgIHN0ZDo6Y2VyciA8PCBtIDw8IHN0ZDo6ZW5kbDsKIH0KIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiYysrLmF0OjEwMjogYmlzb24gLW8gaW5wdXQuY2MgaW5wdXQueXkiCi1lY2hvIGMrKy5hdDoxMDIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGlucHV0LmNjIGlucHV0Lnl5ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImMrKy5hdDoxMDI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjEwMTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmNjIGlucHV0Lnl5IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiYysrLmF0OjEwMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jYyBpbnB1dC55eQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjEwMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjEwMTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuY2MgaW5wdXQueXkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuY2MgaW5wdXQueXkiICJjKysuYXQ6MTAxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0Lnl5CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTAxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxMDE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjKysuYXQ6MTAxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxMDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTAxOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYysrLmF0OjEwMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTAxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjEwMTogYmlzb24gLW8gaW5wdXQuY2MgaW5wdXQueXkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjKysuYXQ6MTAxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmNjIGlucHV0Lnl5CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxMDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKIGNhdCA+RG94eWZpbGUgPDwnX0FURU9GJwpAQCAtNTk1MDgsNzEgKzE0ODExNiw0NyBAQAogX0FURU9GCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjKysuYXQ6MTAyOiBkb3h5Z2VuIC0tdmVyc2lvbiB8fCBleGl0IDc3IgotZWNobyBjKysuYXQ6MTAyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBkb3h5Z2VuIC0tdmVyc2lvbiB8fCBleGl0IDc3ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImMrKy5hdDoxMDI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTAxOiBkb3h5Z2VuIC0tdmVyc2lvbiB8fCBleGl0IDc3IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYysrLmF0OjEwMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBkb3h5Z2VuIC0tdmVyc2lvbiB8fCBleGl0IDc3CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjEwMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJjKysuYXQ6MTAyOiBkb3h5Z2VuIgotZWNobyBjKysuYXQ6MTAyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBkb3h5Z2VuICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImMrKy5hdDoxMDI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxMDE6IGRveHlnZW4iCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjKysuYXQ6MTAxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGRveHlnZW4KKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTAxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKIAotICAxMzIgKSAjIDEzMi4gYysrLmF0OjEwMzogRG94eWdlbiBQcml2YXRlIERvY3VtZW50YXRpb24KLSAgICBhdF9zZXR1cF9saW5lPSdjKysuYXQ6MTAzJwotICAgIGF0X2Rlc2M9J0RveHlnZW4gUHJpdmF0ZSBEb2N1bWVudGF0aW9uJwotICAgICRhdF9xdWlldCAkRUNIT19OICIxMzI6IERveHlnZW4gUHJpdmF0ZSBEb2N1bWVudGF0aW9uICAgICAgICAgICAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIxMzIuIGMrKy5hdDoxMDM6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMzAxCisjQVRfU1RBUlRfMzAyCithdF9mbl9ncm91cF9iYW5uZXIgMzAyICdjKysuYXQ6MTAyJyBcCisgICJEb3h5Z2VuIFByaXZhdGUgRG9jdW1lbnRhdGlvbiIgIiAgICAgICAgICAgICAgICAgICIgMTgKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIzMDIuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKwogCiAKIGNhdCA+aW5wdXQueXkgPDwnX0FURU9GJwpAQCAtNTk1ODMsMzcgKzE0ODE2NywxMDEgQEAKICUlCiBleHA6OwogJSUKLXl5OjpwYXJzZXI6OmVycm9yIChjb25zdCBsb2NhdGlvbiYgbCwgY29uc3Qgc3RkOjpzdHJpbmcmIG0pCisvKiBBIEMrKyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLwordm9pZAoreXk6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGxvY2F0aW9uX3R5cGUmIGwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtKQogewotICBzdGQ6OmNlcnIgPDwgbCA8PCBzIDw8IHN0ZDo6ZW5kbDsKKyAgKHZvaWQpIGw7CisgIHN0ZDo6Y2VyciA8PCBtIDw8IHN0ZDo6ZW5kbDsKIH0KIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiYysrLmF0OjEwMzogYmlzb24gLW8gaW5wdXQuY2MgaW5wdXQueXkiCi1lY2hvIGMrKy5hdDoxMDMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGlucHV0LmNjIGlucHV0Lnl5ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImMrKy5hdDoxMDM6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjEwMjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmNjIGlucHV0Lnl5IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiYysrLmF0OjEwMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jYyBpbnB1dC55eQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjEwMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjEwMjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuY2MgaW5wdXQueXkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuY2MgaW5wdXQueXkiICJjKysuYXQ6MTAyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0Lnl5CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTAyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxMDI6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjKysuYXQ6MTAyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxMDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTAyOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYysrLmF0OjEwMiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTAyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjEwMjogYmlzb24gLW8gaW5wdXQuY2MgaW5wdXQueXkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjKysuYXQ6MTAyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmNjIGlucHV0Lnl5CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxMDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCiAKIGNhdCA+RG94eWZpbGUgPDwnX0FURU9GJwpAQCAtNTk2NjIsMTAyICsxNDgzMTAsMTM5MDkgQEAKIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiYysrLmF0OjEwMzogZG94eWdlbiAtLXZlcnNpb24gfHwgZXhpdCA3NyIKLWVjaG8gYysrLmF0OjEwMyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgZG94eWdlbiAtLXZlcnNpb24gfHwgZXhpdCA3NyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjKysuYXQ6MTAzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjEwMjogZG94eWdlbiAtLXZlcnNpb24gfHwgZXhpdCA3NyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImMrKy5hdDoxMDIiCisoICRhdF9jaGVja190cmFjZTsgZG94eWdlbiAtLXZlcnNpb24gfHwgZXhpdCA3NworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxMDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTAyOiBkb3h5Z2VuIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYysrLmF0OjEwMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBkb3h5Z2VuCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjEwMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzMwMgorI0FUX1NUQVJUXzMwMworYXRfZm5fZ3JvdXBfYmFubmVyIDMwMyAnYysrLmF0OjE2MCcgXAorICAiUmVsYXRpdmUgbmFtZXNwYWNlIHJlZmVyZW5jZXMiICIgICAgICAgICAgICAgICAgICAiIDE4CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMzAzLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWxhbmd1YWdlICJDKysiCislZGVmaW5lcworJWRlZmluZSBuYW1lc3BhY2UgImZvbyIKKyV1bmlvbiB7IGludCBpOyB9CislZGVmaW5lIGdsb2JhbF90b2tlbnNfYW5kX3l5c3R5cGUKKworJWNvZGUgeworICAvLyBZWVNUWVBFIGNvbnRhaW5zIGEgbmFtZXNwYWNlIHJlZmVyZW5jZS4KKyAgaW50IHl5bGV4IChZWVNUWVBFICpsdmFsKSB7CisgICAgbHZhbC0+aSA9IDM7CisgICAgcmV0dXJuIDA7CisgIH0KK30KKworJSUKKworc3RhcnQ6IDsKKworJSUKKwordm9pZAorZm9vOjpwYXJzZXI6OmVycm9yIChjb25zdCBmb286OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAmbG9jLAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJm1zZykKK3sKKyAgc3RkOjpjZXJyIDw8ICJBdCAiIDw8IGxvYyA8PCAiOiAiIDw8IG1zZyA8PCBzdGQ6OmVuZGw7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgZm9vOjpwYXJzZXIgcDsKKyAgcmV0dXJuIHAucGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE2MTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmNjIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjKysuYXQ6MTYxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTYxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkiICJjKysuYXQ6MTYxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE2MTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImMrKy5hdDoxNjEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE2MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNjE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjKysuYXQ6MTYxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTYxOiBiaXNvbiAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYysrLmF0OjE2MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImMrKy5hdDoxMDM6IGRveHlnZW4iCi1lY2hvIGMrKy5hdDoxMDMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGRveHlnZW4gKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiYysrLmF0OjEwMzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNjE6IFwkQklTT05fQ1hYX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ1hYX1dPUktTIiAiYysrLmF0OjE2MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ1hYX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTYxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNjE6IFwkQ1hYIFwkQ1hYRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuY2MgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuY2MgJExJQlMiICJjKysuYXQ6MTYxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE2MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTYxOiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgImMrKy5hdDoxNjEiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE2MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTYxOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImMrKy5hdDoxNjEiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE2MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWxhbmd1YWdlICJDKysiCislZGVmaW5lcworJWRlZmluZSBuYW1lc3BhY2UgImZvbzo6YmFyIgorJXVuaW9uIHsgaW50IGk7IH0KKyVkZWZpbmUgZ2xvYmFsX3Rva2Vuc19hbmRfeXlzdHlwZQorCislY29kZSB7CisgIC8vIFlZU1RZUEUgY29udGFpbnMgYSBuYW1lc3BhY2UgcmVmZXJlbmNlLgorICBpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWwpIHsKKyAgICBsdmFsLT5pID0gMzsKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCislJQorCitzdGFydDogOworCislJQorCit2b2lkCitmb286OmJhcjo6cGFyc2VyOjplcnJvciAoY29uc3QgZm9vOjpiYXI6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAmbG9jLAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJm1zZykKK3sKKyAgc3RkOjpjZXJyIDw8ICJBdCAiIDw8IGxvYyA8PCAiOiAiIDw8IG1zZyA8PCBzdGQ6OmVuZGw7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgZm9vOjpiYXI6OnBhcnNlciBwOworICByZXR1cm4gcC5wYXJzZSAoKTsKK30KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTYyOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuY2MgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImMrKy5hdDoxNjIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuY2MgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE2MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNjI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuY2MgaW5wdXQueSIgImMrKy5hdDoxNjIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuY2MgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE2MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTYyOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYysrLmF0OjE2MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTYyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE2MjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImMrKy5hdDoxNjIiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE2MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNjI6IGJpc29uIC1vIGlucHV0LmNjIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjKysuYXQ6MTYyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE2MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7CiAKIAotICBiYW5uZXItMTcgKSAjIEJhbm5lciAxNy4gY3h4LXR5cGUuYXQ6MTkKLSAgICBjYXQgPDxcX0FURU9GCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE2MjogXCRCSVNPTl9DWFhfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DWFhfV09SS1MiICJjKysuYXQ6MTYyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DWFhfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNjIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi1DKysgVHlwZSBTeW50YXggKEdMUikuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE2MjogXCRDWFggXCRDWFhGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyAkTElCUyIgImMrKy5hdDoxNjIiCisoICRhdF9jaGVja190cmFjZTsgJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmNjICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTYyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNjI6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAiYysrLmF0OjE2MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTYyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNjI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYysrLmF0OjE2MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTYyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislbGFuZ3VhZ2UgIkMrKyIKKyVkZWZpbmVzCislZGVmaW5lIG5hbWVzcGFjZSAiZm9vOjpiYXI6OmJheiIKKyV1bmlvbiB7IGludCBpOyB9CislZGVmaW5lIGdsb2JhbF90b2tlbnNfYW5kX3l5c3R5cGUKKworJWNvZGUgeworICAvLyBZWVNUWVBFIGNvbnRhaW5zIGEgbmFtZXNwYWNlIHJlZmVyZW5jZS4KKyAgaW50IHl5bGV4IChZWVNUWVBFICpsdmFsKSB7CisgICAgbHZhbC0+aSA9IDM7CisgICAgcmV0dXJuIDA7CisgIH0KK30KKworJSUKKworc3RhcnQ6IDsKKworJSUKKwordm9pZAorZm9vOjpiYXI6OmJhejo6cGFyc2VyOjplcnJvciAoY29uc3QgZm9vOjpiYXI6OmJhejo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICZsb2MsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmbXNnKQoreworICBzdGQ6OmNlcnIgPDwgIkF0ICIgPDwgbG9jIDw8ICI6ICIgPDwgbXNnIDw8IHN0ZDo6ZW5kbDsKK30KKworaW50CittYWluICh2b2lkKQoreworICBmb286OmJhcjo6YmF6OjpwYXJzZXIgcDsKKyAgcmV0dXJuIHAucGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE2MzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmNjIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjKysuYXQ6MTYzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTYzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkiICJjKysuYXQ6MTYzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE2MzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImMrKy5hdDoxNjMiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE2MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNjM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjKysuYXQ6MTYzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTYzOiBiaXNvbiAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYysrLmF0OjE2MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE2MzogXCRCSVNPTl9DWFhfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DWFhfV09SS1MiICJjKysuYXQ6MTYzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DWFhfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE2MzogXCRDWFggXCRDWFhGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyAkTElCUyIgImMrKy5hdDoxNjMiCisoICRhdF9jaGVja190cmFjZTsgJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmNjICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTYzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNjM6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAiYysrLmF0OjE2MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTYzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNjM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYysrLmF0OjE2MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTYzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8zMDMKKyNBVF9TVEFSVF8zMDQKK2F0X2ZuX2dyb3VwX2Jhbm5lciAzMDQgJ2MrKy5hdDoxNjYnIFwKKyAgIkFic29sdXRlIG5hbWVzcGFjZSByZWZlcmVuY2VzIiAiICAgICAgICAgICAgICAgICAgIiAxOAorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjMwNC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVsYW5ndWFnZSAiQysrIgorJWRlZmluZXMKKyVkZWZpbmUgbmFtZXNwYWNlICI6OmZvbyIKKyV1bmlvbiB7IGludCBpOyB9CislZGVmaW5lIGdsb2JhbF90b2tlbnNfYW5kX3l5c3R5cGUKKworJWNvZGUgeworICAvLyBZWVNUWVBFIGNvbnRhaW5zIGEgbmFtZXNwYWNlIHJlZmVyZW5jZS4KKyAgaW50IHl5bGV4IChZWVNUWVBFICpsdmFsKSB7CisgICAgbHZhbC0+aSA9IDM7CisgICAgcmV0dXJuIDA7CisgIH0KK30KKworJSUKKworc3RhcnQ6IDsKKworJSUKKwordm9pZAorOjpmb286OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IDo6Zm9vOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgJmxvYywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZtc2cpCit7CisgIHN0ZDo6Y2VyciA8PCAiQXQgIiA8PCBsb2MgPDwgIjogIiA8PCBtc2cgPDwgc3RkOjplbmRsOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIDo6Zm9vOjpwYXJzZXIgcDsKKyAgcmV0dXJuIHAucGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE2NzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmNjIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjKysuYXQ6MTY3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNjciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTY3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkiICJjKysuYXQ6MTY3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNjciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE2NzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImMrKy5hdDoxNjciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE2NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNjc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjKysuYXQ6MTY3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNjciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTY3OiBiaXNvbiAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYysrLmF0OjE2NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNjciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE2NzogXCRCSVNPTl9DWFhfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DWFhfV09SS1MiICJjKysuYXQ6MTY3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DWFhfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNjciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE2NzogXCRDWFggXCRDWFhGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyAkTElCUyIgImMrKy5hdDoxNjciCisoICRhdF9jaGVja190cmFjZTsgJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmNjICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTY3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNjc6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAiYysrLmF0OjE2NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTY3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNjc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYysrLmF0OjE2NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTY3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislbGFuZ3VhZ2UgIkMrKyIKKyVkZWZpbmVzCislZGVmaW5lIG5hbWVzcGFjZSAiOjpmb286OmJhciIKKyV1bmlvbiB7IGludCBpOyB9CislZGVmaW5lIGdsb2JhbF90b2tlbnNfYW5kX3l5c3R5cGUKKworJWNvZGUgeworICAvLyBZWVNUWVBFIGNvbnRhaW5zIGEgbmFtZXNwYWNlIHJlZmVyZW5jZS4KKyAgaW50IHl5bGV4IChZWVNUWVBFICpsdmFsKSB7CisgICAgbHZhbC0+aSA9IDM7CisgICAgcmV0dXJuIDA7CisgIH0KK30KKworJSUKKworc3RhcnQ6IDsKKworJSUKKwordm9pZAorOjpmb286OmJhcjo6cGFyc2VyOjplcnJvciAoY29uc3QgOjpmb286OmJhcjo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICZsb2MsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmbXNnKQoreworICBzdGQ6OmNlcnIgPDwgIkF0ICIgPDwgbG9jIDw8ICI6ICIgPDwgbXNnIDw8IHN0ZDo6ZW5kbDsKK30KKworaW50CittYWluICh2b2lkKQoreworICA6OmZvbzo6YmFyOjpwYXJzZXIgcDsKKyAgcmV0dXJuIHAucGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE2ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmNjIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjKysuYXQ6MTY4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNjgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTY4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkiICJjKysuYXQ6MTY4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNjgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE2ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImMrKy5hdDoxNjgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE2OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNjg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjKysuYXQ6MTY4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNjgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTY4OiBiaXNvbiAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYysrLmF0OjE2OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNjgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE2ODogXCRCSVNPTl9DWFhfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DWFhfV09SS1MiICJjKysuYXQ6MTY4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DWFhfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNjgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE2ODogXCRDWFggXCRDWFhGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyAkTElCUyIgImMrKy5hdDoxNjgiCisoICRhdF9jaGVja190cmFjZTsgJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmNjICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTY4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNjg6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAiYysrLmF0OjE2OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTY4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNjg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYysrLmF0OjE2OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTY4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislbGFuZ3VhZ2UgIkMrKyIKKyVkZWZpbmVzCislZGVmaW5lIG5hbWVzcGFjZSAiOjpmb286OmJhcjo6YmF6IgorJXVuaW9uIHsgaW50IGk7IH0KKyVkZWZpbmUgZ2xvYmFsX3Rva2Vuc19hbmRfeXlzdHlwZQorCislY29kZSB7CisgIC8vIFlZU1RZUEUgY29udGFpbnMgYSBuYW1lc3BhY2UgcmVmZXJlbmNlLgorICBpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWwpIHsKKyAgICBsdmFsLT5pID0gMzsKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCislJQorCitzdGFydDogOworCislJQorCit2b2lkCis6OmZvbzo6YmFyOjpiYXo6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IDo6Zm9vOjpiYXI6OmJhejo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICZsb2MsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmbXNnKQoreworICBzdGQ6OmNlcnIgPDwgIkF0ICIgPDwgbG9jIDw8ICI6ICIgPDwgbXNnIDw8IHN0ZDo6ZW5kbDsKK30KKworaW50CittYWluICh2b2lkKQoreworICA6OmZvbzo6YmFyOjpiYXo6OnBhcnNlciBwOworICByZXR1cm4gcC5wYXJzZSAoKTsKK30KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTY5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuY2MgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImMrKy5hdDoxNjkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuY2MgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNjk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuY2MgaW5wdXQueSIgImMrKy5hdDoxNjkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuY2MgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTY5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYysrLmF0OjE2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE2OTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImMrKy5hdDoxNjkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNjk6IGJpc29uIC1vIGlucHV0LmNjIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjKysuYXQ6MTY5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTY5OiBcJEJJU09OX0NYWF9XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NYWF9XT1JLUyIgImMrKy5hdDoxNjkiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NYWF9XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTY5OiBcJENYWCBcJENYWEZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmNjIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmNjICRMSUJTIiAiYysrLmF0OjE2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuY2MgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE2OTogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJjKysuYXQ6MTY5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE2OTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjKysuYXQ6MTY5IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVsYW5ndWFnZSAiQysrIgorJWRlZmluZXMKKyVkZWZpbmUgbmFtZXNwYWNlICIJOjpmb28iCisldW5pb24geyBpbnQgaTsgfQorJWRlZmluZSBnbG9iYWxfdG9rZW5zX2FuZF95eXN0eXBlCisKKyVjb2RlIHsKKyAgLy8gWVlTVFlQRSBjb250YWlucyBhIG5hbWVzcGFjZSByZWZlcmVuY2UuCisgIGludCB5eWxleCAoWVlTVFlQRSAqbHZhbCkgeworICAgIGx2YWwtPmkgPSAzOworICAgIHJldHVybiAwOworICB9Cit9CisKKyUlCisKK3N0YXJ0OiA7CisKKyUlCisKK3ZvaWQKKwk6OmZvbzo6cGFyc2VyOjplcnJvciAoY29uc3QgCTo6Zm9vOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgJmxvYywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZtc2cpCit7CisgIHN0ZDo6Y2VyciA8PCAiQXQgIiA8PCBsb2MgPDwgIjogIiA8PCBtc2cgPDwgc3RkOjplbmRsOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIAk6OmZvbzo6cGFyc2VyIHA7CisgIHJldHVybiBwLnBhcnNlICgpOworfQorX0FURU9GCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNzA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiYysrLmF0OjE3MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTcwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE3MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuY2MgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jYyBpbnB1dC55IiAiYysrLmF0OjE3MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTcwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNzA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjKysuYXQ6MTcwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTcwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYysrLmF0OjE3MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTcwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE3MDogYmlzb24gLW8gaW5wdXQuY2MgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImMrKy5hdDoxNzAiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuY2MgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTcwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNzA6IFwkQklTT05fQ1hYX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ1hYX1dPUktTIiAiYysrLmF0OjE3MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ1hYX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTcwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNzA6IFwkQ1hYIFwkQ1hYRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuY2MgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuY2MgJExJQlMiICJjKysuYXQ6MTcwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE3MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTcwOiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgImMrKy5hdDoxNzAiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE3MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTcwOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImMrKy5hdDoxNzAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE3MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWxhbmd1YWdlICJDKysiCislZGVmaW5lcworJWRlZmluZSBuYW1lc3BhY2UgIiAgCSA6OmZvbzo6YmFyIgorJXVuaW9uIHsgaW50IGk7IH0KKyVkZWZpbmUgZ2xvYmFsX3Rva2Vuc19hbmRfeXlzdHlwZQorCislY29kZSB7CisgIC8vIFlZU1RZUEUgY29udGFpbnMgYSBuYW1lc3BhY2UgcmVmZXJlbmNlLgorICBpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWwpIHsKKyAgICBsdmFsLT5pID0gMzsKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCislJQorCitzdGFydDogOworCislJQorCit2b2lkCisgIAkgOjpmb286OmJhcjo6cGFyc2VyOjplcnJvciAoY29uc3QgICAJIDo6Zm9vOjpiYXI6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAmbG9jLAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJm1zZykKK3sKKyAgc3RkOjpjZXJyIDw8ICJBdCAiIDw8IGxvYyA8PCAiOiAiIDw8IG1zZyA8PCBzdGQ6OmVuZGw7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgICAJIDo6Zm9vOjpiYXI6OnBhcnNlciBwOworICByZXR1cm4gcC5wYXJzZSAoKTsKK30KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTcxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuY2MgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImMrKy5hdDoxNzEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuY2MgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE3MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNzE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuY2MgaW5wdXQueSIgImMrKy5hdDoxNzEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuY2MgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE3MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTcxOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYysrLmF0OjE3MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTcxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE3MTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImMrKy5hdDoxNzEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE3MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNzE6IGJpc29uIC1vIGlucHV0LmNjIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjKysuYXQ6MTcxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE3MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTcxOiBcJEJJU09OX0NYWF9XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NYWF9XT1JLUyIgImMrKy5hdDoxNzEiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NYWF9XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE3MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTcxOiBcJENYWCBcJENYWEZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGlucHV0IGlucHV0LmNjIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmNjICRMSUJTIiAiYysrLmF0OjE3MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ1hYICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuY2MgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNzEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE3MTogIFwkUFJFUEFSU0VSIC4vaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQiICJjKysuYXQ6MTcxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNzEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE3MTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjKysuYXQ6MTcxIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNzEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVsYW5ndWFnZSAiQysrIgorJWRlZmluZXMKKyVkZWZpbmUgbmFtZXNwYWNlICIgIDo6Zm9vOjpiYXI6OmJheiIKKyV1bmlvbiB7IGludCBpOyB9CislZGVmaW5lIGdsb2JhbF90b2tlbnNfYW5kX3l5c3R5cGUKKworJWNvZGUgeworICAvLyBZWVNUWVBFIGNvbnRhaW5zIGEgbmFtZXNwYWNlIHJlZmVyZW5jZS4KKyAgaW50IHl5bGV4IChZWVNUWVBFICpsdmFsKSB7CisgICAgbHZhbC0+aSA9IDM7CisgICAgcmV0dXJuIDA7CisgIH0KK30KKworJSUKKworc3RhcnQ6IDsKKworJSUKKwordm9pZAorICA6OmZvbzo6YmFyOjpiYXo6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0ICAgOjpmb286OmJhcjo6YmF6OjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgJmxvYywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZtc2cpCit7CisgIHN0ZDo6Y2VyciA8PCAiQXQgIiA8PCBsb2MgPDwgIjogIiA8PCBtc2cgPDwgc3RkOjplbmRsOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgICAgOjpmb286OmJhcjo6YmF6OjpwYXJzZXIgcDsKKyAgcmV0dXJuIHAucGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE3MjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmNjIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjKysuYXQ6MTcyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTcyOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkiICJjKysuYXQ6MTcyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE3MjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImMrKy5hdDoxNzIiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE3MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNzI6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjKysuYXQ6MTcyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTcyOiBiaXNvbiAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYysrLmF0OjE3MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE3MjogXCRCSVNPTl9DWFhfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DWFhfV09SS1MiICJjKysuYXQ6MTcyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DWFhfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE3MjogXCRDWFggXCRDWFhGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyAkTElCUyIgImMrKy5hdDoxNzIiCisoICRhdF9jaGVja190cmFjZTsgJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmNjICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTcyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNzI6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAiYysrLmF0OjE3MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTcyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNzI6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYysrLmF0OjE3MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTcyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8zMDQKKyNBVF9TVEFSVF8zMDUKK2F0X2ZuX2dyb3VwX2Jhbm5lciAzMDUgJ2MrKy5hdDoxNzUnIFwKKyAgIlN5bnRhY3RpY2FsbHkgaW52YWxpZCBuYW1lc3BhY2UgcmVmZXJlbmNlcyIgIiAgICAgIiAxOAorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjMwNS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKyVsYW5ndWFnZSAiQysrIgorJWRlZmluZXMKKyVkZWZpbmUgbmFtZXNwYWNlICI6Zm9vOmJhciIKKyV1bmlvbiB7IGludCBpOyB9CislZGVmaW5lIGdsb2JhbF90b2tlbnNfYW5kX3l5c3R5cGUKKworJWNvZGUgeworICAvLyBZWVNUWVBFIGNvbnRhaW5zIGEgbmFtZXNwYWNlIHJlZmVyZW5jZS4KKyAgaW50IHl5bGV4IChZWVNUWVBFICpsdmFsKSB7CisgICAgbHZhbC0+aSA9IDM7CisgICAgcmV0dXJuIDA7CisgIH0KK30KKworJSUKKworc3RhcnQ6IDsKKworJSUKKwordm9pZAorOmZvbzpiYXI6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IDpmb286YmFyOjpwYXJzZXI6OmxvY2F0aW9uX3R5cGUgJmxvYywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZtc2cpCit7CisgIHN0ZDo6Y2VyciA8PCAiQXQgIiA8PCBsb2MgPDwgIjogIiA8PCBtc2cgPDwgc3RkOjplbmRsOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIDpmb286YmFyOjpwYXJzZXIgcDsKKyAgcmV0dXJuIHAucGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE3NjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmNjIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjKysuYXQ6MTc2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTc2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkiICJjKysuYXQ6MTc2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE3NjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImMrKy5hdDoxNzYiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE3NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNzY6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjKysuYXQ6MTc2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTc2OiBiaXNvbiAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYysrLmF0OjE3NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxNzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisKKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislbGFuZ3VhZ2UgIkMrKyIKKyVkZWZpbmVzCislZGVmaW5lIG5hbWVzcGFjZSAiZm9vOiA6YmFyIgorJXVuaW9uIHsgaW50IGk7IH0KKyVkZWZpbmUgZ2xvYmFsX3Rva2Vuc19hbmRfeXlzdHlwZQorCislY29kZSB7CisgIC8vIFlZU1RZUEUgY29udGFpbnMgYSBuYW1lc3BhY2UgcmVmZXJlbmNlLgorICBpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWwpIHsKKyAgICBsdmFsLT5pID0gMzsKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCislJQorCitzdGFydDogOworCislJQorCit2b2lkCitmb286IDpiYXI6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGZvbzogOmJhcjo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICZsb2MsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmbXNnKQoreworICBzdGQ6OmNlcnIgPDwgIkF0ICIgPDwgbG9jIDw8ICI6ICIgPDwgbXNnIDw8IHN0ZDo6ZW5kbDsKK30KKworaW50CittYWluICh2b2lkKQoreworICBmb286IDpiYXI6OnBhcnNlciBwOworICByZXR1cm4gcC5wYXJzZSAoKTsKK30KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTc3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuY2MgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImMrKy5hdDoxNzciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuY2MgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE3NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNzc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuY2MgaW5wdXQueSIgImMrKy5hdDoxNzciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuY2MgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE3NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTc3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYysrLmF0OjE3NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTc3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE3NzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImMrKy5hdDoxNzciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE3NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxNzc6IGJpc29uIC1vIGlucHV0LmNjIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjKysuYXQ6MTc3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE3NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKworCisjIFRoaXMgb25lIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgYFszXScgaXMgZW5jb2RlZCBhcyBgWzNdJywgd2hpY2gKKyMgY29udGFpbnMgc2luZ2xlIG9jY3VycmVuY2VzIG9mIGA6Jy4KKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWxhbmd1YWdlICJDKysiCislZGVmaW5lcworJWRlZmluZSBuYW1lc3BhY2UgImZvb1szXTo6YmFyOjpiYXoiCisldW5pb24geyBpbnQgaTsgfQorJWRlZmluZSBnbG9iYWxfdG9rZW5zX2FuZF95eXN0eXBlCisKKyVjb2RlIHsKKyAgLy8gWVlTVFlQRSBjb250YWlucyBhIG5hbWVzcGFjZSByZWZlcmVuY2UuCisgIGludCB5eWxleCAoWVlTVFlQRSAqbHZhbCkgeworICAgIGx2YWwtPmkgPSAzOworICAgIHJldHVybiAwOworICB9Cit9CisKKyUlCisKK3N0YXJ0OiA7CisKKyUlCisKK3ZvaWQKK2Zvb1szXTo6YmFyOjpiYXo6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0IGZvb1szXTo6YmFyOjpiYXo6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAmbG9jLAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJm1zZykKK3sKKyAgc3RkOjpjZXJyIDw8ICJBdCAiIDw8IGxvYyA8PCAiOiAiIDw8IG1zZyA8PCBzdGQ6OmVuZGw7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgZm9vWzNdOjpiYXI6OmJhejo6cGFyc2VyIHA7CisgIHJldHVybiBwLnBhcnNlICgpOworfQorX0FURU9GCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxODA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiYysrLmF0OjE4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE4MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuY2MgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jYyBpbnB1dC55IiAiYysrLmF0OjE4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxODA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjKysuYXQ6MTgwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxODAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTgwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYysrLmF0OjE4MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE4MDogYmlzb24gLW8gaW5wdXQuY2MgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImMrKy5hdDoxODAiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuY2MgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTgwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCisKKworCitjYXQgPmlucHV0LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KKworJWxhbmd1YWdlICJDKysiCislZGVmaW5lcworJWRlZmluZSBuYW1lc3BhY2UgImZvbzo6YmFyLGJheiIKKyV1bmlvbiB7IGludCBpOyB9CislZGVmaW5lIGdsb2JhbF90b2tlbnNfYW5kX3l5c3R5cGUKKworJWNvZGUgeworICAvLyBZWVNUWVBFIGNvbnRhaW5zIGEgbmFtZXNwYWNlIHJlZmVyZW5jZS4KKyAgaW50IHl5bGV4IChZWVNUWVBFICpsdmFsKSB7CisgICAgbHZhbC0+aSA9IDM7CisgICAgcmV0dXJuIDA7CisgIH0KK30KKworJSUKKworc3RhcnQ6IDsKKworJSUKKwordm9pZAorZm9vOjpiYXIsYmF6OjpwYXJzZXI6OmVycm9yIChjb25zdCBmb286OmJhcixiYXo6OnBhcnNlcjo6bG9jYXRpb25fdHlwZSAmbG9jLAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJm1zZykKK3sKKyAgc3RkOjpjZXJyIDw8ICJBdCAiIDw8IGxvYyA8PCAiOiAiIDw8IG1zZyA8PCBzdGQ6OmVuZGw7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgZm9vOjpiYXIsYmF6OjpwYXJzZXIgcDsKKyAgcmV0dXJuIHAucGFyc2UgKCk7Cit9CitfQVRFT0YKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE4MTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmNjIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjKysuYXQ6MTgxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTgxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkiICJjKysuYXQ6MTgxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE4MTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImMrKy5hdDoxODEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjE4MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxODE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjKysuYXQ6MTgxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTgxOiBiaXNvbiAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYysrLmF0OjE4MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisKKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislbGFuZ3VhZ2UgIkMrKyIKKyVkZWZpbmVzCislZGVmaW5lIG5hbWVzcGFjZSAiZm9vOjpiYXI6OihiYXoiCisldW5pb24geyBpbnQgaTsgfQorJWRlZmluZSBnbG9iYWxfdG9rZW5zX2FuZF95eXN0eXBlCisKKyVjb2RlIHsKKyAgLy8gWVlTVFlQRSBjb250YWlucyBhIG5hbWVzcGFjZSByZWZlcmVuY2UuCisgIGludCB5eWxleCAoWVlTVFlQRSAqbHZhbCkgeworICAgIGx2YWwtPmkgPSAzOworICAgIHJldHVybiAwOworICB9Cit9CisKKyUlCisKK3N0YXJ0OiA7CisKKyUlCisKK3ZvaWQKK2Zvbzo6YmFyOjooYmF6OjpwYXJzZXI6OmVycm9yIChjb25zdCBmb286OmJhcjo6KGJhejo6cGFyc2VyOjpsb2NhdGlvbl90eXBlICZsb2MsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmbXNnKQoreworICBzdGQ6OmNlcnIgPDwgIkF0ICIgPDwgbG9jIDw8ICI6ICIgPDwgbXNnIDw8IHN0ZDo6ZW5kbDsKK30KKworaW50CittYWluICh2b2lkKQoreworICBmb286OmJhcjo6KGJhejo6cGFyc2VyIHA7CisgIHJldHVybiBwLnBhcnNlICgpOworfQorX0FURU9GCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxODI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiYysrLmF0OjE4MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE4MjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuY2MgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jYyBpbnB1dC55IiAiYysrLmF0OjE4MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDoxODI6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjKysuYXQ6MTgyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDoxODIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MTgyOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYysrLmF0OjE4MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjE4MjogYmlzb24gLW8gaW5wdXQuY2MgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImMrKy5hdDoxODIiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuY2MgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MTgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMzA1CisjQVRfU1RBUlRfMzA2CithdF9mbl9ncm91cF9iYW5uZXIgMzA2ICdjKysuYXQ6MTkwJyBcCisgICJFeGNlcHRpb24gc2FmZXR5IiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgMTgKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIzMDYuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisKKworY2F0ID5pbnB1dC55eSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCislc2tlbGV0b24gImxhbHIxLmNjIgorJWRlZmluZXMgLy8gRklYTUU6IE1hbmRhdGVkIGluIDIuNi4KKyVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKworJWNvZGUgcmVxdWlyZXMKK3sKKyAgI2luY2x1ZGUgPGNhc3NlcnQ+CisgICNpbmNsdWRlIDxjc3RkbGliPiAvLyBzaXplX3QgYW5kIGdldGVudi4KKyAgI2luY2x1ZGUgPGlvc3RyZWFtPgorICAjaW5jbHVkZSA8bGlzdD4KKworICBib29sIGRlYnVnID0gZmFsc2U7CisKKyAgLy8vIEEgY2xhc3MgdGhhdCBjb3VudHMgaXRzIG51bWJlciBvZiBpbnN0YW5jZXMuCisgIHN0cnVjdCBPYmplY3QKKyAgeworICAgIHR5cGVkZWYgc3RkOjpsaXN0PGNvbnN0IE9iamVjdCo+IG9iamVjdHM7CisgICAgc3RhdGljIG9iamVjdHMgaW5zdGFuY2VzOworICAgIGNoYXIgdmFsOworCisgICAgc3RhdGljIGJvb2wKKyAgICBlbXB0eSAoKQorICAgIHsKKyAgICAgIHJldHVybiBpbnN0YW5jZXMuZW1wdHkoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZAorICAgIGxvZyAoT2JqZWN0IGNvbnN0ICpvLCBjb25zdCBzdGQ6OnN0cmluZyYgbXNnKQorICAgIHsKKyAgICAgIGlmIChkZWJ1ZykKKyAgICAgICAgeworICAgICAgICAgIGlmIChvKQorICAgICAgICAgICAgc3RkOjpjZXJyIDw8IG8gPDwgIi0+IjsKKyAgICAgICAgICBzdGQ6OmNlcnIgPDwgbXNnIDw8ICIgeyI7CisgICAgICAgICAgY29uc3QgY2hhciogc2VwID0gIiAiOworICAgICAgICAgIGZvciAob2JqZWN0czo6Y29uc3RfaXRlcmF0b3IgaSA9IGluc3RhbmNlcy5iZWdpbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaV9lbmQgPSBpbnN0YW5jZXMuZW5kKCk7CisgICAgICAgICAgICAgICBpICE9IGlfZW5kOworICAgICAgICAgICAgICAgKytpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgc2VwIDw8ICppOworICAgICAgICAgICAgICBzZXAgPSAiLCAiOworICAgICAgICAgICAgfQorICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiIH0iIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIE9iamVjdCAoY2hhciB2KQorICAgICAgOiB2YWwgKHYpCisgICAgeworICAgICAgaW5zdGFuY2VzLnB1c2hfYmFjayh0aGlzKTsKKyAgICAgIGxvZyAodGhpcywgIk9iamVjdDo6T2JqZWN0Iik7CisgICAgfQorCisgICAgfk9iamVjdCAoKQorICAgIHsKKyAgICAgIGluc3RhbmNlcy5yZW1vdmUodGhpcyk7CisgICAgICBsb2cgKHRoaXMsICJPYmplY3Q6On5PYmplY3QiKTsKKyAgICB9CisgIH07Cit9CisKKyVjb2RlCit7CisgICNpbmNsdWRlIDxjYXNzZXJ0PgorICAjaW5jbHVkZSA8Y3N0cmluZz4gLy8gc3RyY2hyCisgICNpbmNsdWRlIDxzdGRleGNlcHQ+CisgIGludCB5eWxleCAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqKTsKKyAgT2JqZWN0OjpvYmplY3RzIE9iamVjdDo6aW5zdGFuY2VzOworICBzdGF0aWMgY2hhciBjb25zdCAqaW5wdXQ7Cit9CisKKyV1bmlvbgoreworICBPYmplY3QgKm9iajsKK30KKworJWluaXRpYWwtYWN0aW9uCit7CisgIGlmIChzdHJjaHIgKGlucHV0LCAnaScpKQorICAgIHRocm93IHN0ZDo6cnVudGltZV9lcnJvciAoImluaXRpYWwtYWN0aW9uIik7Cit9CisKKyVkZXN0cnVjdG9yIHsgZGVsZXRlICQkOyB9IDxvYmo+OworJXByaW50ZXIKK3sKKyAgeXlvIDw8ICQkIDw8ICIgJyIgPDwgJCQtPnZhbCA8PCAnXCcnOworICBpZiAoJCQtPnZhbCA9PSAncCcpCisgICAgdGhyb3cgc3RkOjpydW50aW1lX2Vycm9yICgicHJpbnRlciIpOworfSA8b2JqPjsKKworJXRva2VuIDxvYmo+ICdhJyAnRScgJ2UnICdwJyAnUicgJ3MnICdUJworJXR5cGUgIDxvYmo+IGxpc3QgaXRlbQorCislJQorCitzdGFydDogbGlzdCB7IGRlbGV0ZSAkMTsgfTsKKworbGlzdDoKKyAgaXRlbSAgICAgICB7ICQkID0gJDE7IH0KK3wgaXRlbSBsaXN0ICB7ICQkID0gJDE7IGRlbGV0ZSAkMjsgfSAvLyBSaWdodCByZWN1cnNpb24gdG8gbG9hZCB0aGUgc3RhY2suCis7CisKK2l0ZW06CisgICdhJyAgeyAkJCA9ICQxOyB9Cit8ICdlJyAgeyBZWVVTRSAoJCQpOyBZWVVTRSgkMSk7IGVycm9yIChsb2NhdGlvbl90eXBlKCksICJzeW50YXggZXJyb3IiKTsgfQorLy8gTm90IGp1c3QgJ0UnLCBvdGhlcndpc2Ugd2UgcmVkdWNlIHdoZW4gJ0UnIGlzIHRoZSBsb29rYWhlYWQsIGFuZAorLy8gdGhlbiB0aGUgc3RhY2sgaXMgZW1wdGllZCwgZGVmZWF0aW5nIHRoZSBwb2ludCBvZiB0aGUgdGVzdC4KK3wgJ0UnICdhJyB7IFlZVVNFKCQxKTsgJCQgPSAkMjsgfQorfCAnUicgIHsgJCQgPSBZWV9OVUxMOyBkZWxldGUgJDE7IFlZRVJST1I7IH0KK3wgJ3AnICB7ICQkID0gJDE7IH0KK3wgJ3MnICB7ICQkID0gJDE7IHRocm93IHN0ZDo6cnVudGltZV9lcnJvciAoInJlZHVjdGlvbiIpOyB9Cit8ICdUJyAgeyAkJCA9IFlZX05VTEw7IGRlbGV0ZSAkMTsgWVlBQk9SVDsgfQorfCBlcnJvciB7ICQkID0gWVlfTlVMTDsgeXllcnJvazsgfQorOworJSUKKworaW50Cit5eWxleCAoeXk6OnBhcnNlcjo6c2VtYW50aWNfdHlwZSAqbHZhbHApCit7CisgIC8vICdhJzogbm8gZXJyb3IuCisgIC8vICdlJzogdXNlciBhY3Rpb24gY2FsbHMgZXJyb3IuCisgIC8vICdFJzogc3ludGF4IGVycm9yLCB3aXRoIHl5ZXJyb3IgdGhhdCB0aHJvd3MuCisgIC8vICdpJzogaW5pdGlhbCBhY3Rpb24gdGhyb3dzLgorICAvLyAnbCc6IHl5bGV4IHRocm93cy4KKyAgLy8gJ1InOiBjYWxsIFlZRVJST1IgaW4gdGhlIGFjdGlvbgorICAvLyAncyc6IHJlZHVjdGlvbiB0aHJvd3MuCisgIC8vICdUJzogY2FsbCBZWUFCT1JUIGluIHRoZSBhY3Rpb24KKyAgc3dpdGNoIChpbnQgcmVzID0gKmlucHV0KyspCisgIHsKKyAgICBjYXNlICdsJzoKKyAgICAgIHRocm93IHN0ZDo6cnVudGltZV9lcnJvciAoInl5bGV4Iik7CisgICAgZGVmYXVsdDoKKyAgICAgIGx2YWxwLT5vYmogPSBuZXcgT2JqZWN0IChyZXMpOworICAgICAgLy8gRmFsbCB0aHJvdWdoLgorICAgIGNhc2UgMDoKKyAgICAgIHJldHVybiByZXM7CisgIH0KK30KKworLyogQSBDKysgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3ZvaWQKK3l5OjpwYXJzZXI6OmVycm9yIChjb25zdCBsb2NhdGlvbl90eXBlJiBsLCBjb25zdCBzdGQ6OnN0cmluZyYgbSkKK3sKKyAgWVlVU0UgKGwpOworICB0aHJvdyBzdGQ6OnJ1bnRpbWVfZXJyb3IgKG0pOworfQorCitpbnQKK21haW4gKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pCit7CisgIHN3aXRjaCAoYXJnYykKKyAgeworICAgIGNhc2UgMjoKKyAgICAgIGlucHV0ID0gYXJndlsxXTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMzoKKyAgICAgIGFzc2VydCAoIXN0cmNtcCAoYXJndlsxXSwgIi0tZGVidWciKSk7CisgICAgICBkZWJ1ZyA9IDE7CisgICAgICBpbnB1dCA9IGFyZ3ZbMl07CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYWJvcnQgKCk7CisgIH0KKworICB5eTo6cGFyc2VyIHBhcnNlcjsKKyAgZGVidWcgfD0gISFnZXRlbnYgKCJZWURFQlVHIik7CisgIHBhcnNlci5zZXRfZGVidWdfbGV2ZWwgKGRlYnVnKTsKKyAgaW50IHJlcyA9IDI7CisgIHRyeQorICB7CisgICAgcmVzID0gcGFyc2VyLnBhcnNlICgpOworICB9CisgIGNhdGNoIChjb25zdCBzdGQ6OmV4Y2VwdGlvbiYgZSkKKyAgeworICAgIHN0ZDo6Y2VyciA8PCAiZXhjZXB0aW9uIGNhdWdodDogIiA8PCBlLndoYXQgKCkgPDwgc3RkOjplbmRsOworICB9CisgIGNhdGNoICguLi4pCisgIHsKKyAgICBzdGQ6OmNlcnIgPDwgInVua25vd24gZXhjZXB0aW9uIGNhdWdodCIgPDwgc3RkOjplbmRsOworICB9CisgIE9iamVjdDo6bG9nIChZWV9OVUxMLCAiZW5kIik7CisgIGFzc2VydCAoT2JqZWN0OjplbXB0eSgpKTsKKyAgcmV0dXJuIHJlczsKK30KK19BVEVPRgorCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjM4MjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmNjIC0tcmVwb3J0PWFsbCBpbnB1dC55eSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImMrKy5hdDozODIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuY2MgLS1yZXBvcnQ9YWxsIGlucHV0Lnl5CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MzgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjM4MjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuY2MgLS1yZXBvcnQ9YWxsIGlucHV0Lnl5IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmNjIC0tcmVwb3J0PWFsbCBpbnB1dC55eSIgImMrKy5hdDozODIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuY2MgLS1yZXBvcnQ9YWxsIGlucHV0Lnl5CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MzgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDozODI6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjKysuYXQ6MzgyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDozODIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6MzgyOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiYysrLmF0OjM4MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MzgyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjM4MjogYmlzb24gLW8gaW5wdXQuY2MgLS1yZXBvcnQ9YWxsIGlucHV0Lnl5IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYysrLmF0OjM4MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jYyAtLXJlcG9ydD1hbGwgaW5wdXQueXkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjM4MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjM4MzogXCRCSVNPTl9DWFhfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DWFhfV09SS1MiICJjKysuYXQ6MzgzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DWFhfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDozODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjM4MzogXCRDWFggXCRDWFhGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDWFggJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jYyAkTElCUyIgImMrKy5hdDozODMiCisoICRhdF9jaGVja190cmFjZTsgJENYWCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmNjICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6MzgzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjM4NTogIFwkUFJFUEFSU0VSIC4vaW5wdXQgYWFhYXMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQgYWFhYXMiICJjKysuYXQ6Mzg1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQgYWFhYXMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMiAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDozODUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjM4NTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjKysuYXQ6Mzg1IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiZXhjZXB0aW9uIGNhdWdodDogcmVkdWN0aW9uCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6Mzg1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6Mzg5OiAgXCRQUkVQQVJTRVIgLi9pbnB1dCBhYWFhbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCBhYWFhbCIgImMrKy5hdDozODkiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCBhYWFhbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAyICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjM4OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6Mzg5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImMrKy5hdDozODkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJleGNlcHRpb24gY2F1Z2h0OiB5eWxleAorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjM4OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjM5MzogIFwkUFJFUEFSU0VSIC4vaW5wdXQgaSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCBpIiAiYysrLmF0OjM5MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0IGkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMiAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDozOTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjM5Mzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjKysuYXQ6MzkzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiZXhjZXB0aW9uIGNhdWdodDogaW5pdGlhbC1hY3Rpb24KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDozOTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDozOTc6ICBcJFBSRVBBUlNFUiAuL2lucHV0IGFhYWFwIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IGFhYWFwIiAiYysrLmF0OjM5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0IGFhYWFwCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6Mzk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDozOTc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYysrLmF0OjM5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6Mzk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6Mzk5OiAgXCRQUkVQQVJTRVIgLi9pbnB1dCAtLWRlYnVnIGFhYWFwIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IC0tZGVidWcgYWFhYXAiICJjKysuYXQ6Mzk5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQgLS1kZWJ1ZyBhYWFhcAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAyICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjM5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6Mzk5OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImMrKy5hdDozOTkiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDozOTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6NDAwOiBncmVwICdeZXhjZXB0aW9uIGNhdWdodDogcHJpbnRlclwkJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgJ15leGNlcHRpb24gY2F1Z2h0OiBwcmludGVyJCcgc3RkZXJyIiAiYysrLmF0OjQwMCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwICdeZXhjZXB0aW9uIGNhdWdodDogcHJpbnRlciQnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDo0MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6NDAyOiAgXCRQUkVQQVJTRVIgLi9pbnB1dCBhYWFhZSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCBhYWFhZSIgImMrKy5hdDo0MDIiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9pbnB1dCBhYWFhZQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAyICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjQwMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jKysuYXQ6NDAyOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImMrKy5hdDo0MDIiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJleGNlcHRpb24gY2F1Z2h0OiBzeW50YXggZXJyb3IKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDo0MDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDo0MDY6ICBcJFBSRVBBUlNFUiAuL2lucHV0IGFhYWFFIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IGFhYWFFIiAiYysrLmF0OjQwNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0IGFhYWFFCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDIgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6NDA2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDo0MDY6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYysrLmF0OjQwNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImV4Y2VwdGlvbiBjYXVnaHQ6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBcJGVuZCwgZXhwZWN0aW5nICdhJworIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvYysrLmF0OjQwNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjQxMDogIFwkUFJFUEFSU0VSIC4vaW5wdXQgYWFhYVQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vaW5wdXQgYWFhYVQiICJjKysuYXQ6NDEwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQgYWFhYVQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDo0MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvYysrLmF0OjQxMDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjKysuYXQ6NDEwIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2MrKy5hdDo0MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBUaGVyZSBpcyBlcnJvci1yZWNvdmVyeSwgc28gZXhpdCBzdWNjZXNzLgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDo0MTM6ICBcJFBSRVBBUlNFUiAuL2lucHV0IGFhYWFSIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IGFhYWFSIiAiYysrLmF0OjQxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0IGFhYWFSCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6NDEzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2MrKy5hdDo0MTM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiYysrLmF0OjQxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jKysuYXQ6NDEzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzMwNgorI0FUX1NUQVJUXzMwNworYXRfZm5fZ3JvdXBfYmFubmVyIDMwNyAnamF2YS5hdDozNjAnIFwKKyAgIkNhbGN1bGF0b3IgIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAxOQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjMwNy4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworCisKK2NhdCA+Q2FsYy55IDw8J19BVEVPRicKKy8qIEluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3ItLWNhbGMgKi8KKyVsYW5ndWFnZSAiSmF2YSIKKyVuYW1lLXByZWZpeCAiQ2FsYyIKKyVkZWZpbmUgcGFyc2VyX2NsYXNzX25hbWUgIkNhbGMiCislZGVmaW5lIHB1YmxpYworCisKKyVjb2RlIHsKKworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nIGFyZ3NbXSkgdGhyb3dzIElPRXhjZXB0aW9uCisgIHsKKyAgICBDYWxjTGV4ZXIgbCA9IG5ldyBDYWxjTGV4ZXIgKFN5c3RlbS5pbik7CisgICAgQ2FsYyBwID0gbmV3IENhbGMgKGwpOworICAgIHAucGFyc2UgKCk7CisgIH0KKworfQorCislY29kZSBpbXBvcnRzIHsKKyAgaW1wb3J0IGphdmEuaW8uU3RyZWFtVG9rZW5pemVyOworICBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKKyAgaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CisgIGltcG9ydCBqYXZhLmlvLlJlYWRlcjsKKyAgaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Cit9CisKKy8qIEJpc29uIERlY2xhcmF0aW9ucyAqLworJXRva2VuIDxJbnRlZ2VyPiBOVU0gIm51bWJlciIKKyV0eXBlICA8SW50ZWdlcj4gZXhwCisKKyVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbiAgICAgICAgICAgICovCislbGVmdCAnLScgJysnCislbGVmdCAnKicgJy8nCislbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLworJXJpZ2h0ICdeJyAgICAvKiBleHBvbmVudGlhdGlvbiAgICAgICAgKi8KKworLyogR3JhbW1hciBmb2xsb3dzICovCislJQoraW5wdXQ6CisgIGxpbmUKK3wgaW5wdXQgbGluZQorOworCitsaW5lOgorICAnXG4nCit8IGV4cCAnXG4nCit8IGVycm9yICdcbicKKzsKKworZXhwOgorICBOVU0gICAgICAgICAgICAgICAgeyAkJCA9ICQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KK3wgZXhwICc9JyBleHAKKyAgeworICAgIGlmICgkMS5pbnRWYWx1ZSAoKSAhPSAkMy5pbnRWYWx1ZSAoKSkKKyAgICAgIHl5ZXJyb3IgKCAiY2FsYzogZXJyb3I6ICIgKyAkMSArICIgIT0gIiArICQzKTsKKyAgfQorfCBleHAgJysnIGV4cCAgICAgICAgeyAkJCA9IG5ldyBJbnRlZ2VyICgkMS5pbnRWYWx1ZSAoKSArICQzLmludFZhbHVlICgpKTsgIH0KK3wgZXhwICctJyBleHAgICAgICAgIHsgJCQgPSBuZXcgSW50ZWdlciAoJDEuaW50VmFsdWUgKCkgLSAkMy5pbnRWYWx1ZSAoKSk7ICB9Cit8IGV4cCAnKicgZXhwICAgICAgICB7ICQkID0gbmV3IEludGVnZXIgKCQxLmludFZhbHVlICgpICogJDMuaW50VmFsdWUgKCkpOyAgfQorfCBleHAgJy8nIGV4cCAgICAgICAgeyAkJCA9IG5ldyBJbnRlZ2VyICgkMS5pbnRWYWx1ZSAoKSAvICQzLmludFZhbHVlICgpKTsgIH0KK3wgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSBuZXcgSW50ZWdlciAoLSQyLmludFZhbHVlICgpKTsgICAgICAgICAgICAgICAgICB9Cit8IGV4cCAnXicgZXhwICAgICAgICB7ICQkID0gbmV3IEludGVnZXIgKChpbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgucG93ICgkMS5pbnRWYWx1ZSAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQzLmludFZhbHVlICgpKSk7ICAgICAgICB9Cit8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IG5ldyBJbnRlZ2VyICgxMTExKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KK3wgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSBuZXcgSW50ZWdlciAoMCk7IHJldHVybiBZWUVSUk9SOyAgICAgICAgICAgICAgICB9Cit8ICctJyBlcnJvciAgICAgICAgICB7ICQkID0gbmV3IEludGVnZXIgKDApOyByZXR1cm4gWVlFUlJPUjsgICAgICAgICAgICAgICAgfQorOworCisKKyUlCitjbGFzcyBDYWxjTGV4ZXIgaW1wbGVtZW50cyBDYWxjLkxleGVyIHsKKworICBTdHJlYW1Ub2tlbml6ZXIgc3Q7CisKKyAgcHVibGljIENhbGNMZXhlciAoSW5wdXRTdHJlYW0gaXMpCisgIHsKKyAgICBzdCA9IG5ldyBTdHJlYW1Ub2tlbml6ZXIgKG5ldyBJbnB1dFN0cmVhbVJlYWRlciAoaXMpKTsKKyAgICBzdC5yZXNldFN5bnRheCAoKTsKKyAgICBzdC5lb2xJc1NpZ25pZmljYW50ICh0cnVlKTsKKyAgICBzdC53aGl0ZXNwYWNlQ2hhcnMgKDksIDkpOworICAgIHN0LndoaXRlc3BhY2VDaGFycyAoMzIsIDMyKTsKKyAgICBzdC53b3JkQ2hhcnMgKDQ4LCA1Nyk7CisgIH0KKworCisKKyAgcHVibGljIHZvaWQgeXllcnJvciAoU3RyaW5nIHMpCisgIHsKKyAgICBTeXN0ZW0uZXJyLnByaW50bG4gKHMpOworICB9CisKKyAgSW50ZWdlciB5eWx2YWw7CisKKyAgcHVibGljIE9iamVjdCBnZXRMVmFsKCkgeworICAgIHJldHVybiB5eWx2YWw7CisgIH0KKworICBwdWJsaWMgaW50IHl5bGV4ICgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgaW50IHR0eXBlID0gc3QubmV4dFRva2VuICgpOworCisgICAgaWYgKHR0eXBlID09IHN0LlRUX0VPRikKKyAgICAgIHJldHVybiBDYWxjLkVPRjsKKworICAgIGVsc2UgaWYgKHR0eXBlID09IHN0LlRUX0VPTCkKKyAgICAgIHsKKworICAgICAgICByZXR1cm4gKGludCkgJ1xuJzsKKyAgICAgIH0KKworICAgIGVsc2UgaWYgKHR0eXBlID09IHN0LlRUX1dPUkQpCisgICAgICB7CisgICAgICAgIHl5bHZhbCA9IG5ldyBJbnRlZ2VyIChzdC5zdmFsKTsKKyAgICAgICAgcmV0dXJuIENhbGMuTlVNOworICAgICAgfQorCisgICAgZWxzZQorICAgICAgcmV0dXJuIHN0LnR0eXBlOworICB9CisKKworCit9CisKKworY2xhc3MgUG9zaXRpb24geworICBwdWJsaWMgaW50IGxpbmU7CisgIHB1YmxpYyBpbnQgdG9rZW47CisKKyAgcHVibGljIFBvc2l0aW9uICgpCisgIHsKKyAgICBsaW5lID0gMDsKKyAgICB0b2tlbiA9IDA7CisgIH0KKworICBwdWJsaWMgUG9zaXRpb24gKGludCBsLCBpbnQgdCkKKyAgeworICAgIGxpbmUgPSBsOworICAgIHRva2VuID0gdDsKKyAgfQorCisgIHB1YmxpYyBib29sZWFuIGVxdWFscyAoUG9zaXRpb24gbCkKKyAgeworICAgIHJldHVybiBsLmxpbmUgPT0gbGluZSAmJiBsLnRva2VuID09IHRva2VuOworICB9CisKKyAgcHVibGljIFN0cmluZyB0b1N0cmluZyAoKQorICB7CisgICAgcmV0dXJuIEludGVnZXIudG9TdHJpbmcgKGxpbmUpICsgIi4iICsgSW50ZWdlci50b1N0cmluZyh0b2tlbik7CisgIH0KKworICBwdWJsaWMgaW50IGxpbmVubyAoKQorICB7CisgICAgcmV0dXJuIGxpbmU7CisgIH0KKworICBwdWJsaWMgaW50IHRva2VuICgpCisgIHsKKyAgICByZXR1cm4gdG9rZW47CisgIH0KK30KIAogX0FURU9GCi0gICAgOzsKLQotICAxMzMgKSAjIDEzMy4gY3h4LXR5cGUuYXQ6NDEyOiBHTFI6IFJlc29sdmUgYW1iaWd1aXR5LCBpbXB1cmUsIG5vIGxvY2F0aW9ucwotICAgIGF0X3NldHVwX2xpbmU9J2N4eC10eXBlLmF0OjQxMicKLSAgICBhdF9kZXNjPSdHTFI6IFJlc29sdmUgYW1iaWd1aXR5LCBpbXB1cmUsIG5vIGxvY2F0aW9ucycKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiMTMzOiBHTFI6IFJlc29sdmUgYW1iaWd1aXR5LCBpbXB1cmUsIG5vIGxvY2F0aW9ucyAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiMTMzLiBjeHgtdHlwZS5hdDo0MTI6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KIAogCiAKIAogCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gQ2FsYy5qYXZhIENhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIENhbGMuamF2YSBDYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotIyBVc2luZyB5YWNjLmM/CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gQ2FsYy5qYXZhIENhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBDYWxjLmphdmEgQ2FsYy55IiAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gQ2FsYy5qYXZhIENhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogYmlzb24gLW8gQ2FsYy5qYXZhIENhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIENhbGMuamF2YSBDYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworJGFzX2VjaG8gImphdmEuYXQ6MzYwIiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQUMiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXNfZWNobyAiamF2YS5hdDozNjAiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiBcJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIENhbGMuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIENhbGMuamF2YSIgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBDYWxjLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIFRlc3QgdGhlIHByaW9yaXRpZXMuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEgKyAyICogMyA9IDcKKzEgKyAyICogLTMgPSAtNQorCistMV4yID0gLTEKKygtMSleMiA9IDEKKworLS0tMSA9IC0xCisKKzEgLSAyIC0gMyA9IC00CisxIC0gKDIgLSAzKSA9IDIKKworMl4yXjMgPSAyNTYKKygyXjIpXjMgPSA2NAorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIFNvbWUgc3ludGF4IGVycm9ycy4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMCAwCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiAgXCRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IiAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorX0FURU9GCisKKyMgMi4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCitzZWQgJ3MvXlstMC05Ll0qOiAvLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgMy4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNC4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMS8vMgorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKK2Vycm9yCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiAgXCRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IiAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICR1bmRlZmluZWQKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEgPSAyID0gMworX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjQ6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPScKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKworKzEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6ICBcJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCitfQVRFT0YKKworIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KK3NlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA0LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiAgXCRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCAvZGV2L251bGwiICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCAvZGV2L251bGwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAorX0FURU9GCisKKyMgMi4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCitzZWQgJ3MvXlstMC05Ll0qOiAvLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgMy4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNC4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBFeGVyY2lzZSB0aGUgZXJyb3IgdG9rZW46IHdpdGhvdXQgaXQsIHdlIGRpZSBhdCB0aGUgZmlyc3QgZXJyb3IsCisjIGhlbmNlIGJlIHN1cmUgdG8KKyMKKyMgLSBoYXZlIHNldmVyYWwgZXJyb3JzIHdoaWNoIGV4ZXJjaXNlIGRpZmZlcmVudCBzaGlmdC9kaXNjYXJkaW5ncworIyAgIC0gKCk6IG5vdGhpbmcgdG8gcG9wLCBub3RoaW5nIHRvIGRpc2NhcmQKKyMgICAtICgxICsgMSArIDEgKyk6IGEgbG90IHRvIHBvcCwgbm90aGluZyB0byBkaXNjYXJkCisjICAgLSAoKiAqICopOiBub3RoaW5nIHRvIHBvcCwgYSBsb3QgdG8gZGlzY2FyZAorIyAgIC0gKDEgKyAyICogKik6IHNvbWUgdG8gcG9wIGFuZCBkaXNjYXJkCisjCisjIC0gdGVzdCB0aGUgYWN0aW9uIGFzc29jaWF0ZWQgdG8gYGVycm9yJworIworIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCisjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKKyMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCisjCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygpICsgKDEgKyAxICsgMSArKSArICgqICogKikgKyAoMSAqIDIgKiAqKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6ICBcJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjExOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE0OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjI0OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEtMS4yNzogY2FsYzogZXJyb3I6IDQ0NDQgIT0gMQorX0FURU9GCisKKyMgMi4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCitzZWQgJ3MvXlstMC05Ll0qOiAvLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgMy4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNC4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBUaGUgc2FtZSwgYnV0IHRoaXMgdGltZSBleGVyY2lzaW5nIGV4cGxpY2l0bHkgdHJpZ2dlcmVkIHN5bnRheCBlcnJvcnMuCisjIFBPU0lYIHNheXMgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCEpICsgKDAgMCkgPSAxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiAgXCRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IiAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuNzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS4xLTEuMTA6IGNhbGM6IGVycm9yOiAyMjIyICE9IDEKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygtICopICsgKDAgMCkgPSAxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiAgXCRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IiAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS44OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjEtMS4xMTogY2FsYzogZXJyb3I6IDIyMjIgIT0gMQorX0FURU9GCisKKyMgMi4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCitzZWQgJ3MvXlstMC05Ll0qOiAvLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgMy4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNC4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzMwNworI0FUX1NUQVJUXzMwOAorYXRfZm5fZ3JvdXBfYmFubmVyIDMwOCAnamF2YS5hdDozNjAnIFwKKyAgIkNhbGN1bGF0b3IgJWVycm9yLXZlcmJvc2UgIiAiICAgICAgICAgICAgICAgICAgICAgIiAxOQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjMwOC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIAogCiAKK2NhdCA+Q2FsYy55IDw8J19BVEVPRicKKy8qIEluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3ItLWNhbGMgKi8KKyVsYW5ndWFnZSAiSmF2YSIKKyVuYW1lLXByZWZpeCAiQ2FsYyIKKyVkZWZpbmUgcGFyc2VyX2NsYXNzX25hbWUgIkNhbGMiCislZGVmaW5lIHB1YmxpYworCislZXJyb3ItdmVyYm9zZQorJWNvZGUgeworCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmcgYXJnc1tdKSB0aHJvd3MgSU9FeGNlcHRpb24KKyAgeworICAgIENhbGNMZXhlciBsID0gbmV3IENhbGNMZXhlciAoU3lzdGVtLmluKTsKKyAgICBDYWxjIHAgPSBuZXcgQ2FsYyAobCk7CisgICAgcC5wYXJzZSAoKTsKKyAgfQorCit9CisKKyVjb2RlIGltcG9ydHMgeworICBpbXBvcnQgamF2YS5pby5TdHJlYW1Ub2tlbml6ZXI7CisgIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworICBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKKyAgaW1wb3J0IGphdmEuaW8uUmVhZGVyOworICBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK30KKworLyogQmlzb24gRGVjbGFyYXRpb25zICovCisldG9rZW4gPEludGVnZXI+IE5VTSAibnVtYmVyIgorJXR5cGUgIDxJbnRlZ2VyPiBleHAKKworJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uICAgICAgICAgICAgKi8KKyVsZWZ0ICctJyAnKycKKyVsZWZ0ICcqJyAnLycKKyVsZWZ0IE5FRyAgICAgLyogbmVnYXRpb24tLXVuYXJ5IG1pbnVzICovCislcmlnaHQgJ14nICAgIC8qIGV4cG9uZW50aWF0aW9uICAgICAgICAqLworCisvKiBHcmFtbWFyIGZvbGxvd3MgKi8KKyUlCitpbnB1dDoKKyAgbGluZQorfCBpbnB1dCBsaW5lCis7CisKK2xpbmU6CisgICdcbicKK3wgZXhwICdcbicKK3wgZXJyb3IgJ1xuJworOworCitleHA6CisgIE5VTSAgICAgICAgICAgICAgICB7ICQkID0gJDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorfCBleHAgJz0nIGV4cAorICB7CisgICAgaWYgKCQxLmludFZhbHVlICgpICE9ICQzLmludFZhbHVlICgpKQorICAgICAgeXllcnJvciAoICJjYWxjOiBlcnJvcjogIiArICQxICsgIiAhPSAiICsgJDMpOworICB9Cit8IGV4cCAnKycgZXhwICAgICAgICB7ICQkID0gbmV3IEludGVnZXIgKCQxLmludFZhbHVlICgpICsgJDMuaW50VmFsdWUgKCkpOyAgfQorfCBleHAgJy0nIGV4cCAgICAgICAgeyAkJCA9IG5ldyBJbnRlZ2VyICgkMS5pbnRWYWx1ZSAoKSAtICQzLmludFZhbHVlICgpKTsgIH0KK3wgZXhwICcqJyBleHAgICAgICAgIHsgJCQgPSBuZXcgSW50ZWdlciAoJDEuaW50VmFsdWUgKCkgKiAkMy5pbnRWYWx1ZSAoKSk7ICB9Cit8IGV4cCAnLycgZXhwICAgICAgICB7ICQkID0gbmV3IEludGVnZXIgKCQxLmludFZhbHVlICgpIC8gJDMuaW50VmFsdWUgKCkpOyAgfQorfCAnLScgZXhwICAlcHJlYyBORUcgeyAkJCA9IG5ldyBJbnRlZ2VyICgtJDIuaW50VmFsdWUgKCkpOyAgICAgICAgICAgICAgICAgIH0KK3wgZXhwICdeJyBleHAgICAgICAgIHsgJCQgPSBuZXcgSW50ZWdlciAoKGludCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5wb3cgKCQxLmludFZhbHVlICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDMuaW50VmFsdWUgKCkpKTsgICAgICAgIH0KK3wgJygnIGV4cCAnKScgICAgICAgIHsgJCQgPSAkMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cit8ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gbmV3IEludGVnZXIgKDExMTEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorfCAnIScgICAgICAgICAgICAgICAgeyAkJCA9IG5ldyBJbnRlZ2VyICgwKTsgcmV0dXJuIFlZRVJST1I7ICAgICAgICAgICAgICAgIH0KK3wgJy0nIGVycm9yICAgICAgICAgIHsgJCQgPSBuZXcgSW50ZWdlciAoMCk7IHJldHVybiBZWUVSUk9SOyAgICAgICAgICAgICAgICB9Cis7CiAKIAotIyB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZiAlbG9jYXRpb24gJiAlcHVyZSAmICglZ2xyIG9yICVwYXJzZS1wYXJhbSkuCislJQorY2xhc3MgQ2FsY0xleGVyIGltcGxlbWVudHMgQ2FsYy5MZXhlciB7CiAKLSMgeXllcnJvciBhbHdheXMgc2VlcyB0aGUgbG9jYXRpb25zICh3aGVuIGFjdGl2YXRlZCksIGV4Y2VwdCBpZgotIyB5YWNjICYgcHVyZSAmICFwYXJhbS4KKyAgU3RyZWFtVG9rZW5pemVyIHN0OworCisgIHB1YmxpYyBDYWxjTGV4ZXIgKElucHV0U3RyZWFtIGlzKQorICB7CisgICAgc3QgPSBuZXcgU3RyZWFtVG9rZW5pemVyIChuZXcgSW5wdXRTdHJlYW1SZWFkZXIgKGlzKSk7CisgICAgc3QucmVzZXRTeW50YXggKCk7CisgICAgc3QuZW9sSXNTaWduaWZpY2FudCAodHJ1ZSk7CisgICAgc3Qud2hpdGVzcGFjZUNoYXJzICg5LCA5KTsKKyAgICBzdC53aGl0ZXNwYWNlQ2hhcnMgKDMyLCAzMik7CisgICAgc3Qud29yZENoYXJzICg0OCwgNTcpOworICB9CiAKIAotIyBUaGUgaW50ZXJmYWNlIGlzIHB1cmU6IGVpdGhlciBiZWNhdXNlICVwdXJlLXBhcnNlciwgb3IgYmVjYXVzZSB3ZQotIyBhcmUgdXNpbmcgdGhlIEMrKyBwYXJzZXJzLgorCisgIHB1YmxpYyB2b2lkIHl5ZXJyb3IgKFN0cmluZyBzKQorICB7CisgICAgU3lzdGVtLmVyci5wcmludGxuIChzKTsKKyAgfQorCisgIEludGVnZXIgeXlsdmFsOworCisgIHB1YmxpYyBPYmplY3QgZ2V0TFZhbCgpIHsKKyAgICByZXR1cm4geXlsdmFsOworICB9CisKKyAgcHVibGljIGludCB5eWxleCAoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIGludCB0dHlwZSA9IHN0Lm5leHRUb2tlbiAoKTsKKworICAgIGlmICh0dHlwZSA9PSBzdC5UVF9FT0YpCisgICAgICByZXR1cm4gQ2FsYy5FT0Y7CisKKyAgICBlbHNlIGlmICh0dHlwZSA9PSBzdC5UVF9FT0wpCisgICAgICB7CisKKyAgICAgICAgcmV0dXJuIChpbnQpICdcbic7CisgICAgICB9CisKKyAgICBlbHNlIGlmICh0dHlwZSA9PSBzdC5UVF9XT1JEKQorICAgICAgeworICAgICAgICB5eWx2YWwgPSBuZXcgSW50ZWdlciAoc3Quc3ZhbCk7CisgICAgICAgIHJldHVybiBDYWxjLk5VTTsKKyAgICAgIH0KKworICAgIGVsc2UKKyAgICAgIHJldHVybiBzdC50dHlwZTsKKyAgfQorCisKKworfQorCisKK2NsYXNzIFBvc2l0aW9uIHsKKyAgcHVibGljIGludCBsaW5lOworICBwdWJsaWMgaW50IHRva2VuOworCisgIHB1YmxpYyBQb3NpdGlvbiAoKQorICB7CisgICAgbGluZSA9IDA7CisgICAgdG9rZW4gPSAwOworICB9CisKKyAgcHVibGljIFBvc2l0aW9uIChpbnQgbCwgaW50IHQpCisgIHsKKyAgICBsaW5lID0gbDsKKyAgICB0b2tlbiA9IHQ7CisgIH0KKworICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMgKFBvc2l0aW9uIGwpCisgIHsKKyAgICByZXR1cm4gbC5saW5lID09IGxpbmUgJiYgbC50b2tlbiA9PSB0b2tlbjsKKyAgfQorCisgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcgKCkKKyAgeworICAgIHJldHVybiBJbnRlZ2VyLnRvU3RyaW5nIChsaW5lKSArICIuIiArIEludGVnZXIudG9TdHJpbmcodG9rZW4pOworICB9CisKKyAgcHVibGljIGludCBsaW5lbm8gKCkKKyAgeworICAgIHJldHVybiBsaW5lOworICB9CisKKyAgcHVibGljIGludCB0b2tlbiAoKQorICB7CisgICAgcmV0dXJuIHRva2VuOworICB9Cit9CisKK19BVEVPRgorCisKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBDYWxjLmphdmEgQ2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gQ2FsYy5qYXZhIENhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gQ2FsYy5qYXZhIENhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBDYWxjLmphdmEgQ2FsYy55IiAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gQ2FsYy5qYXZhIENhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogYmlzb24gLW8gQ2FsYy5qYXZhIENhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIENhbGMuamF2YSBDYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworJGFzX2VjaG8gImphdmEuYXQ6MzYwIiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQUMiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXNfZWNobyAiamF2YS5hdDozNjAiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiBcJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIENhbGMuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIENhbGMuamF2YSIgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBDYWxjLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIFRlc3QgdGhlIHByaW9yaXRpZXMuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEgKyAyICogMyA9IDcKKzEgKyAyICogLTMgPSAtNQorCistMV4yID0gLTEKKygtMSleMiA9IDEKKworLS0tMSA9IC0xCisKKzEgLSAyIC0gMyA9IC00CisxIC0gKDIgLSAzKSA9IDIKKworMl4yXjMgPSAyNTYKKygyXjIpXjMgPSA2NAorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIFNvbWUgc3ludGF4IGVycm9ycy4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMCAwCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiAgXCRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IiAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorX0FURU9GCisKKyMgMi4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCitzZWQgJ3MvXlstMC05Ll0qOiAvLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgMy4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNC4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMS8vMgorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnLycsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKK2Vycm9yCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiAgXCRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IiAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICR1bmRlZmluZWQKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEgPSAyID0gMworX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjQ6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnPScKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKworKzEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6ICBcJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMi4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJysnCitfQVRFT0YKKworIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KK3NlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA0LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBFeGVyY2lzZSBlcnJvciBtZXNzYWdlcyB3aXRoIEVPRjogd29yayBvbiBhbiBlbXB0eSBmaWxlLgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiAgXCRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgL2Rldi9udWxsIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCAvZGV2L251bGwiICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCAvZGV2L251bGwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAorX0FURU9GCisKKyMgMi4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCitzZWQgJ3MvXlstMC05Ll0qOiAvLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgMy4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNC4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBFeGVyY2lzZSB0aGUgZXJyb3IgdG9rZW46IHdpdGhvdXQgaXQsIHdlIGRpZSBhdCB0aGUgZmlyc3QgZXJyb3IsCisjIGhlbmNlIGJlIHN1cmUgdG8KKyMKKyMgLSBoYXZlIHNldmVyYWwgZXJyb3JzIHdoaWNoIGV4ZXJjaXNlIGRpZmZlcmVudCBzaGlmdC9kaXNjYXJkaW5ncworIyAgIC0gKCk6IG5vdGhpbmcgdG8gcG9wLCBub3RoaW5nIHRvIGRpc2NhcmQKKyMgICAtICgxICsgMSArIDEgKyk6IGEgbG90IHRvIHBvcCwgbm90aGluZyB0byBkaXNjYXJkCisjICAgLSAoKiAqICopOiBub3RoaW5nIHRvIHBvcCwgYSBsb3QgdG8gZGlzY2FyZAorIyAgIC0gKDEgKyAyICogKik6IHNvbWUgdG8gcG9wIGFuZCBkaXNjYXJkCisjCisjIC0gdGVzdCB0aGUgYWN0aW9uIGFzc29jaWF0ZWQgdG8gYGVycm9yJworIworIyAtIGNoZWNrIHRoZSBsb29rYWhlYWQgdGhhdCB0cmlnZ2VycyBhbiBlcnJvciBpcyBub3QgZGlzY2FyZGVkCisjICAgd2hlbiB3ZSBlbnRlciBlcnJvciByZWNvdmVyeS4gIEJlbG93LCB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlCisjICAgZmlyc3QgZXJyb3IgaXMgIikiLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBhbmQKKyMgICBwcm9kdWNlIHRoZSAiMCIgdGhhdCB0cmlnZ2VycyB0aGUgIjAgIT0gMSIgZXJyb3IuCisjCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygpICsgKDEgKyAxICsgMSArKSArICgqICogKikgKyAoMSAqIDIgKiAqKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6ICBcJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjExOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyknLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjE0OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjI0OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjEtMS4yNzogY2FsYzogZXJyb3I6IDQ0NDQgIT0gMQorX0FURU9GCisKKyMgMi4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCitzZWQgJ3MvXlstMC05Ll0qOiAvLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgMy4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNC4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBUaGUgc2FtZSwgYnV0IHRoaXMgdGltZSBleGVyY2lzaW5nIGV4cGxpY2l0bHkgdHJpZ2dlcmVkIHN5bnRheCBlcnJvcnMuCisjIFBPU0lYIHNheXMgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZSBlcnJvciBzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCEpICsgKDAgMCkgPSAxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiAgXCRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IiAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuNzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS4xLTEuMTA6IGNhbGM6IGVycm9yOiAyMjIyICE9IDEKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKygtICopICsgKDAgMCkgPSAxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiAgXCRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IiAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS44OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjEtMS4xMTogY2FsYzogZXJyb3I6IDIyMjIgIT0gMQorX0FURU9GCisKKyMgMi4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCitzZWQgJ3MvXlstMC05Ll0qOiAvLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgMy4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNC4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzMwOAorI0FUX1NUQVJUXzMwOQorYXRfZm5fZ3JvdXBfYmFubmVyIDMwOSAnamF2YS5hdDozNjAnIFwKKyAgIkNhbGN1bGF0b3IgJWxvY2F0aW9ucyAiICIgICAgICAgICAgICAgICAgICAgICAgICAgIiAxOQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjMwOS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworCisKK2NhdCA+Q2FsYy55IDw8J19BVEVPRicKKy8qIEluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3ItLWNhbGMgKi8KKyVsYW5ndWFnZSAiSmF2YSIKKyVuYW1lLXByZWZpeCAiQ2FsYyIKKyVkZWZpbmUgcGFyc2VyX2NsYXNzX25hbWUgIkNhbGMiCislZGVmaW5lIHB1YmxpYworCislbG9jYXRpb25zCislY29kZSB7CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZyBhcmdzW10pIHRocm93cyBJT0V4Y2VwdGlvbgorICB7CisgICAgQ2FsY0xleGVyIGwgPSBuZXcgQ2FsY0xleGVyIChTeXN0ZW0uaW4pOworICAgIENhbGMgcCA9IG5ldyBDYWxjIChsKTsKKyAgICBwLnBhcnNlICgpOworICB9CisKK30KKworJWNvZGUgaW1wb3J0cyB7CisgIGltcG9ydCBqYXZhLmlvLlN0cmVhbVRva2VuaXplcjsKKyAgaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CisgIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOworICBpbXBvcnQgamF2YS5pby5SZWFkZXI7CisgIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworfQorCisvKiBCaXNvbiBEZWNsYXJhdGlvbnMgKi8KKyV0b2tlbiA8SW50ZWdlcj4gTlVNICJudW1iZXIiCisldHlwZSAgPEludGVnZXI+IGV4cAorCislbm9uYXNzb2MgJz0nIC8qIGNvbXBhcmlzb24gICAgICAgICAgICAqLworJWxlZnQgJy0nICcrJworJWxlZnQgJyonICcvJworJWxlZnQgTkVHICAgICAvKiBuZWdhdGlvbi0tdW5hcnkgbWludXMgKi8KKyVyaWdodCAnXicgICAgLyogZXhwb25lbnRpYXRpb24gICAgICAgICovCisKKy8qIEdyYW1tYXIgZm9sbG93cyAqLworJSUKK2lucHV0OgorICBsaW5lCit8IGlucHV0IGxpbmUKKzsKKworbGluZToKKyAgJ1xuJworfCBleHAgJ1xuJworfCBlcnJvciAnXG4nCis7CisKK2V4cDoKKyAgTlVNICAgICAgICAgICAgICAgIHsgJCQgPSAkMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cit8IGV4cCAnPScgZXhwCisgIHsKKyAgICBpZiAoJDEuaW50VmFsdWUgKCkgIT0gJDMuaW50VmFsdWUgKCkpCisgICAgICB5eWVycm9yIChAJCwgImNhbGM6IGVycm9yOiAiICsgJDEgKyAiICE9ICIgKyAkMyk7CisgIH0KK3wgZXhwICcrJyBleHAgICAgICAgIHsgJCQgPSBuZXcgSW50ZWdlciAoJDEuaW50VmFsdWUgKCkgKyAkMy5pbnRWYWx1ZSAoKSk7ICB9Cit8IGV4cCAnLScgZXhwICAgICAgICB7ICQkID0gbmV3IEludGVnZXIgKCQxLmludFZhbHVlICgpIC0gJDMuaW50VmFsdWUgKCkpOyAgfQorfCBleHAgJyonIGV4cCAgICAgICAgeyAkJCA9IG5ldyBJbnRlZ2VyICgkMS5pbnRWYWx1ZSAoKSAqICQzLmludFZhbHVlICgpKTsgIH0KK3wgZXhwICcvJyBleHAgICAgICAgIHsgJCQgPSBuZXcgSW50ZWdlciAoJDEuaW50VmFsdWUgKCkgLyAkMy5pbnRWYWx1ZSAoKSk7ICB9Cit8ICctJyBleHAgICVwcmVjIE5FRyB7ICQkID0gbmV3IEludGVnZXIgKC0kMi5pbnRWYWx1ZSAoKSk7ICAgICAgICAgICAgICAgICAgfQorfCBleHAgJ14nIGV4cCAgICAgICAgeyAkJCA9IG5ldyBJbnRlZ2VyICgoaW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLnBvdyAoJDEuaW50VmFsdWUgKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMy5pbnRWYWx1ZSAoKSkpOyAgICAgICAgfQorfCAnKCcgZXhwICcpJyAgICAgICAgeyAkJCA9ICQyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KK3wgJygnIGVycm9yICcpJyAgICAgIHsgJCQgPSBuZXcgSW50ZWdlciAoMTExMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cit8ICchJyAgICAgICAgICAgICAgICB7ICQkID0gbmV3IEludGVnZXIgKDApOyByZXR1cm4gWVlFUlJPUjsgICAgICAgICAgICAgICAgfQorfCAnLScgZXJyb3IgICAgICAgICAgeyAkJCA9IG5ldyBJbnRlZ2VyICgwKTsgcmV0dXJuIFlZRVJST1I7ICAgICAgICAgICAgICAgIH0KKzsKKworCislJQorY2xhc3MgQ2FsY0xleGVyIGltcGxlbWVudHMgQ2FsYy5MZXhlciB7CisKKyAgU3RyZWFtVG9rZW5pemVyIHN0OworCisgIHB1YmxpYyBDYWxjTGV4ZXIgKElucHV0U3RyZWFtIGlzKQorICB7CisgICAgc3QgPSBuZXcgU3RyZWFtVG9rZW5pemVyIChuZXcgSW5wdXRTdHJlYW1SZWFkZXIgKGlzKSk7CisgICAgc3QucmVzZXRTeW50YXggKCk7CisgICAgc3QuZW9sSXNTaWduaWZpY2FudCAodHJ1ZSk7CisgICAgc3Qud2hpdGVzcGFjZUNoYXJzICg5LCA5KTsKKyAgICBzdC53aGl0ZXNwYWNlQ2hhcnMgKDMyLCAzMik7CisgICAgc3Qud29yZENoYXJzICg0OCwgNTcpOworICB9CisKKworICBQb3NpdGlvbiB5eXBvcyA9IG5ldyBQb3NpdGlvbiAoMSwgMCk7CisKKyAgcHVibGljIFBvc2l0aW9uIGdldFN0YXJ0UG9zKCkgeworICAgIHJldHVybiB5eXBvczsKKyAgfQorCisgIHB1YmxpYyBQb3NpdGlvbiBnZXRFbmRQb3MoKSB7CisgICAgcmV0dXJuIHl5cG9zOworICB9CisKKyAgcHVibGljIHZvaWQgeXllcnJvciAoQ2FsYy5Mb2NhdGlvbiBsLCBTdHJpbmcgcykKKyAgeworICAgIGlmIChsID09IG51bGwpCisgICAgICBTeXN0ZW0uZXJyLnByaW50bG4gKHMpOworICAgIGVsc2UKKyAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiAobCArICI6ICIgKyBzKTsKKyAgfQorCisKKyAgSW50ZWdlciB5eWx2YWw7CisKKyAgcHVibGljIE9iamVjdCBnZXRMVmFsKCkgeworICAgIHJldHVybiB5eWx2YWw7CisgIH0KKworICBwdWJsaWMgaW50IHl5bGV4ICgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgaW50IHR0eXBlID0gc3QubmV4dFRva2VuICgpOworICAgIHl5cG9zID0gbmV3IFBvc2l0aW9uICh5eXBvcy5saW5lbm8gKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5cG9zLnRva2VuICgpICsgMSk7CisgICAgaWYgKHR0eXBlID09IHN0LlRUX0VPRikKKyAgICAgIHJldHVybiBDYWxjLkVPRjsKKworICAgIGVsc2UgaWYgKHR0eXBlID09IHN0LlRUX0VPTCkKKyAgICAgIHsKKyAgICAgICAgeXlwb3MgPSBuZXcgUG9zaXRpb24gKHl5cG9zLmxpbmVubyAoKSArIDEsIDApOworICAgICAgICByZXR1cm4gKGludCkgJ1xuJzsKKyAgICAgIH0KKworICAgIGVsc2UgaWYgKHR0eXBlID09IHN0LlRUX1dPUkQpCisgICAgICB7CisgICAgICAgIHl5bHZhbCA9IG5ldyBJbnRlZ2VyIChzdC5zdmFsKTsKKyAgICAgICAgcmV0dXJuIENhbGMuTlVNOworICAgICAgfQorCisgICAgZWxzZQorICAgICAgcmV0dXJuIHN0LnR0eXBlOworICB9CisKKworCit9CisKKworY2xhc3MgUG9zaXRpb24geworICBwdWJsaWMgaW50IGxpbmU7CisgIHB1YmxpYyBpbnQgdG9rZW47CisKKyAgcHVibGljIFBvc2l0aW9uICgpCisgIHsKKyAgICBsaW5lID0gMDsKKyAgICB0b2tlbiA9IDA7CisgIH0KKworICBwdWJsaWMgUG9zaXRpb24gKGludCBsLCBpbnQgdCkKKyAgeworICAgIGxpbmUgPSBsOworICAgIHRva2VuID0gdDsKKyAgfQorCisgIHB1YmxpYyBib29sZWFuIGVxdWFscyAoUG9zaXRpb24gbCkKKyAgeworICAgIHJldHVybiBsLmxpbmUgPT0gbGluZSAmJiBsLnRva2VuID09IHRva2VuOworICB9CisKKyAgcHVibGljIFN0cmluZyB0b1N0cmluZyAoKQorICB7CisgICAgcmV0dXJuIEludGVnZXIudG9TdHJpbmcgKGxpbmUpICsgIi4iICsgSW50ZWdlci50b1N0cmluZyh0b2tlbik7CisgIH0KKworICBwdWJsaWMgaW50IGxpbmVubyAoKQorICB7CisgICAgcmV0dXJuIGxpbmU7CisgIH0KKworICBwdWJsaWMgaW50IHRva2VuICgpCisgIHsKKyAgICByZXR1cm4gdG9rZW47CisgIH0KK30KKworX0FURU9GCisKKworCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIENhbGMuamF2YSBDYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBDYWxjLmphdmEgQ2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBDYWxjLmphdmEgQ2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIENhbGMuamF2YSBDYWxjLnkiICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBDYWxjLmphdmEgQ2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiBiaXNvbiAtbyBDYWxjLmphdmEgQ2FsYy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gQ2FsYy5qYXZhIENhbGMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCiskYXNfZWNobyAiamF2YS5hdDozNjAiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBQyIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhc19lY2hvICJqYXZhLmF0OjM2MCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkEiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6IFwkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggQ2FsYy5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggQ2FsYy5qYXZhIiAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIENhbGMuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgVGVzdCB0aGUgcHJpb3JpdGllcy4KK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMSArIDIgKiAzID0gNworMSArIDIgKiAtMyA9IC01CisKKy0xXjIgPSAtMQorKC0xKV4yID0gMQorCistLS0xID0gLTEKKworMSAtIDIgLSAzID0gLTQKKzEgLSAoMiAtIDMpID0gMgorCisyXjJeMyA9IDI1NgorKDJeMileMyA9IDY0CitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiAgXCRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IiAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgU29tZSBzeW50YXggZXJyb3JzLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCiswIDAKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6ICBcJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4yOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCitfQVRFT0YKKworIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA0LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxLy8yCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiAgXCRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IiAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMzogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcvJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworX0FURU9GCisKKyMgMi4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgMy4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNC4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworZXJyb3IKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6ICBcJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJHVuZGVmaW5lZAorX0FURU9GCisKKyMgMi4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgMy4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNC4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworMSA9IDIgPSAzCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiAgXCRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IiAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICc9JworX0FURU9GCisKKyMgMi4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgMy4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNC4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworCisrMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisyLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKycKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIEV4ZXJjaXNlIGVycm9yIG1lc3NhZ2VzIHdpdGggRU9GOiB3b3JrIG9uIGFuIGVtcHR5IGZpbGUuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6ICBcJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCAvZGV2L251bGwiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IC9kZXYvbnVsbCIgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IC9kZXYvbnVsbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4xOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0CitfQVRFT0YKKworIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA0LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIEV4ZXJjaXNlIHRoZSBlcnJvciB0b2tlbjogd2l0aG91dCBpdCwgd2UgZGllIGF0IHRoZSBmaXJzdCBlcnJvciwKKyMgaGVuY2UgYmUgc3VyZSB0bworIworIyAtIGhhdmUgc2V2ZXJhbCBlcnJvcnMgd2hpY2ggZXhlcmNpc2UgZGlmZmVyZW50IHNoaWZ0L2Rpc2NhcmRpbmdzCisjICAgLSAoKTogbm90aGluZyB0byBwb3AsIG5vdGhpbmcgdG8gZGlzY2FyZAorIyAgIC0gKDEgKyAxICsgMSArKTogYSBsb3QgdG8gcG9wLCBub3RoaW5nIHRvIGRpc2NhcmQKKyMgICAtICgqICogKik6IG5vdGhpbmcgdG8gcG9wLCBhIGxvdCB0byBkaXNjYXJkCisjICAgLSAoMSArIDIgKiAqKTogc29tZSB0byBwb3AgYW5kIGRpc2NhcmQKKyMKKyMgLSB0ZXN0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBgZXJyb3InCisjCisjIC0gY2hlY2sgdGhlIGxvb2thaGVhZCB0aGF0IHRyaWdnZXJzIGFuIGVycm9yIGlzIG5vdCBkaXNjYXJkZWQKKyMgICB3aGVuIHdlIGVudGVyIGVycm9yIHJlY292ZXJ5LiAgQmVsb3csIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUKKyMgICBmaXJzdCBlcnJvciBpcyAiKSIsIHdoaWNoIGlzIG5lZWRlZCB0byByZWNvdmVyIGZyb20gdGhlIGVycm9yIGFuZAorIyAgIHByb2R1Y2UgdGhlICIwIiB0aGF0IHRyaWdnZXJzIHRoZSAiMCAhPSAxIiBlcnJvci4KKyMKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKCkgKyAoMSArIDEgKyAxICspICsgKCogKiAqKSArICgxICogMiAqICopID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKScsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMTQ6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMjQ6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuMS0xLjI3OiBjYWxjOiBlcnJvcjogNDQ0NCAhPSAxCitfQVRFT0YKKworIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA0LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisjIFRoZSBzYW1lLCBidXQgdGhpcyB0aW1lIGV4ZXJjaXNpbmcgZXhwbGljaXRseSB0cmlnZ2VyZWQgc3ludGF4IGVycm9ycy4KKyMgUE9TSVggc2F5cyB0aGUgbG9va2FoZWFkIGNhdXNpbmcgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoISkgKyAoMCAwKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6ICBcJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS43OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgbnVtYmVyCisxLjEtMS4xMDogY2FsYzogZXJyb3I6IDIyMjIgIT0gMQorX0FURU9GCisKKyMgMi4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgMy4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNC4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK2NhdCA+aW5wdXQgPDwnX0FURU9GJworKC0gKikgKyAoMCAwKSA9IDEKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6ICBcJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyonLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCisxLjg6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMS0xLjExOiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCitfQVRFT0YKKworIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA0LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMzA5CisjQVRfU1RBUlRfMzEwCithdF9mbl9ncm91cF9iYW5uZXIgMzEwICdqYXZhLmF0OjM2MCcgXAorICAiQ2FsY3VsYXRvciAlZXJyb3ItdmVyYm9zZSAlbG9jYXRpb25zICIgIiAgICAgICAgICAiIDE5CithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMzEwLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworCisKKworY2F0ID5DYWxjLnkgPDwnX0FURU9GJworLyogSW5maXggbm90YXRpb24gY2FsY3VsYXRvci0tY2FsYyAqLworJWxhbmd1YWdlICJKYXZhIgorJW5hbWUtcHJlZml4ICJDYWxjIgorJWRlZmluZSBwYXJzZXJfY2xhc3NfbmFtZSAiQ2FsYyIKKyVkZWZpbmUgcHVibGljCisKKyVlcnJvci12ZXJib3NlICVsb2NhdGlvbnMKKyVjb2RlIHsKKworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nIGFyZ3NbXSkgdGhyb3dzIElPRXhjZXB0aW9uCisgIHsKKyAgICBDYWxjTGV4ZXIgbCA9IG5ldyBDYWxjTGV4ZXIgKFN5c3RlbS5pbik7CisgICAgQ2FsYyBwID0gbmV3IENhbGMgKGwpOworICAgIHAucGFyc2UgKCk7CisgIH0KKworfQorCislY29kZSBpbXBvcnRzIHsKKyAgaW1wb3J0IGphdmEuaW8uU3RyZWFtVG9rZW5pemVyOworICBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKKyAgaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CisgIGltcG9ydCBqYXZhLmlvLlJlYWRlcjsKKyAgaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Cit9CisKKy8qIEJpc29uIERlY2xhcmF0aW9ucyAqLworJXRva2VuIDxJbnRlZ2VyPiBOVU0gIm51bWJlciIKKyV0eXBlICA8SW50ZWdlcj4gZXhwCisKKyVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbiAgICAgICAgICAgICovCislbGVmdCAnLScgJysnCislbGVmdCAnKicgJy8nCislbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLworJXJpZ2h0ICdeJyAgICAvKiBleHBvbmVudGlhdGlvbiAgICAgICAgKi8KKworLyogR3JhbW1hciBmb2xsb3dzICovCislJQoraW5wdXQ6CisgIGxpbmUKK3wgaW5wdXQgbGluZQorOworCitsaW5lOgorICAnXG4nCit8IGV4cCAnXG4nCit8IGVycm9yICdcbicKKzsKKworZXhwOgorICBOVU0gICAgICAgICAgICAgICAgeyAkJCA9ICQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KK3wgZXhwICc9JyBleHAKKyAgeworICAgIGlmICgkMS5pbnRWYWx1ZSAoKSAhPSAkMy5pbnRWYWx1ZSAoKSkKKyAgICAgIHl5ZXJyb3IgKEAkLCAiY2FsYzogZXJyb3I6ICIgKyAkMSArICIgIT0gIiArICQzKTsKKyAgfQorfCBleHAgJysnIGV4cCAgICAgICAgeyAkJCA9IG5ldyBJbnRlZ2VyICgkMS5pbnRWYWx1ZSAoKSArICQzLmludFZhbHVlICgpKTsgIH0KK3wgZXhwICctJyBleHAgICAgICAgIHsgJCQgPSBuZXcgSW50ZWdlciAoJDEuaW50VmFsdWUgKCkgLSAkMy5pbnRWYWx1ZSAoKSk7ICB9Cit8IGV4cCAnKicgZXhwICAgICAgICB7ICQkID0gbmV3IEludGVnZXIgKCQxLmludFZhbHVlICgpICogJDMuaW50VmFsdWUgKCkpOyAgfQorfCBleHAgJy8nIGV4cCAgICAgICAgeyAkJCA9IG5ldyBJbnRlZ2VyICgkMS5pbnRWYWx1ZSAoKSAvICQzLmludFZhbHVlICgpKTsgIH0KK3wgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSBuZXcgSW50ZWdlciAoLSQyLmludFZhbHVlICgpKTsgICAgICAgICAgICAgICAgICB9Cit8IGV4cCAnXicgZXhwICAgICAgICB7ICQkID0gbmV3IEludGVnZXIgKChpbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgucG93ICgkMS5pbnRWYWx1ZSAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQzLmludFZhbHVlICgpKSk7ICAgICAgICB9Cit8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IG5ldyBJbnRlZ2VyICgxMTExKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KK3wgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSBuZXcgSW50ZWdlciAoMCk7IHJldHVybiBZWUVSUk9SOyAgICAgICAgICAgICAgICB9Cit8ICctJyBlcnJvciAgICAgICAgICB7ICQkID0gbmV3IEludGVnZXIgKDApOyByZXR1cm4gWVlFUlJPUjsgICAgICAgICAgICAgICAgfQorOworCisKKyUlCitjbGFzcyBDYWxjTGV4ZXIgaW1wbGVtZW50cyBDYWxjLkxleGVyIHsKKworICBTdHJlYW1Ub2tlbml6ZXIgc3Q7CisKKyAgcHVibGljIENhbGNMZXhlciAoSW5wdXRTdHJlYW0gaXMpCisgIHsKKyAgICBzdCA9IG5ldyBTdHJlYW1Ub2tlbml6ZXIgKG5ldyBJbnB1dFN0cmVhbVJlYWRlciAoaXMpKTsKKyAgICBzdC5yZXNldFN5bnRheCAoKTsKKyAgICBzdC5lb2xJc1NpZ25pZmljYW50ICh0cnVlKTsKKyAgICBzdC53aGl0ZXNwYWNlQ2hhcnMgKDksIDkpOworICAgIHN0LndoaXRlc3BhY2VDaGFycyAoMzIsIDMyKTsKKyAgICBzdC53b3JkQ2hhcnMgKDQ4LCA1Nyk7CisgIH0KKworCisgIFBvc2l0aW9uIHl5cG9zID0gbmV3IFBvc2l0aW9uICgxLCAwKTsKKworICBwdWJsaWMgUG9zaXRpb24gZ2V0U3RhcnRQb3MoKSB7CisgICAgcmV0dXJuIHl5cG9zOworICB9CisKKyAgcHVibGljIFBvc2l0aW9uIGdldEVuZFBvcygpIHsKKyAgICByZXR1cm4geXlwb3M7CisgIH0KKworICBwdWJsaWMgdm9pZCB5eWVycm9yIChDYWxjLkxvY2F0aW9uIGwsIFN0cmluZyBzKQorICB7CisgICAgaWYgKGwgPT0gbnVsbCkKKyAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiAocyk7CisgICAgZWxzZQorICAgICAgU3lzdGVtLmVyci5wcmludGxuIChsICsgIjogIiArIHMpOworICB9CisKKworICBJbnRlZ2VyIHl5bHZhbDsKKworICBwdWJsaWMgT2JqZWN0IGdldExWYWwoKSB7CisgICAgcmV0dXJuIHl5bHZhbDsKKyAgfQorCisgIHB1YmxpYyBpbnQgeXlsZXggKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICBpbnQgdHR5cGUgPSBzdC5uZXh0VG9rZW4gKCk7CisgICAgeXlwb3MgPSBuZXcgUG9zaXRpb24gKHl5cG9zLmxpbmVubyAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlwb3MudG9rZW4gKCkgKyAxKTsKKyAgICBpZiAodHR5cGUgPT0gc3QuVFRfRU9GKQorICAgICAgcmV0dXJuIENhbGMuRU9GOworCisgICAgZWxzZSBpZiAodHR5cGUgPT0gc3QuVFRfRU9MKQorICAgICAgeworICAgICAgICB5eXBvcyA9IG5ldyBQb3NpdGlvbiAoeXlwb3MubGluZW5vICgpICsgMSwgMCk7CisgICAgICAgIHJldHVybiAoaW50KSAnXG4nOworICAgICAgfQorCisgICAgZWxzZSBpZiAodHR5cGUgPT0gc3QuVFRfV09SRCkKKyAgICAgIHsKKyAgICAgICAgeXlsdmFsID0gbmV3IEludGVnZXIgKHN0LnN2YWwpOworICAgICAgICByZXR1cm4gQ2FsYy5OVU07CisgICAgICB9CisKKyAgICBlbHNlCisgICAgICByZXR1cm4gc3QudHR5cGU7CisgIH0KKworCisKK30KKworCitjbGFzcyBQb3NpdGlvbiB7CisgIHB1YmxpYyBpbnQgbGluZTsKKyAgcHVibGljIGludCB0b2tlbjsKKworICBwdWJsaWMgUG9zaXRpb24gKCkKKyAgeworICAgIGxpbmUgPSAwOworICAgIHRva2VuID0gMDsKKyAgfQorCisgIHB1YmxpYyBQb3NpdGlvbiAoaW50IGwsIGludCB0KQorICB7CisgICAgbGluZSA9IGw7CisgICAgdG9rZW4gPSB0OworICB9CisKKyAgcHVibGljIGJvb2xlYW4gZXF1YWxzIChQb3NpdGlvbiBsKQorICB7CisgICAgcmV0dXJuIGwubGluZSA9PSBsaW5lICYmIGwudG9rZW4gPT0gdG9rZW47CisgIH0KKworICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nICgpCisgIHsKKyAgICByZXR1cm4gSW50ZWdlci50b1N0cmluZyAobGluZSkgKyAiLiIgKyBJbnRlZ2VyLnRvU3RyaW5nKHRva2VuKTsKKyAgfQorCisgIHB1YmxpYyBpbnQgbGluZW5vICgpCisgIHsKKyAgICByZXR1cm4gbGluZTsKKyAgfQorCisgIHB1YmxpYyBpbnQgdG9rZW4gKCkKKyAgeworICAgIHJldHVybiB0b2tlbjsKKyAgfQorfQorCitfQVRFT0YKKworCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gQ2FsYy5qYXZhIENhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIENhbGMuamF2YSBDYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIENhbGMuamF2YSBDYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gQ2FsYy5qYXZhIENhbGMueSIgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIENhbGMuamF2YSBDYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6IGJpc29uIC1vIENhbGMuamF2YSBDYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBDYWxjLmphdmEgQ2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyRhc19lY2hvICJqYXZhLmF0OjM2MCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGFzX2VjaG8gImphdmEuYXQ6MzYwIiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBDYWxjLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBDYWxjLmphdmEiICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggQ2FsYy5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBUZXN0IHRoZSBwcmlvcml0aWVzLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxICsgMiAqIDMgPSA3CisxICsgMiAqIC0zID0gLTUKKworLTFeMiA9IC0xCisoLTEpXjIgPSAxCisKKy0tLTEgPSAtMQorCisxIC0gMiAtIDMgPSAtNAorMSAtICgyIC0gMykgPSAyCisKKzJeMl4zID0gMjU2CisoMl4yKV4zID0gNjQKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6ICBcJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBTb21lIHN5bnRheCBlcnJvcnMuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzAgMAorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEvLzIKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6ICBcJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJy8nLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA0LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCitlcnJvcgorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkCitfQVRFT0YKKworIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA0LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxID0gMiA9IDMKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6ICBcJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS40OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCitfQVRFT0YKKworIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA0LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisKKysxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiAgXCRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IiAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzIuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworX0FURU9GCisKKyMgMi4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgMy4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNC4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgRXhlcmNpc2UgZXJyb3IgbWVzc2FnZXMgd2l0aCBFT0Y6IHdvcmsgb24gYW4gZW1wdHkgZmlsZS4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IC9kZXYvbnVsbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgL2Rldi9udWxsIiAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgL2Rldi9udWxsCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgRXhlcmNpc2UgdGhlIGVycm9yIHRva2VuOiB3aXRob3V0IGl0LCB3ZSBkaWUgYXQgdGhlIGZpcnN0IGVycm9yLAorIyBoZW5jZSBiZSBzdXJlIHRvCisjCisjIC0gaGF2ZSBzZXZlcmFsIGVycm9ycyB3aGljaCBleGVyY2lzZSBkaWZmZXJlbnQgc2hpZnQvZGlzY2FyZGluZ3MKKyMgICAtICgpOiBub3RoaW5nIHRvIHBvcCwgbm90aGluZyB0byBkaXNjYXJkCisjICAgLSAoMSArIDEgKyAxICspOiBhIGxvdCB0byBwb3AsIG5vdGhpbmcgdG8gZGlzY2FyZAorIyAgIC0gKCogKiAqKTogbm90aGluZyB0byBwb3AsIGEgbG90IHRvIGRpc2NhcmQKKyMgICAtICgxICsgMiAqICopOiBzb21lIHRvIHBvcCBhbmQgZGlzY2FyZAorIworIyAtIHRlc3QgdGhlIGFjdGlvbiBhc3NvY2lhdGVkIHRvIGBlcnJvcicKKyMKKyMgLSBjaGVjayB0aGUgbG9va2FoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAorIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZQorIyAgIGZpcnN0IGVycm9yIGlzICIpIiwgd2hpY2ggaXMgbmVlZGVkIHRvIHJlY292ZXIgZnJvbSB0aGUgZXJyb3IgYW5kCisjICAgcHJvZHVjZSB0aGUgIjAiIHRoYXQgdHJpZ2dlcnMgdGhlICIwICE9IDEiIGVycm9yLgorIworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoKSArICgxICsgMSArIDEgKykgKyAoKiAqICopICsgKDEgKiAyICogKikgPSAxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiAgXCRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IiAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4yNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xLTEuMjc6IGNhbGM6IGVycm9yOiA0NDQ0ICE9IDEKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgVGhlIHNhbWUsIGJ1dCB0aGlzIHRpbWUgZXhlcmNpc2luZyBleHBsaWNpdGx5IHRyaWdnZXJlZCBzeW50YXggZXJyb3JzLgorIyBQT1NJWCBzYXlzIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKyghKSArICgwIDApID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMS0xLjEwOiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCitfQVRFT0YKKworIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA0LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwOiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjAiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoLSAqKSArICgwIDApID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MDogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzYwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuODogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS4xLTEuMTE6IGNhbGM6IGVycm9yOiAyMjIyICE9IDEKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjA6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8zMTAKKyNBVF9TVEFSVF8zMTEKK2F0X2ZuX2dyb3VwX2Jhbm5lciAzMTEgJ2phdmEuYXQ6MzY5JyBcCisgICJDYWxjdWxhdG9yICVsZXgtcGFyYW0geyBJbnB1dFN0cmVhbSBpcyB9ICIgIiAgICAgICIgMTkKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIzMTEuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisKKworCitjYXQgPkNhbGMueSA8PCdfQVRFT0YnCisvKiBJbmZpeCBub3RhdGlvbiBjYWxjdWxhdG9yLS1jYWxjICovCislbGFuZ3VhZ2UgIkphdmEiCislbmFtZS1wcmVmaXggIkNhbGMiCislZGVmaW5lIHBhcnNlcl9jbGFzc19uYW1lICJDYWxjIgorJWRlZmluZSBwdWJsaWMKKworJWxleC1wYXJhbSB7IElucHV0U3RyZWFtIGlzIH0KKyVjb2RlIHsKKworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nIGFyZ3NbXSkgdGhyb3dzIElPRXhjZXB0aW9uCisgIHsKKyAgICBuZXcgQ2FsYyAoU3lzdGVtLmluKS5wYXJzZSAoKTsKKyAgfQorCit9CisKKyVjb2RlIGltcG9ydHMgeworICBpbXBvcnQgamF2YS5pby5TdHJlYW1Ub2tlbml6ZXI7CisgIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworICBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKKyAgaW1wb3J0IGphdmEuaW8uUmVhZGVyOworICBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK30KKworLyogQmlzb24gRGVjbGFyYXRpb25zICovCisldG9rZW4gPEludGVnZXI+IE5VTSAibnVtYmVyIgorJXR5cGUgIDxJbnRlZ2VyPiBleHAKKworJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uICAgICAgICAgICAgKi8KKyVsZWZ0ICctJyAnKycKKyVsZWZ0ICcqJyAnLycKKyVsZWZ0IE5FRyAgICAgLyogbmVnYXRpb24tLXVuYXJ5IG1pbnVzICovCislcmlnaHQgJ14nICAgIC8qIGV4cG9uZW50aWF0aW9uICAgICAgICAqLworCisvKiBHcmFtbWFyIGZvbGxvd3MgKi8KKyUlCitpbnB1dDoKKyAgbGluZQorfCBpbnB1dCBsaW5lCis7CisKK2xpbmU6CisgICdcbicKK3wgZXhwICdcbicKK3wgZXJyb3IgJ1xuJworOworCitleHA6CisgIE5VTSAgICAgICAgICAgICAgICB7ICQkID0gJDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorfCBleHAgJz0nIGV4cAorICB7CisgICAgaWYgKCQxLmludFZhbHVlICgpICE9ICQzLmludFZhbHVlICgpKQorICAgICAgeXllcnJvciAoICJjYWxjOiBlcnJvcjogIiArICQxICsgIiAhPSAiICsgJDMpOworICB9Cit8IGV4cCAnKycgZXhwICAgICAgICB7ICQkID0gbmV3IEludGVnZXIgKCQxLmludFZhbHVlICgpICsgJDMuaW50VmFsdWUgKCkpOyAgfQorfCBleHAgJy0nIGV4cCAgICAgICAgeyAkJCA9IG5ldyBJbnRlZ2VyICgkMS5pbnRWYWx1ZSAoKSAtICQzLmludFZhbHVlICgpKTsgIH0KK3wgZXhwICcqJyBleHAgICAgICAgIHsgJCQgPSBuZXcgSW50ZWdlciAoJDEuaW50VmFsdWUgKCkgKiAkMy5pbnRWYWx1ZSAoKSk7ICB9Cit8IGV4cCAnLycgZXhwICAgICAgICB7ICQkID0gbmV3IEludGVnZXIgKCQxLmludFZhbHVlICgpIC8gJDMuaW50VmFsdWUgKCkpOyAgfQorfCAnLScgZXhwICAlcHJlYyBORUcgeyAkJCA9IG5ldyBJbnRlZ2VyICgtJDIuaW50VmFsdWUgKCkpOyAgICAgICAgICAgICAgICAgIH0KK3wgZXhwICdeJyBleHAgICAgICAgIHsgJCQgPSBuZXcgSW50ZWdlciAoKGludCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5wb3cgKCQxLmludFZhbHVlICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDMuaW50VmFsdWUgKCkpKTsgICAgICAgIH0KK3wgJygnIGV4cCAnKScgICAgICAgIHsgJCQgPSAkMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cit8ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gbmV3IEludGVnZXIgKDExMTEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorfCAnIScgICAgICAgICAgICAgICAgeyAkJCA9IG5ldyBJbnRlZ2VyICgwKTsgcmV0dXJuIFlZRVJST1I7ICAgICAgICAgICAgICAgIH0KK3wgJy0nIGVycm9yICAgICAgICAgIHsgJCQgPSBuZXcgSW50ZWdlciAoMCk7IHJldHVybiBZWUVSUk9SOyAgICAgICAgICAgICAgICB9Cis7CisKKworJWNvZGUgbGV4ZXIgeworCisgIFN0cmVhbVRva2VuaXplciBzdDsKKworICBwdWJsaWMgWVlMZXhlciAoSW5wdXRTdHJlYW0gaXMpCisgIHsKKyAgICBzdCA9IG5ldyBTdHJlYW1Ub2tlbml6ZXIgKG5ldyBJbnB1dFN0cmVhbVJlYWRlciAoaXMpKTsKKyAgICBzdC5yZXNldFN5bnRheCAoKTsKKyAgICBzdC5lb2xJc1NpZ25pZmljYW50ICh0cnVlKTsKKyAgICBzdC53aGl0ZXNwYWNlQ2hhcnMgKDksIDkpOworICAgIHN0LndoaXRlc3BhY2VDaGFycyAoMzIsIDMyKTsKKyAgICBzdC53b3JkQ2hhcnMgKDQ4LCA1Nyk7CisgIH0KKworCisKKyAgcHVibGljIHZvaWQgeXllcnJvciAoU3RyaW5nIHMpCisgIHsKKyAgICBTeXN0ZW0uZXJyLnByaW50bG4gKHMpOworICB9CisKKyAgSW50ZWdlciB5eWx2YWw7CisKKyAgcHVibGljIE9iamVjdCBnZXRMVmFsKCkgeworICAgIHJldHVybiB5eWx2YWw7CisgIH0KKworICBwdWJsaWMgaW50IHl5bGV4ICgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgaW50IHR0eXBlID0gc3QubmV4dFRva2VuICgpOworCisgICAgaWYgKHR0eXBlID09IHN0LlRUX0VPRikKKyAgICAgIHJldHVybiBDYWxjLkVPRjsKKworICAgIGVsc2UgaWYgKHR0eXBlID09IHN0LlRUX0VPTCkKKyAgICAgIHsKKworICAgICAgICByZXR1cm4gKGludCkgJ1xuJzsKKyAgICAgIH0KKworICAgIGVsc2UgaWYgKHR0eXBlID09IHN0LlRUX1dPUkQpCisgICAgICB7CisgICAgICAgIHl5bHZhbCA9IG5ldyBJbnRlZ2VyIChzdC5zdmFsKTsKKyAgICAgICAgcmV0dXJuIENhbGMuTlVNOworICAgICAgfQorCisgICAgZWxzZQorICAgICAgcmV0dXJuIHN0LnR0eXBlOworICB9CisKKworCit9OworJSUKKworCitjbGFzcyBQb3NpdGlvbiB7CisgIHB1YmxpYyBpbnQgbGluZTsKKyAgcHVibGljIGludCB0b2tlbjsKKworICBwdWJsaWMgUG9zaXRpb24gKCkKKyAgeworICAgIGxpbmUgPSAwOworICAgIHRva2VuID0gMDsKKyAgfQorCisgIHB1YmxpYyBQb3NpdGlvbiAoaW50IGwsIGludCB0KQorICB7CisgICAgbGluZSA9IGw7CisgICAgdG9rZW4gPSB0OworICB9CisKKyAgcHVibGljIGJvb2xlYW4gZXF1YWxzIChQb3NpdGlvbiBsKQorICB7CisgICAgcmV0dXJuIGwubGluZSA9PSBsaW5lICYmIGwudG9rZW4gPT0gdG9rZW47CisgIH0KKworICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nICgpCisgIHsKKyAgICByZXR1cm4gSW50ZWdlci50b1N0cmluZyAobGluZSkgKyAiLiIgKyBJbnRlZ2VyLnRvU3RyaW5nKHRva2VuKTsKKyAgfQorCisgIHB1YmxpYyBpbnQgbGluZW5vICgpCisgIHsKKyAgICByZXR1cm4gbGluZTsKKyAgfQorCisgIHB1YmxpYyBpbnQgdG9rZW4gKCkKKyAgeworICAgIHJldHVybiB0b2tlbjsKKyAgfQorfQorCitfQVRFT0YKKworCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gQ2FsYy5qYXZhIENhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIENhbGMuamF2YSBDYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIENhbGMuamF2YSBDYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gQ2FsYy5qYXZhIENhbGMueSIgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIENhbGMuamF2YSBDYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6IGJpc29uIC1vIENhbGMuamF2YSBDYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBDYWxjLmphdmEgQ2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyRhc19lY2hvICJqYXZhLmF0OjM2OSIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGFzX2VjaG8gImphdmEuYXQ6MzY5IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBDYWxjLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBDYWxjLmphdmEiICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggQ2FsYy5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBUZXN0IHRoZSBwcmlvcml0aWVzLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxICsgMiAqIDMgPSA3CisxICsgMiAqIC0zID0gLTUKKworLTFeMiA9IC0xCisoLTEpXjIgPSAxCisKKy0tLTEgPSAtMQorCisxIC0gMiAtIDMgPSAtNAorMSAtICgyIC0gMykgPSAyCisKKzJeMl4zID0gMjU2CisoMl4yKV4zID0gNjQKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6ICBcJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBTb21lIHN5bnRheCBlcnJvcnMuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzAgMAorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEvLzIKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6ICBcJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJy8nLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KK3NlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA0LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCitlcnJvcgorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkCitfQVRFT0YKKworIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KK3NlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA0LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxID0gMiA9IDMKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6ICBcJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS40OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCitfQVRFT0YKKworIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KK3NlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA0LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisKKysxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiAgXCRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IiAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzIuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworX0FURU9GCisKKyMgMi4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCitzZWQgJ3MvXlstMC05Ll0qOiAvLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgMy4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNC4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgRXhlcmNpc2UgZXJyb3IgbWVzc2FnZXMgd2l0aCBFT0Y6IHdvcmsgb24gYW4gZW1wdHkgZmlsZS4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IC9kZXYvbnVsbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgL2Rldi9udWxsIiAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgL2Rldi9udWxsCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgRXhlcmNpc2UgdGhlIGVycm9yIHRva2VuOiB3aXRob3V0IGl0LCB3ZSBkaWUgYXQgdGhlIGZpcnN0IGVycm9yLAorIyBoZW5jZSBiZSBzdXJlIHRvCisjCisjIC0gaGF2ZSBzZXZlcmFsIGVycm9ycyB3aGljaCBleGVyY2lzZSBkaWZmZXJlbnQgc2hpZnQvZGlzY2FyZGluZ3MKKyMgICAtICgpOiBub3RoaW5nIHRvIHBvcCwgbm90aGluZyB0byBkaXNjYXJkCisjICAgLSAoMSArIDEgKyAxICspOiBhIGxvdCB0byBwb3AsIG5vdGhpbmcgdG8gZGlzY2FyZAorIyAgIC0gKCogKiAqKTogbm90aGluZyB0byBwb3AsIGEgbG90IHRvIGRpc2NhcmQKKyMgICAtICgxICsgMiAqICopOiBzb21lIHRvIHBvcCBhbmQgZGlzY2FyZAorIworIyAtIHRlc3QgdGhlIGFjdGlvbiBhc3NvY2lhdGVkIHRvIGBlcnJvcicKKyMKKyMgLSBjaGVjayB0aGUgbG9va2FoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAorIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZQorIyAgIGZpcnN0IGVycm9yIGlzICIpIiwgd2hpY2ggaXMgbmVlZGVkIHRvIHJlY292ZXIgZnJvbSB0aGUgZXJyb3IgYW5kCisjICAgcHJvZHVjZSB0aGUgIjAiIHRoYXQgdHJpZ2dlcnMgdGhlICIwICE9IDEiIGVycm9yLgorIworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoKSArICgxICsgMSArIDEgKykgKyAoKiAqICopICsgKDEgKiAyICogKikgPSAxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiAgXCRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IiAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4yNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xLTEuMjc6IGNhbGM6IGVycm9yOiA0NDQ0ICE9IDEKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgVGhlIHNhbWUsIGJ1dCB0aGlzIHRpbWUgZXhlcmNpc2luZyBleHBsaWNpdGx5IHRyaWdnZXJlZCBzeW50YXggZXJyb3JzLgorIyBQT1NJWCBzYXlzIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKyghKSArICgwIDApID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMS0xLjEwOiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCitfQVRFT0YKKworIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KK3NlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA0LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoLSAqKSArICgwIDApID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuODogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS4xLTEuMTE6IGNhbGM6IGVycm9yOiAyMjIyICE9IDEKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8zMTEKKyNBVF9TVEFSVF8zMTIKK2F0X2ZuX2dyb3VwX2Jhbm5lciAzMTIgJ2phdmEuYXQ6MzY5JyBcCisgICJDYWxjdWxhdG9yICVlcnJvci12ZXJib3NlICVsZXgtcGFyYW0geyBJbnB1dFN0cmVhbSBpcyB9ICIgIiIgMTkKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIzMTIuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisKKworCitjYXQgPkNhbGMueSA8PCdfQVRFT0YnCisvKiBJbmZpeCBub3RhdGlvbiBjYWxjdWxhdG9yLS1jYWxjICovCislbGFuZ3VhZ2UgIkphdmEiCislbmFtZS1wcmVmaXggIkNhbGMiCislZGVmaW5lIHBhcnNlcl9jbGFzc19uYW1lICJDYWxjIgorJWRlZmluZSBwdWJsaWMKKworJWVycm9yLXZlcmJvc2UgJWxleC1wYXJhbSB7IElucHV0U3RyZWFtIGlzIH0KKyVjb2RlIHsKKworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nIGFyZ3NbXSkgdGhyb3dzIElPRXhjZXB0aW9uCisgIHsKKyAgICBuZXcgQ2FsYyAoU3lzdGVtLmluKS5wYXJzZSAoKTsKKyAgfQorCit9CisKKyVjb2RlIGltcG9ydHMgeworICBpbXBvcnQgamF2YS5pby5TdHJlYW1Ub2tlbml6ZXI7CisgIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworICBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKKyAgaW1wb3J0IGphdmEuaW8uUmVhZGVyOworICBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK30KKworLyogQmlzb24gRGVjbGFyYXRpb25zICovCisldG9rZW4gPEludGVnZXI+IE5VTSAibnVtYmVyIgorJXR5cGUgIDxJbnRlZ2VyPiBleHAKKworJW5vbmFzc29jICc9JyAvKiBjb21wYXJpc29uICAgICAgICAgICAgKi8KKyVsZWZ0ICctJyAnKycKKyVsZWZ0ICcqJyAnLycKKyVsZWZ0IE5FRyAgICAgLyogbmVnYXRpb24tLXVuYXJ5IG1pbnVzICovCislcmlnaHQgJ14nICAgIC8qIGV4cG9uZW50aWF0aW9uICAgICAgICAqLworCisvKiBHcmFtbWFyIGZvbGxvd3MgKi8KKyUlCitpbnB1dDoKKyAgbGluZQorfCBpbnB1dCBsaW5lCis7CisKK2xpbmU6CisgICdcbicKK3wgZXhwICdcbicKK3wgZXJyb3IgJ1xuJworOworCitleHA6CisgIE5VTSAgICAgICAgICAgICAgICB7ICQkID0gJDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorfCBleHAgJz0nIGV4cAorICB7CisgICAgaWYgKCQxLmludFZhbHVlICgpICE9ICQzLmludFZhbHVlICgpKQorICAgICAgeXllcnJvciAoICJjYWxjOiBlcnJvcjogIiArICQxICsgIiAhPSAiICsgJDMpOworICB9Cit8IGV4cCAnKycgZXhwICAgICAgICB7ICQkID0gbmV3IEludGVnZXIgKCQxLmludFZhbHVlICgpICsgJDMuaW50VmFsdWUgKCkpOyAgfQorfCBleHAgJy0nIGV4cCAgICAgICAgeyAkJCA9IG5ldyBJbnRlZ2VyICgkMS5pbnRWYWx1ZSAoKSAtICQzLmludFZhbHVlICgpKTsgIH0KK3wgZXhwICcqJyBleHAgICAgICAgIHsgJCQgPSBuZXcgSW50ZWdlciAoJDEuaW50VmFsdWUgKCkgKiAkMy5pbnRWYWx1ZSAoKSk7ICB9Cit8IGV4cCAnLycgZXhwICAgICAgICB7ICQkID0gbmV3IEludGVnZXIgKCQxLmludFZhbHVlICgpIC8gJDMuaW50VmFsdWUgKCkpOyAgfQorfCAnLScgZXhwICAlcHJlYyBORUcgeyAkJCA9IG5ldyBJbnRlZ2VyICgtJDIuaW50VmFsdWUgKCkpOyAgICAgICAgICAgICAgICAgIH0KK3wgZXhwICdeJyBleHAgICAgICAgIHsgJCQgPSBuZXcgSW50ZWdlciAoKGludCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5wb3cgKCQxLmludFZhbHVlICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDMuaW50VmFsdWUgKCkpKTsgICAgICAgIH0KK3wgJygnIGV4cCAnKScgICAgICAgIHsgJCQgPSAkMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cit8ICcoJyBlcnJvciAnKScgICAgICB7ICQkID0gbmV3IEludGVnZXIgKDExMTEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorfCAnIScgICAgICAgICAgICAgICAgeyAkJCA9IG5ldyBJbnRlZ2VyICgwKTsgcmV0dXJuIFlZRVJST1I7ICAgICAgICAgICAgICAgIH0KK3wgJy0nIGVycm9yICAgICAgICAgIHsgJCQgPSBuZXcgSW50ZWdlciAoMCk7IHJldHVybiBZWUVSUk9SOyAgICAgICAgICAgICAgICB9Cis7CisKKworJWNvZGUgbGV4ZXIgeworCisgIFN0cmVhbVRva2VuaXplciBzdDsKKworICBwdWJsaWMgWVlMZXhlciAoSW5wdXRTdHJlYW0gaXMpCisgIHsKKyAgICBzdCA9IG5ldyBTdHJlYW1Ub2tlbml6ZXIgKG5ldyBJbnB1dFN0cmVhbVJlYWRlciAoaXMpKTsKKyAgICBzdC5yZXNldFN5bnRheCAoKTsKKyAgICBzdC5lb2xJc1NpZ25pZmljYW50ICh0cnVlKTsKKyAgICBzdC53aGl0ZXNwYWNlQ2hhcnMgKDksIDkpOworICAgIHN0LndoaXRlc3BhY2VDaGFycyAoMzIsIDMyKTsKKyAgICBzdC53b3JkQ2hhcnMgKDQ4LCA1Nyk7CisgIH0KKworCisKKyAgcHVibGljIHZvaWQgeXllcnJvciAoU3RyaW5nIHMpCisgIHsKKyAgICBTeXN0ZW0uZXJyLnByaW50bG4gKHMpOworICB9CisKKyAgSW50ZWdlciB5eWx2YWw7CisKKyAgcHVibGljIE9iamVjdCBnZXRMVmFsKCkgeworICAgIHJldHVybiB5eWx2YWw7CisgIH0KKworICBwdWJsaWMgaW50IHl5bGV4ICgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgaW50IHR0eXBlID0gc3QubmV4dFRva2VuICgpOworCisgICAgaWYgKHR0eXBlID09IHN0LlRUX0VPRikKKyAgICAgIHJldHVybiBDYWxjLkVPRjsKKworICAgIGVsc2UgaWYgKHR0eXBlID09IHN0LlRUX0VPTCkKKyAgICAgIHsKKworICAgICAgICByZXR1cm4gKGludCkgJ1xuJzsKKyAgICAgIH0KKworICAgIGVsc2UgaWYgKHR0eXBlID09IHN0LlRUX1dPUkQpCisgICAgICB7CisgICAgICAgIHl5bHZhbCA9IG5ldyBJbnRlZ2VyIChzdC5zdmFsKTsKKyAgICAgICAgcmV0dXJuIENhbGMuTlVNOworICAgICAgfQorCisgICAgZWxzZQorICAgICAgcmV0dXJuIHN0LnR0eXBlOworICB9CisKKworCit9OworJSUKKworCitjbGFzcyBQb3NpdGlvbiB7CisgIHB1YmxpYyBpbnQgbGluZTsKKyAgcHVibGljIGludCB0b2tlbjsKKworICBwdWJsaWMgUG9zaXRpb24gKCkKKyAgeworICAgIGxpbmUgPSAwOworICAgIHRva2VuID0gMDsKKyAgfQorCisgIHB1YmxpYyBQb3NpdGlvbiAoaW50IGwsIGludCB0KQorICB7CisgICAgbGluZSA9IGw7CisgICAgdG9rZW4gPSB0OworICB9CisKKyAgcHVibGljIGJvb2xlYW4gZXF1YWxzIChQb3NpdGlvbiBsKQorICB7CisgICAgcmV0dXJuIGwubGluZSA9PSBsaW5lICYmIGwudG9rZW4gPT0gdG9rZW47CisgIH0KKworICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nICgpCisgIHsKKyAgICByZXR1cm4gSW50ZWdlci50b1N0cmluZyAobGluZSkgKyAiLiIgKyBJbnRlZ2VyLnRvU3RyaW5nKHRva2VuKTsKKyAgfQorCisgIHB1YmxpYyBpbnQgbGluZW5vICgpCisgIHsKKyAgICByZXR1cm4gbGluZTsKKyAgfQorCisgIHB1YmxpYyBpbnQgdG9rZW4gKCkKKyAgeworICAgIHJldHVybiB0b2tlbjsKKyAgfQorfQorCitfQVRFT0YKKworCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gQ2FsYy5qYXZhIENhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIENhbGMuamF2YSBDYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIENhbGMuamF2YSBDYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gQ2FsYy5qYXZhIENhbGMueSIgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIENhbGMuamF2YSBDYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6IGJpc29uIC1vIENhbGMuamF2YSBDYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBDYWxjLmphdmEgQ2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyRhc19lY2hvICJqYXZhLmF0OjM2OSIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGFzX2VjaG8gImphdmEuYXQ6MzY5IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBDYWxjLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBDYWxjLmphdmEiICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggQ2FsYy5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBUZXN0IHRoZSBwcmlvcml0aWVzLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxICsgMiAqIDMgPSA3CisxICsgMiAqIC0zID0gLTUKKworLTFeMiA9IC0xCisoLTEpXjIgPSAxCisKKy0tLTEgPSAtMQorCisxIC0gMiAtIDMgPSAtNAorMSAtICgyIC0gMykgPSAyCisKKzJeMl4zID0gMjU2CisoMl4yKV4zID0gNjQKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6ICBcJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBTb21lIHN5bnRheCBlcnJvcnMuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzAgMAorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEvLzIKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6ICBcJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJy8nLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KK3NlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA0LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCitlcnJvcgorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkCitfQVRFT0YKKworIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KK3NlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA0LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxID0gMiA9IDMKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6ICBcJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS40OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCitfQVRFT0YKKworIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KK3NlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA0LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisKKysxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiAgXCRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IiAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzIuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworX0FURU9GCisKKyMgMi4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCitzZWQgJ3MvXlstMC05Ll0qOiAvLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgMy4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNC4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgRXhlcmNpc2UgZXJyb3IgbWVzc2FnZXMgd2l0aCBFT0Y6IHdvcmsgb24gYW4gZW1wdHkgZmlsZS4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IC9kZXYvbnVsbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgL2Rldi9udWxsIiAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgL2Rldi9udWxsCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgRXhlcmNpc2UgdGhlIGVycm9yIHRva2VuOiB3aXRob3V0IGl0LCB3ZSBkaWUgYXQgdGhlIGZpcnN0IGVycm9yLAorIyBoZW5jZSBiZSBzdXJlIHRvCisjCisjIC0gaGF2ZSBzZXZlcmFsIGVycm9ycyB3aGljaCBleGVyY2lzZSBkaWZmZXJlbnQgc2hpZnQvZGlzY2FyZGluZ3MKKyMgICAtICgpOiBub3RoaW5nIHRvIHBvcCwgbm90aGluZyB0byBkaXNjYXJkCisjICAgLSAoMSArIDEgKyAxICspOiBhIGxvdCB0byBwb3AsIG5vdGhpbmcgdG8gZGlzY2FyZAorIyAgIC0gKCogKiAqKTogbm90aGluZyB0byBwb3AsIGEgbG90IHRvIGRpc2NhcmQKKyMgICAtICgxICsgMiAqICopOiBzb21lIHRvIHBvcCBhbmQgZGlzY2FyZAorIworIyAtIHRlc3QgdGhlIGFjdGlvbiBhc3NvY2lhdGVkIHRvIGBlcnJvcicKKyMKKyMgLSBjaGVjayB0aGUgbG9va2FoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAorIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZQorIyAgIGZpcnN0IGVycm9yIGlzICIpIiwgd2hpY2ggaXMgbmVlZGVkIHRvIHJlY292ZXIgZnJvbSB0aGUgZXJyb3IgYW5kCisjICAgcHJvZHVjZSB0aGUgIjAiIHRoYXQgdHJpZ2dlcnMgdGhlICIwICE9IDEiIGVycm9yLgorIworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoKSArICgxICsgMSArIDEgKykgKyAoKiAqICopICsgKDEgKiAyICogKikgPSAxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiAgXCRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IiAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4yNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xLTEuMjc6IGNhbGM6IGVycm9yOiA0NDQ0ICE9IDEKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgVGhlIHNhbWUsIGJ1dCB0aGlzIHRpbWUgZXhlcmNpc2luZyBleHBsaWNpdGx5IHRyaWdnZXJlZCBzeW50YXggZXJyb3JzLgorIyBQT1NJWCBzYXlzIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKyghKSArICgwIDApID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMS0xLjEwOiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCitfQVRFT0YKKworIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KK3NlZCAncy9eWy0wLTkuXSo6IC8vJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA0LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoLSAqKSArICgwIDApID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuODogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS4xLTEuMTE6IGNhbGM6IGVycm9yOiAyMjIyICE9IDEKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorc2VkICdzL15bLTAtOS5dKjogLy8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8zMTIKKyNBVF9TVEFSVF8zMTMKK2F0X2ZuX2dyb3VwX2Jhbm5lciAzMTMgJ2phdmEuYXQ6MzY5JyBcCisgICJDYWxjdWxhdG9yICVsb2NhdGlvbnMgJWxleC1wYXJhbSB7IElucHV0U3RyZWFtIGlzIH0gIiAiIiAxOQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjMxMy4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworCisKK2NhdCA+Q2FsYy55IDw8J19BVEVPRicKKy8qIEluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3ItLWNhbGMgKi8KKyVsYW5ndWFnZSAiSmF2YSIKKyVuYW1lLXByZWZpeCAiQ2FsYyIKKyVkZWZpbmUgcGFyc2VyX2NsYXNzX25hbWUgIkNhbGMiCislZGVmaW5lIHB1YmxpYworCislbG9jYXRpb25zICVsZXgtcGFyYW0geyBJbnB1dFN0cmVhbSBpcyB9CislY29kZSB7CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZyBhcmdzW10pIHRocm93cyBJT0V4Y2VwdGlvbgorICB7CisgICAgbmV3IENhbGMgKFN5c3RlbS5pbikucGFyc2UgKCk7CisgIH0KKworfQorCislY29kZSBpbXBvcnRzIHsKKyAgaW1wb3J0IGphdmEuaW8uU3RyZWFtVG9rZW5pemVyOworICBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKKyAgaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CisgIGltcG9ydCBqYXZhLmlvLlJlYWRlcjsKKyAgaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Cit9CisKKy8qIEJpc29uIERlY2xhcmF0aW9ucyAqLworJXRva2VuIDxJbnRlZ2VyPiBOVU0gIm51bWJlciIKKyV0eXBlICA8SW50ZWdlcj4gZXhwCisKKyVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbiAgICAgICAgICAgICovCislbGVmdCAnLScgJysnCislbGVmdCAnKicgJy8nCislbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLworJXJpZ2h0ICdeJyAgICAvKiBleHBvbmVudGlhdGlvbiAgICAgICAgKi8KKworLyogR3JhbW1hciBmb2xsb3dzICovCislJQoraW5wdXQ6CisgIGxpbmUKK3wgaW5wdXQgbGluZQorOworCitsaW5lOgorICAnXG4nCit8IGV4cCAnXG4nCit8IGVycm9yICdcbicKKzsKKworZXhwOgorICBOVU0gICAgICAgICAgICAgICAgeyAkJCA9ICQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KK3wgZXhwICc9JyBleHAKKyAgeworICAgIGlmICgkMS5pbnRWYWx1ZSAoKSAhPSAkMy5pbnRWYWx1ZSAoKSkKKyAgICAgIHl5ZXJyb3IgKEAkLCAiY2FsYzogZXJyb3I6ICIgKyAkMSArICIgIT0gIiArICQzKTsKKyAgfQorfCBleHAgJysnIGV4cCAgICAgICAgeyAkJCA9IG5ldyBJbnRlZ2VyICgkMS5pbnRWYWx1ZSAoKSArICQzLmludFZhbHVlICgpKTsgIH0KK3wgZXhwICctJyBleHAgICAgICAgIHsgJCQgPSBuZXcgSW50ZWdlciAoJDEuaW50VmFsdWUgKCkgLSAkMy5pbnRWYWx1ZSAoKSk7ICB9Cit8IGV4cCAnKicgZXhwICAgICAgICB7ICQkID0gbmV3IEludGVnZXIgKCQxLmludFZhbHVlICgpICogJDMuaW50VmFsdWUgKCkpOyAgfQorfCBleHAgJy8nIGV4cCAgICAgICAgeyAkJCA9IG5ldyBJbnRlZ2VyICgkMS5pbnRWYWx1ZSAoKSAvICQzLmludFZhbHVlICgpKTsgIH0KK3wgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSBuZXcgSW50ZWdlciAoLSQyLmludFZhbHVlICgpKTsgICAgICAgICAgICAgICAgICB9Cit8IGV4cCAnXicgZXhwICAgICAgICB7ICQkID0gbmV3IEludGVnZXIgKChpbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgucG93ICgkMS5pbnRWYWx1ZSAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQzLmludFZhbHVlICgpKSk7ICAgICAgICB9Cit8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IG5ldyBJbnRlZ2VyICgxMTExKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KK3wgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSBuZXcgSW50ZWdlciAoMCk7IHJldHVybiBZWUVSUk9SOyAgICAgICAgICAgICAgICB9Cit8ICctJyBlcnJvciAgICAgICAgICB7ICQkID0gbmV3IEludGVnZXIgKDApOyByZXR1cm4gWVlFUlJPUjsgICAgICAgICAgICAgICAgfQorOworCisKKyVjb2RlIGxleGVyIHsKKworICBTdHJlYW1Ub2tlbml6ZXIgc3Q7CisKKyAgcHVibGljIFlZTGV4ZXIgKElucHV0U3RyZWFtIGlzKQorICB7CisgICAgc3QgPSBuZXcgU3RyZWFtVG9rZW5pemVyIChuZXcgSW5wdXRTdHJlYW1SZWFkZXIgKGlzKSk7CisgICAgc3QucmVzZXRTeW50YXggKCk7CisgICAgc3QuZW9sSXNTaWduaWZpY2FudCAodHJ1ZSk7CisgICAgc3Qud2hpdGVzcGFjZUNoYXJzICg5LCA5KTsKKyAgICBzdC53aGl0ZXNwYWNlQ2hhcnMgKDMyLCAzMik7CisgICAgc3Qud29yZENoYXJzICg0OCwgNTcpOworICB9CisKKworICBQb3NpdGlvbiB5eXBvcyA9IG5ldyBQb3NpdGlvbiAoMSwgMCk7CisKKyAgcHVibGljIFBvc2l0aW9uIGdldFN0YXJ0UG9zKCkgeworICAgIHJldHVybiB5eXBvczsKKyAgfQorCisgIHB1YmxpYyBQb3NpdGlvbiBnZXRFbmRQb3MoKSB7CisgICAgcmV0dXJuIHl5cG9zOworICB9CisKKyAgcHVibGljIHZvaWQgeXllcnJvciAoQ2FsYy5Mb2NhdGlvbiBsLCBTdHJpbmcgcykKKyAgeworICAgIGlmIChsID09IG51bGwpCisgICAgICBTeXN0ZW0uZXJyLnByaW50bG4gKHMpOworICAgIGVsc2UKKyAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiAobCArICI6ICIgKyBzKTsKKyAgfQorCisKKyAgSW50ZWdlciB5eWx2YWw7CisKKyAgcHVibGljIE9iamVjdCBnZXRMVmFsKCkgeworICAgIHJldHVybiB5eWx2YWw7CisgIH0KKworICBwdWJsaWMgaW50IHl5bGV4ICgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgaW50IHR0eXBlID0gc3QubmV4dFRva2VuICgpOworICAgIHl5cG9zID0gbmV3IFBvc2l0aW9uICh5eXBvcy5saW5lbm8gKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5cG9zLnRva2VuICgpICsgMSk7CisgICAgaWYgKHR0eXBlID09IHN0LlRUX0VPRikKKyAgICAgIHJldHVybiBDYWxjLkVPRjsKKworICAgIGVsc2UgaWYgKHR0eXBlID09IHN0LlRUX0VPTCkKKyAgICAgIHsKKyAgICAgICAgeXlwb3MgPSBuZXcgUG9zaXRpb24gKHl5cG9zLmxpbmVubyAoKSArIDEsIDApOworICAgICAgICByZXR1cm4gKGludCkgJ1xuJzsKKyAgICAgIH0KKworICAgIGVsc2UgaWYgKHR0eXBlID09IHN0LlRUX1dPUkQpCisgICAgICB7CisgICAgICAgIHl5bHZhbCA9IG5ldyBJbnRlZ2VyIChzdC5zdmFsKTsKKyAgICAgICAgcmV0dXJuIENhbGMuTlVNOworICAgICAgfQorCisgICAgZWxzZQorICAgICAgcmV0dXJuIHN0LnR0eXBlOworICB9CisKKworCit9OworJSUKKworCitjbGFzcyBQb3NpdGlvbiB7CisgIHB1YmxpYyBpbnQgbGluZTsKKyAgcHVibGljIGludCB0b2tlbjsKKworICBwdWJsaWMgUG9zaXRpb24gKCkKKyAgeworICAgIGxpbmUgPSAwOworICAgIHRva2VuID0gMDsKKyAgfQorCisgIHB1YmxpYyBQb3NpdGlvbiAoaW50IGwsIGludCB0KQorICB7CisgICAgbGluZSA9IGw7CisgICAgdG9rZW4gPSB0OworICB9CisKKyAgcHVibGljIGJvb2xlYW4gZXF1YWxzIChQb3NpdGlvbiBsKQorICB7CisgICAgcmV0dXJuIGwubGluZSA9PSBsaW5lICYmIGwudG9rZW4gPT0gdG9rZW47CisgIH0KKworICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nICgpCisgIHsKKyAgICByZXR1cm4gSW50ZWdlci50b1N0cmluZyAobGluZSkgKyAiLiIgKyBJbnRlZ2VyLnRvU3RyaW5nKHRva2VuKTsKKyAgfQorCisgIHB1YmxpYyBpbnQgbGluZW5vICgpCisgIHsKKyAgICByZXR1cm4gbGluZTsKKyAgfQorCisgIHB1YmxpYyBpbnQgdG9rZW4gKCkKKyAgeworICAgIHJldHVybiB0b2tlbjsKKyAgfQorfQorCitfQVRFT0YKKworCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gQ2FsYy5qYXZhIENhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIENhbGMuamF2YSBDYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIENhbGMuamF2YSBDYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gQ2FsYy5qYXZhIENhbGMueSIgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIENhbGMuamF2YSBDYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6IGJpc29uIC1vIENhbGMuamF2YSBDYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBDYWxjLmphdmEgQ2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyRhc19lY2hvICJqYXZhLmF0OjM2OSIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGFzX2VjaG8gImphdmEuYXQ6MzY5IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBDYWxjLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBDYWxjLmphdmEiICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggQ2FsYy5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBUZXN0IHRoZSBwcmlvcml0aWVzLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxICsgMiAqIDMgPSA3CisxICsgMiAqIC0zID0gLTUKKworLTFeMiA9IC0xCisoLTEpXjIgPSAxCisKKy0tLTEgPSAtMQorCisxIC0gMiAtIDMgPSAtNAorMSAtICgyIC0gMykgPSAyCisKKzJeMl4zID0gMjU2CisoMl4yKV4zID0gNjQKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6ICBcJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBTb21lIHN5bnRheCBlcnJvcnMuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzAgMAorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEvLzIKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6ICBcJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJy8nLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA0LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCitlcnJvcgorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkCitfQVRFT0YKKworIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA0LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxID0gMiA9IDMKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6ICBcJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS40OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCitfQVRFT0YKKworIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA0LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisKKysxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiAgXCRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IiAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzIuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworX0FURU9GCisKKyMgMi4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgMy4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCitzZWQgJ3Mvc3ludGF4IGVycm9yLCAuKiQvc3ludGF4IGVycm9yLycgZXhwb3V0ID5hdC1leHBvdXQKK212IGF0LWV4cG91dCBleHBvdXQKKyMgNC4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgRXhlcmNpc2UgZXJyb3IgbWVzc2FnZXMgd2l0aCBFT0Y6IHdvcmsgb24gYW4gZW1wdHkgZmlsZS4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IC9kZXYvbnVsbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgL2Rldi9udWxsIiAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgL2Rldi9udWxsCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgRXhlcmNpc2UgdGhlIGVycm9yIHRva2VuOiB3aXRob3V0IGl0LCB3ZSBkaWUgYXQgdGhlIGZpcnN0IGVycm9yLAorIyBoZW5jZSBiZSBzdXJlIHRvCisjCisjIC0gaGF2ZSBzZXZlcmFsIGVycm9ycyB3aGljaCBleGVyY2lzZSBkaWZmZXJlbnQgc2hpZnQvZGlzY2FyZGluZ3MKKyMgICAtICgpOiBub3RoaW5nIHRvIHBvcCwgbm90aGluZyB0byBkaXNjYXJkCisjICAgLSAoMSArIDEgKyAxICspOiBhIGxvdCB0byBwb3AsIG5vdGhpbmcgdG8gZGlzY2FyZAorIyAgIC0gKCogKiAqKTogbm90aGluZyB0byBwb3AsIGEgbG90IHRvIGRpc2NhcmQKKyMgICAtICgxICsgMiAqICopOiBzb21lIHRvIHBvcCBhbmQgZGlzY2FyZAorIworIyAtIHRlc3QgdGhlIGFjdGlvbiBhc3NvY2lhdGVkIHRvIGBlcnJvcicKKyMKKyMgLSBjaGVjayB0aGUgbG9va2FoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAorIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZQorIyAgIGZpcnN0IGVycm9yIGlzICIpIiwgd2hpY2ggaXMgbmVlZGVkIHRvIHJlY292ZXIgZnJvbSB0aGUgZXJyb3IgYW5kCisjICAgcHJvZHVjZSB0aGUgIjAiIHRoYXQgdHJpZ2dlcnMgdGhlICIwICE9IDEiIGVycm9yLgorIworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoKSArICgxICsgMSArIDEgKykgKyAoKiAqICopICsgKDEgKiAyICogKikgPSAxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiAgXCRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IiAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4yNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xLTEuMjc6IGNhbGM6IGVycm9yOiA0NDQ0ICE9IDEKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgVGhlIHNhbWUsIGJ1dCB0aGlzIHRpbWUgZXhlcmNpc2luZyBleHBsaWNpdGx5IHRyaWdnZXJlZCBzeW50YXggZXJyb3JzLgorIyBQT1NJWCBzYXlzIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKyghKSArICgwIDApID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMS0xLjEwOiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCitfQVRFT0YKKworIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KK3NlZCAncy9zeW50YXggZXJyb3IsIC4qJC9zeW50YXggZXJyb3IvJyBleHBvdXQgPmF0LWV4cG91dAorbXYgYXQtZXhwb3V0IGV4cG91dAorIyA0LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoLSAqKSArICgwIDApID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuODogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS4xLTEuMTE6IGNhbGM6IGVycm9yOiAyMjIyICE9IDEKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0Lgorc2VkICdzL3N5bnRheCBlcnJvciwgLiokL3N5bnRheCBlcnJvci8nIGV4cG91dCA+YXQtZXhwb3V0CittdiBhdC1leHBvdXQgZXhwb3V0CisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8zMTMKKyNBVF9TVEFSVF8zMTQKK2F0X2ZuX2dyb3VwX2Jhbm5lciAzMTQgJ2phdmEuYXQ6MzY5JyBcCisgICJDYWxjdWxhdG9yICVlcnJvci12ZXJib3NlICVsb2NhdGlvbnMgJWxleC1wYXJhbSB7IElucHV0U3RyZWFtIGlzIH0gIiAiIiAxOQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjMxNC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworCisKK2NhdCA+Q2FsYy55IDw8J19BVEVPRicKKy8qIEluZml4IG5vdGF0aW9uIGNhbGN1bGF0b3ItLWNhbGMgKi8KKyVsYW5ndWFnZSAiSmF2YSIKKyVuYW1lLXByZWZpeCAiQ2FsYyIKKyVkZWZpbmUgcGFyc2VyX2NsYXNzX25hbWUgIkNhbGMiCislZGVmaW5lIHB1YmxpYworCislZXJyb3ItdmVyYm9zZSAlbG9jYXRpb25zICVsZXgtcGFyYW0geyBJbnB1dFN0cmVhbSBpcyB9CislY29kZSB7CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZyBhcmdzW10pIHRocm93cyBJT0V4Y2VwdGlvbgorICB7CisgICAgbmV3IENhbGMgKFN5c3RlbS5pbikucGFyc2UgKCk7CisgIH0KKworfQorCislY29kZSBpbXBvcnRzIHsKKyAgaW1wb3J0IGphdmEuaW8uU3RyZWFtVG9rZW5pemVyOworICBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKKyAgaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CisgIGltcG9ydCBqYXZhLmlvLlJlYWRlcjsKKyAgaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Cit9CisKKy8qIEJpc29uIERlY2xhcmF0aW9ucyAqLworJXRva2VuIDxJbnRlZ2VyPiBOVU0gIm51bWJlciIKKyV0eXBlICA8SW50ZWdlcj4gZXhwCisKKyVub25hc3NvYyAnPScgLyogY29tcGFyaXNvbiAgICAgICAgICAgICovCislbGVmdCAnLScgJysnCislbGVmdCAnKicgJy8nCislbGVmdCBORUcgICAgIC8qIG5lZ2F0aW9uLS11bmFyeSBtaW51cyAqLworJXJpZ2h0ICdeJyAgICAvKiBleHBvbmVudGlhdGlvbiAgICAgICAgKi8KKworLyogR3JhbW1hciBmb2xsb3dzICovCislJQoraW5wdXQ6CisgIGxpbmUKK3wgaW5wdXQgbGluZQorOworCitsaW5lOgorICAnXG4nCit8IGV4cCAnXG4nCit8IGVycm9yICdcbicKKzsKKworZXhwOgorICBOVU0gICAgICAgICAgICAgICAgeyAkJCA9ICQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KK3wgZXhwICc9JyBleHAKKyAgeworICAgIGlmICgkMS5pbnRWYWx1ZSAoKSAhPSAkMy5pbnRWYWx1ZSAoKSkKKyAgICAgIHl5ZXJyb3IgKEAkLCAiY2FsYzogZXJyb3I6ICIgKyAkMSArICIgIT0gIiArICQzKTsKKyAgfQorfCBleHAgJysnIGV4cCAgICAgICAgeyAkJCA9IG5ldyBJbnRlZ2VyICgkMS5pbnRWYWx1ZSAoKSArICQzLmludFZhbHVlICgpKTsgIH0KK3wgZXhwICctJyBleHAgICAgICAgIHsgJCQgPSBuZXcgSW50ZWdlciAoJDEuaW50VmFsdWUgKCkgLSAkMy5pbnRWYWx1ZSAoKSk7ICB9Cit8IGV4cCAnKicgZXhwICAgICAgICB7ICQkID0gbmV3IEludGVnZXIgKCQxLmludFZhbHVlICgpICogJDMuaW50VmFsdWUgKCkpOyAgfQorfCBleHAgJy8nIGV4cCAgICAgICAgeyAkJCA9IG5ldyBJbnRlZ2VyICgkMS5pbnRWYWx1ZSAoKSAvICQzLmludFZhbHVlICgpKTsgIH0KK3wgJy0nIGV4cCAgJXByZWMgTkVHIHsgJCQgPSBuZXcgSW50ZWdlciAoLSQyLmludFZhbHVlICgpKTsgICAgICAgICAgICAgICAgICB9Cit8IGV4cCAnXicgZXhwICAgICAgICB7ICQkID0gbmV3IEludGVnZXIgKChpbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgucG93ICgkMS5pbnRWYWx1ZSAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQzLmludFZhbHVlICgpKSk7ICAgICAgICB9Cit8ICcoJyBleHAgJyknICAgICAgICB7ICQkID0gJDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorfCAnKCcgZXJyb3IgJyknICAgICAgeyAkJCA9IG5ldyBJbnRlZ2VyICgxMTExKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KK3wgJyEnICAgICAgICAgICAgICAgIHsgJCQgPSBuZXcgSW50ZWdlciAoMCk7IHJldHVybiBZWUVSUk9SOyAgICAgICAgICAgICAgICB9Cit8ICctJyBlcnJvciAgICAgICAgICB7ICQkID0gbmV3IEludGVnZXIgKDApOyByZXR1cm4gWVlFUlJPUjsgICAgICAgICAgICAgICAgfQorOworCisKKyVjb2RlIGxleGVyIHsKKworICBTdHJlYW1Ub2tlbml6ZXIgc3Q7CisKKyAgcHVibGljIFlZTGV4ZXIgKElucHV0U3RyZWFtIGlzKQorICB7CisgICAgc3QgPSBuZXcgU3RyZWFtVG9rZW5pemVyIChuZXcgSW5wdXRTdHJlYW1SZWFkZXIgKGlzKSk7CisgICAgc3QucmVzZXRTeW50YXggKCk7CisgICAgc3QuZW9sSXNTaWduaWZpY2FudCAodHJ1ZSk7CisgICAgc3Qud2hpdGVzcGFjZUNoYXJzICg5LCA5KTsKKyAgICBzdC53aGl0ZXNwYWNlQ2hhcnMgKDMyLCAzMik7CisgICAgc3Qud29yZENoYXJzICg0OCwgNTcpOworICB9CisKKworICBQb3NpdGlvbiB5eXBvcyA9IG5ldyBQb3NpdGlvbiAoMSwgMCk7CisKKyAgcHVibGljIFBvc2l0aW9uIGdldFN0YXJ0UG9zKCkgeworICAgIHJldHVybiB5eXBvczsKKyAgfQorCisgIHB1YmxpYyBQb3NpdGlvbiBnZXRFbmRQb3MoKSB7CisgICAgcmV0dXJuIHl5cG9zOworICB9CisKKyAgcHVibGljIHZvaWQgeXllcnJvciAoQ2FsYy5Mb2NhdGlvbiBsLCBTdHJpbmcgcykKKyAgeworICAgIGlmIChsID09IG51bGwpCisgICAgICBTeXN0ZW0uZXJyLnByaW50bG4gKHMpOworICAgIGVsc2UKKyAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiAobCArICI6ICIgKyBzKTsKKyAgfQorCisKKyAgSW50ZWdlciB5eWx2YWw7CisKKyAgcHVibGljIE9iamVjdCBnZXRMVmFsKCkgeworICAgIHJldHVybiB5eWx2YWw7CisgIH0KKworICBwdWJsaWMgaW50IHl5bGV4ICgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgaW50IHR0eXBlID0gc3QubmV4dFRva2VuICgpOworICAgIHl5cG9zID0gbmV3IFBvc2l0aW9uICh5eXBvcy5saW5lbm8gKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5cG9zLnRva2VuICgpICsgMSk7CisgICAgaWYgKHR0eXBlID09IHN0LlRUX0VPRikKKyAgICAgIHJldHVybiBDYWxjLkVPRjsKKworICAgIGVsc2UgaWYgKHR0eXBlID09IHN0LlRUX0VPTCkKKyAgICAgIHsKKyAgICAgICAgeXlwb3MgPSBuZXcgUG9zaXRpb24gKHl5cG9zLmxpbmVubyAoKSArIDEsIDApOworICAgICAgICByZXR1cm4gKGludCkgJ1xuJzsKKyAgICAgIH0KKworICAgIGVsc2UgaWYgKHR0eXBlID09IHN0LlRUX1dPUkQpCisgICAgICB7CisgICAgICAgIHl5bHZhbCA9IG5ldyBJbnRlZ2VyIChzdC5zdmFsKTsKKyAgICAgICAgcmV0dXJuIENhbGMuTlVNOworICAgICAgfQorCisgICAgZWxzZQorICAgICAgcmV0dXJuIHN0LnR0eXBlOworICB9CisKKworCit9OworJSUKKworCitjbGFzcyBQb3NpdGlvbiB7CisgIHB1YmxpYyBpbnQgbGluZTsKKyAgcHVibGljIGludCB0b2tlbjsKKworICBwdWJsaWMgUG9zaXRpb24gKCkKKyAgeworICAgIGxpbmUgPSAwOworICAgIHRva2VuID0gMDsKKyAgfQorCisgIHB1YmxpYyBQb3NpdGlvbiAoaW50IGwsIGludCB0KQorICB7CisgICAgbGluZSA9IGw7CisgICAgdG9rZW4gPSB0OworICB9CisKKyAgcHVibGljIGJvb2xlYW4gZXF1YWxzIChQb3NpdGlvbiBsKQorICB7CisgICAgcmV0dXJuIGwubGluZSA9PSBsaW5lICYmIGwudG9rZW4gPT0gdG9rZW47CisgIH0KKworICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nICgpCisgIHsKKyAgICByZXR1cm4gSW50ZWdlci50b1N0cmluZyAobGluZSkgKyAiLiIgKyBJbnRlZ2VyLnRvU3RyaW5nKHRva2VuKTsKKyAgfQorCisgIHB1YmxpYyBpbnQgbGluZW5vICgpCisgIHsKKyAgICByZXR1cm4gbGluZTsKKyAgfQorCisgIHB1YmxpYyBpbnQgdG9rZW4gKCkKKyAgeworICAgIHJldHVybiB0b2tlbjsKKyAgfQorfQorCitfQVRFT0YKKworCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gQ2FsYy5qYXZhIENhbGMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIENhbGMuamF2YSBDYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIENhbGMuamF2YSBDYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gQ2FsYy5qYXZhIENhbGMueSIgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIENhbGMuamF2YSBDYWxjLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6IGJpc29uIC1vIENhbGMuamF2YSBDYWxjLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBDYWxjLmphdmEgQ2FsYy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyRhc19lY2hvICJqYXZhLmF0OjM2OSIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGFzX2VjaG8gImphdmEuYXQ6MzY5IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBDYWxjLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBDYWxjLmphdmEiICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggQ2FsYy5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBUZXN0IHRoZSBwcmlvcml0aWVzLgorY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxICsgMiAqIDMgPSA3CisxICsgMiAqIC0zID0gLTUKKworLTFeMiA9IC0xCisoLTEpXjIgPSAxCisKKy0tLTEgPSAtMQorCisxIC0gMiAtIDMgPSAtNAorMSAtICgyIC0gMykgPSAyCisKKzJeMl4zID0gMjU2CisoMl4yKV4zID0gNjQKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6ICBcJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworIyBTb21lIHN5bnRheCBlcnJvcnMuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzAgMAorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjI6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCitjYXQgPmlucHV0IDw8J19BVEVPRicKKzEvLzIKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6ICBcJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS4zOiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJy8nLCBleHBlY3RpbmcgbnVtYmVyIG9yICctJyBvciAnKCcgb3IgJyEnCitfQVRFT0YKKworIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA0LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCitlcnJvcgorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAkdW5kZWZpbmVkCitfQVRFT0YKKworIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA0LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisxID0gMiA9IDMKK19BVEVPRgorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6ICBcJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgTm9ybWFsaXplIHRoZSBvYnNlcnZlZCBhbmQgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXMsIGRlcGVuZGluZyB1cG9uIHRoZQorIyBvcHRpb25zLgorIyAxLiBDcmVhdGUgdGhlIHJlZmVyZW5jZSBlcnJvciBtZXNzYWdlLgorY2F0ID5leHBvdXQgPDwnX0FURU9GJworMS40OiBzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJz0nCitfQVRFT0YKKworIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA0LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisKKysxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiAgXCRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IiAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzIuMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcrJworX0FURU9GCisKKyMgMi4gSWYgbG9jYXRpb25zIGFyZSBub3QgdXNlZCwgcmVtb3ZlIHRoZW0uCisKKyMgMy4gSWYgZXJyb3ItdmVyYm9zZSBpcyBub3QgdXNlZCwgc3RyaXAgdGhlYCwgdW5leHBlY3RlZC4uLi4nIHBhcnQuCisKKyMgNC4gQ2hlY2sKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogY2F0IHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGNhdCBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDozNjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyMgRXhlcmNpc2UgZXJyb3IgbWVzc2FnZXMgd2l0aCBFT0Y6IHdvcmsgb24gYW4gZW1wdHkgZmlsZS4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IC9kZXYvbnVsbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgL2Rldi9udWxsIiAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgL2Rldi9udWxsCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjE6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgRXhlcmNpc2UgdGhlIGVycm9yIHRva2VuOiB3aXRob3V0IGl0LCB3ZSBkaWUgYXQgdGhlIGZpcnN0IGVycm9yLAorIyBoZW5jZSBiZSBzdXJlIHRvCisjCisjIC0gaGF2ZSBzZXZlcmFsIGVycm9ycyB3aGljaCBleGVyY2lzZSBkaWZmZXJlbnQgc2hpZnQvZGlzY2FyZGluZ3MKKyMgICAtICgpOiBub3RoaW5nIHRvIHBvcCwgbm90aGluZyB0byBkaXNjYXJkCisjICAgLSAoMSArIDEgKyAxICspOiBhIGxvdCB0byBwb3AsIG5vdGhpbmcgdG8gZGlzY2FyZAorIyAgIC0gKCogKiAqKTogbm90aGluZyB0byBwb3AsIGEgbG90IHRvIGRpc2NhcmQKKyMgICAtICgxICsgMiAqICopOiBzb21lIHRvIHBvcCBhbmQgZGlzY2FyZAorIworIyAtIHRlc3QgdGhlIGFjdGlvbiBhc3NvY2lhdGVkIHRvIGBlcnJvcicKKyMKKyMgLSBjaGVjayB0aGUgbG9va2FoZWFkIHRoYXQgdHJpZ2dlcnMgYW4gZXJyb3IgaXMgbm90IGRpc2NhcmRlZAorIyAgIHdoZW4gd2UgZW50ZXIgZXJyb3IgcmVjb3ZlcnkuICBCZWxvdywgdGhlIGxvb2thaGVhZCBjYXVzaW5nIHRoZQorIyAgIGZpcnN0IGVycm9yIGlzICIpIiwgd2hpY2ggaXMgbmVlZGVkIHRvIHJlY292ZXIgZnJvbSB0aGUgZXJyb3IgYW5kCisjICAgcHJvZHVjZSB0aGUgIjAiIHRoYXQgdHJpZ2dlcnMgdGhlICIwICE9IDEiIGVycm9yLgorIworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoKSArICgxICsgMSArIDEgKykgKyAoKiAqICopICsgKDEgKiAyICogKikgPSAxCitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiAgXCRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IiAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBDYWxjIDwgaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisjIE5vcm1hbGl6ZSB0aGUgb2JzZXJ2ZWQgYW5kIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzLCBkZXBlbmRpbmcgdXBvbiB0aGUKKyMgb3B0aW9ucy4KKyMgMS4gQ3JlYXRlIHRoZSByZWZlcmVuY2UgZXJyb3IgbWVzc2FnZS4KK2NhdCA+ZXhwb3V0IDw8J19BVEVPRicKKzEuMjogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xMTogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcpJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4yNDogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICcqJywgZXhwZWN0aW5nIG51bWJlciBvciAnLScgb3IgJygnIG9yICchJworMS4xLTEuMjc6IGNhbGM6IGVycm9yOiA0NDQ0ICE9IDEKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyMgVGhlIHNhbWUsIGJ1dCB0aGlzIHRpbWUgZXhlcmNpc2luZyBleHBsaWNpdGx5IHRyaWdnZXJlZCBzeW50YXggZXJyb3JzLgorIyBQT1NJWCBzYXlzIHRoZSBsb29rYWhlYWQgY2F1c2luZyB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQuCitjYXQgPmlucHV0IDw8J19BVEVPRicKKyghKSArICgwIDApID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjc6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBudW1iZXIKKzEuMS0xLjEwOiBjYWxjOiBlcnJvcjogMjIyMiAhPSAxCitfQVRFT0YKKworIyAyLiBJZiBsb2NhdGlvbnMgYXJlIG5vdCB1c2VkLCByZW1vdmUgdGhlbS4KKworIyAzLiBJZiBlcnJvci12ZXJib3NlIGlzIG5vdCB1c2VkLCBzdHJpcCB0aGVgLCB1bmV4cGVjdGVkLi4uLicgcGFydC4KKworIyA0LiBDaGVjaworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5OiBjYXQgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDozNjkiCisoICRhdF9jaGVja190cmFjZTsgY2F0IHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworY2F0ID5pbnB1dCA8PCdfQVRFT0YnCisoLSAqKSArICgwIDApID0gMQorX0FURU9GCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OTogIFwkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIENhbGMgPCBpbnB1dCIgImphdmEuYXQ6MzY5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggQ2FsYyA8IGlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjM2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworIyBOb3JtYWxpemUgdGhlIG9ic2VydmVkIGFuZCBleHBlY3RlZCBlcnJvciBtZXNzYWdlcywgZGVwZW5kaW5nIHVwb24gdGhlCisjIG9wdGlvbnMuCisjIDEuIENyZWF0ZSB0aGUgcmVmZXJlbmNlIGVycm9yIG1lc3NhZ2UuCitjYXQgPmV4cG91dCA8PCdfQVRFT0YnCisxLjM6IHN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAnKicsIGV4cGVjdGluZyBudW1iZXIgb3IgJy0nIG9yICcoJyBvciAnIScKKzEuODogc3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIG51bWJlcgorMS4xLTEuMTE6IGNhbGM6IGVycm9yOiAyMjIyICE9IDEKK19BVEVPRgorCisjIDIuIElmIGxvY2F0aW9ucyBhcmUgbm90IHVzZWQsIHJlbW92ZSB0aGVtLgorCisjIDMuIElmIGVycm9yLXZlcmJvc2UgaXMgbm90IHVzZWQsIHN0cmlwIHRoZWAsIHVuZXhwZWN0ZWQuLi4uJyBwYXJ0LgorCisjIDQuIENoZWNrCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDozNjk6IGNhdCBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjM2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBjYXQgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6MzY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8zMTQKKyNBVF9TVEFSVF8zMTUKK2F0X2ZuX2dyb3VwX2Jhbm5lciAzMTUgJ2phdmEuYXQ6NDU1JyBcCisgICJKYXZhIHBhcnNlciBjbGFzcyBhbmQgcGFja2FnZSBuYW1lcyIgIiAgICAgICAgICAgICIgMjAKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIzMTUuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisKK2NhdCA+WVlQYXJzZXIueSA8PCdfQVRFT0YnCisKKyVsYW5ndWFnZSAiSmF2YSIKKyVsb2NhdGlvbnMKKyVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKyV0b2tlbi10YWJsZQorCislJQorc3RhcnQ6ICJlbmQiIHt9OworJSUKK2NsYXNzIFBvc2l0aW9uIHt9CitfQVRFT0YKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ1NzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJqYXZhLmF0OjQ1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NDU3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiICJqYXZhLmF0OjQ1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ1NzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6NDU3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0NTc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjQ1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NDU3OiBiaXNvbiBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo0NTciCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NDU3OiBncmVwICdbbWJdNF8nIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjQ1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwICdbbWJdNF8nIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ1NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworJGFzX2VjaG8gImphdmEuYXQ6NDU3IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQUMiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo0NTciCiskYXNfZWNobyAiamF2YS5hdDo0NTciID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6NDU3IgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NDU3OiBcJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo0NTciCisoICRhdF9jaGVja190cmFjZTsgJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDU3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0NTg6IGdyZXAgLWMgJ15jbGFzcyBZWVBhcnNlclwkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeY2xhc3MgWVlQYXJzZXIkJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo0NTgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXmNsYXNzIFlZUGFyc2VyJCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDU4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworY2F0ID5ZWVBhcnNlci55IDw8J19BVEVPRicKKworJWxhbmd1YWdlICJKYXZhIgorJWxvY2F0aW9ucworJWRlYnVnCislZXJyb3ItdmVyYm9zZQorJXRva2VuLXRhYmxlCislbmFtZS1wcmVmaXggIlByZWZpeCIKKyUlCitzdGFydDogImVuZCIge307CislJQorY2xhc3MgUG9zaXRpb24ge30KK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NDYwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6NDYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0NjA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIgImphdmEuYXQ6NDYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NDYwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo0NjAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo0NjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ2MDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6NDYwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0NjA6IGJpc29uIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjQ2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0NjA6IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NDYwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDYwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCiskYXNfZWNobyAiamF2YS5hdDo0NjAiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBQyIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ2MCIKKyRhc19lY2hvICJqYXZhLmF0OjQ2MCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkEiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo0NjAiCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0NjA6IFwkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjQ2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo0NjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ2MTogZ3JlcCAtYyAnXmNsYXNzIFByZWZpeFBhcnNlclwkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeY2xhc3MgUHJlZml4UGFyc2VyJCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NDYxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ15jbGFzcyBQcmVmaXhQYXJzZXIkJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo0NjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCitjYXQgPllZUGFyc2VyLnkgPDwnX0FURU9GJworCislbGFuZ3VhZ2UgIkphdmEiCislbG9jYXRpb25zCislZGVidWcKKyVlcnJvci12ZXJib3NlCisldG9rZW4tdGFibGUKKyVkZWZpbmUgcGFyc2VyX2NsYXNzX25hbWUgIlBhcnNlckNsYXNzTmFtZSIKKyUlCitzdGFydDogImVuZCIge307CislJQorY2xhc3MgUG9zaXRpb24ge30KK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NDYzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6NDYzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDYzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0NjM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIgImphdmEuYXQ6NDYzIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDYzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NDYzOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo0NjMiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo0NjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ2MzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6NDYzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDYzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0NjM6IGJpc29uIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjQ2MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDYzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0NjM6IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NDYzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDYzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCiskYXNfZWNobyAiamF2YS5hdDo0NjMiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBQyIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ2MyIKKyRhc19lY2hvICJqYXZhLmF0OjQ2MyIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkEiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo0NjMiCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0NjM6IFwkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjQ2MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo0NjMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ2NDogZ3JlcCAtYyAnXmNsYXNzIFBhcnNlckNsYXNzTmFtZVwkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeY2xhc3MgUGFyc2VyQ2xhc3NOYW1lJCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NDY0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ15jbGFzcyBQYXJzZXJDbGFzc05hbWUkJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo0NjQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCitjYXQgPllZUGFyc2VyLnkgPDwnX0FURU9GJworCislbGFuZ3VhZ2UgIkphdmEiCislbG9jYXRpb25zCislZGVidWcKKyVlcnJvci12ZXJib3NlCisldG9rZW4tdGFibGUKKyVkZWZpbmUgcGFja2FnZSAidXNlcl9qYXZhX3BhY2thZ2UiCislJQorc3RhcnQ6ICJlbmQiIHt9OworJSUKK2NsYXNzIFBvc2l0aW9uIHt9CitfQVRFT0YKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ2NjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJqYXZhLmF0OjQ2NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ2NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NDY2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiICJqYXZhLmF0OjQ2NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ2NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ2NjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6NDY2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDY2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0NjY6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjQ2NiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ2NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NDY2OiBiaXNvbiBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo0NjYiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ2NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NDY2OiBncmVwICdbbWJdNF8nIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjQ2NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwICdbbWJdNF8nIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ2NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworJGFzX2VjaG8gImphdmEuYXQ6NDY2IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQUMiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo0NjYiCiskYXNfZWNobyAiamF2YS5hdDo0NjYiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6NDY2IgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NDY2OiBcJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo0NjYiCisoICRhdF9jaGVja190cmFjZTsgJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDY2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0Njc6IGdyZXAgLWMgJ15wYWNrYWdlIHVzZXJfamF2YV9wYWNrYWdlO1wkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdecGFja2FnZSB1c2VyX2phdmFfcGFja2FnZTskJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo0NjciCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXnBhY2thZ2UgdXNlcl9qYXZhX3BhY2thZ2U7JCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDY3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMzE1CisjQVRfU1RBUlRfMzE2CithdF9mbl9ncm91cF9iYW5uZXIgMzE2ICdqYXZhLmF0OjQ3NicgXAorICAiSmF2YSBwYXJzZXIgY2xhc3MgbW9kaWZpZXJzIiAiICAgICAgICAgICAgICAgICAgICAiIDIwCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMzE2LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworCitjYXQgPllZUGFyc2VyLnkgPDwnX0FURU9GJworCislbGFuZ3VhZ2UgIkphdmEiCislbG9jYXRpb25zCislZGVidWcKKyVlcnJvci12ZXJib3NlCisldG9rZW4tdGFibGUKKyVkZWZpbmUgYWJzdHJhY3QKKyUlCitzdGFydDogImVuZCIge307CislJQorY2xhc3MgUG9zaXRpb24ge30KK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NDc4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6NDc4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDc4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0Nzg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIgImphdmEuYXQ6NDc4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDc4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NDc4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo0NzgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo0NzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ3ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6NDc4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDc4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0Nzg6IGJpc29uIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjQ3OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDc4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0Nzg6IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NDc4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDc4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCiskYXNfZWNobyAiamF2YS5hdDo0NzgiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBQyIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ3OCIKKyRhc19lY2hvICJqYXZhLmF0OjQ3OCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkEiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo0NzgiCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0Nzg6IFwkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjQ3OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo0NzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ3OTogZ3JlcCAtYyAnXmFic3RyYWN0IGNsYXNzIFlZUGFyc2VyXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ15hYnN0cmFjdCBjbGFzcyBZWVBhcnNlciQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjQ3OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeYWJzdHJhY3QgY2xhc3MgWVlQYXJzZXIkJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo0NzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCitjYXQgPllZUGFyc2VyLnkgPDwnX0FURU9GJworCislbGFuZ3VhZ2UgIkphdmEiCislbG9jYXRpb25zCislZGVidWcKKyVlcnJvci12ZXJib3NlCisldG9rZW4tdGFibGUKKyVkZWZpbmUgZmluYWwKKyUlCitzdGFydDogImVuZCIge307CislJQorY2xhc3MgUG9zaXRpb24ge30KK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NDgxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6NDgxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDgxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0ODE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIgImphdmEuYXQ6NDgxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDgxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NDgxOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo0ODEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo0ODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ4MTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6NDgxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDgxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0ODE6IGJpc29uIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjQ4MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDgxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0ODE6IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NDgxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDgxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCiskYXNfZWNobyAiamF2YS5hdDo0ODEiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBQyIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ4MSIKKyRhc19lY2hvICJqYXZhLmF0OjQ4MSIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkEiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo0ODEiCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0ODE6IFwkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjQ4MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo0ODEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ4MjogZ3JlcCAtYyAnXmZpbmFsIGNsYXNzIFlZUGFyc2VyXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ15maW5hbCBjbGFzcyBZWVBhcnNlciQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjQ4MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeZmluYWwgY2xhc3MgWVlQYXJzZXIkJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo0ODIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCitjYXQgPllZUGFyc2VyLnkgPDwnX0FURU9GJworCislbGFuZ3VhZ2UgIkphdmEiCislbG9jYXRpb25zCislZGVidWcKKyVlcnJvci12ZXJib3NlCisldG9rZW4tdGFibGUKKyVkZWZpbmUgc3RyaWN0ZnAKKyUlCitzdGFydDogImVuZCIge307CislJQorY2xhc3MgUG9zaXRpb24ge30KK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NDg0OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6NDg0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDg0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0ODQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIgImphdmEuYXQ6NDg0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDg0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NDg0OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo0ODQiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo0ODQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ4NDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6NDg0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDg0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0ODQ6IGJpc29uIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjQ4NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDg0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0ODQ6IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NDg0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDg0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCiskYXNfZWNobyAiamF2YS5hdDo0ODQiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBQyIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ4NCIKKyRhc19lY2hvICJqYXZhLmF0OjQ4NCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkEiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo0ODQiCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0ODQ6IFwkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjQ4NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo0ODQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ4NTogZ3JlcCAtYyAnXnN0cmljdGZwIGNsYXNzIFlZUGFyc2VyXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ15zdHJpY3RmcCBjbGFzcyBZWVBhcnNlciQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjQ4NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdec3RyaWN0ZnAgY2xhc3MgWVlQYXJzZXIkJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo0ODUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCitjYXQgPllZUGFyc2VyLnkgPDwnX0FURU9GJworCislbGFuZ3VhZ2UgIkphdmEiCislbG9jYXRpb25zCislZGVidWcKKyVlcnJvci12ZXJib3NlCisldG9rZW4tdGFibGUKKworJWRlZmluZSBhYnN0cmFjdAorJWRlZmluZSBzdHJpY3RmcAorJSUKK3N0YXJ0OiAiZW5kIiB7fTsKKyUlCitjbGFzcyBQb3NpdGlvbiB7fQorX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0ODc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo0ODciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo0ODciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ4NzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo0ODciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo0ODciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0ODc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjQ4NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ4NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NDg3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo0ODciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo0ODciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ4NzogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NDg3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo0ODciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ4NzogZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo0ODciCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo0ODciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyRhc19lY2hvICJqYXZhLmF0OjQ4NyIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6NDg3IgorJGFzX2VjaG8gImphdmEuYXQ6NDg3IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ4NyIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ4NzogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NDg3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ4NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NDkwOiBncmVwIC1jICdeYWJzdHJhY3Qgc3RyaWN0ZnAgY2xhc3MgWVlQYXJzZXJcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXmFic3RyYWN0IHN0cmljdGZwIGNsYXNzIFlZUGFyc2VyJCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NDkwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ15hYnN0cmFjdCBzdHJpY3RmcCBjbGFzcyBZWVBhcnNlciQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ5MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKK2NhdCA+WVlQYXJzZXIueSA8PCdfQVRFT0YnCisKKyVsYW5ndWFnZSAiSmF2YSIKKyVsb2NhdGlvbnMKKyVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKyV0b2tlbi10YWJsZQorCislZGVmaW5lIGZpbmFsCislZGVmaW5lIHN0cmljdGZwCislJQorc3RhcnQ6ICJlbmQiIHt9OworJSUKK2NsYXNzIFBvc2l0aW9uIHt9CitfQVRFT0YKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ5MjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJqYXZhLmF0OjQ5MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ5MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NDkyOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiICJqYXZhLmF0OjQ5MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ5MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ5MjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6NDkyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDkyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0OTI6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjQ5MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ5MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NDkyOiBiaXNvbiBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo0OTIiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ5MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NDkyOiBncmVwICdbbWJdNF8nIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjQ5MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwICdbbWJdNF8nIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ5MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworJGFzX2VjaG8gImphdmEuYXQ6NDkyIiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQUMiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo0OTIiCiskYXNfZWNobyAiamF2YS5hdDo0OTIiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6NDkyIgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NDkyOiBcJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo0OTIiCisoICRhdF9jaGVja190cmFjZTsgJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDkyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0OTU6IGdyZXAgLWMgJ15maW5hbCBzdHJpY3RmcCBjbGFzcyBZWVBhcnNlclwkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeZmluYWwgc3RyaWN0ZnAgY2xhc3MgWVlQYXJzZXIkJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo0OTUiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXmZpbmFsIHN0cmljdGZwIGNsYXNzIFlZUGFyc2VyJCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NDk1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworY2F0ID5ZWVBhcnNlci55IDw8J19BVEVPRicKKworJWxhbmd1YWdlICJKYXZhIgorJWxvY2F0aW9ucworJWRlYnVnCislZXJyb3ItdmVyYm9zZQorJXRva2VuLXRhYmxlCislZGVmaW5lIHB1YmxpYworJSUKK3N0YXJ0OiAiZW5kIiB7fTsKKyUlCitjbGFzcyBQb3NpdGlvbiB7fQorX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0OTc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo0OTciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo0OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ5NzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo0OTciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo0OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo0OTc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjQ5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ5NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NDk3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo0OTciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo0OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ5NzogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NDk3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo0OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ5NzogZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo0OTciCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo0OTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyRhc19lY2hvICJqYXZhLmF0OjQ5NyIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6NDk3IgorJGFzX2VjaG8gImphdmEuYXQ6NDk3IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ5NyIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ5NzogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NDk3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ5NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NDk4OiBncmVwIC1jICdecHVibGljIGNsYXNzIFlZUGFyc2VyXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ15wdWJsaWMgY2xhc3MgWVlQYXJzZXIkJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo0OTgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXnB1YmxpYyBjbGFzcyBZWVBhcnNlciQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjQ5OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKK2NhdCA+WVlQYXJzZXIueSA8PCdfQVRFT0YnCisKKyVsYW5ndWFnZSAiSmF2YSIKKyVsb2NhdGlvbnMKKyVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKyV0b2tlbi10YWJsZQorCislZGVmaW5lIHB1YmxpYworJWRlZmluZSBhYnN0cmFjdAorJSUKK3N0YXJ0OiAiZW5kIiB7fTsKKyUlCitjbGFzcyBQb3NpdGlvbiB7fQorX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1MDA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo1MDAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUwMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo1MDAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1MDA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjUwMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUwMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTAwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo1MDAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUwMDogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NTAwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUwMDogZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo1MDAiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyRhc19lY2hvICJqYXZhLmF0OjUwMCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6NTAwIgorJGFzX2VjaG8gImphdmEuYXQ6NTAwIiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUwMCIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUwMDogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NTAwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUwMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTAzOiBncmVwIC1jICdecHVibGljIGFic3RyYWN0IGNsYXNzIFlZUGFyc2VyXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ15wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWVlQYXJzZXIkJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo1MDMiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXnB1YmxpYyBhYnN0cmFjdCBjbGFzcyBZWVBhcnNlciQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKK2NhdCA+WVlQYXJzZXIueSA8PCdfQVRFT0YnCisKKyVsYW5ndWFnZSAiSmF2YSIKKyVsb2NhdGlvbnMKKyVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKyV0b2tlbi10YWJsZQorCislZGVmaW5lIHB1YmxpYworJWRlZmluZSBmaW5hbAorJSUKK3N0YXJ0OiAiZW5kIiB7fTsKKyUlCitjbGFzcyBQb3NpdGlvbiB7fQorX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1MDU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo1MDUiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUwNTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo1MDUiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1MDU6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjUwNSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUwNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTA1OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo1MDUiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUwNTogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NTA1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUwNTogZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo1MDUiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MDUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyRhc19lY2hvICJqYXZhLmF0OjUwNSIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6NTA1IgorJGFzX2VjaG8gImphdmEuYXQ6NTA1IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUwNSIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUwNTogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NTA1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUwNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTA4OiBncmVwIC1jICdecHVibGljIGZpbmFsIGNsYXNzIFlZUGFyc2VyXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ15wdWJsaWMgZmluYWwgY2xhc3MgWVlQYXJzZXIkJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo1MDgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXnB1YmxpYyBmaW5hbCBjbGFzcyBZWVBhcnNlciQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKK2NhdCA+WVlQYXJzZXIueSA8PCdfQVRFT0YnCisKKyVsYW5ndWFnZSAiSmF2YSIKKyVsb2NhdGlvbnMKKyVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKyV0b2tlbi10YWJsZQorCislZGVmaW5lIHB1YmxpYworJWRlZmluZSBzdHJpY3RmcAorJSUKK3N0YXJ0OiAiZW5kIiB7fTsKKyUlCitjbGFzcyBQb3NpdGlvbiB7fQorX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1MTA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo1MTAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUxMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo1MTAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1MTA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjUxMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUxMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTEwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo1MTAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUxMDogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NTEwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUxMDogZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo1MTAiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyRhc19lY2hvICJqYXZhLmF0OjUxMCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6NTEwIgorJGFzX2VjaG8gImphdmEuYXQ6NTEwIiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUxMCIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUxMDogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NTEwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUxMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTEzOiBncmVwIC1jICdecHVibGljIHN0cmljdGZwIGNsYXNzIFlZUGFyc2VyXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ15wdWJsaWMgc3RyaWN0ZnAgY2xhc3MgWVlQYXJzZXIkJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo1MTMiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXnB1YmxpYyBzdHJpY3RmcCBjbGFzcyBZWVBhcnNlciQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKK2NhdCA+WVlQYXJzZXIueSA8PCdfQVRFT0YnCisKKyVsYW5ndWFnZSAiSmF2YSIKKyVsb2NhdGlvbnMKKyVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKyV0b2tlbi10YWJsZQorCislZGVmaW5lIHB1YmxpYworJWRlZmluZSBhYnN0cmFjdAorJWRlZmluZSBzdHJpY3RmcAorJSUKK3N0YXJ0OiAiZW5kIiB7fTsKKyUlCitjbGFzcyBQb3NpdGlvbiB7fQorX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1MTU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo1MTUiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUxNTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo1MTUiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1MTU6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjUxNSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUxNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTE1OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo1MTUiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUxNTogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NTE1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUxNTogZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo1MTUiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyRhc19lY2hvICJqYXZhLmF0OjUxNSIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6NTE1IgorJGFzX2VjaG8gImphdmEuYXQ6NTE1IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUxNSIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUxNTogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NTE1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUxNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTE5OiBncmVwIC1jICdecHVibGljIGFic3RyYWN0IHN0cmljdGZwIGNsYXNzIFlZUGFyc2VyXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ15wdWJsaWMgYWJzdHJhY3Qgc3RyaWN0ZnAgY2xhc3MgWVlQYXJzZXIkJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo1MTkiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXnB1YmxpYyBhYnN0cmFjdCBzdHJpY3RmcCBjbGFzcyBZWVBhcnNlciQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKK2NhdCA+WVlQYXJzZXIueSA8PCdfQVRFT0YnCisKKyVsYW5ndWFnZSAiSmF2YSIKKyVsb2NhdGlvbnMKKyVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKyV0b2tlbi10YWJsZQorCislZGVmaW5lIHB1YmxpYworJWRlZmluZSBmaW5hbAorJWRlZmluZSBzdHJpY3RmcAorJSUKK3N0YXJ0OiAiZW5kIiB7fTsKKyUlCitjbGFzcyBQb3NpdGlvbiB7fQorX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1MjE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo1MjEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUyMTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo1MjEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1MjE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjUyMSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTIxOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo1MjEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUyMTogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NTIxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUyMTogZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo1MjEiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyRhc19lY2hvICJqYXZhLmF0OjUyMSIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6NTIxIgorJGFzX2VjaG8gImphdmEuYXQ6NTIxIiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUyMSIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUyMTogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NTIxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUyMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTI1OiBncmVwIC1jICdecHVibGljIGZpbmFsIHN0cmljdGZwIGNsYXNzIFlZUGFyc2VyXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ15wdWJsaWMgZmluYWwgc3RyaWN0ZnAgY2xhc3MgWVlQYXJzZXIkJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo1MjUiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXnB1YmxpYyBmaW5hbCBzdHJpY3RmcCBjbGFzcyBZWVBhcnNlciQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUyNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzMxNgorI0FUX1NUQVJUXzMxNworYXRfZm5fZ3JvdXBfYmFubmVyIDMxNyAnamF2YS5hdDo1MzQnIFwKKyAgIkphdmEgcGFyc2VyIGNsYXNzIGV4dGVuZHMgYW5kIGltcGxlbWVudHMiICIgICAgICAgIiAyMAorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjMxNy4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworY2F0ID5ZWVBhcnNlci55IDw8J19BVEVPRicKKworJWxhbmd1YWdlICJKYXZhIgorJWxvY2F0aW9ucworJWRlYnVnCislZXJyb3ItdmVyYm9zZQorJXRva2VuLXRhYmxlCislZGVmaW5lIGV4dGVuZHMgIlRocmVhZCIKKyUlCitzdGFydDogImVuZCIge307CislJQorY2xhc3MgUG9zaXRpb24ge30KK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTM2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6NTM2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NTM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1MzY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIgImphdmEuYXQ6NTM2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NTM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTM2OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo1MzYiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUzNjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6NTM2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NTM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1MzY6IGJpc29uIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjUzNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NTM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1MzY6IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NTM2IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NTM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCiskYXNfZWNobyAiamF2YS5hdDo1MzYiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBQyIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUzNiIKKyRhc19lY2hvICJqYXZhLmF0OjUzNiIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkEiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo1MzYiCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1MzY6IFwkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjUzNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUzNzogZ3JlcCAtYyAnXmNsYXNzIFlZUGFyc2VyIGV4dGVuZHMgVGhyZWFkXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ15jbGFzcyBZWVBhcnNlciBleHRlbmRzIFRocmVhZCQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjUzNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeY2xhc3MgWVlQYXJzZXIgZXh0ZW5kcyBUaHJlYWQkJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MzciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCitjYXQgPllZUGFyc2VyLnkgPDwnX0FURU9GJworCislbGFuZ3VhZ2UgIkphdmEiCislbG9jYXRpb25zCislZGVidWcKKyVlcnJvci12ZXJib3NlCisldG9rZW4tdGFibGUKKyVkZWZpbmUgaW1wbGVtZW50cyAiQ2xvbmVhYmxlIgorJSUKK3N0YXJ0OiAiZW5kIiB7fTsKKyUlCitjbGFzcyBQb3NpdGlvbiB7fQorX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1Mzk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo1MzkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUzOTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo1MzkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1Mzk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjUzOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUzOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTM5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo1MzkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUzOTogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NTM5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUzOTogZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo1MzkiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1MzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyRhc19lY2hvICJqYXZhLmF0OjUzOSIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6NTM5IgorJGFzX2VjaG8gImphdmEuYXQ6NTM5IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUzOSIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUzOTogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NTM5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjUzOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTQwOiBncmVwIC1jICdeY2xhc3MgWVlQYXJzZXIgaW1wbGVtZW50cyBDbG9uZWFibGVcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXmNsYXNzIFlZUGFyc2VyIGltcGxlbWVudHMgQ2xvbmVhYmxlJCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NTQwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ15jbGFzcyBZWVBhcnNlciBpbXBsZW1lbnRzIENsb25lYWJsZSQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU0MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKK2NhdCA+WVlQYXJzZXIueSA8PCdfQVRFT0YnCisKKyVsYW5ndWFnZSAiSmF2YSIKKyVsb2NhdGlvbnMKKyVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKyV0b2tlbi10YWJsZQorCislZGVmaW5lIGV4dGVuZHMgIlRocmVhZCIKKyVkZWZpbmUgaW1wbGVtZW50cyAiQ2xvbmVhYmxlIgorJSUKK3N0YXJ0OiAiZW5kIiB7fTsKKyUlCitjbGFzcyBQb3NpdGlvbiB7fQorX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1NDI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo1NDIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU0MjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo1NDIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1NDI6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjU0MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU0MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTQyOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo1NDIiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU0MjogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NTQyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU0MjogZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo1NDIiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyRhc19lY2hvICJqYXZhLmF0OjU0MiIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6NTQyIgorJGFzX2VjaG8gImphdmEuYXQ6NTQyIiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU0MiIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU0MjogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NTQyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU0MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTQ1OiBncmVwIC1jICdeY2xhc3MgWVlQYXJzZXIgZXh0ZW5kcyBUaHJlYWQgaW1wbGVtZW50cyBDbG9uZWFibGVcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXmNsYXNzIFlZUGFyc2VyIGV4dGVuZHMgVGhyZWFkIGltcGxlbWVudHMgQ2xvbmVhYmxlJCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NTQ1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ15jbGFzcyBZWVBhcnNlciBleHRlbmRzIFRocmVhZCBpbXBsZW1lbnRzIENsb25lYWJsZSQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU0NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzMxNworI0FUX1NUQVJUXzMxOAorYXRfZm5fZ3JvdXBfYmFubmVyIDMxOCAnamF2YS5hdDo1NTQnIFwKKyAgIkphdmEgJXBhcnNlLXBhcmFtIGFuZCAlbGV4LXBhcmFtIiAiICAgICAgICAgICAgICAgIiAyMAorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjMxOC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworY2F0ID5ZWVBhcnNlci55IDw8J19BVEVPRicKKworJWxhbmd1YWdlICJKYXZhIgorJWxvY2F0aW9ucworJWRlYnVnCislZXJyb3ItdmVyYm9zZQorJXRva2VuLXRhYmxlCisKKyUlCitzdGFydDogImVuZCIge307CislJQorY2xhc3MgUG9zaXRpb24ge30KK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTU2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6NTU2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NTU2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1NTY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIgImphdmEuYXQ6NTU2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NTU2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTU2OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo1NTYiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU1NjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6NTU2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NTU2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1NTY6IGJpc29uIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjU1NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NTU2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1NTY6IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NTU2IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NTU2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCiskYXNfZWNobyAiamF2YS5hdDo1NTYiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBQyIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU1NiIKKyRhc19lY2hvICJqYXZhLmF0OjU1NiIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkEiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo1NTYiCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1NTY6IFwkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjU1NiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU1NzogZ3JlcCAtYyAnXiAqcHVibGljIFlZUGFyc2VyIChMZXhlciB5eWxleGVyKSB7XCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnB1YmxpYyBZWVBhcnNlciAoTGV4ZXIgeXlsZXhlcikgeyQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjU1NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwdWJsaWMgWVlQYXJzZXIgKExleGVyIHl5bGV4ZXIpIHskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCitjYXQgPllZUGFyc2VyLnkgPDwnX0FURU9GJworCislbGFuZ3VhZ2UgIkphdmEiCislbG9jYXRpb25zCislZGVidWcKKyVlcnJvci12ZXJib3NlCisldG9rZW4tdGFibGUKKyVwYXJzZS1wYXJhbSB7aW50IHBhcnNlX3BhcmFtMX0KKyUlCitzdGFydDogImVuZCIge307CislJQorY2xhc3MgUG9zaXRpb24ge30KK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTU5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6NTU5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NTU5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1NTk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIgImphdmEuYXQ6NTU5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NTU5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTU5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo1NTkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU1OTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6NTU5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NTU5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1NTk6IGJpc29uIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjU1OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NTU5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1NTk6IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NTU5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NTU5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCiskYXNfZWNobyAiamF2YS5hdDo1NTkiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBQyIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU1OSIKKyRhc19lY2hvICJqYXZhLmF0OjU1OSIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkEiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo1NTkiCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1NTk6IFwkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjU1OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU2MDogZ3JlcCAtYyAnXiAqcHJvdGVjdGVkIGZpbmFsIGludCBwYXJzZV9wYXJhbTE7XCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnByb3RlY3RlZCBmaW5hbCBpbnQgcGFyc2VfcGFyYW0xOyQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjU2MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwcm90ZWN0ZWQgZmluYWwgaW50IHBhcnNlX3BhcmFtMTskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NjAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU2MTogZ3JlcCAtYyAnXiAqcHVibGljIFlZUGFyc2VyIChMZXhlciB5eWxleGVyLCAqaW50IHBhcnNlX3BhcmFtMSkge1wkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICpwdWJsaWMgWVlQYXJzZXIgKExleGVyIHl5bGV4ZXIsICppbnQgcGFyc2VfcGFyYW0xKSB7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NTYxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKnB1YmxpYyBZWVBhcnNlciAoTGV4ZXIgeXlsZXhlciwgKmludCBwYXJzZV9wYXJhbTEpIHskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NjEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU2MjogZ3JlcCAtYyAnXlsJIF0qdGhpcy5wYXJzZV9wYXJhbTEgPSBwYXJzZV9wYXJhbTE7XCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ15bCSBdKnRoaXMucGFyc2VfcGFyYW0xID0gcGFyc2VfcGFyYW0xOyQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjU2MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeWwkgXSp0aGlzLnBhcnNlX3BhcmFtMSA9IHBhcnNlX3BhcmFtMTskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NjIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCitjYXQgPllZUGFyc2VyLnkgPDwnX0FURU9GJworCislbGFuZ3VhZ2UgIkphdmEiCislbG9jYXRpb25zCislZGVidWcKKyVlcnJvci12ZXJib3NlCisldG9rZW4tdGFibGUKKworJXBhcnNlLXBhcmFtIHtpbnQgcGFyc2VfcGFyYW0xfQorJXBhcnNlLXBhcmFtIHtsb25nIHBhcnNlX3BhcmFtMn0KKyUlCitzdGFydDogImVuZCIge307CislJQorY2xhc3MgUG9zaXRpb24ge30KK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTY0OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6NTY0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NTY0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1NjQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIgImphdmEuYXQ6NTY0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NTY0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTY0OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo1NjQiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NjQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU2NDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6NTY0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NTY0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1NjQ6IGJpc29uIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjU2NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NTY0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1NjQ6IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NTY0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NTY0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCiskYXNfZWNobyAiamF2YS5hdDo1NjQiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBQyIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU2NCIKKyRhc19lY2hvICJqYXZhLmF0OjU2NCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkEiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo1NjQiCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1NjQ6IFwkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjU2NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NjQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU2NzogZ3JlcCAtYyAnXiAqcHJvdGVjdGVkIGZpbmFsIGludCBwYXJzZV9wYXJhbTE7XCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnByb3RlY3RlZCBmaW5hbCBpbnQgcGFyc2VfcGFyYW0xOyQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjU2NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwcm90ZWN0ZWQgZmluYWwgaW50IHBhcnNlX3BhcmFtMTskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NjciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU2ODogZ3JlcCAtYyAnXiAqcHJvdGVjdGVkIGZpbmFsIGxvbmcgcGFyc2VfcGFyYW0yO1wkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICpwcm90ZWN0ZWQgZmluYWwgbG9uZyBwYXJzZV9wYXJhbTI7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NTY4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKnByb3RlY3RlZCBmaW5hbCBsb25nIHBhcnNlX3BhcmFtMjskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NjgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU2OTogZ3JlcCAtYyAnXiAqcHVibGljIFlZUGFyc2VyIChMZXhlciB5eWxleGVyLCAqaW50IHBhcnNlX3BhcmFtMSwgKmxvbmcgcGFyc2VfcGFyYW0yKSB7XCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnB1YmxpYyBZWVBhcnNlciAoTGV4ZXIgeXlsZXhlciwgKmludCBwYXJzZV9wYXJhbTEsICpsb25nIHBhcnNlX3BhcmFtMikgeyQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjU2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwdWJsaWMgWVlQYXJzZXIgKExleGVyIHl5bGV4ZXIsICppbnQgcGFyc2VfcGFyYW0xLCAqbG9uZyBwYXJzZV9wYXJhbTIpIHskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU3MDogZ3JlcCAtYyAnXlsJIF0qdGhpcy5wYXJzZV9wYXJhbTEgPSBwYXJzZV9wYXJhbTE7XCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ15bCSBdKnRoaXMucGFyc2VfcGFyYW0xID0gcGFyc2VfcGFyYW0xOyQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjU3MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeWwkgXSp0aGlzLnBhcnNlX3BhcmFtMSA9IHBhcnNlX3BhcmFtMTskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NzAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU3MTogZ3JlcCAtYyAnXlsJIF0qdGhpcy5wYXJzZV9wYXJhbTIgPSBwYXJzZV9wYXJhbTI7XCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ15bCSBdKnRoaXMucGFyc2VfcGFyYW0yID0gcGFyc2VfcGFyYW0yOyQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjU3MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeWwkgXSp0aGlzLnBhcnNlX3BhcmFtMiA9IHBhcnNlX3BhcmFtMjskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NzEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCitjYXQgPllZUGFyc2VyLnkgPDwnX0FURU9GJworCislbGFuZ3VhZ2UgIkphdmEiCislbG9jYXRpb25zCislZGVidWcKKyVlcnJvci12ZXJib3NlCisldG9rZW4tdGFibGUKKworCislY29kZSBsZXhlcgoreworICBPYmplY3QgeXlsdmFsOworICBwdWJsaWMgT2JqZWN0IGdldExWYWwoKSB7IHJldHVybiB5eWx2YWw7IH0KKworICBwdWJsaWMgUG9zaXRpb24gZ2V0U3RhcnRQb3MoKSB7IHJldHVybiBudWxsOyB9CisgIHB1YmxpYyBQb3NpdGlvbiBnZXRFbmRQb3MoKSAgIHsgcmV0dXJuIG51bGw7IH0KKworICBwdWJsaWMgdm9pZCB5eWVycm9yIChMb2NhdGlvbiBsb2MsIFN0cmluZyBzKQorICB7CisgICAgU3lzdGVtLmVyci5wcmludGxuIChsb2MgKyAiOiAiICsgcyk7CisgIH0KKworICBwdWJsaWMgaW50IHl5bGV4ICgpCisgIHsKKyAgICByZXR1cm4gRU9GOworICB9CisKKworfQorJSUKK3N0YXJ0OiAiZW5kIiB7fTsKKyUlCitjbGFzcyBQb3NpdGlvbiB7fQorX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1NzM6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo1NzMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NzMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU3MzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo1NzMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NzMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1NzM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjU3MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU3MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTczOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo1NzMiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NzMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU3MzogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NTczIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NzMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU3MzogZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo1NzMiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NzMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyRhc19lY2hvICJqYXZhLmF0OjU3MyIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6NTczIgorJGFzX2VjaG8gImphdmEuYXQ6NTczIiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU3MyIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU3MzogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NTczIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU3MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTc0OiBncmVwIC1jICdeICpwdWJsaWMgWVlQYXJzZXIgKCkge1wkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICpwdWJsaWMgWVlQYXJzZXIgKCkgeyQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjU3NCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwdWJsaWMgWVlQYXJzZXIgKCkgeyQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU3NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTc1OiBncmVwIC1jICdeICpwcm90ZWN0ZWQgWVlQYXJzZXIgKExleGVyIHl5bGV4ZXIpIHtcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHJvdGVjdGVkIFlZUGFyc2VyIChMZXhlciB5eWxleGVyKSB7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NTc1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKnByb3RlY3RlZCBZWVBhcnNlciAoTGV4ZXIgeXlsZXhlcikgeyQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU3NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKK2NhdCA+WVlQYXJzZXIueSA8PCdfQVRFT0YnCisKKyVsYW5ndWFnZSAiSmF2YSIKKyVsb2NhdGlvbnMKKyVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKyV0b2tlbi10YWJsZQorJXBhcnNlLXBhcmFtIHtpbnQgcGFyc2VfcGFyYW0xfQorCislY29kZSBsZXhlcgoreworICBPYmplY3QgeXlsdmFsOworICBwdWJsaWMgT2JqZWN0IGdldExWYWwoKSB7IHJldHVybiB5eWx2YWw7IH0KKworICBwdWJsaWMgUG9zaXRpb24gZ2V0U3RhcnRQb3MoKSB7IHJldHVybiBudWxsOyB9CisgIHB1YmxpYyBQb3NpdGlvbiBnZXRFbmRQb3MoKSAgIHsgcmV0dXJuIG51bGw7IH0KKworICBwdWJsaWMgdm9pZCB5eWVycm9yIChMb2NhdGlvbiBsb2MsIFN0cmluZyBzKQorICB7CisgICAgU3lzdGVtLmVyci5wcmludGxuIChsb2MgKyAiOiAiICsgcyk7CisgIH0KKworICBwdWJsaWMgaW50IHl5bGV4ICgpCisgIHsKKyAgICByZXR1cm4gRU9GOworICB9CisKKworfQorJSUKK3N0YXJ0OiAiZW5kIiB7fTsKKyUlCitjbGFzcyBQb3NpdGlvbiB7fQorX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1Nzc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo1NzciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NzciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU3NzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo1NzciCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NzciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1Nzc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjU3NyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU3NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTc3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo1NzciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NzciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU3NzogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NTc3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NzciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU3NzogZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo1NzciCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1NzciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyRhc19lY2hvICJqYXZhLmF0OjU3NyIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6NTc3IgorJGFzX2VjaG8gImphdmEuYXQ6NTc3IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU3NyIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU3NzogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NTc3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU3NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTc5OiBncmVwIC1jICdeICpwcm90ZWN0ZWQgZmluYWwgaW50IHBhcnNlX3BhcmFtMTtcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHJvdGVjdGVkIGZpbmFsIGludCBwYXJzZV9wYXJhbTE7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NTc5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKnByb3RlY3RlZCBmaW5hbCBpbnQgcGFyc2VfcGFyYW0xOyQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU3OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTgwOiBncmVwIC1jICdeICpwdWJsaWMgWVlQYXJzZXIgKGludCBwYXJzZV9wYXJhbTEpIHtcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHVibGljIFlZUGFyc2VyIChpbnQgcGFyc2VfcGFyYW0xKSB7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NTgwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKnB1YmxpYyBZWVBhcnNlciAoaW50IHBhcnNlX3BhcmFtMSkgeyQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU4MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTgxOiBncmVwIC1jICdeICpwcm90ZWN0ZWQgWVlQYXJzZXIgKExleGVyIHl5bGV4ZXIsICppbnQgcGFyc2VfcGFyYW0xKSB7XCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnByb3RlY3RlZCBZWVBhcnNlciAoTGV4ZXIgeXlsZXhlciwgKmludCBwYXJzZV9wYXJhbTEpIHskJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo1ODEiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqcHJvdGVjdGVkIFlZUGFyc2VyIChMZXhlciB5eWxleGVyLCAqaW50IHBhcnNlX3BhcmFtMSkgeyQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU4MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTgyOiBncmVwIC1jICdeWwkgXSp0aGlzLnBhcnNlX3BhcmFtMSA9IHBhcnNlX3BhcmFtMTtcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXlsJIF0qdGhpcy5wYXJzZV9wYXJhbTEgPSBwYXJzZV9wYXJhbTE7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NTgyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ15bCSBdKnRoaXMucGFyc2VfcGFyYW0xID0gcGFyc2VfcGFyYW0xOyQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIyCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU4MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKK2NhdCA+WVlQYXJzZXIueSA8PCdfQVRFT0YnCisKKyVsYW5ndWFnZSAiSmF2YSIKKyVsb2NhdGlvbnMKKyVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKyV0b2tlbi10YWJsZQorCislcGFyc2UtcGFyYW0ge2ludCBwYXJzZV9wYXJhbTF9CislcGFyc2UtcGFyYW0ge2xvbmcgcGFyc2VfcGFyYW0yfQorCislY29kZSBsZXhlcgoreworICBPYmplY3QgeXlsdmFsOworICBwdWJsaWMgT2JqZWN0IGdldExWYWwoKSB7IHJldHVybiB5eWx2YWw7IH0KKworICBwdWJsaWMgUG9zaXRpb24gZ2V0U3RhcnRQb3MoKSB7IHJldHVybiBudWxsOyB9CisgIHB1YmxpYyBQb3NpdGlvbiBnZXRFbmRQb3MoKSAgIHsgcmV0dXJuIG51bGw7IH0KKworICBwdWJsaWMgdm9pZCB5eWVycm9yIChMb2NhdGlvbiBsb2MsIFN0cmluZyBzKQorICB7CisgICAgU3lzdGVtLmVyci5wcmludGxuIChsb2MgKyAiOiAiICsgcyk7CisgIH0KKworICBwdWJsaWMgaW50IHl5bGV4ICgpCisgIHsKKyAgICByZXR1cm4gRU9GOworICB9CisKKworfQorJSUKK3N0YXJ0OiAiZW5kIiB7fTsKKyUlCitjbGFzcyBQb3NpdGlvbiB7fQorX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1ODQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo1ODQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1ODQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU4NDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo1ODQiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1ODQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1ODQ6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjU4NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU4NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTg0OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo1ODQiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1ODQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU4NDogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NTg0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1ODQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU4NDogZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo1ODQiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1ODQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyRhc19lY2hvICJqYXZhLmF0OjU4NCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6NTg0IgorJGFzX2VjaG8gImphdmEuYXQ6NTg0IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU4NCIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU4NDogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NTg0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU4NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTg4OiBncmVwIC1jICdeICpwcm90ZWN0ZWQgZmluYWwgaW50IHBhcnNlX3BhcmFtMTtcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHJvdGVjdGVkIGZpbmFsIGludCBwYXJzZV9wYXJhbTE7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NTg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKnByb3RlY3RlZCBmaW5hbCBpbnQgcGFyc2VfcGFyYW0xOyQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTg5OiBncmVwIC1jICdeICpwcm90ZWN0ZWQgZmluYWwgbG9uZyBwYXJzZV9wYXJhbTI7XCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnByb3RlY3RlZCBmaW5hbCBsb25nIHBhcnNlX3BhcmFtMjskJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo1ODkiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqcHJvdGVjdGVkIGZpbmFsIGxvbmcgcGFyc2VfcGFyYW0yOyQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU4OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTkwOiBncmVwIC1jICdeICpwdWJsaWMgWVlQYXJzZXIgKGludCBwYXJzZV9wYXJhbTEsICpsb25nIHBhcnNlX3BhcmFtMikge1wkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICpwdWJsaWMgWVlQYXJzZXIgKGludCBwYXJzZV9wYXJhbTEsICpsb25nIHBhcnNlX3BhcmFtMikgeyQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjU5MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwdWJsaWMgWVlQYXJzZXIgKGludCBwYXJzZV9wYXJhbTEsICpsb25nIHBhcnNlX3BhcmFtMikgeyQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU5MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTkxOiBncmVwIC1jICdeICpwcm90ZWN0ZWQgWVlQYXJzZXIgKExleGVyIHl5bGV4ZXIsICppbnQgcGFyc2VfcGFyYW0xLCAqbG9uZyBwYXJzZV9wYXJhbTIpIHtcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHJvdGVjdGVkIFlZUGFyc2VyIChMZXhlciB5eWxleGVyLCAqaW50IHBhcnNlX3BhcmFtMSwgKmxvbmcgcGFyc2VfcGFyYW0yKSB7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NTkxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKnByb3RlY3RlZCBZWVBhcnNlciAoTGV4ZXIgeXlsZXhlciwgKmludCBwYXJzZV9wYXJhbTEsICpsb25nIHBhcnNlX3BhcmFtMikgeyQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU5MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTkyOiBncmVwIC1jICdeWwkgXSp0aGlzLnBhcnNlX3BhcmFtMSA9IHBhcnNlX3BhcmFtMTtcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXlsJIF0qdGhpcy5wYXJzZV9wYXJhbTEgPSBwYXJzZV9wYXJhbTE7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NTkyIgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ15bCSBdKnRoaXMucGFyc2VfcGFyYW0xID0gcGFyc2VfcGFyYW0xOyQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIyCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU5MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTkzOiBncmVwIC1jICdeWwkgXSp0aGlzLnBhcnNlX3BhcmFtMiA9IHBhcnNlX3BhcmFtMjtcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXlsJIF0qdGhpcy5wYXJzZV9wYXJhbTIgPSBwYXJzZV9wYXJhbTI7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NTkzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ15bCSBdKnRoaXMucGFyc2VfcGFyYW0yID0gcGFyc2VfcGFyYW0yOyQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIyCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU5MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKK2NhdCA+WVlQYXJzZXIueSA8PCdfQVRFT0YnCisKKyVsYW5ndWFnZSAiSmF2YSIKKyVsb2NhdGlvbnMKKyVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKyV0b2tlbi10YWJsZQorJWxleC1wYXJhbSB7Y2hhciBsZXhfcGFyYW0xfQorCislY29kZSBsZXhlcgoreworICBPYmplY3QgeXlsdmFsOworICBwdWJsaWMgT2JqZWN0IGdldExWYWwoKSB7IHJldHVybiB5eWx2YWw7IH0KKworICBwdWJsaWMgUG9zaXRpb24gZ2V0U3RhcnRQb3MoKSB7IHJldHVybiBudWxsOyB9CisgIHB1YmxpYyBQb3NpdGlvbiBnZXRFbmRQb3MoKSAgIHsgcmV0dXJuIG51bGw7IH0KKworICBwdWJsaWMgdm9pZCB5eWVycm9yIChMb2NhdGlvbiBsb2MsIFN0cmluZyBzKQorICB7CisgICAgU3lzdGVtLmVyci5wcmludGxuIChsb2MgKyAiOiAiICsgcyk7CisgIH0KKworICBwdWJsaWMgaW50IHl5bGV4ICgpCisgIHsKKyAgICByZXR1cm4gRU9GOworICB9CisKKyAgWVlMZXhlciAoY2hhciBsZXhfcGFyYW0xKSB7fQorfQorJSUKK3N0YXJ0OiAiZW5kIiB7fTsKKyUlCitjbGFzcyBQb3NpdGlvbiB7fQorX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1OTU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo1OTUiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1OTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU5NTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo1OTUiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1OTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo1OTU6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjU5NSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU5NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTk1OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo1OTUiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1OTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU5NTogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NTk1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1OTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU5NTogZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo1OTUiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo1OTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyRhc19lY2hvICJqYXZhLmF0OjU5NSIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6NTk1IgorJGFzX2VjaG8gImphdmEuYXQ6NTk1IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU5NSIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU5NTogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NTk1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU5NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTk3OiBncmVwIC1jICdeICpwdWJsaWMgWVlQYXJzZXIgKGNoYXIgbGV4X3BhcmFtMSkge1wkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICpwdWJsaWMgWVlQYXJzZXIgKGNoYXIgbGV4X3BhcmFtMSkgeyQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjU5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwdWJsaWMgWVlQYXJzZXIgKGNoYXIgbGV4X3BhcmFtMSkgeyQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU5NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NTk4OiBncmVwIC1jICdeLiogPSBuZXcgWVlMZXhlciAqKGxleF9wYXJhbTEpO1wkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeLiogPSBuZXcgWVlMZXhlciAqKGxleF9wYXJhbTEpOyQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjU5OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeLiogPSBuZXcgWVlMZXhlciAqKGxleF9wYXJhbTEpOyQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjU5OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKK2NhdCA+WVlQYXJzZXIueSA8PCdfQVRFT0YnCisKKyVsYW5ndWFnZSAiSmF2YSIKKyVsb2NhdGlvbnMKKyVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKyV0b2tlbi10YWJsZQorCislbGV4LXBhcmFtIHtjaGFyIGxleF9wYXJhbTF9CislbGV4LXBhcmFtIHtzaG9ydCBsZXhfcGFyYW0yfQorCislY29kZSBsZXhlcgoreworICBPYmplY3QgeXlsdmFsOworICBwdWJsaWMgT2JqZWN0IGdldExWYWwoKSB7IHJldHVybiB5eWx2YWw7IH0KKworICBwdWJsaWMgUG9zaXRpb24gZ2V0U3RhcnRQb3MoKSB7IHJldHVybiBudWxsOyB9CisgIHB1YmxpYyBQb3NpdGlvbiBnZXRFbmRQb3MoKSAgIHsgcmV0dXJuIG51bGw7IH0KKworICBwdWJsaWMgdm9pZCB5eWVycm9yIChMb2NhdGlvbiBsb2MsIFN0cmluZyBzKQorICB7CisgICAgU3lzdGVtLmVyci5wcmludGxuIChsb2MgKyAiOiAiICsgcyk7CisgIH0KKworICBwdWJsaWMgaW50IHl5bGV4ICgpCisgIHsKKyAgICByZXR1cm4gRU9GOworICB9CisKKyAgWVlMZXhlciAoY2hhciBsZXhfcGFyYW0xLCBzaG9ydCBsZXhfcGFyYW0yKSB7fQorfQorJSUKK3N0YXJ0OiAiZW5kIiB7fTsKKyUlCitjbGFzcyBQb3NpdGlvbiB7fQorX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2MDA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo2MDAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjYwMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo2MDAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2MDA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjYwMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjYwMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NjAwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo2MDAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjYwMDogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NjAwIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjYwMDogZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo2MDAiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2MDAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyRhc19lY2hvICJqYXZhLmF0OjYwMCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6NjAwIgorJGFzX2VjaG8gImphdmEuYXQ6NjAwIiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjYwMCIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjYwMDogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NjAwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjYwMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NjA0OiBncmVwIC1jICdeICpwdWJsaWMgWVlQYXJzZXIgKGNoYXIgbGV4X3BhcmFtMSwgKnNob3J0IGxleF9wYXJhbTIpIHtcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHVibGljIFlZUGFyc2VyIChjaGFyIGxleF9wYXJhbTEsICpzaG9ydCBsZXhfcGFyYW0yKSB7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NjA0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKnB1YmxpYyBZWVBhcnNlciAoY2hhciBsZXhfcGFyYW0xLCAqc2hvcnQgbGV4X3BhcmFtMikgeyQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjYwNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NjA1OiBncmVwIC1jICdeLiogPSBuZXcgWVlMZXhlciAqKGxleF9wYXJhbTEsICpsZXhfcGFyYW0yKTtcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXi4qID0gbmV3IFlZTGV4ZXIgKihsZXhfcGFyYW0xLCAqbGV4X3BhcmFtMik7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NjA1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14uKiA9IG5ldyBZWUxleGVyICoobGV4X3BhcmFtMSwgKmxleF9wYXJhbTIpOyQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjYwNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisKK2NhdCA+WVlQYXJzZXIueSA8PCdfQVRFT0YnCisKKyVsYW5ndWFnZSAiSmF2YSIKKyVsb2NhdGlvbnMKKyVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKyV0b2tlbi10YWJsZQorCislcGFyc2UtcGFyYW0ge2ludCBwYXJzZV9wYXJhbTF9CislcGFyc2UtcGFyYW0ge2xvbmcgcGFyc2VfcGFyYW0yfQorJWxleC1wYXJhbSB7Y2hhciBsZXhfcGFyYW0xfQorJWxleC1wYXJhbSB7c2hvcnQgbGV4X3BhcmFtMn0KKworJWNvZGUgbGV4ZXIKK3sKKyAgT2JqZWN0IHl5bHZhbDsKKyAgcHVibGljIE9iamVjdCBnZXRMVmFsKCkgeyByZXR1cm4geXlsdmFsOyB9CisKKyAgcHVibGljIFBvc2l0aW9uIGdldFN0YXJ0UG9zKCkgeyByZXR1cm4gbnVsbDsgfQorICBwdWJsaWMgUG9zaXRpb24gZ2V0RW5kUG9zKCkgICB7IHJldHVybiBudWxsOyB9CisKKyAgcHVibGljIHZvaWQgeXllcnJvciAoTG9jYXRpb24gbG9jLCBTdHJpbmcgcykKKyAgeworICAgIFN5c3RlbS5lcnIucHJpbnRsbiAobG9jICsgIjogIiArIHMpOworICB9CisKKyAgcHVibGljIGludCB5eWxleCAoKQorICB7CisgICAgcmV0dXJuIEVPRjsKKyAgfQorCisgIFlZTGV4ZXIgKGNoYXIgbGV4X3BhcmFtMSwgc2hvcnQgbGV4X3BhcmFtMikge30KK30KKyUlCitzdGFydDogImVuZCIge307CislJQorY2xhc3MgUG9zaXRpb24ge30KK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NjA3OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6NjA3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NjA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2MDc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIgImphdmEuYXQ6NjA3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NjA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NjA3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo2MDciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjYwNzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6NjA3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NjA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2MDc6IGJpc29uIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjYwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NjA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2MDc6IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NjA3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NjA3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCiskYXNfZWNobyAiamF2YS5hdDo2MDciID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBQyIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjYwNyIKKyRhc19lY2hvICJqYXZhLmF0OjYwNyIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkEiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo2MDciCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2MDc6IFwkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjYwNyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2MDciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjYxMzogZ3JlcCAtYyAnXiAqcHJvdGVjdGVkIGZpbmFsIGludCBwYXJzZV9wYXJhbTE7XCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnByb3RlY3RlZCBmaW5hbCBpbnQgcGFyc2VfcGFyYW0xOyQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjYxMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwcm90ZWN0ZWQgZmluYWwgaW50IHBhcnNlX3BhcmFtMTskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2MTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjYxNDogZ3JlcCAtYyAnXiAqcHJvdGVjdGVkIGZpbmFsIGxvbmcgcGFyc2VfcGFyYW0yO1wkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICpwcm90ZWN0ZWQgZmluYWwgbG9uZyBwYXJzZV9wYXJhbTI7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NjE0IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKnByb3RlY3RlZCBmaW5hbCBsb25nIHBhcnNlX3BhcmFtMjskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjYxNTogZ3JlcCAtYyAnXiAqcHVibGljIFlZUGFyc2VyIChjaGFyIGxleF9wYXJhbTEsICpzaG9ydCBsZXhfcGFyYW0yLCAqaW50IHBhcnNlX3BhcmFtMSwgKmxvbmcgcGFyc2VfcGFyYW0yKSB7XCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnB1YmxpYyBZWVBhcnNlciAoY2hhciBsZXhfcGFyYW0xLCAqc2hvcnQgbGV4X3BhcmFtMiwgKmludCBwYXJzZV9wYXJhbTEsICpsb25nIHBhcnNlX3BhcmFtMikgeyQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjYxNSIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwdWJsaWMgWVlQYXJzZXIgKGNoYXIgbGV4X3BhcmFtMSwgKnNob3J0IGxleF9wYXJhbTIsICppbnQgcGFyc2VfcGFyYW0xLCAqbG9uZyBwYXJzZV9wYXJhbTIpIHskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2MTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjYxNjogZ3JlcCAtYyAnXi4qID0gbmV3IFlZTGV4ZXIgKihsZXhfcGFyYW0xLCAqbGV4X3BhcmFtMik7XCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14uKiA9IG5ldyBZWUxleGVyICoobGV4X3BhcmFtMSwgKmxleF9wYXJhbTIpOyQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjYxNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeLiogPSBuZXcgWVlMZXhlciAqKGxleF9wYXJhbTEsICpsZXhfcGFyYW0yKTskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjYxNzogZ3JlcCAtYyAnXiAqcHJvdGVjdGVkIFlZUGFyc2VyIChMZXhlciB5eWxleGVyLCAqaW50IHBhcnNlX3BhcmFtMSwgKmxvbmcgcGFyc2VfcGFyYW0yKSB7XCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnByb3RlY3RlZCBZWVBhcnNlciAoTGV4ZXIgeXlsZXhlciwgKmludCBwYXJzZV9wYXJhbTEsICpsb25nIHBhcnNlX3BhcmFtMikgeyQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjYxNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwcm90ZWN0ZWQgWVlQYXJzZXIgKExleGVyIHl5bGV4ZXIsICppbnQgcGFyc2VfcGFyYW0xLCAqbG9uZyBwYXJzZV9wYXJhbTIpIHskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2MTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjYxODogZ3JlcCAtYyAnXlsJIF0qdGhpcy5wYXJzZV9wYXJhbTEgPSBwYXJzZV9wYXJhbTE7XCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ15bCSBdKnRoaXMucGFyc2VfcGFyYW0xID0gcGFyc2VfcGFyYW0xOyQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjYxOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeWwkgXSp0aGlzLnBhcnNlX3BhcmFtMSA9IHBhcnNlX3BhcmFtMTskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2MTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjYxOTogZ3JlcCAtYyAnXlsJIF0qdGhpcy5wYXJzZV9wYXJhbTIgPSBwYXJzZV9wYXJhbTI7XCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ15bCSBdKnRoaXMucGFyc2VfcGFyYW0yID0gcGFyc2VfcGFyYW0yOyQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjYxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeWwkgXSp0aGlzLnBhcnNlX3BhcmFtMiA9IHBhcnNlX3BhcmFtMjskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8zMTgKKyNBVF9TVEFSVF8zMTkKK2F0X2ZuX2dyb3VwX2Jhbm5lciAzMTkgJ2phdmEuYXQ6NjI4JyBcCisgICJKYXZhIHRocm93cyBzcGVjaWZpY2F0aW9ucyIgIiAgICAgICAgICAgICAgICAgICAgICIgMjAKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIzMTkuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisjICVkZWZpbmUgdGhyb3dzCS0gMCAxIDIKKyMgJWRlZmluZSBsZXgtdGhyb3dzCS0gMCAxIDIKKyMgJWNvZGUgbGV4ZXIJCSAgMCAxCiAKIAogCkBAIC01OTc3MCwyMiArMTYyMjI1LDY5NDQgQEAKIAogCiAKKworCisKKworCisKKworCisKK2NhdCA+WVlQYXJzZXIueSA8PCdfQVRFT0YnCisKKyVsYW5ndWFnZSAiSmF2YSIKKyVsb2NhdGlvbnMKKyVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKyV0b2tlbi10YWJsZQorCisKKworCislJQorc3RhcnQ6ICJlbmQiIHt9OworJSUKK2NsYXNzIFBvc2l0aW9uIHt9CitfQVRFT0YKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBiaXNvbiBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwICdbbWJdNF8nIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwICdbbWJdNF8nIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworJGFzX2VjaG8gImphdmEuYXQ6Njg4IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQUMiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXNfZWNobyAiamF2YS5hdDo2ODgiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKmludCB5eWxleCAoKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiAqO1wkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICppbnQgeXlsZXggKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gKjskJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uICo7JCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgKlwkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopICokJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSAqJCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKnB1YmxpYyBib29sZWFuIHBhcnNlICgpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uICpcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiAqJCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK2NhdCA+WVlQYXJzZXIueSA8PCdfQVRFT0YnCisKKyVsYW5ndWFnZSAiSmF2YSIKKyVsb2NhdGlvbnMKKyVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKyV0b2tlbi10YWJsZQorCislZGVmaW5lIHRocm93cyAiIgorCisKKyUlCitzdGFydDogImVuZCIge307CislJQorY2xhc3MgUG9zaXRpb24ge30KK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGJpc29uIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCiskYXNfZWNobyAiamF2YS5hdDo2ODgiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBQyIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhc19lY2hvICJqYXZhLmF0OjY4OCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkEiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uICo7XCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKmludCB5eWxleCAoKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiAqOyQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICppbnQgeXlsZXggKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gKjskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSAqXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgKiQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopICokJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gKlwkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiAqJCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKnB1YmxpYyBib29sZWFuIHBhcnNlICgpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5ZWVBhcnNlci55IDw8J19BVEVPRicKKworJWxhbmd1YWdlICJKYXZhIgorJWxvY2F0aW9ucworJWRlYnVnCislZXJyb3ItdmVyYm9zZQorJXRva2VuLXRhYmxlCisKKyVkZWZpbmUgdGhyb3dzICJDbGFzc05vdEZvdW5kRXhjZXB0aW9uIgorCislaW5pdGlhbC1hY3Rpb24ge2lmICh0cnVlKSB0aHJvdyBuZXcgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbigpO30KKyUlCitzdGFydDogImVuZCIge3Rocm93IG5ldyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uKCk7fTsKKyUlCitjbGFzcyBQb3NpdGlvbiB7fQorX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyRhc19lY2hvICJqYXZhLmF0OjY4OCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGFzX2VjaG8gImphdmEuYXQ6Njg4IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICppbnQgeXlsZXggKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gKjtcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uICo7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKmludCB5eWxleCAoKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiAqOyQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uICpcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiAqJCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiAqXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnB1YmxpYyBib29sZWFuIHBhcnNlICgpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sIENsYXNzTm90Rm91bmRFeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCitjYXQgPllZUGFyc2VyLnkgPDwnX0FURU9GJworCislbGFuZ3VhZ2UgIkphdmEiCislbG9jYXRpb25zCislZGVidWcKKyVlcnJvci12ZXJib3NlCisldG9rZW4tdGFibGUKKworJWRlZmluZSB0aHJvd3MgIkNsYXNzTm90Rm91bmRFeGNlcHRpb24sIEluc3RhbnRpYXRpb25FeGNlcHRpb24iCisKKyVpbml0aWFsLWFjdGlvbiB7aWYgKHRydWUpIHRocm93IG5ldyBJbnN0YW50aWF0aW9uRXhjZXB0aW9uKCk7fQorJSUKK3N0YXJ0OiAiZW5kIiB7dGhyb3cgbmV3IENsYXNzTm90Rm91bmRFeGNlcHRpb24oKTt9OworJSUKK2NsYXNzIFBvc2l0aW9uIHt9CitfQVRFT0YKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBiaXNvbiBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwICdbbWJdNF8nIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwICdbbWJdNF8nIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworJGFzX2VjaG8gImphdmEuYXQ6Njg4IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQUMiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXNfZWNobyAiamF2YS5hdDo2ODgiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKmludCB5eWxleCAoKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiAqO1wkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICppbnQgeXlsZXggKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gKjskJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uICo7JCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24sIEluc3RhbnRpYXRpb25FeGNlcHRpb24gKlwkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiwgSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiAqJCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKnB1YmxpYyBib29sZWFuIHBhcnNlICgpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uICpcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sIENsYXNzTm90Rm91bmRFeGNlcHRpb24sIEluc3RhbnRpYXRpb25FeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiwgSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiAqJCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK2NhdCA+WVlQYXJzZXIueSA8PCdfQVRFT0YnCisKKyVsYW5ndWFnZSAiSmF2YSIKKyVsb2NhdGlvbnMKKyVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKyV0b2tlbi10YWJsZQorCisKKyVkZWZpbmUgbGV4X3Rocm93cyAiIgorCislJQorc3RhcnQ6ICJlbmQiIHt9OworJSUKK2NsYXNzIFBvc2l0aW9uIHt9CitfQVRFT0YKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBiaXNvbiBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwICdbbWJdNF8nIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwICdbbWJdNF8nIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworJGFzX2VjaG8gImphdmEuYXQ6Njg4IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQUMiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXNfZWNobyAiamF2YS5hdDo2ODgiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKmludCB5eWxleCAoKSAqO1wkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICppbnQgeXlsZXggKCkgKjskJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpICo7JCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgKlwkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopICokJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSAqJCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKnB1YmxpYyBib29sZWFuIHBhcnNlICgpICpcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgKiQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSAqJCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK2NhdCA+WVlQYXJzZXIueSA8PCdfQVRFT0YnCisKKyVsYW5ndWFnZSAiSmF2YSIKKyVsb2NhdGlvbnMKKyVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKyV0b2tlbi10YWJsZQorCislZGVmaW5lIHRocm93cyAiIgorJWRlZmluZSBsZXhfdGhyb3dzICIiCisKKyUlCitzdGFydDogImVuZCIge307CislJQorY2xhc3MgUG9zaXRpb24ge30KK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGJpc29uIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCiskYXNfZWNobyAiamF2YS5hdDo2ODgiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBQyIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhc19lY2hvICJqYXZhLmF0OjY4OCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkEiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpICo7XCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKmludCB5eWxleCAoKSAqOyQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICppbnQgeXlsZXggKCkgKjskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSAqXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgKiQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopICokJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgKlwkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSAqJCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKnB1YmxpYyBib29sZWFuIHBhcnNlICgpICokJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5ZWVBhcnNlci55IDw8J19BVEVPRicKKworJWxhbmd1YWdlICJKYXZhIgorJWxvY2F0aW9ucworJWRlYnVnCislZXJyb3ItdmVyYm9zZQorJXRva2VuLXRhYmxlCisKKyVkZWZpbmUgdGhyb3dzICJDbGFzc05vdEZvdW5kRXhjZXB0aW9uIgorJWRlZmluZSBsZXhfdGhyb3dzICIiCislaW5pdGlhbC1hY3Rpb24ge2lmICh0cnVlKSB0aHJvdyBuZXcgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbigpO30KKyUlCitzdGFydDogImVuZCIge3Rocm93IG5ldyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uKCk7fTsKKyUlCitjbGFzcyBQb3NpdGlvbiB7fQorX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyRhc19lY2hvICJqYXZhLmF0OjY4OCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGFzX2VjaG8gImphdmEuYXQ6Njg4IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICppbnQgeXlsZXggKCkgKjtcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpICo7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKmludCB5eWxleCAoKSAqOyQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uICpcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiAqJCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiAqXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnB1YmxpYyBib29sZWFuIHBhcnNlICgpIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCitjYXQgPllZUGFyc2VyLnkgPDwnX0FURU9GJworCislbGFuZ3VhZ2UgIkphdmEiCislbG9jYXRpb25zCislZGVidWcKKyVlcnJvci12ZXJib3NlCisldG9rZW4tdGFibGUKKworJWRlZmluZSB0aHJvd3MgIkNsYXNzTm90Rm91bmRFeGNlcHRpb24sIEluc3RhbnRpYXRpb25FeGNlcHRpb24iCislZGVmaW5lIGxleF90aHJvd3MgIiIKKyVpbml0aWFsLWFjdGlvbiB7aWYgKHRydWUpIHRocm93IG5ldyBJbnN0YW50aWF0aW9uRXhjZXB0aW9uKCk7fQorJSUKK3N0YXJ0OiAiZW5kIiB7dGhyb3cgbmV3IENsYXNzTm90Rm91bmRFeGNlcHRpb24oKTt9OworJSUKK2NsYXNzIFBvc2l0aW9uIHt9CitfQVRFT0YKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBiaXNvbiBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwICdbbWJdNF8nIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwICdbbWJdNF8nIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworJGFzX2VjaG8gImphdmEuYXQ6Njg4IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQUMiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXNfZWNobyAiamF2YS5hdDo2ODgiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKmludCB5eWxleCAoKSAqO1wkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICppbnQgeXlsZXggKCkgKjskJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpICo7JCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24sIEluc3RhbnRpYXRpb25FeGNlcHRpb24gKlwkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiwgSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiAqJCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKnB1YmxpYyBib29sZWFuIHBhcnNlICgpIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uICpcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24sIEluc3RhbnRpYXRpb25FeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiwgSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiAqJCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK2NhdCA+WVlQYXJzZXIueSA8PCdfQVRFT0YnCisKKyVsYW5ndWFnZSAiSmF2YSIKKyVsb2NhdGlvbnMKKyVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKyV0b2tlbi10YWJsZQorCisKKyVkZWZpbmUgbGV4X3Rocm93cyAiSW50ZXJydXB0ZWRFeGNlcHRpb24iCisKKyUlCitzdGFydDogImVuZCIge307CislJQorY2xhc3MgUG9zaXRpb24ge30KK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGJpc29uIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCiskYXNfZWNobyAiamF2YS5hdDo2ODgiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBQyIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhc19lY2hvICJqYXZhLmF0OjY4OCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkEiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiAqO1wkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICppbnQgeXlsZXggKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uICo7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKmludCB5eWxleCAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gKjskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSAqXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgKiQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopICokJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uICpcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5ZWVBhcnNlci55IDw8J19BVEVPRicKKworJWxhbmd1YWdlICJKYXZhIgorJWxvY2F0aW9ucworJWRlYnVnCislZXJyb3ItdmVyYm9zZQorJXRva2VuLXRhYmxlCisKKyVkZWZpbmUgdGhyb3dzICIiCislZGVmaW5lIGxleF90aHJvd3MgIkludGVycnVwdGVkRXhjZXB0aW9uIgorCislJQorc3RhcnQ6ICJlbmQiIHt9OworJSUKK2NsYXNzIFBvc2l0aW9uIHt9CitfQVRFT0YKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBiaXNvbiBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwICdbbWJdNF8nIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwICdbbWJdNF8nIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworJGFzX2VjaG8gImphdmEuYXQ6Njg4IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQUMiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXNfZWNobyAiamF2YS5hdDo2ODgiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKmludCB5eWxleCAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gKjtcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiAqOyQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICppbnQgeXlsZXggKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uICo7JCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgKlwkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopICokJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSAqJCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKnB1YmxpYyBib29sZWFuIHBhcnNlICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiAqXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnB1YmxpYyBib29sZWFuIHBhcnNlICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiAqJCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKnB1YmxpYyBib29sZWFuIHBhcnNlICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiAqJCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK2NhdCA+WVlQYXJzZXIueSA8PCdfQVRFT0YnCisKKyVsYW5ndWFnZSAiSmF2YSIKKyVsb2NhdGlvbnMKKyVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKyV0b2tlbi10YWJsZQorCislZGVmaW5lIHRocm93cyAiQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiIKKyVkZWZpbmUgbGV4X3Rocm93cyAiSW50ZXJydXB0ZWRFeGNlcHRpb24iCislaW5pdGlhbC1hY3Rpb24ge2lmICh0cnVlKSB0aHJvdyBuZXcgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbigpO30KKyUlCitzdGFydDogImVuZCIge3Rocm93IG5ldyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uKCk7fTsKKyUlCitjbGFzcyBQb3NpdGlvbiB7fQorX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyRhc19lY2hvICJqYXZhLmF0OjY4OCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGFzX2VjaG8gImphdmEuYXQ6Njg4IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICppbnQgeXlsZXggKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uICo7XCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKmludCB5eWxleCAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gKjskJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiAqOyQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uICpcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiAqJCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIENsYXNzTm90Rm91bmRFeGNlcHRpb24gKlwkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIENsYXNzTm90Rm91bmRFeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIENsYXNzTm90Rm91bmRFeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCitjYXQgPllZUGFyc2VyLnkgPDwnX0FURU9GJworCislbGFuZ3VhZ2UgIkphdmEiCislbG9jYXRpb25zCislZGVidWcKKyVlcnJvci12ZXJib3NlCisldG9rZW4tdGFibGUKKworJWRlZmluZSB0aHJvd3MgIkNsYXNzTm90Rm91bmRFeGNlcHRpb24sIEluc3RhbnRpYXRpb25FeGNlcHRpb24iCislZGVmaW5lIGxleF90aHJvd3MgIkludGVycnVwdGVkRXhjZXB0aW9uIgorJWluaXRpYWwtYWN0aW9uIHtpZiAodHJ1ZSkgdGhyb3cgbmV3IEluc3RhbnRpYXRpb25FeGNlcHRpb24oKTt9CislJQorc3RhcnQ6ICJlbmQiIHt0aHJvdyBuZXcgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbigpO307CislJQorY2xhc3MgUG9zaXRpb24ge30KK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGJpc29uIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCiskYXNfZWNobyAiamF2YS5hdDo2ODgiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBQyIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhc19lY2hvICJqYXZhLmF0OjY4OCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkEiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiAqO1wkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICppbnQgeXlsZXggKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uICo7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKmludCB5eWxleCAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gKjskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiwgSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiAqXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24sIEluc3RhbnRpYXRpb25FeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uICpcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5ZWVBhcnNlci55IDw8J19BVEVPRicKKworJWxhbmd1YWdlICJKYXZhIgorJWxvY2F0aW9ucworJWRlYnVnCislZXJyb3ItdmVyYm9zZQorJXRva2VuLXRhYmxlCisKKworJWRlZmluZSBsZXhfdGhyb3dzICJJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiIKKworJSUKK3N0YXJ0OiAiZW5kIiB7fTsKKyUlCitjbGFzcyBQb3NpdGlvbiB7fQorX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyRhc19lY2hvICJqYXZhLmF0OjY4OCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGFzX2VjaG8gImphdmEuYXQ6Njg4IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICppbnQgeXlsZXggKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uICo7XCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKmludCB5eWxleCAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gKjskJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiAqOyQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopICpcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSAqJCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgKiQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gKlwkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCitjYXQgPllZUGFyc2VyLnkgPDwnX0FURU9GJworCislbGFuZ3VhZ2UgIkphdmEiCislbG9jYXRpb25zCislZGVidWcKKyVlcnJvci12ZXJib3NlCisldG9rZW4tdGFibGUKKworJWRlZmluZSB0aHJvd3MgIiIKKyVkZWZpbmUgbGV4X3Rocm93cyAiSW50ZXJydXB0ZWRFeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24iCisKKyUlCitzdGFydDogImVuZCIge307CislJQorY2xhc3MgUG9zaXRpb24ge30KK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGJpc29uIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCiskYXNfZWNobyAiamF2YS5hdDo2ODgiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBQyIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhc19lY2hvICJqYXZhLmF0OjY4OCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkEiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiAqO1wkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICppbnQgeXlsZXggKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uICo7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKmludCB5eWxleCAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gKjskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSAqXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgKiQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopICokJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uICpcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5ZWVBhcnNlci55IDw8J19BVEVPRicKKworJWxhbmd1YWdlICJKYXZhIgorJWxvY2F0aW9ucworJWRlYnVnCislZXJyb3ItdmVyYm9zZQorJXRva2VuLXRhYmxlCisKKyVkZWZpbmUgdGhyb3dzICJDbGFzc05vdEZvdW5kRXhjZXB0aW9uIgorJWRlZmluZSBsZXhfdGhyb3dzICJJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiIKKyVpbml0aWFsLWFjdGlvbiB7aWYgKHRydWUpIHRocm93IG5ldyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uKCk7fQorJSUKK3N0YXJ0OiAiZW5kIiB7dGhyb3cgbmV3IENsYXNzTm90Rm91bmRFeGNlcHRpb24oKTt9OworJSUKK2NsYXNzIFBvc2l0aW9uIHt9CitfQVRFT0YKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBiaXNvbiBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwICdbbWJdNF8nIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwICdbbWJdNF8nIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworJGFzX2VjaG8gImphdmEuYXQ6Njg4IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQUMiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXNfZWNobyAiamF2YS5hdDo2ODgiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKmludCB5eWxleCAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gKjtcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiAqOyQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICppbnQgeXlsZXggKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uICo7JCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24gKlwkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiAqJCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKnB1YmxpYyBib29sZWFuIHBhcnNlICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiwgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiAqXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnB1YmxpYyBib29sZWFuIHBhcnNlICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiwgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiAqJCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKnB1YmxpYyBib29sZWFuIHBhcnNlICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiwgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiAqJCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK2NhdCA+WVlQYXJzZXIueSA8PCdfQVRFT0YnCisKKyVsYW5ndWFnZSAiSmF2YSIKKyVsb2NhdGlvbnMKKyVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKyV0b2tlbi10YWJsZQorCislZGVmaW5lIHRocm93cyAiQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiwgSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiIKKyVkZWZpbmUgbGV4X3Rocm93cyAiSW50ZXJydXB0ZWRFeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24iCislaW5pdGlhbC1hY3Rpb24ge2lmICh0cnVlKSB0aHJvdyBuZXcgSW5zdGFudGlhdGlvbkV4Y2VwdGlvbigpO30KKyUlCitzdGFydDogImVuZCIge3Rocm93IG5ldyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uKCk7fTsKKyUlCitjbGFzcyBQb3NpdGlvbiB7fQorX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyRhc19lY2hvICJqYXZhLmF0OjY4OCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGFzX2VjaG8gImphdmEuYXQ6Njg4IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICppbnQgeXlsZXggKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uICo7XCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKmludCB5eWxleCAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gKjskJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiAqOyQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uICpcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiwgSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiAqJCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24sIEluc3RhbnRpYXRpb25FeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24sIENsYXNzTm90Rm91bmRFeGNlcHRpb24sIEluc3RhbnRpYXRpb25FeGNlcHRpb24gKlwkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24sIENsYXNzTm90Rm91bmRFeGNlcHRpb24sIEluc3RhbnRpYXRpb25FeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24sIENsYXNzTm90Rm91bmRFeGNlcHRpb24sIEluc3RhbnRpYXRpb25FeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCitjYXQgPllZUGFyc2VyLnkgPDwnX0FURU9GJworCislbGFuZ3VhZ2UgIkphdmEiCislbG9jYXRpb25zCislZGVidWcKKyVlcnJvci12ZXJib3NlCisldG9rZW4tdGFibGUKKworCisKKworCislY29kZSBsZXhlcgoreworICBPYmplY3QgeXlsdmFsOworICBwdWJsaWMgT2JqZWN0IGdldExWYWwoKSB7IHJldHVybiB5eWx2YWw7IH0KKworICBwdWJsaWMgUG9zaXRpb24gZ2V0U3RhcnRQb3MoKSB7IHJldHVybiBudWxsOyB9CisgIHB1YmxpYyBQb3NpdGlvbiBnZXRFbmRQb3MoKSAgIHsgcmV0dXJuIG51bGw7IH0KKworICBwdWJsaWMgdm9pZCB5eWVycm9yIChMb2NhdGlvbiBsb2MsIFN0cmluZyBzKQorICB7CisgICAgU3lzdGVtLmVyci5wcmludGxuIChsb2MgKyAiOiAiICsgcyk7CisgIH0KKworICBwdWJsaWMgaW50IHl5bGV4ICgpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uCisgIHsKKyAgICB0aHJvdyBuZXcgamF2YS5pby5JT0V4Y2VwdGlvbigpOworICB9CisKKworfQorJSUKK3N0YXJ0OiAiZW5kIiB7fTsKKyUlCitjbGFzcyBQb3NpdGlvbiB7fQorX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyRhc19lY2hvICJqYXZhLmF0OjY4OCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGFzX2VjaG8gImphdmEuYXQ6Njg4IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICppbnQgeXlsZXggKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gKjtcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uICo7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKmludCB5eWxleCAoKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiAqOyQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopICpcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSAqJCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgKiQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiAqXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnB1YmxpYyBib29sZWFuIHBhcnNlICgpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCitjYXQgPllZUGFyc2VyLnkgPDwnX0FURU9GJworCislbGFuZ3VhZ2UgIkphdmEiCislbG9jYXRpb25zCislZGVidWcKKyVlcnJvci12ZXJib3NlCisldG9rZW4tdGFibGUKKworJWRlZmluZSB0aHJvd3MgIiIKKworCisKKyVjb2RlIGxleGVyCit7CisgIE9iamVjdCB5eWx2YWw7CisgIHB1YmxpYyBPYmplY3QgZ2V0TFZhbCgpIHsgcmV0dXJuIHl5bHZhbDsgfQorCisgIHB1YmxpYyBQb3NpdGlvbiBnZXRTdGFydFBvcygpIHsgcmV0dXJuIG51bGw7IH0KKyAgcHVibGljIFBvc2l0aW9uIGdldEVuZFBvcygpICAgeyByZXR1cm4gbnVsbDsgfQorCisgIHB1YmxpYyB2b2lkIHl5ZXJyb3IgKExvY2F0aW9uIGxvYywgU3RyaW5nIHMpCisgIHsKKyAgICBTeXN0ZW0uZXJyLnByaW50bG4gKGxvYyArICI6ICIgKyBzKTsKKyAgfQorCisgIHB1YmxpYyBpbnQgeXlsZXggKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24KKyAgeworICAgIHRocm93IG5ldyBqYXZhLmlvLklPRXhjZXB0aW9uKCk7CisgIH0KKworCit9CislJQorc3RhcnQ6ICJlbmQiIHt9OworJSUKK2NsYXNzIFBvc2l0aW9uIHt9CitfQVRFT0YKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBiaXNvbiBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwICdbbWJdNF8nIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwICdbbWJdNF8nIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworJGFzX2VjaG8gImphdmEuYXQ6Njg4IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQUMiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXNfZWNobyAiamF2YS5hdDo2ODgiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKmludCB5eWxleCAoKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiAqO1wkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICppbnQgeXlsZXggKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gKjskJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uICo7JCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgKlwkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopICokJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSAqJCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKnB1YmxpYyBib29sZWFuIHBhcnNlICgpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uICpcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiAqJCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK2NhdCA+WVlQYXJzZXIueSA8PCdfQVRFT0YnCisKKyVsYW5ndWFnZSAiSmF2YSIKKyVsb2NhdGlvbnMKKyVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKyV0b2tlbi10YWJsZQorCislZGVmaW5lIHRocm93cyAiQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiIKKworJWluaXRpYWwtYWN0aW9uIHtpZiAodHJ1ZSkgdGhyb3cgbmV3IENsYXNzTm90Rm91bmRFeGNlcHRpb24oKTt9CisKKyVjb2RlIGxleGVyCit7CisgIE9iamVjdCB5eWx2YWw7CisgIHB1YmxpYyBPYmplY3QgZ2V0TFZhbCgpIHsgcmV0dXJuIHl5bHZhbDsgfQorCisgIHB1YmxpYyBQb3NpdGlvbiBnZXRTdGFydFBvcygpIHsgcmV0dXJuIG51bGw7IH0KKyAgcHVibGljIFBvc2l0aW9uIGdldEVuZFBvcygpICAgeyByZXR1cm4gbnVsbDsgfQorCisgIHB1YmxpYyB2b2lkIHl5ZXJyb3IgKExvY2F0aW9uIGxvYywgU3RyaW5nIHMpCisgIHsKKyAgICBTeXN0ZW0uZXJyLnByaW50bG4gKGxvYyArICI6ICIgKyBzKTsKKyAgfQorCisgIHB1YmxpYyBpbnQgeXlsZXggKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24KKyAgeworICAgIHRocm93IG5ldyBqYXZhLmlvLklPRXhjZXB0aW9uKCk7CisgIH0KKworCit9CislJQorc3RhcnQ6ICJlbmQiIHt0aHJvdyBuZXcgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbigpO307CislJQorY2xhc3MgUG9zaXRpb24ge30KK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGJpc29uIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCiskYXNfZWNobyAiamF2YS5hdDo2ODgiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBQyIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhc19lY2hvICJqYXZhLmF0OjY4OCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkEiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uICo7XCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKmludCB5eWxleCAoKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiAqOyQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICppbnQgeXlsZXggKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gKjskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiAqXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sIENsYXNzTm90Rm91bmRFeGNlcHRpb24gKlwkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiAqJCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKnB1YmxpYyBib29sZWFuIHBhcnNlICgpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5ZWVBhcnNlci55IDw8J19BVEVPRicKKworJWxhbmd1YWdlICJKYXZhIgorJWxvY2F0aW9ucworJWRlYnVnCislZXJyb3ItdmVyYm9zZQorJXRva2VuLXRhYmxlCisKKyVkZWZpbmUgdGhyb3dzICJDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uIgorCislaW5pdGlhbC1hY3Rpb24ge2lmICh0cnVlKSB0aHJvdyBuZXcgSW5zdGFudGlhdGlvbkV4Y2VwdGlvbigpO30KKworJWNvZGUgbGV4ZXIKK3sKKyAgT2JqZWN0IHl5bHZhbDsKKyAgcHVibGljIE9iamVjdCBnZXRMVmFsKCkgeyByZXR1cm4geXlsdmFsOyB9CisKKyAgcHVibGljIFBvc2l0aW9uIGdldFN0YXJ0UG9zKCkgeyByZXR1cm4gbnVsbDsgfQorICBwdWJsaWMgUG9zaXRpb24gZ2V0RW5kUG9zKCkgICB7IHJldHVybiBudWxsOyB9CisKKyAgcHVibGljIHZvaWQgeXllcnJvciAoTG9jYXRpb24gbG9jLCBTdHJpbmcgcykKKyAgeworICAgIFN5c3RlbS5lcnIucHJpbnRsbiAobG9jICsgIjogIiArIHMpOworICB9CisKKyAgcHVibGljIGludCB5eWxleCAoKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbgorICB7CisgICAgdGhyb3cgbmV3IGphdmEuaW8uSU9FeGNlcHRpb24oKTsKKyAgfQorCisKK30KKyUlCitzdGFydDogImVuZCIge3Rocm93IG5ldyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uKCk7fTsKKyUlCitjbGFzcyBQb3NpdGlvbiB7fQorX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyRhc19lY2hvICJqYXZhLmF0OjY4OCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGFzX2VjaG8gImphdmEuYXQ6Njg4IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICppbnQgeXlsZXggKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gKjtcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uICo7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKmludCB5eWxleCAoKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiAqOyQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uICpcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiwgSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiAqJCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24sIEluc3RhbnRpYXRpb25FeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiwgSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiAqXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnB1YmxpYyBib29sZWFuIHBhcnNlICgpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sIENsYXNzTm90Rm91bmRFeGNlcHRpb24sIEluc3RhbnRpYXRpb25FeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCitjYXQgPllZUGFyc2VyLnkgPDwnX0FURU9GJworCislbGFuZ3VhZ2UgIkphdmEiCislbG9jYXRpb25zCislZGVidWcKKyVlcnJvci12ZXJib3NlCisldG9rZW4tdGFibGUKKworCislZGVmaW5lIGxleF90aHJvd3MgIiIKKworCislY29kZSBsZXhlcgoreworICBPYmplY3QgeXlsdmFsOworICBwdWJsaWMgT2JqZWN0IGdldExWYWwoKSB7IHJldHVybiB5eWx2YWw7IH0KKworICBwdWJsaWMgUG9zaXRpb24gZ2V0U3RhcnRQb3MoKSB7IHJldHVybiBudWxsOyB9CisgIHB1YmxpYyBQb3NpdGlvbiBnZXRFbmRQb3MoKSAgIHsgcmV0dXJuIG51bGw7IH0KKworICBwdWJsaWMgdm9pZCB5eWVycm9yIChMb2NhdGlvbiBsb2MsIFN0cmluZyBzKQorICB7CisgICAgU3lzdGVtLmVyci5wcmludGxuIChsb2MgKyAiOiAiICsgcyk7CisgIH0KKworICBwdWJsaWMgaW50IHl5bGV4ICgpCisgIHsKKyAgICByZXR1cm4gRU9GOworICB9CisKKworfQorJSUKK3N0YXJ0OiAiZW5kIiB7fTsKKyUlCitjbGFzcyBQb3NpdGlvbiB7fQorX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyRhc19lY2hvICJqYXZhLmF0OjY4OCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGFzX2VjaG8gImphdmEuYXQ6Njg4IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICppbnQgeXlsZXggKCkgKjtcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpICo7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKmludCB5eWxleCAoKSAqOyQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopICpcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSAqJCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgKiQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSAqXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnB1YmxpYyBib29sZWFuIHBhcnNlICgpICokJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgKiQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCitjYXQgPllZUGFyc2VyLnkgPDwnX0FURU9GJworCislbGFuZ3VhZ2UgIkphdmEiCislbG9jYXRpb25zCislZGVidWcKKyVlcnJvci12ZXJib3NlCisldG9rZW4tdGFibGUKKworJWRlZmluZSB0aHJvd3MgIiIKKyVkZWZpbmUgbGV4X3Rocm93cyAiIgorCisKKyVjb2RlIGxleGVyCit7CisgIE9iamVjdCB5eWx2YWw7CisgIHB1YmxpYyBPYmplY3QgZ2V0TFZhbCgpIHsgcmV0dXJuIHl5bHZhbDsgfQorCisgIHB1YmxpYyBQb3NpdGlvbiBnZXRTdGFydFBvcygpIHsgcmV0dXJuIG51bGw7IH0KKyAgcHVibGljIFBvc2l0aW9uIGdldEVuZFBvcygpICAgeyByZXR1cm4gbnVsbDsgfQorCisgIHB1YmxpYyB2b2lkIHl5ZXJyb3IgKExvY2F0aW9uIGxvYywgU3RyaW5nIHMpCisgIHsKKyAgICBTeXN0ZW0uZXJyLnByaW50bG4gKGxvYyArICI6ICIgKyBzKTsKKyAgfQorCisgIHB1YmxpYyBpbnQgeXlsZXggKCkKKyAgeworICAgIHJldHVybiBFT0Y7CisgIH0KKworCit9CislJQorc3RhcnQ6ICJlbmQiIHt9OworJSUKK2NsYXNzIFBvc2l0aW9uIHt9CitfQVRFT0YKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBiaXNvbiBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwICdbbWJdNF8nIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwICdbbWJdNF8nIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworJGFzX2VjaG8gImphdmEuYXQ6Njg4IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQUMiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXNfZWNobyAiamF2YS5hdDo2ODgiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKmludCB5eWxleCAoKSAqO1wkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICppbnQgeXlsZXggKCkgKjskJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpICo7JCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgKlwkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopICokJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSAqJCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKnB1YmxpYyBib29sZWFuIHBhcnNlICgpICpcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgKiQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSAqJCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK2NhdCA+WVlQYXJzZXIueSA8PCdfQVRFT0YnCisKKyVsYW5ndWFnZSAiSmF2YSIKKyVsb2NhdGlvbnMKKyVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKyV0b2tlbi10YWJsZQorCislZGVmaW5lIHRocm93cyAiQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiIKKyVkZWZpbmUgbGV4X3Rocm93cyAiIgorJWluaXRpYWwtYWN0aW9uIHtpZiAodHJ1ZSkgdGhyb3cgbmV3IENsYXNzTm90Rm91bmRFeGNlcHRpb24oKTt9CisKKyVjb2RlIGxleGVyCit7CisgIE9iamVjdCB5eWx2YWw7CisgIHB1YmxpYyBPYmplY3QgZ2V0TFZhbCgpIHsgcmV0dXJuIHl5bHZhbDsgfQorCisgIHB1YmxpYyBQb3NpdGlvbiBnZXRTdGFydFBvcygpIHsgcmV0dXJuIG51bGw7IH0KKyAgcHVibGljIFBvc2l0aW9uIGdldEVuZFBvcygpICAgeyByZXR1cm4gbnVsbDsgfQorCisgIHB1YmxpYyB2b2lkIHl5ZXJyb3IgKExvY2F0aW9uIGxvYywgU3RyaW5nIHMpCisgIHsKKyAgICBTeXN0ZW0uZXJyLnByaW50bG4gKGxvYyArICI6ICIgKyBzKTsKKyAgfQorCisgIHB1YmxpYyBpbnQgeXlsZXggKCkKKyAgeworICAgIHJldHVybiBFT0Y7CisgIH0KKworCit9CislJQorc3RhcnQ6ICJlbmQiIHt0aHJvdyBuZXcgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbigpO307CislJQorY2xhc3MgUG9zaXRpb24ge30KK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGJpc29uIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCiskYXNfZWNobyAiamF2YS5hdDo2ODgiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBQyIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhc19lY2hvICJqYXZhLmF0OjY4OCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkEiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpICo7XCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKmludCB5eWxleCAoKSAqOyQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICppbnQgeXlsZXggKCkgKjskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiAqXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24gKlwkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiAqJCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKnB1YmxpYyBib29sZWFuIHBhcnNlICgpIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5ZWVBhcnNlci55IDw8J19BVEVPRicKKworJWxhbmd1YWdlICJKYXZhIgorJWxvY2F0aW9ucworJWRlYnVnCislZXJyb3ItdmVyYm9zZQorJXRva2VuLXRhYmxlCisKKyVkZWZpbmUgdGhyb3dzICJDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uIgorJWRlZmluZSBsZXhfdGhyb3dzICIiCislaW5pdGlhbC1hY3Rpb24ge2lmICh0cnVlKSB0aHJvdyBuZXcgSW5zdGFudGlhdGlvbkV4Y2VwdGlvbigpO30KKworJWNvZGUgbGV4ZXIKK3sKKyAgT2JqZWN0IHl5bHZhbDsKKyAgcHVibGljIE9iamVjdCBnZXRMVmFsKCkgeyByZXR1cm4geXlsdmFsOyB9CisKKyAgcHVibGljIFBvc2l0aW9uIGdldFN0YXJ0UG9zKCkgeyByZXR1cm4gbnVsbDsgfQorICBwdWJsaWMgUG9zaXRpb24gZ2V0RW5kUG9zKCkgICB7IHJldHVybiBudWxsOyB9CisKKyAgcHVibGljIHZvaWQgeXllcnJvciAoTG9jYXRpb24gbG9jLCBTdHJpbmcgcykKKyAgeworICAgIFN5c3RlbS5lcnIucHJpbnRsbiAobG9jICsgIjogIiArIHMpOworICB9CisKKyAgcHVibGljIGludCB5eWxleCAoKQorICB7CisgICAgcmV0dXJuIEVPRjsKKyAgfQorCisKK30KKyUlCitzdGFydDogImVuZCIge3Rocm93IG5ldyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uKCk7fTsKKyUlCitjbGFzcyBQb3NpdGlvbiB7fQorX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyRhc19lY2hvICJqYXZhLmF0OjY4OCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGFzX2VjaG8gImphdmEuYXQ6Njg4IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICppbnQgeXlsZXggKCkgKjtcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpICo7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKmludCB5eWxleCAoKSAqOyQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uICpcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiwgSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiAqJCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24sIEluc3RhbnRpYXRpb25FeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiwgSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiAqXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnB1YmxpYyBib29sZWFuIHBhcnNlICgpIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24sIEluc3RhbnRpYXRpb25FeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCitjYXQgPllZUGFyc2VyLnkgPDwnX0FURU9GJworCislbGFuZ3VhZ2UgIkphdmEiCislbG9jYXRpb25zCislZGVidWcKKyVlcnJvci12ZXJib3NlCisldG9rZW4tdGFibGUKKworCislZGVmaW5lIGxleF90aHJvd3MgIkludGVycnVwdGVkRXhjZXB0aW9uIgorCisKKyVjb2RlIGxleGVyCit7CisgIE9iamVjdCB5eWx2YWw7CisgIHB1YmxpYyBPYmplY3QgZ2V0TFZhbCgpIHsgcmV0dXJuIHl5bHZhbDsgfQorCisgIHB1YmxpYyBQb3NpdGlvbiBnZXRTdGFydFBvcygpIHsgcmV0dXJuIG51bGw7IH0KKyAgcHVibGljIFBvc2l0aW9uIGdldEVuZFBvcygpICAgeyByZXR1cm4gbnVsbDsgfQorCisgIHB1YmxpYyB2b2lkIHl5ZXJyb3IgKExvY2F0aW9uIGxvYywgU3RyaW5nIHMpCisgIHsKKyAgICBTeXN0ZW0uZXJyLnByaW50bG4gKGxvYyArICI6ICIgKyBzKTsKKyAgfQorCisgIHB1YmxpYyBpbnQgeXlsZXggKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uCisgIHsKKyAgICB0aHJvdyBuZXcgSW50ZXJydXB0ZWRFeGNlcHRpb24oKTsKKyAgfQorCisKK30KKyUlCitzdGFydDogImVuZCIge307CislJQorY2xhc3MgUG9zaXRpb24ge30KK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGJpc29uIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCiskYXNfZWNobyAiamF2YS5hdDo2ODgiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBQyIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhc19lY2hvICJqYXZhLmF0OjY4OCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkEiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiAqO1wkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICppbnQgeXlsZXggKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uICo7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKmludCB5eWxleCAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gKjskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSAqXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgKiQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopICokJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uICpcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5ZWVBhcnNlci55IDw8J19BVEVPRicKKworJWxhbmd1YWdlICJKYXZhIgorJWxvY2F0aW9ucworJWRlYnVnCislZXJyb3ItdmVyYm9zZQorJXRva2VuLXRhYmxlCisKKyVkZWZpbmUgdGhyb3dzICIiCislZGVmaW5lIGxleF90aHJvd3MgIkludGVycnVwdGVkRXhjZXB0aW9uIgorCisKKyVjb2RlIGxleGVyCit7CisgIE9iamVjdCB5eWx2YWw7CisgIHB1YmxpYyBPYmplY3QgZ2V0TFZhbCgpIHsgcmV0dXJuIHl5bHZhbDsgfQorCisgIHB1YmxpYyBQb3NpdGlvbiBnZXRTdGFydFBvcygpIHsgcmV0dXJuIG51bGw7IH0KKyAgcHVibGljIFBvc2l0aW9uIGdldEVuZFBvcygpICAgeyByZXR1cm4gbnVsbDsgfQorCisgIHB1YmxpYyB2b2lkIHl5ZXJyb3IgKExvY2F0aW9uIGxvYywgU3RyaW5nIHMpCisgIHsKKyAgICBTeXN0ZW0uZXJyLnByaW50bG4gKGxvYyArICI6ICIgKyBzKTsKKyAgfQorCisgIHB1YmxpYyBpbnQgeXlsZXggKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uCisgIHsKKyAgICB0aHJvdyBuZXcgSW50ZXJydXB0ZWRFeGNlcHRpb24oKTsKKyAgfQorCisKK30KKyUlCitzdGFydDogImVuZCIge307CislJQorY2xhc3MgUG9zaXRpb24ge30KK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGJpc29uIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCiskYXNfZWNobyAiamF2YS5hdDo2ODgiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBQyIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhc19lY2hvICJqYXZhLmF0OjY4OCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkEiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiAqO1wkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICppbnQgeXlsZXggKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uICo7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKmludCB5eWxleCAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gKjskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSAqXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgKiQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopICokJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uICpcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5ZWVBhcnNlci55IDw8J19BVEVPRicKKworJWxhbmd1YWdlICJKYXZhIgorJWxvY2F0aW9ucworJWRlYnVnCislZXJyb3ItdmVyYm9zZQorJXRva2VuLXRhYmxlCisKKyVkZWZpbmUgdGhyb3dzICJDbGFzc05vdEZvdW5kRXhjZXB0aW9uIgorJWRlZmluZSBsZXhfdGhyb3dzICJJbnRlcnJ1cHRlZEV4Y2VwdGlvbiIKKyVpbml0aWFsLWFjdGlvbiB7aWYgKHRydWUpIHRocm93IG5ldyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uKCk7fQorCislY29kZSBsZXhlcgoreworICBPYmplY3QgeXlsdmFsOworICBwdWJsaWMgT2JqZWN0IGdldExWYWwoKSB7IHJldHVybiB5eWx2YWw7IH0KKworICBwdWJsaWMgUG9zaXRpb24gZ2V0U3RhcnRQb3MoKSB7IHJldHVybiBudWxsOyB9CisgIHB1YmxpYyBQb3NpdGlvbiBnZXRFbmRQb3MoKSAgIHsgcmV0dXJuIG51bGw7IH0KKworICBwdWJsaWMgdm9pZCB5eWVycm9yIChMb2NhdGlvbiBsb2MsIFN0cmluZyBzKQorICB7CisgICAgU3lzdGVtLmVyci5wcmludGxuIChsb2MgKyAiOiAiICsgcyk7CisgIH0KKworICBwdWJsaWMgaW50IHl5bGV4ICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbgorICB7CisgICAgdGhyb3cgbmV3IEludGVycnVwdGVkRXhjZXB0aW9uKCk7CisgIH0KKworCit9CislJQorc3RhcnQ6ICJlbmQiIHt0aHJvdyBuZXcgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbigpO307CislJQorY2xhc3MgUG9zaXRpb24ge30KK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGJpc29uIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCiskYXNfZWNobyAiamF2YS5hdDo2ODgiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBQyIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhc19lY2hvICJqYXZhLmF0OjY4OCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkEiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiAqO1wkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICppbnQgeXlsZXggKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uICo7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKmludCB5eWxleCAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gKjskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiAqXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uICpcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5ZWVBhcnNlci55IDw8J19BVEVPRicKKworJWxhbmd1YWdlICJKYXZhIgorJWxvY2F0aW9ucworJWRlYnVnCislZXJyb3ItdmVyYm9zZQorJXRva2VuLXRhYmxlCisKKyVkZWZpbmUgdGhyb3dzICJDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uIgorJWRlZmluZSBsZXhfdGhyb3dzICJJbnRlcnJ1cHRlZEV4Y2VwdGlvbiIKKyVpbml0aWFsLWFjdGlvbiB7aWYgKHRydWUpIHRocm93IG5ldyBJbnN0YW50aWF0aW9uRXhjZXB0aW9uKCk7fQorCislY29kZSBsZXhlcgoreworICBPYmplY3QgeXlsdmFsOworICBwdWJsaWMgT2JqZWN0IGdldExWYWwoKSB7IHJldHVybiB5eWx2YWw7IH0KKworICBwdWJsaWMgUG9zaXRpb24gZ2V0U3RhcnRQb3MoKSB7IHJldHVybiBudWxsOyB9CisgIHB1YmxpYyBQb3NpdGlvbiBnZXRFbmRQb3MoKSAgIHsgcmV0dXJuIG51bGw7IH0KKworICBwdWJsaWMgdm9pZCB5eWVycm9yIChMb2NhdGlvbiBsb2MsIFN0cmluZyBzKQorICB7CisgICAgU3lzdGVtLmVyci5wcmludGxuIChsb2MgKyAiOiAiICsgcyk7CisgIH0KKworICBwdWJsaWMgaW50IHl5bGV4ICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbgorICB7CisgICAgdGhyb3cgbmV3IEludGVycnVwdGVkRXhjZXB0aW9uKCk7CisgIH0KKworCit9CislJQorc3RhcnQ6ICJlbmQiIHt0aHJvdyBuZXcgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbigpO307CislJQorY2xhc3MgUG9zaXRpb24ge30KK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGJpc29uIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCiskYXNfZWNobyAiamF2YS5hdDo2ODgiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBQyIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhc19lY2hvICJqYXZhLmF0OjY4OCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkEiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiAqO1wkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICppbnQgeXlsZXggKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uICo7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKmludCB5eWxleCAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gKjskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiwgSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiAqXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24sIEluc3RhbnRpYXRpb25FeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uICpcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5ZWVBhcnNlci55IDw8J19BVEVPRicKKworJWxhbmd1YWdlICJKYXZhIgorJWxvY2F0aW9ucworJWRlYnVnCislZXJyb3ItdmVyYm9zZQorJXRva2VuLXRhYmxlCisKKworJWRlZmluZSBsZXhfdGhyb3dzICJJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiIKKworCislY29kZSBsZXhlcgoreworICBPYmplY3QgeXlsdmFsOworICBwdWJsaWMgT2JqZWN0IGdldExWYWwoKSB7IHJldHVybiB5eWx2YWw7IH0KKworICBwdWJsaWMgUG9zaXRpb24gZ2V0U3RhcnRQb3MoKSB7IHJldHVybiBudWxsOyB9CisgIHB1YmxpYyBQb3NpdGlvbiBnZXRFbmRQb3MoKSAgIHsgcmV0dXJuIG51bGw7IH0KKworICBwdWJsaWMgdm9pZCB5eWVycm9yIChMb2NhdGlvbiBsb2MsIFN0cmluZyBzKQorICB7CisgICAgU3lzdGVtLmVyci5wcmludGxuIChsb2MgKyAiOiAiICsgcyk7CisgIH0KKworICBwdWJsaWMgaW50IHl5bGV4ICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbgorICB7CisgICAgdGhyb3cgbmV3IElsbGVnYWxBY2Nlc3NFeGNlcHRpb24oKTsKKyAgfQorCisKK30KKyUlCitzdGFydDogImVuZCIge307CislJQorY2xhc3MgUG9zaXRpb24ge30KK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGJpc29uIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCiskYXNfZWNobyAiamF2YS5hdDo2ODgiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBQyIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhc19lY2hvICJqYXZhLmF0OjY4OCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkEiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiAqO1wkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICppbnQgeXlsZXggKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uICo7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKmludCB5eWxleCAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gKjskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSAqXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgKiQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopICokJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uICpcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworY2F0ID5ZWVBhcnNlci55IDw8J19BVEVPRicKKworJWxhbmd1YWdlICJKYXZhIgorJWxvY2F0aW9ucworJWRlYnVnCislZXJyb3ItdmVyYm9zZQorJXRva2VuLXRhYmxlCisKKyVkZWZpbmUgdGhyb3dzICIiCislZGVmaW5lIGxleF90aHJvd3MgIkludGVycnVwdGVkRXhjZXB0aW9uLCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIgorCisKKyVjb2RlIGxleGVyCit7CisgIE9iamVjdCB5eWx2YWw7CisgIHB1YmxpYyBPYmplY3QgZ2V0TFZhbCgpIHsgcmV0dXJuIHl5bHZhbDsgfQorCisgIHB1YmxpYyBQb3NpdGlvbiBnZXRTdGFydFBvcygpIHsgcmV0dXJuIG51bGw7IH0KKyAgcHVibGljIFBvc2l0aW9uIGdldEVuZFBvcygpICAgeyByZXR1cm4gbnVsbDsgfQorCisgIHB1YmxpYyB2b2lkIHl5ZXJyb3IgKExvY2F0aW9uIGxvYywgU3RyaW5nIHMpCisgIHsKKyAgICBTeXN0ZW0uZXJyLnByaW50bG4gKGxvYyArICI6ICIgKyBzKTsKKyAgfQorCisgIHB1YmxpYyBpbnQgeXlsZXggKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uCisgIHsKKyAgICB0aHJvdyBuZXcgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbigpOworICB9CisKKworfQorJSUKK3N0YXJ0OiAiZW5kIiB7fTsKKyUlCitjbGFzcyBQb3NpdGlvbiB7fQorX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyRhc19lY2hvICJqYXZhLmF0OjY4OCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGFzX2VjaG8gImphdmEuYXQ6Njg4IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICppbnQgeXlsZXggKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uICo7XCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKmludCB5eWxleCAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gKjskJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiAqOyQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopICpcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSAqJCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgKiQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gKlwkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwdWJsaWMgYm9vbGVhbiBwYXJzZSAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIxCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCitjYXQgPllZUGFyc2VyLnkgPDwnX0FURU9GJworCislbGFuZ3VhZ2UgIkphdmEiCislbG9jYXRpb25zCislZGVidWcKKyVlcnJvci12ZXJib3NlCisldG9rZW4tdGFibGUKKworJWRlZmluZSB0aHJvd3MgIkNsYXNzTm90Rm91bmRFeGNlcHRpb24iCislZGVmaW5lIGxleF90aHJvd3MgIkludGVycnVwdGVkRXhjZXB0aW9uLCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIgorJWluaXRpYWwtYWN0aW9uIHtpZiAodHJ1ZSkgdGhyb3cgbmV3IENsYXNzTm90Rm91bmRFeGNlcHRpb24oKTt9CisKKyVjb2RlIGxleGVyCit7CisgIE9iamVjdCB5eWx2YWw7CisgIHB1YmxpYyBPYmplY3QgZ2V0TFZhbCgpIHsgcmV0dXJuIHl5bHZhbDsgfQorCisgIHB1YmxpYyBQb3NpdGlvbiBnZXRTdGFydFBvcygpIHsgcmV0dXJuIG51bGw7IH0KKyAgcHVibGljIFBvc2l0aW9uIGdldEVuZFBvcygpICAgeyByZXR1cm4gbnVsbDsgfQorCisgIHB1YmxpYyB2b2lkIHl5ZXJyb3IgKExvY2F0aW9uIGxvYywgU3RyaW5nIHMpCisgIHsKKyAgICBTeXN0ZW0uZXJyLnByaW50bG4gKGxvYyArICI6ICIgKyBzKTsKKyAgfQorCisgIHB1YmxpYyBpbnQgeXlsZXggKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uCisgIHsKKyAgICB0aHJvdyBuZXcgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbigpOworICB9CisKKworfQorJSUKK3N0YXJ0OiAiZW5kIiB7dGhyb3cgbmV3IENsYXNzTm90Rm91bmRFeGNlcHRpb24oKTt9OworJSUKK2NsYXNzIFBvc2l0aW9uIHt9CitfQVRFT0YKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCitmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBiaXNvbiBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBncmVwICdbbWJdNF8nIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwICdbbWJdNF8nIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworJGFzX2VjaG8gImphdmEuYXQ6Njg4IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQUMiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXNfZWNobyAiamF2YS5hdDo2ODgiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKmludCB5eWxleCAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gKjtcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiAqOyQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICppbnQgeXlsZXggKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uICo7JCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24gKlwkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiAqJCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgLWMgJ14gKnB1YmxpYyBib29sZWFuIHBhcnNlICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiwgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiAqXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnB1YmxpYyBib29sZWFuIHBhcnNlICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiwgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiAqJCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKnB1YmxpYyBib29sZWFuIHBhcnNlICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiwgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiAqJCcgWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIjEKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKK2NhdCA+WVlQYXJzZXIueSA8PCdfQVRFT0YnCisKKyVsYW5ndWFnZSAiSmF2YSIKKyVsb2NhdGlvbnMKKyVkZWJ1ZworJWVycm9yLXZlcmJvc2UKKyV0b2tlbi10YWJsZQorCislZGVmaW5lIHRocm93cyAiQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiwgSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiIKKyVkZWZpbmUgbGV4X3Rocm93cyAiSW50ZXJydXB0ZWRFeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24iCislaW5pdGlhbC1hY3Rpb24ge2lmICh0cnVlKSB0aHJvdyBuZXcgSW5zdGFudGlhdGlvbkV4Y2VwdGlvbigpO30KKworJWNvZGUgbGV4ZXIKK3sKKyAgT2JqZWN0IHl5bHZhbDsKKyAgcHVibGljIE9iamVjdCBnZXRMVmFsKCkgeyByZXR1cm4geXlsdmFsOyB9CisKKyAgcHVibGljIFBvc2l0aW9uIGdldFN0YXJ0UG9zKCkgeyByZXR1cm4gbnVsbDsgfQorICBwdWJsaWMgUG9zaXRpb24gZ2V0RW5kUG9zKCkgICB7IHJldHVybiBudWxsOyB9CisKKyAgcHVibGljIHZvaWQgeXllcnJvciAoTG9jYXRpb24gbG9jLCBTdHJpbmcgcykKKyAgeworICAgIFN5c3RlbS5lcnIucHJpbnRsbiAobG9jICsgIjogIiArIHMpOworICB9CisKKyAgcHVibGljIGludCB5eWxleCAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24KKyAgeworICAgIHRocm93IG5ldyBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uKCk7CisgIH0KKworCit9CislJQorc3RhcnQ6ICJlbmQiIHt0aHJvdyBuZXcgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbigpO307CislJQorY2xhc3MgUG9zaXRpb24ge30KK19BVEVPRgorCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKK2ZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGJpc29uIFlZUGFyc2VyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ1ttYl00XycgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6Njg4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCiskYXNfZWNobyAiamF2YS5hdDo2ODgiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBQyIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4OCIKKyRhc19lY2hvICJqYXZhLmF0OjY4OCIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkEiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo2ODg6IFwkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqaW50IHl5bGV4ICgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiAqO1wkJyBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJncmVwIC1jICdeICppbnQgeXlsZXggKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uICo7JCcgWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6Njg4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgLWMgJ14gKmludCB5eWxleCAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gKjskJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqcHJpdmF0ZSBpbnQgeXlhY3Rpb24gKFteKV0qKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiwgSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiAqXCQnIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgImdyZXAgLWMgJ14gKnByaXZhdGUgaW50IHl5YWN0aW9uIChbXildKikgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24sIEluc3RhbnRpYXRpb25FeGNlcHRpb24gKiQnIFlZUGFyc2VyLmphdmEiICJqYXZhLmF0OjY4OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBncmVwIC1jICdeICpwcml2YXRlIGludCB5eWFjdGlvbiAoW14pXSopIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjY4ODogZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uICpcJCcgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo2ODgiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAtYyAnXiAqcHVibGljIGJvb2xlYW4gcGFyc2UgKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uICokJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo2ODgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzMxOQorI0FUX1NUQVJUXzMyMAorYXRfZm5fZ3JvdXBfYmFubmVyIDMyMCAnamF2YS5hdDo3MTcnIFwKKyAgIkphdmEgc3R5cGUsIHBvc2l0aW9uX2NsYXNzIGFuZCBsb2NhdGlvbl9jbGFzcyIgIiAgIiAyMAorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjMyMC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworY2F0ID5ZWVBhcnNlci55IDw8J19BVEVPRicKKworJWxhbmd1YWdlICJKYXZhIgorJWxvY2F0aW9ucworJWRlYnVnCislZXJyb3ItdmVyYm9zZQorJXRva2VuLXRhYmxlCisKKyVkZWZpbmUgc3R5cGUgImphdmEuYXd0LkNvbG9yIgorJXR5cGU8amF2YS5hd3QuQ29sb3I+IHN0YXJ0OworJWRlZmluZSBhcGkubG9jYXRpb24udHlwZSAiTXlMb2MiCislZGVmaW5lIGFwaS5wb3NpdGlvbi50eXBlICJNeVBvcyIKKyVjb2RlIHsgY2xhc3MgTXlQb3Mge30gfQorJSUKK3N0YXJ0OiAiZW5kIiB7JCQgPSAkPGphdmEuYXd0LkNvbG9yPjE7fTsKKyUlCitjbGFzcyBNeVBvcyB7fQorX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo3MTk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo3MTkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo3MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjcxOTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo3MTkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo3MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo3MTk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjcxOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjcxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NzE5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo3MTkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo3MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjcxOTogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NzE5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo3MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjcxOTogZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo3MTkiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo3MTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyRhc19lY2hvICJqYXZhLmF0OjcxOSIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6NzE5IgorJGFzX2VjaG8gImphdmEuYXQ6NzE5IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjcxOSIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjcxOTogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NzE5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjcxOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NzI1OiBncmVwICdqYXZhLmF3dC5Db2xvcicgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NzI1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ2phdmEuYXd0LkNvbG9yJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo3MjUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo3MjY6IFwkRUdSRVAgLXYgJyAqLz9cXConIFlZUGFyc2VyLmphdmEgfCBncmVwICdQb3NpdGlvbiciCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2Egc2hlbGwgcGlwZWxpbmUnICJqYXZhLmF0OjcyNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkRUdSRVAgLXYgJyAqLz9cKicgWVlQYXJzZXIuamF2YSB8IGdyZXAgJ1Bvc2l0aW9uJworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NzI2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NzI3OiBcJEVHUkVQIC12ICcgKi8/XFwqJyBZWVBhcnNlci5qYXZhIHwgZ3JlcCAnTG9jYXRpb24nIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIHNoZWxsIHBpcGVsaW5lJyAiamF2YS5hdDo3MjciCisoICRhdF9jaGVja190cmFjZTsgJEVHUkVQIC12ICcgKi8/XConIFlZUGFyc2VyLmphdmEgfCBncmVwICdMb2NhdGlvbicKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjcyNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCitjYXQgPllZUGFyc2VyLnkgPDwnX0FURU9GJworCislbGFuZ3VhZ2UgIkphdmEiCislbG9jYXRpb25zCislZGVidWcKKyVlcnJvci12ZXJib3NlCisldG9rZW4tdGFibGUKKworJWRlZmluZSBzdHlwZSAiamF2YS5hd3QuQ29sb3IiCisldHlwZTxqYXZhLmF3dC5Db2xvcj4gc3RhcnQ7CislZGVmaW5lIGFwaS5sb2NhdGlvbi50eXBlICJNeUxvYyIKKyVkZWZpbmUgYXBpLnBvc2l0aW9uLnR5cGUgIk15UG9zIgorJWNvZGUgeyBjbGFzcyBNeVBvcyB7fSB9CisKKyVjb2RlIGxleGVyCit7CisgIGphdmEuYXd0LkNvbG9yIHl5bHZhbDsKKyAgcHVibGljIGphdmEuYXd0LkNvbG9yIGdldExWYWwoKSB7IHJldHVybiB5eWx2YWw7IH0KKworICBwdWJsaWMgTXlQb3MgZ2V0U3RhcnRQb3MoKSB7IHJldHVybiBudWxsOyB9CisgIHB1YmxpYyBNeVBvcyBnZXRFbmRQb3MoKSAgIHsgcmV0dXJuIG51bGw7IH0KKworICBwdWJsaWMgdm9pZCB5eWVycm9yIChNeUxvYyBsb2MsIFN0cmluZyBzKQorICB7CisgICAgU3lzdGVtLmVyci5wcmludGxuIChsb2MgKyAiOiAiICsgcyk7CisgIH0KKworICBwdWJsaWMgaW50IHl5bGV4ICgpCisgIHsKKyAgICByZXR1cm4gRU9GOworICB9CisKKworfQorJSUKK3N0YXJ0OiAiZW5kIiB7JCQgPSAkPGphdmEuYXd0LkNvbG9yPjE7fTsKKyUlCitjbGFzcyBNeVBvcyB7fQorX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo3Mjk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo3MjkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo3MjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjcyOTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo3MjkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo3MjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo3Mjk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0OjcyOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjcyOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NzI5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo3MjkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo3MjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjcyOTogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NzI5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo3MjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjcyOTogZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiamF2YS5hdDo3MjkiCisoICRhdF9jaGVja190cmFjZTsgZ3JlcCAnW21iXTRfJyBZWVBhcnNlci55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAxICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo3MjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyRhc19lY2hvICJqYXZhLmF0OjcyOSIgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorKHRlc3QgLXogIiRDT05GX0pBVkFDIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6NzI5IgorJGFzX2VjaG8gImphdmEuYXQ6NzI5IiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQSIpIFwKKyAgJiYgYXRfZm5fY2hlY2tfc2tpcCA3NyAiJGF0X3NyY2Rpci9qYXZhLmF0OjcyOSIKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0OjcyOTogXCRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkU0hFTEwgLi4vLi4vLi4vamF2YWNvbXAuc2ggWVlQYXJzZXIuamF2YSIgImphdmEuYXQ6NzI5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjcyOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NzM3OiBncmVwICdqYXZhLmF3dC5Db2xvcicgWVlQYXJzZXIuamF2YSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6NzM3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGdyZXAgJ2phdmEuYXd0LkNvbG9yJyBZWVBhcnNlci5qYXZhCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo3MzciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo3Mzg6IFwkRUdSRVAgLXYgJyAqLz9cXConIFlZUGFyc2VyLmphdmEgfCBncmVwICdQb3NpdGlvbiciCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2Egc2hlbGwgcGlwZWxpbmUnICJqYXZhLmF0OjczOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkRUdSRVAgLXYgJyAqLz9cKicgWVlQYXJzZXIuamF2YSB8IGdyZXAgJ1Bvc2l0aW9uJworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6NzM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6NzM5OiBcJEVHUkVQIC12ICcgKi8/XFwqJyBZWVBhcnNlci5qYXZhIHwgZ3JlcCAnTG9jYXRpb24nIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIHNoZWxsIHBpcGVsaW5lJyAiamF2YS5hdDo3MzkiCisoICRhdF9jaGVja190cmFjZTsgJEVHUkVQIC12ICcgKi8/XConIFlZUGFyc2VyLmphdmEgfCBncmVwICdMb2NhdGlvbicKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0OjczOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8zMjAKKyNBVF9TVEFSVF8zMjEKK2F0X2ZuX2dyb3VwX2Jhbm5lciAzMjEgJ2phdmEuYXQ6NzQ4JyBcCisgICJKYXZhIHN5bnRheCBlcnJvciBoYW5kbGluZyB3aXRob3V0IGVycm9yIHRva2VuIiAiICIgMjAKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIzMjEuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCitjYXQgPllZUGFyc2VyLnkgPDwnX0FURU9GJworJWxhbmd1YWdlICJKYXZhIgorCislbGV4LXBhcmFtIHsgU3RyaW5nIHMgfQorCislY29kZSBpbXBvcnRzIHsKKyAgaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Cit9CisKKyVjb2RlIGxleGVyIHsKKyAgU3RyaW5nIElucHV0OworICBpbnQgUG9zaXRpb247CisKKyAgcHVibGljIFlZTGV4ZXIgKFN0cmluZyBzKQorICB7CisgICAgSW5wdXQgICAgPSBzOworICAgIFBvc2l0aW9uID0gMDsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHl5ZXJyb3IgKFN0cmluZyBzKQorICB7CisgICAgU3lzdGVtLmVyci5wcmludGxuIChzKTsKKyAgfQorCisgIHB1YmxpYyBPYmplY3QgZ2V0TFZhbCAoKQorICB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgaW50IHl5bGV4ICgpIHRocm93cyBJT0V4Y2VwdGlvbgorICB7CisgICAgaWYgKFBvc2l0aW9uID49IElucHV0Lmxlbmd0aCAoKSkKKyAgICAgIHJldHVybiBFT0Y7CisgICAgZWxzZQorICAgICAgcmV0dXJuIElucHV0LmNoYXJBdCAoUG9zaXRpb24rKyk7CisgIH0KK30KKworJWNvZGUgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nIGFyZ3MgW10pIHRocm93cyBJT0V4Y2VwdGlvbgorICB7CisgICAgWVlQYXJzZXIgcCA9IG5ldyBZWVBhcnNlciAoYXJncyBbMF0pOworICAgIHAucGFyc2UgKCk7CisgIH0KK30KKyUlCitpbnB1dDoKKyAgJ2EnICdhJworOworX0FURU9GCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo3OTk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCBZWVBhcnNlci55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiamF2YS5hdDo3OTkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo3OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0Ojc5OTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCBZWVBhcnNlci55IiAiamF2YS5hdDo3OTkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgWVlQYXJzZXIueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo3OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo3OTk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJqYXZhLmF0Ojc5OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9qYXZhLmF0Ojc5OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6Nzk5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiamF2YS5hdDo3OTkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo3OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9qYXZhLmF0Ojc5OTogYmlzb24gWVlQYXJzZXIueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImphdmEuYXQ6Nzk5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIFlZUGFyc2VyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo3OTkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworJGFzX2VjaG8gImphdmEuYXQ6ODAwIiA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisodGVzdCAteiAiJENPTkZfSkFWQUMiKSBcCisgICYmIGF0X2ZuX2NoZWNrX3NraXAgNzcgIiRhdF9zcmNkaXIvamF2YS5hdDo4MDAiCiskYXNfZWNobyAiamF2YS5hdDo4MDAiID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyh0ZXN0IC16ICIkQ09ORl9KQVZBIikgXAorICAmJiBhdF9mbl9jaGVja19za2lwIDc3ICIkYXRfc3JjZGlyL2phdmEuYXQ6ODAwIgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6ODAwOiBcJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRTSEVMTCAuLi8uLi8uLi9qYXZhY29tcC5zaCBZWVBhcnNlci5qYXZhIiAiamF2YS5hdDo4MDAiCisoICRhdF9jaGVja190cmFjZTsgJFNIRUxMIC4uLy4uLy4uL2phdmFjb21wLnNoIFlZUGFyc2VyLmphdmEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2phdmEuYXQ6ODAwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2phdmEuYXQ6ODAxOiAgXCRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBZWVBhcnNlciBhYSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBZWVBhcnNlciBhYSIgImphdmEuYXQ6ODAxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkU0hFTEwgLi4vLi4vLi4vamF2YWV4ZWMuc2ggWVlQYXJzZXIgYWEKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo4MDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo4MDI6ICBcJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIFlZUGFyc2VyIGFiIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIFlZUGFyc2VyIGFiIiAiamF2YS5hdDo4MDIiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBZWVBhcnNlciBhYgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvcgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo4MDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvamF2YS5hdDo4MDQ6ICBcJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIFlZUGFyc2VyIGJhIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFNIRUxMIC4uLy4uLy4uL2phdmFleGVjLnNoIFlZUGFyc2VyIGJhIiAiamF2YS5hdDo4MDQiCisoICRhdF9jaGVja190cmFjZTsgICRTSEVMTCAuLi8uLi8uLi9qYXZhZXhlYy5zaCBZWVBhcnNlciBiYQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvcgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvamF2YS5hdDo4MDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMzIxCisjQVRfU1RBUlRfMzIyCithdF9mbl9ncm91cF9iYW5uZXIgMzIyICdjeHgtdHlwZS5hdDozOTQnIFwKKyAgIkdMUjogUmVzb2x2ZSBhbWJpZ3VpdHksIGltcHVyZSwgbm8gbG9jYXRpb25zIiAiICAgIiAyMQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjMyMi4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKwogY2F0ID50eXBlcy55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogLyogU2ltcGxpZmllZCBDKysgVHlwZSBhbmQgRXhwcmVzc2lvbiBHcmFtbWFyLiAgKi8KIAogCiAKLSV7CislY29kZSByZXF1aXJlcworewogICAjaW5jbHVkZSA8c3RkaW8uaD4KICAgdW5pb24gTm9kZSB7CiAgICAgc3RydWN0IHsKQEAgLTU5ODA1LDMyICsxNjkxODIsMjEgQEAKICAgICB9IHRlcm07CiAgIH07CiAgIHR5cGVkZWYgdW5pb24gTm9kZSBOb2RlOworICAjZGVmaW5lIFlZU1RZUEUgTm9kZSAqCit9CisKKyVjb2RlCit7CiAgIHN0YXRpYyBOb2RlICpuZXdfbnRlcm0gKGNoYXIgY29uc3QgKiwgTm9kZSAqLCBOb2RlICosIE5vZGUgKik7CiAgIHN0YXRpYyBOb2RlICpuZXdfdGVybSAoY2hhciAqKTsKICAgc3RhdGljIHZvaWQgZnJlZV9ub2RlIChOb2RlICopOwogICBzdGF0aWMgY2hhciAqbm9kZV90b19zdHJpbmcgKE5vZGUgKik7Ci0gICNkZWZpbmUgWVlTVFlQRSBOb2RlICoKIAogICAjZGVmaW5lIFlZSU5JVERFUFRIIDEwCiAgICNkZWZpbmUgWVlTVEFDS0VYUEFOREFCTEUgMQotICBzdHJ1Y3QgWVlMVFlQRTsKLSNpZiBZWVBVUkUKLSMgaWYgWVlMU1BfTkVFREVECi0jICBkZWZpbmUgTEVYX1BBUkFNRVRFUlMgWVlTVFlQRSAqbHZhbHAsIHN0cnVjdCBZWUxUWVBFICpsbG9jcAotIyAgZGVmaW5lIEVSUk9SX1BBUkFNRVRFUlMgc3RydWN0IFlZTFRZUEUgKmxsb2NwLCBjaGFyIGNvbnN0ICpzCi0jIGVsc2UKLSMgIGRlZmluZSBMRVhfUEFSQU1FVEVSUyBZWVNUWVBFICpsdmFscAotIyBlbmRpZgotI2VuZGlmCi0jaWZuZGVmIExFWF9QQVJBTUVURVJTCi0jIGRlZmluZSBMRVhfUEFSQU1FVEVSUyB2b2lkCi0jZW5kaWYKLSNpZm5kZWYgRVJST1JfUEFSQU1FVEVSUwotIyBkZWZpbmUgRVJST1JfUEFSQU1FVEVSUyBjaGFyIGNvbnN0ICpzCi0jZW5kaWYKLSAgaW50IHl5bGV4IChMRVhfUEFSQU1FVEVSUyk7Ci0gIHZvaWQgeXllcnJvciAoRVJST1JfUEFSQU1FVEVSUyk7Ci0lfQorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgc3RhdGljIGludCB5eWxleCAodm9pZCk7Cit9CiAKICV0b2tlbiBUWVBFTkFNRSBJRAogCkBAIC01OTg0NSwzMiArMTY5MjExLDMyIEBACiAKIHByb2cgOgogICAgICB8IHByb2cgc3RtdCAgIHsKLQkJCWNoYXIgKm91dHB1dDsKLQkJCW91dHB1dCA9IG5vZGVfdG9fc3RyaW5nICgkMik7Ci0JCQlwcmludGYgKCIlc1xuIiwgb3V0cHV0KTsKLQkJCWZyZWUgKG91dHB1dCk7Ci0JCQlmcmVlX25vZGUgKCQyKTsKLQkJICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqb3V0cHV0OworICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gbm9kZV90b19zdHJpbmcgKCQyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiVzXG4iLCBvdXRwdXQpOworICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAob3V0cHV0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVfbm9kZSAoJDIpOworICAgICAgICAgICAgICAgICAgIH0KICAgICAgOwogCi1zdG10IDogZXhwciAnOycgICVkcHJlYyAxCXsgJCQgPSAkMTsgfQorc3RtdCA6IGV4cHIgJzsnICAlZHByZWMgMSAgICAgeyAkJCA9ICQxOyB9CiAgICAgIHwgZGVjbCAgICAgICVkcHJlYyAyCi0gICAgIHwgZXJyb3IgJzsnCXsgJCQgPSBuZXdfbnRlcm0gKCI8ZXJyb3I+IiwgMCwgMCwgMCk7IH0KLSAgICAgfCAnQCcJCXsgWVlBQ0NFUFQ7IH0KKyAgICAgfCBlcnJvciAnOycgICAgICAgIHsgJCQgPSBuZXdfbnRlcm0gKCI8ZXJyb3I+IiwgWVlfTlVMTCwgWVlfTlVMTCwgWVlfTlVMTCk7IH0KKyAgICAgfCAnQCcgICAgICAgICAgICAgIHsgWVlBQ0NFUFQ7IH0KICAgICAgOwogCiBleHByIDogSUQKICAgICAgfCBUWVBFTkFNRSAnKCcgZXhwciAnKScKLQkJCXsgJCQgPSBuZXdfbnRlcm0gKCI8Y2FzdD4oJXMsJXMpIiwgJDMsICQxLCAwKTsgfQotICAgICB8IGV4cHIgJysnIGV4cHIJeyAkJCA9IG5ld19udGVybSAoIisoJXMsJXMpIiwgJDEsICQzLCAwKTsgfQotICAgICB8IGV4cHIgJz0nIGV4cHIgICAgeyAkJCA9IG5ld19udGVybSAoIj0oJXMsJXMpIiwgJDEsICQzLCAwKTsgfQorICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ld19udGVybSAoIjxjYXN0PiglcywlcykiLCAkMywgJDEsIFlZX05VTEwpOyB9CisgICAgIHwgZXhwciAnKycgZXhwciAgICB7ICQkID0gbmV3X250ZXJtICgiKyglcywlcykiLCAkMSwgJDMsIFlZX05VTEwpOyB9CisgICAgIHwgZXhwciAnPScgZXhwciAgICB7ICQkID0gbmV3X250ZXJtICgiPSglcywlcykiLCAkMSwgJDMsIFlZX05VTEwpOyB9CiAgICAgIDsKIAogZGVjbCA6IFRZUEVOQU1FIGRlY2xhcmF0b3IgJzsnCi0JCQl7ICQkID0gbmV3X250ZXJtICgiPGRlY2xhcmU+KCVzLCVzKSIsICQxLCAkMiwgMCk7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBuZXdfbnRlcm0gKCI8ZGVjbGFyZT4oJXMsJXMpIiwgJDEsICQyLCBZWV9OVUxMKTsgfQogICAgICB8IFRZUEVOQU1FIGRlY2xhcmF0b3IgJz0nIGV4cHIgJzsnCi0JCQl7ICQkID0gbmV3X250ZXJtICgiPGluaXQtZGVjbGFyZT4oJXMsJXMsJXMpIiwgJDEsCi0JCQkJCSAgJDIsICQ0KTsgfQorICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ld19udGVybSAoIjxpbml0LWRlY2xhcmU+KCVzLCVzLCVzKSIsICQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDIsICQ0KTsgfQogICAgICA7CiAKIGRlY2xhcmF0b3IgOiBJRApAQCAtNTk4ODMsMTkgKzE2OTI0OSwyNiBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgogCiBpbnQKIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKLSAgaWYgKGFyZ2MgIT0gMikKLSAgICBhYm9ydCAoKTsKKyAgYXNzZXJ0IChhcmdjID09IDIpOwogICBpZiAoIWZyZW9wZW4gKGFyZ3ZbMV0sICJyIiwgc3RkaW4pKQogICAgIHJldHVybiAzOwogICByZXR1cm4geXlwYXJzZSAoKTsKIH0KIAotaW50Ci15eWxleCAoTEVYX1BBUkFNRVRFUlMpCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorCitpbnQgeXlsZXggKHZvaWQpCiB7CiAgIGNoYXIgYnVmZmVyWzI1Nl07CiAgIGludCBjOwpAQCAtNTk5MTIsNzMgKzE2OTI4NSw1NSBAQAogCiAgIHdoaWxlICgxKQogICAgIHsKKyAgICAgIGFzc2VydCAoIWZlb2YgKHN0ZGluKSk7CiAgICAgICBjID0gZ2V0Y2hhciAoKTsKICAgICAgIHN3aXRjaCAoYykKLQl7Ci0JY2FzZSBFT0Y6Ci0JICByZXR1cm4gMDsKLQljYXNlICdcdCc6Ci0JICBjb2xOdW0gPSAoY29sTnVtICsgNykgJiB+NzsKLQkgIGJyZWFrOwotCWNhc2UgJyAnOiBjYXNlICdcZic6Ci0JICBjb2xOdW0gKz0gMTsKLQkgIGJyZWFrOwotCWNhc2UgJ1xuJzoKLQkgIGxpbmVOdW0gKz0gMTsKLQkgIGNvbE51bSA9IDA7Ci0JICBicmVhazsKLQlkZWZhdWx0OgotCSAgewotCSAgICBpbnQgdG9rOwotI2lmIFlZTFNQX05FRURFRAotCSAgICB5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGxvYy5sYXN0X2xpbmUgPSBsaW5lTnVtOwotCSAgICB5eWxsb2MuZmlyc3RfY29sdW1uID0gY29sTnVtOwotI2VuZGlmCi0JICAgIGlmIChpc2FscGhhIChjKSkKLQkgICAgICB7Ci0JCWkgPSAwOworICAgICAgICB7CisgICAgICAgIGNhc2UgRU9GOgorICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlICdcdCc6CisgICAgICAgICAgY29sTnVtID0gKGNvbE51bSArIDcpICYgfjc7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJyAnOiBjYXNlICdcZic6CisgICAgICAgICAgY29sTnVtICs9IDE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1xuJzoKKyAgICAgICAgICBsaW5lTnVtICs9IDE7CisgICAgICAgICAgY29sTnVtID0gMDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICB7CisgICAgICAgICAgICBpbnQgdG9rOworICAgICAgICAgICAgaWYgKGlzYWxwaGEgKGMpKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaSA9IDA7CiAKLQkJZG8KLQkJICB7Ci0JCSAgICBidWZmZXJbaSsrXSA9IGM7Ci0JCSAgICBjb2xOdW0gKz0gMTsKLQkJICAgIGlmIChpID09IHNpemVvZiBidWZmZXIgLSAxKQotCQkgICAgICBhYm9ydCAoKTsKLQkJICAgIGMgPSBnZXRjaGFyICgpOwotCQkgIH0KLQkJd2hpbGUgKGlzYWxudW0gKGMpIHx8IGMgPT0gJ18nKTsKKyAgICAgICAgICAgICAgICBkbworICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBidWZmZXJbaSsrXSA9IGM7CisgICAgICAgICAgICAgICAgICAgIGNvbE51bSArPSAxOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQgKGkgIT0gc2l6ZW9mIGJ1ZmZlciAtIDEpOworICAgICAgICAgICAgICAgICAgICBjID0gZ2V0Y2hhciAoKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3aGlsZSAoaXNhbG51bSAoYykgfHwgYyA9PSAnXycpOwogCi0JCXVuZ2V0YyAoYywgc3RkaW4pOwotCQlidWZmZXJbaSsrXSA9IDA7Ci0JCXRvayA9IGlzdXBwZXIgKCh1bnNpZ25lZCBjaGFyKSBidWZmZXJbMF0pID8gVFlQRU5BTUUgOiBJRDsKLQkJeXlsdmFsID0gbmV3X3Rlcm0gKHN0cmNweSAoKGNoYXIgKikgbWFsbG9jIChpKSwgYnVmZmVyKSk7Ci0JICAgICAgfQotCSAgICBlbHNlCi0JICAgICAgewotCQljb2xOdW0gKz0gMTsKLQkJdG9rID0gYzsKLQkJeXlsdmFsID0gMDsKLQkgICAgICB9Ci0jaWYgWVlMU1BfTkVFREVECi0JICAgIHl5bGxvYy5sYXN0X2NvbHVtbiA9IGNvbE51bS0xOwotI2VuZGlmCi0JICAgIHJldHVybiB0b2s7Ci0JICB9Ci0JfQorICAgICAgICAgICAgICAgIHVuZ2V0YyAoYywgc3RkaW4pOworICAgICAgICAgICAgICAgIGJ1ZmZlcltpKytdID0gMDsKKyAgICAgICAgICAgICAgICB0b2sgPSBpc3VwcGVyICgodW5zaWduZWQgY2hhcikgYnVmZmVyWzBdKSA/IFRZUEVOQU1FIDogSUQ7CisgICAgICAgICAgICAgICAgeXlsdmFsID0gbmV3X3Rlcm0gKHN0cmNweSAoKGNoYXIgKikgbWFsbG9jIChpKSwgYnVmZmVyKSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbE51bSArPSAxOworICAgICAgICAgICAgICAgIHRvayA9IGM7CisgICAgICAgICAgICAgICAgeXlsdmFsID0gWVlfTlVMTDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRvazsKKyAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQKLXl5ZXJyb3IgKEVSUk9SX1BBUkFNRVRFUlMpCi17Ci0jaWYgWVlQVVJFICYmIFlZTFNQX05FRURFRAotICAvKiBQYWNpZnkgR0NDIGJ5IHVzaW5nIGxsb2NwLiAgKi8KLSAgaWYgKCEgbGxvY3ApCi0gICAgYWJvcnQgKCk7Ci0jZW5kaWYKLSAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIHMpOwotfQotCiBzdGF0aWMgTm9kZSAqCiBuZXdfbnRlcm0gKGNoYXIgY29uc3QgKmZvcm0sIE5vZGUgKmNoaWxkMCwgTm9kZSAqY2hpbGQxLCBOb2RlICpjaGlsZDIpCiB7CkBAIC02MDA0Niw3ICsxNjk0MDEsNyBAQAogICAgICAgY2hpbGQxID0gbm9kZV90b19zdHJpbmcgKG5vZGUtPm50ZXJtLmNoaWxkcmVuWzFdKTsKICAgICAgIGNoaWxkMiA9IG5vZGVfdG9fc3RyaW5nIChub2RlLT5udGVybS5jaGlsZHJlblsyXSk7CiAgICAgICBidWZmZXIgPSAoY2hhciAqKSBtYWxsb2MgKHN0cmxlbiAobm9kZS0+bnRlcm0uZm9ybSkgKyBzdHJsZW4gKGNoaWxkMCkKLQkJCQkrIHN0cmxlbiAoY2hpbGQxKSArIHN0cmxlbiAoY2hpbGQyKSArIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHN0cmxlbiAoY2hpbGQxKSArIHN0cmxlbiAoY2hpbGQyKSArIDEpOwogICAgICAgc3ByaW50ZiAoYnVmZmVyLCBub2RlLT5udGVybS5mb3JtLCBjaGlsZDAsIGNoaWxkMSwgY2hpbGQyKTsKICAgICAgIGZyZWUgKGNoaWxkMCk7CiAgICAgICBmcmVlIChjaGlsZDEpOwpAQCAtNjAwOTAsODkgKzE2OTQ0NSwxMjkgQEAKIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY3h4LXR5cGUuYXQ6NDE0OiBiaXNvbiAtbyB0eXBlcy5jIHR5cGVzLnkiCi1lY2hvIGN4eC10eXBlLmF0OjQxNCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gdHlwZXMuYyB0eXBlcy55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImN4eC10eXBlLmF0OjQxNDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDozOTU6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyB0eXBlcy5jIHR5cGVzLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjeHgtdHlwZS5hdDozOTUiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gdHlwZXMuYyB0eXBlcy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDozOTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjM5NTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gdHlwZXMuYyB0eXBlcy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIHR5cGVzLmMgdHlwZXMueSIgImN4eC10eXBlLmF0OjM5NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyB0eXBlcy5jIHR5cGVzLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjM5NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDozOTU6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjeHgtdHlwZS5hdDozOTUiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6Mzk1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6Mzk1OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY3h4LXR5cGUuYXQ6Mzk1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjM5NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjM5NTogYmlzb24gLW8gdHlwZXMuYyB0eXBlcy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY3h4LXR5cGUuYXQ6Mzk1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIHR5cGVzLmMgdHlwZXMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjM5NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY3h4LXR5cGUuYXQ6NDE0OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIHR5cGVzIHR5cGVzLmMgXCRMSUJTIgotZWNobyBjeHgtdHlwZS5hdDo0MTQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyB0eXBlcyB0eXBlcy5jICRMSUJTICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImN4eC10eXBlLmF0OjQxNDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjM5NTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImN4eC10eXBlLmF0OjM5NSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6Mzk1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjM5NTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyB0eXBlcyB0eXBlcy5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIHR5cGVzIHR5cGVzLmMgJExJQlMiICJjeHgtdHlwZS5hdDozOTUiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIHR5cGVzIHR5cGVzLmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjM5NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJjeHgtdHlwZS5hdDo0MTY6IFwkUFJFUEFSU0VSIC4vdHlwZXMgdGVzdC1pbnB1dCIKLWVjaG8gY3h4LXR5cGUuYXQ6NDE2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vdHlwZXMgdGVzdC1pbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvID4+JGF0X3N0ZGVycjsgZWNobyAic3ludGF4IGVycm9yCi0iIHwgJGF0X2RpZmYgLSAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvID4+JGF0X3N0ZG91dDsgZWNobyAiKyh6LHEpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6Mzk3OiAgXCRQUkVQQVJTRVIgLi90eXBlcyB0ZXN0LWlucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL3R5cGVzIHRlc3QtaW5wdXQiICJjeHgtdHlwZS5hdDozOTciCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi90eXBlcyB0ZXN0LWlucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIisoeixxKQogPGRlY2xhcmU+KFQseCkKIDxpbml0LWRlY2xhcmU+KFQseCx5KQogPSh4LHkpCkBAIC02MDE4MSw4NiArMTY5NTc2LDU4IEBACiA8aW5pdC1kZWNsYXJlPihULHksKyh6LHEpKQogPGVycm9yPgogKyh6LHEpCi0iIHwgJGF0X2RpZmYgLSAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjeHgtdHlwZS5hdDo0MTY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjM5NyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KLQotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Ci0KLSAgMTM0ICkgIyAxMzQuIGN4eC10eXBlLmF0OjQxOTogR0xSOiBSZXNvbHZlIGFtYmlndWl0eSwgaW1wdXJlLCBsb2NhdGlvbnMKLSAgICBhdF9zZXR1cF9saW5lPSdjeHgtdHlwZS5hdDo0MTknCi0gICAgYXRfZGVzYz0nR0xSOiBSZXNvbHZlIGFtYmlndWl0eSwgaW1wdXJlLCBsb2NhdGlvbnMnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjEzNDogR0xSOiBSZXNvbHZlIGFtYmlndWl0eSwgaW1wdXJlLCBsb2NhdGlvbnMgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjEzNC4gY3h4LXR5cGUuYXQ6NDE5OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6Mzk3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImN4eC10eXBlLmF0OjM5NyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvcgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6Mzk3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0KLQotCi0KLSMgVXNpbmcgeWFjYy5jPwotCi0KLQotCi0KLQotCi0jIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmICVsb2NhdGlvbiAmICVwdXJlICYgKCVnbHIgb3IgJXBhcnNlLXBhcmFtKS4KLQotIyB5eWVycm9yIGFsd2F5cyBzZWVzIHRoZSBsb2NhdGlvbnMgKHdoZW4gYWN0aXZhdGVkKSwgZXhjZXB0IGlmCi0jIHlhY2MgJiBwdXJlICYgIXBhcmFtLgotCi0KLSMgVGhlIGludGVyZmFjZSBpcyBwdXJlOiBlaXRoZXIgYmVjYXVzZSAlcHVyZS1wYXJzZXIsIG9yIGJlY2F1c2Ugd2UKLSMgYXJlIHVzaW5nIHRoZSBDKysgcGFyc2Vycy4KLQotCi0KLQotCi0KLQotCi0KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMzIyCisjQVRfU1RBUlRfMzIzCithdF9mbl9ncm91cF9iYW5uZXIgMzIzICdjeHgtdHlwZS5hdDo0MDEnIFwKKyAgIkdMUjogUmVzb2x2ZSBhbWJpZ3VpdHksIGltcHVyZSwgbG9jYXRpb25zIiAiICAgICAgIiAyMQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjMyMy4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIAogY2F0ID50eXBlcy55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogLyogU2ltcGxpZmllZCBDKysgVHlwZSBhbmQgRXhwcmVzc2lvbiBHcmFtbWFyLiAgKi8KIAogJWxvY2F0aW9ucwogCi0leworJWNvZGUgcmVxdWlyZXMKK3sKICAgI2luY2x1ZGUgPHN0ZGlvLmg+CiAgIHVuaW9uIE5vZGUgewogICAgIHN0cnVjdCB7CkBAIC02MDI4MCwzMiArMTY5NjQ3LDIxIEBACiAgICAgfSB0ZXJtOwogICB9OwogICB0eXBlZGVmIHVuaW9uIE5vZGUgTm9kZTsKKyAgI2RlZmluZSBZWVNUWVBFIE5vZGUgKgorfQorCislY29kZQorewogICBzdGF0aWMgTm9kZSAqbmV3X250ZXJtIChjaGFyIGNvbnN0ICosIE5vZGUgKiwgTm9kZSAqLCBOb2RlICopOwogICBzdGF0aWMgTm9kZSAqbmV3X3Rlcm0gKGNoYXIgKik7CiAgIHN0YXRpYyB2b2lkIGZyZWVfbm9kZSAoTm9kZSAqKTsKICAgc3RhdGljIGNoYXIgKm5vZGVfdG9fc3RyaW5nIChOb2RlICopOwotICAjZGVmaW5lIFlZU1RZUEUgTm9kZSAqCiAKICAgI2RlZmluZSBZWUlOSVRERVBUSCAxMAogICAjZGVmaW5lIFlZU1RBQ0tFWFBBTkRBQkxFIDEKLSAgc3RydWN0IFlZTFRZUEU7Ci0jaWYgWVlQVVJFCi0jIGlmIFlZTFNQX05FRURFRAotIyAgZGVmaW5lIExFWF9QQVJBTUVURVJTIFlZU1RZUEUgKmx2YWxwLCBzdHJ1Y3QgWVlMVFlQRSAqbGxvY3AKLSMgIGRlZmluZSBFUlJPUl9QQVJBTUVURVJTIHN0cnVjdCBZWUxUWVBFICpsbG9jcCwgY2hhciBjb25zdCAqcwotIyBlbHNlCi0jICBkZWZpbmUgTEVYX1BBUkFNRVRFUlMgWVlTVFlQRSAqbHZhbHAKLSMgZW5kaWYKLSNlbmRpZgotI2lmbmRlZiBMRVhfUEFSQU1FVEVSUwotIyBkZWZpbmUgTEVYX1BBUkFNRVRFUlMgdm9pZAotI2VuZGlmCi0jaWZuZGVmIEVSUk9SX1BBUkFNRVRFUlMKLSMgZGVmaW5lIEVSUk9SX1BBUkFNRVRFUlMgY2hhciBjb25zdCAqcwotI2VuZGlmCi0gIGludCB5eWxleCAoTEVYX1BBUkFNRVRFUlMpOwotICB2b2lkIHl5ZXJyb3IgKEVSUk9SX1BBUkFNRVRFUlMpOwotJX0KKyAgc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CisgIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOworfQogCiAldG9rZW4gVFlQRU5BTUUgSUQKIApAQCAtNjAzMjAsMzUgKzE2OTY3NiwzNSBAQAogCiBwcm9nIDoKICAgICAgfCBwcm9nIHN0bXQgICB7Ci0JCQljaGFyICpvdXRwdXQ7Ci0JCQlwcmludGYgKCIlZC4lZC0lZC4lZDogIiwKLQkJCSAgICAgQDIuZmlyc3RfbGluZSwgQDIuZmlyc3RfY29sdW1uLAotCQkJICAgICBAMi5sYXN0X2xpbmUsIEAyLmxhc3RfY29sdW1uKTsKLQkJCW91dHB1dCA9IG5vZGVfdG9fc3RyaW5nICgkMik7Ci0JCQlwcmludGYgKCIlc1xuIiwgb3V0cHV0KTsKLQkJCWZyZWUgKG91dHB1dCk7Ci0JCQlmcmVlX25vZGUgKCQyKTsKLQkJICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqb3V0cHV0OworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiJWQuJWQtJWQuJWQ6ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAyLmZpcnN0X2xpbmUsIEAyLmZpcnN0X2NvbHVtbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDIubGFzdF9saW5lLCBAMi5sYXN0X2NvbHVtbik7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBub2RlX3RvX3N0cmluZyAoJDIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiJXNcbiIsIG91dHB1dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIChvdXRwdXQpOworICAgICAgICAgICAgICAgICAgICAgICAgZnJlZV9ub2RlICgkMik7CisgICAgICAgICAgICAgICAgICAgfQogICAgICA7CiAKLXN0bXQgOiBleHByICc7JyAgJWRwcmVjIDEJeyAkJCA9ICQxOyB9CitzdG10IDogZXhwciAnOycgICVkcHJlYyAxICAgICB7ICQkID0gJDE7IH0KICAgICAgfCBkZWNsICAgICAgJWRwcmVjIDIKLSAgICAgfCBlcnJvciAnOycJeyAkJCA9IG5ld19udGVybSAoIjxlcnJvcj4iLCAwLCAwLCAwKTsgfQotICAgICB8ICdAJwkJeyBZWUFDQ0VQVDsgfQorICAgICB8IGVycm9yICc7JyAgICAgICAgeyAkJCA9IG5ld19udGVybSAoIjxlcnJvcj4iLCBZWV9OVUxMLCBZWV9OVUxMLCBZWV9OVUxMKTsgfQorICAgICB8ICdAJyAgICAgICAgICAgICAgeyBZWUFDQ0VQVDsgfQogICAgICA7CiAKIGV4cHIgOiBJRAogICAgICB8IFRZUEVOQU1FICcoJyBleHByICcpJwotCQkJeyAkJCA9IG5ld19udGVybSAoIjxjYXN0PiglcywlcykiLCAkMywgJDEsIDApOyB9Ci0gICAgIHwgZXhwciAnKycgZXhwcgl7ICQkID0gbmV3X250ZXJtICgiKyglcywlcykiLCAkMSwgJDMsIDApOyB9Ci0gICAgIHwgZXhwciAnPScgZXhwciAgICB7ICQkID0gbmV3X250ZXJtICgiPSglcywlcykiLCAkMSwgJDMsIDApOyB9CisgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3X250ZXJtICgiPGNhc3Q+KCVzLCVzKSIsICQzLCAkMSwgWVlfTlVMTCk7IH0KKyAgICAgfCBleHByICcrJyBleHByICAgIHsgJCQgPSBuZXdfbnRlcm0gKCIrKCVzLCVzKSIsICQxLCAkMywgWVlfTlVMTCk7IH0KKyAgICAgfCBleHByICc9JyBleHByICAgIHsgJCQgPSBuZXdfbnRlcm0gKCI9KCVzLCVzKSIsICQxLCAkMywgWVlfTlVMTCk7IH0KICAgICAgOwogCiBkZWNsIDogVFlQRU5BTUUgZGVjbGFyYXRvciAnOycKLQkJCXsgJCQgPSBuZXdfbnRlcm0gKCI8ZGVjbGFyZT4oJXMsJXMpIiwgJDEsICQyLCAwKTsgfQorICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ld19udGVybSAoIjxkZWNsYXJlPiglcywlcykiLCAkMSwgJDIsIFlZX05VTEwpOyB9CiAgICAgIHwgVFlQRU5BTUUgZGVjbGFyYXRvciAnPScgZXhwciAnOycKLQkJCXsgJCQgPSBuZXdfbnRlcm0gKCI8aW5pdC1kZWNsYXJlPiglcywlcywlcykiLCAkMSwKLQkJCQkJICAkMiwgJDQpOyB9CisgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3X250ZXJtICgiPGluaXQtZGVjbGFyZT4oJXMsJXMsJXMpIiwgJDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMiwgJDQpOyB9CiAgICAgIDsKIAogZGVjbGFyYXRvciA6IElECkBAIC02MDM2MSwxOSArMTY5NzE3LDI4IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAKIGludAogbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewotICBpZiAoYXJnYyAhPSAyKQotICAgIGFib3J0ICgpOworICBhc3NlcnQgKGFyZ2MgPT0gMik7CiAgIGlmICghZnJlb3BlbiAoYXJndlsxXSwgInIiLCBzdGRpbikpCiAgICAgcmV0dXJuIDM7CiAgIHJldHVybiB5eXBhcnNlICgpOwogfQogCi1pbnQKLXl5bGV4IChMRVhfUEFSQU1FVEVSUykKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgWVlfTE9DQVRJT05fUFJJTlQgKHN0ZGVyciwgKHl5bGxvYykpOworICBmcHJpbnRmIChzdGRlcnIsICI6ICIpOworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKworaW50IHl5bGV4ICh2b2lkKQogewogICBjaGFyIGJ1ZmZlclsyNTZdOwogICBpbnQgYzsKQEAgLTYwMzkwLDczICsxNjk3NTUsNTggQEAKIAogICB3aGlsZSAoMSkKICAgICB7CisgICAgICBhc3NlcnQgKCFmZW9mIChzdGRpbikpOwogICAgICAgYyA9IGdldGNoYXIgKCk7CiAgICAgICBzd2l0Y2ggKGMpCi0JewotCWNhc2UgRU9GOgotCSAgcmV0dXJuIDA7Ci0JY2FzZSAnXHQnOgotCSAgY29sTnVtID0gKGNvbE51bSArIDcpICYgfjc7Ci0JICBicmVhazsKLQljYXNlICcgJzogY2FzZSAnXGYnOgotCSAgY29sTnVtICs9IDE7Ci0JICBicmVhazsKLQljYXNlICdcbic6Ci0JICBsaW5lTnVtICs9IDE7Ci0JICBjb2xOdW0gPSAwOwotCSAgYnJlYWs7Ci0JZGVmYXVsdDoKLQkgIHsKLQkgICAgaW50IHRvazsKLSNpZiBZWUxTUF9ORUVERUQKLQkgICAgeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxsb2MubGFzdF9saW5lID0gbGluZU51bTsKLQkgICAgeXlsbG9jLmZpcnN0X2NvbHVtbiA9IGNvbE51bTsKLSNlbmRpZgotCSAgICBpZiAoaXNhbHBoYSAoYykpCi0JICAgICAgewotCQlpID0gMDsKKyAgICAgICAgeworICAgICAgICBjYXNlIEVPRjoKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSAnXHQnOgorICAgICAgICAgIGNvbE51bSA9IChjb2xOdW0gKyA3KSAmIH43OworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICcgJzogY2FzZSAnXGYnOgorICAgICAgICAgIGNvbE51bSArPSAxOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdcbic6CisgICAgICAgICAgbGluZU51bSArPSAxOworICAgICAgICAgIGNvbE51bSA9IDA7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgeworICAgICAgICAgICAgaW50IHRvazsKKyAgICAgICAgICAgIHl5bGxvYy5maXJzdF9saW5lID0geXlsbG9jLmxhc3RfbGluZSA9IGxpbmVOdW07CisgICAgICAgICAgICB5eWxsb2MuZmlyc3RfY29sdW1uID0gY29sTnVtOworICAgICAgICAgICAgaWYgKGlzYWxwaGEgKGMpKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaSA9IDA7CiAKLQkJZG8KLQkJICB7Ci0JCSAgICBidWZmZXJbaSsrXSA9IGM7Ci0JCSAgICBjb2xOdW0gKz0gMTsKLQkJICAgIGlmIChpID09IHNpemVvZiBidWZmZXIgLSAxKQotCQkgICAgICBhYm9ydCAoKTsKLQkJICAgIGMgPSBnZXRjaGFyICgpOwotCQkgIH0KLQkJd2hpbGUgKGlzYWxudW0gKGMpIHx8IGMgPT0gJ18nKTsKKyAgICAgICAgICAgICAgICBkbworICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBidWZmZXJbaSsrXSA9IGM7CisgICAgICAgICAgICAgICAgICAgIGNvbE51bSArPSAxOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQgKGkgIT0gc2l6ZW9mIGJ1ZmZlciAtIDEpOworICAgICAgICAgICAgICAgICAgICBjID0gZ2V0Y2hhciAoKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3aGlsZSAoaXNhbG51bSAoYykgfHwgYyA9PSAnXycpOwogCi0JCXVuZ2V0YyAoYywgc3RkaW4pOwotCQlidWZmZXJbaSsrXSA9IDA7Ci0JCXRvayA9IGlzdXBwZXIgKCh1bnNpZ25lZCBjaGFyKSBidWZmZXJbMF0pID8gVFlQRU5BTUUgOiBJRDsKLQkJeXlsdmFsID0gbmV3X3Rlcm0gKHN0cmNweSAoKGNoYXIgKikgbWFsbG9jIChpKSwgYnVmZmVyKSk7Ci0JICAgICAgfQotCSAgICBlbHNlCi0JICAgICAgewotCQljb2xOdW0gKz0gMTsKLQkJdG9rID0gYzsKLQkJeXlsdmFsID0gMDsKLQkgICAgICB9Ci0jaWYgWVlMU1BfTkVFREVECi0JICAgIHl5bGxvYy5sYXN0X2NvbHVtbiA9IGNvbE51bS0xOwotI2VuZGlmCi0JICAgIHJldHVybiB0b2s7Ci0JICB9Ci0JfQorICAgICAgICAgICAgICAgIHVuZ2V0YyAoYywgc3RkaW4pOworICAgICAgICAgICAgICAgIGJ1ZmZlcltpKytdID0gMDsKKyAgICAgICAgICAgICAgICB0b2sgPSBpc3VwcGVyICgodW5zaWduZWQgY2hhcikgYnVmZmVyWzBdKSA/IFRZUEVOQU1FIDogSUQ7CisgICAgICAgICAgICAgICAgeXlsdmFsID0gbmV3X3Rlcm0gKHN0cmNweSAoKGNoYXIgKikgbWFsbG9jIChpKSwgYnVmZmVyKSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbE51bSArPSAxOworICAgICAgICAgICAgICAgIHRvayA9IGM7CisgICAgICAgICAgICAgICAgeXlsdmFsID0gWVlfTlVMTDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgeXlsbG9jLmxhc3RfY29sdW1uID0gY29sTnVtLTE7CisgICAgICAgICAgICByZXR1cm4gdG9rOworICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZAoteXllcnJvciAoRVJST1JfUEFSQU1FVEVSUykKLXsKLSNpZiBZWVBVUkUgJiYgWVlMU1BfTkVFREVECi0gIC8qIFBhY2lmeSBHQ0MgYnkgdXNpbmcgbGxvY3AuICAqLwotICBpZiAoISBsbG9jcCkKLSAgICBhYm9ydCAoKTsKLSNlbmRpZgotICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgcyk7Ci19Ci0KIHN0YXRpYyBOb2RlICoKIG5ld19udGVybSAoY2hhciBjb25zdCAqZm9ybSwgTm9kZSAqY2hpbGQwLCBOb2RlICpjaGlsZDEsIE5vZGUgKmNoaWxkMikKIHsKQEAgLTYwNTI0LDcgKzE2OTg3NCw3IEBACiAgICAgICBjaGlsZDEgPSBub2RlX3RvX3N0cmluZyAobm9kZS0+bnRlcm0uY2hpbGRyZW5bMV0pOwogICAgICAgY2hpbGQyID0gbm9kZV90b19zdHJpbmcgKG5vZGUtPm50ZXJtLmNoaWxkcmVuWzJdKTsKICAgICAgIGJ1ZmZlciA9IChjaGFyICopIG1hbGxvYyAoc3RybGVuIChub2RlLT5udGVybS5mb3JtKSArIHN0cmxlbiAoY2hpbGQwKQotCQkJCSsgc3RybGVuIChjaGlsZDEpICsgc3RybGVuIChjaGlsZDIpICsgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3RybGVuIChjaGlsZDEpICsgc3RybGVuIChjaGlsZDIpICsgMSk7CiAgICAgICBzcHJpbnRmIChidWZmZXIsIG5vZGUtPm50ZXJtLmZvcm0sIGNoaWxkMCwgY2hpbGQxLCBjaGlsZDIpOwogICAgICAgZnJlZSAoY2hpbGQwKTsKICAgICAgIGZyZWUgKGNoaWxkMSk7CkBAIC02MDU2OCw4OSArMTY5OTE4LDEyOSBAQAogX0FURU9GCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjeHgtdHlwZS5hdDo0MjA6IGJpc29uIC1vIHR5cGVzLmMgdHlwZXMueSIKLWVjaG8gY3h4LXR5cGUuYXQ6NDIwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtbyB0eXBlcy5jIHR5cGVzLnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY3h4LXR5cGUuYXQ6NDIwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQwMjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIHR5cGVzLmMgdHlwZXMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImN4eC10eXBlLmF0OjQwMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyB0eXBlcy5jIHR5cGVzLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQwMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDAyOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyB0eXBlcy5jIHR5cGVzLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gdHlwZXMuYyB0eXBlcy55IiAiY3h4LXR5cGUuYXQ6NDAyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIHR5cGVzLmMgdHlwZXMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDAyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQwMjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImN4eC10eXBlLmF0OjQwMiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MDI6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjeHgtdHlwZS5hdDo0MDIiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDAyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDAyOiBiaXNvbiAtbyB0eXBlcy5jIHR5cGVzLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjeHgtdHlwZS5hdDo0MDIiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gdHlwZXMuYyB0eXBlcy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDAyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjeHgtdHlwZS5hdDo0MjA6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gdHlwZXMgdHlwZXMuYyBcJExJQlMiCi1lY2hvIGN4eC10eXBlLmF0OjQyMCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIHR5cGVzIHR5cGVzLmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY3h4LXR5cGUuYXQ6NDIwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDAyOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiY3h4LXR5cGUuYXQ6NDAyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDAyOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIHR5cGVzIHR5cGVzLmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gdHlwZXMgdHlwZXMuYyAkTElCUyIgImN4eC10eXBlLmF0OjQwMiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gdHlwZXMgdHlwZXMuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDAyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0kYXRfdHJhY2VvZmYKLWVjaG8gImN4eC10eXBlLmF0OjQyMjogXCRQUkVQQVJTRVIgLi90eXBlcyB0ZXN0LWlucHV0IgotZWNobyBjeHgtdHlwZS5hdDo0MjIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi90eXBlcyB0ZXN0LWlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gPj4kYXRfc3RkZXJyOyBlY2hvICJzeW50YXggZXJyb3IKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gPj4kYXRfc3Rkb3V0OyBlY2hvICIzLjAtMy41OiArKHoscSkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MDM6ICBcJFBSRVBBUlNFUiAuL3R5cGVzIHRlc3QtaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vdHlwZXMgdGVzdC1pbnB1dCIgImN4eC10eXBlLmF0OjQwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL3R5cGVzIHRlc3QtaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMy4wLTMuNTogKyh6LHEpCiA1LjAtNS4zOiA8ZGVjbGFyZT4oVCx4KQogNy4wLTcuNzogPGluaXQtZGVjbGFyZT4oVCx4LHkpCiA5LjAtOS41OiA9KHgseSkKQEAgLTYwNjU5LDg2ICsxNzAwNDksNTggQEAKIDE1LjAtMTUuMTM6IDxpbml0LWRlY2xhcmU+KFQseSwrKHoscSkpCiAxNy4wLTE3LjE1OiA8ZXJyb3I+CiAxOS4wLTE5LjU6ICsoeixxKQotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY3h4LXR5cGUuYXQ6NDIyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MDMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCi0KLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwotCi0gIDEzNSApICMgMTM1LiBjeHgtdHlwZS5hdDo0MjU6IEdMUjogUmVzb2x2ZSBhbWJpZ3VpdHksIHB1cmUsIG5vIGxvY2F0aW9ucwotICAgIGF0X3NldHVwX2xpbmU9J2N4eC10eXBlLmF0OjQyNScKLSAgICBhdF9kZXNjPSdHTFI6IFJlc29sdmUgYW1iaWd1aXR5LCBwdXJlLCBubyBsb2NhdGlvbnMnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjEzNTogR0xSOiBSZXNvbHZlIGFtYmlndWl0eSwgcHVyZSwgbm8gbG9jYXRpb25zICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjEzNS4gY3h4LXR5cGUuYXQ6NDI1OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDAzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImN4eC10eXBlLmF0OjQwMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gIjE3LjU6IHN5bnRheCBlcnJvcgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0KLQotCi0KLSMgVXNpbmcgeWFjYy5jPwotCi0KLQotCi0KLQotCi0jIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmICVsb2NhdGlvbiAmICVwdXJlICYgKCVnbHIgb3IgJXBhcnNlLXBhcmFtKS4KLQotIyB5eWVycm9yIGFsd2F5cyBzZWVzIHRoZSBsb2NhdGlvbnMgKHdoZW4gYWN0aXZhdGVkKSwgZXhjZXB0IGlmCi0jIHlhY2MgJiBwdXJlICYgIXBhcmFtLgotCi0KLSMgVGhlIGludGVyZmFjZSBpcyBwdXJlOiBlaXRoZXIgYmVjYXVzZSAlcHVyZS1wYXJzZXIsIG9yIGJlY2F1c2Ugd2UKLSMgYXJlIHVzaW5nIHRoZSBDKysgcGFyc2Vycy4KLQotCi0KLQotCi0KLQotCi0KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMzIzCisjQVRfU1RBUlRfMzI0CithdF9mbl9ncm91cF9iYW5uZXIgMzI0ICdjeHgtdHlwZS5hdDo0MDcnIFwKKyAgIkdMUjogUmVzb2x2ZSBhbWJpZ3VpdHksIHB1cmUsIG5vIGxvY2F0aW9ucyIgIiAgICAgIiAyMQorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjMyNC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCiAKIAogY2F0ID50eXBlcy55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogLyogU2ltcGxpZmllZCBDKysgVHlwZSBhbmQgRXhwcmVzc2lvbiBHcmFtbWFyLiAgKi8KIAotJXB1cmUtcGFyc2VyCislZGVmaW5lIGFwaS5wdXJlCiAKLSV7CislY29kZSByZXF1aXJlcworewogICAjaW5jbHVkZSA8c3RkaW8uaD4KICAgdW5pb24gTm9kZSB7CiAgICAgc3RydWN0IHsKQEAgLTYwNzU4LDMyICsxNzAxMjAsMjEgQEAKICAgICB9IHRlcm07CiAgIH07CiAgIHR5cGVkZWYgdW5pb24gTm9kZSBOb2RlOworICAjZGVmaW5lIFlZU1RZUEUgTm9kZSAqCit9CisKKyVjb2RlCit7CiAgIHN0YXRpYyBOb2RlICpuZXdfbnRlcm0gKGNoYXIgY29uc3QgKiwgTm9kZSAqLCBOb2RlICosIE5vZGUgKik7CiAgIHN0YXRpYyBOb2RlICpuZXdfdGVybSAoY2hhciAqKTsKICAgc3RhdGljIHZvaWQgZnJlZV9ub2RlIChOb2RlICopOwogICBzdGF0aWMgY2hhciAqbm9kZV90b19zdHJpbmcgKE5vZGUgKik7Ci0gICNkZWZpbmUgWVlTVFlQRSBOb2RlICoKIAogICAjZGVmaW5lIFlZSU5JVERFUFRIIDEwCiAgICNkZWZpbmUgWVlTVEFDS0VYUEFOREFCTEUgMQotICBzdHJ1Y3QgWVlMVFlQRTsKLSNpZiBZWVBVUkUKLSMgaWYgWVlMU1BfTkVFREVECi0jICBkZWZpbmUgTEVYX1BBUkFNRVRFUlMgWVlTVFlQRSAqbHZhbHAsIHN0cnVjdCBZWUxUWVBFICpsbG9jcAotIyAgZGVmaW5lIEVSUk9SX1BBUkFNRVRFUlMgc3RydWN0IFlZTFRZUEUgKmxsb2NwLCBjaGFyIGNvbnN0ICpzCi0jIGVsc2UKLSMgIGRlZmluZSBMRVhfUEFSQU1FVEVSUyBZWVNUWVBFICpsdmFscAotIyBlbmRpZgotI2VuZGlmCi0jaWZuZGVmIExFWF9QQVJBTUVURVJTCi0jIGRlZmluZSBMRVhfUEFSQU1FVEVSUyB2b2lkCi0jZW5kaWYKLSNpZm5kZWYgRVJST1JfUEFSQU1FVEVSUwotIyBkZWZpbmUgRVJST1JfUEFSQU1FVEVSUyBjaGFyIGNvbnN0ICpzCi0jZW5kaWYKLSAgaW50IHl5bGV4IChMRVhfUEFSQU1FVEVSUyk7Ci0gIHZvaWQgeXllcnJvciAoRVJST1JfUEFSQU1FVEVSUyk7Ci0lfQorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgc3RhdGljIGludCB5eWxleCAoWVlTVFlQRSAqbHZhbHApOworfQogCiAldG9rZW4gVFlQRU5BTUUgSUQKIApAQCAtNjA3OTgsMzIgKzE3MDE0OSwzMiBAQAogCiBwcm9nIDoKICAgICAgfCBwcm9nIHN0bXQgICB7Ci0JCQljaGFyICpvdXRwdXQ7Ci0JCQlvdXRwdXQgPSBub2RlX3RvX3N0cmluZyAoJDIpOwotCQkJcHJpbnRmICgiJXNcbiIsIG91dHB1dCk7Ci0JCQlmcmVlIChvdXRwdXQpOwotCQkJZnJlZV9ub2RlICgkMik7Ci0JCSAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm91dHB1dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG5vZGVfdG9fc3RyaW5nICgkMik7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIlc1xuIiwgb3V0cHV0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUgKG91dHB1dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVlX25vZGUgKCQyKTsKKyAgICAgICAgICAgICAgICAgICB9CiAgICAgIDsKIAotc3RtdCA6IGV4cHIgJzsnICAlZHByZWMgMQl7ICQkID0gJDE7IH0KK3N0bXQgOiBleHByICc7JyAgJWRwcmVjIDEgICAgIHsgJCQgPSAkMTsgfQogICAgICB8IGRlY2wgICAgICAlZHByZWMgMgotICAgICB8IGVycm9yICc7Jwl7ICQkID0gbmV3X250ZXJtICgiPGVycm9yPiIsIDAsIDAsIDApOyB9Ci0gICAgIHwgJ0AnCQl7IFlZQUNDRVBUOyB9CisgICAgIHwgZXJyb3IgJzsnICAgICAgICB7ICQkID0gbmV3X250ZXJtICgiPGVycm9yPiIsIFlZX05VTEwsIFlZX05VTEwsIFlZX05VTEwpOyB9CisgICAgIHwgJ0AnICAgICAgICAgICAgICB7IFlZQUNDRVBUOyB9CiAgICAgIDsKIAogZXhwciA6IElECiAgICAgIHwgVFlQRU5BTUUgJygnIGV4cHIgJyknCi0JCQl7ICQkID0gbmV3X250ZXJtICgiPGNhc3Q+KCVzLCVzKSIsICQzLCAkMSwgMCk7IH0KLSAgICAgfCBleHByICcrJyBleHByCXsgJCQgPSBuZXdfbnRlcm0gKCIrKCVzLCVzKSIsICQxLCAkMywgMCk7IH0KLSAgICAgfCBleHByICc9JyBleHByICAgIHsgJCQgPSBuZXdfbnRlcm0gKCI9KCVzLCVzKSIsICQxLCAkMywgMCk7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBuZXdfbnRlcm0gKCI8Y2FzdD4oJXMsJXMpIiwgJDMsICQxLCBZWV9OVUxMKTsgfQorICAgICB8IGV4cHIgJysnIGV4cHIgICAgeyAkJCA9IG5ld19udGVybSAoIisoJXMsJXMpIiwgJDEsICQzLCBZWV9OVUxMKTsgfQorICAgICB8IGV4cHIgJz0nIGV4cHIgICAgeyAkJCA9IG5ld19udGVybSAoIj0oJXMsJXMpIiwgJDEsICQzLCBZWV9OVUxMKTsgfQogICAgICA7CiAKIGRlY2wgOiBUWVBFTkFNRSBkZWNsYXJhdG9yICc7JwotCQkJeyAkJCA9IG5ld19udGVybSAoIjxkZWNsYXJlPiglcywlcykiLCAkMSwgJDIsIDApOyB9CisgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3X250ZXJtICgiPGRlY2xhcmU+KCVzLCVzKSIsICQxLCAkMiwgWVlfTlVMTCk7IH0KICAgICAgfCBUWVBFTkFNRSBkZWNsYXJhdG9yICc9JyBleHByICc7JwotCQkJeyAkJCA9IG5ld19udGVybSAoIjxpbml0LWRlY2xhcmU+KCVzLCVzLCVzKSIsICQxLAotCQkJCQkgICQyLCAkNCk7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBuZXdfbnRlcm0gKCI8aW5pdC1kZWNsYXJlPiglcywlcywlcykiLCAkMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQyLCAkNCk7IH0KICAgICAgOwogCiBkZWNsYXJhdG9yIDogSUQKQEAgLTYwODM2LDE5ICsxNzAxODcsMjYgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KIAogaW50CiBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7Ci0gIGlmIChhcmdjICE9IDIpCi0gICAgYWJvcnQgKCk7CisgIGFzc2VydCAoYXJnYyA9PSAyKTsKICAgaWYgKCFmcmVvcGVuIChhcmd2WzFdLCAiciIsIHN0ZGluKSkKICAgICByZXR1cm4gMzsKICAgcmV0dXJuIHl5cGFyc2UgKCk7CiB9CiAKLWludAoteXlsZXggKExFWF9QQVJBTUVURVJTKQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKworaW50IHl5bGV4IChZWVNUWVBFICpsdmFscCkKIHsKICAgY2hhciBidWZmZXJbMjU2XTsKICAgaW50IGM7CkBAIC02MDg2NSw3MyArMTcwMjIzLDU1IEBACiAKICAgd2hpbGUgKDEpCiAgICAgeworICAgICAgYXNzZXJ0ICghZmVvZiAoc3RkaW4pKTsKICAgICAgIGMgPSBnZXRjaGFyICgpOwogICAgICAgc3dpdGNoIChjKQotCXsKLQljYXNlIEVPRjoKLQkgIHJldHVybiAwOwotCWNhc2UgJ1x0JzoKLQkgIGNvbE51bSA9IChjb2xOdW0gKyA3KSAmIH43OwotCSAgYnJlYWs7Ci0JY2FzZSAnICc6IGNhc2UgJ1xmJzoKLQkgIGNvbE51bSArPSAxOwotCSAgYnJlYWs7Ci0JY2FzZSAnXG4nOgotCSAgbGluZU51bSArPSAxOwotCSAgY29sTnVtID0gMDsKLQkgIGJyZWFrOwotCWRlZmF1bHQ6Ci0JICB7Ci0JICAgIGludCB0b2s7Ci0jaWYgWVlMU1BfTkVFREVECi0JICAgIHl5bGxvYy5maXJzdF9saW5lID0geXlsbG9jLmxhc3RfbGluZSA9IGxpbmVOdW07Ci0JICAgIHl5bGxvYy5maXJzdF9jb2x1bW4gPSBjb2xOdW07Ci0jZW5kaWYKLQkgICAgaWYgKGlzYWxwaGEgKGMpKQotCSAgICAgIHsKLQkJaSA9IDA7CisgICAgICAgIHsKKyAgICAgICAgY2FzZSBFT0Y6CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgJ1x0JzoKKyAgICAgICAgICBjb2xOdW0gPSAoY29sTnVtICsgNykgJiB+NzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnICc6IGNhc2UgJ1xmJzoKKyAgICAgICAgICBjb2xOdW0gKz0gMTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnXG4nOgorICAgICAgICAgIGxpbmVOdW0gKz0gMTsKKyAgICAgICAgICBjb2xOdW0gPSAwOworICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHsKKyAgICAgICAgICAgIGludCB0b2s7CisgICAgICAgICAgICBpZiAoaXNhbHBoYSAoYykpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpID0gMDsKIAotCQlkbwotCQkgIHsKLQkJICAgIGJ1ZmZlcltpKytdID0gYzsKLQkJICAgIGNvbE51bSArPSAxOwotCQkgICAgaWYgKGkgPT0gc2l6ZW9mIGJ1ZmZlciAtIDEpCi0JCSAgICAgIGFib3J0ICgpOwotCQkgICAgYyA9IGdldGNoYXIgKCk7Ci0JCSAgfQotCQl3aGlsZSAoaXNhbG51bSAoYykgfHwgYyA9PSAnXycpOworICAgICAgICAgICAgICAgIGRvCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpKytdID0gYzsKKyAgICAgICAgICAgICAgICAgICAgY29sTnVtICs9IDE7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCAoaSAhPSBzaXplb2YgYnVmZmVyIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIGMgPSBnZXRjaGFyICgpOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdoaWxlIChpc2FsbnVtIChjKSB8fCBjID09ICdfJyk7CiAKLQkJdW5nZXRjIChjLCBzdGRpbik7Ci0JCWJ1ZmZlcltpKytdID0gMDsKLQkJdG9rID0gaXN1cHBlciAoKHVuc2lnbmVkIGNoYXIpIGJ1ZmZlclswXSkgPyBUWVBFTkFNRSA6IElEOwotCQl5eWx2YWwgPSBuZXdfdGVybSAoc3RyY3B5ICgoY2hhciAqKSBtYWxsb2MgKGkpLCBidWZmZXIpKTsKLQkgICAgICB9Ci0JICAgIGVsc2UKLQkgICAgICB7Ci0JCWNvbE51bSArPSAxOwotCQl0b2sgPSBjOwotCQl5eWx2YWwgPSAwOwotCSAgICAgIH0KLSNpZiBZWUxTUF9ORUVERUQKLQkgICAgeXlsbG9jLmxhc3RfY29sdW1uID0gY29sTnVtLTE7Ci0jZW5kaWYKLQkgICAgcmV0dXJuIHRvazsKLQkgIH0KLQl9CisgICAgICAgICAgICAgICAgdW5nZXRjIChjLCBzdGRpbik7CisgICAgICAgICAgICAgICAgYnVmZmVyW2krK10gPSAwOworICAgICAgICAgICAgICAgIHRvayA9IGlzdXBwZXIgKCh1bnNpZ25lZCBjaGFyKSBidWZmZXJbMF0pID8gVFlQRU5BTUUgOiBJRDsKKyAgICAgICAgICAgICAgICB5eWx2YWwgPSBuZXdfdGVybSAoc3RyY3B5ICgoY2hhciAqKSBtYWxsb2MgKGkpLCBidWZmZXIpKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29sTnVtICs9IDE7CisgICAgICAgICAgICAgICAgdG9rID0gYzsKKyAgICAgICAgICAgICAgICB5eWx2YWwgPSBZWV9OVUxMOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdG9rOworICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZAoteXllcnJvciAoRVJST1JfUEFSQU1FVEVSUykKLXsKLSNpZiBZWVBVUkUgJiYgWVlMU1BfTkVFREVECi0gIC8qIFBhY2lmeSBHQ0MgYnkgdXNpbmcgbGxvY3AuICAqLwotICBpZiAoISBsbG9jcCkKLSAgICBhYm9ydCAoKTsKLSNlbmRpZgotICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgcyk7Ci19Ci0KIHN0YXRpYyBOb2RlICoKIG5ld19udGVybSAoY2hhciBjb25zdCAqZm9ybSwgTm9kZSAqY2hpbGQwLCBOb2RlICpjaGlsZDEsIE5vZGUgKmNoaWxkMikKIHsKQEAgLTYwOTk5LDcgKzE3MDMzOSw3IEBACiAgICAgICBjaGlsZDEgPSBub2RlX3RvX3N0cmluZyAobm9kZS0+bnRlcm0uY2hpbGRyZW5bMV0pOwogICAgICAgY2hpbGQyID0gbm9kZV90b19zdHJpbmcgKG5vZGUtPm50ZXJtLmNoaWxkcmVuWzJdKTsKICAgICAgIGJ1ZmZlciA9IChjaGFyICopIG1hbGxvYyAoc3RybGVuIChub2RlLT5udGVybS5mb3JtKSArIHN0cmxlbiAoY2hpbGQwKQotCQkJCSsgc3RybGVuIChjaGlsZDEpICsgc3RybGVuIChjaGlsZDIpICsgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3RybGVuIChjaGlsZDEpICsgc3RybGVuIChjaGlsZDIpICsgMSk7CiAgICAgICBzcHJpbnRmIChidWZmZXIsIG5vZGUtPm50ZXJtLmZvcm0sIGNoaWxkMCwgY2hpbGQxLCBjaGlsZDIpOwogICAgICAgZnJlZSAoY2hpbGQwKTsKICAgICAgIGZyZWUgKGNoaWxkMSk7CkBAIC02MTA0Myw4OSArMTcwMzgzLDEyOSBAQAogX0FURU9GCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjeHgtdHlwZS5hdDo0Mjc6IGJpc29uIC1vIHR5cGVzLmMgdHlwZXMueSIKLWVjaG8gY3h4LXR5cGUuYXQ6NDI3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtbyB0eXBlcy5jIHR5cGVzLnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY3h4LXR5cGUuYXQ6NDI3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQwODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIHR5cGVzLmMgdHlwZXMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImN4eC10eXBlLmF0OjQwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyB0eXBlcy5jIHR5cGVzLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQwOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDA4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyB0eXBlcy5jIHR5cGVzLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gdHlwZXMuYyB0eXBlcy55IiAiY3h4LXR5cGUuYXQ6NDA4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIHR5cGVzLmMgdHlwZXMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQwODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImN4eC10eXBlLmF0OjQwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MDg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjeHgtdHlwZS5hdDo0MDgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDA4OiBiaXNvbiAtbyB0eXBlcy5jIHR5cGVzLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjeHgtdHlwZS5hdDo0MDgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gdHlwZXMuYyB0eXBlcy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjeHgtdHlwZS5hdDo0Mjc6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gdHlwZXMgdHlwZXMuYyBcJExJQlMiCi1lY2hvIGN4eC10eXBlLmF0OjQyNyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIHR5cGVzIHR5cGVzLmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY3h4LXR5cGUuYXQ6NDI3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDA4OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiY3h4LXR5cGUuYXQ6NDA4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDA4OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIHR5cGVzIHR5cGVzLmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gdHlwZXMgdHlwZXMuYyAkTElCUyIgImN4eC10eXBlLmF0OjQwOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gdHlwZXMgdHlwZXMuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDA4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0kYXRfdHJhY2VvZmYKLWVjaG8gImN4eC10eXBlLmF0OjQyOTogXCRQUkVQQVJTRVIgLi90eXBlcyB0ZXN0LWlucHV0IgotZWNobyBjeHgtdHlwZS5hdDo0MjkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi90eXBlcyB0ZXN0LWlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gPj4kYXRfc3RkZXJyOyBlY2hvICJzeW50YXggZXJyb3IKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gPj4kYXRfc3Rkb3V0OyBlY2hvICIrKHoscSkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MTA6ICBcJFBSRVBBUlNFUiAuL3R5cGVzIHRlc3QtaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vdHlwZXMgdGVzdC1pbnB1dCIgImN4eC10eXBlLmF0OjQxMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL3R5cGVzIHRlc3QtaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiKyh6LHEpCiA8ZGVjbGFyZT4oVCx4KQogPGluaXQtZGVjbGFyZT4oVCx4LHkpCiA9KHgseSkKQEAgLTYxMTM0LDg2ICsxNzA1MTQsNTggQEAKIDxpbml0LWRlY2xhcmU+KFQseSwrKHoscSkpCiA8ZXJyb3I+CiArKHoscSkKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImN4eC10eXBlLmF0OjQyOTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDEwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICAxMzYgKSAjIDEzNi4gY3h4LXR5cGUuYXQ6NDMyOiBHTFI6IFJlc29sdmUgYW1iaWd1aXR5LCBwdXJlLCBsb2NhdGlvbnMKLSAgICBhdF9zZXR1cF9saW5lPSdjeHgtdHlwZS5hdDo0MzInCi0gICAgYXRfZGVzYz0nR0xSOiBSZXNvbHZlIGFtYmlndWl0eSwgcHVyZSwgbG9jYXRpb25zJwotICAgICRhdF9xdWlldCAkRUNIT19OICIxMzY6IEdMUjogUmVzb2x2ZSBhbWJpZ3VpdHksIHB1cmUsIGxvY2F0aW9ucyAgICAgICRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIxMzYuIGN4eC10eXBlLmF0OjQzMjogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQxMDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjeHgtdHlwZS5hdDo0MTAiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzeW50YXggZXJyb3IKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQxMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotCi0KLQotCi0jIFVzaW5nIHlhY2MuYz8KLQotCi0KLQotCi0KLQotIyB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZiAlbG9jYXRpb24gJiAlcHVyZSAmICglZ2xyIG9yICVwYXJzZS1wYXJhbSkuCi0KLSMgeXllcnJvciBhbHdheXMgc2VlcyB0aGUgbG9jYXRpb25zICh3aGVuIGFjdGl2YXRlZCksIGV4Y2VwdCBpZgotIyB5YWNjICYgcHVyZSAmICFwYXJhbS4KLQotCi0jIFRoZSBpbnRlcmZhY2UgaXMgcHVyZTogZWl0aGVyIGJlY2F1c2UgJXB1cmUtcGFyc2VyLCBvciBiZWNhdXNlIHdlCi0jIGFyZSB1c2luZyB0aGUgQysrIHBhcnNlcnMuCi0KLQotCi0KLQotCi0KLQotCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzMyNAorI0FUX1NUQVJUXzMyNQorYXRfZm5fZ3JvdXBfYmFubmVyIDMyNSAnY3h4LXR5cGUuYXQ6NDE0JyBcCisgICJHTFI6IFJlc29sdmUgYW1iaWd1aXR5LCBwdXJlLCBsb2NhdGlvbnMiICIgICAgICAgICIgMjEKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIzMjUuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiAKIGNhdCA+dHlwZXMueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKIC8qIFNpbXBsaWZpZWQgQysrIFR5cGUgYW5kIEV4cHJlc3Npb24gR3JhbW1hci4gICovCiAKLSVwdXJlLXBhcnNlciAlbG9jYXRpb25zCislZGVmaW5lIGFwaS5wdXJlICVsb2NhdGlvbnMKIAotJXsKKyVjb2RlIHJlcXVpcmVzCit7CiAgICNpbmNsdWRlIDxzdGRpby5oPgogICB1bmlvbiBOb2RlIHsKICAgICBzdHJ1Y3QgewpAQCAtNjEyMzMsMzIgKzE3MDU4NSwyMSBAQAogICAgIH0gdGVybTsKICAgfTsKICAgdHlwZWRlZiB1bmlvbiBOb2RlIE5vZGU7CisgICNkZWZpbmUgWVlTVFlQRSBOb2RlICoKK30KKworJWNvZGUKK3sKICAgc3RhdGljIE5vZGUgKm5ld19udGVybSAoY2hhciBjb25zdCAqLCBOb2RlICosIE5vZGUgKiwgTm9kZSAqKTsKICAgc3RhdGljIE5vZGUgKm5ld190ZXJtIChjaGFyICopOwogICBzdGF0aWMgdm9pZCBmcmVlX25vZGUgKE5vZGUgKik7CiAgIHN0YXRpYyBjaGFyICpub2RlX3RvX3N0cmluZyAoTm9kZSAqKTsKLSAgI2RlZmluZSBZWVNUWVBFIE5vZGUgKgogCiAgICNkZWZpbmUgWVlJTklUREVQVEggMTAKICAgI2RlZmluZSBZWVNUQUNLRVhQQU5EQUJMRSAxCi0gIHN0cnVjdCBZWUxUWVBFOwotI2lmIFlZUFVSRQotIyBpZiBZWUxTUF9ORUVERUQKLSMgIGRlZmluZSBMRVhfUEFSQU1FVEVSUyBZWVNUWVBFICpsdmFscCwgc3RydWN0IFlZTFRZUEUgKmxsb2NwCi0jICBkZWZpbmUgRVJST1JfUEFSQU1FVEVSUyBzdHJ1Y3QgWVlMVFlQRSAqbGxvY3AsIGNoYXIgY29uc3QgKnMKLSMgZWxzZQotIyAgZGVmaW5lIExFWF9QQVJBTUVURVJTIFlZU1RZUEUgKmx2YWxwCi0jIGVuZGlmCi0jZW5kaWYKLSNpZm5kZWYgTEVYX1BBUkFNRVRFUlMKLSMgZGVmaW5lIExFWF9QQVJBTUVURVJTIHZvaWQKLSNlbmRpZgotI2lmbmRlZiBFUlJPUl9QQVJBTUVURVJTCi0jIGRlZmluZSBFUlJPUl9QQVJBTUVURVJTIGNoYXIgY29uc3QgKnMKLSNlbmRpZgotICBpbnQgeXlsZXggKExFWF9QQVJBTUVURVJTKTsKLSAgdm9pZCB5eWVycm9yIChFUlJPUl9QQVJBTUVURVJTKTsKLSV9CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKFlZTFRZUEUgY29uc3QgKiBjb25zdCBsbG9jcCwgIGNvbnN0IGNoYXIgKm1zZyk7CisgIHN0YXRpYyBpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCk7Cit9CiAKICV0b2tlbiBUWVBFTkFNRSBJRAogCkBAIC02MTI3MywzNSArMTcwNjE0LDM1IEBACiAKIHByb2cgOgogICAgICB8IHByb2cgc3RtdCAgIHsKLQkJCWNoYXIgKm91dHB1dDsKLQkJCXByaW50ZiAoIiVkLiVkLSVkLiVkOiAiLAotCQkJICAgICBAMi5maXJzdF9saW5lLCBAMi5maXJzdF9jb2x1bW4sCi0JCQkgICAgIEAyLmxhc3RfbGluZSwgQDIubGFzdF9jb2x1bW4pOwotCQkJb3V0cHV0ID0gbm9kZV90b19zdHJpbmcgKCQyKTsKLQkJCXByaW50ZiAoIiVzXG4iLCBvdXRwdXQpOwotCQkJZnJlZSAob3V0cHV0KTsKLQkJCWZyZWVfbm9kZSAoJDIpOwotCQkgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpvdXRwdXQ7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIlZC4lZC0lZC4lZDogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDIuZmlyc3RfbGluZSwgQDIuZmlyc3RfY29sdW1uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMi5sYXN0X2xpbmUsIEAyLmxhc3RfY29sdW1uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG5vZGVfdG9fc3RyaW5nICgkMik7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIlc1xuIiwgb3V0cHV0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUgKG91dHB1dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVlX25vZGUgKCQyKTsKKyAgICAgICAgICAgICAgICAgICB9CiAgICAgIDsKIAotc3RtdCA6IGV4cHIgJzsnICAlZHByZWMgMQl7ICQkID0gJDE7IH0KK3N0bXQgOiBleHByICc7JyAgJWRwcmVjIDEgICAgIHsgJCQgPSAkMTsgfQogICAgICB8IGRlY2wgICAgICAlZHByZWMgMgotICAgICB8IGVycm9yICc7Jwl7ICQkID0gbmV3X250ZXJtICgiPGVycm9yPiIsIDAsIDAsIDApOyB9Ci0gICAgIHwgJ0AnCQl7IFlZQUNDRVBUOyB9CisgICAgIHwgZXJyb3IgJzsnICAgICAgICB7ICQkID0gbmV3X250ZXJtICgiPGVycm9yPiIsIFlZX05VTEwsIFlZX05VTEwsIFlZX05VTEwpOyB9CisgICAgIHwgJ0AnICAgICAgICAgICAgICB7IFlZQUNDRVBUOyB9CiAgICAgIDsKIAogZXhwciA6IElECiAgICAgIHwgVFlQRU5BTUUgJygnIGV4cHIgJyknCi0JCQl7ICQkID0gbmV3X250ZXJtICgiPGNhc3Q+KCVzLCVzKSIsICQzLCAkMSwgMCk7IH0KLSAgICAgfCBleHByICcrJyBleHByCXsgJCQgPSBuZXdfbnRlcm0gKCIrKCVzLCVzKSIsICQxLCAkMywgMCk7IH0KLSAgICAgfCBleHByICc9JyBleHByICAgIHsgJCQgPSBuZXdfbnRlcm0gKCI9KCVzLCVzKSIsICQxLCAkMywgMCk7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBuZXdfbnRlcm0gKCI8Y2FzdD4oJXMsJXMpIiwgJDMsICQxLCBZWV9OVUxMKTsgfQorICAgICB8IGV4cHIgJysnIGV4cHIgICAgeyAkJCA9IG5ld19udGVybSAoIisoJXMsJXMpIiwgJDEsICQzLCBZWV9OVUxMKTsgfQorICAgICB8IGV4cHIgJz0nIGV4cHIgICAgeyAkJCA9IG5ld19udGVybSAoIj0oJXMsJXMpIiwgJDEsICQzLCBZWV9OVUxMKTsgfQogICAgICA7CiAKIGRlY2wgOiBUWVBFTkFNRSBkZWNsYXJhdG9yICc7JwotCQkJeyAkJCA9IG5ld19udGVybSAoIjxkZWNsYXJlPiglcywlcykiLCAkMSwgJDIsIDApOyB9CisgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3X250ZXJtICgiPGRlY2xhcmU+KCVzLCVzKSIsICQxLCAkMiwgWVlfTlVMTCk7IH0KICAgICAgfCBUWVBFTkFNRSBkZWNsYXJhdG9yICc9JyBleHByICc7JwotCQkJeyAkJCA9IG5ld19udGVybSAoIjxpbml0LWRlY2xhcmU+KCVzLCVzLCVzKSIsICQxLAotCQkJCQkgICQyLCAkNCk7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBuZXdfbnRlcm0gKCI8aW5pdC1kZWNsYXJlPiglcywlcywlcykiLCAkMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQyLCAkNCk7IH0KICAgICAgOwogCiBkZWNsYXJhdG9yIDogSUQKQEAgLTYxMzE0LDE5ICsxNzA2NTUsMjggQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KIAogaW50CiBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7Ci0gIGlmIChhcmdjICE9IDIpCi0gICAgYWJvcnQgKCk7CisgIGFzc2VydCAoYXJnYyA9PSAyKTsKICAgaWYgKCFmcmVvcGVuIChhcmd2WzFdLCAiciIsIHN0ZGluKSkKICAgICByZXR1cm4gMzsKICAgcmV0dXJuIHl5cGFyc2UgKCk7CiB9CiAKLWludAoteXlsZXggKExFWF9QQVJBTUVURVJTKQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yIChZWUxUWVBFIGNvbnN0ICogY29uc3QgbGxvY3AsICBjb25zdCBjaGFyICptc2cpCit7CisgIFlZX0xPQ0FUSU9OX1BSSU5UIChzdGRlcnIsICgqbGxvY3ApKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiOiAiKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisKK2ludCB5eWxleCAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKQogewogICBjaGFyIGJ1ZmZlclsyNTZdOwogICBpbnQgYzsKQEAgLTYxMzQzLDczICsxNzA2OTMsNTggQEAKIAogICB3aGlsZSAoMSkKICAgICB7CisgICAgICBhc3NlcnQgKCFmZW9mIChzdGRpbikpOwogICAgICAgYyA9IGdldGNoYXIgKCk7CiAgICAgICBzd2l0Y2ggKGMpCi0JewotCWNhc2UgRU9GOgotCSAgcmV0dXJuIDA7Ci0JY2FzZSAnXHQnOgotCSAgY29sTnVtID0gKGNvbE51bSArIDcpICYgfjc7Ci0JICBicmVhazsKLQljYXNlICcgJzogY2FzZSAnXGYnOgotCSAgY29sTnVtICs9IDE7Ci0JICBicmVhazsKLQljYXNlICdcbic6Ci0JICBsaW5lTnVtICs9IDE7Ci0JICBjb2xOdW0gPSAwOwotCSAgYnJlYWs7Ci0JZGVmYXVsdDoKLQkgIHsKLQkgICAgaW50IHRvazsKLSNpZiBZWUxTUF9ORUVERUQKLQkgICAgeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxsb2MubGFzdF9saW5lID0gbGluZU51bTsKLQkgICAgeXlsbG9jLmZpcnN0X2NvbHVtbiA9IGNvbE51bTsKLSNlbmRpZgotCSAgICBpZiAoaXNhbHBoYSAoYykpCi0JICAgICAgewotCQlpID0gMDsKKyAgICAgICAgeworICAgICAgICBjYXNlIEVPRjoKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSAnXHQnOgorICAgICAgICAgIGNvbE51bSA9IChjb2xOdW0gKyA3KSAmIH43OworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICcgJzogY2FzZSAnXGYnOgorICAgICAgICAgIGNvbE51bSArPSAxOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdcbic6CisgICAgICAgICAgbGluZU51bSArPSAxOworICAgICAgICAgIGNvbE51bSA9IDA7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgeworICAgICAgICAgICAgaW50IHRvazsKKyAgICAgICAgICAgIHl5bGxvYy5maXJzdF9saW5lID0geXlsbG9jLmxhc3RfbGluZSA9IGxpbmVOdW07CisgICAgICAgICAgICB5eWxsb2MuZmlyc3RfY29sdW1uID0gY29sTnVtOworICAgICAgICAgICAgaWYgKGlzYWxwaGEgKGMpKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaSA9IDA7CiAKLQkJZG8KLQkJICB7Ci0JCSAgICBidWZmZXJbaSsrXSA9IGM7Ci0JCSAgICBjb2xOdW0gKz0gMTsKLQkJICAgIGlmIChpID09IHNpemVvZiBidWZmZXIgLSAxKQotCQkgICAgICBhYm9ydCAoKTsKLQkJICAgIGMgPSBnZXRjaGFyICgpOwotCQkgIH0KLQkJd2hpbGUgKGlzYWxudW0gKGMpIHx8IGMgPT0gJ18nKTsKKyAgICAgICAgICAgICAgICBkbworICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBidWZmZXJbaSsrXSA9IGM7CisgICAgICAgICAgICAgICAgICAgIGNvbE51bSArPSAxOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQgKGkgIT0gc2l6ZW9mIGJ1ZmZlciAtIDEpOworICAgICAgICAgICAgICAgICAgICBjID0gZ2V0Y2hhciAoKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3aGlsZSAoaXNhbG51bSAoYykgfHwgYyA9PSAnXycpOwogCi0JCXVuZ2V0YyAoYywgc3RkaW4pOwotCQlidWZmZXJbaSsrXSA9IDA7Ci0JCXRvayA9IGlzdXBwZXIgKCh1bnNpZ25lZCBjaGFyKSBidWZmZXJbMF0pID8gVFlQRU5BTUUgOiBJRDsKLQkJeXlsdmFsID0gbmV3X3Rlcm0gKHN0cmNweSAoKGNoYXIgKikgbWFsbG9jIChpKSwgYnVmZmVyKSk7Ci0JICAgICAgfQotCSAgICBlbHNlCi0JICAgICAgewotCQljb2xOdW0gKz0gMTsKLQkJdG9rID0gYzsKLQkJeXlsdmFsID0gMDsKLQkgICAgICB9Ci0jaWYgWVlMU1BfTkVFREVECi0JICAgIHl5bGxvYy5sYXN0X2NvbHVtbiA9IGNvbE51bS0xOwotI2VuZGlmCi0JICAgIHJldHVybiB0b2s7Ci0JICB9Ci0JfQorICAgICAgICAgICAgICAgIHVuZ2V0YyAoYywgc3RkaW4pOworICAgICAgICAgICAgICAgIGJ1ZmZlcltpKytdID0gMDsKKyAgICAgICAgICAgICAgICB0b2sgPSBpc3VwcGVyICgodW5zaWduZWQgY2hhcikgYnVmZmVyWzBdKSA/IFRZUEVOQU1FIDogSUQ7CisgICAgICAgICAgICAgICAgeXlsdmFsID0gbmV3X3Rlcm0gKHN0cmNweSAoKGNoYXIgKikgbWFsbG9jIChpKSwgYnVmZmVyKSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbE51bSArPSAxOworICAgICAgICAgICAgICAgIHRvayA9IGM7CisgICAgICAgICAgICAgICAgeXlsdmFsID0gWVlfTlVMTDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgeXlsbG9jLmxhc3RfY29sdW1uID0gY29sTnVtLTE7CisgICAgICAgICAgICByZXR1cm4gdG9rOworICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZAoteXllcnJvciAoRVJST1JfUEFSQU1FVEVSUykKLXsKLSNpZiBZWVBVUkUgJiYgWVlMU1BfTkVFREVECi0gIC8qIFBhY2lmeSBHQ0MgYnkgdXNpbmcgbGxvY3AuICAqLwotICBpZiAoISBsbG9jcCkKLSAgICBhYm9ydCAoKTsKLSNlbmRpZgotICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgcyk7Ci19Ci0KIHN0YXRpYyBOb2RlICoKIG5ld19udGVybSAoY2hhciBjb25zdCAqZm9ybSwgTm9kZSAqY2hpbGQwLCBOb2RlICpjaGlsZDEsIE5vZGUgKmNoaWxkMikKIHsKQEAgLTYxNDc3LDcgKzE3MDgxMiw3IEBACiAgICAgICBjaGlsZDEgPSBub2RlX3RvX3N0cmluZyAobm9kZS0+bnRlcm0uY2hpbGRyZW5bMV0pOwogICAgICAgY2hpbGQyID0gbm9kZV90b19zdHJpbmcgKG5vZGUtPm50ZXJtLmNoaWxkcmVuWzJdKTsKICAgICAgIGJ1ZmZlciA9IChjaGFyICopIG1hbGxvYyAoc3RybGVuIChub2RlLT5udGVybS5mb3JtKSArIHN0cmxlbiAoY2hpbGQwKQotCQkJCSsgc3RybGVuIChjaGlsZDEpICsgc3RybGVuIChjaGlsZDIpICsgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3RybGVuIChjaGlsZDEpICsgc3RybGVuIChjaGlsZDIpICsgMSk7CiAgICAgICBzcHJpbnRmIChidWZmZXIsIG5vZGUtPm50ZXJtLmZvcm0sIGNoaWxkMCwgY2hpbGQxLCBjaGlsZDIpOwogICAgICAgZnJlZSAoY2hpbGQwKTsKICAgICAgIGZyZWUgKGNoaWxkMSk7CkBAIC02MTUyMSw4OSArMTcwODU2LDEyOSBAQAogX0FURU9GCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjeHgtdHlwZS5hdDo0MzQ6IGJpc29uIC1vIHR5cGVzLmMgdHlwZXMueSIKLWVjaG8gY3h4LXR5cGUuYXQ6NDM0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtbyB0eXBlcy5jIHR5cGVzLnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY3h4LXR5cGUuYXQ6NDM0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQxNTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIHR5cGVzLmMgdHlwZXMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImN4eC10eXBlLmF0OjQxNSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyB0eXBlcy5jIHR5cGVzLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQxNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDE1OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyB0eXBlcy5jIHR5cGVzLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gdHlwZXMuYyB0eXBlcy55IiAiY3h4LXR5cGUuYXQ6NDE1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIHR5cGVzLmMgdHlwZXMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDE1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQxNTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImN4eC10eXBlLmF0OjQxNSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MTU6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjeHgtdHlwZS5hdDo0MTUiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDE1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDE1OiBiaXNvbiAtbyB0eXBlcy5jIHR5cGVzLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjeHgtdHlwZS5hdDo0MTUiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gdHlwZXMuYyB0eXBlcy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDE1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjeHgtdHlwZS5hdDo0MzQ6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gdHlwZXMgdHlwZXMuYyBcJExJQlMiCi1lY2hvIGN4eC10eXBlLmF0OjQzNCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIHR5cGVzIHR5cGVzLmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY3h4LXR5cGUuYXQ6NDM0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDE1OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiY3h4LXR5cGUuYXQ6NDE1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDE1OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIHR5cGVzIHR5cGVzLmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gdHlwZXMgdHlwZXMuYyAkTElCUyIgImN4eC10eXBlLmF0OjQxNSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gdHlwZXMgdHlwZXMuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDE1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0kYXRfdHJhY2VvZmYKLWVjaG8gImN4eC10eXBlLmF0OjQzNjogXCRQUkVQQVJTRVIgLi90eXBlcyB0ZXN0LWlucHV0IgotZWNobyBjeHgtdHlwZS5hdDo0MzYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi90eXBlcyB0ZXN0LWlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gPj4kYXRfc3RkZXJyOyBlY2hvICJzeW50YXggZXJyb3IKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gPj4kYXRfc3Rkb3V0OyBlY2hvICIzLjAtMy41OiArKHoscSkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MTc6ICBcJFBSRVBBUlNFUiAuL3R5cGVzIHRlc3QtaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vdHlwZXMgdGVzdC1pbnB1dCIgImN4eC10eXBlLmF0OjQxNyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL3R5cGVzIHRlc3QtaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMy4wLTMuNTogKyh6LHEpCiA1LjAtNS4zOiA8ZGVjbGFyZT4oVCx4KQogNy4wLTcuNzogPGluaXQtZGVjbGFyZT4oVCx4LHkpCiA5LjAtOS41OiA9KHgseSkKQEAgLTYxNjEyLDg2ICsxNzA5ODcsNTggQEAKIDE1LjAtMTUuMTM6IDxpbml0LWRlY2xhcmU+KFQseSwrKHoscSkpCiAxNy4wLTE3LjE1OiA8ZXJyb3I+CiAxOS4wLTE5LjU6ICsoeixxKQotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY3h4LXR5cGUuYXQ6NDM2OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCi0KLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwotCi0gIDEzNyApICMgMTM3LiBjeHgtdHlwZS5hdDo0Mzk6IEdMUjogTWVyZ2UgY29uZmxpY3RpbmcgcGFyc2VzLCBpbXB1cmUsIG5vIGxvY2F0aW9ucwotICAgIGF0X3NldHVwX2xpbmU9J2N4eC10eXBlLmF0OjQzOScKLSAgICBhdF9kZXNjPSdHTFI6IE1lcmdlIGNvbmZsaWN0aW5nIHBhcnNlcywgaW1wdXJlLCBubyBsb2NhdGlvbnMnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjEzNzogR0xSOiBNZXJnZSBjb25mbGljdGluZyBwYXJzZXMsIGltcHVyZSwgbm8gbG9jYXRpb25zJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjEzNy4gY3h4LXR5cGUuYXQ6NDM5OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDE3OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImN4eC10eXBlLmF0OjQxNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gIjE3LjU6IHN5bnRheCBlcnJvcgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDE3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0KLQotCi0KLSMgVXNpbmcgeWFjYy5jPwotCi0KLQotCi0KLQotCi0jIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmICVsb2NhdGlvbiAmICVwdXJlICYgKCVnbHIgb3IgJXBhcnNlLXBhcmFtKS4KLQotIyB5eWVycm9yIGFsd2F5cyBzZWVzIHRoZSBsb2NhdGlvbnMgKHdoZW4gYWN0aXZhdGVkKSwgZXhjZXB0IGlmCi0jIHlhY2MgJiBwdXJlICYgIXBhcmFtLgotCi0KLSMgVGhlIGludGVyZmFjZSBpcyBwdXJlOiBlaXRoZXIgYmVjYXVzZSAlcHVyZS1wYXJzZXIsIG9yIGJlY2F1c2Ugd2UKLSMgYXJlIHVzaW5nIHRoZSBDKysgcGFyc2Vycy4KLQotCi0KLQotCi0KLQotCi0KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMzI1CisjQVRfU1RBUlRfMzI2CithdF9mbl9ncm91cF9iYW5uZXIgMzI2ICdjeHgtdHlwZS5hdDo0MjEnIFwKKyAgIkdMUjogTWVyZ2UgY29uZmxpY3RpbmcgcGFyc2VzLCBpbXB1cmUsIG5vIGxvY2F0aW9ucyIgIiIgMjEKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIzMjYuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiAKIGNhdCA+dHlwZXMueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKIC8qIFNpbXBsaWZpZWQgQysrIFR5cGUgYW5kIEV4cHJlc3Npb24gR3JhbW1hci4gICovCiAKIAogCi0leworJWNvZGUgcmVxdWlyZXMKK3sKICAgI2luY2x1ZGUgPHN0ZGlvLmg+CiAgIHVuaW9uIE5vZGUgewogICAgIHN0cnVjdCB7CkBAIC02MTcxMSwzMiArMTcxMDU4LDIxIEBACiAgICAgfSB0ZXJtOwogICB9OwogICB0eXBlZGVmIHVuaW9uIE5vZGUgTm9kZTsKKyAgI2RlZmluZSBZWVNUWVBFIE5vZGUgKgorfQorCislY29kZQorewogICBzdGF0aWMgTm9kZSAqbmV3X250ZXJtIChjaGFyIGNvbnN0ICosIE5vZGUgKiwgTm9kZSAqLCBOb2RlICopOwogICBzdGF0aWMgTm9kZSAqbmV3X3Rlcm0gKGNoYXIgKik7CiAgIHN0YXRpYyB2b2lkIGZyZWVfbm9kZSAoTm9kZSAqKTsKICAgc3RhdGljIGNoYXIgKm5vZGVfdG9fc3RyaW5nIChOb2RlICopOwotICAjZGVmaW5lIFlZU1RZUEUgTm9kZSAqCiAgc3RhdGljIFlZU1RZUEUgc3RtdE1lcmdlIChZWVNUWVBFIHgwLCBZWVNUWVBFIHgxKTsKICAgI2RlZmluZSBZWUlOSVRERVBUSCAxMAogICAjZGVmaW5lIFlZU1RBQ0tFWFBBTkRBQkxFIDEKLSAgc3RydWN0IFlZTFRZUEU7Ci0jaWYgWVlQVVJFCi0jIGlmIFlZTFNQX05FRURFRAotIyAgZGVmaW5lIExFWF9QQVJBTUVURVJTIFlZU1RZUEUgKmx2YWxwLCBzdHJ1Y3QgWVlMVFlQRSAqbGxvY3AKLSMgIGRlZmluZSBFUlJPUl9QQVJBTUVURVJTIHN0cnVjdCBZWUxUWVBFICpsbG9jcCwgY2hhciBjb25zdCAqcwotIyBlbHNlCi0jICBkZWZpbmUgTEVYX1BBUkFNRVRFUlMgWVlTVFlQRSAqbHZhbHAKLSMgZW5kaWYKLSNlbmRpZgotI2lmbmRlZiBMRVhfUEFSQU1FVEVSUwotIyBkZWZpbmUgTEVYX1BBUkFNRVRFUlMgdm9pZAotI2VuZGlmCi0jaWZuZGVmIEVSUk9SX1BBUkFNRVRFUlMKLSMgZGVmaW5lIEVSUk9SX1BBUkFNRVRFUlMgY2hhciBjb25zdCAqcwotI2VuZGlmCi0gIGludCB5eWxleCAoTEVYX1BBUkFNRVRFUlMpOwotICB2b2lkIHl5ZXJyb3IgKEVSUk9SX1BBUkFNRVRFUlMpOwotJX0KKyAgc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CisgIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOworfQogCiAldG9rZW4gVFlQRU5BTUUgSUQKIApAQCAtNjE3NTEsMzIgKzE3MTA4NywzMiBAQAogCiBwcm9nIDoKICAgICAgfCBwcm9nIHN0bXQgICB7Ci0JCQljaGFyICpvdXRwdXQ7Ci0JCQlvdXRwdXQgPSBub2RlX3RvX3N0cmluZyAoJDIpOwotCQkJcHJpbnRmICgiJXNcbiIsIG91dHB1dCk7Ci0JCQlmcmVlIChvdXRwdXQpOwotCQkJZnJlZV9ub2RlICgkMik7Ci0JCSAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm91dHB1dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG5vZGVfdG9fc3RyaW5nICgkMik7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIlc1xuIiwgb3V0cHV0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUgKG91dHB1dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVlX25vZGUgKCQyKTsKKyAgICAgICAgICAgICAgICAgICB9CiAgICAgIDsKIAotc3RtdCA6IGV4cHIgJzsnICAlbWVyZ2UgPHN0bXRNZXJnZT4JeyAkJCA9ICQxOyB9CitzdG10IDogZXhwciAnOycgICVtZXJnZSA8c3RtdE1lcmdlPiAgICAgeyAkJCA9ICQxOyB9CiAgICAgIHwgZGVjbCAgICAgICVtZXJnZSA8c3RtdE1lcmdlPgotICAgICB8IGVycm9yICc7Jwl7ICQkID0gbmV3X250ZXJtICgiPGVycm9yPiIsIDAsIDAsIDApOyB9Ci0gICAgIHwgJ0AnCQl7IFlZQUNDRVBUOyB9CisgICAgIHwgZXJyb3IgJzsnICAgICAgICB7ICQkID0gbmV3X250ZXJtICgiPGVycm9yPiIsIFlZX05VTEwsIFlZX05VTEwsIFlZX05VTEwpOyB9CisgICAgIHwgJ0AnICAgICAgICAgICAgICB7IFlZQUNDRVBUOyB9CiAgICAgIDsKIAogZXhwciA6IElECiAgICAgIHwgVFlQRU5BTUUgJygnIGV4cHIgJyknCi0JCQl7ICQkID0gbmV3X250ZXJtICgiPGNhc3Q+KCVzLCVzKSIsICQzLCAkMSwgMCk7IH0KLSAgICAgfCBleHByICcrJyBleHByCXsgJCQgPSBuZXdfbnRlcm0gKCIrKCVzLCVzKSIsICQxLCAkMywgMCk7IH0KLSAgICAgfCBleHByICc9JyBleHByICAgIHsgJCQgPSBuZXdfbnRlcm0gKCI9KCVzLCVzKSIsICQxLCAkMywgMCk7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBuZXdfbnRlcm0gKCI8Y2FzdD4oJXMsJXMpIiwgJDMsICQxLCBZWV9OVUxMKTsgfQorICAgICB8IGV4cHIgJysnIGV4cHIgICAgeyAkJCA9IG5ld19udGVybSAoIisoJXMsJXMpIiwgJDEsICQzLCBZWV9OVUxMKTsgfQorICAgICB8IGV4cHIgJz0nIGV4cHIgICAgeyAkJCA9IG5ld19udGVybSAoIj0oJXMsJXMpIiwgJDEsICQzLCBZWV9OVUxMKTsgfQogICAgICA7CiAKIGRlY2wgOiBUWVBFTkFNRSBkZWNsYXJhdG9yICc7JwotCQkJeyAkJCA9IG5ld19udGVybSAoIjxkZWNsYXJlPiglcywlcykiLCAkMSwgJDIsIDApOyB9CisgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3X250ZXJtICgiPGRlY2xhcmU+KCVzLCVzKSIsICQxLCAkMiwgWVlfTlVMTCk7IH0KICAgICAgfCBUWVBFTkFNRSBkZWNsYXJhdG9yICc9JyBleHByICc7JwotCQkJeyAkJCA9IG5ld19udGVybSAoIjxpbml0LWRlY2xhcmU+KCVzLCVzLCVzKSIsICQxLAotCQkJCQkgICQyLCAkNCk7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBuZXdfbnRlcm0gKCI8aW5pdC1kZWNsYXJlPiglcywlcywlcykiLCAkMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQyLCAkNCk7IH0KICAgICAgOwogCiBkZWNsYXJhdG9yIDogSUQKQEAgLTYxNzg5LDE5ICsxNzExMjUsMjYgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KIAogaW50CiBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7Ci0gIGlmIChhcmdjICE9IDIpCi0gICAgYWJvcnQgKCk7CisgIGFzc2VydCAoYXJnYyA9PSAyKTsKICAgaWYgKCFmcmVvcGVuIChhcmd2WzFdLCAiciIsIHN0ZGluKSkKICAgICByZXR1cm4gMzsKICAgcmV0dXJuIHl5cGFyc2UgKCk7CiB9CiAKLWludAoteXlsZXggKExFWF9QQVJBTUVURVJTKQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKworaW50IHl5bGV4ICh2b2lkKQogewogICBjaGFyIGJ1ZmZlclsyNTZdOwogICBpbnQgYzsKQEAgLTYxODE4LDczICsxNzExNjEsNTUgQEAKIAogICB3aGlsZSAoMSkKICAgICB7CisgICAgICBhc3NlcnQgKCFmZW9mIChzdGRpbikpOwogICAgICAgYyA9IGdldGNoYXIgKCk7CiAgICAgICBzd2l0Y2ggKGMpCi0JewotCWNhc2UgRU9GOgotCSAgcmV0dXJuIDA7Ci0JY2FzZSAnXHQnOgotCSAgY29sTnVtID0gKGNvbE51bSArIDcpICYgfjc7Ci0JICBicmVhazsKLQljYXNlICcgJzogY2FzZSAnXGYnOgotCSAgY29sTnVtICs9IDE7Ci0JICBicmVhazsKLQljYXNlICdcbic6Ci0JICBsaW5lTnVtICs9IDE7Ci0JICBjb2xOdW0gPSAwOwotCSAgYnJlYWs7Ci0JZGVmYXVsdDoKLQkgIHsKLQkgICAgaW50IHRvazsKLSNpZiBZWUxTUF9ORUVERUQKLQkgICAgeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxsb2MubGFzdF9saW5lID0gbGluZU51bTsKLQkgICAgeXlsbG9jLmZpcnN0X2NvbHVtbiA9IGNvbE51bTsKLSNlbmRpZgotCSAgICBpZiAoaXNhbHBoYSAoYykpCi0JICAgICAgewotCQlpID0gMDsKKyAgICAgICAgeworICAgICAgICBjYXNlIEVPRjoKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSAnXHQnOgorICAgICAgICAgIGNvbE51bSA9IChjb2xOdW0gKyA3KSAmIH43OworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICcgJzogY2FzZSAnXGYnOgorICAgICAgICAgIGNvbE51bSArPSAxOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdcbic6CisgICAgICAgICAgbGluZU51bSArPSAxOworICAgICAgICAgIGNvbE51bSA9IDA7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgeworICAgICAgICAgICAgaW50IHRvazsKKyAgICAgICAgICAgIGlmIChpc2FscGhhIChjKSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGkgPSAwOwogCi0JCWRvCi0JCSAgewotCQkgICAgYnVmZmVyW2krK10gPSBjOwotCQkgICAgY29sTnVtICs9IDE7Ci0JCSAgICBpZiAoaSA9PSBzaXplb2YgYnVmZmVyIC0gMSkKLQkJICAgICAgYWJvcnQgKCk7Ci0JCSAgICBjID0gZ2V0Y2hhciAoKTsKLQkJICB9Ci0JCXdoaWxlIChpc2FsbnVtIChjKSB8fCBjID09ICdfJyk7CisgICAgICAgICAgICAgICAgZG8KKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2krK10gPSBjOworICAgICAgICAgICAgICAgICAgICBjb2xOdW0gKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IChpICE9IHNpemVvZiBidWZmZXIgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgYyA9IGdldGNoYXIgKCk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgd2hpbGUgKGlzYWxudW0gKGMpIHx8IGMgPT0gJ18nKTsKIAotCQl1bmdldGMgKGMsIHN0ZGluKTsKLQkJYnVmZmVyW2krK10gPSAwOwotCQl0b2sgPSBpc3VwcGVyICgodW5zaWduZWQgY2hhcikgYnVmZmVyWzBdKSA/IFRZUEVOQU1FIDogSUQ7Ci0JCXl5bHZhbCA9IG5ld190ZXJtIChzdHJjcHkgKChjaGFyICopIG1hbGxvYyAoaSksIGJ1ZmZlcikpOwotCSAgICAgIH0KLQkgICAgZWxzZQotCSAgICAgIHsKLQkJY29sTnVtICs9IDE7Ci0JCXRvayA9IGM7Ci0JCXl5bHZhbCA9IDA7Ci0JICAgICAgfQotI2lmIFlZTFNQX05FRURFRAotCSAgICB5eWxsb2MubGFzdF9jb2x1bW4gPSBjb2xOdW0tMTsKLSNlbmRpZgotCSAgICByZXR1cm4gdG9rOwotCSAgfQotCX0KKyAgICAgICAgICAgICAgICB1bmdldGMgKGMsIHN0ZGluKTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSsrXSA9IDA7CisgICAgICAgICAgICAgICAgdG9rID0gaXN1cHBlciAoKHVuc2lnbmVkIGNoYXIpIGJ1ZmZlclswXSkgPyBUWVBFTkFNRSA6IElEOworICAgICAgICAgICAgICAgIHl5bHZhbCA9IG5ld190ZXJtIChzdHJjcHkgKChjaGFyICopIG1hbGxvYyAoaSksIGJ1ZmZlcikpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb2xOdW0gKz0gMTsKKyAgICAgICAgICAgICAgICB0b2sgPSBjOworICAgICAgICAgICAgICAgIHl5bHZhbCA9IFlZX05VTEw7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0b2s7CisgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogfQogCi12b2lkCi15eWVycm9yIChFUlJPUl9QQVJBTUVURVJTKQotewotI2lmIFlZUFVSRSAmJiBZWUxTUF9ORUVERUQKLSAgLyogUGFjaWZ5IEdDQyBieSB1c2luZyBsbG9jcC4gICovCi0gIGlmICghIGxsb2NwKQotICAgIGFib3J0ICgpOwotI2VuZGlmCi0gIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBzKTsKLX0KLQogc3RhdGljIE5vZGUgKgogbmV3X250ZXJtIChjaGFyIGNvbnN0ICpmb3JtLCBOb2RlICpjaGlsZDAsIE5vZGUgKmNoaWxkMSwgTm9kZSAqY2hpbGQyKQogewpAQCAtNjE5NTIsNyArMTcxMjc3LDcgQEAKICAgICAgIGNoaWxkMSA9IG5vZGVfdG9fc3RyaW5nIChub2RlLT5udGVybS5jaGlsZHJlblsxXSk7CiAgICAgICBjaGlsZDIgPSBub2RlX3RvX3N0cmluZyAobm9kZS0+bnRlcm0uY2hpbGRyZW5bMl0pOwogICAgICAgYnVmZmVyID0gKGNoYXIgKikgbWFsbG9jIChzdHJsZW4gKG5vZGUtPm50ZXJtLmZvcm0pICsgc3RybGVuIChjaGlsZDApCi0JCQkJKyBzdHJsZW4gKGNoaWxkMSkgKyBzdHJsZW4gKGNoaWxkMikgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzdHJsZW4gKGNoaWxkMSkgKyBzdHJsZW4gKGNoaWxkMikgKyAxKTsKICAgICAgIHNwcmludGYgKGJ1ZmZlciwgbm9kZS0+bnRlcm0uZm9ybSwgY2hpbGQwLCBjaGlsZDEsIGNoaWxkMik7CiAgICAgICBmcmVlIChjaGlsZDApOwogICAgICAgZnJlZSAoY2hpbGQxKTsKQEAgLTYxOTY3LDcgKzE3MTI5Miw3IEBACiBzdGF0aWMgWVlTVFlQRQogc3RtdE1lcmdlIChZWVNUWVBFIHgwLCBZWVNUWVBFIHgxKQogewotICByZXR1cm4gbmV3X250ZXJtICgiPE9SPiglcywlcykiLCB4MCwgeDEsIDApOworICByZXR1cm4gbmV3X250ZXJtICgiPE9SPiglcywlcykiLCB4MCwgeDEsIFlZX05VTEwpOwogfQogCiBfQVRFT0YKQEAgLTYyMDAxLDg5ICsxNzEzMjYsMTI5IEBACiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImN4eC10eXBlLmF0OjQ0MTogYmlzb24gLW8gdHlwZXMuYyB0eXBlcy55IgotZWNobyBjeHgtdHlwZS5hdDo0NDEgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIHR5cGVzLmMgdHlwZXMueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjeHgtdHlwZS5hdDo0NDE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDIyOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gdHlwZXMuYyB0eXBlcy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY3h4LXR5cGUuYXQ6NDIyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIHR5cGVzLmMgdHlwZXMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDIyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MjI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIHR5cGVzLmMgdHlwZXMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyB0eXBlcy5jIHR5cGVzLnkiICJjeHgtdHlwZS5hdDo0MjIiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gdHlwZXMuYyB0eXBlcy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MjIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDIyOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY3h4LXR5cGUuYXQ6NDIyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQyMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQyMjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImN4eC10eXBlLmF0OjQyMiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MjIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MjI6IGJpc29uIC1vIHR5cGVzLmMgdHlwZXMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImN4eC10eXBlLmF0OjQyMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyB0eXBlcy5jIHR5cGVzLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MjIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImN4eC10eXBlLmF0OjQ0MTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyB0eXBlcyB0eXBlcy5jIFwkTElCUyIKLWVjaG8gY3h4LXR5cGUuYXQ6NDQxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gdHlwZXMgdHlwZXMuYyAkTElCUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjeHgtdHlwZS5hdDo0NDE6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MjI6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJjeHgtdHlwZS5hdDo0MjIiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQyMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MjI6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gdHlwZXMgdHlwZXMuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyB0eXBlcyB0eXBlcy5jICRMSUJTIiAiY3h4LXR5cGUuYXQ6NDIyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyB0eXBlcyB0eXBlcy5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MjIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSRhdF90cmFjZW9mZgotZWNobyAiY3h4LXR5cGUuYXQ6NDQzOiBcJFBSRVBBUlNFUiAuL3R5cGVzIHRlc3QtaW5wdXQiCi1lY2hvIGN4eC10eXBlLmF0OjQ0MyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL3R5cGVzIHRlc3QtaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyA+PiRhdF9zdGRlcnI7IGVjaG8gInN5bnRheCBlcnJvcgotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gIisoeixxKQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQyNDogIFwkUFJFUEFSU0VSIC4vdHlwZXMgdGVzdC1pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi90eXBlcyB0ZXN0LWlucHV0IiAiY3h4LXR5cGUuYXQ6NDI0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vdHlwZXMgdGVzdC1pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIrKHoscSkKIDxkZWNsYXJlPihULHgpCiA8aW5pdC1kZWNsYXJlPihULHgseSkKID0oeCx5KQpAQCAtNjIwOTIsODYgKzE3MTQ1Nyw1OCBAQAogPE9SPig8aW5pdC1kZWNsYXJlPihULHksKyh6LHEpKSw9KDxjYXN0Pih5LFQpLCsoeixxKSkpCiA8ZXJyb3I+CiArKHoscSkKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImN4eC10eXBlLmF0OjQ0MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDI0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICAxMzggKSAjIDEzOC4gY3h4LXR5cGUuYXQ6NDQ2OiBHTFI6IE1lcmdlIGNvbmZsaWN0aW5nIHBhcnNlcywgaW1wdXJlLCBsb2NhdGlvbnMKLSAgICBhdF9zZXR1cF9saW5lPSdjeHgtdHlwZS5hdDo0NDYnCi0gICAgYXRfZGVzYz0nR0xSOiBNZXJnZSBjb25mbGljdGluZyBwYXJzZXMsIGltcHVyZSwgbG9jYXRpb25zJwotICAgICRhdF9xdWlldCAkRUNIT19OICIxMzg6IEdMUjogTWVyZ2UgY29uZmxpY3RpbmcgcGFyc2VzLCBpbXB1cmUsIGxvY2F0aW9ucyRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIxMzguIGN4eC10eXBlLmF0OjQ0NjogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQyNDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjeHgtdHlwZS5hdDo0MjQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzeW50YXggZXJyb3IKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQyNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotCi0KLQotCi0jIFVzaW5nIHlhY2MuYz8KLQotCi0KLQotCi0KLQotIyB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZiAlbG9jYXRpb24gJiAlcHVyZSAmICglZ2xyIG9yICVwYXJzZS1wYXJhbSkuCi0KLSMgeXllcnJvciBhbHdheXMgc2VlcyB0aGUgbG9jYXRpb25zICh3aGVuIGFjdGl2YXRlZCksIGV4Y2VwdCBpZgotIyB5YWNjICYgcHVyZSAmICFwYXJhbS4KLQotCi0jIFRoZSBpbnRlcmZhY2UgaXMgcHVyZTogZWl0aGVyIGJlY2F1c2UgJXB1cmUtcGFyc2VyLCBvciBiZWNhdXNlIHdlCi0jIGFyZSB1c2luZyB0aGUgQysrIHBhcnNlcnMuCi0KLQotCi0KLQotCi0KLQotCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzMyNgorI0FUX1NUQVJUXzMyNworYXRfZm5fZ3JvdXBfYmFubmVyIDMyNyAnY3h4LXR5cGUuYXQ6NDI4JyBcCisgICJHTFI6IE1lcmdlIGNvbmZsaWN0aW5nIHBhcnNlcywgaW1wdXJlLCBsb2NhdGlvbnMiICIiIDIxCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMzI3LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogCiBjYXQgPnR5cGVzLnkgPDwnX0FURU9GJwotJXsKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotICAvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KLSMgdW5kZWYgbWFsbG9jCi0jIHVuZGVmIG1lbWNtcAotIyB1bmRlZiByZWFsbG9jCi0jZW5kaWYKLSV9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCiAvKiBTaW1wbGlmaWVkIEMrKyBUeXBlIGFuZCBFeHByZXNzaW9uIEdyYW1tYXIuICAqLwogCiAlbG9jYXRpb25zCiAKLSV7CislY29kZSByZXF1aXJlcworewogICAjaW5jbHVkZSA8c3RkaW8uaD4KICAgdW5pb24gTm9kZSB7CiAgICAgc3RydWN0IHsKQEAgLTYyMTkxLDMyICsxNzE1MjgsMjEgQEAKICAgICB9IHRlcm07CiAgIH07CiAgIHR5cGVkZWYgdW5pb24gTm9kZSBOb2RlOworICAjZGVmaW5lIFlZU1RZUEUgTm9kZSAqCit9CisKKyVjb2RlCit7CiAgIHN0YXRpYyBOb2RlICpuZXdfbnRlcm0gKGNoYXIgY29uc3QgKiwgTm9kZSAqLCBOb2RlICosIE5vZGUgKik7CiAgIHN0YXRpYyBOb2RlICpuZXdfdGVybSAoY2hhciAqKTsKICAgc3RhdGljIHZvaWQgZnJlZV9ub2RlIChOb2RlICopOwogICBzdGF0aWMgY2hhciAqbm9kZV90b19zdHJpbmcgKE5vZGUgKik7Ci0gICNkZWZpbmUgWVlTVFlQRSBOb2RlICoKICBzdGF0aWMgWVlTVFlQRSBzdG10TWVyZ2UgKFlZU1RZUEUgeDAsIFlZU1RZUEUgeDEpOwogICAjZGVmaW5lIFlZSU5JVERFUFRIIDEwCiAgICNkZWZpbmUgWVlTVEFDS0VYUEFOREFCTEUgMQotICBzdHJ1Y3QgWVlMVFlQRTsKLSNpZiBZWVBVUkUKLSMgaWYgWVlMU1BfTkVFREVECi0jICBkZWZpbmUgTEVYX1BBUkFNRVRFUlMgWVlTVFlQRSAqbHZhbHAsIHN0cnVjdCBZWUxUWVBFICpsbG9jcAotIyAgZGVmaW5lIEVSUk9SX1BBUkFNRVRFUlMgc3RydWN0IFlZTFRZUEUgKmxsb2NwLCBjaGFyIGNvbnN0ICpzCi0jIGVsc2UKLSMgIGRlZmluZSBMRVhfUEFSQU1FVEVSUyBZWVNUWVBFICpsdmFscAotIyBlbmRpZgotI2VuZGlmCi0jaWZuZGVmIExFWF9QQVJBTUVURVJTCi0jIGRlZmluZSBMRVhfUEFSQU1FVEVSUyB2b2lkCi0jZW5kaWYKLSNpZm5kZWYgRVJST1JfUEFSQU1FVEVSUwotIyBkZWZpbmUgRVJST1JfUEFSQU1FVEVSUyBjaGFyIGNvbnN0ICpzCi0jZW5kaWYKLSAgaW50IHl5bGV4IChMRVhfUEFSQU1FVEVSUyk7Ci0gIHZvaWQgeXllcnJvciAoRVJST1JfUEFSQU1FVEVSUyk7Ci0lfQorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgc3RhdGljIGludCB5eWxleCAodm9pZCk7Cit9CiAKICV0b2tlbiBUWVBFTkFNRSBJRAogCkBAIC02MjIzMSwzNSArMTcxNTU3LDM1IEBACiAKIHByb2cgOgogICAgICB8IHByb2cgc3RtdCAgIHsKLQkJCWNoYXIgKm91dHB1dDsKLQkJCXByaW50ZiAoIiVkLiVkLSVkLiVkOiAiLAotCQkJICAgICBAMi5maXJzdF9saW5lLCBAMi5maXJzdF9jb2x1bW4sCi0JCQkgICAgIEAyLmxhc3RfbGluZSwgQDIubGFzdF9jb2x1bW4pOwotCQkJb3V0cHV0ID0gbm9kZV90b19zdHJpbmcgKCQyKTsKLQkJCXByaW50ZiAoIiVzXG4iLCBvdXRwdXQpOwotCQkJZnJlZSAob3V0cHV0KTsKLQkJCWZyZWVfbm9kZSAoJDIpOwotCQkgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpvdXRwdXQ7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIlZC4lZC0lZC4lZDogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDIuZmlyc3RfbGluZSwgQDIuZmlyc3RfY29sdW1uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMi5sYXN0X2xpbmUsIEAyLmxhc3RfY29sdW1uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG5vZGVfdG9fc3RyaW5nICgkMik7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIlc1xuIiwgb3V0cHV0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUgKG91dHB1dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVlX25vZGUgKCQyKTsKKyAgICAgICAgICAgICAgICAgICB9CiAgICAgIDsKIAotc3RtdCA6IGV4cHIgJzsnICAlbWVyZ2UgPHN0bXRNZXJnZT4JeyAkJCA9ICQxOyB9CitzdG10IDogZXhwciAnOycgICVtZXJnZSA8c3RtdE1lcmdlPiAgICAgeyAkJCA9ICQxOyB9CiAgICAgIHwgZGVjbCAgICAgICVtZXJnZSA8c3RtdE1lcmdlPgotICAgICB8IGVycm9yICc7Jwl7ICQkID0gbmV3X250ZXJtICgiPGVycm9yPiIsIDAsIDAsIDApOyB9Ci0gICAgIHwgJ0AnCQl7IFlZQUNDRVBUOyB9CisgICAgIHwgZXJyb3IgJzsnICAgICAgICB7ICQkID0gbmV3X250ZXJtICgiPGVycm9yPiIsIFlZX05VTEwsIFlZX05VTEwsIFlZX05VTEwpOyB9CisgICAgIHwgJ0AnICAgICAgICAgICAgICB7IFlZQUNDRVBUOyB9CiAgICAgIDsKIAogZXhwciA6IElECiAgICAgIHwgVFlQRU5BTUUgJygnIGV4cHIgJyknCi0JCQl7ICQkID0gbmV3X250ZXJtICgiPGNhc3Q+KCVzLCVzKSIsICQzLCAkMSwgMCk7IH0KLSAgICAgfCBleHByICcrJyBleHByCXsgJCQgPSBuZXdfbnRlcm0gKCIrKCVzLCVzKSIsICQxLCAkMywgMCk7IH0KLSAgICAgfCBleHByICc9JyBleHByICAgIHsgJCQgPSBuZXdfbnRlcm0gKCI9KCVzLCVzKSIsICQxLCAkMywgMCk7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBuZXdfbnRlcm0gKCI8Y2FzdD4oJXMsJXMpIiwgJDMsICQxLCBZWV9OVUxMKTsgfQorICAgICB8IGV4cHIgJysnIGV4cHIgICAgeyAkJCA9IG5ld19udGVybSAoIisoJXMsJXMpIiwgJDEsICQzLCBZWV9OVUxMKTsgfQorICAgICB8IGV4cHIgJz0nIGV4cHIgICAgeyAkJCA9IG5ld19udGVybSAoIj0oJXMsJXMpIiwgJDEsICQzLCBZWV9OVUxMKTsgfQogICAgICA7CiAKIGRlY2wgOiBUWVBFTkFNRSBkZWNsYXJhdG9yICc7JwotCQkJeyAkJCA9IG5ld19udGVybSAoIjxkZWNsYXJlPiglcywlcykiLCAkMSwgJDIsIDApOyB9CisgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3X250ZXJtICgiPGRlY2xhcmU+KCVzLCVzKSIsICQxLCAkMiwgWVlfTlVMTCk7IH0KICAgICAgfCBUWVBFTkFNRSBkZWNsYXJhdG9yICc9JyBleHByICc7JwotCQkJeyAkJCA9IG5ld19udGVybSAoIjxpbml0LWRlY2xhcmU+KCVzLCVzLCVzKSIsICQxLAotCQkJCQkgICQyLCAkNCk7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBuZXdfbnRlcm0gKCI8aW5pdC1kZWNsYXJlPiglcywlcywlcykiLCAkMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQyLCAkNCk7IH0KICAgICAgOwogCiBkZWNsYXJhdG9yIDogSUQKQEAgLTYyMjcyLDE5ICsxNzE1OTgsMjggQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KIAogaW50CiBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7Ci0gIGlmIChhcmdjICE9IDIpCi0gICAgYWJvcnQgKCk7CisgIGFzc2VydCAoYXJnYyA9PSAyKTsKICAgaWYgKCFmcmVvcGVuIChhcmd2WzFdLCAiciIsIHN0ZGluKSkKICAgICByZXR1cm4gMzsKICAgcmV0dXJuIHl5cGFyc2UgKCk7CiB9CiAKLWludAoteXlsZXggKExFWF9QQVJBTUVURVJTKQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBZWV9MT0NBVElPTl9QUklOVCAoc3RkZXJyLCAoeXlsbG9jKSk7CisgIGZwcmludGYgKHN0ZGVyciwgIjogIik7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorCitpbnQgeXlsZXggKHZvaWQpCiB7CiAgIGNoYXIgYnVmZmVyWzI1Nl07CiAgIGludCBjOwpAQCAtNjIzMDEsNzMgKzE3MTYzNiw1OCBAQAogCiAgIHdoaWxlICgxKQogICAgIHsKKyAgICAgIGFzc2VydCAoIWZlb2YgKHN0ZGluKSk7CiAgICAgICBjID0gZ2V0Y2hhciAoKTsKICAgICAgIHN3aXRjaCAoYykKLQl7Ci0JY2FzZSBFT0Y6Ci0JICByZXR1cm4gMDsKLQljYXNlICdcdCc6Ci0JICBjb2xOdW0gPSAoY29sTnVtICsgNykgJiB+NzsKLQkgIGJyZWFrOwotCWNhc2UgJyAnOiBjYXNlICdcZic6Ci0JICBjb2xOdW0gKz0gMTsKLQkgIGJyZWFrOwotCWNhc2UgJ1xuJzoKLQkgIGxpbmVOdW0gKz0gMTsKLQkgIGNvbE51bSA9IDA7Ci0JICBicmVhazsKLQlkZWZhdWx0OgotCSAgewotCSAgICBpbnQgdG9rOwotI2lmIFlZTFNQX05FRURFRAotCSAgICB5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGxvYy5sYXN0X2xpbmUgPSBsaW5lTnVtOwotCSAgICB5eWxsb2MuZmlyc3RfY29sdW1uID0gY29sTnVtOwotI2VuZGlmCi0JICAgIGlmIChpc2FscGhhIChjKSkKLQkgICAgICB7Ci0JCWkgPSAwOworICAgICAgICB7CisgICAgICAgIGNhc2UgRU9GOgorICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlICdcdCc6CisgICAgICAgICAgY29sTnVtID0gKGNvbE51bSArIDcpICYgfjc7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJyAnOiBjYXNlICdcZic6CisgICAgICAgICAgY29sTnVtICs9IDE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1xuJzoKKyAgICAgICAgICBsaW5lTnVtICs9IDE7CisgICAgICAgICAgY29sTnVtID0gMDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICB7CisgICAgICAgICAgICBpbnQgdG9rOworICAgICAgICAgICAgeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxsb2MubGFzdF9saW5lID0gbGluZU51bTsKKyAgICAgICAgICAgIHl5bGxvYy5maXJzdF9jb2x1bW4gPSBjb2xOdW07CisgICAgICAgICAgICBpZiAoaXNhbHBoYSAoYykpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpID0gMDsKIAotCQlkbwotCQkgIHsKLQkJICAgIGJ1ZmZlcltpKytdID0gYzsKLQkJICAgIGNvbE51bSArPSAxOwotCQkgICAgaWYgKGkgPT0gc2l6ZW9mIGJ1ZmZlciAtIDEpCi0JCSAgICAgIGFib3J0ICgpOwotCQkgICAgYyA9IGdldGNoYXIgKCk7Ci0JCSAgfQotCQl3aGlsZSAoaXNhbG51bSAoYykgfHwgYyA9PSAnXycpOworICAgICAgICAgICAgICAgIGRvCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpKytdID0gYzsKKyAgICAgICAgICAgICAgICAgICAgY29sTnVtICs9IDE7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCAoaSAhPSBzaXplb2YgYnVmZmVyIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIGMgPSBnZXRjaGFyICgpOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdoaWxlIChpc2FsbnVtIChjKSB8fCBjID09ICdfJyk7CiAKLQkJdW5nZXRjIChjLCBzdGRpbik7Ci0JCWJ1ZmZlcltpKytdID0gMDsKLQkJdG9rID0gaXN1cHBlciAoKHVuc2lnbmVkIGNoYXIpIGJ1ZmZlclswXSkgPyBUWVBFTkFNRSA6IElEOwotCQl5eWx2YWwgPSBuZXdfdGVybSAoc3RyY3B5ICgoY2hhciAqKSBtYWxsb2MgKGkpLCBidWZmZXIpKTsKLQkgICAgICB9Ci0JICAgIGVsc2UKLQkgICAgICB7Ci0JCWNvbE51bSArPSAxOwotCQl0b2sgPSBjOwotCQl5eWx2YWwgPSAwOwotCSAgICAgIH0KLSNpZiBZWUxTUF9ORUVERUQKLQkgICAgeXlsbG9jLmxhc3RfY29sdW1uID0gY29sTnVtLTE7Ci0jZW5kaWYKLQkgICAgcmV0dXJuIHRvazsKLQkgIH0KLQl9CisgICAgICAgICAgICAgICAgdW5nZXRjIChjLCBzdGRpbik7CisgICAgICAgICAgICAgICAgYnVmZmVyW2krK10gPSAwOworICAgICAgICAgICAgICAgIHRvayA9IGlzdXBwZXIgKCh1bnNpZ25lZCBjaGFyKSBidWZmZXJbMF0pID8gVFlQRU5BTUUgOiBJRDsKKyAgICAgICAgICAgICAgICB5eWx2YWwgPSBuZXdfdGVybSAoc3RyY3B5ICgoY2hhciAqKSBtYWxsb2MgKGkpLCBidWZmZXIpKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29sTnVtICs9IDE7CisgICAgICAgICAgICAgICAgdG9rID0gYzsKKyAgICAgICAgICAgICAgICB5eWx2YWwgPSBZWV9OVUxMOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB5eWxsb2MubGFzdF9jb2x1bW4gPSBjb2xOdW0tMTsKKyAgICAgICAgICAgIHJldHVybiB0b2s7CisgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogfQogCi12b2lkCi15eWVycm9yIChFUlJPUl9QQVJBTUVURVJTKQotewotI2lmIFlZUFVSRSAmJiBZWUxTUF9ORUVERUQKLSAgLyogUGFjaWZ5IEdDQyBieSB1c2luZyBsbG9jcC4gICovCi0gIGlmICghIGxsb2NwKQotICAgIGFib3J0ICgpOwotI2VuZGlmCi0gIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBzKTsKLX0KLQogc3RhdGljIE5vZGUgKgogbmV3X250ZXJtIChjaGFyIGNvbnN0ICpmb3JtLCBOb2RlICpjaGlsZDAsIE5vZGUgKmNoaWxkMSwgTm9kZSAqY2hpbGQyKQogewpAQCAtNjI0MzUsNyArMTcxNzU1LDcgQEAKICAgICAgIGNoaWxkMSA9IG5vZGVfdG9fc3RyaW5nIChub2RlLT5udGVybS5jaGlsZHJlblsxXSk7CiAgICAgICBjaGlsZDIgPSBub2RlX3RvX3N0cmluZyAobm9kZS0+bnRlcm0uY2hpbGRyZW5bMl0pOwogICAgICAgYnVmZmVyID0gKGNoYXIgKikgbWFsbG9jIChzdHJsZW4gKG5vZGUtPm50ZXJtLmZvcm0pICsgc3RybGVuIChjaGlsZDApCi0JCQkJKyBzdHJsZW4gKGNoaWxkMSkgKyBzdHJsZW4gKGNoaWxkMikgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzdHJsZW4gKGNoaWxkMSkgKyBzdHJsZW4gKGNoaWxkMikgKyAxKTsKICAgICAgIHNwcmludGYgKGJ1ZmZlciwgbm9kZS0+bnRlcm0uZm9ybSwgY2hpbGQwLCBjaGlsZDEsIGNoaWxkMik7CiAgICAgICBmcmVlIChjaGlsZDApOwogICAgICAgZnJlZSAoY2hpbGQxKTsKQEAgLTYyNDUwLDcgKzE3MTc3MCw3IEBACiBzdGF0aWMgWVlTVFlQRQogc3RtdE1lcmdlIChZWVNUWVBFIHgwLCBZWVNUWVBFIHgxKQogewotICByZXR1cm4gbmV3X250ZXJtICgiPE9SPiglcywlcykiLCB4MCwgeDEsIDApOworICByZXR1cm4gbmV3X250ZXJtICgiPE9SPiglcywlcykiLCB4MCwgeDEsIFlZX05VTEwpOwogfQogCiBfQVRFT0YKQEAgLTYyNDg0LDg5ICsxNzE4MDQsMTI5IEBACiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImN4eC10eXBlLmF0OjQ0ODogYmlzb24gLW8gdHlwZXMuYyB0eXBlcy55IgotZWNobyBjeHgtdHlwZS5hdDo0NDggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIHR5cGVzLmMgdHlwZXMueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjeHgtdHlwZS5hdDo0NDg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDI5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gdHlwZXMuYyB0eXBlcy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY3h4LXR5cGUuYXQ6NDI5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIHR5cGVzLmMgdHlwZXMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDI5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0Mjk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIHR5cGVzLmMgdHlwZXMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyB0eXBlcy5jIHR5cGVzLnkiICJjeHgtdHlwZS5hdDo0MjkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gdHlwZXMuYyB0eXBlcy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDI5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY3h4LXR5cGUuYXQ6NDI5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQyOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQyOTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImN4eC10eXBlLmF0OjQyOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0Mjk6IGJpc29uIC1vIHR5cGVzLmMgdHlwZXMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImN4eC10eXBlLmF0OjQyOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyB0eXBlcy5jIHR5cGVzLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImN4eC10eXBlLmF0OjQ0ODogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyB0eXBlcyB0eXBlcy5jIFwkTElCUyIKLWVjaG8gY3h4LXR5cGUuYXQ6NDQ4ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gdHlwZXMgdHlwZXMuYyAkTElCUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjeHgtdHlwZS5hdDo0NDg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0Mjk6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJjeHgtdHlwZS5hdDo0MjkiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQyOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0Mjk6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gdHlwZXMgdHlwZXMuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyB0eXBlcyB0eXBlcy5jICRMSUJTIiAiY3h4LXR5cGUuYXQ6NDI5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyB0eXBlcyB0eXBlcy5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSRhdF90cmFjZW9mZgotZWNobyAiY3h4LXR5cGUuYXQ6NDUwOiBcJFBSRVBBUlNFUiAuL3R5cGVzIHRlc3QtaW5wdXQiCi1lY2hvIGN4eC10eXBlLmF0OjQ1MCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL3R5cGVzIHRlc3QtaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyA+PiRhdF9zdGRlcnI7IGVjaG8gInN5bnRheCBlcnJvcgotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gIjMuMC0zLjU6ICsoeixxKQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQzMTogIFwkUFJFUEFSU0VSIC4vdHlwZXMgdGVzdC1pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi90eXBlcyB0ZXN0LWlucHV0IiAiY3h4LXR5cGUuYXQ6NDMxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vdHlwZXMgdGVzdC1pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIzLjAtMy41OiArKHoscSkKIDUuMC01LjM6IDxkZWNsYXJlPihULHgpCiA3LjAtNy43OiA8aW5pdC1kZWNsYXJlPihULHgseSkKIDkuMC05LjU6ID0oeCx5KQpAQCAtNjI1NzUsODYgKzE3MTkzNSw1OCBAQAogMTUuMC0xNS4xMzogPE9SPig8aW5pdC1kZWNsYXJlPihULHksKyh6LHEpKSw9KDxjYXN0Pih5LFQpLCsoeixxKSkpCiAxNy4wLTE3LjE1OiA8ZXJyb3I+CiAxOS4wLTE5LjU6ICsoeixxKQotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY3h4LXR5cGUuYXQ6NDUwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MzEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCi0KLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwotCi0gIDEzOSApICMgMTM5LiBjeHgtdHlwZS5hdDo0NTM6IEdMUjogTWVyZ2UgY29uZmxpY3RpbmcgcGFyc2VzLCBwdXJlLCBubyBsb2NhdGlvbnMKLSAgICBhdF9zZXR1cF9saW5lPSdjeHgtdHlwZS5hdDo0NTMnCi0gICAgYXRfZGVzYz0nR0xSOiBNZXJnZSBjb25mbGljdGluZyBwYXJzZXMsIHB1cmUsIG5vIGxvY2F0aW9ucycKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiMTM5OiBHTFI6IE1lcmdlIGNvbmZsaWN0aW5nIHBhcnNlcywgcHVyZSwgbm8gbG9jYXRpb25zJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjEzOS4gY3h4LXR5cGUuYXQ6NDUzOiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDMxOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImN4eC10eXBlLmF0OjQzMSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gIjE3LjU6IHN5bnRheCBlcnJvcgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDMxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0KLQotCi0KLSMgVXNpbmcgeWFjYy5jPwotCi0KLQotCi0KLQotCi0jIHl5ZXJyb3IgcmVjZWl2ZXMgdGhlIGxvY2F0aW9uIGlmICVsb2NhdGlvbiAmICVwdXJlICYgKCVnbHIgb3IgJXBhcnNlLXBhcmFtKS4KLQotIyB5eWVycm9yIGFsd2F5cyBzZWVzIHRoZSBsb2NhdGlvbnMgKHdoZW4gYWN0aXZhdGVkKSwgZXhjZXB0IGlmCi0jIHlhY2MgJiBwdXJlICYgIXBhcmFtLgotCi0KLSMgVGhlIGludGVyZmFjZSBpcyBwdXJlOiBlaXRoZXIgYmVjYXVzZSAlcHVyZS1wYXJzZXIsIG9yIGJlY2F1c2Ugd2UKLSMgYXJlIHVzaW5nIHRoZSBDKysgcGFyc2Vycy4KLQotCi0KLQotCi0KLQotCi0KKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMzI3CisjQVRfU1RBUlRfMzI4CithdF9mbl9ncm91cF9iYW5uZXIgMzI4ICdjeHgtdHlwZS5hdDo0MzUnIFwKKyAgIkdMUjogTWVyZ2UgY29uZmxpY3RpbmcgcGFyc2VzLCBwdXJlLCBubyBsb2NhdGlvbnMiICIiIDIxCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMzI4LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCiAKIAogCiBjYXQgPnR5cGVzLnkgPDwnX0FURU9GJwotJXsKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotICAvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KLSMgdW5kZWYgbWFsbG9jCi0jIHVuZGVmIG1lbWNtcAotIyB1bmRlZiByZWFsbG9jCi0jZW5kaWYKLSV9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCiAvKiBTaW1wbGlmaWVkIEMrKyBUeXBlIGFuZCBFeHByZXNzaW9uIEdyYW1tYXIuICAqLwogCi0lcHVyZS1wYXJzZXIKKyVkZWZpbmUgYXBpLnB1cmUKIAotJXsKKyVjb2RlIHJlcXVpcmVzCit7CiAgICNpbmNsdWRlIDxzdGRpby5oPgogICB1bmlvbiBOb2RlIHsKICAgICBzdHJ1Y3QgewpAQCAtNjI2NzQsMzIgKzE3MjAwNiwyMSBAQAogICAgIH0gdGVybTsKICAgfTsKICAgdHlwZWRlZiB1bmlvbiBOb2RlIE5vZGU7CisgICNkZWZpbmUgWVlTVFlQRSBOb2RlICoKK30KKworJWNvZGUKK3sKICAgc3RhdGljIE5vZGUgKm5ld19udGVybSAoY2hhciBjb25zdCAqLCBOb2RlICosIE5vZGUgKiwgTm9kZSAqKTsKICAgc3RhdGljIE5vZGUgKm5ld190ZXJtIChjaGFyICopOwogICBzdGF0aWMgdm9pZCBmcmVlX25vZGUgKE5vZGUgKik7CiAgIHN0YXRpYyBjaGFyICpub2RlX3RvX3N0cmluZyAoTm9kZSAqKTsKLSAgI2RlZmluZSBZWVNUWVBFIE5vZGUgKgogIHN0YXRpYyBZWVNUWVBFIHN0bXRNZXJnZSAoWVlTVFlQRSB4MCwgWVlTVFlQRSB4MSk7CiAgICNkZWZpbmUgWVlJTklUREVQVEggMTAKICAgI2RlZmluZSBZWVNUQUNLRVhQQU5EQUJMRSAxCi0gIHN0cnVjdCBZWUxUWVBFOwotI2lmIFlZUFVSRQotIyBpZiBZWUxTUF9ORUVERUQKLSMgIGRlZmluZSBMRVhfUEFSQU1FVEVSUyBZWVNUWVBFICpsdmFscCwgc3RydWN0IFlZTFRZUEUgKmxsb2NwCi0jICBkZWZpbmUgRVJST1JfUEFSQU1FVEVSUyBzdHJ1Y3QgWVlMVFlQRSAqbGxvY3AsIGNoYXIgY29uc3QgKnMKLSMgZWxzZQotIyAgZGVmaW5lIExFWF9QQVJBTUVURVJTIFlZU1RZUEUgKmx2YWxwCi0jIGVuZGlmCi0jZW5kaWYKLSNpZm5kZWYgTEVYX1BBUkFNRVRFUlMKLSMgZGVmaW5lIExFWF9QQVJBTUVURVJTIHZvaWQKLSNlbmRpZgotI2lmbmRlZiBFUlJPUl9QQVJBTUVURVJTCi0jIGRlZmluZSBFUlJPUl9QQVJBTUVURVJTIGNoYXIgY29uc3QgKnMKLSNlbmRpZgotICBpbnQgeXlsZXggKExFWF9QQVJBTUVURVJTKTsKLSAgdm9pZCB5eWVycm9yIChFUlJPUl9QQVJBTUVURVJTKTsKLSV9CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworICBzdGF0aWMgaW50IHl5bGV4IChZWVNUWVBFICpsdmFscCk7Cit9CiAKICV0b2tlbiBUWVBFTkFNRSBJRAogCkBAIC02MjcxNCwzMiArMTcyMDM1LDMyIEBACiAKIHByb2cgOgogICAgICB8IHByb2cgc3RtdCAgIHsKLQkJCWNoYXIgKm91dHB1dDsKLQkJCW91dHB1dCA9IG5vZGVfdG9fc3RyaW5nICgkMik7Ci0JCQlwcmludGYgKCIlc1xuIiwgb3V0cHV0KTsKLQkJCWZyZWUgKG91dHB1dCk7Ci0JCQlmcmVlX25vZGUgKCQyKTsKLQkJICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqb3V0cHV0OworICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gbm9kZV90b19zdHJpbmcgKCQyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiVzXG4iLCBvdXRwdXQpOworICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAob3V0cHV0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVfbm9kZSAoJDIpOworICAgICAgICAgICAgICAgICAgIH0KICAgICAgOwogCi1zdG10IDogZXhwciAnOycgICVtZXJnZSA8c3RtdE1lcmdlPgl7ICQkID0gJDE7IH0KK3N0bXQgOiBleHByICc7JyAgJW1lcmdlIDxzdG10TWVyZ2U+ICAgICB7ICQkID0gJDE7IH0KICAgICAgfCBkZWNsICAgICAgJW1lcmdlIDxzdG10TWVyZ2U+Ci0gICAgIHwgZXJyb3IgJzsnCXsgJCQgPSBuZXdfbnRlcm0gKCI8ZXJyb3I+IiwgMCwgMCwgMCk7IH0KLSAgICAgfCAnQCcJCXsgWVlBQ0NFUFQ7IH0KKyAgICAgfCBlcnJvciAnOycgICAgICAgIHsgJCQgPSBuZXdfbnRlcm0gKCI8ZXJyb3I+IiwgWVlfTlVMTCwgWVlfTlVMTCwgWVlfTlVMTCk7IH0KKyAgICAgfCAnQCcgICAgICAgICAgICAgIHsgWVlBQ0NFUFQ7IH0KICAgICAgOwogCiBleHByIDogSUQKICAgICAgfCBUWVBFTkFNRSAnKCcgZXhwciAnKScKLQkJCXsgJCQgPSBuZXdfbnRlcm0gKCI8Y2FzdD4oJXMsJXMpIiwgJDMsICQxLCAwKTsgfQotICAgICB8IGV4cHIgJysnIGV4cHIJeyAkJCA9IG5ld19udGVybSAoIisoJXMsJXMpIiwgJDEsICQzLCAwKTsgfQotICAgICB8IGV4cHIgJz0nIGV4cHIgICAgeyAkJCA9IG5ld19udGVybSAoIj0oJXMsJXMpIiwgJDEsICQzLCAwKTsgfQorICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ld19udGVybSAoIjxjYXN0PiglcywlcykiLCAkMywgJDEsIFlZX05VTEwpOyB9CisgICAgIHwgZXhwciAnKycgZXhwciAgICB7ICQkID0gbmV3X250ZXJtICgiKyglcywlcykiLCAkMSwgJDMsIFlZX05VTEwpOyB9CisgICAgIHwgZXhwciAnPScgZXhwciAgICB7ICQkID0gbmV3X250ZXJtICgiPSglcywlcykiLCAkMSwgJDMsIFlZX05VTEwpOyB9CiAgICAgIDsKIAogZGVjbCA6IFRZUEVOQU1FIGRlY2xhcmF0b3IgJzsnCi0JCQl7ICQkID0gbmV3X250ZXJtICgiPGRlY2xhcmU+KCVzLCVzKSIsICQxLCAkMiwgMCk7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBuZXdfbnRlcm0gKCI8ZGVjbGFyZT4oJXMsJXMpIiwgJDEsICQyLCBZWV9OVUxMKTsgfQogICAgICB8IFRZUEVOQU1FIGRlY2xhcmF0b3IgJz0nIGV4cHIgJzsnCi0JCQl7ICQkID0gbmV3X250ZXJtICgiPGluaXQtZGVjbGFyZT4oJXMsJXMsJXMpIiwgJDEsCi0JCQkJCSAgJDIsICQ0KTsgfQorICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ld19udGVybSAoIjxpbml0LWRlY2xhcmU+KCVzLCVzLCVzKSIsICQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDIsICQ0KTsgfQogICAgICA7CiAKIGRlY2xhcmF0b3IgOiBJRApAQCAtNjI3NTIsMTkgKzE3MjA3MywyNiBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgogCiBpbnQKIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKLSAgaWYgKGFyZ2MgIT0gMikKLSAgICBhYm9ydCAoKTsKKyAgYXNzZXJ0IChhcmdjID09IDIpOwogICBpZiAoIWZyZW9wZW4gKGFyZ3ZbMV0sICJyIiwgc3RkaW4pKQogICAgIHJldHVybiAzOwogICByZXR1cm4geXlwYXJzZSAoKTsKIH0KIAotaW50Ci15eWxleCAoTEVYX1BBUkFNRVRFUlMpCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorCitpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWxwKQogewogICBjaGFyIGJ1ZmZlclsyNTZdOwogICBpbnQgYzsKQEAgLTYyNzgxLDczICsxNzIxMDksNTUgQEAKIAogICB3aGlsZSAoMSkKICAgICB7CisgICAgICBhc3NlcnQgKCFmZW9mIChzdGRpbikpOwogICAgICAgYyA9IGdldGNoYXIgKCk7CiAgICAgICBzd2l0Y2ggKGMpCi0JewotCWNhc2UgRU9GOgotCSAgcmV0dXJuIDA7Ci0JY2FzZSAnXHQnOgotCSAgY29sTnVtID0gKGNvbE51bSArIDcpICYgfjc7Ci0JICBicmVhazsKLQljYXNlICcgJzogY2FzZSAnXGYnOgotCSAgY29sTnVtICs9IDE7Ci0JICBicmVhazsKLQljYXNlICdcbic6Ci0JICBsaW5lTnVtICs9IDE7Ci0JICBjb2xOdW0gPSAwOwotCSAgYnJlYWs7Ci0JZGVmYXVsdDoKLQkgIHsKLQkgICAgaW50IHRvazsKLSNpZiBZWUxTUF9ORUVERUQKLQkgICAgeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxsb2MubGFzdF9saW5lID0gbGluZU51bTsKLQkgICAgeXlsbG9jLmZpcnN0X2NvbHVtbiA9IGNvbE51bTsKLSNlbmRpZgotCSAgICBpZiAoaXNhbHBoYSAoYykpCi0JICAgICAgewotCQlpID0gMDsKKyAgICAgICAgeworICAgICAgICBjYXNlIEVPRjoKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSAnXHQnOgorICAgICAgICAgIGNvbE51bSA9IChjb2xOdW0gKyA3KSAmIH43OworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICcgJzogY2FzZSAnXGYnOgorICAgICAgICAgIGNvbE51bSArPSAxOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdcbic6CisgICAgICAgICAgbGluZU51bSArPSAxOworICAgICAgICAgIGNvbE51bSA9IDA7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgeworICAgICAgICAgICAgaW50IHRvazsKKyAgICAgICAgICAgIGlmIChpc2FscGhhIChjKSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGkgPSAwOwogCi0JCWRvCi0JCSAgewotCQkgICAgYnVmZmVyW2krK10gPSBjOwotCQkgICAgY29sTnVtICs9IDE7Ci0JCSAgICBpZiAoaSA9PSBzaXplb2YgYnVmZmVyIC0gMSkKLQkJICAgICAgYWJvcnQgKCk7Ci0JCSAgICBjID0gZ2V0Y2hhciAoKTsKLQkJICB9Ci0JCXdoaWxlIChpc2FsbnVtIChjKSB8fCBjID09ICdfJyk7CisgICAgICAgICAgICAgICAgZG8KKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2krK10gPSBjOworICAgICAgICAgICAgICAgICAgICBjb2xOdW0gKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IChpICE9IHNpemVvZiBidWZmZXIgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgYyA9IGdldGNoYXIgKCk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgd2hpbGUgKGlzYWxudW0gKGMpIHx8IGMgPT0gJ18nKTsKIAotCQl1bmdldGMgKGMsIHN0ZGluKTsKLQkJYnVmZmVyW2krK10gPSAwOwotCQl0b2sgPSBpc3VwcGVyICgodW5zaWduZWQgY2hhcikgYnVmZmVyWzBdKSA/IFRZUEVOQU1FIDogSUQ7Ci0JCXl5bHZhbCA9IG5ld190ZXJtIChzdHJjcHkgKChjaGFyICopIG1hbGxvYyAoaSksIGJ1ZmZlcikpOwotCSAgICAgIH0KLQkgICAgZWxzZQotCSAgICAgIHsKLQkJY29sTnVtICs9IDE7Ci0JCXRvayA9IGM7Ci0JCXl5bHZhbCA9IDA7Ci0JICAgICAgfQotI2lmIFlZTFNQX05FRURFRAotCSAgICB5eWxsb2MubGFzdF9jb2x1bW4gPSBjb2xOdW0tMTsKLSNlbmRpZgotCSAgICByZXR1cm4gdG9rOwotCSAgfQotCX0KKyAgICAgICAgICAgICAgICB1bmdldGMgKGMsIHN0ZGluKTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSsrXSA9IDA7CisgICAgICAgICAgICAgICAgdG9rID0gaXN1cHBlciAoKHVuc2lnbmVkIGNoYXIpIGJ1ZmZlclswXSkgPyBUWVBFTkFNRSA6IElEOworICAgICAgICAgICAgICAgIHl5bHZhbCA9IG5ld190ZXJtIChzdHJjcHkgKChjaGFyICopIG1hbGxvYyAoaSksIGJ1ZmZlcikpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb2xOdW0gKz0gMTsKKyAgICAgICAgICAgICAgICB0b2sgPSBjOworICAgICAgICAgICAgICAgIHl5bHZhbCA9IFlZX05VTEw7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0b2s7CisgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogfQogCi12b2lkCi15eWVycm9yIChFUlJPUl9QQVJBTUVURVJTKQotewotI2lmIFlZUFVSRSAmJiBZWUxTUF9ORUVERUQKLSAgLyogUGFjaWZ5IEdDQyBieSB1c2luZyBsbG9jcC4gICovCi0gIGlmICghIGxsb2NwKQotICAgIGFib3J0ICgpOwotI2VuZGlmCi0gIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBzKTsKLX0KLQogc3RhdGljIE5vZGUgKgogbmV3X250ZXJtIChjaGFyIGNvbnN0ICpmb3JtLCBOb2RlICpjaGlsZDAsIE5vZGUgKmNoaWxkMSwgTm9kZSAqY2hpbGQyKQogewpAQCAtNjI5MTUsNyArMTcyMjI1LDcgQEAKICAgICAgIGNoaWxkMSA9IG5vZGVfdG9fc3RyaW5nIChub2RlLT5udGVybS5jaGlsZHJlblsxXSk7CiAgICAgICBjaGlsZDIgPSBub2RlX3RvX3N0cmluZyAobm9kZS0+bnRlcm0uY2hpbGRyZW5bMl0pOwogICAgICAgYnVmZmVyID0gKGNoYXIgKikgbWFsbG9jIChzdHJsZW4gKG5vZGUtPm50ZXJtLmZvcm0pICsgc3RybGVuIChjaGlsZDApCi0JCQkJKyBzdHJsZW4gKGNoaWxkMSkgKyBzdHJsZW4gKGNoaWxkMikgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzdHJsZW4gKGNoaWxkMSkgKyBzdHJsZW4gKGNoaWxkMikgKyAxKTsKICAgICAgIHNwcmludGYgKGJ1ZmZlciwgbm9kZS0+bnRlcm0uZm9ybSwgY2hpbGQwLCBjaGlsZDEsIGNoaWxkMik7CiAgICAgICBmcmVlIChjaGlsZDApOwogICAgICAgZnJlZSAoY2hpbGQxKTsKQEAgLTYyOTMwLDcgKzE3MjI0MCw3IEBACiBzdGF0aWMgWVlTVFlQRQogc3RtdE1lcmdlIChZWVNUWVBFIHgwLCBZWVNUWVBFIHgxKQogewotICByZXR1cm4gbmV3X250ZXJtICgiPE9SPiglcywlcykiLCB4MCwgeDEsIDApOworICByZXR1cm4gbmV3X250ZXJtICgiPE9SPiglcywlcykiLCB4MCwgeDEsIFlZX05VTEwpOwogfQogCiBfQVRFT0YKQEAgLTYyOTY0LDg5ICsxNzIyNzQsMTI5IEBACiBfQVRFT0YKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImN4eC10eXBlLmF0OjQ1NTogYmlzb24gLW8gdHlwZXMuYyB0eXBlcy55IgotZWNobyBjeHgtdHlwZS5hdDo0NTUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIHR5cGVzLmMgdHlwZXMueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjeHgtdHlwZS5hdDo0NTU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDM2OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gdHlwZXMuYyB0eXBlcy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiY3h4LXR5cGUuYXQ6NDM2IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIHR5cGVzLmMgdHlwZXMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MzY6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIHR5cGVzLmMgdHlwZXMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyB0eXBlcy5jIHR5cGVzLnkiICJjeHgtdHlwZS5hdDo0MzYiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gdHlwZXMuYyB0eXBlcy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDM2OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY3h4LXR5cGUuYXQ6NDM2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQzNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQzNjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImN4eC10eXBlLmF0OjQzNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MzY6IGJpc29uIC1vIHR5cGVzLmMgdHlwZXMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImN4eC10eXBlLmF0OjQzNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyB0eXBlcy5jIHR5cGVzLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImN4eC10eXBlLmF0OjQ1NTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyB0eXBlcyB0eXBlcy5jIFwkTElCUyIKLWVjaG8gY3h4LXR5cGUuYXQ6NDU1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gdHlwZXMgdHlwZXMuYyAkTElCUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjeHgtdHlwZS5hdDo0NTU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MzY6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJjeHgtdHlwZS5hdDo0MzYiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQzNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MzY6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gdHlwZXMgdHlwZXMuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyB0eXBlcyB0eXBlcy5jICRMSUJTIiAiY3h4LXR5cGUuYXQ6NDM2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyB0eXBlcyB0eXBlcy5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0MzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSRhdF90cmFjZW9mZgotZWNobyAiY3h4LXR5cGUuYXQ6NDU3OiBcJFBSRVBBUlNFUiAuL3R5cGVzIHRlc3QtaW5wdXQiCi1lY2hvIGN4eC10eXBlLmF0OjQ1NyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJFBSRVBBUlNFUiAuL3R5cGVzIHRlc3QtaW5wdXQgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyA+PiRhdF9zdGRlcnI7IGVjaG8gInN5bnRheCBlcnJvcgotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotZWNobyA+PiRhdF9zdGRvdXQ7IGVjaG8gIisoeixxKQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQzODogIFwkUFJFUEFSU0VSIC4vdHlwZXMgdGVzdC1pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi90eXBlcyB0ZXN0LWlucHV0IiAiY3h4LXR5cGUuYXQ6NDM4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vdHlwZXMgdGVzdC1pbnB1dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICIrKHoscSkKIDxkZWNsYXJlPihULHgpCiA8aW5pdC1kZWNsYXJlPihULHgseSkKID0oeCx5KQpAQCAtNjMwNTUsODYgKzE3MjQwNSw1OCBAQAogPE9SPig8aW5pdC1kZWNsYXJlPihULHksKyh6LHEpKSw9KDxjYXN0Pih5LFQpLCsoeixxKSkpCiA8ZXJyb3I+CiArKHoscSkKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImN4eC10eXBlLmF0OjQ1NzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICAxNDAgKSAjIDE0MC4gY3h4LXR5cGUuYXQ6NDU5OiBHTFI6IE1lcmdlIGNvbmZsaWN0aW5nIHBhcnNlcywgcHVyZSwgbG9jYXRpb25zCi0gICAgYXRfc2V0dXBfbGluZT0nY3h4LXR5cGUuYXQ6NDU5JwotICAgIGF0X2Rlc2M9J0dMUjogTWVyZ2UgY29uZmxpY3RpbmcgcGFyc2VzLCBwdXJlLCBsb2NhdGlvbnMnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjE0MDogR0xSOiBNZXJnZSBjb25mbGljdGluZyBwYXJzZXMsIHB1cmUsIGxvY2F0aW9ucyRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIxNDAuIGN4eC10eXBlLmF0OjQ1OTogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQzODogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjeHgtdHlwZS5hdDo0MzgiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJzeW50YXggZXJyb3IKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQzOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotCi0KLQotCi0jIFVzaW5nIHlhY2MuYz8KLQotCi0KLQotCi0KLQotIyB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZiAlbG9jYXRpb24gJiAlcHVyZSAmICglZ2xyIG9yICVwYXJzZS1wYXJhbSkuCi0KLSMgeXllcnJvciBhbHdheXMgc2VlcyB0aGUgbG9jYXRpb25zICh3aGVuIGFjdGl2YXRlZCksIGV4Y2VwdCBpZgotIyB5YWNjICYgcHVyZSAmICFwYXJhbS4KLQotCi0jIFRoZSBpbnRlcmZhY2UgaXMgcHVyZTogZWl0aGVyIGJlY2F1c2UgJXB1cmUtcGFyc2VyLCBvciBiZWNhdXNlIHdlCi0jIGFyZSB1c2luZyB0aGUgQysrIHBhcnNlcnMuCi0KLQotCi0KLQotCi0KLQotCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzMyOAorI0FUX1NUQVJUXzMyOQorYXRfZm5fZ3JvdXBfYmFubmVyIDMyOSAnY3h4LXR5cGUuYXQ6NDQxJyBcCisgICJHTFI6IE1lcmdlIGNvbmZsaWN0aW5nIHBhcnNlcywgcHVyZSwgbG9jYXRpb25zIiAiICIgMjEKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIzMjkuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiAKIGNhdCA+dHlwZXMueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKIC8qIFNpbXBsaWZpZWQgQysrIFR5cGUgYW5kIEV4cHJlc3Npb24gR3JhbW1hci4gICovCiAKLSVwdXJlLXBhcnNlciAlbG9jYXRpb25zCislZGVmaW5lIGFwaS5wdXJlICVsb2NhdGlvbnMKIAotJXsKKyVjb2RlIHJlcXVpcmVzCit7CiAgICNpbmNsdWRlIDxzdGRpby5oPgogICB1bmlvbiBOb2RlIHsKICAgICBzdHJ1Y3QgewpAQCAtNjMxNTQsMzIgKzE3MjQ3NiwyMSBAQAogICAgIH0gdGVybTsKICAgfTsKICAgdHlwZWRlZiB1bmlvbiBOb2RlIE5vZGU7CisgICNkZWZpbmUgWVlTVFlQRSBOb2RlICoKK30KKworJWNvZGUKK3sKICAgc3RhdGljIE5vZGUgKm5ld19udGVybSAoY2hhciBjb25zdCAqLCBOb2RlICosIE5vZGUgKiwgTm9kZSAqKTsKICAgc3RhdGljIE5vZGUgKm5ld190ZXJtIChjaGFyICopOwogICBzdGF0aWMgdm9pZCBmcmVlX25vZGUgKE5vZGUgKik7CiAgIHN0YXRpYyBjaGFyICpub2RlX3RvX3N0cmluZyAoTm9kZSAqKTsKLSAgI2RlZmluZSBZWVNUWVBFIE5vZGUgKgogIHN0YXRpYyBZWVNUWVBFIHN0bXRNZXJnZSAoWVlTVFlQRSB4MCwgWVlTVFlQRSB4MSk7CiAgICNkZWZpbmUgWVlJTklUREVQVEggMTAKICAgI2RlZmluZSBZWVNUQUNLRVhQQU5EQUJMRSAxCi0gIHN0cnVjdCBZWUxUWVBFOwotI2lmIFlZUFVSRQotIyBpZiBZWUxTUF9ORUVERUQKLSMgIGRlZmluZSBMRVhfUEFSQU1FVEVSUyBZWVNUWVBFICpsdmFscCwgc3RydWN0IFlZTFRZUEUgKmxsb2NwCi0jICBkZWZpbmUgRVJST1JfUEFSQU1FVEVSUyBzdHJ1Y3QgWVlMVFlQRSAqbGxvY3AsIGNoYXIgY29uc3QgKnMKLSMgZWxzZQotIyAgZGVmaW5lIExFWF9QQVJBTUVURVJTIFlZU1RZUEUgKmx2YWxwCi0jIGVuZGlmCi0jZW5kaWYKLSNpZm5kZWYgTEVYX1BBUkFNRVRFUlMKLSMgZGVmaW5lIExFWF9QQVJBTUVURVJTIHZvaWQKLSNlbmRpZgotI2lmbmRlZiBFUlJPUl9QQVJBTUVURVJTCi0jIGRlZmluZSBFUlJPUl9QQVJBTUVURVJTIGNoYXIgY29uc3QgKnMKLSNlbmRpZgotICBpbnQgeXlsZXggKExFWF9QQVJBTUVURVJTKTsKLSAgdm9pZCB5eWVycm9yIChFUlJPUl9QQVJBTUVURVJTKTsKLSV9CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKFlZTFRZUEUgY29uc3QgKiBjb25zdCBsbG9jcCwgIGNvbnN0IGNoYXIgKm1zZyk7CisgIHN0YXRpYyBpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCk7Cit9CiAKICV0b2tlbiBUWVBFTkFNRSBJRAogCkBAIC02MzE5NCwzNSArMTcyNTA1LDM1IEBACiAKIHByb2cgOgogICAgICB8IHByb2cgc3RtdCAgIHsKLQkJCWNoYXIgKm91dHB1dDsKLQkJCXByaW50ZiAoIiVkLiVkLSVkLiVkOiAiLAotCQkJICAgICBAMi5maXJzdF9saW5lLCBAMi5maXJzdF9jb2x1bW4sCi0JCQkgICAgIEAyLmxhc3RfbGluZSwgQDIubGFzdF9jb2x1bW4pOwotCQkJb3V0cHV0ID0gbm9kZV90b19zdHJpbmcgKCQyKTsKLQkJCXByaW50ZiAoIiVzXG4iLCBvdXRwdXQpOwotCQkJZnJlZSAob3V0cHV0KTsKLQkJCWZyZWVfbm9kZSAoJDIpOwotCQkgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpvdXRwdXQ7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIlZC4lZC0lZC4lZDogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDIuZmlyc3RfbGluZSwgQDIuZmlyc3RfY29sdW1uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMi5sYXN0X2xpbmUsIEAyLmxhc3RfY29sdW1uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG5vZGVfdG9fc3RyaW5nICgkMik7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIlc1xuIiwgb3V0cHV0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUgKG91dHB1dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVlX25vZGUgKCQyKTsKKyAgICAgICAgICAgICAgICAgICB9CiAgICAgIDsKIAotc3RtdCA6IGV4cHIgJzsnICAlbWVyZ2UgPHN0bXRNZXJnZT4JeyAkJCA9ICQxOyB9CitzdG10IDogZXhwciAnOycgICVtZXJnZSA8c3RtdE1lcmdlPiAgICAgeyAkJCA9ICQxOyB9CiAgICAgIHwgZGVjbCAgICAgICVtZXJnZSA8c3RtdE1lcmdlPgotICAgICB8IGVycm9yICc7Jwl7ICQkID0gbmV3X250ZXJtICgiPGVycm9yPiIsIDAsIDAsIDApOyB9Ci0gICAgIHwgJ0AnCQl7IFlZQUNDRVBUOyB9CisgICAgIHwgZXJyb3IgJzsnICAgICAgICB7ICQkID0gbmV3X250ZXJtICgiPGVycm9yPiIsIFlZX05VTEwsIFlZX05VTEwsIFlZX05VTEwpOyB9CisgICAgIHwgJ0AnICAgICAgICAgICAgICB7IFlZQUNDRVBUOyB9CiAgICAgIDsKIAogZXhwciA6IElECiAgICAgIHwgVFlQRU5BTUUgJygnIGV4cHIgJyknCi0JCQl7ICQkID0gbmV3X250ZXJtICgiPGNhc3Q+KCVzLCVzKSIsICQzLCAkMSwgMCk7IH0KLSAgICAgfCBleHByICcrJyBleHByCXsgJCQgPSBuZXdfbnRlcm0gKCIrKCVzLCVzKSIsICQxLCAkMywgMCk7IH0KLSAgICAgfCBleHByICc9JyBleHByICAgIHsgJCQgPSBuZXdfbnRlcm0gKCI9KCVzLCVzKSIsICQxLCAkMywgMCk7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBuZXdfbnRlcm0gKCI8Y2FzdD4oJXMsJXMpIiwgJDMsICQxLCBZWV9OVUxMKTsgfQorICAgICB8IGV4cHIgJysnIGV4cHIgICAgeyAkJCA9IG5ld19udGVybSAoIisoJXMsJXMpIiwgJDEsICQzLCBZWV9OVUxMKTsgfQorICAgICB8IGV4cHIgJz0nIGV4cHIgICAgeyAkJCA9IG5ld19udGVybSAoIj0oJXMsJXMpIiwgJDEsICQzLCBZWV9OVUxMKTsgfQogICAgICA7CiAKIGRlY2wgOiBUWVBFTkFNRSBkZWNsYXJhdG9yICc7JwotCQkJeyAkJCA9IG5ld19udGVybSAoIjxkZWNsYXJlPiglcywlcykiLCAkMSwgJDIsIDApOyB9CisgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3X250ZXJtICgiPGRlY2xhcmU+KCVzLCVzKSIsICQxLCAkMiwgWVlfTlVMTCk7IH0KICAgICAgfCBUWVBFTkFNRSBkZWNsYXJhdG9yICc9JyBleHByICc7JwotCQkJeyAkJCA9IG5ld19udGVybSAoIjxpbml0LWRlY2xhcmU+KCVzLCVzLCVzKSIsICQxLAotCQkJCQkgICQyLCAkNCk7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBuZXdfbnRlcm0gKCI8aW5pdC1kZWNsYXJlPiglcywlcywlcykiLCAkMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQyLCAkNCk7IH0KICAgICAgOwogCiBkZWNsYXJhdG9yIDogSUQKQEAgLTYzMjM1LDE5ICsxNzI1NDYsMjggQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KIAogaW50CiBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7Ci0gIGlmIChhcmdjICE9IDIpCi0gICAgYWJvcnQgKCk7CisgIGFzc2VydCAoYXJnYyA9PSAyKTsKICAgaWYgKCFmcmVvcGVuIChhcmd2WzFdLCAiciIsIHN0ZGluKSkKICAgICByZXR1cm4gMzsKICAgcmV0dXJuIHl5cGFyc2UgKCk7CiB9CiAKLWludAoteXlsZXggKExFWF9QQVJBTUVURVJTKQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yIChZWUxUWVBFIGNvbnN0ICogY29uc3QgbGxvY3AsICBjb25zdCBjaGFyICptc2cpCit7CisgIFlZX0xPQ0FUSU9OX1BSSU5UIChzdGRlcnIsICgqbGxvY3ApKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiOiAiKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisKK2ludCB5eWxleCAoWVlTVFlQRSAqbHZhbHAsIFlZTFRZUEUgKmxsb2NwKQogewogICBjaGFyIGJ1ZmZlclsyNTZdOwogICBpbnQgYzsKQEAgLTYzMjY0LDczICsxNzI1ODQsNTggQEAKIAogICB3aGlsZSAoMSkKICAgICB7CisgICAgICBhc3NlcnQgKCFmZW9mIChzdGRpbikpOwogICAgICAgYyA9IGdldGNoYXIgKCk7CiAgICAgICBzd2l0Y2ggKGMpCi0JewotCWNhc2UgRU9GOgotCSAgcmV0dXJuIDA7Ci0JY2FzZSAnXHQnOgotCSAgY29sTnVtID0gKGNvbE51bSArIDcpICYgfjc7Ci0JICBicmVhazsKLQljYXNlICcgJzogY2FzZSAnXGYnOgotCSAgY29sTnVtICs9IDE7Ci0JICBicmVhazsKLQljYXNlICdcbic6Ci0JICBsaW5lTnVtICs9IDE7Ci0JICBjb2xOdW0gPSAwOwotCSAgYnJlYWs7Ci0JZGVmYXVsdDoKLQkgIHsKLQkgICAgaW50IHRvazsKLSNpZiBZWUxTUF9ORUVERUQKLQkgICAgeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxsb2MubGFzdF9saW5lID0gbGluZU51bTsKLQkgICAgeXlsbG9jLmZpcnN0X2NvbHVtbiA9IGNvbE51bTsKLSNlbmRpZgotCSAgICBpZiAoaXNhbHBoYSAoYykpCi0JICAgICAgewotCQlpID0gMDsKKyAgICAgICAgeworICAgICAgICBjYXNlIEVPRjoKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSAnXHQnOgorICAgICAgICAgIGNvbE51bSA9IChjb2xOdW0gKyA3KSAmIH43OworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICcgJzogY2FzZSAnXGYnOgorICAgICAgICAgIGNvbE51bSArPSAxOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdcbic6CisgICAgICAgICAgbGluZU51bSArPSAxOworICAgICAgICAgIGNvbE51bSA9IDA7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgeworICAgICAgICAgICAgaW50IHRvazsKKyAgICAgICAgICAgIHl5bGxvYy5maXJzdF9saW5lID0geXlsbG9jLmxhc3RfbGluZSA9IGxpbmVOdW07CisgICAgICAgICAgICB5eWxsb2MuZmlyc3RfY29sdW1uID0gY29sTnVtOworICAgICAgICAgICAgaWYgKGlzYWxwaGEgKGMpKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaSA9IDA7CiAKLQkJZG8KLQkJICB7Ci0JCSAgICBidWZmZXJbaSsrXSA9IGM7Ci0JCSAgICBjb2xOdW0gKz0gMTsKLQkJICAgIGlmIChpID09IHNpemVvZiBidWZmZXIgLSAxKQotCQkgICAgICBhYm9ydCAoKTsKLQkJICAgIGMgPSBnZXRjaGFyICgpOwotCQkgIH0KLQkJd2hpbGUgKGlzYWxudW0gKGMpIHx8IGMgPT0gJ18nKTsKKyAgICAgICAgICAgICAgICBkbworICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBidWZmZXJbaSsrXSA9IGM7CisgICAgICAgICAgICAgICAgICAgIGNvbE51bSArPSAxOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQgKGkgIT0gc2l6ZW9mIGJ1ZmZlciAtIDEpOworICAgICAgICAgICAgICAgICAgICBjID0gZ2V0Y2hhciAoKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3aGlsZSAoaXNhbG51bSAoYykgfHwgYyA9PSAnXycpOwogCi0JCXVuZ2V0YyAoYywgc3RkaW4pOwotCQlidWZmZXJbaSsrXSA9IDA7Ci0JCXRvayA9IGlzdXBwZXIgKCh1bnNpZ25lZCBjaGFyKSBidWZmZXJbMF0pID8gVFlQRU5BTUUgOiBJRDsKLQkJeXlsdmFsID0gbmV3X3Rlcm0gKHN0cmNweSAoKGNoYXIgKikgbWFsbG9jIChpKSwgYnVmZmVyKSk7Ci0JICAgICAgfQotCSAgICBlbHNlCi0JICAgICAgewotCQljb2xOdW0gKz0gMTsKLQkJdG9rID0gYzsKLQkJeXlsdmFsID0gMDsKLQkgICAgICB9Ci0jaWYgWVlMU1BfTkVFREVECi0JICAgIHl5bGxvYy5sYXN0X2NvbHVtbiA9IGNvbE51bS0xOwotI2VuZGlmCi0JICAgIHJldHVybiB0b2s7Ci0JICB9Ci0JfQorICAgICAgICAgICAgICAgIHVuZ2V0YyAoYywgc3RkaW4pOworICAgICAgICAgICAgICAgIGJ1ZmZlcltpKytdID0gMDsKKyAgICAgICAgICAgICAgICB0b2sgPSBpc3VwcGVyICgodW5zaWduZWQgY2hhcikgYnVmZmVyWzBdKSA/IFRZUEVOQU1FIDogSUQ7CisgICAgICAgICAgICAgICAgeXlsdmFsID0gbmV3X3Rlcm0gKHN0cmNweSAoKGNoYXIgKikgbWFsbG9jIChpKSwgYnVmZmVyKSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbE51bSArPSAxOworICAgICAgICAgICAgICAgIHRvayA9IGM7CisgICAgICAgICAgICAgICAgeXlsdmFsID0gWVlfTlVMTDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgeXlsbG9jLmxhc3RfY29sdW1uID0gY29sTnVtLTE7CisgICAgICAgICAgICByZXR1cm4gdG9rOworICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZAoteXllcnJvciAoRVJST1JfUEFSQU1FVEVSUykKLXsKLSNpZiBZWVBVUkUgJiYgWVlMU1BfTkVFREVECi0gIC8qIFBhY2lmeSBHQ0MgYnkgdXNpbmcgbGxvY3AuICAqLwotICBpZiAoISBsbG9jcCkKLSAgICBhYm9ydCAoKTsKLSNlbmRpZgotICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgcyk7Ci19Ci0KIHN0YXRpYyBOb2RlICoKIG5ld19udGVybSAoY2hhciBjb25zdCAqZm9ybSwgTm9kZSAqY2hpbGQwLCBOb2RlICpjaGlsZDEsIE5vZGUgKmNoaWxkMikKIHsKQEAgLTYzMzk4LDcgKzE3MjcwMyw3IEBACiAgICAgICBjaGlsZDEgPSBub2RlX3RvX3N0cmluZyAobm9kZS0+bnRlcm0uY2hpbGRyZW5bMV0pOwogICAgICAgY2hpbGQyID0gbm9kZV90b19zdHJpbmcgKG5vZGUtPm50ZXJtLmNoaWxkcmVuWzJdKTsKICAgICAgIGJ1ZmZlciA9IChjaGFyICopIG1hbGxvYyAoc3RybGVuIChub2RlLT5udGVybS5mb3JtKSArIHN0cmxlbiAoY2hpbGQwKQotCQkJCSsgc3RybGVuIChjaGlsZDEpICsgc3RybGVuIChjaGlsZDIpICsgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3RybGVuIChjaGlsZDEpICsgc3RybGVuIChjaGlsZDIpICsgMSk7CiAgICAgICBzcHJpbnRmIChidWZmZXIsIG5vZGUtPm50ZXJtLmZvcm0sIGNoaWxkMCwgY2hpbGQxLCBjaGlsZDIpOwogICAgICAgZnJlZSAoY2hpbGQwKTsKICAgICAgIGZyZWUgKGNoaWxkMSk7CkBAIC02MzQxMyw3ICsxNzI3MTgsNyBAQAogc3RhdGljIFlZU1RZUEUKIHN0bXRNZXJnZSAoWVlTVFlQRSB4MCwgWVlTVFlQRSB4MSkKIHsKLSAgcmV0dXJuIG5ld19udGVybSAoIjxPUj4oJXMsJXMpIiwgeDAsIHgxLCAwKTsKKyAgcmV0dXJuIG5ld19udGVybSAoIjxPUj4oJXMsJXMpIiwgeDAsIHgxLCBZWV9OVUxMKTsKIH0KIAogX0FURU9GCkBAIC02MzQ0Nyw4OSArMTcyNzUyLDEyOSBAQAogX0FURU9GCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjeHgtdHlwZS5hdDo0NjE6IGJpc29uIC1vIHR5cGVzLmMgdHlwZXMueSIKLWVjaG8gY3h4LXR5cGUuYXQ6NDYxID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtbyB0eXBlcy5jIHR5cGVzLnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY3h4LXR5cGUuYXQ6NDYxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQ0MjogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIHR5cGVzLmMgdHlwZXMueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImN4eC10eXBlLmF0OjQ0MiIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyB0eXBlcy5jIHR5cGVzLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQ0MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDQyOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyB0eXBlcy5jIHR5cGVzLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gdHlwZXMuYyB0eXBlcy55IiAiY3h4LXR5cGUuYXQ6NDQyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIHR5cGVzLmMgdHlwZXMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDQyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQ0MjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImN4eC10eXBlLmF0OjQ0MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0NDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0NDI6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjeHgtdHlwZS5hdDo0NDIiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDQyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDQyOiBiaXNvbiAtbyB0eXBlcy5jIHR5cGVzLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjeHgtdHlwZS5hdDo0NDIiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gdHlwZXMuYyB0eXBlcy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDQyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotJGF0X3RyYWNlb24KIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJjeHgtdHlwZS5hdDo0NjE6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gdHlwZXMgdHlwZXMuYyBcJExJQlMiCi1lY2hvIGN4eC10eXBlLmF0OjQ2MSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIHR5cGVzIHR5cGVzLmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiY3h4LXR5cGUuYXQ6NDYxOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDQyOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiY3h4LXR5cGUuYXQ6NDQyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0NDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDQyOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIHR5cGVzIHR5cGVzLmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gdHlwZXMgdHlwZXMuYyAkTElCUyIgImN4eC10eXBlLmF0OjQ0MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gdHlwZXMgdHlwZXMuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDQyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCiAKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0kYXRfdHJhY2VvZmYKLWVjaG8gImN4eC10eXBlLmF0OjQ2MzogXCRQUkVQQVJTRVIgLi90eXBlcyB0ZXN0LWlucHV0IgotZWNobyBjeHgtdHlwZS5hdDo0NjMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRQUkVQQVJTRVIgLi90eXBlcyB0ZXN0LWlucHV0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gPj4kYXRfc3RkZXJyOyBlY2hvICJzeW50YXggZXJyb3IKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gPj4kYXRfc3Rkb3V0OyBlY2hvICIzLjAtMy41OiArKHoscSkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0NDQ6ICBcJFBSRVBBUlNFUiAuL3R5cGVzIHRlc3QtaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vdHlwZXMgdGVzdC1pbnB1dCIgImN4eC10eXBlLmF0OjQ0NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL3R5cGVzIHRlc3QtaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiMy4wLTMuNTogKyh6LHEpCiA1LjAtNS4zOiA8ZGVjbGFyZT4oVCx4KQogNy4wLTcuNzogPGluaXQtZGVjbGFyZT4oVCx4LHkpCiA5LjAtOS41OiA9KHgseSkKQEAgLTYzNTM4LDg2ICsxNzI4ODMsNTggQEAKIDE1LjAtMTUuMTM6IDxPUj4oPGluaXQtZGVjbGFyZT4oVCx5LCsoeixxKSksPSg8Y2FzdD4oeSxUKSwrKHoscSkpKQogMTcuMC0xNy4xNTogPGVycm9yPgogMTkuMC0xOS41OiArKHoscSkKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImN4eC10eXBlLmF0OjQ2MzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDQ0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgotCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKLQotICAxNDEgKSAjIDE0MS4gY3h4LXR5cGUuYXQ6NDY2OiBHTFI6IFZlcmJvc2UgbWVzc2FnZXMsIHJlc29sdmUgYW1iaWd1aXR5LCBpbXB1cmUsIG5vIGxvY2F0aW9ucwotICAgIGF0X3NldHVwX2xpbmU9J2N4eC10eXBlLmF0OjQ2NicKLSAgICBhdF9kZXNjPSdHTFI6IFZlcmJvc2UgbWVzc2FnZXMsIHJlc29sdmUgYW1iaWd1aXR5LCBpbXB1cmUsIG5vIGxvY2F0aW9ucycKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiMTQxOiBHTFI6IFZlcmJvc2UgbWVzc2FnZXMsIHJlc29sdmUgYW1iaWd1aXR5LCBpbXB1cmUsIG5vIGxvY2F0aW9ucyRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIxNDEuIGN4eC10eXBlLmF0OjQ2NjogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQ0NDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJjeHgtdHlwZS5hdDo0NDQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICIxNy41OiBzeW50YXggZXJyb3IKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQ0NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotCi0KLQotCi0jIFVzaW5nIHlhY2MuYz8KLQotCi0KLQotCi0KLQotIyB5eWVycm9yIHJlY2VpdmVzIHRoZSBsb2NhdGlvbiBpZiAlbG9jYXRpb24gJiAlcHVyZSAmICglZ2xyIG9yICVwYXJzZS1wYXJhbSkuCi0KLSMgeXllcnJvciBhbHdheXMgc2VlcyB0aGUgbG9jYXRpb25zICh3aGVuIGFjdGl2YXRlZCksIGV4Y2VwdCBpZgotIyB5YWNjICYgcHVyZSAmICFwYXJhbS4KLQotCi0jIFRoZSBpbnRlcmZhY2UgaXMgcHVyZTogZWl0aGVyIGJlY2F1c2UgJXB1cmUtcGFyc2VyLCBvciBiZWNhdXNlIHdlCi0jIGFyZSB1c2luZyB0aGUgQysrIHBhcnNlcnMuCi0KLQotCi0KLQotCi0KLQotCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzMyOQorI0FUX1NUQVJUXzMzMAorYXRfZm5fZ3JvdXBfYmFubmVyIDMzMCAnY3h4LXR5cGUuYXQ6NDQ4JyBcCisgICJHTFI6IFZlcmJvc2UgbWVzc2FnZXMsIHJlc29sdmUgYW1iaWd1aXR5LCBpbXB1cmUsIG5vIGxvY2F0aW9ucyIgIiIgMjEKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIzMzAuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAogCiAKIGNhdCA+dHlwZXMueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKIC8qIFNpbXBsaWZpZWQgQysrIFR5cGUgYW5kIEV4cHJlc3Npb24gR3JhbW1hci4gICovCiAKICVlcnJvci12ZXJib3NlCiAKLSV7CislY29kZSByZXF1aXJlcworewogICAjaW5jbHVkZSA8c3RkaW8uaD4KICAgdW5pb24gTm9kZSB7CiAgICAgc3RydWN0IHsKQEAgLTYzNjM3LDMyICsxNzI5NTQsMjEgQEAKICAgICB9IHRlcm07CiAgIH07CiAgIHR5cGVkZWYgdW5pb24gTm9kZSBOb2RlOworICAjZGVmaW5lIFlZU1RZUEUgTm9kZSAqCit9CisKKyVjb2RlCit7CiAgIHN0YXRpYyBOb2RlICpuZXdfbnRlcm0gKGNoYXIgY29uc3QgKiwgTm9kZSAqLCBOb2RlICosIE5vZGUgKik7CiAgIHN0YXRpYyBOb2RlICpuZXdfdGVybSAoY2hhciAqKTsKICAgc3RhdGljIHZvaWQgZnJlZV9ub2RlIChOb2RlICopOwogICBzdGF0aWMgY2hhciAqbm9kZV90b19zdHJpbmcgKE5vZGUgKik7Ci0gICNkZWZpbmUgWVlTVFlQRSBOb2RlICoKICBzdGF0aWMgWVlTVFlQRSBzdG10TWVyZ2UgKFlZU1RZUEUgeDAsIFlZU1RZUEUgeDEpOwogICAjZGVmaW5lIFlZSU5JVERFUFRIIDEwCiAgICNkZWZpbmUgWVlTVEFDS0VYUEFOREFCTEUgMQotICBzdHJ1Y3QgWVlMVFlQRTsKLSNpZiBZWVBVUkUKLSMgaWYgWVlMU1BfTkVFREVECi0jICBkZWZpbmUgTEVYX1BBUkFNRVRFUlMgWVlTVFlQRSAqbHZhbHAsIHN0cnVjdCBZWUxUWVBFICpsbG9jcAotIyAgZGVmaW5lIEVSUk9SX1BBUkFNRVRFUlMgc3RydWN0IFlZTFRZUEUgKmxsb2NwLCBjaGFyIGNvbnN0ICpzCi0jIGVsc2UKLSMgIGRlZmluZSBMRVhfUEFSQU1FVEVSUyBZWVNUWVBFICpsdmFscAotIyBlbmRpZgotI2VuZGlmCi0jaWZuZGVmIExFWF9QQVJBTUVURVJTCi0jIGRlZmluZSBMRVhfUEFSQU1FVEVSUyB2b2lkCi0jZW5kaWYKLSNpZm5kZWYgRVJST1JfUEFSQU1FVEVSUwotIyBkZWZpbmUgRVJST1JfUEFSQU1FVEVSUyBjaGFyIGNvbnN0ICpzCi0jZW5kaWYKLSAgaW50IHl5bGV4IChMRVhfUEFSQU1FVEVSUyk7Ci0gIHZvaWQgeXllcnJvciAoRVJST1JfUEFSQU1FVEVSUyk7Ci0lfQorICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKyAgc3RhdGljIGludCB5eWxleCAodm9pZCk7Cit9CiAKICV0b2tlbiBUWVBFTkFNRSBJRAogCkBAIC02MzY3NywzMiArMTcyOTgzLDMyIEBACiAKIHByb2cgOgogICAgICB8IHByb2cgc3RtdCAgIHsKLQkJCWNoYXIgKm91dHB1dDsKLQkJCW91dHB1dCA9IG5vZGVfdG9fc3RyaW5nICgkMik7Ci0JCQlwcmludGYgKCIlc1xuIiwgb3V0cHV0KTsKLQkJCWZyZWUgKG91dHB1dCk7Ci0JCQlmcmVlX25vZGUgKCQyKTsKLQkJICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqb3V0cHV0OworICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gbm9kZV90b19zdHJpbmcgKCQyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiVzXG4iLCBvdXRwdXQpOworICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAob3V0cHV0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVfbm9kZSAoJDIpOworICAgICAgICAgICAgICAgICAgIH0KICAgICAgOwogCi1zdG10IDogZXhwciAnOycgICVtZXJnZSA8c3RtdE1lcmdlPgl7ICQkID0gJDE7IH0KK3N0bXQgOiBleHByICc7JyAgJW1lcmdlIDxzdG10TWVyZ2U+ICAgICB7ICQkID0gJDE7IH0KICAgICAgfCBkZWNsICAgICAgJW1lcmdlIDxzdG10TWVyZ2U+Ci0gICAgIHwgZXJyb3IgJzsnCXsgJCQgPSBuZXdfbnRlcm0gKCI8ZXJyb3I+IiwgMCwgMCwgMCk7IH0KLSAgICAgfCAnQCcJCXsgWVlBQ0NFUFQ7IH0KKyAgICAgfCBlcnJvciAnOycgICAgICAgIHsgJCQgPSBuZXdfbnRlcm0gKCI8ZXJyb3I+IiwgWVlfTlVMTCwgWVlfTlVMTCwgWVlfTlVMTCk7IH0KKyAgICAgfCAnQCcgICAgICAgICAgICAgIHsgWVlBQ0NFUFQ7IH0KICAgICAgOwogCiBleHByIDogSUQKICAgICAgfCBUWVBFTkFNRSAnKCcgZXhwciAnKScKLQkJCXsgJCQgPSBuZXdfbnRlcm0gKCI8Y2FzdD4oJXMsJXMpIiwgJDMsICQxLCAwKTsgfQotICAgICB8IGV4cHIgJysnIGV4cHIJeyAkJCA9IG5ld19udGVybSAoIisoJXMsJXMpIiwgJDEsICQzLCAwKTsgfQotICAgICB8IGV4cHIgJz0nIGV4cHIgICAgeyAkJCA9IG5ld19udGVybSAoIj0oJXMsJXMpIiwgJDEsICQzLCAwKTsgfQorICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ld19udGVybSAoIjxjYXN0PiglcywlcykiLCAkMywgJDEsIFlZX05VTEwpOyB9CisgICAgIHwgZXhwciAnKycgZXhwciAgICB7ICQkID0gbmV3X250ZXJtICgiKyglcywlcykiLCAkMSwgJDMsIFlZX05VTEwpOyB9CisgICAgIHwgZXhwciAnPScgZXhwciAgICB7ICQkID0gbmV3X250ZXJtICgiPSglcywlcykiLCAkMSwgJDMsIFlZX05VTEwpOyB9CiAgICAgIDsKIAogZGVjbCA6IFRZUEVOQU1FIGRlY2xhcmF0b3IgJzsnCi0JCQl7ICQkID0gbmV3X250ZXJtICgiPGRlY2xhcmU+KCVzLCVzKSIsICQxLCAkMiwgMCk7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBuZXdfbnRlcm0gKCI8ZGVjbGFyZT4oJXMsJXMpIiwgJDEsICQyLCBZWV9OVUxMKTsgfQogICAgICB8IFRZUEVOQU1FIGRlY2xhcmF0b3IgJz0nIGV4cHIgJzsnCi0JCQl7ICQkID0gbmV3X250ZXJtICgiPGluaXQtZGVjbGFyZT4oJXMsJXMsJXMpIiwgJDEsCi0JCQkJCSAgJDIsICQ0KTsgfQorICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ld19udGVybSAoIjxpbml0LWRlY2xhcmU+KCVzLCVzLCVzKSIsICQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDIsICQ0KTsgfQogICAgICA7CiAKIGRlY2xhcmF0b3IgOiBJRApAQCAtNjM3MTUsMTkgKzE3MzAyMSwyNiBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgogCiBpbnQKIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKLSAgaWYgKGFyZ2MgIT0gMikKLSAgICBhYm9ydCAoKTsKKyAgYXNzZXJ0IChhcmdjID09IDIpOwogICBpZiAoIWZyZW9wZW4gKGFyZ3ZbMV0sICJyIiwgc3RkaW4pKQogICAgIHJldHVybiAzOwogICByZXR1cm4geXlwYXJzZSAoKTsKIH0KIAotaW50Ci15eWxleCAoTEVYX1BBUkFNRVRFUlMpCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorCitpbnQgeXlsZXggKHZvaWQpCiB7CiAgIGNoYXIgYnVmZmVyWzI1Nl07CiAgIGludCBjOwpAQCAtNjM3NDQsNzMgKzE3MzA1Nyw1NSBAQAogCiAgIHdoaWxlICgxKQogICAgIHsKKyAgICAgIGFzc2VydCAoIWZlb2YgKHN0ZGluKSk7CiAgICAgICBjID0gZ2V0Y2hhciAoKTsKICAgICAgIHN3aXRjaCAoYykKLQl7Ci0JY2FzZSBFT0Y6Ci0JICByZXR1cm4gMDsKLQljYXNlICdcdCc6Ci0JICBjb2xOdW0gPSAoY29sTnVtICsgNykgJiB+NzsKLQkgIGJyZWFrOwotCWNhc2UgJyAnOiBjYXNlICdcZic6Ci0JICBjb2xOdW0gKz0gMTsKLQkgIGJyZWFrOwotCWNhc2UgJ1xuJzoKLQkgIGxpbmVOdW0gKz0gMTsKLQkgIGNvbE51bSA9IDA7Ci0JICBicmVhazsKLQlkZWZhdWx0OgotCSAgewotCSAgICBpbnQgdG9rOwotI2lmIFlZTFNQX05FRURFRAotCSAgICB5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGxvYy5sYXN0X2xpbmUgPSBsaW5lTnVtOwotCSAgICB5eWxsb2MuZmlyc3RfY29sdW1uID0gY29sTnVtOwotI2VuZGlmCi0JICAgIGlmIChpc2FscGhhIChjKSkKLQkgICAgICB7Ci0JCWkgPSAwOworICAgICAgICB7CisgICAgICAgIGNhc2UgRU9GOgorICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlICdcdCc6CisgICAgICAgICAgY29sTnVtID0gKGNvbE51bSArIDcpICYgfjc7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJyAnOiBjYXNlICdcZic6CisgICAgICAgICAgY29sTnVtICs9IDE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1xuJzoKKyAgICAgICAgICBsaW5lTnVtICs9IDE7CisgICAgICAgICAgY29sTnVtID0gMDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICB7CisgICAgICAgICAgICBpbnQgdG9rOworICAgICAgICAgICAgaWYgKGlzYWxwaGEgKGMpKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaSA9IDA7CiAKLQkJZG8KLQkJICB7Ci0JCSAgICBidWZmZXJbaSsrXSA9IGM7Ci0JCSAgICBjb2xOdW0gKz0gMTsKLQkJICAgIGlmIChpID09IHNpemVvZiBidWZmZXIgLSAxKQotCQkgICAgICBhYm9ydCAoKTsKLQkJICAgIGMgPSBnZXRjaGFyICgpOwotCQkgIH0KLQkJd2hpbGUgKGlzYWxudW0gKGMpIHx8IGMgPT0gJ18nKTsKKyAgICAgICAgICAgICAgICBkbworICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBidWZmZXJbaSsrXSA9IGM7CisgICAgICAgICAgICAgICAgICAgIGNvbE51bSArPSAxOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQgKGkgIT0gc2l6ZW9mIGJ1ZmZlciAtIDEpOworICAgICAgICAgICAgICAgICAgICBjID0gZ2V0Y2hhciAoKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3aGlsZSAoaXNhbG51bSAoYykgfHwgYyA9PSAnXycpOwogCi0JCXVuZ2V0YyAoYywgc3RkaW4pOwotCQlidWZmZXJbaSsrXSA9IDA7Ci0JCXRvayA9IGlzdXBwZXIgKCh1bnNpZ25lZCBjaGFyKSBidWZmZXJbMF0pID8gVFlQRU5BTUUgOiBJRDsKLQkJeXlsdmFsID0gbmV3X3Rlcm0gKHN0cmNweSAoKGNoYXIgKikgbWFsbG9jIChpKSwgYnVmZmVyKSk7Ci0JICAgICAgfQotCSAgICBlbHNlCi0JICAgICAgewotCQljb2xOdW0gKz0gMTsKLQkJdG9rID0gYzsKLQkJeXlsdmFsID0gMDsKLQkgICAgICB9Ci0jaWYgWVlMU1BfTkVFREVECi0JICAgIHl5bGxvYy5sYXN0X2NvbHVtbiA9IGNvbE51bS0xOwotI2VuZGlmCi0JICAgIHJldHVybiB0b2s7Ci0JICB9Ci0JfQorICAgICAgICAgICAgICAgIHVuZ2V0YyAoYywgc3RkaW4pOworICAgICAgICAgICAgICAgIGJ1ZmZlcltpKytdID0gMDsKKyAgICAgICAgICAgICAgICB0b2sgPSBpc3VwcGVyICgodW5zaWduZWQgY2hhcikgYnVmZmVyWzBdKSA/IFRZUEVOQU1FIDogSUQ7CisgICAgICAgICAgICAgICAgeXlsdmFsID0gbmV3X3Rlcm0gKHN0cmNweSAoKGNoYXIgKikgbWFsbG9jIChpKSwgYnVmZmVyKSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbE51bSArPSAxOworICAgICAgICAgICAgICAgIHRvayA9IGM7CisgICAgICAgICAgICAgICAgeXlsdmFsID0gWVlfTlVMTDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRvazsKKyAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQKLXl5ZXJyb3IgKEVSUk9SX1BBUkFNRVRFUlMpCi17Ci0jaWYgWVlQVVJFICYmIFlZTFNQX05FRURFRAotICAvKiBQYWNpZnkgR0NDIGJ5IHVzaW5nIGxsb2NwLiAgKi8KLSAgaWYgKCEgbGxvY3ApCi0gICAgYWJvcnQgKCk7Ci0jZW5kaWYKLSAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIHMpOwotfQotCiBzdGF0aWMgTm9kZSAqCiBuZXdfbnRlcm0gKGNoYXIgY29uc3QgKmZvcm0sIE5vZGUgKmNoaWxkMCwgTm9kZSAqY2hpbGQxLCBOb2RlICpjaGlsZDIpCiB7CkBAIC02Mzg3OCw3ICsxNzMxNzMsNyBAQAogICAgICAgY2hpbGQxID0gbm9kZV90b19zdHJpbmcgKG5vZGUtPm50ZXJtLmNoaWxkcmVuWzFdKTsKICAgICAgIGNoaWxkMiA9IG5vZGVfdG9fc3RyaW5nIChub2RlLT5udGVybS5jaGlsZHJlblsyXSk7CiAgICAgICBidWZmZXIgPSAoY2hhciAqKSBtYWxsb2MgKHN0cmxlbiAobm9kZS0+bnRlcm0uZm9ybSkgKyBzdHJsZW4gKGNoaWxkMCkKLQkJCQkrIHN0cmxlbiAoY2hpbGQxKSArIHN0cmxlbiAoY2hpbGQyKSArIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHN0cmxlbiAoY2hpbGQxKSArIHN0cmxlbiAoY2hpbGQyKSArIDEpOwogICAgICAgc3ByaW50ZiAoYnVmZmVyLCBub2RlLT5udGVybS5mb3JtLCBjaGlsZDAsIGNoaWxkMSwgY2hpbGQyKTsKICAgICAgIGZyZWUgKGNoaWxkMCk7CiAgICAgICBmcmVlIChjaGlsZDEpOwpAQCAtNjM4OTMsNyArMTczMTg4LDcgQEAKIHN0YXRpYyBZWVNUWVBFCiBzdG10TWVyZ2UgKFlZU1RZUEUgeDAsIFlZU1RZUEUgeDEpCiB7Ci0gIHJldHVybiBuZXdfbnRlcm0gKCI8T1I+KCVzLCVzKSIsIHgwLCB4MSwgMCk7CisgIHJldHVybiBuZXdfbnRlcm0gKCI8T1I+KCVzLCVzKSIsIHgwLCB4MSwgWVlfTlVMTCk7CiB9CiAKIF9BVEVPRgpAQCAtNjM5MjcsODkgKzE3MzIyMiwxMjkgQEAKIF9BVEVPRgogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY3h4LXR5cGUuYXQ6NDY4OiBiaXNvbiAtbyB0eXBlcy5jIHR5cGVzLnkiCi1lY2hvIGN4eC10eXBlLmF0OjQ2OCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gdHlwZXMuYyB0eXBlcy55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImN4eC10eXBlLmF0OjQ2ODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0NDk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyB0eXBlcy5jIHR5cGVzLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJjeHgtdHlwZS5hdDo0NDkiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gdHlwZXMuYyB0eXBlcy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0NDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQ0OTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gdHlwZXMuYyB0eXBlcy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIHR5cGVzLmMgdHlwZXMueSIgImN4eC10eXBlLmF0OjQ0OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyB0eXBlcy5jIHR5cGVzLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQ0OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0NDk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJjeHgtdHlwZS5hdDo0NDkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDQ5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDQ5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiY3h4LXR5cGUuYXQ6NDQ5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQ0OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQ0OTogYmlzb24gLW8gdHlwZXMuYyB0eXBlcy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiY3h4LXR5cGUuYXQ6NDQ5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIHR5cGVzLmMgdHlwZXMueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQ0OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSRhdF90cmFjZW9mZgotZWNobyAiY3h4LXR5cGUuYXQ6NDY4OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIHR5cGVzIHR5cGVzLmMgXCRMSUJTIgotZWNobyBjeHgtdHlwZS5hdDo0NjggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyB0eXBlcyB0eXBlcy5jICRMSUJTICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImN4eC10eXBlLmF0OjQ2ODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQ0OTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImN4eC10eXBlLmF0OjQ0OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDQ5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQ0OTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyB0eXBlcyB0eXBlcy5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIHR5cGVzIHR5cGVzLmMgJExJQlMiICJjeHgtdHlwZS5hdDo0NDkiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIHR5cGVzIHR5cGVzLmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQ0OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJjeHgtdHlwZS5hdDo0NzA6IFwkUFJFUEFSU0VSIC4vdHlwZXMgdGVzdC1pbnB1dCIKLWVjaG8gY3h4LXR5cGUuYXQ6NDcwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkUFJFUEFSU0VSIC4vdHlwZXMgdGVzdC1pbnB1dCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvID4+JGF0X3N0ZGVycjsgZWNobyAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkIElELCBleHBlY3RpbmcgJz0nIG9yICcrJyBvciAnKScKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gPj4kYXRfc3Rkb3V0OyBlY2hvICIrKHoscSkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0NTE6ICBcJFBSRVBBUlNFUiAuL3R5cGVzIHRlc3QtaW5wdXQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vdHlwZXMgdGVzdC1pbnB1dCIgImN4eC10eXBlLmF0OjQ1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL3R5cGVzIHRlc3QtaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiKyh6LHEpCiA8ZGVjbGFyZT4oVCx4KQogPGluaXQtZGVjbGFyZT4oVCx4LHkpCiA9KHgseSkKQEAgLTY0MDE4LDY4ICsxNzMzNTMsNjQgQEAKIDxPUj4oPGluaXQtZGVjbGFyZT4oVCx5LCsoeixxKSksPSg8Y2FzdD4oeSxUKSwrKHoscSkpKQogPGVycm9yPgogKyh6LHEpCi0iIHwgJGF0X2RpZmYgLSAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJjeHgtdHlwZS5hdDo0NzA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2N4eC10eXBlLmF0OjQ1MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KLQotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Cit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvY3h4LXR5cGUuYXQ6NDUxOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImN4eC10eXBlLmF0OjQ1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCBJRCwgZXhwZWN0aW5nICc9JyBvciAnKycgb3IgJyknCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9jeHgtdHlwZS5hdDo0NTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgYmFubmVyLTE4ICkgIyBCYW5uZXIgMTguIGdsci1yZWdyZXNzaW9uLmF0OjE5Ci0gICAgY2F0IDw8XF9BVEVPRgorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8zMzAKKyNBVF9TVEFSVF8zMzEKK2F0X2ZuX2dyb3VwX2Jhbm5lciAzMzEgJ2dsci1yZWdyZXNzaW9uLmF0OjI1JyBcCisgICJCYWRseSBDb2xsYXBzZWQgR0xSIFN0YXRlcyIgIiAgICAgICAgICAgICAgICAgICAgICIgMjIKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIzMzEuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KIAotR0xSIFJlZ3Jlc3Npb24gVGVzdHMKLQotX0FURU9GCi0gICAgOzsKLQotICAxNDIgKSAjIDE0Mi4gZ2xyLXJlZ3Jlc3Npb24uYXQ6MjU6IEJhZGx5IENvbGxhcHNlZCBHTFIgU3RhdGVzCi0gICAgYXRfc2V0dXBfbGluZT0nZ2xyLXJlZ3Jlc3Npb24uYXQ6MjUnCi0gICAgYXRfZGVzYz0nQmFkbHkgQ29sbGFwc2VkIEdMUiBTdGF0ZXMnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjE0MjogQmFkbHkgQ29sbGFwc2VkIEdMUiBTdGF0ZXMgICAgICAgICAgICAgICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjE0Mi4gZ2xyLXJlZ3Jlc3Npb24uYXQ6MjU6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KIAogCiBjYXQgPmdsci1yZWdyMS55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogLyogUmVncmVzc2lvbiBUZXN0OiBJbXByb3BlciBzdGF0ZSBjb21wcmVzc2lvbiAqLwogLyogUmVwb3J0ZWQgYnkgU2NvdHQgTWNQZWFrICovCiAKICV7CiAjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KIAogI2RlZmluZSBZWVNUWVBFIGludAogc3RhdGljIFlZU1RZUEUgZXhwck1lcmdlIChZWVNUWVBFIHgwLCBZWVNUWVBFIHgxKTsKLWludCB5eWxleCAodm9pZCk7Ci12b2lkIHl5ZXJyb3IgKGNoYXIgY29uc3QgKm1zZyk7CitzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKK3N0YXRpYyBpbnQgeXlsZXggKHZvaWQpOwogJX0KIAogCkBAIC02NDEwOSw5NiArMTczNDQwLDE1NyBAQAogICByZXR1cm4gMDsKIH0KIAorY29uc3QgY2hhciAqaW5wdXQgPSBZWV9OVUxMOworCiBpbnQKLW1haW4gKHZvaWQpCittYWluIChpbnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKQogeworICBhc3NlcnQgKGFyZ2MgPT0gMik7CisgIGlucHV0ID0gYXJndlsxXTsKICAgcmV0dXJuIHl5cGFyc2UgKCk7CiB9CiAKLXZvaWQKLXl5ZXJyb3IgKGNoYXIgY29uc3QgKm1zZykKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKIHsKICAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7CiB9CiAKLQogaW50CiB5eWxleCAodm9pZCkKIHsKLSAgZm9yICg7OykKLSAgICB7Ci0gICAgICBpbnQgY2ggPSBnZXRjaGFyICgpOwotICAgICAgaWYgKGNoID09IEVPRikKLQlyZXR1cm4gMDsKLSAgICAgIGVsc2UgaWYgKGNoID09ICdCJyB8fCBjaCA9PSAnUCcpCi0JcmV0dXJuIGNoOwotICAgIH0KKyAgcmV0dXJuICppbnB1dCsrOwogfQogX0FURU9GCiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImdsci1yZWdyZXNzaW9uLmF0Ojk2OiBiaXNvbiAtbyBnbHItcmVncjEuYyBnbHItcmVncjEueSIKLWVjaG8gZ2xyLXJlZ3Jlc3Npb24uYXQ6OTYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGdsci1yZWdyMS5jIGdsci1yZWdyMS55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gPj4kYXRfc3RkZXJyOyBlY2hvICJnbHItcmVncjEueTogY29uZmxpY3RzOiAxIHNoaWZ0L3JlZHVjZQotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6OTY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjkwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gZ2xyLXJlZ3IxLmMgZ2xyLXJlZ3IxLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJnbHItcmVncmVzc2lvbi5hdDo5MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBnbHItcmVncjEuYyBnbHItcmVncjEueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6OTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo5MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZ2xyLXJlZ3IxLmMgZ2xyLXJlZ3IxLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZ2xyLXJlZ3IxLmMgZ2xyLXJlZ3IxLnkiICJnbHItcmVncmVzc2lvbi5hdDo5MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBnbHItcmVncjEuYyBnbHItcmVncjEueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6OTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6OTA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJnbHItcmVncmVzc2lvbi5hdDo5MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo5MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjkwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6OTAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6OTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo5MDogYmlzb24gLW8gZ2xyLXJlZ3IxLmMgZ2xyLXJlZ3IxLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJnbHItcmVncmVzc2lvbi5hdDo5MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBnbHItcmVncjEuYyBnbHItcmVncjEueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImdsci1yZWdyMS55OiBjb25mbGljdHM6IDEgc2hpZnQvcmVkdWNlCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo5MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCiAKLSRhdF90cmFjZW9mZgotZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6OTc6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gZ2xyLXJlZ3IxIGdsci1yZWdyMS5jIFwkTElCUyIKLWVjaG8gZ2xyLXJlZ3Jlc3Npb24uYXQ6OTcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBnbHItcmVncjEgZ2xyLXJlZ3IxLmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6OTc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo5MzogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImdsci1yZWdyZXNzaW9uLmF0OjkzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo5MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo5MzogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBnbHItcmVncjEgZ2xyLXJlZ3IxLmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gZ2xyLXJlZ3IxIGdsci1yZWdyMS5jICRMSUJTIiAiZ2xyLXJlZ3Jlc3Npb24uYXQ6OTMiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGdsci1yZWdyMSBnbHItcmVncjEuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6OTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjEwODogZWNobyBCUEJQQiB8IC4vZ2xyLXJlZ3IxIgotZWNobyBnbHItcmVncmVzc2lvbi5hdDoxMDggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGVjaG8gQlBCUEIgfCAuL2dsci1yZWdyMSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvID4+JGF0X3N0ZG91dDsgZWNobyAiRSAtPiAnQicKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo5NDogIFwkUFJFUEFSU0VSIC4vZ2xyLXJlZ3IxIEJQQlBCIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2dsci1yZWdyMSBCUEJQQiIgImdsci1yZWdyZXNzaW9uLmF0Ojk0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vZ2xyLXJlZ3IxIEJQQlBCCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIkUgLT4gJ0InCiBFIC0+ICdCJwogRSAtPiBFICdQJyBFCiBFIC0+ICdCJwpAQCAtNjQyMDcsNDkgKzE3MzU5OSw1MCBAQAogRSAtPiBFICdQJyBFCiBFIC0+IEUgJ1AnIEUKIDxPUj4KLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjEwODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6OTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6OTQ6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiZ2xyLXJlZ3Jlc3Npb24uYXQ6OTQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6OTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwogCi0gIDE0MyApICMgMTQzLiBnbHItcmVncmVzc2lvbi5hdDoxMTY6IEltcHJvcGVyIGhhbmRsaW5nIG9mIGVtYmVkZGVkIGFjdGlvbnMgYW5kIGRvbGxhcigtTikgaW4gR0xSIHBhcnNlcnMKLSAgICBhdF9zZXR1cF9saW5lPSdnbHItcmVncmVzc2lvbi5hdDoxMTYnCi0gICAgYXRfZGVzYz0nSW1wcm9wZXIgaGFuZGxpbmcgb2YgZW1iZWRkZWQgYWN0aW9ucyBhbmQgZG9sbGFyKC1OKSBpbiBHTFIgcGFyc2VycycKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiMTQzOiBJbXByb3BlciBoYW5kbGluZyBvZiBlbWJlZGRlZCBhY3Rpb25zIGFuZCBkb2xsYXIoLU4pIGluIEdMUiBwYXJzZXJzJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjE0My4gZ2xyLXJlZ3Jlc3Npb24uYXQ6MTE2OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzMzMQorI0FUX1NUQVJUXzMzMgorYXRfZm5fZ3JvdXBfYmFubmVyIDMzMiAnZ2xyLXJlZ3Jlc3Npb24uYXQ6MTEyJyBcCisgICJJbXByb3BlciBoYW5kbGluZyBvZiBlbWJlZGRlZCBhY3Rpb25zIGFuZCBkb2xsYXIoLU4pIGluIEdMUiBwYXJzZXJzIiAiIiAyMgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjMzMi4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCiAKIAogY2F0ID5nbHItcmVncjJhLnkgPDwnX0FURU9GJwotJXsKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotICAvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KLSMgdW5kZWYgbWFsbG9jCi0jIHVuZGVmIG1lbWNtcAotIyB1bmRlZiByZWFsbG9jCi0jZW5kaWYKLSV9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCiAvKiBSZWdyZXNzaW9uIFRlc3Q6IEltcHJvcGVyIGhhbmRsaW5nIG9mIGVtYmVkZGVkIGFjdGlvbnMgYW5kICQtTiAgKi8KIC8qIFJlcG9ydGVkIGJ5IFMuIEVrZW4gKi8KQEAgLTY0MjYxLDggKzE3MzY1NCw5IEBACiAgICNpbmNsdWRlIDxzdGRpby5oPgogICAjaW5jbHVkZSA8c3RkbGliLmg+CiAgICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAgaW50IHl5bGV4ICh2b2lkKTsKLSAgdm9pZCB5eWVycm9yIChjaGFyIGNvbnN0ICopOworICAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKICV9CiAKICVnbHItcGFyc2VyCkBAIC02NDMwMiwxNSArMTczNjk2LDIzIEBACiAgICB7IHByaW50ZiAoIlZhcmlhYmxlOiAnJXMnXG4iLCAkLTEpOyB9CiAKICUlCi0KLUZJTEUgKmlucHV0ID0gTlVMTDsKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CitGSUxFICppbnB1dDsKIAogaW50CiB5eWxleCAodm9pZCkKIHsKICAgY2hhciBidWZbNTBdOwogICBjaGFyICpzOwotICBzd2l0Y2ggKGZzY2FuZiAoaW5wdXQsICIgJTFbYS16LF0iLCBidWYpKSB7CisgIGFzc2VydCAoIWZlb2YgKHN0ZGluKSk7CisgIHN3aXRjaCAoZnNjYW5mIChpbnB1dCwgIiAlMVthLXosXSIsIGJ1ZikpCisgIHsKICAgY2FzZSAxOgogICAgIHJldHVybiBidWZbMF07CiAgIGNhc2UgRU9GOgpAQCAtNjQzMjAsMTk5ICsxNzM3MjIsMjg0IEBACiAgIH0KICAgaWYgKGZzY2FuZiAoaW5wdXQsICIlNDlzIiwgYnVmKSAhPSAxKQogICAgIHJldHVybiAwOwotICBpZiAoc2l6ZW9mIGJ1ZiAtIDEgPD0gc3RybGVuIChidWYpKQotICAgIGFib3J0ICgpOworICBhc3NlcnQgKHN0cmxlbiAoYnVmKSA8IHNpemVvZiBidWYgLSAxKTsKICAgcyA9IChjaGFyICopIG1hbGxvYyAoc3RybGVuIChidWYpICsgMSk7CiAgIHN0cmNweSAocywgYnVmKTsKICAgeXlsdmFsID0gczsKICAgcmV0dXJuICdWJzsKIH0KIAotdm9pZAoteXllcnJvciAoY2hhciBjb25zdCAqcykKLXsgcHJpbnRmICgiJXNcbiIsIHMpOwotfQotCiBpbnQKIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKKyAgaW50IHJlczsKICAgaW5wdXQgPSBzdGRpbjsKLSAgaWYgKGFyZ2MgPT0gMiAmJiAhKGlucHV0ID0gZm9wZW4gKGFyZ3ZbMV0sICJyIikpKSByZXR1cm4gMzsKLSAgcmV0dXJuIHl5cGFyc2UgKCk7CisgIGlmIChhcmdjID09IDIgJiYgIShpbnB1dCA9IGZvcGVuIChhcmd2WzFdLCAiciIpKSkKKyAgICByZXR1cm4gMzsKKyAgcmVzID0geXlwYXJzZSAoKTsKKyAgaWYgKGFyZ2MgPT0gMiAmJiBmY2xvc2UgKGlucHV0KSkKKyAgICByZXR1cm4gNDsKKyAgcmV0dXJuIHJlczsKIH0KIF9BVEVPRgogCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJnbHItcmVncmVzc2lvbi5hdDoyMTI6IGJpc29uIC1vIGdsci1yZWdyMmEuYyBnbHItcmVncjJhLnkiCi1lY2hvIGdsci1yZWdyZXNzaW9uLmF0OjIxMiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gZ2xyLXJlZ3IyYS5jIGdsci1yZWdyMmEueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvID4+JGF0X3N0ZGVycjsgZWNobyAiZ2xyLXJlZ3IyYS55OiBjb25mbGljdHM6IDIgc2hpZnQvcmVkdWNlCi0iIHwgJGF0X2RpZmYgLSAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJnbHItcmVncmVzc2lvbi5hdDoyMTI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjIxMDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGdsci1yZWdyMmEuYyBnbHItcmVncjJhLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJnbHItcmVncmVzc2lvbi5hdDoyMTAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gZ2xyLXJlZ3IyYS5jIGdsci1yZWdyMmEueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MjEwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MjEwOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBnbHItcmVncjJhLmMgZ2xyLXJlZ3IyYS55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGdsci1yZWdyMmEuYyBnbHItcmVncjJhLnkiICJnbHItcmVncmVzc2lvbi5hdDoyMTAiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZ2xyLXJlZ3IyYS5jIGdsci1yZWdyMmEueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MjEwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjIxMDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImdsci1yZWdyZXNzaW9uLmF0OjIxMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoyMTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoyMTA6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJnbHItcmVncmVzc2lvbi5hdDoyMTAiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MjEwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCi0KLSRhdF90cmFjZW9uCi0KLSRhdF90cmFjZW9mZgotZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MjEzOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGdsci1yZWdyMmEgZ2xyLXJlZ3IyYS5jIFwkTElCUyIKLWVjaG8gZ2xyLXJlZ3Jlc3Npb24uYXQ6MjEzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gZ2xyLXJlZ3IyYSBnbHItcmVncjJhLmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MjEzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoyMTA6IGJpc29uIC1vIGdsci1yZWdyMmEuYyBnbHItcmVncjJhLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJnbHItcmVncmVzc2lvbi5hdDoyMTAiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gZ2xyLXJlZ3IyYS5jIGdsci1yZWdyMmEueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImdsci1yZWdyMmEueTogY29uZmxpY3RzOiAyIHNoaWZ0L3JlZHVjZQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MjEwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjIxNzogZWNobyBzIFZBUklBQkxFXzEgdCB2IHggcSB8IC4vZ2xyLXJlZ3IyYSIKLWVjaG8gZ2xyLXJlZ3Jlc3Npb24uYXQ6MjE3ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBlY2hvIHMgVkFSSUFCTEVfMSB0IHYgeCBxIHwgLi9nbHItcmVncjJhICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gPj4kYXRfc3Rkb3V0OyBlY2hvICJWYXJpYWJsZTogJ1ZBUklBQkxFXzEnCi0iIHwgJGF0X2RpZmYgLSAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJnbHItcmVncmVzc2lvbi5hdDoyMTc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoyMTM6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJnbHItcmVncmVzc2lvbi5hdDoyMTMiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjIxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoyMTM6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gZ2xyLXJlZ3IyYSBnbHItcmVncjJhLmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gZ2xyLXJlZ3IyYSBnbHItcmVncjJhLmMgJExJQlMiICJnbHItcmVncmVzc2lvbi5hdDoyMTMiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGdsci1yZWdyMmEgZ2xyLXJlZ3IyYS5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoyMTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0kYXRfdHJhY2VvbgogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjIyMDogZWNobyBzIFZBUklBQkxFXzEgLCBBTk9USEVSX1ZBUklBQkxFXzIgdCBlIHwgLi9nbHItcmVncjJhIgotZWNobyBnbHItcmVncmVzc2lvbi5hdDoyMjAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGVjaG8gcyBWQVJJQUJMRV8xICwgQU5PVEhFUl9WQVJJQUJMRV8yIHQgZSB8IC4vZ2xyLXJlZ3IyYSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvID4+JGF0X3N0ZG91dDsgZWNobyAiVmFybGlzdDogJ1ZBUklBQkxFXzEsQU5PVEhFUl9WQVJJQUJMRV8yJwotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MjIwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCitjYXQgPmlucHV0MS50eHQgPDwnX0FURU9GJworcyBWQVJJQUJMRV8xIHQgdiB4IHEKK19BVEVPRgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MjE4OiAgXCRQUkVQQVJTRVIgLi9nbHItcmVncjJhIGlucHV0MS50eHQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vZ2xyLXJlZ3IyYSBpbnB1dDEudHh0IiAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MjE4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vZ2xyLXJlZ3IyYSBpbnB1dDEudHh0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIlZhcmlhYmxlOiAnVkFSSUFCTEVfMScKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjIxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSRhdF90cmFjZW9uCi0KLSRhdF90cmFjZW9mZgotZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MjIzOiBlY2hvIHMgVkFSSUFCTEVfMyB0IHYgeCB8IC4vZ2xyLXJlZ3IyYSIKLWVjaG8gZ2xyLXJlZ3Jlc3Npb24uYXQ6MjIzID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBlY2hvIHMgVkFSSUFCTEVfMyB0IHYgeCB8IC4vZ2xyLXJlZ3IyYSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvID4+JGF0X3N0ZG91dDsgZWNobyAiVmFyaWFibGU6ICdWQVJJQUJMRV8zJwotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MjIzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoyMTg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MjE4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjIxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKK2NhdCA+aW5wdXQyLnR4dCA8PCdfQVRFT0YnCitzIFZBUklBQkxFXzEgLCBBTk9USEVSX1ZBUklBQkxFXzIgdCBlCitfQVRFT0YKIAotICAxNDQgKSAjIDE0NC4gZ2xyLXJlZ3Jlc3Npb24uYXQ6MjMyOiBJbXByb3BlciBtZXJnaW5nIG9mIEdMUiBkZWxheWVkIGFjdGlvbiBzZXRzCi0gICAgYXRfc2V0dXBfbGluZT0nZ2xyLXJlZ3Jlc3Npb24uYXQ6MjMyJwotICAgIGF0X2Rlc2M9J0ltcHJvcGVyIG1lcmdpbmcgb2YgR0xSIGRlbGF5ZWQgYWN0aW9uIHNldHMnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjE0NDogSW1wcm9wZXIgbWVyZ2luZyBvZiBHTFIgZGVsYXllZCBhY3Rpb24gc2V0cyAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjE0NC4gZ2xyLXJlZ3Jlc3Npb24uYXQ6MjMyOiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MjI1OiAgXCRQUkVQQVJTRVIgLi9nbHItcmVncjJhIGlucHV0Mi50eHQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vZ2xyLXJlZ3IyYSBpbnB1dDIudHh0IiAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MjI1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vZ2xyLXJlZ3IyYSBpbnB1dDIudHh0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIlZhcmxpc3Q6ICdWQVJJQUJMRV8xLEFOT1RIRVJfVkFSSUFCTEVfMicKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjIyNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoyMjU6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MjI1IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjIyNSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCitjYXQgPmlucHV0My50eHQgPDwnX0FURU9GJworcyBWQVJJQUJMRV8zIHQgdiB4CitfQVRFT0YKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjIzMzogIFwkUFJFUEFSU0VSIC4vZ2xyLXJlZ3IyYSBpbnB1dDMudHh0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2dsci1yZWdyMmEgaW5wdXQzLnR4dCIgImdsci1yZWdyZXNzaW9uLmF0OjIzMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2dsci1yZWdyMmEgaW5wdXQzLnR4dAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJWYXJpYWJsZTogJ1ZBUklBQkxFXzMnCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoyMzMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MjMzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImdsci1yZWdyZXNzaW9uLmF0OjIzMyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoyMzMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzMzMgorI0FUX1NUQVJUXzMzMworYXRfZm5fZ3JvdXBfYmFubmVyIDMzMyAnZ2xyLXJlZ3Jlc3Npb24uYXQ6MjQ0JyBcCisgICJJbXByb3BlciBtZXJnaW5nIG9mIEdMUiBkZWxheWVkIGFjdGlvbiBzZXRzIiAiICAgICIgMjIKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIzMzMuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKwogCiAKIGNhdCA+Z2xyLXJlZ3IzLnkgPDwnX0FURU9GJwotJXsKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotICAvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KLSMgdW5kZWYgbWFsbG9jCi0jIHVuZGVmIG1lbWNtcAotIyB1bmRlZiByZWFsbG9jCi0jZW5kaWYKLSV9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCiAvKiBSZWdyZXNzaW9uIFRlc3Q6IEltcHJvcGVyIG1lcmdpbmcgb2YgR0xSIGRlbGF5ZWQgYWN0aW9uIHNldHMuICAqLwogLyogUmVwb3J0ZWQgYnkgTS4gUm9zaWVuICovCiAKICV7CiAjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KIAogc3RhdGljIGludCBNZXJnZVJ1bGUgKGludCB4MCwgaW50IHgxKTsKLXN0YXRpYyB2b2lkIHl5ZXJyb3IgKGNoYXIgY29uc3QgKiBzKTsKLWludCB5eWxleCAodm9pZCk7CitzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKK3N0YXRpYyBpbnQgeXlsZXggKHZvaWQpOwogCiAjZGVmaW5lIFJVTEUoeCkgKDEgPDwgKHgpKQogCkBAIC02NDU1MywxNSArMTc0MDQwLDIwIEBACiAKICUlCiAKLXN0YXRpYyBpbnQgTWVyZ2VSdWxlIChpbnQgeDAsIGludCB4MSkgeworc3RhdGljIGludAorTWVyZ2VSdWxlIChpbnQgeDAsIGludCB4MSkKK3sKICAgcmV0dXJuIHgwIHwgeDE7CiB9Ci0KLXN0YXRpYyB2b2lkIHl5ZXJyb3IoY2hhciBjb25zdCAqIHMpIHsKLSAgZnByaW50ZihzdGRlcnIsImVycm9yOiAlc1xuIixzKTsKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7CiB9CiAKLUZJTEUgKmlucHV0ID0gTlVMTDsKK0ZJTEUgKmlucHV0ID0gWVlfTlVMTDsKIAogaW50IFBbXSA9IHsgUDEsIFAyIH07CiBpbnQgT1tdID0geyBPMSwgTzIgfTsKQEAgLTY0NTcwLDYgKzE3NDA2Miw3IEBACiBpbnQgeXlsZXggKHZvaWQpCiB7CiAgIGNoYXIgaW5wWzNdOworICBhc3NlcnQgKCFmZW9mIChzdGRpbikpOwogICBpZiAoZnNjYW5mIChpbnB1dCwgIiUycyIsIGlucCkgPT0gRU9GKQogICAgIHJldHVybiAwOwogICBzd2l0Y2ggKGlucFswXSkKQEAgLTY0NTgxLDEyMCArMTc0MDc0LDE5NSBAQAogICByZXR1cm4gQkFEX0NIQVI7CiB9CiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pIHsKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQoreworICBpbnQgcmVzOwogICBpbnB1dCA9IHN0ZGluOwotICBpZiAoYXJnYyA9PSAyICYmICEoaW5wdXQgPSBmb3BlbiAoYXJndlsxXSwgInIiKSkpIHJldHVybiAzOwotICByZXR1cm4geXlwYXJzZSAoKTsKKyAgaWYgKGFyZ2MgPT0gMiAmJiAhKGlucHV0ID0gZm9wZW4gKGFyZ3ZbMV0sICJyIikpKQorICAgIHJldHVybiAzOworICByZXMgPSB5eXBhcnNlICgpOworICBpZiAoYXJnYyA9PSAyICYmIGZjbG9zZSAoaW5wdXQpKQorICAgIHJldHVybiA0OworICByZXR1cm4gcmVzOwogfQogX0FURU9GCiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjMyMjogYmlzb24gLW8gZ2xyLXJlZ3IzLmMgZ2xyLXJlZ3IzLnkiCi1lY2hvIGdsci1yZWdyZXNzaW9uLmF0OjMyMiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gZ2xyLXJlZ3IzLmMgZ2xyLXJlZ3IzLnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyA+PiRhdF9zdGRlcnI7IGVjaG8gImdsci1yZWdyMy55OiBjb25mbGljdHM6IDEgc2hpZnQvcmVkdWNlLCAxIHJlZHVjZS9yZWR1Y2UKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjMyMjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MzQzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gZ2xyLXJlZ3IzLmMgZ2xyLXJlZ3IzLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJnbHItcmVncmVzc2lvbi5hdDozNDMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gZ2xyLXJlZ3IzLmMgZ2xyLXJlZ3IzLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjM0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjM0MzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZ2xyLXJlZ3IzLmMgZ2xyLXJlZ3IzLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZ2xyLXJlZ3IzLmMgZ2xyLXJlZ3IzLnkiICJnbHItcmVncmVzc2lvbi5hdDozNDMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZ2xyLXJlZ3IzLmMgZ2xyLXJlZ3IzLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjM0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDozNDM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJnbHItcmVncmVzc2lvbi5hdDozNDMiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MzQzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MzQzOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MzQzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjM0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjMyMzogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBnbHItcmVncjMgZ2xyLXJlZ3IzLmMgXCRMSUJTIgotZWNobyBnbHItcmVncmVzc2lvbi5hdDozMjMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBnbHItcmVncjMgZ2xyLXJlZ3IzLmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MzIzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDozNDM6IGJpc29uIC1vIGdsci1yZWdyMy5jIGdsci1yZWdyMy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MzQzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGdsci1yZWdyMy5jIGdsci1yZWdyMy55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiZ2xyLXJlZ3IzLnk6IGNvbmZsaWN0czogMSBzaGlmdC9yZWR1Y2UsIDEgcmVkdWNlL3JlZHVjZQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MzQzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjMyNzogZWNobyBwMSB0NCBvMiBwMSBwMSB0MSBvMSB0MiBwMiBvMSB0MyBwMiBwMiB8IC4vZ2xyLXJlZ3IzIgotZWNobyBnbHItcmVncmVzc2lvbi5hdDozMjcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGVjaG8gcDEgdDQgbzIgcDEgcDEgdDEgbzEgdDIgcDIgbzEgdDMgcDIgcDIgfCAuL2dsci1yZWdyMyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvID4+JGF0X3N0ZG91dDsgZWNobyAiUmVzdWx0OiAxYzA0Ci0iIHwgJGF0X2RpZmYgLSAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJnbHItcmVncmVzc2lvbi5hdDozMjc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDozNDY6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJnbHItcmVncmVzc2lvbi5hdDozNDYiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjM0NiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDozNDY6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gZ2xyLXJlZ3IzIGdsci1yZWdyMy5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGdsci1yZWdyMyBnbHItcmVncjMuYyAkTElCUyIgImdsci1yZWdyZXNzaW9uLmF0OjM0NiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gZ2xyLXJlZ3IzIGdsci1yZWdyMy5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDozNDYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OworY2F0ID5pbnB1dC50eHQgPDwnX0FURU9GJworcDEgdDQgbzIgcDEgcDEgdDEgbzEgdDIgcDIgbzEgdDMgcDIgcDIKK19BVEVPRgogCi0gIDE0NSApICMgMTQ1LiBnbHItcmVncmVzc2lvbi5hdDozMzc6IER1cGxpY2F0ZSByZXByZXNlbnRhdGlvbiBvZiBtZXJnZWQgdHJlZXMKLSAgICBhdF9zZXR1cF9saW5lPSdnbHItcmVncmVzc2lvbi5hdDozMzcnCi0gICAgYXRfZGVzYz0nRHVwbGljYXRlIHJlcHJlc2VudGF0aW9uIG9mIG1lcmdlZCB0cmVlcycKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiMTQ1OiBEdXBsaWNhdGUgcmVwcmVzZW50YXRpb24gb2YgbWVyZ2VkIHRyZWVzICAgICAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiMTQ1LiBnbHItcmVncmVzc2lvbi5hdDozMzc6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDozNTE6ICBcJFBSRVBBUlNFUiAuL2dsci1yZWdyMyBpbnB1dC50eHQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vZ2xyLXJlZ3IzIGlucHV0LnR4dCIgImdsci1yZWdyZXNzaW9uLmF0OjM1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2dsci1yZWdyMyBpbnB1dC50eHQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiUmVzdWx0OiAxYzA0CisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDozNTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MzUxOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImdsci1yZWdyZXNzaW9uLmF0OjM1MSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDozNTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8zMzMKKyNBVF9TVEFSVF8zMzQKK2F0X2ZuX2dyb3VwX2Jhbm5lciAzMzQgJ2dsci1yZWdyZXNzaW9uLmF0OjM2NCcgXAorICAiRHVwbGljYXRlIHJlcHJlc2VudGF0aW9uIG9mIG1lcmdlZCB0cmVlcyIgIiAgICAgICAiIDIyCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMzM0LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKIAogCiBjYXQgPmdsci1yZWdyNC55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogCiAldW5pb24geyBjaGFyICpwdHI7IH0KQEAgLTY0NzA3LDggKzE3NDI3NSwxMCBAQAogICAjaW5jbHVkZSA8c3RyaW5nLmg+CiAgIHN0YXRpYyBjaGFyICptZXJnZSAoWVlTVFlQRSwgWVlTVFlQRSk7CiAgIHN0YXRpYyBjaGFyICptYWtlX3ZhbHVlIChjaGFyIGNvbnN0ICosIGNoYXIgY29uc3QgKik7Ci0gIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKGNoYXIgY29uc3QgKik7CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOwogICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKKyAgc3RhdGljIGNoYXIgKnB0cnNbMTAwXTsKKyAgc3RhdGljIGNoYXIgKipwdHJzX25leHQgPSBwdHJzOwogJX0KIAogJSUKQEAgLTY0NzMwLDI1ICsxNzQzMDAsNDEgQEAKIEI6ICAnYScgeyAkJCA9IG1ha2VfdmFsdWUgKCJCIiwgIidhJyIpOyAgfSA7CiAKICUlCi0KLXN0YXRpYyBpbnQKLXl5bGV4ICh2b2lkKQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQogewotICBzdGF0aWMgY2hhciBjb25zdCAqaW5wdXQgPSAiYSI7Ci0gIHJldHVybiAqaW5wdXQrKzsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitzdGF0aWMKK2ludCB5eWxleCAodm9pZCkKK3sKKyAgc3RhdGljIGNoYXIgY29uc3QgaW5wdXRbXSA9ICJhIjsKKyAgc3RhdGljIHNpemVfdCB0b2tudW0gPSAwOworICBpbnQgcmVzOworICA7CisgIGFzc2VydCAodG9rbnVtIDwgc2l6ZW9mIGlucHV0IC8gc2l6ZW9mIGlucHV0WzBdKTsKKyAgcmVzID0gaW5wdXRbdG9rbnVtKytdOworICA7CisgIHJldHVybiByZXM7CiB9CiAKIGludAogbWFpbiAodm9pZCkKIHsKLSAgcmV0dXJuIHl5cGFyc2UgKCk7CisgIGludCBzdGF0dXMgPSB5eXBhcnNlICgpOworICB3aGlsZSAocHRyc19uZXh0ICE9IHB0cnMpCisgICAgZnJlZSAoKi0tcHRyc19uZXh0KTsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIGNoYXIgKgogbWFrZV92YWx1ZSAoY2hhciBjb25zdCAqcGFyZW50LCBjaGFyIGNvbnN0ICpjaGlsZCkKIHsKICAgY2hhciBjb25zdCBmb3JtYXRbXSA9ICIlcyA8LSAlcyI7Ci0gIGNoYXIgKnZhbHVlID0KKyAgY2hhciAqdmFsdWUgPSAqcHRyc19uZXh0KysgPQogICAgIChjaGFyICopIG1hbGxvYyAoc3RybGVuIChwYXJlbnQpICsgc3RybGVuIChjaGlsZCkgKyBzaXplb2YgZm9ybWF0KTsKICAgc3ByaW50ZiAodmFsdWUsIGZvcm1hdCwgcGFyZW50LCBjaGlsZCk7CiAgIHJldHVybiB2YWx1ZTsKQEAgLTY0NzU4LDEzMiArMTc0MzQ0LDE5MCBAQAogbWVyZ2UgKFlZU1RZUEUgczEsIFlZU1RZUEUgczIpCiB7CiAgIGNoYXIgY29uc3QgZm9ybWF0W10gPSAibWVyZ2V7ICVzIGFuZCAlcyB9IjsKLSAgY2hhciAqdmFsdWUgPQorICBjaGFyICp2YWx1ZSA9ICpwdHJzX25leHQrKyA9CiAgICAgKGNoYXIgKikgbWFsbG9jIChzdHJsZW4gKHMxLnB0cikgKyBzdHJsZW4gKHMyLnB0cikgKyBzaXplb2YgZm9ybWF0KTsKICAgc3ByaW50ZiAodmFsdWUsIGZvcm1hdCwgczEucHRyLCBzMi5wdHIpOwogICByZXR1cm4gdmFsdWU7CiB9Ci0KLXN0YXRpYyB2b2lkCi15eWVycm9yIChjaGFyIGNvbnN0ICptc2cpCi17Ci0gIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOwotfQogX0FURU9GCiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjQxNzogYmlzb24gLW8gZ2xyLXJlZ3I0LmMgZ2xyLXJlZ3I0LnkiCi1lY2hvIGdsci1yZWdyZXNzaW9uLmF0OjQxNyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gZ2xyLXJlZ3I0LmMgZ2xyLXJlZ3I0LnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyA+PiRhdF9zdGRlcnI7IGVjaG8gImdsci1yZWdyNC55OiBjb25mbGljdHM6IDEgcmVkdWNlL3JlZHVjZQotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6NDE3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo0Mzg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBnbHItcmVncjQuYyBnbHItcmVncjQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImdsci1yZWdyZXNzaW9uLmF0OjQzOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBnbHItcmVncjQuYyBnbHItcmVncjQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NDM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NDM4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBnbHItcmVncjQuYyBnbHItcmVncjQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBnbHItcmVncjQuYyBnbHItcmVncjQueSIgImdsci1yZWdyZXNzaW9uLmF0OjQzOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBnbHItcmVncjQuYyBnbHItcmVncjQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NDM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjQzODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImdsci1yZWdyZXNzaW9uLmF0OjQzOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo0MzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo0Mzg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJnbHItcmVncmVzc2lvbi5hdDo0MzgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NDM4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCi0KLSRhdF90cmFjZW9uCi0KLSRhdF90cmFjZW9mZgotZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6NDE4OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGdsci1yZWdyNCBnbHItcmVncjQuYyBcJExJQlMiCi1lY2hvIGdsci1yZWdyZXNzaW9uLmF0OjQxOCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGdsci1yZWdyNCBnbHItcmVncjQuYyAkTElCUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJnbHItcmVncmVzc2lvbi5hdDo0MTg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjQzODogYmlzb24gLW8gZ2xyLXJlZ3I0LmMgZ2xyLXJlZ3I0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJnbHItcmVncmVzc2lvbi5hdDo0MzgiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gZ2xyLXJlZ3I0LmMgZ2xyLXJlZ3I0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJnbHItcmVncjQueTogY29uZmxpY3RzOiAxIHJlZHVjZS9yZWR1Y2UKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjQzOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJnbHItcmVncmVzc2lvbi5hdDo0MjI6IC4vZ2xyLXJlZ3I0IgotZWNobyBnbHItcmVncmVzc2lvbi5hdDo0MjIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IC4vZ2xyLXJlZ3I0ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gPj4kYXRfc3Rkb3V0OyBlY2hvICJtZXJnZXsgUyA8LSBtZXJnZXsgQSA8LSBBMSA8LSAnYScgYW5kIEEgPC0gQTIgPC0gJ2EnIH0gYW5kIFMgPC0gQiA8LSAnYScgfQotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6NDIyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NDQxOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiZ2xyLXJlZ3Jlc3Npb24uYXQ6NDQxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo0NDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NDQxOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGdsci1yZWdyNCBnbHItcmVncjQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBnbHItcmVncjQgZ2xyLXJlZ3I0LmMgJExJQlMiICJnbHItcmVncmVzc2lvbi5hdDo0NDEiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGdsci1yZWdyNCBnbHItcmVncjQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NDQxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo0NDM6ICBcJFBSRVBBUlNFUiAuL2dsci1yZWdyNCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9nbHItcmVncjQiICJnbHItcmVncmVzc2lvbi5hdDo0NDMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9nbHItcmVncjQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAibWVyZ2V7IFMgPC0gbWVyZ2V7IEEgPC0gQTEgPC0gJ2EnIGFuZCBBIDwtIEEyIDwtICdhJyB9IGFuZCBTIDwtIEIgPC0gJ2EnIH0KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjQ0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgMTQ2ICkgIyAxNDYuIGdsci1yZWdyZXNzaW9uLmF0OjQzMjogVXNlciBkZXN0cnVjdG9yIGZvciB1bnJlc29sdmVkIEdMUiBzZW1hbnRpYyB2YWx1ZQotICAgIGF0X3NldHVwX2xpbmU9J2dsci1yZWdyZXNzaW9uLmF0OjQzMicKLSAgICBhdF9kZXNjPSdVc2VyIGRlc3RydWN0b3IgZm9yIHVucmVzb2x2ZWQgR0xSIHNlbWFudGljIHZhbHVlJwotICAgICRhdF9xdWlldCAkRUNIT19OICIxNDY6IFVzZXIgZGVzdHJ1Y3RvciBmb3IgdW5yZXNvbHZlZCBHTFIgc2VtYW50aWMgdmFsdWUkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiMTQ2LiBnbHItcmVncmVzc2lvbi5hdDo0MzI6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo0NDM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiZ2xyLXJlZ3Jlc3Npb24uYXQ6NDQzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjQ0MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzMzNAorI0FUX1NUQVJUXzMzNQorYXRfZm5fZ3JvdXBfYmFubmVyIDMzNSAnZ2xyLXJlZ3Jlc3Npb24uYXQ6NDU1JyBcCisgICJVc2VyIGRlc3RydWN0b3IgZm9yIHVucmVzb2x2ZWQgR0xSIHNlbWFudGljIHZhbHVlIiAiIiAyMgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjMzNS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCiAKIAogY2F0ID5nbHItcmVncjUueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKIAogJXsKICAgI2luY2x1ZGUgPHN0ZGlvLmg+CiAgICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAgc3RhdGljIHZvaWQgeXllcnJvciAoY2hhciBjb25zdCAqKTsKKyAgc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CiAgIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOwogICBlbnVtIHsgTUFHSUNfVkFMVUUgPSAtMTA1NzgwODEyNSB9OyAvKiBvcmlnaW5hbGx5IGNob3NlbiBhdCByYW5kb20gKi8KICV9CkBAIC02NDkwOCwyMCArMTc0NTUyLDI2IEBACiAgICA7CiAKICUlCi0KLXN0YXRpYyBpbnQKLXl5bGV4ICh2b2lkKQorI2luY2x1ZGUgPGFzc2VydC5oPgorc3RhdGljCitpbnQgeXlsZXggKHZvaWQpCiB7Ci0gIHN0YXRpYyBjaGFyIGNvbnN0ICppbnB1dCA9ICJhIjsKLSAgcmV0dXJuICppbnB1dCsrOworICBzdGF0aWMgY2hhciBjb25zdCBpbnB1dFtdID0gImEiOworICBzdGF0aWMgc2l6ZV90IHRva251bSA9IDA7CisgIGludCByZXM7CisgIDsKKyAgYXNzZXJ0ICh0b2tudW0gPCBzaXplb2YgaW5wdXQgLyBzaXplb2YgaW5wdXRbMF0pOworICByZXMgPSBpbnB1dFt0b2tudW0rK107CisgIDsKKyAgcmV0dXJuIHJlczsKIH0KLQotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKGNoYXIgY29uc3QgKm1zZykKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKIHsKICAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7CiB9Ci0KIGludAogbWFpbiAodm9pZCkKIHsKQEAgLTY0OTMxLDExNyArMTc0NTgxLDE4MSBAQAogCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJnbHItcmVncmVzc2lvbi5hdDo0ODc6IGJpc29uIC1vIGdsci1yZWdyNS5jIGdsci1yZWdyNS55IgotZWNobyBnbHItcmVncmVzc2lvbi5hdDo0ODcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGdsci1yZWdyNS5jIGdsci1yZWdyNS55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gPj4kYXRfc3RkZXJyOyBlY2hvICJnbHItcmVncjUueTogY29uZmxpY3RzOiAxIHJlZHVjZS9yZWR1Y2UKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjQ4NzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NDk4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gZ2xyLXJlZ3I1LmMgZ2xyLXJlZ3I1LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJnbHItcmVncmVzc2lvbi5hdDo0OTgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gZ2xyLXJlZ3I1LmMgZ2xyLXJlZ3I1LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjQ5OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjQ5ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZ2xyLXJlZ3I1LmMgZ2xyLXJlZ3I1LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZ2xyLXJlZ3I1LmMgZ2xyLXJlZ3I1LnkiICJnbHItcmVncmVzc2lvbi5hdDo0OTgiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZ2xyLXJlZ3I1LmMgZ2xyLXJlZ3I1LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjQ5OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo0OTg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJnbHItcmVncmVzc2lvbi5hdDo0OTgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NDk4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NDk4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6NDk4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjQ5OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjQ4ODogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBnbHItcmVncjUgZ2xyLXJlZ3I1LmMgXCRMSUJTIgotZWNobyBnbHItcmVncmVzc2lvbi5hdDo0ODggPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBnbHItcmVncjUgZ2xyLXJlZ3I1LmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6NDg4OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo0OTg6IGJpc29uIC1vIGdsci1yZWdyNS5jIGdsci1yZWdyNS55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiZ2xyLXJlZ3Jlc3Npb24uYXQ6NDk4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGdsci1yZWdyNS5jIGdsci1yZWdyNS55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiZ2xyLXJlZ3I1Lnk6IGNvbmZsaWN0czogMSByZWR1Y2UvcmVkdWNlCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo0OTgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6NDkyOiAuL2dsci1yZWdyNSIKLWVjaG8gZ2xyLXJlZ3Jlc3Npb24uYXQ6NDkyID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAuL2dsci1yZWdyNSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvID4+JGF0X3N0ZGVycjsgZWNobyAic3ludGF4IGlzIGFtYmlndW91cwotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6NDkyOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NTAxOiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiZ2xyLXJlZ3Jlc3Npb24uYXQ6NTAxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo1MDEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NTAxOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGdsci1yZWdyNSBnbHItcmVncjUuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBnbHItcmVncjUgZ2xyLXJlZ3I1LmMgJExJQlMiICJnbHItcmVncmVzc2lvbi5hdDo1MDEiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGdsci1yZWdyNSBnbHItcmVncjUuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NTAxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo1MDM6ICBcJFBSRVBBUlNFUiAuL2dsci1yZWdyNSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9nbHItcmVncjUiICJnbHItcmVncmVzc2lvbi5hdDo1MDMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9nbHItcmVncjUKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjUwMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgMTQ3ICkgIyAxNDcuIGdsci1yZWdyZXNzaW9uLmF0OjUwMjogVXNlciBkZXN0cnVjdG9yIGFmdGVyIGFuIGVycm9yIGR1cmluZyBhIHNwbGl0IHBhcnNlCi0gICAgYXRfc2V0dXBfbGluZT0nZ2xyLXJlZ3Jlc3Npb24uYXQ6NTAyJwotICAgIGF0X2Rlc2M9J1VzZXIgZGVzdHJ1Y3RvciBhZnRlciBhbiBlcnJvciBkdXJpbmcgYSBzcGxpdCBwYXJzZScKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiMTQ3OiBVc2VyIGRlc3RydWN0b3IgYWZ0ZXIgYW4gZXJyb3IgZHVyaW5nIGEgc3BsaXQgcGFyc2UkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiMTQ3LiBnbHItcmVncmVzc2lvbi5hdDo1MDI6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo1MDM6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiZ2xyLXJlZ3Jlc3Npb24uYXQ6NTAzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAic3ludGF4IGlzIGFtYmlndW91cworIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NTAzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMzM1CisjQVRfU1RBUlRfMzM2CithdF9mbl9ncm91cF9iYW5uZXIgMzM2ICdnbHItcmVncmVzc2lvbi5hdDo1MTUnIFwKKyAgIlVzZXIgZGVzdHJ1Y3RvciBhZnRlciBhbiBlcnJvciBkdXJpbmcgYSBzcGxpdCBwYXJzZSIgIiIgMjIKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIzMzYuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKwogCiAKIGNhdCA+Z2xyLXJlZ3I2LnkgPDwnX0FURU9GJwotJXsKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotICAvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KLSMgdW5kZWYgbWFsbG9jCi0jIHVuZGVmIG1lbWNtcAotIyB1bmRlZiByZWFsbG9jCi0jZW5kaWYKLSV9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCiAKICV7CiAgICNpbmNsdWRlIDxzdGRpby5oPgogICAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKGNoYXIgY29uc3QgKik7CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOwogICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKICV9CiAKQEAgLTY1MDU4LDIwICsxNzQ3NzIsMjYgQEAKIHN0YXJ0OiAnYScgfCAnYScgOwogCiAlJQotCi1zdGF0aWMgaW50Ci15eWxleCAodm9pZCkKLXsKLSAgc3RhdGljIGNoYXIgY29uc3QgKmlucHV0ID0gImEiOwotICByZXR1cm4gKmlucHV0Kys7Ci19Ci0KLXN0YXRpYyB2b2lkCi15eWVycm9yIChjaGFyIGNvbnN0ICptc2cpCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCiB7CiAgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOwogfQotCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitzdGF0aWMKK2ludCB5eWxleCAodm9pZCkKK3sKKyAgc3RhdGljIGNoYXIgY29uc3QgaW5wdXRbXSA9ICJhIjsKKyAgc3RhdGljIHNpemVfdCB0b2tudW0gPSAwOworICBpbnQgcmVzOworICA7CisgIGFzc2VydCAodG9rbnVtIDwgc2l6ZW9mIGlucHV0IC8gc2l6ZW9mIGlucHV0WzBdKTsKKyAgcmVzID0gaW5wdXRbdG9rbnVtKytdOworICA7CisgIHJldHVybiByZXM7Cit9CiBpbnQKIG1haW4gKHZvaWQpCiB7CkBAIC02NTA4MSwxMjggKzE3NDgwMSwxOTggQEAKIAogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6NTQ5OiBiaXNvbiAtbyBnbHItcmVncjYuYyBnbHItcmVncjYueSIKLWVjaG8gZ2xyLXJlZ3Jlc3Npb24uYXQ6NTQ5ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtbyBnbHItcmVncjYuYyBnbHItcmVncjYueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvID4+JGF0X3N0ZGVycjsgZWNobyAiZ2xyLXJlZ3I2Lnk6IGNvbmZsaWN0czogMSByZWR1Y2UvcmVkdWNlCi0iIHwgJGF0X2RpZmYgLSAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJnbHItcmVncmVzc2lvbi5hdDo1NDk6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjU1MDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGdsci1yZWdyNi5jIGdsci1yZWdyNi55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6NTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGdsci1yZWdyNi5jIGdsci1yZWdyNi55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo1NTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo1NTA6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGdsci1yZWdyNi5jIGdsci1yZWdyNi55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGdsci1yZWdyNi5jIGdsci1yZWdyNi55IiAiZ2xyLXJlZ3Jlc3Npb24uYXQ6NTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGdsci1yZWdyNi5jIGdsci1yZWdyNi55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo1NTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NTUwOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6NTUwIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjU1MCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjU1MDogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImdsci1yZWdyZXNzaW9uLmF0OjU1MCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo1NTAiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKLQotJGF0X3RyYWNlb24KLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJnbHItcmVncmVzc2lvbi5hdDo1NTA6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gZ2xyLXJlZ3I2IGdsci1yZWdyNi5jIFwkTElCUyIKLWVjaG8gZ2xyLXJlZ3Jlc3Npb24uYXQ6NTUwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gZ2xyLXJlZ3I2IGdsci1yZWdyNi5jICRMSUJTICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjU1MDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NTUwOiBiaXNvbiAtbyBnbHItcmVncjYuYyBnbHItcmVncjYueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImdsci1yZWdyZXNzaW9uLmF0OjU1MCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBnbHItcmVncjYuYyBnbHItcmVncjYueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImdsci1yZWdyNi55OiBjb25mbGljdHM6IDEgcmVkdWNlL3JlZHVjZQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NTUwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjU1NjogLi9nbHItcmVncjYiCi1lY2hvIGdsci1yZWdyZXNzaW9uLmF0OjU1NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgLi9nbHItcmVncjYgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyA+PiRhdF9zdGRlcnI7IGVjaG8gInN5bnRheCBpcyBhbWJpZ3VvdXMKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLWVjaG8gPj4kYXRfc3Rkb3V0OyBlY2hvICJEZXN0cnVjdG9yIGNhbGxlZC4KLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjU1NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjU1MzogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImdsci1yZWdyZXNzaW9uLmF0OjU1MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NTUzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjU1MzogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBnbHItcmVncjYgZ2xyLXJlZ3I2LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gZ2xyLXJlZ3I2IGdsci1yZWdyNi5jICRMSUJTIiAiZ2xyLXJlZ3Jlc3Npb24uYXQ6NTUzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBnbHItcmVncjYgZ2xyLXJlZ3I2LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjU1MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Cit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NTU1OiAgXCRQUkVQQVJTRVIgLi9nbHItcmVncjYiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vZ2xyLXJlZ3I2IiAiZ2xyLXJlZ3Jlc3Npb24uYXQ6NTU1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vZ2xyLXJlZ3I2CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gIkRlc3RydWN0b3IgY2FsbGVkLgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NTU1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICAxNDggKSAjIDE0OC4gZ2xyLXJlZ3Jlc3Npb24uYXQ6NTY2OiBEdXBsaWNhdGVkIHVzZXIgZGVzdHJ1Y3RvciBmb3IgbG9va2FoZWFkCi0gICAgYXRfc2V0dXBfbGluZT0nZ2xyLXJlZ3Jlc3Npb24uYXQ6NTY2JwotICAgIGF0X2Rlc2M9J0R1cGxpY2F0ZWQgdXNlciBkZXN0cnVjdG9yIGZvciBsb29rYWhlYWQnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjE0ODogRHVwbGljYXRlZCB1c2VyIGRlc3RydWN0b3IgZm9yIGxvb2thaGVhZCAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjE0OC4gZ2xyLXJlZ3Jlc3Npb24uYXQ6NTY2OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NTU1OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImdsci1yZWdyZXNzaW9uLmF0OjU1NSIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBpcyBhbWJpZ3VvdXMKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjU1NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzMzNgorI0FUX1NUQVJUXzMzNworYXRfZm5fZ3JvdXBfYmFubmVyIDMzNyAnZ2xyLXJlZ3Jlc3Npb24uYXQ6NTY5JyBcCisgICJEdXBsaWNhdGVkIHVzZXIgZGVzdHJ1Y3RvciBmb3IgbG9va2FoZWFkIiAiICAgICAgICIgMjIKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIzMzcuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKwogCiAKIGNhdCA+Z2xyLXJlZ3I3LnkgPDwnX0FURU9GJwotJXsKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotICAvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KLSMgdW5kZWYgbWFsbG9jCi0jIHVuZGVmIG1lbWNtcAotIyB1bmRlZiByZWFsbG9jCi0jZW5kaWYKLSV9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCiAKICV7CiAgICNpbmNsdWRlIDxzdGRpby5oPgogICAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKGNoYXIgY29uc3QgKik7CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOwogICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKICAgI2RlZmluZSBZWVNUQUNLRVhQQU5EQUJMRSAwCisgIHR5cGVkZWYgc3RydWN0IGNvdW50X25vZGUgeworICAgIGludCBjb3VudDsKKyAgICBzdHJ1Y3QgY291bnRfbm9kZSAqcHJldjsKKyAgfSBjb3VudF9ub2RlOworICBzdGF0aWMgY291bnRfbm9kZSAqdGFpbDsKICV9CiAKICVnbHItcGFyc2VyCi0ldW5pb24geyBpbnQgKmNvdW50OyB9Ci0ldHlwZSA8Y291bnQ+ICdhJworJXVuaW9uIHsgY291bnRfbm9kZSAqbm9kZTsgfQorJXR5cGUgPG5vZGU+ICdhJwogCiAlZGVzdHJ1Y3RvciB7Ci0gIGlmICgoKiQkKSsrKQorICBpZiAoJCQtPmNvdW50KyspCiAgICAgZnByaW50ZiAoc3RkZXJyLCAiRGVzdHJ1Y3RvciBjYWxsZWQgb24gc2FtZSB2YWx1ZSB0d2ljZS5cbiIpOwogfSAnYScKIApAQCAtNjUyMjEsMTQ0ICsxNzUwMTEsMjE3IEBACiBzdGF0aWMgaW50CiB5eWxleCAodm9pZCkKIHsKLSAgeXlsdmFsLmNvdW50ID0gKGludCAqKSBtYWxsb2MgKHNpemVvZiAoaW50KSk7Ci0gIGlmICgheXlsdmFsLmNvdW50KQorICB5eWx2YWwubm9kZSA9IChjb3VudF9ub2RlKikgbWFsbG9jIChzaXplb2YgKnl5bHZhbC5ub2RlKTsKKyAgaWYgKCF5eWx2YWwubm9kZSkKICAgICB7CiAgICAgICBmcHJpbnRmIChzdGRlcnIsICJUZXN0IGluY29uY2x1c2l2ZS5cbiIpOwogICAgICAgZXhpdCAoRVhJVF9GQUlMVVJFKTsKICAgICB9Ci0gICp5eWx2YWwuY291bnQgPSAwOworICB5eWx2YWwubm9kZS0+Y291bnQgPSAwOworICB5eWx2YWwubm9kZS0+cHJldiA9IHRhaWw7CisgIHRhaWwgPSB5eWx2YWwubm9kZTsKICAgcmV0dXJuICdhJzsKIH0KIAotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKGNoYXIgY29uc3QgKm1zZykKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKIHsKICAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7CiB9Ci0KIGludAogbWFpbiAodm9pZCkKIHsKLSAgcmV0dXJuIHl5cGFyc2UgKCk7CisgIGludCBzdGF0dXMgPSB5eXBhcnNlICgpOworICB3aGlsZSAodGFpbCkKKyAgICB7CisgICAgICBjb3VudF9ub2RlICpwcmV2ID0gdGFpbC0+cHJldjsKKyAgICAgIGZyZWUgKHRhaWwpOworICAgICAgdGFpbCA9IHByZXY7CisgICAgfQorICByZXR1cm4gc3RhdHVzOwogfQogX0FURU9GCiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjYyNzogYmlzb24gLW8gZ2xyLXJlZ3I3LmMgZ2xyLXJlZ3I3LnkiCi1lY2hvIGdsci1yZWdyZXNzaW9uLmF0OjYyNyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gZ2xyLXJlZ3I3LmMgZ2xyLXJlZ3I3LnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyA+PiRhdF9zdGRlcnI7IGVjaG8gImdsci1yZWdyNy55OiBjb25mbGljdHM6IDIgcmVkdWNlL3JlZHVjZQotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6NjI3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo2Mzk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBnbHItcmVncjcuYyBnbHItcmVncjcueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImdsci1yZWdyZXNzaW9uLmF0OjYzOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBnbHItcmVncjcuYyBnbHItcmVncjcueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NjM5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NjM5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBnbHItcmVncjcuYyBnbHItcmVncjcueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBnbHItcmVncjcuYyBnbHItcmVncjcueSIgImdsci1yZWdyZXNzaW9uLmF0OjYzOSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBnbHItcmVncjcuYyBnbHItcmVncjcueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NjM5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjYzOTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImdsci1yZWdyZXNzaW9uLmF0OjYzOSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo2MzkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo2Mzk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJnbHItcmVncmVzc2lvbi5hdDo2MzkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NjM5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCi0KLSRhdF90cmFjZW9uCi0KLSRhdF90cmFjZW9mZgotZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6NjI4OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGdsci1yZWdyNyBnbHItcmVncjcuYyBcJExJQlMiCi1lY2hvIGdsci1yZWdyZXNzaW9uLmF0OjYyOCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGdsci1yZWdyNyBnbHItcmVncjcuYyAkTElCUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJnbHItcmVncmVzc2lvbi5hdDo2Mjg6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjYzOTogYmlzb24gLW8gZ2xyLXJlZ3I3LmMgZ2xyLXJlZ3I3LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJnbHItcmVncmVzc2lvbi5hdDo2MzkiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gZ2xyLXJlZ3I3LmMgZ2xyLXJlZ3I3LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJnbHItcmVncjcueTogY29uZmxpY3RzOiAyIHJlZHVjZS9yZWR1Y2UKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjYzOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJnbHItcmVncmVzc2lvbi5hdDo2MzI6IC4vZ2xyLXJlZ3I3IgotZWNobyBnbHItcmVncmVzc2lvbi5hdDo2MzIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IC4vZ2xyLXJlZ3I3ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gPj4kYXRfc3RkZXJyOyBlY2hvICJtZW1vcnkgZXhoYXVzdGVkCi0iIHwgJGF0X2RpZmYgLSAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDIpIDs7Ci0gICAqKSBlY2hvICJnbHItcmVncmVzc2lvbi5hdDo2MzI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMiIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo2NDI6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJnbHItcmVncmVzc2lvbi5hdDo2NDIiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjY0MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo2NDI6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gZ2xyLXJlZ3I3IGdsci1yZWdyNy5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGdsci1yZWdyNyBnbHItcmVncjcuYyAkTElCUyIgImdsci1yZWdyZXNzaW9uLmF0OjY0MiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gZ2xyLXJlZ3I3IGdsci1yZWdyNy5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo2NDIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjY0NDogIFwkUFJFUEFSU0VSIC4vZ2xyLXJlZ3I3IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2dsci1yZWdyNyIgImdsci1yZWdyZXNzaW9uLmF0OjY0NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2dsci1yZWdyNworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAyICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NjQ0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICAxNDkgKSAjIDE0OS4gZ2xyLXJlZ3Jlc3Npb24uYXQ6NjQ0OiBJbmNvcnJlY3RseSBpbml0aWFsaXplZCBsb2NhdGlvbiBmb3IgZW1wdHkgcmlnaHQtaGFuZCBzaWRlIGluIEdMUgotICAgIGF0X3NldHVwX2xpbmU9J2dsci1yZWdyZXNzaW9uLmF0OjY0NCcKLSAgICBhdF9kZXNjPSdJbmNvcnJlY3RseSBpbml0aWFsaXplZCBsb2NhdGlvbiBmb3IgZW1wdHkgcmlnaHQtaGFuZCBzaWRlIGluIEdMUicKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiMTQ5OiBJbmNvcnJlY3RseSBpbml0aWFsaXplZCBsb2NhdGlvbiBmb3IgZW1wdHkgcmlnaHQtaGFuZCBzaWRlIGluIEdMUiRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIxNDkuIGdsci1yZWdyZXNzaW9uLmF0OjY0NDogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjY0NDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJnbHItcmVncmVzc2lvbi5hdDo2NDQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJtZW1vcnkgZXhoYXVzdGVkCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo2NDQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8zMzcKKyNBVF9TVEFSVF8zMzgKK2F0X2ZuX2dyb3VwX2Jhbm5lciAzMzggJ2dsci1yZWdyZXNzaW9uLmF0OjY1OCcgXAorICAiSW5jb3JyZWN0bHkgaW5pdGlhbGl6ZWQgbG9jYXRpb24gZm9yIGVtcHR5IHJpZ2h0LWhhbmQgc2lkZSBpbiBHTFIiICIiIDIyCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMzM4LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKIAogCiBjYXQgPmdsci1yZWdyOC55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogCiAlewogICAjaW5jbHVkZSA8c3RkaW8uaD4KICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgotICBzdGF0aWMgdm9pZCB5eWVycm9yIChjaGFyIGNvbnN0ICopOworICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKICAgc3RhdGljIGludCB5eWxleCAodm9pZCk7Ci0gIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKGNoYXIgY29uc3QgKm1zZyk7CiAlfQogCiAldG9rZW4gVF9DT05TVEFOVApAQCAtNjUzOTIsMTIgKzE3NTI1NSwxMyBAQAogCiAlJQogCi12b2lkCi15eWVycm9yIChjaGFyIGNvbnN0ICptc2cpCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCiB7CiAgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOwogfQotCiBzdGF0aWMgaW50IGxleEluZGV4OwogCiBpbnQgeXlsZXggKHZvaWQpCkBAIC02NTQwNSw2ICsxNzUyNjksOCBAQAogICBsZXhJbmRleCArPSAxOwogICBzd2l0Y2ggKGxleEluZGV4KQogICAgIHsKKyAgICBkZWZhdWx0OgorICAgICAgYWJvcnQgKCk7CiAgICAgY2FzZSAxOgogICAgICAgeXlsbG9jLmZpcnN0X2NvbHVtbiA9IDE7CiAgICAgICB5eWxsb2MubGFzdF9jb2x1bW4gPSA5OwpAQCAtNjU0MTMsNyArMTc1Mjc5LDcgQEAKICAgICAgIHl5bGxvYy5maXJzdF9jb2x1bW4gPSAxMzsKICAgICAgIHl5bGxvYy5sYXN0X2NvbHVtbiA9IDE3OwogICAgICAgcmV0dXJuIFRfUE9SVDsKLSAgICBkZWZhdWx0OgorICAgIGNhc2UgMzoKICAgICAgIHJldHVybiAwOwogICAgIH0KIH0KQEAgLTY1NDI4LDExOCArMTc1Mjk0LDE4MiBAQAogCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJnbHItcmVncmVzc2lvbi5hdDo3MjM6IGJpc29uIC1vIGdsci1yZWdyOC5jIGdsci1yZWdyOC55IgotZWNobyBnbHItcmVncmVzc2lvbi5hdDo3MjMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGdsci1yZWdyOC5jIGdsci1yZWdyOC55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gPj4kYXRfc3RkZXJyOyBlY2hvICJnbHItcmVncjgueTogY29uZmxpY3RzOiAxIHJlZHVjZS9yZWR1Y2UKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjcyMzogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NzMzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gZ2xyLXJlZ3I4LmMgZ2xyLXJlZ3I4LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJnbHItcmVncmVzc2lvbi5hdDo3MzMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gZ2xyLXJlZ3I4LmMgZ2xyLXJlZ3I4LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjczMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjczMzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZ2xyLXJlZ3I4LmMgZ2xyLXJlZ3I4LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZ2xyLXJlZ3I4LmMgZ2xyLXJlZ3I4LnkiICJnbHItcmVncmVzc2lvbi5hdDo3MzMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZ2xyLXJlZ3I4LmMgZ2xyLXJlZ3I4LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjczMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo3MzM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJnbHItcmVncmVzc2lvbi5hdDo3MzMiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NzMzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NzMzOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6NzMzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjczMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjcyNDogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBnbHItcmVncjggZ2xyLXJlZ3I4LmMgXCRMSUJTIgotZWNobyBnbHItcmVncmVzc2lvbi5hdDo3MjQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBnbHItcmVncjggZ2xyLXJlZ3I4LmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6NzI0OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo3MzM6IGJpc29uIC1vIGdsci1yZWdyOC5jIGdsci1yZWdyOC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiZ2xyLXJlZ3Jlc3Npb24uYXQ6NzMzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGdsci1yZWdyOC5jIGdsci1yZWdyOC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiZ2xyLXJlZ3I4Lnk6IGNvbmZsaWN0czogMSByZWR1Y2UvcmVkdWNlCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo3MzMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6NzMwOiAuL2dsci1yZWdyOCIKLWVjaG8gZ2xyLXJlZ3Jlc3Npb24uYXQ6NzMwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAuL2dsci1yZWdyOCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvID4+JGF0X3N0ZG91dDsgZWNobyAiZW1wdHk6IDkvOQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjczNjogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImdsci1yZWdyZXNzaW9uLmF0OjczNiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NzM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjczNjogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBnbHItcmVncjggZ2xyLXJlZ3I4LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gZ2xyLXJlZ3I4IGdsci1yZWdyOC5jICRMSUJTIiAiZ2xyLXJlZ3Jlc3Npb24uYXQ6NzM2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBnbHItcmVncjggZ2xyLXJlZ3I4LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjczNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjczODogIFwkUFJFUEFSU0VSIC4vZ2xyLXJlZ3I4IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2dsci1yZWdyOCIgImdsci1yZWdyZXNzaW9uLmF0OjczOCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2dsci1yZWdyOAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2VjaG8gPj4iJGF0X3N0ZG91dCI7ICRhc19lY2hvICJlbXB0eTogOS85CiAxLzkgLSA5LzkgLSAxMy8xNwotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6NzMwOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo3MzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6NzM4OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImdsci1yZWdyZXNzaW9uLmF0OjczOCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo3MzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwogCi0gIDE1MCApICMgMTUwLiBnbHItcmVncmVzc2lvbi5hdDo3NDA6IE5vIHVzZXJzIGRlc3RydWN0b3JzIGlmIHN0YWNrIDAgZGVsZXRlZAotICAgIGF0X3NldHVwX2xpbmU9J2dsci1yZWdyZXNzaW9uLmF0Ojc0MCcKLSAgICBhdF9kZXNjPSdObyB1c2VycyBkZXN0cnVjdG9ycyBpZiBzdGFjayAwIGRlbGV0ZWQnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjE1MDogTm8gdXNlcnMgZGVzdHJ1Y3RvcnMgaWYgc3RhY2sgMCBkZWxldGVkICAgICAgJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjE1MC4gZ2xyLXJlZ3Jlc3Npb24uYXQ6NzQwOiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzMzOAorI0FUX1NUQVJUXzMzOQorYXRfZm5fZ3JvdXBfYmFubmVyIDMzOSAnZ2xyLXJlZ3Jlc3Npb24uYXQ6NzUyJyBcCisgICJObyB1c2VycyBkZXN0cnVjdG9ycyBpZiBzdGFjayAwIGRlbGV0ZWQiICIgICAgICAgICIgMjIKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIzMzkuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKwogCiAKIGNhdCA+Z2xyLXJlZ3I5LnkgPDwnX0FURU9GJwotJXsKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotICAvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KLSMgdW5kZWYgbWFsbG9jCi0jIHVuZGVmIG1lbWNtcAotIyB1bmRlZiByZWFsbG9jCi0jZW5kaWYKLSV9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCiAKICV7CiAjIGluY2x1ZGUgPHN0ZGlvLmg+CiAjIGluY2x1ZGUgPHN0ZGxpYi5oPgotICBzdGF0aWMgdm9pZCB5eWVycm9yIChjaGFyIGNvbnN0ICopOworICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKICAgc3RhdGljIGludCB5eWxleCAodm9pZCk7CiAjIGRlZmluZSBZWVNUQUNLRVhQQU5EQUJMRSAwCiAgIHN0YXRpYyBpbnQgdG9rZW5zID0gMDsKQEAgLTY1NTc2LDEyICsxNzU1MDYsMTMgQEAKICAgcmV0dXJuICdhJzsKIH0KIAotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKGNoYXIgY29uc3QgKm1zZykKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKIHsKICAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7CiB9Ci0KIGludAogbWFpbiAodm9pZCkKIHsKQEAgLTY1NTk4LDExNiArMTc1NTI5LDE4MSBAQAogCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJnbHItcmVncmVzc2lvbi5hdDo4MDY6IGJpc29uIC1vIGdsci1yZWdyOS5jIGdsci1yZWdyOS55IgotZWNobyBnbHItcmVncmVzc2lvbi5hdDo4MDYgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGdsci1yZWdyOS5jIGdsci1yZWdyOS55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gPj4kYXRfc3RkZXJyOyBlY2hvICJnbHItcmVncjkueTogY29uZmxpY3RzOiAxIHJlZHVjZS9yZWR1Y2UKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjgwNjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6ODEzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gZ2xyLXJlZ3I5LmMgZ2xyLXJlZ3I5LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJnbHItcmVncmVzc2lvbi5hdDo4MTMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gZ2xyLXJlZ3I5LmMgZ2xyLXJlZ3I5LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjgxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjgxMzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZ2xyLXJlZ3I5LmMgZ2xyLXJlZ3I5LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZ2xyLXJlZ3I5LmMgZ2xyLXJlZ3I5LnkiICJnbHItcmVncmVzc2lvbi5hdDo4MTMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZ2xyLXJlZ3I5LmMgZ2xyLXJlZ3I5LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjgxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo4MTM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJnbHItcmVncmVzc2lvbi5hdDo4MTMiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6ODEzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6ODEzOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6ODEzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjgxMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjgwNzogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBnbHItcmVncjkgZ2xyLXJlZ3I5LmMgXCRMSUJTIgotZWNobyBnbHItcmVncmVzc2lvbi5hdDo4MDcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBnbHItcmVncjkgZ2xyLXJlZ3I5LmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6ODA3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo4MTM6IGJpc29uIC1vIGdsci1yZWdyOS5jIGdsci1yZWdyOS55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiZ2xyLXJlZ3Jlc3Npb24uYXQ6ODEzIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGdsci1yZWdyOS5jIGdsci1yZWdyOS55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiZ2xyLXJlZ3I5Lnk6IGNvbmZsaWN0czogMSByZWR1Y2UvcmVkdWNlCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo4MTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6ODExOiAuL2dsci1yZWdyOSIKLWVjaG8gZ2xyLXJlZ3Jlc3Npb24uYXQ6ODExID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAuL2dsci1yZWdyOSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvID4+JGF0X3N0ZGVycjsgZWNobyAibWVtb3J5IGV4aGF1c3RlZAotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6ODExOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6ODE2OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiZ2xyLXJlZ3Jlc3Npb24uYXQ6ODE2IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo4MTYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6ODE2OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGdsci1yZWdyOSBnbHItcmVncjkuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBnbHItcmVncjkgZ2xyLXJlZ3I5LmMgJExJQlMiICJnbHItcmVncmVzc2lvbi5hdDo4MTYiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGdsci1yZWdyOSBnbHItcmVncjkuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6ODE2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo4MTg6ICBcJFBSRVBBUlNFUiAuL2dsci1yZWdyOSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9nbHItcmVncjkiICJnbHItcmVncmVzc2lvbi5hdDo4MTgiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9nbHItcmVncjkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjgxOCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgMTUxICkgIyAxNTEuIGdsci1yZWdyZXNzaW9uLmF0OjgyMDogQ29ycnVwdGVkIHNlbWFudGljIG9wdGlvbnMgaWYgdXNlciBhY3Rpb24gY3V0cyBwYXJzZQotICAgIGF0X3NldHVwX2xpbmU9J2dsci1yZWdyZXNzaW9uLmF0OjgyMCcKLSAgICBhdF9kZXNjPSdDb3JydXB0ZWQgc2VtYW50aWMgb3B0aW9ucyBpZiB1c2VyIGFjdGlvbiBjdXRzIHBhcnNlJwotICAgICRhdF9xdWlldCAkRUNIT19OICIxNTE6IENvcnJ1cHRlZCBzZW1hbnRpYyBvcHRpb25zIGlmIHVzZXIgYWN0aW9uIGN1dHMgcGFyc2UkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiMTUxLiBnbHItcmVncmVzc2lvbi5hdDo4MjA6IHRlc3RpbmcgLi4uIgotICAgICAgJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo4MTg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiZ2xyLXJlZ3Jlc3Npb24uYXQ6ODE4IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAibWVtb3J5IGV4aGF1c3RlZAorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6ODE4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMzM5CisjQVRfU1RBUlRfMzQwCithdF9mbl9ncm91cF9iYW5uZXIgMzQwICdnbHItcmVncmVzc2lvbi5hdDo4MjknIFwKKyAgIkNvcnJ1cHRlZCBzZW1hbnRpYyBvcHRpb25zIGlmIHVzZXIgYWN0aW9uIGN1dHMgcGFyc2UiICIiIDIyCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMzQwLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKIAogCiBjYXQgPmdsci1yZWdyMTAueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKIAogJXsKKyMgaW5jbHVkZSA8c3RkbGliLmg+CiAjIGluY2x1ZGUgPHN0ZGlvLmg+Ci0gIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKGNoYXIgY29uc3QgKik7CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOwogICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKICAgI2RlZmluZSBHQVJCQUdFX1NJWkUgNTAKICAgc3RhdGljIGNoYXIgZ2FyYmFnZVtHQVJCQUdFX1NJWkVdOwpAQCAtNjU3MjUsMTcgKzE3NTcyMSwyNSBAQAogICA7CiAKICUlCi0KLXN0YXRpYyB2b2lkCi15eWVycm9yIChjaGFyIGNvbnN0ICptc2cpCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCiB7CiAgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOwogfQotCi1zdGF0aWMgaW50Ci15eWxleCAodm9pZCkKKyNpbmNsdWRlIDxhc3NlcnQuaD4KK3N0YXRpYworaW50IHl5bGV4ICh2b2lkKQogewotICByZXR1cm4gMDsKKyAgc3RhdGljIGNoYXIgY29uc3QgaW5wdXRbXSA9ICIiOworICBzdGF0aWMgc2l6ZV90IHRva251bSA9IDA7CisgIGludCByZXM7CisgIDsKKyAgYXNzZXJ0ICh0b2tudW0gPCBzaXplb2YgaW5wdXQgLyBzaXplb2YgaW5wdXRbMF0pOworICByZXMgPSBpbnB1dFt0b2tudW0rK107CisgIDsKKyAgcmV0dXJuIHJlczsKIH0KIAogaW50CkBAIC02NTc1MCwxMTUgKzE3NTc1NCwxNzggQEAKIAogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6ODY5OiBiaXNvbiAtbyBnbHItcmVncjEwLmMgZ2xyLXJlZ3IxMC55IgotZWNobyBnbHItcmVncmVzc2lvbi5hdDo4NjkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGdsci1yZWdyMTAuYyBnbHItcmVncjEwLnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyA+PiRhdF9zdGRlcnI7IGVjaG8gImdsci1yZWdyMTAueTogY29uZmxpY3RzOiAxIHJlZHVjZS9yZWR1Y2UKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImdsci1yZWdyZXNzaW9uLmF0Ojg2OTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6ODY5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gZ2xyLXJlZ3IxMC5jIGdsci1yZWdyMTAueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImdsci1yZWdyZXNzaW9uLmF0Ojg2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBnbHItcmVncjEwLmMgZ2xyLXJlZ3IxMC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo4NjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo4Njk6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGdsci1yZWdyMTAuYyBnbHItcmVncjEwLnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZ2xyLXJlZ3IxMC5jIGdsci1yZWdyMTAueSIgImdsci1yZWdyZXNzaW9uLmF0Ojg2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBnbHItcmVncjEwLmMgZ2xyLXJlZ3IxMC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo4NjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6ODY5OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6ODY5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0Ojg2OSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0Ojg2OTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImdsci1yZWdyZXNzaW9uLmF0Ojg2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo4NjkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKLQotJGF0X3RyYWNlb24KLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJnbHItcmVncmVzc2lvbi5hdDo4NzA6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gZ2xyLXJlZ3IxMCBnbHItcmVncjEwLmMgXCRMSUJTIgotZWNobyBnbHItcmVncmVzc2lvbi5hdDo4NzAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBnbHItcmVncjEwIGdsci1yZWdyMTAuYyAkTElCUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJnbHItcmVncmVzc2lvbi5hdDo4NzA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0Ojg2OTogYmlzb24gLW8gZ2xyLXJlZ3IxMC5jIGdsci1yZWdyMTAueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImdsci1yZWdyZXNzaW9uLmF0Ojg2OSIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBnbHItcmVncjEwLmMgZ2xyLXJlZ3IxMC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiZ2xyLXJlZ3IxMC55OiBjb25mbGljdHM6IDEgcmVkdWNlL3JlZHVjZQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6ODY5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImdsci1yZWdyZXNzaW9uLmF0Ojg3MjogLi9nbHItcmVncjEwIgotZWNobyBnbHItcmVncmVzc2lvbi5hdDo4NzIgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IC4vZ2xyLXJlZ3IxMCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJnbHItcmVncmVzc2lvbi5hdDo4NzI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo4NzI6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJnbHItcmVncmVzc2lvbi5hdDo4NzIiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0Ojg3MiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo4NzI6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gZ2xyLXJlZ3IxMCBnbHItcmVncjEwLmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gZ2xyLXJlZ3IxMCBnbHItcmVncjEwLmMgJExJQlMiICJnbHItcmVncmVzc2lvbi5hdDo4NzIiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGdsci1yZWdyMTAgZ2xyLXJlZ3IxMC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo4NzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0Ojg3NDogIFwkUFJFUEFSU0VSIC4vZ2xyLXJlZ3IxMCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9nbHItcmVncjEwIiAiZ2xyLXJlZ3Jlc3Npb24uYXQ6ODc0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vZ2xyLXJlZ3IxMAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6ODc0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICAxNTIgKSAjIDE1Mi4gZ2xyLXJlZ3Jlc3Npb24uYXQ6ODgxOiBVbmRlc2lyYWJsZSBkZXN0cnVjdG9ycyBpZiB1c2VyIGFjdGlvbiBjdXRzIHBhcnNlCi0gICAgYXRfc2V0dXBfbGluZT0nZ2xyLXJlZ3Jlc3Npb24uYXQ6ODgxJwotICAgIGF0X2Rlc2M9J1VuZGVzaXJhYmxlIGRlc3RydWN0b3JzIGlmIHVzZXIgYWN0aW9uIGN1dHMgcGFyc2UnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjE1MjogVW5kZXNpcmFibGUgZGVzdHJ1Y3RvcnMgaWYgdXNlciBhY3Rpb24gY3V0cyBwYXJzZSRFQ0hPX0MiCi0gICAgYXRfeGZhaWw9bm8KLSAgICAoCi0gICAgICBlY2hvICIxNTIuIGdsci1yZWdyZXNzaW9uLmF0Ojg4MTogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0Ojg3NDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJnbHItcmVncmVzc2lvbi5hdDo4NzQiCisoICRhdF9jaGVja190cmFjZTsgc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6ODc0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMzQwCisjQVRfU1RBUlRfMzQxCithdF9mbl9ncm91cF9iYW5uZXIgMzQxICdnbHItcmVncmVzc2lvbi5hdDo4ODMnIFwKKyAgIlVuZGVzaXJhYmxlIGRlc3RydWN0b3JzIGlmIHVzZXIgYWN0aW9uIGN1dHMgcGFyc2UiICIiIDIyCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMzQxLiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKIAogCiBjYXQgPmdsci1yZWdyMTEueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKIAogJXsKICMgaW5jbHVkZSA8c3RkbGliLmg+Ci0gIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKGNoYXIgY29uc3QgKik7CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOwogICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKICAgc3RhdGljIGludCBkZXN0cnVjdG9ycyA9IDA7CiAjIGRlZmluZSBVU0UodmFsKQpAQCAtNjU4NzgsMTcgKzE3NTk0NSwyNSBAQAogCiAlJQogCi1zdGF0aWMgdm9pZAoteXllcnJvciAoY2hhciBjb25zdCAqbXNnKQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQogewogICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKIH0KLQotc3RhdGljIGludAoteXlsZXggKHZvaWQpCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitzdGF0aWMKK2ludCB5eWxleCAodm9pZCkKIHsKLSAgc3RhdGljIGNoYXIgY29uc3QgKmlucHV0ID0gImEiOwotICByZXR1cm4gKmlucHV0Kys7CisgIHN0YXRpYyBjaGFyIGNvbnN0IGlucHV0W10gPSAiYSI7CisgIHN0YXRpYyBzaXplX3QgdG9rbnVtID0gMDsKKyAgaW50IHJlczsKKyAgOworICBhc3NlcnQgKHRva251bSA8IHNpemVvZiBpbnB1dCAvIHNpemVvZiBpbnB1dFswXSk7CisgIHJlcyA9IGlucHV0W3Rva251bSsrXTsKKyAgOworICByZXR1cm4gcmVzOwogfQogCiBpbnQKQEAgLTY1OTA2LDExMCArMTc1OTgxLDE3MyBAQAogCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJnbHItcmVncmVzc2lvbi5hdDo5MzU6IGJpc29uIC1vIGdsci1yZWdyMTEuYyBnbHItcmVncjExLnkiCi1lY2hvIGdsci1yZWdyZXNzaW9uLmF0OjkzNSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gZ2xyLXJlZ3IxMS5jIGdsci1yZWdyMTEueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvID4+JGF0X3N0ZGVycjsgZWNobyAiZ2xyLXJlZ3IxMS55OiBjb25mbGljdHM6IDEgcmVkdWNlL3JlZHVjZQotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6OTM1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo5Mjc6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBnbHItcmVncjExLmMgZ2xyLXJlZ3IxMS55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6OTI3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGdsci1yZWdyMTEuYyBnbHItcmVncjExLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjkyNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjkyNzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZ2xyLXJlZ3IxMS5jIGdsci1yZWdyMTEueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBnbHItcmVncjExLmMgZ2xyLXJlZ3IxMS55IiAiZ2xyLXJlZ3Jlc3Npb24uYXQ6OTI3IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGdsci1yZWdyMTEuYyBnbHItcmVncjExLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjkyNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo5Mjc6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJnbHItcmVncmVzc2lvbi5hdDo5MjciCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6OTI3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6OTI3OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6OTI3IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjkyNyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjkzNjogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBnbHItcmVncjExIGdsci1yZWdyMTEuYyBcJExJQlMiCi1lY2hvIGdsci1yZWdyZXNzaW9uLmF0OjkzNiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGdsci1yZWdyMTEgZ2xyLXJlZ3IxMS5jICRMSUJTICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjkzNjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6OTI3OiBiaXNvbiAtbyBnbHItcmVncjExLmMgZ2xyLXJlZ3IxMS55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiZ2xyLXJlZ3Jlc3Npb24uYXQ6OTI3IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGdsci1yZWdyMTEuYyBnbHItcmVncjExLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJnbHItcmVncjExLnk6IGNvbmZsaWN0czogMSByZWR1Y2UvcmVkdWNlCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo5MjciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6OTM4OiAuL2dsci1yZWdyMTEiCi1lY2hvIGdsci1yZWdyZXNzaW9uLmF0OjkzOCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgLi9nbHItcmVncjExICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjkzODogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjkzMDogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImdsci1yZWdyZXNzaW9uLmF0OjkzMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6OTMwIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjkzMDogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBnbHItcmVncjExIGdsci1yZWdyMTEuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBnbHItcmVncjExIGdsci1yZWdyMTEuYyAkTElCUyIgImdsci1yZWdyZXNzaW9uLmF0OjkzMCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gZ2xyLXJlZ3IxMSBnbHItcmVncjExLmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjkzMCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Cit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6OTMyOiAgXCRQUkVQQVJTRVIgLi9nbHItcmVncjExIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2dsci1yZWdyMTEiICJnbHItcmVncmVzc2lvbi5hdDo5MzIiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9nbHItcmVncjExCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo5MzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIDE1MyApICMgMTUzLiBnbHItcmVncmVzc2lvbi5hdDo5NDc6IExlYWtlZCBzZW1hbnRpYyB2YWx1ZXMgaWYgdXNlciBhY3Rpb24gY3V0cyBwYXJzZQotICAgIGF0X3NldHVwX2xpbmU9J2dsci1yZWdyZXNzaW9uLmF0Ojk0NycKLSAgICBhdF9kZXNjPSdMZWFrZWQgc2VtYW50aWMgdmFsdWVzIGlmIHVzZXIgYWN0aW9uIGN1dHMgcGFyc2UnCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjE1MzogTGVha2VkIHNlbWFudGljIHZhbHVlcyBpZiB1c2VyIGFjdGlvbiBjdXRzIHBhcnNlJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjE1My4gZ2xyLXJlZ3Jlc3Npb24uYXQ6OTQ3OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6OTMyOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImdsci1yZWdyZXNzaW9uLmF0OjkzMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDo5MzIiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8zNDEKKyNBVF9TVEFSVF8zNDIKK2F0X2ZuX2dyb3VwX2Jhbm5lciAzNDIgJ2dsci1yZWdyZXNzaW9uLmF0Ojk0MScgXAorICAiTGVha2VkIHNlbWFudGljIHZhbHVlcyBpZiB1c2VyIGFjdGlvbiBjdXRzIHBhcnNlIiAiIiAyMgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjM0Mi4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCiAKIAogY2F0ID5nbHItcmVncjEyLnkgPDwnX0FURU9GJwotJXsKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotICAvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KLSMgdW5kZWYgbWFsbG9jCi0jIHVuZGVmIG1lbWNtcAotIyB1bmRlZiByZWFsbG9jCi0jZW5kaWYKLSV9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCiAKICVnbHItcGFyc2VyCkBAIC02NjAyMiw4ICsxNzYxNjAsOSBAQAogCiAlewogIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CiAgIHN0YXRpYyBpbnQgbWVyZ2UgKFlZU1RZUEUsIFlZU1RZUEUpOwotICBzdGF0aWMgdm9pZCB5eWVycm9yIChjaGFyIGNvbnN0ICopOworICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKICAgc3RhdGljIGludCB5eWxleCAodm9pZCk7CiAgIHN0YXRpYyBpbnQgcGFyZW50X3Joc19iZWZvcmVfdmFsdWUgPSAwOwogICBzdGF0aWMgaW50IG1lcmdlZF92YWx1ZSA9IDA7CkBAIC02NjA4NCwyMCArMTc2MjIzLDI2IEBACiAgIHJldHVybiBkdW1teTsKIH0KIAotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKGNoYXIgY29uc3QgKm1zZykKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKIHsKICAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7CiB9Ci0KLXN0YXRpYyBpbnQKLXl5bGV4ICh2b2lkKQorI2luY2x1ZGUgPGFzc2VydC5oPgorc3RhdGljCitpbnQgeXlsZXggKHZvaWQpCiB7CiAgIHN0YXRpYyBpbnQgY29uc3QgaW5wdXRbXSA9IHsgUEFSRU5UX1JIU19BRlRFUiwgMCB9OwotICBzdGF0aWMgY29uc3QgaW50ICppbnB1dHAgPSBpbnB1dDsKLSAgaWYgKCppbnB1dHAgPT0gUEFSRU5UX1JIU19BRlRFUikKLSAgICBwYXJlbnRfcmhzX2FmdGVyX3ZhbHVlID0gMTsKLSAgcmV0dXJuICppbnB1dHArKzsKKyAgc3RhdGljIHNpemVfdCB0b2tudW0gPSAwOworICBpbnQgcmVzOworICA7CisgIGFzc2VydCAodG9rbnVtIDwgc2l6ZW9mIGlucHV0IC8gc2l6ZW9mIGlucHV0WzBdKTsKKyAgcmVzID0gaW5wdXRbdG9rbnVtKytdOworICBpZiAocmVzID09IFBBUkVOVF9SSFNfQUZURVIpCisgICAgcGFyZW50X3Joc19hZnRlcl92YWx1ZSA9IDE7OworICByZXR1cm4gcmVzOwogfQogCiBpbnQKQEAgLTY2MTI1LDExMCArMTc2MjcwLDE3MyBAQAogCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJnbHItcmVncmVzc2lvbi5hdDoxMDY0OiBiaXNvbiAtbyBnbHItcmVncjEyLmMgZ2xyLXJlZ3IxMi55IgotZWNobyBnbHItcmVncmVzc2lvbi5hdDoxMDY0ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtbyBnbHItcmVncjEyLmMgZ2xyLXJlZ3IxMi55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gPj4kYXRfc3RkZXJyOyBlY2hvICJnbHItcmVncjEyLnk6IGNvbmZsaWN0czogMSBzaGlmdC9yZWR1Y2UsIDEgcmVkdWNlL3JlZHVjZQotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTA2NDogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTA0ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGdsci1yZWdyMTIuYyBnbHItcmVncjEyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJnbHItcmVncmVzc2lvbi5hdDoxMDQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGdsci1yZWdyMTIuYyBnbHItcmVncjEyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjEwNDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxMDQ4OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBnbHItcmVncjEyLmMgZ2xyLXJlZ3IxMi55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGdsci1yZWdyMTIuYyBnbHItcmVncjEyLnkiICJnbHItcmVncmVzc2lvbi5hdDoxMDQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGdsci1yZWdyMTIuYyBnbHItcmVncjEyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjEwNDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTA0ODogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImdsci1yZWdyZXNzaW9uLmF0OjEwNDgiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTA0OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjEwNDg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJnbHItcmVncmVzc2lvbi5hdDoxMDQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjEwNDgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKLQotJGF0X3RyYWNlb24KLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJnbHItcmVncmVzc2lvbi5hdDoxMDY1OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGdsci1yZWdyMTIgZ2xyLXJlZ3IxMi5jIFwkTElCUyIKLWVjaG8gZ2xyLXJlZ3Jlc3Npb24uYXQ6MTA2NSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGdsci1yZWdyMTIgZ2xyLXJlZ3IxMi5jICRMSUJTICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjEwNjU6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjEwNDg6IGJpc29uIC1vIGdsci1yZWdyMTIuYyBnbHItcmVncjEyLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJnbHItcmVncmVzc2lvbi5hdDoxMDQ4IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGdsci1yZWdyMTIuYyBnbHItcmVncjEyLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJnbHItcmVncjEyLnk6IGNvbmZsaWN0czogMSBzaGlmdC9yZWR1Y2UsIDEgcmVkdWNlL3JlZHVjZQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTA0OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJnbHItcmVncmVzc2lvbi5hdDoxMDY3OiAuL2dsci1yZWdyMTIiCi1lY2hvIGdsci1yZWdyZXNzaW9uLmF0OjEwNjcgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IC4vZ2xyLXJlZ3IxMiApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJnbHItcmVncmVzc2lvbi5hdDoxMDY3OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTA1MTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImdsci1yZWdyZXNzaW9uLmF0OjEwNTEiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjEwNTEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTA1MTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBnbHItcmVncjEyIGdsci1yZWdyMTIuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBnbHItcmVncjEyIGdsci1yZWdyMTIuYyAkTElCUyIgImdsci1yZWdyZXNzaW9uLmF0OjEwNTEiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGdsci1yZWdyMTIgZ2xyLXJlZ3IxMi5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxMDUxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxMDUzOiAgXCRQUkVQQVJTRVIgLi9nbHItcmVncjEyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2dsci1yZWdyMTIiICJnbHItcmVncmVzc2lvbi5hdDoxMDUzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vZ2xyLXJlZ3IxMgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTA1MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgMTU0ICkgIyAxNTQuIGdsci1yZWdyZXNzaW9uLmF0OjEwNzg6IEluY29ycmVjdCBsb29rYWhlYWQgZHVyaW5nIGRldGVybWluaXN0aWMgR0xSCi0gICAgYXRfc2V0dXBfbGluZT0nZ2xyLXJlZ3Jlc3Npb24uYXQ6MTA3OCcKLSAgICBhdF9kZXNjPSdJbmNvcnJlY3QgbG9va2FoZWFkIGR1cmluZyBkZXRlcm1pbmlzdGljIEdMUicKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiMTU0OiBJbmNvcnJlY3QgbG9va2FoZWFkIGR1cmluZyBkZXRlcm1pbmlzdGljIEdMUiAkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiMTU0LiBnbHItcmVncmVzc2lvbi5hdDoxMDc4OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTA1Mzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJnbHItcmVncmVzc2lvbi5hdDoxMDUzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjEwNTMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8zNDIKKyNBVF9TVEFSVF8zNDMKK2F0X2ZuX2dyb3VwX2Jhbm5lciAzNDMgJ2dsci1yZWdyZXNzaW9uLmF0OjEwNjQnIFwKKyAgIkluY29ycmVjdCBsb29rYWhlYWQgZHVyaW5nIGRldGVybWluaXN0aWMgR0xSIiAiICAgIiAyMgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjM0My4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCiAKIAogY2F0ID5nbHItcmVncjEzLnkgPDwnX0FURU9GJwotJXsKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotICAvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KLSMgdW5kZWYgbWFsbG9jCi0jIHVuZGVmIG1lbWNtcAotIyB1bmRlZiByZWFsbG9jCi0jZW5kaWYKLSV9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCiAKIC8qIFRlc3RzOgpAQCAtNjYyNDAsOSArMTc2NDQ4LDEwIEBACiAKICV7CiAgICNpbmNsdWRlIDxzdGRpby5oPgotICBzdGF0aWMgdm9pZCB5eWVycm9yIChjaGFyIGNvbnN0ICopOworICAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOwogICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKLSAgc3RhdGljIHZvaWQgcHJpbnRfbG9va19haGVhZCAoY2hhciBjb25zdCAqKTsKKyAgc3RhdGljIHZvaWQgcHJpbnRfbG9va2FoZWFkIChjaGFyIGNvbnN0ICopOwogICAjZGVmaW5lIFVTRSh2YWx1ZSkKICV9CiAKQEAgLTY2MjU2LDMyICsxNzY0NjUsMzIgQEAKIHN0YXJ0OgogICBkZWZzdGF0ZV9pbml0IGRlZnN0YXRlX3NoaWZ0ICdiJyBjaGFuZ2VfbG9va2FoZWFkICdhJyB7CiAgICAgVVNFICgkMyk7Ci0gICAgcHJpbnRfbG9va19haGVhZCAoInN0YXJ0IDwtIGRlZnN0YXRlX2luaXQgZGVmc3RhdGVfc2hpZnQgJ2InIik7CisgICAgcHJpbnRfbG9va2FoZWFkICgic3RhcnQgPC0gZGVmc3RhdGVfaW5pdCBkZWZzdGF0ZV9zaGlmdCAnYiciKTsKICAgfQogICA7CiBkZWZzdGF0ZV9pbml0OgogICB7Ci0gICAgcHJpbnRfbG9va19haGVhZCAoImRlZnN0YXRlX2luaXQgPC0gZW1wdHkgc3RyaW5nIik7CisgICAgcHJpbnRfbG9va2FoZWFkICgiZGVmc3RhdGVfaW5pdCA8LSBlbXB0eSBzdHJpbmciKTsKICAgfQogICA7CiBkZWZzdGF0ZV9zaGlmdDoKICAgbm9uZGVmc3RhdGUgZGVmc3RhdGVfbG9vayAnYScgewogICAgIFVTRSAoJDMpOwotICAgIHByaW50X2xvb2tfYWhlYWQgKCJkZWZzdGF0ZV9zaGlmdCA8LSBub25kZWZzdGF0ZSBkZWZzdGF0ZV9sb29rICdhJyIpOworICAgIHByaW50X2xvb2thaGVhZCAoImRlZnN0YXRlX3NoaWZ0IDwtIG5vbmRlZnN0YXRlIGRlZnN0YXRlX2xvb2sgJ2EnIik7CiAgIH0KICAgOwogZGVmc3RhdGVfbG9vazoKICAgewotICAgIHByaW50X2xvb2tfYWhlYWQgKCJkZWZzdGF0ZV9sb29rIDwtIGVtcHR5IHN0cmluZyIpOworICAgIHByaW50X2xvb2thaGVhZCAoImRlZnN0YXRlX2xvb2sgPC0gZW1wdHkgc3RyaW5nIik7CiAgIH0KICAgOwogbm9uZGVmc3RhdGU6CiAgIHsKLSAgICBwcmludF9sb29rX2FoZWFkICgibm9uZGVmc3RhdGUgPC0gZW1wdHkgc3RyaW5nIik7CisgICAgcHJpbnRfbG9va2FoZWFkICgibm9uZGVmc3RhdGUgPC0gZW1wdHkgc3RyaW5nIik7CiAgIH0KICAgfCAnYicgewogICAgIFVTRSAoJDEpOwotICAgIHByaW50X2xvb2tfYWhlYWQgKCJub25kZWZzdGF0ZSA8LSAnYiciKTsKKyAgICBwcmludF9sb29rYWhlYWQgKCJub25kZWZzdGF0ZSA8LSAnYiciKTsKICAgfQogICA7CiBjaGFuZ2VfbG9va2FoZWFkOgpAQCAtNjYyOTIsMjUgKzE3NjUwMSwyOSBAQAogCiAlJQogCi1zdGF0aWMgdm9pZAoteXllcnJvciAoY2hhciBjb25zdCAqbXNnKQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQogewogICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKIH0KLQotc3RhdGljIGludAoteXlsZXggKHZvaWQpCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitzdGF0aWMKK2ludCB5eWxleCAodm9pZCkKIHsKLSAgc3RhdGljIGNoYXIgY29uc3QgKmlucHV0ID0gImFiIjsKLSAgc3RhdGljIGludCBpID0gMDsKLSAgeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxsb2MubGFzdF9saW5lID0gMTsKLSAgeXlsbG9jLmZpcnN0X2NvbHVtbiA9IHl5bGxvYy5sYXN0X2NvbHVtbiA9IGkgKyAxOwotICB5eWx2YWwudmFsdWUgPSBpbnB1dFtpXSArICdBJyAtICdhJzsKLSAgcmV0dXJuIGlucHV0W2krK107CisgIHN0YXRpYyBjaGFyIGNvbnN0IGlucHV0W10gPSAiYWIiOworICBzdGF0aWMgc2l6ZV90IHRva251bSA9IDA7CisgIGludCByZXM7CisgIDsKKyAgYXNzZXJ0ICh0b2tudW0gPCBzaXplb2YgaW5wdXQgLyBzaXplb2YgaW5wdXRbMF0pOworICByZXMgPSBpbnB1dFt0b2tudW0rK107CisgIHl5bHZhbC52YWx1ZSA9IHJlcyArICdBJyAtICdhJzsKKyAgcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIHZvaWQKLXByaW50X2xvb2tfYWhlYWQgKGNoYXIgY29uc3QgKnJlZHVjdGlvbikKK3ByaW50X2xvb2thaGVhZCAoY2hhciBjb25zdCAqcmVkdWN0aW9uKQogewogICBwcmludGYgKCIlczpcbiAgeXljaGFyPSIsIHJlZHVjdGlvbik7CiAgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKQEAgLTY2MzQwLDY3ICsxNzY1NTMsMTI5IEBACiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjExODk6IGJpc29uIC1vIGdsci1yZWdyMTMuYyBnbHItcmVncjEzLnkiCi1lY2hvIGdsci1yZWdyZXNzaW9uLmF0OjExODkgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGdsci1yZWdyMTMuYyBnbHItcmVncjEzLnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTE4OTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTE2NTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGdsci1yZWdyMTMuYyBnbHItcmVncjEzLnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJnbHItcmVncmVzc2lvbi5hdDoxMTY1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGdsci1yZWdyMTMuYyBnbHItcmVncjEzLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjExNjUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxMTY1OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBnbHItcmVncjEzLmMgZ2xyLXJlZ3IxMy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGdsci1yZWdyMTMuYyBnbHItcmVncjEzLnkiICJnbHItcmVncmVzc2lvbi5hdDoxMTY1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGdsci1yZWdyMTMuYyBnbHItcmVncjEzLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjExNjUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTE2NTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImdsci1yZWdyZXNzaW9uLmF0OjExNjUiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTE2NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjExNjU6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJnbHItcmVncmVzc2lvbi5hdDoxMTY1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjExNjUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKLQotJGF0X3RyYWNlb24KLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJnbHItcmVncmVzc2lvbi5hdDoxMTkwOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGdsci1yZWdyMTMgZ2xyLXJlZ3IxMy5jIFwkTElCUyIKLWVjaG8gZ2xyLXJlZ3Jlc3Npb24uYXQ6MTE5MCA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGdsci1yZWdyMTMgZ2xyLXJlZ3IxMy5jICRMSUJTICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjExOTA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjExNjU6IGJpc29uIC1vIGdsci1yZWdyMTMuYyBnbHItcmVncjEzLnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJnbHItcmVncmVzc2lvbi5hdDoxMTY1IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGdsci1yZWdyMTMuYyBnbHItcmVncjEzLnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTE2NSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJnbHItcmVncmVzc2lvbi5hdDoxMjAzOiAuL2dsci1yZWdyMTMiCi1lY2hvIGdsci1yZWdyZXNzaW9uLmF0OjEyMDMgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IC4vZ2xyLXJlZ3IxMyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvID4+JGF0X3N0ZG91dDsgZWNobyAiZGVmc3RhdGVfaW5pdCA8LSBlbXB0eSBzdHJpbmc6Cit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTE2NjogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImdsci1yZWdyZXNzaW9uLmF0OjExNjYiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjExNjYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTE2NjogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBnbHItcmVncjEzIGdsci1yZWdyMTMuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBnbHItcmVncjEzIGdsci1yZWdyMTMuYyAkTElCUyIgImdsci1yZWdyZXNzaW9uLmF0OjExNjYiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGdsci1yZWdyMTMgZ2xyLXJlZ3IxMy5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxMTY2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTE2ODogIFwkUFJFUEFSU0VSIC4vZ2xyLXJlZ3IxMyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9nbHItcmVncjEzIiAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTE2OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2dsci1yZWdyMTMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCitlY2hvID4+IiRhdF9zdGRvdXQiOyAkYXNfZWNobyAiZGVmc3RhdGVfaW5pdCA8LSBlbXB0eSBzdHJpbmc6CiAgIHl5Y2hhcj1ZWUVNUFRZCiBub25kZWZzdGF0ZSA8LSBlbXB0eSBzdHJpbmc6CiAgIHl5Y2hhcj0nYScsIHl5bHZhbD0nQScsIHl5bGxvYz0oMSwxKSwoMSwxKQpAQCAtNjY0MTAsNDkgKzE3NjY4NSw1MCBAQAogICB5eWNoYXI9WVlFTVBUWQogc3RhcnQgPC0gZGVmc3RhdGVfaW5pdCBkZWZzdGF0ZV9zaGlmdCAnYic6CiAgIHl5Y2hhcj1ZWUVNUFRZCi0iIHwgJGF0X2RpZmYgLSAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJnbHItcmVncmVzc2lvbi5hdDoxMjAzOiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxMTY4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjExNjg6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTE2OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxMTY4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0gICAgICAkYXRfdHJhY2VvZmYKLSAgICAgICRhdF90aW1lc19wICYmIHRpbWVzID4kYXRfdGltZXNfZmlsZQotICAgICkgNT4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKLSAgICBhdF9zdGF0dXM9YGNhdCAkYXRfc3RhdHVzX2ZpbGVgCi0gICAgOzsKIAotICAxNTUgKSAjIDE1NS4gZ2xyLXJlZ3Jlc3Npb24uYXQ6MTIxMjogSW5jb3JyZWN0IGxvb2thaGVhZCBkdXJpbmcgbm9uZGV0ZXJtaW5pc3RpYyBHTFIKLSAgICBhdF9zZXR1cF9saW5lPSdnbHItcmVncmVzc2lvbi5hdDoxMjEyJwotICAgIGF0X2Rlc2M9J0luY29ycmVjdCBsb29rYWhlYWQgZHVyaW5nIG5vbmRldGVybWluaXN0aWMgR0xSJwotICAgICRhdF9xdWlldCAkRUNIT19OICIxNTU6IEluY29ycmVjdCBsb29rYWhlYWQgZHVyaW5nIG5vbmRldGVybWluaXN0aWMgR0xSJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjE1NS4gZ2xyLXJlZ3Jlc3Npb24uYXQ6MTIxMjogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8zNDMKKyNBVF9TVEFSVF8zNDQKK2F0X2ZuX2dyb3VwX2Jhbm5lciAzNDQgJ2dsci1yZWdyZXNzaW9uLmF0OjExODgnIFwKKyAgIkluY29ycmVjdCBsb29rYWhlYWQgZHVyaW5nIG5vbmRldGVybWluaXN0aWMgR0xSIiAiIiAyMgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjM0NC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCiAKIAogY2F0ID5nbHItcmVncjE0LnkgPDwnX0FURU9GJwotJXsKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotICAvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KLSMgdW5kZWYgbWFsbG9jCi0jIHVuZGVmIG1lbWNtcAotIyB1bmRlZiByZWFsbG9jCi0jZW5kaWYKLSV9CislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQogCiAKIC8qIFRlc3RzOgpAQCAtNjY0NzcsMTAgKzE3Njc1MywxMiBAQAogJXVuaW9uIHsgY2hhciB2YWx1ZTsgfQogCiAleworICAjaW5jbHVkZSA8c3RkbGliLmg+CiAgICNpbmNsdWRlIDxzdGRpby5oPgotICBzdGF0aWMgdm9pZCB5eWVycm9yIChjaGFyIGNvbnN0ICopOworICAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOwogICBzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKLSAgc3RhdGljIHZvaWQgcHJpbnRfbG9va19haGVhZCAoY2hhciBjb25zdCAqKTsKKyAgc3RhdGljIHZvaWQgcHJpbnRfbG9va2FoZWFkIChjaGFyIGNvbnN0ICopOwogICBzdGF0aWMgY2hhciBtZXJnZSAodW5pb24gWVlTVFlQRSwgdW5pb24gWVlTVFlQRSk7CiAgICNkZWZpbmUgVVNFKHZhbHVlKQogJX0KQEAgLTY2NDk0LDcgKzE3Njc3Miw3IEBACiBzdGFydDoKICAgbWVyZ2UgJ2MnIHN0YWNrX2V4cGxvc2lvbiB7CiAgICAgVVNFICgkMik7IFVTRSAoJDMpOwotICAgIHByaW50X2xvb2tfYWhlYWQgKCJzdGFydCA8LSBtZXJnZSAnYycgc3RhY2tfZXhwbG9zaW9uIik7CisgICAgcHJpbnRfbG9va2FoZWFkICgic3RhcnQgPC0gbWVyZ2UgJ2MnIHN0YWNrX2V4cGxvc2lvbiIpOwogICB9CiAgIDsKIApAQCAtNjY1MDIsNDQgKzE3Njc4MCw0NCBAQAogbWVyZ2U6CiAgIG5vbmNvbmZsaWN0MSAnYScgJ2InIG5vbmNvbmZsaWN0MiAlZHByZWMgMSB7CiAgICAgVVNFICgkMik7IFVTRSAoJDMpOwotICAgIHByaW50X2xvb2tfYWhlYWQgKCJtZXJnZSA8LSBub25jb25mbGljdDEgJ2EnICdiJyBub25jb25mbGljdDIiKTsKKyAgICBwcmludF9sb29rYWhlYWQgKCJtZXJnZSA8LSBub25jb25mbGljdDEgJ2EnICdiJyBub25jb25mbGljdDIiKTsKICAgfQogICB8IGNvbmZsaWN0IGRlZnN0YXRlX2xvb2sgJ2EnIG5vbmNvbmZsaWN0MiAnYicgZGVmc3RhdGVfc2hpZnQgJWRwcmVjIDIgewogICAgIFVTRSAoJDMpOyBVU0UgKCQ1KTsKLSAgICBwcmludF9sb29rX2FoZWFkICgibWVyZ2UgPC0gY29uZmxpY3QgZGVmc3RhdGVfbG9vayAnYScgbm9uY29uZmxpY3QyICdiJyIKKyAgICBwcmludF9sb29rYWhlYWQgKCJtZXJnZSA8LSBjb25mbGljdCBkZWZzdGF0ZV9sb29rICdhJyBub25jb25mbGljdDIgJ2InIgogCQkgICAgICAiIGRlZnN0YXRlX3NoaWZ0Iik7CiAgIH0KICAgOwogCiBub25jb25mbGljdDE6CiAgIHsKLSAgICBwcmludF9sb29rX2FoZWFkICgibm9uY29uZmxpY3QxIDwtIGVtcHR5IHN0cmluZyIpOworICAgIHByaW50X2xvb2thaGVhZCAoIm5vbmNvbmZsaWN0MSA8LSBlbXB0eSBzdHJpbmciKTsKICAgfQogICA7CiBub25jb25mbGljdDI6CiAgIHsKLSAgICBwcmludF9sb29rX2FoZWFkICgibm9uY29uZmxpY3QyIDwtIGVtcHR5IHN0cmluZyIpOworICAgIHByaW50X2xvb2thaGVhZCAoIm5vbmNvbmZsaWN0MiA8LSBlbXB0eSBzdHJpbmciKTsKICAgfQogICB8ICdhJyB7CiAgICAgVVNFICgkMSk7Ci0gICAgcHJpbnRfbG9va19haGVhZCAoIm5vbmNvbmZsaWN0MiA8LSAnYSciKTsKKyAgICBwcmludF9sb29rYWhlYWQgKCJub25jb25mbGljdDIgPC0gJ2EnIik7CiAgIH0KICAgOwogY29uZmxpY3Q6CiAgIHsKLSAgICBwcmludF9sb29rX2FoZWFkICgiY29uZmxpY3QgPC0gZW1wdHkgc3RyaW5nIik7CisgICAgcHJpbnRfbG9va2FoZWFkICgiY29uZmxpY3QgPC0gZW1wdHkgc3RyaW5nIik7CiAgIH0KICAgOwogZGVmc3RhdGVfbG9vazoKICAgewotICAgIHByaW50X2xvb2tfYWhlYWQgKCJkZWZzdGF0ZV9sb29rIDwtIGVtcHR5IHN0cmluZyIpOworICAgIHByaW50X2xvb2thaGVhZCAoImRlZnN0YXRlX2xvb2sgPC0gZW1wdHkgc3RyaW5nIik7CiAgIH0KICAgOwogCiAvKiB5eWNoYXIgIT0gWVlFTVBUWSBidXQgbG9va2FoZWFkIG5lZWQgaXMgeXlmYWxzZS4gICovCiBkZWZzdGF0ZV9zaGlmdDoKICAgewotICAgIHByaW50X2xvb2tfYWhlYWQgKCJkZWZzdGF0ZV9zaGlmdCA8LSBlbXB0eSBzdHJpbmciKTsKKyAgICBwcmludF9sb29rYWhlYWQgKCJkZWZzdGF0ZV9zaGlmdCA8LSBlbXB0eSBzdHJpbmciKTsKICAgfQogICA7CiAKQEAgLTY2NTg4LDI1ICsxNzY4NjYsMjcgQEAKIAogJSUKIAotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKGNoYXIgY29uc3QgKm1zZykKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKIHsKICAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7CiB9Ci0KIHN0YXRpYyBpbnQKIHl5bGV4ICh2b2lkKQogewotICBzdGF0aWMgY2hhciBjb25zdCAqaW5wdXQgPSAiYWJjZGRkZCI7Ci0gIHN0YXRpYyBpbnQgaSA9IDA7CisgIHN0YXRpYyBjaGFyIGNvbnN0IGlucHV0W10gPSAiYWJjZGRkZCI7CisgIHN0YXRpYyBzaXplX3QgdG9rbnVtOworICBhc3NlcnQgKHRva251bSA8IHNpemVvZiBpbnB1dCk7CiAgIHl5bGxvYy5maXJzdF9saW5lID0geXlsbG9jLmxhc3RfbGluZSA9IDE7Ci0gIHl5bGxvYy5maXJzdF9jb2x1bW4gPSB5eWxsb2MubGFzdF9jb2x1bW4gPSBpICsgMTsKLSAgeXlsdmFsLnZhbHVlID0gaW5wdXRbaV0gKyAnQScgLSAnYSc7Ci0gIHJldHVybiBpbnB1dFtpKytdOworICB5eWxsb2MuZmlyc3RfY29sdW1uID0geXlsbG9jLmxhc3RfY29sdW1uID0gdG9rbnVtICsgMTsKKyAgeXlsdmFsLnZhbHVlID0gaW5wdXRbdG9rbnVtXSArICdBJyAtICdhJzsKKyAgcmV0dXJuIGlucHV0W3Rva251bSsrXTsKIH0KIAogc3RhdGljIHZvaWQKLXByaW50X2xvb2tfYWhlYWQgKGNoYXIgY29uc3QgKnJlZHVjdGlvbikKK3ByaW50X2xvb2thaGVhZCAoY2hhciBjb25zdCAqcmVkdWN0aW9uKQogewogICBwcmludGYgKCIlczpcbiAgeXljaGFyPSIsIHJlZHVjdGlvbik7CiAgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKQEAgLTY2NjQzLDY4ICsxNzY5MjMsMTMxIEBACiAKIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjE0MDQ6IGJpc29uIC1vIGdsci1yZWdyMTQuYyBnbHItcmVncjE0LnkiCi1lY2hvIGdsci1yZWdyZXNzaW9uLmF0OjE0MDQgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IGJpc29uIC1vIGdsci1yZWdyMTQuYyBnbHItcmVncjE0LnkgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyA+PiRhdF9zdGRlcnI7IGVjaG8gImdsci1yZWdyMTQueTogY29uZmxpY3RzOiAzIHJlZHVjZS9yZWR1Y2UKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjE0MDQ6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjEzNzg6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBnbHItcmVncjE0LmMgZ2xyLXJlZ3IxNC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTM3OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBnbHItcmVncjE0LmMgZ2xyLXJlZ3IxNC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxMzc4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTM3ODogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZ2xyLXJlZ3IxNC5jIGdsci1yZWdyMTQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBnbHItcmVncjE0LmMgZ2xyLXJlZ3IxNC55IiAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTM3OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBnbHItcmVncjE0LmMgZ2xyLXJlZ3IxNC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxMzc4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjEzNzg6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJnbHItcmVncmVzc2lvbi5hdDoxMzc4IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjEzNzgiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxMzc4OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTM3OCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxMzc4IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCi0KLSRhdF90cmFjZW9uCi0KLSRhdF90cmFjZW9mZgotZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTQwNTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBnbHItcmVncjE0IGdsci1yZWdyMTQuYyBcJExJQlMiCi1lY2hvIGdsci1yZWdyZXNzaW9uLmF0OjE0MDUgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBnbHItcmVncjE0IGdsci1yZWdyMTQuYyAkTElCUyApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvIHN0ZGVycjo7IGNhdCAkYXRfc3RkZXJyCi1lY2hvIHN0ZG91dDo7IGNhdCAkYXRfc3Rkb3V0Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJnbHItcmVncmVzc2lvbi5hdDoxNDA1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCi0KLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxMzc4OiBiaXNvbiAtbyBnbHItcmVncjE0LmMgZ2xyLXJlZ3IxNC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTM3OCIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBnbHItcmVncjE0LmMgZ2xyLXJlZ3IxNC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiZ2xyLXJlZ3IxNC55OiBjb25mbGljdHM6IDMgcmVkdWNlL3JlZHVjZQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTM3OCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJnbHItcmVncmVzc2lvbi5hdDoxNDIwOiAuL2dsci1yZWdyMTQiCi1lY2hvIGdsci1yZWdyZXNzaW9uLmF0OjE0MjAgPiRhdF9jaGVja19saW5lX2ZpbGUKLSggJGF0X3RyYWNlb247IC4vZ2xyLXJlZ3IxNCApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci1lY2hvID4+JGF0X3N0ZG91dDsgZWNobyAiY29uZmxpY3QgPC0gZW1wdHkgc3RyaW5nOgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjEzODE6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJnbHItcmVncmVzc2lvbi5hdDoxMzgxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxMzgxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjEzODE6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gZ2xyLXJlZ3IxNCBnbHItcmVncjE0LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gZ2xyLXJlZ3IxNCBnbHItcmVncjE0LmMgJExJQlMiICJnbHItcmVncmVzc2lvbi5hdDoxMzgxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBnbHItcmVncjE0IGdsci1yZWdyMTQuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTM4MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjEzODM6ICBcJFBSRVBBUlNFUiAuL2dsci1yZWdyMTQiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vZ2xyLXJlZ3IxNCIgImdsci1yZWdyZXNzaW9uLmF0OjEzODMiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9nbHItcmVncjE0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorZWNobyA+PiIkYXRfc3Rkb3V0IjsgJGFzX2VjaG8gImNvbmZsaWN0IDwtIGVtcHR5IHN0cmluZzoKICAgeXljaGFyPSdhJywgeXlsdmFsPSdBJywgeXlsbG9jPSgxLDEpLCgxLDEpCiBkZWZzdGF0ZV9sb29rIDwtIGVtcHR5IHN0cmluZzoKICAgeXljaGFyPSdhJywgeXlsdmFsPSdBJywgeXlsbG9jPSgxLDEpLCgxLDEpCkBAIC02NjcxNiw0OSArMTc3MDU5LDUwIEBACiAgIHl5Y2hhcj1ZWUVNUFRZCiBzdGFydCA8LSBtZXJnZSAnYycgc3RhY2tfZXhwbG9zaW9uOgogICB5eWNoYXI9WVlFT0YKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjE0MjA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjEzODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTM4Mzogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJnbHItcmVncmVzc2lvbi5hdDoxMzgzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjEzODMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OwogCi0gIDE1NiApICMgMTU2LiBnbHItcmVncmVzc2lvbi5hdDoxNDI5OiBMZWFrZWQgc2VtYW50aWMgdmFsdWVzIHdoZW4gcmVwb3J0aW5nIGFtYmlndWl0eQotICAgIGF0X3NldHVwX2xpbmU9J2dsci1yZWdyZXNzaW9uLmF0OjE0MjknCi0gICAgYXRfZGVzYz0nTGVha2VkIHNlbWFudGljIHZhbHVlcyB3aGVuIHJlcG9ydGluZyBhbWJpZ3VpdHknCi0gICAgJGF0X3F1aWV0ICRFQ0hPX04gIjE1NjogTGVha2VkIHNlbWFudGljIHZhbHVlcyB3aGVuIHJlcG9ydGluZyBhbWJpZ3VpdHkkRUNIT19DIgotICAgIGF0X3hmYWlsPW5vCi0gICAgKAotICAgICAgZWNobyAiMTU2LiBnbHItcmVncmVzc2lvbi5hdDoxNDI5OiB0ZXN0aW5nIC4uLiIKLSAgICAgICRhdF90cmFjZW9uCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzM0NAorI0FUX1NUQVJUXzM0NQorYXRfZm5fZ3JvdXBfYmFubmVyIDM0NSAnZ2xyLXJlZ3Jlc3Npb24uYXQ6MTQwNScgXAorICAiTGVha2VkIHNlbWFudGljIHZhbHVlcyB3aGVuIHJlcG9ydGluZyBhbWJpZ3VpdHkiICIiIDIyCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMzQ1LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKIAogCiBjYXQgPmdsci1yZWdyMTUueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKIAogJWdsci1wYXJzZXIKQEAgLTY2NzY2LDcgKzE3NzExMCw3IEBACiAKICV7CiAjIGluY2x1ZGUgPHN0ZGxpYi5oPgotICBzdGF0aWMgdm9pZCB5eWVycm9yIChjaGFyIGNvbnN0ICopOworICBzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKICAgc3RhdGljIGludCB5eWxleCAodm9pZCk7CiAgIHN0YXRpYyBpbnQgcGFyZW50X3Joc19iZWZvcmVfdmFsdWUgPSAwOwogIyBkZWZpbmUgVVNFKHZhbCkKQEAgLTY2ODA1LDE3ICsxNzcxNDksMjUgQEAKIGFtYmlndWl0eTI6IDsKIAogJSUKLQotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKGNoYXIgY29uc3QgKm1zZykKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKIHsKICAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7CiB9Ci0KLXN0YXRpYyBpbnQKLXl5bGV4ICh2b2lkKQorI2luY2x1ZGUgPGFzc2VydC5oPgorc3RhdGljCitpbnQgeXlsZXggKHZvaWQpCiB7Ci0gIHJldHVybiAwOworICBzdGF0aWMgY2hhciBjb25zdCBpbnB1dFtdID0gIiI7CisgIHN0YXRpYyBzaXplX3QgdG9rbnVtID0gMDsKKyAgaW50IHJlczsKKyAgOworICBhc3NlcnQgKHRva251bSA8IHNpemVvZiBpbnB1dCAvIHNpemVvZiBpbnB1dFswXSk7CisgIHJlcyA9IGlucHV0W3Rva251bSsrXTsKKyAgOworICByZXR1cm4gcmVzOwogfQogCiBpbnQKQEAgLTY2ODMzLDExMCArMTc3MTg1LDE3NSBAQAogCiAKIAotJGF0X3RyYWNlb2ZmCi1lY2hvICJnbHItcmVncmVzc2lvbi5hdDoxNTA1OiBiaXNvbiAtbyBnbHItcmVncjE1LmMgZ2xyLXJlZ3IxNS55IgotZWNobyBnbHItcmVncmVzc2lvbi5hdDoxNTA1ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyBiaXNvbiAtbyBnbHItcmVncjE1LmMgZ2xyLXJlZ3IxNS55ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gPj4kYXRfc3RkZXJyOyBlY2hvICJnbHItcmVncjE1Lnk6IGNvbmZsaWN0czogMiByZWR1Y2UvcmVkdWNlCi0iIHwgJGF0X2RpZmYgLSAkYXRfc3RkZXJyIHx8IGF0X2ZhaWxlZD06Ci0kYXRfZGlmZiAkYXRfZGV2bnVsbCAkYXRfc3Rkb3V0IHx8IGF0X2ZhaWxlZD06Ci1jYXNlICRhdF9zdGF0dXMgaW4KLSAgIDc3KSBlY2hvIDc3ID4gJGF0X3N0YXR1c19maWxlCi0gICAgICAgICAgICBleGl0IDc3OzsKLSAgIDApIDs7Ci0gICAqKSBlY2hvICJnbHItcmVncmVzc2lvbi5hdDoxNTA1OiBleGl0IGNvZGUgd2FzICRhdF9zdGF0dXMsIGV4cGVjdGVkIDAiCi0gICAgICBhdF9mYWlsZWQ9Ojs7Ci1lc2FjCi1pZiAkYXRfZmFpbGVkOyB0aGVuCiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQoraWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxNDcxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gZ2xyLXJlZ3IxNS5jIGdsci1yZWdyMTUueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgImdsci1yZWdyZXNzaW9uLmF0OjE0NzEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gZ2xyLXJlZ3IxNS5jIGdsci1yZWdyMTUueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTQ3MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE0NzE6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGdsci1yZWdyMTUuYyBnbHItcmVncjE1LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZ2xyLXJlZ3IxNS5jIGdsci1yZWdyMTUueSIgImdsci1yZWdyZXNzaW9uLmF0OjE0NzEiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gZ2xyLXJlZ3IxNS5jIGdsci1yZWdyMTUueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTQ3MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxNDcxOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTQ3MSIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxNDcxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTQ3MTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImdsci1yZWdyZXNzaW9uLmF0OjE0NzEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTQ3MSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi0kYXRfdHJhY2VvbgotCi0kYXRfdHJhY2VvZmYKLWVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjE1MDY6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gZ2xyLXJlZ3IxNSBnbHItcmVncjE1LmMgXCRMSUJTIgotZWNobyBnbHItcmVncmVzc2lvbi5hdDoxNTA2ID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gZ2xyLXJlZ3IxNSBnbHItcmVncjE1LmMgJExJQlMgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyBzdGRlcnI6OyBjYXQgJGF0X3N0ZGVycgotZWNobyBzdGRvdXQ6OyBjYXQgJGF0X3N0ZG91dAotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTUwNjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgotCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKLWZpCi0KLSRhdF90cmFjZW9uCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTQ3MTogYmlzb24gLW8gZ2xyLXJlZ3IxNS5jIGdsci1yZWdyMTUueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgImdsci1yZWdyZXNzaW9uLmF0OjE0NzEiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gZ2xyLXJlZ3IxNS5jIGdsci1yZWdyMTUueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImdsci1yZWdyMTUueTogY29uZmxpY3RzOiAyIHJlZHVjZS9yZWR1Y2UKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE0NzEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTUxMDogLi9nbHItcmVncjE1IgotZWNobyBnbHItcmVncmVzc2lvbi5hdDoxNTEwID4kYXRfY2hlY2tfbGluZV9maWxlCi0oICRhdF90cmFjZW9uOyAuL2dsci1yZWdyMTUgKSA+JGF0X3N0ZG91dCAyPiRhdF9zdGRlcjEKLWF0X3N0YXR1cz0kPwotZ3JlcCAnXiAqKycgJGF0X3N0ZGVyMSA+JjIKLWdyZXAgLXYgJ14gKisnICRhdF9zdGRlcjEgPiRhdF9zdGRlcnIKLWF0X2ZhaWxlZD1mYWxzZQotZWNobyA+PiRhdF9zdGRlcnI7IGVjaG8gInN5bnRheCBpcyBhbWJpZ3VvdXMKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjE1MTA6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxNDc0OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTQ3NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTQ3NCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxNDc0OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGdsci1yZWdyMTUgZ2xyLXJlZ3IxNS5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGdsci1yZWdyMTUgZ2xyLXJlZ3IxNS5jICRMSUJTIiAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTQ3NCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gZ2xyLXJlZ3IxNSBnbHItcmVncjE1LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE0NzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE0NzY6ICBcJFBSRVBBUlNFUiAuL2dsci1yZWdyMTUiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vZ2xyLXJlZ3IxNSIgImdsci1yZWdyZXNzaW9uLmF0OjE0NzYiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9nbHItcmVncjE1CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxNDc2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICAxNTcgKSAjIDE1Ny4gZ2xyLXJlZ3Jlc3Npb24uYXQ6MTUxOTogTGVha2VkIGxvb2thaGVhZCBhZnRlciBub25kZXRlcm1pbmlzdGljIHBhcnNlIHN5bnRheCBlcnJvcgotICAgIGF0X3NldHVwX2xpbmU9J2dsci1yZWdyZXNzaW9uLmF0OjE1MTknCi0gICAgYXRfZGVzYz0nTGVha2VkIGxvb2thaGVhZCBhZnRlciBub25kZXRlcm1pbmlzdGljIHBhcnNlIHN5bnRheCBlcnJvcicKLSAgICAkYXRfcXVpZXQgJEVDSE9fTiAiMTU3OiBMZWFrZWQgbG9va2FoZWFkIGFmdGVyIG5vbmRldGVybWluaXN0aWMgcGFyc2Ugc3ludGF4IGVycm9yJEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjE1Ny4gZ2xyLXJlZ3Jlc3Npb24uYXQ6MTUxOTogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE0NzY6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTQ3NiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBpcyBhbWJpZ3VvdXMKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE0NzYiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8zNDUKKyNBVF9TVEFSVF8zNDYKK2F0X2ZuX2dyb3VwX2Jhbm5lciAzNDYgJ2dsci1yZWdyZXNzaW9uLmF0OjE0ODcnIFwKKyAgIkxlYWtlZCBsb29rYWhlYWQgYWZ0ZXIgbm9uZGV0ZXJtaW5pc3RpYyBwYXJzZSBzeW50YXggZXJyb3IiICIiIDIyCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMzQ2LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKwogCiBjYXQgPmdsci1yZWdyMTYueSA8PCdfQVRFT0YnCi0lewotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gIC8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLwotIyB1bmRlZiBtYWxsb2MKLSMgdW5kZWYgbWVtY21wCi0jIHVuZGVmIHJlYWxsb2MKLSNlbmRpZgotJX0KKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CiAKIAogJWdsci1wYXJzZXIKQEAgLTY2OTQ0LDcgKzE3NzM2MSw4IEBACiAKICV7CiAjIGluY2x1ZGUgPHN0ZGxpYi5oPgotICBzdGF0aWMgdm9pZCB5eWVycm9yIChjaGFyIGNvbnN0ICopOworIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAgc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CiAgIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOwogICBzdGF0aWMgaW50IGxvb2thaGVhZF92YWx1ZSA9IDA7CiAjIGRlZmluZSBVU0UodmFsKQpAQCAtNjY5NTgsMTkgKzE3NzM3NiwyNiBAQAogCiAlJQogCi1zdGF0aWMgdm9pZAoteXllcnJvciAoY2hhciBjb25zdCAqbXNnKQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQogewogICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKIH0KLQotc3RhdGljIGludAoteXlsZXggKHZvaWQpCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitzdGF0aWMKK2ludCB5eWxleCAodm9pZCkKIHsKLSAgc3RhdGljIGNoYXIgY29uc3QgKmlucHV0ID0gImFiIjsKLSAgaWYgKCppbnB1dCA9PSAnYicpCisgIHN0YXRpYyBjaGFyIGNvbnN0IGlucHV0W10gPSAiYWIiOworICBzdGF0aWMgc2l6ZV90IHRva251bSA9IDA7CisgIGludCByZXM7CisgIDsKKyAgYXNzZXJ0ICh0b2tudW0gPCBzaXplb2YgaW5wdXQgLyBzaXplb2YgaW5wdXRbMF0pOworICByZXMgPSBpbnB1dFt0b2tudW0rK107CisgIGlmIChyZXMgPT0gJ2InKQogICAgIGxvb2thaGVhZF92YWx1ZSA9IDE7Ci0gIHJldHVybiAqaW5wdXQrKzsKKyAgcmV0dXJuIHJlczsKIH0KIAogaW50CkBAIC02Njk4OCwxMzEgKzE3NzQxMywxOTAgQEAKIAogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTU3MTogYmlzb24gLW8gZ2xyLXJlZ3IxNi5jIGdsci1yZWdyMTYueSIKLWVjaG8gZ2xyLXJlZ3Jlc3Npb24uYXQ6MTU3MSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gZ2xyLXJlZ3IxNi5jIGdsci1yZWdyMTYueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvID4+JGF0X3N0ZGVycjsgZWNobyAiZ2xyLXJlZ3IxNi55OiBjb25mbGljdHM6IDEgcmVkdWNlL3JlZHVjZQotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTU3MTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTUzMTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGdsci1yZWdyMTYuYyBnbHItcmVncjE2LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJnbHItcmVncmVzc2lvbi5hdDoxNTMxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGdsci1yZWdyMTYuYyBnbHItcmVncjE2LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE1MzEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxNTMxOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBnbHItcmVncjE2LmMgZ2xyLXJlZ3IxNi55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGdsci1yZWdyMTYuYyBnbHItcmVncjE2LnkiICJnbHItcmVncmVzc2lvbi5hdDoxNTMxIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGdsci1yZWdyMTYuYyBnbHItcmVncjE2LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE1MzEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTUzMTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImdsci1yZWdyZXNzaW9uLmF0OjE1MzEiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTUzMSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE1MzE6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJnbHItcmVncmVzc2lvbi5hdDoxNTMxIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE1MzEiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKLQotJGF0X3RyYWNlb24KLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJnbHItcmVncmVzc2lvbi5hdDoxNTcyOiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGdsci1yZWdyMTYgZ2xyLXJlZ3IxNi5jIFwkTElCUyIKLWVjaG8gZ2xyLXJlZ3Jlc3Npb24uYXQ6MTU3MiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGdsci1yZWdyMTYgZ2xyLXJlZ3IxNi5jICRMSUJTICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjE1NzI6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE1MzE6IGJpc29uIC1vIGdsci1yZWdyMTYuYyBnbHItcmVncjE2LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJnbHItcmVncmVzc2lvbi5hdDoxNTMxIgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGdsci1yZWdyMTYuYyBnbHItcmVncjE2LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJnbHItcmVncjE2Lnk6IGNvbmZsaWN0czogMSByZWR1Y2UvcmVkdWNlCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxNTMxIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjE1NzY6IC4vZ2xyLXJlZ3IxNiIKLWVjaG8gZ2xyLXJlZ3Jlc3Npb24uYXQ6MTU3NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgLi9nbHItcmVncjE2ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gPj4kYXRfc3RkZXJyOyBlY2hvICJzeW50YXggZXJyb3IKLSIgfCAkYXRfZGlmZiAtICRhdF9zdGRlcnIgfHwgYXRfZmFpbGVkPToKLSRhdF9kaWZmICRhdF9kZXZudWxsICRhdF9zdGRvdXQgfHwgYXRfZmFpbGVkPToKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjE1NzY6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxNTM0OiBcJEJJU09OX0NfV09SS1MiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRCSVNPTl9DX1dPUktTIiAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTUzNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTUzNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgZWNobyAxID4gJGF0X3N0YXR1c19maWxlCi0gIGV4aXQgMQotZmkKLQotJGF0X3RyYWNlb24KK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxNTM0OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGdsci1yZWdyMTYgZ2xyLXJlZ3IxNi5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGdsci1yZWdyMTYgZ2xyLXJlZ3IxNi5jICRMSUJTIiAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTUzNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gZ2xyLXJlZ3IxNiBnbHItcmVncjE2LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE1MzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCiAKLSAgICAgICRhdF90cmFjZW9mZgotICAgICAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiRhdF90aW1lc19maWxlCi0gICAgKSA1PiYxIDI+JjEgfCBldmFsICRhdF90ZWVfcGlwZQotICAgIGF0X3N0YXR1cz1gY2F0ICRhdF9zdGF0dXNfZmlsZWAKLSAgICA7OworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE1MzY6ICBcJFBSRVBBUlNFUiAuL2dsci1yZWdyMTYiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiAkUFJFUEFSU0VSIC4vZ2xyLXJlZ3IxNiIgImdsci1yZWdyZXNzaW9uLmF0OjE1MzYiCisoICRhdF9jaGVja190cmFjZTsgICRQUkVQQVJTRVIgLi9nbHItcmVncjE2CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxNTM2IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICAxNTggKSAjIDE1OC4gZ2xyLXJlZ3Jlc3Npb24uYXQ6MTU4NTogVW5pbml0aWFsaXplZCBsb2NhdGlvbiB3aGVuIHJlcG9ydGluZyBhbWJpZ3VpdHkKLSAgICBhdF9zZXR1cF9saW5lPSdnbHItcmVncmVzc2lvbi5hdDoxNTg1JwotICAgIGF0X2Rlc2M9J1VuaW5pdGlhbGl6ZWQgbG9jYXRpb24gd2hlbiByZXBvcnRpbmcgYW1iaWd1aXR5JwotICAgICRhdF9xdWlldCAkRUNIT19OICIxNTg6IFVuaW5pdGlhbGl6ZWQgbG9jYXRpb24gd2hlbiByZXBvcnRpbmcgYW1iaWd1aXR5JEVDSE9fQyIKLSAgICBhdF94ZmFpbD1ubwotICAgICgKLSAgICAgIGVjaG8gIjE1OC4gZ2xyLXJlZ3Jlc3Npb24uYXQ6MTU4NTogdGVzdGluZyAuLi4iCi0gICAgICAkYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE1MzY6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTUzNiIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gInN5bnRheCBlcnJvcgorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTUzNiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKworCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSA1PiYxIDI+JjEgNz4mLSB8IGV2YWwgJGF0X3RlZV9waXBlCityZWFkIGF0X3N0YXR1cyA8IiRhdF9zdGF0dXNfZmlsZSIKKyNBVF9TVE9QXzM0NgorI0FUX1NUQVJUXzM0NworYXRfZm5fZ3JvdXBfYmFubmVyIDM0NyAnZ2xyLXJlZ3Jlc3Npb24uYXQ6MTU0NycgXAorICAiVW5pbml0aWFsaXplZCBsb2NhdGlvbiB3aGVuIHJlcG9ydGluZyBhbWJpZ3VpdHkiICIiIDIyCithdF94ZmFpbD1ubworKAorICAkYXNfZWNobyAiMzQ3LiAkYXRfc2V0dXBfbGluZTogdGVzdGluZyAkYXRfZGVzYyAuLi4iCisgICRhdF90cmFjZW9uCisKKworCiAKIGNhdCA+Z2xyLXJlZ3IxNy55IDw8J19BVEVPRicKLSV7Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSAgLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCi0jIHVuZGVmIG1hbGxvYwotIyB1bmRlZiBtZW1jbXAKLSMgdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0lfQorJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAogCiAlZ2xyLXBhcnNlcgogJWxvY2F0aW9ucwotJXB1cmUtcGFyc2VyCislZGVmaW5lIGFwaS5wdXJlCiAlZXJyb3ItdmVyYm9zZQogCiAldW5pb24geyBpbnQgZHVtbXk7IH0KIAogJXsKLSAgc3RhdGljIHZvaWQgeXllcnJvciAoWVlMVFlQRSAqLCBjaGFyIGNvbnN0ICopOwotICBzdGF0aWMgaW50IHl5bGV4IChZWVNUWVBFICosIFlZTFRZUEUgKik7CisgIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKFlZTFRZUEUgY29uc3QgKiBjb25zdCBsbG9jcCwgIGNvbnN0IGNoYXIgKm1zZyk7CisgIHN0YXRpYyBpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCk7CiAlfQogCi0laW5pdGlhbC1hY3Rpb24gewotICBAJC5maXJzdF9saW5lID0gMTsKLSAgQCQuZmlyc3RfY29sdW1uID0gMTsKLSAgQCQubGFzdF9saW5lID0gMTsKLSAgQCQubGFzdF9jb2x1bW4gPSAxOwotfQotCiAlJQogCiAvKiBUZXN0cyB0aGUgY2FzZSBvZiBhbiBlbXB0eSBSSFMgdGhhdCBoYXMgaW5oZXJpdGVkIHRoZSBsb2NhdGlvbiBvZiB0aGUKQEAgLTY3MTMzLDI0ICsxNzc2MTcsMjggQEAKIGVtcHR5MjogOwogCiAlJQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KIAotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKFlZTFRZUEUgKmxvY3AsIGNoYXIgY29uc3QgKm1zZykKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoWVlMVFlQRSBjb25zdCAqIGNvbnN0IGxsb2NwLCAgY29uc3QgY2hhciAqbXNnKQogewotICBmcHJpbnRmIChzdGRlcnIsICJFcnJvciBhdCAlZC4lZC0lZC4lZDogJXMuXG4iLCBsb2NwLT5maXJzdF9saW5lLAotCSAgIGxvY3AtPmZpcnN0X2NvbHVtbiwgbG9jcC0+bGFzdF9saW5lLCBsb2NwLT5sYXN0X2NvbHVtbiwgbXNnKTsKKyAgWVlfTE9DQVRJT05fUFJJTlQgKHN0ZGVyciwgKCpsbG9jcCkpOworICBmcHJpbnRmIChzdGRlcnIsICI6ICIpOworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKIH0KLQogc3RhdGljIGludAogeXlsZXggKFlZU1RZUEUgKmx2YWxwLCBZWUxUWVBFICpsbG9jcCkKIHsKICAgc3RhdGljIGNoYXIgY29uc3QgaW5wdXRbXSA9ICJhYiI7Ci0gIHN0YXRpYyBjaGFyIGNvbnN0ICppbnB1dHAgPSBpbnB1dDsKKyAgc3RhdGljIHNpemVfdCB0b2tudW07CisgIGFzc2VydCAodG9rbnVtIDwgc2l6ZW9mIGlucHV0KTsKICAgbHZhbHAtPmR1bW15ID0gMDsKICAgbGxvY3AtPmZpcnN0X2xpbmUgPSBsbG9jcC0+bGFzdF9saW5lID0gMjsKLSAgbGxvY3AtPmZpcnN0X2NvbHVtbiA9IGlucHV0cCAtIGlucHV0ICsgMTsKKyAgbGxvY3AtPmZpcnN0X2NvbHVtbiA9IHRva251bSArIDE7CiAgIGxsb2NwLT5sYXN0X2NvbHVtbiA9IGxsb2NwLT5maXJzdF9jb2x1bW4gKyAxOwotICByZXR1cm4gKmlucHV0cCsrOworICByZXR1cm4gaW5wdXRbdG9rbnVtKytdOwogfQogCiBpbnQKQEAgLTY3MTYyLDM3MCArMTc3NjUwLDEyMTUgQEAKIAogCiAKLSRhdF90cmFjZW9mZgotZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTY1NjogYmlzb24gLW8gZ2xyLXJlZ3IxNy5jIGdsci1yZWdyMTcueSIKLWVjaG8gZ2xyLXJlZ3Jlc3Npb24uYXQ6MTY1NiA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgYmlzb24gLW8gZ2xyLXJlZ3IxNy5jIGdsci1yZWdyMTcueSApID4kYXRfc3Rkb3V0IDI+JGF0X3N0ZGVyMQotYXRfc3RhdHVzPSQ/Ci1ncmVwICdeICorJyAkYXRfc3RkZXIxID4mMgotZ3JlcCAtdiAnXiAqKycgJGF0X3N0ZGVyMSA+JGF0X3N0ZGVycgotYXRfZmFpbGVkPWZhbHNlCi1lY2hvID4+JGF0X3N0ZGVycjsgZWNobyAiZ2xyLXJlZ3IxNy55OiBjb25mbGljdHM6IDMgcmVkdWNlL3JlZHVjZQotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTY1NjogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgogCi0gIGVjaG8gMSA+ICRhdF9zdGF0dXNfZmlsZQotICBleGl0IDEKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTYwOTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGdsci1yZWdyMTcuYyBnbHItcmVncjE3LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJnbHItcmVncmVzc2lvbi5hdDoxNjA5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGdsci1yZWdyMTcuYyBnbHItcmVncjE3LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE2MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxNjA5OiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBnbHItcmVncjE3LmMgZ2xyLXJlZ3IxNy55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGdsci1yZWdyMTcuYyBnbHItcmVncjE3LnkiICJnbHItcmVncmVzc2lvbi5hdDoxNjA5IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGdsci1yZWdyMTcuYyBnbHItcmVncjE3LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE2MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTYwOTogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImdsci1yZWdyZXNzaW9uLmF0OjE2MDkiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMnRleHQueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTYwOSIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE2MDk6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJnbHItcmVncmVzc2lvbi5hdDoxNjA5IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJkb3QueHNsIFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE2MDkiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcwogZmkKLQotJGF0X3RyYWNlb24KLQotJGF0X3RyYWNlb2ZmCi1lY2hvICJnbHItcmVncmVzc2lvbi5hdDoxNjU3OiBcJENDIFwkQ0ZMQUdTIFwkQ1BQRkxBR1MgXCRMREZMQUdTIC1vIGdsci1yZWdyMTcgZ2xyLXJlZ3IxNy5jIFwkTElCUyIKLWVjaG8gZ2xyLXJlZ3Jlc3Npb24uYXQ6MTY1NyA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGdsci1yZWdyMTcgZ2xyLXJlZ3IxNy5jICRMSUJTICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gc3RkZXJyOjsgY2F0ICRhdF9zdGRlcnIKLWVjaG8gc3Rkb3V0OjsgY2F0ICRhdF9zdGRvdXQKLWNhc2UgJGF0X3N0YXR1cyBpbgotICAgNzcpIGVjaG8gNzcgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgICAgICAgICAgIGV4aXQgNzc7OwotICAgMCkgOzsKLSAgICopIGVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjE2NTc6IGV4aXQgY29kZSB3YXMgJGF0X3N0YXR1cywgZXhwZWN0ZWQgMCIKLSAgICAgIGF0X2ZhaWxlZD06OzsKLWVzYWMKLWlmICRhdF9mYWlsZWQ7IHRoZW4KLQotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE2MDk6IGJpc29uIC1vIGdsci1yZWdyMTcuYyBnbHItcmVncjE3LnkiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJnbHItcmVncmVzc2lvbi5hdDoxNjA5IgorKCAkYXRfY2hlY2tfdHJhY2U7IGJpc29uIC1vIGdsci1yZWdyMTcuYyBnbHItcmVncjE3LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJnbHItcmVncjE3Lnk6IGNvbmZsaWN0czogMyByZWR1Y2UvcmVkdWNlCisiIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxNjA5IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCi0kYXRfdHJhY2VvZmYKLWVjaG8gImdsci1yZWdyZXNzaW9uLmF0OjE2NjE6IC4vZ2xyLXJlZ3IxNyIKLWVjaG8gZ2xyLXJlZ3Jlc3Npb24uYXQ6MTY2MSA+JGF0X2NoZWNrX2xpbmVfZmlsZQotKCAkYXRfdHJhY2VvbjsgLi9nbHItcmVncjE3ICkgPiRhdF9zdGRvdXQgMj4kYXRfc3RkZXIxCi1hdF9zdGF0dXM9JD8KLWdyZXAgJ14gKisnICRhdF9zdGRlcjEgPiYyCi1ncmVwIC12ICdeICorJyAkYXRfc3RkZXIxID4kYXRfc3RkZXJyCi1hdF9mYWlsZWQ9ZmFsc2UKLWVjaG8gPj4kYXRfc3RkZXJyOyBlY2hvICJFcnJvciBhdCAxLjEtMi4zOiBzeW50YXggaXMgYW1iaWd1b3VzLgotIiB8ICRhdF9kaWZmIC0gJGF0X3N0ZGVyciB8fCBhdF9mYWlsZWQ9OgotJGF0X2RpZmYgJGF0X2Rldm51bGwgJGF0X3N0ZG91dCB8fCBhdF9mYWlsZWQ9OgotY2FzZSAkYXRfc3RhdHVzIGluCi0gICA3NykgZWNobyA3NyA+ICRhdF9zdGF0dXNfZmlsZQotICAgICAgICAgICAgZXhpdCA3Nzs7Ci0gICAwKSA7OwotICAgKikgZWNobyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTY2MTogZXhpdCBjb2RlIHdhcyAkYXRfc3RhdHVzLCBleHBlY3RlZCAwIgotICAgICAgYXRfZmFpbGVkPTo7OwotZXNhYwotaWYgJGF0X2ZhaWxlZDsgdGhlbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE2MTI6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJnbHItcmVncmVzc2lvbi5hdDoxNjEyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxNjEyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvIDEgPiAkYXRfc3RhdHVzX2ZpbGUKLSAgZXhpdCAxCi1maQotCi0kYXRfdHJhY2VvbgoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE2MTI6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gZ2xyLXJlZ3IxNyBnbHItcmVncjE3LmMgXCRMSUJTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgLW8gZ2xyLXJlZ3IxNyBnbHItcmVncjE3LmMgJExJQlMiICJnbHItcmVncmVzc2lvbi5hdDoxNjEyIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBnbHItcmVncjE3IGdsci1yZWdyMTcuYyAkTElCUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTYxMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotICAgICAgJGF0X3RyYWNlb2ZmCi0gICAgICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+JGF0X3RpbWVzX2ZpbGUKLSAgICApIDU+JjEgMj4mMSB8IGV2YWwgJGF0X3RlZV9waXBlCi0gICAgYXRfc3RhdHVzPWBjYXQgJGF0X3N0YXR1c19maWxlYAotICAgIDs7Cit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTYxNDogIFwkUFJFUEFSU0VSIC4vZ2xyLXJlZ3IxNyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9nbHItcmVncjE3IiAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTYxNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2dsci1yZWdyMTcKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE2MTQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTYxNDogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJnbHItcmVncmVzc2lvbi5hdDoxNjE0IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvID4+IiRhdF9zdGRlcnIiOyAkYXNfZWNobyAiMS4xLTIuMjogc3ludGF4IGlzIGFtYmlndW91cworIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTYxNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKIAotICAqICkKLSAgICBlY2hvICIkYXNfbWU6IG5vIHN1Y2ggdGVzdCBncm91cDogJGF0X2dyb3VwIiA+JjIKLSAgICBjb250aW51ZQotICAgIDs7Ci0gIGVzYWMKIAotICAjIEJlIHN1cmUgdG8gY29tZSBiYWNrIHRvIHRoZSBzdWl0ZSBkaXJlY3RvcnksIGluIHBhcnRpY3VsYXIKLSAgIyBzaW5jZSBiZWxvdyB3ZSBtaWdodCBgcm0nIHRoZSBncm91cCBkaXJlY3Rvcnkgd2UgYXJlIGluIGN1cnJlbnRseS4KLSAgY2QgJGF0X3N1aXRlX2RpcgorICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8zNDcKKyNBVF9TVEFSVF8zNDgKK2F0X2ZuX2dyb3VwX2Jhbm5lciAzNDggJ2dsci1yZWdyZXNzaW9uLmF0OjE2MjUnIFwKKyAgIk1pc3NlZCAlbWVyZ2UgdHlwZSB3YXJuaW5ncyB3aGVuIExIUyB0eXBlIGlzIGRlY2xhcmVkIGxhdGVyIiAiIiAyMgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjM0OC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgogCi0gIGNhc2UgJGF0X2dyb3VwIGluCi0gICAgYmFubmVyLSopIDs7Ci0gICAgKikKLSAgICAgIGlmIHRlc3QgISAtZiAkYXRfY2hlY2tfbGluZV9maWxlOyB0aGVuCi0Jc2VkICJzL14gKi8kYXNfbWU6IHdhcm5pbmc6IC8iIDw8X0FURU9GCi0JQSBmYWlsdXJlIGhhcHBlbmVkIGluIGEgdGVzdCBncm91cCBiZWZvcmUgYW55IHRlc3QgY291bGQgYmUKLQlydW4uIFRoaXMgbWVhbnMgdGhhdCB0ZXN0IHN1aXRlIGlzIGltcHJvcGVybHkgZGVzaWduZWQuICBQbGVhc2UKLQlyZXBvcnQgdGhpcyBmYWlsdXJlIHRvIDxidWctYmlzb25AZ251Lm9yZz4uCi1fQVRFT0YKLSAgICAJZWNobyAiJGF0X3NldHVwX2xpbmUiID4kYXRfY2hlY2tfbGluZV9maWxlCi0gICAgICBmaQotICAgICAgYXRfZ3JvdXBfY291bnQ9YGV4cHIgMSArICRhdF9ncm91cF9jb3VudGAKLSAgICAgICRhdF92ZXJib3NlICRFQ0hPX04gIiRhdF9ncm91cC4gJGF0X3NldHVwX2xpbmU6ICRFQ0hPX0MiCi0gICAgICBlY2hvICRFQ0hPX04gIiRhdF9ncm91cC4gJGF0X3NldHVwX2xpbmU6ICRFQ0hPX0MiID4+ICRhdF9ncm91cF9sb2cKLSAgICAgIGNhc2UgJGF0X3hmYWlsOiRhdF9zdGF0dXMgaW4KLQl5ZXM6MCkKLQkgICAgYXRfbXNnPSJVTkVYUEVDVEVEIFBBU1MiCi0JICAgIGF0X3hwYXNzX2xpc3Q9IiRhdF94cGFzc19saXN0ICRhdF9ncm91cCIKLQkgICAgYXRfZXJyZXhpdD0kYXRfZXJyZXhpdF9wCi0JICAgIDs7Ci0Jbm86MCkKLQkgICAgYXRfbXNnPSJvayIKLQkgICAgYXRfcGFzc19saXN0PSIkYXRfcGFzc19saXN0ICRhdF9ncm91cCIKLQkgICAgYXRfZXJyZXhpdD1mYWxzZQotCSAgICA7OwotCSo6NzcpCi0JICAgIGF0X21zZz0ic2tpcHBlZCAoYGNhdCAkYXRfY2hlY2tfbGluZV9maWxlYCkiCi0JICAgIGF0X3NraXBfbGlzdD0iJGF0X3NraXBfbGlzdCAkYXRfZ3JvdXAiCi0JICAgIGF0X2VycmV4aXQ9ZmFsc2UKLQkgICAgOzsKLQl5ZXM6KikKLQkgICAgYXRfbXNnPSJleHBlY3RlZCBmYWlsdXJlIChgY2F0ICRhdF9jaGVja19saW5lX2ZpbGVgKSIKLQkgICAgYXRfeGZhaWxfbGlzdD0iJGF0X3hmYWlsX2xpc3QgJGF0X2dyb3VwIgotCSAgICBhdF9lcnJleGl0PWZhbHNlCi0JICAgIDs7Ci0Jbm86KikKLQkgICAgYXRfbXNnPSJGQUlMRUQgKGBjYXQgJGF0X2NoZWNrX2xpbmVfZmlsZWApIgotCSAgICBhdF9mYWlsX2xpc3Q9IiRhdF9mYWlsX2xpc3QgJGF0X2dyb3VwIgotCSAgICBhdF9lcnJleGl0PSRhdF9lcnJleGl0X3AKLQkgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIGVjaG8gJGF0X21zZwotICAgICAgYXRfbG9nX21zZz0iJGF0X2dyb3VwLiAkYXRfZGVzYyAoJGF0X3NldHVwX2xpbmUpOiAkYXRfbXNnIgotICAgICAgY2FzZSAkYXRfc3RhdHVzIGluCi0JMHw3NykKLQkgICMgJGF0X3RpbWVzX2ZpbGUgaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIGdyb3VwIHN1Y2NlZWRlZC4KLQkgICMgV2UncmUgbm90IGluY2x1ZGluZyB0aGUgZ3JvdXAgbG9nLCBzbyB0aGUgc3VjY2VzcyBtZXNzYWdlCi0JICAjIGlzIHdyaXR0ZW4gaW4gdGhlIGdsb2JhbCBsb2cgc2VwYXJhdGVseS4gIEJ1dCB3ZSBhbHNvCi0JICAjIHdyaXRlIHRvIHRoZSBncm91cCBsb2cgaW4gY2FzZSB0aGV5J3JlIHVzaW5nIC1kLgotCSAgaWYgdGVzdCAtZiAkYXRfdGltZXNfZmlsZTsgdGhlbgotCSAgICBhdF9sb2dfbXNnPSIkYXRfbG9nX21zZwkoYHNlZCAxZCAkYXRfdGltZXNfZmlsZWApIgotCSAgICBybSAtZiAkYXRfdGltZXNfZmlsZQotICAgICAgICAgIGZpCi0JICBlY2hvICIkYXRfbG9nX21zZyIgPj4gJGF0X2dyb3VwX2xvZwotCSAgZWNobyAiJGF0X2xvZ19tc2ciID4mNQogCi0JICAjIENsZWFudXAgdGhlIGdyb3VwIGRpcmVjdG9yeSwgdW5sZXNzIHRoZSB1c2VyIHdhbnRzIHRoZSBmaWxlcy4KLQkgICRhdF9kZWJ1Z19wIHx8IHJtIC1yZiAkYXRfZ3JvdXBfZGlyCi0JICA7OwotCSopCi0JICAjIFVwb24gZmFpbHVyZSwgaW5jbHVkZSB0aGUgbG9nIGludG8gdGhlIHRlc3RzdWl0ZSdzIGdsb2JhbAotCSAgIyBsb2cuICBUaGUgZmFpbHVyZSBtZXNzYWdlIGlzIHdyaXR0ZW4gaW4gdGhlIGdyb3VwIGxvZy4gIEl0Ci0JICAjIGlzIGxhdGVyIGluY2x1ZGVkIGluIHRoZSBnbG9iYWwgbG9nLgotCSAgZWNobyAiJGF0X2xvZ19tc2ciID4+ICRhdF9ncm91cF9sb2cKIAotCSAgIyBVcG9uIGZhaWx1cmUsIGtlZXAgdGhlIGdyb3VwIGRpcmVjdG9yeSBmb3IgYXV0b3BzeSwgYW5kCi0JICAjIGNyZWF0ZSB0aGUgZGVidWdnaW5nIHNjcmlwdC4KLQkgIHsKLQkgICAgZWNobyAiIyEgL2Jpbi9zaCIKLQkgICAgZWNobyAndGVzdCAiJHtaU0hfVkVSU0lPTitzZXR9IiA9IHNldCAmJiBhbGlhcyAtZyAnXCcnJHsxKyIkQCJ9J1wnJz0nXCcnIiRAIidcJycnCi0JICAgIGVjaG8gImNkICRhdF9kaXIiCi0JICAgIGVjaG8gJ2V4ZWMgJHtDT05GSUdfU0hFTEwtJyIkU0hFTEwiJ30nICIkMCIgXAotCSAgICAgICAgICctdiAtZCcgIiRhdF9kZWJ1Z19hcmdzIiAiJGF0X2dyb3VwIiAnJHsxKyIkQCJ9JwotCSAgICBlY2hvICdleGl0IDEnCi0JICB9ID4kYXRfZ3JvdXBfZGlyL3J1bgotCSAgY2htb2QgK3ggJGF0X2dyb3VwX2Rpci9ydW4KLQkgICRhdF9lcnJleGl0ICYmIGJyZWFrCi0JICA7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgZXNhYwotZG9uZQorY2F0ID5nbHItcmVncjE4LnkgPDwnX0FURU9GJworJWNvZGUgdG9wIHsKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBmdW5jdGlvbnMgZm9yIHRoZXNlIHRlc3RzLiAqLworI3VuZGVmIG1hbGxvYworI3VuZGVmIG1lbWNtcAorI3VuZGVmIHJlYWxsb2MKK30KIAotIyBCYWNrIHRvIHRoZSB0b3AgZGlyZWN0b3J5LgotY2QgJGF0X2RpcgorJWdsci1wYXJzZXIKIAotIyBDb21wdXRlIHRoZSBkdXJhdGlvbiBvZiB0aGUgc3VpdGUuCi1hdF9zdG9wX2RhdGU9YGRhdGVgCi1hdF9zdG9wX3RpbWU9YChkYXRlICslcykgMj4vZGV2L251bGxgCi1lY2hvICIkYXNfbWU6IGVuZGluZyBhdDogJGF0X3N0b3BfZGF0ZSIgPiY1Ci1hdF9kdXJhdGlvbl9zPWAoZXhwciAkYXRfc3RvcF90aW1lIC0gJGF0X3N0YXJ0X3RpbWUpIDI+L2Rldi9udWxsYAotYXRfZHVyYXRpb25fbT1gKGV4cHIgJGF0X2R1cmF0aW9uX3MgLyA2MCkgMj4vZGV2L251bGxgCi1hdF9kdXJhdGlvbl9oPWAoZXhwciAkYXRfZHVyYXRpb25fbSAvIDYwKSAyPi9kZXYvbnVsbGAKLWF0X2R1cmF0aW9uX3M9YChleHByICRhdF9kdXJhdGlvbl9zICUgNjApIDI+L2Rldi9udWxsYAotYXRfZHVyYXRpb25fbT1gKGV4cHIgJGF0X2R1cmF0aW9uX20gJSA2MCkgMj4vZGV2L251bGxgCi1hdF9kdXJhdGlvbj0iJHthdF9kdXJhdGlvbl9ofWggJHthdF9kdXJhdGlvbl9tfW0gJHthdF9kdXJhdGlvbl9zfXMiCi1pZiB0ZXN0ICIkYXRfZHVyYXRpb24iICE9ICJoIG0gcyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiB0ZXN0IHN1aXRlIGR1cmF0aW9uOiAkYXRfZHVyYXRpb24iID4mNQotZmkKKyV7CisgICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAgc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CisgIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOworJX0KIAotIyBXcmFwIHVwIHRoZSB0ZXN0IHN1aXRlIHdpdGggc3VtbWFyeSBzdGF0aXN0aWNzLgotYXRfc2tpcF9jb3VudD1gc2V0IGR1bW15ICRhdF9za2lwX2xpc3Q7IHNoaWZ0OyBlY2hvICQjYAotYXRfZmFpbF9jb3VudD1gc2V0IGR1bW15ICRhdF9mYWlsX2xpc3Q7IHNoaWZ0OyBlY2hvICQjYAotYXRfeHBhc3NfY291bnQ9YHNldCBkdW1teSAkYXRfeHBhc3NfbGlzdDsgc2hpZnQ7IGVjaG8gJCNgCi1hdF94ZmFpbF9jb3VudD1gc2V0IGR1bW15ICRhdF94ZmFpbF9saXN0OyBzaGlmdDsgZWNobyAkI2AKKyV1bmlvbiB7CisgIGludCB0eXBlMTsKKyAgaW50IHR5cGUyOworICBpbnQgdHlwZTM7Cit9CiAKLWF0X3J1bl9jb3VudD1gZXhwciAkYXRfZ3JvdXBfY291bnQgLSAkYXRfc2tpcF9jb3VudGAKLWF0X3VuZXhwZWN0ZWRfY291bnQ9YGV4cHIgJGF0X3hwYXNzX2NvdW50ICsgJGF0X2ZhaWxfY291bnRgCi1hdF90b3RhbF9mYWlsX2NvdW50PWBleHByICRhdF94ZmFpbF9jb3VudCArICRhdF9mYWlsX2NvdW50YAorJSUKIAotZWNobwotY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLSAjIwotIyMgVGVzdCByZXN1bHRzLiAjIwotIyMgLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi1lY2hvCitzeW0xOiBzeW0yICVtZXJnZTxtZXJnZT4geyAkJCA9ICQxOyB9IDsKK3N5bTI6IHN5bTMgJW1lcmdlPG1lcmdlPiB7ICQkID0gJDE7IH0gOworc3ltMzogJW1lcmdlPG1lcmdlPiB7ICQkID0gMDsgfSA7CisKKyV0eXBlIDx0eXBlMT4gc3ltMTsKKyV0eXBlIDx0eXBlMj4gc3ltMjsKKyV0eXBlIDx0eXBlMz4gc3ltMzsKKworJSUKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKIHsKLSAgZWNobwotICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tICMjCi0jIyBUZXN0IHJlc3VsdHMuICMjCi0jIyAtLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgZWNobwotfSA+JjUKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitzdGF0aWMKK2ludCB5eWxleCAodm9pZCkKK3sKKyAgc3RhdGljIGNoYXIgY29uc3QgaW5wdXRbXSA9ICIiOworICBzdGF0aWMgc2l6ZV90IHRva251bSA9IDA7CisgIGludCByZXM7CisgIDsKKyAgYXNzZXJ0ICh0b2tudW0gPCBzaXplb2YgaW5wdXQgLyBzaXplb2YgaW5wdXRbMF0pOworICByZXMgPSBpbnB1dFt0b2tudW0rK107CisgIDsKKyAgcmV0dXJuIHJlczsKK30KK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0dXJuIHl5cGFyc2UgKCk7Cit9CitfQVRFT0YKIAotaWYgdGVzdCAkYXRfcnVuX2NvdW50ID0gMTsgdGhlbgotICBhdF9yZXN1bHQ9IjEgdGVzdCIKLSAgYXRfd2VyZT13YXMKLWVsc2UKLSAgYXRfcmVzdWx0PSIkYXRfcnVuX2NvdW50IHRlc3RzIgotICBhdF93ZXJlPXdlcmUKKworCisKKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE2NjQ6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gZ2xyLXJlZ3IxOC5jIGdsci1yZWdyMTgueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC1vIGdsci1yZWdyMTguYyBnbHItcmVncjE4LnkiICJnbHItcmVncmVzc2lvbi5hdDoxNjY0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLW8gZ2xyLXJlZ3IxOC5jIGdsci1yZWdyMTgueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImdsci1yZWdyMTgueToyNi4xOC0yNDogZXJyb3I6IHJlc3VsdCB0eXBlIGNsYXNoIG9uIG1lcmdlIGZ1bmN0aW9uICdtZXJnZSc6IDx0eXBlMj4gIT0gPHR5cGUxPgorZ2xyLXJlZ3IxOC55OjI1LjE4LTI0OiAgICAgcHJldmlvdXMgZGVjbGFyYXRpb24KK2dsci1yZWdyMTgueToyNy4xMy0xOTogZXJyb3I6IHJlc3VsdCB0eXBlIGNsYXNoIG9uIG1lcmdlIGZ1bmN0aW9uICdtZXJnZSc6IDx0eXBlMz4gIT0gPHR5cGUyPgorZ2xyLXJlZ3IxOC55OjI2LjE4LTI0OiAgICAgcHJldmlvdXMgZGVjbGFyYXRpb24KKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE2NjQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8zNDgKKyNBVF9TVEFSVF8zNDkKK2F0X2ZuX2dyb3VwX2Jhbm5lciAzNDkgJ2dsci1yZWdyZXNzaW9uLmF0OjE2NzgnIFwKKyAgIkFtYmlndWl0eSByZXBvcnRzIiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAyMgorYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjM0OS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKworJXsKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAgc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CisgIHN0YXRpYyBpbnQgeXlsZXggKHZvaWQpOworJX0KKworJWRlYnVnCislZ2xyLXBhcnNlcgorCislJQorc3RhcnQ6CisgICdhJyBiICdjJyBkCit8ICdhJyBiICdjJyBkCis7CitiOiAnYic7CitkOiAvKiBuYWRhLiAgKi87CislJQorI2luY2x1ZGUgPGFzc2VydC5oPgorc3RhdGljCitpbnQgeXlsZXggKHZvaWQpCit7CisgIHN0YXRpYyBjaGFyIGNvbnN0IGlucHV0W10gPSAiYWJjIjsKKyAgc3RhdGljIHNpemVfdCB0b2tudW0gPSAwOworICBpbnQgcmVzOworICA7CisgIGFzc2VydCAodG9rbnVtIDwgc2l6ZW9mIGlucHV0IC8gc2l6ZW9mIGlucHV0WzBdKTsKKyAgcmVzID0gaW5wdXRbdG9rbnVtKytdOworICA7CisgIHJldHVybiByZXM7Cit9CisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQoraW50CittYWluICh2b2lkKQoreworICB5eWRlYnVnID0gMTsKKyAgcmV0dXJuICEheXlwYXJzZSAoKTsKK30KK19BVEVPRgorCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE3MTI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFxcCisgICAgICAgICAgICAgICAgICAtLWdyYXBoPXhtbC10ZXN0cy90ZXN0LmRvdCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2FuIGVtYmVkZGVkIG5ld2xpbmUnICJnbHItcmVncmVzc2lvbi5hdDoxNzEyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTcxMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE3MTI6IFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiVkFMR1JJTkRfT1BUUz1cIiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiICJnbHItcmVncmVzc2lvbi5hdDoxNzEyIgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTcxMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxNzEyOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMnRleHQueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTcxMiIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxNzEyIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTcxMjogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJkb3QueHNsIFxcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgImdsci1yZWdyZXNzaW9uLmF0OjE3MTIiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTcxMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotaWYgJGF0X2VycmV4aXRfcCAmJiB0ZXN0ICRhdF91bmV4cGVjdGVkX2NvdW50ICE9IDA7IHRoZW4KLSAgaWYgdGVzdCAkYXRfeHBhc3NfY291bnQgPSAxOyB0aGVuCi0gICAgYXRfcmVzdWx0PSIkYXRfcmVzdWx0ICRhdF93ZXJlIHJ1biwgb25lIHBhc3NlZCIKLSAgZWxzZQotICAgIGF0X3Jlc3VsdD0iJGF0X3Jlc3VsdCAkYXRfd2VyZSBydW4sIG9uZSBmYWlsZWQiCi0gIGZpCi0gIGF0X3Jlc3VsdD0iJGF0X3Jlc3VsdCB1bmV4cGVjdGVkbHkgYW5kIGluaGliaXRlZCBzdWJzZXF1ZW50IHRlc3RzLiIKLWVsc2UKLSAgIyBEb24ndCB5b3UganVzdCBsb3ZlIGV4cG9uZW50aWFsIGV4cGxvc2lvbiBvZiB0aGUgbnVtYmVyIG9mIGNhc2VzPwotICBjYXNlICRhdF94cGFzc19jb3VudDokYXRfZmFpbF9jb3VudDokYXRfeGZhaWxfY291bnQgaW4KLSAgICAjIFNvIGZhciwgc28gZ29vZC4KLSAgICAwOjA6MCkgYXRfcmVzdWx0PSIkYXRfcmVzdWx0ICRhdF93ZXJlIHN1Y2Nlc3NmdWwuIiA7OwotICAgIDA6MDoqKSBhdF9yZXN1bHQ9IiRhdF9yZXN1bHQgYmVoYXZlZCBhcyBleHBlY3RlZC4iIDs7Cit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTcxMjogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTcxMiIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gPj4iJGF0X3N0ZGVyciI7ICRhc19lY2hvICJpbnB1dC55OiBjb25mbGljdHM6IDEgcmVkdWNlL3JlZHVjZQorIiB8IFwKKyAgJGF0X2RpZmYgLSAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTcxMiIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSAgICAjIFNvbWUgdW5leHBlY3RlZCBmYWlsdXJlcwotICAgIDA6KjowKSBhdF9yZXN1bHQ9IiRhdF9yZXN1bHQgJGF0X3dlcmUgcnVuLAotJGF0X2ZhaWxfY291bnQgZmFpbGVkIHVuZXhwZWN0ZWRseS4iIDs7CiAKLSAgICAjIFNvbWUgZmFpbHVyZXMsIGJvdGggZXhwZWN0ZWQgYW5kIHVuZXhwZWN0ZWQKLSAgICAwOio6MSkgYXRfcmVzdWx0PSIkYXRfcmVzdWx0ICRhdF93ZXJlIHJ1biwKLSRhdF90b3RhbF9mYWlsX2NvdW50IGZhaWxlZCAoJGF0X3hmYWlsX2NvdW50IGV4cGVjdGVkIGZhaWx1cmUpLiIgOzsKLSAgICAwOio6KikgYXRfcmVzdWx0PSIkYXRfcmVzdWx0ICRhdF93ZXJlIHJ1biwKLSRhdF90b3RhbF9mYWlsX2NvdW50IGZhaWxlZCAoJGF0X3hmYWlsX2NvdW50IGV4cGVjdGVkIGZhaWx1cmVzKS4iIDs7Cit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTcxNTogXCRCSVNPTl9DX1dPUktTIgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIkQklTT05fQ19XT1JLUyIgImdsci1yZWdyZXNzaW9uLmF0OjE3MTUiCisoICRhdF9jaGVja190cmFjZTsgJEJJU09OX0NfV09SS1MKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE3MTUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQogCi0gICAgIyBObyB1bmV4cGVjdGVkIGZhaWx1cmVzLCBidXQgc29tZSB4cGFzc2VzCi0gICAgKjowOiopIGF0X3Jlc3VsdD0iJGF0X3Jlc3VsdCAkYXRfd2VyZSBydW4sCi0kYXRfeHBhc3NfY291bnQgcGFzc2VkIHVuZXhwZWN0ZWRseS4iIDs7Cit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvZ2xyLXJlZ3Jlc3Npb24uYXQ6MTcxNTogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJnbHItcmVncmVzc2lvbi5hdDoxNzE1IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxNzE1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICAgICMgTm8gZXhwZWN0ZWQgZmFpbHVyZXMsIGJ1dCBmYWlsdXJlcyBhbmQgeHBhc3NlcwotICAgICo6MTowKSBhdF9yZXN1bHQ9IiRhdF9yZXN1bHQgJGF0X3dlcmUgcnVuLAotJGF0X3VuZXhwZWN0ZWRfY291bnQgZGlkIG5vdCBiZWhhdmUgYXMgZXhwZWN0ZWQgKCRhdF9mYWlsX2NvdW50IHVuZXhwZWN0ZWQgZmFpbHVyZSkuIiA7OwotICAgICo6KjowKSBhdF9yZXN1bHQ9IiRhdF9yZXN1bHQgJGF0X3dlcmUgcnVuLAotJGF0X3VuZXhwZWN0ZWRfY291bnQgZGlkIG5vdCBiZWhhdmUgYXMgZXhwZWN0ZWQgKCRhdF9mYWlsX2NvdW50IHVuZXhwZWN0ZWQgZmFpbHVyZXMpLiIgOzsKIAotICAgICMgQWxsIG9mIHRoZW0uCi0gICAgKjoqOjEpIGF0X3Jlc3VsdD0iJGF0X3Jlc3VsdCAkYXRfd2VyZSBydW4sCi0kYXRfeHBhc3NfY291bnQgcGFzc2VkIHVuZXhwZWN0ZWRseSwKLSRhdF90b3RhbF9mYWlsX2NvdW50IGZhaWxlZCAoJGF0X3hmYWlsX2NvdW50IGV4cGVjdGVkIGZhaWx1cmUpLiIgOzsKLSAgICAqOio6KikgYXRfcmVzdWx0PSIkYXRfcmVzdWx0ICRhdF93ZXJlIHJ1biwKLSRhdF94cGFzc19jb3VudCBwYXNzZWQgdW5leHBlY3RlZGx5LAotJGF0X3RvdGFsX2ZhaWxfY291bnQgZmFpbGVkICgkYXRfeGZhaWxfY291bnQgZXhwZWN0ZWQgZmFpbHVyZXMpLiIgOzsKLSAgZXNhYworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE3MTc6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTcxNyIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDEgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9nbHItcmVncmVzc2lvbi5hdDoxNzE3IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBpZiB0ZXN0ICRhdF9za2lwX2NvdW50ID0gMCAmJiB0ZXN0ICRhdF9ydW5fY291bnQgLWd0IDE7IHRoZW4KLSAgICBhdF9yZXN1bHQ9IkFsbCAkYXRfcmVzdWx0IgotICBmaQoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE3MTc6IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyIgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAiZ2xyLXJlZ3Jlc3Npb24uYXQ6MTcxNyIKKyggJGF0X2NoZWNrX3RyYWNlOyBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVycgorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gIlN0YXJ0aW5nIHBhcnNlCitFbnRlcmluZyBzdGF0ZSAwCitSZWFkaW5nIGEgdG9rZW46IE5leHQgdG9rZW4gaXMgdG9rZW4gJ2EnICgpCitTaGlmdGluZyB0b2tlbiAnYScgKCkKK0VudGVyaW5nIHN0YXRlIDEKK1JlYWRpbmcgYSB0b2tlbjogTmV4dCB0b2tlbiBpcyB0b2tlbiAnYicgKCkKK1NoaWZ0aW5nIHRva2VuICdiJyAoKQorRW50ZXJpbmcgc3RhdGUgMworUmVkdWNpbmcgc3RhY2sgMCBieSBydWxlIDMgKGxpbmUgMjUpOgorICAgXCQxID0gdG9rZW4gJ2InICgpCistPiBcJFwkID0gbnRlcm0gYiAoKQorRW50ZXJpbmcgc3RhdGUgNAorUmVhZGluZyBhIHRva2VuOiBOZXh0IHRva2VuIGlzIHRva2VuICdjJyAoKQorU2hpZnRpbmcgdG9rZW4gJ2MnICgpCitFbnRlcmluZyBzdGF0ZSA2CitSZWR1Y2luZyBzdGFjayAwIGJ5IHJ1bGUgNCAobGluZSAyNik6CistPiBcJFwkID0gbnRlcm0gZCAoKQorRW50ZXJpbmcgc3RhdGUgNworUmVhZGluZyBhIHRva2VuOiBOb3cgYXQgZW5kIG9mIGlucHV0LgorU3RhY2sgMCBFbnRlcmluZyBzdGF0ZSA3CitOb3cgYXQgZW5kIG9mIGlucHV0LgorU3BsaXR0aW5nIG9mZiBzdGFjayAxIGZyb20gMC4KK1JlZHVjZWQgc3RhY2sgMSBieSBydWxlICMyOyBhY3Rpb24gZGVmZXJyZWQuICBOb3cgaW4gc3RhdGUgMi4KK1N0YWNrIDEgRW50ZXJpbmcgc3RhdGUgMgorTm93IGF0IGVuZCBvZiBpbnB1dC4KK1JlZHVjZWQgc3RhY2sgMCBieSBydWxlICMxOyBhY3Rpb24gZGVmZXJyZWQuICBOb3cgaW4gc3RhdGUgMi4KK01lcmdpbmcgc3RhY2sgMCBpbnRvIHN0YWNrIDEuCitTdGFjayAxIEVudGVyaW5nIHN0YXRlIDIKK05vdyBhdCBlbmQgb2YgaW5wdXQuCitSZW1vdmluZyBkZWFkIHN0YWNrcy4KK1JlbmFtZSBzdGFjayAxIC0+IDAuCitPbiBzdGFjayAwLCBzaGlmdGluZyB0b2tlbiBcJGVuZCAoKQorU3RhY2sgMCBub3cgaW4gc3RhdGUgIzUKK0FtYmlndWl0eSBkZXRlY3RlZC4KK09wdGlvbiAxLAorICBzdGFydCAtPiA8UnVsZSAxLCB0b2tlbnMgMSAuLiAzPgorICAgICdhJyA8dG9rZW5zIDEgLi4gMT4KKyAgICBiIDx0b2tlbnMgMiAuLiAyPgorICAgICdjJyA8dG9rZW5zIDMgLi4gMz4KKyAgICBkIDxlbXB0eT4KKworT3B0aW9uIDIsCisgIHN0YXJ0IC0+IDxSdWxlIDIsIHRva2VucyAxIC4uIDM+CisgICAgJ2EnIDx0b2tlbnMgMSAuLiAxPgorICAgIGIgPHRva2VucyAyIC4uIDI+CisgICAgJ2MnIDx0b2tlbnMgMyAuLiAzPgorICAgIGQgPGVtcHR5PgorCitzeW50YXggaXMgYW1iaWd1b3VzCitDbGVhbnVwOiBwb3BwaW5nIHRva2VuIFwkZW5kICgpCitDbGVhbnVwOiBwb3BwaW5nIHVucmVzb2x2ZWQgbnRlcm0gc3RhcnQgKCkKK0NsZWFudXA6IHBvcHBpbmcgbnRlcm0gZCAoKQorQ2xlYW51cDogcG9wcGluZyB0b2tlbiAnYycgKCkKK0NsZWFudXA6IHBvcHBpbmcgbnRlcm0gYiAoKQorQ2xlYW51cDogcG9wcGluZyB0b2tlbiAnYScgKCkKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL2dsci1yZWdyZXNzaW9uLmF0OjE3MTciCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8zNDkKKyNBVF9TVEFSVF8zNTAKK2F0X2ZuX2dyb3VwX2Jhbm5lciAzNTAgJ3B1c2guYXQ6MjQnIFwKKyAgIk1lbW9yeSBMZWFrIGZvciBFYXJseSBEZWxldGlvbiIgIiAgICAgICAgICAgICAgICAgIiAyMworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjM1MC4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKyMgUmVxdWlyZXMgVmFsZ3JpbmQuCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisKKyV7CisgICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICNkZWZpbmUgWVlJTklUREVQVEggMQorc3RhdGljIHZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZyk7CislfQorCislZGVmaW5lIGFwaS5wdXJlCislZGVmaW5lIGFwaS5wdXNoLXB1bGwgcHVzaAorCislJQorCitzdGFydDogJ2EnICdiJyAnYycgOworCislJQorCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEEgQyBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICAqLworc3RhdGljCit2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHl5cHN0YXRlICpwczsKKworICAvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgdHJ5IHRvIGZyZWUgcHMtPnl5c3MgaW4gdGhpcyBjYXNlLiAgKi8KKyAgcHMgPSB5eXBzdGF0ZV9uZXcgKCk7CisgIHl5cHN0YXRlX2RlbGV0ZSAocHMpOworCisgIC8qIHl5cHN0YXRlX2RlbGV0ZSB1c2VkIHRvIGxlYWsgcHMtPnl5c3MgaWYgdGhlIHN0YWNrIHdhcyByZWFsbG9jYXRlZCBidXQgdGhlCisgICAgIHBhcnNlIGRpZCBub3QgcmV0dXJuIG9uIHN1Y2Nlc3MsIHN5bnRheCBlcnJvciwgb3IgbWVtb3J5IGV4aGF1c3Rpb24uICAqLworICBwcyA9IHl5cHN0YXRlX25ldyAoKTsKKyAgYXNzZXJ0ICh5eXB1c2hfcGFyc2UgKHBzLCAnYScsIFlZX05VTEwpID09IFlZUFVTSF9NT1JFKTsKKyAgeXlwc3RhdGVfZGVsZXRlIChwcyk7CisKKyAgcHMgPSB5eXBzdGF0ZV9uZXcgKCk7CisgIGFzc2VydCAoeXlwdXNoX3BhcnNlIChwcywgJ2EnLCBZWV9OVUxMKSA9PSBZWVBVU0hfTU9SRSk7CisgIGFzc2VydCAoeXlwdXNoX3BhcnNlIChwcywgJ2InLCBZWV9OVUxMKSA9PSBZWVBVU0hfTU9SRSk7CisgIHl5cHN0YXRlX2RlbGV0ZSAocHMpOworCisgIHJldHVybiAwOworfQorX0FURU9GCisKKworCisKK2lmIHRlc3QgeCIkQklTT05fVEVTVF9YTUwiID0geDEgJiYgdGVzdCB4IiRYU0xUUFJPQyIgIT0geCIiOyB0aGVuCisgIGF0X3NhdmVfc3BlY2lhbF9maWxlcworICBta2RpciB4bWwtdGVzdHMKKyAgICAjIERvbid0IGNvbWJpbmUgdGhlc2UgQmlzb24gaW52b2NhdGlvbnMgc2luY2Ugd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgIyAtLXJlcG9ydD1hbGwgaXNuJ3QgcmVxdWlyZWQgdG8gZ2V0IHRoZSBmdWxsIFhNTCBmaWxlLgorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcHVzaC5hdDo3MzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInB1c2guYXQ6NzMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9wdXNoLmF0OjczIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcHVzaC5hdDo3MzogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgInB1c2guYXQ6NzMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9wdXNoLmF0OjczIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICAgIGNwIHhtbC10ZXN0cy90ZXN0Lm91dHB1dCBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3B1c2guYXQ6NzM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJwdXNoLmF0OjczIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3B1c2guYXQ6NzMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHNvcnQgeG1sLXRlc3RzL3Rlc3QuZG90ID4gZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9wdXNoLmF0OjczOiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicHVzaC5hdDo3MyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9wdXNoLmF0OjczIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBybSAtcmYgeG1sLXRlc3RzIGV4cG91dAorICBhdF9yZXN0b3JlX3NwZWNpYWxfZmlsZXMKIGZpCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcHVzaC5hdDo3MzogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicHVzaC5hdDo3MyIKKyggJGF0X2NoZWNrX3RyYWNlOyBiaXNvbiAtbyBpbnB1dC5jIGlucHV0LnkKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcHVzaC5hdDo3MyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CiAKLSMgTm93IHB1dCBza2lwcyBpbiB0aGUgbWl4LgotY2FzZSAkYXRfc2tpcF9jb3VudCBpbgotICAwKSA7OwotICAxKSBhdF9yZXN1bHQ9IiRhdF9yZXN1bHQKLTEgdGVzdCB3YXMgc2tpcHBlZC4iIDs7Ci0gICopIGF0X3Jlc3VsdD0iJGF0X3Jlc3VsdAotJGF0X3NraXBfY291bnQgdGVzdHMgd2VyZSBza2lwcGVkLiIgOzsKLWVzYWMKIAotaWYgdGVzdCAkYXRfdW5leHBlY3RlZF9jb3VudCA9IDA7IHRoZW4KLSAgZWNobyAiJGF0X3Jlc3VsdCIKLSAgZWNobyAiJGF0X3Jlc3VsdCIgPiY1Ci1lbHNlCi0gIGVjaG8gIkVSUk9SOiAkYXRfcmVzdWx0IiA+JjIKLSAgZWNobyAiRVJST1I6ICRhdF9yZXN1bHQiID4mNQotICB7Ci0gICAgZWNobwotICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgU3VtbWFyeSBvZiB0aGUgZmFpbHVyZXMuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3B1c2guYXQ6NzQ6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJwdXNoLmF0Ojc0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRCSVNPTl9DX1dPUktTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9wdXNoLmF0Ojc0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICAgICMgU3VtbWFyeSBvZiBmYWlsZWQgYW5kIHNraXBwZWQgdGVzdHMuCi0gICAgaWYgdGVzdCAkYXRfZmFpbF9jb3VudCAhPSAwOyB0aGVuCi0gICAgICBlY2hvICJGYWlsZWQgdGVzdHM6IgotICAgICAgJFNIRUxMICQwICRhdF9mYWlsX2xpc3QgLS1saXN0Ci0gICAgICBlY2hvCi0gICAgZmkKLSAgICBpZiB0ZXN0ICRhdF9za2lwX2NvdW50ICE9IDA7IHRoZW4KLSAgICAgIGVjaG8gIlNraXBwZWQgdGVzdHM6IgotICAgICAgJFNIRUxMICQwICRhdF9za2lwX2xpc3QgLS1saXN0Ci0gICAgICBlY2hvCi0gICAgZmkKLSAgICBpZiB0ZXN0ICRhdF94cGFzc19jb3VudCAhPSAwOyB0aGVuCi0gICAgICBlY2hvICJVbmV4cGVjdGVkIHBhc3NlczoiCi0gICAgICAkU0hFTEwgJDAgJGF0X3hwYXNzX2xpc3QgLS1saXN0Ci0gICAgICBlY2hvCi0gICAgZmkKLSAgICBpZiB0ZXN0ICRhdF9mYWlsX2NvdW50ICE9IDA7IHRoZW4KLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIERldGFpbGVkIGZhaWxlZCB0ZXN0cy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICAgZWNobwotICAgICAgZm9yIGF0X2dyb3VwIGluICRhdF9mYWlsX2xpc3QKLSAgICAgIGRvCi0gICAgICAgICMgTm9ybWFsaXplIHRoZSB0ZXN0IGdyb3VwIG51bWJlci4KLSAgICAgICAgYXRfZ3JvdXBfbm9ybWFsaXplZD1gZXhwciAiMDAwMDAkYXRfZ3JvdXAiIDogIi4qXCgkYXRfZm9ybWF0XCkiYAotICAgICAgICAjIENyZWF0ZSBhIGZyZXNoIGRpcmVjdG9yeSBmb3IgdGhlIG5leHQgdGVzdCBncm91cCwgYW5kIGVudGVyLgotICAgICAgICBhdF9ncm91cF9kaXI9JGF0X3N1aXRlX2Rpci8kYXRfZ3JvdXBfbm9ybWFsaXplZAotICAgICAgICBhdF9ncm91cF9sb2c9JGF0X2dyb3VwX2Rpci8kYXNfbWUubG9nCi0gICAgICAgIGNhdCAkYXRfZ3JvdXBfbG9nCi0gICAgICAgIGVjaG8KLSAgICAgIGRvbmUKLSAgICAgIGVjaG8KLSAgICBmaQotICAgIGlmIHRlc3QgLW4gIiRhdF90b3Bfc3JjZGlyIjsgdGhlbgotICAgICAgc2VkICdoO3MvLi8tL2c7cy9eLi4uLyMjIC87cy8uLi4kLyAjIy87cDt4O3A7eCcgPDxfQVNCT1gKLSMjICRhdF90b3BfYnVpbGRkaXIvY29uZmlnLmxvZyAjIwotX0FTQk9YCi0gICAgICBzZWQgJ3MvXi98IC8nICRhdF90b3BfYnVpbGRkaXIvY29uZmlnLmxvZwotICAgICAgZWNobwotICAgIGZpCi0gIH0gPiY1Cit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcHVzaC5hdDo3NDogXCRDQyBcJENGTEFHUyBcJENQUEZMQUdTIFwkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jIFwkTElCUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMiICJwdXNoLmF0Ojc0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9wdXNoLmF0Ojc0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBzZWQgJ2g7cy8uLy0vZztzL14uLi4vIyMgLztzLy4uLiQvICMjLztwO3g7cDt4JyA8PF9BU0JPWAotIyMgJGFzX21lLmxvZyB3YXMgY3JlYXRlZC4gIyMKLV9BU0JPWAoreyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3B1c2guYXQ6NzU6ICBcJFBSRVBBUlNFUiAuL2lucHV0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICIgJFBSRVBBUlNFUiAuL2lucHV0IiAicHVzaC5hdDo3NSIKKyggJGF0X2NoZWNrX3RyYWNlOyAgJFBSRVBBUlNFUiAuL2lucHV0CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IHRlZSBzdGRlcnIgPCIkYXRfc3RkZXJyIgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9wdXNoLmF0Ojc1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAotICBlY2hvCi0gIGVjaG8gIlBsZWFzZSBzZW5kIFxgJGFzX21lLmxvZycgYW5kIGFsbCBpbmZvcm1hdGlvbiB5b3UgdGhpbmsgbWlnaHQgaGVscDoiCi0gIGVjaG8KLSAgZWNobyAiICAgVG86IDxidWctYmlzb25AZ251Lm9yZz4iCi0gIGVjaG8gIiAgIFN1YmplY3Q6IFtHTlUgQmlzb24gMi4zXSAkYXNfbWU6JGF0X2ZhaWxfbGlzdCR7YXRfZmFpbF9saXN0OisgZmFpbGVkJHthdF94cGFzc19saXN0OissfX0kYXRfeHBhc3NfbGlzdCR7YXRfeHBhc3NfbGlzdDorIHBhc3NlZCB1bmV4cGVjdGVkbHl9IgotICBlY2hvCi0gIGlmIHRlc3QgJGF0X2RlYnVnX3AgPSBmYWxzZTsgdGhlbgotICAgIGVjaG8KLSAgICBlY2hvICdZb3UgbWF5IGludmVzdGlnYXRlIGFueSBwcm9ibGVtIGlmIHlvdSBmZWVsIGFibGUgdG8gZG8gc28sIGluIHdoaWNoJwotICAgIGVjaG8gJ2Nhc2UgdGhlIHRlc3Qgc3VpdGUgcHJvdmlkZXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LicKLSAgICBlY2hvCi0gIGZpCi0gICAgZXhpdCAxCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcHVzaC5hdDo3NTogc2VkID4mMiAtZSAnL15wcm9maWxpbmc6Lio6TWVyZ2UgbWlzbWF0Y2ggZm9yIHN1bW1hcmllcy9kJyBzdGRlcnIiCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICJwdXNoLmF0Ojc1IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3B1c2guYXQ6NzUiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8zNTAKKyNBVF9TVEFSVF8zNTEKK2F0X2ZuX2dyb3VwX2Jhbm5lciAzNTEgJ3B1c2guYXQ6ODMnIFwKKyAgIk11bHRpcGxlIGltcHVyZSBpbnN0YW5jZXMiICIgICAgICAgICAgICAgICAgICAgICAgIiAyMworYXRfeGZhaWw9bm8KKygKKyAgJGFzX2VjaG8gIjM1MS4gJGF0X3NldHVwX2xpbmU6IHRlc3RpbmcgJGF0X2Rlc2MgLi4uIgorICAkYXRfdHJhY2VvbgorCisKKworCisKKworY2F0ID5pbnB1dC55IDw8J19BVEVPRicKKyVjb2RlIHRvcCB7CisjaW5jbHVkZSA8Y29uZmlnLmg+CisvKiBXZSBkb24ndCBuZWVkIHBlcmZlY3QgZnVuY3Rpb25zIGZvciB0aGVzZSB0ZXN0cy4gKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiByZWFsbG9jCit9CisKKworJXsKKyAgI2luY2x1ZGUgPGFzc2VydC5oPgorICAjaW5jbHVkZSA8c3RkaW8uaD4KK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKCBjb25zdCBjaGFyICptc2cpOworc3RhdGljIGludCB5eWxleCAodm9pZCk7CislfQorCislZGVmaW5lIGFwaS5wdXNoLXB1bGwgYm90aAorCislJQorCitzdGFydDogOworCislJQorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBBIEMgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYwordm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbXNnKTsKK30KKyNpbmNsdWRlIDxhc3NlcnQuaD4KK3N0YXRpYworaW50IHl5bGV4ICh2b2lkKQoreworICBzdGF0aWMgY2hhciBjb25zdCBpbnB1dFtdID0gIiI7CisgIHN0YXRpYyBzaXplX3QgdG9rbnVtID0gMDsKKyAgaW50IHJlczsKKyAgOworICBhc3NlcnQgKHRva251bSA8IHNpemVvZiBpbnB1dCAvIHNpemVvZiBpbnB1dFswXSk7CisgIHJlcyA9IGlucHV0W3Rva251bSsrXTsKKyAgOworICByZXR1cm4gcmVzOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgMjsgKytpKQorICAgIHsKKyAgICAgIHl5cHN0YXRlICpwcyA9IHl5cHN0YXRlX25ldyAoKTsKKyAgICAgIGFzc2VydCAocHMpOworICAgICAgYXNzZXJ0ICh5eXBzdGF0ZV9uZXcgKCkgPT0gWVlfTlVMTCk7CisgICAgICBhc3NlcnQgKHl5cGFyc2UgKCkgPT0gMik7CisgICAgICB5eWNoYXIgPSAwOworICAgICAgYXNzZXJ0ICh5eXB1c2hfcGFyc2UgKHBzKSA9PSAwKTsKKyAgICAgIGFzc2VydCAoeXlwc3RhdGVfbmV3ICgpID09IFlZX05VTEwpOworICAgICAgYXNzZXJ0ICh5eXBhcnNlICgpID09IDIpOworICAgICAgeXlwc3RhdGVfZGVsZXRlIChwcyk7CisgICAgfQorCisgIHJldHVybiAwOworfQorX0FURU9GCisKKworCitpZiB0ZXN0IHgiJEJJU09OX1RFU1RfWE1MIiA9IHgxICYmIHRlc3QgeCIkWFNMVFBST0MiICE9IHgiIjsgdGhlbgorICBhdF9zYXZlX3NwZWNpYWxfZmlsZXMKKyAgbWtkaXIgeG1sLXRlc3RzCisgICAgIyBEb24ndCBjb21iaW5lIHRoZXNlIEJpc29uIGludm9jYXRpb25zIHNpbmNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICMgLS1yZXBvcnQ9YWxsIGlzbid0IHJlcXVpcmVkIHRvIGdldCB0aGUgZnVsbCBYTUwgZmlsZS4KKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3B1c2guYXQ6MTMzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcmVwb3J0PWFsbCAtLXJlcG9ydC1maWxlPXhtbC10ZXN0cy90ZXN0Lm91dHB1dCBcXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhbiBlbWJlZGRlZCBuZXdsaW5lJyAicHVzaC5hdDoxMzMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXAorICAgICAgICAgICAgICAgICAgLS1ncmFwaD14bWwtdGVzdHMvdGVzdC5kb3QgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9wdXNoLmF0OjEzMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3B1c2guYXQ6MTMzOiBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0teG1sPXhtbC10ZXN0cy90ZXN0LnhtbCAtbyBpbnB1dC5jIGlucHV0LnkiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIlZBTEdSSU5EX09QVFM9XCIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IiAicHVzaC5hdDoxMzMiCisoICRhdF9jaGVja190cmFjZTsgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCitlY2hvIHN0ZGVycjo7IGNhdCAiJGF0X3N0ZGVyciIKK2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0IgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9wdXNoLmF0OjEzMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgICBjcCB4bWwtdGVzdHMvdGVzdC5vdXRwdXQgZXhwb3V0CisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9wdXNoLmF0OjEzMzogXCRYU0xUUFJPQyBcXAorICAgICAgICAgICAgIFxgVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJcYC94c2x0L3htbDJ0ZXh0LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYSBgLi4uYCBjb21tYW5kIHN1YnN0aXR1dGlvbicgInB1c2guYXQ6MTMzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICRYU0xUUFJPQyBcCisgICAgICAgICAgICAgYFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyYC94c2x0L3htbDJ0ZXh0LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CiskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3B1c2guYXQ6MTMzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworICBzb3J0IHhtbC10ZXN0cy90ZXN0LmRvdCA+IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcHVzaC5hdDoxMzM6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwyZG90LnhzbCBcXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJwdXNoLmF0OjEzMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwyZG90LnhzbCBcCisgICAgICAgICAgICAgeG1sLXRlc3RzL3Rlc3QueG1sIHwgc29ydAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9wdXNoLmF0OjEzMyIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgcm0gLXJmIHhtbC10ZXN0cyBleHBvdXQKKyAgYXRfcmVzdG9yZV9zcGVjaWFsX2ZpbGVzCiBmaQotCi1leGl0IDAKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9wdXNoLmF0OjEzMzogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicHVzaC5hdDoxMzMiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3B1c2guYXQ6MTMzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KIAogCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcHVzaC5hdDoxMzM6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJwdXNoLmF0OjEzMyIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcHVzaC5hdDoxMzMiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcHVzaC5hdDoxMzM6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAicHVzaC5hdDoxMzMiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3B1c2guYXQ6MTMzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3B1c2guYXQ6MTMzOiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgInB1c2guYXQ6MTMzIgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3B1c2guYXQ6MTMzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3B1c2guYXQ6MTMzOiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInB1c2guYXQ6MTMzIgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3B1c2guYXQ6MTMzIgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislY29kZSB0b3AgeworI2luY2x1ZGUgPGNvbmZpZy5oPgorLyogV2UgZG9uJ3QgbmVlZCBwZXJmZWN0IGZ1bmN0aW9ucyBmb3IgdGhlc2UgdGVzdHMuICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWVtY21wCisjdW5kZWYgcmVhbGxvYworfQorCisKKyV7CisgICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CitzdGF0aWMgdm9pZCB5eWVycm9yICggY29uc3QgY2hhciAqbXNnKTsKKworJX0KKworJWRlZmluZSBhcGkucHVzaC1wdWxsIHB1c2gKKworJSUKKworc3RhcnQ6IDsKKworJSUKKyNpbmNsdWRlIDxzdGRpby5oPgorLyogQSBDIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCitzdGF0aWMKK3ZvaWQgeXllcnJvciAoIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Cit9CisKKworaW50CittYWluICh2b2lkKQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IDI7ICsraSkKKyAgICB7CisgICAgICB5eXBzdGF0ZSAqcHMgPSB5eXBzdGF0ZV9uZXcgKCk7CisgICAgICBhc3NlcnQgKHBzKTsKKyAgICAgIGFzc2VydCAoeXlwc3RhdGVfbmV3ICgpID09IFlZX05VTEwpOworICAgICAgOworICAgICAgeXljaGFyID0gMDsKKyAgICAgIGFzc2VydCAoeXlwdXNoX3BhcnNlIChwcykgPT0gMCk7CisgICAgICBhc3NlcnQgKHl5cHN0YXRlX25ldyAoKSA9PSBZWV9OVUxMKTsKKyAgICAgIDsKKyAgICAgIHl5cHN0YXRlX2RlbGV0ZSAocHMpOworICAgIH0KKworICByZXR1cm4gMDsKK30KK19BVEVPRgorCisKKworaWYgdGVzdCB4IiRCSVNPTl9URVNUX1hNTCIgPSB4MSAmJiB0ZXN0IHgiJFhTTFRQUk9DIiAhPSB4IiI7IHRoZW4KKyAgYXRfc2F2ZV9zcGVjaWFsX2ZpbGVzCisgIG1rZGlyIHhtbC10ZXN0cworICAgICMgRG9uJ3QgY29tYmluZSB0aGVzZSBCaXNvbiBpbnZvY2F0aW9ucyBzaW5jZSB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdAorICAjIC0tcmVwb3J0PWFsbCBpc24ndCByZXF1aXJlZCB0byBnZXQgdGhlIGZ1bGwgWE1MIGZpbGUuCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9wdXNoLmF0OjEzNDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXJlcG9ydD1hbGwgLS1yZXBvcnQtZmlsZT14bWwtdGVzdHMvdGVzdC5vdXRwdXQgXFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueSIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgInB1c2guYXQ6MTM0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1yZXBvcnQ9YWxsIC0tcmVwb3J0LWZpbGU9eG1sLXRlc3RzL3Rlc3Qub3V0cHV0IFwKKyAgICAgICAgICAgICAgICAgIC0tZ3JhcGg9eG1sLXRlc3RzL3Rlc3QuZG90IC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcHVzaC5hdDoxMzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHsgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9wdXNoLmF0OjEzNDogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXhtbD14bWwtdGVzdHMvdGVzdC54bWwgLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueSIgInB1c2guYXQ6MTM0IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS14bWw9eG1sLXRlc3RzL3Rlc3QueG1sIC1vIGlucHV0LmMgaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcHVzaC5hdDoxMzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgICAgY3AgeG1sLXRlc3RzL3Rlc3Qub3V0cHV0IGV4cG91dAorICB7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcHVzaC5hdDoxMzQ6IFwkWFNMVFBST0MgXFwKKyAgICAgICAgICAgICBcYFZBTEdSSU5EX09QVFM9XCJcJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gLS1wcmludC1kYXRhZGlyXGAveHNsdC94bWwydGV4dC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwiCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgJ2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb24nICJwdXNoLmF0OjEzNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkWFNMVFBST0MgXAorICAgICAgICAgICAgIGBWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpcmAveHNsdC94bWwydGV4dC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbAorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9OgorJGF0X2RpZmYgZXhwb3V0ICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9OgorYXRfZm5fY2hlY2tfc3RhdHVzIDAgJGF0X3N0YXR1cyAiJGF0X3NyY2Rpci9wdXNoLmF0OjEzNCIKKyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUKKyRhdF90cmFjZW9uOyB9CisKKyAgc29ydCB4bWwtdGVzdHMvdGVzdC5kb3QgPiBleHBvdXQKKyAgeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3B1c2guYXQ6MTM0OiBcJFhTTFRQUk9DIFxcCisgICAgICAgICAgICAgXGBWQUxHUklORF9PUFRTPVwiXCRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm9cIjsgZXhwb3J0IFZBTEdSSU5EX09QVFM7IGJpc29uIC0tcHJpbnQtZGF0YWRpclxgL3hzbHQveG1sMmRvdC54c2wgXFwKKyAgICAgICAgICAgICB4bWwtdGVzdHMvdGVzdC54bWwgfCBzb3J0IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9ub3RyYWNlICdhIGAuLi5gIGNvbW1hbmQgc3Vic3RpdHV0aW9uJyAicHVzaC5hdDoxMzQiCisoICRhdF9jaGVja190cmFjZTsgJFhTTFRQUk9DIFwKKyAgICAgICAgICAgICBgVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ubyI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiAtLXByaW50LWRhdGFkaXJgL3hzbHQveG1sMmRvdC54c2wgXAorICAgICAgICAgICAgIHhtbC10ZXN0cy90ZXN0LnhtbCB8IHNvcnQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2F0X2ZuX2RpZmZfZGV2bnVsbCAiJGF0X3N0ZGVyciIgfHwgYXRfZmFpbGVkPToKKyRhdF9kaWZmIGV4cG91dCAiJGF0X3N0ZG91dCIgfHwgYXRfZmFpbGVkPToKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcHVzaC5hdDoxMzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCisgIHJtIC1yZiB4bWwtdGVzdHMgZXhwb3V0CisgIGF0X3Jlc3RvcmVfc3BlY2lhbF9maWxlcworZmkKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9wdXNoLmF0OjEzNDogYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZSAicHVzaC5hdDoxMzQiCisoICRhdF9jaGVja190cmFjZTsgYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55CispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3B1c2guYXQ6MTM0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcHVzaC5hdDoxMzQ6IFwkQklTT05fQ19XT1JLUyIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiJEJJU09OX0NfV09SS1MiICJwdXNoLmF0OjEzNCIKKyggJGF0X2NoZWNrX3RyYWNlOyAkQklTT05fQ19XT1JLUworKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyBzdGRlcnI6OyBjYXQgIiRhdF9zdGRlcnIiCitlY2hvIHN0ZG91dDo7IGNhdCAiJGF0X3N0ZG91dCIKK2F0X2ZuX2NoZWNrX3N0YXR1cyAwICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvcHVzaC5hdDoxMzQiCiskYXRfZmFpbGVkICYmIGF0X2ZuX2xvZ19mYWlsdXJlCiskYXRfdHJhY2VvbjsgfQorCit7IHNldCAreAorJGFzX2VjaG8gIiRhdF9zcmNkaXIvcHVzaC5hdDoxMzQ6IFwkQ0MgXCRDRkxBR1MgXCRDUFBGTEFHUyBcJExERkxBR1MgLW8gaW5wdXQgaW5wdXQuYyBcJExJQlMiCithdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIiRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyAtbyBpbnB1dCBpbnB1dC5jICRMSUJTIiAicHVzaC5hdDoxMzQiCisoICRhdF9jaGVja190cmFjZTsgJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIC1vIGlucHV0IGlucHV0LmMgJExJQlMKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIgorZWNobyBzdGRvdXQ6OyBjYXQgIiRhdF9zdGRvdXQiCithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3B1c2guYXQ6MTM0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3B1c2guYXQ6MTM0OiAgXCRQUkVQQVJTRVIgLi9pbnB1dCIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAiICRQUkVQQVJTRVIgLi9pbnB1dCIgInB1c2guYXQ6MTM0IgorKCAkYXRfY2hlY2tfdHJhY2U7ICAkUFJFUEFSU0VSIC4vaW5wdXQKKykgPj4iJGF0X3N0ZG91dCIgMj4+IiRhdF9zdGRlcnIiIDU+Ji0KK2F0X3N0YXR1cz0kPyBhdF9mYWlsZWQ9ZmFsc2UKKyRhdF9jaGVja19maWx0ZXIKK2VjaG8gc3RkZXJyOjsgdGVlIHN0ZGVyciA8IiRhdF9zdGRlcnIiCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3B1c2guYXQ6MTM0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworeyBzZXQgK3gKKyRhc19lY2hvICIkYXRfc3JjZGlyL3B1c2guYXQ6MTM0OiBzZWQgPiYyIC1lICcvXnByb2ZpbGluZzouKjpNZXJnZSBtaXNtYXRjaCBmb3Igc3VtbWFyaWVzL2QnIHN0ZGVyciIKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgInB1c2guYXQ6MTM0IgorKCAkYXRfY2hlY2tfdHJhY2U7IHNlZCA+JjIgLWUgJy9ecHJvZmlsaW5nOi4qOk1lcmdlIG1pc21hdGNoIGZvciBzdW1tYXJpZXMvZCcgc3RkZXJyCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIiA1PiYtCithdF9zdGF0dXM9JD8gYXRfZmFpbGVkPWZhbHNlCiskYXRfY2hlY2tfZmlsdGVyCithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMCAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3B1c2guYXQ6MTM0IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKworCisKKworICBzZXQgK3gKKyAgJGF0X3RpbWVzX3AgJiYgdGltZXMgPiIkYXRfdGltZXNfZmlsZSIKKykgNT4mMSAyPiYxIDc+Ji0gfCBldmFsICRhdF90ZWVfcGlwZQorcmVhZCBhdF9zdGF0dXMgPCIkYXRfc3RhdHVzX2ZpbGUiCisjQVRfU1RPUF8zNTEKKyNBVF9TVEFSVF8zNTIKK2F0X2ZuX2dyb3VwX2Jhbm5lciAzNTIgJ3B1c2guYXQ6MTQ0JyBcCisgICJVbnN1cHBvcnRlZCBTa2VsZXRvbnMiICIgICAgICAgICAgICAgICAgICAgICAgICAgICIgMjMKK2F0X3hmYWlsPW5vCisoCisgICRhc19lY2hvICIzNTIuICRhdF9zZXR1cF9saW5lOiB0ZXN0aW5nICRhdF9kZXNjIC4uLiIKKyAgJGF0X3RyYWNlb24KKworCisKK2NhdCA+aW5wdXQueSA8PCdfQVRFT0YnCislZ2xyLXBhcnNlcgorJWRlZmluZSBhcGkucHVzaC1wdWxsIHB1c2gKKyUlCitzdGFydDogOworX0FURU9GCisKKworCisKK3sgc2V0ICt4CiskYXNfZWNobyAiJGF0X3NyY2Rpci9wdXNoLmF0OjE1NTogVkFMR1JJTkRfT1BUUz1cIlwkVkFMR1JJTkRfT1BUUyAtLWxlYWstY2hlY2s9c3VtbWFyeSAtLXNob3ctcmVhY2hhYmxlPW5vXCI7IGV4cG9ydCBWQUxHUklORF9PUFRTOyBiaXNvbiBpbnB1dC55IgorYXRfZm5fY2hlY2tfcHJlcGFyZV9keW5hbWljICJWQUxHUklORF9PUFRTPVwiJFZBTEdSSU5EX09QVFMgLS1sZWFrLWNoZWNrPXN1bW1hcnkgLS1zaG93LXJlYWNoYWJsZT1ub1wiOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueSIgInB1c2guYXQ6MTU1IgorKCAkYXRfY2hlY2tfdHJhY2U7IFZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbGVhay1jaGVjaz1zdW1tYXJ5IC0tc2hvdy1yZWFjaGFibGU9bm8iOyBleHBvcnQgVkFMR1JJTkRfT1BUUzsgYmlzb24gaW5wdXQueQorKSA+PiIkYXRfc3Rkb3V0IiAyPj4iJGF0X3N0ZGVyciIgNT4mLQorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorZWNobyA+PiIkYXRfc3RkZXJyIjsgJGFzX2VjaG8gImlucHV0Lnk6Mi45LTIxOiBlcnJvcjogJWRlZmluZSB2YXJpYWJsZSAnYXBpLnB1c2gtcHVsbCcgaXMgbm90IHVzZWQKKyIgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9kaWZmX2Rldm51bGwgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06CithdF9mbl9jaGVja19zdGF0dXMgMSAkYXRfc3RhdHVzICIkYXRfc3JjZGlyL3B1c2guYXQ6MTU1IgorJGF0X2ZhaWxlZCAmJiBhdF9mbl9sb2dfZmFpbHVyZQorJGF0X3RyYWNlb247IH0KKworCisKKyAgc2V0ICt4CisgICRhdF90aW1lc19wICYmIHRpbWVzID4iJGF0X3RpbWVzX2ZpbGUiCispIDU+JjEgMj4mMSA3PiYtIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorI0FUX1NUT1BfMzUyCmRpZmYgLS1naXQgYS90ZXN0cy90ZXN0c3VpdGUuYXQgYi90ZXN0cy90ZXN0c3VpdGUuYXQKaW5kZXggMTBiYjNkOC4uMmE1MjExYSAxMDA2NDQKLS0tIGEvdGVzdHMvdGVzdHN1aXRlLmF0CisrKyBiL3Rlc3RzL3Rlc3RzdWl0ZS5hdApAQCAtMSwzMCArMSwzNCBAQAotIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tNHRlIHRvIGNyZWF0ZSB0ZXN0c3VpdGUuIC0qLSBBdXRvdGVzdCAtKi0KKyMgVGVzdCBzdWl0ZSBmb3IgR05VIEJpc29uLgkJCQktKi0gQXV0b3Rlc3QgLSotCiAKLSMgVGVzdCBzdWl0ZSBmb3IgR05VIEJpc29uLgotIyBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwMC0yMDA0LCAyMDA2LTIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KIAotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0jIGFueSBsYXRlciB2ZXJzaW9uLgotCisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCiAjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KKyMKICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotIyAwMjExMC0xMzAxLCBVU0EuCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCiAKICMgVGVzdGluZyByZXNpc3RhbmNlIHRvIHVzZXIgYnVncy4KIG00X2luY2x1ZGUoW2lucHV0LmF0XSkKIAorIyBUZXN0aW5nIG5hbWVkIHJlZmVyZW5jZXMuCittNF9pbmNsdWRlKFtuYW1lZC1yZWZzLmF0XSkKKwogIyBUZXN0aW5nIG91dHB1dCBmaWxlIG5hbWVzLgogbTRfaW5jbHVkZShbb3V0cHV0LmF0XSkKIAorIyBUZXN0aW5nIHNrZWxldG9uIHN1cHBvcnQuCittNF9pbmNsdWRlKFtza2VsZXRvbnMuYXRdKQorCiAjIFRlc3RpbmcgdGhlIHBhcnQgb2YgdGhlIGVuZ2luZSB0aGF0IGNvbXB1dGVzIEZPTExPVyBldGMuCiBtNF9pbmNsdWRlKFtzZXRzLmF0XSkKIApAQCAtNTksOCArNjMsMTQgQEAKICMgU29tZSBDKysgc3BlY2lmaWMgdGVzdHMuCiBtNF9pbmNsdWRlKFtjKysuYXRdKQogCisjIEFuZCBzb21lIEphdmEgc3BlY2lmaWMgdGVzdHMuCittNF9pbmNsdWRlKFtqYXZhLmF0XSkKKwogIyBHTFIgdGVzdHM6CiAjIEMrKyB0eXBlcywgc2ltcGxpZmllZAogbTRfaW5jbHVkZShbY3h4LXR5cGUuYXRdKQogIyBSZWdyZXNzaW9uIHRlc3RzCiBtNF9pbmNsdWRlKFtnbHItcmVncmVzc2lvbi5hdF0pCisKKyMgUHVzaCBwYXJzaW5nIHNwZWNpZmljIHRlc3RzLgorbTRfaW5jbHVkZShbcHVzaC5hdF0pCmRpZmYgLS1naXQgYS90ZXN0cy90b3J0dXJlLmF0IGIvdGVzdHMvdG9ydHVyZS5hdAppbmRleCBmZjM3M2MyLi5hYzllOTFlIDEwMDY0NAotLS0gYS90ZXN0cy90b3J0dXJlLmF0CisrKyBiL3Rlc3RzL3RvcnR1cmUuYXQKQEAgLTEsMjAgKzEsMjAgQEAKICMgVG9ydHVyaW5nIEJpc29uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvdGVzdCAtKi0KLSMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCAyMDA0LTIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0jIGFueSBsYXRlciB2ZXJzaW9uLgotCisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCiAjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KKyMKICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotIyAwMjExMC0xMzAxLCBVU0EuCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCiBBVF9CQU5ORVIoW1tUb3J0dXJlIFRlc3RzLl1dKQogCkBAIC00Miw3ICs0Miw4IEBACiAjIENyZWF0ZSBGSUxFLU5BTUUsIGNvbnRhaW5pbmcgYSBzZWxmIGNoZWNraW5nIHBhcnNlciBmb3IgYSBodWdlCiAjIHRyaWFuZ3VsYXIgZ3JhbW1hci4KIG00X2RlZmluZShbQVRfREFUQV9UUklBTkdVTEFSX0dSQU1NQVJdLAotW0FUX0RBVEEoW1tnZW5ncmFtLnBsXV0sCitbQVRfQklTT05fT1BUSU9OX1BVU0hERUZTCitBVF9EQVRBKFtbZ2VuZ3JhbS5wbF1dLAogW1sjISAvdXNyL2Jpbi9wZXJsIC13CiAKIHVzZSBzdHJpY3Q7CkBAIC01NSw5ICs1NiwxMCBAQAogJXsKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi1zdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKLXN0YXRpYyB2b2lkIHl5ZXJyb3IgKGNvbnN0IGNoYXIgKm1zZyk7CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZGVmaW5lIE1BWCAkbWF4CitdQVRfWVlMRVhfREVDTEFSRVsKK11BVF9ZWUVSUk9SX0RFQ0xBUkVbCiAlfQogJXVuaW9uCiB7CkBAIC03Niw4ICs3OCw4IEBACiBwcmludCA8PEVPRjsKICUlCiBpbnB1dDoKLSAgZXhwICAgICAgICB7IGlmIChcQFN8QDEgIT0gMCkgYWJvcnQgKCk7IFwkXCQgPSBcQFN8QDE7IH0KLXwgaW5wdXQgZXhwICB7IGlmIChcQFN8QDIgIT0gXEBTfEAxICsgMSkgYWJvcnQgKCk7IFwkXCQgPSBcQFN8QDI7IH0KKyAgZXhwICAgICAgICB7IGFzc2VydCAoXEBTfEAxID09IDApOyBcJFwkID0gXEBTfEAxOyB9Cit8IGlucHV0IGV4cCAgeyBhc3NlcnQgKFxAU3xAMiA9PSBcQFN8QDEgKyAxKTsgXCRcJCA9IFxAU3xAMjsgfQogOwogCiBleHA6CkBAIC05NSwxNCArOTcsMTUgQEAKICAgfTsKIHByaW50ICI7XG4iOwogCi1wcmludCA8PEVPRjsKK3ByaW50IDw8XEVPRjsKICUlCitdQVRfWVlFUlJPUl9ERUZJTkVbCiBzdGF0aWMgaW50CiB5eWxleCAodm9pZCkKIHsKICAgc3RhdGljIGludCBpbm5lciA9IDE7CiAgIHN0YXRpYyBpbnQgb3V0ZXIgPSAwOwotICBpZiAob3V0ZXIgPiAkbWF4KQorICBpZiAob3V0ZXIgPiBNQVgpCiAgICAgcmV0dXJuIDA7CiAgIGVsc2UgaWYgKGlubmVyID4gb3V0ZXIpCiAgICAgewpAQCAtMTEyLDEzICsxMTUsNiBAQAogICAgIH0KICAgcmV0dXJuIGlubmVyKys7CiB9Ci0KLXN0YXRpYyB2b2lkCi15eWVycm9yIChjb25zdCBjaGFyICptc2cpCi17Ci0gIGZwcmludGYgKHN0ZGVyciwgIiVzXFxuIiwgbXNnKTsKLX0KLQogaW50CiBtYWluICh2b2lkKQogewpAQCAtMTI3LDggKzEyMyw5IEBACiB9CiBFT0YKIF1dKQorQVRfQklTT05fT1BUSU9OX1BPUERFRlMKIAotQVRfQ0hFQ0soW3BlcmwgLXcgLi9nZW5ncmFtLnBsICQyIHx8IGV4aXQgNzddLCAwLCBbc3Rkb3V0XSkKK0FUX0NIRUNLKFskUEVSTCAtdyAuL2dlbmdyYW0ucGwgJDIgfHwgZXhpdCA3N10sIDAsIFtzdGRvdXRdKQogbXYgc3Rkb3V0ICQxCiBdKQogCkBAIC0xNDQsNyArMTQxLDcgQEAKICMgV2l0aCA1MDAgYW5kIHRoZSBuZXcgcGFyc2VyLCB3aGljaCBjb25zdW1lIGZhciB0b28gbXVjaCBtZW1vcnksCiAjIGl0IGdldHMga2lsbGVkIHRvby4gIE9mIGNvdXJzZSB0aGUgcGFyc2VyIGlzIHRvIGJlIGNsZWFuZWQuCiBBVF9EQVRBX1RSSUFOR1VMQVJfR1JBTU1BUihbaW5wdXQueV0sIFsyMDBdKQotQVRfQ0hFQ0soW2Jpc29uIC12IC1vIGlucHV0LmMgaW5wdXQueV0pCitBVF9CSVNPTl9DSEVDS19OT19YTUwoWy12IC1vIGlucHV0LmMgaW5wdXQueV0pCiBBVF9DT01QSUxFKFtpbnB1dF0pCiBBVF9QQVJTRVJfQ0hFQ0soWy4vaW5wdXRdKQogCkBAIC0xNTcsNyArMTU0LDggQEAKICMgQ3JlYXRlIEZJTEUtTkFNRSwgY29udGFpbmluZyBhIHNlbGYgY2hlY2tpbmcgcGFyc2VyIGZvciBhIGh1Z2UKICMgaG9yaXpvbnRhbCBncmFtbWFyLgogbTRfZGVmaW5lKFtBVF9EQVRBX0hPUklaT05UQUxfR1JBTU1BUl0sCi1bQVRfREFUQShbW2dlbmdyYW0ucGxdXSwKK1tBVF9CSVNPTl9PUFRJT05fUFVTSERFRlMKK0FUX0RBVEEoW1tnZW5ncmFtLnBsXV0sCiBbWyMhIC91c3IvYmluL3BlcmwgLXcKIAogdXNlIHN0cmljdDsKQEAgLTE3MCw5ICsxNjgsOSBAQAogJXsKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi1zdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKLXN0YXRpYyB2b2lkIHl5ZXJyb3IgKGNvbnN0IGNoYXIgKm1zZyk7CisjZGVmaW5lIE1BWCAkbWF4CitdQVRfWVlMRVhfREVDTEFSRVsKK11BVF9ZWUVSUk9SX0RFQ0xBUkVbCiAlfQogCiAldG9rZW4KQEAgLTE5MywyMiArMTkxLDE4IEBACiAJKG1hcCB7ICJcIiRfXCIiIH0gKDEgLi4gJG1heCkpLCAiOyIpLAogICAiXG4iOwogCi1wcmludCA8PEVPRjsKK3ByaW50IDw8XEVPRjsKICUlCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitdQVRfWVlFUlJPUl9ERUZJTkVbCiBzdGF0aWMgaW50CiB5eWxleCAodm9pZCkKIHsKICAgc3RhdGljIGludCBjb3VudGVyID0gMTsKLSAgaWYgKGNvdW50ZXIgPiAkbWF4KQotICAgIHJldHVybiAwOwotICBlbHNlCi0gIHJldHVybiBjb3VudGVyKys7Ci19Ci0KLXN0YXRpYyB2b2lkCi15eWVycm9yIChjb25zdCBjaGFyICptc2cpCi17Ci0gIGZwcmludGYgKHN0ZGVyciwgIiVzXFxuIiwgbXNnKTsKKyAgaWYgKGNvdW50ZXIgPD0gTUFYKQorICAgIHJldHVybiBjb3VudGVyKys7CisgIGFzc2VydCAoY291bnRlcisrID09IE1BWCArIDEpOworICByZXR1cm4gMDsKIH0KIAogaW50CkBAIC0yMjAsOCArMjE0LDkgQEAKIEVPRgogXV0pCiAKLUFUX0NIRUNLKFtwZXJsIC13IC4vZ2VuZ3JhbS5wbCAkMiB8fCBleGl0IDc3XSwgMCwgW3N0ZG91dF0pCitBVF9DSEVDSyhbJFBFUkwgLXcgLi9nZW5ncmFtLnBsICQyIHx8IGV4aXQgNzddLCAwLCBbc3Rkb3V0XSkKIG12IHN0ZG91dCAkMQorQVRfQklTT05fT1BUSU9OX1BPUERFRlMKIF0pCiAKIApAQCAtMjQ5LDcgKzI0NCw3IEBACiAjIEFzayBmb3IgMjAwIE1pQiwgd2hpY2ggc2hvdWxkIGJlIHBsZW50eSBldmVuIG9uIGEgNjQtYml0IGhvc3QuCiBBVF9JTkNSRUFTRV9EQVRBX1NJWkUoMjA0MDAwKQogCi1BVF9DSEVDSyhbYmlzb24gLXYgLW8gaW5wdXQuYyBpbnB1dC55XSkKK0FUX0JJU09OX0NIRUNLX05PX1hNTChbLXYgLW8gaW5wdXQuYyBpbnB1dC55XSkKIEFUX0NPTVBJTEUoW2lucHV0XSkKIEFUX1BBUlNFUl9DSEVDSyhbLi9pbnB1dF0pCiAKQEAgLTI1NywxMiArMjUyLDEzIEBACiAKIAogCi0jIEFUX0RBVEFfTE9PS19BSEVBRF9UT0tFTlNfR1JBTU1BUihGSUxFLU5BTUUsIFNJWkUpCisjIEFUX0RBVEFfTE9PS0FIRUFEX1RPS0VOU19HUkFNTUFSKEZJTEUtTkFNRSwgU0laRSkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgQ3JlYXRlIEZJTEUtTkFNRSwgY29udGFpbmluZyBhIHNlbGYgY2hlY2tpbmcgcGFyc2VyIGZvciBhIGdyYW1tYXIKLSMgcmVxdWlyaW5nIFNJWkUgbG9vay1haGVhZCB0b2tlbnMuCi1tNF9kZWZpbmUoW0FUX0RBVEFfTE9PS19BSEVBRF9UT0tFTlNfR1JBTU1BUl0sCi1bQVRfREFUQShbW2dlbmdyYW0ucGxdXSwKKyMgcmVxdWlyaW5nIFNJWkUgbG9va2FoZWFkIHRva2Vucy4KK200X2RlZmluZShbQVRfREFUQV9MT09LQUhFQURfVE9LRU5TX0dSQU1NQVJdLAorW0FUX0JJU09OX09QVElPTl9QVVNIREVGUworQVRfREFUQShbW2dlbmdyYW0ucGxdXSwKIFtbIyEgL3Vzci9iaW4vcGVybCAtdwogCiB1c2Ugc3RyaWN0OwpAQCAtMjczLDEyICsyNjksMTMgQEAKICVlcnJvci12ZXJib3NlCiAlZGVidWcKICV7CitdQVRfREFUQV9TT1VSQ0VfUFJPTE9HVUVbCiAjIGluY2x1ZGUgPHN0ZGlvLmg+CiAjIGluY2x1ZGUgPHN0ZGxpYi5oPgogIyBpbmNsdWRlIDxhc3NlcnQuaD4KLQotc3RhdGljIGludCB5eWxleCAodm9pZCk7Ci1zdGF0aWMgdm9pZCB5eWVycm9yIChjb25zdCBjaGFyICptc2cpOworIyBkZWZpbmUgTUFYICRtYXgKK11BVF9ZWUxFWF9ERUNMQVJFWworXUFUX1lZRVJST1JfREVDTEFSRVsKICV9CiAldW5pb24KIHsKQEAgLTMyMywxNSArMzIwLDE5IEBACiAgICAgcHJpbnQgIm4kY291bnQ6IHRva2VuIHsgXCRcJCA9ICRjb3VudDsgfTtcbiI7CiAgIH07CiAKLXByaW50IDw8RU9GOworcHJpbnQgPDxcRU9GOwogJSUKK11BVF9ZWUVSUk9SX0RFRklORVsKIHN0YXRpYyBpbnQKIHl5bGV4ICh2b2lkKQogewogICBzdGF0aWMgaW50IHJldHVybl90b2tlbiA9IDE7CiAgIHN0YXRpYyBpbnQgY291bnRlciA9IDE7Ci0gIGlmIChjb3VudGVyID4gJG1heCkKLSAgICByZXR1cm4gMDsKKyAgaWYgKGNvdW50ZXIgPiBNQVgpCisgICAgeworICAgICAgYXNzZXJ0IChjb3VudGVyKysgPT0gTUFYICsgMSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CiAgIGlmIChyZXR1cm5fdG9rZW4pCiAgICAgewogICAgICAgcmV0dXJuX3Rva2VuID0gMDsKQEAgLTM0MSwxMiArMzQyLDYgQEAKICAgcmV0dXJuIGNvdW50ZXIrKzsKIH0KIAotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKGNvbnN0IGNoYXIgKm1zZykKLXsKLSAgZnByaW50ZiAoc3RkZXJyLCAiJXNcXG4iLCBtc2cpOwotfQotCiBpbnQKIG1haW4gKHZvaWQpCiB7CkBAIC0zNTYsMjQgKzM1MSwyNSBAQAogRU9GCiBdXSkKIAotQVRfQ0hFQ0soW3BlcmwgLXcgLi9nZW5ncmFtLnBsICQyIHx8IGV4aXQgNzddLCAwLCBbc3Rkb3V0XSkKK0FUX0NIRUNLKFskUEVSTCAtdyAuL2dlbmdyYW0ucGwgJDIgfHwgZXhpdCA3N10sIDAsIFtzdGRvdXRdKQogbXYgc3Rkb3V0ICQxCitBVF9CSVNPTl9PUFRJT05fUE9QREVGUwogXSkKIAogCiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIE1hbnkgbG9vay1haGVhZCB0b2tlbnMuICAjIworIyMgTWFueSBsb29rYWhlYWQgdG9rZW5zLiAgICMjCiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKIAotQVRfU0VUVVAoW01hbnkgbG9vay1haGVhZCB0b2tlbnNdKQorQVRfU0VUVVAoW01hbnkgbG9va2FoZWFkIHRva2Vuc10pCiAKLUFUX0RBVEFfTE9PS19BSEVBRF9UT0tFTlNfR1JBTU1BUihbaW5wdXQueV0sIFsxMDAwXSkKK0FUX0RBVEFfTE9PS0FIRUFEX1RPS0VOU19HUkFNTUFSKFtpbnB1dC55XSwgWzEwMDBdKQogCiAjIEdOVSBtNCByZXF1aXJlcyBhYm91dCA3MCBNaUIgZm9yIHRoaXMgdGVzdCBvbiBhIDMyLWJpdCBob3N0LgogIyBBc2sgZm9yIDIwMCBNaUIsIHdoaWNoIHNob3VsZCBiZSBwbGVudHkgZXZlbiBvbiBhIDY0LWJpdCBob3N0LgogQVRfSU5DUkVBU0VfREFUQV9TSVpFKDIwNDAwMCkKIAotQVRfQ0hFQ0soW2Jpc29uIC12IC1vIGlucHV0LmMgaW5wdXQueV0pCitBVF9CSVNPTl9DSEVDSyhbLXYgLW8gaW5wdXQuYyBpbnB1dC55XSkKIEFUX0NPTVBJTEUoW2lucHV0XSkKIEFUX1BBUlNFUl9DSEVDSyhbLi9pbnB1dF0pCiAKQEAgLTM4MSw1OSArMzc3LDg0IEBACiAKIAogCi0jIEFUX0RBVEFfU1RBQ0tfVE9SVFVSRShDLVBST0xPR1VFKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQVRfREFUQV9TVEFDS19UT1JUVVJFKEMtUFJPTE9HVUUsIFtCSVNPTi1ERUNMU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBBIHBhcnNlciBzcGVjaWFsaXplZCBpbiB0b3J0dXJpbmcgdGhlIHN0YWNrIHNpemUuCiBtNF9kZWZpbmUoW0FUX0RBVEFfU1RBQ0tfVE9SVFVSRV0sCi1bIyBBIGdyYW1tYXIgb2YgcGFyZW5zIGdyb3dpbmcgdGhlIHN0YWNrIHRoYW5rcyB0byByaWdodCByZWN1cnNpb24uCitbQVRfQklTT05fT1BUSU9OX1BVU0hERUZTKFskMl0pCisjIEEgZ3JhbW1hciBvZiBwYXJlbnMgZ3Jvd2luZyB0aGUgc3RhY2sgdGhhbmtzIHRvIHJpZ2h0IHJlY3Vyc2lvbi4KICMgZXhwOgotQVRfREFUQShbaW5wdXQueV0sCitBVF9EQVRBX0dSQU1NQVIoW2lucHV0LnldLAogW1slewogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KIF0kMVsKLSAgc3RhdGljIGludCB5eWxleCAodm9pZCk7Ci0gIHN0YXRpYyB2b2lkIHl5ZXJyb3IgKGNvbnN0IGNoYXIgKm1zZyk7CisgIF1BVF9ZWUxFWF9ERUNMQVJFWworICBdQVRfWVlFUlJPUl9ERUNMQVJFWwogJX0KK10kMlsKICVlcnJvci12ZXJib3NlCiAlZGVidWcKICV0b2tlbiBXQUlUX0ZPUl9FT0YKICUlCiBleHA6IFdBSVRfRk9SX0VPRiBleHAgfCA7CiAlJQotc3RhdGljIHZvaWQKLXl5ZXJyb3IgKGNvbnN0IGNoYXIgKm1zZykKLXsKLSAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1zZyk7Ci19Ci0KK11BVF9ZWUVSUk9SX0RFRklORVsKKyNpbmNsdWRlIDxhc3NlcnQuaD4KIHN0YXRpYyBpbnQKIHl5bGV4ICh2b2lkKQogeworICBhc3NlcnQgKDAgPD0geXlsdmFsKTsKICAgaWYgKHl5bHZhbC0tKQogICAgIHJldHVybiBXQUlUX0ZPUl9FT0Y7CiAgIGVsc2UKICAgICByZXR1cm4gRU9GOwogfQogCisvKiBSZXR1cm4gYXJndlsxXSBhcyBhbiBpbnQuICovCitzdGF0aWMgaW50CitnZXRfYXJncyAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworICBpbnQgcmVzOworICBjaGFyICplbmRwOworICBhc3NlcnQgKGFyZ2MgPT0gMik7CisgIHJlcyA9IHN0cnRvbCAoYXJndlsxXSwgJmVuZHAsIDEwKTsKKyAgYXNzZXJ0IChhcmd2WzFdICE9IGVuZHApOworICBhc3NlcnQgKDAgPD0gcmVzKTsKKyAgYXNzZXJ0IChyZXMgPD0gSU5UX01BWCk7CisgIGFzc2VydCAoZXJybm8gIT0gRVJBTkdFKTsKKyAgcmV0dXJuIHJlczsKK30KKwogaW50CiBtYWluIChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7Ci0gIGNoYXIgKmVuZHA7Ci0gIGlmIChhcmdjICE9IDIpCi0gICAgYWJvcnQgKCk7Ci0gIHl5bHZhbCA9IHN0cnRvbCAoYXJndlsxXSwgJmVuZHAsIDEwKTsKLSAgaWYgKCEgKGFyZ3ZbMV0gIT0gZW5kcAotCSAmJiAwIDw9IHl5bHZhbCAmJiB5eWx2YWwgPD0gSU5UX01BWAotCSAmJiBlcnJubyAhPSBFUkFOR0UpKQotICAgIGFib3J0ICgpOwotICB5eWRlYnVnID0gMTsKLSAgcmV0dXJuIHl5cGFyc2UgKCk7CisgIFlZU1RZUEUgeXlsdmFsX2luaXQgPSBnZXRfYXJncyAoYXJnYywgYXJndik7CisgIGludCBzdGF0dXMgPSAwOworICBpbnQgY291bnQ7CitdbTRfYm1hdGNoKFskMl0sIFthcGkucHVzaC1wdWxsIGJvdGhdLAorW1sgIHl5cHN0YXRlICpwcyA9IHl5cHN0YXRlX25ldyAoKTsKK11dKVsgIHl5ZGVidWcgPSAxOworICBmb3IgKGNvdW50ID0gMDsgY291bnQgPCAyOyArK2NvdW50KQorICAgIHsKKyAgICAgIGludCBuZXdfc3RhdHVzOworICAgICAgeXlsdmFsID0geXlsdmFsX2luaXQ7CisgICAgICBuZXdfc3RhdHVzID0gXW00X2JtYXRjaChbJDJdLCBbYXBpLnB1c2gtcHVsbCBib3RoXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbeXlwdWxsX3BhcnNlIChwcyldXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbeXlwYXJzZSAoKV1dKVs7CisgICAgICBpZiAoY291bnQgPT0gMCkKKyAgICAgICAgc3RhdHVzID0gbmV3X3N0YXR1czsKKyAgICAgIGVsc2UKKyAgICAgICAgYXNzZXJ0IChuZXdfc3RhdHVzID09IHN0YXR1cyk7CisgICAgfV1tNF9ibWF0Y2goWyQyXSwgW2FwaS5wdXNoLXB1bGwgYm90aF0sW1sKKyAgeXlwc3RhdGVfZGVsZXRlIChwcyk7XV0pWworICByZXR1cm4gc3RhdHVzOwogfQogXV0pCi1BVF9DSEVDSyhbYmlzb24gLW8gaW5wdXQuYyBpbnB1dC55XSkKK0FUX0JJU09OX09QVElPTl9QT1BERUZTKFskMl0pCitBVF9CSVNPTl9DSEVDSyhbLW8gaW5wdXQuYyBpbnB1dC55XSkKIEFUX0NPTVBJTEUoW2lucHV0XSkKIF0pCiAKQEAgLTQ0NCwyMCArNDY1LDQwIEBACiAKIEFUX1NFVFVQKFtFeHBsb2RpbmcgdGhlIFN0YWNrIFNpemUgd2l0aCBBbGxvY2FdKQogCi1BVF9EQVRBX1NUQUNLX1RPUlRVUkUoW1sKK200X3B1c2hkZWYoW0FUX1VTRV9BTExPQ0FdLCBbWwogI2lmIChkZWZpbmVkIF9fR05VQ19fIHx8IGRlZmluZWQgX19CVUlMVElOX1ZBX0FSR19JTkNSIFwKICAgICAgfHwgZGVmaW5lZCBfQUlYIHx8IGRlZmluZWQgX01TQ19WRVIgfHwgZGVmaW5lZCBfQUxMT0NBX0gpCiAjIGRlZmluZSBZWVNUQUNLX1VTRV9BTExPQ0EgMQogI2VuZGlmCiBdXSkKIAorQVRfREFUQV9TVEFDS19UT1JUVVJFKFtBVF9VU0VfQUxMT0NBXSkKKwogIyBCZWxvdyB0aGUgbGltaXQgb2YgMjAwLgotQVRfUEFSU0VSX0NIRUNLKFsuL2lucHV0IDIwXSwgMCwgW10sIFtpZ25vcmVdKQorQVRfUEFSU0VSX0NIRUNLKFsuL2lucHV0IDIwXSwgMCwgW10sIFtpZ25vcmVdLAorICAgICAgICAgICAgICAgIFtbVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sb2ctZmQ9MSJdXSkKICMgVHdvIGVubGFyZ2VtZW50czogMiAqIDIgKiAyMDAuCi1BVF9QQVJTRVJfQ0hFQ0soWy4vaW5wdXQgOTAwXSwgMCwgW10sIFtpZ25vcmVdKQorQVRfUEFSU0VSX0NIRUNLKFsuL2lucHV0IDkwMF0sIDAsIFtdLCBbaWdub3JlXSwKKyAgICAgICAgICAgICAgICBbW1ZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbG9nLWZkPTEiXV0pCiAjIEZhaWxzOiBiZXlvbmQgdGhlIGxpbWl0IG9mIDEwLDAwMCAod2hpY2ggd2UgZG9uJ3QgcmVhY2ggYW55d2F5IHNpbmNlIHdlCiAjIG11bHRpcGx5IGJ5IHR3byBzdGFydGluZyBhdCAyMDAgPT4gNTEyMCBpcyB0aGUgbGFzdCBwb3NzaWJsZSkuCi1BVF9QQVJTRVJfQ0hFQ0soWy4vaW5wdXQgMTAwMDBdLCAyLCBbXSwgW2lnbm9yZV0pCitBVF9QQVJTRVJfQ0hFQ0soWy4vaW5wdXQgMTAwMDBdLCAyLCBbXSwgW2lnbm9yZV0sCisgICAgICAgICAgICAgICAgW1tWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxvZy1mZD0xIl1dKQorCisjIFRoZSBwdXNoIHBhcnNlciBjYW4ndCB1c2UgYWxsb2NhIHNpbmNlIHRoZSBzdGFja3MgY2FuJ3QgYmUgbG9jYWxzLiAgVGhpcyB0ZXN0CisjIGp1c3QgaGVscHMgZ3VhcmFudGVlIHdlIGRvbid0IGxldCB0aGUgWVlTVEFDS19VU0VfQUxMT0NBIGZlYXR1cmUgYWZmZWN0CisjIHB1c2ggcGFyc2Vycy4KK0FUX0RBVEFfU1RBQ0tfVE9SVFVSRShbQVRfVVNFX0FMTE9DQV0sCitbWyVkZWZpbmUgYXBpLnB1c2gtcHVsbCBib3RoCitdXSkKK0FUX1BBUlNFUl9DSEVDSyhbLi9pbnB1dCAyMF0sIDAsIFtdLCBbaWdub3JlXSwKKyAgICAgICAgICAgICAgICBbW1ZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbG9nLWZkPTEiXV0pCitBVF9QQVJTRVJfQ0hFQ0soWy4vaW5wdXQgOTAwXSwgMCwgW10sIFtpZ25vcmVdLAorICAgICAgICAgICAgICAgIFtbVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sb2ctZmQ9MSJdXSkKK0FUX1BBUlNFUl9DSEVDSyhbLi9pbnB1dCAxMDAwMF0sIDIsIFtdLCBbaWdub3JlXSwKKyAgICAgICAgICAgICAgICBbW1ZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbG9nLWZkPTEiXV0pCisKK200X3BvcGRlZihbQVRfVVNFX0FMTE9DQV0pCiAKIEFUX0NMRUFOVVAKIApAQCAtNDcwLDE0ICs1MTEsMzEgQEAKIAogQVRfU0VUVVAoW0V4cGxvZGluZyB0aGUgU3RhY2sgU2l6ZSB3aXRoIE1hbGxvY10pCiAKLUFUX0RBVEFfU1RBQ0tfVE9SVFVSRShbWyNkZWZpbmUgWVlTVEFDS19VU0VfQUxMT0NBIDBdXSkKK200X3B1c2hkZWYoW0FUX1VTRV9BTExPQ0FdLCBbWyNkZWZpbmUgWVlTVEFDS19VU0VfQUxMT0NBIDBdXSkKKworQVRfREFUQV9TVEFDS19UT1JUVVJFKFtBVF9VU0VfQUxMT0NBXSkKIAogIyBCZWxvdyB0aGUgbGltaXQgb2YgMjAwLgotQVRfUEFSU0VSX0NIRUNLKFsuL2lucHV0IDIwXSwgMCwgW10sIFtpZ25vcmVdKQorQVRfUEFSU0VSX0NIRUNLKFsuL2lucHV0IDIwXSwgMCwgW10sIFtpZ25vcmVdLAorICAgICAgICAgICAgICAgIFtbVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sb2ctZmQ9MSJdXSkKICMgVHdvIGVubGFyZ2VtZW50czogMiAqIDIgKiAyMDAuCi1BVF9QQVJTRVJfQ0hFQ0soWy4vaW5wdXQgOTAwXSwgMCwgW10sIFtpZ25vcmVdKQorQVRfUEFSU0VSX0NIRUNLKFsuL2lucHV0IDkwMF0sIDAsIFtdLCBbaWdub3JlXSwKKyAgICAgICAgICAgICAgICBbW1ZBTEdSSU5EX09QVFM9IiRWQUxHUklORF9PUFRTIC0tbG9nLWZkPTEiXV0pCiAjIEZhaWxzOiBiZXlvbmQgdGhlIGxpbWl0IG9mIDEwLDAwMCAod2hpY2ggd2UgZG9uJ3QgcmVhY2ggYW55d2F5IHNpbmNlIHdlCiAjIG11bHRpcGx5IGJ5IHR3byBzdGFydGluZyBhdCAyMDAgPT4gNTEyMCBpcyB0aGUgcG9zc2libGUpLgotQVRfUEFSU0VSX0NIRUNLKFsuL2lucHV0IDEwMDAwXSwgMiwgW10sIFtpZ25vcmVdKQorQVRfUEFSU0VSX0NIRUNLKFsuL2lucHV0IDEwMDAwXSwgMiwgW10sIFtpZ25vcmVdLAorICAgICAgICAgICAgICAgIFtbVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sb2ctZmQ9MSJdXSkKKworQVRfREFUQV9TVEFDS19UT1JUVVJFKFtBVF9VU0VfQUxMT0NBXSwKK1tbJWRlZmluZSBhcGkucHVzaC1wdWxsIGJvdGgKK11dKQorQVRfUEFSU0VSX0NIRUNLKFsuL2lucHV0IDIwXSwgMCwgW10sIFtpZ25vcmVdLAorICAgICAgICAgICAgICAgIFtbVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sb2ctZmQ9MSJdXSkKK0FUX1BBUlNFUl9DSEVDSyhbLi9pbnB1dCA5MDBdLCAwLCBbXSwgW2lnbm9yZV0sCisgICAgICAgICAgICAgICAgW1tWQUxHUklORF9PUFRTPSIkVkFMR1JJTkRfT1BUUyAtLWxvZy1mZD0xIl1dKQorQVRfUEFSU0VSX0NIRUNLKFsuL2lucHV0IDEwMDAwXSwgMiwgW10sIFtpZ25vcmVdLAorICAgICAgICAgICAgICAgIFtbVkFMR1JJTkRfT1BUUz0iJFZBTEdSSU5EX09QVFMgLS1sb2ctZmQ9MSJdXSkKKworbTRfcG9wZGVmKFtBVF9VU0VfQUxMT0NBXSkKIAogQVRfQ0xFQU5VUAo=